ZGlmZiAtLWdpdCBhLy5jb2Rlc3BlbGxpZ25vcmVsaW5lcyBiLy5jb2Rlc3BlbGxpZ25vcmVsaW5lcwppbmRleCBlMmIyOTA1Li45MDg5MmU3IDEwMDY0NAotLS0gYS8uY29kZXNwZWxsaWdub3JlbGluZXMKKysrIGIvLmNvZGVzcGVsbGlnbm9yZWxpbmVzCkBAIC0xLDMgKzEsOCBAQAogICAgIHZwOUFsbG93TGlzdC5nZXQoIlRlY2huaWNvbG9yIikuYWRkKCJTVElORyIpOwogICByZXR1cm4gU2tTdXJmYWNlOjpNYWtlUmVuZGVyVGFyZ2V0KGdyX2NvbnRleHRfLmdldCgpLCBTa0J1ZGdldGVkOjprTm8sCiAgICAgICAgICAgICB0ZXh0dXJlX2luZm9zLnB1c2hfYmFjayhUZXh0dXJlSW5mbygidXYiLCAiYmEiKSk7CisvKiAgSWYgemxpYiBpcyBhdmFpbGFibGUgYW5kIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIGZsYXRlIGNvbXByZXNzaW9uCisvLyBPbmNlcyByZXByZXNlbnQgaW5pdGlhbGl6YXRpb25zIHRoYXQgc2hvdWxkIG9ubHkgZXZlciBoYXBwZW4gb25jZSBwZXIKKyAgICAgIGdyX3RleHR1cmVfLnJlc2V0KG5ldyBHckJhY2tlbmRUZXh0dXJlKHRleHR1cmVfc2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZV9zaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JNaXBNYXBwZWQ6OmtObywgdGV4dHVyZV9pbmZvKSk7CmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCAxZmM1ODVmLi45YTVhNWNhIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTgsMyArOCw0IEBACiAuaWRlYQogL3ZlbnYvKgogX2NlcnRzLworLmNvdmVyYWdlCmRpZmYgLS1naXQgYS8ucHJlLWNvbW1pdC1jb25maWcueWFtbCBiLy5wcmUtY29tbWl0LWNvbmZpZy55YW1sCmluZGV4IGU4MGFjMjQuLjJlZTA5NjEgMTAwNjQ0Ci0tLSBhLy5wcmUtY29tbWl0LWNvbmZpZy55YW1sCisrKyBiLy5wcmUtY29tbWl0LWNvbmZpZy55YW1sCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgbmFtZTogY2hlY2sgaWYgc3RhcmJvYXJkIGludGVyZmFjZSBjaGFuZ2VkCiAgICAgICAgIGVudHJ5OiBweXRob24gLi9wcmVjb21taXRfaG9va3Mvd2Fybl90aGF0X3N0YXJib2FyZF9pbnRlcmZhY2VfY2hhbmdlZF93cmFwcGVyLnB5CiAgICAgICAgIGxhbmd1YWdlOiBweXRob24KLSAgICAgICAgZmlsZXM6ICdec3RhcmJvYXJkLyouaCQnCisgICAgICAgIGZpbGVzOiAnXnN0YXJib2FyZC9bXi9dK1wuaCQnCiAgICAgICAgIHN0YWdlczogW3B1c2hdCiAgICAgLSAgIGlkOiBkb3dubG9hZC1yZXNvdXJjZXMKICAgICAgICAgbmFtZTogZG93bmxvYWQgcmVzb3VyY2VzCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgZGVzY3JpcHRpb246IFJ1biBQeXRob24gMiB1bml0dGVzdHMKICAgICAgICAgZW50cnk6IHB5dGhvbiBwcmVjb21taXRfaG9va3MvcnVuX3B5dGhvbjJfdW5pdHRlc3RzLnB5CiAgICAgICAgIGxhbmd1YWdlOiBweXRob24KLSAgICAgICAgbGFuZ3VhZ2VfdmVyc2lvbjogcHl0aG9uMgorICAgICAgICBsYW5ndWFnZV92ZXJzaW9uOiBweXRob24yLjcKICAgICAgICAgYWRkaXRpb25hbF9kZXBlbmRlbmNpZXM6IFsnbW9jayddCiAgICAgICAgIHR5cGVzOiBbcHl0aG9uXQogICAgIC0gICBpZDogb3NzbGludApkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDhjYTg2MTguLjZjOTZhYTkgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTUwLDcgKzUwLDcgQEAKICAgICB3cml0YWJsZSBwYWdlcyBhcmUgbm90IGV4ZWN1dGFibGUgaXMgYSBzdHJvbmcgc2VjdXJpdHkgcHJvdG9jb2wgdGhhdCBjYW4KICAgICBwcmV2ZW50IGEgd2lkZSBzcGVjdHJ1bSBvZiBhdHRhY2tzLiBCdXQsIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgYWxzbyBtZWFucwogICAgIG5vIGFiaWxpdHkgdG8gSklULgotICAqICoqSGV0ZXJvZ2Vub3VzIERldmVsb3BtZW50IEVudmlyb25tZW50cy4qKiBUaGlzIGlzIHNsb3dseSBldmVuaW5nIG91dCwgYnV0CisgICogKipIZXRlcm9nZW5lb3VzIERldmVsb3BtZW50IEVudmlyb25tZW50cy4qKiBUaGlzIGlzIHNsb3dseSBldmVuaW5nIG91dCwgYnV0CiAgICAgYWxsIENFIGRldmljZXMgcnVuIG9uIGN1c3RvbSBoYXJkd2FyZSwgb2Z0ZW4gd2l0aCBwcm9wcmlldGFyeSBtZXRob2RzIG9mCiAgICAgYnVpbGRpbmcsIHBhY2thZ2luZywgZGVwbG95aW5nLCBhbmQgcnVubmluZyBwcm9ncmFtcy4gQWxtb3N0IGFsbCBDRSBkZXZpY2VzCiAgICAgaGF2ZSBBUk0gcHJvY2Vzc29ycyBpbnN0ZWFkIG9mIHRoZSBtb3JlIGZhbWlsaWFyIHg4Ni4gU29tZXRpbWVzIHRoZQpAQCAtMTQxLDcgKzE0MSw3IEBACiBBbGwgc291cmNlIGxvY2F0aW9ucyBhcmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIGBzcmMvYCAodGhpcyBkaXJlY3RvcnkpLgogCiAgICogYGJhc2UvYCAtIENocm9taXVtJ3MgQmFzZSBsaWJyYXJ5LiBDb250YWlucyBjb21tb24gdXRpbGl0aWVzLCBhbmQgYSBsaWdodAotICAgIHBsYXRmb3JtIGFic3RyYWN0aW9uLCB3aGljaCBoYXMgYmVlbiBzdXBlcmNlZGVkIGluIENvYmFsdCBieSBTdGFyYm9hcmQuCisgICAgcGxhdGZvcm0gYWJzdHJhY3Rpb24sIHdoaWNoIGhhcyBiZWVuIHN1cGVyc2VkZWQgaW4gQ29iYWx0IGJ5IFN0YXJib2FyZC4KICAgKiBgbmV0L2AgLSBDaHJvbWl1bSdzIE5ldHdvcmsgbGlicmFyeS4gQ29udGFpbnMgZW5vdWdoIGluZnJhc3RydWN0dXJlIHRvCiAgICAgc3VwcG9ydCB0aGUgbmV0d29yayBuZWVkcyBvZiBhbiBIVFRQIFVzZXItQWdlbnQgKGxpa2UgQ2hyb21pdW0gb3IgQ29iYWx0KSwKICAgICBhbiBIVFRQIHNlcnZlciwgYSBESUFMIHNlcnZlciwgYW5kIHNldmVyYWwgYWJzdHJhY3Rpb25zIGZvciBuZXR3b3JraW5nCkBAIC0xNDksNyArMTQ5LDcgQEAKICAgKiBgY29iYWx0L2AgLSBUaGUgaG9tZSBvZiBhbGwgQ29iYWx0IGFwcGxpY2F0aW9uIGNvZGUuIFRoaXMgaW5jbHVkZXMgdGhlIFdlYgogICAgIEltcGxlbWVudGF0aW9uLCBMYXlvdXQgRW5naW5lLCBSZW5kZXJlciwgYW5kIHNvbWUgb3RoZXIgQ29iYWx0LXNwZWNpZmljCiAgICAgZmVhdHVyZXMuCi0gICAgICAqIGBjb2JhbHQvYnVpbGQvYCAtIFRoZSBjb3JlIGJ1aWxkIGdlbmVyYXRpb24gc3lzdGVtLCBgZ3lwX2NvYmFsdGAsIGFuZAorICAgICAgKiBgY29iYWx0L2J1aWxkL2AgLSBUaGUgY29yZSBidWlsZCBnZW5lcmF0aW9uIHN5c3RlbSwgYGduLnB5YCwgYW5kCiAgICAgICAgIGNvbmZpZ3VyYXRpb25zIGZvciBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAoTk9URTogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZQogICAgICAgICBtb3N0bHkgbW92ZWQgaW50byBgc3RhcmJvYXJkL2AuKQogICAgICAgKiBgY29iYWx0L2RvYy9gIC0gQ29udGFpbnMgYSB3aWRlIHJhbmdlIG9mIGRldGFpbGVkIGluZm9ybWF0aW9uIGFuZCBndWlkZXMKQEAgLTE2MiwxMSArMTYyLDggQEAKICAgICBbYFJFQURNRS5tZGBdKHN0YXJib2FyZC9SRUFETUUubWQpIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0CiAgICAgcG9ydGluZyBTdGFyYm9hcmQgKGFuZCBDb2JhbHQpIHRvIGEgbmV3IHBsYXRmb3JtLgogICAqIGB0aGlyZF9wYXJ0eS9gIC0gV2hlcmUgYWxsIG9mIENvYmFsdCdzIHRoaXJkLXBhcnR5IGRlcGVuZGVuY2llcyBsaXZlLiBXZQotICAgIGRvbid0IG1lYW4gdG8gYmUgcGVyam9yYXRpdmUsIHdlIGxvdmUgb3VyIHRoaXJkLXBhcnR5IGxpYnJhcmllcyEgVGhpcworICAgIGRvbid0IG1lYW4gdG8gYmUgcGVqb3JhdGl2ZSwgd2UgbG92ZSBvdXIgdGhpcmQtcGFydHkgbGlicmFyaWVzISBUaGlzCiAgICAgbG9jYXRpb24gaXMgZGljdGF0ZWQgYnkgR29vZ2xlIE9TUyByZWxlYXNlIG1hbmFnZW1lbnQgcnVsZXMuLi4KLSAgICAgICogYHRoaXJkX3BhcnR5L3N0YXJib2FyZC9gIC0gVGhlIGxvY2F0aW9uIGZvciB0aGlyZC1wYXJ0eSBwb3J0cy4gVGhpcwotICAgICAgICBkaXJlY3Rvcnkgd2lsbCBiZSBzY2FubmVkIGF1dG9tYXRpY2FsbHkgYnkgZ3lwX2NvYmFsdCBmb3IgYXZhaWxhYmxlCi0gICAgICAgIFN0YXJib2FyZCBwb3J0cy4KIAogCiAjIyBCdWlsZGluZyBhbmQgUnVubmluZyB0aGUgQ29kZQpAQCAtMTk2LDQgKzE5Myw0IEBACiAKICMjIE9yaWdpbiBvZiB0aGlzIFJlcG9zaXRvcnkKIAotVGhpcyBpcyBhIGZvcmsgb2YgdGhlIGNocm9taXVtIHJlcG9zaXRvcnkgYXQgaHR0cDovL2dpdC5jaHJvbWl1bS5vcmcvZ2l0L2Nocm9taXVtLmdpdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK1RoaXMgaXMgYSBmb3JrIG9mIHRoZSBjaHJvbWl1bSByZXBvc2l0b3J5IGF0IGh0dHA6Ly9naXQuY2hyb21pdW0ub3JnL2dpdC9jaHJvbWl1bS5naXQKZGlmZiAtLWdpdCBhL19lbnYucHkgYi9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzk4NDEzLi4wMDAwMDAwCi0tLSBhL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJMb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLQotX0VOVklST05NRU5UX1BBVEggPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksICdzdGFyYm9hcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b29scycsICdlbnZpcm9ubWVudC5weScpKQotbG9hZF9zb3VyY2UoJ2Vudmlyb25tZW50JywgX0VOVklST05NRU5UX1BBVEgpCmRpZmYgLS1naXQgYS9iYXNlL0JVSUxELmduIGIvYmFzZS9CVUlMRC5nbgppbmRleCBjMGFmODk1Li44YTViYzY2IDEwMDY0NAotLS0gYS9iYXNlL0JVSUxELmduCisrKyBiL2Jhc2UvQlVJTEQuZ24KQEAgLTIyODMsMTAgKzIyODMsMTMgQEAKIAogICBjb25maWdzICs9IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOndleGl0X3RpbWVfZGVzdHJ1Y3RvcnMiIF0KICAgaWYgKCFpc19kZWJ1ZykgewotICAgIGlmICghaXNfc3RhcmJvYXJkKSB7CisgICAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgICAgY29uZmlncyAtPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c2l6ZSIgXQorICAgICAgY29uZmlncyArPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c3BlZWQiIF0KKyAgICB9IGVsc2UgewogICAgICAgY29uZmlncyAtPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpkZWZhdWx0X29wdGltaXphdGlvbiIgXQorICAgICAgY29uZmlncyArPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpvcHRpbWl6ZV9tYXgiIF0KICAgICB9Ci0gICAgY29uZmlncyArPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpvcHRpbWl6ZV9tYXgiIF0KICAgfQogfQogCkBAIC0yMzg4LDEwICsyMzkxLDEzIEBACiAgIH0KIAogICBpZiAoIWlzX2RlYnVnKSB7Ci0gICAgaWYgKCFpc19zdGFyYm9hcmQpIHsKKyAgICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgICBjb25maWdzIC09IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzaXplIiBdCisgICAgICBjb25maWdzICs9IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzcGVlZCIgXQorICAgIH0gZWxzZSB7CiAgICAgICBjb25maWdzIC09IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOmRlZmF1bHRfb3B0aW1pemF0aW9uIiBdCisgICAgICBjb25maWdzICs9IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOm9wdGltaXplX21heCIgXQogICAgIH0KLSAgICBjb25maWdzICs9IFsgIi8vYnVpbGQvY29uZmlnL2NvbXBpbGVyOm9wdGltaXplX21heCIgXQogICB9CiB9CiAKQEAgLTI0NTksMTAgKzI0NjUsMTMgQEAKICAgfQogCiAgIGlmICghaXNfZGVidWcpIHsKLSAgICBpZiAoIWlzX3N0YXJib2FyZCkgeworICAgIGlmIChpc19zdGFyYm9hcmQpIHsKKyAgICAgIGNvbmZpZ3MgLT0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNpemUiIF0KKyAgICAgIGNvbmZpZ3MgKz0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNwZWVkIiBdCisgICAgfSBlbHNlIHsKICAgICAgIGNvbmZpZ3MgLT0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6ZGVmYXVsdF9vcHRpbWl6YXRpb24iIF0KKyAgICAgIGNvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6b3B0aW1pemVfbWF4IiBdCiAgICAgfQotICAgIGNvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6b3B0aW1pemVfbWF4IiBdCiAgIH0KIAogICAjIFRPRE8oanNjaHVoKTogY3JidWcuY29tLzE2NzE4NyBmaXggc2l6ZV90IHRvIGludCB0cnVuY2F0aW9ucy4KQEAgLTI1NzksNiArMjU4OCw5IEBACiAKIGNvcHkoImJhc2VfdW5pdHRlc3RzX2J1bmRsZV9kYXRhIikgewogICB0ZXN0b25seSA9IHRydWUKKyAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIGluc3RhbGxfY29udGVudCA9IHRydWUKKyAgfQogICBzb3VyY2VzID0gWwogICAgICIvL3Rvb2xzL21ldHJpY3MvaGlzdG9ncmFtcy9lbnVtcy54bWwiLAogICAgICJ0ZXN0L2RhdGEvZmlsZV91dGlsL2JpbmFyeV9maWxlLmJpbiIsCkBAIC0yNjA0LDYgKzI2MTYsMTMgQEAKICAgICAidGVzdC9kYXRhL3NlcmlhbGl6ZXJfdGVzdF9ub3doaXRlc3BhY2UuanNvbiIsCiAgIF0KICAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIHNvdXJjZXMgKz0gWworICAgICAgInRlc3QvZGF0YS9maWxlX3V0aWwvcmVkLnBuZyIsCisgICAgICAidGVzdC9kYXRhL2ZpbGVfdmVyc2lvbl9pbmZvX3VuaXR0ZXN0L0ZpbGVWZXJzaW9uSW5mb1Rlc3QxLmRsbCIsCisgICAgICAidGVzdC9kYXRhL2ZpbGVfdmVyc2lvbl9pbmZvX3VuaXR0ZXN0L0ZpbGVWZXJzaW9uSW5mb1Rlc3QyLmRsbCIsCisgICAgICAidGVzdC9kYXRhL3BlX2ltYWdlL3BlX2ltYWdlX3Rlc3RfMzIuZGxsIiwKKyAgICAgICJ0ZXN0L2RhdGEvcGVfaW1hZ2UvcGVfaW1hZ2VfdGVzdF82NC5kbGwiLAorICAgIF0KICAgICBzb3VyY2VzIC09IFsgIi8vdG9vbHMvbWV0cmljcy9oaXN0b2dyYW1zL2VudW1zLnhtbCIgXQogICAgIG91dHB1dHMgPSBbICIkc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpci90ZXN0L2Jhc2Uve3tzb3VyY2VfdGFyZ2V0X3JlbGF0aXZlfX0iIF0KICAgfSBlbHNlIHsKQEAgLTMxNzUsNiArMzE5NCwxMiBAQAogICBwdWJsaWNfZGVwcyA9IFsKICAgICAiOmJhc2VfdW5pdHRlc3RzX2J1bmRsZV9kYXRhIiwKICAgXQorICBpZiAoaXNfc3RhcmJvYXJkKXsKKyAgICBjb250ZW50X2RlcHMgPSBbCisgICAgICAiOmJhc2VfdW5pdHRlc3RzX2J1bmRsZV9kYXRhIiwKKyAgICAgICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiwKKyAgICBdCisgIH0KIAogICBkYXRhID0gWwogICAgICJ0ZXN0L2RhdGEvIiwKZGlmZiAtLWdpdCBhL2Jhc2UvYmFzZS5neXAgYi9iYXNlL2Jhc2UuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWFmYjMwLi4wMDAwMDAwCi0tLSBhL2Jhc2UvYmFzZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDY5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY2hyb21pdW1fY29kZSc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiYXNlJywKLSAgICAgICd0eXBlJzogJzwoY29tcG9uZW50KScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvbmIvbmIuZ3lwOm5iJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9lenRpbWUvZXp0aW1lLmd5cDplenRpbWUnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0X3Byb2QnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbW9kcF9iNjQvbW9kcF9iNjQuZ3lwOm1vZHBfYjY0JywKLSAgICAgICAgJ2Jhc2Vfc3RhdGljJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbGxvY2F0b3IvYWxsb2NhdG9yX2NoZWNrLmNjJywKLSAgICAgICAgJ2FsbG9jYXRvci9hbGxvY2F0b3JfY2hlY2suaCcsCi0gICAgICAgICdhbGxvY2F0b3IvYWxsb2NhdG9yX2V4dGVuc2lvbi5jYycsCi0gICAgICAgICdhbGxvY2F0b3IvYWxsb2NhdG9yX2V4dGVuc2lvbi5oJywKLSAgICAgICAgIyBObyB1c2FnZSBmb3VuZCBmb3IgQ29iYWx0IHlldC4KLSAgICAgICAgIyAnYWxsb2NhdG9yL2FsbG9jYXRvcl9zaGltLmNjJywKLSAgICAgICAgIyAnYWxsb2NhdG9yL2FsbG9jYXRvcl9zaGltLmgnLAotICAgICAgICAnYXRfZXhpdC5jYycsCi0gICAgICAgICdhdF9leGl0LmgnLAotICAgICAgICAnYXRvbWljX3JlZl9jb3VudC5oJywKLSAgICAgICAgJ2F0b21pY19zZXF1ZW5jZV9udW0uaCcsCi0gICAgICAgICdhdG9taWNvcHMuaCcsCi0gICAgICAgICdhdG9taWNvcHNfaW50ZXJuYWxzX2F0b21pY3dvcmRfY29tcGF0LmgnLAotICAgICAgICAnYXRvbWljb3BzX2ludGVybmFsc19wb3J0YWJsZS5oJywKLSAgICAgICAgJ2F0b21pY29wc19pbnRlcm5hbHNfeDg2X21zdmMuaCcsCi0gICAgICAgICdhdXRvX3Jlc2V0LmgnLAotICAgICAgICAnYmFycmllcl9jbG9zdXJlLmNjJywKLSAgICAgICAgJ2JhcnJpZXJfY2xvc3VyZS5oJywKLSAgICAgICAgJ2Jhc2U2NC5jYycsCi0gICAgICAgICdiYXNlNjQuaCcsCi0gICAgICAgICdiYXNlNjR1cmwuY2MnLAotICAgICAgICAnYmFzZTY0dXJsLmgnLAotICAgICAgICAnYmFzZV9leHBvcnQuaCcsCi0gICAgICAgICdiYXNlX3BhdGhzLmNjJywKLSAgICAgICAgJ2Jhc2VfcGF0aHMuaCcsCi0gICAgICAgICdiYXNlX3BhdGhzX3N0YXJib2FyZC5jYycsCi0gICAgICAgICdiYXNlX3BhdGhzX3N0YXJib2FyZC5oJywKLSAgICAgICAgJ2Jhc2Vfc3dpdGNoZXMuaCcsCi0gICAgICAgICdiYXNlX3N3aXRjaGVzLmNjJywKLSAgICAgICAgJ2JpZ19lbmRpYW4uY2MnLAotICAgICAgICAnYmlnX2VuZGlhbi5oJywKLSAgICAgICAgJ2JpbmQuaCcsCi0gICAgICAgICdiaW5kX2hlbHBlcnMuaCcsCi0gICAgICAgICdiaW5kX2ludGVybmFsLmgnLAotICAgICAgICAnYml0X2Nhc3QuaCcsCi0gICAgICAgICdiaXRzLmgnLAotICAgICAgICAnYnVpbGRfdGltZS5jYycsCi0gICAgICAgICdidWlsZF90aW1lLmgnLAotICAgICAgICAnY2FsbGJhY2suaCcsCi0gICAgICAgICdjYWxsYmFja19mb3J3YXJkLmgnLAotICAgICAgICAnY2FsbGJhY2tfaGVscGVycy5jYycsCi0gICAgICAgICdjYWxsYmFja19oZWxwZXJzLmgnLAotICAgICAgICAnY2FsbGJhY2tfaW50ZXJuYWwuY2MnLAotICAgICAgICAnY2FsbGJhY2tfaW50ZXJuYWwuaCcsCi0gICAgICAgICdjYWxsYmFja19saXN0LmgnLAotICAgICAgICAnY2FuY2VsYWJsZV9jYWxsYmFjay5oJywKLSAgICAgICAgJ2NvbW1hbmRfbGluZS5jYycsCi0gICAgICAgICdjb21tYW5kX2xpbmUuaCcsCi0gICAgICAgICdjb21waWxlcl9zcGVjaWZpYy5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvYWRhcHRlcnMuaCcsCi0gICAgICAgICdjb250YWluZXJzL2NpcmN1bGFyX2RlcXVlLmgnLAotICAgICAgICAnY29udGFpbmVycy9mbGF0X21hcC5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvZmxhdF9zZXQuaCcsCi0gICAgICAgICdjb250YWluZXJzL2ZsYXRfdHJlZS5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvaGFzaF90YWJsZXMuaCcsCi0gICAgICAgICdjb250YWluZXJzL2lkX21hcC5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvbGlua2VkX2xpc3QuaCcsCi0gICAgICAgICdjb250YWluZXJzL21ydV9jYWNoZS5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvc21hbGxfbWFwLmgnLAotICAgICAgICAnY29udGFpbmVycy9zcGFuLmgnLAotICAgICAgICAnY29udGFpbmVycy9zdGFjay5oJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvc3RhY2tfY29udGFpbmVyLmgnLAotICAgICAgICAnY29udGFpbmVycy92ZWN0b3JfYnVmZmVyLmgnLAotICAgICAgICAjIE5vIHVzYWdlIGFyZSBmb3VuZCBmb3IgdGhlc2UgZmlsZXMgeWV0IGFuZCB0aGV5IGNyZWF0ZSBBUEkgbGVha3MuCi0gICAgICAgICMgJ2NwdS5jYycsCi0gICAgICAgICMgJ2NwdS5oJywKLSAgICAgICAgJ2NyaXRpY2FsX2Nsb3N1cmUuaCcsCi0KLSAgICAgICAgIyBUaGlzIGZpbGUgZGVwZW5kcyBvbiBmaWxlcyBmcm9tIHRoZSAnZGVidWcvYWxsb2NhdG9yJyB0YXJnZXQsCi0gICAgICAgICMgYnV0IHRoaXMgdGFyZ2V0IGRvZXMgbm90IGRlcGVuZCBvbiAnZGVidWcvYWxsb2NhdG9yJy4KLSAgICAgICAgJ2RlYnVnL2FjdGl2aXR5X3RyYWNrZXIuY2MnLAotICAgICAgICAnZGVidWcvYWN0aXZpdHlfdHJhY2tlci5oJywKLSAgICAgICAgJ2RlYnVnL2FsaWFzLmNjJywKLSAgICAgICAgJ2RlYnVnL2FsaWFzLmgnLAotICAgICAgICAnZGVidWcvYXNhbl9pbnZhbGlkX2FjY2Vzcy5jYycsCi0gICAgICAgICdkZWJ1Zy9hc2FuX2ludmFsaWRfYWNjZXNzLmgnLAotICAgICAgICAnZGVidWcvY3Jhc2hfbG9nZ2luZy5jYycsCi0gICAgICAgICdkZWJ1Zy9jcmFzaF9sb2dnaW5nLmgnLAotICAgICAgICAnZGVidWcvZGVidWdnZXIuY2MnLAotICAgICAgICAnZGVidWcvZGVidWdnZXIuaCcsCi0gICAgICAgICdkZWJ1Zy9kZWJ1Z2dlcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnZGVidWcvZHVtcF93aXRob3V0X2NyYXNoaW5nLmNjJywKLSAgICAgICAgJ2RlYnVnL2R1bXBfd2l0aG91dF9jcmFzaGluZy5oJywKLSAgICAgICAgJ2RlYnVnL2xlYWtfYW5ub3RhdGlvbnMuaCcsCi0gICAgICAgICdkZWJ1Zy9sZWFrX3RyYWNrZXIuaCcsCi0gICAgICAgICdkZWJ1Zy9wcm9maWxlci5jYycsCi0gICAgICAgICdkZWJ1Zy9wcm9maWxlci5oJywKLSAgICAgICAgJ2RlYnVnL3N0YWNrX3RyYWNlLmNjJywKLSAgICAgICAgJ2RlYnVnL3N0YWNrX3RyYWNlLmgnLAotICAgICAgICAnZGVidWcvc3RhY2tfdHJhY2Vfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ2RlYnVnL3Rhc2tfYW5ub3RhdG9yLmNjJywKLSAgICAgICAgJ2RlYnVnL3Rhc2tfYW5ub3RhdG9yLmgnLAotICAgICAgICAjIE5vIHVzYWdlIGZvdW5kIGZvciBDb2JhbHQgeWV0LgotICAgICAgICAjICdkZWJ1Zy90aHJlYWRfaGVhcF91c2FnZV90cmFja2VyLmNjJywKLSAgICAgICAgIyAnZGVidWcvdGhyZWFkX2hlYXBfdXNhZ2VfdHJhY2tlci5oJywKLSAgICAgICAgJ2RlZmVycmVkX3NlcXVlbmNlZF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICdkZWZlcnJlZF9zZXF1ZW5jZWRfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICdlbnZpcm9ubWVudC5jYycsCi0gICAgICAgICdlbnZpcm9ubWVudC5oJywKLSAgICAgICAgJ2V2ZW50X3R5cGVzLmgnLAotICAgICAgICAnZXhwb3J0X3RlbXBsYXRlLmgnLAotICAgICAgICAnZmVhdHVyZV9saXN0LmNjJywKLSAgICAgICAgJ2ZlYXR1cmVfbGlzdC5oJywKLSAgICAgICAgJ2ZpbGVfdmVyc2lvbl9pbmZvLmgnLAotICAgICAgICAnZmlsZXMvZGlyX3JlYWRlcl9mYWxsYmFjay5oJywKLSAgICAgICAgJ2ZpbGVzL2Rpcl9yZWFkZXJfc3RhcmJvYXJkLmgnLAotICAgICAgICAnZmlsZXMvZmlsZS5jYycsCi0gICAgICAgICdmaWxlcy9maWxlLmgnLAotICAgICAgICAnZmlsZXMvZmlsZV9lbnVtZXJhdG9yLmNjJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfZW51bWVyYXRvci5oJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfZW51bWVyYXRvcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnZmlsZXMvZmlsZV9wYXRoLmNjJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfcGF0aC5oJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfcGF0aF9jb25zdGFudHMuY2MnLAotICAgICAgICAnZmlsZXMvZmlsZV9wcm94eS5jYycsCi0gICAgICAgICdmaWxlcy9maWxlX3Byb3h5LmgnLAotICAgICAgICAnZmlsZXMvZmlsZV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnZmlsZXMvZmlsZV90cmFjaW5nLmNjJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfdHJhY2luZy5oJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfdXRpbC5jYycsCi0gICAgICAgICdmaWxlcy9maWxlX3V0aWwuaCcsCi0gICAgICAgICdmaWxlcy9maWxlX3V0aWxfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlci5jYycsCi0gICAgICAgICdmaWxlcy9pbXBvcnRhbnRfZmlsZV93cml0ZXIuaCcsCi0gICAgICAgICdmaWxlcy9wbGF0Zm9ybV9maWxlLmgnLAotICAgICAgICAnZmlsZXMvc2NvcGVkX2ZpbGUuY2MnLAotICAgICAgICAnZmlsZXMvc2NvcGVkX2ZpbGUuaCcsCi0gICAgICAgICdmaWxlcy9zY29wZWRfdGVtcF9kaXIuY2MnLAotICAgICAgICAnZmlsZXMvc2NvcGVkX3RlbXBfZGlyLmgnLAotICAgICAgICAnZm9ybWF0X21hY3Jvcy5oJywKLSAgICAgICAgJ2d0ZXN0X3Byb2RfdXRpbC5oJywKLSAgICAgICAgJ2d1aWQuY2MnLAotICAgICAgICAnZ3VpZC5oJywKLSAgICAgICAgJ2hhc2guY2MnLAotICAgICAgICAnaGFzaC5oJywKLSAgICAgICAgJ2pzb24vanNvbl9maWxlX3ZhbHVlX3NlcmlhbGl6ZXIuY2MnLAotICAgICAgICAnanNvbi9qc29uX2ZpbGVfdmFsdWVfc2VyaWFsaXplci5oJywKLSAgICAgICAgJ2pzb24vanNvbl9wYXJzZXIuY2MnLAotICAgICAgICAnanNvbi9qc29uX3BhcnNlci5oJywKLSAgICAgICAgJ2pzb24vanNvbl9yZWFkZXIuY2MnLAotICAgICAgICAnanNvbi9qc29uX3JlYWRlci5oJywKLSAgICAgICAgJ2pzb24vanNvbl9zdHJpbmdfdmFsdWVfc2VyaWFsaXplci5jYycsCi0gICAgICAgICdqc29uL2pzb25fc3RyaW5nX3ZhbHVlX3NlcmlhbGl6ZXIuaCcsCi0gICAgICAgICdqc29uL2pzb25fdmFsdWVfY29udmVydGVyLmNjJywKLSAgICAgICAgJ2pzb24vanNvbl92YWx1ZV9jb252ZXJ0ZXIuaCcsCi0gICAgICAgICdqc29uL2pzb25fd3JpdGVyLmNjJywKLSAgICAgICAgJ2pzb24vanNvbl93cml0ZXIuaCcsCi0gICAgICAgICdqc29uL3N0cmluZ19lc2NhcGUuY2MnLAotICAgICAgICAnanNvbi9zdHJpbmdfZXNjYXBlLmgnLAotICAgICAgICAnbGF6eV9pbnN0YW5jZS5oJywKLSAgICAgICAgJ2xhenlfaW5zdGFuY2VfaGVscGVycy5jYycsCi0gICAgICAgICdsYXp5X2luc3RhbmNlX2hlbHBlcnMuaCcsCi0gICAgICAgICdsb2NhdGlvbi5jYycsCi0gICAgICAgICdsb2NhdGlvbi5oJywKLSAgICAgICAgJ2xvZ2dpbmcuY2MnLAotICAgICAgICAnbG9nZ2luZy5oJywKLSAgICAgICAgJ21hY3Jvcy5oJywKLSAgICAgICAgJ21kNS5jYycsCi0gICAgICAgICdtZDUuaCcsCi0gICAgICAgICdtZW1vcnkvYWxpZ25lZF9tZW1vcnkuY2MnLAotICAgICAgICAnbWVtb3J5L2FsaWduZWRfbWVtb3J5LmgnLAotICAgICAgICAnbWVtb3J5L2ZyZWVfZGVsZXRlci5oJywKLSAgICAgICAgJ21lbW9yeS9saW5rZWRfcHRyLmgnLAotICAgICAgICAnbWVtb3J5L21lbW9yeV9jb29yZGluYXRvcl9jbGllbnQuY2MnLAotICAgICAgICAnbWVtb3J5L21lbW9yeV9jb29yZGluYXRvcl9jbGllbnQuaCcsCi0gICAgICAgICdtZW1vcnkvbWVtb3J5X2Nvb3JkaW5hdG9yX2NsaWVudF9yZWdpc3RyeS5jYycsCi0gICAgICAgICdtZW1vcnkvbWVtb3J5X2Nvb3JkaW5hdG9yX2NsaWVudF9yZWdpc3RyeS5oJywKLSAgICAgICAgJ21lbW9yeS9tZW1vcnlfY29vcmRpbmF0b3JfcHJveHkuY2MnLAotICAgICAgICAnbWVtb3J5L21lbW9yeV9jb29yZGluYXRvcl9wcm94eS5oJywKLSAgICAgICAgJ21lbW9yeS9tZW1vcnlfcHJlc3N1cmVfbGlzdGVuZXIuY2MnLAotICAgICAgICAnbWVtb3J5L21lbW9yeV9wcmVzc3VyZV9saXN0ZW5lci5oJywKLSAgICAgICAgJ21lbW9yeS9wdHJfdXRpbC5oJywKLSAgICAgICAgJ21lbW9yeS9yYXdfc2NvcGVkX3JlZnB0cl9taXNtYXRjaF9jaGVja2VyLmgnLAotICAgICAgICAnbWVtb3J5L3JlZl9jb3VudGVkLmNjJywKLSAgICAgICAgJ21lbW9yeS9yZWZfY291bnRlZC5oJywKLSAgICAgICAgJ21lbW9yeS9yZWZfY291bnRlZF9kZWxldGVfb25fc2VxdWVuY2UuaCcsCi0gICAgICAgICdtZW1vcnkvcmVmX2NvdW50ZWRfbWVtb3J5LmNjJywKLSAgICAgICAgJ21lbW9yeS9yZWZfY291bnRlZF9tZW1vcnkuaCcsCi0gICAgICAgICdtZW1vcnkvc2NvcGVkX3BvbGljeS5oJywKLSAgICAgICAgJ21lbW9yeS9zY29wZWRfcmVmcHRyLmgnLAotICAgICAgICAnbWVtb3J5L3NoYXJlZF9tZW1vcnkuaCcsCi0gICAgICAgICdtZW1vcnkvc2luZ2xldG9uLmgnLAotICAgICAgICAnbWVtb3J5L3dlYWtfcHRyLmNjJywKLSAgICAgICAgJ21lbW9yeS93ZWFrX3B0ci5oJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuY2MnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3BfY3VycmVudC5jYycsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wX2N1cnJlbnQuaCcsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wX2Zvcl9pby5oJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3BfZm9yX3VpLmgnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wX3Rhc2tfcnVubmVyLmgnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfcHVtcC5jYycsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvbWVzc2FnZV9wdW1wLmgnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfcHVtcF9kZWZhdWx0LmNjJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX3B1bXBfZGVmYXVsdC5oJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX3B1bXBfaW9fc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX3B1bXBfaW9fc3RhcmJvYXJkLmgnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfcHVtcF91aV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfcHVtcF91aV9zdGFyYm9hcmQuaCcsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvcGVuZGluZ190YXNrX3F1ZXVlLmNjJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9wZW5kaW5nX3Rhc2tfcXVldWUuaCcsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvdGltZXJfc2xhY2suaCcsCi0gICAgICAgICdtZXRyaWNzL2J1Y2tldF9yYW5nZXMuY2MnLAotICAgICAgICAnbWV0cmljcy9idWNrZXRfcmFuZ2VzLmgnLAotICAgICAgICAnbWV0cmljcy9kdW1teV9oaXN0b2dyYW0uY2MnLAotICAgICAgICAnbWV0cmljcy9kdW1teV9oaXN0b2dyYW0uaCcsCi0gICAgICAgICMgQ29iYWx0IGRvZXMgbm90IG5lZWQgZmllbGQgdHJpYWxzIHdoaWNoIGFyZSBleHBlcmltZW50YWwgZmVhdHVyZXMgaW4KLSAgICAgICAgIyBwcm9kdWN0aW9uLgotICAgICAgICAjICdtZXRyaWNzL2ZpZWxkX3RyaWFsLmNjJywKLSAgICAgICAgIyAnbWV0cmljcy9maWVsZF90cmlhbC5oJywKLSAgICAgICAgIyAnbWV0cmljcy9maWVsZF90cmlhbF9wYXJhbXMuY2MnLAotICAgICAgICAjICdtZXRyaWNzL2ZpZWxkX3RyaWFsX3BhcmFtcy5oJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtLmNjJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtLmgnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fYmFzZS5jYycsCi0gICAgICAgICdtZXRyaWNzL2hpc3RvZ3JhbV9iYXNlLmgnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fbWFjcm9zLmgnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fbWFjcm9zX2ludGVybmFsLmgnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fbWFjcm9zX2xvY2FsLmgnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fZnVuY3Rpb25zLmNjJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX2Z1bmN0aW9ucy5oJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX3NhbXBsZXMuY2MnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fc2FtcGxlcy5oJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX3NuYXBzaG90X21hbmFnZXIuY2MnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fc25hcHNob3RfbWFuYWdlci5oJywKLSAgICAgICAgJ21ldHJpY3MvbWV0cmljc19oYXNoZXMuY2MnLAotICAgICAgICAnbWV0cmljcy9tZXRyaWNzX2hhc2hlcy5oJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9oaXN0b2dyYW1fYWxsb2NhdG9yLmNjJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9oaXN0b2dyYW1fYWxsb2NhdG9yLmgnLAotICAgICAgICAnbWV0cmljcy9wZXJzaXN0ZW50X2hpc3RvZ3JhbV9zdG9yYWdlLmNjJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9oaXN0b2dyYW1fc3RvcmFnZS5oJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9tZW1vcnlfYWxsb2NhdG9yLmNjJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9tZW1vcnlfYWxsb2NhdG9yLmgnLAotICAgICAgICAnbWV0cmljcy9wZXJzaXN0ZW50X3NhbXBsZV9tYXAuY2MnLAotICAgICAgICAnbWV0cmljcy9wZXJzaXN0ZW50X3NhbXBsZV9tYXAuaCcsCi0gICAgICAgICdtZXRyaWNzL3NhbXBsZV9tYXAuY2MnLAotICAgICAgICAnbWV0cmljcy9zYW1wbGVfbWFwLmgnLAotICAgICAgICAnbWV0cmljcy9zYW1wbGVfdmVjdG9yLmNjJywKLSAgICAgICAgJ21ldHJpY3Mvc2FtcGxlX3ZlY3Rvci5oJywKLSAgICAgICAgJ21ldHJpY3Mvc3BhcnNlX2hpc3RvZ3JhbS5jYycsCi0gICAgICAgICdtZXRyaWNzL3NwYXJzZV9oaXN0b2dyYW0uaCcsCi0gICAgICAgICdtZXRyaWNzL3N0YXRpc3RpY3NfcmVjb3JkZXIuY2MnLAotICAgICAgICAnbWV0cmljcy9zdGF0aXN0aWNzX3JlY29yZGVyLmgnLAotICAgICAgICAnb2JzZXJ2ZXJfbGlzdC5oJywKLSAgICAgICAgJ29ic2VydmVyX2xpc3RfaW50ZXJuYWwuY2MnLAotICAgICAgICAnb2JzZXJ2ZXJfbGlzdF9pbnRlcm5hbC5oJywKLSAgICAgICAgJ29ic2VydmVyX2xpc3RfdGhyZWFkc2FmZS5jYycsCi0gICAgICAgICdvYnNlcnZlcl9saXN0X3RocmVhZHNhZmUuaCcsCi0gICAgICAgICdvYnNlcnZlcl9saXN0X3R5cGVzLmNjJywKLSAgICAgICAgJ29ic2VydmVyX2xpc3RfdHlwZXMuaCcsCi0gICAgICAgICdvcHRpb25hbC5oJywKLSAgICAgICAgJ3BhdGhfc2VydmljZS5jYycsCi0gICAgICAgICdwYXRoX3NlcnZpY2UuaCcsCi0gICAgICAgICdwZW5kaW5nX3Rhc2suY2MnLAotICAgICAgICAncGVuZGluZ190YXNrLmgnLAotICAgICAgICAncGlja2xlLmNjJywKLSAgICAgICAgJ3BpY2tsZS5oJywKLSAgICAgICAgJ3Bvc3RfdGFza19hbmRfcmVwbHlfd2l0aF9yZXN1bHRfaW50ZXJuYWwuaCcsCi0gICAgICAgICdwb3dlcl9tb25pdG9yL3Bvd2VyX21vbml0b3IuY2MnLAotICAgICAgICAncG93ZXJfbW9uaXRvci9wb3dlcl9tb25pdG9yLmgnLAotICAgICAgICAncG93ZXJfbW9uaXRvci9wb3dlcl9tb25pdG9yX2RldmljZV9zb3VyY2Vfc3R1Yi5jYycsCi0gICAgICAgICdwb3dlcl9tb25pdG9yL3Bvd2VyX21vbml0b3JfZGV2aWNlX3NvdXJjZS5jYycsCi0gICAgICAgICdwb3dlcl9tb25pdG9yL3Bvd2VyX21vbml0b3JfZGV2aWNlX3NvdXJjZS5oJywKLSAgICAgICAgJ3Bvd2VyX21vbml0b3IvcG93ZXJfbW9uaXRvcl9zb3VyY2UuY2MnLAotICAgICAgICAncG93ZXJfbW9uaXRvci9wb3dlcl9tb25pdG9yX3NvdXJjZS5oJywKLSAgICAgICAgJ3Bvd2VyX21vbml0b3IvcG93ZXJfb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdwcm9jZXNzL21lbW9yeS5jYycsCi0gICAgICAgICdwcm9jZXNzL21lbW9yeS5oJywKLSAgICAgICAgJ3Byb2Nlc3MvbWVtb3J5X3N0YXJib2FyZC5jYycsCi0gICAgICAgICdwcm9jZXNzL3Byb2Nlc3NfaGFuZGxlLmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19zdGFyYm9hcmQuY2MnLAotICAgICAgICAncHJvZmlsZXIvbmF0aXZlX3N0YWNrX3NhbXBsZXIuY2MnLAotICAgICAgICAncHJvZmlsZXIvbmF0aXZlX3N0YWNrX3NhbXBsZXIuaCcsCi0gICAgICAgICdwcm9maWxlci9uYXRpdmVfc3RhY2tfc2FtcGxlcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAncHJvZmlsZXIvc3RhY2tfc2FtcGxpbmdfcHJvZmlsZXIuY2MnLAotICAgICAgICAncHJvZmlsZXIvc3RhY2tfc2FtcGxpbmdfcHJvZmlsZXIuaCcsCi0gICAgICAgICdyYW5kX3V0aWwuY2MnLAotICAgICAgICAncmFuZF91dGlsLmgnLAotICAgICAgICAncmFuZF91dGlsX3N0YXJib2FyZC5jYycsCi0gICAgICAgICdydW5fbG9vcC5jYycsCi0gICAgICAgICdydW5fbG9vcC5oJywKLSAgICAgICAgJ3NhbXBsaW5nX2hlYXBfcHJvZmlsZXIvbG9ja19mcmVlX2FkZHJlc3NfaGFzaF9zZXQuY2MnLAotICAgICAgICAnc2FtcGxpbmdfaGVhcF9wcm9maWxlci9sb2NrX2ZyZWVfYWRkcmVzc19oYXNoX3NldC5oJywKLSAgICAgICAgJ3NhbXBsaW5nX2hlYXBfcHJvZmlsZXIvbW9kdWxlX2NhY2hlLmNjJywKLSAgICAgICAgJ3NhbXBsaW5nX2hlYXBfcHJvZmlsZXIvbW9kdWxlX2NhY2hlLmgnLAotICAgICAgICAnc2FtcGxpbmdfaGVhcF9wcm9maWxlci9tb2R1bGVfY2FjaGVfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3Njb3BlZF9jbGVhcl9lcnJuby5oJywKLSAgICAgICAgJ3Njb3BlZF9nZW5lcmljLmgnLAotICAgICAgICAnc2NvcGVkX29ic2VydmVyLmgnLAotICAgICAgICAnc2VxdWVuY2VfY2hlY2tlci5oJywKLSAgICAgICAgJ3NlcXVlbmNlX2NoZWNrZXJfaW1wbC5jYycsCi0gICAgICAgICdzZXF1ZW5jZV9jaGVja2VyX2ltcGwuaCcsCi0gICAgICAgICdzZXF1ZW5jZV90b2tlbi5jYycsCi0gICAgICAgICdzZXF1ZW5jZV90b2tlbi5oJywKLSAgICAgICAgJ3NlcXVlbmNlZF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICdzZXF1ZW5jZWRfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICdzZXF1ZW5jZWRfdGFza19ydW5uZXJfaGVscGVycy5oJywKLSAgICAgICAgJ3NoYTEuY2MnLAotICAgICAgICAnc2hhMS5oJywKLSAgICAgICAgJ3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXIuY2MnLAotICAgICAgICAnc2luZ2xlX3RocmVhZF90YXNrX3J1bm5lci5oJywKLSAgICAgICAgJ3N0bF91dGlsLmgnLAotICAgICAgICAnc3RyaW5ncy9sYXRpbjFfc3RyaW5nX2NvbnZlcnNpb25zLmNjJywKLSAgICAgICAgJ3N0cmluZ3MvbGF0aW4xX3N0cmluZ19jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3N0cmluZ3MvbnVsbGFibGVfc3RyaW5nMTYuY2MnLAotICAgICAgICAnc3RyaW5ncy9udWxsYWJsZV9zdHJpbmcxNi5oJywKLSAgICAgICAgJ3N0cmluZ3MvcGF0dGVybi5jYycsCi0gICAgICAgICdzdHJpbmdzL3BhdHRlcm4uaCcsCi0gICAgICAgICdzdHJpbmdzL3NhZmVfc3ByaW50Zi5jYycsCi0gICAgICAgICdzdHJpbmdzL3NhZmVfc3ByaW50Zi5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyY2F0LmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyY2F0LmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmcxNi5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZzE2LmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX3BpZWNlLmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX3BpZWNlLmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfcGllY2VfZm9yd2FyZC5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdG9rZW5pemVyLmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ191dGlsLmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbF9jb25zdGFudHMuY2MnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbF9zdGFyYm9hcmQuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ2l6ZV9tYWNyb3MuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ3ByaW50Zi5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ3ByaW50Zi5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3lzX3N0cmluZ19jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3lzX3N0cmluZ19jb252ZXJzaW9uc19zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfb2Zmc2V0X3N0cmluZ19jb252ZXJzaW9ucy5jYycsCi0gICAgICAgICdzdHJpbmdzL3V0Zl9vZmZzZXRfc3RyaW5nX2NvbnZlcnNpb25zLmgnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25fdXRpbHMuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25fdXRpbHMuaCcsCi0gICAgICAgICdzdHJpbmdzL3V0Zl9zdHJpbmdfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25zLmgnLAotICAgICAgICAnc3VwcG9ydHNfdXNlcl9kYXRhLmNjJywKLSAgICAgICAgJ3N1cHBvcnRzX3VzZXJfZGF0YS5oJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi9hdG9taWNfZmxhZy5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vYXRvbWljX2ZsYWcuaCcsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vY2FuY2VsbGF0aW9uX2ZsYWcuaCcsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2NvbmRpdGlvbl92YXJpYWJsZV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2suY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2suaCcsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vbG9ja19pbXBsLmgnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2tfaW1wbF9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL3NwaW5fd2FpdC5oJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudC5oJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudF9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3lzX2J5dGVvcmRlci5oJywKLSAgICAgICAgJ3N5c19pbmZvLmNjJywKLSAgICAgICAgJ3N5c19pbmZvLmgnLAotICAgICAgICAnc3lzX2luZm9faW50ZXJuYWwuaCcsCi0gICAgICAgICdzeXNfaW5mb19zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3lzbG9nX2xvZ2dpbmcuY2MnLAotICAgICAgICAnc3lzbG9nX2xvZ2dpbmcuaCcsCi0gICAgICAgICdzeXN0ZW0vc3lzdGVtX21vbml0b3IuY2MnLAotICAgICAgICAnc3lzdGVtL3N5c3RlbV9tb25pdG9yLmgnLAotICAgICAgICAndGFzay9jYW5jZWxhYmxlX3Rhc2tfdHJhY2tlci5jYycsCi0gICAgICAgICd0YXNrL2NhbmNlbGFibGVfdGFza190cmFja2VyLmgnLAotICAgICAgICAndGFzay9sYXp5X3Rhc2tfcnVubmVyLmNjJywKLSAgICAgICAgJ3Rhc2svbGF6eV90YXNrX3J1bm5lci5oJywKLSAgICAgICAgJ3Rhc2svcG9zdF90YXNrLmNjJywKLSAgICAgICAgJ3Rhc2svcG9zdF90YXNrLmgnLAotICAgICAgICAndGFzay9zY29wZWRfc2V0X3Rhc2tfcHJpb3JpdHlfZm9yX2N1cnJlbnRfdGhyZWFkLmNjJywKLSAgICAgICAgJ3Rhc2svc2NvcGVkX3NldF90YXNrX3ByaW9yaXR5X2Zvcl9jdXJyZW50X3RocmVhZC5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9hc3NvY2lhdGVkX3RocmVhZF9pZC5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9lbnF1ZXVlX29yZGVyLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9lbnF1ZXVlX29yZGVyLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL2dyYWNlZnVsX3F1ZXVlX3NodXRkb3duX2hlbHBlci5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvZ3JhY2VmdWxfcXVldWVfc2h1dGRvd25faGVscGVyLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL2ludHJ1c2l2ZV9oZWFwLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL2xhemlseV9kZWFsbG9jYXRlZF9kZXF1ZS5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9sYXp5X25vdy5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvbGF6eV9ub3cuaCcsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvcmVhbF90aW1lX2RvbWFpbi5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvcmVhbF90aW1lX2RvbWFpbi5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9zZXF1ZW5jZV9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9zZXF1ZW5jZV9tYW5hZ2VyLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3NlcXVlbmNlX21hbmFnZXJfaW1wbC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvc2VxdWVuY2VfbWFuYWdlcl9pbXBsLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3NlcXVlbmNlZF90YXNrX3NvdXJjZS5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90YXNrX3F1ZXVlLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90YXNrX3F1ZXVlLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tfcXVldWVfaW1wbC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGFza19xdWV1ZV9pbXBsLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tfcXVldWVfcHJveHkuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tfcXVldWVfcHJveHkuaCcsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGFza19xdWV1ZV9zZWxlY3Rvci5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGFza19xdWV1ZV9zZWxlY3Rvci5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90YXNrX3F1ZXVlX3NlbGVjdG9yX2xvZ2ljLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tfcXVldWVfdGFza19ydW5uZXIuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tfcXVldWVfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGFza190aW1lX29ic2VydmVyLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rhc2tzLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90YXNrcy5oJywKLSAgICAgICAgJ3Rhc2tfcnVubmVyLmNjJywKLSAgICAgICAgJ3Rhc2tfcnVubmVyLmgnLAotICAgICAgICAndGFza19ydW5uZXJfdXRpbC5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90aHJlYWRfY29udHJvbGxlci5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90aHJlYWRfY29udHJvbGxlcl9pbXBsLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90aHJlYWRfY29udHJvbGxlcl9pbXBsLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3RocmVhZF9jb250cm9sbGVyX3dpdGhfbWVzc2FnZV9wdW1wX2ltcGwuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3RocmVhZF9jb250cm9sbGVyX3dpdGhfbWVzc2FnZV9wdW1wX2ltcGwuaCcsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGltZV9kb21haW4uY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3RpbWVfZG9tYWluLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3dvcmtfcXVldWUuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3dvcmtfcXVldWUuaCcsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvd29ya19xdWV1ZV9zZXRzLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci93b3JrX3F1ZXVlX3NldHMuaCcsCi0gICAgICAgICd0YXNrL3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXJfdGhyZWFkX21vZGUuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfZXhlY3V0b3IuY2MnLAotICAgICAgICAndGFzay90YXNrX2V4ZWN1dG9yLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9jYW5fc2NoZWR1bGVfc2VxdWVuY2Vfb2JzZXJ2ZXIuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL2RlbGF5ZWRfdGFza19tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvZGVsYXllZF90YXNrX21hbmFnZXIuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL2Vudmlyb25tZW50X2NvbmZpZy5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL2Vudmlyb25tZW50X2NvbmZpZy5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvaW5pdGlhbGl6YXRpb25fdXRpbC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL2luaXRpYWxpemF0aW9uX3V0aWwuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3BsYXRmb3JtX25hdGl2ZV93b3JrZXJfcG9vbF93aW4uY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9wbGF0Zm9ybV9uYXRpdmVfd29ya2VyX3Bvb2xfd2luLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9wcmlvcml0eV9xdWV1ZS5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3ByaW9yaXR5X3F1ZXVlLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfbG9jay5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX2xvY2tfaW1wbC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl9sb2NrX2ltcGwuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyX21hbmFnZXIuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfc2luZ2xlX3RocmVhZF90YXNrX3J1bm5lcl9tYW5hZ2VyLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfd29ya2VyLmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX3dvcmtlci5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX3dvcmtlcl9vYnNlcnZlci5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX3dvcmtlcl9wYXJhbXMuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfcG9vbC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfcG9vbC5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX3dvcmtlcl9wb29sX2ltcGwuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfd29ya2VyX3Bvb2xfaW1wbC5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2NoZWR1bGVyX3dvcmtlcl9wb29sX3BhcmFtcy5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfcG9vbF9wYXJhbXMuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfc3RhY2suY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfd29ya2VyX3N0YWNrLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zZXF1ZW5jZS5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NlcXVlbmNlLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zZXF1ZW5jZV9zb3J0X2tleS5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NlcXVlbmNlX3NvcnRfa2V5LmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zZXJ2aWNlX3RocmVhZC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NlcnZpY2VfdGhyZWFkLmgnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci90YXNrLmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdGFzay5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdGFza19zY2hlZHVsZXIuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci90YXNrX3NjaGVkdWxlci5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdGFza19zY2hlZHVsZXJfaW1wbC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rhc2tfc2NoZWR1bGVyX2ltcGwuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rhc2tfdHJhY2tlci5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rhc2tfdHJhY2tlci5oJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdHJhY2tlZF9yZWYuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfdHJhaXRzLmNjJywKLSAgICAgICAgJ3Rhc2svdGFza190cmFpdHMuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfdHJhaXRzX2RldGFpbHMuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfdHJhaXRzX2V4dGVuc2lvbi5oJywKLSAgICAgICAgJ3RlbXBsYXRlX3V0aWwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9kbWdfZnAvZG1nX2ZwLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvZG1nX2ZwL2R0b2Ffd3JhcHBlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9kbWdfZnAvZ19mbXQuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvaWN1L2ljdV91dGYuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvaWN1L2ljdV91dGYuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9uc3ByL3BydGltZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9uc3ByL3BydGltZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3N1cGVyZmFzdGhhc2gvc3VwZXJmYXN0aGFzaC5jJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3ZhbGdyaW5kL21lbWNoZWNrLmgnLAotICAgICAgICAndGhyZWFkaW5nL3BsYXRmb3JtX3RocmVhZC5oJywKLSAgICAgICAgJ3RocmVhZGluZy9wbGF0Zm9ybV90aHJlYWRfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy9wb3N0X3Rhc2tfYW5kX3JlcGx5X2ltcGwuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3Bvc3RfdGFza19hbmRfcmVwbHlfaW1wbC5oJywKLSAgICAgICAgJ3RocmVhZGluZy9zY29wZWRfYmxvY2tpbmdfY2FsbC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvc2NvcGVkX2Jsb2NraW5nX2NhbGwuaCcsCi0gICAgICAgICd0aHJlYWRpbmcvc2VxdWVuY2VfbG9jYWxfc3RvcmFnZV9tYXAuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3NlcXVlbmNlX2xvY2FsX3N0b3JhZ2VfbWFwLmgnLAotICAgICAgICAndGhyZWFkaW5nL3NlcXVlbmNlX2xvY2FsX3N0b3JhZ2Vfc2xvdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvc2VxdWVuY2VfbG9jYWxfc3RvcmFnZV9zbG90LmgnLAotICAgICAgICAndGhyZWFkaW5nL3NlcXVlbmNlZF90YXNrX3J1bm5lcl9oYW5kbGUuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3NlcXVlbmNlZF90YXNrX3J1bm5lcl9oYW5kbGUuaCcsCi0gICAgICAgICd0aHJlYWRpbmcvc2ltcGxlX3RocmVhZC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvc2ltcGxlX3RocmVhZC5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWQuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZC5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfY2hlY2tlci5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfY2hlY2tlcl9pbXBsLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfY2hlY2tlcl9pbXBsLmgnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9jb2xsaXNpb25fd2FybmVyLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfY29sbGlzaW9uX3dhcm5lci5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfaWRfbmFtZV9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfaWRfbmFtZV9tYW5hZ2VyLmgnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9sb2NhbC5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfbG9jYWxfc3RvcmFnZS5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvdGhyZWFkX2xvY2FsX3N0b3JhZ2UuaCcsCi0gICAgICAgICd0aHJlYWRpbmcvdGhyZWFkX2xvY2FsX3N0b3JhZ2Vfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfcmVzdHJpY3Rpb25zLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfcmVzdHJpY3Rpb25zLmgnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF90YXNrX3J1bm5lcl9oYW5kbGUuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF90YXNrX3J1bm5lcl9oYW5kbGUuaCcsCi0gICAgICAgICd0aHJlYWRpbmcvd2F0Y2hkb2cuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3dhdGNoZG9nLmgnLAotICAgICAgICAndGltZS9jbG9jay5jYycsCi0gICAgICAgICd0aW1lL2Nsb2NrLmgnLAotICAgICAgICAndGltZS9kZWZhdWx0X2Nsb2NrLmNjJywKLSAgICAgICAgJ3RpbWUvZGVmYXVsdF9jbG9jay5oJywKLSAgICAgICAgJ3RpbWUvZGVmYXVsdF90aWNrX2Nsb2NrLmNjJywKLSAgICAgICAgJ3RpbWUvZGVmYXVsdF90aWNrX2Nsb2NrLmgnLAotICAgICAgICAndGltZS90aWNrX2Nsb2NrLmNjJywKLSAgICAgICAgJ3RpbWUvdGlja19jbG9jay5oJywKLSAgICAgICAgJ3RpbWUvdGltZS5jYycsCi0gICAgICAgICd0aW1lL3RpbWUuaCcsCi0gICAgICAgICd0aW1lL3RpbWVfbm93X3N0YXJib2FyZC5jYycsCi0gICAgICAgICd0aW1lL3RpbWVfb3ZlcnJpZGUuY2MnLAotICAgICAgICAndGltZS90aW1lX292ZXJyaWRlLmgnLAotICAgICAgICAndGltZS90aW1lX3RvX2lzbzg2MDEuY2MnLAotICAgICAgICAndGltZS90aW1lX3RvX2lzbzg2MDEuaCcsCi0gICAgICAgICd0aW1lL3RpbWVfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3RpbWVyL2VsYXBzZWRfdGltZXIuY2MnLAotICAgICAgICAndGltZXIvZWxhcHNlZF90aW1lci5oJywKLSAgICAgICAgJ3RpbWVyL2hpX3Jlc190aW1lcl9tYW5hZ2VyLmgnLAotICAgICAgICAndGltZXIvdGltZXIuY2MnLAotICAgICAgICAndGltZXIvdGltZXIuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9hdXRvX29wZW5fY2xvc2VfZXZlbnQuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvYXV0b19vcGVuX2Nsb3NlX2V2ZW50LmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvYmxhbWVfY29udGV4dC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9ibGFtZV9jb250ZXh0LmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvY2F0ZWdvcnlfcmVnaXN0cnkuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvY2F0ZWdvcnlfcmVnaXN0cnkuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9jb21tb24vdHJhY2VfZXZlbnRfY29tbW9uLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvZXZlbnRfbmFtZV9maWx0ZXIuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvZXZlbnRfbmFtZV9maWx0ZXIuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9oZWFwX3Byb2ZpbGVyLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvaGVhcF9wcm9maWxlcl9hbGxvY2F0aW9uX2NvbnRleHQuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvaGVhcF9wcm9maWxlcl9hbGxvY2F0aW9uX2NvbnRleHQuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9oZWFwX3Byb2ZpbGVyX2FsbG9jYXRpb25fY29udGV4dF90cmFja2VyLmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L2hlYXBfcHJvZmlsZXJfYWxsb2NhdGlvbl9jb250ZXh0X3RyYWNrZXIuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9oZWFwX3Byb2ZpbGVyX2V2ZW50X2ZpbHRlci5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9oZWFwX3Byb2ZpbGVyX2V2ZW50X2ZpbHRlci5oJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L21lbW9yeV9hbGxvY2F0b3JfZHVtcC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfYWxsb2NhdG9yX2R1bXAuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfYWxsb2NhdG9yX2R1bXBfZ3VpZC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfYWxsb2NhdG9yX2R1bXBfZ3VpZC5oJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L21lbW9yeV9kdW1wX3Byb3ZpZGVyX2luZm8uY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvbWVtb3J5X2R1bXBfcHJvdmlkZXJfaW5mby5oJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L21lbW9yeV9pbmZyYV9iYWNrZ3JvdW5kX3doaXRlbGlzdC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfaW5mcmFfYmFja2dyb3VuZF93aGl0ZWxpc3QuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfdXNhZ2VfZXN0aW1hdG9yLmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L21lbW9yeV91c2FnZV9lc3RpbWF0b3IuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC9wcm9jZXNzX21lbW9yeV9kdW1wLmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3Byb2Nlc3NfbWVtb3J5X2R1bXAuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9idWZmZXIuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfYnVmZmVyLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfY2F0ZWdvcnkuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9jb25maWcuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfY29uZmlnLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfY29uZmlnX2NhdGVnb3J5X2ZpbHRlci5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9jb25maWdfY2F0ZWdvcnlfZmlsdGVyLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF9hcmd1bWVudC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF9hcmd1bWVudC5oJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ZpbHRlci5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF9maWx0ZXIuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF9pbXBsLmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ltcGwuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF9tZW1vcnlfb3ZlcmhlYWQuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfbWVtb3J5X292ZXJoZWFkLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfc3lzdGVtX3N0YXRzX21vbml0b3IuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfc3lzdGVtX3N0YXRzX21vbml0b3IuaCcsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9sb2cuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfbG9nLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfbG9nX2NvbnN0YW50cy5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjaW5nX2FnZW50LmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNpbmdfYWdlbnQuaCcsCi0gICAgICAgICd0dXBsZS5oJywKLSAgICAgICAgJ3VuZ3Vlc3NhYmxlX3Rva2VuLmNjJywKLSAgICAgICAgJ3VuZ3Vlc3NhYmxlX3Rva2VuLmgnLAotICAgICAgICAndmFsdWVfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAndmFsdWVfY29udmVyc2lvbnMuaCcsCi0gICAgICAgICd2YWx1ZV9pdGVyYXRvcnMuY2MnLAotICAgICAgICAndmFsdWVfaXRlcmF0b3JzLmgnLAotICAgICAgICAndmFsdWVzLmNjJywKLSAgICAgICAgJ3ZhbHVlcy5oJywKLSAgICAgICAgJ3ZlcnNpb24uY2MnLAotICAgICAgICAndmVyc2lvbi5oJywKLSAgICAgICAgJ3Zsb2cuY2MnLAotICAgICAgICAndmxvZy5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYmFzZV9pMThuJywKLSAgICAgICd0eXBlJzogJzwoY29tcG9uZW50KScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYmFzZScsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9keW5hbWljX2Fubm90YXRpb25zL2R5bmFtaWNfYW5ub3RhdGlvbnMuZ3lwOmR5bmFtaWNfYW5ub3RhdGlvbnMnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1aTE4bicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2ljdV9pbml0L2ljdV9pbml0Lmd5cDppY3VfaW5pdCcsCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICdiYXNlJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0JBU0VfSTE4Tl9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdpMThuL2Jhc2VfaTE4bl9leHBvcnQuaCcsCi0gICAgICAgICdpMThuL2Jhc2VfaTE4bl9zd2l0Y2hlcy5jYycsCi0gICAgICAgICdpMThuL2Jhc2VfaTE4bl9zd2l0Y2hlcy5oJywKLSAgICAgICAgJ2kxOG4vYmlkaV9saW5lX2l0ZXJhdG9yLmNjJywKLSAgICAgICAgJ2kxOG4vYmlkaV9saW5lX2l0ZXJhdG9yLmgnLAotICAgICAgICAnaTE4bi9icmVha19pdGVyYXRvci5jYycsCi0gICAgICAgICdpMThuL2JyZWFrX2l0ZXJhdG9yLmgnLAotICAgICAgICAnaTE4bi9jYXNlX2NvbnZlcnNpb24uY2MnLAotICAgICAgICAnaTE4bi9jYXNlX2NvbnZlcnNpb24uaCcsCi0gICAgICAgICdpMThuL2NoYXJfaXRlcmF0b3IuY2MnLAotICAgICAgICAnaTE4bi9jaGFyX2l0ZXJhdG9yLmgnLAotICAgICAgICAnaTE4bi9jaGFyYWN0ZXJfZW5jb2RpbmcuY2MnLAotICAgICAgICAnaTE4bi9jaGFyYWN0ZXJfZW5jb2RpbmcuaCcsCi0gICAgICAgICdpMThuL2VuY29kaW5nX2RldGVjdGlvbi5jYycsCi0gICAgICAgICdpMThuL2VuY29kaW5nX2RldGVjdGlvbi5oJywKLSAgICAgICAgJ2kxOG4vZmlsZV91dGlsX2ljdS5jYycsCi0gICAgICAgICdpMThuL2ZpbGVfdXRpbF9pY3UuaCcsCi0gICAgICAgICdpMThuL2kxOG5fY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ2kxOG4vaTE4bl9jb25zdGFudHMuaCcsCi0gICAgICAgICdpMThuL2ljdV9zdHJpbmdfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAnaTE4bi9pY3Vfc3RyaW5nX2NvbnZlcnNpb25zLmgnLAotICAgICAgICAnaTE4bi9pY3VfdXRpbC5jYycsCi0gICAgICAgICdpMThuL2ljdV91dGlsLmgnLAotICAgICAgICAnaTE4bi9tZXNzYWdlX2Zvcm1hdHRlci5jYycsCi0gICAgICAgICdpMThuL21lc3NhZ2VfZm9ybWF0dGVyLmgnLAotICAgICAgICAnaTE4bi9udW1iZXJfZm9ybWF0dGluZy5jYycsCi0gICAgICAgICdpMThuL251bWJlcl9mb3JtYXR0aW5nLmgnLAotICAgICAgICAnaTE4bi9ydGwuY2MnLAotICAgICAgICAnaTE4bi9ydGwuaCcsCi0gICAgICAgICdpMThuL3N0cmVhbWluZ191dGY4X3ZhbGlkYXRvci5jYycsCi0gICAgICAgICdpMThuL3N0cmVhbWluZ191dGY4X3ZhbGlkYXRvci5oJywKLSAgICAgICAgJ2kxOG4vc3RyaW5nX2NvbXBhcmUuY2MnLAotICAgICAgICAnaTE4bi9zdHJpbmdfY29tcGFyZS5oJywKLSAgICAgICAgJ2kxOG4vc3RyaW5nX3NlYXJjaC5jYycsCi0gICAgICAgICdpMThuL3N0cmluZ19zZWFyY2guaCcsCi0gICAgICAgICdpMThuL3RpbWVfZm9ybWF0dGluZy5jYycsCi0gICAgICAgICdpMThuL3RpbWVfZm9ybWF0dGluZy5oJywKLSAgICAgICAgJ2kxOG4vdGltZXpvbmUuY2MnLAotICAgICAgICAnaTE4bi90aW1lem9uZS5oJywKLSAgICAgICAgJ2kxOG4vdW5pY29kZXN0cmluZy5oJywKLSAgICAgICAgJ2kxOG4vdXRmOF92YWxpZGF0b3JfdGFibGVzLmNjJywKLSAgICAgICAgJ2kxOG4vdXRmOF92YWxpZGF0b3JfdGFibGVzLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICMgVGhpcyBpcyB0aGUgc3Vic2V0IG9mIGZpbGVzIGZyb20gYmFzZSB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGEKLSAgICAgICMgZHluYW1pYyBsaWJyYXJ5LiBOb3RlIHRoYXQgdGhpcyBsaWJyYXJ5IGNhbm5vdCBkZXBlbmQgb24gYmFzZSBiZWNhdXNlCi0gICAgICAjIGJhc2UgZGVwZW5kcyBvbiBiYXNlX3N0YXRpYy4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiYXNlX3N0YXRpYycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZGVidWdnaW5nX2ZsYWdzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Jhc2VfdW5pdHRlc3RzJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnR01PQ0tfTk9fTU9WRV9NT0NLJywKLSAgICAgICAgJ0JBU0VfRE9OVF9FTkZPUkNFX1RIUkVBRF9OQU1FX0xFTkdUSCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhdF9leGl0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F0b21pY29wc191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXJyaWVyX2Nsb3N1cmVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZTY0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2U2NHVybF91bml0dGVzdC5jYycsCi0gICAgICAgICdiaWdfZW5kaWFuX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2JpbmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYml0X2Nhc3RfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYml0c191bml0dGVzdC5jYycsCi0gICAgICAgICdjb21wb25lbnRfZXhwb3J0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvdW5pcXVlX3B0cl9hZGFwdGVyc191bml0dGVzdC5jYycsCi0gICAgICAgICdkZWJ1Zy9hbGlhc191bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3BlcnNpc3RlbnRfaGlzdG9ncmFtX3N0b3JhZ2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbm9fZGVzdHJ1Y3Rvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdvYnNlcnZlcl9saXN0X3RocmVhZHNhZmVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2FtcGxpbmdfaGVhcF9wcm9maWxlci9sb2NrX2ZyZWVfYWRkcmVzc19oYXNoX3NldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzYW1wbGluZ19oZWFwX3Byb2ZpbGVyL21vZHVsZV9jYWNoZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzY29wZWRfY2xlYXJfbGFzdF9lcnJvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL2NoYXJfdHJhaXRzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyY2F0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbS9zeXN0ZW1fbW9uaXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICMgU2VlIHRoZSBjb21tZW50IGFib3ZlIGhpc3RvZ3JhbV9lbnVtX3JlYWRlci5jYyBmb3IgZGV0YWlscy4KLSAgICAgICAgIyAndGVzdC9tZXRyaWNzL2hpc3RvZ3JhbV9lbnVtX3JlYWRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L21ldHJpY3MvaGlzdG9ncmFtX3Rlc3Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L21ldHJpY3MvdXNlcl9hY3Rpb25fdGVzdGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF9hbm5vdGF0aW9uc191bml0dGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvc2VxdWVuY2VfYm91bmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvbWVtb3J5X2luZnJhX2JhY2tncm91bmRfd2hpdGVsaXN0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NhbGxiYWNrX2hlbHBlcnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2FsbGJhY2tfbGlzdF91bml0dGVzdC5jYycsCi0gICAgICAgICdjYWxsYmFja191bml0dGVzdC5jYycsCi0gICAgICAgICdjYW5jZWxhYmxlX2NhbGxiYWNrX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NvbW1hbmRfbGluZV91bml0dGVzdC5jYycsCi0gICAgICAgICdjb250YWluZXJzL2FkYXB0ZXJzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvY2lyY3VsYXJfZGVxdWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29udGFpbmVycy9mbGF0X21hcF91bml0dGVzdC5jYycsCi0gICAgICAgICdjb250YWluZXJzL2ZsYXRfc2V0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvZmxhdF90cmVlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NvbnRhaW5lcnMvaGFzaF90YWJsZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29udGFpbmVycy9pZF9tYXBfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29udGFpbmVycy9saW5rZWRfbGlzdF91bml0dGVzdC5jYycsCi0gICAgICAgICdjb250YWluZXJzL21ydV9jYWNoZV91bml0dGVzdC5jYycsCi0gICAgICAgICdjb250YWluZXJzL3NtYWxsX21hcF91bml0dGVzdC5jYycsCi0gICAgICAgICdjb250YWluZXJzL3NwYW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29udGFpbmVycy9zdGFja19jb250YWluZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29udGFpbmVycy92ZWN0b3JfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyBjcHUuY2MgaXMgbm90IGNvbXBpbGVkIGR1ZSB0byBsYWNrIG9mIHVzYWdlLgotICAgICAgICAjICdjcHVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZGVidWcvZGVidWdnZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZGVidWcvbGVha190cmFja2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2RlYnVnL3Rhc2tfYW5ub3RhdG9yX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2RlZmVycmVkX3NlcXVlbmNlZF90YXNrX3J1bm5lcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWxlcy9maWxlX2VudW1lcmF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsZXMvZmlsZV9wYXRoX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfcHJveHlfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsZXMvZmlsZV91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWxlcy9maWxlX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsZXMvaW1wb3J0YW50X2ZpbGVfd3JpdGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVzL3Njb3BlZF90ZW1wX2Rpcl91bml0dGVzdC5jYycsCi0gICAgICAgICdnbW9ja191bml0dGVzdC5jYycsCi0gICAgICAgICdndWlkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2hhc2hfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9iaWRpX2xpbmVfaXRlcmF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9icmVha19pdGVyYXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdpMThuL2Nhc2VfY29udmVyc2lvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdpMThuL2NoYXJfaXRlcmF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9jaGFyYWN0ZXJfZW5jb2RpbmdfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9maWxlX3V0aWxfaWN1X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2kxOG4vaWN1X3N0cmluZ19jb252ZXJzaW9uc191bml0dGVzdC5jYycsCi0gICAgICAgICdpMThuL21lc3NhZ2VfZm9ybWF0dGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2kxOG4vbnVtYmVyX2Zvcm1hdHRpbmdfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9ydGxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9zdHJlYW1pbmdfdXRmOF92YWxpZGF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaTE4bi9zdHJpbmdfc2VhcmNoX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2kxOG4vdGltZV9mb3JtYXR0aW5nX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2kxOG4vdGltZXpvbmVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnanNvbi9qc29uX3BhcnNlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdqc29uL2pzb25fcmVhZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2pzb24vanNvbl92YWx1ZV9jb252ZXJ0ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnanNvbi9qc29uX3ZhbHVlX3NlcmlhbGl6ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnanNvbi9qc29uX3dyaXRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdqc29uL3N0cmluZ19lc2NhcGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbGF6eV9pbnN0YW5jZV91bml0dGVzdC5jYycsCi0gICAgICAgICdsb2dfb25jZV91bml0dGVzdC5jYycsCi0gICAgICAgICdsb2dfb25jZV91bml0dGVzdF8xLmgnLAotICAgICAgICAnbG9nX29uY2VfdW5pdHRlc3RfMi5oJywKLSAgICAgICAgJ2xvZ2dpbmdfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWQ1X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeS9hbGlnbmVkX21lbW9yeV91bml0dGVzdC5jYycsCi0gICAgICAgICdtZW1vcnkvbGlua2VkX3B0cl91bml0dGVzdC5jYycsCi0gICAgICAgICdtZW1vcnkvbWVtb3J5X2Nvb3JkaW5hdG9yX2NsaWVudF9yZWdpc3RyeV91bml0dGVzdC5jYycsCi0gICAgICAgICdtZW1vcnkvcHRyX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWVtb3J5L3JlZl9jb3VudGVkX21lbW9yeV91bml0dGVzdC5jYycsCi0gICAgICAgICdtZW1vcnkvcmVmX2NvdW50ZWRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWVtb3J5L3NpbmdsZXRvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdtZW1vcnkvd2Vha19wdHJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcF9pb19wb3NpeF91bml0dGVzdC5jYycsCi0gICAgICAgICdtZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wX3Rhc2tfcnVubmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3BfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWV0cmljcy9idWNrZXRfcmFuZ2VzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX2Jhc2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fZnVuY3Rpb25zX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX3NhbXBsZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWV0cmljcy9oaXN0b2dyYW1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWV0cmljcy9tZXRyaWNzX2hhc2hlc191bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3BlcnNpc3RlbnRfaGlzdG9ncmFtX2FsbG9jYXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3BlcnNpc3RlbnRfbWVtb3J5X2FsbG9jYXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3BlcnNpc3RlbnRfc2FtcGxlX21hcF91bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3NhbXBsZV9tYXBfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbWV0cmljcy9zYW1wbGVfdmVjdG9yX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21ldHJpY3Mvc3BhcnNlX2hpc3RvZ3JhbV91bml0dGVzdC5jYycsCi0gICAgICAgICdtZXRyaWNzL3N0YXRpc3RpY3NfcmVjb3JkZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnb2JzZXJ2ZXJfbGlzdF91bml0dGVzdC5jYycsCi0gICAgICAgICdvcHRpb25hbF91bml0dGVzdC5jYycsCi0gICAgICAgICdwYXRoX3NlcnZpY2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAncGlja2xlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Bvd2VyX21vbml0b3IvcG93ZXJfbW9uaXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdyYW5kX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAncnVuX2xvb3BfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2FmZV9udW1lcmljc191bml0dGVzdC5jYycsCi0gICAgICAgICdzY29wZWRfZ2VuZXJpY191bml0dGVzdC5jYycsCi0gICAgICAgICdzY29wZWRfbmF0aXZlX2xpYnJhcnlfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2VjdXJpdHlfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2VxdWVuY2VfY2hlY2tlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzZXF1ZW5jZV90b2tlbl91bml0dGVzdC5jYycsCi0gICAgICAgICdzZXF1ZW5jZWRfdGFza19ydW5uZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2hhMV91bml0dGVzdC5jYycsCi0gICAgICAgICdzdGxfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL251bGxhYmxlX3N0cmluZzE2X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ3MvcGF0dGVybl91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3NhZmVfc3ByaW50Zl91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZzE2X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9uc191bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ19waWVjZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ19zcGxpdF91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ190b2tlbml6ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ2l6ZV9tYWNyb3NfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdwcmludGZfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3RyaW5ncy9zeXNfc3RyaW5nX2NvbnZlcnNpb25zX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ3MvdXRmX29mZnNldF9zdHJpbmdfY29udmVyc2lvbnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25zX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N1cHBvcnRzX3VzZXJfZGF0YV91bml0dGVzdC5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vYXRvbWljX2ZsYWdfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2NvbmRpdGlvbl92YXJpYWJsZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vbG9ja191bml0dGVzdC5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vd2FpdGFibGVfZXZlbnRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3lzX2J5dGVvcmRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzeXNfaW5mb191bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL2NhbmNlbGFibGVfdGFza190cmFja2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svbGF6eV90YXNrX3J1bm5lcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Bvc3RfdGFza191bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Njb3BlZF9zZXRfdGFza19wcmlvcml0eV9mb3JfY3VycmVudF90aHJlYWRfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL2ludHJ1c2l2ZV9oZWFwX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci9sYXppbHlfZGVhbGxvY2F0ZWRfZGVxdWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3NlcXVlbmNlX21hbmFnZXJfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGFza19xdWV1ZV9zZWxlY3Rvcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGltZV9kb21haW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3dvcmtfcXVldWVfc2V0c191bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvd29ya19xdWV1ZV91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL2RlbGF5ZWRfdGFza19tYW5hZ2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvcHJpb3JpdHlfcXVldWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfbG9ja191bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyX21hbmFnZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfd29ya2VyX3Bvb2xfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfcG9vbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NjaGVkdWxlcl93b3JrZXJfc3RhY2tfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zY2hlZHVsZXJfd29ya2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvc2VxdWVuY2Vfc29ydF9rZXlfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci9zZXF1ZW5jZV91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3NlcnZpY2VfdGhyZWFkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdGFza19zY2hlZHVsZXJfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rhc2tfdHJhY2tlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3RyYWNrZWRfcmVmX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza190cmFpdHNfZXh0ZW5zaW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza190cmFpdHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVtcGxhdGVfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L21vY2tfY2FsbGJhY2tfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVzdC9zY29wZWRfbW9ja19jbG9ja19vdmVycmlkZV91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L3Njb3BlZF9tb2NrX3RpbWVfbWVzc2FnZV9sb29wX3Rhc2tfcnVubmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rlc3Qvc2NvcGVkX3Rhc2tfZW52aXJvbm1lbnRfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVzdC90ZXN0X21vY2tfdGltZV90YXNrX3J1bm5lcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L3Rlc3RfcGVuZGluZ190YXNrX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9yZWdfdXRpbF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVzdC90cmFjZV9ldmVudF9hbmFseXplcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvcGxhdGZvcm1fdGhyZWFkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy9wb3N0X3Rhc2tfYW5kX3JlcGx5X2ltcGxfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3Njb3BlZF9ibG9ja2luZ19jYWxsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy9zZXF1ZW5jZV9sb2NhbF9zdG9yYWdlX21hcF91bml0dGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvc2VxdWVuY2VfbG9jYWxfc3RvcmFnZV9zbG90X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy9zZXF1ZW5jZWRfdGFza19ydW5uZXJfaGFuZGxlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy9zaW1wbGVfdGhyZWFkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfY2hlY2tlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvdGhyZWFkX2NvbGxpc2lvbl93YXJuZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9pZF9uYW1lX21hbmFnZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9sb2NhbF9zdG9yYWdlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfbG9jYWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9yZXN0cmljdGlvbnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF90YXNrX3J1bm5lcl9oYW5kbGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF91bml0dGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvd2F0Y2hkb2dfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGltZS9wcl90aW1lX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RpbWUvdGltZV91bml0dGVzdC5jYycsCi0gICAgICAgICd0aW1lci9oaV9yZXNfdGltZXJfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0aW1lci9tb2NrX3RpbWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RpbWVyL3RpbWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Rvb2xzX3Nhbml0eV91bml0dGVzdC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9ldmVudF9uYW1lX2ZpbHRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC9tZW1vcnlfdXNhZ2VfZXN0aW1hdG9yX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2NhdGVnb3J5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2FyZ3VtZW50X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ZpbHRlcl90ZXN0X3V0aWxzLmNjJywKLSAgICAgICAgJ3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50X2ZpbHRlcl90ZXN0X3V0aWxzLmgnLAotICAgICAgICAndHJhY2VfZXZlbnQvdHJhY2VfZXZlbnRfc3lzdGVtX3N0YXRzX21vbml0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAndHJhY2VfZXZlbnQvYmxhbWVfY29udGV4dF91bml0dGVzdC5jYycsCi0gICAgICAgICd0cmFjZV9ldmVudC90cmFjZV9ldmVudF91bml0dGVzdC5jYycsCi0gICAgICAgICd0dXBsZV91bml0dGVzdC5jYycsCi0gICAgICAgICd1bmd1ZXNzYWJsZV90b2tlbl91bml0dGVzdC5jYycsCi0gICAgICAgICd2YWx1ZV9pdGVyYXRvcnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAndmFsdWVzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3ZlcnNpb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAndmxvZ191bml0dGVzdC5jYycsCi0gICAgICBdLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1aTE4bicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdiYXNlJywKLSAgICAgICAgJ2Jhc2VfaTE4bicsCi0gICAgICAgICdiYXNlX3N0YXRpYycsCi0gICAgICAgICd0ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9keW5hbWljX2Fubm90YXRpb25zL2R5bmFtaWNfYW5ub3RhdGlvbnMuZ3lwOmR5bmFtaWNfYW5ub3RhdGlvbnMnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY29iYWx0X2NvcHlfdGVzdF9kYXRhID09IDEnLCB7Ci0gICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAnY29udGVudF90ZXN0X2lucHV0X2ZpbGVzJzogWwotICAgICAgICAgICAgICAgICc8KERFUFRIKS9iYXNlL3Rlc3QvZGF0YScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdiYXNlL3Rlc3QnLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4uL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJyBdLAotICAgICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgICAjIGZvcmNpbmcgdmFsdWUgdG8gYm9vbCAndHJ1ZScgb3IgJ2ZhbHNlJyAocGVyZm9ybWFuY2Ugd2FybmluZykKLSAgICAgICAgNDgwMCwKLSAgICAgICAgIyBEZXN0cnVjdG9yIGlzIGV4cGxpY2l0bHkgZGVsZXRlZC4KLSAgICAgICAgNDYyNCwKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL2Jhc2UvdGVzdC90ZXN0Lmd5cGknXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd0ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1aTE4bicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJ4bWwvbGlieG1sLmd5cDpsaWJ4bWwnLAotICAgICAgICAnYmFzZScsCi0gICAgICAgICdiYXNlX3N0YXRpYycsCi0gICAgICAgICdiYXNlX2kxOG4nLAotICAgICAgXSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAnYmFzZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGVzdC9mYWtlX3Rhc2suY2MnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rlc3QvZmFrZV90YXNrLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rlc3QvbGF6eV90aHJlYWRfY29udHJvbGxlcl9mb3JfdGVzdC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGVzdC9sYXp5X3RocmVhZF9jb250cm9sbGVyX2Zvcl90ZXN0LmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rlc3QvbW9ja190aW1lX2RvbWFpbi5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGVzdC9tb2NrX3RpbWVfZG9tYWluLmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rlc3Qvc2VxdWVuY2VfbWFuYWdlcl9mb3JfdGVzdC5jYycsCi0gICAgICAgICd0YXNrL3NlcXVlbmNlX21hbmFnZXIvdGVzdC9zZXF1ZW5jZV9tYW5hZ2VyX2Zvcl90ZXN0LmgnLAotICAgICAgICAndGFzay9zZXF1ZW5jZV9tYW5hZ2VyL3Rlc3QvdGVzdF90YXNrX3F1ZXVlLmNjJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90ZXN0L3Rlc3RfdGFza19xdWV1ZS5oJywKLSAgICAgICAgJ3Rhc2svc2VxdWVuY2VfbWFuYWdlci90ZXN0L3Rlc3RfdGFza190aW1lX29ic2VydmVyLmgnLAotICAgICAgICAnbWV0cmljcy91c2VyX21ldHJpY3MuY2MnLAotICAgICAgICAnbWV0cmljcy91c2VyX21ldHJpY3MuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rlc3RfdGFza19mYWN0b3J5LmNjJywKLSAgICAgICAgJ3Rhc2svdGFza19zY2hlZHVsZXIvdGVzdF90YXNrX2ZhY3RvcnkuaCcsCi0gICAgICAgICd0YXNrL3Rhc2tfc2NoZWR1bGVyL3Rlc3RfdXRpbHMuY2MnLAotICAgICAgICAndGFzay90YXNrX3NjaGVkdWxlci90ZXN0X3V0aWxzLmgnLAotICAgICAgICAndGVzdC9iaW5kX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgInRlc3QvZnV6emVkX2RhdGFfcHJvdmlkZXIuY2MiLAotICAgICAgICAidGVzdC9mdXp6ZWRfZGF0YV9wcm92aWRlci5oIiwKLSAgICAgICAgJ3Rlc3QvZ3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvaWN1X3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0ZXN0L2ljdV90ZXN0X3V0aWwuaCcsCi0gICAgICAgICMgVGhlIGVudW0gcmVhZGVyIHJlcXVpcmVzIGxpYnhtbCByZWFkZXIgYW5kIHdyaXRlciB3aGljaCBoYXNuJ3QgYmVlbgotICAgICAgICAjIGVuYWJsZWQgaW4gQ29iYWx0LCBpZiB0aGUgZW51bSByZWFkZXIgdHVybnMgb3V0IHVzZWZ1bCBpbiB0aGUgZnV0dXJlLAotICAgICAgICAjIHVwZGF0ZS9maXggdGhlIGxpYnhtbCByZWFkZXIvd3JpdGVyLgotICAgICAgICAjICd0ZXN0L21ldHJpY3MvaGlzdG9ncmFtX2VudW1fcmVhZGVyLmNjJywKLSAgICAgICAgIyAndGVzdC9tZXRyaWNzL2hpc3RvZ3JhbV9lbnVtX3JlYWRlci5oJywKLSAgICAgICAgJ3Rlc3QvbWFsbG9jX3dyYXBwZXIuaCcsCi0gICAgICAgICd0ZXN0L21ldHJpY3MvaGlzdG9ncmFtX3Rlc3Rlci5jYycsCi0gICAgICAgICd0ZXN0L21ldHJpY3MvaGlzdG9ncmFtX3Rlc3Rlci5oJywKLSAgICAgICAgJ3Rlc3QvbWV0cmljcy91c2VyX2FjdGlvbl90ZXN0ZXIuY2MnLAotICAgICAgICAndGVzdC9tZXRyaWNzL3VzZXJfYWN0aW9uX3Rlc3Rlci5oJywKLSAgICAgICAgJ3Rlc3QvbW9ja19kZXZpY2VzX2NoYW5nZWRfb2JzZXJ2ZXIuY2MnLAotICAgICAgICAndGVzdC9tb2NrX2RldmljZXNfY2hhbmdlZF9vYnNlcnZlci5oJywKLSAgICAgICAgJ3Rlc3QvbW9ja19sb2cuY2MnLAotICAgICAgICAndGVzdC9tb2NrX2xvZy5oJywKLSAgICAgICAgJ3Rlc3QvbnVsbF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICd0ZXN0L251bGxfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICd0ZXN0L3Bvd2VyX21vbml0b3JfdGVzdF9iYXNlLmNjJywKLSAgICAgICAgJ3Rlc3QvcG93ZXJfbW9uaXRvcl90ZXN0X2Jhc2UuaCcsCi0gICAgICAgICd0ZXN0L3Njb3BlZF9mZWF0dXJlX2xpc3QuY2MnLAotICAgICAgICAndGVzdC9zY29wZWRfZmVhdHVyZV9saXN0LmgnLAotICAgICAgICAndGVzdC9zY29wZWRfbW9ja19jbG9ja19vdmVycmlkZS5jYycsCi0gICAgICAgICd0ZXN0L3Njb3BlZF9tb2NrX2Nsb2NrX292ZXJyaWRlLmgnLAotICAgICAgICAndGVzdC9zY29wZWRfbW9ja190aW1lX21lc3NhZ2VfbG9vcF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICd0ZXN0L3Njb3BlZF9tb2NrX3RpbWVfbWVzc2FnZV9sb29wX3Rhc2tfcnVubmVyLmgnLAotICAgICAgICAndGVzdC9zY29wZWRfdGFza19lbnZpcm9ubWVudC5jYycsCi0gICAgICAgICd0ZXN0L3Njb3BlZF90YXNrX2Vudmlyb25tZW50LmgnLAotICAgICAgICAndGVzdC9zZXF1ZW5jZWRfdGFza19ydW5uZXJfdGVzdF90ZW1wbGF0ZS5jYycsCi0gICAgICAgICd0ZXN0L3NlcXVlbmNlZF90YXNrX3J1bm5lcl90ZXN0X3RlbXBsYXRlLmgnLAotICAgICAgICAndGVzdC9zaW1wbGVfdGVzdF9jbG9jay5jYycsCi0gICAgICAgICd0ZXN0L3NpbXBsZV90ZXN0X2Nsb2NrLmgnLAotICAgICAgICAndGVzdC9zaW1wbGVfdGVzdF90aWNrX2Nsb2NrLmNjJywKLSAgICAgICAgJ3Rlc3Qvc2ltcGxlX3Rlc3RfdGlja19jbG9jay5oJywKLSAgICAgICAgJ3Rlc3QvdGFza19ydW5uZXJfdGVzdF90ZW1wbGF0ZS5jYycsCi0gICAgICAgICd0ZXN0L3Rhc2tfcnVubmVyX3Rlc3RfdGVtcGxhdGUuaCcsCi0gICAgICAgICd0ZXN0L3Rlc3RfaW9fdGhyZWFkLmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9pb190aHJlYWQuaCcsCi0gICAgICAgICd0ZXN0L3Rlc3RfbW9ja190aW1lX3Rhc2tfcnVubmVyLmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9tb2NrX3RpbWVfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICd0ZXN0L3Rlc3RfcGVuZGluZ190YXNrLmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9wZW5kaW5nX3Rhc2suaCcsCi0gICAgICAgICd0ZXN0L3Rlc3Rfc2ltcGxlX3Rhc2tfcnVubmVyLmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9zaW1wbGVfdGFza19ydW5uZXIuaCcsCi0gICAgICAgICd0ZXN0L3Rlc3Rfc3VpdGUuY2MnLAotICAgICAgICAndGVzdC90ZXN0X3N1aXRlLmgnLAotICAgICAgICAndGVzdC90ZXN0X3N3aXRjaGVzLmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9zd2l0Y2hlcy5oJywKLSAgICAgICAgJ3Rlc3QvdGVzdF90aW1lb3V0cy5jYycsCi0gICAgICAgICd0ZXN0L3Rlc3RfdGltZW91dHMuaCcsCi0gICAgICAgICd0ZXN0L3RpbWVfaGVscGVycy5jYycsCi0gICAgICAgICd0ZXN0L3RpbWVfaGVscGVycy5oJywKLSAgICAgICAgJ3Rlc3QvdHJhY2VfZXZlbnRfYW5hbHl6ZXIuY2MnLAotICAgICAgICAndGVzdC90cmFjZV9ldmVudF9hbmFseXplci5oJywKLSAgICAgICAgJ3Rlc3QvdHJhY2VfdG9fZmlsZS5jYycsCi0gICAgICAgICd0ZXN0L3RyYWNlX3RvX2ZpbGUuaCcsCi0gICAgICAgICd0ZXN0L3ZhbHVlc190ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGVzdC92YWx1ZXNfdGVzdF91dGlsLmgnLAotICAgICAgICAndGltZXIvbW9ja190aW1lci5jYycsCi0gICAgICAgICd0aW1lci9tb2NrX3RpbWVyLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiYXNlX3VuaXR0ZXN0c19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYmFzZV91bml0dGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnYmFzZV91bml0dGVzdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJy4uL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvYmFzZS9iYXNlX3BhdGhzX3N0YXJib2FyZC5jYyBiL2Jhc2UvYmFzZV9wYXRoc19zdGFyYm9hcmQuY2MKaW5kZXggMmNkMGQ0Ni4uYzEzZjY0NSAxMDA2NDQKLS0tIGEvYmFzZS9iYXNlX3BhdGhzX3N0YXJib2FyZC5jYworKysgYi9iYXNlL2Jhc2VfcGF0aHNfc3RhcmJvYXJkLmNjCkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5zaXplKCkpOwogICAgICAgRENIRUNLKHN1Y2Nlc3MpOwogICAgICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAgICAgLy8gQXBwZW5kICJ0ZXN0IiB0byBtYXRjaCB0aGUgb3V0cHV0IG9mIGNvcHlfdGVzdF9kYXRhLmd5cGkKKyAgICAgICAgLy8gQXBwZW5kICJ0ZXN0IiB0byBtYXRjaCB0aGUgb3V0cHV0IG9mIHRoZSBmaWxlcyBjb3BpZWQgZHVyaW5nIGJ1aWxkcy4KICAgICAgICAgKnJlc3VsdCA9IEZpbGVQYXRoKHBhdGguZGF0YSgpKS5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoInRlc3QiKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvYmFzZS9iaXRzLmggYi9iYXNlL2JpdHMuaAppbmRleCBhYzQ2YWEyLi40MDAyNTNjIDEwMDY0NAotLS0gYS9iYXNlL2JpdHMuaAorKysgYi9iYXNlL2JpdHMuaApAQCAtNDEsNiArNDEsMTIgQEAKICAgcmV0dXJuIChzaXplICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOwogfQogCisvLyBSb3VuZCB1cCB8c2l6ZXwgdG8gYSBtdWx0aXBsZSBvZiBhbGlnbm1lbnQsIHdoaWNoIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCitpbmxpbmUgY29uc3RleHByIHNpemVfdCBBbGlnblVwKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KSB7CisgIERDSEVDSyhJc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CisgIHJldHVybiAoc2l6ZSArIGFsaWdubWVudCAtIDEpICYgfihhbGlnbm1lbnQgLSAxKTsKK30KKwogLy8gQ291bnRMZWFkaW5nWmVyb0JpdHModmFsdWUpIHJldHVybnMgdGhlIG51bWJlciBvZiB6ZXJvIGJpdHMgZm9sbG93aW5nIHRoZQogLy8gbW9zdCBzaWduaWZpY2FudCAxIGJpdCBpbiB8dmFsdWV8IGlmIHx2YWx1ZXwgaXMgbm9uLXplcm8sIG90aGVyd2lzZSBpdAogLy8gcmV0dXJucyB7c2l6ZW9mKFQpICogOH0uCmRpZmYgLS1naXQgYS9iYXNlL2JpdHNfdW5pdHRlc3QuY2MgYi9iYXNlL2JpdHNfdW5pdHRlc3QuY2MKaW5kZXggYzk0Y2JjNS4uNGVhMDhhZCAxMDA2NDQKLS0tIGEvYmFzZS9iaXRzX3VuaXR0ZXN0LmNjCisrKyBiL2Jhc2UvYml0c191bml0dGVzdC5jYwpAQCAtNjEsNiArNjEsMTggQEAKICAgRVhQRUNUX0VRKGtTaXplVE1heCAvIDIgKyAxLCBBbGlnbigxLCBrU2l6ZVRNYXggLyAyICsgMSkpOwogfQogCitURVNUKEJpdHNUZXN0LCBBbGlnblVwKSB7CisgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtTaXplVE1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CisgIEVYUEVDVF9FUSgwdWwsIEFsaWduVXAoMCwgNCkpOworICBFWFBFQ1RfRVEoNHVsLCBBbGlnblVwKDEsIDQpKTsKKyAgRVhQRUNUX0VRKDQwOTZ1bCwgQWxpZ25VcCgxLCA0MDk2KSk7CisgIEVYUEVDVF9FUSg0MDk2dWwsIEFsaWduVXAoNDA5NiwgNDA5NikpOworICBFWFBFQ1RfRVEoNDA5NnVsLCBBbGlnblVwKDQwOTUsIDQwOTYpKTsKKyAgRVhQRUNUX0VRKDgxOTJ1bCwgQWxpZ25VcCg0MDk3LCA0MDk2KSk7CisgIEVYUEVDVF9FUShrU2l6ZVRNYXggLSAzMSwgQWxpZ25VcChrU2l6ZVRNYXggLSA2MiwgMzIpKTsKKyAgRVhQRUNUX0VRKGtTaXplVE1heCAvIDIgKyAxLCBBbGlnblVwKDEsIGtTaXplVE1heCAvIDIgKyAxKSk7Cit9CisKIFRFU1QoQml0c1Rlc3QsIENvdW50TGVhZGluZ1plcm9CaXRzOCkgewogICBFWFBFQ1RfRVEoOHUsIENvdW50TGVhZGluZ1plcm9CaXRzKHVpbnQ4X3R7MH0pKTsKICAgRVhQRUNUX0VRKDd1LCBDb3VudExlYWRpbmdaZXJvQml0cyh1aW50OF90ezF9KSk7CmRpZmYgLS1naXQgYS9iYXNlL2NvbnRhaW5lcnMvZmxhdF90cmVlLmggYi9iYXNlL2NvbnRhaW5lcnMvZmxhdF90cmVlLmgKaW5kZXggOGM3ZTVmMC4uMjI4YjdkMSAxMDA2NDQKLS0tIGEvYmFzZS9jb250YWluZXJzL2ZsYXRfdHJlZS5oCisrKyBiL2Jhc2UvY29udGFpbmVycy9mbGF0X3RyZWUuaApAQCAtMjc4LDYgKzI3OCw5IEBACiAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgSyYga2V5KSBjb25zdDsKIAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgYm9vbCBjb250YWlucyhjb25zdCBLJiBrZXkpIGNvbnN0OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBLPgogICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBLJiBrZXkpOwogCiAgIHRlbXBsYXRlIDx0eXBlbmFtZSBLPgpAQCAtODc2LDYgKzg3OSwxMyBAQAogCiB0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZSwgY2xhc3MgR2V0S2V5RnJvbVZhbHVlLCBjbGFzcyBLZXlDb21wYXJlPgogdGVtcGxhdGUgPHR5cGVuYW1lIEs+Citib29sIGZsYXRfdHJlZTxLZXksIFZhbHVlLCBHZXRLZXlGcm9tVmFsdWUsIEtleUNvbXBhcmU+Ojpjb250YWlucyhjb25zdCBLJiBrZXkpIGNvbnN0IHsKKyAgYXV0byBsb3dlciA9IGxvd2VyX2JvdW5kKGtleSk7CisgIHJldHVybiBsb3dlciAhPSBlbmQoKSAmJiAha2V5X2NvbXAoKShrZXksIEdldEtleUZyb21WYWx1ZSgpKCpsb3dlcikpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBWYWx1ZSwgY2xhc3MgR2V0S2V5RnJvbVZhbHVlLCBjbGFzcyBLZXlDb21wYXJlPgordGVtcGxhdGUgPHR5cGVuYW1lIEs+CiBhdXRvIGZsYXRfdHJlZTxLZXksIFZhbHVlLCBHZXRLZXlGcm9tVmFsdWUsIEtleUNvbXBhcmU+OjplcXVhbF9yYW5nZSgKICAgICBjb25zdCBLJiBrZXkpIC0+IHN0ZDo6cGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+IHsKICAgYXV0byByZXMgPSBhc19jb25zdCgpLmVxdWFsX3JhbmdlKGtleSk7CmRpZmYgLS1naXQgYS9iYXNlL2NvbnRhaW5lcnMvZmxhdF90cmVlX3VuaXR0ZXN0LmNjIGIvYmFzZS9jb250YWluZXJzL2ZsYXRfdHJlZV91bml0dGVzdC5jYwppbmRleCAyZTM0NDFjLi41ZTNkOTU2IDEwMDY0NAotLS0gYS9iYXNlL2NvbnRhaW5lcnMvZmxhdF90cmVlX3VuaXR0ZXN0LmNjCisrKyBiL2Jhc2UvY29udGFpbmVycy9mbGF0X3RyZWVfdW5pdHRlc3QuY2MKQEAgLTExNjUsNiArMTE2NSwyMiBAQAogICB9CiB9CiAKKy8vIGJvb2wgY29udGFpbnMoY29uc3Qga2V5X3R5cGUmIGtleSkgY29uc3QKKworVEVTVChGbGF0VHJlZSwgQ29udGFpbnMpIHsKKyAgY29uc3QgSW50VHJlZSBjb250KHs1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyfSk7CisKKyAgRVhQRUNUX1RSVUUoY29udC5jb250YWlucyg1KSk7CisgIEVYUEVDVF9UUlVFKGNvbnQuY29udGFpbnMoNikpOworICBFWFBFQ1RfVFJVRShjb250LmNvbnRhaW5zKDcpKTsKKyAgRVhQRUNUX1RSVUUoY29udC5jb250YWlucyg4KSk7CisgIEVYUEVDVF9UUlVFKGNvbnQuY29udGFpbnMoOSkpOworICBFWFBFQ1RfVFJVRShjb250LmNvbnRhaW5zKDEwKSk7CisgIEVYUEVDVF9UUlVFKGNvbnQuY29udGFpbnMoMTEpKTsKKyAgRVhQRUNUX1RSVUUoY29udC5jb250YWlucygxMikpOworICBFWFBFQ1RfRkFMU0UoY29udC5jb250YWlucyg0KSk7Cit9CisKIC8vIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYga2V5KQogLy8gcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBrZXkpIGNvbnN0CiAKZGlmZiAtLWdpdCBhL2Jhc2UvZmlsZXMvZmlsZV9lbnVtZXJhdG9yX3N0YXJib2FyZC5jYyBiL2Jhc2UvZmlsZXMvZmlsZV9lbnVtZXJhdG9yX3N0YXJib2FyZC5jYwppbmRleCAzODZiMmRkLi45NzhlOTQwIDEwMDY0NAotLS0gYS9iYXNlL2ZpbGVzL2ZpbGVfZW51bWVyYXRvcl9zdGFyYm9hcmQuY2MKKysrIGIvYmFzZS9maWxlcy9maWxlX2VudW1lcmF0b3Jfc3RhcmJvYXJkLmNjCkBAIC0xMTQsNyArMTE0LDYgQEAKICAgLy8gc2V0LgogICBib29sIGZvdW5kX2RvdF9kb3QgPSBmYWxzZTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHN0ZDo6dmVjdG9yPGNoYXI+IGVudHJ5KGtTYkZpbGVNYXhOYW1lKTsKIAogICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KGRpciwgZW50cnkuZGF0YSgpLCBlbnRyeS5zaXplKCkpKSB7CkBAIC0xMjQsMTcgKzEyMyw2IEBACiAgICAgfQogICAgIHJldC5wdXNoX2JhY2soR2VuZXJhdGVFbnRyeShlbnRyeS5kYXRhKCkpKTsKICAgfQotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICBTYkRpcmVjdG9yeUVudHJ5IGVudHJ5OwotCi0gIHdoaWxlIChTYkRpcmVjdG9yeUdldE5leHQoZGlyLCAmZW50cnkpKSB7Ci0gICAgY29uc3QgY2hhciBkb3RfZG90X3N0cltdID0gIi4uIjsKLSAgICBpZiAoIXN0cm5jbXAoZW50cnkubmFtZSwgZG90X2RvdF9zdHIsIHNpemVvZihkb3RfZG90X3N0cikpKSB7Ci0gICAgICBmb3VuZF9kb3RfZG90ID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0LnB1c2hfYmFjayhHZW5lcmF0ZUVudHJ5KGVudHJ5Lm5hbWUpKTsKLSAgfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgIGlmICgoSU5DTFVERV9ET1RfRE9UICYgZmlsZV90eXBlXykgJiYgIWZvdW5kX2RvdF9kb3QpIHsKICAgICByZXQucHVzaF9iYWNrKEdlbmVyYXRlRW50cnkoIi4uIikpOwpkaWZmIC0tZ2l0IGEvYmFzZS9maWxlcy9pbXBvcnRhbnRfZmlsZV93cml0ZXIuY2MgYi9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlci5jYwppbmRleCAzNjBiNjc1Li40Y2I0NWU0IDEwMDY0NAotLS0gYS9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlci5jYworKysgYi9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlci5jYwpAQCAtMTM2LDEzICsxMzYsNyBAQAogYm9vbCBJbXBvcnRhbnRGaWxlV3JpdGVyOjpXcml0ZUZpbGVBdG9taWNhbGx5KGNvbnN0IEZpbGVQYXRoJiBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1BpZWNlIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUGllY2UgaGlzdG9ncmFtX3N1ZmZpeCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHJldHVybiBTYkZpbGVBdG9taWNSZXBsYWNlKHBhdGgudmFsdWUoKS5jX3N0cigpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotI2Vsc2UKLSAgU0JfTk9UUkVBQ0hFRCgpCi0gICAgICA8PCAiU2JGaWxlQXRvbWljUmVwbGFjZSBpcyBub3QgYXZhaWxhYmxlIGJlZm9yZSBzdGFyYm9hcmQgdmVyc2lvbiAxMiI7Ci0gIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogI2Vsc2UKIC8vIHN0YXRpYwpkaWZmIC0tZ2l0IGEvYmFzZS9maWxlcy9pbXBvcnRhbnRfZmlsZV93cml0ZXJfdW5pdHRlc3QuY2MgYi9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlcl91bml0dGVzdC5jYwppbmRleCBiZDUwMDdmLi5kNDQ0ZWVkIDEwMDY0NAotLS0gYS9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlcl91bml0dGVzdC5jYworKysgYi9iYXNlL2ZpbGVzL2ltcG9ydGFudF9maWxlX3dyaXRlcl91bml0dGVzdC5jYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImJhc2UvdGltZXIvbW9ja190aW1lci5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIG5hbWVzcGFjZSBiYXNlIHsKIAogbmFtZXNwYWNlIHsKQEAgLTM1Nyw0ICszNTYsMyBAQAogCiB9ICAvLyBuYW1lc3BhY2UgYmFzZQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9iYXNlL2xvY2F0aW9uLmggYi9iYXNlL2xvY2F0aW9uLmgKaW5kZXggY2IzZWY1Yi4uMGIzMGY5ZCAxMDA2NDQKLS0tIGEvYmFzZS9sb2NhdGlvbi5oCisrKyBiL2Jhc2UvbG9jYXRpb24uaApAQCAtNzIsNiArNzIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lX251bWJlcik7CiAKKy8vIFRoZSBtYWNyb3MgZGVmaW5lZCBoZXJlIHdpbGwgZXhwYW5kIHRvIHRoZSBDdXJyZW50IGZ1bmN0aW9uLgorI2lmIEJVSUxERkxBRyhFTkFCTEVfTE9DQVRJT05fU09VUkNFKQorCisgIHN0YXRpYyBMb2NhdGlvbiBDdXJyZW50KGNvbnN0IGNoYXIqIGZpbGVfbmFtZSA9IF9fRklMRV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVfbnVtYmVyID0gX19MSU5FX18pIHsKKyAgICByZXR1cm4gTG9jYXRpb24oIiIsIGZpbGVfbmFtZSwgbGluZV9udW1iZXIsIG51bGxwdHIpOworICB9CisKKyNlbHNlICAvLyBCVUlMREZMQUcoRU5BQkxFX0xPQ0FUSU9OX1NPVVJDRSkKKworICBzdGF0aWMgTG9jYXRpb24gQ3VycmVudCgpIHsKKyAgICByZXR1cm4gTG9jYXRpb24obnVsbHB0ciwgbnVsbHB0cik7CisgIH0KKworI2VuZGlmICAvLyBCVUlMREZMQUcoRU5BQkxFX0xPQ0FUSU9OX1NPVVJDRSkKKwogIHByaXZhdGU6CiAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWVfID0gbnVsbHB0cjsKICAgY29uc3QgY2hhciogZmlsZV9uYW1lXyA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9iYXNlL2xvZ2dpbmcuY2MgYi9iYXNlL2xvZ2dpbmcuY2MKaW5kZXggZWU1NzA0YS4uYTlkNjFjNiAxMDA2NDQKLS0tIGEvYmFzZS9sb2dnaW5nLmNjCisrKyBiL2Jhc2UvbG9nZ2luZy5jYwpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKICAgICBzdHJlYW1fIDw8IEN1cnJlbnRQcm9jZXNzSWQoKSA8PCAnOic7CiAjZW5kaWYKICAgaWYgKGdfbG9nX3RocmVhZF9pZCkKLSAgICBzdHJlYW1fIDw8IGJhc2U6OlBsYXRmb3JtVGhyZWFkOjpDdXJyZW50SWQoKSA8PCAnOic7CisgICAgc3RyZWFtXyA8PCBiYXNlOjpQbGF0Zm9ybVRocmVhZDo6R2V0TmFtZSgpIDw8ICcvJyA8PCBiYXNlOjpQbGF0Zm9ybVRocmVhZDo6Q3VycmVudElkKCkgPDwgIjoiOwogICBpZiAoZ19sb2dfdGltZXN0YW1wKSB7CiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgRXpUaW1lVmFsdWUgdGltZV92YWx1ZTsKZGlmZiAtLWdpdCBhL2Jhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIGIvYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgKaW5kZXggZGY0YWIwNC4uYzA3Y2Y3NCAxMDA2NDQKLS0tIGEvYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgKKysrIGIvYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgKQEAgLTUsNiArNSw3IEBACiAjaWZuZGVmIEJBU0VfTlVNRVJJQ1NfU0FGRV9DT05WRVJTSU9OU19IXwogI2RlZmluZSBCQVNFX05VTUVSSUNTX1NBRkVfQ09OVkVSU0lPTlNfSF8KIAorI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgpAQCAtMzM4LDYgKzMzOSwzMyBAQAogLy8gRXhwbGljaXRseSBtYWtlIGEgc2hvcnRlciBzaXplX3QgYWxpYXMgZm9yIGNvbnZlbmllbmNlLgogdXNpbmcgU2l6ZVQgPSBTdHJpY3ROdW1lcmljPHNpemVfdD47CiAKKy8vIGZsb2F0aW5nIC0+IGludGVncmFsIGNvbnZlcnNpb25zIHRoYXQgc2F0dXJhdGUgYW5kIHRodXMgY2FuIGFjdHVhbGx5IHJldHVybgorLy8gYW4gaW50ZWdyYWwgdHlwZS4gIEluIG1vc3QgY2FzZXMsIHRoZXNlIHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlciB0aGUgc3RkOjoKKy8vIHZlcnNpb25zLgordGVtcGxhdGUgPHR5cGVuYW1lIERzdCA9IGludCwKKyAgICAgICAgICB0eXBlbmFtZSBTcmMsCisgICAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWw8RHN0Pjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19mbG9hdGluZ19wb2ludDxTcmM+Ojp2YWx1ZT4+CitEc3QgQ2xhbXBGbG9vcihTcmMgdmFsdWUpIHsKKyAgcmV0dXJuIHNhdHVyYXRlZF9jYXN0PERzdD4oc3RkOjpmbG9vcih2YWx1ZSkpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIERzdCA9IGludCwKKyAgICAgICAgICB0eXBlbmFtZSBTcmMsCisgICAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfaW50ZWdyYWw8RHN0Pjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19mbG9hdGluZ19wb2ludDxTcmM+Ojp2YWx1ZT4+CitEc3QgQ2xhbXBDZWlsKFNyYyB2YWx1ZSkgeworICByZXR1cm4gc2F0dXJhdGVkX2Nhc3Q8RHN0PihzdGQ6OmNlaWwodmFsdWUpKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBEc3QgPSBpbnQsCisgICAgICAgICAgdHlwZW5hbWUgU3JjLAorICAgICAgICAgIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2ludGVncmFsPERzdD46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8U3JjPjo6dmFsdWU+PgorRHN0IENsYW1wUm91bmQoU3JjIHZhbHVlKSB7CisgIGNvbnN0IFNyYyByb3VuZGVkID0KKyAgICAgICh2YWx1ZSA+PSAwLjBmKSA/IHN0ZDo6Zmxvb3IodmFsdWUgKyAwLjVmKSA6IHN0ZDo6Y2VpbCh2YWx1ZSAtIDAuNWYpOworICByZXR1cm4gc2F0dXJhdGVkX2Nhc3Q8RHN0Pihyb3VuZGVkKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIGJhc2UKIAogI2VuZGlmICAvLyBCQVNFX05VTUVSSUNTX1NBRkVfQ09OVkVSU0lPTlNfSF8KZGlmZiAtLWdpdCBhL2Jhc2Uvc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25zLmNjIGIvYmFzZS9zdHJpbmdzL3V0Zl9zdHJpbmdfY29udmVyc2lvbnMuY2MKaW5kZXggYTgzZDEwNi4uYjE0NDEwYyAxMDA2NDQKLS0tIGEvYmFzZS9zdHJpbmdzL3V0Zl9zdHJpbmdfY29udmVyc2lvbnMuY2MKKysrIGIvYmFzZS9zdHJpbmdzL3V0Zl9zdHJpbmdfY29udmVyc2lvbnMuY2MKQEAgLTIwMCw3ICsyMDAsMTAgQEAKICAgYm9vbCByZXMgPSBEb1VURkNvbnZlcnNpb24oc3JjX3N0ci5kYXRhKCksIHNyY19sZW4zMiwgZGVzdCwgJmRlc3RfbGVuMzIpOwogCiAgIGRlc3Rfc3RyLT5yZXNpemUoZGVzdF9sZW4zMik7Ci0gIGRlc3Rfc3RyLT5zaHJpbmtfdG9fZml0KCk7CisgIC8vIGRlc3Rfc3RyLT5zaHJpbmtfdG9fZml0KCk7CisgIC8vIFdvcmthcm91bmQgZm9yIG1pc3Npbmcgc3ltYm9scyBsaW5raW5nIGlzc3VlIGZvciBYY29kZSAxMy4yLjEKKyAgLy8gTWFjIGJ1aWxkcy4KKyAgZGVzdF9zdHItPnJlc2VydmUoMCk7CiAKICAgcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2Jhc2Uvc3luY2hyb25pemF0aW9uL2NvbmRpdGlvbl92YXJpYWJsZS5oIGIvYmFzZS9zeW5jaHJvbml6YXRpb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgKaW5kZXggMWY4ODJkMy4uMTk3MDFhMSAxMDA2NDQKLS0tIGEvYmFzZS9zeW5jaHJvbml6YXRpb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgKKysrIGIvYmFzZS9zeW5jaHJvbml6YXRpb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpICYmIFNCX0FQSV9WRVJTSU9OID49IDEyCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2Jhc2UvdGVzdC90ZXN0Lmd5cGkgYi9iYXNlL3Rlc3QvdGVzdC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTlkMTRkLi4wMDAwMDAwCi0tLSBhL2Jhc2UvdGVzdC90ZXN0Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEluY2x1ZGUgdGhpcyBmaWxlIGZvciBhIG1haW4oKSBmdW5jdGlvbiB0aGF0IHNpbXBseSBpbnN0YW50aWF0ZXMgYW5kIHJ1bnMgYQotIyBiYXNlOjpUZXN0U3VpdGUuCi17Ci0gICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgXSwKLSAgJ3NvdXJjZXMnOiBbCi0gICAgJzwoREVQVEgpL2Jhc2UvdGVzdC9ydW5fYWxsX3VuaXR0ZXN0cy5jYycsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXAgYi9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYTdhNzEuLjAwMDAwMDAKLS0tIGEvYmFzZS90aGlyZF9wYXJ0eS9keW5hbWljX2Fubm90YXRpb25zL2R5bmFtaWNfYW5ub3RhdGlvbnMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4vLi4vLi4vJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2R5bmFtaWNfYW5ub3RhdGlvbnMuYycsCi0gICAgICAgICdkeW5hbWljX2Fubm90YXRpb25zLmgnLAotICAgICAgICAnLi4vdmFsZ3JpbmQvdmFsZ3JpbmQuaCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9iYXNlL3RpbWUvdGltZS5jYyBiL2Jhc2UvdGltZS90aW1lLmNjCmluZGV4IGZmMDE4ZTMuLjViMTgwYjEgMTAwNjQ0Ci0tLSBhL2Jhc2UvdGltZS90aW1lLmNjCisrKyBiL2Jhc2UvdGltZS90aW1lLmNjCkBAIC0zMCwxMSArMzAsOCBAQAogVGltZVRpY2tzTm93RnVuY3Rpb24gZ190aW1lX3RpY2tzX25vd19mdW5jdGlvbiA9CiAgICAgJnN1YnRsZTo6VGltZVRpY2tzTm93SWdub3JpbmdPdmVycmlkZTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSU1FX1RIUkVBRF9OT1cpCiBUaHJlYWRUaWNrc05vd0Z1bmN0aW9uIGdfdGhyZWFkX3RpY2tzX25vd19mdW5jdGlvbiA9CiAgICAgJnN1YnRsZTo6VGhyZWFkVGlja3NOb3dJZ25vcmluZ092ZXJyaWRlOwotI2VuZGlmCi0KIH0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAogCiAvLyBUaW1lRGVsdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjMsMTIgKzMyMCw4IEBACiAKIC8vIHN0YXRpYwogVGhyZWFkVGlja3MgVGhyZWFkVGlja3M6Ok5vdygpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmIChTYlRpbWVJc1RpbWVUaHJlYWROb3dTdXBwb3J0ZWQoKSkKLSNlbmRpZgogICAgIHJldHVybiBpbnRlcm5hbDo6Z190aHJlYWRfdGlja3Nfbm93X2Z1bmN0aW9uKCk7Ci0jZW5kaWYKICAgcmV0dXJuIFRocmVhZFRpY2tzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2Jhc2UvdGltZS90aW1lLmggYi9iYXNlL3RpbWUvdGltZS5oCmluZGV4IDdjYzc5N2UuLjU4MzA1ZDggMTAwNjQ0Ci0tLSBhL2Jhc2UvdGltZS90aW1lLmgKKysrIGIvYmFzZS90aW1lL3RpbWUuaApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgImJhc2UvYmFzZV9leHBvcnQuaCIKICNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5jbHVkZSAiYmFzZS9udW1lcmljcy9jbGFtcGVkX21hdGguaCIKICNpbmNsdWRlICJiYXNlL251bWVyaWNzL3NhZmVfbWF0aC5oIgogI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgogCkBAIC03MjYsNiArNzI3LDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4cGxvZGVkJiByaHMpIFdBUk5fVU5VU0VEX1JFU1VMVDsKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY29uc3RleHByIFRpbWVEZWx0YSBEYXlzKFQgbikgeworICByZXR1cm4gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZShNYWtlQ2xhbXBlZE51bShuKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJEYXkpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgVGltZURlbHRhIEhvdXJzKFQgbikgeworICByZXR1cm4gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZShNYWtlQ2xhbXBlZE51bShuKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJIb3VyKTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY29uc3RleHByIFRpbWVEZWx0YSBNaW51dGVzKFQgbikgeworICByZXR1cm4gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZShNYWtlQ2xhbXBlZE51bShuKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJNaW51dGUpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgVGltZURlbHRhIFNlY29uZHMoVCBuKSB7CisgIHJldHVybiBUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKE1ha2VDbGFtcGVkTnVtKG4pICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBUaW1lRGVsdGEgTWlsbGlzZWNvbmRzKFQgbikgeworICByZXR1cm4gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZShNYWtlQ2xhbXBlZE51bShuKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWU6OmtNaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBUaW1lRGVsdGEgTWljcm9zZWNvbmRzKFQgbikgeworICByZXR1cm4gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZShNYWtlQ2xhbXBlZE51bShuKSk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBUaW1lRGVsdGEgTmFub3NlY29uZHMoVCBuKSB7CisgIHJldHVybiBUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKE1ha2VDbGFtcGVkTnVtKG4pIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZTo6a05hbm9zZWNvbmRzUGVyTWljcm9zZWNvbmQpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgVGltZURlbHRhIEhlcnR6KFQgbikgeworICByZXR1cm4gbiA/IFRpbWVEZWx0YTo6RnJvbUludGVybmFsVmFsdWUoVGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlQ2xhbXBlZE51bShuKSkKKyAgICAgICAgICAgOiBUaW1lRGVsdGE6Ok1heCgpOworfQorCiAvLyBzdGF0aWMKIGNvbnN0ZXhwciBUaW1lRGVsdGEgVGltZURlbHRhOjpGcm9tRGF5cyhpbnQgZGF5cykgewogICByZXR1cm4gZGF5cyA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpCkBAIC05OTYsMTMgKzEwMzgsNyBAQAogICAvLyBSZXR1cm5zIHRydWUgaWYgVGhyZWFkVGlja3M6Ok5vdygpIGlzIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS4KICAgc3RhdGljIGJvb2wgSXNTdXBwb3J0ZWQoKSBXQVJOX1VOVVNFRF9SRVNVTFQgewogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgcmV0dXJuIFNiVGltZUlzVGltZVRocmVhZE5vd1N1cHBvcnRlZCgpOwotI2VsaWYgU0JfSEFTKFRJTUVfVEhSRUFEX05PVykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiAjZWxzZQogI2lmIChkZWZpbmVkKF9QT1NJWF9USFJFQURfQ1BVVElNRSkgJiYgKF9QT1NJWF9USFJFQURfQ1BVVElNRSA+PSAwKSkgfHwgXAogICAgIChkZWZpbmVkKE9TX01BQ09TWCkgJiYgIWRlZmluZWQoT1NfSU9TKSkgfHwgZGVmaW5lZChPU19BTkRST0lEKSB8fCAgXApkaWZmIC0tZ2l0IGEvYmFzZS90aW1lL3RpbWVfbm93X3N0YXJib2FyZC5jYyBiL2Jhc2UvdGltZS90aW1lX25vd19zdGFyYm9hcmQuY2MKaW5kZXggYmRiMzVhYy4uODg5Mjg0NiAxMDA2NDQKLS0tIGEvYmFzZS90aW1lL3RpbWVfbm93X3N0YXJib2FyZC5jYworKysgYi9iYXNlL3RpbWUvdGltZV9ub3dfc3RhcmJvYXJkLmNjCkBAIC02MiwxMyArNjIsOSBAQAogCiBuYW1lc3BhY2Ugc3VidGxlIHsKIFRocmVhZFRpY2tzIFRocmVhZFRpY2tzTm93SWdub3JpbmdPdmVycmlkZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmIChTYlRpbWVJc1RpbWVUaHJlYWROb3dTdXBwb3J0ZWQoKSkKLSNlbmRpZgogICAgIHJldHVybiBUaHJlYWRUaWNrcygpICsKICAgICAgICAgICAgVGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKFNiVGltZUdldE1vbm90b25pY1RocmVhZE5vdygpKTsKLSNlbmRpZgogICByZXR1cm4gVGhyZWFkVGlja3MoKTsKIH0KIH0gIC8vIG5hbWVzcGFjZSBzdWJ0bGUKZGlmZiAtLWdpdCBhL2Jhc2UvdGltZS90aW1lX292ZXJyaWRlLmNjIGIvYmFzZS90aW1lL3RpbWVfb3ZlcnJpZGUuY2MKaW5kZXggOTdjMDc0YS4uMDk2OTJiNSAxMDA2NDQKLS0tIGEvYmFzZS90aW1lL3RpbWVfb3ZlcnJpZGUuY2MKKysrIGIvYmFzZS90aW1lL3RpbWVfb3ZlcnJpZGUuY2MKQEAgLTI2LDEwICsyNiw4IEBACiAgIH0KICAgaWYgKHRpbWVfdGlja3Nfb3ZlcnJpZGUpCiAgICAgaW50ZXJuYWw6OmdfdGltZV90aWNrc19ub3dfZnVuY3Rpb24gPSB0aW1lX3RpY2tzX292ZXJyaWRlOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSU1FX1RIUkVBRF9OT1cpCiAgIGlmICh0aHJlYWRfdGlja3Nfb3ZlcnJpZGUpCiAgICAgaW50ZXJuYWw6OmdfdGhyZWFkX3RpY2tzX25vd19mdW5jdGlvbiA9IHRocmVhZF90aWNrc19vdmVycmlkZTsKLSNlbmRpZgogfQogCiBTY29wZWRUaW1lQ2xvY2tPdmVycmlkZXM6On5TY29wZWRUaW1lQ2xvY2tPdmVycmlkZXMoKSB7CkBAIC0zNyw5ICszNSw3IEBACiAgIGludGVybmFsOjpnX3RpbWVfbm93X2Zyb21fc3lzdGVtX3RpbWVfZnVuY3Rpb24gPQogICAgICAgJlRpbWVOb3dGcm9tU3lzdGVtVGltZUlnbm9yaW5nT3ZlcnJpZGU7CiAgIGludGVybmFsOjpnX3RpbWVfdGlja3Nfbm93X2Z1bmN0aW9uID0gJlRpbWVUaWNrc05vd0lnbm9yaW5nT3ZlcnJpZGU7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFRJTUVfVEhSRUFEX05PVykKICAgaW50ZXJuYWw6OmdfdGhyZWFkX3RpY2tzX25vd19mdW5jdGlvbiA9ICZUaHJlYWRUaWNrc05vd0lnbm9yaW5nT3ZlcnJpZGU7Ci0jZW5kaWYKICNpZiBEQ0hFQ0tfSVNfT04oKQogICBvdmVycmlkZXNfYWN0aXZlXyA9IGZhbHNlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9iYXNlL3RpbWUvdGltZV91bml0dGVzdC5jYyBiL2Jhc2UvdGltZS90aW1lX3VuaXR0ZXN0LmNjCmluZGV4IGViMGRjZDEuLmYzNmU1ZTggMTAwNjQ0Ci0tLSBhL2Jhc2UvdGltZS90aW1lX3VuaXR0ZXN0LmNjCisrKyBiL2Jhc2UvdGltZS90aW1lX3VuaXR0ZXN0LmNjCkBAIC05OTksNyArOTk5LDYgQEAKIC8vIHN0YXRpYwogVGhyZWFkVGlja3MgVGhyZWFkVGlja3NPdmVycmlkZTo6bm93X3RpY2tzXzsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSU1FX1RIUkVBRF9OT1cpCiAvLyBJT1MgZG9lc24ndCBzdXBwb3J0IFRocmVhZFRpY2tzOjpOb3coKS4KICNpZiBkZWZpbmVkKE9TX0lPUykKICNkZWZpbmUgTUFZQkVfTm93T3ZlcnJpZGUgRElTQUJMRURfTm93T3ZlcnJpZGUKQEAgLTEwMDcsMTIgKzEwMDYsMTAgQEAKICNkZWZpbmUgTUFZQkVfTm93T3ZlcnJpZGUgTm93T3ZlcnJpZGUKICNlbmRpZgogVEVTVChUaHJlYWRUaWNrcywgTUFZQkVfTm93T3ZlcnJpZGUpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoIVNiVGltZUlzVGltZVRocmVhZE5vd1N1cHBvcnRlZCgpKSB7CiAgICAgU0JfTE9HKElORk8pIDw8ICJUaW1lIHRocmVhZCBub3cgbm90IHN1cHBvcnRlZC4gVGVzdCBza2lwcGVkLiI7CiAgICAgcmV0dXJuOwogICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKICAgVGhyZWFkVGlja3NPdmVycmlkZTo6bm93X3RpY2tzXyA9IFRocmVhZFRpY2tzOjpNaW4oKTsKIApAQCAtMTA0OSw4ICsxMDQ2LDYgQEAKICAgRVhQRUNUX0xFKGluaXRpYWxfdGhyZWFkX3RpY2tzLCBzdWJ0bGU6OlRocmVhZFRpY2tzTm93SWdub3JpbmdPdmVycmlkZSgpKTsKICAgRVhQRUNUX0dUKFRocmVhZFRpY2tzOjpNYXgoKSwgc3VidGxlOjpUaHJlYWRUaWNrc05vd0lnbm9yaW5nT3ZlcnJpZGUoKSk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhUSU1FX1RIUkVBRF9OT1cpCiAKIFRFU1QoVGhyZWFkVGlja3MsIFRocmVhZE5vdykgewogICBpZiAoVGhyZWFkVGlja3M6OklzU3VwcG9ydGVkKCkpIHsKZGlmZiAtLWdpdCBhL2Jhc2UvdXRpbC92YWx1ZXMvdmFsdWVzX3V0aWwuZ3lwIGIvYmFzZS91dGlsL3ZhbHVlcy92YWx1ZXNfdXRpbC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTM3YzAuLjAwMDAwMDAKLS0tIGEvYmFzZS91dGlsL3ZhbHVlcy92YWx1ZXNfdXRpbC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndmFsdWVzX3V0aWwnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd2YWx1ZXNfdXRpbC5jYycsCi0gICAgICAgICd2YWx1ZXNfdXRpbC5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXQotfQpkaWZmIC0tZ2l0IGEvYnVpbGQvY29uZmlnL2NvbXBpbGVyL0JVSUxELmduIGIvYnVpbGQvY29uZmlnL2NvbXBpbGVyL0JVSUxELmduCmluZGV4IDIyYjVhNDIuLjYyNjBiODEgMTAwNjQ0Ci0tLSBhL2J1aWxkL2NvbmZpZy9jb21waWxlci9CVUlMRC5nbgorKysgYi9idWlsZC9jb25maWcvY29tcGlsZXIvQlVJTEQuZ24KQEAgLTE1ODUsNyArMTU4NSw3IEBACiAgICAgICAgIGNmbGFncyArPSBbICItV25vLW5vbnBvcnRhYmxlLWluY2x1ZGUtcGF0aCIgXQogICAgICAgfQogCi0gICAgICBpZiAoY3VycmVudF90b29sY2hhaW4gPT0gaG9zdF90b29sY2hhaW4gfHwgIXVzZV94Y29kZV9jbGFuZykgeworICAgICAgaWYgKChjdXJyZW50X3Rvb2xjaGFpbiA9PSBob3N0X3Rvb2xjaGFpbiB8fCAhdXNlX3hjb2RlX2NsYW5nKSAmJiAhdXNpbmdfb2xkX2NvbXBpbGVyKSB7CiAgICAgICAgICMgRmxhZ3MgTmFDbCAoQ2xhbmcgMy43KSBhbmQgWGNvZGUgOS4yIChDbGFuZyBjbGFuZy05MDAuMC4zOS4yKSBkbyBub3QKICAgICAgICAgIyByZWNvZ25pemUuCiAgICAgICAgIGNmbGFncyArPSBbCkBAIC0xNjQyLDcgKzE2NDIsMTIgQEAKIAogY29uZmlnKCJjaHJvbWl1bV9jb2RlIikgewogICBpZiAoaXNfd2luKSB7Ci0gICAgY2ZsYWdzID0gWyAiL1c0IiBdICAjIFdhcm5pbmcgbGV2ZWwgNC4KKyAgICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgICAjIFRoZSBwbGF0Zm9ybSBzaG91bGQgc2V0IHdhcm5pbmcgZmxhZ3MuCisgICAgICBjZmxhZ3MgPSBbXQorICAgIH0gZWxzZSB7CisgICAgICBjZmxhZ3MgPSBbICIvVzQiIF0gICMgV2FybmluZyBsZXZlbCA0LgorICAgIH0KIAogICAgIGlmIChpc19jbGFuZykgewogICAgICAgIyBPcHQgaW4gdG8gYWRkaXRpb25hbCBbW25vZGlzY2FyZF1dIG9uIHN0YW5kYXJkIGxpYnJhcnkgbWV0aG9kcy4KQEAgLTE3NDgsNiArMTc1MywxMCBAQAogICAgICAgIi93ZDQyNjciLCAgIyBUT0RPKGpzY2h1aCk6IHNpemVfdCB0byBpbnQuCiAgICAgICAiL3dkNDk5NiIsICAjIERlcHJlY2F0ZWQgZnVuY3Rpb24gd2FybmluZy4KICAgICBdCisgICAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgICAgIyBUaGUgcGxhdGZvcm0gc2hvdWxkIHNldCB3YXJuaW5nIGZsYWdzLgorICAgICAgY2ZsYWdzIC09IFsgIi9XMyIgXQorICAgIH0KICAgICBkZWZpbmVzICs9IFsKICAgICAgICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiLAogICAgICAgIl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiLApAQCAtMTg4OCw4ICsxODk3LDExIEBACiAgICAgICBkZWZpbmVzID0gWyAiX0hBU19FWENFUFRJT05TPTAiIF0KICAgICB9CiAgIH0gZWxzZSB7Ci0gICAgY2ZsYWdzX2NjID0gWyAiLWZuby1leGNlcHRpb25zIiBdCi0gICAgY2ZsYWdzX29iamNjID0gY2ZsYWdzX2NjCisgICAgIyBUaGlzIGhhY2sgZW5zdXJlcyByYXNwaSBkb2VzIG5vdCBjb21waWxlIGFueXRoaW5nIHdpdGggLWZuby1leGNlcHRpb25zLgorICAgIGlmICghZGVmaW5lZChlbmFibGVfZXhjZXB0aW9uc19vdmVycmlkZSkgfHwgIWVuYWJsZV9leGNlcHRpb25zX292ZXJyaWRlKSB7CisgICAgICBjZmxhZ3NfY2MgPSBbICItZm5vLWV4Y2VwdGlvbnMiIF0KKyAgICAgIGNmbGFnc19vYmpjYyA9IGNmbGFnc19jYworICAgIH0KICAgfQogfQogCmRpZmYgLS1naXQgYS9idWlsZC9jb25maWcvd2luL3Zpc3VhbF9zdHVkaW9fdmVyc2lvbi5nbmkgYi9idWlsZC9jb25maWcvd2luL3Zpc3VhbF9zdHVkaW9fdmVyc2lvbi5nbmkKaW5kZXggYjQ2YzUzMS4uNDdmMTZjNCAxMDA2NDQKLS0tIGEvYnVpbGQvY29uZmlnL3dpbi92aXN1YWxfc3R1ZGlvX3ZlcnNpb24uZ25pCisrKyBiL2J1aWxkL2NvbmZpZy93aW4vdmlzdWFsX3N0dWRpb192ZXJzaW9uLmduaQpAQCAtMTIsOCArMTIsMTIgQEAKICAgICAjIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KICAgICB3aW5kb3dzX3Nka19wYXRoID0gIkM6L1Byb2dyYW0gRmlsZXMgKHg4NikvV2luZG93cyBLaXRzLzEwIgogCi0gICAgIyBWZXJzaW9uIG9mIFdpbmRvd3MgU0RLLgotICAgIHdka192ZXJzaW9uID0gIjEwLjAuMTc3NjMuMCIKKyAgICAjIFZlcnNpb24gb2YgV2luZG93cyBTREsuIFhCMSByZXF1aXJlcyA+PTEwLjAuMjIwMDAuMC4KKyAgICBpZiAoY3VycmVudF9vcyA9PSAid2ludXdwIikgeworICAgICAgd2RrX3ZlcnNpb24gPSAiMTAuMC4yMjAwMC4wIgorICAgIH0gZWxzZSB7CisgICAgICB3ZGtfdmVyc2lvbiA9ICIxMC4wLjE3NzYzLjAiCisgICAgfQogICB9CiAKICAgaWYgKGlzX2RvY2tlcl9idWlsZCkgewpkaWZmIC0tZ2l0IGEvYnVpbGQvdG9vbGNoYWluL2NjX3dyYXBwZXIuZ25pIGIvYnVpbGQvdG9vbGNoYWluL2NjX3dyYXBwZXIuZ25pCmluZGV4IDA3MDQ2MWYuLmYyZDM2OGQgMTAwNjQ0Ci0tLSBhL2J1aWxkL3Rvb2xjaGFpbi9jY193cmFwcGVyLmduaQorKysgYi9idWlsZC90b29sY2hhaW4vY2Nfd3JhcHBlci5nbmkKQEAgLTM1LDE1ICszNSwzNiBAQAogZGVjbGFyZV9hcmdzKCkgewogICAjIFNldCB0byAiY2NhY2hlIiwgImljZWNjIiBvciAiZGlzdGNjIi4gIFByb2JhYmx5IGRvZXNuJ3Qgd29yayBvbiB3aW5kb3dzLgogICBjY193cmFwcGVyID0gIiIKKworICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgZW5hYmxlX3NjY2FjaGUgPSBnZXRlbnYoIlNDQ0FDSEUiKSA9PSAiMSIKKyAgfQorfQorCitpZiAoaXNfc3RhcmJvYXJkICYmIGdldGVudigiU0NDQUNIRSIpID09ICIiKSB7CisgIGVuYWJsZV9zY2NhY2hlID0gaG9zdF9vcyA9PSAid2luIiAmJiBjb2JhbHRfZmFzdGJ1aWxkCit9CisKK2lmIChpc19zdGFyYm9hcmQgJiYgZW5hYmxlX3NjY2FjaGUpIHsKKyAgX3NldF9zY2NhY2hlX2djc19idWNrZXQgPSBnZXRlbnYoIlNDQ0FDSEVfR0NTX0JVQ0tFVCIpICE9ICIiCisgIF9zZXRfc2NjYWNoZV9nY3Nfa2V5X3BhdGggPSBnZXRlbnYoIlNDQ0FDSEVfR0NTX0tFWV9QQVRIIikgIT0gIiIKKyAgX3NldF9zY2NhY2hlX2djc19vYXV0aF91cmwgPSBnZXRlbnYoIlNDQ0FDSEVfR0NTX09BVVRIX1VSTCIpICE9ICIiCisgIF9zZXRfc2NjYWNoZV9nY3NfcndfbW9kZSA9IGdldGVudigiU0NDQUNIRV9HQ1NfUldfTU9ERSIpICE9ICIiCisgIF9zZXRfc2NjYWNoZV9kaXIgPSBnZXRlbnYoIlNDQ0FDSEVfRElSIikgIT0gIiIKKyAgYXNzZXJ0KChfc2V0X3NjY2FjaGVfZGlyKSB8fCAoX3NldF9zY2NhY2hlX2djc19idWNrZXQgJiYKKyAgICAgICAgICAgICAoX3NldF9zY2NhY2hlX2djc19rZXlfcGF0aCB8fCBfc2V0X3NjY2FjaGVfZ2NzX29hdXRoX3VybCkgJiYKKyAgICAgICAgICAgICBfc2V0X3NjY2FjaGVfZ2NzX3J3X21vZGUpLAorICAgICAgICAgIlNldCBTY2NhY2hlIGVudmlyb25tZW50IHZhcmlhYmxlcyBiZWZvcmUgdXNlLiIpCiB9CiAKIGlmIChpc19zdGFyYm9hcmQgJiYgY2Nfd3JhcHBlciA9PSAiIikgewogICAjIFRPRE8oaHR0cHM6Ly9jcmJ1Zy5jb20vZ24vMjczKTogVXNlIHNjY2FjaGUgbG9jYWxseSBhcyB3ZWxsLgotICBpZiAoaG9zdF9vcyA9PSAid2luIiAmJiBjb2JhbHRfZmFzdGJ1aWxkKSB7Ci0gICAgY2Nfd3JhcHBlciA9ICJzY2NhY2hlLmV4ZSIKKyAgaWYgKGVuYWJsZV9zY2NhY2hlKSB7CisgICAgY2Nfd3JhcHBlciA9ICJzY2NhY2hlIgogICB9IGVsc2UgaWYgKGhvc3Rfb3MgIT0gIndpbiIpIHsKICAgICBjY193cmFwcGVyID0gImNjYWNoZSIKICAgfQorICBwcmludCgiQnVpbGQgQWNjZWxlcmF0b3I6ICIgKyBjY193cmFwcGVyKQogfQogCiBhc3NlcnQoIXVzZV9nb21hIHx8IGNjX3dyYXBwZXIgPT0gIiIsCmRpZmYgLS1naXQgYS9idWlsZC90b29sY2hhaW4vY29uY3VycmVudF9saW5rcy5nbmkgYi9idWlsZC90b29sY2hhaW4vY29uY3VycmVudF9saW5rcy5nbmkKaW5kZXggZjFhNDJjOS4uZTA3NGRmZCAxMDA2NDQKLS0tIGEvYnVpbGQvdG9vbGNoYWluL2NvbmN1cnJlbnRfbGlua3MuZ25pCisrKyBiL2J1aWxkL3Rvb2xjaGFpbi9jb25jdXJyZW50X2xpbmtzLmduaQpAQCAtMjAsMTAgKzIwLDEwIEBACiAgICMgbGlua3MgYXQgb25jZSB0aGFuIHdlIGRvIGNvbXBpbGVzLCBiZWNhdXNlIGxpbmtpbmcgaXMgbWVtb3J5LWludGVuc2l2ZS4KICAgIyBUaGUgZGVmYXVsdCB0byB1c2UgdmFyaWVzIGJ5IHBsYXRmb3JtIGFuZCBieSB0aGUgYW1vdW50IG9mIG1lbW9yeQogICAjIGF2YWlsYWJsZSwgc28gd2UgY2FsbCBvdXQgdG8gYSBzY3JpcHQgdG8gZ2V0IHRoZSByaWdodCB2YWx1ZS4KLSAgY29uY3VycmVudF9saW5rcyA9IC0xCisgIGNvbmN1cnJlbnRfbGlua3MgPSBnZXRlbnYoIkNPQkFMVF9DT05DVVJSRU5UX0xJTktTIikKIH0KIAotaWYgKGNvbmN1cnJlbnRfbGlua3MgPT0gLTEpIHsKK2lmIChjb25jdXJyZW50X2xpbmtzID09ICIiKSB7CiAgIGlmICh1c2VfdGhpbl9sdG8pIHsKICAgICBfYXJncyA9IFsgIi0tcmVzZXJ2ZV9tZW1fZ2I9MTAiIF0KICAgICBpZiAodXNlX2dvbWFfdGhpbl9sdG8pIHsKQEAgLTEwMSw2ICsxMDEsMTAgQEAKICAgfQogfSBlbHNlIHsKICAgYXNzZXJ0KCF1c2VfdGhpbl9sdG8sICJjYW4ndCBleHBsaWNpdGx5IHNldCBjb25jdXJyZW50X2xpbmtzIHdpdGggdGhpbmx0byIpCisKKyAgIyBDb252ZXJ0IHRoZSB2YWx1ZSB0byBhIG51bWJlciBpZiBpdCdzIGEgc3RyaW5nLgorICBjb25jdXJyZW50X2xpbmtzID0KKyAgICAgIGV4ZWNfc2NyaXB0KCIvL3N0YXJib2FyZC9idWlsZC9lY2hvLnB5IiwgWyBjb25jdXJyZW50X2xpbmtzIF0sICJ2YWx1ZSIpCiAgIGNvbmN1cnJlbnRfbGlua3NfbG9ncyA9CiAgICAgICBbICJjb25jdXJyZW50X2xpbmtzIHNldCBieSBHTiBhcmcgKHZhbHVlPSRjb25jdXJyZW50X2xpbmtzKSIgXQogfQpkaWZmIC0tZ2l0IGEvYnVpbGQvdG9vbGNoYWluL2djY190b29sY2hhaW4uZ25pIGIvYnVpbGQvdG9vbGNoYWluL2djY190b29sY2hhaW4uZ25pCmluZGV4IGI0MzJkMjAuLmYzMjVlNTYgMTAwNjQ0Ci0tLSBhL2J1aWxkL3Rvb2xjaGFpbi9nY2NfdG9vbGNoYWluLmduaQorKysgYi9idWlsZC90b29sY2hhaW4vZ2NjX3Rvb2xjaGFpbi5nbmkKQEAgLTM4NCw5ICszODQsOSBAQAogICAgICAgZGVwZmlsZSA9ICJ7e291dHB1dH19LmQiCiAKICAgICAgICMgVE9ETyhiLzIwNjY0Mjk5NCk6IHNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY29uZGl0aW9uLiBJdCdzIG5lZWRlZCBmb3IKLSAgICAgICMgbm93IHRvIGFkZCBjZmxhZ3MgZm9yIGV2ZXJncmVlbi1hcm0qIHBsYXRmb3JtcyBidXQgd2UgaGF2ZW4ndCB5ZXQKLSAgICAgICMgZGVjaWRlZCB3aGV0aGVyIGNmbGFncyBzaG91bGQgYmUgYWRkZWQgaGVyZSBmb3IgYWxsIHBsYXRmb3Jtcy4KLSAgICAgIGlmIChpc19zdGFyYm9hcmQgJiYgc2JfaXNfZXZlcmdyZWVuICYmIHRhcmdldF9jcHUgPT0gImFybSIpIHsKKyAgICAgICMgbm93IHRvIGFkZCBjZmxhZ3MgZm9yIGV2ZXJncmVlbiBwbGF0Zm9ybXMgYnV0IHdlIGhhdmVuJ3QgeWV0IGRlY2lkZWQKKyAgICAgICMgd2hldGhlciBjZmxhZ3Mgc2hvdWxkIGJlIGFkZGVkIGhlcmUgZm9yIGFsbCBwbGF0Zm9ybXMuCisgICAgICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbikgewogICAgICAgICBjb21tYW5kID0gIiRhc20gLU1NRCAtTUYgJGRlcGZpbGUgJHtyZWJ1aWxkX3N0cmluZ317e2RlZmluZXN9fSB7e2luY2x1ZGVfZGlyc319IHt7Y2ZsYWdzfX0ge3thc21mbGFnc319JHtleHRyYV9hc21mbGFnc30gLWMge3tzb3VyY2V9fSAtbyB7e291dHB1dH19IgogICAgICAgfSBlbHNlIHsKICAgICAgICAgY29tbWFuZCA9ICIkYXNtIC1NTUQgLU1GICRkZXBmaWxlICR7cmVidWlsZF9zdHJpbmd9e3tkZWZpbmVzfX0ge3tpbmNsdWRlX2RpcnN9fSB7e2FzbWZsYWdzfX0ke2V4dHJhX2FzbWZsYWdzfSAtYyB7e3NvdXJjZX19IC1vIHt7b3V0cHV0fX0iCkBAIC00NTMsOSArNDUzLDkgQEAKICAgICAgIHRvY2ZpbGUgPSBzb2ZpbGUgKyAiLlRPQyIKIAogICAgICAgIyBUT0RPKGIvMjA2NjQyOTk0KTogc2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBjb25kaXRpb24uIEl0J3MgbmVlZGVkIGZvcgotICAgICAgIyBub3cgYmVjYXVzZSB3ZSB1c2UgdGhlIGxkLmxsZCBsaW5rZXIgZm9yIGV2ZXJncmVlbi1hcm0qIGFuZCBuZWVkIHRvIHBhc3MKLSAgICAgICMgb3B0aW9ucyBhcyBgb3B0aW9uYCBpbnN0ZWFkIG9mIGAtV2wsb3B0aW9uYC4KLSAgICAgIGlmIChpc19zdGFyYm9hcmQgJiYgc2JfaXNfZXZlcmdyZWVuICYmIHRhcmdldF9jcHUgPT0gImFybSIpIHsKKyAgICAgICMgbm93IGJlY2F1c2Ugd2UgdXNlIHRoZSBsZC5sbGQgbGlua2VyIGZvciBldmVyZ3JlZW4gcGxhdGZvcm1zIGFuZCBuZWVkIHRvCisgICAgICAjIHBhc3Mgb3B0aW9ucyBhcyBgb3B0aW9uYCBpbnN0ZWFkIG9mIGAtV2wsb3B0aW9uYC4KKyAgICAgIGlmIChpc19zdGFyYm9hcmQgJiYgc2JfaXNfZXZlcmdyZWVuKSB7CiAgICAgICAgIGxpbmtfY29tbWFuZCA9ICIkbGQgLXNoYXJlZCAtc29uYW1lPVwiJHNvbmFtZVwiIHt7bGRmbGFnc319JHtleHRyYV9sZGZsYWdzfSAtbyBcIiR1bnN0cmlwcGVkX3NvZmlsZVwiIEBcIiRyc3BmaWxlXCIiCiAgICAgICB9IGVsc2UgewogICAgICAgICBsaW5rX2NvbW1hbmQgPSAiJGxkIC1zaGFyZWQgLVdsLC1zb25hbWU9XCIkc29uYW1lXCIge3tsZGZsYWdzfX0ke2V4dHJhX2xkZmxhZ3N9IC1vIFwiJHVuc3RyaXBwZWRfc29maWxlXCIgQFwiJHJzcGZpbGVcIiIKQEAgLTQ4Nyw5ICs0ODcsOSBAQAogICAgICAgaWYgKHRhcmdldF9jcHUgPT0gIm1pcHNlbCIgJiYgaXNfY29tcG9uZW50X2J1aWxkICYmIGlzX2FuZHJvaWQpIHsKICAgICAgICAgcnNwZmlsZV9jb250ZW50ID0gIi1XbCwtLXN0YXJ0LWdyb3VwIC1XbCwtLXdob2xlLWFyY2hpdmUge3tpbnB1dHN9fSB7e3NvbGlic319IC1XbCwtLW5vLXdob2xlLWFyY2hpdmUge3tsaWJzfX0gLVdsLC0tZW5kLWdyb3VwJHRhaWxfbGliX2RlcGVuZGVuY2llcyIKICAgICAgICAgIyBUT0RPKGIvMjA2NjQyOTk0KTogc2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBjb25kaXRpb24uIEl0J3MgbmVlZGVkIGZvcgotICAgICAgICAjIG5vdyBiZWNhdXNlIHdlIHVzZSB0aGUgbGQubGxkIGxpbmtlciBmb3IgZXZlcmdyZWVuLWFybSogYW5kIG5lZWQgdG8KLSAgICAgICAgIyBwYXNzIG9wdGlvbnMgYXMgYG9wdGlvbmAgaW5zdGVhZCBvZiBgLVdsLG9wdGlvbmAuCi0gICAgICB9IGVsc2UgaWYgKGlzX3N0YXJib2FyZCAmJiBzYl9pc19ldmVyZ3JlZW4gJiYgdGFyZ2V0X2NwdSA9PSAiYXJtIikgeworICAgICAgICAjIG5vdyBiZWNhdXNlIHdlIHVzZSB0aGUgbGQubGxkIGxpbmtlciBmb3IgZXZlcmdyZWVuIHBsYXRmb3JtcyBhbmQgbmVlZAorICAgICAgICAjIHRvIHBhc3Mgb3B0aW9ucyBhcyBgb3B0aW9uYCBpbnN0ZWFkIG9mIGAtV2wsb3B0aW9uYC4KKyAgICAgIH0gZWxzZSBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbikgewogICAgICAgICByc3BmaWxlX2NvbnRlbnQgPSAiLS13aG9sZS1hcmNoaXZlIHt7aW5wdXRzfX0ge3tzb2xpYnN9fSAtLW5vLXdob2xlLWFyY2hpdmUge3tsaWJzfX0kdGFpbF9saWJfZGVwZW5kZW5jaWVzIgogICAgICAgfSBlbHNlIHsKICAgICAgICAgcnNwZmlsZV9jb250ZW50ID0gIi1XbCwtLXdob2xlLWFyY2hpdmUge3tpbnB1dHN9fSB7e3NvbGlic319IC1XbCwtLW5vLXdob2xlLWFyY2hpdmUge3tsaWJzfX0kdGFpbF9saWJfZGVwZW5kZW5jaWVzIgpAQCAtNjEyLDcgKzYxMiwxMiBAQAogICAgICAgICBzdGFydF9ncm91cF9mbGFnID0gIi1XbCwtLXN0YXJ0LWdyb3VwIgogICAgICAgICBlbmRfZ3JvdXBfZmxhZyA9ICItV2wsLS1lbmQtZ3JvdXAgIgogICAgICAgfQotICAgICAgbGlua19jb21tYW5kID0gIiRsZCB7e2xkZmxhZ3N9fSR7ZXh0cmFfbGRmbGFnc30ge3tsaWJzfX0gLW8gXCIkdW5zdHJpcHBlZF9vdXRmaWxlXCIgJHN0YXJ0X2dyb3VwX2ZsYWcgQFwiJHJzcGZpbGVcIiB7e3NvbGlic319ICRlbmRfZ3JvdXBfZmxhZyR0YWlsX2xpYl9kZXBlbmRlbmNpZXMiCisKKyAgICAgIGlmICh1c2luZ19vbGRfY29tcGlsZXIpIHsKKyAgICAgICAgbGlua19jb21tYW5kID0gIiRsZCB7e2xkZmxhZ3N9fSR7ZXh0cmFfbGRmbGFnc30gLW8gXCIkdW5zdHJpcHBlZF9vdXRmaWxlXCIgJHN0YXJ0X2dyb3VwX2ZsYWcgQFwiJHJzcGZpbGVcIiB7e3NvbGlic319ICRlbmRfZ3JvdXBfZmxhZyB7e2xpYnN9fSAkdGFpbF9saWJfZGVwZW5kZW5jaWVzIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgbGlua19jb21tYW5kID0gIiRsZCB7e2xkZmxhZ3N9fSR7ZXh0cmFfbGRmbGFnc30ge3tsaWJzfX0gLW8gXCIkdW5zdHJpcHBlZF9vdXRmaWxlXCIgJHN0YXJ0X2dyb3VwX2ZsYWcgQFwiJHJzcGZpbGVcIiB7e3NvbGlic319ICRlbmRfZ3JvdXBfZmxhZyR0YWlsX2xpYl9kZXBlbmRlbmNpZXMiCisgICAgICB9CiAKICAgICAgICMgR2VuZXJhdGUgYSBtYXAgZmlsZSB0byBiZSB1c2VkIGZvciBiaW5hcnkgc2l6ZSBhbmFseXNpcy4KICAgICAgICMgTWFwIGZpbGUgYWRkcyB+MTAlIHRvIHRoZSBsaW5rIHRpbWUgb24gYSB6NjIwLgpkaWZmIC0tZ2l0IGEvYnVpbGQvdG9vbGNoYWluL3dpbi9tc3ZjX3Rvb2xjaGFpbi5nbmkgYi9idWlsZC90b29sY2hhaW4vd2luL21zdmNfdG9vbGNoYWluLmduaQppbmRleCAyNzU1MDQ3Li41MjIyNWIwIDEwMDY0NAotLS0gYS9idWlsZC90b29sY2hhaW4vd2luL21zdmNfdG9vbGNoYWluLmduaQorKysgYi9idWlsZC90b29sY2hhaW4vd2luL21zdmNfdG9vbGNoYWluLmduaQpAQCAtMTI2LDcgKzEyNiw3IEBACiAKICAgICB0b29sKCJhbGluayIpIHsKICAgICAgIHJzcGZpbGUgPSAie3tvdXRwdXR9fS5yc3AiCi0gICAgICBjb21tYW5kID0gIiRlbnZfd3JhcHBlciRsaWIgL09VVDp7e291dHB1dH19IC9ub2xvZ28gJHtzeXNfbGliX2ZsYWdzfXt7YXJmbGFnc319IEAkcnNwZmlsZSIKKyAgICAgIGNvbW1hbmQgPSAiJGVudl93cmFwcGVyJGxpYiAvaWdub3JlOjQyMjEgL09VVDp7e291dHB1dH19IC9ub2xvZ28gJHtzeXNfbGliX2ZsYWdzfXt7YXJmbGFnc319IEAkcnNwZmlsZSIKICAgICAgIGRlc2NyaXB0aW9uID0gIkxJQiB7e291dHB1dH19IgogICAgICAgb3V0cHV0cyA9IFsKICAgICAgICAgIyBJZ25vcmUge3tvdXRwdXRfZXh0ZW5zaW9ufX0gYW5kIGFsd2F5cyB1c2UgLmxpYiwgdGhlcmUncyBubyByZWFzb24gdG8KZGlmZiAtLWdpdCBhL2J1aWxkX2d5cC9hcGtfdGVzdC5neXBpIGIvYnVpbGRfZ3lwL2Fwa190ZXN0Lmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MDI3ZDAuLjAwMDAwMDAKLS0tIGEvYnVpbGRfZ3lwL2Fwa190ZXN0Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGEgdGFyZ2V0IHRvIHByb3ZpZGUgYSBydWxlCi0jIHRvIGJ1aWxkIEFQSyBiYXNlZCB0ZXN0IHN1aXRlcy4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jIHsKLSMgICAndGFyZ2V0X25hbWUnOiAndGVzdF9zdWl0ZV9uYW1lX2FwaycsCi0jICAgJ3R5cGUnOiAnbm9uZScsCi0jICAgJ3ZhcmlhYmxlcyc6IHsKLSMgICAgICd0ZXN0X3N1aXRlX25hbWUnOiAndGVzdF9zdWl0ZV9uYW1lJywgICMgc3RyaW5nCi0jICAgICAnaW5wdXRfc2hsaWJfcGF0aCcgOiAnL3BhdGgvdG8vdGVzdF9zdWl0ZS5zbycsICAjIHN0cmluZwotIyAgICAgJ2lucHV0X2phcnNfcGF0aHMnOiBbJy9wYXRoL3RvL3Rlc3Rfc3VpdGUuamFyJywgLi4uIF0sICAjIGxpc3QKLSMgICB9LAotIyAgICdpbmNsdWRlcyc6IFsncGF0aC90by90aGlzL2d5cGkvZmlsZSddLAotIyB9Ci0jCi0KLXsKLSAgJ3ZhcmlhYmxlcycgOiB7Ci0gICAgJ2NvbmRpdGlvbnMnIDogWwotICAgICAgWydPUyA9PSAibGJfc2hlbGwiIGFuZCB0YXJnZXRfYXJjaCA9PSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICdjaHJvbWl1bV9zcmNfZGlyJyA6ICc8KFBST0RVQ1RfRElSKS8uLi8uLi8uLi8uLi9leHRlcm5hbC9jaHJvbWl1bScsCi0gICAgICB9LHsKLSAgICAgICAgJ2Nocm9taXVtX3NyY19kaXInIDogJzwoYW50X2J1aWxkX291dCkvLi4vLi4nLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLSAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlX2phdmEnLAotICBdLAotICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgWydfdG9vbHNldCA9PSAidGFyZ2V0IicsIHsKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJygoT1MgPT0gImFuZHJvaWQiIGFuZCBndGVzdF90YXJnZXRfdHlwZSA9PSAic2hhcmVkX2xpYnJhcnkiKSBvciAoT1MgPT0gImxiX3NoZWxsIiBhbmQgdGFyZ2V0X2FyY2ggPT0gImFuZHJvaWQiKSknLCB7Ci0gICAgICAgICAgJ2FjdGlvbnMnOiBbewotICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2Fwa188KHRlc3Rfc3VpdGVfbmFtZSknLAotICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQnVpbGRpbmcgPCh0ZXN0X3N1aXRlX25hbWUpIHRlc3QgYXBrLicsCi0gICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9hbmRyb2lkL0FuZHJvaWRNYW5pZmVzdC54bWwnLAotICAgICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRlX25hdGl2ZV90ZXN0LnB5JywKLSAgICAgICAgICAgICAgJzwoaW5wdXRfc2hsaWJfcGF0aCknLAotICAgICAgICAgICAgICAnPkAoaW5wdXRfamFyc19wYXRocyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvPCh0ZXN0X3N1aXRlX25hbWUpX2Fway88KHRlc3Rfc3VpdGVfbmFtZSktZGVidWcuYXBrJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRlX25hdGl2ZV90ZXN0LnB5JywKLSAgICAgICAgICAgICAgJy0tbmF0aXZlX2xpYnJhcnknLAotICAgICAgICAgICAgICAnPChpbnB1dF9zaGxpYl9wYXRoKScsCi0gICAgICAgICAgICAgICctLW91dHB1dCcsCi0gICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS88KHRlc3Rfc3VpdGVfbmFtZSlfYXBrJywKLSAgICAgICAgICAgICAgJy0tc3RyaXAtYmluYXJ5PTwoYW5kcm9pZF9zdHJpcCknLAotICAgICAgICAgICAgICAnLS1hcHBfYWJpJywKLSAgICAgICAgICAgICAgJzwoYW5kcm9pZF9hcHBfYWJpKScsCi0gICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgJy1EUFJPRFVDVF9ESVI9PChhbnRfYnVpbGRfb3V0KScsCi0gICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgJy1EQU5EUk9JRF9TREs9PChhbmRyb2lkX3NkayknLAotICAgICAgICAgICAgICAnLS1hbnQtYXJncycsCi0gICAgICAgICAgICAgICctREFORFJPSURfU0RLX1JPT1Q9PChhbmRyb2lkX3Nka19yb290KScsCi0gICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgJy1EQU5EUk9JRF9TREtfVE9PTFM9PChhbmRyb2lkX3Nka190b29scyknLAotICAgICAgICAgICAgICAnLS1hbnQtYXJncycsCi0gICAgICAgICAgICAgICctREFORFJPSURfU0RLX1ZFUlNJT049PChhbmRyb2lkX3Nka192ZXJzaW9uKScsCi0gICAgICAgICAgICAgICctLWFudC1hcmdzJywKLSAgICAgICAgICAgICAgJy1EQU5EUk9JRF9HREJTRVJWRVI9PChhbmRyb2lkX2dkYnNlcnZlciknLAotICAgICAgICAgICAgICAnLS1hbnQtYXJncycsCi0gICAgICAgICAgICAgICctRENIUk9NSVVNX1NSQz08KGNocm9taXVtX3NyY19kaXIpJywKLSAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAotICAgICAgICAgICAgICAnLURJTlBVVF9KQVJTX1BBVEhTPT4oaW5wdXRfamFyc19wYXRocyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgfV0sICAjICdPUyA9PSAiYW5kcm9pZCIgYW5kIGd0ZXN0X3RhcmdldF90eXBlID09ICJzaGFyZWRfbGlicmFyeSIKLSAgICAgIF0sICAjIGNvbmRpdGlvbnMKLSAgICB9XSwKLSAgXSwgICMgdGFyZ2V0X2NvbmRpdGlvbnMKLX0KZGlmZiAtLWdpdCBhL2J1aWxkX2d5cC9jb21tb24uZ3lwaSBiL2J1aWxkX2d5cC9jb21tb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzNzI4My4uMDAwMDAwMAotLS0gYS9idWlsZF9neXAvY29tbW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlLCBQTEVBU0UgUkVNRU1CRVIgVE8gVVBEQVRFCi0jIC8vY29iYWx0L2J1aWxkL2NvbmZpZy9iYXNlLmduaSBvciAvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZS5nbmkKLSMgQVMgV0VMTAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgSU1QT1JUQU5UOgotIyBQbGVhc2UgZG9uJ3QgZGlyZWN0bHkgaW5jbHVkZSB0aGlzIGZpbGUgaWYgeW91IGFyZSBidWlsZGluZyB2aWEgZ3lwX2NvYmFsdCwKLSMgc2luY2UgZ3lwX2NvYmFsdCBpcyBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgaXRzIGluY2x1c2lvbi4KLXsKLSAgIyBWYXJpYWJsZXMgZXhwZWN0ZWQgdG8gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgcGxhdGZvcm0ncwotICAjIGd5cF9jb25maWd1cmF0aW9uLmd5cGkuCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBQdXR0aW5nIGEgdmFyaWFibGVzIGRpY3QgaW5zaWRlIGFub3RoZXIgdmFyaWFibGVzIGRpY3QgbG9va3Mga2luZCBvZgotICAgICMgd2VpcmQuICBUaGlzIGlzIGRvbmUgc28gdGhhdCAnaG9zdF9hcmNoJywgJ2FuZHJvaWRfYnVpbGRfdHlwZScsIGV0YyBhcmUKLSAgICAjIGRlZmluZWQgYXMgdmFyaWFibGVzIHdpdGhpbiB0aGUgb3V0ZXIgdmFyaWFibGVzIGRpY3QgaGVyZS4gIFRoaXMgaXMKLSAgICAjIG5lY2Vzc2FyeSB0byBnZXQgdGhlc2UgdmFyaWFibGVzIGRlZmluZWQgZm9yIHRoZSBjb25kaXRpb25zIHdpdGhpbiB0aGlzCi0gICAgIyB2YXJpYWJsZXMgZGljdCB0aGF0IG9wZXJhdGUgb24gdGhlc2UgdmFyaWFibGVzLgotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdob3N0X2FyY2glJzoKLSAgICAgICAgICAgICd4NjQnLCAjIEJ1aWxkaW5nIG9uIGFueSBvdGhlciBhcmNoIGlzIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgfSwKLQotICAgICAgICAjIENvcHkgY29uZGl0aW9uYWxseS1zZXQgdmFyaWFibGVzIG91dCBvbmUgc2NvcGUuCi0gICAgICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCi0KLSAgICAgICAgIyBEZWZhdWx0IGFyY2hpdGVjdHVyZSB3ZSdyZSBidWlsZGluZyBmb3IgaXMgdGhlIGFyY2hpdGVjdHVyZSB3ZSdyZQotICAgICAgICAjIGJ1aWxkaW5nIG9uLgotICAgICAgICAndGFyZ2V0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCi0KLSAgICAgICAgIyBTZXRzIHdoZXRoZXIgd2UncmUgYnVpbGRpbmcgd2l0aCB0aGUgQW5kcm9pZCBTREsvTkRLIChhbmQgaGVuY2Ugd2l0aAotICAgICAgICAjIEFudCwgdmFsdWUgMCksIG9yIGFzIHBhcnQgb2YgdGhlIEFuZHJvaWQgc3lzdGVtIChhbmQgaGVuY2Ugd2l0aCB0aGUKLSAgICAgICAgIyBBbmRyb2lkIGJ1aWxkIHN5c3RlbSwgdmFsdWUgMSkuCi0gICAgICAgICdhbmRyb2lkX2J1aWxkX3R5cGUlJzogMCwKLSAgICAgIH0sCi0KLSAgICAgICMgQ29weSBjb25kaXRpb25hbGx5LXNldCB2YXJpYWJsZXMgb3V0IG9uZSBzY29wZS4KLSAgICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCi0gICAgICAndGFyZ2V0X2FyY2glJzogJzwodGFyZ2V0X2FyY2gpJywKLSAgICAgICdhbmRyb2lkX2J1aWxkX3R5cGUlJzogJzwoYW5kcm9pZF9idWlsZF90eXBlKScsCi0KLSAgICAgICMgU2V0IEFSTS12NyBjb21waWxhdGlvbiBmbGFncwotICAgICAgJ2FybXY3JSc6IDAsCi0KLSAgICAgICMgU2V0IE5lb24gY29tcGlsYXRpb24gZmxhZ3MgKG9ubHkgbWVhbmluZ2Z1bCBpZiBhcm12Nz09MSkuCi0gICAgICAnYXJtX25lb24lJzogMSwKLQotICAgICAgIyBUaGUgc3lzdGVtIHJvb3QgZm9yIGNyb3NzLWNvbXBpbGVzLiBEZWZhdWx0OiBub25lLgotICAgICAgJ3N5c3Jvb3QlJzogJycsCi0KLSAgICAgICMgVXNlIHN5c3RlbSBsaWJqcGVnLiBOb3RlIHRoYXQgdGhlIHN5c3RlbSdzIGxpYmplcGcgd2lsbCBiZSB1c2VkIGV2ZW4gaWYKLSAgICAgICMgdXNlX2xpYmpwZWdfdHVyYm8gaXMgc2V0LgotICAgICAgJ3VzZV9zeXN0ZW1fbGlianBlZyUnOiAwLAotCi0gICAgICAjIFZhcmlhYmxlICdjb21wb25lbnQnIGlzIGZvciBjYXNlcyB3aGVyZSB3ZSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHNvbWUKLSAgICAgICMgY29tcG9uZW50cyBhcyBkeW5hbWljIHNoYXJlZCBsaWJyYXJpZXMgYnV0IHN0aWxsIG5lZWQgdmFyaWFibGUKLSAgICAgICMgJ2xpYnJhcnknIGZvciBzdGF0aWMgbGlicmFyaWVzLgotICAgICAgIyBCeSBkZWZhdWx0LCBjb21wb25lbnQgaXMgc2V0IHRvIHdoYXRldmVyIGxpYnJhcnkgaXMgc2V0IHRvIGFuZAotICAgICAgIyBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgR1lQIGNvbW1hbmQgbGluZSBvciBieSB+Ly5neXAvaW5jbHVkZS5neXBpLgotICAgICAgJ2NvbXBvbmVudCUnOiAnc3RhdGljX2xpYnJhcnknLAotCi0gICAgICAjIEVuYWJsZSBidWlsZGluZyB3aXRoIEFTQU4gKENsYW5nJ3MgLWZzYW5pdGl6ZT1hZGRyZXNzIG9wdGlvbikuCi0gICAgICAjIC1mc2FuaXRpemU9YWRkcmVzcyBvbmx5IHdvcmtzIHdpdGggY2xhbmcsIGJ1dCBhc2FuPTEgaW1wbGllcyBjbGFuZz0xCi0gICAgICAjIFNlZSBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZGV2L2RldmVsb3BlcnMvdGVzdGluZy9hZGRyZXNzc2FuaXRpemVyCi0gICAgICAnYXNhbiUnOiAwLAotCi0gICAgICAjIEVuYWJsZSBidWlsZGluZyB3aXRoIFRTQU4gKENsYW5nJ3MgLWZzYW5pdGl6ZT10aHJlYWQgb3B0aW9uKS4KLSAgICAgICMgLWZzYW5pdGl6ZT10aHJlYWQgb25seSB3b3JrcyB3aXRoIGNsYW5nLCBidXQgdHNhbj0xIGltcGxpZXMgY2xhbmc9MQotICAgICAgIyBTZWUgaHR0cDovL2NsYW5nLmxsdm0ub3JnL2RvY3MvVGhyZWFkU2FuaXRpemVyLmh0bWwKLSAgICAgICd0c2FuJSc6IDAsCi0KLSAgICAgICMgU2V0IHRoaXMgdG8gdHJ1ZSB3aGVuIGJ1aWxkaW5nIHdpdGggQ2xhbmcuCi0gICAgICAjIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9DbGFuZyBmb3IgZGV0YWlscy4KLSAgICAgICdjbGFuZyUnOiAwLAotCi0gICAgICAnb3NfcG9zaXglJzogMCwKLSAgICAgICdvc19ic2QlJzogMCwKLSAgICB9LAotCi0gICAgIyBNYWtlIHN1cmUgdGhhdCBjb2JhbHQgaXMgZGVmaW5lZC4gVGhpcyBpcyBuZWVkZWQgaW4KLSAgICAjIHRoZSBjYXNlIHdoZXJlIHRoZSBjb2RlIGlzIGJ1aWx0IHVzaW5nIENocm9taXVtIHN0b2NrCi0gICAgIyBidWlsZCB0b29scy4KLSAgICAnY29iYWx0JSc6IDAsCi0KLSAgICAjIENvcHkgY29uZGl0aW9uYWxseS1zZXQgdmFyaWFibGVzIG91dCBvbmUgc2NvcGUuCi0gICAgJ3RhcmdldF9hcmNoJSc6ICc8KHRhcmdldF9hcmNoKScsCi0gICAgJ2hvc3RfYXJjaCUnOiAnPChob3N0X2FyY2gpJywKLSAgICAnbGlicmFyeSUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICdvc19ic2QlJzogJzwob3NfYnNkKScsCi0gICAgJ29zX3Bvc2l4JSc6ICc8KG9zX3Bvc2l4KScsCi0gICAgJ2FybXY3JSc6ICc8KGFybXY3KScsCi0gICAgJ2FybV9uZW9uJSc6ICc8KGFybV9uZW9uKScsCi0gICAgJ3N5c3Jvb3QlJzogJzwoc3lzcm9vdCknLAotICAgICdjb21wb25lbnQlJzogJzwoY29tcG9uZW50KScsCi0gICAgJ2FzYW4lJzogJzwoYXNhbiknLAotICAgICd0c2FuJSc6ICc8KHRzYW4pJywKLSAgICAndXNlX3N5c3RlbV9saWJqcGVnJSc6ICc8KHVzZV9zeXN0ZW1fbGlianBlZyknLAotICAgICdhbmRyb2lkX2J1aWxkX3R5cGUlJzogJzwoYW5kcm9pZF9idWlsZF90eXBlKScsCi0KLSAgICAjIFVzZSBzeXN0ZW0gcHJvdG9idWYgaW5zdGVhZCBvZiBidW5kbGVkIG9uZS4KLSAgICAndXNlX3N5c3RlbV9wcm90b2J1ZiUnOiAwLAotCi0gICAgIyBUT0RPKHNnayk6IGVsaW1pbmF0ZSB0aGlzIGlmIHBvc3NpYmxlLgotICAgICMgSXQgd291bGQgYmUgbmljZXIgdG8gc3VwcG9ydCB0aGlzIHZpYSBhIHNldHRpbmcgaW4gJ3RhcmdldF9kZWZhdWx0cycKLSAgICAjIGluIGNocm9tZS9hcHAvbG9jYWxlcy9sb2NhbGVzLmd5cGkgb3ZlcnJpZGluZyB0aGUgc2V0dGluZyBpbiB0aGUKLSAgICAjICdEZWJ1ZycgY29uZmlndXJhdGlvbiBpbiB0aGUgJ3RhcmdldF9kZWZhdWx0cycgZGljdCBiZWxvdywKLSAgICAjIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBhcyB3ZSdkIGxpa2UuCi0gICAgJ21zdnNfZGVidWdfbGlua19pbmNyZW1lbnRhbCUnOiAnMicsCi0KLSAgICAjIENsYW5nIHN0dWZmLgotICAgICdjbGFuZyUnOiAnPChjbGFuZyknLAotICAgICdtYWtlX2NsYW5nX2RpciUnOiAndGhpcmRfcGFydHkvbGx2bS1idWlsZC9SZWxlYXNlK0Fzc2VydHMnLAotCi0gICAgIyBUaGVzZSB0d28gdmFyaWFibGVzIGNhbiBiZSBzZXQgaW4gR1lQX0RFRklORVMgd2hpbGUgcnVubmluZwotICAgICMgfGdjbGllbnQgcnVuaG9va3N8IHRvIGxldCBjbGFuZyBydW4gYSBwbHVnaW4gaW4gZXZlcnkgY29tcGlsYXRpb24uCi0gICAgIyBPbmx5IGhhcyBhbiBlZmZlY3QgaWYgJ2NsYW5nPTEnIGlzIGluIEdZUF9ERUZJTkVTIGFzIHdlbGwuCi0gICAgIyBFeGFtcGxlOgotICAgICMgICAgIEdZUF9ERUZJTkVTPSdjbGFuZz0xIGNsYW5nX2xvYWQ9L2Ficy9wYXRoL3RvL2xpYlByaW50RnVuY3Rpb25OYW1lcy5keWxpYiBjbGFuZ19hZGRfcGx1Z2luPXByaW50LWZucycgZ2NsaWVudCBydW5ob29rcwotCi0gICAgJ2NsYW5nX2xvYWQlJzogJycsCi0gICAgJ2NsYW5nX2FkZF9wbHVnaW4lJzogJycsCi0KLSAgICAjIFNldCBUaHVtYiBjb21waWxhdGlvbiBmbGFncy4KLSAgICAnYXJtX3RodW1iJSc6IDAsCi0KLSAgICAjIFNldCBBUk0gZnB1IGNvbXBpbGF0aW9uIGZsYWdzIChvbmx5IG1lYW5pbmdmdWwgaWYgYXJtdjc9PTEgYW5kCi0gICAgIyBhcm1fbmVvbj09MCkuCi0gICAgJ2FybV9mcHUlJzogJ3ZmcHYzJywKLQotICAgICMgU2V0IEFSTSBmbG9hdCBhYmkgY29tcGlsYXRpb24gZmxhZy4KLSAgICAnYXJtX2Zsb2F0X2FiaSUnOiAnc29mdGZwJywKLQotICAgICMgLmd5cCBmaWxlcyBvciB0YXJnZXRzIHNob3VsZCBzZXQgY2hyb21pdW1fY29kZSB0byAxIGlmIHRoZXkgYnVpbGQKLSAgICAjIENocm9taXVtLXNwZWNpZmljIGNvZGUsIGFzIG9wcG9zZWQgdG8gZXh0ZXJuYWwgY29kZS4gIFRoaXMgdmFyaWFibGUgaXMKLSAgICAjIHVzZWQgdG8gY29udHJvbCBzdWNoIHRoaW5ncyBhcyB0aGUgc2V0IG9mIHdhcm5pbmdzIHRvIGVuYWJsZSwgYW5kCi0gICAgIyB3aGV0aGVyIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycy4KLSAgICAnY2hyb21pdW1fY29kZSUnOiAwLAotCi0gICAgIyBDcmFzaHBhZCByZWxpZXMgb24gZXhjbHVkaW5nIGZpbGVzIGluIEdZUCBiYXNlZCBvbiBwbGF0Zm9ybSBzcGVjaWZpYwotICAgICMgbmFtZXMsIHNvIGl0IGhhcyBpdHMgb3duIHNldCBvZiBmaWxlbmFtZV9ydWxlcy5neXBpIGxvY2F0ZWQgdW5kZXIKLSAgICAjICJ0aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2J1aWxkLyIuCi0gICAgJ2NyYXNocGFkX2NvZGUlJzogMCwKLQotICAgICMgVE9ETyh0aGFraXMpOiBNYWtlIHRoaXMgYSBibGFja2xpc3QgaW5zdGVhZCwgaHR0cDovL2NyYnVnLmNvbS8xMDE2MDAKLSAgICAnZW5hYmxlX3dleGl0X3RpbWVfZGVzdHJ1Y3RvcnMlJzogMCwKLQotICAgICMgTmF0aXZlIENsaWVudCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgJ2Rpc2FibGVfbmFjbCUnOiAwLAotCi0gICAgIyBTZXRzIHRoZSBkZWZhdWx0IHZlcnNpb24gbmFtZSBhbmQgY29kZSBmb3IgQW5kcm9pZCBhcHAsIGJ5IGRlZmF1bHQgd2UKLSAgICAjIGRvIGEgZGV2ZWxvcGVyIGJ1aWxkLgotICAgICdhbmRyb2lkX2FwcF92ZXJzaW9uX25hbWUlJzogJ0RldmVsb3BlciBCdWlsZCcsCi0gICAgJ2FuZHJvaWRfYXBwX3ZlcnNpb25fY29kZSUnOiAwLAotCi0gICAgJ3dpbmRvd3Nfc2RrX3BhdGglJzogJ0M6L1Byb2dyYW0gRmlsZXMgKHg4NikvV2luZG93cyBLaXRzLzEwJywKLQotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWyd0YXJnZXRfYXJjaD09ImFuZHJvaWQiJywgewotICAgICAgICAjIExvY2F0aW9uIG9mIEFuZHJvaWQgTkRLLgotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAnYW5kcm9pZF9uZGtfcm9vdCUnOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGdldGVudiBBTkRST0lEX05ES19ST09UKScsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2FuZHJvaWRfbmRrX3Jvb3QlJzogJzwoYW5kcm9pZF9uZGtfcm9vdCknLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2ggPT0gIng4NiInLCB7Ci0gICAgICAgICAgICAgICAgJ2FuZHJvaWRfYXBwX2FiaSUnOiAneDg2JywKLSAgICAgICAgICAgICAgICAnYW5kcm9pZF9uZGtfc3lzcm9vdCUnOiAnPChhbmRyb2lkX25ka19yb290KS9wbGF0Zm9ybXMvYW5kcm9pZC05L2FyY2gteDg2JywKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJhcm0iIG9yIChPUz09ImxiX3NoZWxsIiBhbmQgdGFyZ2V0X2FyY2g9PSJhbmRyb2lkIiknLCB7Ci0gICAgICAgICAgICAgICAgJ2FuZHJvaWRfbmRrX3N5c3Jvb3QlJzogJzwoYW5kcm9pZF9uZGtfcm9vdCkvcGxhdGZvcm1zL2FuZHJvaWQtOS9hcmNoLWFybScsCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ2FybXY3PT0wJywgewotICAgICAgICAgICAgICAgICAgICAnYW5kcm9pZF9hcHBfYWJpJSc6ICdhcm1lYWJpJywKLSAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgJ2FuZHJvaWRfYXBwX2FiaSUnOiAnYXJtZWFiaS12N2EnLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2FuZHJvaWRfbmRrX3Jvb3QlJzogJzwoYW5kcm9pZF9uZGtfcm9vdCknLAotICAgICAgICAgICdhbmRyb2lkX2FwcF9hYmklJzogJzwoYW5kcm9pZF9hcHBfYWJpKScsCi0gICAgICAgICAgJ2FuZHJvaWRfbmRrX3N5c3Jvb3QlJzogJzwoYW5kcm9pZF9uZGtfc3lzcm9vdCknLAotICAgICAgICB9LAotICAgICAgICAnYW5kcm9pZF9uZGtfcm9vdCUnOiAnPChhbmRyb2lkX25ka19yb290KScsCi0gICAgICAgICdhbmRyb2lkX25ka19zeXNyb290JzogJzwoYW5kcm9pZF9uZGtfc3lzcm9vdCknLAotICAgICAgICAnYW5kcm9pZF9uZGtfaW5jbHVkZSc6ICc8KGFuZHJvaWRfbmRrX3N5c3Jvb3QpL3Vzci9pbmNsdWRlJywKLSAgICAgICAgJ2FuZHJvaWRfbmRrX2xpYic6ICc8KGFuZHJvaWRfbmRrX3N5c3Jvb3QpL3Vzci9saWInLAotICAgICAgICAnYW5kcm9pZF9hcHBfYWJpJSc6ICc8KGFuZHJvaWRfYXBwX2FiaSknLAotCi0gICAgICAgICMgTG9jYXRpb24gb2YgdGhlICJzdHJpcCIgYmluYXJ5LCB1c2VkIGJ5IGJvdGggZ3lwIGFuZCBzY3JpcHRzLgotICAgICAgICAnYW5kcm9pZF9zdHJpcCUnIDogJzwhKC9iaW4vZWNobyAtbiA8KGFuZHJvaWRfdG9vbGNoYWluKS8qLXN0cmlwKScsCi0KLSAgICAgICAgIyBQcm92aWRlcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFBST0RVQ1RfRElSIChlLmcuIG91dC9SZWxlYXNlKS4gVXNlZAotICAgICAgICAjIHRvIHNwZWNpZnkgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIEFudCBpbiB0aGUgQW5kcm9pZCBidWlsZC4KLSAgICAgICAgJ2FudF9idWlsZF9vdXQnOiAnYGNkIDwoUFJPRFVDVF9ESVIpICYmIHB3ZCAtUGAnLAotCi0gICAgICAgICMgRGlzYWJsZSBOYXRpdmUgQ2xpZW50LgotICAgICAgICAnZGlzYWJsZV9uYWNsJSc6IDEsCi0KLSAgICAgICAgIyBXaGVuIGJ1aWxkaW5nIGFzIHBhcnQgb2YgdGhlIEFuZHJvaWQgc3lzdGVtLCB1c2Ugc3lzdGVtIGxpYnJhcmllcwotICAgICAgICAjIHdoZXJlIHBvc3NpYmxlIHRvIHJlZHVjZSBST00gc2l6ZS4KLSAgICAgICAgJ3VzZV9zeXN0ZW1faWN1JSc6ICc8KGFuZHJvaWRfYnVpbGRfdHlwZSknLAotICAgICAgICAndXNlX3N5c3RlbV9zdGxwb3J0JSc6ICc8KGFuZHJvaWRfYnVpbGRfdHlwZSknLAotCi0gICAgICAgICMgQ29weSBpdCBvdXQgb25lIHNjb3BlLgotICAgICAgICAnYW5kcm9pZF9idWlsZF90eXBlJSc6ICc8KGFuZHJvaWRfYnVpbGRfdHlwZSknLAotICAgICAgfV0sICAjIHRhcmdldF9hcmNoPT0iYW5kcm9pZCIKLQotICAgICAgWydhc2FuPT0xIGFuZCBPUyE9IndpbiInLCB7Ci0gICAgICAgICdjbGFuZyUnOiAxLAotICAgICAgfV0sCi0gICAgICBbJ3RzYW49PTEnLCB7Ci0gICAgICAgICdjbGFuZyUnOiAxLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgIyBUaGUgY29uZGl0aW9uIHRoYXQgb3BlcmF0ZXMgb24gY2hyb21pdW1fY29kZSBpcyBpbiBhIHRhcmdldF9jb25kaXRpb25zCi0gICAgICAjIHNlY3Rpb24sIGFuZCB3aWxsIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZGVmYXVsdCBmYWxsYmFjayB2YWx1ZSBvZgotICAgICAgIyBjaHJvbWl1bV9jb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLCBvciB0byB0aGUgY2hyb21pdW1fY29kZQotICAgICAgIyB2YXJpYWJsZSBwbGFjZWQgYXQgdGhlIHJvb3QgdmFyaWFibGVzIHNjb3BlIG9mIC5neXAgZmlsZXMsIGJlY2F1c2UKLSAgICAgICMgdGhvc2UgdmFyaWFibGVzIGFyZSBub3Qgc2V0IGF0IHRhcmdldCBzY29wZS4gIEFzIGEgd29ya2Fyb3VuZCwKLSAgICAgICMgaWYgY2hyb21pdW1fY29kZSBpcyBub3Qgc2V0IGF0IHRhcmdldCBzY29wZSwgZGVmaW5lIGl0IGluIHRhcmdldCBzY29wZQotICAgICAgIyB0byBjb250YWluIHdoYXRldmVyIHZhbHVlIGl0IGhhcyBkdXJpbmcgZWFybHkgdmFyaWFibGUgZXhwYW5zaW9uLgotICAgICAgIyBUaGF0J3MgZW5vdWdoIHRvIG1ha2UgaXQgYXZhaWxhYmxlIGR1cmluZyB0YXJnZXQgY29uZGl0aW9uYWwKLSAgICAgICMgcHJvY2Vzc2luZy4KLSAgICAgICdjaHJvbWl1bV9jb2RlJSc6ICc8KGNocm9taXVtX2NvZGUpJywKLQotICAgICAgIyBUaGUgY3Jhc2hwYWRfY29kZSB2YXJpYWJsZSBvcGVyYXRlcyB0aGUgc2FtZSB3YXkgYXMgZGVzY3JpYmVkIGFib3ZlIGZvcgotICAgICAgIyB0aGUgY2hyb21pdW1fY29kZSB2YXJpYWJsZS4KLSAgICAgICdjcmFzaHBhZF9jb2RlJSc6ICc8KGNyYXNocGFkX2NvZGUpJywKLQotICAgICAgIyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhNjUyMzYwKFZTLjcxKS5hc3B4Ci0gICAgICAnd2luX3JlbGVhc2VfT3B0aW1pemF0aW9uJSc6ICcyJywgIyAyID0gL09zCi0gICAgICAnd2luX2RlYnVnX09wdGltaXphdGlvbiUnOiAnMCcsICAgIyAwID0gL09kCi0KLSAgICAgICMgU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8ya3h4NXQyYyh2PXZzLjgwKS5hc3B4Ci0gICAgICAjIFRyaS1zdGF0ZTogYmxhbmsgaXMgZGVmYXVsdCwgMSBvbiwgMCBvZmYKLSAgICAgICd3aW5fcmVsZWFzZV9PbWl0RnJhbWVQb2ludGVycyUnOiAnMCcsCi0gICAgICAjIFRyaS1zdGF0ZTogYmxhbmsgaXMgZGVmYXVsdCwgMSBvbiwgMCBvZmYKLSAgICAgICd3aW5fZGVidWdfT21pdEZyYW1lUG9pbnRlcnMlJzogJycsCi0KLSAgICAgICMgU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS84d3RmMmRmeihWUy43MSkuYXNweAotICAgICAgJ3dpbl9kZWJ1Z19SdW50aW1lQ2hlY2tzJSc6ICczJywgICAgIyAzID0gYWxsIGNoZWNrcyBlbmFibGVkLCAwID0gb2ZmCi0KLSAgICAgICMgU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS80NzIzOGhleihWUy43MSkuYXNweAotICAgICAgJ3dpbl9kZWJ1Z19JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbiUnOiAnJywgICAgIyBlbXB0eSA9IGRlZmF1bHQsIDAgPSBvZmYsCi0gICAgICAnd2luX3JlbGVhc2VfSW5saW5lRnVuY3Rpb25FeHBhbnNpb24lJzogJzInLCAjIDEgPSBvbmx5IF9faW5saW5lLCAyID0gbWF4Ci0KLSAgICAgICMgVlMgaW5zZXJ0cyBxdWl0ZSBhIGxvdCBvZiBleHRyYSBjaGVja3MgdG8gYWxnb3JpdGhtcyBsaWtlCi0gICAgICAjIHN0ZDo6cGFydGlhbF9zb3J0IGluIERlYnVnIGJ1aWxkIHdoaWNoIG1ha2UgdGhlbSBPKE5eMikKLSAgICAgICMgaW5zdGVhZCBvZiBPKE4qbG9nTikuIFRoaXMgaXMgcGFydGljdWxhcmx5IHNsb3cgdW5kZXIgbWVtb3J5Ci0gICAgICAjIHRvb2xzIGxpa2UgVGhyZWFkU2FuaXRpemVyIHNvIHdlIHdhbnQgaXQgdG8gYmUgZGlzYWJsYWJsZS4KLSAgICAgICMgU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTk4NTk4Mih2PVZTLjgwKS5hc3B4Ci0gICAgICAnd2luX2RlYnVnX2Rpc2FibGVfaXRlcmF0b3JfZGVidWdnaW5nJSc6ICcwJywKLQotICAgICAgJ3JlbGVhc2VfZXh0cmFfY2ZsYWdzJSc6ICcnLAotICAgICAgJ2RlYnVnX2V4dHJhX2NmbGFncyUnOiAnJywKLQotICAgICAgIyB0aGUgbm9uLXF1YWxpZmllZCB2ZXJzaW9ucyBhcmUgd2lkZWx5IGFzc3VtZWQgdG8gYmUgKm5peC1vbmx5Ci0gICAgICAnd2luX3JlbGVhc2VfZXh0cmFfY2ZsYWdzJSc6ICcnLAotICAgICAgJ3dpbl9kZWJ1Z19leHRyYV9jZmxhZ3MlJzogJycsCi0KLSAgICAgICMgVE9ETyh0aGFraXMpOiBNYWtlIHRoaXMgYSBibGFja2xpc3QgaW5zdGVhZCwgaHR0cDovL2NyYnVnLmNvbS8xMDE2MDAKLSAgICAgICdlbmFibGVfd2V4aXRfdGltZV9kZXN0cnVjdG9ycyUnOiAnPChlbmFibGVfd2V4aXRfdGltZV9kZXN0cnVjdG9ycyknLAotCi0gICAgICAjIE9ubHkgdXNlZCBieSBXaW5kb3dzIGJ1aWxkIGZvciBub3cuICBDYW4gYmUgdXNlZCB0byBidWlsZCBpbnRvIGEKLSAgICAgICMgZGlmZmVyZXQgb3V0cHV0IGRpcmVjdG9yeSwgZS5nLiwgYSBidWlsZF9kaXJfcHJlZml4IG9mIFZTMjAxMF8gd291bGQKLSAgICAgICMgb3V0cHV0IGZpbGVzIGluIHNyYy9idWlsZC9WUzIwMTBfe0RlYnVnLFJlbGVhc2V9LgotICAgICAgJ2J1aWxkX2Rpcl9wcmVmaXglJzogJycsCi0KLSAgICAgICMgVGFyZ2V0cyBhcmUgYnkgZGVmYXVsdCBub3QgbmFjbCB1bnRydXN0ZWQgY29kZS4KLSAgICAgICduYWNsX3VudHJ1c3RlZF9idWlsZCUnOiAwLAotCi0gICAgICAncG5hY2xfY29tcGlsZV9mbGFncyc6IFsKLSAgICAgICAgIyBwbmFjbCB1c2VzIHRoZSBjbGFuZyBjb21waWxlciBzbyB3ZSBuZWVkIHRvIHN1cHByZXNzIGFsbCB0aGUKLSAgICAgICAgIyBzYW1lIHdhcm5pbmdzIGFzIHdlIGRvIGZvciBjbGFuZy4KLSAgICAgICAgIyBUT0RPKHNiYyk6IFJlbW92ZSB0aGVzZSBpZi93aGVuIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSB0aGUgY2xhbmcKLSAgICAgICAgIyBidWlsZC4KLSAgICAgICAgJy1Xbm8tdW51c2VkLWZ1bmN0aW9uJywKLSAgICAgICAgJy1Xbm8tY2hhci1zdWJzY3JpcHRzJywKLSAgICAgICAgJy1Xbm8tdW5uYW1lZC10eXBlLXRlbXBsYXRlLWFyZ3MnLAotICAgICAgXSwKLQotICAgICAgIyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhNjUyMzY3LmFzcHgKLSAgICAgICd3aW5fcmVsZWFzZV9SdW50aW1lTGlicmFyeSUnOiAnMCcsICMgMCA9IC9NVCAobm9uZGVidWcgc3RhdGljKQotICAgICAgJ3dpbl9kZWJ1Z19SdW50aW1lTGlicmFyeSUnOiAnMScsICAgIyAxID0gL01UZCAoZGVidWcgc3RhdGljKQotCi0gICAgICAjIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MtNC40LjIvZ2NjL09wdGltaXplLU9wdGlvbnMuaHRtbAotICAgICAgJ21hY19yZWxlYXNlX29wdGltaXphdGlvbiUnOiAnMycsICMgVXNlIC1PMyB1bmxlc3Mgb3ZlcnJpZGRlbgotICAgICAgJ21hY19kZWJ1Z19vcHRpbWl6YXRpb24lJzogJzAnLCAgICMgVXNlIC1PMCB1bmxlc3Mgb3ZlcnJpZGRlbgotICAgIH0sCi0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnVVNFX09QRU5TU0w9MScsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnQ09NUE9ORU5UX0JVSUxEJ10sCi0gICAgICB9XSwKLSAgICBdLCAgIyBjb25kaXRpb25zIGZvciAndGFyZ2V0X2RlZmF1bHRzJwotICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnZW5hYmxlX3dleGl0X3RpbWVfZGVzdHJ1Y3RvcnM9PTEnLCB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsgJ2NsYW5nPT0xJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgJy1XZXhpdC10aW1lLWRlc3RydWN0b3JzJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdXQVJOSU5HX0NGTEFHUyc6IFsKLSAgICAgICAgICAgICAgICAnLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjaHJvbWl1bV9jb2RlIT0wJywgewotICAgICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICAgICMgUnVsZXMgZm9yIGV4Y2x1ZGluZyBlLmcuIGZvb193aW4uY2MgZnJvbSB0aGUgYnVpbGQgb24gbm9uLVdpbmRvd3MuCi0gICAgICAgICAgJ2ZpbGVuYW1lX3J1bGVzLmd5cGknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ2NyYXNocGFkX2NvZGUhPTAnLCB7Ci0gICAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgICAgIyBSdWxlcyBmb3IgZXhjbHVkaW5nIGUuZy4gZm9vX3dpbi5jYyBmcm9tIHRoZSBidWlsZCBvbiBub24tV2luZG93cy4KLSAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9idWlsZC9maWxlbmFtZV9ydWxlcy5neXBpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjaHJvbWl1bV9jb2RlIT0wIG9yIGNyYXNocGFkX2NvZGUhPTAnLCB7Ci0gICAgICAgICMgSW4gQ2hyb21pdW0gY29kZSwgd2UgZGVmaW5lIF9fU1REQ19mb29fTUFDUk9TIGluIG9yZGVyIHRvIGdldCB0aGUKLSAgICAgICAgIyBDOTkgbWFjcm9zIG9uIE1hYyBhbmQgTGludXguCi0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdfX1NURENfQ09OU1RBTlRfTUFDUk9TJywKLSAgICAgICAgICAnX19TVERDX0ZPUk1BVF9NQUNST1MnLAotICAgICAgICBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJyhPUyA9PSAid2luIiBvciB0YXJnZXRfYXJjaD09InhiMSIpIGFuZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgICAgICAgNDI1MSwgICMgY2xhc3MgJ3N0ZDo6eHgnIG5lZWRzIHRvIGhhdmUgZGxsLWludGVyZmFjZS4KLSAgICAgICAgICAgICAgNDcxNSwgICMgTm90IGFsbCBjb250cm9sIHBhdGhzIHJldHVybiBhIHZhbHVlLgotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sICAjIHRhcmdldF9jb25kaXRpb25zIGZvciAndGFyZ2V0X2RlZmF1bHRzJwotICB9LAotfQpkaWZmIC0tZ2l0IGEvYnVpbGRfZ3lwL2ZpbGVuYW1lX3J1bGVzLmd5cGkgYi9idWlsZF9neXAvZmlsZW5hbWVfcnVsZXMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNiNDczNS4uMDAwMDAwMAotLS0gYS9idWlsZF9neXAvZmlsZW5hbWVfcnVsZXMuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgVGhpcyBneXBpIGZpbGUgZGVmaW5lcyB0aGUgcGF0dGVybnMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhCi0jIGZpbGUgaXMgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQgb24gYSBnaXZlbiBwbGF0Zm9ybS4gIEl0IGlzCi0jIGluY2x1ZGVkIGJ5IGNvbW1vbi5neXBpIGZvciBjaHJvbWl1bV9jb2RlLgotCi17Ci0gICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICBbJ09TIT0id2luIiBvciA+KG5hY2xfdW50cnVzdGVkX2J1aWxkKT09MScsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsgWydleGNsdWRlJywgJ193aW4oX3VuaXR0ZXN0KT9cXC4oaHxjYykkJ10sCi0gICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICcoXnwvKXdpbi8nXSwKLSAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJyhefC8pd2luX1teL10qXFwuKGh8Y2MpJCddIF0sCi0gICAgfV0sCi0gICAgWydPUyE9Im1hYyIgb3IgPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTEnLCB7Ci0gICAgICAnc291cmNlcy8nOiBbIFsnZXhjbHVkZScsICdfKGNvY29hfG1hYykoX3VuaXR0ZXN0KT9cXC4oaHxjY3xtbT8pJCddLAotICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnKF58LykoY29jb2F8bWFjKS8nXSBdLAotICAgIH1dLAotICAgIFsnT1MhPSJpb3MiIG9yID4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnX2lvcyhfdW5pdHRlc3QpP1xcLihofGNjfG1tPykkJ10sCi0gICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICcoXnwvKWlvcy8nXSBdLAotICAgIH1dLAotICAgIFsnKE9TIT0ibWFjIiBhbmQgT1MhPSJpb3MiKSBvciA+KG5hY2xfdW50cnVzdGVkX2J1aWxkKT09MScsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsgWydleGNsdWRlJywgJ1xcLm1tPyQnIF0gXSwKLSAgICB9XSwKLSAgICAjIERvIG5vdCBleGNsdWRlIHRoZSBsaW51eCBmaWxlcyBvbiAqQlNEIHNpbmNlIG1vc3Qgb2YgdGhlbSBjYW4gYmUKLSAgICAjIHNoYXJlZCBhdCB0aGlzIHBvaW50LgotICAgICMgSW4gY2FzZSBhIGZpbGUgaXMgbm90IG5lZWRlZCwgaXQgaXMgZ29pbmcgdG8gYmUgZXhjbHVkZWQgbGF0ZXIgb24uCi0gICAgIyBUT0RPKGV2YW4pOiB0aGUgYWJvdmUgaXMgbm90IGNvcnJlY3Q7IHdlIHNob3VsZG4ndCBidWlsZCBfbGludXgKLSAgICAjIGZpbGVzIG9uIG5vbi1saW51eC4KLSAgICBbJ09TIT0ibGludXgiIGFuZCBPUyE9Im9wZW5ic2QiIGFuZCBPUyE9ImZyZWVic2QiIG9yID4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICBbJ2V4Y2x1ZGUnLCAnX2xpbnV4KF91bml0dGVzdCk/XFwuKGh8Y2MpJCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnKF58LylsaW51eC8nXSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydPUyE9ImFuZHJvaWQiIGFuZCAoT1MhPSJsYl9zaGVsbCIgb3IgIjwodGFyZ2V0X2FyY2gpIiE9ImFuZHJvaWQiKScsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ19hbmRyb2lkKF91bml0dGVzdCk/XFwuY2MkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICcoXnwvKWFuZHJvaWQvJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnKE9TPT0id2luIiBhbmQgPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTApIG9yIE9TPT0ibGJfc2hlbGwiIG9yIE9TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ19wb3NpeChfdW5pdHRlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pcG9zaXgvJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTEnLCB7Ci0gICAgICAnc291cmNlcy8nOiBbIFsnZXhjbHVkZScsICdfY2hyb21lb3MoX3VuaXR0ZXN0KT9cXC4oaHxjYykkJ10gXQotICAgIH1dLAotICAgIFsnPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTAnLCB7Ci0gICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgIFsnZXhjbHVkZScsICdfbmFjbChfdW5pdHRlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydPUyE9ImxpbnV4IiBhbmQgT1MhPSJvcGVuYnNkIiBhbmQgT1MhPSJmcmVlYnNkIiBvciA+KG5hY2xfdW50cnVzdGVkX2J1aWxkKT09MScsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ194ZGcoX3VuaXR0ZXN0KT9cXC4oaHxjYykkJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTEnLCB7Ci0gICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgIFsnZXhjbHVkZScsICdfKHh8eDExKShfdW5pdHRlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8peDExX1teL10qXFwuKGh8Y2MpJCddLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJz4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICBbJ2V4Y2x1ZGUnLCAnX2d0ayhfYnJvd3NlcnRlc3R8X3VuaXR0ZXN0KT9cXC4oaHxjYykkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICcoXnwvKWd0ay8nXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pZ3RrX1teL10qXFwuKGh8Y2MpJCddLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJz4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnX3ZpZXdzXFwuKGh8Y2MpJCddIF0KLSAgICB9XSwKLSAgICBbJz4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnX2F1cmEoX3VuaXR0ZXN0KT9cXC4oaHxjYykkJ10sCi0gICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdfYXVyYShfYnJvd3NlcnRlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJyhefC8pYXVyYS8nXSwKLSAgICAgIF0KLSAgICB9XSwKLSAgICBbJz4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnX2F1cmF4MTFcXC4oaHxjYykkJ10gXQotICAgIH1dLAotICAgIFsnT1MhPSJ3aW4iIG9yID4obmFjbF91bnRydXN0ZWRfYnVpbGQpPT0xJywgewotICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnX2F1cmF3aW5cXC4oaHxjYykkJ10gXQotICAgIH1dLAotICAgIFsnPihuYWNsX3VudHJ1c3RlZF9idWlsZCk9PTEnLCB7Ci0gICAgICAnc291cmNlcy8nOiBbIFsnZXhjbHVkZScsICdfYXNoKF9icm93c2VydGVzdHxfdW5pdHRlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJyhefC8pYXNoLyddLAotICAgICAgXQotICAgIH1dLAotICBdCi19CmRpZmYgLS1naXQgYS9idWlsZF9neXAvcHJvdG9jLmd5cGkgYi9idWlsZF9neXAvcHJvdG9jLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMmM4NTMuLjAwMDAwMDAKLS0tIGEvYnVpbGRfZ3lwL3Byb3RvYy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGEgdGFyZ2V0IHRvIHByb3ZpZGUgYSBydWxlCi0jIHRvIGludm9rZSBwcm90b2MgaW4gYSBjb25zaXN0ZW50IG1hbm5lci4gRm9yIEphdmEtdGFyZ2V0cywgc2VlCi0jIHByb3RvY19qYXZhLmd5cGkuCi0jCi0jIFRvIHVzZSB0aGlzLCBjcmVhdGUgYSBneXAgdGFyZ2V0IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtOgotIyB7Ci0jICAgJ3RhcmdldF9uYW1lJzogJ215X3Byb3RvX2xpYicsCi0jICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotIyAgICdzb3VyY2VzJzogWwotIyAgICAgJ2Zvby5wcm90bycsCi0jICAgICAnYmFyLnByb3RvJywKLSMgICBdLAotIyAgICd2YXJpYWJsZXMnOiB7Ci0jICAgICAjIE9wdGlvbmFsLCBzZWUgYmVsb3c6ICdwcm90b19pbl9kaXInOiAnLicKLSMgICAgICdwcm90b19vdXRfZGlyJzogJ2Rpci9mb3IvbXlfcHJvdG9fbGliJwotIyAgIH0sCi0jICAgJ2luY2x1ZGVzJzogWydwYXRoL3RvL3RoaXMvZ3lwaS9maWxlJ10sCi0jIH0KLSMgSWYgbmVjZXNzYXJ5LCB5b3UgbWF5IGFkZCBub3JtYWwgLmNjIGZpbGVzIHRvIHRoZSBzb3VyY2VzIGxpc3Qgb3Igb3RoZXIgZ3lwCi0jIGRlcGVuZGVuY2llcy4gIFRoZSBwcm90byBoZWFkZXJzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGdlbmVyYXRlZCBiZWZvcmUgYW55Ci0jIHNvdXJjZSBmaWxlcywgZXZlbiB3aXRoaW4gdGhpcyB0YXJnZXQsIGFyZSBjb21waWxlZC4KLSMKLSMgVGhlICdwcm90b19pbl9kaXInIHZhcmlhYmxlIG11c3QgYmUgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlCi0jIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAucHJvdG8gZmlsZXMuICBJZiBsZWZ0IG91dCwgaXQgZGVmYXVsdHMgdG8gJy4nLgotIwotIyBUaGUgJ3Byb3RvX291dF9kaXInIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGF0aCBzdWZmaXggdGhhdCBvdXRwdXQKLSMgZmlsZXMgYXJlIGdlbmVyYXRlZCB1bmRlci4gIFRhcmdldHMgdGhhdCBneXAtZGVwZW5kIG9uIG15X3Byb3RvX2xpYgotIyB3aWxsIGJlIGFibGUgdG8gaW5jbHVkZSB0aGUgcmVzdWx0aW5nIHByb3RvIGhlYWRlcnMgd2l0aCBhbiBpbmNsdWRlCi0jIGxpa2U6Ci0jICAgI2luY2x1ZGUgImRpci9mb3IvbXlfcHJvdG9fbGliL2Zvby5wYi5oIgotIwotIyBJZiB5b3UgbmVlZCB0byBhZGQgYW4gRVhQT1JUIG1hY3JvIHRvIGEgcHJvdG9idWYncyBjKysgaGVhZGVyLCBzZXQgdGhlCi0jICdjY19nZW5lcmF0b3Jfb3B0aW9ucycgdmFyaWFibGUgd2l0aCB0aGUgdmFsdWU6ICdkbGxleHBvcnRfZGVjbD1GT09fRVhQT1JUOicKLSMgZS5nLiAnZGxsZXhwb3J0X2RlY2w9QkFTRV9FWFBPUlQ6JwotIwotIyBJdCBpcyBsaWtlbHkgeW91IGFsc28gbmVlZCB0byAjaW5jbHVkZSBhIGZpbGUgZm9yIHRoZSBhYm92ZSBFWFBPUlQgbWFjcm8gdG8KLSMgd29yay4gWW91IGNhbiBkbyBzbyB3aXRoIHRoZSAnY2NfaW5jbHVkZScgdmFyaWFibGUuCi0jIGUuZy4gJ2Jhc2UvYmFzZV9leHBvcnQuaCcKLSMKLSMgSW1wbGVtZW50YXRpb24gbm90ZXM6Ci0jIEEgcHJvdG9fb3V0X2RpciBvZiBmb28vYmFyIHByb2R1Y2VzCi0jICAgPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvcHJvdG9jX291dC9mb28vYmFyL3tmaWxlMSxmaWxlMn0ucGIue2NjLGh9Ci0jICAgPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvcHlwcm90by9mb28vYmFyL3tmaWxlMSxmaWxlMn1fcGIyLnB5Ci0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAncHJvdG9jX3dyYXBwZXInOiAnPChERVBUSCkvdG9vbHMvcHJvdG9jX3dyYXBwZXIvcHJvdG9jX3dyYXBwZXIucHknLAotICAgICdjY19kaXInOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvcHJvdG9jX291dC88KHByb3RvX291dF9kaXIpJywKLSAgICAncHlfZGlyJzogJzwoUFJPRFVDVF9ESVIpL3B5cHJvdG8vPChwcm90b19vdXRfZGlyKScsCi0gICAgJ2NjX2dlbmVyYXRvcl9vcHRpb25zJSc6ICcnLAotICAgICdjY19pbmNsdWRlJSc6ICcnLAotICAgICdwcm90b19pbl9kaXIlJzogJy4nLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydob3N0X29zPT0id2luIicsIHsKLSAgICAgICAgJ3Byb3RvY19kaXInOiAnPChERVBUSCkvdG9vbHMnLAotICAgICAgICAncHJvdG9jX2Jpbic6ICc8KERFUFRIKS90b29scy88KEVYRUNVVEFCTEVfUFJFRklYKXByb3RvYzwoRVhFQ1VUQUJMRV9TVUZGSVgpJywKLSAgICAgICAgJ3Byb3RvYyc6ICc8KERFUFRIKS90b29scy9wcm90b2MuZXhlJywKLSAgICAgIH0sIHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd1c2Vfc3lzdGVtX3Byb3RvYnVmPT0wJywgewotICAgICAgICAgICAgJ3Byb3RvYyc6ICc8KFBST0RVQ1RfRElSKS88KEVYRUNVVEFCTEVfUFJFRklYKXByb3RvYzwoRVhFQ1VUQUJMRV9TVUZGSVgpJywKLSAgICAgICAgICB9LCB7ICMgdXNlX3N5c3RlbV9wcm90b2J1Zj09MQotICAgICAgICAgICAgJ3Byb3RvYyc6ICc8IXB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmluZF9wcm9ncmFtIHByb3RvYyknLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLSAgJ3J1bGVzJzogWwotICAgIHsKLSAgICAgICdydWxlX25hbWUnOiAnZ2VucHJvdG8nLAotICAgICAgJ2V4dGVuc2lvbic6ICdwcm90bycsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAnPChwcm90b2Nfd3JhcHBlciknLAotICAgICAgICAnPChwcm90b2MpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgJzwocHlfZGlyKS88KFJVTEVfSU5QVVRfUk9PVClfcGIyLnB5JywKLSAgICAgICAgJzwoY2NfZGlyKS88KFJVTEVfSU5QVVRfUk9PVCkucGIuY2MnLAotICAgICAgICAnPChjY19kaXIpLzwoUlVMRV9JTlBVVF9ST09UKS5wYi5oJywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICc8KHByb3RvY193cmFwcGVyKScsCi0gICAgICAgICctLWluY2x1ZGUnLAotICAgICAgICAnPChjY19pbmNsdWRlKScsCi0gICAgICAgICctLXByb3RvYnVmJywKLSAgICAgICAgJzwoY2NfZGlyKS88KFJVTEVfSU5QVVRfUk9PVCkucGIuaCcsCi0gICAgICAgICMgVXNpbmcgdGhlIC0tYXJnIHZhbCBmb3JtIChpbnN0ZWFkIG9mIC0tYXJnPXZhbCkgYWxsb3dzIGd5cCdzIG1zdnMgcnVsZQotICAgICAgICAjIGdlbmVyYXRpb24gdG8gY29ycmVjdCAndmFsJyB3aGljaCBpcyBhIHBhdGguCi0gICAgICAgICctLXByb3RvLWluLWRpcicsJzwocHJvdG9faW5fZGlyKScsCi0gICAgICAgICMgTmFpdmVseSB5b3UnZCB1c2UgPChSVUxFX0lOUFVUX1BBVEgpIGhlcmUsIGJ1dCBwcm90b2MgcmVxdWlyZXMKLSAgICAgICAgIyAtLXByb3RvX3BhdGggaXMgYSBzdHJpY3QgcHJlZml4IG9mIHRoZSBwYXRoIGdpdmVuIGFzIGFuIGFyZ3VtZW50LgotICAgICAgICAnLS1wcm90by1pbi1maWxlJywnPChSVUxFX0lOUFVUX1JPT1QpPChSVUxFX0lOUFVUX0VYVCknLAotICAgICAgICAnLS11c2Utc3lzdGVtLXByb3RvYnVmPTwodXNlX3N5c3RlbV9wcm90b2J1ZiknLAotICAgICAgICAnLS0nLAotICAgICAgICAnPChwcm90b2MpJywKLSAgICAgICAgJy0tY3BwX291dCcsICc8KGNjX2dlbmVyYXRvcl9vcHRpb25zKTwoY2NfZGlyKScsCi0gICAgICAgICctLXB5dGhvbl9vdXQnLCAnPChweV9kaXIpJywKLSAgICAgIF0sCi0gICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEMrKyBhbmQgUHl0aG9uIGNvZGUgZnJvbSA8KFJVTEVfSU5QVVRfUEFUSCknLAotICAgICAgJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJzogMSwKLSAgICB9LAotICBdLAotICAnZGVwZW5kZW5jaWVzJzogWwotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5neXA6cHJvdG9idWZfbGl0ZScsCi0gIF0sCi0gICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3Byb3RvY19vdXQnLAotICAgICc8KERFUFRIKScsCi0gIF0sCi0gICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvcHJvdG9jX291dCcsCi0gICAgICAnPChERVBUSCknLAotICAgIF0KLSAgfSwKLSAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgIyBUaGUgZ2VuZXJhdGVkIGhlYWRlcnMgcmVmZXJlbmNlIGhlYWRlcnMgd2l0aGluIHByb3RvYnVmX2xpdGUsCi0gICAgIyBzbyBkZXBlbmRlbmNpZXMgbXVzdCBiZSBhYmxlIHRvIGZpbmQgdGhvc2UgaGVhZGVycyB0b28uCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cDpwcm90b2J1Zl9saXRlJywKLSAgXSwKLSAgIyBUaGlzIHRhcmdldCBleHBvcnRzIGEgaGFyZCBkZXBlbmRlbmN5IGJlY2F1c2UgaXQgZ2VuZXJhdGVzIGhlYWRlcgotICAjIGZpbGVzLgotICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLX0KZGlmZiAtLWdpdCBhL2J1aWxkX2d5cC93aW5fcHJlY29tcGlsZS5neXBpIGIvYnVpbGRfZ3lwL3dpbl9wcmVjb21waWxlLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OTJhMGYuLjAwMDAwMDAKLS0tIGEvYnVpbGRfZ3lwL3dpbl9wcmVjb21waWxlLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIEluY2x1ZGUgdGhpcyBmaWxlIHRvIG1ha2UgdGFyZ2V0cyBpbiB5b3VyIC5neXAgdXNlIHRoZSBkZWZhdWx0Ci0jIHByZWNvbXBpbGVkIGhlYWRlciBvbiBXaW5kb3dzLCBpbiBkZWJ1ZyBidWlsZHMgb25seSBhcyB0aGUgb2ZmaWNpYWwKLSMgYnVpbGRlcnMgYmxvdyB1cCAob3V0IG9mIG1lbW9yeSkgaWYgcHJlY29tcGlsZWQgaGVhZGVycyBhcmUgdXNlZCBmb3IKLSMgcmVsZWFzZSBidWlsZHMuCi0KLXsKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWycoT1M9PSJ3aW4iIG9yIChPUz09ImxiX3NoZWxsIiBhbmQgdGFyZ2V0X2FyY2g9PSJ4YjM2MCIpKSBhbmQgXAotICAgICAgY2hyb21pdW1fd2luX3BjaD09MScsIHsKLSAgICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgICAnbXN2c19wcmVjb21waWxlZF9oZWFkZXInOiAnPChERVBUSCkvYnVpbGQvcHJlY29tcGlsZS5oJywKLSAgICAgICAgICAnbXN2c19wcmVjb21waWxlZF9zb3VyY2UnOiAnPChERVBUSCkvYnVpbGQvcHJlY29tcGlsZS5jYycsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbJzwoREVQVEgpL2J1aWxkL3ByZWNvbXBpbGUuY2MnXSwKLSAgICAgICAgfQotICAgICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9idWlsZHRvb2xzLy5naXRpZ25vcmUgYi9idWlsZHRvb2xzLy5naXRpZ25vcmUKaW5kZXggYzJjOGRjMi4uYWZhYTNjYSAxMDA2NDQKLS0tIGEvYnVpbGR0b29scy8uZ2l0aWdub3JlCisrKyBiL2J1aWxkdG9vbHMvLmdpdGlnbm9yZQpAQCAtMSwxMiArMSw0IEBACiAqLnB5YwotdGhpcmRfcGFydHkvbGliYysrL3RydW5rCi10aGlyZF9wYXJ0eS9saWJjKythYmkvdHJ1bmsKLXRoaXJkX3BhcnR5L2xpYnVud2luZC90cnVuawotbGludXg2NC9nbgogbGludXg2NC9jbGFuZy1mb3JtYXQKLW1hYy9nbgogbWFjL2NsYW5nLWZvcm1hdAotd2luL2duLmV4ZQogd2luL2NsYW5nLWZvcm1hdC5leGUKLWFuZHJvaWQvZG9jbGF2YS8KLWFuZHJvaWQvZG9jbGF2YS50YXIuZ3oKZGlmZiAtLWdpdCBhL2J1aWxkdG9vbHMvREVQUyBiL2J1aWxkdG9vbHMvREVQUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRlOWEwOC4uMDAwMDAwMAotLS0gYS9idWlsZHRvb2xzL0RFUFMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi11c2VfcmVsYXRpdmVfcGF0aHMgPSBUcnVlCi0KLXZhcnMgPSB7Ci0gICJjaHJvbWl1bV91cmwiOiAiaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tIiwKLQotICAiY2xhbmdfZm9ybWF0X3JldiI6ICIwNjUzZWVlMGM4MWVhMDQ3MTVjNjM1ZGQwODg1ZTgwOTZmZjZiYTZkIiwgICAjIHIzMDI1ODAKLSAgImxpYmN4eF9yZXZpc2lvbiI6ICIzYTA3ZGQ3NDBiZTYzODc4MTY3YTBlYTE5ZmU4MTg2OTk1NGJhZGQ3IiwgICAgIyByMzAzODc4Ci0gICJsaWJjeHhhYmlfcmV2aXNpb24iOiAiNDA3MmU4ZmQ3NmZlYmVlMzdmNjBhZWRhNzZkNmQ5ZjVlMzc5MWRhYSIsICMgcjMwMzgwNgotICAibGlidW53aW5kX3JldmlzaW9uIjogIjQxZjk4MmU1ODg3MTg1YjkwNGE0NTZlMjBkZmNkNThlNmJlNmNjMTkiLCAjIHIzMDY0NDIKLX0KLQotZGVwcyA9IHsKLSAgImNsYW5nX2Zvcm1hdC9zY3JpcHQiOgotICAgIFZhcigiY2hyb21pdW1fdXJsIikgKyAiL2Nocm9taXVtL2xsdm0tcHJvamVjdC9jZmUvdG9vbHMvY2xhbmctZm9ybWF0LmdpdEAiICsKLSAgICBWYXIoImNsYW5nX2Zvcm1hdF9yZXYiKSwKLSAgInRoaXJkX3BhcnR5L2xpYmMrKy90cnVuayI6Ci0gICAgVmFyKCJjaHJvbWl1bV91cmwiKSArICIvY2hyb21pdW0vbGx2bS1wcm9qZWN0L2xpYmN4eC5naXQiICsgIkAiICsKLSAgICBWYXIoImxpYmN4eF9yZXZpc2lvbiIpLAotICAidGhpcmRfcGFydHkvbGliYysrYWJpL3RydW5rIjoKLSAgICBWYXIoImNocm9taXVtX3VybCIpICsgIi9jaHJvbWl1bS9sbHZtLXByb2plY3QvbGliY3h4YWJpLmdpdCIgKyAiQCIgKwotICAgIFZhcigibGliY3h4YWJpX3JldmlzaW9uIiksCi0gICJ0aGlyZF9wYXJ0eS9saWJ1bndpbmQvdHJ1bmsiOgotICAgIFZhcigiY2hyb21pdW1fdXJsIikgKyAiL2V4dGVybmFsL2xsdm0ub3JnL2xpYnVud2luZC5naXQiICsgIkAiICsKLSAgICBWYXIoImxpYnVud2luZF9yZXZpc2lvbiIpLAotfQpkaWZmIC0tZ2l0IGEvYnVpbGR0b29scy9saW51eDY0L2duLnNoYTEgYi9idWlsZHRvb2xzL2xpbnV4NjQvZ24uc2hhMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdkYjU1Yy4uMDAwMDAwMAotLS0gYS9idWlsZHRvb2xzL2xpbnV4NjQvZ24uc2hhMQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTE5ODRkOWY2Mjc4NjllNjMxYTNlNWU2YjI1MDMyYTIwMmI4MDVjNmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9idWlsZHRvb2xzL21hYy9jbGFuZy1mb3JtYXQuc2hhMSBiL2J1aWxkdG9vbHMvbWFjL2NsYW5nLWZvcm1hdC5zaGExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDBiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZHRvb2xzL21hYy9jbGFuZy1mb3JtYXQuc2hhMQpAQCAtMCwwICsxIEBACiswNjc5YjI5NWUyY2UyZmNlNzkxOWQxZThkMDAzZTQ5NzQ3NWYyNGEzCmRpZmYgLS1naXQgYS9idWlsZHRvb2xzL3dpbi9jbGFuZy1mb3JtYXQuZXhlLnNoYTEgYi9idWlsZHRvb2xzL3dpbi9jbGFuZy1mb3JtYXQuZXhlLnNoYTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiMGFlNQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWxkdG9vbHMvd2luL2NsYW5nLWZvcm1hdC5leGUuc2hhMQpAQCAtMCwwICsxIEBACitjODQ1NWQ0M2QwNTJlYjc5ZjY1ZDA0NmM2YjAyYzE2OTg1N2I5NjNiCmRpZmYgLS1naXQgYS9jb2JhbHQvLmdpdGF0dHJpYnV0ZXMgYi9jb2JhbHQvLmdpdGF0dHJpYnV0ZXMKaW5kZXggMGY3MDYwNy4uMTBkYmUxMiAxMDA2NDQKLS0tIGEvY29iYWx0Ly5naXRhdHRyaWJ1dGVzCisrKyBiL2NvYmFsdC8uZ2l0YXR0cmlidXRlcwpAQCAtMTksNyArMTksNiBAQAogKi55ICAgICAgICAgICAgICAgICAgICAgdGV4dCBlb2w9bGYKIC5jbGFuZy1mb3JtYXQgICAgICAgICAgIHRleHQgZW9sPWxmCiBjb2RlcmV2aWV3LnNldHRpbmdzICAgICB0ZXh0IGVvbD1sZgotZ3lwX2NvYmFsdCAgICAgICAgICAgICAgdGV4dCBlb2w9bGYKIAogIyBJbWFnZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmluYXJ5IGZpbGVzLgogKi5leGUgICAgICAgICAgICAgICAgICAgYmluYXJ5CmRpZmYgLS1naXQgYS9jb2JhbHQvQlVJTEQuZ24gYi9jb2JhbHQvQlVJTEQuZ24KaW5kZXggN2ZiY2NkYy4uMmE0ZTBiNiAxMDA2NDQKLS0tIGEvY29iYWx0L0JVSUxELmduCisrKyBiL2NvYmFsdC9CVUlMRC5nbgpAQCAtMTgsNiArMTgsNyBAQAogICAgICI6ZGVmYXVsdCIsCiAgICAgIi8vY29iYWx0L2JpbmRpbmdzL3Rlc3Rpbmc6YmluZGluZ3NfdGVzdCIsCiAgICAgIi8vY29iYWx0L2Jyb3dzZXI6YnJvd3Nlcl90ZXN0IiwKKyAgICAiLy9jb2JhbHQvY3Nzb206Y3Nzb21fdGVzdCIsCiAgICAgIi8vY29iYWx0L2RvbTpkb21fdGVzdCIsCiAgICAgIi8vY29iYWx0L2RvbS90ZXN0aW5nOmRvbV90ZXN0aW5nIiwKICAgICAiLy9jb2JhbHQvZG9tX3BhcnNlcjpkb21fcGFyc2VyX3Rlc3QiLApAQCAtNjQsNiArNjUsOSBAQAogICAgIGRlcHMgKz0gWwogICAgICAgIi8vYmFzZS91dGlsL3ZhbHVlczp2YWx1ZXNfdXRpbCIsCiAgICAgICAiLy9jb2JhbHQvdXBkYXRlciIsCisgICAgICAiLy9jb2JhbHQvdXBkYXRlcjpjcmFzaF9zYW5kYm94IiwKKyAgICAgICIvL2NvYmFsdC91cGRhdGVyOm5vb3Bfc2FuZGJveCIsCisgICAgICAiLy9jb2JhbHQvdXBkYXRlcjpvbmVfYXBwX29ubHlfc2FuZGJveCIsCiAgICAgICAiLy9jb21wb25lbnRzL2NsaWVudF91cGRhdGVfcHJvdG9jb2wiLAogICAgICAgIi8vY29tcG9uZW50cy9jcnhfZmlsZSIsCiAgICAgICAiLy9jb21wb25lbnRzL3ByZWZzIiwKZGlmZiAtLWdpdCBhL2NvYmFsdC9fZW52LnB5IGIvY29iYWx0L19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMmVhYmMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtbW9kdWxlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCgnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9jb2JhbHQvYWNjb3VudC9hY2NvdW50Lmd5cCBiL2NvYmFsdC9hY2NvdW50L2FjY291bnQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDQyNjM0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9hY2NvdW50L2FjY291bnQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYWNjb3VudCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2FjY291bnRfbWFuYWdlci5oJywKLSAgICAgICAgJ2FjY291bnRfbWFuYWdlci5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYXVkaW8vQlVJTEQuZ24gYi9jb2JhbHQvYXVkaW8vQlVJTEQuZ24KaW5kZXggODhiZmViMS4uNmU5Yzk2MiAxMDA2NDQKLS0tIGEvY29iYWx0L2F1ZGlvL0JVSUxELmduCisrKyBiL2NvYmFsdC9hdWRpby9CVUlMRC5nbgpAQCAtODEsNiArODEsNCBAQAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICBdCiAgIGRlcHMgKz0gY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcwotCi0gIGNvbnRlbnRfZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiIF0KIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9hdWRpby9hdWRpby5neXAgYi9jb2JhbHQvYXVkaW8vYXVkaW8uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDQ4OGMyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9hdWRpby9hdWRpby5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYXVkaW8nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhc3luY19hdWRpb19kZWNvZGVyLmNjJywKLSAgICAgICAgJ2FzeW5jX2F1ZGlvX2RlY29kZXIuaCcsCi0gICAgICAgICdhdWRpb19idWZmZXIuY2MnLAotICAgICAgICAnYXVkaW9fYnVmZmVyLmgnLAotICAgICAgICAnYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlLmNjJywKLSAgICAgICAgJ2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZS5oJywKLSAgICAgICAgJ2F1ZGlvX2NvbnRleHQuY2MnLAotICAgICAgICAnYXVkaW9fY29udGV4dC5oJywKLSAgICAgICAgJ2F1ZGlvX2Rlc3RpbmF0aW9uX25vZGUuY2MnLAotICAgICAgICAnYXVkaW9fZGVzdGluYXRpb25fbm9kZS5oJywKLSAgICAgICAgJ2F1ZGlvX2RldmljZS5jYycsCi0gICAgICAgICdhdWRpb19kZXZpY2UuaCcsCi0gICAgICAgICdhdWRpb19maWxlX3JlYWRlci5jYycsCi0gICAgICAgICdhdWRpb19maWxlX3JlYWRlci5oJywKLSAgICAgICAgJ2F1ZGlvX2ZpbGVfcmVhZGVyX3dhdi5jYycsCi0gICAgICAgICdhdWRpb19maWxlX3JlYWRlcl93YXYuaCcsCi0gICAgICAgICdhdWRpb19oZWxwZXJzLmgnLAotICAgICAgICAnYXVkaW9fbm9kZS5jYycsCi0gICAgICAgICdhdWRpb19ub2RlLmgnLAotICAgICAgICAnYXVkaW9fbm9kZV9pbnB1dC5jYycsCi0gICAgICAgICdhdWRpb19ub2RlX2lucHV0LmgnLAotICAgICAgICAnYXVkaW9fbm9kZV9vdXRwdXQuY2MnLAotICAgICAgICAnYXVkaW9fbm9kZV9vdXRwdXQuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwOm1lZGlhJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgIyBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzIGFyZSBwdXQgb24gdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRhcmdldHMgdGhhdCBkZXBlbmQKLSAgICAgICAgIyBvbiB0aGlzIG9uZS4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXQotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYXVkaW8vYXVkaW9fY29udGV4dC5jYyBiL2NvYmFsdC9hdWRpby9hdWRpb19jb250ZXh0LmNjCmluZGV4IDRlYTY4NDcuLmZhZTRiNTMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9hdWRpby9hdWRpb19jb250ZXh0LmNjCisrKyBiL2NvYmFsdC9hdWRpby9hdWRpb19jb250ZXh0LmNjCkBAIC0xOSw3ICsxOSw4IEBACiAKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgYXVkaW8gewpAQCAtMjcsNyArMjgsOCBAQAogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncykKICAgICA6IGRvbTo6RXZlbnRUYXJnZXQoc2V0dGluZ3MpLAogICAgICAgZ2xvYmFsX2Vudmlyb25tZW50XygKLSAgICAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgICAgIC0+Y29udGV4dCgpCiAgICAgICAgICAgICAgIC0+Z2xvYmFsX2Vudmlyb25tZW50KCkpLAogICAgICAgQUxMT1dfVEhJU19JTl9JTklUSUFMSVpFUl9MSVNUKHdlYWtfcHRyX2ZhY3RvcnlfKHRoaXMpKSwKICAgICAgIEFMTE9XX1RISVNfSU5fSU5JVElBTElaRVJfTElTVCgKZGlmZiAtLWdpdCBhL2NvYmFsdC9hdWRpby9hdWRpb19kZXZpY2UuY2MgYi9jb2JhbHQvYXVkaW8vYXVkaW9fZGV2aWNlLmNjCmluZGV4IDc3NTVlN2YuLjdhYWUzYjQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9hdWRpby9hdWRpb19kZXZpY2UuY2MKKysrIGIvY29iYWx0L2F1ZGlvL2F1ZGlvX2RldmljZS5jYwpAQCAtNDQsMTMgKzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG9mZnNldF9pbl9mcmFtZXMsIGJvb2wqIGlzX3BsYXlpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfZW9zX3JlYWNoZWQsIHZvaWQqIGNvbnRleHQpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgIVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQogICBzdGF0aWMgdm9pZCBDb25zdW1lRnJhbWVzRnVuYyhpbnQgZnJhbWVzX2NvbnN1bWVkLCB2b2lkKiBjb250ZXh0KTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gIDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLSAgc3RhdGljIHZvaWQgQ29uc3VtZUZyYW1lc0Z1bmMoaW50IGZyYW1lc19jb25zdW1lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49ICAxMiB8fCAhU0JfSEFTKEFTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcpCiAKICAgdm9pZCBVcGRhdGVTb3VyY2VTdGF0dXMoaW50KiBmcmFtZXNfaW5fYnVmZmVyLCBpbnQqIG9mZnNldF9pbl9mcmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzX3BsYXlpbmcsIGJvb2wqIGlzX2Vvc19yZWFjaGVkKTsKQEAgLTE0MywxNSArMTM3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2Vvc19yZWFjaGVkKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIC8vIHN0YXRpYwogdm9pZCBBdWRpb0RldmljZTo6SW1wbDo6Q29uc3VtZUZyYW1lc0Z1bmMoaW50IGZyYW1lc19jb25zdW1lZCwgdm9pZCogY29udGV4dCkgewotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCAhU0JfSEFTKEFTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcpCi12b2lkIEF1ZGlvRGV2aWNlOjpJbXBsOjpDb25zdW1lRnJhbWVzRnVuYyhpbnQgZnJhbWVzX2NvbnN1bWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpIHsKLSAgU0JfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihmcmFtZXNfY29uc3VtZWRfYXQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAgMTIgfHwgIVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQogICBBdWRpb0RldmljZTo6SW1wbCogaW1wbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9EZXZpY2U6OkltcGwqPihjb250ZXh0KTsKICAgRENIRUNLKGltcGwpOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvYXVkaW8vYXVkaW9fZmlsZV9yZWFkZXJfd2F2LmNjIGIvY29iYWx0L2F1ZGlvL2F1ZGlvX2ZpbGVfcmVhZGVyX3dhdi5jYwppbmRleCA4ODJhNDk2Li4zMGNhYThmIDEwMDY0NAotLS0gYS9jb2JhbHQvYXVkaW8vYXVkaW9fZmlsZV9yZWFkZXJfd2F2LmNjCisrKyBiL2NvYmFsdC9hdWRpby9hdWRpb19maWxlX3JlYWRlcl93YXYuY2MKQEAgLTEyMiwxMCArMTIyLDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfSBlbHNlIGlmIChjaHVua19pZCA9PSBrV0FWQ2h1bmtJRF9kYXRhICYmIGkgPT0gMSkgewotICAgICAgaWYgKCFQYXJzZVdBVl9kYXRhKGRhdGEsIG9mZnNldCwgY2h1bmtfc2l6ZSwgaXNfc3JjX3NhbXBsZV9pbl9mbG9hdCkpIHsKLSAgICAgICAgRExPRyhXQVJOSU5HKSA8PCAiUGFyc2UgZGF0YSBjaHVuayBmYWlsZWQuIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9CisgICAgICBQYXJzZVdBVl9kYXRhKGRhdGEsIG9mZnNldCwgY2h1bmtfc2l6ZSwgaXNfc3JjX3NhbXBsZV9pbl9mbG9hdCk7CiAgICAgfSBlbHNlIHsKICAgICAgIERMT0coV0FSTklORykgPDwgIk1hbGZvcm1lZCBhdWRpbyBjaHVuay4iOwogICAgICAgYnJlYWs7CkBAIC0xODIsNyArMTc5LDcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQXVkaW9GaWxlUmVhZGVyV0FWOjpQYXJzZVdBVl9kYXRhKGNvbnN0IHVpbnQ4KiBkYXRhLCBzaXplX3Qgb2Zmc2V0LAordm9pZCBBdWRpb0ZpbGVSZWFkZXJXQVY6OlBhcnNlV0FWX2RhdGEoY29uc3QgdWludDgqIGRhdGEsIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfc3JjX3NhbXBsZV9pbl9mbG9hdCkgewogICAvLyBTZXQgbnVtYmVyIG9mIGZyYW1lcyBiYXNlZCBvbiBzaXplIG9mIGRhdGEgY2h1bmsuCkBAIC0yODEsOCArMjc4LDYgQEAKICAgICB9CiAgIH0KICNlbmRpZiAgLy8gU0JfSVMoTElUVExFX0VORElBTikKLQotICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIGF1ZGlvCmRpZmYgLS1naXQgYS9jb2JhbHQvYXVkaW8vYXVkaW9fZmlsZV9yZWFkZXJfd2F2LmggYi9jb2JhbHQvYXVkaW8vYXVkaW9fZmlsZV9yZWFkZXJfd2F2LmgKaW5kZXggYmYzYjk1YS4uOTAxYWFkMSAxMDA2NDQKLS0tIGEvY29iYWx0L2F1ZGlvL2F1ZGlvX2ZpbGVfcmVhZGVyX3dhdi5oCisrKyBiL2NvYmFsdC9hdWRpby9hdWRpb19maWxlX3JlYWRlcl93YXYuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBDT0JBTFRfQVVESU9fQVVESU9fRklMRV9SRUFERVJfV0FWX0hfCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNvYmFsdC9hdWRpby9hdWRpb19maWxlX3JlYWRlci5oIgogI2luY2x1ZGUgImNvYmFsdC9hdWRpby9hdWRpb19oZWxwZXJzLmgiCkBAIC00Nyw3ICs0OCw3IEBACiAgIHZvaWQgUGFyc2VDaHVua3MoY29uc3QgdWludDgqIGRhdGEsIHNpemVfdCBzaXplKTsKICAgYm9vbCBQYXJzZVdBVl9mbXQoY29uc3QgdWludDgqIGRhdGEsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICBib29sKiBpc19zcmNfc2FtcGxlX2luX2Zsb2F0KTsKLSAgYm9vbCBQYXJzZVdBVl9kYXRhKGNvbnN0IHVpbnQ4KiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKyAgdm9pZCBQYXJzZVdBVl9kYXRhKGNvbnN0IHVpbnQ4KiBkYXRhLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfc3JjX3NhbXBsZV9pbl9mbG9hdCk7CiAKICAgYm9vbCBpc192YWxpZCgpIHsgcmV0dXJuIGF1ZGlvX2J1c18gIT0gTlVMTDsgfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2F1ZGlvL2F1ZGlvX25vZGVfaW5wdXRfb3V0cHV0X3Rlc3QuY2MgYi9jb2JhbHQvYXVkaW8vYXVkaW9fbm9kZV9pbnB1dF9vdXRwdXRfdGVzdC5jYwppbmRleCA0MWEyY2EyLi4xMmNiMDY5IDEwMDY0NAotLS0gYS9jb2JhbHQvYXVkaW8vYXVkaW9fbm9kZV9pbnB1dF9vdXRwdXRfdGVzdC5jYworKysgYi9jb2JhbHQvYXVkaW8vYXVkaW9fbm9kZV9pbnB1dF9vdXRwdXRfdGVzdC5jYwpAQCAtMjIsOSArMjIsMTEgQEAKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdGVzdGluZy9zdHViX2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS93aW5kb3cuaCIKLSNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2phdmFzY3JpcHRfZW5naW5lLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC90eXBlZF9hcnJheXMuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2FnZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKIC8vIFRPRE86IENvbnNvbGlkYXRlIEF1ZGlvQnVzIGNyZWF0aW9uIGNvZGUKQEAgLTY5LDIxICs3MSwxOCBAQAogfTsKIAogdm9pZCBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1cz4gc3JjX2RhdGEsCisgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvQnVzPiBzcmNfZGF0YSwKICAgICBjb25zdCBBdWRpb05vZGVDaGFubmVsSW50ZXJwcmV0YXRpb24mIGludGVycHJldGF0aW9uLCBBdWRpb0J1cyogYXVkaW9fYnVzLAogICAgIGJvb2wqIHNpbGVuY2UpIHsKLSAgZG9tOjp0ZXN0aW5nOjpTdHViRW52aXJvbm1lbnRTZXR0aW5ncyBlbnZpcm9ubWVudF9zZXR0aW5nczsKLQotICBzY29wZWRfcmVmcHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9fY29udGV4dCgKLSAgICAgIG5ldyBBdWRpb0NvbnRleHQoJmVudmlyb25tZW50X3NldHRpbmdzKSk7CisgIHNjb3BlZF9yZWZwdHI8QXVkaW9Db250ZXh0PiBhdWRpb19jb250ZXh0KG5ldyBBdWRpb0NvbnRleHQoc2V0dGluZ3MpKTsKICAgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IHNvdXJjZSgKLSAgICAgIGF1ZGlvX2NvbnRleHQtPkNyZWF0ZUJ1ZmZlclNvdXJjZSgmZW52aXJvbm1lbnRfc2V0dGluZ3MpKTsKKyAgICAgIGF1ZGlvX2NvbnRleHQtPkNyZWF0ZUJ1ZmZlclNvdXJjZShzZXR0aW5ncykpOwogICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBidWZmZXIoCiAgICAgICBuZXcgQXVkaW9CdWZmZXIoYXVkaW9fY29udGV4dC0+c2FtcGxlX3JhdGUoKSwgc3RkOjptb3ZlKHNyY19kYXRhKSkpOwogICBzb3VyY2UtPnNldF9idWZmZXIoYnVmZmVyKTsKIAogICBzY29wZWRfcmVmcHRyPEF1ZGlvRGVzdGluYXRpb25Ob2RlTW9jaz4gZGVzdGluYXRpb24oCi0gICAgICBuZXcgQXVkaW9EZXN0aW5hdGlvbk5vZGVNb2NrKCZlbnZpcm9ubWVudF9zZXR0aW5ncywgYXVkaW9fY29udGV4dC5nZXQoKSkpOworICAgICAgbmV3IEF1ZGlvRGVzdGluYXRpb25Ob2RlTW9jayhzZXR0aW5ncywgYXVkaW9fY29udGV4dC5nZXQoKSkpOwogICBkZXN0aW5hdGlvbi0+c2V0X2NoYW5uZWxfaW50ZXJwcmV0YXRpb24oaW50ZXJwcmV0YXRpb24pOwogICBzb3VyY2UtPkNvbm5lY3QoZGVzdGluYXRpb24sIDAsIDAsIE5VTEwpOwogICBzb3VyY2UtPlN0YXJ0KDAsIDAsIE5VTEwpOwpAQCAtOTMsMzYgKzkyLDMwIEBACiAKIGNsYXNzIEF1ZGlvTm9kZUlucHV0T3V0cHV0VGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewogIHB1YmxpYzoKLSAgQXVkaW9Ob2RlSW5wdXRPdXRwdXRUZXN0KCkKLSAgICAgIDogZW5naW5lXyhzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU6OkNyZWF0ZUVuZ2luZSgpKSwKLSAgICAgICAgZ2xvYmFsX2Vudmlyb25tZW50XyhlbmdpbmVfLT5DcmVhdGVHbG9iYWxFbnZpcm9ubWVudCgpKSB7Ci0gICAgZW52aXJvbm1lbnRfc2V0dGluZ3NfID0gc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4oCisgIEF1ZGlvTm9kZUlucHV0T3V0cHV0VGVzdCgpIHsKKyAgICB3ZWJfY29udGV4dF8ucmVzZXQod2ViOjpBZ2VudDo6Q3JlYXRlQ29udGV4dCgiQXVkaW9Ob2RlSW5wdXRPdXRwdXRUZXN0IikpOworICAgIHdlYl9jb250ZXh0Xy0+c2V0dXBfZW52aXJvbm1lbnRfc2V0dGluZ3MoCiAgICAgICAgIG5ldyBkb206OnRlc3Rpbmc6OlN0dWJFbnZpcm9ubWVudFNldHRpbmdzKTsKLSAgICBnbG9iYWxfZW52aXJvbm1lbnRfLT5DcmVhdGVHbG9iYWxPYmplY3QoKTsKKyAgICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5DcmVhdGVHbG9iYWxPYmplY3QoKTsKICAgfQogCi0gIH5BdWRpb05vZGVJbnB1dE91dHB1dFRlc3QoKSB7Ci0gICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+U2V0UmVwb3J0RXZhbENhbGxiYWNrKGJhc2U6OkNsb3N1cmUoKSk7Ci0gICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+U2V0UmVwb3J0RXJyb3JDYWxsYmFjaygKLSAgICAgICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudDo6UmVwb3J0RXJyb3JDYWxsYmFjaygpKTsKLSAgICBnbG9iYWxfZW52aXJvbm1lbnRfID0gbnVsbHB0cjsKLSAgfQorICB+QXVkaW9Ob2RlSW5wdXRPdXRwdXRUZXN0KCkge30KIAogICBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50KiBnbG9iYWxfZW52aXJvbm1lbnQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGdsb2JhbF9lbnZpcm9ubWVudF8uZ2V0KCk7CisgICAgcmV0dXJuIHdlYl9jb250ZXh0Xy0+Z2xvYmFsX2Vudmlyb25tZW50KCk7CiAgIH0KIAogICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIGVudmlyb25tZW50X3NldHRpbmdzKCkgY29uc3QgewotICAgIHJldHVybiBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCk7CisgICAgRENIRUNLKHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKS0+Y29udGV4dCgpKTsKKyAgICByZXR1cm4gd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpOwogICB9CiAKICBwcm90ZWN0ZWQ6CiAgIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcF87CiAKICBwcml2YXRlOgotICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lPiBlbmdpbmVfOwotICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudF87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3M+IGVudmlyb25tZW50X3NldHRpbmdzXzsKKyAgLy8gVGhlIFdlYiBJbnN0YW5jZSBpbmNsdWRlcyB0aGUgU2NyaXB0IFJlYWxtLgorICBzdGQ6OnVuaXF1ZV9wdHI8d2ViOjpDb250ZXh0PiB3ZWJfY29udGV4dF87CiB9OwogCiBURVNUX0YoQXVkaW9Ob2RlSW5wdXRPdXRwdXRUZXN0LCBTdGVyZW9Ub1N0ZXJlb1NwZWFrZXJzTGF5b3V0VGVzdCkgewpAQCAtMTQ3LDggKzE0MCw4IEBACiAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtGbG9hdDMyLCBBdWRpb0J1czo6a0ludGVybGVhdmVkKSk7CiAgIGF1ZGlvX2J1cy0+WmVyb0FsbEZyYW1lcygpOwogICBib29sIHNpbGVuY2UgPSB0cnVlOwotICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKHN0ZDo6bW92ZShzcmNfZGF0YSksIGtJbnRlcnByZXRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKKyAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShlbnZpcm9ubWVudF9zZXR0aW5ncygpLCBzdGQ6Om1vdmUoc3JjX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnRlcnByZXRhdGlvbiwgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CiAgIEVYUEVDVF9GQUxTRShzaWxlbmNlKTsKIAogICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGtOdW1PZkRlc3RDaGFubmVsczsgKytjaGFubmVsKSB7CkBAIC0xODksOCArMTgyLDggQEAKICAgICAgICAgICAgICAgICAgICBBdWRpb0J1czo6a0Zsb2F0MzIsIEF1ZGlvQnVzOjprSW50ZXJsZWF2ZWQpKTsKICAgYXVkaW9fYnVzLT5aZXJvQWxsRnJhbWVzKCk7CiAgIGJvb2wgc2lsZW5jZSA9IHRydWU7Ci0gIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2Uoc3RkOjptb3ZlKHNyY19kYXRhKSwga0ludGVycHJldGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOworICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKGVudmlyb25tZW50X3NldHRpbmdzKCksIHN0ZDo6bW92ZShzcmNfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ludGVycHJldGF0aW9uLCBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKICAgRVhQRUNUX0ZBTFNFKHNpbGVuY2UpOwogCiAgIGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwga051bU9mRGVzdENoYW5uZWxzOyArK2NoYW5uZWwpIHsKQEAgLTIyOCw4ICsyMjEsOCBAQAogICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVzOjprRmxvYXQzMiwgQXVkaW9CdXM6OmtJbnRlcmxlYXZlZCkpOwogICBhdWRpb19idXMtPlplcm9BbGxGcmFtZXMoKTsKICAgYm9vbCBzaWxlbmNlID0gdHJ1ZTsKLSAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShzdGQ6Om1vdmUoc3JjX2RhdGEpLCBrSW50ZXJwcmV0YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CisgIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2UoZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwgc3RkOjptb3ZlKHNyY19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW50ZXJwcmV0YXRpb24sIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOwogICBFWFBFQ1RfRkFMU0Uoc2lsZW5jZSk7CiAKICAgZm9yIChzaXplX3QgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBrTnVtT2ZEZXN0Q2hhbm5lbHM7ICsrY2hhbm5lbCkgewpAQCAtMjYzLDggKzI1Niw4IEBACiAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtGbG9hdDMyLCBBdWRpb0J1czo6a0ludGVybGVhdmVkKSk7CiAgIGF1ZGlvX2J1cy0+WmVyb0FsbEZyYW1lcygpOwogICBib29sIHNpbGVuY2UgPSB0cnVlOwotICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKHN0ZDo6bW92ZShzcmNfZGF0YSksIGtJbnRlcnByZXRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKKyAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShlbnZpcm9ubWVudF9zZXR0aW5ncygpLCBzdGQ6Om1vdmUoc3JjX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnRlcnByZXRhdGlvbiwgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CiAgIEVYUEVDVF9GQUxTRShzaWxlbmNlKTsKIAogICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGtOdW1PZkRlc3RDaGFubmVsczsgKytjaGFubmVsKSB7CkBAIC0zMDEsOCArMjk0LDggQEAKICAgICAgICAgICAgICAgICAgICBBdWRpb0J1czo6a0Zsb2F0MzIsIEF1ZGlvQnVzOjprSW50ZXJsZWF2ZWQpKTsKICAgYXVkaW9fYnVzLT5aZXJvQWxsRnJhbWVzKCk7CiAgIGJvb2wgc2lsZW5jZSA9IHRydWU7Ci0gIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2Uoc3RkOjptb3ZlKHNyY19kYXRhKSwga0ludGVycHJldGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOworICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKGVudmlyb25tZW50X3NldHRpbmdzKCksIHN0ZDo6bW92ZShzcmNfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ludGVycHJldGF0aW9uLCBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKICAgRVhQRUNUX0ZBTFNFKHNpbGVuY2UpOwogCiAgIGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwga051bU9mRGVzdENoYW5uZWxzOyArK2NoYW5uZWwpIHsKQEAgLTM0Myw4ICszMzYsOCBAQAogICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVzOjprRmxvYXQzMiwgQXVkaW9CdXM6OmtJbnRlcmxlYXZlZCkpOwogICBhdWRpb19idXMtPlplcm9BbGxGcmFtZXMoKTsKICAgYm9vbCBzaWxlbmNlID0gdHJ1ZTsKLSAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShzdGQ6Om1vdmUoc3JjX2RhdGEpLCBrSW50ZXJwcmV0YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CisgIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2UoZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwgc3RkOjptb3ZlKHNyY19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW50ZXJwcmV0YXRpb24sIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOwogICBFWFBFQ1RfRkFMU0Uoc2lsZW5jZSk7CiAKICAgZm9yIChzaXplX3QgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBrTnVtT2ZEZXN0Q2hhbm5lbHM7ICsrY2hhbm5lbCkgewpAQCAtMzg1LDggKzM3OCw4IEBACiAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtGbG9hdDMyLCBBdWRpb0J1czo6a0ludGVybGVhdmVkKSk7CiAgIGF1ZGlvX2J1cy0+WmVyb0FsbEZyYW1lcygpOwogICBib29sIHNpbGVuY2UgPSB0cnVlOwotICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKHN0ZDo6bW92ZShzcmNfZGF0YSksIGtJbnRlcnByZXRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKKyAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShlbnZpcm9ubWVudF9zZXR0aW5ncygpLCBzdGQ6Om1vdmUoc3JjX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnRlcnByZXRhdGlvbiwgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CiAgIEVYUEVDVF9GQUxTRShzaWxlbmNlKTsKIAogICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGtOdW1PZkRlc3RDaGFubmVsczsgKytjaGFubmVsKSB7CkBAIC00MjcsOCArNDIwLDggQEAKICAgICAgICAgICAgICAgICAgICBBdWRpb0J1czo6a0Zsb2F0MzIsIEF1ZGlvQnVzOjprSW50ZXJsZWF2ZWQpKTsKICAgYXVkaW9fYnVzLT5aZXJvQWxsRnJhbWVzKCk7CiAgIGJvb2wgc2lsZW5jZSA9IHRydWU7Ci0gIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2Uoc3RkOjptb3ZlKHNyY19kYXRhKSwga0ludGVycHJldGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOworICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKGVudmlyb25tZW50X3NldHRpbmdzKCksIHN0ZDo6bW92ZShzcmNfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ludGVycHJldGF0aW9uLCBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKICAgRVhQRUNUX0ZBTFNFKHNpbGVuY2UpOwogCiAgIGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwga051bU9mRGVzdENoYW5uZWxzOyArK2NoYW5uZWwpIHsKQEAgLTQ2OSw4ICs0NjIsOCBAQAogICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVzOjprRmxvYXQzMiwgQXVkaW9CdXM6OmtJbnRlcmxlYXZlZCkpOwogICBhdWRpb19idXMtPlplcm9BbGxGcmFtZXMoKTsKICAgYm9vbCBzaWxlbmNlID0gdHJ1ZTsKLSAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShzdGQ6Om1vdmUoc3JjX2RhdGEpLCBrSW50ZXJwcmV0YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CisgIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2UoZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwgc3RkOjptb3ZlKHNyY19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW50ZXJwcmV0YXRpb24sIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOwogICBFWFBFQ1RfRkFMU0Uoc2lsZW5jZSk7CiAKICAgZm9yIChzaXplX3QgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBrTnVtT2ZEZXN0Q2hhbm5lbHM7ICsrY2hhbm5lbCkgewpAQCAtNTA3LDggKzUwMCw4IEBACiAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtGbG9hdDMyLCBBdWRpb0J1czo6a0ludGVybGVhdmVkKSk7CiAgIGF1ZGlvX2J1cy0+WmVyb0FsbEZyYW1lcygpOwogICBib29sIHNpbGVuY2UgPSB0cnVlOwotICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKHN0ZDo6bW92ZShzcmNfZGF0YSksIGtJbnRlcnByZXRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKKyAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShlbnZpcm9ubWVudF9zZXR0aW5ncygpLCBzdGQ6Om1vdmUoc3JjX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnRlcnByZXRhdGlvbiwgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CiAgIEVYUEVDVF9GQUxTRShzaWxlbmNlKTsKIAogICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGtOdW1PZkRlc3RDaGFubmVsczsgKytjaGFubmVsKSB7CkBAIC01NDUsOCArNTM4LDggQEAKICAgICAgICAgICAgICAgICAgICBBdWRpb0J1czo6a0Zsb2F0MzIsIEF1ZGlvQnVzOjprSW50ZXJsZWF2ZWQpKTsKICAgYXVkaW9fYnVzLT5aZXJvQWxsRnJhbWVzKCk7CiAgIGJvb2wgc2lsZW5jZSA9IHRydWU7Ci0gIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2Uoc3RkOjptb3ZlKHNyY19kYXRhKSwga0ludGVycHJldGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOworICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKGVudmlyb25tZW50X3NldHRpbmdzKCksIHN0ZDo6bW92ZShzcmNfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ludGVycHJldGF0aW9uLCBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKICAgRVhQRUNUX0ZBTFNFKHNpbGVuY2UpOwogCiAgIGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwga051bU9mRGVzdENoYW5uZWxzOyArK2NoYW5uZWwpIHsKQEAgLTU4Myw4ICs1NzYsOCBAQAogICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVzOjprRmxvYXQzMiwgQXVkaW9CdXM6OmtJbnRlcmxlYXZlZCkpOwogICBhdWRpb19idXMtPlplcm9BbGxGcmFtZXMoKTsKICAgYm9vbCBzaWxlbmNlID0gdHJ1ZTsKLSAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShzdGQ6Om1vdmUoc3JjX2RhdGEpLCBrSW50ZXJwcmV0YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CisgIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2UoZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwgc3RkOjptb3ZlKHNyY19kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrSW50ZXJwcmV0YXRpb24sIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOwogICBFWFBFQ1RfRkFMU0Uoc2lsZW5jZSk7CiAKICAgZm9yIChzaXplX3QgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBrTnVtT2ZEZXN0Q2hhbm5lbHM7ICsrY2hhbm5lbCkgewpAQCAtNjIxLDggKzYxNCw4IEBACiAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtGbG9hdDMyLCBBdWRpb0J1czo6a0ludGVybGVhdmVkKSk7CiAgIGF1ZGlvX2J1cy0+WmVyb0FsbEZyYW1lcygpOwogICBib29sIHNpbGVuY2UgPSB0cnVlOwotICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKHN0ZDo6bW92ZShzcmNfZGF0YSksIGtJbnRlcnByZXRhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKKyAgRmlsbEF1ZGlvQnVzRnJvbU9uZVNvdXJjZShlbnZpcm9ubWVudF9zZXR0aW5ncygpLCBzdGQ6Om1vdmUoc3JjX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtJbnRlcnByZXRhdGlvbiwgYXVkaW9fYnVzLmdldCgpLCAmc2lsZW5jZSk7CiAgIEVYUEVDVF9GQUxTRShzaWxlbmNlKTsKIAogICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IGtOdW1PZkRlc3RDaGFubmVsczsgKytjaGFubmVsKSB7CkBAIC02NTksOCArNjUyLDggQEAKICAgICAgICAgICAgICAgICAgICBBdWRpb0J1czo6a0Zsb2F0MzIsIEF1ZGlvQnVzOjprSW50ZXJsZWF2ZWQpKTsKICAgYXVkaW9fYnVzLT5aZXJvQWxsRnJhbWVzKCk7CiAgIGJvb2wgc2lsZW5jZSA9IHRydWU7Ci0gIEZpbGxBdWRpb0J1c0Zyb21PbmVTb3VyY2Uoc3RkOjptb3ZlKHNyY19kYXRhKSwga0ludGVycHJldGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1cy5nZXQoKSwgJnNpbGVuY2UpOworICBGaWxsQXVkaW9CdXNGcm9tT25lU291cmNlKGVudmlyb25tZW50X3NldHRpbmdzKCksIHN0ZDo6bW92ZShzcmNfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga0ludGVycHJldGF0aW9uLCBhdWRpb19idXMuZ2V0KCksICZzaWxlbmNlKTsKICAgRVhQRUNUX0ZBTFNFKHNpbGVuY2UpOwogCiAgIGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwga051bU9mRGVzdENoYW5uZWxzOyArK2NoYW5uZWwpIHsKZGlmZiAtLWdpdCBhL2NvYmFsdC9hdWRpby9hdWRpb190ZXN0Lmd5cCBiL2NvYmFsdC9hdWRpby9hdWRpb190ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdiZDNmOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYXVkaW8vYXVkaW9fdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhdWRpb190ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXVkaW9fbm9kZV9pbnB1dF9vdXRwdXRfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhL21lZGlhLmd5cDptZWRpYScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0KLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgdGhlIGRlcGVuZGVuY3kgYmVsb3csIGl0IHdvcmtzIGFyb3VuZCB0aGUgZmFjdCB0aGF0Ci0gICAgICAgICMgICAgICAgU2NyaXB0VmFsdWVGYWN0b3J5IGhhcyBub24tdmlydHVhbCBtZXRob2QgQ3JlYXRlUHJvbWlzZSgpLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYXVkaW9fdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYXVkaW9fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdhdWRpb190ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9iYXNlL2FwcGxpY2F0aW9uX3N0YXRlLmggYi9jb2JhbHQvYmFzZS9hcHBsaWNhdGlvbl9zdGF0ZS5oCmluZGV4IGQ1MzYxODkuLmUzYzcxYzcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iYXNlL2FwcGxpY2F0aW9uX3N0YXRlLmgKKysrIGIvY29iYWx0L2Jhc2UvYXBwbGljYXRpb25fc3RhdGUuaApAQCAtMjYsNDIgKzI2LDQyIEBACiAvLyBTdGFyYm9hcmQgbGlmZWN5Y2xlIHN0YXRlcyBpbiBvcmRlciB0byBleHBsaWNpdGx5IHJlcHJlc2VudCBDb2JhbHQtc3BlY2lmaWMKIC8vIHN1YnN0YXRlcyB0aGF0IFN0YXJib2FyZCBkb2VzIG5vdCBlbmZvcmNlLgogZW51bSBBcHBsaWNhdGlvblN0YXRlIHsKKyAgLy8gVGhlIHN0YXRlIHdoZXJlIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kLCBmdWxseQorICAvLyB2aXNpYmxlLCB3aXRoIGFsbCBuZWNlc3NhcnkgZ3JhcGhpY3MgcmVzb3VyY2VzIGF2YWlsYWJsZS4gQSBwb3NzaWJsZQorICAvLyBpbml0aWFsIHN0YXRlLCB3aGVyZSBsb2FkaW5nIGhhcHBlbnMgd2hpbGUgaW4gdGhlIGZvcmVncm91bmQuCisgIGtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZCA9IDEsCisKICAgLy8gVGhlIGFwcGxpY2F0aW9uIGlzIHN0aWxsIHZpc2libGUsIGFuZCB0aGVyZWZvcmUgc3RpbGwgcmVxdWlyZXMgZ3JhcGhpY3MKICAgLy8gcmVzb3VyY2VzLCBidXQgdGhlIHdlYiBhcHBsaWNhdGlvbiBtYXkgd2lzaCB0byB0YWtlIGFjdGlvbnMgc3VjaCBhcyBwYXVzZQogICAvLyB2aWRlby4gVGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gbW92ZSBiYWNrIGludG8gdGhlIFN0YXJ0ZWQKICAgLy8gc3RhdGUgdmVyeSBxdWlja2x5LgotICBrQXBwbGljYXRpb25TdGF0ZUJsdXJyZWQsCisgIGtBcHBsaWNhdGlvblN0YXRlQmx1cnJlZCA9IDIsCiAKICAgLy8gVGhlIHN0YXRlIHdoZXJlIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIG9uIHRoZSBiYWNrZ3JvdW5kLCBidXQgdGhlCiAgIC8vIGJhY2tncm91bmQgdGFza3MgYXJlIHN0aWxsIHJ1bm5pbmcsIHN1Y2ggYXMgYXVkaW8gcGxheWJhY2ssIG9yIHVwZGF0aW5nCiAgIC8vIG9mIHJlY29tbWVuZGF0aW9ucy4gVGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gbW92ZSBiYWNrCiAgIC8vIGludG8gdGhlIEJsdXJyZWQgc3RhdGUgdmVyeSBxdWlja2x5LgotICBrQXBwbGljYXRpb25TdGF0ZUNvbmNlYWxlZCwKKyAga0FwcGxpY2F0aW9uU3RhdGVDb25jZWFsZWQgPSAzLAogCiAgIC8vIFRoZSBhcHBsaWNhdGlvbiB3YXMgc3RvcHBlZCB0byB0aGUgcG9pbnQgd2hlcmUgZ3JhcGhpY3MgYW5kIHZpZGVvIHJlc291cmNlcwogICAvLyBhcmUgaW52YWxpZCBhbmQgZXhlY3V0aW9uIHNob3VsZCBiZSBoYWx0ZWQgdW50aWwgcmVzdW1wdGlvbi4KLSAga0FwcGxpY2F0aW9uU3RhdGVGcm96ZW4sCi0KLSAgLy8gVGhlIHN0YXRlIHdoZXJlIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kLCBmdWxseQotICAvLyB2aXNpYmxlLCB3aXRoIGFsbCBuZWNlc3NhcnkgZ3JhcGhpY3MgcmVzb3VyY2VzIGF2YWlsYWJsZS4gQSBwb3NzaWJsZQotICAvLyBpbml0aWFsIHN0YXRlLCB3aGVyZSBsb2FkaW5nIGhhcHBlbnMgd2hpbGUgaW4gdGhlIGZvcmVncm91bmQuCi0gIGtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZCwKKyAga0FwcGxpY2F0aW9uU3RhdGVGcm96ZW4gPSA0LAogCiAgIC8vIFJlcHJlc2VudGF0aW9uIG9mIGEgaWRsZS90ZXJtaW5hbC9zaHV0ZG93biBzdGF0ZSB3aXRoIG5vIHJlc291cmNlcy4KLSAga0FwcGxpY2F0aW9uU3RhdGVTdG9wcGVkLAorICBrQXBwbGljYXRpb25TdGF0ZVN0b3BwZWQgPSA1LAogfTsKIAogLy8gUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBmb3IgdGhlIGdpdmVuIHxzdGF0ZXwuCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKkdldEFwcGxpY2F0aW9uU3RhdGVTdHJpbmcoQXBwbGljYXRpb25TdGF0ZSBzdGF0ZSkgewogICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBrQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQ6CisgICAgICByZXR1cm4gImtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZCI7CiAgICAgY2FzZSBrQXBwbGljYXRpb25TdGF0ZUJsdXJyZWQ6CiAgICAgICByZXR1cm4gImtBcHBsaWNhdGlvblN0YXRlQmx1cnJlZCI7CiAgICAgY2FzZSBrQXBwbGljYXRpb25TdGF0ZUNvbmNlYWxlZDoKICAgICAgIHJldHVybiAia0FwcGxpY2F0aW9uU3RhdGVDb25jZWFsZWQiOwogICAgIGNhc2Uga0FwcGxpY2F0aW9uU3RhdGVGcm96ZW46CiAgICAgICByZXR1cm4gImtBcHBsaWNhdGlvblN0YXRlRnJvemVuIjsKLSAgICBjYXNlIGtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZDoKLSAgICAgIHJldHVybiAia0FwcGxpY2F0aW9uU3RhdGVTdGFydGVkIjsKICAgICBjYXNlIGtBcHBsaWNhdGlvblN0YXRlU3RvcHBlZDoKICAgICAgIHJldHVybiAia0FwcGxpY2F0aW9uU3RhdGVTdG9wcGVkIjsKICAgfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jhc2UvYmFzZS5neXAgYi9jb2JhbHQvYmFzZS9iYXNlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIwYTM5Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYmFzZS9iYXNlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYmFzZScsCi0gICAgICAjIE92ZXJyaWRlIGxpYnJhcnkgbmFtZSwgdG8gYXZvaWQgY29uZmxpY3Rpbmcgd2l0aCBDaHJvbWl1bSBiYXNlIHdoZW4KLSAgICAgICMgZ2VuZXJhdGluZyBQREJzLgotICAgICAgJ3Byb2R1Y3RfbmFtZSc6ICdjb2JhbHRfYmFzZScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsiQ09CQUxUX0VOQUJMRV9WRVJTSU9OX0NPTVBBVElCSUxJVFlfVkFMSURBVElPTlM9MSJdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAnZGVmaW5lcyc6IFsiQ09CQUxUX0VOQUJMRV9WRVJTSU9OX0NPTVBBVElCSUxJVFlfVkFMSURBVElPTlM9MSJdLAotICAgICAgfSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYWNjZXNzaWJpbGl0eV9jYXB0aW9uX3NldHRpbmdzX2NoYW5nZWRfZXZlbnQuaCcsCi0gICAgICAgICdhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2NoYW5nZWRfZXZlbnQuaCcsCi0gICAgICAgICdhY2Nlc3NpYmlsaXR5X3RleHRfdG9fc3BlZWNoX3NldHRpbmdzX2NoYW5nZWRfZXZlbnQuaCcsCi0gICAgICAgICdhZGRyZXNzX3Nhbml0aXplci5oJywKLSAgICAgICAgJ2NhbWVyYV90cmFuc2Zvcm0uaCcsCi0gICAgICAgICdjaXJjdWxhcl9idWZmZXJfc2hlbGwuY2MnLAotICAgICAgICAnY2lyY3VsYXJfYnVmZmVyX3NoZWxsLmgnLAotICAgICAgICAnY2xvY2suaCcsCi0gICAgICAgICdjb2JhbHRfcGF0aHMuaCcsCi0gICAgICAgICdjb21waWxlci5oJywKLSAgICAgICAgJ2NvbnNvbGVfbG9nLmgnLAotICAgICAgICAnY192YWwuY2MnLAotICAgICAgICAnY192YWwuaCcsCi0gICAgICAgICdjX3ZhbF9jb2xsZWN0aW9uX2VudHJ5X3N0YXRzLmgnLAotICAgICAgICAnY192YWxfY29sbGVjdGlvbl90aW1lcl9zdGF0cy5oJywKLSAgICAgICAgJ2NfdmFsX3RpbWVfaW50ZXJ2YWxfZW50cnlfc3RhdHMuaCcsCi0gICAgICAgICdjX3ZhbF90aW1lX2ludGVydmFsX3RpbWVyX3N0YXRzLmgnLAotICAgICAgICAnZGF0ZV90aW1lX2NvbmZpZ3VyYXRpb25fY2hhbmdlZF9ldmVudC5oJywKLSAgICAgICAgJ2RlZXBfbGlua19ldmVudC5oJywKLSAgICAgICAgJ2RvX21haW4uaCcsCi0gICAgICAgICdkb19tYWluX3N0YXJib2FyZC5oJywKLSAgICAgICAgJ2V2ZW50LmgnLAotICAgICAgICAnZXZlbnRfZGlzcGF0Y2hlci5jYycsCi0gICAgICAgICdldmVudF9kaXNwYXRjaGVyLmgnLAotICAgICAgICAnZ2V0X2FwcGxpY2F0aW9uX2tleS5jYycsCi0gICAgICAgICdnZXRfYXBwbGljYXRpb25fa2V5LmgnLAotICAgICAgICAnaW5pdF9jb2JhbHQuY2MnLAotICAgICAgICAnaW5pdF9jb2JhbHQuaCcsCi0gICAgICAgICdsYW5ndWFnZS5jYycsCi0gICAgICAgICdsYW5ndWFnZS5oJywKLSAgICAgICAgJ2xvY2FsaXplZF9zdHJpbmdzLmNjJywKLSAgICAgICAgJ2xvY2FsaXplZF9zdHJpbmdzLmgnLAotICAgICAgICAnbG9nX21lc3NhZ2VfaGFuZGxlci5jYycsCi0gICAgICAgICdsb2dfbWVzc2FnZV9oYW5kbGVyLmgnLAotICAgICAgICAnbWF0aC5oJywKLSAgICAgICAgJ21lc3NhZ2VfcXVldWUuaCcsCi0gICAgICAgICdvbl9zY3JlZW5fa2V5Ym9hcmRfaGlkZGVuX2V2ZW50LmgnLAotICAgICAgICAnb25fc2NyZWVuX2tleWJvYXJkX3Nob3duX2V2ZW50LmgnLAotICAgICAgICAncGF0aF9wcm92aWRlci5jYycsCi0gICAgICAgICdwYXRoX3Byb3ZpZGVyLmgnLAotICAgICAgICAncG9sbGVyLmgnLAotICAgICAgICAncG9seW1vcnBoaWNfZG93bmNhc3QuaCcsCi0gICAgICAgICdwb2x5bW9ycGhpY19lcXVhdGFibGUuaCcsCi0gICAgICAgICdyZWZfY291bnRlZF9sb2NrLmgnLAotICAgICAgICAnc291cmNlX2xvY2F0aW9uLmNjJywKLSAgICAgICAgJ3NvdXJjZV9sb2NhdGlvbi5oJywKLSAgICAgICAgJ3N0YXJ0dXBfdGltZXIuY2MnLAotICAgICAgICAnc3RhcnR1cF90aW1lci5oJywKLSAgICAgICAgJ3N0b3Bfd2F0Y2guY2MnLAotICAgICAgICAnc3RvcF93YXRjaC5oJywKLSAgICAgICAgJ3Rva2VuLmNjJywKLSAgICAgICAgJ3Rva2VuLmgnLAotICAgICAgICAndG9rZW5zLmNjJywKLSAgICAgICAgJ3Rva2Vucy5oJywKLSAgICAgICAgJ3R5cGVfaWQuaCcsCi0gICAgICAgICd3aW5kb3dfc2l6ZV9jaGFuZ2VkX2V2ZW50LmgnLAotICAgICAgICAndW5pY29kZS9jaGFyYWN0ZXIuY2MnLAotICAgICAgICAndW5pY29kZS9jaGFyYWN0ZXIuaCcsCi0gICAgICAgICd1bmljb2RlL2NoYXJhY3Rlcl92YWx1ZXMuaCcsCi0gICAgICAgICd1bnVzZWQuaCcsCi0gICAgICAgICd2ZXJzaW9uX2NvbXBhdGliaWxpdHkuY2MnLAotICAgICAgICAndmVyc2lvbl9jb21wYXRpYmlsaXR5LmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlX2kxOG4nLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlieG1sL2xpYnhtbC5neXA6bGlieG1sJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlieG1sL3NyYy9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Jhc2VfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NpcmN1bGFyX2J1ZmZlcl9zaGVsbF91bml0dGVzdC5jYycsCi0gICAgICAgICdjX3ZhbF9jb2xsZWN0aW9uX2VudHJ5X3N0YXRzX3Rlc3QuY2MnLAotICAgICAgICAnY192YWxfY29sbGVjdGlvbl90aW1lcl9zdGF0c190ZXN0LmNjJywKLSAgICAgICAgJ2NfdmFsX3Rlc3QuY2MnLAotICAgICAgICAnY192YWxfdGltZV9pbnRlcnZhbF9lbnRyeV9zdGF0c190ZXN0LmNjJywKLSAgICAgICAgJ2NfdmFsX3RpbWVfaW50ZXJ2YWxfdGltZXJfc3RhdHNfdGVzdC5jYycsCi0gICAgICAgICd0b2tlbl90ZXN0LmNjJywKLSAgICAgICAgJ2ZpeGVkX3NpemVfbHJ1X2NhY2hlX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYmFzZV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdiYXNlX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnYmFzZV90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9iYXNlL3Rva2VuLmNjIGIvY29iYWx0L2Jhc2UvdG9rZW4uY2MKaW5kZXggODI1Y2I1MC4uNzc3MzU5NSAxMDA2NDQKLS0tIGEvY29iYWx0L2Jhc2UvdG9rZW4uY2MKKysrIGIvY29iYWx0L2Jhc2UvdG9rZW4uY2MKQEAgLTg5LDYgKzg5LDcgQEAKIAogICB1aW50MzIgc2xvdCA9IGhhc2goc3RyKSAlIFRva2VuOjprSGFzaFNsb3RDb3VudDsKICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIHRoaXMgdG9rZW4uCisgIC8vIE1vc3QgY29tbW9uIHBhdGgsIHNvIGxvY2sgZnJlZS4KICAgZm9yICh1aW50MzIgaSA9IDA7IGkgPCBUb2tlbjo6a1N0cmluZ3NQZXJTbG90OyArK2kpIHsKICAgICB1aW50MzIgaW5kZXggPSBzbG90ICogVG9rZW46OmtTdHJpbmdzUGVyU2xvdCArIGk7CiAgICAgaWYgKGhhc2hfdGFibGVfW2luZGV4XS5lbXB0eSgpKSB7CkBAIC0xMDEsMTIgKzEwMiwxNyBAQAogCiAgIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7CiAgIC8vIE5vdyB0cnkgdG8gY3JlYXRlIHRoaXMgdG9rZW4gaW4gdGhlIHRhYmxlLgorICAvLyBBbHNvIGNoZWNrIGFnYWluIGlmIHRoZSB0b2tlbiBleGlzdHMgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBsb2NrLCBiZWNhdXNlCisgIC8vIGFub3RoZXIgdGhyZWFkIG1heSBoYXZlIGFkZGVkIGl0IGJlZm9yZSB3ZSBhY3F1aXJlZCB0aGUgbG9jay4KICAgZm9yICh1aW50MzIgaSA9IDA7IGkgPCBUb2tlbjo6a1N0cmluZ3NQZXJTbG90OyArK2kpIHsKICAgICB1aW50MzIgaW5kZXggPSBzbG90ICogVG9rZW46OmtTdHJpbmdzUGVyU2xvdCArIGk7CiAgICAgaWYgKGhhc2hfdGFibGVfW2luZGV4XS5lbXB0eSgpKSB7CiAgICAgICBoYXNoX3RhYmxlX1tpbmRleF0gPSBzdHI7CiAgICAgICByZXR1cm4gaGFzaF90YWJsZV9baW5kZXhdLmNfc3RyKCk7CiAgICAgfQorICAgIGlmIChoYXNoX3RhYmxlX1tpbmRleF0gPT0gc3RyKSB7CisgICAgICByZXR1cm4gaGFzaF90YWJsZV9baW5kZXhdLmNfc3RyKCk7CisgICAgfQogICB9CiAKICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIHByb2R1Y3Rpb24gYXMgd2UgdXNlIGEgcXVpdGUgbGFyZ2UgYmluIHNpemUKZGlmZiAtLWdpdCBhL2NvYmFsdC9iYXNlL3Rva2Vucy5oIGIvY29iYWx0L2Jhc2UvdG9rZW5zLmgKaW5kZXggMzA3N2MyYy4uOTU0YjQ0MSAxMDA2NDQKLS0tIGEvY29iYWx0L2Jhc2UvdG9rZW5zLmgKKysrIGIvY29iYWx0L2Jhc2UvdG9rZW5zLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGNsaWNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGNsb3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGNvbXBsZXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGNvbnRyb2xsZXJjaGFuZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGRhdGFhdmFpbGFibGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGRldmljZW9yaWVudGF0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGR1cmF0aW9uY2hhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY1LDYgKzY2LDcgQEAKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGtleXByZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGtleXN0YXR1c2VzY2hhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGtleXVwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGxhbmd1YWdlY2hhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGxvYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGxvYWRlZGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGxvYWRlZG1ldGFkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTc0LDYgKzc2LDcgQEAKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KGxvc3Rwb2ludGVyY2FwdHVyZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1hcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1lc3NhZ2VlcnJvcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1vdXNlZG93bikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1vdXNlZW50ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBNYWNyb09wV2l0aE5hbWVPbmx5KG1vdXNlbGVhdmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwMSw2ICsxMDQsNyBAQAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmF0ZWNoYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVhZHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVhZHlzdGF0ZWNoYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVqZWN0aW9uaGFuZGxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVtb3ZhbHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVtb3Zlc291cmNlYnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkocmVtb3ZldHJhY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTE5LDYgKzEyMyw3IEBACiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzb3VyY2VlbmRlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzb3VyY2VvcGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzdGFydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTWFjcm9PcFdpdGhOYW1lT25seShzdGF0ZWNoYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzdG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzdG9yYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWFjcm9PcFdpdGhOYW1lT25seShzdGFsbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMjgsMTAgKzEzMywxMiBAQAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodGltZW91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodGltZXVwZGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodHJhbnNpdGlvbmVuZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodW5oYW5kbGVkcmVqZWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodW5sb2FkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodXBkYXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodXBkYXRlZW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodXBkYXRlc3RhcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodXBkYXRlZm91bmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodmlzaWJpbGl0eWNoYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodm9pY2VzY2hhbmdlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIE1hY3JvT3BXaXRoTmFtZU9ubHkodm9sdW1lY2hhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvY29iYWx0L2Jhc2Uvd3JhcF9tYWluX3N0YXJib2FyZC5oIGIvY29iYWx0L2Jhc2Uvd3JhcF9tYWluX3N0YXJib2FyZC5oCmluZGV4IDc5NTI0YjQuLjRkNGJkNzQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iYXNlL3dyYXBfbWFpbl9zdGFyYm9hcmQuaAorKysgYi9jb2JhbHQvYmFzZS93cmFwX21haW5fc3RhcmJvYXJkLmgKQEAgLTU2LDcgKzU2LDcgQEAKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgICAgcHJlbG9hZF9mdW5jdGlvbihkYXRhLT5hcmd1bWVudF9jb3VudCwgZGF0YS0+YXJndW1lbnRfdmFsdWVzLCBkYXRhLT5saW5rLAogICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZTYlN5c3RlbVJlcXVlc3RTdG9wLCAwKSwgZXZlbnQtPnRpbWVzdGFtcCk7Ci0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgICAgIHByZWxvYWRfZnVuY3Rpb24oZGF0YS0+YXJndW1lbnRfY291bnQsIGRhdGEtPmFyZ3VtZW50X3ZhbHVlcywgZGF0YS0+bGluaywKICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmU2JTeXN0ZW1SZXF1ZXN0U3RvcCwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZUdldE1vbm90b25pY05vdygpKTsKQEAgLTgyLDcgKzgyLDcgQEAKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgICAgc3RhcnRfZnVuY3Rpb24oZGF0YS0+YXJndW1lbnRfY291bnQsIGRhdGEtPmFyZ3VtZW50X3ZhbHVlcywgZGF0YS0+bGluaywKICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJlNiU3lzdGVtUmVxdWVzdFN0b3AsIDApLCBldmVudC0+dGltZXN0YW1wKTsKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMworI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgICAgc3RhcnRfZnVuY3Rpb24oZGF0YS0+YXJndW1lbnRfY291bnQsIGRhdGEtPmFyZ3VtZW50X3ZhbHVlcywgZGF0YS0+bGluaywKICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJlNiU3lzdGVtUmVxdWVzdFN0b3AsIDApLAogICAgICAgICAgICAgICAgICAgICAgU2JUaW1lR2V0TW9ub3RvbmljTm93KCkpOwpAQCAtMTMyLDI0ICsxMzIsMTcgQEAKICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgICBjYXNlIGtTYkV2ZW50VHlwZUxvd01lbW9yeToKICAgICBjYXNlIGtTYkV2ZW50VHlwZVdpbmRvd1NpemVDaGFuZ2VkOgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgY2FzZSBrU2JFdmVudFR5cGVPblNjcmVlbktleWJvYXJkU2hvd246CiAgICAgY2FzZSBrU2JFdmVudFR5cGVPblNjcmVlbktleWJvYXJkSGlkZGVuOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlT25TY3JlZW5LZXlib2FyZEZvY3VzZWQ6CiAgICAgY2FzZSBrU2JFdmVudFR5cGVPblNjcmVlbktleWJvYXJkQmx1cnJlZDoKICAgICBjYXNlIGtTYkV2ZW50VHlwZU9uU2NyZWVuS2V5Ym9hcmRTdWdnZXN0aW9uc1VwZGF0ZWQ6Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICAgIGNhc2Uga1NiRXZlbnRUeXBlQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5nc0NoYW5nZWQ6Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgICAgY2FzZSBrU2JFdmVudFR5cGVBY2Nlc3NpYmlsaXR5VGV4dFRvU3BlZWNoU2V0dGluZ3NDaGFuZ2VkOgogI2Vsc2UKICAgICBjYXNlIGtTYkV2ZW50VHlwZUFjY2Vzc2libGl0eVRleHRUb1NwZWVjaFNldHRpbmdzQ2hhbmdlZDoKICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlT3NOZXR3b3JrRGlzY29ubmVjdGVkOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlT3NOZXR3b3JrQ29ubmVjdGVkOgpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL19lbnYucHkgYi9jb2JhbHQvYmluZGluZ3MvX2Vudi5weQppbmRleCA4ODQ0ZTJjLi40YjcwNWMyIDEwMDY0NAotLS0gYS9jb2JhbHQvYmluZGluZ3MvX2Vudi5weQorKysgYi9jb2JhbHQvYmluZGluZ3MvX2Vudi5weQpAQCAtMTMsMjkgKzEzLDIyIEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKKyIiIlNldHMgUFlUSE9OUEFUSCBmb3IgdGhpcmRfcGFydHkvYmxpbmsgbW9kdWxlcyB0byB3b3JrIGNvcnJlY3RseS4iIiIKIAotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1pbXBvcnQgb3MKIGZyb20gb3MgaW1wb3J0IHBhdGgKIGltcG9ydCBzeXMKIAotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQorX1JFUE9fUk9PVCA9IHBhdGguYWJzcGF0aCgKKyAgICBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsIHBhdGgucGFyZGlyKSkKK19CTElOS19QQVRIUyA9IFsKKyAgICBwYXRoLmpvaW4oX1JFUE9fUk9PVCwgJ3RoaXJkX3BhcnR5JywgJ2JsaW5rJywgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwKKyAgICBwYXRoLmpvaW4oX1JFUE9fUk9PVCwgJ3RoaXJkX3BhcnR5JywgJ2JsaW5rJywgJ1NvdXJjZScsICdiaW5kaW5ncycsCisgICAgICAgICAgICAgICdzY3JpcHRzJyksCitdCiAKLSMgQWRkIGJsaW5rJ3MgUHl0aG9uIHRvb2xzIHRvIHRoZSBwYXRoLgoraWYgX1JFUE9fUk9PVCBub3QgaW4gc3lzLnBhdGg6CisgIHN5cy5wYXRoLmluc2VydCgwLCBfUkVQT19ST09UKQogCi1mcm9tIGNvYmFsdC50b29scyBpbXBvcnQgcGF0aHMgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLQotc3lzLnBhdGguYXBwZW5kKAotICAgIG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgIG9zLnBhdGguam9pbihwYXRocy5SRVBPU0lUT1JZX1JPT1QsICd0aGlyZF9wYXJ0eScsICdibGluaycsICdUb29scycsCi0gICAgICAgICAgICAgICAgICAgICAnU2NyaXB0cycpKSkKLQotc3lzLnBhdGguYXBwZW5kKAotICAgIG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgIG9zLnBhdGguam9pbihwYXRocy5SRVBPU0lUT1JZX1JPT1QsICd0aGlyZF9wYXJ0eScsICdibGluaycsICdTb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgJ2JpbmRpbmdzJywgJ3NjcmlwdHMnKSkpCitmb3IgcGF0aCBpbiBfQkxJTktfUEFUSFM6CisgIGlmIHBhdGggbm90IGluIHN5cy5wYXRoOgorICAgIHN5cy5wYXRoLmFwcGVuZChwYXRoKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2JpbmRpbmdzLmd5cGkgYi9jb2JhbHQvYmluZGluZ3MvYmluZGluZ3MuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzM2E2NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYmluZGluZ3MvYmluZGluZ3MuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU3NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgaW5jbHVkZWQgaW50byBhbm90aGVyIC5neXAgZmlsZSB0aGF0IHdpbGwgaGF2ZQotIyBhIG51bWJlciBvZiB2YXJpYWJsZXMgZGVmaW5lZCwgd2hpY2ggd2lsbCBkcml2ZSB0aGUgYmluZGluZ3MgZ2VuZXJhdGlvbgotIyB0YXJnZXRzIGJlbG93LiBBIC5neXAgZmlsZSB0aGF0IGluY2x1ZGVzIHRoaXMgc2hvdWxkIGRlcGVuZCBvbiB0aGUgJ2JpbmRpbmdzJwotIyB0YXJnZXQgd2hpY2ggd2lsbCBiZSBkZWZpbmVkIGluIHRoaXMgZ3lwIGZpbGUuCi0jCi0jIElucHV0IHZhcmlhYmxlczoKLSMgICBzb3VyY2VfaWRsX2ZpbGVzOiBBbGwgSURMIGZpbGVzIGZvciB3aGljaCBhIGJpbmRpbmdzIHdyYXBwZXIgc2hvdWxkIGJlCi0jICAgICAgIGNyZWF0ZWQuCi0jICAgZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXM6IElETCBmaWxlcyBmb3IgSURMIGRpY3Rpb25hcmllcyBhbmQgSURMIGVudW1zLiBBCi0jICAgICAgIGhlYWRlciB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhlc2UgdGhhdCBjYW4gYmUgI2luY2x1ZGVkIGluCi0jICAgZGVwZW5kZW5jeV9pZGxfZmlsZXM6IElETCBmaWxlcyB0aGF0IGFyZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgSURMcywgYnV0IG5vCi0jICAgICAgIGJpbmRpbmdzIHdyYXBwZXIgd2lsbCBiZSBjcmVhdGVkLiBGb3IgZXhhbXBsZSwgcGFydGlhbCBpbnRlcmZhY2VzIGFuZAotIyAgICAgICB0aGUgcmlnaHQtaGFuZC1zaWRlIG9mIGltcGxlbWVudHMgc3RhdGVtZW50cy4KLSMKLSMgT3RoZXIgdmFyaWFibGVzLCBzdWNoIGFzIGJpbmRpbmdzX2RlZmluZXMsIGNhbiBiZSBzZXQgaW4gdGhlIGluY2x1ZGluZyAuZ3lwCi0jIGZpbGUgdG8gYWZmZWN0IGhvdyB0aGUgYmluZGluZ3MgYXJlIGJ1aWx0LiBTZWUgY29tbWVudHMgaW4gdGhlIHZhcmlhYmxlcwotIyBzZWN0aW9uIGJlbG93LgotIwotIyBPdXRwdXQ6Ci0jICAgZ2VuZXJhdGVkX2JpbmRpbmdzOiBBIGd5cCB0YXJnZXQgdGhhdCB3aWxsIGdlbmVyYXRlIGFsbCBiaW5kaW5ncyBzb3VyY2UKLSMgICAgICAgZmlsZXMuIEF0IG1vc3Qgb25lIHRhcmdldCBjYW4gZGVjbGFyZSBnZW5lcmF0ZWRfYmluZGluZ3MgYXMgYQotIyAgICAgICBkZXBlbmRlbmN5LiBUaGUgdGFyZ2V0IHRoYXQgZGVwZW5kcyBvbiBnZW5lcmF0ZWRfYmluZGluZ3Mgd2lsbCBjb21waWxlCi0jICAgICAgIHRoZSBnZW5lcmF0ZWQgc291cmNlcywgc2luY2UgZ2VuZXJhdGVkX2JpbmRpbmdzIHdpbGwgZXhwb3J0IHRoZSByZXF1aXJlZAotIyAgICAgICBneXAgdmFyaWFibGVzIHRvIGl0cyBkZXBlbmRlbnQuCi0jCi0jIEJhc2ljIGZsb3cgb2YgZGF0YToKLSMgICBbQWxsIFN0YXRpYyBmaWxlc10gLT4gR2xvYmFsT2JqZWN0c1BpY2tsZQotIyAgICAgLSBHbG9iYWxPYmplY3RzUGlja2xlIGlzIGEgcHl0aG9uIHBpY2tsZSBvZiBhbGwgaW50ZXJmYWNlcyB3aXRoIHRoZSBHbG9iYWwKLSMgICAgICAgb3IgUHJpbWFyeUdsb2JhbCBleHRlbmRlZCBhdHRyaWJ1dGUKLSMgICBHbG9iYWxPYmplY3RzUGlja2xlIC0+IEdsb2JhbENvbnN0cnVjdG9ycy5pZGwKLSMgICAgIC0gR2xvYmFsQ29uc3RydWN0b3JzLmlkbCBkZWZpbmVzIGEgcGFydGlhbCBpbnRlcmZhY2UgdGhhdCBleHBvc2VzIGFsbCBvZgotIyAgICAgICB0aGUgaW50ZXJmYWNlcyBJbnRlcmZhY2UgT2JqZWN0cywgYWxzbyBrbm93biBhcyBjb25zdHJ1Y3RvcnMuCi0jICAgW0FsbCBTdGF0aWMgYW5kIEdlbmVyYXRlZCBJREwgZmlsZXNdIC0+IEludGVyZmFjZXNJbmZvQ29tcG9uZW50LnBpY2tsZQotIyAgICAgLSBQcmVwcm9jZXNzZWQgaW50ZXJmYWNlIGRhdGEgZnJvbSB0aGUgSURMcwotIyAgICAgLSBJbiBCbGluaywgdGhpcyBpcyBwZXItY29tcG9uZW50LCBidXQgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBjb21wb25lbnRzCi0jICAgICAgIGluIENvYmFsdCBhdCB0aGlzIHBvaW50LgotIyAgIFtJbnRlcmZhY2VzSW5mb0NvbXBvbmVudC5waWNrbGVdIC0+IEludGVyZmFjZXNJbmZvT3ZlcmFsbC5waWNrbGUKLSMgICAgIC0gUGlja2xlcyBmb3IgYWxsIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIGludG8gYSBnbG9iYWwgcGlja2xlIHRoYXQgY292ZXJzCi0jICAgICAgIGFsbCBpbnRlcmZhY2VzIGFjcm9zcyBhbGwgbW9kdWxlcy4KLSMgICBJbnRlcmZhY2VzSW5mb092ZXJhbGwucGlja2xlIC0+IFtCaW5kaW5ncyBmb3IgYWxsIGludGVyZmFjZXNdCi0jCi0jIFRoaXMgaXMgYnVpbHQgYW5kIGJhc2VkIG9uIHRoZSBmbG93IGZvciBCbGluaydzIElETCBwYXJzaW5nIGFuZCBjb2RlCi0jIGdlbmVyYXRpb24gcGlwZWxpbmU6Ci0jIGh0dHA6Ly93d3cuY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy9pZGwtYnVpbGQKLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIEdldCB0aGUgZW5naW5lIHZhcmlhYmxlcyBhbmQgYmxpbmsncyB2YXJpYWJsZXMgYW5kIHB1bGwgdGhlbSBvdXQgdG8gdGhpcwotICAgICMgJ3ZhcmlhYmxlcycgc2NvcGUgc28gd2UgY2FuIHVzZSB0aGVtIGluIHRoaXMgZmlsZS4KLSAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAnLi4vc2NyaXB0L2VuZ2luZV92YXJpYWJsZXMuZ3lwaScsCi0gICAgICAnLi4vLi4vdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvc2NyaXB0cy5neXBpJywKLSAgICBdLAotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAjIFNwZWNpZnkgYSBkZWZhdWx0IGNvbXBvbmVudCBmb3IgZ2VuZXJhdGVkIHdpbmRvdyBJREwuIFRoaXMgc2hvdWxkIGJlCi0gICAgICAjIHJlbW92ZWQgd2hlbiB0aGUgY29uY2VwdCBvZiAnY29tcG9uZW50cycgaW4gdGhlIGJsaW5rIElETCBwYXJzaW5nIHNjcmlwdHMKLSAgICAgICMgaXMgcmVmYWN0b3JlZCBvdXQsIHNpbmNlIGl0IGRvZXNuJ3QgcmVhbGx5IGFwcGx5IHRvIENvYmFsdC4KLSAgICAgICd3aW5kb3dfY29tcG9uZW50JSc6ICdkb20nLAotICAgIH0sCi0KLSAgICAjIERlZmluZSB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIGluY2x1ZGluZyAuZ3lwIGZpbGUgYW5kIHRoZWlyIGxpc3RzIHdpbGwgZ2V0Ci0gICAgIyBtZXJnZWQgaW4sIGdpdmluZyBzb21lIGNvbnRyb2wgdG8gaG93IHRoZSBiaW5kaW5ncyBhcmUgYnVpbHQuCi0gICAgJ2JpbmRpbmdzX2RlZmluZXMnOiBbJzxAKGVuZ2luZV9kZWZpbmVzKSddLAotICAgICdiaW5kaW5nc19kZXBlbmRlbmNpZXMnOiBbJzxAKGVuZ2luZV9kZXBlbmRlbmNpZXMpJ10sCi0gICAgJ2JpbmRpbmdzX2luY2x1ZGVfZGlycyc6IFsnPEAoZW5naW5lX2luY2x1ZGVfZGlycyknXSwKLSAgICAnYmluZGluZ3NfdGVtcGxhdGVzX2Rpcic6ICc8KGVuZ2luZV90ZW1wbGF0ZXNfZGlyKScsCi0gICAgJ2lkbF9jb21waWxlcl9zY3JpcHQnOiAnPChlbmdpbmVfaWRsX2NvbXBpbGVyKScsCi0gICAgJ2NvbnZlcnNpb25faGVhZGVyX2dlbmVyYXRvcl9zY3JpcHQnOiAnPChlbmdpbmVfY29udmVyc2lvbl9oZWFkZXJfZ2VuZXJhdG9yX3NjcmlwdCknLAotCi0gICAgIyBUZW1wbGF0ZXMgdGhhdCBhcmUgc2hhcmVkIGJ5IHRoZSBjb2RlIGdlbmVyYXRpb24gZm9yIG11bHRpcGxlIGVuZ2luZXMuCi0gICAgJ3NoYXJlZF90ZW1wbGF0ZV9maWxlcyc6IFsKLSAgICAgICd0ZW1wbGF0ZXMvZGljdGlvbmFyeS5oLnRlbXBsYXRlJywKLSAgICAgICd0ZW1wbGF0ZXMvaW50ZXJmYWNlLWJhc2UuY2MudGVtcGxhdGUnLAotICAgICAgJ3RlbXBsYXRlcy9pbnRlcmZhY2UtYmFzZS5oLnRlbXBsYXRlJywKLSAgICAgICd0ZW1wbGF0ZXMvY2FsbGJhY2staW50ZXJmYWNlLWJhc2UuY2MudGVtcGxhdGUnLAotICAgICAgJ3RlbXBsYXRlcy9jYWxsYmFjay1pbnRlcmZhY2UtYmFzZS5oLnRlbXBsYXRlJywKLSAgICBdLAotCi0gICAgIyBUaGUgZm9sbG93aW5nIGxpc3RzIG9mIElETCBmaWxlcyBzaG91bGQgYmUgc2V0IGluIHRoZSBpbmNsdWRpbmcgLmd5cCBmaWxlLgotCi0gICAgIyBCaW5kaW5ncyBmb3IgdGhlIGludGVyZmFjZXMgaW4gdGhpcyBsaXN0IHdpbGwgYmUgZ2VuZXJhdGVkLCBhbmQgdGhlcmUgbXVzdAotICAgICMgYmUgYW4gaW1wbGVtZW50YXRpb24gZGVjbGFyZWQgaW4gYSBoZWFkZXIgdGhhdCBsaXZlcyBpbiB0aGUgc2FtZQotICAgICMgZGlyZWN0b3J5IG9mIGVhY2ggSURMLgotICAgICdzb3VyY2VfaWRsX2ZpbGVzJzogW10sCi0KLSAgICAjIEZvciBlYWNoIElETCBmaWxlIGluIHRoaXMgbGlzdCwgYSBoZWFkZXIgZmlsZSB0aGF0IGNhbiBiZSAjaW5jbHVkZWQgaW4KLSAgICAjIENvYmFsdCB3aWxsIGJlIGdlbmVyYXRlZCwgYXMgd2VsbCBhcyBhIC5jYyBmaWxlIHRoYXQgaW1wbGVtZW50cyB0aGUKLSAgICAjIGNvbnZlcnNpb24gdG8vZnJvbSBhIEpTIHZhbHVlLgotICAgICdnZW5lcmF0ZWRfaGVhZGVyX2lkbF9maWxlcyc6IFtdLAotCi0gICAgIyBQYXJ0aWFsIGludGVyZmFjZXMgYW5kIHRoZSByaWdodC1zaWRlIG9mICJpbXBsZW1lbnRzIgotICAgICMgQ29kZSB3aWxsIG5vdCBnZXQgZ2VuZXJhdGVkIGZvciB0aGVzZSBpbnRlcmZhY2VzOyB0aGV5IGFyZSB1c2VkIHRvIGFkZAotICAgICMgZnVuY3Rpb25hbGl0eSB0byBvdGhlciBpbnRlcmZhY2VzLgotICAgICdkZXBlbmRlbmN5X2lkbF9maWxlcyc6IFtdLAotCi0gICAgIyBCaW5kaW5ncyBmb3IgdGhlc2Ugd2lsbCBub3QgYmUgZ2VuZXJhdGVkLCBidXQgYXR0ZW1wdHMgdG8gYWNjZXNzIHRoZWlyCi0gICAgIyBDb25zdHJ1Y3RvcnMgd2lsbCBiZSBhbiBldmVudCBpbiB0aGUgdW5zdXBwb3J0ZWQgcHJvcGVydHkgbWVjaGFuaXNtLgotICAgICd1bnN1cHBvcnRlZF9pbnRlcmZhY2VfaWRsX2ZpbGVzJzogW10sCi0KLSAgICAnd2luZG93X2NvbXBvbmVudCUnOiAnPCh3aW5kb3dfY29tcG9uZW50KScsCi0KLSAgICAncHJlZml4JzogJzwoZ2VuZXJhdGVkX2JpbmRpbmdzX3ByZWZpeCknLAotCi0gICAgIyBUaGUgbG9jYXRpb24gb2YgYmxpbmsncyBiaW5kaW5ncyBzY3JpcHRzLCBzdWNoIGFzIGlkbF9jb21waWxlci5weQotICAgICdiaW5kaW5nc19zY3JpcHRzX2Rpcic6ICc8KGJpbmRpbmdzX3NjcmlwdHNfZGlyKScsCi0KLSAgICAjIFBMWSwgV2ViIElETCBwYXJzZXIsIGFuZCBCbGluayBJREwgcGFyc2VyIHNvdXJjZXMKLSAgICAnaWRsX2xleGVyX3BhcnNlcl9maWxlcyc6IFsnPEAoaWRsX2xleGVyX3BhcnNlcl9maWxlcyknXSwKLQotICAgICMgSmluamEgYnl0ZWNvZGUgY2FjaGUsIFBMWSBsZXgvcGFyc2UgdGFibGUgY2FjaGUKLSAgICAnaWRsX2NhY2hlX2ZpbGVzJzogWyc8QChpZGxfY2FjaGVfZmlsZXMpJ10sCi0KLSAgICAjIEppbmphIHNvdXJjZXMKLSAgICAnamluamFfbW9kdWxlX2ZpbGVzJzogWyc8QChqaW5qYV9tb2R1bGVfZmlsZXMpJ10sCi0KLSAgICAjIENvYmFsdCdzIEppbmphIHRlbXBsYXRlcwotICAgICdjb2RlX2dlbmVyYXRvcl90ZW1wbGF0ZV9maWxlcyc6IFsKLSAgICAgICc8QChlbmdpbmVfdGVtcGxhdGVfZmlsZXMpJywKLSAgICAgICc8QChzaGFyZWRfdGVtcGxhdGVfZmlsZXMpJwotICAgIF0sCi0KLSAgICAjIERlcGVuZGVuY2llcyBvZiB0aGUgYmluZGluZ3MgZ2VuZXJhdGlvbiB0aGF0IGFyZSBub3QgY2FwdHVyZWQgYXMgaW5wdXRzCi0gICAgJ2JpbmRpbmdzX2V4dHJhX2lucHV0cyc6IFsKLSAgICAgICc8QChpZGxfbGV4ZXJfcGFyc2VyX2ZpbGVzKScsCi0gICAgICAnPEAoaWRsX2NhY2hlX2ZpbGVzKScsCi0gICAgICAnPEAoaWRsX2NvbXBpbGVyX2ZpbGVzKScsCi0gICAgICAnPChERVBUSCkvY29iYWx0L2JpbmRpbmdzL2NvZGVfZ2VuZXJhdG9yX2NvYmFsdC5weScsCi0gICAgICAnPChERVBUSCkvY29iYWx0L2JpbmRpbmdzL2V4cHJlc3Npb25fZ2VuZXJhdG9yLnB5JywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvY29udGV4dHMucHknLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy9pZGxfY29tcGlsZXJfY29iYWx0LnB5JywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvZ2VuZXJhdGVfY29udmVyc2lvbl9oZWFkZXIucHknLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy9uYW1lX2NvbnZlcnNpb24ucHknLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy9vdmVybG9hZF9jb250ZXh0LnB5JywKLSAgICAgICc8QChjb2RlX2dlbmVyYXRvcl90ZW1wbGF0ZV9maWxlcyknLAotICAgICAgJzxAKGVuZ2luZV9iaW5kaW5nc19zY3JpcHRzKScsCi0gICAgXSwKLQotICAgICMgQ2FjaGVzIGFuZCBpbnRlcm1lZGlhdGUgc3RydWN0dXJlcy4KLSAgICAnYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyJzogJzwoYmluZGluZ3Nfb3V0cHV0X2Rpcikvc2NyaXB0cycsCi0KLSAgICAjIERpcmVjdG9yeSBjb250YWluaW5nIGdlbmVyYXRlZCBJREwgZmlsZXMuCi0gICAgJ2dlbmVyYXRlZF9pZGxzX291dHB1dF9kaXInOiAnPChiaW5kaW5nc19vdXRwdXRfZGlyKS9pZGwnLAotCi0gICAgIyBCYXNlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGdlbmVyYXRlZCBiaW5kaW5ncyBzb3VyY2UgZmlsZXMgd2lsbCBiZQotICAgICMgZ2VuZXJhdGVkLiBEaXJlY3Rvcnkgc3RydWN0dXJlIHdpbGwgbWlycm9yIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlCi0gICAgIyB0aGF0IHRoZSAuaWRsIGZpbGVzIGNhbWUgZnJvbS4KLSAgICAnZ2VuZXJhdGVkX3NvdXJjZV9vdXRwdXRfZGlyJzogJzwoYmluZGluZ3Nfb3V0cHV0X2Rpcikvc291cmNlJywKLQotICAgICMgRmlsZSBjb250YWluaW5nIGEgd2hpdGVsaXN0IG9mIEV4dGVuZGVkIEF0dHJpYnV0ZXMgdGhhdCB0aGUgY29kZSBnZW5lcmF0aW9uCi0gICAgIyBwaXBlbGluZSB1bmRlcnN0YW5kcwotICAgICdleHRlbmRlZF9hdHRyaWJ1dGVzX2ZpbGUnOiAnSURMRXh0ZW5kZWRBdHRyaWJ1dGVzLnR4dCcsCi0KLSAgICAjIEJsaW5rIGludGVyZmFjZSBpbmZvIGlzIGNhbGN1bGF0ZWQgaW4gdHdvIHN0YWdlcy4gRmlyc3QgYXQgYSBwZXItY29tcG9uZW50IGxldmVsCi0gICAgIyAoaW4gQmxpbmsgdGhpcyBpcyBjb3JlIG9yIG1vZHVsZXMpIGFuZCB0aGVuIHRoZXNlIGFyZSBjb21iaW5lZC4gV2hpbGUgQ29iYWx0Ci0gICAgIyBjdXJyZW50bHkgZG9lcyBub3QgYW5kIG1heSBub3QgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGNvbXBvbmVudHMsIHdlIGFkaGVyZSB0bwotICAgICMgQmxpbmsncyBwcm9jZXNzIGZvciBzaW1wbGljaXR5LgotICAgICdjb21wb25lbnRfaW5mb19waWNrbGUnOgotICAgICAgICAnPChiaW5kaW5nc19zY3JpcHRzX291dHB1dF9kaXIpL2NvbXBvbmVudF9pbmZvLnBpY2tsZScsCi0gICAgJ2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsX3BpY2tsZSc6Ci0gICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwucGlja2xlJywKLSAgICAnaW50ZXJmYWNlc19pbmZvX2NvbWJpbmVkX3BpY2tsZSc6Ci0gICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvaW50ZXJmYWNlc19pbmZvX292ZXJhbGwucGlja2xlJywKLQotICAgICMgQWxsIHNvdXJjZSBmaWxlcyB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZSBJREwgZmlsZXMuCi0gICAgJ2dlbmVyYXRlZF9zb3VyY2VzJzoKLSAgICAgICAgWyc8IUBweW1vZF9kb19tYWluKGNvYmFsdC5idWlsZC5wYXRoX2NvbnZlcnNpb24gLXMnCi0gICAgICAgICAnIC0tb3V0cHV0X2RpcmVjdG9yeSA8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpciknCi0gICAgICAgICAnIC0tb3V0cHV0X2V4dGVuc2lvbiBjYyAtLW91dHB1dF9wcmVmaXggPChwcmVmaXgpXycKLSAgICAgICAgICcgLS1iYXNlX2RpcmVjdG9yeSA8KERFUFRIKScKLSAgICAgICAgICcgPEAoc291cmNlX2lkbF9maWxlcykpJ10sCi0KLSAgICAjIC5jYyBmaWxlcyB0aGF0IGltcGxlbWVudCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0by9mcm9tIGEgSlMgdmFsdWUgZm9yCi0gICAgIyBnZW5lcmF0ZWQgdHlwZXMgKGVudW1zIGFuZCBkaWN0aW9uYXJpZXMpLgotICAgICdnZW5lcmF0ZWRfdHlwZV9jb252ZXJzaW9ucyc6Ci0gICAgICAgIFsnPCFAcHltb2RfZG9fbWFpbihjb2JhbHQuYnVpbGQucGF0aF9jb252ZXJzaW9uIC1zJwotICAgICAgICAgJyAtLW91dHB1dF9kaXJlY3RvcnkgPChnZW5lcmF0ZWRfc291cmNlX291dHB1dF9kaXIpJwotICAgICAgICAgJyAtLW91dHB1dF9leHRlbnNpb24gY2MgLS1vdXRwdXRfcHJlZml4IDwocHJlZml4KV8nCi0gICAgICAgICAnIC0tYmFzZV9kaXJlY3RvcnkgPChERVBUSCknCi0gICAgICAgICAnIDxAKGdlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzKSknXSwKLQotICAgICMgR2VuZXJhdGVkIElETCBmaWxlIHRoYXQgd2lsbCBkZWZpbmUgYWxsIHRoZSBjb25zdHJ1Y3RvcnMgdGhhdCBzaG91bGQgYmUKLSAgICAjIG9uIHRoZSBXaW5kb3cgb2JqZWN0Ci0gICAgJ2dsb2JhbF9jb25zdHJ1Y3RvcnNfZ2VuZXJhdGVkX2lkbF9maWxlJzoKLSAgICAgICAgJzwoZ2VuZXJhdGVkX2lkbHNfb3V0cHV0X2RpcikvPCh3aW5kb3dfY29tcG9uZW50KS93aW5kb3dfY29uc3RydWN0b3JzLmlkbCcsCi0KLSAgICAjIER1bW15IGhlYWRlciBmaWxlIHdoaWNoIGlzIGdlbmVyYXRlZCBiZWNhdXNlIHRoZSBpZGwgY29tcGlsZXIgYXNzdW1lcwotICAgICMgdGhlcmUgaXMgYSBoZWFkZXIgZm9yIGVhY2ggSURMLgotICAgICdnbG9iYWxfY29uc3RydWN0b3JzX2dlbmVyYXRlZF9oZWFkZXJfZmlsZSc6Ci0gICAgICAgICc8KGdlbmVyYXRlZF9pZGxzX291dHB1dF9kaXIpLzwod2luZG93X2NvbXBvbmVudCkvd2luZG93X2NvbnN0cnVjdG9ycy5oJywKLQotICAgICMgR2VuZXJhdGVkIGhlYWRlciBmaWxlIHRoYXQgY29udGFpbnMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGNvbnZlcnRpbmcKLSAgICAjIHRvL2Zyb20gSlMgdmFsdWUgYW5kIGdlbmVyYXRlZCB0eXBlcy4KLSAgICAnZ2VuZXJhdGVkX3R5cGVfY29udmVyc2lvbl9oZWFkZXJfZmlsZSc6Ci0gICAgICAgICc8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpcikvPChwcmVmaXgpX2dlbl90eXBlX2NvbnZlcnNpb24uaCcsCi0gIH0sCi0KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgIyBDcmVhdGUgYSB0YXJnZXQgdGhhdCBkZXBlbmRzIG9uIHRoaXMgdGFyZ2V0IHRvIGNvbXBpbGUgdGhlIGdlbmVyYXRlZAotICAgICAgIyBzb3VyY2UgZmlsZXMuIFRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBzdWNoIHRhcmdldC4KLSAgICAgICMgQmFzZWQgb24gYmxpbmsvU291cmNlL2JpbmRpbmdzL2NvcmUvdjgvZ2VuZXJhdGVkLmd5cDpiaW5kaW5nc19jb3JlX3Y4X2dlbmVyYXRlZF9pbmRpdmlkdWFsCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVkX2JpbmRpbmdzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgIyBUaGUgJ2JpbmRpbmcnIHJ1bGUgZ2VuZXJhdGVzIC5oIGZpbGVzLCBzbyBtYXJrIGFzIGhhcmRfZGVwZW5kZW5jeSwgcGVyOgotICAgICAgIyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2d5cC93aWtpL0lucHV0Rm9ybWF0UmVmZXJlbmNlI0xpbmtpbmdfRGVwZW5kZW5jaWVzCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjYWNoZWRfamluamFfdGVtcGxhdGVzJywKLSAgICAgICAgJ2NhY2hlZF9sZXhfeWFjY190YWJsZXMnLAotICAgICAgICAnZ2VuZXJhdGVkX3R5cGVzJywKLSAgICAgICAgJ2dlbmVyYXRlZF90eXBlX2NvbnZlcnNpb24nLAotICAgICAgICAnZ2xvYmFsX2NvbnN0cnVjdG9yc19pZGxzJywKLSAgICAgICAgJ2ludGVyZmFjZXNfaW5mb19vdmVyYWxsJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvZW5naW5lLmd5cDplbmdpbmUnLAotICAgICAgICAnPEAoYmluZGluZ3NfZGVwZW5kZW5jaWVzKScsCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICc8QChiaW5kaW5nc19kZXBlbmRlbmNpZXMpJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKHNvdXJjZV9pZGxfZmlsZXMpJywKLSAgICAgIF0sCi0gICAgICAncnVsZXMnOiBbewotICAgICAgICAncnVsZV9uYW1lJzogJ2JpbmRpbmcnLAotICAgICAgICAnZXh0ZW5zaW9uJzogJ2lkbCcsCi0gICAgICAgICdtc3ZzX2V4dGVybmFsX3J1bGUnOiAxLAotICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICMgU2NyaXB0IHNvdXJjZSBmaWxlcywgZXRjLgotICAgICAgICAgICc8QChiaW5kaW5nc19leHRyYV9pbnB1dHMpJywKLQotICAgICAgICAgICMgVGhpcyBmaWxlIGlzIGdsb2JhbCwgc28gaWYgaXQgY2hhbmdlcyBhbGwgZmlsZXMgYXJlIHJlYnVpbHQuCi0gICAgICAgICAgIyBIb3dldmVyLCB0aGlzIGZpbGUgd2lsbCBvbmx5IGNoYW5nZSB3aGVuIGRlcGVuZGVuY3kgc3RydWN0dXJlCi0gICAgICAgICAgIyBjaGFuZ2VzLCBzbyBzaG91bGRuJ3QgY2hhbmdlIHRvbyBtdWNoLgotICAgICAgICAgICMgU2VlIGJsaW5rL1NvdXJjZS9iaW5kaW5ncy9jb3JlL3Y4L2dlbmVyYXRlZC5neXAgZm9yIG1vcmUgaW5mbwotICAgICAgICAgICc8KGludGVyZmFjZXNfaW5mb19jb21iaW5lZF9waWNrbGUpJywKLQotICAgICAgICAgICMgU2ltaWxhcmx5LCBhbGwgZmlsZXMgYXJlIHJlYnVpbHQgaWYgYSBwYXJ0aWFsIGludGVyZmFjZSBvcgotICAgICAgICAgICMgcmlnaHQgc2lkZSBvZiAnaW1wbGVtZW50cycgY2hhbmdlcy4KLSAgICAgICAgICAjIFNlZSBibGluay9Tb3VyY2UvYmluZGluZ3MvY29yZS92OC9nZW5lcmF0ZWQuZ3lwIGZvciBtb3JlIGluZm8KLSAgICAgICAgICAnPEAoZGVwZW5kZW5jeV9pZGxfZmlsZXMpJywKLQotICAgICAgICAgICMgQWxzbyBhZGQgYXMgYSBkZXBlbmRlbmN5IHRoZSBzZXQgb2YgdW5zdXBwb3J0ZWQgSURMIGZpbGVzLgotICAgICAgICAgICc8QCh1bnN1cHBvcnRlZF9pbnRlcmZhY2VfaWRsX2ZpbGVzKScsCi0KLSAgICAgICAgICAjIFRoZSBnZW5lcmF0ZWQgY29uc3RydWN0b3JzIElETCBpcyBhbHNvIGEgcGFydGlhbCBpbnRlcmZhY2UsIGFuZAotICAgICAgICAgICMgd2UgbmVlZCB0byByZWJ1aWxkIGlmIGl0IGlzIG1vZGlmaWVkLgotICAgICAgICAgICc8KGdsb2JhbF9jb25zdHJ1Y3RvcnNfZ2VuZXJhdGVkX2lkbF9maWxlKScsCi0KLSAgICAgICAgICAjIFRoZSB3aGl0ZWxpc3Qgb2Ygd2hhdCBleHRlbmRlZCBhdHRyaWJ1dGVzIHdlIHN1cHBvcnQuIElmIGFuIGF0dHJpYnV0ZQotICAgICAgICAgICMgbm90IGluIHRoaXMgbGlzdCBpcyBlbmNvdW50ZXJlZCwgaXQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiB0aGUKLSAgICAgICAgICAjIHBpcGVsaW5lLgotICAgICAgICAgICc8KGV4dGVuZGVkX2F0dHJpYnV0ZXNfZmlsZSknLAotCi0gICAgICAgICAgIyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgZ2VuZXJhdGVkIHR5cGVzLgotICAgICAgICAgICc8KGdlbmVyYXRlZF90eXBlX2NvbnZlcnNpb25faGVhZGVyX2ZpbGUpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oY29iYWx0LmJ1aWxkLnBhdGhfY29udmVyc2lvbiAtcyAtcCA8KHByZWZpeClfICcKLSAgICAgICAgICAgICAgJy1lIGNjIC1kIDwoZ2VuZXJhdGVkX3NvdXJjZV9vdXRwdXRfZGlyKSAtYiA8KERFUFRIKSA8KFJVTEVfSU5QVVRfRElSTkFNRSkvPChSVUxFX0lOUFVUX1JPT1QpKScsCi0gICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oY29iYWx0LmJ1aWxkLnBhdGhfY29udmVyc2lvbiAtcyAtcCA8KHByZWZpeClfICcKLSAgICAgICAgICAgICAgJy1lIGggLWQgPChnZW5lcmF0ZWRfc291cmNlX291dHB1dF9kaXIpIC1iIDwoREVQVEgpIDwoUlVMRV9JTlBVVF9ESVJOQU1FKS88KFJVTEVfSU5QVVRfUk9PVCkpJwotICAgICAgICBdLAotICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAnPChpZGxfY29tcGlsZXJfc2NyaXB0KScsCi0gICAgICAgICAgJy0tY2FjaGUtZGlyJywKLSAgICAgICAgICAnPChiaW5kaW5nc19zY3JpcHRzX291dHB1dF9kaXIpJywKLSAgICAgICAgICAnLS1vdXRwdXQtZGlyJywKLSAgICAgICAgICAnPChnZW5lcmF0ZWRfc291cmNlX291dHB1dF9kaXIpJywKLSAgICAgICAgICAnLS1pbnRlcmZhY2VzLWluZm8nLAotICAgICAgICAgICc8KGludGVyZmFjZXNfaW5mb19jb21iaW5lZF9waWNrbGUpJywKLSAgICAgICAgICAnLS1jb21wb25lbnQtaW5mbycsCi0gICAgICAgICAgJzwoY29tcG9uZW50X2luZm9fcGlja2xlKScsCi0gICAgICAgICAgJy0tZXh0ZW5kZWQtYXR0cmlidXRlcycsCi0gICAgICAgICAgJzwoZXh0ZW5kZWRfYXR0cmlidXRlc19maWxlKScsCi0gICAgICAgICAgJzwoUlVMRV9JTlBVVF9QQVRIKScsCi0gICAgICAgIF0sCi0gICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgYmluZGluZyBmcm9tIDwoUlVMRV9JTlBVVF9QQVRIKScsCi0gICAgICB9XSwKLSAgICAgICMgVGhlIHRhcmdldCB0aGF0IGRlcGVuZHMgb24gdGhpcyB3aWxsIGJ1aWxkIHRoZSBiaW5kaW5ncyBzb3VyY2UuCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2RlZmluZXMnOiBbICc8QChiaW5kaW5nc19kZWZpbmVzKScgXSwKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPEAoYmluZGluZ3NfaW5jbHVkZV9kaXJzKScsCi0gICAgICAgICAgJzwoZ2VuZXJhdGVkX3NvdXJjZV9vdXRwdXRfZGlyKScsCi0gICAgICAgIF0sCi0gICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICc8QChnZW5lcmF0ZWRfc291cmNlcyknLAotICAgICAgICAgICc8QChnZW5lcmF0ZWRfdHlwZV9jb252ZXJzaW9ucyknLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsgJzxAKGJpbmRpbmdzX2RlZmluZXMpJ10sCi0gICAgICB9Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICMgQmFzZWQgb24gdGhlIGdlbmVyYXRlZF9iaW5kaW5ncyB0YXJnZXQgYWJvdmUuIE1haW4gZGlmZmVyZW5jZSBpcyB0aGF0Ci0gICAgICAjIHRoaXMgcHJvZHVjZXMgdHdvIC5oIGZpbGVzLCBhbmQgdGFrZXMgdGhlIGRpY3Rpb25hcnkgaWRsIGZpbGVzIGFzIGlucHV0LgotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dlbmVyYXRlZF90eXBlcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdoYXJkX2RlcGVuZGVuY3knOiAxLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NhY2hlZF9qaW5qYV90ZW1wbGF0ZXMnLAotICAgICAgICAnY2FjaGVkX2xleF95YWNjX3RhYmxlcycsCi0gICAgICAgICdnbG9iYWxfY29uc3RydWN0b3JzX2lkbHMnLAotICAgICAgICAnaW50ZXJmYWNlc19pbmZvX292ZXJhbGwnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXMpJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChnZW5lcmF0ZWRfc291cmNlX291dHB1dF9kaXIpJywKLSAgICAgICAgXQotICAgICAgfSwKLSAgICAgICdydWxlcyc6IFt7Ci0gICAgICAgICdydWxlX25hbWUnOiAnYmluZGluZycsCi0gICAgICAgICdleHRlbnNpb24nOiAnaWRsJywKLSAgICAgICAgJ21zdnNfZXh0ZXJuYWxfcnVsZSc6IDEsCi0gICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgIyBTY3JpcHQgc291cmNlIGZpbGVzLCBldGMuCi0gICAgICAgICAgJzxAKGJpbmRpbmdzX2V4dHJhX2lucHV0cyknLAotCi0gICAgICAgICAgIyBUaGlzIGZpbGUgaXMgZ2xvYmFsLCBzbyBpZiBpdCBjaGFuZ2VzIGFsbCBmaWxlcyBhcmUgcmVidWlsdC4KLSAgICAgICAgICAjIEhvd2V2ZXIsIHRoaXMgZmlsZSB3aWxsIG9ubHkgY2hhbmdlIHdoZW4gZGVwZW5kZW5jeSBzdHJ1Y3R1cmUKLSAgICAgICAgICAjIGNoYW5nZXMsIHNvIHNob3VsZG4ndCBjaGFuZ2UgdG9vIG11Y2guCi0gICAgICAgICAgIyBTZWUgYmxpbmsvU291cmNlL2JpbmRpbmdzL2NvcmUvdjgvZ2VuZXJhdGVkLmd5cCBmb3IgbW9yZSBpbmZvCi0gICAgICAgICAgJzwoaW50ZXJmYWNlc19pbmZvX2NvbWJpbmVkX3BpY2tsZSknLAotCi0gICAgICAgICAgIyBTaW1pbGFybHksIGFsbCBmaWxlcyBhcmUgcmVidWlsdCBpZiBhIHBhcnRpYWwgaW50ZXJmYWNlIG9yCi0gICAgICAgICAgIyByaWdodCBzaWRlIG9mICdpbXBsZW1lbnRzJyBjaGFuZ2VzLgotICAgICAgICAgICMgU2VlIGJsaW5rL1NvdXJjZS9iaW5kaW5ncy9jb3JlL3Y4L2dlbmVyYXRlZC5neXAgZm9yIG1vcmUgaW5mbwotICAgICAgICAgICc8QChkZXBlbmRlbmN5X2lkbF9maWxlcyknLAotCi0gICAgICAgICAgIyBBbHNvIGFkZCBhcyBhIGRlcGVuZGVuY3kgdGhlIHNldCBvZiB1bnN1cHBvcnRlZCBJREwgZmlsZXMuCi0gICAgICAgICAgJzxAKHVuc3VwcG9ydGVkX2ludGVyZmFjZV9pZGxfZmlsZXMpJywKLQotICAgICAgICAgICMgVGhlIGdlbmVyYXRlZCBjb25zdHJ1Y3RvcnMgSURMIGlzIGFsc28gYSBwYXJ0aWFsIGludGVyZmFjZSwgYW5kCi0gICAgICAgICAgIyB3ZSBuZWVkIHRvIHJlYnVpbGQgaWYgaXQgaXMgbW9kaWZpZWQuCi0gICAgICAgICAgJzwoZ2xvYmFsX2NvbnN0cnVjdG9yc19nZW5lcmF0ZWRfaWRsX2ZpbGUpJywKLQotICAgICAgICAgICMgVGhlIHdoaXRlbGlzdCBvZiB3aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgd2Ugc3VwcG9ydC4gSWYgYW4gYXR0cmlidXRlCi0gICAgICAgICAgIyBub3QgaW4gdGhpcyBsaXN0IGlzIGVuY291bnRlcmVkLCBpdCB3aWxsIGNhdXNlIGFuIGVycm9yIGluIHRoZQotICAgICAgICAgICMgcGlwZWxpbmUuCi0gICAgICAgICAgJzwoZXh0ZW5kZWRfYXR0cmlidXRlc19maWxlKScsCi0gICAgICAgIF0sCi0gICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKGNvYmFsdC5idWlsZC5wYXRoX2NvbnZlcnNpb24gLXMgJwotICAgICAgICAgICAgICAnLWUgaCAtZCA8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpcikgLWIgPChERVBUSCkgPChSVUxFX0lOUFVUX0RJUk5BTUUpLzwoUlVMRV9JTlBVVF9ST09UKSknLAotICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKGNvYmFsdC5idWlsZC5wYXRoX2NvbnZlcnNpb24gLXMgLXAgPChwcmVmaXgpXyAnCi0gICAgICAgICAgICAgICctZSBjYyAtZCA8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpcikgLWIgPChERVBUSCkgPChSVUxFX0lOUFVUX0RJUk5BTUUpLzwoUlVMRV9JTlBVVF9ST09UKSknCi0gICAgICAgIF0sCi0gICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICc8KGlkbF9jb21waWxlcl9zY3JpcHQpJywKLSAgICAgICAgICAnLS1jYWNoZS1kaXInLAotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpciknLAotICAgICAgICAgICctLW91dHB1dC1kaXInLAotICAgICAgICAgICc8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpciknLAotICAgICAgICAgICctLWludGVyZmFjZXMtaW5mbycsCi0gICAgICAgICAgJzwoaW50ZXJmYWNlc19pbmZvX2NvbWJpbmVkX3BpY2tsZSknLAotICAgICAgICAgICctLWNvbXBvbmVudC1pbmZvJywKLSAgICAgICAgICAnPChjb21wb25lbnRfaW5mb19waWNrbGUpJywKLSAgICAgICAgICAnLS1leHRlbmRlZC1hdHRyaWJ1dGVzJywKLSAgICAgICAgICAnPChleHRlbmRlZF9hdHRyaWJ1dGVzX2ZpbGUpJywKLSAgICAgICAgICAnPChSVUxFX0lOUFVUX1BBVEgpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBkaWN0aW9uYXJ5IGZyb20gPChSVUxFX0lOUFVUX1BBVEgpJywKLSAgICAgIH1dLAotICAgIH0sCi0gICAgewotICAgICAgIyBDcmVhdGUgYSB0YXJnZXQgdGhhdCBkZXBlbmRzIG9uIHRoaXMgdGFyZ2V0IHRvIGNvbXBpbGUgdGhlIGdlbmVyYXRlZAotICAgICAgIyBzb3VyY2UgZmlsZXMuIFRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBzdWNoIHRhcmdldC4KLSAgICAgICMgQmFzZWQgb24gYmxpbmsvU291cmNlL2JpbmRpbmdzL2NvcmUvdjgvZ2VuZXJhdGVkLmd5cDpiaW5kaW5nc19jb3JlX3Y4X2dlbmVyYXRlZF9pbmRpdmlkdWFsCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVkX3R5cGVfY29udmVyc2lvbicsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICMgVGhlICdiaW5kaW5nJyBydWxlIGdlbmVyYXRlcyAuaCBmaWxlcywgc28gbWFyayBhcyBoYXJkX2RlcGVuZGVuY3ksIHBlcjoKLSAgICAgICMgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9neXAvd2lraS9JbnB1dEZvcm1hdFJlZmVyZW5jZSNMaW5raW5nX0RlcGVuZGVuY2llcwotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY2FjaGVkX2ppbmphX3RlbXBsYXRlcycsCi0gICAgICAgICdjYWNoZWRfbGV4X3lhY2NfdGFibGVzJywKLSAgICAgICAgJ2dsb2JhbF9jb25zdHJ1Y3RvcnNfaWRscycsCi0gICAgICAgICdpbnRlcmZhY2VzX2luZm9fb3ZlcmFsbCcsCi0gICAgICAgICc8QChiaW5kaW5nc19kZXBlbmRlbmNpZXMpJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzxAKGJpbmRpbmdzX2RlcGVuZGVuY2llcyknLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoc291cmNlX2lkbF9maWxlcyknLAotICAgICAgICAnPEAoZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXMpJywKLSAgICAgICAgJ3NoYXJlZC9pZGxfY29uZGl0aW9uYWxfbWFjcm9zLmgnLAotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogW3sKLSAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlX3R5cGVfY29udmVyc2lvbl9oZWFkZXInLAotICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICMgU2NyaXB0IHNvdXJjZSBmaWxlcywgZXRjLgotICAgICAgICAgICc8QChiaW5kaW5nc19leHRyYV9pbnB1dHMpJywKLQotICAgICAgICAgICMgVGhpcyBmaWxlIGlzIGdsb2JhbCwgc28gaWYgaXQgY2hhbmdlcyBhbGwgZmlsZXMgYXJlIHJlYnVpbHQuCi0gICAgICAgICAgIyBIb3dldmVyLCB0aGlzIGZpbGUgd2lsbCBvbmx5IGNoYW5nZSB3aGVuIGRlcGVuZGVuY3kgc3RydWN0dXJlCi0gICAgICAgICAgIyBjaGFuZ2VzLCBzbyBzaG91bGRuJ3QgY2hhbmdlIHRvbyBtdWNoLgotICAgICAgICAgICMgU2VlIGJsaW5rL1NvdXJjZS9iaW5kaW5ncy9jb3JlL3Y4L2dlbmVyYXRlZC5neXAgZm9yIG1vcmUgaW5mbwotICAgICAgICAgICc8KGludGVyZmFjZXNfaW5mb19jb21iaW5lZF9waWNrbGUpJywKLQotICAgICAgICAgICMgU2ltaWxhcmx5LCBhbGwgZmlsZXMgYXJlIHJlYnVpbHQgaWYgYSBwYXJ0aWFsIGludGVyZmFjZSBvcgotICAgICAgICAgICMgcmlnaHQgc2lkZSBvZiAnaW1wbGVtZW50cycgY2hhbmdlcy4KLSAgICAgICAgICAjIFNlZSBibGluay9Tb3VyY2UvYmluZGluZ3MvY29yZS92OC9nZW5lcmF0ZWQuZ3lwIGZvciBtb3JlIGluZm8KLSAgICAgICAgICAnPEAoZGVwZW5kZW5jeV9pZGxfZmlsZXMpJywKLQotICAgICAgICAgICMgQWxzbyBhZGQgYXMgYSBkZXBlbmRlbmN5IHRoZSBzZXQgb2YgdW5zdXBwb3J0ZWQgSURMIGZpbGVzLgotICAgICAgICAgICc8QCh1bnN1cHBvcnRlZF9pbnRlcmZhY2VfaWRsX2ZpbGVzKScsCi0KLSAgICAgICAgICAjIFRoZSBnZW5lcmF0ZWQgY29uc3RydWN0b3JzIElETCBpcyBhbHNvIGEgcGFydGlhbCBpbnRlcmZhY2UsIGFuZAotICAgICAgICAgICMgd2UgbmVlZCB0byByZWJ1aWxkIGlmIGl0IGlzIG1vZGlmaWVkLgotICAgICAgICAgICc8KGdsb2JhbF9jb25zdHJ1Y3RvcnNfZ2VuZXJhdGVkX2lkbF9maWxlKScsCi0KLSAgICAgICAgICAjIFRoZSB3aGl0ZWxpc3Qgb2Ygd2hhdCBleHRlbmRlZCBhdHRyaWJ1dGVzIHdlIHN1cHBvcnQuIElmIGFuIGF0dHJpYnV0ZQotICAgICAgICAgICMgbm90IGluIHRoaXMgbGlzdCBpcyBlbmNvdW50ZXJlZCwgaXQgd2lsbCBjYXVzZSBhbiBlcnJvciBpbiB0aGUKLSAgICAgICAgICAjIHBpcGVsaW5lLgotICAgICAgICAgICc8KGV4dGVuZGVkX2F0dHJpYnV0ZXNfZmlsZSknLAotICAgICAgICBdLAotICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAnPChnZW5lcmF0ZWRfdHlwZV9jb252ZXJzaW9uX2hlYWRlcl9maWxlKScsCi0gICAgICAgIF0sCi0gICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICc8KGNvbnZlcnNpb25faGVhZGVyX2dlbmVyYXRvcl9zY3JpcHQpJywKLSAgICAgICAgICAnLS1jYWNoZS1kaXInLAotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpciknLAotICAgICAgICAgICctLW91dHB1dC1kaXInLAotICAgICAgICAgICc8KGdlbmVyYXRlZF9zb3VyY2Vfb3V0cHV0X2RpciknLAotICAgICAgICAgICctLWludGVyZmFjZXMtaW5mbycsCi0gICAgICAgICAgJzwoaW50ZXJmYWNlc19pbmZvX2NvbWJpbmVkX3BpY2tsZSknLAotICAgICAgICAgICctLWNvbXBvbmVudC1pbmZvJywKLSAgICAgICAgICAnPChjb21wb25lbnRfaW5mb19waWNrbGUpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBnZW5lcmF0ZWQgdHlwZSBjb252ZXJzaW9uIGhlYWRlcicsCi0gICAgICB9XSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBCYXNlZCBvbiBibGluay9Tb3VyY2UvYmluZGluZ3MvY29yZS9nZW5lcmF0ZWQuZ3lwOmNvcmVfZ2xvYmFsX29iamVjdHMKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbG9iYWxfb2JqZWN0cycsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaWRsX2ZpbGVzJzogWwotICAgICAgICAgICc8QChzb3VyY2VfaWRsX2ZpbGVzKScsICc8QChnZW5lcmF0ZWRfaGVhZGVyX2lkbF9maWxlcyknCi0gICAgICAgIF0sCi0gICAgICAgICdvdXRwdXRfZmlsZSc6ICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvR2xvYmFsT2JqZWN0cy5waWNrbGUnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsnLi4vLi4vdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvZ2xvYmFsX29iamVjdHMuZ3lwaSddLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAjIEJhc2VkIG9uIGJsaW5rL1NvdXJjZS9iaW5kaW5ncy9jb3JlL2dlbmVyYXRlZC5neXA6Y29yZV9nbG9iYWxfY29uc3RydWN0b3JzX2lkbHMKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbG9iYWxfY29uc3RydWN0b3JzX2lkbHMnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dsb2JhbF9vYmplY3RzJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaWRsX2ZpbGVzJzogWwotICAgICAgICAgICc8QChzb3VyY2VfaWRsX2ZpbGVzKScsCi0gICAgICAgICAgJzxAKHVuc3VwcG9ydGVkX2ludGVyZmFjZV9pZGxfZmlsZXMpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2dsb2JhbF9vYmplY3RzX2ZpbGUnOgotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvR2xvYmFsT2JqZWN0cy5waWNrbGUnLAotICAgICAgICAnZ2xvYmFsX25hbWVzX2lkbF9maWxlcyc6IFsKLSAgICAgICAgICAnV2luZG93JywKLSAgICAgICAgICAnPChnbG9iYWxfY29uc3RydWN0b3JzX2dlbmVyYXRlZF9pZGxfZmlsZSknLAotICAgICAgICBdLAotICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAnPChnbG9iYWxfY29uc3RydWN0b3JzX2dlbmVyYXRlZF9pZGxfZmlsZSknLAotICAgICAgICAgICc8KGdsb2JhbF9jb25zdHJ1Y3RvcnNfZ2VuZXJhdGVkX2hlYWRlcl9maWxlKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWycuLi8uLi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9nbG9iYWxfY29uc3RydWN0b3JzLmd5cGknXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBCYXNlZCBvbiBibGluay9Tb3VyY2UvYmluZGluZ3MvY29yZS9nZW5lcmF0ZWQuZ3lwOmludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsX2NvcmUKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbCcsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY2FjaGVkX2xleF95YWNjX3RhYmxlcycsCi0gICAgICAgICdnbG9iYWxfY29uc3RydWN0b3JzX2lkbHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdzdGF0aWNfaWRsX2ZpbGVzJzogWwotICAgICAgICAgICc8QChzb3VyY2VfaWRsX2ZpbGVzKScsCi0gICAgICAgICAgJzxAKGdlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzKScsCi0gICAgICAgICAgJzxAKGRlcGVuZGVuY3lfaWRsX2ZpbGVzKScsCi0gICAgICAgICAgJzxAKHVuc3VwcG9ydGVkX2ludGVyZmFjZV9pZGxfZmlsZXMpJ10sCi0gICAgICAgICdnZW5lcmF0ZWRfaWRsX2ZpbGVzJzogWyc8KGdsb2JhbF9jb25zdHJ1Y3RvcnNfZ2VuZXJhdGVkX2lkbF9maWxlKSddLAotICAgICAgICAnY29tcG9uZW50X2luZm9fZmlsZSc6JzwoY29tcG9uZW50X2luZm9fcGlja2xlKScsCi0gICAgICAgICdpbnRlcmZhY2VzX2luZm9fZmlsZSc6ICc8KGludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsX3BpY2tsZSknLAotICAgICAgICAnb3V0cHV0X2ZpbGUnOiAnPChpbnRlcmZhY2VzX2luZm9fZmlsZSknLAotICAgICAgICAnY2FjaGVfZGlyZWN0b3J5JzogJzwoYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyKScsCi0gICAgICAgICdyb290X2RpcmVjdG9yeSc6ICcuLi8uLicsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWycuLi8uLi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbC5neXBpJ10sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICMgQmFzZWQgb24gYmxpbmsvU291cmNlL2JpbmRpbmdzL21vZHVsZXMvZ2VuZXJhdGVkLmd5cDppbnRlcmZhY2VzX2luZm9fb3ZlcmFsbAotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ludGVyZmFjZXNfaW5mb19vdmVyYWxsJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgJ2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaW5wdXRfZmlsZXMnOiBbJzwoaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWxfcGlja2xlKSddLAotICAgICAgICAnb3V0cHV0X2ZpbGUnOiAnPChpbnRlcmZhY2VzX2luZm9fY29tYmluZWRfcGlja2xlKScsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWycuLi8uLi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pbnRlcmZhY2VzX2luZm9fb3ZlcmFsbC5neXBpJ10sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICMgQm9ycm93ZWQgZnJvbSBibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9zY3JpcHRzLmd5cDpjYWNoZWRfbGV4X3lhY2NfdGFibGVzCi0gICAgICAndGFyZ2V0X25hbWUnOiAnY2FjaGVkX2xleF95YWNjX3RhYmxlcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdhY3Rpb25zJzogW3sKLSAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NhY2hlX2xleF95YWNjX3RhYmxlcycsCi0gICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgJzxAKGlkbF9sZXhlcl9wYXJzZXJfZmlsZXMpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyKS9sZXh0YWIucHknLAotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvcGFyc2V0YWIucGlja2xlJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2JsaW5rX2lkbF9wYXJzZXIucHknLAotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpciknLAotICAgICAgICBdLAotICAgICAgICAnbWVzc2FnZSc6ICdDYWNoaW5nIFBMWSBsZXggJiB5YWNjIGxleC9wYXJzZSB0YWJsZXMnLAotICAgICAgfV0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAjIEJvcnJvd2VkIGZyb20gYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvc2NyaXB0cy5neXA6Y2FjaGVkX2ppbmphX3RlbXBsYXRlcwotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NhY2hlZF9qaW5qYV90ZW1wbGF0ZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnYWN0aW9ucyc6IFt7Ci0gICAgICAgICdhY3Rpb25fbmFtZSc6ICdjYWNoZV9qaW5qYV90ZW1wbGF0ZXMnLAotICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICc8QChqaW5qYV9tb2R1bGVfZmlsZXMpJywKLSAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2JpbmRpbmdzL2NvZGVfZ2VuZXJhdG9yX2NvYmFsdC5weScsCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy9wYXRoX2dlbmVyYXRvci5weScsCi0gICAgICAgICAgJzxAKGNvZGVfZ2VuZXJhdG9yX3RlbXBsYXRlX2ZpbGVzKScsCi0gICAgICAgIF0sCi0gICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpcikvY2FjaGVkX2ppbmphX3RlbXBsYXRlcy5zdGFtcCcsICAjIER1bW15IHRvIHRyYWNrIGRlcGVuZGVuY3kKLSAgICAgICAgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy9jb2RlX2dlbmVyYXRvcl9jb2JhbHQucHknLAotICAgICAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpciknLAotICAgICAgICAgICc8KGJpbmRpbmdzX3RlbXBsYXRlc19kaXIpJywKLSAgICAgICAgICAnPChiaW5kaW5nc19zY3JpcHRzX291dHB1dF9kaXIpL2NhY2hlZF9qaW5qYV90ZW1wbGF0ZXMuc3RhbXAnLAotICAgICAgICBdLAotICAgICAgICAnbWVzc2FnZSc6ICdDYWNoaW5nIGJ5dGVjb2RlIG9mIEppbmphIHRlbXBsYXRlcycsCi0gICAgICB9XSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2JpbmRpbmdzX3RlbXBsYXRlcy5nbmkgYi9jb2JhbHQvYmluZGluZ3MvYmluZGluZ3NfdGVtcGxhdGVzLmduaQppbmRleCAxMmYxOGFkLi5mOTkwYThjIDEwMDY0NAotLS0gYS9jb2JhbHQvYmluZGluZ3MvYmluZGluZ3NfdGVtcGxhdGVzLmduaQorKysgYi9jb2JhbHQvYmluZGluZ3MvYmluZGluZ3NfdGVtcGxhdGVzLmduaQpAQCAtMzcsOCArMzcsNyBAQAogIyBUZW1wbGF0ZSBkZWZpbml0aW9ucy4KIHRlbXBsYXRlKCJpZGxfY29tcGlsZSIpIHsKICAgYWN0aW9uX2ZvcmVhY2godGFyZ2V0X25hbWUpIHsKLSAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gICAgcHlfc2NyaXB0ID0gZW5naW5lX2lkbF9jb21waWxlcgorICAgIHNjcmlwdCA9IGVuZ2luZV9pZGxfY29tcGlsZXIKIAogICAgIHNvdXJjZXMgPSBpbnZva2VyLnNvdXJjZXMKIApAQCAtNTQsNyArNTMsNiBAQAogICAgICAgX2V4dGVuZGVkX2F0dHJpYnV0ZXNfZmlsZSwKICAgICAgIGludm9rZXIuY29tcG9uZW50X2luZm8sCiAgICAgICBpbnZva2VyLmludGVyZmFjZXNfaW5mbywKLSAgICAgIHB5X3NjcmlwdCwKICAgICBdCiAgICAgaW5wdXRzICs9IF9iaW5kaW5nc19leHRyYV9pbnB1dHMKIApAQCAtNzMsOCArNzEsNiBAQAogICAgIF0KIAogICAgIGFyZ3MgPSBbCi0gICAgICAicHl0aG9uMiIsCi0gICAgICByZWJhc2VfcGF0aChweV9zY3JpcHQsIHJvb3RfYnVpbGRfZGlyKSwKICAgICAgICItLWNhY2hlLWRpcmVjdG9yeSIsCiAgICAgICByZWJhc2VfcGF0aChpbnZva2VyLmNhY2hlX2RpcmVjdG9yeSksCiAgICAgICAiLS1vdXRwdXQtZGlyZWN0b3J5IiwKQEAgLTkyLDE1ICs4OCwxMyBAQAogCiB0ZW1wbGF0ZSgiZ2VuZXJhdGVfdHlwZV9jb252ZXJzaW9uIikgewogICBhY3Rpb24odGFyZ2V0X25hbWUpIHsKLSAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gICAgcHlfc2NyaXB0ID0gZW5naW5lX2NvbnZlcnNpb25faGVhZGVyX2dlbmVyYXRvcl9zY3JpcHQKKyAgICBzY3JpcHQgPSBlbmdpbmVfY29udmVyc2lvbl9oZWFkZXJfZ2VuZXJhdG9yX3NjcmlwdAogCiAgICAgZGVwcyA9IGludm9rZXIuZGVwcwogCiAgICAgcHVibGljX2RlcHMgPSBlbmdpbmVfZGVwZW5kZW5jaWVzCiAKICAgICBpbnB1dHMgPSBbCi0gICAgICBweV9zY3JpcHQsCiAgICAgICBfZXh0ZW5kZWRfYXR0cmlidXRlc19maWxlLAogICAgICAgaW52b2tlci5nbG9iYWxfbmFtZXNfaWRsX2ZpbGUsCiAgICAgICAiLy9jb2JhbHQvYmluZGluZ3Mvc2hhcmVkL2lkbF9jb25kaXRpb25hbF9tYWNyb3MuaCIsCkBAIC0xMTMsOCArMTA3LDYgQEAKICAgICBvdXRwdXRzID0gWyAiJHtpbnZva2VyLm91dHB1dF9kaXJ9LyR7Z2VuZXJhdGVkX2JpbmRpbmdzX3ByZWZpeH1fZ2VuX3R5cGVfY29udmVyc2lvbi5oIiBdCiAKICAgICBhcmdzID0gWwotICAgICAgInB5dGhvbjIiLAotICAgICAgcmViYXNlX3BhdGgocHlfc2NyaXB0LCByb290X2J1aWxkX2RpciksCiAgICAgICAiLS1jYWNoZS1kaXJlY3RvcnkiLAogICAgICAgcmViYXNlX3BhdGgoaW52b2tlci5jYWNoZV9kaXJlY3RvcnksIHJvb3RfYnVpbGRfZGlyKSwKICAgICAgICItLW91dHB1dC1kaXIiLApAQCAtMTI5LDEzICsxMjEsOSBAQAogCiB0ZW1wbGF0ZSgiY29tcHV0ZV9nbG9iYWxfb2JqZWN0cyIpIHsKICAgYWN0aW9uKHRhcmdldF9uYW1lKSB7Ci0gICAgc2NyaXB0ID0gIi8vc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5IgotICAgIHB5X3NjcmlwdCA9ICIkYmluZGluZ3Nfc2NyaXB0c19kaXIvY29tcHV0ZV9nbG9iYWxfb2JqZWN0cy5weSIKKyAgICBzY3JpcHQgPSAiJGJpbmRpbmdzX3NjcmlwdHNfZGlyL2NvbXB1dGVfZ2xvYmFsX29iamVjdHMucHkiCiAKLSAgICBpbnB1dHMgPSBbCi0gICAgICBweV9zY3JpcHQsCi0gICAgICAiJGJpbmRpbmdzX3NjcmlwdHNfZGlyL3V0aWxpdGllcy5weSIsCi0gICAgXQorICAgIGlucHV0cyA9IFsgIiRiaW5kaW5nc19zY3JpcHRzX2Rpci91dGlsaXRpZXMucHkiIF0KICAgICBpbnB1dHMgKz0gaW52b2tlci5pZGxfZmlsZXMKIAogICAgIG91dHB1dHMgPSBbIGludm9rZXIuZ2xvYmFsX29iamVjdHNfZmlsZSBdCkBAIC0xNDQsOCArMTMyLDYgQEAKICAgICB3cml0ZV9maWxlKGlkbF9maWxlc19saXN0LCByZWJhc2VfcGF0aChpbnZva2VyLmlkbF9maWxlcywgcm9vdF9idWlsZF9kaXIpKQogCiAgICAgYXJncyA9IFsKLSAgICAgICJweXRob24yIiwKLSAgICAgIHJlYmFzZV9wYXRoKHB5X3NjcmlwdCwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgIi0taWRsLWZpbGVzLWxpc3QiLAogICAgICAgcmViYXNlX3BhdGgoaWRsX2ZpbGVzX2xpc3QsIHJvb3RfYnVpbGRfZGlyKSwKICAgICAgICItLSIsCkBAIC0xNTYsMTMgKzE0MiwxMSBAQAogCiB0ZW1wbGF0ZSgiY29tcHV0ZV9nbG9iYWxfY29uc3RydWN0b3JzX2lkbHMiKSB7CiAgIGFjdGlvbih0YXJnZXRfbmFtZSkgewotICAgIHNjcmlwdCA9ICIvL3N0YXJib2FyZC9idWlsZC9ydW5fYmFzaC5weSIKLSAgICBweV9zY3JpcHQgPSAiJGJpbmRpbmdzX3NjcmlwdHNfZGlyL2dlbmVyYXRlX2dsb2JhbF9jb25zdHJ1Y3RvcnMucHkiCisgICAgc2NyaXB0ID0gIiRiaW5kaW5nc19zY3JpcHRzX2Rpci9nZW5lcmF0ZV9nbG9iYWxfY29uc3RydWN0b3JzLnB5IgogCiAgICAgZGVwcyA9IGludm9rZXIuZGVwcwogCiAgICAgaW5wdXRzID0gWwotICAgICAgcHlfc2NyaXB0LAogICAgICAgIiRiaW5kaW5nc19zY3JpcHRzX2Rpci91dGlsaXRpZXMucHkiLAogICAgICAgaW52b2tlci5nbG9iYWxfb2JqZWN0c19maWxlLAogICAgIF0KQEAgLTE3OSw4ICsxNjMsNiBAQAogICAgIHdyaXRlX2ZpbGUoaWRsX2ZpbGVzX2xpc3QsIHJlYmFzZV9wYXRoKGludm9rZXIuaWRsX2ZpbGVzLCByb290X2J1aWxkX2RpcikpCiAKICAgICBhcmdzID0gWwotICAgICAgInB5dGhvbjIiLAotICAgICAgcmViYXNlX3BhdGgocHlfc2NyaXB0LCByb290X2J1aWxkX2RpciksCiAgICAgICAiLS1pZGwtZmlsZXMtbGlzdCIsCiAgICAgICByZWJhc2VfcGF0aChpZGxfZmlsZXNfbGlzdCwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgIi0tZ2xvYmFsLW9iamVjdHMtZmlsZSIsCkBAIC0xOTQsMTMgKzE3NiwxMSBAQAogCiB0ZW1wbGF0ZSgiY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbCIpIHsKICAgYWN0aW9uKHRhcmdldF9uYW1lKSB7Ci0gICAgc2NyaXB0ID0gIi8vc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5IgotICAgIHB5X3NjcmlwdCA9ICIkYmluZGluZ3Nfc2NyaXB0c19kaXIvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbC5weSIKKyAgICBzY3JpcHQgPSAiJGJpbmRpbmdzX3NjcmlwdHNfZGlyL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwucHkiCiAKICAgICBkZXBzID0gaW52b2tlci5kZXBzCiAKICAgICBpbnB1dHMgPSBbCi0gICAgICBweV9zY3JpcHQsCiAgICAgICAiJGJpbmRpbmdzX3NjcmlwdHNfZGlyL3V0aWxpdGllcy5weSIsCiAgICAgICBfZXh0ZW5kZWRfYXR0cmlidXRlc19maWxlLAogICAgICAgaW52b2tlci5nZW5lcmF0ZWRfaWRsX2ZpbGVzLApAQCAtMjIxLDggKzIwMSw2IEBACiAgICAgICAgIHJlYmFzZV9wYXRoKGludm9rZXIuZGVwZW5kZW5jeV9pZGxfZmlsZXMsIHJvb3RfYnVpbGRfZGlyKQogICAgIGRlcGVuZGVuY3lfaWRsX2ZpbGVzX2xpc3QgPSBzdHJpbmdfam9pbigiICIsIGRlcGVuZGVuY3lfaWRsX2ZpbGVzX3BhdGhzKQogICAgIGFyZ3MgPSBbCi0gICAgICAicHl0aG9uMiIsCi0gICAgICByZWJhc2VfcGF0aChweV9zY3JpcHQsIHJvb3RfYnVpbGRfZGlyKSwKICAgICAgICItLWNhY2hlLWRpcmVjdG9yeSIsCiAgICAgICByZWJhc2VfcGF0aChpbnZva2VyLmNhY2hlX2RpcmVjdG9yeSwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgIi0tcm9vdC1kaXJlY3RvcnkiLApAQCAtMjQ3LDIxICsyMjUsMTUgQEAKIAogdGVtcGxhdGUoImdlbmVyYXRlX2ludGVyZmFjZXNfaW5mb19vdmVyYWxsIikgewogICBhY3Rpb24odGFyZ2V0X25hbWUpIHsKLSAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gICAgcHlfc2NyaXB0ID0gIiRiaW5kaW5nc19zY3JpcHRzX2Rpci9jb21wdXRlX2ludGVyZmFjZXNfaW5mb19vdmVyYWxsLnB5IgorICAgIHNjcmlwdCA9ICIkYmluZGluZ3Nfc2NyaXB0c19kaXIvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9fb3ZlcmFsbC5weSIKIAogICAgIGRlcHMgPSBpbnZva2VyLmRlcHMKIAotICAgIGlucHV0cyA9IFsKLSAgICAgIHB5X3NjcmlwdCwKLSAgICAgIGludm9rZXIuaW5kaXZpZHVhbF9pbnRlcmZhY2VzX2ZpbGUsCi0gICAgXQorICAgIGlucHV0cyA9IFsgaW52b2tlci5pbmRpdmlkdWFsX2ludGVyZmFjZXNfZmlsZSBdCiAKICAgICBvdXRwdXRzID0gWyBpbnZva2VyLmNvbWJpbmVkX2ludGVyZmFjZXNfZmlsZSBdCiAKICAgICBhcmdzID0gWwotICAgICAgInB5dGhvbjIiLAotICAgICAgcmViYXNlX3BhdGgocHlfc2NyaXB0LCByb290X2J1aWxkX2RpciksCiAgICAgICAiLS0iLAogICAgICAgcmViYXNlX3BhdGgoaW52b2tlci5pbmRpdmlkdWFsX2ludGVyZmFjZXNfZmlsZSwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgcmViYXNlX3BhdGgoaW52b2tlci5jb21iaW5lZF9pbnRlcmZhY2VzX2ZpbGUsIHJvb3RfYnVpbGRfZGlyKSwKQEAgLTI3MSwzMiArMjQzLDIzIEBACiAKIHRlbXBsYXRlKCJjYWNoZV9sZXhfdGFibGVzIikgewogICBhY3Rpb24odGFyZ2V0X25hbWUpIHsKLSAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gICAgcHlfc2NyaXB0ID0gIiRiaW5kaW5nc19zY3JpcHRzX2Rpci9ibGlua19pZGxfcGFyc2VyLnB5IgorICAgIHNjcmlwdCA9ICIkYmluZGluZ3Nfc2NyaXB0c19kaXIvYmxpbmtfaWRsX3BhcnNlci5weSIKIAotICAgIGlucHV0cyA9IFsgcHlfc2NyaXB0IF0KLSAgICBpbnB1dHMgKz0gaWRsX2xleGVyX3BhcnNlcl9maWxlcwotCisgICAgaW5wdXRzID0gaWRsX2xleGVyX3BhcnNlcl9maWxlcwogICAgIG91dHB1dHMgPSBbCiAgICAgICAiJHtpbnZva2VyLm91dHB1dF9kaXJ9L2xleHRhYi5weSIsCiAgICAgICAiJHtpbnZva2VyLm91dHB1dF9kaXJ9L3BhcnNldGFiLnBpY2tsZSIsCiAgICAgXQogCi0gICAgYXJncyA9IFsKLSAgICAgICJweXRob24yIiwKLSAgICAgIHJlYmFzZV9wYXRoKHB5X3NjcmlwdCwgcm9vdF9idWlsZF9kaXIpLAotICAgICAgcmViYXNlX3BhdGgoaW52b2tlci5vdXRwdXRfZGlyLCByb290X2J1aWxkX2RpciksCi0gICAgXQorICAgIGFyZ3MgPSBbIHJlYmFzZV9wYXRoKGludm9rZXIub3V0cHV0X2Rpciwgcm9vdF9idWlsZF9kaXIpIF0KICAgfQogfQogCiB0ZW1wbGF0ZSgiY2FjaGVfdGVtcGxhdGVzIikgewogICBhY3Rpb24odGFyZ2V0X25hbWUpIHsKLSAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gICAgcHlfc2NyaXB0ID0gIi8vY29iYWx0L2JpbmRpbmdzL2NvZGVfZ2VuZXJhdG9yX2NvYmFsdC5weSIKKyAgICBzY3JpcHQgPSAiLy9jb2JhbHQvYmluZGluZ3MvY29kZV9nZW5lcmF0b3JfY29iYWx0LnB5IgogCiAgICAgaW5wdXRzID0gWwotICAgICAgcHlfc2NyaXB0LAogICAgICAgIi8vY29iYWx0L2JpbmRpbmdzL3BhdGhfZ2VuZXJhdG9yLnB5IiwKICAgICAgICIvL3RoaXJkX3BhcnR5L2ppbmphMi9fX2luaXRfXy5weSIsCiAgICAgICAiLy90aGlyZF9wYXJ0eS9tYXJrdXBzYWZlL19faW5pdF9fLnB5IiwgICMgamluamEyIGRlcApAQCAtMzMzLDggKzI5Niw2IEBACiAgICAgXQogCiAgICAgYXJncyA9IFsKLSAgICAgICJweXRob24yIiwKLSAgICAgIHJlYmFzZV9wYXRoKHB5X3NjcmlwdCwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgcmViYXNlX3BhdGgoIiR7aW52b2tlci5vdXRwdXRfZGlyfSIsIHJvb3RfYnVpbGRfZGlyKSwKICAgICAgIHJlYmFzZV9wYXRoKCIkZW5naW5lX3RlbXBsYXRlc19kaXIiLCByb290X2J1aWxkX2RpciksCiAgICAgICByZWJhc2VfcGF0aCgiJHtpbnZva2VyLm91dHB1dF9kaXJ9L2NhY2hlZF9qaW5qYV90ZW1wbGF0ZXMuc3RhbXAiLApkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2JsaW5rX3ZhcmlhYmxlcy5nbmkgYi9jb2JhbHQvYmluZGluZ3MvYmxpbmtfdmFyaWFibGVzLmduaQppbmRleCBkMTk5ODZkLi5lNWI0NzUyIDEwMDY0NAotLS0gYS9jb2JhbHQvYmluZGluZ3MvYmxpbmtfdmFyaWFibGVzLmduaQorKysgYi9jb2JhbHQvYmluZGluZ3MvYmxpbmtfdmFyaWFibGVzLmduaQpAQCAtMTIsMTIgKzEyLDggQEAKICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotIyBNaWdyYXRlZCBmcm9tIHRoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL3NjcmlwdHMuZ3lwaQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogYmluZGluZ3Nfc2NyaXB0c19kaXIgPSAiLy90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cyIKIAotIyBNaWdyYXRlZCBmcm9tIHRoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL3NjcmlwdHMuZ25pCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGlkbF9jb21waWxlcl9maWxlcyA9IFsKICAgIi8vdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaWRsX2NvbXBpbGVyLnB5IiwKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2NvZGVfZ2VuZXJhdG9yX2NvYmFsdC5weSBiL2NvYmFsdC9iaW5kaW5ncy9jb2RlX2dlbmVyYXRvcl9jb2JhbHQucHkKaW5kZXggOTMwNTkzMC4uZTgyZDFlYiAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL2NvZGVfZ2VuZXJhdG9yX2NvYmFsdC5weQorKysgYi9jb2JhbHQvYmluZGluZ3MvY29kZV9nZW5lcmF0b3JfY29iYWx0LnB5CkBAIC03Nyw5ICs3Nyw5IEBACiAgICAgICBpZiAoc3BlY2lhbCBpbiBvcGVyYXRpb24uc3BlY2lhbHMgYW5kIG9wZXJhdGlvbi5hcmd1bWVudHMgYW5kCiAgICAgICAgICAgc3RyKG9wZXJhdGlvbi5hcmd1bWVudHNbMF0uaWRsX3R5cGUpID09ICd1bnNpZ25lZCBsb25nJykpCiAgIGFzc2VydCBsZW4oc3BlY2lhbF9vcGVyYXRpb25zKSA8PSAxLCAoCi0gICAgICAnTXVsdGlwbGUgaW5kZXhlZCAlc3MgZGVmaW5lZCBvbiBpbnRlcmZhY2U6ICVzJyAlIChzcGVjaWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLm5hbWUpKQotICByZXR1cm4gc3BlY2lhbF9vcGVyYXRpb25zWzBdIGlmIGxlbihzcGVjaWFsX29wZXJhdGlvbnMpIGVsc2UgTm9uZQorICAgICAgJ011bHRpcGxlIGluZGV4ZWQgJXNzIGRlZmluZWQgb24gaW50ZXJmYWNlOiAlcycgJQorICAgICAgKHNwZWNpYWwsIGludGVyZmFjZS5uYW1lKSkKKyAgcmV0dXJuIHNwZWNpYWxfb3BlcmF0aW9uc1swXSBpZiBzcGVjaWFsX29wZXJhdGlvbnMgZWxzZSBOb25lCiAKIAogZGVmIGdldF9pbmRleGVkX3Byb3BlcnR5X2dldHRlcihpbnRlcmZhY2UpOgpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgc3RyKG9wZXJhdGlvbi5hcmd1bWVudHNbMF0uaWRsX3R5cGUpID09ICdET01TdHJpbmcnKSkKICAgYXNzZXJ0IGxlbihzcGVjaWFsX29wZXJhdGlvbnMpIDw9IDEsICgKICAgICAgICdNdWx0aXBsZSBuYW1lZCAlc3MgZGVmaW5lZCBvbiBpbnRlcmZhY2U6ICVzJyAlIChzcGVjaWFsLCBpbnRlcmZhY2UubmFtZSkpCi0gIHJldHVybiBzcGVjaWFsX29wZXJhdGlvbnNbMF0gaWYgbGVuKHNwZWNpYWxfb3BlcmF0aW9ucykgZWxzZSBOb25lCisgIHJldHVybiBzcGVjaWFsX29wZXJhdGlvbnNbMF0gaWYgc3BlY2lhbF9vcGVyYXRpb25zIGVsc2UgTm9uZQogCiAKIGRlZiBnZXRfbmFtZWRfcHJvcGVydHlfZ2V0dGVyKGludGVyZmFjZSk6CkBAIC0xODYsOCArMTg2LDkgQEAKICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAKICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlbXBsYXRlc19kaXIsIGluZm9fcHJvdmlkZXIsIGNhY2hlX2Rpciwgb3V0cHV0X2Rpcik6Ci0gICAgc3VwZXIoQ29kZUdlbmVyYXRvckNvYmFsdCwgc2VsZikuX19pbml0X18oCi0gICAgICAgICdDb2RlR2VuZXJhdG9yQ29iYWx0JywgaW5mb19wcm92aWRlciwgY2FjaGVfZGlyLCBvdXRwdXRfZGlyKQorICAgIHN1cGVyKENvZGVHZW5lcmF0b3JDb2JhbHQsCisgICAgICAgICAgc2VsZikuX19pbml0X18oJ0NvZGVHZW5lcmF0b3JDb2JhbHQnLCBpbmZvX3Byb3ZpZGVyLCBjYWNoZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcikKICAgICAjIENvZGVHZW5lcmF0b3JCYXNlIGluaXRpdGFsaXplcyB0aGlzIHdpdGggdGhlIHY4IHRlbXBsYXRlIHBhdGgsIHNvCiAgICAgIyByZWluaXRpYWxpemUgaXQgd2l0aCBjb2JhbHQncyB0ZW1wbGF0ZSBwYXRoCiAKQEAgLTE5NiwxNSArMTk3LDE0IEBACiAgICAgIyBjYWNoZSB3YXMgcHJlcG9wdWxhdGVkLgogICAgIHNlbGYuamluamFfZW52ID0gaW5pdGlhbGl6ZV9qaW5qYV9lbnYoY2FjaGVfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKHRlbXBsYXRlc19kaXIpKQotICAgIHNlbGYucGF0aF9idWlsZGVyID0gcGF0aF9nZW5lcmF0b3IuUGF0aEJ1aWxkZXIoCi0gICAgICAgIHNlbGYuZ2VuZXJhdGVkX2ZpbGVfcHJlZml4LCBzZWxmLmluZm9fcHJvdmlkZXIsIGNvYmFsdF9kaXIsIG91dHB1dF9kaXIpCisgICAgc2VsZi5wYXRoX2J1aWxkZXIgPSBwYXRoX2dlbmVyYXRvci5QYXRoQnVpbGRlcihzZWxmLmdlbmVyYXRlZF9maWxlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5mb19wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvYmFsdF9kaXIsIG91dHB1dF9kaXIpCiAKLSAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CiAgIGRlZiBnZW5lcmF0ZWRfZmlsZV9wcmVmaXgoc2VsZik6CiAgICAgIiIiVGhlIHByZWZpeCB0byBwcmVwZW5kIHRvIGFsbCBnZW5lcmF0ZWQgc291cmNlIGZpbGVzLiIiIgogICAgIHBhc3MKIAotICBAYWJjLmFic3RyYWN0cHJvcGVydHkKICAgZGVmIGV4cHJlc3Npb25fZ2VuZXJhdG9yKHNlbGYpOgogICAgICIiIkFuIGluc3RhbmNlIHRoYXQgaW1wbGVtZW50cyB0aGUgRXhwcmVzc2lvbkdlbmVyYXRvciBjbGFzcy4iIiIKICAgICBwYXNzCkBAIC0yMjEsMTAgKzIyMSw5IEBACiAgICAgICAgICAgZGVmaW5pdGlvbnMsIGRlZmluaXRpb25fbmFtZSwgZGVmaW5pdGlvbnMuaW50ZXJmYWNlc1tkZWZpbml0aW9uX25hbWVdKQogICAgIGlmIGRlZmluaXRpb25fbmFtZSBpbiBkZWZpbml0aW9ucy5kaWN0aW9uYXJpZXM6CiAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9kaWN0aW9uYXJ5X2NvZGUoCi0gICAgICAgICAgZGVmaW5pdGlvbnMsIGRlZmluaXRpb25fbmFtZSwKLSAgICAgICAgICBkZWZpbml0aW9ucy5kaWN0aW9uYXJpZXNbZGVmaW5pdGlvbl9uYW1lXSkKKyAgICAgICAgICBkZWZpbml0aW9uX25hbWUsIGRlZmluaXRpb25zLmRpY3Rpb25hcmllc1tkZWZpbml0aW9uX25hbWVdKQogICAgIGlmIGRlZmluaXRpb25fbmFtZSBpbiBkZWZpbml0aW9ucy5lbnVtZXJhdGlvbnM6Ci0gICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9lbnVtX2NvZGUoZGVmaW5pdGlvbnMsIGRlZmluaXRpb25fbmFtZSwKKyAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2VudW1fY29kZShkZWZpbml0aW9uX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMuZW51bWVyYXRpb25zW2RlZmluaXRpb25fbmFtZV0pCiAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgaXMgbm90IGluIElETCBkZWZpbml0aW9ucycgJSBkZWZpbml0aW9uX25hbWUpCiAKQEAgLTI0OSwxNSArMjQ4LDE0IEBACiAgICAgY2NfcGF0aCA9IHNlbGYucGF0aF9idWlsZGVyLkJpbmRpbmdzSW1wbGVtZW50YXRpb25QYXRoKGludGVyZmFjZV9uYW1lKQogICAgIHJldHVybiAoCiAgICAgICAgIChoZWFkZXJfcGF0aCwgaGVhZGVyX3RleHQpLAotICAgICAgICAoY2NfcGF0aCwgY2NfdGV4dCksKQorICAgICAgICAoY2NfcGF0aCwgY2NfdGV4dCksCisgICAgKQogCi0gIGRlZiBnZW5lcmF0ZV9kaWN0aW9uYXJ5X2NvZGUoc2VsZiwgZGVmaW5pdGlvbnMsIGRpY3Rpb25hcnlfbmFtZSwgZGljdGlvbmFyeSk6CisgIGRlZiBnZW5lcmF0ZV9kaWN0aW9uYXJ5X2NvZGUoc2VsZiwgZGljdGlvbmFyeV9uYW1lLCBkaWN0aW9uYXJ5KToKICAgICBoZWFkZXJfdGVtcGxhdGVfZmlsZW5hbWUgPSAnZGljdGlvbmFyeS5oLnRlbXBsYXRlJwogICAgIGNvbnZlcnNpb25fdGVtcGxhdGVfZmlsZW5hbWUgPSAnZGljdGlvbmFyeS1jb252ZXJzaW9uLmNjLnRlbXBsYXRlJwotICAgIGltcGxlbWVudGF0aW9uX2NvbnRleHQgPSBzZWxmLmJ1aWxkX2RpY3Rpb25hcnlfY29udGV4dCgKLSAgICAgICAgZGljdGlvbmFyeSwgZGVmaW5pdGlvbnMsIEZhbHNlKQotICAgIGNvbnZlcnNpb25fY29udGV4dCA9IHNlbGYuYnVpbGRfZGljdGlvbmFyeV9jb250ZXh0KGRpY3Rpb25hcnksIGRlZmluaXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgaW1wbGVtZW50YXRpb25fY29udGV4dCA9IHNlbGYuYnVpbGRfZGljdGlvbmFyeV9jb250ZXh0KGRpY3Rpb25hcnksIEZhbHNlKQorICAgIGNvbnZlcnNpb25fY29udGV4dCA9IHNlbGYuYnVpbGRfZGljdGlvbmFyeV9jb250ZXh0KGRpY3Rpb25hcnksIFRydWUpCiAKICAgICBoZWFkZXJfdGV4dCA9IHNlbGYucmVuZGVyX3RlbXBsYXRlKGhlYWRlcl90ZW1wbGF0ZV9maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uX2NvbnRleHQpCkBAIC0yNzAsOSArMjY4LDEwIEBACiAgICAgICAgICAgICBkaWN0aW9uYXJ5X25hbWUpKQogICAgIHJldHVybiAoCiAgICAgICAgIChoZWFkZXJfcGF0aCwgaGVhZGVyX3RleHQpLAotICAgICAgICAoY29udmVyc2lvbl9pbXBsX3BhdGgsIGNvbnZlcnNpb25fdGV4dCksKQorICAgICAgICAoY29udmVyc2lvbl9pbXBsX3BhdGgsIGNvbnZlcnNpb25fdGV4dCksCisgICAgKQogCi0gIGRlZiBnZW5lcmF0ZV9lbnVtX2NvZGUoc2VsZiwgZGVmaW5pdGlvbnMsIGVudW1lcmF0aW9uX25hbWUsIGVudW1lcmF0aW9uKToKKyAgZGVmIGdlbmVyYXRlX2VudW1fY29kZShzZWxmLCBlbnVtZXJhdGlvbl9uYW1lLCBlbnVtZXJhdGlvbik6CiAgICAgaGVhZGVyX3RlbXBsYXRlX2ZpbGVuYW1lID0gJ2VudW1lcmF0aW9uLmgudGVtcGxhdGUnCiAgICAgY29udmVyc2lvbl90ZW1wbGF0ZV9maWxlbmFtZSA9ICdlbnVtZXJhdGlvbi1jb252ZXJzaW9uLmNjLnRlbXBsYXRlJwogICAgIGNvbnRleHRfYnVpbGRlciA9IENvbnRleHRCdWlsZGVyKHNlbGYuaW5mb19wcm92aWRlcikKQEAgLTI5Niw3ICsyOTUsOCBAQAogICAgICkKICAgICByZXR1cm4gKAogICAgICAgICAoaGVhZGVyX3BhdGgsIGhlYWRlcl90ZXh0KSwKLSAgICAgICAgKGNvbnZlcnNpb25faW1wbF9wYXRoLCBjb252ZXJzaW9uX3RleHQpLCkKKyAgICAgICAgKGNvbnZlcnNpb25faW1wbF9wYXRoLCBjb252ZXJzaW9uX3RleHQpLAorICAgICkKIAogICBkZWYgZ2VuZXJhdGVfY29udmVyc2lvbl9jb2RlKHNlbGYpOgogICAgIGVudW1lcmF0aW9ucyA9IGxpc3Qoc2VsZi5pbmZvX3Byb3ZpZGVyLmVudW1lcmF0aW9ucy5rZXlzKCkpCkBAIC0zNzgsOSArMzc4LDEwIEBACiAgICAgICAgICAgICBzZWxmLnBhdGhfYnVpbGRlci5OYW1lc3BhY2VDb21wb25lbnRzKGludGVyZmFjZV9uYW1lKSkKICAgICAgICAgY29uZGl0aW9uYWwgPSBpbnRlcmZhY2VfaW5mb1snY29uZGl0aW9uYWwnXQogICAgICAgICBpc19jYWxsYmFja19pbnRlcmZhY2UgPSBpbnRlcmZhY2VfbmFtZSBpbiBJZGxUeXBlLmNhbGxiYWNrX2ludGVyZmFjZXMKKyAgICAgICAgaW1wbF9uYW1lID0gaW50ZXJmYWNlX2luZm8uZ2V0KCdpbXBsZW1lbnRlZF9hcycpIG9yIGludGVyZmFjZV9uYW1lCiAgICAgICAgIHJlZmVyZW5jZWRfY2xhc3Nlcy5hcHBlbmQoewogICAgICAgICAgICAgJ2Z1bGx5X3F1YWxpZmllZF9uYW1lJzoKLSAgICAgICAgICAgICAgICAnJXM6OiVzJyAlIChuYW1lc3BhY2UsIGludGVyZmFjZV9uYW1lKSwKKyAgICAgICAgICAgICAgICAnJXM6OiVzJyAlIChuYW1lc3BhY2UsIGltcGxfbmFtZSksCiAgICAgICAgICAgICAnaW5jbHVkZSc6CiAgICAgICAgICAgICAgICAgc2VsZi5wYXRoX2J1aWxkZXIuSW1wbGVtZW50YXRpb25IZWFkZXJQYXRoKGludGVyZmFjZV9uYW1lKSwKICAgICAgICAgICAgICdjb25kaXRpb25hbCc6CkBAIC0zOTEsOCArMzkyLDggQEAKICAgICAgICAgaWYgaW5jbHVkZV9iaW5kaW5nc19jbGFzczoKICAgICAgICAgICByZWZlcmVuY2VkX2NsYXNzZXMuYXBwZW5kKHsKICAgICAgICAgICAgICAgJ2Z1bGx5X3F1YWxpZmllZF9uYW1lJzoKLSAgICAgICAgICAgICAgICAgICclczo6JXMnICUgKG5hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkJpbmRpbmdzQ2xhc3MoaW50ZXJmYWNlX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICclczo6JXMnICUKKyAgICAgICAgICAgICAgICAgIChuYW1lc3BhY2UsIHNlbGYucGF0aF9idWlsZGVyLkJpbmRpbmdzQ2xhc3MoaW1wbF9uYW1lKSksCiAgICAgICAgICAgICAgICdpbmNsdWRlJzoKICAgICAgICAgICAgICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkJpbmRpbmdzSGVhZGVySW5jbHVkZVBhdGgoaW50ZXJmYWNlX25hbWUpLAogICAgICAgICAgICAgICAnY29uZGl0aW9uYWwnOgpAQCAtNDA2LDcgKzQwNyw4IEBACiAgICAgIiIiU2hhcmVkIHN0dWZmLiIiIgogICAgICMgTWFrZSBzdXJlIGV4dGVuc2lvbiBpcyAucHksIG5vdCAucHljIG9yIC5weW8sIHNvIGRvZXNuJ3QgZGVwZW5kIG9uIGNhY2hpbmcKICAgICBtb2R1bGVfcGF0aF9weW5hbWUgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIG1vZHVsZV9wYXRoLCBvcy5wYXRoLnNwbGl0ZXh0KG1vZHVsZV9maWxlbmFtZSlbMF0gKyAnLnB5JykKKyAgICAgICAgbW9kdWxlX3BhdGgsCisgICAgICAgIG9zLnBhdGguc3BsaXRleHQobW9kdWxlX2ZpbGVuYW1lKVswXSArICcucHknKQogCiAgICAgIyBFbnN1cmUgdGhhdCBwb3NpeCBmb3J3YXJkIHNsYXNoZXMgYXJlIHVzZWQKICAgICBjb250ZXh0ID0gewpAQCAtNDIxLDcgKzQyMyw3IEBACiAgICAgfQogICAgIHJldHVybiBjb250ZXh0CiAKLSAgZGVmIGJ1aWxkX2RpY3Rpb25hcnlfY29udGV4dChzZWxmLCBkaWN0aW9uYXJ5LCBkZWZpbml0aW9ucywgZm9yX2NvbnZlcnNpb24pOgorICBkZWYgYnVpbGRfZGljdGlvbmFyeV9jb250ZXh0KHNlbGYsIGRpY3Rpb25hcnksIGZvcl9jb252ZXJzaW9uKToKICAgICBjb250ZXh0X2J1aWxkZXIgPSBDb250ZXh0QnVpbGRlcihzZWxmLmluZm9fcHJvdmlkZXIpCiAgICAgY29udGV4dCA9IHsKICAgICAgICAgJ2NsYXNzX25hbWUnOgpAQCAtNDQ1LDggKzQ0Nyw4IEBACiAgICAgcmVmZXJlbmNlZF9jbGFzc19jb250ZXh0cyA9IHNlbGYucmVmZXJlbmNlZF9jbGFzc19jb250ZXh0cygKICAgICAgICAgcmVmZXJlbmNlZF9pbnRlcmZhY2VfbmFtZXMsIGZvcl9jb252ZXJzaW9uKQogCi0gICAgY29udGV4dFsnaW5jbHVkZXMnXSA9IHNvcnRlZChpbnRlcmZhY2VbJ2luY2x1ZGUnXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGludGVyZmFjZSBpbiByZWZlcmVuY2VkX2NsYXNzX2NvbnRleHRzKQorICAgIGNvbnRleHRbJ2luY2x1ZGVzJ10gPSBzb3J0ZWQoCisgICAgICAgIGludGVyZmFjZVsnaW5jbHVkZSddIGZvciBpbnRlcmZhY2UgaW4gcmVmZXJlbmNlZF9jbGFzc19jb250ZXh0cykKICAgICBjb250ZXh0Wydmb3J3YXJkX2RlY2xhcmF0aW9ucyddID0gc29ydGVkKAogICAgICAgICByZWZlcmVuY2VkX2NsYXNzX2NvbnRleHRzLCBrZXk9bGFtYmRhIHg6IHhbJ2Z1bGx5X3F1YWxpZmllZF9uYW1lJ10pCiAgICAgY29udGV4dFsnY29tcG9uZW50cyddID0gc2VsZi5wYXRoX2J1aWxkZXIuTmFtZXNwYWNlQ29tcG9uZW50cygKQEAgLTQ1NSwyNyArNDU3LDI5IEBACiAKICAgZGVmIGJ1aWxkX2ludGVyZmFjZV9jb250ZXh0KHNlbGYsIGludGVyZmFjZSwgaW50ZXJmYWNlX2luZm8sIGRlZmluaXRpb25zKToKICAgICBjb250ZXh0X2J1aWxkZXIgPSBDb250ZXh0QnVpbGRlcihzZWxmLmluZm9fcHJvdmlkZXIpCisgICAgaW1wbF9jbGFzcyA9IGludGVyZmFjZS5leHRlbmRlZF9hdHRyaWJ1dGVzLmdldCgnSW1wbGVtZW50ZWRBcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UubmFtZSkKIAogICAgIGNvbnRleHQgPSB7CiAgICAgICAgICMgUGFyYW1ldGVycyB1c2VkIGZvciB0ZW1wbGF0ZSByZW5kZXJpbmcuCiAgICAgICAgICd0b2RheSc6CiAgICAgICAgICAgICBkYXRlLnRvZGF5KCksCiAgICAgICAgICdiaW5kaW5nX2NsYXNzJzoKLSAgICAgICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkJpbmRpbmdzQ2xhc3MoaW50ZXJmYWNlLm5hbWUpLAorICAgICAgICAgICAgc2VsZi5wYXRoX2J1aWxkZXIuQmluZGluZ3NDbGFzcyhpbXBsX2NsYXNzKSwKICAgICAgICAgJ2Z1bGx5X3F1YWxpZmllZF9iaW5kaW5nX2NsYXNzJzoKLSAgICAgICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkZ1bGxCaW5kaW5nc0NsYXNzTmFtZShpbnRlcmZhY2UubmFtZSksCisgICAgICAgICAgICBzZWxmLnBhdGhfYnVpbGRlci5GdWxsQmluZGluZ3NDbGFzc05hbWUoaW1wbF9jbGFzcywgaW50ZXJmYWNlLm5hbWUpLAogICAgICAgICAnaGVhZGVyX2ZpbGUnOgogICAgICAgICAgICAgc2VsZi5wYXRoX2J1aWxkZXIuQmluZGluZ3NIZWFkZXJJbmNsdWRlUGF0aChpbnRlcmZhY2UubmFtZSksCiAgICAgICAgICdpbXBsX2NsYXNzJzoKLSAgICAgICAgICAgIGludGVyZmFjZS5uYW1lLAorICAgICAgICAgICAgaW1wbF9jbGFzcywKICAgICAgICAgJ2Z1bGx5X3F1YWxpZmllZF9pbXBsX2NsYXNzJzoKLSAgICAgICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkZ1bGxDbGFzc05hbWUoaW50ZXJmYWNlLm5hbWUpLAorICAgICAgICAgICAgc2VsZi5wYXRoX2J1aWxkZXIuRnVsbENsYXNzTmFtZShpbXBsX2NsYXNzLCBpbnRlcmZhY2UubmFtZSksCiAgICAgICAgICdpbnRlcmZhY2VfbmFtZSc6CiAgICAgICAgICAgICBpbnRlcmZhY2UubmFtZSwKICAgICAgICAgJ2lzX2dsb2JhbF9pbnRlcmZhY2UnOgogICAgICAgICAgICAgaXNfZ2xvYmFsX2ludGVyZmFjZShpbnRlcmZhY2UpLAotICAgICAgICAnaGFzX2ludGVyZmFjZV9vYmplY3QnOiAoCi0gICAgICAgICAgICAnTm9JbnRlcmZhY2VPYmplY3QnIG5vdCBpbiBpbnRlcmZhY2UuZXh0ZW5kZWRfYXR0cmlidXRlcyksCisgICAgICAgICdoYXNfaW50ZXJmYWNlX29iamVjdCc6ICgnTm9JbnRlcmZhY2VPYmplY3QnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaW4gaW50ZXJmYWNlLmV4dGVuZGVkX2F0dHJpYnV0ZXMpLAogICAgICAgICAnY29uZGl0aW9uYWwnOgogICAgICAgICAgICAgaW50ZXJmYWNlLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KCdDb25kaXRpb25hbCcsIE5vbmUpLAogICAgIH0KQEAgLTU0Myw5ICs1NDcsMTIgQEAKICAgICAgICAgICBpbnRlcmZhY2VfbmFtZSBub3QgaW4gSWRsVHlwZS5lbnVtcyBhbmQKICAgICAgICAgICBub3QgaW50ZXJmYWNlc19pbmZvW2ludGVyZmFjZV9uYW1lXVsndW5zdXBwb3J0ZWQnXSBhbmQKICAgICAgICAgICBub3QgaW50ZXJmYWNlc19pbmZvW2ludGVyZmFjZV9uYW1lXVsnaXNfZGljdGlvbmFyeSddKToKKyAgICAgICAgaW50ZXJmYWNlX2luZm8gPSBpbnRlcmZhY2VzX2luZm9baW50ZXJmYWNlX25hbWVdCiAgICAgICAgIGFsbF9pbnRlcmZhY2VzLmFwcGVuZCh7CisgICAgICAgICAgICAnaW1wbF9uYW1lJzogKGludGVyZmFjZV9pbmZvLmdldCgnaW1wbGVtZW50ZWRfYXMnKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfbmFtZSksCiAgICAgICAgICAgICAnbmFtZSc6IGludGVyZmFjZV9uYW1lLAotICAgICAgICAgICAgJ2NvbmRpdGlvbmFsJzogaW50ZXJmYWNlc19pbmZvW2ludGVyZmFjZV9uYW1lXVsnY29uZGl0aW9uYWwnXSwKKyAgICAgICAgICAgICdjb25kaXRpb25hbCc6IGludGVyZmFjZV9pbmZvWydjb25kaXRpb25hbCddLAogICAgICAgICB9KQogCiAgICAgY29udGV4dFsnaW1wbGVtZW50YXRpb25faW5jbHVkZXMnXSA9IHNvcnRlZCgKQEAgLTU5OSwxMSArNjA2LDExIEBACiAgICAgY29udGV4dFsnc3VwcG9ydHNfaW5kZXhlZF9wcm9wZXJ0aWVzJ10gPSAoCiAgICAgICAgIGNvbnRleHRbJ2luZGV4ZWRfcHJvcGVydHlfZ2V0dGVyJ10gb3IKICAgICAgICAgY29udGV4dFsnaW5kZXhlZF9wcm9wZXJ0eV9zZXR0ZXInXSkKLSAgICBjb250ZXh0WydzdXBwb3J0c19uYW1lZF9wcm9wZXJ0aWVzJ10gPSAoY29udGV4dFsnbmFtZWRfcHJvcGVydHlfc2V0dGVyJ10gb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnbmFtZWRfcHJvcGVydHlfZ2V0dGVyJ10gb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnbmFtZWRfcHJvcGVydHlfZGVsZXRlciddKQorICAgIGNvbnRleHRbJ3N1cHBvcnRzX25hbWVkX3Byb3BlcnRpZXMnXSA9ICgKKyAgICAgICAgY29udGV4dFsnbmFtZWRfcHJvcGVydHlfc2V0dGVyJ10gb3IgY29udGV4dFsnbmFtZWRfcHJvcGVydHlfZ2V0dGVyJ10gb3IKKyAgICAgICAgY29udGV4dFsnbmFtZWRfcHJvcGVydHlfZGVsZXRlciddKQogCi0gICAgbmFtZXMgPSBzb3J0ZWQoW2tleSBmb3Iga2V5IGluIGludGVyZmFjZXNfaW5mb10pCisgICAgbmFtZXMgPSBzb3J0ZWQobGlzdChpbnRlcmZhY2VzX2luZm8pKQogICAgIGNvbnRleHRbJ3VuaXF1ZV9pZCddID0gbmFtZXMuaW5kZXgoaW50ZXJmYWNlLm5hbWUpCiAKICAgICByZXR1cm4gY29udGV4dApAQCAtNjE5LDcgKzYyNiw3IEBACiAgICAgdGVtcGxhdGVzX2RpciA9IGFyZ3ZbMl0KICAgICBkdW1teV9maWxlbmFtZSA9IGFyZ3ZbM10KICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgcHJpbnQgJ1VzYWdlOiAlcyBDQUNIRV9ESVIgVEVNUExBVEVTX0RJUiBEVU1NWV9GSUxFTkFNRScgJSBhcmd2WzBdCisgICAgcHJpbnQoJ1VzYWdlOiAlcyBDQUNIRV9ESVIgVEVNUExBVEVTX0RJUiBEVU1NWV9GSUxFTkFNRScgJSBhcmd2WzBdKQogICAgIHJldHVybiAxCiAKICAgIyBEZWxldGUgYWxsIGppbmphMiAuY2FjaGUgZmlsZXMsIHNpbmNlIHRoZXkgd2lsbCBnZXQgcmVnZW5lcmF0ZWQgYW55d2F5cy4KQEAgLTYzNiwxNSArNjQzLDEzIEBACiAgICMgY2FjaGUgaGVyZSBhbmQgd2hlbiBpdCdzIHJlYWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KICAgamluamFfZW52ID0gaW5pdGlhbGl6ZV9qaW5qYV9lbnYoY2FjaGVfZGlyLCBvcy5wYXRoLmFic3BhdGgodGVtcGxhdGVzX2RpcikpCiAgIHRlbXBsYXRlX2ZpbGVuYW1lcyA9IFsKLSAgICAgIGZpbGVuYW1lCi0gICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcih0ZW1wbGF0ZXNfZGlyKQorICAgICAgZmlsZW5hbWUgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIodGVtcGxhdGVzX2RpcikKICAgICAgICMgU2tpcCAuc3ZuLCBkaXJlY3RvcmllcywgZXRjLgogICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcudGVtcGxhdGUnKSkKICAgXQogICBhc3NlcnQgdGVtcGxhdGVfZmlsZW5hbWVzLCAnRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIHRlbXBsYXRlIHRvIGJlIGNhY2hlZC4nCiAgIHNoYXJlZF90ZW1wbGF0ZV9maWxlbmFtZXMgPSBbCi0gICAgICBmaWxlbmFtZQotICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoU0hBUkVEX1RFTVBMQVRFU19ESVIpCisgICAgICBmaWxlbmFtZSBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihTSEFSRURfVEVNUExBVEVTX0RJUikKICAgICAgICMgU2tpcCAuc3ZuLCBkaXJlY3RvcmllcywgZXRjLgogICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcudGVtcGxhdGUnKSkKICAgXQpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2NvbnRleHRzLnB5IGIvY29iYWx0L2JpbmRpbmdzL2NvbnRleHRzLnB5CmluZGV4IGI2MWNhNzMuLmM2MWIzY2YgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iaW5kaW5ncy9jb250ZXh0cy5weQorKysgYi9jb2JhbHQvYmluZGluZ3MvY29udGV4dHMucHkKQEAgLTE5LDE1ICsxOSwxNSBAQAogIiIiCiAKIGltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Citmcm9tIGNvYmFsdC5iaW5kaW5ncy5uYW1lX2NvbnZlcnNpb24gaW1wb3J0IGNhcGl0YWxpemVfZnVuY3Rpb25fbmFtZQorZnJvbSBjb2JhbHQuYmluZGluZ3MubmFtZV9jb252ZXJzaW9uIGltcG9ydCBjb252ZXJ0X3RvX2NvYmFsdF9jb25zdGFudF9uYW1lCitmcm9tIGNvYmFsdC5iaW5kaW5ncy5uYW1lX2NvbnZlcnNpb24gaW1wb3J0IGNvbnZlcnRfdG9fY29iYWx0X2VudW1lcmF0aW9uX3ZhbHVlCitmcm9tIGNvYmFsdC5iaW5kaW5ncy5uYW1lX2NvbnZlcnNpb24gaW1wb3J0IGNvbnZlcnRfdG9fY29iYWx0X25hbWUKK2Zyb20gY29iYWx0LmJpbmRpbmdzLm5hbWVfY29udmVyc2lvbiBpbXBvcnQgZ2V0X2ludGVyZmFjZV9uYW1lCitmcm9tIGNvYmFsdC5iaW5kaW5ncy5vdmVybG9hZF9jb250ZXh0IGltcG9ydCBnZXRfb3ZlcmxvYWRfY29udGV4dHMKIGZyb20gaWRsX2RlZmluaXRpb25zIGltcG9ydCBJZGxUeXBlZGVmCiBmcm9tIGlkbF90eXBlcyBpbXBvcnQgSWRsUHJvbWlzZVR5cGUKIGZyb20gaWRsX3R5cGVzIGltcG9ydCBJZGxTZXF1ZW5jZVR5cGUKLWZyb20gbmFtZV9jb252ZXJzaW9uIGltcG9ydCBjYXBpdGFsaXplX2Z1bmN0aW9uX25hbWUKLWZyb20gbmFtZV9jb252ZXJzaW9uIGltcG9ydCBjb252ZXJ0X3RvX2NvYmFsdF9jb25zdGFudF9uYW1lCi1mcm9tIG5hbWVfY29udmVyc2lvbiBpbXBvcnQgY29udmVydF90b19jb2JhbHRfZW51bWVyYXRpb25fdmFsdWUKLWZyb20gbmFtZV9jb252ZXJzaW9uIGltcG9ydCBjb252ZXJ0X3RvX2NvYmFsdF9uYW1lCi1mcm9tIG5hbWVfY29udmVyc2lvbiBpbXBvcnQgZ2V0X2ludGVyZmFjZV9uYW1lCi1mcm9tIG92ZXJsb2FkX2NvbnRleHQgaW1wb3J0IGdldF9vdmVybG9hZF9jb250ZXh0cwogZnJvbSB2OF9hdHRyaWJ1dGVzIGltcG9ydCBpc19jb25zdHJ1Y3Rvcl9hdHRyaWJ1dGUKIGZyb20gdjhfaW50ZXJmYWNlIGltcG9ydCBtZXRob2Rfb3ZlcmxvYWRzX2J5X25hbWUKIGltcG9ydCB2OF91dGlsaXRpZXMKQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgIGVsaWYgZXh0ZW5kZWRfYXR0cmlidXRlcy5nZXQoJ1RyZWF0VW5kZWZpbmVkQXMnLCAnJykgPT0gJ0VtcHR5U3RyaW5nJzoKICAgICAgIGZsYWdzLmFwcGVuZCgna0NvbnZlcnNpb25GbGFnVHJlYXRVbmRlZmluZWRBc0VtcHR5U3RyaW5nJykKIAotICBpZiBleHRlbmRlZF9hdHRyaWJ1dGVzLmhhc19rZXkoJ0NsYW1wJyk6CisgIGlmICdDbGFtcCcgaW4gZXh0ZW5kZWRfYXR0cmlidXRlczoKICAgICBmbGFncy5hcHBlbmQoJ2tDb252ZXJzaW9uRmxhZ0NsYW1wZWQnKQogCiAgIGlmIGlzX29iamVjdF90eXBlKGlkbF90eXBlKToKQEAgLTI2Miw2ICsyNjIsMTMgQEAKICAgICByZXR1cm4gJzo6Y29iYWx0OjpzY3JpcHQ6OlVuaW9uVHlwZSVkPCVzID4nICUgKGxlbihjb2JhbHRfdHlwZXMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKGNvYmFsdF90eXBlcykpCiAKKyAgZGVmIGdldF9pbXBsZW1lbnRlZF9pbnRlcmZhY2VfbmFtZShzZWxmLCBpZGxfdHlwZSk6CisgICAgaW50ZXJmYWNlX25hbWUgPSBnZXRfaW50ZXJmYWNlX25hbWUoaWRsX3R5cGUpCisgICAgaW50ZXJmYWNlX2luZm8gPSBzZWxmLmluZm9fcHJvdmlkZXIuaW50ZXJmYWNlc19pbmZvLmdldChpbnRlcmZhY2VfbmFtZSkKKyAgICBuYW1lID0gKGludGVyZmFjZV9pbmZvWydpbXBsZW1lbnRlZF9hcyddCisgICAgICAgICAgICBpZiBpbnRlcmZhY2VfaW5mbyBlbHNlIE5vbmUpIG9yIGludGVyZmFjZV9uYW1lCisgICAgcmV0dXJuIG5hbWUKKwogICBkZWYgaWRsX3R5cGVfdG9fY29iYWx0X3R5cGUoc2VsZiwgaWRsX3R5cGUpOgogICAgICIiIk1hcCBJREwgdHlwZSB0byBDKysgdHlwZS4iIiIKICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoaWRsX3R5cGUsIElkbFR5cGVkZWYpCkBAIC0yNzIsOSArMjc5LDEwIEBACiAgICAgICBjb2JhbHRfdHlwZSA9IGlkbF9zdHJpbmdfdHlwZV90b19jb2JhbHQoaWRsX3R5cGUpCiAgICAgZWxpZiBpZGxfdHlwZS5pc19jYWxsYmFja19pbnRlcmZhY2U6CiAgICAgICBjb2JhbHRfdHlwZSA9ICc6OmNvYmFsdDo6c2NyaXB0OjpDYWxsYmFja0ludGVyZmFjZVRyYWl0czwlcyA+JyAlICgKLSAgICAgICAgICBnZXRfaW50ZXJmYWNlX25hbWUoaWRsX3R5cGUpKQorICAgICAgICAgIHNlbGYuZ2V0X2ltcGxlbWVudGVkX2ludGVyZmFjZV9uYW1lKGlkbF90eXBlKSkKICAgICBlbGlmIGlkbF90eXBlLmlzX2ludGVyZmFjZV90eXBlOgotICAgICAgY29iYWx0X3R5cGUgPSAnc2NvcGVkX3JlZnB0cjwlcz4nICUgZ2V0X2ludGVyZmFjZV9uYW1lKGlkbF90eXBlKQorICAgICAgY29iYWx0X3R5cGUgPSAnc2NvcGVkX3JlZnB0cjwlcz4nICUgc2VsZi5nZXRfaW1wbGVtZW50ZWRfaW50ZXJmYWNlX25hbWUoCisgICAgICAgICAgaWRsX3R5cGUpCiAgICAgZWxpZiBpZGxfdHlwZS5pc191bmlvbl90eXBlOgogICAgICAgY29iYWx0X3R5cGUgPSBzZWxmLmlkbF91bmlvbl90eXBlX3RvX2NvYmFsdChpZGxfdHlwZSkKICAgICBlbGlmIGlkbF90eXBlLmlzX2VudW06CkBAIC0zMDYsNyArMzE0LDggQEAKICAgICAiIiJNYXAgdHlwZSBvZiBJREwgVHlwZWRPYmplY3QgdG8gQysrIHR5cGUuIiIiCiAgICAgaWRsX3R5cGUgPSBzZWxmLnJlc29sdmVfdHlwZWRlZih0eXBlZF9vYmplY3QuaWRsX3R5cGUpCiAgICAgaWYgaWRsX3R5cGUuaXNfY2FsbGJhY2tfZnVuY3Rpb246Ci0gICAgICBjb2JhbHRfdHlwZSA9IGludGVyZmFjZS5uYW1lICsgJzo6JyArIGdldF9pbnRlcmZhY2VfbmFtZShpZGxfdHlwZSkKKyAgICAgIGNvYmFsdF90eXBlID0gaW50ZXJmYWNlLm5hbWUgKyAnOjonICsgc2VsZi5nZXRfaW1wbGVtZW50ZWRfaW50ZXJmYWNlX25hbWUoCisgICAgICAgICAgaWRsX3R5cGUpCiAgICAgZWxzZToKICAgICAgIGNvYmFsdF90eXBlID0gc2VsZi5pZGxfdHlwZV90b19jb2JhbHRfdHlwZShpZGxfdHlwZSkKICAgICBpZiBnZXRhdHRyKHR5cGVkX29iamVjdCwgJ2lzX3ZhcmlhZGljJywgRmFsc2UpOgpAQCAtMzc5LDggKzM4OCw5IEBACiAgICAgY29udGV4dCA9IHsKICAgICAgICAgJ2NhbGxfd2l0aCc6CiAgICAgICAgICAgICBpbnRlcmZhY2UuZXh0ZW5kZWRfYXR0cmlidXRlcy5nZXQoJ0NvbnN0cnVjdG9yQ2FsbFdpdGgnLCBOb25lKSwKLSAgICAgICAgJ3JhaXNlc19leGNlcHRpb24nOiAoaW50ZXJmYWNlLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KAotICAgICAgICAgICAgJ1JhaXNlc0V4Y2VwdGlvbicsIE5vbmUpID09ICdDb25zdHJ1Y3RvcicpLAorICAgICAgICAncmFpc2VzX2V4Y2VwdGlvbic6CisgICAgICAgICAgICAoaW50ZXJmYWNlLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KCdSYWlzZXNFeGNlcHRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSA9PSAnQ29uc3RydWN0b3InKSwKICAgICB9CiAKICAgICBjb250ZXh0LnVwZGF0ZShzZWxmLnBhcnRpYWxfY29udGV4dChpbnRlcmZhY2UsIGNvbnN0cnVjdG9yKSkKQEAgLTM4OSwyOCArMzk5LDE3IEBACiAgIGRlZiBtZXRob2RfY29udGV4dChzZWxmLCBpbnRlcmZhY2UsIG9wZXJhdGlvbik6CiAgICAgIiIiQ3JlYXRlIHRlbXBsYXRlIHZhbHVlcyBmb3IgZ2VuZXJhdGluZyBtZXRob2QgYmluZGluZ3MuIiIiCiAgICAgY29udGV4dCA9IHsKLSAgICAgICAgJ2lkbF9uYW1lJzoKLSAgICAgICAgICAgIG9wZXJhdGlvbi5uYW1lLAotICAgICAgICAnbmFtZSc6Ci0gICAgICAgICAgICBjYXBpdGFsaXplX2Z1bmN0aW9uX25hbWUob3BlcmF0aW9uLm5hbWUpLAotICAgICAgICAndHlwZSc6Ci0gICAgICAgICAgICBzZWxmLnR5cGVkX29iamVjdF90b19jb2JhbHRfdHlwZShpbnRlcmZhY2UsIG9wZXJhdGlvbiksCi0gICAgICAgICdpc19zdGF0aWMnOgotICAgICAgICAgICAgb3BlcmF0aW9uLmlzX3N0YXRpYywKLSAgICAgICAgJ29uX2luc3RhbmNlJzoKLSAgICAgICAgICAgIHY4X3V0aWxpdGllcy5vbl9pbnN0YW5jZShpbnRlcmZhY2UsIG9wZXJhdGlvbiksCi0gICAgICAgICdvbl9pbnRlcmZhY2UnOgotICAgICAgICAgICAgdjhfdXRpbGl0aWVzLm9uX2ludGVyZmFjZShpbnRlcmZhY2UsIG9wZXJhdGlvbiksCi0gICAgICAgICdvbl9wcm90b3R5cGUnOgotICAgICAgICAgICAgdjhfdXRpbGl0aWVzLm9uX3Byb3RvdHlwZShpbnRlcmZhY2UsIG9wZXJhdGlvbiksCi0gICAgICAgICdjYWxsX3dpdGgnOgotICAgICAgICAgICAgb3BlcmF0aW9uLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KCdDYWxsV2l0aCcsIE5vbmUpLAotICAgICAgICAncmFpc2VzX2V4Y2VwdGlvbic6Ci0gICAgICAgICAgICBvcGVyYXRpb24uZXh0ZW5kZWRfYXR0cmlidXRlcy5oYXNfa2V5KCdSYWlzZXNFeGNlcHRpb24nKSwKLSAgICAgICAgJ2NvbmRpdGlvbmFsJzoKLSAgICAgICAgICAgIG9wZXJhdGlvbi5leHRlbmRlZF9hdHRyaWJ1dGVzLmdldCgnQ29uZGl0aW9uYWwnLCBOb25lKSwKLSAgICAgICAgJ3Vuc3VwcG9ydGVkJzoKLSAgICAgICAgICAgICdOb3RTdXBwb3J0ZWQnIGluIG9wZXJhdGlvbi5leHRlbmRlZF9hdHRyaWJ1dGVzLAorICAgICAgICAnaWRsX25hbWUnOiBvcGVyYXRpb24ubmFtZSwKKyAgICAgICAgJ25hbWUnOiBjYXBpdGFsaXplX2Z1bmN0aW9uX25hbWUob3BlcmF0aW9uLm5hbWUpLAorICAgICAgICAndHlwZSc6IHNlbGYudHlwZWRfb2JqZWN0X3RvX2NvYmFsdF90eXBlKGludGVyZmFjZSwgb3BlcmF0aW9uKSwKKyAgICAgICAgJ2lzX3N0YXRpYyc6IG9wZXJhdGlvbi5pc19zdGF0aWMsCisgICAgICAgICdvbl9pbnN0YW5jZSc6IHY4X3V0aWxpdGllcy5vbl9pbnN0YW5jZShpbnRlcmZhY2UsIG9wZXJhdGlvbiksCisgICAgICAgICdvbl9pbnRlcmZhY2UnOiB2OF91dGlsaXRpZXMub25faW50ZXJmYWNlKGludGVyZmFjZSwgb3BlcmF0aW9uKSwKKyAgICAgICAgJ29uX3Byb3RvdHlwZSc6IHY4X3V0aWxpdGllcy5vbl9wcm90b3R5cGUoaW50ZXJmYWNlLCBvcGVyYXRpb24pLAorICAgICAgICAnY2FsbF93aXRoJzogb3BlcmF0aW9uLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KCdDYWxsV2l0aCcsIE5vbmUpLAorICAgICAgICAncmFpc2VzX2V4Y2VwdGlvbic6ICdSYWlzZXNFeGNlcHRpb24nIGluIG9wZXJhdGlvbi5leHRlbmRlZF9hdHRyaWJ1dGVzLAorICAgICAgICAnY29uZGl0aW9uYWwnOiBvcGVyYXRpb24uZXh0ZW5kZWRfYXR0cmlidXRlcy5nZXQoJ0NvbmRpdGlvbmFsJywgTm9uZSksCisgICAgICAgICd1bnN1cHBvcnRlZCc6ICdOb3RTdXBwb3J0ZWQnIGluIG9wZXJhdGlvbi5leHRlbmRlZF9hdHRyaWJ1dGVzLAogICAgIH0KICAgICBjb250ZXh0LnVwZGF0ZShzZWxmLnBhcnRpYWxfY29udGV4dChpbnRlcmZhY2UsIG9wZXJhdGlvbikpCiAgICAgcmV0dXJuIGNvbnRleHQKQEAgLTQ1OCwxMCArNDU3LDggQEAKICAgICAgIGNvYmFsdF9uYW1lID0gJ0Fub255bW91c05hbWVkJXMnICUgZnVuY3Rpb25fc3VmZml4W3NwZWNpYWxfdHlwZV0KIAogICAgIGNvbnRleHQgPSB7Ci0gICAgICAgICduYW1lJzoKLSAgICAgICAgICAgIGNvYmFsdF9uYW1lLAotICAgICAgICAncmFpc2VzX2V4Y2VwdGlvbic6Ci0gICAgICAgICAgICBvcGVyYXRpb24uZXh0ZW5kZWRfYXR0cmlidXRlcy5oYXNfa2V5KCdSYWlzZXNFeGNlcHRpb24nKSwKKyAgICAgICAgJ25hbWUnOiBjb2JhbHRfbmFtZSwKKyAgICAgICAgJ3JhaXNlc19leGNlcHRpb24nOiAnUmFpc2VzRXhjZXB0aW9uJyBpbiBvcGVyYXRpb24uZXh0ZW5kZWRfYXR0cmlidXRlcywKICAgICB9CiAKICAgICBpZiBzcGVjaWFsX3R5cGUgaW4gKCdnZXR0ZXInLCAnZGVsZXRlcicpOgpAQCAtNTAyLDcgKzQ5OSw3IEBACiAgICAgICAgICdjYWxsX3dpdGgnOgogICAgICAgICAgICAgYXR0cmlidXRlLmV4dGVuZGVkX2F0dHJpYnV0ZXMuZ2V0KCdDYWxsV2l0aCcsIE5vbmUpLAogICAgICAgICAncmFpc2VzX2V4Y2VwdGlvbic6Ci0gICAgICAgICAgICBhdHRyaWJ1dGUuZXh0ZW5kZWRfYXR0cmlidXRlcy5oYXNfa2V5KCdSYWlzZXNFeGNlcHRpb24nKSwKKyAgICAgICAgICAgICdSYWlzZXNFeGNlcHRpb24nIGluIGF0dHJpYnV0ZS5leHRlbmRlZF9hdHRyaWJ1dGVzLAogICAgICAgICAnY29udmVyc2lvbl9mbGFncyc6CiAgICAgICAgICAgICBnZXRfY29udmVyc2lvbl9mbGFncygKICAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmVfdHlwZWRlZihhdHRyaWJ1dGUuaWRsX3R5cGUpLApAQCAtNTI1LDEzICs1MjIsMTcgQEAKICAgICAgICAgICBpZiBhLm5hbWUgPT0gZm9yd2FyZGVkX2F0dHJpYnV0ZV9uYW1lCiAgICAgICBdCiAgICAgICBhc3NlcnQgbGVuKG1hdGNoaW5nX2F0dHJpYnV0ZXMpID09IDEKLSAgICAgIGNvbnRleHRbJ3B1dF9mb3J3YXJkcyddID0gc2VsZi5hdHRyaWJ1dGVfY29udGV4dCgKLSAgICAgICAgICBmb3J3YXJkZWRfaW50ZXJmYWNlLCBtYXRjaGluZ19hdHRyaWJ1dGVzWzBdLCBkZWZpbml0aW9ucykKKyAgICAgIGNvbnRleHRbJ3B1dF9mb3J3YXJkcyddID0gc2VsZi5hdHRyaWJ1dGVfY29udGV4dChmb3J3YXJkZWRfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nX2F0dHJpYnV0ZXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMpCiAgICAgY29udGV4dFsKICAgICAgICAgJ2hhc19zZXR0ZXInXSA9IG5vdCBhdHRyaWJ1dGUuaXNfcmVhZF9vbmx5IG9yIGZvcndhcmRlZF9hdHRyaWJ1dGVfbmFtZQogICAgIGlmIGlzX2NvbnN0cnVjdG9yX2F0dHJpYnV0ZShhdHRyaWJ1dGUpOgorICAgICAgaW50ZXJmYWNlX25hbWUgPSBnZXRfaW50ZXJmYWNlX25hbWUoYXR0cmlidXRlLmlkbF90eXBlKQorICAgICAgaW1wbF9jbGFzcyA9IHNlbGYuZ2V0X2ltcGxlbWVudGVkX2ludGVyZmFjZV9uYW1lKGF0dHJpYnV0ZS5pZGxfdHlwZSkKICAgICAgIGNvbnRleHRbJ2lzX2NvbnN0cnVjdG9yX2F0dHJpYnV0ZSddID0gVHJ1ZQotICAgICAgY29udGV4dFsnaW50ZXJmYWNlX25hbWUnXSA9IGdldF9pbnRlcmZhY2VfbmFtZShhdHRyaWJ1dGUuaWRsX3R5cGUpCisgICAgICBjb250ZXh0WydpbnRlcmZhY2VfbmFtZSddID0gaW50ZXJmYWNlX25hbWUKKyAgICAgIGNvbnRleHRbJ2ltcGxfY2xhc3MnXSA9IGltcGxfY2xhc3MKICAgICAgICMgQmxpbmsncyBJREwgcGFyc2VyIHVzZXMgdGhlIGNvbnZlbnRpb24gdGhhdCBhdHRyaWJ1dGVzIGVuZGluZyB3aXRoCiAgICAgICAjICdDb25zdHJ1Y3RvckNvbnN0cnVjdG9yJyBhcmUgZm9yIE5hbWVkIENvbnN0cnVjdG9ycy4KICAgICAgIGNvbnRleHRbJ2lzX25hbWVkX2NvbnN0cnVjdG9yX2F0dHJpYnV0ZSddID0gKApkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2ZsYXR0ZW5faWRsc190ZXN0LnB5IGIvY29iYWx0L2JpbmRpbmdzL2ZsYXR0ZW5faWRsc190ZXN0LnB5CmluZGV4IGEwZjUzMTcuLjJlZWY5ZjkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iaW5kaW5ncy9mbGF0dGVuX2lkbHNfdGVzdC5weQorKysgYi9jb2JhbHQvYmluZGluZ3MvZmxhdHRlbl9pZGxzX3Rlc3QucHkKQEAgLTEzLDcgKzEzLDYgQEAKICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICMKLQogIiIiVW5pdCB0ZXN0cyBmb3IgRmxhdHRlbmVkSW50ZXJmYWNlIGNsYXNzLiIiIgogCiBpbXBvcnQgb3MKQEAgLTIxLDcgKzIwLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotaW1wb3J0IGZsYXR0ZW5faWRscworZnJvbSBjb2JhbHQuYmluZGluZ3MgaW1wb3J0IGZsYXR0ZW5faWRscwogCiAKIGRlZiBfVGVzdERhdGFQYXRoKCk6CkBAIC0zNiw2ICszNSw3IEBACiAKIEB1bml0dGVzdC5za2lwKCdUZXN0IGhhcyBiaXRyb3R0ZWQuJykKIGNsYXNzIEZsYXR0ZW5lZEludGVyZmFjZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogCiAgIGRlZiB0ZXN0RmxhdHRlbklkbChzZWxmKToKICAgICB0ZXN0X2lkbHMgPSBbJ1Rlc3RJbnRlcmZhY2UuaWRsJ10KQEAgLTU4LDggKzU4LDggQEAKICAgICByZXN1bHQgPSBmbGF0dGVuX2lkbHMuX0ZsYXR0ZW5JbnRlcmZhY2VzKF9UZXN0RGF0YVBhdGhHZW5lcmF0b3IodGVzdF9pZGxzKSkKICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihyZXN1bHQpKQogICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ05hbWVkQ29uc3RydWN0b3JJbnRlcmZhY2UnLCByZXN1bHRbMF0ubmFtZSkKLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoCi0gICAgICAgIFsnQXBwbGUnLCAnTmFtZWRDb25zdHJ1Y3RvckludGVyZmFjZSddLCByZXN1bHRbMF0uY29uc3RydWN0b3JzKQorICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChbJ0FwcGxlJywgJ05hbWVkQ29uc3RydWN0b3JJbnRlcmZhY2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdLmNvbnN0cnVjdG9ycykKIAogICBkZWYgdGVzdE5hbWVkQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Qoc2VsZik6CiAgICAgdGVzdF9pZGxzID0gWydOYW1lZENvbnN0cnVjdG9ySW50ZXJmYWNlV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmlkbCddCkBAIC04OCwxNiArODgsMTggQEAKIGNsYXNzIEZsYXR0ZW5lZEludGVyZmFjZURpZmZlcmVuY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICBkZWYgdGVzdEFzc2VydHNPbkRpZmZlcmVudEludGVyZmFjZXMoc2VsZik6Ci0gICAgbGhzID0gZmxhdHRlbl9pZGxzLkZsYXR0ZW5lZEludGVyZmFjZShuYW1lPSdUb3lvdGEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucz1bXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHM9W10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnM9W10pCi0gICAgcmhzID0gZmxhdHRlbl9pZGxzLkZsYXR0ZW5lZEludGVyZmFjZShuYW1lPSdIb25kYScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zPVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcz1bXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1bXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycz1bXSkKKyAgICBsaHMgPSBmbGF0dGVuX2lkbHMuRmxhdHRlbmVkSW50ZXJmYWNlKAorICAgICAgICBuYW1lPSdUb3lvdGEnLAorICAgICAgICBvcGVyYXRpb25zPVtdLAorICAgICAgICBhdHRyaWJ1dGVzPVtdLAorICAgICAgICBjb25zdGFudHM9W10sCisgICAgICAgIGNvbnN0cnVjdG9ycz1bXSkKKyAgICByaHMgPSBmbGF0dGVuX2lkbHMuRmxhdHRlbmVkSW50ZXJmYWNlKAorICAgICAgICBuYW1lPSdIb25kYScsCisgICAgICAgIG9wZXJhdGlvbnM9W10sCisgICAgICAgIGF0dHJpYnV0ZXM9W10sCisgICAgICAgIGNvbnN0YW50cz1bXSwKKyAgICAgICAgY29uc3RydWN0b3JzPVtdKQogICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgogICAgICAgZmxhdHRlbl9pZGxzLkZsYXR0ZW5lZEludGVyZmFjZS5EaWZmZXJlbmNlKGxocywgcmhzKQogCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvZ2VuZXJhdGVfY29udmVyc2lvbl9oZWFkZXIucHkgYi9jb2JhbHQvYmluZGluZ3MvZ2VuZXJhdGVfY29udmVyc2lvbl9oZWFkZXIucHkKaW5kZXggZmE0Mzk5NC4uNjlkMGMxZSAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL2dlbmVyYXRlX2NvbnZlcnNpb25faGVhZGVyLnB5CisrKyBiL2NvYmFsdC9iaW5kaW5ncy9nZW5lcmF0ZV9jb252ZXJzaW9uX2hlYWRlci5weQpAQCAtMTcsNyArMTcsNyBAQAogSmF2YVNjcmlwdCB2YWx1ZXMuCiAiIiIKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtbW9kdWxlCiBpbXBvcnQgb3MKIGltcG9ydCBwaWNrbGUKIApAQCAtMjYsOSArMjYsOSBAQAogCiAKIGRlZiBjcmVhdGVfY29tcG9uZW50X2luZm9fcHJvdmlkZXIoaW50ZXJmYWNlc19pbmZvX3BhdGgsIGNvbXBvbmVudF9pbmZvX3BhdGgpOgotICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGludGVyZmFjZXNfaW5mb19wYXRoKSkgYXMgaW50ZXJmYWNlX2luZm9fZmlsZToKKyAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihpbnRlcmZhY2VzX2luZm9fcGF0aCksICdyYicpIGFzIGludGVyZmFjZV9pbmZvX2ZpbGU6CiAgICAgaW50ZXJmYWNlc19pbmZvID0gcGlja2xlLmxvYWQoaW50ZXJmYWNlX2luZm9fZmlsZSkKLSAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb21wb25lbnRfaW5mb19wYXRoKSkgYXMgY29tcG9uZW50X2luZm9fZmlsZToKKyAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihjb21wb25lbnRfaW5mb19wYXRoKSwgJ3JiJykgYXMgY29tcG9uZW50X2luZm9fZmlsZToKICAgICBjb21wb25lbnRfaW5mbyA9IHBpY2tsZS5sb2FkKGNvbXBvbmVudF9pbmZvX2ZpbGUpCiAgIHJldHVybiBDb21wb25lbnRJbmZvUHJvdmlkZXJDb2JhbHQoaW50ZXJmYWNlc19pbmZvLCBjb21wb25lbnRfaW5mbykKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL2lkbF9jb21waWxlcl9jb2JhbHQucHkgYi9jb2JhbHQvYmluZGluZ3MvaWRsX2NvbXBpbGVyX2NvYmFsdC5weQppbmRleCBlOWYwMDc5Li5kYTM0ZmU3IDEwMDY0NAotLS0gYS9jb2JhbHQvYmluZGluZ3MvaWRsX2NvbXBpbGVyX2NvYmFsdC5weQorKysgYi9jb2JhbHQvYmluZGluZ3MvaWRsX2NvbXBpbGVyX2NvYmFsdC5weQpAQCAtMTcsNyArMTcsNyBAQAogdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaWRsX2NvbXBpbGVyLnB5LgogIiIiCiAKLWZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQogaW1wb3J0IG9zCiBpbXBvcnQgcGlja2xlCiAKQEAgLTI5LDkgKzI5LDkgQEAKIAogCiBkZWYgY3JlYXRlX2NvbXBvbmVudF9pbmZvX3Byb3ZpZGVyKGludGVyZmFjZXNfaW5mb19wYXRoLCBjb21wb25lbnRfaW5mb19wYXRoKToKLSAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihpbnRlcmZhY2VzX2luZm9fcGF0aCkpIGFzIGludGVyZmFjZV9pbmZvX2ZpbGU6CisgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oaW50ZXJmYWNlc19pbmZvX3BhdGgpLCAncmInKSBhcyBpbnRlcmZhY2VfaW5mb19maWxlOgogICAgIGludGVyZmFjZXNfaW5mbyA9IHBpY2tsZS5sb2FkKGludGVyZmFjZV9pbmZvX2ZpbGUpCi0gIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29tcG9uZW50X2luZm9fcGF0aCkpIGFzIGNvbXBvbmVudF9pbmZvX2ZpbGU6CisgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY29tcG9uZW50X2luZm9fcGF0aCksICdyYicpIGFzIGNvbXBvbmVudF9pbmZvX2ZpbGU6CiAgICAgY29tcG9uZW50X2luZm8gPSBwaWNrbGUubG9hZChjb21wb25lbnRfaW5mb19maWxlKQogICByZXR1cm4gQ29tcG9uZW50SW5mb1Byb3ZpZGVyQ29iYWx0KGludGVyZmFjZXNfaW5mbywgY29tcG9uZW50X2luZm8pCiAKQEAgLTUyLDEzICs1MiwxNSBAQAogICBpZiBvcHRpb25zLm91dHB1dF9kaXJlY3RvcnkgaXMgTm9uZToKICAgICBwYXJzZXIuZXJyb3IoJ011c3Qgc3BlY2lmeSBvdXRwdXQgZGlyZWN0b3J5IHVzaW5nIC0tb3V0cHV0LWRpcmVjdG9yeS4nKQogICBpZiBsZW4oYXJncykgIT0gMToKLSAgICBwYXJzZXIuZXJyb3IoJ011c3Qgc3BlY2lmeSBleGFjdGx5IDEgaW5wdXQgZmlsZSBhcyBhcmd1bWVudCwgYnV0ICVkIGdpdmVuLicKLSAgICAgICAgICAgICAgICAgJSBsZW4oYXJncykpCisgICAgcGFyc2VyLmVycm9yKAorICAgICAgICAnTXVzdCBzcGVjaWZ5IGV4YWN0bHkgMSBpbnB1dCBmaWxlIGFzIGFyZ3VtZW50LCBidXQgJWQgZ2l2ZW4uJyAlCisgICAgICAgIGxlbihhcmdzKSkKICAgaWRsX2ZpbGVuYW1lID0gb3MucGF0aC5yZWFscGF0aChhcmdzWzBdKQogICByZXR1cm4gb3B0aW9ucywgaWRsX2ZpbGVuYW1lCiAKIAogY2xhc3MgSWRsQ29tcGlsZXJDb2JhbHQoSWRsQ29tcGlsZXIpOgorICAiIiJJREwgQ29tcGlsZXIgZm9yIENvYmFsdC4iIiIKIAogICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICBJZGxDb21waWxlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCkBAIC03MCw3ICs3Miw3IEBACiAgICAgIyBjYXJlIGFib3V0IGNvbXBvbmVudHMgaW4gQ29iYWx0LgogICAgIGFzc2VydCBsZW4oZGVmaW5pdGlvbnMpID09IDEKICAgICBvdXRwdXRfY29kZV9saXN0ID0gc2VsZi5jb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV9jb2RlKAotICAgICAgICBkZWZpbml0aW9ucy52YWx1ZXMoKVswXSwgaW50ZXJmYWNlX25hbWUpCisgICAgICAgIGxpc3QoZGVmaW5pdGlvbnMudmFsdWVzKCkpWzBdLCBpbnRlcmZhY2VfbmFtZSkKIAogICAgICMgR2VuZXJhdG9yIG1heSBjaG9vc2UgdG8gb21pdCB0aGUgZmlsZS4KICAgICBpZiBvdXRwdXRfY29kZV9saXN0IGlzIE5vbmU6CmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3Mvb3ZlcmxvYWRfY29udGV4dC5weSBiL2NvYmFsdC9iaW5kaW5ncy9vdmVybG9hZF9jb250ZXh0LnB5CmluZGV4IDVhMzc0ZDIuLmU0NGQ5ODkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iaW5kaW5ncy9vdmVybG9hZF9jb250ZXh0LnB5CisrKyBiL2NvYmFsdC9iaW5kaW5ncy9vdmVybG9hZF9jb250ZXh0LnB5CkBAIC0xNDcsOSArMTQ3LDkgQEAKIAogICAjIEV4dHJhY3QgYXJndW1lbnQgYW5kIElETCB0eXBlIHRvIHNpbXBsaWZ5IGFjY2Vzc2luZyB0aGVzZSBpbiBlYWNoIGxvb3AuCiAgIGFyZ3VtZW50cyA9IFttZXRob2RbJ2FyZ3VtZW50cyddW2luZGV4XSBmb3IgbWV0aG9kIGluIG1ldGhvZHNdCi0gIGFyZ3VtZW50c19tZXRob2RzID0gemlwKGFyZ3VtZW50cywgbWV0aG9kcykKKyAgYXJndW1lbnRzX21ldGhvZHMgPSBsaXN0KHppcChhcmd1bWVudHMsIG1ldGhvZHMpKQogICBpZGxfdHlwZXMgPSBbYXJndW1lbnRbJ2lkbF90eXBlX29iamVjdCddIGZvciBhcmd1bWVudCBpbiBhcmd1bWVudHNdCi0gIGlkbF90eXBlc19tZXRob2RzID0gemlwKGlkbF90eXBlcywgbWV0aG9kcykKKyAgaWRsX3R5cGVzX21ldGhvZHMgPSBsaXN0KHppcChpZGxfdHlwZXMsIG1ldGhvZHMpKQogCiAgICMgV2UgY2FuJ3QgZG8gYSBzaW5nbGUgbG9vcCB0aHJvdWdoIGFsbCBtZXRob2RzIG9yIHNpbXBseSBzb3J0IHRoZW0sIGJlY2F1c2UKICAgIyBhIG1ldGhvZCBtYXkgYmUgbGlzdGVkIGluIG11bHRpcGxlIHN0ZXBzIG9mIHRoZSByZXNvbHV0aW9uIGFsZ29yaXRobSwgYW5kCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvcGF0aF9nZW5lcmF0b3IucHkgYi9jb2JhbHQvYmluZGluZ3MvcGF0aF9nZW5lcmF0b3IucHkKaW5kZXggZTA1OGYyOS4uMTkyZmY1OSAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL3BhdGhfZ2VuZXJhdG9yLnB5CisrKyBiL2NvYmFsdC9iaW5kaW5ncy9wYXRoX2dlbmVyYXRvci5weQpAQCAtMTUsNiArMTUsNyBAQAogCiBpbXBvcnQgb3MKIAorZnJvbSBjb2JhbHQuYmluZGluZ3MubmFtZV9jb252ZXJzaW9uIGltcG9ydCBjb252ZXJ0X3RvX2NvYmFsdF9uYW1lCiBmcm9tIGNvYmFsdC5idWlsZC5wYXRoX2NvbnZlcnNpb24gaW1wb3J0IENvbnZlcnRQYXRoCiAKIApAQCAtNTgsNyArNTksNyBAQAogICAgICAgZW51bV9pbmZvID0gc2VsZi5pbmZvX3Byb3ZpZGVyLmVudW1lcmF0aW9uc1tpbnRlcmZhY2VfbmFtZV0KICAgICAgIGlkbF9wYXRoID0gZW51bV9pbmZvWydmdWxsX3BhdGgnXQogICAgIGVsc2U6Ci0gICAgICByYWlzZSBLZXlFcnJvcignVW5rbm93biBpbnRlcmZhY2UgbmFtZSAlcycsIGludGVyZmFjZV9uYW1lKQorICAgICAgcmFpc2UgS2V5RXJyb3IoJ1Vua25vd24gaW50ZXJmYWNlIG5hbWUgJXMnICUgaW50ZXJmYWNlX25hbWUpCiAKICAgICByZWxfaWRsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoaWRsX3BhdGgsIHNlbGYuaW50ZXJmYWNlc19yb290KQogICAgIGNvbXBvbmVudHMgPSBvcy5wYXRoLmRpcm5hbWUocmVsX2lkbF9wYXRoKS5zcGxpdChvcy5zZXApCkBAIC02Nyw4ICs2OCw5IEBACiAgICAgIyB3ZSB0cmVhdCBpdCBhcyBhbiBleHRlbnNpb24gSURMLgogICAgIHJlYWxfaW50ZXJmYWNlc19yb290ID0gb3MucGF0aC5yZWFscGF0aChzZWxmLmludGVyZmFjZXNfcm9vdCkKICAgICByZWFsX2lkbF9wYXRoID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoaWRsX3BhdGgpKQotICAgIGludGVyZmFjZXNfcm9vdF9pc19pbl9jb21wb25lbnRzX3BhdGggPSAob3MucGF0aC5jb21tb25wcmVmaXgoCi0gICAgICAgIFtyZWFsX2ludGVyZmFjZXNfcm9vdCwgcmVhbF9pZGxfcGF0aF0pID09IHJlYWxfaW50ZXJmYWNlc19yb290KQorICAgIGludGVyZmFjZXNfcm9vdF9pc19pbl9jb21wb25lbnRzX3BhdGggPSAoCisgICAgICAgIG9zLnBhdGguY29tbW9ucHJlZml4KFtyZWFsX2ludGVyZmFjZXNfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxfaWRsX3BhdGhdKSA9PSByZWFsX2ludGVyZmFjZXNfcm9vdCkKIAogICAgIGlmIGludGVyZmFjZXNfcm9vdF9pc19pbl9jb21wb25lbnRzX3BhdGg6CiAgICAgICByZXR1cm4gW29zLnBhdGguYmFzZW5hbWUoc2VsZi5pbnRlcmZhY2VzX3Jvb3QpXSArIGNvbXBvbmVudHMKQEAgLTg2LDIyICs4OCwyNyBAQAogICAgICIiIkdldCB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIGNsYXNzLiIiIgogICAgIHJldHVybiBzZWxmLmVuZ2luZV9wcmVmaXguY2FwaXRhbGl6ZSgpICsgaW50ZXJmYWNlX25hbWUKIAotICBkZWYgRnVsbEJpbmRpbmdzQ2xhc3NOYW1lKHNlbGYsIGludGVyZmFjZV9uYW1lKToKKyAgZGVmIEZ1bGxCaW5kaW5nc0NsYXNzTmFtZShzZWxmLCBpbXBsX25hbWUsIGludGVyZmFjZV9uYW1lKToKICAgICAiIiJHZXQgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgYmluZGluZ3MgY2xhc3MuIiIiCiAgICAgcmV0dXJuICclczo6JXMnICUgKHNlbGYuTmFtZXNwYWNlKGludGVyZmFjZV9uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5CaW5kaW5nc0NsYXNzKGludGVyZmFjZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5CaW5kaW5nc0NsYXNzKGltcGxfbmFtZSkpCiAKLSAgZGVmIEZ1bGxDbGFzc05hbWUoc2VsZiwgaW50ZXJmYWNlX25hbWUpOgorICBkZWYgRnVsbENsYXNzTmFtZShzZWxmLCBpbXBsX25hbWUsIGludGVyZmFjZV9uYW1lPU5vbmUpOgogICAgICIiIkdldCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLiIiIgorICAgIGludGVyZmFjZV9uYW1lID0gaW50ZXJmYWNlX25hbWUgb3IgaW1wbF9uYW1lCiAgICAgY29tcG9uZW50cyA9IHNlbGYuTmFtZXNwYWNlQ29tcG9uZW50cyhpbnRlcmZhY2VfbmFtZSkKLSAgICByZXR1cm4gJzo6Jy5qb2luKGNvbXBvbmVudHMgKyBbaW50ZXJmYWNlX25hbWVdKQorICAgIHJldHVybiAnOjonLmpvaW4oY29tcG9uZW50cyArIFtpbXBsX25hbWVdKQogCiAgIGRlZiBJbXBsZW1lbnRhdGlvbkhlYWRlclBhdGgoc2VsZiwgaW50ZXJmYWNlX25hbWUpOgogICAgICIiIkdldCBhbiAjaW5jbHVkZSBwYXRoIHRvIHRoZSBpbnRlcmZhY2UncyBpbXBsZW1lbnRhdGlvbiAuaCBmaWxlLiIiIgogICAgIGludGVyZmFjZV9pbmZvID0gc2VsZi5pbnRlcmZhY2VzX2luZm9baW50ZXJmYWNlX25hbWVdCiAgICAgcGF0aCA9IENvbnZlcnRQYXRoKAogICAgICAgICBpbnRlcmZhY2VfaW5mb1snZnVsbF9wYXRoJ10sIGZvcndhcmRfc2xhc2hlcz1UcnVlLCBvdXRwdXRfZXh0ZW5zaW9uPSdoJykKLSAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKHBhdGgsIG9zLnBhdGguZGlybmFtZShzZWxmLmludGVyZmFjZXNfcm9vdCkpCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZSgKKyAgICAgICAgb3MucGF0aC5yZWxwYXRoKHBhdGgsIG9zLnBhdGguZGlybmFtZShzZWxmLmludGVyZmFjZXNfcm9vdCkpKQorICAgIG5hbWUgPSBjb252ZXJ0X3RvX2NvYmFsdF9uYW1lKAorICAgICAgICBpbnRlcmZhY2VfaW5mby5nZXQoJ2ltcGxlbWVudGVkX2FzJykgb3IgaW50ZXJmYWNlX25hbWUpCisgICAgcmV0dXJuIGRpcm5hbWUgKyAnLycgKyBuYW1lICsgJy5oJwogCiAgIGRlZiBCaW5kaW5nc0hlYWRlckluY2x1ZGVQYXRoKHNlbGYsIGludGVyZmFjZV9uYW1lKToKICAgICAiIiJHZXQgYW4gI2luY2x1ZGUgcGF0aCB0byB0aGUgaW50ZXJmYWNlJ3MgZ2VuZXJhdGVkIC5oIGZpbGUuIiIiCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvcGF0aF9nZW5lcmF0b3JfdGVzdC5weSBiL2NvYmFsdC9iaW5kaW5ncy9wYXRoX2dlbmVyYXRvcl90ZXN0LnB5CmluZGV4IDZhYzUxOGMuLmE4MTliNDUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iaW5kaW5ncy9wYXRoX2dlbmVyYXRvcl90ZXN0LnB5CisrKyBiL2NvYmFsdC9iaW5kaW5ncy9wYXRoX2dlbmVyYXRvcl90ZXN0LnB5CkBAIC0xMiwxMCArMTIsMTAgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJQYXRoIGdlbmVyYXRvciB1bml0IHRlc3RzLiIiIgogCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0LmJpbmRpbmdzLnBhdGhfZ2VuZXJhdG9yIGltcG9ydCBQYXRoQnVpbGRlcgogCiAKQEAgLTQyLDcgKzQyLDggQEAKIAogICBkZWYgdGVzdEZ1bGxCaW5kaW5nc0NsYXNzKHNlbGYpOgogICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgIHNlbGYucGF0aF9idWlsZGVyLkZ1bGxCaW5kaW5nc0NsYXNzTmFtZSgnVGVzdEludGVyZmFjZScpLAorICAgICAgICBzZWxmLnBhdGhfYnVpbGRlci5GdWxsQmluZGluZ3NDbGFzc05hbWUoJ1Rlc3RJbnRlcmZhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3RJbnRlcmZhY2UnKSwKICAgICAgICAgJ3Jvb3Q6OnRoaXM6OmlzOjphOjpQcmVUZXN0SW50ZXJmYWNlJykKIAogICBkZWYgdGVzdEZ1bGxDbGFzcyhzZWxmKToKZGlmZiAtLWdpdCBhL2NvYmFsdC9iaW5kaW5ncy9zaGFyZWQvaWRsX2NvbmRpdGlvbmFsX21hY3Jvcy5oIGIvY29iYWx0L2JpbmRpbmdzL3NoYXJlZC9pZGxfY29uZGl0aW9uYWxfbWFjcm9zLmgKaW5kZXggOGVhYzU4Mi4uM2RkOWQ3NCAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL3NoYXJlZC9pZGxfY29uZGl0aW9uYWxfbWFjcm9zLmgKKysrIGIvY29iYWx0L2JpbmRpbmdzL3NoYXJlZC9pZGxfY29uZGl0aW9uYWxfbWFjcm9zLmgKQEAgLTIzLDEyICsyMyw5IEBACiAvLyBDb25kaXRpb25hbHMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIFN0YXJib2FyZCBmZWF0dXJlIG1hY3JvcyB0aGF0IGdldCBkZWZpbmVkCiAvLyBpbiBoZWFkZXIgZmlsZXMuCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogLy8gVGhpcyBpcyB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgZGVmaW5lIHRoZSBPbiBTY3JlZW4gS2V5Ym9hcmQgaW50ZXJmYWNlIGFuZAogLy8gYXR0cmlidXRlLgogI2RlZmluZSBDT0JBTFRfRU5BQkxFX09OX1NDUkVFTl9LRVlCT0FSRAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogCiAvLyBUaGlzIGlzIHVzZWQgdG8gY29uZGl0aW9uYWxseSBkZWZpbmUgc2V0TWF4VmlkZW9DYXBhYmlsaXRpZXMoKSBpbgogLy8gSFRNTFZpZGVvRWxlbWVudC4KZGlmZiAtLWdpdCBhL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL0JVSUxELmduIGIvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvQlVJTEQuZ24KaW5kZXggY2E5MDJkYS4uYTFjNWUyYyAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvQlVJTEQuZ24KKysrIGIvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvQlVJTEQuZ24KQEAgLTUzLDYgKzUzLDcgQEAKICAgImFyYml0cmFyeV9pbnRlcmZhY2UuaWRsIiwKICAgImJhc2VfaW50ZXJmYWNlLmlkbCIsCiAgICJib29sZWFuX3R5cGVfdGVzdF9pbnRlcmZhY2UuaWRsIiwKKyAgImJ5dGVzdHJpbmdfdHlwZV90ZXN0X2ludGVyZmFjZS5pZGwiLAogICAiY2FsbGJhY2tfZnVuY3Rpb25faW50ZXJmYWNlLmlkbCIsCiAgICJjYWxsYmFja19pbnRlcmZhY2VfaW50ZXJmYWNlLmlkbCIsCiAgICJjb25kaXRpb25hbF9pbnRlcmZhY2UuaWRsIiwKQEAgLTcxLDYgKzcyLDcgQEAKICAgImV4dGVuZGVkX2lkbF9hdHRyaWJ1dGVzX2ludGVyZmFjZS5pZGwiLAogICAiZ2FyYmFnZV9jb2xsZWN0aW9uX3Rlc3RfaW50ZXJmYWNlLmlkbCIsCiAgICJnbG9iYWxfaW50ZXJmYWNlX3BhcmVudC5pZGwiLAorICAiaW1wbGVtZW50ZWRfYXNfaW50ZXJmYWNlLmlkbCIsCiAgICJpbmRleGVkX2dldHRlcl9pbnRlcmZhY2UuaWRsIiwKICAgImludGVyZmFjZV93aXRoX2FueS5pZGwiLAogICAiaW50ZXJmYWNlX3dpdGhfYW55X2RpY3Rpb25hcnkuaWRsIiwKQEAgLTE1MSw2ICsxNTMsNyBAQAogICAgICJhbnlfZGljdGlvbmFyeV9iaW5kaW5nc190ZXN0LmNjIiwKICAgICAiYXJyYXlfYnVmZmVyc190ZXN0LmNjIiwKICAgICAiYm9vbGVhbl90eXBlX2JpbmRpbmdzX3Rlc3QuY2MiLAorICAgICJieXRlc3RyaW5nX3R5cGVfYmluZGluZ3NfdGVzdC5jYyIsCiAgICAgImNhbGxiYWNrX2Z1bmN0aW9uX3Rlc3QuY2MiLAogICAgICJjYWxsYmFja19pbnRlcmZhY2VfdGVzdC5jYyIsCiAgICAgImNvbmRpdGlvbmFsX2F0dHJpYnV0ZV90ZXN0LmNjIiwKQEAgLTE2OSw2ICsxNzIsNyBAQAogICAgICJnZXRfb3duX3Byb3BlcnR5X2Rlc2NyaXB0b3IuY2MiLAogICAgICJnZXR0ZXJfc2V0dGVyX3Rlc3QuY2MiLAogICAgICJnbG9iYWxfaW50ZXJmYWNlX2JpbmRpbmdzX3Rlc3QuY2MiLAorICAgICJpbXBsZW1lbnRlZF9hc19pbnRlcmZhY2VfdGVzdC5jYyIsCiAgICAgImludGVyZmFjZV9vYmplY3RfdGVzdC5jYyIsCiAgICAgIm51bGxhYmxlX3R5cGVzX2JpbmRpbmdzX3Rlc3QuY2MiLAogICAgICJudW1lcmljX3R5cGVfYmluZGluZ3NfdGVzdC5jYyIsCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9iaW5kaW5nc190ZXN0X2Jhc2UuaCBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2JpbmRpbmdzX3Rlc3RfYmFzZS5oCmluZGV4IGY4YTBiYTguLmMyM2NiMTMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2JpbmRpbmdzX3Rlc3RfYmFzZS5oCisrKyBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2JpbmRpbmdzX3Rlc3RfYmFzZS5oCkBAIC00NywxOCArNDcsMTggQEAKIGNsYXNzIEJpbmRpbmdzVGVzdEJhc2UgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKICBwcm90ZWN0ZWQ6CiAgIEJpbmRpbmdzVGVzdEJhc2UoKQotICAgICAgOiBlbnZpcm9ubWVudF9zZXR0aW5nc18obmV3IHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyksCi0gICAgICAgIGVuZ2luZV8oc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoKSksCisgICAgICA6IGVuZ2luZV8oc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoKSksCiAgICAgICAgIGdsb2JhbF9lbnZpcm9ubWVudF8oZW5naW5lXy0+Q3JlYXRlR2xvYmFsRW52aXJvbm1lbnQoKSksCisgICAgICAgIGVudmlyb25tZW50X3NldHRpbmdzXyhuZXcgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKCkpLAogICAgICAgICB3aW5kb3dfKG5ldyBXaW5kb3coKSkgewogICAgIGdsb2JhbF9lbnZpcm9ubWVudF8tPkNyZWF0ZUdsb2JhbE9iamVjdCh3aW5kb3dfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCkpOwogICB9CiAKICAgZXhwbGljaXQgQmluZGluZ3NUZXN0QmFzZShjb25zdCBzY29wZWRfcmVmcHRyPFdpbmRvdz4gd2luZG93KQotICAgICAgOiBlbnZpcm9ubWVudF9zZXR0aW5nc18obmV3IHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyksCi0gICAgICAgIGVuZ2luZV8oc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoKSksCisgICAgICA6IGVuZ2luZV8oc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoKSksCiAgICAgICAgIGdsb2JhbF9lbnZpcm9ubWVudF8oZW5naW5lXy0+Q3JlYXRlR2xvYmFsRW52aXJvbm1lbnQoKSksCisgICAgICAgIGVudmlyb25tZW50X3NldHRpbmdzXyhuZXcgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKCkpLAogICAgICAgICB3aW5kb3dfKHdpbmRvdykgewogICAgIGdsb2JhbF9lbnZpcm9ubWVudF8tPkNyZWF0ZUdsb2JhbE9iamVjdCh3aW5kb3dfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCkpOwpAQCAtODksOSArODksOSBAQAogCiAgcHJvdGVjdGVkOgogICBiYXNlOjp0ZXN0OjpTY29wZWRUYXNrRW52aXJvbm1lbnQgdGFza19lbnZfOwotICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzPiBlbnZpcm9ubWVudF9zZXR0aW5nc187CiAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU+IGVuZ2luZV87CiAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudD4gZ2xvYmFsX2Vudmlyb25tZW50XzsKKyAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4gZW52aXJvbm1lbnRfc2V0dGluZ3NfOwogICBjb25zdCBzY29wZWRfcmVmcHRyPFdpbmRvdz4gd2luZG93XzsKIH07CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV9iaW5kaW5nc190ZXN0LmNjIGIvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvYnl0ZXN0cmluZ190eXBlX2JpbmRpbmdzX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5Yjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV9iaW5kaW5nc190ZXN0LmNjCkBAIC0wLDAgKzEsNTYgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2JpbmRpbmdzX3Rlc3RfYmFzZS5oIgorI2luY2x1ZGUgImNvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV90ZXN0X2ludGVyZmFjZS5oIgorI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgorCit1c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgYmluZGluZ3MgeworbmFtZXNwYWNlIHRlc3RpbmcgeworCituYW1lc3BhY2UgewordHlwZWRlZiBJbnRlcmZhY2VCaW5kaW5nc1Rlc3Q8Qnl0ZXN0cmluZ1R5cGVUZXN0SW50ZXJmYWNlPgorICAgIEJ5dGVzdHJpbmdUeXBlQmluZGluZ3NUZXN0OworfSAgLy8gbmFtZXNwYWNlCisKK1RFU1RfRihCeXRlc3RyaW5nVHlwZUJpbmRpbmdzVGVzdCwgQnl0ZXN0cmluZ1JldHVyblZhbHVlKSB7CisgIEVYUEVDVF9UUlVFKAorICAgICAgRXZhbHVhdGVTY3JpcHQoInZhciByZXN1bHQgPSB0ZXN0LmJ5dGVzdHJpbmdSZXR1cm5PcGVyYXRpb24oKTsiLCBOVUxMKSk7CisKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICBFWFBFQ1RfVFJVRShFdmFsdWF0ZVNjcmlwdCgidHlwZW9mIHJlc3VsdDsiLCAmcmVzdWx0KSk7CisgIEVYUEVDVF9TVFJFUSgic3RyaW5nIiwgcmVzdWx0LmNfc3RyKCkpOworCisgIEVYUEVDVF9UUlVFKEV2YWx1YXRlU2NyaXB0KCJyZXN1bHQ7IiwgJnJlc3VsdCkpOworICBFWFBFQ1RfU1RSRVEoIlwwMDFcMDAyXDAwMyIsIHJlc3VsdC5jX3N0cigpKTsKK30KKworVEVTVF9GKEJ5dGVzdHJpbmdUeXBlQmluZGluZ3NUZXN0LCBCeXRlc3RyaW5nQXJndW1lbnRPcGVyYXRpb24pIHsKKyAgRVhQRUNUX1RSVUUoRXZhbHVhdGVTY3JpcHQoCisgICAgICAidmFyIHJlc3VsdCA9IHRlc3QuYnl0ZXN0cmluZ0FyZ3VtZW50T3BlcmF0aW9uKCdieXRlU3RyaW5nJyk7IiwgTlVMTCkpOworCisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgRVhQRUNUX1RSVUUoRXZhbHVhdGVTY3JpcHQoInR5cGVvZiByZXN1bHQ7IiwgJnJlc3VsdCkpOworICBFWFBFQ1RfU1RSRVEoInN0cmluZyIsIHJlc3VsdC5jX3N0cigpKTsKKworICBFWFBFQ1RfVFJVRShFdmFsdWF0ZVNjcmlwdCgicmVzdWx0OyIsICZyZXN1bHQpKTsKKyAgRVhQRUNUX1NUUkVRKCJieXRlU3RyaW5nIiwgcmVzdWx0LmNfc3RyKCkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdGluZworfSAgLy8gbmFtZXNwYWNlIGJpbmRpbmdzCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9ieXRlc3RyaW5nX3R5cGVfdGVzdF9pbnRlcmZhY2UuaCBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV90ZXN0X2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYTEwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9ieXRlc3RyaW5nX3R5cGVfdGVzdF9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDQzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX0JJTkRJTkdTX1RFU1RJTkdfQllURVNUUklOR19UWVBFX1RFU1RfSU5URVJGQUNFX0hfCisjZGVmaW5lIENPQkFMVF9CSU5ESU5HU19URVNUSU5HX0JZVEVTVFJJTkdfVFlQRV9URVNUX0lOVEVSRkFDRV9IXworCisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC93cmFwcGFibGUuaCIKKyNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgYmluZGluZ3MgeworbmFtZXNwYWNlIHRlc3RpbmcgeworCitjbGFzcyBCeXRlc3RyaW5nVHlwZVRlc3RJbnRlcmZhY2UgOiBwdWJsaWMgc2NyaXB0OjpXcmFwcGFibGUgeworIHB1YmxpYzoKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gQnl0ZXN0cmluZ1JldHVybk9wZXJhdGlvbigpIHsKKyAgICByZXR1cm4gc3RkOjp2ZWN0b3I8dWludDhfdD57MSwgMiwgM307CisgIH0KKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gQnl0ZXN0cmluZ0FyZ3VtZW50T3BlcmF0aW9uKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGFyZzEpIHsKKyAgICByZXR1cm4gYXJnMTsKKyAgfQorCisgIERFRklORV9XUkFQUEFCTEVfVFlQRShCeXRlc3RyaW5nVHlwZVRlc3RJbnRlcmZhY2UpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKK30gIC8vIG5hbWVzcGFjZSBiaW5kaW5ncworfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9CSU5ESU5HU19URVNUSU5HX0JZVEVTVFJJTkdfVFlQRV9URVNUX0lOVEVSRkFDRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvYnl0ZXN0cmluZ190eXBlX3Rlc3RfaW50ZXJmYWNlLmlkbCBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV90ZXN0X2ludGVyZmFjZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0ODZlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2J5dGVzdHJpbmdfdHlwZV90ZXN0X2ludGVyZmFjZS5pZGwKQEAgLTAsMCArMSwxOCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbnRlcmZhY2UgQnl0ZXN0cmluZ1R5cGVUZXN0SW50ZXJmYWNlIHsKKyAgQnl0ZVN0cmluZyBieXRlc3RyaW5nUmV0dXJuT3BlcmF0aW9uKCk7CisgIEJ5dGVTdHJpbmcgYnl0ZXN0cmluZ0FyZ3VtZW50T3BlcmF0aW9uKEJ5dGVTdHJpbmcgYXJnMSk7Cit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvaW1wbGVtZW50ZWRfYXNfaW50ZXJmYWNlLmggYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc5NjJmCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvaW1wbGVtZW50ZWRfYXNfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9CSU5ESU5HU19URVNUSU5HX0lNUExFTUVOVEVEX0FTX0lOVEVSRkFDRV9IXworI2RlZmluZSBDT0JBTFRfQklORElOR1NfVEVTVElOR19JTVBMRU1FTlRFRF9BU19JTlRFUkZBQ0VfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIGJpbmRpbmdzIHsKK25hbWVzcGFjZSB0ZXN0aW5nIHsKKworY2xhc3MgSW1wbGVtZW50ZWRBc0ludGVyZmFjZSA6IHB1YmxpYyBzY3JpcHQ6OldyYXBwYWJsZSB7CisgcHVibGljOgorICBzdGQ6OnN0cmluZyBJbXBsZW1lbnRlZEFzSW50ZXJmYWNlRnVuY3Rpb24oKSB7IHJldHVybiAiYmFyIjsgfQorCisgIERFRklORV9XUkFQUEFCTEVfVFlQRShJbXBsZW1lbnRlZEFzSW50ZXJmYWNlKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCit9ICAvLyBuYW1lc3BhY2UgYmluZGluZ3MKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfQklORElOR1NfVEVTVElOR19JTVBMRU1FTlRFRF9BU19JTlRFUkZBQ0VfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2ltcGxlbWVudGVkX2FzX2ludGVyZmFjZS5pZGwgYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19pbnRlcmZhY2UuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTBiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19pbnRlcmZhY2UuaWRsCkBAIC0wLDAgKzEsMTggQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworW0ltcGxlbWVudGVkQXMgPSBJbXBsZW1lbnRlZEFzT3RoZXJJbnRlcmZhY2VdCitpbnRlcmZhY2UgSW1wbGVtZW50ZWRBc0ludGVyZmFjZSB7CisgIERPTVN0cmluZyBpbXBsZW1lbnRlZEFzSW50ZXJmYWNlRnVuY3Rpb24oKTsKK307CmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19pbnRlcmZhY2VfdGVzdC5jYyBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL2ltcGxlbWVudGVkX2FzX2ludGVyZmFjZV90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMWE2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19pbnRlcmZhY2VfdGVzdC5jYwpAQCAtMCwwICsxLDM5IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvYmluZGluZ3MvdGVzdGluZy9iaW5kaW5nc190ZXN0X2Jhc2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19vdGhlcl9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKKwordXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47CisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIGJpbmRpbmdzIHsKK25hbWVzcGFjZSB0ZXN0aW5nIHsKKworbmFtZXNwYWNlIHsKK3R5cGVkZWYgSW50ZXJmYWNlQmluZGluZ3NUZXN0PEltcGxlbWVudGVkQXNPdGhlckludGVyZmFjZT4KKyAgICBJbXBsZW1lbnRlZEFzSW50ZXJmYWNlVGVzdDsKK30gIC8vIG5hbWVzcGFjZQorCitURVNUX0YoSW1wbGVtZW50ZWRBc0ludGVyZmFjZVRlc3QsIEltcGxlbWVudGVkQXNJbnRlcmZhY2VGdW5jdGlvbkV4aXN0cykgeworICBzdGQ6OnN0cmluZyByZXN1bHQ7CisgIEVYUEVDVF9UUlVFKAorICAgICAgRXZhbHVhdGVTY3JpcHQoInRlc3QuaW1wbGVtZW50ZWRBc0ludGVyZmFjZUZ1bmN0aW9uKCk7IiwgJnJlc3VsdCkpOworICBFWFBFQ1RfU1RSRVEoImZvbyIsIHJlc3VsdC5jX3N0cigpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKK30gIC8vIG5hbWVzcGFjZSBiaW5kaW5ncworfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvaW1wbGVtZW50ZWRfYXNfb3RoZXJfaW50ZXJmYWNlLmggYi9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy9pbXBsZW1lbnRlZF9hc19vdGhlcl9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk0NzQzCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2JpbmRpbmdzL3Rlc3RpbmcvaW1wbGVtZW50ZWRfYXNfb3RoZXJfaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9CSU5ESU5HU19URVNUSU5HX0lNUExFTUVOVEVEX0FTX09USEVSX0lOVEVSRkFDRV9IXworI2RlZmluZSBDT0JBTFRfQklORElOR1NfVEVTVElOR19JTVBMRU1FTlRFRF9BU19PVEhFUl9JTlRFUkZBQ0VfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIGJpbmRpbmdzIHsKK25hbWVzcGFjZSB0ZXN0aW5nIHsKKworY2xhc3MgSW1wbGVtZW50ZWRBc090aGVySW50ZXJmYWNlIDogcHVibGljIHNjcmlwdDo6V3JhcHBhYmxlIHsKKyBwdWJsaWM6CisgIHN0ZDo6c3RyaW5nIEltcGxlbWVudGVkQXNJbnRlcmZhY2VGdW5jdGlvbigpIHsgcmV0dXJuICJmb28iOyB9CisKKyAgREVGSU5FX1dSQVBQQUJMRV9UWVBFKEltcGxlbWVudGVkQXNPdGhlckludGVyZmFjZSk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgdGVzdGluZworfSAgLy8gbmFtZXNwYWNlIGJpbmRpbmdzCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX0JJTkRJTkdTX1RFU1RJTkdfSU1QTEVNRU5URURfQVNfT1RIRVJfSU5URVJGQUNFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdGVzdGluZy90ZXN0aW5nLmd5cCBiL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL3Rlc3RpbmcuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk4ZjA3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL3Rlc3RpbmcuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnLi4vYmluZGluZ3MuZ3lwaScsCi0gIF0sCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBCYXNlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGdlbmVyYXRlZCBzb3VyY2VzIGFuZCBpbnRlcm1lZGlhdGUgZmlsZXMgc2hvdWxkCi0gICAgIyBiZSBnZW5lcmF0ZWQuCi0gICAgJ2JpbmRpbmdzX291dHB1dF9kaXInOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvYmluZGluZ3MvdGVzdGluZycsCi0KLSAgICAjIEJpbmRpbmdzIGZvciB0aGUgaW50ZXJmYWNlcyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBnZW5lcmF0ZWQsIGFuZCB0aGVyZSBtdXN0Ci0gICAgIyBiZSBhbiBpbXBsZW1lbnRhdGlvbiBkZWNsYXJlZCBpbiBhIGhlYWRlciB0aGF0IGxpdmVzIGluIHRoZSBzYW1lCi0gICAgIyBkaXJlY3Rvcnkgb2YgZWFjaCBJREwuCi0gICAgJ3NvdXJjZV9pZGxfZmlsZXMnOiBbCi0gICAgICAgICdhbm9ueW1vdXNfaW5kZXhlZF9nZXR0ZXJfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdhbm9ueW1vdXNfbmFtZWRfZ2V0dGVyX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnYW5vbnltb3VzX25hbWVkX2luZGV4ZWRfZ2V0dGVyX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnYXJiaXRyYXJ5X2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnYmFzZV9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2Jvb2xlYW5fdHlwZV90ZXN0X2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnY2FsbGJhY2tfZnVuY3Rpb25faW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdjYWxsYmFja19pbnRlcmZhY2VfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdjb25kaXRpb25hbF9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2NvbnN0YW50c19pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2NvbnN0cnVjdG9yX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnY29uc3RydWN0b3Jfd2l0aF9hcmd1bWVudHNfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdjb252ZXJ0X3NpbXBsZV9vYmplY3RfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdkZXJpdmVkX2dldHRlcl9zZXR0ZXJfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdkZXJpdmVkX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnZGljdGlvbmFyeV9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2Rpc2FibGVkX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnZG9tX3N0cmluZ190ZXN0X2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnZW51bWVyYXRpb25faW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdleGNlcHRpb25fb2JqZWN0X2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnZXhjZXB0aW9uc19pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2V4dGVuZGVkX2lkbF9hdHRyaWJ1dGVzX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnZ2FyYmFnZV9jb2xsZWN0aW9uX3Rlc3RfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdnbG9iYWxfaW50ZXJmYWNlX3BhcmVudC5pZGwnLAotICAgICAgICAnaW5kZXhlZF9nZXR0ZXJfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdpbnRlcmZhY2Vfd2l0aF9hbnkuaWRsJywKLSAgICAgICAgJ2ludGVyZmFjZV93aXRoX2FueV9kaWN0aW9uYXJ5LmlkbCcsCi0gICAgICAgICdpbnRlcmZhY2Vfd2l0aF9kYXRlLmlkbCcsCi0gICAgICAgICdpbnRlcmZhY2Vfd2l0aF91bnN1cHBvcnRlZF9wcm9wZXJ0aWVzLmlkbCcsCi0gICAgICAgICduYW1lZF9jb25zdHJ1Y3Rvcl9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ25hbWVkX2dldHRlcl9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ25hbWVkX2luZGV4ZWRfZ2V0dGVyX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnbmVzdGVkX3B1dF9mb3J3YXJkc19pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ25vX2NvbnN0cnVjdG9yX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnbm9faW50ZXJmYWNlX29iamVjdF9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ251bGxhYmxlX3R5cGVzX3Rlc3RfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdudW1lcmljX3R5cGVzX3Rlc3RfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdvYmplY3RfdHlwZV9iaW5kaW5nc19pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ29wZXJhdGlvbnNfdGVzdF9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ3Byb21pc2VfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdwdXRfZm9yd2FyZHNfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdzZXF1ZW5jZV91c2VyLmlkbCcsCi0gICAgICAgICdzaW5nbGVfb3BlcmF0aW9uX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnc3RhdGljX3Byb3BlcnRpZXNfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICdzdHJpbmdpZmllcl9hbm9ueW1vdXNfb3BlcmF0aW9uX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnc3RyaW5naWZpZXJfYXR0cmlidXRlX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAnc3RyaW5naWZpZXJfb3BlcmF0aW9uX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAndGFyZ2V0X2ludGVyZmFjZS5pZGwnLAotICAgICAgICAndW5pb25fdHlwZXNfaW50ZXJmYWNlLmlkbCcsCi0gICAgICAgICd3aW5kb3cuaWRsJywKLSAgICBdLAotCi0gICAgJ2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzJzogWwotICAgICAgICAnZGVyaXZlZF9kaWN0aW9uYXJ5LmlkbCcsCi0gICAgICAgICdkaWN0aW9uYXJ5X3dpdGhfZGljdGlvbmFyeV9tZW1iZXIuaWRsJywKLSAgICAgICAgJ3Rlc3RfZGljdGlvbmFyeS5pZGwnLAotICAgICAgICAndGVzdF9lbnVtLmlkbCcKLSAgICBdLAotCi0gICAgIyBQYXJ0aWFsIGludGVyZmFjZXMgYW5kIHRoZSByaWdodC1zaWRlIG9mICJpbXBsZW1lbnRzIgotICAgICMgQ29kZSB3aWxsIG5vdCBnZXQgZ2VuZXJhdGVkIGZvciB0aGVzZSBpbnRlcmZhY2VzOyB0aGV5IGFyZSB1c2VkIHRvIGFkZAotICAgICMgZnVuY3Rpb25hbGl0eSB0byBvdGhlciBpbnRlcmZhY2VzLgotICAgICdkZXBlbmRlbmN5X2lkbF9maWxlcyc6IFsKLSAgICAgICAgJ2ltcGxlbWVudGVkX2ludGVyZmFjZS5pZGwnLAotICAgICAgICAncGFydGlhbF9pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJ2ludGVyZmFjZV93aXRoX3Vuc3VwcG9ydGVkX3Byb3BlcnRpZXNfcGFydGlhbC5pZGwnLAotICAgIF0sCi0KLSAgICAndW5zdXBwb3J0ZWRfaW50ZXJmYWNlX2lkbF9maWxlcyc6IFsKLSAgICAgICd1bnN1cHBvcnRlZF9pbnRlcmZhY2UuaWRsJywKLSAgICBdLAotCi0gICAgIyBTcGVjaWZ5IGNvbXBvbmVudCBmb3IgZ2VuZXJhdGVkIHdpbmRvdyBJREwuCi0gICAgJ3dpbmRvd19jb21wb25lbnQnOiAndGVzdGluZycsCi0KLSAgICAnYmluZGluZ3NfZGVwZW5kZW5jaWVzJzogWyc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jayddLAotCi0gICAgJ2JpbmRpbmdzX2RlZmluZXMnOiBbCi0gICAgICAnRU5BQkxFX0NPTkRJVElPTkFMX0lOVEVSRkFDRScsCi0gICAgICAnRU5BQkxFX0NPTkRJVElPTkFMX1BST1BFUlRZJywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiaW5kaW5ncycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAjIFRoZSBnZW5lcmF0ZWRfYmluZGluZ3MgdGFyZ2V0IGNvbWVzIGZyb20gYmluZGluZ3MuZ3lwaS4KLSAgICAgICAgJ2dlbmVyYXRlZF9iaW5kaW5ncycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2JpbmRpbmdzX3Rlc3RfaW1wbGVtZW50YXRpb24nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb25zdGFudHNfaW50ZXJmYWNlLmNjJywKLSAgICAgICAgJ2NvbnN0cnVjdG9yX2ludGVyZmFjZS5jYycsCi0gICAgICAgICdleGNlcHRpb25zX2ludGVyZmFjZS5jYycsCi0gICAgICAgICdnYXJiYWdlX2NvbGxlY3Rpb25fdGVzdF9pbnRlcmZhY2UuY2MnLAotICAgICAgICAnbmFtZWRfY29uc3RydWN0b3JfaW50ZXJmYWNlLmNjJywKLSAgICAgICAgJ29wZXJhdGlvbnNfdGVzdF9pbnRlcmZhY2UuY2MnLAotICAgICAgICAncHV0X2ZvcndhcmRzX2ludGVyZmFjZS5jYycsCi0gICAgICAgICdzdGF0aWNfcHJvcGVydGllc19pbnRlcmZhY2UuY2MnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWyAnPEAoYmluZGluZ3NfZGVmaW5lcyknXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICdnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiaW5kaW5nc190ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXJyYXlfYnVmZmVyc190ZXN0LmNjJywKLSAgICAgICAgJ2FueV9iaW5kaW5nc190ZXN0LmNjJywKLSAgICAgICAgJ2FueV9kaWN0aW9uYXJ5X2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnYm9vbGVhbl90eXBlX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnY2FsbGJhY2tfZnVuY3Rpb25fdGVzdC5jYycsCi0gICAgICAgICdjYWxsYmFja19pbnRlcmZhY2VfdGVzdC5jYycsCi0gICAgICAgICdjb25kaXRpb25hbF9hdHRyaWJ1dGVfdGVzdC5jYycsCi0gICAgICAgICdjb25zdGFudHNfYmluZGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdjb25zdHJ1Y3Rvcl9iaW5kaW5nc190ZXN0LmNjJywKLSAgICAgICAgJ2NvbnZlcnRfc2ltcGxlX29iamVjdF90ZXN0LmNjJywKLSAgICAgICAgJ2RhdGVfYmluZGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdkZXBlbmRlbnRfaW50ZXJmYWNlX3Rlc3QuY2MnLAotICAgICAgICAnZGljdGlvbmFyeV90ZXN0LmNjJywKLSAgICAgICAgJ2RvbV9zdHJpbmdfYmluZGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdlbnVtZXJhdGlvbl9iaW5kaW5nc190ZXN0LmNjJywKLSAgICAgICAgJ2V2YWx1YXRlX3NjcmlwdF90ZXN0LmNjJywKLSAgICAgICAgJ2V4Y2VwdGlvbnNfYmluZGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdleHRlbmRlZF9hdHRyaWJ1dGVzX3Rlc3QuY2MnLAotICAgICAgICAnZ2FyYmFnZV9jb2xsZWN0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnZ2V0X293bl9wcm9wZXJ0eV9kZXNjcmlwdG9yLmNjJywKLSAgICAgICAgJ2dldHRlcl9zZXR0ZXJfdGVzdC5jYycsCi0gICAgICAgICdnbG9iYWxfaW50ZXJmYWNlX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnaW50ZXJmYWNlX29iamVjdF90ZXN0LmNjJywKLSAgICAgICAgJ251bGxhYmxlX3R5cGVzX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnbnVtZXJpY190eXBlX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnb2JqZWN0X3R5cGVfYmluZGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdvcGVyYXRpb25zX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnb3B0aW9uYWxfYXJndW1lbnRzX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAncHJvbWlzZV90ZXN0LmNjJywKLSAgICAgICAgJ3B1dF9mb3J3YXJkc190ZXN0LmNjJywKLSAgICAgICAgJ3NlcXVlbmNlX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnc3RhY2tfdHJhY2VfdGVzdC5jYycsCi0gICAgICAgICdzdGF0aWNfcHJvcGVydGllc19iaW5kaW5nc190ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ2lmaWVyX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAndW5pb25fdHlwZV9iaW5kaW5nc190ZXN0LmNjJywKLSAgICAgICAgJ3Vuc3VwcG9ydGVkX3Rlc3QuY2MnLAotICAgICAgICAndmFyaWFkaWNfYXJndW1lbnRzX2JpbmRpbmdzX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWyAnPEAoYmluZGluZ3NfZGVmaW5lcyknXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvZW5naW5lLmd5cDplbmdpbmUnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnYmluZGluZ3MnLAotICAgICAgICAnYmluZGluZ3NfdGVzdF9pbXBsZW1lbnRhdGlvbicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYmluZGluZ3NfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYmluZGluZ3NfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdiaW5kaW5nc190ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiaW5kaW5nc19zYW5kYm94JywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2JpbmRpbmdzX3NhbmRib3hfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwOnN0YW5kYWxvbmVfamF2YXNjcmlwdF9ydW5uZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICAgICdiaW5kaW5ncycsCi0gICAgICAgICdiaW5kaW5nc190ZXN0X2ltcGxlbWVudGF0aW9uJywKLSAgICAgIF0KLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2JpbmRpbmdzX3NhbmRib3hfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2JpbmRpbmdzX3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnYmluZGluZ3Nfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdjhjL19lbnYucHkgYi9jb2JhbHQvYmluZGluZ3MvdjhjL19lbnYucHkKaW5kZXggMDIxOTA4ZS4uMzMyZWFiYyAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL3Y4Yy9fZW52LnB5CisrKyBiL2NvYmFsdC9iaW5kaW5ncy92OGMvX2Vudi5weQpAQCAtMTUsMTIgKzE1LDEyIEBACiAjCiAiIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKIAotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCitmcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtbW9kdWxlCiBmcm9tIG9zIGltcG9ydCBwYXRoCiBpbXBvcnQgc3lzCiAKIF9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQogaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCisgIHByaW50KCclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikpCiAgIHN5cy5leGl0KDEpCiBsb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL2NvYmFsdC9iaW5kaW5ncy92OGMvaWRsX2NvbXBpbGVyX3Y4Yy5weSBiL2NvYmFsdC9iaW5kaW5ncy92OGMvaWRsX2NvbXBpbGVyX3Y4Yy5weQppbmRleCA1NmI2Y2Y3Li40YjBjOGJjIDEwMDY0NAotLS0gYS9jb2JhbHQvYmluZGluZ3MvdjhjL2lkbF9jb21waWxlcl92OGMucHkKKysrIGIvY29iYWx0L2JpbmRpbmdzL3Y4Yy9pZGxfY29tcGlsZXJfdjhjLnB5CkBAIC0yNCw0ICsyNCwxNCBAQAogZnJvbSBjb2JhbHQuYmluZGluZ3MudjhjLmNvZGVfZ2VuZXJhdG9yX3Y4YyBpbXBvcnQgQ29kZUdlbmVyYXRvclY4YwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChnZW5lcmF0ZV9iaW5kaW5ncyhDb2RlR2VuZXJhdG9yVjhjKSkKKyAgIyBUT0RPKGIvMjI1OTY0MjE4KTogVGhlIGZsYWtpbmVzcyBoZXJlIHNob3VsZCBiZSByZXNvbHZlZCBhbmQgcmV0cmllcworICAjIHJlbW92ZWQuCisgICMgUmV0cnkgdXAgdG8gNSB0aW1lcyBhcyB0aGlzIGNhbiBiZSBmbGFreQorICBsYXRlc3RfZXJyb3IgPSBOb25lCisgIGZvciBpIGluIHJhbmdlKDUpOgorICAgIHRyeToKKyAgICAgIHN5cy5leGl0KGdlbmVyYXRlX2JpbmRpbmdzKENvZGVHZW5lcmF0b3JWOGMpKQorICAgIGV4Y2VwdCBFT0ZFcnJvciBhcyBlOgorICAgICAgbGF0ZXN0X2Vycm9yID0gZQorICBpZiBsYXRlc3RfZXJyb3I6CisgICAgcmFpc2UgbGF0ZXN0X2Vycm9yCmRpZmYgLS1naXQgYS9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9pbnRlcmZhY2UuY2MudGVtcGxhdGUgYi9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9pbnRlcmZhY2UuY2MudGVtcGxhdGUKaW5kZXggMjlkYjYwYS4uYTExZTIyOSAxMDA2NDQKLS0tIGEvY29iYWx0L2JpbmRpbmdzL3Y4Yy90ZW1wbGF0ZXMvaW50ZXJmYWNlLmNjLnRlbXBsYXRlCisrKyBiL2NvYmFsdC9iaW5kaW5ncy92OGMvdGVtcGxhdGVzL2ludGVyZmFjZS5jYy50ZW1wbGF0ZQpAQCAtNTQwLDggKzU0MCw4IEBACiAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwYXJlbnRfdGVtcGxhdGUgPSB7e3BhcmVudF9pbnRlcmZhY2V9fTo6R2V0VGVtcGxhdGUoaXNvbGF0ZSk7CiAgICAgZnVuY3Rpb25fdGVtcGxhdGUtPkluaGVyaXQocGFyZW50X3RlbXBsYXRlKTsKICAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICBzdGQ6OmlzX2Jhc2Vfb2Y8e3twYXJlbnRfaW50ZXJmYWNlX25hbWV9fSwge3tpbnRlcmZhY2VfbmFtZX19Pjo6dmFsdWUsCi0gICAgICAgICJFeHBlY3RlZCB7e2ludGVyZmFjZV9uYW1lfX0gdG8gaGF2ZSBDKysgcGFyZW50IGNsYXNzICIKKyAgICAgICAgc3RkOjppc19iYXNlX29mPHt7cGFyZW50X2ludGVyZmFjZV9uYW1lfX0sIHt7aW1wbF9jbGFzc319Pjo6dmFsdWUsCisgICAgICAgICJFeHBlY3RlZCB7e2ltcGxfY2xhc3N9fSB0byBoYXZlIEMrKyBwYXJlbnQgY2xhc3MgIgogICAgICAgICAie3twYXJlbnRfaW50ZXJmYWNlX25hbWV9fSwgYmVjYXVzZSB0aGF0IGlzIGl0cyBXZWJJREwgcGFyZW50LiIpOwogICB9CiB7JSBlbGlmIGlzX2V4Y2VwdGlvbl9pbnRlcmZhY2UgJX0KQEAgLTYzNyw5ICs2MzcsNyBAQAogeyUgaWYgYXR0cmlidXRlLmludGVyZmFjZV9uYW1lID09IGludGVyZmFjZV9uYW1lICV9CiAgICAgICAgICAgZnVuY3Rpb25fdGVtcGxhdGUKIHslIGVsc2UgJX0KLSAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgdXNlICJhdHRyaWJ1dGUuaW50ZXJmYWNlX25hbWUiLCBhbmQgbm90Ci0gICAgICAgICAgLy8gImF0dHJpYnV0ZS5pZGxfbmFtZSIsIGJlY2F1c2Ugb2YgbmFtZWQgY29uc3RydWN0b3JzLgotICAgICAgICAgIFY4Y3t7YXR0cmlidXRlLmludGVyZmFjZV9uYW1lfX06OkdldFRlbXBsYXRlKGlzb2xhdGUpCisgICAgICAgICAgVjhje3thdHRyaWJ1dGUuaW1wbF9jbGFzc319OjpHZXRUZW1wbGF0ZShpc29sYXRlKQogeyUgZW5kaWYgJX0KICAgICAgICk7CiAgICAgfQpAQCAtODU5LDkgKzg1Nyw5IEBACiAjaWYgZGVmaW5lZCh7e2ludGVyZmFjZS5jb25kaXRpb25hbH19KQogeyUgZW5kaWYgJX0KICAgd3JhcHBlcl9mYWN0b3J5Xy0+UmVnaXN0ZXJXcmFwcGFibGVUeXBlKAotICAgICAge3tpbnRlcmZhY2UubmFtZX19Ojp7e2ludGVyZmFjZS5uYW1lfX1XcmFwcGFibGVUeXBlKCksCi0gICAgICBiYXNlOjpCaW5kKFY4Y3t7aW50ZXJmYWNlLm5hbWV9fTo6Q3JlYXRlV3JhcHBlciksCi0gICAgICBiYXNlOjpCaW5kKFY4Y3t7aW50ZXJmYWNlLm5hbWV9fTo6R2V0VGVtcGxhdGUpKTsKKyAgICAgIHt7aW50ZXJmYWNlLmltcGxfbmFtZX19Ojp7e2ludGVyZmFjZS5pbXBsX25hbWV9fVdyYXBwYWJsZVR5cGUoKSwKKyAgICAgIGJhc2U6OkJpbmQoVjhje3tpbnRlcmZhY2UuaW1wbF9uYW1lfX06OkNyZWF0ZVdyYXBwZXIpLAorICAgICAgYmFzZTo6QmluZChWOGN7e2ludGVyZmFjZS5pbXBsX25hbWV9fTo6R2V0VGVtcGxhdGUpKTsKIHslIGlmIGludGVyZmFjZS5jb25kaXRpb25hbCAlfQogI2VuZGlmICAvLyBkZWZpbmVkKHt7aW50ZXJmYWNlLmNvbmRpdGlvbmFsfX0pCiB7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy9SRUFETUUubWQgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL1JFQURNRS5tZAppbmRleCAyZmQ3MGY0Li40MDkzOTBjIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL1JFQURNRS5tZAorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL1JFQURNRS5tZApAQCAtNDMsNiArNDMsMTEgQEAKICAgICAgTm90ZTogV2hlbiBkZWNsYXJpbmcgYSBndGVzdF9maWx0ZXIsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIGZpbHRlcnMgZGVmaW5lZAogICAgICBpbiBHZXRXZWJQbGF0Zm9ybVRlc3RGaWx0ZXJzIGluIGNvbmZpZ3VyYXRpb24ucHkuCiAKKyAgSWYgeW91IHNlZSBhIEhUVFBDb25uZWN0aW9uIGVycm9yIHdoaWNoIGV2ZW50dWFsbHkKKyAgY2F1c2VzIGEgVGltZW91dEV4Y2VwdGlvbiBmb3IgdGhlIHRlc3QsIHlvdSBtaWdodCB3YW50CisgIHRvIGFkZCAiLS1zZXJ2ZXJfYmluZGluZ19hZGRyZXNzIGxvY2FsaG9zdCIgaW4geW91cgorICBweXRob24gY29tbWFuZC4KKwogIyMgVGVzdHMKIAogRWFjaCBzY3JpcHQgaW4gdGVzdHMvIGluY2x1ZGVzIG9uZSBweXRob24gdW5pdHRlc3QgdGVzdCBjYXNlLgpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy9fZW52LnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE5MDhlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL2JsYWNrX2JveF9jb2JhbHRfcnVubmVyLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy9ibGFja19ib3hfY29iYWx0X3J1bm5lci5weQppbmRleCBmYjA3ODNjLi5mOWVjMmRmIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL2JsYWNrX2JveF9jb2JhbHRfcnVubmVyLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvYmxhY2tfYm94X2NvYmFsdF9ydW5uZXIucHkKQEAgLTE3LDcgKzE3LDYgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0LnRvb2xzLmF1dG9tYXRlZF90ZXN0aW5nIGltcG9ydCBjb2JhbHRfcnVubmVyCiAKICMgVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGxvZ2ljcyBhcmUgc2hhcmVkIGJldHdlZW4gdGhpcyBtb2R1bGUgYW5kCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL2JsYWNrX2JveF90ZXN0cy5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvYmxhY2tfYm94X3Rlc3RzLnB5CmluZGV4IGJmYjczZDguLmU4MDcxM2YgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvYmxhY2tfYm94X3Rlc3RzLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvYmxhY2tfYm94X3Rlc3RzLnB5CkBAIC0yNSw5ICsyNSw4IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X2NvYmFsdF9ydW5uZXIKLWZyb20gcHJveHlfc2VydmVyIGltcG9ydCBQcm94eVNlcnZlcgorZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnByb3h5X3NlcnZlciBpbXBvcnQgUHJveHlTZXJ2ZXIKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBhYnN0cmFjdF9sYXVuY2hlcgogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGJ1aWxkCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgY29tbWFuZF9saW5lCkBAIC02OCw2ICs2Nyw4IEBACiAgICAgJ3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2VfdGVzdCcsCiAgICAgJ3dlYl9kZWJ1Z2dlcicsCiAgICAgJ3dlYl9wbGF0Zm9ybV90ZXN0cycsCisgICAgJ3dlYl93b3JrZXJfdGVzdCcsCisgICAgJ3NlcnZpY2Vfd29ya2VyX3Rlc3QnLAogXQogIyBUaGVzZSB0ZXN0cyBjYW4gb25seSBiZSBydW4gb24gcGxhdGZvcm1zIHdob3NlIGFwcCBsYXVuY2hlciBjYW4gc2VuZCBkZWVwCiAjIGxpbmtzLgpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy9wcm94eV9zZXJ2ZXIucHkgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Byb3h5X3NlcnZlci5weQppbmRleCBkZGY5YTVmLi43MGVmMzRkIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Byb3h5X3NlcnZlci5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Byb3h5X3NlcnZlci5weQpAQCAtMzEsNiArMzEsNyBAQAogCiAKIGNsYXNzIFByb3h5U2VydmVyKG9iamVjdCk6CisgICIiIkhUVFAgUHJveHkgU2VydmVyLiIiIgogCiAgIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICAgaG9zdG5hbWU9JzAuMC4wLjAnLApAQCAtMzgsMTQgKzM5LDE0IEBACiAgICAgICAgICAgICAgICBob3N0X3Jlc29sdmVfbWFwPU5vbmUsCiAgICAgICAgICAgICAgICBjbGllbnRfaXBzPU5vbmUpOgogICAgIHNlbGYuY29tbWFuZCA9IFsKLSAgICAgICAgJ3B5dGhvbicsCisgICAgICAgICdweXRob24zJywKICAgICAgICAgb3MucGF0aC5qb2luKFNSQ19ESVIsICd0aGlyZF9wYXJ0eScsICdwcm94eV9weScsICdwcm94eS5weScpLAogICAgICAgICAnLS1ob3N0bmFtZScsIGhvc3RuYW1lLCAnLS1wb3J0JywgcG9ydCwgJy0tbG9nLWxldmVsJywgJ1dBUk5JTkcnCiAgICAgXQogICAgIHNlbGYuaG9zdF9yZXNvbHZlcl9wYXRoID0gTm9uZQogCiAgICAgaWYgaG9zdF9yZXNvbHZlX21hcDoKLSAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgaG9zdHM6CisgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgaG9zdHM6CiAgICAgICAgIGpzb24uZHVtcChob3N0X3Jlc29sdmVfbWFwLCBob3N0cykKICAgICAgIHNlbGYuaG9zdF9yZXNvbHZlcl9wYXRoID0gaG9zdHMubmFtZQogICAgICAgc2VsZi5jb21tYW5kICs9IFsnLS1ob3N0X3Jlc29sdmVyJywgc2VsZi5ob3N0X3Jlc29sdmVyX3BhdGhdCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3NlcnZpY2Vfd29ya2VyX3Rlc3QuaHRtbCBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdGRhdGEvc2VydmljZV93b3JrZXJfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTJkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3NlcnZpY2Vfd29ya2VyX3Rlc3QuaHRtbApAQCAtMCwwICsxLDE0OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLQorICBOb3RlOiBUaGlzIGlzIGEgdmVyeSBiYXNpYyB0ZXN0IG9mIHRoZSBleGlzdGluZyBtaW5pbWFsIFNlcnZpY2UgV29ya2VyCisgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgY2FuIGJlIGV4cGFuZGVkIGFzIG1vcmUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZC4KKy0tPgorCis8aGVhZD4KKyAgICA8dGl0bGU+Q29iYWx0IFNlcnZpY2UgV29ya2VyIFRlc3Q8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSdibGFja19ib3hfanNfdGVzdF91dGlscy5qcyc+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorICAgIDxzY3JpcHQ+CisgICAgICAgIHZhciBtZXNzYWdlX2V2ZW50X2NvdW50ID0gMDsKKyAgICAgICAgY29uc29sZS5sb2coJ3J1bm5pbmcnKTsKKyAgICAgICAgaWYgKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpIHsKKyAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcuLjouLicpCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoRXhwZWN0ZWQpIFRlc3QgaW52YWxpZCBzY3JpcHQgVVJMOiAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbCgiVHlwZUVycm9yIiwgYCR7ZXJyb3J9YCk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZXZlbnRfY291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCdhcmc6c2VydmljZV93b3JrZXJfdGVzdC5qcycpCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoRXhwZWN0ZWQpIFRlc3Qgc2NyaXB0IFVSTCB0aGF0IGlzIG5vdCBodHRwIG9yIGh0dHBzOiAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbCgiVHlwZUVycm9yIiwgYCR7ZXJyb3J9YCk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZXZlbnRfY291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCdodHRwOiUyZnNlcnZpY2Vfd29ya2VyX3Rlc3QuanMnKQorICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZWdpc3RyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgbm90UmVhY2hlZCgpOworICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgKEV4cGVjdGVkKSBUZXN0IHNjcmlwdCBVUkwgd2l0aCBlc2NhcGVkIHNsYXNoOiAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbCgiVHlwZUVycm9yIiwgYCR7ZXJyb3J9YCk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZXZlbnRfY291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCdzZXJ2aWNlX3dvcmtlcl90ZXN0LmpzJywgeworICAgICAgICAgICAgICAgIHNjb3BlOiAnLi46Li4nLAorICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVnaXN0cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIG5vdFJlYWNoZWQoKTsKKyAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYChFeHBlY3RlZCkgVGVzdCBpbnZhbGlkIHNjb3BlIFVSTDogJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwoIlR5cGVFcnJvciIsIGAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50X2NvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcignc2VydmljZV93b3JrZXJfdGVzdC5qcycsIHsKKyAgICAgICAgICAgICAgICBzY29wZTogJ2FyZzovJywKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoRXhwZWN0ZWQpIFRlc3Qgc2NvcGUgVVJMIHRoYXQgaXMgbm90IGh0dHAgb3IgaHR0cHM6ICR7ZXJyb3J9YCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFsKCJUeXBlRXJyb3IiLCBgJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9ldmVudF9jb3VudCArPSAxOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJ3NlcnZpY2Vfd29ya2VyX3Rlc3QuanMnLCB7CisgICAgICAgICAgICAgICAgc2NvcGU6ICcvJTVjJywKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoRXhwZWN0ZWQpIFRlc3Qgc2NvcGUgVVJMIHdpdGggZXNjYXBlZCBzbGFzaDogJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwoIlR5cGVFcnJvciIsIGAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50X2NvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyBSZXBlYXQgYSBmZXcgdGltZXMgdG8gdGVzdCB0aGUgJ2VxdWl2YWxlbnQgam9iJyBhbmQgZmluaXNoIGpvYiBsb2dpYy4KKyAgICAgICAgICAgIGZvciAobGV0IHJlcGVhdGVkID0gMDsgcmVwZWF0ZWQgPCAxNTsgcmVwZWF0ZWQrKykgeworICAgICAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tLycsIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcGU6ICcvJywKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVnaXN0cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYChFeHBlY3RlZCkgVGVzdCBTY3JpcHQgVVJMIGlzIG5vdCB0cnVzdGVkOiAke2Vycm9yfWApOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwoIlNlY3VyaXR5RXJyb3I6IFNlcnZpY2UgV29ya2VyIFJlZ2lzdGVyIGZhaWxlZDogU2NyaXB0IFVSTCBpcyBOb3QgVHJ1c3RlZC4iLCBgJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZXZlbnRfY291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJ2h0dHA6Ly8xMjcuMC4wLjEwMDoyMzQ1LycpCisgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVnaXN0cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgbm90UmVhY2hlZCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYChFeHBlY3RlZCkgVGVzdCBzY3JpcHQgVVJMIHdpdGggZGlmZmVyZW50IG9yaWdpbjogJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbCgiU2VjdXJpdHlFcnJvcjogU2VydmljZSBXb3JrZXIgUmVnaXN0ZXIgZmFpbGVkOiBTY3JpcHQgVVJMIGFuZCByZWZlcnJlciBvcmlnaW4gYXJlIG5vdCB0aGUgc2FtZS4iLCBgJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50X2NvdW50ICs9IDE7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcignc2VydmljZV93b3JrZXJfdGVzdC5qcycsIHsKKyAgICAgICAgICAgIHNjb3BlOiAnaHR0cDovLzEyNy4wLjAuMTAwOjIzNDUvJywKKyAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZWdpc3RyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgKEV4cGVjdGVkKSBUZXN0IHNjb3BlIFVSTCB3aXRoIGRpZmZlcmVudCBvcmlnaW46ICR7ZXJyb3J9YCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwoIlNlY3VyaXR5RXJyb3I6IFNlcnZpY2UgV29ya2VyIFJlZ2lzdGVyIGZhaWxlZDogU2NvcGUgVVJMIGFuZCByZWZlcnJlciBvcmlnaW4gYXJlIG5vdCB0aGUgc2FtZS4iLCBgJHtlcnJvcn1gKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlX2V2ZW50X2NvdW50ICs9IDE7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBGaW5hbGx5LCB0ZXN0IGEgc3VjY2VlZGluZyByZWdpc3RyYXRpb24uCisgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCdzZXJ2aWNlX3dvcmtlcl90ZXN0LmpzJywgeworICAgICAgICAgICAgc2NvcGU6ICcvcmVnaXN0cmF0aW9uL3Njb3BlJywKKyAgICAgICAgfSkKKyAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZWdpc3RyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgKEV4cGVjdGVkKSBSZWdpc3RyYXRpb24gU3VjY2VlZGVkOiAke3JlZ2lzdHJhdGlvbn1gKTsKKyAgICAgICAgICAgICAgICBhc3NlcnROb3RFcXVhbChudWxsLCByZWdpc3RyYXRpb24pOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFsKG51bGwsIHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbChudWxsLCByZWdpc3RyYXRpb24ud2FpdGluZyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwobnVsbCwgcmVnaXN0cmF0aW9uLmFjdGl2ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgUmVnaXN0cmF0aW9uT3B0aW9ucy50eXBlIGlzICdpbXBvcnRzJy4KKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbCgnaW1wb3J0cycsIHJlZ2lzdHJhdGlvbi51cGRhdGVWaWFDYWNoZSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWdpc3RyYXRpb24uc2NvcGUuZW5kc1dpdGgoJy9yZWdpc3RyYXRpb24vc2NvcGUnKSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZV9ldmVudF9jb3VudCArPSAxOworICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbm90UmVhY2hlZCgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoCisgICAgICAgICAgICAoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWwoMjQsIG1lc3NhZ2VfZXZlbnRfY291bnQpOworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFdmVudHM6ICIsIG1lc3NhZ2VfZXZlbnRfY291bnQpCisgICAgICAgICAgICAgICAgb25FbmRUZXN0KCk7CisgICAgICAgICAgICB9LCA1MDApOworCisgICAgICAgIGNvbnNvbGUubG9nKCdlbmQnKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdGRhdGEvd2ViX3dvcmtlcl90ZXN0Lmh0bWwgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3dlYl93b3JrZXJfdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Mzk5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3dlYl93b3JrZXJfdGVzdC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorICBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzwhLS0KKyAgTm90ZTogVGhpcyBpcyBhIHZlcnkgYmFzaWMgdGVzdCBvZiB0aGUgZXhpc3RpbmcgbWluaW1hbCBXZWIgV29ya2VyCisgIGZ1bmN0aW9uYWxpdHkuIFRoaXMgY2FuIGJlIGV4cGFuZGVkIGFzIG1vcmUgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCwKKyAgYnV0IHByb2JhYmx5IHdpbGwgYmUgc3VwZXJzZWRlZCBieSBXZWIgUGxhdGZvcm0gVGVzdHMuCistLT4KKzxoZWFkPgorICAgIDx0aXRsZT5Db2JhbHQgV2ViIFdvcmtlciBUZXN0PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0nYmxhY2tfYm94X2pzX3Rlc3RfdXRpbHMuanMnPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxzY3JpcHQ+CisgICAgdmFyIG1lc3NhZ2VfZXZlbnRfY291bnQgPSAwOworICAgIGNvbnNvbGUubG9nKCdydW5uaW5nJyk7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3dlYl93b3JrZXJfdGVzdC5qcycpOworICAgIGNvbnNvbGUubG9nKHdvcmtlcik7CisgICAgdmFyIGRhdGEgPSAid2luZG93IGRhdGEiOworICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ3dpbmRvdyBnb3Qgb25tZXNzYWdlIGZyb20gd29ya2VyOiAnICsgZXZlbnQuZGF0YSk7CisgICAgICAgIG1lc3NhZ2VfZXZlbnRfY291bnQgKz0gMTsKKyAgICAgICAgaWYgKG1lc3NhZ2VfZXZlbnRfY291bnQgPT0gMSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWwoZXZlbnQuZGF0YSwgJ3dvcmtlciBkYXRhJyk7CisgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZV9ldmVudF9jb3VudCAlIDIgPT0gMCkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWwoZXZlbnQuZGF0YSwgJ3dvcmtlciByZWNlaXZlZCBjb3JyZWN0IG1lc3NhZ2UnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFsKGV2ZW50LmRhdGEsIGRhdGEudG9VcHBlckNhc2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1lc3NhZ2VfZXZlbnRfY291bnQgPT0gNSkgeworICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoCisgICAgICAgICAgICAgICAgKCkgPT4geworICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbChtZXNzYWdlX2V2ZW50X2NvdW50LCA1KTsKKyAgICAgICAgICAgICAgICAgICAgb25FbmRUZXN0KCk7CisgICAgICAgICAgICAgICAgfSwgMjUwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVzc2FnZV9ldmVudF9jb3VudCA+IDUpIHsKKyAgICAgICAgICAgIG5vdFJlYWNoZWQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgd29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAgY29uc29sZS5sb2coJ3dpbmRvdyBnb3Qgb25lcnJvcicpOworICAgICAgICBub3RSZWFjaGVkKCk7CisgICAgfTsKKyAgICBjb25zb2xlLmxvZygncG9zdGluZycpOworICAgIHdvcmtlci5wb3N0TWVzc2FnZShkYXRhKTsKKyAgICB3aW5kb3cuc2V0VGltZW91dCgKKyAgICAgICAgKCkgPT4geyBjb25zb2xlLmxvZygncG9zdGluZycpOyB3b3JrZXIucG9zdE1lc3NhZ2UoZGF0YSk7IH0sIDI1MCk7CisgICAgY29uc29sZS5sb2coJ2VuZCcpOworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3dlYl93b3JrZXJfdGVzdC5qcyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdGRhdGEvd2ViX3dvcmtlcl90ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RkYXRhL3dlYl93b3JrZXJfdGVzdC5qcwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwordmFyIGRhdGEgPSAid29ya2VyIGRhdGEiOwordGhpcy5wb3N0TWVzc2FnZShkYXRhKTsKK3RoaXMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEgPT09ICd3aW5kb3cgZGF0YScpIHsKKyAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSgnd29ya2VyIHJlY2VpdmVkIGNvcnJlY3QgbWVzc2FnZScpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UoJ3dvcmtlciByZWNlaXZlZCB3cm9uZyBtZXNzYWdlJykKKyAgICB9CisgICAgdmFyIGRhdGEgPSBldmVudC5kYXRhLnRvVXBwZXJDYXNlKCk7CisgICAgdGhpcy5wb3N0TWVzc2FnZShkYXRhKTsKK307Cit0aGlzCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL19lbnYucHkgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCi0gIHN5cy5leGl0KDEpCi1sb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvYWxsb3dfZXZhbC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvYWxsb3dfZXZhbC5weQppbmRleCAzZGYyNTk0Li41MDNmZmJiIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2FsbG93X2V2YWwucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9hbGxvd19ldmFsLnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBpZiBDb2JhbHQgY2xpZW50IHBhZ2UgY2FuIHVzZSBldmFsKCkgd2hlbiBDU1AgaXMgbWlzc2luZy4iIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBUaHJlYWRlZFdlYlNlcnZlcgogCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2NhbmNlbF9zeW5jX2xvYWRzX3doZW5fc3VzcGVuZGVkLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9jYW5jZWxfc3luY19sb2Fkc193aGVuX3N1c3BlbmRlZC5weQppbmRleCAxOWM2ODc5Li40MDM2ODUzIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2NhbmNlbF9zeW5jX2xvYWRzX3doZW5fc3VzcGVuZGVkLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY2FuY2VsX3N5bmNfbG9hZHNfd2hlbl9zdXNwZW5kZWQucHkKQEAgLTM2LDE0ICszNiwxMiBAQAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCxnLWJhZC1pbXBvcnQtb3JkZXIKLQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwotaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgdXJscGFyc2UKIAogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBNYWtlUmVxdWVzdEhhbmRsZXJDbGFzcwpAQCAtNjYsNyArNjQsNyBAQAogICBkZWYgZG9fR0VUKHNlbGYpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgICAgIiIiSGFuZGxlcyBIVFRQIEdFVCByZXF1ZXN0cyBmb3IgcmVzb3VyY2VzLiIiIgogCi0gICAgcGFyc2VkX3BhdGggPSB1cmxwYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCisgICAgcGFyc2VkX3BhdGggPSB1cmxwYXJzZShzZWxmLnBhdGgpCiAgICAgaWYgcGFyc2VkX3BhdGgucGF0aCA9PSAnL3Rlc3RkYXRhLycgKyBfQ0FOQ0VMX1NZTkNfTE9BRFNfV0hFTl9TVVNQRU5ERURfSlM6CiAgICAgICBfcmVjZWl2ZWRfc2NyaXB0X3Jlc291cmNlX3JlcXVlc3Quc2V0KCkKICAgICAgICMgSXQgaXMgaW1wb3J0YW50IG5vdCB0byBzZW5kIGFueSByZXNwb25zZSBiYWNrLCBzbyB3ZSBibG9jay4KQEAgLTgxLDcgKzc5LDcgQEAKIGNsYXNzIENhbmNlbFN5bmNMb2Fkc1doZW5TdXNwZW5kZWQoYmxhY2tfYm94X3Rlc3RzLkJsYWNrQm94VGVzdENhc2UpOgogICAiIiJUZXN0cyBjYW5jZWxsYXRpb24gb2Ygc3luY2hyb25vdXMgbG9hZGluZyBvZiBzY3JpcHRzIG9uIFN1c3BlbmQuIiIiCiAKLSAgZGVmIF9Mb2FkUGFnZShzZWxmLCB3ZWJkcml2ZXIsIHVybCk6CisgIGRlZiBfbG9hZF9wYWdlKHNlbGYsIHdlYmRyaXZlciwgdXJsKToKICAgICAiIiJJbnN0cnVjdHMgd2ViZHJpdmVyIHRvIG5hdmlnYXRlIHRvIHVybC4iIiIKICAgICB0cnk6CiAgICAgICAjIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgYSBibG9ja2luZyByZXF1ZXN0LCBhbmQgcmV0dXJucyBvbmx5IHdoZW4gdGhlCkBAIC0xMDEsNyArOTksNyBAQAogICAgICAgICAgIHRhcmdldF91cmwgPSBzZXJ2ZXIuR2V0VVJMKGZpbGVfbmFtZT0nLi4vdGVzdGRhdGEvJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NBTkNFTF9TWU5DX0xPQURTX1dIRU5fU1VTUEVOREVEX0hUTUwpCiAgICAgICAgICAgY29iYWx0X2xhdW5jaGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCi0gICAgICAgICAgICAgIHRhcmdldD1DYW5jZWxTeW5jTG9hZHNXaGVuU3VzcGVuZGVkLl9Mb2FkUGFnZSwKKyAgICAgICAgICAgICAgdGFyZ2V0PUNhbmNlbFN5bmNMb2Fkc1doZW5TdXNwZW5kZWQuX2xvYWRfcGFnZSwKICAgICAgICAgICAgICAgYXJncz0oc2VsZiwgcnVubmVyLndlYmRyaXZlciwgdGFyZ2V0X3VybCkpCiAgICAgICAgICAgY29iYWx0X2xhdW5jaGVyX3RocmVhZC5zdGFydCgpCiAKQEAgLTEwOSw3ICsxMDcsNyBAQAogICAgICAgICAgIGxvZ2dpbmcuaW5mbygnV2FpdGluZyBmb3Igc2NyaXB0IHJlc291cmNlIHJlcXVlc3QnKQogICAgICAgICAgIHJlcXVlc3RfcmVjZWl2ZWQgPSBfcmVjZWl2ZWRfc2NyaXB0X3Jlc291cmNlX3JlcXVlc3Qud2FpdCgKICAgICAgICAgICAgICAgX01BWF9BTExPVFRFRF9USU1FX1NFQ09ORFMpCi0gICAgICAgICAgbG9nZ2luZy5pbmZvKCdSZXF1ZXN0IHJlY2VpdmVkOiB7fScuZm9ybWF0KHJlcXVlc3RfcmVjZWl2ZWQpKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnUmVxdWVzdCByZWNlaXZlZDogJXMnLCByZXF1ZXN0X3JlY2VpdmVkKQogICAgICAgICAgICMgU3RlcCA1LiBXYWl0IGZvciBhIHJlcXVlc3QgZm9yIGphdmFzY3JpcHQgcmVzb3VyY2UuCiAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVlc3RfcmVjZWl2ZWQpCiAKQEAgLTEyOCw3ICsxMjYsNyBAQAogICAgIGV4Y2VwdDogICMgcHlsaW50OiBkaXNhYmxlPWJhcmUtZXhjZXB0CiAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICMgQ29uc2lkZXIgYW4gZXhjZXB0aW9uIGJlaW5nIHRocm93biBhcyBhIHRlc3QgZmFpbHVyZS4KLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKKyAgICAgIHNlbGYuZmFpbCgnVGVzdCBmYWlsdXJlJykKICAgICBmaW5hbGx5OgogICAgICAgbG9nZ2luZy5pbmZvKCdDbGVhbmluZyB1cC4nKQogICAgICAgX3Rlc3RfZmluaXNoZWQuc2V0KCkKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY29tcHJlc3Npb25fdGVzdC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY29tcHJlc3Npb25fdGVzdC5weQppbmRleCA4MDdiMDkxLi41MDVjYzQ1IDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2NvbXByZXNzaW9uX3Rlc3QucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9jb21wcmVzc2lvbl90ZXN0LnB5CkBAIC0yMCw3ICsyMCw3IEBACiAgIGltcG9ydCBicm90bGkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgYnJvdGxpID0gTm9uZQotZnJvbSBTaW1wbGVIVFRQU2VydmVyIGltcG9ydCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKK2Zyb20gc2l4Lm1vdmVzLlNpbXBsZUhUVFBTZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBUaHJlYWRlZFdlYlNlcnZlcgogCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2NvbmNlYWxfdmlzaWJpbGl0eS5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY29uY2VhbF92aXNpYmlsaXR5LnB5CmluZGV4IGJjOWE0Y2MuLjVkZjYzZGUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY29uY2VhbF92aXNpYmlsaXR5LnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvY29uY2VhbF92aXNpYmlsaXR5LnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBjb3JyZWN0IHZpc2liaWxpdHkgY2hhbmdlcyBkdXJpbmcgYW5kIGFmdGVyIGNvbmNlYWwgZXZlbnQuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9kZWVwX2xpbmtzLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9kZWVwX2xpbmtzLnB5CmluZGV4IDVlNGVlMDAuLjRhNjlmZmUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvZGVlcF9saW5rcy5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2RlZXBfbGlua3MucHkKQEAgLTMyLDExICszMiwxMSBAQAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCxnLWJhZC1pbXBvcnQtb3JkZXIKLQogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawpAQCAtNDUsOSArNDUsNiBAQAogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IE1ha2VSZXF1ZXN0SGFuZGxlckNsYXNzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIAotaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKLWltcG9ydCB1cmxwYXJzZQotCiBfREVFUF9MSU5LU19IVE1MID0gJ2RlZXBfbGlua3MuaHRtbCcKIF9ERUVQX0xJTktTX0pTID0gJ2RlZXBfbGlua3MuanMnCiBfTUFYX0FMTE9UVEVEX1RJTUVfU0VDT05EUyA9IDYwCkBAIC02NCw3ICs2MSw3IEBACiAgIGRlZiBkb19HRVQoc2VsZik6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgICAiIiJIYW5kbGVzIEhUVFAgR0VUIHJlcXVlc3RzIGZvciByZXNvdXJjZXMuIiIiCiAKLSAgICBwYXJzZWRfcGF0aCA9IHVybHBhcnNlLnVybHBhcnNlKHNlbGYucGF0aCkKKyAgICBwYXJzZWRfcGF0aCA9IHVybHBhcnNlKHNlbGYucGF0aCkKICAgICBpZiBwYXJzZWRfcGF0aC5wYXRoID09ICcvdGVzdGRhdGEvJyArIF9ERUVQX0xJTktTX0pTOgogICAgICAgIyBJdCBpcyBpbXBvcnRhbnQgbm90IHRvIHNlbmQgYW55IHJlc3BvbnNlIGJhY2ssIHNvIHdlIGJsb2NrLgogICAgICAgbG9nZ2luZy5pbmZvKCdXYWl0aW5nIG9uIGxpbmtzIHRvIGJlIGZpcmVkLicpCkBAIC04MSw3ICs3OCw3IEBACiBjbGFzcyBEZWVwTGluayhibGFja19ib3hfdGVzdHMuQmxhY2tCb3hUZXN0Q2FzZSk6CiAgICIiIlRlc3RzIGZpcmluZyBkZWVwIGxpbmtzIGJlZm9yZSB3ZWIgbW9kdWxlIGlzIGxvYWRlZC4iIiIKIAotICBkZWYgX0xvYWRQYWdlKHNlbGYsIHdlYmRyaXZlciwgdXJsKToKKyAgZGVmIF9sb2FkX3BhZ2Uoc2VsZiwgd2ViZHJpdmVyLCB1cmwpOgogICAgICIiIkluc3RydWN0cyB3ZWJkcml2ZXIgdG8gbmF2aWdhdGUgdG8gdXJsLiIiIgogICAgIHRyeToKICAgICAgICMgTm90ZTogVGhlIGZvbGxvd2luZyBpcyBhIGJsb2NraW5nIHJlcXVlc3QsIGFuZCByZXR1cm5zIG9ubHkgd2hlbiB0aGUKQEAgLTkxLDcgKzg4LDcgQEAKICAgICBleGNlcHQ6ICAjIHB5bGludDogZGlzYWJsZT1iYXJlLWV4Y2VwdAogICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAKLSAgZGVmIF9TZW5kTGluayhzZWxmLCBxdWVyeV9wYXJhbWV0ZXI9JycpOgorICBkZWYgX3NlbmRfbGluayhzZWxmLCBxdWVyeV9wYXJhbWV0ZXI9JycpOgogICAgICIiIlRlc3Qgc2VuZGluZyBsaW5rcyBpbnRvIENvYmFsdCBhZnRlciBpdCdzIHN0YXJ0ZWQuIiIiCiAKICAgICBsb2dnaW5nLmluZm8oJ1sgUlVOIF0gJyArIGluc3BlY3Quc3RhY2soKVsxXVszXSArICcgJyArIHF1ZXJ5X3BhcmFtZXRlcikKQEAgLTEwNSwxNCArMTAyLDE0IEBACiAgICAgICAgICAgaWYgcXVlcnlfcGFyYW1ldGVyICE9ICcnOgogICAgICAgICAgICAgdGFyZ2V0X3VybCArPSAnPycgKyBxdWVyeV9wYXJhbWV0ZXIKICAgICAgICAgICBjb2JhbHRfbGF1bmNoZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKLSAgICAgICAgICAgICAgdGFyZ2V0PURlZXBMaW5rLl9Mb2FkUGFnZSwKKyAgICAgICAgICAgICAgdGFyZ2V0PURlZXBMaW5rLl9sb2FkX3BhZ2UsCiAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYsIHJ1bm5lci53ZWJkcml2ZXIsIHRhcmdldF91cmwpKQogICAgICAgICAgIGNvYmFsdF9sYXVuY2hlcl90aHJlYWQuc3RhcnQoKQogCiAgICAgICAgICAgIyBTdGVwIDMuIFNlbmQgMyBkZWVwIGxpbmtzCiAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNCk6CiAgICAgICAgICAgICBsaW5rID0gJ2xpbmsgJyArIHN0cihpKQotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdTZW5kaW5nIGxpbmsgOiAnICsgbGluaykKKyAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnU2VuZGluZyBsaW5rIDogJXMnLCBsaW5rKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5TZW5kRGVlcExpbmsobGluaykpCiAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdMaW5rcyBmaXJlZC4nKQogICAgICAgICAgICMgU3RlcCA0LiBMb2FkICYgcnVuIHRoZSBqYXZhc2NyaXB0IHJlc291cmNlLgpAQCAtMTIzLDE5ICsxMjAsMTkgQEAKICAgICAgICAgICAjIG9mIHRpbWUgKGN1cnJlbnQgZGVmYXVsdCBpcyAzMCBzZWNvbmRzKS4KICAgICAgICAgICBzdWNjZXNzID0gcnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKQogICAgICAgICAgIGlmIHN1Y2Nlc3M6Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1sgT0sgXSAnICsgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdbIE9LIF0gJXMnLCBpbnNwZWN0LnN0YWNrKClbMV1bM10pCiAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnWyBGQUlMRUQgXSAnICsgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdbIEZBSUxFRCBdICVzJywgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQogICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQogICAgIGV4Y2VwdDogICMgcHlsaW50OiBkaXNhYmxlPWJhcmUtZXhjZXB0CiAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICMgQ29uc2lkZXIgYW4gZXhjZXB0aW9uIGJlaW5nIHRocm93biBhcyBhIHRlc3QgZmFpbHVyZS4KLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKKyAgICAgIHNlbGYuZmFpbCgnVGVzdCBmYWlsdXJlJykKICAgICBmaW5hbGx5OgogICAgICAgbG9nZ2luZy5pbmZvKCdDbGVhbmluZyB1cC4nKQogICAgICAgX3NjcmlwdF9sb2FkaW5nX3NpZ25hbC5zZXQoKQogCi0gIGRlZiBfU3RhcnRMaW5rKHNlbGYsIHF1ZXJ5X3BhcmFtZXRlcj0nJyk6CisgIGRlZiBfc3RhcnRfbGluayhzZWxmLCBxdWVyeV9wYXJhbWV0ZXI9JycpOgogICAgICIiIlRlc3QgdGhlIGluaXRpYWwgbGluayBwcm92aWRlZCB3aGVuIHN0YXJ0aW5nIENvYmFsdC4iIiIKIAogICAgIGxvZ2dpbmcuaW5mbygnWyBSVU4gXSAnICsgaW5zcGVjdC5zdGFjaygpWzFdWzNdICsgJyAnICsgcXVlcnlfcGFyYW1ldGVyKQpAQCAtMTQ5LDEyICsxNDYsMTIgQEAKICAgICAgICAgICB1cmw9dXJsLCB0YXJnZXRfcGFyYW1zPVsnLS1saW5rPScgKyBpbml0aWFsX2RlZXBfbGlua10pIGFzIHJ1bm5lcjoKICAgICAgICAgc3VjY2VzcyA9IHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkKICAgICAgICAgaWYgc3VjY2VzczoKLSAgICAgICAgICBsb2dnaW5nLmluZm8oJ1sgT0sgXSAnICsgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnWyBPSyBdICVzJywgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQogICAgICAgICBlbHNlOgotICAgICAgICAgIGxvZ2dpbmcuaW5mbygnWyBGQUlMRUQgXSAnICsgaW5zcGVjdC5zdGFjaygpWzFdWzNdKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnWyBGQUlMRUQgXSAlcycsIGluc3BlY3Quc3RhY2soKVsxXVszXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCiAKLSAgZGVmIF9EZWxheWVkTGluayhzZWxmLCBxdWVyeV9wYXJhbWV0ZXI9JycpOgorICBkZWYgX2RlbGF5ZWRfbGluayhzZWxmLCBxdWVyeV9wYXJhbWV0ZXI9JycpOgogICAgICIiIlRlc3Qgc2VuZGluZyBsaW5rcyBpbnRvIENvYmFsdCBhZnRlciBpdCdzIHN0YXJ0ZWQuIiIiCiAKICAgICBsb2dnaW5nLmluZm8oJ1sgUlVOIF0gJyArIGluc3BlY3Quc3RhY2soKVsxXVszXSArICcgJyArIHF1ZXJ5X3BhcmFtZXRlcikKQEAgLTE2OCw3ICsxNjUsNyBAQAogICAgICAgICAgIGlmIHF1ZXJ5X3BhcmFtZXRlciAhPSAnJzoKICAgICAgICAgICAgIHRhcmdldF91cmwgKz0gJz8nICsgcXVlcnlfcGFyYW1ldGVyCiAgICAgICAgICAgY29iYWx0X2xhdW5jaGVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCi0gICAgICAgICAgICAgIHRhcmdldD1EZWVwTGluay5fTG9hZFBhZ2UsCisgICAgICAgICAgICAgIHRhcmdldD1EZWVwTGluay5fbG9hZF9wYWdlLAogICAgICAgICAgICAgICBhcmdzPShzZWxmLCBydW5uZXIud2ViZHJpdmVyLCB0YXJnZXRfdXJsKSkKICAgICAgICAgICBjb2JhbHRfbGF1bmNoZXJfdGhyZWFkLnN0YXJ0KCkKIApAQCAtMTgwLDcgKzE3Nyw3IEBACiAKICAgICAgICAgICAjIFN0ZXAgNS4gU2VuZCBkZWVwIGxpbmsKICAgICAgICAgICBsaW5rID0gJ2xpbmsgMycgICMgRXhwZWN0ZWQgYnkgb3VyIHRlc3QgSlMKLSAgICAgICAgICBsb2dnaW5nLmluZm8oJ1NlbmRpbmcgbGluayA6ICcgKyBsaW5rKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnU2VuZGluZyBsaW5rIDogJXMnLCBsaW5rKQogICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuU2VuZERlZXBMaW5rKGxpbmspKQogICAgICAgICAgIGxvZ2dpbmcuaW5mbygnTGlua3MgZmlyZWQuJykKIApAQCAtMTg5LDEwNCArMTg2LDExNiBAQAogICAgICAgICAgICMgb2YgdGltZSAoY3VycmVudCBkZWZhdWx0IGlzIDMwIHNlY29uZHMpLgogICAgICAgICAgIHN1Y2Nlc3MgPSBydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpCiAgICAgICAgICAgaWYgc3VjY2VzczoKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnWyBPSyBdICcgKyBpbnNwZWN0LnN0YWNrKClbMV1bM10pCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1sgT0sgXSAlcycsIGluc3BlY3Quc3RhY2soKVsxXVszXSkKICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdbIEZBSUxFRCBdICcgKyBpbnNwZWN0LnN0YWNrKClbMV1bM10pCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ1sgRkFJTEVEIF0gJXMnLCBpbnNwZWN0LnN0YWNrKClbMV1bM10pCiAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCiAgICAgZXhjZXB0OiAgIyBweWxpbnQ6IGRpc2FibGU9YmFyZS1leGNlcHQKICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgIyBDb25zaWRlciBhbiBleGNlcHRpb24gYmVpbmcgdGhyb3duIGFzIGEgdGVzdCBmYWlsdXJlLgotICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlKQorICAgICAgc2VsZi5mYWlsKCdUZXN0IGZhaWx1cmUnKQogICAgIGZpbmFsbHk6CiAgICAgICBsb2dnaW5nLmluZm8oJ0NsZWFuaW5nIHVwLicpCiAgICAgICBfc2NyaXB0X2xvYWRpbmdfc2lnbmFsLnNldCgpCiAKICAgZGVmIHRlc3RfZGVsYXllZF9saW5rX3VuY29uc3VtZWQoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IGEgZGVlcCBsaW5rIGRvZXMgbm90IGhhdmUgdG8gYmUgY29uc3VtZWQuIiIiCi0gICAgcmV0dXJuIHNlbGYuX0RlbGF5ZWRMaW5rKCdjb25zdW1lZCZkZWxheWVkbGluaycpCisgICAgcmV0dXJuIHNlbGYuX2RlbGF5ZWRfbGluaygnY29uc3VtZWQmZGVsYXllZGxpbmsnKQogCiAgIGRlZiB0ZXN0X2RlbGF5ZWRfbGlua19hbmRfY29uc3VtZShzZWxmKToKICAgICAiIiJUZXN0IHRoYXQgYSBkZWVwIGxpbmsgaXMgcmVjZWl2ZWQuIiIiCi0gICAgcmV0dXJuIHNlbGYuX0RlbGF5ZWRMaW5rKCdjb25zdW1lJmRlbGF5ZWRsaW5rJykKKyAgICByZXR1cm4gc2VsZi5fZGVsYXllZF9saW5rKCdjb25zdW1lJmRlbGF5ZWRsaW5rJykKIAogICBkZWYgdGVzdF9zZW5kX2xpbmtfdW5jb25zdW1lZChzZWxmKToKICAgICAiIiJUZXN0IHRoYXQgdGhlIGxpbmsgZG9lcyBub3QgaGF2ZSB0byBiZSBjb25zdW1lZC4iIiIKLSAgICByZXR1cm4gc2VsZi5fU2VuZExpbmsoKQorICAgIHJldHVybiBzZWxmLl9zZW5kX2xpbmsoKQogCiAgIGRlZiB0ZXN0X3NlbmRfbGlua19hbmRfY29uc3VtZShzZWxmKToKICAgICAiIiJUZXN0IHRoYXQgdGhlIGxhc3QgbGluayBpcyByZWNlaXZlZC4iIiIKLSAgICByZXR1cm4gc2VsZi5fU2VuZExpbmsoJ2NvbnN1bWUnKQorICAgIHJldHVybiBzZWxmLl9zZW5kX2xpbmsoJ2NvbnN1bWUnKQogCiAgIGRlZiB0ZXN0X3NlbmRfbGlua19hbmRfY29uc3VtZV93aXRoX2luaXRpYWxfZGVlcF9saW5rKHNlbGYpOgogICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyB2aXNpYmxlIGluIGluaXRpYWxEZWVwTGluay4iIiIKLSAgICByZXR1cm4gc2VsZi5fU2VuZExpbmsoJ2NvbnN1bWUmaW5pdGlhbCcpCisgICAgcmV0dXJuIHNlbGYuX3NlbmRfbGluaygnY29uc3VtZSZpbml0aWFsJykKIAogICBkZWYgdGVzdF9zZW5kX2xpbmtfYW5kX25hdmlnYXRlX2FuZF9jb25zdW1lKHNlbGYpOgogICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyByZWNlaXZlZCBhZnRlciBuYXZpZ2F0aW5nLiIiIgotICAgIHJldHVybiBzZWxmLl9TZW5kTGluaygnbmF2aWdhdGVfaW1tZWRpYXRlJykKKyAgICByZXR1cm4gc2VsZi5fc2VuZF9saW5rKCduYXZpZ2F0ZV9pbW1lZGlhdGUnKQogCiAgIGRlZiB0ZXN0X3NlbmRfbGlua19hbmRfbmF2aWdhdGVfd2l0aF9kZWxheV9hbmRfY29uc3VtZShzZWxmKToKICAgICAiIiJUZXN0IHRoYXQgdGhlIGxpbmsgaXMgcmVjZWl2ZWQgYWZ0ZXIgbmF2aWdhdGluZyB3aXRoIGEgZGVsYXkuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1NlbmRMaW5rKCduYXZpZ2F0ZV9kZWxheWVkJykKKyAgICByZXR1cm4gc2VsZi5fc2VuZF9saW5rKCduYXZpZ2F0ZV9kZWxheWVkJykKIAogICBkZWYgdGVzdF9zZW5kX2xpbmtfYW5kX25hdmlnYXRlX2FuZF9jb25zdW1lX3dpdGhfaW5pdGlhbF9kZWVwX2xpbmsoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IHRoZSBsaW5rIGlzIHJlY2VpdmVkIGluIGluaXRpYWxEZWVwTGluayBhZnRlciBuYXZpZ2F0aW5nLiIiIgotICAgIHJldHVybiBzZWxmLl9TZW5kTGluaygnbmF2aWdhdGVfaW1tZWRpYXRlJmluaXRpYWwnKQorICAgIHJldHVybiBzZWxmLl9zZW5kX2xpbmsoJ25hdmlnYXRlX2ltbWVkaWF0ZSZpbml0aWFsJykKIAogICBkZWYgdGVzdF9zZW5kX2xpbmtfYW5kX25hdmlnYXRlX3dpdGhfZGVsYXlfYW5kX2NvbnN1bWVfd2l0aF9pbml0aWFsX2RlZXBfbGluaygKICAgICAgIHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyByZWNlaXZlZCBpbiBpbml0aWFsRGVlcExpbmsgYWZ0ZXIgbmF2aWdhdGluZyB3aXRoIGEgZGVsYXkuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1NlbmRMaW5rKCduYXZpZ2F0ZV9kZWxheWVkJmluaXRpYWwnKQorICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyByZWNlaXZlZCBpbiBpbml0aWFsRGVlcExpbmsgYWZ0ZXIgbmF2aWdhdGluZyB3aXRoCisgICAgYSBkZWxheS4KKyAgICAiIiIKKyAgICByZXR1cm4gc2VsZi5fc2VuZF9saW5rKCduYXZpZ2F0ZV9kZWxheWVkJmluaXRpYWwnKQogCiAgIGRlZiB0ZXN0X3NlbmRfbGlua19hbmRfY29uc3VtZV9hbmRfbmF2aWdhdGUoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IGEgY29uc3VtZWQgbGluayBpcyBub3QgcmVjZWl2ZWQgYWdhaW4gYWZ0ZXIgbmF2aWdhdGluZy4iIiIKLSAgICByZXR1cm4gc2VsZi5fU2VuZExpbmsoJ2NvbnN1bWUmbmF2aWdhdGVfaW1tZWRpYXRlJykKKyAgICByZXR1cm4gc2VsZi5fc2VuZF9saW5rKCdjb25zdW1lJm5hdmlnYXRlX2ltbWVkaWF0ZScpCiAKICAgZGVmIHRlc3Rfc2VuZF9saW5rX2FuZF9jb25zdW1lX2FuZF9uYXZpZ2F0ZV93aXRoX2RlbGF5KHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBhIGNvbnN1bWVkIGxpbmsgaXMgbm90IHJlY2VpdmVkIGFnYWluIGFmdGVyIG5hdmlnYXRpbmcgd2l0aCBhIGRlbGF5LiIiIgotICAgIHJldHVybiBzZWxmLl9TZW5kTGluaygnY29uc3VtZSZuYXZpZ2F0ZV9kZWxheWVkJykKKyAgICAiIiJUZXN0IHRoYXQgYSBjb25zdW1lZCBsaW5rIGlzIG5vdCByZWNlaXZlZCBhZ2FpbiBhZnRlciBuYXZpZ2F0aW5nIHdpdGggYQorICAgIGRlbGF5LgorICAgICIiIgorICAgIHJldHVybiBzZWxmLl9zZW5kX2xpbmsoJ2NvbnN1bWUmbmF2aWdhdGVfZGVsYXllZCcpCiAKICAgZGVmIHRlc3Rfc2VuZF9saW5rX2FuZF9jb25zdW1lX3dpdGhfaW5pdGlhbF9kZWVwX2xpbmtfYW5kX25hdmlnYXRlKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBhIGxpbmsgY29uc3VtZWQgd2l0aCBpbml0aWFsRGVlcExpbmsgaXMgbm90IHJlY2VpdmVkIGFnYWluIGFmdGVyIG5hdmlnYXRpbmcuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1NlbmRMaW5rKCdjb25zdW1lJmluaXRpYWwmbmF2aWdhdGVfaW1tZWRpYXRlJykKKyAgICAiIiJUZXN0IHRoYXQgYSBsaW5rIGNvbnN1bWVkIHdpdGggaW5pdGlhbERlZXBMaW5rIGlzIG5vdCByZWNlaXZlZCBhZ2FpbgorICAgIGFmdGVyIG5hdmlnYXRpbmcuCisgICAgIiIiCisgICAgcmV0dXJuIHNlbGYuX3NlbmRfbGluaygnY29uc3VtZSZpbml0aWFsJm5hdmlnYXRlX2ltbWVkaWF0ZScpCiAKICAgZGVmIHRlc3Rfc3RhcnRfbGlua191bmNvbnN1bWVkKHNlbGYpOgogICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBkb2VzIG5vdCBoYXZlIHRvIGJlIGNvbnN1bWVkLiIiIgotICAgIHJldHVybiBzZWxmLl9TdGFydExpbmsoKQorICAgIHJldHVybiBzZWxmLl9zdGFydF9saW5rKCkKIAogICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9jb25zdW1lKHNlbGYpOgogICAgICIiIlRlc3QgdGhhdCB0aGUgbGFzdCBsaW5rIGlzIHJlY2VpdmVkLiIiIgotICAgIHJldHVybiBzZWxmLl9TdGFydExpbmsoJ2NvbnN1bWUnKQorICAgIHJldHVybiBzZWxmLl9zdGFydF9saW5rKCdjb25zdW1lJykKIAogICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9jb25zdW1lX3dpdGhfaW5pdGlhbF9kZWVwX2xpbmsoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IHRoZSBsaW5rIGlzIHZpc2libGUgaW4gaW5pdGlhbERlZXBMaW5rLiIiIgotICAgIHJldHVybiBzZWxmLl9TdGFydExpbmsoJ2NvbnN1bWUmaW5pdGlhbCcpCisgICAgcmV0dXJuIHNlbGYuX3N0YXJ0X2xpbmsoJ2NvbnN1bWUmaW5pdGlhbCcpCiAKICAgZGVmIHRlc3Rfc3RhcnRfbGlua19hbmRfbmF2aWdhdGVfYW5kX2NvbnN1bWUoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IHRoZSBsaW5rIGlzIHJlY2VpdmVkIGFmdGVyIG5hdmlnYXRpbmcuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1N0YXJ0TGluaygnbmF2aWdhdGVfaW1tZWRpYXRlJykKKyAgICByZXR1cm4gc2VsZi5fc3RhcnRfbGluaygnbmF2aWdhdGVfaW1tZWRpYXRlJykKIAogICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9uYXZpZ2F0ZV93aXRoX2RlbGF5X2FuZF9jb25zdW1lKHNlbGYpOgogICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyByZWNlaXZlZCBhZnRlciBuYXZpZ2F0aW5nIHdpdGggYSBkZWxheS4iIiIKLSAgICByZXR1cm4gc2VsZi5fU3RhcnRMaW5rKCduYXZpZ2F0ZV9kZWxheWVkJykKKyAgICByZXR1cm4gc2VsZi5fc3RhcnRfbGluaygnbmF2aWdhdGVfZGVsYXllZCcpCiAKICAgZGVmIHRlc3Rfc3RhcnRfbGlua19hbmRfbmF2aWdhdGVfYW5kX2NvbnN1bWVfd2l0aF9pbml0aWFsX2RlZXBfbGluayhzZWxmKToKICAgICAiIiJUZXN0IHRoYXQgdGhlIGxpbmsgaXMgcmVjZWl2ZWQgaW4gaW5pdGlhbERlZXBMaW5rIGFmdGVyIG5hdmlnYXRpbmcuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1N0YXJ0TGluaygnbmF2aWdhdGVfaW1tZWRpYXRlJmluaXRpYWwnKQorICAgIHJldHVybiBzZWxmLl9zdGFydF9saW5rKCduYXZpZ2F0ZV9pbW1lZGlhdGUmaW5pdGlhbCcpCiAKLSAgZGVmIHRlc3Rfc3RhcnRfbGlua19hbmRfbmF2aWdhdGVfd2l0aF9kZWxheV9hbmRfY29uc3VtZV93aXRoX2luaXRpYWxfZGVlcF9saW5rKAorICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9uYXZpZ2F0ZV93aXRoX2RlbGF5X2FuZF9jb25zdW1lX3dpdGhfaW5pdGlhbF9kZWVwX2xpbmsoICAjIHB5bGludDpkaXNhYmxlPWxpbmUtdG9vLWxvbmcKICAgICAgIHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgbGluayBpcyByZWNlaXZlZCBpbiBpbml0aWFsRGVlcExpbmsgYWZ0ZXIgbmF2aWdhdGluZyB3aXRoIGEgZGVsYXkuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1N0YXJ0TGluaygnbmF2aWdhdGVfZGVsYXllZCZpbml0aWFsJykKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGxpbmsgaXMgcmVjZWl2ZWQgaW4gaW5pdGlhbERlZXBMaW5rIGFmdGVyIG5hdmlnYXRpbmcgd2l0aCBhCisgICAgZGVsYXkuCisgICAgIiIiCisgICAgcmV0dXJuIHNlbGYuX3N0YXJ0X2xpbmsoJ25hdmlnYXRlX2RlbGF5ZWQmaW5pdGlhbCcpCiAKICAgZGVmIHRlc3Rfc3RhcnRfbGlua19hbmRfY29uc3VtZV9hbmRfbmF2aWdhdGUoc2VsZik6CiAgICAgIiIiVGVzdCB0aGF0IGEgY29uc3VtZWQgbGluayBpcyBub3QgcmVjZWl2ZWQgYWdhaW4gYWZ0ZXIgbmF2aWdhdGluZy4iIiIKLSAgICByZXR1cm4gc2VsZi5fU3RhcnRMaW5rKCdjb25zdW1lJm5hdmlnYXRlX2ltbWVkaWF0ZScpCisgICAgcmV0dXJuIHNlbGYuX3N0YXJ0X2xpbmsoJ2NvbnN1bWUmbmF2aWdhdGVfaW1tZWRpYXRlJykKIAogICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9jb25zdW1lX2FuZF9uYXZpZ2F0ZV93aXRoX2RlbGF5KHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBhIGNvbnN1bWVkIGxpbmsgaXMgbm90IHJlY2VpdmVkIGFnYWluIGFmdGVyIG5hdmlnYXRpbmcgd2l0aCBhIGRlbGF5LiIiIgotICAgIHJldHVybiBzZWxmLl9TdGFydExpbmsoJ2NvbnN1bWUmbmF2aWdhdGVfZGVsYXllZCcpCisgICAgIiIiVGVzdCB0aGF0IGEgY29uc3VtZWQgbGluayBpcyBub3QgcmVjZWl2ZWQgYWdhaW4gYWZ0ZXIgbmF2aWdhdGluZyB3aXRoIGEKKyAgICBkZWxheS4KKyAgICAiIiIKKyAgICByZXR1cm4gc2VsZi5fc3RhcnRfbGluaygnY29uc3VtZSZuYXZpZ2F0ZV9kZWxheWVkJykKIAogICBkZWYgdGVzdF9zdGFydF9saW5rX2FuZF9jb25zdW1lX3dpdGhfaW5pdGlhbF9kZWVwX2xpbmtfYW5kX25hdmlnYXRlKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBhIGxpbmsgY29uc3VtZWQgd2l0aCBpbml0aWFsRGVlcExpbmsgaXMgbm90IHJlY2VpdmVkIGFnYWluIGFmdGVyIG5hdmlnYXRpbmcuIiIiCi0gICAgcmV0dXJuIHNlbGYuX1N0YXJ0TGluaygnY29uc3VtZSZpbml0aWFsJm5hdmlnYXRlX2ltbWVkaWF0ZScpCisgICAgIiIiVGVzdCB0aGF0IGEgbGluayBjb25zdW1lZCB3aXRoIGluaXRpYWxEZWVwTGluayBpcyBub3QgcmVjZWl2ZWQgYWdhaW4KKyAgICBhZnRlciBuYXZpZ2F0aW5nLgorICAgICIiIgorICAgIHJldHVybiBzZWxmLl9zdGFydF9saW5rKCdjb25zdW1lJmluaXRpYWwmbmF2aWdhdGVfaW1tZWRpYXRlJykKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvZGlzYWJsZV9ldmFsX3dpdGhfY3NwLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9kaXNhYmxlX2V2YWxfd2l0aF9jc3AucHkKaW5kZXggNDVmMjJkZi4uM2ZkMTliYiAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9kaXNhYmxlX2V2YWxfd2l0aF9jc3AucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9kaXNhYmxlX2V2YWxfd2l0aF9jc3AucHkKQEAgLTExLDEzICsxMSwxMiBAQAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlRlc3RzIGlmIENvYmFsdCBwcm9oaWJpdHMgZXZhbCgpIHdoZW4gQ1NQIGlzIHByZXNlbnQgaW4gY2xpZW50IHBhZ2UuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9mcmVlemVfdGltZXJzLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9mcmVlemVfdGltZXJzLnB5CmluZGV4IDUzODc0M2MuLmNiY2JjZTMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvZnJlZXplX3RpbWVycy5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2ZyZWV6ZV90aW1lcnMucHkKQEAgLTE3LDggKzE3LDYgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogaW1wb3J0IHRpbWUKIAogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvZnJlZXplX3Zpc2liaWxpdHkucHkgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL2ZyZWV6ZV92aXNpYmlsaXR5LnB5CmluZGV4IDY3ODI2NGIuLmQxMGM5NWMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvZnJlZXplX3Zpc2liaWxpdHkucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9mcmVlemVfdmlzaWJpbGl0eS5weQpAQCAtMTEsMTMgKzExLDEyIEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdHMgY29ycmVjdCB2aXNpYmlsaXR5IGNoYW5nZXMgZHVyaW5nIGFuZCBhZnRlciBmcmVlemUgZXZlbnQuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9vdmVycmlkZV91YV9wYXJhbWV0ZXJzLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9vdmVycmlkZV91YV9wYXJhbWV0ZXJzLnB5CmluZGV4IDRmNWZkNDUuLjAxNzY4YWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvb3ZlcnJpZGVfdWFfcGFyYW1ldGVycy5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL292ZXJyaWRlX3VhX3BhcmFtZXRlcnMucHkKQEAgLTE4LDcgKzE4LDcgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAogaW1wb3J0IG9zCi1pbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgorZnJvbSBzaXgubW92ZXMgaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKIAogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBNYWtlUmVxdWVzdEhhbmRsZXJDbGFzcwpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wZXJzaXN0ZW50X2Nvb2tpZS5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcGVyc2lzdGVudF9jb29raWUucHkKaW5kZXggMzFkYTA5OS4uMjA5YmMwOSAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wZXJzaXN0ZW50X2Nvb2tpZS5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3BlcnNpc3RlbnRfY29va2llLnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBDb2JhbHQgY2FuIGhhdmUgcGVyc2lzdGVudCBjb29raWUgYWNyb3NzIHNlc3Npb25zL2xhdW5jaGVzLiIiIgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMgaW1wb3J0IGJsYWNrX2JveF90ZXN0cwogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IFRocmVhZGVkV2ViU2VydmVyCiBmcm9tIGNvYmFsdC50b29scy5hdXRvbWF0ZWRfdGVzdGluZyBpbXBvcnQgd2ViZHJpdmVyX3V0aWxzCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3BvaW50ZXJfdGVzdC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcG9pbnRlcl90ZXN0LnB5CmluZGV4IDAyZTlhMDAuLmJlMTI1ODUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcG9pbnRlcl90ZXN0LnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcG9pbnRlcl90ZXN0LnB5CkBAIC0yMyw4ICsyMyw2IEBACiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0LGctYmFkLWltcG9ydC1vcmRlcgotCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHRyYWNlYmFjawogCkBAIC03MSw3ICs2OSw3IEBACiAgICAgICAgICAgYm90dG9tX3NpeCA9IGZpbmRfZWxlbWVudF9ieV9pZChydW5uZXIsICdib3R0b21fc2l4JykKIAogICAgICAgICAgICMgUGVyZm9ybSBtb3VzZSBhY3Rpb25zIHdpdGggQWN0aW9uQ2hhaW5zLgotICAgICAgICAgICMgICBodHRwczovL3d3dy5zZWxlbml1bS5kZXYvc2VsZW5pdW0vZG9jcy9hcGkvcHkvd2ViZHJpdmVyL3NlbGVuaXVtLndlYmRyaXZlci5jb21tb24uYWN0aW9uX2NoYWlucy5odG1sI21vZHVsZS1zZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmFjdGlvbl9jaGFpbnMKKyAgICAgICAgICAjICAgaHR0cHM6Ly93d3cuc2VsZW5pdW0uZGV2L3NlbGVuaXVtL2RvY3MvYXBpL3B5L3dlYmRyaXZlci9zZWxlbml1bS53ZWJkcml2ZXIuY29tbW9uLmFjdGlvbl9jaGFpbnMuaHRtbCNtb2R1bGUtc2VsZW5pdW0ud2ViZHJpdmVyLmNvbW1vbi5hY3Rpb25fY2hhaW5zICAjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nCiAgICAgICAgICAgYWN0aW9ucyA9IEFjdGlvbkNoYWlucyhydW5uZXIud2ViZHJpdmVyKQogICAgICAgICAgIGFjdGlvbnMubW92ZV90b19lbGVtZW50KHRvcF9vbmUpLnBhdXNlKF9TTEVFUF9BRlRFUl9NT1ZFX1RJTUUpCiAgICAgICAgICAgYWN0aW9ucy5tb3ZlX3RvX2VsZW1lbnQodG9wX3R3bykucGF1c2UoX1NMRUVQX0FGVEVSX01PVkVfVElNRSkKQEAgLTk4LDYgKzk2LDYgQEAKICAgICBleGNlcHQ6ICAjIHB5bGludDogZGlzYWJsZT1iYXJlLWV4Y2VwdAogICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAjIENvbnNpZGVyIGFuIGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gYXMgYSB0ZXN0IGZhaWx1cmUuCi0gICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UpCisgICAgICBzZWxmLmZhaWwoJ1Rlc3QgZmFpbHVyZScpCiAgICAgZmluYWxseToKICAgICAgIGxvZ2dpbmcuaW5mbygnQ2xlYW5pbmcgdXAuJykKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcHJlbG9hZF9mb250LnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wcmVsb2FkX2ZvbnQucHkKaW5kZXggNDc5ZDk2My4uNWY4YTVhZSAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wcmVsb2FkX2ZvbnQucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wcmVsb2FkX2ZvbnQucHkKQEAgLTExLDYgKzExLDcgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyB0aGF0IGZvbnRzIGFyZSBsb2FkZWQgY29ycmVjdGx5IGFmdGVyIHByZWxvYWQgZXZlbnQuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCkBAIC0xOCw4ICsxOSw2IEBACiAKIGltcG9ydCB0aW1lCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9wcmVsb2FkX2xhdW5jaF9wYXJhbWV0ZXIucHkgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3ByZWxvYWRfbGF1bmNoX3BhcmFtZXRlci5weQppbmRleCA4ZDkzMTZiLi5hMDY3NWFmIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3ByZWxvYWRfbGF1bmNoX3BhcmFtZXRlci5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3ByZWxvYWRfbGF1bmNoX3BhcmFtZXRlci5weQpAQCAtMTEsMTMgKzExLDEyIEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdHMgcHJlbG9hZCBsYXVuY2ggcGFyYW1ldGVyLiIiIgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMgaW1wb3J0IGJsYWNrX2JveF90ZXN0cwogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IFRocmVhZGVkV2ViU2VydmVyCiAKQEAgLTQwLDcgKzM5LDcgQEAKIAogICAgICAgIyBUZXN0IHdpdGggYW5vdGhlciBwYXJhbWV0ZXIuCiAgICAgICB3aXRoIHNlbGYuQ3JlYXRlQ29iYWx0UnVubmVyKAotICAgICAgICAgIHVybD11cmwgKyAiP2Zvbz1iYXIiLCB0YXJnZXRfcGFyYW1zPVsnLS1wcmVsb2FkJ10pIGFzIHJ1bm5lcjoKKyAgICAgICAgICB1cmw9dXJsICsgJz9mb289YmFyJywgdGFyZ2V0X3BhcmFtcz1bJy0tcHJlbG9hZCddKSBhcyBydW5uZXI6CiAgICAgICAgIHJ1bm5lci5XYWl0Rm9ySlNUZXN0c1NldHVwKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5Jc0luUHJlbG9hZCgpKQogICAgICAgICBydW5uZXIuU2VuZFJlc3VtZSgpCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3ByZWxvYWRfdmlzaWJpbGl0eS5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcHJlbG9hZF92aXNpYmlsaXR5LnB5CmluZGV4IGViMGExNDguLjdkNzUwNTAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcHJlbG9hZF92aXNpYmlsaXR5LnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcHJlbG9hZF92aXNpYmlsaXR5LnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBwcmVsb2FkIHZpc2liaWxpdHkuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9yZXRyeV9hc3luY19zY3JpcHRfbG9hZHNfYWZ0ZXJfc3VzcGVuZC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvcmV0cnlfYXN5bmNfc2NyaXB0X2xvYWRzX2FmdGVyX3N1c3BlbmQucHkKaW5kZXggNzBhZDRjMC4uMzM1OWI0ZiAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9yZXRyeV9hc3luY19zY3JpcHRfbG9hZHNfYWZ0ZXJfc3VzcGVuZC5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3JldHJ5X2FzeW5jX3NjcmlwdF9sb2Fkc19hZnRlcl9zdXNwZW5kLnB5CkBAIC0zNywxNCArMzcsMTIgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQsZy1iYWQtaW1wb3J0LW9yZGVyCi0KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgorZnJvbSBzaXgubW92ZXMudXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IHVybHBhcnNlCiAKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgTWFrZVJlcXVlc3RIYW5kbGVyQ2xhc3MKQEAgLTY5LDcgKzY3LDcgQEAKICAgZGVmIGRvX0dFVChzZWxmKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgICIiIkhhbmRsZXMgSFRUUCBHRVQgcmVxdWVzdHMgZm9yIHJlc291cmNlcy4iIiIKIAotICAgIHBhcnNlZF9wYXRoID0gdXJscGFyc2UudXJscGFyc2Uoc2VsZi5wYXRoKQorICAgIHBhcnNlZF9wYXRoID0gdXJscGFyc2Uoc2VsZi5wYXRoKQogCiAgICAgaWYgcGFyc2VkX3BhdGgucGF0aCA9PSAnL3Rlc3RkYXRhLycgKyBfSlNfRklMRV9UT19SRVFVRVNUOgogICAgICAgX3JlY2VpdmVkX3NjcmlwdF9yZXNvdXJjZV9yZXF1ZXN0LnNldCgpCkBAIC05Miw3ICs5MCw3IEBACiBjbGFzcyBSZXRyeUFzeW5jU2NyaXB0TG9hZHNBZnRlclN1c3BlbmQoYmxhY2tfYm94X3Rlc3RzLkJsYWNrQm94VGVzdENhc2UpOgogICAiIiJUZXN0cyBjYW5jZWxsYXRpb24gb2Ygc3luY2hyb25vdXMgbG9hZGluZyBvZiBzY3JpcHRzIG9uIFN1c3BlbmQuIiIiCiAKLSAgZGVmIF9Mb2FkUGFnZShzZWxmLCB3ZWJkcml2ZXIsIHVybCk6CisgIGRlZiBfbG9hZF9wYWdlKHNlbGYsIHdlYmRyaXZlciwgdXJsKToKICAgICAiIiJJbnN0cnVjdHMgd2ViZHJpdmVyIHRvIG5hdmlnYXRlIHRvIHVybC4iIiIKICAgICB0cnk6CiAgICAgICAjIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgYSBibG9ja2luZyByZXF1ZXN0LCBhbmQgcmV0dXJucyBvbmx5IHdoZW4gdGhlCkBAIC0xMTIsNyArMTEwLDcgQEAKICAgICAgICAgICB0YXJnZXRfdXJsID0gc2VydmVyLkdldFVSTChmaWxlX25hbWU9Jy4uL3Rlc3RkYXRhLycgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9IVE1MX0ZJTEVfVE9fUkVRVUVTVCkKICAgICAgICAgICBjb2JhbHRfbGF1bmNoZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKLSAgICAgICAgICAgICAgdGFyZ2V0PVJldHJ5QXN5bmNTY3JpcHRMb2Fkc0FmdGVyU3VzcGVuZC5fTG9hZFBhZ2UsCisgICAgICAgICAgICAgIHRhcmdldD1SZXRyeUFzeW5jU2NyaXB0TG9hZHNBZnRlclN1c3BlbmQuX2xvYWRfcGFnZSwKICAgICAgICAgICAgICAgYXJncz0oc2VsZiwgcnVubmVyLndlYmRyaXZlciwgdGFyZ2V0X3VybCkpCiAgICAgICAgICAgY29iYWx0X2xhdW5jaGVyX3RocmVhZC5zdGFydCgpCiAKQEAgLTEyMCw3ICsxMTgsNyBAQAogICAgICAgICAgIGxvZ2dpbmcuaW5mbygnV2FpdGluZyBmb3Igc2NyaXB0IHJlc291cmNlIHJlcXVlc3QnKQogICAgICAgICAgIHJlcXVlc3RfcmVjZWl2ZWQgPSBfcmVjZWl2ZWRfc2NyaXB0X3Jlc291cmNlX3JlcXVlc3Qud2FpdCgKICAgICAgICAgICAgICAgX01BWF9BTExPVFRFRF9USU1FX1NFQ09ORFMpCi0gICAgICAgICAgbG9nZ2luZy5pbmZvKCdSZXF1ZXN0IHJlY2VpdmVkOiB7fScuZm9ybWF0KHJlcXVlc3RfcmVjZWl2ZWQpKQorICAgICAgICAgIGxvZ2dpbmcuaW5mbygnUmVxdWVzdCByZWNlaXZlZDogJXMnLCByZXF1ZXN0X3JlY2VpdmVkKQogICAgICAgICAgICMgU3RlcCA1LiBXYWl0IGZvciBhIHJlcXVlc3QgZm9yIGphdmFzY3JpcHQgcmVzb3VyY2UuCiAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVlc3RfcmVjZWl2ZWQpCiAKQEAgLTEzOSw3ICsxMzcsNyBAQAogICAgIGV4Y2VwdDogICMgcHlsaW50OiBkaXNhYmxlPWJhcmUtZXhjZXB0CiAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICMgQ29uc2lkZXIgYW4gZXhjZXB0aW9uIGJlaW5nIHRocm93biBhcyBhIHRlc3QgZmFpbHVyZS4KLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKKyAgICAgIHNlbGYuZmFpbCgnVGVzdCBmYWlsdXJlJykKICAgICBmaW5hbGx5OgogICAgICAgbG9nZ2luZy5pbmZvKCdDbGVhbmluZyB1cC4nKQogICAgICAgX3Rlc3RfZmluaXNoZWQuc2V0KCkKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvc2VydmljZV93b3JrZXJfdGVzdC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvc2VydmljZV93b3JrZXJfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ4NTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zZXJ2aWNlX3dvcmtlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdHMgYmFzaWMgU2VydmljZSBXb3JrZXIgZnVuY3Rpb25hbGl0eS4iIiIKKworZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKK2Zyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBUaHJlYWRlZFdlYlNlcnZlcgorCisKK2NsYXNzIFNlcnZpY2VXb3JrZXJUZXN0KGJsYWNrX2JveF90ZXN0cy5CbGFja0JveFRlc3RDYXNlKToKKyAgIiIiVGVzdCBiYXNpYyBTZXJ2aWNlIFdvcmtlciBmdW5jdGlvbmFsaXR5LiIiIgorCisgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKworICAgIHdpdGggVGhyZWFkZWRXZWJTZXJ2ZXIoYmluZGluZ19hZGRyZXNzPXNlbGYuR2V0QmluZGluZ0FkZHJlc3MoKSkgYXMgc2VydmVyOgorICAgICAgdXJsID0gc2VydmVyLkdldFVSTChmaWxlX25hbWU9J3Rlc3RkYXRhL3NlcnZpY2Vfd29ya2VyX3Rlc3QuaHRtbCcpCisKKyAgICAgIHdpdGggc2VsZi5DcmVhdGVDb2JhbHRSdW5uZXIodXJsPXVybCkgYXMgcnVubmVyOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvc2lnbmFsX2hhbmRsZXJfZG9lc250X2NyYXNoLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zaWduYWxfaGFuZGxlcl9kb2VzbnRfY3Jhc2gucHkKaW5kZXggZTI5NjJkNy4uODM3NGMzZiAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zaWduYWxfaGFuZGxlcl9kb2VzbnRfY3Jhc2gucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zaWduYWxfaGFuZGxlcl9kb2VzbnRfY3Jhc2gucHkKQEAgLTExLDYgKzExLDcgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBpZiBDb2JhbHQgc2lnbmFsIGhhbmRsZXIgaXMgcm9idXN0LiIiIgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpAQCAtMTksOCArMjAsNiBAQAogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHRpbWUKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIAogCkBAIC0yOCw3ICsyNyw3IEBACiAgICIiIkZsb29kIHRoZSBwcm9jZXNzIHdpdGggQ09OVCBzaWduYWxzLCBlbnN1cmluZyBzaWduYWwgaGFuZGxlciBpcyByb2J1c3QuIiIiCiAKICAgZGVmIHNldFVwKHNlbGYpOgotICAgIGlmICdsaW51eCcgbm90IGluIHNlbGYubGF1bmNoZXJfcGFyYW1zLnBsYXRmb3JtOgorICAgIGlmICdsaW51eCcgbm90IGluIHNlbGYubGF1bmNoZXJfcGFyYW1zLnBsYXRmb3JtOiAgIyBweWxpbnQ6IGRpc2FibGU9dW5zdXBwb3J0ZWQtbWVtYmVyc2hpcC10ZXN0CiAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3QgbmVlZHMgUE9TSVggc3lzdGVtIHNpZ25hbCBoYW5kbGVycycpCiAKICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zb2Z0X21pY19wbGF0Zm9ybV9zZXJ2aWNlX3Rlc3QucHkgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2VfdGVzdC5weQppbmRleCBkNjgzMjJhLi5jYWY1MDZlIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2VfdGVzdC5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2VfdGVzdC5weQpAQCAtMTcsOCArMTcsNiBAQAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMgaW1wb3J0IGJsYWNrX2JveF90ZXN0cwogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IFRocmVhZGVkV2ViU2VydmVyCiBmcm9tIGNvYmFsdC50b29scy5hdXRvbWF0ZWRfdGVzdGluZyBpbXBvcnQgd2ViZHJpdmVyX3V0aWxzCkBAIC0zNiwyOSArMzQsMzQgQEAKICAgICAgICMgVGhlIHdlYnBhZ2UgbGlzdGVucyBmb3IgTlVNUEFEMCB0aHJvdWdoIE5VTVBBRDkgYXQgb3BlbmluZwogICAgICAgIyB0byB0ZXN0IGhhc0hhcmRNaWNTdXBwb3J0IGFuZCBoYXNTb2Z0TWljU3VwcG9ydCBzd2l0Y2ggdmFsdWVzLgogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcih1cmw9dXJsKSBhcyBydW5uZXI6CisgICAgICAgIHJ1bm5lci5XYWl0Rm9yQWN0aXZlRWxlbWVudCgpCiAgICAgICAgICMgUHJlc3MgTlVNUEFEMCB0byB0ZXN0IHRlc3RJbmNvcnJlY3RSZXF1ZXN0cwogICAgICAgICBydW5uZXIuU2VuZEtleXMoa2V5cy5LZXlzLk5VTVBBRDApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpKQogCiAgICAgICB3aXRoIHNlbGYuQ3JlYXRlQ29iYWx0UnVubmVyKHVybD11cmwpIGFzIHJ1bm5lcjoKKyAgICAgICAgcnVubmVyLldhaXRGb3JBY3RpdmVFbGVtZW50KCkKICAgICAgICAgIyBQcmVzcyBOVU1QQUQxIHRvIHRlc3QgYm90aFVuZGVmaW5lZAogICAgICAgICBydW5uZXIuU2VuZEtleXMoa2V5cy5LZXlzLk5VTVBBRDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpKQogCiAgICAgICB3aXRoIHNlbGYuQ3JlYXRlQ29iYWx0UnVubmVyKAogICAgICAgICAgIHVybD11cmwsIHRhcmdldF9wYXJhbXM9WyctLWhhc19zb2Z0X21pY19zdXBwb3J0PXRydWUnXSkgYXMgcnVubmVyOgorICAgICAgICBydW5uZXIuV2FpdEZvckFjdGl2ZUVsZW1lbnQoKQogICAgICAgICAjIFByZXNzIE5VTVBBRDIgdG8gdGVzdCBoYXJkTWljVW5kZWZpbmVkU29mdE1pY1RydWUKICAgICAgICAgcnVubmVyLlNlbmRLZXlzKGtleXMuS2V5cy5OVU1QQUQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKIAogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcigKICAgICAgICAgICB1cmw9dXJsLCB0YXJnZXRfcGFyYW1zPVsnLS1oYXNfc29mdF9taWNfc3VwcG9ydD1mYWxzZSddKSBhcyBydW5uZXI6CisgICAgICAgIHJ1bm5lci5XYWl0Rm9yQWN0aXZlRWxlbWVudCgpCiAgICAgICAgICMgUHJlc3MgTlVNUEFEMyB0byB0ZXN0IGhhcmRNaWNVbmRlZmluZWRTb2Z0TWljRmFsc2UKICAgICAgICAgcnVubmVyLlNlbmRLZXlzKGtleXMuS2V5cy5OVU1QQUQzKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKIAogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcigKICAgICAgICAgICB1cmw9dXJsLCB0YXJnZXRfcGFyYW1zPVsnLS1oYXNfaGFyZF9taWNfc3VwcG9ydD10cnVlJ10pIGFzIHJ1bm5lcjoKKyAgICAgICAgcnVubmVyLldhaXRGb3JBY3RpdmVFbGVtZW50KCkKICAgICAgICAgIyBQcmVzcyBOVU1QQUQ0IHRvIHRlc3QgaGFyZE1pY1RydWVTb2Z0TWljVW5kZWZpbmVkCiAgICAgICAgIHJ1bm5lci5TZW5kS2V5cyhrZXlzLktleXMuTlVNUEFENCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkpCkBAIC02OCw2ICs3MSw3IEBACiAgICAgICAgICAgdGFyZ2V0X3BhcmFtcz0oWwogICAgICAgICAgICAgICAnLS1oYXNfaGFyZF9taWNfc3VwcG9ydD10cnVlJywgJy0taGFzX3NvZnRfbWljX3N1cHBvcnQ9dHJ1ZScKICAgICAgICAgICBdKSkgYXMgcnVubmVyOgorICAgICAgICBydW5uZXIuV2FpdEZvckFjdGl2ZUVsZW1lbnQoKQogICAgICAgICAjIFByZXNzIE5VTVBBRDUgdG8gdGVzdCBoYXJkTWljVHJ1ZVNvZnRNaWNUcnVlCiAgICAgICAgIHJ1bm5lci5TZW5kS2V5cyhrZXlzLktleXMuTlVNUEFENSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkpCkBAIC03NywxMiArODEsMTQgQEAKICAgICAgICAgICB0YXJnZXRfcGFyYW1zPShbCiAgICAgICAgICAgICAgICctLWhhc19oYXJkX21pY19zdXBwb3J0PXRydWUnLCAnLS1oYXNfc29mdF9taWNfc3VwcG9ydD1mYWxzZScKICAgICAgICAgICBdKSkgYXMgcnVubmVyOgorICAgICAgICBydW5uZXIuV2FpdEZvckFjdGl2ZUVsZW1lbnQoKQogICAgICAgICAjIFByZXNzIE5VTVBBRDYgdG8gdGVzdCBoYXJkTWljVHJ1ZVNvZnRNaWNGYWxzZQogICAgICAgICBydW5uZXIuU2VuZEtleXMoa2V5cy5LZXlzLk5VTVBBRDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpKQogCiAgICAgICB3aXRoIHNlbGYuQ3JlYXRlQ29iYWx0UnVubmVyKAogICAgICAgICAgIHVybD11cmwsIHRhcmdldF9wYXJhbXM9WyctLWhhc19oYXJkX21pY19zdXBwb3J0PWZhbHNlJ10pIGFzIHJ1bm5lcjoKKyAgICAgICAgcnVubmVyLldhaXRGb3JBY3RpdmVFbGVtZW50KCkKICAgICAgICAgIyBQcmVzcyBOVU1QQUQ3IHRvIHRlc3QgaGFyZE1pY0ZhbHNlU29mdE1pY1VuZGVmaW5lZAogICAgICAgICBydW5uZXIuU2VuZEtleXMoa2V5cy5LZXlzLk5VTVBBRDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpKQpAQCAtOTIsNiArOTgsNyBAQAogICAgICAgICAgIHRhcmdldF9wYXJhbXM9KFsKICAgICAgICAgICAgICAgJy0taGFzX2hhcmRfbWljX3N1cHBvcnQ9ZmFsc2UnLCAnLS1oYXNfc29mdF9taWNfc3VwcG9ydD10cnVlJwogICAgICAgICAgIF0pKSBhcyBydW5uZXI6CisgICAgICAgIHJ1bm5lci5XYWl0Rm9yQWN0aXZlRWxlbWVudCgpCiAgICAgICAgICMgUHJlc3MgTlVNUEFEOCB0byB0ZXN0IGhhcmRNaWNGYWxzZVNvZnRNaWNUcnVlCiAgICAgICAgIHJ1bm5lci5TZW5kS2V5cyhrZXlzLktleXMuTlVNUEFEOCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkpCkBAIC0xMDEsNiArMTA4LDcgQEAKICAgICAgICAgICB0YXJnZXRfcGFyYW1zPShbCiAgICAgICAgICAgICAgICctLWhhc19oYXJkX21pY19zdXBwb3J0PWZhbHNlJywgJy0taGFzX3NvZnRfbWljX3N1cHBvcnQ9ZmFsc2UnCiAgICAgICAgICAgXSkpIGFzIHJ1bm5lcjoKKyAgICAgICAgcnVubmVyLldhaXRGb3JBY3RpdmVFbGVtZW50KCkKICAgICAgICAgIyBQcmVzcyBOVU1QQUQ5IHRvIHRlc3QgaGFyZE1pY0ZhbHNlU29mdE1pY0ZhbHNlCiAgICAgICAgIHJ1bm5lci5TZW5kS2V5cyhrZXlzLktleXMuTlVNUEFEOSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkpCkBAIC0xMDgsMjQgKzExNiwyOCBAQAogICAgICAgIyBUaGUgd2VicGFnZSBsaXN0ZW5zIGZvciBOVU1QQUQwIHRocm91Z2ggTlVNUEFEOSBhdCBvcGVuaW5nIHdpdGggU0hJRlQKICAgICAgICMgdG8gdGVzdCBtaWNHZXN0dXJlIHRhcCBhbmQgaG9sZCBzd2l0Y2ggdmFsdWVzLgogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcih1cmw9dXJsKSBhcyBydW5uZXI6CisgICAgICAgIHJ1bm5lci5XYWl0Rm9yQWN0aXZlRWxlbWVudCgpCiAgICAgICAgICMgUHJlc3MgU0hJRlQsIE5VTVBBRDAgdG8gdGVzdCBtaWNHZXN0dXJlTnVsbAogICAgICAgICBydW5uZXIuU2VuZEtleXMoW2tleXMuS2V5cy5TSElGVCwga2V5cy5LZXlzLk5VTVBBRDBdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKIAogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcigKICAgICAgICAgICB1cmw9dXJsLCB0YXJnZXRfcGFyYW1zPVsnLS1taWNfZ2VzdHVyZT1mb28nXSkgYXMgcnVubmVyOgorICAgICAgICBydW5uZXIuV2FpdEZvckFjdGl2ZUVsZW1lbnQoKQogICAgICAgICAjIFByZXNzIFNISUZULCBOVU1QQUQwIHRvIHRlc3QgbWljR2VzdHVyZU51bGwKICAgICAgICAgcnVubmVyLlNlbmRLZXlzKFtrZXlzLktleXMuU0hJRlQsIGtleXMuS2V5cy5OVU1QQUQwXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5KU1Rlc3RzU3VjY2VlZGVkKCkpCiAKICAgICAgIHdpdGggc2VsZi5DcmVhdGVDb2JhbHRSdW5uZXIoCiAgICAgICAgICAgdXJsPXVybCwgdGFyZ2V0X3BhcmFtcz1bJy0tbWljX2dlc3R1cmU9aG9sZCddKSBhcyBydW5uZXI6CisgICAgICAgIHJ1bm5lci5XYWl0Rm9yQWN0aXZlRWxlbWVudCgpCiAgICAgICAgICMgUHJlc3MgU0hJRlQsIE5VTVBBRDEgdG8gdGVzdCBtaWNHZXN0dXJlSG9sZAogICAgICAgICBydW5uZXIuU2VuZEtleXMoW2tleXMuS2V5cy5TSElGVCwga2V5cy5LZXlzLk5VTVBBRDFdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKIAogICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcigKICAgICAgICAgICB1cmw9dXJsLCB0YXJnZXRfcGFyYW1zPVsnLS1taWNfZ2VzdHVyZT10YXAnXSkgYXMgcnVubmVyOgorICAgICAgICBydW5uZXIuV2FpdEZvckFjdGl2ZUVsZW1lbnQoKQogICAgICAgICAjIFByZXNzIFNISUZULCBOVU1QQUQyIHRvIHRlc3QgbWljR2VzdHVyZVRhcAogICAgICAgICBydW5uZXIuU2VuZEtleXMoW2tleXMuS2V5cy5TSElGVCwga2V5cy5LZXlzLk5VTVBBRDJdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLkpTVGVzdHNTdWNjZWVkZWQoKSkKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvc3VzcGVuZF92aXNpYmlsaXR5LnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zdXNwZW5kX3Zpc2liaWxpdHkucHkKaW5kZXggMTdmYTU5Ny4uNzA1NWQzZiAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zdXNwZW5kX3Zpc2liaWxpdHkucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy9zdXNwZW5kX3Zpc2liaWxpdHkucHkKQEAgLTExLDEzICsxMSwxMiBAQAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlRlc3RzIGNvcnJlY3QgdmlzaWJpbGl0eSBjaGFuZ2VzIGR1cmluZyBhbmQgYWZ0ZXIgc3VzcGVuZCBldmVudC4iIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBUaHJlYWRlZFdlYlNlcnZlcgogCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3RpbWVyX2hpdF9hZnRlcl9wcmVsb2FkLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy90aW1lcl9oaXRfYWZ0ZXJfcHJlbG9hZC5weQppbmRleCAxNmRlY2VjLi5mNDhhOTNmIDEwMDY0NAotLS0gYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3RpbWVyX2hpdF9hZnRlcl9wcmVsb2FkLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvdGltZXJfaGl0X2FmdGVyX3ByZWxvYWQucHkKQEAgLTExLDEzICsxMSwxMiBAQAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlRlc3RzIGlmIENvYmFsdCBwcm9wZXJseSBoYW5kbGVzIHRpbWUgZXhwaXJhdGlvbiBhZnRlciBwcmVsb2FkIG1vZGUuIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cyBpbXBvcnQgYmxhY2tfYm94X3Rlc3RzCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMudGhyZWFkZWRfd2ViX3NlcnZlciBpbXBvcnQgVGhyZWFkZWRXZWJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy90aW1lcl9oaXRfaW5fcHJlbG9hZC5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvdGltZXJfaGl0X2luX3ByZWxvYWQucHkKaW5kZXggZTc3YjFlMS4uZWRiMGM4ZiAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy90aW1lcl9oaXRfaW5fcHJlbG9hZC5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3RpbWVyX2hpdF9pbl9wcmVsb2FkLnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBpZiBDb2JhbHQgcHJvcGVybHkgaGFuZGxlcyB0aW1lIGV4cGlyYXRpb24gZHVyaW5nIHByZWxvYWQgbW9kZS4iIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy50aHJlYWRlZF93ZWJfc2VydmVyIGltcG9ydCBUaHJlYWRlZFdlYlNlcnZlcgogCmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3dlYl9kZWJ1Z2dlci5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX2RlYnVnZ2VyLnB5CmluZGV4IGJlOWI3MjMuLjVkMmQyMDkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX2RlYnVnZ2VyLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX2RlYnVnZ2VyLnB5CkBAIC0xOSwxMyArMTksMTIgQEAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQsZy1iYWQtaW1wb3J0LW9yZGVyCi0KIGltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIucGFyc2UgaW1wb3J0IHVybHNwbGl0Citmcm9tIHNpeC5tb3Zlcy51cmxsaWIucGFyc2UgaW1wb3J0IHVybHVuc3BsaXQKIGltcG9ydCBzeXMKLWltcG9ydCB1cmxwYXJzZQogCiBmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMgaW1wb3J0IGJsYWNrX2JveF90ZXN0cwogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IFRocmVhZGVkV2ViU2VydmVyCkBAIC0yNDYsMTAgKzI0NSwxMCBAQAogCiAgIGRlZiBjcmVhdGVfZGVidWdnZXJfY29ubmVjdGlvbihzZWxmKToKICAgICBkZXZ0b29sc191cmwgPSBzZWxmLnJ1bm5lci5HZXRDdmFsKCdDb2JhbHQuU2VydmVyLkRldlRvb2xzJykKLSAgICBwYXJ0cyA9IGxpc3QodXJscGFyc2UudXJsc3BsaXQoZGV2dG9vbHNfdXJsKSkKKyAgICBwYXJ0cyA9IGxpc3QodXJsc3BsaXQoZGV2dG9vbHNfdXJsKSkKICAgICBwYXJ0c1swXSA9ICd3cycgICMgc2NoZW1lCiAgICAgcGFydHNbMl0gPSAnL2RldnRvb2xzL3BhZ2UvY29iYWx0JyAgIyBwYXRoCi0gICAgd3NfdXJsID0gdXJscGFyc2UudXJsdW5zcGxpdChwYXJ0cykKKyAgICB3c191cmwgPSB1cmx1bnNwbGl0KHBhcnRzKQogICAgIHJldHVybiBEZWJ1Z2dlckNvbm5lY3Rpb24od3NfdXJsKQogCiAgIGRlZiB0ZXN0X3J1bnRpbWUoc2VsZik6CmRpZmYgLS1naXQgYS9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3Rlc3RzL3dlYl9wbGF0Zm9ybV90ZXN0cy5weSBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX3BsYXRmb3JtX3Rlc3RzLnB5CmluZGV4IDg0ZGY4YzMuLjJjNGZlNTYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX3BsYXRmb3JtX3Rlc3RzLnB5CisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX3BsYXRmb3JtX3Rlc3RzLnB5CkBAIC0xMSwxMyArMTEsMTIgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0cyBDb2JhbHQgd2ViIHBsYXRmb3Jtcy4iIiIKIAogZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzIGltcG9ydCBibGFja19ib3hfdGVzdHMKIGZyb20gY29iYWx0LmJsYWNrX2JveF90ZXN0cy53ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgaW1wb3J0IFdlYlBsYXRmb3JtVGVzdFNlcnZlcgogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGFic3RyYWN0X2xhdW5jaGVyCkBAIC00NywyNyArNDYsMjcgQEAKICAgICAgIGlmIHNlbGYubGF1bmNoZXJfcGFyYW1zLklzRXZlcmdyZWVuKCk6CiAgICAgICAgIGxvYWRlcl9wbGF0Zm9ybV9jb25maWcgPSBidWlsZC5HZXRQbGF0Zm9ybUNvbmZpZygKICAgICAgICAgICAgIHNlbGYubGF1bmNoZXJfcGFyYW1zLmxvYWRlcl9wbGF0Zm9ybSkKLSAgICAgICAgbG9hZGVyX3BsYXRmb3JtX2NvYmFsdF9jb25maWcgPSBsb2FkZXJfcGxhdGZvcm1fY29uZmlnLkdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbigKKyAgICAgICAgY29iYWx0X2NvbmZpZyA9IGxvYWRlcl9wbGF0Zm9ybV9jb25maWcuR2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uKAogICAgICAgICAgICAgJ2NvYmFsdCcpCi0gICAgICAgIGZvciBmaWx0ZXIgaW4gbG9hZGVyX3BsYXRmb3JtX2NvYmFsdF9jb25maWcuR2V0V2ViUGxhdGZvcm1UZXN0RmlsdGVycygpOgotICAgICAgICAgIGlmIGZpbHRlciBub3QgaW4gZmlsdGVyczoKLSAgICAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGZpbHRlcikKKyAgICAgICAgZm9yIGZpbHRlcl8gaW4gY29iYWx0X2NvbmZpZy5HZXRXZWJQbGF0Zm9ybVRlc3RGaWx0ZXJzKCk6CisgICAgICAgICAgaWYgZmlsdGVyXyBub3QgaW4gZmlsdGVyczoKKyAgICAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGZpbHRlcl8pCiAKICAgICAgIHVzZWRfZmlsdGVycyA9IFtdCiAKLSAgICAgIGZvciBmaWx0ZXIgaW4gZmlsdGVyczoKLSAgICAgICAgaWYgZmlsdGVyID09IHRlc3RfZmlsdGVyLkRJU0FCTEVfVEVTVElORzoKKyAgICAgIGZvciBmaWx0ZXJfIGluIGZpbHRlcnM6CisgICAgICAgIGlmIGZpbHRlcl8gPT0gdGVzdF9maWx0ZXIuRElTQUJMRV9URVNUSU5HOgogICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBmaWx0ZXIgPT0gdGVzdF9maWx0ZXIuRklMVEVSX0FMTDoKKyAgICAgICAgaWYgZmlsdGVyXyA9PSB0ZXN0X2ZpbHRlci5GSUxURVJfQUxMOgogICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBpc2luc3RhbmNlKGZpbHRlciwgdGVzdF9maWx0ZXIuVGVzdEZpbHRlcik6Ci0gICAgICAgICAgaWYgZmlsdGVyLmNvbmZpZyBhbmQgZmlsdGVyLmNvbmZpZyAhPSBzZWxmLmxhdW5jaGVyX3BhcmFtcy5jb25maWc6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsdGVyXywgdGVzdF9maWx0ZXIuVGVzdEZpbHRlcik6CisgICAgICAgICAgaWYgZmlsdGVyXy5jb25maWcgYW5kIGZpbHRlcl8uY29uZmlnICE9IHNlbGYubGF1bmNoZXJfcGFyYW1zLmNvbmZpZzoKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgaWYgZmlsdGVyLnRlc3RfbmFtZSBhbmQgZmlsdGVyLnRlc3RfbmFtZSA9PSB0ZXN0X2ZpbHRlci5GSUxURVJfQUxMOgorICAgICAgICAgIGlmIGZpbHRlcl8udGVzdF9uYW1lIGFuZCBmaWx0ZXJfLnRlc3RfbmFtZSA9PSB0ZXN0X2ZpbHRlci5GSUxURVJfQUxMOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgdXNlZF9maWx0ZXJzLmFwcGVuZChmaWx0ZXIudGVzdF9uYW1lKQorICAgICAgICAgIHVzZWRfZmlsdGVycy5hcHBlbmQoZmlsdGVyXy50ZXN0X25hbWUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgdXNlZF9maWx0ZXJzLmFwcGVuZChmaWx0ZXIpCisgICAgICAgICAgdXNlZF9maWx0ZXJzLmFwcGVuZChmaWx0ZXJfKQogCiAgICAgICBpZiB1c2VkX2ZpbHRlcnM6CiAgICAgICAgIHRhcmdldF9wYXJhbXMuYXBwZW5kKCctLWd0ZXN0X2ZpbHRlcj0te30nLmZvcm1hdCgKZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX3dvcmtlcl90ZXN0LnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cy93ZWJfd29ya2VyX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjODA0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGVzdHMvd2ViX3dvcmtlcl90ZXN0LnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdHMgYmFzaWMgV2ViIFdvcmtlciBmdW5jdGlvbmFsaXR5LiIiIgorCitmcm9tIGNvYmFsdC5ibGFja19ib3hfdGVzdHMgaW1wb3J0IGJsYWNrX2JveF90ZXN0cworZnJvbSBjb2JhbHQuYmxhY2tfYm94X3Rlc3RzLnRocmVhZGVkX3dlYl9zZXJ2ZXIgaW1wb3J0IFRocmVhZGVkV2ViU2VydmVyCisKKworY2xhc3MgV2ViV29ya2VyVGVzdChibGFja19ib3hfdGVzdHMuQmxhY2tCb3hUZXN0Q2FzZSk6CisgICIiIlRlc3QgYmFzaWMgV2ViIFdvcmtlciBmdW5jdGlvbmFsaXR5LiIiIgorCisgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKworICAgIHdpdGggVGhyZWFkZWRXZWJTZXJ2ZXIoYmluZGluZ19hZGRyZXNzPXNlbGYuR2V0QmluZGluZ0FkZHJlc3MoKSkgYXMgc2VydmVyOgorICAgICAgdXJsID0gc2VydmVyLkdldFVSTChmaWxlX25hbWU9J3Rlc3RkYXRhL3dlYl93b3JrZXJfdGVzdC5odG1sJykKKworICAgICAgd2l0aCBzZWxmLkNyZWF0ZUNvYmFsdFJ1bm5lcih1cmw9dXJsKSBhcyBydW5uZXI6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuSlNUZXN0c1N1Y2NlZWRlZCgpKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90aHJlYWRlZF93ZWJfc2VydmVyLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy90aHJlYWRlZF93ZWJfc2VydmVyLnB5CmluZGV4IDJhMzdkZDYuLjEwNjQzNTUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvdGhyZWFkZWRfd2ViX3NlcnZlci5weQorKysgYi9jb2JhbHQvYmxhY2tfYm94X3Rlc3RzL3RocmVhZGVkX3dlYl9zZXJ2ZXIucHkKQEAgLTE5LDEzICsxOSwxMyBAQAogCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgorZnJvbSBzaXgubW92ZXMgaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBzb2NrZXRzZXJ2ZXIKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBTb2NrZXRTZXJ2ZXIKIGltcG9ydCB0aHJlYWRpbmcKIAogCi1jbGFzcyBfVGhyZWFkZWRUQ1BTZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ01peEluLCBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyKToKK2NsYXNzIF9UaHJlYWRlZFRDUFNlcnZlcihzb2NrZXRzZXJ2ZXIuVGhyZWFkaW5nTWl4SW4sIHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIpOgogICBwYXNzCiAKIApAQCAtNTQsOCArNTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VfcGF0aCkKICAgICAgIHJldHVybiBwb3RlbnRpYWxfcGF0aAogCi0gICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgbG9nZ2luZy5pbmZvKGZvcm1hdCAlIChhcmdzKSkKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0X3N0cmluZywgKmFyZ3MpOgorICAgICAgbG9nZ2luZy5pbmZvKGZvcm1hdF9zdHJpbmcgJSAoYXJncykpICAjIHB5bGludDogZGlzYWJsZT1sb2dnaW5nLW5vdC1sYXp5CiAKICAgcmV0dXJuIFRlc3REYXRhSFRUUFJlcXVlc3RIYW5kbGVyCiAKQEAgLTY3LDYgKzY3LDcgQEAKICAgICAgICAgICAgICAgIGhhbmRsZXI9TWFrZVJlcXVlc3RIYW5kbGVyQ2xhc3Mob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCiAgICAgICAgICAgICAgICBiaW5kaW5nX2FkZHJlc3M9Tm9uZSk6CiAgICAgX1RocmVhZGVkVENQU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCisgICAgX1RocmVhZGVkVENQU2VydmVyLmJsb2NrX29uX2Nsb3NlID0gRmFsc2UKIAogICAgIGlmIG5vdCBiaW5kaW5nX2FkZHJlc3M6CiAgICAgICAjIE5vIHNwZWNpZmljIGJpbmRpbmcgYWRkcmVzcyBzcGVjaWZpZWQuIEJpbmQgdG8gYW55IGludGVyZmFjZXMgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2NvYmFsdC9ibGFja19ib3hfdGVzdHMvd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLnB5IGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKaW5kZXggZDNhOWQ5Ni4uNTBlYmRhOCAxMDA2NDQKLS0tIGEvY29iYWx0L2JsYWNrX2JveF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKKysrIGIvY29iYWx0L2JsYWNrX2JveF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIucHkKQEAgLTIzLDcgKzIzLDcgQEAKIFdQVF9ESVIgPSBvcy5wYXRoLmpvaW4oU1JDX0RJUiwgJ3RoaXJkX3BhcnR5JywgJ3dlYl9wbGF0Zm9ybV90ZXN0cycpCiBzeXMucGF0aC5pbnNlcnQoMCwgV1BUX0RJUikKIAotIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAorIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LXBvc2l0aW9uCiBmcm9tIHRvb2xzLnNlcnZlIGltcG9ydCBzZXJ2ZQogZnJvbSB0b29scy53cHRzZXJ2ZS53cHRzZXJ2ZSBpbXBvcnQgc3Rhc2gKIApAQCAtNDYsOSArNDYsOSBAQAogICAgIGt3YXJncyA9IHZhcnMoc2VydmUuZ2V0X3BhcnNlcigpLnBhcnNlX2FyZ3MoKSkKIAogICAgICMgQ29uZmlndXJhdGlvbiBzY3JpcHQgdG8gc2V0dXAgc2VydmVyIHVzZWQgZm9yIHNlcnZpbmcgd2ViIHBsYXRmb3JtIHRlc3RzLgotICAgIGNvbmZpZyA9IHNlcnZlLmxvYWRfY29uZmlnKG9zLnBhdGguam9pbihXUFRfRElSLCAnY29uZmlnLmRlZmF1bHQuanNvbicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihXUFRfRElSLCAnY29uZmlnLmpzb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICBjb25maWcgPSBzZXJ2ZS5sb2FkX2NvbmZpZygKKyAgICAgICAgb3MucGF0aC5qb2luKFdQVF9ESVIsICdjb25maWcuZGVmYXVsdC5qc29uJyksCisgICAgICAgIG9zLnBhdGguam9pbihXUFRfRElSLCAnY29uZmlnLmpzb24nKSwgKiprd2FyZ3MpCiAgICAgY29uZmlnWydwb3J0cyddWydodHRwJ11bMF0gPSBpbnQoc2VsZi5fd3B0X2h0dHBfcG9ydCkKIAogICAgIHNlcnZlLnNldHVwX2xvZ2dlcihjb25maWdbJ2xvZ19sZXZlbCddKQpAQCAtNTYsMTMgKzU2LDEzIEBACiAgICAgd2l0aCBzdGFzaC5TdGFzaFNlcnZlcigoc2VsZi5fYmluZGluZ19hZGRyZXNzLCBzZXJ2ZS5nZXRfcG9ydCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhrZXk9c3RyKHV1aWQudXVpZDQoKSkpOgogICAgICAgd2l0aCBzZXJ2ZS5nZXRfc3NsX2Vudmlyb25tZW50KGNvbmZpZykgYXMgc3NsX2VudjoKLSAgICAgICAgXywgc2VsZi5fc2VydmVycyA9IHNlcnZlLnN0YXJ0KGNvbmZpZywgc3NsX2VudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlLmRlZmF1bHRfcm91dGVzKCksICoqa3dhcmdzKQorICAgICAgICBfLCBzZWxmLl9zZXJ2ZXJzID0gc2VydmUuc3RhcnQoY29uZmlnLCBzc2xfZW52LCBzZXJ2ZS5kZWZhdWx0X3JvdXRlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9zdGFydGVkID0gVHJ1ZQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICB3aGlsZSBhbnkoaXRlbS5pc19hbGl2ZSgpCi0gICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHNlcnZlLml0ZXJfcHJvY3Moc2VsZi5fc2VydmVycykpOgorICAgICAgICAgIHdoaWxlIGFueSgKKyAgICAgICAgICAgICAgaXRlbS5pc19hbGl2ZSgpIGZvciBpdGVtIGluIHNlcnZlLml0ZXJfcHJvY3Moc2VsZi5fc2VydmVycykpOgogICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VydmUuaXRlcl9wcm9jcyhzZWxmLl9zZXJ2ZXJzKToKICAgICAgICAgICAgICAgaXRlbS5qb2luKDEpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKQEAgLTc3LDcgKzc3LDcgQEAKICAgICByZXR1cm4gc2VsZgogCiAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spOgotICAgIGZvciBfLCBzZXJ2ZXJzIGluIHNlbGYuX3NlcnZlcnMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHNlcnZlcnMgaW4gc2VsZi5fc2VydmVycy52YWx1ZXMoKToKICAgICAgIGZvciBfLCBzZXJ2ZXIgaW4gc2VydmVyczoKICAgICAgICAgc2VydmVyLmtpbGwoKQogICAgIHNlbGYuX3NlcnZlcl90aHJlYWQuam9pbigpCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9CVUlMRC5nbiBiL2NvYmFsdC9icm93c2VyL0JVSUxELmduCmluZGV4IDZjOWFlODMuLjg5OWYyYzUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL0JVSUxELmduCisrKyBiL2NvYmFsdC9icm93c2VyL0JVSUxELmduCkBAIC02Niw3ICs2NiwxOSBAQAogICAgIF0KICAgfQogICBpZiAoIWlzX2dvbGQpIHsKLSAgICBjb250ZW50X2RlcHMgKz0gWyAiLy9jb2JhbHQvZGVidWc6Y29weV9iYWNrZW5kX3dlYl9maWxlcyIgXQorICAgIGNvbnRlbnRfZGVwcyArPSBbCisgICAgICAiLy9jb2JhbHQvZGVidWcvYmFja2VuZC9jb250ZW50OmNvcHlfYmFja2VuZF93ZWJfZmlsZXMiLAorICAgICAgIi8vY29iYWx0L2RlYnVnL2NvbnNvbGUvY29udGVudDpjb3B5X2NvbnNvbGVfd2ViX2ZpbGVzIiwKKyAgICAgICIvL2NvYmFsdC9kZWJ1Zy9yZW1vdGUvY29udGVudDpjb3B5X3JlbW90ZV93ZWJfZmlsZXMiLAorICAgICAgIi8vdGhpcmRfcGFydHkvZGV2dG9vbHM6YnVpbGRfcmVsZWFzZV9kZXZ0b29scyIsCisgICAgICAiLy90aGlyZF9wYXJ0eS9kZXZ0b29sczpjb3B5X2RldnRvb2xzX21vZHVsZXMiLAorICAgICAgIi8vdGhpcmRfcGFydHkvZGV2dG9vbHM6Y29weV9pbnNwZWN0b3JfaW1hZ2VzIiwKKyAgICAgICIvL3RoaXJkX3BhcnR5L2RldnRvb2xzOmZyb250ZW5kX3Byb3RvY29sX3NvdXJjZXMiLAorICAgICAgIi8vdGhpcmRfcGFydHkvZGV2dG9vbHM6c3VwcG9ydGVkX2Nzc19wcm9wZXJ0aWVzIiwKKyAgICBdCisgIH0KKyAgaWYgKGRlZmluZWQocGxhdGZvcm1faTE4bl9jb25maWdfcGF0aCkpIHsKKyAgICBjb250ZW50X2RlcHMgKz0gWyBwbGF0Zm9ybV9pMThuX2NvbmZpZ19wYXRoIF0KICAgfQogfQogCkBAIC0xMDQsNiArMTE2LDggQEAKICAgICAicmVuZGVyX3RyZWVfY29tYmluZXIuaCIsCiAgICAgInNjcmVlbl9zaG90X3dyaXRlci5jYyIsCiAgICAgInNjcmVlbl9zaG90X3dyaXRlci5oIiwKKyAgICAic2VydmljZV93b3JrZXJfcmVnaXN0cnkuY2MiLAorICAgICJzZXJ2aWNlX3dvcmtlcl9yZWdpc3RyeS5oIiwKICAgICAic3BsYXNoX3NjcmVlbi5jYyIsCiAgICAgInNwbGFzaF9zY3JlZW4uaCIsCiAgICAgInNwbGFzaF9zY3JlZW5fY2FjaGUuY2MiLApAQCAtMTYzLDYgKzE3Nyw4IEBACiAgICAgIi8vY29iYWx0L3N5c3RlbV93aW5kb3ciLAogICAgICIvL2NvYmFsdC90cmFjZV9ldmVudCIsCiAgICAgIi8vY29iYWx0L3VpX25hdmlnYXRpb24iLAorICAgICIvL2NvYmFsdC93YXRjaGRvZyIsCisgICAgIi8vY29iYWx0L3dlYiIsCiAgICAgIi8vY29iYWx0L3dlYmRyaXZlciIsCiAgICAgIi8vY29iYWx0L3dlYnNvY2tldCIsCiAgICAgIi8vY29iYWx0L3dvcmtlciIsCkBAIC0xNzYsMTQgKzE5MiwxOSBAQAogICAgICIvL3VybCIsCiAgIF0KIAotICBpZiAoIWlzX2dvbGQpIHsKKyAgaWYgKGlzX2dvbGQpIHsKKyAgICBkZWZpbmVzID0gWyAiQ09CQUxUX0ZPUkNFX0hUVFBTIiBdCisgIH0gZWxzZSB7CiAgICAgc291cmNlcyArPSBbCiAgICAgICAiZGVidWdfY29uc29sZS5jYyIsCiAgICAgICAiZGVidWdfY29uc29sZS5oIiwKICAgICAgICJsaWZlY3ljbGVfY29uc29sZV9jb21tYW5kcy5jYyIsCiAgICAgICAibGlmZWN5Y2xlX2NvbnNvbGVfY29tbWFuZHMuaCIsCiAgICAgXQotICAgIGRlZmluZXMgPSBbICJFTkFCTEVfQUJPVVRfU0NIRU1FIiBdCisgICAgZGVmaW5lcyA9IFsKKyAgICAgICJFTkFCTEVfQUJPVVRfU0NIRU1FIiwKKyAgICAgICJDT0JBTFRfRU5BQkxFX0pBVkFTQ1JJUFRfRVJST1JfTE9HR0lORyIsCisgICAgXQogICAgIGRlcHMgKz0gWwogICAgICAgIi8vY29iYWx0L2RlYnVnIiwKICAgICAgICIvL2NvYmFsdC9kZWJ1Zzpjb25zb2xlX2NvbW1hbmRfbWFuYWdlciIsCkBAIC0yNzYsNiArMjk3LDcgQEAKICAgZGVwcyA9IFsKICAgICAjIEVuc3VyZSB0aGF0IGFsbCB0aGUgZmlsZXMgaGF2ZSBiZWVuIGdlbmVyYXRlZCBiZWZvcmUgdHJ5aW5nIHRvIGNvbXBpbGUuCiAgICAgIjpnZW5lcmF0ZWRfdHlwZXMiLAorICAgICIvL2NvYmFsdC9oNXZjYyIsCiAgICAgIi8vY29iYWx0L3dlYmRyaXZlciIsCiAgIF0KIH0KQEAgLTM4OSwzICs0MTEsMTQgQEAKIGNhY2hlX3RlbXBsYXRlcygiY2FjaGVkX2ppbmphX3RlbXBsYXRlcyIpIHsKICAgb3V0cHV0X2RpciA9IF9iaW5kaW5nc19zY3JpcHRzX291dHB1dF9kaXIKIH0KKwordGFyZ2V0KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSwgInNuYXBzaG90X2FwcF9zdGF0cyIpIHsKKyAgc291cmNlcyA9IFsgInNuYXBzaG90X2FwcF9zdGF0cy5jYyIgXQorICBkZXBzID0gWworICAgICI6YnJvd3NlciIsCisgICAgIjpicm93c2VyX3N3aXRjaGVzIiwKKyAgICAiOmNvYmFsdCIsCisgICAgIi8vY29iYWx0L2Jhc2UiLAorICAgICIvL3RoaXJkX3BhcnR5L3Byb3RvYnVmOnByb3RvYnVmX2xpdGUiLAorICBdCit9CmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9hcHBsaWNhdGlvbi5jYyBiL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmNjCmluZGV4IGUwNDhlMmYuLjljZDMzMzkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmNjCisrKyBiL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmNjCkBAIC03Miw2ICs3Miw3IEBACiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHX0NPTU1BTkRfTElORV9TV0lUQ0hFUykKICNpbmNsdWRlICJjb2JhbHQvc3lzdGVtX3dpbmRvdy9pbnB1dF9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5oIgorI2luY2x1ZGUgImNvYmFsdC93YXRjaGRvZy93YXRjaGRvZy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V2ZW50LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgpAQCAtMTAzLDEzICsxMDQsNyBAQAogI2lmIGRlZmluZWQoRU5BQkxFX1dFQkRSSVZFUikgfHwgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiBzdGQ6OnN0cmluZyBHZXREZXZTZXJ2ZXJzTGlzdGVuSXAoKSB7CiAgIGJvb2wgaXBfdjY7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaXBfdjYgPSBTYlNvY2tldElzSXB2NlN1cHBvcnRlZCgpOwotI2VsaWYgU0JfSEFTKElQVjYpCi0gIGlwX3Y2ID0gdHJ1ZTsKLSNlbHNlCi0gIGlwX3Y2ID0gZmFsc2U7Ci0jZW5kaWYKICAgLy8gRGVmYXVsdCB0byBJTkFERFJfQU5ZCiAgIHN0ZDo6c3RyaW5nIGxpc3Rlbl9pcChpcF92NiA/ICI6OiIgOiAiMC4wLjAuMCIpOwogCkBAIC01ODYsNyArNTgxLDE1IEBACiAgICAgICAgICAga01lbW9yeVRyYWNrZXJDb21tYW5kU2hvcnRIZWxwLCBrTWVtb3J5VHJhY2tlckNvbW1hbmRMb25nSGVscCkpCiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKSAmJiBkZWZpbmVkKFNUQVJCT0FSRF9BTExPV1NfTUVNT1JZX1RSQUNLSU5HKQogeworICB3YXRjaGRvZzo6V2F0Y2hkb2cqIHdhdGNoZG9nID0gd2F0Y2hkb2c6OldhdGNoZG9nOjpDcmVhdGVJbnN0YW5jZSgpOworICBEQ0hFQ0sod2F0Y2hkb2cpOworCiAgIERDSEVDSyghcXVpdF9jbG9zdXJlXy5pc19udWxsKCkpOworICBpZiAoc2hvdWxkX3ByZWxvYWQpIHsKKyAgICBwcmVsb2FkX3RpbWVzdGFtcF8gPSB0aW1lc3RhbXA7CisgIH0gZWxzZSB7CisgICAgc3RhcnRfdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKKyAgfQogICAvLyBDaGVjayB0byBzZWUgaWYgYSB0aW1lZF90cmFjZSBoYXMgYmVlbiBzZXQsIGluZGljYXRpbmcgdGhhdCB3ZSBzaG91bGQKICAgLy8gYmVnaW4gYSB0aW1lZCB0cmFjZSB1cG9uIHN0YXJ0dXAuCiAgIGJhc2U6OlRpbWVEZWx0YSB0cmFjZV9kdXJhdGlvbiA9IEdldFRpbWVkVHJhY2VEdXJhdGlvbigpOwpAQCAtNjQ0LDEyICs2NDcsMTEgQEAKICAgdW5jb25zdW1lZF9kZWVwX2xpbmtfID0gR2V0SW5pdGlhbERlZXBMaW5rKCk7CiAgIERMT0coSU5GTykgPDwgIkluaXRpYWwgZGVlcCBsaW5rOiAiIDw8IHVuY29uc3VtZWRfZGVlcF9saW5rXzsKIAotICBXZWJNb2R1bGU6Ok9wdGlvbnMgd2ViX29wdGlvbnM7CisgIFdlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfb3B0aW9ucygiTWFpbldlYk1vZHVsZSIpOwogICBzdG9yYWdlOjpTdG9yYWdlTWFuYWdlcjo6T3B0aW9ucyBzdG9yYWdlX21hbmFnZXJfb3B0aW9uczsKICAgbmV0d29yazo6TmV0d29ya01vZHVsZTo6T3B0aW9ucyBuZXR3b3JrX21vZHVsZV9vcHRpb25zOwogICAvLyBDcmVhdGUgdGhlIG1haW4gY29tcG9uZW50cyBvZiBvdXIgYnJvd3Nlci4KICAgQnJvd3Nlck1vZHVsZTo6T3B0aW9ucyBvcHRpb25zKHdlYl9vcHRpb25zKTsKLSAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMubmFtZSA9ICJNYWluV2ViTW9kdWxlIjsKICAgbmV0d29ya19tb2R1bGVfb3B0aW9ucy5wcmVmZXJyZWRfbGFuZ3VhZ2UgPSBsYW5ndWFnZTsKICAgb3B0aW9ucy5jb21tYW5kX2xpbmVfYXV0b19tZW1fc2V0dGluZ3MgPQogICAgICAgbWVtb3J5X3NldHRpbmdzOjpHZXRTZXR0aW5ncygqY29tbWFuZF9saW5lKTsKQEAgLTY2OSw3ICs2NzEsOCBAQAogICBBcHBseUNvbW1hbmRMaW5lU2V0dGluZ3NUb1JlbmRlcmVyT3B0aW9ucygmb3B0aW9ucy5yZW5kZXJlcl9tb2R1bGVfb3B0aW9ucyk7CiAKICAgaWYgKGNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKGJyb3dzZXI6OnN3aXRjaGVzOjprRGlzYWJsZUphdmFTY3JpcHRKaXQpKSB7Ci0gICAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMuamF2YXNjcmlwdF9lbmdpbmVfb3B0aW9ucy5kaXNhYmxlX2ppdCA9IHRydWU7CisgICAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMud2ViX29wdGlvbnMuamF2YXNjcmlwdF9lbmdpbmVfb3B0aW9ucworICAgICAgICAuZGlzYWJsZV9qaXQgPSB0cnVlOwogICB9CiAKICAgaWYgKGNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKApAQCAtNjgzLDEyICs2ODYsMTAgQEAKICAgICBzdG9yYWdlX21hbmFnZXJfb3B0aW9ucy5zYXZlZ2FtZV9vcHRpb25zLmZhY3RvcnkgPQogICAgICAgICAmc3RvcmFnZTo6U2F2ZWdhbWVGYWtlOjpDcmVhdGU7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQorCiAgIGlmIChjb21tYW5kX2xpbmUtPkhhc1N3aXRjaChicm93c2VyOjpzd2l0Y2hlczo6a0Rpc2FibGVPblNjcmVlbktleWJvYXJkKSkgewogICAgIG9wdGlvbnMuZW5hYmxlX29uX3NjcmVlbl9rZXlib2FyZCA9IGZhbHNlOwogICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdfQ09NTUFORF9MSU5FX1NXSVRDSEVTKQogCkBAIC03MjcsNyArNzI4LDggQEAKICAgfQogCiAgIC8vIFVzZXIgY2FuIHNwZWNpZnkgYW4gZXh0cmEgc2VhcmNoIHBhdGggZW50cnkgZm9yIGZpbGVzIGxvYWRlZCB2aWEgZmlsZTovLy4KLSAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMuZXh0cmFfd2ViX2ZpbGVfZGlyID0gR2V0RXh0cmFXZWJGaWxlRGlyKCk7CisgIG9wdGlvbnMud2ViX21vZHVsZV9vcHRpb25zLndlYl9vcHRpb25zLmV4dHJhX3dlYl9maWxlX2RpciA9CisgICAgICBHZXRFeHRyYVdlYkZpbGVEaXIoKTsKICAgU2VjdXJpdHlGbGFncyBzZWN1cml0eV9mbGFnc3tjc3A6OmtDU1BSZXF1aXJlZCwgbmV0d29yazo6a0hUVFBTUmVxdWlyZWR9OwogICAvLyBTZXQgY2FsbGJhY2sgdG8gYmUgbm90aWZpZWQgd2hlbiBhIG5hdmlnYXRpb24gb2NjdXJzIHRoYXQgZGVzdHJveXMgdGhlCiAgIC8vIHVuZGVybHlpbmcgV2ViTW9kdWxlLgpAQCAtODA1LDEyICs4MDcsMTggQEAKICAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMuY3NwX2VuZm9yY2VtZW50X21vZGUgPSBkb206OmtDc3BFbmZvcmNlbWVudEVuYWJsZTsKIAogICBvcHRpb25zLnJlcXVlc3RlZF92aWV3cG9ydF9zaXplID0gcmVxdWVzdGVkX3ZpZXdwb3J0X3NpemU7CisKKyAgLy8gU2V0IGNhbGxiYWNrIHRvIGNvbGxlY3QgdW5sb2FkIGV2ZW50IHRpbWUgYmVmb3JlIGZpcmluZyBkb2N1bWVudCdzIHVubG9hZAorICAvLyBldmVudC4KKyAgb3B0aW9ucy53ZWJfbW9kdWxlX29wdGlvbnMuY29sbGVjdF91bmxvYWRfZXZlbnRfdGltZV9jYWxsYmFjayA9IGJhc2U6OkJpbmQoCisgICAgICAmQXBwbGljYXRpb246OkNvbGxlY3RVbmxvYWRFdmVudFRpbWluZ0luZm8sIGJhc2U6OlVucmV0YWluZWQodGhpcykpOworCiAgIGFjY291bnRfbWFuYWdlcl8ucmVzZXQobmV3IGFjY291bnQ6OkFjY291bnRNYW5hZ2VyKCkpOwogCiAgIHN0b3JhZ2VfbWFuYWdlcl8ucmVzZXQobmV3IHN0b3JhZ2U6OlN0b3JhZ2VNYW5hZ2VyKHN0b3JhZ2VfbWFuYWdlcl9vcHRpb25zKSk7CiAKICAgbmV0d29ya19tb2R1bGVfLnJlc2V0KG5ldyBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKAotICAgICAgQ3JlYXRlVXNlckFnZW50U3RyaW5nKGJyb3dzZXI6OkdldFVzZXJBZ2VudFBsYXRmb3JtSW5mb0Zyb21TeXN0ZW0oKSksCisgICAgICBDcmVhdGVVc2VyQWdlbnRTdHJpbmcoR2V0VXNlckFnZW50UGxhdGZvcm1JbmZvRnJvbVN5c3RlbSgpKSwKICAgICAgIHN0b3JhZ2VfbWFuYWdlcl8uZ2V0KCksICZldmVudF9kaXNwYXRjaGVyXywgbmV0d29ya19tb2R1bGVfb3B0aW9ucykpOwogCiAgIEFkZENyYXNoSGFuZGxlckFubm90YXRpb25zKCk7CkBAIC04NDUsOSArODUzLDYgQEAKICNlbmRpZgogICAgICAgb3B0aW9ucykpOwogCi0gIERDSEVDSyhicm93c2VyX21vZHVsZV8pOwotICBicm93c2VyX21vZHVsZV8tPlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAoc2hvdWxkX3ByZWxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXApOwogICBVcGRhdGVVc2VyQWdlbnQoKTsKIAogICAvLyBSZWdpc3RlciBldmVudCBjYWxsYmFja3MuCkBAIC04NTUsNyArODYwLDYgQEAKICAgICAgICZBcHBsaWNhdGlvbjo6T25XaW5kb3dTaXplQ2hhbmdlZEV2ZW50LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKICAgZXZlbnRfZGlzcGF0Y2hlcl8uQWRkRXZlbnRDYWxsYmFjayhiYXNlOjpXaW5kb3dTaXplQ2hhbmdlZEV2ZW50OjpUeXBlSWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfc2l6ZV9jaGFuZ2VfZXZlbnRfY2FsbGJhY2tfKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICBvbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd25fZXZlbnRfY2FsbGJhY2tfID0gYmFzZTo6QmluZCgKICAgICAgICZBcHBsaWNhdGlvbjo6T25PblNjcmVlbktleWJvYXJkU2hvd25FdmVudCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSk7CiAgIGV2ZW50X2Rpc3BhdGNoZXJfLkFkZEV2ZW50Q2FsbGJhY2soYmFzZTo6T25TY3JlZW5LZXlib2FyZFNob3duRXZlbnQ6OlR5cGVJZCgpLApAQCAtODgxLDE2ICs4ODUsMTEgQEAKICAgZXZlbnRfZGlzcGF0Y2hlcl8uQWRkRXZlbnRDYWxsYmFjaygKICAgICAgIGJhc2U6Ok9uU2NyZWVuS2V5Ym9hcmRTdWdnZXN0aW9uc1VwZGF0ZWRFdmVudDo6VHlwZUlkKCksCiAgICAgICBvbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnNfdXBkYXRlZF9ldmVudF9jYWxsYmFja18pOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBvbl9jYXB0aW9uX3NldHRpbmdzX2NoYW5nZWRfZXZlbnRfY2FsbGJhY2tfID0gYmFzZTo6QmluZCgKICAgICAgICZBcHBsaWNhdGlvbjo6T25DYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpOwogICBldmVudF9kaXNwYXRjaGVyXy5BZGRFdmVudENhbGxiYWNrKAogICAgICAgYmFzZTo6QWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudDo6VHlwZUlkKCksCiAgICAgICBvbl9jYXB0aW9uX3NldHRpbmdzX2NoYW5nZWRfZXZlbnRfY2FsbGJhY2tfKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBvbl93aW5kb3dfb25fb25saW5lX2V2ZW50X2NhbGxiYWNrXyA9CiAgICAgICBiYXNlOjpCaW5kKCZBcHBsaWNhdGlvbjo6T25XaW5kb3dPbk9ubGluZUV2ZW50LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKICAgZXZlbnRfZGlzcGF0Y2hlcl8uQWRkRXZlbnRDYWxsYmFjayhiYXNlOjpXaW5kb3dPbk9ubGluZUV2ZW50OjpUeXBlSWQoKSwKQEAgLTk1OCwxMCArOTU3LDEyIEBACiB9CiAKIEFwcGxpY2F0aW9uOjp+QXBwbGljYXRpb24oKSB7Ci0vLyBleHBsaWNpdGx5IHJlc2V0IGhlcmUgYmVjYXVzZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIG9iamVjdCBpcyBjb21wbGV4Ci0vLyBhbmQgaW52b2x2ZXMgYSB0aHJlYWQgam9pbi4gSWYgdGhpcyB3ZXJlIHRvIGhhbmcgdGhlIGFwcCB0aGVuIGhhdmluZwotLy8gdGhlIGRlc3RydWN0aW9uIGF0IHRoaXMgcG9pbnQgZ2l2ZXMgYSByZWFsIGZpbGUtbGluZSBudW1iZXIgYW5kIGEgcGxhY2UKLS8vIGZvciB0aGUgZGVidWdnZXIgdG8gbGFuZC4KKyAgLy8gZXhwbGljaXRseSByZXNldCBoZXJlIGJlY2F1c2UgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBvYmplY3QgaXMgY29tcGxleAorICAvLyBhbmQgaW52b2x2ZXMgYSB0aHJlYWQgam9pbi4gSWYgdGhpcyB3ZXJlIHRvIGhhbmcgdGhlIGFwcCB0aGVuIGhhdmluZworICAvLyB0aGUgZGVzdHJ1Y3Rpb24gYXQgdGhpcyBwb2ludCBnaXZlcyBhIHJlYWwgZmlsZS1saW5lIG51bWJlciBhbmQgYSBwbGFjZQorICAvLyBmb3IgdGhlIGRlYnVnZ2VyIHRvIGxhbmQuCisgIHdhdGNoZG9nOjpXYXRjaGRvZzo6RGVsZXRlSW5zdGFuY2UoKTsKKwogI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKSAmJiBkZWZpbmVkKFNUQVJCT0FSRF9BTExPV1NfTUVNT1JZX1RSQUNLSU5HKQogICBtZW1vcnlfdHJhY2tlcl90b29sXy5yZXNldChOVUxMKTsKICNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpICYmIGRlZmluZWQoU1RBUkJPQVJEX0FMTE9XU19NRU1PUllfVFJBQ0tJTkcpCkBAIC05NjksNyArOTcwLDYgQEAKICAgLy8gVW5yZWdpc3RlciBldmVudCBjYWxsYmFja3MuCiAgIGV2ZW50X2Rpc3BhdGNoZXJfLlJlbW92ZUV2ZW50Q2FsbGJhY2soYmFzZTo6V2luZG93U2l6ZUNoYW5nZWRFdmVudDo6VHlwZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93X3NpemVfY2hhbmdlX2V2ZW50X2NhbGxiYWNrXyk7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgZXZlbnRfZGlzcGF0Y2hlcl8uUmVtb3ZlRXZlbnRDYWxsYmFjaygKICAgICAgIGJhc2U6Ok9uU2NyZWVuS2V5Ym9hcmRTaG93bkV2ZW50OjpUeXBlSWQoKSwKICAgICAgIG9uX3NjcmVlbl9rZXlib2FyZF9zaG93bl9ldmVudF9jYWxsYmFja18pOwpAQCAtOTg1LDEzICs5ODUsOSBAQAogICBldmVudF9kaXNwYXRjaGVyXy5SZW1vdmVFdmVudENhbGxiYWNrKAogICAgICAgYmFzZTo6T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50OjpUeXBlSWQoKSwKICAgICAgIG9uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc191cGRhdGVkX2V2ZW50X2NhbGxiYWNrXyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBldmVudF9kaXNwYXRjaGVyXy5SZW1vdmVFdmVudENhbGxiYWNrKAogICAgICAgYmFzZTo6QWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudDo6VHlwZUlkKCksCiAgICAgICBvbl9jYXB0aW9uX3NldHRpbmdzX2NoYW5nZWRfZXZlbnRfY2FsbGJhY2tfKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIGV2ZW50X2Rpc3BhdGNoZXJfLlJlbW92ZUV2ZW50Q2FsbGJhY2soCiAgICAgICBiYXNlOjpEYXRlVGltZUNvbmZpZ3VyYXRpb25DaGFuZ2VkRXZlbnQ6OlR5cGVJZCgpLApAQCAtMTAwNiwxMCArMTAwMiwxMiBAQAogICAgICAgICBiYXNlOjpCaW5kKCZBcHBsaWNhdGlvbjo6U3RhcnQsIGJhc2U6OlVucmV0YWluZWQodGhpcyksIHRpbWVzdGFtcCkpOwogICAgIHJldHVybjsKICAgfQorICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRChhcHBsaWNhdGlvbl9ldmVudF90aHJlYWRfY2hlY2tlcl8pOwogCisgIGlmICghc3RhcnRfdGltZXN0YW1wXy5oYXNfdmFsdWUoKSkgeworICAgIHN0YXJ0X3RpbWVzdGFtcF8gPSB0aW1lc3RhbXA7CisgIH0KICAgT25BcHBsaWNhdGlvbkV2ZW50KGtTYkV2ZW50VHlwZVN0YXJ0LCB0aW1lc3RhbXApOwotICBicm93c2VyX21vZHVsZV8tPlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAoZmFsc2UgLyppc19wcmVsb2FkKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXApOwogfQogCiB2b2lkIEFwcGxpY2F0aW9uOjpRdWl0KCkgewpAQCAtMTAxOCw2ICsxMDE2LDcgQEAKICAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZBcHBsaWNhdGlvbjo6UXVpdCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwogICAgIHJldHVybjsKICAgfQorICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRChhcHBsaWNhdGlvbl9ldmVudF90aHJlYWRfY2hlY2tlcl8pOwogCiAgIHF1aXRfY2xvc3VyZV8uUnVuKCk7CiB9CkBAIC0xMDYwLDcgKzEwNTksNiBAQAogICAgICAgICAgIHN0YXRpY19jYXN0PFNiRXZlbnRXaW5kb3dTaXplQ2hhbmdlZERhdGEqPihzdGFyYm9hcmRfZXZlbnQtPmRhdGEpCiAgICAgICAgICAgICAgIC0+c2l6ZSkpOwogICAgICAgYnJlYWs7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICBjYXNlIGtTYkV2ZW50VHlwZU9uU2NyZWVuS2V5Ym9hcmRTaG93bjoKICAgICAgIERDSEVDSyhzdGFyYm9hcmRfZXZlbnQtPmRhdGEpOwogICAgICAgRGlzcGF0Y2hFdmVudEludGVybmFsKG5ldyBiYXNlOjpPblNjcmVlbktleWJvYXJkU2hvd25FdmVudCgKQEAgLTEwODMsOCArMTA4MSw2IEBACiAgICAgICBEaXNwYXRjaEV2ZW50SW50ZXJuYWwobmV3IGJhc2U6Ok9uU2NyZWVuS2V5Ym9hcmRTdWdnZXN0aW9uc1VwZGF0ZWRFdmVudCgKICAgICAgICAgICAqc3RhdGljX2Nhc3Q8aW50Kj4oc3RhcmJvYXJkX2V2ZW50LT5kYXRhKSkpOwogICAgICAgYnJlYWs7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgY2FzZSBrU2JFdmVudFR5cGVMaW5rOiB7CiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgICAgIERpc3BhdGNoRGVlcExpbmsoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0YXJib2FyZF9ldmVudC0+ZGF0YSksCkBAIC0xMTAxLDIxICsxMDk3LDExIEBACiAgICAgY2FzZSBrU2JFdmVudFR5cGVBY2Nlc3NpYmxpdHlTZXR0aW5nc0NoYW5nZWQ6CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgICAgICBEaXNwYXRjaEV2ZW50SW50ZXJuYWwobmV3IGJhc2U6OkFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZWRFdmVudCgpKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0gICAgICAvLyBBbHNvIGRpc3BhdGNoIHRoZSBuZXdlciB0ZXh0LXRvLXNwZWVjaCBzZXR0aW5ncyBjaGFuZ2VkIGV2ZW50IHNpbmNlCi0gICAgICAvLyB0aGUgc3BlY2lmaWMga1NiRXZlbnRUeXBlQWNjZXNzaWIoaSlsaXR5VGV4dFRvU3BlZWNoU2V0dGluZ3NDaGFuZ2VkCi0gICAgICAvLyBldmVudCBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgc3RhcmJvYXJkIHZlcnNpb24uCi0gICAgICBEaXNwYXRjaEV2ZW50SW50ZXJuYWwoCi0gICAgICAgICAgbmV3IGJhc2U6OkFjY2Vzc2liaWxpdHlUZXh0VG9TcGVlY2hTZXR0aW5nc0NoYW5nZWRFdmVudCgpKTsKLSNlbmRpZgogICAgICAgYnJlYWs7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICAgIGNhc2Uga1NiRXZlbnRUeXBlQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5nc0NoYW5nZWQ6CiAgICAgICBEaXNwYXRjaEV2ZW50SW50ZXJuYWwoCiAgICAgICAgICAgbmV3IGJhc2U6OkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoKSk7CiAgICAgICBicmVhazsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgICBjYXNlIGtTYkV2ZW50VHlwZUFjY2Vzc2liaWxpdHlUZXh0VG9TcGVlY2hTZXR0aW5nc0NoYW5nZWQ6CiAjZWxzZQpAQCAtMTEyNCw3ICsxMTEwLDYgQEAKICAgICAgIERpc3BhdGNoRXZlbnRJbnRlcm5hbCgKICAgICAgICAgICBuZXcgYmFzZTo6QWNjZXNzaWJpbGl0eVRleHRUb1NwZWVjaFNldHRpbmdzQ2hhbmdlZEV2ZW50KCkpOwogICAgICAgYnJlYWs7Ci0jZW5kaWYKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlT3NOZXR3b3JrRGlzY29ubmVjdGVkOgogICAgICAgRGlzcGF0Y2hFdmVudEludGVybmFsKG5ldyBiYXNlOjpXaW5kb3dPbk9mZmxpbmVFdmVudCgpKTsKQEAgLTExNTcsODUgKzExNDIsODggQEAKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiQXBwbGljYXRpb246Ok9uQXBwbGljYXRpb25FdmVudCgpIik7CiAgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKGFwcGxpY2F0aW9uX2V2ZW50X3RocmVhZF9jaGVja2VyXyk7CiAKKyAgd2F0Y2hkb2c6OldhdGNoZG9nKiB3YXRjaGRvZyA9IHdhdGNoZG9nOjpXYXRjaGRvZzo6R2V0SW5zdGFuY2UoKTsKKwogICBzd2l0Y2ggKGV2ZW50X3R5cGUpIHsKICAgICBjYXNlIGtTYkV2ZW50VHlwZVN0b3A6Ci0gICAgICBETE9HKElORk8pIDw8ICJHb3QgcXVpdCBldmVudC4iOworICAgICAgTE9HKElORk8pIDw8ICJHb3QgcXVpdCBldmVudC4iOworICAgICAgaWYgKHdhdGNoZG9nKSB3YXRjaGRvZy0+VXBkYXRlU3RhdGUoYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVTdG9wcGVkKTsKICAgICAgIFF1aXQoKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkZpbmlzaGVkIHF1aXR0aW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIHF1aXR0aW5nLiI7CiAgICAgICBicmVhazsKICAgICBjYXNlIGtTYkV2ZW50VHlwZVN0YXJ0OgotICAgICAgRExPRyhJTkZPKSA8PCAiR290IHN0YXJ0IGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCBzdGFydCBldmVudC4iOwogICAgICAgYnJvd3Nlcl9tb2R1bGVfLT5SZXZlYWwodGltZXN0YW1wKTsKICAgICAgIGJyb3dzZXJfbW9kdWxlXy0+Rm9jdXModGltZXN0YW1wKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkZpbmlzaGVkIHN0YXJ0aW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIHN0YXJ0aW5nLiI7CiAgICAgICBicmVhazsKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlQmx1cjoKLSAgICAgIERMT0coSU5GTykgPDwgIkdvdCBibHVyIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCBibHVyIGV2ZW50LiI7CiAgICAgICBicm93c2VyX21vZHVsZV8tPkJsdXIodGltZXN0YW1wKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkZpbmlzaGVkIGJsdXJyaW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIGJsdXJyaW5nLiI7CiAgICAgICBicmVhazsKICAgICBjYXNlIGtTYkV2ZW50VHlwZUZvY3VzOgotICAgICAgRExPRyhJTkZPKSA8PCAiR290IGZvY3VzIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCBmb2N1cyBldmVudC4iOwogICAgICAgYnJvd3Nlcl9tb2R1bGVfLT5Gb2N1cyh0aW1lc3RhbXApOwotICAgICAgRExPRyhJTkZPKSA8PCAiRmluaXNoZWQgZm9jdXNpbmcuIjsKKyAgICAgIExPRyhJTkZPKSA8PCAiRmluaXNoZWQgZm9jdXNpbmcuIjsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1NiRXZlbnRUeXBlQ29uY2VhbDoKLSAgICAgIERMT0coSU5GTykgPDwgIkdvdCBjb25jZWFsIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCBjb25jZWFsIGV2ZW50LiI7CiAgICAgICBicm93c2VyX21vZHVsZV8tPkNvbmNlYWwodGltZXN0YW1wKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkZpbmlzaGVkIGNvbmNlYWxpbmcuIjsKKyAgICAgIExPRyhJTkZPKSA8PCAiRmluaXNoZWQgY29uY2VhbGluZy4iOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrU2JFdmVudFR5cGVSZXZlYWw6CiAgICAgICBEQ0hFQ0soU2JTeXN0ZW1TdXBwb3J0c1Jlc3VtZSgpKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkdvdCByZXZlYWwgZXZlbnQuIjsKKyAgICAgIExPRyhJTkZPKSA8PCAiR290IHJldmVhbCBldmVudC4iOwogICAgICAgYnJvd3Nlcl9tb2R1bGVfLT5SZXZlYWwodGltZXN0YW1wKTsKLSAgICAgIERMT0coSU5GTykgPDwgIkZpbmlzaGVkIHJldmVhbGluZy4iOworICAgICAgTE9HKElORk8pIDw8ICJGaW5pc2hlZCByZXZlYWxpbmcuIjsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1NiRXZlbnRUeXBlRnJlZXplOgotICAgICAgRExPRyhJTkZPKSA8PCAiR290IGZyZWV6ZSBldmVudC4iOworICAgICAgTE9HKElORk8pIDw8ICJHb3QgZnJlZXplIGV2ZW50LiI7CiAgICAgICBicm93c2VyX21vZHVsZV8tPkZyZWV6ZSh0aW1lc3RhbXApOwogI2lmIFNCX0lTKEVWRVJHUkVFTikKICAgICAgIGlmICh1cGRhdGVyX21vZHVsZV8pIHVwZGF0ZXJfbW9kdWxlXy0+U3VzcGVuZCgpOwogI2VuZGlmCi0gICAgICBETE9HKElORk8pIDw8ICJGaW5pc2hlZCBmcmVlemluZy4iOworICAgICAgTE9HKElORk8pIDw8ICJGaW5pc2hlZCBmcmVlemluZy4iOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrU2JFdmVudFR5cGVVbmZyZWV6ZToKLSAgICAgIERMT0coSU5GTykgPDwgIkdvdCB1bmZyZWV6ZSBldmVudC4iOworICAgICAgTE9HKElORk8pIDw8ICJHb3QgdW5mcmVlemUgZXZlbnQuIjsKICAgICAgIGJyb3dzZXJfbW9kdWxlXy0+VW5mcmVlemUodGltZXN0YW1wKTsKICNpZiBTQl9JUyhFVkVSR1JFRU4pCiAgICAgICBpZiAodXBkYXRlcl9tb2R1bGVfKSB1cGRhdGVyX21vZHVsZV8tPlJlc3VtZSgpOwogI2VuZGlmCi0gICAgICBETE9HKElORk8pIDw8ICJGaW5pc2hlZCB1bmZyZWV6aW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIHVuZnJlZXppbmcuIjsKICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICBjYXNlIGtTYkV2ZW50VHlwZVBhdXNlOgotICAgICAgRExPRyhJTkZPKSA8PCAiR290IHBhdXNlIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCBwYXVzZSBldmVudC4iOwogICAgICAgYnJvd3Nlcl9tb2R1bGVfLT5CbHVyKHRpbWVzdGFtcCk7Ci0gICAgICBETE9HKElORk8pIDw8ICJGaW5pc2hlZCBwYXVzaW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIHBhdXNpbmcuIjsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1NiRXZlbnRUeXBlVW5wYXVzZToKLSAgICAgIERMT0coSU5GTykgPDwgIkdvdCB1bnBhdXNlIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCB1bnBhdXNlIGV2ZW50LiI7CiAgICAgICBicm93c2VyX21vZHVsZV8tPkZvY3VzKHRpbWVzdGFtcCk7Ci0gICAgICBETE9HKElORk8pIDw8ICJGaW5pc2hlZCB1bnBhdXNpbmcuIjsKKyAgICAgIExPRyhJTkZPKSA8PCAiRmluaXNoZWQgdW5wYXVzaW5nLiI7CiAgICAgICBicmVhazsKICAgICBjYXNlIGtTYkV2ZW50VHlwZVN1c3BlbmQ6Ci0gICAgICBETE9HKElORk8pIDw8ICJHb3Qgc3VzcGVuZCBldmVudC4iOworICAgICAgTE9HKElORk8pIDw8ICJHb3Qgc3VzcGVuZCBldmVudC4iOwogICAgICAgYnJvd3Nlcl9tb2R1bGVfLT5Db25jZWFsKHRpbWVzdGFtcCk7CiAgICAgICBicm93c2VyX21vZHVsZV8tPkZyZWV6ZSh0aW1lc3RhbXApOwogI2lmIFNCX0lTKEVWRVJHUkVFTikKICAgICAgIGlmICh1cGRhdGVyX21vZHVsZV8pIHVwZGF0ZXJfbW9kdWxlXy0+U3VzcGVuZCgpOwogI2VuZGlmCi0gICAgICBETE9HKElORk8pIDw8ICJGaW5pc2hlZCBzdXNwZW5kaW5nLiI7CisgICAgICBMT0coSU5GTykgPDwgIkZpbmlzaGVkIHN1c3BlbmRpbmcuIjsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1NiRXZlbnRUeXBlUmVzdW1lOgogICAgICAgRENIRUNLKFNiU3lzdGVtU3VwcG9ydHNSZXN1bWUoKSk7Ci0gICAgICBETE9HKElORk8pIDw8ICJHb3QgcmVzdW1lIGV2ZW50LiI7CisgICAgICBMT0coSU5GTykgPDwgIkdvdCByZXN1bWUgZXZlbnQuIjsKICAgICAgIGJyb3dzZXJfbW9kdWxlXy0+VW5mcmVlemUodGltZXN0YW1wKTsKICAgICAgIGJyb3dzZXJfbW9kdWxlXy0+UmV2ZWFsKHRpbWVzdGFtcCk7CiAjaWYgU0JfSVMoRVZFUkdSRUVOKQogICAgICAgaWYgKHVwZGF0ZXJfbW9kdWxlXykgdXBkYXRlcl9tb2R1bGVfLT5SZXN1bWUoKTsKICNlbmRpZgotICAgICAgRExPRyhJTkZPKSA8PCAiRmluaXNoZWQgcmVzdW1pbmcuIjsKKyAgICAgIExPRyhJTkZPKSA8PCAiRmluaXNoZWQgcmVzdW1pbmcuIjsKICAgICAgIGJyZWFrOwogI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlTG93TWVtb3J5OgpAQCAtMTI0NiwyNCArMTIzNCwxNyBAQAogICAgIC8vIEFsbCBvZiB0aGUgcmVtYWluaW5nIGV2ZW50IHR5cGVzIGFyZSB1bmV4cGVjdGVkOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlUHJlbG9hZDoKICAgICBjYXNlIGtTYkV2ZW50VHlwZVdpbmRvd1NpemVDaGFuZ2VkOgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgICBjYXNlIGtTYkV2ZW50VHlwZUFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkOgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlQWNjZXNzaWJpbGl0eVRleHRUb1NwZWVjaFNldHRpbmdzQ2hhbmdlZDoKICNlbHNlCiAgICAgY2FzZSBrU2JFdmVudFR5cGVBY2Nlc3NpYmxpdHlUZXh0VG9TcGVlY2hTZXR0aW5nc0NoYW5nZWQ6CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICBjYXNlIGtTYkV2ZW50VHlwZU9uU2NyZWVuS2V5Ym9hcmRCbHVycmVkOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlT25TY3JlZW5LZXlib2FyZEZvY3VzZWQ6CiAgICAgY2FzZSBrU2JFdmVudFR5cGVPblNjcmVlbktleWJvYXJkSGlkZGVuOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlT25TY3JlZW5LZXlib2FyZFNob3duOgogICAgIGNhc2Uga1NiRXZlbnRUeXBlT25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZDoKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAgIGNhc2Uga1NiRXZlbnRUeXBlQWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlZDoKICNlbHNlCkBAIC0xMjg0LDYgKzEyNjUsNyBAQAogICAgICAgTk9UUkVBQ0hFRCgpIDw8ICJVbmV4cGVjdGVkIGV2ZW50IHR5cGU6ICIgPDwgZXZlbnRfdHlwZTsKICAgICAgIHJldHVybjsKICAgfQorICBpZiAod2F0Y2hkb2cpIHdhdGNoZG9nLT5VcGRhdGVTdGF0ZShicm93c2VyX21vZHVsZV8tPkdldEFwcGxpY2F0aW9uU3RhdGUoKSk7CiB9CiAKIHZvaWQgQXBwbGljYXRpb246Ok9uV2luZG93U2l6ZUNoYW5nZWRFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpIHsKQEAgLTEzMDQsNyArMTI4Niw2IEBACiAgIGJyb3dzZXJfbW9kdWxlXy0+T25XaW5kb3dTaXplQ2hhbmdlZCh2aWV3cG9ydF9zaXplKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiB2b2lkIEFwcGxpY2F0aW9uOjpPbk9uU2NyZWVuS2V5Ym9hcmRTaG93bkV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCkgewogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsCiAgICAgICAgICAgICAgICAiQXBwbGljYXRpb246Ok9uT25TY3JlZW5LZXlib2FyZFNob3duRXZlbnQoKSIpOwpAQCAtMTM0NSwxMCArMTMyNiw3IEBACiAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDwKICAgICAgICAgICBjb25zdCBiYXNlOjpPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNVcGRhdGVkRXZlbnQqPihldmVudCkpOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogdm9pZCBBcHBsaWNhdGlvbjo6T25DYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwKICAgICAgICAgICAgICAgICJBcHBsaWNhdGlvbjo6T25DYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoKSIpOwpAQCAtMTM1Niw3ICsxMzM0LDYgQEAKICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PAogICAgICAgICAgIGNvbnN0IGJhc2U6OkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQqPihldmVudCkpOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAKIHZvaWQgQXBwbGljYXRpb246Ok9uV2luZG93T25PbmxpbmVFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpIHsKICAgYnJvd3Nlcl9tb2R1bGVfLT5PbldpbmRvd09uT25saW5lRXZlbnQoCkBAIC0xMzc4LDE0ICsxMzU1LDM0IEBACiB9CiAjZW5kaWYKIAotdm9pZCBBcHBsaWNhdGlvbjo6V2ViTW9kdWxlQ3JlYXRlZCgpIHsKK3ZvaWQgQXBwbGljYXRpb246OldlYk1vZHVsZUNyZWF0ZWQoV2ViTW9kdWxlKiB3ZWJfbW9kdWxlKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkFwcGxpY2F0aW9uOjpXZWJNb2R1bGVDcmVhdGVkKCkiKTsKKyAgRENIRUNLKHdlYl9tb2R1bGUpOworICBpZiAocHJlbG9hZF90aW1lc3RhbXBfLmhhc192YWx1ZSgpKSB7CisgICAgd2ViX21vZHVsZS0+U2V0QXBwbGljYXRpb25TdGFydE9yUHJlbG9hZFRpbWVzdGFtcCgKKyAgICAgICAgdHJ1ZSwgcHJlbG9hZF90aW1lc3RhbXBfLnZhbHVlKCkpOworICB9CisgIGlmIChzdGFydF90aW1lc3RhbXBfLmhhc192YWx1ZSgpKSB7CisgICAgd2ViX21vZHVsZS0+U2V0QXBwbGljYXRpb25TdGFydE9yUHJlbG9hZFRpbWVzdGFtcChmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWVzdGFtcF8udmFsdWUoKSk7CisgIH0KICAgRGlzcGF0Y2hEZWVwTGlua0lmTm90Q29uc3VtZWQoKTsKICNpZiBkZWZpbmVkKEVOQUJMRV9XRUJEUklWRVIpCiAgIGlmICh3ZWJfZHJpdmVyX21vZHVsZV8pIHsKICAgICB3ZWJfZHJpdmVyX21vZHVsZV8tPk9uV2luZG93UmVjcmVhdGVkKCk7CiAgIH0KICNlbmRpZgorICBpZiAoIXVubG9hZF9ldmVudF9zdGFydF90aW1lXy5pc19udWxsKCkgfHwKKyAgICAgICF1bmxvYWRfZXZlbnRfZW5kX3RpbWVfLmlzX251bGwoKSkgeworICAgIHdlYl9tb2R1bGUtPlNldFVubG9hZEV2ZW50VGltaW5nSW5mbyh1bmxvYWRfZXZlbnRfc3RhcnRfdGltZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubG9hZF9ldmVudF9lbmRfdGltZV8pOworICB9Cit9CisKK3ZvaWQgQXBwbGljYXRpb246OkNvbGxlY3RVbmxvYWRFdmVudFRpbWluZ0luZm8oYmFzZTo6VGltZVRpY2tzIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSkgeworICB1bmxvYWRfZXZlbnRfc3RhcnRfdGltZV8gPSBzdGFydF90aW1lOworICB1bmxvYWRfZXZlbnRfZW5kX3RpbWVfID0gZW5kX3RpbWU7CiB9CiAKIEFwcGxpY2F0aW9uOjpDVmFsU3RhdHM6OkNWYWxTdGF0cygpCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9hcHBsaWNhdGlvbi5oIGIvY29iYWx0L2Jyb3dzZXIvYXBwbGljYXRpb24uaAppbmRleCA3OTE1YTlkLi42NWY4ZjY3IDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9hcHBsaWNhdGlvbi5oCisrKyBiL2NvYmFsdC9icm93c2VyL2FwcGxpY2F0aW9uLmgKQEAgLTI4LDcgKzI4LDkgQEAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9ldmVudF9kaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9tb2R1bGUuaCIKICNpbmNsdWRlICJjb2JhbHQvYnJvd3Nlci9tZW1vcnlfdHJhY2tlci90b29sLmgiCisjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKICNpbmNsdWRlICJjb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKICNpZiBTQl9JUyhFVkVSR1JFRU4pCiAjaW5jbHVkZSAiY29iYWx0L3VwZGF0ZXIvdXBkYXRlcl9tb2R1bGUuaCIKICNlbmRpZgpAQCAtNzMsMTkgKzc1LDEyIEBACiAgIC8vIENhbGxlZCB0byBoYW5kbGUgYSB3aW5kb3cgc2l6ZSBjaGFuZ2UgZXZlbnQuCiAgIHZvaWQgT25XaW5kb3dTaXplQ2hhbmdlZEV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICB2b2lkIE9uT25TY3JlZW5LZXlib2FyZFNob3duRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KTsKICAgdm9pZCBPbk9uU2NyZWVuS2V5Ym9hcmRIaWRkZW5FdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpOwogICB2b2lkIE9uT25TY3JlZW5LZXlib2FyZEZvY3VzZWRFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpOwogICB2b2lkIE9uT25TY3JlZW5LZXlib2FyZEJsdXJyZWRFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpOwogICB2b2lkIE9uT25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIHZvaWQgT25DYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQotCiAgIHZvaWQgT25XaW5kb3dPbk9ubGluZUV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCk7CiAgIHZvaWQgT25XaW5kb3dPbk9mZmxpbmVFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpOwogCkBAIC05NCw3ICs4OSwxMCBAQAogI2VuZGlmCiAKICAgLy8gQ2FsbGVkIHdoZW4gYSBuYXZpZ2F0aW9uIG9jY3VycyBpbiB0aGUgQnJvd3Nlck1vZHVsZS4KLSAgdm9pZCBXZWJNb2R1bGVDcmVhdGVkKCk7CisgIHZvaWQgV2ViTW9kdWxlQ3JlYXRlZChXZWJNb2R1bGUqIHdlYl9tb2R1bGUpOworCisgIHZvaWQgQ29sbGVjdFVubG9hZEV2ZW50VGltaW5nSW5mbyhiYXNlOjpUaW1lVGlja3Mgc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSk7CiAKICAgLy8gQSBjb25kdWl0IGZvciBzeXN0ZW0gZXZlbnRzLgogICBiYXNlOjpFdmVudERpc3BhdGNoZXIgZXZlbnRfZGlzcGF0Y2hlcl87CkBAIC0xMTgsMTcgKzExNiwxMiBAQAogCiAgIC8vIEV2ZW50IGNhbGxiYWNrcy4KICAgYmFzZTo6RXZlbnRDYWxsYmFjayB3aW5kb3dfc2l6ZV9jaGFuZ2VfZXZlbnRfY2FsbGJhY2tfOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIGJhc2U6OkV2ZW50Q2FsbGJhY2sgb25fc2NyZWVuX2tleWJvYXJkX3Nob3duX2V2ZW50X2NhbGxiYWNrXzsKICAgYmFzZTo6RXZlbnRDYWxsYmFjayBvbl9zY3JlZW5fa2V5Ym9hcmRfaGlkZGVuX2V2ZW50X2NhbGxiYWNrXzsKICAgYmFzZTo6RXZlbnRDYWxsYmFjayBvbl9zY3JlZW5fa2V5Ym9hcmRfZm9jdXNlZF9ldmVudF9jYWxsYmFja187CiAgIGJhc2U6OkV2ZW50Q2FsbGJhY2sgb25fc2NyZWVuX2tleWJvYXJkX2JsdXJyZWRfZXZlbnRfY2FsbGJhY2tfOwogICBiYXNlOjpFdmVudENhbGxiYWNrIG9uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc191cGRhdGVkX2V2ZW50X2NhbGxiYWNrXzsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIGJhc2U6OkV2ZW50Q2FsbGJhY2sgb25fY2FwdGlvbl9zZXR0aW5nc19jaGFuZ2VkX2V2ZW50X2NhbGxiYWNrXzsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX05FVFdPUktfRVZFTlRfVkVSU0lPTgogICBiYXNlOjpFdmVudENhbGxiYWNrIG9uX3dpbmRvd19vbl9vbmxpbmVfZXZlbnRfY2FsbGJhY2tfOwogICBiYXNlOjpFdmVudENhbGxiYWNrIG9uX3dpbmRvd19vbl9vZmZsaW5lX2V2ZW50X2NhbGxiYWNrXzsKQEAgLTE5NCw2ICsxODcsMTQgQEAKICAgdm9pZCBVcGRhdGVQZXJpb2RpY1N0YXRzKCk7CiAgIHZvaWQgRGlzcGF0Y2hFdmVudEludGVybmFsKGJhc2U6OkV2ZW50KiBldmVudCk7CiAKKyAgYmFzZTo6T3B0aW9uYWw8U2JUaW1lTW9ub3RvbmljPiBwcmVsb2FkX3RpbWVzdGFtcF87CisgIGJhc2U6Ok9wdGlvbmFsPFNiVGltZU1vbm90b25pYz4gc3RhcnRfdGltZXN0YW1wXzsKKworICAvLyBUaGVzZSByZXByZXNlbnQgdGhlICdkb2N1bWVudCB1bmxvYWQgdGltaW5nIGluZm8nIGZyb20gdGhlIHNwZWMgdG8gYmUKKyAgLy8gcGFzc2VkIHRvIHRoZSBuZXh0IGRvY3VtZW50LgorICBiYXNlOjpUaW1lVGlja3MgdW5sb2FkX2V2ZW50X3N0YXJ0X3RpbWVfOworICBiYXNlOjpUaW1lVGlja3MgdW5sb2FkX2V2ZW50X2VuZF90aW1lXzsKKwogICAvLyBUaGUgbWVzc2FnZSBsb29wIHRoYXQgd2lsbCBoYW5kbGUgVUkgZXZlbnRzLgogICBiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wXzsKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlci5neXAgYi9jb2JhbHQvYnJvd3Nlci9icm93c2VyLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA5MWMxNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdicm93c2VyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXBwbGljYXRpb24uY2MnLAotICAgICAgICAnYXBwbGljYXRpb24uaCcsCi0gICAgICAgICdicm93c2VyX21vZHVsZS5jYycsCi0gICAgICAgICdicm93c2VyX21vZHVsZS5oJywKLSAgICAgICAgJ2RldmljZV9hdXRoZW50aWNhdGlvbi5jYycsCi0gICAgICAgICdkZXZpY2VfYXV0aGVudGljYXRpb24uaCcsCi0gICAgICAgICdsaWZlY3ljbGVfb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvYXV0b19tZW0uY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtLmgnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3NldHRpbmdzLmNjJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbV9zZXR0aW5ncy5oJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9jYWxjdWxhdGlvbnMuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2NhbGN1bGF0aW9ucy5oJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9jaGVja2VyLmNjJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9jaGVja2VyLmgnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2NvbnN0YW50cy5oJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9zY2FsaW5nX2Z1bmN0aW9uLmNjJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9zY2FsaW5nX2Z1bmN0aW9uLmgnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL21lbW9yeV9zZXR0aW5ncy5jYycsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvbWVtb3J5X3NldHRpbmdzLmgnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL3ByZXR0eV9wcmludC5jYycsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvcHJldHR5X3ByaW50LmgnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL3RhYmxlX3ByaW50ZXIuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL3RhYmxlX3ByaW50ZXIuaCcsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvdGV4dHVyZV9kaW1lbnNpb25zLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9idWZmZXJlZF9maWxlX3dyaXRlci5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL2J1ZmZlcmVkX2ZpbGVfd3JpdGVyLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9jb21wcmVzc2VkX3RpbWVfc2VyaWVzX3Rvb2wuY2MnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9jb21wcmVzc2VkX3RpbWVfc2VyaWVzX3Rvb2wuaCcsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL2hpc3RvZ3JhbV90YWJsZV9jc3ZfYmFzZS5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvaW50ZXJuYWxfZnJhZ21lbnRhdGlvbl90b29sLmNjJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvaW50ZXJuYWxfZnJhZ21lbnRhdGlvbl90b29sLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9sZWFrX2ZpbmRlcl90b29sLmNjJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvbGVha19maW5kZXJfdG9vbC5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvbG9nX3dyaXRlcl90b29sLmNjJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvbG9nX3dyaXRlcl90b29sLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9tYWxsb2Nfc3RhdHNfdG9vbC5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL21hbGxvY19zdGF0c190b29sLmgnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9tYWxsb2NfbG9nZ2VyX3Rvb2wuY2MnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9tYWxsb2NfbG9nZ2VyX3Rvb2wuaCcsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL21lbW9yeV9zaXplX2Jpbm5lcl90b29sLmNjJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvbWVtb3J5X3NpemVfYmlubmVyX3Rvb2wuaCcsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3BhcmFtcy5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3BhcmFtcy5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvcHJpbnRfY3N2X3Rvb2wuY2MnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC9wcmludF9jc3ZfdG9vbC5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvcHJpbnRfdG9vbC5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3ByaW50X3Rvb2wuaCcsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3Rvb2xfaW1wbC5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3Rvb2xfaW1wbC5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvdG9vbF90aHJlYWQuY2MnLAotICAgICAgICAnbWVtb3J5X3RyYWNrZXIvdG9vbC90b29sX3RocmVhZC5oJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvdXRpbC5jYycsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3V0aWwuaCcsCi0gICAgICAgICdvbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5jYycsCi0gICAgICAgICdvbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5oJywKLSAgICAgICAgJ3JlbmRlcl90cmVlX2NvbWJpbmVyLmNjJywKLSAgICAgICAgJ3JlbmRlcl90cmVlX2NvbWJpbmVyLmgnLAotICAgICAgICAnc2NyZWVuX3Nob3Rfd3JpdGVyLmNjJywKLSAgICAgICAgJ3NjcmVlbl9zaG90X3dyaXRlci5oJywKLSAgICAgICAgJ3NwbGFzaF9zY3JlZW4uY2MnLAotICAgICAgICAnc3BsYXNoX3NjcmVlbi5oJywKLSAgICAgICAgJ3NwbGFzaF9zY3JlZW5fY2FjaGUuY2MnLAotICAgICAgICAnc3BsYXNoX3NjcmVlbl9jYWNoZS5oJywKLSAgICAgICAgJ3N1c3BlbmRfZnV6emVyLmNjJywKLSAgICAgICAgJ3N1c3BlbmRfZnV6emVyLmgnLAotICAgICAgICAnc3dpdGNoZXMuY2MnLAotICAgICAgICAnc3dpdGNoZXMuaCcsCi0gICAgICAgICdzeXN0ZW1fcGxhdGZvcm1fZXJyb3JfaGFuZGxlci5jYycsCi0gICAgICAgICdzeXN0ZW1fcGxhdGZvcm1fZXJyb3JfaGFuZGxlci5oJywKLSAgICAgICAgJ3VybF9oYW5kbGVyLmNjJywKLSAgICAgICAgJ3VybF9oYW5kbGVyLmgnLAotICAgICAgICAndXNlcl9hZ2VudF9wbGF0Zm9ybV9pbmZvLmNjJywKLSAgICAgICAgJ3VzZXJfYWdlbnRfcGxhdGZvcm1faW5mby5oJywKLSAgICAgICAgJ3VzZXJfYWdlbnRfc3RyaW5nLmNjJywKLSAgICAgICAgJ3VzZXJfYWdlbnRfc3RyaW5nLmgnLAotICAgICAgICAnd2ViX21vZHVsZS5jYycsCi0gICAgICAgICd3ZWJfbW9kdWxlLmgnLAotICAgICAgICAnd2ViX21vZHVsZV9zdGF0X3RyYWNrZXIuY2MnLAotICAgICAgICAnd2ViX21vZHVsZV9zdGF0X3RyYWNrZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9hY2NvdW50L2FjY291bnQuZ3lwOmFjY291bnQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2F1ZGlvL2F1ZGlvLmd5cDphdWRpbycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ3lwOmNvbmZpZ3VyYXRpb24nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXA6Y3NzX3BhcnNlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb21fcGFyc2VyL2RvbV9wYXJzZXIuZ3lwOmRvbV9wYXJzZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nLmd5cDp0ZXh0X2VuY29kaW5nJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9mZXRjaC9mZXRjaC5neXA6ZmV0Y2gnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2g1dmNjL2g1dmNjLmd5cDpoNXZjYycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvaW5wdXQvaW5wdXQuZ3lwOmlucHV0JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sYXlvdXQvbGF5b3V0Lmd5cDpsYXlvdXQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21hdGgvbWF0aC5neXA6bWF0aCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwOm1lZGlhJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmUuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhX3Nlc3Npb24vbWVkaWFfc2Vzc2lvbi5neXA6bWVkaWFfc2Vzc2lvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9vdmVybGF5X2luZm8vb3ZlcmxheV9pbmZvLmd5cDpvdmVybGF5X2luZm8nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyLmd5cDpyZW5kZXJlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9wbmdfdXRpbHMvcG5nX3V0aWxzLmd5cDpwbmdfdXRpbHMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXA6c3BlZWNoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zc28vc3NvLmd5cDpzc28nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N1YnRsZWNyeXB0by9zdWJ0bGVjcnlwdG8uZ3lwOnN1YnRsZWNyeXB0bycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cDpzeXN0ZW1fd2luZG93JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC90cmFjZV9ldmVudC90cmFjZV9ldmVudC5neXA6dHJhY2VfZXZlbnQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3VpX25hdmlnYXRpb24vdWlfbmF2aWdhdGlvbi5neXA6dWlfbmF2aWdhdGlvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlci5neXA6d2ViZHJpdmVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93ZWJzb2NrZXQvd2Vic29ja2V0Lmd5cDp3ZWJzb2NrZXQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3dvcmtlci93b3JrZXIuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3hoci94aHIuZ3lwOnhocicsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvbmIvbmIuZ3lwOm5iJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWkxOG4nLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgICAgJ2Jyb3dzZXJfYmluZGluZ3MuZ3lwOmJpbmRpbmdzJywKLSAgICAgICAgJzwoY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ3lwX3RhcmdldCknLAotICAgICAgXSwKLSAgICAgICMgVGhpcyB0YXJnZXQgZG9lc24ndCBnZW5lcmF0ZSBhbnkgaGVhZGVycywgYnV0IGl0IGV4cG9zZXMgZ2VuZXJhdGVkCi0gICAgICAjIGhlYWRlciBmaWxlcyAoZm9yIGlkbCBkaWN0aW9uYXJpZXMpIHRocm91Z2ggdGhpcyBtb2R1bGUncyBwdWJsaWMgaGVhZGVyCi0gICAgICAjIGZpbGVzLiBTbyBtYXJrIHRoaXMgdGFyZ2V0IGFzIGEgaGFyZCBkZXBlbmRlbmN5IHRvIGVuc3VyZSB0aGF0IGFueQotICAgICAgIyBkZXBlbmRlbnQgdGFyZ2V0cyB3YWl0IHVudGlsIHRoaXMgdGFyZ2V0IChhbmQgaXRzIGhhcmQgZGVwZW5kZW5jaWVzKSBhcmUKLSAgICAgICMgYnVpbHQuCi0gICAgICAjJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgIyBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzIGFyZSBwdXQgb24gdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRhcmdldHMgdGhhdCBkZXBlbmQKLSAgICAgICAgIyBvbiB0aGlzIG9uZS4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICMgRm9yIGNvYmFsdF9idWlsZF9pZC5oCi0gICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnbWF4X2NvYmFsdF9jcHVfdXNhZ2UgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbICdDT0JBTFRfTUFYX0NQVV9VU0FHRV9JTl9CWVRFUycgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnbWF4X2NvYmFsdF9ncHVfdXNhZ2UgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbICdDT0JBTFRfTUFYX0dQVV9VU0FHRV9JTl9CWVRFUycgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnZW5hYmxlX2Fib3V0X3NjaGVtZSA9PSAxJywgewotICAgICAgICAgICdkZWZpbmVzJzogWyAnRU5BQkxFX0FCT1VUX1NDSEVNRScgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnZW5hYmxlX2RlYnVnZ2VyID09IDEnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnZGVidWdfY29uc29sZS5jYycsCi0gICAgICAgICAgICAnZGVidWdfY29uc29sZS5oJywKLSAgICAgICAgICAgICdsaWZlY3ljbGVfY29uc29sZV9jb21tYW5kcy5jYycsCi0gICAgICAgICAgICAnbGlmZWN5Y2xlX2NvbnNvbGVfY29tbWFuZHMuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kZWJ1Zy9kZWJ1Zy5neXA6ZGVidWcnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3NiX2V2ZXJncmVlbiA9PSAxJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L3VwZGF0ZXIvdXBkYXRlci5neXA6dXBkYXRlcicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPEAoY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJyI8KGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX3NvdXJjZV9pZGxfZmlsZXMpIiE9IiIgb3IgIjwoY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXMpIiE9IiInLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1dFQkFQSV9FWFRFTlNJT05fREVGSU5FRCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYnJvd3Nlcl90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZGV2aWNlX2F1dGhlbnRpY2F0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3NldHRpbmdzX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL2NhbGN1bGF0aW9uc190ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9zZXR0aW5ncy9tZW1vcnlfc2V0dGluZ3NfdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvcHJldHR5X3ByaW50X3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X3NldHRpbmdzL3RhYmxlX3ByaW50ZXJfdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfc2V0dGluZ3MvdGVzdF9jb21tb24uaCcsCi0gICAgICAgICdtZW1vcnlfdHJhY2tlci90b29sL3Rvb2xfaW1wbF90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV90cmFja2VyL3Rvb2wvdXRpbF90ZXN0LmNjJywKLSAgICAgICAgJ3VzZXJfYWdlbnRfc3RyaW5nX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L25ldHdvcmsvbmV0d29yay5neXA6bmV0d29yaycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXA6c3BlZWNoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zdG9yYWdlL3N0b3JhZ2UuZ3lwOnN0b3JhZ2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnYnJvd3NlcicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYnJvd3Nlcl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdicm93c2VyX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnYnJvd3Nlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5ncy5neXAgYi9jb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxYWU4NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdiaW5kaW5ncycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2MuZ3lwOmg1dmNjJywKLSAgICAgICAgJy4uL3dlYmRyaXZlci93ZWJkcml2ZXIuZ3lwOndlYmRyaXZlcicsCi0gICAgICAgICMgVGhlIGdlbmVyYXRlZF9iaW5kaW5ncyB0YXJnZXQgd2lsbCBhZGQgYWxsIG5lY2Vzc2FyeSBzb3VyY2VzIHRvIHRoaXMKLSAgICAgICAgIyB0YXJnZXQuCi0gICAgICAgICdicm93c2VyX2JpbmRpbmdzX2dlbi5neXA6Z2VuZXJhdGVkX2JpbmRpbmdzJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cCBiL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3YzJkNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzX2dlbi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9iaW5kaW5ncy9iaW5kaW5ncy5neXBpJywKLSAgXSwKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIEJhc2UgZGlyZWN0b3J5IGludG8gd2hpY2ggZ2VuZXJhdGVkIHNvdXJjZXMgYW5kIGludGVybWVkaWF0ZSBmaWxlcyBzaG91bGQKLSAgICAjIGJlIGdlbmVyYXRlZC4KLSAgICAnYmluZGluZ3Nfb3V0cHV0X2Rpcic6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9iaW5kaW5ncy9icm93c2VyJywKLQotICAgICMgQmluZGluZ3MgZm9yIHRoZSBpbnRlcmZhY2VzIGluIHRoaXMgbGlzdCB3aWxsIGJlIGdlbmVyYXRlZCwgYW5kIHRoZXJlIG11c3QKLSAgICAjIGJlIGFuIGltcGxlbWVudGF0aW9uIGRlY2xhcmVkIGluIGEgaGVhZGVyIHRoYXQgbGl2ZXMgaW4gdGhlIHNhbWUKLSAgICAjIGRpcmVjdG9yeSBvZiBlYWNoIElETC4KLSAgICAnc291cmNlX2lkbF9maWxlcyc6IFsKLSAgICAgICAgJy4uL2F1ZGlvL2F1ZGlvX2J1ZmZlci5pZGwnLAotICAgICAgICAnLi4vYXVkaW8vYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlLmlkbCcsCi0gICAgICAgICcuLi9hdWRpby9hdWRpb19jb250ZXh0LmlkbCcsCi0gICAgICAgICcuLi9hdWRpby9hdWRpb19kZXN0aW5hdGlvbl9ub2RlLmlkbCcsCi0gICAgICAgICcuLi9hdWRpby9hdWRpb19ub2RlLmlkbCcsCi0KLSAgICAgICAgJy4uL2Nzc29tL2Nzcy5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vY3NzX2NvbmRpdGlvbl9ydWxlLmlkbCcsCi0gICAgICAgICcuLi9jc3NvbS9jc3NfZ3JvdXBpbmdfcnVsZS5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vY3NzX2ZvbnRfZmFjZV9ydWxlLmlkbCcsCi0gICAgICAgICcuLi9jc3NvbS9jc3NfbWVkaWFfcnVsZS5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vY3NzX2tleWZyYW1lX3J1bGUuaWRsJywKLSAgICAgICAgJy4uL2Nzc29tL2Nzc19rZXlmcmFtZXNfcnVsZS5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vY3NzX3J1bGUuaWRsJywKLSAgICAgICAgJy4uL2Nzc29tL2Nzc19ydWxlX2xpc3QuaWRsJywKLSAgICAgICAgJy4uL2Nzc29tL2Nzc19zdHlsZV9kZWNsYXJhdGlvbi5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vY3NzX3N0eWxlX3J1bGUuaWRsJywKLSAgICAgICAgJy4uL2Nzc29tL2Nzc19zdHlsZV9zaGVldC5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vbWVkaWFfbGlzdC5pZGwnLAotICAgICAgICAnLi4vY3Nzb20vc3R5bGVfc2hlZXQuaWRsJywKLSAgICAgICAgJy4uL2Nzc29tL3N0eWxlX3NoZWV0X2xpc3QuaWRsJywKLQotICAgICAgICAnLi4vZG9tL2Fib3J0X2NvbnRyb2xsZXIuaWRsJywKLSAgICAgICAgJy4uL2RvbS9hYm9ydF9zaWduYWwuaWRsJywKLSAgICAgICAgJy4uL2RvbS9hbmltYXRpb25fZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9hdHRyLmlkbCcsCi0gICAgICAgICcuLi9kb20vYXVkaW9fdHJhY2suaWRsJywKLSAgICAgICAgJy4uL2RvbS9hdWRpb190cmFja19saXN0LmlkbCcsCi0gICAgICAgICcuLi9kb20vYmxvYi5pZGwnLAotICAgICAgICAnLi4vZG9tL2NfdmFsX3ZpZXcuaWRsJywKLSAgICAgICAgJy4uL2RvbS9jYW1lcmFfM2QuaWRsJywKLSAgICAgICAgJy4uL2RvbS9jYXB0aW9ucy9zeXN0ZW1fY2FwdGlvbl9zZXR0aW5ncy5pZGwnLAotICAgICAgICAnLi4vZG9tL2NkYXRhX3NlY3Rpb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS9jaGFyYWN0ZXJfZGF0YS5pZGwnLAotICAgICAgICAnLi4vZG9tL2NvYmFsdF91YV9kYXRhX3ZhbHVlc19pbnRlcmZhY2UuaWRsJywKLSAgICAgICAgJy4uL2RvbS9jb21tZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vY3J5cHRvLmlkbCcsCi0gICAgICAgICcuLi9kb20vY3VzdG9tX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vZGV2aWNlX29yaWVudGF0aW9uX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9jdW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9kb2N1bWVudF90aW1lbGluZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvY3VtZW50X3R5cGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS9kb21fZXhjZXB0aW9uLmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9tX2ltcGxlbWVudGF0aW9uLmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9tX3BhcnNlci5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvbV9yZWN0LmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9tX3JlY3RfbGlzdC5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvbV9yZWN0X3JlYWRfb25seS5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvbV9zdHJpbmdfbWFwLmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9tX3Rva2VuX2xpc3QuaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vZW1lL21lZGlhX2VuY3J5cHRlZF9ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfbWVzc2FnZV9ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfc2Vzc2lvbi5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfc3RhdHVzX21hcC5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfc3lzdGVtX2FjY2Vzcy5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlzLmlkbCcsCi0gICAgICAgICcuLi9kb20vZXJyb3JfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2V2ZW50X2xpc3RlbmVyLmlkbCcsCi0gICAgICAgICcuLi9kb20vZXZlbnRfdGFyZ2V0LmlkbCcsCi0gICAgICAgICcuLi9kb20vZm9jdXNfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9oaXN0b3J5LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9hbmNob3JfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfYXVkaW9fZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfYm9keV9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9icl9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9jb2xsZWN0aW9uLmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9kaXZfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfaGVhZF9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9oZWFkaW5nX2VsZW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9odG1sX2h0bWxfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfaW1hZ2VfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfbGlua19lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9tZWRpYV9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9tZXRhX2VsZW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9odG1sX3BhcmFncmFwaF9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9zY3JpcHRfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2h0bWxfc3Bhbl9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9zdHlsZV9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF90aXRsZV9lbGVtZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF91bmtub3duX2VsZW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9odG1sX3ZpZGVvX2VsZW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9pbnB1dF9ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlci5pZGwnLAotICAgICAgICAnLi4vZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlcl9lbnRyeS5pZGwnLAotICAgICAgICAnLi4vZG9tL2tleWJvYXJkX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vbG9jYXRpb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS9sb3R0aWVfZnJhbWVfY3VzdG9tX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vbG90dGllX3BsYXllci5pZGwnLAotICAgICAgICAnLi4vZG9tL21lZGlhX2Vycm9yLmlkbCcsCi0gICAgICAgICcuLi9kb20vbWVkaWFfcXVlcnlfbGlzdC5pZGwnLAotICAgICAgICAnLi4vZG9tL21lZGlhX3NvdXJjZS5pZGwnLAotICAgICAgICAnLi4vZG9tL21lbW9yeV9pbmZvLmlkbCcsCi0gICAgICAgICcuLi9kb20vbWVzc2FnZV9ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL21pbWVfdHlwZV9hcnJheS5pZGwnLAotICAgICAgICAnLi4vZG9tL21vdXNlX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vbXV0YXRpb25fb2JzZXJ2ZXIuaWRsJywKLSAgICAgICAgJy4uL2RvbS9tdXRhdGlvbl9yZWNvcmQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9uYW1lZF9ub2RlX21hcC5pZGwnLAotICAgICAgICAnLi4vZG9tL25hdmlnYXRvci5pZGwnLAotICAgICAgICAnLi4vZG9tL25hdmlnYXRvcl91YV9kYXRhLmlkbCcsCi0gICAgICAgICcuLi9kb20vbm9kZS5pZGwnLAotICAgICAgICAnLi4vZG9tL25vZGVfbGlzdC5pZGwnLAotICAgICAgICAnLi4vZG9tL29uX2Vycm9yX2V2ZW50X2xpc3RlbmVyLmlkbCcsCi0gICAgICAgICcuLi9kb20vb25fc2NyZWVuX2tleWJvYXJkLmlkbCcsCi0gICAgICAgICcuLi9kb20vcGVyZm9ybWFuY2UuaWRsJywKLSAgICAgICAgJy4uL2RvbS9wZXJmb3JtYW5jZV9lbnRyeS5pZGwnLAotICAgICAgICAnLi4vZG9tL3BlcmZvcm1hbmNlX2xpZmVjeWNsZV90aW1pbmcuaWRsJywKLSAgICAgICAgJy4uL2RvbS9wZXJmb3JtYW5jZV9tYXJrLmlkbCcsCi0gICAgICAgICcuLi9kb20vcGVyZm9ybWFuY2VfbWVhc3VyZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3BlcmZvcm1hbmNlX29ic2VydmVyLmlkbCcsCi0gICAgICAgICcuLi9kb20vcGVyZm9ybWFuY2Vfb2JzZXJ2ZXJfZW50cnlfbGlzdC5pZGwnLAotICAgICAgICAnLi4vZG9tL3BlcmZvcm1hbmNlX3Jlc291cmNlX3RpbWluZy5pZGwnLAotICAgICAgICAnLi4vZG9tL3BlcmZvcm1hbmNlX3RpbWluZy5pZGwnLAotICAgICAgICAnLi4vZG9tL3BsdWdpbl9hcnJheS5pZGwnLAotICAgICAgICAnLi4vZG9tL3BvaW50ZXJfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9wcm9ncmVzc19ldmVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL3NjcmVlbi5pZGwnLAotICAgICAgICAnLi4vZG9tL3NjcmVlbnNob3QuaWRsJywKLSAgICAgICAgJy4uL2RvbS9zZWN1cml0eV9wb2xpY3lfdmlvbGF0aW9uX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vc291cmNlX2J1ZmZlci5pZGwnLAotICAgICAgICAnLi4vZG9tL3NvdXJjZV9idWZmZXJfbGlzdC5pZGwnLAotICAgICAgICAnLi4vZG9tL3N0b3JhZ2UuaWRsJywKLSAgICAgICAgJy4uL2RvbS9zdG9yYWdlX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vdGVzdF9ydW5uZXIuaWRsJywKLSAgICAgICAgJy4uL2RvbS90ZXh0LmlkbCcsCi0gICAgICAgICcuLi9kb20vdGltZV9yYW5nZXMuaWRsJywKLSAgICAgICAgJy4uL2RvbS90cmFja19kZWZhdWx0LmlkbCcsCi0gICAgICAgICcuLi9kb20vdHJhY2tfZGVmYXVsdF9saXN0LmlkbCcsCi0gICAgICAgICcuLi9kb20vdHJhY2tfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS90cmFuc2l0aW9uX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9kb20vdWlfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS91cmwuaWRsJywKLSAgICAgICAgJy4uL2RvbS92aWRlb19wbGF5YmFja19xdWFsaXR5LmlkbCcsCi0gICAgICAgICcuLi9kb20vdmlkZW9fdHJhY2suaWRsJywKLSAgICAgICAgJy4uL2RvbS92aWRlb190cmFja19saXN0LmlkbCcsCi0gICAgICAgICcuLi9kb20vd2hlZWxfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS93aW5kb3cuaWRsJywKLSAgICAgICAgJy4uL2RvbS94bWxfZG9jdW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS94bWxfc2VyaWFsaXplci5pZGwnLAotCi0gICAgICAgICcuLi9lbmNvZGluZy90ZXh0X2RlY29kZXIuaWRsJywKLSAgICAgICAgJy4uL2VuY29kaW5nL3RleHRfZW5jb2Rlci5pZGwnLAotCi0gICAgICAgICcuLi9mZXRjaC9mZXRjaF9pbnRlcm5hbC5pZGwnLAotCi0gICAgICAgICcuLi9oNXZjYy9kaWFsL2RpYWxfaHR0cF9yZXF1ZXN0LmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9kaWFsL2RpYWxfaHR0cF9yZXNwb25zZS5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvZGlhbC9kaWFsX3NlcnZlci5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2MuaWRsJywKLSAgICAgICAgJy4uL2g1dmNjL2g1dmNjX2FjY2Vzc2liaWxpdHkuaWRsJywKLSAgICAgICAgJy4uL2g1dmNjL2g1dmNjX2FjY291bnRfaW5mby5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2NfYWNjb3VudF9tYW5hZ2VyLmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19hdWRpb19jb25maWcuaWRsJywKLSAgICAgICAgJy4uL2g1dmNjL2g1dmNjX2F1ZGlvX2NvbmZpZ19hcnJheS5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19kZWVwX2xpbmtfZXZlbnRfdGFyZ2V0LmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19wbGF0Zm9ybV9zZXJ2aWNlLmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19ydW50aW1lLmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19ydW50aW1lX2V2ZW50X3RhcmdldC5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2Nfc2V0dGluZ3MuaWRsJywKLSAgICAgICAgJy4uL2g1dmNjL2g1dmNjX3Nzby5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2Nfc3RvcmFnZS5pZGwnLAotICAgICAgICAnLi4vaDV2Y2MvaDV2Y2Nfc2NyZWVuLmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19zeXN0ZW0uaWRsJywKLSAgICAgICAgJy4uL2g1dmNjL2g1dmNjX3RyYWNlX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY191cGRhdGVyLmlkbCcsCi0KLSAgICAgICAgJy4uL21lZGlhX2NhcHR1cmUvYmxvYl9ldmVudC5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2VfaW5mby5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2VzLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmlkbCcsCi0KLSAgICAgICAgJy4uL21lZGlhX3Nlc3Npb24vbWVkaWFfbWV0YWRhdGEuaWRsJywKLSAgICAgICAgJy4uL21lZGlhX3Nlc3Npb24vbWVkaWFfc2Vzc2lvbi5pZGwnLAotCi0gICAgICAgICcuLi9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX3RyYWNrLmlkbCcsCi0KLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb24uaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb25fYWx0ZXJuYXRpdmUuaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb25fZXJyb3IuaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb25fZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb25fcmVzdWx0LmlkbCcsCi0gICAgICAgICcuLi9zcGVlY2gvc3BlZWNoX3JlY29nbml0aW9uX3Jlc3VsdF9saXN0LmlkbCcsCi0KLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfc3ludGhlc2lzLmlkbCcsCi0gICAgICAgICcuLi9zcGVlY2gvc3BlZWNoX3N5bnRoZXNpc19lcnJvcl9ldmVudC5pZGwnLAotICAgICAgICAnLi4vc3BlZWNoL3NwZWVjaF9zeW50aGVzaXNfZXZlbnQuaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfc3ludGhlc2lzX3V0dGVyYW5jZS5pZGwnLAotICAgICAgICAnLi4vc3BlZWNoL3NwZWVjaF9zeW50aGVzaXNfdm9pY2UuaWRsJywKLQotICAgICAgICAnLi4vc3VidGxlY3J5cHRvL2NyeXB0b19rZXkuaWRsJywKLSAgICAgICAgJy4uL3N1YnRsZWNyeXB0by9zdWJ0bGVfY3J5cHRvLmlkbCcsCi0KLSAgICAgICAgJy4uL3dlYl9hbmltYXRpb25zL2FuaW1hdGFibGUuaWRsJywKLSAgICAgICAgJy4uL3dlYl9hbmltYXRpb25zL2FuaW1hdGlvbi5pZGwnLAotICAgICAgICAnLi4vd2ViX2FuaW1hdGlvbnMvYW5pbWF0aW9uX2VmZmVjdF9yZWFkX29ubHkuaWRsJywKLSAgICAgICAgJy4uL3dlYl9hbmltYXRpb25zL2FuaW1hdGlvbl9lZmZlY3RfdGltaW5nX3JlYWRfb25seS5pZGwnLAotICAgICAgICAnLi4vd2ViX2FuaW1hdGlvbnMvYW5pbWF0aW9uX3RpbWVsaW5lLmlkbCcsCi0gICAgICAgICcuLi93ZWJfYW5pbWF0aW9ucy9rZXlmcmFtZS5pZGwnLAotICAgICAgICAnLi4vd2ViX2FuaW1hdGlvbnMva2V5ZnJhbWVfZWZmZWN0X3JlYWRfb25seS5pZGwnLAotCi0gICAgICAgICcuLi93ZWJkcml2ZXIvc2NyaXB0X2V4ZWN1dG9yLmlkbCcsCi0gICAgICAgICcuLi93ZWJkcml2ZXIvc2NyaXB0X2V4ZWN1dG9yX3BhcmFtcy5pZGwnLAotICAgICAgICAnLi4vd2ViZHJpdmVyL3NjcmlwdF9leGVjdXRvcl9yZXN1bHQuaWRsJywKLQotICAgICAgICAnLi4vd2Vic29ja2V0L2Nsb3NlX2V2ZW50LmlkbCcsCi0gICAgICAgICcuLi93ZWJzb2NrZXQvd2ViX3NvY2tldC5pZGwnLAotCi0gICAgICAgICcuLi93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmlkbCcsCi0KLSAgICAgICAgJy4uL3hoci94bWxfaHR0cF9yZXF1ZXN0LmlkbCcsCi0gICAgICAgICcuLi94aHIveG1sX2h0dHBfcmVxdWVzdF9ldmVudF90YXJnZXQuaWRsJywKLSAgICAgICAgJy4uL3hoci94bWxfaHR0cF9yZXF1ZXN0X3VwbG9hZC5pZGwnLAotCi0gICAgICAgICc8QChjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzKScsCi0gICAgXSwKLQotICAgICMgSURMIGZpbGVzIHRoYXQgd2lsbCBlbmQgdXAgZ2VuZXJhdGluZyBhIC5oIHRoYXQgd2lsbCBiZSAjaW5jbHVkZWQgaW4KLSAgICAjIENvYmFsdCBkaXJlY3RseS4gSURMIGZpbGVzIGZvciBkaWN0aW9uYXJpZXMgYW5kIGVudW1zLgotICAgICdnZW5lcmF0ZWRfaGVhZGVyX2lkbF9maWxlcyc6IFsKLSAgICAgICAgJy4uL2F1ZGlvL2F1ZGlvX25vZGVfY2hhbm5lbF9jb3VudF9tb2RlLmlkbCcsCi0gICAgICAgICcuLi9hdWRpby9hdWRpb19ub2RlX2NoYW5uZWxfaW50ZXJwcmV0YXRpb24uaWRsJywKLSAgICAgICAgJy4uL2RlYnVnL2NvbnNvbGUvY29uc29sZV9jb21tYW5kLmlkbCcsCi0gICAgICAgICcuLi9kZWJ1Zy9jb25zb2xlL2RlYnVnX2NvbnNvbGVfbW9kZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2Jsb2JfcHJvcGVydHlfYmFnLmlkbCcsCi0gICAgICAgICcuLi9kb20vY2FwdGlvbnMvY2FwdGlvbl9jaGFyYWN0ZXJfZWRnZV9zdHlsZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2NhcHRpb25zL2NhcHRpb25fY29sb3IuaWRsJywKLSAgICAgICAgJy4uL2RvbS9jYXB0aW9ucy9jYXB0aW9uX2ZvbnRfZmFtaWx5LmlkbCcsCi0gICAgICAgICcuLi9kb20vY2FwdGlvbnMvY2FwdGlvbl9mb250X3NpemVfcGVyY2VudGFnZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2NhcHRpb25zL2NhcHRpb25fb3BhY2l0eV9wZXJjZW50YWdlLmlkbCcsCi0gICAgICAgICcuLi9kb20vY2FwdGlvbnMvY2FwdGlvbl9zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2NvYmFsdF91YV9kYXRhX3ZhbHVlcy5pZGwnLAotICAgICAgICAnLi4vZG9tL2N1c3RvbV9ldmVudF9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vZGV2aWNlX29yaWVudGF0aW9uX2V2ZW50X2luaXQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9kb2N1bWVudF9yZWFkeV9zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvbV9wYXJzZXJfc3VwcG9ydGVkX3R5cGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbWUvbWVkaWFfZW5jcnlwdGVkX2V2ZW50X2luaXQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbWUvbWVkaWFfa2V5X21lc3NhZ2VfZXZlbnRfaW5pdC5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfbWVzc2FnZV90eXBlLmlkbCcsCi0gICAgICAgICcuLi9kb20vZW1lL21lZGlhX2tleV9zZXNzaW9uX3R5cGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbWUvbWVkaWFfa2V5X3N0YXR1cy5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9tZWRpYV9rZXlfc3lzdGVtX2NvbmZpZ3VyYXRpb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbWUvbWVkaWFfa2V5X3N5c3RlbV9tZWRpYV9jYXBhYmlsaXR5LmlkbCcsCi0gICAgICAgICcuLi9kb20vZW1lL21lZGlhX2tleXNfcmVxdWlyZW1lbnQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9lcnJvcl9ldmVudF9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vZXZlbnRfaW5pdC5pZGwnLAotICAgICAgICAnLi4vZG9tL2V2ZW50X21vZGlmaWVyX2luaXQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9mb2N1c19ldmVudF9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vaW5wdXRfZXZlbnRfaW5pdC5pZGwnLAotICAgICAgICAnLi4vZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlcl9lbnRyeV9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vaW50ZXJzZWN0aW9uX29ic2VydmVyX2luaXQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9rZXlib2FyZF9ldmVudF9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vbG90dGllX2ZyYW1lX2N1c3RvbV9ldmVudF9kZXRhaWwuaWRsJywKLSAgICAgICAgJy4uL2RvbS9tZWRpYV9zb3VyY2VfZW5kX29mX3N0cmVhbV9lcnJvci5pZGwnLAotICAgICAgICAnLi4vZG9tL21lZGlhX3NvdXJjZV9yZWFkeV9zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vZG9tL21vdXNlX2V2ZW50X2luaXQuaWRsJywKLSAgICAgICAgJy4uL2RvbS9tdXRhdGlvbl9vYnNlcnZlcl9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX3VhX2JyYW5kX3ZlcnNpb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS9wZXJmb3JtYW5jZV9vYnNlcnZlcl9jYWxsYmFja19vcHRpb25zLmlkbCcsCi0gICAgICAgICcuLi9kb20vcGVyZm9ybWFuY2Vfb2JzZXJ2ZXJfaW5pdC5pZGwnLAotICAgICAgICAnLi4vZG9tL3BvaW50ZXJfZXZlbnRfaW5pdC5pZGwnLAotICAgICAgICAnLi4vZG9tL3NvdXJjZV9idWZmZXJfYXBwZW5kX21vZGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS90cmFja19kZWZhdWx0X3R5cGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS91YV9kYXRhX3ZhbHVlcy5pZGwnLAotICAgICAgICAnLi4vZG9tL3VhX2xvd19lbnRyb3B5X2pzb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS91aV9ldmVudF9pbml0LmlkbCcsCi0gICAgICAgICcuLi9kb20vdmlzaWJpbGl0eV9zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3doZWVsX2V2ZW50X2luaXQuaWRsJywKLSAgICAgICAgJy4uL2VuY29kaW5nL3RleHRfZGVjb2RlX29wdGlvbnMuaWRsJywKLSAgICAgICAgJy4uL2VuY29kaW5nL3RleHRfZGVjb2Rlcl9vcHRpb25zLmlkbCcsCi0gICAgICAgICcuLi9lbmNvZGluZy90ZXh0X2VuY29kZXJfZW5jb2RlX2ludG9fcmVzdWx0LmlkbCcsCi0gICAgICAgICcuLi9oNXZjYy9oNXZjY19jcmFzaF90eXBlLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9jYXB0dXJlL2Jsb2JfZXZlbnRfaW5pdC5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2Vfa2luZC5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfY2FwdHVyZS9tZWRpYV9yZWNvcmRlcl9vcHRpb25zLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9jYXB0dXJlL3JlY29yZGluZ19zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfc2Vzc2lvbi9tZWRpYV9pbWFnZS5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfc2Vzc2lvbi9tZWRpYV9tZXRhZGF0YV9pbml0LmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9zZXNzaW9uL21lZGlhX3Bvc2l0aW9uX3N0YXRlLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fYWN0aW9uLmlkbCcsCi0gICAgICAgICcuLi9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fYWN0aW9uX2RldGFpbHMuaWRsJywKLSAgICAgICAgJy4uL21lZGlhX3Nlc3Npb24vbWVkaWFfc2Vzc2lvbl9wbGF5YmFja19zdGF0ZS5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV9jb25zdHJhaW50cy5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfc3RyZWFtL21lZGlhX3RyYWNrX3NldHRpbmdzLmlkbCcsCi0gICAgICAgICcuLi9zcGVlY2gvc3BlZWNoX3JlY29nbml0aW9uX2Vycm9yX2NvZGUuaWRsJywKLSAgICAgICAgJy4uL3NwZWVjaC9zcGVlY2hfc3ludGhlc2lzX2Vycm9yX2NvZGUuaWRsJywKLSAgICAgICAgJy4uL3N1YnRsZWNyeXB0by9hZXNfY3RyX3BhcmFtcy5pZGwnLAotICAgICAgICAnLi4vc3VidGxlY3J5cHRvL2FsZ29yaXRobS5pZGwnLAotICAgICAgICAnLi4vc3VidGxlY3J5cHRvL2ltcG9ydF9rZXlfYWxnb3JpdGhtX3BhcmFtcy5pZGwnLAotICAgICAgICAnLi4vc3VidGxlY3J5cHRvL2tleV9mb3JtYXQuaWRsJywKLSAgICAgICAgJy4uL3N1YnRsZWNyeXB0by9rZXlfdHlwZS5pZGwnLAotICAgICAgICAnLi4vc3VidGxlY3J5cHRvL2tleV91c2FnZS5pZGwnLAotICAgICAgICAnLi4vd2ViX2FuaW1hdGlvbnMvYW5pbWF0aW9uX2ZpbGxfbW9kZS5pZGwnLAotICAgICAgICAnLi4vd2ViX2FuaW1hdGlvbnMvYW5pbWF0aW9uX3BsYXliYWNrX2RpcmVjdGlvbi5pZGwnLAotICAgICAgICAnLi4vd2Vic29ja2V0L2Nsb3NlX2V2ZW50X2luaXQuaWRsJywKLSAgICAgICAgJzxAKGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzKScsCi0gICAgXSwKLQotICAgICMgUGFydGlhbCBpbnRlcmZhY2VzIGFuZCB0aGUgcmlnaHQtc2lkZSBvZiAiaW1wbGVtZW50cyIuIEFsc28gaW5jbHVkZXMKLSAgICAjIGNhbGxiYWNrIGludGVyZmFjZXMuCi0gICAgIyBDb2RlIHdpbGwgbm90IGdldCBnZW5lcmF0ZWQgZm9yIHRoZXNlIGludGVyZmFjZXM7IHRoZXkgYXJlIHVzZWQgdG8gYWRkCi0gICAgIyBmdW5jdGlvbmFsaXR5IHRvIG90aGVyIGludGVyZmFjZXMuCi0gICAgJ2RlcGVuZGVuY3lfaWRsX2ZpbGVzJzogWwotICAgICAgICAnLi4vY3Nzb20vbGlua19zdHlsZS5pZGwnLAotCi0gICAgICAgICcuLi9kb20vYnVmZmVyX3NvdXJjZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2NhcHRpb25zL25hdmlnYXRvcl9zeXN0ZW1fY2FwdGlvbl9zZXR0aW5ncy5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvY3VtZW50X2NvYmFsdC5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvY3VtZW50X2Nzc29tLmlkbCcsCi0gICAgICAgICcuLi9kb20vZG9jdW1lbnRfaHRtbDUuaWRsJywKLSAgICAgICAgJy4uL2RvbS9kb2N1bWVudF9wYWdlX2xpZmVjeWNsZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvY3VtZW50X3BhZ2VfdmlzaWJpbGl0eS5pZGwnLAotICAgICAgICAnLi4vZG9tL2RvY3VtZW50X3dlYl9hbmltYXRpb25zX2FwaS5pZGwnLAotICAgICAgICAnLi4vZG9tL2VsZW1lbnRfY3NzX2lubGluZV9zdHlsZS5pZGwnLAotICAgICAgICAnLi4vZG9tL2VsZW1lbnRfY3Nzb21fdmlldy5pZGwnLAotICAgICAgICAnLi4vZG9tL2VsZW1lbnRfZG9tX3BhcnNpbmdfYW5kX3NlcmlhbGl6YXRpb24uaWRsJywKLSAgICAgICAgJy4uL2RvbS9lbGVtZW50X3BvaW50ZXJfZXZlbnRzLmlkbCcsCi0gICAgICAgICcuLi9kb20vZW1lL2h0bWxfbWVkaWFfZWxlbWVudC5pZGwnLAotICAgICAgICAnLi4vZG9tL2VtZS9uYXZpZ2F0b3IuaWRsJywKLSAgICAgICAgJy4uL2RvbS9nbG9iYWxfY3J5cHRvLmlkbCcsCi0gICAgICAgICcuLi9kb20vZ2xvYmFsX2V2ZW50X2hhbmRsZXJzLmlkbCcsCi0gICAgICAgICcuLi9kb20vaHRtbF9lbGVtZW50X2Nzc29tX3ZpZXcuaWRsJywKLSAgICAgICAgJy4uL2RvbS9tb3VzZV9ldmVudF9jc3NvbV92aWV3LmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX2lkLmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX2xhbmd1YWdlLmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX2xpY2Vuc2VzLmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX29ubGluZS5pZGwnLAotICAgICAgICAnLi4vZG9tL25hdmlnYXRvcl9wbHVnaW5zLmlkbCcsCi0gICAgICAgICcuLi9kb20vbmF2aWdhdG9yX3N0b3JhZ2VfdXRpbHMuaWRsJywKLSAgICAgICAgJy4uL2RvbS9uYXZpZ2F0b3JfdWEuaWRsJywKLSAgICAgICAgJy4uL2RvbS9ub25fZG9jdW1lbnRfdHlwZV9jaGlsZF9ub2RlLmlkbCcsCi0gICAgICAgICcuLi9kb20vbm9uX2VsZW1lbnRfcGFyZW50X25vZGUuaWRsJywKLSAgICAgICAgJy4uL2RvbS9wYXJlbnRfbm9kZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3BlcmZvcm1hbmNlX2VudHJ5X2xpc3QuaWRsJywKLSAgICAgICAgJy4uL2RvbS9wZXJmb3JtYW5jZV9oaWdoX3Jlc29sdXRpb25fdGltZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3NwZWVjaF9zeW50aGVzaXNfZ2V0dGVyLmlkbCcsCi0gICAgICAgICcuLi9kb20vdXJsX21zZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3VybF91dGlscy5pZGwnLAotICAgICAgICAnLi4vZG9tL3dpbmRvd19hbmltYXRpb25fdGltaW5nLmlkbCcsCi0gICAgICAgICcuLi9kb20vd2luZG93X2Nzc29tLmlkbCcsCi0gICAgICAgICcuLi9kb20vd2luZG93X2Nzc29tX3ZpZXcuaWRsJywKLSAgICAgICAgJy4uL2RvbS93aW5kb3dfZXZlbnRfaGFuZGxlcnMuaWRsJywKLSAgICAgICAgJy4uL2RvbS93aW5kb3dfbG9jYWxfc3RvcmFnZS5pZGwnLAotICAgICAgICAnLi4vZG9tL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmQuaWRsJywKLSAgICAgICAgJy4uL2RvbS93aW5kb3dfcGVyZm9ybWFuY2UuaWRsJywKLSAgICAgICAgJy4uL2RvbS93aW5kb3dfc2Vzc2lvbl9zdG9yYWdlLmlkbCcsCi0gICAgICAgICcuLi9kb20vd2luZG93X3RpbWVycy5pZGwnLAotICAgICAgICAnLi4vbWVkaWFfY2FwdHVyZS9uYXZpZ2F0b3IuaWRsJywKLSAgICAgICAgJy4uL21lZGlhX3Nlc3Npb24vbmF2aWdhdG9yX21lZGlhX3Nlc3Npb24uaWRsJywKLSAgICAgICAgJy4uL3dvcmtlci9uYXZpZ2F0b3IuaWRsJywKLSAgICBdLAotCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2VuYWJsZV9kZWJ1Z2dlcj09MScsIHsKLSAgICAgICAgJ3NvdXJjZV9pZGxfZmlsZXMnOiBbCi0gICAgICAgICAgICAnLi4vZGVidWcvYmFja2VuZC9jc3NfYWdlbnQuaWRsJywKLSAgICAgICAgICAgICcuLi9kZWJ1Zy9iYWNrZW5kL2RlYnVnX2JhY2tlbmQuaWRsJywKLSAgICAgICAgICAgICcuLi9kZWJ1Zy9jb25zb2xlL2RlYnVnX2h1Yi5pZGwnLAotICAgICAgICAgICAgJy4uL2RlYnVnL2NvbnNvbGUvZGVidWdnZXJfZXZlbnRfdGFyZ2V0LmlkbCcsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9tb2R1bGUuY2MgYi9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5jYwppbmRleCBmYWYyM2NmLi43NWUzMzUxIDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5jYworKysgYi9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5jYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgImNvYmFsdC9icm93c2VyL29uX3NjcmVlbl9rZXlib2FyZF9zdGFyYm9hcmRfYnJpZGdlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvc2NyZWVuX3Nob3Rfd3JpdGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvc3dpdGNoZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvYnJvd3Nlci93ZWJhcGlfZXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9jc3NvbS92aWV3cG9ydF9zaXplLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9jc3BfZGVsZWdhdGVfZmFjdG9yeS5oIgpAQCAtMTk3LDE0ICsxOTYsNiBAQAogCiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OldyYXBwYWJsZT4gQ3JlYXRlRXh0ZW5zaW9uSW50ZXJmYWNlKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8ZG9tOjpXaW5kb3c+JiB3aW5kb3csCi0gICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudCogZ2xvYmFsX2Vudmlyb25tZW50KSB7Ci0gIHJldHVybiBDcmVhdGVXZWJBUElFeHRlbnNpb25PYmplY3Qod2luZG93LCBnbG9iYWxfZW52aXJvbm1lbnQpOwotfQotI2VuZGlmCi0KIHJlbmRlcmVyOjpSZW5kZXJlck1vZHVsZTo6T3B0aW9ucyBSZW5kZXJlck1vZHVsZVdpdGhDYW1lcmFPcHRpb25zKAogICAgIHJlbmRlcmVyOjpSZW5kZXJlck1vZHVsZTo6T3B0aW9ucyBvcHRpb25zLAogICAgIHNjb3BlZF9yZWZwdHI8aW5wdXQ6OkNhbWVyYTNEPiBjYW1lcmFfM2QpIHsKQEAgLTI0OSwxNSArMjQwLDEyIEBACiAgICAgICB1cGRhdGVyX21vZHVsZV8odXBkYXRlcl9tb2R1bGUpLAogI2VuZGlmCiAgICAgICBzcGxhc2hfc2NyZWVuX2NhY2hlXyhuZXcgU3BsYXNoU2NyZWVuQ2FjaGUoKSksCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIG9uX3NjcmVlbl9rZXlib2FyZF9icmlkZ2VfKAogICAgICAgICAgIE9uU2NyZWVuS2V5Ym9hcmRTdGFyYm9hcmRCcmlkZ2U6OklzU3VwcG9ydGVkKCkgJiYKICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZW5hYmxlX29uX3NjcmVlbl9rZXlib2FyZAogICAgICAgICAgICAgICA/IG5ldyBPblNjcmVlbktleWJvYXJkU3RhcmJvYXJkQnJpZGdlKGJhc2U6OkJpbmQoCiAgICAgICAgICAgICAgICAgICAgICZCcm93c2VyTW9kdWxlOjpHZXRTYldpbmRvdywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpCiAgICAgICAgICAgICAgIDogTlVMTCksCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAgICAgd2ViX21vZHVsZV9sb2FkZWRfKGJhc2U6OldhaXRhYmxlRXZlbnQ6OlJlc2V0UG9saWN5OjpNQU5VQUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6SW5pdGlhbFN0YXRlOjpOT1RfU0lHTkFMRUQpLAogICAgICAgd2ViX21vZHVsZV9jcmVhdGVkX2NhbGxiYWNrXyhvcHRpb25zXy53ZWJfbW9kdWxlX2NyZWF0ZWRfY2FsbGJhY2spLApAQCAtMzA2LDcgKzI5NCw4IEBACiAgICAgICBtYWluX3dlYl9tb2R1bGVfZ2VuZXJhdGlvbl8oMCksCiAgICAgICBuZXh0X3RpbWVsaW5lX2lkXygxKSwKICAgICAgIGN1cnJlbnRfc3BsYXNoX3NjcmVlbl90aW1lbGluZV9pZF8oLTEpLAotICAgICAgY3VycmVudF9tYWluX3dlYl9tb2R1bGVfdGltZWxpbmVfaWRfKC0xKSB7CisgICAgICBjdXJyZW50X21haW5fd2ViX21vZHVsZV90aW1lbGluZV9pZF8oLTEpLAorICAgICAgc2VydmljZV93b3JrZXJfcmVnaXN0cnlfKG5ldHdvcmtfbW9kdWxlKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6OkJyb3dzZXJNb2R1bGUoKSIpOwogCiAgIC8vIEFwcGx5IHBsYXRmb3JtIG1lbW9yeSBzZXR0aW5nIGFkanVzdG1lbnRzIGFuZCBkZWZhdWx0cy4KQEAgLTM2MCw5ICszNDksMTEgQEAKICAgfQogCiAgIC8vIFNldHVwIG91ciBtYWluIHdlYiBtb2R1bGUgdG8gaGF2ZSB0aGUgSDVWQ0MgQVBJIGluamVjdGVkIGludG8gaXQuCi0gIERDSEVDSyghQ29udGFpbnNLZXkob3B0aW9uc18ud2ViX21vZHVsZV9vcHRpb25zLmluamVjdGVkX3dpbmRvd19hdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICJoNXZjYyIpKTsKLSAgb3B0aW9uc18ud2ViX21vZHVsZV9vcHRpb25zLmluamVjdGVkX3dpbmRvd19hdHRyaWJ1dGVzWyJoNXZjYyJdID0KKyAgRENIRUNLKCFDb250YWluc0tleSgKKyAgICAgIG9wdGlvbnNfLndlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucy5pbmplY3RlZF9nbG9iYWxfb2JqZWN0X2F0dHJpYnV0ZXMsCisgICAgICAiaDV2Y2MiKSk7CisgIG9wdGlvbnNfLndlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucworICAgICAgLmluamVjdGVkX2dsb2JhbF9vYmplY3RfYXR0cmlidXRlc1siaDV2Y2MiXSA9CiAgICAgICBiYXNlOjpCaW5kKCZCcm93c2VyTW9kdWxlOjpDcmVhdGVINXZjYywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSk7CiAKICAgaWYgKGNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKHN3aXRjaGVzOjprRGlzYWJsZVRpbWVyUmVzb2x1dGlvbkxpbWl0KSkgewpAQCAtMzcyLDIxICszNjMsNiBAQAogICBvcHRpb25zXy53ZWJfbW9kdWxlX29wdGlvbnMuZW5hYmxlX2lubGluZV9zY3JpcHRfd2FybmluZ3MgPQogICAgICAgIWNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKHN3aXRjaGVzOjprU2lsZW5jZUlubGluZVNjcmlwdFdhcm5pbmdzKTsKIAotI2lmIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0gIG9wdGlvbnNfLndlYl9tb2R1bGVfb3B0aW9ucy5lbmFibGVfcGFydGlhbF9sYXlvdXQgPQotICAgICAgIWNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKHN3aXRjaGVzOjprRGlzYWJsZVBhcnRpYWxMYXlvdXQpOwotI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9QQVJUSUFMX0xBWU9VVF9DT05UUk9MKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotICBiYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gZXh0ZW5zaW9uX29iamVjdF9uYW1lID0KLSAgICAgIEdldFdlYkFQSUV4dGVuc2lvbk9iamVjdFByb3BlcnR5TmFtZSgpOwotICBpZiAoZXh0ZW5zaW9uX29iamVjdF9uYW1lKSB7Ci0gICAgb3B0aW9uc18ud2ViX21vZHVsZV9vcHRpb25zCi0gICAgICAgIC5pbmplY3RlZF93aW5kb3dfYXR0cmlidXRlc1sqZXh0ZW5zaW9uX29iamVjdF9uYW1lXSA9Ci0gICAgICAgIGJhc2U6OkJpbmQoJkNyZWF0ZUV4dGVuc2lvbkludGVyZmFjZSk7Ci0gIH0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpICYmIGRlZmluZWQoRU5BQkxFX0RFQlVHX0NPTU1BTkRfTElORV9TV0lUQ0hFUykKICAgaWYgKGNvbW1hbmRfbGluZS0+SGFzU3dpdGNoKHN3aXRjaGVzOjprSW5wdXRGdXp6ZXIpKSB7CiAgICAgT25GdXp6ZXJUb2dnbGUoc3RkOjpzdHJpbmcoKSk7CkBAIC01MzMsMTAgKzUwOSw4IEBACiAgIHBlbmRpbmdfbmF2aWdhdGVfdXJsXyA9IEdVUkw6OkVtcHR5R1VSTCgpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCi0gIC8vIFNhdmUgdGhlIGRlYnVnZ2VyIHN0YXRlIHRvIGJlIHJlc3RvcmVkIGluIHRoZSBuZXcgV2ViTW9kdWxlLgotICBzdGQ6OnVuaXF1ZV9wdHI8ZGVidWc6OmJhY2tlbmQ6OkRlYnVnZ2VyU3RhdGU+IGRlYnVnZ2VyX3N0YXRlOwogICBpZiAod2ViX21vZHVsZV8pIHsKLSAgICBkZWJ1Z2dlcl9zdGF0ZSA9IHdlYl9tb2R1bGVfLT5GcmVlemVEZWJ1Z2dlcigpOworICAgIHdlYl9tb2R1bGVfLT5GcmVlemVEZWJ1Z2dlcigmZGVidWdnZXJfc3RhdGVfKTsKICAgfQogI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKIApAQCAtNjEyLDEwICs1ODYsNiBAQAogICAgIG9wdGlvbnMuY2FtZXJhXzNkID0gaW5wdXRfZGV2aWNlX21hbmFnZXJfLT5jYW1lcmFfM2QoKTsKICAgfQogCi0gIC8vIE1ha2Ugc3VyZSB0aGF0IGF1dG9tZW0gaGFzIGJlZW4gcnVuIGJlZm9yZSBjcmVhdGluZyB0aGUgV2ViTW9kdWxlLCBzbyB0aGF0Ci0gIC8vIHdlIHVzZSBwcm9wZXJseSBjb25maWd1cmVkIG9wdGlvbnMgZm9yIGFsbCBwYXJhbWV0ZXJzLgotICBEQ0hFQ0soYXV0b19tZW1fKTsKLQogICBvcHRpb25zLnByb3ZpZGVfc2NyZWVuc2hvdF9mdW5jdGlvbiA9CiAgICAgICBiYXNlOjpCaW5kKCZTY3JlZW5TaG90V3JpdGVyOjpSZXF1ZXN0U2NyZWVuc2hvdFRvTWVtb3J5VW5lbmNvZGVkLAogICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHNjcmVlbl9zaG90X3dyaXRlcl8uZ2V0KCkpKTsKQEAgLTYzMiwxMyArNjAyLDE1IEBACiAgICAgICAgICh3YWl0X2Zvcl9nZW5lcmF0aW9uID09IG1haW5fd2ViX21vZHVsZV9nZW5lcmF0aW9uXyk7CiAgIH0KIAotICBvcHRpb25zLmRlYnVnZ2VyX3N0YXRlID0gZGVidWdnZXJfc3RhdGUuZ2V0KCk7CisgIG9wdGlvbnMuZGVidWdnZXJfc3RhdGUgPSBkZWJ1Z2dlcl9zdGF0ZV8uZ2V0KCk7CiAjZW5kaWYgIC8vIEVOQUJMRV9ERUJVR0dFUgogCiAgIC8vIFBhc3MgZG93biB0aGlzIGNhbGxiYWNrIGZyb20gdG8gV2ViIG1vZHVsZS4KICAgb3B0aW9ucy5tYXliZV9mcmVlemVfY2FsbGJhY2sgPQogICAgICAgYmFzZTo6QmluZCgmQnJvd3Nlck1vZHVsZTo6T25NYXliZUZyZWV6ZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSk7CiAKKyAgb3B0aW9ucy53ZWJfb3B0aW9ucy5uZXR3b3JrX21vZHVsZSA9IG5ldHdvcmtfbW9kdWxlXzsKKwogICB3ZWJfbW9kdWxlXy5yZXNldChuZXcgV2ViTW9kdWxlKAogICAgICAgdXJsLCBhcHBsaWNhdGlvbl9zdGF0ZV8sCiAgICAgICBiYXNlOjpCaW5kKCZCcm93c2VyTW9kdWxlOjpRdWV1ZU9uUmVuZGVyVHJlZVByb2R1Y2VkLApAQCAtNjQ2LDEzICs2MTgsMTAgQEAKICAgICAgIGJhc2U6OkJpbmQoJkJyb3dzZXJNb2R1bGU6Ok9uRXJyb3IsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAogICAgICAgYmFzZTo6QmluZCgmQnJvd3Nlck1vZHVsZTo6T25XaW5kb3dDbG9zZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCiAgICAgICBiYXNlOjpCaW5kKCZCcm93c2VyTW9kdWxlOjpPbldpbmRvd01pbmltaXplLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIGNhbl9wbGF5X3R5cGVfaGFuZGxlcl8uZ2V0KCksIG1lZGlhX21vZHVsZV8uZ2V0KCksIG5ldHdvcmtfbW9kdWxlXywKLSAgICAgIHZpZXdwb3J0X3NpemUsIEdldFJlc291cmNlUHJvdmlkZXIoKSwga0xheW91dE1heFJlZnJlc2hGcmVxdWVuY3lJbkh6LAotICAgICAgb3B0aW9ucykpOworICAgICAgY2FuX3BsYXlfdHlwZV9oYW5kbGVyXy5nZXQoKSwgbWVkaWFfbW9kdWxlXy5nZXQoKSwgdmlld3BvcnRfc2l6ZSwKKyAgICAgIEdldFJlc291cmNlUHJvdmlkZXIoKSwga0xheW91dE1heFJlZnJlc2hGcmVxdWVuY3lJbkh6LAorICAgICAgc2VydmljZV93b3JrZXJfcmVnaXN0cnlfLnNlcnZpY2Vfd29ya2VyX2pvYnMoKSwgb3B0aW9ucykpOwogICBsaWZlY3ljbGVfb2JzZXJ2ZXJzXy5BZGRPYnNlcnZlcih3ZWJfbW9kdWxlXy5nZXQoKSk7Ci0gIGlmICghd2ViX21vZHVsZV9jcmVhdGVkX2NhbGxiYWNrXy5pc19udWxsKCkpIHsKLSAgICB3ZWJfbW9kdWxlX2NyZWF0ZWRfY2FsbGJhY2tfLlJ1bigpOwotICB9CiAKICAgaWYgKHN5c3RlbV93aW5kb3dfKSB7CiAgICAgd2ViX21vZHVsZV8tPkdldFVpTmF2Um9vdCgpLT5TZXRDb250YWluZXJXaW5kb3coCkBAIC02NjYsOCArNjM1LDcgQEAKICAgRENIRUNLKHdlYl9tb2R1bGVfKTsKICAgd2ViX21vZHVsZV8tPkV4ZWN1dGVKYXZhc2NyaXB0KAogICAgICAgImxvY2F0aW9uLnJlbG9hZCgpOyIsCi0gICAgICBiYXNlOjpTb3VyY2VMb2NhdGlvbigiW29iamVjdCBCcm93c2VyTW9kdWxlXSIsIDEsIDEpLAotICAgICAgTlVMTCAvKiBvdXRwdXQ6IHN1Y2NlZWRlZCAqLyk7CisgICAgICBiYXNlOjpTb3VyY2VMb2NhdGlvbigiW29iamVjdCBCcm93c2VyTW9kdWxlXSIsIDEsIDEpKTsKIH0KIAogI2lmIFNCX0hBUyhDT1JFX0RVTVBfSEFORExFUl9TVVBQT1JUKQpAQCAtNzIxLDggKzY4OSw4IEBACiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6OlJlcXVlc3RTY3JlZW5zaG90VG9GaWxlKCkiKTsKICAgRENIRUNLKHNjcmVlbl9zaG90X3dyaXRlcl8pOwogCi0gIHNjb3BlZF9yZWZwdHI8cmVuZGVyX3RyZWU6Ok5vZGU+IHJlbmRlcl90cmVlID0KLSAgICAgIHdlYl9tb2R1bGVfLT5Eb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZSgpOworICBzY29wZWRfcmVmcHRyPHJlbmRlcl90cmVlOjpOb2RlPiByZW5kZXJfdHJlZTsKKyAgd2ViX21vZHVsZV8tPkRvU3luY2hyb25vdXNMYXlvdXRBbmRHZXRSZW5kZXJUcmVlKCZyZW5kZXJfdHJlZSk7CiAgIGlmICghcmVuZGVyX3RyZWUpIHsKICAgICBMT0coV0FSTklORykgPDwgIlVuYWJsZSB0byBnZXQgYW5pbWF0ZWQgcmVuZGVyIHRyZWUiOwogICAgIHJldHVybjsKQEAgLTczOSw4ICs3MDcsOCBAQAogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsICJCcm93c2VyTW9kdWxlOjpSZXF1ZXN0U2NyZWVuc2hvdFRvTWVtb3J5KCkiKTsKICAgRENIRUNLKHNjcmVlbl9zaG90X3dyaXRlcl8pOwogCi0gIHNjb3BlZF9yZWZwdHI8cmVuZGVyX3RyZWU6Ok5vZGU+IHJlbmRlcl90cmVlID0KLSAgICAgIHdlYl9tb2R1bGVfLT5Eb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZSgpOworICBzY29wZWRfcmVmcHRyPHJlbmRlcl90cmVlOjpOb2RlPiByZW5kZXJfdHJlZTsKKyAgd2ViX21vZHVsZV8tPkRvU3luY2hyb25vdXNMYXlvdXRBbmRHZXRSZW5kZXJUcmVlKCZyZW5kZXJfdHJlZSk7CiAgIGlmICghcmVuZGVyX3RyZWUpIHsKICAgICBMT0coV0FSTklORykgPDwgIlVuYWJsZSB0byBnZXQgYW5pbWF0ZWQgcmVuZGVyIHRyZWUiOwogICAgIHJldHVybjsKQEAgLTk0Niw3ICs5MTQsNiBAQAogICByZXR1cm47CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBCcm93c2VyTW9kdWxlOjpPbk9uU2NyZWVuS2V5Ym9hcmRTaG93bigKICAgICBjb25zdCBiYXNlOjpPblNjcmVlbktleWJvYXJkU2hvd25FdmVudCogZXZlbnQpIHsKICAgRENIRUNLX0VRKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIHNlbGZfbWVzc2FnZV9sb29wXyk7CkBAIC05OTUsMTcgKzk2MiwxMyBAQAogICAgIHdlYl9tb2R1bGVfLT5JbmplY3RPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNVcGRhdGVkRXZlbnQoZXZlbnQtPnRpY2tldCgpKTsKICAgfQogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogdm9pZCBCcm93c2VyTW9kdWxlOjpPbkNhcHRpb25TZXR0aW5nc0NoYW5nZWQoCiAgICAgY29uc3QgYmFzZTo6QWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudCogZXZlbnQpIHsKICAgaWYgKHdlYl9tb2R1bGVfKSB7CiAgICAgd2ViX21vZHVsZV8tPkluamVjdENhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudCgpOwogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIAogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiB2b2lkIEJyb3dzZXJNb2R1bGU6Ok9uRGF0ZVRpbWVDb25maWd1cmF0aW9uQ2hhbmdlZCgKQEAgLTExMDQsNyArMTA2Nyw2IEBACiAKICNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBCcm93c2VyTW9kdWxlOjpPbk9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50UHJvZHVjZWQoCiAgICAgYmFzZTo6VG9rZW4gdHlwZSwgY29uc3QgZG9tOjpJbnB1dEV2ZW50SW5pdCYgZXZlbnQpIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLApAQCAtMTEyNSw4ICsxMDg3LDYgQEAKIAogICBJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudFRvTWFpbldlYk1vZHVsZSh0eXBlLCBldmVudCk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKIHZvaWQgQnJvd3Nlck1vZHVsZTo6T25LZXlFdmVudFByb2R1Y2VkKGJhc2U6OlRva2VuIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OktleWJvYXJkRXZlbnRJbml0JiBldmVudCkgewpAQCAtMTIxMyw3ICsxMTczLDYgQEAKICAgd2ViX21vZHVsZV8tPkluamVjdEtleWJvYXJkRXZlbnQodHlwZSwgZXZlbnQpOwogfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIHZvaWQgQnJvd3Nlck1vZHVsZTo6SW5qZWN0T25TY3JlZW5LZXlib2FyZElucHV0RXZlbnRUb01haW5XZWJNb2R1bGUoCiAgICAgYmFzZTo6VG9rZW4gdHlwZSwgY29uc3QgZG9tOjpJbnB1dEV2ZW50SW5pdCYgZXZlbnQpIHsKICAgVFJBQ0VfRVZFTlQwKApAQCAtMTIzMSw4ICsxMTkwLDYgQEAKICAgRENIRUNLKHdlYl9tb2R1bGVfKTsKICAgd2ViX21vZHVsZV8tPkluamVjdE9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50KHR5cGUsIGV2ZW50KTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIAogdm9pZCBCcm93c2VyTW9kdWxlOjpPbkVycm9yKGNvbnN0IEdVUkwmIHVybCwgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6Ok9uRXJyb3IoKSIpOwpAQCAtMTQzNCw3ICsxMzkxLDcgQEAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8d2ViZHJpdmVyOjpXaW5kb3dEcml2ZXI+KiBvdXRfd2luZG93X2RyaXZlcikgewogICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgc2VsZl9tZXNzYWdlX2xvb3BfKTsKICAgRENIRUNLKHdlYl9tb2R1bGVfKTsKLSAgKm91dF93aW5kb3dfZHJpdmVyID0gd2ViX21vZHVsZV8tPkNyZWF0ZVdpbmRvd0RyaXZlcih3aW5kb3dfaWQpOworICB3ZWJfbW9kdWxlXy0+Q3JlYXRlV2luZG93RHJpdmVyKHdpbmRvd19pZCwgb3V0X3dpbmRvd19kcml2ZXIpOwogfQogI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9XRUJEUklWRVIpCiAKQEAgLTE0NDIsNyArMTM5OSw3IEBACiBzdGQ6OnVuaXF1ZV9wdHI8ZGVidWc6OkRlYnVnQ2xpZW50PiBCcm93c2VyTW9kdWxlOjpDcmVhdGVEZWJ1Z0NsaWVudCgKICAgICBkZWJ1Zzo6RGVidWdDbGllbnQ6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkgewogICAvLyBSZXBvc3QgdG8gb3VyIG1lc3NhZ2UgbG9vcCB0byBlbnN1cmUgc3luY2hyb25vdXMgYWNjZXNzIHRvIHx3ZWJfbW9kdWxlX3wuCi0gIGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z0Rpc3BhdGNoZXIqIGRlYnVnX2Rpc3BhdGNoZXIgPSBOVUxMOworICBkZWJ1Zzo6YmFja2VuZDo6RGVidWdEaXNwYXRjaGVyKiBkZWJ1Z19kaXNwYXRjaGVyID0gbnVsbHB0cjsKICAgc2VsZl9tZXNzYWdlX2xvb3BfLT50YXNrX3J1bm5lcigpLT5Qb3N0QmxvY2tpbmdUYXNrKAogICAgICAgRlJPTV9IRVJFLAogICAgICAgYmFzZTo6QmluZCgmQnJvd3Nlck1vZHVsZTo6R2V0RGVidWdEaXNwYXRjaGVySW50ZXJuYWwsCkBAIC0xNDU2LDcgKzE0MTMsNyBAQAogICAgIGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z0Rpc3BhdGNoZXIqKiBvdXRfZGVidWdfZGlzcGF0Y2hlcikgewogICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgc2VsZl9tZXNzYWdlX2xvb3BfKTsKICAgRENIRUNLKHdlYl9tb2R1bGVfKTsKLSAgKm91dF9kZWJ1Z19kaXNwYXRjaGVyID0gd2ViX21vZHVsZV8tPkdldERlYnVnRGlzcGF0Y2hlcigpOworICB3ZWJfbW9kdWxlXy0+R2V0RGVidWdEaXNwYXRjaGVyKG91dF9kZWJ1Z19kaXNwYXRjaGVyKTsKIH0KICNlbmRpZiAgLy8gRU5BQkxFX0RFQlVHR0VSCiAKQEAgLTE0ODEsMTQgKzE0MzgsNiBAQAogICBDb25jZWFsSW50ZXJuYWwodGltZXN0YW1wKTsKIH0KIAotdm9pZCBCcm93c2VyTW9kdWxlOjpGb2N1cyhTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7Ci0gIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6OkZvY3VzKCkiKTsKLSAgRENIRUNLX0VRKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIHNlbGZfbWVzc2FnZV9sb29wXyk7Ci0gIERDSEVDSyhhcHBsaWNhdGlvbl9zdGF0ZV8gPT0gYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVCbHVycmVkKTsKLSAgRk9SX0VBQ0hfT0JTRVJWRVIoTGlmZWN5Y2xlT2JzZXJ2ZXIsIGxpZmVjeWNsZV9vYnNlcnZlcnNfLCBGb2N1cyh0aW1lc3RhbXApKTsKLSAgYXBwbGljYXRpb25fc3RhdGVfID0gYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVTdGFydGVkOwotfQotCiB2b2lkIEJyb3dzZXJNb2R1bGU6OkZyZWV6ZShTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6OkZyZWV6ZSgpIik7CiAgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBzZWxmX21lc3NhZ2VfbG9vcF8pOwpAQCAtMTQ5Nyw2ICsxNDQ2LDE1IEBACiAgIEZyZWV6ZUludGVybmFsKHRpbWVzdGFtcCk7CiB9CiAKK3ZvaWQgQnJvd3Nlck1vZHVsZTo6VW5mcmVlemUoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgeworICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsICJCcm93c2VyTW9kdWxlOjpVbmZyZWV6ZSgpIik7CisgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBzZWxmX21lc3NhZ2VfbG9vcF8pOworICBEQ0hFQ0soYXBwbGljYXRpb25fc3RhdGVfID09IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlRnJvemVuKTsKKyAgYXBwbGljYXRpb25fc3RhdGVfID0gYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVDb25jZWFsZWQ7CisgIFVuZnJlZXplSW50ZXJuYWwodGltZXN0YW1wKTsKKyAgTmF2aWdhdGVQZW5kaW5nVVJMKCk7Cit9CisKIHZvaWQgQnJvd3Nlck1vZHVsZTo6UmV2ZWFsKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiQnJvd3Nlck1vZHVsZTo6UmV2ZWFsKCkiKTsKICAgRENIRUNLX0VRKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIHNlbGZfbWVzc2FnZV9sb29wXyk7CkBAIC0xNTA1LDEzICsxNDYzLDE2IEBACiAgIFJldmVhbEludGVybmFsKHRpbWVzdGFtcCk7CiB9CiAKLXZvaWQgQnJvd3Nlck1vZHVsZTo6VW5mcmVlemUoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsICJCcm93c2VyTW9kdWxlOjpVbmZyZWV6ZSgpIik7Cit2b2lkIEJyb3dzZXJNb2R1bGU6OkZvY3VzKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiQnJvd3Nlck1vZHVsZTo6Rm9jdXMoKSIpOwogICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgc2VsZl9tZXNzYWdlX2xvb3BfKTsKLSAgRENIRUNLKGFwcGxpY2F0aW9uX3N0YXRlXyA9PSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZUZyb3plbik7Ci0gIGFwcGxpY2F0aW9uX3N0YXRlXyA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlQ29uY2VhbGVkOwotICBVbmZyZWV6ZUludGVybmFsKHRpbWVzdGFtcCk7Ci0gIE5hdmlnYXRlUGVuZGluZ1VSTCgpOworICBEQ0hFQ0soYXBwbGljYXRpb25fc3RhdGVfID09IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlQmx1cnJlZCk7CisgIEZPUl9FQUNIX09CU0VSVkVSKExpZmVjeWNsZU9ic2VydmVyLCBsaWZlY3ljbGVfb2JzZXJ2ZXJzXywgRm9jdXModGltZXN0YW1wKSk7CisgIGFwcGxpY2F0aW9uX3N0YXRlXyA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZDsKK30KKworYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBCcm93c2VyTW9kdWxlOjpHZXRBcHBsaWNhdGlvblN0YXRlKCkgeworICByZXR1cm4gYXBwbGljYXRpb25fc3RhdGVfOwogfQogCiB2b2lkIEJyb3dzZXJNb2R1bGU6OlJlZHVjZU1lbW9yeSgpIHsKQEAgLTE1MzUsMTEgKzE0OTYsNyBAQAogICAgIGNvbnN0IGludDY0X3QmIHVzZWRfY3B1X21lbW9yeSwKICAgICBjb25zdCBiYXNlOjpPcHRpb25hbDxpbnQ2NF90PiYgdXNlZF9ncHVfbWVtb3J5KSB7CiAgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBzZWxmX21lc3NhZ2VfbG9vcF8pOwotICBpZiAoIWF1dG9fbWVtXykgewotICAgIHJldHVybjsKLSAgfQotCi0gIG1lbW9yeV9zZXR0aW5nc19jaGVja2VyXy5SdW5DaGVja3MoKmF1dG9fbWVtXywgdXNlZF9jcHVfbWVtb3J5LAorICBtZW1vcnlfc2V0dGluZ3NfY2hlY2tlcl8uUnVuQ2hlY2tzKGF1dG9fbWVtXywgdXNlZF9jcHVfbWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfZ3B1X21lbW9yeSk7CiB9CiAKQEAgLTE2NzAsMTcgKzE2MjcsMTUgQEAKICAgICAgIGJhc2U6OkJpbmQoJkJyb3dzZXJNb2R1bGU6Ok9uUG9pbnRlckV2ZW50UHJvZHVjZWQsCiAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAogICAgICAgYmFzZTo6QmluZCgmQnJvd3Nlck1vZHVsZTo6T25XaGVlbEV2ZW50UHJvZHVjZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgICBiYXNlOjpCaW5kKCZCcm93c2VyTW9kdWxlOjpPbk9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50UHJvZHVjZWQsCiAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIHN5c3RlbV93aW5kb3dfLmdldCgpKTsKIAogICBJbml0aWFsaXplQ29tcG9uZW50cygpOwogfQogCiB2b2lkIEJyb3dzZXJNb2R1bGU6Okluc3RhbnRpYXRlUmVuZGVyZXJNb2R1bGUoKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkJyb3dzZXJNb2R1bGU6Okluc3RhbnRpYXRlUmVuZGVyZXJNb2R1bGUoKSIpOwogICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgc2VsZl9tZXNzYWdlX2xvb3BfKTsKICAgRENIRUNLKHN5c3RlbV93aW5kb3dfKTsKICAgRENIRUNLKCFyZW5kZXJlcl9tb2R1bGVfKTsKQEAgLTE4MzAsNyArMTc4NSw3IEBACiAvLyBTZXQgdGhlIFN0dWIgcmVzb3VyY2UgcHJvdmlkZXIgdG8gbWVkaWEgbW9kdWxlIGFuZCB0byB3ZWIgbW9kdWxlCiAvLyBhdCBDb25jZWFsZWQgc3RhdGUuCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKLSAgbWVkaWFfbW9kdWxlXy0+UmVzdW1lKEdldFJlc291cmNlUHJvdmlkZXIoKSk7CisgIGlmIChtZWRpYV9tb2R1bGVfKSBtZWRpYV9tb2R1bGVfLT5SZXN1bWUoR2V0UmVzb3VyY2VQcm92aWRlcigpKTsKICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKIAogICBGT1JfRUFDSF9PQlNFUlZFUihMaWZlY3ljbGVPYnNlcnZlciwgbGlmZWN5Y2xlX29ic2VydmVyc18sCkBAIC0xOTQyLDcgKzE4OTcsNyBAQAogCiAgIC8vIE5vIHdpbmRvdyBhbmQgbm8gdmlld3BvcnQgc2l6ZSB3YXMgcmVxdWVzdGVkLCBzbyB3ZSByZXR1cm4gYSBjb25zZXJ2YXRpdmUKICAgLy8gZGVmYXVsdC4KLSAgbWF0aDo6U2l6ZSBkZWZhdWx0X3NpemUoMTI4MCwgNzIwKTsKKyAgbWF0aDo6U2l6ZSBkZWZhdWx0X3NpemUoMTkyMCwgMTA4MCk7CiAgIGRlZmF1bHRfc2l6ZSA9CiAgICAgICBtYXRoOjpSb3VuZE91dCh2aWV3cG9ydF90cmFuc2Zvcm0uTWFwUmVjdChtYXRoOjpSZWN0RihkZWZhdWx0X3NpemUpKSkKICAgICAgICAgICAuc2l6ZSgpOwpAQCAtMTk1MiwzNSArMTkwNywzMyBAQAogCiB2b2lkIEJyb3dzZXJNb2R1bGU6OkFwcGx5QXV0b01lbVNldHRpbmdzKCkgewogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsICJCcm93c2VyTW9kdWxlOjpBcHBseUF1dG9NZW1TZXR0aW5ncygpIik7Ci0gIGF1dG9fbWVtXy5yZXNldChuZXcgbWVtb3J5X3NldHRpbmdzOjpBdXRvTWVtKAotICAgICAgR2V0Vmlld3BvcnRTaXplKCkud2lkdGhfaGVpZ2h0KCksIG9wdGlvbnNfLmNvbW1hbmRfbGluZV9hdXRvX21lbV9zZXR0aW5ncywKLSAgICAgIG9wdGlvbnNfLmJ1aWxkX2F1dG9fbWVtX3NldHRpbmdzKSk7Ci0KLSAgTE9HKElORk8pIDw8IGF1dG9fbWVtXy0+VG9QcmV0dHlQcmludFN0cmluZyhTYkxvZ0lzVHR5KCkpOworICBhdXRvX21lbV8uQ29uc3RydWN0U2V0dGluZ3MoR2V0Vmlld3BvcnRTaXplKCkud2lkdGhfaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zXy5jb21tYW5kX2xpbmVfYXV0b19tZW1fc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zXy5idWlsZF9hdXRvX21lbV9zZXR0aW5ncyk7CiAKICAgLy8gV2ViIE1vZHVsZSBvcHRpb25zLgogICBvcHRpb25zXy53ZWJfbW9kdWxlX29wdGlvbnMuZW5jb2RlZF9pbWFnZV9jYWNoZV9jYXBhY2l0eSA9Ci0gICAgICBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9fbWVtXy0+ZW5jb2RlZF9pbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOworICAgICAgc3RhdGljX2Nhc3Q8aW50PihhdXRvX21lbV8uZW5jb2RlZF9pbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOwogICBvcHRpb25zXy53ZWJfbW9kdWxlX29wdGlvbnMuaW1hZ2VfY2FjaGVfY2FwYWNpdHkgPQotICAgICAgc3RhdGljX2Nhc3Q8aW50PihhdXRvX21lbV8tPmltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKS0+dmFsdWUoKSk7CisgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9fbWVtXy5pbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOwogICBvcHRpb25zXy53ZWJfbW9kdWxlX29wdGlvbnMucmVtb3RlX3R5cGVmYWNlX2NhY2hlX2NhcGFjaXR5ID0gc3RhdGljX2Nhc3Q8aW50PigKLSAgICAgIGF1dG9fbWVtXy0+cmVtb3RlX3R5cGVmYWNlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKS0+dmFsdWUoKSk7CisgICAgICBhdXRvX21lbV8ucmVtb3RlX3R5cGVmYWNlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKS0+dmFsdWUoKSk7CiAgIGlmICh3ZWJfbW9kdWxlXykgewogICAgIHdlYl9tb2R1bGVfLT5TZXRJbWFnZUNhY2hlQ2FwYWNpdHkoCi0gICAgICAgIGF1dG9fbWVtXy0+aW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcygpLT52YWx1ZSgpKTsKKyAgICAgICAgYXV0b19tZW1fLmltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKS0+dmFsdWUoKSk7CiAgICAgd2ViX21vZHVsZV8tPlNldFJlbW90ZVR5cGVmYWNlQ2FjaGVDYXBhY2l0eSgKLSAgICAgICAgYXV0b19tZW1fLT5yZW1vdGVfdHlwZWZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlcygpLT52YWx1ZSgpKTsKKyAgICAgICAgYXV0b19tZW1fLnJlbW90ZV90eXBlZmFjZV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOwogICB9CiAKICAgLy8gUmVuZGVyZXIgTW9kdWxlIG9wdGlvbnMuCiAgIG9wdGlvbnNfLnJlbmRlcmVyX21vZHVsZV9vcHRpb25zLnNraWFfY2FjaGVfc2l6ZV9pbl9ieXRlcyA9Ci0gICAgICBzdGF0aWNfY2FzdDxpbnQ+KGF1dG9fbWVtXy0+c2tpYV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOworICAgICAgc3RhdGljX2Nhc3Q8aW50PihhdXRvX21lbV8uc2tpYV9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOwogICBvcHRpb25zXy5yZW5kZXJlcl9tb2R1bGVfb3B0aW9ucy5vZmZzY3JlZW5fdGFyZ2V0X2NhY2hlX3NpemVfaW5fYnl0ZXMgPQogICAgICAgc3RhdGljX2Nhc3Q8aW50PigKLSAgICAgICAgICBhdXRvX21lbV8tPm9mZnNjcmVlbl90YXJnZXRfY2FjaGVfc2l6ZV9pbl9ieXRlcygpLT52YWx1ZSgpKTsKKyAgICAgICAgICBhdXRvX21lbV8ub2Zmc2NyZWVuX3RhcmdldF9jYWNoZV9zaXplX2luX2J5dGVzKCktPnZhbHVlKCkpOwogCiAgIGNvbnN0IG1lbW9yeV9zZXR0aW5nczo6VGV4dHVyZURpbWVuc2lvbnMgc2tpYV9nbHlwaF9hdGxhc190ZXh0dXJlX2RpbWVuc2lvbnMgPQotICAgICAgYXV0b19tZW1fLT5za2lhX2F0bGFzX3RleHR1cmVfZGltZW5zaW9ucygpLT52YWx1ZSgpOworICAgICAgYXV0b19tZW1fLnNraWFfYXRsYXNfdGV4dHVyZV9kaW1lbnNpb25zKCktPnZhbHVlKCk7CiAgIGlmIChza2lhX2dseXBoX2F0bGFzX3RleHR1cmVfZGltZW5zaW9ucy5ieXRlc19wZXJfcGl4ZWwoKSA+IDApIHsKICAgICAvLyBSaWdodCBub3cgdGhlIGJ5dGVzX3Blcl9waXhlbCBpcyBhc3N1bWVkIGluIHRoZSBlbmdpbmUuIEFueSBvdGhlciB2YWx1ZQogICAgIC8vIGlzIGN1cnJlbnRseSBmb3JiaWRkZW4uCkBAIC0yMDkwLDggKzIwNDMsNyBAQAogfQogCiBzY29wZWRfcmVmcHRyPHNjcmlwdDo6V3JhcHBhYmxlPiBCcm93c2VyTW9kdWxlOjpDcmVhdGVINXZjYygKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPGRvbTo6V2luZG93PiYgd2luZG93LAotICAgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCkgeworICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpIHsKICAgaDV2Y2M6Okg1dmNjOjpTZXR0aW5ncyBoNXZjY19zZXR0aW5nczsKICAgaDV2Y2Nfc2V0dGluZ3MubWVkaWFfbW9kdWxlID0gbWVkaWFfbW9kdWxlXy5nZXQoKTsKICAgaDV2Y2Nfc2V0dGluZ3MubmV0d29ya19tb2R1bGUgPSBuZXR3b3JrX21vZHVsZV87CkBAIC0yMTAwLDE2ICsyMDUyLDE5IEBACiAjZW5kaWYKICAgaDV2Y2Nfc2V0dGluZ3MuYWNjb3VudF9tYW5hZ2VyID0gYWNjb3VudF9tYW5hZ2VyXzsKICAgaDV2Y2Nfc2V0dGluZ3MuZXZlbnRfZGlzcGF0Y2hlciA9IGV2ZW50X2Rpc3BhdGNoZXJfOwotICBoNXZjY19zZXR0aW5ncy51c2VyX2FnZW50X2RhdGEgPSB3aW5kb3ctPm5hdmlnYXRvcigpLT51c2VyX2FnZW50X2RhdGEoKTsKLSAgaDV2Y2Nfc2V0dGluZ3MuZ2xvYmFsX2Vudmlyb25tZW50ID0gZ2xvYmFsX2Vudmlyb25tZW50OwogCi0gIHJldHVybiBzY29wZWRfcmVmcHRyPHNjcmlwdDo6V3JhcHBhYmxlPihuZXcgaDV2Y2M6Okg1dmNjKGg1dmNjX3NldHRpbmdzKSk7Ci19CisgIGF1dG8qIGRvbV9zZXR0aW5ncyA9IGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihzZXR0aW5ncyk7CiAKLXZvaWQgQnJvd3Nlck1vZHVsZTo6U2V0QXBwbGljYXRpb25TdGFydE9yUHJlbG9hZFRpbWVzdGFtcCgKLSAgICBib29sIGlzX3ByZWxvYWQsIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKLSAgRENIRUNLKHdlYl9tb2R1bGVfKTsKLSAgd2ViX21vZHVsZV8tPlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAoaXNfcHJlbG9hZCwgdGltZXN0YW1wKTsKKyAgaDV2Y2Nfc2V0dGluZ3MudXNlcl9hZ2VudF9kYXRhID0KKyAgICAgIGRvbV9zZXR0aW5ncy0+d2luZG93KCktPm5hdmlnYXRvcigpLT51c2VyX2FnZW50X2RhdGEoKTsKKyAgaDV2Y2Nfc2V0dGluZ3MuZ2xvYmFsX2Vudmlyb25tZW50ID0KKyAgICAgIGRvbV9zZXR0aW5ncy0+Y29udGV4dCgpLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKKworICBhdXRvKiBoNXZjY19vYmplY3QgPSBuZXcgaDV2Y2M6Okg1dmNjKGg1dmNjX3NldHRpbmdzKTsKKyAgaWYgKCF3ZWJfbW9kdWxlX2NyZWF0ZWRfY2FsbGJhY2tfLmlzX251bGwoKSkgeworICAgIHdlYl9tb2R1bGVfY3JlYXRlZF9jYWxsYmFja18uUnVuKHdlYl9tb2R1bGVfLmdldCgpKTsKKyAgfQorICByZXR1cm4gc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OldyYXBwYWJsZT4oaDV2Y2Nfb2JqZWN0KTsKIH0KIAogdm9pZCBCcm93c2VyTW9kdWxlOjpTZXREZWVwTGlua1RpbWVzdGFtcChTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5oIGIvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9tb2R1bGUuaAppbmRleCBkYzc5Zjg0Li4xMGQ2OWM1IDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX21vZHVsZS5oCisrKyBiL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfbW9kdWxlLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJiYXNlL29ic2VydmVyX2xpc3QuaCIKKyNpbmNsdWRlICJiYXNlL29wdGlvbmFsLmgiCiAjaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vbG9jay5oIgogI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL3dhaXRhYmxlX2V2ZW50LmgiCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkLmgiCkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2NoZWNrZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvYnJvd3Nlci9yZW5kZXJfdHJlZV9jb21iaW5lci5oIgogI2luY2x1ZGUgImNvYmFsdC9icm93c2VyL3NjcmVlbl9zaG90X3dyaXRlci5oIgorI2luY2x1ZGUgImNvYmFsdC9icm93c2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvc3BsYXNoX3NjcmVlbi5oIgogI2luY2x1ZGUgImNvYmFsdC9icm93c2VyL3N1c3BlbmRfZnV6emVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvc3lzdGVtX3BsYXRmb3JtX2Vycm9yX2hhbmRsZXIuaCIKQEAgLTkxLDYgKzkzLDcgQEAKIC8vIGRpZmZlcmVudCBzdWJzeXN0ZW1zIHRvZ2V0aGVyLgogY2xhc3MgQnJvd3Nlck1vZHVsZSB7CiAgcHVibGljOgorICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoV2ViTW9kdWxlKik+IFdlYk1vZHVsZUNyZWF0ZWRDYWxsYmFjazsKICAgLy8gQWxsIGJyb3dzZXIgc3ViY29tcG9uZW50IG9wdGlvbnMgc2hvdWxkIGhhdmUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgdGhhdAogICAvLyBzZXR1cCByZWFzb25hYmxlIGRlZmF1bHQgb3B0aW9ucy4KICAgc3RydWN0IE9wdGlvbnMgewpAQCAtMTAzLDcgKzEwNiw3IEBACiAgICAgcmVuZGVyZXI6OlJlbmRlcmVyTW9kdWxlOjpPcHRpb25zIHJlbmRlcmVyX21vZHVsZV9vcHRpb25zOwogICAgIFdlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfbW9kdWxlX29wdGlvbnM7CiAgICAgbWVkaWE6Ok1lZGlhTW9kdWxlOjpPcHRpb25zIG1lZGlhX21vZHVsZV9vcHRpb25zOwotICAgIGJhc2U6OkNsb3N1cmUgd2ViX21vZHVsZV9jcmVhdGVkX2NhbGxiYWNrOworICAgIFdlYk1vZHVsZUNyZWF0ZWRDYWxsYmFjayB3ZWJfbW9kdWxlX2NyZWF0ZWRfY2FsbGJhY2s7CiAgICAgbWVtb3J5X3NldHRpbmdzOjpBdXRvTWVtU2V0dGluZ3MgY29tbWFuZF9saW5lX2F1dG9fbWVtX3NldHRpbmdzOwogICAgIG1lbW9yeV9zZXR0aW5nczo6QXV0b01lbVNldHRpbmdzIGJ1aWxkX2F1dG9fbWVtX3NldHRpbmdzOwogICAgIGJhc2U6Ok9wdGlvbmFsPEdVUkw+IGZhbGxiYWNrX3NwbGFzaF9zY3JlZW5fdXJsOwpAQCAtMTgzLDYgKzE4Niw5IEBACiAgIHZvaWQgUmV2ZWFsKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogICB2b2lkIEZvY3VzKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogCisgIC8vIEdldHMgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZS4KKyAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBHZXRBcHBsaWNhdGlvblN0YXRlKCk7CisKICAgLy8gQXR0ZW1wdCB0byByZWR1Y2Ugb3ZlcmFsbCBtZW1vcnkgY29uc3VtcHRpb24uIENhbGxlZCBpbiByZXNwb25zZSB0byBhCiAgIC8vIHN5c3RlbSBpbmRpY2F0aW9uIHRoYXQgbWVtb3J5IHVzYWdlIGlzIG5lYXJpbmcgYSBjcml0aWNhbCBsZXZlbC4KICAgdm9pZCBSZWR1Y2VNZW1vcnkoKTsKQEAgLTE5Nyw3ICsyMDMsNiBAQAogICAvLyBDYWxsZWQgd2hlbiBhIGtTYkV2ZW50VHlwZVdpbmRvd1NpemVDaGFuZ2UgZXZlbnQgaXMgZmlyZWQuCiAgIHZvaWQgT25XaW5kb3dTaXplQ2hhbmdlZChjb25zdCBjc3NvbTo6Vmlld3BvcnRTaXplJiB2aWV3cG9ydF9zaXplKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIHZvaWQgT25PblNjcmVlbktleWJvYXJkU2hvd24oY29uc3QgYmFzZTo6T25TY3JlZW5LZXlib2FyZFNob3duRXZlbnQqIGV2ZW50KTsKICAgdm9pZCBPbk9uU2NyZWVuS2V5Ym9hcmRIaWRkZW4oY29uc3QgYmFzZTo6T25TY3JlZW5LZXlib2FyZEhpZGRlbkV2ZW50KiBldmVudCk7CiAgIHZvaWQgT25PblNjcmVlbktleWJvYXJkRm9jdXNlZCgKQEAgLTIwNiwxMyArMjExLDggQEAKICAgICAgIGNvbnN0IGJhc2U6Ok9uU2NyZWVuS2V5Ym9hcmRCbHVycmVkRXZlbnQqIGV2ZW50KTsKICAgdm9pZCBPbk9uU2NyZWVuS2V5Ym9hcmRTdWdnZXN0aW9uc1VwZGF0ZWQoCiAgICAgICBjb25zdCBiYXNlOjpPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNVcGRhdGVkRXZlbnQqIGV2ZW50KTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgdm9pZCBPbkNhcHRpb25TZXR0aW5nc0NoYW5nZWQoCiAgICAgICBjb25zdCBiYXNlOjpBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzQ2hhbmdlZEV2ZW50KiBldmVudCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIAogICB2b2lkIE9uV2luZG93T25PbmxpbmVFdmVudChjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpOwogICB2b2lkIE9uV2luZG93T25PZmZsaW5lRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KTsKQEAgLTIyOSw5ICsyMjksNiBAQAogICBzdGF0aWMgdm9pZCBHZXRQYXJhbU1hcChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+JiBtYXApOwogCi0gIC8vIFBhc3MgdGhlIGFwcGxpY2F0aW9uIHByZWxvYWQgb3Igc3RhcnQgdGltZXN0YW1wcyBmcm9tIFN0YXJib2FyZC4KLSAgdm9pZCBTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKGJvb2wgaXNfcHJlbG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogICAvLyBQYXNzIHRoZSBkZWVwbGluayB0aW1lc3RhbXAgZnJvbSBTdGFyYm9hcmQuCiAgIHZvaWQgU2V0RGVlcExpbmtUaW1lc3RhbXAoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAKQEAgLTI4MCwxNCArMjc3LDExIEBACiAgIC8vIHBlcnNpc3QgdGhlIHVzZXIncyBwcmVmZXJlbmNlLgogICB2b2lkIFNhdmVEZWJ1Z0NvbnNvbGVNb2RlKCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAvLyBHbHVlIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUgcHJvZHVjdGlvbiBvZiBhbiBpbnB1dCBldmVudCBmcm9tIGFuIG9uCiAgIC8vIHNjcmVlbiBrZXlib2FyZCBpbnB1dCBkZXZpY2UsIGFuZCBtYW5hZ2UgaGFuZGluZyBpdCBvZmYgdG8gdGhlIHdlYiBtb2R1bGUKICAgLy8gZm9yIGludGVycHJldGF0aW9uLgogICB2b2lkIE9uT25TY3JlZW5LZXlib2FyZElucHV0RXZlbnRQcm9kdWNlZChiYXNlOjpUb2tlbiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OklucHV0RXZlbnRJbml0JiBldmVudCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgLy8gR2x1ZSBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlIHByb2R1Y3Rpb24gb2YgYSBrZXlib2FyZCBpbnB1dCBldmVudCBmcm9tIGEKICAgLy8ga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWFuYWdlIGhhbmRpbmcgaXQgb2ZmIHRvIHRoZSB3ZWIgbW9kdWxlIGZvcgpAQCAtMzA2LDEzICszMDAsMTAgQEAKICAgLy8gaW50ZXJwcmV0YXRpb24uCiAgIHZvaWQgT25XaGVlbEV2ZW50UHJvZHVjZWQoYmFzZTo6VG9rZW4gdHlwZSwgY29uc3QgZG9tOjpXaGVlbEV2ZW50SW5pdCYgZXZlbnQpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgLy8gSW5qZWN0cyBhbiBvbiBzY3JlZW4ga2V5Ym9hcmQgaW5wdXQgZXZlbnQgZGlyZWN0bHkgaW50byB0aGUgbWFpbiB3ZWIKICAgLy8gbW9kdWxlLgogICB2b2lkIEluamVjdE9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50VG9NYWluV2ViTW9kdWxlKAogICAgICAgYmFzZTo6VG9rZW4gdHlwZSwgY29uc3QgZG9tOjpJbnB1dEV2ZW50SW5pdCYgZXZlbnQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogCiAgIC8vIEluamVjdHMgYSBrZXkgZXZlbnQgZGlyZWN0bHkgaW50byB0aGUgbWFpbiB3ZWIgbW9kdWxlLCB1c2VmdWwgZm9yIHNldHRpbmcKICAgLy8gdXAgYW4gaW5wdXQgZnV6emVyIHdob3NlIGlucHV0IHNob3VsZCBiZSBzZW50IGRpcmVjdGx5IHRvIHRoZSBtYWluCkBAIC00NTIsOCArNDQzLDggQEAKICAgLy8gR2V0cyBhIHZpZXdwb3J0IHNpemUgdG8gdXNlIGZvciBub3cuIFRoaXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlCiAgIC8vIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGUuIFdoaWxlIGNvbmNlYWxlZCwgdGhpcyByZXR1cm5zIHRoZSByZXF1ZXN0ZWQKICAgLy8gdmlld3BvcnQgc2l6ZS4gSWYgdGhlcmUgd2FzIG5vIHJlcXVlc3RlZCB2aWV3cG9ydCBzaXplLCBpdCByZXR1cm5zIGEKLSAgLy8gZGVmYXVsdCB2aWV3cG9ydCBzaXplIG9mIDEyODB4NzIwICg3MjBwKS4gT25jZSBhIHN5c3RlbSB3aW5kb3cgaXMgY3JlYXRlZCwKLSAgLy8gaXQgcmV0dXJucyB0aGUgY29uZmlybWVkIHNpemUgb2YgdGhlIHdpbmRvdy4KKyAgLy8gZGVmYXVsdCB2aWV3cG9ydCBzaXplIG9mIDE5MjB4MTA4MCAoMTA4MHApLiBPbmNlIGEgc3lzdGVtIHdpbmRvdyBpcworICAvLyBjcmVhdGVkLCBpdCByZXR1cm5zIHRoZSBjb25maXJtZWQgc2l6ZSBvZiB0aGUgd2luZG93LgogICBjc3NvbTo6Vmlld3BvcnRTaXplIEdldFZpZXdwb3J0U2l6ZSgpOwogCiAgIC8vIEFwcGxpZXMgdGhlIGN1cnJlbnQgQXV0b01lbSBzZXR0aW5ncyB0byBhbGwgYXBwbGljYWJsZSBzdWJtb2R1bGVzLgpAQCAtNDc3LDggKzQ2OCw3IEBACiAKICAgLy8gRnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBINXZjYyBvYmplY3QgdGhhdCB3aWxsIGJlIGluamVjdGVkIGludG8gV2ViTW9kdWxlCiAgIHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpXcmFwcGFibGU+IENyZWF0ZUg1dmNjKAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxkb206OldpbmRvdz4mIHdpbmRvdywKLSAgICAgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCk7CisgICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzKTsKIAogICAvLyBUT0RPOgogICAvLyAgICAgV2Vha1B0ciB1c2FnZSBoZXJlIGNhbiBiZSBhdm9pZGVkIGlmIEJyb3dzZXJNb2R1bGUgaGFzIGEgdGhyZWFkIHRvCkBAIC00OTksNyArNDg5LDcgQEAKICAgYmFzZTo6V2Vha1B0cjxCcm93c2VyTW9kdWxlPiB3ZWFrX3RoaXNfOwogCiAgIC8vIE1lbW9yeSBjb25maWd1cmF0aW9uIHRvb2wuCi0gIHN0ZDo6dW5pcXVlX3B0cjxtZW1vcnlfc2V0dGluZ3M6OkF1dG9NZW0+IGF1dG9fbWVtXzsKKyAgbWVtb3J5X3NldHRpbmdzOjpBdXRvTWVtIGF1dG9fbWVtXzsKIAogICAvLyBBIGNvcHkgb2YgdGhlIEJyb3dzZXJNb2R1bGUgT3B0aW9ucyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IuCiAgIE9wdGlvbnMgb3B0aW9uc187CkBAIC01NDQsNyArNTM0LDcgQEAKICAgLy8gQWxsb3dzIGNoZWNraW5nIGlmIHBhcnRpY3VsYXIgbWVkaWEgdHlwZSBjYW4gYmUgcGxheWVkLgogICBzdGQ6OnVuaXF1ZV9wdHI8bWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlcj4gY2FuX3BsYXlfdHlwZV9oYW5kbGVyXzsKIAotICAvLyBTZXRzIHVwIHRoZSBuZXR3b3JrIGNvbXBvbmVudCBmb3IgcmVxdWVzdGluZyBpbnRlcm5ldCByZXNvdXJjZXMuCisgIC8vIE1hbmFnZXMgdGhlIG5ldHdvcmsgY29tcG9uZW50IGZvciByZXF1ZXN0aW5nIGludGVybmV0IHJlc291cmNlcy4KICAgbmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGVfOwogCiAjaWYgU0JfSVMoRVZFUkdSRUVOKQpAQCAtNTg4LDcgKzU3OCw3IEBACiAKICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBhZnRlciBhIFdlYk1vZHVsZSBoYXMgYmVlbiByZWNyZWF0ZWQsIHdoaWNoIGNvdWxkIG9jY3VyCiAgIC8vIG9uIG5hdmlnYXRpb24uCi0gIGJhc2U6OkNsb3N1cmUgd2ViX21vZHVsZV9jcmVhdGVkX2NhbGxiYWNrXzsKKyAgV2ViTW9kdWxlQ3JlYXRlZENhbGxiYWNrIHdlYl9tb2R1bGVfY3JlYXRlZF9jYWxsYmFja187CiAKICAgLy8gVGhlIHRpbWUgd2hlbiBhIFVSTCBuYXZpZ2F0aW9uIHN0YXJ0cy4gVGhpcyBpcyByZWNvcmRlZCBhZnRlciB0aGUgcHJldmlvdXMKICAgLy8gV2ViTW9kdWxlIGlzIGRlc3Ryb3llZC4KQEAgLTYzNyw2ICs2MjcsOSBAQAogICAvLyBBbiBvYmplY3QgdGhhdCByZWdpc3RlcnMgYW5kIG93bnMgY29uc29sZSBjb21tYW5kcyBmb3IgY29udHJvbGxpbmcKICAgLy8gQ29iYWx0J3MgbGlmZWN5Y2xlLgogICBMaWZlY3ljbGVDb25zb2xlQ29tbWFuZHMgbGlmZWN5Y2xlX2NvbnNvbGVfY29tbWFuZHNfOworCisgIC8vIFNhdmVzIHRoZSBwcmV2aW91cyBkZWJ1Z2dlciBzdGF0ZSB0byBiZSByZXN0b3JlZCBpbiB0aGUgbmV3IFdlYk1vZHVsZS4KKyAgc3RkOjp1bmlxdWVfcHRyPGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z2dlclN0YXRlPiBkZWJ1Z2dlcl9zdGF0ZV87CiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogCiAgIC8vIFRoZSBzcGxhc2ggc2NyZWVuLiBUaGUgcG9pbnRlciB3cmFwcGVkIGhlcmUgc2hvdWxkIGJlIG5vbi1OVUxMIGlmZgpAQCAtNzIyLDYgKzcxNSw5IEBACiAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgd2luZG93IHNpemUgYmVmb3JlIHRyYW5zaXRpb25pbmcgdG8gQ29uY2VhbGVkIHN0YXRlLAogICAvLyBhbmQgcmV1c2UgdGhpcyB2YWx1ZSB0byByZWNyZWF0ZSB0aGUgd2luZG93LgogICBtYXRoOjpTaXplIHdpbmRvd19zaXplXzsKKworICAvLyBNYW5hZ2VzIHRoZSBTZXJ2aWNlIFdvcmtlcnMuCisgIFNlcnZpY2VXb3JrZXJSZWdpc3RyeSBzZXJ2aWNlX3dvcmtlcl9yZWdpc3RyeV87CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgYnJvd3NlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvY29iYWx0Lmd5cCBiL2NvYmFsdC9icm93c2VyL2NvYmFsdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhOWM4MDEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2Jyb3dzZXIvY29iYWx0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdtYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlci5neXA6YnJvd3NlcicsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2NvYmFsdF9zcGxhc2hfc2NyZWVuX2ZpbGUgIT0gIiInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9zcGxhc2hfc2NyZWVuL3NwbGFzaF9zY3JlZW4uZ3lwOmNvcHlfc3BsYXNoX3NjcmVlbicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY29iYWx0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2NvYmFsdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgIyBDb252ZW5pZW5jZSB0YXJnZXQgdG8gYnVpbGQgY29iYWx0IGFuZCBjb3B5IHRoZSBkZW1vcyBpbnRvCi0gICAgICAjIGNvbnRlbnQvZGF0YS90ZXN0L2NvYmFsdC9kZW1vcwotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF93aXRoX2RlbW9zJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NvYmFsdCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZGVtb3MvZGVtb3MuZ3lwOmNvcHlfZGVtb3MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzbmFwc2hvdF9hcHBfc3RhdHMnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc25hcHNob3RfYXBwX3N0YXRzLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY29iYWx0JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXIuZ3lwOmJyb3dzZXInLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYuZ3lwOnByb3RvYnVmX2xpdGUnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzbmFwc2hvdF9hcHBfc3RhdHNfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3NuYXBzaG90X2FwcF9zdGF0cycsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdzbmFwc2hvdF9hcHBfc3RhdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ2ZpbmFsX2V4ZWN1dGFibGVfdHlwZSA9PSAic2hhcmVkX2xpYnJhcnkiIGFuZCBzYl9ldmVyZ3JlZW4gIT0gMScsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF9iaW4nLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnY29iYWx0JywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL2RlYnVnX2NvbnNvbGUuY2MgYi9jb2JhbHQvYnJvd3Nlci9kZWJ1Z19jb25zb2xlLmNjCmluZGV4IDc0MjY0YzcuLjI0MTRhZmIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL2RlYnVnX2NvbnNvbGUuY2MKKysrIGIvY29iYWx0L2Jyb3dzZXIvZGVidWdfY29uc29sZS5jYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vY3NwX2RlbGVnYXRlX2ZhY3RvcnkuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL211dGF0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlci5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vd2luZG93LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIGJyb3dzZXIgewpAQCAtOTUsOCArOTYsNyBAQAogc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OldyYXBwYWJsZT4gQ3JlYXRlRGVidWdIdWIoCiAgICAgY29uc3QgZGVidWc6OmNvbnNvbGU6OkRlYnVnSHViOjpHZXRIdWRNb2RlQ2FsbGJhY2smIGdldF9odWRfbW9kZV9mdW5jdGlvbiwKICAgICBjb25zdCBkZWJ1Zzo6Q3JlYXRlRGVidWdDbGllbnRDYWxsYmFjayYgY3JlYXRlX2RlYnVnX2NsaWVudF9jYWxsYmFjaywKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPGRvbTo6V2luZG93PiYgd2luZG93LAotICAgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCkgeworICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpIHsKICAgcmV0dXJuIG5ldyBkZWJ1Zzo6Y29uc29sZTo6RGVidWdIdWIoZ2V0X2h1ZF9tb2RlX2Z1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfZGVidWdfY2xpZW50X2NhbGxiYWNrKTsKIH0KQEAgLTExNCw4ICsxMTQsNyBAQAogICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUmIG1heWJlX2ZyZWV6ZV9jYWxsYmFjaykgewogICBtb2RlXyA9IEdldEluaXRpYWxNb2RlKCk7CiAKLSAgV2ViTW9kdWxlOjpPcHRpb25zIHdlYl9tb2R1bGVfb3B0aW9uczsKLSAgd2ViX21vZHVsZV9vcHRpb25zLm5hbWUgPSAiRGVidWdDb25zb2xlV2ViTW9kdWxlIjsKKyAgV2ViTW9kdWxlOjpPcHRpb25zIHdlYl9tb2R1bGVfb3B0aW9ucygiRGVidWdDb25zb2xlV2ViTW9kdWxlIik7CiAgIC8vIFRoZSBkZWJ1ZyBjb25zb2xlIGRvZXMgbm90IGxvYWQgYW55IGltYWdlIGFzc2V0cy4KICAgd2ViX21vZHVsZV9vcHRpb25zLmltYWdlX2NhY2hlX2NhcGFjaXR5ID0gMDsKICAgLy8gRGlzYWJsZSBDU1AgZm9yIHRoZSBEZWJ1Z2dlcidzIFdlYk1vZHVsZS4gVGhpcyB3aWxsIGFsc28gYWxsb3cgZXZhbCgpIGluCkBAIC0xMzEsNyArMTMwLDcgQEAKICAgLy8gQXR0YWNoIGEgRGVidWdIdWIgb2JqZWN0IHRvIHRoZSAiZGVidWdIdWIiIFdpbmRvdyBhdHRyaWJ1dGUgZm9yIHRoaXMKICAgLy8gd2ViIG1vZHVsZSBzbyB0aGF0IEphdmFTY3JpcHQgd2l0aGluIHRoaXMgV2ViTW9kdWxlIGhhcyBhY2Nlc3MgdG8gRGVidWdIdWIKICAgLy8gZnVuY3Rpb25hbGl0eS4KLSAgd2ViX21vZHVsZV9vcHRpb25zLmluamVjdGVkX3dpbmRvd19hdHRyaWJ1dGVzWyJkZWJ1Z0h1YiJdID0KKyAgd2ViX21vZHVsZV9vcHRpb25zLndlYl9vcHRpb25zLmluamVjdGVkX2dsb2JhbF9vYmplY3RfYXR0cmlidXRlc1siZGVidWdIdWIiXSA9CiAgICAgICBiYXNlOjpCaW5kKCZDcmVhdGVEZWJ1Z0h1YiwKICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmRGVidWdDb25zb2xlOjpHZXRNb2RlLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKICAgICAgICAgICAgICAgICAgY3JlYXRlX2RlYnVnX2NsaWVudF9jYWxsYmFjayk7CkBAIC0xMzksMTUgKzEzOCwxNyBAQAogICAvLyBQYXNzIGRvd24gdGhpcyBjYWxsYmFjayBmcm9tIEJyb3dzZXIgbW9kdWxlIHRvIFdlYiBtb2R1bGUgZXZlbnR1YWxseS4KICAgd2ViX21vZHVsZV9vcHRpb25zLm1heWJlX2ZyZWV6ZV9jYWxsYmFjayA9IG1heWJlX2ZyZWV6ZV9jYWxsYmFjazsKIAotICB3ZWJfbW9kdWxlXy5yZXNldChuZXcgV2ViTW9kdWxlKAotICAgICAgR1VSTChrSW5pdGlhbERlYnVnQ29uc29sZVVybCksIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsCi0gICAgICByZW5kZXJfdHJlZV9wcm9kdWNlZF9jYWxsYmFjaywKLSAgICAgIGJhc2U6OkJpbmQoJkRlYnVnQ29uc29sZTo6T25FcnJvciwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBXZWJNb2R1bGU6OkNsb3NlQ2FsbGJhY2soKSwgLyogd2luZG93X2Nsb3NlX2NhbGxiYWNrICovCi0gICAgICBiYXNlOjpDbG9zdXJlKCksICAgICAgICAgICAgLyogd2luZG93X21pbmltaXplX2NhbGxiYWNrICovCi0gICAgICBOVUxMIC8qIGNhbl9wbGF5X3R5cGVfaGFuZGxlciAqLywgTlVMTCAvKiBtZWRpYV9tb2R1bGUgKi8sCi0gICAgICBuZXR3b3JrX21vZHVsZSwgd2luZG93X2RpbWVuc2lvbnMsIHJlc291cmNlX3Byb3ZpZGVyLCBsYXlvdXRfcmVmcmVzaF9yYXRlLAotICAgICAgd2ViX21vZHVsZV9vcHRpb25zKSk7CisgIHdlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucy5uZXR3b3JrX21vZHVsZSA9IG5ldHdvcmtfbW9kdWxlOworCisgIHdlYl9tb2R1bGVfLnJlc2V0KAorICAgICAgbmV3IFdlYk1vZHVsZShHVVJMKGtJbml0aWFsRGVidWdDb25zb2xlVXJsKSwgaW5pdGlhbF9hcHBsaWNhdGlvbl9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJkRlYnVnQ29uc29sZTo6T25FcnJvciwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCisgICAgICAgICAgICAgICAgICAgIFdlYk1vZHVsZTo6Q2xvc2VDYWxsYmFjaygpLCAvKiB3aW5kb3dfY2xvc2VfY2FsbGJhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgYmFzZTo6Q2xvc3VyZSgpLCAgICAgICAgICAgIC8qIHdpbmRvd19taW5pbWl6ZV9jYWxsYmFjayAqLworICAgICAgICAgICAgICAgICAgICBOVUxMIC8qIGNhbl9wbGF5X3R5cGVfaGFuZGxlciAqLywgTlVMTCAvKiBtZWRpYV9tb2R1bGUgKi8sCisgICAgICAgICAgICAgICAgICAgIHdpbmRvd19kaW1lbnNpb25zLCByZXNvdXJjZV9wcm92aWRlciwgbGF5b3V0X3JlZnJlc2hfcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCAvKiBzZXJ2aWNlX3dvcmtlcl9qb2JzICovLCB3ZWJfbW9kdWxlX29wdGlvbnMpKTsKIH0KIAogRGVidWdDb25zb2xlOjp+RGVidWdDb25zb2xlKCkge30KQEAgLTE4OSw3ICsxOTAsNiBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogYm9vbCBEZWJ1Z0NvbnNvbGU6OkZpbHRlck9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50KAogICAgIGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6SW5wdXRFdmVudEluaXQmIGV2ZW50KSB7CiAgIC8vIFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoZSBldmVudCBzaG91bGQgc3RpbGwgYmUgaGFuZGxlZC4KQEAgLTE5OCw4ICsxOTgsNiBAQAogICB3ZWJfbW9kdWxlXy0+SW5qZWN0T25TY3JlZW5LZXlib2FyZElucHV0RXZlbnQodHlwZSwgZXZlbnQpOwogICByZXR1cm4gZmFsc2U7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKIHZvaWQgRGVidWdDb25zb2xlOjpDeWNsZU1vZGUoKSB7CiAgIGJhc2U6OkF1dG9Mb2NrIGxvY2sobW9kZV9tdXRleF8pOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvZGVidWdfY29uc29sZS5oIGIvY29iYWx0L2Jyb3dzZXIvZGVidWdfY29uc29sZS5oCmluZGV4IGViYjhkMDMuLmFhY2QzM2IgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL2RlYnVnX2NvbnNvbGUuaAorKysgYi9jb2JhbHQvYnJvd3Nlci9kZWJ1Z19jb25zb2xlLmgKQEAgLTcwLDE0ICs3MCwxMSBAQAogICAvLyBmYWxzZSBpZiBpdCB3YXMgY29uc3VtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uCiAgIGJvb2wgRmlsdGVyV2hlZWxFdmVudChiYXNlOjpUb2tlbiB0eXBlLCBjb25zdCBkb206OldoZWVsRXZlbnRJbml0JiBldmVudCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAvLyBGaWx0ZXJzIGFuIG9uIHNjcmVlbiBrZXlib2FyZCBpbnB1dCBldmVudC4KICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIG90aGVyIGhhbmRsZXJzLAogICAvLyBmYWxzZSBpZiBpdCB3YXMgY29uc3VtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24uCiAgIGJvb2wgRmlsdGVyT25TY3JlZW5LZXlib2FyZElucHV0RXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OklucHV0RXZlbnRJbml0JiBldmVudCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgY29uc3QgV2ViTW9kdWxlJiB3ZWJfbW9kdWxlKCkgY29uc3QgeyByZXR1cm4gKndlYl9tb2R1bGVfOyB9CiAgIFdlYk1vZHVsZSYgd2ViX21vZHVsZSgpIHsgcmV0dXJuICp3ZWJfbW9kdWxlXzsgfQpAQCAtOTUsMTYgKzkyLDEyIEBACiAgIH0KIAogICAvLyBMaWZlY3ljbGVPYnNlcnZlciBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBCbHVyKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIG92ZXJyaWRlIHsKLSAgICB3ZWJfbW9kdWxlXy0+Qmx1cigwKTsKLSAgfQorICB2b2lkIEJsdXIoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgb3ZlcnJpZGUgeyB3ZWJfbW9kdWxlXy0+Qmx1cigwKTsgfQogICB2b2lkIENvbmNlYWwocmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLAogICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgb3ZlcnJpZGUgewogICAgIHdlYl9tb2R1bGVfLT5Db25jZWFsKHJlc291cmNlX3Byb3ZpZGVyLCAwKTsKICAgfQotICB2b2lkIEZyZWV6ZShTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSBvdmVycmlkZSB7Ci0gICAgd2ViX21vZHVsZV8tPkZyZWV6ZSgwKTsKLSAgfQorICB2b2lkIEZyZWV6ZShTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSBvdmVycmlkZSB7IHdlYl9tb2R1bGVfLT5GcmVlemUoMCk7IH0KICAgdm9pZCBVbmZyZWV6ZShyZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgb3ZlcnJpZGUgewogICAgIHdlYl9tb2R1bGVfLT5VbmZyZWV6ZShyZXNvdXJjZV9wcm92aWRlciwgMCk7CkBAIC0xMTMsMTUgKzEwNiwxMSBAQAogICAgICAgICAgICAgICBTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSBvdmVycmlkZSB7CiAgICAgd2ViX21vZHVsZV8tPlJldmVhbChyZXNvdXJjZV9wcm92aWRlciwgMCk7CiAgIH0KLSAgdm9pZCBGb2N1cyhTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSBvdmVycmlkZSB7Ci0gICAgIHdlYl9tb2R1bGVfLT5Gb2N1cygwKTsKLSAgfQorICB2b2lkIEZvY3VzKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIG92ZXJyaWRlIHsgd2ViX21vZHVsZV8tPkZvY3VzKDApOyB9CiAKICAgdm9pZCBSZWR1Y2VNZW1vcnkoKSB7IHdlYl9tb2R1bGVfLT5SZWR1Y2VNZW1vcnkoKTsgfQogCi0gIGJvb2wgSXNSZWFkeVRvRnJlZXplKCkgewotICAgIHJldHVybiB3ZWJfbW9kdWxlXy0+SXNSZWFkeVRvRnJlZXplKCk7Ci0gIH0KKyAgYm9vbCBJc1JlYWR5VG9GcmVlemUoKSB7IHJldHVybiB3ZWJfbW9kdWxlXy0+SXNSZWFkeVRvRnJlZXplKCk7IH0KIAogIHByaXZhdGU6CiAgIHZvaWQgT25FcnJvcihjb25zdCBHVVJMJiB1cmwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcikgewpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvaWRsX2ZpbGVzLmduaSBiL2NvYmFsdC9icm93c2VyL2lkbF9maWxlcy5nbmkKaW5kZXggZDg2Y2ZmMS4uOWY5YjJhYSAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvaWRsX2ZpbGVzLmduaQorKysgYi9jb2JhbHQvYnJvd3Nlci9pZGxfZmlsZXMuZ25pCkBAIC0xMjgsNiArMTI4LDcgQEAKICAgIi8vY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9saWZlY3ljbGVfdGltaW5nLmlkbCIsCiAgICIvL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbWFyay5pZGwiLAogICAiLy9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX21lYXN1cmUuaWRsIiwKKyAgIi8vY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5pZGwiLAogICAiLy9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX29ic2VydmVyLmlkbCIsCiAgICIvL2NvYmFsdC9kb20vcGVyZm9ybWFuY2Vfb2JzZXJ2ZXJfZW50cnlfbGlzdC5pZGwiLAogICAiLy9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX3Jlc291cmNlX3RpbWluZy5pZGwiLApAQCAtMjI4LDcgKzIyOSwxNCBAQAogICAiLy9jb2JhbHQvd2Vic29ja2V0L2Nsb3NlX2V2ZW50LmlkbCIsCiAgICIvL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldC5pZGwiLAogCisgICIvL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGUuaWRsIiwKKyAgIi8vY29iYWx0L3dvcmtlci9tZXNzYWdlX3BvcnQuaWRsIiwKKyAgIi8vY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5pZGwiLAorICAiLy9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyLmlkbCIsCiAgICIvL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvd29ya2VyLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvd29ya2VyX2dsb2JhbF9zY29wZS5pZGwiLAogCiAgICIvL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdC5pZGwiLAogICAiLy9jb2JhbHQveGhyL3htbF9odHRwX3JlcXVlc3RfZXZlbnRfdGFyZ2V0LmlkbCIsCkBAIC0yODQsNiArMjkyLDcgQEAKICAgIi8vY29iYWx0L2RvbS9tZWRpYV9zb3VyY2VfcmVhZHlfc3RhdGUuaWRsIiwKICAgIi8vY29iYWx0L2RvbS9tb3VzZV9ldmVudF9pbml0LmlkbCIsCiAgICIvL2NvYmFsdC9kb20vbXV0YXRpb25fb2JzZXJ2ZXJfaW5pdC5pZGwiLAorICAiLy9jb2JhbHQvZG9tL25hdmlnYXRpb25fdHlwZS5pZGwiLAogICAiLy9jb2JhbHQvZG9tL25hdmlnYXRvcl91YV9icmFuZF92ZXJzaW9uLmlkbCIsCiAgICIvL2NvYmFsdC9kb20vcGVyZm9ybWFuY2Vfb2JzZXJ2ZXJfY2FsbGJhY2tfb3B0aW9ucy5pZGwiLAogICAiLy9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX29ic2VydmVyX2luaXQuaWRsIiwKQEAgLTI5OSw2ICszMDgsOCBAQAogICAiLy9jb2JhbHQvZW5jb2RpbmcvdGV4dF9kZWNvZGVyX29wdGlvbnMuaWRsIiwKICAgIi8vY29iYWx0L2VuY29kaW5nL3RleHRfZW5jb2Rlcl9lbmNvZGVfaW50b19yZXN1bHQuaWRsIiwKICAgIi8vY29iYWx0L2g1dmNjL2g1dmNjX2NyYXNoX3R5cGUuaWRsIiwKKyAgIi8vY29iYWx0L2g1dmNjL3dhdGNoZG9nX3N0YXRlLmlkbCIsCisgICIvL2NvYmFsdC9oNXZjYy93YXRjaGRvZ19yZXBsYWNlLmlkbCIsCiAgICIvL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2Jsb2JfZXZlbnRfaW5pdC5pZGwiLAogICAiLy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9kZXZpY2Vfa2luZC5pZGwiLAogICAiLy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9yZWNvcmRlcl9vcHRpb25zLmlkbCIsCkBAIC0zMjIsNiArMzMzLDEzIEBACiAgICIvL2NvYmFsdC93ZWJfYW5pbWF0aW9ucy9hbmltYXRpb25fZmlsbF9tb2RlLmlkbCIsCiAgICIvL2NvYmFsdC93ZWJfYW5pbWF0aW9ucy9hbmltYXRpb25fcGxheWJhY2tfZGlyZWN0aW9uLmlkbCIsCiAgICIvL2NvYmFsdC93ZWJzb2NrZXQvY2xvc2VfZXZlbnRfaW5pdC5pZGwiLAorICAiLy9jb2JhbHQvd29ya2VyL25hdmlnYXRpb25fcHJlbG9hZF9zdGF0ZS5pZGwiLAorICAiLy9jb2JhbHQvd29ya2VyL3JlZ2lzdHJhdGlvbl9vcHRpb25zLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfc3RhdGUuaWRsIiwKKyAgIi8vY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl91cGRhdGVfdmlhX2NhY2hlLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvc3RydWN0dXJlZF9zZXJpYWxpemVfb3B0aW9ucy5pZGwiLAorICAiLy9jb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmlkbCIsCisgICIvL2NvYmFsdC93b3JrZXIvd29ya2VyX3R5cGUuaWRsIiwKIF0KIAogIyBQYXJ0aWFsIGludGVyZmFjZXMgYW5kIHRoZSByaWdodC1zaWRlIG9mICJpbXBsZW1lbnRzIi4gQWxzbyBpbmNsdWRlcwpAQCAtMzc1LDUgKzM5Myw2IEBACiAgICIvL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5pZGwiLAogICAiLy9jb2JhbHQvbWVkaWFfY2FwdHVyZS9uYXZpZ2F0b3IuaWRsIiwKICAgIi8vY29iYWx0L21lZGlhX3Nlc3Npb24vbmF2aWdhdG9yX21lZGlhX3Nlc3Npb24uaWRsIiwKKyAgIi8vY29iYWx0L3dvcmtlci9hYnN0cmFjdF93b3JrZXIuaWRsIiwKICAgIi8vY29iYWx0L3dvcmtlci9uYXZpZ2F0b3IuaWRsIiwKIF0KZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbS5jYyBiL2NvYmFsdC9icm93c2VyL21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbS5jYwppbmRleCAxOGQ0N2I4Li5hYWMzMzVkIDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9tZW1vcnlfc2V0dGluZ3MvYXV0b19tZW0uY2MKKysrIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtLmNjCkBAIC0yMzIsMTcgKzIzMiw2IEBACiAKIH0gIC8vIG5hbWVzcGFjZQogCi1BdXRvTWVtOjpBdXRvTWVtKGNvbnN0IG1hdGg6OlNpemUmIHVpX3Jlc29sdXRpb24sCi0gICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgY29tbWFuZF9saW5lX3NldHRpbmdzLAotICAgICAgICAgICAgICAgICBjb25zdCBBdXRvTWVtU2V0dGluZ3MmIGJ1aWxkX3NldHRpbmdzKSB7Ci0gIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkF1dG9NZW06OkF1dG9NZW0oKSIpOwotICBDb25zdHJ1Y3RTZXR0aW5ncyh1aV9yZXNvbHV0aW9uLCBjb21tYW5kX2xpbmVfc2V0dGluZ3MsIGJ1aWxkX3NldHRpbmdzKTsKLQotICBzdGQ6OnZlY3RvcjxNZW1vcnlTZXR0aW5nKj4gbWVtb3J5X3NldHRpbmdzID0gQWxsTWVtb3J5U2V0dGluZ3NNdXRhYmxlKCk7Ci19Ci0KLUF1dG9NZW06On5BdXRvTWVtKCkge30KLQogY29uc3QgSW50U2V0dGluZyogQXV0b01lbTo6cmVtb3RlX3R5cGVmYWNlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKSBjb25zdCB7CiAgIHJldHVybiByZW1vdGVfdHlwZWZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlc18uZ2V0KCk7CiB9CkBAIC0yODYsNyArMjc1LDcgQEAKIH0KIAogLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyBBbGxNZW1vcnlTZXR0aW5ncygpLgotc3RkOjp2ZWN0b3I8TWVtb3J5U2V0dGluZyo+IEF1dG9NZW06OkFsbE1lbW9yeVNldHRpbmdzTXV0YWJsZSgpIHsKK3N0ZDo6dmVjdG9yPE1lbW9yeVNldHRpbmcqPiBBdXRvTWVtOjpBbGxNZW1vcnlTZXR0aW5nc011dGFibGUoKSBjb25zdCB7CiAgIHN0ZDo6dmVjdG9yPE1lbW9yeVNldHRpbmcqPiBhbGxfc2V0dGluZ3M7CiAgIC8vIEtlZXAgdGhlc2UgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgogICBhbGxfc2V0dGluZ3MucHVzaF9iYWNrKGVuY29kZWRfaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc18uZ2V0KCkpOwpAQCAtMjk4LDEwICsyODcsMTIgQEAKICAgcmV0dXJuIGFsbF9zZXR0aW5nczsKIH0KIAotc3RkOjpzdHJpbmcgQXV0b01lbTo6VG9QcmV0dHlQcmludFN0cmluZyhib29sIHVzZV9jb2xvcl9hc2NpaSkgY29uc3Qgewordm9pZCBBdXRvTWVtOjpMb2dUb1ByZXR0eVByaW50U3RyaW5nKGNvbnN0IG1hdGg6OlNpemUmIHVpX3Jlc29sdXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29sb3JfYXNjaWkpIHsKKyNpZiAhZGVmaW5lZChDT0JBTFRfQlVJTERfVFlQRV9HT0xEKQogICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKIAotICBzcyA8PCAiQXV0b01lbTpcbiI7CisgIHNzIDw8ICJBdXRvTWVtIChyZXNvbHV0aW9uOiAiIDw8IHVpX3Jlc29sdXRpb24gPDwgIik6XG4iOwogICBzdGQ6OnZlY3Rvcjxjb25zdCBNZW1vcnlTZXR0aW5nKj4gYWxsX3NldHRpbmdzID0gQWxsTWVtb3J5U2V0dGluZ3MoKTsKICAgc3MgPDwgR2VuZXJhdGVQcmV0dHlQcmludFRhYmxlKHVzZV9jb2xvcl9hc2NpaSwgYWxsX3NldHRpbmdzKTsKIApAQCAtMzQ0LDggKzMzNSwxMiBAQAogICAgIHNzIDw8IE1ha2VCb3JkZXIoc3NfZXJyb3Iuc3RyKCksICcqJyk7CiAgIH0KIAotICBzdGQ6OnN0cmluZyBvdXRwdXRfc3RyID0gc3Muc3RyKCk7Ci0gIHJldHVybiBvdXRwdXRfc3RyOworICBzdGQ6OnN0cmluZyBvdXRwdXRfc3RyKHNzLnN0cigpKTsKKyAgaWYgKG91dHB1dF9zdHIgIT0gcHJldmlvdXNfbG9nXykgeworICAgIExPRyhJTkZPKSA8PCBvdXRwdXRfc3RyOworICAgIHByZXZpb3VzX2xvZ18uc3dhcChvdXRwdXRfc3RyKTsKKyAgfQorI2VuZGlmCiB9CiAKIGludDY0X3QgQXV0b01lbTo6U3VtQWxsTWVtb3J5T2ZUeXBlKApAQCAtMzU2LDYgKzM1MSw3IEBACiB2b2lkIEF1dG9NZW06OkNvbnN0cnVjdFNldHRpbmdzKGNvbnN0IG1hdGg6OlNpemUmIHVpX3Jlc29sdXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgY29tbWFuZF9saW5lX3NldHRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRvTWVtU2V0dGluZ3MmIGJ1aWxkX3NldHRpbmdzKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIkF1dG9NZW06OkNvbnN0cnVjdFNldHRpbmdzKCkiKTsKICAgbWF4X2NwdV9ieXRlc18gPSBDcmVhdGVDcHVTZXR0aW5nKGNvbW1hbmRfbGluZV9zZXR0aW5ncywgYnVpbGRfc2V0dGluZ3MpOwogICBtYXhfZ3B1X2J5dGVzXyA9IENyZWF0ZUdwdVNldHRpbmcoY29tbWFuZF9saW5lX3NldHRpbmdzLCBidWlsZF9zZXR0aW5ncyk7CiAKQEAgLTQ0MSw2ICs0MzcsOCBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFsbF9tZW1vcnlfc2V0dGluZ3Muc2l6ZSgpOyArK2kpIHsKICAgICBDaGVja0NvbnN0cmFpbmluZ1ZhbHVlcygqYWxsX21lbW9yeV9zZXR0aW5nc1tpXSk7CiAgIH0KKworICBMb2dUb1ByZXR0eVByaW50U3RyaW5nKHVpX3Jlc29sdXRpb24sIFNiTG9nSXNUdHkoKSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBtZW1vcnlfc2V0dGluZ3MKZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbS5oIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtLmgKaW5kZXggZTlkZmI4Ny4uODAxNGUxNCAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtLmgKKysrIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtLmgKQEAgLTM3LDEwICszNywxMiBAQAogLy8gY2FsY3VsYXRlZC4KIGNsYXNzIEF1dG9NZW0gewogIHB1YmxpYzoKLSAgZXhwbGljaXQgQXV0b01lbShjb25zdCBtYXRoOjpTaXplJiB1aV9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgY29tbWFuZF9saW5lX3NldHRpbmdzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgYnVpbGRfc2V0dGluZ3MpOwotICB+QXV0b01lbSgpOworICBBdXRvTWVtKCkge30KKyAgfkF1dG9NZW0oKSB7fQorCisgIHZvaWQgQ29uc3RydWN0U2V0dGluZ3MoY29uc3QgbWF0aDo6U2l6ZSYgdWlfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRvTWVtU2V0dGluZ3MmIGNvbW1hbmRfbGluZV9zZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRvTWVtU2V0dGluZ3MmIGJ1aWxkX3NldHRpbmdzKTsKIAogICBjb25zdCBJbnRTZXR0aW5nKiBlbmNvZGVkX2ltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKSBjb25zdDsKICAgY29uc3QgSW50U2V0dGluZyogaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcygpIGNvbnN0OwpAQCAtNTcsMjMgKzU5LDE5IEBACiAgIGNvbnN0IEludFNldHRpbmcqIG1heF9jcHVfYnl0ZXMoKSBjb25zdDsKICAgY29uc3QgSW50U2V0dGluZyogbWF4X2dwdV9ieXRlcygpIGNvbnN0OwogCi0gIC8vIEdlbmVyYXRlcyBhIHN0cmluZyB0YWJsZSBvZiB0aGUgbWVtb3J5IHNldHRpbmdzIGFuZCBhdmFpbGFibGUgbWVtb3J5IGZvcgotICAvLyBjcHUgYW5kIGdwdS4gVGhpcyBpcyB1c2VkIGR1cmluZyBzdGFydHVwIHRvIGRpc3BsYXkgbWVtb3J5IGNvbmZpZ3VyYXRpb24KLSAgLy8gaW5mb3JtYXRpb24uCi0gIHN0ZDo6c3RyaW5nIFRvUHJldHR5UHJpbnRTdHJpbmcoYm9vbCB1c2VfY29sb3JfYXNjaWkpIGNvbnN0OwotCiAgIC8vIFJlcG9ydHMgdGhlIHRvdGFsIG1lbW9yeSB0aGF0IGFsbCBzZXR0aW5ncyB0aGF0IG1hdGNoIG1lbW9yeV90eXBlCiAgIC8vIGNvbnN1bWUuCiAgIGludDY0X3QgU3VtQWxsTWVtb3J5T2ZUeXBlKE1lbW9yeVNldHRpbmc6Ok1lbW9yeVR5cGUgbWVtb3J5X3R5cGUpIGNvbnN0OwogCiAgcHJpdmF0ZToKLSAgdm9pZCBDb25zdHJ1Y3RTZXR0aW5ncyhjb25zdCBtYXRoOjpTaXplJiB1aV9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgY29tbWFuZF9saW5lX3NldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dG9NZW1TZXR0aW5ncyYgYnVpbGRfc2V0dGluZ3MpOworICAvLyBMb2dzIGEgdGFibGUgb2YgdGhlIG1lbW9yeSBzZXR0aW5ncyBhbmQgYXZhaWxhYmxlIG1lbW9yeSBmb3IgY3B1IGFuZCBncHUuCisgIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgc3RhcnR1cCB0byBkaXNwbGF5IG1lbW9yeSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICB2b2lkIExvZ1RvUHJldHR5UHJpbnRTdHJpbmcoY29uc3QgbWF0aDo6U2l6ZSYgdWlfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX2NvbG9yX2FzY2lpKTsKIAogICAvLyBBbGxNZW1vcnlTZXR0aW5ncyAtIGRvZXMgbm90IGluY2x1ZGUgY3B1ICYgZ3B1IG1heCBtZW1vcnkuCiAgIHN0ZDo6dmVjdG9yPGNvbnN0IE1lbW9yeVNldHRpbmcqPiBBbGxNZW1vcnlTZXR0aW5ncygpIGNvbnN0OwotICBzdGQ6OnZlY3RvcjxNZW1vcnlTZXR0aW5nKj4gQWxsTWVtb3J5U2V0dGluZ3NNdXRhYmxlKCk7CisgIHN0ZDo6dmVjdG9yPE1lbW9yeVNldHRpbmcqPiBBbGxNZW1vcnlTZXR0aW5nc011dGFibGUoKSBjb25zdDsKIAogICAvLyBBbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgaW5jbHVkZWQgaW4gQWxsTWVtb3J5U2V0dGluZ3MoKS4KICAgc3RkOjp1bmlxdWVfcHRyPEludFNldHRpbmc+IGVuY29kZWRfaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc187CkBAIC04OCw3ICs4NiwxMCBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8SW50U2V0dGluZz4gbWF4X2NwdV9ieXRlc187CiAgIHN0ZDo6dW5pcXVlX3B0cjxJbnRTZXR0aW5nPiBtYXhfZ3B1X2J5dGVzXzsKIAorI2lmICFkZWZpbmVkKENPQkFMVF9CVUlMRF9UWVBFX0dPTEQpCisgIHN0ZDo6c3RyaW5nIHByZXZpb3VzX2xvZ187CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlcnJvcl9tc2dzXzsKKyNlbmRpZgogCiAgIEZSSUVORF9URVNUKEF1dG9NZW0sIEFsbE1lbW9yeVNldHRpbmdzQXJlT3JkZXJlZEJ5TmFtZSk7CiAgIEZSSUVORF9URVNUKEF1dG9NZW0sIENvbnN0cmFpbmVkQ1BVRW52aXJvbm1lbnQpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3NldHRpbmdzLmNjIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3NldHRpbmdzLmNjCmluZGV4IDIxZjg3YjkuLjcyNjdmM2UgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbV9zZXR0aW5ncy5jYworKysgYi9jb2JhbHQvYnJvd3Nlci9tZW1vcnlfc2V0dGluZ3MvYXV0b19tZW1fc2V0dGluZ3MuY2MKQEAgLTIxMywxOCArMjEzLDYgQEAKICAgc2V0dGluZ3Mub2Zmc2NyZWVuX3RhcmdldF9jYWNoZV9zaXplX2luX2J5dGVzID0KICAgICAgIE1ha2VWYWxpZElmR3JlYXRlclRoYW5PckVxdWFsVG9aZXJvKAogICAgICAgICAgIGNvbmZpZy0+Q29iYWx0T2Zmc2NyZWVuVGFyZ2V0Q2FjaGVTaXplSW5CeXRlcygpKTsKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSNpZiBkZWZpbmVkKENPQkFMVF9NQVhfQ1BVX1VTQUdFX0lOX0JZVEVTKQotICBzZXR0aW5ncy5tYXhfY3B1X2luX2J5dGVzID0KLSAgICAgIE1ha2VWYWxpZElmR3JlYXRlclRoYW5PckVxdWFsVG9aZXJvKENPQkFMVF9NQVhfQ1BVX1VTQUdFX0lOX0JZVEVTKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUFYX0NQVV9VU0FHRV9JTl9CWVRFUykKLSNpZiBkZWZpbmVkKENPQkFMVF9NQVhfR1BVX1VTQUdFX0lOX0JZVEVTKQotICBzZXR0aW5ncy5tYXhfZ3B1X2luX2J5dGVzID0KLSAgICAgIE1ha2VWYWxpZElmR3JlYXRlclRoYW5PckVxdWFsVG9aZXJvKENPQkFMVF9NQVhfR1BVX1VTQUdFX0lOX0JZVEVTKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChDT0JBTFRfTUFYX0dQVV9VU0FHRV9JTl9CWVRFUykKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCiAgIHNldHRpbmdzLnJlZHVjZV9ncHVfbWVtb3J5X2J5ID0KICAgICAgIE1ha2VWYWxpZElmR3JlYXRlclRoYW5PckVxdWFsVG9aZXJvKGNvbmZpZy0+Q29iYWx0UmVkdWNlR3B1TWVtb3J5QnkoKSk7CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL21lbW9yeV9zZXR0aW5ncy9hdXRvX21lbV90ZXN0LmNjIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3Rlc3QuY2MKaW5kZXggYzQ5ZmVmNy4uZGY5YWMxZiAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3Rlc3QuY2MKKysrIGIvY29iYWx0L2Jyb3dzZXIvbWVtb3J5X3NldHRpbmdzL2F1dG9fbWVtX3Rlc3QuY2MKQEAgLTYzLDcgKzYzLDkgQEAKICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gMTsgKytpKSB7CiAgICAgQXV0b01lbVNldHRpbmdzIGJ1aWxkX3NldHRpbmdzID0gR2V0RGVmYXVsdEJ1aWxkU2V0dGluZ3MoKTsKIAotICAgIEF1dG9NZW0gYXV0b19tZW0oa1Jlc29sdXRpb24xMDgwcCwgY29tbWFuZF9saW5lX3NldHRpbmdzLCBidWlsZF9zZXR0aW5ncyk7CisgICAgQXV0b01lbSBhdXRvX21lbTsKKyAgICBhdXRvX21lbS5Db25zdHJ1Y3RTZXR0aW5ncyhrUmVzb2x1dGlvbjEwODBwLCBjb21tYW5kX2xpbmVfc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc2V0dGluZ3MpOwogCiAgICAgRVhQRUNUX01FTU9SWV9TRVRUSU5HKGF1dG9fbWVtLmltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5U2V0dGluZzo6a0NtZExpbmUsIE1lbW9yeVNldHRpbmc6OmtHUFUsIDEyMzQpOwpAQCAtOTIsNyArOTQsOSBAQAogICBBdXRvTWVtU2V0dGluZ3MgYnVpbGRfc2V0dGluZ3MoQXV0b01lbVNldHRpbmdzOjprVHlwZUJ1aWxkKTsKICAgYnVpbGRfc2V0dGluZ3MuY29iYWx0X2ltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMgPSAxMjM0OwogCi0gIEF1dG9NZW0gYXV0b19tZW0oa1Jlc29sdXRpb24xMDgwcCwgY29tbWFuZF9saW5lX3NldHRpbmdzLCBidWlsZF9zZXR0aW5ncyk7CisgIEF1dG9NZW0gYXV0b19tZW07CisgIGF1dG9fbWVtLkNvbnN0cnVjdFNldHRpbmdzKGtSZXNvbHV0aW9uMTA4MHAsIGNvbW1hbmRfbGluZV9zZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc2V0dGluZ3MpOwogCiAgIEVYUEVDVF9NRU1PUllfU0VUVElORygKICAgICAgIGF1dG9fbWVtLmltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMoKSwgTWVtb3J5U2V0dGluZzo6a0F1dG9TZXQsCkBAIC0xMTEsOSArMTE1LDEyIEBACiAgIGJ1aWxkX3NldHRpbmdzX3dpdGhfZGVmYXVsdC5za2lhX3RleHR1cmVfYXRsYXNfZGltZW5zaW9ucyA9CiAgICAgICBUZXh0dXJlRGltZW5zaW9ucygxMjM0LCA1Njc4LCAyKTsKIAotICBBdXRvTWVtIGF1dG9fbWVtKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwgYnVpbGRfc2V0dGluZ3MpOwotICBBdXRvTWVtIGF1dG9fbWVtX3dpdGhfZGVmYXVsdChrUmVzb2x1dGlvbjEwODBwLCBFbXB0eUNvbW1hbmRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NldHRpbmdzX3dpdGhfZGVmYXVsdCk7CisgIEF1dG9NZW0gYXV0b19tZW07CisgIGF1dG9fbWVtLkNvbnN0cnVjdFNldHRpbmdzKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc2V0dGluZ3MpOworICBBdXRvTWVtIGF1dG9fbWVtX3dpdGhfZGVmYXVsdDsKKyAgYXV0b19tZW1fd2l0aF9kZWZhdWx0LkNvbnN0cnVjdFNldHRpbmdzKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NldHRpbmdzX3dpdGhfZGVmYXVsdCk7CiAKICAgLy8gRXhwZWN0IHRoYXQgd2hlbiB0aGUgc2tpYV9hdGxhc190ZXh0dXJlX2RpbWVuc2lvbnMgaXMgc3BlY2lmaWVkIGluIHRoZQogICAvLyBidWlsZCBzZXR0aW5ncyB0aGF0IGl0IHdpbGwgYmluZCB0byB0aGUgYXV0by1zZXQgdmFsdWUgKGNvbXB1dGVkIGZyb20KQEAgLTEzNiw5ICsxNDMsMTIgQEAKICAgQXV0b01lbVNldHRpbmdzIGJ1aWxkX3NldHRpbmdzX3dpdGhfZGVmYXVsdChBdXRvTWVtU2V0dGluZ3M6OmtUeXBlQnVpbGQpOwogICBidWlsZF9zZXR0aW5nc193aXRoX2RlZmF1bHQuc2tpYV9jYWNoZV9zaXplX2luX2J5dGVzID0gMTIzNDsKIAotICBBdXRvTWVtIGF1dG9fbWVtKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwgYnVpbGRfc2V0dGluZ3MpOwotICBBdXRvTWVtIGF1dG9fbWVtX3dpdGhfc2tpYV9jYWNoZShrUmVzb2x1dGlvbjEwODBwLCBFbXB0eUNvbW1hbmRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NldHRpbmdzX3dpdGhfZGVmYXVsdCk7CisgIEF1dG9NZW0gYXV0b19tZW07CisgIGF1dG9fbWVtLkNvbnN0cnVjdFNldHRpbmdzKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfc2V0dGluZ3MpOworICBBdXRvTWVtIGF1dG9fbWVtX3dpdGhfc2tpYV9jYWNoZTsKKyAgYXV0b19tZW1fd2l0aF9za2lhX2NhY2hlLkNvbnN0cnVjdFNldHRpbmdzKAorICAgICAga1Jlc29sdXRpb24xMDgwcCwgRW1wdHlDb21tYW5kTGluZSgpLCBidWlsZF9zZXR0aW5nc193aXRoX2RlZmF1bHQpOwogCiAgIEVYUEVDVF9NRU1PUllfU0VUVElORyhhdXRvX21lbS5za2lhX2NhY2hlX3NpemVfaW5fYnl0ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVNldHRpbmc6OmtBdXRvU2V0LCBNZW1vcnlTZXR0aW5nOjprR1BVLApAQCAtMTUyLDcgKzE2Miw5IEBACiBURVNUKEF1dG9NZW0sIEFsbE1lbW9yeVNldHRpbmdzQXJlT3JkZXJlZEJ5TmFtZSkgewogICBBdXRvTWVtU2V0dGluZ3MgYnVpbGRfc2V0dGluZ3MoQXV0b01lbVNldHRpbmdzOjprVHlwZUJ1aWxkKTsKIAotICBBdXRvTWVtIGF1dG9fbWVtKGtSZXNvbHV0aW9uMTA4MHAsIEVtcHR5Q29tbWFuZExpbmUoKSwgYnVpbGRfc2V0dGluZ3MpOworICBBdXRvTWVtIGF1dG9fbWVtOworICBhdXRvX21lbS5Db25zdHJ1Y3RTZXR0aW5ncyhrUmVzb2x1dGlvbjEwODBwLCBFbXB0eUNvbW1hbmRMaW5lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NldHRpbmdzKTsKIAogICBzdGQ6OnZlY3Rvcjxjb25zdCBNZW1vcnlTZXR0aW5nKj4gc2V0dGluZ3MgPSBhdXRvX21lbS5BbGxNZW1vcnlTZXR0aW5ncygpOwogCkBAIC0xNjcsNyArMTc5LDkgQEAKICAgQXV0b01lbVNldHRpbmdzIGNvbW1hbmRfbGluZV9zZXR0aW5ncyhBdXRvTWVtU2V0dGluZ3M6OmtUeXBlQ29tbWFuZExpbmUpOwogICBBdXRvTWVtU2V0dGluZ3MgYnVpbGRfc2V0dGluZ3MoQXV0b01lbVNldHRpbmdzOjprVHlwZUJ1aWxkKTsKIAotICBBdXRvTWVtIGF1dG9fbWVtKGtSZXNvbHV0aW9uMTA4MHAsIGNvbW1hbmRfbGluZV9zZXR0aW5ncywgYnVpbGRfc2V0dGluZ3MpOworICBBdXRvTWVtIGF1dG9fbWVtOworICBhdXRvX21lbS5Db25zdHJ1Y3RTZXR0aW5ncyhrUmVzb2x1dGlvbjEwODBwLCBjb21tYW5kX2xpbmVfc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3NldHRpbmdzKTsKIAogICBFWFBFQ1RfRVEoU2JTeXN0ZW1IYXNDYXBhYmlsaXR5KGtTYlN5c3RlbUNhcGFiaWxpdHlDYW5RdWVyeUdQVU1lbW9yeVN0YXRzKSwKICAgICAgICAgICAgIGF1dG9fbWVtLm1heF9ncHVfYnl0ZXMoKS0+dmFsaWQoKSk7CmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9udWxsX3dlYmFwaV9leHRlbnNpb24uY2MgYi9jb2JhbHQvYnJvd3Nlci9udWxsX3dlYmFwaV9leHRlbnNpb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiODFlZjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L2Jyb3dzZXIvbnVsbF93ZWJhcGlfZXh0ZW5zaW9uLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oIgotCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIGJyb3dzZXIgewotCi1iYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKCkgewotICByZXR1cm4gYmFzZTo6bnVsbG9wdDsKLX0KLQotc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OldyYXBwYWJsZT4gQ3JlYXRlV2ViQVBJRXh0ZW5zaW9uT2JqZWN0KAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8ZG9tOjpXaW5kb3c+JiB3aW5kb3csCi0gICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudCogZ2xvYmFsX2Vudmlyb25tZW50KSB7Ci0KLSAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQgaWYgR2V0V2luZG93RXh0ZW5zaW9uT2JqZWN0TmFtZSgpIGFib3ZlIHJldHVybnMKLSAgLy8gYmFzZTo6bnVsbG9wdC4KLSAgTk9UUkVBQ0hFRCgpOwotCi0gIHJldHVybiBzY29wZWRfcmVmcHRyPHNjcmlwdDo6V3JhcHBhYmxlPigpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgYnJvd3NlcgotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL251bGxfd2ViYXBpX2V4dGVuc2lvbi5neXAgYi9jb2JhbHQvYnJvd3Nlci9udWxsX3dlYmFwaV9leHRlbnNpb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDgxYTY4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9icm93c2VyL251bGxfd2ViYXBpX2V4dGVuc2lvbi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ251bGxfd2ViYXBpX2V4dGVuc2lvbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ251bGxfd2ViYXBpX2V4dGVuc2lvbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwOnNjcmlwdCcsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvb25fc2NyZWVuX2tleWJvYXJkX3N0YXJib2FyZF9icmlkZ2UuY2MgYi9jb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5jYwppbmRleCAxZWYzN2IyLi4zOWI5OThjIDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5jYworKysgYi9jb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5jYwpAQCAtMTQsMjEgKzE0LDE4IEBACiAKICNpbmNsdWRlICJjb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5oIgogCisjaW5jbHVkZSA8bWVtb3J5PgorCiAjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCiAjaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V2ZW50LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgYnJvd3NlciB7CiAvLyBzdGF0aWMKIGJvb2wgT25TY3JlZW5LZXlib2FyZFN0YXJib2FyZEJyaWRnZTo6SXNTdXBwb3J0ZWQoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgcmV0dXJuIFNiV2luZG93T25TY3JlZW5LZXlib2FyZElzU3VwcG9ydGVkKCk7Ci0jZWxzZQotICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogfQogCiB2b2lkIE9uU2NyZWVuS2V5Ym9hcmRTdGFyYm9hcmRCcmlkZ2U6OlNob3coY29uc3QgY2hhciogaW5wdXRfdGV4dCwgaW50IHRpY2tldCkgewpAQCAtNzEsMTMgKzY4LDEzIEBACiB9CiAKIGJvb2wgT25TY3JlZW5LZXlib2FyZFN0YXJib2FyZEJyaWRnZTo6U3VnZ2VzdGlvbnNTdXBwb3J0ZWQoKSBjb25zdCB7Ci0vLyBEZWxheSBwcm92aWRpbmcgdGhlIFNiV2luZG93IHVudGlsIGFzIGxhdGUgYXMgcG9zc2libGUuCisgIC8vIERlbGF5IHByb3ZpZGluZyB0aGUgU2JXaW5kb3cgdW50aWwgYXMgbGF0ZSBhcyBwb3NzaWJsZS4KICAgcmV0dXJuIFNiV2luZG93T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zU3VwcG9ydGVkKAogICAgICAgc2Jfd2luZG93X3Byb3ZpZGVyXy5SdW4oKSk7CiB9CiAKLXNjb3BlZF9yZWZwdHI8ZG9tOjpET01SZWN0PgotT25TY3JlZW5LZXlib2FyZFN0YXJib2FyZEJyaWRnZTo6Qm91bmRpbmdSZWN0KCkgY29uc3Qgeworc2NvcGVkX3JlZnB0cjxkb206OkRPTVJlY3Q+IE9uU2NyZWVuS2V5Ym9hcmRTdGFyYm9hcmRCcmlkZ2U6OkJvdW5kaW5nUmVjdCgpCisgICAgY29uc3QgewogICAvLyBEZWxheSBwcm92aWRpbmcgdGhlIFNiV2luZG93IHVudGlsIGFzIGxhdGUgYXMgcG9zc2libGUuCiAgIFNiV2luZG93UmVjdCBzYl93aW5kb3dfcmVjdCA9IFNiV2luZG93UmVjdCgpOwogICBpZiAoIVNiV2luZG93R2V0T25TY3JlZW5LZXlib2FyZEJvdW5kaW5nUmVjdChzYl93aW5kb3dfcHJvdmlkZXJfLlJ1bigpLApAQCAtMTAxLDUgKzk4LDMgQEAKIH0KIH0gIC8vIG5hbWVzcGFjZSBicm93c2VyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5oIGIvY29iYWx0L2Jyb3dzZXIvb25fc2NyZWVuX2tleWJvYXJkX3N0YXJib2FyZF9icmlkZ2UuaAppbmRleCA0YjdiY2ZiLi5mNzNjYzExIDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9vbl9zY3JlZW5fa2V5Ym9hcmRfc3RhcmJvYXJkX2JyaWRnZS5oCisrKyBiL2NvYmFsdC9icm93c2VyL29uX3NjcmVlbl9rZXlib2FyZF9zdGFyYm9hcmRfYnJpZGdlLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJjb2JhbHQvZG9tL29uX3NjcmVlbl9rZXlib2FyZF9icmlkZ2UuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgYnJvd3NlciB7CiAKQEAgLTY1LDYgKzY0LDQgQEAKIAogfSAgLy8gbmFtZXNwYWNlIGJyb3dzZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICNlbmRpZiAgLy8gQ09CQUxUX0JST1dTRVJfT05fU0NSRUVOX0tFWUJPQVJEX1NUQVJCT0FSRF9CUklER0VfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJ5LmNjIGIvY29iYWx0L2Jyb3dzZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cnkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFhM2E0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9icm93c2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJ5LmNjCkBAIC0wLDAgKzEsOTEgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC9icm93c2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJ5LmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL2JpbmQuaCIKKyNpbmNsdWRlICJiYXNlL21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuaCIKKyNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudC5oIgorI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZC5oIgorI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfam9icy5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSBicm93c2VyIHsKKworbmFtZXNwYWNlIHsKKy8vIFNpZ25hbHMgdGhlIGdpdmVuIFdhaXRhYmxlRXZlbnQuCit2b2lkIFNpZ25hbFdhaXRhYmxlRXZlbnQoYmFzZTo6V2FpdGFibGVFdmVudCogZXZlbnQpIHsgZXZlbnQtPlNpZ25hbCgpOyB9Cit9ICAvLyBuYW1lc3BhY2UKKwordm9pZCBTZXJ2aWNlV29ya2VyUmVnaXN0cnk6OldpbGxEZXN0cm95Q3VycmVudE1lc3NhZ2VMb29wKCkgeworICAvLyBUT0RPIGNsZWFyIGFsbCBtZW1iZXIgdmFyaWFibGVzIGFsbG9jYXRlZCBmb3JtIHRoZSB0aHJlYWQuCisgIHNlcnZpY2Vfd29ya2VyX2pvYnNfLnJlc2V0KCk7Cit9CisKK1NlcnZpY2VXb3JrZXJSZWdpc3RyeTo6U2VydmljZVdvcmtlclJlZ2lzdHJ5KAorICAgIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlKQorICAgIDogdGhyZWFkXygiU2VydmljZVdvcmtlclJlZ2lzdHJ5IikgeworICBpZiAoIXRocmVhZF8uU3RhcnQoKSkgcmV0dXJuOworICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOworCisgIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmU2VydmljZVdvcmtlclJlZ2lzdHJ5OjpJbml0aWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcyksIG5ldHdvcmtfbW9kdWxlKSk7CisKKyAgLy8gUmVnaXN0ZXIgYXMgYSBkZXN0cnVjdGlvbiBvYnNlcnZlciB0byBzaHV0IGRvd24gdGhlIFdlYiBBZ2VudCBvbmNlIGFsbAorICAvLyBwZW5kaW5nIHRhc2tzIGhhdmUgYmVlbiBleGVjdXRlZCBhbmQgdGhlIG1lc3NhZ2UgbG9vcCBpcyBhYm91dCB0byBiZQorICAvLyBkZXN0cm95ZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHNhZmVseSBzdG9wIHRoZSB0aHJlYWQsIGRyYWluIHRoZSB0YXNrIHF1ZXVlLAorICAvLyB0aGVuIGRlc3Ryb3kgdGhlIGludGVybmFsIGNvbXBvbmVudHMgYmVmb3JlIHRoZSBtZXNzYWdlIGxvb3AgaXMgcmVzZXQuCisgIC8vIE5vIHBvc3RlZCB0YXNrcyB3aWxsIGJlIGV4ZWN1dGVkIG9uY2UgdGhlIHRocmVhZCBpcyBzdG9wcGVkLgorICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCisgICAgICBGUk9NX0hFUkUsCisgICAgICBiYXNlOjpCaW5kKCZiYXNlOjpNZXNzYWdlTG9vcDo6QWRkRGVzdHJ1Y3Rpb25PYnNlcnZlciwKKyAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChtZXNzYWdlX2xvb3AoKSksIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKKworICAvLyBUaGlzIHdvcmtzIGFsbW9zdCBsaWtlIGEgUG9zdEJsb2NraW5nVGFzaywgZXhjZXB0IHRoYXQgYW55IGJsb2NraW5nIHRoYXQKKyAgLy8gbWF5IGJlIG5lY2Vzc2FyeSBoYXBwZW5zIHdoZW4gU3RvcCgpIGlzIGNhbGxlZCBpbnN0ZWFkIG9mIHJpZ2h0IG5vdy4KKyAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAorICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZTaWduYWxXYWl0YWJsZUV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoJmRlc3RydWN0aW9uX29ic2VydmVyX2FkZGVkXykpKTsKK30KKworU2VydmljZVdvcmtlclJlZ2lzdHJ5Ojp+U2VydmljZVdvcmtlclJlZ2lzdHJ5KCkgeworICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOworICBEQ0hFQ0sodGhyZWFkXy5Jc1J1bm5pbmcoKSk7CisKKyAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9ic2VydmVyIGdvdCBhZGRlZCBiZWZvcmUgc3RvcHBpbmcgdGhlIHRocmVhZC4KKyAgLy8gU3RvcCB0aGUgdGhyZWFkLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGRlc3RydWN0aW9uIG9ic2VydmVyIHRvIGJlIG5vdGlmaWVkLgorICBkZXN0cnVjdGlvbl9vYnNlcnZlcl9hZGRlZF8uV2FpdCgpOworICB0aHJlYWRfLlN0b3AoKTsKK30KKword29ya2VyOjpTZXJ2aWNlV29ya2VySm9icyogU2VydmljZVdvcmtlclJlZ2lzdHJ5OjpzZXJ2aWNlX3dvcmtlcl9qb2JzKCkgeworICAvLyBFbnN1cmUgdGhhdCB0aGUgdGhyZWFkIGhhZCBhIGNoYW5jZSB0byBhbGxvY2F0ZSB0aGUgb2JqZWN0LgorICBkZXN0cnVjdGlvbl9vYnNlcnZlcl9hZGRlZF8uV2FpdCgpOworICByZXR1cm4gc2VydmljZV93b3JrZXJfam9ic18uZ2V0KCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlclJlZ2lzdHJ5OjpJbml0aWFsaXplKG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIlNlcnZpY2VXb3JrZXJSZWdpc3RyeTo6SW5pdGlhbGl6ZSgpIik7CisgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7CisgIHNlcnZpY2Vfd29ya2VyX2pvYnNfLnJlc2V0KAorICAgICAgbmV3IHdvcmtlcjo6U2VydmljZVdvcmtlckpvYnMobmV0d29ya19tb2R1bGUsIG1lc3NhZ2VfbG9vcCgpKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBicm93c2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyeS5oIGIvY29iYWx0L2Jyb3dzZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQyMzliCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2Jyb3dzZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cnkuaApAQCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX0JST1dTRVJfU0VSVklDRV9XT1JLRVJfUkVHSVNUUllfSF8KKyNkZWZpbmUgQ09CQUxUX0JST1dTRVJfU0VSVklDRV9XT1JLRVJfUkVHSVNUUllfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgorI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL3dhaXRhYmxlX2V2ZW50LmgiCisjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkLmgiCisjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2pvYnMuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgYnJvd3NlciB7CisKKy8vIFRoZSBTZXJ2aWNlIFdvcmtlciBSZWdpc3RyeSB0cmFja3MgYWxsIHJlZ2lzdGVyZWQgc2VydmljZSB3b3JrZXJzLCBwcm9jZXNzZXMKKy8vIG11dGF0aW9ucyB0byB0aGUgcmVnaXN0cnkgaW4gYSB0aHJlYWQsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIHNjcmlwdHMgYW5kCisvLyBtZXRhZGF0YSBhcmUgc3RvcmVkIHBlcnNpc3RlbnRseSBvbiBkaXNrLgorY2xhc3MgU2VydmljZVdvcmtlclJlZ2lzdHJ5IDogcHVibGljIGJhc2U6Ok1lc3NhZ2VMb29wOjpEZXN0cnVjdGlvbk9ic2VydmVyIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFNlcnZpY2VXb3JrZXJSZWdpc3RyeShuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSk7CisgIH5TZXJ2aWNlV29ya2VyUmVnaXN0cnkoKTsKKworICAvLyBUaGUgbWVzc2FnZSBsb29wIHRoaXMgb2JqZWN0IGlzIHJ1bm5pbmcgb24uCisgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCB7IHJldHVybiB0aHJlYWRfLm1lc3NhZ2VfbG9vcCgpOyB9CisKKyAgLy8gRnJvbSBiYXNlOjpNZXNzYWdlTG9vcDo6RGVzdHJ1Y3Rpb25PYnNlcnZlci4KKyAgdm9pZCBXaWxsRGVzdHJveUN1cnJlbnRNZXNzYWdlTG9vcCgpIG92ZXJyaWRlOworCisgIHdvcmtlcjo6U2VydmljZVdvcmtlckpvYnMqIHNlcnZpY2Vfd29ya2VyX2pvYnMoKTsKKworIHByaXZhdGU6CisgIC8vIENhbGxlZCBieSB0aGUgY29uc3RydWN0b3IgdG8gcGVyZm9ybSBhbnkgb3RoZXIgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgb24KKyAgLy8gdGhlIGRlZGljYXRlZCB0aHJlYWQuCisgIHZvaWQgSW5pdGlhbGl6ZShuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSk7CisKKyAgLy8gVGhlIHRocmVhZCBjcmVhdGVkIGFuZCBvd25lZCBieSB0aGUgU2VydmljZSBXb3JrZXIgUmVnaXN0cnkuCisgIC8vIEFsbCByZWdpc3RyeSBtdXRhdGlvbnMgb2NjdXIgb24gdGhpcyB0aHJlYWQuIFRoZSB0aHJlYWQgaGFzIHRvIG91dGxpdmUgYWxsCisgIC8vIHdlYiBBZ2VudHMgdGhhdCB1c2Ugc2VydmljZSB3b3JrZXJzLiwKKyAgYmFzZTo6VGhyZWFkIHRocmVhZF87CisKKyAgLy8gVGhpcyBldmVudCBpcyB1c2VkIHRvIHNpZ25hbCB3aGVuIHRoZSBkZXN0cnVjdGlvbiBvYnNlcnZlcnMgaGF2ZSBiZWVuCisgIC8vIGFkZGVkIHRvIHRoZSBtZXNzYWdlIGxvb3AuIFRoaXMgaXMgdGhlbiB1c2VkIGluIFN0b3AoKSB0byBlbnN1cmUgdGhhdAorICAvLyBwcm9jZXNzaW5nIGRvZXNuJ3QgY29udGludWUgdW50aWwgdGhlIHRocmVhZCBpcyBjbGVhbmx5IHNodXRkb3duLgorICBiYXNlOjpXYWl0YWJsZUV2ZW50IGRlc3RydWN0aW9uX29ic2VydmVyX2FkZGVkXyA9IHsKKyAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OlJlc2V0UG9saWN5OjpNQU5VQUwsCisgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50OjpJbml0aWFsU3RhdGU6Ok5PVF9TSUdOQUxFRH07CisKKyAgc3RkOjp1bmlxdWVfcHRyPHdvcmtlcjo6U2VydmljZVdvcmtlckpvYnM+IHNlcnZpY2Vfd29ya2VyX2pvYnNfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGJyb3dzZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfQlJPV1NFUl9TRVJWSUNFX1dPUktFUl9SRUdJU1RSWV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvc3BsYXNoX3NjcmVlbi5jYyBiL2NvYmFsdC9icm93c2VyL3NwbGFzaF9zY3JlZW4uY2MKaW5kZXggNzUxMDAxYy4uYmQ2NDJkYyAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvc3BsYXNoX3NjcmVlbi5jYworKysgYi9jb2JhbHQvYnJvd3Nlci9zcGxhc2hfc2NyZWVuLmNjCkBAIC02NSwxMiArNjUsMTIgQEAKICAgICAgIHNlbGZfbWVzc2FnZV9sb29wXyhiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKSwKICAgICAgIG9uX3NwbGFzaF9zY3JlZW5fc2h1dGRvd25fY29tcGxldGVfKG9uX3NwbGFzaF9zY3JlZW5fc2h1dGRvd25fY29tcGxldGUpLAogICAgICAgc2h1dGRvd25fc2lnbmFsZWRfKGZhbHNlKSB7Ci0gIFdlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfbW9kdWxlX29wdGlvbnM7Ci0gIHdlYl9tb2R1bGVfb3B0aW9ucy5uYW1lID0gIlNwbGFzaFNjcmVlbldlYk1vZHVsZSI7CisgIFdlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfbW9kdWxlX29wdGlvbnMoIlNwbGFzaFNjcmVlbldlYk1vZHVsZSIpOwogCiAgIC8vIFdlIHdhbnQgdGhlIHNwbGFzaCBzY3JlZW4gdG8gbG9hZCBhbmQgYXBwZWFyIGFzIHF1aWNrbHkgYXMgcG9zc2libGUsIHNvCiAgIC8vIHdlIHNldCBpdCBhbmQgaXRzIGltYWdlIGRlY29kaW5nIHRocmVhZCB0byBiZSBoaWdoIHByaW9yaXR5LgotICB3ZWJfbW9kdWxlX29wdGlvbnMudGhyZWFkX3ByaW9yaXR5ID0gYmFzZTo6VGhyZWFkUHJpb3JpdHk6OkhJR0hFU1Q7CisgIHdlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucy50aHJlYWRfcHJpb3JpdHkgPQorICAgICAgYmFzZTo6VGhyZWFkUHJpb3JpdHk6OkhJR0hFU1Q7CiAgIHdlYl9tb2R1bGVfb3B0aW9ucy5sb2FkZXJfdGhyZWFkX3ByaW9yaXR5ID0gYmFzZTo6VGhyZWFkUHJpb3JpdHk6OkhJR0hFU1Q7CiAgIHdlYl9tb2R1bGVfb3B0aW9ucy5hbmltYXRlZF9pbWFnZV9kZWNvZGVfdGhyZWFkX3ByaW9yaXR5ID0KICAgICAgIGJhc2U6OlRocmVhZFByaW9yaXR5OjpISUdIRVNUOwpAQCAtODAsNyArODAsMTAgQEAKICAgICAgICAgIChzcGxhc2hfc2NyZWVuX2NhY2hlICYmIHNwbGFzaF9zY3JlZW5fY2FjaGUtPklzU3BsYXNoU2NyZWVuQ2FjaGVkKCkpKTsKICAgaWYgKHNwbGFzaF9zY3JlZW5fY2FjaGUgJiYgc3BsYXNoX3NjcmVlbl9jYWNoZS0+SXNTcGxhc2hTY3JlZW5DYWNoZWQoKSkgewogICAgIHVybF90b19wYXNzID0gc3BsYXNoX3NjcmVlbl9jYWNoZS0+R2V0Q2FjaGVkU3BsYXNoU2NyZWVuVXJsKCk7Ci0gICAgd2ViX21vZHVsZV9vcHRpb25zLmNhbl9mZXRjaF9jYWNoZSA9IHRydWU7CisgICAgd2ViX21vZHVsZV9vcHRpb25zLndlYl9vcHRpb25zLnJlYWRfY2FjaGVfY2FsbGJhY2sgPQorICAgICAgICBiYXNlOjpCaW5kKCZicm93c2VyOjpTcGxhc2hTY3JlZW5DYWNoZTo6UmVhZENhY2hlZFNwbGFzaFNjcmVlbiwKKyAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHNwbGFzaF9zY3JlZW5fY2FjaGUpKTsKKwogICAgIHdlYl9tb2R1bGVfb3B0aW9ucy5zcGxhc2hfc2NyZWVuX2NhY2hlID0gc3BsYXNoX3NjcmVlbl9jYWNoZTsKICAgfQogCkBAIC05NywxNCArMTAwLDE2IEBACiAgIC8vIFBhc3MgZG93biB0aGlzIGNhbGxiYWNrIGZyb20gQnJvd3NlciBtb2R1bGUgdG8gV2ViIG1vZHVsZSBldmVudHVhbGx5LgogICB3ZWJfbW9kdWxlX29wdGlvbnMubWF5YmVfZnJlZXplX2NhbGxiYWNrID0gbWF5YmVfZnJlZXplX2NhbGxiYWNrOwogCisgIHdlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucy5uZXR3b3JrX21vZHVsZSA9IG5ldHdvcmtfbW9kdWxlOworCiAgIERDSEVDSyh1cmxfdG9fcGFzcyk7CiAgIHdlYl9tb2R1bGVfLnJlc2V0KG5ldyBXZWJNb2R1bGUoCiAgICAgICAqdXJsX3RvX3Bhc3MsIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsIHJlbmRlcl90cmVlX3Byb2R1Y2VkX2NhbGxiYWNrXywKICAgICAgIGJhc2U6OkJpbmQoJk9uRXJyb3IpLCBvbl93aW5kb3dfY2xvc2UsCiAgICAgICBiYXNlOjpDbG9zdXJlKCksICAvLyB3aW5kb3dfbWluaW1pemVfY2FsbGJhY2sKICAgICAgIE5VTEwgLyogY2FuX3BsYXlfdHlwZV9oYW5kbGVyICovLCBOVUxMIC8qIG1lZGlhX21vZHVsZSAqLywKLSAgICAgIG5ldHdvcmtfbW9kdWxlLCB3aW5kb3dfZGltZW5zaW9ucywgcmVzb3VyY2VfcHJvdmlkZXIsIGxheW91dF9yZWZyZXNoX3JhdGUsCi0gICAgICB3ZWJfbW9kdWxlX29wdGlvbnMpKTsKKyAgICAgIHdpbmRvd19kaW1lbnNpb25zLCByZXNvdXJjZV9wcm92aWRlciwgbGF5b3V0X3JlZnJlc2hfcmF0ZSwKKyAgICAgIE5VTEwgLyogc2VydmljZV93b3JrZXJfam9icyAqLywgd2ViX21vZHVsZV9vcHRpb25zKSk7CiB9CiAKIFNwbGFzaFNjcmVlbjo6flNwbGFzaFNjcmVlbigpIHsKZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL3N0YWNrX3NpemVfY29uc3RhbnRzLmggYi9jb2JhbHQvYnJvd3Nlci9zdGFja19zaXplX2NvbnN0YW50cy5oCmluZGV4IDA2ZWQ5NWQuLjQyYjlkZmEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL3N0YWNrX3NpemVfY29uc3RhbnRzLmgKKysrIGIvY29iYWx0L2Jyb3dzZXIvc3RhY2tfc2l6ZV9jb25zdGFudHMuaApAQCAtMzAsNiArMzAsOCBAQAogI2VuZGlmCiBjb25zdCBzaXplX3Qga1dlYk1vZHVsZVN0YWNrU2l6ZSA9CiAgICAga0Jhc2VTdGFja1NpemUgKyBiYXNlOjprQXNhbkFkZGl0aW9uYWxTdGFja1NpemU7CisKK2NvbnN0IHNpemVfdCBrV29ya2VyU3RhY2tTaXplID0ga0Jhc2VTdGFja1NpemUgKyBiYXNlOjprQXNhbkFkZGl0aW9uYWxTdGFja1NpemU7CiB9ICAvLyBuYW1lc3BhY2UgYnJvd3NlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAogCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9zd2l0Y2hlcy5jYyBiL2NvYmFsdC9icm93c2VyL3N3aXRjaGVzLmNjCmluZGV4IDE3OGRkZTMuLjAzMTJlYWYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL3N3aXRjaGVzLmNjCisrKyBiL2NvYmFsdC9icm93c2VyL3N3aXRjaGVzLmNjCkBAIC0xMzMsMTEgKzEzMyw2IEBACiAgICAgInNlc3Npb25zIGFuZCBubyBkYXRhIGJlaW5nIHBlcnNpc3RlZCB0byBmdXR1cmUgc2Vzc2lvbnMuIEl0IGVmZmVjdGl2ZWx5ICIKICAgICAibWFrZXMgdGhlIGFwcCBydW4gYXMgaWYgaXQgaGFzIG5vIGxvY2FsIHN0b3JhZ2UuIjsKIAotY29uc3QgY2hhciBrRGlzYWJsZVBhcnRpYWxMYXlvdXRbXSA9ICJkaXNhYmxlX3BhcnRpYWxfbGF5b3V0IjsKLWNvbnN0IGNoYXIga0Rpc2FibGVQYXJ0aWFsTGF5b3V0SGVscFtdID0KLSAgICAiQ2F1c2VzIGxheW91dCB0byByZS1jb21wdXRlIHRoZSBib3hlcyBmb3IgdGhlIGVudGlyZSBET00gcmF0aGVyIHRoYW4gIgotICAgICJyZS11c2luZyBib3hlcyBmb3IgZWxlbWVudHMgdGhhdCBoYXZlIG5vdCBiZWVuIGludmFsaWRhdGVkLiI7Ci0KIGNvbnN0IGNoYXIga1Byb2RbXSA9ICJwcm9kIjsKIGNvbnN0IGNoYXIga1Byb2RIZWxwW10gPQogICAgICJTZXZlcmFsIGNoZWNrcyBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBub24tcHJvZHVjdGlvbihnb2xkKSBidWlsZC4gIgpAQCAtMjE3LDE1ICsyMTIsMTYgQEAKIGNvbnN0IGNoYXIga1dlYkRyaXZlclBvcnRIZWxwW10gPQogICAgICJQb3J0IHRoYXQgdGhlIFdlYkRyaXZlciBzZXJ2ZXIgc2hvdWxkIGJlIGxpc3RlbmluZyBvbi4iOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIGNvbnN0IGNoYXIga0Rpc2FibGVPblNjcmVlbktleWJvYXJkW10gPSAiZGlzYWJsZV9vbl9zY3JlZW5fa2V5Ym9hcmQiOwogY29uc3QgY2hhciBrRGlzYWJsZU9uU2NyZWVuS2V5Ym9hcmRIZWxwW10gPQogICAgICJEaXNhYmxlIHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgZm9yIHRlc3RpbmcuIjsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIAogI2VuZGlmICAvLyBFTkFCTEVfREVCVUdfQ09NTUFORF9MSU5FX1NXSVRDSEVTCiAKK2NvbnN0IGNoYXIga0NvbXByZXNzVXBkYXRlW10gPSAiY29tcHJlc3NfdXBkYXRlIjsKK2NvbnN0IGNoYXIga0NvbXByZXNzVXBkYXRlSGVscFtdID0KKyAgICAiVGhlIHVwZGF0ZXIgc2hvdWxkIGNvbXByZXNzIHRoZSB1cGRhdGUgcGFja2FnZSI7CisKIGNvbnN0IGNoYXIga01pbkxvZ0xldmVsW10gPSAibWluX2xvZ19sZXZlbCI7CiBjb25zdCBjaGFyIGtNaW5Mb2dMZXZlbEhlbHBbXSA9CiAgICAgIlNldCB0aGUgbWluaW11bSBsb2dnaW5nIGxldmVsOiBpbmZvfHdhcm5pbmd8ZXJyb3J8ZmF0YWwuIjsKQEAgLTM5MSw3ICszODcsNyBAQAogICAgICIoZm9yIGV4YW1wbGUgaDV2Y2MtZW1iZWRkZWQ6Ly9mb29iYXIuaHRtbCkgYW5kIGFsbCBmaWxlcyByZWZlcmVuY2VkIG11c3QgIgogICAgICJiZSBjb250ZW50IG9yIGVtYmVkZGVkIGZpbGVzIGFzIHdlbGwuIElmIG5vbmUgaXMgcGFzc2VkICIKICAgICAiKGNhc2UtaW5zZW5zaXRpdmUpLCBubyBzcGxhc2ggc2NyZWVuIHdpbGwgYmUgY29uc3RydWN0ZWQuIElmICIKLSAgICAibm8gdmFsdWUgaXMgc2V0LCB0aGUgVVJMIGluIGd5cF9jb25maWd1cmF0aW9uLmd5cGkgb3IgYmFzZS5neXBpIHdpbGwgYmUgIgorICAgICJubyB2YWx1ZSBpcyBzZXQsIHRoZSBVUkwgaW4gdGhlIENvYmFsdCBjb25maWd1cmF0aW9uIGV4dGVuc2lvbiB3aWxsIGJlICIKICAgICAidXNlZC4iOwogCiBjb25zdCBjaGFyIGtGYWxsYmFja1NwbGFzaFNjcmVlblRvcGljc1tdID0gImZhbGxiYWNrX3NwbGFzaF9zY3JlZW5fdG9waWNzIjsKQEAgLTQ1Miw4ICs0NDgsNyBAQAogICAgICAgICB7a0lnbm9yZUNlcnRpZmljYXRlRXJyb3JzLCBrSWdub3JlQ2VydGlmaWNhdGVFcnJvcnNIZWxwfSwKICAgICAgICAge2tJbnB1dEZ1enplciwga0lucHV0RnV6emVySGVscH0sIHtrTWVtb3J5VHJhY2tlciwga01lbW9yeVRyYWNrZXJIZWxwfSwKICAgICAgICAge2tNaW5Db21wYXRpYmlsaXR5VmVyc2lvbiwga01pbkNvbXBhdGliaWxpdHlWZXJzaW9uSGVscH0sCi0gICAgICAgIHtrTnVsbFNhdmVnYW1lLCBrTnVsbFNhdmVnYW1lSGVscH0sCi0gICAgICAgIHtrRGlzYWJsZVBhcnRpYWxMYXlvdXQsIGtEaXNhYmxlUGFydGlhbExheW91dEhlbHB9LCB7a1Byb2QsIGtQcm9kSGVscH0sCisgICAgICAgIHtrTnVsbFNhdmVnYW1lLCBrTnVsbFNhdmVnYW1lSGVscH0sIHtrUHJvZCwga1Byb2RIZWxwfSwKICAgICAgICAge2tSZXF1aXJlQ1NQLCBrUmVxdWlyZUNTUEhlbHB9LAogICAgICAgICB7a1JlcXVpcmVIVFRQU0xvY2F0aW9uLCBrUmVxdWlyZUhUVFBTTG9jYXRpb25IZWxwfSwKICAgICAgICAge2tTaHV0ZG93bkFmdGVyLCBrU2h1dGRvd25BZnRlckhlbHB9LApAQCAtNDYzLDExICs0NTgsOSBAQAogICAgICAgICB7a1VzZXJBZ2VudENsaWVudEhpbnRzLCBrVXNlckFnZW50Q2xpZW50SGludHNIZWxwfSwKICAgICAgICAge2tVc2VyQWdlbnRPc05hbWVWZXJzaW9uLCBrVXNlckFnZW50T3NOYW1lVmVyc2lvbkhlbHB9LAogICAgICAgICB7a1VzZVRUUywga1VzZVRUU0hlbHB9LCB7a1dlYkRyaXZlclBvcnQsIGtXZWJEcml2ZXJQb3J0SGVscH0sCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgICAge2tEaXNhYmxlT25TY3JlZW5LZXlib2FyZCwga0Rpc2FibGVPblNjcmVlbktleWJvYXJkSGVscH0sCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAjZW5kaWYgIC8vIEVOQUJMRV9ERUJVR19DT01NQU5EX0xJTkVfU1dJVENIRVMKKyAgICAgICAge2tDb21wcmVzc1VwZGF0ZSwga0NvbXByZXNzVXBkYXRlSGVscH0sCiAgICAgICAgIHtrRGlzYWJsZUphdmFTY3JpcHRKaXQsIGtEaXNhYmxlSmF2YVNjcmlwdEppdEhlbHB9LAogICAgICAgICB7a0Rpc2FibGVNYXBUb01lc2gsIGtEaXNhYmxlTWFwVG9NZXNoSGVscH0sCiAgICAgICAgIHtrRGlzYWJsZVRpbWVyUmVzb2x1dGlvbkxpbWl0LCBrRGlzYWJsZVRpbWVyUmVzb2x1dGlvbkxpbWl0SGVscH0sCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci9zd2l0Y2hlcy5oIGIvY29iYWx0L2Jyb3dzZXIvc3dpdGNoZXMuaAppbmRleCAzMTU5YTY4Li44MzQ4OTY0IDEwMDY0NAotLS0gYS9jb2JhbHQvYnJvd3Nlci9zd2l0Y2hlcy5oCisrKyBiL2NvYmFsdC9icm93c2VyL3N3aXRjaGVzLmgKQEAgLTY0LDggKzY0LDYgQEAKIGV4dGVybiBjb25zdCBjaGFyIGtNaW5Db21wYXRpYmlsaXR5VmVyc2lvbkhlbHBbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtOdWxsU2F2ZWdhbWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtOdWxsU2F2ZWdhbWVIZWxwW107Ci1leHRlcm4gY29uc3QgY2hhciBrRGlzYWJsZVBhcnRpYWxMYXlvdXRbXTsKLWV4dGVybiBjb25zdCBjaGFyIGtEaXNhYmxlUGFydGlhbExheW91dEhlbHBbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtQcm9kW107CiBleHRlcm4gY29uc3QgY2hhciBrUHJvZEhlbHBbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtSZXF1aXJlQ1NQW107CkBAIC04OCwxNCArODYsMTIgQEAKIGV4dGVybiBjb25zdCBjaGFyIGtVc2VUVFNIZWxwW107CiBleHRlcm4gY29uc3QgY2hhciBrV2ViRHJpdmVyUG9ydFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIga1dlYkRyaXZlclBvcnRIZWxwW107Ci0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogZXh0ZXJuIGNvbnN0IGNoYXIga0Rpc2FibGVPblNjcmVlbktleWJvYXJkW107CiBleHRlcm4gY29uc3QgY2hhciBrRGlzYWJsZU9uU2NyZWVuS2V5Ym9hcmRIZWxwW107Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAjZW5kaWYgIC8vIEVOQUJMRV9ERUJVR19DT01NQU5EX0xJTkVfU1dJVENIRVMKIAorZXh0ZXJuIGNvbnN0IGNoYXIga0NvbXByZXNzVXBkYXRlW107CitleHRlcm4gY29uc3QgY2hhciBrQ29tcHJlc3NVcGRhdGVIZWxwW107CiBleHRlcm4gY29uc3QgY2hhciBrRGlzYWJsZUphdmFTY3JpcHRKaXRbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtEaXNhYmxlSmF2YVNjcmlwdEppdEhlbHBbXTsKIGV4dGVybiBjb25zdCBjaGFyIGtEaXNhYmxlTWFwVG9NZXNoW107CmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci91c2VyX2FnZW50X3BsYXRmb3JtX2luZm8uY2MgYi9jb2JhbHQvYnJvd3Nlci91c2VyX2FnZW50X3BsYXRmb3JtX2luZm8uY2MKaW5kZXggYWFiM2Q5MS4uYTg2MmMzYyAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvdXNlcl9hZ2VudF9wbGF0Zm9ybV9pbmZvLmNjCisrKyBiL2NvYmFsdC9icm93c2VyL3VzZXJfYWdlbnRfcGxhdGZvcm1faW5mby5jYwpAQCAtMjY5LDE1ICsyNjksOSBAQAogICB9CiAjZW5kaWYgIC8vIEVOQUJMRV9ERUJVR19DT01NQU5EX0xJTkVfU1dJVENIRVMKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFN5c3RlbSBJbnRlZ3JhdG9yCiAgIHJlc3VsdCA9IFNiU3lzdGVtR2V0UHJvcGVydHkoa1NiU3lzdGVtUHJvcGVydHlTeXN0ZW1JbnRlZ3JhdG9yTmFtZSwgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1N5c3RlbVByb3BlcnR5TWF4TGVuZ3RoKTsKLSNlbHNlCi0gIC8vIE9yaWdpbmFsIERlc2lnbiBNYW51ZmFjdHVyZXIgKE9ETSkKLSAgcmVzdWx0ID0gU2JTeXN0ZW1HZXRQcm9wZXJ0eShrU2JTeXN0ZW1Qcm9wZXJ0eU9yaWdpbmFsRGVzaWduTWFudWZhY3R1cmVyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwga1N5c3RlbVByb3BlcnR5TWF4TGVuZ3RoKTsKLSNlbmRpZgogICBpZiAocmVzdWx0KSB7CiAgICAgaW5mby5zZXRfb3JpZ2luYWxfZGVzaWduX21hbnVmYWN0dXJlcih2YWx1ZSk7CiAgIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9icm93c2VyL3dlYl9tb2R1bGUuY2MgYi9jb2JhbHQvYnJvd3Nlci93ZWJfbW9kdWxlLmNjCmluZGV4IDYzMTUwMDcuLjBkYTBiNzAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9icm93c2VyL3dlYl9tb2R1bGUuY2MKKysrIGIvY29iYWx0L2Jyb3dzZXIvd2ViX21vZHVsZS5jYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20va2V5Ym9hcmRfZXZlbnRfaW5pdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vbG9jYWxfc3RvcmFnZV9kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9uYXZpZ2F0aW9uX3R5cGUuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL25hdmlnYXRvci5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vcG9pbnRlcl9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vc3RvcmFnZS5oIgpAQCAtNjMsMTMgKzY0LDE0IEBACiAjaW5jbHVkZSAiY29iYWx0L2RvbV9wYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2xheW91dC90b3Btb3N0X2V2ZW50X3RhcmdldC5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvaW1hZ2UvYW5pbWF0ZWRfaW1hZ2VfdHJhY2tlci5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvbG9hZGVyX2ZhY3RvcnkuaCIKICNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL3N3aXRjaGVzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9tZWRpYV9tb2R1bGUuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc2Vzc2lvbi9tZWRpYV9zZXNzaW9uX2NsaWVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZXJyb3JfcmVwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zdG9yYWdlL3N0b3JhZ2VfbWFuYWdlci5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvYWNjZXNzaWJpbGl0eS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2dsZXMuaCIKQEAgLTExNCw3ICsxMTYsNyBAQAogLy8gZXhlY3V0ZSBzeW5jaHJvbm91c2x5IHdpdGggcmVzcGVjdCB0byBvbmUgYW5vdGhlci4KIGNsYXNzIFdlYk1vZHVsZTo6SW1wbCB7CiAgcHVibGljOgotICBleHBsaWNpdCBJbXBsKGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEpOworICBJbXBsKHdlYjo6Q29udGV4dCogd2ViX2NvbnRleHQsIGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEpOwogICB+SW1wbCgpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCkBAIC0xMjQsMTQgKzEyNiwxMyBAQAogICB9CiAjZW5kaWYgIC8vIEVOQUJMRV9ERUJVR0dFUgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgLy8gSW5qZWN0cyBhbiBvbiBzY3JlZW4ga2V5Ym9hcmQgaW5wdXQgZXZlbnQgaW50byB0aGUgd2ViIG1vZHVsZS4gRXZlbnQgaXMKICAgLy8gZGlyZWN0ZWQgYXQgYSBzcGVjaWZpYyBlbGVtZW50IGlmIHRoZSBlbGVtZW50IGlzIG5vbi1udWxsLiBPdGhlcndpc2UsIHRoZQogICAvLyBjdXJyZW50bHkgZm9jdXNlZCBlbGVtZW50IHJlY2VpdmVzIHRoZSBldmVudC4gSWYgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHdlCiAgIC8vIG11c3QgYmUgb24gdGhlIFdlYk1vZHVsZSdzIG1lc3NhZ2UgbG9vcC4KLSAgdm9pZCBJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudChzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6SW5wdXRFdmVudEluaXQmIGV2ZW50KTsKKyAgdm9pZCBJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudCgKKyAgICAgIGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6SW5wdXRFdmVudEluaXQmIGV2ZW50LAorICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQgPSBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiAgIC8vIEluamVjdHMgYW4gb24gc2NyZWVuIGtleWJvYXJkIHNob3duIGV2ZW50IGludG8gdGhlIHdlYiBtb2R1bGUuIEV2ZW50IGlzCiAgIC8vIGRpcmVjdGVkIGF0IHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgZWxlbWVudC4KICAgdm9pZCBJbmplY3RPblNjcmVlbktleWJvYXJkU2hvd25FdmVudChpbnQgdGlja2V0KTsKQEAgLTE0NywzMCArMTQ4LDMwIEBACiAgIC8vIEluamVjdHMgYW4gb24gc2NyZWVuIGtleWJvYXJkIHN1Z2dlc3Rpb25zIHVwZGF0ZWQgZXZlbnQgaW50byB0aGUgd2ViCiAgIC8vIG1vZHVsZS4gRXZlbnQgaXMgZGlyZWN0ZWQgYXQgdGhlIG9uIHNjcmVlbiBrZXlib2FyZCBlbGVtZW50LgogICB2b2lkIEluamVjdE9uU2NyZWVuS2V5Ym9hcmRTdWdnZXN0aW9uc1VwZGF0ZWRFdmVudChpbnQgdGlja2V0KTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIAogICAvLyBJbmplY3RzIGEga2V5Ym9hcmQgZXZlbnQgaW50byB0aGUgd2ViIG1vZHVsZS4gRXZlbnQgaXMgZGlyZWN0ZWQgYXQgYQogICAvLyBzcGVjaWZpYyBlbGVtZW50IGlmIHRoZSBlbGVtZW50IGlzIG5vbi1udWxsLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50bHkKICAgLy8gZm9jdXNlZCBlbGVtZW50IHJlY2VpdmVzIHRoZSBldmVudC4gSWYgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHdlIG11c3QgYmUKICAgLy8gb24gdGhlIFdlYk1vZHVsZSdzIG1lc3NhZ2UgbG9vcAotICB2b2lkIEluamVjdEtleWJvYXJkRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpLZXlib2FyZEV2ZW50SW5pdCYgZXZlbnQpOworICB2b2lkIEluamVjdEtleWJvYXJkRXZlbnQoCisgICAgICBiYXNlOjpUb2tlbiB0eXBlLCBjb25zdCBkb206OktleWJvYXJkRXZlbnRJbml0JiBldmVudCwKKyAgICAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PiBlbGVtZW50ID0gc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCkpOwogCiAgIC8vIEluamVjdHMgYSBwb2ludGVyIGV2ZW50IGludG8gdGhlIHdlYiBtb2R1bGUuIEV2ZW50IGlzIGRpcmVjdGVkIGF0IGEKICAgLy8gc3BlY2lmaWMgZWxlbWVudCBpZiB0aGUgZWxlbWVudCBpcyBub24tbnVsbC4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5CiAgIC8vIGZvY3VzZWQgZWxlbWVudCByZWNlaXZlcyB0aGUgZXZlbnQuIElmIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCB3ZSBtdXN0IGJlCiAgIC8vIG9uIHRoZSBXZWJNb2R1bGUncyBtZXNzYWdlIGxvb3AKLSAgdm9pZCBJbmplY3RQb2ludGVyRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsIGJhc2U6OlRva2VuIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYgZXZlbnQpOworICB2b2lkIEluamVjdFBvaW50ZXJFdmVudCgKKyAgICAgIGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYgZXZlbnQsCisgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCA9IHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpKTsKIAogICAvLyBJbmplY3RzIGEgd2hlZWwgZXZlbnQgaW50byB0aGUgd2ViIG1vZHVsZS4gRXZlbnQgaXMgZGlyZWN0ZWQgYXQgYQogICAvLyBzcGVjaWZpYyBlbGVtZW50IGlmIHRoZSBlbGVtZW50IGlzIG5vbi1udWxsLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50bHkKICAgLy8gZm9jdXNlZCBlbGVtZW50IHJlY2VpdmVzIHRoZSBldmVudC4gSWYgZWxlbWVudCBpcyBzcGVjaWZpZWQsIHdlIG11c3QgYmUKICAgLy8gb24gdGhlIFdlYk1vZHVsZSdzIG1lc3NhZ2UgbG9vcAotICB2b2lkIEluamVjdFdoZWVsRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsIGJhc2U6OlRva2VuIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OldoZWVsRXZlbnRJbml0JiBldmVudCk7CisgIHZvaWQgSW5qZWN0V2hlZWxFdmVudCgKKyAgICAgIGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6V2hlZWxFdmVudEluaXQmIGV2ZW50LAorICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQgPSBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiAKICAgLy8gSW5qZWN0cyBhIGJlZm9yZXVubG9hZCBldmVudCBpbnRvIHRoZSB3ZWIgbW9kdWxlLiBJZiB0aGlzIGV2ZW50IGlzIG5vdAogICAvLyBoYW5kbGVkIGJ5IHRoZSB3ZWIgYXBwbGljYXRpb24sIHxvbl9iZWZvcmVfdW5sb2FkX2ZpcmVkX2J1dF9ub3RfaGFuZGxlZF98CkBAIC0xODgsOCArMTg5LDcgQEAKICAgLy8gYW5kIHNpZ25hbHMgfGdvdF9yZXN1bHR8LgogICB2b2lkIEV4ZWN1dGVKYXZhc2NyaXB0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHRfdXRmOCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpTb3VyY2VMb2NhdGlvbiYgc2NyaXB0X2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQqIGdvdF9yZXN1bHQsIHN0ZDo6c3RyaW5nKiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogb3V0X3N1Y2NlZWRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIHJlc3VsdCwgYm9vbCogb3V0X3N1Y2NlZWRlZCk7CiAKICAgLy8gQ2xlYXJzIGRpc2FibGVzIHRpbWVyIHJlbGF0ZWQgb2JqZWN0cwogICAvLyBzbyB0aGF0IHRoZSBtZXNzYWdlIGxvb3AgY2FuIGVhc2lseSBleGl0CkBAIC0yMDYsMTMgKzIwNiw5IEBACiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiAgIHZvaWQgV2FpdEZvcldlYkRlYnVnZ2VyKCk7CiAKLSAgYm9vbCBJc0ZpbmlzaGVkV2FpdGluZ0ZvcldlYkRlYnVnZ2VyKCkgewotICAgIHJldHVybiB3YWl0X2Zvcl93ZWJfZGVidWdnZXJfZmluaXNoZWRfLklzU2lnbmFsZWQoKTsKLSAgfQotCiAgIHZvaWQgRnJlZXplRGVidWdnZXIoCiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZGVidWc6OmJhY2tlbmQ6OkRlYnVnZ2VyU3RhdGU+KiBkZWJ1Z2dlcl9zdGF0ZSkgewotICAgICpkZWJ1Z2dlcl9zdGF0ZSA9IGRlYnVnX21vZHVsZV8tPkZyZWV6ZSgpOworICAgIGlmIChkZWJ1Z2dlcl9zdGF0ZSkgKmRlYnVnZ2VyX3N0YXRlID0gZGVidWdfbW9kdWxlXy0+RnJlZXplKCk7CiAgIH0KICNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiAKQEAgLTI0MCwxNCArMjM2LDEwIEBACiAgIHZvaWQgRm9jdXMoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAKICAgdm9pZCBSZWR1Y2VNZW1vcnkoKTsKLSAgdm9pZCBHZXRKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3MoCi0gICAgICBjb25zdCBKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3NDYWxsYmFjayYgY2FsbGJhY2spOwogCiAgIHZvaWQgTG9nU2NyaXB0RXJyb3IoY29uc3QgYmFzZTo6U291cmNlTG9jYXRpb24mIHNvdXJjZV9sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3JfbWVzc2FnZSk7CiAKLSAgdm9pZCBDYW5jZWxTeW5jaHJvbm91c0xvYWRzKCk7Ci0KICAgdm9pZCBJc1JlYWR5VG9GcmVlemUodm9sYXRpbGUgYm9vbCogaXNfcmVhZHlfdG9fZnJlZXplKSB7CiAgICAgaWYgKHdpbmRvd18tPm1lZGlhX3Nlc3Npb24oKS0+bWVkaWFfc2Vzc2lvbl9jbGllbnQoKSA9PSBOVUxMKSB7CiAgICAgICAqaXNfcmVhZHlfdG9fZnJlZXplID0gdHJ1ZTsKQEAgLTI2NSw2ICsyNTcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAgIHZvaWQgU2V0RGVlcExpbmtUaW1lc3RhbXAoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAKKyAgdm9pZCBTZXRVbmxvYWRFdmVudFRpbWluZ0luZm8oYmFzZTo6VGltZVRpY2tzIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSk7CisKICBwcml2YXRlOgogICBjbGFzcyBEb2N1bWVudExvYWRlZE9ic2VydmVyOwogCkBAIC0yNzQsMTEgKzI2OSw2IEBACiAgIC8vIERpc2FibGUgY2FsbGJhY2tzIGluIGFsbCByZXNvdXJjZSBjYWNoZXMgb3duZWQgYnkgdGhlIFdlYk1vZHVsZS4KICAgdm9pZCBEaXNhYmxlQ2FsbGJhY2tzSW5SZXNvdXJjZUNhY2hlcygpOwogCi0gIC8vIEluamVjdHMgYSBsaXN0IG9mIGN1c3RvbSB3aW5kb3cgYXR0cmlidXRlcyBpbnRvIHRoZSBXZWJNb2R1bGUncyB3aW5kb3cKLSAgLy8gb2JqZWN0LgotICB2b2lkIEluamVjdEN1c3RvbVdpbmRvd0F0dHJpYnV0ZXMoCi0gICAgICBjb25zdCBPcHRpb25zOjpJbmplY3RlZFdpbmRvd0F0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpOwotCiAgIC8vIENhbGxlZCBieSB8bGF5b3V0X21hbmFnZXJffCBhZnRlciBpdCBydW5zIHRoZSBhbmltYXRpb24gZnJhbWUgY2FsbGJhY2tzLgogICB2b2lkIE9uUmFuQW5pbWF0aW9uRnJhbWVDYWxsYmFja3MoKTsKIApAQCAtMzA0LDExICsyOTQsMjcgQEAKIAogICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudCgpIHsKICAgICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotICAgIHJldHVybiBnbG9iYWxfZW52aXJvbm1lbnRfOworICAgIHJldHVybiB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpOwogICB9CiAKICAgdm9pZCBPbkxvYWRDb21wbGV0ZShjb25zdCBiYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4mIGVycm9yKSB7CiAgICAgaWYgKGVycm9yKSBlcnJvcl9jYWxsYmFja18uUnVuKHdpbmRvd18tPmxvY2F0aW9uKCktPnVybCgpLCAqZXJyb3IpOworCisgICAgLy8gQ3JlYXRlIFBlcmZvcm1hbmNlIG5hdmlnYXRpb24gdGltaW5nIGluZm8gYWZ0ZXIgZG9jdW1lbnQgbG9hZGluZworICAgIC8vIGNvbXBsZXRlZC4KKyAgICBEQ0hFQ0sod2luZG93Xyk7CisgICAgRENIRUNLKHdpbmRvd18tPnBlcmZvcm1hbmNlKCkpOworICAgIGlmICh3aW5kb3dfLT5HZXREb2N1bWVudExvYWRlcigpKSB7CisgICAgICBuZXQ6OkxvYWRUaW1pbmdJbmZvIGxvYWRfdGltaW5nX2luZm8gPQorICAgICAgICAgIHdpbmRvd18tPkdldERvY3VtZW50TG9hZGVyKCktPmdldF9sb2FkX3RpbWluZ19pbmZvKCk7CisgICAgICAvLyBDaGVjayBpZiB0aGUgbG9hZCBoYXBwZW5zIHRocm91Z2ggbmV0IG1kb3VsZS4KKyAgICAgIGJvb2wgaXNfbG9hZF90aW1pbmdfaW5mb192YWxpZCA9CisgICAgICAgICAgIWxvYWRfdGltaW5nX2luZm8ucmVxdWVzdF9zdGFydC5pc19udWxsKCk7CisgICAgICBpZiAoaXNfbG9hZF90aW1pbmdfaW5mb192YWxpZCkgeworICAgICAgICB3aW5kb3dfLT5kb2N1bWVudCgpLT5DcmVhdGVQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoCisgICAgICAgICAgICB3aW5kb3dfLT5wZXJmb3JtYW5jZSgpLCBsb2FkX3RpbWluZ19pbmZvKTsKKyAgICAgIH0KKyAgICB9CiAgIH0KIAogICAvLyBSZXBvcnQgYW4gZXJyb3IgZW5jb3VudGVyZWQgd2hpbGUgcnVubmluZyBKUy4KQEAgLTMzMiw3ICszMzgsNyBAQAogICAvLyB0aHJlYWQgdGhhdCBpdCBpcyBjcmVhdGVkIGluLgogICBUSFJFQURfQ0hFQ0tFUih0aHJlYWRfY2hlY2tlcl8pOwogCi0gIHN0ZDo6c3RyaW5nIG5hbWVfOworICB3ZWI6OkNvbnRleHQqIHdlYl9jb250ZXh0XzsKIAogICAvLyBTaW1wbGUgZmxhZyB1c2VkIGZvciBiYXNpYyBlcnJvciBjaGVja2luZy4KICAgYm9vbCBpc19ydW5uaW5nXzsKQEAgLTM1NSw5ICszNjEsNiBAQAogICAvLyBET00gKEhUTUwgLyBYTUwpIHBhcnNlci4KICAgc3RkOjp1bmlxdWVfcHRyPGRvbV9wYXJzZXI6OlBhcnNlcj4gZG9tX3BhcnNlcl87CiAKLSAgLy8gRmV0Y2hlckZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGZldGNoZXIgYWNjb3JkaW5nIHRvIFVSTC4KLSAgc3RkOjp1bmlxdWVfcHRyPGxvYWRlcjo6RmV0Y2hlckZhY3Rvcnk+IGZldGNoZXJfZmFjdG9yeV87Ci0KICAgLy8gTG9hZGVyRmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gYWNxdWlyZSByZWZlcmVuY2VzIHRvIHJlc291cmNlcyBmcm9tIGEKICAgLy8gVVJMLgogICBzdGQ6OnVuaXF1ZV9wdHI8bG9hZGVyOjpMb2FkZXJGYWN0b3J5PiBsb2FkZXJfZmFjdG9yeV87CkBAIC0zOTIsMjUgKzM5NSw5IEBACiAgIC8vIFBvc3QgYW5kIHJ1biB0YXNrcyB0byBub3RpZnkgTXV0YXRpb25PYnNlcnZlcnMuCiAgIGRvbTo6TXV0YXRpb25PYnNlcnZlclRhc2tNYW5hZ2VyIG11dGF0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlcl87CiAKLSAgLy8gSmF2YVNjcmlwdCBlbmdpbmUgZm9yIHRoZSBicm93c2VyLgotICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lPiBqYXZhc2NyaXB0X2VuZ2luZV87Ci0KLSAgLy8gSmF2YVNjcmlwdCBHbG9iYWwgT2JqZWN0IGZvciB0aGUgYnJvd3Nlci4gVGhlcmUgc2hvdWxkIGJlIG9uZSBwZXIgd2luZG93LAotICAvLyBidXQgc2luY2UgdGhlcmUgaXMgb25seSBvbmUgd2luZG93LCB3ZSBjYW4gaGF2ZSBvbmUgcGVyIGJyb3dzZXIuCi0gIHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudD4gZ2xvYmFsX2Vudmlyb25tZW50XzsKLQotICAvLyBVc2VkIGJ5IHxDb25zb2xlfCB0byBvYnRhaW4gYSBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlLgotICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpFeGVjdXRpb25TdGF0ZT4gZXhlY3V0aW9uX3N0YXRlXzsKLQotICAvLyBJbnRlcmZhY2UgZm9yIHRoZSBkb2N1bWVudCB0byBleGVjdXRlIEphdmFTY3JpcHQgY29kZS4KLSAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6U2NyaXB0UnVubmVyPiBzY3JpcHRfcnVubmVyXzsKLQogICAvLyBPYmplY3QgdG8gcmVnaXN0ZXIgYW5kIHJldHJpZXZlIE1lZGlhU291cmNlIG9iamVjdCB3aXRoIGEgc3RyaW5nIGtleS4KICAgc3RkOjp1bmlxdWVfcHRyPGRvbTo6TWVkaWFTb3VyY2U6OlJlZ2lzdHJ5PiBtZWRpYV9zb3VyY2VfcmVnaXN0cnlfOwogCi0gIC8vIE9iamVjdCB0byByZWdpc3RlciBhbmQgcmV0cmlldmUgQmxvYiBvYmplY3RzIHdpdGggYSBzdHJpbmcga2V5LgotICBzdGQ6OnVuaXF1ZV9wdHI8ZG9tOjpCbG9iOjpSZWdpc3RyeT4gYmxvYl9yZWdpc3RyeV87Ci0KICAgLy8gVGhlIFdpbmRvdyBvYmplY3Qgd3JhcHMgYWxsIERPTS1yZWxhdGVkIGNvbXBvbmVudHMuCiAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpXaW5kb3c+IHdpbmRvd187CiAKQEAgLTQyNCw5ICs0MTEsNiBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8bWVkaWE6OkRlY29kZXJCdWZmZXJNZW1vcnlJbmZvPgogICAgICAgc3R1Yl9kZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mb187CiAKLSAgLy8gRW52aXJvbm1lbnQgU2V0dGluZ3Mgb2JqZWN0Ci0gIHN0ZDo6dW5pcXVlX3B0cjxkb206OkRPTVNldHRpbmdzPiBlbnZpcm9ubWVudF9zZXR0aW5nc187Ci0KICAgLy8gQ2FsbGVkIGJ5IHxPblJlbmRlclRyZWVQcm9kdWNlZHwuCiAgIE9uUmVuZGVyVHJlZVByb2R1Y2VkQ2FsbGJhY2sgcmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2tfOwogCkBAIC00NDYsOSArNDMwLDcgQEAKIAogICAvLyBVc2VkIHRvIGF2b2lkIGEgZGVhZGxvY2sgd2hlbiBydW5uaW5nIHxJbXBsOjpQYXVzZXwgd2hpbGUgd2FpdGluZyBmb3IgdGhlCiAgIC8vIHdlYiBkZWJ1Z2dlciB0byBjb25uZWN0LgotICBiYXNlOjpXYWl0YWJsZUV2ZW50IHdhaXRfZm9yX3dlYl9kZWJ1Z2dlcl9maW5pc2hlZF8gPSB7Ci0gICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50OjpSZXNldFBvbGljeTo6TUFOVUFMLAotICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6SW5pdGlhbFN0YXRlOjpOT1RfU0lHTkFMRUR9OworICBzdGFyYm9hcmQ6OmF0b21pY19ib29sKiB3YWl0aW5nX2Zvcl93ZWJfZGVidWdnZXJfOwogCiAgIC8vIEludGVyZmFjZSB0byByZXBvcnQgYmVoYXZpb3VyIHJlbGV2YW50IHRvIHRoZSB3ZWIgZGVidWdnZXIuCiAgIGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z2dlckhvb2tzSW1wbCBkZWJ1Z2dlcl9ob29rc187CkBAIC00NzMsMTEgKzQ1NSwxNCBAQAogICAvLyBzeW5jaHJvbm91c2x5LiAgSXQgaXMgbWFudWFsbHkgcmVzZXQgc28gdGhhdCBldmVudHMgbGlrZSBGcmVlemUgY2FuIGJlCiAgIC8vIGNvcnJlY3RseSBleGVjdXRlLCBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzeW5jaHJvbm91cyBsb2FkcyBpbiBxdWV1ZQogICAvLyBiZWZvcmUgdGhlIGZyZWV6ZSAob3Igb3RoZXIpIGV2ZW50IGhhbmRsZXJzLgotICBiYXNlOjpXYWl0YWJsZUV2ZW50IHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHRfID0gewotICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6UmVzZXRQb2xpY3k6Ok1BTlVBTCwKLSAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OkluaXRpYWxTdGF0ZTo6Tk9UX1NJR05BTEVEfTsKKyAgYmFzZTo6V2FpdGFibGVFdmVudCogc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF87CisKKyAgYmFzZTo6Q2FsbGJhY2s8dm9pZChiYXNlOjpUaW1lVGlja3MsIGJhc2U6OlRpbWVUaWNrcyk+CisgICAgICByZXBvcnRfdW5sb2FkX3RpbWluZ19pbmZvX2NhbGxiYWNrXzsKIH07CiAKK3ZvaWQgV2ViTW9kdWxlOjpXaWxsRGVzdHJveUN1cnJlbnRNZXNzYWdlTG9vcCgpIHsgaW1wbF8ucmVzZXQoKTsgfQorCiBjbGFzcyBXZWJNb2R1bGU6OkltcGw6OkRvY3VtZW50TG9hZGVkT2JzZXJ2ZXIgOiBwdWJsaWMgZG9tOjpEb2N1bWVudE9ic2VydmVyIHsKICBwdWJsaWM6CiAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8YmFzZTo6Q2xvc3VyZT4gQ2xvc3VyZVZlY3RvcjsKQEAgLTQ5NywyMCArNDgyLDMwIEBACiAgIENsb3N1cmVWZWN0b3IgbG9hZGVkX2NhbGxiYWNrc187CiB9OwogCi1XZWJNb2R1bGU6OkltcGw6OkltcGwoY29uc3QgQ29uc3RydWN0aW9uRGF0YSYgZGF0YSkKLSAgICA6IG5hbWVfKGRhdGEub3B0aW9ucy5uYW1lKSwKK1dlYk1vZHVsZTo6SW1wbDo6SW1wbCh3ZWI6OkNvbnRleHQqIHdlYl9jb250ZXh0LCBjb25zdCBDb25zdHJ1Y3Rpb25EYXRhJiBkYXRhKQorICAgIDogd2ViX2NvbnRleHRfKHdlYl9jb250ZXh0KSwKICAgICAgIGlzX3J1bm5pbmdfKGZhbHNlKSwKICAgICAgIGlzX3JlbmRlcl90cmVlX3Jhc3Rlcml6YXRpb25fcGVuZGluZ18oCiAgICAgICAgICAgYmFzZTo6U3RyaW5nUHJpbnRmKCIlcy5Jc1JlbmRlclRyZWVSYXN0ZXJpemF0aW9uUGVuZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfLmNfc3RyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJfY29udGV4dF8tPm5hbWUoKS5jX3N0cigpKSwKICAgICAgICAgICBmYWxzZSwgIlRydWUgd2hlbiBhIHJlbmRlciB0cmVlIGlzIHByb2R1Y2VkIGJ1dCBub3QgeWV0IHJhc3Rlcml6ZWQuIiksCiAgICAgICByZXNvdXJjZV9wcm92aWRlcl8oZGF0YS5yZXNvdXJjZV9wcm92aWRlciksCi0gICAgICByZXNvdXJjZV9wcm92aWRlcl90eXBlX2lkXyhkYXRhLnJlc291cmNlX3Byb3ZpZGVyLT5HZXRUeXBlSWQoKSkgeworICAgICAgcmVzb3VyY2VfcHJvdmlkZXJfdHlwZV9pZF8oZGF0YS5yZXNvdXJjZV9wcm92aWRlci0+R2V0VHlwZUlkKCkpLAorI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQorICAgICAgd2FpdGluZ19mb3Jfd2ViX2RlYnVnZ2VyXyhkYXRhLndhaXRpbmdfZm9yX3dlYl9kZWJ1Z2dlciksCisjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQorICAgICAgc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF8oZGF0YS5zeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0KSB7CisgIERDSEVDSyh3ZWJfY29udGV4dF8pOworI2lmIGRlZmluZWQoQ09CQUxUX0VOQUJMRV9KQVZBU0NSSVBUX0VSUk9SX0xPR0dJTkcpCisgIHNjcmlwdDo6SmF2YVNjcmlwdEVuZ2luZTo6RXJyb3JIYW5kbGVyIGVycm9yX2hhbmRsZXIgPQorICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpMb2dTY3JpcHRFcnJvciwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSk7CisgIHdlYl9jb250ZXh0Xy0+amF2YXNjcmlwdF9lbmdpbmUoKS0+UmVnaXN0ZXJFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7CisjZW5kaWYKKwogICBjc3NfcGFyc2VyOjpQYXJzZXI6OlN1cHBvcnRzTWFwVG9NZXNoRmxhZyBzdXBwb3J0c19tYXBfdG9fbWVzaCA9CiAgICAgICBkYXRhLm9wdGlvbnMuZW5hYmxlX21hcF90b19tZXNoCiAgICAgICAgICAgPyBjc3NfcGFyc2VyOjpQYXJzZXI6OmtTdXBwb3J0c01hcFRvTWVzaAogICAgICAgICAgIDogY3NzX3BhcnNlcjo6UGFyc2VyOjprRG9lc05vdFN1cHBvcnRNYXBUb01lc2g7Ci0KICAgY3NzX3BhcnNlcl8gPQogICAgICAgY3NzX3BhcnNlcjo6UGFyc2VyOjpDcmVhdGUoZGVidWdnZXJfaG9va3NfLCBzdXBwb3J0c19tYXBfdG9fbWVzaCk7CiAgIERDSEVDSyhjc3NfcGFyc2VyXyk7CkBAIC01MjEsMzIgKzUxNiwxNyBAQAogICAgICAgZGF0YS5vcHRpb25zLnJlcXVpcmVfY3NwKSk7CiAgIERDSEVDSyhkb21fcGFyc2VyXyk7CiAKLSAgYmxvYl9yZWdpc3RyeV8ucmVzZXQobmV3IGRvbTo6QmxvYjo6UmVnaXN0cnkpOwotCi0gIGJhc2U6OkNhbGxiYWNrPGludChjb25zdCBzdGQ6OnN0cmluZyYsIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+Kik+Ci0gICAgICByZWFkX2NhY2hlX2NhbGxiYWNrOwotICBpZiAoZGF0YS5vcHRpb25zLmNhbl9mZXRjaF9jYWNoZSkgewotICAgIHJlYWRfY2FjaGVfY2FsbGJhY2sgPQotICAgICAgICBiYXNlOjpCaW5kKCZicm93c2VyOjpTcGxhc2hTY3JlZW5DYWNoZTo6UmVhZENhY2hlZFNwbGFzaFNjcmVlbiwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGRhdGEub3B0aW9ucy5zcGxhc2hfc2NyZWVuX2NhY2hlKSk7Ci0gIH0KLQogICBvbl9iZWZvcmVfdW5sb2FkX2ZpcmVkX2J1dF9ub3RfaGFuZGxlZF8gPQogICAgICAgZGF0YS5vcHRpb25zLm9uX2JlZm9yZV91bmxvYWRfZmlyZWRfYnV0X25vdF9oYW5kbGVkOwogCiAgIHNob3VsZF9yZXRhaW5fcmVtb3RlX3R5cGVmYWNlX2NhY2hlX29uX2ZyZWV6ZV8gPQogICAgICAgZGF0YS5vcHRpb25zLnNob3VsZF9yZXRhaW5fcmVtb3RlX3R5cGVmYWNlX2NhY2hlX29uX2ZyZWV6ZTsKIAotICBmZXRjaGVyX2ZhY3RvcnlfLnJlc2V0KG5ldyBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KAotICAgICAgZGF0YS5uZXR3b3JrX21vZHVsZSwgZGF0YS5vcHRpb25zLmV4dHJhX3dlYl9maWxlX2RpciwKLSAgICAgIGRvbTo6VVJMOjpNYWtlQmxvYlJlc29sdmVyQ2FsbGJhY2soYmxvYl9yZWdpc3RyeV8uZ2V0KCkpLAotICAgICAgcmVhZF9jYWNoZV9jYWxsYmFjaykpOwotICBEQ0hFQ0soZmV0Y2hlcl9mYWN0b3J5Xyk7Ci0KICAgRENIRUNLX0xFKDAsIGRhdGEub3B0aW9ucy5lbmNvZGVkX2ltYWdlX2NhY2hlX2NhcGFjaXR5KTsKICAgbG9hZGVyX2ZhY3RvcnlfLnJlc2V0KG5ldyBsb2FkZXI6OkxvYWRlckZhY3RvcnkoCi0gICAgICBuYW1lXy5jX3N0cigpLCBmZXRjaGVyX2ZhY3RvcnlfLmdldCgpLCByZXNvdXJjZV9wcm92aWRlcl8sCi0gICAgICBkZWJ1Z2dlcl9ob29rc18sIGRhdGEub3B0aW9ucy5lbmNvZGVkX2ltYWdlX2NhY2hlX2NhcGFjaXR5LAorICAgICAgd2ViX2NvbnRleHRfLT5uYW1lKCkuY19zdHIoKSwgd2ViX2NvbnRleHRfLT5mZXRjaGVyX2ZhY3RvcnkoKSwKKyAgICAgIHJlc291cmNlX3Byb3ZpZGVyXywgZGVidWdnZXJfaG9va3NfLAorICAgICAgZGF0YS5vcHRpb25zLmVuY29kZWRfaW1hZ2VfY2FjaGVfY2FwYWNpdHksCiAgICAgICBkYXRhLm9wdGlvbnMubG9hZGVyX3RocmVhZF9wcmlvcml0eSkpOwogCiAgIGFuaW1hdGVkX2ltYWdlX3RyYWNrZXJfLnJlc2V0KG5ldyBsb2FkZXI6OmltYWdlOjpBbmltYXRlZEltYWdlVHJhY2tlcigKQEAgLTU1NCw4ICs1MzQsOCBAQAogCiAgIERDSEVDS19MRSgwLCBkYXRhLm9wdGlvbnMuaW1hZ2VfY2FjaGVfY2FwYWNpdHkpOwogICBpbWFnZV9jYWNoZV8gPSBsb2FkZXI6OmltYWdlOjpDcmVhdGVJbWFnZUNhY2hlKAotICAgICAgYmFzZTo6U3RyaW5nUHJpbnRmKCIlcy5JbWFnZUNhY2hlIiwgbmFtZV8uY19zdHIoKSksIGRlYnVnZ2VyX2hvb2tzXywKLSAgICAgIHN0YXRpY19jYXN0PHVpbnQzMj4oZGF0YS5vcHRpb25zLmltYWdlX2NhY2hlX2NhcGFjaXR5KSwKKyAgICAgIGJhc2U6OlN0cmluZ1ByaW50ZigiJXMuSW1hZ2VDYWNoZSIsIHdlYl9jb250ZXh0Xy0+bmFtZSgpLmNfc3RyKCkpLAorICAgICAgZGVidWdnZXJfaG9va3NfLCBzdGF0aWNfY2FzdDx1aW50MzI+KGRhdGEub3B0aW9ucy5pbWFnZV9jYWNoZV9jYXBhY2l0eSksCiAgICAgICBsb2FkZXJfZmFjdG9yeV8uZ2V0KCkpOwogICBEQ0hFQ0soaW1hZ2VfY2FjaGVfKTsKIApAQCAtNTY2LDcgKzU0Niw4IEBACiAKICAgRENIRUNLX0xFKDAsIGRhdGEub3B0aW9ucy5yZW1vdGVfdHlwZWZhY2VfY2FjaGVfY2FwYWNpdHkpOwogICByZW1vdGVfdHlwZWZhY2VfY2FjaGVfID0gbG9hZGVyOjpmb250OjpDcmVhdGVSZW1vdGVUeXBlZmFjZUNhY2hlKAotICAgICAgYmFzZTo6U3RyaW5nUHJpbnRmKCIlcy5SZW1vdGVUeXBlZmFjZUNhY2hlIiwgbmFtZV8uY19zdHIoKSksCisgICAgICBiYXNlOjpTdHJpbmdQcmludGYoIiVzLlJlbW90ZVR5cGVmYWNlQ2FjaGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdlYl9jb250ZXh0Xy0+bmFtZSgpLmNfc3RyKCkpLAogICAgICAgZGVidWdnZXJfaG9va3NfLAogICAgICAgc3RhdGljX2Nhc3Q8dWludDMyPihkYXRhLm9wdGlvbnMucmVtb3RlX3R5cGVmYWNlX2NhY2hlX2NhcGFjaXR5KSwKICAgICAgIGxvYWRlcl9mYWN0b3J5Xy5nZXQoKSk7CkBAIC01NzQsNDMgKzU1NSwyMiBAQAogCiAgIERDSEVDS19MRSgwLCBkYXRhLm9wdGlvbnMubWVzaF9jYWNoZV9jYXBhY2l0eSk7CiAgIG1lc2hfY2FjaGVfID0gbG9hZGVyOjptZXNoOjpDcmVhdGVNZXNoQ2FjaGUoCi0gICAgICBiYXNlOjpTdHJpbmdQcmludGYoIiVzLk1lc2hDYWNoZSIsIG5hbWVfLmNfc3RyKCkpLCBkZWJ1Z2dlcl9ob29rc18sCi0gICAgICBzdGF0aWNfY2FzdDx1aW50MzI+KGRhdGEub3B0aW9ucy5tZXNoX2NhY2hlX2NhcGFjaXR5KSwKKyAgICAgIGJhc2U6OlN0cmluZ1ByaW50ZigiJXMuTWVzaENhY2hlIiwgd2ViX2NvbnRleHRfLT5uYW1lKCkuY19zdHIoKSksCisgICAgICBkZWJ1Z2dlcl9ob29rc18sIHN0YXRpY19jYXN0PHVpbnQzMj4oZGF0YS5vcHRpb25zLm1lc2hfY2FjaGVfY2FwYWNpdHkpLAogICAgICAgbG9hZGVyX2ZhY3RvcnlfLmdldCgpKTsKICAgRENIRUNLKG1lc2hfY2FjaGVfKTsKIAotICBsb2NhbF9zdG9yYWdlX2RhdGFiYXNlXy5yZXNldCgKLSAgICAgIG5ldyBkb206OkxvY2FsU3RvcmFnZURhdGFiYXNlKGRhdGEubmV0d29ya19tb2R1bGUtPnN0b3JhZ2VfbWFuYWdlcigpKSk7CisgIGxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfLnJlc2V0KG5ldyBkb206OkxvY2FsU3RvcmFnZURhdGFiYXNlKAorICAgICAgd2ViX2NvbnRleHRfLT5uZXR3b3JrX21vZHVsZSgpLT5zdG9yYWdlX21hbmFnZXIoKSkpOwogICBEQ0hFQ0sobG9jYWxfc3RvcmFnZV9kYXRhYmFzZV8pOwogCi0gIHdlYl9tb2R1bGVfc3RhdF90cmFja2VyXy5yZXNldCgKLSAgICAgIG5ldyBicm93c2VyOjpXZWJNb2R1bGVTdGF0VHJhY2tlcihuYW1lXywgZGF0YS5vcHRpb25zLnRyYWNrX2V2ZW50X3N0YXRzKSk7CisgIHdlYl9tb2R1bGVfc3RhdF90cmFja2VyXy5yZXNldChuZXcgYnJvd3Nlcjo6V2ViTW9kdWxlU3RhdFRyYWNrZXIoCisgICAgICB3ZWJfY29udGV4dF8tPm5hbWUoKSwgZGF0YS5vcHRpb25zLnRyYWNrX2V2ZW50X3N0YXRzKSk7CiAgIERDSEVDSyh3ZWJfbW9kdWxlX3N0YXRfdHJhY2tlcl8pOwogCiAgIHBsYXRmb3JtX2luZm9fLnJlc2V0KG5ldyBicm93c2VyOjpVc2VyQWdlbnRQbGF0Zm9ybUluZm8oKSk7CiAgIERDSEVDSyhwbGF0Zm9ybV9pbmZvXyk7CiAKLSAgamF2YXNjcmlwdF9lbmdpbmVfID0gc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoCi0gICAgICBkYXRhLm9wdGlvbnMuamF2YXNjcmlwdF9lbmdpbmVfb3B0aW9ucyk7Ci0gIERDSEVDSyhqYXZhc2NyaXB0X2VuZ2luZV8pOwotCi0jaWYgZGVmaW5lZChDT0JBTFRfRU5BQkxFX0pBVkFTQ1JJUFRfRVJST1JfTE9HR0lORykKLSAgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpFcnJvckhhbmRsZXIgZXJyb3JfaGFuZGxlciA9Ci0gICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkxvZ1NjcmlwdEVycm9yLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKLSAgamF2YXNjcmlwdF9lbmdpbmVfLT5SZWdpc3RlckVycm9ySGFuZGxlcihlcnJvcl9oYW5kbGVyKTsKLSNlbmRpZgotCi0gIGdsb2JhbF9lbnZpcm9ubWVudF8gPSBqYXZhc2NyaXB0X2VuZ2luZV8tPkNyZWF0ZUdsb2JhbEVudmlyb25tZW50KCk7Ci0gIERDSEVDSyhnbG9iYWxfZW52aXJvbm1lbnRfKTsKLQotICBleGVjdXRpb25fc3RhdGVfID0KLSAgICAgIHNjcmlwdDo6RXhlY3V0aW9uU3RhdGU6OkNyZWF0ZUV4ZWN1dGlvblN0YXRlKGdsb2JhbF9lbnZpcm9ubWVudF8pOwotICBEQ0hFQ0soZXhlY3V0aW9uX3N0YXRlXyk7Ci0KLSAgc2NyaXB0X3J1bm5lcl8gPQotICAgICAgc2NyaXB0OjpTY3JpcHRSdW5uZXI6OkNyZWF0ZVNjcmlwdFJ1bm5lcihnbG9iYWxfZW52aXJvbm1lbnRfKTsKLSAgRENIRUNLKHNjcmlwdF9ydW5uZXJfKTsKLQogICBtZWRpYV9zb3VyY2VfcmVnaXN0cnlfLnJlc2V0KG5ldyBkb206Ok1lZGlhU291cmNlOjpSZWdpc3RyeSk7CiAKICAgY29uc3QgbWVkaWE6OkRlY29kZXJCdWZmZXJNZW1vcnlJbmZvKiBtZW1vcnlfaW5mbyA9IG51bGxwdHI7CkBAIC02MjMsMzYgKzU4MywzMSBAQAogICAgIG1lbW9yeV9pbmZvID0gc3R1Yl9kZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mb18uZ2V0KCk7CiAgIH0KIAotICBlbnZpcm9ubWVudF9zZXR0aW5nc18ucmVzZXQobmV3IGRvbTo6RE9NU2V0dGluZ3MoCi0gICAgICBrRE9NTWF4RWxlbWVudERlcHRoLCBmZXRjaGVyX2ZhY3RvcnlfLmdldCgpLCBkYXRhLm5ldHdvcmtfbW9kdWxlLAotICAgICAgbWVkaWFfc291cmNlX3JlZ2lzdHJ5Xy5nZXQoKSwgYmxvYl9yZWdpc3RyeV8uZ2V0KCksCi0gICAgICBkYXRhLmNhbl9wbGF5X3R5cGVfaGFuZGxlciwgbWVtb3J5X2luZm8sIGphdmFzY3JpcHRfZW5naW5lXy5nZXQoKSwKLSAgICAgIGdsb2JhbF9lbnZpcm9ubWVudF8uZ2V0KCksIGRlYnVnZ2VyX2hvb2tzXywKLSAgICAgICZtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXJfLCBkYXRhLm9wdGlvbnMuZG9tX3NldHRpbmdzX29wdGlvbnMpKTsKLSAgRENIRUNLKGVudmlyb25tZW50X3NldHRpbmdzXyk7CisgIHdlYl9jb250ZXh0Xy0+c2V0dXBfZW52aXJvbm1lbnRfc2V0dGluZ3MobmV3IGRvbTo6RE9NU2V0dGluZ3MoCisgICAgICBkZWJ1Z2dlcl9ob29rc18sIGtET01NYXhFbGVtZW50RGVwdGgsIG1lZGlhX3NvdXJjZV9yZWdpc3RyeV8uZ2V0KCksCisgICAgICBkYXRhLmNhbl9wbGF5X3R5cGVfaGFuZGxlciwgbWVtb3J5X2luZm8sICZtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXJfLAorICAgICAgZGF0YS5zZXJ2aWNlX3dvcmtlcl9qb2JzLCBkYXRhLm9wdGlvbnMuZG9tX3NldHRpbmdzX29wdGlvbnMpKTsKKyAgRENIRUNLKHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CiAKICAgc3lzdGVtX2NhcHRpb25fc2V0dGluZ3NfID0gbmV3IGNvYmFsdDo6ZG9tOjpjYXB0aW9uczo6U3lzdGVtQ2FwdGlvblNldHRpbmdzKAotICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3NfLmdldCgpKTsKKyAgICAgIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CiAKICAgZG9tOjpXaW5kb3c6OkNhY2hlQ2FsbGJhY2sgc3BsYXNoX3NjcmVlbl9jYWNoZV9jYWxsYmFjayA9CiAgICAgICBDYWNoZVVybENvbnRlbnRDYWxsYmFjayhkYXRhLm9wdGlvbnMuc3BsYXNoX3NjcmVlbl9jYWNoZSk7CiAKICAgLy8gVGhlc2UgbWVtYmVycyB3aWxsIHJlZmVyZW5jZSBvdGhlciB8VHJhY2VhYmxlfHMsIGhvd2V2ZXIgYXJlIG5vdAogICAvLyBhY2Nlc3NpYmxlIGZyb20gfFdpbmRvd3wsIHNvIHdlIG11c3QgZXhwbGljaXRseSBhZGQgdGhlbSBhcyByb290cy4KLSAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+QWRkUm9vdCgmbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyXyk7Ci0gIGdsb2JhbF9lbnZpcm9ubWVudF8tPkFkZFJvb3QobWVkaWFfc291cmNlX3JlZ2lzdHJ5Xy5nZXQoKSk7Ci0gIGdsb2JhbF9lbnZpcm9ubWVudF8tPkFkZFJvb3QoYmxvYl9yZWdpc3RyeV8uZ2V0KCkpOworICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5BZGRSb290KCZtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXJfKTsKKyAgd2ViX2NvbnRleHRfLT5nbG9iYWxfZW52aXJvbm1lbnQoKS0+QWRkUm9vdChtZWRpYV9zb3VyY2VfcmVnaXN0cnlfLmdldCgpKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogICBpZiAoZGF0YS5vcHRpb25zLndhaXRfZm9yX3dlYl9kZWJ1Z2dlcikgewogICAgIC8vIFBvc3QgYSB0YXNrIHRoYXQgYmxvY2tzIHRoZSBtZXNzYWdlIGxvb3AgYW5kIHdhaXRzIGZvciB0aGUgd2ViIGRlYnVnZ2VyLgogICAgIC8vIFRoaXMgbXVzdCBiZSBwb3N0ZWQgYmVmb3JlIHRoZSB0aGUgd2luZG93J3MgdGFzayB0byBsb2FkIHRoZSBkb2N1bWVudC4KKyAgICB3YWl0aW5nX2Zvcl93ZWJfZGVidWdnZXJfLT5zdG9yZSh0cnVlKTsKICAgICBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKICAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OldhaXRGb3JXZWJEZWJ1Z2dlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gd2FpdCBmb3IgdGhlIHdlYiBkZWJ1Z2dlciwgc28gY29uc2lkZXIgaXQgZmluaXNoZWQuCi0gICAgd2FpdF9mb3Jfd2ViX2RlYnVnZ2VyX2ZpbmlzaGVkXy5TaWduYWwoKTsKICAgfQogI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKIApAQCAtNjY0LDIzICs2MTksMjYgQEAKIAogICBzdGQ6OnVuaXF1ZV9wdHI8VXNlckFnZW50UGxhdGZvcm1JbmZvPiBwbGF0Zm9ybV9pbmZvKAogICAgICAgbmV3IFVzZXJBZ2VudFBsYXRmb3JtSW5mbygpKTsKKyAgRENIRUNLKHdlYl9jb250ZXh0Xy0+bmV0d29ya19tb2R1bGUoKSk7CiAgIHdpbmRvd18gPSBuZXcgZG9tOjpXaW5kb3coCi0gICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCksIGRhdGEud2luZG93X2RpbWVuc2lvbnMsCisgICAgICB3ZWJfY29udGV4dF8tPmVudmlyb25tZW50X3NldHRpbmdzKCksIGRhdGEud2luZG93X2RpbWVuc2lvbnMsCiAgICAgICBkYXRhLmluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsIGNzc19wYXJzZXJfLmdldCgpLCBkb21fcGFyc2VyXy5nZXQoKSwKLSAgICAgIGZldGNoZXJfZmFjdG9yeV8uZ2V0KCksIGxvYWRlcl9mYWN0b3J5Xy5nZXQoKSwgJnJlc291cmNlX3Byb3ZpZGVyXywKLSAgICAgIGFuaW1hdGVkX2ltYWdlX3RyYWNrZXJfLmdldCgpLCBpbWFnZV9jYWNoZV8uZ2V0KCksCisgICAgICB3ZWJfY29udGV4dF8tPmZldGNoZXJfZmFjdG9yeSgpLCBsb2FkZXJfZmFjdG9yeV8uZ2V0KCksCisgICAgICAmcmVzb3VyY2VfcHJvdmlkZXJfLCBhbmltYXRlZF9pbWFnZV90cmFja2VyXy5nZXQoKSwgaW1hZ2VfY2FjaGVfLmdldCgpLAogICAgICAgcmVkdWNlZF9pbWFnZV9jYWNoZV9jYXBhY2l0eV9tYW5hZ2VyXy5nZXQoKSwgcmVtb3RlX3R5cGVmYWNlX2NhY2hlXy5nZXQoKSwKICAgICAgIG1lc2hfY2FjaGVfLmdldCgpLCBsb2NhbF9zdG9yYWdlX2RhdGFiYXNlXy5nZXQoKSwKLSAgICAgIGRhdGEuY2FuX3BsYXlfdHlwZV9oYW5kbGVyLCBkYXRhLm1lZGlhX21vZHVsZSwgZXhlY3V0aW9uX3N0YXRlXy5nZXQoKSwKLSAgICAgIHNjcmlwdF9ydW5uZXJfLmdldCgpLCBnbG9iYWxfZW52aXJvbm1lbnRfLT5zY3JpcHRfdmFsdWVfZmFjdG9yeSgpLAorICAgICAgZGF0YS5jYW5fcGxheV90eXBlX2hhbmRsZXIsIGRhdGEubWVkaWFfbW9kdWxlLAorICAgICAgd2ViX2NvbnRleHRfLT5leGVjdXRpb25fc3RhdGUoKSwgd2ViX2NvbnRleHRfLT5zY3JpcHRfcnVubmVyKCksCisgICAgICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5zY3JpcHRfdmFsdWVfZmFjdG9yeSgpLAogICAgICAgbWVkaWFfc291cmNlX3JlZ2lzdHJ5Xy5nZXQoKSwKICAgICAgIHdlYl9tb2R1bGVfc3RhdF90cmFja2VyXy0+ZG9tX3N0YXRfdHJhY2tlcigpLCBkYXRhLmluaXRpYWxfdXJsLAotICAgICAgZGF0YS5uZXR3b3JrX21vZHVsZS0+R2V0VXNlckFnZW50KCksIHBsYXRmb3JtX2luZm9fLmdldCgpLAotICAgICAgZGF0YS5uZXR3b3JrX21vZHVsZS0+cHJlZmVycmVkX2xhbmd1YWdlKCksCisgICAgICB3ZWJfY29udGV4dF8tPm5ldHdvcmtfbW9kdWxlKCktPkdldFVzZXJBZ2VudCgpLCBwbGF0Zm9ybV9pbmZvXy5nZXQoKSwKKyAgICAgIHdlYl9jb250ZXh0Xy0+bmV0d29ya19tb2R1bGUoKS0+cHJlZmVycmVkX2xhbmd1YWdlKCksCiAgICAgICBiYXNlOjpHZXRTeXN0ZW1MYW5ndWFnZVNjcmlwdCgpLCBkYXRhLm9wdGlvbnMubmF2aWdhdGlvbl9jYWxsYmFjaywKICAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6T25Mb2FkQ29tcGxldGUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgZGF0YS5uZXR3b3JrX21vZHVsZS0+Y29va2llX2phcigpLCBkYXRhLm5ldHdvcmtfbW9kdWxlLT5HZXRQb3N0U2VuZGVyKCksCi0gICAgICBkYXRhLm9wdGlvbnMucmVxdWlyZV9jc3AsIGRhdGEub3B0aW9ucy5jc3BfZW5mb3JjZW1lbnRfbW9kZSwKKyAgICAgIHdlYl9jb250ZXh0Xy0+bmV0d29ya19tb2R1bGUoKS0+Y29va2llX2phcigpLAorICAgICAgd2ViX2NvbnRleHRfLT5uZXR3b3JrX21vZHVsZSgpLT5HZXRQb3N0U2VuZGVyKCksIGRhdGEub3B0aW9ucy5yZXF1aXJlX2NzcCwKKyAgICAgIGRhdGEub3B0aW9ucy5jc3BfZW5mb3JjZW1lbnRfbW9kZSwKICAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6T25Dc3BQb2xpY3lDaGFuZ2VkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKICAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6T25SYW5BbmltYXRpb25GcmFtZUNhbGxiYWNrcywKICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCkBAIC02ODksNyArNjQ3LDcgQEAKICAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6T25TdGFydERpc3BhdGNoRXZlbnQsCiAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAogICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpPblN0b3BEaXNwYXRjaEV2ZW50LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIGRhdGEub3B0aW9ucy5wcm92aWRlX3NjcmVlbnNob3RfZnVuY3Rpb24sICZzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0XywKKyAgICAgIGRhdGEub3B0aW9ucy5wcm92aWRlX3NjcmVlbnNob3RfZnVuY3Rpb24sIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHRfLAogICAgICAgZGF0YS5vcHRpb25zLmVuYWJsZV9pbmxpbmVfc2NyaXB0X3dhcm5pbmdzLCBkYXRhLnVpX25hdl9yb290LAogICAgICAgZGF0YS5vcHRpb25zLmVuYWJsZV9tYXBfdG9fbWVzaCwgZGF0YS5vcHRpb25zLmNzcF9pbnNlY3VyZV9hbGxvd2VkX3Rva2VuLAogICAgICAgZGF0YS5kb21fbWF4X2VsZW1lbnRfZGVwdGgsIGRhdGEub3B0aW9ucy52aWRlb19wbGF5YmFja19yYXRlX211bHRpcGxpZXIsCkBAIC03MDgsOSArNjY2LDEzIEBACiAgIHdpbmRvd193ZWFrXyA9IGJhc2U6OkFzV2Vha1B0cih3aW5kb3dfLmdldCgpKTsKICAgRENIRUNLKHdpbmRvd193ZWFrXyk7CiAKLSAgZW52aXJvbm1lbnRfc2V0dGluZ3NfLT5zZXRfd2luZG93KHdpbmRvd18pOworICBkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KAorICAgICAgICAgIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CisgIGRvbV9zZXR0aW5ncy0+c2V0X3dpbmRvdyh3aW5kb3dfKTsKIAotICBnbG9iYWxfZW52aXJvbm1lbnRfLT5DcmVhdGVHbG9iYWxPYmplY3Qod2luZG93XywgZW52aXJvbm1lbnRfc2V0dGluZ3NfLmdldCgpKTsKKyAgd2ViX2NvbnRleHRfLT5nbG9iYWxfZW52aXJvbm1lbnQoKS0+Q3JlYXRlR2xvYmFsT2JqZWN0KAorICAgICAgd2luZG93Xywgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpKTsKIAogICByZW5kZXJfdHJlZV9wcm9kdWNlZF9jYWxsYmFja18gPSBkYXRhLnJlbmRlcl90cmVlX3Byb2R1Y2VkX2NhbGxiYWNrOwogICBEQ0hFQ0soIXJlbmRlcl90cmVlX3Byb2R1Y2VkX2NhbGxiYWNrXy5pc19udWxsKCkpOwpAQCAtNzI1LDEyICs2ODcsMTMgQEAKICAgYm9vbCBpc19jb25jZWFsZWQgPQogICAgICAgKGRhdGEuaW5pdGlhbF9hcHBsaWNhdGlvbl9zdGF0ZSA9PSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZUNvbmNlYWxlZCk7CiAgIGxheW91dF9tYW5hZ2VyXy5yZXNldChuZXcgbGF5b3V0OjpMYXlvdXRNYW5hZ2VyKAotICAgICAgaXNfY29uY2VhbGVkLCBuYW1lXywgd2luZG93Xy5nZXQoKSwKKyAgICAgIGlzX2NvbmNlYWxlZCwgd2ViX2NvbnRleHRfLT5uYW1lKCksIHdpbmRvd18uZ2V0KCksCiAgICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6Ok9uUmVuZGVyVHJlZVByb2R1Y2VkLAogICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKICAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6SGFuZGxlUG9pbnRlckV2ZW50cywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCiAgICAgICBkYXRhLm9wdGlvbnMubGF5b3V0X3RyaWdnZXIsIGRhdGEuZG9tX21heF9lbGVtZW50X2RlcHRoLAotICAgICAgZGF0YS5sYXlvdXRfcmVmcmVzaF9yYXRlLCBkYXRhLm5ldHdvcmtfbW9kdWxlLT5wcmVmZXJyZWRfbGFuZ3VhZ2UoKSwKKyAgICAgIGRhdGEubGF5b3V0X3JlZnJlc2hfcmF0ZSwKKyAgICAgIHdlYl9jb250ZXh0Xy0+bmV0d29ya19tb2R1bGUoKS0+cHJlZmVycmVkX2xhbmd1YWdlKCksCiAgICAgICBkYXRhLm9wdGlvbnMuZW5hYmxlX2ltYWdlX2FuaW1hdGlvbnMsCiAgICAgICB3ZWJfbW9kdWxlX3N0YXRfdHJhY2tlcl8tPmxheW91dF9zdGF0X3RyYWNrZXIoKSwKICAgICAgIGRhdGEub3B0aW9ucy5jbGVhcl93aW5kb3dfd2l0aF9iYWNrZ3JvdW5kX2NvbG9yKSk7CkBAIC03NDAsMzggKzcwMywzNiBAQAogICBpZiAoZGF0YS5vcHRpb25zLmNzcF9lbmZvcmNlbWVudF9tb2RlID09IGRvbTo6a0NzcEVuZm9yY2VtZW50RGlzYWJsZSkgewogICAgIC8vIElmIENTUCBpcyBkaXNhYmxlZCwgZW5hYmxlIGV2YWwoKS4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGVuYWJsZWQgYnkKICAgICAvLyBhIENTUCBkaXJlY3RpdmUuCi0gICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+RW5hYmxlRXZhbCgpOworICAgIHdlYl9jb250ZXh0Xy0+Z2xvYmFsX2Vudmlyb25tZW50KCktPkVuYWJsZUV2YWwoKTsKICAgfQogI2VuZGlmCiAKLSAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+U2V0UmVwb3J0RXZhbENhbGxiYWNrKAorICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5TZXRSZXBvcnRFdmFsQ2FsbGJhY2soCiAgICAgICBiYXNlOjpCaW5kKCZkb206OkNzcERlbGVnYXRlOjpSZXBvcnRFdmFsLAogICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHdpbmRvd18tPmRvY3VtZW50KCktPmNzcF9kZWxlZ2F0ZSgpKSkpOwogCi0gIGdsb2JhbF9lbnZpcm9ubWVudF8tPlNldFJlcG9ydEVycm9yQ2FsbGJhY2soCisgIHdlYl9jb250ZXh0Xy0+Z2xvYmFsX2Vudmlyb25tZW50KCktPlNldFJlcG9ydEVycm9yQ2FsbGJhY2soCiAgICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OlJlcG9ydFNjcmlwdEVycm9yLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7CiAKLSAgSW5qZWN0Q3VzdG9tV2luZG93QXR0cmlidXRlcyhkYXRhLm9wdGlvbnMuaW5qZWN0ZWRfd2luZG93X2F0dHJpYnV0ZXMpOwotCiAgIGlmICghZGF0YS5vcHRpb25zLmxvYWRlZF9jYWxsYmFja3MuZW1wdHkoKSkgewogICAgIGRvY3VtZW50X2xvYWRfb2JzZXJ2ZXJfLnJlc2V0KAogICAgICAgICBuZXcgRG9jdW1lbnRMb2FkZWRPYnNlcnZlcihkYXRhLm9wdGlvbnMubG9hZGVkX2NhbGxiYWNrcykpOwogICAgIHdpbmRvd18tPmRvY3VtZW50KCktPkFkZE9ic2VydmVyKGRvY3VtZW50X2xvYWRfb2JzZXJ2ZXJfLmdldCgpKTsKICAgfQogCi0jaWYgZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKLSAgd2luZG93Xy0+ZG9jdW1lbnQoKS0+U2V0UGFydGlhbExheW91dChkYXRhLm9wdGlvbnMuZW5hYmxlX3BhcnRpYWxfbGF5b3V0KTsKLSNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKLQogI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogICBkZWJ1Z19vdmVybGF5Xy5yZXNldCgKICAgICAgIG5ldyBkZWJ1Zzo6YmFja2VuZDo6UmVuZGVyT3ZlcmxheShyZW5kZXJfdHJlZV9wcm9kdWNlZF9jYWxsYmFja18pKTsKIAogICBkZWJ1Z19tb2R1bGVfLnJlc2V0KG5ldyBkZWJ1Zzo6YmFja2VuZDo6RGVidWdNb2R1bGUoCi0gICAgICAmZGVidWdnZXJfaG9va3NfLCBnbG9iYWxfZW52aXJvbm1lbnRfLmdldCgpLCBkZWJ1Z19vdmVybGF5Xy5nZXQoKSwKLSAgICAgIHJlc291cmNlX3Byb3ZpZGVyXywgd2luZG93XywgZGF0YS5vcHRpb25zLmRlYnVnZ2VyX3N0YXRlKSk7CisgICAgICAmZGVidWdnZXJfaG9va3NfLCB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLAorICAgICAgZGVidWdfb3ZlcmxheV8uZ2V0KCksIHJlc291cmNlX3Byb3ZpZGVyXywgd2luZG93XywKKyAgICAgIGRhdGEub3B0aW9ucy5kZWJ1Z2dlcl9zdGF0ZSkpOwogI2VuZGlmICAvLyBFTkFCTEVfREVCVUdHRVIKIAorICByZXBvcnRfdW5sb2FkX3RpbWluZ19pbmZvX2NhbGxiYWNrXyA9CisgICAgICBkYXRhLm9wdGlvbnMuY29sbGVjdF91bmxvYWRfZXZlbnRfdGltZV9jYWxsYmFjazsKKwogICBpc19ydW5uaW5nXyA9IHRydWU7CiB9CiAKQEAgLTc3OSwxMCArNzQwLDIxIEBACiAgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CiAgIERDSEVDSyhpc19ydW5uaW5nXyk7CiAgIGlzX3J1bm5pbmdfID0gZmFsc2U7Ci0gIGdsb2JhbF9lbnZpcm9ubWVudF8tPlNldFJlcG9ydEV2YWxDYWxsYmFjayhiYXNlOjpDbG9zdXJlKCkpOwotICBnbG9iYWxfZW52aXJvbm1lbnRfLT5TZXRSZXBvcnRFcnJvckNhbGxiYWNrKAotICAgICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudDo6UmVwb3J0RXJyb3JDYWxsYmFjaygpKTsKKworICAvLyBDb2xsZWN0IGRvY3VtZW50J3MgdW5sb2FkIGV2ZW50IHN0YXJ0IHRpbWUuCisgIGJhc2U6OlRpbWVUaWNrcyB1bmxvYWRfZXZlbnRfc3RhcnRfdGltZSA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7CisKICAgd2luZG93Xy0+RGlzcGF0Y2hFdmVudChuZXcgZG9tOjpFdmVudChiYXNlOjpUb2tlbnM6OnVubG9hZCgpKSk7CisKKyAgLy8gQ29sbGVjdCBkb2N1bWVudCdzIHVubG9hZCBldmVudCBlbmQgdGltZS4KKyAgYmFzZTo6VGltZVRpY2tzIHVubG9hZF9ldmVudF9lbmRfdGltZSA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7CisKKyAgLy8gU2VuZCB0aGUgdW5sb2FkIGV2ZW50IHN0YXJ0L2VuZCB0aW1lIGJhY2sgdG8gYXBwbGljYXRpb24uCisgIGlmICghcmVwb3J0X3VubG9hZF90aW1pbmdfaW5mb19jYWxsYmFja18uaXNfbnVsbCgpKSB7CisgICAgcmVwb3J0X3VubG9hZF90aW1pbmdfaW5mb19jYWxsYmFja18uUnVuKHVubG9hZF9ldmVudF9zdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxvYWRfZXZlbnRfZW5kX3RpbWUpOworICB9CisKICAgZG9jdW1lbnRfbG9hZF9vYnNlcnZlcl8ucmVzZXQoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQpAQCAtNzk4LDMzICs3NzAsMjcgQEAKIAogICB0b3Btb3N0X2V2ZW50X3RhcmdldF8ucmVzZXQoKTsKICAgbGF5b3V0X21hbmFnZXJfLnJlc2V0KCk7Ci0gIGVudmlyb25tZW50X3NldHRpbmdzXy5yZXNldCgpOwogICBzdHViX2RlY29kZXJfYnVmZmVyX21lbW9yeV9pbmZvXy5yZXNldCgpOwogICB3aW5kb3dfd2Vha18ucmVzZXQoKTsKICAgd2luZG93Xy0+Q2xlYXJQb2ludGVyU3RhdGVGb3JTaHV0ZG93bigpOwogICB3aW5kb3dfID0gTlVMTDsKICAgbWVkaWFfc291cmNlX3JlZ2lzdHJ5Xy5yZXNldCgpOwotICBibG9iX3JlZ2lzdHJ5Xy5yZXNldCgpOwotICBzY3JpcHRfcnVubmVyXy5yZXNldCgpOwotICBleGVjdXRpb25fc3RhdGVfLnJlc2V0KCk7Ci0gIGdsb2JhbF9lbnZpcm9ubWVudF8gPSBOVUxMOwotICBqYXZhc2NyaXB0X2VuZ2luZV8ucmVzZXQoKTsKLSAgd2ViX21vZHVsZV9zdGF0X3RyYWNrZXJfLnJlc2V0KCk7CisgIHdlYl9jb250ZXh0Xy0+U2h1dERvd25KYXZhU2NyaXB0RW5naW5lKCk7CiAgIHBsYXRmb3JtX2luZm9fLnJlc2V0KCk7CiAgIGxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfLnJlc2V0KCk7CiAgIG1lc2hfY2FjaGVfLnJlc2V0KCk7CiAgIHJlbW90ZV90eXBlZmFjZV9jYWNoZV8ucmVzZXQoKTsKLSAgaW1hZ2VfY2FjaGVfLnJlc2V0KCk7CiAgIGFuaW1hdGVkX2ltYWdlX3RyYWNrZXJfLnJlc2V0KCk7Ci0gIGZldGNoZXJfZmFjdG9yeV8ucmVzZXQoKTsKICAgZG9tX3BhcnNlcl8ucmVzZXQoKTsKICAgY3NzX3BhcnNlcl8ucmVzZXQoKTsKKyAgaW1hZ2VfY2FjaGVfLnJlc2V0KCk7CisgIHdlYl9tb2R1bGVfc3RhdF90cmFja2VyXy5yZXNldCgpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6SW1wbDo6SW5qZWN0SW5wdXRFdmVudChzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8ZG9tOjpFdmVudD4mIGV2ZW50KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0SW5wdXRFdmVudCgpIiwKLSAgICAgICAgICAgICAgICJldmVudCIsIGV2ZW50LT50eXBlKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAiZXZlbnQiLCBUUkFDRV9TVFJfQ09QWShldmVudC0+dHlwZSgpLmNfc3RyKCkpKTsKICAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKICAgRENIRUNLKGlzX3J1bm5pbmdfKTsKICAgRENIRUNLKHdpbmRvd18pOwpAQCAtODQ2LDEwICs4MTIsOSBAQAogICB9CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBXZWJNb2R1bGU6OkltcGw6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50KAotICAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PiBlbGVtZW50LCBiYXNlOjpUb2tlbiB0eXBlLAotICAgIGNvbnN0IGRvbTo6SW5wdXRFdmVudEluaXQmIGV2ZW50KSB7CisgICAgYmFzZTo6VG9rZW4gdHlwZSwgY29uc3QgZG9tOjpJbnB1dEV2ZW50SW5pdCYgZXZlbnQsCisgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQpIHsKICAgc2NvcGVkX3JlZnB0cjxkb206OklucHV0RXZlbnQ+IGlucHV0X2V2ZW50KAogICAgICAgbmV3IGRvbTo6SW5wdXRFdmVudCh0eXBlLCB3aW5kb3dfLCBldmVudCkpOwogICBJbmplY3RJbnB1dEV2ZW50KGVsZW1lbnQsIGlucHV0X2V2ZW50KTsKQEAgLTkwMCw1OCArODY1LDYxIEBACiAKICAgd2luZG93Xy0+b25fc2NyZWVuX2tleWJvYXJkKCktPkRpc3BhdGNoU3VnZ2VzdGlvbnNVcGRhdGVkRXZlbnQodGlja2V0KTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIAotdm9pZCBXZWJNb2R1bGU6OkltcGw6OkluamVjdEtleWJvYXJkRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpLZXlib2FyZEV2ZW50SW5pdCYgZXZlbnQpIHsKKwordm9pZCBXZWJNb2R1bGU6OkltcGw6OkluamVjdEtleWJvYXJkRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6S2V5Ym9hcmRFdmVudEluaXQmIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQpIHsKICAgc2NvcGVkX3JlZnB0cjxkb206OktleWJvYXJkRXZlbnQ+IGtleWJvYXJkX2V2ZW50KAogICAgICAgbmV3IGRvbTo6S2V5Ym9hcmRFdmVudCh0eXBlLCB3aW5kb3dfLCBldmVudCkpOwogICBJbmplY3RJbnB1dEV2ZW50KGVsZW1lbnQsIGtleWJvYXJkX2V2ZW50KTsKIH0KIAotdm9pZCBXZWJNb2R1bGU6OkltcGw6OkluamVjdFBvaW50ZXJFdmVudChzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW4gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpQb2ludGVyRXZlbnRJbml0JiBldmVudCkgewordm9pZCBXZWJNb2R1bGU6OkltcGw6OkluamVjdFBvaW50ZXJFdmVudChiYXNlOjpUb2tlbiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OlBvaW50ZXJFdmVudEluaXQmIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCkgewogICBzY29wZWRfcmVmcHRyPGRvbTo6UG9pbnRlckV2ZW50PiBwb2ludGVyX2V2ZW50KAogICAgICAgbmV3IGRvbTo6UG9pbnRlckV2ZW50KHR5cGUsIHdpbmRvd18sIGV2ZW50KSk7CiAgIEluamVjdElucHV0RXZlbnQoZWxlbWVudCwgcG9pbnRlcl9ldmVudCk7CiB9CiAKLXZvaWQgV2ViTW9kdWxlOjpJbXBsOjpJbmplY3RXaGVlbEV2ZW50KHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW4gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6V2hlZWxFdmVudEluaXQmIGV2ZW50KSB7Cit2b2lkIFdlYk1vZHVsZTo6SW1wbDo6SW5qZWN0V2hlZWxFdmVudChiYXNlOjpUb2tlbiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpXaGVlbEV2ZW50SW5pdCYgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCkgewogICBzY29wZWRfcmVmcHRyPGRvbTo6V2hlZWxFdmVudD4gd2hlZWxfZXZlbnQoCiAgICAgICBuZXcgZG9tOjpXaGVlbEV2ZW50KHR5cGUsIHdpbmRvd18sIGV2ZW50KSk7CiAgIEluamVjdElucHV0RXZlbnQoZWxlbWVudCwgd2hlZWxfZXZlbnQpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6SW1wbDo6VXBkYXRlRGF0ZVRpbWVDb25maWd1cmF0aW9uKCkgewotICBpZiAoamF2YXNjcmlwdF9lbmdpbmVfKSB7Ci0gICAgamF2YXNjcmlwdF9lbmdpbmVfLT5VcGRhdGVEYXRlVGltZUNvbmZpZ3VyYXRpb24oKTsKKyAgaWYgKHdlYl9jb250ZXh0XyAmJiB3ZWJfY29udGV4dF8tPmphdmFzY3JpcHRfZW5naW5lKCkpIHsKKyAgICB3ZWJfY29udGV4dF8tPmphdmFzY3JpcHRfZW5naW5lKCktPlVwZGF0ZURhdGVUaW1lQ29uZmlndXJhdGlvbigpOwogICB9CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbXBsOjpFeGVjdXRlSmF2YXNjcmlwdCgKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0X3V0ZjgsIGNvbnN0IGJhc2U6OlNvdXJjZUxvY2F0aW9uJiBzY3JpcHRfbG9jYXRpb24sCi0gICAgYmFzZTo6V2FpdGFibGVFdmVudCogZ290X3Jlc3VsdCwgc3RkOjpzdHJpbmcqIHJlc3VsdCwgYm9vbCogb3V0X3N1Y2NlZWRlZCkgeworICAgIHN0ZDo6c3RyaW5nKiByZXN1bHQsIGJvb2wqIG91dF9zdWNjZWVkZWQpIHsKICAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKICAgRENIRUNLKGlzX3J1bm5pbmdfKTsKLSAgRENIRUNLKHNjcmlwdF9ydW5uZXJfKTsKKyAgRENIRUNLKHdlYl9jb250ZXh0Xy0+c2NyaXB0X3J1bm5lcigpKTsKIAogICAvLyBKYXZhU2NyaXB0IGlzIGJlaW5nIHJ1bi4gVHJhY2sgaXQgaW4gdGhlIGdsb2JhbCBzdGF0cy4KICAgZG9tOjpHbG9iYWxTdGF0czo6R2V0SW5zdGFuY2UoKS0+U3RhcnRKYXZhU2NyaXB0RXZlbnQoKTsKIAogICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgQ29iYWx0IEphdmFTY3JpcHQsIGVycm9yIHJlcG9ydHMgYXJlCiAgIC8vIGFsbG93ZWQuCi0gICpyZXN1bHQgPSBzY3JpcHRfcnVubmVyXy0+RXhlY3V0ZShzY3JpcHRfdXRmOCwgc2NyaXB0X2xvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyptdXRlX2Vycm9ycyovLCBvdXRfc3VjY2VlZGVkKTsKKyAgaWYgKHJlc3VsdCkgeworICAgICpyZXN1bHQgPSB3ZWJfY29udGV4dF8tPnNjcmlwdF9ydW5uZXIoKS0+RXhlY3V0ZSgKKyAgICAgICAgc2NyaXB0X3V0ZjgsIHNjcmlwdF9sb2NhdGlvbiwgZmFsc2UgLyptdXRlX2Vycm9ycyovLCBvdXRfc3VjY2VlZGVkKTsKKyAgfSBlbHNlIHsKKyAgICB3ZWJfY29udGV4dF8tPnNjcmlwdF9ydW5uZXIoKS0+RXhlY3V0ZSgKKyAgICAgICAgc2NyaXB0X3V0ZjgsIHNjcmlwdF9sb2NhdGlvbiwgZmFsc2UgLyptdXRlX2Vycm9ycyovLCBvdXRfc3VjY2VlZGVkKTsKKyAgfQorCiAKICAgLy8gSmF2YVNjcmlwdCBpcyBkb25lIHJ1bm5pbmcuIFN0b3AgdHJhY2tpbmcgaXQgaW4gdGhlIGdsb2JhbCBzdGF0cy4KICAgZG9tOjpHbG9iYWxTdGF0czo6R2V0SW5zdGFuY2UoKS0+U3RvcEphdmFTY3JpcHRFdmVudCgpOwotCi0gIGdvdF9yZXN1bHQtPlNpZ25hbCgpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6SW1wbDo6Q2xlYXJBbGxJbnRlcnZhbHNBbmRUaW1lb3V0cygpIHsKQEAgLTEwMTQsMTAgKzk4Miw2IEBACiAgIH0KIH0KIAotdm9pZCBXZWJNb2R1bGU6OkltcGw6OkNhbmNlbFN5bmNocm9ub3VzTG9hZHMoKSB7Ci0gIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHRfLlNpZ25hbCgpOwotfQotCiB2b2lkIFdlYk1vZHVsZTo6SW1wbDo6RG9TeW5jaHJvbm91c0xheW91dEFuZEdldFJlbmRlclRyZWUoCiAgICAgc2NvcGVkX3JlZnB0cjxyZW5kZXJfdHJlZTo6Tm9kZT4qIHJlbmRlcl90cmVlKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwKQEAgLTEwMjUsMTIgKzk4OSwxMyBAQAogICBEQ0hFQ0socmVuZGVyX3RyZWUpOwogICBzY29wZWRfcmVmcHRyPHJlbmRlcl90cmVlOjpOb2RlPiB0cmVlID0KICAgICAgIHdpbmRvd18tPmRvY3VtZW50KCktPkRvU3luY2hyb25vdXNMYXlvdXRBbmRHZXRSZW5kZXJUcmVlKCk7Ci0gICpyZW5kZXJfdHJlZSA9IHRyZWU7CisgIGlmIChyZW5kZXJfdHJlZSkgKnJlbmRlcl90cmVlID0gdHJlZTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkltcGw6OlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAoCiAgICAgYm9vbCBpc19wcmVsb2FkLCBTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CiAgIERDSEVDSyh3aW5kb3dfKTsKKyAgRENIRUNLKHdpbmRvd18tPnBlcmZvcm1hbmNlKCkpOwogICB3aW5kb3dfLT5wZXJmb3JtYW5jZSgpLT5TZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKGlzX3ByZWxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wKTsKIH0KQEAgLTEwNDAsNiArMTAwNSwxNCBAQAogICB3aW5kb3dfLT5wZXJmb3JtYW5jZSgpLT5TZXREZWVwTGlua1RpbWVzdGFtcCh0aW1lc3RhbXApOwogfQogCit2b2lkIFdlYk1vZHVsZTo6SW1wbDo6U2V0VW5sb2FkRXZlbnRUaW1pbmdJbmZvKGJhc2U6OlRpbWVUaWNrcyBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lVGlja3MgZW5kX3RpbWUpIHsKKyAgRENIRUNLKHdpbmRvd18pOworICBpZiAod2luZG93Xy0+ZG9jdW1lbnQoKSkgeworICAgIHdpbmRvd18tPmRvY3VtZW50KCktPlNldFVubG9hZEV2ZW50VGltaW5nSW5mbyhzdGFydF90aW1lLCBlbmRfdGltZSk7CisgIH0KK30KKwogdm9pZCBXZWJNb2R1bGU6OkltcGw6Ok9uQ3NwUG9saWN5Q2hhbmdlZCgpIHsKICAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKICAgRENIRUNLKGlzX3J1bm5pbmdfKTsKQEAgLTEwNTEsOSArMTAyNCw5IEBACiAgIGJvb2wgYWxsb3dfZXZhbCA9CiAgICAgICB3aW5kb3dfLT5kb2N1bWVudCgpLT5jc3BfZGVsZWdhdGUoKS0+QWxsb3dFdmFsKCZldmFsX2Rpc2FibGVkX21lc3NhZ2UpOwogICBpZiAoYWxsb3dfZXZhbCkgewotICAgIGdsb2JhbF9lbnZpcm9ubWVudF8tPkVuYWJsZUV2YWwoKTsKKyAgICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5FbmFibGVFdmFsKCk7CiAgIH0gZWxzZSB7Ci0gICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+RGlzYWJsZUV2YWwoZXZhbF9kaXNhYmxlZF9tZXNzYWdlKTsKKyAgICB3ZWJfY29udGV4dF8tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5EaXNhYmxlRXZhbChldmFsX2Rpc2FibGVkX21lc3NhZ2UpOwogICB9CiB9CiAKQEAgLTEwNzQsNyArMTA0Nyw3IEBACiAgIERDSEVDSyh3aW5kb3dfKTsKICAgRENIRUNLKHdpbmRvd193ZWFrXyk7CiAgIERDSEVDSyh3aW5kb3dfLT5kb2N1bWVudCgpKTsKLSAgRENIRUNLKGdsb2JhbF9lbnZpcm9ubWVudF8pOworICBEQ0hFQ0sod2ViX2NvbnRleHRfLT5nbG9iYWxfZW52aXJvbm1lbnQoKSk7CiAKICAgd2luZG93X2RyaXZlcl9vdXQtPnJlc2V0KG5ldyB3ZWJkcml2ZXI6OldpbmRvd0RyaXZlcigKICAgICAgIHdpbmRvd19pZCwgd2luZG93X3dlYWtfLApAQCAtMTA5NCwyMyArMTA2NywxMCBAQAogICAgICAgICAgICAgICAgICAgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSI7CiAgIC8vIFRoaXMgYmxvY2tzIHVudGlsIHRoZSB3ZWIgZGVidWdnZXIgY29ubmVjdHMuCiAgIGRlYnVnX21vZHVsZV8tPmRlYnVnX2Rpc3BhdGNoZXIoKS0+U2V0UGF1c2VkKHRydWUpOwotICB3YWl0X2Zvcl93ZWJfZGVidWdnZXJfZmluaXNoZWRfLlNpZ25hbCgpOworICB3YWl0aW5nX2Zvcl93ZWJfZGVidWdnZXJfLT5zdG9yZShmYWxzZSk7CiB9CiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogCi12b2lkIFdlYk1vZHVsZTo6SW1wbDo6SW5qZWN0Q3VzdG9tV2luZG93QXR0cmlidXRlcygKLSAgICBjb25zdCBPcHRpb25zOjpJbmplY3RlZFdpbmRvd0F0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpIHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLSAgRENIRUNLKGdsb2JhbF9lbnZpcm9ubWVudF8pOwotCi0gIGZvciAoT3B0aW9uczo6SW5qZWN0ZWRXaW5kb3dBdHRyaWJ1dGVzOjpjb25zdF9pdGVyYXRvciBpdGVyID0KLSAgICAgICAgICAgYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+QmluZCgKLSAgICAgICAgaXRlci0+Zmlyc3QsIGl0ZXItPnNlY29uZC5SdW4od2luZG93XywgZ2xvYmFsX2Vudmlyb25tZW50Xy5nZXQoKSkpOwotICB9Ci19Ci0KIHZvaWQgV2ViTW9kdWxlOjpJbXBsOjpTZXRJbWFnZUNhY2hlQ2FwYWNpdHkoaW50NjRfdCBieXRlcykgewogICBpbWFnZV9jYWNoZV8tPlNldENhcGFjaXR5KHN0YXRpY19jYXN0PHVpbnQzMj4oYnl0ZXMpKTsKIH0KQEAgLTExMzAsNyArMTA5MCwxMiBAQAogCiB2b2lkIFdlYk1vZHVsZTo6SW1wbDo6U2V0TWVkaWFNb2R1bGUobWVkaWE6Ok1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUpIHsKICAgU0JfRENIRUNLKG1lZGlhX21vZHVsZSk7Ci0gIGVudmlyb25tZW50X3NldHRpbmdzXy0+c2V0X2RlY29kZXJfYnVmZmVyX21lbW9yeV9pbmZvKAorCisgIGRvbTo6RE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9CisgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oCisgICAgICAgICAgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpKTsKKworICBkb21fc2V0dGluZ3MtPnNldF9kZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mbygKICAgICAgIG1lZGlhX21vZHVsZS0+R2V0RGVjb2RlckJ1ZmZlckFsbG9jYXRvcigpKTsKICAgd2luZG93Xy0+c2V0X3dlYl9tZWRpYV9wbGF5ZXJfZmFjdG9yeShtZWRpYV9tb2R1bGUpOwogfQpAQCAtMTE5NSw5ICsxMTYwLDkgQEAKICAgZGVidWdfb3ZlcmxheV8tPkNsZWFySW5wdXQoKTsKICNlbmRpZgogCi0gIC8vIEZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBpbiB8amF2YXNjcmlwdF9lbmdpbmVffC4KLSAgaWYgKGphdmFzY3JpcHRfZW5naW5lXykgewotICAgIGphdmFzY3JpcHRfZW5naW5lXy0+Q29sbGVjdEdhcmJhZ2UoKTsKKyAgLy8gRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHxqYXZhc2NyaXB0X2VuZ2luZXwuCisgIGlmICh3ZWJfY29udGV4dF8gJiYgd2ViX2NvbnRleHRfLT5qYXZhc2NyaXB0X2VuZ2luZSgpKSB7CisgICAgd2ViX2NvbnRleHRfLT5qYXZhc2NyaXB0X2VuZ2luZSgpLT5Db2xsZWN0R2FyYmFnZSgpOwogICB9CiAKICAgbG9hZGVyX2ZhY3RvcnlfLT5VcGRhdGVSZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlX3Byb3ZpZGVyXyk7CkBAIC0xMjIxLDcgKzExODYsNyBAQAogdm9pZCBXZWJNb2R1bGU6OkltcGw6OlVuZnJlZXplKHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW1wbDo6VW5mcmVlemUoKSIpOwotICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy5SZXNldCgpOworICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy0+UmVzZXQoKTsKICAgRENIRUNLKHJlc291cmNlX3Byb3ZpZGVyKTsKIAogICBsb2FkZXJfZmFjdG9yeV8tPlJlc3VtZShyZXNvdXJjZV9wcm92aWRlcik7CkBAIC0xMjMxLDcgKzExOTYsNyBAQAogdm9pZCBXZWJNb2R1bGU6OkltcGw6OlJldmVhbChyZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiV2ViTW9kdWxlOjpJbXBsOjpSZXZlYWwoKSIpOwotICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy5SZXNldCgpOworICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy0+UmVzZXQoKTsKICAgRENIRUNLKHJlc291cmNlX3Byb3ZpZGVyKTsKICAgU2V0UmVzb3VyY2VQcm92aWRlcihyZXNvdXJjZV9wcm92aWRlcik7CiAKQEAgLTEyNDYsNyArMTIxMSw3IEBACiAKIHZvaWQgV2ViTW9kdWxlOjpJbXBsOjpGb2N1cyhTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW1wbDo6Rm9jdXMoKSIpOwotICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy5SZXNldCgpOworICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy0+UmVzZXQoKTsKICAgU2V0QXBwbGljYXRpb25TdGF0ZShiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQsIHRpbWVzdGFtcCk7CiB9CiAKQEAgLTEyNTYsNyArMTIyMSw3IEBACiAgIGlmICghaXNfcnVubmluZ18pIHsKICAgICByZXR1cm47CiAgIH0KLSAgc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF8uUmVzZXQoKTsKKyAgc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF8tPlJlc2V0KCk7CiAKICAgbGF5b3V0X21hbmFnZXJfLT5QdXJnZSgpOwogCkBAIC0xMjY0LDIyICsxMjI5LDEyIEBACiAgIFB1cmdlUmVzb3VyY2VDYWNoZXModHJ1ZSAvKnNob3VsZF9yZXRhaW5fcmVtb3RlX3R5cGVmYWNlX2NhY2hlKi8pOwogICB3aW5kb3dfLT5kb2N1bWVudCgpLT5QdXJnZUNhY2hlZFJlc291cmNlcygpOwogCi0gIC8vIEZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBpbiB8amF2YXNjcmlwdF9lbmdpbmVffC4KLSAgaWYgKGphdmFzY3JpcHRfZW5naW5lXykgewotICAgIGphdmFzY3JpcHRfZW5naW5lXy0+Q29sbGVjdEdhcmJhZ2UoKTsKKyAgLy8gRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHxqYXZhc2NyaXB0X2VuZ2luZXwuCisgIGlmICh3ZWJfY29udGV4dF8gJiYgd2ViX2NvbnRleHRfLT5qYXZhc2NyaXB0X2VuZ2luZSgpKSB7CisgICAgd2ViX2NvbnRleHRfLT5qYXZhc2NyaXB0X2VuZ2luZSgpLT5Db2xsZWN0R2FyYmFnZSgpOwogICB9CiB9CiAKLXZvaWQgV2ViTW9kdWxlOjpJbXBsOjpHZXRKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3MoCi0gICAgY29uc3QgSmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzQ2FsbGJhY2smIGNhbGxiYWNrKSB7Ci0gIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwKLSAgICAgICAgICAgICAgICJXZWJNb2R1bGU6OkltcGw6OkdldEphdmFTY3JpcHRIZWFwU3RhdGlzdGljcygpIik7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0gIHNjcmlwdDo6SGVhcFN0YXRpc3RpY3MgaGVhcF9zdGF0aXN0aWNzID0KLSAgICAgIGphdmFzY3JpcHRfZW5naW5lXy0+R2V0SGVhcFN0YXRpc3RpY3MoKTsKLSAgY2FsbGJhY2suUnVuKGhlYXBfc3RhdGlzdGljcyk7Ci19Ci0KIHZvaWQgV2ViTW9kdWxlOjpJbXBsOjpMb2dTY3JpcHRFcnJvcigKICAgICBjb25zdCBiYXNlOjpTb3VyY2VMb2NhdGlvbiYgc291cmNlX2xvY2F0aW9uLAogICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcl9tZXNzYWdlKSB7CkBAIC0xMzU5LDM0NyArMTMxNCwyODQgQEAKICAgfSB3aGlsZSAoZXZlbnQgJiYgIWxheW91dF9tYW5hZ2VyXy0+SXNSZW5kZXJUcmVlUGVuZGluZygpKTsKIH0KIAotV2ViTW9kdWxlOjpEZXN0cnVjdGlvbk9ic2VydmVyOjpEZXN0cnVjdGlvbk9ic2VydmVyKFdlYk1vZHVsZSogd2ViX21vZHVsZSkKLSAgICA6IHdlYl9tb2R1bGVfKHdlYl9tb2R1bGUpIHt9Ci0KLXZvaWQgV2ViTW9kdWxlOjpEZXN0cnVjdGlvbk9ic2VydmVyOjpXaWxsRGVzdHJveUN1cnJlbnRNZXNzYWdlTG9vcCgpIHsKLSAgd2ViX21vZHVsZV8tPmltcGxfLnJlc2V0KCk7Ci19Ci0KLVdlYk1vZHVsZTo6T3B0aW9uczo6T3B0aW9ucygpCi0gICAgOiBuYW1lKCJXZWJNb2R1bGUiKSwKK1dlYk1vZHVsZTo6T3B0aW9uczo6T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkKKyAgICA6IHdlYl9vcHRpb25zKG5hbWUpLAogICAgICAgbGF5b3V0X3RyaWdnZXIobGF5b3V0OjpMYXlvdXRNYW5hZ2VyOjprT25Eb2N1bWVudE11dGF0aW9uKSwKICAgICAgIG1lc2hfY2FjaGVfY2FwYWNpdHkoY29uZmlndXJhdGlvbjo6Q29uZmlndXJhdGlvbjo6R2V0SW5zdGFuY2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5Db2JhbHRNZXNoQ2FjaGVTaXplSW5CeXRlcygpKSB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5Db2JhbHRNZXNoQ2FjaGVTaXplSW5CeXRlcygpKSB7CisgIHdlYl9vcHRpb25zLnN0YWNrX3NpemUgPSBjb2JhbHQ6OmJyb3dzZXI6OmtXZWJNb2R1bGVTdGFja1NpemU7Cit9CiAKIFdlYk1vZHVsZTo6V2ViTW9kdWxlKAogICAgIGNvbnN0IEdVUkwmIGluaXRpYWxfdXJsLCBiYXNlOjpBcHBsaWNhdGlvblN0YXRlIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsCiAgICAgY29uc3QgT25SZW5kZXJUcmVlUHJvZHVjZWRDYWxsYmFjayYgcmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2ssCi0gICAgY29uc3QgT25FcnJvckNhbGxiYWNrJiBlcnJvcl9jYWxsYmFjaywKLSAgICBjb25zdCBDbG9zZUNhbGxiYWNrJiB3aW5kb3dfY2xvc2VfY2FsbGJhY2ssCisgICAgT25FcnJvckNhbGxiYWNrIGVycm9yX2NhbGxiYWNrLCBjb25zdCBDbG9zZUNhbGxiYWNrJiB3aW5kb3dfY2xvc2VfY2FsbGJhY2ssCiAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAogICAgIG1lZGlhOjpDYW5QbGF5VHlwZUhhbmRsZXIqIGNhbl9wbGF5X3R5cGVfaGFuZGxlciwKLSAgICBtZWRpYTo6TWVkaWFNb2R1bGUqIG1lZGlhX21vZHVsZSwgbmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGUsCi0gICAgY29uc3QgVmlld3BvcnRTaXplJiB3aW5kb3dfZGltZW5zaW9ucywKKyAgICBtZWRpYTo6TWVkaWFNb2R1bGUqIG1lZGlhX21vZHVsZSwgY29uc3QgVmlld3BvcnRTaXplJiB3aW5kb3dfZGltZW5zaW9ucywKICAgICByZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIsIGZsb2F0IGxheW91dF9yZWZyZXNoX3JhdGUsCi0gICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IHRocmVhZF8ob3B0aW9ucy5uYW1lLmNfc3RyKCkpLAotICAgICAgdWlfbmF2X3Jvb3RfKG5ldyB1aV9uYXZpZ2F0aW9uOjpOYXZJdGVtKAorICAgIHdvcmtlcjo6U2VydmljZVdvcmtlckpvYnMqIHNlcnZpY2Vfd29ya2VyX2pvYnMsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiB1aV9uYXZfcm9vdF8obmV3IHVpX25hdmlnYXRpb246Ok5hdkl0ZW0oCiAgICAgICAgICAgdWlfbmF2aWdhdGlvbjo6a05hdGl2ZUl0ZW1UeXBlQ29udGFpbmVyLAogICAgICAgICAgIC8vIEN1cnJlbnRseSwgZXZlbnRzIGRvIG5vdCBuZWVkIHRvIGJlIHByb2Nlc3NlZCBmb3IgdGhlIHJvb3QgaXRlbS4KICAgICAgICAgICBiYXNlOjpDbG9zdXJlKCksIGJhc2U6OkNsb3N1cmUoKSwgYmFzZTo6Q2xvc3VyZSgpKSkgewogICBDb25zdHJ1Y3Rpb25EYXRhIGNvbnN0cnVjdGlvbl9kYXRhKAogICAgICAgaW5pdGlhbF91cmwsIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsIHJlbmRlcl90cmVlX3Byb2R1Y2VkX2NhbGxiYWNrLAogICAgICAgZXJyb3JfY2FsbGJhY2ssIHdpbmRvd19jbG9zZV9jYWxsYmFjaywgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAotICAgICAgY2FuX3BsYXlfdHlwZV9oYW5kbGVyLCBtZWRpYV9tb2R1bGUsIG5ldHdvcmtfbW9kdWxlLCB3aW5kb3dfZGltZW5zaW9ucywKLSAgICAgIHJlc291cmNlX3Byb3ZpZGVyLCBrRE9NTWF4RWxlbWVudERlcHRoLCBsYXlvdXRfcmVmcmVzaF9yYXRlLCB1aV9uYXZfcm9vdF8sCi0gICAgICBvcHRpb25zKTsKKyAgICAgIGNhbl9wbGF5X3R5cGVfaGFuZGxlciwgbWVkaWFfbW9kdWxlLCB3aW5kb3dfZGltZW5zaW9ucywgcmVzb3VyY2VfcHJvdmlkZXIsCisgICAgICBrRE9NTWF4RWxlbWVudERlcHRoLCBsYXlvdXRfcmVmcmVzaF9yYXRlLCB1aV9uYXZfcm9vdF8sCisjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisgICAgICAmd2FpdGluZ19mb3Jfd2ViX2RlYnVnZ2VyXywKKyNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisgICAgICAmc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF8sIHNlcnZpY2Vfd29ya2VyX2pvYnMsIG9wdGlvbnMpOwogCi0gIC8vIFN0YXJ0IHRoZSBkZWRpY2F0ZWQgdGhyZWFkIGFuZCBjcmVhdGUgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uCi0gIC8vIG9iamVjdCBvbiB0aGF0IHRocmVhZC4KLSAgYmFzZTo6VGhyZWFkOjpPcHRpb25zIHRocmVhZF9vcHRpb25zKGJhc2U6Ok1lc3NhZ2VMb29wOjpUWVBFX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2JhbHQ6OmJyb3dzZXI6OmtXZWJNb2R1bGVTdGFja1NpemUpOwotICB0aHJlYWRfb3B0aW9ucy5wcmlvcml0eSA9IG9wdGlvbnMudGhyZWFkX3ByaW9yaXR5OwotICB0aHJlYWRfLlN0YXJ0V2l0aE9wdGlvbnModGhyZWFkX29wdGlvbnMpOwotICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOwotCi0gIC8vIEJsb2NrIHRoaXMgdGhyZWFkIHVudGlsIHRoZSBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS4KLSAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gIC8vIEl0IHdvdWxkIGJlIHByZWZlcmFibGUgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCBsZXQgdGhlIFdlYk1vZHVsZQotICAvLyBjb250aW51ZSBpbiBpdHMgb3duIHRpbWUsIGJ1dCB3aXRob3V0IHRoaXMgd2FpdCB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uCi0gIC8vIHN1Y2ggdGhhdCBpbmxpbmUgc2NyaXB0cyBtYXkgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBkb2N1bWVudCBlbGVtZW50cyB0aGV5Ci0gIC8vIG9wZXJhdGUgb24gYXJlIHByZXNlbnQuCi0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0QmxvY2tpbmdUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkluaXRpYWxpemUsIGJhc2U6OlVucmV0YWluZWQodGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0aW9uX2RhdGEpKTsKKyAgd2ViX2FnZW50Xy5yZXNldCgKKyAgICAgIG5ldyB3ZWI6OkFnZW50KG9wdGlvbnMud2ViX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkluaXRpYWxpemUsIGJhc2U6OlVucmV0YWluZWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGlvbl9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgIHRoaXMpKTsKIH0KIAogV2ViTW9kdWxlOjp+V2ViTW9kdWxlKCkgewogICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOwotCi0gIC8vIENyZWF0ZSBhIGRlc3RydWN0aW9uIG9ic2VydmVyIHRvIHNodXQgZG93biB0aGUgV2ViTW9kdWxlIG9uY2UgYWxsIHBlbmRpbmcKLSAgLy8gdGFza3MgaGF2ZSBiZWVuIGV4ZWN1dGVkIGFuZCB0aGUgbWVzc2FnZSBsb29wIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KLSAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gc2FmZWx5IHN0b3AgdGhlIHRocmVhZCwgZHJhaW4gdGhlIHRhc2sgcXVldWUsIHRoZW4KLSAgLy8gZGVzdHJveSB0aGUgaW50ZXJuYWwgY29tcG9uZW50cyBiZWZvcmUgdGhlIG1lc3NhZ2UgbG9vcCBpcyBzZXQgdG8gTlVMTC4KLSAgLy8gTm8gcG9zdGVkIHRhc2tzIHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgdGhyZWFkIGlzIHN0b3BwZWQuCi0gIERlc3RydWN0aW9uT2JzZXJ2ZXIgZGVzdHJ1Y3Rpb25fb2JzZXJ2ZXIodGhpcyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0QmxvY2tpbmdUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZiYXNlOjpNZXNzYWdlTG9vcDo6QWRkRGVzdHJ1Y3Rpb25PYnNlcnZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKG1lc3NhZ2VfbG9vcCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKCZkZXN0cnVjdGlvbl9vYnNlcnZlcikpKTsKLQorICBEQ0hFQ0sod2ViX2FnZW50Xyk7CiAgIC8vIFRoaXMgd2lsbCBjYW5jZWwgdGhlIHRpbWVycyBmb3IgdGFza3MsIHdoaWNoIGhlbHAgdGhlIHRocmVhZCBleGl0CiAgIENsZWFyQWxsSW50ZXJ2YWxzQW5kVGltZW91dHMoKTsKLQotICAvLyBTdG9wIHRoZSB0aHJlYWQuIFRoaXMgd2lsbCBjYXVzZSB0aGUgZGVzdHJ1Y3Rpb24gb2JzZXJ2ZXIgdG8gYmUgbm90aWZpZWQuCi0gIHRocmVhZF8uU3RvcCgpOworICB3ZWJfYWdlbnRfLT5XYWl0VW50aWxEb25lKCk7CisgIHdlYl9hZ2VudF8ucmVzZXQoKTsKIH0KIAotdm9pZCBXZWJNb2R1bGU6OkluaXRpYWxpemUoY29uc3QgQ29uc3RydWN0aW9uRGF0YSYgZGF0YSkgewordm9pZCBXZWJNb2R1bGU6OkluaXRpYWxpemUoY29uc3QgQ29uc3RydWN0aW9uRGF0YSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYjo6Q29udGV4dCogY29udGV4dCkgewogICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgbWVzc2FnZV9sb29wKCkpOwotICBpbXBsXy5yZXNldChuZXcgSW1wbChkYXRhKSk7CisgIGltcGxfLnJlc2V0KG5ldyBJbXBsKGNvbnRleHQsIGRhdGEpKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCisvLyBUaGVzZSBhcmUgaGVscGVyIG1hY3JvcyBmb3IganVtcGluZyB0byB0aGUgSW1wbCB0aHJlYWQgd2l0aG91dCByZWZlcmVuY2luZworLy8gaW1wbF8gb3V0c2lkZSBvZiB0aGUgdGhyZWFkLgorCisvLyBFbnN1cmUgdGhhdCB3ZSBhcmUgb24gdGhlIFdlYk1vZHVsZSB0aHJlYWQgd2hlcmUgd2UgY2FuIGRlcmVmZXJlbmNlIGltcGxfLgorLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uIGlmIHdlIGFyZSBub3QuCisjZGVmaW5lIFRBU0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEMCh0YXNrX2Z1bmN0aW9uLCBmdW5jdGlvbikgICAgICAgICAgICAgICBcCisgIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPnRhc2tfZnVuY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpmdW5jdGlvbiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOyBcCisgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRENIRUNLKGltcGxfKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworLy8gRW5zdXJlIHRoYXQgd2UgYXJlIG9uIHRoZSBXZWJNb2R1bGUgdGhyZWFkIHdoZXJlIHdlIGNhbiBkZXJlZmVyZW5jZSBpbXBsXy4KKy8vIFBvc3QgYSB0YXNrIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBpZiB3ZSBhcmUgbm90LgorI2RlZmluZSBUQVNLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRCh0YXNrX2Z1bmN0aW9uLCBmdW5jdGlvbiwgLi4uKSAgICAgICAgIFwKKyAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT50YXNrX2Z1bmN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OmZ1bmN0aW9uLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjI19fVkFfQVJHU19fKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRENIRUNLKGltcGxfKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKy8vIEVuc3VyZSB0aGF0IHdlIGFyZSBvbiB0aGUgV2ViTW9kdWxlIHRocmVhZCB3aGVyZSB3ZSBjYW4gZGVyZWZlcmVuY2UgaW1wbF8uCisvLyBQb3N0IGEgdGFzayB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gaWYgd2UgYXJlIG5vdC4KKyNkZWZpbmUgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQwKGZ1bmN0aW9uKSBcCisgIFRBU0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEMChQb3N0VGFzaywgZnVuY3Rpb24pCisKKy8vIEVuc3VyZSB0aGF0IHdlIGFyZSBvbiB0aGUgV2ViTW9kdWxlIHRocmVhZCB3aGVyZSB3ZSBjYW4gZGVyZWZlcmVuY2UgaW1wbF8uCisvLyBQb3N0IGEgdGFzayB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gaWYgd2UgYXJlIG5vdC4KKyNkZWZpbmUgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoZnVuY3Rpb24sIC4uLikgXAorICBUQVNLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChQb3N0VGFzaywgZnVuY3Rpb24sICMjX19WQV9BUkdTX18pCisKKy8vIEVuc3VyZSB0aGF0IHdlIGFyZSBvbiB0aGUgV2ViTW9kdWxlIHRocmVhZCB3aGVyZSB3ZSBjYW4gZGVyZWZlcmVuY2UgaW1wbF8uCisvLyBQb3N0IGEgYmxvY2tpbmcgdGFzayB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gaWYgd2UgYXJlIG5vdC4KKyNkZWZpbmUgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEMChmdW5jdGlvbikgXAorICBUQVNLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRDAoUG9zdEJsb2NraW5nVGFzaywgZnVuY3Rpb24pCisKKy8vIEVuc3VyZSB0aGF0IHdlIGFyZSBvbiB0aGUgV2ViTW9kdWxlIHRocmVhZCB3aGVyZSB3ZSBjYW4gZGVyZWZlcmVuY2UgaW1wbF8uCisvLyBQb3N0IGEgYmxvY2tpbmcgdGFzayB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gaWYgd2UgYXJlIG5vdC4KKyNkZWZpbmUgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKGZ1bmN0aW9uLCAuLi4pIFwKKyAgVEFTS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoUG9zdEJsb2NraW5nVGFzaywgZnVuY3Rpb24sICMjX19WQV9BUkdTX18pCiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudCgKICAgICBiYXNlOjpUb2tlbiB0eXBlLCBjb25zdCBkb206OklucHV0RXZlbnRJbml0JiBldmVudCkgewogICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6YnJvd3NlciIsCiAgICAgICAgICAgICAgICAiV2ViTW9kdWxlOjpJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudCgpIiwgInR5cGUiLAotICAgICAgICAgICAgICAgdHlwZS5jX3N0cigpKTsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLSAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpLCB0eXBlLCBldmVudCkpOworICAgICAgICAgICAgICAgVFJBQ0VfU1RSX0NPUFkodHlwZS5jX3N0cigpKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEluamVjdE9uU2NyZWVuS2V5Ym9hcmRJbnB1dEV2ZW50LCB0eXBlLCBldmVudCk7CisgIGltcGxfLT5JbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudCh0eXBlLCBldmVudCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RPblNjcmVlbktleWJvYXJkU2hvd25FdmVudChpbnQgdGlja2V0KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpicm93c2VyIiwKICAgICAgICAgICAgICAgICJXZWJNb2R1bGU6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRTaG93bkV2ZW50KCkiLCAidGlja2V0IiwKICAgICAgICAgICAgICAgIHRpY2tldCk7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpJbmplY3RPblNjcmVlbktleWJvYXJkU2hvd25FdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwgdGlja2V0KSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEluamVjdE9uU2NyZWVuS2V5Ym9hcmRTaG93bkV2ZW50LCB0aWNrZXQpOworICBpbXBsXy0+SW5qZWN0T25TY3JlZW5LZXlib2FyZFNob3duRXZlbnQodGlja2V0KTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRIaWRkZW5FdmVudChpbnQgdGlja2V0KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpicm93c2VyIiwKICAgICAgICAgICAgICAgICJXZWJNb2R1bGU6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRIaWRkZW5FdmVudCgpIiwgInRpY2tldCIsCiAgICAgICAgICAgICAgICB0aWNrZXQpOwotICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOwotICBEQ0hFQ0soaW1wbF8pOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0T25TY3JlZW5LZXlib2FyZEhpZGRlbkV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB0aWNrZXQpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoSW5qZWN0T25TY3JlZW5LZXlib2FyZEhpZGRlbkV2ZW50LCB0aWNrZXQpOworICBpbXBsXy0+SW5qZWN0T25TY3JlZW5LZXlib2FyZEhpZGRlbkV2ZW50KHRpY2tldCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RPblNjcmVlbktleWJvYXJkRm9jdXNlZEV2ZW50KGludCB0aWNrZXQpIHsKICAgVFJBQ0VfRVZFTlQxKCJjb2JhbHQ6OmJyb3dzZXIiLAogICAgICAgICAgICAgICAgIldlYk1vZHVsZTo6SW5qZWN0T25TY3JlZW5LZXlib2FyZEZvY3VzZWRFdmVudCgpIiwgInRpY2tldCIsCiAgICAgICAgICAgICAgICB0aWNrZXQpOwotICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOwotICBEQ0hFQ0soaW1wbF8pOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsCi0gICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRGb2N1c2VkRXZlbnQsCi0gICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB0aWNrZXQpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoSW5qZWN0T25TY3JlZW5LZXlib2FyZEZvY3VzZWRFdmVudCwgdGlja2V0KTsKKyAgaW1wbF8tPkluamVjdE9uU2NyZWVuS2V5Ym9hcmRGb2N1c2VkRXZlbnQodGlja2V0KTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkluamVjdE9uU2NyZWVuS2V5Ym9hcmRCbHVycmVkRXZlbnQoaW50IHRpY2tldCkgewogICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6YnJvd3NlciIsCiAgICAgICAgICAgICAgICAiV2ViTW9kdWxlOjpJbmplY3RPblNjcmVlbktleWJvYXJkQmx1cnJlZEV2ZW50KCkiLCAidGlja2V0IiwKICAgICAgICAgICAgICAgIHRpY2tldCk7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwKLSAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0T25TY3JlZW5LZXlib2FyZEJsdXJyZWRFdmVudCwKLSAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIHRpY2tldCkpOworICBQT1NUX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChJbmplY3RPblNjcmVlbktleWJvYXJkQmx1cnJlZEV2ZW50LCB0aWNrZXQpOworICBpbXBsXy0+SW5qZWN0T25TY3JlZW5LZXlib2FyZEJsdXJyZWRFdmVudCh0aWNrZXQpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6SW5qZWN0T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50KGludCB0aWNrZXQpIHsKICAgVFJBQ0VfRVZFTlQxKCJjb2JhbHQ6OmJyb3dzZXIiLAogICAgICAgICAgICAgICAgIldlYk1vZHVsZTo6SW5qZWN0T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50KCkiLAogICAgICAgICAgICAgICAgInRpY2tldCIsIHRpY2tldCk7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwKLSAgICAgIGJhc2U6OkJpbmQoCi0gICAgICAgICAgJldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50LAotICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB0aWNrZXQpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoSW5qZWN0T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQpOworICBpbXBsXy0+SW5qZWN0T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZEV2ZW50KHRpY2tldCk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCisKIAogdm9pZCBXZWJNb2R1bGU6OkluamVjdEtleWJvYXJkRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6S2V5Ym9hcmRFdmVudEluaXQmIGV2ZW50KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW5qZWN0S2V5Ym9hcmRFdmVudCgpIiwgInR5cGUiLAotICAgICAgICAgICAgICAgdHlwZS5jX3N0cigpKTsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLSAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkluamVjdEtleWJvYXJkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCksIHR5cGUsIGV2ZW50KSk7CisgICAgICAgICAgICAgICBUUkFDRV9TVFJfQ09QWSh0eXBlLmNfc3RyKCkpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoSW5qZWN0S2V5Ym9hcmRFdmVudCwgdHlwZSwgZXZlbnQpOworICBpbXBsXy0+SW5qZWN0S2V5Ym9hcmRFdmVudCh0eXBlLCBldmVudCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RQb2ludGVyRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpQb2ludGVyRXZlbnRJbml0JiBldmVudCkgewogICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6YnJvd3NlciIsICJXZWJNb2R1bGU6OkluamVjdFBvaW50ZXJFdmVudCgpIiwgInR5cGUiLAotICAgICAgICAgICAgICAgdHlwZS5jX3N0cigpKTsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLSAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkluamVjdFBvaW50ZXJFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSwgdHlwZSwgZXZlbnQpKTsKKyAgICAgICAgICAgICAgIFRSQUNFX1NUUl9DT1BZKHR5cGUuY19zdHIoKSkpOworICBQT1NUX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChJbmplY3RQb2ludGVyRXZlbnQsIHR5cGUsIGV2ZW50KTsKKyAgaW1wbF8tPkluamVjdFBvaW50ZXJFdmVudCh0eXBlLCBldmVudCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RXaGVlbEV2ZW50KGJhc2U6OlRva2VuIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OldoZWVsRXZlbnRJbml0JiBldmVudCkgewogICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6YnJvd3NlciIsICJXZWJNb2R1bGU6OkluamVjdFdoZWVsRXZlbnQoKSIsICJ0eXBlIiwKLSAgICAgICAgICAgICAgIHR5cGUuY19zdHIoKSk7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpJbmplY3RXaGVlbEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpLCB0eXBlLCBldmVudCkpOworICAgICAgICAgICAgICAgVFJBQ0VfU1RSX0NPUFkodHlwZS5jX3N0cigpKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEluamVjdFdoZWVsRXZlbnQsIHR5cGUsIGV2ZW50KTsKKyAgaW1wbF8tPkluamVjdFdoZWVsRXZlbnQodHlwZSwgZXZlbnQpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6SW5qZWN0QmVmb3JlVW5sb2FkRXZlbnQoKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW5qZWN0QmVmb3JlVW5sb2FkRXZlbnQoKSIpOwotICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOwotICBEQ0hFQ0soaW1wbF8pOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0QmVmb3JlVW5sb2FkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSkpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQwKEluamVjdEJlZm9yZVVubG9hZEV2ZW50KTsKKyAgaW1wbF8tPkluamVjdEJlZm9yZVVubG9hZEV2ZW50KCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpJbmplY3RDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwKICAgICAgICAgICAgICAgICJXZWJNb2R1bGU6OkluamVjdENhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudCgpIik7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpJbmplY3RDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSkpKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQwKEluamVjdENhcHRpb25TZXR0aW5nc0NoYW5nZWRFdmVudCk7CisgIGltcGxfLT5JbmplY3RDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkRXZlbnQoKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkluamVjdFdpbmRvd09uT25saW5lRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KSB7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpJbmplY3RXaW5kb3dPbk9ubGluZUV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpKSk7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6SW5qZWN0V2luZG93T25PbmxpbmVFdmVudCgpIik7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEluamVjdFdpbmRvd09uT25saW5lRXZlbnQsIGV2ZW50KTsKKyAgaW1wbF8tPkluamVjdFdpbmRvd09uT25saW5lRXZlbnQoKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkluamVjdFdpbmRvd09uT2ZmbGluZUV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCkgewotICBEQ0hFQ0soaW1wbF8pOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6SW5qZWN0V2luZG93T25PZmZsaW5lRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSkpKTsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiV2ViTW9kdWxlOjpJbmplY3RXaW5kb3dPbk9mZmxpbmVFdmVudCgpIik7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEluamVjdFdpbmRvd09uT2ZmbGluZUV2ZW50LCBldmVudCk7CisgIGltcGxfLT5JbmplY3RXaW5kb3dPbk9mZmxpbmVFdmVudCgpOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6VXBkYXRlRGF0ZVRpbWVDb25maWd1cmF0aW9uKCkgewotICBEQ0hFQ0soaW1wbF8pOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6VXBkYXRlRGF0ZVRpbWVDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpKSk7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6VXBkYXRlRGF0ZVRpbWVDb25maWd1cmF0aW9uKCkiKTsKKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQwKFVwZGF0ZURhdGVUaW1lQ29uZmlndXJhdGlvbik7CisgIGltcGxfLT5VcGRhdGVEYXRlVGltZUNvbmZpZ3VyYXRpb24oKTsKIH0KIAotc3RkOjpzdHJpbmcgV2ViTW9kdWxlOjpFeGVjdXRlSmF2YXNjcmlwdCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0X3V0ZjgsIGNvbnN0IGJhc2U6OlNvdXJjZUxvY2F0aW9uJiBzY3JpcHRfbG9jYXRpb24sCi0gICAgYm9vbCogb3V0X3N1Y2NlZWRlZCkgewordm9pZCBXZWJNb2R1bGU6OkV4ZWN1dGVKYXZhc2NyaXB0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHRfdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpTb3VyY2VMb2NhdGlvbiYgc2NyaXB0X2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBvdXRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dF9zdWNjZWVkZWQpIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiV2ViTW9kdWxlOjpFeGVjdXRlSmF2YXNjcmlwdCgpIik7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0KLSAgYmFzZTo6V2FpdGFibGVFdmVudCBnb3RfcmVzdWx0KAotICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6UmVzZXRQb2xpY3k6Ok1BTlVBTCwKLSAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OkluaXRpYWxTdGF0ZTo6Tk9UX1NJR05BTEVEKTsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsCi0gICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OkV4ZWN1dGVKYXZhc2NyaXB0LAotICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwgc2NyaXB0X3V0ZjgsIHNjcmlwdF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgJmdvdF9yZXN1bHQsICZyZXN1bHQsIG91dF9zdWNjZWVkZWQpKTsKLSAgZ290X3Jlc3VsdC5XYWl0KCk7Ci0gIHJldHVybiByZXN1bHQ7CisgIFBPU1RfQU5EX0JMT0NLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChFeGVjdXRlSmF2YXNjcmlwdCwgc2NyaXB0X3V0ZjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbG9jYXRpb24sIG91dF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfc3VjY2VlZGVkKTsKKyAgaW1wbF8tPkV4ZWN1dGVKYXZhc2NyaXB0KHNjcmlwdF91dGY4LCBzY3JpcHRfbG9jYXRpb24sIG91dF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfc3VjY2VlZGVkKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkNsZWFyQWxsSW50ZXJ2YWxzQW5kVGltZW91dHMoKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwgIldlYk1vZHVsZTo6Q2xlYXJBbGxJbnRlcnZhbHNBbmRUaW1lb3V0cygpIik7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0KLSAgaWYgKGltcGxfKSB7Ci0gICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6Q2xlYXJBbGxJbnRlcnZhbHNBbmRUaW1lb3V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpKSk7Ci0gIH0KKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQwKENsZWFyQWxsSW50ZXJ2YWxzQW5kVGltZW91dHMpOworICBpbXBsXy0+Q2xlYXJBbGxJbnRlcnZhbHNBbmRUaW1lb3V0cygpOwogfQogCiAjaWYgZGVmaW5lZChFTkFCTEVfV0VCRFJJVkVSKQotc3RkOjp1bmlxdWVfcHRyPHdlYmRyaXZlcjo6V2luZG93RHJpdmVyPiBXZWJNb2R1bGU6OkNyZWF0ZVdpbmRvd0RyaXZlcigKLSAgICBjb25zdCB3ZWJkcml2ZXI6OnByb3RvY29sOjpXaW5kb3dJZCYgd2luZG93X2lkKSB7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHdlYmRyaXZlcjo6V2luZG93RHJpdmVyPiB3aW5kb3dfZHJpdmVyOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpDcmVhdGVXaW5kb3dEcml2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIHdpbmRvd19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKCZ3aW5kb3dfZHJpdmVyKSkpOwotCi0gIHJldHVybiB3aW5kb3dfZHJpdmVyOwordm9pZCBXZWJNb2R1bGU6OkNyZWF0ZVdpbmRvd0RyaXZlcigKKyAgICBjb25zdCB3ZWJkcml2ZXI6OnByb3RvY29sOjpXaW5kb3dJZCYgd2luZG93X2lkLAorICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJkcml2ZXI6OldpbmRvd0RyaXZlcj4qIHdpbmRvd19kcml2ZXJfb3V0KSB7CisgIFBPU1RfQU5EX0JMT0NLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChDcmVhdGVXaW5kb3dEcml2ZXIsIHdpbmRvd19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd19kcml2ZXJfb3V0KTsKKyAgaW1wbF8tPkNyZWF0ZVdpbmRvd0RyaXZlcih3aW5kb3dfaWQsIHdpbmRvd19kcml2ZXJfb3V0KTsKIH0KICNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfV0VCRFJJVkVSKQogCiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiAvLyBNYXkgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLWRlYnVnOjpiYWNrZW5kOjpEZWJ1Z0Rpc3BhdGNoZXIqIFdlYk1vZHVsZTo6R2V0RGVidWdEaXNwYXRjaGVyKCkgewotICBEQ0hFQ0soaW1wbF8pOwotICByZXR1cm4gaW1wbF8tPmRlYnVnX2Rpc3BhdGNoZXIoKTsKK3ZvaWQgV2ViTW9kdWxlOjpHZXREZWJ1Z0Rpc3BhdGNoZXIoCisgICAgZGVidWc6OmJhY2tlbmQ6OkRlYnVnRGlzcGF0Y2hlcioqIGRpc3BhdGNoZXIpIHsKKyAgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKEdldERlYnVnRGlzcGF0Y2hlciwgZGlzcGF0Y2hlcik7CisgIGlmIChkaXNwYXRjaGVyKSAqZGlzcGF0Y2hlciA9IGltcGxfLT5kZWJ1Z19kaXNwYXRjaGVyKCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxkZWJ1Zzo6YmFja2VuZDo6RGVidWdnZXJTdGF0ZT4gV2ViTW9kdWxlOjpGcmVlemVEZWJ1Z2dlcigpIHsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8ZGVidWc6OmJhY2tlbmQ6OkRlYnVnZ2VyU3RhdGU+IGRlYnVnZ2VyX3N0YXRlOwotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpGcmVlemVEZWJ1Z2dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKCZkZWJ1Z2dlcl9zdGF0ZSkpKTsKLSAgcmV0dXJuIGRlYnVnZ2VyX3N0YXRlOwordm9pZCBXZWJNb2R1bGU6OkZyZWV6ZURlYnVnZ2VyKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxkZWJ1Zzo6YmFja2VuZDo6RGVidWdnZXJTdGF0ZT4qIGRlYnVnZ2VyX3N0YXRlKSB7CisgIFBPU1RfQU5EX0JMT0NLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChGcmVlemVEZWJ1Z2dlciwgZGVidWdnZXJfc3RhdGUpOworICBpbXBsXy0+RnJlZXplRGVidWdnZXIoZGVidWdnZXJfc3RhdGUpOwogfQogI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKIAogdm9pZCBXZWJNb2R1bGU6OlNldFNpemUoY29uc3QgVmlld3BvcnRTaXplJiB2aWV3cG9ydF9zaXplKSB7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpTZXRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB2aWV3cG9ydF9zaXplKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFNldFNpemUsIHZpZXdwb3J0X3NpemUpOworICBpbXBsXy0+U2V0U2l6ZSh2aWV3cG9ydF9zaXplKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OlVwZGF0ZUNhbWVyYTNEKAogICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8aW5wdXQ6OkNhbWVyYTNEPiYgY2FtZXJhXzNkKSB7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpVcGRhdGVDYW1lcmEzRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwgY2FtZXJhXzNkKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFVwZGF0ZUNhbWVyYTNELCBjYW1lcmFfM2QpOworICBpbXBsXy0+VXBkYXRlQ2FtZXJhM0QoY2FtZXJhXzNkKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OlNldE1lZGlhTW9kdWxlKG1lZGlhOjpNZWRpYU1vZHVsZSogbWVkaWFfbW9kdWxlKSB7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpTZXRNZWRpYU1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwgbWVkaWFfbW9kdWxlKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFNldE1lZGlhTW9kdWxlLCBtZWRpYV9tb2R1bGUpOworICBpbXBsXy0+U2V0TWVkaWFNb2R1bGUobWVkaWFfbW9kdWxlKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OlNldEltYWdlQ2FjaGVDYXBhY2l0eShpbnQ2NF90IGJ5dGVzKSB7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpTZXRJbWFnZUNhY2hlQ2FwYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIGJ5dGVzKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFNldEltYWdlQ2FjaGVDYXBhY2l0eSwgYnl0ZXMpOworICBpbXBsXy0+U2V0SW1hZ2VDYWNoZUNhcGFjaXR5KGJ5dGVzKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OlNldFJlbW90ZVR5cGVmYWNlQ2FjaGVDYXBhY2l0eShpbnQ2NF90IGJ5dGVzKSB7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpTZXRSZW1vdGVUeXBlZmFjZUNhY2hlQ2FwYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIGJ5dGVzKSk7CisgIFBPU1RfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFNldFJlbW90ZVR5cGVmYWNlQ2FjaGVDYXBhY2l0eSwgYnl0ZXMpOworICBpbXBsXy0+U2V0UmVtb3RlVHlwZWZhY2VDYWNoZUNhcGFjaXR5KGJ5dGVzKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkJsdXIoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7Ci0KLSAgaW1wbF8tPkNhbmNlbFN5bmNocm9ub3VzTG9hZHMoKTsKLQotICBhdXRvIGltcGxfYmx1ciA9IGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6Qmx1ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB0aW1lc3RhbXApOwotCisgIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHRfLlNpZ25hbCgpOwogI2lmIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogICAvLyBXZSBub3JtYWxseSBuZWVkIHRvIGJsb2NrIGhlcmUgc28gdGhhdCB0aGUgY2FsbCBkb2Vzbid0IHJldHVybiB1bnRpbCB0aGUKICAgLy8gd2ViIGFwcGxpY2F0aW9uIGhhcyBoYWQgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgd2hvbGUgZXZlbnQuIEhvd2V2ZXIsIG91cgpAQCAtMTcwOSwxNTEgKzE2MDEsMTE2IEBACiAgIC8vIHdhaXRpbmcgZm9yIHRoZSBkZWJ1Z2dlciB3ZSBwb3N0IHRoZSBwYXVzZSB0YXNrIHdpdGhvdXQgYmxvY2tpbmcgb24gaXQsCiAgIC8vIGxldHRpbmcgaXQgZXZlbnR1YWxseSBydW4gd2hlbiB0aGUgZGVidWdnZXIgY29ubmVjdHMgYW5kIHRoZSBtZXNzYWdlIGxvb3AKICAgLy8gaXMgdW5ibG9ja2VkIGFnYWluLgotICBpZiAoIWltcGxfLT5Jc0ZpbmlzaGVkV2FpdGluZ0ZvcldlYkRlYnVnZ2VyKCkpIHsKLSAgICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soRlJPTV9IRVJFLCBpbXBsX2JsdXIpOworICBpZiAod2FpdGluZ19mb3Jfd2ViX2RlYnVnZ2VyXy5sb2FkKCkpIHsKKyAgICBQT1NUX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChCbHVyLCB0aW1lc3RhbXApOworICAgIGltcGxfLT5CbHVyKHRpbWVzdGFtcCk7CiAgICAgcmV0dXJuOwogICB9CiAjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQogCi0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0QmxvY2tpbmdUYXNrKEZST01fSEVSRSwgaW1wbF9ibHVyKTsKKyAgLy8gV2UgbXVzdCBibG9jayBoZXJlIHNvIHRoYXQgdGhlIGNhbGwgZG9lc24ndCByZXR1cm4gdW50aWwgdGhlIHdlYgorICAvLyBhcHBsaWNhdGlvbiBoYXMgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIHdob2xlIGV2ZW50LgorICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoQmx1ciwgdGltZXN0YW1wKTsKKyAgaW1wbF8tPkJsdXIodGltZXN0YW1wKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OkNvbmNlYWwocmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7Ci0KLSAgaW1wbF8tPkNhbmNlbFN5bmNocm9ub3VzTG9hZHMoKTsKLQorICBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0Xy5TaWduYWwoKTsKICAgLy8gV2UgbXVzdCBibG9jayBoZXJlIHNvIHRoYXQgdGhlIGNhbGwgZG9lc24ndCByZXR1cm4gdW50aWwgdGhlIHdlYgogICAvLyBhcHBsaWNhdGlvbiBoYXMgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIHdob2xlIGV2ZW50LgotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgIEZST01fSEVSRSwKLSAgICAgIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6Q29uY2VhbCwgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksCi0gICAgICAgICAgICAgICAgIHJlc291cmNlX3Byb3ZpZGVyLCB0aW1lc3RhbXApKTsKKyAgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKENvbmNlYWwsIHJlc291cmNlX3Byb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wKTsKKyAgaW1wbF8tPkNvbmNlYWwocmVzb3VyY2VfcHJvdmlkZXIsIHRpbWVzdGFtcCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpGcmVlemUoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7Ci0KICAgLy8gV2UgbXVzdCBibG9jayBoZXJlIHNvIHRoYXQgdGhlIGNhbGwgZG9lc24ndCByZXR1cm4gdW50aWwgdGhlIHdlYgogICAvLyBhcHBsaWNhdGlvbiBoYXMgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIHdob2xlIGV2ZW50LgotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpGcmVlemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIHRpbWVzdGFtcCkpOworICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoRnJlZXplLCB0aW1lc3RhbXApOworICBpbXBsXy0+RnJlZXplKHRpbWVzdGFtcCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpVbmZyZWV6ZShyZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7Ci0KLSAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLAotICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpVbmZyZWV6ZSwgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksCi0gICAgICAgICAgICAgICAgIHJlc291cmNlX3Byb3ZpZGVyLCB0aW1lc3RhbXApKTsKKyAgLy8gV2UgbXVzdCBibG9jayBoZXJlIHNvIHRoYXQgdGhlIGNhbGwgZG9lc24ndCByZXR1cm4gdW50aWwgdGhlIHdlYgorICAvLyBhcHBsaWNhdGlvbiBoYXMgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIHdob2xlIGV2ZW50LgorICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoVW5mcmVlemUsIHJlc291cmNlX3Byb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wKTsKKyAgaW1wbF8tPlVuZnJlZXplKHJlc291cmNlX3Byb3ZpZGVyLCB0aW1lc3RhbXApOwogfQogCiB2b2lkIFdlYk1vZHVsZTo6UmV2ZWFsKHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7Ci0KLSAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLAotICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpSZXZlYWwsIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLAotICAgICAgICAgICAgICAgICByZXNvdXJjZV9wcm92aWRlciwgdGltZXN0YW1wKSk7CisgIC8vIFdlIG11c3QgYmxvY2sgaGVyZSBzbyB0aGF0IHRoZSBjYWxsIGRvZXNuJ3QgcmV0dXJuIHVudGlsIHRoZSB3ZWIKKyAgLy8gYXBwbGljYXRpb24gaGFzIGhhZCBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB3aG9sZSBldmVudC4KKyAgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEKFJldmVhbCwgcmVzb3VyY2VfcHJvdmlkZXIsIHRpbWVzdGFtcCk7CisgIGltcGxfLT5SZXZlYWwocmVzb3VyY2VfcHJvdmlkZXIsIHRpbWVzdGFtcCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpGb2N1cyhTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7Ci0gIC8vIE11c3Qgb25seSBiZSBjYWxsZWQgYnkgYSB0aHJlYWQgZXh0ZXJuYWwgZnJvbSB0aGUgV2ViTW9kdWxlIHRocmVhZC4KLSAgRENIRUNLX05FKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIG1lc3NhZ2VfbG9vcCgpKTsKLQotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldlYk1vZHVsZTo6SW1wbDo6Rm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIHRpbWVzdGFtcCkpOworICAvLyBXZSBtdXN0IGJsb2NrIGhlcmUgc28gdGhhdCB0aGUgY2FsbCBkb2Vzbid0IHJldHVybiB1bnRpbCB0aGUgd2ViCisgIC8vIGFwcGxpY2F0aW9uIGhhcyBoYWQgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgd2hvbGUgZXZlbnQuCisgIFBPU1RfQU5EX0JMT0NLX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChGb2N1cywgdGltZXN0YW1wKTsKKyAgaW1wbF8tPkZvY3VzKHRpbWVzdGFtcCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpSZWR1Y2VNZW1vcnkoKSB7Ci0gIC8vIE11c3Qgb25seSBiZSBjYWxsZWQgYnkgYSB0aHJlYWQgZXh0ZXJuYWwgZnJvbSB0aGUgV2ViTW9kdWxlIHRocmVhZC4KLSAgRENIRUNLX05FKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIG1lc3NhZ2VfbG9vcCgpKTsKLQotICBpbXBsXy0+Q2FuY2VsU3luY2hyb25vdXNMb2FkcygpOwotCi0gIC8vIFdlIGJsb2NrIGhlcmUgc28gdGhhdCB3ZSBibG9jayB0aGUgTG93IE1lbW9yeSBldmVudCBoYW5kbGVyIHVudGlsIHdlIGhhdmUKLSAgLy8gcmVkdWNlZCBvdXIgbWVtb3J5IGNvbnN1bXB0aW9uLgotICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpSZWR1Y2VNZW1vcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSkpKTsKKyAgc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdF8uU2lnbmFsKCk7CisgIC8vIFdlIG11c3QgYmxvY2sgaGVyZSBzbyB0aGF0IHRoZSBjYWxsIGRvZXNuJ3QgcmV0dXJuIHVudGlsIHRoZSB3ZWIKKyAgLy8gYXBwbGljYXRpb24gaGFzIGhhZCBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB3aG9sZSBldmVudC4KKyAgUE9TVF9BTkRfQkxPQ0tfVE9fRU5TVVJFX0lNUExfT05fVEhSRUFEMChSZWR1Y2VNZW1vcnkpOworICBpbXBsXy0+UmVkdWNlTWVtb3J5KCk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpSZXF1ZXN0SmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzKAotICAgIGNvbnN0IEphdmFTY3JpcHRIZWFwU3RhdGlzdGljc0NhbGxiYWNrJiBjYWxsYmFjaykgewotICAvLyBNdXN0IG9ubHkgYmUgY2FsbGVkIGJ5IGEgdGhyZWFkIGV4dGVybmFsIGZyb20gdGhlIFdlYk1vZHVsZSB0aHJlYWQuCi0gIERDSEVDS19ORShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7CisgICAgY29uc3Qgd2ViOjpBZ2VudDo6SmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzQ2FsbGJhY2smIGNhbGxiYWNrKSB7CisgIHdlYl9hZ2VudF8tPlJlcXVlc3RKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3MoY2FsbGJhY2spOworfQogCi0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpHZXRKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIGNhbGxiYWNrKSk7Cit2b2lkIFdlYk1vZHVsZTo6R2V0SXNSZWFkeVRvRnJlZXplKHZvbGF0aWxlIGJvb2wqIGlzX3JlYWR5X3RvX2ZyZWV6ZSkgeworICAvLyBXZSBtdXN0IGJsb2NrIGhlcmUgc28gdGhhdCB0aGUgY2FsbCBkb2Vzbid0IHJldHVybiB1bnRpbCB0aGUgdGhyZWFkCisgIC8vIGhhcyBoYWQgYSBjaGFuY2UgdG8gZmlsbCBpbiB0aGUgcmV0dXJuIHZhbHVlLgorICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoR2V0SXNSZWFkeVRvRnJlZXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmVhZHlfdG9fZnJlZXplKTsKKyAgaW1wbF8tPklzUmVhZHlUb0ZyZWV6ZShpc19yZWFkeV90b19mcmVlemUpOwogfQogCiBib29sIFdlYk1vZHVsZTo6SXNSZWFkeVRvRnJlZXplKCkgewotICBEQ0hFQ0tfTkUoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgbWVzc2FnZV9sb29wKCkpOwotCiAgIHZvbGF0aWxlIGJvb2wgaXNfcmVhZHlfdG9fZnJlZXplID0gZmFsc2U7Ci0gIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0QmxvY2tpbmdUYXNrKAotICAgICAgRlJPTV9IRVJFLAotICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpJc1JlYWR5VG9GcmVlemUsCi0gICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCAmaXNfcmVhZHlfdG9fZnJlZXplKSk7CisgIEdldElzUmVhZHlUb0ZyZWV6ZSgmaXNfcmVhZHlfdG9fZnJlZXplKTsKICAgcmV0dXJuIGlzX3JlYWR5X3RvX2ZyZWV6ZTsKIH0KIAotc2NvcGVkX3JlZnB0cjxyZW5kZXJfdHJlZTo6Tm9kZT4KLVdlYk1vZHVsZTo6RG9TeW5jaHJvbm91c0xheW91dEFuZEdldFJlbmRlclRyZWUoKSB7Cit2b2lkIFdlYk1vZHVsZTo6RG9TeW5jaHJvbm91c0xheW91dEFuZEdldFJlbmRlclRyZWUoCisgICAgc2NvcGVkX3JlZnB0cjxyZW5kZXJfdHJlZTo6Tm9kZT4qIHJlbmRlcl90cmVlKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpicm93c2VyIiwKICAgICAgICAgICAgICAgICJXZWJNb2R1bGU6OkRvU3luY2hyb25vdXNMYXlvdXRBbmRHZXRSZW5kZXJUcmVlKCkiKTsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLSAgc2NvcGVkX3JlZnB0cjxyZW5kZXJfdHJlZTo6Tm9kZT4gcmVuZGVyX3RyZWU7Ci0gIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7Ci0gICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RCbG9ja2luZ1Rhc2soCi0gICAgICAgIEZST01fSEVSRSwKLSAgICAgICAgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpEb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGltcGxfLmdldCgpKSwgJnJlbmRlcl90cmVlKSk7Ci0gIH0gZWxzZSB7Ci0gICAgaW1wbF8tPkRvU3luY2hyb25vdXNMYXlvdXRBbmRHZXRSZW5kZXJUcmVlKCZyZW5kZXJfdHJlZSk7Ci0gIH0KLSAgcmV0dXJuIHJlbmRlcl90cmVlOworICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoRG9TeW5jaHJvbm91c0xheW91dEFuZEdldFJlbmRlclRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdHJlZSk7CisgIGltcGxfLT5Eb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZShyZW5kZXJfdHJlZSk7CiB9CiAKIHZvaWQgV2ViTW9kdWxlOjpTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKAogICAgIGJvb2wgaXNfcHJlbG9hZCwgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCkgewogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6YnJvd3NlciIsCiAgICAgICAgICAgICAgICAiV2ViTW9kdWxlOjpTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKCkiKTsKLSAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKLSAgRENIRUNLKGltcGxfKTsKLSAgaWYgKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCkgIT0gbWVzc2FnZV9sb29wKCkpIHsKLSAgICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKLSAgICAgICAgRlJPTV9IRVJFLAotICAgICAgICBiYXNlOjpCaW5kKCZXZWJNb2R1bGU6OkltcGw6OlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChpbXBsXy5nZXQoKSksIGlzX3ByZWxvYWQsIHRpbWVzdGFtcCkpOwotICB9IGVsc2UgewotICAgIGltcGxfLT5TZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKGlzX3ByZWxvYWQsIHRpbWVzdGFtcCk7Ci0gIH0KKyAgUE9TVF9UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoU2V0QXBwbGljYXRpb25TdGFydE9yUHJlbG9hZFRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcHJlbG9hZCwgdGltZXN0YW1wKTsKKyAgaW1wbF8tPlNldEFwcGxpY2F0aW9uU3RhcnRPclByZWxvYWRUaW1lc3RhbXAoaXNfcHJlbG9hZCwgdGltZXN0YW1wKTsKIH0KIAogdm9pZCBXZWJNb2R1bGU6OlNldERlZXBMaW5rVGltZXN0YW1wKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiV2ViTW9kdWxlOjpTZXREZWVwTGlua1RpbWVzdGFtcCgpIik7Ci0gIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7Ci0gIERDSEVDSyhpbXBsXyk7Ci0gIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7Ci0gICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RCbG9ja2luZ1Rhc2soCi0gICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2ViTW9kdWxlOjpJbXBsOjpTZXREZWVwTGlua1RpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoaW1wbF8uZ2V0KCkpLCB0aW1lc3RhbXApKTsKLSAgfSBlbHNlIHsKLSAgICBpbXBsXy0+U2V0RGVlcExpbmtUaW1lc3RhbXAodGltZXN0YW1wKTsKLSAgfQorICBQT1NUX0FORF9CTE9DS19UT19FTlNVUkVfSU1QTF9PTl9USFJFQUQoU2V0RGVlcExpbmtUaW1lc3RhbXAsIHRpbWVzdGFtcCk7CisgIGltcGxfLT5TZXREZWVwTGlua1RpbWVzdGFtcCh0aW1lc3RhbXApOworfQorCit2b2lkIFdlYk1vZHVsZTo6U2V0VW5sb2FkRXZlbnRUaW1pbmdJbmZvKGJhc2U6OlRpbWVUaWNrcyBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lVGlja3MgZW5kX3RpbWUpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmJyb3dzZXIiLCAiV2ViTW9kdWxlOjpTZXRVbmxvYWRFdmVudFRpbWluZ0luZm8oKSIpOworICBQT1NUX1RPX0VOU1VSRV9JTVBMX09OX1RIUkVBRChTZXRVbmxvYWRFdmVudFRpbWluZ0luZm8sIHN0YXJ0X3RpbWUsIGVuZF90aW1lKTsKKyAgaW1wbF8tPlNldFVubG9hZEV2ZW50VGltaW5nSW5mbyhzdGFydF90aW1lLCBlbmRfdGltZSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBicm93c2VyCmRpZmYgLS1naXQgYS9jb2JhbHQvYnJvd3Nlci93ZWJfbW9kdWxlLmggYi9jb2JhbHQvYnJvd3Nlci93ZWJfbW9kdWxlLmgKaW5kZXggMmVkMzI2ZC4uNGM0MmYxOSAxMDA2NDQKLS0tIGEvY29iYWx0L2Jyb3dzZXIvd2ViX21vZHVsZS5oCisrKyBiL2NvYmFsdC9icm93c2VyL3dlYl9tb2R1bGUuaApAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgogI2luY2x1ZGUgImJhc2UvY29udGFpbmVycy9oYXNoX3RhYmxlcy5oIgotI2luY2x1ZGUgImJhc2UvZmlsZXMvZmlsZV9wYXRoLmgiCiAjaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCiAjaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vd2FpdGFibGVfZXZlbnQuaCIKICNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWQuaCIKQEAgLTUyLDE0ICs1MSwxNCBAQAogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvY2FuX3BsYXlfdHlwZV9oYW5kbGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5oIgotI2luY2x1ZGUgImNvYmFsdC9uZXR3b3JrL25ldHdvcmtfbW9kdWxlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcl90cmVlL25vZGUuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvcmVzb3VyY2VfcHJvdmlkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaCIKLSNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF9ydW5uZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvdWlfbmF2aWdhdGlvbi9uYXZfaXRlbS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvYWdlbnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKICNpbmNsdWRlICJjb2JhbHQvd2ViZHJpdmVyL3Nlc3Npb25fZHJpdmVyLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9qb2JzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2F0b21pYy5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKICNpZiBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKQEAgLTg4LDM0ICs4NywyMSBAQAogLy8gVGhpcyBuZWNlc3NhcmlseSBpbXBsaWVzIHRoYXQgZGV0YWlscyBjb250YWluZWQgd2l0aGluIFdlYk1vZHVsZSwgc3VjaCBhcyB0aGUKIC8vIERPTSwgYXJlIGludGVudGlvbmFsbHkga2VwdCBwcml2YXRlLCBzaW5jZSB0aGVzZSBzdHJ1Y3R1cmVzIGV4cGVjdCB0byBiZQogLy8gYWNjZXNzZWQgZnJvbSBvbmx5IG9uZSB0aHJlYWQuCi1jbGFzcyBXZWJNb2R1bGUgOiBwdWJsaWMgTGlmZWN5Y2xlT2JzZXJ2ZXIgeworY2xhc3MgV2ViTW9kdWxlIDogcHVibGljIGJhc2U6Ok1lc3NhZ2VMb29wOjpEZXN0cnVjdGlvbk9ic2VydmVyLAorICAgICAgICAgICAgICAgICAgcHVibGljIExpZmVjeWNsZU9ic2VydmVyIHsKICBwdWJsaWM6CiAgIHN0cnVjdCBPcHRpb25zIHsKLSAgICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpXcmFwcGFibGU+KAotICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPGRvbTo6V2luZG93PiYgd2luZG93LAotICAgICAgICBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50KiBnbG9iYWxfZW52aXJvbm1lbnQpPgotICAgICAgICBDcmVhdGVPYmplY3RGdW5jdGlvbjsKLSAgICB0eXBlZGVmIGJhc2U6Omhhc2hfbWFwPHN0ZDo6c3RyaW5nLCBDcmVhdGVPYmplY3RGdW5jdGlvbj4KLSAgICAgICAgSW5qZWN0ZWRXaW5kb3dBdHRyaWJ1dGVzOwotCiAgICAgLy8gQWxsIG9wdGlvbmFsIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGlzIHN0cnVjdHVyZSBzaG91bGQgaGF2ZSB0aGVpcgogICAgIC8vIHZhbHVlcyBpbml0aWFsaXplZCBpbiB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciB0byB1c2VmdWwgZGVmYXVsdHMuCi0gICAgT3B0aW9ucygpOworICAgIGV4cGxpY2l0IE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwogCi0gICAgLy8gVGhlIG5hbWUgb2YgdGhlIFdlYk1vZHVsZS4gIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYXMgaW4KLSAgICAvLyB0aGUgY2FzZSB3aGVyZSBtdWx0aXBsZSBXZWJNb2R1bGUgb2JqZWN0cyBleGlzdCwgaXQgY2FuIGJlIHVzZWQgdG8KLSAgICAvLyBkaWZmZXJlbnRpYXRlIHdoaWNoIG9iamVjdHMgYmVsb25nIHRvIHdoaWNoIFdlYk1vZHVsZS4gIEl0IGlzIHVzZWQKLSAgICAvLyB0byBuYW1lIHNvbWUgQ1ZhbHMuCi0gICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB3ZWI6OkFnZW50OjpPcHRpb25zIHdlYl9vcHRpb25zOwogCiAgICAgLy8gVGhlIExheW91dFRyaWdnZXIgcGFyYW1ldGVyIGRpY3RhdGVzIHdoZW4gYSBsYXlvdXQgc2hvdWxkIGJlIHRyaWdnZXJlZC4KICAgICAvLyBUZXN0cyB3aWxsIG9mdGVuIHNldCB0aGlzIHVwIHNvIHRoYXQgbGF5b3V0cyBhcmUgb25seSBwZXJmb3JtZWQgd2hlbgogICAgIC8vIHdlIHNwZWNpZmljYWxseSByZXF1ZXN0IHRoZW0gdG8gYmUuCiAgICAgbGF5b3V0OjpMYXlvdXRNYW5hZ2VyOjpMYXlvdXRUcmlnZ2VyIGxheW91dF90cmlnZ2VyOwogCi0gICAgLy8gT3B0aW9uYWwgZGlyZWN0b3J5IHRvIGFkZCB0byB0aGUgc2VhcmNoIHBhdGggZm9yIHdlYiBmaWxlcyAoZmlsZTovLykuCi0gICAgYmFzZTo6RmlsZVBhdGggZXh0cmFfd2ViX2ZpbGVfZGlyOwotCiAgICAgLy8gVGhlIG5hdmlnYXRpb25fY2FsbGJhY2sgZnVuY3RvciB3aWxsIGJlIGNhbGxlZCB3aGVuIEphdmFTY3JpcHQgaW50ZXJuYWwKICAgICAvLyB0byB0aGUgV2ViTW9kdWxlIHJlcXVlc3RzIGEgcGFnZSBuYXZpZ2F0aW9uLCBlLmcuIGJ5IG1vZGlmeWluZwogICAgIC8vICd3aW5kb3cubG9jYXRpb24uaHJlZicuCkBAIC0xMjQsMTEgKzExMCw2IEBACiAgICAgLy8gQSBsaXN0IG9mIGNhbGxiYWNrcyB0byBiZSBjYWxsZWQgb25jZSB0aGUgd2ViIHBhZ2UgZmluaXNoZXMgbG9hZGluZy4KICAgICBzdGQ6OnZlY3RvcjxiYXNlOjpDbG9zdXJlPiBsb2FkZWRfY2FsbGJhY2tzOwogCi0gICAgLy8gaW5qZWN0ZWRfd2luZG93X2F0dHJpYnV0ZXMgY29udGFpbnMgYSBtYXAgb2YgYXR0cmlidXRlcyB0byBiZSBpbmplY3RlZAotICAgIC8vIGludG8gdGhlIFdlYk1vZHVsZSdzIHdpbmRvdyBvYmplY3QgdXBvbiBjb25zdHJ1Y3Rpb24uICBUaGlzIHByb3ZpZGVzCi0gICAgLy8gYSBtZWNoYW5pc20gdG8gaW5qZWN0IGN1c3RvbSBBUElzIGludG8gdGhlIFdlYk1vZHVsZSBvYmplY3QuCi0gICAgSW5qZWN0ZWRXaW5kb3dBdHRyaWJ1dGVzIGluamVjdGVkX3dpbmRvd19hdHRyaWJ1dGVzOwotCiAgICAgLy8gT3B0aW9ucyB0byBjdXN0b21pemUgRE9NU2V0dGluZ3MuCiAgICAgZG9tOjpET01TZXR0aW5nczo6T3B0aW9ucyBkb21fc2V0dGluZ3Nfb3B0aW9uczsKIApAQCAtMTU1LDcgKzEzNiw3IEBACiAgICAgaW50IHJlbW90ZV90eXBlZmFjZV9jYWNoZV9jYXBhY2l0eSA9IDQgKiAxMDI0ICogMTAyNDsKIAogICAgIC8vIE1lc2ggY2FjaGUgY2FwYWNpdHkgaW4gYnl0ZXMuCi0gICAgaW50IG1lc2hfY2FjaGVfY2FwYWNpdHk7CisgICAgaW50IG1lc2hfY2FjaGVfY2FwYWNpdHkgPSAwOwogCiAgICAgLy8gV2hldGhlciBtYXAtdG8tbWVzaCBpcyBlbmFibGVkLgogICAgIGJvb2wgZW5hYmxlX21hcF90b19tZXNoID0gdHJ1ZTsKQEAgLTE3NSwxMSArMTU2LDYgQEAKICAgICAvLyBoZWxwIGZvciBwbGF0Zm9ybXMgdGhhdCBhcmUgbG93IG9uIGltYWdlIG1lbW9yeSB3aGlsZSBwbGF5aW5nIGEgdmlkZW8uCiAgICAgZmxvYXQgaW1hZ2VfY2FjaGVfY2FwYWNpdHlfbXVsdGlwbGllcl93aGVuX3BsYXlpbmdfdmlkZW8gPSAxLjBmOwogCi0gICAgLy8gU3BlY2lmaWVzIHRoZSBwcmlvcml0eSBvZiB0aGUgd2ViIG1vZHVsZSdzIHRocmVhZC4gIFRoaXMgaXMgdGhlIHRocmVhZAotICAgIC8vIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyBKYXZhU2NyaXB0LCBtYW5hZ2luZyB0aGUgRE9NLCBhbmQKLSAgICAvLyBwZXJmb3JtaW5nIGxheW91dHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBiYXNlOjpUaHJlYWRQcmlvcml0eTo6Tk9STUFMLgotICAgIGJhc2U6OlRocmVhZFByaW9yaXR5IHRocmVhZF9wcmlvcml0eSA9IGJhc2U6OlRocmVhZFByaW9yaXR5OjpOT1JNQUw7Ci0KICAgICAvLyBTcGVjaWZpZXMgdGhlIHByaW9yaXR5IHRoYXQgdGhlIHdlYiBtb2R1bGUncyBjb3JyZXNwb25kaW5nIGxvYWRlciB0aHJlYWQKICAgICAvLyB3aWxsIGJlIGFzc2lnbmVkLiAgVGhpcyBpcyB0aGUgdGhyZWFkIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIHJlc291cmNlCiAgICAgLy8gZGVjb2RpbmcsIHN1Y2ggYXMgaW1hZ2UgZGVjb2RpbmcuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcwpAQCAtMTk3LDggKzE3Myw2IEBACiAgICAgLy8gVG8gc3VwcG9ydCAzRCBjYW1lcmEgbW92ZW1lbnRzLgogICAgIHNjb3BlZF9yZWZwdHI8aW5wdXQ6OkNhbWVyYTNEPiBjYW1lcmFfM2Q7CiAKLSAgICBzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU6Ok9wdGlvbnMgamF2YXNjcmlwdF9lbmdpbmVfb3B0aW9uczsKLQogICAgIC8vIFRoZSB2aWRlbyBwbGF5YmFjayByYXRlIHdpbGwgYmUgbXVsdGlwbGllZCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFsdWUuICBJdHMKICAgICAvLyBkZWZhdWx0IHZhbHVlIGlzIDEuMC4KICAgICBmbG9hdCB2aWRlb19wbGF5YmFja19yYXRlX211bHRpcGxpZXIgPSAxLmY7CkBAIC0yMTIsNyArMTg2LDcgQEAKICAgICBib29sIHNob3VsZF9yZXRhaW5fcmVtb3RlX3R5cGVmYWNlX2NhY2hlX29uX2ZyZWV6ZSA9IGZhbHNlOwogCiAgICAgLy8gVGhlIHNwbGFzaCBzY3JlZW4gY2FjaGUgb2JqZWN0LCBvd25lZCBieSB0aGUgQnJvd3Nlck1vZHVsZS4KLSAgICBTcGxhc2hTY3JlZW5DYWNoZSogc3BsYXNoX3NjcmVlbl9jYWNoZTsKKyAgICBTcGxhc2hTY3JlZW5DYWNoZSogc3BsYXNoX3NjcmVlbl9jYWNoZSA9IG51bGxwdHI7CiAKICAgICAvLyBUaGUgYmVmb3JldW5sb2FkIGV2ZW50IGNhbiBnaXZlIGEgd2ViIHBhZ2UgYSBjaGFuY2UgdG8gc2h1dAogICAgIC8vIGl0c2VsZiBkb3duIHNvZnRseSBhbmQgdWx0aW1hdGVseSBjYWxsIHdpbmRvdy5jbG9zZSgpLCBob3dldmVyCkBAIC0yMjIsMTIgKzE5Niw4IEBACiAgICAgLy8gbm8gd2luZG93LmNsb3NlKCkgY2FsbCBwZW5kaW5nLgogICAgIGJhc2U6OkNsb3N1cmUgb25fYmVmb3JlX3VubG9hZF9maXJlZF9idXRfbm90X2hhbmRsZWQ7CiAKLSAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgV2ViTW9kdWxlIGlzIGFsbG93ZWQgdG8gZmV0Y2ggZnJvbSBjYWNoZSB2aWEKLSAgICAvLyBoNXZjYy1jYWNoZTovLy4KLSAgICBib29sIGNhbl9mZXRjaF9jYWNoZSA9IGZhbHNlOwotCiAgICAgLy8gVGhlIGRvbTo6T25TY3JlZW5LZXlib2FyZCBmb3J3YXJkcyBjYWxscyB0byB0aGlzIGludGVyZmFjZS4KLSAgICBkb206Ok9uU2NyZWVuS2V5Ym9hcmRCcmlkZ2UqIG9uX3NjcmVlbl9rZXlib2FyZF9icmlkZ2UgPSBOVUxMOworICAgIGRvbTo6T25TY3JlZW5LZXlib2FyZEJyaWRnZSogb25fc2NyZWVuX2tleWJvYXJkX2JyaWRnZSA9IG51bGxwdHI7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgcmVuZGVyIHRyZWUgYXMgaW5wdXQsIGFuZCB0aGVuIGNhbGxzIHRoZSAybmQKICAgICAvLyBhcmd1bWVudCAod2hpY2ggaXMgYW5vdGhlciBjYWxsYmFjaykgd2hlbiB0aGUgc2NyZWVuc2hvdCBpcyBhdmFpbGFibGUuCkBAIC0yNTIsMTEgKzIyMiw2IEBACiAgICAgLy8gY2FuIGFsbG93IHRoZSBsaW1pdCB0byBiZSBkaXNhYmxlZC4KICAgICBib29sIGxpbWl0X3BlcmZvcm1hbmNlX3RpbWVyX3Jlc29sdXRpb24gPSB0cnVlOwogCi0jaWYgZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKLSAgICAvLyBXaGV0aGVyIGxheW91dCBpcyBvcHRpbWl6ZWQgdG8gcmUtdXNlIGJveGVzIGZvciBzdGlsbC12YWxpZCBlbGVtZW50cy4KLSAgICBib29sIGVuYWJsZV9wYXJ0aWFsX2xheW91dCA9IHRydWU7Ci0jZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0KICNpZiBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKICAgICAvLyBXaGV0aGVyIHRoZSBkZWJ1Z2dlciBzaG91bGQgYmxvY2sgdW50aWwgcmVtb3RlIGRldnRvb2xzIGNvbm5lY3RzLgogICAgIGJvb2wgd2FpdF9mb3Jfd2ViX2RlYnVnZ2VyID0gZmFsc2U7CkBAIC0yNzEsNiArMjM2LDExIEBACiAgICAgLy8gdGhlcmUgaXMgbm8gcGxheWJhY2sgZHVyaW5nIENvbmNlYWxlZCBzdGF0ZSwgd2Ugc2hvdWxkIHByb3ZpZGUgYSBjaGFuY2UKICAgICAvLyBmb3IgQ29iYWx0IHRvIGZyZWV6ZS4KICAgICBiYXNlOjpDbG9zdXJlIG1heWJlX2ZyZWV6ZV9jYWxsYmFjazsKKworICAgIC8vIFRoaXMgY2FsbGJhY2sgaXMgZm9yIGNvbGxlY3RpbmcgcHJldmlvdXMgZG9jdW1lbnQgdW5sb2FkIGV2ZW50IHN0YXJ0L2VuZAorICAgIC8vIHRpbWUuCisgICAgYmFzZTo6Q2FsbGJhY2s8dm9pZChiYXNlOjpUaW1lVGlja3MsIGJhc2U6OlRpbWVUaWNrcyk+CisgICAgICAgIGNvbGxlY3RfdW5sb2FkX2V2ZW50X3RpbWVfY2FsbGJhY2s7CiAgIH07CiAKICAgdHlwZWRlZiBsYXlvdXQ6OkxheW91dE1hbmFnZXI6OkxheW91dFJlc3VsdHMgTGF5b3V0UmVzdWx0czsKQEAgLTI3OCwyNCArMjQ4LDIyIEBACiAgICAgICBPblJlbmRlclRyZWVQcm9kdWNlZENhbGxiYWNrOwogICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgR1VSTCYsIGNvbnN0IHN0ZDo6c3RyaW5nJik+IE9uRXJyb3JDYWxsYmFjazsKICAgdHlwZWRlZiBkb206OldpbmRvdzo6Q2xvc2VDYWxsYmFjayBDbG9zZUNhbGxiYWNrOwotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3Qgc2NyaXB0OjpIZWFwU3RhdGlzdGljcyYpPgotICAgICAgSmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzQ2FsbGJhY2s7CiAKICAgV2ViTW9kdWxlKGNvbnN0IEdVUkwmIGluaXRpYWxfdXJsLAogICAgICAgICAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBpbml0aWFsX2FwcGxpY2F0aW9uX3N0YXRlLAogICAgICAgICAgICAgY29uc3QgT25SZW5kZXJUcmVlUHJvZHVjZWRDYWxsYmFjayYgcmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2ssCi0gICAgICAgICAgICBjb25zdCBPbkVycm9yQ2FsbGJhY2smIGVycm9yX2NhbGxiYWNrLAorICAgICAgICAgICAgT25FcnJvckNhbGxiYWNrIGVycm9yX2NhbGxiYWNrLAogICAgICAgICAgICAgY29uc3QgQ2xvc2VDYWxsYmFjayYgd2luZG93X2Nsb3NlX2NhbGxiYWNrLAogICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAogICAgICAgICAgICAgbWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlciogY2FuX3BsYXlfdHlwZV9oYW5kbGVyLAogICAgICAgICAgICAgbWVkaWE6Ok1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUsCi0gICAgICAgICAgICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSwKICAgICAgICAgICAgIGNvbnN0IGNzc29tOjpWaWV3cG9ydFNpemUmIHdpbmRvd19kaW1lbnNpb25zLAogICAgICAgICAgICAgcmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLAotICAgICAgICAgICAgZmxvYXQgbGF5b3V0X3JlZnJlc2hfcmF0ZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7CisgICAgICAgICAgICBmbG9hdCBsYXlvdXRfcmVmcmVzaF9yYXRlLAorICAgICAgICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VySm9icyogc2VydmljZV93b3JrZXJfam9icywKKyAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwogICB+V2ViTW9kdWxlKCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAvLyBJbmplY3RzIGFuIG9uIHNjcmVlbiBrZXlib2FyZCBpbnB1dCBldmVudCBpbnRvIHRoZSB3ZWIgbW9kdWxlLiBUaGUgdmFsdWUKICAgLy8gZm9yIHR5cGUgcmVwcmVzZW50cyBiZWZvcmVpbnB1dCBvciBpbnB1dC4KICAgdm9pZCBJbmplY3RPblNjcmVlbktleWJvYXJkSW5wdXRFdmVudChiYXNlOjpUb2tlbiB0eXBlLApAQCAtMzExLDggKzI3OSw2IEBACiAgIC8vIEluamVjdHMgYW4gb24gc2NyZWVuIGtleWJvYXJkIHN1Z2dlc3Rpb25zIHVwZGF0ZWQgZXZlbnQgaW50byB0aGUgd2ViCiAgIC8vIG1vZHVsZS4KICAgdm9pZCBJbmplY3RPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNVcGRhdGVkRXZlbnQoaW50IHRpY2tldCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgdm9pZCBJbmplY3RXaW5kb3dPbk9ubGluZUV2ZW50KGNvbnN0IGJhc2U6OkV2ZW50KiBldmVudCk7CiAgIHZvaWQgSW5qZWN0V2luZG93T25PZmZsaW5lRXZlbnQoY29uc3QgYmFzZTo6RXZlbnQqIGV2ZW50KTsKQEAgLTM0MywyNiArMzA5LDI5IEBACiAgIC8vIEV4ZWN1dGVzIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHdlYiBtb2R1bGUuICBUaGUgY2FsbGluZyB0aHJlYWQgd2lsbAogICAvLyBibG9jayB1bnRpbCB0aGUgSmF2YVNjcmlwdCBoYXMgZXhlY3V0ZWQgYW5kIHRoZSBvdXRwdXQgcmVzdWx0cyBhcmUKICAgLy8gYXZhaWxhYmxlLgotICBzdGQ6OnN0cmluZyBFeGVjdXRlSmF2YXNjcmlwdChjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0X3V0ZjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlNvdXJjZUxvY2F0aW9uJiBzY3JpcHRfbG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dF9zdWNjZWVkZWQpOworICB2b2lkIEV4ZWN1dGVKYXZhc2NyaXB0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHRfdXRmOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpTb3VyY2VMb2NhdGlvbiYgc2NyaXB0X2xvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBvdXRfcmVzdWx0ID0gbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBvdXRfc3VjY2VlZGVkID0gbnVsbHB0cik7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9XRUJEUklWRVIpCiAgIC8vIENyZWF0ZXMgYSBuZXcgd2ViZHJpdmVyOjpXaW5kb3dEcml2ZXIgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgV2luZG93IHRoYXQKICAgLy8gaXMgb3duZWQgYnkgdGhpcyBXZWJNb2R1bGUgaW5zdGFuY2UuCi0gIHN0ZDo6dW5pcXVlX3B0cjx3ZWJkcml2ZXI6OldpbmRvd0RyaXZlcj4gQ3JlYXRlV2luZG93RHJpdmVyKAotICAgICAgY29uc3Qgd2ViZHJpdmVyOjpwcm90b2NvbDo6V2luZG93SWQmIHdpbmRvd19pZCk7CisgIHZvaWQgQ3JlYXRlV2luZG93RHJpdmVyKAorICAgICAgY29uc3Qgd2ViZHJpdmVyOjpwcm90b2NvbDo6V2luZG93SWQmIHdpbmRvd19pZCwKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJkcml2ZXI6OldpbmRvd0RyaXZlcj4qIHdpbmRvd19kcml2ZXJfb3V0KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCiAgIC8vIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIGRlYnVnIGRpc3BhdGNoZXIgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGlzIHdlYgogICAvLyBtb2R1bGUuIFRoZSBkZWJ1ZyBkaXNwYXRjaGVyIGlzIHBhcnQgb2YgdGhlIGRlYnVnIG1vZHVsZSBvd25lZCBieSB0aGlzIHdlYgogICAvLyBtb2R1bGUsIHdoaWNoIGlzIGxhemlseSBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgotICBkZWJ1Zzo6YmFja2VuZDo6RGVidWdEaXNwYXRjaGVyKiBHZXREZWJ1Z0Rpc3BhdGNoZXIoKTsKKyAgdm9pZCBHZXREZWJ1Z0Rpc3BhdGNoZXIoZGVidWc6OmJhY2tlbmQ6OkRlYnVnRGlzcGF0Y2hlcioqIGRpc3BhdGNoZXIpOwogCiAgIC8vIE1vdmVzIHRoZSBkZWJ1Z2dlciBzdGF0ZSBvdXQgb2YgdGhpcyBXZWJNb2R1bGUgcHJpb3IgdG8gbmF2aWdhdGluZyBzbyB0aGF0CiAgIC8vIGl0IGNhbiBiZSByZXN0b3JlZCBpbiB0aGUgbmV3IFdlYk1vZHVsZSBhZnRlciB0aGUgbmF2aWdhdGlvbi4KLSAgc3RkOjp1bmlxdWVfcHRyPGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z2dlclN0YXRlPiBGcmVlemVEZWJ1Z2dlcigpOworICB2b2lkIEZyZWV6ZURlYnVnZ2VyKAorICAgICAgc3RkOjp1bmlxdWVfcHRyPGRlYnVnOjpiYWNrZW5kOjpEZWJ1Z2dlclN0YXRlPiogZGVidWdnZXJfc3RhdGUpOwogI2VuZGlmICAvLyBFTkFCTEVfREVCVUdHRVIKIAogICAvLyBTZXRzIHRoZSBzaXplIG9mIHRoaXMgd2ViIG1vZHVsZSwgcG9zc2libHkgY2F1c2luZyByZWxheW91dCBhbmQgcmUtcmVuZGVyCkBAIC00MDIsMzYgKzM3MSw0OCBAQAogICAvLyB0aHJlYWQuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgfGNhbGxiYWNrfCB0byBnZXQgYmFjayB0byBpdHMKICAgLy8gaW50ZW5kZWQgdGhyZWFkIHNob3VsZCBpdCB3YW50IHRvLgogICB2b2lkIFJlcXVlc3RKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3MoCi0gICAgICBjb25zdCBKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3NDYWxsYmFjayYgY2FsbGJhY2spOworICAgICAgY29uc3Qgd2ViOjpBZ2VudDo6SmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzQ2FsbGJhY2smIGNhbGxiYWNrKTsKIAogICAvLyBJbmRpY2F0ZSB0aGUgd2ViIG1vZHVsZSBpcyByZWFkeSB0byBmcmVlemUuCiAgIGJvb2wgSXNSZWFkeVRvRnJlZXplKCk7CiAKLSAgc2NvcGVkX3JlZnB0cjxyZW5kZXJfdHJlZTo6Tm9kZT4gRG9TeW5jaHJvbm91c0xheW91dEFuZEdldFJlbmRlclRyZWUoKTsKKyAgdm9pZCBEb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZSgKKyAgICAgIHNjb3BlZF9yZWZwdHI8cmVuZGVyX3RyZWU6Ok5vZGU+KiByZW5kZXJfdHJlZSA9IG51bGxwdHIpOwogCisgIC8vIFBhc3MgdGhlIGFwcGxpY2F0aW9uIHByZWxvYWQgb3Igc3RhcnQgdGltZXN0YW1wcyBmcm9tIFN0YXJib2FyZC4KICAgdm9pZCBTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKGJvb2wgaXNfcHJlbG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogICB2b2lkIFNldERlZXBMaW5rVGltZXN0YW1wKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogCisgIC8vIEZyb20gYmFzZTo6TWVzc2FnZUxvb3A6OkRlc3RydWN0aW9uT2JzZXJ2ZXIuCisgIHZvaWQgV2lsbERlc3Ryb3lDdXJyZW50TWVzc2FnZUxvb3AoKSBvdmVycmlkZTsKKworICAvLyBTZXQgZG9jdW1lbnQncyBsb2FkIHRpbWluZyBpbmZvJ3MgdW5sb2FkIGV2ZW50IHN0YXJ0L2VuZCB0aW1lLgorICB2b2lkIFNldFVubG9hZEV2ZW50VGltaW5nSW5mbyhiYXNlOjpUaW1lVGlja3Mgc3RhcnRfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZVRpY2tzIGVuZF90aW1lKTsKKwogIHByaXZhdGU6CiAgIC8vIERhdGEgcmVxdWlyZWQgdG8gY29uc3RydWN0IGEgV2ViTW9kdWxlLCBpbml0aWFsaXplZCBpbiB0aGUgY29uc3RydWN0b3IgYW5kCiAgIC8vIHBhc3NlZCB0byB8SW5pdGlhbGl6ZXwuCiAgIHN0cnVjdCBDb25zdHJ1Y3Rpb25EYXRhIHsKLSAgICBDb25zdHJ1Y3Rpb25EYXRhKAotICAgICAgICBjb25zdCBHVVJMJiBpbml0aWFsX3VybCwKLSAgICAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBpbml0aWFsX2FwcGxpY2F0aW9uX3N0YXRlLAotICAgICAgICBjb25zdCBPblJlbmRlclRyZWVQcm9kdWNlZENhbGxiYWNrJiByZW5kZXJfdHJlZV9wcm9kdWNlZF9jYWxsYmFjaywKLSAgICAgICAgY29uc3QgT25FcnJvckNhbGxiYWNrJiBlcnJvcl9jYWxsYmFjaywKLSAgICAgICAgY29uc3QgQ2xvc2VDYWxsYmFjayYgd2luZG93X2Nsb3NlX2NhbGxiYWNrLAotICAgICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiB3aW5kb3dfbWluaW1pemVfY2FsbGJhY2ssCi0gICAgICAgIG1lZGlhOjpDYW5QbGF5VHlwZUhhbmRsZXIqIGNhbl9wbGF5X3R5cGVfaGFuZGxlciwKLSAgICAgICAgbWVkaWE6Ok1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUsCi0gICAgICAgIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlLAotICAgICAgICBjb25zdCBjc3NvbTo6Vmlld3BvcnRTaXplJiB3aW5kb3dfZGltZW5zaW9ucywKLSAgICAgICAgcmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLAotICAgICAgICBpbnQgZG9tX21heF9lbGVtZW50X2RlcHRoLCBmbG9hdCBsYXlvdXRfcmVmcmVzaF9yYXRlLAotICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPHVpX25hdmlnYXRpb246Ok5hdkl0ZW0+JiB1aV9uYXZfcm9vdCwKLSAgICAgICAgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKKyAgICBDb25zdHJ1Y3Rpb25EYXRhKGNvbnN0IEdVUkwmIGluaXRpYWxfdXJsLAorICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBpbml0aWFsX2FwcGxpY2F0aW9uX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgT25SZW5kZXJUcmVlUHJvZHVjZWRDYWxsYmFjayByZW5kZXJfdHJlZV9wcm9kdWNlZF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9uRXJyb3JDYWxsYmFjayYgZXJyb3JfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICBDbG9zZUNhbGxiYWNrIHdpbmRvd19jbG9zZV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkNsb3N1cmUgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlciogY2FuX3BsYXlfdHlwZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgbWVkaWE6Ok1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3NvbTo6Vmlld3BvcnRTaXplJiB3aW5kb3dfZGltZW5zaW9ucywKKyAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgIGludCBkb21fbWF4X2VsZW1lbnRfZGVwdGgsIGZsb2F0IGxheW91dF9yZWZyZXNoX3JhdGUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPHVpX25hdmlnYXRpb246Ok5hdkl0ZW0+JiB1aV9uYXZfcm9vdCwKKyNpZiBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKKyAgICAgICAgICAgICAgICAgICAgIHN0YXJib2FyZDo6YXRvbWljX2Jvb2wqIHdhaXRpbmdfZm9yX3dlYl9kZWJ1Z2dlciwKKyNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisgICAgICAgICAgICAgICAgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50KiBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VySm9icyogc2VydmljZV93b3JrZXJfam9icywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAgIDogaW5pdGlhbF91cmwoaW5pdGlhbF91cmwpLAogICAgICAgICAgIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUoaW5pdGlhbF9hcHBsaWNhdGlvbl9zdGF0ZSksCiAgICAgICAgICAgcmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2socmVuZGVyX3RyZWVfcHJvZHVjZWRfY2FsbGJhY2spLApAQCAtNDQwLDY3ICs0MjEsODQgQEAKICAgICAgICAgICB3aW5kb3dfbWluaW1pemVfY2FsbGJhY2sod2luZG93X21pbmltaXplX2NhbGxiYWNrKSwKICAgICAgICAgICBjYW5fcGxheV90eXBlX2hhbmRsZXIoY2FuX3BsYXlfdHlwZV9oYW5kbGVyKSwKICAgICAgICAgICBtZWRpYV9tb2R1bGUobWVkaWFfbW9kdWxlKSwKLSAgICAgICAgICBuZXR3b3JrX21vZHVsZShuZXR3b3JrX21vZHVsZSksCiAgICAgICAgICAgd2luZG93X2RpbWVuc2lvbnMod2luZG93X2RpbWVuc2lvbnMpLAogICAgICAgICAgIHJlc291cmNlX3Byb3ZpZGVyKHJlc291cmNlX3Byb3ZpZGVyKSwKICAgICAgICAgICBkb21fbWF4X2VsZW1lbnRfZGVwdGgoZG9tX21heF9lbGVtZW50X2RlcHRoKSwKICAgICAgICAgICBsYXlvdXRfcmVmcmVzaF9yYXRlKGxheW91dF9yZWZyZXNoX3JhdGUpLAogICAgICAgICAgIHVpX25hdl9yb290KHVpX25hdl9yb290KSwKLSAgICAgICAgICBvcHRpb25zKG9wdGlvbnMpIHt9CisjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisgICAgICAgICAgd2FpdGluZ19mb3Jfd2ViX2RlYnVnZ2VyKHdhaXRpbmdfZm9yX3dlYl9kZWJ1Z2dlciksCisjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQorICAgICAgICAgIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHQoc3luY2hyb25vdXNfbG9hZGVyX2ludGVycnVwdCksCisgICAgICAgICAgc2VydmljZV93b3JrZXJfam9icyhzZXJ2aWNlX3dvcmtlcl9qb2JzKSwKKyAgICAgICAgICBvcHRpb25zKG9wdGlvbnMpIHsKKyAgICB9CiAKICAgICBHVVJMIGluaXRpYWxfdXJsOwogICAgIGJhc2U6OkFwcGxpY2F0aW9uU3RhdGUgaW5pdGlhbF9hcHBsaWNhdGlvbl9zdGF0ZTsKICAgICBPblJlbmRlclRyZWVQcm9kdWNlZENhbGxiYWNrIHJlbmRlcl90cmVlX3Byb2R1Y2VkX2NhbGxiYWNrOwogICAgIE9uRXJyb3JDYWxsYmFjayBlcnJvcl9jYWxsYmFjazsKLSAgICBjb25zdCBDbG9zZUNhbGxiYWNrJiB3aW5kb3dfY2xvc2VfY2FsbGJhY2s7Ci0gICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgd2luZG93X21pbmltaXplX2NhbGxiYWNrOworICAgIENsb3NlQ2FsbGJhY2sgd2luZG93X2Nsb3NlX2NhbGxiYWNrOworICAgIGJhc2U6OkNsb3N1cmUgd2luZG93X21pbmltaXplX2NhbGxiYWNrOwogICAgIG1lZGlhOjpDYW5QbGF5VHlwZUhhbmRsZXIqIGNhbl9wbGF5X3R5cGVfaGFuZGxlcjsKICAgICBtZWRpYTo6TWVkaWFNb2R1bGUqIG1lZGlhX21vZHVsZTsKLSAgICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZTsKICAgICBjc3NvbTo6Vmlld3BvcnRTaXplIHdpbmRvd19kaW1lbnNpb25zOwogICAgIHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlcjsKICAgICBpbnQgZG9tX21heF9lbGVtZW50X2RlcHRoOwogICAgIGZsb2F0IGxheW91dF9yZWZyZXNoX3JhdGU7CiAgICAgc2NvcGVkX3JlZnB0cjx1aV9uYXZpZ2F0aW9uOjpOYXZJdGVtPiB1aV9uYXZfcm9vdDsKKyNpZiBkZWZpbmVkKEVOQUJMRV9ERUJVR0dFUikKKyAgICBzdGFyYm9hcmQ6OmF0b21pY19ib29sKiB3YWl0aW5nX2Zvcl93ZWJfZGVidWdnZXI7CisjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0RFQlVHR0VSKQorICAgIGJhc2U6OldhaXRhYmxlRXZlbnQqIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHQ7CisgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VySm9icyogc2VydmljZV93b3JrZXJfam9iczsKICAgICBPcHRpb25zIG9wdGlvbnM7CiAgIH07CiAKICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KICAgY2xhc3MgSW1wbDsKIAotICAvLyBEZXN0cnVjdGlvbiBvYnNlcnZlciB1c2VkIHRvIHNhZmVseSB0ZWFyIGRvd24gdGhpcyBXZWJNb2R1bGUgYWZ0ZXIgdGhlCi0gIC8vIHRocmVhZCBoYXMgYmVlbiBzdG9wcGVkLgotICBjbGFzcyBEZXN0cnVjdGlvbk9ic2VydmVyIDogcHVibGljIGJhc2U6Ok1lc3NhZ2VMb29wOjpEZXN0cnVjdGlvbk9ic2VydmVyIHsKLSAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXN0cnVjdGlvbk9ic2VydmVyKFdlYk1vZHVsZSogd2ViX21vZHVsZSk7Ci0gICAgdm9pZCBXaWxsRGVzdHJveUN1cnJlbnRNZXNzYWdlTG9vcCgpIG92ZXJyaWRlOwotCi0gICBwcml2YXRlOgotICAgIFdlYk1vZHVsZSogd2ViX21vZHVsZV87Ci0gIH07Ci0KICAgLy8gQ2FsbGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgdGhlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2JqZWN0IGFuZAogICAvLyBwZXJmb3JtIGFueSBvdGhlciBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBvbiB0aGUgZGVkaWNhdGVkIHRocmVhZC4KLSAgdm9pZCBJbml0aWFsaXplKGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEpOworICB2b2lkIEluaXRpYWxpemUoY29uc3QgQ29uc3RydWN0aW9uRGF0YSYgZGF0YSwgd2ViOjpDb250ZXh0KiBjb250ZXh0KTsKIAogICB2b2lkIENsZWFyQWxsSW50ZXJ2YWxzQW5kVGltZW91dHMoKTsKIAogICB2b2lkIENhbmNlbFN5bmNocm9ub3VzTG9hZHMoKTsKIAorICB2b2lkIEdldElzUmVhZHlUb0ZyZWV6ZSh2b2xhdGlsZSBib29sKiBpc19yZWFkeV90b19mcmVlemUpOworCiAgIC8vIFRoZSBtZXNzYWdlIGxvb3AgdGhpcyBvYmplY3QgaXMgcnVubmluZyBvbi4KLSAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcCgpIGNvbnN0IHsgcmV0dXJuIHRocmVhZF8ubWVzc2FnZV9sb29wKCk7IH0KKyAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcCgpIGNvbnN0IHsKKyAgICBEQ0hFQ0sod2ViX2FnZW50Xyk7CisgICAgcmV0dXJuIHdlYl9hZ2VudF8tPm1lc3NhZ2VfbG9vcCgpOworICB9CiAKICAgLy8gUHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvYmplY3QuCiAgIHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBpbXBsXzsKIAotICAvLyBUaGUgdGhyZWFkIGNyZWF0ZWQgYW5kIG93bmVkIGJ5IHRoaXMgV2ViTW9kdWxlLgotICAvLyBBbGwgc3ViLW9iamVjdHMgb2YgdGhpcyBvYmplY3QgYXJlIGNyZWF0ZWQgb24gdGhpcyB0aHJlYWQsIGFuZCBhbGwgcHVibGljCi0gIC8vIG1lbWJlciBmdW5jdGlvbnMgYXJlIHJlLXBvc3RlZCB0byB0aGlzIHRocmVhZCBpZiBuZWNlc3NhcnkuCi0gIGJhc2U6OlRocmVhZCB0aHJlYWRfOworICB3ZWI6OkFnZW50KiB3ZWJfYWdlbnQoKSBjb25zdCB7IHJldHVybiB3ZWJfYWdlbnRfLmdldCgpOyB9CisKKyAgLy8gVGhlIFdlYiBBZ2VudC4KKyAgc3RkOjp1bmlxdWVfcHRyPHdlYjo6QWdlbnQ+IHdlYl9hZ2VudF87CiAKICAgLy8gVGhpcyBpcyB0aGUgcm9vdCBVSSBuYXZpZ2F0aW9uIGNvbnRhaW5lciB3aGljaCBjb250YWlucyBhbGwgYWN0aXZlIFVJCiAgIC8vIG5hdmlnYXRpb24gaXRlbXMgY3JlYXRlZCBieSB0aGlzIHdlYiBtb2R1bGUuCiAgIHNjb3BlZF9yZWZwdHI8dWlfbmF2aWdhdGlvbjo6TmF2SXRlbT4gdWlfbmF2X3Jvb3RfOworCisjaWYgZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisgIC8vIFVzZWQgdG8gYXZvaWQgYSBkZWFkbG9jayB3aGVuIHJ1bm5pbmcgfEJsdXJ8IHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB3ZWIKKyAgLy8gZGVidWdnZXIgdG8gY29ubmVjdC4gSW5pdGlhbGl6ZXMgdG8gZmFsc2UuCisgIHN0YXJib2FyZDo6YXRvbWljX2Jvb2wgd2FpdGluZ19mb3Jfd2ViX2RlYnVnZ2VyXzsKKyNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfREVCVUdHRVIpCisKKyAgLy8gVGhpcyBldmVudCBpcyB1c2VkIHRvIGludGVycnVwdCB0aGUgbG9hZGVyIHdoZW4gSmF2YVNjcmlwdCBpcyBsb2FkZWQKKyAgLy8gc3luY2hyb25vdXNseS4gIEl0IGlzIG1hbnVhbGx5IHJlc2V0IHNvIHRoYXQgZXZlbnRzIGxpa2UgRnJlZXplIGNhbiBiZQorICAvLyBjb3JyZWN0bHkgZXhlY3V0ZSwgZXZlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3luY2hyb25vdXMgbG9hZHMgaW4gcXVldWUKKyAgLy8gYmVmb3JlIHRoZSBmcmVlemUgKG9yIG90aGVyKSBldmVudCBoYW5kbGVycy4KKyAgYmFzZTo6V2FpdGFibGVFdmVudCBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0XyA9IHsKKyAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OlJlc2V0UG9saWN5OjpNQU5VQUwsCisgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50OjpJbml0aWFsU3RhdGU6Ok5PVF9TSUdOQUxFRH07CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgYnJvd3NlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oIGIvY29iYWx0L2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzNmOGYzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9icm93c2VyL3dlYmFwaV9leHRlbnNpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBDT0JBTFRfQlJPV1NFUl9XRUJBUElfRVhURU5TSU9OX0hfCi0jZGVmaW5lIENPQkFMVF9CUk9XU0VSX1dFQkFQSV9FWFRFTlNJT05fSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vd2luZG93LmgiCi0jaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9nbG9iYWxfZW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBicm93c2VyIHsKLQotLy8gVGhpcyBmaWxlIGRlY2xhcmVzIHRoZSBpbnRlcmZhY2UgdGhhdCBDb2JhbHQgY2FsbHMgaW4gb3JkZXIgdG8gcG9zc2libHkKLS8vIGluamVjdCBleHRlcm5hbCBmdW5jdGlvbmFsaXR5IGludG8gdGhlIHdlYiBhcHAncyBKYXZhU2NyaXB0IGVudmlyb25tZW50LgotLy8gU2VlIGNvYmFsdC9kb2Mvd2ViYXBpX2V4dGVuc2lvbi5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotLy8gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkKLS8vIHRvIGJlIGluamVjdGVkIGludG8gdG8gdGhlIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4gIElmIGJhc2U6Om51bGxvcHQgaXMKLS8vIHJldHVybmVkLCB0aGVuIENyZWF0ZVdlYkV4dGVuc2lvbk9iamVjdCgpIHdpbGwgbm90IGJlIHN1YnNlcXVlbnRseSBjYWxsZWQKLS8vIGFuZCBub3RoaW5nIHdpbGwgYmUgaW5qZWN0ZWQuCi1iYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKCk7Ci0KLS8vIFRoZSBhY3R1YWwgb2JqZWN0IHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgd2luZG93IHByb3BlcnR5IHdpdGggbmFtZQotLy8gZ2l2ZW4gYnkgKkdldFdlYkV4dGVuc2lvbk9iamVjdFByb3BlcnR5TmFtZSgpLiAgVGhlIHJldHVybmVkIG9iamVjdCBzaG91bGQKLS8vIGJlIHNwZWNpZmllZCBieSBhbiBJREwgaW50ZXJmYWNlLiAgSXQgaXMgcGFzc2VkIGEgcmVmZXJlbmNlIHRvIHx3aW5kb3d8Ci0vLyBzbyB0aGF0IGl0IGNhbiBhY2Nlc3MgYW5kIGludHJvc3BlY3QgYW55IHByb3BlcnRpZXMgb2YgdGhlIHdpbmRvdyBvYmplY3QuCi0vLyBJdCBpcyBwYXNzZWQgfGdsb2JhbF9lbnZpcm9ubWVudHwgc28gdGhhdCBpdCBjYW4gYWNjZXNzIGZ1bmN0aW9ucyBvZiB0aGUKLS8vIEdsb2JhbEVudmlyb25tZW50IGludGVyZmFjZSwgc3VjaCBhcyB1c2luZyBpdCB0byBleGVjdXRlIGFyYml0cmFyeQotLy8gSmF2YVNjcmlwdC4KLXNjb3BlZF9yZWZwdHI8c2NyaXB0OjpXcmFwcGFibGU+IENyZWF0ZVdlYkFQSUV4dGVuc2lvbk9iamVjdCgKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPGRvbTo6V2luZG93PiYgd2luZG93LAotICAgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBicm93c2VyCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNpZiBkZWZpbmVkKENPQkFMVF9XRUJBUElfRVhURU5TSU9OX0RFRklORUQpCi0jcHJhZ21hIG1lc3NhZ2UoIFwKLSAgIldlYiBFeHRlbnNpb24gc3VwcG9ydCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgbWlncmF0ZSB0byBQbGF0Zm9ybSBTZXJ2aWNlcyAiIFwKLSAgIihjb2JhbHQvZG9jL3BsYXRmb3JtX3NlcnZpY2VzLm1kKS4iKQotI2VuZGlmCi0KLSNlbGlmIGRlZmluZWQoQ09CQUxUX1dFQkFQSV9FWFRFTlNJT05fREVGSU5FRCkKLQotI2Vycm9yIFwKLSAgIldlYiBFeHRlbnNpb24gc3VwcG9ydCBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFBsYXRmb3JtIFNlcnZpY2VzICIgXAotICAiKGNvYmFsdC9kb2MvcGxhdGZvcm1fc2VydmljZXMubWQpIGluc3RlYWQuIgotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2VuZGlmICAvLyBDT0JBTFRfQlJPV1NFUl9XRUJBUElfRVhURU5TSU9OX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvX2Vudi5weSBiL2NvYmFsdC9idWlsZC9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzJlYWJjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQoJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKSkKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2FsbC5neXAgYi9jb2JhbHQvYnVpbGQvYWxsLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgwYjcwYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnVpbGQvYWxsLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRhcmdldHMgdGhhdCBzaG91bGQgYmUgY3JlYXRlZCBieSBneXBfY29iYWx0IGJ5Ci0jIGRlZmF1bHQuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ0RlZmF1bHQnLAotICAgICAgJ2RlZmF1bHRfcHJvamVjdCc6IDEsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9jb2JhbHQuZ3lwOmNvYmFsdCcsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnQWxsJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZV91bml0dGVzdHNfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9hdWRpby9hdWRpby5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYXVkaW8vYXVkaW9fdGVzdC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy90ZXN0aW5nL3Rlc3RpbmcuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlci5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9jb2JhbHQuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2NzcC9jc3AuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3Nzb20vY3Nzb20uZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc29tL2Nzc29tX3Rlc3QuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb21fdGVzdC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL3Rlc3RpbmcvZG9tX3Rlc3RpbmcuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbV9wYXJzZXIvZG9tX3BhcnNlci5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tX3BhcnNlci9kb21fcGFyc2VyX3Rlc3QuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9lbmNvZGluZy9lbmNvZGluZ190ZXN0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9leHRlbnNpb24vZXh0ZW5zaW9uLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9oNXZjYy9oNXZjYy5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvaW5wdXQvaW5wdXQuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xheW91dC9sYXlvdXQuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xheW91dF90ZXN0cy9sYXlvdXRfdGVzdHMuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9pbWFnZS9zYW5kYm94L3NhbmRib3guZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9vcmlnaW4uZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21hdGgvbWF0aC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhL3NhbmRib3gvc2FuZGJveC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9jYXB0dXJlLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmVfdGVzdC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfc2Vzc2lvbi9tZWRpYV9zZXNzaW9uLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fdGVzdC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbS5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV90ZXN0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9uZXR3b3JrL25ldHdvcmsuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L292ZXJsYXlfaW5mby9vdmVybGF5X2luZm8uZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcl90cmVlL3JlbmRlcl90cmVlLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2JhY2tlbmQuZ3lwOmdyYXBoaWNzX3N5c3RlbV90ZXN0X2RlcGxveScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXIuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3NhbmRib3gvc2FuZGJveC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2FtcGxlcy9zaW1wbGVfZXhhbXBsZS9zaW1wbGVfZXhhbXBsZS5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L2VuZ2luZS5neXA6ZW5naW5lX3NoZWxsJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvc2NyaXB0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9zYW5kYm94Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc3BlZWNoLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zdG9yYWdlL3N0b3JhZ2UuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N0b3JhZ2Uvc3RvcmUvc3RvcmUuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93ZWJfYW5pbWF0aW9ucy93ZWJfYW5pbWF0aW9ucy5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlci5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlcl90ZXN0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93ZWJzb2NrZXQvd2Vic29ja2V0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93b3JrZXIvd29ya2VyLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC94aHIveGhyLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL2NyeXB0by9jcnlwdG8uZ3lwOmNyeXB0b191bml0dGVzdHNfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2xfdG9vbC5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwOnppcF91bml0dGVzdHNfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOm5ldF91bml0dGVzdHNfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9jd3JhcHBlcnMvY3dyYXBwZXJzX3Rlc3QuZ3lwOmN3cmFwcGVyc190ZXN0X2RlcGxveScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbl90ZXN0Lmd5cDpjb21tb25fdGVzdF9kZXBsb3knLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5neXA6ZWxmX2xvYWRlcl90ZXN0X2RlcGxveScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwLmd5cDpsb2FkZXJfYXBwX3Rlc3RzX2RlcGxveScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi9ucGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHMvbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzLmd5cDpucGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHNfZGVwbG95JywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gIT0gMScsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLm9wdGlvbmFsLmdldF9vcHRpb25hbF90ZXN0cyAtZyAtZCA8KERFUFRIKSknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL25iL25iX3Rlc3QuZ3lwOm5iX3Rlc3RfZGVwbG95JywKLSAgICAgICAgICAgICc8KERFUFRIKS9uYi9uYl90ZXN0Lmd5cDpyZXVzZV9hbGxvY2F0b3JfYmVuY2htYXJrJywKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkX2FsbC5neXA6c3RhcmJvYXJkX2FsbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZXZlcmdyZWVuPT0xJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L3VwZGF0ZXIvb25lX2FwcF9vbmx5X3NhbmRib3guZ3lwOionLAotICAgICAgICAgICAgJzwoREVQVEgpL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50Lmd5cDpjb2JhbHRfc2xvdF9tYW5hZ2VtZW50X3Rlc3RfZGVwbG95JywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9tdXNsL211c2wuZ3lwOm11c2xfdW5pdHRlc3RzJywKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9pbnN0YWxsYXRpb25fbWFuYWdlci5neXA6KicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZXZlcmdyZWVuX2NvbXBhdGlibGU9PTEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2hhbmRsZXIuZ3lwOmNyYXNocGFkX2hhbmRsZXInLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ09TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgIyBTdWJzZXQgb2YgdGFyZ2V0cyBmb3IgYSBwbGF0Zm9ybSB3aG9zZSBwb3J0IGlzIGluIHByb2dyZXNzLgotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdpbl9wcm9ncmVzc190YXJnZXRzJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2NvYmFsdC5neXA6Y29iYWx0JywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9idWlsZC9idWlsZF9pZC5weSBiL2NvYmFsdC9idWlsZC9idWlsZF9pZC5weQppbmRleCAwMDZlNjVjLi5hMmYyZWQzIDEwMDc1NQotLS0gYS9jb2JhbHQvYnVpbGQvYnVpbGRfaWQucHkKKysrIGIvY29iYWx0L2J1aWxkL2J1aWxkX2lkLnB5CkBAIC0xMSw3ICsxMSw2IEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCiAiIiJHZW5lcmF0ZSBhIENvYmFsdCBidWlsZCBJRCBoZWFkZXIuIiIiCiAKIGltcG9ydCBkYXRldGltZQpAQCAtMzcsNyArMzYsNyBAQAogCiAgIEFyZ3M6CiAgICAgb3V0cHV0X3BhdGg6IExvY2F0aW9uIG9mIHRoZSBidWlsZCBpZCBoZWFkZXIgdG8gd3JpdGUuCi0gICAgdmVyc2lvbl9udW1iZXI6IEJ1aWxkIHZlcnNpb24gbnVtYmVyLCBnZW5lcmF0ZWQgd2hlbiBneXBfY29iYWx0IGlzIHJ1bi4KKyAgICB2ZXJzaW9uX251bWJlcjogQnVpbGQgdmVyc2lvbiBudW1iZXIsIGdlbmVyYXRlZCB3aGVuIGduIGdlbiBpcyBydW4uCiAgIFJldHVybnM6CiAgICAgMCBvbiBzdWNjZXNzLgogICAiIiIKQEAgLTQ4LDExICs0NywxMiBAQAogICBkYXRlX3JlcCA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wKS5zdHJmdGltZSgnJWMnKQogCiAgIHdpdGggb3BlbihvdXRwdXRfcGF0aCwgJ3cnKSBhcyBmOgotICAgIGYud3JpdGUodGVtcGxhdGUuZm9ybWF0KAotICAgICAgICBkYXRlX3JlcD1kYXRlX3JlcCwKLSAgICAgICAgdGltZXN0YW1wPWludCh0aW1lc3RhbXApLAotICAgICAgICB2ZXJzaW9uX251bWJlcj12ZXJzaW9uX251bWJlciwKLSAgICAgICAgdXNlcm5hbWU9dXNlcm5hbWUpKQorICAgIGYud3JpdGUoCisgICAgICAgIHRlbXBsYXRlLmZvcm1hdCgKKyAgICAgICAgICAgIGRhdGVfcmVwPWRhdGVfcmVwLAorICAgICAgICAgICAgdGltZXN0YW1wPWludCh0aW1lc3RhbXApLAorICAgICAgICAgICAgdmVyc2lvbl9udW1iZXI9dmVyc2lvbl9udW1iZXIsCisgICAgICAgICAgICB1c2VybmFtZT11c2VybmFtZSkpCiAgIHJldHVybiAwCiAKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2J1aWxkX251bWJlci5weSBiL2NvYmFsdC9idWlsZC9idWlsZF9udW1iZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzMDdlMwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9idWlsZC9idWlsZF9udW1iZXIucHkKQEAgLTAsMCArMSwxMjMgQEAKKyMgQ29weXJpZ2h0IDIwMTIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVXRpbGl0aWVzIGZvciB1c2UgYnkgZ3lwX2NvYmFsdCBhbmQgb3RoZXIgYnVpbGQgdG9vbHMuIiIiCisKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBzaXgubW92ZXMgaW1wb3J0IHVybGxpYgorZnJvbSBjb2JhbHQudG9vbHMgaW1wb3J0IHBhdGhzCisKK19TVUJSRVBPX1BBVEhTID0gWydzdGFyYm9hcmQva2V5Ym94ZXMnXQorX1ZFUlNJT05fU0VSVkVSX1VSTCA9ICdodHRwczovL2NhcmJvbi1haXJsb2NrLTk1ODIzLmFwcHNwb3QuY29tL2J1aWxkX3ZlcnNpb24vZ2VuZXJhdGUnICAjIHB5bGludDpkaXNhYmxlPWxpbmUtdG9vLWxvbmcKK19YU1NJX1BSRUZJWCA9ICIpXX0nXG4iCisKKyMgVGhlIHBhdGggdG8gdGhlIGJ1aWxkLmlkIGZpbGUgdGhhdCBwcmVzZXJ2ZXMgYSBidWlsZCBJRC4KK0JVSUxEX0lEX1BBVEggPSBvcy5wYXRoLmpvaW4ocGF0aHMuQlVJTERfUk9PVCwgJ2J1aWxkLmlkJykKKworCitkZWYgQ2hlY2tSZXZJbmZvKGtleSwgY3dkPU5vbmUpOgorICBnaXRfZ2V0X3JlbW90ZV9hcmdzID0gWydnaXQnLCAnY29uZmlnJywgJy0tZ2V0JywgJ3JlbW90ZS5vcmlnaW4udXJsJ10KKyAgcmVtb3RlID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICBnaXRfZ2V0X3JlbW90ZV9hcmdzLCBjd2Q9Y3dkKS5zdHJpcCgpLmRlY29kZSgndXRmLTgnKQorCisgIGlmIHJlbW90ZS5lbmRzd2l0aCgnLmdpdCcpOgorICAgIHJlbW90ZSA9IHJlbW90ZVs6LWxlbignLmdpdCcpXQorCisgIGdpdF9nZXRfcmV2aXNpb25fYXJncyA9IFsnZ2l0JywgJ3Jldi1wYXJzZScsICdIRUFEJ10KKyAgcmV2aXNpb24gPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgIGdpdF9nZXRfcmV2aXNpb25fYXJncywgY3dkPWN3ZCkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKKyAgcmV0dXJuIHtrZXk6ICd7fUB7fScuZm9ybWF0KHJlbW90ZSwgcmV2aXNpb24pfQorCisKK2RlZiBHZXRSZXZpbmZvKCk6CisgICIiIkdldCBhYnNvbHV0ZSBzdGF0ZSBvZiBhbGwgZ2l0IHJlcG9zLiIiIgorICB0cnk6CisgICAgcmVwb19yb290ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydnaXQnLCAncmV2LXBhcnNlJywgJy0tc2hvdy10b3BsZXZlbCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKS5zdHJpcCgpLmRlY29kZSgndXRmLTgnKQorICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgbG9nZ2luZy5pbmZvKCdDb3VsZCBub3QgZ2V0IHJlcG8gcm9vdC4gVHJ5aW5nIGFnYWluIGluIHNyYy8nKQorICAgIHRyeToKKyAgICAgIHJlcG9fcm9vdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgIFsnZ2l0JywgJy1DJywgJ3NyYycsICdyZXYtcGFyc2UnLAorICAgICAgICAgICAnLS1zaG93LXRvcGxldmVsJ10pLnN0cmlwKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb246ICVzJywgZSkKKyAgICAgIHJldHVybiB7fQorCisgICMgRmlyc3QgbWFrZSBzdXJlIHdlIGNhbiBhZGQgdGhlIGNvYmFsdF9zcmMgcmVwby4KKyAgdHJ5OgorICAgIHJlcG9zID0gQ2hlY2tSZXZJbmZvKCcuJywgY3dkPXJlcG9fcm9vdCkKKyAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgbG9nZ2luZy53YXJuaW5nKCdGYWlsZWQgdG8gZ2V0IHJldmlzaW9uIGluZm9ybWF0aW9uOiAlcycsIGUpCisgICAgcmV0dXJuIHt9CisKKyAgZm9yIHJlbF9wYXRoIGluIF9TVUJSRVBPX1BBVEhTOgorICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocmVwb19yb290LCByZWxfcGF0aCkKKyAgICB0cnk6CisgICAgICByZXBvcy51cGRhdGUoQ2hlY2tSZXZJbmZvKHJlbF9wYXRoLCBjd2Q9cGF0aCkpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24gZm9yIHN1YnJlcG8gJXM6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICByZWxfcGF0aCwgZSkKKyAgICAgIGNvbnRpbnVlCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgIGxvZ2dpbmcuaW5mbygnJXMuIFN1YnJlcG9zaXRvcnkgJXMgbm90IGZvdW5kLicsIGUsIHJlbF9wYXRoKQorICAgICAgY29udGludWUKKworICByZXR1cm4gcmVwb3MKKworCisjIFdlIGxlYXZlIHRoaXMgZnVuY3Rpb24gaW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorIyBOZXcgY2FsbGVycyBzaG91bGQgdXNlIEdldE9yR2VuZXJhdGVOZXdCdWlsZE51bWJlci4KK2RlZiBHZXRCdWlsZE51bWJlcih2ZXJzaW9uX3NlcnZlcj1fVkVSU0lPTl9TRVJWRVJfVVJMKToKKyAgcmV0dXJuIEdldE9yR2VuZXJhdGVOZXdCdWlsZE51bWJlcih2ZXJzaW9uX3NlcnZlcikKKworCitkZWYgR2V0T3JHZW5lcmF0ZU5ld0J1aWxkTnVtYmVyKHZlcnNpb25fc2VydmVyPV9WRVJTSU9OX1NFUlZFUl9VUkwpOgorICAiIiJTZW5kIGEgcmVxdWVzdCB0byB0aGUgYnVpbGQgdmVyc2lvbiBzZXJ2ZXIgZm9yIGEgYnVpbGQgbnVtYmVyLiIiIgorCisgIGlmIG9zLnBhdGguaXNmaWxlKEJVSUxEX0lEX1BBVEgpOgorICAgIHdpdGggb3BlbihCVUlMRF9JRF9QQVRILCAncicpIGFzIGJ1aWxkX2lkX2ZpbGU6CisgICAgICBidWlsZF9udW1iZXIgPSBpbnQoYnVpbGRfaWRfZmlsZS5yZWFkKCkucmVwbGFjZSgnXG4nLCAnJykpCisgICAgICBsb2dnaW5nLmluZm8oJ1JldHJpZXZpbmcgYnVpbGQgbnVtYmVyIGZyb20gJXMnLCBCVUlMRF9JRF9QQVRIKQorICAgICAgcmV0dXJuIGJ1aWxkX251bWJlcgorCisgIHJldmluZm8gPSBHZXRSZXZpbmZvKCkKKyAganNvbl9kZXBzID0ganNvbi5kdW1wcyhyZXZpbmZvKQorICB1c2VybmFtZSA9IG9zLmVudmlyb24uZ2V0KCdVU0VSTkFNRScsIG9zLmVudmlyb24uZ2V0KCdVU0VSJykpCisKKyAgcG9zdF9kYXRhID0geydkZXBzJzoganNvbl9kZXBzfQorICBpZiB1c2VybmFtZToKKyAgICBwb3N0X2RhdGFbJ3VzZXInXSA9IHVzZXJuYW1lCisKKyAgbG9nZ2luZy5kZWJ1ZygnUG9zdCBkYXRhIGlzICVzJywgcG9zdF9kYXRhKQorICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh2ZXJzaW9uX3NlcnZlcikKKyAgIyBUT0RPOiByZXRyeSBvbiB0aW1lb3V0LgorICB0cnk6CisgICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCAgIyBweWxpbnQ6IGRpc2FibGU9Y29uc2lkZXItdXNpbmctd2l0aAorICAgICAgICByZXF1ZXN0LAorICAgICAgICBkYXRhPXVybGxpYi5wYXJzZS51cmxlbmNvZGUocG9zdF9kYXRhKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgZGF0YSA9IHJlc3BvbnNlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICBpZiBkYXRhLmZpbmQoX1hTU0lfUFJFRklYKSA9PSAwOgorICAgICAgZGF0YSA9IGRhdGFbbGVuKF9YU1NJX1BSRUZJWCk6XQorICAgIHJlc3VsdHMgPSBqc29uLmxvYWRzKGRhdGEpCisgICAgYnVpbGRfbnVtYmVyID0gcmVzdWx0cy5nZXQoJ2J1aWxkX251bWJlcicsIDApCisgICAgcmV0dXJuIGJ1aWxkX251bWJlcgorICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlOgorICAgIGxvZ2dpbmcud2FybmluZygnRmFpbGVkIHRvIHJldHJpZXZlIGJ1aWxkIG51bWJlcjogJXMnLCBlKQorICAgIHJldHVybiAwCisgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IgYXMgZToKKyAgICBsb2dnaW5nLndhcm5pbmcoJ0NvdWxkIG5vdCBjb25uZWN0IHRvICVzOiAlcycsIHZlcnNpb25fc2VydmVyLCBlKQorICAgIHJldHVybiAwCmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvY29iYWx0X2J1aWxkX2lkLmd5cCBiL2NvYmFsdC9idWlsZC9jb2JhbHRfYnVpbGRfaWQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2E5NmNjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9jb2JhbHRfYnVpbGRfaWQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29iYWx0X2J1aWxkX2lkJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgIyBCZWNhdXNlIHdlIGdlbmVyYXRlIGEgaGVhZGVyLCB3ZSBtdXN0IHNldCB0aGUgaGFyZF9kZXBlbmRlbmN5IGZsYWcuCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NvYmFsdF9idWlsZF9pZCcsCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdidWlsZF9pZF9weV9wYXRoJzogJ2J1aWxkX2lkLnB5JywKLSAgICAgICAgICAgICdvdXRwdXRfcGF0aCc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9jb2JhbHRfYnVpbGRfaWQuaCcsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwoYnVpbGRfaWRfcHlfcGF0aCknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChvdXRwdXRfcGF0aCknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KGJ1aWxkX2lkX3B5X3BhdGgpJywKLSAgICAgICAgICAgICc8KG91dHB1dF9wYXRoKScsCi0gICAgICAgICAgICAnPChjb2JhbHRfdmVyc2lvbiknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBidWlsZCBpbmZvcm1hdGlvbicsCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH0KLSAgXSAjIGVuZCBvZiB0YXJnZXRzCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24uZ3lwaSBiL2NvYmFsdC9idWlsZC9jb2JhbHRfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzVmNDk4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9jb2JhbHRfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNzA3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUsIFBMRUFTRSBSRU1FTUJFUiBUTyBVUERBVEUKLSMgLy9jb2JhbHQvYnVpbGQvY29uZmlnL2Jhc2UuZ25pIEFTIFdFTEwKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFRoaXMgY29udGFpbnMgdGhlIGRlZmF1bHRzIGFuZCBkb2N1bWVudGF0aW9uIGZvciBhbGwgQ29iYWx0LWRlZmluZWQgR1lQCi0jIHZhcmlhYmxlcy4gU3RhcmJvYXJkLWRlZmluZWQgdmFyaWFibGVzIGFyZSBzcGVjaWZpZWQgaW4KLSMgc3RhcmJvYXJkL2J1aWxkL2Jhc2VfY29uZmlndXJhdGlvbi5neXBpLgotIwotIyBzdGFyYm9hcmQvYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhpcyBmaWxlIGF1dG9tYXRpY2FsbHkgaW4gYWxsCi0jIC5neXAgZmlsZXMgcHJvY2Vzc2VkIGJ5IHN0YXJib2FyZC9idWlsZC9neXBfY29iYWx0LgotewotICAndmFyaWFibGVzJzogewotICAgICMgQ29iYWx0IHZhcmlhYmxlcy4KLQotICAgICMgV2UgbmVlZCB0byBkZWZpbmUgc29tZSB2YXJpYWJsZXMgaW5zaWRlIG9mIGFuIGlubmVyICd2YXJpYWJsZXMnIHNjb3BlCi0gICAgIyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgb3RoZXIgb3V0ZXIgdmFyaWFibGVzIGhlcmUuICBBbHNvLCBpdAotICAgICMgYWxsb3dzIGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBkZWZhdWx0IHZhbHVlcyB0aGF0IGdldCByZWZlcmVuY2VkIGJ5Ci0gICAgIyBhIHRvcCBsZXZlbCBzY29wZS4KLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ2NvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX3NvdXJjZV9pZGxfZmlsZXMlJzogW10sCi0gICAgICAnY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXMlJzogW10sCi0gICAgICAjIEluIGNyb3NzLWNvbXBpbGluZyBmb3IgbW9kdWxlcyBsaWtlIFY4LCB3ZSBuZWVkIGEgZ3lwIGZsYWcgdG8gdGVsbAotICAgICAgIyB0aGF0IENvYmFsdCBpcyBiZWluZyBjb21waWxlZCBieSBNU1ZDIGFuZCBjZXJ0YWluIE1TVkMgb3B0aW9ucyBzaG91bGQKLSAgICAgICMgYmUgc3BlY2lmaWVkLiBUaGlzIGlzIG5lZWRlZCBldmVuIHdpdGggJ21zdnNfc2V0dGluZ3MnIHNpbmNlIHRoZSBsYXRlcgotICAgICAgIyBpcyBub3QgdXNlZCBieSBwbGF0Zm9ybXMgdGhhdCBvbmx5IHVzZXMgTVNWQyBmb3IgaG9zdCBidWlsZC4KLSAgICAgICdjb2JhbHRfY29tcGlsZWRfYnlfbXN2YyUnOiAwLAotICAgICAgJ2hvc3RfZXhlY3V0YWJsZV9zdWZmaXglJzogJzwoRVhFQ1VUQUJMRV9TVUZGSVgpJywKLSAgICAgICdkaXNhYmxlX3Y4X3BvaW50ZXJfY29tcHJlc3Npb24lJzogMCwKLSAgICB9LAotICAgICdob3N0X2V4ZWN1dGFibGVfc3VmZml4JSc6ICc8KEVYRUNVVEFCTEVfU1VGRklYKScsCi0gICAgJ2Rpc2FibGVfdjhfcG9pbnRlcl9jb21wcmVzc2lvbiUnOiAwLAotCi0gICAgIyBXaGV0aGVyIENvYmFsdCBpcyBiZWluZyBidWlsdC4KLSAgICAnY29iYWx0JzogMSwKLQotICAgICMgQ29udGFpbnMgdGhlIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbi4KLSAgICAnY29iYWx0X2NvbmZpZyUnOiAnZ29sZCcsCi0gICAgJ2NvYmFsdF9mYXN0YnVpbGQlJzogMCwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRHcmFwaGljc0V4dGVuc2lvbkFwaSBmdW5jdGlvbgotICAgICMgSXNNYXBUb01lc2hFbmFibGVkIGluc3RlYWQuCi0gICAgIyBJZiB0aGUgQ29iYWx0R3JhcGhpY3NFeHRlbnNpb25BcGkgaXMgbm90IGltcGxlbWVudGVkLCB0aGVuIENvYmFsdCB3aWxsCi0gICAgIyBmYWxsIGJhY2sgb250byBhIGRlZmF1bHQuIEZvciBzdGFyYm9hcmQgQVBJIHZlcnNpb25zIDEyIGFuZCBsYXRlciwgdGhlCi0gICAgIyBkZWZhdWx0IGlzIHRydWUgKGkuZS4gQ29iYWx0IHdpbGwgYXNzdW1lIG1hcCB0byBtZXNoIGlzIHN1cHBvcnRlZCkuCi0gICAgIyBGb3IgZWFybGllciBzdGFyYm9hcmQgQVBJIHZlcnNpb25zLCBpZiB0aGlzIGd5cCB2YXJpYWJsZSBpcyByZWRlZmluZWQgdG8KLSAgICAjIGEgdmFsdWUgb3RoZXIgdGhhbiAtMSwgaXQgd2lsbCB1c2UgdGhlIG5ldyB2YWx1ZSBhcyB0aGUgZGVmYXVsdC4gSWYgaXQgaXMKLSAgICAjIG5vdCByZWRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIGZhbHNlLgotICAgICMgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBtYXAgdG8gbWVzaCBmaWx0ZXIsIHdoaWNoIGlzIHByaW1hcmlseSB1c2VkIHRvCi0gICAgIyBpbXBsZW1lbnQgc3BoZXJpY2FsIHZpZGVvIHBsYXliYWNrLgotICAgICdlbmFibGVfbWFwX3RvX21lc2glJzogLTEsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0VXNlck9uRXhpdFN0cmF0ZWd5IGluc3RlYWQuCi0gICAgIyBUaGlzIHZhcmlhYmxlIGRlZmluZXMgd2hhdCBDb2JhbHQncyBwcmVmZXJyZWQgc3RyYXRlZ3kgc2hvdWxkIGJlIGZvcgotICAgICMgaGFuZGxpbmcgaW50ZXJuYWxseSB0cmlnZ2VyZWQgYXBwbGljYXRpb24gZXhpdCByZXF1ZXN0cyAoZS5nLiB0aGUgdXNlcgotICAgICMgY2hvb3NlcyB0byBiYWNrIG91dCBvZiB0aGUgYXBwbGljYXRpb24pLgotICAgICMgICAnc3RvcCcgICAgLS0gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIFNiU3lzdGVtUmVxdWVzdFN0b3AoKSBvbiBleGl0LAotICAgICMgICAgICAgICAgICAgICAgcmVzdWx0aW5nIGluIGEgY29tcGxldGUgc2h1dGRvd24gb2YgdGhlIGFwcGxpY2F0aW9uLgotICAgICMgICAnc3VzcGVuZCcgLS0gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjYWxsIFNiU3lzdGVtUmVxdWVzdFN1c3BlbmQoKSBvbgotICAgICMgICAgICAgICAgICAgICAgZXhpdCwgcmVzdWx0aW5nIGluIHRoZSBhcHBsaWNhdGlvbiBiZWluZyAibWluaW1pemVkIi4KLSAgICAjICAgJ25vZXhpdCcgIC0tIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbmV2ZXIgYWxsb3cgdGhlIHVzZXIgdG8gdHJpZ2dlciBhbgotICAgICMgICAgICAgICAgICAgICAgZXhpdCwgdGhpcyB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIHN5c3RlbS4KLSAgICAnY29iYWx0X3VzZXJfb25fZXhpdF9zdHJhdGVneSUnOiAnJywKLQotICAgICMgQ29udGFpbnMgdGhlIGN1cnJlbnQgZm9udCBwYWNrYWdlIHNlbGVjdGlvbi4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gdHJhZGUKLSAgICAjIGZvbnQgcXVhbGl0eSwgY292ZXJhZ2UsIGFuZCBsYXRlbmN5IGZvciBkaWZmZXJlbnQgZm9udCBwYWNrYWdlIHNpemVzLgotICAgICMgVGhlIGZvbnQgcGFja2FnZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKLSAgICAjICAgJ3N0YW5kYXJkJyAtLSBUaGUgZGVmYXVsdCBwYWNrYWdlLiBJdCBpbmNsdWRlcyBhbGwgc2Fucy1zZXJpZiwgc2VyaWYsCi0gICAgIyAgICAgICAgICAgICAgICAgYW5kIEZDQyBmb250cywgbm9uLUNKSyBmYWxsYmFjayBmb250cyBpbiBib3RoICdub3JtYWwnIGFuZAotICAgICMgICAgICAgICAgICAgICAgICdib2xkJyB3ZWlnaHRzLCAnbm9ybWFsJyB3ZWlnaHQgQ0pLICgnYm9sZCcgd2VpZ2h0IENKSyBpcwotICAgICMgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVkIGZyb20gaXQpLCBoaXN0b3JpYyBzY3JpcHQgZm9udHMsIGFuZCBjb2xvcgotICAgICMgICAgICAgICAgICAgICAgIGVtb2ppcy4gVGhpcyBwYWNrYWdlIGlzIH4zOC4zTUIuCi0gICAgIyAgICdsaW1pdGVkJyAgLS0gQSBzaWduaWZpY2FudGx5IHNtYWxsZXIgcGFja2FnZSB0aGFuICdzdGFuZGFyZCcuIFRoaXMKLSAgICAjICAgICAgICAgICAgICAgICBwYWNrYWdlIHJlbW92ZXMgYWxsIGJ1dCAnbm9ybWFsJyBhbmQgJ2JvbGQnIHdlaWdodGVkCi0gICAgIyAgICAgICAgICAgICAgICAgc2Fucy1zZXJpZiBhbmQgc2VyaWYsIHJlbW92ZXMgdGhlIEZDQyBmb250cyAod2hpY2ggbXVzdCBiZQotICAgICMgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gb3IgZG93bmxvYWRlZCBmcm9tIHRoZSB3ZWIpLAotICAgICMgICAgICAgICAgICAgICAgIHJlcGxhY2VzIHN0YW5kYXJkIENKSyB3aXRoIGxvdyBxdWFsaXR5IENKSywgcmVtb3ZlcwotICAgICMgICAgICAgICAgICAgICAgIGhpc3RvcmljIHNjcmlwdCBmb250cywgYW5kIHJlcGxhY2VzIGNvbG9yZWQgZW1vamlzIHdpdGgKLSAgICAjICAgICAgICAgICAgICAgICB1bmNvbG9yZWQgb25lcy4gQmVjYXVzZSBsb3cgcXVhbGl0eSBDSksgY2Fubm90IHN5bnRoZXNpemUKLSAgICAjICAgICAgICAgICAgICAgICBib2xkLCBib2xkIGdseXBocyBhcmUgdW5hdmFpbGFibGUgaW4gQ2hpbmVzZSwgSmFwYW5lc2UgYW5kCi0gICAgIyAgICAgICAgICAgICAgICAgS29yZWFuLiBUaGlzIHBhY2thZ2UgaXMgfjguM01CLgotICAgICMgICAnbWluaW1hbCcgIC0tIFRoZSBzbWFsbGVzdCBwb3NzaWJsZSBmb250IHBhY2thZ2UuIEl0IG9ubHkgaW5jbHVkZXMKLSAgICAjICAgICAgICAgICAgICAgICBSb2JvdG8ncyBCYXNpYyBMYXRpbiBjaGFyYWN0ZXJzLiBFdmVyeXRoaW5nIGVsc2UgbXVzdCBiZQotICAgICMgICAgICAgICAgICAgICAgIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gb3IgZG93bmxvYWRlZCBmcm9tIHRoZSB3ZWIuIFRoaXMKLSAgICAjICAgICAgICAgICAgICAgICBwYWNrYWdlIGlzIH40MC4wS0IuCi0gICAgIyBOT1RFOiBXaGVuIGJvbGQgaXMgbmVlZGVkLCBidXQgdW5hdmFpbGFibGUsIGl0IGlzIHR5cGljYWxseSBzeW50aGVzaXplZCwKLSAgICAjICAgICAgIHJlc3VsdGluZyBpbiBsb3dlciBxdWFsaXR5IGdseXBocyB0aGFuIHRob3NlIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tCi0gICAgIyAgICAgICBhIGJvbGQgZm9udC4gSG93ZXZlciwgdGhpcyBkb2VzIG5vdCBvY2N1ciB3aXRoIGxvdyBxdWFsaXR5IENKSywKLSAgICAjICAgICAgIHdoaWNoIGlzIG5vdCBoaWdoIGVub3VnaCBxdWFsaXR5IHRvIHN5bnRoZXNpemUuIEl0cyBnbHlwaHMgYWx3YXlzCi0gICAgIyAgICAgICBoYXZlIGEgJ25vcm1hbCcgd2VpZ2h0LgotICAgICdjb2JhbHRfZm9udF9wYWNrYWdlJSc6ICdzdGFuZGFyZCcsCi0KLSAgICAjIEZvbnQgcGFja2FnZSBvdmVycmlkZXMgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoaW4gdGhlCi0gICAgIyBzZWxlY3RlZCBwYWNrYWdlLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgYXZhaWxhYmxlOgotICAgICMgICAtMSAtLSBUaGUgcGFja2FnZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBjYXRlZ29yeSBpcyBub3Qgb3ZlcnJpZGRlbi4KLSAgICAjICAgIDAgLS0gVGhlIHBhY2thZ2UgdmFsdWUgaXMgb3ZlcnJpZGRlbiBhbmQgbm8gZm9udHMgZm9yIHRoZSBzcGVjaWZpZWQKLSAgICAjICAgICAgICAgY2F0ZWdvcnkgYXJlIGluY2x1ZGVkLgotICAgICMgICAgMSAtLSBUaGUgcGFja2FnZSB2YWx1ZSBpcyBvdmVycmlkZGVuIGFuZCBmb250cyBmcm9tIHRoZSBzcGVjaWZpZWQKLSAgICAjICAgICAgICAgY2F0ZWdvcnkgd2l0aCBhIHdlaWdodCBvZiAnbm9ybWFsJyBhbmQgYSBzdHlsZSBvZiAnbm9ybWFsJyBhcmUKLSAgICAjICAgICAgICAgaW5jbHVkZWQuCi0gICAgIyAgICAyIC0tIFRoZSBwYWNrYWdlIHZhbHVlIGlzIG92ZXJyaWRkZW4gYW5kIGZvbnRzIGZyb20gdGhlIHNwZWNpZmllZAotICAgICMgICAgICAgICBjYXRlZ29yeSB3aXRoIGEgd2VpZ2h0IG9mIGVpdGhlciAnbm9ybWFsJyBvciBib2xkJyBhbmQgYSBzdHlsZSBvZgotICAgICMgICAgICAgICAnbm9ybWFsJyBhcmUgaW5jbHVkZWQuCi0gICAgIyAgICAzIC0tIFRoZSBwYWNrYWdlIHZhbHVlIGlzIG92ZXJyaWRkZW4gYW5kIGZvbnRzIGZyb20gdGhlIHNwZWNpZmllZAotICAgICMgICAgICAgICBjYXRlZ29yeSB3aXRoIGEgd2VpZ2h0IG9mIGVpdGhlciAnbm9ybWFsJyBvciAnYm9sZCcgYW5kIGEgc3R5bGUgb2YKLSAgICAjICAgICAgICAgZWl0aGVyICdub3JtYWwnIG9yICdpdGFsaWMnIGFyZSBpbmNsdWRlZC4KLSAgICAjICAgIDQgLS0gVGhlIHBhY2thZ2UgdmFsdWUgaXMgb3ZlcnJpZGRlbiBhbmQgYWxsIGF2YWlsYWJsZSBmb250cyBmcm9tIHRoZQotICAgICMgICAgICAgICBzcGVjaWZpZWQgY2F0ZWdvcnkgYXJlIGluY2x1ZGVkLiBUaGlzIG1heSBpbmNsdWRlIGFkZGl0aW9uYWwKLSAgICAjICAgICAgICAgd2VpZ2h0cyBiZXlvbmQgJ25vcm1hbCcgYW5kICdib2xkJy4KLSAgICAjIFNlZSBjb250ZW50L2ZvbnRzL1JFQURNRS5tZCBmb3IgZGV0YWlscyBvbiB0aGUgc3BlY2lmaWMgdmFsdWVzIHVzZWQgYnkKLSAgICAjIGVhY2ggb2YgdGhlIHBhY2thZ2VzIHVzZSBmb3IgdGhlIHZhcmlvdXMgZm9udCBjYXRlZ29yaWVzLgotICAgICdjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX25hbWVkX3NhbnNfc2VyaWYlJzogLTEsCi0gICAgJ2NvYmFsdF9mb250X3BhY2thZ2Vfb3ZlcnJpZGVfbmFtZWRfc2VyaWYlJzogLTEsCi0gICAgJ2NvYmFsdF9mb250X3BhY2thZ2Vfb3ZlcnJpZGVfbmFtZWRfZmNjX2ZvbnRzJSc6IC0xLAotICAgICdjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2xhbmdfbm9uX2NqayUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19sYW5nX2NqayUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19sYW5nX2Nqa19sb3dfcXVhbGl0eSUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19oaXN0b3JpYyUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19jb2xvcl9lbW9qaSUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19lbW9qaSUnOiAtMSwKLSAgICAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19zeW1ib2xzJSc6IC0xLAotCi0gICAgIyBCdWlsZCB2ZXJzaW9uIG51bWJlci4KLSAgICAnY29iYWx0X3ZlcnNpb24lJzogJzwoQlVJTERfTlVNQkVSKScsCi0KLSAgICAnY29iYWx0X2xpY2Vuc2VzX3BsYXRmb3JtJSc6ICdkZWZhdWx0JywKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRSYXN0ZXJpemVyVHlwZSBpbnN0ZWFkLgotICAgICMgRGVmaW5lcyB3aGF0IGtpbmQgb2YgcmFzdGVyaXplciB3aWxsIGJlIHVzZWQuICBUaGlzIGNhbiBiZSBhZGp1c3RlZCB0bwotICAgICMgZm9yY2UgYSBzdHViIGdyYXBoaWNzIGltcGxlbWVudGF0aW9uLgotICAgICMgSXQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6Ci0gICAgIyAgICdkaXJlY3QtZ2xlcycgLS0gVXNlcyBhIGxpZ2h0IHdyYXBwZXIgb3ZlciBPcGVuR0wgRVMgdG8gaGFuZGxlIG1vc3QKLSAgICAjICAgICAgICAgICAgICAgICAgICBkcmF3IGVsZW1lbnRzLiBUaGlzIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBza2lhIGhhcmR3YXJlCi0gICAgIyAgICAgICAgICAgICAgICAgICAgcmFzdGVyaXplciBmb3Igc29tZSByZW5kZXIgdHJlZSBub2RlIHR5cGVzLCBidXQgaXMKLSAgICAjICAgICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgZmFzdGVyIG9uIHRoZSBDUFUgYW5kIEdQVS4gVGhpcyBjYW4gaGFuZGxlCi0gICAgIyAgICAgICAgICAgICAgICAgICAgMzYwIHJlbmRlcmluZy4KLSAgICAjICAgJ2hhcmR3YXJlJyAgICAtLSBBcyBtdWNoIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBncmFwaGljcyBjb21tYW5kcyBhcwotICAgICMgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlLiBUaGlzIHVzZXMgc2tpYSB0byB3cmFwIE9wZW5HTCBFUyBjb21tYW5kcy4KLSAgICAjICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCBmb3IgMzYwIHJlbmRlcmluZy4KLSAgICAjICAgJ3N0dWInICAgICAgICAtLSBTdHViIGdyYXBoaWNzIHJhc3Rlcml6YXRpb24uICBBIHJhc3Rlcml6ZXIgb2JqZWN0IHdpbGwKLSAgICAjICAgICAgICAgICAgICAgICAgICBzdGlsbCBiZSBhdmFpbGFibGUgYW5kIHZhbGlkLCBidXQgaXQgd2lsbCBkbyBub3RoaW5nLgotICAgICdyYXN0ZXJpemVyX3R5cGUlJzogJycsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0UmVuZGVyRGlydHlSZWdpb25Pbmx5IGluc3RlYWQuCi0gICAgIyBJZiBzZXQgdG8gMSwgd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgcmVuZGVyaW5nIG9ubHkgdGhlIHJlZ2lvbnMgb2YgdGhlCi0gICAgIyBkaXNwbGF5IHRoYXQgYXJlIG1vZGlmaWVkIGR1ZSB0byBhbmltYXRpb25zLCBpbnN0ZWFkIG9mIHJlLXJlbmRlcmluZyB0aGUKLSAgICAjIGVudGlyZSBzY2VuZSBlYWNoIGZyYW1lLiAgVGhpcyBmZWF0dXJlIGNhbiByZWR1Y2Ugc3RhcnR1cCB0aW1lIHdoZXJlCi0gICAgIyB1c3VhbGx5IHRoZXJlIGlzIGEgc21hbGwgbG9hZGluZyBzcGlubmVyIGFuaW1hdGluZyBvbiB0aGUgc2NyZWVuLiAgT24gR0xFUwotICAgICMgcmVuZGVyZXJzLCBDb2JhbHQgd2lsbCBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGlzIHN1cHBvcnQgYnkgdXNpbmcKLSAgICAjIGVnbFN1cmZhY2VBdHRyaWIoLi4uLCBFR0xfU1dBUF9CRUhBVklPUiwgRUdMX0JVRkZFUl9QUkVTRVJWRUQpLCBvdGhlcndpc2UKLSAgICAjIHRoZSBkaXJ0eSByZWdpb24gd2lsbCBiZSBzaWxlbnRseSBkaXNhYmxlZC4gTm90ZSB0aGF0IHNvbWUgR0xFUyBkcml2ZXIKLSAgICAjIGltcGxlbWVudGF0aW9ucyBtYXkgaW50ZXJuYWxseSBhbGxvY2F0ZSBhbiBleHRyYSBmdWxsIHNjcmVlbiBzdXJmYWNlIHRvCi0gICAgIyBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgYW5kIG1hbnkgaGF2ZSBiZWVuIG5vdGljZWQgdG8gbm90IHByb3Blcmx5IHN1cHBvcnQKLSAgICAjIHRoaXMgZnVuY3Rpb25hbGl0eSAoYnV0IHRoZXkgcmVwb3J0IHRoYXQgdGhleSBkbyksIGFuZCBmb3IgdGhlc2UgcmVhc29ucwotICAgICMgdGhpcyB2YWx1ZSBpcyBkZWZhdWx0ZWQgdG8gMC4KLSAgICAncmVuZGVyX2RpcnR5X3JlZ2lvbl9vbmx5JSc6IC0xLAotCi0gICAgIyBPdmVycmlkZSB0aGlzIHZhbHVlIHRvIGFkanVzdCB0aGUgZGVmYXVsdCByYXN0ZXJpemVyIHNldHRpbmcgZm9yIHlvdXIKLSAgICAjIHBsYXRmb3JtLgotICAgICdkZWZhdWx0X3JlbmRlcmVyX29wdGlvbnNfZGVwZW5kZW5jeSUnOiAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL2RlZmF1bHRfb3B0aW9uc19zdGFyYm9hcmQuZ3lwOmRlZmF1bHRfb3B0aW9ucycsCi0KLSAgICAjIE5PVEU6IFdlYiBFeHRlbnNpb24gc3VwcG9ydCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFBsYXRmb3JtIFNlcnZpY2VzCi0gICAgIyAoY29iYWx0L2RvYy9wbGF0Zm9ybV9zZXJ2aWNlcy5tZCkgaW5zdGVhZC4KLSAgICAjCi0gICAgIyBPdmVycmlkZSB0aGlzIHRvIGluamVjdCBhIGN1c3RvbSBpbnRlcmZhY2UgaW50byBDb2JhbHQncyBKYXZhU2NyaXB0Ci0gICAgIyBgd2luZG93YCBnbG9iYWwgb2JqZWN0LiAgVGhpcyBpbXBsaWVzIHRoYXQgeW91IHdpbGwgaGF2ZSB0byBwcm92aWRlIHlvdXIKLSAgICAjIG93biBJREwgZmlsZXMgdG8gZGVzY3JpYmUgdGhhdCBpbnRlcmZhY2UgYW5kIGFsbCBpbnRlcmZhY2VzIHRoYXQgaXQKLSAgICAjIHJlZmVyZW5jZXMuICBTZWUgY29iYWx0L2RvYy93ZWJhcGlfZXh0ZW5zaW9uLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzJSc6IFsKLSAgICAgICc8QChjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzKScsCi0gICAgXSwKLSAgICAjIE92ZXJyaWRlIHRoaXMgdG8gaGF2ZSBDb2JhbHQgYnVpbGQgSURMIGZpbGVzIHRoYXQgcmVzdWx0IGluIGdlbmVyYXRlZAotICAgICMgaGVhZGVyIGZpbGVzIHRoYXQgbWF5IG5lZWQgdG8gYmUgaW5jbHVkZWQgZnJvbSBvdGhlciBDKysgc291cmNlIGZpbGVzLgotICAgICMgVGhpcyBpbmNsdWRlcywgZm9yIGV4YW1wbGUsIElETCBlbnVtZXJhdGlvbnMuICBTZWUKLSAgICAjIGNvYmFsdC9kb2Mvd2ViYXBpX2V4dGVuc2lvbi5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAnY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ2VuZXJhdGVkX2hlYWRlcl9pZGxfZmlsZXMlJzogWwotICAgICAgJzxAKGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzKScsCi0gICAgXSwKLQotICAgICMgVGhpcyBneXAgdGFyZ2V0IG11c3QgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbgotICAgICMgPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvaWRsX2V4dGVuc2lvbnMuaC4gIFNlZQotICAgICMgY29iYWx0L2RvYy93ZWJhcGlfZXh0ZW5zaW9uLm1kIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9neXBfdGFyZ2V0JSc6Ci0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9udWxsX3dlYmFwaV9leHRlbnNpb24uZ3lwOm51bGxfd2ViYXBpX2V4dGVuc2lvbicsCi0KLSAgICAjIEFsbG93IHRocm90dGxpbmcgb2YgdGhlIGZyYW1lIHJhdGUuIFRoaXMgaXMgZXhwcmVzc2VkIGluIHRlcm1zIG9mCi0gICAgIyBtaWxsaXNlY29uZHMgYW5kIGNhbiBiZSBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4gS2VlcCBpbiBtaW5kIHRoYXQKLSAgICAjIHN3YXBwaW5nIGZyYW1lcyBtYXkgdGFrZSBzb21lIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyB0aW1lLCBzbyBpdCBtYXkgYmUKLSAgICAjIGJldHRlciB0byBzcGVjaWZ5IGEgbG93ZXIgZGVsYXkuIEZvciBleGFtcGxlLCAnMzMnIGluc3RlYWQgb2YgJzMzLjMzJwotICAgICMgZm9yIDMwIEh6IHJlZnJlc2guIFRoaXMgdmFsdWUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgdXNhZ2Ugb2YKLSAgICAjIENvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpOjpHZXRNaW5pbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzIEFQSS4KLSAgICAjIFRoZSBkZWZhdWx0IHZhbHVlIGhhcyBiZWVuIG1vdmVkIGludG8gY29iYWx0L3JlbmRlcmVyL3BpcGVsaW5lLmNjLgotICAgICdjb2JhbHRfbWluaW11bV9mcmFtZV90aW1lX2luX21pbGxpc2Vjb25kcyUnOiAnLTEnLAotCi0gICAgIyBEZXByZWNhdGVkLiBJbXBsZW1lbnQgdGhlIENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGkgZnVuY3Rpb24KLSAgICAjIENvYmFsdEVnbFN3YXBJbnRlcnZhbCBpbnN0ZWFkLgotICAgICMgQ29iYWx0IHdpbGwgY2FsbCBlZ2xTd2FwSW50ZXJ2YWwoKSBhbmQgc3BlY2lmeSB0aGlzIHZhbHVlIGJlZm9yZSBjYWxsaW5nCi0gICAgIyBlZ2xTd2FwQnVmZmVycygpIGVhY2ggZnJhbWUuCi0gICAgJ2NvYmFsdF9lZ2xfc3dhcF9pbnRlcnZhbCUnOiAtMSwKLQotICAgICMgU2V0IHRvIDEgdG8gYnVpbGQgd2l0aCBESUFMIHN1cHBvcnQuCi0gICAgJ2luX2FwcF9kaWFsJSc6IDAsCi0KLSAgICAjIFNldCB0byAxIHRvIGVuYWJsZSBINXZjY0FjY291bnRNYW5hZ2VyLgotICAgICdlbmFibGVfYWNjb3VudF9tYW5hZ2VyJSc6IDAsCi0KLSAgICAjIFNldCB0byAxIHRvIGVuYWJsZSBINXZjY0NyYXNoTG9nLgotICAgICdlbmFibGVfY3Jhc2hfbG9nJSc6IDEsCi0KLSAgICAjIFNldCB0byAxIHRvIGVuYWJsZSBINXZjY1NTTyAoU2luZ2xlIFNpZ24gT24pLgotICAgICdlbmFibGVfc3NvJSc6IDAsCi0KLSAgICAjIFNldCB0byAxIHRvIGVuYWJsZSBmaWx0ZXJpbmcgb2YgSFRUUCBoZWFkZXJzIGJlZm9yZSBzZW5kaW5nLgotICAgICdlbmFibGVfeGhyX2hlYWRlcl9maWx0ZXJpbmclJzogMCwKLQotICAgICMgU2V0IHRvIDEgdG8gZW5hYmxlIHNldHRpbmcgSW50ZXJjZXB0b3JzIG9uIHRoZSBVUkxSZXF1ZXN0Sm9iRmFjdG9yeQotICAgICdlbmFibGVfY29uZmlndXJlX3JlcXVlc3Rfam9iX2ZhY3RvcnklJzogMCwKLQotICAgICMgTGlzdCBvZiBwbGF0Zm9ybS1zcGVjaWZpYyB0YXJnZXRzIHRoYXQgZ2V0IGNvbXBpbGVkIGludG8gY29iYWx0LgotICAgICdjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzJSc6IFtdLAotCi0gICAgIyBEZXByZWNhdGVkLiBJbXBsZW1lbnQgdGhlIENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGkgZnVuY3Rpb24KLSAgICAjIENvYmFsdEZhbGxiYWNrU3BsYXNoU2NyZWVuVXJsIGluc3RlYWQuCi0gICAgIyBUaGUgVVJMIG9mIGRlZmF1bHQgYnVpbGQgdGltZSBzcGxhc2ggc2NyZWVuIC0gc2VlCi0gICAgIyAgIGNvYmFsdC9kb2Mvc3BsYXNoX3NjcmVlbi5tZCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcy4KLSAgICAnZmFsbGJhY2tfc3BsYXNoX3NjcmVlbl91cmwlJzogJycsCi0gICAgIyBUaGUgcGF0aCB0byBhIHNwbGFzaCBzY3JlZW4gdG8gY29weSBpbnRvIGNvbnRlbnQvZGF0YS93ZWIgd2hpY2ggY2FuIGJlCi0gICAgIyBhY2Nlc3NlZCB2aWEgYSBmaWxlIFVSTCBzdGFydGluZyB3aXRoCi0gICAgIyAiZmlsZTovLy9jb2JhbHQvYnJvd3Nlci9zcGxhc2hfc2NyZWVuLyIuIElmICcnLCBubyBmaWxlIGlzIGNvcGllZC4KLSAgICAnY29iYWx0X3NwbGFzaF9zY3JlZW5fZmlsZSUnOiAnJywKLQotICAgICMgU29tZSBjb21waWxlciBjYW4gbm90IGNvbXBpbGUgd2l0aCByYXcgYXNzZW1ibHkoLlMgZmlsZXMpIGFuZCB2OAotICAgICMgY29udmVydHMgYXNtIHRvIGlubGluZSBhc3NlbWJseSBmb3IgdGhlc2UgcGxhdGZvcm1zLgotICAgICdjb2JhbHRfdjhfZW1pdF9idWlsdGluc19hc19pbmxpbmVfYXNtJSc6IDAsCi0gICAgJ2NvYmFsdF9jb21waWxlZF9ieV9tc3ZjJSc6IDAsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0RW5hYmxlUXVpYyBpbnN0ZWFkLgotICAgICdjb2JhbHRfZW5hYmxlX3F1aWMlJzogLTEsCi0KLSAgICAjIENhY2hlIHBhcmFtZXRlcnMKLSAgICAjIERlcHJlY2F0ZWQuIFRoZXNlIGNhbiBub3cgYmUgY29uZmlndXJlZCBieSBpbXBsZW1lbnRpbmcKLSAgICAjIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGluIHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpLgotCi0gICAgIyBUaGUgZm9sbG93aW5nIHNldCBvZiBwYXJhbWV0ZXJzIGRlZmluZSBob3cgbXVjaCBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yCi0gICAgIyBkaWZmZXJlbnQgQ29iYWx0IGNhY2hlcy4gIFRoZXNlIGNhY2hlcyBhZmZlY3QgQ1BVICphbmQqIEdQVSBtZW1vcnkgdXNhZ2UuCi0gICAgIwotICAgICMgVGhlIHN1bSBvZiB0aGUgZm9sbG93aW5nIGNhY2hlcyBlZmZlY3RpdmVseSBkZXNjcmliZXMgdGhlIG1heGltdW0gR1BVCi0gICAgIyB0ZXh0dXJlIG1lbW9yeSB1c2FnZSAodGhvdWdoIGl0IGRvZXNuJ3QgY29uc2lkZXIgdmlkZW8gdGV4dHVyZXMgYW5kCi0gICAgIyBkaXNwbGF5IGNvbG9yIGJ1ZmZlcnMpOgotICAgICMgICAtIHNraWFfY2FjaGVfc2l6ZV9pbl9ieXRlcyAoR0xFUzIgcmFzdGVyaXplciBvbmx5KQotICAgICMgICAtIGltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMKLSAgICAjICAgLSBza2lhX2dseXBoX2F0bGFzX3dpZHRoICogc2tpYV9nbHlwaF9hdGxhc19oZWlnaHQKLSAgICAjCi0gICAgIyBUaGUgb3RoZXIgY2FjaGVzIGFmZmVjdCBDUFUgbWVtb3J5IHVzYWdlLgotCi0gICAgIyBEZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGUgc2tpYSBjYWNoZS4gIFRoZSBTa2lhIGNhY2hlIGlzIG1haW50YWluZWQKLSAgICAjIHdpdGhpbiBTa2lhIGFuZCBpcyB1c2VkIHRvIGNhY2hlIHRoZSByZXN1bHRzIG9mIGNvbXBsaWNhdGVkIGVmZmVjdHMgc3VjaAotICAgICMgYXMgc2hhZG93cywgc28gdGhhdCBTa2lhIGRyYXcgY2FsbHMgdGhhdCBhcmUgdXNlZCByZXBlYXRlZGx5IGFjcm9zcwotICAgICMgZnJhbWVzIGNhbiBiZSBjYWNoZWQgaW50byBzdXJmYWNlcy4gIFRoaXMgc2V0dGluZyBpcyBvbmx5IHJlbGV2YW50IHdoZW4KLSAgICAjIHVzaW5nIHRoZSBoYXJkd2FyZS1hY2NlbGVyYXRlZCBTa2lhIHJhc3Rlcml6ZXIuCi0gICAgJ3NraWFfY2FjaGVfc2l6ZV9pbl9ieXRlcyUnOiAtMSwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRPZmZzY3JlZW5UYXJnZXRDYWNoZVNpemVJbkJ5dGVzIGluc3RlYWQuCi0gICAgIyBEZXRlcm1pbmVzIHRoZSBhbW91bnQgb2YgR1BVIG1lbW9yeSB0aGUgb2Zmc2NyZWVuIHRhcmdldCBhdGxhc2VzIHdpbGwKLSAgICAjIHVzZS4gVGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgZGlyZWN0LUdMRVMgcmFzdGVyaXplciBhbmQgY2FjaGVzIGFueSByZW5kZXIKLSAgICAjIHRyZWUgbm9kZXMgd2hpY2ggcmVxdWlyZSBza2lhIGZvciByZW5kZXJpbmcuIFR3byBhdGxhc2VzIHdpbGwgYmUgYWxsb2NhdGVkCi0gICAgIyBmcm9tIHRoaXMgbWVtb3J5IG9yIG11bHRpcGxlIGF0bGFzZXMgb2YgdGhlIGZyYW1lIHNpemUgaWYgdGhlIGxpbWl0Ci0gICAgIyBhbGxvd3MuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgZW5vdWdoIG1lbW9yeSBiZSByZXNlcnZlZCBmb3IgdHdvIFJHQkEKLSAgICAjIGF0bGFzZXMgYWJvdXQgYSBxdWFydGVyIG9mIHRoZSBmcmFtZSBzaXplLgotICAgICdvZmZzY3JlZW5fdGFyZ2V0X2NhY2hlX3NpemVfaW5fYnl0ZXMlJzogLTEsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0RW5jb2RlZEltYWdlQ2FjaGVTaXplSW5CeXRlcyBpbnN0ZWFkLgotICAgICMgRGV0ZXJtaW5lcyB0aGUgY2FwYWNpdHkgb2YgdGhlIGVuY29kZWQgaW1hZ2UgY2FjaGUsIHdoaWNoIG1hbmFnZXMgZW5jb2RlZAotICAgICMgaW1hZ2VzIGRvd25sb2FkZWQgZnJvbSBhIHdlYiBwYWdlLiBUaGVzZSBpbWFnZXMgYXJlIGNhY2hlZCB3aXRoaW4gQ1BVCi0gICAgIyBtZW1vcnkuICBUaGlzIG5vdCBvbmx5IHJlZHVjZXMgbmV0d29yayB0cmFmZmljIHRvIGRvd25sb2FkIHRoZSBlbmNvZGVkCi0gICAgIyBpbWFnZXMsIGJ1dCBhbHNvIGFsbG93cyB0aGUgZG93bmxvYWRlZCBpbWFnZXMgdG8gYmUgaGVsZCBkdXJpbmcgc3VzcGVuZC4KLSAgICAjIE5vdGUgdGhhdCB0aGVyZSBpcyBhbHNvIGEgY2FjaGUgZm9yIHRoZSBkZWNvZGVkIGltYWdlcyB3aG9zZSBjYXBhY2l0eSBpcwotICAgICMgc3BlY2lmaWVkIGluIHxpbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzfC4gIFRoZSBkZWNvZGVkIGltYWdlcyBhcmUgb2Z0ZW4KLSAgICAjIGNhY2hlZCBpbiB0aGUgR1BVIG1lbW9yeSBhbmQgd2lsbCBiZSByZWxlYXNlZCBkdXJpbmcgc3VzcGVuZC4KLSAgICAjCi0gICAgIyBJZiBhIHN5c3RlbSBtZWV0IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgotICAgICMgMS4gSGFzIGEgZmFzdCBpbWFnZSBkZWNvZGVyLgotICAgICMgMi4gSGFzIGVub3VnaCBDUFUgbWVtb3J5LCBvciBoYXMgYSB1bmlmaWVkIG1lbW9yeSBhcmNoaXRlY3R1cmUgdGhhdCBhbGxvd3MKLSAgICAjICAgIHNoYXJpbmcgb2YgQ1BVIGFuZCBHUFUgbWVtb3J5LgotICAgICMgVGhlbiBpdCBtYXkgY29uc2lkZXIgdG8gc2V0IHxlbmNvZGVkX2ltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXN8IHRvIGEgbXVjaAotICAgICMgYmlnZ2VyIHZhbHVlLCBhbmQgc2V0IHRoZSB2YWx1ZSBvZiB8aW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc3wgdG8gYSBtdWNoCi0gICAgIyBzbWFsbGVyIHZhbHVlLiBUaGlzIGFsbG93cyB0aGUgYXBwIHRvIGNhY2hlIHNpZ25pZmljYW50IG1vcmUgaW1hZ2VzLgotICAgICMKLSAgICAjIFNldCB0aGlzIHRvIDAgY2FuIGRpc2FibGUgdGhlIGNhY2hlIGNvbXBsZXRlbHkuCi0gICAgJ2VuY29kZWRfaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcyUnOiAtMSwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRJbWFnZUNhY2hlU2l6ZUluQnl0ZXMgaW5zdGVhZC4KLSAgICAjIERldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBpbWFnZSBjYWNoZSwgd2hpY2ggbWFuYWdlcyBpbWFnZSBzdXJmYWNlcwotICAgICMgZG93bmxvYWRlZCBmcm9tIGEgd2ViIHBhZ2UuICBXaGlsZSBpdCBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybSwgb2Z0ZW4gKGFuZAotICAgICMgaWRlYWxseSkgdGhlc2UgaW1hZ2VzIGFyZSBjYWNoZWQgd2l0aGluIEdQVSBtZW1vcnkuCi0gICAgIyBTZXQgdG8gLTEgdG8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgdGhlIHZhbHVlIGF0IHJ1bnRpbWUsIGJhc2VkIG9uCi0gICAgIyBmZWF0dXJlcyBsaWtlIHdpbmRvd3MgZGltZW5zaW9ucyBhbmQgdGhlIHZhbHVlIG9mCi0gICAgIyBTYlN5c3RlbUdldFRvdGFsR1BVTWVtb3J5KCkuCi0gICAgJ2ltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMlJzogLTEsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0TG9jYWxUeXBlRmFjZUNhY2hlU2l6ZUluQnl0ZXMgaW5zdGVhZC4KLSAgICAjIERldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBsb2NhbCBmb250IGNhY2hlLCB3aGljaCBtYW5hZ2VzIGFsbCBmb250cwotICAgICMgbG9hZGVkIGZyb20gbG9jYWwgZmlsZXMuIE5ld2x5IGVuY291bnRlcmVkIHNlY3Rpb25zIG9mIGZvbnQgZmlsZXMgYXJlCi0gICAgIyBsYXppbHkgbG9hZGVkIGludG8gdGhlIGNhY2hlLCBlbmFibGluZyBzdWJzZXF1ZW50IHJlcXVlc3RzIHRvIHRoZSBzYW1lCi0gICAgIyBmaWxlIHNlY3Rpb25zIHRvIGJlIGhhbmRsZWQgdmlhIGRpcmVjdCBtZW1vcnkgYWNjZXNzLiBPbmNlIHRoZSBsaW1pdCBpcwotICAgICMgcmVhY2hlZCwgZnVydGhlciByZXF1ZXN0cyBhcmUgaGFuZGxlZCB2aWEgZmlsZSBzdHJlYW0uCi0gICAgIyBTZXR0aW5nIHRoZSB2YWx1ZSB0byAwIGRpc2FibGVzIG1lbW9yeSBjYWNoaW5nIGFuZCBjYXVzZXMgYWxsIGZvbnQgZmlsZQotICAgICMgYWNjZXNzZXMgdG8gYmUgZG9uZSB1c2luZyBmaWxlIHN0cmVhbXMuCi0gICAgJ2xvY2FsX2ZvbnRfY2FjaGVfc2l6ZV9pbl9ieXRlcyUnOiAtMSwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRSZW1vdGVUeXBlZmFjZUNhY2hlU2l6ZUluQnl0ZXMgaW5zdGVhZC4KLSAgICAjIERldGVybWluZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSByZW1vdGUgZm9udCBjYWNoZSwgd2hpY2ggbWFuYWdlcyBhbGwKLSAgICAjIGZvbnRzIGRvd25sb2FkZWQgZnJvbSBhIHdlYiBwYWdlLgotICAgICdyZW1vdGVfZm9udF9jYWNoZV9zaXplX2luX2J5dGVzJSc6IC0xLAotCi0gICAgIyBEZXByZWNhdGVkLiBJbXBsZW1lbnQgdGhlIENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGkgZnVuY3Rpb24KLSAgICAjIENvYmFsdE1lc2hDYWNoZVNpemVJbkJ5dGVzIGluc3RlYWQuCi0gICAgIyBEZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGUgbWVzaCBjYWNoZS4gRWFjaCBtZXNoIGlzIGhlbGQgY29tcHJlc3NlZAotICAgICMgaW4gbWFpbiBtZW1vcnksIHRvIGJlIGluZmxhdGVkIGludG8gYSBHUFUgYnVmZmVyIHdoZW4gbmVlZGVkIGZvcgotICAgICMgcHJvamVjdGlvbi4gV2hlbiBzZXQgdG8gJ2F1dG8nLCB3aWxsIGJlIGFkanVzdGVkIGFjY29yZGluZyB0byB3aGV0aGVyCi0gICAgIyB0aGUgZW5hYmxlX21hcF90b19tZXNoIGlzIHRydWUgb3Igbm90LiAgSWYgZW5hYmxlX21hcF90b19tZXNoIGlzIGZhbHNlLAotICAgICMgdGhlbiB0aGUgbWVzaCBjYWNoZSBzaXplIHdpbGwgYmUgc2V0IHRvIDAuCi0gICAgJ21lc2hfY2FjaGVfc2l6ZV9pbl9ieXRlcyUnOiAtMSwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRJbWFnZUNhY2hlQ2FwYWN0aXR5TXVsdGlwbGllcldoZW5QbGF5aW5nVmlkZW8uCi0gICAgIyBNb2RpZnlpbmcgdGhpcyB2YWx1ZSB0byBiZSBub24tMS4wZiB3aWxsIHJlc3VsdCBpbiB0aGUgaW1hZ2UgY2FjaGUKLSAgICAjIGNhcGFjaXR5IGJlaW5nIGNsZWFyZWQgYW5kIHRoZW4gdGVtcG9yYXJpbHkgcmVkdWNlZCBmb3IgdGhlIGR1cmF0aW9uIHRoYXQKLSAgICAjIGEgdmlkZW8gaXMgcGxheWluZy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc29tZSBwbGF0Zm9ybXMgaWYgdGhleSBhcmUKLSAgICAjIHBhcnRpY3VsYXJseSBjb25zdHJhaW5lZCBmb3IgKEdQVSkgbWVtb3J5IGR1cmluZyB2aWRlbyBwbGF5YmFjay4gIFdoZW4KLSAgICAjIHBsYXlpbmcgYSB2aWRlbywgdGhlIGltYWdlIGNhY2hlIGlzIHJlZHVjZWQgdG86Ci0gICAgIyBpbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzICoKLSAgICAjICAgICBpbWFnZV9jYWNoZV9jYXBhY2l0eV9tdWx0aXBsaWVyX3doZW5fcGxheWluZ192aWRlby4KLSAgICAnaW1hZ2VfY2FjaGVfY2FwYWNpdHlfbXVsdGlwbGllcl93aGVuX3BsYXlpbmdfdmlkZW8lJzogJycsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbnMKLSAgICAjIENvYmFsdFNraWFHbHlwaEF0bGFzV2lkdGggYW5kIENvYmFsdFNraWFHbHlwaEF0bGFzSGVpZ2h0LCByZXNwZWN0aXZlbHkuCi0gICAgIyBEZXRlcm1pbmVzIHRoZSBzaXplIGluIHBpeGVscyBvZiB0aGUgZ2x5cGggYXRsYXMgd2hlcmUgcmVuZGVyZWQgZ2x5cGhzIGFyZQotICAgICMgY2FjaGVkLiBUaGUgcmVzdWx0aW5nIG1lbW9yeSB1c2FnZSBpcyAyIGJ5dGVzIG9mIEdQVSBtZW1vcnkgcGVyIHBpeGVsLgotICAgICMgV2hlbiBhIHZhbHVlIGlzIHVzZWQgdGhhdCBpcyB0b28gc21hbGwsIHRocmFzaGluZyBtYXkgb2NjdXIgdGhhdCB3aWxsCi0gICAgIyByZXN1bHQgaW4gdmlzaWJsZSBzdHV0dGVyLiBTdWNoIHRocmFzaGluZyBpcyBtb3JlIGxpa2VseSB0byBvY2N1ciB3aGVuIENKSwotICAgICMgbGFuZ3VhZ2UgZ2x5cGhzIGFyZSByZW5kZXJlZCBhbmQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgZ2x5cGhzIGluIHBpeGVscyBpcwotICAgICMgbGFyZ2VyLCBzdWNoIGFzIGZvciBoaWdoZXIgcmVzb2x1dGlvbiBkaXNwbGF5cy4KLSAgICAjIFRoZSBuZWdhdGl2ZSBkZWZhdWx0IHZhbHVlcyBpbmRpY2F0ZXMgdG8gdGhlIGVuZ2luZSB0aGF0IHRoZXNlIHNldHRpbmdzCi0gICAgIyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzZXQuCi0gICAgJ3NraWFfZ2x5cGhfYXRsYXNfd2lkdGglJzogJy0xJywKLSAgICAnc2tpYV9nbHlwaF9hdGxhc19oZWlnaHQlJzogJy0xJywKLQotICAgICMgTWF4IENvYmFsdCBDUFUgdXNhZ2Ugc3BlY2lmaWVzIHRoYXQgdGhlIGNvYmFsdCBwcm9ncmFtIHNob3VsZAotICAgICMga2VlcCBpdCdzIHNpemUgYmVsb3cgdGhlIHNwZWNpZmllZCBzaXplLgotICAgICMgVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQuIEltcGxlbWVudCBzdGFyYm9hcmQgQVBJIGZ1bmN0aW9uCi0gICAgIyBTYlN5c3RlbUdldFRvdGFsQ1BVTWVtb3J5KCkgaW5zdGVhZC4KLSAgICAnbWF4X2NvYmFsdF9jcHVfdXNhZ2UlJzogLTEsCi0KLSAgICAjIE1heCBDb2JhbHQgR1BVIHVzYWdlIHNwZWNpZmllcyB0aGF0IHRoZSBjb2JhbHQgcHJvZ3JhbSBzaG91bGQKLSAgICAjIGtlZXAgaXQncyBzaXplIGJlbG93IHRoZSBzcGVjaWZpZWQgc2l6ZS4KLSAgICAjIFRoaXMgc2V0dGluZyBpcyBkZXByZWNhdGVkLiBJbXBsZW1lbnQgc3RhcmJvYXJkIEFQSSBmdW5jdGlvbgotICAgICMgU2JTeXN0ZW1HZXRUb3RhbEdQVU1lbW9yeSgpIGluc3RlYWQuCi0gICAgJ21heF9jb2JhbHRfZ3B1X3VzYWdlJSc6IC0xLAotCi0gICAgIyBEZXByZWNhdGVkLiBJbXBsZW1lbnQgdGhlIENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGkgZnVuY3Rpb24KLSAgICAjIENvYmFsdFJlZHVjZUNwdU1lbW9yeUJ5IGluc3RlYWQuCi0gICAgIyBXaGVuIHNwZWNpZmllZCB0aGlzIHZhbHVlIHdpbGwgcmVkdWNlIHRoZSBjcHUgbWVtb3J5IGNvbnN1bXB0aW9uIGJ5Ci0gICAgIyB0aGUgc3BlY2lmaWVkIGFtb3VudC4gLTEgZGlzYWJsZXMgdGhlIHZhbHVlLgotICAgICMgV2hlbiB0aGlzIHZhbHVlIGlzIHNwZWNpZmllZCB0aGVuIG1heF9jb2JhbHRfY3B1X3VzYWdlIHdpbGwgbm90IGJlCi0gICAgIyB1c2VkIGluIG1lbW9yeV9jb25zdHJhaW5lciwgYnV0IHdpbGwgc3RpbGwgYmUgdXNlZCBmb3IgdHJpZ2dlcmluZwotICAgICMgYSB3YXJuaW5nIGlmIHRoZSBlbmdpbmUgY29uc3VtZXMgbW9yZSBtZW1vcnkgdGhhbiB0aGlzIHZhbHVlIHNwZWNpZmllcy4KLSAgICAncmVkdWNlX2NwdV9tZW1vcnlfYnklJzogLTEsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0UmVkdWNlR3B1TWVtb3J5QnkgaW5zdGVhZC4KLSAgICAjIFdoZW4gc3BlY2lmaWVkIHRoaXMgdmFsdWUgd2lsbCByZWR1Y2UgdGhlIGdwdSBtZW1vcnkgY29uc3VtcHRpb24gYnkKLSAgICAjIHRoZSBzcGVjaWZpZWQgYW1vdW50LiAtMSBkaXNhYmxlcyB0aGUgdmFsdWUuCi0gICAgIyBXaGVuIHRoaXMgdmFsdWUgaXMgc3BlY2lmaWVkIHRoZW4gbWF4X2NvYmFsdF9ncHVfdXNhZ2Ugd2lsbCBub3QgYmUKLSAgICAjIHVzZWQgaW4gbWVtb3J5X2NvbnN0cmFpbmVyLCBidXQgd2lsbCBzdGlsbCBiZSB1c2VkIGZvciB0cmlnZ2VyaW5nCi0gICAgIyBhIHdhcm5pbmcgaWYgdGhlIGVuZ2luZSBjb25zdW1lcyBtb3JlIG1lbW9yeSB0aGFuIHRoaXMgdmFsdWUgc3BlY2lmaWVzLgotICAgICdyZWR1Y2VfZ3B1X21lbW9yeV9ieSUnOiAtMSwKLQotICAgICMgRGVwcmVjYXRlZC4gSW1wbGVtZW50IHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIGZ1bmN0aW9uCi0gICAgIyBDb2JhbHRFbmFibGVKaXQgaW5zdGVhZC4KLSAgICAnY29iYWx0X2VuYWJsZV9qaXQlJzogLTEsCi0KLSAgICAjIERlcHJlY2F0ZWQuIEltcGxlbWVudCB0aGUgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaSBmdW5jdGlvbgotICAgICMgQ29iYWx0R2NaZWFsIGluc3RlYWQuCi0gICAgIyBDYW4gYmUgc2V0IHRvIGVuYWJsZSB6ZWFsb3VzIGdhcmJhZ2UgY29sbGVjdGlvbiwgaWYgfGphdmFzY3JpcHRfZW5naW5lfAotICAgICMgc3VwcG9ydHMgaXQuICBaZWFsb3VzIGdhcmJhZ2UgY29sbGVjdGlvbiB3aWxsIGNhdXNlIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICMgdG8gb2NjdXIgbXVjaCBtb3JlIGZyZXF1ZW50bHkgdGhhbiBub3JtYWwsIGZvciB0aGUgcHVycG9zZSBvZiBmaW5kaW5nIG9yCi0gICAgIyByZXByb2R1Y2luZyBidWdzLgotICAgICdjb2JhbHRfZ2NfemVhbCUnOiAtMSwKLQotICAgICMgVGhlIGNvYmFsdF9tZWRpYV8qIHZhcmlhYmxlcyBkZWZpbmVkIGJlbG93IGFyZSBkZXByZWNhdGVkLiBUaGVpcgotICAgICMgY29ycmVzcG9uZGluZyBTdGFyYm9hcmQgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWZpbmVkIGluc3RlYWQgb2Ygc2V0dGluZwotICAgICMgdGhlaXIgdmFsdWVzIHRocm91Z2ggR1lQLgotCi0gICAgIyBUaGlzIGNhbiBiZSBzZXQgdG8gIm1lbW9yeSIgb3IgImZpbGUiLiAgV2hlbiBpdCBpcyBzZXQgdG8gIm1lbW9yeSIsIHRoZQotICAgICMgbWVkaWEgYnVmZmVycyB3aWxsIGJlIHN0b3JlZCBpbiBtYWluIG1lbW9yeSBhbGxvY2F0ZWQgYnkgU2JNZW1vcnkKLSAgICAjIGZ1bmN0aW9ucy4gIFdoZW4gaXQgaXMgc2V0IHRvICJmaWxlIiwgdGhlIG1lZGlhIGJ1ZmZlcnMgd2lsbCBiZSBzdG9yZWQgaW4KLSAgICAjIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHN5c3RlbSBjYWNoZSBmb2xkZXIgYWNxdWlyZWQgYnkgY2FsbGluZwotICAgICMgU2JTeXN0ZW1HZXRQYXRoKCkgd2l0aCAia1NiU3lzdGVtUGF0aENhY2hlRGlyZWN0b3J5Ii4gIE5vdGUgdGhhdCB3aGVuIGl0cwotICAgICMgdmFsdWUgaXMgImZpbGUiIHRoZSBtZWRpYSBzdGFjayB3aWxsIHN0aWxsIGFsbG9jYXRlIG1lbW9yeSB0byBjYWNoZSB0aGUKLSAgICAjIHRoZSBidWZmZXJzIGluIHVzZS4KLSAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9zdG9yYWdlX3R5cGUlJzogJycsCi0gICAgIyBXaGVuIGVpdGhlciB8Y29iYWx0X21lZGlhX2J1ZmZlcl9pbml0aWFsX2NhcGFjaXR5fCBvcgotICAgICMgfGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0fCBpc24ndCB6ZXJvLCBtZWRpYSBidWZmZXJzIHdpbGwgYmUKLSAgICAjIGFsbG9jYXRlZCB1c2luZyBhIG1lbW9yeSBwb29sLiAgU2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgdG8gMSB0bwotICAgICMgYWxsb2NhdGUgdGhlIG1lZGlhIGJ1ZmZlciBwb29sIG1lbW9yeSBvbiBkZW1hbmQgYW5kIHJldHVybiBhbGwgbWVtb3J5IHRvCi0gICAgIyB0aGUgc3lzdGVtIHdoZW4gdGhlcmUgaXMgbm8gbWVkaWEgYnVmZmVyIGFsbG9jYXRlZC4gIFNldHRpbmcgdGhlIGZvbGxvd2luZwotICAgICMgdmFsdWUgdG8gMCByZXN1bHRzIGluIHRoYXQgQ29iYWx0IHdpbGwgYWxsb2NhdGUKLSAgICAjIHxjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHl8IGJ5dGVzIGZvciBtZWRpYSBidWZmZXIgb24gc3RhcnR1cAotICAgICMgYW5kIHdpbGwgbm90IHJlbGVhc2UgYW55IG1lZGlhIGJ1ZmZlciBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtIGV2ZW4gaWYKLSAgICAjIHRoZXJlIGlzIG5vIG1lZGlhIGJ1ZmZlcnMgYWxsb2NhdGVkLgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX3Bvb2xfYWxsb2NhdGVfb25fZGVtYW5kJSc6IC0xLAotICAgICMgVGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgbWVkaWEgYnVmZmVycyBhbGxvY2F0ZWQKLSAgICAjIGR1cmluZyBzeXN0ZW0gc3RhcnR1cC4gIFRvIGFsbG9jYXRlIGEgbGFyZ2UgY2h1bmsgYXQgc3RhcnR1cCBoZWxwcyB3aXRoCi0gICAgIyByZWR1Y2luZyBmcmFnbWVudGF0aW9uIGFuZCBjYW4gYXZvaWQgZmFpbHVyZXMgdG8gYWxsb2NhdGUgaW5jcmVtZW50YWxseS4KLSAgICAjIFRoaXMgY2FuIGJlIHNldCB0byAwLgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHklJzogLTEsCi0gICAgIyBUaGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIG1lZGlhIGJ1ZmZlcnMgd2hlbgotICAgICMgdmlkZW8gcmVzb2x1dGlvbiBpcyBubyBsYXJnZXIgdGhhbiAxMDgwcC4gVGhpcyBtdXN0IGJlIGxhcmdlciB0aGFuIHN1bSBvZgotICAgICMgMTA4MHAgdmlkZW8gYnVkZ2V0IGFuZCBub24tdmlkZW8gYnVkZ2V0LgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV8xMDgwcCUnOiAtMSwKLSAgICAjIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3RvcmUgbWVkaWEgYnVmZmVycyB3aGVuCi0gICAgIyB2aWRlbyByZXNvbHV0aW9uIGlzIDRrLiBJZiAwLCB0aGVuIG1lbW9yeSBjYW4gZ3JvdyB3aXRob3V0IGJvdW5kLiBUaGlzCi0gICAgIyBtdXN0IGJlIGxhcmdlciB0aGFuIHN1bSBvZiA0ayB2aWRlbyBidWRnZXQgYW5kIG5vbi12aWRlbyBidWRnZXQuCi0gICAgJ2NvYmFsdF9tZWRpYV9idWZmZXJfbWF4X2NhcGFjaXR5XzRrJSc6IC0xLAotCi0gICAgIyBXaGVuIHRoZSBtZWRpYSBzdGFjayBuZWVkcyBtb3JlIG1lbW9yeSB0byBzdG9yZSBtZWRpYSBidWZmZXJzLCBpdCB3aWxsCi0gICAgIyBhbGxvY2F0ZSBleHRyYSBtZW1vcnkgaW4gdW5pdHMgb2YgfGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0fC4KLSAgICAjIFRoaXMgY2FuIGJlIHNldCB0byAwLCBpbiB3aGljaCBjYXNlIHRoZSBtZWRpYSBzdGFjayB3aWxsIGFsbG9jYXRlIGV4dHJhCi0gICAgIyBtZW1vcnkgb24gZGVtYW5kLiAgV2hlbiB8Y29iYWx0X21lZGlhX2J1ZmZlcl9pbml0aWFsX2NhcGFjaXR5fCBhbmQgdGhpcwotICAgICMgdmFsdWUgYXJlIGJvdGggc2V0IHRvIDAsIHRoZSBtZWRpYSBzdGFjayB3aWxsIGFsbG9jYXRlIGluZGl2aWR1YWwgYnVmZmVycwotICAgICMgZGlyZWN0bHkgdXNpbmcgU2JNZW1vcnkgZnVuY3Rpb25zLgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX2FsbG9jYXRpb25fdW5pdCUnOiAtMSwKLQotICAgICMgVGhlIG1lZGlhIGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGFsaWdubWVudC4gIFNldAotICAgICMgdGhpcyB0byBhIGxhcmdlciB2YWx1ZSBtYXkgaW5jcmVhc2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBtZWRpYQotICAgICMgYnVmZmVycy4KLSAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9hbGlnbm1lbnQlJzogLTEsCi0gICAgIyBFeHRyYSBieXRlcyBhbGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiBhIG1lZGlhIGJ1ZmZlciB0byBlbnN1cmUgdGhhdCB0aGUKLSAgICAjIGJ1ZmZlciBjYW4gYmUgdXNlIG9wdGltYWxseSBieSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgbGlrZSBTSU1ELiAgU2V0IHRvIDAKLSAgICAjIHRvIHJlbW92ZSBhbnkgcGFkZGluZy4KLSAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9wYWRkaW5nJSc6IC0xLAotCi0gICAgIyBUaGUgbWVtb3J5IHVzZWQgd2hlbiBwbGF5aW5nIG1wNCB2aWRlb3MgdGhhdCBpcyBub3QgaW4gREFTSCBmb3JtYXQuICBUaGUKLSAgICAjIHJlc29sdXRpb24gb2Ygc3VjaCB2aWRlb3Mgc2hvdWxkbid0IGdvIGJleW9uZCAxMDgwcC4gIEl0cyB2YWx1ZSBzaG91bGQgYmUKLSAgICAjIGxlc3MgdGhhbiB0aGUgc3VtIG9mICdjb2JhbHRfbWVkaWFfYnVmZmVyX25vbl92aWRlb19idWRnZXQnIGFuZAotICAgICMgJ2NvYmFsdF9tZWRpYV9idWZmZXJfdmlkZW9fYnVkZ2V0XzEwODBwJyBidXQgbm90IGxlc3MgdGhhbiA4IE1CLgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX3Byb2dyZXNzaXZlX2J1ZGdldCUnOiAtMSwKLQotICAgICMgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSBhdWRpbyBvciB0ZXh0IGJ1ZmZlcnMgb2YKLSAgICAjIG1lZGlhIHNvdXJjZSBiZWZvcmUgdHJpZ2dlcmluZyBhIGdhcmJhZ2UgY29sbGVjdGlvbi4gIEEgbGFyZ2UgdmFsdWUgd2lsbAotICAgICMgY2F1c2UgbW9yZSBtZW1vcnkgYmVpbmcgdXNlZCBieSBhdWRpbyBidWZmZXJzIGJ1dCB3aWxsIGFsc28gbWFrZQotICAgICMgSmF2YVNjcmlwdCBhcHAgbGVzcyBsaWtlbHkgdG8gcmUtZG93bmxvYWQgYXVkaW8gZGF0YS4gIE5vdGUgdGhhdCB0aGUKLSAgICAjIEphdmFTY3JpcHQgYXBwIG1heSBleHBlcmllbmNlIHNpZ25pZmljYW50IGRpZmZpY3VsdHkgaWYgdGhpcyB2YWx1ZSBpcyB0b28KLSAgICAjIGxvdy4KLSAgICAnY29iYWx0X21lZGlhX2J1ZmZlcl9ub25fdmlkZW9fYnVkZ2V0JSc6IC0xLAotCi0gICAgIyBTcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHZpZGVvIGJ1ZmZlcnMgb2YgbWVkaWEKLSAgICAjIHNvdXJjZSBiZWZvcmUgdHJpZ2dlcmluZyBhIGdhcmJhZ2UgY29sbGVjdGlvbiB3aGVuIHRoZSB2aWRlbyByZXNvbHV0aW9uIGlzCi0gICAgIyBsb3dlciB0aGFuIDEwODBwICgxOTIweDEwODApLiAgQSBsYXJnZSB2YWx1ZSB3aWxsIGNhdXNlIG1vcmUgbWVtb3J5IGJlaW5nCi0gICAgIyB1c2VkIGJ5IHZpZGVvIGJ1ZmZlcnMgYnV0IHdpbGwgYWxzbyBtYWtlIEphdmFTY3JpcHQgYXBwIGxlc3MgbGlrZWx5IHRvCi0gICAgIyByZS1kb3dubG9hZCB2aWRlbyBkYXRhLiAgTm90ZSB0aGF0IHRoZSBKYXZhU2NyaXB0IGFwcCBtYXkgZXhwZXJpZW5jZQotICAgICMgc2lnbmlmaWNhbnQgZGlmZmljdWx0eSBpZiB0aGlzIHZhbHVlIGlzIHRvbyBsb3cuCi0gICAgJ2NvYmFsdF9tZWRpYV9idWZmZXJfdmlkZW9fYnVkZ2V0XzEwODBwJSc6IC0xLAotICAgICMgU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB2aWRlbyBidWZmZXJzIG9mIG1lZGlhCi0gICAgIyBzb3VyY2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBnYXJiYWdlIGNvbGxlY3Rpb24gd2hlbiB0aGUgdmlkZW8gcmVzb2x1dGlvbiBpcwotICAgICMgbG93ZXIgdGhhbiA0ayAoMzg0MHgyMTYwKS4gIEEgbGFyZ2UgdmFsdWUgd2lsbCBjYXVzZSBtb3JlIG1lbW9yeSBiZWluZwotICAgICMgdXNlZCBieSB2aWRlbyBidWZmZXJzIGJ1dCB3aWxsIGFsc28gbWFrZSBKYXZhU2NyaXB0IGFwcCBsZXNzIGxpa2VseSB0bwotICAgICMgcmUtZG93bmxvYWQgdmlkZW8gZGF0YS4gIE5vdGUgdGhhdCB0aGUgSmF2YVNjcmlwdCBhcHAgbWF5IGV4cGVyaWVuY2UKLSAgICAjIHNpZ25pZmljYW50IGRpZmZpY3VsdHkgaWYgdGhpcyB2YWx1ZSBpcyB0b28gbG93LgotICAgICdjb2JhbHRfbWVkaWFfYnVmZmVyX3ZpZGVvX2J1ZGdldF80ayUnOiAtMSwKLQotICAgICMgU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiB0aHJlc2hvbGQgb2YgbWVkaWEgc291cmNlIGdhcmJhZ2UgY29sbGVjdGlvbi4gIFdoZW4KLSAgICAjIHRoZSBhY2N1bXVsYXRlZCBkdXJhdGlvbiBpbiBhIHNvdXJjZSBidWZmZXIgZXhjZWVkcyB0aGlzIHZhbHVlLCB0aGUgbWVkaWEKLSAgICAjIHNvdXJjZSBpbXBsZW1lbnRhdGlvbiB3aWxsIHRyeSB0byBlamVjdCBleGlzdGluZyBidWZmZXJzIGZyb20gdGhlIGNhY2hlLgotICAgICMgVGhpcyBpcyB1c3VhbGx5IHRyaWdnZXJlZCB3aGVuIHRoZSB2aWRlbyBiZWluZyBwbGF5ZWQgaGFzIGEgc2ltcGxlIGNvbnRlbnQKLSAgICAjIGFuZCB0aGUgZW5jb2RlZCBkYXRhIGlzIHNtYWxsLiAgSW4gc3VjaCBjYXNlIHRoaXMgY2FuIGxpbWl0IGhvdyBtdWNoIGlzCi0gICAgIyBhbGxvY2F0ZWQgZm9yIHRoZSBib29rIGtlZXBpbmcgZGF0YSBvZiB0aGUgbWVkaWEgYnVmZmVycyBhbmQgYXZvaWQgT09NIG9mCi0gICAgIyBzeXN0ZW0gaGVhcC4KLSAgICAjIFRoaXMgc2hvdWxkIGJlIHNldCB0byAxNzAgZm9yIG1vc3Qgb2YgdGhlIHBsYXRmb3Jtcy4gIEJ1dCBpdCBjYW4gYmUKLSAgICAjIGZ1cnRoZXIgcmVkdWNlZCBvbiBzeXN0ZW1zIHdpdGggZXh0cmVtZWx5IGxvdyBtZW1vcnkuCi0gICAgJ2NvYmFsdF9tZWRpYV9zb3VyY2VfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZF9pbl9zZWNvbmRzJSc6IC0xLAotCi0gICAgIyBUT0RPKGIvMjEyNjQxMDY1KTogRXZhbHVhdGUgaWYgYW55IGZsYWdzIGluIGRlZmluZXNfZGVidWcsIGRlZmluZXNfZGV2ZWwKLSAgICAjIGRlZmluZXNfcWEgbmVlZCB0byBiZSBhZGRlZCB0byBHTi4KLSAgICAnZGVmaW5lc19kZWJ1Zyc6IFsKLSAgICAgICdBTExPQ0FUT1JfU1RBVFNfVFJBQ0tJTkcnLAotICAgICAgJ0NPQkFMVF9CT1hfRFVNUF9FTkFCTEVEJywKLSAgICAgICdDT0JBTFRfQlVJTERfVFlQRV9ERUJVRycsCi0gICAgICAnQ09CQUxUX0VOQUJMRV9KQVZBU0NSSVBUX0VSUk9SX0xPR0dJTkcnLAotICAgICAgJ0NPQkFMVF9FTkFCTEVfVkVSU0lPTl9DT01QQVRJQklMSVRZX1ZBTElEQVRJT05TJywKLSAgICAgICdDT0JBTFRfU0VDVVJJVFlfU0NSRUVOX0NMRUFSX1RPX1VHTFlfQ09MT1InLAotICAgICAgJ0VOQUJMRV9ERUJVR19DT01NQU5EX0xJTkVfU1dJVENIRVMnLAotICAgICAgJ0VOQUJMRV9ERUJVR19DX1ZBTCcsCi0gICAgICAnRU5BQkxFX0lHTk9SRV9DRVJUSUZJQ0FURV9FUlJPUlMnLAotICAgICAgJ0VOQUJMRV9QQVJUSUFMX0xBWU9VVF9DT05UUk9MJywKLSAgICAgICdFTkFCTEVfVEVTVF9EQVRBJywKLSAgICAgICdFTkFCTEVfVEVTVF9SVU5ORVInLAotICAgICAgJ0VOQUJMRV9UT0tFTl9BTFBIQUJFVElDQUxfU09SVElORycsCi0KLSAgICAgICMgVE9ETzogUmVuYW1lIHRvIENPQkFMVF9MT0dHSU5HX0VOQUJMRUQuCi0gICAgICAnX19MQl9TSEVMTF9fRk9SQ0VfTE9HR0lOR19fJywKLQotICAgICAgJ1NLX0RFVkVMT1BFUicsCi0gICAgXSwKLSAgICAnZGVmaW5lc19kZXZlbCc6IFsKLSAgICAgICdBTExPQ0FUT1JfU1RBVFNfVFJBQ0tJTkcnLAotICAgICAgJ0NPQkFMVF9CVUlMRF9UWVBFX0RFVkVMJywKLSAgICAgICdDT0JBTFRfRU5BQkxFX0pBVkFTQ1JJUFRfRVJST1JfTE9HR0lORycsCi0gICAgICAnQ09CQUxUX0VOQUJMRV9WRVJTSU9OX0NPTVBBVElCSUxJVFlfVkFMSURBVElPTlMnLAotICAgICAgJ0NPQkFMVF9TRUNVUklUWV9TQ1JFRU5fQ0xFQVJfVE9fVUdMWV9DT0xPUicsCi0gICAgICAnRU5BQkxFX0RFQlVHX0NPTU1BTkRfTElORV9TV0lUQ0hFUycsCi0gICAgICAnRU5BQkxFX0RFQlVHX0NfVkFMJywKLSAgICAgICdFTkFCTEVfSUdOT1JFX0NFUlRJRklDQVRFX0VSUk9SUycsCi0gICAgICAnRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wnLAotICAgICAgJ0VOQUJMRV9URVNUX0RBVEEnLAotICAgICAgJ0VOQUJMRV9URVNUX1JVTk5FUicsCi0gICAgICAnRU5BQkxFX1RPS0VOX0FMUEhBQkVUSUNBTF9TT1JUSU5HJywKLSAgICAgICdfX0xCX1NIRUxMX19GT1JDRV9MT0dHSU5HX18nLAotICAgICAgJ1NLX0RFVkVMT1BFUicsCi0gICAgXSwKLSAgICAnZGVmaW5lc19xYSc6IFsKLSAgICAgICdBTExPQ0FUT1JfU1RBVFNfVFJBQ0tJTkcnLAotICAgICAgJ0NPQkFMVF9CVUlMRF9UWVBFX1FBJywKLSAgICAgICdDT0JBTFRfRU5BQkxFX0pBVkFTQ1JJUFRfRVJST1JfTE9HR0lORycsCi0gICAgICAnQ09CQUxUX1NFQ1VSSVRZX1NDUkVFTl9DTEVBUl9UT19VR0xZX0NPTE9SJywKLSAgICAgICdFTkFCTEVfREVCVUdfQ09NTUFORF9MSU5FX1NXSVRDSEVTJywKLSAgICAgICdFTkFCTEVfREVCVUdfQ19WQUwnLAotICAgICAgJ0VOQUJMRV9JR05PUkVfQ0VSVElGSUNBVEVfRVJST1JTJywKLSAgICAgICdFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCcsCi0gICAgICAnRU5BQkxFX1RFU1RfREFUQScsCi0gICAgICAnRU5BQkxFX1RFU1RfUlVOTkVSJywKLSAgICBdLAotICAgICdkZWZpbmVzX2dvbGQnOiBbCi0gICAgICAnQUxMT0NBVE9SX1NUQVRTX1RSQUNLSU5HJywKLSAgICAgICdDT0JBTFRfQlVJTERfVFlQRV9HT0xEJywKLSAgICAgICdDT0JBTFRfRk9SQ0VfQ1NQJywKLSAgICAgICdDT0JBTFRfRk9SQ0VfSFRUUFMnLAotICAgICAgJ09GRklDSUFMX0JVSUxEJywgICMgQ2hyb21pdW0gYmFzZSByZWxpZXMgb24gdGhpcy4KLSAgICAgICdUUkFDSU5HX0RJU0FCTEVEJywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnQ09CQUxUJywKLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3Bvb2xfYWxsb2NhdGVfb25fZGVtYW5kICE9IC0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnQ09CQUxUX01FRElBX0JVRkZFUl9QT09MX0FMTE9DQVRFX09OX0RFTUFORD08KGNvYmFsdF9tZWRpYV9idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHkgIT0gLTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdDT0JBTFRfTUVESUFfQlVGRkVSX0lOSVRJQUxfQ0FQQUNJVFk9PChjb2JhbHRfbWVkaWFfYnVmZmVyX2luaXRpYWxfY2FwYWNpdHkpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV8xMDgwcCAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzEwODBQPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfMTA4MHApJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV80ayAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfNGspJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV80ayAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfNGspJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX21heF9jYXBhY2l0eV80ayAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfTUFYX0NBUEFDSVRZXzRLPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9tYXhfY2FwYWNpdHlfNGspJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX2FsbG9jYXRpb25fdW5pdCAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfQUxMT0NBVElPTl9VTklUPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9hbGxvY2F0aW9uX3VuaXQpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX2FsaWdubWVudCAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfQUxJR05NRU5UPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9hbGlnbm1lbnQpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3BhZGRpbmcgIT0gLTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdDT0JBTFRfTUVESUFfQlVGRkVSX1BBRERJTkc9PChjb2JhbHRfbWVkaWFfYnVmZmVyX3BhZGRpbmcpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3Byb2dyZXNzaXZlX2J1ZGdldCAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfUFJPR1JFU1NJVkVfQlVER0VUPTwoY29iYWx0X21lZGlhX2J1ZmZlcl9wcm9ncmVzc2l2ZV9idWRnZXQpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX25vbl92aWRlb19idWRnZXQgIT0gLTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdDT0JBTFRfTUVESUFfQlVGRkVSX05PTl9WSURFT19CVURHRVQ9PChjb2JhbHRfbWVkaWFfYnVmZmVyX25vbl92aWRlb19idWRnZXQpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3ZpZGVvX2J1ZGdldF8xMDgwcCAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzEwODBQPTwoY29iYWx0X21lZGlhX2J1ZmZlcl92aWRlb19idWRnZXRfMTA4MHApJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3ZpZGVvX2J1ZGdldF80ayAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfVklERU9fQlVER0VUXzRLPTwoY29iYWx0X21lZGlhX2J1ZmZlcl92aWRlb19idWRnZXRfNGspJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfc291cmNlX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGRfaW5fc2Vjb25kcyAhPSAtMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9TT1VSQ0VfR0FSQkFHRV9DT0xMRUNUSU9OX0RVUkFUSU9OX1RIUkVTSE9MRF9JTl9TRUNPTkRTPTwoY29iYWx0X21lZGlhX3NvdXJjZV9nYXJiYWdlX2NvbGxlY3Rpb25fZHVyYXRpb25fdGhyZXNob2xkX2luX3NlY29uZHMpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3N0b3JhZ2VfdHlwZSA9PSAibWVtb3J5IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0NPQkFMVF9NRURJQV9CVUZGRVJfU1RPUkFHRV9UWVBFX01FTU9SWT0xJywKLSAgICAgICAgXSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydjb2JhbHRfbWVkaWFfYnVmZmVyX3N0b3JhZ2VfdHlwZSAhPSAiIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQ09CQUxUX01FRElBX0JVRkZFUl9TVE9SQUdFX1RZUEVfRklMRT0xJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsnaW5fYXBwX2RpYWwgPT0gMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0RJQUxfU0VSVkVSJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydlbmFibGVfZGVidWdnZXIgPT0gMScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0VOQUJMRV9ERUJVR0dFUicsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsnaG9zdF9vcz09IndpbiInLCB7Ci0gICAgICAgICMgQSBmZXcgZmxhZ3MgdG8gbXV0ZSBNU1ZDIGNvbXBpbGVyIGVycm9ycyB0aGF0IGRvZXMgbm90IGFwcGVhciBvbiBMaW51eC4KLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2hvc3QnOiBbCi0gICAgICAgICAgJy93ZDQyNjcnLCAgIyBQb3NzaWJsZSBsb3NzIG9mIHByZWNpc2lvbiBmcm9tIHNpemVfdCB0byBhIHNtYWxsZXIgdHlwZS4KLSAgICAgICAgICAnL3dkNDcxNScsICAjIE5vdCBhbGwgY29udHJvbCBwYXRocyByZXR1cm4gdmFsdWUuCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LCAjIGVuZCBvZiB0YXJnZXRfZGVmYXVsdHMKLQotICAjIEZvciBjb25maWd1cmF0aW9ucyBvdGhlciB0aGFuIEdvbGQsIHNldCB0aGUgZmxhZyB0aGF0IGxldHMgdGVzdCBkYXRhIGZpbGVzCi0gICMgYmUgY29waWVkIGFuZCBjYXJyaWVkIGFsb25nIHdpdGggdGhlIGJ1aWxkLgotICAjIENsaWVudHMgbXVzdCBjb3B5IG92ZXIgYWxsIGNvbnRlbnQ7IHRvIGF2b2lkIGhhdmluZyB0byBjb3B5IG92ZXIgZXh0cmEgZGF0YSwgd2UKLSAgIyBvbWl0IHRoZSB0ZXN0IGRhdGEKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWydjb2JhbHRfY29uZmlnICE9ICJnb2xkIicsIHsKLSAgICAgICd2YXJpYWJsZXMnIDogewotICAgICAgICAnZW5hYmxlX2Fib3V0X3NjaGVtZSc6IDEsCi0gICAgICAgICdlbmFibGVfZmFrZV9taWNyb3Bob25lJzogMSwKLSAgICAgICAgJ2VuYWJsZV9uZXR3b3JrX2xvZ2dpbmcnOiAxLAotICAgICAgICAnZW5hYmxlX3dlYmRyaXZlciUnOiAxLAotICAgICAgfSwKLSAgICB9LAotICAgIHsKLSAgICAgICd2YXJpYWJsZXMnIDogewotICAgICAgICAnZW5hYmxlX2Fib3V0X3NjaGVtZSc6IDAsCi0gICAgICAgICdlbmFibGVfZmFrZV9taWNyb3Bob25lJzogMCwKLSAgICAgICAgJ2VuYWJsZV9uZXR3b3JrX2xvZ2dpbmcnOiAwLAotICAgICAgICAnZW5hYmxlX3dlYmRyaXZlcic6IDAsCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnY29iYWx0X2NvbmZpZyAhPSAiZ29sZCInLCB7Ci0gICAgICAndmFyaWFibGVzJyA6IHsKLSAgICAgICAgJ2NvYmFsdF9jb3B5X3Rlc3RfZGF0YSc6IDEsCi0gICAgICB9LAotICAgIH0sCi0gICAgewotICAgICAgJ3ZhcmlhYmxlcycgOiB7Ci0gICAgICAgICdjb2JhbHRfY29weV90ZXN0X2RhdGEnOiAwLAotICAgICAgfSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9idWlsZC9jb2JhbHRfY29uZmlndXJhdGlvbi5weSBiL2NvYmFsdC9idWlsZC9jb2JhbHRfY29uZmlndXJhdGlvbi5weQppbmRleCBmZDZjMGM4Li4xMjAxYzlkIDEwMDY0NAotLS0gYS9jb2JhbHQvYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvY29iYWx0L2J1aWxkL2NvYmFsdF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNSw3ICsxNSw2IEBACiAKIGltcG9ydCBvcwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBjb2JhbHQudG9vbHMgaW1wb3J0IHBhdGhzCiBpbXBvcnQgY29iYWx0LnRvb2xzLndlYmRyaXZlcl9iZW5jaG1hcmtfY29uZmlnIGFzIHdiX2NvbmZpZwogZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IGFwcGxpY2F0aW9uX2NvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2NvYmFsdC9idWlsZC9jb25maWcvX19pbml0X18ucHkgYi9jb2JhbHQvYnVpbGQvY29uZmlnL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGQ1M2ZjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9jb25maWcvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJJbml0aWFsaXphdGlvbiBmb3IgdGhlIGNvbmZpZyBwYWNrYWdlLgotCi1Ob3RlIHRoYXQgdGhpcyBpcyBhbiBvYnNvbGV0ZSBhbmQgZGVwcmVjYXRlZCBwYWNrYWdlLCBhbmQganVzdCBleGlzdHMgZm9yCi1iYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gUGxlYXNlIHVzZSBzdGFyYm9hcmQuYnVpbGQuUGxhdGZvcm1Db25maWd1cmF0aW9uIG9yCi1jb2JhbHQuYnVpbGQuQ29iYWx0Q29uZmlndXJhdGlvbiBpbnN0ZWFkLCBhcyBhcHByb3ByaWF0ZS4KLSIiIgotCi1pbXBvcnQgc3lzCi0KLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci1pbXBvcnQgYmFzZQotaW1wb3J0IHN0YXJib2FyZAotZnJvbSBzdGFyYm9hcmQudG9vbHMuYnVpbGQgaW1wb3J0IEdldFBsYXRmb3JtQ29uZmlnCi0KLSMgVGhpcyBiaXQgb2Ygdm9vZG9vIGZha2VzIG91dCB0aGUgY29uZmlnLnN0YXJib2FyZCBtb2R1bGUgc28gdGhhdCBsZWdhY3kKLSMgcGxhdGZvcm1zIHdpbGwgc3RpbGwgR1lQIHByb3Blcmx5Lgotc3lzLm1vZHVsZXNbJ2NvbmZpZy5zdGFyYm9hcmQnXSA9IHN0YXJib2FyZAotc3RhcmJvYXJkLlBsYXRmb3JtQ29uZmlnU3RhcmJvYXJkID0gYmFzZS5QbGF0Zm9ybUNvbmZpZ0Jhc2UKLQotIyBUT0RPOiBBZGQgZGVwcmVjYXRpb24gbG9nZ2luZy53YXJuaW5nKCkgaGVyZSBvbmNlIHJlZmVyZW5jZXMgYXJlIG1vc3RseQotIyBjbGVhbmVkIHVwLgpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2NvbmZpZy9fZW52LnB5IGIvY29iYWx0L2J1aWxkL2NvbmZpZy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE5MDhlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9jb25maWcvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvY29uZmlnL2Jhc2UucHkgYi9jb2JhbHQvYnVpbGQvY29uZmlnL2Jhc2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YTViZTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2J1aWxkL2NvbmZpZy9iYXNlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiQmFzZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBHWVAuCi0KLU5vdGUgdGhhdCB0aGlzIGlzIGFuIG9ic29sZXRlIGFuZCBkZXByZWNhdGVkIG1vZHVsZSwgYW5kIGp1c3QgZXhpc3RzIGZvcgotYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFBsZWFzZSB1c2Ugc3RhcmJvYXJkLmJ1aWxkLlBsYXRmb3JtQ29uZmlndXJhdGlvbiBvcgotY29iYWx0LmJ1aWxkLkNvYmFsdENvbmZpZ3VyYXRpb24gaW5zdGVhZCwgYXMgYXBwcm9wcmlhdGUuCi0iIiIKLQotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLWZyb20gc3RhcmJvYXJkLmJ1aWxkLnBsYXRmb3JtX2NvbmZpZ3VyYXRpb24gaW1wb3J0IFBsYXRmb3JtQ29uZmlndXJhdGlvbgotCi0KLVBsYXRmb3JtQ29uZmlnQmFzZSA9IFBsYXRmb3JtQ29uZmlndXJhdGlvbiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0KLQotIyBUT0RPOiBBZGQgZGVwcmVjYXRpb24gbG9nZ2luZy53YXJuaW5nKCkgaGVyZSBvbmNlIHJlZmVyZW5jZXMgYXJlIG1vc3RseQotIyBjbGVhbmVkIHVwLgpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2NvbnRlbnRzX2Rpci5neXBpIGIvY29iYWx0L2J1aWxkL2NvbnRlbnRzX2Rpci5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjA0YTlkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9idWlsZC9jb250ZW50c19kaXIuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIERpcmVjdG9yaWVzIHdoZXJlIHN0YXRpYyBjb250ZW50IGZpbGVzIHVzZWQgYnkgQ29iYWx0IGFyZSBsb2NhdGVkLgotewotICAndmFyaWFibGVzJzogewotICAgICdzdGF0aWNfY29udGVudHNfc291cmNlX2Rpcic6ICc8KERFUFRIKS9jb2JhbHQvY29udGVudCcsCi0gIH0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvY29weV9pY3VfZGF0YS5neXBpIGIvY29iYWx0L2J1aWxkL2NvcHlfaWN1X2RhdGEuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzNWEyOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnVpbGQvY29weV9pY3VfZGF0YS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGJ5IGEgR1lQIHRhcmdldCB0aGF0IG5lZWRzIHRvIGNvcHkgdGhlCi0jIHBsYXRmb3JtIHNwZWNpZmljIElDVSBkYXRhIGludG8gPChQUk9EVUNUX0RJUikvY29udGVudC4KLQotewotICAnaW5jbHVkZXMnOiBbICdjb250ZW50c19kaXIuZ3lwaScgXSwKLQotICAndmFyaWFibGVzJzogewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAjIFRhcmdldCBtYWNoaW5lIHVzZXMgbGl0dGxlIGVuZGlhbiBjb252ZW50aW9uCi0gICAgICAnbGl0dGxlX2VuZGlhbiUnOiAxLAotICAgIH0sCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnbGl0dGxlX2VuZGlhbj09MScsIHsKLSAgICAgICAgJ2lucHV0c19pY3UlJzogWyAnPChzdGF0aWNfY29udGVudHNfc291cmNlX2RpcikvaWN1L2ljdWR0NjhsLmRhdCcgXSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ2lucHV0c19pY3UlJzogWyAnPChzdGF0aWNfY29udGVudHNfc291cmNlX2RpcikvaWN1L2ljdWR0NjhiLmRhdCcgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0KLSAgJ2NvcGllcyc6IFsKLSAgICB7Ci0gICAgICAnZGVzdGluYXRpb24nOiAnPChzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyKS9pY3UvJywKLSAgICAgICdmaWxlcyc6IFsgJzwoaW5wdXRzX2ljdSknIF0sCi0gICAgfSwKLSAgXSwKLQotICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ2NvbnRlbnRfZGVwbG95X3N1YmRpcnMnOiBbICdpY3UnIF0KLSAgICB9Ci0gIH0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvY29weV93ZWJfZGF0YS5neXBpIGIvY29iYWx0L2J1aWxkL2NvcHlfd2ViX2RhdGEuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3YTdlYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnVpbGQvY29weV93ZWJfZGF0YS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYW4gYWN0aW9uIHRvIGNvcHkgd2ViIGRhdGEgZmlsZXMgaW50bwotIyB0aGUgY29udGVudCBkaXJlY3RvcnksIGUuZy4gb3V0L3N0dWJfZGVidWcvY29udGVudC9kYXRhL3dlYi4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jIHsKLSMgICAndGFyZ2V0X25hbWUnOiAndGFyZ2V0X25hbWVfY29weV93ZWJfZmlsZXMnLAotIyAgICd0eXBlJzogJ25vbmUnLAotIyAgICd2YXJpYWJsZXMnOiB7Ci0jICAgICAnY29udGVudF93ZWJfaW5wdXRfZmlsZXMnOiBbCi0jICAgICAgICdwYXRoL3RvL2RhdGFmaWxlLnR4dCcsICAgICAjIFRoZSBmaWxlIHdpbGwgYmUgY29waWVkLgotIyAgICAgICAncGF0aC90by9kYXRhL2RpcmVjdG9yeScsICAgIyBUaGUgZGlyZWN0b3J5IGFuZCBpdHMgY29udGVudCB3aWxsIGJlIGNvcGllZC4KLSMgICAgICAgJ3BhdGgvdG8vZGF0YS9kaXJlY3RvcnkvJywgICMgVGhlIGRpcmVjdG9yeSdzIGNvbnRlbnQgd2lsbCBiZSBjb3BpZWQuCi0jICAgICBdCi0jICAgICAnY29udGVudF93ZWJfb3V0cHV0X3N1YmRpcicgOiAncGF0aC90by9vdXRwdXQvZGlyZWN0b3J5JywKLSMgICB9LAotIyAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC9idWlsZC9jb3B5X3dlYl9kYXRhLmd5cGknIF0sCi0jIH0sCi0jCi0jIE1lYW5pbmcgb2YgdGhlIHZhcmlhYmxlczoKLSMgICBjb250ZW50X3dlYl9pbnB1dF9maWxlczogbGlzdDoKLSMgICAgICAgUGF0aHMgdG8gZGF0YSBmaWxlcyBvciBkaXJlY3Rvcmllcy4gV2hlbiBhbiBpdGVtIGlzIGEgZGlyZWN0b3J5LAotIyAgICAgICB3aXRob3V0IHRoZSBmaW5hbCAiLyIsIHRoZSBkaXJlY3RvcnkgKGFsb25nIHdpdGggdGhlIGNvbnRlbnQpIHdpbGwgYmUKLSMgICAgICAgY29waWVkLCBvdGhlcndpc2Ugb25seSB0aGUgY29udGVudCB3aWxsIGJlIGNvcGllZC4KLSMgICBjb250ZW50X3dlYl9vdXRwdXRfc3ViZGlyOiBzdHJpbmc6Ci0jICAgICAgIERpcmVjdG9yeSB3aXRoaW4gdGhlICd3ZWInIGRpcmVjdG9yeSB0aGF0IGFsbCBpbnB1dCBmaWxlcyB3aWxsIGJlCi0jICAgICAgIGNvcGllZCB0by4gIEdlbmVyYWxseSwgdGhpcyBzaG91bGQgYmUgdGhlIGRpcmVjdG9yeSBvZiB0aGUgZ3lwaSBmaWxlCi0jICAgICAgIGNvbnRhaW5pbmcgdGhlIHRhcmdldCAoZS5nLiBpdCBzaG91bGQgYmUgImJhc2UiIGZvciB0aGUgdGFyZ2V0IGluCi0jICAgICAgIGJhc2UvYmFzZS5neXApLgotIyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNvbnRlbnRfd2ViX2lucHV0X2ZpbGVzIGFuZCBjb250ZW50X3dlYl9vdXRwdXRfc3ViZGlyCi0jIGhhdmUgc2ltaWxhciBwYXRocywgc28gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gd2ViLyB3aWxsIHJlZmxlY3QgdGhhdCBpbgotIyB0aGUgc291cmNlIGZvbGRlci4KLQotewotICAnaW5jbHVkZXMnOiBbICdjb250ZW50c19kaXIuZ3lwaScgXSwKLQotICAnYWN0aW9ucyc6IFsKLSAgICB7Ci0gICAgICAnYWN0aW9uX25hbWUnOiAnY29weV93ZWJfZmlsZXMnLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmNvcHlfZGF0YSAtLWlucHV0cyA8KGNvbnRlbnRfd2ViX2lucHV0X2ZpbGVzKSknLAotICAgICAgXSwKLSAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuY29weV9kYXRhIC1vIDwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpcikvd2ViLzwoY29udGVudF93ZWJfb3V0cHV0X3N1YmRpcikgLS1vdXRwdXRzIDwoY29udGVudF93ZWJfaW5wdXRfZmlsZXMpKScsCi0gICAgICBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfZGF0YS5weScsCi0gICAgICAgICctbycsICc8KHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIpL3dlYi88KGNvbnRlbnRfd2ViX291dHB1dF9zdWJkaXIpJywKLSAgICAgICAgJzxAKGNvbnRlbnRfd2ViX2lucHV0X2ZpbGVzKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0KLSAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdjb250ZW50X2RlcGxveV9zdWJkaXJzJzogWyAnd2ViLzwoY29udGVudF93ZWJfb3V0cHV0X3N1YmRpciknIF0KLSAgICB9Ci0gIH0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvZ2V0X2J1aWxkX2lkLnB5IGIvY29iYWx0L2J1aWxkL2dldF9idWlsZF9pZC5weQppbmRleCA4NDJlMmQ0Li4xNGY0ZjBkIDEwMDc1NQotLS0gYS9jb2JhbHQvYnVpbGQvZ2V0X2J1aWxkX2lkLnB5CisrKyBiL2NvYmFsdC9idWlsZC9nZXRfYnVpbGRfaWQucHkKQEAgLTE1LDEzICsxNSwxNyBAQAogIiIiUHJpbnRzIG91dCB0aGUgQ29iYWx0IEJ1aWxkIElELiIiIgogCiBpbXBvcnQgb3MKLWZyb20gZ3lwX3V0aWxzIGltcG9ydCBHZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIKK2Zyb20gY29iYWx0LmJ1aWxkLmJ1aWxkX251bWJlciBpbXBvcnQgR2V0T3JHZW5lcmF0ZU5ld0J1aWxkTnVtYmVyCiAKIAogZGVmIG1haW4oKToKKyAgIyBOb3RlICRCVUlMRF9JRF9TRVJWRVJfVVJMIHdpbGwgYWx3YXlzIGJlIHNldCBpbiBDSS4KICAgYnVpbGRfaWRfc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdCVUlMRF9JRF9TRVJWRVJfVVJMJykKICAgaWYgYnVpbGRfaWRfc2VydmVyX3VybDoKLSAgICBwcmludChHZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIodmVyc2lvbl9zZXJ2ZXI9YnVpbGRfaWRfc2VydmVyX3VybCkpCisgICAgYnVpbGRfbnVtID0gR2V0T3JHZW5lcmF0ZU5ld0J1aWxkTnVtYmVyKHZlcnNpb25fc2VydmVyPWJ1aWxkX2lkX3NlcnZlcl91cmwpCisgICAgaWYgYnVpbGRfbnVtID09IDA6CisgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgYnVpbGQgbnVtYmVyIHJlY2VpdmVkIHdhcyB6ZXJvLicpCisgICAgcHJpbnQoYnVpbGRfbnVtKQogICBlbHNlOgogICAgICMgTm8gbmVlZCB0byBnZW5lcmF0ZSBhIGJ1aWxkIGlkIGZvciBsb2NhbCBidWlsZHMuCiAgICAgcHJpbnQoJzAnKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2dldF9zdGFyYm9hcmRfcGF0aC5weSBiL2NvYmFsdC9idWlsZC9nZXRfc3RhcmJvYXJkX3BhdGgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYyNjM4ZjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L2J1aWxkL2dldF9zdGFyYm9hcmRfcGF0aC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSIiIlByaW50cyB0aGUgcGF0aCB0byB0aGUgZ2l2ZW4gc3RhcmJvYXJkIHBsYXRmb3JtJ3MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuCi0iIiIKLQotaW1wb3J0IHN5cwotCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBsYXRmb3JtCi0KLQotZGVmIG1haW4oKToKLSAgcGxhdGZvcm1faW5mbyA9IHBsYXRmb3JtLkdldChzeXMuYXJndlsxXSkKLSAgaWYgbm90IHBsYXRmb3JtX2luZm86Ci0gICAgcmV0dXJuIDEKLSAgcHJpbnQgcGxhdGZvcm1faW5mby5wYXRoCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2duLnB5IGIvY29iYWx0L2J1aWxkL2duLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOTNhZjBiYi4uODhmYTgxMwotLS0gYS9jb2JhbHQvYnVpbGQvZ24ucHkKKysrIGIvY29iYWx0L2J1aWxkL2duLnB5CkBAIC0xLDMgKzEsNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNywxOSArMTgsMTYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKIGZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAorZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKIAotX1JFUE9TSVRPUllfUk9PVCA9IG9zLnBhdGguYWJzcGF0aCgKLSAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCBvcy5wYXJkaXIpKQotc3lzLnBhdGguYXBwZW5kKF9SRVBPU0lUT1JZX1JPT1QpCi1mcm9tIHN0YXJib2FyZC5idWlsZC5wbGF0Zm9ybXMgaW1wb3J0IFBMQVRGT1JNUyAgIyBweWxpbnQ6ZGlzYWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24KK2Zyb20gc3RhcmJvYXJkLmJ1aWxkLnBsYXRmb3JtcyBpbXBvcnQgUExBVEZPUk1TCiAKIF9CVUlMRF9UWVBFUyA9IFsnZGVidWcnLCAnZGV2ZWwnLCAncWEnLCAnZ29sZCddCiAKIAogZGVmIG1haW4ob3V0X2RpcmVjdG9yeTogc3RyLCBwbGF0Zm9ybTogc3RyLCBidWlsZF90eXBlOiBzdHIsCi0gICAgICAgICBvdmVyd3JpdGVfYXJnczogYm9vbCwgY2hlY2tfZGVwZW5kZW5jaWVzOiBib29sKToKKyAgICAgICAgIG92ZXJ3cml0ZV9hcmdzOiBib29sLCBnbl9nZW5fYXJnczogTGlzdFtzdHJdKToKICAgcGxhdGZvcm1fcGF0aCA9IFBMQVRGT1JNU1twbGF0Zm9ybV0KICAgZHN0X2FyZ3NfZ25fZmlsZSA9IG9zLnBhdGguam9pbihvdXRfZGlyZWN0b3J5LCAnYXJncy5nbicpCiAgIHNyY19hcmdzX2duX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGxhdGZvcm1fcGF0aCwgJ2FyZ3MuZ24nKQpAQCAtMzgsMTMgKzM2LDEzIEBACiAKICAgaWYgb3ZlcndyaXRlX2FyZ3Mgb3Igbm90IG9zLnBhdGguZXhpc3RzKGRzdF9hcmdzX2duX2ZpbGUpOgogICAgIHNodXRpbC5jb3B5KHNyY19hcmdzX2duX2ZpbGUsIGRzdF9hcmdzX2duX2ZpbGUpCi0KICAgICB3aXRoIG9wZW4oZHN0X2FyZ3NfZ25fZmlsZSwgJ2EnKSBhcyBmOgogICAgICAgZi53cml0ZShmJ2J1aWxkX3R5cGUgPSAie2J1aWxkX3R5cGV9IlxuJykKLSAgZXh0cmFfYXJncyA9IFtdCi0gIGlmIGNoZWNrX2RlcGVuZGVuY2llczoKLSAgICBleHRyYV9hcmdzICs9IFsnLS1jaGVjayddCi0gIGduX2NvbW1hbmQgPSBbJ2duJywgJ2dlbicsIG91dF9kaXJlY3RvcnldICsgZXh0cmFfYXJncworICBlbHNlOgorICAgIHByaW50KGYne2RzdF9hcmdzX2duX2ZpbGV9IGFscmVhZHkgZXhpc3RzLicgKworICAgICAgICAgICcgUnVubmluZyBuaW5qYSB3aWxsIHJlZ2VuZXJhdGUgYnVpbGQgZmlsZXMgYXV0b21hdGljYWxseS4nKQorCisgIGduX2NvbW1hbmQgPSBbJ2duJywgJ2dlbicsIG91dF9kaXJlY3RvcnldICsgZ25fZ2VuX2FyZ3MKICAgcHJpbnQoJyAnLmpvaW4oZ25fY29tbWFuZCkpCiAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChnbl9jb21tYW5kKQogCkBAIC02NCw3ICs2Miw2IEBACiAgICAgICB0eXBlPXN0ciwKICAgICAgIGhlbHA9J1BhdGggdG8gdGhlIGRpcmVjdG9yeSBhIG5hbWVkIGJ1aWxkIGZvbGRlciwgPHBsYXRmb3JtPl88Y29uZmlnPi8sICcKICAgICAgICd3aWxsIGJlIGNyZWF0ZWQgaW4uJykKLQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJy1wJywKICAgICAgICctLXBsYXRmb3JtJywKQEAgLTg1LDIxICs4MiwxNSBAQAogICAgICAgaGVscD0nV2hldGhlciBvciBub3QgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGFyZ3MuZ24gZmlsZSBpZiBvbmUgZXhpc3RzICcKICAgICAgICdpbiB0aGUgb3V0IGRpcmVjdG9yeS4gSW4gZ2VuZXJhbCwgaWYgdGhlIGZpbGUgZXhpc3RzLCB5b3Ugc2hvdWxkIHJ1biAnCiAgICAgICAnYGduIGFyZ3MgPG91dF9kaXJlY3Rvcnk+YCB0byBlZGl0IGl0IGluc3RlYWQuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctLWNoZWNrJywKLSAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgaGVscD0nV2hldGhlciBvciBub3QgdG8gZ2VuZXJhdGUgdGhlIG5pbmphIGZpbGVzIHdpdGggdGhlIGduIC0tY2hlY2sgJwotICAgICAgJ29wdGlvbi4nKQotICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICBrbm93bl9hcmdzLCB1bmtub3duX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCiAKLSAgaWYgYXJncy5vdXRfZGlyZWN0b3J5OgotICAgIGJ1aWxkc19vdXRfZGlyZWN0b3J5ID0gYXJncy5vdXRfZGlyZWN0b3J5CisgIGlmIGtub3duX2FyZ3Mub3V0X2RpcmVjdG9yeToKKyAgICBidWlsZHNfb3V0X2RpcmVjdG9yeSA9IGtub3duX2FyZ3Mub3V0X2RpcmVjdG9yeQogICBlbHNlOgogICAgIGJ1aWxkc19kaXJlY3RvcnkgPSBvcy5nZXRlbnYoJ0NPQkFMVF9CVUlMRFNfRElSRUNUT1JZJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYnVpbGRzX2RpcmVjdG9yeSBvciAnb3V0JykKLSAgICBidWlsZHNfb3V0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihidWlsZHNfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYne2FyZ3MucGxhdGZvcm19X3thcmdzLmJ1aWxkX3R5cGV9JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duX2FyZ3MuYnVpbGRzX2RpcmVjdG9yeSBvciAnb3V0JykKKyAgICBidWlsZHNfb3V0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgYnVpbGRzX2RpcmVjdG9yeSwgZid7a25vd25fYXJncy5wbGF0Zm9ybX1fe2tub3duX2FyZ3MuYnVpbGRfdHlwZX0nKQogCi0gIG1haW4oYnVpbGRzX291dF9kaXJlY3RvcnksIGFyZ3MucGxhdGZvcm0sIGFyZ3MuYnVpbGRfdHlwZSwKLSAgICAgICBhcmdzLm92ZXJ3cml0ZV9hcmdzLCBhcmdzLmNoZWNrKQorICBtYWluKGJ1aWxkc19vdXRfZGlyZWN0b3J5LCBrbm93bl9hcmdzLnBsYXRmb3JtLCBrbm93bl9hcmdzLmJ1aWxkX3R5cGUsCisgICAgICAga25vd25fYXJncy5vdmVyd3JpdGVfYXJncywgdW5rbm93bl9hcmdzKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgYi9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTMyZjk3Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdAorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24yCi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIldyYXBwZXIgdG8gZ2VuZXJhdGUgYnVpbGQgZmlsZXMgZnJvbSAuZ3lwIGZpbGVzLiIiIgotCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZXh0d3JhcAotCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotZnJvbSBjb2JhbHQuYnVpbGQgaW1wb3J0IGNvYmFsdF9jb25maWd1cmF0aW9uCi1mcm9tIGNvYmFsdC5idWlsZCBpbXBvcnQgZ3lwX3V0aWxzCi1mcm9tIHN0YXJib2FyZC5idWlsZC5neXBfcnVubmVyIGltcG9ydCBHeXBSdW5uZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNvbW1hbmRfbGluZQotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNvbmZpZwotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGxvZ19sZXZlbAotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBsYXRmb3JtCi0KLSMgUmV0dXJuIHZhbHVlcyB1c2VkIGJ5IG1haW4oKS4KLVJFVFZBTF9TVUNDRVNTID0gMAotUkVUVkFMX0VSUk9SID0gMQotCi0KLWRlZiBfTGlzdEFzU3RyaW5nKGl0ZW1zKToKLSAgcmV0dXJuICcsICcuam9pbignIiVzIicgJSB4IGZvciB4IGluIGl0ZW1zKQotCi0KLWRlZiBfUGFyc2VDb21tYW5kTGluZUFyZ3VtZW50cyhhcmd2KToKLSAgIiIiUGFyc2VzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIiIiCi0KLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAotICAgICAgZGVzY3JpcHRpb249dGV4dHdyYXAuZGVkZW50KF9fZG9jX18pKQotCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLUMnLAotICAgICAgJy0tY29uZmlnJywKLSAgICAgIGRlc3Q9J2J1aWxkX2NvbmZpZ3MnLAotICAgICAgbWV0YXZhcj0nQ09ORklHJywKLSAgICAgIGFjdGlvbj0nYXBwZW5kJywKLSAgICAgIGRlZmF1bHQ9W10sCi0gICAgICBjaG9pY2VzPWNvbmZpZy5HZXRBbGwoKSwKLSAgICAgIGhlbHA9J1NwZWNpZmllcyBidWlsZCBjb25maWd1cmF0aW9ucy4gU3VwcG9ydGVkICcKLSAgICAgICdjb25maWd1cmF0aW9ucyBhcmUgJXMuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgJwotICAgICAgJ3RpbWVzLCBjcmVhdGVzIGFsbCBjb25maWd1cmF0aW9ucyBpZiBub3RoaW5nIGlzICcKLSAgICAgICdnaXZlbi4nICUgX0xpc3RBc1N0cmluZyhjb25maWcuR2V0QWxsKCkpKQotCi0gIGd5cF9kZWJ1Z19vcHRpb25zID0gYnVpbGQuR3lwRGVidWdPcHRpb25zKCkKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctRCcsCi0gICAgICAnLS1kZWJ1ZycsCi0gICAgICBkZXN0PSdkZWJ1ZycsCi0gICAgICBtZXRhdmFyPSdERUJVR01PREUnLAotICAgICAgYWN0aW9uPSdhcHBlbmQnLAotICAgICAgZGVmYXVsdD1bXSwKLSAgICAgIGNob2ljZXM9Z3lwX2RlYnVnX29wdGlvbnMgKyBbJ2FsbCddLAotICAgICAgaGVscD0nVHVybiBvbiBhIGRlYnVnZ2luZyBtb2RlIGZvciBkZWJ1Z2dpbmcgR1lQLiAnCi0gICAgICAnU3VwcG9ydGVkIG1vZGVzIGFyZSAlcyBvciAiYWxsIiBmb3IgYWxsIG9mICcKLSAgICAgICd0aGVtLicgJSBfTGlzdEFzU3RyaW5nKGd5cF9kZWJ1Z19vcHRpb25zKSkKLQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdDaGVjayBmb3JtYXQgb2YgZ3lwIGZpbGVzLicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLXYnLAotICAgICAgJy0tdmVyYm9zZScsCi0gICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgaGVscD0nRW5hYmxlcyB2ZXJib3NlIGxvZ2dpbmcuIEZvciBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgJwotICAgICAgImxvZ2dpbmcgbGV2ZWwgdXNlICctLWxvZ19sZXZlbCcgaW5zdGVhZC4iKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJ3BsYXRmb3JtJywKLSAgICAgIGNob2ljZXM9cGxhdGZvcm0uR2V0QWxsKCksCi0gICAgICBtZXRhdmFyPSdwbGF0Zm9ybScsCi0gICAgICBoZWxwPSdUYXJnZXQgcGxhdGZvcm0uIFN1cHBvcnRlZCBwbGF0Zm9ybXMgYXJlOiAlcy4nICUKLSAgICAgIChfTGlzdEFzU3RyaW5nKHBsYXRmb3JtLkdldEFsbCgpKSkpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnYnVpbGRfZmlsZScsCi0gICAgICBuYXJncz0nPycsCi0gICAgICBkZWZhdWx0PU5vbmUsCi0gICAgICBoZWxwPSdHWVAgYnVpbGQgZmlsZS4gVXNlcyBhbGwuZ3lwIGlmIG5vdGhpbmcgaXMgZ2l2ZW4uJykKLQotICBjb21tYW5kX2xpbmUuQWRkTG9nZ2luZ0FyZ3VtZW50cyhwYXJzZXIsIGRlZmF1bHQ9J3dhcm5pbmcnKQotCi0gIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQotICBvcHRpb25zLmFwcGxpY2F0aW9uID0gY29iYWx0X2NvbmZpZ3VyYXRpb24uQVBQTElDQVRJT05fTkFNRQotICByZXR1cm4gb3B0aW9ucwotCi0KLWRlZiBfR2V0QnVpbGRDb25maWdzKGJ1aWxkX2NvbmZpZ3MpOgotICBpZiBidWlsZF9jb25maWdzOgotICAgIHJldHVybiBidWlsZF9jb25maWdzCi0gIGVsc2U6Ci0gICAgZGVmYXVsdF9jb25maWcsIF8gPSBidWlsZC5HZXREZWZhdWx0Q29uZmlnQW5kUGxhdGZvcm0oKQotICAgIGlmIGRlZmF1bHRfY29uZmlnOgotICAgICAgcmV0dXJuIGRlZmF1bHRfY29uZmlnCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBjb25maWcuR2V0QWxsKCkKLQotCi1kZWYgbWFpbihhcmd2KToKLSAgb3B0aW9ucyA9IF9QYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzKGFyZ3YpCi0KLSAgbG9nX2xldmVsLkluaXRpYWxpemVMb2dnaW5nKG9wdGlvbnMpCi0KLSAgaWYgb3MuZW52aXJvbi5nZXQoJ0dZUF9ERUZJTkVTJyk6Ci0gICAgbG9nZ2luZy5lcnJvcignR1lQX0RFRklORVMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHN1cHBvcnRlZC4nKQotICAgIHJldHVybiBSRVRWQUxfRVJST1IKLQotICBidWlsZF9pZF9zZXJ2ZXJfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0JVSUxEX0lEX1NFUlZFUl9VUkwnKQotICBpZiBidWlsZF9pZF9zZXJ2ZXJfdXJsOgotICAgIG9wdGlvbnMuYnVpbGRfbnVtYmVyID0gZ3lwX3V0aWxzLkdldE9yR2VuZXJhdGVOZXdCdWlsZE51bWJlcigKLSAgICAgICAgdmVyc2lvbl9zZXJ2ZXI9YnVpbGRfaWRfc2VydmVyX3VybCkKLSAgZWxzZToKLSAgICBvcHRpb25zLmJ1aWxkX251bWJlciA9IGd5cF91dGlscy5HZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIoKQotCi0gIHRyeToKLSAgICBneXBfcnVubmVyID0gR3lwUnVubmVyKG9wdGlvbnMpCi0gIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKLSAgICBsb2dnaW5nLmVycm9yKGUpCi0gICAgcmV0dXJuIFJFVFZBTF9FUlJPUgotCi0gIGZvciBjb25maWdfbmFtZSBpbiBfR2V0QnVpbGRDb25maWdzKG9wdGlvbnMuYnVpbGRfY29uZmlncyk6Ci0gICAgbG9nZ2luZy5pbmZvKCdCdWlsZGluZyBjb25maWc6ICVzJywgY29uZmlnX25hbWUpCi0gICAgZ3lwX3JldHVybiA9IGd5cF9ydW5uZXIuQnVpbGRDb25maWcoY29uZmlnX25hbWUpCi0gICAgaWYgZ3lwX3JldHVybjoKLSAgICAgIGxvZ2dpbmcuZXJyb3IoJ0dZUCBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkLicsIGd5cF9yZXR1cm4pCi0gICAgICByZXR1cm4gZ3lwX3JldHVybgotCi0gIGxvZ2dpbmcuaW5mbygnRG9uZS4nKQotICByZXR1cm4gUkVUVkFMX1NVQ0NFU1MKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdC5iYXQgYi9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYTZkNWEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQGVjaG8gb2ZmCi0KLTo6Ci06OiBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi06OgotOjogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci06OiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi06OiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLTo6Ci06OiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi06OgotOjogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotOjogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLTo6IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotOjogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotOjogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi06OgotCi0KLTo6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIHVudGlsIENvYmFsdCBjYW4gR1lQIHdpdGhvdXQgdXNpbmcgQmFzaCBzcGVjaWZpYwotOjogY29tbWFuZHMuCi0KLXNldGxvY2FsCi1zZXQgU0NSSVBUX0RJUj0lfmRwMAotc2V0IEFSR1M9JSoKLQotcHl0aG9uMiAlU0NSSVBUX0RJUiVneXBfY29iYWx0ICVBUkdTJQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL2d5cF91dGlscy5weSBiL2NvYmFsdC9idWlsZC9neXBfdXRpbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZTg0ZDIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2J1aWxkL2d5cF91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDEyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlV0aWxpdGllcyBmb3IgdXNlIGJ5IGd5cF9jb2JhbHQgYW5kIG90aGVyIGJ1aWxkIHRvb2xzLiIiIgotCi1pbXBvcnQganNvbgotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotZnJvbSBzaXgubW92ZXMgaW1wb3J0IHVybGxpYgotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLWZyb20gY29iYWx0LnRvb2xzIGltcG9ydCBwYXRocwotCi1fU1VCUkVQT19QQVRIUyA9IFsnc3RhcmJvYXJkL2tleWJveGVzJ10KLV9WRVJTSU9OX1NFUlZFUl9VUkwgPSAnaHR0cHM6Ly9jYXJib24tYWlybG9jay05NTgyMy5hcHBzcG90LmNvbS9idWlsZF92ZXJzaW9uL2dlbmVyYXRlJyAgIyBweWxpbnQ6ZGlzYWJsZT1saW5lLXRvby1sb25nCi1fWFNTSV9QUkVGSVggPSAiKV19J1xuIgotCi0jIFRoZSBwYXRoIHRvIHRoZSBidWlsZC5pZCBmaWxlIHRoYXQgcHJlc2VydmVzIGEgYnVpbGQgSUQuCi1CVUlMRF9JRF9QQVRIID0gb3MucGF0aC5qb2luKHBhdGhzLkJVSUxEX1JPT1QsICdidWlsZC5pZCcpCi0KLQotZGVmIENoZWNrUmV2SW5mbyhrZXksIGN3ZD1Ob25lKToKLSAgZ2l0X2dldF9yZW1vdGVfYXJncyA9IFsnZ2l0JywgJ2NvbmZpZycsICctLWdldCcsICdyZW1vdGUub3JpZ2luLnVybCddCi0gIHJlbW90ZSA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAotICAgICAgZ2l0X2dldF9yZW1vdGVfYXJncywgY3dkPWN3ZCkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKLQotICBpZiByZW1vdGUuZW5kc3dpdGgoJy5naXQnKToKLSAgICByZW1vdGUgPSByZW1vdGVbOi1sZW4oJy5naXQnKV0KLQotICBnaXRfZ2V0X3JldmlzaW9uX2FyZ3MgPSBbJ2dpdCcsICdyZXYtcGFyc2UnLCAnSEVBRCddCi0gIHJldmlzaW9uID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCi0gICAgICBnaXRfZ2V0X3JldmlzaW9uX2FyZ3MsIGN3ZD1jd2QpLnN0cmlwKCkuZGVjb2RlKCd1dGYtOCcpCi0gIHJldHVybiB7a2V5OiAne31Ae30nLmZvcm1hdChyZW1vdGUsIHJldmlzaW9uKX0KLQotCi1kZWYgR2V0UmV2aW5mbygpOgotICAiIiJHZXQgYWJzb2x1dGUgc3RhdGUgb2YgYWxsIGdpdCByZXBvcy4iIiIKLSAgdHJ5OgotICAgIHJlcG9fcm9vdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ2l0JywgJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKLSAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgbG9nZ2luZy5pbmZvKCdDb3VsZCBub3QgZ2V0IHJlcG8gcm9vdC4gVHJ5aW5nIGFnYWluIGluIHNyYy8nKQotICAgIHRyeToKLSAgICAgIHJlcG9fcm9vdCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAotICAgICAgICAgIFsnZ2l0JywgJy1DJywgJ3NyYycsICdyZXYtcGFyc2UnLAotICAgICAgICAgICAnLS1zaG93LXRvcGxldmVsJ10pLnN0cmlwKCkuZGVjb2RlKCd1dGYtOCcpCi0gICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb246ICVzJywgZSkKLSAgICAgIHJldHVybiB7fQotCi0gICMgRmlyc3QgbWFrZSBzdXJlIHdlIGNhbiBhZGQgdGhlIGNvYmFsdF9zcmMgcmVwby4KLSAgdHJ5OgotICAgIHJlcG9zID0gQ2hlY2tSZXZJbmZvKCcuJywgY3dkPXJlcG9fcm9vdCkKLSAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgbG9nZ2luZy53YXJuaW5nKCdGYWlsZWQgdG8gZ2V0IHJldmlzaW9uIGluZm9ybWF0aW9uOiAlcycsIGUpCi0gICAgcmV0dXJuIHt9Ci0KLSAgZm9yIHJlbF9wYXRoIGluIF9TVUJSRVBPX1BBVEhTOgotICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocmVwb19yb290LCByZWxfcGF0aCkKLSAgICB0cnk6Ci0gICAgICByZXBvcy51cGRhdGUoQ2hlY2tSZXZJbmZvKHJlbF9wYXRoLCBjd2Q9cGF0aCkpCi0gICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6Ci0gICAgICBsb2dnaW5nLndhcm5pbmcoJ0ZhaWxlZCB0byBnZXQgcmV2aXNpb24gaW5mb3JtYXRpb24gZm9yIHN1YnJlcG8gJXM6ICVzJywKLSAgICAgICAgICAgICAgICAgICAgICByZWxfcGF0aCwgZSkKLSAgICAgIGNvbnRpbnVlCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgIGxvZ2dpbmcuaW5mbygnJXMuIFN1YnJlcG9zaXRvcnkgJXMgbm90IGZvdW5kLicsIGUsIHJlbF9wYXRoKQotICAgICAgY29udGludWUKLQotICByZXR1cm4gcmVwb3MKLQotCi0jIFdlIGxlYXZlIHRoaXMgZnVuY3Rpb24gaW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotIyBOZXcgY2FsbGVycyBzaG91bGQgdXNlIEdldE9yR2VuZXJhdGVOZXdCdWlsZE51bWJlci4KLWRlZiBHZXRCdWlsZE51bWJlcih2ZXJzaW9uX3NlcnZlcj1fVkVSU0lPTl9TRVJWRVJfVVJMKToKLSAgcmV0dXJuIEdldE9yR2VuZXJhdGVOZXdCdWlsZE51bWJlcih2ZXJzaW9uX3NlcnZlcikKLQotCi1kZWYgR2V0T3JHZW5lcmF0ZU5ld0J1aWxkTnVtYmVyKHZlcnNpb25fc2VydmVyPV9WRVJTSU9OX1NFUlZFUl9VUkwpOgotICAiIiJTZW5kIGEgcmVxdWVzdCB0byB0aGUgYnVpbGQgdmVyc2lvbiBzZXJ2ZXIgZm9yIGEgYnVpbGQgbnVtYmVyLiIiIgotCi0gIGlmIG9zLnBhdGguaXNmaWxlKEJVSUxEX0lEX1BBVEgpOgotICAgIHdpdGggb3BlbihCVUlMRF9JRF9QQVRILCAncicpIGFzIGJ1aWxkX2lkX2ZpbGU6Ci0gICAgICBidWlsZF9udW1iZXIgPSBpbnQoYnVpbGRfaWRfZmlsZS5yZWFkKCkucmVwbGFjZSgnXG4nLCAnJykpCi0gICAgICBsb2dnaW5nLmluZm8oJ1JldHJpZXZpbmcgYnVpbGQgbnVtYmVyIGZyb20gJXMnLCBCVUlMRF9JRF9QQVRIKQotICAgICAgcmV0dXJuIGJ1aWxkX251bWJlcgotCi0gIHJldmluZm8gPSBHZXRSZXZpbmZvKCkKLSAganNvbl9kZXBzID0ganNvbi5kdW1wcyhyZXZpbmZvKQotICB1c2VybmFtZSA9IG9zLmVudmlyb24uZ2V0KCdVU0VSTkFNRScsIG9zLmVudmlyb24uZ2V0KCdVU0VSJykpCi0KLSAgcG9zdF9kYXRhID0geydkZXBzJzoganNvbl9kZXBzfQotICBpZiB1c2VybmFtZToKLSAgICBwb3N0X2RhdGFbJ3VzZXInXSA9IHVzZXJuYW1lCi0KLSAgbG9nZ2luZy5kZWJ1ZygnUG9zdCBkYXRhIGlzICVzJywgcG9zdF9kYXRhKQotICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh2ZXJzaW9uX3NlcnZlcikKLSAgIyBUT0RPOiByZXRyeSBvbiB0aW1lb3V0LgotICB0cnk6Ci0gICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCAgIyBweWxpbnQ6IGRpc2FibGU9Y29uc2lkZXItdXNpbmctd2l0aAotICAgICAgICByZXF1ZXN0LAotICAgICAgICBkYXRhPXVybGxpYi5wYXJzZS51cmxlbmNvZGUocG9zdF9kYXRhKS5lbmNvZGUoJ3V0Zi04JykpCi0gICAgZGF0YSA9IHJlc3BvbnNlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKLSAgICBpZiBkYXRhLmZpbmQoX1hTU0lfUFJFRklYKSA9PSAwOgotICAgICAgZGF0YSA9IGRhdGFbbGVuKF9YU1NJX1BSRUZJWCk6XQotICAgIHJlc3VsdHMgPSBqc29uLmxvYWRzKGRhdGEpCi0gICAgYnVpbGRfbnVtYmVyID0gcmVzdWx0cy5nZXQoJ2J1aWxkX251bWJlcicsIDApCi0gICAgcmV0dXJuIGJ1aWxkX251bWJlcgotICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlOgotICAgIGxvZ2dpbmcud2FybmluZygnRmFpbGVkIHRvIHJldHJpZXZlIGJ1aWxkIG51bWJlcjogJXMnLCBlKQotICAgIHJldHVybiAwCi0gIGV4Y2VwdCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IgYXMgZToKLSAgICBsb2dnaW5nLndhcm5pbmcoJ0NvdWxkIG5vdCBjb25uZWN0IHRvICVzOiAlcycsIHZlcnNpb25fc2VydmVyLCBlKQotICAgIHJldHVybiAwCi0KLQotZGVmIEdldENvbnN0YW50VmFsdWUoZmlsZV9wYXRoLCBjb25zdGFudF9uYW1lKToKLSAgIiIiUmV0dXJuIGFuIHJ2YWx1ZSBmcm9tIGEgQysrIGhlYWRlciBmaWxlLgotCi0gIFNlYXJjaCBhIEMvQysrIGhlYWRlciBmaWxlIGF0IHxmaWxlX3BhdGh8IGZvciBhbiBhc3NpZ25tZW50IHRvIHRoZQotICBjb25zdGFudCBuYW1lZCB8Y29uc3RhbnRfbmFtZXwuIFRoZSBydmFsdWUgZm9yIHRoZSBhc3NpZ25tZW50IG11c3QgYmUgYQotICBsaXRlcmFsIGNvbnN0YW50IG9yIGFuIGV4cHJlc3Npb24gb2YgbGl0ZXJhbCBjb25zdGFudHMuCi0KLSAgQXJnczoKLSAgICBmaWxlX3BhdGg6IEhlYWRlciBmaWxlIHRvIHNlYXJjaC4KLSAgICBjb25zdGFudF9uYW1lOiBOYW1lIG9mIEMrKyBydmFsdWUgdG8gZXZhbHVhdGUuCi0KLSAgUmV0dXJuczoKLSAgICBjb25zdGFudF9uYW1lIGFzIGFuIGV2YWx1YXRlZCBleHByZXNzaW9uLgotICAiIiIKLQotICBzZWFyY2hfcmUgPSByZS5jb21waWxlKHInJXNccyo9XHMqKFtcZFwrXC0qL1xzXChcKV0qKTsnICUgY29uc3RhbnRfbmFtZSkKLSAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3InKSBhcyBmOgotICAgIG1hdGNoID0gc2VhcmNoX3JlLnNlYXJjaChmLnJlYWQoKSkKLQotICBpZiBub3QgbWF0Y2g6Ci0gICAgbG9nZ2luZy5jcml0aWNhbCgKLSAgICAgICAgJ0NvdWxkIG5vdCBxdWVyeSBjb25zdGFudCB2YWx1ZS4gIFRoZSBleHByZXNzaW9uICcKLSAgICAgICAgJ3Nob3VsZCBvbmx5IGhhdmUgbnVtYmVycywgb3BlcmF0b3JzLCBzcGFjZXMsIGFuZCAnCi0gICAgICAgICdwYXJlbnMuICBQbGVhc2UgY2hlY2sgIiVzIiBpbiAlcy5cbicsIGNvbnN0YW50X25hbWUsIGZpbGVfcGF0aCkKLSAgICBzeXMuZXhpdCgxKQotCi0gIGV4cHJlc3Npb24gPSBtYXRjaC5ncm91cCgxKQotICB2YWx1ZSA9IGV2YWwoZXhwcmVzc2lvbikgICMgcHlsaW50OmRpc2FibGU9ZXZhbC11c2VkCi0gIHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEvY29iYWx0L2J1aWxkL3BhdGhfY29udmVyc2lvbi5weSBiL2NvYmFsdC9idWlsZC9wYXRoX2NvbnZlcnNpb24ucHkKaW5kZXggN2NhYWQyOC4uODc0ZjExMSAxMDA2NDQKLS0tIGEvY29iYWx0L2J1aWxkL3BhdGhfY29udmVyc2lvbi5weQorKysgYi9jb2JhbHQvYnVpbGQvcGF0aF9jb252ZXJzaW9uLnB5CkBAIC0xMDQsNSArMTA0LDUgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBwcmludCBEb01haW4oc3lzLmFyZ3ZbMTpdKQorICBwcmludChEb01haW4oc3lzLmFyZ3ZbMTpdKSkKICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2NvYmFsdC9idWlsZC9wYXRoX2NvbnZlcnNpb25fdGVzdC5weSBiL2NvYmFsdC9idWlsZC9wYXRoX2NvbnZlcnNpb25fdGVzdC5weQppbmRleCBiMDM1MjRmLi5lMDI0NWIxIDEwMDY0NAotLS0gYS9jb2JhbHQvYnVpbGQvcGF0aF9jb252ZXJzaW9uX3Rlc3QucHkKKysrIGIvY29iYWx0L2J1aWxkL3BhdGhfY29udmVyc2lvbl90ZXN0LnB5CkBAIC0xMiwxMiArMTIsMTEgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KKyIiIlBhdGggY29udmVyc2lvbiB0ZXN0LiIiIgogCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCxyZWxhdGl2ZS1pbXBvcnQKIGZyb20gY29iYWx0LmJ1aWxkLnBhdGhfY29udmVyc2lvbiBpbXBvcnQgQ29udmVydFBhdGgKIAogCmRpZmYgLS1naXQgYS9jb2JhbHQvYnVpbGQvc2F2ZV9idWlsZF9pZC5weSBiL2NvYmFsdC9idWlsZC9zYXZlX2J1aWxkX2lkLnB5CmluZGV4IDMyMmRhMDUuLmNkZDBkMDEgMTAwNzU1Ci0tLSBhL2NvYmFsdC9idWlsZC9zYXZlX2J1aWxkX2lkLnB5CisrKyBiL2NvYmFsdC9idWlsZC9zYXZlX2J1aWxkX2lkLnB5CkBAIC0yMCwxMCArMjAsMTAgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0ZXh0d3JhcAogCi1pbXBvcnQgZ3lwX3V0aWxzCitmcm9tIGNvYmFsdC5idWlsZCBpbXBvcnQgYnVpbGRfbnVtYmVyCiAKIF9TQ1JJUFRfRElSID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi1fQlVJTERfSURfUEFUSCA9IGd5cF91dGlscy5CVUlMRF9JRF9QQVRICitfQlVJTERfSURfUEFUSCA9IGJ1aWxkX251bWJlci5CVUlMRF9JRF9QQVRICiAKICMgUmV0dXJuIHZhbHVlcyB1c2VkIGJ5IG1haW4oKS4KIFJFVFZBTF9TVUNDRVNTID0gMApAQCAtNjUsMTAgKzY1LDEwIEBACiAgIGlmIG5vdCBvcHRpb25zLmJ1aWxkX2lkOgogICAgIGJ1aWxkX2lkX3NlcnZlcl91cmwgPSBvcy5lbnZpcm9uLmdldCgnQlVJTERfSURfU0VSVkVSX1VSTCcpCiAgICAgaWYgYnVpbGRfaWRfc2VydmVyX3VybDoKLSAgICAgIG9wdGlvbnMuYnVpbGRfaWQgPSBneXBfdXRpbHMuR2V0T3JHZW5lcmF0ZU5ld0J1aWxkTnVtYmVyKAorICAgICAgb3B0aW9ucy5idWlsZF9pZCA9IGJ1aWxkX251bWJlci5HZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIoCiAgICAgICAgICAgdmVyc2lvbl9zZXJ2ZXI9YnVpbGRfaWRfc2VydmVyX3VybCkKICAgICBlbHNlOgotICAgICAgb3B0aW9ucy5idWlsZF9pZCA9IGd5cF91dGlscy5HZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIoKQorICAgICAgb3B0aW9ucy5idWlsZF9pZCA9IGJ1aWxkX251bWJlci5HZXRPckdlbmVyYXRlTmV3QnVpbGROdW1iZXIoKQogCiAgIGlmIG5vdCBvcHRpb25zLmJ1aWxkX2lkOgogICAgIGxvZ2dpbmcuZXJyb3IoJ1VuYWJsZSB0byByZXRyaWV2ZSBidWlsZCBpZC4nKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jYyBiL2NvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uY2MKaW5kZXggNmJjNDJhMi4uOGUxZmQ2NCAxMDA2NDQKLS0tIGEvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5jYworKysgYi9jb2JhbHQvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmNjCkBAIC01NiwxOCArNTYsMTIgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdFVzZXJPbkV4aXRTdHJhdGVneSgpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9VU0VSX09OX0VYSVRfU1RSQVRFR1kpCiAjZXJyb3IgIkNPQkFMVF9VU0VSX09OX0VYSVRfU1RSQVRFR1kgaXMgZGVwcmVjYXRlZCBhZnRlciBTdGFyYm9hcmQgdmVyc2lvbiAxMi4iCiAjZXJyb3IgIkltcGxlbWVudCBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpOjpDb2JhbHRVc2VyT25FeGl0U3RyYXRlZ3koKSIKICNlcnJvciAiaW5zdGVhZC4iCiAjZW5kaWYKICAgcmV0dXJuICJzdG9wIjsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX1VTRVJfT05fRVhJVF9TVFJBVEVHWSkKLSAgcmV0dXJuIENPQkFMVF9VU0VSX09OX0VYSVRfU1RSQVRFR1k7Ci0jZWxzZQotICByZXR1cm4gInN0b3AiOwotI2VuZGlmCiB9CiAKIGJvb2wgQ29uZmlndXJhdGlvbjo6Q29iYWx0UmVuZGVyRGlydHlSZWdpb25Pbmx5KCkgewpAQCAtODIsNyArNzYsNiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0UmVuZGVyRGlydHlSZWdpb25Pbmx5KCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX1JFTkRFUl9ESVJUWV9SRUdJT05fT05MWSkKICNlcnJvciBcCiAgICAgIkNPQkFMVF9SRU5ERVJfRElSVFlfUkVHSU9OX09OTFkgaXMgZGVwcmVjYXRlZCBhZnRlciBTdGFyYm9hcmQgdmVyc2lvbiAxMi4iCkBAIC05MSwxMSArODQsNiBAQAogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gZmFsc2U7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9SRU5ERVJfRElSVFlfUkVHSU9OX09OTFkpCi0gIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIGludCBDb25maWd1cmF0aW9uOjpDb2JhbHRFZ2xTd2FwSW50ZXJ2YWwoKSB7CkBAIC0xMDksMTggKzk3LDEyIEBACiAjZW5kaWYKICAgICByZXR1cm4gY29uZmlndXJhdGlvbl9hcGlfLT5Db2JhbHRFZ2xTd2FwSW50ZXJ2YWwoKTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChDT0JBTFRfRUdMX1NXQVBfSU5URVJWQUwpCiAjZXJyb3IgIkNPQkFMVF9FR0xfU1dBUF9JTlRFUlZBTCBpcyBkZXByZWNhdGVkIGFmdGVyIFN0YXJib2FyZCB2ZXJzaW9uIDEyLiIKICNlcnJvciAiSW1wbGVtZW50IENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGk6OkNvYmFsdEVnbFN3YXBJbnRlcnZhbCgpIgogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gMTsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX0VHTF9TV0FQX0lOVEVSVkFMKQotICByZXR1cm4gQ09CQUxUX0VHTF9TV0FQX0lOVEVSVkFMOwotI2Vsc2UKLSAgcmV0dXJuIDE7Ci0jZW5kaWYKIH0KIAogY29uc3QgY2hhciogQ29uZmlndXJhdGlvbjo6Q29iYWx0RmFsbGJhY2tTcGxhc2hTY3JlZW5VcmwoKSB7CkBAIC0xMzUsNyArMTE3LDYgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdEZhbGxiYWNrU3BsYXNoU2NyZWVuVXJsKCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX0ZBTExCQUNLX1NQTEFTSF9TQ1JFRU5fVVJMKQogLy8gTk9MSU5UTkVYVExJTkUod2hpdGVzcGFjZS9saW5lX2xlbmd0aCkKICNlcnJvciBcCkBAIC0xNDYsMTEgKzEyNyw2IEBACiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiAibm9uZSI7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9GQUxMQkFDS19TUExBU0hfU0NSRUVOX1VSTCkKLSAgcmV0dXJuIENPQkFMVF9GQUxMQkFDS19TUExBU0hfU0NSRUVOX1VSTDsKLSNlbHNlCi0gIHJldHVybiAibm9uZSI7Ci0jZW5kaWYKIH0KIAogY29uc3QgY2hhciogQ29uZmlndXJhdGlvbjo6Q29iYWx0RmFsbGJhY2tTcGxhc2hTY3JlZW5Ub3BpY3MoKSB7CkBAIC0xNzEsMTggKzE0NywxMiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0RW5hYmxlUXVpYygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9FTkFCTEVfUVVJQykKICNlcnJvciAiQ09CQUxUX0VOQUJMRV9RVUlDIGlzIGRlcHJlY2F0ZWQgYWZ0ZXIgU3RhcmJvYXJkIHZlcnNpb24gMTIuIgogI2Vycm9yICJJbXBsZW1lbnQgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaTo6Q29iYWx0RW5hYmxlUXVpYygpIgogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gdHJ1ZTsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX0VOQUJMRV9RVUlDKQotICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0U2tpYUNhY2hlU2l6ZUluQnl0ZXMoKSB7CkBAIC0xOTcsNyArMTY3LDYgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdFNraWFDYWNoZVNpemVJbkJ5dGVzKCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX1NLSUFfQ0FDSEVfU0laRV9JTl9CWVRFUykKICNlcnJvciBcCiAgICAgIkNPQkFMVF9TS0lBX0NBQ0hFX1NJWkVfSU5fQllURVMgaXMgZGVwcmVjYXRlZCBhZnRlciBTdGFyYm9hcmQgdmVyc2lvbiAxMi4iCkBAIC0yMDUsMTEgKzE3NCw2IEBACiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiA0ICogMTAyNCAqIDEwMjQ7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9TS0lBX0NBQ0hFX1NJWkVfSU5fQllURVMpCi0gIHJldHVybiBDT0JBTFRfU0tJQV9DQUNIRV9TSVpFX0lOX0JZVEVTOwotI2Vsc2UKLSAgcmV0dXJuIDQgKiAxMDI0ICogMTAyNDsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0T2Zmc2NyZWVuVGFyZ2V0Q2FjaGVTaXplSW5CeXRlcygpIHsKQEAgLTIyNSw3ICsxODksNiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0T2Zmc2NyZWVuVGFyZ2V0Q2FjaGVTaXplSW5CeXRlcygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9PRkZTQ1JFRU5fVEFSR0VUX0NBQ0hFX1NJWkVfSU5fQllURVMpCiAvLyBOT0xJTlRORVhUTElORSh3aGl0ZXNwYWNlL2xpbmVfbGVuZ3RoKQogI2Vycm9yIFwKQEAgLTIzNiwxMSArMTk5LDYgQEAKICNlcnJvciAiaW5zdGVhZC4iCiAjZW5kaWYKICAgcmV0dXJuIC0xOwotI2VsaWYgZGVmaW5lZChDT0JBTFRfT0ZGU0NSRUVOX1RBUkdFVF9DQUNIRV9TSVpFX0lOX0JZVEVTKQotICByZXR1cm4gQ09CQUxUX09GRlNDUkVFTl9UQVJHRVRfQ0FDSEVfU0laRV9JTl9CWVRFUzsKLSNlbHNlCi0gIHJldHVybiAtMTsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0RW5jb2RlZEltYWdlQ2FjaGVTaXplSW5CeXRlcygpIHsKQEAgLTI1Niw3ICsyMTQsNiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0RW5jb2RlZEltYWdlQ2FjaGVTaXplSW5CeXRlcygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9FTkNPREVEX0lNQUdFX0NBQ0hFX1NJWkVfSU5fQllURVMpCiAvLyBOT0xJTlRORVhUTElORSh3aGl0ZXNwYWNlL2xpbmVfbGVuZ3RoKQogI2Vycm9yIFwKQEAgLTI2NywxMSArMjI0LDYgQEAKICNlcnJvciAiaW5zdGVhZC4iCiAjZW5kaWYKICAgcmV0dXJuIDEwMjQgKiAxMDI0OwotI2VsaWYgZGVmaW5lZChDT0JBTFRfRU5DT0RFRF9JTUFHRV9DQUNIRV9TSVpFX0lOX0JZVEVTKQotICByZXR1cm4gQ09CQUxUX0VOQ09ERURfSU1BR0VfQ0FDSEVfU0laRV9JTl9CWVRFUzsKLSNlbHNlCi0gIHJldHVybiAxMDI0ICogMTAyNDsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0SW1hZ2VDYWNoZVNpemVJbkJ5dGVzKCkgewpAQCAtMjg2LDcgKzIzOCw2IEBACiAjZW5kaWYKICAgICByZXR1cm4gY29uZmlndXJhdGlvbl9hcGlfLT5Db2JhbHRJbWFnZUNhY2hlU2l6ZUluQnl0ZXMoKTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChDT0JBTFRfSU1BR0VfQ0FDSEVfU0laRV9JTl9CWVRFUykKICNlcnJvciBcCiAgICAgIkNPQkFMVF9JTUFHRV9DQUNIRV9TSVpFX0lOX0JZVEVTIGlzIGRlcHJlY2F0ZWQgYWZ0ZXIgU3RhcmJvYXJkIHZlcnNpb24gMTIuIgpAQCAtMjk1LDExICsyNDYsNiBAQAogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gLTE7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9JTUFHRV9DQUNIRV9TSVpFX0lOX0JZVEVTKQotICByZXR1cm4gQ09CQUxUX0lNQUdFX0NBQ0hFX1NJWkVfSU5fQllURVM7Ci0jZWxzZQotICByZXR1cm4gLTE7Ci0jZW5kaWYKIH0KIAogaW50IENvbmZpZ3VyYXRpb246OkNvYmFsdExvY2FsVHlwZWZhY2VDYWNoZVNpemVJbkJ5dGVzKCkgewpAQCAtMzE0LDcgKzI2MCw2IEBACiAjZW5kaWYKICAgICByZXR1cm4gY29uZmlndXJhdGlvbl9hcGlfLT5Db2JhbHRMb2NhbFR5cGVmYWNlQ2FjaGVTaXplSW5CeXRlcygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9MT0NBTF9UWVBFRkFDRV9DQUNIRV9TSVpFX0lOX0JZVEVTKQogLy8gTk9MSU5UTkVYVExJTkUod2hpdGVzcGFjZS9saW5lX2xlbmd0aCkKICNlcnJvciBcCkBAIC0zMjUsMTEgKzI3MCw2IEBACiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiAxNiAqIDEwMjQgKiAxMDI0OwotI2VsaWYgZGVmaW5lZChDT0JBTFRfTE9DQUxfVFlQRUZBQ0VfQ0FDSEVfU0laRV9JTl9CWVRFUykKLSAgcmV0dXJuIENPQkFMVF9MT0NBTF9UWVBFRkFDRV9DQUNIRV9TSVpFX0lOX0JZVEVTOwotI2Vsc2UKLSAgcmV0dXJuIDE2ICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKIH0KIAogaW50IENvbmZpZ3VyYXRpb246OkNvYmFsdFJlbW90ZVR5cGVmYWNlQ2FjaGVTaXplSW5CeXRlcygpIHsKQEAgLTM0NCw3ICsyODQsNiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0UmVtb3RlVHlwZWZhY2VDYWNoZVNpemVJbkJ5dGVzKCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX1JFTU9URV9UWVBFRkFDRV9DQUNIRV9TSVpFX0lOX0JZVEVTKQogLy8gTk9MSU5UTkVYVExJTkUod2hpdGVzcGFjZS9saW5lX2xlbmd0aCkKICNlcnJvciBcCkBAIC0zNTUsMTEgKzI5NCw2IEBACiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiA0ICogMTAyNCAqIDEwMjQ7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9SRU1PVEVfVFlQRUZBQ0VfQ0FDSEVfU0laRV9JTl9CWVRFUykKLSAgcmV0dXJuIENPQkFMVF9SRU1PVEVfVFlQRUZBQ0VfQ0FDSEVfU0laRV9JTl9CWVRFUzsKLSNlbHNlCi0gIHJldHVybiA0ICogMTAyNCAqIDEwMjQ7Ci0jZW5kaWYKIH0KIAogaW50IENvbmZpZ3VyYXRpb246OkNvYmFsdE1lc2hDYWNoZVNpemVJbkJ5dGVzKCkgewpAQCAtMzc0LDcgKzMwOCw2IEBACiAjZW5kaWYKICAgICByZXR1cm4gY29uZmlndXJhdGlvbl9hcGlfLT5Db2JhbHRNZXNoQ2FjaGVTaXplSW5CeXRlcygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9NRVNIX0NBQ0hFX1NJWkVfSU5fQllURVMpCiAjZXJyb3IgXAogICAgICJDT0JBTFRfTUVTSF9DQUNIRV9TSVpFX0lOX0JZVEVTIGlzIGRlcHJlY2F0ZWQgYWZ0ZXIgU3RhcmJvYXJkIHZlcnNpb24gMTIuIgpAQCAtMzgyLDExICszMTUsNiBAQAogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gMTAyNCAqIDEwMjQ7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9NRVNIX0NBQ0hFX1NJWkVfSU5fQllURVMpCi0gIHJldHVybiBDT0JBTFRfTUVTSF9DQUNIRV9TSVpFX0lOX0JZVEVTOwotI2Vsc2UKLSAgcmV0dXJuIDEwMjQgKiAxMDI0OwotI2VuZGlmCiB9CiAKIC8vIERlcHJlY2F0ZWQsIG9ubHkgcmV0YWluZWQgYXMgY29uZmlnIEFQSSBwbGFjZWhvbGRlci4KQEAgLTQwNyw3ICszMzUsNiBAQAogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8KICAgICAgICAgLT5Db2JhbHRJbWFnZUNhY2hlQ2FwYWNpdHlNdWx0aXBsaWVyV2hlblBsYXlpbmdWaWRlbygpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9JTUFHRV9DQUNIRV9DQVBBQ0lUWV9NVUxUSVBMSUVSX1dIRU5fUExBWUlOR19WSURFTykKIC8vIE5PTElOVE5FWFRMSU5FKHdoaXRlc3BhY2UvbGluZV9sZW5ndGgpCiAjZXJyb3IgXApAQCAtNDE4LDExICszNDUsNiBAQAogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gMS4wZjsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX0lNQUdFX0NBQ0hFX0NBUEFDSVRZX01VTFRJUExJRVJfV0hFTl9QTEFZSU5HX1ZJREVPKQotICByZXR1cm4gQ09CQUxUX0lNQUdFX0NBQ0hFX0NBUEFDSVRZX01VTFRJUExJRVJfV0hFTl9QTEFZSU5HX1ZJREVPOwotI2Vsc2UKLSAgcmV0dXJuIDEuMGY7Ci0jZW5kaWYKIH0KIAogaW50IENvbmZpZ3VyYXRpb246OkNvYmFsdFNraWFHbHlwaEF0bGFzV2lkdGgoKSB7CkBAIC00MzcsMTggKzM1OSwxMiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0U2tpYUdseXBoQXRsYXNXaWR0aCgpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9TS0lBX0dMWVBIX0FUTEFTX1dJRFRIKQogI2Vycm9yICJDT0JBTFRfU0tJQV9HTFlQSF9BVExBU19XSURUSCBpcyBkZXByZWNhdGVkIGFmdGVyIFN0YXJib2FyZCB2ZXJzaW9uIDEyLiIKICNlcnJvciAiSW1wbGVtZW50IENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGk6OkNvYmFsdFNraWFHbHlwaEF0bGFzV2lkdGgoKSIKICNlcnJvciAiaW5zdGVhZC4iCiAjZW5kaWYKICAgcmV0dXJuIDIwNDg7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9TS0lBX0dMWVBIX0FUTEFTX1dJRFRIKQotICByZXR1cm4gQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfV0lEVEg7Ci0jZWxzZQotICByZXR1cm4gMjA0ODsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0U2tpYUdseXBoQXRsYXNIZWlnaHQoKSB7CkBAIC00NjMsNyArMzc5LDYgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdFNraWFHbHlwaEF0bGFzSGVpZ2h0KCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfSEVJR0hUKQogI2Vycm9yIFwKICAgICAiQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfSEVJR0hUIGlzIGRlcHJlY2F0ZWQgYWZ0ZXIgU3RhcmJvYXJkIHZlcnNpb24gMTIuIgpAQCAtNDcxLDExICszODYsNiBAQAogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gMjA0ODsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfSEVJR0hUKQotICByZXR1cm4gQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfSEVJR0hUOwotI2Vsc2UKLSAgcmV0dXJuIDIwNDg7Ci0jZW5kaWYKIH0KIAogaW50IENvbmZpZ3VyYXRpb246OkNvYmFsdFJlZHVjZUNwdU1lbW9yeUJ5KCkgewpAQCAtNDg5LDE4ICszOTksMTIgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdFJlZHVjZUNwdU1lbW9yeUJ5KCk7CiAgIH0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2lmIGRlZmluZWQoQ09CQUxUX1JFRFVDRV9DUFVfTUVNT1JZX0JZKQogI2Vycm9yICJDT0JBTFRfUkVEVUNFX0NQVV9NRU1PUllfQlkgaXMgZGVwcmVjYXRlZCBhZnRlciBTdGFyYm9hcmQgdmVyc2lvbiAxMi4iCiAjZXJyb3IgIkltcGxlbWVudCBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpOjpDb2JhbHRSZWR1Y2VDcHVNZW1vcnlCeSgpIgogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gLTE7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9SRURVQ0VfQ1BVX01FTU9SWV9CWSkKLSAgcmV0dXJuIENPQkFMVF9SRURVQ0VfQ1BVX01FTU9SWV9CWTsKLSNlbHNlCi0gIHJldHVybiAtMTsKLSNlbmRpZgogfQogCiBpbnQgQ29uZmlndXJhdGlvbjo6Q29iYWx0UmVkdWNlR3B1TWVtb3J5QnkoKSB7CkBAIC01MTQsMTggKzQxOCwxMiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0UmVkdWNlR3B1TWVtb3J5QnkoKTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChDT0JBTFRfUkVEVUNFX0dQVV9NRU1PUllfQlkpCiAjZXJyb3IgIkNPQkFMVF9SRURVQ0VfR1BVX01FTU9SWV9CWSBpcyBkZXByZWNhdGVkIGFmdGVyIFN0YXJib2FyZCB2ZXJzaW9uIDEyLiIKICNlcnJvciAiSW1wbGVtZW50IENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGk6OkNvYmFsdFJlZHVjZUdwdU1lbW9yeUJ5KCkiCiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiAtMTsKLSNlbGlmIGRlZmluZWQoQ09CQUxUX1JFRFVDRV9HUFVfTUVNT1JZX0JZKQotICByZXR1cm4gQ09CQUxUX1JFRFVDRV9HUFVfTUVNT1JZX0JZOwotI2Vsc2UKLSAgcmV0dXJuIC0xOwotI2VuZGlmCiB9CiAKIGJvb2wgQ29uZmlndXJhdGlvbjo6Q29iYWx0R2NaZWFsKCkgewpAQCAtNTM5LDE4ICs0MzcsMTIgQEAKICNlbmRpZgogICAgIHJldHVybiBjb25maWd1cmF0aW9uX2FwaV8tPkNvYmFsdEdjWmVhbCgpOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpZiBkZWZpbmVkKENPQkFMVF9HQ19aRUFMKQogI2Vycm9yICJDT0JBTFRfR0NfWkVBTCBpcyBkZXByZWNhdGVkIGFmdGVyIFN0YXJib2FyZCB2ZXJzaW9uIDEyLiIKICNlcnJvciAiSW1wbGVtZW50IENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGk6OkNvYmFsdEdjWmVhbCgpIgogI2Vycm9yICJpbnN0ZWFkLiIKICNlbmRpZgogICByZXR1cm4gZmFsc2U7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9HQ19aRUFMKQotICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gIHJldHVybiBmYWxzZTsKLSNlbmRpZgogfQogCiBjb25zdCBjaGFyKiBDb25maWd1cmF0aW9uOjpDb2JhbHRSYXN0ZXJpemVyVHlwZSgpIHsKQEAgLTU2Niw3ICs0NTgsNiBAQAogI2VuZGlmCiAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25fYXBpXy0+Q29iYWx0UmFzdGVyaXplclR5cGUoKTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChDT0JBTFRfRk9SQ0VfU1RVQl9SQVNURVJJWkVSKSB8fCBcCiAgICAgZGVmaW5lZChDT0JBTFRfRk9SQ0VfRElSRUNUX0dMRVNfUkFTVEVSSVpFUikKICNlcnJvciAiQ09CQUxUX0ZPUkNFX1NUVUJfUkFTVEVSSVpFUiBhbmQgQ09CQUxUX0ZPUkNFX0RJUkVDVF9HTEVTX1JBU1RFUklaRVIiCkBAIC01NzQsMTMgKzQ2NSw2IEBACiAjZXJyb3IgIkNvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGk6OkNvYmFsdFJhc3Rlcml6ZXJUeXBlKCkgaW5zdGVhZC4iCiAjZW5kaWYKICAgcmV0dXJuICJkaXJlY3QtZ2xlcyI7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9GT1JDRV9TVFVCX1JBU1RFUklaRVIpCi0gIHJldHVybiAic3R1YiI7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9GT1JDRV9ESVJFQ1RfR0xFU19SQVNURVJJWkVSKQotICByZXR1cm4gImRpcmVjdC1nbGVzIjsKLSNlbHNlCi0gIHJldHVybiAiaGFyZHdhcmUiOwotI2VuZGlmCiB9CiAKIGJvb2wgQ29uZmlndXJhdGlvbjo6Q29iYWx0RW5hYmxlSml0KCkgewpAQCAtNTk0LDcgKzQ3OCw2IEBACiAjZW5kaWYKICAgICByZXR1cm4gY29uZmlndXJhdGlvbl9hcGlfLT5Db2JhbHRFbmFibGVKaXQoKTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChFTkdJTkVfU1VQUE9SVFNfSklUKSB8fCBkZWZpbmVkKENPQkFMVF9ESVNBQkxFX0pJVCkKICNlcnJvciAiRU5HSU5FX1NVUFBPUlRTX0pJVCBhbmQgQ09CQUxUX0RJU0FCTEVfSklUIGFyZSBkZXByZWNhdGVkIGFmdGVyIgogI2Vycm9yICJTdGFyYm9hcmQgdmVyc2lvbiAxMi4iCkBAIC02MDIsMTMgKzQ4NSw2IEBACiAjZXJyb3IgImluc3RlYWQuIgogI2VuZGlmCiAgIHJldHVybiBmYWxzZTsKLSNlbGlmIGRlZmluZWQoRU5HSU5FX1NVUFBPUlRTX0pJVCkKLSAgcmV0dXJuIHRydWU7Ci0jZWxpZiBkZWZpbmVkKENPQkFMVF9ESVNBQkxFX0pJVCkKLSAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9jb2JhbHQvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmd5cCBiL2NvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmVjYTUxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb25maWd1cmF0aW9uJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY29uZmlndXJhdGlvbi5jYycsCi0gICAgICAgICdjb25maWd1cmF0aW9uLmgnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2NvYmFsdF91c2VyX29uX2V4aXRfc3RyYXRlZ3kgIT0gIiInLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1VTRVJfT05fRVhJVF9TVFJBVEVHWT0iPChjb2JhbHRfdXNlcl9vbl9leGl0X3N0cmF0ZWd5KSInLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3JlbmRlcl9kaXJ0eV9yZWdpb25fb25seSAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdDT0JBTFRfUkVOREVSX0RJUlRZX1JFR0lPTl9PTkxZPTwocmVuZGVyX2RpcnR5X3JlZ2lvbl9vbmx5KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY29iYWx0X2VnbF9zd2FwX2ludGVydmFsICE9IC0xJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9FR0xfU1dBUF9JTlRFUlZBTD08KGNvYmFsdF9lZ2xfc3dhcF9pbnRlcnZhbCknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2ZhbGxiYWNrX3NwbGFzaF9zY3JlZW5fdXJsICE9ICIiJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9GQUxMQkFDS19TUExBU0hfU0NSRUVOX1VSTD0iPChmYWxsYmFja19zcGxhc2hfc2NyZWVuX3VybCkiJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydjb2JhbHRfZW5hYmxlX3F1aWMgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX0VOQUJMRV9RVUlDJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydza2lhX2NhY2hlX3NpemVfaW5fYnl0ZXMgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1NLSUFfQ0FDSEVfU0laRV9JTl9CWVRFUz08KHNraWFfY2FjaGVfc2l6ZV9pbl9ieXRlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ29mZnNjcmVlbl90YXJnZXRfY2FjaGVfc2l6ZV9pbl9ieXRlcyAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdDT0JBTFRfT0ZGU0NSRUVOX1RBUkdFVF9DQUNIRV9TSVpFX0lOX0JZVEVTPTwob2Zmc2NyZWVuX3RhcmdldF9jYWNoZV9zaXplX2luX2J5dGVzKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnZW5jb2RlZF9pbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzICE9IC0xJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9FTkNPREVEX0lNQUdFX0NBQ0hFX1NJWkVfSU5fQllURVM9PChlbmNvZGVkX2ltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydpbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzICE9IC0xJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9JTUFHRV9DQUNIRV9TSVpFX0lOX0JZVEVTPTwoaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2xvY2FsX2ZvbnRfY2FjaGVfc2l6ZV9pbl9ieXRlcyAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdDT0JBTFRfTE9DQUxfVFlQRUZBQ0VfQ0FDSEVfU0laRV9JTl9CWVRFUz08KGxvY2FsX2ZvbnRfY2FjaGVfc2l6ZV9pbl9ieXRlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3JlbW90ZV9mb250X2NhY2hlX3NpemVfaW5fYnl0ZXMgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1JFTU9URV9UWVBFRkFDRV9DQUNIRV9TSVpFX0lOX0JZVEVTPTwocmVtb3RlX2ZvbnRfY2FjaGVfc2l6ZV9pbl9ieXRlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ21lc2hfY2FjaGVfc2l6ZV9pbl9ieXRlcyAhPSAtMScsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnbWVzaF9jYWNoZV9zaXplX2luX2J5dGVzID09ICJhdXRvIicsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ0NPQkFMVF9NRVNIX0NBQ0hFX1NJWkVfSU5fQllURVM9MSoxMDI0KjEwMjQnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnQ09CQUxUX01FU0hfQ0FDSEVfU0laRV9JTl9CWVRFUz08KG1lc2hfY2FjaGVfc2l6ZV9pbl9ieXRlcyknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaW1hZ2VfY2FjaGVfY2FwYWNpdHlfbXVsdGlwbGllcl93aGVuX3BsYXlpbmdfdmlkZW8gIT0gIiInLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX0lNQUdFX0NBQ0hFX0NBUEFDSVRZX01VTFRJUExJRVJfV0hFTl9QTEFZSU5HX1ZJREVPPTwoaW1hZ2VfY2FjaGVfY2FwYWNpdHlfbXVsdGlwbGllcl93aGVuX3BsYXlpbmdfdmlkZW8pJwotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3NraWFfZ2x5cGhfYXRsYXNfd2lkdGggIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfV0lEVEg9PChza2lhX2dseXBoX2F0bGFzX3dpZHRoKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2tpYV9nbHlwaF9hdGxhc19oZWlnaHQgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX1NLSUFfR0xZUEhfQVRMQVNfSEVJR0hUPTwoc2tpYV9nbHlwaF9hdGxhc19oZWlnaHQpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydyZWR1Y2VfY3B1X21lbW9yeV9ieSAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdDT0JBTFRfUkVEVUNFX0NQVV9NRU1PUllfQlk9PChyZWR1Y2VfY3B1X21lbW9yeV9ieSknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3JlZHVjZV9ncHVfbWVtb3J5X2J5ICE9IC0xJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9SRURVQ0VfR1BVX01FTU9SWV9CWT08KHJlZHVjZV9ncHVfbWVtb3J5X2J5KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY29iYWx0X2djX3plYWwgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX0dDX1pFQUwnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Jhc3Rlcml6ZXJfdHlwZSAhPSAiIicsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsncmFzdGVyaXplcl90eXBlID09ICJzdHViIicsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ0NPQkFMVF9GT1JDRV9TVFVCX1JBU1RFUklaRVInLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3Jhc3Rlcml6ZXJfdHlwZSA9PSAiZGlyZWN0LWdsZXMiJywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnQ09CQUxUX0ZPUkNFX0RJUkVDVF9HTEVTX1JBU1RFUklaRVInLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY29iYWx0X2VuYWJsZV9qaXQgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ2NvYmFsdF9lbmFibGVfaml0ID09IDEnLCB7Ci0gICAgICAgICAgICAgICdkZWZpbmVzJzogWyAnRU5HSU5FX1NVUFBPUlRTX0pJVCcgXSwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbICdDT0JBTFRfRElTQUJMRV9KSVQnIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydjb2JhbHRfZW5hYmxlX2ppdCAhPSAtMScsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnY29iYWx0X2VuYWJsZV9qaXQgPT0gMScsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbICdFTkdJTkVfU1VQUE9SVFNfSklUJyBdLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ0NPQkFMVF9ESVNBQkxFX0pJVCcgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2NvbnRlbnQvZm9udHMvUkVBRE1FLm1kIGIvY29iYWx0L2NvbnRlbnQvZm9udHMvUkVBRE1FLm1kCmluZGV4IDc0OWMxYmMuLjA3ZDY3Y2IgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jb250ZW50L2ZvbnRzL1JFQURNRS5tZAorKysgYi9jb2JhbHQvY29udGVudC9mb250cy9SRUFETUUubWQKQEAgLTI2LDcgKzI2LDcgQEAKIFRvIHVzZSB0aGlzOgogICAxLiAgU2VsZWN0IG9uZSBvZiB0aGUgcGFja2FnZSBwcm9maWxlcyBiZWxvdy4KICAgMi4gIEFkZCBhIHZhcmlhYmxlIG5hbWVkIGBjb2JhbHRfZm9udF9wYWNrYWdlYCBpbiB5b3VyIHBsYXRmb3JtJ3MKLSAgICAgIGBneXBfY29uZmlndXJhdGlvbi5neXBpYCBmaWxlLgorICAgICAgYHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmlgIGZpbGUuCiAgIDMuICBPcHRpb25hbDogQWRkIHBhY2thZ2Ugb3ZlcnJpZGVzLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhZGQgb3IgcmVtb3ZlIGZvbnRzCiAgICAgICBmcm9tIHRoZSBwYWNrYWdlLgogCmRpZmYgLS1naXQgYS9jb2JhbHQvY29udGVudC9mb250cy9jb25maWcvYW5kcm9pZC9mb250cy54bWwgYi9jb2JhbHQvY29udGVudC9mb250cy9jb25maWcvYW5kcm9pZC9mb250cy54bWwKaW5kZXggMWQxMGFjMS4uNTc4YzEyNCAxMDA2NDQKLS0tIGEvY29iYWx0L2NvbnRlbnQvZm9udHMvY29uZmlnL2FuZHJvaWQvZm9udHMueG1sCisrKyBiL2NvYmFsdC9jb250ZW50L2ZvbnRzL2NvbmZpZy9hbmRyb2lkL2ZvbnRzLnhtbApAQCAtMTY1LDYgKzE2NSw4IEBACiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zRXRoaW9waWMtUmVndWxhci50dGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0V0aGlvcGljLUJvbGQudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNFdGhpb3BpYy1WRi50dGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0V0aGlvcGljLVZGLnR0ZjwvZm9udD4KICAgICA8L2ZhbWlseT4KICAgICA8ZmFtaWx5PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNIZWJyZXctUmVndWxhci50dGY8L2ZvbnQ+CkBAIC0xNzksNiArMTgxLDggQEAKICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zQXJtZW5pYW4tUmVndWxhci5vdGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0FybWVuaWFuLUJvbGQudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNBcm1lbmlhbi1Cb2xkLm90ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zQXJtZW5pYW4tVkYudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNBcm1lbmlhbi1WRi50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zR2VvcmdpYW4tUmVndWxhci50dGY8L2ZvbnQ+CkBAIC0xOTEsNiArMTk1LDggQEAKICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zRGV2YW5hZ2FyaVVJLVJlZ3VsYXIub3RmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNEZXZhbmFnYXJpVUktQm9sZC50dGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0RldmFuYWdhcmlVSS1Cb2xkLm90ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zRGV2YW5hZ2FyaVVJLVZGLnR0ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI3MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zRGV2YW5hZ2FyaVVJLVZGLnR0ZjwvZm9udD4KICAgICA8L2ZhbWlseT4KICAgICA8IS0tIEd1amFyYXRpIHNob3VsZCBjb21lIGFmdGVyIERldmFuYWdhcmkgLS0+CiAgICAgPGZhbWlseT4KQEAgLTIwMSwzMiArMjA3LDQ0IEBACiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zR3VybXVraGlVSS1SZWd1bGFyLnR0ZjwvZm9udD4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI3MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zR3VybXVraGlVSS1Cb2xkLnR0ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zR3VybXVraGlVSS1WRi50dGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0d1cm11a2hpVUktVkYudHRmPC9mb250PgogICAgIDwvZmFtaWx5PgogICAgIDxmYW1pbHk+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RhbWlsVUktUmVndWxhci50dGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RhbWlsVUktUmVndWxhci5vdGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RhbWlsVUktQm9sZC50dGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RhbWlsVUktQm9sZC5vdGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RhbWlsVUktVkYudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNUYW1pbFVJLVZGLnR0ZjwvZm9udD4KICAgICA8L2ZhbWlseT4KICAgICA8ZmFtaWx5PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNNYWxheWFsYW1VSS1SZWd1bGFyLnR0ZjwvZm9udD4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zTWFsYXlhbGFtVUktUmVndWxhci5vdGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc01hbGF5YWxhbVVJLUJvbGQudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNNYWxheWFsYW1VSS1Cb2xkLm90ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zTWFsYXlhbGFtVUktVkYudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNNYWxheWFsYW1VSS1WRi50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zQmVuZ2FsaVVJLVJlZ3VsYXIudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNCZW5nYWxpVUktUmVndWxhci5vdGY8L2ZvbnQ+CiAgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0JlbmdhbGlVSS1Cb2xkLnR0ZjwvZm9udD4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI3MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zQmVuZ2FsaVVJLUJvbGQub3RmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNCZW5nYWxpVUktVkYudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNCZW5nYWxpVUktVkYudHRmPC9mb250PgogICAgIDwvZmFtaWx5PgogICAgIDxmYW1pbHk+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc1RlbHVndVVJLVJlZ3VsYXIudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNUZWx1Z3VVSS1Cb2xkLnR0ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zVGVsdWd1VUktVkYudHRmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNUZWx1Z3VVSS1WRi50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zS2FubmFkYVVJLVJlZ3VsYXIudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNLYW5uYWRhVUktQm9sZC50dGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0thbm5hZGFVSS1WRi50dGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNzAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0thbm5hZGFVSS1WRi50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zT3JpeWFVSS1SZWd1bGFyLnR0ZjwvZm9udD4KQEAgLTIzNyw2ICsyNTUsOCBAQAogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNTaW5oYWxhLVJlZ3VsYXIub3RmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNTaW5oYWxhLUJvbGQudHRmPC9mb250PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjcwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNTaW5oYWxhLUJvbGQub3RmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNTaW5oYWxhLVZGLnR0ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI3MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zU2luaGFsYS1WRi50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseT4KICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zS2htZXJVSS1SZWd1bGFyLnR0ZjwvZm9udD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRfY29uZmlndXJhdGlvbi5nbmkgYi9jb2JhbHQvY29udGVudC9mb250cy9mb250X2NvbmZpZ3VyYXRpb24uZ25pCmluZGV4IGQ0ZDI1YTYuLjc2MWZlYmUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRfY29uZmlndXJhdGlvbi5nbmkKKysrIGIvY29iYWx0L2NvbnRlbnQvZm9udHMvZm9udF9jb25maWd1cmF0aW9uLmduaQpAQCAtMjYsNyArMjYsNCBAQAogICBjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppID0gLTEKICAgY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19lbW9qaSA9IC0xCiAgIGNvYmFsdF9mb250X3BhY2thZ2Vfb3ZlcnJpZGVfZmFsbGJhY2tfc3ltYm9scyA9IC0xCi0KLSAgc291cmNlX2ZvbnRfZmlsZXNfZGlyID0gImZvbnRfZmlsZXMiCi0gIGNvcHlfZm9udF9maWxlcyA9IHRydWUKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRzLmd5cCBiL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRmODQ0ZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvY29udGVudC9mb250cy9mb250cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvcHlfZm9udF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vLi4vYnVpbGQvY29udGVudHNfZGlyLmd5cGknIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnc291cmNlX2ZvbnRfZmlsZXNfZGlyJzogJ2ZvbnRfZmlsZXMnLAotICAgICAgICAnY29weV9mb250X2ZpbGVzJzogMSwKLQotICAgICAgICAncGFja2FnZV9jYXRlZ29yaWVzJzogWwotICAgICAgICAgICMgVGhlc2UgYWxsIHVzZSBsYXRlIGV4cGFuc2lvbiBzbyB0aGUgY29uZGl0aW9uYWxzIGJlbG93IGdldCBldmFsdWF0ZWQgZmlyc3QuCi0gICAgICAgICAgJ3NhbnMtc2VyaWY9PihwYWNrYWdlX25hbWVkX3NhbnNfc2VyaWYpJywKLSAgICAgICAgICAnc2VyaWY9PihwYWNrYWdlX25hbWVkX3NlcmlmKScsCi0gICAgICAgICAgJ2ZjYy1jYXB0aW9ucz0+KHBhY2thZ2VfbmFtZWRfZmNjX2ZvbnRzKScsCi0gICAgICAgICAgJ2ZhbGxiYWNrLWxhbmctbm9uLWNqaz0+KHBhY2thZ2VfZmFsbGJhY2tfbGFuZ19ub25fY2prKScsCi0gICAgICAgICAgJ2ZhbGxiYWNrLWxhbmctY2prPT4ocGFja2FnZV9mYWxsYmFja19sYW5nX2NqayknLAotICAgICAgICAgICdmYWxsYmFjay1sYW5nLWNqay1sb3ctcXVhbGl0eT0+KHBhY2thZ2VfZmFsbGJhY2tfbGFuZ19jamtfbG93X3F1YWxpdHkpJywKLSAgICAgICAgICAnZmFsbGJhY2staGlzdG9yaWM9PihwYWNrYWdlX2ZhbGxiYWNrX2hpc3RvcmljKScsCi0gICAgICAgICAgJ2ZhbGxiYWNrLWNvbG9yLWVtb2ppPT4ocGFja2FnZV9mYWxsYmFja19jb2xvcl9lbW9qaSknLAotICAgICAgICAgICdmYWxsYmFjay1lbW9qaT0+KHBhY2thZ2VfZmFsbGJhY2tfZW1vamkpJywKLSAgICAgICAgICAnZmFsbGJhY2stc3ltYm9scz0+KHBhY2thZ2VfZmFsbGJhY2tfc3ltYm9scyknLAotICAgICAgICBdLAotCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICMgJ3VubGltaXRlZCcgaXMgZGVwcmVjYXRlZCBidXQgaXMgbWFwcGVkIHRvICdzdGFuZGFyZCcKLSAgICAgICAgICAjICdleHBhbmRlZCcgYWxzbyBjdXJyZW50bHkgbWFwcyB0byAnc3RhbmRhcmQnIGJ1dCB0aGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZQotICAgICAgICAgIFsgJ2NvYmFsdF9mb250X3BhY2thZ2UgPT0gInN0YW5kYXJkIiBvciBjb2JhbHRfZm9udF9wYWNrYWdlID09ICJ1bmxpbWl0ZWQiIG9yIGNvYmFsdF9mb250X3BhY2thZ2UgPT0gImV4cGFuZGVkIicsIHsKLSAgICAgICAgICAgICdzb3VyY2VfZm9udF9jb25maWdfZGlyJzogJ2NvbmZpZy9jb21tb24nLAotCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zYW5zX3NlcmlmJzogNCwKLSAgICAgICAgICAgICdwYWNrYWdlX25hbWVkX3NlcmlmJzogMywKLSAgICAgICAgICAgICdwYWNrYWdlX25hbWVkX2ZjY19mb250cyc6IDIsCi0gICAgICAgICAgICAncGFja2FnZV9mYWxsYmFja19sYW5nX25vbl9jamsnOiAyLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19jamsnOiAxLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19jamtfbG93X3F1YWxpdHknOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfaGlzdG9yaWMnOiAxLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfY29sb3JfZW1vamknOiAxLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfZW1vamknOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfc3ltYm9scyc6IDEsCi0gICAgICAgICAgfV0sCi0KLSAgICAgICAgICAjICcxMG1lZ2FieXRlcycgYW5kICdsaW1pdGVkX3dpdGhfanAnIGFyZSBkZXByZWNhdGVkIGJ1dCBtYXAgdG8gJ2xpbWl0ZWQnCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZSA9PSAibGltaXRlZCIgb3IgY29iYWx0X2ZvbnRfcGFja2FnZSA9PSAibGltaXRlZF93aXRoX2pwIiBvciBjb2JhbHRfZm9udF9wYWNrYWdlID09ICIxMG1lZ2FieXRlcyInLCB7Ci0gICAgICAgICAgICAnc291cmNlX2ZvbnRfY29uZmlnX2Rpcic6ICdjb25maWcvY29tbW9uJywKLQotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZWRfc2Fuc19zZXJpZic6IDIsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9mY2NfZm9udHMnOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19ub25fY2prJzogMSwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prX2xvd19xdWFsaXR5JzogMSwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2hpc3RvcmljJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2Vtb2ppJzogMSwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX3N5bWJvbHMnOiAxLAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZSA9PSAibWluaW1hbCInLCB7Ci0gICAgICAgICAgICAnc291cmNlX2ZvbnRfY29uZmlnX2Rpcic6ICdjb25maWcvY29tbW9uJywKLQotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZWRfc2Fuc19zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9mY2NfZm9udHMnOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19ub25fY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prX2xvd19xdWFsaXR5JzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2hpc3RvcmljJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX3N5bWJvbHMnOiAwLAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZSA9PSAiZW1wdHkiJywgewotICAgICAgICAgICAgJ3NvdXJjZV9mb250X2NvbmZpZ19kaXInOiAnY29uZmlnL2VtcHR5JywKLQotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZWRfc2Fuc19zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9mY2NfZm9udHMnOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19ub25fY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prX2xvd19xdWFsaXR5JzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2hpc3RvcmljJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX3N5bWJvbHMnOiAwLAotICAgICAgICAgIH1dLAotCi0KLSAgICAgICAgICBbICdjb2JhbHRfZm9udF9wYWNrYWdlID09ICJhbmRyb2lkX3N5c3RlbSInLCB7Ci0gICAgICAgICAgICAjIGZvbnRzLnhtbCBjb250YWlucyBhIHN1cGVyc2V0IG9mIHdoYXQgd2UgZXhwZWN0IHRvIGZpbmQgb24gQW5kcm9pZAotICAgICAgICAgICAgIyBkZXZpY2VzLiBUaGUgQW5kcm9pZCBTYkZpbGUgaW1wbGVtZW50YXRpb24gZmFsbHMgYmFjayB0byBzeXN0ZW0gZm9udAotICAgICAgICAgICAgIyBmaWxlcyBmb3IgdGhvc2Ugbm90IGluIGNvYmFsdCBjb250ZW50LgotICAgICAgICAgICAgJ3NvdXJjZV9mb250X2NvbmZpZ19kaXInOiAnY29uZmlnL2FuZHJvaWQnLAotCi0gICAgICAgICAgICAjIERvbid0IGNvcHkgZm9udCBmaWxlcyBmb3IgQW5kcm9pZCBzaW5jZSBpdCBmYWxscyBiYWNrIHRvIHN5c3RlbQotICAgICAgICAgICAgIyBmb250IGZpbGVzIGZvciBldmVyeXRoaW5nIGxpc3RlZCBpbiBmb250cy54bWwuCi0gICAgICAgICAgICAnY29weV9mb250X2ZpbGVzJzogMCwKLQotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZWRfc2Fuc19zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zZXJpZic6IDAsCi0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9mY2NfZm9udHMnOiAwLAotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19ub25fY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfY2prX2xvd19xdWFsaXR5JzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2hpc3RvcmljJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2Vtb2ppJzogMCwKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX3N5bWJvbHMnOiAwLAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9uYW1lZF9zYW5zX3NlcmlmID49IDAnLCB7Ci0gICAgICAgICAgICAncGFja2FnZV9uYW1lZF9zYW5zX3NlcmlmJzogJzwoY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9uYW1lZF9zYW5zX3NlcmlmKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9uYW1lZF9zZXJpZiA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZWRfc2VyaWYnOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX25hbWVkX3NlcmlmKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9uYW1lZF9mY2NfZm9udHMgPj0gMCcsIHsKLSAgICAgICAgICAgICdwYWNrYWdlX25hbWVkX2ZjY19mb250cyc6ICc8KGNvYmFsdF9mb250X3BhY2thZ2Vfb3ZlcnJpZGVfbmFtZWRfZmNjX2ZvbnRzKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19sYW5nX25vbl9jamsgPj0gMCcsIHsKLSAgICAgICAgICAgICdwYWNrYWdlX2ZhbGxiYWNrX2xhbmdfbm9uX2Nqayc6ICc8KGNvYmFsdF9mb250X3BhY2thZ2Vfb3ZlcnJpZGVfZmFsbGJhY2tfbGFuZ19ub25fY2prKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19sYW5nX2NqayA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19jamsnOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2xhbmdfY2prKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19sYW5nX2Nqa19sb3dfcXVhbGl0eSA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfbGFuZ19jamtfbG93X3F1YWxpdHknOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2xhbmdfY2prX2xvd19xdWFsaXR5KScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19oaXN0b3JpYyA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfaGlzdG9yaWMnOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2hpc3RvcmljKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19jb2xvcl9lbW9qaSA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfY29sb3JfZW1vamknOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2NvbG9yX2Vtb2ppKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19lbW9qaSA+PSAwJywgewotICAgICAgICAgICAgJ3BhY2thZ2VfZmFsbGJhY2tfZW1vamknOiAnPChjb2JhbHRfZm9udF9wYWNrYWdlX292ZXJyaWRlX2ZhbGxiYWNrX2Vtb2ppKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19zeW1ib2xzID49IDAnLCB7Ci0gICAgICAgICAgICAncGFja2FnZV9mYWxsYmFja19zeW1ib2xzJzogJzwoY29iYWx0X2ZvbnRfcGFja2FnZV9vdmVycmlkZV9mYWxsYmFja19zeW1ib2xzKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyAnY29iYWx0X2ZvbnRfcGFja2FnZSA9PSAiZW1wdHkiJywgewotICAgICAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAgICAgJ2ZpbGVzJzogWyAnY29uZmlnL2VtcHR5L2ZvbnRzLnhtbCcgXSwKLSAgICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIpL2ZvbnRzLycsCi0gICAgICAgICAgfV0sCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2ZvbnRzX3htbCcsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgICAnc2NyaXB0cy9maWx0ZXJfZm9udHMucHknLAotICAgICAgICAgICAgICAgICAgJzwoc291cmNlX2ZvbnRfY29uZmlnX2RpcikvZm9udHMueG1sJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpcikvZm9udHMvZm9udHMueG1sJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAncHl0aG9uMicsICdzY3JpcHRzL2ZpbHRlcl9mb250cy5weScsCi0gICAgICAgICAgICAgICAgJy1pJywgJzwoc291cmNlX2ZvbnRfY29uZmlnX2RpcikvZm9udHMueG1sJywKLSAgICAgICAgICAgICAgICAnLW8nLCAnPChzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyKS9mb250cy9mb250cy54bWwnLAotICAgICAgICAgICAgICAgICc8QChwYWNrYWdlX2NhdGVnb3JpZXMpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgXSwKLQotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWyAnY29weV9mb250X2ZpbGVzID09IDAnLCB7Ci0gICAgICAgICAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAgICAgICAgICMgQ29weSBhdCBsZWFzdCB0aGUgZmFsbGJhY2sgUm9ib3RvIFN1YnNldHRlZCBmb250LgotICAgICAgICAgICAgICAgICdmaWxlcyc6IFsgJzwoc291cmNlX2ZvbnRfZmlsZXNfZGlyKS9Sb2JvdG8tUmVndWxhci1TdWJzZXR0ZWQud29mZjInIF0sCi0gICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpcikvZm9udHMvJywKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAgICAgICAgICMgTGF0ZSBleHBhbnNpb24gc28gPEAocGFja2FnZV9jYXRlZ29yaWVzKSBpcyByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICAnZmlsZXMnOiBbICc+IUBweW1vZF9kb19tYWluKGNvYmFsdC5jb250ZW50LmZvbnRzLnNjcmlwdHMuZmlsdGVyX2ZvbnRzIC1pIDwoc291cmNlX2ZvbnRfY29uZmlnX2RpcikvZm9udHMueG1sIC1mIDwoc291cmNlX2ZvbnRfZmlsZXNfZGlyKSA8QChwYWNrYWdlX2NhdGVnb3JpZXMpKScgXSwKLSAgICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyKS9mb250cy8nLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLQotICAgICAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ2NvbnRlbnRfZGVwbG95X3N1YmRpcnMnOiBbICdmb250cycgXQotICAgICAgICB9Ci0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvY29udGVudC9mb250cy92YXJpYWJsZXMuZ25pIGIvY29iYWx0L2NvbnRlbnQvZm9udHMvdmFyaWFibGVzLmduaQppbmRleCA1YjdlZWU0Li45MmQzZjBjIDEwMDY0NAotLS0gYS9jb2JhbHQvY29udGVudC9mb250cy92YXJpYWJsZXMuZ25pCisrKyBiL2NvYmFsdC9jb250ZW50L2ZvbnRzL3ZhcmlhYmxlcy5nbmkKQEAgLTEyLDYgKzEyLDExIEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKK2RlY2xhcmVfYXJncygpIHsKKyAgY29weV9mb250X2ZpbGVzID0gdHJ1ZQorICBzb3VyY2VfZm9udF9maWxlc19kaXIgPSAiZm9udF9maWxlcyIKK30KKwogaWYgKGNvYmFsdF9mb250X3BhY2thZ2UgPT0gInN0YW5kYXJkIikgewogICBkZWNsYXJlX2FyZ3MoKSB7CiAgICAgc291cmNlX2ZvbnRfY29uZmlnX2RpciA9ICJjb25maWcvY29tbW9uIgpkaWZmIC0tZ2l0IGEvY29iYWx0L2NzcC9jc3AuZ3lwIGIvY29iYWx0L2NzcC9jc3AuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ4ODhkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9jc3AvY3NwLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NzcCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5LmNjJywKLSAgICAgICAgJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5LmgnLAotICAgICAgICAnY3J5cHRvLmNjJywKLSAgICAgICAgJ2NyeXB0by5oJywKLSAgICAgICAgJ2RpcmVjdGl2ZS5jYycsCi0gICAgICAgICdkaXJlY3RpdmUuaCcsCi0gICAgICAgICdkaXJlY3RpdmVfbGlzdC5jYycsCi0gICAgICAgICdkaXJlY3RpdmVfbGlzdC5oJywKLSAgICAgICAgJ21lZGlhX2xpc3RfZGlyZWN0aXZlLmNjJywKLSAgICAgICAgJ21lZGlhX2xpc3RfZGlyZWN0aXZlLmgnLAotICAgICAgICAncGFyc2Vycy5oJywKLSAgICAgICAgJ3NvdXJjZS5jYycsCi0gICAgICAgICdzb3VyY2UuaCcsCi0gICAgICAgICdzb3VyY2VfbGlzdC5jYycsCi0gICAgICAgICdzb3VyY2VfbGlzdC5oJywKLSAgICAgICAgJ3NvdXJjZV9saXN0X2RpcmVjdGl2ZS5jYycsCi0gICAgICAgICdzb3VyY2VfbGlzdF9kaXJlY3RpdmUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L25ldHdvcmsvbmV0d29yay5neXA6bmV0d29yaycsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjc3BfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5X3Rlc3QuY2MnLAotICAgICAgICAnc291cmNlX2xpc3RfdGVzdC5jYycsCi0gICAgICAgICdzb3VyY2VfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnY3NwJywKLSAgICAgICAgJ2NzcF9jb3B5X3Rlc3RfZGF0YScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3NwX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NzcF90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2NzcF90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjc3BfY29weV90ZXN0X2RhdGEnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29udGVudF90ZXN0X2lucHV0X2ZpbGVzJzogWwotICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3NwL3Rlc3RkYXRhLycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdjb2JhbHQvY3NwL3Rlc3RkYXRhLycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfdGVzdF9kYXRhLmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3Avc291cmNlX2xpc3QuY2MgYi9jb2JhbHQvY3NwL3NvdXJjZV9saXN0LmNjCmluZGV4IDU3MTE3YzguLjE3MzQ1ZjQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jc3Avc291cmNlX2xpc3QuY2MKKysrIGIvY29iYWx0L2NzcC9zb3VyY2VfbGlzdC5jYwpAQCAtMTIzLDEyICsxMjMsNyBAQAogICAgIC8vIFRoaXMgd2lsbCBiZSBvdXIgaG9zdCBzdHJpbmcgaWYgd2UgYXJlIG5vdCB1c2luZyBJUFY2LgogICAgIGhvc3QuYXBwZW5kKHZhbGlkX3NwZWMuY19zdHIoKSArIHBhcnNlZC5ob3N0LmJlZ2luLAogICAgICAgICAgICAgICAgIHZhbGlkX3NwZWMuY19zdHIoKSArIHBhcnNlZC5ob3N0LmJlZ2luICsgcGFyc2VkLmhvc3QubGVuKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoSVBWNikKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgIGlmIChTYlNvY2tldElzSXB2NlN1cHBvcnRlZCgpKQotI2VuZGlmCi0gICAgICBob3N0ID0gdXJsLkhvc3ROb0JyYWNrZXRzKCk7Ci0jZW5kaWYKKyAgICBpZiAoU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQoKSkgaG9zdCA9IHVybC5Ib3N0Tm9CcmFja2V0cygpOwogICAgIGlmIChuZXQ6Okhvc3RTdHJpbmdJc0xvY2FsaG9zdChob3N0KSkgewogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2NzcC90ZXN0ZGF0YS9lbXB0eS50eHQgYi9jb2JhbHQvY3NwL3Rlc3RkYXRhL2VtcHR5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvY3NwL3Rlc3RkYXRhL2VtcHR5LnR4dAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9jb2JhbHQvY3NwL3Rlc3RkYXRhL2ludmFsaWRfaGFzaC5odG1sIGIvY29iYWx0L2NzcC90ZXN0ZGF0YS9pbnZhbGlkX2hhc2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM4YTE0Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvY3NwL3Rlc3RkYXRhL2ludmFsaWRfaGFzaC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08IS0tCi0gIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLQotICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPGh0bWw+Ci0KLTxoZWFkPgotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzdHlsZS1zcmMgJ3NoYTI1Ni1jM3VvVVFvMjNwVDhocUI1TW9BWm5JOUxpUFVjK2xXZ0dCS0hmVjA3aUFNPSc7Ij4KLTwvaGVhZD4KLQotPHN0eWxlPgotICBib2R5IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBmZjAwOwotICB9Ci08L3N0eWxlPgotPGJvZHk+PC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L2NzcC90ZXN0ZGF0YS92YWxpZF9oYXNoLmh0bWwgYi9jb2JhbHQvY3NwL3Rlc3RkYXRhL3ZhbGlkX2hhc2guaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA2ODM3Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvY3NwL3Rlc3RkYXRhL3ZhbGlkX2hhc2guaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPCEtLQotICBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLSAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxodG1sPgotCi08aGVhZD4KLSAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TZWN1cml0eS1Qb2xpY3kiIGNvbnRlbnQ9ImRlZmF1bHQtc3JjICdub25lJzsgc3R5bGUtc3JjICdzaGEyNTYtSWVnTGFXR1RGSnpLNWdiajFZVnNsK1JmcUhJcVhoWGFuODhlaUc5R1F3RT0nOyI+Ci08L2hlYWQ+Ci0KLTxzdHlsZT4KLSAgYm9keSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogIzAwZmYwMDsKLSAgfQotPC9zdHlsZT4KLTxib2R5PjwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NfcGFyc2VyL2Nzc19wYXJzZXIuZ3lwIGIvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYjhjMGEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotCi0gICAgIyBEZWZpbmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIEJpc29uIGJpbmFyeS4KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnaG9zdF9vcz09IndpbiInLCB7Ci0gICAgICAgICdiaXNvbl9leGUnOiAnd2luX2Jpc29uJywKLSAgICAgIH0sIHsKLSAgICAgICAgJ2Jpc29uX2V4ZSc6ICdiaXNvbicsCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRzJzogWwotCi0gICAgIyBHZW5lcmF0ZXMgaGVhZGVyIGZpbGVzIGZyb20gQmlzb24gZ3JhbW1hciB0aGF0IGFyZSBwcml2YXRlbHkgaW5jbHVkZWQKLSAgICAjIGJ5IENTUyBzY2FubmVyIGFuZCBwYXJzZXIuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Nzc19ncmFtbWFyJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgIyBUaGlzIHRhcmdldCBnZW5lcmF0ZXMgaGVhZGVyIGZpbGVzIHdoaWNoIG1heSBiZSB1c2VkIGJ5IG90aGVyIHRhcmdldHMuCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ3JhbW1hci5oJywKLSAgICAgICAgJ2dyYW1tYXIueScKLSAgICAgIF0sCi0gICAgICAjIEdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgaW50ZXJtZWRpYXRlIGRpcmVjdG9yeQotICAgICAgIyB1bmRlciB0aGVpciBtb2R1bGUgc3ViLWRpcmVjdG9yeS4KLSAgICAgICdtb2R1bGVfZGlyJzogWwotICAgICAgICAnY29iYWx0L2Nzc19wYXJzZXInLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ3J1bGVzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3J1bGVfbmFtZSc6ICdiaXNvbicsCi0gICAgICAgICAgJ2V4dGVuc2lvbic6ICd5JywKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICMgVG9rZW5zIGFuZCB0eXBlcywgaW5jbHVkZWQgYnkgc2Nhbm5lci4KLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS88KF9tb2R1bGVfZGlyKS88KFJVTEVfSU5QVVRfUk9PVClfZ2VuZXJhdGVkLmgnLAotICAgICAgICAgICAgIyBMQUxSKDEpIHBhcnNlciB0YWJsZXMgYW5kIHl5KigpIGZ1bmN0aW9ucywgaW5jbHVkZWQgYnkgcGFyc2VyLgotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpLzwoX21vZHVsZV9kaXIpLzwoUlVMRV9JTlBVVF9ST09UKV9pbXBsX2dlbmVyYXRlZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAnPChiaXNvbl9leGUpJywKLSAgICAgICAgICAgICctV2FsbCcsCi0gICAgICAgICAgICAnLVdlcnJvcicsCi0gICAgICAgICAgICAnLS1kZWZpbmVzPTwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpLzwoX21vZHVsZV9kaXIpLzwoUlVMRV9JTlBVVF9ST09UKV9nZW5lcmF0ZWQuaCcsCi0gICAgICAgICAgICAnLS1vdXRwdXQ9PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvPChfbW9kdWxlX2RpcikvPChSVUxFX0lOUFVUX1JPT1QpX2ltcGxfZ2VuZXJhdGVkLmgnLAotICAgICAgICAgICAgJzwoUlVMRV9JTlBVVF9QQVRIKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjc3NfcGFyc2VyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYW5pbWF0aW9uX3Nob3J0aGFuZF9wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmNjJywKLSAgICAgICAgJ2FuaW1hdGlvbl9zaG9ydGhhbmRfcHJvcGVydHlfcGFyc2Vfc3RydWN0dXJlcy5oJywKLSAgICAgICAgJ2JhY2tncm91bmRfc2hvcnRoYW5kX3Byb3BlcnR5X3BhcnNlX3N0cnVjdHVyZXMuY2MnLAotICAgICAgICAnYmFja2dyb3VuZF9zaG9ydGhhbmRfcHJvcGVydHlfcGFyc2Vfc3RydWN0dXJlcy5oJywKLSAgICAgICAgJ2JvcmRlcl9zaG9ydGhhbmRfcHJvcGVydHlfcGFyc2Vfc3RydWN0dXJlcy5jYycsCi0gICAgICAgICdib3JkZXJfc2hvcnRoYW5kX3Byb3BlcnR5X3BhcnNlX3N0cnVjdHVyZXMuaCcsCi0gICAgICAgICdmbGV4X3Nob3J0aGFuZF9wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmNjJywKLSAgICAgICAgJ2ZsZXhfc2hvcnRoYW5kX3Byb3BlcnR5X3BhcnNlX3N0cnVjdHVyZXMuaCcsCi0gICAgICAgICdmb250X3Nob3J0aGFuZF9wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmNjJywKLSAgICAgICAgJ2ZvbnRfc2hvcnRoYW5kX3Byb3BlcnR5X3BhcnNlX3N0cnVjdHVyZXMuaCcsCi0gICAgICAgICdtYXJnaW5fb3JfcGFkZGluZ19zaG9ydGhhbmQuY2MnLAotICAgICAgICAnbWFyZ2luX29yX3BhZGRpbmdfc2hvcnRoYW5kLmgnLAotICAgICAgICAncGFyc2VyLmNjJywKLSAgICAgICAgJ3BhcnNlci5oJywKLSAgICAgICAgJ3Bvc2l0aW9uX3BhcnNlX3N0cnVjdHVyZXMuY2MnLAotICAgICAgICAncG9zaXRpb25fcGFyc2Vfc3RydWN0dXJlcy5oJywKLSAgICAgICAgJ3Byb3BlcnR5X2RlY2xhcmF0aW9uLmgnLAotICAgICAgICAncmVmX2NvdW50ZWRfdXRpbC5oJywKLSAgICAgICAgJ3NjYW5uZXIuY2MnLAotICAgICAgICAnc2Nhbm5lci5oJywKLSAgICAgICAgJ3NoYWRvd19wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmNjJywKLSAgICAgICAgJ3NoYWRvd19wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmgnLAotICAgICAgICAnc3RyaW5nX3Bvb2wuaCcsCi0gICAgICAgICd0ZXh0X2RlY29yYXRpb25fc2hvcnRoYW5kX3Byb3BlcnR5X3BhcnNlX3N0cnVjdHVyZXMuY2MnLAotICAgICAgICAndGV4dF9kZWNvcmF0aW9uX3Nob3J0aGFuZF9wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmgnLAotICAgICAgICAndHJhbnNpdGlvbl9zaG9ydGhhbmRfcHJvcGVydHlfcGFyc2Vfc3RydWN0dXJlcy5jYycsCi0gICAgICAgICd0cmFuc2l0aW9uX3Nob3J0aGFuZF9wcm9wZXJ0eV9wYXJzZV9zdHJ1Y3R1cmVzLmgnLAotICAgICAgICAndHJpdmlhbF9zdHJpbmdfcGllY2UuaCcsCi0gICAgICAgICd0cml2aWFsX3R5cGVfcGFpcnMuaCcsCi0gICAgICBdLAotICAgICAgIyBTY2FubmVyIGV4cG9zZXMgVUNoYXIzMiBpbiBhIGhlYWRlci4KLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3Uvc291cmNlL2NvbW1vbicsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc29tL2Nzc29tLmd5cDpjc3NvbScsCi0gICAgICAgICc8KERFUFRIKS9uYi9uYi5neXA6bmInLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgICAnY3NzX2dyYW1tYXInLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Nzc19wYXJzZXJfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3BhcnNlcl90ZXN0LmNjJywKLSAgICAgICAgJ3JlZl9jb3VudGVkX3V0aWxfdGVzdC5jYycsCi0gICAgICAgICdzY2FubmVyX3Rlc3QuY2MnLAotICAgICAgICAndHJpdmlhbF9zdHJpbmdfcGllY2VfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnY3NzX2dyYW1tYXInLAotICAgICAgICAnY3NzX3BhcnNlcicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3NzX3BhcnNlcl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjc3NfcGFyc2VyX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnY3NzX3BhcnNlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci55IGIvY29iYWx0L2Nzc19wYXJzZXIvZ3JhbW1hci55CmluZGV4IDY5MDk0NjkuLmIyMzA0MWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jc3NfcGFyc2VyL2dyYW1tYXIueQorKysgYi9jb2JhbHQvY3NzX3BhcnNlci9ncmFtbWFyLnkKQEAgLTM5NCw2ICszOTQsOCBAQAogJXRva2VuIGtDdWJpY0JlemllckZ1bmN0aW9uVG9rZW4gICAgICAgIC8vIGN1YmljLWJlemllcigKICV0b2tlbiBrQ3VlRnVuY3Rpb25Ub2tlbiAgICAgICAgICAgICAgICAvLyBjdWUoCiAldG9rZW4ga0Zvcm1hdEZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgLy8gZm9ybWF0KAorJXRva2VuIGtIc2xGdW5jdGlvblRva2VuICAgICAgICAgICAgICAgIC8vIGhzbCgKKyV0b2tlbiBrSHNsYUZ1bmN0aW9uVG9rZW4gICAgICAgICAgICAgICAvLyBoc2xhKAogJXRva2VuIGtMaW5lYXJHcmFkaWVudEZ1bmN0aW9uVG9rZW4gICAgIC8vIGxpbmVhci1ncmFkaWVudCgKICV0b2tlbiBrTG9jYWxGdW5jdGlvblRva2VuICAgICAgICAgICAgICAvLyBsb2NhbCgKICV0b2tlbiBrTWFwVG9NZXNoRnVuY3Rpb25Ub2tlbiAgICAgICAgICAvLyBtYXAtdG8tbWVzaCgKQEAgLTI3NTEsNiArMjc1MywyNSBAQAogICAgICQkID0gQWRkUmVmKAogICAgICAgICBuZXcgY3Nzb206OlJHQkFDb2xvclZhbHVlKHIsIGcsIGIsIHN0YXRpY19jYXN0PHVpbnQ4PihhICogMHhmZikpKTsKICAgfQorICAvLyBIU0wgY29sb3IgbW9kZWwuCisgIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1jb2xvci0zLyNoc2wtY29sb3IKKyAgfCBrSHNsRnVuY3Rpb25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGludGVnZXIgY29tbWEgcG9zaXRpdmVfcGVyY2VudGFnZSBjb21tYQorICAgICAgcG9zaXRpdmVfcGVyY2VudGFnZSAnKScgeworICAgIHVpbnQ4IGggPSBzdGF0aWNfY2FzdDx1aW50OD4oQ2xhbXBUb1JhbmdlKDAsIDM2MCwgJDMpKTsKKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKGgsCisgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNSksIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ3KSwgMHhmZikKKyAgICAgICAgLmdldCgpKTsKKyAgfQorICAvLyBIU0xBIGNvbG9yIG1vZGVsLgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItMy8jaHNsYS1jb2xvcgorICB8IGtIc2xhRnVuY3Rpb25Ub2tlbiBtYXliZV93aGl0ZXNwYWNlIGludGVnZXIgY29tbWEgcG9zaXRpdmVfcGVyY2VudGFnZSBjb21tYQorICAgICAgcG9zaXRpdmVfcGVyY2VudGFnZSBjb21tYSBhbHBoYScpJyB7CisgICAgdWludDggaCA9IHN0YXRpY19jYXN0PHVpbnQ4PihDbGFtcFRvUmFuZ2UoMCwgMzYwLCAkMykpOworICAgIGZsb2F0IGEgPSAkOTsgIC8vIEFscmVhZHkgY2xhbXBlZC4KKyAgICAkJCA9IEFkZFJlZihjc3NvbTo6UkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKGgsCisgICAgICBNYWtlU2NvcGVkUmVmUHRyQW5kUmVsZWFzZSgkNSksIE1ha2VTY29wZWRSZWZQdHJBbmRSZWxlYXNlKCQ3KSwKKyAgICAgIHN0YXRpY19jYXN0PHVpbnQ4PihhICogMHhmZikpLmdldCgpKTsKKyAgfQogICB8IGtBcXVhVG9rZW4gbWF5YmVfd2hpdGVzcGFjZSB7CiAgICAgJCQgPSBBZGRSZWYoY3Nzb206OlJHQkFDb2xvclZhbHVlOjpHZXRBcXVhKCkuZ2V0KCkpOwogICB9CmRpZmYgLS1naXQgYS9jb2JhbHQvY3NzX3BhcnNlci9wYXJzZXJfdGVzdC5jYyBiL2NvYmFsdC9jc3NfcGFyc2VyL3BhcnNlcl90ZXN0LmNjCmluZGV4IGQ1N2I1NjQuLjNjMWQ4NzkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jc3NfcGFyc2VyL3BhcnNlcl90ZXN0LmNjCisrKyBiL2NvYmFsdC9jc3NfcGFyc2VyL3BhcnNlcl90ZXN0LmNjCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8Y21hdGg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImJhc2UvYmluZC5oIgpAQCAtMjA4Miw2ICsyMDgzLDMyIEBACiAgIEVYUEVDVF9FUSgweGZmZmZmZmZmLCBiYWNrZ3JvdW5kX2NvbG9yLT52YWx1ZSgpKTsKIH0KIAorVEVTVF9GKFBhcnNlclRlc3QsIFBhcnNlc0JhY2tncm91bmRDb2xvckhzbCkgeworICBzY29wZWRfcmVmcHRyPGNzc29tOjpDU1NEZWNsYXJlZFN0eWxlRGF0YT4gc3R5bGUgPQorICAgICAgcGFyc2VyXy5QYXJzZVN0eWxlRGVjbGFyYXRpb25MaXN0KAorICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMTAwLCAxMDAlLCA1MCUpOyIsIHNvdXJjZV9sb2NhdGlvbl8pOworCisgIEFTU0VSVF9UUlVFKHN0eWxlLT5Jc0RlY2xhcmVkKGNzc29tOjprQmFja2dyb3VuZENvbG9yUHJvcGVydHkpKTsKKyAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6UkdCQUNvbG9yVmFsdWU+IGJhY2tncm91bmRfY29sb3IgPQorICAgICAgZHluYW1pY19jYXN0PGNzc29tOjpSR0JBQ29sb3JWYWx1ZSo+KAorICAgICAgICAgIHN0eWxlLT5HZXRQcm9wZXJ0eVZhbHVlKGNzc29tOjprQmFja2dyb3VuZENvbG9yUHJvcGVydHkpLmdldCgpKTsKKyAgQVNTRVJUX1RSVUUoYmFja2dyb3VuZF9jb2xvcik7CisgIEVYUEVDVF9FUSgweDU0ZmYwMGZmLCBiYWNrZ3JvdW5kX2NvbG9yLT52YWx1ZSgpKTsKK30KKworVEVTVF9GKFBhcnNlclRlc3QsIFBhcnNlc0JhY2tncm91bmRDb2xvckhzbGEpIHsKKyAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTRGVjbGFyZWRTdHlsZURhdGE+IHN0eWxlID0KKyAgICAgIHBhcnNlcl8uUGFyc2VTdHlsZURlY2xhcmF0aW9uTGlzdCgKKyAgICAgICAgICAiYmFja2dyb3VuZC1jb2xvcjogaHNsYSgxMDAsIDEwMCUsIDUwJSwgMC44KTsiLCBzb3VyY2VfbG9jYXRpb25fKTsKKworICBBU1NFUlRfVFJVRShzdHlsZS0+SXNEZWNsYXJlZChjc3NvbTo6a0JhY2tncm91bmRDb2xvclByb3BlcnR5KSk7CisgIHNjb3BlZF9yZWZwdHI8Y3Nzb206OlJHQkFDb2xvclZhbHVlPiBiYWNrZ3JvdW5kX2NvbG9yID0KKyAgICAgIGR5bmFtaWNfY2FzdDxjc3NvbTo6UkdCQUNvbG9yVmFsdWUqPigKKyAgICAgICAgICBzdHlsZS0+R2V0UHJvcGVydHlWYWx1ZShjc3NvbTo6a0JhY2tncm91bmRDb2xvclByb3BlcnR5KS5nZXQoKSk7CisgIEFTU0VSVF9UUlVFKGJhY2tncm91bmRfY29sb3IpOworICBFWFBFQ1RfRVEoMHg1NGZmMDBjYywgYmFja2dyb3VuZF9jb2xvci0+dmFsdWUoKSk7Cit9CisKIFRFU1RfRihQYXJzZXJUZXN0LCBQYXJzZXNCYWNrZ3JvdW5kQ29sb3JXaXRoS2V5d29yZEFxdWEpIHsKICAgc2NvcGVkX3JlZnB0cjxjc3NvbTo6Q1NTRGVjbGFyZWRTdHlsZURhdGE+IHN0eWxlID0KICAgICAgIHBhcnNlcl8uUGFyc2VTdHlsZURlY2xhcmF0aW9uTGlzdCgiYmFja2dyb3VuZC1jb2xvcjogYXF1YTsiLApkaWZmIC0tZ2l0IGEvY29iYWx0L2Nzc19wYXJzZXIvc2Nhbm5lci5jYyBiL2NvYmFsdC9jc3NfcGFyc2VyL3NjYW5uZXIuY2MKaW5kZXggMTMyZGJjYi4uMjg5ZGQ4NyAxMDA2NDQKLS0tIGEvY29iYWx0L2Nzc19wYXJzZXIvc2Nhbm5lci5jYworKysgYi9jb2JhbHQvY3NzX3BhcnNlci9zY2FubmVyLmNjCkBAIC0xNCw4ICsxNCw2IEBACiAKICNpbmNsdWRlICJjb2JhbHQvY3NzX3BhcnNlci9zY2FubmVyLmgiCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL3Bvd193cmFwcGVyLmgiCi0KICNpbmNsdWRlIDxsaW1pdHM+CiAKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKQEAgLTI5LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvY3Nzb20vbWVkaWFfdHlwZV9uYW1lcy5oIgogI2luY2x1ZGUgImNvYmFsdC9jc3NvbS9wc2V1ZG9fY2xhc3NfbmFtZXMuaCIKICNpbmNsdWRlICJjb2JhbHQvY3Nzb20vcHNldWRvX2VsZW1lbnRfbmFtZXMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL3Bvd193cmFwcGVyLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvaWN1L3NvdXJjZS9jb21tb24vdW5pY29kZS91bmlzdHIuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC0yNjA2LDYgKzI2MDUsMTIgQEAKICAgICAgICAgKmtub3duX2Z1bmN0aW9uX3Rva2VuID0ga0N1ZUZ1bmN0aW9uVG9rZW47CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgfQorICAgICAgaWYgKElzQXNjaWlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZS5iZWdpblswXSwgJ2gnKSAmJgorICAgICAgICAgIElzQXNjaWlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZS5iZWdpblsxXSwgJ3MnKSAmJgorICAgICAgICAgIElzQXNjaWlBbHBoYUNhc2VsZXNzRXF1YWwobmFtZS5iZWdpblsyXSwgJ2wnKSkgeworICAgICAgICAqa25vd25fZnVuY3Rpb25fdG9rZW4gPSBrSHNsRnVuY3Rpb25Ub2tlbjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CiAgICAgICBpZiAoSXNBc2NpaUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lLmJlZ2luWzBdLCAnbicpICYmCiAgICAgICAgICAgSXNBc2NpaUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lLmJlZ2luWzFdLCAnbycpICYmCiAgICAgICAgICAgSXNBc2NpaUFscGhhQ2FzZWxlc3NFcXVhbChuYW1lLmJlZ2luWzJdLCAndCcpKSB7CkBAIC0yNjMxLDYgKzI2MzYsMTAgQEAKICAgICAgICAgKmtub3duX2Z1bmN0aW9uX3Rva2VuID0ga0NhbGNGdW5jdGlvblRva2VuOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KKyAgICAgIGlmIChJc0VxdWFsVG9Dc3NJZGVudGlmaWVyKG5hbWUuYmVnaW4sICJoc2xhIikpIHsKKyAgICAgICAgKmtub3duX2Z1bmN0aW9uX3Rva2VuID0ga0hzbGFGdW5jdGlvblRva2VuOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KICAgICAgIGlmIChJc0VxdWFsVG9Dc3NJZGVudGlmaWVyKG5hbWUuYmVnaW4sICJyZ2JhIikpIHsKICAgICAgICAgKmtub3duX2Z1bmN0aW9uX3Rva2VuID0ga1JHQkFGdW5jdGlvblRva2VuOwogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NvbS9CVUlMRC5nbiBiL2NvYmFsdC9jc3NvbS9CVUlMRC5nbgppbmRleCBmYTIzNmM2Li42ZTc3YjhmIDEwMDY0NAotLS0gYS9jb2JhbHQvY3Nzb20vQlVJTEQuZ24KKysrIGIvY29iYWx0L2Nzc29tL0JVSUxELmduCkBAIC0zMDUsNiArMzA1LDcgQEAKICAgICAicHJvcGVydHlfdmFsdWVfaXNfZXF1YWxfdGVzdC5jYyIsCiAgICAgInByb3BlcnR5X3ZhbHVlX3RvX3N0cmluZ190ZXN0LmNjIiwKICAgICAicHJvcGVydHlfdmFsdWVfdmlzaXRvcl90ZXN0LmNjIiwKKyAgICAicmdiYV9jb2xvcl92YWx1ZV90ZXN0LmNjIiwKICAgICAic2VsZWN0b3JfdGVzdC5jYyIsCiAgICAgInNlbGVjdG9yX3RyZWVfdGVzdC5jYyIsCiAgICAgInNlbGVjdG9yX3Zpc2l0b3JfdGVzdC5jYyIsCmRpZmYgLS1naXQgYS9jb2JhbHQvY3Nzb20vYXR0cmlidXRlX3NlbGVjdG9yLmNjIGIvY29iYWx0L2Nzc29tL2F0dHJpYnV0ZV9zZWxlY3Rvci5jYwppbmRleCBlNTMyNDhiLi5iNDY3NjEzIDEwMDY0NAotLS0gYS9jb2JhbHQvY3Nzb20vYXR0cmlidXRlX3NlbGVjdG9yLmNjCisrKyBiL2NvYmFsdC9jc3NvbS9hdHRyaWJ1dGVfc2VsZWN0b3IuY2MKQEAgLTE5LDYgKzE5LDM2IEBACiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBjc3NvbSB7CiAKK25hbWVzcGFjZSB7CisKK3N0ZDo6c3RyaW5nIFZhbHVlTWF0Y2hUeXBlVG9TdHJpbmcoQXR0cmlidXRlU2VsZWN0b3I6OlZhbHVlTWF0Y2hUeXBlIHR5cGUpIHsKKyAgLy8gVGhlIGZ1bGwgc3RyaW5nIGlzbid0IG5lY2Vzc2FyeS4gU2ltcGx5IGNvbnZlcnQgdGhlIHVuZGVybHlpbmcgdHlwZSB0bworICAvLyBhIHN0cmluZy4KKyAgcmV0dXJuIHN0ZDo6dG9fc3RyaW5nKHR5cGUpOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgcGFyYW1ldGVycyB0byBhIHNpbmdsZSB2YWx1ZS4KK3N0ZDo6c3RyaW5nIEdldFZhbHVlKEF0dHJpYnV0ZVNlbGVjdG9yOjpWYWx1ZU1hdGNoVHlwZSB2YWx1ZV9tYXRjaF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF0dHJpYnV0ZV92YWx1ZSkgeworICByZXR1cm4gVmFsdWVNYXRjaFR5cGVUb1N0cmluZyh2YWx1ZV9tYXRjaF90eXBlKSArICJfIiArIGF0dHJpYnV0ZV92YWx1ZTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0F0dHJpYnV0ZVNlbGVjdG9yOjpBdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlX25hbWUpCisgICAgOiBTaW1wbGVTZWxlY3RvcihrQXR0cmlidXRlU2VsZWN0b3IsIGJhc2U6OlRva2VuKCksCisgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbihhdHRyaWJ1dGVfbmFtZSkpLAorICAgICAgdmFsdWVfbWF0Y2hfdHlwZV8oa05vTWF0Y2gpIHt9CisKK0F0dHJpYnV0ZVNlbGVjdG9yOjpBdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVNYXRjaFR5cGUgdmFsdWVfbWF0Y2hfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlX3ZhbHVlKQorICAgIDogU2ltcGxlU2VsZWN0b3Ioa0F0dHJpYnV0ZVNlbGVjdG9yLCBiYXNlOjpUb2tlbigpLAorICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW4oYXR0cmlidXRlX25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgR2V0VmFsdWUodmFsdWVfbWF0Y2hfdHlwZSwgYXR0cmlidXRlX3ZhbHVlKSksCisgICAgICB2YWx1ZV9tYXRjaF90eXBlXyh2YWx1ZV9tYXRjaF90eXBlKSwKKyAgICAgIHZhbHVlXyhhdHRyaWJ1dGVfdmFsdWUpIHt9CisKIHZvaWQgQXR0cmlidXRlU2VsZWN0b3I6OkFjY2VwdChTZWxlY3RvclZpc2l0b3IqIHZpc2l0b3IpIHsKICAgdmlzaXRvci0+VmlzaXRBdHRyaWJ1dGVTZWxlY3Rvcih0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NvbS9hdHRyaWJ1dGVfc2VsZWN0b3IuaCBiL2NvYmFsdC9jc3NvbS9hdHRyaWJ1dGVfc2VsZWN0b3IuaAppbmRleCAxZWFmMjgzLi5lZThlMzgxIDEwMDY0NAotLS0gYS9jb2JhbHQvY3Nzb20vYXR0cmlidXRlX3NlbGVjdG9yLmgKKysrIGIvY29iYWx0L2Nzc29tL2F0dHJpYnV0ZV9zZWxlY3Rvci5oCkBAIC00NCwxNyArNDQsMTAgQEAKICAgICBrQ29udGFpbnMsCiAgIH07CiAKLSAgZXhwbGljaXQgQXR0cmlidXRlU2VsZWN0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGF0dHJpYnV0ZV9uYW1lKQotICAgICAgOiBTaW1wbGVTZWxlY3RvcihrQXR0cmlidXRlU2VsZWN0b3IsIGJhc2U6OlRva2VuKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRva2VuKGF0dHJpYnV0ZV9uYW1lKSksCi0gICAgICAgIHZhbHVlX21hdGNoX3R5cGVfKGtOb01hdGNoKSB7fQorICBleHBsaWNpdCBBdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlX25hbWUpOwogICBBdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBzdGQ6OnN0cmluZyYgYXR0cmlidXRlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgIFZhbHVlTWF0Y2hUeXBlIHZhbHVlX21hdGNoX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdHRyaWJ1dGVfdmFsdWUpCi0gICAgICA6IFNpbXBsZVNlbGVjdG9yKGtBdHRyaWJ1dGVTZWxlY3RvciwgYmFzZTo6VG9rZW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW4oYXR0cmlidXRlX25hbWUpKSwKLSAgICAgICAgdmFsdWVfbWF0Y2hfdHlwZV8odmFsdWVfbWF0Y2hfdHlwZSksCi0gICAgICAgIHZhbHVlXyhhdHRyaWJ1dGVfdmFsdWUpIHt9CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdHRyaWJ1dGVfdmFsdWUpOwogICB+QXR0cmlidXRlU2VsZWN0b3IoKSBvdmVycmlkZSB7fQogCiAgIC8vIEZyb20gU2VsZWN0b3IuCmRpZmYgLS1naXQgYS9jb2JhbHQvY3Nzb20vY29tcG91bmRfc2VsZWN0b3IuY2MgYi9jb2JhbHQvY3Nzb20vY29tcG91bmRfc2VsZWN0b3IuY2MKaW5kZXggMjgyNWY5ZS4uYTQ3ZDQ1YiAxMDA2NDQKLS0tIGEvY29iYWx0L2Nzc29tL2NvbXBvdW5kX3NlbGVjdG9yLmNjCisrKyBiL2NvYmFsdC9jc3NvbS9jb21wb3VuZF9zZWxlY3Rvci5jYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3BzZXVkb19lbGVtZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3NlbGVjdG9yX3Zpc2l0b3IuaCIKQEAgLTM4LDYgKzM5LDEyIEBACiAgIGlmIChyaHMtPnRleHQoKSA8IGxocy0+dGV4dCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CisgIGlmIChsaHMtPnZhbHVlKCkgPCByaHMtPnZhbHVlKCkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZiAocmhzLT52YWx1ZSgpIDwgbGhzLT52YWx1ZSgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CiAKICAgLy8gUHNldWRvIGNsYXNzIHNlbGVjdG9ycyBtYXkgY29udGFpbiBjb21wb3VuZCBzZWxlY3RvcnMsIHdoaWNoIGFsc28gbmVlZCB0bwogICAvLyBiZSBjb21wYXJlZC4KZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NvbS9jc3NvbS5neXAgYi9jb2JhbHQvY3Nzb20vY3Nzb20uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWVhODE2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9jc3NvbS9jc3NvbS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Nzc29tJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYWJzb2x1dGVfdXJsX3ZhbHVlLmNjJywKLSAgICAgICAgJ2Fic29sdXRlX3VybF92YWx1ZS5oJywKLSAgICAgICAgJ2FjdGl2ZV9wc2V1ZG9fY2xhc3MuY2MnLAotICAgICAgICAnYWN0aXZlX3BzZXVkb19jbGFzcy5oJywKLSAgICAgICAgJ2FmdGVyX3BzZXVkb19lbGVtZW50LmNjJywKLSAgICAgICAgJ2FmdGVyX3BzZXVkb19lbGVtZW50LmgnLAotICAgICAgICAnYW5pbWF0aW9uLmgnLAotICAgICAgICAnYW5pbWF0aW9uX3NldC5jYycsCi0gICAgICAgICdhbmltYXRpb25fc2V0LmgnLAotICAgICAgICAnYXR0cmlidXRlX3NlbGVjdG9yLmNjJywKLSAgICAgICAgJ2F0dHJpYnV0ZV9zZWxlY3Rvci5oJywKLSAgICAgICAgJ2JlZm9yZV9wc2V1ZG9fZWxlbWVudC5jYycsCi0gICAgICAgICdiZWZvcmVfcHNldWRvX2VsZW1lbnQuaCcsCi0gICAgICAgICdjYWxjX3ZhbHVlLmNjJywKLSAgICAgICAgJ2NhbGNfdmFsdWUuaCcsCi0gICAgICAgICdjYXNjYWRlX3ByZWNlZGVuY2UuaCcsCi0gICAgICAgICdjYXNjYWRlZF9zdHlsZS5jYycsCi0gICAgICAgICdjYXNjYWRlZF9zdHlsZS5oJywKLSAgICAgICAgJ2NoYXJhY3Rlcl9jbGFzc2lmaWNhdGlvbi5oJywKLSAgICAgICAgJ2NoaWxkX2NvbWJpbmF0b3IuY2MnLAotICAgICAgICAnY2hpbGRfY29tYmluYXRvci5oJywKLSAgICAgICAgJ2NsYXNzX3NlbGVjdG9yLmNjJywKLSAgICAgICAgJ2NsYXNzX3NlbGVjdG9yLmgnLAotICAgICAgICAnY29iYWx0X3VpX25hdl9mb2N1c190cmFuc2Zvcm1fZnVuY3Rpb24uY2MnLAotICAgICAgICAnY29iYWx0X3VpX25hdl9mb2N1c190cmFuc2Zvcm1fZnVuY3Rpb24uaCcsCi0gICAgICAgICdjb2JhbHRfdWlfbmF2X3Nwb3RsaWdodF90cmFuc2Zvcm1fZnVuY3Rpb24uY2MnLAotICAgICAgICAnY29iYWx0X3VpX25hdl9zcG90bGlnaHRfdHJhbnNmb3JtX2Z1bmN0aW9uLmgnLAotICAgICAgICAnY29sb3Jfc3RvcC5jYycsCi0gICAgICAgICdjb2xvcl9zdG9wLmgnLAotICAgICAgICAnY29tYmluYXRvci5jYycsCi0gICAgICAgICdjb21iaW5hdG9yLmgnLAotICAgICAgICAnY29tYmluYXRvcl92aXNpdG9yLmgnLAotICAgICAgICAnY29tcGxleF9zZWxlY3Rvci5jYycsCi0gICAgICAgICdjb21wbGV4X3NlbGVjdG9yLmgnLAotICAgICAgICAnY29tcG91bmRfc2VsZWN0b3IuY2MnLAotICAgICAgICAnY29tcG91bmRfc2VsZWN0b3IuaCcsCi0gICAgICAgICdjb21wdXRlZF9zdHlsZS5jYycsCi0gICAgICAgICdjb21wdXRlZF9zdHlsZS5oJywKLSAgICAgICAgJ2NvbXB1dGVkX3N0eWxlX3V0aWxzLmgnLAotICAgICAgICAnY3NzLmNjJywKLSAgICAgICAgJ2Nzcy5oJywKLSAgICAgICAgJ2Nzc19jb21wdXRlZF9zdHlsZV9kYXRhLmNjJywKLSAgICAgICAgJ2Nzc19jb21wdXRlZF9zdHlsZV9kYXRhLmgnLAotICAgICAgICAnY3NzX2NvbXB1dGVkX3N0eWxlX2RlY2xhcmF0aW9uLmNjJywKLSAgICAgICAgJ2Nzc19jb21wdXRlZF9zdHlsZV9kZWNsYXJhdGlvbi5oJywKLSAgICAgICAgJ2Nzc19jb25kaXRpb25fcnVsZS5jYycsCi0gICAgICAgICdjc3NfY29uZGl0aW9uX3J1bGUuaCcsCi0gICAgICAgICdjc3NfZGVjbGFyYXRpb25fZGF0YS5oJywKLSAgICAgICAgJ2Nzc19kZWNsYXJhdGlvbl91dGlsLmNjJywKLSAgICAgICAgJ2Nzc19kZWNsYXJhdGlvbl91dGlsLmgnLAotICAgICAgICAnY3NzX2RlY2xhcmVkX3N0eWxlX2RhdGEuY2MnLAotICAgICAgICAnY3NzX2RlY2xhcmVkX3N0eWxlX2RhdGEuaCcsCi0gICAgICAgICdjc3NfZGVjbGFyZWRfc3R5bGVfZGVjbGFyYXRpb24uY2MnLAotICAgICAgICAnY3NzX2RlY2xhcmVkX3N0eWxlX2RlY2xhcmF0aW9uLmgnLAotICAgICAgICAnY3NzX2ZvbnRfZmFjZV9kZWNsYXJhdGlvbl9kYXRhLmNjJywKLSAgICAgICAgJ2Nzc19mb250X2ZhY2VfZGVjbGFyYXRpb25fZGF0YS5oJywKLSAgICAgICAgJ2Nzc19mb250X2ZhY2VfcnVsZS5jYycsCi0gICAgICAgICdjc3NfZm9udF9mYWNlX3J1bGUuaCcsCi0gICAgICAgICdjc3NfZ3JvdXBpbmdfcnVsZS5jYycsCi0gICAgICAgICdjc3NfZ3JvdXBpbmdfcnVsZS5oJywKLSAgICAgICAgJ2Nzc19rZXlmcmFtZV9ydWxlLmNjJywKLSAgICAgICAgJ2Nzc19rZXlmcmFtZV9ydWxlLmgnLAotICAgICAgICAnY3NzX2tleWZyYW1lc19ydWxlLmNjJywKLSAgICAgICAgJ2Nzc19rZXlmcmFtZXNfcnVsZS5oJywKLSAgICAgICAgJ2Nzc19tZWRpYV9ydWxlLmNjJywKLSAgICAgICAgJ2Nzc19tZWRpYV9ydWxlLmgnLAotICAgICAgICAnY3NzX3BhcnNlci5oJywKLSAgICAgICAgJ2Nzc19ydWxlLmNjJywKLSAgICAgICAgJ2Nzc19ydWxlLmgnLAotICAgICAgICAnY3NzX3J1bGVfbGlzdC5jYycsCi0gICAgICAgICdjc3NfcnVsZV9saXN0LmgnLAotICAgICAgICAnY3NzX3J1bGVfc3R5bGVfZGVjbGFyYXRpb24uY2MnLAotICAgICAgICAnY3NzX3J1bGVfc3R5bGVfZGVjbGFyYXRpb24uaCcsCi0gICAgICAgICdjc3NfcnVsZV92aXNpdG9yLmgnLAotICAgICAgICAnY3NzX3N0eWxlX2RlY2xhcmF0aW9uLmNjJywKLSAgICAgICAgJ2Nzc19zdHlsZV9kZWNsYXJhdGlvbi5oJywKLSAgICAgICAgJ2Nzc19zdHlsZV9ydWxlLmNjJywKLSAgICAgICAgJ2Nzc19zdHlsZV9ydWxlLmgnLAotICAgICAgICAnY3NzX3N0eWxlX3NoZWV0LmNjJywKLSAgICAgICAgJ2Nzc19zdHlsZV9zaGVldC5oJywKLSAgICAgICAgJ2Nzc190cmFuc2l0aW9uLmNjJywKLSAgICAgICAgJ2Nzc190cmFuc2l0aW9uLmgnLAotICAgICAgICAnY3NzX3RyYW5zaXRpb25fc2V0LmNjJywKLSAgICAgICAgJ2Nzc190cmFuc2l0aW9uX3NldC5oJywKLSAgICAgICAgJ2Rlc2NlbmRhbnRfY29tYmluYXRvci5jYycsCi0gICAgICAgICdkZXNjZW5kYW50X2NvbWJpbmF0b3IuaCcsCi0gICAgICAgICdlbXB0eV9wc2V1ZG9fY2xhc3MuY2MnLAotICAgICAgICAnZW1wdHlfcHNldWRvX2NsYXNzLmgnLAotICAgICAgICAnZmlsdGVyX2Z1bmN0aW9uLmgnLAotICAgICAgICAnZmlsdGVyX2Z1bmN0aW9uX2xpc3RfdmFsdWUuY2MnLAotICAgICAgICAnZmlsdGVyX2Z1bmN0aW9uX2xpc3RfdmFsdWUuaCcsCi0gICAgICAgICdmb2N1c19wc2V1ZG9fY2xhc3MuY2MnLAotICAgICAgICAnZm9jdXNfcHNldWRvX2NsYXNzLmgnLAotICAgICAgICAnZm9sbG93aW5nX3NpYmxpbmdfY29tYmluYXRvci5jYycsCi0gICAgICAgICdmb2xsb3dpbmdfc2libGluZ19jb21iaW5hdG9yLmgnLAotICAgICAgICAnZm9udF9zdHlsZV92YWx1ZS5jYycsCi0gICAgICAgICdmb250X3N0eWxlX3ZhbHVlLmgnLAotICAgICAgICAnZm9udF93ZWlnaHRfdmFsdWUuY2MnLAotICAgICAgICAnZm9udF93ZWlnaHRfdmFsdWUuaCcsCi0gICAgICAgICdob3Zlcl9wc2V1ZG9fY2xhc3MuY2MnLAotICAgICAgICAnaG92ZXJfcHNldWRvX2NsYXNzLmgnLAotICAgICAgICAnaWRfc2VsZWN0b3IuY2MnLAotICAgICAgICAnaWRfc2VsZWN0b3IuaCcsCi0gICAgICAgICdpbnRlZ2VyX3ZhbHVlLmNjJywKLSAgICAgICAgJ2ludGVnZXJfdmFsdWUuaCcsCi0gICAgICAgICdpbnRlcnBvbGF0ZV9wcm9wZXJ0eV92YWx1ZS5jYycsCi0gICAgICAgICdpbnRlcnBvbGF0ZV9wcm9wZXJ0eV92YWx1ZS5oJywKLSAgICAgICAgJ2ludGVycG9sYXRlZF90cmFuc2Zvcm1fcHJvcGVydHlfdmFsdWUuY2MnLAotICAgICAgICAnaW50ZXJwb2xhdGVkX3RyYW5zZm9ybV9wcm9wZXJ0eV92YWx1ZS5oJywKLSAgICAgICAgJ2tleXdvcmRfbmFtZXMuY2MnLAotICAgICAgICAna2V5d29yZF9uYW1lcy5oJywKLSAgICAgICAgJ2tleXdvcmRfdmFsdWUuY2MnLAotICAgICAgICAna2V5d29yZF92YWx1ZS5oJywKLSAgICAgICAgJ2xlbmd0aF92YWx1ZS5jYycsCi0gICAgICAgICdsZW5ndGhfdmFsdWUuaCcsCi0gICAgICAgICdsaW5lYXJfZ3JhZGllbnRfdmFsdWUuY2MnLAotICAgICAgICAnbGluZWFyX2dyYWRpZW50X3ZhbHVlLmgnLAotICAgICAgICAnbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ2xvY2FsX3NyY192YWx1ZS5jYycsCi0gICAgICAgICdsb2NhbF9zcmNfdmFsdWUuaCcsCi0gICAgICAgICdtYXBfdG9fbWVzaF9mdW5jdGlvbi5jYycsCi0gICAgICAgICdtYXBfdG9fbWVzaF9mdW5jdGlvbi5oJywKLSAgICAgICAgJ21hdHJpeF9mdW5jdGlvbi5jYycsCi0gICAgICAgICdtYXRyaXhfZnVuY3Rpb24uaCcsCi0gICAgICAgICdtZWRpYV9mZWF0dXJlLmNjJywKLSAgICAgICAgJ21lZGlhX2ZlYXR1cmUuaCcsCi0gICAgICAgICdtZWRpYV9mZWF0dXJlX2tleXdvcmRfdmFsdWUuY2MnLAotICAgICAgICAnbWVkaWFfZmVhdHVyZV9rZXl3b3JkX3ZhbHVlLmgnLAotICAgICAgICAnbWVkaWFfZmVhdHVyZV9rZXl3b3JkX3ZhbHVlX25hbWVzLmNjJywKLSAgICAgICAgJ21lZGlhX2ZlYXR1cmVfa2V5d29yZF92YWx1ZV9uYW1lcy5oJywKLSAgICAgICAgJ21lZGlhX2ZlYXR1cmVfbmFtZXMuY2MnLAotICAgICAgICAnbWVkaWFfZmVhdHVyZV9uYW1lcy5oJywKLSAgICAgICAgJ21lZGlhX2xpc3QuY2MnLAotICAgICAgICAnbWVkaWFfbGlzdC5oJywKLSAgICAgICAgJ21lZGlhX3F1ZXJ5LmNjJywKLSAgICAgICAgJ21lZGlhX3F1ZXJ5LmgnLAotICAgICAgICAnbWVkaWFfdHlwZV9uYW1lcy5jYycsCi0gICAgICAgICdtZWRpYV90eXBlX25hbWVzLmgnLAotICAgICAgICAnbXV0YXRpb25fb2JzZXJ2ZXIuaCcsCi0gICAgICAgICduZXh0X3NpYmxpbmdfY29tYmluYXRvci5jYycsCi0gICAgICAgICduZXh0X3NpYmxpbmdfY29tYmluYXRvci5oJywKLSAgICAgICAgJ25vdF9wc2V1ZG9fY2xhc3MuY2MnLAotICAgICAgICAnbm90X3BzZXVkb19jbGFzcy5oJywKLSAgICAgICAgJ251bWJlcl92YWx1ZS5jYycsCi0gICAgICAgICdudW1iZXJfdmFsdWUuaCcsCi0gICAgICAgICdwZXJjZW50YWdlX3ZhbHVlLmNjJywKLSAgICAgICAgJ3BlcmNlbnRhZ2VfdmFsdWUuaCcsCi0gICAgICAgICdwcm9wZXJ0eV9kZWZpbml0aW9ucy5jYycsCi0gICAgICAgICdwcm9wZXJ0eV9kZWZpbml0aW9ucy5oJywKLSAgICAgICAgJ3Byb3BlcnR5X2tleV9saXN0X3ZhbHVlLmNjJywKLSAgICAgICAgJ3Byb3BlcnR5X2tleV9saXN0X3ZhbHVlLmgnLAotICAgICAgICAncHJvcGVydHlfbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ3Byb3BlcnR5X3ZhbHVlLmgnLAotICAgICAgICAncHJvcGVydHlfdmFsdWVfdmlzaXRvci5jYycsCi0gICAgICAgICdwcm9wZXJ0eV92YWx1ZV92aXNpdG9yLmgnLAotICAgICAgICAncHNldWRvX2NsYXNzLmgnLAotICAgICAgICAncHNldWRvX2NsYXNzX25hbWVzLmNjJywKLSAgICAgICAgJ3BzZXVkb19jbGFzc19uYW1lcy5oJywKLSAgICAgICAgJ3BzZXVkb19lbGVtZW50LmgnLAotICAgICAgICAncHNldWRvX2VsZW1lbnRfbmFtZXMuY2MnLAotICAgICAgICAncHNldWRvX2VsZW1lbnRfbmFtZXMuaCcsCi0gICAgICAgICdyYWRpYWxfZ3JhZGllbnRfdmFsdWUuY2MnLAotICAgICAgICAncmFkaWFsX2dyYWRpZW50X3ZhbHVlLmgnLAotICAgICAgICAncmF0aW9fdmFsdWUuY2MnLAotICAgICAgICAncmF0aW9fdmFsdWUuaCcsCi0gICAgICAgICdyZXNvbHV0aW9uX3ZhbHVlLmNjJywKLSAgICAgICAgJ3Jlc29sdXRpb25fdmFsdWUuaCcsCi0gICAgICAgICdyZ2JhX2NvbG9yX3ZhbHVlLmNjJywKLSAgICAgICAgJ3JnYmFfY29sb3JfdmFsdWUuaCcsCi0gICAgICAgICdyb3RhdGVfZnVuY3Rpb24uY2MnLAotICAgICAgICAncm90YXRlX2Z1bmN0aW9uLmgnLAotICAgICAgICAnc2NhbGVfZnVuY3Rpb24uY2MnLAotICAgICAgICAnc2NhbGVfZnVuY3Rpb24uaCcsCi0gICAgICAgICdzY29wZWRfbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ3Njb3BlZF9yZWZfbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ3NlbGVjdG9yLmgnLAotICAgICAgICAnc2VsZWN0b3JfdHJlZS5jYycsCi0gICAgICAgICdzZWxlY3Rvcl90cmVlLmgnLAotICAgICAgICAnc2VsZWN0b3JfdmlzaXRvci5oJywKLSAgICAgICAgJ3NoYWRvd192YWx1ZS5jYycsCi0gICAgICAgICdzaGFkb3dfdmFsdWUuaCcsCi0gICAgICAgICdzaW1wbGVfc2VsZWN0b3IuaCcsCi0gICAgICAgICdzcGVjaWZpY2l0eS5jYycsCi0gICAgICAgICdzcGVjaWZpY2l0eS5oJywKLSAgICAgICAgJ3NlcmlhbGl6ZXIuY2MnLAotICAgICAgICAnc2VyaWFsaXplci5oJywKLSAgICAgICAgJ3N0cmluZ192YWx1ZS5jYycsCi0gICAgICAgICdzdHJpbmdfdmFsdWUuaCcsCi0gICAgICAgICdzdHlsZV9zaGVldC5jYycsCi0gICAgICAgICdzdHlsZV9zaGVldC5oJywKLSAgICAgICAgJ3N0eWxlX3NoZWV0X2xpc3QuY2MnLAotICAgICAgICAnc3R5bGVfc2hlZXRfbGlzdC5oJywKLSAgICAgICAgJ3Rlc3RpbmcvbW9ja19jc3NfcGFyc2VyLmgnLAotICAgICAgICAndGltZV9saXN0X3ZhbHVlLmNjJywKLSAgICAgICAgJ3RpbWVfbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ3RpbWluZ19mdW5jdGlvbi5jYycsCi0gICAgICAgICd0aW1pbmdfZnVuY3Rpb24uaCcsCi0gICAgICAgICd0aW1pbmdfZnVuY3Rpb25fbGlzdF92YWx1ZS5jYycsCi0gICAgICAgICd0aW1pbmdfZnVuY3Rpb25fbGlzdF92YWx1ZS5oJywKLSAgICAgICAgJ3RyYW5zZm9ybV9mdW5jdGlvbi5oJywKLSAgICAgICAgJ3RyYW5zZm9ybV9mdW5jdGlvbl9saXN0X3ZhbHVlLmNjJywKLSAgICAgICAgJ3RyYW5zZm9ybV9mdW5jdGlvbl9saXN0X3ZhbHVlLmgnLAotICAgICAgICAndHJhbnNmb3JtX2Z1bmN0aW9uX3Zpc2l0b3IuaCcsCi0gICAgICAgICd0cmFuc2Zvcm1fcHJvcGVydHlfdmFsdWUuaCcsCi0gICAgICAgICd0cmFuc2xhdGVfZnVuY3Rpb24uY2MnLAotICAgICAgICAndHJhbnNsYXRlX2Z1bmN0aW9uLmgnLAotICAgICAgICAndHlwZV9zZWxlY3Rvci5jYycsCi0gICAgICAgICd0eXBlX3NlbGVjdG9yLmgnLAotICAgICAgICAndW5pY29kZV9yYW5nZV92YWx1ZS5jYycsCi0gICAgICAgICd1bmljb2RlX3JhbmdlX3ZhbHVlLmgnLAotICAgICAgICAndW5pdmVyc2FsX3NlbGVjdG9yLmNjJywKLSAgICAgICAgJ3VuaXZlcnNhbF9zZWxlY3Rvci5oJywKLSAgICAgICAgJ3VzZXJfYWdlbnRfc3R5bGVfc2hlZXQuY2MnLAotICAgICAgICAndXNlcl9hZ2VudF9zdHlsZV9zaGVldC5oJywKLSAgICAgICAgJ3VybF9zcmNfdmFsdWUuY2MnLAotICAgICAgICAndXJsX3NyY192YWx1ZS5oJywKLSAgICAgICAgJ3VybF92YWx1ZS5jYycsCi0gICAgICAgICd1cmxfdmFsdWUuaCcsCi0gICAgICAgICd2aWV3cG9ydF9zaXplLmgnLAotICAgICAgXSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAjIEFkZGl0aW9uYWxseSwgZW5zdXJlIHRoYXQgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIGdlbmVyYXRlZAotICAgICAgICAjIGhlYWRlcnMgYXJlIHB1dCBvbiB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgdGFyZ2V0cyB0aGF0IGRlcGVuZAotICAgICAgICAjIG9uIHRoaXMgb25lLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L25ldHdvcmsvbmV0d29yay5neXA6bmV0d29yaycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzX2dlbi5neXA6Z2VuZXJhdGVkX3R5cGVzJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5neXA6ZG9tX2V4Y2VwdGlvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWF0aC9tYXRoLmd5cDptYXRoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC91aV9uYXZpZ2F0aW9uL3VpX25hdmlnYXRpb24uZ3lwOnVpX25hdmlnYXRpb24nLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgICAgJ2VtYmVkX3Jlc291cmNlc19hc19oZWFkZXJfZmlsZXMnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBUaGlzIHRhcmdldCB0YWtlcyBhbGwgZmlsZXMgaW4gdGhlIGVtYmVkZGVkX3Jlc291cmNlcyBkaXJlY3RvcnkgKGUuZy4KLSAgICAgICMgdGhlIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXQpIGFuZCBlbWJlZHMgdGhlbSBhcyBoZWFkZXIgZmlsZXMgZm9yCi0gICAgICAjIGluY2x1c2lvbiBpbnRvIHRoZSBiaW5hcnkuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZW1iZWRfcmVzb3VyY2VzX2FzX2hlYWRlcl9maWxlcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICMgQmVjYXVzZSB3ZSBnZW5lcmF0ZSBhIGhlYWRlciwgd2UgbXVzdCBzZXQgdGhlIGhhcmRfZGVwZW5kZW5jeSBmbGFnLgotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnc2NyaXB0X3BhdGgnOiAnPChERVBUSCkvY29iYWx0L2J1aWxkL2dlbmVyYXRlX2RhdGFfaGVhZGVyLnB5JywKLSAgICAgICAgJ291dHB1dF9wYXRoJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2NvYmFsdC9jc3NvbS9lbWJlZGRlZF9yZXNvdXJjZXMuaCcsCi0gICAgICAgICdpbnB1dF9kaXJlY3RvcnknOiAnZW1iZWRkZWRfcmVzb3VyY2VzJywKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS91c2VyX2FnZW50X3N0eWxlX3NoZWV0LmNzcycsCi0gICAgICBdLAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZW1iZWRfcmVzb3VyY2VzX2FzX2hlYWRlcl9maWxlcycsCi0gICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICc8KHNjcmlwdF9wYXRoKScsCi0gICAgICAgICAgICAnPEAoX3NvdXJjZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwob3V0cHV0X3BhdGgpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbjInLCAnPChzY3JpcHRfcGF0aCknLCAnQ1NTT01FbWJlZGRlZFJlc291cmNlcycsICc8KG91dHB1dF9wYXRoKScsICc8KGlucHV0X2RpcmVjdG9yeSknXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdFbWJlZGRpbmcgY3Nzb20gcmVzb3VyY2VzIGluICI8KGlucHV0X2RpcmVjdG9yeSkiIGludG8gaGVhZGVyIGZpbGUsICI8KG91dHB1dF9wYXRoKSIuJywKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUiknLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2Nzc29tL2Nzc29tX3Rlc3QuZ3lwIGIvY29iYWx0L2Nzc29tL2Nzc29tX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZiNWQ2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9jc3NvbS9jc3NvbV90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Nzc29tX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjYXNjYWRlX3ByZWNlZGVuY2VfdGVzdC5jYycsCi0gICAgICAgICdjYXNjYWRlZF9zdHlsZV90ZXN0LmNjJywKLSAgICAgICAgJ2NvbXB1dGVkX3N0eWxlX3Rlc3QuY2MnLAotICAgICAgICAnY3NzX2NvbXB1dGVkX3N0eWxlX2RhdGFfcHJvcGVydHlfc2V0X21hdGNoZXJfdGVzdC5jYycsCi0gICAgICAgICdjc3NfY29tcHV0ZWRfc3R5bGVfZGF0YV90ZXN0LmNjJywKLSAgICAgICAgJ2Nzc19jb21wdXRlZF9zdHlsZV9kZWNsYXJhdGlvbl90ZXN0LmNjJywKLSAgICAgICAgJ2Nzc19kZWNsYXJlZF9zdHlsZV9kYXRhX3Rlc3QuY2MnLAotICAgICAgICAnY3NzX2RlY2xhcmVkX3N0eWxlX2RlY2xhcmF0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnY3NzX2ZvbnRfZmFjZV9kZWNsYXJhdGlvbl9kYXRhX3Rlc3QuY2MnLAotICAgICAgICAnY3NzX2ZvbnRfZmFjZV9ydWxlX3Rlc3QuY2MnLAotICAgICAgICAnY3NzX2dyb3VwaW5nX3J1bGVfdGVzdC5jYycsCi0gICAgICAgICdjc3NfcHJvcGVydHlfZGVmaW5pdGlvbnNfdGVzdC5jYycsCi0gICAgICAgICdjc3NfcnVsZV9saXN0X3Rlc3QuY2MnLAotICAgICAgICAnY3NzX3J1bGVfdmlzaXRvcl90ZXN0LmNjJywKLSAgICAgICAgJ2Nzc19zdHlsZV9zaGVldF90ZXN0LmNjJywKLSAgICAgICAgJ2Nzc190cmFuc2l0aW9uX3NldF90ZXN0LmNjJywKLSAgICAgICAgJ2ludGVycG9sYXRlX3Byb3BlcnR5X3ZhbHVlX3Rlc3QuY2MnLAotICAgICAgICAna2V5d29yZF92YWx1ZV90ZXN0LmNjJywKLSAgICAgICAgJ21lZGlhX2ZlYXR1cmVfdGVzdC5jYycsCi0gICAgICAgICdtZWRpYV9saXN0X3Rlc3QuY2MnLAotICAgICAgICAnbWVkaWFfcXVlcnlfdGVzdC5jYycsCi0gICAgICAgICdwcm9wZXJ0eV92YWx1ZV9pc19lcXVhbF90ZXN0LmNjJywKLSAgICAgICAgJ3Byb3BlcnR5X3ZhbHVlX3RvX3N0cmluZ190ZXN0LmNjJywKLSAgICAgICAgJ3Byb3BlcnR5X3ZhbHVlX3Zpc2l0b3JfdGVzdC5jYycsCi0gICAgICAgICdzZWxlY3Rvcl90ZXN0LmNjJywKLSAgICAgICAgJ3NlbGVjdG9yX3RyZWVfdGVzdC5jYycsCi0gICAgICAgICdzZWxlY3Rvcl92aXNpdG9yX3Rlc3QuY2MnLAotICAgICAgICAnc2VyaWFsaXplcl90ZXN0LmNjJywKLSAgICAgICAgJ3NwZWNpZmljaXR5X3Rlc3QuY2MnLAotICAgICAgICAnc3R5bGVfc2hlZXRfbGlzdF90ZXN0LmNjJywKLSAgICAgICAgJ3RpbWluZ19mdW5jdGlvbl90ZXN0LmNjJywKLSAgICAgICAgJ3RyYW5zZm9ybV9mdW5jdGlvbl92aXNpdG9yX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jc3NfcGFyc2VyL2Nzc19wYXJzZXIuZ3lwOmNzc19wYXJzZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc29tL2Nzc29tLmd5cDpjc3NvbScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Nzb21fdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3Nzb21fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdjc3NvbV90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NvbS9yZ2JhX2NvbG9yX3ZhbHVlLmNjIGIvY29iYWx0L2Nzc29tL3JnYmFfY29sb3JfdmFsdWUuY2MKaW5kZXggNWE3OTdjMi4uYmU4MWQ5NCAxMDA2NDQKLS0tIGEvY29iYWx0L2Nzc29tL3JnYmFfY29sb3JfdmFsdWUuY2MKKysrIGIvY29iYWx0L2Nzc29tL3JnYmFfY29sb3JfdmFsdWUuY2MKQEAgLTg1LDYgKzg1LDYwIEBACiAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihOb25Ucml2aWFsU3RhdGljRmllbGRzKTsKIH07CiAKKy8vIEFsZ29yaXRobSBpcyBhZGFwdGVkIGZyb20KKy8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL2Nsb3N1cmUvZ29vZy9jb2xvci9jb2xvci5qcyNMMjk3CitzdGF0aWMgZmxvYXQgSHVlVG9SZ2IoZmxvYXQgcCwgZmxvYXQgcSwgZmxvYXQgaHVlKSB7CisgIGNvbnN0IGZsb2F0IG9uZV9zaXh0aCA9IDEuZiAvIDY7CisgIGNvbnN0IGZsb2F0IGhhbGYgPSAxLmYgLyAyOworICBjb25zdCBmbG9hdCB0d29fdGhpcmQgPSAyLmYgLyAzOworCisgIGlmIChodWUgPCAwKSBodWUgKz0gMTsKKyAgaWYgKGh1ZSA+IDEpIGh1ZSAtPSAxOworICBpZiAoaHVlIDwgb25lX3NpeHRoKSByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogaHVlOworICBpZiAoaHVlIDwgaGFsZikgcmV0dXJuIHE7CisgIGlmIChodWUgPCB0d29fdGhpcmQpIHJldHVybiBwICsgKHEgLSBwKSAqICh0d29fdGhpcmQgLSBodWUpICogNjsKKyAgcmV0dXJuIHA7Cit9CisKK3Njb3BlZF9yZWZwdHI8UkdCQUNvbG9yVmFsdWU+IFJHQkFDb2xvclZhbHVlOjpGcm9tSHNsYShpbnQgaCwgZmxvYXQgcywgZmxvYXQgbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OCBhKSB7CisgIERDSEVDS19HRShoLCAwKTsKKyAgRENIRUNLX0xFKGgsIDM2MCk7CisgIERDSEVDS19HRShzLCAwKTsKKyAgRENIRUNLX0xFKHMsIDEpOworICBEQ0hFQ0tfR0UobCwgMCk7CisgIERDSEVDS19MRShsLCAxKTsKKworICBmbG9hdCBoX25vcm0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oaCkgLyAzNjA7CisKKyAgZmxvYXQgciA9IDA7CisgIGZsb2F0IGcgPSAwOworICBmbG9hdCBiID0gMDsKKworICBpZiAoZmFicyhzKSA8IDAuMDAwMDAwMSkgeworICAgIHIgPSBsOworICAgIGcgPSBsOworICAgIGIgPSBsOworICB9IGVsc2UgeworICAgIGZsb2F0IHEgPSAobCA8IDAuNSkgPyBsICogKDEgKyBzKSA6IGwgKyBzIC0gbCAqIHM7CisgICAgZmxvYXQgcCA9IDIgKiBsIC0gcTsKKworICAgIGNvbnN0IGZsb2F0IG9uZV90aGlyZCA9IDEuZiAvIDM7CisgICAgciA9IEh1ZVRvUmdiKHAsIHEsIGhfbm9ybSArIG9uZV90aGlyZCk7CisgICAgZyA9IEh1ZVRvUmdiKHAsIHEsIGhfbm9ybSk7CisgICAgYiA9IEh1ZVRvUmdiKHAsIHEsIGhfbm9ybSAtIG9uZV90aGlyZCk7CisgIH0KKworICByZXR1cm4gYmFzZTo6TWFrZVJlZkNvdW50ZWQ8UkdCQUNvbG9yVmFsdWU+KHN0YXRpY19jYXN0PHVpbnQ4PihyICogMHhmZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDg+KGcgKiAweGZmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OD4oYiAqIDB4ZmYpLCBhKTsKK30KKworc2NvcGVkX3JlZnB0cjxSR0JBQ29sb3JWYWx1ZT4gUkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKAorICAgIGludCBoLCBjc3NvbTo6UGVyY2VudGFnZVZhbHVlKiBzLCBjc3NvbTo6UGVyY2VudGFnZVZhbHVlKiBsLCB1aW50OCBhKSB7CisgIHJldHVybiBGcm9tSHNsYShoLCBzLT52YWx1ZSgpLCBsLT52YWx1ZSgpLCBhKTsKK30KKwogbmFtZXNwYWNlIHsKIAogYmFzZTo6TGF6eUluc3RhbmNlPE5vblRyaXZpYWxTdGF0aWNGaWVsZHM+OjpEZXN0cnVjdG9yQXRFeGl0CmRpZmYgLS1naXQgYS9jb2JhbHQvY3Nzb20vcmdiYV9jb2xvcl92YWx1ZS5oIGIvY29iYWx0L2Nzc29tL3JnYmFfY29sb3JfdmFsdWUuaAppbmRleCA3NjQ0ODdmLi40NmI3N2VjIDEwMDY0NAotLS0gYS9jb2JhbHQvY3Nzb20vcmdiYV9jb2xvcl92YWx1ZS5oCisrKyBiL2NvYmFsdC9jc3NvbS9yZ2JhX2NvbG9yX3ZhbHVlLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKICNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZXF1YXRhYmxlLmgiCisjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3BlcmNlbnRhZ2VfdmFsdWUuaCIKICNpbmNsdWRlICJjb2JhbHQvY3Nzb20vcHJvcGVydHlfdmFsdWUuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC0zNSw3ICszNiw3IEBACiAvLyAgIC0gaHNsKDEyMCwgNzUlLCA3NSUpCiAvLyAgIC0gZnVjaHNpYQogLy8KLS8vIFRoZSBkYXRhIGlzIG1haW50YWluZWQgYXMgYSAzMiBiaXQgaW50ZWdlciBsYXllZCBvdXQgYXMgUlJHR0JCQUEsIHdpdGgKKy8vIFRoZSBkYXRhIGlzIG1haW50YWluZWQgYXMgYSAzMiBiaXQgaW50ZWdlciBsYWlkIG91dCBhcyBSUkdHQkJBQSwgd2l0aAogLy8gdGhlIHJlZCBieXRlcyBiZWluZyB0aGUgbW9zdCBzaWduaWZpY2FudC4KIC8vCiAvLyBBcHBsaWVzIHRvIHByb3BlcnRpZXMgc3VjaCBhcyBiYWNrZ3JvdW5kLWNvbG9yLCBjb2xvciwgZXRjLgpAQCAtNjEsNiArNjIsMTMgQEAKICAgc3RhdGljIGNvbnN0IHNjb3BlZF9yZWZwdHI8UkdCQUNvbG9yVmFsdWU+JiBHZXRXaGl0ZSgpOwogICBzdGF0aWMgY29uc3Qgc2NvcGVkX3JlZnB0cjxSR0JBQ29sb3JWYWx1ZT4mIEdldFllbGxvdygpOwogCisgIHN0YXRpYyBzY29wZWRfcmVmcHRyPFJHQkFDb2xvclZhbHVlPiBGcm9tSHNsYShpbnQgaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc29tOjpQZXJjZW50YWdlVmFsdWUqIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NvbTo6UGVyY2VudGFnZVZhbHVlKiBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDggYSk7CisgIHN0YXRpYyBzY29wZWRfcmVmcHRyPFJHQkFDb2xvclZhbHVlPiBGcm9tSHNsYShpbnQgaCwgZmxvYXQgcywgZmxvYXQgbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4IGEpOworCiAgIGV4cGxpY2l0IFJHQkFDb2xvclZhbHVlKHVpbnQzMiB2YWx1ZSkgOiB2YWx1ZV8odmFsdWUpIHt9CiAKICAgUkdCQUNvbG9yVmFsdWUodWludDggciwgdWludDggZywgdWludDggYiwgdWludDggYSkKZGlmZiAtLWdpdCBhL2NvYmFsdC9jc3NvbS9yZ2JhX2NvbG9yX3ZhbHVlX3Rlc3QuY2MgYi9jb2JhbHQvY3Nzb20vcmdiYV9jb2xvcl92YWx1ZV90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGI5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvY3Nzb20vcmdiYV9jb2xvcl92YWx1ZV90ZXN0LmNjCkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC9jc3NvbS9yZ2JhX2NvbG9yX3ZhbHVlLmgiCisKKyNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgY3Nzb20geworbmFtZXNwYWNlIHsKKworVEVTVChSZ2JhQ29sb3JWYWx1ZVRlc3QsIENyZWF0ZUZyb21Ic2xhQWNocm9tYXRpYykgeworICBFWFBFQ1RfRVEoUkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKDYwLCAwLCAxLCAweGZmKS0+dmFsdWUoKSwgMHhmZmZmZmZmZik7CisgIEVYUEVDVF9FUShSR0JBQ29sb3JWYWx1ZTo6RnJvbUhzbGEoMTgwLCAwLCAwLjhmLCAweDAwKS0+dmFsdWUoKSwgMHhjY2NjY2MwMCk7Cit9CisKK1RFU1QoUmdiYUNvbG9yVmFsdWVUZXN0LCBDcmVhdGVGcm9tSHNsYUJsYWNrKSB7CisgIEVYUEVDVF9FUShSR0JBQ29sb3JWYWx1ZTo6RnJvbUhzbGEoNjAsIDEsIDAuMCwgMHhmZiktPnZhbHVlKCksIDB4MDAwMDAwZmYpOworICBFWFBFQ1RfRVEoUkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKDE4MCwgMC41LCAwLjAsIDB4ZmYpLT52YWx1ZSgpLCAweDAwMDAwMGZmKTsKKyAgRVhQRUNUX0VRKFJHQkFDb2xvclZhbHVlOjpGcm9tSHNsYSgzMDAsIDAsIDAuMCwgMHhmZiktPnZhbHVlKCksIDB4MDAwMDAwZmYpOworfQorCitURVNUKFJnYmFDb2xvclZhbHVlVGVzdCwgQ3JlYXRlRnJvbUhzbGEpIHsKKyAgLy8gUmVkCisgIEVYUEVDVF9FUShSR0JBQ29sb3JWYWx1ZTo6RnJvbUhzbGEoMCwgMS4wLCAwLjUsIDB4ZmYpLT52YWx1ZSgpLCAweGZmMDAwMGZmKTsKKyAgLy8gR3JlZW4KKyAgRVhQRUNUX0VRKFJHQkFDb2xvclZhbHVlOjpGcm9tSHNsYSgxMjAsIDEuMCwgMC41LCAweGZmKS0+dmFsdWUoKSwgMHgwMGZmMDBmZik7CisgIC8vIEJsdWUKKyAgRVhQRUNUX0VRKFJHQkFDb2xvclZhbHVlOjpGcm9tSHNsYSgyNDAsIDEuMCwgMC41LCAweGZmKS0+dmFsdWUoKSwgMHgwMDAwZmZmZik7CisgIC8vIFJlZAorICBFWFBFQ1RfRVEoUkdCQUNvbG9yVmFsdWU6OkZyb21Ic2xhKDM2MCwgMS4wLCAwLjUsIDB4ZmYpLT52YWx1ZSgpLCAweGZmMDAwMGZmKTsKKworICAvLyBCbGFjaworfQorCit9ICAvLyBuYW1lc3BhY2UKK30gIC8vIG5hbWVzcGFjZSBjc3NvbQorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L2Nzc29tL3NpbXBsZV9zZWxlY3Rvci5oIGIvY29iYWx0L2Nzc29tL3NpbXBsZV9zZWxlY3Rvci5oCmluZGV4IDExYjZjNzAuLmQ4ZjkwNjMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9jc3NvbS9zaW1wbGVfc2VsZWN0b3IuaAorKysgYi9jb2JhbHQvY3Nzb20vc2ltcGxlX3NlbGVjdG9yLmgKQEAgLTE1LDYgKzE1LDggQEAKICNpZm5kZWYgQ09CQUxUX0NTU09NX1NJTVBMRV9TRUxFQ1RPUl9IXwogI2RlZmluZSBDT0JBTFRfQ1NTT01fU0lNUExFX1NFTEVDVE9SX0hfCiAKKyNpbmNsdWRlIDxzdHJpbmc+CisKICNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvdG9rZW4uaCIKICNpbmNsdWRlICJjb2JhbHQvY3Nzb20vY29tYmluYXRvci5oIgpAQCAtNDAsNyArNDIsMTAgQEAKIGNsYXNzIFNpbXBsZVNlbGVjdG9yIDogcHVibGljIFNlbGVjdG9yIHsKICBwdWJsaWM6CiAgIFNpbXBsZVNlbGVjdG9yKFNpbXBsZVNlbGVjdG9yVHlwZSB0eXBlLCBiYXNlOjpUb2tlbiBwcmVmaXgsIGJhc2U6OlRva2VuIHRleHQpCi0gICAgICA6IHR5cGVfKHR5cGUpLCBwcmVmaXhfKHByZWZpeCksIHRleHRfKHRleHQpIHt9CisgICAgICA6IHR5cGVfKHR5cGUpLCBwcmVmaXhfKHByZWZpeCksIHRleHRfKHRleHQpLCB2YWx1ZV8oIiIpIHt9CisgIFNpbXBsZVNlbGVjdG9yKFNpbXBsZVNlbGVjdG9yVHlwZSB0eXBlLCBiYXNlOjpUb2tlbiBwcmVmaXgsIGJhc2U6OlRva2VuIHRleHQsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKKyAgICAgIDogdHlwZV8odHlwZSksIHByZWZpeF8ocHJlZml4KSwgdGV4dF8odGV4dCksIHZhbHVlXyh2YWx1ZSkge30KICAgflNpbXBsZVNlbGVjdG9yKCkgb3ZlcnJpZGUge30KIAogICAvLyBGcm9tIFNlbGVjdG9yLgpAQCAtNTQsNiArNTksNyBAQAogICAvLyBSZXR1cm5zIHRva2VuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWxlY3Rvci4KICAgYmFzZTo6VG9rZW4gcHJlZml4KCkgY29uc3QgeyByZXR1cm4gcHJlZml4XzsgfQogICBiYXNlOjpUb2tlbiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gdGV4dF87IH0KKyAgYmFzZTo6VG9rZW4gdmFsdWUoKSBjb25zdCB7IHJldHVybiBiYXNlOjpUb2tlbih2YWx1ZV8pOyB9CiAKICAgdmlydHVhbCBQc2V1ZG9FbGVtZW50KiBBc1BzZXVkb0VsZW1lbnQoKSB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1YWwgVW5pdmVyc2FsU2VsZWN0b3IqIEFzVW5pdmVyc2FsU2VsZWN0b3IoKSB7IHJldHVybiBOVUxMOyB9CkBAIC03NSw2ICs4MSw3IEBACiAgIFNpbXBsZVNlbGVjdG9yVHlwZSB0eXBlXzsKICAgYmFzZTo6VG9rZW4gcHJlZml4XzsKICAgYmFzZTo6VG9rZW4gdGV4dF87CisgIHN0ZDo6c3RyaW5nIHZhbHVlXzsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBjc3NvbQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlYnVnL0JVSUxELmduIGIvY29iYWx0L2RlYnVnL0JVSUxELmduCmluZGV4IDU2NzAyN2UuLmEzMjk5NzggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kZWJ1Zy9CVUlMRC5nbgorKysgYi9jb2JhbHQvZGVidWcvQlVJTEQuZ24KQEAgLTYwLDExICs2MCwxMSBAQAogICBdCiAgIGRlcHMgPSBbCiAgICAgIjpjb25zb2xlX2NvbW1hbmRfbWFuYWdlciIsCi0gICAgIjpjb3B5X2JhY2tlbmRfd2ViX2ZpbGVzIiwKLSAgICAiOmNvcHlfY29uc29sZV93ZWJfZmlsZXMiLAotICAgICI6Y29weV9yZW1vdGVfd2ViX2ZpbGVzIiwKICAgICAiLy9jb2JhbHQvYmFzZSIsCiAgICAgIi8vY29iYWx0L2Nzc29tIiwKKyAgICAiLy9jb2JhbHQvZGVidWcvYmFja2VuZC9jb250ZW50OmNvcHlfYmFja2VuZF93ZWJfZmlsZXMiLAorICAgICIvL2NvYmFsdC9kZWJ1Zy9jb25zb2xlL2NvbnRlbnQ6Y29weV9jb25zb2xlX3dlYl9maWxlcyIsCisgICAgIi8vY29iYWx0L2RlYnVnL3JlbW90ZS9jb250ZW50OmNvcHlfcmVtb3RlX3dlYl9maWxlcyIsCiAgICAgIi8vY29iYWx0L2RvbSIsCiAgICAgIi8vY29iYWx0L2xheW91dCIsCiAgICAgIi8vY29iYWx0L21hdGgiLApAQCAtOTEsNTMgKzkxLDMgQEAKICAgICBkZXBzID0gWyAiLy9jb2JhbHQvYmFzZSIgXQogICB9CiB9Ci0KLWNvcHkoImNvcHlfYmFja2VuZF93ZWJfZmlsZXMiKSB7Ci0gIGluc3RhbGxfY29udGVudCA9IHRydWUKLQotICBzb3VyY2VzID0gWwotICAgICJiYWNrZW5kL2NvbnRlbnQvY3NzX2FnZW50LmpzIiwKLSAgICAiYmFja2VuZC9jb250ZW50L2RvbV9hZ2VudC5qcyIsCi0gICAgImJhY2tlbmQvY29udGVudC9vdmVybGF5X2FnZW50LmpzIiwKLSAgXQotCi0gICMgQ2Fub25pY2FsbHkgdGhpcyBzaG91bGQgYmUgImNvYmFsdC9kZWJ1Zy9iYWNrZW5kIiB0byBtYXRjaCB0aGUgc291cmNlCi0gICMgcGF0aCwgYnV0IHdlIHB1dCBpdCBpbiB0aGUgcm9vdCBvZiB0aGUgY29udGVudCBkaXIgdG8gcmVkdWNlIGRlcHRoLgotICBvdXRwdXRzID0gWyAiJHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIvd2ViL2RlYnVnX2JhY2tlbmQve3tzb3VyY2VfZmlsZV9wYXJ0fX0iIF0KLX0KLQotY29weSgiY29weV9jb25zb2xlX3dlYl9maWxlcyIpIHsKLSAgc291cmNlcyA9IFsKLSAgICAiY29uc29sZS9jb250ZW50L2NvbW1hbmRfaW5wdXQuanMiLAotICAgICJjb25zb2xlL2NvbnRlbnQvY29uc29sZV9tYW5hZ2VyLmpzIiwKLSAgICAiY29uc29sZS9jb250ZW50L2NvbnNvbGVfdmFsdWVzLmpzIiwKLSAgICAiY29uc29sZS9jb250ZW50L2RlYnVnX2NvbW1hbmRzLmpzIiwKLSAgICAiY29uc29sZS9jb250ZW50L2RlYnVnX2NvbnNvbGUuY3NzIiwKLSAgICAiY29uc29sZS9jb250ZW50L2RlYnVnX2NvbnNvbGUuaHRtbCIsCi0gICAgImNvbnNvbGUvY29udGVudC9kZWJ1Z19jb25zb2xlLmpzIiwKLSAgICAiY29uc29sZS9jb250ZW50L2RlYnVnZ2VyX2NsaWVudC5qcyIsCi0gICAgImNvbnNvbGUvY29udGVudC9tZWRpYV9jb25zb2xlLmpzIiwKLSAgICAiY29uc29sZS9jb250ZW50L21lZGlhX2NvbnNvbGVfY29udGV4dC5qcyIsCi0gICAgImNvbnNvbGUvY29udGVudC9tZXNzYWdlX2xvZy5qcyIsCi0gICAgImNvbnNvbGUvY29udGVudC9waXJhdGUuanBnIiwKLSAgXQotCi0gICMgQ2Fub25pY2FsbHkgdGhpcyBzaG91bGQgYmUgImNvYmFsdC9kZWJ1Zy9jb25zb2xlIiB0byBtYXRjaCB0aGUgc291cmNlCi0gICMgcGF0aCwgYnV0IHdlIHB1dCBpdCBpbiB0aGUgcm9vdCBvZiB0aGUgY29udGVudCBkaXIgdG8gcmVkdWNlIGRlcHRoLgotICBvdXRwdXRzID0gWyAiJHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIvd2ViL2RlYnVnX2NvbnNvbGUve3tzb3VyY2VfZmlsZV9wYXJ0fX0iIF0KLX0KLQotY29weSgiY29weV9yZW1vdGVfd2ViX2ZpbGVzIikgewotICBzb3VyY2VzID0gWwotICAgICJyZW1vdGUvY29udGVudC9jb2JhbHQtbG9nby0xODAucG5nIiwKLSAgICAicmVtb3RlL2NvbnRlbnQvZmF2aWNvbi5pY28iLAotICAgICJyZW1vdGUvY29udGVudC9pbmRleC5odG1sIiwKLSAgICAicmVtb3RlL2NvbnRlbnQvanNvbi9pbmRleC5qc29uIiwKLSAgXQotCi0gICMgQ2Fub25pY2FsbHkgdGhpcyBzaG91bGQgYmUgImNvYmFsdC9kZWJ1Zy9yZW1vdGUiIHRvIG1hdGNoIHRoZSBzb3VyY2UKLSAgIyBwYXRoLCBidXQgd2UgcHV0IGl0IGluIHRoZSByb290IG9mIHRoZSBjb250ZW50IGRpciB0byByZWR1Y2UgZGVwdGguCi0gIG91dHB1dHMgPSBbCi0gICAgIiRzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyL3dlYi9kZWJ1Z19yZW1vdGUve3tzb3VyY2VfZmlsZV9wYXJ0fX0iLAotICBdCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvZGVidWcvYmFja2VuZC9jb250ZW50L0JVSUxELmduIGIvY29iYWx0L2RlYnVnL2JhY2tlbmQvY29udGVudC9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTZlZjQzCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RlYnVnL2JhY2tlbmQvY29udGVudC9CVUlMRC5nbgpAQCAtMCwwICsxLDI3IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworY29weSgiY29weV9iYWNrZW5kX3dlYl9maWxlcyIpIHsKKyAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorCisgIHNvdXJjZXMgPSBbCisgICAgImNzc19hZ2VudC5qcyIsCisgICAgImRvbV9hZ2VudC5qcyIsCisgICAgIm92ZXJsYXlfYWdlbnQuanMiLAorICBdCisKKyAgIyBDYW5vbmljYWxseSB0aGlzIHNob3VsZCBiZSAiY29iYWx0L2RlYnVnL2JhY2tlbmQiIHRvIG1hdGNoIHRoZSBzb3VyY2UKKyAgIyBwYXRoLCBidXQgd2UgcHV0IGl0IGluIHRoZSByb290IG9mIHRoZSBjb250ZW50IGRpciB0byByZWR1Y2UgZGVwdGguCisgIG91dHB1dHMgPSBbICIkc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpci93ZWIvZGVidWdfYmFja2VuZC97e3NvdXJjZV90YXJnZXRfcmVsYXRpdmV9fSIgXQorfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlYnVnL2JhY2tlbmQvZGVidWdfbW9kdWxlLmNjIGIvY29iYWx0L2RlYnVnL2JhY2tlbmQvZGVidWdfbW9kdWxlLmNjCmluZGV4IGE3ZmU2YWIuLmI1OTcwMDIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kZWJ1Zy9iYWNrZW5kL2RlYnVnX21vZHVsZS5jYworKysgYi9jb2JhbHQvZGVidWcvYmFja2VuZC9kZWJ1Z19tb2R1bGUuY2MKQEAgLTgyLDggKzgyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tOjpXaW5kb3cqIHdpbmRvdywgRGVidWdnZXJTdGF0ZSogZGVidWdnZXJfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcCkgewotICBDb25zdHJ1Y3Rpb25EYXRhIGRhdGEoZGVidWdnZXJfaG9va3MsIGdsb2JhbF9lbnZpcm9ubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfbG9vcCwgcmVuZGVyX292ZXJsYXksIHJlc291cmNlX3Byb3ZpZGVyLCB3aW5kb3csCisgIENvbnN0cnVjdGlvbkRhdGEgZGF0YShkZWJ1Z2dlcl9ob29rcywgZ2xvYmFsX2Vudmlyb25tZW50LCBtZXNzYWdlX2xvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfb3ZlcmxheSwgcmVzb3VyY2VfcHJvdmlkZXIsIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyX3N0YXRlKTsKICAgQnVpbGQoZGF0YSk7CiB9CkBAIC0xMDQsMjMgKzEwNCwxNyBAQAogICBEQ0hFQ0soZGF0YS5tZXNzYWdlX2xvb3ApOwogCiAgIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpID09IGRhdGEubWVzc2FnZV9sb29wKSB7Ci0gICAgQnVpbGRJbnRlcm5hbChkYXRhLCBOVUxMKTsKKyAgICBCdWlsZEludGVybmFsKGRhdGEpOwogICB9IGVsc2UgewotICAgIGJhc2U6OldhaXRhYmxlRXZlbnQgY3JlYXRlZCgKLSAgICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6UmVzZXRQb2xpY3k6Ok1BTlVBTCwKLSAgICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6SW5pdGlhbFN0YXRlOjpOT1RfU0lHTkFMRUQpOwotICAgIGRhdGEubWVzc2FnZV9sb29wLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICBkYXRhLm1lc3NhZ2VfbG9vcC0+dGFza19ydW5uZXIoKS0+UG9zdEJsb2NraW5nVGFzaygKICAgICAgICAgRlJPTV9IRVJFLAotICAgICAgICBiYXNlOjpCaW5kKCZEZWJ1Z01vZHVsZTo6QnVpbGRJbnRlcm5hbCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKCZjcmVhdGVkKSkpOwotICAgIGNyZWF0ZWQuV2FpdCgpOworICAgICAgICBiYXNlOjpCaW5kKCZEZWJ1Z01vZHVsZTo6QnVpbGRJbnRlcm5hbCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgZGF0YSkpOwogICB9CiAKICAgRENIRUNLKGRlYnVnX2Rpc3BhdGNoZXJfKTsKIH0KIAotdm9pZCBEZWJ1Z01vZHVsZTo6QnVpbGRJbnRlcm5hbChjb25zdCBDb25zdHJ1Y3Rpb25EYXRhJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50KiBjcmVhdGVkKSB7Cit2b2lkIERlYnVnTW9kdWxlOjpCdWlsZEludGVybmFsKGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEpIHsKICAgRENIRUNLKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCkgPT0gZGF0YS5tZXNzYWdlX2xvb3ApOwogICBEQ0hFQ0soZGF0YS5nbG9iYWxfZW52aXJvbm1lbnQpOwogICBEQ0hFQ0soZGF0YS5yZW5kZXJfb3ZlcmxheSk7CkBAIC0xOTQsMTAgKzE4OCw2IEBACiAgIHRyYWNpbmdfYWdlbnRfLT5UaGF3KFJlbW92ZUFnZW50U3RhdGUoa1RyYWNpbmdBZ2VudCwgYWdlbnRzX3N0YXRlKSk7CiAKICAgaXNfZnJvemVuXyA9IGZhbHNlOwotCi0gIGlmIChjcmVhdGVkKSB7Ci0gICAgY3JlYXRlZC0+U2lnbmFsKCk7Ci0gIH0KIH0KIAogc3RkOjp1bmlxdWVfcHRyPERlYnVnZ2VyU3RhdGU+IERlYnVnTW9kdWxlOjpGcmVlemUoKSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvZGVidWcvYmFja2VuZC9kZWJ1Z19tb2R1bGUuaCBiL2NvYmFsdC9kZWJ1Zy9iYWNrZW5kL2RlYnVnX21vZHVsZS5oCmluZGV4IDJlM2FhOTEuLmRhMTc3OGEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kZWJ1Zy9iYWNrZW5kL2RlYnVnX21vZHVsZS5oCisrKyBiL2NvYmFsdC9kZWJ1Zy9iYWNrZW5kL2RlYnVnX21vZHVsZS5oCkBAIC0xNiw5ICsxNiw5IEBACiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuaCIKLSNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9iYXNlL2RlYnVnZ2VyX2hvb2tzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RlYnVnL2JhY2tlbmQvY3NzX2FnZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RlYnVnL2JhY2tlbmQvZGVidWdfYmFja2VuZC5oIgpAQCAtMTA4LDggKzEwOCw3IEBACiAgIHZvaWQgQnVpbGQoY29uc3QgQ29uc3RydWN0aW9uRGF0YSYgZGF0YSk7CiAKICAgLy8gU2lnbmFscyB8Y3JlYXRlZHwgd2hlbiBkb25lLCBpZiBub3QgTlVMTC4KLSAgdm9pZCBCdWlsZEludGVybmFsKGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50KiBjcmVhdGVkKTsKKyAgdm9pZCBCdWlsZEludGVybmFsKGNvbnN0IENvbnN0cnVjdGlvbkRhdGEmIGRhdGEpOwogCiAgIC8vIFNlbmRzIGEgcHJvdG9jb2wgZXZlbnQgdG8gdGhlIGZyb250ZW5kIHRocm91Z2ggfERlYnVnRGlzcGF0Y2hlcnwuCiAgIHZvaWQgU2VuZEV2ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXRob2QsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXJhbXMpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlYnVnL2NvbnNvbGUvY29udGVudC9CVUlMRC5nbiBiL2NvYmFsdC9kZWJ1Zy9jb25zb2xlL2NvbnRlbnQvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4OTY3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9kZWJ1Zy9jb25zb2xlL2NvbnRlbnQvQlVJTEQuZ24KQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2NvcHkoImNvcHlfY29uc29sZV93ZWJfZmlsZXMiKSB7CisgIGluc3RhbGxfY29udGVudCA9IHRydWUKKworICBzb3VyY2VzID0gWworICAgICJjb21tYW5kX2lucHV0LmpzIiwKKyAgICAiY29uc29sZV9tYW5hZ2VyLmpzIiwKKyAgICAiY29uc29sZV92YWx1ZXMuanMiLAorICAgICJkZWJ1Z19jb21tYW5kcy5qcyIsCisgICAgImRlYnVnX2NvbnNvbGUuY3NzIiwKKyAgICAiZGVidWdfY29uc29sZS5odG1sIiwKKyAgICAiZGVidWdfY29uc29sZS5qcyIsCisgICAgImRlYnVnZ2VyX2NsaWVudC5qcyIsCisgICAgIm1lZGlhX2NvbnNvbGUuanMiLAorICAgICJtZWRpYV9jb25zb2xlX2NvbnRleHQuanMiLAorICAgICJtZXNzYWdlX2xvZy5qcyIsCisgICAgInBpcmF0ZS5qcGciLAorICBdCisKKyAgIyBDYW5vbmljYWxseSB0aGlzIHNob3VsZCBiZSAiY29iYWx0L2RlYnVnL2NvbnNvbGUiIHRvIG1hdGNoIHRoZSBzb3VyY2UKKyAgIyBwYXRoLCBidXQgd2UgcHV0IGl0IGluIHRoZSByb290IG9mIHRoZSBjb250ZW50IGRpciB0byByZWR1Y2UgZGVwdGguCisgIG91dHB1dHMgPSBbICIkc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpci93ZWIvZGVidWdfY29uc29sZS97e3NvdXJjZV90YXJnZXRfcmVsYXRpdmV9fSIgXQorfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlYnVnL2RlYnVnLmd5cCBiL2NvYmFsdC9kZWJ1Zy9kZWJ1Zy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1YjliZWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2RlYnVnL2RlYnVnLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkZWJ1ZycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2JhY2tlbmQvYWdlbnRfYmFzZS5jYycsCi0gICAgICAgICdiYWNrZW5kL2FnZW50X2Jhc2UuaCcsCi0gICAgICAgICdiYWNrZW5kL2NvbW1hbmRfbWFwLmgnLAotICAgICAgICAnYmFja2VuZC9jc3NfYWdlbnQuY2MnLAotICAgICAgICAnYmFja2VuZC9jc3NfYWdlbnQuaCcsCi0gICAgICAgICdiYWNrZW5kL2RlYnVnX2JhY2tlbmQuY2MnLAotICAgICAgICAnYmFja2VuZC9kZWJ1Z19iYWNrZW5kLmgnLAotICAgICAgICAnYmFja2VuZC9kZWJ1Z19kaXNwYXRjaGVyLmNjJywKLSAgICAgICAgJ2JhY2tlbmQvZGVidWdfZGlzcGF0Y2hlci5oJywKLSAgICAgICAgJ2JhY2tlbmQvZGVidWdfbW9kdWxlLmNjJywKLSAgICAgICAgJ2JhY2tlbmQvZGVidWdfbW9kdWxlLmgnLAotICAgICAgICAnYmFja2VuZC9kZWJ1Z19zY3JpcHRfcnVubmVyLmNjJywKLSAgICAgICAgJ2JhY2tlbmQvZGVidWdfc2NyaXB0X3J1bm5lci5oJywKLSAgICAgICAgJ2JhY2tlbmQvZGVidWdnZXJfaG9va3NfaW1wbC5jYycsCi0gICAgICAgICdiYWNrZW5kL2RlYnVnZ2VyX2hvb2tzX2ltcGwuaCcsCi0gICAgICAgICdiYWNrZW5kL2RvbV9hZ2VudC5jYycsCi0gICAgICAgICdiYWNrZW5kL2RvbV9hZ2VudC5oJywKLSAgICAgICAgJ2JhY2tlbmQvbG9nX2FnZW50LmNjJywKLSAgICAgICAgJ2JhY2tlbmQvbG9nX2FnZW50LmgnLAotICAgICAgICAnYmFja2VuZC9vdmVybGF5X2FnZW50LmNjJywKLSAgICAgICAgJ2JhY2tlbmQvb3ZlcmxheV9hZ2VudC5oJywKLSAgICAgICAgJ2JhY2tlbmQvcGFnZV9hZ2VudC5jYycsCi0gICAgICAgICdiYWNrZW5kL3BhZ2VfYWdlbnQuaCcsCi0gICAgICAgICdiYWNrZW5kL3JlbmRlcl9sYXllci5jYycsCi0gICAgICAgICdiYWNrZW5kL3JlbmRlcl9sYXllci5oJywKLSAgICAgICAgJ2JhY2tlbmQvcmVuZGVyX292ZXJsYXkuY2MnLAotICAgICAgICAnYmFja2VuZC9yZW5kZXJfb3ZlcmxheS5oJywKLSAgICAgICAgJ2JhY2tlbmQvc2NyaXB0X2RlYnVnZ2VyX2FnZW50LmNjJywKLSAgICAgICAgJ2JhY2tlbmQvc2NyaXB0X2RlYnVnZ2VyX2FnZW50LmgnLAotICAgICAgICAnYmFja2VuZC90cmFjaW5nX2FnZW50LmNjJywKLSAgICAgICAgJ2JhY2tlbmQvdHJhY2luZ19hZ2VudC5oJywKLSAgICAgICAgJ2NvbW1hbmQuaCcsCi0gICAgICAgICdjb25zb2xlL2RlYnVnX2h1Yi5jYycsCi0gICAgICAgICdjb25zb2xlL2RlYnVnX2h1Yi5oJywKLSAgICAgICAgJ2NvbnNvbGUvZGVidWdnZXJfZXZlbnRfdGFyZ2V0LmNjJywKLSAgICAgICAgJ2NvbnNvbGUvZGVidWdnZXJfZXZlbnRfdGFyZ2V0LmgnLAotICAgICAgICAnZGVidWdfY2xpZW50LmNjJywKLSAgICAgICAgJ2RlYnVnX2NsaWVudC5oJywKLSAgICAgICAgJ2pzb25fb2JqZWN0LmNjJywKLSAgICAgICAgJ2pzb25fb2JqZWN0LmgnLAotICAgICAgICAncmVtb3RlL2RlYnVnX3dlYl9zZXJ2ZXIuY2MnLAotICAgICAgICAncmVtb3RlL2RlYnVnX3dlYl9zZXJ2ZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c2NyaXB0JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc3BlZWNoLmd5cDpzcGVlY2gnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6aHR0cF9zZXJ2ZXInLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZGV2dG9vbHMvZGV2dG9vbHMuZ3lwOmRldnRvb2xzJywKLSAgICAgICAgJ2NvbnNvbGVfY29tbWFuZF9tYW5hZ2VyJywKLSAgICAgICAgJ2NvcHlfYmFja2VuZF93ZWJfZmlsZXMnLAotICAgICAgICAnY29weV9jb25zb2xlX3dlYl9maWxlcycsCi0gICAgICAgICdjb3B5X3JlbW90ZV93ZWJfZmlsZXMnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBBbnl0aGluZyB0aGF0IGltcGxlbWVudHMgYSBjb25zb2xlIGNvbW1hbmQgY2FuIGRlcGVuZCBvbiB0aGlzIHdpdGhvdXQKLSAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSB3aG9sZSBkZWJ1ZyBtb2R1bGUuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnY29uc29sZV9jb21tYW5kX21hbmFnZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICMgRXZlcnl0aGluZyBpcyBjb25kaXRpb25hbCBzbyBpbXBsZW1lbnRlcnMgb2YgY29tbWFuZHMgY2FuIGRlcGVuZCBvbgotICAgICAgICAjIHRoaXMgdW5jb25kaXRpb25hbGx5LgotICAgICAgICBbJ2VuYWJsZV9kZWJ1Z2dlciA9PSAxJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2NvbnNvbGUvY29tbWFuZF9tYW5hZ2VyLmNjJywKLSAgICAgICAgICAgICdjb25zb2xlL2NvbW1hbmRfbWFuYWdlci5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9iYWNrZW5kX3dlYl9maWxlcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3dlYl9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2RlYnVnL2JhY2tlbmQvY29udGVudC8nLAotICAgICAgICBdLAotICAgICAgICAjIENhbm9uaWNhbGx5IHRoaXMgc2hvdWxkIGJlICJjb2JhbHQvZGVidWcvYmFja2VuZCIgdG8gbWF0Y2ggdGhlIHNvdXJjZQotICAgICAgICAjIHBhdGgsIGJ1dCB3ZSBwdXQgaXQgaW4gdGhlIHJvb3Qgb2YgdGhlIGNvbnRlbnQgZGlyIHRvIHJlZHVjZSBkZXB0aC4KLSAgICAgICAgJ2NvbnRlbnRfd2ViX291dHB1dF9zdWJkaXInOiAnZGVidWdfYmFja2VuZCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L2J1aWxkL2NvcHlfd2ViX2RhdGEuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvcHlfY29uc29sZV93ZWJfZmlsZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29udGVudF93ZWJfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kZWJ1Zy9jb25zb2xlL2NvbnRlbnQvJywKLSAgICAgICAgXSwKLSAgICAgICAgIyBDYW5vbmljYWxseSB0aGlzIHNob3VsZCBiZSAiY29iYWx0L2RlYnVnL2NvbnNvbGUiIHRvIG1hdGNoIHRoZSBzb3VyY2UKLSAgICAgICAgIyBwYXRoLCBidXQgd2UgcHV0IGl0IGluIHRoZSByb290IG9mIHRoZSBjb250ZW50IGRpciB0byByZWR1Y2UgZGVwdGguCi0gICAgICAgICdjb250ZW50X3dlYl9vdXRwdXRfc3ViZGlyJzogJ2RlYnVnX2NvbnNvbGUnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC9idWlsZC9jb3B5X3dlYl9kYXRhLmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X3JlbW90ZV93ZWJfZmlsZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29udGVudF93ZWJfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kZWJ1Zy9yZW1vdGUvY29udGVudC8nLAotICAgICAgICBdLAotICAgICAgICAjIENhbm9uaWNhbGx5IHRoaXMgc2hvdWxkIGJlICJjb2JhbHQvZGVidWcvcmVtb3RlIiB0byBtYXRjaCB0aGUgc291cmNlCi0gICAgICAgICMgcGF0aCwgYnV0IHdlIHB1dCBpdCBpbiB0aGUgcm9vdCBvZiB0aGUgY29udGVudCBkaXIgdG8gcmVkdWNlIGRlcHRoLgotICAgICAgICAnY29udGVudF93ZWJfb3V0cHV0X3N1YmRpcic6ICdkZWJ1Z19yZW1vdGUnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC9idWlsZC9jb3B5X3dlYl9kYXRhLmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kZWJ1Zy9yZW1vdGUvY29udGVudC9CVUlMRC5nbiBiL2NvYmFsdC9kZWJ1Zy9yZW1vdGUvY29udGVudC9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFhOGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RlYnVnL3JlbW90ZS9jb250ZW50L0JVSUxELmduCkBAIC0wLDAgKzEsMjggQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitjb3B5KCJjb3B5X3JlbW90ZV93ZWJfZmlsZXMiKSB7CisgIGluc3RhbGxfY29udGVudCA9IHRydWUKKworICBzb3VyY2VzID0gWworICAgICJjb2JhbHQtbG9nby0xODAucG5nIiwKKyAgICAiZmF2aWNvbi5pY28iLAorICAgICJpbmRleC5odG1sIiwKKyAgICAianNvbi9pbmRleC5qc29uIiwKKyAgXQorCisgICMgQ2Fub25pY2FsbHkgdGhpcyBzaG91bGQgYmUgImNvYmFsdC9kZWJ1Zy9yZW1vdGUiIHRvIG1hdGNoIHRoZSBzb3VyY2UKKyAgIyBwYXRoLCBidXQgd2UgcHV0IGl0IGluIHRoZSByb290IG9mIHRoZSBjb250ZW50IGRpciB0byByZWR1Y2UgZGVwdGguCisgIG91dHB1dHMgPSBbICIkc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpci93ZWIvZGVidWdfcmVtb3RlL3t7c291cmNlX3RhcmdldF9yZWxhdGl2ZX19IiBdCit9CmRpZmYgLS1naXQgYS9jb2JhbHQvZGVtb3MvY29udGVudC9oeWJyaWQtbmF2aWdhdGlvbi9oeWJyaWQtbmF2aWdhdGlvbi1ncmlkLXJ0bC5odG1sIGIvY29iYWx0L2RlbW9zL2NvbnRlbnQvaHlicmlkLW5hdmlnYXRpb24vaHlicmlkLW5hdmlnYXRpb24tZ3JpZC1ydGwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzIxNDFjCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RlbW9zL2NvbnRlbnQvaHlicmlkLW5hdmlnYXRpb24vaHlicmlkLW5hdmlnYXRpb24tZ3JpZC1ydGwuaHRtbApAQCAtMCwwICsxLDE4MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBUaGlzIGRlbW8gZGVtb25zdHJhdGVzIGhvdyBzY3JvbGwgY29udGFpbmVyIHNob3VsZCBiZWhhdmUgaW4gUlRMIG1vZGUuCisgLS0+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgYm9keSB7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNSwyNSwyNSk7CisgICAgICAgIGNvbG9yOiByZ2IoMjAwLDIwMCwyMDApOworICAgICAgICB3aWR0aDogMTkyMHB4OworICAgICAgICBoZWlnaHQ6IDcyMHB4OworICAgICAgfQorCisgICAgICAudnNjcm9sbCB7CisgICAgICAgIG92ZXJmbG93OiBhdXRvOworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMHB4LDEwMHB4KTsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDUwLDUwLDUwKTsKKyAgICAgICAgd2lkdGg6IDEwODBweDsKKyAgICAgICAgaGVpZ2h0OiA1MjBweDsKKyAgICAgIH0KKworICAgICAgLmhzY3JvbGwgeworICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNzUsIDc1LCA3NSk7CisgICAgICAgIHdpZHRoOiAxMDgwcHg7CisgICAgICAgIGhlaWdodDogMzIwcHg7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBmb2N1c0l0ZW0gaXMgdXNlZCBhcyB0aGUgYWN0dWFsIGZvY3VzYWJsZSBpdGVtLiBJdHMgZGltZW5zaW9ucyBhcmUKKyAgICAgICAqIHN0YXRpYyBzbyB0aGF0IHRoZSB1bmRlcmx5aW5nIFNiVWlOYXZpZ2F0aW9uIHN5c3RlbSBrbm93cyBob3cgbXVjaCB0bworICAgICAgICogc2Nyb2xsIHRvIGVuc3VyZSBpdCBpcyBmdWxseSB2aXNpYmxlLiBUaGUgc2Nyb2xsIGFuaW1hdGlvbiBpcyB1c3VhbGx5CisgICAgICAgKiBjYWxjdWxhdGVkIHRvIGJyaW5nIHRoZSB0by1iZS1mb2N1c2VkIGl0ZW0gaW50byB2aWV3LCBidXQgaWYgdGhhdCBpdGVtCisgICAgICAgKiBpcyByZXNpemVkIGFmdGVyIHRoZSBhbmltYXRpb24gc3RhcnRzLCB0aGVuIHRoZSBhbmltYXRpb24gbWF5IG5vCisgICAgICAgKiBsb25nZXIgZW5kIHdpdGggdGhlIGxhcmdlciBpdGVtIGluIGZ1bGwgdmlldy4KKyAgICAgICAqLworICAgICAgLmZvY3VzSXRlbSB7CisgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgICBoZWlnaHQ6IDMwMHB4OworICAgICAgICBvdXRsaW5lOiBub25lOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICogZm9jdXNDb250ZW50IHdpbGwgcmVhY3QgdG8gZm9jdXMgY2hhbmdlcy4gSXRzIHNpemUgd2lsbCBncm93IHdoZW4KKyAgICAgICAqIGl0cyBwYXJlbnQgcmVjZWl2ZXMgZm9jdXMuCisgICAgICAgKi8KKyAgICAgIC5mb2N1c0NvbnRlbnQgeworICAgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAgICBtYXJnaW46IDIwcHg7CisgICAgICAgIGJvcmRlcjogNXB4IHNvbGlkIHJnYigwLDAsMCk7CisgICAgICAgIHdpZHRoOiAyNTBweDsKKyAgICAgICAgaGVpZ2h0OiAyNTBweDsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDI1MHB4OworICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgICAgIGZvbnQtc2l6ZTogMTAwcHg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhlIHVzZXIgbWF5IGJlIHNjcm9sbGluZyB0aHJvdWdoIGl0ZW1zIHF1aWNrbHkuIFVzZSBhIHRyYW5zaXRpb24KKyAgICAgICAgICogZGVsYXkgc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBzaG93biBvbmNlIHRoZSB1c2VyIHNldHRsZXMgb24gYQorICAgICAgICAgKiBmb2N1cyBpdGVtLgorICAgICAgICAgKi8KKyAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXM7CisgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMXM7CisgICAgICB9CisKKyAgICAgIC8qCisgICAgICAgKiBVcGRhdGUgZm9jdXNDb250ZW50IHdoZW4gdGhlIHBhcmVudCBpcyBmb2N1c2VkLgorICAgICAgICovCisgICAgICAuZm9jdXNJdGVtOmZvY3VzIC5mb2N1c0NvbnRlbnQgeworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLDI0MCwyNDApOworICAgICAgICBjb2xvcjogcmdiKDAsMCwwKTsKKyAgICAgICAgdHJhbnNmb3JtOiAtY29iYWx0LXVpLW5hdi1mb2N1cy10cmFuc2Zvcm0oKSBzY2FsZSgxLjEpOworICAgICAgfQorCisgICAgICAvKgorICAgICAgICogQWRkIGEgc3BvdGxpZ2h0IHRvIGZvY3VzQ29udGVudCB3aGVuIHRoZSBwYXJlbnQgaXMgZm9jdXNlZC4KKyAgICAgICAqLworICAgICAgLmZvY3VzSXRlbTpmb2N1cyAuZm9jdXNDb250ZW50OjphZnRlciB7CisgICAgICAgIGNvbnRlbnQ6ICcnOworICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIHRvcDogMDsKKyAgICAgICAgbGVmdDogMDsKKyAgICAgICAgd2lkdGg6IDEwMCU7CisgICAgICAgIGhlaWdodDogMTAwJTsKKyAgICAgICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KHJnYmEoMjU1LDAsMCwwLjUpIDAlLCByZ2JhKDI1NSwwLDAsMCkgMzAlKTsKKyAgICAgICAgdHJhbnNmb3JtOiAtY29iYWx0LXVpLW5hdi1zcG90bGlnaHQtdHJhbnNmb3JtKCk7CisgICAgICB9CisgICAgPC9zdHlsZT4KKyAgPC9oZWFkPgorCisgIDxib2R5IGNsYXNzPSJib2R5Ij4KKyAgICA8ZGl2IGNsYXNzPSJ2c2Nyb2xsIj4KKyAgICAgIDxkaXYgY2xhc3M9ImhzY3JvbGwiIGRpcj0icnRsIj4KKyAgICAgICAgPCEtLQorICAgICAgICAgfCB0cmFuc2xhdGVYKCkgc2hvdWxkIGJlIGhvbm9yZWQgd2hlbiBjb21wdXRpbmcgaXRlbXMnIHBvc2l0aW9uIGluIHJ0bCBtb2RlLgorICAgICAgICAgfCBUaGUgcmlnaHQgZWRnZSBvZiBBMCBzaG91bGQgYmUgNTBweCBmcm9tIHRoZSByaWdodCBlZGdlIG9mIHRoZSBjb250YWluZXIgd2hlbiB0aGUKKyAgICAgICAgIHwgcGFnZSBpcyByZW5kZXJlZC4KKyAgICAgICAgIHwgVXNlciBzaG91bGQgYmUgYWJsZSB0byBzY3JvbGwgaXRlbXMgdXNpbmcgdGhlIGVudGlyZSB3aWR0aCBvZiB0aGUgY29udGFpbmVyLAorICAgICAgICAgfCBtZWFuaW5nIEEwIHNob3VsZCBiZSB2aXNpYmx5IHRyYW5zbGF0ZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3NpdGlvbiB0byB0aGUgcmlnaHQgZWRnZQorICAgICAgICAgfCBvZiB0aGUgY29udGFpbmVyLgorICAgICAgICAgfCBBMCBzaG91bGQgc3RvcCA1MHB4IGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGNvbnRhaW5lciB3aGVuIHNjcm9sbGluZyBiYWNrIHRvCisgICAgICAgICB8IEEwLgorICAgICAgICAgLS0+CisgICAgICAgIDxkaXYgaWQ9InN0YXJ0IiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkEwPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkExPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNjUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkEyPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOTUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkEzPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTI1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5BNDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTE1NTBweCkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzQ29udGVudCI+QTU8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xODUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkE2PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjE1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5BNzwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI0NTBweCkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzQ29udGVudCI+QTg8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yNzUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkE5PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJoc2Nyb2xsIiBkaXI9InJ0bCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5CMDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTM1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5CMTwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTY1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5CMjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTk1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5CMzwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEyNTBweCkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzQ29udGVudCI+QjQ8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xNTUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkI1PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTg1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5CNjwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNJdGVtIiB0YWJpbmRleD0iLTIiIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTIxNTBweCkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzQ29udGVudCI+Qjc8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yNDUwcHgpIj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0NvbnRlbnQiPkI4PC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJmb2N1c0l0ZW0iIHRhYmluZGV4PSItMiIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjc1MHB4KSI+CisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5COTwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2JvZHk+CisgIDxzY3JpcHQ+CisgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInN0YXJ0IikuZm9jdXMoKTsKKyAgICB9CisgIDwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlbW9zL2NvbnRlbnQvbmV0d29yay1zdGF0dXMtZGVtby9pbmRleC5odG1sIGIvY29iYWx0L2RlbW9zL2NvbnRlbnQvbmV0d29yay1zdGF0dXMtZGVtby9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NGEyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvZGVtb3MvY29udGVudC9uZXR3b3JrLXN0YXR1cy1kZW1vL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyMyBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0IG5ldHdvcmsgc3RhdHVzPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgc3R5bGU9ImNvbG9yOiB3aGl0ZTsiPgorICAgIDxoMT4KKyAgICAgICAgPHNwYW4+TmV0d29yayBTdGF0dXMgVmFsdWU6PC9zcGFuPgorICAgICAgICA8c3BhbiBpZD0ibmV0X3N0YXQiPm4vYTwvc3Bhbj4KKyAgICA8L2gxPgorCisgICAgPHNjcmlwdD4KKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgY29uc29sZS5sb2coJ29mZmxpbmUnKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXRfc3RhdCcpLmlubmVySFRNTCA9ICJGYWxzZSI7CisgICAgICAgIH0pOworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbmxpbmUnKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduZXRfc3RhdCcpLmlubmVySFRNTCA9ICJUcnVlIjsKKyAgICAgICAgfSk7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9jb2JhbHQvZGVtb3MvY29udGVudC9wZXJmb3JtYW5jZS1hcGktZGVtby9wZXJmb3JtYW5jZS1uYXZpZ2F0aW9uLXRpbWluZy1kZW1vLmh0bWwgYi9jb2JhbHQvZGVtb3MvY29udGVudC9wZXJmb3JtYW5jZS1hcGktZGVtby9wZXJmb3JtYW5jZS1uYXZpZ2F0aW9uLXRpbWluZy1kZW1vLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3YjExMAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9kZW1vcy9jb250ZW50L3BlcmZvcm1hbmNlLWFwaS1kZW1vL3BlcmZvcm1hbmNlLW5hdmlnYXRpb24tdGltaW5nLWRlbW8uaHRtbApAQCAtMCwwICsxLDgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorCis8aGVhZD4KKyAgPHRpdGxlPlBlcmZvcm1hbmNlIE5hdmlnYXRpb24gVGltaW5nIERlbW88L3RpdGxlPgorICA8c3R5bGU+CisgICAgYm9keSB7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7CisgICAgICBjb2xvcjogIzAwNDdhYjsKKyAgICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICB9CisgIDwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIExvZ0luZm8oaW5mbywgdGltZSkgeworICAgICAgdmFyIG1lc3NhZ2UgPSBpbmZvICsgIjogIiArIHRpbWU7CisgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTsKKyAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZvJykuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiLlxuIjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXRoKHBhdGhuYW1lKSB7CisgICAgICB2YXIgZmlsZW5hbWUgPSBwYXRobmFtZS5zdWJzdHJpbmcocGF0aG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOworICAgICAgcmV0dXJuIHBhdGhuYW1lLnN1YnN0cmluZygwLCBwYXRobmFtZS5sZW5ndGggLSBmaWxlbmFtZS5sZW5ndGgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRJbWFnZSgpIHsKKyAgICAgIHZhciBzdG9yZWRfZW50cmllcyA9IFtdOworICAgICAgdmFyIGltZ19sb2NhdGlvbiA9IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbiArIHBhdGgoZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUpCisgICAgICAgICAgKyAicmVzb3VyY2VzL3NxdWFyZS5wbmciOworICAgICAgdmFyIGltZzEgPSBpbWdfbG9jYXRpb247CisgICAgICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAgICBpbWcuc3JjID0gaW1nMTsKKyAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICB9CisKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgeworICAgICAgLy8gTG9hZCBpbWFnZSBmb3IgbG9nZ2luZyByZXNvdXJjZSB0aW1pbmcgaW5mby4KKyAgICAgIGxvYWRJbWFnZSgpOworCisgICAgICAvLyBMb2cgcGVyZm9ybWFuY2UgdGltZSBub3cuCisgICAgICBsZXQgbm93ID0gd2luZG93LnBlcmZvcm1hbmNlLm5vdygpOworICAgICAgTG9nSW5mbygiUGVyZm9ybWFuY2Ugbm93Iiwgbm93KTsKKworICAgICAgLy8gR2V0IG5hdmlnYXRpb24gdGltaW5nIGVudHJ5IGZyb20gcGVyZm9ybWFuY2UgZW50cnkgYnVmZmVyLgorICAgICAgbGV0IG5hdmlnYXRpb25UaW1pbmcgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlUeXBlKCJuYXZpZ2F0aW9uIilbMF07CisKKyAgICAgIC8vIExvZyBwZXJmb3JtYW5jZSBuYXZpZ2F0aW9uIHRpbWluZyBpbmZvLgorICAgICAgTG9nSW5mbygiVW5sb2FkIGV2ZW50IHN0YXJ0IiwgbmF2aWdhdGlvblRpbWluZy51bmxvYWRFdmVudFN0YXJ0KTsKKyAgICAgIExvZ0luZm8oIlVubG9hZCBldmVudCBlbmQiLCBuYXZpZ2F0aW9uVGltaW5nLnVubG9hZEV2ZW50RW5kKTsKKyAgICAgIExvZ0luZm8oIkRvbSBjb250ZW50IGxvYWRlZCBldmVudCBzdGFydCIsIG5hdmlnYXRpb25UaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQpOworICAgICAgTG9nSW5mbygiRG9tIGNvbnRlbnQgbG9hZGVkIGV2ZW50IGVuZCIsIG5hdmlnYXRpb25UaW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50RW5kKTsKKyAgICAgIExvZ0luZm8oIkRvbSBjb21wbGV0ZSIsIG5hdmlnYXRpb25UaW1pbmcuZG9tQ29tcGxldGUpOworICAgICAgTG9nSW5mbygiTG9hZCBldmVudCBzdGFydCIsIG5hdmlnYXRpb25UaW1pbmcubG9hZEV2ZW50U3RhcnQpOworICAgICAgTG9nSW5mbygiTG9hZCBldmVudCBlbmQiLCBuYXZpZ2F0aW9uVGltaW5nLmxvYWRFdmVudEVuZCk7CisKKyAgICAgIC8vIExvZyBwZXJmb3JtYW5jZSByZXNvdXJjZSB0aW1pbmcgaW5mby4KKyAgICAgIExvZ0luZm8oIkZldGNoIHN0YXJ0IiwgbmF2aWdhdGlvblRpbWluZy5mZXRjaFN0YXJ0KTsKKyAgICAgIExvZ0luZm8oIkNvbm5lY3Qgc3RhcnQiLCBuYXZpZ2F0aW9uVGltaW5nLmNvbm5lY3RTdGFydCk7CisgICAgICBMb2dJbmZvKCJDb25uZWN0IGVuZCIsIG5hdmlnYXRpb25UaW1pbmcuY29ubmVjdEVuZCk7CisgICAgICBMb2dJbmZvKCJSZXF1ZXN0IHN0YXJ0IiwgbmF2aWdhdGlvblRpbWluZy5yZXF1ZXN0U3RhcnQpOworICAgICAgTG9nSW5mbygiUmVzcG9uc2Ugc3RhcnQiLCBuYXZpZ2F0aW9uVGltaW5nLnJlc3BvbnNlU3RhcnQpOworCisgICAgICAvLyBDaGVjayBuYXZpZ2F0aW9uIHR5cGUuCisgICAgICBsZXQgbmF2aWdhdGlvblR5cGUgPSAiTmF2aWdhdGlvbiB0eXBlOiAiOworICAgICAgaWYgKG5hdmlnYXRpb25UaW1pbmcudHlwZSA9PSBQZXJmb3JtYW5jZU5hdmlnYXRpb24uVFlQRV9OQVZJR0FURSkgeworICAgICAgICBjb25zb2xlLmxvZyhuYXZpZ2F0aW9uVHlwZSArICJOYXZpZ2F0aW9uIik7CisgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRpb25UaW1pbmcudHlwZSA9PSBQZXJmb3JtYW5jZU5hdmlnYXRpb24uVFlQRV9SRUxPQUQpIHsKKyAgICAgICAgY29uc29sZS5sb2cobmF2aWdhdGlvblR5cGUgKyAiUmVsb2FkIik7CisgICAgICB9CisKKyAgICB9KTsKKworICA8L3NjcmlwdD4KKyAgPGRpdj4KKyAgICA8c3BhbiBpZD0naW5mbycgc3R5bGU9J3doaXRlLXNwYWNlOiBwcmU7IGJhY2tncm91bmQtY29sb3I6IzAwRkYwMCc+PC9zcGFuPgorICA8L2Rpdj4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L2RlbW9zL2NvbnRlbnQvd29ya2Vycy1kZW1vL3dvcmtlcnMtZGVtby5odG1sIGIvY29iYWx0L2RlbW9zL2NvbnRlbnQvd29ya2Vycy1kZW1vL3dvcmtlcnMtZGVtby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTdiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvZGVtb3MvY29udGVudC93b3JrZXJzLWRlbW8vd29ya2Vycy1kZW1vLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgd29ya2VycycpCisgICAgICAgIHdvcmtlcl9vbmUgPSBuZXcgV29ya2VyKCJjb25zb2xlIikKKyAgICAgICAgd29ya2VyX3R3byA9IG5ldyBXb3JrZXIoImNvbnNvbGUubG9nIikKKyAgICAgICAgd29ya2VyX3RocmVlID0gbmV3IFdvcmtlcigiY29uc29sZS5sb2coJ2ZvbycpOyIpCisgICAgICAgIHdvcmtlcl9mb3VyPSBuZXcgV29ya2VyKCJjb25zb2xlLmxvZygnYmFyJyk7IikKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzQ4QyI+V29ya2VycyBEZW1vPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb2JhbHQvZGVtb3MvZGVtb3MuZ3lwIGIvY29iYWx0L2RlbW9zL2RlbW9zLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAyZWM0NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvZGVtb3MvZGVtb3MuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9kZW1vcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvZGVtb3MvY29udGVudC8nIF0sCi0gICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdkZW1vcycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaSddLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9jL21lbW9yeV90dW5pbmcubWQgYi9jb2JhbHQvZG9jL21lbW9yeV90dW5pbmcubWQKaW5kZXggOGY2NWVlOC4uNjYyZmI1OSAxMDA2NDQKLS0tIGEvY29iYWx0L2RvYy9tZW1vcnlfdHVuaW5nLm1kCisrKyBiL2NvYmFsdC9kb2MvbWVtb3J5X3R1bmluZy5tZApAQCAtMzgsNyArMzgsNyBAQAogc3ViLXN5c3RlbSwgdGhlIHR5cGUsIGFuZCB3aGVyZSBpdCBjYW1lIGZyb20uCiAKICoqU0VUVElORyBOQU1FOioqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIG1lbW9yeSBzZXR0aW5nLiBJZiBhIHNldHRpbmcgY2FuIGJlCi1tYW51YWxseSBzZXQgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lIG9yIHRoZSBidWlsZCBzeXN0ZW0sIHRoZW4gaXQgd2lsbCBiZQorbWFudWFsbHkgc2V0IHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBvciBDb2JhbHQgZXh0ZW5zaW9uLCB0aGVuIGl0IHdpbGwgYmUKIGFjY2Vzc2libGUgYnkgdXNpbmcgdGhpcyBuYW1lLiBGb3IgZXhhbXBsZSBhZGRpbmcgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudAogYC0taW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcz0yNTE2NTgyNGAgd2lsbCBtYW51YWxseSBzZXQgdGhlIEltYWdlIENhY2hlIFNpemUgdG8KIDI0IG1lZ2FieXRlcy4gQWxzbyBub3RlIHRoYXQgdGhpcyBpcyBhbHNvIGVxdWl2YWxlbnQ6CkBAIC02NCw5ICs2NCwxMCBAQAogICAgICogYFN0YXJib2FyZCBBUElgCiAgICAgICAqIFRoZSB2YWx1ZSB1c2VkIHdhcyByZXBvcnRlZCBieSB0aGUgcmVzdWx0IG9mIGEgU3RhcmJvYXJkIEFQSSBmdW5jdGlvbiBjYWxsLgogICAgICAgKiBFeGFtcGxlOiBgU2JTeXN0ZW1HZXRVc2VkQ1BVTWVtb3J5KClgCi0gICAgKiBgQnVpbGRgCi0gICAgICAqIFNwZWNpZmllZCBieSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYCouZ3lwKGkpYCBidWlsZCBmaWxlLgotICAgICAgKiBGb3IgZXhhbXBsZTogc2VlIGBpbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzYCBpbiBbYGJ1aWxkL2NvbmZpZy9iYXNlLmd5cGlgXSguLi9idWlsZC9jb25maWcvYmFzZS5neXBpKQorICAgICogYENvbmZpZ3VyYXRpb24gRXh0ZW5zaW9uYAorICAgICAgKiBTcGVjaWZpZWQgYnkgdGhlIGBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpYC4KKyAgICAgICogRm9yIGV4YW1wbGU6IHNlZSBgQ29iYWx0SW1hZ2VDYWNoZVNpemVJbkJ5dGVzYCBpbgorICAgICAgICBbYGNvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uY2NgXSguLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uY2MpLgogICAgICogYENtZExpbmVgCiAgICAgICAqIFJlYWQgdGhlIG1lbW9yeSBzZXR0aW5nIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KICAgICAgICogRm9yIGV4YW1wbGU6IGBjb2JhbHQgLS1pbWFnZV9jYWNoZV9zaXplX2luX2J5dGVzPTI0TUJgLgpAQCAtMTEwLDkgKzExMSw2IEBACiAgKiBgQ21kTGluZWAKICAgICogYG1heF9jb2JhbHRfY3B1X3VzYWdlYDogLS1tYXhfY29iYWx0X2NwdV91c2FnZSB3YXMgdXNlZCBhcyBhIGNvbW1hbmQgYXJndW1lbnQuCiAgICAqIGBtYXhfY29iYWx0X2dwdV91c2FnZWA6IC0tbWF4X2NvYmFsdF9ncHVfdXNhZ2Ugd2FzIHVzZWQgYXMgYSBjb21tYW5kIGFyZ3VtZW50LgotICogYEJ1aWxkYAotICAgKiBgbWF4X2NvYmFsdF9jcHVfdXNhZ2VgOiBtYXhfY29iYWx0X2NwdV91c2FnZSB3YXMgc3BlY2lmaWVkIGluIGEgcGxhdGZvcm0gZ3lwIGZpbGUuCi0gICAqIGBtYXhfY29iYWx0X2dwdV91c2FnZWA6IG1heF9jb2JhbHRfZ3B1X3VzYWdlIHdhcyBzcGVjaWZpZWQgaW4gYSBwbGF0Zm9ybSBneXAgZmlsZS4KIAogKipUT1RBTCoqOiBSZXByZXNlbnRzIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBtZW1vcnkgZm9yIHNldHRpbmdzLiBUaGlzIHZhbHVlCiBjYW1lIGZyb20gKipTT1VSQ0UqKi4KQEAgLTEzMiwyMCArMTMwLDEwIEBACiAKICMjIFNldHRpbmcgTWF4aW11bSBNZW1vcnkgVmFsdWVzICMjCiAKLVRoZSBtYXggY3B1IGFuZCBncHUgbWVtb3J5IG9mIHRoZSBzeXN0ZW0gY2FuIGJlIHNldCBlaXRoZXIgYnkgY29tbWFuZCBsaW5lIG9yCi1ieSBtb2RpZnlpbmcgdGhlIGd5cCBidWlsZCBmaWxlLgotCi1Db21tYW5kIExpbmU6CitUaGUgbWF4IGNwdSBhbmQgZ3B1IG1lbW9yeSBvZiB0aGUgc3lzdGVtIGNhbiBiZSBzZXQgYnkgY29tbWFuZCBsaW5lOgogICAqIGAtLW1heF9jb2JhbHRfY3B1X3VzYWdlPTE2ME1CYAogICAqIGAtLW1heF9jb2JhbHRfZ3B1X3VzYWdlPTE2ME1CYAogCi1CdWlsZCBzZXR0aW5nczoKLSAgKiBgc3RhcmJvYXJkLzxQTEFURk9STT4vZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAKLSAgICAqIGBtYXhfY29iYWx0X2NwdV91c2FnZWAKLSAgICAqIGBtYXhfY29iYWx0X2dwdV91c2FnZWAKLQotQ29tbWFuZCBMaW5lIHNldHRpbmdzIHdpbGwgb3ZlcnJpZGUgYnVpbGQgc2V0dGluZ3MuCi0KICMjIyBNZW1vcnkgU2NhbGluZyAjIyMKIAogVGhlcmUgYXJlIHR3byBwcmltYXJ5IHdheXMgaW4gd2hpY2ggdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBzZXR0aW5ncyB3aWxsIHNjYWxlIGRvd24uCkBAIC0xNzcsMjAgKzE2NSwyMiBAQAogTGV0J3Mgc2F5IHRoYXQgd2UgYXJlIGNvbmZpZ3VyaW5nIHBsYXRmb3JtIGNhbGxlZCAiWFhYIjoKIAogV2Ugd2lsbCBjb25maWd1cmUgWFhYIHN1Y2ggdGhhdDoKLSAgKiBgaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2Agd2lsbCBiZSBzZXQgdG8gMzJNQiBpbiB0aGUgYnVpbGQgc2V0dGluZ3MuCi0gICogYHNraWFfYXRsYXNfdGV4dHVyZV9kaW1lbnNpb25zYCB3aWxsIGJlIHNldCB0byBgMjA0OHgyMDQ4eDJgIGluIHRoZSBidWlsZCBzZXR0aW5ncy4KKyAgKiBgaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2Agd2lsbCBiZSBzZXQgdG8gMzJNQiBpbiB0aGUgY29uZmlndXJhdGlvbgorICAgICBleHRlbnNpb24uCisgICogYHNraWFfYXRsYXNfdGV4dHVyZV9kaW1lbnNpb25zYCB3aWxsIGJlIHNldCB0byBgMjA0OHgyMDQ4eDJgIGluIHRoZQorICAgIGNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9uLgogICAqIGBtYXhfY29iYWx0X2NwdV91c2FnZWAgd2lsbCBiZSBzZXQgdG8gMTYwTUIgb24gdGhlIGNvbW1hbmQgbGluZS4KIAogKipDb25maWd1cmluZyBgaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2AgdG8gYmUgMzJNQjoqKgotICAqIGluIGBzdGFyYm9hcmRcPFBMQVRGT1JNPlxneXBfY29uZmlndXJhdGlvbi5neXBpYAotICAgICogYWRkIGAnaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlcyc6IDMyICogMTAyNCAqIDEwMjQsYAorCisgICogSW1wbGVtZW50IHRoZSBgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaWAgZnVuY3Rpb24KKyAgICBgQ29iYWx0SW1hZ2VDYWNoZVNpemVJbkJ5dGVzYCB0byByZXR1cm4gYDMyICogMTAyNCAqIDEwMjRgLgogCiAqKkNvbmZpZ3VyaW5nIGBza2lhX2F0bGFzX3RleHR1cmVfZGltZW5zaW9uc2AgdG8gYmUgMjA0OHgyMDQ4eDI6KioKIAotICAqIGluIGBzcmNcc3RhcmJvYXJkXFhYWFxneXBfY29uZmlndXJhdGlvbi5neXBpYAotICAgICogYWRkIGAnc2tpYV9nbHlwaF9hdGxhc193aWR0aCc6ICcyMDQ4J2AKLSAgICAqIGFkZCBgJ3NraWFfZ2x5cGhfYXRsYXNfaGVpZ2h0JzogJzIwNDgnYAotICAgICogKG5vdGUgdGhhdCB0aGUgdGhpcmQgZGltZW5zaW9uIGlzIGFzc3VtZWQpCisgICogSW1wbGVtZW50IHRoZSBgQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbkFwaWAgZnVuY3Rpb25zCisgICAgYENvYmFsdFNraWFHbHlwaEF0bGFzV2lkdGhgIGFuZCBgQ29iYWx0U2tpYUdseXBoQXRsYXNIZWlnaHRgIHRvIGJvdGggcmV0dXJuCisgICAgYDIwNDhgLgogCiAqKkNvbmZpZ3VyaW5nIGBtYXhfY29iYWx0X2NwdV91c2FnZWAgdG8gYmUgMTYwTUI6KioKIApAQCAtMjE1LDE3ICsyMDUsMTcgQEAKICAgICAgIENQVSBNZW1vcnkgc2V0dGluZ3Mgd2lsbCBzY2FsZSBkb3duIHRoZWlyIGNvbnN1bXB0aW9uIGluIG9yZGVyIHRvIHN0YXkgdW5kZXIKICAgICAgIHRoZSBgbWF4X2NvYmFsdF9jcHVfdXNhZ2VgLiBJZiBtZW1vcnkgY29uc3VtcHRpb24gZXhjZWVkcyB0aGlzIHZhbHVlIGR1cmluZwogICAgICAgcnVudGltZSB0aGVuIGEgbWVtb3J5IHdhcm5pbmcgd2lsbCBiZSBwcmludGVkIHRvIHN0ZG91dC4KLSAgICAqIFNldCB2aWEgY29tbWFuZCBsaW5lIG9yIGVsc2UgYnVpbGQgc3lzdGVtIG9yIGVsc2Ugc3RhcmJvYXJkLgorICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUgb3IgZWxzZSBzdGFyYm9hcmQuCiAgICAgICAqIHN0YXJib2FyZCB2YWx1ZSB3aWxsIGJpbmQgdG8gYFNiU3lzdGVtR2V0VG90YWxDUFVNZW1vcnkoKWAuCiAgICogYG1heF9jb2JhbHRfZ3B1X3VzYWdlYAogICAgICogVGhpcyBzZXR0aW5nIHdpbGwgc2V0IHRoZSBtYXhpbXVtIGdwdSBtZW1vcnkgdGhhdCB0aGUgYXBwIHdpbGwgY29uc3VtZS4KICAgICAgIEdQVSBNZW1vcnkgc2V0dGluZ3Mgd2lsbCBzY2FsZSBkb3duIHRoZWlyIGNvbnN1bXB0aW9uIGluIG9yZGVyIHRvIHN0YXkgdW5kZXIKICAgICAgIHRoZSBgbWF4X2NvYmFsdF9ncHVfdXNhZ2VgLiBJZiBtZW1vcnkgY29uc3VtcHRpb24gZXhjZWVkcyB0aGlzIHZhbHVlIGR1cmluZwogICAgICAgcnVudGltZSB0aGVuIGEgbWVtb3J5IHdhcm5pbmcgd2lsbCBiZSBwcmludGVkIHRvIHN0ZG91dC4KLSAgICAqIFNldCB2aWEgY29tbWFuZCBsaW5lIG9yIGVsc2UgYnVpbGQgc3lzdGVtIG9yIGVsc2Ugc3RhcmJvYXJkLgorICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUgb3IgZWxzZSBzdGFyYm9hcmQuCiAgICAgICAqIHN0YXJib2FyZCB2YWx1ZSB3aWxsIGJpbmQgdG8gYFNiU3lzdGVtR2V0VG90YWxHUFVNZW1vcnkoKWAuCiAgICAgKiBOb3RlIHRoYXQgYFNiU3lzdGVtR2V0VG90YWxHUFVNZW1vcnkoKWAgaXMgb3B0aW9uYWwuIElmIG5vIHZhbHVlIGV4aXN0cwotICAgICAgZm9yIGBtYXhfY29iYWx0X2dwdV91c2FnZWAgaW4gYnVpbGQvY29tbWFuZGxpbmUvc3RhcmJvYXJkIHNldHRpbmdzIHRoZW4gbm8KKyAgICAgIGZvciBgbWF4X2NvYmFsdF9ncHVfdXNhZ2VgIGluIGNvbW1hbmRsaW5lL3N0YXJib2FyZCBzZXR0aW5ncyB0aGVuIG5vCiAgICAgICBHUFUgbWVtb3J5IGNoZWNraW5nIGlzIHBlcmZvcm1lZC4KIAogIyMjIyBNZW1vcnkgU2V0dGluZyBBUEkgIyMjIwpAQCAtMjMzLDExICsyMjMsMTEgQEAKICAgKiBgaW1hZ2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2AKICAgICAqIFNlZSBkb2N1bWVudGF0aW9uICpJbWFnZSBjYWNoZSBjYXBhY2l0eSogaW4gYHBlcmZvcm1hbmNlX3R1bmluZy5tZGAgZm9yIHdoYXQKICAgICAgIHRoaXMgc2V0dGluZyBkb2VzLgotICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUsIG9yIGVsc2UgYnVpbGQgc3lzdGVtLCBvciBlbHNlIGF1dG9tYXRpY2FsbHkgYnkgQ29iYWx0LgorICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUsIG9yIGVsc2UgQ29iYWx0IGV4dGVuc2lvbiwgb3IgZWxzZSBhdXRvbWF0aWNhbGx5IGJ5IENvYmFsdC4KICAgKiBgcmVtb3RlX3R5cGVmYWNlX2NhY2hlX3NpemVfaW5fYnl0ZXNgCiAgICAgKiBEZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGUgcmVtb3RlIHR5cGVmYWNlcyBjYWNoZSB3aGljaCBtYW5hZ2VzIGFsbCB0eXBlZmFjZXMKICAgICAgIGRvd25sb2FkZWQgZnJvbSBhIHdlYiBwYWdlLgotICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUsIG9yIGVsc2UgYnVpbGQgc3lzdGVtLCBvciBlbHNlIGF1dG9tYXRpY2FsbHkgYnkgQ29iYWx0LgorICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUsIG9yIGVsc2UgQ29iYWx0IGV4dGVuc2lvbiwgb3IgZWxzZSBhdXRvbWF0aWNhbGx5IGJ5IENvYmFsdC4KICAgKiBgc2tpYV9hdGxhc190ZXh0dXJlX2RpbWVuc2lvbnNgCiAgICAgKiBEZXRlcm1pbmVzIHRoZSBzaXplIGluIHBpeGVscyBvZiB0aGUgZ2x5cGggYXRsYXMgd2hlcmUgcmVuZGVyZWQgZ2x5cGhzIGFyZQogICAgICAgY2FjaGVkLiBUaGUgcmVzdWx0aW5nIG1lbW9yeSB1c2FnZSBpcyAyIGJ5dGVzIG9mIEdQVSBtZW1vcnkgcGVyIHBpeGVsLgpAQCAtMjQ3LDE4ICsyMzcsMjAgQEAKICAgICAgIGxhcmdlciwgc3VjaCBhcyBmb3IgaGlnaGVyIHJlc29sdXRpb24gZGlzcGxheXMuCiAgICAgICBUaGUgbmVnYXRpdmUgZGVmYXVsdCB2YWx1ZXMgaW5kaWNhdGVzIHRvIHRoZSBDb2JhbHQgdGhhdCB0aGVzZSBzZXR0aW5ncwogICAgICAgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgc2V0LgotICAgICogU2V0IHZpYSBjb21tYW5kIGxpbmUsIG9yIGVsc2UgYnVpbGQgc3lzdGVtLCBvciBlbHNlIGF1dG9tYXRpY2FsbHkgYnkgQ29iYWx0LgotICAgICogTm90ZSB0aGF0IGluIHRoZSBneXAgYnVpbGQgc3lzdGVtLCB0aGlzIHNldHRpbmcgaXMgcmVwcmVzZW50ZWQgYXMgdHdvIHZhbHVlczoKLSAgICAgICogYHNraWFfZ2x5cGhfYXRsYXNfd2lkdGhgIGFuZAotICAgICAgKiBgc2tpYV9nbHlwaF9hdGxhc19oZWlnaHRgCisgICAgKiBTZXQgdmlhIGNvbW1hbmQgbGluZSwgb3IgZWxzZSB0aHJvdWdoIHRoZSBDb2JhbHQgY29uZmlndXJhdGlvbiBleHRlbnNpb24sCisgICAgICBvciBlbHNlIGF1dG9tYXRpY2FsbHkgYnkgQ29iYWx0LgorICAgICogTm90ZSB0aGF0IGluIHRoZSBDb2JhbHQgY29uZmlndXJhdGlvbiBleHRlbnNpb24sIHRoaXMgc2V0dGluZyBpcworICAgICAgcmVwcmVzZW50ZWQgYXMgdHdvIGZ1bmN0aW9uczoKKyAgICAgICogYENvYmFsdFNraWFHbHlwaEF0bGFzV2lkdGhgIGFuZAorICAgICAgKiBgQ29iYWx0U2tpYUdseXBoQXRsYXNIZWlnaHRgCiAgICogYHNraWFfY2FjaGVfc2l6ZV9pbl9ieXRlc2AKICAgICAqIFNlZSBkb2N1bWVudGF0aW9uICpHbHlwaCBhdGxhcyBzaXplKiBpbiBgcGVyZm9ybWFuY2VfdHVuaW5nLm1kYCBmb3Igd2hhdCB0aGlzCiAgICAgICBzZXR0aW5nIGRvZXMuCi0gICAgKiBTZXQgdmlhIGNvbW1hbmQgbGluZSwgb3IgZWxzZSBidWlsZCBzeXN0ZW0gb3IgZWxzZSBhdXRvbWF0aWNhbGx5IGJ5IENvYmFsdC4KKyAgICAqIFNldCB2aWEgY29tbWFuZCBsaW5lLCBvciBlbHNlIENvYmFsdCBleHRlbnNpb24gc3lzdGVtIG9yIGVsc2UgYXV0b21hdGljYWxseSBieSBDb2JhbHQuCiAgICogYHNvZnR3YXJlX3N1cmZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2AKICAgICAqIFNlZSBkb2N1bWVudGF0aW9uICpTY3JhdGNoIFN1cmZhY2UgY2FjaGUgY2FwYWNpdHkqIGluIGBwZXJmb3JtYW5jZV90dW5pbmcubWRgCiAgICAgICBmb3Igd2hhdCB0aGlzIHNldHRpbmcgZG9lcy4KLSAgICAqIFNldCB2aWEgY29tbWFuZCBsaW5lLCBvciBlbHNlIGJ1aWxkIHN5c3RlbSwgb3IgZWxzZSBhdXRvbWF0aWNhbGx5IGJ5IENvYmFsdC4KKyAgICAqIFNldCB2aWEgY29tbWFuZCBsaW5lLCBvciBlbHNlIENvYmFsdCBleHRlbnNpb24sIG9yIGVsc2UgYXV0b21hdGljYWxseSBieSBDb2JhbHQuCiAKICMjIyMgVW5pdHMgZm9yIENvbW1hbmQgTGluZSBTZXR0aW5ncyAjIyMjCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb2MvcGVyZm9ybWFuY2VfdHVuaW5nLm1kIGIvY29iYWx0L2RvYy9wZXJmb3JtYW5jZV90dW5pbmcubWQKaW5kZXggMmMyOTMwMy4uYjEzMGJjZiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvYy9wZXJmb3JtYW5jZV90dW5pbmcubWQKKysrIGIvY29iYWx0L2RvYy9wZXJmb3JtYW5jZV90dW5pbmcubWQKQEAgLTEwLDExICsxMCw4IEBACiBoYXMgYSBzZXQgb2YgdGFncyBrZXl3b3JkcyB0byBtYWtlIGl0IGVhc3kgdG8gc2VhcmNoIGZvciBpdGVtcyByZWxhdGVkCiB0byBhIHNwZWNpZmljIHR5cGUgb2YgcGVyZm9ybWFuY2UgbWV0cmljIChlLmcuICJmcmFtZXJhdGUiKS4KIAotTWFueSBvZiB0aGUgdHdlYWtzIGludm9sdmUgYWRkaW5nIGEgbmV3IGd5cCB2YXJpYWJsZSB0byB5b3VyIHBsYXRmb3JtJ3MKLWBneXBfY29uZmlndXJhdGlvbi5neXBpYCBmaWxlLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGVzZSB2YXJpYWJsZXMgYXJlCi1kZWZpbmVkIGluIGVpdGhlcgotW2BiYXNlX2NvbmZpZ3VyYXRpb24uZ3lwaWBdKC4uLy4uL3N0YXJib2FyZC9idWlsZC9iYXNlX2NvbmZpZ3VyYXRpb24uZ3lwaSkgb3IKLVtgY29iYWx0X2NvbmZpZ3VyYXRpb24uZ3lwaWBdKC4uL2J1aWxkL2NvYmFsdF9jb25maWd1cmF0aW9uLmd5cGkpLgorTWFueSBvZiB0aGUgdHdlYWtzIGludm9sdmUgaW1wbGVtZW50aW5nIGEgQ29iYWx0IGV4dGVuc2lvbiBhbmQgcmV0dXJuaW5nCitkaWZmZXJlbnQgdmFsdWVzIGZyb20gc3BlY2lmaWMgZnVuY3Rpb25zLgogCiAjIyMgVXNlIGEgUmVsZWFzZSBCdWlsZAogCkBAIC0zOSwxMiArMzYsMTIgQEAKIGFzIGl0IGNhbiwgbGltaXRlZCBvbmx5IGJ5IHRoZSBkaXNwbGF5J3MgcmVmcmVzaCByYXRlLCB3aGljaCBpcyB1c3VhbGx5IDYwSHouCiBCeSBhcnRpZmljaWFsbHkgdGhyb3R0bGluZyB0aGlzIHJhdGUgdG8gYSBsb3dlciB2YWx1ZSwgbGlrZSAzMEh6LCBDUFUKIHJlc291cmNlcyBjYW4gYmUgZnJlZWQgdG8gd29yayBvbiBvdGhlciB0YXNrcy4gIFlvdSBjYW4gZW5hYmxlIGZyYW1lcmF0ZQotdGhyb3R0bGluZyBieSBzZXR0aW5nIGEgdmFsdWUgZm9yIGBjb2JhbHRfbWluaW11bV9mcmFtZV90aW1lX2luX21pbGxpc2Vjb25kc2AKLWluIHlvdXIgcGxhdGZvcm0ncyBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAgZmlsZS4gIFNldHRpbmcgaXQgdG8gMzMsIGZvcgotZXhhbXBsZSwgd2lsbCB0aHJvdHRsZSBDb2JhbHQncyByZW5kZXJlciB0byAzMCBmcmFtZXMgcGVyIHNlY29uZC4KK3Rocm90dGxpbmcgYnkgc2V0dGluZyBhIHJldHVybiB2YWx1ZSBmb3IKK2BHZXRNaW5pbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzYCBpbiB5b3VyIHBsYXRmb3JtJ3MgQ29iYWx0IGdyYXBoaWNzCitleHRlbnNpb24uICBTZXR0aW5nIGl0IHRvIDMzLCBmb3IgZXhhbXBsZSwgd2lsbCB0aHJvdHRsZSBDb2JhbHQncyByZW5kZXJlciB0bworMzAgZnJhbWVzIHBlciBzZWNvbmQgKGFzIHRoZXJlJ2xsIGJlIG9uZSBmcmFtZSBldmVyeSAzMyBtaWxsaXNlY29uZHMpLgogCi0qKlRhZ3M6KiogKmd5cF9jb25maWd1cmF0aW9uLmd5cGksIGZyYW1lcmF0ZSwgc3RhcnR1cCwgYnJvd3NlLXRvLXdhdGNoLAotICAgICAgICAgICBpbnB1dCBsYXRlbmN5LioKKyoqVGFnczoqKiAqQ29iYWx0IGV4dGVuc2lvbiwgZnJhbWVyYXRlLCBzdGFydHVwLCBicm93c2UtdG8td2F0Y2gsIGlucHV0IGxhdGVuY3kuKgogCiAKICMjIyBJbWFnZSBjYWNoZSBjYXBhY2l0eQpAQCAtNTcsMTIgKzU0LDEyIEBACiBtYWtlIG1vcmUgbmV0d29yayByZXF1ZXN0cyBhbmQgaW1hZ2UgZGVjb2RlcyBmb3IgcHJldmlvdXNseSBzZWVuIGltYWdlcy4KIENvYmFsdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBpbWFnZSBjYWNoZSBjYXBhY2l0eSB0byBhIHJlYXNvbmFibGUgdmFsdWUsCiBidXQgaWYgeW91IHdpc2ggdG8gb3ZlcnJpZGUgdGhpcywgeW91IGNhbiBkbyBzbyBieSBzZXR0aW5nIHRoZQotYGltYWdlX2NhY2hlX3NpemVfaW5fYnl0ZXNgIHZhcmlhYmxlIGluIHlvdXIgYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgIGZpbGUuICBGb3IKLXRoZSBZb3VUdWJlIHdlYiBhcHAsIHdlIGhhdmUgZm91bmQgdGhhdCBhdCAxMDgwcCwgMzJNQiB3aWxsIGFsbG93IGFyb3VuZAorYENvYmFsdEltYWdlQ2FjaGVTaXplSW5CeXRlc2AgZnVuY3Rpb24gaW4geW91ciBDb2JhbHQgY29uZmlndXJhdGlvbiBleHRlbnNpb24uCitGb3IgdGhlIFlvdVR1YmUgd2ViIGFwcCwgd2UgaGF2ZSBmb3VuZCB0aGF0IGF0IDEwODBwLCAzMk1CIHdpbGwgYWxsb3cgYXJvdW5kCiA1IHRodW1ibmFpbCBzaGVsdmVzIHRvIHN0YXkgcmVzaWRlbnQgYXQgYSB0aW1lLCB3aXRoIDcyMHAgYW5kIDRLIHJlc29sdXRpb25zCiB1c2luZyBwcm9wb3J0aW9uYWxseSBsZXNzIGFuZCBtb3JlIG1lbW9yeSwgcmVzcGVjdGl2ZWx5LgogCi0qKlRhZ3M6KiogKmd5cF9jb25maWd1cmF0aW9uLmd5cGksIGNwdSBtZW1vcnksIGdwdSBtZW1vcnkuKgorKipUYWdzOioqICpDb2JhbHQgZXh0ZW5zaW9uLCBjcHUgbWVtb3J5LCBncHUgbWVtb3J5LioKIAogCiAjIyMgSW1hZ2UgY2FjaGUgY2FwYWNpdHkgbXVsdGlwbGllciBkdXJpbmcgdmlkZW8gcGxheWJhY2sKQEAgLTc1LDMyICs3MiwxMSBAQAogbW9yZSBsaWtlbHkgdGhhdCBDb2JhbHQgd2lsbCBoYXZlIHRvIHJlLWRvd25sb2FkIGFuZCBkZWNvZGUgaW1hZ2VzIGFmdGVyCiByZXR1cm5pbmcgZnJvbSB2aWRlbyBwbGF5YmFjay4gIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgbm90IHdlbGwgdGVzdGVkLgogVGhlIGZlYXR1cmUgY2FuIGJlIGFjdGl2YXRlZCBieSBzZXR0aW5nCi1gaW1hZ2VfY2FjaGVfY2FwYWNpdHlfbXVsdGlwbGllcl93aGVuX3BsYXlpbmdfdmlkZW9gIHRvIGEgdmFsdWUgYmV0d2VlbgotYDAuMGAgYW5kIGAxLjBgIGluIHlvdXIgYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgIGZpbGUuICBUaGUgaW1hZ2UgY2FjaGUKK2BDb2JhbHRJbWFnZUNhY2hlQ2FwYWNpdHlNdWx0aXBsaWVyV2hlblBsYXlpbmdWaWRlb2AgdG8gYSB2YWx1ZSBiZXR3ZWVuCitgMC4wYCBhbmQgYDEuMGAgaW4geW91ciBDb2JhbHQgY29uZmlndXJhdGlvbiBleHRlbnNpb24uICBUaGUgaW1hZ2UgY2FjaGUKIGNhcGFjaXR5IHdpbGwgYmUgbXVsdGlwbGllZCBieSB0aGlzIHZhbHVlIGR1cmluZyB2aWRlbyBwbGF5YmFjay4KIAotKipUYWdzOioqICpneXBfY29uZmlndXJhdGlvbi5neXBpLCBncHUgbWVtb3J5LioKLQotCi0jIyMgU2NyYXRjaCBTdXJmYWNlIGNhY2hlIGNhcGFjaXR5Ci0KLVRoaXMgb25seSBhZmZlY3RzIEdMRVMgcmVuZGVyZXJzLiAgV2hpbGUgcmFzdGVyaXppbmcgYSBmcmFtZSwgaXQgaXMKLW9jY2FzaW9uYWxseSBuZWNlc3NhcnkgdG8gcmVuZGVyIHRvIGEgdGVtcG9yYXJ5IG9mZnNjcmVlbiBzdXJmYWNlIGFuZCB0aGVuCi1hcHBseSB0aGF0IHN1cmZhY2UgdG8gdGhlIG9yaWdpbmFsIHJlbmRlciB0YXJnZXQuICBPZmZzY3JlZW4gc3VyZmFjZQotcmVuZGVyaW5nIG1heSBhbHNvIG5lZWQgdG8gYmUgcGVyZm9ybWVkIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS4gIFRoZQotc2NyYXRjaCBzdXJmYWNlIGNhY2hlIHdpbGwga2VlcCBhbGxvY2F0ZWQgYSBzZXQgb2Ygc2NyYXRjaCB0ZXh0dXJlcyB0aGF0Ci13aWxsIGJlIHJldXNlZCAod2l0aGluIGFuZCBhY3Jvc3MgZnJhbWVzKSBmb3Igb2Zmc2NyZWVuIHJlbmRlcmluZy4gIFJldXNpbmcKLW9mZnNjcmVlbiBzdXJmYWNlcyBhbGxvd3MgcmVuZGVyIHRhcmdldCBhbGxvY2F0aW9ucywgd2hpY2ggY2FuIGJlIGV4cGVuc2l2ZQotb24gc29tZSBwbGF0Zm9ybXMsIHRvIGJlIG1pbmltaXplZC4gIEhvd2V2ZXIsIGl0IGhhcyBiZWVuIGZvdW5kIHRoYXQgc29tZQotcGxhdGZvcm1zIChlc3BlY2lhbGx5IHRob3NlIHdpdGggdGlsZWQgcmVuZGVyZXJzLCBsaWtlIHRoZSBSYXNwYmVycnkgUGkncwotQnJvYWRjb20gVmlkZW9Db3JlKSwgcmVhZGluZyBhbmQgd3JpdGluZyBhZ2FpbiBhbmQgYWdhaW4gdG8gdGhlIHNhbWUgdGV4dHVyZQotY2FuIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4gIE1lbW9yeSBtYXkgYWxzbyBiZSBwb3RlbnRpYWxseSBzYXZlZAotYnkgZGlzYWJsaW5nIHRoaXMgY2FjaGUsIHNpbmNlIHdoZW4gaXQgaXMgZW5hYmxlZCwgaWYgdGhlIGNhY2hlIGlzIGZpbGxlZCwgaXQKLW1heSBiZSBvY2N1cHlpbmcgbWVtb3J5IHRoYXQgaXQgaXMgbm90IGN1cnJlbnRseSB1c2luZy4gIFRoaXMgc2V0dGluZyBjYW4KLWJlIGFkanVzdGVkIGJ5IHNldHRpbmcgYHN1cmZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2AgaW4geW91cgotYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgIGZpbGUuICBBIHZhbHVlIG9mIGAwYCB3aWxsIGRpc2FibGUgdGhlIHN1cmZhY2UgY2FjaGUuCi0KLSoqVGFnczoqKiAqZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSwgZ3B1IG1lbW9yeSwgZnJhbWVyYXRlLioKKyoqVGFnczoqKiAqQ29iYWx0IGV4dGVuc2lvbiwgZ3B1IG1lbW9yeS4qCiAKIAogIyMjIEdseXBoIGF0bGFzIHNpemUKQEAgLTExNCwxMiArOTAsMTIgQEAKIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBzZXR0aW5nLCBiZSBzdXJlIHRvIHRlc3QgbWFueSBsYW5ndWFnZXMsIGFzIHNvbWUKIGFyZSBtb3JlIGRlbWFuZGluZyAoZS5nLiBDaGluZXNlIGFuZCBKYXBhbmVzZSkgb24gdGhlIGdseXBoIGNhY2hlIHRoYW4KIG90aGVycy4gIFRoaXMgdmFsdWUgY2FuIGJlIGFkanVzdGVkIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZXMgb2YKLXRoZSBgc2tpYV9nbHlwaF9hdGxhc193aWR0aGAgYW5kIGBza2lhX2dseXBoX2F0bGFzX2hlaWdodGAgdmFyaWFibGVzIGluIHlvdXIKLWBneXBfY29uZmlndXJhdGlvbi5neXBpYCBmaWxlLiAgTm90ZSB0aGF0IGJ5IGRlZmF1bHQsIHRoZXNlIHdpbGwgYmUKK3RoZSBgQ29iYWx0U2tpYUdseXBoQXRsYXNXaWR0aGAgYW5kIGBDb2JhbHRTa2lhR2x5cGhBdGxhc0hlaWdodGAgdmFyaWFibGVzIGluCit5b3VyIENvYmFsdCBjb25maWd1cmF0aW9uIGV4dGVuc2lvbi4gIE5vdGUgdGhhdCBieSBkZWZhdWx0LCB0aGVzZSB3aWxsIGJlCiBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgYnkgQ29iYWx0IHRvIHZhbHVlcyBmb3VuZCB0byBiZSBvcHRpbWFsIGZvcgogdGhlIGFwcGxpY2F0aW9uJ3MgcmVzb2x1dGlvbi4KIAotKipUYWdzOioqICpneXBfY29uZmlndXJhdGlvbi5neXBpLCBncHUgbWVtb3J5LCBpbnB1dCBsYXRlbmN5LCBmcmFtZXJhdGUuKgorKipUYWdzOioqICpDb2JhbHQgZXh0ZW5zaW9uLCBncHUgbWVtb3J5LCBpbnB1dCBsYXRlbmN5LCBmcmFtZXJhdGUuKgogCiAKICMjIyBTb2Z0d2FyZSBzdXJmYWNlIGNhY2hlIGNhcGFjaXR5CkBAIC0xMzEsOSArMTA3LDEwIEBACiByZW5kZXJzLCB0aGUgcmVzdWx0cyBhcmUgY2FjaGVkIGFuZCByZS11c2VkIGFjcm9zcyBmcmFtZXMuICBUaGUgc29mdHdhcmUKIHN1cmZhY2UgY2FjaGUgaXMgY3J1Y2lhbCB0byBhY2hpZXZpbmcgYW4gYWNjZXB0YWJsZSBmcmFtZXJhdGUgb24gQmxpdHRlciBBUEkKIHBsYXRmb3Jtcy4gIFRoZSBzaXplIG9mIHRoaXMgY2FjaGUgaXMgc3BlY2lmaWVkIGJ5IHRoZQotYHNvZnR3YXJlX3N1cmZhY2VfY2FjaGVfc2l6ZV9pbl9ieXRlc2AgdmFyaWFibGUgaW4gYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgLgorYENvYmFsdFNvZnR3YXJlU3VyZmFjZUNhY2hlU2l6ZUluQnl0ZXNgIHZhcmlhYmxlIGluIHlvdXIgQ29iYWx0IGNvbmZpZ3VyYXRpb24KK2V4dGVuc2lvbi4KIAotKipUYWdzOioqICpneXBfY29uZmlndXJhdGlvbi5neXBpLCBncHUgbWVtb3J5LCBmcmFtZXJhdGUuKgorKipUYWdzOioqICpDb2JhbHQgZXh0ZW5zaW9uLCBncHUgbWVtb3J5LCBmcmFtZXJhdGUuKgogCiAKICMjIyBUb2dnbGUgSnVzdC1Jbi1UaW1lIEphdmFTY3JpcHQgQ29tcGlsYXRpb24KQEAgLTE0OCw3ICsxMjUsNyBAQAogaXQgYnkgaW1wbGVtZW50aW5nIHRoZSBDb2JhbHRFeHRlbnNpb25Db25maWd1cmF0aW9uQXBpIG1ldGhvZAogYENvYmFsdEVuYWJsZUppdCgpYCB0byByZXR1cm4gYHRydWVgIHRvIGVuYWJsZSBKSVQsIG9yIGBmYWxzZWAgdG8gZGlzYWJsZSBpdC4KIAotKipUYWdzOioqICpneXBfY29uZmlndXJhdGlvbi5neXBpLCBzdGFydHVwLCBicm93c2UtdG8td2F0Y2gsIGlucHV0IGxhdGVuY3ksCisqKlRhZ3M6KiogKkNvYmFsdCBleHRlbnNpb24sIHN0YXJ0dXAsIGJyb3dzZS10by13YXRjaCwgaW5wdXQgbGF0ZW5jeSwKICAgICAgICAgICAgY3B1IG1lbW9yeS4qCiAKIApAQCAtMTk0LDcgKzE3MSw3IEBACiBvbiBhIEJsaXR0ZXIgQVBJIHBsYXRmb3JtLCBlbmFibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCByZXN1bHQgaW4gdGhlCiBhbGxvY2F0aW9uIGFuZCBibGl0IG9mIGEgZnVsbHNjcmVlbiAiaW50ZXJtZWRpYXRlIiBiYWNrIGJ1ZmZlciB0YXJnZXQuCiAKLSoqVGFnczoqKiAqc3RhcnR1cCwgZnJhbWVyYXRlLCBncHUgbWVtb3J5LioKKyoqVGFnczoqKiAqQ29iYWx0IGV4dGVuc2lvbiwgc3RhcnR1cCwgZnJhbWVyYXRlLCBncHUgbWVtb3J5LioKIAogCiAjIyMgRW5zdXJlIHRoYXQgdGhyZWFkIHByaW9yaXRpZXMgYXJlIHJlc3BlY3RlZApAQCAtMjE3LDI3ICsxOTQsMzQgQEAKIAogSHVnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgY2FuIGJlIG9idGFpbmVkIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHJpZ2h0CiBvcHRpbWl6YXRpb25zIGFyZSBlbmFibGVkIGJ5IHlvdXIgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFnIHNldHRpbmdzLiAgWW91Ci1jYW4gc2V0IHRoZXNlIHVwIHdpdGhpbiBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAgYnkgYWRqdXN0aW5nIHRoZSBsaXN0Ci12YXJpYWJsZXMgYGNvbXBpbGVyX2ZsYWdzYCBhbmQgYGxpbmtlcl9mbGFnc2AuICBTZWUgYWxzbwotYGNvbXBpbGVyX2ZsYWdzX2dvbGRgIGFuZCBgbGlua2VyX2ZsYWdzX2dvbGRgIHdoaWNoIGRlc2NyaWJlIGZsYWdzIHRoYXQKLWFwcGx5IG9ubHkgdG8gZ29sZCBidWlsZHMgd2hlcmUgcGVyZm9ybWFuY2UgaXMgY3JpdGljYWwuICBOb3RlIHRoYXQKLXVubGVzcyB5b3UgZXhwbGljaXRseSBzZXQgdGhpcyB1cCwgaXQgaXMgdW5saWtlbHkgdGhhdCBjb21waWxlci9saW5rZXIKLWZsYWdzIHdpbGwgY2Fycnkgb3ZlciBmcm9tIGV4dGVybmFsIHNoZWxsIGVudmlyb25tZW50IHNldHRpbmdzOyB0aGV5Ci1tdXN0IGJlIHNldCBleHBsaWNpdGx5IGluIGBneXBfY29uZmlndXJhdGlvbi5neXBpYC4KK2NhbiBzZXQgdGhlc2UgdXAgd2l0aGluIGBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduYCBieSBhZGp1c3RpbmcgdGhlCitgY2ZsYWdzYCwgYGxkZmxhZ3NgLCBhbmQgbW9yZS4gS2VlcCBpbiBtaW5kIHlvdSBjYW4gdXNlIGBpc19nb2xkYCBhbmQgb3RoZXIKK3N1Y2ggYm9vbGVhbiB2YWx1ZXMgdG8gb25seSBhcHBseSBvcHRpbWl6YXRpb25zIHdoZXJlIHBlcmZvcm1hbmNlIGlzIGNyaXRpY2FsLgorTm90ZSB0aGF0IHVubGVzcyB5b3UgZXhwbGljaXRseSBzZXQgdGhpcyB1cCwgaXQgaXMgdW5saWtlbHkgdGhhdAorY29tcGlsZXIvbGlua2VyIGZsYWdzIHdpbGwgY2Fycnkgb3ZlciBmcm9tIGV4dGVybmFsIHNoZWxsIGVudmlyb25tZW50IHNldHRpbmdzOwordGhleSBtdXN0IGJlIHNldCBleHBsaWNpdGx5IGluIGBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduYC4KIAogKipUYWdzOioqICpmcmFtZXJhdGUsIHN0YXJ0dXAsIGJyb3dzZS10by13YXRjaCwgaW5wdXQgbGF0ZW5jeSoKIAogIyMjIyBPcHRpbWl6ZSBmb3Igc2l6ZSB2cyBzcGVlZAogCi1Gb3IgcWEgYW5kIGdvbGQgY29uZmlncywgZGlmZmVyZW50IGNvbXBpbGVyIGZsYWdzIGNhbiBiZSB1c2VkIGZvciBneXAgdGFyZ2V0cworRm9yIHFhIGFuZCBnb2xkIGNvbmZpZ3MsIGRpZmZlcmVudCBjb21waWxlciBmbGFncyBjYW4gYmUgdXNlZCBmb3IgR04gdGFyZ2V0cwogd2hpY2ggc2hvdWxkIGJlIG9wdGltaXplZCBmb3Igc2l6ZSB2cyBzcGVlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byByZWR1Y2UgdGhlCi1leGVjdXRhYmxlIHNpemUgd2l0aCBtaW5pbWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gT24gdG9wIG9mIHRoZSBiYXNlCi1gY29tcGlsZXJfZmxhZ3NfcWFgIGFuZCBgY29tcGlsZXJfZmxhZ3NfZ29sZGAsIHRoZSBneXAgdmFyaWFibGVzCi1gY29tcGlsZXJfZmxhZ3NfcWFfc2l6ZWAsIGBjb21waWxlcl9mbGFnc19xYV9zcGVlZGAsIGBjb21waWxlcl9mbGFnc19nb2xkX3NpemVgLAotYW5kIGBjb21waWxlcl9mbGFnc19nb2xkX3NwZWVkYCB3aWxsIGJlIHVzZWQuIFBlcmZvcm1hbmNlLWNyaXRpY2FsIGd5cCB0YXJnZXRzCi1zcGVjaWZ5IGBvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkYDogMSwgYW5kIHRoZXNlIHdpbGwgdXNlIGNvbXBpbGVyIGZsYWdzCi1gY29tcGlsZXJfZmxhZ3NfPGNvbmZpZz5gICsgYGNvbXBpbGVyX2ZsYWdzXzxjb25maWc+X3NwZWVkYDsgb3RoZXIgZ3lwIHRhcmdldHMKLXdpbGwgdXNlIGBjb21waWxlcl9mbGFnc188Y29uZmlnPmAgKyBgY29tcGlsZXJfZmxhZ3NfPGNvbmZpZz5fc2l6ZWAuCitleGVjdXRhYmxlIHNpemUgd2l0aCBtaW5pbWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4KKworVG8gc2V0IHRoZXNlIGZsYWdzLCBpbXBsZW1lbnQgc2l6ZSBhbmQvb3Igc3BlZWQgY29uZmlncyAocHJlZmVyYWJseSBpbgorYHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ25gKSwgYW5kIHBvaW50IHRvIHRoZW0gdXNpbmcgdGhlCitgc2l6ZV9jb25maWdfcGF0aGAgYW5kIGBzcGVlZF9jb25maWdfcGF0aGAgdmFyaWFibGVzLCBzZXQgaW4KK2BwbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pYC4KKworUGVyZm9ybWFuY2UtY3JpdGljYWwgdGFyZ2V0cyByZW1vdmUgdGhlIGBzaXplYCBjb25maWcgYW5kIGFkZCB0aGUgYHNwZWVkYCBjb25maWcgbGlrZSBzbzoKKworYGBgCitjb25maWdzIC09IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzaXplIiBdCitjb25maWdzICs9IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzcGVlZCIgXQorYGBgCisKK1RoZSBzaXplIGNvbmZpZyBpcyBhcHBsaWVkIGJ5IGRlZmF1bHQuCiAKICoqVGFnczoqKiAqY3B1IG1lbW9yeSwgcGFja2FnZSBzaXplKgogCkBAIC0yNzgsMTEgKzI2MiwxMSBAQAogbWVtb3J5IGFsbG9jYXRpb25zLiAgSXQgc2hvdWxkIGJlIGNhcmVmdWxseSBldmFsdWF0ZWQgaG93ZXZlciB3aGV0aGVyCiBkbG1hbGxvYyBwZXJmb3JtcyBiZXR0ZXIgb3Igd29yc2UgdGhhbiB5b3VyIHN5c3RlbSBhbGxvY2F0b3IsIGluIHRlcm1zCiBvZiBib3RoIG1lbW9yeSBmcmFnbWVudGF0aW9uIGVmZmljaWVuY3kgYXMgd2VsbCBhcyBydW50aW1lIHBlcmZvcm1hbmNlLgotVG8gdXNlIGRsbWFsbG9jLCB5b3Ugc2hvdWxkIGFkanVzdCB5b3VyIHN0YXJib2FyZF9wbGF0Zm9ybS5neXAgZmlsZSB0bworVG8gdXNlIGRsbWFsbG9jLCB5b3Ugc2hvdWxkIGFkanVzdCB5b3VyIGBzdGFyYm9hcmRfcGxhdGZvcm1gIHRhcmdldCB0bwogdXNlIHRoZSBTdGFyYm9hcmQgW2BzdGFyYm9hcmQvbWVtb3J5LmhgXSguLi8uLi9zdGFyYm9hcmQvbWVtb3J5LmgpIGZ1bmN0aW9uCiBpbXBsZW1lbnRhdGlvbnMgZGVmaW5lZCBpbgogW2BzdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL2BdKC4uLy4uL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MpLiAgVG8gdXNlCi15b3VyIHN5c3RlbSBhbGxvY2F0b3IsIHlvdSBzaG91bGQgYWRqdXN0IHlvdXIgc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBmaWxlCit5b3VyIHN5c3RlbSBhbGxvY2F0b3IsIHlvdSBzaG91bGQgYWRqdXN0IHlvdXIgYHN0YXJib2FyZF9wbGF0Zm9ybWAgdGFyZ2V0CiB0byB1c2UgdGhlIFN0YXJib2FyZCBbYHN0YXJib2FyZC9tZW1vcnkuaGBdKC4uLy4uL3N0YXJib2FyZC9tZW1vcnkuaCkgZnVuY3Rpb24KIGltcGxlbWVudGF0aW9ucyBkZWZpbmVkIGluCiBbYHN0YXJib2FyZC9zaGFyZWQvaXNvL2BdKC4uLy4uL3N0YXJib2FyZC9zaGFyZWQvaXNvKS4KQEAgLTI5OSwxMSArMjgzLDExIEBACiBtZW1vcnkuICBIb3dldmVyLCBkZXBlbmRpbmcgb24geW91ciBwbGF0Zm9ybSBhbmQgeW91ciBzeXN0ZW0gYWxsb2NhdG9yLAogb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgbWF5IGltcHJvdmUgaWYgbWVkaWEgYnVmZmVyIGFsbG9jYXRpb25zIHdlcmUgbWFkZQogbm9ybWFsbHkgdmlhIHRoZSBzeXN0ZW0gYWxsb2NhdG9yIGluc3RlYWQuICBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBzZXR0aW5nCi1gY29iYWx0X21lZGlhX2J1ZmZlcl9pbml0aWFsX2NhcGFjaXR5YCBhbmQgYGNvYmFsdF9tZWRpYV9idWZmZXJfYWxsb2NhdGlvbl91bml0YAotdG8gMCBpbiBneXBfY29uZmlndXJhdGlvbi5neXBpLiAgTm90ZSBhbHNvIHRoYXQgaWYgeW91IGNob29zZSB0byBwcmUtYWxsb2NhdGUKLW1lbW9yeSwgZm9yIDEwODBwIHZpZGVvIGl0IGhhcyBiZWVuIGZvdW5kIHRoYXQgMjRNQiBpcyBhIGdvb2QgbWVkaWEgYnVmZmVyIHNpemUuCi1UaGUgcHJlLWFsbG9jYXRlZCBtZWRpYSBidWZmZXIgY2FwYWNpdHkgc2l6ZSBjYW4gYmUgYWRqdXN0ZWQgYnkgbW9kaWZ5aW5nIHRoZQotdmFsdWUgb2YgYGNvYmFsdF9tZWRpYV9idWZmZXJfaW5pdGlhbF9jYXBhY2l0eWAgbWVudGlvbmVkIGFib3ZlLgorYFNiTWVkaWFHZXRJbml0aWFsQnVmZmVyQ2FwYWNpdHlgIGFuZCBgU2JNZWRpYUdldEJ1ZmZlckFsbG9jYXRpb25Vbml0YAordG8gMCBpbiB5b3VyIGltcGxlbWVudGF0aW9uIG9mIG1lZGlhLmguICBOb3RlIGFsc28gdGhhdCBpZiB5b3UgY2hvb3NlIHRvCitwcmUtYWxsb2NhdGUgbWVtb3J5LCBmb3IgMTA4MHAgdmlkZW8gaXQgaGFzIGJlZW4gZm91bmQgdGhhdCAyNE1CIGlzIGEgZ29vZAorbWVkaWEgYnVmZmVyIHNpemUuIFRoZSBwcmUtYWxsb2NhdGVkIG1lZGlhIGJ1ZmZlciBjYXBhY2l0eSBzaXplIGNhbiBiZSBhZGp1c3RlZAorYnkgbW9kaWZ5aW5nIHRoZSB2YWx1ZSBvZiBgU2JNZWRpYUdldEluaXRpYWxCdWZmZXJDYXBhY2l0eWAgbWVudGlvbmVkIGFib3ZlLgogCiAqKlRhZ3M6KiogKmNvbmZpZ3VyYXRpb25fcHVibGljLmgsIGNwdSBtZW1vcnkuKgogCkBAIC0zMTEsMTIgKzI5NSw5IEBACiAjIyMgQWRqdXN0IG1lZGlhIGJ1ZmZlciBzaXplIHNldHRpbmdzCiAKIE1hbnkgb2YgdGhlIHBhcmFtZXRlcnMgYXJvdW5kIG1lZGlhIGJ1ZmZlciBhbGxvY2F0aW9uIGNhbiBiZSBhZGp1c3RlZCBpbiB5b3VyCi1neXBfY29uZmlndXJhdGlvbi5neXBpIGZpbGUuICBUaGUgdmFyaWFibGVzIGluIHF1ZXN0aW9uIGFyZSB0aGUgZmFtaWx5IG9mCi1gY29iYWx0X21lZGlhXypgIHZhcmlhYmxlcywgd2hvc2UgZGVmYXVsdCB2YWx1ZXMgYXJlIHNwZWNpZmllZCBpbgotW2Bjb2JhbHRfY29uZmlndXJhdGlvbi5neXBpYF0oLi4vYnVpbGQvY29iYWx0X2NvbmZpZ3VyYXRpb24uZ3lwaSkuICBJbgotcGFydGljdWxhciwgaWYgeW91ciBtYXhpbXVtIHZpZGVvIG91dHB1dCByZXNvbHV0aW9uIGlzIGxlc3MgdGhhbiAxMDgwLCB0aGVuIHlvdQotbWF5IGxvd2VyIHRoZSBidWRnZXRzIGZvciBtYW55IG9mIHRoZSBjYXRlZ29yaWVzIGFjY29yZGluZyB0byB5b3VyIG1heGltdW0KLXJlc29sdXRpb24uCittZWRpYS5oIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbi4gSW4gcGFydGljdWxhciwgaWYgeW91ciBtYXhpbXVtIHZpZGVvIG91dHB1dAorcmVzb2x1dGlvbiBpcyBsZXNzIHRoYW4gMTA4MCwgdGhlbiB5b3UgbWF5IGxvd2VyIHRoZSBidWRnZXRzIGZvciBtYW55IG9mIHRoZQorY2F0ZWdvcmllcyBhY2NvcmRpbmcgdG8geW91ciBtYXhpbXVtIHJlc29sdXRpb24uCiAKICoqVGFnczoqKiAqY3B1IG1lbW9yeSoKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2RvYy92b2ljZV9zZWFyY2gubWQgYi9jb2JhbHQvZG9jL3ZvaWNlX3NlYXJjaC5tZAppbmRleCAxODQ3MjgyLi4zMTUzNTUzIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9jL3ZvaWNlX3NlYXJjaC5tZAorKysgYi9jb2JhbHQvZG9jL3ZvaWNlX3NlYXJjaC5tZApAQCAtMiwxOSArMiwyMCBAQAogCiBDb2JhbHQgZW5hYmxlcyB2b2ljZSBzZWFyY2ggdGhyb3VnaCBlaXRoZXI6CiAKLTEuIEEgc3Vic2V0IG9mIHRoZSBbTWVkaWFSZWNvcmRlciBXZWIgQVBJXShodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFzdHJlYW0tcmVjb3JkaW5nLyNtZWRpYXJlY29yZGVyLWFwaSkuCisxLiBBIHN1YnNldCBvZiB0aGUgW01lZGlhUmVjb3JkZXIgV2ViIEFQSV0oaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhc3RyZWFtLXJlY29yZGluZy8jbWVkaWFyZWNvcmRlci1hcGkpCiAyLiBBIHN1YnNldCBvZiB0aGUgW1NwZWVjaCBSZWNvZ25pdGlvbiBXZWIgQVBJXShodHRwczovL3czYy5naXRodWIuaW8vc3BlZWNoLWFwaS8jc3BlZWNocmVjby1zZWN0aW9uKQogCiBPbmx5IG9uZSBvciB0aGUgb3RoZXIgY2FuIGJlIHVzZWQsIGFuZCB3ZSByZWNvbW1lbmQgdGhhdCB0aGUgTWVkaWFSZWNvcmRlciBBUEkKLWlzIGZvbGxvd2VkLCBhcyB3ZSBhcmUgY29uc2lkZXJpbmcgZGVwcmVjYXRpbmcgdGhlIFNwZWVjaCBSZWNvZ25pdGlvbiBBUEkuCi0KLSoqVGhlIFNwZWVjaCBSZWNvZ25pdGlvbiBBUEkgaXMgZGVwcmVjYXRlZCBhcyBvZiBTdGFyYm9hcmQgMTMuKioKK2lzIGZvbGxvd2VkLCBhcyB0aGUgU3BlZWNoIFJlY29nbml0aW9uIEFQSSBpcyBkZXByZWNhdGVkIGFzIG9mIFN0YXJib2FyZCAxMy4KIAogSW4gYm90aCBhcHByb2FjaGVzLCBpbiBvcmRlciB0byBjaGVjayB3aGV0aGVyIHRvIGVuYWJsZSB2b2ljZSBjb250cm9sIG9yIG5vdCwKIHdlYiBhcHBzIHdpbGwgY2FsbCB0aGUgW01lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCldKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYWNhcHR1cmUtc3RyZWFtcy8jZG9tLW1lZGlhZGV2aWNlcy1lbnVtZXJhdGVkZXZpY2VzJTI4JTI5KQogV2ViIEFQSSBmdW5jdGlvbiB3aXRoaW4gd2hpY2ggQ29iYWx0IHdpbGwgaW4gdHVybiBjYWxsIGEgc3Vic2V0IG9mIHRoZQogW1N0YXJib2FyZCBTYk1pY3JvcGhvbmUgQVBJXSguLi8uLi9zdGFyYm9hcmQvbWljcm9waG9uZS5oKS4KIAorUGFydG5lcnMgY2FuIGFkZCBtaWNyb3Bob25lIHN1cHBvcnQgYW5kIG1pY3JvcGhvbmUgZ2VzdHVyZSBvcHRpb25zIHVzaW5nIHRoZQorb3B0aW9uYWwgU29mdE1pY1BsYXRmb3JtU2VydmljZSwgZGV0YWlsZWQgYmVsb3cuCisKICMjIE1lZGlhUmVjb3JkZXIgQVBJCiAKIFRvIGVuYWJsZSB0aGUgTWVkaWFSZWNvcmRlciBBUEkgaW4gQ29iYWx0LCB0aGUgY29tcGxldGUKQEAgLTYzLDMgKzY0LDQ5IEBACiAKIFdlYiBhcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGUgTWVkaWFSZWNvcmRlciBBUEkuIFRoaXMgaW4gdHVybiByZWxpZXMKIG9uIHRoZSBTYk1pY3JvcGhvbmUgQVBJIGFzIGRldGFpbGVkIGFib3ZlLgorCisjIyBTb2Z0TWljUGxhdGZvcm1TZXJ2aWNlCisKK0luIGBzdGFyYm9hcmQvbGludXgvc2hhcmVkL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2UuY2NgIHRoZXJlIGlzIGFuIGV4YW1wbGUKK3N0dWIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNvZnRNaWNQbGF0Zm9ybVNlcnZpY2UuIFBsYXRmb3JtcyBjYW4gb3B0aW9uYWxseQoraW1wbGVtZW50IHRoaXMgW0NvYmFsdFBsYXRmb3JtU2VydmljZV0oaHR0cHM6Ly9jb2JhbHQuZGV2L2dlbi9jb2JhbHQvZG9jLworcGxhdGZvcm1fc2VydmljZXMuaHRtbCkgdG8gc3BlY2lmeSBpZiB0aGV5IHN1cHBvcnQgdGhlIGBzb2Z0IG1pY2AgYW5kL29yIGBoYXJkIG1pY2AKK2ZvciB2b2ljZSBzZWFyY2guIFRoZSBgc29mdCBtaWNgIHJlZmVycyB0byB0aGUgc29mdHdhcmUgYWN0aXZhdGlvbiBvZiB0aGUgbWljcm9waG9uZQorZm9yIHZvaWNlIHNlYXJjaCB0aHJvdWdoIHRoZSBVSSBtaWNyb3Bob25lIGJ1dHRvbiBvbiB0aGUgWW91dHViZSBXZWIgQXBwbGljYXRpb24KK3NlYXJjaCBwYWdlLiBUaGUgYGhhcmQgbWljYCByZWZlcnMgdG8gaGFyZHdhcmUgYnV0dG9uIGFjdGl2YXRpb24gb2YgdGhlIG1pY3JvcGhvbmUKK2ZvciB2b2ljZSBzZWFyY2guIFBsYXRmb3JtcyBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBvcHRpb25hbCBgbWljR2VzdHVyZWAuIFRoaXMKK3NwZWNpZmllcyB0aGUgdHlwZSBvZiBVSSBwcm9tcHQgdGhlIFlvdVR1YmUgV2ViIEFwcGxpY2F0aW9uIHNob3VsZCBkaXNwbGF5IHRvIGd1aWRlCit0aGUgdXNlciB0byBzdGFydCB2b2ljZSBzZWFyY2guIFRoZSBvcHRpb25zIGluY2x1ZGUgYW4gZW1wdHkgb3IgYG51bGxgIHZhbHVlIGZvciBubworcHJvbXB0LCBgIlRBUCJgIGZvciB0YXAgdGhlIGBzb2Z0IG1pY2AgYW5kL29yIGBoYXJkIG1pY2AgdG8gc3RhcnQgdm9pY2Ugc2VhcmNoLCBvcgorYCJIT0xEImAgZm9yIGhvbGQgdGhlIGBzb2Z0IG1pY2AgYW5kL29yIHRoZSBgaGFyZCBtaWNgIHRvIHN0YXJ0IHZvaWNlIHNlYXJjaC4KKworVGhlIFdlYiBBcHBsaWNhdGlvbiBtZXNzYWdlcyB0byB0aGUgcGxhdGZvcm0gd2lsbCBiZSBzaW5ndWxhciBzdHJpbmdzLCBlbmNvZGVkIHdpdGgKK2VuY2xvc2luZyBxdW90YXRpb24gbWFya3MgdG8gbWFrZSB0aGVtIEpTT04gY29tcGxpYW50OgorCitgYGAKKyJcIm5vdGlmeVNlYXJjaEFjdGl2ZVwiIgorCisKKyJcIm5vdGlmeVNlYXJjaEluYWN0aXZlXCIiCitgYGAKKworVGhlc2UgbWVzc2FnZXMgbm90aWZ5IHRoZSBwbGF0Zm9ybSB3aGVuIHRoZSB1c2VyIGlzIGVudGVyaW5nIG9yIGV4aXRpbmcgdGhlIFlvdXR1YmUKK1dlYiBBcHBsaWNhdGlvbiBzZWFyY2ggcGFnZS4gT25seSBhIHN5bmNocm9ub3VzIGB0cnVlYCBvciBgZmFsc2VgIHJlc3BvbnNlIGlzIHNlbnQKK2Zyb20gdGhlIHBsYXRmb3JtIHRvIGNvbmZpcm0gdGhhdCB0aGUgbWVzc2FnZSB3YXMgY29ycmVjdGx5IHJlY2VpdmVkIGFuZCBwYXJzZWQuCisKK2BgYAorIlwiZ2V0TWljU3VwcG9ydFwiIgorYGBgCisKK0Egc2ltaWxhciBzeW5jaHJvbm91cyBgdHJ1ZWAgb3IgYGZhbHNlYCByZXNwb25zZSBpcyBzZW50IGZyb20gdGhlIHBsYXRmb3JtIGNvbmZpcm1pbmcKK3RoZSBtZXNzYWdlIHdhcyBjb3JyZWN0bHkgcmVjZWl2ZWQgYW5kIHBhcnNlZC4gVGhlIHBsYXRmb3JtIHdpbGwgYWxzbyBzZW5kIGFuCithc3luY2hyb25vdXMgc3RyaW5nIGVuY29kZWQgSlNPTiBvYmplY3Qgd2l0aCB0aGUgYWJvdmUgbWVudGlvbmVkIG1pY3JvcGhvbmUKK3ByZWZlcmVuY2VzOgorCitgYGAKKyJ7CisgICAgJ2hhc0hhcmRNaWNTdXBwb3J0JyA6IGJvb2xlYW4sCisgICAgJ2hhc1NvZnRNaWNTdXBwb3J0JyA6IGJvb2xlYW4sCisgICAgJ21pY0dlc3R1cmUnIDogc3RyaW5nLAorIH0iCitgYGAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb2Mvd2ViYXBpX2V4dGVuc2lvbi5tZCBiL2NvYmFsdC9kb2Mvd2ViYXBpX2V4dGVuc2lvbi5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExYjlmYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvZG9jL3dlYmFwaV9leHRlbnNpb24ubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotIyBDb2JhbHQgV2ViIEV4dGVuc2lvbiBTdXBwb3J0Ci0KLSMjIERlcHJlY2F0aW9uCi1QbGVhc2Ugbm90ZSB0aGF0IFdlYiBFeHRlbnNpb24gc3VwcG9ydCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFBsYXRmb3JtCi1TZXJ2aWNlcyAoY29iYWx0L2RvYy9wbGF0Zm9ybV9zZXJ2aWNlcy5tZCkgaW5zdGVhZC4gVGhpcyBpcyBhbiBlZmZvcnQgdG8gbW92ZQotYXdheSBmcm9tIGluamVjdGluZyBjb21waWxlLXRpbWUgbW9kdWxlcyBpbnRvIHRoZSBDb2JhbHQgbGF5ZXIgaW4gZmF2b3Igb2YKLXVzaW5nIHJ1bnRpbWUgZXh0ZW5zaW9ucyBwcm92aWRlZCBieSB0aGUgU3RhcmJvYXJkIGxheWVyLgotCi0jIyBPdmVydmlldwotQ29iYWx0IHByb3ZpZGVzIGEgZmFjaWxpdHkgZm9yIGV4dGVuZGluZyB0aGUgSmF2YVNjcmlwdCBXZWIgQVBJLiAgVGhpcyBhbGxvd3MKLWN1c3RvbSB3ZWIgYXBwcyBydW5uaW5nIG9uIENvYmFsdCB0byBtYWtlIGNhbGxzIHRocm91Z2ggYSBjdXN0b20gQVBJIHRvCi1DKysgQ29iYWx0IGNvZGUgZGVmaW5lZCBwZXIgU3RhcmJvYXJkIHBsYXRmb3JtLiAgVGhpcyBjYW4gYWxsb3cgZm9yIGNsb3NlcgotaW50ZWdyYXRpb24gYmV0d2VlbiB0aGUgd2ViIGFwcCBob3N0ZWQgYnkgQ29iYWx0IGFuZCB0aGUgc3lzdGVtIG9uIHdoaWNoIHRoYXQKLXdlYiBhcHAgaXMgcnVubmluZy4KLQotVGhlIENvYmFsdCBXZWIgRXh0ZW5zaW9uIHN1cHBvcnQgd2lsbCBhbGxvdyB5b3UgdG8gYXR0YWNoIGFuIGluc3RhbmNlIG9mIGEKLWN1c3RvbSBjbGFzcyB0byB0aGUgSmF2YVNjcmlwdCBgd2luZG93YCBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlCi1yZWZlcmVuY2VkIGZyb20gYSB3ZWIgYXBwIGluIEphdmFTY3JpcHQgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgotCi1gYGAKLXdpbmRvdy5teUludGVyZmFjZS5SdW5NeUZ1bmN0aW9uKCkKLWBgYAotCi0jIyBCdWlsZC1sZXZlbCBtb2RpZmljYXRpb25zCi0KLUluIG9yZGVyIHRvIGV4dGVuZCB0aGUgaW50ZXJmYWNlLCBvbmUgc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZQotYHZhcmlhYmxlc2Agc2VjdGlvbiBvZiBgPHBsYXRmb3JtLWRpcmVjdG9yeT4vY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaWAgKHNlZQotU3RhcmJvYXJkJ3MKLVtBcHBsaWNhdGlvbiBDdXN0b21pemF0aW9uXSguLi8uLi9zdGFyYm9hcmQvZG9jL2J1aWxkaW5nLm1kI2FwcGxpY2F0aW9uLWN1c3RvbWl6YXRpb24pCi1mb3IgbW9yZSBpbmZvcm1hdGlvbik6Ci0KLTEuIGBjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzYAotICAgVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mIFtJREwgZmlsZXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9JREwpCi0gICB0aGF0IGRlZmluZSB0aGUgY29sbGVjdGlvbiBvZiBuZXcgaW50ZXJmYWNlcyBpbnRyb2R1Y2VkIGJ5IHlvdXIgZXh0ZW5zaW9ucy4KLSAgIE9uZSBvZiB0aGVzZSBuZXcgaW50ZXJmYWNlcyBjYW4gYmUgc2VsZWN0ZWQgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgYHdpbmRvd2AKLSAgIGVsZW1lbnQgKHNlZSAzLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ3lwX3RhcmdldGAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdwotICAgdG8gZG8gdGhpcykuICBFYWNoIElETCBmaWxlIGxpc3RlZCBoZXJlIHNpbXVsdGFuZW91c2x5IGRlZmluZXMgYSBKYXZhU2NyaXB0Ci0gICBhbmQgYSBDKysgaW50ZXJmYWNlLiAgRm9yIGVhY2ggSURMIGZpbGUsIHlvdSB3aWxsIGJlIGV4cGVjdGVkIHRvIGFsc28gcHJvdmlkZQotICAgYSBoZWFkZXIgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgdGhhdCByZS1kZWNsYXJlcyAoaW4gQysrKSB0aGUgaW50ZXJmYWNlCi0gICBkZWNsYXJlZCBpbiB0aGUgSURMIGZpbGUsIGFzIHdlbGwgYXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYWxsIHRoZSBtZXRob2RzCi0gICB3aXRoaW4gaXQgKGVpdGhlciBpbmxpbmUgaW4gdGhlIGhlYWRlciBmaWxlIG9yIGluIGEgY29ycmVzcG9uZGluZyBzb3VyY2UKLSAgIGZpbGUpLgotMi4gYGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzYAotICAgVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIGZpbGVzIHRoYXQgbWF5IHJlc3VsdCBpbiBhdXRvbWF0aWMgaGVhZGVyIGZpbGUKLSAgIGdlbmVyYXRpb24gdGhhdCBtaWdodCBiZSByZWZlcmVuY2VkIGZyb20gb3RoZXIgQysrIGNvZGUuICBBbiBleGFtcGxlIG9mCi0gICB0aGlzIGlzIHRoZSBkZWZpbml0aW9uIG9mIGBlbnVtYHMgdGhhdCBtYXkgdGhlbiBiZSByZWZlcmVuY2VkIGFzIHR5cGVzIGluCi0gICBhIGZpbGUgZnJvbSAxLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fc291cmNlX2lkbF9maWxlc2AuCi0zLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ3lwX3RhcmdldGAKLSAgIFRoaXMgaXMgdGhlIGd5cCB0YXJnZXQgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIElETCBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25zLAotICAgYXMgd2VsbCBhcyBhbnkgbmVjZXNzYXJ5IGF1eGlsaWFyeSBjb2RlLiAgSXQgd2lsbCBiZSBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YKLSAgIFticm93c2VyL2NvYmFsdC5neXA6Y29iYWx0XSguLi9icm93c2VyL2NvYmFsdC5neXApLiAgSXQgaXMgZXhwZWN0ZWQgdGhhdAotICAgdGhpcyB0YXJnZXQgd2lsbCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBkZWZpbmVkIGluCi0gICBbYnJvd3Nlci93ZWJhcGlfZXh0ZW5zaW9uLmhdKC4uL2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oKSwgd2hpY2ggbGV0IHlvdQotICAgbmFtZSB0aGUgaW5qZWN0ZWQgd2luZG93IHByb3BlcnR5LCBhbmQgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIGl0Ci0gICAoaS5lLiB0byBsZXQgeW91IHNlbGVjdCB3aGljaCBJREwgb2JqZWN0IGlzIHRoZSAiZW50cnkgcG9pbnQiKS4KLQotVGhlIGZpcnN0IHR3byBsaXN0cyBnZXQgaW5jbHVkZWQgYnkKLVtjb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzX2dlbi5neXBdKGNvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cCksCi13aGVyZSB5b3UgY2FuIGxvb2sgdG8gc2VlIG1hbnkgZXhhbXBsZXMgb2YgZXhpc3RpbmcgQ29iYWx0IElETCBmaWxlcyB0aGF0IGRlZmluZQotdGhlIFdlYiBBUEkgYXZhaWxhYmxlIHRocm91Z2ggQ29iYWx0LiAgRm9yIGVhY2ggb2YgdGhlc2UsIHlvdSBjYW4gYWxzbwotZXhhbWluZSB0aGVpciBjb3JyZXNwb25kaW5nIGAuaGAgZmlsZXMgYW5kIGluIG1vc3QgY2FzZXMgdGhlaXIgYC5jY2AgZmlsZXMgYXMKLXdlbGwuCi0KLUFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlc2UgdmFyaWFibGVzIGlzIGF2YWlsYWJsZSBhdAotW3N0YXJib2FyZC9zaGFyZWQvdGVzdF93ZWJhcGlfZXh0ZW5zaW9uL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi5neXBpXSguLi8uLi9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi90ZXN0X3dlYmFwaV9leHRlbnNpb24uZ3lwaSksIHdoaWNoCi1jb250YWlucyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGRlZmluaXRpb25zOgotCi1gYGAKLSdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzJzogWwotICAnbXlfbmV3X2ludGVyZmFjZS5pZGwnCi1dLAotJ2NvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzJzogWwotICAnbXlfbmV3X2VudW0uaWRsJwotXSwKLSdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9neXBfdGFyZ2V0JzoKLSAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvdGVzdF93ZWJhcGlfZXh0ZW5zaW9uL3dlYmFwaV9leHRlbnNpb24uZ3lwOmNvYmFsdF90ZXN0X3dlYmFwaV9leHRlbnNpb24nLAotYGBgCi0KLSMjIEltcGxlbWVudGluZyB0aGUgW3dlYmFwaV9leHRlbnNpb24uaF0oLi4vYnJvd3Nlci93ZWJhcGlfZXh0ZW5zaW9uLmgpIGludGVyZmFjZQotCi1BcyBkaXNjdXNzZWQgYWJvdmUgaW4gMy4gYGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2d5cF90YXJnZXRgLCB5b3UgbXVzdCBwcm92aWRlCi1hbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbgotW2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oXSguLi9icm93c2VyL3dlYmFwaV9leHRlbnNpb24uaCkuCi0KLSMjIyBgR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKClgCi1Zb3Ugc2hvdWxkIGltcGxlbWVudCBgR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKClgIHRvIHJldHVybiB0aGUgbmFtZQotb2YgdGhlIGluamVjdGVkIGB3aW5kb3dgIHByb3BlcnR5LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBleGFtcGxlIGZyb20gdGhlCi1iZWdpbm5pbmcgb2YgdGhpcyBkb2N1bWVudCwgYHdpbmRvdy5teUludGVyZmFjZS5SdW5NeUZ1bmN0aW9uKClgLCB3ZSB3b3VsZCBoYXZlCi10aGUgZnVuY3Rpb24gcmV0dXJuIGBzdGQ6OnN0cmluZygibXlJbnRlcmZhY2UiKWAuICBJZiB5b3UgcmV0dXJuIGBudWxsb3B0YCBmcm9tCi10aGlzIGZ1bmN0aW9uLCBpdCBpcyBhc3N1bWVkIHRoYXQgeW91IGRvIG5vdCB3aXNoIHRvIGV4dGVuZCB0aGUgd2ViIGludGVyZmFjZS4KLQotTm90ZSB0aGF0IHlvdSBzaG91bGQgTk9UIG5hbWUgeW91ciBgd2luZG93YCBwcm9wZXJ0eSB0aGUgc2FtZSBhcyB5b3VyIGNsYXNzIG5hbWUKLWFzIGRlc2NyaWJlZCBpbiB0aGUgSURMIGZpbGUsIGl0IHdpbGwgcmVzdWx0IGluIGEgbmFtZSBjb2xsaXNpb24gaW4gdGhlCi1KYXZhU2NyaXB0IGVudmlyb25tZW50LgotCi0jIyMgYENyZWF0ZVdlYkFQSUV4dGVuc2lvbk9iamVjdCgpYAotVGhpcyBmdW5jdGlvbiBzaG91bGQgaW5zdGFudGlhdGUgYW5kIHJldHVybiB0aGUgb2JqZWN0IHRvIGJlIGFjY2Vzc2VkIGZyb20KLWB3aW5kb3dgLiAgVGhlIG9iamVjdCBtdXN0IGJlIGRlZmluZWQgYnkgYW4gSURMIGZpbGUuCi0KLSMjIERlYnVnZ2luZwotWW91IG1heSBmaW5kIHRoZSBDb2JhbHQgZGVidWcgY29uc29sZSB0byBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLUlETCBhZGRpdGlvbnMgYW5kIGNoYW5nZXMuICBJbiBpdCwgeW91IGNhbiBlbnRlciBhcmJpdHJhcnkgSmF2YVNjcmlwdCBhbmQgdGhlbgotaGl0IGVudGVyIHRvIGV4ZWN1dGUgaXQuICBZb3UgY2FuIHRvZ2dsZSBpdCBvcGVuIGJ5IGhpdHRpbmcgZWl0aGVyIENUUkwrTyBvcgotRjEsIGFuZCB5b3UgbWF5IGhhdmUgdG8gaGl0IHRoZSBrZXkgdHdpY2UgdG8gc2tpcCBwYXN0IHRoZSBIVUQgbW9kZS4KLQotSGVyZSBpcyBhbiBleGFtcGxlIG9mIGFuIGV4YW1wbGUgaW50ZXJmYWNlIGJlaW5nIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZQotZGVidWcgY29uc29sZToKLQotIVtEZWJ1ZyBjb25zb2xlIHdlYiBleHRlbnNpb24gZXhhbXBsZV0ocmVzb3VyY2VzL3dlYmFwaV9leHRlbnNpb25fZXhhbXBsZS5qcGcpCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL0JVSUxELmduIGIvY29iYWx0L2RvbS9CVUlMRC5nbgppbmRleCBjNTk0ZGUwLi5mOGE0MzdjIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL0JVSUxELmduCisrKyBiL2NvYmFsdC9kb20vQlVJTEQuZ24KQEAgLTc1LDYgKzc1LDcgQEAKICAgICAiZGlyZWN0aW9uYWxpdHkuaCIsCiAgICAgImRvY3VtZW50LmNjIiwKICAgICAiZG9jdW1lbnQuaCIsCisgICAgImRvY3VtZW50X2xvYWRfdGltaW5nX2luZm8uaCIsCiAgICAgImRvY3VtZW50X3RpbWVsaW5lLmNjIiwKICAgICAiZG9jdW1lbnRfdGltZWxpbmUuaCIsCiAgICAgImRvY3VtZW50X3R5cGUuY2MiLApAQCAtMjU2LDYgKzI1Nyw4IEBACiAgICAgInBlcmZvcm1hbmNlX21hcmsuaCIsCiAgICAgInBlcmZvcm1hbmNlX21lYXN1cmUuY2MiLAogICAgICJwZXJmb3JtYW5jZV9tZWFzdXJlLmgiLAorICAgICJwZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5jYyIsCisgICAgInBlcmZvcm1hbmNlX25hdmlnYXRpb25fdGltaW5nLmgiLAogICAgICJwZXJmb3JtYW5jZV9vYnNlcnZlci5jYyIsCiAgICAgInBlcmZvcm1hbmNlX29ic2VydmVyLmgiLAogICAgICJwZXJmb3JtYW5jZV9vYnNlcnZlcl9lbnRyeV9saXN0LmNjIiwKQEAgLTMzMiw3ICszMzUsMTQgQEAKICAgICAieG1sX3NlcmlhbGl6ZXIuaCIsCiAgIF0KIAotICBwdWJsaWNfZGVwcyA9IFsgIi8vY29iYWx0L2Jyb3dzZXI6Z2VuZXJhdGVkX3R5cGVzIiBdCisgIGlmICh1c2Vfc2tpYV9uZXh0KSB7CisgICAgZGVmaW5lcyA9IFsgIlVTRV9TS0lBX05FWFQiIF0KKyAgfQorCisgIHB1YmxpY19kZXBzID0gWworICAgICIvL2NvYmFsdC9icm93c2VyOmdlbmVyYXRlZF90eXBlcyIsCisgICAgIi8vY29iYWx0L3dlYiIsCisgIF0KIAogICBkZXBzID0gWwogICAgICI6ZG9tX2V4Y2VwdGlvbiIsCkBAIC0zNTcsNiArMzY3LDcgQEAKICAgICAiLy9jb2JhbHQvc3RvcmFnZS9zdG9yZTptZW1vcnlfc3RvcmUiLAogICAgICIvL2NvYmFsdC9zeXN0ZW1fd2luZG93IiwKICAgICAiLy9jb2JhbHQvdWlfbmF2aWdhdGlvbiIsCisgICAgIi8vY29iYWx0L3dlYiIsCiAgICAgIi8vY29iYWx0L3dlYl9hbmltYXRpb25zIiwKICAgICAiLy9jb2JhbHQvd29ya2VyIiwKICAgICAiLy9jcnlwdG8iLApAQCAtNDU1LDcgKzQ2Niw2IEBACiAgICAgIi8vY29iYWx0L2NzcCIsCiAgICAgIi8vY29iYWx0L2Nzc19wYXJzZXIiLAogICAgICIvL2NvYmFsdC9jc3NvbSIsCi0gICAgIi8vY29iYWx0L2Nzc29tOmNzc29tX3Rlc3QiLAogICAgICIvL2NvYmFsdC9kb20vdGVzdGluZzpkb21fdGVzdGluZyIsCiAgICAgIi8vY29iYWx0L2RvbV9wYXJzZXIiLAogICAgICIvL2NvYmFsdC9oNXZjYyIsCkBAIC00NzUsNCArNDg1LDYgQEAKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgICAiLy91cmwiLAogICBdCisKKyAgY29udGVudF9kZXBzID0gWyAiOmxpY2Vuc2VzIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2F0dHIuY2MgYi9jb2JhbHQvZG9tL2F0dHIuY2MKaW5kZXggN2I2OTUwZS4uM2MzZmU0NSAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9hdHRyLmNjCisrKyBiL2NvYmFsdC9kb20vYXR0ci5jYwpAQCAtMzUsNyArMzUsNyBAQAogfQogCiBjb25zdCBzdGQ6OnN0cmluZyYgQXR0cjo6bm9kZV92YWx1ZSgpIGNvbnN0IHsKLSNpZmRlZiBfX0xCX1NIRUxMX19GT1JDRV9MT0dHSU5HX18KKyNpZmRlZiBDT0JBTFRfTE9HR0lOR19FTkFCTEVECiAgIC8vIFRPRE86IEFsbCB3YXJuaW5ncyBsb2dnZWQgZnJvbSBXZWIgQVBJcyBzaG91bGQgY29udGFpbiBKYXZhU2NyaXB0IGNhbGwKICAgLy8gICAgICAgc3RhY2sgYW5kIHNob3VsZCBiZSBkZWR1cGxpY2F0ZWQgYnkgSmF2YVNjcmlwdCBsb2NhdGlvbi4KICAgc3RhdGljIGJvb2wgZHVwbGljYXRlX3dhcm5pbmcgPSBmYWxzZTsKQEAgLTQzLDcgKzQzLDcgQEAKICAgICBkdXBsaWNhdGVfd2FybmluZyA9IHRydWU7CiAgICAgTE9HKFdBUk5JTkcpIDw8ICJVc2Ugb2YgZGVwcmVjYXRlZCBXZWIgQVBJOiBBdHRyLm5vZGVWYWx1ZS4iOwogICB9Ci0jZW5kaWYgIC8vIF9fTEJfU0hFTExfX0ZPUkNFX0xPR0dJTkdfXworI2VuZGlmICAvLyBDT0JBTFRfTE9HR0lOR19FTkFCTEVECiAKICAgcmV0dXJuIHZhbHVlXzsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vYmxvYi5jYyBiL2NvYmFsdC9kb20vYmxvYi5jYwppbmRleCA4ODkzY2YzLi42MTk5ODQxIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2Jsb2IuY2MKKysrIGIvY29iYWx0L2RvbS9ibG9iLmNjCkBAIC0xNyw3ICsxNyw4IEBACiAjaW5jbHVkZSAiYmFzZS9sYXp5X2luc3RhbmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2JfcHJvcGVydHlfYmFnLmgiCi0jaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIGRvbSB7CkBAIC04MiwxMSArODMsMTUgQEAKICAgICA6IGJ1ZmZlcl9yZWZlcmVuY2VfKAogICAgICAgICAgIHRoaXMsIGJ1ZmZlci5Jc0VtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgPyBzY3JpcHQ6OkFycmF5QnVmZmVyOjpOZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPmNvbnRleHQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKICAgICAgICAgICAgICAgICAgICAgOiBzY3JpcHQ6OkFycmF5QnVmZmVyOjpOZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPmNvbnRleHQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5EYXRhKCksIGJ1ZmZlci0+Qnl0ZUxlbmd0aCgpKSkgewogICBEQ0hFQ0soc2V0dGluZ3MpOwpAQCAtMTAxLDExICsxMDYsMTMgQEAKIEJsb2I6OkJsb2Ioc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKICAgICAgICAgICAgY29uc3Qgc2NyaXB0OjpTZXF1ZW5jZTxCbG9iUGFydD4mIGJsb2JfcGFydHMsCiAgICAgICAgICAgIGNvbnN0IEJsb2JQcm9wZXJ0eUJhZyYgb3B0aW9ucykKLSAgICA6IGJ1ZmZlcl9yZWZlcmVuY2VfKHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQ6OkFycmF5QnVmZmVyOjpOZXcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8RE9NU2V0dGluZ3MqPihzZXR0aW5ncykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbERhdGFMZW5ndGgoYmxvYl9wYXJ0cykpKSwKKyAgICA6IGJ1ZmZlcl9yZWZlcmVuY2VfKAorICAgICAgICAgIHRoaXMsCisgICAgICAgICAgc2NyaXB0OjpBcnJheUJ1ZmZlcjo6TmV3KAorICAgICAgICAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqPihzZXR0aW5ncykKKyAgICAgICAgICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgICAgICAgICAtPmdsb2JhbF9lbnZpcm9ubWVudCgpLAorICAgICAgICAgICAgICBUb3RhbERhdGFMZW5ndGgoYmxvYl9wYXJ0cykpKSwKICAgICAgIHR5cGVfKG9wdGlvbnMudHlwZSgpKSB7CiAgIERDSEVDSyhzZXR0aW5ncyk7CiAgIHVpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4Kj4oYnVmZmVyX3JlZmVyZW5jZV8udmFsdWUoKS5EYXRhKCkpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9ibG9iX3Rlc3QuY2MgYi9jb2JhbHQvZG9tL2Jsb2JfdGVzdC5jYwppbmRleCBlYWJiYTBiLi45OTYzOTZhIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2Jsb2JfdGVzdC5jYworKysgYi9jb2JhbHQvZG9tL2Jsb2JfdGVzdC5jYwpAQCAtMTIsOSArMTIsMTAgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ibG9iLmgiCisKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdGVzdGluZy9zdHViX3dpbmRvdy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZGF0YV92aWV3LmgiCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2NhcHRpb25zL3N5c3RlbV9jYXB0aW9uX3NldHRpbmdzLmNjIGIvY29iYWx0L2RvbS9jYXB0aW9ucy9zeXN0ZW1fY2FwdGlvbl9zZXR0aW5ncy5jYwppbmRleCAzYTQ0N2Y3Li4zYTc4ZDg4IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2NhcHRpb25zL3N5c3RlbV9jYXB0aW9uX3NldHRpbmdzLmNjCisrKyBiL2NvYmFsdC9kb20vY2FwdGlvbnMvc3lzdGVtX2NhcHRpb25fc2V0dGluZ3MuY2MKQEAgLTM1LDcgKzM1LDYgQEAKIG5hbWVzcGFjZSBkb20gewogbmFtZXNwYWNlIGNhcHRpb25zIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIG5hbWVzcGFjZSB7CiAKIENhcHRpb25Db2xvciBUb0NvYmFsdENhcHRpb25Db2xvcihTYkFjY2Vzc2liaWxpdHlDYXB0aW9uQ29sb3IgY29sb3IpIHsKQEAgLTE3Myw3ICsxNzIsNiBAQAogCiB9ICAvLyBuYW1lc3BhY2UKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAKIHZvaWQgU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpPbkNhcHRpb25TZXR0aW5nc0NoYW5nZWQoKSB7CiAgIERpc3BhdGNoRXZlbnROYW1lQW5kUnVuQ2FsbGJhY2soCkBAIC0xODIsNyArMTgwLDYgQEAKIH0KIAogYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IFN5c3RlbUNhcHRpb25TZXR0aW5nczo6YmFja2dyb3VuZF9jb2xvcigpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC0yMDAsMTMgKzE5Nyw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGNvbG9yKTsKICAgfQotI2Vsc2UKLSAgcmV0dXJuIGJhc2U6Om51bGxvcHQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogQ2FwdGlvblN0YXRlIFN5c3RlbUNhcHRpb25TZXR0aW5nczo6YmFja2dyb3VuZF9jb2xvcl9zdGF0ZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC0yMTUsMTMgKzIwOCw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwogICB9Ci0jZWxzZQotICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IFN5c3RlbUNhcHRpb25TZXR0aW5nczo6YmFja2dyb3VuZF9vcGFjaXR5KCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTIzOSwxMyArMjI4LDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcob3BhY2l0eSk7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBiYXNlOjpudWxsb3B0OwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIENhcHRpb25TdGF0ZSBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmJhY2tncm91bmRfb3BhY2l0eV9zdGF0ZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC0yNTQsMTMgKzIzOSw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwogICB9Ci0jZWxzZQotICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IFN5c3RlbUNhcHRpb25TZXR0aW5nczo6Y2hhcmFjdGVyX2VkZ2Vfc3R5bGUoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3MgY2FwdGlvbl9zZXR0aW5nczsKICAgbWVtc2V0KCZjYXB0aW9uX3NldHRpbmdzLCAwLCBzaXplb2YoY2FwdGlvbl9zZXR0aW5ncykpOwogICBib29sIHN1Y2Nlc3MgPSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoJmNhcHRpb25fc2V0dGluZ3MpOwpAQCAtMjgwLDEzICsyNjEsOSBAQAogICB9IGVsc2UgewogICAgIHJldHVybiBzdGQ6OnN0cmluZyhjaGFyYWN0ZXJfZWRnZV9zdHlsZSk7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBiYXNlOjpudWxsb3B0OwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIENhcHRpb25TdGF0ZSBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmNoYXJhY3Rlcl9lZGdlX3N0eWxlX3N0YXRlKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTI5NSwxMyArMjcyLDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBDYXB0aW9uU3RhdGU6OmtDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBiYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpmb250X2NvbG9yKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTMxOSwxMyArMjkyLDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoY29sb3IpOwogICB9Ci0jZWxzZQotICByZXR1cm4gYmFzZTo6bnVsbG9wdDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBDYXB0aW9uU3RhdGUgU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpmb250X2NvbG9yX3N0YXRlKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTMzNCwxMyArMzAzLDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBDYXB0aW9uU3RhdGU6OmtDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBiYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpmb250X2ZhbWlseSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC0zNTgsMTMgKzMyMyw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGZvbnRfZmFtaWx5KTsKICAgfQotI2Vsc2UKLSAgcmV0dXJuIGJhc2U6Om51bGxvcHQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogQ2FwdGlvblN0YXRlIFN5c3RlbUNhcHRpb25TZXR0aW5nczo6Zm9udF9mYW1pbHlfc3RhdGUoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3MgY2FwdGlvbl9zZXR0aW5nczsKICAgbWVtc2V0KCZjYXB0aW9uX3NldHRpbmdzLCAwLCBzaXplb2YoY2FwdGlvbl9zZXR0aW5ncykpOwogICBib29sIHN1Y2Nlc3MgPSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoJmNhcHRpb25fc2V0dGluZ3MpOwpAQCAtMzczLDEzICszMzQsOSBAQAogICB9IGVsc2UgewogICAgIHJldHVybiBDYXB0aW9uU3RhdGU6OmtDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZDsKICAgfQotI2Vsc2UKLSAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIGJhc2U6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmZvbnRfb3BhY2l0eSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC0zOTcsMTMgKzM1NCw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKG9wYWNpdHkpOwogICB9Ci0jZWxzZQotICByZXR1cm4gYmFzZTo6bnVsbG9wdDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBDYXB0aW9uU3RhdGUgU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpmb250X29wYWNpdHlfc3RhdGUoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3MgY2FwdGlvbl9zZXR0aW5nczsKICAgbWVtc2V0KCZjYXB0aW9uX3NldHRpbmdzLCAwLCBzaXplb2YoY2FwdGlvbl9zZXR0aW5ncykpOwogICBib29sIHN1Y2Nlc3MgPSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoJmNhcHRpb25fc2V0dGluZ3MpOwpAQCAtNDEyLDEzICszNjUsOSBAQAogICB9IGVsc2UgewogICAgIHJldHVybiBDYXB0aW9uU3RhdGU6OmtDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZDsKICAgfQotI2Vsc2UKLSAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIGJhc2U6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmZvbnRfc2l6ZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC00MzcsMTMgKzM4Niw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGZvbnRfc2l6ZSk7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBiYXNlOjpudWxsb3B0OwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIENhcHRpb25TdGF0ZSBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmZvbnRfc2l6ZV9zdGF0ZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CkBAIC00NTIsMTMgKzM5Nyw5IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwogICB9Ci0jZWxzZQotICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IFN5c3RlbUNhcHRpb25TZXR0aW5nczo6d2luZG93X2NvbG9yKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTQ3NiwxMyArNDE3LDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoY29sb3IpOwogICB9Ci0jZWxzZQotICByZXR1cm4gYmFzZTo6bnVsbG9wdDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBDYXB0aW9uU3RhdGUgU3lzdGVtQ2FwdGlvblNldHRpbmdzOjp3aW5kb3dfY29sb3Jfc3RhdGUoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3MgY2FwdGlvbl9zZXR0aW5nczsKICAgbWVtc2V0KCZjYXB0aW9uX3NldHRpbmdzLCAwLCBzaXplb2YoY2FwdGlvbl9zZXR0aW5ncykpOwogICBib29sIHN1Y2Nlc3MgPSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoJmNhcHRpb25fc2V0dGluZ3MpOwpAQCAtNDkxLDEzICs0MjgsOSBAQAogICB9IGVsc2UgewogICAgIHJldHVybiBDYXB0aW9uU3RhdGU6OmtDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZDsKICAgfQotI2Vsc2UKLSAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIGJhc2U6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OndpbmRvd19vcGFjaXR5KCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTUxNSwxMyArNDQ4LDkgQEAKICAgfSBlbHNlIHsKICAgICByZXR1cm4gc3RkOjpzdHJpbmcob3BhY2l0eSk7CiAgIH0KLSNlbHNlCi0gIHJldHVybiBiYXNlOjpudWxsb3B0OwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiB9CiAKIENhcHRpb25TdGF0ZSBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OndpbmRvd19vcGFjaXR5X3N0YXRlKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKQEAgLTUzMCw3MSArNDU5LDQ2IEBACiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIENhcHRpb25TdGF0ZTo6a0NhcHRpb25TdGF0ZVVuc3VwcG9ydGVkOwogICB9Ci0jZWxzZQotICByZXR1cm4gQ2FwdGlvblN0YXRlOjprQ2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQ7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYm9vbCBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OmlzX2VuYWJsZWQoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3MgY2FwdGlvbl9zZXR0aW5nczsKICAgbWVtc2V0KCZjYXB0aW9uX3NldHRpbmdzLCAwLCBzaXplb2YoY2FwdGlvbl9zZXR0aW5ncykpOwogICBib29sIHN1Y2Nlc3MgPSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MoJmNhcHRpb25fc2V0dGluZ3MpOwogICBEQ0hFQ0soc3VwcG9ydHNfaXNfZW5hYmxlZCgpKTsKIAotICByZXR1cm4gKHN1Y2Nlc3MgJiYgY2FwdGlvbl9zZXR0aW5ncy5zdXBwb3J0c19pc19lbmFibGVkKSA/Ci0gICAgICAgICAgICAgY2FwdGlvbl9zZXR0aW5ncy5pc19lbmFibGVkIDogZmFsc2U7Ci0KLSNlbHNlCi0gIHJldHVybiBmYWxzZTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQorICByZXR1cm4gKHN1Y2Nlc3MgJiYgY2FwdGlvbl9zZXR0aW5ncy5zdXBwb3J0c19pc19lbmFibGVkKQorICAgICAgICAgICAgID8gY2FwdGlvbl9zZXR0aW5ncy5pc19lbmFibGVkCisgICAgICAgICAgICAgOiBmYWxzZTsKIH0KIAogdm9pZCBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OnNldF9pc19lbmFibGVkKGJvb2wgYWN0aXZlKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogICBEQ0hFQ0soc3VwcG9ydHNfc2V0X2VuYWJsZWQoKSk7CiAgIFNiQWNjZXNzaWJpbGl0eVNldENhcHRpb25zRW5hYmxlZChhY3RpdmUpOwotI2Vsc2UKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogfQogCiBib29sIFN5c3RlbUNhcHRpb25TZXR0aW5nczo6c3VwcG9ydHNfaXNfZW5hYmxlZCgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyBjYXB0aW9uX3NldHRpbmdzOwogICBtZW1zZXQoJmNhcHRpb25fc2V0dGluZ3MsIDAsIHNpemVvZihjYXB0aW9uX3NldHRpbmdzKSk7CiAgIGJvb2wgc3VjY2VzcyA9IFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncygmY2FwdGlvbl9zZXR0aW5ncyk7CiAKICAgcmV0dXJuIChzdWNjZXNzKSA/IGNhcHRpb25fc2V0dGluZ3Muc3VwcG9ydHNfaXNfZW5hYmxlZCA6IGZhbHNlOwotCi0jZWxzZQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYm9vbCBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OnN1cHBvcnRzX3NldF9lbmFibGVkKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKIAogICByZXR1cm4gKHN1Y2Nlc3MpID8gY2FwdGlvbl9zZXR0aW5ncy5zdXBwb3J0c19zZXRfZW5hYmxlZCA6IGZhbHNlOwotCi0jZWxzZQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogYm9vbCBTeXN0ZW1DYXB0aW9uU2V0dGluZ3M6OnN1cHBvcnRzX292ZXJyaWRlKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblNldHRpbmdzIGNhcHRpb25fc2V0dGluZ3M7CiAgIG1lbXNldCgmY2FwdGlvbl9zZXR0aW5ncywgMCwgc2l6ZW9mKGNhcHRpb25fc2V0dGluZ3MpKTsKICAgYm9vbCBzdWNjZXNzID0gU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKCZjYXB0aW9uX3NldHRpbmdzKTsKIAogICByZXR1cm4gKHN1Y2Nlc3MpID8gY2FwdGlvbl9zZXR0aW5ncy5zdXBwb3J0c19vdmVycmlkZSA6IGZhbHNlOwotCi0jZWxzZQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIH0KIAogY29uc3QgRXZlbnRUYXJnZXQ6OkV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSogU3lzdGVtQ2FwdGlvblNldHRpbmdzOjpvbmNoYW5nZWQoKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9kb2N1bWVudC5jYyBiL2NvYmFsdC9kb20vZG9jdW1lbnQuY2MKaW5kZXggOTQ5ZmY4ZC4uZTJjZGQ2NyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9kb2N1bWVudC5jYworKysgYi9jb2JhbHQvZG9tL2RvY3VtZW50LmNjCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiY29iYWx0L2RvbS9tb3VzZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vbmFtZWRfbm9kZV9tYXAuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL25vZGVfZGVzY2VuZGFudHNfaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL3BlcmZvcm1hbmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS90ZXh0LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS91aV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vd2hlZWxfZXZlbnQuaCIKQEAgLTg3LDkgKzg4LDYgQEAKICAgICAgIGlzX2NvbXB1dGVkX3N0eWxlX2RpcnR5Xyh0cnVlKSwKICAgICAgIGFyZV9mb250X2ZhY2VzX2RpcnR5Xyh0cnVlKSwKICAgICAgIGFyZV9rZXlmcmFtZXNfZGlydHlfKHRydWUpLAotI2lmIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0gICAgICBwYXJ0aWFsX2xheW91dF9pc19lbmFibGVkXyh0cnVlKSwKLSNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKICAgICAgIHNlbGVjdG9yX3RyZWVfKG5ldyBjc3NvbTo6U2VsZWN0b3JUcmVlKCkpLAogICAgICAgc2hvdWxkX3JlY3JlYXRlX3NlbGVjdG9yX3RyZWVfKGZhbHNlKSwKICAgICAgIG5hdmlnYXRpb25fc3RhcnRfY2xvY2tfKG9wdGlvbnMubmF2aWdhdGlvbl9zdGFydF9jbG9jawpAQCAtMTA1LDcgKzEwMyw4IEBACiAgICAgICByZW5kZXJfcG9zdHBvbmVkXyhmYWxzZSksCiAgICAgICBmcm96ZW5uZXNzXyhmYWxzZSksCiAgICAgICBBTExPV19USElTX0lOX0lOSVRJQUxJWkVSX0xJU1QoaW50ZXJzZWN0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlcl8oCi0gICAgICAgICAgbmV3IEludGVyc2VjdGlvbk9ic2VydmVyVGFza01hbmFnZXIoKSkpIHsKKyAgICAgICAgICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJUYXNrTWFuYWdlcigpKSksCisgICAgICBuYXZpZ2F0aW9uX3R5cGVfKGtOYXZpZ2F0aW9uVHlwZU5hdmlnYXRlKSB7CiAgIERDSEVDSyhodG1sX2VsZW1lbnRfY29udGV4dF8pOwogICBEQ0hFQ0sob3B0aW9ucy51cmwuaXNfZW1wdHkoKSB8fCBvcHRpb25zLnVybC5pc192YWxpZCgpKTsKICAgYXBwbGljYXRpb25fbGlmZWN5Y2xlX3N0YXRlXy0+QWRkT2JzZXJ2ZXIodGhpcyk7CkBAIC0xMjYsNyArMTI1LDggQEAKICAgbG9jYXRpb25fID0gbmV3IExvY2F0aW9uKAogICAgICAgb3B0aW9ucy51cmwsIG9wdGlvbnMuaGFzaGNoYW5nZV9jYWxsYmFjaywgb3B0aW9ucy5uYXZpZ2F0aW9uX2NhbGxiYWNrLAogICAgICAgYmFzZTo6QmluZCgmQ3NwRGVsZWdhdGU6OkNhbkxvYWQsIGJhc2U6OlVucmV0YWluZWQoY3NwX2RlbGVnYXRlXy5nZXQoKSksCi0gICAgICAgICAgICAgICAgIENzcERlbGVnYXRlOjprTG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICAgQ3NwRGVsZWdhdGU6OmtMb2NhdGlvbiksCisgICAgICBiYXNlOjpCaW5kKCZEb2N1bWVudDo6U2V0TmF2aWdhdGlvblR5cGUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKIAogICBmb250X2NhY2hlXy5yZXNldChuZXcgRm9udENhY2hlKAogICAgICAgaHRtbF9lbGVtZW50X2NvbnRleHRfLT5yZXNvdXJjZV9wcm92aWRlcigpLApAQCAtOTAwLDEyICs5MDAsNiBAQAogCiB2b2lkIERvY3VtZW50OjpTYW1wbGVUaW1lbGluZVRpbWUoKSB7IGRlZmF1bHRfdGltZWxpbmVfLT5TYW1wbGUoKTsgfQogCi0jaWYgZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKLXZvaWQgRG9jdW1lbnQ6OlNldFBhcnRpYWxMYXlvdXQoYm9vbCBlbmFibGVkKSB7Ci0gIHBhcnRpYWxfbGF5b3V0X2lzX2VuYWJsZWRfID0gZW5hYmxlZDsKLX0KLSNlbmRpZiAgLy8gZGVmaW5lZChFTkFCTEVfUEFSVElBTF9MQVlPVVRfQ09OVFJPTCkKLQogVmlld3BvcnRTaXplIERvY3VtZW50Ojp2aWV3cG9ydF9zaXplKCkgewogICByZXR1cm4gdmlld3BvcnRfc2l6ZV8udmFsdWVfb3IoVmlld3BvcnRTaXplKCkpOwogfQpAQCAtMTE0OCw2ICsxMTQyLDQ2IEBACiAgIHRyYWNlci0+VHJhY2UoaW5pdGlhbF9jb21wdXRlZF9zdHlsZV9kZWNsYXJhdGlvbl8pOwogfQogCit2b2lkIERvY3VtZW50OjpDcmVhdGVQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoCisgICAgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlLCBjb25zdCBuZXQ6OkxvYWRUaW1pbmdJbmZvJiB0aW1pbmdfaW5mbykgeworICAvLyBUbyBjcmVhdGUgdGhlIG5hdmlnYXRpb24gdGltaW5nIGVudHJ5IGZvciBkb2N1bWVudCwgZ2l2ZW4gYSBsb2FkVGltaW5naW5mbywKKyAgLy8gYSBuYXZpZ2F0aW9uVHlwZSBhbmQgYSBudWxsIHNlcnZpY2Ugd29ya2VyIHRpbWluZyBpbmZvLCBkbyB0aGUgZm9sbG93aW5nOgorICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDIyL1dELW5hdmlnYXRpb24tdGltaW5nLTItMjAyMjAyMjQvI21hcmtpbmctbmF2aWdhdGlvbi10aW1pbmcKKyAgLy8gMS4gTGV0IGdsb2JhbCBiZSBkb2N1bWVudCdzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QuCisgIC8vIDIuIExldCBuYXZpZ2F0aW9uVGltaW5nRW50cnkgYmUgYSBuZXcgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nIG9iamVjdAorICAvLyBpbiBnbG9iYWwncyByZWFsbS4KKyAgLy8gMy4gU2V0dXAgdGhlIHJlc291cmNlIHRpbWluZyBlbnRyeSBmb3IgbmF2aWdhdGlvblRpbWluZ0VudHJ5IGdpdmVuCisgIC8vICJuYXZpZ2F0aW9uIiwgZG9jdW1lbnQncyBhZGRyZXNzLCBhbmQgZmV0Y2hUaW1pbmcuCisgIC8vIDQuIFNldCBuYXZpZ2F0aW9uVGltaW5nRW50cnkncyBkb2N1bWVudCBsb2FkIHRpbWluZyB0byBkb2N1bWVudCdzCisgIC8vIGxvYWQgdGltaW5nIGluZm8uCisgIC8vIDUuIFNldCBuYXZpZ2F0aW9uVGltaW5nRW50cnkncyBwcmV2aW91cyBkb2N1bWVudCB1bmxvYWQgdGltaW5nIHRvCisgIC8vIGRvY3VtZW50J3MgcHJldmlvdXMgZG9jdW1lbnQgdW5sb2FkIHRpbWluZy4KKyAgLy8gNi4gU2V0IG5hdmlnYXRpb25UaW1pbmdFbnRyeSdzIHJlZGlyZWN0IGNvdW50IHRvIHJlZGlyZWN0Q291bnQuCisgIC8vIDcuIFNldCBuYXZpZ2F0aW9uVGltaW5nRW50cnkncyBuYXZpZ2F0aW9uIHR5cGUgdG8gbmF2aWdhdGlvblR5cGUuCisgIC8vIDguIFNldCBuYXZpZ2F0aW9uVGltaW5nRW50cnkncyBzZXJ2aWNlIHdvcmtlciB0aW1pbmcgdG8KKyAgLy8gc2VydmljZVdvcmtlclRpbWluZy4KKyAgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc+IG5hdmlnYXRpb25fdGltaW5nKAorICAgICAgbmV3IFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh0aW1pbmdfaW5mbywgbG9jYXRpb25fLT51cmwoKS5zcGVjKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlLCB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZS0+R2V0VGltZU9yaWdpbigpKSk7CisKKyAgLy8gOS4gU2V0IGRvY3VtZW50J3MgbmF2aWdhdGlvbiB0aW1pbmcgZW50cnkgdG8KKyAgLy8gbmF2aWdhdGlvblRpbWluZ0VudHJ5LgorICBuYXZpZ2F0aW9uX3RpbWluZ19lbnRyeV8gPSBuYXZpZ2F0aW9uX3RpbWluZzsKKyAgLy8gMTAuIGFkZCBuYXZpZ2F0aW9uVGltaW5nRW50cnkgdG8gZ2xvYmFsJ3MgcGVyZm9ybWFuY2UgZW50cnkgYnVmZmVyLgorICBwZXJmb3JtYW5jZS0+QWRkRW50cnlUb1BlcmZvcm1hbmNlRW50cnlCdWZmZXIobmF2aWdhdGlvbl90aW1pbmdfZW50cnlfKTsKKyAgLy8gMTEuIFRvIHF1ZXVlIHRoZSBuYXZpZ2F0aW9uIHRpbWluZyBlbnRyeSBmb3IgRG9jdW1lbnQgZG9jdW1lbnQsIHF1ZXVlCisgIC8vIGRvY3VtZW50J3MgbmF2aWdhdGlvbiB0aW1pbmcgZW50cnkuCisgIHBlcmZvcm1hbmNlLT5RdWV1ZVBlcmZvcm1hbmNlRW50cnkobmF2aWdhdGlvbl90aW1pbmdfZW50cnlfKTsKK30KKwordm9pZCBEb2N1bWVudDo6U2V0VW5sb2FkRXZlbnRUaW1pbmdJbmZvKGJhc2U6OlRpbWVUaWNrcyBzdGFydF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSkgeworICBkb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvXy51bmxvYWRfZXZlbnRfc3RhcnQgPSBzdGFydF90aW1lOworICBkb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvXy51bmxvYWRfZXZlbnRfZW5kID0gZW5kX3RpbWU7Cit9CisKKwogdm9pZCBEb2N1bWVudDo6c2V0X3JlbmRlcl9wb3N0cG9uZWQoYm9vbCByZW5kZXJfcG9zdHBvbmVkKSB7CiAgIGJvb2wgdW5wb3N0cG9uZWQgPSByZW5kZXJfcG9zdHBvbmVkXyAmJiAhcmVuZGVyX3Bvc3Rwb25lZDsKICAgcmVuZGVyX3Bvc3Rwb25lZF8gPSByZW5kZXJfcG9zdHBvbmVkOwpAQCAtMTE1Niw2ICsxMTkwLDI4IEBACiAgIH0KIH0KIAordm9pZCBEb2N1bWVudDo6Q29sbGVjdFRpbWluZ0luZm9BbmREaXNwYXRjaEV2ZW50KCkgeworICBEQ0hFQ0soaHRtbF9lbGVtZW50X2NvbnRleHRfKTsKKyAgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlID0gaHRtbF9lbGVtZW50X2NvbnRleHRfLT5wZXJmb3JtYW5jZSgpOworICBib29sIGlzX3BlcmZvcm1hbmNlX3ZhbGlkID0gcGVyZm9ybWFuY2UgIT0gbnVsbHB0cjsKKworICAvLyBTZXQgZG9jdW1lbnQgbG9hZCB0aW1pbmcgaW5mbydzIGRvbSBjb250ZW50IGxvYWRlZCBldmVudCBzdGFydCB0aW1lCisgIC8vIGJlZm9yZSB1c2VyIGFnZW50IGRpc3BhdGNoZXMgdGhlIERPTUNvbmVudExvYWRlZCBldmVudC4KKyAgaWYgKGlzX3BlcmZvcm1hbmNlX3ZhbGlkKSB7CisgICAgZG9jdW1lbnRfbG9hZF90aW1pbmdfaW5mb18uZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X3N0YXJ0ID0KKyAgICAgICAgcGVyZm9ybWFuY2UtPk5vdygpOworICB9CisKKyAgUG9zdFRvRGlzcGF0Y2hFdmVudE5hbWUoRlJPTV9IRVJFLCBiYXNlOjpUb2tlbnM6OmRvbWNvbnRlbnRsb2FkZWQoKSk7CisKKyAgLy8gU2V0IGRvY3VtZW50IGxvYWQgdGltaW5nIGluZm8ncyBkb20gY29udGVudCBsb2FkZWQgZXZlbnQgZW5kIHRpbWUKKyAgLy8gYWZ0ZXIgdXNlciBhZ2VudCBjb21wbGV0ZXMgaGFuZGxpbmcgdGhlIERPTUNvbmVudExvYWRlZCBldmVudC4KKyAgaWYgKGlzX3BlcmZvcm1hbmNlX3ZhbGlkKSB7CisgICAgZG9jdW1lbnRfbG9hZF90aW1pbmdfaW5mb18uZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X2VuZCA9CisgICAgICAgIHBlcmZvcm1hbmNlLT5Ob3coKTsKKyAgfQorfQorCiB2b2lkIERvY3VtZW50OjpPblJvb3RFbGVtZW50VW5hYmxlVG9Qcm92aWRlT2Zmc2V0RGltZW5zaW9ucygpIHsKICAgd2luZG93Xy0+T25Eb2N1bWVudFJvb3RFbGVtZW50VW5hYmxlVG9Qcm92aWRlT2Zmc2V0RGltZW5zaW9ucygpOwogfQpAQCAtMTE3Myw2ICsxMjI5LDE2IEBACiAgICAgVXBkYXRlQ29tcHV0ZWRTdHlsZXMoKTsKICAgfQogCisgIERDSEVDSyhodG1sX2VsZW1lbnRfY29udGV4dF8pOworICBQZXJmb3JtYW5jZSogcGVyZm9ybWFuY2UgPSBodG1sX2VsZW1lbnRfY29udGV4dF8tPnBlcmZvcm1hbmNlKCk7CisgIGJvb2wgaXNfcGVyZm9ybWFuY2VfdmFsaWQgPSBwZXJmb3JtYW5jZSAhPSBudWxscHRyOworCisgIC8vIFNldCBkb2N1bWVudCBsb2FkIHRpbWluZyBpbmZvJ3MgZG9tIGNvbXBsZXRlIHRpbWUgYmVmb3JlIHVzZXIgYWdlbnQgc2V0IHRoZQorICAvLyBjdXJyZW50IGRvY3VtZW50IHJlYWRpbmVzcyB0byAiY29tcGxldGUiLgorICBpZiAoaXNfcGVyZm9ybWFuY2VfdmFsaWQpIHsKKyAgICBkb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvXy5kb21fY29tcGxldGUgPSBwZXJmb3JtYW5jZS0+Tm93KCk7CisgIH0KKwogICAvLyBBZGp1c3QgdGhlIGRvY3VtZW50IHJlYWR5IHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB0aGUgZG9jdW1lbnQgaGFzCiAgIC8vIGZpbmlzaGVkIGxvYWRpbmcuICBQZXJmb3JtaW5nIHRoaXMgdXBkYXRlIGFuZCBmaXJpbmcgdGhlIHJlYWR5c3RhdGVjaGFuZ2UKICAgLy8gZXZlbnQgYmVmb3JlIHRoZSBsb2FkIGV2ZW50IG1hdGNoZXMgQ2hyb21pdW0ncyBiZWhhdmlvci4KQEAgLTExODIsOSArMTI0OCwyMSBAQAogICAvLyBoYXZlIGNoYW5nZWQgdGhlIGRvY3VtZW50IHJlYWR5IHN0YXRlLgogICBEaXNwYXRjaEV2ZW50KG5ldyBFdmVudChiYXNlOjpUb2tlbnM6OnJlYWR5c3RhdGVjaGFuZ2UoKSkpOwogCisgIC8vIFNldCBkb2N1bWVudCBsb2FkIHRpbWluZyBpbmZvJ3MgbG9hZCBldmVudCBzdGFydCB0aW1lIGJlZm9yZSB1c2VyIGFnZW50CisgIC8vIGRpc3BhdGNoIHRoZSBsb2FkIGV2ZW50IGZvciB0aGUgZG9jdW1lbnQuCisgIGlmIChpc19wZXJmb3JtYW5jZV92YWxpZCkgeworICAgIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fLmxvYWRfZXZlbnRfc3RhcnQgPSBwZXJmb3JtYW5jZS0+Tm93KCk7CisgIH0KKwogICAvLyBEaXNwYXRjaCB0aGUgZG9jdW1lbnQncyBvbmxvYWQgZXZlbnQuCiAgIERpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGJhc2U6OlRva2Vuczo6bG9hZCgpKSk7CiAKKyAgLy8gU2V0IGRvY3VtZW50IGxvYWQgdGltaW5nIGluZm8ncyBsb2FkIGV2ZW50IGVuZCB0aW1lIGFmdGVyIHVzZXIgYWdlbnQKKyAgLy8gY29tcGxldGVzIGhhbmRsaW5nIHRoZSBsb2FkIGV2ZW50IGZvciB0aGUgZG9jdW1lbnQuCisgIGlmIChpc19wZXJmb3JtYW5jZV92YWxpZCkgeworICAgIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fLmxvYWRfZXZlbnRfZW5kID0gcGVyZm9ybWFuY2UtPk5vdygpOworICB9CisKICAgLy8gQWZ0ZXIgYWxsIEphdmFTY3JpcHQgT25Mb2FkIGV2ZW50IGhhbmRsZXJzIGhhdmUgZXhlY3V0ZWQsIHNpZ25hbCB0byBsZXQKICAgLy8gYW55IERvY3VtZW50IG9ic2VydmVycyBrbm93IHRoYXQgYSBsb2FkIGV2ZW50IGhhcyBvY2N1cnJlZC4KICAgU2lnbmFsT25Mb2FkVG9PYnNlcnZlcnMoKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZG9jdW1lbnQuaCBiL2NvYmFsdC9kb20vZG9jdW1lbnQuaAppbmRleCAzMmI0ZmJjLi42YmYwZWU2IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2RvY3VtZW50LmgKKysrIGIvY29iYWx0L2RvbS9kb2N1bWVudC5oCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3ZpZXdwb3J0X3NpemUuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2FwcGxpY2F0aW9uX2xpZmVjeWNsZV9zdGF0ZS5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vY3NwX2RlbGVnYXRlX3R5cGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2RvY3VtZW50X2xvYWRfdGltaW5nX2luZm8uaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvY3VtZW50X3JlYWR5X3N0YXRlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb2N1bWVudF90aW1lbGluZS5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnQuaCIKQEAgLTQ4LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9ub2RlLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vcG9pbnRlcl9zdGF0ZS5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdmlzaWJpbGl0eV9zdGF0ZS5oIgogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKQEAgLTc1LDYgKzc3LDcgQEAKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudDsKIGNsYXNzIExvY2F0aW9uOworY2xhc3MgUGVyZm9ybWFuY2U7CiBjbGFzcyBUZXh0OwogY2xhc3MgV2luZG93OwogCkBAIC0zODQsMTEgKzM4Nyw2IEBACiAKICAgQ3NwRGVsZWdhdGUqIGNzcF9kZWxlZ2F0ZSgpIGNvbnN0IHsgcmV0dXJuIGNzcF9kZWxlZ2F0ZV8uZ2V0KCk7IH0KIAotI2lmIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0gIGJvb2wgcGFydGlhbF9sYXlvdXRfaXNfZW5hYmxlZCgpIHsgcmV0dXJuIHBhcnRpYWxfbGF5b3V0X2lzX2VuYWJsZWRfOyB9Ci0gIHZvaWQgU2V0UGFydGlhbExheW91dChib29sIGVuYWJsZWQpOwotI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9QQVJUSUFMX0xBWU9VVF9DT05UUk9MKQotCiAgIC8vIFRyaWdnZXJzIGEgc3luY2hyb25vdXMgbGF5b3V0LgogICBzY29wZWRfcmVmcHRyPHJlbmRlcl90cmVlOjpOb2RlPiBEb1N5bmNocm9ub3VzTGF5b3V0QW5kR2V0UmVuZGVyVHJlZSgpOwogICB2b2lkIERvU3luY2hyb25vdXNMYXlvdXQoKTsKQEAgLTQ4MSw2ICs0NzksNDMgQEAKICAgREVGSU5FX1dSQVBQQUJMRV9UWVBFKERvY3VtZW50KTsKICAgdm9pZCBUcmFjZU1lbWJlcnMoc2NyaXB0OjpUcmFjZXIqIHRyYWNlcikgb3ZlcnJpZGU7CiAKKyAgLy8gUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nIHJlbGF0ZWQgQVBJLgorICB2b2lkIENyZWF0ZVBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZygKKyAgICAgIFBlcmZvcm1hbmNlKiBwZXJmb3JtYW5jZSwgY29uc3QgbmV0OjpMb2FkVGltaW5nSW5mbyYgdGltaW5nX2luZm8pOworICBiYXNlOjpUaW1lVGlja3MgR2V0RG9jdW1lbnRVbmxvYWRFdmVudFN0YXJ0VGltZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gZG9jdW1lbnRfbG9hZF90aW1pbmdfaW5mb18udW5sb2FkX2V2ZW50X3N0YXJ0OworICB9CisgIGJhc2U6OlRpbWVUaWNrcyBHZXREb2N1bWVudFVubG9hZEV2ZW50RW5kVGltZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gZG9jdW1lbnRfbG9hZF90aW1pbmdfaW5mb18udW5sb2FkX2V2ZW50X2VuZDsKKyAgfQorICBET01IaWdoUmVzVGltZVN0YW1wIEdldERvY3VtZW50Q29udGVudExvYWRlZEV2ZW50U3RhcnRUaW1lKCkgY29uc3QgeworICAgIHJldHVybiBkb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvXy5kb21fY29udGVudF9sb2FkZWRfZXZlbnRfc3RhcnQ7CisgIH0KKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBHZXREb2N1bWVudENvbnRlbnRMb2FkZWRFdmVudEVuZFRpbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fLmRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQ7CisgIH0KKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBHZXREb2N1bWVudERvbUNvbXBsZXRlVGltZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gZG9jdW1lbnRfbG9hZF90aW1pbmdfaW5mb18uZG9tX2NvbXBsZXRlOworICB9CisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgR2V0RG9jdW1lbnRMb2FkRXZlbnRTdGFydFRpbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fLmxvYWRfZXZlbnRfc3RhcnQ7CisgIH0KKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBHZXREb2N1bWVudExvYWRFdmVudEVuZFRpbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fLmxvYWRfZXZlbnRfZW5kOworICB9CisgIE5hdmlnYXRpb25UeXBlIEdldE5hdmlnYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbmF2aWdhdGlvbl90eXBlXzsgfQorCisgIC8vIENvbGxlY3QgZG9tIGNvbnRlbnQgbG9hZGVkIHRpbWluZyBpbmZvIGFuZCBkaXNwYXRjaCBkb20gY29udGVudCBsb2FkZWQKKyAgLy8gZXZlbnQuCisgIHZvaWQgQ29sbGVjdFRpbWluZ0luZm9BbmREaXNwYXRjaEV2ZW50KCk7CisKKyAgdm9pZCBTZXROYXZpZ2F0aW9uVHlwZShOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uX3R5cGUpIHsKKyAgICBuYXZpZ2F0aW9uX3R5cGVfID0gbmF2aWdhdGlvbl90eXBlOworICB9CisKKyAgdm9pZCBTZXRVbmxvYWRFdmVudFRpbWluZ0luZm8oYmFzZTo6VGltZVRpY2tzIHN0YXJ0X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSk7CisKICBwcm90ZWN0ZWQ6CiAgIH5Eb2N1bWVudCgpIG92ZXJyaWRlOwogCkBAIC01NTUsOSArNTkwLDYgQEAKICAgYm9vbCBpc19jb21wdXRlZF9zdHlsZV9kaXJ0eV87CiAgIGJvb2wgYXJlX2ZvbnRfZmFjZXNfZGlydHlfOwogICBib29sIGFyZV9rZXlmcmFtZXNfZGlydHlfOwotI2lmIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0gIGJvb2wgcGFydGlhbF9sYXlvdXRfaXNfZW5hYmxlZF87Ci0jZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCiAKICAgLy8gVmlld3BvcnQgc2l6ZS4KICAgYmFzZTo6T3B0aW9uYWw8Y3Nzb206OlZpZXdwb3J0U2l6ZT4gdmlld3BvcnRfc2l6ZV87CkBAIC02NDQsNiArNjc2LDExIEBACiAKICAgc2NvcGVkX3JlZnB0cjxJbnRlcnNlY3Rpb25PYnNlcnZlclRhc2tNYW5hZ2VyPgogICAgICAgaW50ZXJzZWN0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlcl87CisKKyAgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc+IG5hdmlnYXRpb25fdGltaW5nX2VudHJ5XzsKKworICBEb2N1bWVudExvYWRUaW1pbmdJbmZvIGRvY3VtZW50X2xvYWRfdGltaW5nX2luZm9fOworICBOYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uX3R5cGVfOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIGRvbQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9kb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvLmggYi9jb2JhbHQvZG9tL2RvY3VtZW50X2xvYWRfdGltaW5nX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjJkNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RvbS9kb2N1bWVudF9sb2FkX3RpbWluZ19pbmZvLmgKQEAgLTAsMCArMSw2NCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9ET01fRE9DVU1FTlRfTE9BRF9USU1JTkdfSU5GT19IXworI2RlZmluZSBDT0JBTFRfRE9NX0RPQ1VNRU5UX0xPQURfVElNSU5HX0lORk9fSF8KKworI2luY2x1ZGUgImNvYmFsdC9kb20vcGVyZm9ybWFuY2VfaGlnaF9yZXNvbHV0aW9uX3RpbWUuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgZG9tIHsKKworLy8gSW1wbGVtZW50cyB0aGUgRG9jdW1lbnRMb2FkVGltaW5nSW5mbyBzdHJ1Y3QgZm9yIHNhdmluZyBkb2N1bWVudCBsb2FkaW5nCisvLyByZWxhdGVkIHRpbWluZyBpbmZvLgorLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNkb2N1bWVudC1sb2FkLXRpbWluZy1pbmZvCitzdHJ1Y3QgRG9jdW1lbnRMb2FkVGltaW5nSW5mbyB7CisgIERvY3VtZW50TG9hZFRpbWluZ0luZm8oKSA9IGRlZmF1bHQ7CisgIERvY3VtZW50TG9hZFRpbWluZ0luZm8oY29uc3QgRG9jdW1lbnRMb2FkVGltaW5nSW5mbyYgb3RoZXIpID0gZGVmYXVsdDsKKyAgfkRvY3VtZW50TG9hZFRpbWluZ0luZm8oKSA9IGRlZmF1bHQ7CisKKyAgLy8gSWYgdGhlIHByZXZpb3VzIGRvY3VtZW50IGFuZCB0aGUgY3VycmVudCBkb2N1bWVudCBoYXZlIHRoZSBzYW1lIG9yaWdpbiwKKyAgLy8gdGhlc2UgdGltZXN0YW1wcyBhcmUgbWVhc3VyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgYWdlbnQgaGFuZGxlcyB0aGUKKyAgLy8gdW5sb2FkIGV2ZW50IG9mIHRoZSBwcmV2aW91cyBkb2N1bWVudC4gSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgZG9jdW1lbnQKKyAgLy8gb3IgdGhlIHByZXZpb3VzIGRvY3VtZW50IGhhcyBhIGRpZmZlcmVudCBvcmlnaW4gdGhhbiB0aGUgY3VycmVudCBkb2N1bWVudCwKKyAgLy8gdGhlc2UgYXR0cmlidXRlcyB3aWxsIGJlIHplcm8uCisgIGJhc2U6OlRpbWVUaWNrcyB1bmxvYWRfZXZlbnRfc3RhcnQ7CisgIGJhc2U6OlRpbWVUaWNrcyB1bmxvYWRfZXZlbnRfZW5kOworCisgIC8vIFRoaXMgdGltZXN0YW1wIGlzIG1lYXN1cmVkIGJlZm9yZSB0aGUgdXNlciBhZ2VudCBkaXNwYXRjaGVzIHRoZQorICAvLyBET01Db250ZW50TG9hZGVkIGV2ZW50LgorICBET01IaWdoUmVzVGltZVN0YW1wIGRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9zdGFydCA9IDAuMDsKKworICAvLyBUaGlzIHRpbWVzdGFtcCBpcyBtZWFzdXJlZCBhZnRlciB0aGUgdXNlciBhZ2VudCBjb21wbGV0ZXMgaGFuZGxpbmcgb2YKKyAgLy8gdGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQuCisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgZG9tX2NvbnRlbnRfbG9hZGVkX2V2ZW50X2VuZCA9IDAuMDsKKworICAvLyBUaGlzIHRpbWVzdGFtcCBpcyBtZWFzdXJlZCBiZWZvcmUgdGhlIHVzZXIgYWdlbnQgc2V0cyB0aGUgY3VycmVudAorICAvLyBkb2N1bWVudCByZWFkaW5lc3MgdG8gImNvbXBsZXRlIi4gU2VlIGRvY3VtZW50IHJlYWRpbmVzcyBmb3IgYSBwcmVjaXNlCisgIC8vIGRlZmluaXRpb24uCisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgZG9tX2NvbXBsZXRlID0gMC4wOworCisgIC8vIFRoaXMgdGltZXN0YW1wIGlzIG1lYXN1cmVkIGJlZm9yZSB0aGUgdXNlciBhZ2VudCBkaXNwYXRjaGVzIHRoZSBsb2FkCisgIC8vIGV2ZW50IGZvciB0aGUgZG9jdW1lbnQuCisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgbG9hZF9ldmVudF9zdGFydCA9IDAuMDsKKworICAvLyBUaGlzIHRpbWVzdGFtcCBpcyBtZWFzdXJlZCBhZnRlciB0aGUgdXNlciBhZ2VudCBjb21wbGV0ZXMgaGFuZGxpbmcKKyAgLy8gdGhlIGxvYWQgZXZlbnQgZm9yIHRoZSBkb2N1bWVudC4KKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBsb2FkX2V2ZW50X2VuZCA9IDAuMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBkb20KK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfRE9NX0RPQ1VNRU5UX0xPQURfVElNSU5HX0lORk9fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZG9tLmd5cCBiL2NvYmFsdC9kb20vZG9tLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAyZTYxNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvZG9tL2RvbS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWyAnLi4vYnVpbGQvY29udGVudHNfZGlyLmd5cGknIF0sCi0KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZG9tJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYWJvcnRfY29udHJvbGxlci5oJywKLSAgICAgICAgJ2Fib3J0X2NvbnRyb2xsZXIuY2MnLAotICAgICAgICAnYWJvcnRfc2lnbmFsLmgnLAotICAgICAgICAnYWJvcnRfc2lnbmFsLmNjJywKLSAgICAgICAgJ2FuaW1hdGlvbl9ldmVudC5oJywKLSAgICAgICAgJ2FuaW1hdGlvbl9mcmFtZV9yZXF1ZXN0X2NhbGxiYWNrX2xpc3QuY2MnLAotICAgICAgICAnYW5pbWF0aW9uX2ZyYW1lX3JlcXVlc3RfY2FsbGJhY2tfbGlzdC5oJywKLSAgICAgICAgJ2F0dHIuY2MnLAotICAgICAgICAnYXR0ci5oJywKLSAgICAgICAgJ2F1ZGlvX3RyYWNrLmgnLAotICAgICAgICAnYXVkaW9fdHJhY2tfbGlzdC5oJywKLSAgICAgICAgJ2Jhc2U2NC5jYycsCi0gICAgICAgICdiYXNlNjQuaCcsCi0gICAgICAgICdiZW5jaG1hcmtfc3RhdF9uYW1lcy5jYycsCi0gICAgICAgICdiZW5jaG1hcmtfc3RhdF9uYW1lcy5oJywKLSAgICAgICAgJ2Jsb2IuY2MnLAotICAgICAgICAnYmxvYi5oJywKLSAgICAgICAgJ2Jsb2JfcHJvcGVydHlfYmFnLmgnLAotICAgICAgICAnYnVmZmVyX3NvdXJjZS5jYycsCi0gICAgICAgICdidWZmZXJfc291cmNlLmgnLAotICAgICAgICAnY192YWxfdmlldy5jYycsCi0gICAgICAgICdjX3ZhbF92aWV3LmgnLAotICAgICAgICAnY2FtZXJhXzNkLmNjJywKLSAgICAgICAgJ2NhbWVyYV8zZC5oJywKLSAgICAgICAgJ2NhcHRpb25zL3N5c3RlbV9jYXB0aW9uX3NldHRpbmdzLmNjJywKLSAgICAgICAgJ2NhcHRpb25zL3N5c3RlbV9jYXB0aW9uX3NldHRpbmdzLmgnLAotICAgICAgICAnY2RhdGFfc2VjdGlvbi5jYycsCi0gICAgICAgICdjZGF0YV9zZWN0aW9uLmgnLAotICAgICAgICAnY2hhcmFjdGVyX2RhdGEuY2MnLAotICAgICAgICAnY2hhcmFjdGVyX2RhdGEuaCcsCi0gICAgICAgICdjb2JhbHRfdWFfZGF0YV92YWx1ZXNfaW50ZXJmYWNlLmNjJywKLSAgICAgICAgJ2NvYmFsdF91YV9kYXRhX3ZhbHVlc19pbnRlcmZhY2UuaCcsCi0gICAgICAgICdjb21tZW50LmNjJywKLSAgICAgICAgJ2NvbW1lbnQuaCcsCi0gICAgICAgICdjcnlwdG8uY2MnLAotICAgICAgICAnY3J5cHRvLmgnLAotICAgICAgICAnY3NwX2RlbGVnYXRlLmNjJywKLSAgICAgICAgJ2NzcF9kZWxlZ2F0ZS5oJywKLSAgICAgICAgJ2NzcF9kZWxlZ2F0ZV9lbnVtLmgnLAotICAgICAgICAnY3NwX2RlbGVnYXRlX2ZhY3RvcnkuY2MnLAotICAgICAgICAnY3NwX2RlbGVnYXRlX2ZhY3RvcnkuaCcsCi0gICAgICAgICdjc3BfdmlvbGF0aW9uX3JlcG9ydGVyLmNjJywKLSAgICAgICAgJ2NzcF92aW9sYXRpb25fcmVwb3J0ZXIuaCcsCi0gICAgICAgICdjc3NfYW5pbWF0aW9uc19hZGFwdGVyLmNjJywKLSAgICAgICAgJ2Nzc19hbmltYXRpb25zX2FkYXB0ZXIuaCcsCi0gICAgICAgICdjc3NfdHJhbnNpdGlvbnNfYWRhcHRlci5jYycsCi0gICAgICAgICdjc3NfdHJhbnNpdGlvbnNfYWRhcHRlci5oJywKLSAgICAgICAgJ2N1c3RvbV9ldmVudC5oJywKLSAgICAgICAgJ2RldmljZV9vcmllbnRhdGlvbl9ldmVudC5jYycsCi0gICAgICAgICdkZXZpY2Vfb3JpZW50YXRpb25fZXZlbnQuaCcsCi0gICAgICAgICdkZXZpY2Vfb3JpZW50YXRpb25fZXZlbnRfaW5pdC5oJywKLSAgICAgICAgJ2RpcmVjdGlvbmFsaXR5LmgnLAotICAgICAgICAnZG9jdW1lbnQuY2MnLAotICAgICAgICAnZG9jdW1lbnQuaCcsCi0gICAgICAgICdkb2N1bWVudF90aW1lbGluZS5jYycsCi0gICAgICAgICdkb2N1bWVudF90aW1lbGluZS5oJywKLSAgICAgICAgJ2RvY3VtZW50X3R5cGUuY2MnLAotICAgICAgICAnZG9jdW1lbnRfdHlwZS5oJywKLSAgICAgICAgJ2RvbV9hbmltYXRhYmxlLmNjJywKLSAgICAgICAgJ2RvbV9hbmltYXRhYmxlLmgnLAotICAgICAgICAnZG9tX2ltcGxlbWVudGF0aW9uLmNjJywKLSAgICAgICAgJ2RvbV9pbXBsZW1lbnRhdGlvbi5oJywKLSAgICAgICAgJ2RvbV9wYXJzZXIuY2MnLAotICAgICAgICAnZG9tX3BhcnNlci5oJywKLSAgICAgICAgJ2RvbV9yZWN0LmgnLAotICAgICAgICAnZG9tX3JlY3RfbGlzdC5jYycsCi0gICAgICAgICdkb21fcmVjdF9saXN0LmgnLAotICAgICAgICAnZG9tX3JlY3RfcmVhZF9vbmx5LmgnLAotICAgICAgICAnZG9tX3NldHRpbmdzLmNjJywKLSAgICAgICAgJ2RvbV9zZXR0aW5ncy5oJywKLSAgICAgICAgJ2RvbV9zdGF0X3RyYWNrZXIuY2MnLAotICAgICAgICAnZG9tX3N0YXRfdHJhY2tlci5oJywKLSAgICAgICAgJ2RvbV9zdHJpbmdfbWFwLmNjJywKLSAgICAgICAgJ2RvbV9zdHJpbmdfbWFwLmgnLAotICAgICAgICAnZG9tX3Rva2VuX2xpc3QuY2MnLAotICAgICAgICAnZG9tX3Rva2VuX2xpc3QuaCcsCi0gICAgICAgICdlbGVtZW50LmNjJywKLSAgICAgICAgJ2VsZW1lbnQuaCcsCi0gICAgICAgICdlbGVtZW50X2ludGVyc2VjdGlvbl9vYnNlcnZlcl9tb2R1bGUuY2MnLAotICAgICAgICAnZWxlbWVudF9pbnRlcnNlY3Rpb25fb2JzZXJ2ZXJfbW9kdWxlLmgnLAotICAgICAgICAnZW1lL21lZGlhX2VuY3J5cHRlZF9ldmVudC5jYycsCi0gICAgICAgICdlbWUvbWVkaWFfZW5jcnlwdGVkX2V2ZW50LmgnLAotICAgICAgICAnZW1lL21lZGlhX2tleV9tZXNzYWdlX2V2ZW50LmNjJywKLSAgICAgICAgJ2VtZS9tZWRpYV9rZXlfbWVzc2FnZV9ldmVudC5oJywKLSAgICAgICAgJ2VtZS9tZWRpYV9rZXlfc2Vzc2lvbi5jYycsCi0gICAgICAgICdlbWUvbWVkaWFfa2V5X3Nlc3Npb24uaCcsCi0gICAgICAgICdlbWUvbWVkaWFfa2V5X3N0YXR1c19tYXAuY2MnLAotICAgICAgICAnZW1lL21lZGlhX2tleV9zdGF0dXNfbWFwLmgnLAotICAgICAgICAnZW1lL21lZGlhX2tleV9zeXN0ZW1fYWNjZXNzLmNjJywKLSAgICAgICAgJ2VtZS9tZWRpYV9rZXlfc3lzdGVtX2FjY2Vzcy5oJywKLSAgICAgICAgJ2VtZS9tZWRpYV9rZXlzLmNjJywKLSAgICAgICAgJ2VtZS9tZWRpYV9rZXlzLmgnLAotICAgICAgICAnZXJyb3JfZXZlbnQuaCcsCi0gICAgICAgICdldmVudC5jYycsCi0gICAgICAgICdldmVudC5oJywKLSAgICAgICAgJ2V2ZW50X2luaXQuaCcsCi0gICAgICAgICdldmVudF9saXN0ZW5lci5oJywKLSAgICAgICAgJ2V2ZW50X3F1ZXVlLmNjJywKLSAgICAgICAgJ2V2ZW50X3F1ZXVlLmgnLAotICAgICAgICAnZXZlbnRfdGFyZ2V0LmNjJywKLSAgICAgICAgJ2V2ZW50X3RhcmdldC5oJywKLSAgICAgICAgJ2V2ZW50X3RhcmdldF9saXN0ZW5lcl9pbmZvLmNjJywKLSAgICAgICAgJ2V2ZW50X3RhcmdldF9saXN0ZW5lcl9pbmZvLmgnLAotICAgICAgICAnZm9jdXNfZXZlbnQuY2MnLAotICAgICAgICAnZm9jdXNfZXZlbnQuaCcsCi0gICAgICAgICdmb2N1c19ldmVudF9pbml0LmgnLAotICAgICAgICAnZm9udF9jYWNoZS5jYycsCi0gICAgICAgICdmb250X2NhY2hlLmgnLAotICAgICAgICAnZm9udF9mYWNlLmNjJywKLSAgICAgICAgJ2ZvbnRfZmFjZS5oJywKLSAgICAgICAgJ2ZvbnRfZmFjZV91cGRhdGVyLmNjJywKLSAgICAgICAgJ2ZvbnRfZmFjZV91cGRhdGVyLmgnLAotICAgICAgICAnZm9udF9saXN0LmNjJywKLSAgICAgICAgJ2ZvbnRfbGlzdC5oJywKLSAgICAgICAgJ2dsb2JhbF9zdGF0cy5jYycsCi0gICAgICAgICdnbG9iYWxfc3RhdHMuaCcsCi0gICAgICAgICdoaXN0b3J5LmNjJywKLSAgICAgICAgJ2hpc3RvcnkuaCcsCi0gICAgICAgICdodG1sX2FuY2hvcl9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfYW5jaG9yX2VsZW1lbnQuaCcsCi0gICAgICAgICdodG1sX2F1ZGlvX2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9hdWRpb19lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9ib2R5X2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9ib2R5X2VsZW1lbnQuaCcsCi0gICAgICAgICdodG1sX2JyX2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9icl9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9jb2xsZWN0aW9uLmNjJywKLSAgICAgICAgJ2h0bWxfY29sbGVjdGlvbi5oJywKLSAgICAgICAgJ2h0bWxfZGl2X2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9kaXZfZWxlbWVudC5oJywKLSAgICAgICAgJ2h0bWxfZWxlbWVudC5jYycsCi0gICAgICAgICdodG1sX2VsZW1lbnQuaCcsCi0gICAgICAgICdodG1sX2VsZW1lbnRfY29udGV4dC5jYycsCi0gICAgICAgICdodG1sX2VsZW1lbnRfY29udGV4dC5oJywKLSAgICAgICAgJ2h0bWxfZWxlbWVudF9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2h0bWxfZWxlbWVudF9mYWN0b3J5LmgnLAotICAgICAgICAnaHRtbF9oZWFkX2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9oZWFkX2VsZW1lbnQuaCcsCi0gICAgICAgICdodG1sX2hlYWRpbmdfZWxlbWVudC5jYycsCi0gICAgICAgICdodG1sX2hlYWRpbmdfZWxlbWVudC5oJywKLSAgICAgICAgJ2h0bWxfaHRtbF9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfaHRtbF9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9pbWFnZV9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfaW1hZ2VfZWxlbWVudC5oJywKLSAgICAgICAgJ2h0bWxfbGlua19lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfbGlua19lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9tZWRpYV9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfbWVkaWFfZWxlbWVudC5oJywKLSAgICAgICAgJ2h0bWxfbWV0YV9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfbWV0YV9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9wYXJhZ3JhcGhfZWxlbWVudC5jYycsCi0gICAgICAgICdodG1sX3BhcmFncmFwaF9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9zY3JpcHRfZWxlbWVudC5jYycsCi0gICAgICAgICdodG1sX3NjcmlwdF9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF9zcGFuX2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9zcGFuX2VsZW1lbnQuaCcsCi0gICAgICAgICdodG1sX3N0eWxlX2VsZW1lbnQuY2MnLAotICAgICAgICAnaHRtbF9zdHlsZV9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF90aXRsZV9lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfdGl0bGVfZWxlbWVudC5oJywKLSAgICAgICAgJ2h0bWxfdW5rbm93bl9lbGVtZW50LmgnLAotICAgICAgICAnaHRtbF92aWRlb19lbGVtZW50LmNjJywKLSAgICAgICAgJ2h0bWxfdmlkZW9fZWxlbWVudC5oJywKLSAgICAgICAgJ2luaXRpYWxfY29tcHV0ZWRfc3R5bGUuY2MnLAotICAgICAgICAnaW5pdGlhbF9jb21wdXRlZF9zdHlsZS5oJywKLSAgICAgICAgJ2lucHV0X2V2ZW50LmNjJywKLSAgICAgICAgJ2lucHV0X2V2ZW50LmgnLAotICAgICAgICAnaW5wdXRfZXZlbnRfaW5pdC5oJywKLSAgICAgICAgJ2ludGVyc2VjdGlvbl9vYnNlcnZlci5jYycsCi0gICAgICAgICdpbnRlcnNlY3Rpb25fb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdpbnRlcnNlY3Rpb25fb2JzZXJ2ZXJfZW50cnkuY2MnLAotICAgICAgICAnaW50ZXJzZWN0aW9uX29ic2VydmVyX2VudHJ5LmgnLAotICAgICAgICAnaW50ZXJzZWN0aW9uX29ic2VydmVyX2VudHJ5X2luaXQuaCcsCi0gICAgICAgICdpbnRlcnNlY3Rpb25fb2JzZXJ2ZXJfaW5pdC5oJywKLSAgICAgICAgJ2ludGVyc2VjdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXIuY2MnLAotICAgICAgICAnaW50ZXJzZWN0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlci5oJywKLSAgICAgICAgJ2tleWJvYXJkX2V2ZW50LmNjJywKLSAgICAgICAgJ2tleWJvYXJkX2V2ZW50LmgnLAotICAgICAgICAna2V5Ym9hcmRfZXZlbnRfaW5pdC5oJywKLSAgICAgICAgJ2tleWNvZGUuaCcsCi0gICAgICAgICdrZXlmcmFtZXNfbWFwX3VwZGF0ZXIuY2MnLAotICAgICAgICAna2V5ZnJhbWVzX21hcF91cGRhdGVyLmgnLAotICAgICAgICAnbGF5b3V0X2JveGVzLmgnLAotICAgICAgICAnbG9jYWxfc3RvcmFnZV9kYXRhYmFzZS5jYycsCi0gICAgICAgICdsb2NhbF9zdG9yYWdlX2RhdGFiYXNlLmgnLAotICAgICAgICAnbG9jYXRpb24uY2MnLAotICAgICAgICAnbG9jYXRpb24uaCcsCi0gICAgICAgICdsb3R0aWVfcGxheWVyLmNjJywKLSAgICAgICAgJ2xvdHRpZV9wbGF5ZXIuaCcsCi0gICAgICAgICdtZWRpYV9xdWVyeV9saXN0LmNjJywKLSAgICAgICAgJ21lZGlhX3F1ZXJ5X2xpc3QuaCcsCi0gICAgICAgICdtZWRpYV9zb3VyY2UuY2MnLAotICAgICAgICAnbWVkaWFfc291cmNlLmgnLAotICAgICAgICAnbWVtb3J5X2luZm8uY2MnLAotICAgICAgICAnbWVtb3J5X2luZm8uaCcsCi0gICAgICAgICdtZXNzYWdlX2V2ZW50LmNjJywKLSAgICAgICAgJ21lc3NhZ2VfZXZlbnQuaCcsCi0gICAgICAgICdtaW1lX3R5cGVfYXJyYXkuY2MnLAotICAgICAgICAnbWltZV90eXBlX2FycmF5LmgnLAotICAgICAgICAnbW91c2VfZXZlbnQuY2MnLAotICAgICAgICAnbW91c2VfZXZlbnQuaCcsCi0gICAgICAgICdtb3VzZV9ldmVudF9pbml0LmgnLAotICAgICAgICAnbXV0YXRpb25fb2JzZXJ2ZXIuY2MnLAotICAgICAgICAnbXV0YXRpb25fb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdtdXRhdGlvbl9vYnNlcnZlcl9pbml0LmgnLAotICAgICAgICAnbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyLmNjJywKLSAgICAgICAgJ211dGF0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlci5oJywKLSAgICAgICAgJ211dGF0aW9uX3JlY29yZC5jYycsCi0gICAgICAgICdtdXRhdGlvbl9yZWNvcmQuaCcsCi0gICAgICAgICdtdXRhdGlvbl9yZXBvcnRlci5jYycsCi0gICAgICAgICdtdXRhdGlvbl9yZXBvcnRlci5oJywKLSAgICAgICAgJ25hbWVkX25vZGVfbWFwLmNjJywKLSAgICAgICAgJ25hbWVkX25vZGVfbWFwLmgnLAotICAgICAgICAnbmF2aWdhdG9yLmNjJywKLSAgICAgICAgJ25hdmlnYXRvci5oJywKLSAgICAgICAgJ25hdmlnYXRvcl91YV9kYXRhLmNjJywKLSAgICAgICAgJ25hdmlnYXRvcl91YV9kYXRhLmgnLAotICAgICAgICAnbm9kZS5jYycsCi0gICAgICAgICdub2RlLmgnLAotICAgICAgICAnbm9kZV9jaGlsZHJlbl9pdGVyYXRvci5oJywKLSAgICAgICAgJ25vZGVfY29sbGVjdGlvbi5oJywKLSAgICAgICAgJ25vZGVfZGVzY2VuZGFudHNfaXRlcmF0b3IuaCcsCi0gICAgICAgICdub2RlX2xpc3QuY2MnLAotICAgICAgICAnbm9kZV9saXN0LmgnLAotICAgICAgICAnbm9kZV9saXN0X2xpdmUuY2MnLAotICAgICAgICAnbm9kZV9saXN0X2xpdmUuaCcsCi0gICAgICAgICdvbl9lcnJvcl9ldmVudF9saXN0ZW5lci5jYycsCi0gICAgICAgICdvbl9lcnJvcl9ldmVudF9saXN0ZW5lci5oJywKLSAgICAgICAgJ29uX3NjcmVlbl9rZXlib2FyZC5jYycsCi0gICAgICAgICdvbl9zY3JlZW5fa2V5Ym9hcmQuaCcsCi0gICAgICAgICdvbl9zY3JlZW5fa2V5Ym9hcmRfYnJpZGdlLmgnLAotICAgICAgICAnYXBwbGljYXRpb25fbGlmZWN5Y2xlX3N0YXRlLmNjJywKLSAgICAgICAgJ2FwcGxpY2F0aW9uX2xpZmVjeWNsZV9zdGF0ZS5oJywKLSAgICAgICAgJ3BlcmZvcm1hbmNlLmNjJywKLSAgICAgICAgJ3BlcmZvcm1hbmNlLmgnLAotICAgICAgICAncGVyZm9ybWFuY2VfZW50cnkuY2MnLAotICAgICAgICAncGVyZm9ybWFuY2VfZW50cnkuaCcsCi0gICAgICAgICdwZXJmb3JtYW5jZV9lbnRyeV9saXN0X2ltcGwuY2MnLAotICAgICAgICAncGVyZm9ybWFuY2VfZW50cnlfbGlzdF9pbXBsLmgnLAotICAgICAgICAncGVyZm9ybWFuY2VfbGlmZWN5Y2xlX3RpbWluZy5jYycsCi0gICAgICAgICdwZXJmb3JtYW5jZV9saWZlY3ljbGVfdGltaW5nLmgnLAotICAgICAgICAncGVyZm9ybWFuY2VfbWFyay5jYycsCi0gICAgICAgICdwZXJmb3JtYW5jZV9tYXJrLmgnLAotICAgICAgICAncGVyZm9ybWFuY2VfbWVhc3VyZS5jYycsCi0gICAgICAgICdwZXJmb3JtYW5jZV9tZWFzdXJlLmgnLAotICAgICAgICAncGVyZm9ybWFuY2Vfb2JzZXJ2ZXIuY2MnLAotICAgICAgICAncGVyZm9ybWFuY2Vfb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdwZXJmb3JtYW5jZV9vYnNlcnZlcl9lbnRyeV9saXN0LmNjJywKLSAgICAgICAgJ3BlcmZvcm1hbmNlX29ic2VydmVyX2VudHJ5X2xpc3QuaCcsCi0gICAgICAgICdwZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuY2MnLAotICAgICAgICAncGVyZm9ybWFuY2VfcmVzb3VyY2VfdGltaW5nLmgnLAotICAgICAgICAncGVyZm9ybWFuY2VfdGltaW5nLmNjJywKLSAgICAgICAgJ3BlcmZvcm1hbmNlX3RpbWluZy5oJywKLSAgICAgICAgJ3BlcmZvcm1hbmNlX2hpZ2hfcmVzb2x1dGlvbl90aW1lLmgnLAotICAgICAgICAncGx1Z2luX2FycmF5LmNjJywKLSAgICAgICAgJ3BsdWdpbl9hcnJheS5oJywKLSAgICAgICAgJ3BvaW50ZXJfZXZlbnQuY2MnLAotICAgICAgICAncG9pbnRlcl9ldmVudC5oJywKLSAgICAgICAgJ3BvaW50ZXJfZXZlbnRfaW5pdC5oJywKLSAgICAgICAgJ3BvaW50ZXJfc3RhdGUuY2MnLAotICAgICAgICAncG9pbnRlcl9zdGF0ZS5oJywKLSAgICAgICAgJ3Byb2dyZXNzX2V2ZW50LmNjJywKLSAgICAgICAgJ3Byb2dyZXNzX2V2ZW50LmgnLAotICAgICAgICAncHNldWRvX2VsZW1lbnQuY2MnLAotICAgICAgICAncHNldWRvX2VsZW1lbnQuaCcsCi0gICAgICAgICdyZWdpc3RlcmVkX29ic2VydmVyLmgnLAotICAgICAgICAncmVnaXN0ZXJlZF9vYnNlcnZlcl9saXN0LmNjJywKLSAgICAgICAgJ3JlZ2lzdGVyZWRfb2JzZXJ2ZXJfbGlzdC5oJywKLSAgICAgICAgJ3J1bGVfbWF0Y2hpbmcuY2MnLAotICAgICAgICAncnVsZV9tYXRjaGluZy5oJywKLSAgICAgICAgJ3NjcmVlbi5oJywKLSAgICAgICAgJ3NjcmVlbnNob3QuY2MnLAotICAgICAgICAnc2NyZWVuc2hvdC5oJywKLSAgICAgICAgJ3NjcmVlbnNob3RfbWFuYWdlci5jYycsCi0gICAgICAgICdzY3JlZW5zaG90X21hbmFnZXIuaCcsCi0gICAgICAgICdzZWN1cml0eV9wb2xpY3lfdmlvbGF0aW9uX2V2ZW50LmNjJywKLSAgICAgICAgJ3NlY3VyaXR5X3BvbGljeV92aW9sYXRpb25fZXZlbnQuaCcsCi0gICAgICAgICdzZXJpYWxpemVyLmNjJywKLSAgICAgICAgJ3NlcmlhbGl6ZXIuaCcsCi0gICAgICAgICdzb3VyY2VfYnVmZmVyLmNjJywKLSAgICAgICAgJ3NvdXJjZV9idWZmZXIuaCcsCi0gICAgICAgICdzb3VyY2VfYnVmZmVyX2xpc3QuY2MnLAotICAgICAgICAnc291cmNlX2J1ZmZlcl9saXN0LmgnLAotICAgICAgICAnc3RvcmFnZS5jYycsCi0gICAgICAgICdzdG9yYWdlLmgnLAotICAgICAgICAnc3RvcmFnZV9hcmVhLmNjJywKLSAgICAgICAgJ3N0b3JhZ2VfYXJlYS5oJywKLSAgICAgICAgJ3N0b3JhZ2VfZXZlbnQuY2MnLAotICAgICAgICAnc3RvcmFnZV9ldmVudC5oJywKLSAgICAgICAgJ3Rlc3RfcnVubmVyLmNjJywKLSAgICAgICAgJ3Rlc3RfcnVubmVyLmgnLAotICAgICAgICAndGV4dC5jYycsCi0gICAgICAgICd0ZXh0LmgnLAotICAgICAgICAndGltZV9yYW5nZXMuY2MnLAotICAgICAgICAndGltZV9yYW5nZXMuaCcsCi0gICAgICAgICd0cmFja19iYXNlLmgnLAotICAgICAgICAndHJhY2tfZGVmYXVsdC5oJywKLSAgICAgICAgJ3RyYWNrX2RlZmF1bHRfbGlzdC5oJywKLSAgICAgICAgJ3RyYWNrX2V2ZW50LmgnLAotICAgICAgICAndHJhbnNpdGlvbl9ldmVudC5oJywKLSAgICAgICAgJ3VpX2V2ZW50LmNjJywKLSAgICAgICAgJ3VpX2V2ZW50LmgnLAotICAgICAgICAndWlfZXZlbnRfaW5pdC5oJywKLSAgICAgICAgJ3VpX2V2ZW50X3dpdGhfa2V5X3N0YXRlLmNjJywKLSAgICAgICAgJ3VpX2V2ZW50X3dpdGhfa2V5X3N0YXRlLmgnLAotICAgICAgICAndXJsLmNjJywKLSAgICAgICAgJ3VybC5oJywKLSAgICAgICAgJ3VybF9yZWdpc3RyeS5oJywKLSAgICAgICAgJ3VybF91dGlscy5jYycsCi0gICAgICAgICd1cmxfdXRpbHMuaCcsCi0gICAgICAgICd1c2VyX2FnZW50X3BsYXRmb3JtX2luZm8uaCcsCi0gICAgICAgICd2aWRlb190cmFjay5oJywKLSAgICAgICAgJ3ZpZGVvX3RyYWNrX2xpc3QuaCcsCi0gICAgICAgICd3aGVlbF9ldmVudC5jYycsCi0gICAgICAgICd3aGVlbF9ldmVudC5oJywKLSAgICAgICAgJ3doZWVsX2V2ZW50X2luaXQuaCcsCi0gICAgICAgICd3aW5kb3cuY2MnLAotICAgICAgICAnd2luZG93LmgnLAotICAgICAgICAnd2luZG93X3RpbWVycy5jYycsCi0gICAgICAgICd3aW5kb3dfdGltZXJzLmgnLAotICAgICAgICAneG1sX2RvY3VtZW50LmgnLAotICAgICAgICAneG1sX3NlcmlhbGl6ZXIuY2MnLAotICAgICAgICAneG1sX3NlcmlhbGl6ZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3NwL2NzcC5neXA6Y3NwJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jc3NvbS9jc3NvbS5neXA6Y3Nzb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb21fZXhjZXB0aW9uLmd5cDpkb21fZXhjZXB0aW9uJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sb2FkZXIvbG9hZGVyLmd5cDpsb2FkZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhL21lZGlhLmd5cDptZWRpYScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9jYXB0dXJlLmd5cDptZWRpYV9jYXB0dXJlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb24uZ3lwOm1lZGlhX3Nlc3Npb24nLAotICAgICAgICAjIEludGVyZmFjZSBsYXllciB0byBhdm9pZCBkaXJlY3RseSBkZXBlbmRpbmcgb24gbmV0d29yay4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9uZXR3b3JrX2JyaWRnZS9uZXR3b3JrX2JyaWRnZS5neXA6bmV0d29ya19icmlkZ2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwOnNjcmlwdCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXA6c3BlZWNoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zdG9yYWdlL3N0b3JhZ2UuZ3lwOnN0b3JhZ2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5neXA6c3lzdGVtX3dpbmRvdycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdWlfbmF2aWdhdGlvbi91aV9uYXZpZ2F0aW9uLmd5cDp1aV9uYXZpZ2F0aW9uJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93ZWJfYW5pbWF0aW9ucy93ZWJfYW5pbWF0aW9ucy5neXA6d2ViX2FuaW1hdGlvbnMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3dvcmtlci93b3JrZXIuZ3lwOndvcmtlcicsCi0gICAgICAgICc8KERFUFRIKS9uYi9uYi5neXA6bmInLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICBdLAotICAgICAgIyBUaGlzIHRhcmdldCBkb2Vzbid0IGdlbmVyYXRlIGFueSBoZWFkZXJzLCBidXQgaXQgZXhwb3NlcyBnZW5lcmF0ZWQKLSAgICAgICMgaGVhZGVyIGZpbGVzIChmb3IgaWRsIGRpY3Rpb25hcmllcykgdGhyb3VnaCB0aGlzIG1vZHVsZSdzIHB1YmxpYyBoZWFkZXIKLSAgICAgICMgZmlsZXMuIFNvIG1hcmsgdGhpcyB0YXJnZXQgYXMgYSBoYXJkIGRlcGVuZGVuY3kgdG8gZW5zdXJlIHRoYXQgYW55Ci0gICAgICAjIGRlcGVuZGVudCB0YXJnZXRzIHdhaXQgdW50aWwgdGhpcyB0YXJnZXQgKGFuZCBpdHMgaGFyZCBkZXBlbmRlbmNpZXMpIGFyZQotICAgICAgIyBidWlsdC4KLSAgICAgICdoYXJkX2RlcGVuZGVuY3knOiAxLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICMgQWRkaXRpb25hbGx5LCBlbnN1cmUgdGhhdCB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgZ2VuZXJhdGVkCi0gICAgICAgICMgaGVhZGVycyBhcmUgcHV0IG9uIHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciB0YXJnZXRzIHRoYXQgZGVwZW5kIG9uCi0gICAgICAgICMgdGhpcyBvbmUuCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzX2dlbi5neXA6Z2VuZXJhdGVkX3R5cGVzJywKLSAgICAgIF0sCi0gICAgICAnY29waWVzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpcikvbGljZW5zZXMnLAotICAgICAgICAgICdmaWxlcyc6IFsnPChzdGF0aWNfY29udGVudHNfc291cmNlX2RpcikvbGljZW5zZXMvcGxhdGZvcm0vPChjb2JhbHRfbGljZW5zZXNfcGxhdGZvcm0pL2xpY2Vuc2VzX2NvYmFsdC50eHQnXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnY29udGVudF9kZXBsb3lfc3ViZGlycyc6IFsgJ2xpY2Vuc2VzJyBdCi0gICAgICAgIH0KLSAgICAgIH0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5neXAgYi9jb2JhbHQvZG9tL2RvbV9leGNlcHRpb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDA5MjI3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkb21fZXhjZXB0aW9uJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZG9tX2V4Y2VwdGlvbi5jYycsCi0gICAgICAgICdkb21fZXhjZXB0aW9uLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c2NyaXB0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZG9tX3NldHRpbmdzLmNjIGIvY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuY2MKaW5kZXggNDliMmQ3MS4uNDNlNjE0ZCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuY2MKKysrIGIvY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuY2MKQEAgLTIyLDQwICsyMiwyOSBAQAogbmFtZXNwYWNlIGRvbSB7CiAKIERPTVNldHRpbmdzOjpET01TZXR0aW5ncygKLSAgICBjb25zdCBpbnQgbWF4X2RvbV9lbGVtZW50X2RlcHRoLCBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnksCi0gICAgbmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGUsCi0gICAgTWVkaWFTb3VyY2VSZWdpc3RyeSogbWVkaWFfc291cmNlX3JlZ2lzdHJ5LCBCbG9iOjpSZWdpc3RyeSogYmxvYl9yZWdpc3RyeSwKKyAgICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rcywgY29uc3QgaW50IG1heF9kb21fZWxlbWVudF9kZXB0aCwKKyAgICBNZWRpYVNvdXJjZVJlZ2lzdHJ5KiBtZWRpYV9zb3VyY2VfcmVnaXN0cnksCiAgICAgbWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlciogY2FuX3BsYXlfdHlwZV9oYW5kbGVyLAogICAgIGNvbnN0IG1lZGlhOjpEZWNvZGVyQnVmZmVyTWVtb3J5SW5mbyogZGVjb2Rlcl9idWZmZXJfbWVtb3J5X2luZm8sCi0gICAgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lKiBlbmdpbmUsCi0gICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudCogZ2xvYmFsX2Vudmlyb25tZW50LAotICAgIGNvbnN0IGJhc2U6OkRlYnVnZ2VySG9va3MmIGRlYnVnZ2VyX2hvb2tzLAogICAgIE11dGF0aW9uT2JzZXJ2ZXJUYXNrTWFuYWdlciogbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyLAotICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBtYXhfZG9tX2VsZW1lbnRfZGVwdGhfKG1heF9kb21fZWxlbWVudF9kZXB0aCksCisgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VySm9icyogc2VydmljZV93b3JrZXJfam9icywgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IEVudmlyb25tZW50U2V0dGluZ3MoZGVidWdnZXJfaG9va3MpLAorICAgICAgbWF4X2RvbV9lbGVtZW50X2RlcHRoXyhtYXhfZG9tX2VsZW1lbnRfZGVwdGgpLAogICAgICAgbWljcm9waG9uZV9vcHRpb25zXyhvcHRpb25zLm1pY3JvcGhvbmVfb3B0aW9ucyksCi0gICAgICBmZXRjaGVyX2ZhY3RvcnlfKGZldGNoZXJfZmFjdG9yeSksCi0gICAgICBuZXR3b3JrX21vZHVsZV8obmV0d29ya19tb2R1bGUpLAogICAgICAgbWVkaWFfc291cmNlX3JlZ2lzdHJ5XyhtZWRpYV9zb3VyY2VfcmVnaXN0cnkpLAotICAgICAgYmxvYl9yZWdpc3RyeV8oYmxvYl9yZWdpc3RyeSksCiAgICAgICBjYW5fcGxheV90eXBlX2hhbmRsZXJfKGNhbl9wbGF5X3R5cGVfaGFuZGxlciksCiAgICAgICBkZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mb18oZGVjb2Rlcl9idWZmZXJfbWVtb3J5X2luZm8pLAotICAgICAgamF2YXNjcmlwdF9lbmdpbmVfKGVuZ2luZSksCi0gICAgICBnbG9iYWxfZW52aXJvbm1lbnRfKGdsb2JhbF9lbnZpcm9ubWVudCksCi0gICAgICBkZWJ1Z2dlcl9ob29rc18oZGVidWdnZXJfaG9va3MpLAotICAgICAgbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyXyhtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXIpIHt9CisgICAgICBtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXJfKG11dGF0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlciksCisgICAgICBzZXJ2aWNlX3dvcmtlcl9qb2JzXyhzZXJ2aWNlX3dvcmtlcl9qb2JzKSB7fQogCiBET01TZXR0aW5nczo6fkRPTVNldHRpbmdzKCkge30KIAogdm9pZCBET01TZXR0aW5nczo6c2V0X3dpbmRvdyhjb25zdCBzY29wZWRfcmVmcHRyPFdpbmRvdz4mIHdpbmRvdykgewogICB3aW5kb3dfID0gd2luZG93OworICBzZXRfYmFzZV91cmwod2luZG93LT5kb2N1bWVudCgpLT51cmxfYXNfZ3VybCgpKTsKIH0KIHNjb3BlZF9yZWZwdHI8V2luZG93PiBET01TZXR0aW5nczo6d2luZG93KCkgY29uc3QgeyByZXR1cm4gd2luZG93XzsgfQogCi1jb25zdCBHVVJMJiBET01TZXR0aW5nczo6YmFzZV91cmwoKSBjb25zdCB7Ci0gIHJldHVybiB3aW5kb3coKS0+ZG9jdW1lbnQoKS0+dXJsX2FzX2d1cmwoKTsKLX0KLQogbG9hZGVyOjpPcmlnaW4gRE9NU2V0dGluZ3M6OmRvY3VtZW50X29yaWdpbigpIGNvbnN0IHsKICAgcmV0dXJuIHdpbmRvdygpLT5kb2N1bWVudCgpLT5sb2NhdGlvbigpLT5HZXRPcmlnaW5Bc09iamVjdCgpOwogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCBiL2NvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgKaW5kZXggZTVkOGI3OC4uNzVhNzRmNCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaAorKysgYi9jb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oCkBAIC0xNywxNCArMTcsMTQgQEAKIAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvZGVidWdnZXJfaG9va3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL211dGF0aW9uX29ic2VydmVyX3Rhc2tfbWFuYWdlci5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdXJsX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS91cmxfdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvY2FuX3BsYXlfdHlwZV9oYW5kbGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX21lbW9yeV9pbmZvLmgiCi0jaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9zcGVlY2gvbWljcm9waG9uZS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2pvYnMuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogLy8gQSBwYWNrYWdlIG9mIGdsb2JhbCBzdGF0ZSB0byBiZSBwYXNzZWQgYXJvdW5kIHRvIHNjcmlwdCBvYmplY3RzCiAvLyB0aGF0IGFzayBmb3IgaXQgaW4gdGhlaXIgSURMIGN1c3RvbSBhdHRyaWJ1dGVzLgotY2xhc3MgRE9NU2V0dGluZ3MgOiBwdWJsaWMgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzIHsKK2NsYXNzIERPTVNldHRpbmdzIDogcHVibGljIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyB7CiAgcHVibGljOgogICB0eXBlZGVmIFVybFJlZ2lzdHJ5PE1lZGlhU291cmNlPiBNZWRpYVNvdXJjZVJlZ2lzdHJ5OwogICAvLyBIb2xkIG9wdGlvbmFsIHNldHRpbmdzIGZvciBET01TZXR0aW5ncy4KQEAgLTUzLDE3ICs1MywxMyBAQAogICAgIHNwZWVjaDo6TWljcm9waG9uZTo6T3B0aW9ucyBtaWNyb3Bob25lX29wdGlvbnM7CiAgIH07CiAKLSAgRE9NU2V0dGluZ3MoY29uc3QgaW50IG1heF9kb21fZWxlbWVudF9kZXB0aCwKLSAgICAgICAgICAgICAgbG9hZGVyOjpGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5LAotICAgICAgICAgICAgICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSwKKyAgRE9NU2V0dGluZ3MoY29uc3QgYmFzZTo6RGVidWdnZXJIb29rcyYgZGVidWdnZXJfaG9va3MsCisgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZG9tX2VsZW1lbnRfZGVwdGgsCiAgICAgICAgICAgICAgIE1lZGlhU291cmNlUmVnaXN0cnkqIG1lZGlhX3NvdXJjZV9yZWdpc3RyeSwKLSAgICAgICAgICAgICAgQmxvYjo6UmVnaXN0cnkqIGJsb2JfcmVnaXN0cnksCiAgICAgICAgICAgICAgIG1lZGlhOjpDYW5QbGF5VHlwZUhhbmRsZXIqIGNhbl9wbGF5X3R5cGVfaGFuZGxlciwKICAgICAgICAgICAgICAgY29uc3QgbWVkaWE6OkRlY29kZXJCdWZmZXJNZW1vcnlJbmZvKiBkZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mbywKLSAgICAgICAgICAgICAgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lKiBlbmdpbmUsCi0gICAgICAgICAgICAgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudF9wcm94eSwKLSAgICAgICAgICAgICAgY29uc3QgYmFzZTo6RGVidWdnZXJIb29rcyYgZGVidWdnZXJfaG9va3MsCiAgICAgICAgICAgICAgIE11dGF0aW9uT2JzZXJ2ZXJUYXNrTWFuYWdlciogbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyLAorICAgICAgICAgICAgICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJKb2JzKiBzZXJ2aWNlX3dvcmtlcl9qb2JzLAogICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBvcHRpb25zID0gT3B0aW9ucygpKTsKICAgfkRPTVNldHRpbmdzKCkgb3ZlcnJpZGU7CiAKQEAgLTc1LDIwICs3MSw2IEBACiAgIHZvaWQgc2V0X3dpbmRvdyhjb25zdCBzY29wZWRfcmVmcHRyPFdpbmRvdz4mIHdpbmRvdyk7CiAgIHNjb3BlZF9yZWZwdHI8V2luZG93PiB3aW5kb3coKSBjb25zdDsKIAotICB2b2lkIHNldF9mZXRjaGVyX2ZhY3RvcnkobG9hZGVyOjpGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5KSB7Ci0gICAgZmV0Y2hlcl9mYWN0b3J5XyA9IGZldGNoZXJfZmFjdG9yeTsKLSAgfQotICBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBmZXRjaGVyX2ZhY3RvcnlfOyB9Ci0gIHZvaWQgc2V0X25ldHdvcmtfbW9kdWxlKG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlKSB7Ci0gICAgbmV0d29ya19tb2R1bGVfID0gbmV0d29ya19tb2R1bGU7Ci0gIH0KLSAgbmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGUoKSBjb25zdCB7IHJldHVybiBuZXR3b3JrX21vZHVsZV87IH0KLSAgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lKiBqYXZhc2NyaXB0X2VuZ2luZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gamF2YXNjcmlwdF9lbmdpbmVfOwotICB9Ci0gIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCgpIGNvbnN0IHsKLSAgICByZXR1cm4gZ2xvYmFsX2Vudmlyb25tZW50XzsKLSAgfQogICBNZWRpYVNvdXJjZVJlZ2lzdHJ5KiBtZWRpYV9zb3VyY2VfcmVnaXN0cnkoKSBjb25zdCB7CiAgICAgcmV0dXJuIG1lZGlhX3NvdXJjZV9yZWdpc3RyeV87CiAgIH0KQEAgLTExNCwzMyArOTYsMjUgQEAKICAgbWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlciogY2FuX3BsYXlfdHlwZV9oYW5kbGVyKCkgY29uc3QgewogICAgIHJldHVybiBjYW5fcGxheV90eXBlX2hhbmRsZXJfOwogICB9Ci0gIGNvbnN0IGJhc2U6OkRlYnVnZ2VySG9va3MmIGRlYnVnZ2VyX2hvb2tzKCkgY29uc3QgeyByZXR1cm4gZGVidWdnZXJfaG9va3NfOyB9CiAgIE11dGF0aW9uT2JzZXJ2ZXJUYXNrTWFuYWdlciogbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyKCkgY29uc3QgewogICAgIHJldHVybiBtdXRhdGlvbl9vYnNlcnZlcl90YXNrX21hbmFnZXJfOwogICB9Ci0gIEJsb2I6OlJlZ2lzdHJ5KiBibG9iX3JlZ2lzdHJ5KCkgY29uc3QgeyByZXR1cm4gYmxvYl9yZWdpc3RyeV87IH0KIAotICAvLyBBbiBhYnNvbHV0ZSBVUkwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIFVSTHMuCi0gIHZpcnR1YWwgY29uc3QgR1VSTCYgYmFzZV91cmwoKSBjb25zdDsKLQorICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJKb2JzKiBzZXJ2aWNlX3dvcmtlcl9qb2JzKCkgY29uc3QgeworICAgIHJldHVybiBzZXJ2aWNlX3dvcmtlcl9qb2JzXzsKKyAgfQogICAvLyBSZXR1cm4ncyBkb2N1bWVudCdzIG9yaWdpbi4KICAgbG9hZGVyOjpPcmlnaW4gZG9jdW1lbnRfb3JpZ2luKCkgY29uc3Q7CiAKICBwcml2YXRlOgogICBjb25zdCBpbnQgbWF4X2RvbV9lbGVtZW50X2RlcHRoXzsKICAgY29uc3Qgc3BlZWNoOjpNaWNyb3Bob25lOjpPcHRpb25zIG1pY3JvcGhvbmVfb3B0aW9uc187Ci0gIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeV87Ci0gIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlXzsKICAgc2NvcGVkX3JlZnB0cjxXaW5kb3c+IHdpbmRvd187CiAgIE1lZGlhU291cmNlUmVnaXN0cnkqIG1lZGlhX3NvdXJjZV9yZWdpc3RyeV87Ci0gIEJsb2I6OlJlZ2lzdHJ5KiBibG9iX3JlZ2lzdHJ5XzsKICAgbWVkaWE6OkNhblBsYXlUeXBlSGFuZGxlciogY2FuX3BsYXlfdHlwZV9oYW5kbGVyXzsKICAgY29uc3QgbWVkaWE6OkRlY29kZXJCdWZmZXJNZW1vcnlJbmZvKiBkZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mb187Ci0gIHNjcmlwdDo6SmF2YVNjcmlwdEVuZ2luZSogamF2YXNjcmlwdF9lbmdpbmVfOwotICBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50KiBnbG9iYWxfZW52aXJvbm1lbnRfOwotICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rc187CiAgIE11dGF0aW9uT2JzZXJ2ZXJUYXNrTWFuYWdlciogbXV0YXRpb25fb2JzZXJ2ZXJfdGFza19tYW5hZ2VyXzsKLQorICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJKb2JzKiBzZXJ2aWNlX3dvcmtlcl9qb2JzXzsKICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERPTVNldHRpbmdzKTsKIH07CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZG9tX3Rlc3QuZ3lwIGIvY29iYWx0L2RvbS9kb21fdGVzdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YWVkN2UuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2RvbS9kb21fdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAjIEZvciB0aGUgY29udmVuaWVuY2UsIHNvbWUgdGVzdHMgZGVwZW5kIG9uIGRvbV9wYXJzZXIuZ3lwOmRvbV9wYXJzZXIuIFRvCi0gICAgICAjIGF2b2lkIHRoZSBkZXBlbmRlbmN5IGN5Y2xlIGJldHdlZW4gdGhlIHR3byBneXAgZmlsZXMsIGRvbV90ZXN0IGlzCi0gICAgICAjIHNlcGFyYXRlZCBpbnRvIGl0cyBvd24gZ3lwIGZpbGUuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZG9tX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdibG9iX3Rlc3QuY2MnLAotICAgICAgICAnY29tbWVudF90ZXN0LmNjJywKLSAgICAgICAgJ2NyeXB0b190ZXN0LmNjJywKLSAgICAgICAgJ2NzcF9kZWxlZ2F0ZV90ZXN0LmNjJywKLSAgICAgICAgJ2N1c3RvbV9ldmVudF90ZXN0LmNjJywKLSAgICAgICAgJ2RvY3VtZW50X3Rlc3QuY2MnLAotICAgICAgICAnZG9jdW1lbnRfdHlwZV90ZXN0LmNjJywKLSAgICAgICAgJ2RvbV9pbXBsZW1lbnRhdGlvbl90ZXN0LmNjJywKLSAgICAgICAgJ2RvbV9wYXJzZXJfdGVzdC5jYycsCi0gICAgICAgICdkb21fcmVjdF9saXN0X3Rlc3QuY2MnLAotICAgICAgICAnZG9tX3N0cmluZ19tYXBfdGVzdC5jYycsCi0gICAgICAgICdkb21fdG9rZW5fbGlzdF90ZXN0LmNjJywKLSAgICAgICAgJ2VsZW1lbnRfdGVzdC5jYycsCi0gICAgICAgICdlcnJvcl9ldmVudF90ZXN0LmNjJywKLSAgICAgICAgJ2V2ZW50X3F1ZXVlX3Rlc3QuY2MnLAotICAgICAgICAnZXZlbnRfdGFyZ2V0X3Rlc3QuY2MnLAotICAgICAgICAnZXZlbnRfdGVzdC5jYycsCi0gICAgICAgICdmb250X2NhY2hlX3Rlc3QuY2MnLAotICAgICAgICAnaHRtbF9lbGVtZW50X2ZhY3RvcnlfdGVzdC5jYycsCi0gICAgICAgICdodG1sX2VsZW1lbnRfdGVzdC5jYycsCi0gICAgICAgICdodG1sX2xpbmtfZWxlbWVudF90ZXN0LmNjJywKLSAgICAgICAgJ2ludGVyc2VjdGlvbl9vYnNlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ2tleWJvYXJkX2V2ZW50X3Rlc3QuY2MnLAotICAgICAgICAnbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV90ZXN0LmNjJywKLSAgICAgICAgJ2xvY2F0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnbWVkaWFfcXVlcnlfbGlzdF90ZXN0LmNjJywKLSAgICAgICAgJ211dGF0aW9uX29ic2VydmVyX3Rlc3QuY2MnLAotICAgICAgICAnbmFtZWRfbm9kZV9tYXBfdGVzdC5jYycsCi0gICAgICAgICduYXZpZ2F0b3JfbGljZW5zZXNfdGVzdC5jYycsCi0gICAgICAgICdub2RlX2Rpc3BhdGNoX2V2ZW50X3Rlc3QuY2MnLAotICAgICAgICAnbm9kZV9saXN0X2xpdmVfdGVzdC5jYycsCi0gICAgICAgICdub2RlX2xpc3RfdGVzdC5jYycsCi0gICAgICAgICdub2RlX3Rlc3QuY2MnLAotICAgICAgICAnb25fc2NyZWVuX2tleWJvYXJkX3Rlc3QuY2MnLAotICAgICAgICAnYXBwbGljYXRpb25fbGlmZWN5Y2xlX3N0YXRlX3Rlc3QuY2MnLAotICAgICAgICAncGVyZm9ybWFuY2Vfb2JzZXJ2ZXJfdGVzdC5jYycsCi0gICAgICAgICdwZXJmb3JtYW5jZV90ZXN0LmNjJywKLSAgICAgICAgJ3J1bGVfbWF0Y2hpbmdfdGVzdC5jYycsCi0gICAgICAgICdzY3JlZW5fdGVzdC5jYycsCi0gICAgICAgICdzZXJpYWxpemVyX3Rlc3QuY2MnLAotICAgICAgICAnc3RvcmFnZV9hcmVhX3Rlc3QuY2MnLAotICAgICAgICAndGV4dF90ZXN0LmNjJywKLSAgICAgICAgJ3RpbWVfcmFuZ2VzX3Rlc3QuY2MnLAotICAgICAgICAndXJsX3V0aWxzX3Rlc3QuY2MnLAotICAgICAgICAndXNlcl9hZ2VudF9kYXRhX3Rlc3QuY2MnLAotICAgICAgICAnd2luZG93X3Rlc3QuY2MnLAotICAgICAgICAnd2luZG93X3RpbWVyc190ZXN0LmNjJywKLSAgICAgICAgJ3htbF9kb2N1bWVudF90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3NzX3BhcnNlci9jc3NfcGFyc2VyLmd5cDpjc3NfcGFyc2VyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS90ZXN0aW5nL2RvbV90ZXN0aW5nLmd5cDpkb21fdGVzdGluZycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbG9hZGVyL2xvYWRlci5neXA6bG9hZGVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvc2NyaXB0Lmd5cDpzY3JpcHQnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2RvbV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdkb21fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdkb21fdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2VtZS9tZWRpYV9rZXlfc2Vzc2lvbi5jYyBiL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleV9zZXNzaW9uLmNjCmluZGV4IDNlY2EwMzEuLmJmNWMxNmIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleV9zZXNzaW9uLmNjCisrKyBiL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleV9zZXNzaW9uLmNjCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lbWUvZW1lX2hlbHBlcnMuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2VtZS9tZWRpYV9rZXlfbWVzc2FnZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZW1lL21lZGlhX2tleV9tZXNzYWdlX2V2ZW50X2luaXQuaCIKQEAgLTI3LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2FycmF5X2J1ZmZlci5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvYXJyYXlfYnVmZmVyX3ZpZXcuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZV9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBkb20gewpAQCAtMjMwLDkgKzIzMSwxMCBAQAogICAgIFNiRHJtU2Vzc2lvblJlcXVlc3RUeXBlIHR5cGUsIHN0ZDo6dW5pcXVlX3B0cjx1aW50OFtdPiBtZXNzYWdlLAogICAgIGludCBtZXNzYWdlX3NpemUpIHsKICAgRENIRUNLKHNldHRpbmdzKTsKLSAgRE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKLSAgYXV0byogZ2xvYmFsX2Vudmlyb25tZW50ID0gZG9tX3NldHRpbmdzLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKKyAgYXV0byogZ2xvYmFsX2Vudmlyb25tZW50ID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKICAgRENIRUNLKGdsb2JhbF9lbnZpcm9ubWVudCk7CiAgIE1lZGlhS2V5TWVzc2FnZUV2ZW50SW5pdCBtZWRpYV9rZXlfbWVzc2FnZV9ldmVudF9pbml0OwogICAvLyAxMC45LjQuIElmIGEgbGljZW5zZSByZXF1ZXN0IGZvciB0aGUgcmVxdWVzdGVkIGxpY2Vuc2UgdHlwZSBjYW4gYmUKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleV9zdGF0dXNfbWFwLmNjIGIvY29iYWx0L2RvbS9lbWUvbWVkaWFfa2V5X3N0YXR1c19tYXAuY2MKaW5kZXggODhiMjFjMi4uMzQyM2JjZSAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9lbWUvbWVkaWFfa2V5X3N0YXR1c19tYXAuY2MKKysrIGIvY29iYWx0L2RvbS9lbWUvbWVkaWFfa2V5X3N0YXR1c19tYXAuY2MKQEAgLTE2LDkgKzE2LDEwIEBACiAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9hcnJheV9idWZmZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2FycmF5X2J1ZmZlcl92aWV3LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBkb20gewpAQCAtNjEsMTEgKzYyLDEzIEBACiBCdWZmZXJTb3VyY2UgQ29udmVydFN0cmluZ1RvQnVmZmVyU291cmNlKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKICAgRENIRUNLKHNldHRpbmdzKTsKLSAgRE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oc2V0dGluZ3MpOwotICBEQ0hFQ0soZG9tX3NldHRpbmdzLT5nbG9iYWxfZW52aXJvbm1lbnQoKSk7Ci0gIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6QXJyYXlCdWZmZXI+IGFycmF5X2J1ZmZlciA9IHNjcmlwdDo6QXJyYXlCdWZmZXI6Ok5ldygKLSAgICAgIGRvbV9zZXR0aW5ncy0+Z2xvYmFsX2Vudmlyb25tZW50KCksIHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOworICBhdXRvKiBnbG9iYWxfZW52aXJvbm1lbnQgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAtPmdsb2JhbF9lbnZpcm9ubWVudCgpOworICBEQ0hFQ0soZ2xvYmFsX2Vudmlyb25tZW50KTsKKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlcj4gYXJyYXlfYnVmZmVyID0KKyAgICAgIHNjcmlwdDo6QXJyYXlCdWZmZXI6Ok5ldyhnbG9iYWxfZW52aXJvbm1lbnQsIHN0ci5kYXRhKCksIHN0ci5zaXplKCkpOwogICByZXR1cm4gQnVmZmVyU291cmNlKGFycmF5X2J1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleXMuY2MgYi9jb2JhbHQvZG9tL2VtZS9tZWRpYV9rZXlzLmNjCmluZGV4IDY2Mjg2YjIuLmMyOWMzMDAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vZW1lL21lZGlhX2tleXMuY2MKKysrIGIvY29iYWx0L2RvbS9lbWUvbWVkaWFfa2V5cy5jYwpAQCAtMTcsOCArMTcsMTAgQEAKICNpbmNsdWRlICJiYXNlL2JpbmQuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lbWUvZW1lX2hlbHBlcnMuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2VtZS9tZWRpYV9rZXlfc2Vzc2lvbi5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBkb20gewpAQCAtMTAwLDggKzEwMiw5IEBACiAgICAgc2NyaXB0OjpFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlKSB7CiAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IG1ldHJpY3M7CiAgIGlmIChkcm1fc3lzdGVtXy0+R2V0TWV0cmljcygmbWV0cmljcykpIHsKLSAgICByZXR1cm4gc2NyaXB0OjpVaW50OEFycmF5OjpOZXcoZG9tX3NldHRpbmdzXy0+Z2xvYmFsX2Vudmlyb25tZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MuZGF0YSgpLCBtZXRyaWNzLnNpemUoKSk7CisgICAgcmV0dXJuIHNjcmlwdDo6VWludDhBcnJheTo6TmV3KAorICAgICAgICBkb21fc2V0dGluZ3NfLT5jb250ZXh0KCktPmdsb2JhbF9lbnZpcm9ubWVudCgpLCBtZXRyaWNzLmRhdGEoKSwKKyAgICAgICAgbWV0cmljcy5zaXplKCkpOwogICB9CiAgIERPTUV4Y2VwdGlvbjo6UmFpc2UoRE9NRXhjZXB0aW9uOjprTm90U3VwcG9ydGVkRXJyLCBleGNlcHRpb25fc3RhdGUpOwogICByZXR1cm4gc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpVaW50OEFycmF5PigpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9ldmVudF90YXJnZXQuY2MgYi9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5jYwppbmRleCBlNjYzYmIxLi5iZDVhYTFjIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5jYworKysgYi9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5jYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImJhc2UvYmluZC5oIgogI2luY2x1ZGUgImJhc2UvYmluZF9oZWxwZXJzLmgiCkBAIC0yMyw4ICsyNCw4IEBACiAjaW5jbHVkZSAiYmFzZS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3BvbHltb3JwaGljX2Rvd25jYXN0LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2dsb2JhbF9zdGF0cy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQveGhyL3htbF9odHRwX3JlcXVlc3RfZXZlbnRfdGFyZ2V0LmgiCiAjaW5jbHVkZSAibmIvbWVtb3J5X3Njb3BlLmgiCiAKQEAgLTM0LDggKzM1LDcgQEAKIEV2ZW50VGFyZ2V0OjpFdmVudFRhcmdldCgKICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAogICAgIFVucGFja09uRXJyb3JFdmVudHNCb29sIG9uZXJyb3JfZXZlbnRfcGFyYW1ldGVyX2hhbmRsaW5nKQotICAgIDogZGVidWdnZXJfaG9va3NfKAotICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oc2V0dGluZ3MpLT5kZWJ1Z2dlcl9ob29rcygpKSwKKyAgICA6IGVudmlyb25tZW50X3NldHRpbmdzXyhzZXR0aW5ncyksCiAgICAgICB1bnBhY2tfb25lcnJvcl9ldmVudHNfKG9uZXJyb3JfZXZlbnRfcGFyYW1ldGVyX2hhbmRsaW5nID09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVbnBhY2tPbkVycm9yRXZlbnRzKSB7fQogCkBAIC02Niw3ICs2Niw3IEBACiAgIGZvciAoRXZlbnRMaXN0ZW5lckluZm9zOjppdGVyYXRvciBpdGVyID0gZXZlbnRfbGlzdGVuZXJfaW5mb3NfLmJlZ2luKCk7CiAgICAgICAgaXRlciAhPSBldmVudF9saXN0ZW5lcl9pbmZvc18uZW5kKCk7ICsraXRlcikgewogICAgIGlmICgoKml0ZXIpLT5FcXVhbFRvKGxpc3RlbmVyX2luZm8pKSB7Ci0gICAgICBkZWJ1Z2dlcl9ob29rc18uQXN5bmNUYXNrQ2FuY2VsZWQoKCppdGVyKS0+dGFzaygpKTsKKyAgICAgIGRlYnVnZ2VyX2hvb2tzKCkuQXN5bmNUYXNrQ2FuY2VsZWQoKCppdGVyKS0+dGFzaygpKTsKICAgICAgIGV2ZW50X2xpc3RlbmVyX2luZm9zXy5lcmFzZShpdGVyKTsKICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MSw3ICs5MSw3IEBACiAgIERDSEVDSyghZXZlbnQtPklzQmVpbmdEaXNwYXRjaGVkKCkpOwogICBEQ0hFQ0soZXZlbnQtPmluaXRpYWxpemVkX2ZsYWcoKSk7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpkb20iLCAiRXZlbnRUYXJnZXQ6OkRpc3BhdGNoRXZlbnQiLCAiZXZlbnQiLAotICAgICAgICAgICAgICAgZXZlbnQtPnR5cGUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgIFRSQUNFX1NUUl9DT1BZKGV2ZW50LT50eXBlKCkuY19zdHIoKSkpOwogICBpZiAoIWV2ZW50IHx8IGV2ZW50LT5Jc0JlaW5nRGlzcGF0Y2hlZCgpIHx8ICFldmVudC0+aW5pdGlhbGl6ZWRfZmxhZygpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0yNTIsNyArMjUyLDcgQEAKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIGJhc2U6OlNjb3BlZEFzeW5jVGFzayBhc3luY190YXNrKGRlYnVnZ2VyX2hvb2tzXywgKCppdGVyKS0+dGFzaygpKTsKKyAgICBiYXNlOjpTY29wZWRBc3luY1Rhc2sgYXN5bmNfdGFzayhkZWJ1Z2dlcl9ob29rcygpLCAoKml0ZXIpLT50YXNrKCkpOwogICAgICgqaXRlciktPkhhbmRsZUV2ZW50KGV2ZW50KTsKICAgfQogCkBAIC0yNzMsNyArMjczLDcgQEAKICAgICBmb3IgKEV2ZW50TGlzdGVuZXJJbmZvczo6aXRlcmF0b3IgaXRlciA9IGV2ZW50X2xpc3RlbmVyX2luZm9zXy5iZWdpbigpOwogICAgICAgICAgaXRlciAhPSBldmVudF9saXN0ZW5lcl9pbmZvc18uZW5kKCk7ICsraXRlcikgewogICAgICAgaWYgKCgqaXRlciktPmlzX2F0dHJpYnV0ZSgpICYmICgqaXRlciktPnR5cGUoKSA9PSBsaXN0ZW5lcl9pbmZvLT50eXBlKCkpIHsKLSAgICAgICAgZGVidWdnZXJfaG9va3NfLkFzeW5jVGFza0NhbmNlbGVkKCgqaXRlciktPnRhc2soKSk7CisgICAgICAgIGRlYnVnZ2VyX2hvb2tzKCkuQXN5bmNUYXNrQ2FuY2VsZWQoKCppdGVyKS0+dGFzaygpKTsKICAgICAgICAgZXZlbnRfbGlzdGVuZXJfaW5mb3NfLmVyYXNlKGl0ZXIpOwogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgIH0KICAgfQogCi0gIGRlYnVnZ2VyX2hvb2tzXy5Bc3luY1Rhc2tTY2hlZHVsZWQoCisgIGRlYnVnZ2VyX2hvb2tzKCkuQXN5bmNUYXNrU2NoZWR1bGVkKAogICAgICAgbGlzdGVuZXJfaW5mby0+dGFzaygpLCBsaXN0ZW5lcl9pbmZvLT50eXBlKCkuY19zdHIoKSwKICAgICAgIGJhc2U6OkRlYnVnZ2VySG9va3M6OkFzeW5jVGFza0ZyZXF1ZW5jeTo6a1JlY3VycmluZyk7CiAgIGV2ZW50X2xpc3RlbmVyX2luZm9zXy5wdXNoX2JhY2soc3RkOjptb3ZlKGxpc3RlbmVyX2luZm8pKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmggYi9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oCmluZGV4IDdhY2E3ZTcuLjdkYzVmZWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgKKysrIGIvY29iYWx0L2RvbS9ldmVudF90YXJnZXQuaApAQCAtMTc5LDcgKzE3OSw2IEBACiAgIH0KIAogICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9ubG9hZCgpIHsKLSAgICBETE9HKElORk8pIDw8ICJvbmxvYWQgY2FsbGVkIjsKICAgICByZXR1cm4gR2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OmxvYWQoKSk7CiAgIH0KICAgdm9pZCBzZXRfb25sb2FkKGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYgZXZlbnRfbGlzdGVuZXIpIHsKQEAgLTM1OCw3ICszNTcsNiBAQAogICB9CiAKICAgY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKiBvbnByb2dyZXNzKCkgewotICAgIERMT0coSU5GTykgPDwgIm9ucHJvZ3Jlc3MgY2FsbGVkIjsKICAgICByZXR1cm4gR2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OnByb2dyZXNzKCkpOwogICB9CiAgIHZvaWQgc2V0X29ucHJvZ3Jlc3MoY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJiBldmVudF9saXN0ZW5lcikgewpAQCAtNDgzLDcgKzQ4MSwxMiBAQAogICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoRXZlbnRUYXJnZXQpOwogICB2b2lkIFRyYWNlTWVtYmVycyhzY3JpcHQ6OlRyYWNlciogdHJhY2VyKSBvdmVycmlkZTsKIAotICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rcygpIHsgcmV0dXJuIGRlYnVnZ2VyX2hvb2tzXzsgfQorICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rcygpIGNvbnN0IHsKKyAgICByZXR1cm4gZW52aXJvbm1lbnRfc2V0dGluZ3NfLT5kZWJ1Z2dlcl9ob29rcygpOworICB9CisgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3MoKSBjb25zdCB7CisgICAgcmV0dXJuIGVudmlyb25tZW50X3NldHRpbmdzXzsKKyAgfQogCiAgcHJpdmF0ZToKICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRUYXJnZXRMaXN0ZW5lckluZm8+PgpAQCAtNDk5LDcgKzUwMiw3IEBACiAKICAgRXZlbnRMaXN0ZW5lckluZm9zIGV2ZW50X2xpc3RlbmVyX2luZm9zXzsKIAotICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rc187CisgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3NfOwogCiAgIC8vIFRyYWNrcyB3aGV0aGVyIHRoaXMgY3VycmVudCBldmVudCBsaXN0ZW5lciBzaG91bGQgdW5wYWNrIHRoZSBvbmVycm9yCiAgIC8vIGV2ZW50IG9iamVjdCB3aGVuIGNhbGxpbmcgaXRzIGNhbGxiYWNrLiAgVGhpcyBpcyBuZWVkZWQgdG8gaW1wbGVtZW50CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldF90ZXN0LmNjIGIvY29iYWx0L2RvbS9ldmVudF90YXJnZXRfdGVzdC5jYwppbmRleCA5NDE5MmYzLi42OGViMjg0IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2V2ZW50X3RhcmdldF90ZXN0LmNjCisrKyBiL2NvYmFsdC9kb20vZXZlbnRfdGFyZ2V0X3Rlc3QuY2MKQEAgLTE4LDEyICsxOCwxMiBAQAogCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9leGNlcHRpb24uaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZ2xvYmFsX3N0YXRzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS90ZXN0aW5nL21vY2tfZXZlbnRfbGlzdGVuZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3Rlc3RpbmcvZmFrZV9zY3JpcHRfdmFsdWUuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3Rlc3RpbmcvbW9ja19leGNlcHRpb25fc3RhdGUuaCIKICNpbmNsdWRlICJjb2JhbHQvdGVzdC9tb2NrX2RlYnVnZ2VyX2hvb2tzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTQ5LDEwICs0OSw3IEBACiAKIGNsYXNzIEV2ZW50VGFyZ2V0VGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewogIHByb3RlY3RlZDoKLSAgRXZlbnRUYXJnZXRUZXN0KCkKLSAgICAgIDogZW52aXJvbm1lbnRfc2V0dGluZ3NfKDAsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBkZWJ1Z2dlcl9ob29rc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBET01TZXR0aW5nczo6T3B0aW9ucygpKSB7CisgIEV2ZW50VGFyZ2V0VGVzdCgpIDogZW52aXJvbm1lbnRfc2V0dGluZ3NfKGRlYnVnZ2VyX2hvb2tzXykgewogICAgIEVYUEVDVF9UUlVFKEdsb2JhbFN0YXRzOjpHZXRJbnN0YW5jZSgpLT5DaGVja05vTGVha3MoKSk7CiAgIH0KICAgfkV2ZW50VGFyZ2V0VGVzdCgpIG92ZXJyaWRlIHsKQEAgLTYwLDcgKzU3LDcgQEAKICAgfQogCiAgIFN0cmljdE1vY2s8dGVzdDo6TW9ja0RlYnVnZ2VySG9va3M+IGRlYnVnZ2VyX2hvb2tzXzsKLSAgRE9NU2V0dGluZ3MgZW52aXJvbm1lbnRfc2V0dGluZ3NfOworICB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MgZW52aXJvbm1lbnRfc2V0dGluZ3NfOwogfTsKIAogYmFzZTo6T3B0aW9uYWw8Ym9vbD4gRGlzcGF0Y2hFdmVudE9uQ3VycmVudFRhcmdldCgKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X2NvbnRleHQuaCBiL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X2NvbnRleHQuaAppbmRleCBhYTRkZTk5Li5jYjQxODNkIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2h0bWxfZWxlbWVudF9jb250ZXh0LmgKKysrIGIvY29iYWx0L2RvbS9odG1sX2VsZW1lbnRfY29udGV4dC5oCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiY29iYWx0L2RvbS9hcHBsaWNhdGlvbl9saWZlY3ljbGVfc3RhdGUuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zdGF0X3RyYWNrZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vdXJsX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9wZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vdXJsX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuaCIKICNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL2ZvbnQvcmVtb3RlX3R5cGVmYWNlX2NhY2hlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9pbWFnZS9hbmltYXRlZF9pbWFnZV90cmFja2VyLmgiCkBAIC03NSw4ICs3NSw3IEBACiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm9udF9sYW5ndWFnZV9zY3JpcHQsCiAgICAgICBiYXNlOjpBcHBsaWNhdGlvblN0YXRlIGluaXRpYWxfYXBwbGljYXRpb25fc3RhdGUsCiAgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50KiBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0LAotICAgICAgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlLAotICAgICAgYm9vbCBlbmFibGVfaW5saW5lX3NjcmlwdF93YXJuaW5ncyA9IGZhbHNlLAorICAgICAgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlLCBib29sIGVuYWJsZV9pbmxpbmVfc2NyaXB0X3dhcm5pbmdzID0gZmFsc2UsCiAgICAgICBmbG9hdCB2aWRlb19wbGF5YmFja19yYXRlX211bHRpcGxpZXIgPSAxLjApOwogICB+SFRNTEVsZW1lbnRDb250ZXh0KCk7CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X2ZhY3RvcnkuY2MgYi9jb2JhbHQvZG9tL2h0bWxfZWxlbWVudF9mYWN0b3J5LmNjCmluZGV4IGFkNDdlOGQuLjEyY2MyOTEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X2ZhY3RvcnkuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX2VsZW1lbnRfZmFjdG9yeS5jYwpAQCAtMTc5LDYgKzE3OSwxMSBAQAogICB9IGVsc2UgewogICAgIExPR19JRihXQVJOSU5HLCAhSXNWYWxpZEN1c3RvbUVsZW1lbnROYW1lKHRhZ19uYW1lKSkKICAgICAgICAgPDwgIlVua25vd24gSFRNTCBlbGVtZW50OiA8IiA8PCB0YWdfbmFtZSA8PCAiPi4iOworCisgICAgLy8gQ2hlY2sgc29tZSBjb21tb24gdGFncyB0aGF0IHNob3VsZCBhbHdheXMgYmUgZm91bmQuCisgICAgRENIRUNLKHRhZ19uYW1lICE9ICJzY3JpcHQiKTsKKyAgICBEQ0hFQ0sodGFnX25hbWUgIT0gImRpdiIpOworICAgIERDSEVDSyh0YWdfbmFtZSAhPSAiaHRtbCIpOwogICAgIHJldHVybiBuZXcgSFRNTFVua25vd25FbGVtZW50KGRvY3VtZW50LCB0YWdfbmFtZSk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X3Rlc3QuY2MgYi9jb2JhbHQvZG9tL2h0bWxfZWxlbWVudF90ZXN0LmNjCmluZGV4IDcxNjFkNGYuLmU4OTM2ZjkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vaHRtbF9lbGVtZW50X3Rlc3QuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX2VsZW1lbnRfdGVzdC5jYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9jc3NvbS9jc3NfY29tcHV0ZWRfc3R5bGVfZGF0YS5oIgogI2luY2x1ZGUgImNvYmFsdC9jc3NvbS9jc3NfZGVjbGFyZWRfc3R5bGVfZGF0YS5oIgogI2luY2x1ZGUgImNvYmFsdC9jc3NvbS9rZXl3b3JkX3ZhbHVlLmgiCi0jaW5jbHVkZSAiY29iYWx0L2Nzc29tL3Rlc3RpbmcvbW9ja19jc3NfcGFyc2VyLmgiCisjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3Rlc3RpbmcvbW9ja19jc3NfcGFyc2VyLmgiICAvLyBub2duY2hlY2sKICNpbmNsdWRlICJjb2JhbHQvY3Nzb20vdmlld3BvcnRfc2l6ZS5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9jdW1lbnQuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9yZWN0X2xpc3QuaCIKQEAgLTUzLDkgKzUzLDcgQEAKIFZpZXdwb3J0U2l6ZSBrVmlld1NpemUoMzIwLCAyNDApOwogCiAvLyBVc2VmdWwgZm9yIHVzaW5nIGJhc2U6OkJpbmQoKSBhbG9uZyB3aXRoIEdNb2NrIGFjdGlvbnMuCi1BQ1RJT05fUChJbnZva2VDYWxsYmFjazAsIGNhbGxiYWNrKSB7Ci0gIGNhbGxiYWNrLlJ1bigpOwotfQorQUNUSU9OX1AoSW52b2tlQ2FsbGJhY2swLCBjYWxsYmFjaykgeyBjYWxsYmFjay5SdW4oKTsgfQogCiBjb25zdCBjaGFyIGtGb29CYXJEZWNsYXJhdGlvblN0cmluZ1tdID0gImZvbzogYmFyOyI7CiBjb25zdCBjaGFyIGtEaXNwbGF5SW5saW5lRGVjbGFyYXRpb25TdHJpbmdbXSA9ICJkaXNwbGF5OiBpbmxpbmU7IjsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9saW5rX2VsZW1lbnQuY2MgYi9jb2JhbHQvZG9tL2h0bWxfbGlua19lbGVtZW50LmNjCmluZGV4IDhiY2UyMzYuLjkwNjgyMmQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vaHRtbF9saW5rX2VsZW1lbnQuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX2xpbmtfZWxlbWVudC5jYwpAQCAtMjA5LDkgKzIwOSwxOSBAQAogICBsb2FkZXI6Ok9yaWdpbiBvcmlnaW4gPSBkb2N1bWVudC0+bG9jYXRpb24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkb2N1bWVudC0+bG9jYXRpb24oKS0+R2V0T3JpZ2luQXNPYmplY3QoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2FkZXI6Ok9yaWdpbigpOworICBkaXNrX2NhY2hlOjpSZXNvdXJjZVR5cGUgdHlwZTsKKyAgaWYgKHJlbCgpID09ICJzdHlsZXNoZWV0IikgeworICAgIHR5cGUgPSBkaXNrX2NhY2hlOjprQ1NTOworICB9IGVsc2UgaWYgKElzVmFsaWRTcGxhc2hTY3JlZW5Gb3JtYXQocmVsKCkpKSB7CisgICAgdHlwZSA9IGRpc2tfY2FjaGU6OmtTcGxhc2hTY3JlZW47CisgIH0gZWxzZSB7CisgICAgTE9HKFdBUk5JTkcpIDw8ICI8bGluaz4gaGFzIHVuc3VwcG9ydGVkIHJlbCB2YWx1ZTogIiA8PCByZWwoKSA8PCAiLiI7CisgICAgTk9USU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm47CisgIH0KIAogICBsb2FkZXJfID0gaHRtbF9lbGVtZW50X2NvbnRleHQoKS0+bG9hZGVyX2ZhY3RvcnkoKS0+Q3JlYXRlTGlua0xvYWRlcigKLSAgICAgIGFic29sdXRlX3VybF8sIG9yaWdpbiwgY3NwX2NhbGxiYWNrLCByZXF1ZXN0X21vZGVfLAorICAgICAgYWJzb2x1dGVfdXJsXywgb3JpZ2luLCBjc3BfY2FsbGJhY2ssIHJlcXVlc3RfbW9kZV8sIHR5cGUsCiAgICAgICBiYXNlOjpCaW5kKCZIVE1MTGlua0VsZW1lbnQ6Ok9uQ29udGVudFByb2R1Y2VkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKICAgICAgIGJhc2U6OkJpbmQoJkhUTUxMaW5rRWxlbWVudDo6T25Mb2FkaW5nQ29tcGxldGUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9saW5rX2VsZW1lbnRfdGVzdC5jYyBiL2NvYmFsdC9kb20vaHRtbF9saW5rX2VsZW1lbnRfdGVzdC5jYwppbmRleCBmNDg3NTkzLi4wY2E1YmZhIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2h0bWxfbGlua19lbGVtZW50X3Rlc3QuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX2xpbmtfZWxlbWVudF90ZXN0LmNjCkBAIC0xNCw3ICsxNCw3IEBACiAKICNpbmNsdWRlICJjb2JhbHQvZG9tL2h0bWxfbGlua19lbGVtZW50LmgiCiAjaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCi0jaW5jbHVkZSAiY29iYWx0L2Nzc29tL3Rlc3RpbmcvbW9ja19jc3NfcGFyc2VyLmgiCisjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3Rlc3RpbmcvbW9ja19jc3NfcGFyc2VyLmgiICAvLyBub2duY2hlY2sKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvY3VtZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc3RhdF90cmFja2VyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS90ZXN0aW5nL3N0dWJfZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9tZWRpYV9lbGVtZW50LmNjIGIvY29iYWx0L2RvbS9odG1sX21lZGlhX2VsZW1lbnQuY2MKaW5kZXggODRlZGI5NC4uNzUzOWQ5MSAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9odG1sX21lZGlhX2VsZW1lbnQuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX21lZGlhX2VsZW1lbnQuY2MKQEAgLTQ1LDEzICs0NSwxMSBAQAogCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lbWUvbWVkaWFfZW5jcnlwdGVkX2V2ZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lbWUvbWVkaWFfZW5jcnlwdGVkX2V2ZW50X2luaXQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgZG9tIHsKIAogdXNpbmcgbWVkaWE6OkJ1ZmZlcmVkRGF0YVNvdXJjZTsKLXVzaW5nIG1lZGlhOjpSYW5nZXM7CiB1c2luZyBtZWRpYTo6V2ViTWVkaWFQbGF5ZXI7CiAKIGNvbnN0IGNoYXIgSFRNTE1lZGlhRWxlbWVudDo6a01lZGlhU291cmNlVXJsUHJvdG9jb2xbXSA9ICJibG9iIjsKQEAgLTIxOCwxNyArMjE2LDggQEAKICAgICByZXR1cm4gYnVmZmVyZWQ7CiAgIH0KIAotICBjb25zdCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgcGxheWVyX2J1ZmZlcmVkID0KLSAgICAgIHBsYXllcl8tPkdldEJ1ZmZlcmVkVGltZVJhbmdlcygpOwotCi0gIE1MT0coKSA8PCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iOwotICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ocGxheWVyX2J1ZmZlcmVkLnNpemUoKSk7ICsraSkgewotICAgIE1MT0coKSA8PCBwbGF5ZXJfYnVmZmVyZWQuc3RhcnQoaSkuSW5TZWNvbmRzRigpIDw8ICIgLSAiCi0gICAgICAgICAgIDw8IHBsYXllcl9idWZmZXJlZC5lbmQoaSkuSW5TZWNvbmRzRigpOwotICAgIGJ1ZmZlcmVkLT5BZGQocGxheWVyX2J1ZmZlcmVkLnN0YXJ0KGkpLkluU2Vjb25kc0YoKSwKLSAgICAgICAgICAgICAgICAgIHBsYXllcl9idWZmZXJlZC5lbmQoaSkuSW5TZWNvbmRzRigpKTsKLSAgfQotCisgIHBsYXllcl8tPlVwZGF0ZUJ1ZmZlcmVkVGltZVJhbmdlcygKKyAgICAgIFsmXShmbG9hdCBzdGFydCwgZmxvYXQgZW5kKSB7IGJ1ZmZlcmVkLT5BZGQoc3RhcnQsIGVuZCk7IH0pOwogICByZXR1cm4gYnVmZmVyZWQ7CiB9CiAKQEAgLTI3MSw4ICsyNjAsNiBAQAogICAgICAgTk9UUkVBQ0hFRCgpOwogICB9CiAgIE1MT0coKSA8PCAiKCIgPDwgbWltZV90eXBlIDw8ICIsICIgPDwga2V5X3N5c3RlbSA8PCAiKSA9PiAiIDw8IHJlc3VsdDsKLSAgTE9HKElORk8pIDw8ICJIVE1MTWVkaWFFbGVtZW50OjpjYW5QbGF5VHlwZSgiIDw8IG1pbWVfdHlwZSA8PCAiLCAiCi0gICAgICAgICAgICA8PCBrZXlfc3lzdGVtIDw8ICIpIC0+ICIgPDwgcmVzdWx0OwogICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjgxLDM2ICsxNjY4LDEyIEBACiAgIHJldHVybiBtYXBfdG9fbWVzaF9maWx0ZXI7CiB9CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIEluaXRpYWxpemF0aW9uIGRhdGEgdHlwZXMgYXJlIGRlZmluZWQgaW4KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbWUtaW5pdGRhdGEtcmVnaXN0cnkvI3JlZ2lzdHJ5Lgotc3RkOjpzdHJpbmcgVG9Jbml0RGF0YVR5cGVTdHJpbmcobWVkaWE6OkVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSkgewotICBzd2l0Y2ggKGluaXRfZGF0YV90eXBlKSB7Ci0gICAgY2FzZSBtZWRpYTo6a0VtZUluaXREYXRhVHlwZUNlbmM6Ci0gICAgICByZXR1cm4gImNlbmMiOwotICAgIGNhc2UgbWVkaWE6OmtFbWVJbml0RGF0YVR5cGVGYWlycGxheToKLSAgICAgIHJldHVybiAiZmFpcnBsYXkiOwotICAgIGNhc2UgbWVkaWE6OmtFbWVJbml0RGF0YVR5cGVLZXlJZHM6Ci0gICAgICByZXR1cm4gImtleWlkcyI7Ci0gICAgY2FzZSBtZWRpYTo6a0VtZUluaXREYXRhVHlwZVdlYk06Ci0gICAgICByZXR1cm4gIndlYm0iOwotICAgIGNhc2UgbWVkaWE6OmtFbWVJbml0RGF0YVR5cGVVbmtub3duOgotICAgICAgTE9HKFdBUk5JTkcpIDw8ICJVbmtub3duIEVNRSBpbml0aWFsaXphdGlvbiBkYXRhIHR5cGUuIjsKLSAgICAgIHJldHVybiAiIjsKLSAgfQotICAvLyBTb21lIGNvbXBpbGVycyBlcnJvciB3aXRoICJjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIgotICAvLyB3aXRob3V0IHRoaXMuCi0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuICIiOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQogLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbmNyeXB0ZWQtbWVkaWEvI2luaXRkYXRhLWVuY291bnRlcmVkLgogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQoCi0gICAgbWVkaWE6OkVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdF9kYXRhLAorICAgIGNvbnN0IGNoYXIqIGluaXRfZGF0YV90eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbml0X2RhdGEsCiAgICAgdW5zaWduZWQgaW50IGluaXRfZGF0YV9sZW5ndGgpIHsKKyAgRENIRUNLKGluaXRfZGF0YV90eXBlKTsKKwogICAvLyA0LiBJZiB0aGUgbWVkaWEgZGF0YSBpcyBDT1JTLXNhbWUtb3JpZ2luIGFuZCBub3QgbWl4ZWQgY29udGVudC4KIAogICAvLyA1LiBRdWV1ZSBhIHRhc2sgdG8gY3JlYXRlIGFuIGV2ZW50IG5hbWVkIGVuY3J5cHRlZCB0aGF0IGRvZXMgbm90IGJ1YmJsZQpAQCAtMTcyOSw4ICsxNjkyLDcgQEAKICAgaWYgKCFjdXJyZW50X3VybC5TY2hlbWVJcygiaHR0cCIpICYmCiAgICAgICBPcmlnaW5Jc1NhZmUocmVxdWVzdF9tb2RlXywgY3VycmVudF91cmwsCiAgICAgICAgICAgICAgICAgICAgbm9kZV9kb2N1bWVudCgpLT5sb2NhdGlvbigpLT5HZXRPcmlnaW5Bc09iamVjdCgpKSkgewotICAgIG1lZGlhX2VuY3J5cHRlZF9ldmVudF9pbml0LnNldF9pbml0X2RhdGFfdHlwZSgKLSAgICAgICAgVG9Jbml0RGF0YVR5cGVTdHJpbmcoaW5pdF9kYXRhX3R5cGUpKTsKKyAgICBtZWRpYV9lbmNyeXB0ZWRfZXZlbnRfaW5pdC5zZXRfaW5pdF9kYXRhX3R5cGUoaW5pdF9kYXRhX3R5cGUpOwogICAgIGF1dG8qIGdsb2JhbF9lbnZpcm9ubWVudCA9CiAgICAgICAgIGh0bWxfZWxlbWVudF9jb250ZXh0KCktPnNjcmlwdF9ydW5uZXIoKS0+R2V0R2xvYmFsRW52aXJvbm1lbnQoKTsKICAgICBtZWRpYV9lbmNyeXB0ZWRfZXZlbnRfaW5pdC5zZXRfaW5pdF9kYXRhKApkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9odG1sX21lZGlhX2VsZW1lbnQuaCBiL2NvYmFsdC9kb20vaHRtbF9tZWRpYV9lbGVtZW50LmgKaW5kZXggM2Q0YmIxZi4uNmQ3MDhmZCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9odG1sX21lZGlhX2VsZW1lbnQuaAorKysgYi9jb2JhbHQvZG9tL2h0bWxfbWVkaWFfZWxlbWVudC5oCkBAIC0zOCwxNCArMzgsMTUgQEAKIAogY2xhc3MgTWVkaWFTb3VyY2U7CiAKLXR5cGVkZWYgbWVkaWE6OkNodW5rRGVtdXhlciBDaHVua0RlbXV4ZXI7Ci10eXBlZGVmIG1lZGlhOjpXZWJNZWRpYVBsYXllciBXZWJNZWRpYVBsYXllcjsKLXR5cGVkZWYgbWVkaWE6OldlYk1lZGlhUGxheWVyQ2xpZW50IFdlYk1lZGlhUGxheWVyQ2xpZW50OwotCiAvLyBUaGUgSFRNTE1lZGlhRWxlbWVudCBpcyB0aGUgYmFzZSBvZiBIVE1MQXVkaW9FbGVtZW50IGFuZCBIVE1MVmlkZW9FbGVtZW50LgogLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUwL2VtYmVkZGVkLWNvbnRlbnQtMC5odG1sI21lZGlhLWVsZW1lbnQKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHByaXZhdGUgV2ViTWVkaWFQbGF5ZXJDbGllbnQgeworY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIGNvYmFsdDo6bWVkaWE6OldlYk1lZGlhUGxheWVyQ2xpZW50IHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6Q2h1bmtEZW11eGVyIENodW5rRGVtdXhlcjsKKyAgdHlwZWRlZiA6OmNvYmFsdDo6bWVkaWE6OldlYk1lZGlhUGxheWVyIFdlYk1lZGlhUGxheWVyOworICB0eXBlZGVmIDo6Y29iYWx0OjptZWRpYTo6V2ViTWVkaWFQbGF5ZXJDbGllbnQgV2ViTWVkaWFQbGF5ZXJDbGllbnQ7CisKICAgSFRNTE1lZGlhRWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIGJhc2U6OlRva2VuIHRhZ19uYW1lKTsKICAgfkhUTUxNZWRpYUVsZW1lbnQoKSBvdmVycmlkZTsKIApAQCAtMjM2LDcgKzIzNyw3IEBACiAgIHN0ZDo6c3RyaW5nIE1heFZpZGVvQ2FwYWJpbGl0aWVzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgIGJvb2wgUHJlZmVyRGVjb2RlVG9UZXh0dXJlKCkgb3ZlcnJpZGU7CiAgIHZvaWQgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkKAotICAgICAgbWVkaWE6OkVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdF9kYXRhLAorICAgICAgY29uc3QgY2hhciogaW5pdF9kYXRhX3R5cGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGluaXRfZGF0YSwKICAgICAgIHVuc2lnbmVkIGludCBpbml0X2RhdGFfbGVuZ3RoKSBvdmVycmlkZTsKICAgdm9pZCBDbGVhck1lZGlhU291cmNlKCk7CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vaHRtbF9zY3JpcHRfZWxlbWVudC5jYyBiL2NvYmFsdC9kb20vaHRtbF9zY3JpcHRfZWxlbWVudC5jYwppbmRleCAwZmM4ODM2Li4wMjYxYmI2IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2h0bWxfc2NyaXB0X2VsZW1lbnQuY2MKKysrIGIvY29iYWx0L2RvbS9odG1sX3NjcmlwdF9lbGVtZW50LmNjCkBAIC0xMTUsNiArMTE1LDcgQEAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6Ok9uUGFyc2VyRW5kVGFnKCkgeyBQcmVwYXJlKCk7IH0KIAogc2NvcGVkX3JlZnB0cjxIVE1MU2NyaXB0RWxlbWVudD4gSFRNTFNjcmlwdEVsZW1lbnQ6OkFzSFRNTFNjcmlwdEVsZW1lbnQoKSB7CisgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CiAgIHJldHVybiB0aGlzOwogfQogCkBAIC0zMjksNyArMzMwLDggQEAKICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChodG1sX2VsZW1lbnRfY29udGV4dCgpLT5mZXRjaGVyX2ZhY3RvcnkoKSksIHVybF8sCiAgICAgICAgICAgICAgIGNzcF9jYWxsYmFjaywgcmVxdWVzdF9tb2RlXywKICAgICAgICAgICAgICAgZG9jdW1lbnRfLT5sb2NhdGlvbigpID8gZG9jdW1lbnRfLT5sb2NhdGlvbigpLT5HZXRPcmlnaW5Bc09iamVjdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxvYWRlcjo6T3JpZ2luKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2FkZXI6Ok9yaWdpbigpLAorICAgICAgICAgICAgICBkaXNrX2NhY2hlOjprVW5jb21waWxlZFNjcmlwdCksCiAgICAgICAgICAgYmFzZTo6QmluZCgmbG9hZGVyOjpUZXh0RGVjb2Rlcjo6Q3JlYXRlLAogICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmSFRNTFNjcmlwdEVsZW1lbnQ6Ok9uU3luY0NvbnRlbnRQcm9kdWNlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2h0bWxfdmlkZW9fZWxlbWVudC5jYyBiL2NvYmFsdC9kb20vaHRtbF92aWRlb19lbGVtZW50LmNjCmluZGV4IGViN2EzMGEuLmNjMTQ4ODMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vaHRtbF92aWRlb19lbGVtZW50LmNjCisrKyBiL2NvYmFsdC9kb20vaHRtbF92aWRlb19lbGVtZW50LmNjCkBAIC02MiwxNiArNjIsMTggQEAKICAgaWYgKCFwbGF5ZXIoKSkgewogICAgIHJldHVybiAwdTsKICAgfQotICBEQ0hFQ0tfR0UocGxheWVyKCktPkdldE5hdHVyYWxTaXplKCkud2lkdGgoKSwgMCk7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzI+KHBsYXllcigpLT5HZXROYXR1cmFsU2l6ZSgpLndpZHRoKCkpOworICBpbnQgd2lkdGggPSBwbGF5ZXIoKS0+R2V0TmF0dXJhbFdpZHRoKCk7CisgIERDSEVDS19HRSh3aWR0aCwgMCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzI+KHdpZHRoKTsKIH0KIAogdWludDMyIEhUTUxWaWRlb0VsZW1lbnQ6OnZpZGVvX2hlaWdodCgpIGNvbnN0IHsKICAgaWYgKCFwbGF5ZXIoKSkgewogICAgIHJldHVybiAwdTsKICAgfQotICBEQ0hFQ0tfR0UocGxheWVyKCktPkdldE5hdHVyYWxTaXplKCkuaGVpZ2h0KCksIDApOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyPihwbGF5ZXIoKS0+R2V0TmF0dXJhbFNpemUoKS5oZWlnaHQoKSk7CisgIGludCBoZWlnaHQgPSBwbGF5ZXIoKS0+R2V0TmF0dXJhbEhlaWdodCgpOworICBEQ0hFQ0tfR0UoaGVpZ2h0LCAwKTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMj4oaGVpZ2h0KTsKIH0KIAogc2NvcGVkX3JlZnB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRNTFZpZGVvRWxlbWVudDo6R2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlcl90ZXN0LmNjIGIvY29iYWx0L2RvbS9pbnRlcnNlY3Rpb25fb2JzZXJ2ZXJfdGVzdC5jYwppbmRleCAzMmIxZGIyLi5mYzFkNjgzIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2ludGVyc2VjdGlvbl9vYnNlcnZlcl90ZXN0LmNjCisrKyBiL2NvYmFsdC9kb20vaW50ZXJzZWN0aW9uX29ic2VydmVyX3Rlc3QuY2MKQEAgLTEzLDcgKzEzLDcgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3BlcmNlbnRhZ2VfdmFsdWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvY3Nzb20vdGVzdGluZy9tb2NrX2Nzc19wYXJzZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvY3Nzb20vdGVzdGluZy9tb2NrX2Nzc19wYXJzZXIuaCIgIC8vIG5vZ25jaGVjawogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9jdW1lbnQuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zdGF0X3RyYWNrZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2VsZW1lbnQuaCIKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vbG9jYXRpb24uY2MgYi9jb2JhbHQvZG9tL2xvY2F0aW9uLmNjCmluZGV4IGRmY2JlYTYuLmUzNGRiN2MgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbG9jYXRpb24uY2MKKysrIGIvY29iYWx0L2RvbS9sb2NhdGlvbi5jYwpAQCAtMjMsMTIgKzIzLDE1IEBACiAKIExvY2F0aW9uOjpMb2NhdGlvbihjb25zdCBHVVJMJiB1cmwsIGNvbnN0IGJhc2U6OkNsb3N1cmUmIGhhc2hjaGFuZ2VfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBHVVJMJik+JiBuYXZpZ2F0aW9uX2NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgc2VjdXJpdHlfY2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgY29uc3QgY3NwOjpTZWN1cml0eUNhbGxiYWNrJiBzZWN1cml0eV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKE5hdmlnYXRpb25UeXBlIHR5cGUpPiYKKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X25hdmlnYXRpb25fdHlwZV9jYWxsYmFjaykKICAgICA6IEFMTE9XX1RISVNfSU5fSU5JVElBTElaRVJfTElTVCh1cmxfdXRpbHNfKAogICAgICAgICAgIHVybCwgYmFzZTo6QmluZCgmTG9jYXRpb246OlJlcGxhY2UsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKSksCiAgICAgICBoYXNoY2hhbmdlX2NhbGxiYWNrXyhoYXNoY2hhbmdlX2NhbGxiYWNrKSwKICAgICAgIG5hdmlnYXRpb25fY2FsbGJhY2tfKG5hdmlnYXRpb25fY2FsbGJhY2spLAotICAgICAgc2VjdXJpdHlfY2FsbGJhY2tfKHNlY3VyaXR5X2NhbGxiYWNrKSB7fQorICAgICAgc2VjdXJpdHlfY2FsbGJhY2tfKHNlY3VyaXR5X2NhbGxiYWNrKSwKKyAgICAgIHNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2tfKHNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2spIHt9CiAKIC8vIEFsZ29yaXRobSBmb3IgUmVwbGFjZToKIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1MC9icm93c2Vycy5odG1sI2RvbS1sb2NhdGlvbi1yZXBsYWNlCkBAIC03OCw2ICs4MSw5IEBACiAgICAgaWYgKCFuYXZpZ2F0aW9uX2NhbGxiYWNrXy5pc19udWxsKCkpIHsKICAgICAgIG5hdmlnYXRpb25fY2FsbGJhY2tfLlJ1bihuZXdfdXJsKTsKICAgICB9CisgICAgaWYgKCFzZXRfbmF2aWdhdGlvbl90eXBlX2NhbGxiYWNrXy5pc19udWxsKCkpIHsKKyAgICAgIHNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2tfLlJ1bihrTmF2aWdhdGlvblR5cGVOYXZpZ2F0ZSk7CisgICAgfQogICB9CiB9CiAKQEAgLTg2LDYgKzkyLDkgQEAKICAgICBMT0coSU5GTykgPDwgIlJlbG9hZGluZyBVUkw6ICIgPDwgdXJsKCk7CiAgICAgbmF2aWdhdGlvbl9jYWxsYmFja18uUnVuKHVybCgpKTsKICAgfQorICBpZiAoIXNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2tfLmlzX251bGwoKSkgeworICAgIHNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2tfLlJ1bihrTmF2aWdhdGlvblR5cGVSZWxvYWQpOworICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBkb20KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vbG9jYXRpb24uaCBiL2NvYmFsdC9kb20vbG9jYXRpb24uaAppbmRleCBkNzNkZGUwLi5iMTAzNjgzIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2xvY2F0aW9uLmgKKysrIGIvY29iYWx0L2RvbS9sb2NhdGlvbi5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiY29iYWx0L2NzcC9jb250ZW50X3NlY3VyaXR5X3BvbGljeS5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vbmF2aWdhdGlvbl90eXBlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS91cmxfdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCkBAIC0zNyw3ICszOCw5IEBACiAgIC8vIG90aGVyd2lzZSB0aGV5IGNhbiBiZSBlbXB0eS4KICAgTG9jYXRpb24oY29uc3QgR1VSTCYgdXJsLCBjb25zdCBiYXNlOjpDbG9zdXJlJiBoYXNoY2hhbmdlX2NhbGxiYWNrLAogICAgICAgICAgICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IEdVUkwmKT4mIG5hdmlnYXRpb25fY2FsbGJhY2ssCi0gICAgICAgICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgc2VjdXJpdHlfY2FsbGJhY2spOworICAgICAgICAgICBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHNlY3VyaXR5X2NhbGxiYWNrLAorICAgICAgICAgICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKE5hdmlnYXRpb25UeXBlIHR5cGUpPiYKKyAgICAgICAgICAgICAgIHNldF9uYXZpZ2F0aW9uX3R5cGVfY2FsbGJhY2spOwogCiAgIC8vIFdlYiBBUEk6IExvY2F0aW9uCiAgIC8vCkBAIC0xMDIsNiArMTA1LDcgQEAKICAgYmFzZTo6Q2xvc3VyZSBoYXNoY2hhbmdlX2NhbGxiYWNrXzsKICAgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBHVVJMJik+IG5hdmlnYXRpb25fY2FsbGJhY2tfOwogICBjc3A6OlNlY3VyaXR5Q2FsbGJhY2sgc2VjdXJpdHlfY2FsbGJhY2tfOworICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKE5hdmlnYXRpb25UeXBlKT4gc2V0X25hdmlnYXRpb25fdHlwZV9jYWxsYmFja187CiAKICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKExvY2F0aW9uKTsKIH07CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL2xvY2F0aW9uX3Rlc3QuY2MgYi9jb2JhbHQvZG9tL2xvY2F0aW9uX3Rlc3QuY2MKaW5kZXggNzAzODVhNC4uYTYzY2FiNiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9sb2NhdGlvbl90ZXN0LmNjCisrKyBiL2NvYmFsdC9kb20vbG9jYXRpb25fdGVzdC5jYwpAQCAtNjIsOCArNjIsMTAgQEAKICAgdm9pZCBJbml0KGNvbnN0IEdVUkwmIHVybCwgY29uc3QgYmFzZTo6Q2xvc3VyZSYgaGFzaGNoYW5nZV9jYWxsYmFjaywKICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgR1VSTCYpPiYgbmF2aWdhdGlvbl9jYWxsYmFjaywKICAgICAgICAgICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgc2VjdXJpdHlfY2FsbGJhY2spIHsKKyAgICBiYXNlOjpDYWxsYmFjazx2b2lkKE5hdmlnYXRpb25UeXBlKT4gbnVsbF9jYjsKICAgICBsb2NhdGlvbl8gPSBuZXcgTG9jYXRpb24odXJsLCBoYXNoY2hhbmdlX2NhbGxiYWNrLCBuYXZpZ2F0aW9uX2NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9jYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsX2NiIC8qc2V0X25hdmlnYXRpb25fdHlwZV9jYWxsYmFjayovKTsKICAgfQogCiAgIHNjb3BlZF9yZWZwdHI8TG9jYXRpb24+IGxvY2F0aW9uXzsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vbG90dGllX3BsYXllci5jYyBiL2NvYmFsdC9kb20vbG90dGllX3BsYXllci5jYwppbmRleCBmZGQ1MDhlLi41N2VlNWRlIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL2xvdHRpZV9wbGF5ZXIuY2MKKysrIGIvY29iYWx0L2RvbS9sb3R0aWVfcGxheWVyLmNjCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKQEAgLTEyNCw4ICsxMjUsMTIgQEAKIH0KIAogc3RkOjpzdHJpbmcgTG90dGllUGxheWVyOjpyZW5kZXJlcigpIGNvbnN0IHsKLSAgLy8gQ29iYWx0IHVzZXMgYSBjdXN0b20gY29tcGlsZWQtaW4gcmVuZGVyZXIuCisvLyBDb2JhbHQgdXNlcyBhIGN1c3RvbSBjb21waWxlZC1pbiByZW5kZXJlci4KKyNpZiBkZWZpbmVkKFVTRV9TS0lBX05FWFQpCisgIHJldHVybiAic2tvdHRpZS1tOTciOworI2Vsc2UKICAgcmV0dXJuICJza290dGllLW03OSI7CisjZW5kaWYKIH0KIAogdm9pZCBMb3R0aWVQbGF5ZXI6OkxvYWQoc3RkOjpzdHJpbmcgc3JjKSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL21lZGlhX3NvdXJjZS5jYyBiL2NvYmFsdC9kb20vbWVkaWFfc291cmNlLmNjCmluZGV4IGE5NzA5NzguLjM3MDdjMzIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbWVkaWFfc291cmNlLmNjCisrKyBiL2NvYmFsdC9kb20vbWVkaWFfc291cmNlLmNjCkBAIC01MiwyMCArNTIsMjEgQEAKICNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCiAjaW5jbHVkZSAiYmFzZS9ndWlkLmgiCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5jbHVkZSAiYmFzZS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3Rva2Vucy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIGRvbSB7CiAKLXVzaW5nIG1lZGlhOjpDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfREVDT0RFX0VSUk9SOwotdXNpbmcgbWVkaWE6OkNIVU5LX0RFTVVYRVJfRVJST1JfRU9TX1NUQVRVU19ORVRXT1JLX0VSUk9SOwotdXNpbmcgbWVkaWE6OlBJUEVMSU5FX09LOwotdXNpbmcgbWVkaWE6OlBpcGVsaW5lU3RhdHVzOwordXNpbmcgOjptZWRpYTo6Q0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX0RFQ09ERV9FUlJPUjsKK3VzaW5nIDo6bWVkaWE6OkNIVU5LX0RFTVVYRVJfRVJST1JfRU9TX1NUQVRVU19ORVRXT1JLX0VSUk9SOwordXNpbmcgOjptZWRpYTo6UElQRUxJTkVfT0s7Cit1c2luZyA6Om1lZGlhOjpQaXBlbGluZVN0YXR1czsKIAogTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgOiBFdmVudFRhcmdldChzZXR0aW5ncyksCkBAIC0xNDksNiArMTUwLDcgQEAKIHNjb3BlZF9yZWZwdHI8U291cmNlQnVmZmVyPiBNZWRpYVNvdXJjZTo6QWRkU291cmNlQnVmZmVyKAogICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlLAogICAgIHNjcmlwdDo6RXhjZXB0aW9uU3RhdGUqIGV4Y2VwdGlvbl9zdGF0ZSkgeworICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6ZG9tIiwgIk1lZGlhU291cmNlOjpBZGRTb3VyY2VCdWZmZXIoKSIsICJ0eXBlIiwgdHlwZSk7CiAgIERMT0coSU5GTykgPDwgImFkZCBTb3VyY2VCdWZmZXIgd2l0aCB0eXBlICIgPDwgdHlwZTsKIAogICBpZiAodHlwZS5lbXB0eSgpKSB7CkBAIC0xOTEsNiArMTkzLDcgQEAKIHZvaWQgTWVkaWFTb3VyY2U6OlJlbW92ZVNvdXJjZUJ1ZmZlcigKICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFNvdXJjZUJ1ZmZlcj4mIHNvdXJjZV9idWZmZXIsCiAgICAgc2NyaXB0OjpFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpkb20iLCAiTWVkaWFTb3VyY2U6OlJlbW92ZVNvdXJjZUJ1ZmZlcigpIik7CiAgIGlmIChzb3VyY2VfYnVmZmVyLmdldCgpID09IE5VTEwpIHsKICAgICBET01FeGNlcHRpb246OlJhaXNlKERPTUV4Y2VwdGlvbjo6a0ludmFsaWRBY2Nlc3NFcnIsIGV4Y2VwdGlvbl9zdGF0ZSk7CiAgICAgcmV0dXJuOwpAQCAtMjIyLDEyICsyMjUsMTQgQEAKIH0KIAogdm9pZCBNZWRpYVNvdXJjZTo6RW5kT2ZTdHJlYW0oc2NyaXB0OjpFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpkb20iLCAiTWVkaWFTb3VyY2U6OkVuZE9mU3RyZWFtKCkiKTsKICAgLy8gSWYgdGhlcmUgaXMgbm8gZXJyb3Igc3RyaW5nIHByb3ZpZGVkLCB0cmVhdCBpdCBhcyBlbXB0eS4KICAgRW5kT2ZTdHJlYW0oa01lZGlhU291cmNlRW5kT2ZTdHJlYW1FcnJvck5vRXJyb3IsIGV4Y2VwdGlvbl9zdGF0ZSk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2U6OkVuZE9mU3RyZWFtKE1lZGlhU291cmNlRW5kT2ZTdHJlYW1FcnJvciBlcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdDo6RXhjZXB0aW9uU3RhdGUqIGV4Y2VwdGlvbl9zdGF0ZSkgeworICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6ZG9tIiwgIk1lZGlhU291cmNlOjpFbmRPZlN0cmVhbSgpIiwgImVycm9yIiwgZXJyb3IpOwogICBpZiAoIUlzT3BlbigpIHx8IElzVXBkYXRpbmcoKSkgewogICAgIERPTUV4Y2VwdGlvbjo6UmFpc2UoRE9NRXhjZXB0aW9uOjprSW52YWxpZFN0YXRlRXJyLCBleGNlcHRpb25fc3RhdGUpOwogICAgIHJldHVybjsKQEAgLTI2NSwyOCArMjcwLDI0IEBACiAvLyBzdGF0aWMKIGJvb2wgTWVkaWFTb3VyY2U6OklzVHlwZVN1cHBvcnRlZChzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlKSB7CisgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpkb20iLCAiTWVkaWFTb3VyY2U6OklzVHlwZVN1cHBvcnRlZCgpIiwgInR5cGUiLCB0eXBlKTsKICAgRENIRUNLKHNldHRpbmdzKTsKICAgRE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9CiAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKICAgRENIRUNLKGRvbV9zZXR0aW5ncy0+Y2FuX3BsYXlfdHlwZV9oYW5kbGVyKCkpOwogICBTYk1lZGlhU3VwcG9ydFR5cGUgc3VwcG9ydF90eXBlID0KICAgICAgIGRvbV9zZXR0aW5ncy0+Y2FuX3BsYXlfdHlwZV9oYW5kbGVyKCktPkNhblBsYXlBZGFwdGl2ZSh0eXBlLmNfc3RyKCksICIiKTsKLSAgaWYgKHN1cHBvcnRfdHlwZSA9PSBrU2JNZWRpYVN1cHBvcnRUeXBlTm90U3VwcG9ydGVkKSB7Ci0gICAgTE9HKElORk8pIDw8ICJNZWRpYVNvdXJjZTo6SXNUeXBlU3VwcG9ydGVkKCIgPDwgdHlwZQotICAgICAgICAgICAgICA8PCAiKSAtPiBub3Qgc3VwcG9ydGVkL2ZhbHNlIjsKLSAgICByZXR1cm4gZmFsc2U7CisgIHN3aXRjaCAoc3VwcG9ydF90eXBlKSB7CisgICAgY2FzZSBrU2JNZWRpYVN1cHBvcnRUeXBlTm90U3VwcG9ydGVkOgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Uga1NiTWVkaWFTdXBwb3J0VHlwZU1heWJlOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrU2JNZWRpYVN1cHBvcnRUeXBlUHJvYmFibHk6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgTk9UUkVBQ0hFRCgpOworICAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIGlmIChzdXBwb3J0X3R5cGUgPT0ga1NiTWVkaWFTdXBwb3J0VHlwZU1heWJlKSB7Ci0gICAgTE9HKElORk8pIDw8ICJNZWRpYVNvdXJjZTo6SXNUeXBlU3VwcG9ydGVkKCIgPDwgdHlwZSA8PCAiKSAtPiBtYXliZS90cnVlIjsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAoc3VwcG9ydF90eXBlID09IGtTYk1lZGlhU3VwcG9ydFR5cGVQcm9iYWJseSkgewotICAgIExPRyhJTkZPKSA8PCAiTWVkaWFTb3VyY2U6OklzVHlwZVN1cHBvcnRlZCgiIDw8IHR5cGUKLSAgICAgICAgICAgICAgPDwgIikgLT4gcHJvYmFibHkvdHJ1ZSI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgTWVkaWFTb3VyY2U6OkF0dGFjaFRvRWxlbWVudChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYV9lbGVtZW50KSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL21lZGlhX3NvdXJjZS5oIGIvY29iYWx0L2RvbS9tZWRpYV9zb3VyY2UuaAppbmRleCA1OTUxYjMzLi4wZmI2OTFjIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL21lZGlhX3NvdXJjZS5oCisrKyBiL2NvYmFsdC9kb20vbWVkaWFfc291cmNlLmgKQEAgLTYxLDkgKzYxLDkgQEAKICNpbmNsdWRlICJjb2JhbHQvZG9tL3RpbWVfcmFuZ2VzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS91cmxfcmVnaXN0cnkuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL3ZpZGVvX3RyYWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2V4Y2VwdGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBkb20gewpAQCAtNzMsNiArNzMsNyBAQAogLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvMjAxNi9DUi1tZWRpYS1zb3VyY2UtMjAxNjA3MDUvI2lkbC1kZWYtTWVkaWFTb3VyY2UKIGNsYXNzIE1lZGlhU291cmNlIDogcHVibGljIEV2ZW50VGFyZ2V0IHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6Q2h1bmtEZW11eGVyIENodW5rRGVtdXhlcjsKICAgdHlwZWRlZiBVcmxSZWdpc3RyeTxNZWRpYVNvdXJjZT4gUmVnaXN0cnk7CiAKICAgLy8gQ3VzdG9tLCBub3QgaW4gYW55IHNwZWMuCkBAIC0xMDgsNyArMTA5LDcgQEAKICAgLy8KICAgLy8gSFRNTE1lZGlhU291cmNlCiAgIGJvb2wgQXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhX2VsZW1lbnQpOwotICB2b2lkIFNldENodW5rRGVtdXhlckFuZE9wZW4obWVkaWE6OkNodW5rRGVtdXhlciogY2h1bmtfZGVtdXhlcik7CisgIHZvaWQgU2V0Q2h1bmtEZW11eGVyQW5kT3BlbihDaHVua0RlbXV4ZXIqIGNodW5rX2RlbXV4ZXIpOwogICB2b2lkIENsb3NlKCk7CiAgIGJvb2wgSXNDbG9zZWQoKSBjb25zdDsKICAgc2NvcGVkX3JlZnB0cjxUaW1lUmFuZ2VzPiBHZXRCdWZmZXJlZFJhbmdlKCkgY29uc3Q7CkBAIC0xMzAsNyArMTMxLDcgQEAKICAgYm9vbCBJc1VwZGF0aW5nKCkgY29uc3Q7CiAgIHZvaWQgU2NoZWR1bGVFdmVudChiYXNlOjpUb2tlbiBldmVudF9uYW1lKTsKIAotICBtZWRpYTo6Q2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyXzsKKyAgQ2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyXzsKICAgTWVkaWFTb3VyY2VSZWFkeVN0YXRlIHJlYWR5X3N0YXRlXzsKICAgRXZlbnRRdWV1ZSBldmVudF9xdWV1ZV87CiAgIGJhc2U6OldlYWtQdHI8SFRNTE1lZGlhRWxlbWVudD4gYXR0YWNoZWRfZWxlbWVudF87CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL21lbW9yeV9pbmZvLmNjIGIvY29iYWx0L2RvbS9tZW1vcnlfaW5mby5jYwppbmRleCBjYzAxNTVmLi40MDFlYzlmIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL21lbW9yeV9pbmZvLmNjCisrKyBiL2NvYmFsdC9kb20vbWVtb3J5X2luZm8uY2MKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgZG9tIHsKQEAgLTI3LDcgKzI5LDkgQEAKICAgICByZXR1cm4gMHU7CiAgIH0KICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMj4oCi0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxET01TZXR0aW5ncyo+KGVudmlyb25tZW50X3NldHRpbmdzKQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MpCisgICAgICAgICAgLT5jb250ZXh0KCkKICAgICAgICAgICAtPmphdmFzY3JpcHRfZW5naW5lKCkKICAgICAgICAgICAtPkdldEhlYXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAudG90YWxfaGVhcF9zaXplKTsKQEAgLTM5LDcgKzQzLDkgQEAKICAgICByZXR1cm4gMHU7CiAgIH0KICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMj4oCi0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxET01TZXR0aW5ncyo+KGVudmlyb25tZW50X3NldHRpbmdzKQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MpCisgICAgICAgICAgLT5jb250ZXh0KCkKICAgICAgICAgICAtPmphdmFzY3JpcHRfZW5naW5lKCkKICAgICAgICAgICAtPkdldEhlYXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAudXNlZF9oZWFwX3NpemUpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9tZXNzYWdlX2V2ZW50LmNjIGIvY29iYWx0L2RvbS9tZXNzYWdlX2V2ZW50LmNjCmluZGV4IGZhNDM1OWMuLjQzNGNlOWMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5jYworKysgYi9jb2JhbHQvZG9tL21lc3NhZ2VfZXZlbnQuY2MKQEAgLTE2LDEwICsxNiwxMiBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oIgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAKIG5hbWVzcGFjZSB7CkBAIC00NiwxNSArNDgsMTUgQEAKIE1lc3NhZ2VFdmVudDo6UmVzcG9uc2VUeXBlQ29kZSBNZXNzYWdlRXZlbnQ6OkdldFJlc3BvbnNlVHlwZUNvZGUoCiAgICAgYmFzZTo6U3RyaW5nUGllY2UgdG9fbWF0Y2gpIHsKICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBhcnJheXNpemUoa1Jlc3BvbnNlVHlwZXMpOyArK2kpIHsKLSAgICBpZiAoc3RybmNtcChrUmVzcG9uc2VUeXBlc1tpXSwgdG9fbWF0Y2guZGF0YSgpLCB0b19tYXRjaC5zaXplKCkpID09Ci0gICAgICAgIDApIHsKKyAgICBpZiAoc3RybmNtcChrUmVzcG9uc2VUeXBlc1tpXSwgdG9fbWF0Y2guZGF0YSgpLCB0b19tYXRjaC5zaXplKCkpID09IDApIHsKICAgICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6OlJlc3BvbnNlVHlwZUNvZGUoaSk7CiAgICAgfQogICB9CiAgIHJldHVybiBrUmVzcG9uc2VUeXBlQ29kZU1heDsKIH0KIAotTWVzc2FnZUV2ZW50OjpSZXNwb25zZVR5cGUgTWVzc2FnZUV2ZW50OjpkYXRhKCkgY29uc3QgeworTWVzc2FnZUV2ZW50OjpSZXNwb25zZVR5cGUgTWVzc2FnZUV2ZW50OjpkYXRhKAorICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpIGNvbnN0IHsKICAgY29uc3QgY2hhciogZGF0YV9wb2ludGVyID0gTlVMTDsKICAgaW50IGRhdGFfbGVuZ3RoID0gMDsKICAgaWYgKGRhdGFfKSB7CkBAIC02Myw3ICs2NSw5IEBACiAgIH0KIAogICBhdXRvKiBnbG9iYWxfZW52aXJvbm1lbnQgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8RE9NU2V0dGluZ3MqPihzZXR0aW5nc18pLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKICAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlcj4gcmVzcG9uc2VfYnVmZmVyOwogICBpZiAocmVzcG9uc2VfdHlwZV8gIT0ga1RleHQpIHsKICAgICBhdXRvIGJ1ZmZlcl9jb3B5ID0KQEAgLTc4LDcgKzgyLDcgQEAKICAgICAgIHJldHVybiBSZXNwb25zZVR5cGUoc3RyaW5nX3Jlc3BvbnNlKTsKICAgICB9CiAgICAgY2FzZSBrQmxvYjogewotICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkJsb2I+IGJsb2IgPSBuZXcgZG9tOjpCbG9iKHNldHRpbmdzXywgcmVzcG9uc2VfYnVmZmVyKTsKKyAgICAgIHNjb3BlZF9yZWZwdHI8ZG9tOjpCbG9iPiBibG9iID0gbmV3IGRvbTo6QmxvYihzZXR0aW5ncywgcmVzcG9uc2VfYnVmZmVyKTsKICAgICAgIHJldHVybiBSZXNwb25zZVR5cGUoYmxvYik7CiAgICAgfQogICAgIGNhc2Uga0FycmF5QnVmZmVyOiB7CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL21lc3NhZ2VfZXZlbnQuaCBiL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oCmluZGV4IGU2ZmJkYmIuLmJkNTU0MjYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oCisrKyBiL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oCkBAIC0zNiwyMyArMzYsMTkgQEAKICAgdHlwZWRlZiBzY3JpcHQ6OlVuaW9uVHlwZTM8c3RkOjpzdHJpbmcsIHNjb3BlZF9yZWZwdHI8ZG9tOjpCbG9iPiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlcj4gPgogICAgICAgUmVzcG9uc2VUeXBlOwotICAvLyBUaGVzZSByZXNwb25zZSBjb2RlcyBhcmUgb3JkZXJlZCBpbiB0aGUgbGlrZWx5aG9vZCBvZiBiZWluZyB1c2VkLgorICAvLyBUaGVzZSByZXNwb25zZSBjb2RlcyBhcmUgb3JkZXJlZCBpbiB0aGUgbGlrZWxpaG9vZCBvZiBiZWluZyB1c2VkLgogICAvLyBLZWVwaW5nIHRoZW0gaW4gZXhwZWN0ZWQgb3JkZXIgd2lsbCBoZWxwIG1ha2UgY29kZSBmYXN0ZXIuCiAgIGVudW0gUmVzcG9uc2VUeXBlQ29kZSB7IGtUZXh0LCBrQmxvYiwga0FycmF5QnVmZmVyLCBrUmVzcG9uc2VUeXBlQ29kZU1heCB9OwogCi0gIE1lc3NhZ2VFdmVudChiYXNlOjpUb2tlbiB0eXBlLCBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAotICAgICAgICAgICAgICAgUmVzcG9uc2VUeXBlQ29kZSByZXNwb25zZV90eXBlLAorICBNZXNzYWdlRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwgUmVzcG9uc2VUeXBlQ29kZSByZXNwb25zZV90eXBlLAogICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxuZXQ6OklPQnVmZmVyV2l0aFNpemU+JiBkYXRhKQotICAgICAgOiBFdmVudCh0eXBlKSwKLSAgICAgICAgc2V0dGluZ3NfKHNldHRpbmdzKSwKLSAgICAgICAgcmVzcG9uc2VfdHlwZV8ocmVzcG9uc2VfdHlwZSksCi0gICAgICAgIGRhdGFfKGRhdGEpIHt9CisgICAgICA6IEV2ZW50KHR5cGUpLCByZXNwb25zZV90eXBlXyhyZXNwb25zZV90eXBlKSwgZGF0YV8oZGF0YSkge30KIAogICAvLyBDcmVhdGVzIGFuIGV2ZW50IHdpdGggaXRzICJpbml0aWFsaXplZCBmbGFnIiB1bnNldC4KICAgZXhwbGljaXQgTWVzc2FnZUV2ZW50KFVuaW5pdGlhbGl6ZWRGbGFnIHVuaW5pdGlhbGl6ZWRfZmxhZykKICAgICAgIDogRXZlbnQodW5pbml0aWFsaXplZF9mbGFnKSB7fQogCi0gIFJlc3BvbnNlVHlwZSBkYXRhKCkgY29uc3Q7CisgIFJlc3BvbnNlVHlwZSBkYXRhKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpIGNvbnN0OwogCiAgIC8vIFRoZXNlIGhlbHBlciBmdW5jdGlvbnMgYXJlIGN1c3RvbSwgYW5kIG5vdCBpbiBhbnkgc3BlYy4KICAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldFJlc3BvbnNlVHlwZUFzU3RyaW5nKGNvbnN0IFJlc3BvbnNlVHlwZUNvZGUgY29kZSk7CkBAIC02Miw3ICs1OCw2IEBACiAgIERFRklORV9XUkFQUEFCTEVfVFlQRShNZXNzYWdlRXZlbnQpCiAKICBwcml2YXRlOgotICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzXzsKICAgUmVzcG9uc2VUeXBlQ29kZSByZXNwb25zZV90eXBlXzsKICAgc2NvcGVkX3JlZnB0cjxuZXQ6OklPQnVmZmVyV2l0aFNpemU+IGRhdGFfOwogfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5pZGwgYi9jb2JhbHQvZG9tL21lc3NhZ2VfZXZlbnQuaWRsCmluZGV4IDU3MzA0OTUuLmYzZDBjMTAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5pZGwKKysrIGIvY29iYWx0L2RvbS9tZXNzYWdlX2V2ZW50LmlkbApAQCAtMTYsNSArMTYsNSBAQAogLy8gSURMIHNvdXJjZTogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY29tbXMuaHRtbCNtZXNzYWdlZXZlbnQKIC8vIE9ubHkgdGhlIHN1YnNldCBvZiB0aGUgSURMIHRoYXQgaXMgbmVjZXNzYXJ5IGZvciBXZWJzb2NrZXRzIGlzIGltcGxlbWVudGVkLgogaW50ZXJmYWNlIE1lc3NhZ2VFdmVudCA6IEV2ZW50IHsKLSAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkYXRhOworICBbQ2FsbFdpdGggPSBFbnZpcm9ubWVudFNldHRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRhdGE7CiB9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9uYXZpZ2F0aW9uX3R5cGUuaWRsIGIvY29iYWx0L2RvbS9uYXZpZ2F0aW9uX3R5cGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMjYwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvZG9tL25hdmlnYXRpb25fdHlwZS5pZGwKQEAgLTAsMCArMSwyMyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAyMi9XRC1uYXZpZ2F0aW9uLXRpbWluZy0yLTIwMjIwMjI0LyNzZWMtcGVyZm9ybWFuY2UtbmF2aWdhdGlvbi10eXBlcworCisvLyBDb2JhbHQgb25seSBzdXBwb3J0cyAibmF2aWdhdGUiIGFuZCAicmVsb2FkIi4KK2VudW0gTmF2aWdhdGlvblR5cGUgeworICAgICJuYXZpZ2F0ZSIsCisgICAgInJlbG9hZCIsCisgICAgImJhY2tfZm9yd2FyZCIsCisgICAgInByZXJlbmRlciIKK307CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL25hdmlnYXRvci5jYyBiL2NvYmFsdC9kb20vbmF2aWdhdG9yLmNjCmluZGV4IDZlMWU3M2QuLmI4MmNkNjYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vbmF2aWdhdG9yLmNjCisrKyBiL2NvYmFsdC9kb20vbmF2aWdhdG9yLmNjCkBAIC0xNTcsNyArMTU3LDkgQEAKICAgICAgIHBsdWdpbnNfKG5ldyBQbHVnaW5BcnJheSgpKSwKICAgICAgIG1lZGlhX2RldmljZXNfKAogICAgICAgICAgIG5ldyBtZWRpYV9jYXB0dXJlOjpNZWRpYURldmljZXMoc2V0dGluZ3MsIHNjcmlwdF92YWx1ZV9mYWN0b3J5KSksCi0gICAgICBzZXJ2aWNlX3dvcmtlcl8obmV3IHdvcmtlcjo6U2VydmljZVdvcmtlckNvbnRhaW5lcihzY3JpcHRfdmFsdWVfZmFjdG9yeSkpLAorICAgICAgc2VydmljZV93b3JrZXJfKG5ldyB3b3JrZXI6OlNlcnZpY2VXb3JrZXJDb250YWluZXIoCisgICAgICAgICAgc2V0dGluZ3MsIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAtPnNlcnZpY2Vfd29ya2VyX2pvYnMoKSkpLAogICAgICAgc3lzdGVtX2NhcHRpb25fc2V0dGluZ3NfKGNhcHRpb25zKSwKICAgICAgIHNjcmlwdF92YWx1ZV9mYWN0b3J5XyhzY3JpcHRfdmFsdWVfZmFjdG9yeSkge30KIApkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9uYXZpZ2F0b3JfdWFfZGF0YS5jYyBiL2NvYmFsdC9kb20vbmF2aWdhdG9yX3VhX2RhdGEuY2MKaW5kZXggNzNkOWFlZC4uNDZkZjUzYyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9uYXZpZ2F0b3JfdWFfZGF0YS5jYworKysgYi9jb2JhbHQvZG9tL25hdmlnYXRvcl91YV9kYXRhLmNjCkBAIC0zOSwxMCArMzksOCBAQAogICBhbGxfaGlnaF9lbnRyb3B5X3ZhbHVlc18uc2V0X2JyYW5kcyhicmFuZHNfKTsKICAgYWxsX2hpZ2hfZW50cm9weV92YWx1ZXNfLnNldF9tb2JpbGUobW9iaWxlXyk7CiAgIGFsbF9oaWdoX2VudHJvcHlfdmFsdWVzXy5zZXRfcGxhdGZvcm0ocGxhdGZvcm1fKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBhbGxfaGlnaF9lbnRyb3B5X3ZhbHVlc18uc2V0X2FyY2hpdGVjdHVyZShTQl9TQUJJX1RBUkdFVF9BUkNIKTsKICAgYWxsX2hpZ2hfZW50cm9weV92YWx1ZXNfLnNldF9iaXRuZXNzKFNCX1NBQklfV09SRF9TSVpFKTsKLSNlbmRpZgogICBhbGxfaGlnaF9lbnRyb3B5X3ZhbHVlc18uc2V0X21vZGVsKHBsYXRmb3JtX2luZm8tPm1vZGVsKCkudmFsdWVfb3IoIiIpKTsKICAgYWxsX2hpZ2hfZW50cm9weV92YWx1ZXNfLnNldF9wbGF0Zm9ybV92ZXJzaW9uKAogICAgICAgcGxhdGZvcm1faW5mby0+ZmlybXdhcmVfdmVyc2lvbigpLnZhbHVlX29yKCIiKSk7CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL25vZGUuY2MgYi9jb2JhbHQvZG9tL25vZGUuY2MKaW5kZXggN2RmNzYzYS4uMGIzOTg0OCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9ub2RlLmNjCisrKyBiL2NvYmFsdC9kb20vbm9kZS5jYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vbm9kZS5oIgogCiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiYmFzZS9sYXp5X2luc3RhbmNlLmgiCkBAIC01OCw3ICs1OSw3IEBACiAgIERDSEVDSyhldmVudC0+aW5pdGlhbGl6ZWRfZmxhZygpKTsKIAogICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6ZG9tIiwgIk5vZGU6OkRpc3BhdGNoRXZlbnQiLCAiZXZlbnQiLAotICAgICAgICAgICAgICAgZXZlbnQtPnR5cGUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgIFRSQUNFX1NUUl9DT1BZKGV2ZW50LT50eXBlKCkuY19zdHIoKSkpOwogCiAgIGlmICghZXZlbnQgfHwgZXZlbnQtPklzQmVpbmdEaXNwYXRjaGVkKCkgfHwgIWV2ZW50LT5pbml0aWFsaXplZF9mbGFnKCkpIHsKICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL29uX3NjcmVlbl9rZXlib2FyZF90ZXN0LmNjIGIvY29iYWx0L2RvbS9vbl9zY3JlZW5fa2V5Ym9hcmRfdGVzdC5jYwppbmRleCAwODc2MGJiLi4wOTU1OTVkIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL29uX3NjcmVlbl9rZXlib2FyZF90ZXN0LmNjCisrKyBiL2NvYmFsdC9kb20vb25fc2NyZWVuX2tleWJvYXJkX3Rlc3QuY2MKQEAgLTI5NCwxOCArMjk0LDEyIEBACiAKIH0gIC8vIG5hbWVzcGFjZQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLQogYm9vbCBTa2lwTG9jYWxlKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGJvb2wgc2tpcFRlc3RzID0gIVNiV2luZG93T25TY3JlZW5LZXlib2FyZElzU3VwcG9ydGVkKCk7CiAgIGlmIChza2lwVGVzdHMpIHsKICAgICBTQl9MT0coSU5GTykgPDwgIk9uIHNjcmVlbiBrZXlib2FyZCBub3Qgc3VwcG9ydGVkLiBUZXN0IHNraXBwZWQuIjsKICAgfQogICByZXR1cm4gc2tpcFRlc3RzOwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIFRFU1RfRihPblNjcmVlbktleWJvYXJkVGVzdCwgT2JqZWN0RXhpc3RzKSB7CkBAIC03MDgsMzYgKzcwMiw2IEBACiAgICkiOwogICBFWFBFQ1RfVFJVRShFdmFsdWF0ZVNjcmlwdChzY3JpcHQsIE5VTEwpKTsKIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLVRFU1RfRihPblNjcmVlbktleWJvYXJkVGVzdCwgT2JqZWN0RG9lc250RXhpc3QpIHsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0OwotCi0gIEVYUEVDVF9UUlVFKAotICAgICAgRXZhbHVhdGVTY3JpcHQoIndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnb25TY3JlZW5LZXlib2FyZCcpOyIsICZyZXN1bHQpKTsKLSAgRVhQRUNUX0VRKCJmYWxzZSIsIHJlc3VsdCk7Ci0gIEVYUEVDVF9UUlVFKEV2YWx1YXRlU2NyaXB0KCJ3aW5kb3cub25TY3JlZW5LZXlib2FyZDsiLCAmcmVzdWx0KSk7Ci0gIEVYUEVDVF9GQUxTRShiaW5kaW5nczo6dGVzdGluZzo6SXNBY2NlcHRhYmxlUHJvdG90eXBlU3RyaW5nKAotICAgICAgIk9uU2NyZWVuS2V5Ym9hcmQiLCByZXN1bHQpKTsKLSAgRVhQRUNUX1RSVUUoRXZhbHVhdGVTY3JpcHQoInR5cGVvZiB3aW5kb3cub25TY3JlZW5LZXlib2FyZCA9PT0gJ3VuZGVmaW5lZCc7IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCkpOwotICBFWFBFQ1RfRVEoInRydWUiLCByZXN1bHQpOwotCi0gIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFzc2lnbiBhbnl0aGluZyB3ZSBsaWtlIHRvIHdpbmRvdy5vblNjcmVlbktleWJvYXJkLgotICBjb25zdCBjaGFyIG51bWJlcl9zY3JpcHRbXSA9IFIiKAotICAgIHdpbmRvdy5vblNjcmVlbktleWJvYXJkID0gNDI7Ci0gICAgd2luZG93Lm9uU2NyZWVuS2V5Ym9hcmQ7Ci0gICkiOwotICBFWFBFQ1RfVFJVRShFdmFsdWF0ZVNjcmlwdChudW1iZXJfc2NyaXB0LCAmcmVzdWx0KSk7Ci0gIEVYUEVDVF9FUSgiNDIiLCByZXN1bHQpOwotCi0gIGNvbnN0IGNoYXIgb2JqZWN0X3NjcmlwdFtdID0gUiIoCi0gICAgd2luZG93Lm9uU2NyZWVuS2V5Ym9hcmQgPSB7Zm9vOiAnYmFyJ307Ci0gICAgd2luZG93Lm9uU2NyZWVuS2V5Ym9hcmQuaGFzT3duUHJvcGVydHkoJ2ZvbycpOwotICApIjsKLSAgRVhQRUNUX1RSVUUoRXZhbHVhdGVTY3JpcHQob2JqZWN0X3NjcmlwdCwgJnJlc3VsdCkpOwotICBFWFBFQ1RfRVEoInRydWUiLCByZXN1bHQpOwotfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogCiB9ICAvLyBuYW1lc3BhY2UgZG9tCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlLmggYi9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlLmgKaW5kZXggZDQ4YzdlYS4uNTBhNzU0YiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZS5oCisrKyBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2UuaApAQCAtMjAsOSArMjAsOSBAQAogI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKLSNpbmNsdWRlICJiYXNlL3RpbWUvZGVmYXVsdF90aWNrX2Nsb2NrLmgiCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkLmgiCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2NoZWNrZXIuaCIKKyNpbmNsdWRlICJiYXNlL3RpbWUvZGVmYXVsdF90aWNrX2Nsb2NrLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvYXBwbGljYXRpb25fc3RhdGUuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9jbG9jay5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCkBAIC03MSw4ICs3MSw3IEBACiAgICAgICBiYXNlOjpUaW1lVGlja3MgbW9ub3RvbmljX3RpbWUpIGNvbnN0OwogCiAgIHN0YXRpYyBET01IaWdoUmVzVGltZVN0YW1wIE1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCi0gICAgICBiYXNlOjpUaW1lVGlja3MgdGltZV9vcmlnaW4sCi0gICAgICBiYXNlOjpUaW1lVGlja3MgbW9ub3RvbmljX3RpbWUpOworICAgICAgYmFzZTo6VGltZVRpY2tzIHRpbWVfb3JpZ2luLCBiYXNlOjpUaW1lVGlja3MgbW9ub3RvbmljX3RpbWUpOwogCiAgIC8vIFdlYiBBUEk6IFBlcmZvcm1hbmNlIFRpbWVsaW5lIGV4dGVuc2lvbnMgdG8gdGhlIFBlcmZvcm1hbmNlLgogICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wZXJmb3JtYW5jZS10aW1lbGluZS0yLyNleHRlbnNpb25zLXRvLXRoZS1wZXJmb3JtYW5jZS1pbnRlcmZhY2UKQEAgLTExMSwxMiArMTEwLDEzIEBACiAgIHZvaWQgQ3JlYXRlUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyhjb25zdCBuZXQ6OkxvYWRUaW1pbmdJbmZvJiB0aW1pbmdfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbml0aWF0b3JfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0ZWRfdXJsKTsKLSAgdm9pZCBDcmVhdGVQZXJmb3JtYW5jZUxpZmVjeWNsZVRpbWluZygpOworICB2b2lkIEFkZEVudHJ5VG9QZXJmb3JtYW5jZUVudHJ5QnVmZmVyKAorICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZUVudHJ5PiYgZW50cnkpIHsKKyAgICBwZXJmb3JtYW5jZV9lbnRyeV9idWZmZXJfLnB1c2hfYmFjayhlbnRyeSk7CisgIH0KICAgLy8gQ3VzdG9tLCBub3QgaW4gYW55IHNwZWMuCiAgIC8vIEludGVybmFsIGdldHRlciBtZXRob2QgZm9yIHRoZSB0aW1lIG9yaWdpbiB2YWx1ZS4KLSAgYmFzZTo6VGltZVRpY2tzIEdldFRpbWVPcmlnaW4oKSBjb25zdCB7Ci0gICAgICByZXR1cm4gdGltZV9vcmlnaW5fOwotICB9CisgIGJhc2U6OlRpbWVUaWNrcyBHZXRUaW1lT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gdGltZV9vcmlnaW5fOyB9CiAgIC8vIFJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVydGhlIHBlcmZvcm1hbmNlIG9ic2VydmVyLgogICB2b2lkIFVucmVnaXN0ZXJQZXJmb3JtYW5jZU9ic2VydmVyKAogICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU9ic2VydmVyPiYgb2JzZXJ2ZXIpOwpAQCAtMTM1LDggKzEzNSw4IEBACiAgIHZvaWQgU2V0QXBwbGljYXRpb25TdGF0ZShiYXNlOjpBcHBsaWNhdGlvblN0YXRlIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAKLSAgdm9pZCBTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKAotICAgICAgYm9vbCBpc19wcmVsb2FkLCBTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKTsKKyAgdm9pZCBTZXRBcHBsaWNhdGlvblN0YXJ0T3JQcmVsb2FkVGltZXN0YW1wKGJvb2wgaXNfcHJlbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwogCiAgIHZvaWQgU2V0RGVlcExpbmtUaW1lc3RhbXAoU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCk7CiAKQEAgLTE0NCw3ICsxNDQsOCBAQAogICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoUGVyZm9ybWFuY2UpOwogCiAgcHJpdmF0ZToKLSAgdW5zaWduZWQgbG9uZyBHZXREcm9wcGVkRW50cmllc0NvdW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBlbnRyeV90eXBlKTsKKyAgdW5zaWduZWQgbG9uZyBHZXREcm9wcGVkRW50cmllc0NvdW50KCAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVudHJ5X3R5cGUpOwogCiAgIGJhc2U6OlRpbWVUaWNrcyB0aW1lX29yaWdpbl87CiAgIGNvbnN0IGJhc2U6OlRpY2tDbG9jayogdGlja19jbG9ja187CkBAIC0xNzIsMTAgKzE3MywxMCBAQAogICAgICAgUmVnaXN0ZXJlZFBlcmZvcm1hbmNlT2JzZXJ2ZXJMaXN0OwogICBSZWdpc3RlcmVkUGVyZm9ybWFuY2VPYnNlcnZlckxpc3QgcmVnaXN0ZXJlZF9wZXJmb3JtYW5jZV9vYnNlcnZlcnNfOwogCi0gIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfdGltaW5nX2J1ZmZlcl9zaXplX2xpbWl0XzsKLSAgdW5zaWduZWQgbG9uZyByZXNvdXJjZV90aW1pbmdfYnVmZmVyX2N1cnJlbnRfc2l6ZV87CisgIHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VfdGltaW5nX2J1ZmZlcl9zaXplX2xpbWl0XzsgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICB1bnNpZ25lZCBsb25nIHJlc291cmNlX3RpbWluZ19idWZmZXJfY3VycmVudF9zaXplXzsgIC8vIE5PTElOVChydW50aW1lL2ludCkKICAgYm9vbCByZXNvdXJjZV90aW1pbmdfYnVmZmVyX2Z1bGxfZXZlbnRfcGVuZGluZ19mbGFnXzsKLSAgdW5zaWduZWQgbG9uZworICB1bnNpZ25lZCBsb25nICAvLyBOT0xJTlQocnVudGltZS9pbnQpCiAgICAgICByZXNvdXJjZV90aW1pbmdfc2Vjb25kYXJ5X2J1ZmZlcl9jdXJyZW50X3NpemVfOwogICBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz4+CiAgICAgICByZXNvdXJjZV90aW1pbmdfc2Vjb25kYXJ5X2J1ZmZlcl87CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX2xpZmVjeWNsZV90aW1pbmcuY2MgYi9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX2xpZmVjeWNsZV90aW1pbmcuY2MKaW5kZXggZDgxZWJiMC4uZTA2NzYzZiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9saWZlY3ljbGVfdGltaW5nLmNjCisrKyBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbGlmZWN5Y2xlX3RpbWluZy5jYwpAQCAtMjEsMzIgKzIxLDMyIEBACiAKIG5hbWVzcGFjZSB7CiAKLSAgc3RkOjpzdHJpbmcgVHJhbnNsYXRlQXBwbGljYXRpb25TdGF0ZVRvU3RyaW5nKAotICAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBzdGF0ZSkgewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgIGNhc2UgYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVCbHVycmVkOgotICAgICAgICByZXR1cm4gIkFwcGxpY2F0aW9uU3RhdGVCbHVycmVkIjsKLSAgICAgIGNhc2UgYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVDb25jZWFsZWQ6Ci0gICAgICAgIHJldHVybiAiQXBwbGljYXRpb25TdGF0ZUNvbmNlYWxlZCI7Ci0gICAgICBjYXNlIGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlRnJvemVuOgotICAgICAgICByZXR1cm4gIkFwcGxpY2F0aW9uU3RhdGVGcm96ZW4iOwotICAgICAgY2FzZSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQ6Ci0gICAgICAgIHJldHVybiAiQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQiOwotICAgICAgY2FzZSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0b3BwZWQ6Ci0gICAgICAgIHJldHVybiAiQXBwbGljYXRpb25TdGF0ZVN0b3BwZWQiOwotICAgIH0KLQotICAgIE5PVFJFQUNIRUQoKSA8PCAic3RhdGUgPSAiIDw8IHN0YXRlOwotICAgIHJldHVybiAiSU5WQUxJRF9BUFBMSUNBVElPTl9TVEFURSI7CitzdGQ6OnN0cmluZyBUcmFuc2xhdGVBcHBsaWNhdGlvblN0YXRlVG9TdHJpbmcoYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBzdGF0ZSkgeworICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZUJsdXJyZWQ6CisgICAgICByZXR1cm4gIkFwcGxpY2F0aW9uU3RhdGVCbHVycmVkIjsKKyAgICBjYXNlIGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlQ29uY2VhbGVkOgorICAgICAgcmV0dXJuICJBcHBsaWNhdGlvblN0YXRlQ29uY2VhbGVkIjsKKyAgICBjYXNlIGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlRnJvemVuOgorICAgICAgcmV0dXJuICJBcHBsaWNhdGlvblN0YXRlRnJvemVuIjsKKyAgICBjYXNlIGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZDoKKyAgICAgIHJldHVybiAiQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQiOworICAgIGNhc2UgYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVTdG9wcGVkOgorICAgICAgcmV0dXJuICJBcHBsaWNhdGlvblN0YXRlU3RvcHBlZCI7CiAgIH0KIAotICAgIERPTUhpZ2hSZXNUaW1lU3RhbXAgQ29udmVydFNiVGltZU1vbm90b25pY1RvRE9NSGlSZXNUaW1lU3RhbXAoCi0gICAgICBjb25zdCBET01IaWdoUmVzVGltZVN0YW1wIHRpbWVfb3JpZ2luLCBTYlRpbWVNb25vdG9uaWMgbW9ub3RvbmljX3RpbWUpIHsKLSAgICBTYlRpbWVNb25vdG9uaWMgdGltZV9kZWx0YSA9IFNiVGltZUdldE5vdygpIC0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7Ci0gICAgYmFzZTo6VGltZSBiYXNlX3RpbWUgPSBiYXNlOjpUaW1lOjpGcm9tU2JUaW1lKHRpbWVfZGVsdGEgKyBtb25vdG9uaWNfdGltZSk7Ci0gICAgcmV0dXJuIENsYW1wVGltZVN0YW1wTWluaW11bVJlc29sdXRpb24oYmFzZV90aW1lLlRvSnNUaW1lKCkgLSB0aW1lX29yaWdpbiwKLSAgICAgICAgUGVyZm9ybWFuY2U6OmtQZXJmb3JtYW5jZVRpbWVyTWluUmVzb2x1dGlvbkluTWljcm9zZWNvbmRzKTsKLSAgfQorICBOT1RSRUFDSEVEKCkgPDwgInN0YXRlID0gIiA8PCBzdGF0ZTsKKyAgcmV0dXJuICJJTlZBTElEX0FQUExJQ0FUSU9OX1NUQVRFIjsKK30KKworRE9NSGlnaFJlc1RpbWVTdGFtcCBDb252ZXJ0U2JUaW1lTW9ub3RvbmljVG9ET01IaVJlc1RpbWVTdGFtcCgKKyAgICBjb25zdCBET01IaWdoUmVzVGltZVN0YW1wIHRpbWVfb3JpZ2luLCBTYlRpbWVNb25vdG9uaWMgbW9ub3RvbmljX3RpbWUpIHsKKyAgU2JUaW1lTW9ub3RvbmljIHRpbWVfZGVsdGEgPSBTYlRpbWVHZXROb3coKSAtIFNiVGltZUdldE1vbm90b25pY05vdygpOworICBiYXNlOjpUaW1lIGJhc2VfdGltZSA9IGJhc2U6OlRpbWU6OkZyb21TYlRpbWUodGltZV9kZWx0YSArIG1vbm90b25pY190aW1lKTsKKyAgcmV0dXJuIENsYW1wVGltZVN0YW1wTWluaW11bVJlc29sdXRpb24oCisgICAgICBiYXNlX3RpbWUuVG9Kc1RpbWUoKSAtIHRpbWVfb3JpZ2luLAorICAgICAgUGVyZm9ybWFuY2U6OmtQZXJmb3JtYW5jZVRpbWVyTWluUmVzb2x1dGlvbkluTWljcm9zZWNvbmRzKTsKK30KIAogfSAgLy8gbmFtZXNwYWNlCiAKQEAgLTk2LDggKzk2LDcgQEAKIH0KIAogc3RkOjpzdHJpbmcgUGVyZm9ybWFuY2VMaWZlY3ljbGVUaW1pbmc6Omxhc3Rfc3RhdGUoKSBjb25zdCB7Ci0gIHJldHVybiBUcmFuc2xhdGVBcHBsaWNhdGlvblN0YXRlVG9TdHJpbmcoCi0gICAgICBsaWZlY3ljbGVfdGltaW5nX2luZm9fLmxhc3Rfc3RhdGUpOworICByZXR1cm4gVHJhbnNsYXRlQXBwbGljYXRpb25TdGF0ZVRvU3RyaW5nKGxpZmVjeWNsZV90aW1pbmdfaW5mb18ubGFzdF9zdGF0ZSk7CiB9CiAKIHZvaWQgUGVyZm9ybWFuY2VMaWZlY3ljbGVUaW1pbmc6OlNldEFwcGxpY2F0aW9uU3RhdGUoCkBAIC0xMTIsMTAgKzExMSwxMCBAQAogICAgICAgfSBlbHNlIGlmIChHZXRDdXJyZW50U3RhdGUoKSA9PSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZUNvbmNlYWxlZCkgewogICAgICAgICBsaWZlY3ljbGVfdGltaW5nX2luZm9fLmFwcF9yZXZlYWwgPSB0aW1lc3RhbXA7CiAgICAgICB9IGVsc2UgewotICAgICAgICBETE9HKElORk8pIDw8ICJDdXJyZW50IFN0YXRlOiAiIDw8Ci0gICAgICAgICAgICBUcmFuc2xhdGVBcHBsaWNhdGlvblN0YXRlVG9TdHJpbmcoR2V0Q3VycmVudFN0YXRlKCkpOwotICAgICAgICBETE9HKElORk8pIDw8ICJOZXh0IFN0YXRlOiAiIDw8Ci0gICAgICAgICAgICBUcmFuc2xhdGVBcHBsaWNhdGlvblN0YXRlVG9TdHJpbmcoc3RhdGUpOworICAgICAgICBETE9HKElORk8pIDw8ICJDdXJyZW50IFN0YXRlOiAiCisgICAgICAgICAgICAgICAgICAgPDwgVHJhbnNsYXRlQXBwbGljYXRpb25TdGF0ZVRvU3RyaW5nKEdldEN1cnJlbnRTdGF0ZSgpKTsKKyAgICAgICAgRExPRyhJTkZPKSA8PCAiTmV4dCBTdGF0ZTogIgorICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zbGF0ZUFwcGxpY2F0aW9uU3RhdGVUb1N0cmluZyhzdGF0ZSk7CiAgICAgICAgIE5PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBhcHBsaWNhdGlvbiBzdGF0ZSB0cmFuc2l0aW9uLiI7CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTEyNiwxMCArMTI1LDEwIEBACiAgICAgICB9IGVsc2UgaWYgKEdldEN1cnJlbnRTdGF0ZSgpID09IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlRnJvemVuKSB7CiAgICAgICAgIGxpZmVjeWNsZV90aW1pbmdfaW5mb18uYXBwX3VuZnJlZXplID0gdGltZXN0YW1wOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgRExPRyhJTkZPKSA8PCAiQ3VycmVudCBTdGF0ZTogIiA8PAotICAgICAgICAgICAgVHJhbnNsYXRlQXBwbGljYXRpb25TdGF0ZVRvU3RyaW5nKEdldEN1cnJlbnRTdGF0ZSgpKTsKLSAgICAgICAgRExPRyhJTkZPKSA8PCAiTmV4dCBTdGF0ZTogIiA8PAotICAgICAgICAgICAgVHJhbnNsYXRlQXBwbGljYXRpb25TdGF0ZVRvU3RyaW5nKHN0YXRlKTsKKyAgICAgICAgRExPRyhJTkZPKSA8PCAiQ3VycmVudCBTdGF0ZTogIgorICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zbGF0ZUFwcGxpY2F0aW9uU3RhdGVUb1N0cmluZyhHZXRDdXJyZW50U3RhdGUoKSk7CisgICAgICAgIERMT0coSU5GTykgPDwgIk5leHQgU3RhdGU6ICIKKyAgICAgICAgICAgICAgICAgICA8PCBUcmFuc2xhdGVBcHBsaWNhdGlvblN0YXRlVG9TdHJpbmcoc3RhdGUpOwogICAgICAgICBOT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgYXBwbGljYXRpb24gc3RhdGUgdHJhbnNpdGlvbi4iOwogICAgICAgfQogICAgICAgYnJlYWs7CkBAIC0xMzgsNyArMTM3LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVTdGFydGVkOgogICAgICAgaWYgKEdldEN1cnJlbnRTdGF0ZSgpID09IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlQmx1cnJlZCkgewotICAgICAgICBpZiAobGlmZWN5Y2xlX3RpbWluZ19pbmZvXy5hcHBfcHJlbG9hZCAhPSAwKSB7CisgICAgICAgIGlmIChsaWZlY3ljbGVfdGltaW5nX2luZm9fLmFwcF9zdGFydCA9PSAwKSB7CiAgICAgICAgICAgbGlmZWN5Y2xlX3RpbWluZ19pbmZvXy5hcHBfc3RhcnQgPSB0aW1lc3RhbXA7CiAgICAgICAgIH0KICAgICAgICAgbGlmZWN5Y2xlX3RpbWluZ19pbmZvXy5hcHBfZm9jdXMgPSB0aW1lc3RhbXA7CkBAIC0xNzYsMTkgKzE3NSwxNyBAQAogCiB2b2lkIFBlcmZvcm1hbmNlTGlmZWN5Y2xlVGltaW5nOjpTZXRMaWZlY3ljbGVUaW1pbmdJbmZvU3RhdGUoCiAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBzdGF0ZSkgewotICBsaWZlY3ljbGVfdGltaW5nX2luZm9fLmxhc3Rfc3RhdGUgPQotICAgICAgbGlmZWN5Y2xlX3RpbWluZ19pbmZvXy5jdXJyZW50X3N0YXRlOworICBsaWZlY3ljbGVfdGltaW5nX2luZm9fLmxhc3Rfc3RhdGUgPSBsaWZlY3ljbGVfdGltaW5nX2luZm9fLmN1cnJlbnRfc3RhdGU7CiAgIGxpZmVjeWNsZV90aW1pbmdfaW5mb18uY3VycmVudF9zdGF0ZSA9IHN0YXRlOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlTGlmZWN5Y2xlVGltaW5nOjpSZXBvcnRET01IaWdoUmVzVGltZVN0YW1wKAogICAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIGNvbnN0IHsKICAgaWYgKHRpbWVzdGFtcCAhPSAwKSB7Ci0gICAgcmV0dXJuIENvbnZlcnRTYlRpbWVNb25vdG9uaWNUb0RPTUhpUmVzVGltZVN0YW1wKHRpbWVfb3JpZ2luXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wKTsKKyAgICByZXR1cm4gQ29udmVydFNiVGltZU1vbm90b25pY1RvRE9NSGlSZXNUaW1lU3RhbXAodGltZV9vcmlnaW5fLCB0aW1lc3RhbXApOwogICB9CiAgIHJldHVybiBQZXJmb3JtYW5jZUVudHJ5OjpzdGFydF90aW1lKCk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBkb20KLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX25hdmlnYXRpb25fdGltaW5nLmNjIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZjM2ViCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5jYwpAQCAtMCwwICsxLDkyIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvZG9tL3BlcmZvcm1hbmNlX25hdmlnYXRpb25fdGltaW5nLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9wZXJmb3JtYW5jZS5oIgorCisjaW5jbHVkZSAiY29iYWx0L2RvbS9kb2N1bWVudC5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSBkb20geworCituYW1lc3BhY2UgeworLy8gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9yZXNvdXJjZS10aW1pbmctMi8jZG9tLXBlcmZvcm1hbmNlcmVzb3VyY2V0aW1pbmctaW5pdGlhdG9ydHlwZQorY29uc3QgY2hhciBrUGVyZm9ybWFuY2VOYXZpZ2F0aW9uSW5pdGlhdG9yVHlwZVtdID0gIm5hdmlnYXRpb24iOworfSAgLy8gbmFtZXNwYWNlCisKK1BlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZzo6UGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKAorICAgIGNvbnN0IG5ldDo6TG9hZFRpbWluZ0luZm8mIHRpbWluZ19pbmZvLCBjb25zdCBzdGQ6OnN0cmluZyYgcmVxdWVzdGVkX3VybCwKKyAgICBQZXJmb3JtYW5jZSogcGVyZm9ybWFuY2UsIERvY3VtZW50KiBkb2N1bWVudCwgYmFzZTo6VGltZVRpY2tzIHRpbWVfb3JpZ2luKQorICAgIDogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyh0aW1pbmdfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1BlcmZvcm1hbmNlTmF2aWdhdGlvbkluaXRpYXRvclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZF91cmwsIHBlcmZvcm1hbmNlLCB0aW1lX29yaWdpbiksCisgICAgICBkb2N1bWVudF8oYmFzZTo6QXNXZWFrUHRyKGRvY3VtZW50KSksCisgICAgICB0aW1lX29yaWdpbl8odGltZV9vcmlnaW4pIHt9CisKK3N0ZDo6c3RyaW5nIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZzo6aW5pdGlhdG9yX3R5cGUoKSBjb25zdCB7CisgIHJldHVybiBrUGVyZm9ybWFuY2VOYXZpZ2F0aW9uSW5pdGlhdG9yVHlwZTsKK30KKworRE9NSGlnaFJlc1RpbWVTdGFtcCBQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6OnVubG9hZF9ldmVudF9zdGFydCgpIGNvbnN0IHsKKyAgYmFzZTo6VGltZVRpY2tzIHN0YXJ0X3RpbWUgPSBkb2N1bWVudF8tPkdldERvY3VtZW50VW5sb2FkRXZlbnRTdGFydFRpbWUoKTsKKyAgaWYgKHN0YXJ0X3RpbWUuaXNfbnVsbCgpKSB7CisgICAgcmV0dXJuIDAuMDsKKyAgfQorCisgIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbl8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lKTsKK30KKworRE9NSGlnaFJlc1RpbWVTdGFtcCBQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6OnVubG9hZF9ldmVudF9lbmQoKSBjb25zdCB7CisgIGJhc2U6OlRpbWVUaWNrcyBlbmRfdGltZSA9IGRvY3VtZW50Xy0+R2V0RG9jdW1lbnRVbmxvYWRFdmVudEVuZFRpbWUoKTsKKyAgaWYgKGVuZF90aW1lLmlzX251bGwoKSkgeworICAgIHJldHVybiAwLjA7CisgIH0KKworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAodGltZV9vcmlnaW5fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWUpOworfQorCitET01IaWdoUmVzVGltZVN0YW1wCitQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6OmRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9zdGFydCgpIGNvbnN0IHsKKyAgcmV0dXJuIGRvY3VtZW50Xy0+R2V0RG9jdW1lbnRDb250ZW50TG9hZGVkRXZlbnRTdGFydFRpbWUoKTsKK30KKworRE9NSGlnaFJlc1RpbWVTdGFtcCBQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6OmRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQoKQorICAgIGNvbnN0IHsKKyAgcmV0dXJuIGRvY3VtZW50Xy0+R2V0RG9jdW1lbnRDb250ZW50TG9hZGVkRXZlbnRFbmRUaW1lKCk7Cit9CisKK0RPTUhpZ2hSZXNUaW1lU3RhbXAgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nOjpkb21fY29tcGxldGUoKSBjb25zdCB7CisgIHJldHVybiBkb2N1bWVudF8tPkdldERvY3VtZW50RG9tQ29tcGxldGVUaW1lKCk7Cit9CisKK0RPTUhpZ2hSZXNUaW1lU3RhbXAgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nOjpsb2FkX2V2ZW50X3N0YXJ0KCkgY29uc3QgeworICByZXR1cm4gZG9jdW1lbnRfLT5HZXREb2N1bWVudExvYWRFdmVudFN0YXJ0VGltZSgpOworfQorCitET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZzo6bG9hZF9ldmVudF9lbmQoKSBjb25zdCB7CisgIHJldHVybiBkb2N1bWVudF8tPkdldERvY3VtZW50TG9hZEV2ZW50RW5kVGltZSgpOworfQorCitOYXZpZ2F0aW9uVHlwZSBQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6OnR5cGUoKSBjb25zdCB7CisgIHJldHVybiBkb2N1bWVudF8tPkdldE5hdmlnYXRpb25UeXBlKCk7Cit9CisKK0RPTUhpZ2hSZXNUaW1lU3RhbXAgUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nOjpkdXJhdGlvbigpIGNvbnN0IHsKKyAgcmV0dXJuIGxvYWRfZXZlbnRfZW5kKCkgLSBzdGFydF90aW1lKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBkb20KK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl90aW1pbmcuaCBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl90aW1pbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIxYTRiCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5oCkBAIC0wLDAgKzEsNzggQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfRE9NX1BFUkZPUk1BTkNFX05BVklHQVRJT05fVElNSU5HX0hfCisjZGVmaW5lIENPQkFMVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9USU1JTkdfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvbWVtb3J5L3dlYWtfcHRyLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9uYXZpZ2F0aW9uX3R5cGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL3BlcmZvcm1hbmNlX2VudHJ5LmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9oaWdoX3Jlc29sdXRpb25fdGltZS5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vcGVyZm9ybWFuY2VfcmVzb3VyY2VfdGltaW5nLmgiCisKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgorI2luY2x1ZGUgIm5ldC9iYXNlL2xvYWRfdGltaW5nX2luZm8uaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgZG9tIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBQZXJmb3JtYW5jZTsKKworLy8gSW1wbGVtZW50cyB0aGUgUGVyZm9ybWFuY2UgTmF2aWdhdGlvbiBUaW1pbmcgSURMIGludGVyZmFjZSwgYXMgZGVzY3JpYmVkCisvLyBoZXJlOgorLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvbmF2aWdhdGlvbi10aW1pbmctMi8KK2NsYXNzIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyA6IHB1YmxpYyBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nIHsKKyBwdWJsaWM6CisgIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyhjb25zdCBuZXQ6OkxvYWRUaW1pbmdJbmZvJiB0aW1pbmdfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0ZWRfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlLCBEb2N1bWVudCogZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lVGlja3MgdGltZV9vcmlnaW4pOworCisgIC8vIFdlYiBBUEkuCisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgdW5sb2FkX2V2ZW50X3N0YXJ0KCkgY29uc3Q7CisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgdW5sb2FkX2V2ZW50X2VuZCgpIGNvbnN0OworICBET01IaWdoUmVzVGltZVN0YW1wIGRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9zdGFydCgpIGNvbnN0OworICBET01IaWdoUmVzVGltZVN0YW1wIGRvbV9jb250ZW50X2xvYWRlZF9ldmVudF9lbmQoKSBjb25zdDsKKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBkb21fY29tcGxldGUoKSBjb25zdDsKKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCBsb2FkX2V2ZW50X3N0YXJ0KCkgY29uc3Q7CisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgbG9hZF9ldmVudF9lbmQoKSBjb25zdDsKKyAgTmF2aWdhdGlvblR5cGUgdHlwZSgpIGNvbnN0OworCisgIC8vIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcgb3ZlcnJpZGVzLgorICBzdGQ6OnN0cmluZyBpbml0aWF0b3JfdHlwZSgpIGNvbnN0IG92ZXJyaWRlOworCisgIC8vIFBlcmZvcm1hbmNlRW50cnkgb3ZlcnJpZGVzLiBSZXR1cm4gYSB0aW1lc3RhbXAgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UKKyAgLy8gYmV0d2VlbiBsb2FkRXZlbnRFbmQgYW5kIGl0cyBzdGFydFRpbWUuCisgIERPTUhpZ2hSZXNUaW1lU3RhbXAgZHVyYXRpb24oKSBjb25zdCBvdmVycmlkZTsKKworICBzdGQ6OnN0cmluZyBlbnRyeV90eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIm5hdmlnYXRpb24iOyB9CisgIFBlcmZvcm1hbmNlRW50cnlUeXBlIEVudHJ5VHlwZUVudW0oKSBjb25zdCBvdmVycmlkZSB7CisgICAgcmV0dXJuIFBlcmZvcm1hbmNlRW50cnk6OmtOYXZpZ2F0aW9uOworICB9CisKKyAgREVGSU5FX1dSQVBQQUJMRV9UWVBFKFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyk7CisKKyBwcml2YXRlOgorICBiYXNlOjpXZWFrUHRyPERvY3VtZW50PiBkb2N1bWVudF87CisgIGJhc2U6OlRpbWVUaWNrcyB0aW1lX29yaWdpbl87CisKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyk7Cit9OworfSAgLy8gbmFtZXNwYWNlIGRvbQorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9ET01fUEVSRk9STUFOQ0VfTkFWSUdBVElPTl9USU1JTkdfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl90aW1pbmcuaWRsIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9uYXZpZ2F0aW9uX3RpbWluZy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4M2NjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfbmF2aWdhdGlvbl90aW1pbmcuaWRsCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjIvV0QtbmF2aWdhdGlvbi10aW1pbmctMi0yMDIyMDIyNC8KKworW0V4cG9zZWQ9V2luZG93XQoraW50ZXJmYWNlIFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyA6IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcgeworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCB1bmxvYWRFdmVudFN0YXJ0OworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCB1bmxvYWRFdmVudEVuZDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIERPTUhpZ2hSZXNUaW1lU3RhbXAgZG9tQ29tcGxldGU7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01IaWdoUmVzVGltZVN0YW1wIGxvYWRFdmVudFN0YXJ0OworICByZWFkb25seSBhdHRyaWJ1dGUgRE9NSGlnaFJlc1RpbWVTdGFtcCBsb2FkRXZlbnRFbmQ7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYXZpZ2F0aW9uVHlwZSAgICAgIHR5cGU7Cit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9vYnNlcnZlci5jYyBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2Vfb2JzZXJ2ZXIuY2MKaW5kZXggNmUwODU1YS4uZjZjYWYzMCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9vYnNlcnZlci5jYworKysgYi9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX29ic2VydmVyLmNjCkBAIC0zMCwxMiArMzAsMTggQEAKIC8vIEltcGxlbWVudCB0aGUgQ2FsbGJhY2tJbnRlcm5hbCBpbnRlcmZhY2UgZm9yIGEgSmF2YVNjcmlwdCBjYWxsYmFjay4KIGNsYXNzIFNjcmlwdENhbGxiYWNrIDogcHVibGljIFBlcmZvcm1hbmNlT2JzZXJ2ZXI6OkNhbGxiYWNrSW50ZXJuYWwgewogIHB1YmxpYzoKLSAgU2NyaXB0Q2FsbGJhY2soY29uc3QgUGVyZm9ybWFuY2VPYnNlcnZlcjo6UGVyZm9ybWFuY2VPYnNlcnZlckNhbGxiYWNrQXJnJiBjYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgIFNjcmlwdENhbGxiYWNrKAorICAgICAgY29uc3QgUGVyZm9ybWFuY2VPYnNlcnZlcjo6UGVyZm9ybWFuY2VPYnNlcnZlckNhbGxiYWNrQXJnJiBjYWxsYmFjaywKKyAgICAgIFBlcmZvcm1hbmNlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICAgOiBjYWxsYmFja18ob2JzZXJ2ZXIsIGNhbGxiYWNrKSB7fQotICBib29sIFJ1bkNhbGxiYWNrKGNvbnN0IHNjb3BlZF9yZWZwdHI8UGVyZm9ybWFuY2VPYnNlcnZlckVudHJ5TGlzdD4mIGVudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU9ic2VydmVyPiYgb2JzZXJ2ZXIpIG92ZXJyaWRlIHsKLSAgICBzY3JpcHQ6OkNhbGxiYWNrUmVzdWx0PHZvaWQ+IHJlc3VsdCA9IGNhbGxiYWNrXy52YWx1ZSgpLlJ1bihlbnRyaWVzLCBvYnNlcnZlcik7CisgIGJvb2wgUnVuQ2FsbGJhY2soCisgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3Q+JiBlbnRyaWVzLAorICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU9ic2VydmVyPiYgb2JzZXJ2ZXIpIG92ZXJyaWRlIHsKKyAgICAvLyBTY3JpcHRDYWxsYmFjaydzIGxpZmV0aW1lIGlzIGJpbmVkIHdpdGggSlMgUGVyZm9ybWFuY2VPYnNlcnZlciBvYmplY3QuIFdlCisgICAgLy8gc2hvdWxkIG5vdCBydW4gY2FsbGJhY2ssIFdoZW4gSlMgb2JqZWN0IGhhcyBiZWVuIGRlc3Ryb3llZC4KKyAgICBpZiAoY2FsbGJhY2tfLnJlZmVyZW5jZWRfdmFsdWUoKS5Jc051bGwoKSkgcmV0dXJuIGZhbHNlOworICAgIHNjcmlwdDo6Q2FsbGJhY2tSZXN1bHQ8dm9pZD4gcmVzdWx0ID0KKyAgICAgICAgY2FsbGJhY2tfLnZhbHVlKCkuUnVuKGVudHJpZXMsIG9ic2VydmVyKTsKICAgICByZXR1cm4gIXJlc3VsdC5leGNlcHRpb247CiAgIH0KIApAQCAtNDksOCArNTUsOSBAQAogICBleHBsaWNpdCBOYXRpdmVDYWxsYmFjaygKICAgICAgIGNvbnN0IFBlcmZvcm1hbmNlT2JzZXJ2ZXI6Ok5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjayYgY2FsbGJhY2spCiAgICAgICA6IGNhbGxiYWNrXyhjYWxsYmFjaykge30KLSAgYm9vbCBSdW5DYWxsYmFjayhjb25zdCBzY29wZWRfcmVmcHRyPFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3Q+JiBlbnRyaWVzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8UGVyZm9ybWFuY2VPYnNlcnZlcj4mIG9ic2VydmVyKSBvdmVycmlkZSB7CisgIGJvb2wgUnVuQ2FsbGJhY2soCisgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFBlcmZvcm1hbmNlT2JzZXJ2ZXJFbnRyeUxpc3Q+JiBlbnRyaWVzLAorICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxQZXJmb3JtYW5jZU9ic2VydmVyPiYgb2JzZXJ2ZXIpIG92ZXJyaWRlIHsKICAgICBjYWxsYmFja18uUnVuKGVudHJpZXMsIG9ic2VydmVyKTsKICAgICByZXR1cm4gdHJ1ZTsKICAgfQpAQCAtNjUsOCArNzIsOCBAQAogICAgIGNvbnN0IE5hdGl2ZVBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjayYgbmF0aXZlX2NhbGxiYWNrLAogICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8UGVyZm9ybWFuY2U+JiBwZXJmb3JtYW5jZSkKICAgICA6IHBlcmZvcm1hbmNlXyhiYXNlOjpBc1dlYWtQdHIocGVyZm9ybWFuY2UuZ2V0KCkpKSwKLSAgICBvYnNlcnZlcl90eXBlXyhQZXJmb3JtYW5jZU9ic2VydmVyVHlwZTo6a1VuZGVmaW5lZCksCi0gICAgaXNfcmVnaXN0ZXJlZF8oZmFsc2UpIHsKKyAgICAgIG9ic2VydmVyX3R5cGVfKFBlcmZvcm1hbmNlT2JzZXJ2ZXJUeXBlOjprVW5kZWZpbmVkKSwKKyAgICAgIGlzX3JlZ2lzdGVyZWRfKGZhbHNlKSB7CiAgIGNhbGxiYWNrXy5yZXNldChuZXcgTmF0aXZlQ2FsbGJhY2sobmF0aXZlX2NhbGxiYWNrKSk7CiB9CiAKQEAgLTc0LDE5ICs4MSwxOSBAQAogICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52X3NldHRpbmdzLAogICAgIGNvbnN0IFBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFja0FyZyYgY2FsbGJhY2spCiAgICAgOiBwZXJmb3JtYW5jZV8oCi0gICAgICAgICAgYmFzZTo6QXNXZWFrUHRyKGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oCi0gICAgICAgICAgZW52X3NldHRpbmdzKQotICAgICAgICAgIC0+d2luZG93KCkKLSAgICAgICAgICAtPnBlcmZvcm1hbmNlKCkuZ2V0KCkpKSwKLSAgICBvYnNlcnZlcl90eXBlXyhQZXJmb3JtYW5jZU9ic2VydmVyVHlwZTo6a1VuZGVmaW5lZCksCi0gICAgaXNfcmVnaXN0ZXJlZF8oZmFsc2UpIHsKKyAgICAgICAgICBiYXNlOjpBc1dlYWtQdHIoYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8RE9NU2V0dGluZ3MqPihlbnZfc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPndpbmRvdygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnBlcmZvcm1hbmNlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoKSkpLAorICAgICAgb2JzZXJ2ZXJfdHlwZV8oUGVyZm9ybWFuY2VPYnNlcnZlclR5cGU6OmtVbmRlZmluZWQpLAorICAgICAgaXNfcmVnaXN0ZXJlZF8oZmFsc2UpIHsKICAgY2FsbGJhY2tfLnJlc2V0KG5ldyBTY3JpcHRDYWxsYmFjayhjYWxsYmFjaywgdGhpcykpOwogfQogCiBQZXJmb3JtYW5jZU9ic2VydmVyOjp+UGVyZm9ybWFuY2VPYnNlcnZlcigpIHt9CiAKIHZvaWQgUGVyZm9ybWFuY2VPYnNlcnZlcjo6T2JzZXJ2ZShjb25zdCBQZXJmb3JtYW5jZU9ic2VydmVySW5pdCYgb3B0aW9ucywKLSAgICBzY3JpcHQ6OkV4Y2VwdGlvblN0YXRlKiBleGNlcHRpb25fc3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQ6OkV4Y2VwdGlvblN0YXRlKiBleGNlcHRpb25fc3RhdGUpIHsKICAgLy8gVGhlIGFsZ29yaXRobSBmb3IgcmVnaXN0ZXJpbmcgdGhlIG9ic2VydmVyLgogICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDE5L1dELXBlcmZvcm1hbmNlLXRpbWVsaW5lLTItMjAxOTEwMjQvI29ic2VydmUtbWV0aG9kCiAgIC8vIDEuICBMZXQgb2JzZXJ2ZXIgYmUgdGhlIGNvbnRleHQgb2JqZWN0LgpAQCAtMTAzLDggKzExMCw3IEBACiAgIH0KICAgLy8gNC4gIElmIG9wdGlvbnMncyBlbnRyeVR5cGVzIGlzIHByZXNlbnQgYW5kIGFueSBvdGhlciBtZW1iZXIgaXMgYWxzbwogICAvLyBwcmVzZW50LCB0aGVuIHRocm93IGEgU3ludGF4RXJyb3IuCi0gIGJvb2wgZW50cnlfdHlwZXNfcHJlc2VudCA9IGhhc19lbnRyeV90eXBlcyAmJgotICAgICAhb3B0aW9ucy5lbnRyeV90eXBlcygpLmVtcHR5KCk7CisgIGJvb2wgZW50cnlfdHlwZXNfcHJlc2VudCA9IGhhc19lbnRyeV90eXBlcyAmJiAhb3B0aW9ucy5lbnRyeV90eXBlcygpLmVtcHR5KCk7CiAgIGJvb2wgdHlwZV9wcmVzZW50ID0gaGFzX3R5cGUgJiYgIW9wdGlvbnMudHlwZSgpLmVtcHR5KCk7CiAgIGlmIChlbnRyeV90eXBlc19wcmVzZW50ICYmIHR5cGVfcHJlc2VudCkgewogICAgIERPTUV4Y2VwdGlvbjo6UmFpc2UoRE9NRXhjZXB0aW9uOjprU3ludGF4RXJyLCBleGNlcHRpb25fc3RhdGUpOwpAQCAtMTMxLDggKzEzNyw3IEBACiAgIH0KICAgLy8gNS4zICBJZiBvYnNlcnZlcidzIG9ic2VydmVyIHR5cGUgaXMgIm11bHRpcGxlIiBhbmQgb3B0aW9ucydzIHR5cGUgbWVtYmVyCiAgIC8vIGlzIHByZXNlbnQsIHRoZW4gdGhyb3cgYW4gSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yLgotICBpZiAob2JzZXJ2ZXJfdHlwZV8gPT0gUGVyZm9ybWFuY2VPYnNlcnZlclR5cGU6OmtNdWx0aXBsZSAmJgotICAgICAgdHlwZV9wcmVzZW50KSB7CisgIGlmIChvYnNlcnZlcl90eXBlXyA9PSBQZXJmb3JtYW5jZU9ic2VydmVyVHlwZTo6a011bHRpcGxlICYmIHR5cGVfcHJlc2VudCkgewogICAgIERPTUV4Y2VwdGlvbjo6UmFpc2UoRE9NRXhjZXB0aW9uOjprSW52YWxpZE1vZGlmaWNhdGlvbkVyciwgZXhjZXB0aW9uX3N0YXRlKTsKICAgfQogICAvLyA2ICBJZiBvYnNlcnZlcidzIG9ic2VydmVyIHR5cGUgaXMgIm11bHRpcGxlIiwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CkBAIC0xNTAsNyArMTU1LDcgQEAKICAgICAgICAgZW50cnlfdHlwZXMucHVzaF9iYWNrKGVudHJ5X3R5cGVfc3RyaW5nKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIERMT0coV0FSTklORykgPDwgIlRoZSBlbnRyeSB0eXBlICIgKyBlbnRyeV90eXBlX3N0cmluZyArCi0gICAgICAgICAgICAiIGRvZXMgbm90IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZC4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvZXMgbm90IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZC4iOwogICAgICAgfQogICAgIH0KICAgICAvLyA2LjMgIElmIHRoZSByZXN1bHRpbmcgZW50cnkgdHlwZXMgc2VxdWVuY2UgaXMgYW4gZW1wdHkgc2VxdWVuY2UsCkBAIC0xNjgsMTYgKzE3MywxNiBAQAogICAgIGlmIChpc19yZWdpc3RlcmVkXykgewogICAgICAgcGVyZm9ybWFuY2VfLT5SZXBsYWNlUmVnaXN0ZXJlZFBlcmZvcm1hbmNlT2JzZXJ2ZXJPcHRpb25zTGlzdCgKICAgICAgICAgICBiYXNlOjpXcmFwUmVmQ291bnRlZCh0aGlzKSwgb3B0aW9ucyk7Ci0gICAgLy8gNi41ICBPdGhlcndpc2UsIGNyZWF0ZSBhbmQgYXBwZW5kIGEgcmVnaXN0ZXJlZCBwZXJmb3JtYW5jZSBvYnNlcnZlcgotICAgIC8vIG9iamVjdCB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIHBlcmZvcm1hbmNlIG9ic2VydmVyIG9iamVjdHMgb2YKLSAgICAvLyByZWxldmFudEdsb2JhbCwgd2l0aCBvYnNlcnZlciBzZXQgdG8gdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBvcHRpb25zIGxpc3QKLSAgICAvLyBzZXQgdG8gYSBsaXN0IGNvbnRhaW5pbmcgb3B0aW9ucyBhcyBpdHMgb25seSBpdGVtLgorICAgICAgLy8gNi41ICBPdGhlcndpc2UsIGNyZWF0ZSBhbmQgYXBwZW5kIGEgcmVnaXN0ZXJlZCBwZXJmb3JtYW5jZSBvYnNlcnZlcgorICAgICAgLy8gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgcGVyZm9ybWFuY2Ugb2JzZXJ2ZXIgb2JqZWN0cyBvZgorICAgICAgLy8gcmVsZXZhbnRHbG9iYWwsIHdpdGggb2JzZXJ2ZXIgc2V0IHRvIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgb3B0aW9ucworICAgICAgLy8gbGlzdCBzZXQgdG8gYSBsaXN0IGNvbnRhaW5pbmcgb3B0aW9ucyBhcyBpdHMgb25seSBpdGVtLgogICAgIH0gZWxzZSB7Ci0gICAgICBwZXJmb3JtYW5jZV8tPlJlZ2lzdGVyUGVyZm9ybWFuY2VPYnNlcnZlcigKLSAgICAgICAgICBiYXNlOjpXcmFwUmVmQ291bnRlZCh0aGlzKSwgb3B0aW9ucyk7CisgICAgICBwZXJmb3JtYW5jZV8tPlJlZ2lzdGVyUGVyZm9ybWFuY2VPYnNlcnZlcihiYXNlOjpXcmFwUmVmQ291bnRlZCh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMpOwogICAgICAgaXNfcmVnaXN0ZXJlZF8gPSB0cnVlOwogICAgIH0KLSAgLy8gNy4gIE90aGVyd2lzZSwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gNy4gIE90aGVyd2lzZSwgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CiAgIH0gZWxzZSB7CiAgICAgLy8gNy4xICBBc3NlcnQgdGhhdCBvYnNlcnZlcidzIG9ic2VydmVyIHR5cGUgaXMgInNpbmdsZSIuCiAgICAgRENIRUNLKG9ic2VydmVyX3R5cGVfID09IFBlcmZvcm1hbmNlT2JzZXJ2ZXJUeXBlOjprU2luZ2xlKTsKQEAgLTE4NSwxMCArMTkwLDEwIEBACiAgICAgLy8gYXJyYXkgb2Ygc3VwcG9ydGVkIGVudHJ5IHR5cGVzLCBhYm9ydCB0aGVzZSBzdGVwcy4gVGhlIHVzZXIgYWdlbnQgU0hPVUxECiAgICAgLy8gbm90aWZ5IGRldmVsb3BlcnMgd2hlbiB0aGlzIGhhcHBlbnMsIGZvciBpbnN0YW5jZSB2aWEgYSBjb25zb2xlIHdhcm5pbmcuCiAgICAgUGVyZm9ybWFuY2VFbnRyeVR5cGUgb3B0aW9uc190eXBlID0KLSAgICAgICAgICBQZXJmb3JtYW5jZUVudHJ5OjpUb0VudHJ5VHlwZUVudW0ob3B0aW9ucy50eXBlKCkpOworICAgICAgICBQZXJmb3JtYW5jZUVudHJ5OjpUb0VudHJ5VHlwZUVudW0ob3B0aW9ucy50eXBlKCkpOwogICAgIGlmIChvcHRpb25zX3R5cGUgPT0gUGVyZm9ybWFuY2VFbnRyeTo6a0ludmFsaWQpIHsKICAgICAgIERMT0coV0FSTklORykgPDwgIlRoZSB0eXBlICIgKyBvcHRpb25zLnR5cGUoKSArCi0gICAgICAgICAgICAiIGRvZXMgbm90IGV4aXN0IG9yIGlzbid0IHN1cHBvcnRlZC4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBleGlzdCBvciBpc24ndCBzdXBwb3J0ZWQuIjsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gNy4zICBJZiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIHBlcmZvcm1hbmNlIG9ic2VydmVyIG9iamVjdHMgb2YKQEAgLTIwMSwxMyArMjA2LDEzIEBACiAgICAgICAvLyA3LjMuMiAgT3RoZXJ3aXNlLCBhcHBlbmQgb3B0aW9ucyB0byBvYnMncyBvcHRpb25zIGxpc3QuCiAgICAgICBwZXJmb3JtYW5jZV8tPlVwZGF0ZVJlZ2lzdGVyZWRQZXJmb3JtYW5jZU9ic2VydmVyT3B0aW9uc0xpc3QoCiAgICAgICAgICAgYmFzZTo6V3JhcFJlZkNvdW50ZWQodGhpcyksIG9wdGlvbnMpOwotICAgIC8vIDcuNCAgT3RoZXJ3aXNlLCBjcmVhdGUgYW5kIGFwcGVuZCBhIHJlZ2lzdGVyZWQgcGVyZm9ybWFuY2Ugb2JzZXJ2ZXIKLSAgICAvLyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBwZXJmb3JtYW5jZSBvYnNlcnZlciBvYmplY3RzIG9mCi0gICAgLy8gcmVsZXZhbnRHbG9iYWwsIHdpdGggb2JzZXJ2ZXIgc2V0IHRvIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgb3B0aW9ucwotICAgIC8vIGxpc3Qgc2V0IHRvIGEgbGlzdCBjb250YWluaW5nIG9wdGlvbnMgYXMgaXRzIG9ubHkgaXRlbS4KKyAgICAgIC8vIDcuNCAgT3RoZXJ3aXNlLCBjcmVhdGUgYW5kIGFwcGVuZCBhIHJlZ2lzdGVyZWQgcGVyZm9ybWFuY2Ugb2JzZXJ2ZXIKKyAgICAgIC8vIG9iamVjdCB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIHBlcmZvcm1hbmNlIG9ic2VydmVyIG9iamVjdHMgb2YKKyAgICAgIC8vIHJlbGV2YW50R2xvYmFsLCB3aXRoIG9ic2VydmVyIHNldCB0byB0aGUgY29udGV4dCBvYmplY3QgYW5kIG9wdGlvbnMKKyAgICAgIC8vIGxpc3Qgc2V0IHRvIGEgbGlzdCBjb250YWluaW5nIG9wdGlvbnMgYXMgaXRzIG9ubHkgaXRlbS4KICAgICB9IGVsc2UgewotICAgICAgcGVyZm9ybWFuY2VfLT5SZWdpc3RlclBlcmZvcm1hbmNlT2JzZXJ2ZXIoCi0gICAgICAgICAgYmFzZTo6V3JhcFJlZkNvdW50ZWQodGhpcyksIG9wdGlvbnMpOworICAgICAgcGVyZm9ybWFuY2VfLT5SZWdpc3RlclBlcmZvcm1hbmNlT2JzZXJ2ZXIoYmFzZTo6V3JhcFJlZkNvdW50ZWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKICAgICAgIGlzX3JlZ2lzdGVyZWRfID0gdHJ1ZTsKICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfcmVzb3VyY2VfdGltaW5nLmNjIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuY2MKaW5kZXggMTFkYWMzOS4uNGY3YmJhNSAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuY2MKKysrIGIvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuY2MKQEAgLTE5LDcgKzE5LDcgQEAKIG5hbWVzcGFjZSBkb20gewogCiBuYW1lc3BhY2UgewotICBjb25zdCBzdGQ6OnN0cmluZyBrUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZ0NhY2hlTW9kZSA9ICJsb2NhbCI7Citjb25zdCBjaGFyIGtQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nQ2FjaGVNb2RlW10gPSAibG9jYWwiOwogfQogCiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nOjpQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nKApAQCAtMzEsMTcgKzMxLDE3IEBACiAgICAgY29uc3QgbmV0OjpMb2FkVGltaW5nSW5mbyYgdGltaW5nX2luZm8sIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbml0aWF0b3JfdHlwZSwKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVxdWVzdGVkX3VybCwgUGVyZm9ybWFuY2UqIHBlcmZvcm1hbmNlLAogICAgIGJhc2U6OlRpbWVUaWNrcyB0aW1lX29yaWdpbikKLSAgICA6IFBlcmZvcm1hbmNlRW50cnkoCi0gICAgICAgICAgcmVxdWVzdGVkX3VybCwKLSAgICAgICAgICBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbiwKLSAgICAgICAgICAgICAgdGltaW5nX2luZm8ucmVxdWVzdF9zdGFydCksCi0gICAgICAgICAgUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAodGltZV9vcmlnaW4sCi0gICAgICAgICAgICAgIHRpbWluZ19pbmZvLnJlY2VpdmVfaGVhZGVyc19lbmQpKSwKKyAgICA6IFBlcmZvcm1hbmNlRW50cnkocmVxdWVzdGVkX3VybCwKKyAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX29yaWdpbiwgdGltaW5nX2luZm8ucmVxdWVzdF9zdGFydCksCisgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlOjpNb25vdG9uaWNUaW1lVG9ET01IaWdoUmVzVGltZVN0YW1wKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9vcmlnaW4sIHRpbWluZ19pbmZvLnJlY2VpdmVfaGVhZGVyc19lbmQpKSwKICAgICAgIGluaXRpYXRvcl90eXBlXyhpbml0aWF0b3JfdHlwZSksCiAgICAgICBjYWNoZV9tb2RlXyhrUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZ0NhY2hlTW9kZSksCiAgICAgICB0cmFuc2Zlcl9zaXplXygwKSwKICAgICAgIHRpbWluZ19pbmZvXyh0aW1pbmdfaW5mbyksCi0gICAgICB0aW1lX29yaWdpbl8odGltZV9vcmlnaW4pIHt9CisgICAgICB0aW1lX29yaWdpbl8odGltZV9vcmlnaW4pLAorICAgICAgdGltaW5nX2luZm9fcmVzcG9uc2VfZW5kXyhwZXJmb3JtYW5jZS0+Tm93KCkpIHt9CiAKIHN0ZDo6c3RyaW5nIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OmluaXRpYXRvcl90eXBlKCkgY29uc3QgewogICByZXR1cm4gaW5pdGlhdG9yX3R5cGVfOwpAQCAtNTEsNzEgKzUxLDcxIEBACiAgIGlmICh0aW1pbmdfaW5mb18ucmVxdWVzdF9zdGFydC5pc19udWxsKCkpIHsKICAgICByZXR1cm4gUGVyZm9ybWFuY2VFbnRyeTo6c3RhcnRfdGltZSgpOwogICB9Ci0gIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbl8sCi0gICAgICB0aW1pbmdfaW5mb18ucmVxdWVzdF9zdGFydCk7CisgIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCgKKyAgICAgIHRpbWVfb3JpZ2luXywgdGltaW5nX2luZm9fLnJlcXVlc3Rfc3RhcnQpOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OmRvbWFpbl9sb29rdXBfc3RhcnQoKSBjb25zdCB7CiAgIGlmICh0aW1pbmdfaW5mb18uY29ubmVjdF90aW1pbmcuZG5zX3N0YXJ0LmlzX251bGwoKSkgewogICAgIHJldHVybiBQZXJmb3JtYW5jZUVudHJ5OjpzdGFydF90aW1lKCk7CiAgIH0KLSAgcmV0dXJuIFBlcmZvcm1hbmNlOjpNb25vdG9uaWNUaW1lVG9ET01IaWdoUmVzVGltZVN0YW1wKHRpbWVfb3JpZ2luXywKLSAgICAgIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5kbnNfc3RhcnQpOworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICB0aW1lX29yaWdpbl8sIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5kbnNfc3RhcnQpOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OmRvbWFpbl9sb29rdXBfZW5kKCkgY29uc3QgewogICBpZiAodGltaW5nX2luZm9fLmNvbm5lY3RfdGltaW5nLmRuc19lbmQuaXNfbnVsbCgpKSB7CiAgICAgcmV0dXJuIFBlcmZvcm1hbmNlRW50cnk6OnN0YXJ0X3RpbWUoKTsKICAgfQotICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAodGltZV9vcmlnaW5fLAotICAgICAgdGltaW5nX2luZm9fLmNvbm5lY3RfdGltaW5nLmRuc19lbmQpOworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICB0aW1lX29yaWdpbl8sIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5kbnNfZW5kKTsKIH0KIAogRE9NSGlnaFJlc1RpbWVTdGFtcCBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nOjpjb25uZWN0X3N0YXJ0KCkgY29uc3QgewogICBpZiAodGltaW5nX2luZm9fLmNvbm5lY3RfdGltaW5nLmNvbm5lY3Rfc3RhcnQuaXNfbnVsbCgpKSB7CiAgICAgcmV0dXJuIFBlcmZvcm1hbmNlRW50cnk6OnN0YXJ0X3RpbWUoKTsKICAgfQotICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAodGltZV9vcmlnaW5fLAotICAgICAgdGltaW5nX2luZm9fLmNvbm5lY3RfdGltaW5nLmNvbm5lY3Rfc3RhcnQpOworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICB0aW1lX29yaWdpbl8sIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5jb25uZWN0X3N0YXJ0KTsKIH0KIAogRE9NSGlnaFJlc1RpbWVTdGFtcCBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nOjpjb25uZWN0X2VuZCgpIGNvbnN0IHsKICAgaWYgKHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5jb25uZWN0X2VuZC5pc19udWxsKCkpIHsKICAgICByZXR1cm4gUGVyZm9ybWFuY2VFbnRyeTo6c3RhcnRfdGltZSgpOwogICB9Ci0gIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbl8sCi0gICAgICB0aW1pbmdfaW5mb18uY29ubmVjdF90aW1pbmcuY29ubmVjdF9lbmQpOworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICB0aW1lX29yaWdpbl8sIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5jb25uZWN0X2VuZCk7CiB9CiAKIERPTUhpZ2hSZXNUaW1lU3RhbXAgUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZzo6c2VjdXJlX2Nvbm5lY3Rpb25fc3RhcnQoKSBjb25zdCB7CiAgIGlmICh0aW1pbmdfaW5mb18uY29ubmVjdF90aW1pbmcuc3NsX3N0YXJ0LmlzX251bGwoKSkgewogICAgIHJldHVybiAwLjA7CiAgIH0KLSAgcmV0dXJuIFBlcmZvcm1hbmNlOjpNb25vdG9uaWNUaW1lVG9ET01IaWdoUmVzVGltZVN0YW1wKHRpbWVfb3JpZ2luXywKLSAgICAgIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5zc2xfc3RhcnQpOworICByZXR1cm4gUGVyZm9ybWFuY2U6Ok1vbm90b25pY1RpbWVUb0RPTUhpZ2hSZXNUaW1lU3RhbXAoCisgICAgICB0aW1lX29yaWdpbl8sIHRpbWluZ19pbmZvXy5jb25uZWN0X3RpbWluZy5zc2xfc3RhcnQpOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OnJlcXVlc3Rfc3RhcnQoKSBjb25zdCB7CiAgIGlmICh0aW1pbmdfaW5mb18uc2VuZF9zdGFydC5pc19udWxsKCkpIHsKICAgICByZXR1cm4gUGVyZm9ybWFuY2VFbnRyeTo6c3RhcnRfdGltZSgpOwogICB9Ci0gIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbl8sCi0gICAgICB0aW1pbmdfaW5mb18uc2VuZF9zdGFydCk7CisgIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCgKKyAgICAgIHRpbWVfb3JpZ2luXywgdGltaW5nX2luZm9fLnNlbmRfc3RhcnQpOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OnJlc3BvbnNlX3N0YXJ0KCkgY29uc3QgewogICBpZiAodGltaW5nX2luZm9fLnJlY2VpdmVfaGVhZGVyc19lbmQuaXNfbnVsbCgpKSB7CiAgICAgUGVyZm9ybWFuY2VFbnRyeTo6c3RhcnRfdGltZSgpOwogICB9Ci0gIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCh0aW1lX29yaWdpbl8sCi0gICAgICB0aW1pbmdfaW5mb18ucmVjZWl2ZV9oZWFkZXJzX2VuZCk7CisgIHJldHVybiBQZXJmb3JtYW5jZTo6TW9ub3RvbmljVGltZVRvRE9NSGlnaFJlc1RpbWVTdGFtcCgKKyAgICAgIHRpbWVfb3JpZ2luXywgdGltaW5nX2luZm9fLnJlY2VpdmVfaGVhZGVyc19lbmQpOwogfQogCiBET01IaWdoUmVzVGltZVN0YW1wIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OnJlc3BvbnNlX2VuZCgpIGNvbnN0IHsKLSAgcmV0dXJuIHJlc3BvbnNlX3N0YXJ0KCk7CisgIHJldHVybiB0aW1pbmdfaW5mb19yZXNwb25zZV9lbmRfOwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZzo6dHJhbnNmZXJfc2l6ZSgpIGNvbnN0IHsKK3VpbnQ2NF90IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6OnRyYW5zZmVyX3NpemUoKSBjb25zdCB7CiAgIHJldHVybiB0cmFuc2Zlcl9zaXplXzsKIH0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuaCBiL2NvYmFsdC9kb20vcGVyZm9ybWFuY2VfcmVzb3VyY2VfdGltaW5nLmgKaW5kZXggY2FiM2M0OC4uYjllZDc2MyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wZXJmb3JtYW5jZV9yZXNvdXJjZV90aW1pbmcuaAorKysgYi9jb2JhbHQvZG9tL3BlcmZvcm1hbmNlX3Jlc291cmNlX3RpbWluZy5oCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZVRpY2tzIHRpbWVfb3JpZ2luKTsKIAogICAvLyBXZWIgQVBJLgotICBzdGQ6OnN0cmluZyBpbml0aWF0b3JfdHlwZSgpIGNvbnN0OworICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGluaXRpYXRvcl90eXBlKCkgY29uc3Q7CiAgIERPTUhpZ2hSZXNUaW1lU3RhbXAgZmV0Y2hfc3RhcnQoKSBjb25zdDsKICAgRE9NSGlnaFJlc1RpbWVTdGFtcCBkb21haW5fbG9va3VwX3N0YXJ0KCkgY29uc3Q7CiAgIERPTUhpZ2hSZXNUaW1lU3RhbXAgZG9tYWluX2xvb2t1cF9lbmQoKSBjb25zdDsKQEAgLTUyLDExICs1MiwxMCBAQAogICBET01IaWdoUmVzVGltZVN0YW1wIHNlY3VyZV9jb25uZWN0aW9uX3N0YXJ0KCkgY29uc3Q7CiAgIERPTUhpZ2hSZXNUaW1lU3RhbXAgcmVxdWVzdF9zdGFydCgpIGNvbnN0OwogICBET01IaWdoUmVzVGltZVN0YW1wIHJlc3BvbnNlX3N0YXJ0KCkgY29uc3Q7Ci0gIC8vIEFzIHdlIGRvbid0IGhhdmUgcmVzcG9uc2Ugc3RhcnQgaW4gTG9hZFRpbWluZ0luZm8sIHdlIHVzZQotICAvLyByZXNwb25zZSBzdGFydCBpbnN0ZWFkLgotICAvLyBUT0RPOiBBZGQgcmVzcG9uc2VfZW5kIGludG8gTG9hZFRpbWluZ0luZm8uCisgIC8vIEFzIHdlIGRvbid0IGhhdmUgcmVzcG9uc2UgZW5kIGluIExvYWRUaW1pbmdJbmZvLCB3ZSBjb2xsZWN0IHRoZSB0aW1lc3RhbXAKKyAgLy8gb2YgbG9hZGluZyBjb21wbGV0ZXMgaW5zdGVhZC4KICAgRE9NSGlnaFJlc1RpbWVTdGFtcCByZXNwb25zZV9lbmQoKSBjb25zdDsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHRyYW5zZmVyX3NpemUoKSBjb25zdDsKKyAgdWludDY0X3QgdHJhbnNmZXJfc2l6ZSgpIGNvbnN0OwogCiAgIHN0ZDo6c3RyaW5nIGVudHJ5X3R5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAicmVzb3VyY2UiOyB9CiAgIFBlcmZvcm1hbmNlRW50cnlUeXBlIEVudHJ5VHlwZUVudW0oKSBjb25zdCBvdmVycmlkZSB7CkBAIC03Nyw2ICs3Niw3IEBACiAgIHN0ZDo6c3RyaW5nIHJlcXVlc3RlZF91cmxfOwogICBuZXQ6OkxvYWRUaW1pbmdJbmZvIHRpbWluZ19pbmZvXzsKICAgYmFzZTo6VGltZVRpY2tzIHRpbWVfb3JpZ2luXzsKKyAgRE9NSGlnaFJlc1RpbWVTdGFtcCB0aW1pbmdfaW5mb19yZXNwb25zZV9lbmRfOwogCiAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nKTsKIH07CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3BvaW50ZXJfc3RhdGUuY2MgYi9jb2JhbHQvZG9tL3BvaW50ZXJfc3RhdGUuY2MKaW5kZXggN2IyYjJiNC4uNDlhZTg0MiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9wb2ludGVyX3N0YXRlLmNjCisrKyBiL2NvYmFsdC9kb20vcG9pbnRlcl9zdGF0ZS5jYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vcG9pbnRlcl9zdGF0ZS5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9tb3VzZV9ldmVudC5oIgpAQCAtMjcsNyArMjgsNyBAQAogCiB2b2lkIFBvaW50ZXJTdGF0ZTo6UXVldWVQb2ludGVyRXZlbnQoY29uc3Qgc2NvcGVkX3JlZnB0cjxFdmVudD4mIGV2ZW50KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpkb20iLCAiUG9pbnRlclN0YXRlOjpRdWV1ZVBvaW50ZXJFdmVudCgpIiwgImV2ZW50IiwKLSAgICAgICAgICAgICAgIGV2ZW50LT50eXBlKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICBUUkFDRV9TVFJfQ09QWShldmVudC0+dHlwZSgpLmNfc3RyKCkpKTsKIAogICAvLyBPbmx5IGFjY2VwdCB0aGlzIGZvciBldmVudCB0eXBlcyB0aGF0IGFyZSBNb3VzZUV2ZW50cyBvciBrbm93biBkZXJpdmF0aXZlcy4KICAgU0JfRENIRUNLKENhblF1ZXVlRXZlbnQoZXZlbnQpKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vcnVsZV9tYXRjaGluZ190ZXN0LmNjIGIvY29iYWx0L2RvbS9ydWxlX21hdGNoaW5nX3Rlc3QuY2MKaW5kZXggZGFmOTA1Zi4uZTk1NzNlMCAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS9ydWxlX21hdGNoaW5nX3Rlc3QuY2MKKysrIGIvY29iYWx0L2RvbS9ydWxlX21hdGNoaW5nX3Rlc3QuY2MKQEAgLTE1OCw2ICsxNTgsNDcgQEAKICAgICAgICAgICAgICgqbWF0Y2hpbmdfcnVsZXMpWzBdLmZpcnN0KTsKIH0KIAorLy8gW2F0dHI9dmFsdWVdIHNob3VsZCBtYXRjaCA8ZGl2IGF0dHI9InZhbHVlIi8+LgorVEVTVF9GKFJ1bGVNYXRjaGluZ1Rlc3QsIEF0dHJpYnV0ZVNlbGVjdG9yTWF0Y2hlc0ZpcnN0T25lKSB7CisgIGhlYWRfLT5zZXRfaW5uZXJfaHRtbCgiPHN0eWxlPlthdHRyPXZhbHVlXSB7fSBbYXR0cj12YWx1ZTJdIHt9IHt9PC9zdHlsZT4iKTsKKyAgYm9keV8tPnNldF9pbm5lcl9odG1sKCI8ZGl2IGF0dHI9XCJ2YWx1ZVwiLz4iKTsKKyAgVXBkYXRlQWxsTWF0Y2hpbmdSdWxlcygpOworCisgIGNzc29tOjpSdWxlc1dpdGhDYXNjYWRlUHJlY2VkZW5jZSogbWF0Y2hpbmdfcnVsZXMgPQorICAgICAgYm9keV8tPmZpcnN0X2VsZW1lbnRfY2hpbGQoKS0+QXNIVE1MRWxlbWVudCgpLT5tYXRjaGluZ19ydWxlcygpOworICBBU1NFUlRfRVEoMSwgbWF0Y2hpbmdfcnVsZXMtPnNpemUoKSk7CisgIEVYUEVDVF9FUShHZXREb2N1bWVudFN0eWxlU2hlZXQoMCktPmNzc19ydWxlc19zYW1lX29yaWdpbigpLT5JdGVtKDApLAorICAgICAgICAgICAgKCptYXRjaGluZ19ydWxlcylbMF0uZmlyc3QpOworfQorCisvLyBbYXR0cj12YWx1ZV0gc2hvdWxkIG1hdGNoIDxkaXYgYXR0cj0idmFsdWUiLz4uCitURVNUX0YoUnVsZU1hdGNoaW5nVGVzdCwgQXR0cmlidXRlU2VsZWN0b3JNYXRjaGVzU2Vjb25kT25lKSB7CisgIGhlYWRfLT5zZXRfaW5uZXJfaHRtbCgKKyAgICAgICI8c3R5bGU+W2F0dHI9dmFsdWUxXSB7fSBbYXR0cj12YWx1ZV0ge30gW2F0dHI9dmFsdWUyXSB7fTwvc3R5bGU+Iik7CisgIGJvZHlfLT5zZXRfaW5uZXJfaHRtbCgiPGRpdiBhdHRyPVwidmFsdWVcIi8+Iik7CisgIFVwZGF0ZUFsbE1hdGNoaW5nUnVsZXMoKTsKKworICBjc3NvbTo6UnVsZXNXaXRoQ2FzY2FkZVByZWNlZGVuY2UqIG1hdGNoaW5nX3J1bGVzID0KKyAgICAgIGJvZHlfLT5maXJzdF9lbGVtZW50X2NoaWxkKCktPkFzSFRNTEVsZW1lbnQoKS0+bWF0Y2hpbmdfcnVsZXMoKTsKKyAgQVNTRVJUX0VRKDEsIG1hdGNoaW5nX3J1bGVzLT5zaXplKCkpOworICBFWFBFQ1RfRVEoR2V0RG9jdW1lbnRTdHlsZVNoZWV0KDApLT5jc3NfcnVsZXNfc2FtZV9vcmlnaW4oKS0+SXRlbSgxKSwKKyAgICAgICAgICAgICgqbWF0Y2hpbmdfcnVsZXMpWzBdLmZpcnN0KTsKK30KKworLy8gW2F0dHI9dmFsdWVdIHNob3VsZCBtYXRjaCA8ZGl2IGF0dHI9InZhbHVlIi8+LgorVEVTVF9GKFJ1bGVNYXRjaGluZ1Rlc3QsIEF0dHJpYnV0ZVNlbGVjdG9yTWF0Y2hlc0xhc3RPbmUpIHsKKyAgaGVhZF8tPnNldF9pbm5lcl9odG1sKAorICAgICAgIjxzdHlsZT5bYXR0cj12YWx1ZTFdIHt9IFthdHRyPXZhbHVlMl0ge30gW2F0dHI9dmFsdWVdIHt9PC9zdHlsZT4iKTsKKyAgYm9keV8tPnNldF9pbm5lcl9odG1sKCI8ZGl2IGF0dHI9XCJ2YWx1ZVwiLz4iKTsKKyAgVXBkYXRlQWxsTWF0Y2hpbmdSdWxlcygpOworCisgIGNzc29tOjpSdWxlc1dpdGhDYXNjYWRlUHJlY2VkZW5jZSogbWF0Y2hpbmdfcnVsZXMgPQorICAgICAgYm9keV8tPmZpcnN0X2VsZW1lbnRfY2hpbGQoKS0+QXNIVE1MRWxlbWVudCgpLT5tYXRjaGluZ19ydWxlcygpOworICBBU1NFUlRfRVEoMSwgbWF0Y2hpbmdfcnVsZXMtPnNpemUoKSk7CisgIEVYUEVDVF9FUShHZXREb2N1bWVudFN0eWxlU2hlZXQoMCktPmNzc19ydWxlc19zYW1lX29yaWdpbigpLT5JdGVtKDIpLAorICAgICAgICAgICAgKCptYXRjaGluZ19ydWxlcylbMF0uZmlyc3QpOworfQorCiAvLyBbYXR0cj0idmFsdWUiXSBzaG91bGQgbWF0Y2ggPGRpdiBhdHRyPSJ2YWx1ZSIvPi4KIFRFU1RfRihSdWxlTWF0Y2hpbmdUZXN0LCBBdHRyaWJ1dGVTZWxlY3Rvck1hdGNoRXF1YWxzV2l0aFF1b3RlKSB7CiAgIGhlYWRfLT5zZXRfaW5uZXJfaHRtbCgiPHN0eWxlPlthdHRyPVwidmFsdWVcIl0ge308L3N0eWxlPiIpOwpAQCAtMjU3LDcgKzI5OCw3IEBACiAgIGhlYWRfLT5zZXRfaW5uZXJfaHRtbCgiPHN0eWxlPjpmb2N1cyB7fTwvc3R5bGU+Iik7CiAgIGJvZHlfLT5zZXRfaW5uZXJfaHRtbCgiPGRpdiB0YWJJbmRleD1cIi0xXCIvPiIpOwogICBib2R5Xy0+Zmlyc3RfZWxlbWVudF9jaGlsZCgpLT5Bc0hUTUxFbGVtZW50KCktPkZvY3VzKCk7Ci0gIC8vIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBSdW5Gb2N1c2luZ1N0ZXBzKCkgZWFybGllcyBvdXQgYXMgYSByZXN1bHQgb2YgdGhlCisgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBSdW5Gb2N1c2luZ1N0ZXBzKCkgZWFybGllc3Qgb3V0IGFzIGEgcmVzdWx0IG9mIHRoZQogICAvLyBkb2N1bWVudCBub3QgaGF2aW5nIGEgYnJvd3NpbmcgY29udGV4dC4KICAgcm9vdF8tPkludmFsaWRhdGVNYXRjaGluZ1J1bGVzUmVjdXJzaXZlbHkoKTsKICAgVXBkYXRlQWxsTWF0Y2hpbmdSdWxlcygpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9zY3JlZW5zaG90X21hbmFnZXIuY2MgYi9jb2JhbHQvZG9tL3NjcmVlbnNob3RfbWFuYWdlci5jYwppbmRleCBiN2FhMDQzLi4wNDgzMjU5IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3NjcmVlbnNob3RfbWFuYWdlci5jYworKysgYi9jb2JhbHQvZG9tL3NjcmVlbnNob3RfbWFuYWdlci5jYwpAQCAtMTUsMTIgKzE1LDE1IEBACiAjaW5jbHVkZSAiY29iYWx0L2RvbS9zY3JlZW5zaG90X21hbmFnZXIuaCIKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogCiAjaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL3NjcmVlbnNob3QuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvbm9kZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9yZXNvdXJjZV9wcm92aWRlcl9zdHViLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9hcnJheV9idWZmZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIGRvbSB7CkBAIC05NiwxMSArOTksMTIgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBETE9HKElORk8pIDw8ICJGaWxsaW5nIGRhdGEgaW4gZm9yIHRoZSBzY3JlZW5zaG90LiI7Ci0gICAgRE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihlbnZpcm9ubWVudF9zZXR0aW5nc18pOwotICAgIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6QXJyYXlCdWZmZXI+IHBpeGVsX2RhdGEgPQotICAgICAgICBzY3JpcHQ6OkFycmF5QnVmZmVyOjpOZXcoZG9tX3NldHRpbmdzLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfaW1hZ2VfZGF0YS0+R2V0TWVtb3J5KCksIGVuY29kZWRfc2l6ZSk7CisgICAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlcj4gcGl4ZWxfZGF0YSA9IHNjcmlwdDo6QXJyYXlCdWZmZXI6Ok5ldygKKyAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18pCisgICAgICAgICAgICAtPmNvbnRleHQoKQorICAgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKKyAgICAgICAgZW5jb2RlZF9pbWFnZV9kYXRhLT5HZXRNZW1vcnkoKSwgZW5jb2RlZF9zaXplKTsKICAgICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6V3JhcHBhYmxlPiBwcm9taXNlX3Jlc3VsdCA9CiAgICAgICAgIG5ldyBkb206OlNjcmVlbnNob3QocGl4ZWxfZGF0YSk7CiAgICAgcHJvbWlzZS5SZXNvbHZlKHByb21pc2VfcmVzdWx0KTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vc291cmNlX2J1ZmZlci5jYyBiL2NvYmFsdC9kb20vc291cmNlX2J1ZmZlci5jYwppbmRleCBkZTZmZDc2Li5lYTVhNTBkIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3NvdXJjZV9idWZmZXIuY2MKKysrIGIvY29iYWx0L2RvbS9zb3VyY2VfYnVmZmVyLmNjCkBAIC00OSwxMSArNDksMTIgQEAKICNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKKyNpbmNsdWRlICJiYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvdG9rZW5zLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fZXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9tZWRpYV9zb3VyY2UuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9yYW5nZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgZG9tIHsKQEAgLTY1LDcgKzY2LDcgQEAKICAgRENIRUNLX05FKHRpbWUsIC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpOwogCiAgIGlmICh0aW1lID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkgewotICAgIHJldHVybiBtZWRpYTo6a0luZmluaXRlRHVyYXRpb247CisgICAgcmV0dXJuIDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uOwogICB9CiAKICAgLy8gRG9uJ3QgdXNlIGJhc2U6OlRpbWVEZWx0YTo6TWF4KCkgaGVyZSwgYXMgd2Ugd2FudCB0aGUgbGFyZ2VzdCBmaW5pdGUgdGltZQpAQCAtODUsOCArODYsNyBAQAogCiBTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBNZWRpYVNvdXJjZSogbWVkaWFfc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OkNodW5rRGVtdXhlciogY2h1bmtfZGVtdXhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50UXVldWUqIGV2ZW50X3F1ZXVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyLCBFdmVudFF1ZXVlKiBldmVudF9xdWV1ZSkKICAgICA6IEV2ZW50VGFyZ2V0KHNldHRpbmdzKSwKICAgICAgIGlkXyhpZCksCiAgICAgICBjaHVua19kZW11eGVyXyhjaHVua19kZW11eGVyKSwKQEAgLTEwNCw2ICsxMDQsMTEgQEAKICAgY2h1bmtfZGVtdXhlcl8tPlNldFRyYWNrc1dhdGNoZXIoCiAgICAgICBpZF8sCiAgICAgICBiYXNlOjpCaW5kKCZTb3VyY2VCdWZmZXI6OkluaXRTZWdtZW50UmVjZWl2ZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKKyAgY2h1bmtfZGVtdXhlcl8tPlNldFBhcnNlV2FybmluZ0NhbGxiYWNrKAorICAgICAgaWQsIGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oOjptZWRpYTo6U291cmNlQnVmZmVyUGFyc2VXYXJuaW5nIHdhcm5pbmcpIHsKKyAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBTb3VyY2VCdWZmZXJQYXJzZVdhcm5pbmcgIgorICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50Pih3YXJuaW5nKTsKKyAgICAgIH0pKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OnNldF9tb2RlKFNvdXJjZUJ1ZmZlckFwcGVuZE1vZGUgbW9kZSwKQEAgLTEzNyw3ICsxNDIsNyBAQAogICB9CiAKICAgc2NvcGVkX3JlZnB0cjxUaW1lUmFuZ2VzPiB0aW1lX3JhbmdlcyA9IG5ldyBUaW1lUmFuZ2VzOwotICBtZWRpYTo6UmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gcmFuZ2VzID0KKyAgOjptZWRpYTo6UmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gcmFuZ2VzID0KICAgICAgIGNodW5rX2RlbXV4ZXJfLT5HZXRCdWZmZXJlZFJhbmdlcyhpZF8pOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlcy5zaXplKCk7IGkrKykgewogICAgIHRpbWVfcmFuZ2VzLT5BZGQocmFuZ2VzLnN0YXJ0KGkpLkluU2Vjb25kc0YoKSwgcmFuZ2VzLmVuZChpKS5JblNlY29uZHNGKCkpOwpAQCAtMjE1LDYgKzIyMCw4IEBACiAKIHZvaWQgU291cmNlQnVmZmVyOjpBcHBlbmRCdWZmZXIoY29uc3Qgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlcj4mIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdDo6RXhjZXB0aW9uU3RhdGUqIGV4Y2VwdGlvbl9zdGF0ZSkgeworICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6ZG9tIiwgIlNvdXJjZUJ1ZmZlcjo6QXBwZW5kQnVmZmVyKCkiLCAic2l6ZSIsCisgICAgICAgICAgICAgICBkYXRhLT5CeXRlTGVuZ3RoKCkpOwogICBBcHBlbmRCdWZmZXJJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS0+RGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Qnl0ZUxlbmd0aCgpLCBleGNlcHRpb25fc3RhdGUpOwogfQpAQCAtMjIyLDExICsyMjksMTUgQEAKIHZvaWQgU291cmNlQnVmZmVyOjpBcHBlbmRCdWZmZXIoCiAgICAgY29uc3Qgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpBcnJheUJ1ZmZlclZpZXc+JiBkYXRhLAogICAgIHNjcmlwdDo6RXhjZXB0aW9uU3RhdGUqIGV4Y2VwdGlvbl9zdGF0ZSkgeworICBUUkFDRV9FVkVOVDEoImNvYmFsdDo6ZG9tIiwgIlNvdXJjZUJ1ZmZlcjo6QXBwZW5kQnVmZmVyKCkiLCAic2l6ZSIsCisgICAgICAgICAgICAgICBkYXRhLT5CeXRlTGVuZ3RoKCkpOwogICBBcHBlbmRCdWZmZXJJbnRlcm5hbChzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YS0+UmF3RGF0YSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Qnl0ZUxlbmd0aCgpLCBleGNlcHRpb25fc3RhdGUpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6QWJvcnQoc2NyaXB0OjpFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojpkb20iLCAiU291cmNlQnVmZmVyOjpBYm9ydCgpIik7CisKICAgaWYgKG1lZGlhX3NvdXJjZV8gPT0gTlVMTCkgewogICAgIERPTUV4Y2VwdGlvbjo6UmFpc2UoRE9NRXhjZXB0aW9uOjprSW52YWxpZFN0YXRlRXJyLCBleGNlcHRpb25fc3RhdGUpOwogICAgIHJldHVybjsKQEAgLTQyNyw2ICs0MzgsNyBAQAogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6T25BcHBlbmRUaW1lcigpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OmRvbSIsICJTb3VyY2VCdWZmZXI6Ok9uQXBwZW5kVGltZXIoKSIpOwogICBjb25zdCBzaXplX3Qga01heEFwcGVuZFNpemUgPSAxMjggKiAxMDI0OwogCiAgIERDSEVDSyh1cGRhdGluZ18pOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS9zb3VyY2VfYnVmZmVyLmggYi9jb2JhbHQvZG9tL3NvdXJjZV9idWZmZXIuaAppbmRleCAzZjNjN2U1Li41NmRiYTkzIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3NvdXJjZV9idWZmZXIuaAorKysgYi9jb2JhbHQvZG9tL3NvdXJjZV9idWZmZXIuaApAQCAtNjIsMTIgKzYyLDEyIEBACiAjaW5jbHVkZSAiY29iYWx0L2RvbS90aW1lX3Jhbmdlcy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdHJhY2tfZGVmYXVsdF9saXN0LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS92aWRlb190cmFja19saXN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvYXJyYXlfYnVmZmVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9hcnJheV9idWZmZXJfdmlldy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2V4Y2VwdGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIGRvbSB7CkBAIC03OSwxMCArNzksMTIgQEAKIC8vICAgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTYvQ1ItbWVkaWEtc291cmNlLTIwMTYwNzA1LyNzb3VyY2VidWZmZXIKIGNsYXNzIFNvdXJjZUJ1ZmZlciA6IHB1YmxpYyBkb206OkV2ZW50VGFyZ2V0IHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6Q2h1bmtEZW11eGVyIENodW5rRGVtdXhlcjsKKwogICAvLyBDdXN0b20sIG5vdCBpbiBhbnkgc3BlYy4KICAgLy8KICAgU291cmNlQnVmZmVyKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwKLSAgICAgICAgICAgICAgIE1lZGlhU291cmNlKiBtZWRpYV9zb3VyY2UsIG1lZGlhOjpDaHVua0RlbXV4ZXIqIGNodW5rX2RlbXV4ZXIsCisgICAgICAgICAgICAgICBNZWRpYVNvdXJjZSogbWVkaWFfc291cmNlLCBDaHVua0RlbXV4ZXIqIGNodW5rX2RlbXV4ZXIsCiAgICAgICAgICAgICAgICBFdmVudFF1ZXVlKiBldmVudF9xdWV1ZSk7CiAKICAgLy8gV2ViIEFQSTogU291cmNlQnVmZmVyCkBAIC0xMzUsNyArMTM3LDcgQEAKICAgdm9pZCBUcmFjZU1lbWJlcnMoc2NyaXB0OjpUcmFjZXIqIHRyYWNlcikgb3ZlcnJpZGU7CiAKICBwcml2YXRlOgotICB0eXBlZGVmIG1lZGlhOjpNZWRpYVRyYWNrcyBNZWRpYVRyYWNrczsKKyAgdHlwZWRlZiA6Om1lZGlhOjpNZWRpYVRyYWNrcyBNZWRpYVRyYWNrczsKIAogICB2b2lkIEluaXRTZWdtZW50UmVjZWl2ZWQoc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MpOwogICB2b2lkIFNjaGVkdWxlRXZlbnQoYmFzZTo6VG9rZW4gZXZlbnRfbmFtZSk7CkBAIC0xNjQsNyArMTY2LDcgQEAKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBieXRlX3N0cmVhbV90cmFja19pZCkgY29uc3Q7CiAKICAgY29uc3Qgc3RkOjpzdHJpbmcgaWRfOwotICBtZWRpYTo6Q2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyXzsKKyAgQ2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyXzsKICAgTWVkaWFTb3VyY2UqIG1lZGlhX3NvdXJjZV87CiAgIHNjb3BlZF9yZWZwdHI8VHJhY2tEZWZhdWx0TGlzdD4gdHJhY2tfZGVmYXVsdHNfID0gbmV3IFRyYWNrRGVmYXVsdExpc3QoTlVMTCk7CiAgIEV2ZW50UXVldWUqIGV2ZW50X3F1ZXVlXzsKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vdGVzdF9ydW5uZXIuY2MgYi9jb2JhbHQvZG9tL3Rlc3RfcnVubmVyLmNjCmluZGV4IGEwM2Q3ZjIuLmQ1ZTJiNzMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vdGVzdF9ydW5uZXIuY2MKKysrIGIvY29iYWx0L2RvbS90ZXN0X3J1bm5lci5jYwpAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3BvbHltb3JwaGljX2Rvd25jYXN0LmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgZG9tIHsKQEAgLTU1LDkgKzU3LDEwIEBACiAgICAgY29uc3QgVGVzdFJ1bm5lckNhbGxiYWNrQXJnJiBjYWxsYmFja19hcmcpIHsKICAgRENIRUNLKHNldHRpbmdzKTsKICAgVGVzdFJ1bm5lckNhbGxiYWNrQXJnOjpSZWZlcmVuY2UgcmVmZXJlbmNlKHRoaXMsIGNhbGxiYWNrX2FyZyk7Ci0gIERPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKLSAgZG9tX3NldHRpbmdzLT5qYXZhc2NyaXB0X2VuZ2luZSgpLT5Db2xsZWN0R2FyYmFnZSgpOworICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqPihzZXR0aW5ncykKKyAgICAgIC0+Y29udGV4dCgpCisgICAgICAtPmphdmFzY3JpcHRfZW5naW5lKCkKKyAgICAgIC0+Q29sbGVjdEdhcmJhZ2UoKTsKICAgcmVmZXJlbmNlLnZhbHVlKCkuUnVuKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vdGVzdGluZy9CVUlMRC5nbiBiL2NvYmFsdC9kb20vdGVzdGluZy9CVUlMRC5nbgppbmRleCA2Y2M4NTk2Li41ZDkyMzQ5IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3Rlc3RpbmcvQlVJTEQuZ24KKysrIGIvY29iYWx0L2RvbS90ZXN0aW5nL0JVSUxELmduCkBAIC00Miw2ICs0Miw3IEBACiAgICAgIi8vY29iYWx0L2RvbV9wYXJzZXIiLAogICAgICIvL2NvYmFsdC9sb2FkZXIiLAogICAgICIvL2NvYmFsdC9zY3JpcHQiLAorICAgICIvL2NvYmFsdC93ZWIiLAogICAgICIvL3Rlc3RpbmcvZ21vY2siLAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICAgICIvL3VybCIsCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3Rlc3RpbmcvZG9tX3Rlc3RpbmcuZ3lwIGIvY29iYWx0L2RvbS90ZXN0aW5nL2RvbV90ZXN0aW5nLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVhMTFmMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvZG9tL3Rlc3RpbmcvZG9tX3Rlc3RpbmcuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZG9tX3Rlc3RpbmcnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdndGVzdF93b3JrYXJvdW5kcy5oJywKLSAgICAgICAgJ2h0bWxfY29sbGVjdGlvbl90ZXN0aW5nLmgnLAotICAgICAgICAnbW9ja19ldmVudF9saXN0ZW5lci5oJywKLSAgICAgICAgJ21vY2tfbGF5b3V0X2JveGVzLmgnLAotICAgICAgICAnc3R1Yl9jc3NfcGFyc2VyLmNjJywKLSAgICAgICAgJ3N0dWJfY3NzX3BhcnNlci5oJywKLSAgICAgICAgJ3N0dWJfZW52aXJvbm1lbnRfc2V0dGluZ3MuaCcsCi0gICAgICAgICdzdHViX3NjcmlwdF9ydW5uZXIuY2MnLAotICAgICAgICAnc3R1Yl9zY3JpcHRfcnVubmVyLmgnLAotICAgICAgICAnc3R1Yl93aW5kb3cuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXIuZ3lwOmJyb3dzZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5ncy5neXA6YmluZGluZ3MnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc29tL2Nzc29tLmd5cDpjc3NvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3NzX3BhcnNlci9jc3NfcGFyc2VyLmd5cDpjc3NfcGFyc2VyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb21fcGFyc2VyL2RvbV9wYXJzZXIuZ3lwOmRvbV9wYXJzZXInLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS90ZXN0aW5nL3N0dWJfZW52aXJvbm1lbnRfc2V0dGluZ3MuaCBiL2NvYmFsdC9kb20vdGVzdGluZy9zdHViX2Vudmlyb25tZW50X3NldHRpbmdzLmgKaW5kZXggOTVlZDYyMy4uYTcwZWVmMyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS90ZXN0aW5nL3N0dWJfZW52aXJvbm1lbnRfc2V0dGluZ3MuaAorKysgYi9jb2JhbHQvZG9tL3Rlc3Rpbmcvc3R1Yl9lbnZpcm9ubWVudF9zZXR0aW5ncy5oCkBAIC0yNSw4ICsyNSw4IEBACiBjbGFzcyBTdHViRW52aXJvbm1lbnRTZXR0aW5ncyA6IHB1YmxpYyBET01TZXR0aW5ncyB7CiAgcHVibGljOgogICBleHBsaWNpdCBTdHViRW52aXJvbm1lbnRTZXR0aW5ncyhjb25zdCBPcHRpb25zJiBvcHRpb25zID0gT3B0aW9ucygpKQotICAgICAgOiBET01TZXR0aW5ncygwLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxsX2RlYnVnZ2VyX2hvb2tzXywgbnVsbHB0ciwgb3B0aW9ucykge30KKyAgICAgIDogRE9NU2V0dGluZ3MobnVsbF9kZWJ1Z2dlcl9ob29rc18sIDAsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG9wdGlvbnMpIHt9CiAgIH5TdHViRW52aXJvbm1lbnRTZXR0aW5ncygpIG92ZXJyaWRlIHt9CiAKICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS90ZXN0aW5nL3N0dWJfd2luZG93LmggYi9jb2JhbHQvZG9tL3Rlc3Rpbmcvc3R1Yl93aW5kb3cuaAppbmRleCA1NmRlZjcwLi4xOTcxOTFjIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3Rlc3Rpbmcvc3R1Yl93aW5kb3cuaAorKysgYi9jb2JhbHQvZG9tL3Rlc3Rpbmcvc3R1Yl93aW5kb3cuaApAQCAtMjksMTIgKzI5LDE2IEBACiAjaW5jbHVkZSAiY29iYWx0L2Nzc29tL3ZpZXdwb3J0X3NpemUuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vbG9jYWxfc3RvcmFnZV9kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vdGVzdGluZy9zdHViX2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS93aW5kb3cuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tX3BhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvbG9hZGVyX2ZhY3RvcnkuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9zdHViX3dlYl9jb250ZXh0LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKQEAgLTQ2LDYxICs1MCw1OSBAQAogY2xhc3MgU3R1YldpbmRvdyB7CiAgcHVibGljOgogICBleHBsaWNpdCBTdHViV2luZG93KAotICAgICAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4gZW52aXJvbm1lbnRfc2V0dGluZ3MgPQotICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3M+KCkpCisgICAgICBjb25zdCBET01TZXR0aW5nczo6T3B0aW9ucyYgb3B0aW9ucyA9IERPTVNldHRpbmdzOjpPcHRpb25zKCkpCiAgICAgICA6IG1lc3NhZ2VfbG9vcF8oYmFzZTo6TWVzc2FnZUxvb3A6OlRZUEVfREVGQVVMVCksCiAgICAgICAgIGNzc19wYXJzZXJfKGNzc19wYXJzZXI6OlBhcnNlcjo6Q3JlYXRlKCkpLAogICAgICAgICBkb21fcGFyc2VyXygKICAgICAgICAgICAgIG5ldyBkb21fcGFyc2VyOjpQYXJzZXIoYmFzZTo6QmluZCgmU3R1YkxvYWRDb21wbGV0ZUNhbGxiYWNrKSkpLAotICAgICAgICBmZXRjaGVyX2ZhY3RvcnlfKG5ldyBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KE5VTEwpKSwKLSAgICAgICAgbG9hZGVyX2ZhY3RvcnlfKG5ldyBsb2FkZXI6OkxvYWRlckZhY3RvcnkoCi0gICAgICAgICAgICAiVGVzdCIsIGZldGNoZXJfZmFjdG9yeV8uZ2V0KCksIE5VTEwsIG51bGxfZGVidWdnZXJfaG9va3NfLCAwLAotICAgICAgICAgICAgYmFzZTo6VGhyZWFkUHJpb3JpdHk6OkRFRkFVTFQpKSwKICAgICAgICAgbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV8oTlVMTCksCi0gICAgICAgIHVybF8oImFib3V0OmJsYW5rIiksCiAgICAgICAgIGRvbV9zdGF0X3RyYWNrZXJfKG5ldyBkb206OkRvbVN0YXRUcmFja2VyKCJTdHViV2luZG93IikpIHsKLSAgICBlbmdpbmVfID0gc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lOjpDcmVhdGVFbmdpbmUoKTsKLSAgICBnbG9iYWxfZW52aXJvbm1lbnRfID0gZW5naW5lXy0+Q3JlYXRlR2xvYmFsRW52aXJvbm1lbnQoKTsKLSAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18gPQotICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5ncy5nZXQoKQotICAgICAgICAgICAgPyBzdGQ6Om1vdmUoZW52aXJvbm1lbnRfc2V0dGluZ3MpCi0gICAgICAgICAgICA6IHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3M+KG5ldyBET01TZXR0aW5ncygKLSAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGVuZ2luZV8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICBnbG9iYWxfZW52aXJvbm1lbnQoKSwgbnVsbF9kZWJ1Z2dlcl9ob29rc18sIE5VTEwpKTsKLSAgICB3aW5kb3dfID0gbmV3IGRvbTo6V2luZG93KAotICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCksIGNzc29tOjpWaWV3cG9ydFNpemUoMTkyMCwgMTA4MCksCi0gICAgICAgIGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZCwgY3NzX3BhcnNlcl8uZ2V0KCksIGRvbV9wYXJzZXJfLmdldCgpLAotICAgICAgICBmZXRjaGVyX2ZhY3RvcnlfLmdldCgpLCBsb2FkZXJfZmFjdG9yeV8uZ2V0KCksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgIE5VTEwsIE5VTEwsICZsb2NhbF9zdG9yYWdlX2RhdGFiYXNlXywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+c2NyaXB0X3ZhbHVlX2ZhY3RvcnkoKSwgTlVMTCwKLSAgICAgICAgZG9tX3N0YXRfdHJhY2tlcl8uZ2V0KCksIHVybF8sICIiLCBOVUxMLCAiZW4tVVMiLCAiZW4iLAotICAgICAgICBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IEdVUkwmKT4oKSwKLSAgICAgICAgYmFzZTo6QmluZCgmU3R1YkxvYWRDb21wbGV0ZUNhbGxiYWNrKSwgTlVMTCwKLSAgICAgICAgbmV0d29ya19icmlkZ2U6OlBvc3RTZW5kZXIoKSwgY3NwOjprQ1NQUmVxdWlyZWQsCi0gICAgICAgIGRvbTo6a0NzcEVuZm9yY2VtZW50RW5hYmxlLCBiYXNlOjpDbG9zdXJlKCkgLyogY3NwX3BvbGljeV9jaGFuZ2VkICovLAotICAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogcmFuX2FuaW1hdGlvbl9mcmFtZV9jYWxsYmFja3MgKi8sCi0gICAgICAgIGRvbTo6V2luZG93OjpDbG9zZUNhbGxiYWNrKCkgLyogd2luZG93X2Nsb3NlICovLAotICAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogd2luZG93X21pbmltaXplICovLCBOVUxMLCBOVUxMLAotICAgICAgICBkb206OldpbmRvdzo6T25TdGFydERpc3BhdGNoRXZlbnRDYWxsYmFjaygpLAotICAgICAgICBkb206OldpbmRvdzo6T25TdG9wRGlzcGF0Y2hFdmVudENhbGxiYWNrKCksCi0gICAgICAgIGRvbTo6U2NyZWVuc2hvdE1hbmFnZXI6OlByb3ZpZGVTY3JlZW5zaG90RnVuY3Rpb25DYWxsYmFjaygpLCBOVUxMKTsKLSAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oZW52aXJvbm1lbnRfc2V0dGluZ3NfLmdldCgpKQorICAgIHdlYl9jb250ZXh0Xy5yZXNldChuZXcgd2ViOjp0ZXN0OjpTdHViV2ViQ29udGV4dCgpKTsKKyAgICB3ZWJfY29udGV4dF8tPnNldHVwX2Vudmlyb25tZW50X3NldHRpbmdzKAorICAgICAgICBuZXcgZG9tOjp0ZXN0aW5nOjpTdHViRW52aXJvbm1lbnRTZXR0aW5ncyhvcHRpb25zKSk7CisgICAgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpLT5zZXRfYmFzZV91cmwoR1VSTCgiYWJvdXQ6YmxhbmsiKSk7CisgICAgd2ViX2NvbnRleHRfLT5zZXRfZmV0Y2hlcl9mYWN0b3J5KG5ldyBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KE5VTEwpKTsKKyAgICBsb2FkZXJfZmFjdG9yeV8ucmVzZXQobmV3IGxvYWRlcjo6TG9hZGVyRmFjdG9yeSgKKyAgICAgICAgIlRlc3QiLCB3ZWJfY29udGV4dF8tPmZldGNoZXJfZmFjdG9yeSgpLCBOVUxMLAorICAgICAgICB3ZWJfY29udGV4dF8tPmVudmlyb25tZW50X3NldHRpbmdzKCktPmRlYnVnZ2VyX2hvb2tzKCksIDAsCisgICAgICAgIGJhc2U6OlRocmVhZFByaW9yaXR5OjpERUZBVUxUKSksCisgICAgICAgIHdpbmRvd18gPSBuZXcgZG9tOjpXaW5kb3coCisgICAgICAgICAgICB3ZWJfY29udGV4dF8tPmVudmlyb25tZW50X3NldHRpbmdzKCksCisgICAgICAgICAgICBjc3NvbTo6Vmlld3BvcnRTaXplKDE5MjAsIDEwODApLCBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQsCisgICAgICAgICAgICBjc3NfcGFyc2VyXy5nZXQoKSwgZG9tX3BhcnNlcl8uZ2V0KCksCisgICAgICAgICAgICB3ZWJfY29udGV4dF8tPmZldGNoZXJfZmFjdG9yeSgpLCBsb2FkZXJfZmFjdG9yeV8uZ2V0KCksIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV8sIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBOVUxMLCBnbG9iYWxfZW52aXJvbm1lbnQoKS0+c2NyaXB0X3ZhbHVlX2ZhY3RvcnkoKSwgTlVMTCwKKyAgICAgICAgICAgIGRvbV9zdGF0X3RyYWNrZXJfLmdldCgpLAorICAgICAgICAgICAgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpLT5iYXNlX3VybCgpLCAiIiwgTlVMTCwgImVuLVVTIiwKKyAgICAgICAgICAgICJlbiIsIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgR1VSTCYpPigpLAorICAgICAgICAgICAgYmFzZTo6QmluZCgmU3R1YkxvYWRDb21wbGV0ZUNhbGxiYWNrKSwgTlVMTCwKKyAgICAgICAgICAgIG5ldHdvcmtfYnJpZGdlOjpQb3N0U2VuZGVyKCksIGNzcDo6a0NTUFJlcXVpcmVkLAorICAgICAgICAgICAgZG9tOjprQ3NwRW5mb3JjZW1lbnRFbmFibGUsCisgICAgICAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogY3NwX3BvbGljeV9jaGFuZ2VkICovLAorICAgICAgICAgICAgYmFzZTo6Q2xvc3VyZSgpIC8qIHJhbl9hbmltYXRpb25fZnJhbWVfY2FsbGJhY2tzICovLAorICAgICAgICAgICAgZG9tOjpXaW5kb3c6OkNsb3NlQ2FsbGJhY2soKSAvKiB3aW5kb3dfY2xvc2UgKi8sCisgICAgICAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogd2luZG93X21pbmltaXplICovLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgZG9tOjpXaW5kb3c6Ok9uU3RhcnREaXNwYXRjaEV2ZW50Q2FsbGJhY2soKSwKKyAgICAgICAgICAgIGRvbTo6V2luZG93OjpPblN0b3BEaXNwYXRjaEV2ZW50Q2FsbGJhY2soKSwKKyAgICAgICAgICAgIGRvbTo6U2NyZWVuc2hvdE1hbmFnZXI6OlByb3ZpZGVTY3JlZW5zaG90RnVuY3Rpb25DYWxsYmFjaygpLCBOVUxMKTsKKyAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oCisgICAgICAgIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKICAgICAgICAgLT5zZXRfd2luZG93KHdpbmRvd18pOwotICAgIGdsb2JhbF9lbnZpcm9ubWVudF8tPkNyZWF0ZUdsb2JhbE9iamVjdCh3aW5kb3dfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCkpOworICAgIGdsb2JhbF9lbnZpcm9ubWVudCgpLT5DcmVhdGVHbG9iYWxPYmplY3QoCisgICAgICAgIHdpbmRvd18sIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CiAgIH0KKyAgdmlydHVhbCB+U3R1YldpbmRvdygpIHsgd2luZG93Xy0+RGVzdHJveVRpbWVycygpOyB9CiAKICAgc2NvcGVkX3JlZnB0cjxkb206OldpbmRvdz4gd2luZG93KCkgeyByZXR1cm4gd2luZG93XzsgfQogICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudCgpIHsKLSAgICByZXR1cm4gZ2xvYmFsX2Vudmlyb25tZW50XzsKKyAgICByZXR1cm4gd2ViX2NvbnRleHRfLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKICAgfQogICBjc3NfcGFyc2VyOjpQYXJzZXIqIGNzc19wYXJzZXIoKSB7IHJldHVybiBjc3NfcGFyc2VyXy5nZXQoKTsgfQogICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIGVudmlyb25tZW50X3NldHRpbmdzKCkgewotICAgIHJldHVybiBlbnZpcm9ubWVudF9zZXR0aW5nc18uZ2V0KCk7CisgICAgcmV0dXJuIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKTsKICAgfQogCi0gIH5TdHViV2luZG93KCkgeyB3aW5kb3dfLT5EZXN0cm95VGltZXJzKCk7IH0KLQogIHByaXZhdGU6CiAgIHN0YXRpYyB2b2lkIFN0dWJMb2FkQ29tcGxldGVDYWxsYmFjaygKICAgICAgIGNvbnN0IGJhc2U6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiYgZXJyb3IpIHt9CkBAIC0xMDksMTQgKzExMSwxMCBAQAogICBiYXNlOjpOdWxsRGVidWdnZXJIb29rcyBudWxsX2RlYnVnZ2VyX2hvb2tzXzsKICAgc3RkOjp1bmlxdWVfcHRyPGNzc19wYXJzZXI6OlBhcnNlcj4gY3NzX3BhcnNlcl87CiAgIHN0ZDo6dW5pcXVlX3B0cjxkb21fcGFyc2VyOjpQYXJzZXI+IGRvbV9wYXJzZXJfOwotICBzdGQ6OnVuaXF1ZV9wdHI8bG9hZGVyOjpGZXRjaGVyRmFjdG9yeT4gZmV0Y2hlcl9mYWN0b3J5XzsKICAgc3RkOjp1bmlxdWVfcHRyPGxvYWRlcjo6TG9hZGVyRmFjdG9yeT4gbG9hZGVyX2ZhY3RvcnlfOwogICBkb206OkxvY2FsU3RvcmFnZURhdGFiYXNlIGxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfOwotICBHVVJMIHVybF87CiAgIHN0ZDo6dW5pcXVlX3B0cjxkb206OkRvbVN0YXRUcmFja2VyPiBkb21fc3RhdF90cmFja2VyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4gZW52aXJvbm1lbnRfc2V0dGluZ3NfOwotICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lPiBlbmdpbmVfOwotICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudF87CisgIHN0ZDo6dW5pcXVlX3B0cjx3ZWI6OkNvbnRleHQ+IHdlYl9jb250ZXh0XzsKICAgc2NvcGVkX3JlZnB0cjxkb206OldpbmRvdz4gd2luZG93XzsKIH07CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vdXJsLmNjIGIvY29iYWx0L2RvbS91cmwuY2MKaW5kZXggMzViZjk0Yy4uYzA4OGE0MyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS91cmwuY2MKKysrIGIvY29iYWx0L2RvbS91cmwuY2MKQEAgLTE4LDYgKzE4LDkgQEAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9tZWRpYV9zb3VyY2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAidXJsL2d1cmwuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC01MSwxNyArNTQsMTggQEAKIHN0ZDo6c3RyaW5nIFVSTDo6Q3JlYXRlT2JqZWN0VVJMKAogICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3MsCiAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxCbG9iPiYgYmxvYikgewotICBET01TZXR0aW5ncyogZG9tX3NldHRpbmdzID0KLSAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PERPTVNldHRpbmdzKj4oZW52aXJvbm1lbnRfc2V0dGluZ3MpOwotICBEQ0hFQ0soZG9tX3NldHRpbmdzKTsKLSAgRENIRUNLKGRvbV9zZXR0aW5ncy0+YmxvYl9yZWdpc3RyeSgpKTsKKyAgd2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKiB3ZWJfc2V0dGluZ3MgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MpOworICBEQ0hFQ0sod2ViX3NldHRpbmdzKTsKKyAgRENIRUNLKHdlYl9zZXR0aW5ncy0+Y29udGV4dCgpLT5ibG9iX3JlZ2lzdHJ5KCkpOwogICBpZiAoIWJsb2IpIHsKICAgICByZXR1cm4gIiI7CiAgIH0KIAogICBzdGQ6OnN0cmluZyBibG9iX3VybCA9IGtCbG9iVXJsUHJvdG9jb2w7CiAgIGJsb2JfdXJsICs9ICc6JyArIGJhc2U6OkdlbmVyYXRlR1VJRCgpOwotICBkb21fc2V0dGluZ3MtPmJsb2JfcmVnaXN0cnkoKS0+UmVnaXN0ZXIoYmxvYl91cmwsIGJsb2IpOworICB3ZWJfc2V0dGluZ3MtPmNvbnRleHQoKS0+YmxvYl9yZWdpc3RyeSgpLT5SZWdpc3RlcihibG9iX3VybCwgYmxvYik7CiAgIHJldHVybiBibG9iX3VybDsKIH0KIApAQCAtODYsNyArOTAsNyBAQAogICAvLyAyLiBPdGhlcndpc2UsIHVzZXIgYWdlbnRzIG11c3QgcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBCbG9iIFVSTCBTdG9yZSBmb3IKICAgLy8gdXJsLgogICBpZiAoIWRvbV9zZXR0aW5ncy0+bWVkaWFfc291cmNlX3JlZ2lzdHJ5KCktPlVucmVnaXN0ZXIodXJsKSAmJgotICAgICAgIWRvbV9zZXR0aW5ncy0+YmxvYl9yZWdpc3RyeSgpLT5VbnJlZ2lzdGVyKHVybCkpIHsKKyAgICAgICFkb21fc2V0dGluZ3MtPmNvbnRleHQoKS0+YmxvYl9yZWdpc3RyeSgpLT5VbnJlZ2lzdGVyKHVybCkpIHsKICAgICBETE9HKFdBUk5JTkcpIDw8ICJDYW5ub3QgZmluZCBvYmplY3QgZm9yIGJsb2IgdXJsICIgPDwgdXJsOwogICB9CiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3VybC5oIGIvY29iYWx0L2RvbS91cmwuaAppbmRleCAxODg1MTZiLi5lM2JiNzk1IDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3VybC5oCisrKyBiL2NvYmFsdC9kb20vdXJsLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAKICNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL21lZGlhX3NvdXJjZS5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvYmxvYl9mZXRjaGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCkBAIC0yNiw2ICsyNSw4IEBACiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBkb20gewogCitjbGFzcyBNZWRpYVNvdXJjZTsKKwogLy8gVGhlIFVSTCBpbnRlcmZhY2UgY29udGFpbnMgc3RhdGljIGZ1bmN0aW9ucyBDcmVhdGVPYmplY3RVUkwoKSBhbmQKIC8vIFJldm9rZU9iamVjdFVSTCgpLiAgVGhlIGZvcm1lciBpcyB1c2VkIHRvIGNyZWF0ZSB1cmxzIGluIHN0cmluZyBmcm9tCiAvLyBKYXZhU2NyaXB0IGJsb2Igb2JqZWN0cy4gIFRoZSBsYXR0ZXIgaXMgdXNlZCB0byByZXZva2UgdGhlIHVybC4KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vd2luZG93LmNjIGIvY29iYWx0L2RvbS93aW5kb3cuY2MKaW5kZXggMGRlYTAyZi4uNzFkZjY1YiAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS93aW5kb3cuY2MKKysrIGIvY29iYWx0L2RvbS93aW5kb3cuY2MKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjb2JhbHQvZG9tL2NhbWVyYV8zZC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZGV2aWNlX29yaWVudGF0aW9uX2V2ZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb2N1bWVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lbGVtZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9lcnJvcl9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZXJyb3JfZXZlbnRfaW5pdC5oIgpAQCAtNTYsNiArNTUsOCBAQAogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2phdmFzY3JpcHRfZW5naW5lLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NwZWVjaC9zcGVlY2hfc3ludGhlc2lzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCiAKIHVzaW5nIGNvYmFsdDo6Y3Nzb206OlZpZXdwb3J0U2l6ZTsKQEAgLTExMiw4ICsxMTMsNyBAQAogICAgIGNzcDo6Q1NQSGVhZGVyUG9saWN5IHJlcXVpcmVfY3NwLCBDc3BFbmZvcmNlbWVudFR5cGUgY3NwX2VuZm9yY2VtZW50X21vZGUsCiAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgY3NwX3BvbGljeV9jaGFuZ2VkX2NhbGxiYWNrLAogICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUmIHJhbl9hbmltYXRpb25fZnJhbWVfY2FsbGJhY2tzX2NhbGxiYWNrLAotICAgIGNvbnN0IENsb3NlQ2FsbGJhY2smIHdpbmRvd19jbG9zZV9jYWxsYmFjaywKLSAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiB3aW5kb3dfbWluaW1pemVfY2FsbGJhY2ssCisgICAgQ2xvc2VDYWxsYmFjayB3aW5kb3dfY2xvc2VfY2FsbGJhY2ssIGJhc2U6OkNsb3N1cmUgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAogICAgIE9uU2NyZWVuS2V5Ym9hcmRCcmlkZ2UqIG9uX3NjcmVlbl9rZXlib2FyZF9icmlkZ2UsCiAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxpbnB1dDo6Q2FtZXJhM0Q+JiBjYW1lcmFfM2QsCiAgICAgY29uc3QgT25TdGFydERpc3BhdGNoRXZlbnRDYWxsYmFjayYgb25fc3RhcnRfZGlzcGF0Y2hfZXZlbnRfY2FsbGJhY2ssCkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICBjb25zdCBsb2FkZXI6OkRlY29kZXI6Ok9uQ29tcGxldGVGdW5jdGlvbiYgbG9hZF9jb21wbGV0ZV9jYWxsYmFjaykgewogICBkb2N1bWVudF9sb2FkZXJfLnJlc2V0KG5ldyBsb2FkZXI6OkxvYWRlcigKICAgICAgIGJhc2U6OkJpbmQoJmxvYWRlcjo6RmV0Y2hlckZhY3Rvcnk6OkNyZWF0ZUZldGNoZXIsCi0gICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoZmV0Y2hlcl9mYWN0b3J5KSwgdXJsKSwKKyAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChmZXRjaGVyX2ZhY3RvcnkpLCB1cmwsIGRpc2tfY2FjaGU6OmtIVE1MKSwKICAgICAgIGJhc2U6OkJpbmQoJlBhcnNlcjo6UGFyc2VEb2N1bWVudEFzeW5jLCBiYXNlOjpVbnJldGFpbmVkKGRvbV9wYXJzZXIpLAogICAgICAgICAgICAgICAgICBkb2N1bWVudF8sIGJhc2U6OlNvdXJjZUxvY2F0aW9uKHVybC5zcGVjKCksIDEsIDEpKSwKICAgICAgIGxvYWRfY29tcGxldGVfY2FsbGJhY2spKTsKQEAgLTQ2Niw5ICs0NjYsMTAgQEAKIAogdm9pZCBXaW5kb3c6OkdjKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpIHsKICAgaWYgKHNldHRpbmdzKSB7Ci0gICAgRE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihzZXR0aW5ncyk7Ci0gICAgZG9tX3NldHRpbmdzLT5qYXZhc2NyaXB0X2VuZ2luZSgpLT5Db2xsZWN0R2FyYmFnZSgpOworICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAtPmNvbnRleHQoKQorICAgICAgICAtPmphdmFzY3JpcHRfZW5naW5lKCkKKyAgICAgICAgLT5Db2xsZWN0R2FyYmFnZSgpOwogICB9CiB9CiAKQEAgLTUwNyw3ICs1MDgsNyBAQAogCiB2b2lkIFdpbmRvdzo6SW5qZWN0RXZlbnQoY29uc3Qgc2NvcGVkX3JlZnB0cjxFdmVudD4mIGV2ZW50KSB7CiAgIFRSQUNFX0VWRU5UMSgiY29iYWx0Ojpkb20iLCAiV2luZG93OjpJbmplY3RFdmVudCgpIiwgImV2ZW50IiwKLSAgICAgICAgICAgICAgIGV2ZW50LT50eXBlKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICBUUkFDRV9TVFJfQ09QWShldmVudC0+dHlwZSgpLmNfc3RyKCkpKTsKIAogICAvLyBGb3J3YXJkIHRoZSBldmVudCBvbiB0byB0aGUgY29ycmVjdCBvYmplY3QgaW4gRE9NLgogICBpZiAoZXZlbnQtPkdldFdyYXBwYWJsZVR5cGUoKSA9PSBiYXNlOjpHZXRUeXBlSWQ8S2V5Ym9hcmRFdmVudD4oKSkgewpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbS93aW5kb3cuaCBiL2NvYmFsdC9kb20vd2luZG93LmgKaW5kZXggMjQ2OWNjMy4uMjU0ZDBlYyAxMDA2NDQKLS0tIGEvY29iYWx0L2RvbS93aW5kb3cuaAorKysgYi9jb2JhbHQvZG9tL3dpbmRvdy5oCkBAIC0xNjMsOCArMTYzLDggQEAKICAgICAgIGRvbTo6Q3NwRW5mb3JjZW1lbnRUeXBlIGNzcF9lbmZvcmNlbWVudF9tb2RlLAogICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgY3NwX3BvbGljeV9jaGFuZ2VkX2NhbGxiYWNrLAogICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgcmFuX2FuaW1hdGlvbl9mcmFtZV9jYWxsYmFja3NfY2FsbGJhY2ssCi0gICAgICBjb25zdCBDbG9zZUNhbGxiYWNrJiB3aW5kb3dfY2xvc2VfY2FsbGJhY2ssCi0gICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiB3aW5kb3dfbWluaW1pemVfY2FsbGJhY2ssCisgICAgICBDbG9zZUNhbGxiYWNrIHdpbmRvd19jbG9zZV9jYWxsYmFjaywKKyAgICAgIGJhc2U6OkNsb3N1cmUgd2luZG93X21pbmltaXplX2NhbGxiYWNrLAogICAgICAgT25TY3JlZW5LZXlib2FyZEJyaWRnZSogb25fc2NyZWVuX2tleWJvYXJkX2JyaWRnZSwKICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8aW5wdXQ6OkNhbWVyYTNEPiYgY2FtZXJhXzNkLAogICAgICAgY29uc3QgT25TdGFydERpc3BhdGNoRXZlbnRDYWxsYmFjayYKQEAgLTQxMSw2ICs0MTEsOCBAQAogCiAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8bWVkaWFfc2Vzc2lvbjo6TWVkaWFTZXNzaW9uPiBtZWRpYV9zZXNzaW9uKCkgY29uc3Q7CiAKKyAgbG9hZGVyOjpMb2FkZXIqIEdldERvY3VtZW50TG9hZGVyKCkgY29uc3QgeyByZXR1cm4gZG9jdW1lbnRfbG9hZGVyXy5nZXQoKTsgfQorCiAgIERFRklORV9XUkFQUEFCTEVfVFlQRShXaW5kb3cpOwogCiAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5jYyBiL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5jYwppbmRleCBlZjczZjg5Li45NTFmN2VlIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tL3dpbmRvd190aW1lcnMuY2MKKysrIGIvY29iYWx0L2RvbS93aW5kb3dfdGltZXJzLmNjCkBAIC00MCw4ICs0MCw5IEBACiAgIH0KIAogICBpZiAoY2FsbGJhY2tzX2FjdGl2ZV8pIHsKLSAgICBhdXRvKiB0aW1lciA9IG5ldyBUaW1lcih0eXBlLCBvd25lcl8sIGRvbV9zdGF0X3RyYWNrZXJfLCBkZWJ1Z2dlcl9ob29rc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciwgdGltZW91dCwgaGFuZGxlLCB0aGlzKTsKKyAgICBzY29wZWRfcmVmcHRyPFRpbWVyPiB0aW1lciA9CisgICAgICAgIG5ldyBUaW1lcih0eXBlLCBvd25lcl8sIGRvbV9zdGF0X3RyYWNrZXJfLCBkZWJ1Z2dlcl9ob29rc18sIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBoYW5kbGUsIHRoaXMpOwogICAgIGlmIChhcHBsaWNhdGlvbl9zdGF0ZV8gIT0gYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVGcm96ZW4pIHsKICAgICAgIHRpbWVyLT5TdGFydE9yUmVzdW1lKCk7CiAgICAgfQpAQCAtNTgsMTkgKzU5LDMxIEBACiAgIHJldHVybiBUcnlBZGROZXdUaW1lcihUaW1lcjo6a09uZVNob3QsIGhhbmRsZXIsIHRpbWVvdXQpOwogfQogCi12b2lkIFdpbmRvd1RpbWVyczo6Q2xlYXJUaW1lb3V0KGludCBoYW5kbGUpIHsgdGltZXJzXy5lcmFzZShoYW5kbGUpOyB9Cit2b2lkIFdpbmRvd1RpbWVyczo6Q2xlYXJUaW1lb3V0KGludCBoYW5kbGUpIHsKKyAgVGltZXJzOjppdGVyYXRvciB0aW1lciA9IHRpbWVyc18uZmluZChoYW5kbGUpOworICBpZiAodGltZXIgPT0gdGltZXJzXy5lbmQoKSkgeworICAgIHJldHVybjsKKyAgfQorICBpZiAodGltZXItPnNlY29uZCkgeworICAgIHRpbWVyLT5zZWNvbmQtPkRpc2FibGUoKTsKKyAgfQorICB0aW1lcnNfLmVyYXNlKHRpbWVyKTsKK30KIAogaW50IFdpbmRvd1RpbWVyczo6U2V0SW50ZXJ2YWwoY29uc3QgVGltZXJDYWxsYmFja0FyZyYgaGFuZGxlciwgaW50IHRpbWVvdXQpIHsKICAgVFJBQ0tfTUVNT1JZX1NDT1BFKCJET00iKTsKICAgcmV0dXJuIFRyeUFkZE5ld1RpbWVyKFRpbWVyOjprUmVwZWF0aW5nLCBoYW5kbGVyLCB0aW1lb3V0KTsKIH0KIAotdm9pZCBXaW5kb3dUaW1lcnM6OkNsZWFySW50ZXJ2YWwoaW50IGhhbmRsZSkgeyB0aW1lcnNfLmVyYXNlKGhhbmRsZSk7IH0KK3ZvaWQgV2luZG93VGltZXJzOjpDbGVhckludGVydmFsKGludCBoYW5kbGUpIHsgQ2xlYXJUaW1lb3V0KGhhbmRsZSk7IH0KIAogdm9pZCBXaW5kb3dUaW1lcnM6OkRpc2FibGVDYWxsYmFja3MoKSB7CiAgIGNhbGxiYWNrc19hY3RpdmVfID0gZmFsc2U7CiAgIC8vIEltbWVkaWF0ZWx5IGNhbmNlbCBhbnkgcGVuZGluZyB0aW1lcnMuCiAgIGZvciAoYXV0byYgdGltZXJfZW50cnkgOiB0aW1lcnNfKSB7CisgICAgaWYgKHRpbWVyX2VudHJ5LnNlY29uZCkgeworICAgICAgdGltZXJfZW50cnkuc2Vjb25kLT5EaXNhYmxlKCk7CisgICAgfQogICAgIHRpbWVyX2VudHJ5LnNlY29uZCA9IG51bGxwdHI7CiAgIH0KIH0KQEAgLTk1LDM2ICsxMDgsNiBAQAogICByZXR1cm4gMDsKIH0KIAotdm9pZCBXaW5kb3dUaW1lcnM6OlJ1blRpbWVyQ2FsbGJhY2soaW50IGhhbmRsZSkgewotICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6ZG9tIiwgIldpbmRvd1RpbWVyczo6UnVuVGltZXJDYWxsYmFjayIpOwotICBEQ0hFQ0soY2FsbGJhY2tzX2FjdGl2ZV8pCi0gICAgICA8PCAiQWxsIHRpbWVyIGNhbGxiYWNrcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkLiI7Ci0gIFRpbWVyczo6aXRlcmF0b3IgdGltZXIgPSB0aW1lcnNfLmZpbmQoaGFuZGxlKTsKLSAgRENIRUNLKHRpbWVyICE9IHRpbWVyc18uZW5kKCkpOwotCi0gIC8vIFRoZSBjYWxsYmFjayBpcyBub3cgYmVpbmcgcnVuLiBUcmFjayBpdCBpbiB0aGUgZ2xvYmFsIHN0YXRzLgotICBHbG9iYWxTdGF0czo6R2V0SW5zdGFuY2UoKS0+U3RhcnRKYXZhU2NyaXB0RXZlbnQoKTsKLQotICB7Ci0gICAgLy8gS2VlcCBhIHxUaW1lckluZm98IHJlZmVyZW5jZSwgc28gaXQgd29uJ3QgYmUgcmVsZWFzZWQgd2hlbiBydW5uaW5nIHRoZQotICAgIC8vIGNhbGxiYWNrLgotICAgIHNjb3BlZF9yZWZwdHI8VGltZXI+IHRpbWVyX2luZm8odGltZXItPnNlY29uZCk7Ci0gICAgdGltZXJfaW5mby0+UnVuKCk7Ci0gIH0KLQotICAvLyBBZnRlciBydW5uaW5nIHRoZSBjYWxsYmFjaywgZG91YmxlIGNoZWNrIHdoZXRoZXIgdGhlIHRpbWVyIGlzIHN0aWxsIHRoZXJlCi0gIC8vIHNpbmNlIGl0IG1pZ2h0IGJlIGRlbGV0ZWQgaW5zaWRlIHRoZSBjYWxsYmFjay4KLSAgdGltZXIgPSB0aW1lcnNfLmZpbmQoaGFuZGxlKTsKLSAgLy8gSWYgdGhlIHRpbWVyIGlzIG5vdCBkZWxldGVkIGFuZCBpcyBub3QgcnVubmluZywgaXQgbWVhbnMgaXQgaXMgYW4gb25lc2hvdAotICAvLyB0aW1lciBhbmQgaGFzIGp1c3QgZmlyZWQgdGhlIHNob3QsIGFuZCBpdCBzaG91bGQgYmUgZGVsZXRlZCBub3cuCi0gIGlmICh0aW1lciAhPSB0aW1lcnNfLmVuZCgpICYmICF0aW1lci0+c2Vjb25kLT50aW1lcigpLT5Jc1J1bm5pbmcoKSkgewotICAgIHRpbWVyc18uZXJhc2UodGltZXIpOwotICB9Ci0KLSAgLy8gVGhlIGNhbGxiYWNrIGhhcyBmaW5pc2hlZCBydW5uaW5nLiBTdG9wIHRyYWNraW5nIGl0IGluIHRoZSBnbG9iYWwgc3RhdHMuCi0gIEdsb2JhbFN0YXRzOjpHZXRJbnN0YW5jZSgpLT5TdG9wSmF2YVNjcmlwdEV2ZW50KCk7Ci19Ci0KIHZvaWQgV2luZG93VGltZXJzOjpTZXRBcHBsaWNhdGlvblN0YXRlKGJhc2U6OkFwcGxpY2F0aW9uU3RhdGUgc3RhdGUpIHsKICAgc3dpdGNoIChzdGF0ZSkgewogICAgIGNhc2UgYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVGcm96ZW46CkBAIC0xNTksNiArMTQyLDcgQEAKICAgICAgIGRlYnVnZ2VyX2hvb2tzXyhkZWJ1Z2dlcl9ob29rcyksCiAgICAgICB0aW1lb3V0Xyh0aW1lb3V0KSwKICAgICAgIGhhbmRsZV8oaGFuZGxlKSwKKyAgICAgIGFjdGl2ZV8oZmFsc2UpLAogICAgICAgd2luZG93X3RpbWVyc18od2luZG93X3RpbWVycykgewogICBkZWJ1Z2dlcl9ob29rc18uQXN5bmNUYXNrU2NoZWR1bGVkKAogICAgICAgdGhpcywgdHlwZSA9PSBUaW1lcjo6a09uZVNob3QgPyAiU2V0VGltZW91dCIgOiAiU2V0SW50ZXJ2YWwiLApAQCAtMTg4LDggKzE3MiwyNSBAQAogfQogCiB2b2lkIFdpbmRvd1RpbWVyczo6VGltZXI6OlJ1bigpIHsKLSAgYmFzZTo6U2NvcGVkQXN5bmNUYXNrIGFzeW5jX3Rhc2soZGVidWdnZXJfaG9va3NfLCB0aGlzKTsKLSAgY2FsbGJhY2tfLnZhbHVlKCkuUnVuKCk7CisgIGlmICghYWN0aXZlXykgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFRoZSBjYWxsYmFjayBpcyBub3cgYmVpbmcgcnVuLiBUcmFjayBpdCBpbiB0aGUgZ2xvYmFsIHN0YXRzLgorICBHbG9iYWxTdGF0czo6R2V0SW5zdGFuY2UoKS0+U3RhcnRKYXZhU2NyaXB0RXZlbnQoKTsKKworICB7CisgICAgYmFzZTo6U2NvcGVkQXN5bmNUYXNrIGFzeW5jX3Rhc2soZGVidWdnZXJfaG9va3NfLCB0aGlzKTsKKyAgICBjYWxsYmFja18udmFsdWUoKS5SdW4oKTsKKyAgfQorCisgIC8vIFJlbW92ZSBvbmUtc2hvdCB0aW1lcnMgZnJvbSB0aGUgdGltZXJzIGxpc3QuCisgIGlmIChhY3RpdmVfICYmICF0aW1lcl8tPklzUnVubmluZygpKSB7CisgICAgd2luZG93X3RpbWVyc18tPkNsZWFyVGltZW91dChoYW5kbGVfKTsKKyAgfQorCisgIC8vIFRoZSBjYWxsYmFjayBoYXMgZmluaXNoZWQgcnVubmluZy4gU3RvcCB0cmFja2luZyBpdCBpbiB0aGUgZ2xvYmFsIHN0YXRzLgorICBHbG9iYWxTdGF0czo6R2V0SW5zdGFuY2UoKS0+U3RvcEphdmFTY3JpcHRFdmVudCgpOwogfQogCiB2b2lkIFdpbmRvd1RpbWVyczo6VGltZXI6OlBhdXNlKCkgewpAQCAtMjAzLDYgKzIwNCw3IEBACiAKIHZvaWQgV2luZG93VGltZXJzOjpUaW1lcjo6U3RhcnRPclJlc3VtZSgpIHsKICAgaWYgKHRpbWVyXyAhPSBudWxscHRyKSByZXR1cm47CisgIGFjdGl2ZV8gPSB0cnVlOwogICBzd2l0Y2ggKHR5cGVfKSB7CiAgICAgY2FzZSBrT25lU2hvdDoKICAgICAgIGlmIChkZXNpcmVkX3J1bl90aW1lXykgewpAQCAtMjMwLDIwICsyMzIsMjcgQEAKICAgICAgICAgLy8gVGhlIHRpbWVyIHdhcyBwYXVzZWQgYW5kIHRoZSBkZXNpcmVkIHJ1biB0aW1lIGlzIGluIHRoZSBwYXN0LgogICAgICAgICAvLyBDYWxsIHRoZSBjYWxsYmFjayBvbmNlIGJlZm9yZSBjb250aW51aW5nIHRoZSByZXBlYXRpbmcgdGltZXIuCiAgICAgICAgIGJhc2U6OlNlcXVlbmNlZFRhc2tSdW5uZXJIYW5kbGU6OkdldCgpLT5Qb3N0VGFzaygKLSAgICAgICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmV2luZG93VGltZXJzOjpSdW5UaW1lckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQod2luZG93X3RpbWVyc18pLCBoYW5kbGVfKSk7CisgICAgICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJldpbmRvd1RpbWVyczo6VGltZXI6OlJ1biwgdGhpcykpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgIH0KIH0KIAordm9pZCBXaW5kb3dUaW1lcnM6OlRpbWVyOjpEaXNhYmxlKCkgeworICAvLyBQcmV2ZW50IHRoZSB0aW1lciBjYWxsYmFjayBmcm9tIGRvaW5nIGFueXRoaW5nLgorICBhY3RpdmVfID0gZmFsc2U7CisKKyAgLy8gQ2xlYXIgdGhlIFRpbWVyQmFzZSBvYmplY3QgdG8gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIHx0aGlzfCBpbiB0aGUKKyAgLy8gdXNlciBjYWxsYmFjay4KKyAgdGltZXJfLnJlc2V0KCk7Cit9CisKIHRlbXBsYXRlIDxjbGFzcyBUaW1lckNsYXNzPgogc3RkOjp1bmlxdWVfcHRyPGJhc2U6OmludGVybmFsOjpUaW1lckJhc2U+CiBXaW5kb3dUaW1lcnM6OlRpbWVyOjpDcmVhdGVBbmRTdGFydCgpIHsKICAgYXV0byogdGltZXIgPSBuZXcgVGltZXJDbGFzcygpOwogICB0aW1lci0+U3RhcnQoRlJPTV9IRVJFLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHModGltZW91dF8pLAotICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmV2luZG93VGltZXJzOjpSdW5UaW1lckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHdpbmRvd190aW1lcnNfKSwgaGFuZGxlXykpOworICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmV2luZG93VGltZXJzOjpUaW1lcjo6UnVuLCB0aGlzKSk7CiAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6aW50ZXJuYWw6OlRpbWVyQmFzZT4odGltZXIpOwogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tL3dpbmRvd190aW1lcnMuaCBiL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5oCmluZGV4IDZkM2RiNGEuLmZjODE3ODQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5oCisrKyBiL2NvYmFsdC9kb20vd2luZG93X3RpbWVycy5oCkBAIC03NSw3ICs3NSw2IEBACiAgICAgICAgICAgY29uc3QgVGltZXJDYWxsYmFja0FyZyYgY2FsbGJhY2ssIGludCB0aW1lb3V0LCBpbnQgaGFuZGxlLAogICAgICAgICAgIFdpbmRvd1RpbWVycyogd2luZG93X3RpbWVycyk7CiAKLSAgICBiYXNlOjppbnRlcm5hbDo6VGltZXJCYXNlKiB0aW1lcigpIHsgcmV0dXJuIHRpbWVyXy5nZXQoKTsgfQogICAgIHZvaWQgUnVuKCk7CiAKICAgICAvLyBQYXVzZSB0aGlzIHRpbWVyLiBUaGUgdGltZXIgd2lsbCBub3QgZmlyZSB3aGVuIHBhdXNlZC4KQEAgLTg0LDYgKzgzLDkgQEAKICAgICAvLyB0aW1lIGlzIGluIHRoZSBwYXN0LCBpdCB3aWxsIGZpcmUgaW1tZWRpYXRlbHkuCiAgICAgdm9pZCBTdGFydE9yUmVzdW1lKCk7CiAKKyAgICAvLyBEaXNhYmxlIHRoZSB0aW1lciBjYWxsYmFjay4KKyAgICB2b2lkIERpc2FibGUoKTsKKwogICAgcHJpdmF0ZToKICAgICB+VGltZXIoKTsKIApAQCAtOTgsNiArMTAwLDcgQEAKICAgICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rc187CiAgICAgaW50IHRpbWVvdXRfOwogICAgIGludCBoYW5kbGVfOworICAgIGJvb2wgYWN0aXZlXzsKICAgICBXaW5kb3dUaW1lcnMqIHdpbmRvd190aW1lcnNfOwogCiAgICAgLy8gU3RvcmUgdGhlIGRlc2lyZWQgcnVuIHRpbSBvZiBhIHBhdXNlZCB0aW1lci4KQEAgLTExNiwxMCArMTE5LDYgQEAKICAgLy8gaWYgbm9uZSBjYW4gYmUgZm91bmQuCiAgIGludCBHZXRGcmVlVGltZXJIYW5kbGUoKTsKIAotICAvLyBUaGlzIGNhbGxiYWNrLCB3aGVuIGNhbGxlZCBieSBUaW1lciwgcnVucyB0aGUgY2FsbGJhY2sgaW4gVGltZXJJbmZvCi0gIC8vIGFuZCByZW1vdmVzIHRoZSBoYW5kbGUgaWYgbmVjZXNzYXJ5LgotICB2b2lkIFJ1blRpbWVyQ2FsbGJhY2soaW50IGhhbmRsZSk7Ci0KICAgVGltZXJzIHRpbWVyc187CiAgIGludCBjdXJyZW50X3RpbWVyX2luZGV4XyA9IDA7CiAgIHNjcmlwdDo6V3JhcHBhYmxlKiBjb25zdCBvd25lcl87CmRpZmYgLS1naXQgYS9jb2JhbHQvZG9tX3BhcnNlci9kb21fcGFyc2VyLmd5cCBiL2NvYmFsdC9kb21fcGFyc2VyL2RvbV9wYXJzZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZiNTEwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9kb21fcGFyc2VyL2RvbV9wYXJzZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZG9tX3BhcnNlcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2h0bWxfZGVjb2Rlci5jYycsCi0gICAgICAgICdodG1sX2RlY29kZXIuaCcsCi0gICAgICAgICdsaWJ4bWxfaHRtbF9wYXJzZXJfd3JhcHBlci5jYycsCi0gICAgICAgICdsaWJ4bWxfaHRtbF9wYXJzZXJfd3JhcHBlci5oJywKLSAgICAgICAgJ2xpYnhtbF9wYXJzZXJfd3JhcHBlci5jYycsCi0gICAgICAgICdsaWJ4bWxfcGFyc2VyX3dyYXBwZXIuaCcsCi0gICAgICAgICdsaWJ4bWxfeG1sX3BhcnNlcl93cmFwcGVyLmNjJywKLSAgICAgICAgJ2xpYnhtbF94bWxfcGFyc2VyX3dyYXBwZXIuaCcsCi0gICAgICAgICdwYXJzZXIuY2MnLAotICAgICAgICAncGFyc2VyLmgnLAotICAgICAgICAneG1sX2RlY29kZXIuY2MnLAotICAgICAgICAneG1sX2RlY29kZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbG9hZGVyL2xvYWRlci5neXA6bG9hZGVyJywKLSAgICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOm5ldCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJ4bWwvbGlieG1sLmd5cDpsaWJ4bWwnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2RvbV9wYXJzZXIvZG9tX3BhcnNlcl90ZXN0Lmd5cCBiL2NvYmFsdC9kb21fcGFyc2VyL2RvbV9wYXJzZXJfdGVzdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZGI2MTIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2RvbV9wYXJzZXIvZG9tX3BhcnNlcl90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2RvbV9wYXJzZXJfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2h0bWxfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3htbF9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vdGVzdGluZy9kb21fdGVzdGluZy5neXA6ZG9tX3Rlc3RpbmcnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbV9wYXJzZXIvZG9tX3BhcnNlci5neXA6ZG9tX3BhcnNlcicsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZG9tX3BhcnNlcl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdkb21fcGFyc2VyX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnZG9tX3BhcnNlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9kb21fcGFyc2VyL2xpYnhtbF9wYXJzZXJfd3JhcHBlci5jYyBiL2NvYmFsdC9kb21fcGFyc2VyL2xpYnhtbF9wYXJzZXJfd3JhcHBlci5jYwppbmRleCA0NjQyYWIxLi5kM2JhZDJkIDEwMDY0NAotLS0gYS9jb2JhbHQvZG9tX3BhcnNlci9saWJ4bWxfcGFyc2VyX3dyYXBwZXIuY2MKKysrIGIvY29iYWx0L2RvbV9wYXJzZXIvbGlieG1sX3BhcnNlcl93cmFwcGVyLmNjCkBAIC0xNjcsOCArMTY3LDggQEAKIH0KIAogdm9pZCBDaGFyYWN0ZXJzKHZvaWQqIGNvbnRleHQsIGNvbnN0IHhtbENoYXIqIGNoLCBpbnQgbGVuKSB7Ci0gIFRvTGlieG1sUGFyc2VyV3JhcHBlcihjb250ZXh0KQotICAgICAgLT5PbkNoYXJhY3RlcnMoc3RkOjpzdHJpbmcoVG9DU3RyaW5nKGNoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW4pKSk7CisgIFRvTGlieG1sUGFyc2VyV3JhcHBlcihjb250ZXh0KS0+T25DaGFyYWN0ZXJzKAorICAgICAgc3RkOjpzdHJpbmcoVG9DU3RyaW5nKGNoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW4pKSk7CiB9CiAKIHZvaWQgQ29tbWVudCh2b2lkKiBjb250ZXh0LCBjb25zdCB4bWxDaGFyKiB2YWx1ZSkgewpAQCAtMjAwLDggKzIwMCw4IEBACiB9CiAKIHZvaWQgQ0RBVEFCbG9jayh2b2lkKiBjb250ZXh0LCBjb25zdCB4bWxDaGFyKiB2YWx1ZSwgaW50IGxlbikgewotICBUb0xpYnhtbFBhcnNlcldyYXBwZXIoY29udGV4dCkKLSAgICAgIC0+T25DREFUQUJsb2NrKHN0ZDo6c3RyaW5nKFRvQ1N0cmluZyh2YWx1ZSksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuKSkpOworICBUb0xpYnhtbFBhcnNlcldyYXBwZXIoY29udGV4dCktPk9uQ0RBVEFCbG9jaygKKyAgICAgIHN0ZDo6c3RyaW5nKFRvQ1N0cmluZyh2YWx1ZSksIHN0YXRpY19jYXN0PHNpemVfdD4obGVuKSkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTIzMCw4ICsyMzAsOSBAQAogICB9CiAKICAgaWYgKElzRnVsbERvY3VtZW50KCkpIHsKLSAgICBkb2N1bWVudF8tPlBvc3RUb0Rpc3BhdGNoRXZlbnROYW1lKEZST01fSEVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRva2Vuczo6ZG9tY29udGVudGxvYWRlZCgpKTsKKyAgICAvLyBDb2xsZWN0IGRvbSBjb250ZW50IGxvYWRlZCB0aW1pbmcgaW5mbyBhbmQgZGlzcGF0Y2ggZG9tIGNvbnRlbnQKKyAgICAvLyBsb2FkZWQgZXZlbnQuCisgICAgZG9jdW1lbnRfLT5Db2xsZWN0VGltaW5nSW5mb0FuZERpc3BhdGNoRXZlbnQoKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvZW5jb2RpbmcvQlVJTEQuZ24gYi9jb2JhbHQvZW5jb2RpbmcvQlVJTEQuZ24KaW5kZXggNzA4YTYyMS4uOTZjZTJiMCAxMDA2NDQKLS0tIGEvY29iYWx0L2VuY29kaW5nL0JVSUxELmduCisrKyBiL2NvYmFsdC9lbmNvZGluZy9CVUlMRC5nbgpAQCAtNTAsNCArNTAsNiBAQAogICAgICIvL3Rlc3RpbmcvZ21vY2siLAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICBdCisKKyAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nLmd5cCBiL2NvYmFsdC9lbmNvZGluZy9lbmNvZGluZy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkNTU1NTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgICB9LAotICAgICd0YXJnZXRzJzogW3sKLSAgICAgICAgJ3RhcmdldF9uYW1lJzoKLSAgICAgICAgICAgICd0ZXh0X2VuY29kaW5nJywKLSAgICAgICAgJ3R5cGUnOgotICAgICAgICAgICAgJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndGV4dF9kZWNvZGVyLmNjJywKLSAgICAgICAgICAgICd0ZXh0X2RlY29kZXIuaCcsCi0gICAgICAgICAgICAndGV4dF9lbmNvZGVyLmNjJywKLSAgICAgICAgICAgICd0ZXh0X2VuY29kZXIuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgICBdLAotICAgIH0sXQotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nX3Rlc3QuZ3lwIGIvY29iYWx0L2VuY29kaW5nL2VuY29kaW5nX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWU2OTBkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9lbmNvZGluZy9lbmNvZGluZ190ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgICB9LAotICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAndGV4dF9lbmNvZGluZ190ZXN0JywKLSAgICAgICAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICd0ZXh0X2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICAgICAgICAgJ3RleHRfZW5jb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS90ZXN0aW5nL2RvbV90ZXN0aW5nLmd5cDpkb21fdGVzdGluZycsCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9lbmNvZGluZy9lbmNvZGluZy5neXA6dGV4dF9lbmNvZGluZycsCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvc2NyaXB0Lmd5cDpzY3JpcHQnLAotICAgICAgICAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaSddLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAndGV4dF9lbmNvZGluZ190ZXN0X2RlcGxveScsCi0gICAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3RleHRfZW5jb2RpbmdfdGVzdCcsXSwKLSAgICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICd0ZXh0X2VuY29kaW5nX3Rlc3QnLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJ10sCi0gICAgICAgIH0sCi0gICAgXQotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2VuY29kaW5nL3RleHRfZW5jb2Rlci5jYyBiL2NvYmFsdC9lbmNvZGluZy90ZXh0X2VuY29kZXIuY2MKaW5kZXggNWVkN2Q1Yi4uYmNkZDkxMSAxMDA2NDQKLS0tIGEvY29iYWx0L2VuY29kaW5nL3RleHRfZW5jb2Rlci5jYworKysgYi9jb2JhbHQvZW5jb2RpbmcvdGV4dF9lbmNvZGVyLmNjCkBAIC0xMiwxMyArMTIsMTQgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCisjaW5jbHVkZSAiY29iYWx0L2VuY29kaW5nL3RleHRfZW5jb2Rlci5oIgorCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHN0cmluZz4KIAotI2luY2x1ZGUgImNvYmFsdC9lbmNvZGluZy90ZXh0X2VuY29kZXIuaCIKLQogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3BvbHltb3JwaGljX2Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvaWN1L3NvdXJjZS9jb21tb24vdW5pY29kZS91dGV4dC5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2ljdS9zb3VyY2UvY29tbW9uL3VuaWNvZGUvdXRmOC5oIgogCkBAIC0zOCwxMyArMzksMTMgQEAKIAogc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpVaW50OEFycmF5PiBUZXh0RW5jb2Rlcjo6RW5jb2RlKAogICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkgewotICBkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKLQogICAvLyBUaGUgY29udmVyc2lvbiBoZWxwZXIgYWxyZWFkeSB0cmFuc2xhdGVkIHRoZSBKU1ZhbHVlIGludG8gYSB2YWxpZCBVVEYtOAogICAvLyBlbmNvZGVkIHN0cmluZy4KLSAgcmV0dXJuIHNjcmlwdDo6VWludDhBcnJheTo6TmV3KGRvbV9zZXR0aW5ncy0+Z2xvYmFsX2Vudmlyb25tZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSk7CisgIHJldHVybiBzY3JpcHQ6OlVpbnQ4QXJyYXk6Ok5ldygKKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKKyAgICAgIGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpKTsKIH0KIAogVGV4dEVuY29kZXJFbmNvZGVJbnRvUmVzdWx0IFRleHRFbmNvZGVyOjpFbmNvZGVJbnRvKApkaWZmIC0tZ2l0IGEvY29iYWx0L2V2ZXJncmVlbl90ZXN0cy9fZW52LnB5IGIvY29iYWx0L2V2ZXJncmVlbl90ZXN0cy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTA3OWUyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9ldmVyZ3JlZW5fdGVzdHMvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQoJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKSkKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2V2ZXJncmVlbl90ZXN0cy9ldmVyZ3JlZW5fdGVzdHMucHkgYi9jb2JhbHQvZXZlcmdyZWVuX3Rlc3RzL2V2ZXJncmVlbl90ZXN0cy5weQppbmRleCAyM2ZjNDExLi43NGVhZmIwIDEwMDY0NAotLS0gYS9jb2JhbHQvZXZlcmdyZWVuX3Rlc3RzL2V2ZXJncmVlbl90ZXN0cy5weQorKysgYi9jb2JhbHQvZXZlcmdyZWVuX3Rlc3RzL2V2ZXJncmVlbl90ZXN0cy5weQpAQCAtMjIsOCArMjIsNiBAQAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGFic3RyYWN0X2xhdW5jaGVyCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgY29tbWFuZF9saW5lCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgbG9nX2xldmVsCkBAIC01OSw2ICs1NywxNSBAQAogICAgICAgJy0tcGxhdGZvcm1fdW5kZXJfdGVzdCcsCiAgICAgICBkZWZhdWx0PV9ERUZBVUxUX1BMQVRGT1JNX1VOREVSX1RFU1QsCiAgICAgICBoZWxwPSdUaGUgcGxhdGZvcm0gdG8gcnVuIHRoZSB0ZXN0cyBvbiAoZS5nLiwgbGludXggb3IgcmFzcGkpLicpCisgIGF1dGhlbnRpY2F0aW9uX21ldGhvZCA9IGFyZ19wYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgIGF1dGhlbnRpY2F0aW9uX21ldGhvZC5hZGRfYXJndW1lbnQoCisgICAgICAnLS1wdWJsaWMta2V5LWF1dGgnLAorICAgICAgaGVscD0nUHVibGljIGtleSBhdXRoZW50aWNhdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgZGV2aWNlLicsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICBhdXRoZW50aWNhdGlvbl9tZXRob2QuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tcGFzc3dvcmQtYXV0aCcsCisgICAgICBoZWxwPSdQYXNzd29yZCBhdXRoZW50aWNhdGlvbiBzaG91bGQgYmUgdXNlZCB3aXRoIHRoZSByZW1vdGUgZGV2aWNlLicsCisgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQogICBjb21tYW5kX2xpbmUuQWRkTGF1bmNoZXJBcmd1bWVudHMoYXJnX3BhcnNlcikKICAgYXJncyA9IGFyZ19wYXJzZXIucGFyc2VfYXJncygpCiAKQEAgLTk3LDEyICsxMDQsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3J1bl9hbGxfdGVzdHMuc2gnKQogCiAgICMgL2Jpbi9iYXNoIGlzIGV4ZWN1dGVkIHNpbmNlIHJ1bl9hbGxfdGVzdHMuc2ggbWF5IG5vdCBiZSBleGVjdXRhYmxlLgotICBjb21tYW5kID0gWycvYmluL2Jhc2gnLCBydW5fYWxsX3Rlc3RzLCBhcmdzLnBsYXRmb3JtX3VuZGVyX3Rlc3RdCisgIGNvbW1hbmQgPSBbJy9iaW4vYmFzaCcsIHJ1bl9hbGxfdGVzdHNdCiAKICAgaWYgbGF1bmNoZXIuZGV2aWNlX2lkOgogICAgICMgVGhlIGF1dG9tYXRlZCB0ZXN0cyBydW4gb24gdGhpcyBob3N0IHNob3VsZCB0YXJnZXQgYSByZW1vdGUgZGV2aWNlLgorICAgIGNvbW1hbmQuYXBwZW5kKCctZCcpCiAgICAgY29tbWFuZC5hcHBlbmQobGF1bmNoZXIuZGV2aWNlX2lkKQogCisgIGlmIGFyZ3MucHVibGljX2tleV9hdXRoOgorICAgIGNvbW1hbmQuYXBwZW5kKCctYScpCisgICAgY29tbWFuZC5hcHBlbmQoJ3B1YmxpYy1rZXknKQorICBlbGlmIGFyZ3MucGFzc3dvcmRfYXV0aDoKKyAgICBjb21tYW5kLmFwcGVuZCgnLWEnKQorICAgIGNvbW1hbmQuYXBwZW5kKCdwYXNzd29yZCcpCisKKyAgY29tbWFuZC5hcHBlbmQoYXJncy5wbGF0Zm9ybV91bmRlcl90ZXN0KQorCiAgIHJldHVybiBfRXhlYyhjb21tYW5kLCBlbnYpCiAKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2V4dGVuc2lvbi9CVUlMRC5nbiBiL2NvYmFsdC9leHRlbnNpb24vQlVJTEQuZ24KaW5kZXggMmUxNzIzYi4uZmM2M2ZjNyAxMDA2NDQKLS0tIGEvY29iYWx0L2V4dGVuc2lvbi9CVUlMRC5nbgorKysgYi9jb2JhbHQvZXh0ZW5zaW9uL0JVSUxELmduCkBAIC0yNiw1ICsyNiw0IEBACiAgIGlmIChzYl9pc19ldmVyZ3JlZW4pIHsKICAgICBkZXBzICs9IGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMKICAgfQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvZXh0ZW5zaW9uL2V4dGVuc2lvbi5neXAgYi9jb2JhbHQvZXh0ZW5zaW9uL2V4dGVuc2lvbi5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTA1ZGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2V4dGVuc2lvbi9leHRlbnNpb24uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZXh0ZW5zaW9uX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdleHRlbnNpb25fdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gPT0gMCcsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZXh0ZW5zaW9uX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2V4dGVuc2lvbl90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2V4dGVuc2lvbl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9mZXRjaC9mZXRjaC5neXAgYi9jb2JhbHQvZmV0Y2gvZmV0Y2guZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWYxMWUzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9mZXRjaC9mZXRjaC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZmV0Y2gnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmZXRjaF9pbnRlcm5hbC5jYycsCi0gICAgICAgICdmZXRjaF9pbnRlcm5hbC5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c2NyaXB0JywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvZmV0Y2gvZmV0Y2hfaW50ZXJuYWwuY2MgYi9jb2JhbHQvZmV0Y2gvZmV0Y2hfaW50ZXJuYWwuY2MKaW5kZXggMmIzMWZmOS4uYzA5ODg5NyAxMDA2NDQKLS0tIGEvY29iYWx0L2ZldGNoL2ZldGNoX2ludGVybmFsLmNjCisrKyBiL2NvYmFsdC9mZXRjaC9mZXRjaF9pbnRlcm5hbC5jYwpAQCAtMTYsNyArMTYsMTAgQEAKIAogI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfdXRpbC5oIgogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3BvbHltb3JwaGljX2Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtMjUsOSArMjgsNyBAQAogLy8gc3RhdGljCiBib29sIEZldGNoSW50ZXJuYWw6OklzVXJsVmFsaWQoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBib29sIGFsbG93X2NyZWRlbnRpYWxzKSB7Ci0gIGRvbTo6RE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oc2V0dGluZ3MpOwotICBHVVJMIGd1cmwgPSBkb21fc2V0dGluZ3MtPmJhc2VfdXJsKCkuUmVzb2x2ZSh1cmwpOworICBHVVJMIGd1cmwgPSBzZXR0aW5ncy0+YmFzZV91cmwoKS5SZXNvbHZlKHVybCk7CiAgIHJldHVybiBndXJsLmlzX3ZhbGlkKCkgJiYKICAgICAgICAgIChhbGxvd19jcmVkZW50aWFscyB8fCAoIWd1cmwuaGFzX3VzZXJuYW1lKCkgJiYgIWd1cmwuaGFzX3Bhc3N3b3JkKCkpKTsKIH0KQEAgLTM2LDEyICszNywxMyBAQAogc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpVaW50OEFycmF5PiBGZXRjaEludGVybmFsOjpFbmNvZGVUb1VURjgoCiAgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQsCiAgICAgc2NyaXB0OjpFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlKSB7Ci0gIGRvbTo6RE9NU2V0dGluZ3MqIGRvbV9zZXR0aW5ncyA9Ci0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oc2V0dGluZ3MpOwogICAvLyBUaGUgY29udmVyc2lvbiBoZWxwZXIgYWxyZWFkeSB0cmFuc2xhdGVkIHRoZSBKU1ZhbHVlIGludG8gYSBVVEYtOCBlbmNvZGVkCiAgIC8vIHN0cmluZy4gU28ganVzdCB3cmFwIHRoZSByZXN1bHQgaW4gYSBVaW50OEFycmF5LgotICByZXR1cm4gc2NyaXB0OjpVaW50OEFycmF5OjpOZXcoZG9tX3NldHRpbmdzLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuZGF0YSgpLCB0ZXh0LnNpemUoKSk7CisgIHJldHVybiBzY3JpcHQ6OlVpbnQ4QXJyYXk6Ok5ldygKKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKKyAgICAgIHRleHQuZGF0YSgpLCB0ZXh0LnNpemUoKSk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtNzMsMTEgKzc1LDEyIEBACiBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OkFycmF5QnVmZmVyPiBGZXRjaEludGVybmFsOjpCbG9iVG9BcnJheUJ1ZmZlcigKICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAogICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8ZG9tOjpCbG9iPiYgYmxvYikgewotICBkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZGF0YSBzbyB0aGF0IHRoZSBjYWxsZXIgY2Fubm90IG1vZGlmeSB0aGUgQmxvYi4KLSAgcmV0dXJuIHNjcmlwdDo6QXJyYXlCdWZmZXI6Ok5ldyhkb21fc2V0dGluZ3MtPmdsb2JhbF9lbnZpcm9ubWVudCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2ItPmRhdGEoKSwgYmxvYi0+c2l6ZSgpKTsKKyAgcmV0dXJuIHNjcmlwdDo6QXJyYXlCdWZmZXI6Ok5ldygKKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKKyAgICAgIGJsb2ItPmRhdGEoKSwgYmxvYi0+c2l6ZSgpKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIGZldGNoCmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvQlVJTEQuZ24gYi9jb2JhbHQvaDV2Y2MvQlVJTEQuZ24KaW5kZXggOTZkZTI1My4uMDQ2OTA0MSAxMDA2NDQKLS0tIGEvY29iYWx0L2g1dmNjL0JVSUxELmduCisrKyBiL2NvYmFsdC9oNXZjYy9CVUlMRC5nbgpAQCAtODYsNiArODYsNyBAQAogICAgICIvL2NvYmFsdC9zc28iLAogICAgICIvL2NvYmFsdC9zdG9yYWdlIiwKICAgICAiLy9jb2JhbHQvdHJhY2VfZXZlbnQiLAorICAgICIvL2NvYmFsdC93YXRjaGRvZyIsCiAgICAgIi8vbmV0IiwKICAgICAiLy9uZXQ6aHR0cF9zZXJ2ZXIiLAogICAgICIvL3N0YXJib2FyZCIsCmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvZGlhbC9kaWFsX3NlcnZlci5jYyBiL2NvYmFsdC9oNXZjYy9kaWFsL2RpYWxfc2VydmVyLmNjCmluZGV4IDU3NjRiODguLmY2OGY1NzAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9oNXZjYy9kaWFsL2RpYWxfc2VydmVyLmNjCisrKyBiL2NvYmFsdC9oNXZjYy9kaWFsL2RpYWxfc2VydmVyLmNjCkBAIC0yMSw4ICsyMSw5IEBACiAKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgotI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAibmV0L2RpYWwvZGlhbF9zZXJ2aWNlX2hhbmRsZXIuaCIKICNpbmNsdWRlICJuZXQvc2VydmVyL2h0dHBfc2VydmVyX3JlcXVlc3RfaW5mby5oIgogCkBAIC03NCwxMiArNzUsMTMgQEAKIERpYWxTZXJ2ZXI6OkRpYWxTZXJ2ZXIoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNlcnZpY2VfbmFtZSkgewogICBzZXJ2aWNlX2hhbmRsZXJfID0gbmV3IFNlcnZpY2VIYW5kbGVyKEFzV2Vha1B0cigpLCBzZXJ2aWNlX25hbWUpOwotICBkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKLSAgRENIRUNLKGRvbV9zZXR0aW5ncyk7CisgIGF1dG8qIHdlYl9zZXR0aW5ncyA9CisgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqPihzZXR0aW5ncyk7CisgIERDSEVDSyh3ZWJfc2V0dGluZ3MpOwogCi0gIGlmIChkb21fc2V0dGluZ3MtPm5ldHdvcmtfbW9kdWxlKCkgJiYgZG9tX3NldHRpbmdzLT5uZXR3b3JrX21vZHVsZSgpKSB7Ci0gICAgZGlhbF9zZXJ2aWNlX3Byb3h5XyA9IGRvbV9zZXR0aW5ncy0+bmV0d29ya19tb2R1bGUoKS0+ZGlhbF9zZXJ2aWNlX3Byb3h5KCk7CisgIGlmICh3ZWJfc2V0dGluZ3MgJiYgd2ViX3NldHRpbmdzLT5jb250ZXh0KCktPm5ldHdvcmtfbW9kdWxlKCkpIHsKKyAgICBkaWFsX3NlcnZpY2VfcHJveHlfID0KKyAgICAgICAgd2ViX3NldHRpbmdzLT5jb250ZXh0KCktPm5ldHdvcmtfbW9kdWxlKCktPmRpYWxfc2VydmljZV9wcm94eSgpOwogICB9CiAgIGlmIChkaWFsX3NlcnZpY2VfcHJveHlfKSB7CiAgICAgRExPRyhJTkZPKSA8PCAiRGlhbFNlcnZlciBydW5uaW5nIGF0OiAiCmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvaDV2Y2MuZ3lwIGIvY29iYWx0L2g1dmNjL2g1dmNjLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1OTM5Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2MuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2g1dmNjJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZGlhbC9kaWFsX2h0dHBfcmVxdWVzdC5jYycsCi0gICAgICAgICdkaWFsL2RpYWxfaHR0cF9yZXF1ZXN0LmgnLAotICAgICAgICAnZGlhbC9kaWFsX2h0dHBfcmVzcG9uc2UuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX2h0dHBfcmVzcG9uc2UuaCcsCi0gICAgICAgICdkaWFsL2RpYWxfc2VydmVyLmNjJywKLSAgICAgICAgJ2RpYWwvZGlhbF9zZXJ2ZXIuaCcsCi0gICAgICAgICdoNXZjYy5jYycsCi0gICAgICAgICdoNXZjYy5oJywKLSAgICAgICAgJ2g1dmNjX2FjY2Vzc2liaWxpdHkuY2MnLAotICAgICAgICAnaDV2Y2NfYWNjZXNzaWJpbGl0eS5oJywKLSAgICAgICAgJ2g1dmNjX2FjY291bnRfaW5mby5jYycsCi0gICAgICAgICdoNXZjY19hY2NvdW50X2luZm8uaCcsCi0gICAgICAgICdoNXZjY19hdWRpb19jb25maWcuY2MnLAotICAgICAgICAnaDV2Y2NfYXVkaW9fY29uZmlnLmgnLAotICAgICAgICAnaDV2Y2NfYXVkaW9fY29uZmlnX2FycmF5LmNjJywKLSAgICAgICAgJ2g1dmNjX2F1ZGlvX2NvbmZpZ19hcnJheS5oJywKLSAgICAgICAgJ2g1dmNjX2RlZXBfbGlua19ldmVudF90YXJnZXQuY2MnLAotICAgICAgICAnaDV2Y2NfZGVlcF9saW5rX2V2ZW50X3RhcmdldC5oJywKLSAgICAgICAgJ2g1dmNjX2V2ZW50X2xpc3RlbmVyX2NvbnRhaW5lci5oJywKLSAgICAgICAgJ2g1dmNjX3BsYXRmb3JtX3NlcnZpY2UuY2MnLAotICAgICAgICAnaDV2Y2NfcGxhdGZvcm1fc2VydmljZS5oJywKLSAgICAgICAgJ2g1dmNjX3J1bnRpbWUuY2MnLAotICAgICAgICAnaDV2Y2NfcnVudGltZS5oJywKLSAgICAgICAgJ2g1dmNjX3J1bnRpbWVfZXZlbnRfdGFyZ2V0LmNjJywKLSAgICAgICAgJ2g1dmNjX3J1bnRpbWVfZXZlbnRfdGFyZ2V0LmgnLAotICAgICAgICAnaDV2Y2Nfc2NyZWVuLmNjJywKLSAgICAgICAgJ2g1dmNjX3NjcmVlbi5oJywKLSAgICAgICAgJ2g1dmNjX3NldHRpbmdzLmNjJywKLSAgICAgICAgJ2g1dmNjX3NldHRpbmdzLmgnLAotICAgICAgICAnaDV2Y2Nfc3RvcmFnZS5jYycsCi0gICAgICAgICdoNXZjY19zdG9yYWdlLmgnLAotICAgICAgICAnaDV2Y2Nfc3lzdGVtLmNjJywKLSAgICAgICAgJ2g1dmNjX3N5c3RlbS5oJywKLSAgICAgICAgJ2g1dmNjX3RyYWNlX2V2ZW50LmNjJywKLSAgICAgICAgJ2g1dmNjX3RyYWNlX2V2ZW50LmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnVpbGQvY29iYWx0X2J1aWxkX2lkLmd5cDpjb2JhbHRfYnVpbGRfaWQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5neXA6Y29uZmlndXJhdGlvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc3BlZWNoLmd5cDpzcGVlY2gnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAjIEZvciBjb2JhbHRfYnVpbGRfaWQuaAotICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUiknLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV9hY2NvdW50X21hbmFnZXIgPT0gMScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdoNXZjY19hY2NvdW50X21hbmFnZXIuY2MnLAotICAgICAgICAgICAgJ2g1dmNjX2FjY291bnRfbWFuYWdlci5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDT0JBTFRfRU5BQkxFX0FDQ09VTlRfTUFOQUdFUicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2VuYWJsZV9jcmFzaF9sb2cgPT0gMScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdoNXZjY19jcmFzaF9sb2cuY2MnLAotICAgICAgICAgICAgJ2g1dmNjX2NyYXNoX2xvZy5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDT0JBTFRfRU5BQkxFX0NSQVNIX0xPRycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2VuYWJsZV9zc28gPT0gMScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdoNXZjY19zc28uY2MnLAotICAgICAgICAgICAgJ2g1dmNjX3Nzby5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9FTkFCTEVfU1NPJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDT0JBTFRfRU5BQkxFX1NTTycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3NiX2V2ZXJncmVlbiA9PSAxJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2g1dmNjX3VwZGF0ZXIuY2MnLAotICAgICAgICAgICAgJ2g1dmNjX3VwZGF0ZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvdXBkYXRlci91cGRhdGVyLmd5cDp1cGRhdGVyJywKLSAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2g1dmNjX3Rlc3RpbmcnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvaDV2Y2MuaWRsIGIvY29iYWx0L2g1dmNjL2g1dmNjLmlkbAppbmRleCBlNTViYmFkLi5lYjEwMjM2IDEwMDY0NAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2MuaWRsCisrKyBiL2NvYmFsdC9oNXZjYy9oNXZjYy5pZGwKQEAgLTI3LDcgKzI3LDcgQEAKIC8vIGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAKIC8vIE5vdGU6IGV2ZXJ5IGF0dHJpYnV0ZSBkZWZpbmVkIGhlcmUgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBpbnRlcmZhY2UgaWRsCi0vLyBmaWxlIGluY2x1ZGVkIGluIGJyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cCB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gaWYgdGhlcmUgaXMKKy8vIGZpbGUgaW5jbHVkZWQgaW4gQlVJTEQuZ24gdW5jb25kaXRpb25hbGx5LCBldmVuIGlmIHRoZXJlIGlzCiAvLyBhIGNvbmRpdGlvbiBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGUuCiAKIGludGVyZmFjZSBINXZjYyB7CmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmNjIGIvY29iYWx0L2g1dmNjL2g1dmNjX2NyYXNoX2xvZy5jYwppbmRleCA2ZWFmYzZmLi40MWRhZDY3IDEwMDY0NAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmNjCisrKyBiL2NvYmFsdC9oNXZjYy9oNXZjY19jcmFzaF9sb2cuY2MKQEAgLTEyMyw1ICsxMjMsNjggQEAKICAgfQogfQogCitib29sIEg1dmNjQ3Jhc2hMb2c6OlJlZ2lzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoZG9nU3RhdGUgd2F0Y2hkb2dfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdGltZV9pbnRlcnZhbCwgaW50NjRfdCB0aW1lX3dhaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhdGNoZG9nUmVwbGFjZSB3YXRjaGRvZ19yZXBsYWNlKSB7CisgIHdhdGNoZG9nOjpXYXRjaGRvZyogd2F0Y2hkb2cgPSB3YXRjaGRvZzo6V2F0Y2hkb2c6OkdldEluc3RhbmNlKCk7CisgIGlmICh3YXRjaGRvZykgeworICAgIGJhc2U6OkFwcGxpY2F0aW9uU3RhdGUgbW9uaXRvcl9zdGF0ZTsKKyAgICBzd2l0Y2ggKHdhdGNoZG9nX3N0YXRlKSB7CisgICAgICBjYXNlIGtXYXRjaGRvZ1N0YXRlU3RhcnRlZDoKKyAgICAgICAgbW9uaXRvcl9zdGF0ZSA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtXYXRjaGRvZ1N0YXRlQmx1cnJlZDoKKyAgICAgICAgbW9uaXRvcl9zdGF0ZSA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlQmx1cnJlZDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIGtXYXRjaGRvZ1N0YXRlQ29uY2VhbGVkOgorICAgICAgICBtb25pdG9yX3N0YXRlID0gYmFzZTo6a0FwcGxpY2F0aW9uU3RhdGVDb25jZWFsZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrV2F0Y2hkb2dTdGF0ZUZyb3plbjoKKyAgICAgICAgbW9uaXRvcl9zdGF0ZSA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlRnJvemVuOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIG1vbml0b3Jfc3RhdGUgPSBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQ7CisgICAgfQorICAgIHdhdGNoZG9nOjpSZXBsYWNlIHJlcGxhY2U7CisgICAgc3dpdGNoICh3YXRjaGRvZ19yZXBsYWNlKSB7CisgICAgICBjYXNlIGtXYXRjaGRvZ1JlcGxhY2VOb25lOgorICAgICAgICByZXBsYWNlID0gd2F0Y2hkb2c6Ok5PTkU7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrV2F0Y2hkb2dSZXBsYWNlUGluZzoKKyAgICAgICAgcmVwbGFjZSA9IHdhdGNoZG9nOjpQSU5HOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1dhdGNoZG9nUmVwbGFjZUFsbDoKKyAgICAgICAgcmVwbGFjZSA9IHdhdGNoZG9nOjpBTEw7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmVwbGFjZSA9IHdhdGNoZG9nOjpOT05FOworICAgIH0KKyAgICByZXR1cm4gd2F0Y2hkb2ctPlJlZ2lzdGVyKG5hbWUsIGRlc2NyaXB0aW9uLCBtb25pdG9yX3N0YXRlLCB0aW1lX2ludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV93YWl0LCByZXBsYWNlKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSDV2Y2NDcmFzaExvZzo6VW5yZWdpc3Rlcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgeworICB3YXRjaGRvZzo6V2F0Y2hkb2cqIHdhdGNoZG9nID0gd2F0Y2hkb2c6OldhdGNoZG9nOjpHZXRJbnN0YW5jZSgpOworICBpZiAod2F0Y2hkb2cpIHJldHVybiB3YXRjaGRvZy0+VW5yZWdpc3RlcihuYW1lKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEg1dmNjQ3Jhc2hMb2c6OlBpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHBpbmdfaW5mbykgeworICB3YXRjaGRvZzo6V2F0Y2hkb2cqIHdhdGNoZG9nID0gd2F0Y2hkb2c6OldhdGNoZG9nOjpHZXRJbnN0YW5jZSgpOworICBpZiAod2F0Y2hkb2cpIHJldHVybiB3YXRjaGRvZy0+UGluZyhuYW1lLCBwaW5nX2luZm8pOworICByZXR1cm4gZmFsc2U7Cit9CisKK3N0ZDo6c3RyaW5nIEg1dmNjQ3Jhc2hMb2c6OkdldFdhdGNoZG9nVmlvbGF0aW9ucyhib29sIGN1cnJlbnQpIHsKKyAgd2F0Y2hkb2c6OldhdGNoZG9nKiB3YXRjaGRvZyA9IHdhdGNoZG9nOjpXYXRjaGRvZzo6R2V0SW5zdGFuY2UoKTsKKyAgaWYgKHdhdGNoZG9nKSByZXR1cm4gd2F0Y2hkb2ctPkdldFdhdGNoZG9nVmlvbGF0aW9ucyhjdXJyZW50KTsKKyAgcmV0dXJuICIiOworfQorCiB9ICAvLyBuYW1lc3BhY2UgaDV2Y2MKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9oNXZjYy9oNXZjY19jcmFzaF9sb2cuaCBiL2NvYmFsdC9oNXZjYy9oNXZjY19jcmFzaF9sb2cuaAppbmRleCAxZWExM2RjLi4zZTQ0ZjExIDEwMDY0NAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmgKKysrIGIvY29iYWx0L2g1dmNjL2g1dmNjX2NyYXNoX2xvZy5oCkBAIC0xOCw3ICsxOCwxMCBAQAogI2luY2x1ZGUgPHN0cmluZz4KIAogI2luY2x1ZGUgImNvYmFsdC9oNXZjYy9oNXZjY19jcmFzaF90eXBlLmgiCisjaW5jbHVkZSAiY29iYWx0L2g1dmNjL3dhdGNoZG9nX3JlcGxhY2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvaDV2Y2Mvd2F0Y2hkb2dfc3RhdGUuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgorI2luY2x1ZGUgImNvYmFsdC93YXRjaGRvZy93YXRjaGRvZy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBoNXZjYyB7CkBAIC0zMSw2ICszNCwxNiBAQAogCiAgIHZvaWQgVHJpZ2dlckNyYXNoKEg1dmNjQ3Jhc2hUeXBlIGludGVudCk7CiAKKyAgYm9vbCBSZWdpc3Rlcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgIFdhdGNoZG9nU3RhdGUgd2F0Y2hkb2dfc3RhdGUsIGludDY0X3QgdGltZV9pbnRlcnZhbCwKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVfd2FpdCwgV2F0Y2hkb2dSZXBsYWNlIHdhdGNoZG9nX3JlcGxhY2UpOworCisgIGJvb2wgVW5yZWdpc3Rlcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7CisKKyAgYm9vbCBQaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgcGluZ19pbmZvKTsKKworICBzdGQ6OnN0cmluZyBHZXRXYXRjaGRvZ1Zpb2xhdGlvbnMoYm9vbCBjdXJyZW50KTsKKwogICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoSDV2Y2NDcmFzaExvZyk7CiAKICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvY29iYWx0L2g1dmNjL2g1dmNjX2NyYXNoX2xvZy5pZGwgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmlkbAppbmRleCBjNWRmODQ5Li40NWIxMzUzIDEwMDY0NAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmlkbAorKysgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfY3Jhc2hfbG9nLmlkbApAQCAtMzEsNCArMzEsMzMgQEAKICAgLy8gdHlwZSBvZiBjcmFzaC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBwbGF0Zm9ybS4gVGhpcyBBUEkgaXMgaW50ZW5kZWQgZm9yCiAgIC8vIHJlbGlhYmlsaXR5IHRlc3Rpbmcgb25seS4KICAgdm9pZCB0cmlnZ2VyQ3Jhc2goSDV2Y2NDcmFzaFR5cGUgaW50ZW50KTsKKworICAvLyBSZXR1cm5zIHRydWUgaWYgV2F0Y2hkb2cgY2xpZW50IHdhcyByZWdpc3RlcmVkLgorICAvLyAgIG5hbWUsIFdhdGNoZG9nIGNsaWVudCB0byByZWdpc3Rlci4KKyAgLy8gICBkZXNjcmlwdGlvbiwgaW5mb3JtYXRpb24gb24gdGhlIFdhdGNoZG9nIGNsaWVudC4KKyAgLy8gICBtb25pdG9yX3N0YXRlLCBhcHBsaWNhdGlvbiBzdGF0ZSB1cCB0byB3aGljaCB0aGUgY2xpZW50IGlzIG1vbml0b3JlZC4KKyAgLy8gICB0aW1lX2ludGVydmFsLCBtYXhpbXVtIG51bWJlciBvZiBtaWNyb3NlY29uZHMgYWxsb3dlZCBiZXR3ZWVuIHBpbmdzCisgIC8vICAgICBiZWZvcmUgdHJpZ2dlcmluZyBhIFdhdGNoZG9nIHZpb2xhdGlvbi4KKyAgLy8gICB0aW1lX3dhaXQsIG51bWJlciBvZiBtaWNyb3NlY29uZHMgdG8gaW5pdGlhbGx5IHdhaXQgYmVmb3JlIFdhdGNoZG9nCisgIC8vICAgICB2aW9sYXRpb25zIGNhbiBiZSB0cmlnZ2VyZWQuCisgIC8vICAgcmVwbGFjZSwgYmVoYXZpb3Igd2l0aCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgV2F0Y2hkb2cgY2xpZW50cyBvZiB0aGUKKyAgLy8gICAgIHNhbWUgbmFtZS4KKyAgYm9vbGVhbiByZWdpc3RlcihET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgIFdhdGNoZG9nU3RhdGUgd2F0Y2hkb2dfc3RhdGUsIGxvbmcgbG9uZyB0aW1lX2ludGVydmFsLAorICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyB0aW1lX3dhaXQsIFdhdGNoZG9nUmVwbGFjZSB3YXRjaGRvZ19yZXBsYWNlKTsKKworICAvLyBSZXR1cm5zIHRydWUgaWYgV2F0Y2hkb2cgY2xpZW50IHdhcyB1bnJlZ2lzdGVyZWQuIE5hbWUgZGV0ZXJtaW5lcyB0aGUKKyAgLy8gV2F0Y2hkb2cgY2xpZW50IHRvIHVucmVnaXN0ZXIuCisgIGJvb2xlYW4gdW5yZWdpc3RlcihET01TdHJpbmcgbmFtZSk7CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIFdhdGNoZG9nIGNsaWVudCB3YXMgcGluZ2VkLiBOYW1lIGRldGVybWluZXMgdGhlIFdhdGNoZG9nCisgIC8vIGNsaWVudCB0byBwaW5nIHdpdGggcGluZ19pbmZvIHdoaWNoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgY29udGFpbiByZWxldmFudAorICAvLyBtZXRhZGF0YS4KKyAgYm9vbGVhbiBwaW5nKERPTVN0cmluZyBuYW1lLCBET01TdHJpbmcgcGluZ19pbmZvKTsKKworICAvLyBSZXR1cm5zIGEganNvbiBzdHJpbmcgY29udGFpbmluZyB0aGUgV2F0Y2hkb2cgdmlvbGF0aW9ucy4gQ3VycmVudCBib29sZWFuCisgIC8vIGRldGVybWluZXMgd2hldGhlciB0aGUgY3VycmVudCBmaWxlIHJlcHJlc2VudGluZyBvbmdvaW5nIHZpb2xhdGlvbnMgb3IgdGhlCisgIC8vIHByZXZpb3VzIGZpbGUgY29udGFpbmluZyB2aW9sYXRpb25zIGZyb20gcHJldmlvdXMgYXBwIHN0YXJ0cyBhbmQgc2luY2UgdGhlCisgIC8vIGxhc3QgY2FsbCAodXAgdG8gYSBsaW1pdCkgaXMgcmV0dXJuZWQuCisgIERPTVN0cmluZyBnZXRXYXRjaGRvZ1Zpb2xhdGlvbnMoYm9vbGVhbiBjdXJyZW50KTsKIH07CmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfcGxhdGZvcm1fc2VydmljZS5jYyBiL2NvYmFsdC9oNXZjYy9oNXZjY19wbGF0Zm9ybV9zZXJ2aWNlLmNjCmluZGV4IGYyMGI1Y2EuLjRjYmY3NDMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9oNXZjYy9oNXZjY19wbGF0Zm9ybV9zZXJ2aWNlLmNjCisrKyBiL2NvYmFsdC9oNXZjYy9oNXZjY19wbGF0Zm9ybV9zZXJ2aWNlLmNjCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAKQEAgLTMwLDkgKzMxLDEwIEBACiAgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywgY29uc3Qgc3RkOjpzdHJpbmcgc2VydmljZV9uYW1lLAogICAgIGNvbnN0IFJlY2VpdmVDYWxsYmFja0FyZyYgcmVjZWl2ZV9jYWxsYmFjaykgewogICBEQ0hFQ0soc2V0dGluZ3MpOwotICBkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MgPQotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKLSAgYXV0byogZ2xvYmFsX2Vudmlyb25tZW50ID0gZG9tX3NldHRpbmdzLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKKyAgYXV0byogZ2xvYmFsX2Vudmlyb25tZW50ID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKTsKICAgRENIRUNLKGdsb2JhbF9lbnZpcm9ubWVudCk7CiAKICAgY29uc3QgRXh0UGxhdGZvcm1TZXJ2aWNlQXBpKiBwbGF0Zm9ybV9zZXJ2aWNlX2FwaSA9CmRpZmYgLS1naXQgYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuY2MgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuY2MKaW5kZXggYTdjNTA5ZS4uMmEwNmRlZSAxMDA2NDQKLS0tIGEvY29iYWx0L2g1dmNjL2g1dmNjX3RyYWNlX2V2ZW50LmNjCisrKyBiL2NvYmFsdC9oNXZjYy9oNXZjY190cmFjZV9ldmVudC5jYwpAQCAtNDUsMTIgKzQ1LDE2IEBACiAgIH0KIH0KIAotc3RkOjpzdHJpbmcgSDV2Y2NUcmFjZUV2ZW50OjpSZWFkKCkgeworc3RkOjpzdHJpbmcgSDV2Y2NUcmFjZUV2ZW50OjpSZWFkKGNvbnN0IHN0ZDo6c3RyaW5nJiByZWFkX2ZpbGVuYW1lKSB7CiAgIGlmICh0cmFjZV90b19maWxlXykgewogICAgIFN0b3AoKTsKICAgfQogICBzdGQ6OnN0cmluZyB0cmFjZTsKLSAgaWYgKCFsYXN0X2Fic29sdXRlX3BhdGhfLmVtcHR5KCkpIHsKKyAgaWYgKCFyZWFkX2ZpbGVuYW1lLmVtcHR5KCkpIHsKKyAgICBhdXRvIHBhdGggPSB0cmFjZV9ldmVudDo6U2NvcGVkVHJhY2VUb0ZpbGU6OmZpbGVwYXRoX3RvX2Fic29sdXRlKAorICAgICAgICBiYXNlOjpGaWxlUGF0aChyZWFkX2ZpbGVuYW1lKSk7CisgICAgUmVhZEZpbGVUb1N0cmluZyhwYXRoLCAmdHJhY2UpOworICB9IGVsc2UgaWYgKCFsYXN0X2Fic29sdXRlX3BhdGhfLmVtcHR5KCkpIHsKICAgICBSZWFkRmlsZVRvU3RyaW5nKGxhc3RfYWJzb2x1dGVfcGF0aF8sICZ0cmFjZSk7CiAgIH0KICAgcmV0dXJuIHRyYWNlOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2g1dmNjL2g1dmNjX3RyYWNlX2V2ZW50LmggYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuaAppbmRleCA5NjIxNDQ4Li41MjM5YWY3IDEwMDY0NAotLS0gYS9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuaAorKysgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuaApAQCAtNTEsNyArNTEsNyBAQAogCiAgIHZvaWQgU3RhcnQoY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dF9maWxlbmFtZSk7CiAgIHZvaWQgU3RvcCgpOwotICBzdGQ6OnN0cmluZyBSZWFkKCk7CisgIHN0ZDo6c3RyaW5nIFJlYWQoY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dF9maWxlbmFtZSk7CiAKICAgVFJBQ0VfRVZFTlQwX0ZPUl9FQUNIKERFRklORV9INVZDQ19UUkFDRV9FVkVOVDApCiAgIFRSQUNFX0VWRU5UMV9GT1JfRUFDSChERUZJTkVfSDVWQ0NfVFJBQ0VfRVZFTlQxKQpkaWZmIC0tZ2l0IGEvY29iYWx0L2g1dmNjL2g1dmNjX3RyYWNlX2V2ZW50LmlkbCBiL2NvYmFsdC9oNXZjYy9oNXZjY190cmFjZV9ldmVudC5pZGwKaW5kZXggM2UxYTIzYy4uMGIyYmNjZiAxMDA2NDQKLS0tIGEvY29iYWx0L2g1dmNjL2g1dmNjX3RyYWNlX2V2ZW50LmlkbAorKysgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfdHJhY2VfZXZlbnQuaWRsCkBAIC0xOSw3ICsxOSw3IEBACiAgIC8vIHdpbGwgYmUgdXNlZC4KICAgdm9pZCBzdGFydChvcHRpb25hbCBET01TdHJpbmcgb3V0cHV0X2ZpbGVuYW1lID0gIiIpOwogICB2b2lkIHN0b3AoKTsKLSAgRE9NU3RyaW5nIHJlYWQoKTsKKyAgRE9NU3RyaW5nIHJlYWQob3B0aW9uYWwgRE9NU3RyaW5nIHJlYWRfZmlsZW5hbWUgPSAiIik7CiAKICAgdm9pZCB0cmFjZUJlZ2luKERPTVN0cmluZyBjYXRlZ29yeSwgRE9NU3RyaW5nIG5hbWUpOwogICB2b2lkIHRyYWNlRW5kKERPTVN0cmluZyBjYXRlZ29yeSwgRE9NU3RyaW5nIG5hbWUpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2g1dmNjL2g1dmNjX3VwZGF0ZXIuaCBiL2NvYmFsdC9oNXZjYy9oNXZjY191cGRhdGVyLmgKaW5kZXggOGI4NjlmZi4uMjJjMzE4NSAxMDA2NDQKLS0tIGEvY29iYWx0L2g1dmNjL2g1dmNjX3VwZGF0ZXIuaAorKysgYi9jb2JhbHQvaDV2Y2MvaDV2Y2NfdXBkYXRlci5oCkBAIC0xNCw3ICsxNCw3IEBACiAKIC8vIE5vdGU6IHRoaXMgaGVhZGVyIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBiaW5kaW5ncyBmb3IgdGhlIEg1dmNjVXBkYXRlcgogLy8gaW50ZXJmYWNlIGV2ZW4gb24gbm9uLWV2ZXJncmVlbiBwbGF0Zm9ybXMgd2hlcmUgdGhpcyBoZWFkZXIgaXMgbm90IGluY2x1ZGVkCi0vLyBpbiB0aGUgaDV2Y2MuZ3lwIGZpbGUuIEJ1dCBldmVudHVhbGx5IHRoZSB1cGRhdGVyIGF0dHJpYnV0ZS9pbnRlcmZhY2Ugd2lsbAorLy8gaW4gdGhlIEJVSUxELmduIGZpbGUuIEJ1dCBldmVudHVhbGx5IHRoZSB1cGRhdGVyIGF0dHJpYnV0ZS9pbnRlcmZhY2Ugd2lsbAogLy8gbm90IGJlIHByZXNlbnQgaW4gdGhlIHdpbmRvdy5INXZjYyBpbnRlcmZhY2Ugb24gbm9uLWV2ZXJncmVlbiBwbGF0Zm9ybXMuCiAKICNpZm5kZWYgQ09CQUxUX0g1VkNDX0g1VkNDX1VQREFURVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9oNXZjYy93YXRjaGRvZ19yZXBsYWNlLmlkbCBiL2NvYmFsdC9oNXZjYy93YXRjaGRvZ19yZXBsYWNlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhhM2QxCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L2g1dmNjL3dhdGNoZG9nX3JlcGxhY2UuaWRsCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gV2F0Y2hkb2cgcmVnaXN0ZXIgYmVoYXZpb3Igd2l0aCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgY2xpZW50cyBvZiB0aGUgc2FtZQorLy8gbmFtZS4KK2VudW0gV2F0Y2hkb2dSZXBsYWNlIHsKKyAgIm5vbmUiLAorICAicGluZyIsCisgICJhbGwiLAorfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9oNXZjYy93YXRjaGRvZ19zdGF0ZS5pZGwgYi9jb2JhbHQvaDV2Y2Mvd2F0Y2hkb2dfc3RhdGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OGU4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvaDV2Y2Mvd2F0Y2hkb2dfc3RhdGUuaWRsCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gV2F0Y2hkb2cgYXBwbGljYXRpb24gc3RhdGUsIHVzZWQgdG8gc3RhcnQvc3RvcCBtb25pdG9yaW5nIGFzIG5lZWRlZC4KK2VudW0gV2F0Y2hkb2dTdGF0ZSB7CisgICJzdGFydGVkIiwKKyAgImJsdXJyZWQiLAorICAiY29uY2VhbGVkIiwKKyAgImZyb3plbiIsCit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L2lucHV0L2lucHV0Lmd5cCBiL2NvYmFsdC9pbnB1dC9pbnB1dC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWRmMWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2lucHV0L2lucHV0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnB1dCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NhbWVyYV8zZC5oJywKLSAgICAgICAgJ2NyZWF0ZV9kZWZhdWx0X2NhbWVyYV8zZC5oJywKLSAgICAgICAgJ2lucHV0X2RldmljZV9tYW5hZ2VyLmgnLAotICAgICAgICAnaW5wdXRfZGV2aWNlX21hbmFnZXJfZGVza3RvcC5jYycsCi0gICAgICAgICdpbnB1dF9kZXZpY2VfbWFuYWdlcl9kZXNrdG9wLmgnLAotICAgICAgICAnaW5wdXRfZGV2aWNlX21hbmFnZXJfZnV6emVyLmNjJywKLSAgICAgICAgJ2lucHV0X2RldmljZV9tYW5hZ2VyX2Z1enplci5oJywKLSAgICAgICAgJ2lucHV0X2RldmljZV9tYW5hZ2VyX3N0YXJib2FyZC5jYycsCi0gICAgICAgICdpbnB1dF9wb2xsZXIuaCcsCi0gICAgICAgICdpbnB1dF9wb2xsZXJfaW1wbC5jYycsCi0gICAgICAgICdpbnB1dF9wb2xsZXJfaW1wbC5oJywKLSAgICAgICAgJ2tleV9ldmVudF9oYW5kbGVyLmNjJywKLSAgICAgICAgJ2tleV9ldmVudF9oYW5kbGVyLmgnLAotICAgICAgICAna2V5X3JlcGVhdF9maWx0ZXIuY2MnLAotICAgICAgICAna2V5X3JlcGVhdF9maWx0ZXIuaCcsCi0gICAgICAgICdrZXlwcmVzc19nZW5lcmF0b3JfZmlsdGVyLmNjJywKLSAgICAgICAgJ2tleXByZXNzX2dlbmVyYXRvcl9maWx0ZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXA6c3BlZWNoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuZ3lwOnN5c3RlbV93aW5kb3cnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV92cj09MScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdwcml2YXRlL2NhbWVyYV8zZF92ci5jYycsCi0gICAgICAgICAgICAncHJpdmF0ZS9jYW1lcmFfM2RfdnIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgeyAjIGVuYWJsZV92ciE9MQotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2NhbWVyYV8zZF9pbnB1dF9wb2xsZXIuY2MnLAotICAgICAgICAgICAgJ2NhbWVyYV8zZF9pbnB1dF9wb2xsZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvaW5wdXQvaW5wdXRfZGV2aWNlX21hbmFnZXIuaCBiL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlci5oCmluZGV4IGI0NGU2NzkuLjVmNDU2N2UgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlci5oCisrKyBiL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlci5oCkBAIC00MCwxMSArNDAsOCBAQAogdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6V2hlZWxFdmVudEluaXQmKT4KICAgICBXaGVlbEV2ZW50Q2FsbGJhY2s7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGJhc2U6OlRva2VuIHR5cGUsIGNvbnN0IGRvbTo6SW5wdXRFdmVudEluaXQmKT4KICAgICBJbnB1dEV2ZW50Q2FsbGJhY2s7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKIC8vIElucHV0RGV2aWNlTWFuYWdlciBsaXN0ZW5zIHRvIGV2ZW50cyBmcm9tIHBsYXRmb3JtLXNwZWNpZmljIGlucHV0IGRldmljZXMKIC8vIGFuZCBtYXBzIHRoZW0gdG8gcGxhdGZvcm0taW5kZXBlbmRlbnQga2V5Ym9hcmQga2V5IGV2ZW50cy4KQEAgLTU2LDEwICs1Myw3IEBACiAgICAgICBjb25zdCBLZXlib2FyZEV2ZW50Q2FsbGJhY2smIGtleWJvYXJkX2V2ZW50X2NhbGxiYWNrLAogICAgICAgY29uc3QgUG9pbnRlckV2ZW50Q2FsbGJhY2smIHBvaW50ZXJfZXZlbnRfY2FsbGJhY2ssCiAgICAgICBjb25zdCBXaGVlbEV2ZW50Q2FsbGJhY2smIHdoZWVsX2V2ZW50X2NhbGxiYWNrLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgICBjb25zdCBJbnB1dEV2ZW50Q2FsbGJhY2smIGlucHV0X2V2ZW50X2NhbGxiYWNrLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIHN5c3RlbV93aW5kb3c6OlN5c3RlbVdpbmRvdyogc3lzdGVtX3dpbmRvdyk7CiAKICAgdmlydHVhbCB+SW5wdXREZXZpY2VNYW5hZ2VyKCkge30KZGlmZiAtLWdpdCBhL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlcl9kZXNrdG9wLmNjIGIvY29iYWx0L2lucHV0L2lucHV0X2RldmljZV9tYW5hZ2VyX2Rlc2t0b3AuY2MKaW5kZXggOWRkNjViNi4uMjQ0NmZjNyAxMDA2NDQKLS0tIGEvY29iYWx0L2lucHV0L2lucHV0X2RldmljZV9tYW5hZ2VyX2Rlc2t0b3AuY2MKKysrIGIvY29iYWx0L2lucHV0L2lucHV0X2RldmljZV9tYW5hZ2VyX2Rlc2t0b3AuY2MKQEAgLTUyLDE5ICs1MiwxMyBAQAogICAgIGNvbnN0IEtleWJvYXJkRXZlbnRDYWxsYmFjayYga2V5Ym9hcmRfZXZlbnRfY2FsbGJhY2ssCiAgICAgY29uc3QgUG9pbnRlckV2ZW50Q2FsbGJhY2smIHBvaW50ZXJfZXZlbnRfY2FsbGJhY2ssCiAgICAgY29uc3QgV2hlZWxFdmVudENhbGxiYWNrJiB3aGVlbF9ldmVudF9jYWxsYmFjaywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAgIGNvbnN0IElucHV0RXZlbnRDYWxsYmFjayYgaW5wdXRfZXZlbnRfY2FsbGJhY2ssCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgc3lzdGVtX3dpbmRvdzo6U3lzdGVtV2luZG93KiBzeXN0ZW1fd2luZG93KQogICAgIDogc3lzdGVtX3dpbmRvd18oc3lzdGVtX3dpbmRvdyksCiAgICAgICBzeXN0ZW1fd2luZG93X2lucHV0X2V2ZW50X2NhbGxiYWNrXygKICAgICAgICAgICBiYXNlOjpCaW5kKCZJbnB1dERldmljZU1hbmFnZXJEZXNrdG9wOjpIYW5kbGVTeXN0ZW1XaW5kb3dJbnB1dEV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgICBpbnB1dF9ldmVudF9jYWxsYmFja18oaW5wdXRfZXZlbnRfY2FsbGJhY2spLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIGtleXByZXNzX2dlbmVyYXRvcl9maWx0ZXJfKGtleWJvYXJkX2V2ZW50X2NhbGxiYWNrKSwKICAgICAgIHBvaW50ZXJfZXZlbnRfY2FsbGJhY2tfKHBvaW50ZXJfZXZlbnRfY2FsbGJhY2spLAogICAgICAgd2hlZWxfZXZlbnRfY2FsbGJhY2tfKHdoZWVsX2V2ZW50X2NhbGxiYWNrKSB7CkBAIC0yOTgsNyArMjkyLDYgQEAKICAgd2hlZWxfZXZlbnRfY2FsbGJhY2tfLlJ1bih0eXBlLCB3aGVlbF9ldmVudCk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBJbnB1dERldmljZU1hbmFnZXJEZXNrdG9wOjpIYW5kbGVJbnB1dEV2ZW50KAogICAgIGNvbnN0IHN5c3RlbV93aW5kb3c6OklucHV0RXZlbnQqIGV2ZW50KSB7CiAgIC8vIE5vdGU6IHdlIGN1cnJlbnRseSB0cmVhdCBhbGwgZG9tOjpJbnB1dEV2ZW50cyBhcyBpbnB1dCAobmV2ZXIgYmVmb3JlaW5wdXQpLgpAQCAtMzEwLDggKzMwMyw2IEBACiAgIGlucHV0X2V2ZW50LnNldF9pc19jb21wb3NpbmcoZXZlbnQtPmlzX2NvbXBvc2luZygpKTsKICAgaW5wdXRfZXZlbnRfY2FsbGJhY2tfLlJ1bih0eXBlLCBpbnB1dF9ldmVudCk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKIHZvaWQgSW5wdXREZXZpY2VNYW5hZ2VyRGVza3RvcDo6SGFuZGxlU3lzdGVtV2luZG93SW5wdXRFdmVudCgKICAgICBjb25zdCBiYXNlOjpFdmVudCogZXZlbnQpIHsKQEAgLTM3MSwxMSArMzYyLDggQEAKICAgICAgIEhhbmRsZVdoZWVsRXZlbnQoaW5wdXRfZXZlbnQpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBzeXN0ZW1fd2luZG93OjpJbnB1dEV2ZW50OjprSW5wdXQ6Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIEhhbmRsZUlucHV0RXZlbnQoaW5wdXRfZXZlbnQpOwogICAgICAgYnJlYWs7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgY2FzZSBzeXN0ZW1fd2luZG93OjpJbnB1dEV2ZW50OjprS2V5TW92ZToKICAgICAgIGJyZWFrOwogICB9CmRpZmYgLS1naXQgYS9jb2JhbHQvaW5wdXQvaW5wdXRfZGV2aWNlX21hbmFnZXJfZGVza3RvcC5oIGIvY29iYWx0L2lucHV0L2lucHV0X2RldmljZV9tYW5hZ2VyX2Rlc2t0b3AuaAppbmRleCAxZDdhNjEwLi45MzY5N2Q0IDEwMDY0NAotLS0gYS9jb2JhbHQvaW5wdXQvaW5wdXRfZGV2aWNlX21hbmFnZXJfZGVza3RvcC5oCisrKyBiL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlcl9kZXNrdG9wLmgKQEAgLTI4LDEwICsyOCw3IEBACiAgICAgICBjb25zdCBLZXlib2FyZEV2ZW50Q2FsbGJhY2smIGtleWJvYXJkX2V2ZW50X2NhbGxiYWNrLAogICAgICAgY29uc3QgUG9pbnRlckV2ZW50Q2FsbGJhY2smIHBvaW50ZXJfZXZlbnRfY2FsbGJhY2ssCiAgICAgICBjb25zdCBXaGVlbEV2ZW50Q2FsbGJhY2smIHdoZWVsX2V2ZW50X2NhbGxiYWNrLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgICBjb25zdCBJbnB1dEV2ZW50Q2FsbGJhY2smIGlucHV0X2V2ZW50X2NhbGxiYWNrLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICAgIHN5c3RlbV93aW5kb3c6OlN5c3RlbVdpbmRvdyogc3lzdGVtX3dpbmRvdyk7CiAKICAgfklucHV0RGV2aWNlTWFuYWdlckRlc2t0b3AoKSBvdmVycmlkZTsKQEAgLTQ1LDEwICs0Miw3IEBACiAgIHZvaWQgSGFuZGxlS2V5Ym9hcmRFdmVudChib29sIGlzX2tleV9kb3duLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3lzdGVtX3dpbmRvdzo6SW5wdXRFdmVudCogaW5wdXRfZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X2NvZGUpOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIHZvaWQgSGFuZGxlSW5wdXRFdmVudChjb25zdCBzeXN0ZW1fd2luZG93OjpJbnB1dEV2ZW50KiBldmVudCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgdm9pZCBIYW5kbGVQb2ludGVyRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3lzdGVtX3dpbmRvdzo6SW5wdXRFdmVudCogaW5wdXRfZXZlbnQpOwpAQCAtNjMsMTEgKzU3LDggQEAKICAgLy8gb2JqZWN0IGlzIGRlc3Ryb3llZC4KICAgYmFzZTo6RXZlbnRDYWxsYmFjayBzeXN0ZW1fd2luZG93X2lucHV0X2V2ZW50X2NhbGxiYWNrXzsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIC8vIENhbGxlZCB0byBoYW5kbGUgYW4gaW5wdXRfZXZlbnQuCiAgIElucHV0RXZlbnRDYWxsYmFjayBpbnB1dF9ldmVudF9jYWxsYmFja187Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgLy8gS2V5Ym9hcmQgZXZlbnQgZmlsdGVycyB0byBwcm9jZXNzIHRoZSBldmVudHMgZ2VuZXJhdGVkLgogICBLZXlwcmVzc0dlbmVyYXRvckZpbHRlciBrZXlwcmVzc19nZW5lcmF0b3JfZmlsdGVyXzsKZGlmZiAtLWdpdCBhL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlcl9zdGFyYm9hcmQuY2MgYi9jb2JhbHQvaW5wdXQvaW5wdXRfZGV2aWNlX21hbmFnZXJfc3RhcmJvYXJkLmNjCmluZGV4IGY0MjI4Y2UuLjcxOWYzZTYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9pbnB1dC9pbnB1dF9kZXZpY2VfbWFuYWdlcl9zdGFyYm9hcmQuY2MKKysrIGIvY29iYWx0L2lucHV0L2lucHV0X2RldmljZV9tYW5hZ2VyX3N0YXJib2FyZC5jYwpAQCAtMjQsMTggKzI0LDExIEBACiAgICAgY29uc3QgS2V5Ym9hcmRFdmVudENhbGxiYWNrJiBrZXlib2FyZF9ldmVudF9jYWxsYmFjaywKICAgICBjb25zdCBQb2ludGVyRXZlbnRDYWxsYmFjayYgcG9pbnRlcl9ldmVudF9jYWxsYmFjaywKICAgICBjb25zdCBXaGVlbEV2ZW50Q2FsbGJhY2smIHdoZWVsX2V2ZW50X2NhbGxiYWNrLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgICAgY29uc3QgSW5wdXRFdmVudENhbGxiYWNrJiBpbnB1dF9ldmVudF9jYWxsYmFjaywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICBzeXN0ZW1fd2luZG93OjpTeXN0ZW1XaW5kb3cqIHN5c3RlbV93aW5kb3cpIHsKICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbnB1dERldmljZU1hbmFnZXI+KG5ldyBJbnB1dERldmljZU1hbmFnZXJEZXNrdG9wKAogICAgICAga2V5Ym9hcmRfZXZlbnRfY2FsbGJhY2ssIHBvaW50ZXJfZXZlbnRfY2FsbGJhY2ssIHdoZWVsX2V2ZW50X2NhbGxiYWNrLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0gICAgICBpbnB1dF9ldmVudF9jYWxsYmFjaywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0gICAgICBzeXN0ZW1fd2luZG93KSk7CisgICAgICBpbnB1dF9ldmVudF9jYWxsYmFjaywgc3lzdGVtX3dpbmRvdykpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgaW5wdXQKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXQvQlVJTEQuZ24gYi9jb2JhbHQvbGF5b3V0L0JVSUxELmduCmluZGV4IDFkYWExYTg5Li41MDcwYTY1IDEwMDY0NAotLS0gYS9jb2JhbHQvbGF5b3V0L0JVSUxELmduCisrKyBiL2NvYmFsdC9sYXlvdXQvQlVJTEQuZ24KQEAgLTk2LDYgKzk2LDEwIEBACiAgICAgIndoaXRlX3NwYWNlX3Byb2Nlc3NpbmcuaCIsCiAgIF0KIAorICBpZiAoaXNfZGVidWcpIHsKKyAgICBkZWZpbmVzID0gWyAiQ09CQUxUX0JPWF9EVU1QX0VOQUJMRUQiIF0KKyAgfQorCiAgIGNvbmZpZ3MgLT0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNpemUiIF0KICAgY29uZmlncyArPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c3BlZWQiIF0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L2xheW91dC9ib3hfZ2VuZXJhdG9yLmNjIGIvY29iYWx0L2xheW91dC9ib3hfZ2VuZXJhdG9yLmNjCmluZGV4IDZhMDllZDEuLmEwZTA0MzggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9sYXlvdXQvYm94X2dlbmVyYXRvci5jYworKysgYi9jb2JhbHQvbGF5b3V0L2JveF9nZW5lcmF0b3IuY2MKQEAgLTExNiwxNCArMTE2LDggQEAKICAgfQogICBnZW5lcmF0aW5nX2h0bWxfZWxlbWVudF8gPSBodG1sX2VsZW1lbnQ7CiAKLSAgYm9vbCBwYXJ0aWFsX2xheW91dF9pc19lbmFibGVkID0gdHJ1ZTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9QQVJUSUFMX0xBWU9VVF9DT05UUk9MKQotICBwYXJ0aWFsX2xheW91dF9pc19lbmFibGVkID0KLSAgICAgIGh0bWxfZWxlbWVudC0+bm9kZV9kb2N1bWVudCgpLT5wYXJ0aWFsX2xheW91dF9pc19lbmFibGVkKCk7Ci0jZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX1BBUlRJQUxfTEFZT1VUX0NPTlRST0wpCi0KICAgLy8gSWYgdGhlIGh0bWwgZWxlbWVudCBhbHJlYWR5IGhhcyBsYXlvdXQgYm94ZXMsIHdlIGNhbiByZXVzZSB0aGVtLgotICBpZiAocGFydGlhbF9sYXlvdXRfaXNfZW5hYmxlZCAmJiBodG1sX2VsZW1lbnQtPmxheW91dF9ib3hlcygpKSB7CisgIGlmIChodG1sX2VsZW1lbnQtPmxheW91dF9ib3hlcygpKSB7CiAgICAgTGF5b3V0Qm94ZXMqIGxheW91dF9ib3hlcyA9CiAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PExheW91dEJveGVzKj4oaHRtbF9lbGVtZW50LT5sYXlvdXRfYm94ZXMoKSk7CiAgICAgRENIRUNLKGJveGVzXy5lbXB0eSgpKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXQvbGF5b3V0Lmd5cCBiL2NvYmFsdC9sYXlvdXQvbGF5b3V0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAxYzBjMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbGF5b3V0L2xheW91dC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Fub255bW91c19ibG9ja19ib3guY2MnLAotICAgICAgICAnYW5vbnltb3VzX2Jsb2NrX2JveC5oJywKLSAgICAgICAgJ2Jhc2VfZGlyZWN0aW9uLmgnLAotICAgICAgICAnYmVuY2htYXJrX3N0YXRfbmFtZXMuY2MnLAotICAgICAgICAnYmVuY2htYXJrX3N0YXRfbmFtZXMuaCcsCi0gICAgICAgICdibG9ja19jb250YWluZXJfYm94LmNjJywKLSAgICAgICAgJ2Jsb2NrX2NvbnRhaW5lcl9ib3guaCcsCi0gICAgICAgICdibG9ja19mb3JtYXR0aW5nX2Jsb2NrX2NvbnRhaW5lcl9ib3guY2MnLAotICAgICAgICAnYmxvY2tfZm9ybWF0dGluZ19ibG9ja19jb250YWluZXJfYm94LmgnLAotICAgICAgICAnYmxvY2tfZm9ybWF0dGluZ19jb250ZXh0LmNjJywKLSAgICAgICAgJ2Jsb2NrX2Zvcm1hdHRpbmdfY29udGV4dC5oJywKLSAgICAgICAgJ2Jsb2NrX2xldmVsX3JlcGxhY2VkX2JveC5jYycsCi0gICAgICAgICdibG9ja19sZXZlbF9yZXBsYWNlZF9ib3guaCcsCi0gICAgICAgICdib3guY2MnLAotICAgICAgICAnYm94LmgnLAotICAgICAgICAnYm94X2dlbmVyYXRvci5jYycsCi0gICAgICAgICdib3hfZ2VuZXJhdG9yLmgnLAotICAgICAgICAnYm94X2ludGVyc2VjdGlvbl9vYnNlcnZlcl9tb2R1bGUuY2MnLAotICAgICAgICAnYm94X2ludGVyc2VjdGlvbl9vYnNlcnZlcl9tb2R1bGUuaCcsCi0gICAgICAgICdjb250YWluZXJfYm94LmNjJywKLSAgICAgICAgJ2NvbnRhaW5lcl9ib3guaCcsCi0gICAgICAgICdmbGV4X2NvbnRhaW5lcl9ib3guY2MnLAotICAgICAgICAnZmxleF9jb250YWluZXJfYm94LmgnLAotICAgICAgICAnZmxleF9mb3JtYXR0aW5nX2NvbnRleHQuY2MnLAotICAgICAgICAnZmxleF9mb3JtYXR0aW5nX2NvbnRleHQuaCcsCi0gICAgICAgICdmbGV4X2l0ZW0uY2MnLAotICAgICAgICAnZmxleF9pdGVtLmgnLAotICAgICAgICAnZmxleF9saW5lLmNjJywKLSAgICAgICAgJ2ZsZXhfbGluZS5oJywKLSAgICAgICAgJ2xldHRlcmJveGVkX2ltYWdlLmNjJywKLSAgICAgICAgJ2xldHRlcmJveGVkX2ltYWdlLmgnLAotICAgICAgICAnZm9ybWF0dGluZ19jb250ZXh0LmgnLAotICAgICAgICAnaW5pdGlhbF9jb250YWluaW5nX2Jsb2NrLmNjJywKLSAgICAgICAgJ2luaXRpYWxfY29udGFpbmluZ19ibG9jay5oJywKLSAgICAgICAgJ2lubGluZV9jb250YWluZXJfYm94LmNjJywKLSAgICAgICAgJ2lubGluZV9jb250YWluZXJfYm94LmgnLAotICAgICAgICAnaW5saW5lX2Zvcm1hdHRpbmdfY29udGV4dC5jYycsCi0gICAgICAgICdpbmxpbmVfZm9ybWF0dGluZ19jb250ZXh0LmgnLAotICAgICAgICAnaW5saW5lX2xldmVsX3JlcGxhY2VkX2JveC5jYycsCi0gICAgICAgICdpbmxpbmVfbGV2ZWxfcmVwbGFjZWRfYm94LmgnLAotICAgICAgICAnaW5zZXRzX2xheW91dF91bml0LmNjJywKLSAgICAgICAgJ2luc2V0c19sYXlvdXRfdW5pdC5oJywKLSAgICAgICAgJ2ludGVyc2VjdGlvbl9vYnNlcnZlcl9yb290LmgnLAotICAgICAgICAnaW50ZXJzZWN0aW9uX29ic2VydmVyX3RhcmdldC5jYycsCi0gICAgICAgICdpbnRlcnNlY3Rpb25fb2JzZXJ2ZXJfdGFyZ2V0LmgnLAotICAgICAgICAnbGF5b3V0LmNjJywKLSAgICAgICAgJ2xheW91dC5oJywKLSAgICAgICAgJ2xheW91dF91bml0LmgnLAotICAgICAgICAnbGF5b3V0X2JveGVzLmNjJywKLSAgICAgICAgJ2xheW91dF9ib3hlcy5oJywKLSAgICAgICAgJ2xheW91dF9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ2xheW91dF9tYW5hZ2VyLmgnLAotICAgICAgICAnbGF5b3V0X3N0YXRfdHJhY2tlci5jYycsCi0gICAgICAgICdsYXlvdXRfc3RhdF90cmFja2VyLmgnLAotICAgICAgICAnbGluZV9ib3guY2MnLAotICAgICAgICAnbGluZV9ib3guaCcsCi0gICAgICAgICdsaW5lX3dyYXBwaW5nLmNjJywKLSAgICAgICAgJ2xpbmVfd3JhcHBpbmcuaCcsCi0gICAgICAgICdwYXJhZ3JhcGguY2MnLAotICAgICAgICAncGFyYWdyYXBoLmgnLAotICAgICAgICAncG9pbnRfbGF5b3V0X3VuaXQuY2MnLAotICAgICAgICAncG9pbnRfbGF5b3V0X3VuaXQuaCcsCi0gICAgICAgICdyZXBsYWNlZF9ib3guY2MnLAotICAgICAgICAncmVwbGFjZWRfYm94LmgnLAotICAgICAgICAncmVjdF9sYXlvdXRfdW5pdC5jYycsCi0gICAgICAgICdyZWN0X2xheW91dF91bml0LmgnLAotICAgICAgICAncmVuZGVyX3RyZWVfYW5pbWF0aW9ucy5oJywKLSAgICAgICAgJ3NpemVfbGF5b3V0X3VuaXQuY2MnLAotICAgICAgICAnc2l6ZV9sYXlvdXRfdW5pdC5oJywKLSAgICAgICAgJ3RleHRfYm94LmNjJywKLSAgICAgICAgJ3RleHRfYm94LmgnLAotICAgICAgICAndG9wbW9zdF9ldmVudF90YXJnZXQuY2MnLAotICAgICAgICAndG9wbW9zdF9ldmVudF90YXJnZXQuaCcsCi0gICAgICAgICd1c2VkX3N0eWxlLmNjJywKLSAgICAgICAgJ3VzZWRfc3R5bGUuaCcsCi0gICAgICAgICd2ZWN0b3IyZF9sYXlvdXRfdW5pdC5jYycsCi0gICAgICAgICd2ZWN0b3IyZF9sYXlvdXRfdW5pdC5oJywKLSAgICAgICAgJ3doaXRlX3NwYWNlX3Byb2Nlc3NpbmcuY2MnLAotICAgICAgICAnd2hpdGVfc3BhY2VfcHJvY2Vzc2luZy5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sb2FkZXIvbG9hZGVyLmd5cDpsb2FkZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcl90cmVlL3JlbmRlcl90cmVlLmd5cDphbmltYXRpb25zJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJfdHJlZS9yZW5kZXJfdHJlZS5neXA6cmVuZGVyX3RyZWUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3VpX25hdmlnYXRpb24vdWlfbmF2aWdhdGlvbi5neXA6dWlfbmF2aWdhdGlvbicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICBdLAotICAgICAgIyBFeHBvcnRpbmcgZG9tIHNvIHRoYXQgbGF5b3V0X3Rlc3QgZ2V0cyB0aGUgdHJhbnNpdGl2ZSBpbmNsdWRlIHBhdGhzIHRvCi0gICAgICAjIGluY2x1ZGUgZ2VuZXJhdGVkIGhlYWRlcnMuCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0aW5nJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndGVzdGluZy9tb2NrX2ltYWdlLmgnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbGV0dGVyYm94ZWRfaW1hZ2VfdGVzdC5jYycsCi0gICAgICAgICdsYXlvdXRfdW5pdF90ZXN0LmNjJywKLSAgICAgICAgJ3VzZWRfc3R5bGVfdGVzdC5jYycsCi0gICAgICAgICd3aGl0ZV9zcGFjZV9wcm9jZXNzaW5nX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3NzX3BhcnNlci9jc3NfcGFyc2VyLmd5cDpjc3NfcGFyc2VyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sYXlvdXQvbGF5b3V0Lmd5cDpsYXlvdXRfdGVzdGluZycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdsYXlvdXQnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdsYXlvdXRfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdsYXlvdXRfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL0JVSUxELmduIGIvY29iYWx0L2xheW91dF90ZXN0cy9CVUlMRC5nbgppbmRleCAwMWViOWUwLi4wOTJiOGRmIDEwMDY0NAotLS0gYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL0JVSUxELmduCisrKyBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvQlVJTEQuZ24KQEAgLTYzLDYgKzYzLDIwIEBACiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgICAgIi8vdXJsIiwKICAgXQorCisgIGNvbnRlbnRfZGVwcyA9IFsKKyAgICAiLy9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhOmxheW91dF9jb3B5X3Rlc3RfZGF0YSIsCisgICAgIi8vY29iYWx0L25ldHdvcms6Y29weV9zc2xfY2VydGlmaWNhdGVzIiwKKyAgICAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIsCisgIF0KKyAgaWYgKGNvYmFsdF9mb250X3BhY2thZ2UgPT0gImVtcHR5IikgeworICAgIGNvbnRlbnRfZGVwcyArPSBbICIvL2NvYmFsdC9jb250ZW50L2ZvbnRzOmNvcHlfZm9udF9kYXRhIiBdCisgIH0gZWxzZSB7CisgICAgY29udGVudF9kZXBzICs9IFsKKyAgICAgICIvL2NvYmFsdC9jb250ZW50L2ZvbnRzOmNvcHlfZm9udHMiLAorICAgICAgIi8vY29iYWx0L2NvbnRlbnQvZm9udHM6Zm9udHNfeG1sIiwKKyAgICBdCisgIH0KIH0KIAogdGFyZ2V0KGd0ZXN0X3RhcmdldF90eXBlLCAid2ViX3BsYXRmb3JtX3Rlc3RzIikgewpAQCAtODQsNCArOTgsNiBAQAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICAgICIvL3VybCIsCiAgIF0KKworICBjb250ZW50X2RlcHMgPSBbICIvL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGE6bGF5b3V0X2NvcHlfdGVzdF9kYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL2xheW91dF9zbmFwc2hvdC5jYyBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvbGF5b3V0X3NuYXBzaG90LmNjCmluZGV4IDcwM2E2YWQuLjEzNTczYzcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvbGF5b3V0X3NuYXBzaG90LmNjCisrKyBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvbGF5b3V0X3NuYXBzaG90LmNjCkBAIC04Myw3ICs4Myw3IEBACiAKICAgLy8gVXNlIHRlc3QgcnVubmVyIG1vZGUgdG8gYWxsb3cgdGhlIGNvbnRlbnQgaXRzZWxmIHRvIGRpY3RhdGUgd2hlbiBpdCBpcwogICAvLyByZWFkeSBmb3IgbGF5b3V0IHNob3VsZCBiZSBwZXJmb3JtZWQuICBTZWUgY29iYWx0L2RvbS90ZXN0X3J1bm5lci5oLgotICBicm93c2VyOjpXZWJNb2R1bGU6Ok9wdGlvbnMgd2ViX21vZHVsZV9vcHRpb25zOworICBicm93c2VyOjpXZWJNb2R1bGU6Ok9wdGlvbnMgd2ViX21vZHVsZV9vcHRpb25zKCJTbmFwc2hvdFVSTCIpOwogICB3ZWJfbW9kdWxlX29wdGlvbnMubGF5b3V0X3RyaWdnZXIgPSBsYXlvdXQ6OkxheW91dE1hbmFnZXI6OmtUZXN0UnVubmVyTW9kZTsKICAgd2ViX21vZHVsZV9vcHRpb25zLmltYWdlX2NhY2hlX2NhcGFjaXR5ID0ga0ltYWdlQ2FjaGVDYXBhY2l0eTsKICAgd2ViX21vZHVsZV9vcHRpb25zLnByb3ZpZGVfc2NyZWVuc2hvdF9mdW5jdGlvbiA9IHNjcmVlbnNob3RfcHJvdmlkZXI7CkBAIC05MSw2ICs5MSw4IEBACiAgIC8vIHdlIHRha2UgYWR2YW50YWdlIG9mIHRoZSBjb252ZW5pZW5jZSBvZiBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgIHdlYl9tb2R1bGVfb3B0aW9ucy5lbmFibGVfaW5saW5lX3NjcmlwdF93YXJuaW5ncyA9IGZhbHNlOwogCisgIHdlYl9tb2R1bGVfb3B0aW9ucy53ZWJfb3B0aW9ucy5uZXR3b3JrX21vZHVsZSA9ICZuZXR3b3JrX21vZHVsZTsKKwogICAvLyBQcmVwYXJlIGEgc2xvdCBmb3Igb3VyIHJlc3VsdHMgdG8gYmUgcGxhY2VkIHdoZW4gcmVhZHkuCiAgIGJhc2U6Ok9wdGlvbmFsPGJyb3dzZXI6OldlYk1vZHVsZTo6TGF5b3V0UmVzdWx0cz4gcmVzdWx0czsKIApAQCAtMTA0LDcgKzEwNiw3IEBACiAgICAgICBicm93c2VyOjpXZWJNb2R1bGU6OkNsb3NlQ2FsbGJhY2soKSAvKiB3aW5kb3dfY2xvc2VfY2FsbGJhY2sgKi8sCiAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogd2luZG93X21pbmltaXplX2NhbGxiYWNrICovLAogICAgICAgTlVMTCAvKiBjYW5fcGxheV90eXBlX2hhbmRsZXIgKi8sIE5VTEwgLyogd2ViX21lZGlhX3BsYXllcl9mYWN0b3J5ICovLAotICAgICAgJm5ldHdvcmtfbW9kdWxlLCB2aWV3cG9ydF9zaXplLCByZXNvdXJjZV9wcm92aWRlciwgNjAuMGYsCisgICAgICB2aWV3cG9ydF9zaXplLCByZXNvdXJjZV9wcm92aWRlciwgNjAuMGYsIE5VTEwgLyogc2VydmljZV93b3JrZXJfam9icyAqLywKICAgICAgIHdlYl9tb2R1bGVfb3B0aW9ucyk7CiAKICAgcnVuX2xvb3AuUnVuKCk7CmRpZmYgLS1naXQgYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL2xheW91dF90ZXN0cy5neXAgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL2xheW91dF90ZXN0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YjM0YTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2xheW91dF90ZXN0cy9sYXlvdXRfdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLQotICAjIEEgbGlicmFyeSB0byBzdXBwb3J0IGNvZGUgdGhhdCB3aXNoZXMgdG8gbG9hZCBhIFVSTCBhbmQgdGFrZSBhIHNuYXBzaG90Ci0gICMgb2YgdGhlIHJlc3VsdHMuICAic25hcHNob3QiIGluIHRoaXMgY2FzZSBjYW4gbWVhbiBhIHNjcmVlbnNob3QgZm9yCi0gICMgbGF5b3V0IHRlc3RzLCBvciBhIHBlcmZvcm1hbmNlIHByb2ZpbGUgZm9yIGJlbmNobWFya3MsIG9yIGFueXRoaW5nIGVsc2UuCi0gICMgSXQgdXNlcyB0aGUgVGVzdFJ1bm5lciBpbnRlcmZhY2UgdG8gY29udHJvbCB3aGVuIHRoZSBzbmFwc2hvdCBpcyB0YWtlbi4KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0X3V0aWxzJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbGF5b3V0X3NuYXBzaG90LmNjJywKLSAgICAgICAgJ2xheW91dF9zbmFwc2hvdC5oJywKLSAgICAgICAgJ3Rlc3RfcGFyc2VyLmNjJywKLSAgICAgICAgJ3Rlc3RfcGFyc2VyLmgnLAotICAgICAgICAndGVzdF91dGlscy5jYycsCi0gICAgICAgICd0ZXN0X3V0aWxzLmgnLAotICAgICAgICAnd2ViX3BsYXRmb3JtX3Rlc3RfcGFyc2VyLmNjJywKLSAgICAgICAgJ3dlYl9wbGF0Zm9ybV90ZXN0X3BhcnNlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9icm93c2VyLmd5cDpicm93c2VyJywKLSAgICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOm5ldCcsCi0gICAgICAgICdsYXlvdXRfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF9jb3B5X3Rlc3RfZGF0YScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ2NvYmFsdC9sYXlvdXRfdGVzdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfdGVzdF9kYXRhLmd5cGknXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2xheW91dF90ZXN0cy5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlci5neXA6YnJvd3NlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXIuZ3lwOnJlbmRlcl90cmVlX3BpeGVsX3Rlc3RlcicsCi0gICAgICAgICc8KERFUFRIKS91cmwvdXJsLmd5cDp1cmwnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnbGF5b3V0X3Rlc3RfdXRpbHMnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xheW91dF90ZXN0c19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbGF5b3V0X3Rlc3RzJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2xheW91dF90ZXN0cycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2ViX3BsYXRmb3JtX3Rlc3RzJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnd2ViX3BsYXRmb3JtX3Rlc3RzLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnJvd3Nlci9icm93c2VyLmd5cDpicm93c2VyJywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdsYXlvdXRfdGVzdF91dGlscycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2ViX3BsYXRmb3JtX3Rlc3RzX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd3ZWJfcGxhdGZvcm1fdGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnd2ViX3BsYXRmb3JtX3Rlc3RzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9CVUlMRC5nbiBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvQlVJTEQuZ24KaW5kZXggMWM4ZGJhZC4uMTcyYTczNCAxMDA2NDQKLS0tIGEvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9CVUlMRC5nbgorKysgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL0JVSUxELmduCkBAIC0xMyw2ICsxMyw4IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiBjb3B5KCJsYXlvdXRfY29weV90ZXN0X2RhdGEiKSB7CisgIHRlc3Rvbmx5ID0gdHJ1ZQorICBpbnN0YWxsX2NvbnRlbnQgPSB0cnVlCiAgIHNvdXJjZXMgPSBbCiAgICAgImFuaW1hdGlvbi10aW1pbmcvNS1hbmltYXRpb24tZnJhbWUtY2FsbGJhY2staXMtY2FsbGVkLWJlZm9yZS1sYXlvdXQtb2NjdXJzLWV4cGVjdGVkLnBuZyIsCiAgICAgImFuaW1hdGlvbi10aW1pbmcvNS1hbmltYXRpb24tZnJhbWUtY2FsbGJhY2staXMtY2FsbGVkLWJlZm9yZS1sYXlvdXQtb2NjdXJzLmh0bWwiLApAQCAtMzI5LDYgKzMzMSw4IEBACiAgICAgImNzcy0yLTEvMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1hYnNvbHV0ZS1wb3NpdGlvbmVkLWVsZW1lbnRzLXVucG9zaXRpb25lZC1zY3JvbGxlci5odG1sIiwKICAgICAiY3NzLTItMS8xMS0xLTEtb3ZlcmZsb3ctc2Nyb2xsLWNvbnRhaW5lci1zY3JvbGxlZC1leHBlY3RlZC5wbmciLAogICAgICJjc3MtMi0xLzExLTEtMS1vdmVyZmxvdy1zY3JvbGwtY29udGFpbmVyLXNjcm9sbGVkLXJ0bC1leHBlY3RlZC5wbmciLAorICAgICJjc3MtMi0xLzExLTEtMS1vdmVyZmxvdy1zY3JvbGwtY29udGFpbmVyLXNjcm9sbGVkLXJ0bC1zaG91bGQtaG9ub3ItdHJhbnNmb3JtLWV4cGVjdGVkLnBuZyIsCisgICAgImNzcy0yLTEvMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQtcnRsLXNob3VsZC1ob25vci10cmFuc2Zvcm0uaHRtbCIsCiAgICAgImNzcy0yLTEvMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQtcnRsLmh0bWwiLAogICAgICJjc3MtMi0xLzExLTEtMS1vdmVyZmxvdy1zY3JvbGwtY29udGFpbmVyLXNjcm9sbGVkLmh0bWwiLAogICAgICJjc3MtMi0xLzExLTEtMS1vdmVyZmxvdy1zY3JvbGwtZXhwZWN0ZWQucG5nIiwKQEAgLTE3NjIsNiArMTc2Niw3IEBACiAgICAgIndlYi1wbGF0Zm9ybS10ZXN0cy9yZXNvdXJjZS10aW1pbmcvd2ViX3BsYXRmb3JtX3Rlc3RzLnR4dCIsCiAgICAgIndlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3dlYl9wbGF0Zm9ybV90ZXN0cy50eHQiLAogICAgICJ3ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29ja2V0cy93ZWJfcGxhdGZvcm1fdGVzdHMudHh0IiwKKyAgICAid2ViLXBsYXRmb3JtLXRlc3RzL3dvcmtlcnMvd2ViX3BsYXRmb3JtX3Rlc3RzLnR4dCIsCiAgICAgIndlYmFwcGFwaXMvNi0xLTUtMi1vbmxvYWQtZXZlbnQtZmlyZXMtb24td2luZG93LWV4cGVjdGVkLnBuZyIsCiAgICAgIndlYmFwcGFwaXMvNi0xLTUtMi1vbmxvYWQtZXZlbnQtZmlyZXMtb24td2luZG93LXdoZW4tc2V0LXZpYS1hdHRyaWJ1dGUtZXhwZWN0ZWQucG5nIiwKICAgICAid2ViYXBwYXBpcy82LTEtNS0yLW9ubG9hZC1ldmVudC1maXJlcy1vbi13aW5kb3ctd2hlbi1zZXQtdmlhLWF0dHJpYnV0ZS5odG1sIiwKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvY3NzLTItMS8xMS0xLTEtb3ZlcmZsb3ctc2Nyb2xsLWNvbnRhaW5lci1zY3JvbGxlZC1ydGwtc2hvdWxkLWhvbm9yLXRyYW5zZm9ybS1leHBlY3RlZC5wbmcgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2Nzcy0yLTEvMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQtcnRsLXNob3VsZC1ob25vci10cmFuc2Zvcm0tZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOWYzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2Nzcy0yLTEvMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQtcnRsLXNob3VsZC1ob25vci10cmFuc2Zvcm0tZXhwZWN0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvY3NzLTItMS8xMS0xLTEtb3ZlcmZsb3ctc2Nyb2xsLWNvbnRhaW5lci1zY3JvbGxlZC1ydGwtc2hvdWxkLWhvbm9yLXRyYW5zZm9ybS5odG1sIGIvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9jc3MtMi0xLzExLTEtMS1vdmVyZmxvdy1zY3JvbGwtY29udGFpbmVyLXNjcm9sbGVkLXJ0bC1zaG91bGQtaG9ub3ItdHJhbnNmb3JtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhYzQxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvY3NzLTItMS8xMS0xLTEtb3ZlcmZsb3ctc2Nyb2xsLWNvbnRhaW5lci1zY3JvbGxlZC1ydGwtc2hvdWxkLWhvbm9yLXRyYW5zZm9ybS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgSW4gYSBzY3JvbGwgY29udGFpbmVyLCBlbGVtZW50cycgdHJhbnNsYXRlWCBzaG91bGQgYmUgaG9ub3JlZCBpbiBSVEwgbW9kZS4KKyB8ICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VmeC5odG1sCisgLS0+Cis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGU+CisgICAgLnNjcm9sbCB7CisgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig3NSwgNzUsIDc1KTsKKyAgICAgIHdpZHRoOiA1NDBweDsKKyAgICAgIGhlaWdodDogMzIwcHg7CisgICAgfQorCisgICAgLmZvY3VzSXRlbSB7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgIG91dGxpbmU6IG5vbmU7CisgICAgfQorCisgICAgLmZvY3VzQ29udGVudCB7CisgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAgICAgbWFyZ2luOiAyMHB4OworICAgICAgYm9yZGVyOiA1cHggc29saWQgcmdiKDAsIDAsIDApOworICAgICAgd2lkdGg6IDI1MHB4OworICAgICAgaGVpZ2h0OiAyNTBweDsKKyAgICAgIGxpbmUtaGVpZ2h0OiAyNTBweDsKKyAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgICBmb250LXNpemU6IDEwMHB4OworICAgIH0KKworICAgIC8qCisgICAgICogVXBkYXRlIGZvY3VzQ29udGVudCB3aGVuIHRoZSBwYXJlbnQgaXMgZm9jdXNlZC4KKyAgICAgKi8KKyAgICAuZm9jdXNJdGVtOmZvY3VzIC5mb2N1c0NvbnRlbnQgeworICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMjQwLCAyNDApOworICAgIH0KKyAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxkaXYgY2xhc3M9InNjcm9sbCIgZGlyPSJydGwiIGlkPSJzY3JvbGxlciI+CisgICAgPCEtLQorICAgICB8IHRyYW5zbGF0ZVgoKSBzaG91bGQgYmUgaG9ub3JlZCB3aGVuIGNvbXB1dGluZyBpdGVtcycgcG9zaXRpb24gaW4gcnRsIG1vZGUuCisgICAgIHwgV2hlbiBwYWdlIGlzIHJlbmRlcmVkLCBBMCBzaG91bGQgYmUgZm9jdXNlZCwgdGhlIHJpZ2h0IGVkZ2Ugb2YgQTAgc2hvdWxkCisgICAgIHwgYmUgMTAwcHggZnJvbSB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgY29udGFpbmVyLCBhbmQgY29udGFpbmVyJ3Mgc2Nyb2xsTGVmdAorICAgICB8IHNob3VsZCBiZSAwLgorICAgICAtLT4KKyAgICA8ZGl2IGlkPSJzdGFydCIgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDBweCkiPgorICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5BMDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvY3VzSXRlbSIgdGFiaW5kZXg9Ii0yIiBzdHlsZT0idHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00MDBweCkiPgorICAgICAgPGRpdiBjbGFzcz0iZm9jdXNDb250ZW50Ij5BMTwvZGl2PgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvYm9keT4KKworPHNjcmlwdD4KKyAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic3RhcnQiKS5mb2N1cygpOworICAgIHZhciBzY3JvbGxlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JvbGxlciIpOworICAgIGlmIChzY3JvbGxlci5zY3JvbGxMZWZ0ICE9IDApIHsKKyAgICAgIGNvbnNvbGUubG9nKCJGQUlMIiArCisgICAgICAgICJcblZhbHVlIG9mOiBzY3JvbGxMZWZ0IiArCisgICAgICAgICJcbiAgQWN0dWFsOiAiICsgc2Nyb2xsZXIuc2Nyb2xsTGVmdCArCisgICAgICAgICJcbkV4cGVjdGVkOiAiICsgIjAiKTsKKyAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNGRjAwMDAiOworICAgIH0KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisgIH0KKzwvc2NyaXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS9jc3MtMi0xL2xheW91dF90ZXN0cy50eHQgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2Nzcy0yLTEvbGF5b3V0X3Rlc3RzLnR4dAppbmRleCA1MDBkMjc3Li4xZjAxMmQwIDEwMDY0NAotLS0gYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2Nzcy0yLTEvbGF5b3V0X3Rlc3RzLnR4dAorKysgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL2Nzcy0yLTEvbGF5b3V0X3Rlc3RzLnR4dApAQCAtOTcsNiArOTcsNyBAQAogMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1hYnNvbHV0ZS1wb3NpdGlvbmVkLWVsZW1lbnRzLXVucG9zaXRpb25lZC1zY3JvbGxlcgogMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQKIDExLTEtMS1vdmVyZmxvdy1zY3JvbGwtY29udGFpbmVyLXNjcm9sbGVkLXJ0bAorMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1jb250YWluZXItc2Nyb2xsZWQtcnRsLXNob3VsZC1ob25vci10cmFuc2Zvcm0KIDExLTEtMS1vdmVyZmxvdy1zY3JvbGwtZml4ZWQtcG9zaXRpb25lZC1lbGVtZW50cy10cmFuc2Zvcm1lZC1zY3JvbGxlcgogMTEtMS0xLW92ZXJmbG93LXNjcm9sbC1maXhlZC1wb3NpdGlvbmVkLWVsZW1lbnRzLXVudHJhbnNmb3JtZWQtc2Nyb2xsZXIKIDExLTEtMS1vdmVyZmxvdy1zY3JvbGwtc2hvdWxkLWFmZmVjdC1kZXNjZW5kYW50cy13aXRoLXotaW5kZXgKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL3dlYl9wbGF0Zm9ybV90ZXN0cy50eHQgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL3dlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC93ZWJfcGxhdGZvcm1fdGVzdHMudHh0CmluZGV4IDcyYWI3ZDguLjBkNDk2N2IgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL3dlYl9wbGF0Zm9ybV90ZXN0cy50eHQKKysrIGIvY29iYWx0L2xheW91dF90ZXN0cy90ZXN0ZGF0YS93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvd2ViX3BsYXRmb3JtX3Rlc3RzLnR4dApAQCAtMywxMSArMywxMSBAQAogIyBDb2JhbHQgZG9lc24ndCBzdXBwb3J0IFdvcmtlcnMsIHNvIGRpc2FibGUgcmVsYXRlZCB0ZXN0cy4KICMgQ29iYWx0IGZldGNoIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgdGhlIEJvZHkgbWl4aW4gdHlwZXMgdGV4dCgpLAogIyAgIGpzb24oKSwgYW5kIGFycmF5QnVmZmVyKCkuIEJsb2IsIFVSTFNlYXJjaFBhcmFtcywgYW5kIEZvcm1EYXRhIGFyZSBub3QKLSMgICB3ZWxsLXN1cHBvcnRlZCBieSB0aGUgamF2YXNjcmlwdCBlbmdpbmUuIENlcnRhaW4gdGVzdHMgbWF5IGJlIHN1YnN0aXR1ZWQKKyMgICB3ZWxsLXN1cHBvcnRlZCBieSB0aGUgamF2YXNjcmlwdCBlbmdpbmUuIENlcnRhaW4gdGVzdHMgbWF5IGJlIHN1YnN0aXR1dGVkCiAjICAgd2l0aCAqLmNvYmFsdC5odG1sIHZlcnNpb25zIHRvIGFjY29tbW9kYXRlIHRoaXMgbGltaXRhdGlvbi4KIAogIyBGYWlsdXJlIGlzIG5vdCBzcGVjaWZpYyB0byBmZXRjaC4KLWFwaS9iYXNpYy9ibG9jay1taW1lLWFzLXNjcmlwdC5odG1sLERJU0FCTEUKK2FwaS9iYXNpYy9ibG9jay1taW1lLWFzLXNjcmlwdC5odG1sLFBBU1MKICMgQ2FjaGluZyByZXNwb25zZXMgaXMgbm90IHN1cHBvcnRlZC4KIGFwaS9iYXNpYy9jb25kaXRpb25hbC1nZXQuaHRtbCxESVNBQkxFCiBhcGkvYmFzaWMvZXJyb3ItYWZ0ZXItcmVzcG9uc2UuaHRtbCxQQVNTCmRpZmYgLS1naXQgYS9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL3dlYi1wbGF0Zm9ybS10ZXN0cy93b3JrZXJzL3dlYl9wbGF0Zm9ybV90ZXN0cy50eHQgYi9jb2JhbHQvbGF5b3V0X3Rlc3RzL3Rlc3RkYXRhL3dlYi1wbGF0Zm9ybS10ZXN0cy93b3JrZXJzL3dlYl9wbGF0Zm9ybV90ZXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1OGQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9sYXlvdXRfdGVzdHMvdGVzdGRhdGEvd2ViLXBsYXRmb3JtLXRlc3RzL3dvcmtlcnMvd2ViX3BsYXRmb3JtX3Rlc3RzLnR4dApAQCAtMCwwICsxLDEyOSBAQAorIyBXb3JrZXIgQVBJIHRlc3RzCisjCisjIENvYmFsdCBjdXJyZW50bHkgc3VwcG9ydHMgYSBsaW1pdGVkIHN1YnNldCBvZiBEZWRpY2F0ZWQKKyMgV29ya2VyIGZ1bmN0aW9uYWxpdHksIHRoZSBzdWJzZXQgaGVyZSByZWZsZWN0cyB0aGUKKyMgZmVhdHVyZXMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gY3VycmVudGx5IHdvcmsuCisKK1dvcmtlcl9iYXNpYy5odG0sIFBBU1MKK1dvcmtlcl9kaXNwYXRjaEV2ZW50X0Vycm9yRXZlbnQuaHRtLCBQQVNTCisKKyMgYi8yMjUwMzc0NjUKK1dvcmtlcl9jcm9zc19vcmlnaW5fc2VjdXJpdHlfZXJyLmh0bSwgRElTQUJMRQorCisjIGIvMjI2NjQwNDI1CitXb3JrZXJfRXJyb3JFdmVudF9idWJibGVzX2NhbmNlbGFibGUuaHRtLCBESVNBQkxFCitXb3JrZXJfRXJyb3JFdmVudF9maWxlbmFtZS5odG0sIERJU0FCTEUKK1dvcmtlcl9FcnJvckV2ZW50X2xpbmVuby5odG0sIERJU0FCTEUKK1dvcmtlcl9FcnJvckV2ZW50X21lc3NhZ2UuaHRtLCBESVNBQkxFCitXb3JrZXJfRXJyb3JFdmVudF90eXBlLmh0bSwgRElTQUJMRQorCisjIGIvMjI4OTkzOTUzCitXb3JrZXJfc2NyaXB0X21pbWV0eXBlLmh0bSwgRElTQUJMRQorCisjIGIvMjI5MTI4ODgwCitXb3JrZXJfdGVybWluYXRlX2V2ZW50X3F1ZXVlLmh0bSwgRElTQUJMRQorCisjIGIvMjI5MTI5OTMxCitXb3JrZXJHbG9iYWxTY29wZV9jbG9zZS5odG0sIERJU0FCTEUKKworV29ya2VyR2xvYmFsU2NvcGVfRXJyb3JFdmVudF9jb2xuby5odG0sIERJU0FCTEUKK1dvcmtlckdsb2JhbFNjb3BlX0Vycm9yRXZlbnRfZmlsZW5hbWUuaHRtLCBESVNBQkxFCitXb3JrZXJHbG9iYWxTY29wZV9FcnJvckV2ZW50X2xpbmVuby5odG0sIERJU0FCTEUKK1dvcmtlckdsb2JhbFNjb3BlX0Vycm9yRXZlbnRfbWVzc2FnZS5odG0sIERJU0FCTEUKKworIyBiLzIyODkwMDUxNgorV29ya2VyR2xvYmFsU2NvcGVfaW1wb3J0U2NyaXB0c19OZXR3b3JrRXJyLmh0bSwgRElTQUJMRQorV29ya2VyR2xvYmFsU2NvcGVfaW1wb3J0U2NyaXB0cy5odG0sIERJU0FCTEUKKworIyBiLzIxOTEwMzgwOAorV29ya2VyR2xvYmFsU2NvcGVfc2V0SW50ZXJ2YWwuaHRtLCBESVNBQkxFCitXb3JrZXJHbG9iYWxTY29wZV9zZXRUaW1lb3V0Lmh0bSwgRElTQUJMRQorCisjIGIvMjI5MTUwNTIwCitXb3JrZXJMb2NhdGlvbl9oYXNoX2VuY29kaW5nLmh0bSwgRElTQUJMRQorV29ya2VyTG9jYXRpb25faGFzaF9ub25leGlzdC5odG0sIERJU0FCTEUKK1dvcmtlckxvY2F0aW9uX2hhc2guaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9ob3N0Lmh0bSwgRElTQUJMRQorV29ya2VyTG9jYXRpb25faG9zdG5hbWUuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9ocmVmLmh0bSwgRElTQUJMRQorV29ya2VyTG9jYXRpb25fcGF0aG5hbWUuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9wb3J0Lmh0bSwgRElTQUJMRQorV29ya2VyTG9jYXRpb25fcHJvdG9jb2wuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9zZWFyY2hfZW1wdHkuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9zZWFyY2hfZnJhZ21lbnQuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9zZWFyY2hfbm9uZXhpc3QuaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbl9zZWFyY2guaHRtLCBESVNBQkxFCitXb3JrZXJMb2NhdGlvbi5odG0sIERJU0FCTEUKKworIyBiLzIyOTE1MDUyNgorV29ya2VyTmF2aWdhdG9yX2FwcE5hbWUuaHRtLCBESVNBQkxFCitXb3JrZXJOYXZpZ2F0b3JfYXBwVmVyc2lvbi5odG0sIERJU0FCTEUKK1dvcmtlck5hdmlnYXRvcl9vbkxpbmUuaHRtLCBESVNBQkxFCitXb3JrZXJOYXZpZ2F0b3JfcGxhdGZvcm0uaHRtLCBESVNBQkxFCitXb3JrZXJOYXZpZ2F0b3JfdXNlckFnZW50Lmh0bSwgRElTQUJMRQorCisjIGIvMjI2NjQwNDI1LCBiLzIyNzY2NTg0NywgYi8yMjY2NDE0OTAKK3Bvc3RNZXNzYWdlX2Nsb25lX3BvcnRfZXJyb3IuaHRtLCBESVNBQkxFCitwb3N0TWVzc2FnZV9jbG9uZV9wb3J0Lmh0bSwgRElTQUJMRQorcG9zdE1lc3NhZ2VfRGF0YUNvbmVFcnIuaHRtLCBESVNBQkxFCitwb3N0TWVzc2FnZV9ldmVudF9wcm9wZXJ0aWVzLmh0bSwgRElTQUJMRQorcG9zdE1lc3NhZ2VfcG9ydHNfcmVhZG9ubHlfYXJyYXkuaHRtLCBESVNBQkxFCitwb3N0TWVzc2FnZV90YXJnZXRfc291cmNlLmh0bSwgRElTQUJMRQorCitjb25zdHJ1Y3RvcnMvV29ya2VyL0Fic3RyYWN0V29ya2VyLm9uZXJyb3IuaHRtbCwgRElTQUJMRQorY29uc3RydWN0b3JzL1dvcmtlci9CbG9iLXVybC5odG1sLCBESVNBQkxFCitjb25zdHJ1Y3RvcnMvV29ya2VyL2N0b3ItMS5odG1sLCBQQVNTCitjb25zdHJ1Y3RvcnMvV29ya2VyL2N0b3ItbnVsbC5odG1sLCBQQVNTCitjb25zdHJ1Y3RvcnMvV29ya2VyL2N0b3ItdW5kZWZpbmVkLmh0bWwsIFBBU1MKK2NvbnN0cnVjdG9ycy9Xb3JrZXIvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUtbWVtYmVycy5odG1sLCBESVNBQkxFCitjb25zdHJ1Y3RvcnMvV29ya2VyL25vLWFyZ3VtZW50cy1jdG9yLmh0bWwsIFBBU1MKK2NvbnN0cnVjdG9ycy9Xb3JrZXIvcmVzb2x2ZS1lbXB0eS1zdHJpbmcuaHRtbCwgUEFTUworY29uc3RydWN0b3JzL1dvcmtlci9zYW1lLW9yaWdpbi5odG1sLCBESVNBQkxFCitjb25zdHJ1Y3RvcnMvV29ya2VyL3Rlcm1pbmF0ZS5odG1sLCBQQVNTCitjb25zdHJ1Y3RvcnMvV29ya2VyL3VuZXhwZWN0ZWQtc2VsZi1wcm9wZXJ0aWVzLmh0bWwsIERJU0FCTEUKK2NvbnN0cnVjdG9ycy9Xb3JrZXIvdW5yZXNvbHZhYmxlLXVybC5odG1sLCBESVNBQkxFCisKK2ludGVyZmFjZXMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUvZXZlbnQtcG9ydHMtZGVkaWNhdGVkLmh0bWwsIERJU0FCTEUKK2ludGVyZmFjZXMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUvbWVzc2FnZS1ldmVudC5odG1sLCBESVNBQkxFCitpbnRlcmZhY2VzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlL3NlY29uZC1hcmd1bWVudC1udWxsLWluLWFycmF5Lmh0bWwsIERJU0FCTEUKK2ludGVyZmFjZXMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUvc2Vjb25kLWFyZ3VtZW50LW51bGwuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS9zZWNvbmQtYXJndW1lbnQtdW5kZWZpbmVkLmh0bWwsIERJU0FCTEUKK2ludGVyZmFjZXMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUvc2V0dGluZy1wb3N0TWVzc2FnZS5odG1sLCBESVNBQkxFCitpbnRlcmZhY2VzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlL3N0cnVjdHVyZWQtY2xvbmUtbWVzc2FnZS5odG1sLCBESVNBQkxFCisKK2ludGVyZmFjZXMvV29ya2VyR2xvYmFsU2NvcGUvY2xvc2UvaW5jb21pbmctbWVzc2FnZS5odG1sLCBQQVNTCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL2Nsb3NlL3NlbmRpbmctbWVzc2FnZXMuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9Xb3JrZXJHbG9iYWxTY29wZS9jbG9zZS9zZXRJbnRlcnZhbC5odG1sLCBQQVNTCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL2Nsb3NlL3NldFRpbWVvdXQuaHRtbCwgUEFTUworCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL2xvY2F0aW9uL21lbWJlcnMuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9Xb3JrZXJHbG9iYWxTY29wZS9sb2NhdGlvbi9yZWRpcmVjdC5odG1sLCBESVNBQkxFCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL2xvY2F0aW9uL3JldHVybnMtc2FtZS1vYmplY3QuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9Xb3JrZXJHbG9iYWxTY29wZS9sb2NhdGlvbi9zZXR0aW5nLW1lbWJlcnMuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9Xb3JrZXJHbG9iYWxTY29wZS9sb2NhdGlvbi93b3JrZXItc2VwYXJhdGUtZmlsZS5odG1sLCBESVNBQkxFCisKK2ludGVyZmFjZXMvV29ya2VyR2xvYmFsU2NvcGUvb25lcnJvci9leGNlcHRpb24taW4tb25lcnJvci5odG1sLCBESVNBQkxFCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL29uZXJyb3IvaGFuZGxlZC5odG1sLCBESVNBQkxFCitpbnRlcmZhY2VzL1dvcmtlckdsb2JhbFNjb3BlL29uZXJyb3Ivbm90LWhhbmRsZWQuaHRtbCwgRElTQUJMRQoraW50ZXJmYWNlcy9Xb3JrZXJHbG9iYWxTY29wZS9vbmVycm9yL3Byb3BhZ2F0ZS10by13aW5kb3ctb25lcnJvci5odG1sLCBESVNBQkxFCisKK2ludGVyZmFjZXMvV29ya2VyR2xvYmFsU2NvcGUvc2VsZi5odG1sLCBESVNBQkxFCisKK25vbi1hdXRvbWF0ZWQvYXBwbGljYXRpb24tY2FjaGUtZGVkaWNhdGVkLmh0bWwsIERJU0FCTEUKKworc2VtYW50aWNzL2VuY29kaW5ncy8wMDEuaHRtbCxQQVNTCitzZW1hbnRpY3MvZW5jb2RpbmdzLzAwMy5odG1sLCBESVNBQkxFCisKK3NlbWFudGljcy9tdWx0aXBsZS13b3JrZXJzLzAwMi5odG1sLCBQQVNTCisKK3NlbWFudGljcy9uYXZpZ2F0aW9uLzAwMS0xLmh0bWwsIERJU0FCTEUKK3NlbWFudGljcy9uYXZpZ2F0aW9uLzAwMS5odG1sLCBESVNBQkxFCitzZW1hbnRpY3MvbmF2aWdhdGlvbi8wMDIuaHRtbCwgRElTQUJMRQorCitzZW1hbnRpY3MvcnVuLWEtd29ya2VyLzAwMS5odG1sLCBESVNBQkxFCisKK3NlbWFudGljcy9zdHJ1Y3R1cmVkLWNsb25lL2RlZGljYXRlZC5odG1sLCBESVNBQkxFCisKK3NlbWFudGljcy94aHIvMDAxLmh0bWwsIERJU0FCTEUKK3NlbWFudGljcy94aHIvMDAyLmh0bWwsIERJU0FCTEUKK3NlbWFudGljcy94aHIvMDA1Lmh0bWwsIERJU0FCTEUKZGlmZiAtLWdpdCBhL2NvYmFsdC9sYXlvdXRfdGVzdHMvd2ViX3BsYXRmb3JtX3Rlc3RzLmNjIGIvY29iYWx0L2xheW91dF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdHMuY2MKaW5kZXggYmU3MzQ4ZC4uM2IyZjljMSAxMDA2NDQKLS0tIGEvY29iYWx0L2xheW91dF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdHMuY2MKKysrIGIvY29iYWx0L2xheW91dF90ZXN0cy93ZWJfcGxhdGZvcm1fdGVzdHMuY2MKQEAgLTIwOSwxMiArMjA5LDE0IEBACiAgICAgICBkb206OmtDc3BFbmZvcmNlbWVudEVuYWJsZSwgQ3NwRGVsZWdhdGVQZXJtaXNzaXZlOjpDcmVhdGUpOwogICAvLyBVc2UgdGVzdCBydW5uZXIgbW9kZSB0byBhbGxvdyB0aGUgY29udGVudCBpdHNlbGYgdG8gZGljdGF0ZSB3aGVuIGl0IGlzCiAgIC8vIHJlYWR5IGZvciBsYXlvdXQgc2hvdWxkIGJlIHBlcmZvcm1lZC4gIFNlZSBjb2JhbHQvZG9tL3Rlc3RfcnVubmVyLmguCi0gIGJyb3dzZXI6OldlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfbW9kdWxlX29wdGlvbnM7CisgIGJyb3dzZXI6OldlYk1vZHVsZTo6T3B0aW9ucyB3ZWJfbW9kdWxlX29wdGlvbnMoIlJ1bldlYlBsYXRmb3JtVGVzdCIpOwogICB3ZWJfbW9kdWxlX29wdGlvbnMubGF5b3V0X3RyaWdnZXIgPSBsYXlvdXQ6OkxheW91dE1hbmFnZXI6OmtUZXN0UnVubmVyTW9kZTsKICAgLy8gV2UgYXNzdW1lIHRoYXQgd2Ugd29uJ3Qgc3VzcGVuZC9yZXN1bWUgd2hpbGUgcnVubmluZyB0aGUgdGVzdHMsIGFuZCBzbwogICAvLyB3ZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgY29udmVuaWVuY2Ugb2YgaW5saW5lIHNjcmlwdCB0YWdzLgogICB3ZWJfbW9kdWxlX29wdGlvbnMuZW5hYmxlX2lubGluZV9zY3JpcHRfd2FybmluZ3MgPSBmYWxzZTsKIAorICB3ZWJfbW9kdWxlX29wdGlvbnMud2ViX29wdGlvbnMubmV0d29ya19tb2R1bGUgPSAmbmV0d29ya19tb2R1bGU7CisKICAgLy8gUHJlcGFyZSBhIHNsb3QgZm9yIG91ciByZXN1bHRzIHRvIGJlIHBsYWNlZCB3aGVuIHJlYWR5LgogICBiYXNlOjpPcHRpb25hbDxicm93c2VyOjpXZWJNb2R1bGU6OkxheW91dFJlc3VsdHM+IHJlc3VsdHM7CiAgIGJhc2U6OlJ1bkxvb3AgcnVuX2xvb3A7CkBAIC0yMjcsMTQgKzIyOSwxNiBAQAogICAgICAgICAgICAgICAgICBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKSwKICAgICAgIGJhc2U6OkJpbmQoJldpbmRvd0Nsb3NlQ2FsbGJhY2ssICZydW5fbG9vcCwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSksCiAgICAgICBiYXNlOjpDbG9zdXJlKCkgLyogd2luZG93X21pbmltaXplX2NhbGxiYWNrICovLAotICAgICAgY2FuX3BsYXlfdHlwZV9oYW5kbGVyLmdldCgpLCBtZWRpYV9tb2R1bGUuZ2V0KCksICZuZXR3b3JrX21vZHVsZSwKLSAgICAgIGtEZWZhdWx0Vmlld3BvcnRTaXplLCAmcmVzb3VyY2VfcHJvdmlkZXIsIDYwLjBmLCB3ZWJfbW9kdWxlX29wdGlvbnMpOworICAgICAgY2FuX3BsYXlfdHlwZV9oYW5kbGVyLmdldCgpLCBtZWRpYV9tb2R1bGUuZ2V0KCksIGtEZWZhdWx0Vmlld3BvcnRTaXplLAorICAgICAgJnJlc291cmNlX3Byb3ZpZGVyLCA2MC4wZiwgTlVMTCAvKiBzZXJ2aWNlX3dvcmtlcl9qb2JzICovLAorICAgICAgd2ViX21vZHVsZV9vcHRpb25zKTsKICAgcnVuX2xvb3AuUnVuKCk7CiAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4dHJhY3RfcmVzdWx0cyA9CiAgICAgICAiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJfX3Rlc3RoYXJuZXNzX19yZXN1bHRzX19cIikudGV4dENvbnRlbnQ7IjsKLSAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gd2ViX21vZHVsZS5FeGVjdXRlSmF2YXNjcmlwdCgKLSAgICAgIGV4dHJhY3RfcmVzdWx0cywgYmFzZTo6U291cmNlTG9jYXRpb24oX19GSUxFX18sIF9fTElORV9fLCAxKSwKLSAgICAgIGdvdF9yZXN1bHRzKTsKKyAgc3RkOjpzdHJpbmcgb3V0cHV0OworICB3ZWJfbW9kdWxlLkV4ZWN1dGVKYXZhc2NyaXB0KGV4dHJhY3RfcmVzdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpTb3VyY2VMb2NhdGlvbihfX0ZJTEVfXywgX19MSU5FX18sIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdXQsIGdvdF9yZXN1bHRzKTsKICAgcmV0dXJuIG91dHB1dDsKIH0KIApAQCAtNDYzLDYgKzQ2NywxMCBAQAogICAgIEdldFRlc3ROYW1lKCkpOwogCiBJTlNUQU5USUFURV9URVNUX0NBU0VfUCgKKyAgICB3b3JrZXJzLCBXZWJQbGF0Zm9ybVRlc3QsCisgICAgOjp0ZXN0aW5nOjpWYWx1ZXNJbihFbnVtZXJhdGVXZWJQbGF0Zm9ybVRlc3RzKCJ3b3JrZXJzIikpLCBHZXRUZXN0TmFtZSgpKTsKKworSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoCiAgICAgZW5jb2RpbmcsIFdlYlBsYXRmb3JtVGVzdCwKICAgICA6OnRlc3Rpbmc6OlZhbHVlc0luKEVudW1lcmF0ZVdlYlBsYXRmb3JtVGVzdHMoImVuY29kaW5nIikpLCBHZXRUZXN0TmFtZSgpKTsKIApkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9CVUlMRC5nbiBiL2NvYmFsdC9sb2FkZXIvQlVJTEQuZ24KaW5kZXggMjg5MmNjOS4uMjNlNmY4YSAxMDA2NDQKLS0tIGEvY29iYWx0L2xvYWRlci9CVUlMRC5nbgorKysgYi9jb2JhbHQvbG9hZGVyL0JVSUxELmduCkBAIC05MSw2ICs5MSw4IEBACiAgICAgIm5ldF9mZXRjaGVyLmgiLAogICAgICJyZXNvdXJjZV9jYWNoZS5jYyIsCiAgICAgInJlc291cmNlX2NhY2hlLmgiLAorICAgICJzY3JpcHRfbG9hZGVyX2ZhY3RvcnkuY2MiLAorICAgICJzY3JpcHRfbG9hZGVyX2ZhY3RvcnkuaCIsCiAgICAgInN3aXRjaGVzLmNjIiwKICAgICAic3dpdGNoZXMuaCIsCiAgICAgInN5bmNfbG9hZGVyLmNjIiwKQEAgLTE5MCw3ICsxOTIsNiBAQAogICBjb25maWdzICs9IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzcGVlZCIgXQogCiAgIGRlcHMgPSBbCi0gICAgIjpjb3B5X2xvYWRlcl90ZXN0X2RhdGEiLAogICAgICI6bG9hZGVyIiwKICAgICAiLy9jb2JhbHQvYmFzZTpiYXNlIiwKICAgICAiLy9jb2JhbHQvZG9tIiwKQEAgLTIwMywxMCArMjA0LDE0IEBACiAgICAgIi8vdGhpcmRfcGFydHkvb3RzOm90cyIsCiAgIF0KIAotICBkZXBzICs9IGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMKKyAgZGF0YV9kZXBzID0gWyAiOmNvcHlfbG9hZGVyX3Rlc3RfZGF0YSIgXQorCisgIGNvbnRlbnRfZGVwcyA9IFsgIjpjb3B5X2xvYWRlcl90ZXN0X2RhdGEiIF0KIH0KIAogY29weSgiY29weV9sb2FkZXJfdGVzdF9kYXRhIikgeworICBpbnN0YWxsX2NvbnRlbnQgPSB0cnVlCisKICAgc291cmNlcyA9IFsKICAgICAidGVzdGRhdGEvYmFzZWxpbmVfanBlZy5qcGciLAogICAgICJ0ZXN0ZGF0YS9lbXB0eS50eHQiLApkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9mZXRjaGVyLmggYi9jb2JhbHQvbG9hZGVyL2ZldGNoZXIuaAppbmRleCAwMmE4NDIyLi4zNzAyNjc5IDEwMDY0NAotLS0gYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXIuaAorKysgYi9jb2JhbHQvbG9hZGVyL2ZldGNoZXIuaApAQCAtMjEsOCArMjEsOCBAQAogI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL3VybF91dGlscy5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvbG9hZGVyX3R5cGVzLmgiCi0jaW5jbHVkZSAibmV0L2h0dHAvaHR0cF9yZXNwb25zZV9oZWFkZXJzLmgiCiAjaW5jbHVkZSAibmV0L2Jhc2UvbG9hZF90aW1pbmdfaW5mby5oIgorI2luY2x1ZGUgIm5ldC9odHRwL2h0dHBfcmVzcG9uc2VfaGVhZGVycy5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNjQsOCArNjQsNyBAQAogICAgICAgT25SZWNlaXZlZChmZXRjaGVyLCBkYXRhLT5kYXRhKCksIGRhdGEtPmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgU2V0TG9hZFRpbWluZ0luZm8oCi0gICAgICAgIGNvbnN0IG5ldDo6TG9hZFRpbWluZ0luZm8mIHRpbWluZ19pbmZvKSB7CisgICAgdmlydHVhbCB2b2lkIFNldExvYWRUaW1pbmdJbmZvKGNvbnN0IG5ldDo6TG9hZFRpbWluZ0luZm8mIHRpbWluZ19pbmZvKSB7CiAgICAgICBpZiAoIWxvYWRfdGltaW5nX2luZm9fY2FsbGJhY2tfLmlzX251bGwoKSkgewogICAgICAgICBsb2FkX3RpbWluZ19pbmZvX2NhbGxiYWNrXy5SdW4odGltaW5nX2luZm8pOwogICAgICAgfQpAQCAtNzksOCArNzgsNyBAQAogICAgcHJvdGVjdGVkOgogICAgIEhhbmRsZXIoKSB7fQogICAgIHZpcnR1YWwgfkhhbmRsZXIoKSB7fQotICAgIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgbmV0OjpMb2FkVGltaW5nSW5mbyYpPgotICAgICAgICBsb2FkX3RpbWluZ19pbmZvX2NhbGxiYWNrXzsKKyAgICBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IG5ldDo6TG9hZFRpbWluZ0luZm8mKT4gbG9hZF90aW1pbmdfaW5mb19jYWxsYmFja187CiAKICAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEhhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuY2MgYi9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5jYwppbmRleCA4MzUzMWM2Li5iZGVkMzJjIDEwMDY0NAotLS0gYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5jYworKysgYi9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5jYwpAQCAtOTQsMTQgKzk0LDE2IEBACiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxGZXRjaGVyPiBGZXRjaGVyRmFjdG9yeTo6Q3JlYXRlRmV0Y2hlcigKLSAgICBjb25zdCBHVVJMJiB1cmwsIEZldGNoZXI6OkhhbmRsZXIqIGhhbmRsZXIpIHsKKyAgICBjb25zdCBHVVJMJiB1cmwsIGNvbnN0IGRpc2tfY2FjaGU6OlJlc291cmNlVHlwZSB0eXBlLAorICAgIEZldGNoZXI6OkhhbmRsZXIqIGhhbmRsZXIpIHsKICAgcmV0dXJuIENyZWF0ZVNlY3VyZUZldGNoZXIodXJsLCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2soKSwga05vQ09SU01vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbigpLCBoYW5kbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luKCksIHR5cGUsIGhhbmRsZXIpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RmV0Y2hlcj4gRmV0Y2hlckZhY3Rvcnk6OkNyZWF0ZVNlY3VyZUZldGNoZXIoCiAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKLSAgICBSZXF1ZXN0TW9kZSByZXF1ZXN0X21vZGUsIGNvbnN0IE9yaWdpbiYgb3JpZ2luLCBGZXRjaGVyOjpIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAgUmVxdWVzdE1vZGUgcmVxdWVzdF9tb2RlLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKKyAgICBjb25zdCBkaXNrX2NhY2hlOjpSZXNvdXJjZVR5cGUgdHlwZSwgRmV0Y2hlcjo6SGFuZGxlciogaGFuZGxlcikgewogICBMT0coSU5GTykgPDwgIkZldGNoaW5nOiAiIDw8IENsaXBVcmwodXJsLCAyMDApOwogCiAgIGlmICghdXJsLmlzX3ZhbGlkKCkpIHsKQEAgLTExNCw2ICsxMTYsNyBAQAogICBpZiAoKHVybC5TY2hlbWVJcygiaHR0cHMiKSB8fCB1cmwuU2NoZW1lSXMoImh0dHAiKSB8fCB1cmwuU2NoZW1lSXMoImRhdGEiKSkgJiYKICAgICAgIG5ldHdvcmtfbW9kdWxlXykgewogICAgIE5ldEZldGNoZXI6Ok9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnJlc291cmNlX3R5cGUgPSB0eXBlOwogICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8RmV0Y2hlcj4oCiAgICAgICAgIG5ldyBOZXRGZXRjaGVyKHVybCwgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLCBoYW5kbGVyLCBuZXR3b3JrX21vZHVsZV8sCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHJlcXVlc3RfbW9kZSwgb3JpZ2luKSk7CmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5oIGIvY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuaAppbmRleCA2MmZjNjQwLi4yNjMwMDMxIDEwMDY0NAotLS0gYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5oCisrKyBiL2NvYmFsdC9sb2FkZXIvZmV0Y2hlcl9mYWN0b3J5LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvY3NwL2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9ibG9iX2ZldGNoZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL2ZldGNoZXIuaCIKKyNpbmNsdWRlICJuZXQvZGlza19jYWNoZS9jb2JhbHQvcmVzb3VyY2VfdHlwZS5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNDgsMTIgKzQ5LDEzIEBACiAKICAgLy8gQ3JlYXRlcyBhIGZldGNoZXIuIFJldHVybnMgTlVMTCBpZiB0aGUgY3JlYXRpb24gZmFpbHMuCiAgIHN0ZDo6dW5pcXVlX3B0cjxGZXRjaGVyPiBDcmVhdGVGZXRjaGVyKGNvbnN0IEdVUkwmIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlza19jYWNoZTo6UmVzb3VyY2VUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZldGNoZXI6OkhhbmRsZXIqIGhhbmRsZXIpOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxGZXRjaGVyPiBDcmVhdGVTZWN1cmVGZXRjaGVyKAogICAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKICAgICAgIFJlcXVlc3RNb2RlIHJlcXVlc3RfbW9kZSwgY29uc3QgT3JpZ2luJiBvcmlnaW4sCi0gICAgICBGZXRjaGVyOjpIYW5kbGVyKiBoYW5kbGVyKTsKKyAgICAgIGNvbnN0IGRpc2tfY2FjaGU6OlJlc291cmNlVHlwZSB0eXBlLCBGZXRjaGVyOjpIYW5kbGVyKiBoYW5kbGVyKTsKIAogICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSgpIGNvbnN0IHsgcmV0dXJuIG5ldHdvcmtfbW9kdWxlXzsgfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeV90ZXN0LmNjIGIvY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnlfdGVzdC5jYwppbmRleCBhZmYzOWY1Li5hYzE2ZDQ0IDEwMDY0NAotLS0gYS9jb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeV90ZXN0LmNjCisrKyBiL2NvYmFsdC9sb2FkZXIvZmV0Y2hlcl9mYWN0b3J5X3Rlc3QuY2MKQEAgLTg1LDggKzg1LDggQEAKICAgYmFzZTo6UnVuTG9vcCBydW5fbG9vcDsKICAgU3R1YkZldGNoZXJIYW5kbGVyIHN0dWJfZmV0Y2hlcl9oYW5kbGVyKCZydW5fbG9vcCk7CiAKLSAgZmV0Y2hlcl8gPSBmZXRjaGVyX2ZhY3RvcnlfLkNyZWF0ZUZldGNoZXIoR1VSTCgiaW52YWxpZC11cmwiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0dWJfZmV0Y2hlcl9oYW5kbGVyKTsKKyAgZmV0Y2hlcl8gPSBmZXRjaGVyX2ZhY3RvcnlfLkNyZWF0ZUZldGNoZXIoCisgICAgICBHVVJMKCJpbnZhbGlkLXVybCIpLCBkaXNrX2NhY2hlOjprT3RoZXIsICZzdHViX2ZldGNoZXJfaGFuZGxlcik7CiAgIEVYUEVDVF9UUlVFKGZldGNoZXJfKTsKIAogICBydW5fbG9vcC5SdW4oKTsKQEAgLTk4LDggKzk4LDggQEAKICAgYmFzZTo6UnVuTG9vcCBydW5fbG9vcDsKICAgU3R1YkZldGNoZXJIYW5kbGVyIHN0dWJfZmV0Y2hlcl9oYW5kbGVyKCZydW5fbG9vcCk7CiAKLSAgZmV0Y2hlcl8gPQotICAgICAgZmV0Y2hlcl9mYWN0b3J5Xy5DcmVhdGVGZXRjaGVyKEdVUkwoImZpbGU6Ly8vIiksICZzdHViX2ZldGNoZXJfaGFuZGxlcik7CisgIGZldGNoZXJfID0gZmV0Y2hlcl9mYWN0b3J5Xy5DcmVhdGVGZXRjaGVyKAorICAgICAgR1VSTCgiZmlsZTovLy8iKSwgZGlza19jYWNoZTo6a090aGVyLCAmc3R1Yl9mZXRjaGVyX2hhbmRsZXIpOwogICBFWFBFQ1RfVFJVRShmZXRjaGVyXyk7CiAKICAgcnVuX2xvb3AuUnVuKCk7CkBAIC0xMTEsOCArMTExLDggQEAKICAgYmFzZTo6UnVuTG9vcCBydW5fbG9vcDsKICAgU3R1YkZldGNoZXJIYW5kbGVyIHN0dWJfZmV0Y2hlcl9oYW5kbGVyKCZydW5fbG9vcCk7CiAKLSAgZmV0Y2hlcl8gPSBmZXRjaGVyX2ZhY3RvcnlfLkNyZWF0ZUZldGNoZXIoR1VSTCgiZmlsZTovL2ZpbGUudHh0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHViX2ZldGNoZXJfaGFuZGxlcik7CisgIGZldGNoZXJfID0gZmV0Y2hlcl9mYWN0b3J5Xy5DcmVhdGVGZXRjaGVyKAorICAgICAgR1VSTCgiZmlsZTovL2ZpbGUudHh0IiksIGRpc2tfY2FjaGU6OmtPdGhlciwgJnN0dWJfZmV0Y2hlcl9oYW5kbGVyKTsKICAgRVhQRUNUX1RSVUUoZmV0Y2hlcl8pOwogCiAgIHJ1bl9sb29wLlJ1bigpOwpAQCAtMTI3LDEyICsxMjcsMTQgQEAKICAgYmFzZTo6UnVuTG9vcCBydW5fbG9vcDsKICAgU3R1YkZldGNoZXJIYW5kbGVyIHN0dWJfZmV0Y2hlcl9oYW5kbGVyKCZydW5fbG9vcCk7CiAKLSAgZmV0Y2hlcl8gPSBmZXRjaGVyX2ZhY3RvcnlfLkNyZWF0ZUZldGNoZXIoR1VSTCgiZmlsZTovLy9ub25lbXB0eS11cmwtMSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R1Yl9mZXRjaGVyX2hhbmRsZXIpOworICBmZXRjaGVyXyA9CisgICAgICBmZXRjaGVyX2ZhY3RvcnlfLkNyZWF0ZUZldGNoZXIoR1VSTCgiZmlsZTovLy9ub25lbXB0eS11cmwtMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfY2FjaGU6OmtPdGhlciwgJnN0dWJfZmV0Y2hlcl9oYW5kbGVyKTsKICAgRVhQRUNUX1RSVUUoZmV0Y2hlcl8pOwogCi0gIGZldGNoZXJfID0gZmV0Y2hlcl9mYWN0b3J5Xy5DcmVhdGVGZXRjaGVyKEdVUkwoImZpbGU6Ly8vbm9uZW1wdHktdXJsLTIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0dWJfZmV0Y2hlcl9oYW5kbGVyKTsKKyAgZmV0Y2hlcl8gPQorICAgICAgZmV0Y2hlcl9mYWN0b3J5Xy5DcmVhdGVGZXRjaGVyKEdVUkwoImZpbGU6Ly8vbm9uZW1wdHktdXJsLTIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrX2NhY2hlOjprT3RoZXIsICZzdHViX2ZldGNoZXJfaGFuZGxlcik7CiAgIEVYUEVDVF9UUlVFKGZldGNoZXJfKTsKICAgcnVuX2xvb3AuUnVuKCk7CiAgIEVYUEVDVF9FUShmZXRjaGVyXy5nZXQoKSwgc3R1Yl9mZXRjaGVyX2hhbmRsZXIuZmV0Y2hlcigpKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9sb2FkZXIvaW1hZ2UvaW1hZ2VfZGVjb2Rlci5jYyBiL2NvYmFsdC9sb2FkZXIvaW1hZ2UvaW1hZ2VfZGVjb2Rlci5jYwppbmRleCA2ZjFiNmVjLi4wN2Q5Y2JjIDEwMDY0NAotLS0gYS9jb2JhbHQvbG9hZGVyL2ltYWdlL2ltYWdlX2RlY29kZXIuY2MKKysrIGIvY29iYWx0L2xvYWRlci9pbWFnZS9pbWFnZV9kZWNvZGVyLmNjCkBAIC00MjYsNyArNDI2LDYgQEAKIAogLy8gc3RhdGljCiBib29sIEltYWdlRGVjb2Rlcjo6QWxsb3dEZWNvZGluZ1RvTXVsdGlQbGFuZSgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAvLyBNYW55IGltYWdlIGZvcm1hdHMgY2FuIHByb2R1Y2UgbmF0aXZlIG91dHB1dCBpbiBtdWx0aSBwbGFuZSBpbWFnZXMgaW4gWVVWCiAgIC8vIDQyMC4gQWxsb3dpbmcgdGhlc2UgaW1hZ2VzIHRvIGJlIGRlY29kZWQgaW50byBtdWx0aSBwbGFuZSBpbWFnZSBub3Qgb25seQogICAvLyByZWR1Y2VzIHRoZSBzcGFjZSB0byBzdG9yZSB0aGUgZGVjb2RlZCBpbWFnZSB0byAzNy41JSwgYnV0IGFsc28gaW1wcm92ZXMKQEAgLTQ0MSwxMSArNDQwLDYgQEAKICAgYm9vbCBhbGxvd19pbWFnZV9kZWNvZGluZ190b19tdWx0aV9wbGFuZSA9CiAgICAgICBzdGQ6OnN0cmluZyhjb25maWd1cmF0aW9uOjpDb25maWd1cmF0aW9uOjpHZXRJbnN0YW5jZSgpCiAgICAgICAgICAgICAgICAgICAgICAgLT5Db2JhbHRSYXN0ZXJpemVyVHlwZSgpKSA9PSAiZGlyZWN0LWdsZXMiOwotI2VsaWYgU0JfSEFTKEdMRVMyKSAmJiBkZWZpbmVkKENPQkFMVF9GT1JDRV9ESVJFQ1RfR0xFU19SQVNURVJJWkVSKQotICBib29sIGFsbG93X2ltYWdlX2RlY29kaW5nX3RvX211bHRpX3BsYW5lID0gdHJ1ZTsKLSNlbHNlICAgLy8gU0JfSEFTKEdMRVMyKSAmJiBkZWZpbmVkKENPQkFMVF9GT1JDRV9ESVJFQ1RfR0xFU19SQVNURVJJWkVSKQotICBib29sIGFsbG93X2ltYWdlX2RlY29kaW5nX3RvX211bHRpX3BsYW5lID0gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0hBUyhHTEVTMikgJiYgZGVmaW5lZChDT0JBTFRfRk9SQ0VfRElSRUNUX0dMRVNfUkFTVEVSSVpFUikKIAogI2lmICFkZWZpbmVkKENPQkFMVF9CVUlMRF9UWVBFX0dPTEQpCiAgIGF1dG8gY29tbWFuZF9saW5lID0gYmFzZTo6Q29tbWFuZExpbmU6OkZvckN1cnJlbnRQcm9jZXNzKCk7CmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL2ltYWdlL3NhbmRib3gvc2FuZGJveC5neXAgYi9jb2JhbHQvbG9hZGVyL2ltYWdlL3NhbmRib3gvc2FuZGJveC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNWQ2NDUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2xvYWRlci9pbWFnZS9zYW5kYm94L3NhbmRib3guZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBpcyBhIHNhbXBsZSBzYW5kYm94IGFwcGxpY2F0aW9uIGZvciBleHBlcmltZW50aW5nIHdpdGggdGhlIENvYmFsdAotIyBJbWFnZURlY29kZXIuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgIyBUaGlzIHRhcmdldCB3aWxsIGJ1aWxkIGEgc2FuZGJveCBhcHBsaWNhdGlvbiB0aGF0IGFsbG93cyBmb3IgZWFzeQotICAgICMgZXhwZXJpbWVudGF0aW9uIHdpdGggdGhlIEltYWdlRGVjb2RlciBvbiBhbnkgcGxhdGZvcm0uCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ltYWdlX2RlY29kZXJfc2FuZGJveCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdpbWFnZV9kZWNvZGVyX3NhbmRib3guY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9sb2FkZXIvbG9hZGVyLmd5cDpsb2FkZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOmxvYWRlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXIuZ3lwOnJlbmRlcmVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuZ3lwOnN5c3RlbV93aW5kb3cnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50Lmd5cDp0cmFjZV9ldmVudCcsCi0gICAgICAgICc8KERFUFRIKS91cmwvdXJsLmd5cDp1cmwnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ltYWdlX2RlY29kZXJfc2FuZGJveF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW1hZ2VfZGVjb2Rlcl9zYW5kYm94JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2ltYWdlX2RlY29kZXJfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL2xvYWRlci5neXAgYi9jb2JhbHQvbG9hZGVyL2xvYWRlci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NWM3NzMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsb2FkZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdibG9iX2ZldGNoZXIuY2MnLAotICAgICAgICAnYmxvYl9mZXRjaGVyLmgnLAotICAgICAgICAnY2FjaGVfZmV0Y2hlci5jYycsCi0gICAgICAgICdjYWNoZV9mZXRjaGVyLmgnLAotICAgICAgICAnY29yc19wcmVmbGlnaHQuY2MnLAotICAgICAgICAnY29yc19wcmVmbGlnaHQuaCcsCi0gICAgICAgICdjb3JzX3ByZWZsaWdodF9jYWNoZS5jYycsCi0gICAgICAgICdjb3JzX3ByZWZsaWdodF9jYWNoZS5oJywKLSAgICAgICAgJ2RlY29kZXIuaCcsCi0gICAgICAgICdlbWJlZGRlZF9mZXRjaGVyLmNjJywKLSAgICAgICAgJ2VtYmVkZGVkX2ZldGNoZXIuaCcsCi0gICAgICAgICdlcnJvcl9mZXRjaGVyLmNjJywKLSAgICAgICAgJ2Vycm9yX2ZldGNoZXIuaCcsCi0gICAgICAgICdmZXRjaGVyX2ZhY3RvcnkuY2MnLAotICAgICAgICAnZmV0Y2hlcl9mYWN0b3J5LmgnLAotICAgICAgICAnZmV0Y2hlci5jYycsCi0gICAgICAgICdmZXRjaGVyLmgnLAotICAgICAgICAnZmV0Y2hlcl9jYWNoZS5jYycsCi0gICAgICAgICdmZXRjaGVyX2NhY2hlLmgnLAotICAgICAgICAnZmlsZV9mZXRjaGVyLmNjJywKLSAgICAgICAgJ2ZpbGVfZmV0Y2hlci5oJywKLSAgICAgICAgJ2ZvbnQvcmVtb3RlX3R5cGVmYWNlX2NhY2hlLmgnLAotICAgICAgICAnZm9udC90eXBlZmFjZV9kZWNvZGVyLmNjJywKLSAgICAgICAgJ2ZvbnQvdHlwZWZhY2VfZGVjb2Rlci5oJywKLSAgICAgICAgJ2ltYWdlL2FuaW1hdGVkX2ltYWdlX3RyYWNrZXIuY2MnLAotICAgICAgICAnaW1hZ2UvYW5pbWF0ZWRfaW1hZ2VfdHJhY2tlci5oJywKLSAgICAgICAgJ2ltYWdlL2FuaW1hdGVkX3dlYnBfaW1hZ2UuY2MnLAotICAgICAgICAnaW1hZ2UvYW5pbWF0ZWRfd2VicF9pbWFnZS5oJywKLSAgICAgICAgJ2ltYWdlL2R1bW15X2dpZl9pbWFnZV9kZWNvZGVyLmNjJywKLSAgICAgICAgJ2ltYWdlL2R1bW15X2dpZl9pbWFnZV9kZWNvZGVyLmgnLAotICAgICAgICAnaW1hZ2UvZmFpbHVyZV9pbWFnZV9kZWNvZGVyLmgnLAotICAgICAgICAnaW1hZ2UvaW1hZ2VfY2FjaGUuaCcsCi0gICAgICAgICdpbWFnZS9pbWFnZV9kYXRhX2RlY29kZXIuY2MnLAotICAgICAgICAnaW1hZ2UvaW1hZ2VfZGF0YV9kZWNvZGVyLmgnLAotICAgICAgICAnaW1hZ2UvaW1hZ2VfZGVjb2Rlcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnaW1hZ2UvaW1hZ2VfZGVjb2Rlcl9zdGFyYm9hcmQuaCcsCi0gICAgICAgICdpbWFnZS9pbWFnZV9kZWNvZGVyLmNjJywKLSAgICAgICAgJ2ltYWdlL2ltYWdlX2RlY29kZXIuaCcsCi0gICAgICAgICdpbWFnZS9pbWFnZV9lbmNvZGVyLmNjJywKLSAgICAgICAgJ2ltYWdlL2ltYWdlX2VuY29kZXIuaCcsCi0gICAgICAgICdpbWFnZS9pbWFnZS5oJywKLSAgICAgICAgJ2ltYWdlL2pwZWdfaW1hZ2VfZGVjb2Rlci5jYycsCi0gICAgICAgICdpbWFnZS9qcGVnX2ltYWdlX2RlY29kZXIuaCcsCi0gICAgICAgICdpbWFnZS9sb3R0aWVfYW5pbWF0aW9uLmgnLAotICAgICAgICAnaW1hZ2UvbG90dGllX2FuaW1hdGlvbi5jYycsCi0gICAgICAgICdpbWFnZS9sb3R0aWVfYW5pbWF0aW9uX2RlY29kZXIuY2MnLAotICAgICAgICAnaW1hZ2UvbG90dGllX2FuaW1hdGlvbl9kZWNvZGVyLmgnLAotICAgICAgICAnaW1hZ2UvcG5nX2ltYWdlX2RlY29kZXIuY2MnLAotICAgICAgICAnaW1hZ2UvcG5nX2ltYWdlX2RlY29kZXIuaCcsCi0gICAgICAgICdpbWFnZS9zdHViX2ltYWdlX2RlY29kZXIuaCcsCi0gICAgICAgICdpbWFnZS90aHJlYWRlZF9pbWFnZV9kZWNvZGVyX3Byb3h5LmNjJywKLSAgICAgICAgJ2ltYWdlL3RocmVhZGVkX2ltYWdlX2RlY29kZXJfcHJveHkuaCcsCi0gICAgICAgICdpbWFnZS93ZWJwX2ltYWdlX2RlY29kZXIuY2MnLAotICAgICAgICAnaW1hZ2Uvd2VicF9pbWFnZV9kZWNvZGVyLmgnLAotICAgICAgICAnbG9hZGVyX2ZhY3RvcnkuY2MnLAotICAgICAgICAnbG9hZGVyX2ZhY3RvcnkuaCcsCi0gICAgICAgICdsb2FkZXJfdHlwZXMuaCcsCi0gICAgICAgICdsb2FkZXIuY2MnLAotICAgICAgICAnbG9hZGVyLmgnLAotICAgICAgICAnbWVzaC9tZXNoX2NhY2hlLmgnLAotICAgICAgICAnbWVzaC9tZXNoX2RlY29kZXIuY2MnLAotICAgICAgICAnbWVzaC9tZXNoX2RlY29kZXIuaCcsCi0gICAgICAgICdtZXNoL21lc2hfcHJvamVjdGlvbi5oJywKLSAgICAgICAgJ21lc2gvcHJvamVjdGlvbl9jb2RlYy9jb25zdGFudHMuaCcsCi0gICAgICAgICdtZXNoL3Byb2plY3Rpb25fY29kZWMvaW5kZXhlZF92ZXJ0LmNjJywKLSAgICAgICAgJ21lc2gvcHJvamVjdGlvbl9jb2RlYy9pbmRleGVkX3ZlcnQuaCcsCi0gICAgICAgICdtZXNoL3Byb2plY3Rpb25fY29kZWMvcHJvamVjdGlvbl9kZWNvZGVyLmNjJywKLSAgICAgICAgJ21lc2gvcHJvamVjdGlvbl9jb2RlYy9wcm9qZWN0aW9uX2RlY29kZXIuaCcsCi0gICAgICAgICduZXRfZmV0Y2hlci5jYycsCi0gICAgICAgICduZXRfZmV0Y2hlci5oJywKLSAgICAgICAgJ3Jlc291cmNlX2NhY2hlLmNjJywKLSAgICAgICAgJ3Jlc291cmNlX2NhY2hlLmgnLAotICAgICAgICAnc3dpdGNoZXMuY2MnLAotICAgICAgICAnc3dpdGNoZXMuaCcsCi0gICAgICAgICdzeW5jX2xvYWRlci5jYycsCi0gICAgICAgICdzeW5jX2xvYWRlci5oJywKLSAgICAgICAgJ3RleHRfZGVjb2Rlci5oJywKLSAgICAgICAgJ3VybF9mZXRjaGVyX3N0cmluZ193cml0ZXIuY2MnLAotICAgICAgICAndXJsX2ZldGNoZXJfc3RyaW5nX3dyaXRlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmd5cDpjb25maWd1cmF0aW9uJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jc3AvY3NwLmd5cDpjc3AnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9vcmlnaW4uZ3lwOm9yaWdpbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJfdHJlZS9yZW5kZXJfdHJlZS5neXA6cmVuZGVyX3RyZWUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Rlc3QvcG5nX3V0aWxzL3BuZ191dGlscy5neXA6cG5nX3V0aWxzJywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcuZ3lwOmxpYmpwZWcnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlicG5nL2xpYnBuZy5neXA6bGlicG5nJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYndlYnAvbGlid2VicC5neXA6bGlid2VicCcsCi0gICAgICAgICdlbWJlZF9yZXNvdXJjZXNfYXNfaGVhZGVyX2ZpbGVzX2xvYWRlcicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY29iYWx0X2NvbmZpZyAhPSAiZ29sZCInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9qcGVnX3V0aWxzL2pwZWdfdXRpbHMuZ3lwOmpwZWdfdXRpbHMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2VuYWJsZV9hYm91dF9zY2hlbWUgPT0gMScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsgJ0VOQUJMRV9BQk9VVF9TQ0hFTUUnIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYWJvdXRfZmV0Y2hlci5jYycsCi0gICAgICAgICAgICAnYWJvdXRfZmV0Y2hlci5oJywKLSAgICAgICAgICBdCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xvYWRlcl90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYmxvYl9mZXRjaGVyX3Rlc3QuY2MnLAotICAgICAgICAnZmV0Y2hlcl9mYWN0b3J5X3Rlc3QuY2MnLAotICAgICAgICAnZmV0Y2hlcl90ZXN0LmgnLAotICAgICAgICAnZmlsZV9mZXRjaGVyX3Rlc3QuY2MnLAotICAgICAgICAnZm9udC90eXBlZmFjZV9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAnaW1hZ2UvaW1hZ2VfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ2ltYWdlL2ltYWdlX2RlY29kZXJfdW5pdF90ZXN0LmNjJywKLSAgICAgICAgJ21lc2gvbWVzaF9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAnbG9hZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGV4dF9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tYXRoL21hdGguZ3lwOm1hdGgnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvb3RzL290cy5neXA6b3RzJywKLSAgICAgICAgJ2xvYWRlcicsCi0gICAgICAgICdsb2FkZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAnPEAoY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyknLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xvYWRlcl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdsb2FkZXJfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdsb2FkZXJfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbG9hZGVyX2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci90ZXN0ZGF0YS8nLAotICAgICAgICBdLAotICAgICAgICAnY29udGVudF90ZXN0X291dHB1dF9zdWJkaXInOiAnY29iYWx0L2xvYWRlci90ZXN0ZGF0YS8nLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAjIFRoaXMgdGFyZ2V0IHRha2VzIGFsbCBmaWxlcyBpbiB0aGUgZW1iZWRkZWRfcmVzb3VyY2VzIGRpcmVjdG9yeSAoZS5nLgotICAgICAgIyB0aGUgc3BsYXNoIHNjcmVlbikgYW5kIGVtYmVkcyB0aGVtIGFzIGhlYWRlciBmaWxlcyBmb3IKLSAgICAgICMgaW5jbHVzaW9uIGludG8gdGhlIGJpbmFyeS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdlbWJlZF9yZXNvdXJjZXNfYXNfaGVhZGVyX2ZpbGVzX2xvYWRlcicsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICMgQmVjYXVzZSB3ZSBnZW5lcmF0ZSBhIGhlYWRlciwgd2UgbXVzdCBzZXQgdGhlIGhhcmRfZGVwZW5kZW5jeSBmbGFnLgotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnc2NyaXB0X3BhdGgnOiAnPChERVBUSCkvY29iYWx0L2J1aWxkL2dlbmVyYXRlX2RhdGFfaGVhZGVyLnB5JywKLSAgICAgICAgJ291dHB1dF9wYXRoJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2NvYmFsdC9sb2FkZXIvZW1iZWRkZWRfcmVzb3VyY2VzLmgnLAotICAgICAgICAnaW5wdXRfZGlyZWN0b3J5JzogJ2VtYmVkZGVkX3Jlc291cmNlcycsCi0gICAgICB9LAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGlucHV0X2RpcmVjdG9yeSkvYmxhY2tfc3BsYXNoX3NjcmVlbi5odG1sJywKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS9jb2JhbHRfc3BsYXNoX3NjcmVlbi5jc3MnLAotICAgICAgICAnPChpbnB1dF9kaXJlY3RvcnkpL2NvYmFsdF9zcGxhc2hfc2NyZWVuLmh0bWwnLAotICAgICAgICAnPChpbnB1dF9kaXJlY3RvcnkpL2NvYmFsdF93b3JkX2xvZ29fMzU2LnBuZycsCi0gICAgICAgICc8KGlucHV0X2RpcmVjdG9yeSkvZGlhbG9nLmNzcycsCi0gICAgICAgICc8KGlucHV0X2RpcmVjdG9yeSkvZGlhbG9nLmpzJywKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS9lcXVpcmVjdGFuZ3VsYXJfNDBfNDAubXNoJywKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS9zcGxhc2hfc2NyZWVuLmpzJywKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS91bmFibGVfbWVzc2FnZS5odG1sLnRlbXBsYXRlJywKLSAgICAgICAgJzwoaW5wdXRfZGlyZWN0b3J5KS91cGRhdGVfbWVzc2FnZS5odG1sLnRlbXBsYXRlJywKLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoREVQVEgpL2NvYmFsdC9sb2FkZXIvZW1iZWRkZWRfcmVzb3VyY2VzICouaHRtbCknLAotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2VtYmVkX3Jlc291cmNlc19hc19oZWFkZXJfZmlsZXNfbG9hZGVyJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAgICc8QChfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChvdXRwdXRfcGF0aCknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsncHl0aG9uMicsICc8KHNjcmlwdF9wYXRoKScsICdMb2FkZXJFbWJlZGRlZFJlc291cmNlcycsICc8KG91dHB1dF9wYXRoKScsICc8KGlucHV0X2RpcmVjdG9yeSknXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdFbWJlZGRpbmcgbGF5b3V0IHJlc291cmNlcyBpbiAiPChpbnB1dF9kaXJlY3RvcnkpIiBpbnRvIGhlYWRlciBmaWxlLCAiPChvdXRwdXRfcGF0aCkiLicsCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9sb2FkZXIvbG9hZGVyX2ZhY3RvcnkuY2MgYi9jb2JhbHQvbG9hZGVyL2xvYWRlcl9mYWN0b3J5LmNjCmluZGV4IDZjNTQyZTAuLmJhNTcxYmEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9sb2FkZXIvbG9hZGVyX2ZhY3RvcnkuY2MKKysrIGIvY29iYWx0L2xvYWRlci9sb2FkZXJfZmFjdG9yeS5jYwpAQCAtMjIsMzIgKzIyLDE3IEBACiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBsb2FkZXIgewogCi1uYW1lc3BhY2UgewotCi0vLyBUaGUgUmVzb3VyY2VMb2FkZXIgdGhyZWFkIHVzZXMgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSwgd2hpY2ggaXMgcmVxdWVzdGVkCi0vLyBieSBwYXNzaW5nIGluIDAgZm9yIGl0cyBzdGFjayBzaXplLgotY29uc3Qgc2l6ZV90IGtMb2FkVGhyZWFkU3RhY2tTaXplID0gMDsKLQotfSAgLy8gbmFtZXNwYWNlCi0KIExvYWRlckZhY3Rvcnk6OkxvYWRlckZhY3RvcnkoY29uc3QgY2hhciogbmFtZSwgRmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVuY29kZWRfaW1hZ2VfY2FjaGVfY2FwYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRocmVhZFByaW9yaXR5IGxvYWRlcl90aHJlYWRfcHJpb3JpdHkpCi0gICAgOiBmZXRjaGVyX2ZhY3RvcnlfKGZldGNoZXJfZmFjdG9yeSksCi0gICAgICByZXNvdXJjZV9wcm92aWRlcl8ocmVzb3VyY2VfcHJvdmlkZXIpLAorICAgIDogU2NyaXB0TG9hZGVyRmFjdG9yeShuYW1lLCBmZXRjaGVyX2ZhY3RvcnksIGxvYWRlcl90aHJlYWRfcHJpb3JpdHkpLAogICAgICAgZGVidWdnZXJfaG9va3NfKGRlYnVnZ2VyX2hvb2tzKSwKLSAgICAgIGxvYWRfdGhyZWFkXygiUmVzb3VyY2VMb2FkZXIiKSwKLSAgICAgIGlzX3N1c3BlbmRlZF8oZmFsc2UpIHsKKyAgICAgIHJlc291cmNlX3Byb3ZpZGVyXyhyZXNvdXJjZV9wcm92aWRlcikgewogICBpZiAoZW5jb2RlZF9pbWFnZV9jYWNoZV9jYXBhY2l0eSA+IDApIHsKICAgICBmZXRjaGVyX2NhY2hlXy5yZXNldChuZXcgRmV0Y2hlckNhY2hlKG5hbWUsIGVuY29kZWRfaW1hZ2VfY2FjaGVfY2FwYWNpdHkpKTsKICAgfQotCi0gIGJhc2U6OlRocmVhZDo6T3B0aW9ucyBvcHRpb25zKGJhc2U6Ok1lc3NhZ2VMb29wOjpUWVBFX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMb2FkVGhyZWFkU3RhY2tTaXplKTsKLSAgb3B0aW9ucy5wcmlvcml0eSA9IGxvYWRlcl90aHJlYWRfcHJpb3JpdHk7Ci0gIGxvYWRfdGhyZWFkXy5TdGFydFdpdGhPcHRpb25zKG9wdGlvbnMpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBMb2FkZXJGYWN0b3J5OjpDcmVhdGVJbWFnZUxvYWRlcigKQEAgLTU3LDggKzQyLDggQEAKICAgICBjb25zdCBMb2FkZXI6Ok9uQ29tcGxldGVGdW5jdGlvbiYgbG9hZF9jb21wbGV0ZV9jYWxsYmFjaykgewogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwogCi0gIExvYWRlcjo6RmV0Y2hlckNyZWF0b3IgZmV0Y2hlcl9jcmVhdG9yID0KLSAgICAgIE1ha2VDYWNoZWRGZXRjaGVyQ3JlYXRvcih1cmwsIHVybF9zZWN1cml0eV9jYWxsYmFjaywga05vQ09SU01vZGUsIG9yaWdpbik7CisgIExvYWRlcjo6RmV0Y2hlckNyZWF0b3IgZmV0Y2hlcl9jcmVhdG9yID0gTWFrZUNhY2hlZEZldGNoZXJDcmVhdG9yKAorICAgICAgdXJsLCB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssIGtOb0NPUlNNb2RlLCBvcmlnaW4sIGRpc2tfY2FjaGU6OmtJbWFnZSk7CiAKICAgc3RkOjp1bmlxdWVfcHRyPExvYWRlcj4gbG9hZGVyKG5ldyBMb2FkZXIoCiAgICAgICBmZXRjaGVyX2NyZWF0b3IsCkBAIC03NiwxMyArNjEsMTMgQEAKIHN0ZDo6dW5pcXVlX3B0cjxMb2FkZXI+IExvYWRlckZhY3Rvcnk6OkNyZWF0ZUxpbmtMb2FkZXIoCiAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKICAgICBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKLSAgICBjb25zdCBsb2FkZXI6OlJlcXVlc3RNb2RlIGNvcnNfbW9kZSwKKyAgICBjb25zdCBsb2FkZXI6OlJlcXVlc3RNb2RlIGNvcnNfbW9kZSwgY29uc3QgZGlza19jYWNoZTo6UmVzb3VyY2VUeXBlIHR5cGUsCiAgICAgY29uc3QgVGV4dERlY29kZXI6OlRleHRBdmFpbGFibGVDYWxsYmFjayYgbGlua19hdmFpbGFibGVfY2FsbGJhY2ssCiAgICAgY29uc3QgTG9hZGVyOjpPbkNvbXBsZXRlRnVuY3Rpb24mIGxvYWRfY29tcGxldGVfY2FsbGJhY2spIHsKICAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKIAogICBMb2FkZXI6OkZldGNoZXJDcmVhdG9yIGZldGNoZXJfY3JlYXRvciA9Ci0gICAgICBNYWtlRmV0Y2hlckNyZWF0b3IodXJsLCB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssIGNvcnNfbW9kZSwgb3JpZ2luKTsKKyAgICAgIE1ha2VGZXRjaGVyQ3JlYXRvcih1cmwsIHVybF9zZWN1cml0eV9jYWxsYmFjaywgY29yc19tb2RlLCBvcmlnaW4sIHR5cGUpOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxMb2FkZXI+IGxvYWRlcihuZXcgTG9hZGVyKAogICAgICAgZmV0Y2hlcl9jcmVhdG9yLApAQCAtMTE4LDI3ICsxMDMsNiBAQAogICByZXR1cm4gbG9hZGVyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBMb2FkZXJGYWN0b3J5OjpDcmVhdGVTY3JpcHRMb2FkZXIoCi0gICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKLSAgICBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKLSAgICBjb25zdCBUZXh0RGVjb2Rlcjo6VGV4dEF2YWlsYWJsZUNhbGxiYWNrJiBzY3JpcHRfYXZhaWxhYmxlX2NhbGxiYWNrLAotICAgIGNvbnN0IExvYWRlcjo6T25Db21wbGV0ZUZ1bmN0aW9uJiBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrKSB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgTG9hZGVyOjpGZXRjaGVyQ3JlYXRvciBmZXRjaGVyX2NyZWF0b3IgPQotICAgICAgTWFrZUZldGNoZXJDcmVhdG9yKHVybCwgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLCBrTm9DT1JTTW9kZSwgb3JpZ2luKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBsb2FkZXIobmV3IExvYWRlcigKLSAgICAgIGZldGNoZXJfY3JlYXRvciwKLSAgICAgIGJhc2U6OkJpbmQoJmxvYWRlcjo6VGV4dERlY29kZXI6OkNyZWF0ZSwgc2NyaXB0X2F2YWlsYWJsZV9jYWxsYmFjayksCi0gICAgICBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrLAotICAgICAgYmFzZTo6QmluZCgmTG9hZGVyRmFjdG9yeTo6T25Mb2FkZXJEZXN0cm95ZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgaXNfc3VzcGVuZGVkXykpOwotCi0gIE9uTG9hZGVyQ3JlYXRlZChsb2FkZXIuZ2V0KCkpOwotICByZXR1cm4gbG9hZGVyOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBMb2FkZXJGYWN0b3J5OjpDcmVhdGVUeXBlZmFjZUxvYWRlcigKICAgICBjb25zdCBHVVJMJiB1cmwsIGNvbnN0IE9yaWdpbiYgb3JpZ2luLAogICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLApAQCAtMTQ4LDcgKzExMiw4IEBACiAgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CiAKICAgTG9hZGVyOjpGZXRjaGVyQ3JlYXRvciBmZXRjaGVyX2NyZWF0b3IgPSBNYWtlRmV0Y2hlckNyZWF0b3IoCi0gICAgICB1cmwsIHVybF9zZWN1cml0eV9jYWxsYmFjaywga0NPUlNNb2RlU2FtZU9yaWdpbkNyZWRlbnRpYWxzLCBvcmlnaW4pOworICAgICAgdXJsLCB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssIGtDT1JTTW9kZVNhbWVPcmlnaW5DcmVkZW50aWFscywgb3JpZ2luLAorICAgICAgZGlza19jYWNoZTo6a0ZvbnQpOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxMb2FkZXI+IGxvYWRlcihuZXcgTG9hZGVyKAogICAgICAgZmV0Y2hlcl9jcmVhdG9yLApAQCAtMTYyLDI5ICsxMjcsMTQgQEAKICAgcmV0dXJuIGxvYWRlcjsKIH0KIAotdm9pZCBMb2FkZXJGYWN0b3J5OjpOb3RpZnlSZXNvdXJjZVJlcXVlc3RlZChjb25zdCBzdGQ6OnN0cmluZyYgdXJsKSB7Ci0gIGlmIChmZXRjaGVyX2NhY2hlXykgewotICAgIGZldGNoZXJfY2FjaGVfLT5Ob3RpZnlSZXNvdXJjZVJlcXVlc3RlZCh1cmwpOwotICB9Ci19Ci0KLUxvYWRlcjo6RmV0Y2hlckNyZWF0b3IgTG9hZGVyRmFjdG9yeTo6TWFrZUZldGNoZXJDcmVhdG9yKAotICAgIGNvbnN0IEdVUkwmIHVybCwgY29uc3QgY3NwOjpTZWN1cml0eUNhbGxiYWNrJiB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssCi0gICAgUmVxdWVzdE1vZGUgcmVxdWVzdF9tb2RlLCBjb25zdCBPcmlnaW4mIG9yaWdpbikgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotCi0gIHJldHVybiBiYXNlOjpCaW5kKCZGZXRjaGVyRmFjdG9yeTo6Q3JlYXRlU2VjdXJlRmV0Y2hlciwKLSAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChmZXRjaGVyX2ZhY3RvcnlfKSwgdXJsLAotICAgICAgICAgICAgICAgICAgICB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssIHJlcXVlc3RfbW9kZSwgb3JpZ2luKTsKLX0KLQogTG9hZGVyOjpGZXRjaGVyQ3JlYXRvciBMb2FkZXJGYWN0b3J5OjpNYWtlQ2FjaGVkRmV0Y2hlckNyZWF0b3IoCiAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKLSAgICBSZXF1ZXN0TW9kZSByZXF1ZXN0X21vZGUsIGNvbnN0IE9yaWdpbiYgb3JpZ2luKSB7CisgICAgUmVxdWVzdE1vZGUgcmVxdWVzdF9tb2RlLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKKyAgICBjb25zdCBkaXNrX2NhY2hlOjpSZXNvdXJjZVR5cGUgdHlwZSkgewogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwogCi0gIGF1dG8gZmV0Y2hlcl9jcmVhdG9yID0KLSAgICAgIE1ha2VGZXRjaGVyQ3JlYXRvcih1cmwsIHVybF9zZWN1cml0eV9jYWxsYmFjaywgcmVxdWVzdF9tb2RlLCBvcmlnaW4pOworICBhdXRvIGZldGNoZXJfY3JlYXRvciA9IE1ha2VGZXRjaGVyQ3JlYXRvcih1cmwsIHVybF9zZWN1cml0eV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9tb2RlLCBvcmlnaW4sIHR5cGUpOwogCiAgIGlmIChmZXRjaGVyX2NhY2hlXykgewogICAgIHJldHVybiBmZXRjaGVyX2NhY2hlXy0+R2V0RmV0Y2hlckNyZWF0b3IodXJsLCBmZXRjaGVyX2NyZWF0b3IpOwpAQCAtMTkyLDYgKzE0MiwxMiBAQAogICByZXR1cm4gZmV0Y2hlcl9jcmVhdG9yOwogfQogCit2b2lkIExvYWRlckZhY3Rvcnk6Ok5vdGlmeVJlc291cmNlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIHsKKyAgaWYgKGZldGNoZXJfY2FjaGVfKSB7CisgICAgZmV0Y2hlcl9jYWNoZV8tPk5vdGlmeVJlc291cmNlUmVxdWVzdGVkKHVybCk7CisgIH0KK30KKwogdm9pZCBMb2FkZXJGYWN0b3J5OjpTdXNwZW5kKCkgewogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwogICBEQ0hFQ0socmVzb3VyY2VfcHJvdmlkZXJfKTsKQEAgLTI0MSwxNyArMTk3LDUgQEAKICAgbG9hZF90aHJlYWRfLm1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5XYWl0Rm9yRmVuY2UoKTsKIH0KIAotdm9pZCBMb2FkZXJGYWN0b3J5OjpPbkxvYWRlckNyZWF0ZWQoTG9hZGVyKiBsb2FkZXIpIHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLSAgRENIRUNLKGFjdGl2ZV9sb2FkZXJzXy5maW5kKGxvYWRlcikgPT0gYWN0aXZlX2xvYWRlcnNfLmVuZCgpKTsKLSAgYWN0aXZlX2xvYWRlcnNfLmluc2VydChsb2FkZXIpOwotfQotCi12b2lkIExvYWRlckZhY3Rvcnk6Ok9uTG9hZGVyRGVzdHJveWVkKExvYWRlciogbG9hZGVyKSB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0gIERDSEVDSyhhY3RpdmVfbG9hZGVyc18uZmluZChsb2FkZXIpICE9IGFjdGl2ZV9sb2FkZXJzXy5lbmQoKSk7Ci0gIGFjdGl2ZV9sb2FkZXJzXy5lcmFzZShsb2FkZXIpOwotfQotCiB9ICAvLyBuYW1lc3BhY2UgbG9hZGVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL2xvYWRlcl9mYWN0b3J5LmggYi9jb2JhbHQvbG9hZGVyL2xvYWRlcl9mYWN0b3J5LmgKaW5kZXggZDUxMWFiNS4uZTNmODBmZiAxMDA2NDQKLS0tIGEvY29iYWx0L2xvYWRlci9sb2FkZXJfZmFjdG9yeS5oCisrKyBiL2NvYmFsdC9sb2FkZXIvbG9hZGVyX2ZhY3RvcnkuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvaW1hZ2UvaW1hZ2VfZGVjb2Rlci5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvbG9hZGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9tZXNoL21lc2hfZGVjb2Rlci5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci90ZXh0X2RlY29kZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvcmVzb3VyY2VfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJ1cmwvZ3VybC5oIgpAQCAtMzksNyArNDAsNyBAQAogLy8gVGhlIExvYWRlckZhY3RvcnkgcHJvdmlkZXMgYSBjZW50cmFsIGxvYWRlciBjcmVhdG9yIG9iamVjdCBmcm9tIHdoaWNoIGNsaWVudHMKIC8vIGNhbiByZXF1ZXN0IHRoZSBjcmVhdGlvbiBvZiBsb2FkZXJzIG9mIHZhcmlvdXMgdHlwZXMuICBUaGUgTG9hZGVyRmFjdG9yeQogLy8gbWFpbnRhaW5zIGFsbCBjb250ZXh0IG5lY2Vzc2FyeSB0byBjcmVhdGUgdGhlIHZhcmlvdXMgcmVzb3VyY2UgdHlwZXMuCi1jbGFzcyBMb2FkZXJGYWN0b3J5IHsKK2NsYXNzIExvYWRlckZhY3RvcnkgOiBwdWJsaWMgU2NyaXB0TG9hZGVyRmFjdG9yeSB7CiAgcHVibGljOgogICBMb2FkZXJGYWN0b3J5KGNvbnN0IGNoYXIqIG5hbWUsIEZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnksCiAgICAgICAgICAgICAgICAgcmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyLApAQCAtNTksNyArNjAsNyBAQAogICBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBDcmVhdGVMaW5rTG9hZGVyKAogICAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKICAgICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLAotICAgICAgY29uc3QgbG9hZGVyOjpSZXF1ZXN0TW9kZSBjb3JzX21vZGUsCisgICAgICBjb25zdCBsb2FkZXI6OlJlcXVlc3RNb2RlIGNvcnNfbW9kZSwgY29uc3QgZGlza19jYWNoZTo6UmVzb3VyY2VUeXBlIHR5cGUsCiAgICAgICBjb25zdCBUZXh0RGVjb2Rlcjo6VGV4dEF2YWlsYWJsZUNhbGxiYWNrJiBsaW5rX2F2YWlsYWJsZV9jYWxsYmFjaywKICAgICAgIGNvbnN0IExvYWRlcjo6T25Db21wbGV0ZUZ1bmN0aW9uJiBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrKTsKIApAQCAtNzAsMTMgKzcxLDYgQEAKICAgICAgIGNvbnN0IG1lc2g6Ok1lc2hEZWNvZGVyOjpNZXNoQXZhaWxhYmxlQ2FsbGJhY2smIG1lc2hfYXZhaWxhYmxlX2NhbGxiYWNrLAogICAgICAgY29uc3QgTG9hZGVyOjpPbkNvbXBsZXRlRnVuY3Rpb24mIGxvYWRfY29tcGxldGVfY2FsbGJhY2spOwogCi0gIC8vIENyZWF0ZXMgYSBsb2FkZXIgdGhhdCBmZXRjaGVzIGFuZCBkZWNvZGVzIGEgSmF2YXNjcmlwdCByZXNvdXJjZS4KLSAgc3RkOjp1bmlxdWVfcHRyPExvYWRlcj4gQ3JlYXRlU2NyaXB0TG9hZGVyKAotICAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKLSAgICAgIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLAotICAgICAgY29uc3QgVGV4dERlY29kZXI6OlRleHRBdmFpbGFibGVDYWxsYmFjayYgc2NyaXB0X2F2YWlsYWJsZV9jYWxsYmFjaywKLSAgICAgIGNvbnN0IExvYWRlcjo6T25Db21wbGV0ZUZ1bmN0aW9uJiBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrKTsKLQogICAvLyBDcmVhdGVzIGEgbG9hZGVyIHRoYXQgZmV0Y2hlcyBhbmQgZGVjb2RlcyBhIHJlbmRlcl90cmVlOjpUeXBlZmFjZS4KICAgc3RkOjp1bmlxdWVfcHRyPExvYWRlcj4gQ3JlYXRlVHlwZWZhY2VMb2FkZXIoCiAgICAgICBjb25zdCBHVVJMJiB1cmwsIGNvbnN0IE9yaWdpbiYgb3JpZ2luLApAQCAtODUsOSArNzksMTAgQEAKICAgICAgICAgICB0eXBlZmFjZV9hdmFpbGFibGVfY2FsbGJhY2ssCiAgICAgICBjb25zdCBMb2FkZXI6Ok9uQ29tcGxldGVGdW5jdGlvbiYgbG9hZF9jb21wbGV0ZV9jYWxsYmFjayk7CiAKLSAgLy8gTm90aWZ5IHRoZSBMb2FkZXJGYWN0b3J5IHRoYXQgdGhlIHJlc291cmNlIGlkZW50aWZpZWQgYnkgInVybCIgaXMgYmVpbmcKLSAgLy8gcmVxdWVzdGVkIGFnYWluLgotICB2b2lkIE5vdGlmeVJlc291cmNlUmVxdWVzdGVkKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpOworICBMb2FkZXI6OkZldGNoZXJDcmVhdG9yIE1ha2VDYWNoZWRGZXRjaGVyQ3JlYXRvcigKKyAgICAgIGNvbnN0IEdVUkwmIHVybCwgY29uc3QgY3NwOjpTZWN1cml0eUNhbGxiYWNrJiB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssCisgICAgICBSZXF1ZXN0TW9kZSByZXF1ZXN0X21vZGUsIGNvbnN0IE9yaWdpbiYgb3JpZ2luLAorICAgICAgY29uc3QgZGlza19jYWNoZTo6UmVzb3VyY2VUeXBlIHR5cGUpOwogCiAgIC8vIENsZWFycyBvdXQgdGhlIGxvYWRlciBmYWN0b3J5J3MgcmVzb3VyY2UgcHJvdmlkZXIsIGFib3J0aW5nIGFueSBpbi1wcm9ncmVzcwogICAvLyBsb2Fkcy4KQEAgLTEwMiw0OSArOTcsMjQgQEAKICAgLy8gY2FsbGVkLgogICB2b2lkIFVwZGF0ZVJlc291cmNlUHJvdmlkZXIocmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIHJlc291cmNlX3Byb3ZpZGVyKTsKIAorICAvLyBOb3RpZnkgdGhlIExvYWRlckZhY3RvcnkgdGhhdCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllZCBieSAidXJsIiBpcyBiZWluZworICAvLyByZXF1ZXN0ZWQgYWdhaW4uCisgIHZvaWQgTm90aWZ5UmVzb3VyY2VSZXF1ZXN0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisKICBwcml2YXRlOgotICB2b2lkIE9uTG9hZGVyQ3JlYXRlZChMb2FkZXIqIGxvYWRlcik7Ci0gIHZvaWQgT25Mb2FkZXJEZXN0cm95ZWQoTG9hZGVyKiBsb2FkZXIpOwogICB2b2lkIFN1c3BlbmRBY3RpdmVMb2FkZXJzKCk7CiAgIHZvaWQgUmVzdW1lQWN0aXZlTG9hZGVycyhyZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIpOwogCi0gIExvYWRlcjo6RmV0Y2hlckNyZWF0b3IgTWFrZUZldGNoZXJDcmVhdG9yKAotICAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKLSAgICAgIFJlcXVlc3RNb2RlIHJlcXVlc3RfbW9kZSwgY29uc3QgT3JpZ2luJiBvcmlnaW4pOwotICBMb2FkZXI6OkZldGNoZXJDcmVhdG9yIE1ha2VDYWNoZWRGZXRjaGVyQ3JlYXRvcigKLSAgICAgIGNvbnN0IEdVUkwmIHVybCwgY29uc3QgY3NwOjpTZWN1cml0eUNhbGxiYWNrJiB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssCi0gICAgICBSZXF1ZXN0TW9kZSByZXF1ZXN0X21vZGUsIGNvbnN0IE9yaWdpbiYgb3JpZ2luKTsKLQotICAvLyBFbnN1cmVzIHRoYXQgdGhlIExvYWRlckZhY3RvcnkgbWV0aG9kcyBhcmUgb25seSBjYWxsZWQgZnJvbSB0aGUgc2FtZQotICAvLyB0aHJlYWQuCi0gIFRIUkVBRF9DSEVDS0VSKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgLy8gVXNlZCB0byBjcmVhdGUgdGhlIEZldGNoZXIgY29tcG9uZW50IG9mIHRoZSBsb2FkZXJzLgotICBGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5XzsKLQogICAvLyBVc2VkIHRvIGNhY2hlIHRoZSBmZXRjaGVkIHJhdyBkYXRhLiAgTm90ZSB0aGF0IGN1cnJlbnRseSB0aGUgY2FjaGUgaXMgb25seQogICAvLyB1c2VkIHRvIGNhY2hlIEltYWdlIGRhdGEuICBXZSBtYXkgaW50cm9kdWNlIG1vcmUgY2FjaGVzIG9uY2Ugd2Ugd2FudCB0bwogICAvLyBjYWNoZSBmZXRjaGVkIGRhdGEgZm9yIG90aGVyIHJlc291cmNlIHR5cGVzLgogICBzdGQ6OnVuaXF1ZV9wdHI8RmV0Y2hlckNhY2hlPiBmZXRjaGVyX2NhY2hlXzsKIAotICAvLyBVc2VkIHRvIGNyZWF0ZSByZW5kZXJfdHJlZSByZXNvdXJjZXMuCi0gIHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlcl87Ci0KICAgLy8gVXNlZCB3aXRoIENMT0cgdG8gcmVwb3J0IGVycm9ycyB3aXRoIHRoZSBpbWFnZSBzb3VyY2UuCiAgIGNvbnN0IGJhc2U6OkRlYnVnZ2VySG9va3MmIGRlYnVnZ2VyX2hvb2tzXzsKIAotICAvLyBLZWVwcyB0cmFjayBvZiBhbGwgYWN0aXZlIGxvYWRlcnMgc28gdGhhdCBpZiBhIHN1c3BlbmQgZXZlbnQgb2NjdXJzIHRoZXkKLSAgLy8gY2FuIGJlIGFib3J0ZWQuCi0gIHR5cGVkZWYgc3RkOjpzZXQ8TG9hZGVyKj4gTG9hZGVyU2V0OwotICBMb2FkZXJTZXQgYWN0aXZlX2xvYWRlcnNfOwotCi0gIC8vIFRocmVhZCB0byBydW4gYXN5bmNocm9ub3VzIGZldGNoZXJzIGFuZCBkZWNvZGVycyBvbi4gIEF0IHRoZSBtb21lbnQsCi0gIC8vIGltYWdlIGRlY29kaW5nIGlzIHRoZSBvbmx5IHRoaW5nIGRvbmUgb24gdGhpcyB0aHJlYWQuCi0gIGJhc2U6OlRocmVhZCBsb2FkX3RocmVhZF87Ci0KLSAgLy8gV2hldGhlciBvciBub3QgdGhlIExvYWRlckZhY3RvcnkgaXMgY3VycmVudGx5IHN1c3BlbmRlZC4gV2hpbGUgaXQgaXMsIGFsbAotICAvLyBsb2FkZXJzIGNyZWF0ZWQgYnkgaXQgYmVnaW4gaW4gYSBzdXNwZW5kZWQgc3RhdGUuCi0gIGJvb2wgaXNfc3VzcGVuZGVkXzsKKyAgLy8gVXNlZCB0byBjcmVhdGUgcmVuZGVyX3RyZWUgcmVzb3VyY2VzLgorICByZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXJfOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIGxvYWRlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9uZXRfZmV0Y2hlci5jYyBiL2NvYmFsdC9sb2FkZXIvbmV0X2ZldGNoZXIuY2MKaW5kZXggYzRhZGZlZi4uZDI5YzkwNiAxMDA2NDQKLS0tIGEvY29iYWx0L2xvYWRlci9uZXRfZmV0Y2hlci5jYworKysgYi9jb2JhbHQvbG9hZGVyL25ldF9mZXRjaGVyLmNjCkBAIC0xNiwxMiArMTYsMTQgQEAKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvY29yc19wcmVmbGlnaHQuaCIKICNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL3VybF9mZXRjaGVyX3N0cmluZ193cml0ZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5oIgorI2luY2x1ZGUgIm5ldC9iYXNlL21pbWVfdXRpbC5oIgogI2luY2x1ZGUgIm5ldC91cmxfcmVxdWVzdC91cmxfZmV0Y2hlci5oIgogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCkBAIC03MSw2ICs3MywxOSBAQAogICAvLyBtZWFuaW5nZnVsLCBsaWtlICJkYXRhOiIKICAgcmV0dXJuIHJlc3BvbnNlX2NvZGUgPT0gLTEgfHwgcmVzcG9uc2VfY29kZSAvIDEwMCA9PSAyOwogfQorCisvLyBSZXR1cm5zIHRydWUgaWYgfG1pbWVfdHlwZXwgaXMgYWxsb3dlZCBmb3Igc2NyaXB0LWxpa2UgZGVzdGluYXRpb25zLgorLy8gU2VlOgorLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtZGVzdGluYXRpb24tc2NyaXB0LWxpa2UKKy8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaG91bGQtcmVzcG9uc2UtdG8tcmVxdWVzdC1iZS1ibG9ja2VkLWR1ZS10by1taW1lLXR5cGU/Citib29sIEFsbG93TWltZVR5cGVBc1NjcmlwdChjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKSB7CisgIGlmIChuZXQ6Ok1hdGNoZXNNaW1lVHlwZSgiYXVkaW8vKiIsIG1pbWVfdHlwZSkpIHJldHVybiBmYWxzZTsKKyAgaWYgKG5ldDo6TWF0Y2hlc01pbWVUeXBlKCJpbWFnZS8qIiwgbWltZV90eXBlKSkgcmV0dXJuIGZhbHNlOworICBpZiAobmV0OjpNYXRjaGVzTWltZVR5cGUoInZpZGVvLyoiLCBtaW1lX3R5cGUpKSByZXR1cm4gZmFsc2U7CisgIGlmIChuZXQ6Ok1hdGNoZXNNaW1lVHlwZSgidGV4dC9jc3YiLCBtaW1lX3R5cGUpKSByZXR1cm4gZmFsc2U7CisgIHJldHVybiB0cnVlOworfQorCiB9ICAvLyBuYW1lc3BhY2UKIAogTmV0RmV0Y2hlcjo6TmV0RmV0Y2hlcihjb25zdCBHVVJMJiB1cmwsCkBAIC04NCw3ICs5OSw4IEBACiAgICAgICBBTExPV19USElTX0lOX0lOSVRJQUxJWkVSX0xJU1Qoc3RhcnRfY2FsbGJhY2tfKAogICAgICAgICAgIGJhc2U6OkJpbmQoJk5ldEZldGNoZXI6OlN0YXJ0LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpLAogICAgICAgcmVxdWVzdF9jcm9zc19vcmlnaW5fKGZhbHNlKSwKLSAgICAgIG9yaWdpbl8ob3JpZ2luKSB7CisgICAgICBvcmlnaW5fKG9yaWdpbiksCisgICAgICByZXF1ZXN0X3NjcmlwdF8ob3B0aW9ucy5yZXNvdXJjZV90eXBlID09IGRpc2tfY2FjaGU6OmtVbmNvbXBpbGVkU2NyaXB0KSB7CiAgIHVybF9mZXRjaGVyXyA9IG5ldDo6VVJMRmV0Y2hlcjo6Q3JlYXRlKHVybCwgb3B0aW9ucy5yZXF1ZXN0X21ldGhvZCwgdGhpcyk7CiAgIHVybF9mZXRjaGVyXy0+U2V0UmVxdWVzdENvbnRleHQoCiAgICAgICBuZXR3b3JrX21vZHVsZS0+dXJsX3JlcXVlc3RfY29udGV4dF9nZXR0ZXIoKS5nZXQoKSk7CkBAIC05Niw2ICsxMTIsMTAgQEAKICAgICByZXF1ZXN0X2Nyb3NzX29yaWdpbl8gPSB0cnVlOwogICAgIHVybF9mZXRjaGVyXy0+QWRkRXh0cmFSZXF1ZXN0SGVhZGVyKCJPcmlnaW46IiArIG9yaWdpbi5TZXJpYWxpemVkT3JpZ2luKCkpOwogICB9CisgIHN0ZDo6c3RyaW5nIGNvbnRlbnRfdHlwZSA9CisgICAgICBzdGQ6OnN0cmluZyhuZXQ6Okh0dHBSZXF1ZXN0SGVhZGVyczo6a1Jlc291cmNlVHlwZSkgKyAiOiIgKworICAgICAgc3RkOjp0b19zdHJpbmcob3B0aW9ucy5yZXNvdXJjZV90eXBlKTsKKyAgdXJsX2ZldGNoZXJfLT5BZGRFeHRyYVJlcXVlc3RIZWFkZXIoY29udGVudF90eXBlKTsKICAgaWYgKChyZXF1ZXN0X2Nyb3NzX29yaWdpbl8gJiYKICAgICAgICAocmVxdWVzdF9tb2RlID09IGtDT1JTTW9kZVNhbWVPcmlnaW5DcmVkZW50aWFscykpIHx8CiAgICAgICByZXF1ZXN0X21vZGUgPT0ga0NPUlNNb2RlT21pdENyZWRlbnRpYWxzKSB7CkBAIC0xMjgsNyArMTQ4LDcgQEAKIHZvaWQgTmV0RmV0Y2hlcjo6T25VUkxGZXRjaFJlc3BvbnNlU3RhcnRlZChjb25zdCBuZXQ6OlVSTEZldGNoZXIqIHNvdXJjZSkgewogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwogICBpZiAoc291cmNlLT5HZXRVUkwoKSAhPSBzb3VyY2UtPkdldE9yaWdpbmFsVVJMKCkpIHsKLSAgICAvLyBBIHJlZGlyZWN0IG9jY3VyZWQuIFJlLWNoZWNrIHRoZSBzZWN1cml0eSBwb2xpY3kuCisgICAgLy8gQSByZWRpcmVjdCBvY2N1cnJlZC4gUmUtY2hlY2sgdGhlIHNlY3VyaXR5IHBvbGljeS4KICAgICBpZiAoIXNlY3VyaXR5X2NhbGxiYWNrXy5pc19udWxsKCkgJiYKICAgICAgICAgIXNlY3VyaXR5X2NhbGxiYWNrXy5SdW4oc291cmNlLT5HZXRVUkwoKSwgdHJ1ZSAvKiBkaWQgcmVkaXJlY3QgKi8pKSB7CiAgICAgICBzdGQ6OnN0cmluZyBtc2coYmFzZTo6U3RyaW5nUHJpbnRmKApAQCAtMTYxLDYgKzE4MSwxOCBAQAogICAgIHJldHVybiBIYW5kbGVFcnJvcihtc2cpLkludmFsaWRhdGVUaGlzKCk7CiAgIH0KIAorICBpZiAocmVxdWVzdF9zY3JpcHRfICYmIHNvdXJjZS0+R2V0UmVzcG9uc2VIZWFkZXJzKCkpIHsKKyAgICBzdGQ6OnN0cmluZyBtaW1lX3R5cGU7CisgICAgaWYgKHNvdXJjZS0+R2V0UmVzcG9uc2VIZWFkZXJzKCktPkdldE1pbWVUeXBlKCZtaW1lX3R5cGUpICYmCisgICAgICAgICFBbGxvd01pbWVUeXBlQXNTY3JpcHQobWltZV90eXBlKSkgeworICAgICAgc3RkOjpzdHJpbmcgbXNnKGJhc2U6OlN0cmluZ1ByaW50ZigKKyAgICAgICAgICAiUmVmdXNlZCB0byBleGVjdXRlIHNjcmlwdCBmcm9tICclcycgYmVjYXVzZSBpdHMgTUlNRSB0eXBlICgnJXMnKSIKKyAgICAgICAgICAiIGlzIG5vdCBleGVjdXRhYmxlLiIsCisgICAgICAgICAgc291cmNlLT5HZXRVUkwoKS5zcGVjKCkuY19zdHIoKSwgbWltZV90eXBlLmNfc3RyKCkpKTsKKyAgICAgIHJldHVybiBIYW5kbGVFcnJvcihtc2cpLkludmFsaWRhdGVUaGlzKCk7CisgICAgfQorICB9CisKICAgbGFzdF91cmxfb3JpZ2luXyA9IE9yaWdpbihzb3VyY2UtPkdldFVSTCgpKTsKIH0KIApAQCAtMjI0LDggKzI1Niw3IEBACiAgIH0KIH0KIAotdm9pZCBOZXRGZXRjaGVyOjpSZXBvcnRMb2FkVGltaW5nSW5mbygKLSAgICBjb25zdCBuZXQ6OkxvYWRUaW1pbmdJbmZvJiB0aW1pbmdfaW5mbykgewordm9pZCBOZXRGZXRjaGVyOjpSZXBvcnRMb2FkVGltaW5nSW5mbyhjb25zdCBuZXQ6OkxvYWRUaW1pbmdJbmZvJiB0aW1pbmdfaW5mbykgewogICBoYW5kbGVyKCktPlNldExvYWRUaW1pbmdJbmZvKHRpbWluZ19pbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9uZXRfZmV0Y2hlci5oIGIvY29iYWx0L2xvYWRlci9uZXRfZmV0Y2hlci5oCmluZGV4IDkwOTMxNzMuLjRmZDFlODAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9sb2FkZXIvbmV0X2ZldGNoZXIuaAorKysgYi9jb2JhbHQvbG9hZGVyL25ldF9mZXRjaGVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvY3NwL2NvbnRlbnRfc2VjdXJpdHlfcG9saWN5LmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9mZXRjaGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKKyNpbmNsdWRlICJuZXQvZGlza19jYWNoZS9jb2JhbHQvcmVzb3VyY2VfdHlwZS5oIgogI2luY2x1ZGUgIm5ldC91cmxfcmVxdWVzdC91cmxfZmV0Y2hlci5oIgogI2luY2x1ZGUgIm5ldC91cmxfcmVxdWVzdC91cmxfZmV0Y2hlcl9kZWxlZ2F0ZS5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCkBAIC0zOCw4ICszOSwxMSBAQAogIHB1YmxpYzoKICAgc3RydWN0IE9wdGlvbnMgewogICAgcHVibGljOgotICAgIE9wdGlvbnMoKSA6IHJlcXVlc3RfbWV0aG9kKG5ldDo6VVJMRmV0Y2hlcjo6R0VUKSB7fQorICAgIE9wdGlvbnMoKQorICAgICAgICA6IHJlcXVlc3RfbWV0aG9kKG5ldDo6VVJMRmV0Y2hlcjo6R0VUKSwKKyAgICAgICAgICByZXNvdXJjZV90eXBlKGRpc2tfY2FjaGU6OmtPdGhlcikge30KICAgICBuZXQ6OlVSTEZldGNoZXI6OlJlcXVlc3RUeXBlIHJlcXVlc3RfbWV0aG9kOworICAgIGRpc2tfY2FjaGU6OlJlc291cmNlVHlwZSByZXNvdXJjZV90eXBlOwogICB9OwogCiAgIE5ldEZldGNoZXIoY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHNlY3VyaXR5X2NhbGxiYWNrLApAQCAtMTA3LDYgKzExMSw5IEBACiAgIC8vIHRyYW5zaWVudCwgaW5kaWNhdGluZyB0aGF0IHRoZSBzYW1lIGZldGNoIG1heSBsYXRlciBzdWNjZWVkLgogICBib29sIGRpZF9mYWlsX2Zyb21fdHJhbnNpZW50X2Vycm9yXyA9IGZhbHNlOwogCisgIC8vIFRydWUgd2hlbiB0aGUgcmVxdWVzdGVkIHJlc291cmNlIHR5cGUgaXMgc2NyaXB0LgorICBib29sIHJlcXVlc3Rfc2NyaXB0XzsKKwogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTmV0RmV0Y2hlcik7CiB9OwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL29yaWdpbi5neXAgYi9jb2JhbHQvbG9hZGVyL29yaWdpbi5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMDNlMTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L2xvYWRlci9vcmlnaW4uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ29yaWdpbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ29yaWdpbi5jYycsCi0gICAgICAgICdvcmlnaW4uaCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbG9hZGVyL3NjcmlwdF9sb2FkZXJfZmFjdG9yeS5jYyBiL2NvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvbG9hZGVyL3NjcmlwdF9sb2FkZXJfZmFjdG9yeS5jYwpAQCAtMCwwICsxLDkyIEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL3NjcmlwdF9sb2FkZXJfZmFjdG9yeS5oIgorCisjaW5jbHVkZSA8bWVtb3J5PgorCisjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvcGxhdGZvcm1fdGhyZWFkLmgiCisjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9pbWFnZS90aHJlYWRlZF9pbWFnZV9kZWNvZGVyX3Byb3h5LmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIGxvYWRlciB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoZSBSZXNvdXJjZUxvYWRlciB0aHJlYWQgdXNlcyB0aGUgZGVmYXVsdCBzdGFjayBzaXplLCB3aGljaCBpcyByZXF1ZXN0ZWQKKy8vIGJ5IHBhc3NpbmcgaW4gMCBmb3IgaXRzIHN0YWNrIHNpemUuCitjb25zdCBzaXplX3Qga0xvYWRUaHJlYWRTdGFja1NpemUgPSAwOworCit9ICAvLyBuYW1lc3BhY2UKKworU2NyaXB0TG9hZGVyRmFjdG9yeTo6U2NyaXB0TG9hZGVyRmFjdG9yeSgKKyAgICBjb25zdCBjaGFyKiBuYW1lLCBGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5LAorICAgIGJhc2U6OlRocmVhZFByaW9yaXR5IGxvYWRlcl90aHJlYWRfcHJpb3JpdHkpCisgICAgOiBmZXRjaGVyX2ZhY3RvcnlfKGZldGNoZXJfZmFjdG9yeSksCisgICAgICBsb2FkX3RocmVhZF8oIlJlc291cmNlTG9hZGVyIiksCisgICAgICBpc19zdXNwZW5kZWRfKGZhbHNlKSB7CisgIGJhc2U6OlRocmVhZDo6T3B0aW9ucyBvcHRpb25zKGJhc2U6Ok1lc3NhZ2VMb29wOjpUWVBFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMb2FkVGhyZWFkU3RhY2tTaXplKTsKKyAgb3B0aW9ucy5wcmlvcml0eSA9IGxvYWRlcl90aHJlYWRfcHJpb3JpdHk7CisgIGxvYWRfdGhyZWFkXy5TdGFydFdpdGhPcHRpb25zKG9wdGlvbnMpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBTY3JpcHRMb2FkZXJGYWN0b3J5OjpDcmVhdGVTY3JpcHRMb2FkZXIoCisgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBPcmlnaW4mIG9yaWdpbiwKKyAgICBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKKyAgICBjb25zdCBUZXh0RGVjb2Rlcjo6VGV4dEF2YWlsYWJsZUNhbGxiYWNrJiBzY3JpcHRfYXZhaWxhYmxlX2NhbGxiYWNrLAorICAgIGNvbnN0IExvYWRlcjo6T25Db21wbGV0ZUZ1bmN0aW9uJiBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrKSB7CisgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CisKKyAgTG9hZGVyOjpGZXRjaGVyQ3JlYXRvciBmZXRjaGVyX2NyZWF0b3IgPQorICAgICAgTWFrZUZldGNoZXJDcmVhdG9yKHVybCwgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLCBrTm9DT1JTTW9kZSwgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfY2FjaGU6OmtVbmNvbXBpbGVkU2NyaXB0KTsKKworICBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBsb2FkZXIobmV3IExvYWRlcigKKyAgICAgIGZldGNoZXJfY3JlYXRvciwKKyAgICAgIGJhc2U6OkJpbmQoJmxvYWRlcjo6VGV4dERlY29kZXI6OkNyZWF0ZSwgc2NyaXB0X2F2YWlsYWJsZV9jYWxsYmFjayksCisgICAgICBsb2FkX2NvbXBsZXRlX2NhbGxiYWNrLAorICAgICAgYmFzZTo6QmluZCgmU2NyaXB0TG9hZGVyRmFjdG9yeTo6T25Mb2FkZXJEZXN0cm95ZWQsCisgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAorICAgICAgaXNfc3VzcGVuZGVkXykpOworCisgIE9uTG9hZGVyQ3JlYXRlZChsb2FkZXIuZ2V0KCkpOworICByZXR1cm4gbG9hZGVyOworfQorCitMb2FkZXI6OkZldGNoZXJDcmVhdG9yIFNjcmlwdExvYWRlckZhY3Rvcnk6Ok1ha2VGZXRjaGVyQ3JlYXRvcigKKyAgICBjb25zdCBHVVJMJiB1cmwsIGNvbnN0IGNzcDo6U2VjdXJpdHlDYWxsYmFjayYgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLAorICAgIFJlcXVlc3RNb2RlIHJlcXVlc3RfbW9kZSwgY29uc3QgT3JpZ2luJiBvcmlnaW4sCisgICAgZGlza19jYWNoZTo6UmVzb3VyY2VUeXBlIHR5cGUpIHsKKyAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKKworICByZXR1cm4gYmFzZTo6QmluZCgmRmV0Y2hlckZhY3Rvcnk6OkNyZWF0ZVNlY3VyZUZldGNoZXIsCisgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQoZmV0Y2hlcl9mYWN0b3J5XyksIHVybCwKKyAgICAgICAgICAgICAgICAgICAgdXJsX3NlY3VyaXR5X2NhbGxiYWNrLCByZXF1ZXN0X21vZGUsIG9yaWdpbiwgdHlwZSk7Cit9CisKK3ZvaWQgU2NyaXB0TG9hZGVyRmFjdG9yeTo6T25Mb2FkZXJDcmVhdGVkKExvYWRlciogbG9hZGVyKSB7CisgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CisgIERDSEVDSyhhY3RpdmVfbG9hZGVyc18uZmluZChsb2FkZXIpID09IGFjdGl2ZV9sb2FkZXJzXy5lbmQoKSk7CisgIGFjdGl2ZV9sb2FkZXJzXy5pbnNlcnQobG9hZGVyKTsKK30KKwordm9pZCBTY3JpcHRMb2FkZXJGYWN0b3J5OjpPbkxvYWRlckRlc3Ryb3llZChMb2FkZXIqIGxvYWRlcikgeworICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOworICBEQ0hFQ0soYWN0aXZlX2xvYWRlcnNfLmZpbmQobG9hZGVyKSAhPSBhY3RpdmVfbG9hZGVyc18uZW5kKCkpOworICBhY3RpdmVfbG9hZGVyc18uZXJhc2UobG9hZGVyKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxvYWRlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L2xvYWRlci9zY3JpcHRfbG9hZGVyX2ZhY3RvcnkuaCBiL2NvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5N2YxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmgKQEAgLTAsMCArMSw4MyBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9MT0FERVJfU0NSSVBUX0xPQURFUl9GQUNUT1JZX0hfCisjZGVmaW5lIENPQkFMVF9MT0FERVJfU0NSSVBUX0xPQURFUl9GQUNUT1JZX0hfCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZC5oIgorI2luY2x1ZGUgImNvYmFsdC9iYXNlL2RlYnVnZ2VyX2hvb2tzLmgiCisjaW5jbHVkZSAiY29iYWx0L2NzcC9jb250ZW50X3NlY3VyaXR5X3BvbGljeS5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvZmV0Y2hlci5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvZmV0Y2hlcl9jYWNoZS5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvZmV0Y2hlcl9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9sb2FkZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL3RleHRfZGVjb2Rlci5oIgorI2luY2x1ZGUgInVybC9ndXJsLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIGxvYWRlciB7CisKKy8vIFRoZSBMb2FkZXJGYWN0b3J5IHByb3ZpZGVzIGEgY2VudHJhbCBsb2FkZXIgY3JlYXRvciBvYmplY3QgZnJvbSB3aGljaCBjbGllbnRzCisvLyBjYW4gcmVxdWVzdCB0aGUgY3JlYXRpb24gb2YgbG9hZGVycyBvZiB2YXJpb3VzIHR5cGVzLiAgVGhlIExvYWRlckZhY3RvcnkKKy8vIG1haW50YWlucyBhbGwgY29udGV4dCBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoZSB2YXJpb3VzIHJlc291cmNlIHR5cGVzLgorY2xhc3MgU2NyaXB0TG9hZGVyRmFjdG9yeSB7CisgcHVibGljOgorICBTY3JpcHRMb2FkZXJGYWN0b3J5KGNvbnN0IGNoYXIqIG5hbWUsIEZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGhyZWFkUHJpb3JpdHkgbG9hZGVyX3RocmVhZF9wcmlvcml0eSk7CisKKyAgLy8gQ3JlYXRlcyBhIGxvYWRlciB0aGF0IGZldGNoZXMgYW5kIGRlY29kZXMgYSBKYXZhc2NyaXB0IHJlc291cmNlLgorICBzdGQ6OnVuaXF1ZV9wdHI8TG9hZGVyPiBDcmVhdGVTY3JpcHRMb2FkZXIoCisgICAgICBjb25zdCBHVVJMJiB1cmwsIGNvbnN0IE9yaWdpbiYgb3JpZ2luLAorICAgICAgY29uc3QgY3NwOjpTZWN1cml0eUNhbGxiYWNrJiB1cmxfc2VjdXJpdHlfY2FsbGJhY2ssCisgICAgICBjb25zdCBUZXh0RGVjb2Rlcjo6VGV4dEF2YWlsYWJsZUNhbGxiYWNrJiBzY3JpcHRfYXZhaWxhYmxlX2NhbGxiYWNrLAorICAgICAgY29uc3QgTG9hZGVyOjpPbkNvbXBsZXRlRnVuY3Rpb24mIGxvYWRfY29tcGxldGVfY2FsbGJhY2spOworCisgcHJvdGVjdGVkOgorICB2b2lkIE9uTG9hZGVyQ3JlYXRlZChMb2FkZXIqIGxvYWRlcik7CisgIHZvaWQgT25Mb2FkZXJEZXN0cm95ZWQoTG9hZGVyKiBsb2FkZXIpOworCisgIExvYWRlcjo6RmV0Y2hlckNyZWF0b3IgTWFrZUZldGNoZXJDcmVhdG9yKAorICAgICAgY29uc3QgR1VSTCYgdXJsLCBjb25zdCBjc3A6OlNlY3VyaXR5Q2FsbGJhY2smIHVybF9zZWN1cml0eV9jYWxsYmFjaywKKyAgICAgIFJlcXVlc3RNb2RlIHJlcXVlc3RfbW9kZSwgY29uc3QgT3JpZ2luJiBvcmlnaW4sCisgICAgICBkaXNrX2NhY2hlOjpSZXNvdXJjZVR5cGUgdHlwZSA9IGRpc2tfY2FjaGU6OmtPdGhlcik7CisKKyAgLy8gRW5zdXJlcyB0aGF0IHRoZSBMb2FkZXJGYWN0b3J5IG1ldGhvZHMgYXJlIG9ubHkgY2FsbGVkIGZyb20gdGhlIHNhbWUKKyAgLy8gdGhyZWFkLgorICBUSFJFQURfQ0hFQ0tFUih0aHJlYWRfY2hlY2tlcl8pOworCisgIC8vIFVzZWQgdG8gY3JlYXRlIHRoZSBGZXRjaGVyIGNvbXBvbmVudCBvZiB0aGUgbG9hZGVycy4KKyAgRmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeV87CisKKyAgLy8gS2VlcHMgdHJhY2sgb2YgYWxsIGFjdGl2ZSBsb2FkZXJzIHNvIHRoYXQgaWYgYSBzdXNwZW5kIGV2ZW50IG9jY3VycyB0aGV5CisgIC8vIGNhbiBiZSBhYm9ydGVkLgorICB0eXBlZGVmIHN0ZDo6c2V0PExvYWRlcio+IExvYWRlclNldDsKKyAgTG9hZGVyU2V0IGFjdGl2ZV9sb2FkZXJzXzsKKworICAvLyBUaHJlYWQgdG8gcnVuIGFzeW5jaHJvbm91cyBmZXRjaGVycyBhbmQgZGVjb2RlcnMgb24uICBBdCB0aGUgbW9tZW50LAorICAvLyBpbWFnZSBkZWNvZGluZyBpcyB0aGUgb25seSB0aGluZyBkb25lIG9uIHRoaXMgdGhyZWFkLgorICBiYXNlOjpUaHJlYWQgbG9hZF90aHJlYWRfOworCisgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBMb2FkZXJGYWN0b3J5IGlzIGN1cnJlbnRseSBzdXNwZW5kZWQuIFdoaWxlIGl0IGlzLCBhbGwKKyAgLy8gbG9hZGVycyBjcmVhdGVkIGJ5IGl0IGJlZ2luIGluIGEgc3VzcGVuZGVkIHN0YXRlLgorICBib29sIGlzX3N1c3BlbmRlZF87Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbG9hZGVyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX0xPQURFUl9TQ1JJUFRfTE9BREVSX0ZBQ1RPUllfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tYXRoL0JVSUxELmduIGIvY29iYWx0L21hdGgvQlVJTEQuZ24KaW5kZXggNDhjMjk0My4uNTljNDQ5NCAxMDA2NDQKLS0tIGEvY29iYWx0L21hdGgvQlVJTEQuZ24KKysrIGIvY29iYWx0L21hdGgvQlVJTEQuZ24KQEAgLTEwMCw1ICsxMDAsNCBAQAogICAgICIvL2NvYmFsdC90ZXN0OnJ1bl9hbGxfdW5pdHRlc3RzIiwKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgXQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvbWF0aC9tYXRoLmd5cCBiL2NvYmFsdC9tYXRoL21hdGguZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDRlYzU3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tYXRoL21hdGguZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgIyBDb21waWxlcyBhbmQgdGVzdHMgbWF0aCBsaWJyYXJpZXMKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWF0aCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2JveF9mLmNjJywKLSAgICAgICAgJ2JveF9mLmgnLAotICAgICAgICAnY2xhbXAuaCcsCi0gICAgICAgICdjdWJpY19iZXppZXIuY2MnLAotICAgICAgICAnY3ViaWNfYmV6aWVyLmgnLAotICAgICAgICAnaW5zZXRzLmNjJywKLSAgICAgICAgJ2luc2V0cy5oJywKLSAgICAgICAgJ2luc2V0c19iYXNlLmgnLAotICAgICAgICAnaW5zZXRzX2YuY2MnLAotICAgICAgICAnaW5zZXRzX2YuaCcsCi0gICAgICAgICdsaW5lYXJfaW50ZXJwb2xhdG9yLmgnLAotICAgICAgICAnbWF0cml4M19mLmNjJywKLSAgICAgICAgJ21hdHJpeDNfZi5oJywKLSAgICAgICAgJ21hdHJpeF9pbnRlcnBvbGF0aW9uLmNjJywKLSAgICAgICAgJ21hdHJpeF9pbnRlcnBvbGF0aW9uLmgnLAotICAgICAgICAncG9pbnQuY2MnLAotICAgICAgICAncG9pbnQuaCcsCi0gICAgICAgICdwb2ludDNfZi5jYycsCi0gICAgICAgICdwb2ludDNfZi5oJywKLSAgICAgICAgJ3BvaW50X2Jhc2UuaCcsCi0gICAgICAgICdwb2ludF9jb252ZXJzaW9ucy5jYycsCi0gICAgICAgICdwb2ludF9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3BvaW50X2YuY2MnLAotICAgICAgICAncG9pbnRfZi5oJywKLSAgICAgICAgJ3F1YWRfZi5jYycsCi0gICAgICAgICdxdWFkX2YuaCcsCi0gICAgICAgICdyYXRpb25hbC5oJywKLSAgICAgICAgJ3JlY3QuY2MnLAotICAgICAgICAncmVjdC5oJywKLSAgICAgICAgJ3JlY3RfYmFzZS5oJywKLSAgICAgICAgJ3JlY3RfYmFzZV9pbXBsLmgnLAotICAgICAgICAncmVjdF9jb252ZXJzaW9ucy5jYycsCi0gICAgICAgICdyZWN0X2NvbnZlcnNpb25zLmgnLAotICAgICAgICAncmVjdF9mLmNjJywKLSAgICAgICAgJ3JlY3RfZi5oJywKLSAgICAgICAgJ3NhZmVfaW50ZWdlcl9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3NpemUuY2MnLAotICAgICAgICAnc2l6ZS5oJywKLSAgICAgICAgJ3NpemVfYmFzZS5oJywKLSAgICAgICAgJ3NpemVfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAnc2l6ZV9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3NpemVfZi5jYycsCi0gICAgICAgICdzaXplX2YuaCcsCi0gICAgICAgICd0cmFuc2Zvcm1fMmQuY2MnLAotICAgICAgICAndHJhbnNmb3JtXzJkLmgnLAotICAgICAgICAndmVjdG9yMmQuY2MnLAotICAgICAgICAndmVjdG9yMmQuaCcsCi0gICAgICAgICd2ZWN0b3IyZF9jb252ZXJzaW9ucy5jYycsCi0gICAgICAgICd2ZWN0b3IyZF9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3ZlY3RvcjJkX2YuY2MnLAotICAgICAgICAndmVjdG9yMmRfZi5oJywKLSAgICAgICAgJ3ZlY3RvcjNkX2YuY2MnLAotICAgICAgICAndmVjdG9yM2RfZi5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWF0aF90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYm94X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2N1YmljX2Jlemllcl91bml0dGVzdC5jYycsCi0gICAgICAgICdpbnNldHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbGluZWFyX2ludGVycG9sYXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdtYXRyaXgzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ21hdHJpeF9pbnRlcnBvbGF0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3BvaW50M191bml0dGVzdC5jYycsCi0gICAgICAgICdwb2ludF91bml0dGVzdC5jYycsCi0gICAgICAgICdxdWFkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3JlY3RfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2FmZV9pbnRlZ2VyX2NvbnZlcnNpb25zX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NpemVfdW5pdHRlc3QuY2MnLAotICAgICAgICAndHJhbnNmb3JtXzJkX3Rlc3QuY2MnLAotICAgICAgICAndmVjdG9yMmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAndmVjdG9yM2RfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdtYXRoJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWF0aF90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtYXRoX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbWF0aF90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tYXRoL3NpemUuaCBiL2NvYmFsdC9tYXRoL3NpemUuaAppbmRleCBhZTk3NzYzLi4xZjg5ZjJkIDEwMDY0NAotLS0gYS9jb2JhbHQvbWF0aC9zaXplLmgKKysrIGIvY29iYWx0L21hdGgvc2l6ZS5oCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGlvc2Z3ZD4KICNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlICJiYXNlL251bWVyaWNzL2NoZWNrZWRfbWF0aC5oIgogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemVfYmFzZS5oIgogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemVfZi5oIgogCkBAIC0yNyw2ICsyOCwxMiBAQAogCiAgIGludCBHZXRBcmVhKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKSAqIGhlaWdodCgpOyB9CiAKKyAgYmFzZTo6Q2hlY2tlZE51bWVyaWM8aW50PiBHZXRDaGVja2VkQXJlYSgpIGNvbnN0IHsKKyAgICBiYXNlOjpDaGVja2VkTnVtZXJpYzxpbnQ+IGNoZWNrZWRfYXJlYSA9IHdpZHRoKCk7CisgICAgY2hlY2tlZF9hcmVhICo9IGhlaWdodCgpOworICAgIHJldHVybiBjaGVja2VkX2FyZWE7CisgIH0KKwogICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL0JVSUxELmduIGIvY29iYWx0L21lZGlhL0JVSUxELmduCmluZGV4IDU0Mjg0NTEuLmJiMmQ0NmMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9CVUlMRC5nbgorKysgYi9jb2JhbHQvbWVkaWEvQlVJTEQuZ24KQEAgLTI4LDY0ICsyOCwxOCBAQAogICBzb3VyY2VzID0gWwogICAgICJiYXNlL2F1ZGlvX2J1cy5jYyIsCiAgICAgImJhc2UvYXVkaW9fYnVzLmgiLAotICAgICJiYXNlL2F1ZGlvX2NvZGVjcy5jYyIsCi0gICAgImJhc2UvYXVkaW9fY29kZWNzLmgiLAotICAgICJiYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmNjIiwKLSAgICAiYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIiwKLSAgICAiYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmNjIiwKLSAgICAiYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmgiLAotICAgICJiYXNlL2JpdF9yZWFkZXIuY2MiLAotICAgICJiYXNlL2JpdF9yZWFkZXIuaCIsCi0gICAgImJhc2UvYml0X3JlYWRlcl9jb3JlLmNjIiwKLSAgICAiYmFzZS9iaXRfcmVhZGVyX2NvcmUuaCIsCi0gICAgImJhc2UvYnl0ZV9xdWV1ZS5jYyIsCi0gICAgImJhc2UvYnl0ZV9xdWV1ZS5oIiwKLSAgICAiYmFzZS9jaGFubmVsX2xheW91dC5jYyIsCi0gICAgImJhc2UvY2hhbm5lbF9sYXlvdXQuaCIsCi0gICAgImJhc2UvY29sb3Jfc3BhY2UuY2MiLAotICAgICJiYXNlL2NvbG9yX3NwYWNlLmgiLAogICAgICJiYXNlL2RhdGFfc291cmNlLmNjIiwKICAgICAiYmFzZS9kYXRhX3NvdXJjZS5oIiwKLSAgICAiYmFzZS9kZWNvZGVyX2J1ZmZlci5jYyIsCi0gICAgImJhc2UvZGVjb2Rlcl9idWZmZXIuaCIsCiAgICAgImJhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuY2MiLAogICAgICJiYXNlL2RlY29kZXJfYnVmZmVyX2NhY2hlLmgiLAotICAgICJiYXNlL2RlY3J5cHRfY29uZmlnLmNjIiwKLSAgICAiYmFzZS9kZWNyeXB0X2NvbmZpZy5oIiwKLSAgICAiYmFzZS9kZW11eGVyLmNjIiwKLSAgICAiYmFzZS9kZW11eGVyLmgiLAotICAgICJiYXNlL2RlbXV4ZXJfc3RyZWFtLmNjIiwKLSAgICAiYmFzZS9kZW11eGVyX3N0cmVhbS5oIiwKLSAgICAiYmFzZS9kZW11eGVyX3N0cmVhbV9wcm92aWRlci5jYyIsCi0gICAgImJhc2UvZGVtdXhlcl9zdHJlYW1fcHJvdmlkZXIuaCIsCiAgICAgImJhc2UvZHJtX3N5c3RlbS5jYyIsCiAgICAgImJhc2UvZHJtX3N5c3RlbS5oIiwKLSAgICAiYmFzZS9lbmNyeXB0aW9uX3BhdHRlcm4uY2MiLAotICAgICJiYXNlL2VuY3J5cHRpb25fcGF0dGVybi5oIiwKLSAgICAiYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5jYyIsCi0gICAgImJhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIsCi0gICAgImJhc2UvaGRyX21ldGFkYXRhLmNjIiwKLSAgICAiYmFzZS9oZHJfbWV0YWRhdGEuaCIsCisgICAgImJhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5jYyIsCisgICAgImJhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5oIiwKICAgICAiYmFzZS9pbnRlcmxlYXZlZF9zaW5jX3Jlc2FtcGxlci5jYyIsCiAgICAgImJhc2UvaW50ZXJsZWF2ZWRfc2luY19yZXNhbXBsZXIuaCIsCi0gICAgImJhc2UvbWVkaWFfbG9nLmNjIiwKLSAgICAiYmFzZS9tZWRpYV9sb2cuaCIsCi0gICAgImJhc2UvbWVkaWFfdHJhY2suY2MiLAotICAgICJiYXNlL21lZGlhX3RyYWNrLmgiLAotICAgICJiYXNlL21lZGlhX3RyYWNrcy5jYyIsCi0gICAgImJhc2UvbWVkaWFfdHJhY2tzLmgiLAotICAgICJiYXNlL21lZGlhX3V0aWwuY2MiLAotICAgICJiYXNlL21lZGlhX3V0aWwuaCIsCi0gICAgImJhc2UvbWltZV91dGlsLmNjIiwKLSAgICAiYmFzZS9taW1lX3V0aWwuaCIsCi0gICAgImJhc2UvbWltZV91dGlsX2ludGVybmFsLmNjIiwKLSAgICAiYmFzZS9taW1lX3V0aWxfaW50ZXJuYWwuaCIsCiAgICAgImJhc2UvcGxheWJhY2tfc3RhdGlzdGljcy5jYyIsCiAgICAgImJhc2UvcGxheWJhY2tfc3RhdGlzdGljcy5oIiwKLSAgICAiYmFzZS9yYW5nZXMuY2MiLAotICAgICJiYXNlL3Jhbmdlcy5oIiwKLSAgICAiYmFzZS9zYW1wbGVfZm9ybWF0LmNjIiwKLSAgICAiYmFzZS9zYW1wbGVfZm9ybWF0LmgiLAogICAgICJiYXNlL3NicGxheWVyX3BpcGVsaW5lLmNjIiwKICAgICAiYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5jYyIsCiAgICAgImJhc2Uvc2JwbGF5ZXJfc2V0X2JvdW5kc19oZWxwZXIuaCIsCkBAIC05MywxMTAgKzQ3LDEyIEBACiAgICAgImJhc2Uvc3RhcmJvYXJkX3BsYXllci5oIiwKICAgICAiYmFzZS9zdGFyYm9hcmRfdXRpbHMuY2MiLAogICAgICJiYXNlL3N0YXJib2FyZF91dGlscy5oIiwKLSAgICAiYmFzZS9zdHJlYW1fcGFyc2VyLmNjIiwKLSAgICAiYmFzZS9zdHJlYW1fcGFyc2VyLmgiLAotICAgICJiYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmNjIiwKLSAgICAiYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIiwKLSAgICAiYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5jYyIsCi0gICAgImJhc2UvdGV4dF90cmFja19jb25maWcuaCIsCi0gICAgImJhc2UvdmlkZW9fY29kZWNzLmNjIiwKLSAgICAiYmFzZS92aWRlb19jb2RlY3MuaCIsCi0gICAgImJhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuY2MiLAotICAgICJiYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiLAogICAgICJiYXNlL3ZpZGVvX2ZyYW1lX3Byb3ZpZGVyLmgiLAotICAgICJiYXNlL3ZpZGVvX3V0aWwuY2MiLAotICAgICJiYXNlL3ZpZGVvX3V0aWwuaCIsCiAgICAgImRlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYyIsCiAgICAgImRlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5oIiwKICAgICAiZGVjb2Rlcl9idWZmZXJfbWVtb3J5X2luZm8uaCIsCiAgICAgImZldGNoZXJfYnVmZmVyZWRfZGF0YV9zb3VyY2UuY2MiLAogICAgICJmZXRjaGVyX2J1ZmZlcmVkX2RhdGFfc291cmNlLmgiLAotICAgICJmaWx0ZXJzL2NodW5rX2RlbXV4ZXIuY2MiLAotICAgICJmaWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIsCi0gICAgImZpbHRlcnMvZnJhbWVfcHJvY2Vzc29yLmNjIiwKLSAgICAiZmlsdGVycy9mcmFtZV9wcm9jZXNzb3IuaCIsCi0gICAgImZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmNjIiwKLSAgICAiZmlsdGVycy9oMjY0X2JpdF9yZWFkZXIuaCIsCi0gICAgImZpbHRlcnMvaDI2NF9iaXRzdHJlYW1fYnVmZmVyLmNjIiwKLSAgICAiZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuaCIsCi0gICAgImZpbHRlcnMvaDI2NF9wYXJzZXIuY2MiLAotICAgICJmaWx0ZXJzL2gyNjRfcGFyc2VyLmgiLAotICAgICJmaWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmNjIiwKLSAgICAiZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlci5oIiwKLSAgICAiZmlsdGVycy9oMjY1X3BhcnNlci5jYyIsCi0gICAgImZpbHRlcnMvaDI2NV9wYXJzZXIuaCIsCi0gICAgImZpbHRlcnMvc291cmNlX2J1ZmZlcl9yYW5nZS5jYyIsCi0gICAgImZpbHRlcnMvc291cmNlX2J1ZmZlcl9yYW5nZS5oIiwKLSAgICAiZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmNjIiwKLSAgICAiZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmgiLAotICAgICJmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjIiwKLSAgICAiZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oIiwKLSAgICAiZmlsdGVycy9zdHJlYW1fcGFyc2VyX2ZhY3RvcnkuY2MiLAotICAgICJmaWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5oIiwKLSAgICAiZm9ybWF0cy9jb21tb24vb2Zmc2V0X2J5dGVfcXVldWUuY2MiLAotICAgICJmb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIiwKLSAgICAiZm9ybWF0cy9tcDQvYWFjLmNjIiwKLSAgICAiZm9ybWF0cy9tcDQvYWFjLmgiLAotICAgICJmb3JtYXRzL21wNC9hdmMuY2MiLAotICAgICJmb3JtYXRzL21wNC9hdmMuaCIsCi0gICAgImZvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MiLAotICAgICJmb3JtYXRzL21wNC9iaXRzdHJlYW1fY29udmVydGVyLmgiLAotICAgICJmb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuY2MiLAotICAgICJmb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCIsCi0gICAgImZvcm1hdHMvbXA0L2JveF9yZWFkZXIuY2MiLAotICAgICJmb3JtYXRzL21wNC9ib3hfcmVhZGVyLmgiLAotICAgICJmb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmNjIiwKLSAgICAiZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5oIiwKLSAgICAiZm9ybWF0cy9tcDQvZm91cmNjcy5oIiwKLSAgICAiZm9ybWF0cy9tcDQvaGV2Yy5jYyIsCi0gICAgImZvcm1hdHMvbXA0L2hldmMuaCIsCi0gICAgImZvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyLmNjIiwKLSAgICAiZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaCIsCi0gICAgImZvcm1hdHMvbXA0L3JjaGVjay5oIiwKLSAgICAiZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmNjIiwKLSAgICAiZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmgiLAotICAgICJmb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3IuY2MiLAotICAgICJmb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3IuaCIsCi0gICAgImZvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5jYyIsCi0gICAgImZvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5oIiwKLSAgICAiZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5jYyIsCi0gICAgImZvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXIuaCIsCi0gICAgImZvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmNjIiwKLSAgICAiZm9ybWF0cy9tcGVnL21wZWcxX2F1ZGlvX3N0cmVhbV9wYXJzZXIuaCIsCi0gICAgImZvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5jYyIsCi0gICAgImZvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5oIiwKLSAgICAiZm9ybWF0cy93ZWJtL2NsdXN0ZXJfYnVpbGRlci5jYyIsCi0gICAgImZvcm1hdHMvd2VibS9jbHVzdGVyX2J1aWxkZXIuaCIsCi0gICAgImZvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL29wdXNfcGFja2V0X2J1aWxkZXIuaCIsCi0gICAgImZvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5jYyIsCi0gICAgImZvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5oIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fYXVkaW9fY2xpZW50LmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fYXVkaW9fY2xpZW50LmgiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5jYyIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5oIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5jYyIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmgiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuY2MiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuaCIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzLmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnMuaCIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX2luZm9fcGFyc2VyLmNjIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuaCIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5jYyIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5oIiwKLSAgICAiZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5jYyIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaCIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuY2MiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmgiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV92aWRlb19jbGllbnQuY2MiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV92aWRlb19jbGllbnQuaCIsCi0gICAgImZvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXIuY2MiLAotICAgICJmb3JtYXRzL3dlYm0vd2VibV93ZWJ2dHRfcGFyc2VyLmgiLAogICAgICJtZWRpYV9tb2R1bGUuY2MiLAogICAgICJtZWRpYV9tb2R1bGUuaCIsCiAgICAgInBsYXllci9idWZmZXJlZF9kYXRhX3NvdXJjZS5oIiwKQEAgLTI0Miw2ICs5OCw3IEBACiAgICAgIi8vbmIiLAogICAgICIvL25ldCIsCiAgICAgIi8vc3RhcmJvYXJkIiwKKyAgICAiLy90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYSIsCiAgICAgIi8vdGhpcmRfcGFydHkvcHJvdG9idWY6cHJvdG9idWZfbGl0ZSIsCiAgICAgIi8vdXJsIiwKICAgXQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL09XTkVSUyBiL2NvYmFsdC9tZWRpYS9PV05FUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMzI5YTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL09XTkVSUworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMgTk9URTogRG8gbm90IHVzZSB0aGVzZSBvd25lcnMgd2hlbiB5b3UncmUgaW4gYSBzdWJkaXJlY3RvcnkgdGhhdCBoYXMKLSMgT1dORVJTIGZpbGUuIEZvciBleGFtcGxlOgotIyAtIGNhc3QKLSMgLSBtaWRpCi0jIC0gb3pvbmUKLSMgLSBjYXB0dXJlL3tjb250ZW50LHZpZGVvfQotIyBJbnN0ZWFkIHByZWZlciB0aGUgT1dORVJTIGluIHRoZSBzdWJkaXJlY3RvcnkgYXMgdGhleSB3aWxsIGJlIG1vcmUgZmFtaWxpYXIsCi0jIGFuZCB0byBsb2FkIGJhbGFuY2UuIE9ubHkgdXNlIE9XTkVSUyBpbiB0aGlzIGZpbGUgZm9yIHRoZXNlIHN1YmRpcmVjdG9yaWVzCi0jIHdoZW4gZG9pbmcgcmVmYWN0b3JpbmdzIGFuZCBnZW5lcmFsIGNsZWFudXBzLgotCi1jaGN1bm5pbmdoYW1AY2hyb21pdW0ub3JnCi1kYWxlY3VydGlzQGNocm9taXVtLm9yZwotZGRvcndpbkBjaHJvbWl1bS5vcmcKLWh1YmJlQGNocm9taXVtLm9yZwotanJ1bW1lbGxAY2hyb21pdW0ub3JnCi1saWJlcmF0b0BjaHJvbWl1bS5vcmcKLXNhbmRlcnNkQGNocm9taXVtLm9yZwotd2F0a0BjaHJvbWl1bS5vcmcKLXdvbGVuZXR6QGNocm9taXVtLm9yZwoteGh3YW5nQGNocm9taXVtLm9yZwotCi1wZXItZmlsZSAqLmlzb2xhdGU9bWFydWVsQGNocm9taXVtLm9yZwotcGVyLWZpbGUgKi5pc29sYXRlPXRhbmRyaWlAY2hyb21pdW0ub3JnCi1wZXItZmlsZSAqLmlzb2xhdGU9dmFkaW1zaEBjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2NvZGVjcy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2NvZGVjcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM2NDI1My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfdXRpbC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFRoZXNlIG5hbWVzIGNvbWUgZnJvbSBzcmMvdGhpcmRfcGFydHkvZmZtcGVnL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCi1zdGQ6OnN0cmluZyBHZXRDb2RlY05hbWUoQXVkaW9Db2RlYyBjb2RlYykgewotICBzd2l0Y2ggKGNvZGVjKSB7Ci0gICAgY2FzZSBrVW5rbm93bkF1ZGlvQ29kZWM6Ci0gICAgICByZXR1cm4gInVua25vd24iOwotICAgIGNhc2Uga0NvZGVjQUFDOgotICAgICAgcmV0dXJuICJhYWMiOwotICAgIGNhc2Uga0NvZGVjTVAzOgotICAgICAgcmV0dXJuICJtcDMiOwotICAgIGNhc2Uga0NvZGVjUENNOgotICAgIGNhc2Uga0NvZGVjUENNX1MxNkJFOgotICAgIGNhc2Uga0NvZGVjUENNX1MyNEJFOgotICAgICAgcmV0dXJuICJwY20iOwotICAgIGNhc2Uga0NvZGVjVm9yYmlzOgotICAgICAgcmV0dXJuICJ2b3JiaXMiOwotICAgIGNhc2Uga0NvZGVjRkxBQzoKLSAgICAgIHJldHVybiAiZmxhYyI7Ci0gICAgY2FzZSBrQ29kZWNBTVJfTkI6Ci0gICAgICByZXR1cm4gImFtcl9uYiI7Ci0gICAgY2FzZSBrQ29kZWNBTVJfV0I6Ci0gICAgICByZXR1cm4gImFtcl93YiI7Ci0gICAgY2FzZSBrQ29kZWNQQ01fTVVMQVc6Ci0gICAgICByZXR1cm4gInBjbV9tdWxhdyI7Ci0gICAgY2FzZSBrQ29kZWNHU01fTVM6Ci0gICAgICByZXR1cm4gImdzbV9tcyI7Ci0gICAgY2FzZSBrQ29kZWNPcHVzOgotICAgICAgcmV0dXJuICJvcHVzIjsKLSAgICBjYXNlIGtDb2RlY1BDTV9BTEFXOgotICAgICAgcmV0dXJuICJwY21fYWxhdyI7Ci0gICAgY2FzZSBrQ29kZWNFQUMzOgotICAgICAgcmV0dXJuICJlYWMzIjsKLSAgICBjYXNlIGtDb2RlY0FMQUM6Ci0gICAgICByZXR1cm4gImFsYWMiOwotICAgIGNhc2Uga0NvZGVjQUMzOgotICAgICAgcmV0dXJuICJhYzMiOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuICIiOwotfQotCi1BdWRpb0NvZGVjIFN0cmluZ1RvQXVkaW9Db2RlYyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQpIHsKLSAgaWYgKGNvZGVjX2lkID09ICJhYWMiKSByZXR1cm4ga0NvZGVjQUFDOwotICBpZiAoY29kZWNfaWQgPT0gImFjLTMiIHx8IGNvZGVjX2lkID09ICJtcDRhLkE1IikgcmV0dXJuIGtDb2RlY0FDMzsKLSAgaWYgKGNvZGVjX2lkID09ICJlYy0zIiB8fCBjb2RlY19pZCA9PSAibXA0YS5BNiIpIHJldHVybiBrQ29kZWNFQUMzOwotICBpZiAoY29kZWNfaWQgPT0gIm1wMyIpIHJldHVybiBrQ29kZWNNUDM7Ci0gIGlmIChjb2RlY19pZCA9PSAiYWxhYyIpIHJldHVybiBrQ29kZWNBTEFDOwotICBpZiAoY29kZWNfaWQgPT0gImZsYWMiKSByZXR1cm4ga0NvZGVjRkxBQzsKLSAgaWYgKGNvZGVjX2lkID09ICJvcHVzIikgcmV0dXJuIGtDb2RlY09wdXM7Ci0gIGlmIChjb2RlY19pZCA9PSAidm9yYmlzIikgcmV0dXJuIGtDb2RlY1ZvcmJpczsKLSAgaWYgKFN0YXJ0c1dpdGgoY29kZWNfaWQsICJtcDRhLjQwLiIsIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKQotICAgIHJldHVybiBrQ29kZWNBQUM7Ci0gIHJldHVybiBrVW5rbm93bkF1ZGlvQ29kZWM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fY29kZWNzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhkNjY3OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9BVURJT19DT0RFQ1NfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fQ09ERUNTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1lbnVtIEF1ZGlvQ29kZWMgewotICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGhpc3RvZ3JhbW1lZCBvdmVyIHRpbWU7IGRvIG5vdCBjaGFuZ2UgdGhlaXIgb3JkaW5hbAotICAvLyB2YWx1ZXMuICBXaGVuIGRlbGV0aW5nIGEgY29kZWMgcmVwbGFjZSBpdCB3aXRoIGEgZHVtbXkgdmFsdWU7IHdoZW4gYWRkaW5nIGEKLSAgLy8gY29kZWMsIGRvIHNvIGF0IHRoZSBib3R0b20gYmVmb3JlIGtBdWRpb0NvZGVjTWF4LCBhbmQgdXBkYXRlIHRoZSB2YWx1ZSBvZgotICAvLyBrQXVkaW9Db2RlY01heCB0byBlcXVhbCB0aGUgbmV3IGNvZGVjLgotICBrVW5rbm93bkF1ZGlvQ29kZWMgPSAwLAotICBrQ29kZWNBQUMgPSAxLAotICBrQ29kZWNNUDMgPSAyLAotICBrQ29kZWNQQ00gPSAzLAotICBrQ29kZWNWb3JiaXMgPSA0LAotICBrQ29kZWNGTEFDID0gNSwKLSAga0NvZGVjQU1SX05CID0gNiwKLSAga0NvZGVjQU1SX1dCID0gNywKLSAga0NvZGVjUENNX01VTEFXID0gOCwKLSAga0NvZGVjR1NNX01TID0gOSwKLSAga0NvZGVjUENNX1MxNkJFID0gMTAsCi0gIGtDb2RlY1BDTV9TMjRCRSA9IDExLAotICBrQ29kZWNPcHVzID0gMTIsCi0gIGtDb2RlY0VBQzMgPSAxMywKLSAga0NvZGVjUENNX0FMQVcgPSAxNCwKLSAga0NvZGVjQUxBQyA9IDE1LAotICBrQ29kZWNBQzMgPSAxNiwKLSAgLy8gRE8gTk9UIEFERCBSQU5ET00gQVVESU8gQ09ERUNTIQotICAvLwotICAvLyBUaGUgb25seSBhY2NlcHRhYmxlIHRpbWUgdG8gYWRkIGEgbmV3IGNvZGVjIGlzIGlmIHRoZXJlIGlzIHByb2R1Y3Rpb24gY29kZQotICAvLyB0aGF0IHVzZXMgc2FpZCBjb2RlYyBpbiB0aGUgc2FtZSBDTC4KLQotICAvLyBNdXN0IGFsd2F5cyBiZSBlcXVhbCB0byB0aGUgbGFyZ2VzdCBlbnRyeSBldmVyIGxvZ2dlZC4KLSAga0F1ZGlvQ29kZWNNYXggPSBrQ29kZWNBQzMsCi19OwotCi1zdGQ6OnN0cmluZyBNRURJQV9FWFBPUlQgR2V0Q29kZWNOYW1lKEF1ZGlvQ29kZWMgY29kZWMpOwotCi1NRURJQV9FWFBPUlQgQXVkaW9Db2RlYyBTdHJpbmdUb0F1ZGlvQ29kZWMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fQ09ERUNTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTNlOGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9BVURJT19ERUNPREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0FVRElPX0RFQ09ERVJfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvY2hhbm5lbF9sYXlvdXQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBBdWRpb0J1ZmZlcjsKLWNsYXNzIENkbUNvbnRleHQ7Ci1jbGFzcyBEZW11eGVyU3RyZWFtOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgQXVkaW9EZWNvZGVyIHsKLSBwdWJsaWM6Ci0gIC8vIENhbGxiYWNrIGZvciBWaWRlb0RlY29kZXIgaW5pdGlhbGl6YXRpb24uCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChib29sIHN1Y2Nlc3MpPiBJbml0Q0I7Ci0KLSAgLy8gQ2FsbGJhY2sgZm9yIEF1ZGlvRGVjb2RlciB0byByZXR1cm4gYSBkZWNvZGVkIGZyYW1lIHdoZW5ldmVyIGl0IGJlY29tZXMKLSAgLy8gYXZhaWxhYmxlLiBPbmx5IG5vbi1FT1MgZnJhbWVzIHNob3VsZCBiZSByZXR1cm5lZCB2aWEgdGhpcyBjYWxsYmFjay4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+Jik+IE91dHB1dENCOwotCi0gIC8vIENhbGxiYWNrIGZvciBEZWNvZGUoKS4gQ2FsbGVkIGFmdGVyIHRoZSBkZWNvZGVyIGhhcyBhY2NlcHRlZCBjb3JyZXNwb25kaW5nCi0gIC8vIERlY29kZXJCdWZmZXIsIGluZGljYXRpbmcgdGhhdCB0aGUgcGlwZWxpbmUgY2FuIHNlbmQgbmV4dCBidWZmZXIgdG8gZGVjb2RlLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoRGVjb2RlU3RhdHVzKT4gRGVjb2RlQ0I7Ci0KLSAgQXVkaW9EZWNvZGVyKCk7Ci0KLSAgLy8gRmlyZXMgYW55IHBlbmRpbmcgY2FsbGJhY2tzLCBzdG9wcyBhbmQgZGVzdHJveXMgdGhlIGRlY29kZXIuCi0gIC8vIE5vdGU6IFNpbmNlIHRoaXMgaXMgYSBkZXN0cnVjdG9yLCB8dGhpc3wgd2lsbCBiZSBkZXN0cm95ZWQgYWZ0ZXIgdGhpcyBjYWxsLgotICAvLyBNYWtlIHN1cmUgdGhlIGNhbGxiYWNrcyBmaXJlZCBmcm9tIHRoaXMgY2FsbCBkb2Vzbid0IHBvc3QgYW55IHRhc2sgdGhhdAotICAvLyBkZXBlbmRzIG9uIHx0aGlzfC4KLSAgdmlydHVhbCB+QXVkaW9EZWNvZGVyKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZGVjb2RlciBmb3IgbG9nZ2luZyBwdXJwb3NlLgotICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldERpc3BsYXlOYW1lKCkgY29uc3QgPSAwOwotCi0gIC8vIEluaXRpYWxpemVzIGFuIEF1ZGlvRGVjb2RlciB3aXRoIHxjb25maWd8LCBleGVjdXRpbmcgdGhlIHxpbml0X2NifCB1cG9uCi0gIC8vIGNvbXBsZXRpb24uCi0gIC8vCi0gIC8vIHxjZG1fY29udGV4dHwgY2FuIGJlIHVzZWQgdG8gaGFuZGxlIGVuY3J5cHRlZCBidWZmZXJzLiBNYXkgYmUgbnVsbCBpZiB0aGUKLSAgLy8gc3RyZWFtIGlzIG5vdCBlbmNyeXB0ZWQuCi0gIC8vIHxpbml0X2NifCBpcyB1c2VkIHRvIHJldHVybiBpbml0aWFsaXphdGlvbiBzdGF0dXMuCi0gIC8vIHxvdXRwdXRfY2J8IGlzIGNhbGxlZCBmb3IgZGVjb2RlZCBhdWRpbyBidWZmZXJzIChzZWUgRGVjb2RlKCkpLgotICB2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZShjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ2RtQ29udGV4dCogY2RtX2NvbnRleHQsIGNvbnN0IEluaXRDQiYgaW5pdF9jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3V0cHV0Q0ImIG91dHB1dF9jYikgPSAwOwotCi0gIC8vIFJlcXVlc3RzIHNhbXBsZXMgdG8gYmUgZGVjb2RlZC4gT25seSBvbmUgZGVjb2RlIG1heSBiZSBpbiBmbGlnaHQgYXQgYW55Ci0gIC8vIGdpdmVuIHRpbWUuIE9uY2UgdGhlIGJ1ZmZlciBpcyBkZWNvZGVkIHRoZSBkZWNvZGVyIGNhbGxzIHxkZWNvZGVfY2J8LgotICAvLyB8b3V0cHV0X2NifCBzcGVjaWZpZWQgaW4gSW5pdGlhbGl6ZSgpIGlzIGNhbGxlZCBmb3IgZWFjaCBkZWNvZGVkIGJ1ZmZlciwKLSAgLy8gYmVmb3JlIG9yIGFmdGVyIHxkZWNvZGVfY2J8LgotICAvLwotICAvLyBJbXBsZW1lbnRhdGlvbnMgZ3VhcmFudGVlIHRoYXQgdGhlIGNhbGxiYWNrcyB3aWxsIG5vdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KLSAgLy8gdGhpcyBtZXRob2QuCi0gIC8vCi0gIC8vIElmIHxidWZmZXJ8IGlzIGFuIEVPUyBidWZmZXIgdGhlbiB0aGUgZGVjb2RlciBtdXN0IGJlIGZsdXNoZWQsIGkuZS4KLSAgLy8gfG91dHB1dF9jYnwgbXVzdCBiZSBjYWxsZWQgZm9yIGVhY2ggZnJhbWUgcGVuZGluZyBpbiB0aGUgcXVldWUgYW5kCi0gIC8vIHxkZWNvZGVfY2J8IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoYXQuCi0gIHZpcnR1YWwgdm9pZCBEZWNvZGUoY29uc3Qgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiYgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlY29kZUNCJiBkZWNvZGVfY2IpID0gMDsKLQotICAvLyBSZXNldHMgZGVjb2RlciBzdGF0ZS4gQWxsIHBlbmRpbmcgRGVjb2RlKCkgcmVxdWVzdHMgd2lsbCBiZSBmaW5pc2hlZCBvcgotICAvLyBhYm9ydGVkIGJlZm9yZSB8Y2xvc3VyZXwgaXMgY2FsbGVkLgotICB2aXJ0dWFsIHZvaWQgUmVzZXQoY29uc3QgYmFzZTo6Q2xvc3VyZSYgY2xvc3VyZSkgPSAwOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGVjb2RlciBuZWVkcyBiaXRzdHJlYW0gY29udmVyc2lvbiBiZWZvcmUgZGVjb2RpbmcuCi0gIHZpcnR1YWwgYm9vbCBOZWVkc0JpdHN0cmVhbUNvbnZlcnNpb24oKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihBdWRpb0RlY29kZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fREVDT0RFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwMGJjYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbGltaXRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotQXVkaW9EZWNvZGVyQ29uZmlnOjpBdWRpb0RlY29kZXJDb25maWcoKQotICAgIDogY29kZWNfKGtVbmtub3duQXVkaW9Db2RlYyksCi0gICAgICBzYW1wbGVfZm9ybWF0XyhrVW5rbm93blNhbXBsZUZvcm1hdCksCi0gICAgICBieXRlc19wZXJfY2hhbm5lbF8oMCksCi0gICAgICBjaGFubmVsX2xheW91dF8oQ0hBTk5FTF9MQVlPVVRfVU5TVVBQT1JURUQpLAotICAgICAgc2FtcGxlc19wZXJfc2Vjb25kXygwKSwKLSAgICAgIGJ5dGVzX3Blcl9mcmFtZV8oMCksCi0gICAgICBjb2RlY19kZWxheV8oMCkge30KLQotQXVkaW9EZWNvZGVyQ29uZmlnOjpBdWRpb0RlY29kZXJDb25maWcoCi0gICAgQXVkaW9Db2RlYyBjb2RlYywgU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQsIENoYW5uZWxMYXlvdXQgY2hhbm5lbF9sYXlvdXQsCi0gICAgaW50IHNhbXBsZXNfcGVyX3NlY29uZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGV4dHJhX2RhdGEsCi0gICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUpIHsKLSAgSW5pdGlhbGl6ZShjb2RlYywgc2FtcGxlX2Zvcm1hdCwgY2hhbm5lbF9sYXlvdXQsIHNhbXBsZXNfcGVyX3NlY29uZCwKLSAgICAgICAgICAgICBleHRyYV9kYXRhLCBlbmNyeXB0aW9uX3NjaGVtZSwgYmFzZTo6VGltZURlbHRhKCksIDApOwotfQotCi12b2lkIEF1ZGlvRGVjb2RlckNvbmZpZzo6SW5pdGlhbGl6ZSgKLSAgICBBdWRpb0NvZGVjIGNvZGVjLCBTYW1wbGVGb3JtYXQgc2FtcGxlX2Zvcm1hdCwgQ2hhbm5lbExheW91dCBjaGFubmVsX2xheW91dCwKLSAgICBpbnQgc2FtcGxlc19wZXJfc2Vjb25kLCBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgZXh0cmFfZGF0YSwKLSAgICBjb25zdCBFbmNyeXB0aW9uU2NoZW1lJiBlbmNyeXB0aW9uX3NjaGVtZSwgYmFzZTo6VGltZURlbHRhIHNlZWtfcHJlcm9sbCwKLSAgICBpbnQgY29kZWNfZGVsYXkpIHsKLSAgY29kZWNfID0gY29kZWM7Ci0gIGNoYW5uZWxfbGF5b3V0XyA9IGNoYW5uZWxfbGF5b3V0OwotICBzYW1wbGVzX3Blcl9zZWNvbmRfID0gc2FtcGxlc19wZXJfc2Vjb25kOwotICBzYW1wbGVfZm9ybWF0XyA9IHNhbXBsZV9mb3JtYXQ7Ci0gIGJ5dGVzX3Blcl9jaGFubmVsXyA9IFNhbXBsZUZvcm1hdFRvQnl0ZXNQZXJDaGFubmVsKHNhbXBsZV9mb3JtYXQpOwotICBleHRyYV9kYXRhXyA9IGV4dHJhX2RhdGE7Ci0gIGVuY3J5cHRpb25fc2NoZW1lXyA9IGVuY3J5cHRpb25fc2NoZW1lOwotICBzZWVrX3ByZXJvbGxfID0gc2Vla19wcmVyb2xsOwotICBjb2RlY19kZWxheV8gPSBjb2RlY19kZWxheTsKLQotICBpbnQgY2hhbm5lbHMgPSBDaGFubmVsTGF5b3V0VG9DaGFubmVsQ291bnQoY2hhbm5lbF9sYXlvdXRfKTsKLSAgYnl0ZXNfcGVyX2ZyYW1lXyA9IGNoYW5uZWxzICogYnl0ZXNfcGVyX2NoYW5uZWxfOwotfQotCi1BdWRpb0RlY29kZXJDb25maWc6On5BdWRpb0RlY29kZXJDb25maWcoKSB7fQotCi1ib29sIEF1ZGlvRGVjb2RlckNvbmZpZzo6SXNWYWxpZENvbmZpZygpIGNvbnN0IHsKLSAgcmV0dXJuIGNvZGVjXyAhPSBrVW5rbm93bkF1ZGlvQ29kZWMgJiYKLSAgICAgICAgIGNoYW5uZWxfbGF5b3V0XyAhPSBDSEFOTkVMX0xBWU9VVF9VTlNVUFBPUlRFRCAmJgotICAgICAgICAgYnl0ZXNfcGVyX2NoYW5uZWxfID4gMCAmJgotICAgICAgICAgYnl0ZXNfcGVyX2NoYW5uZWxfIDw9IGxpbWl0czo6a01heEJ5dGVzUGVyU2FtcGxlICYmCi0gICAgICAgICBzYW1wbGVzX3Blcl9zZWNvbmRfID4gMCAmJgotICAgICAgICAgc2FtcGxlc19wZXJfc2Vjb25kXyA8PSBsaW1pdHM6OmtNYXhTYW1wbGVSYXRlICYmCi0gICAgICAgICBzYW1wbGVfZm9ybWF0XyAhPSBrVW5rbm93blNhbXBsZUZvcm1hdCAmJgotICAgICAgICAgc2Vla19wcmVyb2xsXyA+PSBiYXNlOjpUaW1lRGVsdGEoKSAmJiBjb2RlY19kZWxheV8gPj0gMDsKLX0KLQotYm9vbCBBdWRpb0RlY29kZXJDb25maWc6Ok1hdGNoZXMoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIGNvbnN0IHsKLSAgcmV0dXJuICgoY29kZWMoKSA9PSBjb25maWcuY29kZWMoKSkgJiYKLSAgICAgICAgICAoYnl0ZXNfcGVyX2NoYW5uZWwoKSA9PSBjb25maWcuYnl0ZXNfcGVyX2NoYW5uZWwoKSkgJiYKLSAgICAgICAgICAoY2hhbm5lbF9sYXlvdXQoKSA9PSBjb25maWcuY2hhbm5lbF9sYXlvdXQoKSkgJiYKLSAgICAgICAgICAoc2FtcGxlc19wZXJfc2Vjb25kKCkgPT0gY29uZmlnLnNhbXBsZXNfcGVyX3NlY29uZCgpKSAmJgotICAgICAgICAgIChleHRyYV9kYXRhKCkgPT0gY29uZmlnLmV4dHJhX2RhdGEoKSkgJiYKLSAgICAgICAgICAoZW5jcnlwdGlvbl9zY2hlbWUoKS5NYXRjaGVzKGNvbmZpZy5lbmNyeXB0aW9uX3NjaGVtZSgpKSkgJiYKLSAgICAgICAgICAoc2FtcGxlX2Zvcm1hdCgpID09IGNvbmZpZy5zYW1wbGVfZm9ybWF0KCkpICYmCi0gICAgICAgICAgKHNlZWtfcHJlcm9sbCgpID09IGNvbmZpZy5zZWVrX3ByZXJvbGwoKSkgJiYKLSAgICAgICAgICAoY29kZWNfZGVsYXkoKSA9PSBjb25maWcuY29kZWNfZGVsYXkoKSkpOwotfQotCi1zdGQ6OnN0cmluZyBBdWRpb0RlY29kZXJDb25maWc6OkFzSHVtYW5SZWFkYWJsZVN0cmluZygpIGNvbnN0IHsKLSAgc3RkOjpvc3RyaW5nc3RyZWFtIHM7Ci0gIHMgPDwgImNvZGVjOiAiIDw8IEdldENvZGVjTmFtZShjb2RlYygpKQotICAgIDw8ICIgYnl0ZXNfcGVyX2NoYW5uZWw6ICIgPDwgYnl0ZXNfcGVyX2NoYW5uZWwoKQotICAgIDw8ICIgY2hhbm5lbF9sYXlvdXQ6ICIgPDwgY2hhbm5lbF9sYXlvdXQoKQotICAgIDw8ICIgc2FtcGxlc19wZXJfc2Vjb25kOiAiIDw8IHNhbXBsZXNfcGVyX3NlY29uZCgpCi0gICAgPDwgIiBzYW1wbGVfZm9ybWF0OiAiIDw8IHNhbXBsZV9mb3JtYXQoKQotICAgIDw8ICIgYnl0ZXNfcGVyX2ZyYW1lOiAiIDw8IGJ5dGVzX3Blcl9mcmFtZSgpCi0gICAgPDwgIiBzZWVrX3ByZXJvbGw6ICIgPDwgc2Vla19wcmVyb2xsKCkuSW5NaWxsaXNlY29uZHMoKSA8PCAibXMiCi0gICAgPDwgIiBjb2RlY19kZWxheTogIiA8PCBjb2RlY19kZWxheSgpIDw8ICIgaGFzIGV4dHJhIGRhdGE/ICIKLSAgICA8PCAoZXh0cmFfZGF0YSgpLmVtcHR5KCkgPyAiZmFsc2UiIDogInRydWUiKSA8PCAiIGVuY3J5cHRlZD8gIgotICAgIDw8IChpc19lbmNyeXB0ZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotICByZXR1cm4gcy5zdHIoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxNTg3OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fREVDT0RFUl9DT05GSUdfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fREVDT0RFUl9DT05GSUdfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2NvZGVjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zYW1wbGVfZm9ybWF0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVE9ETyhkYWxlY3VydGlzKTogRkZtcGVnIEFQSSB1c2VzIHxieXRlc19wZXJfY2hhbm5lbHwgaW5zdGVhZCBvZgotLy8gfGJpdHNfcGVyX2NoYW5uZWx8LCB3ZSBzaG91bGQgc3dpdGNoIG92ZXIgc2luY2UgYml0cyBhcmUgZ2VuZXJhbGx5IGNvbmZ1c2luZwotLy8gdG8gd29yayB3aXRoLgotY2xhc3MgTUVESUFfRVhQT1JUIEF1ZGlvRGVjb2RlckNvbmZpZyB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3RzIGFuIHVuaW5pdGlhbGl6ZWQgb2JqZWN0LiBDbGllbnRzIHNob3VsZCBjYWxsIEluaXRpYWxpemUoKSB3aXRoCi0gIC8vIGFwcHJvcHJpYXRlIHZhbHVlcyBiZWZvcmUgdXNpbmcuCi0gIEF1ZGlvRGVjb2RlckNvbmZpZygpOwotCi0gIC8vIENvbnN0cnVjdHMgYW4gaW5pdGlhbGl6ZWQgb2JqZWN0LgotICBBdWRpb0RlY29kZXJDb25maWcoQXVkaW9Db2RlYyBjb2RlYywgU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LCBpbnQgc2FtcGxlc19wZXJfc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGV4dHJhX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBFbmNyeXB0aW9uU2NoZW1lJiBlbmNyeXB0aW9uX3NjaGVtZSk7Ci0KLSAgfkF1ZGlvRGVjb2RlckNvbmZpZygpOwotCi0gIC8vIFJlc2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhpcyBvYmplY3QuIHxjb2RlY19kZWxheXwgaXMgaW4gZnJhbWVzLgotICB2b2lkIEluaXRpYWxpemUoQXVkaW9Db2RlYyBjb2RlYywgU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQsCi0gICAgICAgICAgICAgICAgICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LCBpbnQgc2FtcGxlc19wZXJfc2Vjb25kLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGV4dHJhX2RhdGEsCi0gICAgICAgICAgICAgICAgICBjb25zdCBFbmNyeXB0aW9uU2NoZW1lJiBlbmNyeXB0aW9uX3NjaGVtZSwKLSAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3ByZXJvbGwsIGludCBjb2RlY19kZWxheSk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgb2JqZWN0IGhhcyBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIHZhbHVlcywgZmFsc2UKLSAgLy8gb3RoZXJ3aXNlLgotICBib29sIElzVmFsaWRDb25maWcoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGZpZWxkcyBpbiB8Y29uZmlnfCBtYXRjaCB0aGlzIGNvbmZpZy4KLSAgLy8gTm90ZTogVGhlIGNvbnRlbnRzIG9mIHxleHRyYV9kYXRhX3wgYXJlIGNvbXBhcmVkIG5vdCB0aGUgcmF3IHBvaW50ZXJzLgotICBib29sIE1hdGNoZXMoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZGVzY3JpYmluZyB8KnRoaXN8LiAgRm9yIGRlYnVnZ2luZyAmIHRlc3QKLSAgLy8gb3V0cHV0IG9ubHkuCi0gIHN0ZDo6c3RyaW5nIEFzSHVtYW5SZWFkYWJsZVN0cmluZygpIGNvbnN0OwotCi0gIEF1ZGlvQ29kZWMgY29kZWMoKSBjb25zdCB7IHJldHVybiBjb2RlY187IH0KLSAgaW50IGJpdHNfcGVyX2NoYW5uZWwoKSBjb25zdCB7IHJldHVybiBieXRlc19wZXJfY2hhbm5lbF8gKiA4OyB9Ci0gIGludCBieXRlc19wZXJfY2hhbm5lbCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVzX3Blcl9jaGFubmVsXzsgfQotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gY2hhbm5lbF9sYXlvdXRfOyB9Ci0gIGludCBzYW1wbGVzX3Blcl9zZWNvbmQoKSBjb25zdCB7IHJldHVybiBzYW1wbGVzX3Blcl9zZWNvbmRfOyB9Ci0gIFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gc2FtcGxlX2Zvcm1hdF87IH0KLSAgaW50IGJ5dGVzX3Blcl9mcmFtZSgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVzX3Blcl9mcmFtZV87IH0KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfcHJlcm9sbCgpIGNvbnN0IHsgcmV0dXJuIHNlZWtfcHJlcm9sbF87IH0KLSAgaW50IGNvZGVjX2RlbGF5KCkgY29uc3QgeyByZXR1cm4gY29kZWNfZGVsYXlfOyB9Ci0KLSAgLy8gT3B0aW9uYWwgYnl0ZSBkYXRhIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgYXVkaW8gZGVjb2RlcnMgc3VjaCBhcyBWb3JiaXMKLSAgLy8gY29kZWJvb2tzLgotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgZXh0cmFfZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGV4dHJhX2RhdGFfOyB9Ci0KLSAgLy8gV2hldGhlciB0aGUgYXVkaW8gc3RyZWFtIGlzIHBvdGVudGlhbGx5IGVuY3J5cHRlZC4KLSAgLy8gTm90ZSB0aGF0IGluIGEgcG90ZW50aWFsbHkgZW5jcnlwdGVkIGF1ZGlvIHN0cmVhbSwgaW5kaXZpZHVhbCBidWZmZXJzCi0gIC8vIGNhbiBiZSBlbmNyeXB0ZWQgb3Igbm90IGVuY3J5cHRlZC4KLSAgYm9vbCBpc19lbmNyeXB0ZWQoKSBjb25zdCB7IHJldHVybiBlbmNyeXB0aW9uX3NjaGVtZV8uaXNfZW5jcnlwdGVkKCk7IH0KLQotICAvLyBFbmNyeXB0aW9uIHNjaGVtZSB1c2VkIGZvciBlbmNyeXB0ZWQgYnVmZmVycy4KLSAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGVuY3J5cHRpb25fc2NoZW1lXzsKLSAgfQotCi0gIHZvaWQgc2V0X21pbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUpIHsgbWltZV8gPSBtaW1lOyB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lKCkgY29uc3QgeyByZXR1cm4gbWltZV87IH0KLQotIHByaXZhdGU6Ci0gIEF1ZGlvQ29kZWMgY29kZWNfOwotICBTYW1wbGVGb3JtYXQgc2FtcGxlX2Zvcm1hdF87Ci0gIGludCBieXRlc19wZXJfY2hhbm5lbF87Ci0gIENoYW5uZWxMYXlvdXQgY2hhbm5lbF9sYXlvdXRfOwotICBpbnQgc2FtcGxlc19wZXJfc2Vjb25kXzsKLSAgaW50IGJ5dGVzX3Blcl9mcmFtZV87Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGV4dHJhX2RhdGFfOwotICBFbmNyeXB0aW9uU2NoZW1lIGVuY3J5cHRpb25fc2NoZW1lXzsKLQotICAvLyB8c2Vla19wcmVyb2xsX3wgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBkYXRhIHRoYXQgdGhlIGRlY29kZXIgbXVzdCBkZWNvZGUKLSAgLy8gYmVmb3JlIHRoZSBkZWNvZGVkIGRhdGEgaXMgdmFsaWQuCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3ByZXJvbGxfOwotCi0gIC8vIHxjb2RlY19kZWxheV98IGlzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoZSBkZWNvZGVyIHNob3VsZCBkaXNjYXJkIGJlZm9yZQotICAvLyByZXR1cm5pbmcgZGVjb2RlZCBkYXRhLiAgVGhpcyB2YWx1ZSBjYW4gaW5jbHVkZSBib3RoIGRlY29kZXIgZGVsYXkgYXMgd2VsbAotICAvLyBhcyBwYWRkaW5nIGFkZGVkIGR1cmluZyBlbmNvZGluZy4KLSAgaW50IGNvZGVjX2RlbGF5XzsKLQotICAvLyB8bWltZV98IGNvbnRhaW5zIHRoZSBtaW1lIHR5cGUgc3RyaW5nIHNwZWNpZmllZCB3aGVuIGNyZWF0aW5nIHRoZSBzdHJlYW0uCi0gIC8vIEZvciBleGFtcGxlLCB3aGVuIHRoZSBzdHJlYW0gaXMgY3JlYXRlZCB2aWEgTWVkaWFTb3VyY2UsIGl0IGlzIHRoZSBtaW1lCi0gIC8vIHN0cmluZyBwYXNzZWQgdG8gYWRkU291cmNlQnVmZmVyKCkuICBJdCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlCi0gIC8vIGFwcHJvcHJpYXRlIG1pbWUgc3RyaW5nIGlzIHVua25vd24uICBJdCBpcyBwcm92aWRlZCBhcyBhbiBleHRyYSBpbmZvcm1hdGlvbgotICAvLyBhbmQgY2FuIGJlIGluY29uc2lzdGVudCB3aXRoIHRoZSBvdGhlciBtZW1iZXIgdmFyaWFibGVzLgotICBzdGQ6OnN0cmluZyBtaW1lXzsKLQotICAvLyBOb3QgdXNpbmcgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOIGhlcmUgaW50ZW50aW9uYWxseSB0byBhbGxvdyB0aGUgY29tcGlsZXIKLSAgLy8gZ2VuZXJhdGVkIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IuIFNpbmNlIHRoZSBleHRyYSBkYXRhIGlzCi0gIC8vIHR5cGljYWxseSBzbWFsbCwgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBpcyBtaW5pbWFsLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fREVDT0RFUl9DT05GSUdfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2Rpc2NhcmRfaGVscGVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMmQ0MzEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2J1ZmZlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyB2b2lkIFdhcm5Pbk5vbk1vbm90b25pY1RpbWVzdGFtcHMoYmFzZTo6VGltZURlbHRhIGxhc3RfdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgY3VycmVudF90aW1lc3RhbXApIHsKLSAgaWYgKGxhc3RfdGltZXN0YW1wID09IGtOb1RpbWVzdGFtcCB8fCBsYXN0X3RpbWVzdGFtcCA8IGN1cnJlbnRfdGltZXN0YW1wKQotICAgIHJldHVybjsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgZGlmZiA9IGN1cnJlbnRfdGltZXN0YW1wIC0gbGFzdF90aW1lc3RhbXA7Ci0gIERMT0coV0FSTklORykgPDwgIklucHV0IHRpbWVzdGFtcHMgYXJlIG5vdCBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmchICIKLSAgICAgICAgICAgICAgICA8PCAiIHRzICIgPDwgY3VycmVudF90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKSA8PCAiIHVzIgotICAgICAgICAgICAgICAgIDw8ICIgZGlmZiAiIDw8IGRpZmYuSW5NaWNyb3NlY29uZHMoKSA8PCAiIHVzIjsKLX0KLQotQXVkaW9EaXNjYXJkSGVscGVyOjpBdWRpb0Rpc2NhcmRIZWxwZXIoaW50IHNhbXBsZV9yYXRlLCBzaXplX3QgZGVjb2Rlcl9kZWxheSkKLSAgICA6IHNhbXBsZV9yYXRlXyhzYW1wbGVfcmF0ZSksCi0gICAgICBkZWNvZGVyX2RlbGF5XyhkZWNvZGVyX2RlbGF5KSwKLSAgICAgIHRpbWVzdGFtcF9oZWxwZXJfKHNhbXBsZV9yYXRlXyksCi0gICAgICBkaXNjYXJkX2ZyYW1lc18oMCksCi0gICAgICBsYXN0X2lucHV0X3RpbWVzdGFtcF8oa05vVGltZXN0YW1wKSwKLSAgICAgIGRlbGF5ZWRfZGlzY2FyZF8oZmFsc2UpLAotICAgICAgZGVsYXllZF9lbmRfZGlzY2FyZF8oMCkgewotICBEQ0hFQ0tfR1Qoc2FtcGxlX3JhdGVfLCAwKTsKLX0KLQotQXVkaW9EaXNjYXJkSGVscGVyOjp+QXVkaW9EaXNjYXJkSGVscGVyKCkge30KLQotc2l6ZV90IEF1ZGlvRGlzY2FyZEhlbHBlcjo6VGltZURlbHRhVG9GcmFtZXMoYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSBjb25zdCB7Ci0gIERDSEVDSyhkdXJhdGlvbiA+PSBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIHJldHVybiBkdXJhdGlvbi5JblNlY29uZHNGKCkgKiBzYW1wbGVfcmF0ZV8gKyAwLjU7Ci19Ci0KLXZvaWQgQXVkaW9EaXNjYXJkSGVscGVyOjpSZXNldChzaXplX3QgaW5pdGlhbF9kaXNjYXJkKSB7Ci0gIGRpc2NhcmRfZnJhbWVzXyA9IGluaXRpYWxfZGlzY2FyZDsKLSAgbGFzdF9pbnB1dF90aW1lc3RhbXBfID0ga05vVGltZXN0YW1wOwotICB0aW1lc3RhbXBfaGVscGVyXy5TZXRCYXNlVGltZXN0YW1wKGtOb1RpbWVzdGFtcCk7Ci0gIGRlbGF5ZWRfZGlzY2FyZF8gPSBmYWxzZTsKLSAgZGVsYXllZF9kaXNjYXJkX3BhZGRpbmdfID0gRGVjb2RlckJ1ZmZlcjo6RGlzY2FyZFBhZGRpbmcoKTsKLX0KLQotYm9vbCBBdWRpb0Rpc2NhcmRIZWxwZXI6OlByb2Nlc3NCdWZmZXJzKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGVuY29kZWRfYnVmZmVyLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+JiBkZWNvZGVkX2J1ZmZlcikgewotICBEQ0hFQ0soIWVuY29kZWRfYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotICBEQ0hFQ0soZW5jb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpICE9IGtOb1RpbWVzdGFtcCk7Ci0KLSAgLy8gSXNzdWUgYSBkZWJ1ZyB3YXJuaW5nIHdoZW4gd2Ugc2VlIG5vbi1tb25vdG9uaWMgdGltZXN0YW1wcy4gIE9ubHkgYSB3YXJuaW5nCi0gIC8vIHRvIGFsbG93IGNoYWluZWQgT0dHIHBsYXliYWNrLgotICBXYXJuT25Ob25Nb25vdG9uaWNUaW1lc3RhbXBzKGxhc3RfaW5wdXRfdGltZXN0YW1wXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCkpOwotICBsYXN0X2lucHV0X3RpbWVzdGFtcF8gPSBlbmNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCk7Ci0KLSAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYnVmZmVyIHNlZW4sIHNldHVwIHRoZSB0aW1lc3RhbXAgaGVscGVyLgotICBjb25zdCBib29sIGZpcnN0X2J1ZmZlciA9ICFpbml0aWFsaXplZCgpOwotICBpZiAoZmlyc3RfYnVmZmVyKSB7Ci0gICAgLy8gQ2xhbXAgdGhlIGJhc2UgdGltZXN0YW1wIHRvIHplcm8uCi0gICAgdGltZXN0YW1wX2hlbHBlcl8uU2V0QmFzZVRpbWVzdGFtcCgKLSAgICAgICAgc3RkOjptYXgoYmFzZTo6VGltZURlbHRhKCksIGVuY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSkpOwotICB9Ci0gIERDSEVDSyhpbml0aWFsaXplZCgpKTsKLQotICBpZiAoIWRlY29kZWRfYnVmZmVyLmdldCgpKSB7Ci0gICAgLy8gSWYgdGhlcmUncyBhIG9uZSBidWZmZXIgZGVsYXkgZm9yIGRlY29kaW5nLCB3ZSBuZWVkIHRvIHNhdmUgaXQgc28gaXQgY2FuCi0gICAgLy8gYmUgcHJvY2Vzc2VkIHdpdGggdGhlIG5leHQgZGVjb2RlciBidWZmZXIuCi0gICAgaWYgKGZpcnN0X2J1ZmZlcikgewotICAgICAgZGVsYXllZF9kaXNjYXJkXyA9IHRydWU7Ci0gICAgICBkZWxheWVkX2Rpc2NhcmRfcGFkZGluZ18gPSBlbmNvZGVkX2J1ZmZlci0+ZGlzY2FyZF9wYWRkaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGNvbnN0IHNpemVfdCBvcmlnaW5hbF9mcmFtZV9jb3VudCA9IGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpOwotCi0gIC8vIElmIHRoZXJlJ3MgYSBvbmUgYnVmZmVyIGRlbGF5IGZvciBkZWNvZGluZywgcGljayB1cCB0aGUgbGFzdCBlbmNvZGVkCi0gIC8vIGJ1ZmZlcidzIGRpc2NhcmQgcGFkZGluZyBmb3IgcHJvY2Vzc2luZyB3aXRoIHRoZSBjdXJyZW50IGRlY29kZWQgYnVmZmVyLgotICBEZWNvZGVyQnVmZmVyOjpEaXNjYXJkUGFkZGluZyBjdXJyZW50X2Rpc2NhcmRfcGFkZGluZyA9Ci0gICAgICBlbmNvZGVkX2J1ZmZlci0+ZGlzY2FyZF9wYWRkaW5nKCk7Ci0gIGlmIChkZWxheWVkX2Rpc2NhcmRfKSB7Ci0gICAgLy8gRm9yIHNpbXBsaWNpdHkgZGlzYWxsb3cgY2FzZXMgd2hlcmUgZGVjb2RlciBkZWxheSBpcyBwcmVzZW50IHdpdGggZGVsYXllZAotICAgIC8vIGRpc2NhcmQgKG5vIGNvZGVjcyBhdCBwcmVzZW50KS4gIERvaW5nIHNvIGFsbG93cyB1cyB0byBhdm9pZCBjb21wbGV4aXR5Ci0gICAgLy8gYXJvdW5kIGVuZHBvaW50IHRyYWNraW5nIHdoZW4gaGFuZGxpbmcgY29tcGxldGUgYnVmZmVyIGRpc2NhcmRzLgotICAgIERDSEVDS19FUShkZWNvZGVyX2RlbGF5XywgMHUpOwotICAgIHN0ZDo6c3dhcChjdXJyZW50X2Rpc2NhcmRfcGFkZGluZywgZGVsYXllZF9kaXNjYXJkX3BhZGRpbmdfKTsKLSAgfQotCi0gIGlmIChkaXNjYXJkX2ZyYW1lc18gPiAwKSB7Ci0gICAgY29uc3Qgc2l6ZV90IGRlY29kZWRfZnJhbWVzID0gZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCk7Ci0gICAgY29uc3Qgc2l6ZV90IGZyYW1lc190b19kaXNjYXJkID0gc3RkOjptaW4oZGlzY2FyZF9mcmFtZXNfLCBkZWNvZGVkX2ZyYW1lcyk7Ci0gICAgZGlzY2FyZF9mcmFtZXNfIC09IGZyYW1lc190b19kaXNjYXJkOwotCi0gICAgRFZMT0coMSkgPDwgIkluaXRpYWwgZGlzY2FyZCBvZiAiIDw8IGZyYW1lc190b19kaXNjYXJkIDw8ICIgb3V0IG9mICIKLSAgICAgICAgICAgICA8PCBkZWNvZGVkX2ZyYW1lcyA8PCAiIGZyYW1lcy4iOwotCi0gICAgLy8gSWYgZXZlcnl0aGluZyB3b3VsZCBiZSBkaXNjYXJkZWQsIGluZGljYXRlIGEgbmV3IGJ1ZmZlciBpcyByZXF1aXJlZC4KLSAgICBpZiAoZnJhbWVzX3RvX2Rpc2NhcmQgPT0gZGVjb2RlZF9mcmFtZXMpIHsKLSAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSBqdXN0IGRyb3AgYW55IGRpc2NhcmQgcGFkZGluZyBpZiB8ZGlzY2FyZF9mcmFtZXNffAotICAgICAgLy8gY29uc3VtZXMgdGhlIGVudGlyZSBidWZmZXIuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZGVjb2RlZF9idWZmZXItPlRyaW1TdGFydChmcmFtZXNfdG9fZGlzY2FyZCk7Ci0gIH0KLQotICAvLyBQcm9jZXNzIGFueSBkZWxheWVkIGVuZCBkaXNjYXJkIGZyb20gdGhlIHByZXZpb3VzIGJ1ZmZlci4KLSAgaWYgKGRlbGF5ZWRfZW5kX2Rpc2NhcmRfID4gMCkgewotICAgIERDSEVDS19HVChkZWNvZGVyX2RlbGF5XywgMHUpOwotCi0gICAgY29uc3Qgc2l6ZV90IGRpc2NhcmRfaW5kZXggPSBkZWNvZGVyX2RlbGF5XyAtIGRlbGF5ZWRfZW5kX2Rpc2NhcmRfOwotICAgIERDSEVDS19MVChkaXNjYXJkX2luZGV4LCBkZWNvZGVyX2RlbGF5Xyk7Ci0KLSAgICBjb25zdCBzaXplX3QgZGVjb2RlZF9mcmFtZXMgPSBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKTsKLSAgICBEQ0hFQ0tfTFQoZGVsYXllZF9lbmRfZGlzY2FyZF8sIGRlY29kZWRfZnJhbWVzKTsKLQotICAgIERWTE9HKDEpIDw8ICJEZWxheWVkIGVuZCBkaXNjYXJkIG9mICIgPDwgZGVsYXllZF9lbmRfZGlzY2FyZF8gPDwgIiBvdXQgb2YgIgotICAgICAgICAgICAgIDw8IGRlY29kZWRfZnJhbWVzIDw8ICIgZnJhbWVzIHN0YXJ0aW5nIGF0ICIgPDwgZGlzY2FyZF9pbmRleDsKLQotICAgIGRlY29kZWRfYnVmZmVyLT5UcmltUmFuZ2UoZGlzY2FyZF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NhcmRfaW5kZXggKyBkZWxheWVkX2VuZF9kaXNjYXJkXyk7Ci0gICAgZGVsYXllZF9lbmRfZGlzY2FyZF8gPSAwOwotICB9Ci0KLSAgLy8gSGFuZGxlIGZyb250IGRpc2NhcmQgcGFkZGluZy4KLSAgaWYgKGN1cnJlbnRfZGlzY2FyZF9wYWRkaW5nLmZpcnN0ID4gYmFzZTo6VGltZURlbHRhKCkpIHsKLSAgICBjb25zdCBzaXplX3QgZGVjb2RlZF9mcmFtZXMgPSBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKTsKLQotICAgIC8vIElmIGEgY29tcGxldGUgYnVmZmVyIGRpc2NhcmQgaXMgcmVxdWVzdGVkIGFuZCB0aGVyZSdzIG5vIGRlY29kZXIgZGVsYXksCi0gICAgLy8ganVzdCBkaXNjYXJkIGFsbCByZW1haW5pbmcgZnJhbWVzIGZyb20gdGhpcyBidWZmZXIuICBXaXRoIGRlY29kZXIgZGVsYXkKLSAgICAvLyB3ZSBoYXZlIHRvIGVzdGltYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBmcmFtZXMgdG8gZGlzY2FyZCBiYXNlZCBvbiB0aGUKLSAgICAvLyBkdXJhdGlvbiBvZiB0aGUgZW5jb2RlZCBidWZmZXIuCi0gICAgY29uc3Qgc2l6ZV90IHN0YXJ0X2ZyYW1lc190b19kaXNjYXJkID0KLSAgICAgICAgY3VycmVudF9kaXNjYXJkX3BhZGRpbmcuZmlyc3QgPT0ga0luZmluaXRlRHVyYXRpb24KLSAgICAgICAgICAgID8gKGRlY29kZXJfZGVsYXlfID4gMAotICAgICAgICAgICAgICAgICAgID8gVGltZURlbHRhVG9GcmFtZXMoZW5jb2RlZF9idWZmZXItPmR1cmF0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgOiBkZWNvZGVkX2ZyYW1lcykKLSAgICAgICAgICAgIDogVGltZURlbHRhVG9GcmFtZXMoY3VycmVudF9kaXNjYXJkX3BhZGRpbmcuZmlyc3QpOwotCi0gICAgLy8gUmVnYXJkbGVzcyBvZiB0aGUgdGltZXN0YW1wIG9uIHRoZSBlbmNvZGVkIGJ1ZmZlciwgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAvLyBkZWNvZGVkIG91dHB1dCB3aWxsIGFwcGVhciB8ZGVjb2Rlcl9kZWxheV98IGZyYW1lcyBsYXRlci4KLSAgICBzaXplX3QgZGlzY2FyZF9zdGFydCA9IGRlY29kZXJfZGVsYXlfOwotICAgIGlmIChkZWNvZGVyX2RlbGF5XyA+IDApIHsKLSAgICAgIC8vIElmIHdlIGhhdmUgYSB8ZGVjb2Rlcl9kZWxheV98IGFuZCBoYXZlIGFscmVhZHkgZGlzY2FyZGVkIGZyYW1lcyBmcm9tCi0gICAgICAvLyB0aGlzIGJ1ZmZlciwgdGhlIHxkaXNjYXJkX3N0YXJ0fCBtdXN0IGJlIGFkanVzdGVkIGJ5IHRoZSBudW1iZXIgb2YKLSAgICAgIC8vIGZyYW1lcyBhbHJlYWR5IGRpc2NhcmRlZC4KLSAgICAgIGNvbnN0IHNpemVfdCBmcmFtZXNfZGlzY2FyZGVkX3NvX2ZhciA9Ci0gICAgICAgICAgb3JpZ2luYWxfZnJhbWVfY291bnQgLSBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKTsKLSAgICAgIENIRUNLX0xFKGZyYW1lc19kaXNjYXJkZWRfc29fZmFyLCBkZWNvZGVyX2RlbGF5Xyk7Ci0gICAgICBkaXNjYXJkX3N0YXJ0IC09IGZyYW1lc19kaXNjYXJkZWRfc29fZmFyOwotICAgIH0KLQotICAgIC8vIEZvciBzaW1wbGljaXR5IHJlcXVpcmUgdGhlIHN0YXJ0IG9mIHRoZSBkaXNjYXJkIHRvIGJlIHdpdGhpbiB0aGUgY3VycmVudAotICAgIC8vIGJ1ZmZlci4gIERvaW5nIHNvIGFsbG93cyB1cyBhdm9pZCBjb21wbGV4aXR5IGFyb3VuZCB0cmFja2luZyBkaXNjYXJkcwotICAgIC8vIGFjcm9zcyBidWZmZXJzLgotICAgIENIRUNLX0xUKGRpc2NhcmRfc3RhcnQsIGRlY29kZWRfZnJhbWVzKTsKLQotICAgIGNvbnN0IHNpemVfdCBmcmFtZXNfdG9fZGlzY2FyZCA9Ci0gICAgICAgIHN0ZDo6bWluKHN0YXJ0X2ZyYW1lc190b19kaXNjYXJkLCBkZWNvZGVkX2ZyYW1lcyAtIGRpc2NhcmRfc3RhcnQpOwotCi0gICAgLy8gQ2Fycnkgb3ZlciBhbnkgZnJhbWVzIHdoaWNoIG5lZWQgdG8gYmUgZGlzY2FyZGVkIGZyb20gdGhlIGZyb250IG9mIHRoZQotICAgIC8vIG5leHQgYnVmZmVyLgotICAgIERDSEVDSyghZGlzY2FyZF9mcmFtZXNfKTsKLSAgICBkaXNjYXJkX2ZyYW1lc18gPSBzdGFydF9mcmFtZXNfdG9fZGlzY2FyZCAtIGZyYW1lc190b19kaXNjYXJkOwotCi0gICAgRFZMT0coMSkgPDwgIkZyb250IGRpc2NhcmQgb2YgIiA8PCBmcmFtZXNfdG9fZGlzY2FyZCA8PCAiIG91dCBvZiAiCi0gICAgICAgICAgICAgPDwgZGVjb2RlZF9mcmFtZXMgPDwgIiBmcmFtZXMgc3RhcnRpbmcgYXQgIiA8PCBkaXNjYXJkX3N0YXJ0OwotCi0gICAgLy8gSWYgZXZlcnl0aGluZyB3b3VsZCBiZSBkaXNjYXJkZWQsIGluZGljYXRlIGEgbmV3IGJ1ZmZlciBpcyByZXF1aXJlZC4KLSAgICBpZiAoZnJhbWVzX3RvX2Rpc2NhcmQgPT0gZGVjb2RlZF9mcmFtZXMpIHsKLSAgICAgIC8vIFRoZSBidWZmZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gbWFya2VkIHdpdGggZW5kIGRpc2NhcmQgaWYgdGhlIGZyb250Ci0gICAgICAvLyBkaXNjYXJkIHJlbW92ZXMgZXZlcnl0aGluZy4KLSAgICAgIERDSEVDSyhjdXJyZW50X2Rpc2NhcmRfcGFkZGluZy5zZWNvbmQuaXNfemVybygpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBkZWNvZGVkX2J1ZmZlci0+VHJpbVJhbmdlKGRpc2NhcmRfc3RhcnQsIGRpc2NhcmRfc3RhcnQgKyBmcmFtZXNfdG9fZGlzY2FyZCk7Ci0gIH0gZWxzZSB7Ci0gICAgRENIRUNLKGN1cnJlbnRfZGlzY2FyZF9wYWRkaW5nLmZpcnN0LmlzX3plcm8oKSk7Ci0gIH0KLQotICAvLyBIYW5kbGUgZW5kIGRpc2NhcmQgcGFkZGluZy4KLSAgaWYgKGN1cnJlbnRfZGlzY2FyZF9wYWRkaW5nLnNlY29uZCA+IGJhc2U6OlRpbWVEZWx0YSgpKSB7Ci0gICAgY29uc3Qgc2l6ZV90IGRlY29kZWRfZnJhbWVzID0gZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCk7Ci0gICAgc2l6ZV90IGVuZF9mcmFtZXNfdG9fZGlzY2FyZCA9Ci0gICAgICAgIFRpbWVEZWx0YVRvRnJhbWVzKGN1cnJlbnRfZGlzY2FyZF9wYWRkaW5nLnNlY29uZCk7Ci0KLSAgICBpZiAoZGVjb2Rlcl9kZWxheV8pIHsKLSAgICAgIC8vIERlbGF5ZWQgZW5kIGRpc2NhcmQgb25seSB3b3JrcyBpZiB0aGUgZGVjb2RlciBkZWxheSBpcyBsZXNzIHRoYW4gYQotICAgICAgLy8gc2luZ2xlIGJ1ZmZlci4KLSAgICAgIERDSEVDS19MVChkZWNvZGVyX2RlbGF5Xywgb3JpZ2luYWxfZnJhbWVfY291bnQpOwotCi0gICAgICAvLyBJZiB0aGUgZGlzY2FyZCBpcyA+PSB0aGUgZGVjb2RlciBkZWxheSwgdHJpbSBldmVyeXRoaW5nIHdlIGNhbiBvZmYgdGhlCi0gICAgICAvLyBlbmQgb2YgdGhpcyBidWZmZXIgYW5kIHRoZSByZXN0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LgotICAgICAgaWYgKGVuZF9mcmFtZXNfdG9fZGlzY2FyZCA+PSBkZWNvZGVyX2RlbGF5XykgewotICAgICAgICBEQ0hFQ0soIWRpc2NhcmRfZnJhbWVzXyk7Ci0gICAgICAgIGRpc2NhcmRfZnJhbWVzXyA9IGRlY29kZXJfZGVsYXlfOwotICAgICAgICBlbmRfZnJhbWVzX3RvX2Rpc2NhcmQgLT0gZGVjb2Rlcl9kZWxheV87Ci0gICAgICB9IGVsc2UgewotICAgICAgICBEQ0hFQ0soIWRlbGF5ZWRfZW5kX2Rpc2NhcmRfKTsKLSAgICAgICAgc3RkOjpzd2FwKGRlbGF5ZWRfZW5kX2Rpc2NhcmRfLCBlbmRfZnJhbWVzX3RvX2Rpc2NhcmQpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChlbmRfZnJhbWVzX3RvX2Rpc2NhcmQgPiBkZWNvZGVkX2ZyYW1lcykgewotICAgICAgRExPRyhFUlJPUikgPDwgIkVuY291bnRlcmVkIGludmFsaWQgZGlzY2FyZCBwYWRkaW5nIHZhbHVlLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGVuZF9mcmFtZXNfdG9fZGlzY2FyZCA+IDApIHsKLSAgICAgIERWTE9HKDEpIDw8ICJFbmQgZGlzY2FyZCBvZiAiIDw8IGVuZF9mcmFtZXNfdG9fZGlzY2FyZCA8PCAiIG91dCBvZiAiCi0gICAgICAgICAgICAgICA8PCBkZWNvZGVkX2ZyYW1lczsKLQotICAgICAgLy8gSWYgZXZlcnl0aGluZyB3b3VsZCBiZSBkaXNjYXJkZWQsIGluZGljYXRlIGEgbmV3IGJ1ZmZlciBpcyByZXF1aXJlZC4KLSAgICAgIGlmIChlbmRfZnJhbWVzX3RvX2Rpc2NhcmQgPT0gZGVjb2RlZF9mcmFtZXMpIHJldHVybiBmYWxzZTsKLQotICAgICAgZGVjb2RlZF9idWZmZXItPlRyaW1FbmQoZW5kX2ZyYW1lc190b19kaXNjYXJkKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgRENIRUNLKGN1cnJlbnRfZGlzY2FyZF9wYWRkaW5nLnNlY29uZC5pc196ZXJvKCkpOwotICB9Ci0KLSAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiB0czogIiA8PCB0aW1lc3RhbXBfaGVscGVyXy5HZXRUaW1lc3RhbXAoKQotICAgICAgICAgICA8PCAiIGZyYW1lczogIiA8PCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKTsKLQotICAvLyBBc3NpZ24gdGltZXN0YW1wIHRvIHRoZSBidWZmZXIuCi0gIGRlY29kZWRfYnVmZmVyLT5zZXRfdGltZXN0YW1wKHRpbWVzdGFtcF9oZWxwZXJfLkdldFRpbWVzdGFtcCgpKTsKLSAgdGltZXN0YW1wX2hlbHBlcl8uQWRkRnJhbWVzKGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2Rpc2NhcmRfaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZDljY2QuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fRElTQ0FSRF9IRUxQRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fRElTQ0FSRF9IRUxQRVJfSF8KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQXVkaW9CdWZmZXI7Ci0KLS8vIEhlbHBlciBjbGFzcyBmb3IgbWFuYWdpbmcgdGltZXN0YW1wcyBhbmQgZGlzY2FyZCBldmVudHMgYXJvdW5kIGRlY29kaW5nLgotY2xhc3MgTUVESUFfRVhQT1JUIEF1ZGlvRGlzY2FyZEhlbHBlciB7Ci0gcHVibGljOgotICAvLyB8c2FtcGxlX3JhdGV8IGlzIHRoZSBzYW1wbGUgcmF0ZSBvZiBkZWNvZGVkIGRhdGEgd2hpY2ggd2lsbCBiZSBoYW5kZWQgaW50bwotICAvLyB0aGUgUHJvY2Vzc0J1ZmZlcnMoKSBjYWxsLgotICAvLwotICAvLyB8ZGVjb2Rlcl9kZWxheXwgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgYSBkZWNvZGVyIHdpbGwgb3V0cHV0IGJlZm9yZSBkYXRhCi0gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGVuY29kZWQgYnVmZmVyIGlzIG91dHB1dC4gIENhbGxlcnMgb25seSBuZWVkIHRvCi0gIC8vIHNwZWNpZnkgdGhpcyBpZiB0aGUgZGVjb2RlciBpbnNlcnRzIGZyYW1lcyB3aGljaCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcKLSAgLy8gZW5jb2RlZCBidWZmZXIuCi0gIC8vCi0gIC8vIEZvciBleGFtcGxlLCBtb3N0IE1QMyBkZWNvZGVycyB3aWxsIG91dHB1dCA1MjkganVuayBmcmFtZXMgYmVmb3JlIHRoZSBkYXRhCi0gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGVuY29kZWQgYnVmZmVyIGlzIG91dHB1dC4gIFRoZXNlIGZyYW1lcyBhcmUgbm90Ci0gIC8vIHJlcHJlc2VudGVkIGluIHRoZSBlbmNvZGVkIGRhdGEgc3RyZWFtIGFuZCBpbnN0ZWFkIGFyZSBhbiBhcnRpZmFjdCBvZiBob3cKLSAgLy8gbW9zdCBNUDMgZGVjb2RlcnMgd29yay4gIFNlZSBodHRwOi8vbGFtZS5zb3VyY2Vmb3JnZS5uZXQvdGVjaC1GQVEudHh0Ci0gIEF1ZGlvRGlzY2FyZEhlbHBlcihpbnQgc2FtcGxlX3JhdGUsIHNpemVfdCBkZWNvZGVyX2RlbGF5KTsKLSAgfkF1ZGlvRGlzY2FyZEhlbHBlcigpOwotCi0gIC8vIENvbnZlcnRzIGEgVGltZURlbHRhIHRvIGEgZnJhbWUgY291bnQgYmFzZWQgb24gdGhlIGNvbnN0cnVjdGVkIHNhbXBsZSByYXRlLgotICAvLyB8ZHVyYXRpb258IG11c3QgYmUgcG9zaXRpdmUuCi0gIHNpemVfdCBUaW1lRGVsdGFUb0ZyYW1lcyhiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24pIGNvbnN0OwotCi0gIC8vIFJlc2V0cyBpbnRlcm5hbCBzdGF0ZSBhbmQgaW5kaWNhdGVzIHRoYXQgfGluaXRpYWxfZGlzY2FyZHwgb2YgdXBjb21pbmcKLSAgLy8gZnJhbWVzIHNob3VsZCBiZSBkaXNjYXJkZWQuCi0gIHZvaWQgUmVzZXQoc2l6ZV90IGluaXRpYWxfZGlzY2FyZCk7Ci0KLSAgLy8gQXBwbGllcyBkaXNjYXJkIHBhZGRpbmcgZnJvbSB0aGUgZW5jb2RlZCBidWZmZXIgYWxvbmcgd2l0aCBhbnkgaW5pdGlhbAotICAvLyBkaXNjYXJkcy4gIHxkZWNvZGVkX2J1ZmZlcnwgbWF5IGJlIE5VTEwsIGlmIG5vdCB0aGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbgotICAvLyB3aWxsIGJlIHNldCBhZnRlciBkaXNjYXJkcyBhcmUgYXBwbGllZC4gIFJldHVybnMgdHJ1ZSBpZiB8ZGVjb2RlZF9idWZmZXJ8Ci0gIC8vIGV4aXN0cyBhZnRlciBwcm9jZXNzaW5nIGRpc2NhcmQgZXZlbnRzLiAgUmV0dXJucyBmYWxzZSBpZiB8ZGVjb2RlZF9idWZmZXJ8Ci0gIC8vIHdhcyBOVUxMLCBpcyBjb21wbGV0ZWx5IGRpc2NhcmRlZCwgb3IgYSBwcm9jZXNzaW5nIGVycm9yIG9jY3Vycy4KLSAgLy8KLSAgLy8gSWYgQXVkaW9EaXNjYXJkSGVscGVyIGlzIG5vdCBpbml0aWFsaXplZCgpIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGZpcnN0Ci0gIC8vIHxlbmNvZGVkX2J1ZmZlcnwgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNpcyBmb3IgYWxsIGZ1dHVyZSB0aW1lc3RhbXBzIHNldCBvbgotICAvLyB8ZGVjb2RlZF9idWZmZXJ8cy4gIElmIHRoZSBmaXJzdCBidWZmZXIgaGFzIGEgbmVnYXRpdmUgdGltZXN0YW1wIGl0IHdpbGwgYmUKLSAgLy8gY2xhbXBlZCB0byB6ZXJvLgotICBib29sIFByb2Nlc3NCdWZmZXJzKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGVuY29kZWRfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+JiBkZWNvZGVkX2J1ZmZlcik7Ci0KLSAgLy8gV2hldGhlciBhbnkgYnVmZmVycyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgotICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgewotICAgIHJldHVybiB0aW1lc3RhbXBfaGVscGVyXy5iYXNlX3RpbWVzdGFtcCgpICE9IGtOb1RpbWVzdGFtcDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gVGhlIHNhbXBsZSByYXRlIG9mIHRoZSBkZWNvZGVkIGF1ZGlvIHNhbXBsZXMuICBVc2VkIGJ5IFRpbWVEZWx0YVRvRnJhbWVzKCkKLSAgLy8gYW5kIHRoZSB0aW1lc3RhbXAgaGVscGVyLgotICBjb25zdCBpbnQgc2FtcGxlX3JhdGVfOwotCi0gIC8vIFNvbWUgY29kZWNzIG91dHB1dCBleHRyYSBzYW1wbGVzIGR1cmluZyB0aGUgZmlyc3QgZGVjb2RlLiAgSW4gb3JkZXIgdG8gdHJpbQotICAvLyBEaXNjYXJkUGFkZGluZyBjb3JyZWN0bHkgdGhlIGhlbHBlciBtdXN0IGtub3cgdGhlIG9mZnNldCBpbnRvIHRoZSBkZWNvZGVkCi0gIC8vIGJ1ZmZlcnMgYXQgd2hpY2ggcmVhbCBzYW1wbGVzIHN0YXJ0LgotICBjb25zdCBzaXplX3QgZGVjb2Rlcl9kZWxheV87Ci0KLSAgLy8gVXNlZCB0byByZWdlbmVyYXRlIHNhbXBsZSBhY2N1cmF0ZSB0aW1lc3RhbXBzIGZvciBkZWNvZGVkIGJ1ZmZlcnMuICBUaGUKLSAgLy8gdGltZXN0YW1wIG9mIHRoZSBmaXJzdCBlbmNvZGVkIGJ1ZmZlciBzZWVuIGJ5IFByb2Nlc3NCdWZmZXJzKCkgaXMgdXNlZCBhcwotICAvLyB0aGUgYmFzZSB0aW1lc3RhbXAuCi0gIEF1ZGlvVGltZXN0YW1wSGVscGVyIHRpbWVzdGFtcF9oZWxwZXJfOwotCi0gIC8vIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIGRpc2NhcmQgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIG5leHQgYnVmZmVyLiAgQ2FuIGJlCi0gIC8vIHNldCBieSBSZXNldCgpIGFuZCBhZGRlZCB0byBieSBhIGZyb250IERpc2NhcmRQYWRkaW5nIGxhcmdlciB0aGFuIGl0cwotICAvLyBhc3NvY2lhdGVkIGJ1ZmZlci4KLSAgc2l6ZV90IGRpc2NhcmRfZnJhbWVzXzsKLQotICAvLyBUaGUgbGFzdCBlbmNvZGVkIGJ1ZmZlciB0aW1lc3RhbXAgc2VlbiBieSBQcm9jZXNzQnVmZmVycygpIG9yIGtOb1RpbWVzdGFtcAotICAvLyBpZiBubyBidWZmZXJzIGhhdmUgYmVlbiBzZWVuIHRodXMgZmFyLiAgVXNlZCB0byBpc3N1ZSB3YXJuaW5ncyBmb3IgYnVmZmVyCi0gIC8vIHNlcXVlbmNlcyB3aXRoIG5vbi1tb25vdG9uaWMgdGltZXN0YW1wcy4KLSAgYmFzZTo6VGltZURlbHRhIGxhc3RfaW5wdXRfdGltZXN0YW1wXzsKLQotICAvLyBDZXJ0YWluIGNvZGVjcyByZXF1aXJlIHR3byBlbmNvZGVkIGJ1ZmZlcnMgYmVmb3JlIHRoZXknbGwgb3V0cHV0IHRoZSBmaXJzdAotICAvLyBkZWNvZGVkIGJ1ZmZlci4gIEluIHRoaXMgY2FzZSBEaXNjYXJkUGFkZGluZyBtdXN0IGJlIGNhcnJpZWQgb3ZlciBmcm9tIHRoZQotICAvLyBwcmV2aW91cyBlbmNvZGVkIGJ1ZmZlci4gIEVuYWJsZWQgYXV0b21hdGljYWxseSBpZiBhbiBlbmNvZGVkIGJ1ZmZlciBpcwotICAvLyBnaXZlbiB0byBQcm9jZXNzQnVmZmVycygpIHdpdGggYSBOVUxMIGRlY29kZWQgYnVmZmVyLgotICBib29sIGRlbGF5ZWRfZGlzY2FyZF87Ci0gIERlY29kZXJCdWZmZXI6OkRpc2NhcmRQYWRkaW5nIGRlbGF5ZWRfZGlzY2FyZF9wYWRkaW5nXzsKLQotICAvLyBXaGVuIHxkZWNvZGVyX2RlbGF5X3wgPiAwLCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB3aGljaCBzaG91bGQgYmUgZGlzY2FyZGVkCi0gIC8vIGZyb20gdGhlIG5leHQgYnVmZmVyLiAgVGhlIGluZGV4IGF0IHdoaWNoIHRvIHN0YXJ0IGRpc2NhcmRpbmcgaXMgY2FsY3VsYXRlZAotICAvLyBieSBzdWJ0cmFjdGluZyB8ZGVsYXllZF9lbmRfZGlzY2FyZF98IGZyb20gfGRlY29kZXJfZGVsYXlffC4KLSAgc2l6ZV90IGRlbGF5ZWRfZW5kX2Rpc2NhcmRfOwotCi0gIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhBdWRpb0Rpc2NhcmRIZWxwZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fRElTQ0FSRF9IRUxQRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2Rpc2NhcmRfaGVscGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2Y3NDQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGlzY2FyZF9oZWxwZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2J1cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9oZWxwZXJzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBrRGF0YVN0ZXAgPSAwLjAxZjsKLXN0YXRpYyBjb25zdCBzaXplX3Qga1NhbXBsZVJhdGUgPSA0ODAwMDsKLQotc3RhdGljIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gQ3JlYXRlRW5jb2RlZEJ1ZmZlcigKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wLCBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24pIHsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiByZXN1bHQobmV3IERlY29kZXJCdWZmZXIoMSkpOwotICByZXN1bHQtPnNldF90aW1lc3RhbXAodGltZXN0YW1wKTsKLSAgcmVzdWx0LT5zZXRfZHVyYXRpb24oZHVyYXRpb24pOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gQ3JlYXRlRGVjb2RlZEJ1ZmZlcihpbnQgZnJhbWVzKSB7Ci0gIHJldHVybiBNYWtlQXVkaW9CdWZmZXIoa1NhbXBsZUZvcm1hdFBsYW5hckYzMiwgQ0hBTk5FTF9MQVlPVVRfTU9OTywgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU2FtcGxlUmF0ZSwgMC4wZiwga0RhdGFTdGVwLCBmcmFtZXMsIGtOb1RpbWVzdGFtcCk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBFeHRyYWN0RGVjb2RlZERhdGEoY29uc3Qgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4mIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4KSB7Ci0gIC8vIFRoaXMgaXMgcmVhbGx5IGluZWZmaWNpZW50LCBidXQgd2UgY2FuJ3QgYWNjZXNzIHRoZSByYXcgQXVkaW9CdWZmZXIgaWYgYW55Ci0gIC8vIHN0YXJ0IHRyaW1taW5nIGhhcyBiZWVuIGFwcGxpZWQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1cz4gdGVtcF9idXMgPQotICAgICAgQXVkaW9CdXM6OkNyZWF0ZShidWZmZXItPmNoYW5uZWxfY291bnQoKSwgMSk7Ci0gIGJ1ZmZlci0+UmVhZEZyYW1lcygxLCBpbmRleCwgMCwgdGVtcF9idXMuZ2V0KCkpOwotICByZXR1cm4gdGVtcF9idXMtPmNoYW5uZWwoMClbMF07Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgVGltZURlbHRhVG9GcmFtZXMpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLQotICBFWFBFQ1RfRVEoMHUsIGRpc2NhcmRfaGVscGVyLlRpbWVEZWx0YVRvRnJhbWVzKGJhc2U6OlRpbWVEZWx0YSgpKSk7Ci0gIEVYUEVDVF9FUShrU2FtcGxlUmF0ZSAvIDEwMCwgZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMCkpKTsKLQotICAvLyBFbnN1cmUgcGFydGlhbCBmcmFtZXMgYXJlIHJvdW5kZWQgZG93biBjb3JyZWN0bHkuICBUaGUgZXF1YXRpb24gYmVsb3cKLSAgLy8gY2FsY3VsYXRlcyBhIGZyYW1lIGNvdW50IHdpdGggYSBmcmFjdGlvbmFsIHBhcnQgPCAwLjUuCi0gIGNvbnN0IGludCBzbWFsbF9yZW1haW5kZXIgPQotICAgICAgYmFzZTo6VGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCAqIChrU2FtcGxlUmF0ZSAtIDAuOSkgLyBrU2FtcGxlUmF0ZTsKLSAgRVhQRUNUX0VRKGtTYW1wbGVSYXRlIC0gMSwKLSAgICAgICAgICAgIGRpc2NhcmRfaGVscGVyLlRpbWVEZWx0YVRvRnJhbWVzKAotICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhzbWFsbF9yZW1haW5kZXIpKSk7Ci0KLSAgLy8gRGl0dG8sIGJ1dCByb3VuZGVkIHVwIHVzaW5nIGEgZnJhY3Rpb25hbCBwYXJ0ID4gMC41LgotICBjb25zdCBpbnQgbGFyZ2VfcmVtYWluZGVyID0KLSAgICAgIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQgKiAoa1NhbXBsZVJhdGUgLSAwLjQpIC8ga1NhbXBsZVJhdGU7Ci0gIEVYUEVDVF9FUShrU2FtcGxlUmF0ZSwKLSAgICAgICAgICAgIGRpc2NhcmRfaGVscGVyLlRpbWVEZWx0YVRvRnJhbWVzKAotICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhsYXJnZV9yZW1haW5kZXIpKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgQmFzaWNQcm9jZXNzQnVmZmVycykgewotICBBdWRpb0Rpc2NhcmRIZWxwZXIgZGlzY2FyZF9oZWxwZXIoa1NhbXBsZVJhdGUsIDApOwotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuaW5pdGlhbGl6ZWQoKSk7Ci0KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtUaW1lc3RhbXAgPSBiYXNlOjpUaW1lRGVsdGEoKTsKLQotICAvLyBVc2UgYW4gZXN0aW1hdGVkIGR1cmF0aW9uIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBkZWNvZGVkIGZyYW1lcwotICAvLyB0byBlbnN1cmUgdGhlIGhlbHBlciBpcyBjb3JyZWN0bHkgc2V0dGluZyBkdXJhdGlvbnMgYmFzZWQgb24gb3V0cHV0IGZyYW1lcy4KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtFc3RpbWF0ZWREdXJhdGlvbiA9Ci0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoOSk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrQWN0dWFsRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrQWN0dWFsRHVyYXRpb24pOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRXN0aW1hdGVkRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIC8vIFZlcmlmeSB0aGUgYmFzaWMgY2FzZSB3aGVyZSBub3RoaW5nIGlzIGRpc2NhcmRlZC4KLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtBY3R1YWxEdXJhdGlvbiwgZGVjb2RlZF9idWZmZXItPmR1cmF0aW9uKCkpOwotICBFWFBFQ1RfRVEoa1Rlc3RGcmFtZXMsIGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLQotICAvLyBWZXJpZnkgYSBSZXNldCgpIHRha2VzIHVzIGJhY2sgdG8gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS4KLSAgZGlzY2FyZF9oZWxwZXIuUmVzZXQoMCk7Ci0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICAvLyBWZXJpZnkgYSBOVUxMIG91dHB1dCBidWZmZXIgcmV0dXJucyBmYWxzZS4KLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBOVUxMKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgTmVnYXRpdmVUaW1lc3RhbXBDbGFtcHNUb1plcm8pIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gLWJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMSk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIC8vIFZlcmlmeSB0aGUgYmFzaWMgY2FzZSB3aGVyZSBub3RoaW5nIGlzIGRpc2NhcmRlZC4KLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIGRlY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gIEVYUEVDVF9FUShrRHVyYXRpb24sIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzLCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgUHJvY2Vzc0J1ZmZlcnNXaXRoSW5pdGlhbERpc2NhcmQpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIC8vIFRlbGwgdGhlIGhlbHBlciB3ZSB3YW50IHRvIGRpc2NhcmQgaGFsZiBvZiB0aGUgaW5pdGlhbCBmcmFtZXMuCi0gIGNvbnN0IGludCBrRGlzY2FyZEZyYW1lcyA9IGtUZXN0RnJhbWVzIC8gMjsKLSAgZGlzY2FyZF9oZWxwZXIuUmVzZXQoa0Rpc2NhcmRGcmFtZXMpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIC8vIFZlcmlmeSBoYWxmIHRoZSBmcmFtZXMgZW5kIHVwIGRpc2NhcmRlZC4KLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAvIDIsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtEaXNjYXJkRnJhbWVzLCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShrRGlzY2FyZEZyYW1lcyAqIGtEYXRhU3RlcCwKLSAgICAgICAgICAgICAgICAgIEV4dHJhY3REZWNvZGVkRGF0YShkZWNvZGVkX2J1ZmZlciwgMCkpOwotfQotCi1URVNUKEF1ZGlvRGlzY2FyZEhlbHBlclRlc3QsIFByb2Nlc3NCdWZmZXJzV2l0aExhcmdlSW5pdGlhbERpc2NhcmQpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIC8vIFRlbGwgdGhlIGhlbHBlciB3ZSB3YW50IHRvIGRpc2NhcmQgMS41IGJ1ZmZlcnMgd29ydGggb2YgZnJhbWVzLgotICBkaXNjYXJkX2hlbHBlci5SZXNldChrVGVzdEZyYW1lcyAqIDEuNSk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBlbmNvZGVkX2J1ZmZlciA9Ci0gICAgICBDcmVhdGVFbmNvZGVkQnVmZmVyKGtUaW1lc3RhbXAsIGtEdXJhdGlvbik7Ci0gIHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+IGRlY29kZWRfYnVmZmVyID0gQ3JlYXRlRGVjb2RlZEJ1ZmZlcihrVGVzdEZyYW1lcyk7Ci0KLSAgLy8gVGhlIGZpcnN0IGNhbGwgc2hvdWxkIGZhaWwgc2luY2Ugbm8gb3V0cHV0IGJ1ZmZlciByZW1haW5zLgotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIC8vIEdlbmVyYXRlIGFub3RoZXIgc2V0IG9mIGJ1ZmZlcnMgYW5kIGV4cGVjdCBoYWxmIHRoZSBvdXRwdXQgZnJhbWVzLgotICBlbmNvZGVkX2J1ZmZlciA9IENyZWF0ZUVuY29kZWRCdWZmZXIoa1RpbWVzdGFtcCArIGtEdXJhdGlvbiwga0R1cmF0aW9uKTsKLSAgZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0KLSAgLy8gVGhlIHRpbWVzdGFtcCBzaG91bGQgbWF0Y2ggdGhhdCBvZiB0aGUgaW5pdGlhbCBidWZmZXIuCi0gIGNvbnN0IGludCBrRGlzY2FyZEZyYW1lcyA9IGtUZXN0RnJhbWVzIC8gMjsKLSAgRVhQRUNUX0VRKGtUaW1lc3RhbXAsIGRlY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gIEVYUEVDVF9FUShrRHVyYXRpb24gLyAyLCBkZWNvZGVkX2J1ZmZlci0+ZHVyYXRpb24oKSk7Ci0gIEVYUEVDVF9FUShrRGlzY2FyZEZyYW1lcywgZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCkpOwotICBBU1NFUlRfRkxPQVRfRVEoa0Rpc2NhcmRGcmFtZXMgKiBrRGF0YVN0ZXAsCi0gICAgICAgICAgICAgICAgICBFeHRyYWN0RGVjb2RlZERhdGEoZGVjb2RlZF9idWZmZXIsIDApKTsKLX0KLQotVEVTVChBdWRpb0Rpc2NhcmRIZWxwZXJUZXN0LCBBbGxvd05vbk1vbm90b25pY1RpbWVzdGFtcHMpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLSAgRVhQRUNUX0VRKGtUaW1lc3RhbXAsIGRlY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gIEVYUEVDVF9FUShrRHVyYXRpb24sIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzLCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci0KLSAgLy8gUHJvY2VzcyB0aGUgc2FtZSBpbnB1dCBidWZmZXIgYWdhaW4gdG8gZW5zdXJlIGlucHV0IHRpbWVzdGFtcHMgd2hpY2ggZ28KLSAgLy8gYmFja3dhcmRzIGluIHRpbWUgYXJlIG5vdCBlcnJvcnMuCi0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCArIGtEdXJhdGlvbiwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiwgZGVjb2RlZF9idWZmZXItPmR1cmF0aW9uKCkpOwotICBFWFBFQ1RfRVEoa1Rlc3RGcmFtZXMsIGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLX0KLQotVEVTVChBdWRpb0Rpc2NhcmRIZWxwZXJUZXN0LCBEaXNjYXJkRW5kUGFkZGluZykgewotICBBdWRpb0Rpc2NhcmRIZWxwZXIgZGlzY2FyZF9oZWxwZXIoa1NhbXBsZVJhdGUsIDApOwotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuaW5pdGlhbGl6ZWQoKSk7Ci0KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtUaW1lc3RhbXAgPSBiYXNlOjpUaW1lRGVsdGEoKTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtEdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMCk7Ci0gIGNvbnN0IGludCBrVGVzdEZyYW1lcyA9IGRpc2NhcmRfaGVscGVyLlRpbWVEZWx0YVRvRnJhbWVzKGtEdXJhdGlvbik7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBlbmNvZGVkX2J1ZmZlciA9Ci0gICAgICBDcmVhdGVFbmNvZGVkQnVmZmVyKGtUaW1lc3RhbXAsIGtEdXJhdGlvbik7Ci0gIHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+IGRlY29kZWRfYnVmZmVyID0gQ3JlYXRlRGVjb2RlZEJ1ZmZlcihrVGVzdEZyYW1lcyk7Ci0KLSAgLy8gU2V0IGEgZGlzY2FyZCBwYWRkaW5nIGVxdWl2YWxlbnQgdG8gaGFsZiB0aGUgYnVmZmVyLgotICBlbmNvZGVkX2J1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZygKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKGJhc2U6OlRpbWVEZWx0YSgpLCBrRHVyYXRpb24gLyAyKSk7Ci0KLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAvIDIsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzIC8gMiwgZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCkpOwotfQotCi1URVNUKEF1ZGlvRGlzY2FyZEhlbHBlclRlc3QsIEJhZERpc2NhcmRFbmRQYWRkaW5nKSB7Ci0gIEF1ZGlvRGlzY2FyZEhlbHBlciBkaXNjYXJkX2hlbHBlcihrU2FtcGxlUmF0ZSwgMCk7Ci0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGVuY29kZWRfYnVmZmVyID0KLSAgICAgIENyZWF0ZUVuY29kZWRCdWZmZXIoa1RpbWVzdGFtcCwga0R1cmF0aW9uKTsKLSAgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLQotICAvLyBTZXQgYSBkaXNjYXJkIHBhZGRpbmcgZXF1aXZhbGVudCB0byBkb3VibGUgdGhlIGJ1ZmZlciBzaXplLgotICBlbmNvZGVkX2J1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZygKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKGJhc2U6OlRpbWVEZWx0YSgpLCBrRHVyYXRpb24gKiAyKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBlbmQgZGlzY2FyZCBwYWRkaW5nIGlzIHJlamVjdGVkLgotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotfQotCi1URVNUKEF1ZGlvRGlzY2FyZEhlbHBlclRlc3QsIEluaXRpYWxEaXNjYXJkQW5kRGlzY2FyZEVuZFBhZGRpbmcpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIC8vIFNldCBhIGRpc2NhcmQgcGFkZGluZyBlcXVpdmFsZW50IHRvIGEgcXVhcnRlciBvZiB0aGUgYnVmZmVyLgotICBlbmNvZGVkX2J1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZygKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKGJhc2U6OlRpbWVEZWx0YSgpLCBrRHVyYXRpb24gLyA0KSk7Ci0KLSAgLy8gU2V0IGFuIGluaXRpYWwgZGlzY2FyZCBvZiBhIHF1YXJ0ZXIgb2YgdGhlIGJ1ZmZlci4KLSAgY29uc3QgaW50IGtEaXNjYXJkRnJhbWVzID0ga1Rlc3RGcmFtZXMgLyA0OwotICBkaXNjYXJkX2hlbHBlci5SZXNldChrRGlzY2FyZEZyYW1lcyk7Ci0KLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAvIDIsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzIC8gMiwgZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCkpOwotICBBU1NFUlRfRkxPQVRfRVEoa0Rpc2NhcmRGcmFtZXMgKiBrRGF0YVN0ZXAsCi0gICAgICAgICAgICAgICAgICBFeHRyYWN0RGVjb2RlZERhdGEoZGVjb2RlZF9idWZmZXIsIDApKTsKLX0KLQotVEVTVChBdWRpb0Rpc2NhcmRIZWxwZXJUZXN0LCBJbml0aWFsRGlzY2FyZEFuZERpc2NhcmRQYWRkaW5nKSB7Ci0gIEF1ZGlvRGlzY2FyZEhlbHBlciBkaXNjYXJkX2hlbHBlcihrU2FtcGxlUmF0ZSwgMCk7Ci0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGVuY29kZWRfYnVmZmVyID0KLSAgICAgIENyZWF0ZUVuY29kZWRCdWZmZXIoa1RpbWVzdGFtcCwga0R1cmF0aW9uKTsKLSAgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLQotICAvLyBTZXQgYWxsIHRoZSBkaXNjYXJkIHZhbHVlcyB0byBiZSBkaWZmZXJlbnQgdG8gZW5zdXJlIGVhY2ggaXMgcHJvcGVybHkgdXNlZC4KLSAgY29uc3QgaW50IGtEaXNjYXJkRnJhbWVzID0ga1Rlc3RGcmFtZXMgLyA0OwotICBlbmNvZGVkX2J1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZygKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKGtEdXJhdGlvbiAvIDgsIGtEdXJhdGlvbiAvIDE2KSk7Ci0gIGRpc2NhcmRfaGVscGVyLlJlc2V0KGtEaXNjYXJkRnJhbWVzKTsKLQotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgZGVjb2RlZF9idWZmZXIpKTsKLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuaW5pdGlhbGl6ZWQoKSk7Ci0gIEVYUEVDVF9FUShrVGltZXN0YW1wLCBkZWNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCkpOwotICBFWFBFQ1RfRVEoa0R1cmF0aW9uIC0ga0R1cmF0aW9uIC8gNCAtIGtEdXJhdGlvbiAvIDggLSBrRHVyYXRpb24gLyAxNiwKLSAgICAgICAgICAgIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzIC0ga1Rlc3RGcmFtZXMgLyA0IC0ga1Rlc3RGcmFtZXMgLyA4IC0ga1Rlc3RGcmFtZXMgLyAxNiwKLSAgICAgICAgICAgIGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLX0KLQotVEVTVChBdWRpb0Rpc2NhcmRIZWxwZXJUZXN0LCBJbml0aWFsRGlzY2FyZEFuZERpc2NhcmRQYWRkaW5nQW5kRGVjb2RlckRlbGF5KSB7Ci0gIC8vIFVzZSBhIGRlY29kZXIgZGVsYXkgb2YgNW1zLgotICBjb25zdCBpbnQga0RlY29kZXJEZWxheSA9IGtTYW1wbGVSYXRlIC8gMTAwIC8gMjsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCBrRGVjb2RlckRlbGF5KTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBkaXNjYXJkX2hlbHBlci5SZXNldChrRGVjb2RlckRlbGF5KTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGVuY29kZWRfYnVmZmVyID0KLSAgICAgIENyZWF0ZUVuY29kZWRCdWZmZXIoa1RpbWVzdGFtcCwga0R1cmF0aW9uKTsKLSAgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLQotICAvLyBTZXQgYSBkaXNjYXJkIHBhZGRpbmcgZXF1aXZhbGVudCB0byBoYWxmIG9mIHRoZSBidWZmZXIuCi0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKAotICAgICAgc3RkOjptYWtlX3BhaXIoa0R1cmF0aW9uIC8gMiwgYmFzZTo6VGltZURlbHRhKCkpKTsKLQotICAvLyBBbGwgb2YgdGhlIGZpcnN0IGJ1ZmZlciBzaG91bGQgYmUgZGlzY2FyZGVkLCBoYWxmIGZyb20gdGhlIGluaXRpYWwgZGVsYXkKLSAgLy8gYW5kIGFub3RoZXIgaGFsZiBmcm9tIHRoZSBmcm9udCBkaXNjYXJkIHBhZGRpbmcuCi0gIC8vCi0gIC8vICAgIEVuY29kZWQgICAgICAgICAgICAgICAgICAgRGlzY2FyZCBEZWxheQotICAvLyAgIHwtLS0tLS0tLXwgICAgIHwtLS0tLS0tLS18ICAgICB8LS0tLXwKLSAgLy8gICB8QUFBQUFBQUF8IC0tPiB8Li4uLnxBQUFBfCAtLT4gfEFBQUF8IC0tLS0tLS0+IE5VTEwKLSAgLy8gICB8LS0tLS0tLS18ICAgICB8LS0tLS0tLS0tfCAgICAgfC0tLS18Ci0gIC8vICAgICAgICAgICAgICAgICAgICBEZWNvZGVkICAgICAgICAgICAgICAgRGlzY2FyZCBGcm9udCBQYWRkaW5nCi0gIC8vCi0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgZGVjb2RlZF9idWZmZXIpKTsKLSAgQVNTRVJUX1RSVUUoZGlzY2FyZF9oZWxwZXIuaW5pdGlhbGl6ZWQoKSk7Ci0KLSAgLy8gUHJvY2Vzc2luZyBhbm90aGVyIGJ1ZmZlciB0aGF0IGhhcyBmcm9udCBkaXNjYXJkIHNldCB0byBoYWxmIHRoZSBidWZmZXIncwotICAvLyBkdXJhdGlvbiBzaG91bGQgZGlzY2FyZCB0aGUgYmFjayBoYWxmIG9mIHRoZSBidWZmZXIgc2luY2Uga0RlY29kZXJEZWxheSBpcwotICAvLyBoYWxmIGEgYnVmZmVyLiAgVGhlIGVuZCBwYWRkaW5nIHNob3VsZCBub3QgYmUgZGlzY2FyZGVkIHVudGlsIGFub3RoZXIKLSAgLy8gYnVmZmVyIGlzIHByb2Nlc3NlZC4gIGtEdXJhdGlvbiAvIDQgaXMgY2hvc2VuIGZvciB0aGUgZW5kIGRpc2NhcmQgc2luY2UgaXQKLSAgLy8gd2lsbCBmb3JjZSB0aGUgZW5kIGRpc2NhcmQgdG8gc3RhcnQgYWZ0ZXIgcG9zaXRpb24gemVybyB3aXRoaW4gdGhlIG5leHQKLSAgLy8gZGVjb2RlZCBidWZmZXIuCi0gIC8vCi0gIC8vICAgIEVuY29kZWQgICAgICAgICAgICAgICAgICAgIERpc2NhcmQgRnJvbnQgUGFkZGluZyAoZnJvbSBCKQotICAvLyAgIHwtLS0tLS0tLXwgICAgIHwtLS0tLS0tLS18ICAgICAgICAgICAgIHwtLS0tfAotICAvLyAgIHxCQkJCQkJCQnwgLS0+IHxBQUFBfEJCQkJ8IC0tLS0tLS0tLS0+IHxBQUFBfAotICAvLyAgIHwtLS0tLS0tLXwgICAgIHwtLS0tLS0tLS18ICAgICAgICAgICAgIHwtLS0tfAotICAvLyAgICAgICAgICAgICAgICAgICAgRGVjb2RlZAotICAvLyAgICAgICAgICAgKGluY2x1ZGVzIGNhcnJ5b3ZlciBmcm9tIEEpCi0gIC8vCi0gIGVuY29kZWRfYnVmZmVyLT5zZXRfdGltZXN0YW1wKGVuY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSArIGtEdXJhdGlvbik7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKAotICAgICAgc3RkOjptYWtlX3BhaXIoa0R1cmF0aW9uIC8gMiwga0R1cmF0aW9uIC8gNCkpOwotICBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgRXh0cmFjdERlY29kZWREYXRhKGRlY29kZWRfYnVmZmVyLCAwKSk7Ci0gIEFTU0VSVF9ORUFSKGtEZWNvZGVyRGVsYXkgKiBrRGF0YVN0ZXAsCi0gICAgICAgICAgICAgIEV4dHJhY3REZWNvZGVkRGF0YShkZWNvZGVkX2J1ZmZlciwga0RlY29kZXJEZWxheSksCi0gICAgICAgICAgICAgIGtEYXRhU3RlcCAvIDEwMDApOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgZGVjb2RlZF9idWZmZXIpKTsKLSAgRVhQRUNUX0VRKGtUaW1lc3RhbXAsIGRlY29kZWRfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gIEVYUEVDVF9FUShrRHVyYXRpb24gLyAyLCBkZWNvZGVkX2J1ZmZlci0+ZHVyYXRpb24oKSk7Ci0gIEVYUEVDVF9FUShrVGVzdEZyYW1lcyAvIDIsIGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLQotICAvLyBWZXJpZnkgaXQgd2FzIGFjdHVhbGx5IHRoZSBsYXR0ZXIgaGFsZiBvZiB0aGUgYnVmZmVyIHRoYXQgd2FzIHJlbW92ZWQuCi0gIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBFeHRyYWN0RGVjb2RlZERhdGEoZGVjb2RlZF9idWZmZXIsIDApKTsKLQotICAvLyBWZXJpZnkgdGhlIGVuZCBkaXNjYXJkIHBhZGRpbmcgaXMgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGJ1ZmZlci4gIFVzZQotICAvLyBrRHVyYXRpb24gLyAyIGZvciB0aGUgZW5kIGRpc2NhcmQgcGFkZGluZyBzbyB0aGF0IHRoZSBuZXh0IGJ1ZmZlciBoYXMgaXRzCi0gIC8vIHN0YXJ0IGVudGlyZWx5IGRpc2NhcmRlZC4KLSAgLy8KLSAgLy8gICAgRW5jb2RlZCAgICAgICAgICAgICAgICAgICAgICBEaXNjYXJkIEVuZCBQYWRkaW5nIChmcm9tIEIpCi0gIC8vICAgfC0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLXwgICAgICAgICAgICAgfC0tLS0tLS18Ci0gIC8vICAgfENDQ0NDQ0NDfCAtLT4gfEJCQkJ8Q0NDQ3wgLS0tLS0tLS0tLT4gfEJCfENDQ0N8Ci0gIC8vICAgfC0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLXwgICAgICAgICAgICAgfC0tLS0tLS18Ci0gIC8vICAgICAgICAgICAgICAgICAgICBEZWNvZGVkCi0gIC8vICAgICAgICAgICAoaW5jbHVkZXMgY2FycnlvdmVyIGZyb20gQikKLSAgLy8KLSAgZW5jb2RlZF9idWZmZXItPnNldF90aW1lc3RhbXAoZW5jb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpICsga0R1cmF0aW9uKTsKLSAgZW5jb2RlZF9idWZmZXItPnNldF9kaXNjYXJkX3BhZGRpbmcoCi0gICAgICBzdGQ6Om1ha2VfcGFpcihiYXNlOjpUaW1lRGVsdGEoKSwga0R1cmF0aW9uIC8gMikpOwotICBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgZGVjb2RlZF9idWZmZXIpKTsKLSAgRVhQRUNUX0VRKGtUaW1lc3RhbXAgKyBrRHVyYXRpb24gLyAyLCBkZWNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCkpOwotICBFWFBFQ1RfRVEoMyAqIGtEdXJhdGlvbiAvIDQsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKDMgKiBrVGVzdEZyYW1lcyAvIDQsIGRlY29kZWRfYnVmZmVyLT5mcmFtZV9jb3VudCgpKTsKLQotICAvLyBWZXJpZnkgaXQgd2FzIGFjdHVhbGx5IHRoZSBzZWNvbmQgcXVhcnRlciBvZiB0aGUgYnVmZmVyIHRoYXQgd2FzIHJlbW92ZWQuCi0gIGNvbnN0IGludCBrRGlzY2FyZEZyYW1lcyA9IGtUZXN0RnJhbWVzIC8gNDsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIEV4dHJhY3REZWNvZGVkRGF0YShkZWNvZGVkX2J1ZmZlciwgMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoCi0gICAgICBrRGlzY2FyZEZyYW1lcyAqIDIgKiBrRGF0YVN0ZXAsCi0gICAgICBFeHRyYWN0RGVjb2RlZERhdGEoZGVjb2RlZF9idWZmZXIsIGtEZWNvZGVyRGVsYXkgLSBrRGlzY2FyZEZyYW1lcykpOwotCi0gIC8vIE9uZSBsYXN0IHRlc3QgdG8gZW5zdXJlIGNhcnJ5b3ZlciBkaXNjYXJkIGZyb20gdGhlIHN0YXJ0IHdvcmtzLgotICAvLwotICAvLyAgICBFbmNvZGVkICAgICAgICAgICAgICAgICAgICAgIERpc2NhcmQgRW5kIFBhZGRpbmcgKGZyb20gQykKLSAgLy8gICB8LS0tLS0tLS18ICAgICB8LS0tLS0tLS0tfCAgICAgICAgICAgICB8LS0tLXwKLSAgLy8gICB8RERERERERER8IC0tPiB8Q0NDQ3xEREREfCAtLS0tLS0tLS0tPiB8RERERHwKLSAgLy8gICB8LS0tLS0tLS18ICAgICB8LS0tLS0tLS0tfCAgICAgICAgICAgICB8LS0tLXwKLSAgLy8gICAgICAgICAgICAgICAgICAgIERlY29kZWQKLSAgLy8gICAgICAgICAgIChpbmNsdWRlcyBjYXJyeW92ZXIgZnJvbSBDKQotICAvLwotICBlbmNvZGVkX2J1ZmZlci0+c2V0X3RpbWVzdGFtcChlbmNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCkgKyBrRHVyYXRpb24pOwotICBlbmNvZGVkX2J1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZyhEZWNvZGVyQnVmZmVyOjpEaXNjYXJkUGFkZGluZygpKTsKLSAgZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIEV4dHJhY3REZWNvZGVkRGF0YShkZWNvZGVkX2J1ZmZlciwgMCkpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgZGVjb2RlZF9idWZmZXIpKTsKLSAgRVhQRUNUX0VRKGtUaW1lc3RhbXAgKyBrRHVyYXRpb24gLyAyICsgMyAqIGtEdXJhdGlvbiAvIDQsCi0gICAgICAgICAgICBkZWNvZGVkX2J1ZmZlci0+dGltZXN0YW1wKCkpOwotICBFWFBFQ1RfRVEoa0R1cmF0aW9uIC8gMiwgZGVjb2RlZF9idWZmZXItPmR1cmF0aW9uKCkpOwotICBFWFBFQ1RfRVEoa1Rlc3RGcmFtZXMgLyAyLCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShrVGVzdEZyYW1lcyAvIDIgKiBrRGF0YVN0ZXAsCi0gICAgICAgICAgICAgICAgICBFeHRyYWN0RGVjb2RlZERhdGEoZGVjb2RlZF9idWZmZXIsIDApKTsKLX0KLQotVEVTVChBdWRpb0Rpc2NhcmRIZWxwZXJUZXN0LCBEZWxheWVkRGlzY2FyZEluaXRpYWxEaXNjYXJkQW5kRGlzY2FyZFBhZGRpbmcpIHsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCAwKTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBjb25zdCBpbnQga1Rlc3RGcmFtZXMgPSBkaXNjYXJkX2hlbHBlci5UaW1lRGVsdGFUb0ZyYW1lcyhrRHVyYXRpb24pOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZW5jb2RlZF9idWZmZXIgPQotICAgICAgQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wLCBrRHVyYXRpb24pOwotCi0gIC8vIFNldCBhbGwgdGhlIGRpc2NhcmQgdmFsdWVzIHRvIGJlIGRpZmZlcmVudCB0byBlbnN1cmUgZWFjaCBpcyBwcm9wZXJseSB1c2VkLgotICBjb25zdCBpbnQga0Rpc2NhcmRGcmFtZXMgPSBrVGVzdEZyYW1lcyAvIDQ7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKAotICAgICAgc3RkOjptYWtlX3BhaXIoa0R1cmF0aW9uIC8gOCwga0R1cmF0aW9uIC8gMTYpKTsKLSAgZGlzY2FyZF9oZWxwZXIuUmVzZXQoa0Rpc2NhcmRGcmFtZXMpOwotCi0gIC8vIFZlcmlmeSBub3RoaW5nIGlzIG91dHB1dCBmb3IgdGhlIGZpcnN0IGJ1ZmZlciwgeWV0IGluaXRpYWxpemVkIGlzIHRydWUuCi0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgTlVMTCkpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICAvLyBDcmVhdGUgYW4gZW5jb2RlZCBidWZmZXIgd2l0aCBubyBkaXNjYXJkIHBhZGRpbmcuCi0gIGVuY29kZWRfYnVmZmVyID0gQ3JlYXRlRW5jb2RlZEJ1ZmZlcihrVGltZXN0YW1wICsga0R1cmF0aW9uLCBrRHVyYXRpb24pOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBkZWNvZGVkX2J1ZmZlciA9IENyZWF0ZURlY29kZWRCdWZmZXIoa1Rlc3RGcmFtZXMpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHdoZW4gdGhlIGRlY29kZWQgYnVmZmVyIGlzIGNvbnN1bWVkLCB0aGUgZGlzY2FyZHMgZnJvbSB0aGUKLSAgLy8gcHJldmlvdXMgZW5jb2RlZCBidWZmZXIgYXJlIGFwcGxpZWQuCi0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAtIGtEdXJhdGlvbiAvIDQgLSBrRHVyYXRpb24gLyA4IC0ga0R1cmF0aW9uIC8gMTYsCi0gICAgICAgICAgICBkZWNvZGVkX2J1ZmZlci0+ZHVyYXRpb24oKSk7Ci0gIEVYUEVDVF9FUShrVGVzdEZyYW1lcyAtIGtUZXN0RnJhbWVzIC8gNCAtIGtUZXN0RnJhbWVzIC8gOCAtIGtUZXN0RnJhbWVzIC8gMTYsCi0gICAgICAgICAgICBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgQ29tcGxldGVEaXNjYXJkKSB7Ci0gIEF1ZGlvRGlzY2FyZEhlbHBlciBkaXNjYXJkX2hlbHBlcihrU2FtcGxlUmF0ZSwgMCk7Ci0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLSAgZGlzY2FyZF9oZWxwZXIuUmVzZXQoMCk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBlbmNvZGVkX2J1ZmZlciA9Ci0gICAgICBDcmVhdGVFbmNvZGVkQnVmZmVyKGtUaW1lc3RhbXAsIGtEdXJhdGlvbik7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKAotICAgICAgc3RkOjptYWtlX3BhaXIoa0luZmluaXRlRHVyYXRpb24sIGJhc2U6OlRpbWVEZWx0YSgpKSk7Ci0gIHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+IGRlY29kZWRfYnVmZmVyID0gQ3JlYXRlRGVjb2RlZEJ1ZmZlcihrVGVzdEZyYW1lcyk7Ci0KLSAgLy8gVmVyaWZ5IGFsbCBvZiB0aGUgZmlyc3QgYnVmZmVyIGlzIGRpc2NhcmRlZC4KLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLSAgZW5jb2RlZF9idWZmZXItPnNldF90aW1lc3RhbXAoa1RpbWVzdGFtcCArIGtEdXJhdGlvbik7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKERlY29kZXJCdWZmZXI6OkRpc2NhcmRQYWRkaW5nKCkpOwotCi0gIC8vIFZlcmlmeSBhIHNlY29uZCBidWZmZXIgZ29lcyB0aHJvdWdoIHVudG91Y2hlZC4KLSAgZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzIC8gMik7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAvIDIsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzIC8gMiwgZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgRXh0cmFjdERlY29kZWREYXRhKGRlY29kZWRfYnVmZmVyLCAwKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgQ29tcGxldGVEaXNjYXJkV2l0aERlbGF5ZWREaXNjYXJkKSB7Ci0gIEF1ZGlvRGlzY2FyZEhlbHBlciBkaXNjYXJkX2hlbHBlcihrU2FtcGxlUmF0ZSwgMCk7Ci0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLSAgZGlzY2FyZF9oZWxwZXIuUmVzZXQoMCk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBlbmNvZGVkX2J1ZmZlciA9Ci0gICAgICBDcmVhdGVFbmNvZGVkQnVmZmVyKGtUaW1lc3RhbXAsIGtEdXJhdGlvbik7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKAotICAgICAgc3RkOjptYWtlX3BhaXIoa0luZmluaXRlRHVyYXRpb24sIGJhc2U6OlRpbWVEZWx0YSgpKSk7Ci0gIHNjb3BlZF9yZWZwdHI8QXVkaW9CdWZmZXI+IGRlY29kZWRfYnVmZmVyID0gQ3JlYXRlRGVjb2RlZEJ1ZmZlcihrVGVzdEZyYW1lcyk7Ci0KLSAgLy8gU2V0dXAgYSBkZWxheWVkIGRpc2NhcmQuCi0gIEFTU0VSVF9GQUxTRShkaXNjYXJkX2hlbHBlci5Qcm9jZXNzQnVmZmVycyhlbmNvZGVkX2J1ZmZlciwgTlVMTCkpOwotICBBU1NFUlRfVFJVRShkaXNjYXJkX2hlbHBlci5pbml0aWFsaXplZCgpKTsKLQotICAvLyBWZXJpZnkgdGhlIGZpcnN0IG91dHB1dCBidWZmZXIgaXMgZHJvcHBlZC4KLSAgZW5jb2RlZF9idWZmZXItPnNldF90aW1lc3RhbXAoa1RpbWVzdGFtcCArIGtEdXJhdGlvbik7Ci0gIGVuY29kZWRfYnVmZmVyLT5zZXRfZGlzY2FyZF9wYWRkaW5nKERlY29kZXJCdWZmZXI6OkRpc2NhcmRQYWRkaW5nKCkpOwotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBzZWNvbmQgYnVmZmVyIGdvZXMgdGhyb3VnaCB1bnRvdWNoZWQuCi0gIGVuY29kZWRfYnVmZmVyLT5zZXRfdGltZXN0YW1wKGtUaW1lc3RhbXAgKyAyICoga0R1cmF0aW9uKTsKLSAgZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzIC8gMik7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAvIDIsIGRlY29kZWRfYnVmZmVyLT5kdXJhdGlvbigpKTsKLSAgRVhQRUNUX0VRKGtUZXN0RnJhbWVzIC8gMiwgZGVjb2RlZF9idWZmZXItPmZyYW1lX2NvdW50KCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgRXh0cmFjdERlY29kZWREYXRhKGRlY29kZWRfYnVmZmVyLCAwKSk7Ci19Ci0KLVRFU1QoQXVkaW9EaXNjYXJkSGVscGVyVGVzdCwgQ29tcGxldGVEaXNjYXJkV2l0aEluaXRpYWxEaXNjYXJkRGVjb2RlckRlbGF5KSB7Ci0gIC8vIFVzZSBhIGRlY29kZXIgZGVsYXkgb2YgNW1zLgotICBjb25zdCBpbnQga0RlY29kZXJEZWxheSA9IGtTYW1wbGVSYXRlIC8gMTAwIC8gMjsKLSAgQXVkaW9EaXNjYXJkSGVscGVyIGRpc2NhcmRfaGVscGVyKGtTYW1wbGVSYXRlLCBrRGVjb2RlckRlbGF5KTsKLSAgQVNTRVJUX0ZBTFNFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBkaXNjYXJkX2hlbHBlci5SZXNldChrRGVjb2RlckRlbGF5KTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgY29uc3QgaW50IGtUZXN0RnJhbWVzID0gZGlzY2FyZF9oZWxwZXIuVGltZURlbHRhVG9GcmFtZXMoa0R1cmF0aW9uKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGVuY29kZWRfYnVmZmVyID0KLSAgICAgIENyZWF0ZUVuY29kZWRCdWZmZXIoa1RpbWVzdGFtcCwga0R1cmF0aW9uKTsKLSAgZW5jb2RlZF9idWZmZXItPnNldF9kaXNjYXJkX3BhZGRpbmcoCi0gICAgICBzdGQ6Om1ha2VfcGFpcihrSW5maW5pdGVEdXJhdGlvbiwgYmFzZTo6VGltZURlbHRhKCkpKTsKLSAgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzKTsKLQotICAvLyBWZXJpZnkgYWxsIG9mIHRoZSBmaXJzdCBidWZmZXIgaXMgZGlzY2FyZGVkLgotICBBU1NFUlRfRkFMU0UoZGlzY2FyZF9oZWxwZXIuUHJvY2Vzc0J1ZmZlcnMoZW5jb2RlZF9idWZmZXIsIGRlY29kZWRfYnVmZmVyKSk7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLmluaXRpYWxpemVkKCkpOwotICBlbmNvZGVkX2J1ZmZlci0+c2V0X3RpbWVzdGFtcChrVGltZXN0YW1wICsga0R1cmF0aW9uKTsKLSAgZW5jb2RlZF9idWZmZXItPnNldF9kaXNjYXJkX3BhZGRpbmcoRGVjb2RlckJ1ZmZlcjo6RGlzY2FyZFBhZGRpbmcoKSk7Ci0KLSAgLy8gVmVyaWZ5IDVtcyBvZmYgdGhlIGZyb250IG9mIHRoZSBzZWNvbmQgYnVmZmVyIGlzIGRpc2NhcmRlZC4KLSAgZGVjb2RlZF9idWZmZXIgPSBDcmVhdGVEZWNvZGVkQnVmZmVyKGtUZXN0RnJhbWVzICogMik7Ci0gIEFTU0VSVF9UUlVFKGRpc2NhcmRfaGVscGVyLlByb2Nlc3NCdWZmZXJzKGVuY29kZWRfYnVmZmVyLCBkZWNvZGVkX2J1ZmZlcikpOwotICBFWFBFQ1RfRVEoa1RpbWVzdGFtcCwgZGVjb2RlZF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgRVhQRUNUX0VRKGtEdXJhdGlvbiAqIDIgLSBrRHVyYXRpb24gLyAyLCBkZWNvZGVkX2J1ZmZlci0+ZHVyYXRpb24oKSk7Ci0gIEVYUEVDVF9FUShrVGVzdEZyYW1lcyAqIDIgLSBrRGVjb2RlckRlbGF5LCBkZWNvZGVkX2J1ZmZlci0+ZnJhbWVfY291bnQoKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShrRGVjb2RlckRlbGF5ICoga0RhdGFTdGVwLAotICAgICAgICAgICAgICAgICAgRXh0cmFjdERlY29kZWREYXRhKGRlY29kZWRfYnVmZmVyLCAwKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3BhcmFtZXRlcnMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDgyOGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbGltaXRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotQXVkaW9QYXJhbWV0ZXJzOjpBdWRpb1BhcmFtZXRlcnMoKQotICAgIDogQXVkaW9QYXJhbWV0ZXJzKEFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX05PTkUsIDAsIDAsIDApIHt9Ci0KLUF1ZGlvUGFyYW1ldGVyczo6QXVkaW9QYXJhbWV0ZXJzKEZvcm1hdCBmb3JtYXQsIENoYW5uZWxMYXlvdXQgY2hhbm5lbF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGUsIGludCBiaXRzX3Blcl9zYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVzX3Blcl9idWZmZXIpCi0gICAgOiBsYXRlbmN5X3RhZ18oQXVkaW9MYXRlbmN5OjpMQVRFTkNZX0NPVU5UKSB7Ci0gIFJlc2V0KGZvcm1hdCwgY2hhbm5lbF9sYXlvdXQsIHNhbXBsZV9yYXRlLCBiaXRzX3Blcl9zYW1wbGUsCi0gICAgICAgIGZyYW1lc19wZXJfYnVmZmVyKTsKLX0KLQotQXVkaW9QYXJhbWV0ZXJzOjp+QXVkaW9QYXJhbWV0ZXJzKCkge30KLQotQXVkaW9QYXJhbWV0ZXJzOjpBdWRpb1BhcmFtZXRlcnMoY29uc3QgQXVkaW9QYXJhbWV0ZXJzJikgPSBkZWZhdWx0OwotQXVkaW9QYXJhbWV0ZXJzJiBBdWRpb1BhcmFtZXRlcnM6Om9wZXJhdG9yPShjb25zdCBBdWRpb1BhcmFtZXRlcnMmKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgQXVkaW9QYXJhbWV0ZXJzOjpSZXNldChGb3JtYXQgZm9ybWF0LCBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZSwgaW50IGJpdHNfcGVyX3NhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVzX3Blcl9idWZmZXIpIHsKLSAgZm9ybWF0XyA9IGZvcm1hdDsKLSAgY2hhbm5lbF9sYXlvdXRfID0gY2hhbm5lbF9sYXlvdXQ7Ci0gIGNoYW5uZWxzXyA9IENoYW5uZWxMYXlvdXRUb0NoYW5uZWxDb3VudChjaGFubmVsX2xheW91dCk7Ci0gIHNhbXBsZV9yYXRlXyA9IHNhbXBsZV9yYXRlOwotICBiaXRzX3Blcl9zYW1wbGVfID0gYml0c19wZXJfc2FtcGxlOwotICBmcmFtZXNfcGVyX2J1ZmZlcl8gPSBmcmFtZXNfcGVyX2J1ZmZlcjsKLSAgZWZmZWN0c18gPSBOT19FRkZFQ1RTOwotICBtaWNfcG9zaXRpb25zXy5jbGVhcigpOwotfQotCi1ib29sIEF1ZGlvUGFyYW1ldGVyczo6SXNWYWxpZCgpIGNvbnN0IHsKLSAgcmV0dXJuIChjaGFubmVsc18gPiAwKSAmJiAoY2hhbm5lbHNfIDw9IG1lZGlhOjpsaW1pdHM6OmtNYXhDaGFubmVscykgJiYKLSAgICAgICAgIChjaGFubmVsX2xheW91dF8gPiBDSEFOTkVMX0xBWU9VVF9VTlNVUFBPUlRFRCkgJiYKLSAgICAgICAgIChzYW1wbGVfcmF0ZV8gPj0gbWVkaWE6OmxpbWl0czo6a01pblNhbXBsZVJhdGUpICYmCi0gICAgICAgICAoc2FtcGxlX3JhdGVfIDw9IG1lZGlhOjpsaW1pdHM6OmtNYXhTYW1wbGVSYXRlKSAmJgotICAgICAgICAgKGJpdHNfcGVyX3NhbXBsZV8gPiAwKSAmJgotICAgICAgICAgKGJpdHNfcGVyX3NhbXBsZV8gPD0gbWVkaWE6OmxpbWl0czo6a01heEJpdHNQZXJTYW1wbGUpICYmCi0gICAgICAgICAoZnJhbWVzX3Blcl9idWZmZXJfID4gMCkgJiYKLSAgICAgICAgIChmcmFtZXNfcGVyX2J1ZmZlcl8gPD0gbWVkaWE6OmxpbWl0czo6a01heFNhbXBsZXNQZXJQYWNrZXQpICYmCi0gICAgICAgICAoY2hhbm5lbF9sYXlvdXRfID09IENIQU5ORUxfTEFZT1VUX0RJU0NSRVRFIHx8Ci0gICAgICAgICAgY2hhbm5lbHNfID09IENoYW5uZWxMYXlvdXRUb0NoYW5uZWxDb3VudChjaGFubmVsX2xheW91dF8pKTsKLX0KLQotc3RkOjpzdHJpbmcgQXVkaW9QYXJhbWV0ZXJzOjpBc0h1bWFuUmVhZGFibGVTdHJpbmcoKSBjb25zdCB7Ci0gIHN0ZDo6b3N0cmluZ3N0cmVhbSBzOwotICBzIDw8ICJmb3JtYXQ6ICIgPDwgZm9ybWF0KCkgPDwgIiBjaGFubmVsX2xheW91dDogIiA8PCBjaGFubmVsX2xheW91dCgpCi0gICAgPDwgIiBjaGFubmVsczogIiA8PCBjaGFubmVscygpIDw8ICIgc2FtcGxlX3JhdGU6ICIgPDwgc2FtcGxlX3JhdGUoKQotICAgIDw8ICIgYml0c19wZXJfc2FtcGxlOiAiIDw8IGJpdHNfcGVyX3NhbXBsZSgpCi0gICAgPDwgIiBmcmFtZXNfcGVyX2J1ZmZlcjogIiA8PCBmcmFtZXNfcGVyX2J1ZmZlcigpCi0gICAgPDwgIiBlZmZlY3RzOiAiIDw8IGVmZmVjdHMoKQotICAgIDw8ICIgbWljX3Bvc2l0aW9uczogIiA8PCBQb2ludHNUb1N0cmluZyhtaWNfcG9zaXRpb25zXyk7Ci0gIHJldHVybiBzLnN0cigpOwotfQotCi1pbnQgQXVkaW9QYXJhbWV0ZXJzOjpHZXRCeXRlc1BlckJ1ZmZlcigpIGNvbnN0IHsKLSAgcmV0dXJuIGZyYW1lc19wZXJfYnVmZmVyXyAqIEdldEJ5dGVzUGVyRnJhbWUoKTsKLX0KLQotaW50IEF1ZGlvUGFyYW1ldGVyczo6R2V0Qnl0ZXNQZXJTZWNvbmQoKSBjb25zdCB7Ci0gIHJldHVybiBzYW1wbGVfcmF0ZV8gKiBHZXRCeXRlc1BlckZyYW1lKCk7Ci19Ci0KLWludCBBdWRpb1BhcmFtZXRlcnM6OkdldEJ5dGVzUGVyRnJhbWUoKSBjb25zdCB7Ci0gIHJldHVybiBjaGFubmVsc18gKiBiaXRzX3Blcl9zYW1wbGVfIC8gODsKLX0KLQotZG91YmxlIEF1ZGlvUGFyYW1ldGVyczo6R2V0TWljcm9zZWNvbmRzUGVyRnJhbWUoKSBjb25zdCB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQpIC8gc2FtcGxlX3JhdGVfOwotfQotCi1iYXNlOjpUaW1lRGVsdGEgQXVkaW9QYXJhbWV0ZXJzOjpHZXRCdWZmZXJEdXJhdGlvbigpIGNvbnN0IHsKLSAgcmV0dXJuIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhzdGF0aWNfY2FzdDxpbnQ2NF90PigKLSAgICAgIGZyYW1lc19wZXJfYnVmZmVyXyAqIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQgLwotICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNhbXBsZV9yYXRlXykpKTsKLX0KLQotYm9vbCBBdWRpb1BhcmFtZXRlcnM6OkVxdWFscyhjb25zdCBBdWRpb1BhcmFtZXRlcnMmIG90aGVyKSBjb25zdCB7Ci0gIHJldHVybiBmb3JtYXRfID09IG90aGVyLmZvcm1hdCgpICYmIHNhbXBsZV9yYXRlXyA9PSBvdGhlci5zYW1wbGVfcmF0ZSgpICYmCi0gICAgICAgICBjaGFubmVsX2xheW91dF8gPT0gb3RoZXIuY2hhbm5lbF9sYXlvdXQoKSAmJgotICAgICAgICAgY2hhbm5lbHNfID09IG90aGVyLmNoYW5uZWxzKCkgJiYKLSAgICAgICAgIGJpdHNfcGVyX3NhbXBsZV8gPT0gb3RoZXIuYml0c19wZXJfc2FtcGxlKCkgJiYKLSAgICAgICAgIGZyYW1lc19wZXJfYnVmZmVyXyA9PSBvdGhlci5mcmFtZXNfcGVyX2J1ZmZlcigpICYmCi0gICAgICAgICBlZmZlY3RzXyA9PSBvdGhlci5lZmZlY3RzKCkgJiYgbWljX3Bvc2l0aW9uc18gPT0gb3RoZXIubWljX3Bvc2l0aW9uc187Ci19Ci0KLS8vIHN0YXRpYwotQXVkaW9QYXJhbWV0ZXJzIEF1ZGlvUGFyYW1ldGVyczo6VW5hdmFpbGFibGVEZXZpY2VQYXJhbXMoKSB7Ci0gIHJldHVybiBtZWRpYTo6QXVkaW9QYXJhbWV0ZXJzKAotICAgICAgbWVkaWE6OkF1ZGlvUGFyYW1ldGVyczo6QVVESU9fRkFLRSwgbWVkaWE6OkNIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgIG1lZGlhOjpBdWRpb1BhcmFtZXRlcnM6OmtBdWRpb0NEU2FtcGxlUmF0ZSwgMTYsCi0gICAgICBtZWRpYTo6QXVkaW9QYXJhbWV0ZXJzOjprQXVkaW9DRFNhbXBsZVJhdGUgLyAxMCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTIwZGE4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3BhcmFtZXRlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0FVRElPX1BBUkFNRVRFUlNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fUEFSQU1FVEVSU19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2J1cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2xhdGVuY3kuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19wb2ludC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVXNlIGEgc3RydWN0LWluLXN0cnVjdCBhcHByb2FjaCB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSByZXF1aXJlZAotLy8gc2l6ZSBhcyBzaXplb2YoQXVkaW97SW5wdXQsT3V0cHV0fUJ1ZmZlclBhcmFtZXRlcnMpICsgIyhieXRlcyBpbiBhdWRpbwotLy8gYnVmZmVyKSB3aXRob3V0IHVzaW5nIHBhY2tpbmcuIEFsc28gYWxpZ24gQXVkaW97SW5wdXQsT3V0cHV0fUJ1ZmZlclBhcmFtZXRlcnMKLS8vIGluc3RlYWQgb2YgaW4gQXVkaW97SW5wdXQsT3V0cHV0fUJ1ZmZlciB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBzaXplIGxpa2Ugc28uCi0vLyBVc2UgYSBtYWNybyBmb3IgdGhlIGFsaWdubWVudCB2YWx1ZSB0aGF0J3MgdGhlIHNhbWUgYXMKLS8vIEF1ZGlvQnVzOjprQ2hhbm5lbEFsaWdubWVudCwgc2luY2UgTVNWQyBkb2Vzbid0IGFjY2VwdCB0aGUgbGF0dGVyIHRvIGJlIHVzZWQuCi0jaWYgZGVmaW5lZChPU19XSU4pCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDMyNCkgIC8vIERpc2FibGUgd2FybmluZyBmb3IgYWRkZWQgcGFkZGluZy4KLSNlbmRpZgotI2RlZmluZSBQQVJBTUVURVJTX0FMSUdOTUVOVCAxNgotc3RhdGljX2Fzc2VydChBdWRpb0J1czo6a0NoYW5uZWxBbGlnbm1lbnQgPT0gUEFSQU1FVEVSU19BTElHTk1FTlQsCi0gICAgICAgICAgICAgICJBdWRpbyBidWZmZXIgcGFyYW1ldGVycyBzdHJ1Y3QgYWxpZ25tZW50IG5vdCBzYW1lIGFzIEF1ZGlvQnVzIik7Ci1zdHJ1Y3QgTUVESUFfRVhQT1JUIEFMSUdOQVMoUEFSQU1FVEVSU19BTElHTk1FTlQpIEF1ZGlvSW5wdXRCdWZmZXJQYXJhbWV0ZXJzIHsKLSAgZG91YmxlIHZvbHVtZTsKLSAgdWludDMyX3Qgc2l6ZTsKLSAgdWludDMyX3QgaGFyZHdhcmVfZGVsYXlfYnl0ZXM7Ci0gIHVpbnQzMl90IGlkOwotICBib29sIGtleV9wcmVzc2VkOwotfTsKLXN0cnVjdCBNRURJQV9FWFBPUlQgQUxJR05BUyhQQVJBTUVURVJTX0FMSUdOTUVOVCkgQXVkaW9PdXRwdXRCdWZmZXJQYXJhbWV0ZXJzIHsKLSAgdWludDMyX3QgZnJhbWVzX3NraXBwZWQ7Ci19OwotI3VuZGVmIFBBUkFNRVRFUlNfQUxJR05NRU5UCi0jaWYgZGVmaW5lZChPU19XSU4pCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEF1ZGlvSW5wdXRCdWZmZXJQYXJhbWV0ZXJzKSAlCi0gICAgICAgICAgICAgICAgICAgICAgQXVkaW9CdXM6OmtDaGFubmVsQWxpZ25tZW50ID09Ci0gICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAiQXVkaW9JbnB1dEJ1ZmZlclBhcmFtZXRlcnMgbm90IGFsaWduZWQiKTsKLXN0YXRpY19hc3NlcnQoc2l6ZW9mKEF1ZGlvT3V0cHV0QnVmZmVyUGFyYW1ldGVycykgJQotICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvQnVzOjprQ2hhbm5lbEFsaWdubWVudCA9PQotICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgIkF1ZGlvT3V0cHV0QnVmZmVyUGFyYW1ldGVycyBub3QgYWxpZ25lZCIpOwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEF1ZGlvSW5wdXRCdWZmZXIgewotICBBdWRpb0lucHV0QnVmZmVyUGFyYW1ldGVycyBwYXJhbXM7Ci0gIGludDhfdCBhdWRpb1sxXTsKLX07Ci1zdHJ1Y3QgTUVESUFfRVhQT1JUIEF1ZGlvT3V0cHV0QnVmZmVyIHsKLSAgQXVkaW9PdXRwdXRCdWZmZXJQYXJhbWV0ZXJzIHBhcmFtczsKLSAgaW50OF90IGF1ZGlvWzFdOwotfTsKLQotY2xhc3MgTUVESUFfRVhQT1JUIEF1ZGlvUGFyYW1ldGVycyB7Ci0gcHVibGljOgotICAvLyBUT0RPKG1pdSk6IFJlbmFtZSB0aGlzIGVudW0gdG8gc29tZXRoaW5nIHRoYXQgY29ycmVjdGx5IHJlZmxlY3RzIGl0cwotICAvLyBzZW1hbnRpY3MsIHN1Y2ggYXMgIlRyYW5zcG9ydFNjaGVtZS4iCi0gIGVudW0gRm9ybWF0IHsKLSAgICBBVURJT19QQ01fTElORUFSID0gMCwgICAgICAgICAgICAvLyBQQ00gaXMgJ3JhdycgYW1wbGl0dWRlIHNhbXBsZXMuCi0gICAgQVVESU9fUENNX0xPV19MQVRFTkNZLCAgICAgICAgICAgLy8gTGluZWFyIFBDTSwgbG93IGxhdGVuY3kgcmVxdWVzdGVkLgotICAgIEFVRElPX0ZBS0UsICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBmYWtlIEF1ZGlvT3V0cHV0U3RyZWFtIG9iamVjdC4KLSAgICBBVURJT19GT1JNQVRfTEFTVCA9IEFVRElPX0ZBS0UsICAvLyBPbmx5IHVzZWQgZm9yIHZhbGlkYXRpb24gb2YgZm9ybWF0LgotICB9OwotCi0gIGVudW0gewotICAgIC8vIFRlbGVwaG9uZSBxdWFsaXR5IHNhbXBsZSByYXRlLCBtb3N0bHkgZm9yIHNwZWVjaC1vbmx5IGF1ZGlvLgotICAgIGtUZWxlcGhvbmVTYW1wbGVSYXRlID0gODAwMCwKLSAgICAvLyBDRCBzYW1wbGluZyByYXRlIGlzIDQ0LjEgS0h6IG9yIGNvbnZlbmllbnRseSAyeDJ4M3gzeDV4NXg3eDcuCi0gICAga0F1ZGlvQ0RTYW1wbGVSYXRlID0gNDQxMDAsCi0gIH07Ci0KLSAgLy8gQml0bWFza3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgY2VydGFpbiBwbGF0Zm9ybSAodHlwaWNhbGx5IGhhcmR3YXJlKSBhdWRpbwotICAvLyBlZmZlY3RzIHNob3VsZCBiZSBlbmFibGVkLgotICBlbnVtIFBsYXRmb3JtRWZmZWN0c01hc2sgewotICAgIE5PX0VGRkVDVFMgPSAweDAsCi0gICAgRUNIT19DQU5DRUxMRVIgPSAweDEsCi0gICAgRFVDS0lORyA9IDB4MiwgIC8vIEVuYWJsZXMgZHVja2luZyBpZiB0aGUgT1Mgc3VwcG9ydHMgaXQuCi0gICAgS0VZQk9BUkRfTUlDID0gMHg0LAotICAgIEhPVFdPUkQgPSAweDgsCi0gIH07Ci0KLSAgQXVkaW9QYXJhbWV0ZXJzKCk7Ci0gIEF1ZGlvUGFyYW1ldGVycyhGb3JtYXQgZm9ybWF0LCBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LCBpbnQgc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICBpbnQgYml0c19wZXJfc2FtcGxlLCBpbnQgZnJhbWVzX3Blcl9idWZmZXIpOwotCi0gIH5BdWRpb1BhcmFtZXRlcnMoKTsKLQotICAvLyBSZS1pbml0aWFsaXplcyBhbGwgbWVtYmVycy4KLSAgdm9pZCBSZXNldChGb3JtYXQgZm9ybWF0LCBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LCBpbnQgc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgaW50IGJpdHNfcGVyX3NhbXBsZSwgaW50IGZyYW1lc19wZXJfYnVmZmVyKTsKLQotICAvLyBDaGVja3MgdGhhdCBhbGwgdmFsdWVzIGFyZSBpbiB0aGUgZXhwZWN0ZWQgcmFuZ2UuIEFsbCBsaW1pdHMgYXJlIHNwZWNpZmllZAotICAvLyBpbiBtZWRpYTo6TGltaXRzLgotICBib29sIElzVmFsaWQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgfCp0aGlzfC4gIEZvciBkZWJ1Z2dpbmcgJiB0ZXN0Ci0gIC8vIG91dHB1dCBvbmx5LgotICBzdGQ6OnN0cmluZyBBc0h1bWFuUmVhZGFibGVTdHJpbmcoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHNpemUgb2YgYXVkaW8gYnVmZmVyIGluIGJ5dGVzLgotICBpbnQgR2V0Qnl0ZXNQZXJCdWZmZXIoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVwcmVzZW50aW5nIG9uZSBzZWNvbmQgb2YgYXVkaW8uCi0gIGludCBHZXRCeXRlc1BlclNlY29uZCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZXByZXNlbnRpbmcgYSBmcmFtZSBvZiBhdWRpby4KLSAgaW50IEdldEJ5dGVzUGVyRnJhbWUoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIHBlciBmcmFtZSBvZiBhdWRpby4gSW50ZW50aW9uYWxseQotICAvLyByZXBvcnRlZCBhcyBhIGRvdWJsZSB0byBzdXJmYWNlIG9mIHBhcnRpYWwgbWljcm9zZWNvbmRzIHBlciBmcmFtZSwgd2hpY2gKLSAgLy8gaXMgY29tbW9uIGZvciBtYW55IHNhbXBsZSByYXRlcy4gRmFpbGluZyB0byBhY2NvdW50IGZvciB0aGVzZSBuYW5vc2Vjb25kcwotICAvLyBjYW4gbGVhZCB0byBhdWRpby92aWRlbyBzeW5jIGRyaWZ0LgotICBkb3VibGUgR2V0TWljcm9zZWNvbmRzUGVyRnJhbWUoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGJ1ZmZlciBhcyBjYWxjdWxhdGVkIGZyb20gZnJhbWVzX3Blcl9idWZmZXIoKQotICAvLyBhbmQgc2FtcGxlX3JhdGUoKS4KLSAgYmFzZTo6VGltZURlbHRhIEdldEJ1ZmZlckR1cmF0aW9uKCkgY29uc3Q7Ci0KLSAgLy8gQ29tcGFyaXNvbiB3aXRoIG90aGVyIEF1ZGlvUGFyYW1zLgotICBib29sIEVxdWFscyhjb25zdCBBdWRpb1BhcmFtZXRlcnMmIG90aGVyKSBjb25zdDsKLQotICB2b2lkIHNldF9mb3JtYXQoRm9ybWF0IGZvcm1hdCkgeyBmb3JtYXRfID0gZm9ybWF0OyB9Ci0gIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBmb3JtYXRfOyB9Ci0KLSAgLy8gQSBzZXR0ZXIgZm9yIGNoYW5uZWxfbGF5b3V0XyBpcyBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVkLgotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gY2hhbm5lbF9sYXlvdXRfOyB9Ci0KLSAgLy8gVGhlIG51bWJlciBvZiBjaGFubmVscyBpcyB1c3VhbGx5IGNvbXB1dGVkIGZyb20gY2hhbm5lbF9sYXlvdXRfLiBTZXR0aW5nCi0gIC8vIHRoaXMgZXhwbGljaXRseSBpcyBvbmx5IHJlcXVpcmVkIHdpdGggQ0hBTk5FTF9MQVlPVVRfRElTQ1JFVEUuCi0gIHZvaWQgc2V0X2NoYW5uZWxzX2Zvcl9kaXNjcmV0ZShpbnQgY2hhbm5lbHMpIHsKLSAgICBEQ0hFQ0soY2hhbm5lbF9sYXlvdXRfID09IENIQU5ORUxfTEFZT1VUX0RJU0NSRVRFIHx8Ci0gICAgICAgICAgIGNoYW5uZWxzID09IENoYW5uZWxMYXlvdXRUb0NoYW5uZWxDb3VudChjaGFubmVsX2xheW91dF8pKTsKLSAgICBjaGFubmVsc18gPSBjaGFubmVsczsKLSAgfQotICBpbnQgY2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiBjaGFubmVsc187IH0KLQotICB2b2lkIHNldF9zYW1wbGVfcmF0ZShpbnQgc2FtcGxlX3JhdGUpIHsgc2FtcGxlX3JhdGVfID0gc2FtcGxlX3JhdGU7IH0KLSAgaW50IHNhbXBsZV9yYXRlKCkgY29uc3QgeyByZXR1cm4gc2FtcGxlX3JhdGVfOyB9Ci0KLSAgdm9pZCBzZXRfYml0c19wZXJfc2FtcGxlKGludCBiaXRzX3Blcl9zYW1wbGUpIHsKLSAgICBiaXRzX3Blcl9zYW1wbGVfID0gYml0c19wZXJfc2FtcGxlOwotICB9Ci0gIGludCBiaXRzX3Blcl9zYW1wbGUoKSBjb25zdCB7IHJldHVybiBiaXRzX3Blcl9zYW1wbGVfOyB9Ci0KLSAgdm9pZCBzZXRfZnJhbWVzX3Blcl9idWZmZXIoaW50IGZyYW1lc19wZXJfYnVmZmVyKSB7Ci0gICAgZnJhbWVzX3Blcl9idWZmZXJfID0gZnJhbWVzX3Blcl9idWZmZXI7Ci0gIH0KLSAgaW50IGZyYW1lc19wZXJfYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZnJhbWVzX3Blcl9idWZmZXJfOyB9Ci0KLSAgdm9pZCBzZXRfZWZmZWN0cyhpbnQgZWZmZWN0cykgeyBlZmZlY3RzXyA9IGVmZmVjdHM7IH0KLSAgaW50IGVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBlZmZlY3RzXzsgfQotCi0gIHZvaWQgc2V0X21pY19wb3NpdGlvbnMoY29uc3Qgc3RkOjp2ZWN0b3I8UG9pbnQ+JiBtaWNfcG9zaXRpb25zKSB7Ci0gICAgbWljX3Bvc2l0aW9uc18gPSBtaWNfcG9zaXRpb25zOwotICB9Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPFBvaW50PiYgbWljX3Bvc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1pY19wb3NpdGlvbnNfOyB9Ci0KLSAgdm9pZCBzZXRfbGF0ZW5jeV90YWcoQXVkaW9MYXRlbmN5OjpMYXRlbmN5VHlwZSBsYXRlbmN5X3RhZykgewotICAgIGxhdGVuY3lfdGFnXyA9IGxhdGVuY3lfdGFnOwotICB9Ci0gIEF1ZGlvTGF0ZW5jeTo6TGF0ZW5jeVR5cGUgbGF0ZW5jeV90YWcoKSBjb25zdCB7IHJldHVybiBsYXRlbmN5X3RhZ187IH0KLQotICBBdWRpb1BhcmFtZXRlcnMoY29uc3QgQXVkaW9QYXJhbWV0ZXJzJik7Ci0gIEF1ZGlvUGFyYW1ldGVycyYgb3BlcmF0b3I9KGNvbnN0IEF1ZGlvUGFyYW1ldGVycyYpOwotCi0gIC8vIENyZWF0ZXMgcmVhc29uYWJsZSBkdW1teSBwYXJhbWV0ZXJzIGluIGNhc2Ugbm8gZGV2aWNlIGlzIGF2YWlsYWJsZS4KLSAgc3RhdGljIEF1ZGlvUGFyYW1ldGVycyBVbmF2YWlsYWJsZURldmljZVBhcmFtcygpOwotCi0gcHJpdmF0ZToKLSAgRm9ybWF0IGZvcm1hdF87ICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgb2YgdGhlIHN0cmVhbS4KLSAgQ2hhbm5lbExheW91dCBjaGFubmVsX2xheW91dF87ICAvLyBPcmRlciBvZiBzdXJyb3VuZCBzb3VuZCBjaGFubmVscy4KLSAgaW50IGNoYW5uZWxzXzsgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMuIFZhbHVlIHNldCBiYXNlZCBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHxjaGFubmVsX2xheW91dHwuCi0gIGludCBzYW1wbGVfcmF0ZV87ICAgICAgICAgICAgICAgLy8gU2FtcGxpbmcgZnJlcXVlbmN5L3JhdGUuCi0gIGludCBiaXRzX3Blcl9zYW1wbGVfOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZS4KLSAgaW50IGZyYW1lc19wZXJfYnVmZmVyXzsgICAgICAgICAvLyBOdW1iZXIgb2YgZnJhbWVzIGluIGEgYnVmZmVyLgotICBpbnQgZWZmZWN0c187ICAgICAgICAgICAgICAgICAgIC8vIEJpdG1hc2sgdXNpbmcgUGxhdGZvcm1FZmZlY3RzTWFzay4KLQotICAvLyBNaWNyb3Bob25lIHBvc2l0aW9ucyB1c2luZyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXM6Ci0gIC8vIHg6IHRoZSBob3Jpem9udGFsIGRpbWVuc2lvbiwgd2l0aCBwb3NpdGl2ZSB0byB0aGUgcmlnaHQgZnJvbSB0aGUgY2FtZXJhJ3MKLSAgLy8gICAgcGVyc3BlY3RpdmUuCi0gIC8vIHk6IHRoZSBkZXB0aCBkaW1lbnNpb24sIHdpdGggcG9zaXRpdmUgZm9yd2FyZCBmcm9tIHRoZSBjYW1lcmEncwotICAvLyAgICBwZXJzcGVjdGl2ZS4KLSAgLy8gejogdGhlIHZlcnRpY2FsIGRpbWVuc2lvbiwgd2l0aCBwb3NpdGl2ZSB1cHdhcmRzLgotICAvLwotICAvLyBVc3VhbGx5LCB0aGUgY2VudGVyIG9mIHRoZSBtaWNyb3Bob25lIGFycmF5IHdpbGwgYmUgdHJlYXRlZCBhcyB0aGUgb3JpZ2luCi0gIC8vIChvZnRlbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNhbWVyYSkuCi0gIC8vCi0gIC8vIEFuIGVtcHR5IHZlY3RvciBpbmRpY2F0ZXMgdW5rbm93biBwb3NpdGlvbnMuCi0gIHN0ZDo6dmVjdG9yPFBvaW50PiBtaWNfcG9zaXRpb25zXzsKLQotICAvLyBPcHRpb25hbCB0YWcgdG8gcGFzcyBsYXRlbmN5IGluZm8gZnJvbSByZW5kZXJlciB0byBicm93c2VyLiBTZXQgdG8KLSAgLy8gQXVkaW9MYXRlbmN5OjpMQVRFTkNZX0NPVU5UIGJ5IGRlZmF1bHQsIHdoaWNoIG1lYW5zICJub3Qgc3BlY2lmaWVkIi4KLSAgQXVkaW9MYXRlbmN5OjpMYXRlbmN5VHlwZSBsYXRlbmN5X3RhZ187Ci19OwotCi0vLyBDb21wYXJpc29uIGlzIHVzZWZ1bCB3aGVuIEF1ZGlvUGFyYW1ldGVycyBpcyB1c2VkIHdpdGggc3RkIHN0cnVjdHVyZXMuCi1pbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBhLCBjb25zdCBBdWRpb1BhcmFtZXRlcnMmIGIpIHsKLSAgaWYgKGEuZm9ybWF0KCkgIT0gYi5mb3JtYXQoKSkgcmV0dXJuIGEuZm9ybWF0KCkgPCBiLmZvcm1hdCgpOwotICBpZiAoYS5jaGFubmVscygpICE9IGIuY2hhbm5lbHMoKSkgcmV0dXJuIGEuY2hhbm5lbHMoKSA8IGIuY2hhbm5lbHMoKTsKLSAgaWYgKGEuc2FtcGxlX3JhdGUoKSAhPSBiLnNhbXBsZV9yYXRlKCkpCi0gICAgcmV0dXJuIGEuc2FtcGxlX3JhdGUoKSA8IGIuc2FtcGxlX3JhdGUoKTsKLSAgaWYgKGEuYml0c19wZXJfc2FtcGxlKCkgIT0gYi5iaXRzX3Blcl9zYW1wbGUoKSkKLSAgICByZXR1cm4gYS5iaXRzX3Blcl9zYW1wbGUoKSA8IGIuYml0c19wZXJfc2FtcGxlKCk7Ci0gIHJldHVybiBhLmZyYW1lc19wZXJfYnVmZmVyKCkgPCBiLmZyYW1lc19wZXJfYnVmZmVyKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0FVRElPX1BBUkFNRVRFUlNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3BhcmFtZXRlcnNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19wYXJhbWV0ZXJzX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDBiYzM3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3BhcmFtZXRlcnNfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3BhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRFU1QoQXVkaW9QYXJhbWV0ZXJzLCBDb25zdHJ1Y3Rvcl9EZWZhdWx0KSB7Ci0gIEF1ZGlvUGFyYW1ldGVyczo6Rm9ybWF0IGV4cGVjdGVkX2Zvcm1hdCA9IEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUjsKLSAgaW50IGV4cGVjdGVkX2JpdHMgPSAwOwotICBpbnQgZXhwZWN0ZWRfY2hhbm5lbHMgPSAwOwotICBDaGFubmVsTGF5b3V0IGV4cGVjdGVkX2NoYW5uZWxfbGF5b3V0ID0gQ0hBTk5FTF9MQVlPVVRfTk9ORTsKLSAgaW50IGV4cGVjdGVkX3JhdGUgPSAwOwotICBpbnQgZXhwZWN0ZWRfc2FtcGxlcyA9IDA7Ci0gIEF1ZGlvUGFyYW1ldGVyczo6UGxhdGZvcm1FZmZlY3RzTWFzayBleHBlY3RlZF9lZmZlY3RzID0KLSAgICAgIEF1ZGlvUGFyYW1ldGVyczo6Tk9fRUZGRUNUUzsKLSAgc3RkOjp2ZWN0b3I8UG9pbnQ+IGV4cGVjdGVkX21pY19wb3NpdGlvbnM7Ci0KLSAgQXVkaW9QYXJhbWV0ZXJzIHBhcmFtczsKLQotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZm9ybWF0LCBwYXJhbXMuZm9ybWF0KCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfYml0cywgcGFyYW1zLmJpdHNfcGVyX3NhbXBsZSgpKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2NoYW5uZWxzLCBwYXJhbXMuY2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9jaGFubmVsX2xheW91dCwgcGFyYW1zLmNoYW5uZWxfbGF5b3V0KCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfcmF0ZSwgcGFyYW1zLnNhbXBsZV9yYXRlKCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfc2FtcGxlcywgcGFyYW1zLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZWZmZWN0cywgcGFyYW1zLmVmZmVjdHMoKSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9taWNfcG9zaXRpb25zLCBwYXJhbXMubWljX3Bvc2l0aW9ucygpKTsKLX0KLQotVEVTVChBdWRpb1BhcmFtZXRlcnMsIENvbnN0cnVjdG9yX1BhcmFtZXRlclZhbHVlcykgewotICBBdWRpb1BhcmFtZXRlcnM6OkZvcm1hdCBleHBlY3RlZF9mb3JtYXQgPQotICAgICAgQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1k7Ci0gIGludCBleHBlY3RlZF9iaXRzID0gMTY7Ci0gIGludCBleHBlY3RlZF9jaGFubmVscyA9IDY7Ci0gIENoYW5uZWxMYXlvdXQgZXhwZWN0ZWRfY2hhbm5lbF9sYXlvdXQgPSBDSEFOTkVMX0xBWU9VVF81XzE7Ci0gIGludCBleHBlY3RlZF9yYXRlID0gNDQxMDA7Ci0gIGludCBleHBlY3RlZF9zYW1wbGVzID0gODgwOwotCi0gIEF1ZGlvUGFyYW1ldGVycyBwYXJhbXMoZXhwZWN0ZWRfZm9ybWF0LCBleHBlY3RlZF9jaGFubmVsX2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yYXRlLCBleHBlY3RlZF9iaXRzLCBleHBlY3RlZF9zYW1wbGVzKTsKLQotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZm9ybWF0LCBwYXJhbXMuZm9ybWF0KCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfYml0cywgcGFyYW1zLmJpdHNfcGVyX3NhbXBsZSgpKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2NoYW5uZWxzLCBwYXJhbXMuY2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9jaGFubmVsX2xheW91dCwgcGFyYW1zLmNoYW5uZWxfbGF5b3V0KCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfcmF0ZSwgcGFyYW1zLnNhbXBsZV9yYXRlKCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfc2FtcGxlcywgcGFyYW1zLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotfQotCi1URVNUKEF1ZGlvUGFyYW1ldGVycywgR2V0Qnl0ZXNQZXJCdWZmZXIpIHsKLSAgRVhQRUNUX0VRKDEwMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDEwMDAsIDgsIDEwMCkKLSAgICAgICAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDIwMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDEwMDAsIDE2LCAxMDApCi0gICAgICAgICAgICAgICAgICAgICAuR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEVYUEVDVF9FUSgyMDAsIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDEwMDAsIDgsIDEwMCkKLSAgICAgICAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDIwMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDEwMDAsIDgsIDIwMCkKLSAgICAgICAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDgwMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgMTAwMCwgMTYsIDIwMCkKLSAgICAgICAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKAotICAgICAgMzAwLCBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDgsIDEwMCkKLSAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLX0KLQotVEVTVChBdWRpb1BhcmFtZXRlcnMsIEdldEJ5dGVzUGVyU2Vjb25kKSB7Ci0gIEVYUEVDVF9FUSgwLCBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX05PTkUsIDAsIDAsIDApCi0gICAgICAgICAgICAgICAgICAgLkdldEJ5dGVzUGVyU2Vjb25kKCkpOwotICBFWFBFQ1RfRVEoMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDAsIDAsIDApCi0gICAgICAgICAgICAgICAgICAgLkdldEJ5dGVzUGVyU2Vjb25kKCkpOwotICBFWFBFQ1RfRVEoMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9OT05FLCAxMDAsIDAsIDApCi0gICAgICAgICAgICAgICAgICAgLkdldEJ5dGVzUGVyU2Vjb25kKCkpOwotICBFWFBFQ1RfRVEoMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9OT05FLCAwLCA4LCAwKQotICAgICAgICAgICAgICAgICAgIC5HZXRCeXRlc1BlclNlY29uZCgpKTsKLSAgRVhQRUNUX0VRKDIwMCwgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgMTAwLCA4LCAwKQotICAgICAgICAgICAgICAgICAgICAgLkdldEJ5dGVzUGVyU2Vjb25kKCkpOwotfQotCi1URVNUKEF1ZGlvUGFyYW1ldGVycywgQ29tcGFyZSkgewotICBBdWRpb1BhcmFtZXRlcnMgdmFsdWVzW10gPSB7Ci0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9NT05PLAotICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDgsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9NT05PLAotICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9NT05PLAotICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDE2LCAxMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwgQ0hBTk5FTF9MQVlPVVRfTU9OTywKLSAgICAgICAgICAgICAgICAgICAgICAxMDAwLCAxNiwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX01PTk8sCi0gICAgICAgICAgICAgICAgICAgICAgMjAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX01PTk8sCi0gICAgICAgICAgICAgICAgICAgICAgMjAwMCwgOCwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX01PTk8sCi0gICAgICAgICAgICAgICAgICAgICAgMjAwMCwgMTYsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9NT05PLAotICAgICAgICAgICAgICAgICAgICAgIDIwMDAsIDE2LCAyMDApLAotCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sCi0gICAgICAgICAgICAgICAgICAgICAgMTAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgICAgICAgICAgICAgICAgICAxMDAwLCA4LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLAotICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDE2LCAxMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLAotICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDE2LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLAotICAgICAgICAgICAgICAgICAgICAgIDIwMDAsIDgsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLCBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sCi0gICAgICAgICAgICAgICAgICAgICAgMjAwMCwgOCwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsIENIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAxNiwgMjAwKSwKLQotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQywgMTAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFT19BTkRfS0VZQk9BUkRfTUlDLCAxMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDE2LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xJTkVBUiwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQywgMjAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDIwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTElORUFSLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFT19BTkRfS0VZQk9BUkRfTUlDLCAyMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MSU5FQVIsCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDIwMDAsIDE2LCAyMDApLAotCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfTU9OTywgMTAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9NT05PLCAxMDAwLCA4LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDEwMDAsIDE2LCAxMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDEwMDAsIDE2LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX01PTk8sIDIwMDAsIDgsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfTU9OTywgMjAwMCwgOCwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9NT05PLCAyMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9NT05PLCAyMDAwLCAxNiwgMjAwKSwKLQotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgMTAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDEwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLCAxMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDEwMDAsIDE2LCAyMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgMjAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDIwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLCAyMDAwLCAxNiwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDIwMDAsIDE2LCAyMDApLAotCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDgsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDgsIDIwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDEwMDAsIDE2LCAxMDApLAotICAgICAgQXVkaW9QYXJhbWV0ZXJzKEF1ZGlvUGFyYW1ldGVyczo6QVVESU9fUENNX0xPV19MQVRFTkNZLAotICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFT19BTkRfS0VZQk9BUkRfTUlDLCAxMDAwLCAxNiwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQywgMjAwMCwgOCwgMTAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQywgMjAwMCwgOCwgMjAwKSwKLSAgICAgIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQywgMjAwMCwgMTYsIDEwMCksCi0gICAgICBBdWRpb1BhcmFtZXRlcnMoQXVkaW9QYXJhbWV0ZXJzOjpBVURJT19QQ01fTE9XX0xBVEVOQ1ksCi0gICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMsIDIwMDAsIDE2LCAyMDApLAotICB9OwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKHZhbHVlcyk7ICsraSkgewotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgYXJyYXlzaXplKHZhbHVlcyk7ICsraikgewotICAgICAgU0NPUEVEX1RSQUNFKCJpPSIgKyBiYXNlOjpTaXplVFRvU3RyaW5nKGkpICsKLSAgICAgICAgICAgICAgICAgICAiIGo9IiArIGJhc2U6OlNpemVUVG9TdHJpbmcoaikpOwotICAgICAgRVhQRUNUX0VRKGkgPCBqLCB2YWx1ZXNbaV0gPCB2YWx1ZXNbal0pOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IGEgdmFsdWUgaXMgbmV2ZXIgbGVzcyB0aGFuIGl0c2VsZi4KLSAgICBFWFBFQ1RfRkFMU0UodmFsdWVzW2ldIDwgdmFsdWVzW2ldKTsKLSAgfQotfQotCi1URVNUKEF1ZGlvUGFyYW1ldGVycywgQ29uc3RydWN0b3JfVmFsaWRDaGFubmVsQ291bnRzKSB7Ci0gIGludCBleHBlY3RlZF9jaGFubmVscyA9IDg7Ci0gIENoYW5uZWxMYXlvdXQgZXhwZWN0ZWRfbGF5b3V0ID0gQ0hBTk5FTF9MQVlPVVRfRElTQ1JFVEU7Ci0KLSAgQXVkaW9QYXJhbWV0ZXJzIHBhcmFtcyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9sYXlvdXQsIDQ0MTAwLCAxNiwgODgwKTsKLSAgcGFyYW1zLnNldF9jaGFubmVsc19mb3JfZGlzY3JldGUoZXhwZWN0ZWRfY2hhbm5lbHMpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfY2hhbm5lbHMsIHBhcmFtcy5jaGFubmVscygpKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2xheW91dCwgcGFyYW1zLmNoYW5uZWxfbGF5b3V0KCkpOwotICBFWFBFQ1RfVFJVRShwYXJhbXMuSXNWYWxpZCgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19zYW1wbGVfdHlwZXMuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3NhbXBsZV90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzYwZmJkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3NhbXBsZV90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9BVURJT19TQU1QTEVfVFlQRVNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fU0FNUExFX1RZUEVTX0hfCi0KLSNpbmNsdWRlIDxjc3RkaW50PgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLQotLy8gVG8gc3BlY2lmeSBkaWZmZXJlbnQgc2FtcGxlIGZvcm1hdHMsIHdlIHByb3ZpZGUgYSBjbGFzcyBmb3IgZWFjaCBzYW1wbGUKLS8vIGZvcm1hdCB0aGF0IGtub3dzIGNlcnRhaW4gdGhpbmdzIGFib3V0IGl0LCBzdWNoIGFzIHRoZSBDKysgZGF0YSB0eXBlIHVzZWQKLS8vIHRvIHN0b3JlIHNhbXBsZSB2YWx1ZXMsIG1pbiBhbmQgbWF4IHZhbHVlcywgYXMgd2VsbCBhcyBob3cgdG8gY29udmVydCB0bwotLy8gYW5kIGZyb20gZmxvYXRpbmcgcG9pbnQgZm9ybWF0cy4gRWFjaCBjbGFzcyBtdXN0IHNhdGlzZnkgYSBjb25jZXB0IHdlIGNhbGwKLS8vICJTYW1wbGVUeXBlVHJhaXRzIiwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGUgZm9sbG93aW5nIHB1YmxpY3MgYXJlIHByb3ZpZGVkOgotLy8gICAqIEEgdHlwZSB8VmFsdWVUeXBlfCBzcGVjaWZ5aW5nIHRoZSBDKysgdHlwZSBmb3Igc3RvcmluZyBzYW1wbGUgdmFsdWVzCi0vLyAgICogQSBzdGF0aWMgY29uc3RhbnQga01pblZhbHVlIHdoaWNoIHNwZWNpZmllcyB0aGUgbWluaW11bSBzYW1wbGUgdmFsdWUKLS8vICAgKiBBIHN0YXRpYyBjb25zdGFudCBrTWF4VmFsdWUgd2hpY2ggc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNhbXBsZSB2YWx1ZQotLy8gICAqIEEgc3RhdGljIGNvbnN0YW50IGtaZXJvUG9pbnRWYWx1ZSB3aGljaCBzcGVjaWZpZXMgdGhlIHNhbXBsZSB2YWx1ZQotLy8gICAgIHJlcHJlc2VudGluZyBhbiBhbXBsaXR1ZGUgb2YgemVybwotLy8gICAqIEEgc3RhdGljIG1ldGhvZCBDb252ZXJ0RnJvbUZsb2F0KCkgdGhhdCB0YWtlcyBhIGZsb2F0IHNhbXBsZSB2YWx1ZSBhbmQKLS8vICAgICBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBWYWx1ZVR5cGUKLS8vICAgKiBBIHN0YXRpYyBtZXRob2QgQ29udmVydEZyb21Eb3VibGUoKSB0aGF0IHRha2VzIGEgZG91YmxlIHNhbXBsZSB2YWx1ZSBhbmQKLS8vICAgICBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBWYWx1ZVR5cGUKLS8vICAgKiBBIHN0YXRpYyBtZXRob2QgQ29udmVydFRvRmxvYXQoKSB0aGF0IHRha2VzIGEgVmFsdWVUeXBlIHNhbXBsZSB2YWx1ZSBhbmQKLS8vICAgICBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBmbG9hdCB2YWx1ZQotLy8gICAqIEEgc3RhdGljIG1ldGhvZCBDb252ZXJ0VG9Eb3VibGUoKSB0aGF0IHRha2VzIGEgVmFsdWVUeXBlIHNhbXBsZSB2YWx1ZSBhbmQKLS8vICAgICBjb252ZXJ0cyBpdCB0byB0aGUgY29ycmVzcG9uZGluZyBkb3VibGUgdmFsdWUKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBGb3IgZmxvYXQgb3IgZG91YmxlLgotLy8gU2VlIGFsc28gdGhlIGFsaWFzZXMgZm9yIGNvbW1vbmx5IHVzZWQgdHlwZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2FtcGxlVHlwZT4KLWNsYXNzIEZsb2F0U2FtcGxlVHlwZVRyYWl0cyB7Ci0gIHN0YXRpY19hc3NlcnQoc3RkOjppc19mbG9hdGluZ19wb2ludDxTYW1wbGVUeXBlPjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgIlRlbXBsYXRlIGlzIG9ubHkgdmFsaWQgZm9yIGZsb2F0IHR5cGVzLiIpOwotCi0gcHVibGljOgotICB1c2luZyBWYWx1ZVR5cGUgPSBTYW1wbGVUeXBlOwotCi0gIHN0YXRpYyBjb25zdGV4cHIgU2FtcGxlVHlwZSBrTWluVmFsdWUgPSAtMS4wZjsKLSAgc3RhdGljIGNvbnN0ZXhwciBTYW1wbGVUeXBlIGtNYXhWYWx1ZSA9ICsxLjBmOwotICBzdGF0aWMgY29uc3RleHByIFNhbXBsZVR5cGUga1plcm9Qb2ludFZhbHVlID0gMC4wZjsKLQotICBzdGF0aWMgU2FtcGxlVHlwZSBGcm9tRmxvYXQoZmxvYXQgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIEZyb208ZmxvYXQ+KHNvdXJjZV92YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGZsb2F0IFRvRmxvYXQoU2FtcGxlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gVG88ZmxvYXQ+KHNvdXJjZV92YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIFNhbXBsZVR5cGUgRnJvbURvdWJsZShkb3VibGUgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIEZyb208ZG91YmxlPihzb3VyY2VfdmFsdWUpOwotICB9Ci0gIHN0YXRpYyBkb3VibGUgVG9Eb3VibGUoU2FtcGxlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gVG88ZG91YmxlPihzb3VyY2VfdmFsdWUpOwotICB9Ci0KLSBwcml2YXRlOgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRmxvYXRUeXBlPgotICBzdGF0aWMgU2FtcGxlVHlwZSBGcm9tKEZsb2F0VHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2FtcGxlVHlwZT4oc291cmNlX3ZhbHVlKTsKLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdFR5cGU+Ci0gIHN0YXRpYyBGbG9hdFR5cGUgVG8oU2FtcGxlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihzb3VyY2VfdmFsdWUpOwotICB9Ci19OwotCi0vLyBGb3IgdWludDhfdCwgaW50MTZfdCwgaW50MzJfdC4uLgotLy8gU2VlIGFsc28gdGhlIGFsaWFzZXMgZm9yIGNvbW1vbmx5IHVzZWQgdHlwZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgU2FtcGxlVHlwZT4KLWNsYXNzIEZpeGVkU2FtcGxlVHlwZVRyYWl0cyB7Ci0gIHN0YXRpY19hc3NlcnQoc3RkOjpudW1lcmljX2xpbWl0czxTYW1wbGVUeXBlPjo6aXNfaW50ZWdlciwKLSAgICAgICAgICAgICAgICAiVGVtcGxhdGUgaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlciB0eXBlcy4iKTsKLQotIHB1YmxpYzoKLSAgdXNpbmcgVmFsdWVUeXBlID0gU2FtcGxlVHlwZTsKLQotICBzdGF0aWMgY29uc3RleHByIFNhbXBsZVR5cGUga01pblZhbHVlID0KLSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8U2FtcGxlVHlwZT46Om1pbigpOwotICBzdGF0aWMgY29uc3RleHByIFNhbXBsZVR5cGUga01heFZhbHVlID0KLSAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8U2FtcGxlVHlwZT46Om1heCgpOwotICBzdGF0aWMgY29uc3RleHByIFNhbXBsZVR5cGUga1plcm9Qb2ludFZhbHVlID0KLSAgICAgIChrTWluVmFsdWUgPT0gMCkgPyAoa01heFZhbHVlIC8gMiArIDEpIDogMDsKLQotICBzdGF0aWMgU2FtcGxlVHlwZSBGcm9tRmxvYXQoZmxvYXQgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIEZyb208ZmxvYXQ+KHNvdXJjZV92YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIGZsb2F0IFRvRmxvYXQoU2FtcGxlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gVG88ZmxvYXQ+KHNvdXJjZV92YWx1ZSk7Ci0gIH0KLSAgc3RhdGljIFNhbXBsZVR5cGUgRnJvbURvdWJsZShkb3VibGUgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIEZyb208ZG91YmxlPihzb3VyY2VfdmFsdWUpOwotICB9Ci0gIHN0YXRpYyBkb3VibGUgVG9Eb3VibGUoU2FtcGxlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gVG88ZG91YmxlPihzb3VyY2VfdmFsdWUpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBXZSBwcmUtY29tcHV0ZSB0aGUgc2NhbGluZyBmYWN0b3JzIGZvciBjb252ZXJzaW9uIGF0IGNvbXBpbGUtdGltZSBpbiBvcmRlcgotICAvLyB0byBzYXZlIGNvbXB1dGF0aW9uIHRpbWUgZHVyaW5nIHJ1bnRpbWUuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdFR5cGU+Ci0gIHN0cnVjdCBTY2FsaW5nRmFjdG9ycyB7Ci0gICAgLy8gU2luY2UgemVyb19wb2ludF92YWx1ZSgpIGlzIG5vdCB0aGUgZXhhY3QgY2VudGVyIGJldHdlZW4KLSAgICAvLyBtaW5fdmFsdWUoKSBhbmQgbWF4X3ZhbHVlKCksIHdlIGFwcGx5IGEgZGlmZmVyZW50IHNjYWxpbmcgZm9yIHBvc2l0aXZlCi0gICAgLy8gYW5kIG5lZ2F0aXZlIHZhbHVlcy4KLSAgICAvLyBOb3RlIHRoYXQgZHVlIHRvIHRoZSBsaW1pdGVkIHByZWNpc2lvbiwgdGhlIEZsb2F0VHlwZSB2YWx1ZXMgbWF5IG5vdAotICAgIC8vIGFsd2F5cyBiZSBhYmxlIHRvIHJlcHJlc2VudCB0aGUgbWF4IGFuZCBtaW4gdmFsdWVzIG9mIHRoZSBpbnRlZ2VyCi0gICAgLy8gU2FtcGxlVHlwZSBleGFjdGx5LiBUaGlzIGlzIGEgY29uY2VybiB3aGVuIHVzaW5nIHRoZXNlIHNjYWxlIGZhY3RvcnMgZm9yCi0gICAgLy8gc2NhbGluZyBpbnB1dCBzYW1wbGUgdmFsdWVzIGZvciBjb252ZXJzaW9uLiBIb3dldmVyLCBzaW5jZSB0aGUgbWluIHZhbHVlCi0gICAgLy8gb2YgU2FtcGxlVHlwZSBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtIC0yXk4gYW5kIHRoZSBtYXggdmFsdWUgaXMgdXN1YWxseSBvZgotICAgIC8vIHRoZSBmb3JtICgrMl5OKS0xLCBhbmQgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIGZsb2F0IHR5cGVzIHN0b3JlIGEKLSAgICAvLyBzaWduaWZpY2FuZCB2YWx1ZSBwbHVzIGEgYmluYXJ5IGV4cG9uZW50IGl0IGp1c3Qgc28gaGFwcGVucyB0aGF0Ci0gICAgLy8gRmxvYXRUeXBlIGNhbiB1c3VhbGx5IHJlcHJlc2VudCB0aGUgbWluIHZhbHVlIGV4YWN0bHkgYW5kIGl0cwotICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXggdmFsdWUgaXMgb25seSBvZmYgYnkgMSwgaS5lLiBpdCBxdWFudGl6ZXMgdG8KLSAgICAvLyAoKzJeTikgaW5zdGVhZCBvZiAoKzJeTi0xKS4KLQotICAgIHN0YXRpYyBjb25zdGV4cHIgRmxvYXRUeXBlIGtGb3JQb3NpdGl2ZUlucHV0ID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihrTWF4VmFsdWUpIC0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihrWmVyb1BvaW50VmFsdWUpOwotCi0gICAgLy8gTm90ZTogSW4gdGhlIGJlbG93IGV4cHJlc3Npb24sIGl0IGlzIGltcG9ydGFudCB0aGF0IHdlIGNhc3Qga01pblZhbHVlIHRvCi0gICAgLy8gRmxvYXRUeXBlIF9iZWZvcmVfIHRha2luZyB0aGUgbmVnYXRpdmUgb2YgaXQuIEZvciBleGFtcGxlLCBmb3IgU2FtcGxlVHlwZQotICAgIC8vIGludDMyX3QsIHRoZSBleHByZXNzaW9uICgtIGtNaW5WYWx1ZSkgd291bGQgZXZhbHVhdGUgdG8KLSAgICAvLyAtbnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpLCB3aGljaCBmYWxscyBvdXRzaWRlIHRoZSBudW1lcmljCi0gICAgLy8gcmFuZ2UsIHdyYXBzIGFyb3VuZCwgYW5kIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUgYXMKLSAgICAvLyArbnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpLgotICAgIHN0YXRpYyBjb25zdGV4cHIgRmxvYXRUeXBlIGtGb3JOZWdhdGl2ZUlucHV0ID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihrWmVyb1BvaW50VmFsdWUpIC0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihrTWluVmFsdWUpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBGbG9hdFR5cGUga0ludmVyc2VGb3JQb3NpdGl2ZUlucHV0ID0KLSAgICAgICAgMS4wZiAvIGtGb3JQb3NpdGl2ZUlucHV0OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBGbG9hdFR5cGUga0ludmVyc2VGb3JOZWdhdGl2ZUlucHV0ID0KLSAgICAgICAgMS4wZiAvIGtGb3JOZWdhdGl2ZUlucHV0OwotICB9OwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBGbG9hdFR5cGU+Ci0gIHN0YXRpYyBTYW1wbGVUeXBlIEZyb20oRmxvYXRUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIC8vIE5vdGUsIHRoYXQgdGhlIGZvciB0aGUgY2FzZSBvZiB8c291cmNlX3ZhbHVlfCA9PSAxLjAsIHRoZSBpbXByZWNpc2lvbiBvZgotICAgIC8vIHxrU2NhbGluZ0ZhY3RvckZvclBvc2l0aXZlfCBjYW4gbGVhZCB0byBhIHByb2R1Y3QgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUKLSAgICAvLyBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIG9mIFNhbXBsZVR5cGUuIFRvIGVuc3VyZSB0aGlzIGRvZXMgbm90IGhhcHBlbiwgd2UKLSAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugb2YgfHNvdXJjZV92YWx1ZXwgPT0gMS4wIGFzIHBhcnQgb2YgdGhlIGNsaXBwaW5nIGNoZWNrLgotICAgIC8vIEZvciBhbGwgRmxvYXRUeXBlIHZhbHVlcyBzbWFsbGVyIHRoYW4gMS4wLCB0aGUgaW1wcmVjaXNpb24gb2YKLSAgICAvLyB8a1NjYWxpbmdGYWN0b3JGb3JQb3NpdGl2ZXwgaXMgc21hbGwgZW5vdWdoIHRvIG5vdCBwdXNoIHRoZSBzY2FsZWQKLSAgICAvLyB8c291cmNlX3ZhbHVlfCBvdXRzaWRlIHRoZSBudW1lcmljIHJhbmdlIG9mIFNhbXBsZVR5cGUuCi0KLSAgICAvLyBUaGUgbmVzdGVkIGlmL2Vsc2Ugc3RydWN0dXJlIGFwcGVhcnMgdG8gY29tcGlsZSB0byBhCi0gICAgLy8gYmV0dGVyLXBlcmZvcm1pbmcgcmVsZWFzZSBiaW5hcnkgY29tcGFyZWQgdG8gaGFuZGxpbmcgdGhlIGNsaXBwaW5nIGZvcgotICAgIC8vIGJvdGggcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBmaXJzdC4KLSAgICAvLwotICAgIC8vIElubGluaW5nIHRoZSBjb21wdXRhdGlvbiBmb3JtdWxhIGZvciBtdWx0aXBsaWNhdGlvbiB3aXRoIHRoZSBzY2FsaW5nCi0gICAgLy8gZmFjdG9yIGFuZCBhZGRpdGlvbiBvZiB8a1plcm9Qb2ludFZhbHVlfCByZXN1bHRzIGluIGJldHRlciBwZXJmb3JtYW5jZQotICAgIC8vIGZvciB0aGUgaW50MTZfdCBjYXNlIG9uIEFybSB3aGVuIGNvbXBhcmVkIHRvIHN0b3JpbmcgdGhlIHNjYWxpbmcgZmFjdG9yCi0gICAgLy8gaW4gYSB0ZW1wb3JhcnkgdmFyaWFibGUgYW5kIGFwcGx5aW5nIGl0IG91dHNpZGUgb2YgdGhlIGlmLWVsc2UgYmxvY2suCi0gICAgLy8KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gaGF2ZSB0aGUgY2FzdCB0byBTYW1wbGVUeXBlIHRha2UgcGxhY2UgX2FmdGVyXwotICAgIC8vIGFkZGluZyB8a1plcm9Qb2ludFZhbHVlfCwgYmVjYXVzZSB0aGUgc2NhbGVkIHNvdXJjZSB2YWx1ZSBtYXkgYmUgbmVnYXRpdmUKLSAgICAvLyBhbmQgU2FtcGxlVHlwZSBtYXkgYmUgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlLiBUaGUgcmVzdWx0IG9mIGNhc3RpbmcgYQotICAgIC8vIG5lZ2F0aXZlIGZsb2F0IHRvIGFuIHVuc2lnbmVkIGludGVnZXIgaXMgdW5kZWZpbmVkLgotICAgIGlmIChzb3VyY2VfdmFsdWUgPCAwKSB7Ci0gICAgICAvLyBBcHBseSBjbGlwcGluZyAoYWthLiBjbGFtcGluZykuCi0gICAgICBpZiAoc291cmNlX3ZhbHVlIDw9IEZsb2F0U2FtcGxlVHlwZVRyYWl0czxmbG9hdD46OmtNaW5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGtNaW5WYWx1ZTsKLQotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNhbXBsZVR5cGU+KAotICAgICAgICAgIChzb3VyY2VfdmFsdWUgKiBTY2FsaW5nRmFjdG9yczxGbG9hdFR5cGU+OjprRm9yTmVnYXRpdmVJbnB1dCkgKwotICAgICAgICAgIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oa1plcm9Qb2ludFZhbHVlKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEFwcGx5IGNsaXBwaW5nIChha2EuIGNsYW1waW5nKS4KLSAgICAgIC8vIEFzIG1lbnRpb25lZCBhYm92ZSwgaGVyZSB3ZSBtdXN0IGluY2x1ZGUgdGhlIGNhc2UgfHNvdXJjZV92YWx1ZXwgPT0gMS4KLSAgICAgIGlmIChzb3VyY2VfdmFsdWUgPj0gRmxvYXRTYW1wbGVUeXBlVHJhaXRzPGZsb2F0Pjo6a01heFZhbHVlKQotICAgICAgICByZXR1cm4ga01heFZhbHVlOwotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNhbXBsZVR5cGU+KAotICAgICAgICAgIChzb3VyY2VfdmFsdWUgKiBTY2FsaW5nRmFjdG9yczxGbG9hdFR5cGU+OjprRm9yUG9zaXRpdmVJbnB1dCkgKwotICAgICAgICAgIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oa1plcm9Qb2ludFZhbHVlKSk7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0VHlwZT4KLSAgc3RhdGljIEZsb2F0VHlwZSBUbyhTYW1wbGVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIEZsb2F0VHlwZSBvZmZzZXRfdmFsdWUgPQotICAgICAgICBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KHNvdXJjZV92YWx1ZSAtIGtaZXJvUG9pbnRWYWx1ZSk7Ci0KLSAgICAvLyBXZSBtdWx0aXBseSB3aXRoIHRoZSBpbnZlcnNlIHNjYWxpbmcgZmFjdG9yIGluc3RlYWQgb2YgZGl2aWRpbmcgYnkgdGhlCi0gICAgLy8gc2NhbGluZyBmYWN0b3IsIGJlY2F1c2UgbXVsdGlwbGljYXRpb24gcGVyZm9ybXMgZmFzdGVyIHRoYW4gZGl2aXNpb24KLSAgICAvLyBvbiBtYW55IHBsYXRmb3Jtcy4KLSAgICByZXR1cm4gKG9mZnNldF92YWx1ZSA8IDAuMGYpCi0gICAgICAgICAgICAgICA/IChvZmZzZXRfdmFsdWUgKgotICAgICAgICAgICAgICAgICAgU2NhbGluZ0ZhY3RvcnM8RmxvYXRUeXBlPjo6a0ludmVyc2VGb3JOZWdhdGl2ZUlucHV0KQotICAgICAgICAgICAgICAgOiAob2Zmc2V0X3ZhbHVlICoKLSAgICAgICAgICAgICAgICAgIFNjYWxpbmdGYWN0b3JzPEZsb2F0VHlwZT46OmtJbnZlcnNlRm9yUG9zaXRpdmVJbnB1dCk7Ci0gIH0KLX07Ci0KLS8vIEFsaWFzZXMgZm9yIGNvbW1vbmx5IHVzZWQgc2FtcGxlIGZvcm1hdHMuCi11c2luZyBGbG9hdDMyU2FtcGxlVHlwZVRyYWl0cyA9IEZsb2F0U2FtcGxlVHlwZVRyYWl0czxmbG9hdD47Ci11c2luZyBGbG9hdDY0U2FtcGxlVHlwZVRyYWl0cyA9IEZsb2F0U2FtcGxlVHlwZVRyYWl0czxkb3VibGU+OwotdXNpbmcgVW5zaWduZWRJbnQ4U2FtcGxlVHlwZVRyYWl0cyA9IEZpeGVkU2FtcGxlVHlwZVRyYWl0czx1aW50OF90PjsKLXVzaW5nIFNpZ25lZEludDE2U2FtcGxlVHlwZVRyYWl0cyA9IEZpeGVkU2FtcGxlVHlwZVRyYWl0czxpbnQxNl90PjsKLXVzaW5nIFNpZ25lZEludDMyU2FtcGxlVHlwZVRyYWl0cyA9IEZpeGVkU2FtcGxlVHlwZVRyYWl0czxpbnQzMl90PjsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fU0FNUExFX1RZUEVTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19zYW1wbGVfdHlwZXNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19zYW1wbGVfdHlwZXNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YmIwZjcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fc2FtcGxlX3R5cGVzX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19zYW1wbGVfdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGVzdENvbmZpZz4KLWNsYXNzIFNhbXBsZVR5cGVUcmFpdHNUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qge307Ci0KLVRZUEVEX1RFU1RfQ0FTRV9QKFNhbXBsZVR5cGVUcmFpdHNUZXN0KTsKLQotc3RydWN0IFVuc2lnbmVkSW50OFRvRmxvYXQzMlRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBVbnNpZ25lZEludDhTYW1wbGVUeXBlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSBGbG9hdDMyU2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIlVuc2lnbmVkSW50OFRvRmxvYXQzMlRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBTb3VyY2VUcmFpdHM6OlRvRmxvYXQoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IFNpZ25lZEludDE2VG9GbG9hdDMyVGVzdENvbmZpZyB7Ci0gIHVzaW5nIFNvdXJjZVRyYWl0cyA9IFNpZ25lZEludDE2U2FtcGxlVHlwZVRyYWl0czsKLSAgdXNpbmcgVGFyZ2V0VHJhaXRzID0gRmxvYXQzMlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25maWdfbmFtZSgpIHsgcmV0dXJuICJTaWduZWRJbnQxNlRvRmxvYXQzMlRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBTb3VyY2VUcmFpdHM6OlRvRmxvYXQoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IFNpZ25lZEludDMyVG9GbG9hdDMyVGVzdENvbmZpZyB7Ci0gIHVzaW5nIFNvdXJjZVRyYWl0cyA9IFNpZ25lZEludDMyU2FtcGxlVHlwZVRyYWl0czsKLSAgdXNpbmcgVGFyZ2V0VHJhaXRzID0gRmxvYXQzMlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25maWdfbmFtZSgpIHsgcmV0dXJuICJTaWduZWRJbnQzMlRvRmxvYXQzMlRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBTb3VyY2VUcmFpdHM6OlRvRmxvYXQoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IEZsb2F0MzJUb1Vuc2lnbmVkSW50OFRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBGbG9hdDMyU2FtcGxlVHlwZVRyYWl0czsKLSAgdXNpbmcgVGFyZ2V0VHJhaXRzID0gVW5zaWduZWRJbnQ4U2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIkZsb2F0MzJUb1Vuc2lnbmVkSW50OFRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBUYXJnZXRUcmFpdHM6OkZyb21GbG9hdChzb3VyY2VfdmFsdWUpOwotICB9Ci19OwotCi1zdHJ1Y3QgRmxvYXQzMlRvU2lnbmVkSW50MTZUZXN0Q29uZmlnIHsKLSAgdXNpbmcgU291cmNlVHJhaXRzID0gRmxvYXQzMlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHVzaW5nIFRhcmdldFRyYWl0cyA9IFNpZ25lZEludDE2U2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIkZsb2F0MzJUb1NpZ25lZEludDE2VGVzdENvbmZpZyI7IH0KLSAgc3RhdGljIFRhcmdldFRyYWl0czo6VmFsdWVUeXBlIFBlcmZvcm1Db252ZXJzaW9uKAotICAgICAgU291cmNlVHJhaXRzOjpWYWx1ZVR5cGUgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIFRhcmdldFRyYWl0czo6RnJvbUZsb2F0KHNvdXJjZV92YWx1ZSk7Ci0gIH0KLX07Ci0KLXN0cnVjdCBGbG9hdDMyVG9TaWduZWRJbnQzMlRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBGbG9hdDMyU2FtcGxlVHlwZVRyYWl0czsKLSAgdXNpbmcgVGFyZ2V0VHJhaXRzID0gU2lnbmVkSW50MzJTYW1wbGVUeXBlVHJhaXRzOwotICBzdGF0aWMgY29uc3QgY2hhciogY29uZmlnX25hbWUoKSB7IHJldHVybiAiRmxvYXQzMlRvU2lnbmVkSW50MzJUZXN0Q29uZmlnIjsgfQotICBzdGF0aWMgVGFyZ2V0VHJhaXRzOjpWYWx1ZVR5cGUgUGVyZm9ybUNvbnZlcnNpb24oCi0gICAgICBTb3VyY2VUcmFpdHM6OlZhbHVlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gVGFyZ2V0VHJhaXRzOjpGcm9tRmxvYXQoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IFVuc2lnbmVkSW50OFRvRmxvYXQ2NFRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBVbnNpZ25lZEludDhTYW1wbGVUeXBlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSBGbG9hdDY0U2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIlVuc2lnbmVkSW50OFRvRmxvYXQ2NFRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBTb3VyY2VUcmFpdHM6OlRvRG91YmxlKHNvdXJjZV92YWx1ZSk7Ci0gIH0KLX07Ci0KLXN0cnVjdCBTaWduZWRJbnQxNlRvRmxvYXQ2NFRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBTaWduZWRJbnQxNlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHVzaW5nIFRhcmdldFRyYWl0cyA9IEZsb2F0NjRTYW1wbGVUeXBlVHJhaXRzOwotICBzdGF0aWMgY29uc3QgY2hhciogY29uZmlnX25hbWUoKSB7IHJldHVybiAiU2lnbmVkSW50MTZUb0Zsb2F0NjRUZXN0Q29uZmlnIjsgfQotICBzdGF0aWMgVGFyZ2V0VHJhaXRzOjpWYWx1ZVR5cGUgUGVyZm9ybUNvbnZlcnNpb24oCi0gICAgICBTb3VyY2VUcmFpdHM6OlZhbHVlVHlwZSBzb3VyY2VfdmFsdWUpIHsKLSAgICByZXR1cm4gU291cmNlVHJhaXRzOjpUb0RvdWJsZShzb3VyY2VfdmFsdWUpOwotICB9Ci19OwotCi1zdHJ1Y3QgU2lnbmVkSW50MzJUb0Zsb2F0NjRUZXN0Q29uZmlnIHsKLSAgdXNpbmcgU291cmNlVHJhaXRzID0gU2lnbmVkSW50MzJTYW1wbGVUeXBlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSBGbG9hdDY0U2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIlNpZ25lZEludDMyVG9GbG9hdDY0VGVzdENvbmZpZyI7IH0KLSAgc3RhdGljIFRhcmdldFRyYWl0czo6VmFsdWVUeXBlIFBlcmZvcm1Db252ZXJzaW9uKAotICAgICAgU291cmNlVHJhaXRzOjpWYWx1ZVR5cGUgc291cmNlX3ZhbHVlKSB7Ci0gICAgcmV0dXJuIFNvdXJjZVRyYWl0czo6VG9Eb3VibGUoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IEZsb2F0NjRUb1Vuc2lnbmVkSW50OFRlc3RDb25maWcgewotICB1c2luZyBTb3VyY2VUcmFpdHMgPSBGbG9hdDY0U2FtcGxlVHlwZVRyYWl0czsKLSAgdXNpbmcgVGFyZ2V0VHJhaXRzID0gVW5zaWduZWRJbnQ4U2FtcGxlVHlwZVRyYWl0czsKLSAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbmZpZ19uYW1lKCkgeyByZXR1cm4gIkZsb2F0NjRUb1Vuc2lnbmVkSW50OFRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBUYXJnZXRUcmFpdHM6OkZyb21Eb3VibGUoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IEZsb2F0NjRUb1NpZ25lZEludDE2VGVzdENvbmZpZyB7Ci0gIHVzaW5nIFNvdXJjZVRyYWl0cyA9IEZsb2F0NjRTYW1wbGVUeXBlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSBTaWduZWRJbnQxNlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25maWdfbmFtZSgpIHsgcmV0dXJuICJGbG9hdDY0VG9TaWduZWRJbnQxNlRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBUYXJnZXRUcmFpdHM6OkZyb21Eb3VibGUoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotc3RydWN0IEZsb2F0NjRUb1NpZ25lZEludDMyVGVzdENvbmZpZyB7Ci0gIHVzaW5nIFNvdXJjZVRyYWl0cyA9IEZsb2F0NjRTYW1wbGVUeXBlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSBTaWduZWRJbnQzMlNhbXBsZVR5cGVUcmFpdHM7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25maWdfbmFtZSgpIHsgcmV0dXJuICJGbG9hdDY0VG9TaWduZWRJbnQzMlRlc3RDb25maWciOyB9Ci0gIHN0YXRpYyBUYXJnZXRUcmFpdHM6OlZhbHVlVHlwZSBQZXJmb3JtQ29udmVyc2lvbigKLSAgICAgIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlIHNvdXJjZV92YWx1ZSkgewotICAgIHJldHVybiBUYXJnZXRUcmFpdHM6OkZyb21Eb3VibGUoc291cmNlX3ZhbHVlKTsKLSAgfQotfTsKLQotVFlQRURfVEVTVF9QKFNhbXBsZVR5cGVUcmFpdHNUZXN0LCBDb252ZXJ0RXhhbXBsZVZhbHVlcykgewotICB1c2luZyBDb25maWcgPSBUeXBlUGFyYW07Ci0gIHVzaW5nIFNvdXJjZVRyYWl0cyA9IHR5cGVuYW1lIENvbmZpZzo6U291cmNlVHJhaXRzOwotICB1c2luZyBUYXJnZXRUcmFpdHMgPSB0eXBlbmFtZSBDb25maWc6OlRhcmdldFRyYWl0czsKLSAgdXNpbmcgU291cmNlVHlwZSA9IHR5cGVuYW1lIFNvdXJjZVRyYWl0czo6VmFsdWVUeXBlOwotICB1c2luZyBUYXJnZXRUeXBlID0gdHlwZW5hbWUgVGFyZ2V0VHJhaXRzOjpWYWx1ZVR5cGU7Ci0gIFNvdXJjZVR5cGUgc291cmNlX21heCA9IFNvdXJjZVRyYWl0czo6a01heFZhbHVlOwotICBTb3VyY2VUeXBlIHNvdXJjZV9taW4gPSBTb3VyY2VUcmFpdHM6OmtNaW5WYWx1ZTsKLSAgU291cmNlVHlwZSBzb3VyY2VfemVyb19wb2ludCA9IFNvdXJjZVRyYWl0czo6a1plcm9Qb2ludFZhbHVlOwotICBTb3VyY2VUeXBlIHNvdXJjZV90d28gPSBzdGF0aWNfY2FzdDxTb3VyY2VUeXBlPigyKTsKLSAgVGFyZ2V0VHlwZSB0YXJnZXRfbWF4ID0gVGFyZ2V0VHJhaXRzOjprTWF4VmFsdWU7Ci0gIFRhcmdldFR5cGUgdGFyZ2V0X21pbiA9IFRhcmdldFRyYWl0czo6a01pblZhbHVlOwotICBUYXJnZXRUeXBlIHRhcmdldF96ZXJvX3BvaW50ID0gVGFyZ2V0VHJhaXRzOjprWmVyb1BvaW50VmFsdWU7Ci0gIFRhcmdldFR5cGUgdGFyZ2V0X3R3byA9IHN0YXRpY19jYXN0PFRhcmdldFR5cGU+KDIpOwotCi0gIFNDT1BFRF9UUkFDRShDb25maWc6OmNvbmZpZ19uYW1lKCkpOwotCi0gIHsKLSAgICBTQ09QRURfVFJBQ0UoIkNvbnZlcnQgemVyby1wb2ludCB2YWx1ZSIpOwotICAgIEFTU0VSVF9FUSh0YXJnZXRfemVyb19wb2ludCwKLSAgICAgICAgICAgICAgQ29uZmlnOjpQZXJmb3JtQ29udmVyc2lvbihTb3VyY2VUcmFpdHM6OmtaZXJvUG9pbnRWYWx1ZSkpOwotICB9Ci0gIHsKLSAgICBTQ09QRURfVFJBQ0UoIkNvbnZlcnQgbWF4IHZhbHVlIik7Ci0gICAgQVNTRVJUX0VRKHRhcmdldF9tYXgsIENvbmZpZzo6UGVyZm9ybUNvbnZlcnNpb24oc291cmNlX21heCkpOwotICB9Ci0gIHsKLSAgICBTQ09QRURfVFJBQ0UoIkNvbnZlcnQgbWluIHZhbHVlIik7Ci0gICAgQVNTRVJUX0VRKHRhcmdldF9taW4sIENvbmZpZzo6UGVyZm9ybUNvbnZlcnNpb24oc291cmNlX21pbikpOwotICB9Ci0KLSAgewotICAgIFNDT1BFRF9UUkFDRSgiQ29udmVydCB2YWx1ZSBoYWxmIHdheSBiZXR3ZWVuIG1pbiBhbmQgemVybyBwb2ludCIpOwotICAgIC8vIE5vdGU6IFRoaXMgc29tZXdoYXQgdW5jb252ZW50aW9uYWwgd2F5IG9mIGNhbGN1bGF0aW5nIHRoZSBzb3VyY2UgYW5kCi0gICAgLy8gdGFyZ2V0IHZhbHVlIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBhbnkgaW50ZXJtZWRpYXRlIHJlc3VsdCBmYWxsaW5nCi0gICAgLy8gb3V0c2lkZSB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljIHJhbmdlLgotICAgIGF1dG8gc291cmNlX3ZhbHVlID0gc291cmNlX21pbiArICgoc291cmNlX3plcm9fcG9pbnQgLyBzb3VyY2VfdHdvKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VfbWluIC8gc291cmNlX3R3bykpOwotICAgIGF1dG8gZXhwZWN0ZWRfdGFyZ2V0X3ZhbHVlID0KLSAgICAgICAgdGFyZ2V0X21pbiArCi0gICAgICAgICgodGFyZ2V0X3plcm9fcG9pbnQgLyB0YXJnZXRfdHdvKSAtICh0YXJnZXRfbWluIC8gdGFyZ2V0X3R3bykpOwotICAgIEFTU0VSVF9FUShleHBlY3RlZF90YXJnZXRfdmFsdWUsIENvbmZpZzo6UGVyZm9ybUNvbnZlcnNpb24oc291cmNlX3ZhbHVlKSk7Ci0gIH0KLQotICB7Ci0gICAgU0NPUEVEX1RSQUNFKCJDb252ZXJ0IHZhbHVlIGhhbGYgd2F5IGJldHdlZW4gemVybyBwb2ludCBhbmQgbWF4Iik7Ci0KLSAgICBhdXRvIHNvdXJjZV92YWx1ZSA9Ci0gICAgICAgIHNvdXJjZV96ZXJvX3BvaW50ICsgKChzb3VyY2VfbWF4IC0gc291cmNlX3plcm9fcG9pbnQpIC8gc291cmNlX3R3byk7Ci0gICAgYXV0byBleHBlY3RlZF90YXJnZXRfdmFsdWUgPQotICAgICAgICB0YXJnZXRfemVyb19wb2ludCArICgodGFyZ2V0X21heCAtIHRhcmdldF96ZXJvX3BvaW50KSAvIHRhcmdldF90d28pOwotCi0gICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8U291cmNlVHlwZT46OmlzX2ludGVnZXIgJiYKLSAgICAgICAgc3RkOjppc19mbG9hdGluZ19wb2ludDxUYXJnZXRUeXBlPjo6dmFsdWUpIHsKLSAgICAgIC8vIFRoZSBzb3VyY2UgdmFsdWUgaGFsZi13YXkgYmV0d2VlbiB6ZXJvIHBvaW50IGFuZCBtYXggZmFsbHMgaW4gdGhlCi0gICAgICAvLyBtaWRkbGUgYmV0d2VlbiB0d28gaW50ZWdlcnMsIHNvIHdlIGV4cGVjdCBpdCB0byBiZSBvZmYgYnkgMC41LgotICAgICAgVGFyZ2V0VHlwZSBrVG9sZXJhbmNlID0KLSAgICAgICAgICBzdGF0aWNfY2FzdDxUYXJnZXRUeXBlPigwLjUpICogKHNvdXJjZV9tYXggLSBzb3VyY2VfemVyb19wb2ludCk7Ci0gICAgICBBU1NFUlRfTkVBUihleHBlY3RlZF90YXJnZXRfdmFsdWUsCi0gICAgICAgICAgICAgICAgICBDb25maWc6OlBlcmZvcm1Db252ZXJzaW9uKHNvdXJjZV92YWx1ZSksIGtUb2xlcmFuY2UpOwotICAgIH0gZWxzZSBpZiAoc3RkOjppc19mbG9hdGluZ19wb2ludDxTb3VyY2VUeXBlPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0VHlwZT46OmlzX2ludGVnZXIpIHsKLSAgICAgIC8vIFRoZSBxdWFudGl6YXRpb24gZXJyb3Igb2YgdGhlIHNjYWxpbmcgZmFjdG9yIGR1ZSB0byB0aGUgbGltaXRlZAotICAgICAgLy8gcHJlY2lzaW9uIG9mIHRoZSBmbG9hdGluZyBwb2ludCB0eXBlIGNhbiBjYXVzZSB0aGUgcmVzdWx0IHRvIGJlIG9mZgotICAgICAgLy8gYnkgMS4KLSAgICAgIGF1dG8ga1RvbGVyYW5jZSA9IHN0YXRpY19jYXN0PFRhcmdldFR5cGU+KDEpOwotICAgICAgQVNTRVJUX05FQVIoZXhwZWN0ZWRfdGFyZ2V0X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgQ29uZmlnOjpQZXJmb3JtQ29udmVyc2lvbihzb3VyY2VfdmFsdWUpLCBrVG9sZXJhbmNlKTsKLSAgICB9IGVsc2UgewotICAgICAgQVNTRVJUX0VRKGV4cGVjdGVkX3RhcmdldF92YWx1ZSwgQ29uZmlnOjpQZXJmb3JtQ29udmVyc2lvbihzb3VyY2VfdmFsdWUpKTsKLSAgICB9Ci0gIH0KLX0KLQotUkVHSVNURVJfVFlQRURfVEVTVF9DQVNFX1AoU2FtcGxlVHlwZVRyYWl0c1Rlc3QsIENvbnZlcnRFeGFtcGxlVmFsdWVzKTsKLQotdHlwZWRlZiA6OnRlc3Rpbmc6OlR5cGVzPAotICAgIFVuc2lnbmVkSW50OFRvRmxvYXQzMlRlc3RDb25maWcsIFNpZ25lZEludDE2VG9GbG9hdDMyVGVzdENvbmZpZywKLSAgICBTaWduZWRJbnQzMlRvRmxvYXQzMlRlc3RDb25maWcsIEZsb2F0MzJUb1Vuc2lnbmVkSW50OFRlc3RDb25maWcsCi0gICAgRmxvYXQzMlRvU2lnbmVkSW50MTZUZXN0Q29uZmlnLCBGbG9hdDMyVG9TaWduZWRJbnQzMlRlc3RDb25maWcsCi0gICAgVW5zaWduZWRJbnQ4VG9GbG9hdDY0VGVzdENvbmZpZywgU2lnbmVkSW50MTZUb0Zsb2F0NjRUZXN0Q29uZmlnLAotICAgIFNpZ25lZEludDMyVG9GbG9hdDY0VGVzdENvbmZpZywgRmxvYXQ2NFRvVW5zaWduZWRJbnQ4VGVzdENvbmZpZywKLSAgICBGbG9hdDY0VG9TaWduZWRJbnQxNlRlc3RDb25maWcsIEZsb2F0NjRUb1NpZ25lZEludDMyVGVzdENvbmZpZz4KLSAgICBUZXN0Q29uZmlnczsKLUlOU1RBTlRJQVRFX1RZUEVEX1RFU1RfQ0FTRV9QKENvbW1vblR5cGVzLCBTYW1wbGVUeXBlVHJhaXRzVGVzdCwgVGVzdENvbmZpZ3MpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTdiN2NlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdGltZXN0YW1wX2hlbHBlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIHN0YXRpYwotYmFzZTo6VGltZURlbHRhIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpGcmFtZXNUb1RpbWUoaW50NjRfdCBmcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlc19wZXJfc2Vjb25kKSB7Ci0gIERDSEVDS19HRShzYW1wbGVzX3Blcl9zZWNvbmQsIDApOwotICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKAotICAgICAgZnJhbWVzICogYmFzZTo6VGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCAvIHNhbXBsZXNfcGVyX3NlY29uZCk7Ci19Ci0KLS8vIHN0YXRpYwotaW50NjRfdCBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6VGltZVRvRnJhbWVzKGJhc2U6OlRpbWVEZWx0YSB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVzX3Blcl9zZWNvbmQpIHsKLSAgcmV0dXJuIHRpbWUuSW5TZWNvbmRzRigpICogc2FtcGxlc19wZXJfc2Vjb25kOwotfQotCi1BdWRpb1RpbWVzdGFtcEhlbHBlcjo6QXVkaW9UaW1lc3RhbXBIZWxwZXIoaW50IHNhbXBsZXNfcGVyX3NlY29uZCkKLSAgICA6IGJhc2VfdGltZXN0YW1wXyhrTm9UaW1lc3RhbXApLCBmcmFtZV9jb3VudF8oMCkgewotICBEQ0hFQ0tfR1Qoc2FtcGxlc19wZXJfc2Vjb25kLCAwKTsKLSAgZG91YmxlIGZwcyA9IHNhbXBsZXNfcGVyX3NlY29uZDsKLSAgbWljcm9zZWNvbmRzX3Blcl9mcmFtZV8gPSBiYXNlOjpUaW1lOjprTWljcm9zZWNvbmRzUGVyU2Vjb25kIC8gZnBzOwotfQotCi12b2lkIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpTZXRCYXNlVGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YSBiYXNlX3RpbWVzdGFtcCkgewotICBiYXNlX3RpbWVzdGFtcF8gPSBiYXNlX3RpbWVzdGFtcDsKLSAgZnJhbWVfY291bnRfID0gMDsKLX0KLQotYmFzZTo6VGltZURlbHRhIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpiYXNlX3RpbWVzdGFtcCgpIGNvbnN0IHsKLSAgcmV0dXJuIGJhc2VfdGltZXN0YW1wXzsKLX0KLQotdm9pZCBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6QWRkRnJhbWVzKGludCBmcmFtZV9jb3VudCkgewotICBEQ0hFQ0tfR0UoZnJhbWVfY291bnQsIDApOwotICBEQ0hFQ0soYmFzZV90aW1lc3RhbXBfICE9IGtOb1RpbWVzdGFtcCk7Ci0gIGZyYW1lX2NvdW50XyArPSBmcmFtZV9jb3VudDsKLX0KLQotYmFzZTo6VGltZURlbHRhIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpHZXRUaW1lc3RhbXAoKSBjb25zdCB7Ci0gIHJldHVybiBDb21wdXRlVGltZXN0YW1wKGZyYW1lX2NvdW50Xyk7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6R2V0RnJhbWVEdXJhdGlvbihpbnQgZnJhbWVfY291bnQpIGNvbnN0IHsKLSAgRENIRUNLX0dFKGZyYW1lX2NvdW50LCAwKTsKLSAgYmFzZTo6VGltZURlbHRhIGVuZF90aW1lc3RhbXAgPSBDb21wdXRlVGltZXN0YW1wKGZyYW1lX2NvdW50XyArIGZyYW1lX2NvdW50KTsKLSAgcmV0dXJuIGVuZF90aW1lc3RhbXAgLSBHZXRUaW1lc3RhbXAoKTsKLX0KLQotaW50NjRfdCBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6R2V0RnJhbWVzVG9UYXJnZXQoYmFzZTo6VGltZURlbHRhIHRhcmdldCkgY29uc3QgewotICBEQ0hFQ0soYmFzZV90aW1lc3RhbXBfICE9IGtOb1RpbWVzdGFtcCk7Ci0gIERDSEVDSyh0YXJnZXQgPj0gYmFzZV90aW1lc3RhbXBfKTsKLQotICBpbnQ2NF90IGRlbHRhX2luX3VzID0gKHRhcmdldCAtIEdldFRpbWVzdGFtcCgpKS5Jbk1pY3Jvc2Vjb25kcygpOwotICBpZiAoZGVsdGFfaW5fdXMgPT0gMCkgcmV0dXJuIDA7Ci0KLSAgLy8gQ29tcHV0ZSBhIHRpbWVzdGFtcCByZWxhdGl2ZSB0byB8YmFzZV90aW1lc3RhbXBffCBzaW5jZSB0aW1lc3RhbXBzCi0gIC8vIGNyZWF0ZWQgZnJvbSB8ZnJhbWVfY291bnRffCBhcmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhpcyBiYXNlLgotICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdGltZSB0byBmcmFtZSBjb21wdXRhdGlvbiBoZXJlIGlzIHRoZSBwcm9wZXIgaW52ZXJzZQotICAvLyBvZiB0aGUgZnJhbWUgdG8gdGltZSBjb21wdXRhdGlvbiBpbiBDb21wdXRlVGltZXN0YW1wKCkuCi0gIGJhc2U6OlRpbWVEZWx0YSBkZWx0YV9mcm9tX2Jhc2UgPSB0YXJnZXQgLSBiYXNlX3RpbWVzdGFtcF87Ci0KLSAgLy8gQ29tcHV0ZSBmcmFtZSBjb3VudCBmb3IgdGhlIHRpbWUgZGVsdGEuIFRoaXMgY29tcHV0YXRpb24gcm91bmRzIHRvCi0gIC8vIHRoZSBuZWFyZXN0IHdob2xlIG51bWJlciBvZiBmcmFtZXMuCi0gIGRvdWJsZSB0aHJlc2hvbGQgPSBtaWNyb3NlY29uZHNfcGVyX2ZyYW1lXyAvIDI7Ci0gIGludDY0X3QgdGFyZ2V0X2ZyYW1lX2NvdW50ID0KLSAgICAgIChkZWx0YV9mcm9tX2Jhc2UuSW5NaWNyb3NlY29uZHMoKSArIHRocmVzaG9sZCkgLyBtaWNyb3NlY29uZHNfcGVyX2ZyYW1lXzsKLSAgcmV0dXJuIHRhcmdldF9mcmFtZV9jb3VudCAtIGZyYW1lX2NvdW50XzsKLX0KLQotYmFzZTo6VGltZURlbHRhIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpDb21wdXRlVGltZXN0YW1wKAotICAgIGludDY0X3QgZnJhbWVfY291bnQpIGNvbnN0IHsKLSAgRENIRUNLX0dFKGZyYW1lX2NvdW50LCAwKTsKLSAgRENIRUNLKGJhc2VfdGltZXN0YW1wXyAhPSBrTm9UaW1lc3RhbXApOwotICBkb3VibGUgZnJhbWVzX3VzID0gbWljcm9zZWNvbmRzX3Blcl9mcmFtZV8gKiBmcmFtZV9jb3VudDsKLSAgcmV0dXJuIGJhc2VfdGltZXN0YW1wXyArIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhmcmFtZXNfdXMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdiZTA0Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0FVRElPX1RJTUVTVEFNUF9IRUxQRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQVVESU9fVElNRVNUQU1QX0hFTFBFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBHZW5lcmF0ZXMgdGltZXN0YW1wcyBmb3IgYSBzZXF1ZW5jZSBvZiBhdWRpbyBzYW1wbGUgZnJhbWVzLiBUaGlzIGNsYXNzIHNob3VsZAotLy8gYmUgdXNlZCBhbnkgcGxhY2UgdGltZXN0YW1wcyBuZWVkIHRvIGJlIGNhbGN1bGF0ZWQgZm9yIGEgc2VxdWVuY2Ugb2YgYXVkaW8KLS8vIHNhbXBsZXMuIEl0IGhlbHBzIGF2b2lkIHRpbWVzdGFtcHMgaW5hY2N1cmFjaWVzIGNhdXNlZCBieSByb3VuZGluZy90cnVuY2F0aW9uCi0vLyBpbiByZXBlYXRlZCBzYW1wbGUgY291bnQgdG8gdGltZXN0YW1wIGNvbnZlcnNpb25zLgotLy8KLS8vIFRoZSBjbGFzcyBpcyBjb25zdHJ1Y3RlZCB3aXRoIHNhbXBsZXNfcGVyX3NlY29uZCBpbmZvcm1hdGlvbiBzbyB0aGF0IGl0IGNhbgotLy8gY29udmVydCBhdWRpbyBzYW1wbGUgZnJhbWUgY291bnRzIGludG8gdGltZXN0YW1wcy4gQWZ0ZXIgdGhlIG9iamVjdCBpcwotLy8gY29uc3RydWN0ZWQsIFNldEJhc2VUaW1lc3RhbXAoKSBtdXN0IGJlIGNhbGxlZCB0byBzcGVjaWZ5IHRoZSBzdGFydGluZwotLy8gdGltZXN0YW1wIG9mIHRoZSBhdWRpbyBzZXF1ZW5jZS4gQXMgYXVkaW8gc2FtcGxlcyBhcmUgcmVjZWl2ZWQsIHRoZWlyIGZyYW1lCi0vLyBjb3VudHMgYXJlIGFkZGVkIHVzaW5nIEFkZEZyYW1lcygpLiBUaGVzZSBmcmFtZSBjb3VudHMgYXJlIGFjY3VtdWxhdGVkIGJ5Ci0vLyB0aGlzIGNsYXNzIHNvIEdldFRpbWVzdGFtcCgpIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdGltZXN0YW1wIGZvciB0aGUKLS8vIHNhbXBsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQuIEdldER1cmF0aW9uKCkgY2FsY3VsYXRlcyB0aGUgcHJvcGVyIGR1cmF0aW9uCi0vLyB2YWx1ZXMgZm9yIHNhbXBsZXMgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdGltZXN0YW1wLiBHZXRGcmFtZXNUb1RhcmdldCgpCi0vLyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZC9yZW1vdmVkIGZyb20gdGhlCi0vLyBhY2N1bXVsYXRlZCBmcmFtZXMgdG8gcmVhY2ggYSB0YXJnZXQgdGltZXN0YW1wLgotY2xhc3MgTUVESUFfRVhQT1JUIEF1ZGlvVGltZXN0YW1wSGVscGVyIHsKLSBwdWJsaWM6Ci0gIC8vIFJldHVybnMgdGhlIHRpbWUgZHVyYXRpb24gb2YgdGhlIGdpdmVuIG51bWJlciBvZiBmcmFtZXMgb2YgYXVkaW8gd2l0aCB0aGUKLSAgLy8gZ2l2ZW4gc2FtcGxlIHJhdGUgKGluIHNhbXBsZXMgcGVyIHNlY29uZCkuCi0gIHN0YXRpYyBiYXNlOjpUaW1lRGVsdGEgRnJhbWVzVG9UaW1lKGludDY0X3QgZnJhbWVzLCBpbnQgc2FtcGxlc19wZXJfc2Vjb25kKTsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBnaXZlbiBkdXJhdGlvbiBvZiBhdWRpbyB3aXRoIHRoZSBnaXZlbgotICAvLyBzYW1wbGUgcmF0ZSAoaW4gc2FtcGxlcyBwZXIgc2Vjb25kKS4KLSAgc3RhdGljIGludDY0X3QgVGltZVRvRnJhbWVzKGJhc2U6OlRpbWVEZWx0YSB0aW1lLCBpbnQgc2FtcGxlc19wZXJfc2Vjb25kKTsKLQotICBleHBsaWNpdCBBdWRpb1RpbWVzdGFtcEhlbHBlcihpbnQgc2FtcGxlc19wZXJfc2Vjb25kKTsKLQotICAvLyBTZXRzIHRoZSBiYXNlIHRpbWVzdGFtcCB0byB8YmFzZV90aW1lc3RhbXB8IGFuZCB0aGUgc2V0cyBjb3VudCB0byAwLgotICB2b2lkIFNldEJhc2VUaW1lc3RhbXAoYmFzZTo6VGltZURlbHRhIGJhc2VfdGltZXN0YW1wKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgYmFzZV90aW1lc3RhbXAoKSBjb25zdDsKLSAgaW50NjRfdCBmcmFtZV9jb3VudCgpIGNvbnN0IHsgcmV0dXJuIGZyYW1lX2NvdW50XzsgfQotCi0gIC8vIEFkZHMgfGZyYW1lX2NvdW50fCB0byB0aGUgZnJhbWUgY291bnRlci4KLSAgLy8gTm90ZTogU2V0QmFzZVRpbWVzdGFtcCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuCi0gIC8vIGtOb1RpbWVzdGFtcCBiZWZvcmUgdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZC4KLSAgdm9pZCBBZGRGcmFtZXMoaW50IGZyYW1lX2NvdW50KTsKLQotICAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wLiBUaGlzIHZhbHVlIGlzIGNvbXB1dGVkIGZyb20gdGhlIGJhc2VfdGltZXN0YW1wKCkKLSAgLy8gYW5kIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGZyYW1lcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBzbyBmYXIuCi0gIGJhc2U6OlRpbWVEZWx0YSBHZXRUaW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBkdXJhdGlvbiBpZiB8ZnJhbWVfY291bnR8IGZyYW1lcyB3ZXJlIGFkZGVkIHRvIHRoZSBjdXJyZW50Ci0gIC8vIHRpbWVzdGFtcCByZXBvcnRlZCBieSBHZXRUaW1lc3RhbXAoKS4gVGhpcyBtZXRob2QgZW5zdXJlcyB0aGF0Ci0gIC8vIChHZXRUaW1lc3RhbXAoKSArIEdldEZyYW1lRHVyYXRpb24obikpIHdpbGwgZXF1YWwgdGhlIHRpbWVzdGFtcCB0aGF0Ci0gIC8vIEdldFRpbWVzdGFtcCgpIHdpbGwgcmV0dXJuIGlmIEFkZEZyYW1lcyhuKSBpcyBjYWxsZWQuCi0gIGJhc2U6OlRpbWVEZWx0YSBHZXRGcmFtZUR1cmF0aW9uKGludCBmcmFtZV9jb3VudCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZyYW1lcyBuZWVkZWQgdG8gcmVhY2ggdGhlIHRhcmdldCB0aW1lc3RhbXAuCi0gIC8vIE5vdGU6IHx0YXJnZXR8IG11c3QgYmUgPj0gfGJhc2VfdGltZXN0YW1wX3wuCi0gIGludDY0X3QgR2V0RnJhbWVzVG9UYXJnZXQoYmFzZTo6VGltZURlbHRhIHRhcmdldCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBiYXNlOjpUaW1lRGVsdGEgQ29tcHV0ZVRpbWVzdGFtcChpbnQ2NF90IGZyYW1lX2NvdW50KSBjb25zdDsKLQotICBkb3VibGUgbWljcm9zZWNvbmRzX3Blcl9mcmFtZV87Ci0KLSAgYmFzZTo6VGltZURlbHRhIGJhc2VfdGltZXN0YW1wXzsKLQotICAvLyBOdW1iZXIgb2YgZnJhbWVzIGFjY3VtdWxhdGVkIGJ5IEFkZEZyYW1lcygpIGNhbGxzLgotICBpbnQ2NF90IGZyYW1lX2NvdW50XzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoQXVkaW9UaW1lc3RhbXBIZWxwZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fVElNRVNUQU1QX0hFTFBFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdGltZXN0YW1wX2hlbHBlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNjAzODIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdGltZXN0YW1wX2hlbHBlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdGltZXN0YW1wX2hlbHBlci5oIgotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQgazQ4a0h6ID0gNDgwMDA7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1zdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0U2FtcGxlUmF0ZSA9IDQ0MTAwOwotCi1jbGFzcyBBdWRpb1RpbWVzdGFtcEhlbHBlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIEF1ZGlvVGltZXN0YW1wSGVscGVyVGVzdCgpIDogaGVscGVyXyhrRGVmYXVsdFNhbXBsZVJhdGUpIHsKLSAgICBoZWxwZXJfLlNldEJhc2VUaW1lc3RhbXAoYmFzZTo6VGltZURlbHRhKCkpOwotICB9Ci0KLSAgLy8gQWRkcyBmcmFtZXMgdG8gdGhlIGhlbHBlciBhbmQgcmV0dXJucyB0aGUgY3VycmVudCB0aW1lc3RhbXAgaW4KLSAgLy8gbWljcm9zZWNvbmRzLgotICBpbnQ2NF90IEFkZEZyYW1lcyhpbnQgZnJhbWVzKSB7Ci0gICAgaGVscGVyXy5BZGRGcmFtZXMoZnJhbWVzKTsKLSAgICByZXR1cm4gaGVscGVyXy5HZXRUaW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpOwotICB9Ci0KLSAgaW50NjRfdCBGcmFtZXNUb1RhcmdldChpbnQgdGFyZ2V0X2luX21pY3Jvc2Vjb25kcykgewotICAgIHJldHVybiBoZWxwZXJfLkdldEZyYW1lc1RvVGFyZ2V0KAotICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHModGFyZ2V0X2luX21pY3Jvc2Vjb25kcykpOwotICB9Ci0KLSAgdm9pZCBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZShpbnQgZnJhbWVfY291bnQsIGludCBzdGFydCwgaW50IGVuZCkgewotICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSkgewotICAgICAgRVhQRUNUX0VRKGZyYW1lX2NvdW50LCBGcmFtZXNUb1RhcmdldChpKSkKLSAgICAgICAgICA8PCAiIEZhaWx1cmUgZm9yIHRpbWVzdGFtcCAiIDw8IGkgPDwgIiB1cy4iOwotICAgIH0KLSAgfQotCi0gcHJvdGVjdGVkOgotICBBdWRpb1RpbWVzdGFtcEhlbHBlciBoZWxwZXJfOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEF1ZGlvVGltZXN0YW1wSGVscGVyVGVzdCk7Ci19OwotCi1URVNUX0YoQXVkaW9UaW1lc3RhbXBIZWxwZXJUZXN0LCBGcmFtZXNUb1RpbWUpIHsKLSAgLy8gTmVnYXRpdmUgdmFsdWUuCi0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKC0xKSwKLSAgICAgICAgICAgIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpGcmFtZXNUb1RpbWUoLTQ4MDAwLCBrNDhrSHopKTsKLSAgLy8gWmVyby4KLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygwKSwKLSAgICAgICAgICAgIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpGcmFtZXNUb1RpbWUoMCwgazQ4a0h6KSk7Ci0gIC8vIE9uZSBmcmFtZS4KLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygyMCksCi0gICAgICAgICAgICBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6RnJhbWVzVG9UaW1lKDEsIGs0OGtIeikpOwotICAvLyBFeGFjdCB2YWx1ZSB3aXRoIG1heGltdW0gcHJlY2lzaW9uIG9mIFRpbWVEZWx0YS4KLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxNTYyNSksCi0gICAgICAgICAgICBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6RnJhbWVzVG9UaW1lKDc1MCwgazQ4a0h6KSk7Ci0gIC8vIE9uZSBzZWNvbmQuCi0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEpLAotICAgICAgICAgICAgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OkZyYW1lc1RvVGltZSg0ODAwMCwgazQ4a0h6KSk7Ci0gIC8vIEFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWUgZXhjZWVkaW5nIDMyIGJpdHMuCi0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEwMDAwMDApLAotICAgICAgICAgICAgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OkZyYW1lc1RvVGltZSg0ODAwMDAwMDAwMCwgazQ4a0h6KSk7Ci19Ci0KLVRFU1RfRihBdWRpb1RpbWVzdGFtcEhlbHBlclRlc3QsIFRpbWVUb0ZyYW1lcykgewotICAvLyBOZWdhdGl2ZSB2YWx1ZS4KLSAgRVhQRUNUX0VRKC00ODAwMCwgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OlRpbWVUb0ZyYW1lcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoLTEpLCBrNDhrSHopKTsKLSAgLy8gWmVyby4KLSAgRVhQRUNUX0VRKDAsIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpUaW1lVG9GcmFtZXMoCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDApLCBrNDhrSHopKTsKLSAgLy8gQW55IGR1cmF0aW9uIGxlc3MgdGhhbiAyMSBtaWNyb3NlY29uZHMgd2lsbCByZXR1cm4gemVybyBmcmFtZXMgYXQgNDgga0h6Ci0gIC8vIGJlY2F1c2UgZWFjaCBmcmFtZSBpcyAyMC44MzMgbWljcm9zZWNvbmRzLgotICBFWFBFQ1RfRVEoMCwgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OlRpbWVUb0ZyYW1lcygKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMjApLCBrNDhrSHopKTsKLSAgRVhQRUNUX0VRKDEsIEF1ZGlvVGltZXN0YW1wSGVscGVyOjpUaW1lVG9GcmFtZXMoCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDIxKSwgazQ4a0h6KSk7Ci0gIC8vIEV4YWN0IHZhbHVlIHdpdGggbWF4aW11bSBwcmVjaXNpb24gb2YgVGltZURlbHRhLgotICBFWFBFQ1RfRVEoNzUwLCBBdWRpb1RpbWVzdGFtcEhlbHBlcjo6VGltZVRvRnJhbWVzKAotICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDE1NjI1KSwgazQ4a0h6KSk7Ci0gIC8vIE9uZSBzZWNvbmQuCi0gIEVYUEVDVF9FUSg0ODAwMCwgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OlRpbWVUb0ZyYW1lcygKLSAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSwgazQ4a0h6KSk7Ci0gIC8vIEFyZ3VtZW50IGFuZCByZXR1cm4gdmFsdWUgZXhjZWVkaW5nIDMyIGJpdHMuCi0gIEVYUEVDVF9FUSg0ODAwMDAwMDAwMCwgQXVkaW9UaW1lc3RhbXBIZWxwZXI6OlRpbWVUb0ZyYW1lcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMDAwMDAwKSwgazQ4a0h6KSk7Ci19Ci0KLVRFU1RfRihBdWRpb1RpbWVzdGFtcEhlbHBlclRlc3QsIEJhc2ljKSB7Ci0gIEVYUEVDVF9FUSgwLCBoZWxwZXJfLkdldFRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgdGltZXN0YW1wIGlzIGFsd2F5cyByb3VuZGVkIGRvd24gdG8gdGhlCi0gIC8vIG5lYXJlc3QgbWljcm9zZWNvbmQuIDEgZnJhbWUgQCA0NDEwMCBpcyB+MjIuNjc1NzMgbWljcm9zZWNvbmRzLAotICAvLyB3aGljaCBpcyB3aHkgdGhlIHRpbWVzdGFtcCBzb21ldGltZXMgaW5jcmVtZW50cyBieSAyMyBtaWNyb3NlY29uZHMKLSAgLy8gYW5kIG90aGVyIHRpbWVzIGl0IGluY3JlbWVudHMgYnkgMjIgbWljcm9zZWNvbmRzLgotICBFWFBFQ1RfRVEoMCwgQWRkRnJhbWVzKDApKTsKLSAgRVhQRUNUX0VRKDIyLCBBZGRGcmFtZXMoMSkpOwotICBFWFBFQ1RfRVEoNDUsIEFkZEZyYW1lcygxKSk7Ci0gIEVYUEVDVF9FUSg2OCwgQWRkRnJhbWVzKDEpKTsKLSAgRVhQRUNUX0VRKDkwLCBBZGRGcmFtZXMoMSkpOwotICBFWFBFQ1RfRVEoMTEzLCBBZGRGcmFtZXMoMSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IGFkZGluZyBmcmFtZXMgb25lIGZyYW1lIGF0IGEgdGltZSBtYXRjaGVzIHRoZSB0aW1lc3RhbXAKLSAgLy8gcmV0dXJuZWQgaWYgdGhlIHNhbWUgbnVtYmVyIG9mIGZyYW1lcyBhcmUgYWRkZWQgYWxsIGF0IG9uY2UuCi0gIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfMSA9IGhlbHBlcl8uR2V0VGltZXN0YW1wKCk7Ci0gIGhlbHBlcl8uU2V0QmFzZVRpbWVzdGFtcChrTm9UaW1lc3RhbXApOwotICBFWFBFQ1RfVFJVRShrTm9UaW1lc3RhbXAgPT0gaGVscGVyXy5iYXNlX3RpbWVzdGFtcCgpKTsKLSAgaGVscGVyXy5TZXRCYXNlVGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgRVhQRUNUX0VRKDAsIGhlbHBlcl8uR2V0VGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSk7Ci0KLSAgaGVscGVyXy5BZGRGcmFtZXMoNSk7Ci0gIEVYUEVDVF9FUSgxMTMsIGhlbHBlcl8uR2V0VGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKHRpbWVzdGFtcF8xID09IGhlbHBlcl8uR2V0VGltZXN0YW1wKCkpOwotfQotCi1URVNUX0YoQXVkaW9UaW1lc3RhbXBIZWxwZXJUZXN0LCBHZXREdXJhdGlvbikgewotICBoZWxwZXJfLlNldEJhc2VUaW1lc3RhbXAoYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEwMCkpOwotCi0gIGludCBmcmFtZV9jb3VudCA9IDU7Ci0gIGludDY0X3QgZXhwZWN0ZWRfZHVyYXRpb25zW10gPSB7MTEzLCAxMTMsIDExNCwgMTEzLCAxMTMsIDExNH07Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGV4cGVjdGVkX2R1cmF0aW9ucyk7ICsraSkgewotICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbiA9IGhlbHBlcl8uR2V0RnJhbWVEdXJhdGlvbihmcmFtZV9jb3VudCk7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkX2R1cmF0aW9uc1tpXSwgZHVyYXRpb24uSW5NaWNyb3NlY29uZHMoKSk7Ci0KLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wXzEgPSBoZWxwZXJfLkdldFRpbWVzdGFtcCgpICsgZHVyYXRpb247Ci0gICAgaGVscGVyXy5BZGRGcmFtZXMoZnJhbWVfY291bnQpOwotICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfMiA9IGhlbHBlcl8uR2V0VGltZXN0YW1wKCk7Ci0gICAgRVhQRUNUX1RSVUUodGltZXN0YW1wXzEgPT0gdGltZXN0YW1wXzIpOwotICB9Ci19Ci0KLVRFU1RfRihBdWRpb1RpbWVzdGFtcEhlbHBlclRlc3QsIEdldEZyYW1lc1RvVGFyZ2V0KSB7Ci0gIC8vIFZlcmlmeSBHZXRGcmFtZXNUb1RhcmdldCgpIHJvdW5kaW5nIGJlaGF2aW9yLgotICAvLyAxIGZyYW1lIEAgNDQxMDAgaXMgfjIyLjY3NTczIG1pY3Jvc2Vjb25kcywKLQotICAvLyBUZXN0IHZhbHVlcyBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgZnJhbWUgZHVyYXRpb24uCi0gIFRlc3RHZXRGcmFtZXNUb1RhcmdldFJhbmdlKDAsIDAsIDExKTsKLQotICAvLyBUZXN0IHZhbHVlcyBiZXR3ZWVuIGhhbGYgdGhlIGZyYW1lIGR1cmF0aW9uICYgdGhlCi0gIC8vIGZ1bGwgZnJhbWUgZHVyYXRpb24uCi0gIFRlc3RHZXRGcmFtZXNUb1RhcmdldFJhbmdlKDEsIDEyLCAyMik7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNhbWUgbnVtYmVyIG9mIGZyYW1lcyBpcyByZXR1cm5lZCB1cAotICAvLyB0byB0aGUgbmV4dCBoYWxmIGEgZnJhbWUuCi0gIFRlc3RHZXRGcmFtZXNUb1RhcmdldFJhbmdlKDEsIDIzLCAzNCk7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBuZXh0IDMgcmFuZ2VzLgotICBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZSgyLCAzNSwgNTYpOwotICBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZSgzLCA1NywgNzkpOwotICBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZSg0LCA4MCwgMTAyKTsKLSAgVGVzdEdldEZyYW1lc1RvVGFyZ2V0UmFuZ2UoNSwgMTAzLCAxMjQpOwotCi0gIC8vIEFkZCBmcmFtZXMgdG8gdGhlIGhlbHBlciBzbyBuZWdhdGl2ZSBmcmFtZSBjb3VudHMgY2FuIGJlIHRlc3RlZC4KLSAgaGVscGVyXy5BZGRGcmFtZXMoNSk7Ci0KLSAgLy8gTm90ZTogVGhlIHRpbWVzdGFtcCByYW5nZXMgbXVzdCBtYXRjaCB0aGUgcG9zaXRpdmUgdmFsdWVzCi0gIC8vIHRlc3RlZCBhYm92ZSB0byB2ZXJpZnkgdGhhdCB0aGUgY29kZSBpcyByb3VuZGluZyBwcm9wZXJseS4KLSAgVGVzdEdldEZyYW1lc1RvVGFyZ2V0UmFuZ2UoMCwgMTAzLCAxMjQpOwotICBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZSgtMSwgODAsIDEwMik7Ci0gIFRlc3RHZXRGcmFtZXNUb1RhcmdldFJhbmdlKC0yLCA1NywgNzkpOwotICBUZXN0R2V0RnJhbWVzVG9UYXJnZXRSYW5nZSgtMywgMzUsIDU2KTsKLSAgVGVzdEdldEZyYW1lc1RvVGFyZ2V0UmFuZ2UoLTQsIDEyLCAzNCk7Ci0gIFRlc3RHZXRGcmFtZXNUb1RhcmdldFJhbmdlKC01LCAwLCAxMSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdmlkZW9fbWV0YWRhdGFfZXh0cmFjdG9yLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdmlkZW9fbWV0YWRhdGFfZXh0cmFjdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFlYjRjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3ZpZGVvX21ldGFkYXRhX2V4dHJhY3Rvci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb192aWRlb19tZXRhZGF0YV9leHRyYWN0b3IuaCIKLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmZtcGVnL2ZmbXBlZ19jb21tb24uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9ibG9ja2luZ191cmxfcHJvdG9jb2wuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9mZm1wZWdfZ2x1ZS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgT25FcnJvcihib29sKiBzdWNjZWVkZWQpIHsgKnN1Y2NlZWRlZCA9IGZhbHNlOyB9Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgfHRhZ3wgbWF0Y2hlcyB8ZXhwZWN0ZWRfa2V5fC4KLWJvb2wgRXh0cmFjdFN0cmluZyhBVkRpY3Rpb25hcnlFbnRyeSogdGFnLCBjb25zdCBjaGFyKiBleHBlY3RlZF9rZXksCi0gICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGRlc3RpbmF0aW9uKSB7Ci0gIGlmICghYmFzZTo6TG93ZXJDYXNlRXF1YWxzQVNDSUkoc3RkOjpzdHJpbmcodGFnLT5rZXkpLCBleHBlY3RlZF9rZXkpKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoZGVzdGluYXRpb24tPmVtcHR5KCkpICpkZXN0aW5hdGlvbiA9IHRhZy0+dmFsdWU7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgfHRhZ3wgbWF0Y2hlcyB8ZXhwZWN0ZWRfa2V5fC4KLWJvb2wgRXh0cmFjdEludChBVkRpY3Rpb25hcnlFbnRyeSogdGFnLCBjb25zdCBjaGFyKiBleHBlY3RlZF9rZXksCi0gICAgICAgICAgICAgICAgaW50KiBkZXN0aW5hdGlvbikgewotICBpZiAoIWJhc2U6Okxvd2VyQ2FzZUVxdWFsc0FTQ0lJKHN0ZDo6c3RyaW5nKHRhZy0+a2V5KSwgZXhwZWN0ZWRfa2V5KSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgaW50IHRlbXBvcmFyeSA9IC0xOwotICBpZiAoKmRlc3RpbmF0aW9uIDwgMCAmJiBiYXNlOjpTdHJpbmdUb0ludCh0YWctPnZhbHVlLCAmdGVtcG9yYXJ5KSAmJgotICAgICAgdGVtcG9yYXJ5ID49IDApIHsKLSAgICAqZGVzdGluYXRpb24gPSB0ZW1wb3Jhcnk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU2V0IGF0dGFjaGVkIGltYWdlIHNpemUgbGltaXQgdG8gNE1CLiBDaG9zZW4gYXJiaXRyYXJpbHkuCi1jb25zdCBpbnQga0F0dGFjaGVkSW1hZ2VTaXplTGltaXQgPSA0ICogMTAyNCAqIDEwMjQ7Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1BdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OlN0cmVhbUluZm86OlN0cmVhbUluZm8oKSB7fQotCi1BdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OlN0cmVhbUluZm86OlN0cmVhbUluZm8oY29uc3QgU3RyZWFtSW5mbyYgb3RoZXIpID0KLSAgICBkZWZhdWx0OwotCi1BdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OlN0cmVhbUluZm86On5TdHJlYW1JbmZvKCkge30KLQotQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjpBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3IoKQotICAgIDogZXh0cmFjdGVkXyhmYWxzZSksCi0gICAgICBkdXJhdGlvbl8oLTEpLAotICAgICAgd2lkdGhfKC0xKSwKLSAgICAgIGhlaWdodF8oLTEpLAotICAgICAgZGlzY18oLTEpLAotICAgICAgcm90YXRpb25fKC0xKSwKLSAgICAgIHRyYWNrXygtMSkge30KLQotQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjp+QXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yKCkge30KLQotYm9vbCBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OkV4dHJhY3QoRGF0YVNvdXJjZSogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleHRyYWN0X2F0dGFjaGVkX2ltYWdlcykgewotICBEQ0hFQ0soIWV4dHJhY3RlZF8pOwotCi0gIGJvb2wgcmVhZF9vayA9IHRydWU7Ci0gIG1lZGlhOjpCbG9ja2luZ1VybFByb3RvY29sIHByb3RvY29sKHNvdXJjZSwgYmFzZTo6QmluZCgmT25FcnJvciwgJnJlYWRfb2spKTsKLSAgbWVkaWE6OkZGbXBlZ0dsdWUgZ2x1ZSgmcHJvdG9jb2wpOwotICBBVkZvcm1hdENvbnRleHQqIGZvcm1hdF9jb250ZXh0ID0gZ2x1ZS5mb3JtYXRfY29udGV4dCgpOwotCi0gIGlmICghZ2x1ZS5PcGVuQ29udGV4dCgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKCFyZWFkX29rKSByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKCFmb3JtYXRfY29udGV4dC0+aWZvcm1hdCkgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChhdmZvcm1hdF9maW5kX3N0cmVhbV9pbmZvKGZvcm1hdF9jb250ZXh0LCBOVUxMKSA8IDApIHJldHVybiBmYWxzZTsKLQotICBpZiAoZm9ybWF0X2NvbnRleHQtPmR1cmF0aW9uICE9IEFWX05PUFRTX1ZBTFVFKQotICAgIGR1cmF0aW9uXyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oZm9ybWF0X2NvbnRleHQtPmR1cmF0aW9uKSAvIEFWX1RJTUVfQkFTRTsKLQotICBzdHJlYW1faW5mb3NfLnB1c2hfYmFjayhTdHJlYW1JbmZvKCkpOwotICBTdHJlYW1JbmZvJiBjb250YWluZXJfaW5mbyA9IHN0cmVhbV9pbmZvc18uYmFjaygpOwotICBjb250YWluZXJfaW5mby50eXBlID0gZm9ybWF0X2NvbnRleHQtPmlmb3JtYXQtPm5hbWU7Ci0gIEV4dHJhY3REaWN0aW9uYXJ5KGZvcm1hdF9jb250ZXh0LT5tZXRhZGF0YSwgJmNvbnRhaW5lcl9pbmZvLnRhZ3MpOwotCi0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZm9ybWF0X2NvbnRleHQtPm5iX3N0cmVhbXM7ICsraSkgewotICAgIHN0cmVhbV9pbmZvc18ucHVzaF9iYWNrKFN0cmVhbUluZm8oKSk7Ci0gICAgU3RyZWFtSW5mbyYgaW5mbyA9IHN0cmVhbV9pbmZvc18uYmFjaygpOwotCi0gICAgQVZTdHJlYW0qIHN0cmVhbSA9IGZvcm1hdF9jb250ZXh0LT5zdHJlYW1zW2ldOwotICAgIGlmICghc3RyZWFtKSBjb250aW51ZTsKLQotICAgIC8vIEV4dHJhY3QgZGljdGlvbmFyeSBmcm9tIHN0cmVhbXMgYWxzby4gTmVlZGVkIGZvciBjb250YWluZXJzIHRoYXQgYXR0YWNoCi0gICAgLy8gbWV0YWRhdGEgdG8gY29udGFpbmVkIHN0cmVhbXMgaW5zdGVhZCB0aGUgY29udGFpbmVyIGl0c2VsZiwgbGlrZSBPR0cuCi0gICAgRXh0cmFjdERpY3Rpb25hcnkoc3RyZWFtLT5tZXRhZGF0YSwgJmluZm8udGFncyk7Ci0KLSAgICBpZiAoIXN0cmVhbS0+Y29kZWMpIGNvbnRpbnVlOwotCi0gICAgaW5mby50eXBlID0gYXZjb2RlY19nZXRfbmFtZShzdHJlYW0tPmNvZGVjLT5jb2RlY19pZCk7Ci0KLSAgICAvLyBFeHRyYWN0IGRpbWVuc2lvbnMgb2YgbGFyZ2VzdCBzdHJlYW0gdGhhdCdzIG5vdCBhbiBhdHRhY2hlZCBpbWFnZS4KLSAgICBpZiAoc3RyZWFtLT5jb2RlYy0+d2lkdGggPiAwICYmIHN0cmVhbS0+Y29kZWMtPndpZHRoID4gd2lkdGhfICYmCi0gICAgICAgIHN0cmVhbS0+Y29kZWMtPmhlaWdodCA+IDAgJiYgc3RyZWFtLT5jb2RlYy0+aGVpZ2h0ID4gaGVpZ2h0XykgewotICAgICAgd2lkdGhfID0gc3RyZWFtLT5jb2RlYy0+d2lkdGg7Ci0gICAgICBoZWlnaHRfID0gc3RyZWFtLT5jb2RlYy0+aGVpZ2h0OwotICAgIH0KLQotICAgIC8vIEV4dHJhY3QgYXR0YWNoZWQgaW1hZ2UgaWYgcmVxdWVzdGVkLgotICAgIGlmIChleHRyYWN0X2F0dGFjaGVkX2ltYWdlcyAmJgotICAgICAgICBzdHJlYW0tPmRpc3Bvc2l0aW9uID09IEFWX0RJU1BPU0lUSU9OX0FUVEFDSEVEX1BJQyAmJgotICAgICAgICBzdHJlYW0tPmF0dGFjaGVkX3BpYy5zaXplID4gMCAmJgotICAgICAgICBzdHJlYW0tPmF0dGFjaGVkX3BpYy5zaXplIDw9IGtBdHRhY2hlZEltYWdlU2l6ZUxpbWl0ICYmCi0gICAgICAgIHN0cmVhbS0+YXR0YWNoZWRfcGljLmRhdGEgIT0gTlVMTCkgewotICAgICAgYXR0YWNoZWRfaW1hZ2VzX2J5dGVzXy5wdXNoX2JhY2soc3RkOjpzdHJpbmcoKSk7Ci0gICAgICBhdHRhY2hlZF9pbWFnZXNfYnl0ZXNfLmJhY2soKS5hc3NpZ24oCi0gICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyZWFtLT5hdHRhY2hlZF9waWMuZGF0YSksCi0gICAgICAgICAgc3RyZWFtLT5hdHRhY2hlZF9waWMuc2l6ZSk7Ci0gICAgfQotICB9Ci0KLSAgZXh0cmFjdGVkXyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1kb3VibGUgQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjpkdXJhdGlvbigpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gZHVyYXRpb25fOwotfQotCi1pbnQgQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjp3aWR0aCgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gd2lkdGhfOwotfQotCi1pbnQgQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjpoZWlnaHQoKSBjb25zdCB7Ci0gIERDSEVDSyhleHRyYWN0ZWRfKTsKLSAgcmV0dXJuIGhlaWdodF87Ci19Ci0KLWludCBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OnJvdGF0aW9uKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiByb3RhdGlvbl87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OmFsYnVtKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiBhbGJ1bV87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OmFydGlzdCgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gYXJ0aXN0XzsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcjo6Y29tbWVudCgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gY29tbWVudF87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OmNvcHlyaWdodCgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gY29weXJpZ2h0XzsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcjo6ZGF0ZSgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gZGF0ZV87Ci19Ci0KLWludCBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OmRpc2MoKSBjb25zdCB7Ci0gIERDSEVDSyhleHRyYWN0ZWRfKTsKLSAgcmV0dXJuIGRpc2NfOwotfQotCi1jb25zdCBzdGQ6OnN0cmluZyYgQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjplbmNvZGVyKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiBlbmNvZGVyXzsKLX0KLQotY29uc3Qgc3RkOjpzdHJpbmcmIEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcjo6ZW5jb2RlZF9ieSgpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gZW5jb2RlZF9ieV87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OmdlbnJlKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiBnZW5yZV87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6Omxhbmd1YWdlKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiBsYW5ndWFnZV87Ci19Ci0KLWNvbnN0IHN0ZDo6c3RyaW5nJiBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OnRpdGxlKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiB0aXRsZV87Ci19Ci0KLWludCBBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OnRyYWNrKCkgY29uc3QgewotICBEQ0hFQ0soZXh0cmFjdGVkXyk7Ci0gIHJldHVybiB0cmFja187Ci19Ci0KLWNvbnN0IHN0ZDo6dmVjdG9yPEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcjo6U3RyZWFtSW5mbz4mCi1BdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I6OnN0cmVhbV9pbmZvcygpIGNvbnN0IHsKLSAgRENIRUNLKGV4dHJhY3RlZF8pOwotICByZXR1cm4gc3RyZWFtX2luZm9zXzsKLX0KLQotY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JgotQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjphdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKSBjb25zdCB7Ci0gIERDSEVDSyhleHRyYWN0ZWRfKTsKLSAgcmV0dXJuIGF0dGFjaGVkX2ltYWdlc19ieXRlc187Ci19Ci0KLXZvaWQgQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjpFeHRyYWN0RGljdGlvbmFyeShBVkRpY3Rpb25hcnkqIG1ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0RpY3Rpb25hcnkqIHJhd190YWdzKSB7Ci0gIGlmICghbWV0YWRhdGEpIHJldHVybjsKLQotICBmb3IgKEFWRGljdGlvbmFyeUVudHJ5KiB0YWcgPQotICAgICAgICAgICBhdl9kaWN0X2dldChtZXRhZGF0YSwgIiIsIE5VTEwsIEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCk7Ci0gICAgICAgdGFnOyB0YWcgPSBhdl9kaWN0X2dldChtZXRhZGF0YSwgIiIsIHRhZywgQVZfRElDVF9JR05PUkVfU1VGRklYKSkgewotICAgIGlmIChyYXdfdGFncy0+ZmluZCh0YWctPmtleSkgPT0gcmF3X3RhZ3MtPmVuZCgpKQotICAgICAgKCpyYXdfdGFncylbdGFnLT5rZXldID0gdGFnLT52YWx1ZTsKLQotICAgIGlmIChFeHRyYWN0SW50KHRhZywgInJvdGF0ZSIsICZyb3RhdGlvbl8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJhbGJ1bSIsICZhbGJ1bV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJhcnRpc3QiLCAmYXJ0aXN0XykpIGNvbnRpbnVlOwotICAgIGlmIChFeHRyYWN0U3RyaW5nKHRhZywgImNvbW1lbnQiLCAmY29tbWVudF8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJjb3B5cmlnaHQiLCAmY29weXJpZ2h0XykpIGNvbnRpbnVlOwotICAgIGlmIChFeHRyYWN0U3RyaW5nKHRhZywgImRhdGUiLCAmZGF0ZV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdEludCh0YWcsICJkaXNjIiwgJmRpc2NfKSkgY29udGludWU7Ci0gICAgaWYgKEV4dHJhY3RTdHJpbmcodGFnLCAiZW5jb2RlciIsICZlbmNvZGVyXykpIGNvbnRpbnVlOwotICAgIGlmIChFeHRyYWN0U3RyaW5nKHRhZywgImVuY29kZWRfYnkiLCAmZW5jb2RlZF9ieV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJnZW5yZSIsICZnZW5yZV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJsYW5ndWFnZSIsICZsYW5ndWFnZV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdFN0cmluZyh0YWcsICJ0aXRsZSIsICZ0aXRsZV8pKSBjb250aW51ZTsKLSAgICBpZiAoRXh0cmFjdEludCh0YWcsICJ0cmFjayIsICZ0cmFja18pKSBjb250aW51ZTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3ZpZGVvX21ldGFkYXRhX2V4dHJhY3Rvci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdmlkZW9fbWV0YWRhdGFfZXh0cmFjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNzIxMDcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdmlkZW9fbWV0YWRhdGFfZXh0cmFjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0FVRElPX1ZJREVPX01FVEFEQVRBX0VYVFJBQ1RPUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9BVURJT19WSURFT19NRVRBREFUQV9FWFRSQUNUT1JfSF8KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLXN0cnVjdCBBVkRpY3Rpb25hcnk7Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgRGF0YVNvdXJjZTsKLQotLy8gVGhpcyBjbGFzcyBleHRyYWN0cyBhIHN0cmluZyBkaWN0aW9uYXJ5IG9mIG1ldGFkYXRhIHRhZ3MgZm9yIGF1ZGlvIGFuZCB2aWRlbwotLy8gZmlsZXMuIEl0IGFsc28gcHJvdmlkZXMgdGhlIGZvcm1hdCBuYW1lLgotY2xhc3MgTUVESUFfRVhQT1JUIEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3RvciB7Ci0gcHVibGljOgotICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gVGFnRGljdGlvbmFyeTsKLQotICBzdHJ1Y3QgU3RyZWFtSW5mbyB7Ci0gICAgU3RyZWFtSW5mbygpOwotICAgIFN0cmVhbUluZm8oY29uc3QgU3RyZWFtSW5mbyYgb3RoZXIpOwotICAgIH5TdHJlYW1JbmZvKCk7Ci0gICAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgICBUYWdEaWN0aW9uYXJ5IHRhZ3M7Ci0gIH07Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxTdHJlYW1JbmZvPiBTdHJlYW1JbmZvVmVjdG9yOwotCi0gIEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3RvcigpOwotICB+QXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yKCk7Ci0KLSAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZmllbGRzIHdlcmUgc3VjY2Vzc2Z1bGx5IGV4dHJhY3RlZC4gU2hvdWxkIG9ubHkKLSAgLy8gYmUgY2FsbGVkIG9uY2UuCi0gIGJvb2wgRXh0cmFjdChEYXRhU291cmNlKiBzb3VyY2UsIGJvb2wgZXh0cmFjdF9hdHRhY2hlZF9waWNzKTsKLQotICAvLyBSZXR1cm5zIC0xIGlmIHdlIGNhbm5vdCBleHRyYWN0IHRoZSBkdXJhdGlvbi4gSW4gc2Vjb25kcy4KLSAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyAtMSBmb3IgY29udGFpbmVycyB3aXRob3V0IHZpZGVvLgotICBpbnQgd2lkdGgoKSBjb25zdDsKLSAgaW50IGhlaWdodCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgLTEgaWYgdW5kZWZpbmVkLgotICBpbnQgcm90YXRpb24oKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIC0xIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLgotICBjb25zdCBzdGQ6OnN0cmluZyYgYWxidW0oKSBjb25zdDsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGFydGlzdCgpIGNvbnN0OwotICBjb25zdCBzdGQ6OnN0cmluZyYgY29tbWVudCgpIGNvbnN0OwotICBjb25zdCBzdGQ6OnN0cmluZyYgY29weXJpZ2h0KCkgY29uc3Q7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBkYXRlKCkgY29uc3Q7Ci0gIGludCBkaXNjKCkgY29uc3Q7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVyKCkgY29uc3Q7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNvZGVkX2J5KCkgY29uc3Q7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBnZW5yZSgpIGNvbnN0OwotICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UoKSBjb25zdDsKLSAgY29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlKCkgY29uc3Q7Ci0gIGludCB0cmFjaygpIGNvbnN0OwotCi0gIC8vIEZpcnN0IGVsZW1lbnQgaXMgdGhlIGNvbnRhaW5lci4gU3Vic2VxdWVudCBlbGVtZW50cyBhcmUgdGhlIGNoaWxkIHN0cmVhbXMuCi0gIGNvbnN0IFN0cmVhbUluZm9WZWN0b3ImIHN0cmVhbV9pbmZvcygpIGNvbnN0OwotCi0gIC8vIEVtcHR5IGlmIEV4dHJhY3QgY2FsbCBkaWQgbm90IHJlcXVlc3QgYXR0YWNoZWQgaW1hZ2VzLCBvciBpZiBubyBhdHRhY2hlZAotICAvLyBpbWFnZXMgd2VyZSBmb3VuZC4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIHZvaWQgRXh0cmFjdERpY3Rpb25hcnkoQVZEaWN0aW9uYXJ5KiBtZXRhZGF0YSwgVGFnRGljdGlvbmFyeSogcmF3X3RhZ3MpOwotCi0gIGJvb2wgZXh0cmFjdGVkXzsKLQotICBpbnQgZHVyYXRpb25fOwotICBpbnQgd2lkdGhfOwotICBpbnQgaGVpZ2h0XzsKLQotICBzdGQ6OnN0cmluZyBhbGJ1bV87Ci0gIHN0ZDo6c3RyaW5nIGFydGlzdF87Ci0gIHN0ZDo6c3RyaW5nIGNvbW1lbnRfOwotICBzdGQ6OnN0cmluZyBjb3B5cmlnaHRfOwotICBzdGQ6OnN0cmluZyBkYXRlXzsKLSAgaW50IGRpc2NfOwotICBzdGQ6OnN0cmluZyBlbmNvZGVyXzsKLSAgc3RkOjpzdHJpbmcgZW5jb2RlZF9ieV87Ci0gIHN0ZDo6c3RyaW5nIGdlbnJlXzsKLSAgc3RkOjpzdHJpbmcgbGFuZ3VhZ2VfOwotICBpbnQgcm90YXRpb25fOwotICBzdGQ6OnN0cmluZyB0aXRsZV87Ci0gIGludCB0cmFja187Ci0KLSAgU3RyZWFtSW5mb1ZlY3RvciBzdHJlYW1faW5mb3NfOwotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBhdHRhY2hlZF9pbWFnZXNfYnl0ZXNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQVVESU9fVklERU9fTUVUQURBVEFfRVhUUkFDVE9SX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb192aWRlb19tZXRhZGF0YV9leHRyYWN0b3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9hdWRpb192aWRlb19tZXRhZGF0YV9leHRyYWN0b3JfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMjc1OTIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fdmlkZW9fbWV0YWRhdGFfZXh0cmFjdG9yX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3ZpZGVvX21ldGFkYXRhX2V4dHJhY3Rvci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zaGExLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9kYXRhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9maWxlX2RhdGFfc291cmNlLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RkOjp1bmlxdWVfcHRyPEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcj4gR2V0RXh0cmFjdG9yKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBleHRyYWN0X2F0dGFjaGVkX2ltYWdlcywKLSAgICBib29sIGV4cGVjdGVkX3Jlc3VsdCwgZG91YmxlIGV4cGVjdGVkX2R1cmF0aW9uLCBpbnQgZXhwZWN0ZWRfd2lkdGgsCi0gICAgaW50IGV4cGVjdGVkX2hlaWdodCkgewotICBGaWxlRGF0YVNvdXJjZSBzb3VyY2U7Ci0gIEVYUEVDVF9UUlVFKHNvdXJjZS5Jbml0aWFsaXplKEdldFRlc3REYXRhRmlsZVBhdGgoZmlsZW5hbWUpKSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcj4gZXh0cmFjdG9yKAotICAgICAgbmV3IEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcik7Ci0gIGJvb2wgZXh0cmFjdGVkID0gZXh0cmFjdG9yLT5FeHRyYWN0KCZzb3VyY2UsIGV4dHJhY3RfYXR0YWNoZWRfaW1hZ2VzKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX3Jlc3VsdCwgZXh0cmFjdGVkKTsKLQotICBpZiAoIWV4dHJhY3RlZCkgcmV0dXJuIGV4dHJhY3RvcjsKLQotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZHVyYXRpb24sIGV4dHJhY3Rvci0+ZHVyYXRpb24oKSk7Ci0KLSAgRVhQRUNUX0VRKGV4cGVjdGVkX3dpZHRoLCBleHRyYWN0b3ItPndpZHRoKCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfaGVpZ2h0LCBleHRyYWN0b3ItPmhlaWdodCgpKTsKLQotICByZXR1cm4gZXh0cmFjdG9yOwotfQotCi1jb25zdCBzdGQ6OnN0cmluZyBHZXRUYWdWYWx1ZSgKLSAgICBjb25zdCBtZWRpYTo6QXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yOjpUYWdEaWN0aW9uYXJ5JiB0YWdzLAotICAgIGNvbnN0IGNoYXIqIHRhZ19uYW1lKSB7Ci0gIGF1dG8gdGFnX2RhdGEgPSB0YWdzLmZpbmQodGFnX25hbWUpOwotICByZXR1cm4gdGFnX2RhdGEgPT0gdGFncy5lbmQoKSA/ICIiIDogdGFnX2RhdGEtPnNlY29uZDsKLX0KLQotVEVTVChBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3JUZXN0LCBJbnZhbGlkRmlsZSkgewotICBHZXRFeHRyYWN0b3IoInRlbl9ieXRlX2ZpbGUiLCB0cnVlLCBmYWxzZSwgMCwgLTEsIC0xKTsKLX0KLQotVEVTVChBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3JUZXN0LCBBdWRpb09HRykgewotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yPiBleHRyYWN0b3IgPQotICAgICAgR2V0RXh0cmFjdG9yKCI5Y2gub2dnIiwgdHJ1ZSwgdHJ1ZSwgMCwgLTEsIC0xKTsKLSAgRVhQRUNUX0VRKCJQcm9jZXNzZWQgYnkgU29YIiwgZXh0cmFjdG9yLT5jb21tZW50KCkpOwotCi0gIEVYUEVDVF9FUSgib2dnIiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50eXBlKTsKLSAgRVhQRUNUX0VRKDJ1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0VRKDB1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3Muc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoMXUsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMV0udGFncy5zaXplKCkpOwotICBFWFBFQ1RfRVEoInZvcmJpcyIsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMV0udHlwZSk7Ci0gIEVYUEVDVF9FUSgiUHJvY2Vzc2VkIGJ5IFNvWCIsCi0gICAgICAgICAgICBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzFdLnRhZ3MsICJDT01NRU5UIikpOwotCi0gIEVYUEVDVF9FUSgwdSwgZXh0cmFjdG9yLT5hdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKS5zaXplKCkpOwotfQotCi1URVNUKEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3RvclRlc3QsIEF1ZGlvV0FWKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I+IGV4dHJhY3RvciA9Ci0gICAgICBHZXRFeHRyYWN0b3IoInNmeF91OC53YXYiLCB0cnVlLCB0cnVlLCAwLCAtMSwgLTEpOwotICBFWFBFQ1RfRVEoIkxhdmY1NC4zNy4xMDAiLCBleHRyYWN0b3ItPmVuY29kZXIoKSk7Ci0gIEVYUEVDVF9FUSgiQW1hZGV1cyBQcm8iLCBleHRyYWN0b3ItPmVuY29kZWRfYnkoKSk7Ci0KLSAgRVhQRUNUX0VRKCJ3YXYiLCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnR5cGUpOwotICBFWFBFQ1RfRVEoMnUsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKCkuc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoMnUsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udGFncy5zaXplKCkpOwotICBFWFBFQ1RfRVEoIkxhdmY1NC4zNy4xMDAiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLCAiZW5jb2RlciIpKTsKLSAgRVhQRUNUX0VRKCJBbWFkZXVzIFBybyIsCi0gICAgICAgICAgICBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3MsICJlbmNvZGVkX2J5IikpOwotCi0gIEVYUEVDVF9FUSgicGNtX3U4IiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsxXS50eXBlKTsKLSAgRVhQRUNUX0VRKDB1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzFdLnRhZ3Muc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoMHUsIGV4dHJhY3Rvci0+YXR0YWNoZWRfaW1hZ2VzX2J5dGVzKCkuc2l6ZSgpKTsKLX0KLQotVEVTVChBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3JUZXN0LCBWaWRlb1dlYk0pIHsKLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3Rvcj4gZXh0cmFjdG9yID0KLSAgICAgIEdldEV4dHJhY3RvcigiYmVhci0zMjB4MjQwLW11bHRpdHJhY2sud2VibSIsIHRydWUsIHRydWUsIDIsIDMyMCwgMjQwKTsKLSAgRVhQRUNUX0VRKCJMYXZmNTMuOS4wIiwgZXh0cmFjdG9yLT5lbmNvZGVyKCkpOwotCi0gIEVYUEVDVF9FUSg2dSwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKS5zaXplKCkpOwotCi0gIEVYUEVDVF9FUSgibWF0cm9za2Esd2VibSIsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udHlwZSk7Ci0gIEVYUEVDVF9FUSgxdSwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiTGF2ZjUzLjkuMCIsCi0gICAgICAgICAgICBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3MsICJFTkNPREVSIikpOwotCi0gIEVYUEVDVF9FUSgidnA4IiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsxXS50eXBlKTsKLSAgRVhQRUNUX0VRKDB1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzFdLnRhZ3Muc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoInZvcmJpcyIsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMl0udHlwZSk7Ci0gIEVYUEVDVF9FUSgwdSwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsyXS50YWdzLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0VRKCJzdWJyaXAiLCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzNdLnR5cGUpOwotICBFWFBFQ1RfRVEoMHUsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbM10udGFncy5zaXplKCkpOwotCi0gIEVYUEVDVF9FUSgidGhlb3JhIiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVs0XS50eXBlKTsKLSAgRVhQRUNUX0VRKDB1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzRdLnRhZ3Muc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoInBjbV9zMTZsZSIsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbNV0udHlwZSk7Ci0gIEVYUEVDVF9FUSgxdSwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVs1XS50YWdzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiTGF2YzUyLjMyLjAiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVs1XS50YWdzLCAiRU5DT0RFUiIpKTsKLQotICBFWFBFQ1RfRVEoMHUsIGV4dHJhY3Rvci0+YXR0YWNoZWRfaW1hZ2VzX2J5dGVzKCkuc2l6ZSgpKTsKLX0KLQotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLVRFU1QoQXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yVGVzdCwgQW5kcm9pZFJvdGF0ZWRNUDRWaWRlbykgewotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9WaWRlb01ldGFkYXRhRXh0cmFjdG9yPiBleHRyYWN0b3IgPQotICAgICAgR2V0RXh0cmFjdG9yKCI5MHJvdGF0aW9uLm1wNCIsIHRydWUsIHRydWUsIDAsIDE5MjAsIDEwODApOwotCi0gIEVYUEVDVF9FUSg5MCwgZXh0cmFjdG9yLT5yb3RhdGlvbigpKTsKLQotICBFWFBFQ1RfRVEoM3UsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKCkuc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoIm1vdixtcDQsbTRhLDNncCwzZzIsbWoyIiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50eXBlKTsKLSAgRVhQRUNUX0VRKDR1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3Muc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJpc29tM2dwNCIsIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYXRpYmxlX2JyYW5kcyIpKTsKLSAgRVhQRUNUX0VRKCIyMDE0LTAyLTExIDAwOjM5OjI1IiwKLSAgICAgICAgICAgIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udGFncywgImNyZWF0aW9uX3RpbWUiKSk7Ci0gIEVYUEVDVF9FUSgiaXNvbSIsCi0gICAgICAgICAgICBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3MsICJtYWpvcl9icmFuZCIpKTsKLSAgRVhQRUNUX0VRKCIwIiwKLSAgICAgICAgICAgIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udGFncywgIm1pbm9yX3ZlcnNpb24iKSk7Ci0KLSAgRVhQRUNUX0VRKCJoMjY0IiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsxXS50eXBlKTsKLSAgRVhQRUNUX0VRKDV1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzFdLnRhZ3Muc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCIyMDE0LTAyLTExIDAwOjM5OjI1IiwKLSAgICAgICAgICAgIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMV0udGFncywgImNyZWF0aW9uX3RpbWUiKSk7Ci0gIEVYUEVDVF9FUSgiVmlkZW9IYW5kbGUiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsxXS50YWdzLCAiaGFuZGxlcl9uYW1lIikpOwotICBFWFBFQ1RfRVEoImVuZyIsIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMV0udGFncywgImxhbmd1YWdlIikpOwotICBFWFBFQ1RfRVEoIjkwIiwgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsxXS50YWdzLCAicm90YXRlIikpOwotCi0gIEVYUEVDVF9FUSgiYWFjIiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsyXS50eXBlKTsKLSAgRVhQRUNUX0VRKDN1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzJdLnRhZ3Muc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCIyMDE0LTAyLTExIDAwOjM5OjI1IiwKLSAgICAgICAgICAgIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMl0udGFncywgImNyZWF0aW9uX3RpbWUiKSk7Ci0gIEVYUEVDVF9FUSgiU291bmRIYW5kbGUiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsyXS50YWdzLCAiaGFuZGxlcl9uYW1lIikpOwotICBFWFBFQ1RfRVEoImVuZyIsIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMl0udGFncywgImxhbmd1YWdlIikpOwotCi0gIEVYUEVDVF9FUSgwdSwgZXh0cmFjdG9yLT5hdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKS5zaXplKCkpOwotfQotCi1URVNUKEF1ZGlvVmlkZW9NZXRhZGF0YUV4dHJhY3RvclRlc3QsIEF1ZGlvTVAzKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1ZpZGVvTWV0YWRhdGFFeHRyYWN0b3I+IGV4dHJhY3RvciA9Ci0gICAgICBHZXRFeHRyYWN0b3IoImlkM19wbmdfdGVzdC5tcDMiLCB0cnVlLCB0cnVlLCAxLCAtMSwgLTEpOwotCi0gIEVYUEVDVF9FUSgiQWlyYmFnIiwgZXh0cmFjdG9yLT50aXRsZSgpKTsKLSAgRVhQRUNUX0VRKCJSYWRpb2hlYWQiLCBleHRyYWN0b3ItPmFydGlzdCgpKTsKLSAgRVhQRUNUX0VRKCJPSyBDb21wdXRlciIsIGV4dHJhY3Rvci0+YWxidW0oKSk7Ci0gIEVYUEVDVF9FUSgxLCBleHRyYWN0b3ItPnRyYWNrKCkpOwotICBFWFBFQ1RfRVEoIkFsdGVybmF0aXZlIiwgZXh0cmFjdG9yLT5nZW5yZSgpKTsKLSAgRVhQRUNUX0VRKCIxOTk3IiwgZXh0cmFjdG9yLT5kYXRlKCkpOwotICBFWFBFQ1RfRVEoIkxhdmY1NC40LjEwMCIsIGV4dHJhY3Rvci0+ZW5jb2RlcigpKTsKLQotICBFWFBFQ1RfRVEoM3UsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKCkuc2l6ZSgpKTsKLQotICBFWFBFQ1RfRVEoIm1wMyIsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udHlwZSk7Ci0gIEVYUEVDVF9FUSg3dSwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgiT0sgQ29tcHV0ZXIiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLCAiYWxidW0iKSk7Ci0gIEVYUEVDVF9FUSgiUmFkaW9oZWFkIiwKLSAgICAgICAgICAgIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMF0udGFncywgImFydGlzdCIpKTsKLSAgRVhQRUNUX0VRKCIxOTk3IiwgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLCAiZGF0ZSIpKTsKLSAgRVhQRUNUX0VRKCJMYXZmNTQuNC4xMDAiLAotICAgICAgICAgICAgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLCAiZW5jb2RlciIpKTsKLSAgRVhQRUNUX0VRKCJBbHRlcm5hdGl2ZSIsCi0gICAgICAgICAgICBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3MsICJnZW5yZSIpKTsKLSAgRVhQRUNUX0VRKCJBaXJiYWciLCBHZXRUYWdWYWx1ZShleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzBdLnRhZ3MsICJ0aXRsZSIpKTsKLSAgRVhQRUNUX0VRKCIxIiwgR2V0VGFnVmFsdWUoZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVswXS50YWdzLCAidHJhY2siKSk7Ci0KLSAgRVhQRUNUX0VRKCJtcDMiLCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzFdLnR5cGUpOwotICBFWFBFQ1RfRVEoMHUsIGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMV0udGFncy5zaXplKCkpOwotCi0gIEVYUEVDVF9FUSgicG5nIiwgZXh0cmFjdG9yLT5zdHJlYW1faW5mb3MoKVsyXS50eXBlKTsKLSAgRVhQRUNUX0VRKDF1LCBleHRyYWN0b3ItPnN0cmVhbV9pbmZvcygpWzJdLnRhZ3Muc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJPdGhlciIsIEdldFRhZ1ZhbHVlKGV4dHJhY3Rvci0+c3RyZWFtX2luZm9zKClbMl0udGFncywgImNvbW1lbnQiKSk7Ci0KLSAgRVhQRUNUX0VRKDF1LCBleHRyYWN0b3ItPmF0dGFjaGVkX2ltYWdlc19ieXRlcygpLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgxNTU3NTJ1LCBleHRyYWN0b3ItPmF0dGFjaGVkX2ltYWdlc19ieXRlcygpWzBdLnNpemUoKSk7Ci0KLSAgRVhQRUNUX0VRKCJceDg5UE5HXHJcblx4MWFcbiIsCi0gICAgICAgICAgICBleHRyYWN0b3ItPmF0dGFjaGVkX2ltYWdlc19ieXRlcygpWzBdLnN1YnN0cigwLCA4KSk7Ci0gIEVYUEVDVF9FUSgiSUVORFx4YWVceDQyXHg2MFx4ODIiLAotICAgICAgICAgICAgZXh0cmFjdG9yLT5hdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKVswXS5zdWJzdHIoCi0gICAgICAgICAgICAgICAgZXh0cmFjdG9yLT5hdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKVswXS5zaXplKCkgLSA4LCA4KSk7Ci0gIEVYUEVDVF9FUSgiXHhGM1x4RURceDhGXHhDN1x4QzdceDk4XHhCOVZ8cFx4QzB1IVx4QjVceDgyXHhDRlx4OTVceEYwXHhDRFx4Q0UiLAotICAgICAgICAgICAgYmFzZTo6U0hBMUhhc2hTdHJpbmcoZXh0cmFjdG9yLT5hdHRhY2hlZF9pbWFnZXNfYnl0ZXMoKVswXSkpOwotfQotI2VuZGlmCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZGUwZDYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0JJTkRfVE9fQ1VSUkVOVF9MT09QX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0JJTkRfVE9fQ1VSUkVOVF9MT09QX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiYmFzZS9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmgiCi0jaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX3Rhc2tfcnVubmVyX2hhbmRsZS5oIgotCi0vLyBUaGlzIGlzIGEgaGVscGVyIHV0aWxpdHkgZm9yIGJhc2U6OkJpbmQoKWluZyBjYWxsYmFja3MgdG8gdGhlIGN1cnJlbnQKLS8vIGJhc2U6Ok1lc3NhZ2VMb29wLiBUaGUgdHlwaWNhbCB1c2UgaXMgd2hlbiB8YXwgKG9mIGNsYXNzIHxBfCkgd2FudHMgdG8gaGFuZCBhCi0vLyBjYWxsYmFjayBzdWNoIGFzIGJhc2U6OkJpbmQoJkE6OkFNZXRob2QsIGEpIHRvIHxifCwgYnV0IG5lZWRzIHRvIGVuc3VyZSB0aGF0Ci0vLyB3aGVuIHxifCBleGVjdXRlcyB0aGUgY2FsbGJhY2ssIGl0IGRvZXMgc28gb24gfGF8J3MgY3VycmVudAotLy8gYmFzZTo6TWVzc2FnZUxvb3AuCi0vLwotLy8gVHlwaWNhbCB1c2FnZTogcmVxdWVzdCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgY3VycmVudCB0aHJlYWQ6Ci0vLyBvdGhlci0+U3RhcnRBc3luY1Byb2Nlc3NBbmRDYWxsTWVCYWNrKAotLy8gICAgbWVkaWE6OkJpbmRUb0N1cnJlbnRMb29wKGJhc2U6OkJpbmQoJk15Q2xhc3M6Ok15TWV0aG9kLCB0aGlzKSkpOwotLy8KLS8vIE5vdGUgdGhhdCBsaWtlIGJhc2U6OkJpbmQoKSwgQmluZFRvQ3VycmVudExvb3AoKSBjYW4ndCBiaW5kIG5vbi1jb25zdGFudAotLy8gcmVmZXJlbmNlcywgYW5kIHRoYXQgKnVubGlrZSogYmFzZTo6QmluZCgpLCBCaW5kVG9DdXJyZW50TG9vcCgpIG1ha2VzIGNvcGllcwotLy8gb2YgaXRzIGFyZ3VtZW50cywgYW5kIHRodXMgY2FuJ3QgYmUgdXNlZCB3aXRoIGFycmF5cy4KLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBNaW1pYyBiYXNlOjppbnRlcm5hbDo6Q2FsbGJhY2tGb3J3YXJkLCByZXBsYWNpbmcgc3RkOjptb3ZlKHApIHdpdGgKLS8vIGJhc2U6OlBhc3NlZCgmcCkgdG8gYWNjb3VudCBmb3IgdGhlIGV4dHJhIGxheWVyIG9mIGluZGlyZWN0aW9uLgotbmFtZXNwYWNlIGludGVybmFsIHsKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCYgVHJhbXBvbGluZUZvcndhcmQoVCYgdCkgewotICByZXR1cm4gdDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFI+Ci1iYXNlOjppbnRlcm5hbDo6UGFzc2VkV3JhcHBlcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IFRyYW1wb2xpbmVGb3J3YXJkKAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiYgcCkgewotICByZXR1cm4gYmFzZTo6UGFzc2VkKCZwKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1iYXNlOjppbnRlcm5hbDo6UGFzc2VkV3JhcHBlcjxzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+PgotVHJhbXBvbGluZUZvcndhcmQoc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiYgcCkgewotICByZXR1cm4gYmFzZTo6UGFzc2VkKCZwKTsKLX0KLQotLy8gRmlyc3QsIHRlbGwgdGhlIGNvbXBpbGVyIFRyYW1wb2xpbmVIZWxwZXIgaXMgYSBzdHJ1Y3QgdGVtcGxhdGUgd2l0aCBvbmUKLS8vIHR5cGUgcGFyYW1ldGVyLiAgVGhlbiBkZWZpbmUgc3BlY2lhbGl6YXRpb25zIHdoZXJlIHRoZSB0eXBlIGlzIGEgZnVuY3Rpb24KLS8vIHJldHVybmluZyB2b2lkIGFuZCB0YWtpbmcgemVybyBvciBtb3JlIGFyZ3VtZW50cy4KLXRlbXBsYXRlIDx0eXBlbmFtZSBTaWc+Ci1zdHJ1Y3QgVHJhbXBvbGluZUhlbHBlcjsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBUcmFtcG9saW5lSGVscGVyPHZvaWQoKT4gewotICBzdGF0aWMgdm9pZCBSdW4oCi0gICAgICBjb25zdCBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+JiB0YXNrX3J1bm5lciwKLSAgICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUmIGNiKSB7Ci0gICAgdGFza19ydW5uZXItPlBvc3RUYXNrKEZST01fSEVSRSwgY2IpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQTE+Ci1zdHJ1Y3QgVHJhbXBvbGluZUhlbHBlcjx2b2lkKEExKT4gewotICBzdGF0aWMgdm9pZCBSdW4oY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbG9vcCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkNhbGxiYWNrPHZvaWQoQTEpPiYgY2IsIEExIGExKSB7Ci0gICAgbG9vcC0+UG9zdFRhc2soRlJPTV9IRVJFLCBiYXNlOjpCaW5kKGNiLCBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTEpKSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBBMSwgdHlwZW5hbWUgQTI+Ci1zdHJ1Y3QgVHJhbXBvbGluZUhlbHBlcjx2b2lkKEExLCBBMik+IHsKLSAgc3RhdGljIHZvaWQgUnVuKGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIGxvb3AsCi0gICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKEExLCBBMik+JiBjYiwgQTEgYTEsIEEyIGEyKSB7Ci0gICAgbG9vcC0+UG9zdFRhc2soRlJPTV9IRVJFLCBiYXNlOjpCaW5kKGNiLCBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTIpKSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBBMSwgdHlwZW5hbWUgQTIsIHR5cGVuYW1lIEEzPgotc3RydWN0IFRyYW1wb2xpbmVIZWxwZXI8dm9pZChBMSwgQTIsIEEzKT4gewotICBzdGF0aWMgdm9pZCBSdW4oY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbG9vcCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkNhbGxiYWNrPHZvaWQoQTEsIEEyLCBBMyk+JiBjYiwgQTEgYTEsIEEyIGEyLAotICAgICAgICAgICAgICAgICAgQTMgYTMpIHsKLSAgICBsb29wLT5Qb3N0VGFzayhGUk9NX0hFUkUsIGJhc2U6OkJpbmQoY2IsIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMykpKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEExLCB0eXBlbmFtZSBBMiwgdHlwZW5hbWUgQTMsIHR5cGVuYW1lIEE0Pgotc3RydWN0IFRyYW1wb2xpbmVIZWxwZXI8dm9pZChBMSwgQTIsIEEzLCBBNCk+IHsKLSAgc3RhdGljIHZvaWQgUnVuKGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIGxvb3AsCi0gICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDYWxsYmFjazx2b2lkKEExLCBBMiwgQTMsIEE0KT4mIGNiLCBBMSBhMSwgQTIgYTIsCi0gICAgICAgICAgICAgICAgICBBMyBhMywgQTQgYTQpIHsKLSAgICBsb29wLT5Qb3N0VGFzayhGUk9NX0hFUkUsIGJhc2U6OkJpbmQoY2IsIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhNCkpKTsKLSAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEExLCB0eXBlbmFtZSBBMiwgdHlwZW5hbWUgQTMsIHR5cGVuYW1lIEE0LCB0eXBlbmFtZSBBNT4KLXN0cnVjdCBUcmFtcG9saW5lSGVscGVyPHZvaWQoQTEsIEEyLCBBMywgQTQsIEE1KT4gewotICBzdGF0aWMgdm9pZCBSdW4oY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbG9vcCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkNhbGxiYWNrPHZvaWQoQTEsIEEyLCBBMywgQTQsIEE1KT4mIGNiLCBBMSBhMSwKLSAgICAgICAgICAgICAgICAgIEEyIGEyLCBBMyBhMywgQTQgYTQsIEE1IGE1KSB7Ci0gICAgbG9vcC0+UG9zdFRhc2soRlJPTV9IRVJFLCBiYXNlOjpCaW5kKGNiLCBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTUpKSk7Ci0gIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBBMSwgdHlwZW5hbWUgQTIsIHR5cGVuYW1lIEEzLCB0eXBlbmFtZSBBNCwgdHlwZW5hbWUgQTUsCi0gICAgICAgICAgdHlwZW5hbWUgQTY+Ci1zdHJ1Y3QgVHJhbXBvbGluZUhlbHBlcjx2b2lkKEExLCBBMiwgQTMsIEE0LCBBNSwgQTYpPiB7Ci0gIHN0YXRpYyB2b2lkIFJ1bihjb25zdCBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+JiBsb29wLAotICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2FsbGJhY2s8dm9pZChBMSwgQTIsIEEzLCBBNCwgQTUsIEE2KT4mIGNiLCBBMSBhMSwKLSAgICAgICAgICAgICAgICAgIEEyIGEyLCBBMyBhMywgQTQgYTQsIEE1IGE1LCBBNiBhNikgewotICAgIGxvb3AtPlBvc3RUYXNrKEZST01fSEVSRSwgYmFzZTo6QmluZChjYiwgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGExKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGEyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGEzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGE0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGE1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGE2KSkpOwotICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQTEsIHR5cGVuYW1lIEEyLCB0eXBlbmFtZSBBMywgdHlwZW5hbWUgQTQsIHR5cGVuYW1lIEE1LAotICAgICAgICAgIHR5cGVuYW1lIEE2LCB0eXBlbmFtZSBBNz4KLXN0cnVjdCBUcmFtcG9saW5lSGVscGVyPHZvaWQoQTEsIEEyLCBBMywgQTQsIEE1LCBBNiwgQTcpPiB7Ci0gIHN0YXRpYyB2b2lkIFJ1bihjb25zdCBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+JiBsb29wLAotICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2FsbGJhY2s8dm9pZChBMSwgQTIsIEEzLCBBNCwgQTUsIEE2LCBBNyk+JiBjYiwKLSAgICAgICAgICAgICAgICAgIEExIGExLCBBMiBhMiwgQTMgYTMsIEE0IGE0LCBBNSBhNSwgQTYgYTYsIEE3IGE3KSB7Ci0gICAgbG9vcC0+UG9zdFRhc2soRlJPTV9IRVJFLCBiYXNlOjpCaW5kKGNiLCBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDo6VHJhbXBvbGluZUZvcndhcmQoYTcpKSk7Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBpbnRlcm5hbAotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBiYXNlOjpDYWxsYmFjazxUPiBCaW5kVG9DdXJyZW50TG9vcChjb25zdCBiYXNlOjpDYWxsYmFjazxUPiYgY2IpIHsKLSAgcmV0dXJuIGJhc2U6OkJpbmQoJmludGVybmFsOjpUcmFtcG9saW5lSGVscGVyPFQ+OjpSdW4sCi0gICAgICAgICAgICAgICAgICAgIGJhc2U6OlRocmVhZFRhc2tSdW5uZXJIYW5kbGU6OkdldCgpLCBjYik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0JJTkRfVE9fQ1VSUkVOVF9MT09QX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcF91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2Y5ZmY2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL21lbW9yeS9mcmVlX2RlbGV0ZXIuaCIKLSNpbmNsdWRlICJiYXNlL21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuaCIKLSNpbmNsdWRlICJiYXNlL3J1bl9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vd2FpdGFibGVfZXZlbnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdm9pZCBCb3VuZEJvb2xTZXQoYm9vbCogdmFyLCBib29sIHZhbCkgeyAqdmFyID0gdmFsOyB9Ci0KLXZvaWQgQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0cihib29sKiB2YXIsIHN0ZDo6dW5pcXVlX3B0cjxib29sPiB2YWwpIHsKLSAgKnZhciA9ICp2YWw7Ci19Ci0KLXZvaWQgQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0ckZyZWVEZWxldGVyKAotICAgIGJvb2wqIHZhciwgc3RkOjp1bmlxdWVfcHRyPGJvb2wsIGJhc2U6OkZyZWVEZWxldGVyPiB2YWwpIHsKLSAgKnZhciA9ICp2YWw7Ci19Ci0KLXZvaWQgQm91bmRCb29sU2V0RnJvbVNjb3BlZEFycmF5KGJvb2wqIHZhciwgc3RkOjp1bmlxdWVfcHRyPGJvb2xbXT4gdmFsKSB7Ci0gICp2YXIgPSB2YWxbMF07Ci19Ci0KLXZvaWQgQm91bmRCb29sU2V0RnJvbUNvbnN0UmVmKGJvb2wqIHZhciwgY29uc3QgYm9vbCYgdmFsKSB7ICp2YXIgPSB2YWw7IH0KLQotdm9pZCBCb3VuZEludGVnZXJzU2V0KGludCogYV92YXIsIGludCogYl92YXIsIGludCBhX3ZhbCwgaW50IGJfdmFsKSB7Ci0gICphX3ZhciA9IGFfdmFsOwotICAqYl92YXIgPSBiX3ZhbDsKLX0KLQotLy8gVmFyaW91cyB0ZXN0cyB0aGF0IGNoZWNrIHRoYXQgdGhlIGJvdW5kIGZ1bmN0aW9uIGlzIG9ubHkgYWN0dWFsbHkgZXhlY3V0ZWQKLS8vIG9uIHRoZSBtZXNzYWdlIGxvb3AsIG5vdCBkdXJpbmcgdGhlIG9yaWdpbmFsIFJ1bi4KLWNsYXNzIEJpbmRUb0N1cnJlbnRMb29wVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgYmFzZTo6TWVzc2FnZUxvb3AgbG9vcF87Ci19OwotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBDbG9zdXJlKSB7Ci0gIC8vIFRlc3QgdGhlIGNsb3N1cmUgaXMgcnVuIGluc2lkZSB0aGUgbG9vcCwgbm90IG91dHNpZGUgaXQuCi0gIGJhc2U6OldhaXRhYmxlRXZlbnQgd2FpdGVyKGJhc2U6OldhaXRhYmxlRXZlbnQ6OlJlc2V0UG9saWN5OjpBVVRPTUFUSUMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OkluaXRpYWxTdGF0ZTo6Tk9UX1NJR05BTEVEKTsKLSAgYmFzZTo6Q2xvc3VyZSBjYiA9IEJpbmRUb0N1cnJlbnRMb29wKAotICAgICAgYmFzZTo6QmluZCgmYmFzZTo6V2FpdGFibGVFdmVudDo6U2lnbmFsLCBiYXNlOjpVbnJldGFpbmVkKCZ3YWl0ZXIpKSk7Ci0gIGNiLlJ1bigpOwotICBFWFBFQ1RfRkFMU0Uod2FpdGVyLklzU2lnbmFsZWQoKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUod2FpdGVyLklzU2lnbmFsZWQoKSk7Ci19Ci0KLVRFU1RfRihCaW5kVG9DdXJyZW50TG9vcFRlc3QsIEJvb2wpIHsKLSAgYm9vbCBib29sX3ZhciA9IGZhbHNlOwotICBiYXNlOjpDYWxsYmFjazx2b2lkKGJvb2wpPiBjYiA9Ci0gICAgICBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKCZCb3VuZEJvb2xTZXQsICZib29sX3ZhcikpOwotICBjYi5SdW4odHJ1ZSk7Ci0gIEVYUEVDVF9GQUxTRShib29sX3Zhcik7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYm9vbF92YXIpOwotfQotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBCb3VuZFNjb3BlZFB0ckJvb2wpIHsKLSAgYm9vbCBib29sX3ZhbCA9IGZhbHNlOwotICBzdGQ6OnVuaXF1ZV9wdHI8Ym9vbD4gc2NvcGVkX3B0cl9ib29sKG5ldyBib29sKHRydWUpKTsKLSAgYmFzZTo6Q2xvc3VyZSBjYiA9IEJpbmRUb0N1cnJlbnRMb29wKGJhc2U6OkJpbmQoCi0gICAgICAmQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0ciwgJmJvb2xfdmFsLCBiYXNlOjpQYXNzZWQoJnNjb3BlZF9wdHJfYm9vbCkpKTsKLSAgY2IuUnVuKCk7Ci0gIEVYUEVDVF9GQUxTRShib29sX3ZhbCk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYm9vbF92YWwpOwotfQotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBQYXNzZWRTY29wZWRQdHJCb29sKSB7Ci0gIGJvb2wgYm9vbF92YWwgPSBmYWxzZTsKLSAgc3RkOjp1bmlxdWVfcHRyPGJvb2w+IHNjb3BlZF9wdHJfYm9vbChuZXcgYm9vbCh0cnVlKSk7Ci0gIGJhc2U6OkNhbGxiYWNrPHZvaWQoc3RkOjp1bmlxdWVfcHRyPGJvb2w+KT4gY2IgPQotICAgICAgQmluZFRvQ3VycmVudExvb3AoYmFzZTo6QmluZCgmQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0ciwgJmJvb2xfdmFsKSk7Ci0gIGNiLlJ1bihzdGQ6Om1vdmUoc2NvcGVkX3B0cl9ib29sKSk7Ci0gIEVYUEVDVF9GQUxTRShib29sX3ZhbCk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYm9vbF92YWwpOwotfQotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBCb3VuZFNjb3BlZEFycmF5Qm9vbCkgewotICBib29sIGJvb2xfdmFsID0gZmFsc2U7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxib29sW10+IHNjb3BlZF9hcnJheV9ib29sKG5ldyBib29sWzFdKTsKLSAgc2NvcGVkX2FycmF5X2Jvb2xbMF0gPSB0cnVlOwotICBiYXNlOjpDbG9zdXJlIGNiID0KLSAgICAgIEJpbmRUb0N1cnJlbnRMb29wKGJhc2U6OkJpbmQoJkJvdW5kQm9vbFNldEZyb21TY29wZWRBcnJheSwgJmJvb2xfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpQYXNzZWQoJnNjb3BlZF9hcnJheV9ib29sKSkpOwotICBjYi5SdW4oKTsKLSAgRVhQRUNUX0ZBTFNFKGJvb2xfdmFsKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICBFWFBFQ1RfVFJVRShib29sX3ZhbCk7Ci19Ci0KLVRFU1RfRihCaW5kVG9DdXJyZW50TG9vcFRlc3QsIFBhc3NlZFNjb3BlZEFycmF5Qm9vbCkgewotICBib29sIGJvb2xfdmFsID0gZmFsc2U7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxib29sW10+IHNjb3BlZF9hcnJheV9ib29sKG5ldyBib29sWzFdKTsKLSAgc2NvcGVkX2FycmF5X2Jvb2xbMF0gPSB0cnVlOwotICBiYXNlOjpDYWxsYmFjazx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxib29sW10+KT4gY2IgPQotICAgICAgQmluZFRvQ3VycmVudExvb3AoYmFzZTo6QmluZCgmQm91bmRCb29sU2V0RnJvbVNjb3BlZEFycmF5LCAmYm9vbF92YWwpKTsKLSAgY2IuUnVuKHN0ZDo6bW92ZShzY29wZWRfYXJyYXlfYm9vbCkpOwotICBFWFBFQ1RfRkFMU0UoYm9vbF92YWwpOwotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIEVYUEVDVF9UUlVFKGJvb2xfdmFsKTsKLX0KLQotVEVTVF9GKEJpbmRUb0N1cnJlbnRMb29wVGVzdCwgQm91bmRTY29wZWRQdHJGcmVlRGVsZXRlckJvb2wpIHsKLSAgYm9vbCBib29sX3ZhbCA9IGZhbHNlOwotICBzdGQ6OnVuaXF1ZV9wdHI8Ym9vbCwgYmFzZTo6RnJlZURlbGV0ZXI+IHNjb3BlZF9wdHJfZnJlZV9kZWxldGVyX2Jvb2woCi0gICAgICBzdGF0aWNfY2FzdDxib29sKj4oU2JNZW1vcnlBbGxvY2F0ZShzaXplb2YoYm9vbCkpKSk7Ci0gICpzY29wZWRfcHRyX2ZyZWVfZGVsZXRlcl9ib29sID0gdHJ1ZTsKLSAgYmFzZTo6Q2xvc3VyZSBjYiA9IEJpbmRUb0N1cnJlbnRMb29wKAotICAgICAgYmFzZTo6QmluZCgmQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0ckZyZWVEZWxldGVyLCAmYm9vbF92YWwsCi0gICAgICAgICAgICAgICAgIGJhc2U6OlBhc3NlZCgmc2NvcGVkX3B0cl9mcmVlX2RlbGV0ZXJfYm9vbCkpKTsKLSAgY2IuUnVuKCk7Ci0gIEVYUEVDVF9GQUxTRShib29sX3ZhbCk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYm9vbF92YWwpOwotfQotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBQYXNzZWRTY29wZWRQdHJGcmVlRGVsZXRlckJvb2wpIHsKLSAgYm9vbCBib29sX3ZhbCA9IGZhbHNlOwotICBzdGQ6OnVuaXF1ZV9wdHI8Ym9vbCwgYmFzZTo6RnJlZURlbGV0ZXI+IHNjb3BlZF9wdHJfZnJlZV9kZWxldGVyX2Jvb2woCi0gICAgICBzdGF0aWNfY2FzdDxib29sKj4oU2JNZW1vcnlBbGxvY2F0ZShzaXplb2YoYm9vbCkpKSk7Ci0gICpzY29wZWRfcHRyX2ZyZWVfZGVsZXRlcl9ib29sID0gdHJ1ZTsKLSAgYmFzZTo6Q2FsbGJhY2s8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8Ym9vbCwgYmFzZTo6RnJlZURlbGV0ZXI+KT4gY2IgPQotICAgICAgQmluZFRvQ3VycmVudExvb3AoCi0gICAgICAgICAgYmFzZTo6QmluZCgmQm91bmRCb29sU2V0RnJvbVNjb3BlZFB0ckZyZWVEZWxldGVyLCAmYm9vbF92YWwpKTsKLSAgY2IuUnVuKHN0ZDo6bW92ZShzY29wZWRfcHRyX2ZyZWVfZGVsZXRlcl9ib29sKSk7Ci0gIEVYUEVDVF9GQUxTRShib29sX3ZhbCk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYm9vbF92YWwpOwotfQotCi1URVNUX0YoQmluZFRvQ3VycmVudExvb3BUZXN0LCBCb29sQ29uc3RSZWYpIHsKLSAgYm9vbCBib29sX3ZhciA9IGZhbHNlOwotICBib29sIHRydWVfdmFyID0gdHJ1ZTsKLSAgY29uc3QgYm9vbCYgdHJ1ZV9yZWYgPSB0cnVlX3ZhcjsKLSAgYmFzZTo6Q2xvc3VyZSBjYiA9IEJpbmRUb0N1cnJlbnRMb29wKAotICAgICAgYmFzZTo6QmluZCgmQm91bmRCb29sU2V0RnJvbUNvbnN0UmVmLCAmYm9vbF92YXIsIHRydWVfcmVmKSk7Ci0gIGNiLlJ1bigpOwotICBFWFBFQ1RfRkFMU0UoYm9vbF92YXIpOwotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIEVYUEVDVF9UUlVFKGJvb2xfdmFyKTsKLX0KLQotVEVTVF9GKEJpbmRUb0N1cnJlbnRMb29wVGVzdCwgSW50ZWdlcnMpIHsKLSAgaW50IGEgPSAwOwotICBpbnQgYiA9IDA7Ci0gIGJhc2U6OkNhbGxiYWNrPHZvaWQoaW50LCBpbnQpPiBjYiA9Ci0gICAgICBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKCZCb3VuZEludGVnZXJzU2V0LCAmYSwgJmIpKTsKLSAgY2IuUnVuKDEsIC0xKTsKLSAgRVhQRUNUX0VRKGEsIDApOwotICBFWFBFQ1RfRVEoYiwgMCk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX0VRKGEsIDEpOwotICBFWFBFQ1RfRVEoYiwgLTEpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzFlMzA4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUJpdFJlYWRlcjo6Qml0UmVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKQotICAgIDogaW5pdGlhbF9zaXplXyhzaXplKSwKLSAgICAgIGRhdGFfKGRhdGEpLAotICAgICAgYnl0ZXNfbGVmdF8oc2l6ZSksCi0gICAgICBiaXRfcmVhZGVyX2NvcmVfKHRoaXMpIHsKLSAgRENIRUNLKGRhdGEgIT0gTlVMTCk7Ci0gIERDSEVDS19HRShzaXplLCAwKTsKLX0KLQotQml0UmVhZGVyOjp+Qml0UmVhZGVyKCkge30KLQotaW50IEJpdFJlYWRlcjo6R2V0Qnl0ZXMoaW50IG1heF9uYnl0ZXMsIGNvbnN0IHVpbnQ4X3QqKiBvdXQpIHsKLSAgRENIRUNLX0dFKG1heF9uYnl0ZXMsIDApOwotICBEQ0hFQ0sob3V0KTsKLQotICBpbnQgbmJ5dGVzID0gbWF4X25ieXRlczsKLSAgaWYgKG5ieXRlcyA+IGJ5dGVzX2xlZnRfKSBuYnl0ZXMgPSBieXRlc19sZWZ0XzsKLQotICAqb3V0ID0gZGF0YV87Ci0gIGRhdGFfICs9IG5ieXRlczsKLSAgYnl0ZXNfbGVmdF8gLT0gbmJ5dGVzOwotICByZXR1cm4gbmJ5dGVzOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzOGIwNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0JJVF9SRUFERVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQklUX1JFQURFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXJfY29yZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBCaXRSZWFkZXIKLSAgICA6IE1TVkNfU1VQUFJFU1NfV0FSTklORyg0Mjc1KSBwcml2YXRlIEJpdFJlYWRlckNvcmU6OkJ5dGVTdHJlYW1Qcm92aWRlciB7Ci0gcHVibGljOgotICAvLyBJbml0aWFsaXplIHRoZSByZWFkZXIgdG8gc3RhcnQgcmVhZGluZyBhdCB8ZGF0YXwsIHxzaXplfCBiZWluZyBzaXplCi0gIC8vIG9mIHxkYXRhfCBpbiBieXRlcy4KLSAgQml0UmVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLSAgfkJpdFJlYWRlcigpIG92ZXJyaWRlOwotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBib29sIFJlYWRCaXRzKGludCBudW1fYml0cywgVCogb3V0KSB7Ci0gICAgcmV0dXJuIGJpdF9yZWFkZXJfY29yZV8uUmVhZEJpdHMobnVtX2JpdHMsIG91dCk7Ci0gIH0KLQotICBib29sIFJlYWRGbGFnKGJvb2wqIGZsYWcpIHsgcmV0dXJuIGJpdF9yZWFkZXJfY29yZV8uUmVhZEZsYWcoZmxhZyk7IH0KLQotICBib29sIFNraXBCaXRzKGludCBudW1fYml0cykgeyByZXR1cm4gYml0X3JlYWRlcl9jb3JlXy5Ta2lwQml0cyhudW1fYml0cyk7IH0KLQotICBpbnQgYml0c19hdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBpbml0aWFsX3NpemVfICogOCAtIGJpdHNfcmVhZCgpOyB9Ci0KLSAgaW50IGJpdHNfcmVhZCgpIGNvbnN0IHsgcmV0dXJuIGJpdF9yZWFkZXJfY29yZV8uYml0c19yZWFkKCk7IH0KLQotIHByaXZhdGU6Ci0gIC8vIEJpdFJlYWRlckNvcmU6OkJ5dGVTdHJlYW1Qcm92aWRlciBpbXBsZW1lbnRhdGlvbi4KLSAgaW50IEdldEJ5dGVzKGludCBtYXhfbiwgY29uc3QgdWludDhfdCoqIG91dCkgb3ZlcnJpZGU7Ci0KLSAgLy8gVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2FzIGluaXRpYWxseSBwYXNzZWQgdG8gQml0UmVhZGVyLgotICBjb25zdCBpbnQgaW5pdGlhbF9zaXplXzsKLQotICAvLyBQb2ludGVyIHRvIHRoZSBuZXh0IHVucmVhZCBieXRlIGluIHRoZSBzdHJlYW0uCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGFfOwotCi0gIC8vIEJ5dGVzIGxlZnQgaW4gdGhlIHN0cmVhbS4KLSAgaW50IGJ5dGVzX2xlZnRfOwotCi0gIEJpdFJlYWRlckNvcmUgYml0X3JlYWRlcl9jb3JlXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQml0UmVhZGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0JJVF9SRUFERVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXJfY29yZS5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXJfY29yZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNlNWJiYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyX2NvcmUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl9jb3JlLmgiCi0KLSNpbmNsdWRlICJiYXNlL3N5c19ieXRlb3JkZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSB7Ci1jb25zdCBpbnQga1JlZ1dpZHRoSW5CaXRzID0gc2l6ZW9mKHVpbnQ2NF90KSAqIDg7Ci19Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotQml0UmVhZGVyQ29yZTo6Qnl0ZVN0cmVhbVByb3ZpZGVyOjpCeXRlU3RyZWFtUHJvdmlkZXIoKSB7fQotCi1CaXRSZWFkZXJDb3JlOjpCeXRlU3RyZWFtUHJvdmlkZXI6On5CeXRlU3RyZWFtUHJvdmlkZXIoKSB7fQotCi1CaXRSZWFkZXJDb3JlOjpCaXRSZWFkZXJDb3JlKEJ5dGVTdHJlYW1Qcm92aWRlciogYnl0ZV9zdHJlYW1fcHJvdmlkZXIpCi0gICAgOiBieXRlX3N0cmVhbV9wcm92aWRlcl8oYnl0ZV9zdHJlYW1fcHJvdmlkZXIpLAotICAgICAgYml0c19yZWFkXygwKSwKLSAgICAgIG5iaXRzXygwKSwKLSAgICAgIHJlZ18oMCksCi0gICAgICBuYml0c19uZXh0XygwKSwKLSAgICAgIHJlZ19uZXh0XygwKSB7fQotCi1CaXRSZWFkZXJDb3JlOjp+Qml0UmVhZGVyQ29yZSgpIHt9Ci0KLWJvb2wgQml0UmVhZGVyQ29yZTo6UmVhZEZsYWcoYm9vbCogZmxhZykgewotICBpZiAobmJpdHNfID09IDAgJiYgIVJlZmlsbCgxKSkgcmV0dXJuIGZhbHNlOwotCi0gICpmbGFnID0gKHJlZ18gJiAoVUlOVDY0X0MoMSkgPDwgKGtSZWdXaWR0aEluQml0cyAtIDEpKSkgIT0gMDsKLSAgcmVnXyA8PD0gMTsKLSAgbmJpdHNfLS07Ci0gIGJpdHNfcmVhZF8rKzsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBCaXRSZWFkZXJDb3JlOjpQZWVrQml0c01zYkFsaWduZWQoaW50IG51bV9iaXRzLCB1aW50NjRfdCogb3V0KSB7Ci0gIC8vIFRyeSB0byBoYXZlIGF0IGxlYXN0IHxudW1fYml0c3wgaW4gdGhlIGJpdCByZWdpc3Rlci4KLSAgaWYgKG5iaXRzXyA8IG51bV9iaXRzKSBSZWZpbGwobnVtX2JpdHMpOwotCi0gICpvdXQgPSByZWdfOwotICByZXR1cm4gbmJpdHNfOwotfQotCi1ib29sIEJpdFJlYWRlckNvcmU6OlNraXBCaXRzU21hbGwoaW50IG51bV9iaXRzKSB7Ci0gIERDSEVDS19HRShudW1fYml0cywgMCk7Ci0gIHVpbnQ2NF90IGR1bW15OwotICB3aGlsZSAobnVtX2JpdHMgPj0ga1JlZ1dpZHRoSW5CaXRzKSB7Ci0gICAgaWYgKCFSZWFkQml0c0ludGVybmFsKGtSZWdXaWR0aEluQml0cywgJmR1bW15KSkgcmV0dXJuIGZhbHNlOwotICAgIG51bV9iaXRzIC09IGtSZWdXaWR0aEluQml0czsKLSAgfQotICByZXR1cm4gUmVhZEJpdHNJbnRlcm5hbChudW1fYml0cywgJmR1bW15KTsKLX0KLQotYm9vbCBCaXRSZWFkZXJDb3JlOjpTa2lwQml0cyhpbnQgbnVtX2JpdHMpIHsKLSAgRENIRUNLX0dFKG51bV9iaXRzLCAwKTsKLQotICBjb25zdCBpbnQgcmVtYWluaW5nX2JpdHMgPSBuYml0c18gKyBuYml0c19uZXh0XzsKLSAgaWYgKHJlbWFpbmluZ19iaXRzID49IG51bV9iaXRzKSByZXR1cm4gU2tpcEJpdHNTbWFsbChudW1fYml0cyk7Ci0KLSAgLy8gU2tpcCBmaXJzdCB0aGUgcmVtYWluaW5nIGF2YWlsYWJsZSBiaXRzLgotICBudW1fYml0cyAtPSByZW1haW5pbmdfYml0czsKLSAgYml0c19yZWFkXyArPSByZW1haW5pbmdfYml0czsKLSAgbmJpdHNfID0gMDsKLSAgcmVnXyA9IDA7Ci0gIG5iaXRzX25leHRfID0gMDsKLSAgcmVnX25leHRfID0gMDsKLQotICAvLyBOZXh0LCBza2lwIGFuIGludGVnZXIgbnVtYmVyIG9mIGJ5dGVzLgotICBjb25zdCBpbnQgbmJ5dGVzID0gbnVtX2JpdHMgLyA4OwotICBpZiAobmJ5dGVzID4gMCkgewotICAgIGNvbnN0IHVpbnQ4X3QqIGJ5dGVfc3RyZWFtX3dpbmRvdzsKLSAgICBjb25zdCBpbnQgd2luZG93X3NpemUgPQotICAgICAgICBieXRlX3N0cmVhbV9wcm92aWRlcl8tPkdldEJ5dGVzKG5ieXRlcywgJmJ5dGVfc3RyZWFtX3dpbmRvdyk7Ci0gICAgRENIRUNLX0dFKHdpbmRvd19zaXplLCAwKTsKLSAgICBEQ0hFQ0tfTEUod2luZG93X3NpemUsIG5ieXRlcyk7Ci0gICAgaWYgKHdpbmRvd19zaXplIDwgbmJ5dGVzKSB7Ci0gICAgICAvLyBOb3RlIHRoYXQgc29tZSBieXRlcyB3ZXJlIGNvbnN1bWVkLgotICAgICAgYml0c19yZWFkXyArPSA4ICogd2luZG93X3NpemU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG51bV9iaXRzIC09IDggKiBuYnl0ZXM7Ci0gICAgYml0c19yZWFkXyArPSA4ICogbmJ5dGVzOwotICB9Ci0KLSAgLy8gU2tpcCB0aGUgcmVtYWluaW5nIGJpdHMuCi0gIHJldHVybiBTa2lwQml0c1NtYWxsKG51bV9iaXRzKTsKLX0KLQotaW50IEJpdFJlYWRlckNvcmU6OmJpdHNfcmVhZCgpIGNvbnN0IHsgcmV0dXJuIGJpdHNfcmVhZF87IH0KLQotYm9vbCBCaXRSZWFkZXJDb3JlOjpSZWFkQml0c0ludGVybmFsKGludCBudW1fYml0cywgdWludDY0X3QqIG91dCkgewotICBEQ0hFQ0tfR0UobnVtX2JpdHMsIDApOwotCi0gIGlmIChudW1fYml0cyA9PSAwKSB7Ci0gICAgKm91dCA9IDA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAobnVtX2JpdHMgPiBuYml0c18gJiYgIVJlZmlsbChudW1fYml0cykpIHsKLSAgICAvLyBBbnkgc3Vic2VxdWVudCBSZWFkQml0cyBzaG91bGQgZmFpbDoKLSAgICAvLyBlbXB0eSB0aGUgY3VycmVudCBiaXQgcmVnaXN0ZXIgZm9yIHRoYXQgcHVycG9zZS4KLSAgICBuYml0c18gPSAwOwotICAgIHJlZ18gPSAwOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJpdHNfcmVhZF8gKz0gbnVtX2JpdHM7Ci0KLSAgaWYgKG51bV9iaXRzID09IGtSZWdXaWR0aEluQml0cykgewotICAgIC8vIFNwZWNpYWwgY2FzZSBuZWVkZWQgc2luY2UgZm9yIGV4YW1wbGUgZm9yIGEgNjQgYml0IGludGVnZXIgImEiCi0gICAgLy8gImEgPDwgNjQiIGlzIG5vdCBkZWZpbmVkIGJ5IHRoZSBDL0MrKyBzdGFuZGFyZC4KLSAgICAqb3V0ID0gcmVnXzsKLSAgICByZWdfID0gMDsKLSAgICBuYml0c18gPSAwOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgKm91dCA9IHJlZ18gPj4gKGtSZWdXaWR0aEluQml0cyAtIG51bV9iaXRzKTsKLSAgcmVnXyA8PD0gbnVtX2JpdHM7Ci0gIG5iaXRzXyAtPSBudW1fYml0czsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQml0UmVhZGVyQ29yZTo6UmVmaWxsKGludCBtaW5fbmJpdHMpIHsKLSAgRENIRUNLX0xFKG1pbl9uYml0cywga1JlZ1dpZHRoSW5CaXRzKTsKLQotICAvLyBUcmFuc2ZlciBmcm9tIHRoZSBuZXh0IHRvIHRoZSBjdXJyZW50IHJlZ2lzdGVyLgotICBSZWZpbGxDdXJyZW50UmVnaXN0ZXIoKTsKLSAgaWYgKG1pbl9uYml0cyA8PSBuYml0c18pIHJldHVybiB0cnVlOwotICBEQ0hFQ0tfRVEobmJpdHNfbmV4dF8sIDApOwotICBEQ0hFQ0tfRVEocmVnX25leHRfLCAwdSk7Ci0KLSAgLy8gTWF4IG51bWJlciBvZiBieXRlcyB0byByZWZpbGwuCi0gIGludCBtYXhfbmJ5dGVzID0gc2l6ZW9mKHJlZ19uZXh0Xyk7Ci0KLSAgLy8gUmVmaWxsLgotICBjb25zdCB1aW50OF90KiBieXRlX3N0cmVhbV93aW5kb3c7Ci0gIGludCB3aW5kb3dfc2l6ZSA9Ci0gICAgICBieXRlX3N0cmVhbV9wcm92aWRlcl8tPkdldEJ5dGVzKG1heF9uYnl0ZXMsICZieXRlX3N0cmVhbV93aW5kb3cpOwotICBEQ0hFQ0tfR0Uod2luZG93X3NpemUsIDApOwotICBEQ0hFQ0tfTEUod2luZG93X3NpemUsIG1heF9uYnl0ZXMpOwotICBpZiAod2luZG93X3NpemUgPT0gMCkgcmV0dXJuIGZhbHNlOwotCi0gIHJlZ19uZXh0XyA9IDA7Ci0gIG1lbWNweSgmcmVnX25leHRfLCBieXRlX3N0cmVhbV93aW5kb3csIHdpbmRvd19zaXplKTsKLSAgcmVnX25leHRfID0gYmFzZTo6TmV0VG9Ib3N0NjQocmVnX25leHRfKTsKLSAgbmJpdHNfbmV4dF8gPSB3aW5kb3dfc2l6ZSAqIDg7Ci0KLSAgLy8gVHJhbnNmZXIgZnJvbSB0aGUgbmV4dCB0byB0aGUgY3VycmVudCByZWdpc3Rlci4KLSAgUmVmaWxsQ3VycmVudFJlZ2lzdGVyKCk7Ci0KLSAgcmV0dXJuIChuYml0c18gPj0gbWluX25iaXRzKTsKLX0KLQotdm9pZCBCaXRSZWFkZXJDb3JlOjpSZWZpbGxDdXJyZW50UmVnaXN0ZXIoKSB7Ci0gIC8vIE5vIHJlZmlsbCBwb3NzaWJsZSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgZnVsbAotICAvLyBvciB0aGUgc291cmNlIHJlZ2lzdGVyIGlzIGVtcHR5LgotICBpZiAobmJpdHNfID09IGtSZWdXaWR0aEluQml0cyB8fCBuYml0c19uZXh0XyA9PSAwKSByZXR1cm47Ci0KLSAgcmVnXyB8PSAocmVnX25leHRfID4+IG5iaXRzXyk7Ci0KLSAgaW50IGZyZWVfbmJpdHMgPSBrUmVnV2lkdGhJbkJpdHMgLSBuYml0c187Ci0gIGlmIChmcmVlX25iaXRzID49IG5iaXRzX25leHRfKSB7Ci0gICAgbmJpdHNfICs9IG5iaXRzX25leHRfOwotICAgIHJlZ19uZXh0XyA9IDA7Ci0gICAgbmJpdHNfbmV4dF8gPSAwOwotICAgIHJldHVybjsKLSAgfQotCi0gIG5iaXRzXyArPSBmcmVlX25iaXRzOwotICByZWdfbmV4dF8gPDw9IGZyZWVfbmJpdHM7Ci0gIG5iaXRzX25leHRfIC09IGZyZWVfbmJpdHM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl9jb3JlLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyX2NvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3ZmRhMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyX2NvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfQklUX1JFQURFUl9DT1JFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0JJVF9SRUFERVJfQ09SRV9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgTUVESUFfRVhQT1JUIEJpdFJlYWRlckNvcmUgewotIHB1YmxpYzoKLSAgY2xhc3MgQnl0ZVN0cmVhbVByb3ZpZGVyIHsKLSAgIHB1YmxpYzoKLSAgICBCeXRlU3RyZWFtUHJvdmlkZXIoKTsKLSAgICB2aXJ0dWFsIH5CeXRlU3RyZWFtUHJvdmlkZXIoKTsKLQotICAgIC8vIENvbnN1bWUgYXQgbW9zdCB0aGUgZm9sbG93aW5nIHxtYXhfbnwgYnl0ZXMgb2YgdGhlIHN0cmVhbQotICAgIC8vIGFuZCByZXR1cm4gdGhlIG51bWJlciBuIG9mIGJ5dGVzIGFjdHVhbGx5IGNvbnN1bWVkLgotICAgIC8vIFNldCB8KmFycmF5fCB0byBwb2ludCB0byBhIG1lbW9yeSBidWZmZXIgY29udGFpbmluZyB0aG9zZSBuIGJ5dGVzLgotICAgIC8vIE5vdGU6IHwqYXJyYXl8IG11c3QgYmUgdmFsaWQgdW50aWwgdGhlIG5leHQgY2FsbCB0byBHZXRCeXRlcwotICAgIC8vIGJ1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgaXQgaXMgdmFsaWQgYWZ0ZXIuCi0gICAgdmlydHVhbCBpbnQgR2V0Qnl0ZXMoaW50IG1heF9uLCBjb25zdCB1aW50OF90KiogYXJyYXkpID0gMDsKLSAgfTsKLQotICAvLyBMaWZldGltZSBvZiB8Ynl0ZV9zdHJlYW1fcHJvdmlkZXJ8IG11c3QgYmUgbG9uZ2VyIHRoYW4gQml0UmVhZGVyQ29yZS4KLSAgZXhwbGljaXQgQml0UmVhZGVyQ29yZShCeXRlU3RyZWFtUHJvdmlkZXIqIGJ5dGVfc3RyZWFtX3Byb3ZpZGVyKTsKLSAgfkJpdFJlYWRlckNvcmUoKTsKLQotICAvLyBSZWFkIG9uZSBiaXQgZnJvbSB0aGUgc3RyZWFtIGFuZCByZXR1cm4gaXQgYXMgYSBib29sZWFuIGluIHwqb3V0fC4KLSAgLy8gUmVtYXJrOiB3ZSBkbyBub3QgdXNlIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIGZvciByZWFkaW5nIGEgYm9vbAotICAvLyBzaW5jZSBpdCBnZW5lcmF0ZXMgc29tZSBvcHRpbWl6YXRpb24gd2FybmluZ3MgZHVyaW5nIGNvbXBpbGF0aW9uCi0gIC8vIG9uIFdpbmRvd3MgcGxhdGZvcm1zLgotICBib29sIFJlYWRCaXRzKGludCBudW1fYml0cywgYm9vbCogb3V0KSB7Ci0gICAgRENIRUNLX0VRKG51bV9iaXRzLCAxKTsKLSAgICByZXR1cm4gUmVhZEZsYWcob3V0KTsKLSAgfQotCi0gIC8vIFJlYWQgfG51bV9iaXRzfCBuZXh0IGJpdHMgZnJvbSBzdHJlYW0gYW5kIHJldHVybiBpbiB8Km91dHwsIGZpcnN0IGJpdAotICAvLyBmcm9tIHRoZSBzdHJlYW0gc3RhcnRpbmcgYXQgfG51bV9iaXRzfCBwb3NpdGlvbiBpbiB8Km91dHwsCi0gIC8vIGJpdHMgb2YgfCpvdXR8IHdob3NlIHBvc2l0aW9uIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB8bnVtX2JpdHN8Ci0gIC8vIGFyZSBhbGwgc2V0IHRvIHplcm8uCi0gIC8vIE5vdGVzOgotICAvLyAtIHxudW1fYml0c3wgY2Fubm90IGJlIGxhcmdlciB0aGFuIHRoZSBiaXRzIHRoZSB0eXBlIGNhbiBob2xkLgotICAvLyAtIEZyb20gdGhlIGFib3ZlIGRlc2NyaXB0aW9uLCBwYXNzaW5nIGEgc2lnbmVkIHR5cGUgaW4gfFR8IGRvZXMgbm90Ci0gIC8vICAgbWVhbiB0aGUgZmlyc3QgYml0IHJlYWQgZnJvbSB0aGUgc3RyZWFtIGdpdmVzIHRoZSBzaWduIG9mIHRoZSB2YWx1ZS4KLSAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBnaXZlbiBudW1iZXIgb2YgYml0cyBjYW5ub3QgYmUgcmVhZCAobm90IGVub3VnaAotICAvLyBiaXRzIGluIHRoZSBzdHJlYW0pLCB0cnVlIG90aGVyd2lzZS4gV2hlbiByZXR1cm4gZmFsc2UsIHRoZSBzdHJlYW0gd2lsbAotICAvLyBlbnRlciBhIHN0YXRlIHdoZXJlIGZ1cnRoZXIgUmVhZEJpdHMvU2tpcEJpdHMgb3BlcmF0aW9ucyB3aWxsIGFsd2F5cwotICAvLyByZXR1cm4gZmFsc2UgdW5sZXNzIHxudW1fYml0c3wgaXMgMC4gVGhlIHR5cGUgfFR8IGhhcyB0byBiZSBhIHByaW1pdGl2ZQotICAvLyBpbnRlZ2VyIHR5cGUuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBib29sIFJlYWRCaXRzKGludCBudW1fYml0cywgVCogb3V0KSB7Ci0gICAgRENIRUNLX0xFKG51bV9iaXRzLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihUKSAqIDgpKTsKLSAgICB1aW50NjRfdCB0ZW1wOwotICAgIGJvb2wgcmV0ID0gUmVhZEJpdHNJbnRlcm5hbChudW1fYml0cywgJnRlbXApOwotICAgICpvdXQgPSBzdGF0aWNfY2FzdDxUPih0ZW1wKTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLy8gUmVhZCBvbmUgYml0IGZyb20gdGhlIHN0cmVhbSBhbmQgcmV0dXJuIGl0IGFzIGEgYm9vbGVhbiBpbiB8KmZsYWd8LgotICBib29sIFJlYWRGbGFnKGJvb2wqIGZsYWcpOwotCi0gIC8vIFJldHJpZXZlIHNvbWUgYml0cyB3aXRob3V0IGFjdHVhbGx5IGNvbnN1bWluZyB0aGVtLgotICAvLyBCaXRzIHJldHVybmVkIGluIHwqb3V0fCBhcmUgc2hpZnRlZCBzbyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgY29udGFpbnMKLSAgLy8gdGhlIG5leHQgYml0IHRoYXQgY2FuIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgotICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGFjdHVhbGx5IHdyaXR0ZW4gaW4gfG91dHwuCi0gIC8vIE5vdGU6IHxudW1fYml0c3wgaXMganVzdCBhIHN1Z2dlc3Rpb24gb2YgaG93IG1hbnkgYml0cyB0aGUgY2FsbGVyCi0gIC8vIHdpc2ggdG8gZ2V0IGluIHwqb3V0fCBhbmQgbXVzdCBiZSBsZXNzIHRoYW4gNjQ6Ci0gIC8vIC0gVGhlIG51bWJlciBvZiBiaXRzIHJldHVybmVkIGNhbiBiZSBtb3JlIHRoYW4gfG51bV9iaXRzfC4KLSAgLy8gLSBIb3dldmVyLCBpdCB3aWxsIGJlIHN0cmljdGx5IGxlc3MgdGhhbiB8bnVtX2JpdHN8Ci0gIC8vICAgaWYgYW5kIG9ubHkgaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggYml0cyBsZWZ0IGluIHRoZSBzdHJlYW0uCi0gIGludCBQZWVrQml0c01zYkFsaWduZWQoaW50IG51bV9iaXRzLCB1aW50NjRfdCogb3V0KTsKLQotICAvLyBTa2lwIHxudW1fYml0c3wgbmV4dCBiaXRzIGZyb20gc3RyZWFtLiBSZXR1cm4gZmFsc2UgaWYgdGhlIGdpdmVuIG51bWJlciBvZgotICAvLyBiaXRzIGNhbm5vdCBiZSBza2lwcGVkIChub3QgZW5vdWdoIGJpdHMgaW4gdGhlIHN0cmVhbSksIHRydWUgb3RoZXJ3aXNlLgotICAvLyBXaGVuIHJldHVybiBmYWxzZSwgdGhlIHN0cmVhbSB3aWxsIGVudGVyIGEgc3RhdGUgd2hlcmUgZnVydGhlcgotICAvLyBSZWFkQml0cy9SZWFkRmxhZy9Ta2lwQml0cyBvcGVyYXRpb25zCi0gIC8vIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSB1bmxlc3MgfG51bV9iaXRzfCBpcyAwLgotICBib29sIFNraXBCaXRzKGludCBudW1fYml0cyk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgcmVhZCBzbyBmYXIuCi0gIGludCBiaXRzX3JlYWQoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIC8vIFRoaXMgZnVuY3Rpb24gY2FuIHNraXAgYW55IG51bWJlciBvZiBiaXRzIGJ1dCBpcyBtb3JlIGVmZmljaWVudAotICAvLyBmb3Igc21hbGwgbnVtYmVycy4gUmV0dXJuIGZhbHNlIGlmIHRoZSBnaXZlbiBudW1iZXIgb2YgYml0cyBjYW5ub3QgYmUKLSAgLy8gc2tpcHBlZCAobm90IGVub3VnaCBiaXRzIGluIHRoZSBzdHJlYW0pLCB0cnVlIG90aGVyd2lzZS4KLSAgYm9vbCBTa2lwQml0c1NtYWxsKGludCBudW1fYml0cyk7Ci0KLSAgLy8gSGVscCBmdW5jdGlvbiB1c2VkIGJ5IFJlYWRCaXRzIHRvIGF2b2lkIGlubGluaW5nIHRoZSBiaXQgcmVhZGluZyBsb2dpYy4KLSAgYm9vbCBSZWFkQml0c0ludGVybmFsKGludCBudW1fYml0cywgdWludDY0X3QqIG91dCk7Ci0KLSAgLy8gUmVmaWxsIGJpdCByZWdpc3RlcnMgdG8gaGF2ZSBhdCBsZWFzdCB8bWluX25iaXRzfCBiaXRzIGF2YWlsYWJsZS4KLSAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1pbmltdW0gYml0IGNvdW50IGNvbmRpdGlvbiBpcyBtZXQgYWZ0ZXIgdGhlIHJlZmlsbC4KLSAgYm9vbCBSZWZpbGwoaW50IG1pbl9uYml0cyk7Ci0KLSAgLy8gUmVmaWxsIHRoZSBjdXJyZW50IGJpdCByZWdpc3RlciBmcm9tIHRoZSBuZXh0IGJpdCByZWdpc3Rlci4KLSAgdm9pZCBSZWZpbGxDdXJyZW50UmVnaXN0ZXIoKTsKLQotICBCeXRlU3RyZWFtUHJvdmlkZXIqIGNvbnN0IGJ5dGVfc3RyZWFtX3Byb3ZpZGVyXzsKLQotICAvLyBOdW1iZXIgb2YgYml0cyByZWFkIHNvIGZhci4KLSAgaW50IGJpdHNfcmVhZF87Ci0KLSAgLy8gTnVtYmVyIG9mIGJpdHMgaW4gfHJlZ198IHRoYXQgaGF2ZSBub3QgYmVlbiBjb25zdW1lZCB5ZXQuCi0gIC8vIE5vdGU6IGJpdHMgYXJlIGNvbnN1bWVkIGZyb20gTVNCIHRvIExTQi4KLSAgaW50IG5iaXRzXzsKLSAgdWludDY0X3QgcmVnXzsKLQotICAvLyBOdW1iZXIgb2YgYml0cyBpbiB8cmVnX25leHRffCB0aGF0IGhhdmUgbm90IGJlZW4gY29uc3VtZWQgeWV0LgotICAvLyBOb3RlOiBiaXRzIGFyZSBjb25zdW1lZCBmcm9tIE1TQiB0byBMU0IuCi0gIGludCBuYml0c19uZXh0XzsKLSAgdWludDY0X3QgcmVnX25leHRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCaXRSZWFkZXJDb3JlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0JJVF9SRUFERVJfQ09SRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl9mdXp6ZXJ0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl9mdXp6ZXJ0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTdmNGQzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXJfZnV6emVydGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImJhc2UvaGFzaC5oIgotI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X3JhbmRvbS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi0vLyBFbnRyeSBwb2ludCBmb3IgTGliRnV6emVyLgotZXh0ZXJuICJDIiBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICBtZWRpYTo6Qml0UmVhZGVyIHJlYWRlcihkYXRhLCBiYXNlOjpjaGVja2VkX2Nhc3Q8aW50PihzaXplKSk7Ci0KLSAgLy8gTmVlZCBhIHNpbXBsZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB0byBnZW5lcmF0ZSB0aGUgbnVtYmVyIG9mIGJpdHMgdG8KLSAgLy8gcmVhZC9za2lwIGluIGEgcmVwcm9kdWNpYmxlIHdheSAoZ2l2ZW4gdGhlIHNhbWUgfGRhdGF8KS4gVXNpbmcgSGFzaCgpIHRvCi0gIC8vIGVuc3VyZSB0aGUgc2VlZCB2YXJpZXMgc2lnbmlmaWNhbnRseSBvdmVyIG1pbm9yIGNoYW5nZXMgaW4gfGRhdGF8LgotICBtZWRpYTo6VGVzdFJhbmRvbSBybmQoYmFzZTo6SGFzaChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgc2l6ZSkpOwotCi0gIC8vIFJlYWQgYW5kIHNraXAgdGhyb3VnaCB0aGUgZGF0YSBpbiB8cmVhZGVyfC4KLSAgd2hpbGUgKHJlYWRlci5iaXRzX2F2YWlsYWJsZSgpID4gMCkgewotICAgIGlmIChybmQuUmFuZCgpICYgMSkgewotICAgICAgLy8gUmVhZCB1cCB0byA2NCBiaXRzLiBUaGlzIG1heSBmYWlsIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggYml0cwotICAgICAgLy8gcmVtYWluaW5nLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgKHRlc3RpbmcgZm9yIGZhaWx1cmVzIGlzIGFsc28gZ29vZCkuCi0gICAgICB1aW50NjRfdCB2YWx1ZTsKLSAgICAgIGlmICghcmVhZGVyLlJlYWRCaXRzKHJuZC5SYW5kKCkgJSA2NCArIDEsICZ2YWx1ZSkpIGJyZWFrOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBTa2lwIHVwIHRvIDEyOCBiaXRzLiBBcyBhYm92ZSwgdGhpcyBtYXkgZmFpbC4KLSAgICAgIGlmICghcmVhZGVyLlNraXBCaXRzKHJuZC5SYW5kKCkgJSAxMjggKyAxKSkgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNjYxZjQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIHZvaWQgU2V0Qml0KHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBiaXRfcG9zKSB7Ci0gIHNpemVfdCBieXRlX3BvcyA9IGJpdF9wb3MgLyA4OwotICBiaXRfcG9zIC09IGJ5dGVfcG9zICogODsKLSAgRENIRUNLX0xUKGJ5dGVfcG9zLCBzaXplKTsKLSAgYnVmW2J5dGVfcG9zXSB8PSAoMSA8PCAoNyAtIGJpdF9wb3MpKTsKLX0KLQotVEVTVChCaXRSZWFkZXJUZXN0LCBOb3JtYWxPcGVyYXRpb25UZXN0KSB7Ci0gIHVpbnQ4X3QgdmFsdWU4OwotICB1aW50NjRfdCB2YWx1ZTY0OwotICAvLyAwMTAxIDAxMDEgMTAwMSAxMDAxIHJlcGVhdHMgNCB0aW1lcwotICB1aW50OF90IGJ1ZmZlcltdID0gezB4NTUsIDB4OTksIDB4NTUsIDB4OTksIDB4NTUsIDB4OTksIDB4NTUsIDB4OTl9OwotICBCaXRSZWFkZXIgcmVhZGVyMShidWZmZXIsIDYpOyAgLy8gSW5pdGlhbGl6ZSB3aXRoIDYgYnl0ZXMgb25seQotCi0gIEVYUEVDVF9UUlVFKHJlYWRlcjEuUmVhZEJpdHMoMSwgJnZhbHVlOCkpOwotICBFWFBFQ1RfRVEodmFsdWU4LCAwKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5SZWFkQml0cyg4LCAmdmFsdWU4KSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZTgsIDB4YWIpOyAgLy8gMTAxMCAxMDExCi0gIEVYUEVDVF9UUlVFKHJlYWRlcjEuUmVhZEJpdHMoNywgJnZhbHVlNjQpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5SZWFkQml0cygzMiwgJnZhbHVlNjQpKTsKLSAgRVhQRUNUX0VRKHZhbHVlNjQsIDB4NTU5OTU1OTl1KTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlcjEuUmVhZEJpdHMoMSwgJnZhbHVlOCkpOwotICB2YWx1ZTggPSAweGZmOwotICBFWFBFQ1RfVFJVRShyZWFkZXIxLlJlYWRCaXRzKDAsICZ2YWx1ZTgpKTsKLSAgRVhQRUNUX0VRKHZhbHVlOCwgMCk7Ci0KLSAgQml0UmVhZGVyIHJlYWRlcjIoYnVmZmVyLCA4KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMi5SZWFkQml0cyg2NCwgJnZhbHVlNjQpKTsKLSAgRVhQRUNUX0VRKHZhbHVlNjQsIDB4NTU5OTU1OTk1NTk5NTU5OXVsbCk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIyLlJlYWRCaXRzKDEsICZ2YWx1ZTgpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMi5SZWFkQml0cygwLCAmdmFsdWU4KSk7Ci19Ci0KLVRFU1QoQml0UmVhZGVyVGVzdCwgUmVhZEJleW9uZEVuZFRlc3QpIHsKLSAgdWludDhfdCB2YWx1ZTg7Ci0gIHVpbnQ4X3QgYnVmZmVyW10gPSB7MHgxMn07Ci0gIEJpdFJlYWRlciByZWFkZXIxKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlcjEuUmVhZEJpdHMoNCwgJnZhbHVlOCkpOwotICBFWFBFQ1RfRkFMU0UocmVhZGVyMS5SZWFkQml0cyg1LCAmdmFsdWU4KSk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIxLlJlYWRCaXRzKDEsICZ2YWx1ZTgpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5SZWFkQml0cygwLCAmdmFsdWU4KSk7Ci19Ci0KLVRFU1QoQml0UmVhZGVyVGVzdCwgU2tpcEJpdHNUZXN0KSB7Ci0gIHVpbnQ4X3QgdmFsdWU4OwotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MGEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTV9OwotICBCaXRSZWFkZXIgcmVhZGVyMShidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIxLlNraXBCaXRzKDIpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5SZWFkQml0cygzLCAmdmFsdWU4KSk7Ci0gIEVYUEVDVF9FUSh2YWx1ZTgsIDEpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIxLlNraXBCaXRzKDExKSk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlcjEuUmVhZEJpdHMoOCwgJnZhbHVlOCkpOwotICBFWFBFQ1RfRVEodmFsdWU4LCAzKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5Ta2lwQml0cyg3NikpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIxLlJlYWRCaXRzKDQsICZ2YWx1ZTgpKTsKLSAgRVhQRUNUX0VRKHZhbHVlOCwgMTMpOwotICBFWFBFQ1RfRkFMU0UocmVhZGVyMS5Ta2lwQml0cygxMDApKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5Ta2lwQml0cygwKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIxLlNraXBCaXRzKDEpKTsKLX0KLQotVEVTVChCaXRSZWFkZXJUZXN0LCBWYXJpYWJsZVNraXBCaXRzVGVzdCkgewotICB1aW50OF90IGJ1ZmZlclsyNTZdID0gezB9OwotCi0gIC8vIFRoZSB0ZXN0IGFsdGVybmF0ZXMgYmV0d2VlbiBSZWFkQml0cyBhbmQgU2tpcEJpdHMuCi0gIC8vIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIG51bWJlciBvZiBiaXRzIHRvIHJlYWQsIHRoZSBzZWNvbmQgb25lIGlzIHRoZQotICAvLyBudW1iZXIgb2YgYml0cyB0byBza2lwLiBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gcmVhZCB3YXMgYXJiaXRyYXJpbHkgY2hvc2VuCi0gIC8vIHdoaWxlIHRoZSBudW1iZXIgb2YgYml0cyB0byBza2lwIHdhcyBjaG9zZW4gc28gYXMgdG8gY292ZXIgZnJvbSBzbWFsbCBza2lwcwotICAvLyB0byBsYXJnZSBza2lwcy4KLSAgY29uc3Qgc2l6ZV90IHBhdHRlcm5fcmVhZF9za2lwW11bMl0gPSB7Ci0gICAgICB7NSwgMTd9LCAgezQsIDM0fSwgIHswLCA0NH0sICB7MywgNH0sICAvLyBOb3RlOiBhbGlnbmVkIHJlYWQuCi0gICAgICB7NywgN30sICAvLyBOb3RlOiBib3RoIHJlYWQmc2tpcCBjcm9zcyBieXRlIGJvdW5kYXJ5LgotICAgICAgezE3LCA2OH0sIHs3LCAxMDJ9LCB7OSwgMjA0fSwgezMsIDQwOH19OwotCi0gIC8vIFNldCBiaXRzIHRvIG9uZSBvbmx5IGZvciB0aGUgZmlyc3QgYW5kIGxhc3QgYml0IG9mIGVhY2ggcmVhZAotICAvLyBpbiB0aGUgcGF0dGVybi4KLSAgc2l6ZV90IHBvcyA9IDA7Ci0gIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgYXJyYXlzaXplKHBhdHRlcm5fcmVhZF9za2lwKTsgKytrKSB7Ci0gICAgY29uc3Qgc2l6ZV90IHJlYWRfYml0X2NvdW50ID0gcGF0dGVybl9yZWFkX3NraXBba11bMF07Ci0gICAgaWYgKHJlYWRfYml0X2NvdW50ID4gMCkgewotICAgICAgU2V0Qml0KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHBvcyk7Ci0gICAgICBTZXRCaXQoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgcG9zICsgcmVhZF9iaXRfY291bnQgLSAxKTsKLSAgICAgIHBvcyArPSByZWFkX2JpdF9jb3VudDsKLSAgICB9Ci0gICAgcG9zICs9IHBhdHRlcm5fcmVhZF9za2lwW2tdWzFdOwotICB9Ci0KLSAgLy8gUnVuIHRoZSB0ZXN0LgotICBCaXRSZWFkZXIgYml0X3JlYWRlcihidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgRVhQRUNUX0VRKGJpdF9yZWFkZXIuYml0c19hdmFpbGFibGUoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoYnVmZmVyKSAqIDgpKTsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBhcnJheXNpemUocGF0dGVybl9yZWFkX3NraXApOyArK2spIHsKLSAgICBjb25zdCBzaXplX3QgcmVhZF9iaXRfY291bnQgPSBwYXR0ZXJuX3JlYWRfc2tpcFtrXVswXTsKLSAgICBpZiAocmVhZF9iaXRfY291bnQgPiAwKSB7Ci0gICAgICBpbnQgdmFsdWU7Ci0gICAgICBFWFBFQ1RfVFJVRShiaXRfcmVhZGVyLlJlYWRCaXRzKHJlYWRfYml0X2NvdW50LCAmdmFsdWUpKTsKLSAgICAgIEVYUEVDVF9FUSh2YWx1ZSwgMSB8ICgxIDw8IChyZWFkX2JpdF9jb3VudCAtIDEpKSk7Ci0gICAgfQotICAgIEVYUEVDVF9UUlVFKGJpdF9yZWFkZXIuU2tpcEJpdHMocGF0dGVybl9yZWFkX3NraXBba11bMV0pKTsKLSAgfQotfQotCi1URVNUKEJpdFJlYWRlclRlc3QsIEJpdHNSZWFkVGVzdCkgewotICBpbnQgdmFsdWU7Ci0gIGJvb2wgZmxhZzsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDBhLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1fTsKLSAgQml0UmVhZGVyIHJlYWRlcjEoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gIEVYUEVDVF9FUShyZWFkZXIxLmJpdHNfYXZhaWxhYmxlKCksIDEyMCk7Ci0KLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5Ta2lwQml0cygyKSk7Ci0gIEVYUEVDVF9FUShyZWFkZXIxLmJpdHNfcmVhZCgpLCAyKTsKLSAgRVhQRUNUX0VRKHJlYWRlcjEuYml0c19hdmFpbGFibGUoKSwgMTE4KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5SZWFkQml0cygzLCAmdmFsdWUpKTsKLSAgRVhQRUNUX0VRKHJlYWRlcjEuYml0c19yZWFkKCksIDUpOwotICBFWFBFQ1RfRVEocmVhZGVyMS5iaXRzX2F2YWlsYWJsZSgpLCAxMTUpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIxLlJlYWRGbGFnKCZmbGFnKSk7Ci0gIEVYUEVDVF9FUShyZWFkZXIxLmJpdHNfcmVhZCgpLCA2KTsKLSAgRVhQRUNUX0VRKHJlYWRlcjEuYml0c19hdmFpbGFibGUoKSwgMTE0KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyMS5Ta2lwQml0cyg3NikpOwotICBFWFBFQ1RfRVEocmVhZGVyMS5iaXRzX3JlYWQoKSwgODIpOwotICBFWFBFQ1RfRVEocmVhZGVyMS5iaXRzX2F2YWlsYWJsZSgpLCAzOCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYml0c3RyZWFtX2J1ZmZlci5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpdHN0cmVhbV9idWZmZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3ZTMyY2UuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYml0c3RyZWFtX2J1ZmZlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpdHN0cmVhbV9idWZmZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1CaXRzdHJlYW1CdWZmZXI6OkJpdHN0cmVhbUJ1ZmZlcigpCi0gICAgOiBCaXRzdHJlYW1CdWZmZXIoLTEsIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSgpLCAwKSB7fQotCi1CaXRzdHJlYW1CdWZmZXI6OkJpdHN0cmVhbUJ1ZmZlcihpbnQzMl90IGlkLCBiYXNlOjpTaGFyZWRNZW1vcnlIYW5kbGUgaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIG9mZl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBwcmVzZW50YXRpb25fdGltZXN0YW1wKQotICAgIDogaWRfKGlkKSwKLSAgICAgIGhhbmRsZV8oaGFuZGxlKSwKLSAgICAgIHNpemVfKHNpemUpLAotICAgICAgb2Zmc2V0XyhvZmZzZXQpLAotICAgICAgcHJlc2VudGF0aW9uX3RpbWVzdGFtcF8ocHJlc2VudGF0aW9uX3RpbWVzdGFtcCkge30KLQotQml0c3RyZWFtQnVmZmVyOjpCaXRzdHJlYW1CdWZmZXIoY29uc3QgQml0c3RyZWFtQnVmZmVyJiBvdGhlcikgPSBkZWZhdWx0OwotCi1CaXRzdHJlYW1CdWZmZXI6On5CaXRzdHJlYW1CdWZmZXIoKSB7fQotCi12b2lkIEJpdHN0cmVhbUJ1ZmZlcjo6U2V0RGVjcnlwdENvbmZpZyhjb25zdCBEZWNyeXB0Q29uZmlnJiBkZWNyeXB0X2NvbmZpZykgewotICBrZXlfaWRfID0gZGVjcnlwdF9jb25maWcua2V5X2lkKCk7Ci0gIGl2XyA9IGRlY3J5cHRfY29uZmlnLml2KCk7Ci0gIHN1YnNhbXBsZXNfID0gZGVjcnlwdF9jb25maWcuc3Vic2FtcGxlcygpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2JpdHN0cmVhbV9idWZmZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2JpdHN0cmVhbV9idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRjY2JkNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9iaXRzdHJlYW1fYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9CSVRTVFJFQU1fQlVGRkVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0JJVFNUUkVBTV9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvc2hhcmVkX21lbW9yeS5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBJUEMgewotdGVtcGxhdGUgPGNsYXNzIFA+Ci1zdHJ1Y3QgUGFyYW1UcmFpdHM7Ci19Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQ2xhc3MgZm9yIHBhc3NpbmcgYml0c3RyZWFtIGJ1ZmZlcnMgYXJvdW5kLiAgRG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YgdGhlCi0vLyBkYXRhLiAgVGhpcyBpcyB0aGUgbWVkaWEtbmFtZXNwYWNlIGVxdWl2YWxlbnQgb2YgUFBfVmlkZW9CaXRzdHJlYW1CdWZmZXJfRGV2LgotY2xhc3MgTUVESUFfRVhQT1JUIEJpdHN0cmVhbUJ1ZmZlciB7Ci0gcHVibGljOgotICBCaXRzdHJlYW1CdWZmZXIoKTsKLQotICAvLyBDb25zdHJ1Y3RzIGEgbmV3IEJpdHN0cmVhbUJ1ZmZlci4gVGhlIGNvbnRlbnQgb2YgdGhlIGJpdHN0cmVhbSBpcyBsb2NhdGVkCi0gIC8vIGF0IHxvZmZzZXR8IGJ5dGVzIGF3YXkgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHRoZSBwYXlsb2FkCi0gIC8vIGlzIHxzaXplfCBieXRlcy4gV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB8b2Zmc2V0fCBpcyAwLgotICAvLyB8cHJlc2VudGF0aW9uX3RpbWVzdGFtcHwgaXMgd2hlbiB0aGUgZGVjb2RlZCBmcmFtZSBzaG91bGQgYmUgZGlzcGxheWVkLgotICAvLyBXaGVuIG5vdCBwcm92aWRlZCwgfHByZXNlbnRhdGlvbl90aW1lc3RhbXB8IHdpbGwgYmUKLSAgLy8gfG1lZGlhOjprTm9UaW1lc3RhbXB8LgotICBCaXRzdHJlYW1CdWZmZXIoaW50MzJfdCBpZCwgYmFzZTo6U2hhcmVkTWVtb3J5SGFuZGxlIGhhbmRsZSwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQgPSAwLAotICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgPSBrTm9UaW1lc3RhbXApOwotCi0gIEJpdHN0cmVhbUJ1ZmZlcihjb25zdCBCaXRzdHJlYW1CdWZmZXImIG90aGVyKTsKLQotICB+Qml0c3RyZWFtQnVmZmVyKCk7Ci0KLSAgdm9pZCBTZXREZWNyeXB0Q29uZmlnKGNvbnN0IERlY3J5cHRDb25maWcmIGRlY3J5cHRfY29uZmlnKTsKLQotICBpbnQzMl90IGlkKCkgY29uc3QgeyByZXR1cm4gaWRfOyB9Ci0gIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBoYW5kbGVfOyB9Ci0KLSAgLy8gVGhlIG51bWJlciBvZiBieXRlcyBvZiB0aGUgYWN0dWFsIGJpdHN0cmVhbSBkYXRhLiBJdCBpcyB0aGUgc2l6ZSBvZiB0aGUKLSAgLy8gY29udGVudCBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBzaGFyZWQgbWVtb3J5LgotICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9Ci0KLSAgLy8gVGhlIG9mZnNldCB0byB0aGUgc3RhcnQgb2YgYWN0dWFsIGJpdHN0cmVhbSBkYXRhIGluIHRoZSBzaGFyZWQgbWVtb3J5LgotICBvZmZfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXRfOyB9Ci0KLSAgLy8gVGhlIHRpbWVzdGFtcCBpcyBvbmx5IHZhbGlkIGlmIGl0J3Mgbm90IGVxdWFsIHRvIHxtZWRpYTo6a05vVGltZXN0YW1wfC4KLSAgYmFzZTo6VGltZURlbHRhIHByZXNlbnRhdGlvbl90aW1lc3RhbXAoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHByZXNlbnRhdGlvbl90aW1lc3RhbXBfOwotICB9Ci0KLSAgdm9pZCBzZXRfaGFuZGxlKGNvbnN0IGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSYgaGFuZGxlKSB7IGhhbmRsZV8gPSBoYW5kbGU7IH0KLQotICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY29tZSBmcm9tIERlY3J5cHRDb25maWcuCi0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9pZCgpIGNvbnN0IHsgcmV0dXJuIGtleV9pZF87IH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGl2KCkgY29uc3QgeyByZXR1cm4gaXZfOyB9Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIHN1YnNhbXBsZXNfOyB9Ci0KLSBwcml2YXRlOgotICBpbnQzMl90IGlkXzsKLSAgYmFzZTo6U2hhcmVkTWVtb3J5SGFuZGxlIGhhbmRsZV87Ci0gIHNpemVfdCBzaXplXzsKLSAgb2ZmX3Qgb2Zmc2V0XzsKLQotICAvLyBUaGlzIGlzIG9ubHkgc2V0IHdoZW4gbmVjZXNzYXJ5LiBGb3IgZXhhbXBsZSwgQW5kcm9pZFZpZGVvRGVjb2RlQWNjZWxlcmF0b3IKLSAgLy8gbmVlZHMgdGhlIHRpbWVzdGFtcCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGRlY29kZXIgbWF5IHJlcXVpcmUgaXQgdG8KLSAgLy8gZGV0ZXJtaW5lIHRoZSBvdXRwdXQgb3JkZXIuCi0gIGJhc2U6OlRpbWVEZWx0YSBwcmVzZW50YXRpb25fdGltZXN0YW1wXzsKLQotICAvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBjb21lIGZyb20gRGVjcnlwdENvbmZpZy4KLSAgLy8gVE9ETyh0aW1hdik6IFRyeSB0byBESVNBTExPV19DT1BZX0FORF9BU1NJR04gYW5kIGluY2x1ZGUgdGhlc2UgcGFyYW1zIGFzCi0gIC8vIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBvciBleHBsYWluIHdoeSBjb3B5ICYgYXNzaWduIGlzIG5lZWRlZC4KLQotICBzdGQ6OnN0cmluZyBrZXlfaWRfOyAgICAgICAgICAgICAgICAgICAgICAvLyBrZXkgSUQuCi0gIHN0ZDo6c3RyaW5nIGl2XzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemF0aW9uIHZlY3RvcgotICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlc187ICAvLyBjbGVhci9jeXBoZXIgc2l6ZXMKLQotICBmcmllbmQgc3RydWN0IElQQzo6UGFyYW1UcmFpdHM8bWVkaWE6OkJpdHN0cmVhbUJ1ZmZlcj47Ci0KLSAgLy8gQWxsb3cgY29tcGlsZXItZ2VuZXJhdGVkIGNvcHkgJiBhc3NpZ24gY29uc3RydWN0b3JzLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfQklUU1RSRUFNX0JVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYnVmZmVyaW5nX3N0YXRlLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9idWZmZXJpbmdfc3RhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMyYjY2MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9idWZmZXJpbmdfc3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9CVUZGRVJJTkdfU1RBVEVfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQlVGRkVSSU5HX1NUQVRFX0hfCi0KLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2ZvcndhcmQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1lbnVtIEJ1ZmZlcmluZ1N0YXRlIHsKLSAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gZGF0YSBidWZmZXJlZC4KLSAgLy8KLSAgLy8gVHlwaWNhbCByZWFzb24gaXMgZGF0YSB1bmRlcmZsb3cgYW5kIGhlbmNlIHBsYXliYWNrIHNob3VsZCBiZSBwYXVzZWQuCi0gIEJVRkZFUklOR19IQVZFX05PVEhJTkcsCi0KLSAgLy8gSW5kaWNhdGVzIHRoYXQgZW5vdWdoIGRhdGEgaGFzIGJlZW4gYnVmZmVyZWQuCi0gIC8vCi0gIC8vIFR5cGljYWwgcmVhc29uIGlzIGVub3VnaCBkYXRhIGhhcyBiZWVuIHByZXJvbGxlZCB0byBzdGFydCBwbGF5YmFjay4KLSAgQlVGRkVSSU5HX0hBVkVfRU5PVUdILAotfTsKLQotLy8gVXNlZCB0byBpbmRpY2F0ZSBjaGFuZ2VzIGluIGJ1ZmZlcmluZyBzdGF0ZTsKLXR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChCdWZmZXJpbmdTdGF0ZSk+IEJ1ZmZlcmluZ1N0YXRlQ0I7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0JVRkZFUklOR19TVEFURV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2J5dGVfcXVldWUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YWQ4NWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9ieXRlX3F1ZXVlLmgiCi0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gRGVmYXVsdCBzdGFydGluZyBzaXplIGZvciB0aGUgcXVldWUuCi1lbnVtIHsga0RlZmF1bHRRdWV1ZVNpemUgPSAxMDI0IH07Ci0KLUJ5dGVRdWV1ZTo6Qnl0ZVF1ZXVlKCkKLSAgICA6IGJ1ZmZlcl8obmV3IHVpbnQ4X3Rba0RlZmF1bHRRdWV1ZVNpemVdKSwKLSAgICAgIHNpemVfKGtEZWZhdWx0UXVldWVTaXplKSwKLSAgICAgIG9mZnNldF8oMCksCi0gICAgICB1c2VkXygwKSB7fQotCi1CeXRlUXVldWU6On5CeXRlUXVldWUoKSB7fQotCi12b2lkIEJ5dGVRdWV1ZTo6UmVzZXQoKSB7Ci0gIG9mZnNldF8gPSAwOwotICB1c2VkXyA9IDA7Ci19Ci0KLXZvaWQgQnl0ZVF1ZXVlOjpQdXNoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIERDSEVDSyhkYXRhKTsKLSAgRENIRUNLX0dUKHNpemUsIDApOwotCi0gIHNpemVfdCBzaXplX25lZWRlZCA9IHVzZWRfICsgc2l6ZTsKLQotICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCBhIGJpZ2dlciBidWZmZXIuCi0gIGlmIChzaXplX25lZWRlZCA+IHNpemVfKSB7Ci0gICAgc2l6ZV90IG5ld19zaXplID0gMiAqIHNpemVfOwotICAgIHdoaWxlIChzaXplX25lZWRlZCA+IG5ld19zaXplICYmIG5ld19zaXplID4gc2l6ZV8pIG5ld19zaXplICo9IDI7Ci0KLSAgICAvLyBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIGRpZG4ndCBvdmVyZmxvdy4KLSAgICBDSEVDS19HVChuZXdfc2l6ZSwgc2l6ZV8pOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gbmV3X2J1ZmZlcihuZXcgdWludDhfdFtuZXdfc2l6ZV0pOwotCi0gICAgLy8gQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBvbGQgYnVmZmVyIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV3IG9uZS4KLSAgICBpZiAodXNlZF8gPiAwKSBtZW1jcHkobmV3X2J1ZmZlci5nZXQoKSwgZnJvbnQoKSwgdXNlZF8pOwotCi0gICAgYnVmZmVyXyA9IHN0ZDo6bW92ZShuZXdfYnVmZmVyKTsKLSAgICBzaXplXyA9IG5ld19zaXplOwotICAgIG9mZnNldF8gPSAwOwotICB9IGVsc2UgaWYgKChvZmZzZXRfICsgdXNlZF8gKyBzaXplKSA+IHNpemVfKSB7Ci0gICAgLy8gVGhlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLCBidXQgd2UgbmVlZCB0byBtb3ZlIHRoZSBkYXRhIGluIHRoZSBxdWV1ZS4KLSAgICBtZW1tb3ZlKGJ1ZmZlcl8uZ2V0KCksIGZyb250KCksIHVzZWRfKTsKLSAgICBvZmZzZXRfID0gMDsKLSAgfQotCi0gIG1lbWNweShmcm9udCgpICsgdXNlZF8sIGRhdGEsIHNpemUpOwotICB1c2VkXyArPSBzaXplOwotfQotCi12b2lkIEJ5dGVRdWV1ZTo6UGVlayhjb25zdCB1aW50OF90KiogZGF0YSwgaW50KiBzaXplKSBjb25zdCB7Ci0gIERDSEVDSyhkYXRhKTsKLSAgRENIRUNLKHNpemUpOwotICAqZGF0YSA9IGZyb250KCk7Ci0gICpzaXplID0gdXNlZF87Ci19Ci0KLXZvaWQgQnl0ZVF1ZXVlOjpQb3AoaW50IGNvdW50KSB7Ci0gIERDSEVDS19MRShjb3VudCwgdXNlZF8pOwotCi0gIG9mZnNldF8gKz0gY291bnQ7Ci0gIHVzZWRfIC09IGNvdW50OwotCi0gIC8vIE1vdmUgdGhlIG9mZnNldCBiYWNrIHRvIDAgaWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgaWYgKG9mZnNldF8gPT0gc2l6ZV8pIHsKLSAgICBEQ0hFQ0tfRVEodXNlZF8sIDApOwotICAgIG9mZnNldF8gPSAwOwotICB9Ci19Ci0KLXVpbnQ4X3QqIEJ5dGVRdWV1ZTo6ZnJvbnQoKSBjb25zdCB7IHJldHVybiBidWZmZXJfLmdldCgpICsgb2Zmc2V0XzsgfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2J5dGVfcXVldWUuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2J5dGVfcXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NiNjk5My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9ieXRlX3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0JZVEVfUVVFVUVfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQllURV9RVUVVRV9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gUmVwcmVzZW50cyBhIHF1ZXVlIG9mIGJ5dGVzLgotLy8gRGF0YSBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZSB2aWEgYW4gUHVzaCgpIGNhbGwgYW5kIHJlbW92ZWQgdmlhCi0vLyBQb3AoKS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBxdWV1ZSBjYW4gYmUgb2JzZXJ2ZWQgdmlhIHRoZSBQZWVrKCkgbWV0aG9kLgotLy8gVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2Ugb2YgdGhlIHF1ZXVlIGFuZCB0cmllcyB0byBtaW5pbWl6ZQotLy8gdGhlIG51bWJlciBvZiBidWZmZXIgY29waWVzIHdoZW4gZGF0YSBpcyBhcHBlbmRlZCBhbmQgcmVtb3ZlZC4KLWNsYXNzIE1FRElBX0VYUE9SVCBCeXRlUXVldWUgewotIHB1YmxpYzoKLSAgQnl0ZVF1ZXVlKCk7Ci0gIH5CeXRlUXVldWUoKTsKLQotICAvLyBSZXNldCB0aGUgcXVldWUgdG8gdGhlIGVtcHR5IHN0YXRlLgotICB2b2lkIFJlc2V0KCk7Ci0KLSAgLy8gQXBwZW5kcyBuZXcgYnl0ZXMgb250byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4KLSAgdm9pZCBQdXNoKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLQotICAvLyBHZXQgYSBwb2ludGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUgYW5kIHRoZSBxdWV1ZSBzaXplLgotICAvLyBUaGVzZSB2YWx1ZXMgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlIG5leHQgUHVzaCgpIG9yCi0gIC8vIFBvcCgpIGNhbGwuCi0gIHZvaWQgUGVlayhjb25zdCB1aW50OF90KiogZGF0YSwgaW50KiBzaXplKSBjb25zdDsKLQotICAvLyBSZW1vdmUgfGNvdW50fCBieXRlcyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgcXVldWUuCi0gIHZvaWQgUG9wKGludCBjb3VudCk7Ci0KLSBwcml2YXRlOgotICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLgotICB1aW50OF90KiBmcm9udCgpIGNvbnN0OwotCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGJ1ZmZlcl87Ci0KLSAgLy8gU2l6ZSBvZiB8YnVmZmVyX3wuCi0gIHNpemVfdCBzaXplXzsKLQotICAvLyBPZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgfGJ1ZmZlcl98IHRoYXQgbWFya3MgdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4KLSAgc2l6ZV90IG9mZnNldF87Ci0KLSAgLy8gTnVtYmVyIG9mIGJ5dGVzIHN0b3JlZCBpbiB0aGUgcXVldWUuCi0gIGludCB1c2VkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQnl0ZVF1ZXVlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0JZVEVfUVVFVUVfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2NhbGxiYWNrX2hvbGRlci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvY2FsbGJhY2tfaG9sZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDU4NTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvY2FsbGJhY2tfaG9sZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfQ0FMTEJBQ0tfSE9MREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0NBTExCQUNLX0hPTERFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2tfaGVscGVycy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQSBoZWxwZXIgY2xhc3MgdGhhdCBjYW4gaG9sZCBhIGNhbGxiYWNrIGZyb20gYmVpbmcgZmlyZWQuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ0I+Ci1jbGFzcyBDYWxsYmFja0hvbGRlciB7Ci0gcHVibGljOgotICBDYWxsYmFja0hvbGRlcigpIDogaG9sZF8oZmFsc2UpIHt9Ci0KLSAgfkNhbGxiYWNrSG9sZGVyKCkgewotICAgIC8vIE1ha2Ugc3VyZSBhbGwgY2FsbGJhY2tzIGFyZSBzYXRpc2ZpZWQhCi0gICAgRENIRUNLKCFob2xkXyk7Ci0gICAgRENIRUNLKG9yaWdpbmFsX2NiXy5pc19udWxsKCkpOwotICAgIERDSEVDSyhoZWxkX2NiXy5pc19udWxsKCkpOwotICB9Ci0KLSAgLy8gU2V0cyB0aGUgY2FsbGJhY2sgdG8gYmUgcG90ZW50aWFsbHkgaGVsZC4KLSAgdm9pZCBTZXRDYWxsYmFjayhjb25zdCBDQiYgY2IpIHsKLSAgICBEQ0hFQ0sob3JpZ2luYWxfY2JfLmlzX251bGwoKSk7Ci0gICAgRENIRUNLKGhlbGRfY2JfLmlzX251bGwoKSk7Ci0gICAgb3JpZ2luYWxfY2JfID0gY2I7Ci0gIH0KLQotICBib29sIElzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbmFsX2NiXy5pc19udWxsKCkgJiYgaGVsZF9jYl8uaXNfbnVsbCgpOyB9Ci0KLSAgLy8gSG9sZHMgdGhlIGNhbGxiYWNrIHdoZW4gUnVuKCkgaXMgY2FsbGVkLgotICB2b2lkIEhvbGRDYWxsYmFjaygpIHsgaG9sZF8gPSB0cnVlOyB9Ci0KLSAgLy8gUnVucyBvciBob2xkcyB0aGUgY2FsbGJhY2sgYXMgc3BlY2lmaWVkIGJ5IHxob2xkX3wuCi0gIC8vIFRoaXMgbWV0aG9kIGhhcyBvdmVybG9hZGVkIHZlcnNpb25zIHRvIHN1cHBvcnQgZGlmZmVyZW50IHR5cGVzIG9mIENCLgotICB2b2lkIFJ1bk9ySG9sZCgpIHsKLSAgICBEQ0hFQ0soaGVsZF9jYl8uaXNfbnVsbCgpKTsKLSAgICBpZiAoaG9sZF8pCi0gICAgICBoZWxkX2NiXyA9IGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcmlnaW5hbF9jYl8pOwotICAgIGVsc2UKLSAgICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcmlnaW5hbF9jYl8pLlJ1bigpOwotICB9Ci0KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIEExPgotICB2b2lkIFJ1bk9ySG9sZChBMSBhMSkgewotICAgIERDSEVDSyhoZWxkX2NiXy5pc19udWxsKCkpOwotICAgIGlmIChob2xkXykgewotICAgICAgaGVsZF9jYl8gPSBiYXNlOjpCaW5kKGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcmlnaW5hbF9jYl8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBiYXNlOjpSZXNldEFuZFJldHVybigmb3JpZ2luYWxfY2JfKS5SdW4oYTEpOwotICAgIH0KLSAgfQotCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBBMSwgdHlwZW5hbWUgQTI+Ci0gIHZvaWQgUnVuT3JIb2xkKEExIGExLCBBMiBhMikgewotICAgIERDSEVDSyhoZWxkX2NiXy5pc19udWxsKCkpOwotICAgIGlmIChob2xkXykgewotICAgICAgaGVsZF9jYl8gPSBiYXNlOjpCaW5kKGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcmlnaW5hbF9jYl8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpUcmFtcG9saW5lRm9yd2FyZChhMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6OlRyYW1wb2xpbmVGb3J3YXJkKGEyKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcmlnaW5hbF9jYl8pLlJ1bihhMSwgYTIpOwotICAgIH0KLSAgfQotCi0gIC8vIFJlbGVhc2VzIGFuZCBydW5zIHRoZSBoZWxkIGNhbGxiYWNrLgotICB2b2lkIFJ1bkhlbGRDYWxsYmFjaygpIHsKLSAgICBEQ0hFQ0soaG9sZF8pOwotICAgIERDSEVDSyghaGVsZF9jYl8uaXNfbnVsbCgpKTsKLSAgICBob2xkXyA9IGZhbHNlOwotICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZoZWxkX2NiXykuUnVuKCk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGJvb2wgaG9sZF87Ci0gIENCIG9yaWdpbmFsX2NiXzsKLSAgYmFzZTo6Q2xvc3VyZSBoZWxkX2NiXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0NBTExCQUNLX0hPTERFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY2FsbGJhY2tfaG9sZGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvY2FsbGJhY2tfaG9sZGVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDc1YThjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2NhbGxiYWNrX2hvbGRlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jYWxsYmFja19ob2xkZXIuaCIKLQotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyB2b2lkIFNldEJvb2woYm9vbCogdmFyKSB7Ci0gIERDSEVDSyghKnZhcik7Ci0gICp2YXIgPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBDb3B5VmFyKGludCB2YXIxLCBpbnQqIHZhcjIpIHsKLSAgRENIRUNLX05FKHZhcjEsICp2YXIyKTsKLSAgKnZhcjIgPSB2YXIxOwotfQotCi1URVNUKENhbGxiYWNrSG9sZGVyVGVzdCwgU2V0QWZ0ZXJIb2xkX0Nsb3N1cmUpIHsKLSAgQ2FsbGJhY2tIb2xkZXI8YmFzZTo6Q2xvc3VyZT4gY2I7Ci0gIEVYUEVDVF9UUlVFKGNiLklzTnVsbCgpKTsKLQotICBjYi5Ib2xkQ2FsbGJhY2soKTsKLQotICBib29sIGNsb3N1cmVfY2FsbGVkID0gZmFsc2U7Ci0gIGNiLlNldENhbGxiYWNrKGJhc2U6OkJpbmQoJlNldEJvb2wsICZjbG9zdXJlX2NhbGxlZCkpOwotICBFWFBFQ1RfRkFMU0UoY2IuSXNOdWxsKCkpOwotCi0gIGNiLlJ1bk9ySG9sZCgpOwotICBFWFBFQ1RfRkFMU0UoY2xvc3VyZV9jYWxsZWQpOwotCi0gIEVYUEVDVF9GQUxTRShjYi5Jc051bGwoKSk7Ci0gIGNiLlJ1bkhlbGRDYWxsYmFjaygpOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0gIEVYUEVDVF9UUlVFKGNsb3N1cmVfY2FsbGVkKTsKLX0KLQotVEVTVChDYWxsYmFja0hvbGRlclRlc3QsIEhvbGRBZnRlclNldF9DbG9zdXJlKSB7Ci0gIENhbGxiYWNrSG9sZGVyPGJhc2U6OkNsb3N1cmU+IGNiOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0KLSAgYm9vbCBjbG9zdXJlX2NhbGxlZCA9IGZhbHNlOwotICBjYi5TZXRDYWxsYmFjayhiYXNlOjpCaW5kKCZTZXRCb29sLCAmY2xvc3VyZV9jYWxsZWQpKTsKLSAgRVhQRUNUX0ZBTFNFKGNiLklzTnVsbCgpKTsKLQotICBjYi5Ib2xkQ2FsbGJhY2soKTsKLQotICBjYi5SdW5PckhvbGQoKTsKLSAgRVhQRUNUX0ZBTFNFKGNsb3N1cmVfY2FsbGVkKTsKLSAgRVhQRUNUX0ZBTFNFKGNiLklzTnVsbCgpKTsKLSAgY2IuUnVuSGVsZENhbGxiYWNrKCk7Ci0gIEVYUEVDVF9UUlVFKGNiLklzTnVsbCgpKTsKLSAgRVhQRUNUX1RSVUUoY2xvc3VyZV9jYWxsZWQpOwotfQotCi1URVNUKENhbGxiYWNrSG9sZGVyVGVzdCwgTm90SG9sZF9DbG9zdXJlKSB7Ci0gIENhbGxiYWNrSG9sZGVyPGJhc2U6OkNsb3N1cmU+IGNiOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0KLSAgYm9vbCBjbG9zdXJlX2NhbGxlZCA9IGZhbHNlOwotICBjYi5TZXRDYWxsYmFjayhiYXNlOjpCaW5kKCZTZXRCb29sLCAmY2xvc3VyZV9jYWxsZWQpKTsKLSAgRVhQRUNUX0ZBTFNFKGNiLklzTnVsbCgpKTsKLQotICBjYi5SdW5PckhvbGQoKTsKLSAgRVhQRUNUX1RSVUUoY2IuSXNOdWxsKCkpOwotICBFWFBFQ1RfVFJVRShjbG9zdXJlX2NhbGxlZCk7Ci19Ci0KLVRFU1QoQ2FsbGJhY2tIb2xkZXJUZXN0LCBTZXRBZnRlckhvbGRfQ2FsbGJhY2spIHsKLSAgQ2FsbGJhY2tIb2xkZXI8YmFzZTo6Q2FsbGJhY2s8dm9pZChpbnQsIGludCopPiA+IGNiOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0KLSAgY2IuSG9sZENhbGxiYWNrKCk7Ci0KLSAgY2IuU2V0Q2FsbGJhY2soYmFzZTo6QmluZCgmQ29weVZhcikpOwotICBFWFBFQ1RfRkFMU0UoY2IuSXNOdWxsKCkpOwotCi0gIGludCB2YXIxID0gMTAwOwotICBpbnQgdmFyMiA9IDA7Ci0gIGNiLlJ1bk9ySG9sZCh2YXIxLCAmdmFyMik7Ci0gIEVYUEVDVF9GQUxTRShjYi5Jc051bGwoKSk7Ci0gIEVYUEVDVF9ORSh2YXIxLCB2YXIyKTsKLQotICBjYi5SdW5IZWxkQ2FsbGJhY2soKTsKLSAgRVhQRUNUX1RSVUUoY2IuSXNOdWxsKCkpOwotICBFWFBFQ1RfRVEodmFyMSwgdmFyMik7Ci19Ci0KLVRFU1QoQ2FsbGJhY2tIb2xkZXJUZXN0LCBIb2xkQWZ0ZXJTZXRfQ2FsbGJhY2spIHsKLSAgQ2FsbGJhY2tIb2xkZXI8YmFzZTo6Q2FsbGJhY2s8dm9pZChpbnQsIGludCopPiA+IGNiOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0KLSAgY2IuU2V0Q2FsbGJhY2soYmFzZTo6QmluZCgmQ29weVZhcikpOwotICBFWFBFQ1RfRkFMU0UoY2IuSXNOdWxsKCkpOwotCi0gIGNiLkhvbGRDYWxsYmFjaygpOwotCi0gIGludCB2YXIxID0gMTAwOwotICBpbnQgdmFyMiA9IDA7Ci0gIGNiLlJ1bk9ySG9sZCh2YXIxLCAmdmFyMik7Ci0gIEVYUEVDVF9GQUxTRShjYi5Jc051bGwoKSk7Ci0gIEVYUEVDVF9ORSh2YXIxLCB2YXIyKTsKLQotICBjYi5SdW5IZWxkQ2FsbGJhY2soKTsKLSAgRVhQRUNUX1RSVUUoY2IuSXNOdWxsKCkpOwotICBFWFBFQ1RfRVEodmFyMSwgdmFyMik7Ci19Ci0KLVRFU1QoQ2FsbGJhY2tIb2xkZXJUZXN0LCBOb3RIb2xkX0NhbGxiYWNrKSB7Ci0gIENhbGxiYWNrSG9sZGVyPGJhc2U6OkNhbGxiYWNrPHZvaWQoaW50LCBpbnQqKT4gPiBjYjsKLSAgRVhQRUNUX1RSVUUoY2IuSXNOdWxsKCkpOwotCi0gIGNiLlNldENhbGxiYWNrKGJhc2U6OkJpbmQoJkNvcHlWYXIpKTsKLSAgRVhQRUNUX0ZBTFNFKGNiLklzTnVsbCgpKTsKLQotICBpbnQgdmFyMSA9IDEwMDsKLSAgaW50IHZhcjIgPSAwOwotICBjYi5SdW5PckhvbGQodmFyMSwgJnZhcjIpOwotICBFWFBFQ1RfVFJVRShjYi5Jc051bGwoKSk7Ci0gIEVYUEVDVF9FUSh2YXIxLCB2YXIyKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9jaGFubmVsX2xheW91dC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjQ0MTBkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jaGFubmVsX2xheW91dC5oIgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIGNvbnN0IGludCBrTGF5b3V0VG9DaGFubmVsc1tdID0gewotICAgIDAsICAvLyBDSEFOTkVMX0xBWU9VVF9OT05FCi0gICAgMCwgIC8vIENIQU5ORUxfTEFZT1VUX1VOU1VQUE9SVEVECi0gICAgMSwgIC8vIENIQU5ORUxfTEFZT1VUX01PTk8KLSAgICAyLCAgLy8gQ0hBTk5FTF9MQVlPVVRfU1RFUkVPCi0gICAgMywgIC8vIENIQU5ORUxfTEFZT1VUXzJfMQotICAgIDMsICAvLyBDSEFOTkVMX0xBWU9VVF9TVVJST1VORAotICAgIDQsICAvLyBDSEFOTkVMX0xBWU9VVF80XzAKLSAgICA0LCAgLy8gQ0hBTk5FTF9MQVlPVVRfMl8yCi0gICAgNCwgIC8vIENIQU5ORUxfTEFZT1VUX1FVQUQKLSAgICA1LCAgLy8gQ0hBTk5FTF9MQVlPVVRfNV8wCi0gICAgNiwgIC8vIENIQU5ORUxfTEFZT1VUXzVfMQotICAgIDUsICAvLyBDSEFOTkVMX0xBWU9VVF81XzBfQkFDSwotICAgIDYsICAvLyBDSEFOTkVMX0xBWU9VVF81XzFfQkFDSwotICAgIDcsICAvLyBDSEFOTkVMX0xBWU9VVF83XzAKLSAgICA4LCAgLy8gQ0hBTk5FTF9MQVlPVVRfN18xCi0gICAgOCwgIC8vIENIQU5ORUxfTEFZT1VUXzdfMV9XSURFCi0gICAgMiwgIC8vIENIQU5ORUxfTEFZT1VUX1NURVJFT19ET1dOTUlYCi0gICAgMywgIC8vIENIQU5ORUxfTEFZT1VUXzJQT0lOVDEKLSAgICA0LCAgLy8gQ0hBTk5FTF9MQVlPVVRfM18xCi0gICAgNSwgIC8vIENIQU5ORUxfTEFZT1VUXzRfMQotICAgIDYsICAvLyBDSEFOTkVMX0xBWU9VVF82XzAKLSAgICA2LCAgLy8gQ0hBTk5FTF9MQVlPVVRfNl8wX0ZST05UCi0gICAgNiwgIC8vIENIQU5ORUxfTEFZT1VUX0hFWEFHT05BTAotICAgIDcsICAvLyBDSEFOTkVMX0xBWU9VVF82XzEKLSAgICA3LCAgLy8gQ0hBTk5FTF9MQVlPVVRfNl8xX0JBQ0sKLSAgICA3LCAgLy8gQ0hBTk5FTF9MQVlPVVRfNl8xX0ZST05UCi0gICAgNywgIC8vIENIQU5ORUxfTEFZT1VUXzdfMF9GUk9OVAotICAgIDgsICAvLyBDSEFOTkVMX0xBWU9VVF83XzFfV0lERV9CQUNLCi0gICAgOCwgIC8vIENIQU5ORUxfTEFZT1VUX09DVEFHT05BTAotICAgIDAsICAvLyBDSEFOTkVMX0xBWU9VVF9ESVNDUkVURQotICAgIDMsICAvLyBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQwotICAgIDUsICAvLyBDSEFOTkVMX0xBWU9VVF80XzFfUVVBRF9TSURFCi19OwotCi0vLyBUaGUgY2hhbm5lbCBvcmRlcmluZ3MgZm9yIGVhY2ggbGF5b3V0IGFzIHNwZWNpZmllZCBieSBGRm1wZWcuIEVhY2ggdmFsdWUKLS8vIHJlcHJlc2VudHMgdGhlIGluZGV4IG9mIGVhY2ggY2hhbm5lbCBpbiBlYWNoIGxheW91dC4gIFZhbHVlcyBvZiAtMSBtZWFuIHRoZQotLy8gY2hhbm5lbCBhdCB0aGF0IGluZGV4IGlzIG5vdCB1c2VkIGZvciB0aGF0IGxheW91dC4gRm9yIGV4YW1wbGUsIHRoZSBsZWZ0IHNpZGUKLS8vIHN1cnJvdW5kIHNvdW5kIGNoYW5uZWwgaW4gRkZtcGVnJ3MgNS4xIGxheW91dCBpcyBpbiB0aGUgNXRoIHBvc2l0aW9uIChiZWNhdXNlCi0vLyB0aGUgb3JkZXIgaXMgTCwgUiwgQywgTEZFLCBMUywgUlMpLCBzbwotLy8ga0NoYW5uZWxPcmRlcmluZ3NbQ0hBTk5FTF9MQVlPVVRfNV8xXVtTSURFX0xFRlRdID0gNDsKLXN0YXRpYyBjb25zdCBpbnQga0NoYW5uZWxPcmRlcmluZ3NbQ0hBTk5FTF9MQVlPVVRfTUFYICsgMV1bQ0hBTk5FTFNfTUFYICsgMV0gPSB7Ci0gICAgLy8gRkwgfCBGUiB8IEZDIHwgTEZFIHwgQkwgfCBCUiB8IEZMb2ZDIHwgRlJvZkMgfCBCQyB8IFNMIHwgU1IKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX05PTkUKLSAgICB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX1VOU1VQUE9SVEVECi0gICAgey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF9NT05PCi0gICAgey0xLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX1NURVJFTwotICAgIHswLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzJfMQotICAgIHswLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyLCAtMSwgLTF9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfU1VSUk9VTkQKLSAgICB7MCwgMSwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzRfMAotICAgIHswLCAxLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDMsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF8yXzIKLSAgICB7MCwgMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIsIDN9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfUVVBRAotICAgIHswLCAxLCAtMSwgLTEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF81XzAKLSAgICB7MCwgMSwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMywgNH0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF81XzEKLSAgICB7MCwgMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEsIC0xLCA0LCA1fSwKLQotICAgIC8vIEZMIHwgRlIgfCBGQyB8IExGRSB8IEJMIHwgQlIgfCBGTG9mQyB8IEZSb2ZDIHwgQkMgfCBTTCB8IFNSCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF81XzBfQkFDSwotICAgIHswLCAxLCAyLCAtMSwgMywgNCwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzVfMV9CQUNLCi0gICAgezAsIDEsIDIsIDMsIDQsIDUsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF83XzAKLSAgICB7MCwgMSwgMiwgLTEsIDUsIDYsIC0xLCAtMSwgLTEsIDMsIDR9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfN18xCi0gICAgezAsIDEsIDIsIDMsIDYsIDcsIC0xLCAtMSwgLTEsIDQsIDV9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfN18xX1dJREUKLSAgICB7MCwgMSwgMiwgMywgLTEsIC0xLCA2LCA3LCAtMSwgNCwgNX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fRE9XTk1JWAotICAgIHswLCAxLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzJQT0lOVDEKLSAgICB7MCwgMSwgLTEsIDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzNfMQotICAgIHswLCAxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF80XzEKLSAgICB7MCwgMSwgMiwgNCwgLTEsIC0xLCAtMSwgLTEsIDMsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF82XzAKLSAgICB7MCwgMSwgMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCA1LCAzLCA0fSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzZfMF9GUk9OVAotICAgIHswLCAxLCAtMSwgLTEsIC0xLCAtMSwgNCwgNSwgLTEsIDIsIDN9LAotCi0gICAgLy8gRkwgfCBGUiB8IEZDIHwgTEZFIHwgQkwgfCBCUiB8IEZMb2ZDIHwgRlJvZkMgfCBCQyB8IFNMIHwgU1IKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX0hFWEFHT05BTAotICAgIHswLCAxLCAyLCAtMSwgMywgNCwgLTEsIC0xLCA1LCAtMSwgLTF9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfNl8xCi0gICAgezAsIDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCA2LCA0LCA1fSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzZfMV9CQUNLCi0gICAgezAsIDEsIDIsIDMsIDQsIDUsIC0xLCAtMSwgNiwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUXzZfMV9GUk9OVAotICAgIHswLCAxLCAtMSwgNiwgLTEsIC0xLCA0LCA1LCAtMSwgMiwgM30sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF83XzBfRlJPTlQKLSAgICB7MCwgMSwgMiwgLTEsIC0xLCAtMSwgNSwgNiwgLTEsIDMsIDR9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfN18xX1dJREVfQkFDSwotICAgIHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAtMSwgLTEsIC0xfSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX09DVEFHT05BTAotICAgIHswLCAxLCAyLCAtMSwgNSwgNiwgLTEsIC0xLCA3LCAzLCA0fSwKLQotICAgIC8vIENIQU5ORUxfTEFZT1VUX0RJU0NSRVRFCi0gICAgey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX0sCi0KLSAgICAvLyBDSEFOTkVMX0xBWU9VVF9TVEVSRU9fQU5EX0tFWUJPQVJEX01JQwotICAgIHswLCAxLCAyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9LAotCi0gICAgLy8gQ0hBTk5FTF9MQVlPVVRfNF8xX1FVQURfU0lERQotICAgIHswLCAxLCAtMSwgNCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyLCAzfSwKLQotICAgIC8vIEZMIHwgRlIgfCBGQyB8IExGRSB8IEJMIHwgQlIgfCBGTG9mQyB8IEZSb2ZDIHwgQkMgfCBTTCB8IFNSCi19OwotCi1pbnQgQ2hhbm5lbExheW91dFRvQ2hhbm5lbENvdW50KENoYW5uZWxMYXlvdXQgbGF5b3V0KSB7Ci0gIERDSEVDS19MVChzdGF0aWNfY2FzdDxzaXplX3Q+KGxheW91dCksIGFycmF5c2l6ZShrTGF5b3V0VG9DaGFubmVscykpOwotICByZXR1cm4ga0xheW91dFRvQ2hhbm5lbHNbbGF5b3V0XTsKLX0KLQotLy8gQ29udmVydHMgYSBjaGFubmVsIGNvdW50IGludG8gYSBjaGFubmVsIGxheW91dC4KLUNoYW5uZWxMYXlvdXQgR3Vlc3NDaGFubmVsTGF5b3V0KGludCBjaGFubmVscykgewotICBzd2l0Y2ggKGNoYW5uZWxzKSB7Ci0gICAgY2FzZSAxOgotICAgICAgcmV0dXJuIENIQU5ORUxfTEFZT1VUX01PTk87Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuIENIQU5ORUxfTEFZT1VUX1NURVJFTzsKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gQ0hBTk5FTF9MQVlPVVRfU1VSUk9VTkQ7Ci0gICAgY2FzZSA0OgotICAgICAgcmV0dXJuIENIQU5ORUxfTEFZT1VUX1FVQUQ7Ci0gICAgY2FzZSA1OgotICAgICAgcmV0dXJuIENIQU5ORUxfTEFZT1VUXzVfMDsKLSAgICBjYXNlIDY6Ci0gICAgICByZXR1cm4gQ0hBTk5FTF9MQVlPVVRfNV8xOwotICAgIGNhc2UgNzoKLSAgICAgIHJldHVybiBDSEFOTkVMX0xBWU9VVF82XzE7Ci0gICAgY2FzZSA4OgotICAgICAgcmV0dXJuIENIQU5ORUxfTEFZT1VUXzdfMTsKLSAgICBkZWZhdWx0OgotICAgICAgRFZMT0coMSkgPDwgIlVuc3VwcG9ydGVkIGNoYW5uZWwgY291bnQ6ICIgPDwgY2hhbm5lbHM7Ci0gIH0KLSAgcmV0dXJuIENIQU5ORUxfTEFZT1VUX1VOU1VQUE9SVEVEOwotfQotCi1pbnQgQ2hhbm5lbE9yZGVyKENoYW5uZWxMYXlvdXQgbGF5b3V0LCBDaGFubmVscyBjaGFubmVsKSB7Ci0gIERDSEVDS19MVChzdGF0aWNfY2FzdDxzaXplX3Q+KGxheW91dCksIGFycmF5c2l6ZShrQ2hhbm5lbE9yZGVyaW5ncykpOwotICBEQ0hFQ0tfTFQoc3RhdGljX2Nhc3Q8c2l6ZV90PihjaGFubmVsKSwgYXJyYXlzaXplKGtDaGFubmVsT3JkZXJpbmdzWzBdKSk7Ci0gIHJldHVybiBrQ2hhbm5lbE9yZGVyaW5nc1tsYXlvdXRdW2NoYW5uZWxdOwotfQotCi1jb25zdCBjaGFyKiBDaGFubmVsTGF5b3V0VG9TdHJpbmcoQ2hhbm5lbExheW91dCBsYXlvdXQpIHsKLSAgc3dpdGNoIChsYXlvdXQpIHsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUX05PTkU6Ci0gICAgICByZXR1cm4gIk5PTkUiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfVU5TVVBQT1JURUQ6Ci0gICAgICByZXR1cm4gIlVOU1VQUE9SVEVEIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUX01PTk86Ci0gICAgICByZXR1cm4gIk1PTk8iOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOgotICAgICAgcmV0dXJuICJTVEVSRU8iOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfMl8xOgotICAgICAgcmV0dXJuICIyLjEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfU1VSUk9VTkQ6Ci0gICAgICByZXR1cm4gIlNVUlJPVU5EIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzRfMDoKLSAgICAgIHJldHVybiAiNC4wIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzJfMjoKLSAgICAgIHJldHVybiAiUVVBRF9TSURFIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUX1FVQUQ6Ci0gICAgICByZXR1cm4gIlFVQUQiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNV8wOgotICAgICAgcmV0dXJuICI1LjAiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNV8xOgotICAgICAgcmV0dXJuICI1LjEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNV8wX0JBQ0s6Ci0gICAgICByZXR1cm4gIjUuMF9CQUNLIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzVfMV9CQUNLOgotICAgICAgcmV0dXJuICI1LjFfQkFDSyI7Ci0gICAgY2FzZSBDSEFOTkVMX0xBWU9VVF83XzA6Ci0gICAgICByZXR1cm4gIjcuMCI7Ci0gICAgY2FzZSBDSEFOTkVMX0xBWU9VVF83XzE6Ci0gICAgICByZXR1cm4gIjcuMSI7Ci0gICAgY2FzZSBDSEFOTkVMX0xBWU9VVF83XzFfV0lERToKLSAgICAgIHJldHVybiAiNy4xX1dJREUiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0RPV05NSVg6Ci0gICAgICByZXR1cm4gIlNURVJFT19ET1dOTUlYIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzJQT0lOVDE6Ci0gICAgICByZXR1cm4gIjJQT0lOVDEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfM18xOgotICAgICAgcmV0dXJuICIzLjEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNF8xOgotICAgICAgcmV0dXJuICI0LjEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNl8wOgotICAgICAgcmV0dXJuICI2LjAiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNl8wX0ZST05UOgotICAgICAgcmV0dXJuICI2LjBfRlJPTlQiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfSEVYQUdPTkFMOgotICAgICAgcmV0dXJuICJIRVhBR09OQUwiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNl8xOgotICAgICAgcmV0dXJuICI2LjEiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfNl8xX0JBQ0s6Ci0gICAgICByZXR1cm4gIjYuMV9CQUNLIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzZfMV9GUk9OVDoKLSAgICAgIHJldHVybiAiNi4xX0ZST05UIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzdfMF9GUk9OVDoKLSAgICAgIHJldHVybiAiNy4wX0ZST05UIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUXzdfMV9XSURFX0JBQ0s6Ci0gICAgICByZXR1cm4gIjcuMV9XSURFX0JBQ0siOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfT0NUQUdPTkFMOgotICAgICAgcmV0dXJuICJPQ1RBR09OQUwiOwotICAgIGNhc2UgQ0hBTk5FTF9MQVlPVVRfRElTQ1JFVEU6Ci0gICAgICByZXR1cm4gIkRJU0NSRVRFIjsKLSAgICBjYXNlIENIQU5ORUxfTEFZT1VUX1NURVJFT19BTkRfS0VZQk9BUkRfTUlDOgotICAgICAgcmV0dXJuICJTVEVSRU9fQU5EX0tFWUJPQVJEX01JQyI7Ci0gICAgY2FzZSBDSEFOTkVMX0xBWU9VVF80XzFfUVVBRF9TSURFOgotICAgICAgcmV0dXJuICI0LjFfUVVBRF9TSURFIjsKLSAgfQotICBOT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgY2hhbm5lbCBsYXlvdXQgcHJvdmlkZWQ6ICIgPDwgbGF5b3V0OwotICByZXR1cm4gIiI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY2hhbm5lbF9sYXlvdXQuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzcwYjYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvY2hhbm5lbF9sYXlvdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0NIQU5ORUxfTEFZT1VUX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0NIQU5ORUxfTEFZT1VUX0hfCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBFbnVtZXJhdGVzIHRoZSB2YXJpb3VzIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgb3JkZXJpbmcgb2YgYXVkaW8gY2hhbm5lbHMuCi0vLyBMb2dnZWQgdG8gVU1BLCBzbyBuZXZlciByZXVzZSBhIHZhbHVlLCBhbHdheXMgYWRkIG5ldy9ncmVhdGVyIG9uZXMhCi1lbnVtIENoYW5uZWxMYXlvdXQgewotICBDSEFOTkVMX0xBWU9VVF9OT05FID0gMCwKLSAgQ0hBTk5FTF9MQVlPVVRfVU5TVVBQT1JURUQgPSAxLAotCi0gIC8vIEZyb250IEMKLSAgQ0hBTk5FTF9MQVlPVVRfTU9OTyA9IDIsCi0KLSAgLy8gRnJvbnQgTCwgRnJvbnQgUgotICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8gPSAzLAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIEJhY2sgQwotICBDSEFOTkVMX0xBWU9VVF8yXzEgPSA0LAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIEZyb250IEMKLSAgQ0hBTk5FTF9MQVlPVVRfU1VSUk9VTkQgPSA1LAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIEZyb250IEMsIEJhY2sgQwotICBDSEFOTkVMX0xBWU9VVF80XzAgPSA2LAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIFNpZGUgTCwgU2lkZSBSCi0gIENIQU5ORUxfTEFZT1VUXzJfMiA9IDcsCi0KLSAgLy8gRnJvbnQgTCwgRnJvbnQgUiwgQmFjayBMLCBCYWNrIFIKLSAgQ0hBTk5FTF9MQVlPVVRfUVVBRCA9IDgsCi0KLSAgLy8gRnJvbnQgTCwgRnJvbnQgUiwgRnJvbnQgQywgU2lkZSBMLCBTaWRlIFIKLSAgQ0hBTk5FTF9MQVlPVVRfNV8wID0gOSwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBMRkUsIFNpZGUgTCwgU2lkZSBSCi0gIENIQU5ORUxfTEFZT1VUXzVfMSA9IDEwLAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIEZyb250IEMsIEJhY2sgTCwgQmFjayBSCi0gIENIQU5ORUxfTEFZT1VUXzVfMF9CQUNLID0gMTEsCi0KLSAgLy8gRnJvbnQgTCwgRnJvbnQgUiwgRnJvbnQgQywgTEZFLCBCYWNrIEwsIEJhY2sgUgotICBDSEFOTkVMX0xBWU9VVF81XzFfQkFDSyA9IDEyLAotCi0gIC8vIEZyb250IEwsIEZyb250IFIsIEZyb250IEMsIFNpZGUgTCwgU2lkZSBSLCBCYWNrIEwsIEJhY2sgUgotICBDSEFOTkVMX0xBWU9VVF83XzAgPSAxMywKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBMRkUsIFNpZGUgTCwgU2lkZSBSLCBCYWNrIEwsIEJhY2sgUgotICBDSEFOTkVMX0xBWU9VVF83XzEgPSAxNCwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBMRkUsIFNpZGUgTCwgU2lkZSBSLCBGcm9udCBMb2ZDLCBGcm9udCBSb2ZDCi0gIENIQU5ORUxfTEFZT1VUXzdfMV9XSURFID0gMTUsCi0KLSAgLy8gU3RlcmVvIEwsIFN0ZXJlbyBSCi0gIENIQU5ORUxfTEFZT1VUX1NURVJFT19ET1dOTUlYID0gMTYsCi0KLSAgLy8gU3RlcmVvIEwsIFN0ZXJlbyBSLCBMRkUKLSAgQ0hBTk5FTF9MQVlPVVRfMlBPSU5UMSA9IDE3LAotCi0gIC8vIFN0ZXJlbyBMLCBTdGVyZW8gUiwgRnJvbnQgQywgTEZFCi0gIENIQU5ORUxfTEFZT1VUXzNfMSA9IDE4LAotCi0gIC8vIFN0ZXJlbyBMLCBTdGVyZW8gUiwgRnJvbnQgQywgUmVhciBDLCBMRkUKLSAgQ0hBTk5FTF9MQVlPVVRfNF8xID0gMTksCi0KLSAgLy8gU3RlcmVvIEwsIFN0ZXJlbyBSLCBGcm9udCBDLCBTaWRlIEwsIFNpZGUgUiwgQmFjayBDCi0gIENIQU5ORUxfTEFZT1VUXzZfMCA9IDIwLAotCi0gIC8vIFN0ZXJlbyBMLCBTdGVyZW8gUiwgU2lkZSBMLCBTaWRlIFIsIEZyb250IExvZkMsIEZyb250IFJvZkMKLSAgQ0hBTk5FTF9MQVlPVVRfNl8wX0ZST05UID0gMjEsCi0KLSAgLy8gU3RlcmVvIEwsIFN0ZXJlbyBSLCBGcm9udCBDLCBSZWFyIEwsIFJlYXIgUiwgUmVhciBDCi0gIENIQU5ORUxfTEFZT1VUX0hFWEFHT05BTCA9IDIyLAotCi0gIC8vIFN0ZXJlbyBMLCBTdGVyZW8gUiwgRnJvbnQgQywgTEZFLCBTaWRlIEwsIFNpZGUgUiwgUmVhciBDZW50ZXIKLSAgQ0hBTk5FTF9MQVlPVVRfNl8xID0gMjMsCi0KLSAgLy8gU3RlcmVvIEwsIFN0ZXJlbyBSLCBGcm9udCBDLCBMRkUsIEJhY2sgTCwgQmFjayBSLCBSZWFyIENlbnRlcgotICBDSEFOTkVMX0xBWU9VVF82XzFfQkFDSyA9IDI0LAotCi0gIC8vIFN0ZXJlbyBMLCBTdGVyZW8gUiwgU2lkZSBMLCBTaWRlIFIsIEZyb250IExvZkMsIEZyb250IFJvZkMsIExGRQotICBDSEFOTkVMX0xBWU9VVF82XzFfRlJPTlQgPSAyNSwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBTaWRlIEwsIFNpZGUgUiwgRnJvbnQgTG9mQywgRnJvbnQgUm9mQwotICBDSEFOTkVMX0xBWU9VVF83XzBfRlJPTlQgPSAyNiwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBMRkUsIEJhY2sgTCwgQmFjayBSLCBGcm9udCBMb2ZDLCBGcm9udCBSb2ZDCi0gIENIQU5ORUxfTEFZT1VUXzdfMV9XSURFX0JBQ0sgPSAyNywKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLCBTaWRlIEwsIFNpZGUgUiwgUmVhciBMLCBCYWNrIFIsIEJhY2sgQy4KLSAgQ0hBTk5FTF9MQVlPVVRfT0NUQUdPTkFMID0gMjgsCi0KLSAgLy8gQ2hhbm5lbHMgYXJlIG5vdCBleHBsaWNpdGx5IG1hcHBlZCB0byBzcGVha2Vycy4KLSAgQ0hBTk5FTF9MQVlPVVRfRElTQ1JFVEUgPSAyOSwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBGcm9udCBDLiBGcm9udCBDIGNvbnRhaW5zIHRoZSBrZXlib2FyZCBtaWMgYXVkaW8uIFRoaXMKLSAgLy8gbGF5b3V0IGlzIG9ubHkgaW50ZW5kZWQgZm9yIGlucHV0IGZvciBXZWJSVEMuIFRoZSBGcm9udCBDIGNoYW5uZWwKLSAgLy8gaXMgc3RyaXBwZWQgYXdheSBpbiB0aGUgV2ViUlRDIGF1ZGlvIGlucHV0IHBpcGVsaW5lIGFuZCBuZXZlciBzZWVuIG91dHNpZGUKLSAgLy8gb2YgdGhhdC4KLSAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPX0FORF9LRVlCT0FSRF9NSUMgPSAzMCwKLQotICAvLyBGcm9udCBMLCBGcm9udCBSLCBTaWRlIEwsIFNpZGUgUiwgTEZFCi0gIENIQU5ORUxfTEFZT1VUXzRfMV9RVUFEX1NJREUgPSAzMSwKLQotICAvLyBNYXggdmFsdWUsIG11c3QgYWx3YXlzIGVxdWFsIHRoZSBsYXJnZXN0IGVudHJ5IGV2ZXIgbG9nZ2VkLgotICBDSEFOTkVMX0xBWU9VVF9NQVggPSBDSEFOTkVMX0xBWU9VVF80XzFfUVVBRF9TSURFCi19OwotCi1lbnVtIENoYW5uZWxzIHsKLSAgTEVGVCA9IDAsCi0gIFJJR0hULAotICBDRU5URVIsCi0gIExGRSwKLSAgQkFDS19MRUZULAotICBCQUNLX1JJR0hULAotICBMRUZUX09GX0NFTlRFUiwKLSAgUklHSFRfT0ZfQ0VOVEVSLAotICBCQUNLX0NFTlRFUiwKLSAgU0lERV9MRUZULAotICBTSURFX1JJR0hULAotICBDSEFOTkVMU19NQVggPQotICAgICAgU0lERV9SSUdIVCwgIC8vIE11c3QgYWx3YXlzIGVxdWFsIHRoZSBsYXJnZXN0IHZhbHVlIGV2ZXIgbG9nZ2VkLgotfTsKLQotLy8gUmV0dXJucyB0aGUgZXhwZWN0ZWQgY2hhbm5lbCBwb3NpdGlvbiBpbiBhbiBpbnRlcmxlYXZlZCBzdHJlYW0uICBWYWx1ZXMgb2YgLTEKLS8vIG1lYW4gdGhlIGNoYW5uZWwgYXQgdGhhdCBpbmRleCBpcyBub3QgdXNlZCBmb3IgdGhhdCBsYXlvdXQuICBWYWx1ZXMgcmFuZ2UKLS8vIGZyb20gMCB0byBDaGFubmVsTGF5b3V0VG9DaGFubmVsQ291bnQobGF5b3V0KSAtIDEuCi1NRURJQV9FWFBPUlQgaW50IENoYW5uZWxPcmRlcihDaGFubmVsTGF5b3V0IGxheW91dCwgQ2hhbm5lbHMgY2hhbm5lbCk7Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbiBhIGdpdmVuIENoYW5uZWxMYXlvdXQuCi1NRURJQV9FWFBPUlQgaW50IENoYW5uZWxMYXlvdXRUb0NoYW5uZWxDb3VudChDaGFubmVsTGF5b3V0IGxheW91dCk7Ci0KLS8vIEdpdmVuIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMsIHJldHVybiB0aGUgYmVzdCBsYXlvdXQsCi0vLyBvciByZXR1cm4gQ0hBTk5FTF9MQVlPVVRfVU5TVVBQT1JURUQgaWYgdGhlcmUgaXMgbm8gZ29vZCBtYXRjaC4KLU1FRElBX0VYUE9SVCBDaGFubmVsTGF5b3V0IEd1ZXNzQ2hhbm5lbExheW91dChpbnQgY2hhbm5lbHMpOwotCi0vLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFubmVsIGxheW91dC4KLU1FRElBX0VYUE9SVCBjb25zdCBjaGFyKiBDaGFubmVsTGF5b3V0VG9TdHJpbmcoQ2hhbm5lbExheW91dCBsYXlvdXQpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9DSEFOTkVMX0xBWU9VVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY29sb3Jfc3BhY2UuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9jb2xvcl9zcGFjZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RhYWJiMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9jb2xvcl9zcGFjZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jb2xvcl9zcGFjZS5oIgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgZ2Z4IHsKLQotQ29sb3JTcGFjZTo6UHJpbWFyeUlEIENvbG9yU3BhY2U6OlByaW1hcnlJREZyb21JbnQoaW50IHByaW1hcnlfaWQpIHsKLSAgaWYgKHByaW1hcnlfaWQgPCAwIHx8IHByaW1hcnlfaWQgPiBzdGF0aWNfY2FzdDxpbnQ+KGtQcmltYXJ5SWRMYXN0KSkKLSAgICByZXR1cm4ga1ByaW1hcnlJZFVua25vd247Ci0gIGlmIChwcmltYXJ5X2lkID4gc3RhdGljX2Nhc3Q8aW50PihrUHJpbWFyeUlkTGFzdFN0YW5kYXJkVmFsdWUpICYmCi0gICAgICBwcmltYXJ5X2lkIDwgMTAwMCkKLSAgICByZXR1cm4ga1ByaW1hcnlJZFVua25vd247Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxQcmltYXJ5SUQ+KHByaW1hcnlfaWQpOwotfQotCi1Db2xvclNwYWNlOjpUcmFuc2ZlcklEIENvbG9yU3BhY2U6OlRyYW5zZmVySURGcm9tSW50KGludCB0cmFuc2Zlcl9pZCkgewotICBpZiAodHJhbnNmZXJfaWQgPCAwIHx8IHRyYW5zZmVyX2lkID4gc3RhdGljX2Nhc3Q8aW50PihrVHJhbnNmZXJJZExhc3QpKQotICAgIHJldHVybiBrVHJhbnNmZXJJZFVua25vd247Ci0gIGlmICh0cmFuc2Zlcl9pZCA+IHN0YXRpY19jYXN0PGludD4oa1RyYW5zZmVySWRMYXN0U3RhbmRhcmRWYWx1ZSkgJiYKLSAgICAgIHRyYW5zZmVyX2lkIDwgMTAwMCkKLSAgICByZXR1cm4ga1RyYW5zZmVySWRVbmtub3duOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8VHJhbnNmZXJJRD4odHJhbnNmZXJfaWQpOwotfQotCi1Db2xvclNwYWNlOjpNYXRyaXhJRCBDb2xvclNwYWNlOjpNYXRyaXhJREZyb21JbnQoaW50IG1hdHJpeF9pZCkgewotICBpZiAobWF0cml4X2lkIDwgMCB8fCBtYXRyaXhfaWQgPiBzdGF0aWNfY2FzdDxpbnQ+KGtNYXRyaXhJZExhc3QpKQotICAgIHJldHVybiBrTWF0cml4SWRVbmtub3duOwotICBpZiAobWF0cml4X2lkID4gc3RhdGljX2Nhc3Q8aW50PihrTWF0cml4SWRMYXN0U3RhbmRhcmRWYWx1ZSkgJiYKLSAgICAgIG1hdHJpeF9pZCA8IDEwMDApCi0gICAgcmV0dXJuIGtNYXRyaXhJZFVua25vd247Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxNYXRyaXhJRD4obWF0cml4X2lkKTsKLX0KLQotQ29sb3JTcGFjZTo6Q29sb3JTcGFjZSgpCi0gICAgOiBwcmltYXJpZXNfKGtQcmltYXJ5SWRVbnNwZWNpZmllZCksCi0gICAgICB0cmFuc2Zlcl8oa1RyYW5zZmVySWRVbnNwZWNpZmllZCksCi0gICAgICBtYXRyaXhfKGtNYXRyaXhJZFVuc3BlY2lmaWVkKSwKLSAgICAgIHJhbmdlXyhrUmFuZ2VJZExpbWl0ZWQpIHsKLSAgbWVtc2V0KGN1c3RvbV9wcmltYXJ5X21hdHJpeF8sIDAsIHNpemVvZihjdXN0b21fcHJpbWFyeV9tYXRyaXhfKSk7Ci19Ci0KLUNvbG9yU3BhY2U6OkNvbG9yU3BhY2UoUHJpbWFyeUlEIHByaW1hcmllcywgVHJhbnNmZXJJRCB0cmFuc2ZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgTWF0cml4SUQgbWF0cml4LCBSYW5nZUlEIHJhbmdlKQotICAgIDogcHJpbWFyaWVzXyhwcmltYXJpZXMpLAotICAgICAgdHJhbnNmZXJfKHRyYW5zZmVyKSwKLSAgICAgIG1hdHJpeF8obWF0cml4KSwKLSAgICAgIHJhbmdlXyhyYW5nZSkgewotICBtZW1zZXQoY3VzdG9tX3ByaW1hcnlfbWF0cml4XywgMCwgc2l6ZW9mKGN1c3RvbV9wcmltYXJ5X21hdHJpeF8pKTsKLX0KLQotQ29sb3JTcGFjZTo6Q29sb3JTcGFjZShpbnQgcHJpbWFyaWVzLCBpbnQgdHJhbnNmZXIsIGludCBtYXRyaXgsIFJhbmdlSUQgcmFuZ2UpCi0gICAgOiBwcmltYXJpZXNfKFByaW1hcnlJREZyb21JbnQocHJpbWFyaWVzKSksCi0gICAgICB0cmFuc2Zlcl8oVHJhbnNmZXJJREZyb21JbnQodHJhbnNmZXIpKSwKLSAgICAgIG1hdHJpeF8oTWF0cml4SURGcm9tSW50KG1hdHJpeCkpLAotICAgICAgcmFuZ2VfKHJhbmdlKSB7Ci0gIG1lbXNldChjdXN0b21fcHJpbWFyeV9tYXRyaXhfLCAwLCBzaXplb2YoY3VzdG9tX3ByaW1hcnlfbWF0cml4XykpOwotfQotCi1Db2xvclNwYWNlOjpDb2xvclNwYWNlKGNvbnN0IENvbG9yU3BhY2UmIG90aGVyKQotICAgIDogcHJpbWFyaWVzXyhvdGhlci5wcmltYXJpZXNfKSwKLSAgICAgIHRyYW5zZmVyXyhvdGhlci50cmFuc2Zlcl8pLAotICAgICAgbWF0cml4XyhvdGhlci5tYXRyaXhfKSwKLSAgICAgIHJhbmdlXyhvdGhlci5yYW5nZV8pIHsKLSAgbWVtY3B5KGN1c3RvbV9wcmltYXJ5X21hdHJpeF8sIG90aGVyLmN1c3RvbV9wcmltYXJ5X21hdHJpeF8sCi0gICAgICAgICAgICAgICBzaXplb2YoY3VzdG9tX3ByaW1hcnlfbWF0cml4XykpOwotfQotCi1Db2xvclNwYWNlOjp+Q29sb3JTcGFjZSgpIHt9Ci0KLS8vIFN0YXRpYwotQ29sb3JTcGFjZSBDb2xvclNwYWNlOjpDcmVhdGVYWVpENTAoKSB7Ci0gIHJldHVybiBDb2xvclNwYWNlKGtQcmltYXJ5SWRYeXpENTAsIGtUcmFuc2ZlcklkTGluZWFyLCBrTWF0cml4SWRSZ2IsCi0gICAgICAgICAgICAgICAgICAgIGtSYW5nZUlkRnVsbCk7Ci19Ci0KLS8vIHN0YXRpYwotQ29sb3JTcGFjZSBDb2xvclNwYWNlOjpDcmVhdGVKcGVnKCkgewotICByZXR1cm4gQ29sb3JTcGFjZShrUHJpbWFyeUlkQnQ3MDksIGtUcmFuc2ZlcklkSWVjNjE5NjYyMSwga01hdHJpeElkQnQ3MDksCi0gICAgICAgICAgICAgICAgICAgIGtSYW5nZUlkRnVsbCk7Ci19Ci0KLS8vIHN0YXRpYwotQ29sb3JTcGFjZSBDb2xvclNwYWNlOjpDcmVhdGVSRUM2MDEoKSB7Ci0gIHJldHVybiBDb2xvclNwYWNlKGtQcmltYXJ5SWRTbXB0ZTE3ME0sIGtUcmFuc2ZlcklkU21wdGUxNzBNLAotICAgICAgICAgICAgICAgICAgICBrTWF0cml4SWRTbXB0ZTE3ME0sIGtSYW5nZUlkTGltaXRlZCk7Ci19Ci0KLS8vIHN0YXRpYwotQ29sb3JTcGFjZSBDb2xvclNwYWNlOjpDcmVhdGVSRUM3MDkoKSB7Ci0gIHJldHVybiBDb2xvclNwYWNlKGtQcmltYXJ5SWRCdDcwOSwga1RyYW5zZmVySWRCdDcwOSwga01hdHJpeElkQnQ3MDksCi0gICAgICAgICAgICAgICAgICAgIGtSYW5nZUlkTGltaXRlZCk7Ci19Ci0KLWJvb2wgQ29sb3JTcGFjZTo6b3BlcmF0b3I9PShjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3QgewotICBpZiAocHJpbWFyaWVzXyAhPSBvdGhlci5wcmltYXJpZXNfIHx8IHRyYW5zZmVyXyAhPSBvdGhlci50cmFuc2Zlcl8gfHwKLSAgICAgIG1hdHJpeF8gIT0gb3RoZXIubWF0cml4XyB8fCByYW5nZV8gIT0gb3RoZXIucmFuZ2VfKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYgKHByaW1hcmllc18gPT0ga1ByaW1hcnlJZEN1c3RvbSAmJgotICAgICAgbWVtY21wKGN1c3RvbV9wcmltYXJ5X21hdHJpeF8sIG90aGVyLmN1c3RvbV9wcmltYXJ5X21hdHJpeF8sCi0gICAgICAgICAgICAgc2l6ZW9mKGN1c3RvbV9wcmltYXJ5X21hdHJpeF8pKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbG9yU3BhY2U6Om9wZXJhdG9yIT0oY29uc3QgQ29sb3JTcGFjZSYgb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi1ib29sIENvbG9yU3BhY2U6Om9wZXJhdG9yPChjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3QgewotICBpZiAocHJpbWFyaWVzXyA8IG90aGVyLnByaW1hcmllc18pIHJldHVybiB0cnVlOwotICBpZiAocHJpbWFyaWVzXyA+IG90aGVyLnByaW1hcmllc18pIHJldHVybiBmYWxzZTsKLSAgaWYgKHRyYW5zZmVyXyA8IG90aGVyLnRyYW5zZmVyXykgcmV0dXJuIHRydWU7Ci0gIGlmICh0cmFuc2Zlcl8gPiBvdGhlci50cmFuc2Zlcl8pIHJldHVybiBmYWxzZTsKLSAgaWYgKG1hdHJpeF8gPCBvdGhlci5tYXRyaXhfKSByZXR1cm4gdHJ1ZTsKLSAgaWYgKG1hdHJpeF8gPiBvdGhlci5tYXRyaXhfKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChyYW5nZV8gPCBvdGhlci5yYW5nZV8pIHJldHVybiB0cnVlOwotICBpZiAocmFuZ2VfID4gb3RoZXIucmFuZ2VfKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChwcmltYXJpZXNfID09IGtQcmltYXJ5SWRDdXN0b20pIHsKLSAgICBpbnQgcHJpbWFyeV9yZXN1bHQgPQotICAgICAgICBtZW1jbXAoY3VzdG9tX3ByaW1hcnlfbWF0cml4Xywgb3RoZXIuY3VzdG9tX3ByaW1hcnlfbWF0cml4XywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdXN0b21fcHJpbWFyeV9tYXRyaXhfKSk7Ci0gICAgaWYgKHByaW1hcnlfcmVzdWx0IDwgMCkgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHByaW1hcnlfcmVzdWx0ID4gMCkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGdmeApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY29sb3Jfc3BhY2UuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2NvbG9yX3NwYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MWU3ZWIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvY29sb3Jfc3BhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfQ09MT1JfU1BBQ0VfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQ09MT1JfU1BBQ0VfSF8KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotCi0vLyBUaGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBnZng6OkNvbG9yU3BhY2Ugd2l0aCBTa2lhIGRlcGVuZGVuY3kgcmVtb3ZlZC4KLS8vIEl0IGlzIHRlbnRhdGl2ZWx5IHB1dCBpbnNpZGUgbWVkaWEgdG8gYXZvaWQgaW50cm9kdWNpbmcgbmV3IGNvZGUgaW50bwotLy8gdWkvZ2Z4LiAgSXQgd2lsbCBiZSBmdXJ0aGVyIHNpbXBsaWZpZWQgYW5kIG1lcmdlZCBpbnRvIG1lZGlhIGluIGZvbGxvdyB1cAotLy8gcmVmYWN0b3JzLgotbmFtZXNwYWNlIGdmeCB7Ci0KLS8vIFVzZWQgdG8gcmVwcmVzZW50IGEgY29sb3Igc3BhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbG9yIGNvbnZlcnNpb24uCi0vLyBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIHNhZmUgYW5kIGNvbXBhY3QgZW5vdWdoIHRvIHNlbmQgb3ZlciBJUEMKLS8vIGJldHdlZW4gYW55IHByb2Nlc3Nlcy4KLWNsYXNzIENvbG9yU3BhY2UgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBmbG9hdCBDdXN0b21QcmltYXJ5TWF0cml4WzEyXTsKLQotICBlbnVtIFByaW1hcnlJRCB7Ci0gICAgLy8gVGhlIGZpcnN0IDAtMjU1IHZhbHVlcyBzaG91bGQgbWF0Y2ggdGhlIEgyNjQgc3BlY2lmaWNhdGlvbiAoc2VlIFRhYmxlIEUtMwotICAgIC8vIENvbG91ciBQcmltYXJpZXMgaW4gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjQvZW4pLgotICAgIGtQcmltYXJ5SWRSZXNlcnZlZDAgPSAwLAotICAgIGtQcmltYXJ5SWRCdDcwOSA9IDEsCi0gICAga1ByaW1hcnlJZFVuc3BlY2lmaWVkID0gMiwKLSAgICBrUHJpbWFyeUlkUmVzZXJ2ZWQgPSAzLAotICAgIGtQcmltYXJ5SWRCdDQ3ME0gPSA0LAotICAgIGtQcmltYXJ5SWRCdDQ3MEJnID0gNSwKLSAgICBrUHJpbWFyeUlkU21wdGUxNzBNID0gNiwKLSAgICBrUHJpbWFyeUlkU21wdGUyNDBNID0gNywKLSAgICBrUHJpbWFyeUlkRmlsbSA9IDgsCi0gICAga1ByaW1hcnlJZEJ0MjAyMCA9IDksCi0gICAga1ByaW1hcnlJZFNtcHRlU3Q0MjgxID0gMTAsCi0gICAga1ByaW1hcnlJZFNtcHRlU3Q0MzEyID0gMTEsCi0gICAga1ByaW1hcnlJZFNtcHRlU3Q0MzIxID0gMTIsCi0KLSAgICBrUHJpbWFyeUlkTGFzdFN0YW5kYXJkVmFsdWUgPSBrUHJpbWFyeUlkU21wdGVTdDQzMjEsCi0KLSAgICAvLyBDaHJvbWUtc3BlY2lmaWMgdmFsdWVzIHN0YXJ0IGF0IDEwMDAuCi0gICAga1ByaW1hcnlJZFVua25vd24gPSAxMDAwLAotICAgIGtQcmltYXJ5SWRYeXpENTAsCi0gICAga1ByaW1hcnlJZEN1c3RvbSwKLSAgICBrUHJpbWFyeUlkTGFzdCA9IGtQcmltYXJ5SWRDdXN0b20KLSAgfTsKLQotICBlbnVtIFRyYW5zZmVySUQgewotICAgIC8vIFRoZSBmaXJzdCAwLTI1NSB2YWx1ZXMgc2hvdWxkIG1hdGNoIHRoZSBIMjY0IHNwZWNpZmljYXRpb24gKHNlZSBUYWJsZSBFLTQKLSAgICAvLyBUcmFuc2ZlciBDaGFyYWN0ZXJpc3RpY3MgaW4gaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjQvZW4pLgotICAgIGtUcmFuc2ZlcklkUmVzZXJ2ZWQwID0gMCwKLSAgICBrVHJhbnNmZXJJZEJ0NzA5ID0gMSwKLSAgICBrVHJhbnNmZXJJZFVuc3BlY2lmaWVkID0gMiwKLSAgICBrVHJhbnNmZXJJZFJlc2VydmVkID0gMywKLSAgICBrVHJhbnNmZXJJZEdhbW1hMjIgPSA0LAotICAgIGtUcmFuc2ZlcklkR2FtbWEyOCA9IDUsCi0gICAga1RyYW5zZmVySWRTbXB0ZTE3ME0gPSA2LAotICAgIGtUcmFuc2ZlcklkU21wdGUyNDBNID0gNywKLSAgICBrVHJhbnNmZXJJZExpbmVhciA9IDgsCi0gICAga1RyYW5zZmVySWRMb2cgPSA5LAotICAgIGtUcmFuc2ZlcklkTG9nU3FydCA9IDEwLAotICAgIGtUcmFuc2ZlcklkSWVjNjE5NjYyNCA9IDExLAotICAgIGtUcmFuc2ZlcklkQnQxMzYxRWNnID0gMTIsCi0gICAga1RyYW5zZmVySWRJZWM2MTk2NjIxID0gMTMsCi0gICAga1RyYW5zZmVySWQxMEJpdEJ0MjAyMCA9IDE0LAotICAgIGtUcmFuc2ZlcklkMTJCaXRCdDIwMjAgPSAxNSwKLSAgICBrVHJhbnNmZXJJZFNtcHRlU3QyMDg0ID0gMTYsCi0gICAga1RyYW5zZmVySWRTbXB0ZVN0NDI4MSA9IDE3LAotICAgIGtUcmFuc2ZlcklkQXJpYlN0ZEI2NyA9IDE4LCAgLy8gQUtBIGh5YnJpZC1sb2cgZ2FtbWEsIEhMRy4KLQotICAgIGtUcmFuc2ZlcklkTGFzdFN0YW5kYXJkVmFsdWUgPSBrVHJhbnNmZXJJZFNtcHRlU3Q0MjgxLAotCi0gICAgLy8gQ2hyb21lLXNwZWNpZmljIHZhbHVlcyBzdGFydCBhdCAxMDAwLgotICAgIGtUcmFuc2ZlcklkVW5rbm93biA9IDEwMDAsCi0gICAga1RyYW5zZmVySWRHYW1tYTI0LAotCi0gICAgLy8gVGhpcyBpcyBhbiBhZC1ob2MgdHJhbnNmZXIgZnVuY3Rpb24gdGhhdCBkZWNvZGVzIFNNUFRFIDIwODQgY29udGVudAotICAgIC8vIGludG8gYSAwLTEgcmFuZ2UgbW9yZSBvciBsZXNzIHN1aXRhYmxlIGZvciB2aWV3aW5nIG9uIGEgbm9uLWhkcgotICAgIC8vIGRpc3BsYXkuCi0gICAga1RyYW5zZmVySWRTbXB0ZVN0MjA4NE5vbkhkciwKLQotICAgIC8vIFRPRE8oaHViYmUpOiBOZWVkIHRvIHN0b3JlIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uKHMpLgotICAgIGtUcmFuc2ZlcklkQ3VzdG9tLAotICAgIGtUcmFuc2ZlcklkTGFzdCA9IGtUcmFuc2ZlcklkQ3VzdG9tLAotICB9OwotCi0gIGVudW0gTWF0cml4SUQgewotICAgIC8vIFRoZSBmaXJzdCAwLTI1NSB2YWx1ZXMgc2hvdWxkIG1hdGNoIHRoZSBIMjY0IHNwZWNpZmljYXRpb24gKHNlZSBUYWJsZSBFLTUKLSAgICAvLyBNYXRyaXggQ29lZmZpY2llbnRzIGluIGh0dHBzOi8vd3d3Lml0dS5pbnQvcmVjL1QtUkVDLUguMjY0L2VuKS4KLSAgICBrTWF0cml4SWRSZ2IgPSAwLAotICAgIGtNYXRyaXhJZEJ0NzA5ID0gMSwKLSAgICBrTWF0cml4SWRVbnNwZWNpZmllZCA9IDIsCi0gICAga01hdHJpeElkUmVzZXJ2ZWQgPSAzLAotICAgIGtNYXRyaXhJZEZjYyA9IDQsCi0gICAga01hdHJpeElkQnQ0NzBCZyA9IDUsCi0gICAga01hdHJpeElkU21wdGUxNzBNID0gNiwKLSAgICBrTWF0cml4SWRTbXB0ZTI0ME0gPSA3LAotICAgIGtNYXRyaXhJZFlDZ0NvID0gOCwKLSAgICBrTWF0cml4SWRCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSA9IDksCi0gICAga01hdHJpeElkQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UgPSAxMCwKLSAgICBrTWF0cml4SWRZRHpEeCA9IDExLAotCi0gICAga01hdHJpeElkTGFzdFN0YW5kYXJkVmFsdWUgPSBrTWF0cml4SWRZRHpEeCwKLQotICAgIC8vIENocm9tZS1zcGVjaWZpYyB2YWx1ZXMgc3RhcnQgYXQgMTAwMAotICAgIGtNYXRyaXhJZFVua25vd24gPSAxMDAwLAotICAgIGtNYXRyaXhJZExhc3QgPSBrTWF0cml4SWRVbmtub3duLAotICB9OwotCi0gIC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIFdlYk0gUmFuZ2UgZW51bSB3aGljaCBpcyBwYXJ0IG9mIFdlYk0gY29sb3IgZGF0YQotICAvLyAoc2VlIGh0dHA6Ly93d3cud2VibXByb2plY3Qub3JnL2RvY3MvY29udGFpbmVyLyNSYW5nZSkuCi0gIC8vIEguMjY0IG9ubHkgdXNlcyBhIGJvb2wsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBMSU1JVEVEL0ZVTEwgdmFsdWVzLgotICAvLyBDaHJvbWUtc3BlY2lmaWMgdmFsdWVzIHN0YXJ0IGF0IDEwMDAuCi0gIGVudW0gUmFuZ2VJRCB7Ci0gICAgLy8gUmFuZ2UgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIC8gdW5rbm93bi4KLSAgICBrUmFuZ2VJZFVuc3BlY2lmaWVkID0gMCwKLQotICAgIC8vIExpbWl0ZWQgUmVjLiA3MDkgY29sb3IgcmFuZ2Ugd2l0aCBSR0IgdmFsdWVzIHJhbmdpbmcgZnJvbSAxNiB0byAyMzUuCi0gICAga1JhbmdlSWRMaW1pdGVkID0gMSwKLQotICAgIC8vIEZ1bGwgUkdCIGNvbG9yIHJhbmdlIHdpdGggUkdCIHZhbHVlcyBmcm9tIDAgdG8gMjU1LgotICAgIGtSYW5nZUlkRnVsbCA9IDIsCi0KLSAgICAvLyBSYW5nZSBpcyBkZWZpbmVkIGJ5IFRyYW5zZmVySUQvTWF0cml4SUQuCi0gICAga1JhbmdlSWREZXJpdmVkID0gMywKLQotICAgIGtSYW5nZUlkTGFzdCA9IGtSYW5nZUlkRGVyaXZlZAotICB9OwotCi0gIENvbG9yU3BhY2UoKTsKLSAgQ29sb3JTcGFjZShQcmltYXJ5SUQgcHJpbWFyaWVzLCBUcmFuc2ZlcklEIHRyYW5zZmVyLCBNYXRyaXhJRCBtYXRyaXgsCi0gICAgICAgICAgICAgUmFuZ2VJRCBmdWxsX3JhbmdlKTsKLSAgQ29sb3JTcGFjZShjb25zdCBDb2xvclNwYWNlJiBvdGhlcik7Ci0gIENvbG9yU3BhY2UoaW50IHByaW1hcmllcywgaW50IHRyYW5zZmVyLCBpbnQgbWF0cml4LCBSYW5nZUlEIGZ1bGxfcmFuZ2UpOwotICB+Q29sb3JTcGFjZSgpOwotCi0gIHN0YXRpYyBQcmltYXJ5SUQgUHJpbWFyeUlERnJvbUludChpbnQgcHJpbWFyeV9pZCk7Ci0gIHN0YXRpYyBUcmFuc2ZlcklEIFRyYW5zZmVySURGcm9tSW50KGludCB0cmFuc2Zlcl9pZCk7Ci0gIHN0YXRpYyBNYXRyaXhJRCBNYXRyaXhJREZyb21JbnQoaW50IG1hdHJpeF9pZCk7Ci0KLSAgc3RhdGljIENvbG9yU3BhY2UgQ3JlYXRlWFlaRDUwKCk7Ci0KLSAgLy8gVE9ETzogUmVtb3ZlIHRoZXNlLCBhbmQgcmVwbGFjZSB3aXRoIG1vcmUgZ2VuZXJpYyBjb25zdHJ1Y3RvcnMuCi0gIHN0YXRpYyBDb2xvclNwYWNlIENyZWF0ZUpwZWcoKTsKLSAgc3RhdGljIENvbG9yU3BhY2UgQ3JlYXRlUkVDNjAxKCk7Ci0gIHN0YXRpYyBDb2xvclNwYWNlIENyZWF0ZVJFQzcwOSgpOwotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3Q7Ci0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3Q7Ci0gIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbG9yU3BhY2UmIG90aGVyKSBjb25zdDsKLQotICBQcmltYXJ5SUQgcHJpbWFyaWVzKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyaWVzXzsgfQotICBUcmFuc2ZlcklEIHRyYW5zZmVyKCkgY29uc3QgeyByZXR1cm4gdHJhbnNmZXJfOyB9Ci0gIE1hdHJpeElEIG1hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeF87IH0KLSAgUmFuZ2VJRCByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHJhbmdlXzsgfQotCi0gIGNvbnN0IEN1c3RvbVByaW1hcnlNYXRyaXgmIGN1c3RvbV9wcmltYXJ5X21hdHJpeCgpIGNvbnN0IHsKLSAgICBEQ0hFQ0tfRVEocHJpbWFyaWVzXywga1ByaW1hcnlJZEN1c3RvbSk7Ci0gICAgcmV0dXJuIGN1c3RvbV9wcmltYXJ5X21hdHJpeF87Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFByaW1hcnlJRCBwcmltYXJpZXNfOwotICBUcmFuc2ZlcklEIHRyYW5zZmVyXzsKLSAgTWF0cml4SUQgbWF0cml4XzsKLSAgUmFuZ2VJRCByYW5nZV87Ci0KLSAgLy8gT25seSB1c2VkIGlmIHByaW1hcmllc18gPT0ga1ByaW1hcnlJZEN1c3RvbQotICBmbG9hdCBjdXN0b21fcHJpbWFyeV9tYXRyaXhfWzEyXTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBnZngKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9DT0xPUl9TUEFDRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmEzMzRiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE2MDUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lcy5oIgotCi0jaW5jbHVkZSA8Y2N0eXBlPgotI2luY2x1ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgY29udGFpbmVyX25hbWVzIHsKLQotI2RlZmluZSBUQUcoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1aW50OF90PihhKSkgPDwgMjQpIHwgXAotICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1aW50OF90PihiKSkgPDwgMTYpIHwgXAotICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1aW50OF90PihjKSkgPDwgOCkgfCAgXAotICAgKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1aW50OF90PihkKSkpKQotCi0jZGVmaW5lIFJDSEVDSyh4KSAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoISh4KSkgcmV0dXJuIGZhbHNlOyBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVVRGOF9CWVRFX09SREVSX01BUksgIlx4ZWZceGJiXHhiZiIKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgMiBieXRlcyAoMTYgYml0cywgYmlnIGVuZGlhbikgZnJvbSBhIGJ1ZmZlci4KLXN0YXRpYyBpbnQgUmVhZDE2KGNvbnN0IHVpbnQ4X3QqIHApIHsgcmV0dXJuIHBbMF0gPDwgOCB8IHBbMV07IH0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgMyBieXRlcyAoMjQgYml0cywgYmlnIGVuZGlhbikgZnJvbSBhIGJ1ZmZlci4KLXN0YXRpYyB1aW50MzJfdCBSZWFkMjQoY29uc3QgdWludDhfdCogcCkgewotICByZXR1cm4gcFswXSA8PCAxNiB8IHBbMV0gPDwgOCB8IHBbMl07Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byByZWFkIDQgYnl0ZXMgKDMyIGJpdHMsIGJpZyBlbmRpYW4pIGZyb20gYSBidWZmZXIuCi1zdGF0aWMgdWludDMyX3QgUmVhZDMyKGNvbnN0IHVpbnQ4X3QqIHApIHsKLSAgcmV0dXJuIHBbMF0gPDwgMjQgfCBwWzFdIDw8IDE2IHwgcFsyXSA8PCA4IHwgcFszXTsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgNCBieXRlcyAoMzIgYml0cywgbGl0dGxlIGVuZGlhbikgZnJvbSBhIGJ1ZmZlci4KLXN0YXRpYyB1aW50MzJfdCBSZWFkMzJMRShjb25zdCB1aW50OF90KiBwKSB7Ci0gIHJldHVybiBwWzNdIDw8IDI0IHwgcFsyXSA8PCAxNiB8IHBbMV0gPDwgOCB8IHBbMF07Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byBkbyBidWZmZXIgY29tcGFyaXNvbnMgd2l0aCBhIHN0cmluZyB3aXRob3V0IGdvaW5nIG9mZiB0aGUKLS8vIGVuZCBvZiB0aGUgYnVmZmVyLgotc3RhdGljIGJvb2wgU3RhcnRzV2l0aChjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZml4KSB7Ci0gIHNpemVfdCBwcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpOwotICByZXR1cm4gKHByZWZpeF9zaXplIDw9IGJ1ZmZlcl9zaXplICYmCi0gICAgICAgICAgbWVtY21wKGJ1ZmZlciwgcHJlZml4LCBwcmVmaXhfc2l6ZSkgPT0gMCk7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byBkbyBidWZmZXIgY29tcGFyaXNvbnMgd2l0aCBhbm90aGVyIGJ1ZmZlciAodG8gYWxsb3cgZm9yCi0vLyBlbWJlZGRlZCBcMCBpbiB0aGUgY29tcGFyaXNvbikgd2l0aG91dCBnb2luZyBvZmYgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotc3RhdGljIGJvb2wgU3RhcnRzV2l0aChjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcHJlZml4LCBzaXplX3QgcHJlZml4X3NpemUpIHsKLSAgcmV0dXJuIChwcmVmaXhfc2l6ZSA8PSBidWZmZXJfc2l6ZSAmJgotICAgICAgICAgIG1lbWNtcChidWZmZXIsIHByZWZpeCwgcHJlZml4X3NpemUpID09IDApOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCB1cCB0byA2NCBiaXRzIGZyb20gYSBiaXQgc3RyZWFtLgotc3RhdGljIHVpbnQ2NF90IFJlYWRCaXRzKEJpdFJlYWRlciogcmVhZGVyLCBpbnQgbnVtX2JpdHMpIHsKLSAgRENIRUNLX0dFKHJlYWRlci0+Yml0c19hdmFpbGFibGUoKSwgbnVtX2JpdHMpOwotICBEQ0hFQ0soKG51bV9iaXRzID4gMCkgJiYgKG51bV9iaXRzIDw9IDY0KSk7Ci0gIHVpbnQ2NF90IHZhbHVlOwotICByZWFkZXItPlJlYWRCaXRzKG51bV9iaXRzLCAmdmFsdWUpOwotICByZXR1cm4gdmFsdWU7Ci19Ci0KLWNvbnN0IGludCBrQWMzRnJhbWVTaXplVGFibGVbMzhdWzNdID0gewotICAgIHsxMjgsIDEzOCwgMTkyfSwgICAgezEyOCwgMTQwLCAxOTJ9LCAgICB7MTYwLCAxNzQsIDI0MH0sCi0gICAgezE2MCwgMTc2LCAyNDB9LCAgICB7MTkyLCAyMDgsIDI4OH0sICAgIHsxOTIsIDIxMCwgMjg4fSwKLSAgICB7MjI0LCAyNDIsIDMzNn0sICAgIHsyMjQsIDI0NCwgMzM2fSwgICAgezI1NiwgMjc4LCAzODR9LAotICAgIHsyNTYsIDI4MCwgMzg0fSwgICAgezMyMCwgMzQ4LCA0ODB9LCAgICB7MzIwLCAzNTAsIDQ4MH0sCi0gICAgezM4NCwgNDE2LCA1NzZ9LCAgICB7Mzg0LCA0MTgsIDU3Nn0sICAgIHs0NDgsIDQ4NiwgNjcyfSwKLSAgICB7NDQ4LCA0ODgsIDY3Mn0sICAgIHs1MTIsIDU1NiwgNzY4fSwgICAgezUxMiwgNTU4LCA3Njh9LAotICAgIHs2NDAsIDY5NiwgOTYwfSwgICAgezY0MCwgNjk4LCA5NjB9LCAgICB7NzY4LCA4MzQsIDExNTJ9LAotICAgIHs3NjgsIDgzNiwgMTE1Mn0sICAgezg5NiwgOTc0LCAxMzQ0fSwgICB7ODk2LCA5NzYsIDEzNDR9LAotICAgIHsxMDI0LCAxMTE0LCAxNTM2fSwgezEwMjQsIDExMTYsIDE1MzZ9LCB7MTI4MCwgMTM5MiwgMTkyMH0sCi0gICAgezEyODAsIDEzOTQsIDE5MjB9LCB7MTUzNiwgMTY3MCwgMjMwNH0sIHsxNTM2LCAxNjcyLCAyMzA0fSwKLSAgICB7MTc5MiwgMTk1MCwgMjY4OH0sIHsxNzkyLCAxOTUyLCAyNjg4fSwgezIwNDgsIDIyMjgsIDMwNzJ9LAotICAgIHsyMDQ4LCAyMjMwLCAzMDcyfSwgezIzMDQsIDI1MDYsIDM0NTZ9LCB7MjMwNCwgMjUwOCwgMzQ1Nn0sCi0gICAgezI1NjAsIDI3NjgsIDM4NDB9LCB7MjU2MCwgMjc3MCwgMzg0MH19OwotCi0vLyBDaGVja3MgZm9yIGFuIEFEVFMgQUFDIGNvbnRhaW5lci4KLXN0YXRpYyBib29sIENoZWNrQWFjKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIEF1ZGlvIERhdGEgVHJhbnNwb3J0IFN0cmVhbSAoQURUUykgaGVhZGVyIGlzIDcgb3IgOSBieXRlcwotICAvLyAoZnJvbSBodHRwOi8vd2lraS5tdWx0aW1lZGlhLmN4L2luZGV4LnBocD90aXRsZT1BRFRTKQotICBSQ0hFQ0soYnVmZmVyX3NpemUgPiA2KTsKLQotICBpbnQgb2Zmc2V0ID0gMDsKLSAgd2hpbGUgKG9mZnNldCArIDYgPCBidWZmZXJfc2l6ZSkgewotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCA2KTsKLQotICAgIC8vIFN5bmN3b3JkIG11c3QgYmUgMHhmZmYuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDEyKSA9PSAweGZmZik7Ci0KLSAgICAvLyBTa2lwIE1QRUcgdmVyc2lvbi4KLSAgICByZWFkZXIuU2tpcEJpdHMoMSk7Ci0KLSAgICAvLyBMYXllciBpcyBhbHdheXMgMC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMikgPT0gMCk7Ci0KLSAgICAvLyBTa2lwIHByb3RlY3Rpb24gKyBwcm9maWxlLgotICAgIHJlYWRlci5Ta2lwQml0cygxICsgMik7Ci0KLSAgICAvLyBDaGVjayBzYW1wbGluZyBmcmVxdWVuY3kgaW5kZXguCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDQpICE9IDE1KTsgIC8vIEZvcmJpZGRlbi4KLQotICAgIC8vIFNraXAgcHJpdmF0ZSBzdHJlYW0sIGNoYW5uZWwgY29uZmlndXJhdGlvbiwgb3JpZ2luYWxpdHksIGhvbWUsCi0gICAgLy8gY29weXJpZ2h0ZWQgc3RyZWFtLCBhbmQgY29weXJpZ2h0X3N0YXJ0LgotICAgIHJlYWRlci5Ta2lwQml0cygxICsgMyArIDEgKyAxICsgMSArIDEpOwotCi0gICAgLy8gR2V0IGZyYW1lIGxlbmd0aCAoaW5jbHVkZXMgaGVhZGVyKS4KLSAgICBpbnQgc2l6ZSA9IFJlYWRCaXRzKCZyZWFkZXIsIDEzKTsKLSAgICBSQ0hFQ0soc2l6ZSA+IDApOwotICAgIG9mZnNldCArPSBzaXplOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCB1aW50MTZfdCBrQWMzU3luY1dvcmQgPSAweDBiNzc7Ci0KLS8vIENoZWNrcyBmb3IgYW4gQUMzIGNvbnRhaW5lci4KLXN0YXRpYyBib29sIENoZWNrQWMzKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIFJlZmVyZW5jZTogQVRTQyBTdGFuZGFyZDogRGlnaXRhbCBBdWRpbyBDb21wcmVzc2lvbiAoQUMtMywgRS1BQy0zKQotICAvLyAgICAgICAgICAgIERvYy4gQS81MjoyMDEyCi0gIC8vIChodHRwOi8vd3d3LmF0c2Mub3JnL2Ntcy9zdGFuZGFyZHMvQTUyLTIwMTIoMTItMTcpLnBkZikKLQotICAvLyBBQzMgY29udGFpbmVyIGxvb2tzIGxpa2Ugc3luY2luZm8gfCBic2kgfCBhdWRibGsgKiA2IHwgYXV4IHwgY2hlY2suCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDYpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICB3aGlsZSAob2Zmc2V0ICsgNiA8IGJ1ZmZlcl9zaXplKSB7Ci0gICAgQml0UmVhZGVyIHJlYWRlcihidWZmZXIgKyBvZmZzZXQsIDYpOwotCi0gICAgLy8gQ2hlY2sgc3luY2luZm8uCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDE2KSA9PSBrQWMzU3luY1dvcmQpOwotCi0gICAgLy8gU2tpcCBjcmMxLgotICAgIHJlYWRlci5Ta2lwQml0cygxNik7Ci0KLSAgICAvLyBWZXJpZnkgZnNjb2QuCi0gICAgaW50IHNhbXBsZV9yYXRlX2NvZGUgPSBSZWFkQml0cygmcmVhZGVyLCAyKTsKLSAgICBSQ0hFQ0soc2FtcGxlX3JhdGVfY29kZSAhPSAzKTsgIC8vIFJlc2VydmVkLgotCi0gICAgLy8gVmVyaWZ5IGZybXNpemVjb2QuCi0gICAgaW50IGZyYW1lX3NpemVfY29kZSA9IFJlYWRCaXRzKCZyZWFkZXIsIDYpOwotICAgIFJDSEVDSyhmcmFtZV9zaXplX2NvZGUgPCAzOCk7ICAvLyBVbmRlZmluZWQuCi0KLSAgICAvLyBWZXJpZnkgYnNpZC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgNSkgPCAxMCk7ICAvLyBOb3JtYWxseSA4IG9yIDYsIDE2IHVzZWQgYnkgRUFDMy4KLQotICAgIG9mZnNldCArPSBrQWMzRnJhbWVTaXplVGFibGVbZnJhbWVfc2l6ZV9jb2RlXVtzYW1wbGVfcmF0ZV9jb2RlXTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ2hlY2tzIGZvciBhbiBFQUMzIGNvbnRhaW5lciAodmVyeSBzaW1pbGFyIHRvIEFDMykKLXN0YXRpYyBib29sIENoZWNrRWFjMyhjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IEFUU0MgU3RhbmRhcmQ6IERpZ2l0YWwgQXVkaW8gQ29tcHJlc3Npb24gKEFDLTMsIEUtQUMtMykKLSAgLy8gICAgICAgICAgICBEb2MuIEEvNTI6MjAxMgotICAvLyAoaHR0cDovL3d3dy5hdHNjLm9yZy9jbXMvc3RhbmRhcmRzL0E1Mi0yMDEyKDEyLTE3KS5wZGYpCi0KLSAgLy8gRUFDMyBjb250YWluZXIgbG9va3MgbGlrZSBzeW5jaW5mbyB8IGJzaSB8IGF1ZGZybSB8IGF1ZGJsayogfCBhdXggfCBjaGVjay4KLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID4gNik7Ci0KLSAgaW50IG9mZnNldCA9IDA7Ci0gIHdoaWxlIChvZmZzZXQgKyA2IDwgYnVmZmVyX3NpemUpIHsKLSAgICBCaXRSZWFkZXIgcmVhZGVyKGJ1ZmZlciArIG9mZnNldCwgNik7Ci0KLSAgICAvLyBDaGVjayBzeW5jaW5mby4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMTYpID09IGtBYzNTeW5jV29yZCk7Ci0KLSAgICAvLyBWZXJpZnkgc3RybXR5cC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMikgIT0gMyk7Ci0KLSAgICAvLyBTa2lwIHN1YnN0cmVhbWlkLgotICAgIHJlYWRlci5Ta2lwQml0cygzKTsKLQotICAgIC8vIEdldCBmcm1zaXplLiBJbmNsdWRlIHN5bmNpbmZvIHNpemUgYW5kIGNvbnZlcnQgdG8gYnl0ZXMuCi0gICAgaW50IGZyYW1lX3NpemUgPSAoUmVhZEJpdHMoJnJlYWRlciwgMTEpICsgMSkgKiAyOwotICAgIFJDSEVDSyhmcmFtZV9zaXplID49IDcpOwotCi0gICAgLy8gU2tpcCBmc2NvZCwgZnNjb2QyLCBhY21vZCwgYW5kIGxmZW9uLgotICAgIHJlYWRlci5Ta2lwQml0cygyICsgMiArIDMgKyAxKTsKLQotICAgIC8vIFZlcmlmeSBic2lkLgotICAgIGludCBiaXRfc3RyZWFtX2lkID0gUmVhZEJpdHMoJnJlYWRlciwgNSk7Ci0gICAgUkNIRUNLKGJpdF9zdHJlYW1faWQgPj0gMTEgJiYgYml0X3N0cmVhbV9pZCA8PSAxNik7Ci0KLSAgICBvZmZzZXQgKz0gZnJhbWVfc2l6ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWRkaXRpb25hbCBjaGVja3MgZm9yIGEgQklOSyBjb250YWluZXIuCi1zdGF0aWMgYm9vbCBDaGVja0JpbmsoY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gUmVmZXJlbmNlOiBodHRwOi8vd2lraS5tdWx0aW1lZGlhLmN4L2luZGV4LnBocD90aXRsZT1CaW5rX0NvbnRhaW5lcgotICBSQ0hFQ0soYnVmZmVyX3NpemUgPj0gNDQpOwotCi0gIC8vIFZlcmlmeSBudW1iZXIgb2YgZnJhbWVzIHNwZWNpZmllZC4KLSAgUkNIRUNLKFJlYWQzMkxFKGJ1ZmZlciArIDgpID4gMCk7Ci0KLSAgLy8gVmVyaWZ5IHdpZHRoIGluIHJhbmdlLgotICBpbnQgd2lkdGggPSBSZWFkMzJMRShidWZmZXIgKyAyMCk7Ci0gIFJDSEVDSyh3aWR0aCA+IDAgJiYgd2lkdGggPD0gMzI3NjcpOwotCi0gIC8vIFZlcmlmeSBoZWlnaHQgaW4gcmFuZ2UuCi0gIGludCBoZWlnaHQgPSBSZWFkMzJMRShidWZmZXIgKyAyNCk7Ci0gIFJDSEVDSyhoZWlnaHQgPiAwICYmIGhlaWdodCA8PSAzMjc2Nyk7Ci0KLSAgLy8gVmVyaWZ5IGZyYW1lcyBwZXIgc2Vjb25kIHNwZWNpZmllZC4KLSAgUkNIRUNLKFJlYWQzMkxFKGJ1ZmZlciArIDI4KSA+IDApOwotCi0gIC8vIFZlcmlmeSB2aWRlbyBmcmFtZXMgcGVyIHNlY29uZCBzcGVjaWZpZWQuCi0gIFJDSEVDSyhSZWFkMzJMRShidWZmZXIgKyAzMikgPiAwKTsKLQotICAvLyBOdW1iZXIgb2YgYXVkaW8gdHJhY2tzIG11c3QgYmUgMjU2IG9yIGxlc3MuCi0gIHJldHVybiAoUmVhZDMyTEUoYnVmZmVyICsgNDApIDw9IDI1Nik7Ci19Ci0KLS8vIEFkZGl0aW9uYWwgY2hlY2tzIGZvciBhIENBRiBjb250YWluZXIuCi1zdGF0aWMgYm9vbCBDaGVja0NhZihjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IEFwcGxlIENvcmUgQXVkaW8gRm9ybWF0IFNwZWNpZmljYXRpb24gMS4wCi0gIC8vIChodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvI2RvY3VtZW50YXRpb24vTXVzaWNBdWRpby9SZWZlcmVuY2UvQ0FGU3BlYy9DQUZfc3BlYy9DQUZfc3BlYy5odG1sKQotICBSQ0hFQ0soYnVmZmVyX3NpemUgPj0gNTIpOwotICBCaXRSZWFkZXIgcmVhZGVyKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwotCi0gIC8vIG1GaWxlVHlwZSBzaG91bGQgYmUgImNhZmYiLgotICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMzIpID09IFRBRygnYycsICdhJywgJ2YnLCAnZicpKTsKLQotICAvLyBtRmlsZVZlcnNpb24gc2hvdWxkIGJlIDEuCi0gIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxNikgPT0gMSk7Ci0KLSAgLy8gU2tpcCBtRmlsZUZsYWdzLgotICByZWFkZXIuU2tpcEJpdHMoMTYpOwotCi0gIC8vIEZpcnN0IGNodW5rIHNob3VsZCBiZSBBdWRpbyBEZXNjcmlwdGlvbiBjaHVuaywgc2l6ZSAzMmwuCi0gIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAzMikgPT0gVEFHKCdkJywgJ2UnLCAncycsICdjJykpOwotICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgNjQpID09IDMyKTsKLQotICAvLyBDQUZBdWRpb0Zvcm1hdC5tU2FtcGxlUmF0ZShmbG9hdDY0KSBub3QgMAotICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgNjQpICE9IDApOwotCi0gIC8vIENBRkF1ZGlvRm9ybWF0Lm1Gb3JtYXRJRCBub3QgMAotICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMzIpICE9IDApOwotCi0gIC8vIFNraXAgQ0FGQXVkaW9Gb3JtYXQubUJ5dGVzUGVyUGFja2V0IGFuZCBtRnJhbWVzUGVyUGFja2V0LgotICByZWFkZXIuU2tpcEJpdHMoMzIgKyAzMik7Ci0KLSAgLy8gQ0FGQXVkaW9Gb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgbm90IDAKLSAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDMyKSAhPSAwKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGtTYW1wbGluZ0ZyZXF1ZW5jeVZhbGlkWzE2XSA9IHsKLSAgICBmYWxzZSwgdHJ1ZSwgIHRydWUsICB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsICB0cnVlLAotICAgIHRydWUsICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsICB0cnVlLCAgZmFsc2UsIGZhbHNlfTsKLXN0YXRpYyBib29sIGtFeHRBdWRpb0lkVmFsaWRbOF0gPSB7dHJ1ZSwgIGZhbHNlLCB0cnVlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZX07Ci0KLS8vIEFkZGl0aW9uYWwgY2hlY2tzIGZvciBhIERUUyBjb250YWluZXIuCi1zdGF0aWMgYm9vbCBDaGVja0R0cyhjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IEVUU0kgVFMgMTAyIDExNCBWMS4zLjEgKDIwMTEtMDgpCi0gIC8vIChodHRwOi8vd3d3LmV0c2kub3JnL2RlbGl2ZXIvZXRzaV90cy8xMDIxMDBfMTAyMTk5LzEwMjExNC8wMS4wMy4wMV82MC90c18xMDIxMTR2MDEwMzAxcC5wZGYpCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDExKTsKLQotICBpbnQgb2Zmc2V0ID0gMDsKLSAgd2hpbGUgKG9mZnNldCArIDExIDwgYnVmZmVyX3NpemUpIHsKLSAgICBCaXRSZWFkZXIgcmVhZGVyKGJ1ZmZlciArIG9mZnNldCwgMTEpOwotCi0gICAgLy8gVmVyaWZ5IHN5bmMgd29yZC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMzIpID09IDB4N2ZmZTgwMDEpOwotCi0gICAgLy8gU2tpcCBmcmFtZSB0eXBlIGFuZCBkZWZpY2l0IHNhbXBsZSBjb3VudC4KLSAgICByZWFkZXIuU2tpcEJpdHMoMSArIDUpOwotCi0gICAgLy8gVmVyaWZ5IENSQyBwcmVzZW50IGZsYWcuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDEpID09IDApOyAgLy8gQ1BGIG11c3QgYmUgMC4KLQotICAgIC8vIFZlcmlmeSBudW1iZXIgb2YgUENNIHNhbXBsZSBibG9ja3MuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDcpID49IDUpOwotCi0gICAgLy8gVmVyaWZ5IHByaW1hcnkgZnJhbWUgYnl0ZSBzaXplLgotICAgIGludCBmcmFtZV9zaXplID0gUmVhZEJpdHMoJnJlYWRlciwgMTQpOwotICAgIFJDSEVDSyhmcmFtZV9zaXplID49IDk1KTsKLQotICAgIC8vIFNraXAgYXVkaW8gY2hhbm5lbCBhcnJhbmdlbWVudC4KLSAgICByZWFkZXIuU2tpcEJpdHMoNik7Ci0KLSAgICAvLyBWZXJpZnkgY29yZSBhdWRpbyBzYW1wbGluZyBmcmVxdWVuY3kgaXMgYW4gYWxsb3dlZCB2YWx1ZS4KLSAgICBSQ0hFQ0soa1NhbXBsaW5nRnJlcXVlbmN5VmFsaWRbUmVhZEJpdHMoJnJlYWRlciwgNCldKTsKLQotICAgIC8vIFZlcmlmeSB0cmFuc21pc3Npb24gYml0IHJhdGUgaXMgdmFsaWQuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDUpIDw9IDI1KTsKLQotICAgIC8vIFZlcmlmeSByZXNlcnZlZCBmaWVsZCBpcyAwLgotICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAwKTsKLQotICAgIC8vIFNraXAgZHluYW1pYyByYW5nZSBmbGFnLCB0aW1lIHN0YW1wIGZsYWcsIGF1eGlsaWFyeSBkYXRhIGZsYWcsIGFuZCBIRENELgotICAgIHJlYWRlci5Ta2lwQml0cygxICsgMSArIDEgKyAxKTsKLQotICAgIC8vIFZlcmlmeSBleHRlbnNpb24gYXVkaW8gZGVzY3JpcHRvciBmbGFnIGlzIGFuIGFsbG93ZWQgdmFsdWUuCi0gICAgUkNIRUNLKGtFeHRBdWRpb0lkVmFsaWRbUmVhZEJpdHMoJnJlYWRlciwgMyldKTsKLQotICAgIC8vIFNraXAgZXh0ZW5kZWQgY29kaW5nIGZsYWcgYW5kIGF1ZGlvIHN5bmMgd29yZCBpbnNlcnRpb24gZmxhZy4KLSAgICByZWFkZXIuU2tpcEJpdHMoMSArIDEpOwotCi0gICAgLy8gVmVyaWZ5IGxvdyBmcmVxdWVuY3kgZWZmZWN0cyBmbGFnIGlzIGFuIGFsbG93ZWQgdmFsdWUuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDIpICE9IDMpOwotCi0gICAgb2Zmc2V0ICs9IGZyYW1lX3NpemUgKyAxOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBDaGVja3MgZm9yIGEgRFYgY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tEVihjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IFNNUFRFIDMxNE0gKEFubmV4IEEgaGFzIGRpZmZlcmVuY2VzIHdpdGggSUVDIDYxODM0KS4KLSAgLy8gKGh0dHA6Ly9zdGFuZGFyZHMuc21wdGUub3JnL2NvbnRlbnQvOTc4LTEtNjE0ODItNDU0LTEvc3QtMzE0LTIwMDUvU0VDMS5ib2R5LnBkZikKLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID4gMTEpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgY3VycmVudF9zZXF1ZW5jZV9udW1iZXIgPSAtMTsKLSAgaW50IGxhc3RfYmxvY2tfbnVtYmVyWzZdID0gezB9OwotICB3aGlsZSAob2Zmc2V0ICsgMTEgPCBidWZmZXJfc2l6ZSkgewotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCAxMSk7Ci0KLSAgICAvLyBEZWNvZGUgSUQgZGF0YS4gU2VjdGlvbnMgNSwgNiwgYW5kIDcgYXJlIHJlc2VydmVkLgotICAgIGludCBzZWN0aW9uID0gUmVhZEJpdHMoJnJlYWRlciwgMyk7Ci0gICAgUkNIRUNLKHNlY3Rpb24gPCA1KTsKLQotICAgIC8vIE5leHQgYml0IG11c3QgYmUgMS4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMSkgPT0gMSk7Ci0KLSAgICAvLyBTa2lwIGFyYml0cmFyeSBiaXRzLgotICAgIHJlYWRlci5Ta2lwQml0cyg0KTsKLQotICAgIGludCBzZXF1ZW5jZV9udW1iZXIgPSBSZWFkQml0cygmcmVhZGVyLCA0KTsKLQotICAgIC8vIFNraXAgRlNDLgotICAgIHJlYWRlci5Ta2lwQml0cygxKTsKLQotICAgIC8vIE5leHQgMyBiaXRzIG11c3QgYmUgMS4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMykgPT0gNyk7Ci0KLSAgICBpbnQgYmxvY2tfbnVtYmVyID0gUmVhZEJpdHMoJnJlYWRlciwgOCk7Ci0KLSAgICBpZiAoc2VjdGlvbiA9PSAwKSB7ICAvLyBIZWFkZXIuCi0gICAgICAvLyBWYWxpZGF0ZSB0aGUgcmVzZXJ2ZWQgYml0cyBpbiB0aGUgbmV4dCA4IGJ5dGVzLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDEpOwotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDEpID09IDApOwotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDExKSA9PSAweDdmZik7Ci0gICAgICByZWFkZXIuU2tpcEJpdHMoNCk7Ci0gICAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgNCkgPT0gMHhmKTsKLSAgICAgIHJlYWRlci5Ta2lwQml0cyg0KTsKLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCA0KSA9PSAweGYpOwotICAgICAgcmVhZGVyLlNraXBCaXRzKDQpOwotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDQpID09IDB4Zik7Ci0gICAgICByZWFkZXIuU2tpcEJpdHMoMyk7Ci0gICAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMjQpID09IDB4ZmZmZmZmKTsKLSAgICAgIGN1cnJlbnRfc2VxdWVuY2VfbnVtYmVyID0gc2VxdWVuY2VfbnVtYmVyOwotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUobGFzdF9ibG9ja19udW1iZXIpOyArK2kpCi0gICAgICAgIGxhc3RfYmxvY2tfbnVtYmVyW2ldID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFNlcXVlbmNlIG51bWJlciBtdXN0IG1hdGNoICh0aGlzIHdpbGwgYWxzbyBmYWlsIGlmIG5vIGhlYWRlciBzZWVuKS4KLSAgICAgIFJDSEVDSyhzZXF1ZW5jZV9udW1iZXIgPT0gY3VycmVudF9zZXF1ZW5jZV9udW1iZXIpOwotICAgICAgLy8gQmxvY2sgbnVtYmVyIHNob3VsZCBiZSBpbmNyZWFzaW5nLgotICAgICAgUkNIRUNLKGJsb2NrX251bWJlciA+IGxhc3RfYmxvY2tfbnVtYmVyW3NlY3Rpb25dKTsKLSAgICAgIGxhc3RfYmxvY2tfbnVtYmVyW3NlY3Rpb25dID0gYmxvY2tfbnVtYmVyOwotICAgIH0KLQotICAgIC8vIE1vdmUgdG8gbmV4dCBibG9jay4KLSAgICBvZmZzZXQgKz0gODA7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIENoZWNrcyBmb3IgYSBHU00gY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tHc20oY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gUmVmZXJlbmNlOiBFVFNJIEVOIDMwMCA5NjEgVjguMS4xCi0gIC8vIChodHRwOi8vd3d3LmV0c2kub3JnL2RlbGl2ZXIvZXRzaV9lbi8zMDA5MDBfMzAwOTk5LzMwMDk2MS8wOC4wMS4wMV82MC9lbl8zMDA5NjF2MDgwMTAxcC5wZGYpCi0gIC8vIGFsc28gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzU1MSNwYWdlLTI0Ci0gIC8vIEdTTSBmaWxlcyBoYXZlIGEgMzMgYnl0ZSBibG9jaywgb25seSBmaXJzdCA0IGJpdHMgYXJlIGZpeGVkLgotICBSQ0hFQ0soYnVmZmVyX3NpemUgPj0gMTAyNCk7ICAvLyBOZWVkIGVub3VnaCBkYXRhIHRvIGRvIGEgZGVjZW50IGNoZWNrLgotCi0gIGludCBvZmZzZXQgPSAwOwotICB3aGlsZSAob2Zmc2V0IDwgYnVmZmVyX3NpemUpIHsKLSAgICAvLyBGaXJzdCA0IGJpdHMgb2YgZWFjaCBibG9jayBhcmUgeEQuCi0gICAgUkNIRUNLKChidWZmZXJbb2Zmc2V0XSAmIDB4ZjApID09IDB4ZDApOwotICAgIG9mZnNldCArPSAzMzsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQWR2YW5jZSB0byB0aGUgZmlyc3Qgc2V0IG9mIHxudW1fYml0c3wgYml0cyB0aGF0IG1hdGNoIHxzdGFydF9jb2RlfC4gfG9mZnNldHwKLS8vIGlzIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBidWZmZXIsIGFuZCBpcyB1cGRhdGVkLiB8Ynl0ZXNfbmVlZGVkfCBpcyB0aGUKLS8vIG51bWJlciBvZiBieXRlcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXIgd2hlbiB8c3RhcnRfY29kZXwgaXMgZm91bmQuCi0vLyBSZXR1cm5zIHRydWUgaWYgc3RhcnRfY29kZSBmb3VuZCAoYW5kIGVub3VnaCBzcGFjZSBpbiB0aGUgYnVmZmVyIGFmdGVyIGl0KSwKLS8vIGZhbHNlIG90aGVyd2lzZS4KLXN0YXRpYyBib29sIEFkdmFuY2VUb1N0YXJ0Q29kZShjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG9mZnNldCwgaW50IGJ5dGVzX25lZWRlZCwgaW50IG51bV9iaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0X2NvZGUpIHsKLSAgRENIRUNLX0dFKGJ5dGVzX25lZWRlZCwgMyk7Ci0gIERDSEVDS19MRShudW1fYml0cywgMjQpOyAgLy8gT25seSBzdXBwb3J0cyB1cCB0byAyNCBiaXRzLgotCi0gIC8vIENyZWF0ZSBhIG1hc2sgdG8gaXNvbGF0ZSB8bnVtX2JpdHN8IGJpdHMsIG9uY2Ugc2hpZnRlZCBvdmVyLgotICB1aW50MzJfdCBiaXRzX3RvX3NoaWZ0ID0gMjQgLSBudW1fYml0czsKLSAgdWludDMyX3QgbWFzayA9ICgxIDw8IG51bV9iaXRzKSAtIDE7Ci0gIHdoaWxlICgqb2Zmc2V0ICsgYnl0ZXNfbmVlZGVkIDwgYnVmZmVyX3NpemUpIHsKLSAgICB1aW50MzJfdCBuZXh0ID0gUmVhZDI0KGJ1ZmZlciArICpvZmZzZXQpOwotICAgIGlmICgoKG5leHQgPj4gYml0c190b19zaGlmdCkgJiBtYXNrKSA9PSBzdGFydF9jb2RlKSByZXR1cm4gdHJ1ZTsKLSAgICArKygqb2Zmc2V0KTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIENoZWNrcyBmb3IgYW4gSC4yNjEgY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tIMjYxKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIFJlZmVyZW5jZTogSVRVLVQgUmVjb21tZW5kYXRpb24gSC4yNjEgKDAzLzE5OTMpCi0gIC8vIChodHRwOi8vd3d3Lml0dS5pbnQvcmVjL1QtUkVDLUguMjYxLTE5OTMwMy1JL2VuKQotICBSQ0hFQ0soYnVmZmVyX3NpemUgPiAxNik7Ci0KLSAgaW50IG9mZnNldCA9IDA7Ci0gIGJvb2wgc2Vlbl9zdGFydF9jb2RlID0gZmFsc2U7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgLy8gQWR2YW5jZSB0byBwaWN0dXJlX3N0YXJ0X2NvZGUsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAoIUFkdmFuY2VUb1N0YXJ0Q29kZShidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCA0LCAyMCwgMHgxMCkpIHsKLSAgICAgIC8vIE5vIHN0YXJ0IGNvZGUgZm91bmQgKG9yIG9mZiBlbmQgb2YgYnVmZmVyKSwgc28gc3VjY2VzcyBpZgotICAgICAgLy8gdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSB2YWxpZCBoZWFkZXIuCi0gICAgICByZXR1cm4gc2Vlbl9zdGFydF9jb2RlOwotICAgIH0KLQotICAgIC8vIE5vdyB2ZXJpZnkgdGhlIGJsb2NrLiBBZHZhbmNlVG9TdGFydENvZGUoKSBtYWRlIHN1cmUgdGhhdCB0aGVyZSBhcmUKLSAgICAvLyBhdCBsZWFzdCA0IGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLgotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCBidWZmZXJfc2l6ZSAtIG9mZnNldCk7Ci0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDIwKSA9PSAweDEwKTsKLQotICAgIC8vIFNraXAgdGhlIHRlbXBvcmFsIHJlZmVyZW5jZSBhbmQgUFRZUEUuCi0gICAgcmVhZGVyLlNraXBCaXRzKDUgKyA2KTsKLQotICAgIC8vIFNraXAgYW55IGV4dHJhIGluc2VydGlvbiBpbmZvcm1hdGlvbi4gU2luY2UgdGhpcyBpcyBvcGVuLWVuZGVkLCBpZiB3ZSBydW4KLSAgICAvLyBvdXQgb2YgYml0cyBhc3N1bWUgdGhhdCB0aGUgYnVmZmVyIGlzIGNvcnJlY3RseSBmb3JtYXR0ZWQuCi0gICAgaW50IGV4dHJhID0gUmVhZEJpdHMoJnJlYWRlciwgMSk7Ci0gICAgd2hpbGUgKGV4dHJhID09IDEpIHsKLSAgICAgIGlmICghcmVhZGVyLlNraXBCaXRzKDgpKSByZXR1cm4gc2Vlbl9zdGFydF9jb2RlOwotICAgICAgaWYgKCFyZWFkZXIuUmVhZEJpdHMoMSwgJmV4dHJhKSkgcmV0dXJuIHNlZW5fc3RhcnRfY29kZTsKLSAgICB9Ci0KLSAgICAvLyBOZXh0IHNob3VsZCBiZSBhIEdyb3VwIG9mIEJsb2NrcyBzdGFydCBjb2RlLiBBZ2FpbiwgaWYgd2UgcnVuIG91dCBvZgotICAgIC8vIGJpdHMsIHRoZW4gYXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciB1cCB0byBoZXJlIGlzIGNvcnJlY3QsIGFuZCB0aGUgYnVmZmVyCi0gICAgLy8ganVzdCBoYXBwZW5lZCB0byBlbmQgaW4gdGhlIG1pZGRsZSBvZiBhIGhlYWRlci4KLSAgICBpbnQgbmV4dDsKLSAgICBpZiAoIXJlYWRlci5SZWFkQml0cygxNiwgJm5leHQpKSByZXR1cm4gc2Vlbl9zdGFydF9jb2RlOwotICAgIFJDSEVDSyhuZXh0ID09IDEpOwotCi0gICAgLy8gTW92ZSB0byB0aGUgbmV4dCBibG9jay4KLSAgICBzZWVuX3N0YXJ0X2NvZGUgPSB0cnVlOwotICAgIG9mZnNldCArPSA0OwotICB9Ci19Ci0KLS8vIENoZWNrcyBmb3IgYW4gSC4yNjMgY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tIMjYzKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIFJlZmVyZW5jZTogSVRVLVQgUmVjb21tZW5kYXRpb24gSC4yNjMgKDAxLzIwMDUpCi0gIC8vIChodHRwOi8vd3d3Lml0dS5pbnQvcmVjL1QtUkVDLUguMjYzLTIwMDUwMS1JL2VuKQotICAvLyBoZWFkZXIgaXMgUFNDKDIyYikgKyBUUig4YikgKyBQVFlQRSg4K2IpLgotICBSQ0hFQ0soYnVmZmVyX3NpemUgPiAxNik7Ci0KLSAgaW50IG9mZnNldCA9IDA7Ci0gIGJvb2wgc2Vlbl9zdGFydF9jb2RlID0gZmFsc2U7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgLy8gQWR2YW5jZSB0byBwaWN0dXJlX3N0YXJ0X2NvZGUsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAoIUFkdmFuY2VUb1N0YXJ0Q29kZShidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCA5LCAyMiwgMHgyMCkpIHsKLSAgICAgIC8vIE5vIHN0YXJ0IGNvZGUgZm91bmQgKG9yIG9mZiBlbmQgb2YgYnVmZmVyKSwgc28gc3VjY2VzcyBpZgotICAgICAgLy8gdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSB2YWxpZCBoZWFkZXIuCi0gICAgICByZXR1cm4gc2Vlbl9zdGFydF9jb2RlOwotICAgIH0KLQotICAgIC8vIE5vdyB2ZXJpZnkgdGhlIGJsb2NrLiBBZHZhbmNlVG9TdGFydENvZGUoKSBtYWRlIHN1cmUgdGhhdCB0aGVyZSBhcmUKLSAgICAvLyBhdCBsZWFzdCA5IGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLgotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCA5KTsKLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMjIpID09IDB4MjApOwotCi0gICAgLy8gU2tpcCB0aGUgdGVtcG9yYWwgcmVmZXJlbmNlLgotICAgIHJlYWRlci5Ta2lwQml0cyg4KTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBmaXJzdCAyIGJpdHMgb2YgUFRZUEUgYXJlIDEwYi4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMikgPT0gMik7Ci0KLSAgICAvLyBTa2lwIHRoZSBzcGxpdCBzY3JlZW4gaW5kaWNhdG9yLCBkb2N1bWVudCBjYW1lcmEgaW5kaWNhdG9yLCBhbmQgZnVsbAotICAgIC8vIHBpY3R1cmUgZnJlZXplIHJlbGVhc2UuCi0gICAgcmVhZGVyLlNraXBCaXRzKDEgKyAxICsgMSk7Ci0KLSAgICAvLyBWZXJpZnkgU291cmNlIEZvcm1hdC4KLSAgICBpbnQgZm9ybWF0ID0gUmVhZEJpdHMoJnJlYWRlciwgMyk7Ci0gICAgUkNIRUNLKGZvcm1hdCAhPSAwICYmIGZvcm1hdCAhPSA2KTsgIC8vIEZvcmJpZGRlbiBvciByZXNlcnZlZC4KLQotICAgIGlmIChmb3JtYXQgPT0gNykgewotICAgICAgLy8gVmVyaWZ5IGZ1bGwgZXh0ZW5kZWQgUFRZUEUuCi0gICAgICBpbnQgdWZlcCA9IFJlYWRCaXRzKCZyZWFkZXIsIDMpOwotICAgICAgaWYgKHVmZXAgPT0gMSkgewotICAgICAgICAvLyBWZXJpZnkgdGhlIG9wdGlvbmFsIHBhcnQgb2YgUExVU1BUWVBFLgotICAgICAgICBmb3JtYXQgPSBSZWFkQml0cygmcmVhZGVyLCAzKTsKLSAgICAgICAgUkNIRUNLKGZvcm1hdCAhPSAwICYmIGZvcm1hdCAhPSA3KTsgIC8vIFJlc2VydmVkLgotICAgICAgICByZWFkZXIuU2tpcEJpdHMoMTEpOwotICAgICAgICAvLyBOZXh0IDQgYml0cyBzaG91bGQgYmUgYjEwMDAuCi0gICAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCA0KSA9PSA4KTsgIC8vIE5vdCBhbGxvd2VkLgotICAgICAgfSBlbHNlIHsKLSAgICAgICAgUkNIRUNLKHVmZXAgPT0gMCk7ICAvLyBPbmx5IDAgYW5kIDEgYWxsb3dlZC4KLSAgICAgIH0KLQotICAgICAgLy8gVmVyaWZ5IHBpY3R1cmUgdHlwZSBjb2RlIGlzIG5vdCBhIHJlc2VydmVkIHZhbHVlLgotICAgICAgaW50IHBpY3R1cmVfdHlwZV9jb2RlID0gUmVhZEJpdHMoJnJlYWRlciwgMyk7Ci0gICAgICBSQ0hFQ0socGljdHVyZV90eXBlX2NvZGUgIT0gNiAmJiBwaWN0dXJlX3R5cGVfY29kZSAhPSA3KTsgIC8vIFJlc2VydmVkLgotCi0gICAgICAvLyBTa2lwIHBpY3R1cmUgcmVzYW1wbGluZyBtb2RlLCByZWR1Y2VkIHJlc29sdXRpb24gbW9kZSwKLSAgICAgIC8vIGFuZCByb3VuZGluZyB0eXBlLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDEgKyAxICsgMSk7Ci0KLSAgICAgIC8vIE5leHQgMyBiaXRzIHNob3VsZCBiZSBiMDAxLgotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDMpID09IDEpOyAgLy8gTm90IGFsbG93ZWQuCi0gICAgfQotCi0gICAgLy8gTW92ZSB0byB0aGUgbmV4dCBibG9jay4KLSAgICBzZWVuX3N0YXJ0X2NvZGUgPSB0cnVlOwotICAgIG9mZnNldCArPSA5OwotICB9Ci19Ci0KLS8vIENoZWNrcyBmb3IgYW4gSC4yNjQgY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tIMjY0KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIFJlZmVyZW5jZTogSVRVLVQgUmVjb21tZW5kYXRpb24gSC4yNjQgKDAxLzIwMTIpCi0gIC8vIChodHRwOi8vd3d3Lml0dS5pbnQvcmVjL1QtUkVDLUguMjY0KQotICAvLyBTZWN0aW9uIEIuMTogQnl0ZSBzdHJlYW0gTkFMIHVuaXQgc3ludGF4IGFuZCBzZW1hbnRpY3MuCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDQpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgcGFyYW1ldGVyX2NvdW50ID0gMDsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyBBZHZhbmNlIHRvIHBpY3R1cmVfc3RhcnRfY29kZSwgaWYgdGhlcmUgaXMgb25lLgotICAgIGlmICghQWR2YW5jZVRvU3RhcnRDb2RlKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsIDQsIDI0LCAxKSkgewotICAgICAgLy8gTm8gc3RhcnQgY29kZSBmb3VuZCAob3Igb2ZmIGVuZCBvZiBidWZmZXIpLCBzbyBzdWNjZXNzIGlmCi0gICAgICAvLyB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lIHZhbGlkIGhlYWRlci4KLSAgICAgIHJldHVybiBwYXJhbWV0ZXJfY291bnQgPiAwOwotICAgIH0KLQotICAgIC8vIE5vdyB2ZXJpZnkgdGhlIGJsb2NrLiBBZHZhbmNlVG9TdGFydENvZGUoKSBtYWRlIHN1cmUgdGhhdCB0aGVyZSBhcmUKLSAgICAvLyBhdCBsZWFzdCA0IGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLgotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCA0KTsKLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMjQpID09IDEpOwotCi0gICAgLy8gVmVyaWZ5IGZvcmJpZGRlbl96ZXJvX2JpdC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMSkgPT0gMCk7Ci0KLSAgICAvLyBFeHRyYWN0IG5hbF9yZWZfaWRjIGFuZCBuYWxfdW5pdF90eXBlLgotICAgIGludCBuYWxfcmVmX2lkYyA9IFJlYWRCaXRzKCZyZWFkZXIsIDIpOwotICAgIGludCBuYWxfdW5pdF90eXBlID0gUmVhZEJpdHMoJnJlYWRlciwgNSk7Ci0KLSAgICBzd2l0Y2ggKG5hbF91bml0X3R5cGUpIHsKLSAgICAgIGNhc2UgNTogIC8vIENvZGVkIHNsaWNlIG9mIGFuIElEUiBwaWN0dXJlLgotICAgICAgICBSQ0hFQ0sobmFsX3JlZl9pZGMgIT0gMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSA2OiAgIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKS4KLSAgICAgIGNhc2UgOTogICAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXIuCi0gICAgICBjYXNlIDEwOiAgLy8gRW5kIG9mIHNlcXVlbmNlLgotICAgICAgY2FzZSAxMTogIC8vIEVuZCBvZiBzdHJlYW0uCi0gICAgICBjYXNlIDEyOiAgLy8gRmlsbGVyIGRhdGEuCi0gICAgICAgIFJDSEVDSyhuYWxfcmVmX2lkYyA9PSAwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDc6ICAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0LgotICAgICAgY2FzZSA4OiAgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0LgotICAgICAgICArK3BhcmFtZXRlcl9jb3VudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gU2tpcCB0aGUgY3VycmVudCBzdGFydF9jb2RlX3ByZWZpeCBhbmQgbW92ZSB0byB0aGUgbmV4dC4KLSAgICBvZmZzZXQgKz0gNDsKLSAgfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciBrSGxzU2lnbmF0dXJlW10gPSAiI0VYVE0zVSI7Ci1zdGF0aWMgY29uc3QgY2hhciBrSGxzMVtdID0gIiNFWFQtWC1TVFJFQU0tSU5GOiI7Ci1zdGF0aWMgY29uc3QgY2hhciBrSGxzMltdID0gIiNFWFQtWC1UQVJHRVREVVJBVElPTjoiOwotc3RhdGljIGNvbnN0IGNoYXIga0hsczNbXSA9ICIjRVhULVgtTUVESUEtU0VRVUVOQ0U6IjsKLQotLy8gQWRkaXRpb25hbCBjaGVja3MgZm9yIGEgSExTIGNvbnRhaW5lci4KLXN0YXRpYyBib29sIENoZWNrSGxzKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIC8vIEhMUyBpcyBzaW1wbHkgYSBwbGF5IGxpc3QgdXNlZCBmb3IgQXBwbGUgSFRUUCBMaXZlIFN0cmVhbWluZy4KLSAgLy8gUmVmZXJlbmNlOiBBcHBsZSBIVFRQIExpdmUgU3RyZWFtaW5nIE92ZXJ2aWV3Ci0gIC8vIChodHRwOi8vZ29vLmdsL01Jd3hqKQotCi0gIGlmIChTdGFydHNXaXRoKGJ1ZmZlciwgYnVmZmVyX3NpemUsIGtIbHNTaWduYXR1cmUpKSB7Ci0gICAgLy8gTmVlZCB0byBmaW5kICIjRVhULVgtU1RSRUFNLUlORjoiLCAiI0VYVC1YLVRBUkdFVERVUkFUSU9OOiIsIG9yCi0gICAgLy8gIiNFWFQtWC1NRURJQS1TRVFVRU5DRToiIHNvbWV3aGVyZSBpbiB0aGUgYnVmZmVyLiBPdGhlciBwbGF5bGlzdHMgKGxpa2UKLSAgICAvLyBXaW5BbXApIG9ubHkgaGF2ZSBhZGRpdGlvbmFsIGxpbmVzIHdpdGggI0VYVElORgotICAgIC8vIChodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL00zVSkuCi0gICAgaW50IG9mZnNldCA9IHN0cmxlbihrSGxzU2lnbmF0dXJlKTsKLSAgICB3aGlsZSAob2Zmc2V0IDwgYnVmZmVyX3NpemUpIHsKLSAgICAgIGlmIChidWZmZXJbb2Zmc2V0XSA9PSAnIycpIHsKLSAgICAgICAgaWYgKFN0YXJ0c1dpdGgoYnVmZmVyICsgb2Zmc2V0LCBidWZmZXJfc2l6ZSAtIG9mZnNldCwga0hsczEpIHx8Ci0gICAgICAgICAgICBTdGFydHNXaXRoKGJ1ZmZlciArIG9mZnNldCwgYnVmZmVyX3NpemUgLSBvZmZzZXQsIGtIbHMyKSB8fAotICAgICAgICAgICAgU3RhcnRzV2l0aChidWZmZXIgKyBvZmZzZXQsIGJ1ZmZlcl9zaXplIC0gb2Zmc2V0LCBrSGxzMykpIHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgKytvZmZzZXQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotLy8gQ2hlY2tzIGZvciBhIE1KUEVHIHN0cmVhbS4KLXN0YXRpYyBib29sIENoZWNrTUpwZWcoY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gUmVmZXJlbmNlOiBJU08vSUVDIDEwOTE4LTEgOiAxOTkzKEUpLCBBbm5leCBCCi0gIC8vIChodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9KUEVHL2l0dS10ODEucGRmKQotICBSQ0hFQ0soYnVmZmVyX3NpemUgPj0gMTYpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgbGFzdF9yZXN0YXJ0ID0gLTE7Ci0gIGludCBudW1fY29kZXMgPSAwOwotICB3aGlsZSAob2Zmc2V0ICsgNSA8IGJ1ZmZlcl9zaXplKSB7Ci0gICAgLy8gTWFya2VyIGNvZGVzIGFyZSBhbHdheXMgYSB0d28gYnl0ZSBjb2RlIHdpdGggdGhlIGZpcnN0IGJ5dGUgeEZGLgotICAgIFJDSEVDSyhidWZmZXJbb2Zmc2V0XSA9PSAweGZmKTsKLSAgICB1aW50OF90IGNvZGUgPSBidWZmZXJbb2Zmc2V0ICsgMV07Ci0gICAgUkNIRUNLKGNvZGUgPj0gMHhjMCB8fCBjb2RlID09IDEpOwotCi0gICAgLy8gU2tpcCBzZXF1ZW5jZXMgb2YgeEZGLgotICAgIGlmIChjb2RlID09IDB4ZmYpIHsKLSAgICAgICsrb2Zmc2V0OwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLy8gU3VjY2VzcyBpZiB0aGUgbmV4dCBtYXJrZXIgY29kZSBpcyBFT0kgKGVuZCBvZiBpbWFnZSkKLSAgICBpZiAoY29kZSA9PSAweGQ5KSByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIENoZWNrIHJlbWFpbmluZyBjb2Rlcy4KLSAgICBpZiAoY29kZSA9PSAweGQ4IHx8IGNvZGUgPT0gMSkgewotICAgICAgLy8gU09JIChzdGFydCBvZiBpbWFnZSkgLyBURU0gKHByaXZhdGUgdXNlKS4gTm8gb3RoZXIgZGF0YSB3aXRoIGhlYWRlci4KLSAgICAgIG9mZnNldCArPSAyOwotICAgIH0gZWxzZSBpZiAoY29kZSA+PSAweGQwICYmIGNvZGUgPD0gMHhkNykgewotICAgICAgLy8gUlNUIChyZXN0YXJ0KSBjb2RlcyBtdXN0IGJlIGluIHNlcXVlbmNlLiBObyBvdGhlciBkYXRhIHdpdGggaGVhZGVyLgotICAgICAgaW50IHJlc3RhcnQgPSBjb2RlICYgMHgwNzsKLSAgICAgIGlmIChsYXN0X3Jlc3RhcnQgPj0gMCkgUkNIRUNLKHJlc3RhcnQgPT0gKGxhc3RfcmVzdGFydCArIDEpICUgOCk7Ci0gICAgICBsYXN0X3Jlc3RhcnQgPSByZXN0YXJ0OwotICAgICAgb2Zmc2V0ICs9IDI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEFsbCByZW1haW5pbmcgbWFya2VyIGNvZGVzIGFyZSBmb2xsb3dlZCBieSBhIGxlbmd0aCBvZiB0aGUgaGVhZGVyLgotICAgICAgaW50IGxlbmd0aCA9IFJlYWQxNihidWZmZXIgKyBvZmZzZXQgKyAyKSArIDI7Ci0KLSAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgb2YgU09TIChzdGFydCBvZiBzY2FuKSBtYXJrZXIgc2luY2UgdGhlIGVudHJvcHkKLSAgICAgIC8vIGNvZGVkIGRhdGEgZm9sbG93cyB0aGUgU09TLiBBbnkgeEZGIGJ5dGUgaW4gdGhlIGRhdGEgYmxvY2sgbXVzdCBiZQotICAgICAgLy8gZm9sbG93ZWQgYnkgeDAwIGluIHRoZSBkYXRhLgotICAgICAgaWYgKGNvZGUgPT0gMHhkYSkgewotICAgICAgICBpbnQgbnVtYmVyX2NvbXBvbmVudHMgPSBidWZmZXJbb2Zmc2V0ICsgNF07Ci0gICAgICAgIFJDSEVDSyhsZW5ndGggPT0gOCArIDIgKiBudW1iZXJfY29tcG9uZW50cyk7Ci0KLSAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBtYXJrZXIuCi0gICAgICAgIG9mZnNldCArPSBsZW5ndGg7Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgKyAyIDwgYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICBpZiAoYnVmZmVyW29mZnNldF0gPT0gMHhmZiAmJiBidWZmZXJbb2Zmc2V0ICsgMV0gIT0gMCkgYnJlYWs7Ci0gICAgICAgICAgKytvZmZzZXQ7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNraXAgb3ZlciB0aGUgbWFya2VyIGRhdGEgZm9yIHRoZSBvdGhlciBtYXJrZXIgY29kZXMuCi0gICAgICAgIG9mZnNldCArPSBsZW5ndGg7Ci0gICAgICB9Ci0gICAgfQotICAgICsrbnVtX2NvZGVzOwotICB9Ci0gIHJldHVybiAobnVtX2NvZGVzID4gMSk7Ci19Ci0KLWVudW0gTXBlZzJTdGFydENvZGVzIHsgUFJPR1JBTV9FTkRfQ09ERSA9IDB4YjksIFBBQ0tfU1RBUlRfQ09ERSA9IDB4YmEgfTsKLQotLy8gQ2hlY2tzIGZvciBhIE1QRUcyIFByb2dyYW0gU3RyZWFtLgotc3RhdGljIGJvb2wgQ2hlY2tNcGVnMlByb2dyYW1TdHJlYW0oY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gUmVmZXJlbmNlOiBJU08vSUVDIDEzODE4LTEgOiAyMDAwIChFKSAvIElUVS1UIFJlYy4gSC4yMjIuMCAoMjAwMCBFKS4KLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID4gMTQpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICB3aGlsZSAob2Zmc2V0ICsgMTQgPCBidWZmZXJfc2l6ZSkgewotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCAxNCk7Ci0KLSAgICAvLyBNdXN0IHN0YXJ0IHdpdGggcGFja19zdGFydF9jb2RlLgotICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAyNCkgPT0gMSk7Ci0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDgpID09IFBBQ0tfU1RBUlRfQ09ERSk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgTVBFRyB2ZXJzaW9uIChNUEVHMSBoYXMgYjAwMTAsIHdoaWxlIE1QRUcyIGhhcyBiMDEpLgotICAgIGludCBtcGVnX3ZlcnNpb24gPSBSZWFkQml0cygmcmVhZGVyLCAyKTsKLSAgICBpZiAobXBlZ192ZXJzaW9uID09IDApIHsKLSAgICAgIC8vIE1QRUcxLCAxMCBieXRlIGhlYWRlcgotICAgICAgLy8gVmFsaWRhdGUgcmVzdCBvZiB2ZXJzaW9uIGNvZGUKLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAyKSA9PSAyKTsKLSAgICB9IGVsc2UgewotICAgICAgUkNIRUNLKG1wZWdfdmVyc2lvbiA9PSAxKTsKLSAgICB9Ci0KLSAgICAvLyBTa2lwIHN5c3RlbV9jbG9ja19yZWZlcmVuY2VfYmFzZSBbMzIuLjMwXS4KLSAgICByZWFkZXIuU2tpcEJpdHMoMyk7Ci0KLSAgICAvLyBWZXJpZnkgbWFya2VyIGJpdC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMSkgPT0gMSk7Ci0KLSAgICAvLyBTa2lwIHN5c3RlbV9jbG9ja19yZWZlcmVuY2VfYmFzZSBbMjkuLjE1XS4KLSAgICByZWFkZXIuU2tpcEJpdHMoMTUpOwotCi0gICAgLy8gVmVyaWZ5IG5leHQgbWFya2VyIGJpdC4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMSkgPT0gMSk7Ci0KLSAgICAvLyBTa2lwIHN5c3RlbV9jbG9ja19yZWZlcmVuY2VfYmFzZSBbMTQuLjBdLgotICAgIHJlYWRlci5Ta2lwQml0cygxNSk7Ci0KLSAgICAvLyBWZXJpZnkgbmV4dCBtYXJrZXIgYml0LgotICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAxKTsKLQotICAgIGlmIChtcGVnX3ZlcnNpb24gPT0gMCkgewotICAgICAgLy8gVmVyaWZ5IHNlY29uZCBtYXJrZXIgYml0LgotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDEpID09IDEpOwotCi0gICAgICAvLyBTa2lwIG11eF9yYXRlLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDIyKTsKLQotICAgICAgLy8gVmVyaWZ5IG5leHQgbWFya2VyIGJpdC4KLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAxKTsKLQotICAgICAgLy8gVXBkYXRlIG9mZnNldCB0byBiZSBhZnRlciB0aGlzIGhlYWRlci4KLSAgICAgIG9mZnNldCArPSAxMjsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTXVzdCBiZSBNUEVHMi4KLSAgICAgIC8vIFNraXAgcHJvZ3JhbV9tdXhfcmF0ZS4KLSAgICAgIHJlYWRlci5Ta2lwQml0cygyMik7Ci0KLSAgICAgIC8vIFZlcmlmeSBwYWlyIG9mIG1hcmtlciBiaXRzLgotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDIpID09IDMpOwotCi0gICAgICAvLyBTa2lwIHJlc2VydmVkLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDUpOwotCi0gICAgICAvLyBVcGRhdGUgb2Zmc2V0IHRvIGJlIGFmdGVyIHRoaXMgaGVhZGVyLgotICAgICAgaW50IHBhY2tfc3R1ZmZpbmdfbGVuZ3RoID0gUmVhZEJpdHMoJnJlYWRlciwgMyk7Ci0gICAgICBvZmZzZXQgKz0gMTQgKyBwYWNrX3N0dWZmaW5nX2xlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBmb3Igc3lzdGVtIGhlYWRlcnMgYW5kIFBFU19wYWNrZXRzLgotICAgIHdoaWxlIChvZmZzZXQgKyA2IDwgYnVmZmVyX3NpemUgJiYgUmVhZDI0KGJ1ZmZlciArIG9mZnNldCkgPT0gMSkgewotICAgICAgLy8gTmV4dCA4IGJpdHMgZGV0ZXJtaW5lIHN0cmVhbSB0eXBlLgotICAgICAgaW50IHN0cmVhbV9pZCA9IGJ1ZmZlcltvZmZzZXQgKyAzXTsKLQotICAgICAgLy8gU29tZSBzdHJlYW0gdHlwZXMgYXJlIHJlc2VydmVkIGFuZCBzaG91bGRuJ3Qgb2NjdXIuCi0gICAgICBpZiAobXBlZ192ZXJzaW9uID09IDApCi0gICAgICAgIFJDSEVDSyhzdHJlYW1faWQgIT0gMHhiYyAmJiBzdHJlYW1faWQgPCAweGYwKTsKLSAgICAgIGVsc2UKLSAgICAgICAgUkNIRUNLKHN0cmVhbV9pZCAhPSAweGZjICYmIHN0cmVhbV9pZCAhPSAweGZkICYmIHN0cmVhbV9pZCAhPSAweGZlKTsKLQotICAgICAgLy8gU29tZSBzdHJlYW0gdHlwZXMgYXJlIHVzZWQgZm9yIHBhY2sgaGVhZGVycy4KLSAgICAgIGlmIChzdHJlYW1faWQgPT0gUEFDS19TVEFSVF9DT0RFKSAgLy8gYmFjayB0byBvdXRlciBsb29wLgotICAgICAgICBicmVhazsKLSAgICAgIGlmIChzdHJlYW1faWQgPT0gUFJPR1JBTV9FTkRfQ09ERSkgIC8vIGVuZCBvZiBzdHJlYW0uCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICBpbnQgcGVzX2xlbmd0aCA9IFJlYWQxNihidWZmZXIgKyBvZmZzZXQgKyA0KTsKLSAgICAgIFJDSEVDSyhwZXNfbGVuZ3RoID4gMCk7Ci0gICAgICBvZmZzZXQgPSBvZmZzZXQgKyA2ICsgcGVzX2xlbmd0aDsKLSAgICB9Ci0gIH0KLSAgLy8gU3VjY2VzcyBhcyB3ZSBhcmUgb2ZmIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhbmQgbGlrZWQgZXZlcnl0aGluZwotICAvLyBpbiB0aGUgYnVmZmVyLgotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgdWludDhfdCBrTXBlZzJTeW5jV29yZCA9IDB4NDc7Ci0KLS8vIENoZWNrcyBmb3IgYSBNUEVHMiBUcmFuc3BvcnQgU3RyZWFtLgotc3RhdGljIGJvb2wgQ2hlY2tNcGVnMlRyYW5zcG9ydFN0cmVhbShjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBTcGVjOiBJU08vSUVDIDEzODE4LTEgOiAyMDAwIChFKSAvIElUVS1UIFJlYy4gSC4yMjIuMCAoMjAwMCBFKS4KLSAgLy8gTm9ybWFsIHBhY2tldCBzaXplIGlzIDE4OCBieXRlcy4gSG93ZXZlciwgc29tZSBzeXN0ZW1zIGFkZCB2YXJpb3VzIGVycm9yCi0gIC8vIGNvcnJlY3Rpb24gZGF0YSBhdCB0aGUgZW5kLCByZXN1bHRpbmcgaW4gcGFja2V0IG9mIGxlbmd0aCAxOTIvMjA0LzIwOAotICAvLyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTVBFR190cmFuc3BvcnRfc3RyZWFtKS4gRGV0ZXJtaW5lIHRoZQotICAvLyBsZW5ndGggd2l0aCB0aGUgZmlyc3QgcGFja2V0LgotICBSQ0hFQ0soYnVmZmVyX3NpemUgPj0gMjUwKTsgIC8vIFdhbnQgbW9yZSB0aGFuIDEgcGFja2V0IHRvIGNoZWNrLgotCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgcGFja2V0X2xlbmd0aCA9IC0xOwotICB3aGlsZSAoYnVmZmVyW29mZnNldF0gIT0ga01wZWcyU3luY1dvcmQgJiYgb2Zmc2V0IDwgMjApIHsKLSAgICAvLyBTa2lwIG92ZXIgYW55IGhlYWRlciBpbiB0aGUgZmlyc3QgMjAgYnl0ZXMuCi0gICAgKytvZmZzZXQ7Ci0gIH0KLQotICB3aGlsZSAob2Zmc2V0ICsgNiA8IGJ1ZmZlcl9zaXplKSB7Ci0gICAgQml0UmVhZGVyIHJlYWRlcihidWZmZXIgKyBvZmZzZXQsIDYpOwotCi0gICAgLy8gTXVzdCBzdGFydCB3aXRoIHN5bmMgYnl0ZS4KLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgOCkgPT0ga01wZWcyU3luY1dvcmQpOwotCi0gICAgLy8gU2tpcCB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yLCBwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yLCBhbmQKLSAgICAvLyB0cmFuc3BvcnRfcHJpb3JpdHkuCi0gICAgcmVhZGVyLlNraXBCaXRzKDEgKyAxICsgMSk7Ci0KLSAgICAvLyBWZXJpZnkgdGhlIHBpZCBpcyBub3QgYSByZXNlcnZlZCB2YWx1ZS4KLSAgICBpbnQgcGlkID0gUmVhZEJpdHMoJnJlYWRlciwgMTMpOwotICAgIFJDSEVDSyhwaWQgPCAzIHx8IHBpZCA+IDE1KTsKLQotICAgIC8vIFNraXAgdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbC4KLSAgICByZWFkZXIuU2tpcEJpdHMoMik7Ci0KLSAgICAvLyBBZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2wgY2FuIG5vdCBiZSAwLgotICAgIGludCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2wgPSBSZWFkQml0cygmcmVhZGVyLCAyKTsKLSAgICBSQ0hFQ0soYWRhcHRhdGlvbl9maWVsZF9jb250cm9sICE9IDApOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgYW4gYWRhcHRhdGlvbl9maWVsZCwgdmVyaWZ5IGl0LgotICAgIGlmIChhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2wgPj0gMikgewotICAgICAgLy8gU2tpcCBjb250aW51aXR5X2NvdW50ZXIuCi0gICAgICByZWFkZXIuU2tpcEJpdHMoNCk7Ci0KLSAgICAgIC8vIEdldCBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aCBhbmQgdmVyaWZ5IGl0LgotICAgICAgaW50IGFkYXB0YXRpb25fZmllbGRfbGVuZ3RoID0gUmVhZEJpdHMoJnJlYWRlciwgOCk7Ci0gICAgICBpZiAoYWRhcHRhdGlvbl9maWVsZF9jb250cm9sID09IDIpCi0gICAgICAgIFJDSEVDSyhhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aCA9PSAxODMpOwotICAgICAgZWxzZQotICAgICAgICBSQ0hFQ0soYWRhcHRhdGlvbl9maWVsZF9sZW5ndGggPD0gMTgyKTsKLSAgICB9Ci0KLSAgICAvLyBBdHRlbXB0IHRvIGRldGVybWluZSB0aGUgcGFja2V0IGxlbmd0aCBvbiB0aGUgZmlyc3QgcGFja2V0LgotICAgIGlmIChwYWNrZXRfbGVuZ3RoIDwgMCkgewotICAgICAgaWYgKGJ1ZmZlcltvZmZzZXQgKyAxODhdID09IGtNcGVnMlN5bmNXb3JkKQotICAgICAgICBwYWNrZXRfbGVuZ3RoID0gMTg4OwotICAgICAgZWxzZSBpZiAoYnVmZmVyW29mZnNldCArIDE5Ml0gPT0ga01wZWcyU3luY1dvcmQpCi0gICAgICAgIHBhY2tldF9sZW5ndGggPSAxOTI7Ci0gICAgICBlbHNlIGlmIChidWZmZXJbb2Zmc2V0ICsgMjA0XSA9PSBrTXBlZzJTeW5jV29yZCkKLSAgICAgICAgcGFja2V0X2xlbmd0aCA9IDIwNDsKLSAgICAgIGVsc2UKLSAgICAgICAgcGFja2V0X2xlbmd0aCA9IDIwODsKLSAgICB9Ci0gICAgb2Zmc2V0ICs9IHBhY2tldF9sZW5ndGg7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWVudW0gTXBlZzRTdGFydENvZGVzIHsKLSAgVklTVUFMX09CSkVDVF9TRVFVRU5DRV9TVEFSVF9DT0RFID0gMHhiMCwKLSAgVklTVUFMX09CSkVDVF9TRVFVRU5DRV9FTkRfQ09ERSA9IDB4YjEsCi0gIFZJU1VBTF9PQkpFQ1RfU1RBUlRfQ09ERSA9IDB4YjUsCi0gIFZPUF9TVEFSVF9DT0RFID0gMHhiNgotfTsKLQotLy8gQ2hlY2tzIGZvciBhIHJhdyBNUEVHNCBiaXRzdHJlYW0gY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tNcGVnNEJpdFN0cmVhbShjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBEZWZpbmVkIGluIElTTy9JRUMgMTQ0OTYtMjoyMDAxLgotICAvLyBIb3dldmVyLCBubyBsZW5ndGggLi4uIHNpbXBseSBzY2FuIGZvciBzdGFydCBjb2RlIHZhbHVlcy4KLSAgLy8gTm90ZSB0YWdzIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gSC4yNjQuCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDQpOwotCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgc2VxdWVuY2Vfc3RhcnRfY291bnQgPSAwOwotICBpbnQgc2VxdWVuY2VfZW5kX2NvdW50ID0gMDsKLSAgaW50IHZpc3VhbF9vYmplY3RfY291bnQgPSAwOwotICBpbnQgdm9wX2NvdW50ID0gMDsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyBBZHZhbmNlIHRvIHN0YXJ0X2NvZGUsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAoIUFkdmFuY2VUb1N0YXJ0Q29kZShidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCA2LCAyNCwgMSkpIHsKLSAgICAgIC8vIE5vdCBhIGNvbXBsZXRlIHNlcXVlbmNlIGluIG1lbW9yeSwgc28gcmV0dXJuIHRydWUgaWYgd2UndmUgc2VlbiBhCi0gICAgICAvLyB2aXN1YWxfb2JqZWN0X3NlcXVlbmNlX3N0YXJ0X2NvZGUgYW5kIGEgdmlzdWFsX29iamVjdF9zdGFydF9jb2RlLgotICAgICAgcmV0dXJuIChzZXF1ZW5jZV9zdGFydF9jb3VudCA+IDAgJiYgdmlzdWFsX29iamVjdF9jb3VudCA+IDApOwotICAgIH0KLQotICAgIC8vIE5vdyB2ZXJpZnkgdGhlIGJsb2NrLiBBZHZhbmNlVG9TdGFydENvZGUoKSBtYWRlIHN1cmUgdGhhdCB0aGVyZSBhcmUKLSAgICAvLyBhdCBsZWFzdCA2IGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLgotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCA2KTsKLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMjQpID09IDEpOwotCi0gICAgaW50IHN0YXJ0X2NvZGUgPSBSZWFkQml0cygmcmVhZGVyLCA4KTsKLSAgICBSQ0hFQ0soc3RhcnRfY29kZSA8IDB4MzAgfHwgc3RhcnRfY29kZSA+IDB4YWYpOyAgLy8gMzAuLkFGIGFuZAotICAgIFJDSEVDSyhzdGFydF9jb2RlIDwgMHhiNyB8fCBzdGFydF9jb2RlID4gMHhiOSk7ICAvLyBCNy4uQjkgcmVzZXJ2ZWQKLQotICAgIHN3aXRjaCAoc3RhcnRfY29kZSkgewotICAgICAgY2FzZSBWSVNVQUxfT0JKRUNUX1NFUVVFTkNFX1NUQVJUX0NPREU6IHsKLSAgICAgICAgKytzZXF1ZW5jZV9zdGFydF9jb3VudDsKLSAgICAgICAgLy8gVmVyaWZ5IHByb2ZpbGUgaW4gbm90IG9uZSBvZiBtYW55IHJlc2VydmVkIHZhbHVlcy4KLSAgICAgICAgaW50IHByb2ZpbGUgPSBSZWFkQml0cygmcmVhZGVyLCA4KTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPiAwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDA0IHx8IHByb2ZpbGUgPiAweDEwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDEzIHx8IHByb2ZpbGUgPiAweDIwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDIzIHx8IHByb2ZpbGUgPiAweDMxKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDM1IHx8IHByb2ZpbGUgPiAweDQxKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDQzIHx8IHByb2ZpbGUgPiAweDYwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDY1IHx8IHByb2ZpbGUgPiAweDcwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDczIHx8IHByb2ZpbGUgPiAweDgwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDgzIHx8IHByb2ZpbGUgPiAweDkwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweDk1IHx8IHByb2ZpbGUgPiAweGEwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweGE0IHx8IHByb2ZpbGUgPiAweGIwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweGI1IHx8IHByb2ZpbGUgPiAweGMwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweGMzIHx8IHByb2ZpbGUgPiAweGQwKTsKLSAgICAgICAgUkNIRUNLKHByb2ZpbGUgPCAweGU0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgVklTVUFMX09CSkVDVF9TRVFVRU5DRV9FTkRfQ09ERToKLSAgICAgICAgUkNIRUNLKCsrc2VxdWVuY2VfZW5kX2NvdW50ID09IHNlcXVlbmNlX3N0YXJ0X2NvdW50KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgVklTVUFMX09CSkVDVF9TVEFSVF9DT0RFOiB7Ci0gICAgICAgICsrdmlzdWFsX29iamVjdF9jb3VudDsKLSAgICAgICAgaWYgKFJlYWRCaXRzKCZyZWFkZXIsIDEpID09IDEpIHsKLSAgICAgICAgICBpbnQgdmlzdWFsX29iamVjdF92ZXJpZCA9IFJlYWRCaXRzKCZyZWFkZXIsIDQpOwotICAgICAgICAgIFJDSEVDSyh2aXN1YWxfb2JqZWN0X3ZlcmlkID4gMCAmJiB2aXN1YWxfb2JqZWN0X3ZlcmlkIDwgMyk7Ci0gICAgICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDMpICE9IDApOwotICAgICAgICB9Ci0gICAgICAgIGludCB2aXN1YWxfb2JqZWN0X3R5cGUgPSBSZWFkQml0cygmcmVhZGVyLCA0KTsKLSAgICAgICAgUkNIRUNLKHZpc3VhbF9vYmplY3RfdHlwZSA+IDAgJiYgdmlzdWFsX29iamVjdF90eXBlIDwgNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIFZPUF9TVEFSVF9DT0RFOgotICAgICAgICBSQ0hFQ0soKyt2b3BfY291bnQgPD0gdmlzdWFsX29iamVjdF9jb3VudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBTa2lwIHRoaXMgYmxvY2suCi0gICAgb2Zmc2V0ICs9IDY7Ci0gIH0KLX0KLQotLy8gQWRkaXRpb25hbCBjaGVja3MgZm9yIGEgTU9WL1F1aWNrVGltZS9NUEVHNCBjb250YWluZXIuCi1zdGF0aWMgYm9vbCBDaGVja01vdihjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IElTTy9JRUMgMTQ0OTYtMTI6MjAwNShFKS4KLSAgLy8gKGh0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pdHRmL1B1YmxpY2x5QXZhaWxhYmxlU3RhbmRhcmRzL2MwNjE5ODhfSVNPX0lFQ18xNDQ5Ni0xMl8yMDEyLnppcCkKLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID4gOCk7Ci0KLSAgaW50IG9mZnNldCA9IDA7Ci0gIHdoaWxlIChvZmZzZXQgKyA4IDwgYnVmZmVyX3NpemUpIHsKLSAgICB1aW50MzJfdCBhdG9tc2l6ZSA9IFJlYWQzMihidWZmZXIgKyBvZmZzZXQpOwotICAgIHVpbnQzMl90IGF0b210eXBlID0gUmVhZDMyKGJ1ZmZlciArIG9mZnNldCArIDQpOwotICAgIC8vIE9ubHkgbmVlZCB0byBjaGVjayBmb3Igb25lcyB0aGF0IGFyZSB2YWxpZCBhdCB0aGUgdG9wIGxldmVsLgotICAgIHN3aXRjaCAoYXRvbXR5cGUpIHsKLSAgICAgIGNhc2UgVEFHKCdmJywgJ3QnLCAneScsICdwJyk6Ci0gICAgICBjYXNlIFRBRygncCcsICdkJywgJ2knLCAnbicpOgotICAgICAgY2FzZSBUQUcoJ20nLCAnbycsICdvJywgJ3YnKToKLSAgICAgIGNhc2UgVEFHKCdtJywgJ28nLCAnbycsICdmJyk6Ci0gICAgICBjYXNlIFRBRygnbScsICdmJywgJ3InLCAnYScpOgotICAgICAgY2FzZSBUQUcoJ20nLCAnZCcsICdhJywgJ3QnKToKLSAgICAgIGNhc2UgVEFHKCdmJywgJ3InLCAnZScsICdlJyk6Ci0gICAgICBjYXNlIFRBRygncycsICdrJywgJ2knLCAncCcpOgotICAgICAgY2FzZSBUQUcoJ20nLCAnZScsICd0JywgJ2EnKToKLSAgICAgIGNhc2UgVEFHKCdtJywgJ2UnLCAnYycsICdvJyk6Ci0gICAgICBjYXNlIFRBRygncycsICd0JywgJ3knLCAncCcpOgotICAgICAgY2FzZSBUQUcoJ3MnLCAnaScsICdkJywgJ3gnKToKLSAgICAgIGNhc2UgVEFHKCdzJywgJ3MnLCAnaScsICd4Jyk6Ci0gICAgICBjYXNlIFRBRygncCcsICdyJywgJ2YnLCAndCcpOgotICAgICAgY2FzZSBUQUcoJ2InLCAnbCcsICdvJywgJ2MnKToKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhdG9tc2l6ZSA9PSAxKSB7Ci0gICAgICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgbGVuZ3RoIGlzIHRoZSBuZXh0IDY0Yml0cy4KLSAgICAgIGlmIChvZmZzZXQgKyAxNiA+IGJ1ZmZlcl9zaXplKSBicmVhazsKLSAgICAgIGlmIChSZWFkMzIoYnVmZmVyICsgb2Zmc2V0ICsgOCkgIT0gMCkKLSAgICAgICAgYnJlYWs7ICAvLyBPZmZzZXQgaXMgd2F5IHBhc3QgYnVmZmVyIHNpemUuCi0gICAgICBhdG9tc2l6ZSA9IFJlYWQzMihidWZmZXIgKyBvZmZzZXQgKyAxMik7Ci0gICAgfQotICAgIGlmIChhdG9tc2l6ZSA9PSAwIHx8IGF0b21zaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXJfc2l6ZSkpCi0gICAgICBicmVhazsgIC8vIEluZGljYXRlcyB0aGUgbGFzdCBhdG9tIG9yIGxlbmd0aCB0b28gYmlnLgotICAgIG9mZnNldCArPSBhdG9tc2l6ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51bSBNUEVHVmVyc2lvbiB7IFZFUlNJT05fMjUgPSAwLCBWRVJTSU9OX1JFU0VSVkVELCBWRVJTSU9OXzIsIFZFUlNJT05fMSB9OwotZW51bSBNUEVHTGF5ZXIgeyBMX1JFU0VSVkVEID0gMCwgTEFZRVJfMywgTEFZRVJfMiwgTEFZRVJfMSB9OwotCi1zdGF0aWMgaW50IGtTYW1wbGVSYXRlVGFibGVbNF1bNF0gPSB7Ci0gICAgezExMDI1LCAxMjAwMCwgODAwMCwgMH0sICAgLy8gdjIuNQotICAgIHswLCAwLCAwLCAwfSwgICAgICAgICAgICAgIC8vIG5vdCB1c2VkCi0gICAgezIyMDUwLCAyNDAwMCwgMTYwMDAsIDB9LCAgLy8gdjIKLSAgICB7NDQxMDAsIDQ4MDAwLCAzMjAwMCwgMH0gICAvLyB2MQotfTsKLQotc3RhdGljIGludCBrQml0UmF0ZVRhYmxlVjFMMVsxNl0gPSB7MCwgICAzMiwgIDY0LCAgOTYsICAxMjgsIDE2MCwgMTkyLCAyMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYsIDI4OCwgMzIwLCAzNTIsIDM4NCwgNDE2LCA0NDgsIDB9Owotc3RhdGljIGludCBrQml0UmF0ZVRhYmxlVjFMMlsxNl0gPSB7MCwgICAzMiwgIDQ4LCAgNTYsICA2NCwgIDgwLCAgOTYsICAxMTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDE2MCwgMTkyLCAyMjQsIDI1NiwgMzIwLCAzODQsIDB9Owotc3RhdGljIGludCBrQml0UmF0ZVRhYmxlVjFMM1sxNl0gPSB7MCwgICAzMiwgIDQwLCAgNDgsICA1NiwgIDY0LCAgODAsICA5NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMiwgMTI4LCAxNjAsIDE5MiwgMjI0LCAyNTYsIDMyMCwgMH07Ci1zdGF0aWMgaW50IGtCaXRSYXRlVGFibGVWMkwxWzE2XSA9IHswLCAgIDMyLCAgNDgsICA1NiwgIDY0LCAgODAsICA5NiwgIDExMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwgMTQ0LCAxNjAsIDE3NiwgMTkyLCAyMjQsIDI1NiwgMH07Ci1zdGF0aWMgaW50IGtCaXRSYXRlVGFibGVWMkwyM1sxNl0gPSB7MCwgIDgsICAxNiwgMjQsICAzMiwgIDQwLCAgNDgsICA1NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwgODAsIDk2LCAxMTIsIDEyOCwgMTQ0LCAxNjAsIDB9OwotCi1zdGF0aWMgYm9vbCBWYWxpZE1wZWdBdWRpb0ZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGhlYWRlciwgaW50IGhlYWRlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGZyYW1lc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly9tcGdlZGl0Lm9yZy9tcGdlZGl0L21wZWdfZm9ybWF0L21wZWdoZHIuaHRtLgotICBEQ0hFQ0tfR0UoaGVhZGVyX3NpemUsIDQpOwotICAqZnJhbWVzaXplID0gMDsKLSAgQml0UmVhZGVyIHJlYWRlcihoZWFkZXIsIDQpOyAgLy8gSGVhZGVyIGNhbiBvbmx5IGJlIDQgYnl0ZXMgbG9uZy4KLQotICAvLyBWZXJpZnkgZnJhbWUgc3luYyAoMTEgYml0cykgYXJlIGFsbCBzZXQuCi0gIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxMSkgPT0gMHg3ZmYpOwotCi0gIC8vIFZlcmlmeSBNUEVHIGF1ZGlvIHZlcnNpb24gaWQuCi0gIGludCB2ZXJzaW9uID0gUmVhZEJpdHMoJnJlYWRlciwgMik7Ci0gIFJDSEVDSyh2ZXJzaW9uICE9IDEpOyAgLy8gUmVzZXJ2ZWQuCi0KLSAgLy8gVmVyaWZ5IGxheWVyLgotICBpbnQgbGF5ZXIgPSBSZWFkQml0cygmcmVhZGVyLCAyKTsKLSAgUkNIRUNLKGxheWVyICE9IDApOwotCi0gIC8vIFNraXAgcHJvdGVjdGlvbiBiaXQuCi0gIHJlYWRlci5Ta2lwQml0cygxKTsKLQotICAvLyBWZXJpZnkgYml0cmF0ZSBpbmRleC4KLSAgaW50IGJpdHJhdGVfaW5kZXggPSBSZWFkQml0cygmcmVhZGVyLCA0KTsKLSAgUkNIRUNLKGJpdHJhdGVfaW5kZXggIT0gMHhmKTsKLQotICAvLyBWZXJpZnkgc2FtcGxpbmcgcmF0ZSBmcmVxdWVuY3kgaW5kZXguCi0gIGludCBzYW1wbGluZ19pbmRleCA9IFJlYWRCaXRzKCZyZWFkZXIsIDIpOwotICBSQ0hFQ0soc2FtcGxpbmdfaW5kZXggIT0gMyk7Ci0KLSAgLy8gR2V0IHBhZGRpbmcgYml0LgotICBpbnQgcGFkZGluZyA9IFJlYWRCaXRzKCZyZWFkZXIsIDEpOwotCi0gIC8vIEZyYW1lIHNpemU6Ci0gIC8vIEZvciBMYXllciBJIGZpbGVzID0gKDEyICogQml0UmF0ZSAvIFNhbXBsZVJhdGUgKyBQYWRkaW5nKSAqIDQKLSAgLy8gRm9yIG90aGVycyA9IDE0NCAqIEJpdFJhdGUgLyBTYW1wbGVSYXRlICsgUGFkZGluZwotICAvLyBVbmZvcnR1bmF0ZWx5LCBCaXRSYXRlIGFuZCBTYW1wbGVSYXRlIGFyZSBjb2RlZC4KLSAgaW50IHNhbXBsaW5nX3JhdGUgPSBrU2FtcGxlUmF0ZVRhYmxlW3ZlcnNpb25dW3NhbXBsaW5nX2luZGV4XTsKLSAgaW50IGJpdHJhdGU7Ci0gIGlmICh2ZXJzaW9uID09IFZFUlNJT05fMSkgewotICAgIGlmIChsYXllciA9PSBMQVlFUl8xKQotICAgICAgYml0cmF0ZSA9IGtCaXRSYXRlVGFibGVWMUwxW2JpdHJhdGVfaW5kZXhdOwotICAgIGVsc2UgaWYgKGxheWVyID09IExBWUVSXzIpCi0gICAgICBiaXRyYXRlID0ga0JpdFJhdGVUYWJsZVYxTDJbYml0cmF0ZV9pbmRleF07Ci0gICAgZWxzZQotICAgICAgYml0cmF0ZSA9IGtCaXRSYXRlVGFibGVWMUwzW2JpdHJhdGVfaW5kZXhdOwotICB9IGVsc2UgewotICAgIGlmIChsYXllciA9PSBMQVlFUl8xKQotICAgICAgYml0cmF0ZSA9IGtCaXRSYXRlVGFibGVWMkwxW2JpdHJhdGVfaW5kZXhdOwotICAgIGVsc2UKLSAgICAgIGJpdHJhdGUgPSBrQml0UmF0ZVRhYmxlVjJMMjNbYml0cmF0ZV9pbmRleF07Ci0gIH0KLSAgaWYgKGxheWVyID09IExBWUVSXzEpCi0gICAgKmZyYW1lc2l6ZSA9ICgoMTIwMDAgKiBiaXRyYXRlKSAvIHNhbXBsaW5nX3JhdGUgKyBwYWRkaW5nKSAqIDQ7Ci0gIGVsc2UKLSAgICAqZnJhbWVzaXplID0gKDE0NDAwMCAqIGJpdHJhdGUpIC8gc2FtcGxpbmdfcmF0ZSArIHBhZGRpbmc7Ci0gIHJldHVybiAoYml0cmF0ZSA+IDAgJiYgc2FtcGxpbmdfcmF0ZSA+IDApOwotfQotCi0vLyBFeHRyYWN0IGEgc2l6ZSBlbmNvZGVkIHRoZSBNUDMgd2F5Lgotc3RhdGljIGludCBHZXRNcDNIZWFkZXJTaXplKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7Ci0gIERDSEVDS19HRShidWZmZXJfc2l6ZSwgOSk7Ci0gIGludCBzaXplID0gKChidWZmZXJbNl0gJiAweDdmKSA8PCAyMSkgKyAoKGJ1ZmZlcls3XSAmIDB4N2YpIDw8IDE0KSArCi0gICAgICAgICAgICAgKChidWZmZXJbOF0gJiAweDdmKSA8PCA3KSArIChidWZmZXJbOV0gJiAweDdmKSArIDEwOwotICBpZiAoYnVmZmVyWzVdICYgMHgxMCkgIC8vIEZvb3RlciBhZGRlZD8KLSAgICBzaXplICs9IDEwOwotICByZXR1cm4gc2l6ZTsKLX0KLQotLy8gQWRkaXRpb25hbCBjaGVja3MgZm9yIGEgTVAzIGNvbnRhaW5lci4KLXN0YXRpYyBib29sIENoZWNrTXAzKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBib29sIHNlZW5IZWFkZXIpIHsKLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID49IDEwKTsgIC8vIE11c3QgYmUgZW5vdWdoIHRvIHJlYWQgdGhlIGluaXRpYWwgaGVhZGVyLgotCi0gIGludCBmcmFtZXNpemU7Ci0gIGludCBudW1TZWVuID0gMDsKLSAgaW50IG9mZnNldCA9IDA7Ci0gIGlmIChzZWVuSGVhZGVyKSB7Ci0gICAgb2Zmc2V0ID0gR2V0TXAzSGVhZGVyU2l6ZShidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBTa2lwIG92ZXIgbGVhZGluZyAwJ3MuCi0gICAgd2hpbGUgKG9mZnNldCA8IGJ1ZmZlcl9zaXplICYmIGJ1ZmZlcltvZmZzZXRdID09IDApICsrb2Zmc2V0OwotICB9Ci0KLSAgd2hpbGUgKG9mZnNldCArIDMgPCBidWZmZXJfc2l6ZSkgewotICAgIFJDSEVDSyhWYWxpZE1wZWdBdWRpb0ZyYW1lSGVhZGVyKGJ1ZmZlciArIG9mZnNldCwgYnVmZmVyX3NpemUgLSBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lc2l6ZSkpOwotCi0gICAgLy8gSGF2ZSB3ZSBzZWVuIGVub3VnaCB2YWxpZCBoZWFkZXJzPwotICAgIGlmICgrK251bVNlZW4gPiAxMCkgcmV0dXJuIHRydWU7Ci0gICAgb2Zmc2V0ICs9IGZyYW1lc2l6ZTsKLSAgfQotICAvLyBPZmYgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZXR1cm4gc3VjY2VzcyBpZiBhIGZldyB2YWxpZCBoZWFkZXJzIHNlZW4uCi0gIHJldHVybiBudW1TZWVuID4gMjsKLX0KLQotLy8gQ2hlY2sgdGhhdCB0aGUgbmV4dCBjaGFyYWN0ZXJzIGluIHxidWZmZXJ8IHJlcHJlc2VudCBhIG51bWJlci4gVGhlIGZvcm1hdAotLy8gYWNjZXB0ZWQgaXMgb3B0aW9uYWwgd2hpdGVzcGFjZSBmb2xsb3dlZCBieSAxIG9yIG1vcmUgZGlnaXRzLiB8bWF4X2RpZ2l0c3wKLS8vIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZGlnaXRzIHRvIHByb2Nlc3MuIFJldHVybnMgdHJ1ZSBpZiBhIHZhbGlkCi0vLyBudW1iZXIgaXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KLXN0YXRpYyBib29sIFZlcmlmeU51bWJlcihjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgaW50KiBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9kaWdpdHMpIHsKLSAgUkNIRUNLKCpvZmZzZXQgPCBidWZmZXJfc2l6ZSk7Ci0KLSAgLy8gU2tpcCBvdmVyIGFueSBsZWFkaW5nIHNwYWNlLgotICB3aGlsZSAoaXNzcGFjZShidWZmZXJbKm9mZnNldF0pKSB7Ci0gICAgKysoKm9mZnNldCk7Ci0gICAgUkNIRUNLKCpvZmZzZXQgPCBidWZmZXJfc2l6ZSk7Ci0gIH0KLQotICAvLyBOZWVkIHRvIHByb2Nlc3MgdXAgdG8gbWF4X2RpZ2l0cyBkaWdpdHMuCi0gIGludCBudW1TZWVuID0gMDsKLSAgd2hpbGUgKC0tbWF4X2RpZ2l0cyA+PSAwICYmIGlzZGlnaXQoYnVmZmVyWypvZmZzZXRdKSkgewotICAgICsrbnVtU2VlbjsKLSAgICArKygqb2Zmc2V0KTsKLSAgICBpZiAoKm9mZnNldCA+PSBidWZmZXJfc2l6ZSkgcmV0dXJuIHRydWU7ICAvLyBPdXQgb2Ygc3BhY2UgYnV0IHNlZW4gYSBkaWdpdC4KLSAgfQotCi0gIC8vIFN1Y2Nlc3MgaWYgYXQgbGVhc3Qgb25lIGRpZ2l0IHNlZW4uCi0gIHJldHVybiAobnVtU2VlbiA+IDApOwotfQotCi0vLyBDaGVjayB0aGF0IHRoZSBuZXh0IGNoYXJhY3RlciBpbiB8YnVmZmVyfCBpcyBvbmUgb2YgfGMxfCBvciB8YzJ8LiB8YzJ8IGlzCi0vLyBvcHRpb25hbC4gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgbWF0Y2gsIGZhbHNlIGlmIG5vIG1hdGNoIG9yIG91dCBvZgotLy8gc3BhY2UuCi1zdGF0aWMgaW5saW5lIGJvb2wgVmVyaWZ5Q2hhcmFjdGVycyhjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogb2Zmc2V0LCBjaGFyIGMxLCBjaGFyIGMyKSB7Ci0gIFJDSEVDSygqb2Zmc2V0IDwgYnVmZmVyX3NpemUpOwotICBjaGFyIGMgPSBzdGF0aWNfY2FzdDxjaGFyPihidWZmZXJbKCpvZmZzZXQpKytdKTsKLSAgcmV0dXJuIChjID09IGMxIHx8IChjID09IGMyICYmIGMyICE9IDApKTsKLX0KLQotLy8gQ2hlY2tzIGZvciBhIFNSVCBjb250YWluZXIuCi1zdGF0aWMgYm9vbCBDaGVja1NydChjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ViUmlwCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDIwKTsKLQotICAvLyBGaXJzdCBsaW5lIHNob3VsZCBqdXN0IGJlIHRoZSBzdWJ0aXRsZSBzZXF1ZW5jZSBudW1iZXIuCi0gIGludCBvZmZzZXQgPSBTdGFydHNXaXRoKGJ1ZmZlciwgYnVmZmVyX3NpemUsIFVURjhfQllURV9PUkRFUl9NQVJLKSA/IDMgOiAwOwotICBSQ0hFQ0soVmVyaWZ5TnVtYmVyKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsIDEwMCkpOwotICBSQ0hFQ0soVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnXG4nLCAnXHInKSk7Ci0KLSAgLy8gU2tpcCBhbnkgYWRkaXRpb25hbCBcblxyLgotICB3aGlsZSAoVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnXG4nLCAnXHInKSkgewotICB9Ci0gIC0tb2Zmc2V0OyAgLy8gU2luY2UgVmVyaWZ5Q2hhcmFjdGVycygpIGdvYmJsZWQgdXAgdGhlIG5leHQgbm9uLUNSL0xGLgotCi0gIC8vIFNlY29uZCBsaW5lIHNob3VsZCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgLy8gICAwMDowMDoxMCw1MDAgLS0+IDAwOjAwOjEzLDAwMAotICAvLyBVbml0cyBzZXBhcmF0b3IgY2FuIGJlICwgb3IgLgotICBSQ0hFQ0soVmVyaWZ5TnVtYmVyKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsIDEwMCkpOwotICBSQ0hFQ0soVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnOicsIDApKTsKLSAgUkNIRUNLKFZlcmlmeU51bWJlcihidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAyKSk7Ci0gIFJDSEVDSyhWZXJpZnlDaGFyYWN0ZXJzKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsICc6JywgMCkpOwotICBSQ0hFQ0soVmVyaWZ5TnVtYmVyKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsIDIpKTsKLSAgUkNIRUNLKFZlcmlmeUNoYXJhY3RlcnMoYnVmZmVyLCBidWZmZXJfc2l6ZSwgJm9mZnNldCwgJywnLCAnLicpKTsKLSAgUkNIRUNLKFZlcmlmeU51bWJlcihidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAzKSk7Ci0gIFJDSEVDSyhWZXJpZnlDaGFyYWN0ZXJzKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsICcgJywgMCkpOwotICBSQ0hFQ0soVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnLScsIDApKTsKLSAgUkNIRUNLKFZlcmlmeUNoYXJhY3RlcnMoYnVmZmVyLCBidWZmZXJfc2l6ZSwgJm9mZnNldCwgJy0nLCAwKSk7Ci0gIFJDSEVDSyhWZXJpZnlDaGFyYWN0ZXJzKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsICc+JywgMCkpOwotICBSQ0hFQ0soVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnICcsIDApKTsKLSAgUkNIRUNLKFZlcmlmeU51bWJlcihidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAxMDApKTsKLSAgUkNIRUNLKFZlcmlmeUNoYXJhY3RlcnMoYnVmZmVyLCBidWZmZXJfc2l6ZSwgJm9mZnNldCwgJzonLCAwKSk7Ci0gIFJDSEVDSyhWZXJpZnlOdW1iZXIoYnVmZmVyLCBidWZmZXJfc2l6ZSwgJm9mZnNldCwgMikpOwotICBSQ0hFQ0soVmVyaWZ5Q2hhcmFjdGVycyhidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAnOicsIDApKTsKLSAgUkNIRUNLKFZlcmlmeU51bWJlcihidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCAyKSk7Ci0gIFJDSEVDSyhWZXJpZnlDaGFyYWN0ZXJzKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsICcsJywgJy4nKSk7Ci0gIFJDSEVDSyhWZXJpZnlOdW1iZXIoYnVmZmVyLCBidWZmZXJfc2l6ZSwgJm9mZnNldCwgMykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUmVhZCBhIE1hdHJvc2thIEVsZW1lbnQgSWQuCi1zdGF0aWMgaW50IEdldEVsZW1lbnRJZChCaXRSZWFkZXIqIHJlYWRlcikgewotICAvLyBFbGVtZW50IElEIGlzIGNvZGVkIHdpdGggdGhlIGxlYWRpbmcgemVybyBiaXRzIChtYXggMykgZGV0ZXJtaW5pbmcgc2l6ZS4KLSAgLy8gSWYgaXQgaXMgYW4gaW52YWxpZCBlbmNvZGluZyBvciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgcmVhY2hlZCwKLSAgLy8gcmV0dXJuIC0xIGFzIGEgdGFnIHRoYXQgd29uJ3QgYmUgZXhwZWN0ZWQuCi0gIGlmIChyZWFkZXItPmJpdHNfYXZhaWxhYmxlKCkgPj0gOCkgewotICAgIGludCBudW1fYml0c190b19yZWFkID0gMDsKLSAgICBzdGF0aWMgaW50IHByZWZpeFtdID0gezB4ODAsIDB4NDAwMCwgMHgyMDAwMDAsIDB4MTAwMDAwMDB9OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICBudW1fYml0c190b19yZWFkICs9IDc7Ci0gICAgICBpZiAoUmVhZEJpdHMocmVhZGVyLCAxKSA9PSAxKSB7Ci0gICAgICAgIGlmIChyZWFkZXItPmJpdHNfYXZhaWxhYmxlKCkgPCBudW1fYml0c190b19yZWFkKSBicmVhazsKLSAgICAgICAgLy8gcHJlZml4W10gYWRkcyBiYWNrIHRoZSBiaXRzIHJlYWQgaW5kaXZpZHVhbGx5LgotICAgICAgICByZXR1cm4gUmVhZEJpdHMocmVhZGVyLCBudW1fYml0c190b19yZWFkKSB8IHByZWZpeFtpXTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLy8gSW52YWxpZCBlbmNvZGluZywgcmV0dXJuIHNvbWV0aGluZyBub3QgZXhwZWN0ZWQuCi0gIHJldHVybiAtMTsKLX0KLQotLy8gUmVhZCBhIE1hdHJvc2thIFVuc2lnbmVkIEludGVnZXIgKFZJTlQpLgotc3RhdGljIHVpbnQ2NF90IEdldFZpbnQoQml0UmVhZGVyKiByZWFkZXIpIHsKLSAgLy8gVmFsdWVzIGFyZSBjb2RlZCB3aXRoIHRoZSBsZWFkaW5nIHplcm8gYml0cyAobWF4IDcpIGRldGVybWluaW5nIHNpemUuCi0gIC8vIElmIGl0IGlzIGFuIGludmFsaWQgY29kaW5nIG9yIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBpcyByZWFjaGVkLAotICAvLyByZXR1cm4gc29tZXRoaW5nIHRoYXQgd2lsbCBnbyBvZmYgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICBpZiAocmVhZGVyLT5iaXRzX2F2YWlsYWJsZSgpID49IDgpIHsKLSAgICBpbnQgbnVtX2JpdHNfdG9fcmVhZCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKLSAgICAgIG51bV9iaXRzX3RvX3JlYWQgKz0gNzsKLSAgICAgIGlmIChSZWFkQml0cyhyZWFkZXIsIDEpID09IDEpIHsKLSAgICAgICAgaWYgKHJlYWRlci0+Yml0c19hdmFpbGFibGUoKSA8IG51bV9iaXRzX3RvX3JlYWQpIGJyZWFrOwotICAgICAgICByZXR1cm4gUmVhZEJpdHMocmVhZGVyLCBudW1fYml0c190b19yZWFkKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgLy8gSW5jb3JyZWN0IGZvcm1hdCAobW9yZSB0aGFuIDcgbGVhZGluZyAwJ3MpIG9yIG9mZiB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gIC8vIFNpbmNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCBhcyBhIGJ5dGUgc2l6ZSwgcmV0dXJuIGEgdmFsdWUgdGhhdCB3aWxsCi0gIC8vIGNhdXNlIGEgZmFpbHVyZSB3aGVuIHVzZWQuCi0gIHJldHVybiAocmVhZGVyLT5iaXRzX2F2YWlsYWJsZSgpIC8gOCkgKyAyOwotfQotCi0vLyBBZGRpdGlvbmFsIGNoZWNrcyBmb3IgYSBXRUJNIGNvbnRhaW5lci4KLXN0YXRpYyBib29sIENoZWNrV2VibShjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgewotICAvLyBSZWZlcmVuY2U6IGh0dHA6Ly93d3cubWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9pbmRleC5odG1sCi0gIFJDSEVDSyhidWZmZXJfc2l6ZSA+IDEyKTsKLQotICBCaXRSZWFkZXIgcmVhZGVyKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwotCi0gIC8vIFZlcmlmeSBzdGFydGluZyBFbGVtZW50IElkLgotICBSQ0hFQ0soR2V0RWxlbWVudElkKCZyZWFkZXIpID09IDB4MWE0NWRmYTMpOwotCi0gIC8vIEdldCB0aGUgaGVhZGVyIHNpemUsIGFuZCBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaCBiaXRzIHRvIGNoZWNrLgotICAvLyBVc2luZyBzYXR1cmF0ZWRfY2FzdDw+IGluIGNhc2UgdGhlIHNpemUgcmVhZCBpcyByZWFsbHkgbGFyZ2UKLSAgLy8gKGluIHdoaWNoIGNhc2UgdGhlIGJpdHNfYXZhaWxhYmxlKCkgY2hlY2sgd2lsbCBmYWlsKS4KLSAgaW50IGhlYWRlcl9zaXplID0gYmFzZTo6c2F0dXJhdGVkX2Nhc3Q8aW50PihHZXRWaW50KCZyZWFkZXIpKTsKLSAgUkNIRUNLKHJlYWRlci5iaXRzX2F2YWlsYWJsZSgpIC8gOCA+PSBoZWFkZXJfc2l6ZSk7Ci0KLSAgLy8gTG9vcCB0aHJvdWdoIHRoZSBoZWFkZXIuCi0gIHdoaWxlIChyZWFkZXIuYml0c19hdmFpbGFibGUoKSA+IDApIHsKLSAgICBpbnQgdGFnID0gR2V0RWxlbWVudElkKCZyZWFkZXIpOwotICAgIGludCB0YWdzaXplID0gYmFzZTo6c2F0dXJhdGVkX2Nhc3Q8aW50PihHZXRWaW50KCZyZWFkZXIpKTsKLSAgICBzd2l0Y2ggKHRhZykgewotICAgICAgY2FzZSAweDQyODY6ICAvLyBFQk1MVmVyc2lvbgotICAgICAgY2FzZSAweDQyZjc6ICAvLyBFQk1MUmVhZFZlcnNpb24KLSAgICAgIGNhc2UgMHg0MmYyOiAgLy8gRUJNTE1heElkTGVuZ3RoCi0gICAgICBjYXNlIDB4NDJmMzogIC8vIEVCTUxNYXhTaXplTGVuZ3RoCi0gICAgICBjYXNlIDB4NDI4NzogIC8vIERvY1R5cGVWZXJzaW9uCi0gICAgICBjYXNlIDB4NDI4NTogIC8vIERvY1R5cGVSZWFkVmVyc2lvbgotICAgICAgY2FzZSAweGVjOiAgICAvLyB2b2lkCi0gICAgICBjYXNlIDB4YmY6ICAgIC8vIENSQzMyCi0gICAgICAgIFJDSEVDSyhyZWFkZXIuYml0c19hdmFpbGFibGUoKSAvIDggPj0gdGFnc2l6ZSk7Ci0gICAgICAgIFJDSEVDSyhyZWFkZXIuU2tpcEJpdHModGFnc2l6ZSAqIDgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHg0MjgyOiAgLy8gRUJNTERvY1R5cGUKLSAgICAgICAgLy8gTmVlZCB0byBzZWUgIndlYm0iIG9yICJtYXRyb3NrYSIgbmV4dC4KLSAgICAgICAgUkNIRUNLKHJlYWRlci5iaXRzX2F2YWlsYWJsZSgpID49IDMyKTsKLSAgICAgICAgc3dpdGNoIChSZWFkQml0cygmcmVhZGVyLCAzMikpIHsKLSAgICAgICAgICBjYXNlIFRBRygndycsICdlJywgJ2InLCAnbScpOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBUQUcoJ20nLCAnYScsICd0JywgJ3InKToKLSAgICAgICAgICAgIFJDSEVDSyhyZWFkZXIuYml0c19hdmFpbGFibGUoKSA+PSAzMik7Ci0gICAgICAgICAgICByZXR1cm4gKFJlYWRCaXRzKCZyZWFkZXIsIDMyKSA9PSBUQUcoJ28nLCAncycsICdrJywgJ2EnKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBkZWZhdWx0OiAgLy8gVW5yZWNvZ25pemVkIHRhZwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZW51bSBWQzFTdGFydENvZGVzIHsKLSAgVkMxX0ZSQU1FX1NUQVJUX0NPREUgPSAweDBkLAotICBWQzFfRU5UUllfUE9JTlRfU1RBUlRfQ09ERSA9IDB4MGUsCi0gIFZDMV9TRVFVRU5DRV9TVEFSVF9DT0RFID0gMHgwZgotfTsKLQotLy8gQ2hlY2tzIGZvciBhIFZDMSBiaXRzdHJlYW0gY29udGFpbmVyLgotc3RhdGljIGJvb2wgQ2hlY2tWQzEoY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gUmVmZXJlbmNlOiBTTVBURSA0MjFNCi0gIC8vIChodHRwOi8vc3RhbmRhcmRzLnNtcHRlLm9yZy9jb250ZW50Lzk3OC0xLTYxNDgyLTU1NS01L3N0LTQyMS0yMDA2L1NFQzEuYm9keS5wZGYpCi0gIC8vIEhvd2V2ZXIsIG5vIGxlbmd0aCAuLi4gc2ltcGx5IHNjYW4gZm9yIHN0YXJ0IGNvZGUgdmFsdWVzLgotICAvLyBFeHBlY3QgdG8gc2VlIFNFUSB8IFsgWyBFTlRSWSBdIFBJQyogXSoKLSAgLy8gTm90ZSB0YWdzIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gSC4yNjQuCi0KLSAgUkNIRUNLKGJ1ZmZlcl9zaXplID49IDI0KTsKLQotICAvLyBGaXJzdCBjaGVjayBmb3IgQml0c3RyZWFtIE1ldGFkYXRhIFNlcmlhbGl6YXRpb24gKEFubmV4IEwpCi0gIGlmIChidWZmZXJbMF0gPT0gMHhjNSAmJiBSZWFkMzIoYnVmZmVyICsgNCkgPT0gMHgwNCAmJgotICAgICAgUmVhZDMyKGJ1ZmZlciArIDIwKSA9PSAweDBjKSB7Ci0gICAgLy8gVmVyaWZ5IHNldHRpbmdzIGluIFNUUlVDVF9DIGFuZCBTVFJVQ1RfQQotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgOCwgMTIpOwotCi0gICAgaW50IHByb2ZpbGUgPSBSZWFkQml0cygmcmVhZGVyLCA0KTsKLSAgICBpZiAocHJvZmlsZSA9PSAwIHx8IHByb2ZpbGUgPT0gNCkgeyAgLy8gc2ltcGxlIG9yIG1haW4KLSAgICAgIC8vIFNraXAgRlJNUlRRX1BPU1RQUk9DLCBCSVRSVFFfUE9TVFBST0MsIGFuZCBMT09QRklMVEVSLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDMgKyA1ICsgMSk7Ci0KLSAgICAgIC8vIE5leHQgYml0IG11c3QgYmUgMC4KLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAwKTsKLQotICAgICAgLy8gU2tpcCBNVUxUSVJFUy4KLSAgICAgIHJlYWRlci5Ta2lwQml0cygxKTsKLQotICAgICAgLy8gTmV4dCBiaXQgbXVzdCBiZSAxLgotICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDEpID09IDEpOwotCi0gICAgICAvLyBTa2lwIEZBU1RVVk1DLCBFWFRFTkRFRF9NViwgRFFVQU5ULCBhbmQgVlNUUkFOU0ZPUk0uCi0gICAgICByZWFkZXIuU2tpcEJpdHMoMSArIDEgKyAyICsgMSk7Ci0KLSAgICAgIC8vIE5leHQgYml0IG11c3QgYmUgMC4KLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAwKTsKLQotICAgICAgLy8gU2tpcCBPVkVSTEFQLCBTWU5DTUFSS0VSLCBSQU5HRVJFRCwgTUFYQkZSQU1FUywgUVVBTlRJWkVSLCBhbmQKLSAgICAgIC8vIEZJTlRFUlBGTEFHLgotICAgICAgcmVhZGVyLlNraXBCaXRzKDEgKyAxICsgMSArIDMgKyAyICsgMSk7Ci0KLSAgICAgIC8vIE5leHQgYml0IG11c3QgYmUgMS4KLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAxKSA9PSAxKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICBSQ0hFQ0socHJvZmlsZSA9PSAxMik7ICAvLyBPdGhlciBwcm9maWxlIHZhbHVlcyBub3QgYWxsb3dlZC4KLSAgICAgIFJDSEVDSyhSZWFkQml0cygmcmVhZGVyLCAyOCkgPT0gMCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGNoZWNrIEhPUklaX1NJWkUgYW5kIFZFUlRfU0laRSwgd2hpY2ggbXVzdCBiZSA4MTkyIG9yIGxlc3MuCi0gICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDMyKSA8PSA4MTkyKTsKLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMzIpIDw9IDgxOTIpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gQnVmZmVyIGlzbid0IEJpdHN0cmVhbSBNZXRhZGF0YSwgc28gc2NhbiBmb3Igc3RhcnQgY29kZXMuCi0gIGludCBvZmZzZXQgPSAwOwotICBpbnQgc2VxdWVuY2Vfc3RhcnRfY29kZSA9IDA7Ci0gIGludCBmcmFtZV9zdGFydF9jb2RlID0gMDsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyBBZHZhbmNlIHRvIHN0YXJ0X2NvZGUsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAoIUFkdmFuY2VUb1N0YXJ0Q29kZShidWZmZXIsIGJ1ZmZlcl9zaXplLCAmb2Zmc2V0LCA1LCAyNCwgMSkpIHsKLSAgICAgIC8vIE5vdCBhIGNvbXBsZXRlIHNlcXVlbmNlIGluIG1lbW9yeSwgc28gcmV0dXJuIHRydWUgaWYgd2UndmUgc2VlbiBhCi0gICAgICAvLyBzZXF1ZW5jZSBzdGFydCBhbmQgYSBmcmFtZSBzdGFydCAobm90IGNoZWNraW5nIGVudHJ5IHBvaW50cyBzaW5jZQotICAgICAgLy8gdGhleSBvbmx5IG9jY3VyIGluIGFkdmFuY2VkIHByb2ZpbGVzKS4KLSAgICAgIHJldHVybiAoc2VxdWVuY2Vfc3RhcnRfY29kZSA+IDAgJiYgZnJhbWVfc3RhcnRfY29kZSA+IDApOwotICAgIH0KLQotICAgIC8vIE5vdyB2ZXJpZnkgdGhlIGJsb2NrLiBBZHZhbmNlVG9TdGFydENvZGUoKSBtYWRlIHN1cmUgdGhhdCB0aGVyZSBhcmUKLSAgICAvLyBhdCBsZWFzdCA1IGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgYnVmZmVyLgotICAgIEJpdFJlYWRlciByZWFkZXIoYnVmZmVyICsgb2Zmc2V0LCA1KTsKLSAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMjQpID09IDEpOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGNlcnRhaW4gdHlwZXMgcmVjZWl2ZWQuCi0gICAgc3dpdGNoIChSZWFkQml0cygmcmVhZGVyLCA4KSkgewotICAgICAgY2FzZSBWQzFfU0VRVUVOQ0VfU1RBUlRfQ09ERTogewotICAgICAgICArK3NlcXVlbmNlX3N0YXJ0X2NvZGU7Ci0gICAgICAgIHN3aXRjaCAoUmVhZEJpdHMoJnJlYWRlciwgMikpIHsKLSAgICAgICAgICBjYXNlIDA6ICAvLyBzaW1wbGUKLSAgICAgICAgICBjYXNlIDE6ICAvLyBtYWluCi0gICAgICAgICAgICBSQ0hFQ0soUmVhZEJpdHMoJnJlYWRlciwgMikgPT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6ICAvLyBjb21wbGV4Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZHZhbmNlZAotICAgICAgICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDMpIDw9IDQpOyAgLy8gVmVyaWZ5IGxldmVsID0gMC4uNAotICAgICAgICAgICAgUkNIRUNLKFJlYWRCaXRzKCZyZWFkZXIsIDIpID09IDEpOyAgLy8gVmVyaWZ5IGNvbG9yZGlmZl9mb3JtYXQgPSAxCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgY2FzZSBWQzFfRU5UUllfUE9JTlRfU1RBUlRfQ09ERToKLSAgICAgICAgLy8gTm8gZmllbGRzIGluIGVudHJ5IGRhdGEgdG8gY2hlY2suIEhvd2V2ZXIsIGl0IG11c3Qgb2NjdXIgYWZ0ZXIKLSAgICAgICAgLy8gc2VxdWVuY2UgaGVhZGVyLgotICAgICAgICBSQ0hFQ0soc2VxdWVuY2Vfc3RhcnRfY29kZSA+IDApOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBWQzFfRlJBTUVfU1RBUlRfQ09ERToKLSAgICAgICAgKytmcmFtZV9zdGFydF9jb2RlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgb2Zmc2V0ICs9IDU7Ci0gIH0KLX0KLQotLy8gRm9yIHNvbWUgZm9ybWF0cyB0aGUgc2lnbmF0dXJlIGlzIGEgYnVuY2ggb2YgY2hhcmFjdGVycy4gVGhleSBhcmUgZGVmaW5lZAotLy8gYmVsb3cuIE5vdGUgdGhhdCB0aGUgZmlyc3QgNCBjaGFyYWN0ZXJzIG9mIHRoZSBzdHJpbmcgbWF5IGJlIHVzZWQgYXMgYSBUQUcKLS8vIGluIExvb2t1cENvbnRhaW5lckJ5Rmlyc3Q0LiBGb3Igc2lnbmF0dXJlcyB0aGF0IGNvbnRhaW4gZW1iZWRkZWQgXDAsIHVzZQotLy8gdWludDhfdFtdLgotc3RhdGljIGNvbnN0IGNoYXIga0FtclNpZ25hdHVyZVtdID0gIiMhQU1SIjsKLXN0YXRpYyBjb25zdCB1aW50OF90IGtBc2ZTaWduYXR1cmVbXSA9IHsweDMwLCAweDI2LCAweGIyLCAweDc1LCAweDhlLCAweDY2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Y2YsIDB4MTEsIDB4YTYsIDB4ZDksIDB4MDAsIDB4YWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHg2MiwgMHhjZSwgMHg2Y307Ci1zdGF0aWMgY29uc3QgY2hhciBrQXNzU2lnbmF0dXJlW10gPSAiW1NjcmlwdCBJbmZvXSI7Ci1zdGF0aWMgY29uc3QgY2hhciBrQXNzQm9tU2lnbmF0dXJlW10gPSBVVEY4X0JZVEVfT1JERVJfTUFSSyAiW1NjcmlwdCBJbmZvXSI7Ci1zdGF0aWMgY29uc3QgdWludDhfdCBrV3R2U2lnbmF0dXJlW10gPSB7MHhiNywgMHhkOCwgMHgwMCwgMHgyMCwgMHgzNywgMHg0OSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGRhLCAweDExLCAweGE2LCAweDRlLCAweDAwLCAweDA3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZTksIDB4NWUsIDB4YWQsIDB4OGR9OwotCi0vLyBBdHRlbXB0IHRvIGRldGVybWluZSB0aGUgY29udGFpbmVyIHR5cGUgZnJvbSB0aGUgYnVmZmVyIHByb3ZpZGVkLiBUaGlzIGlzCi0vLyBhIHNpbXBsZSBwYXNzLCB0aGF0IHVzZXMgdGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhlIGJ1ZmZlciBhcyBhbiBpbmRleCB0byBnZXQKLS8vIGEgcm91Z2ggaWRlYSBvZiB0aGUgY29udGFpbmVyIGZvcm1hdC4KLXN0YXRpYyBNZWRpYUNvbnRhaW5lck5hbWUgTG9va3VwQ29udGFpbmVyQnlGaXJzdDQoY29uc3QgdWludDhfdCogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX3NpemUpIHsKLSAgLy8gTWluaW11bSBzaXplIHRoYXQgdGhlIGNvZGUgZXhwZWN0cyB0byBleGlzdCB3aXRob3V0IGNoZWNraW5nIHNpemUuCi0gIGlmIChidWZmZXJfc2l6ZSA8IDEyKSByZXR1cm4gQ09OVEFJTkVSX1VOS05PV047Ci0KLSAgdWludDMyX3QgZmlyc3Q0ID0gUmVhZDMyKGJ1ZmZlcik7Ci0gIHN3aXRjaCAoZmlyc3Q0KSB7Ci0gICAgY2FzZSAweDFhNDVkZmEzOgotICAgICAgaWYgKENoZWNrV2VibShidWZmZXIsIGJ1ZmZlcl9zaXplKSkgcmV0dXJuIENPTlRBSU5FUl9XRUJNOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDB4MzAyNmIyNzU6Ci0gICAgICBpZiAoU3RhcnRzV2l0aChidWZmZXIsIGJ1ZmZlcl9zaXplLCBrQXNmU2lnbmF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtBc2ZTaWduYXR1cmUpKSkgewotICAgICAgICByZXR1cm4gQ09OVEFJTkVSX0FTRjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJyMnLCAnIScsICdBJywgJ00nKToKLSAgICAgIGlmIChTdGFydHNXaXRoKGJ1ZmZlciwgYnVmZmVyX3NpemUsIGtBbXJTaWduYXR1cmUpKSByZXR1cm4gQ09OVEFJTkVSX0FNUjsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJyMnLCAnRScsICdYJywgJ1QnKToKLSAgICAgIGlmIChDaGVja0hscyhidWZmZXIsIGJ1ZmZlcl9zaXplKSkgcmV0dXJuIENPTlRBSU5FUl9ITFM7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVEFHKCcuJywgJ1InLCAnTScsICdGJyk6Ci0gICAgICBpZiAoYnVmZmVyWzRdID09IDAgJiYgYnVmZmVyWzVdID09IDApIHJldHVybiBDT05UQUlORVJfUk07Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVEFHKCcuJywgJ3InLCAnYScsICdceGZkJyk6Ci0gICAgICByZXR1cm4gQ09OVEFJTkVSX1JNOwotCi0gICAgY2FzZSBUQUcoJ0InLCAnSScsICdLJywgJ2InKToKLSAgICBjYXNlIFRBRygnQicsICdJJywgJ0snLCAnZCcpOgotICAgIGNhc2UgVEFHKCdCJywgJ0knLCAnSycsICdmJyk6Ci0gICAgY2FzZSBUQUcoJ0InLCAnSScsICdLJywgJ2cnKToKLSAgICBjYXNlIFRBRygnQicsICdJJywgJ0snLCAnaCcpOgotICAgIGNhc2UgVEFHKCdCJywgJ0knLCAnSycsICdpJyk6Ci0gICAgICBpZiAoQ2hlY2tCaW5rKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0JJTks7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVEFHKCdjJywgJ2EnLCAnZicsICdmJyk6Ci0gICAgICBpZiAoQ2hlY2tDYWYoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfQ0FGOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRBRygnRCcsICdFJywgJ1gnLCAnQScpOgotICAgICAgaWYgKGJ1ZmZlcl9zaXplID4gMTUgJiYgUmVhZDE2KGJ1ZmZlciArIDExKSA8PSAyMDQ4ICYmCi0gICAgICAgICAgUmVhZDE2KGJ1ZmZlciArIDEzKSA8PSAyMDQ4KSB7Ci0gICAgICAgIHJldHVybiBDT05UQUlORVJfRFhBOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRBRygnRCcsICdUJywgJ1MnLCAnSCcpOgotICAgICAgaWYgKFJlYWQzMihidWZmZXIgKyA0KSA9PSBUQUcoJ0QnLCAnSCcsICdEJywgJ1InKSkgcmV0dXJuIENPTlRBSU5FUl9EVFNIRDsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDY0YTMwMTAwOgotICAgIGNhc2UgMHg2NGEzMDIwMDoKLSAgICBjYXNlIDB4NjRhMzAzMDA6Ci0gICAgY2FzZSAweDY0YTMwNDAwOgotICAgIGNhc2UgMHgwMDAxYTM2NDoKLSAgICBjYXNlIDB4MDAwMmEzNjQ6Ci0gICAgY2FzZSAweDAwMDNhMzY0OgotICAgICAgaWYgKFJlYWQzMihidWZmZXIgKyA0KSAhPSAwICYmIFJlYWQzMihidWZmZXIgKyA4KSAhPSAwKQotICAgICAgICByZXR1cm4gQ09OVEFJTkVSX0lSQ0FNOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRBRygnZicsICdMJywgJ2EnLCAnQycpOgotICAgICAgcmV0dXJuIENPTlRBSU5FUl9GTEFDOwotCi0gICAgY2FzZSBUQUcoJ0YnLCAnTCcsICdWJywgMCk6Ci0gICAgY2FzZSBUQUcoJ0YnLCAnTCcsICdWJywgMSk6Ci0gICAgY2FzZSBUQUcoJ0YnLCAnTCcsICdWJywgMik6Ci0gICAgY2FzZSBUQUcoJ0YnLCAnTCcsICdWJywgMyk6Ci0gICAgY2FzZSBUQUcoJ0YnLCAnTCcsICdWJywgNCk6Ci0gICAgICBpZiAoYnVmZmVyWzVdID09IDAgJiYgUmVhZDMyKGJ1ZmZlciArIDUpID4gOCkgcmV0dXJuIENPTlRBSU5FUl9GTFY7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgVEFHKCdGJywgJ08nLCAnUicsICdNJyk6Ci0gICAgICBzd2l0Y2ggKFJlYWQzMihidWZmZXIgKyA4KSkgewotICAgICAgICBjYXNlIFRBRygnQScsICdJJywgJ0YnLCAnRicpOgotICAgICAgICBjYXNlIFRBRygnQScsICdJJywgJ0YnLCAnQycpOgotICAgICAgICAgIHJldHVybiBDT05UQUlORVJfQUlGRjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJ00nLCAnQScsICdDJywgJyAnKToKLSAgICAgIHJldHVybiBDT05UQUlORVJfQVBFOwotCi0gICAgY2FzZSBUQUcoJ08nLCAnTicsICcyJywgJyAnKToKLSAgICAgIGlmIChSZWFkMzIoYnVmZmVyICsgOCkgPT0gVEFHKCdPJywgJ04nLCAnMicsICdmJykpIHJldHVybiBDT05UQUlORVJfQVZJOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRBRygnTycsICdnJywgJ2cnLCAnUycpOgotICAgICAgaWYgKGJ1ZmZlcls1XSA8PSA3KSByZXR1cm4gQ09OVEFJTkVSX09HRzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJ1InLCAnRicsICc2JywgJzQnKToKLSAgICAgIGlmIChidWZmZXJfc2l6ZSA+IDE2ICYmIFJlYWQzMihidWZmZXIgKyAxMikgPT0gVEFHKCdkJywgJ3MnLCAnNicsICc0JykpCi0gICAgICAgIHJldHVybiBDT05UQUlORVJfV0FWOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRBRygnUicsICdJJywgJ0YnLCAnRicpOgotICAgICAgc3dpdGNoIChSZWFkMzIoYnVmZmVyICsgOCkpIHsKLSAgICAgICAgY2FzZSBUQUcoJ0EnLCAnVicsICdJJywgJyAnKToKLSAgICAgICAgY2FzZSBUQUcoJ0EnLCAnVicsICdJJywgJ1gnKToKLSAgICAgICAgY2FzZSBUQUcoJ0EnLCAnVicsICdJJywgJ1x4MTknKToKLSAgICAgICAgY2FzZSBUQUcoJ0EnLCAnTScsICdWJywgJyAnKToKLSAgICAgICAgICByZXR1cm4gQ09OVEFJTkVSX0FWSTsKLSAgICAgICAgY2FzZSBUQUcoJ1cnLCAnQScsICdWJywgJ0UnKToKLSAgICAgICAgICByZXR1cm4gQ09OVEFJTkVSX1dBVjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJ1snLCAnUycsICdjJywgJ3InKToKLSAgICAgIGlmIChTdGFydHNXaXRoKGJ1ZmZlciwgYnVmZmVyX3NpemUsIGtBc3NTaWduYXR1cmUpKSByZXR1cm4gQ09OVEFJTkVSX0FTUzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUQUcoJ1x4ZWYnLCAnXHhiYicsICdceGJmJywgJ1snKToKLSAgICAgIGlmIChTdGFydHNXaXRoKGJ1ZmZlciwgYnVmZmVyX3NpemUsIGtBc3NCb21TaWduYXR1cmUpKQotICAgICAgICByZXR1cm4gQ09OVEFJTkVSX0FTUzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweDdmZmU4MDAxOgotICAgIGNhc2UgMHhmZTdmMDE4MDoKLSAgICBjYXNlIDB4MWZmZmU4MDA6Ci0gICAgY2FzZSAweGZmMWYwMGU4OgotICAgICAgaWYgKENoZWNrRHRzKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0RUUzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSAweGI3ZDgwMDIwOgotICAgICAgaWYgKFN0YXJ0c1dpdGgoYnVmZmVyLCBidWZmZXJfc2l6ZSwga1d0dlNpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrV3R2U2lnbmF0dXJlKSkpIHsKLSAgICAgICAgcmV0dXJuIENPTlRBSU5FUl9XVFY7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8vIE5vdyB0cnkgYSBmZXcgZGlmZmVyZW50IG9uZXMgdGhhdCBsb29rIGF0IHNvbWV0aGluZyBvdGhlcgotICAvLyB0aGFuIHRoZSBmaXJzdCA0IGJ5dGVzLgotICB1aW50MzJfdCBmaXJzdDMgPSBmaXJzdDQgJiAweGZmZmZmZjAwOwotICBzd2l0Y2ggKGZpcnN0MykgewotICAgIGNhc2UgVEFHKCdDJywgJ1cnLCAnUycsIDApOgotICAgIGNhc2UgVEFHKCdGJywgJ1cnLCAnUycsIDApOgotICAgICAgcmV0dXJuIENPTlRBSU5FUl9TV0Y7Ci0KLSAgICBjYXNlIFRBRygnSScsICdEJywgJzMnLCAwKToKLSAgICAgIGlmIChDaGVja01wMyhidWZmZXIsIGJ1ZmZlcl9zaXplLCB0cnVlKSkgcmV0dXJuIENPTlRBSU5FUl9NUDM7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIC8vIE1heWJlIHRoZSBmaXJzdCAyIGNoYXJhY3RlcnMgYXJlIHNvbWV0aGluZyB3ZSBjYW4gdXNlLgotICB1aW50MzJfdCBmaXJzdDIgPSBSZWFkMTYoYnVmZmVyKTsKLSAgc3dpdGNoIChmaXJzdDIpIHsKLSAgICBjYXNlIGtBYzNTeW5jV29yZDoKLSAgICAgIGlmIChDaGVja0FjMyhidWZmZXIsIGJ1ZmZlcl9zaXplKSkgcmV0dXJuIENPTlRBSU5FUl9BQzM7Ci0gICAgICBpZiAoQ2hlY2tFYWMzKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0VBQzM7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMHhmZmYwOgotICAgIGNhc2UgMHhmZmYxOgotICAgIGNhc2UgMHhmZmY4OgotICAgIGNhc2UgMHhmZmY5OgotICAgICAgaWYgKENoZWNrQWFjKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0FBQzsKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaXMgaW4gTVAzIGZvcm1hdCB3aXRob3V0IHRoZSBoZWFkZXIuCi0gIGlmIChDaGVja01wMyhidWZmZXIsIGJ1ZmZlcl9zaXplLCBmYWxzZSkpIHJldHVybiBDT05UQUlORVJfTVAzOwotCi0gIHJldHVybiBDT05UQUlORVJfVU5LTk9XTjsKLX0KLQotLy8gQXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGNvbnRhaW5lciBuYW1lIGZyb20gdGhlIGJ1ZmZlciBwcm92aWRlZC4KLU1lZGlhQ29udGFpbmVyTmFtZSBEZXRlcm1pbmVDb250YWluZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKLSAgRENIRUNLKGJ1ZmZlcik7Ci0KLSAgLy8gU2luY2UgTU9WL1F1aWNrVGltZS9NUEVHNCBzdHJlYW1zIGFyZSBjb21tb24sIGNoZWNrIGZvciB0aGVtIGZpcnN0LgotICBpZiAoQ2hlY2tNb3YoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfTU9WOwotCi0gIC8vIE5leHQgYXR0ZW1wdCB0aGUgc2ltcGxlIGNoZWNrcywgdGhhdCB0eXBpY2FsbHkgbG9vayBhdCBqdXN0IHRoZQotICAvLyBmaXJzdCBmZXcgYnl0ZXMgb2YgdGhlIGZpbGUuCi0gIE1lZGlhQ29udGFpbmVyTmFtZSByZXN1bHQgPSBMb29rdXBDb250YWluZXJCeUZpcnN0NChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKLSAgaWYgKHJlc3VsdCAhPSBDT05UQUlORVJfVU5LTk9XTikgcmV0dXJuIHJlc3VsdDsKLQotICAvLyBBZGRpdGlvbmFsIGNoZWNrcyB0aGF0IG1heSBzY2FuIGEgcG9ydGlvbiBvZiB0aGUgYnVmZmVyLgotICBpZiAoQ2hlY2tNcGVnMlByb2dyYW1TdHJlYW0oYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfTVBFRzJQUzsKLSAgaWYgKENoZWNrTXBlZzJUcmFuc3BvcnRTdHJlYW0oYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfTVBFRzJUUzsKLSAgaWYgKENoZWNrTUpwZWcoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfTUpQRUc7Ci0gIGlmIChDaGVja0RWKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0RWOwotICBpZiAoQ2hlY2tIMjYxKGJ1ZmZlciwgYnVmZmVyX3NpemUpKSByZXR1cm4gQ09OVEFJTkVSX0gyNjE7Ci0gIGlmIChDaGVja0gyNjMoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfSDI2MzsKLSAgaWYgKENoZWNrSDI2NChidWZmZXIsIGJ1ZmZlcl9zaXplKSkgcmV0dXJuIENPTlRBSU5FUl9IMjY0OwotICBpZiAoQ2hlY2tNcGVnNEJpdFN0cmVhbShidWZmZXIsIGJ1ZmZlcl9zaXplKSkgcmV0dXJuIENPTlRBSU5FUl9NUEVHNEJTOwotICBpZiAoQ2hlY2tWQzEoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfVkMxOwotICBpZiAoQ2hlY2tTcnQoYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfU1JUOwotICBpZiAoQ2hlY2tHc20oYnVmZmVyLCBidWZmZXJfc2l6ZSkpIHJldHVybiBDT05UQUlORVJfR1NNOwotCi0gIC8vIEFDMy9FQUMzIG1pZ2h0IG5vdCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0sCi0gIC8vIHNvIHNjYW4gZm9yIGEgc3RhcnQgY29kZS4KLSAgaW50IG9mZnNldCA9IDE7ICAvLyBObyBuZWVkIHRvIHN0YXJ0IGF0IGJ5dGUgMCBkdWUgdG8gRmlyc3Q0IGNoZWNrLgotICBpZiAoQWR2YW5jZVRvU3RhcnRDb2RlKGJ1ZmZlciwgYnVmZmVyX3NpemUsICZvZmZzZXQsIDQsIDE2LCBrQWMzU3luY1dvcmQpKSB7Ci0gICAgaWYgKENoZWNrQWMzKGJ1ZmZlciArIG9mZnNldCwgYnVmZmVyX3NpemUgLSBvZmZzZXQpKSByZXR1cm4gQ09OVEFJTkVSX0FDMzsKLSAgICBpZiAoQ2hlY2tFYWMzKGJ1ZmZlciArIG9mZnNldCwgYnVmZmVyX3NpemUgLSBvZmZzZXQpKSByZXR1cm4gQ09OVEFJTkVSX0VBQzM7Ci0gIH0KLQotICByZXR1cm4gQ09OVEFJTkVSX1VOS05PV047Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBjb250YWluZXJfbmFtZXMKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9jb250YWluZXJfbmFtZXMuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODNmNmYzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9DT05UQUlORVJfTkFNRVNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfQ09OVEFJTkVSX05BTUVTX0hfCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgY29udGFpbmVyX25hbWVzIHsKLQotLy8gVGhpcyBpcyB0aGUgc2V0IG9mIGlucHV0IGNvbnRhaW5lciBmb3JtYXRzIGRldGVjdGVkIGZvciBsb2dnaW5nIHB1cnBvc2VzLiBOb3QKLS8vIGFsbCBvZiB0aGVzZSBhcmUgZW5hYmxlZCAoYW5kIGl0IHZhcmllcyBieSBwcm9kdWN0KS4gQW55IGFkZGl0aW9ucyBuZWVkIHRvIGJlCi0vLyBkb25lIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKGJlZm9yZSBDT05UQUlORVJfTUFYKS4gVGhpcyBsaXN0IG11c3QgYmUga2VwdCBpbgotLy8gc3luYyB3aXRoIHRoZSBlbnVtIGRlZmluaXRpb24gIk1lZGlhQ29udGFpbmVycyIgaW4KLS8vIHRvb2xzL21ldHJpY3MvaGlzdG9ncmFtcy9oaXN0b2dyYW1zLnhtbC4KLWVudW0gTWVkaWFDb250YWluZXJOYW1lIHsKLSAgQ09OVEFJTkVSX1VOS05PV04sICAgICAgIC8vIFVua25vd24KLSAgQ09OVEFJTkVSX0FBQywgICAgICAgICAgIC8vIEFBQyAoQWR2YW5jZWQgQXVkaW8gQ29kaW5nKQotICBDT05UQUlORVJfQUMzLCAgICAgICAgICAgLy8gQUMtMwotICBDT05UQUlORVJfQUlGRiwgICAgICAgICAgLy8gQUlGRiAoQXVkaW8gSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQpCi0gIENPTlRBSU5FUl9BTVIsICAgICAgICAgICAvLyBBTVIgKEFkYXB0aXZlIE11bHRpLVJhdGUgQXVkaW8pCi0gIENPTlRBSU5FUl9BUEUsICAgICAgICAgICAvLyBBUEUgKE1vbmtleSdzIEF1ZGlvKQotICBDT05UQUlORVJfQVNGLCAgICAgICAgICAgLy8gQVNGIChBZHZhbmNlZCAvIEFjdGl2ZSBTdHJlYW1pbmcgRm9ybWF0KQotICBDT05UQUlORVJfQVNTLCAgICAgICAgICAgLy8gU1NBIChTdWJTdGF0aW9uIEFscGhhKSBzdWJ0aXRsZQotICBDT05UQUlORVJfQVZJLCAgICAgICAgICAgLy8gQVZJIChBdWRpbyBWaWRlbyBJbnRlcmxlYXZlZCkKLSAgQ09OVEFJTkVSX0JJTkssICAgICAgICAgIC8vIEJpbmsKLSAgQ09OVEFJTkVSX0NBRiwgICAgICAgICAgIC8vIENBRiAoQXBwbGUgQ29yZSBBdWRpbyBGb3JtYXQpCi0gIENPTlRBSU5FUl9EVFMsICAgICAgICAgICAvLyBEVFMKLSAgQ09OVEFJTkVSX0RUU0hELCAgICAgICAgIC8vIERUUy1IRAotICBDT05UQUlORVJfRFYsICAgICAgICAgICAgLy8gRFYgKERpZ2l0YWwgVmlkZW8pCi0gIENPTlRBSU5FUl9EWEEsICAgICAgICAgICAvLyBEWEEKLSAgQ09OVEFJTkVSX0VBQzMsICAgICAgICAgIC8vIEVuaGFuY2VkIEFDLTMKLSAgQ09OVEFJTkVSX0ZMQUMsICAgICAgICAgIC8vIEZMQUMgKEZyZWUgTG9zc2xlc3MgQXVkaW8gQ29kZWMpCi0gIENPTlRBSU5FUl9GTFYsICAgICAgICAgICAvLyBGTFYgKEZsYXNoIFZpZGVvKQotICBDT05UQUlORVJfR1NNLCAgICAgICAgICAgLy8gR1NNIChHbG9iYWwgU3lzdGVtIGZvciBNb2JpbGUgQXVkaW8pCi0gIENPTlRBSU5FUl9IMjYxLCAgICAgICAgICAvLyBILjI2MQotICBDT05UQUlORVJfSDI2MywgICAgICAgICAgLy8gSC4yNjMKLSAgQ09OVEFJTkVSX0gyNjQsICAgICAgICAgIC8vIEguMjY0Ci0gIENPTlRBSU5FUl9ITFMsICAgICAgICAgICAvLyBITFMgKEFwcGxlIEhUVFAgTGl2ZSBTdHJlYW1pbmcgUGxheUxpc3QpCi0gIENPTlRBSU5FUl9JUkNBTSwgICAgICAgICAvLyBCZXJrZWxleS9JUkNBTS9DQVJMIFNvdW5kIEZvcm1hdAotICBDT05UQUlORVJfTUpQRUcsICAgICAgICAgLy8gTUpQRUcgdmlkZW8KLSAgQ09OVEFJTkVSX01PViwgICAgICAgICAgIC8vIFF1aWNrVGltZSAvIE1PViAvIE1QRUc0Ci0gIENPTlRBSU5FUl9NUDMsICAgICAgICAgICAvLyBNUDMgKE1QRUcgYXVkaW8gbGF5ZXIgMi8zKQotICBDT05UQUlORVJfTVBFRzJQUywgICAgICAgLy8gTVBFRy0yIFByb2dyYW0gU3RyZWFtCi0gIENPTlRBSU5FUl9NUEVHMlRTLCAgICAgICAvLyBNUEVHLTIgVHJhbnNwb3J0IFN0cmVhbQotICBDT05UQUlORVJfTVBFRzRCUywgICAgICAgLy8gTVBFRy00IEJpdHN0cmVhbQotICBDT05UQUlORVJfT0dHLCAgICAgICAgICAgLy8gT2dnCi0gIENPTlRBSU5FUl9STSwgICAgICAgICAgICAvLyBSTSAoUmVhbE1lZGlhKQotICBDT05UQUlORVJfU1JULCAgICAgICAgICAgLy8gU1JUIChTdWJSaXAgc3VidGl0bGUpCi0gIENPTlRBSU5FUl9TV0YsICAgICAgICAgICAvLyBTV0YgKFNob2NrV2F2ZSBGbGFzaCkKLSAgQ09OVEFJTkVSX1ZDMSwgICAgICAgICAgIC8vIFZDLTEKLSAgQ09OVEFJTkVSX1dBViwgICAgICAgICAgIC8vIFdBViAvIFdBVkUgKFdhdmVmb3JtIEF1ZGlvKQotICBDT05UQUlORVJfV0VCTSwgICAgICAgICAgLy8gTWF0cm9za2EgLyBXZWJNCi0gIENPTlRBSU5FUl9XVFYsICAgICAgICAgICAvLyBXVFYgKFdpbmRvd3MgVGVsZXZpc2lvbikKLSAgQ09OVEFJTkVSX0RBU0gsICAgICAgICAgIC8vIERBU0ggKE1QRUctREFTSCkKLSAgQ09OVEFJTkVSX1NNT09USFNUUkVBTSwgIC8vIFNtb290aFN0cmVhbWluZwotICBDT05UQUlORVJfTUFYICAgICAgICAgICAgLy8gTXVzdCBiZSBsYXN0Ci19OwotCi0vLyBEZXRlcm1pbmUgdGhlIGNvbnRhaW5lciB0eXBlLgotTUVESUFfRVhQT1JUIE1lZGlhQ29udGFpbmVyTmFtZSBEZXRlcm1pbmVDb250YWluZXIoY29uc3QgdWludDhfdCogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9zaXplKTsKLQotfSAgLy8gbmFtZXNwYWNlIGNvbnRhaW5lcl9uYW1lcwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9DT05UQUlORVJfTkFNRVNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lc19mdXp6ZXJ0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzX2Z1enplcnRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ODIyYzQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzX2Z1enplcnRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJiYXNlL251bWVyaWNzL3NhZmVfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jb250YWluZXJfbmFtZXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotLy8gRW50cnkgcG9pbnQgZm9yIExpYkZ1enplci4KLWV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgbWVkaWE6OmNvbnRhaW5lcl9uYW1lczo6RGV0ZXJtaW5lQ29udGFpbmVyKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpjaGVja2VkX2Nhc3Q8aW50PihzaXplKSk7Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzgzMjYwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2NvbnRhaW5lcl9uYW1lc191bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvY29udGFpbmVyX25hbWVzLmgiCi0KLSNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSBjb250YWluZXJfbmFtZXMgewotCi0vLyBVc2luZyBhIG1hY3JvcyB0byBzaW1wbGlmeSB0ZXN0cy4gU2luY2UgRVhQRUNUX0VRIG91dHB1dHMgdGhlIHNlY29uZCBhcmd1bWVudAotLy8gYXMgYSBzdHJpbmcgd2hlbiBpdCBmYWlscywgdGhpcyBsZXRzIHRoZSBvdXRwdXQgaWRlbnRpZnkgd2hhdCBpdGVtIGFjdHVhbGx5Ci0vLyBmYWlsZWQuCi0jZGVmaW5lIFZFUklGWShidWZmZXIsIG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBFWFBFQ1RfRVEobmFtZSwgRGV0ZXJtaW5lQ29udGFpbmVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYnVmZmVyKSkpCi0KLS8vIFRlc3QgdGhhdCBzbWFsbCBidWZmZXJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KLVRFU1QoQ29udGFpbmVyTmFtZXNUZXN0LCBDaGVja1NtYWxsQnVmZmVyKSB7Ci0gIC8vIEVtcHR5IGJ1ZmZlci4KLSAgY2hhciBidWZmZXJbMV07ICAvLyAoWzBdIG5vdCBhbGxvd2VkIG9uIHdpbikKLSAgVkVSSUZZKGJ1ZmZlciwgQ09OVEFJTkVSX1VOS05PV04pOwotCi0gIC8vIFRyeSBhIHNpbXBsZSBTUlQgZmlsZS4KLSAgY2hhciBidWZmZXIxW10gPQotICAgICAgIjFcbiIKLSAgICAgICIwMDowMzoyMyw1NTAgLS0+IDAwOjAzOjI0LDM3NVxuIgotICAgICAgIllvdSBhbHdheXMgaGFkIGEgaGFyZCB0aW1lIGZpbmRpbmcgeW91ciBwbGFjZSBpbiB0aGlzIHdvcmxkLlxuIgotICAgICAgIlxuIgotICAgICAgIjJcbiIKLSAgICAgICIwMDowMzoyNCw0NzYgLS0+IDAwOjAzOjI1LDE3NVxuIgotICAgICAgIldoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0P1xuIjsKLSAgVkVSSUZZKGJ1ZmZlcjEsIENPTlRBSU5FUl9TUlQpOwotCi0gIC8vIEhMUyBoYXMgaXQncyBvd24gbG9vcC4KLSAgY2hhciBidWZmZXIyW10gPQotICAgICAgIiNFWFRNM1UiCi0gICAgICAic29tZSBvdGhlciByYW5kb20gc3R1ZmYiCi0gICAgICAiI0VYVC1YLU1FRElBLVNFUVVFTkNFOiI7Ci0gIFZFUklGWShidWZmZXIyLCBDT05UQUlORVJfSExTKTsKLQotICAvLyBUcnkgYSBsYXJnZSBidWZmZXIgYWxsIHplcm9zLgotICBjaGFyIGJ1ZmZlcjNbNDA5Nl07Ci0gIG1lbXNldChidWZmZXIzLCAwLCBzaXplb2YoYnVmZmVyMykpOwotICBWRVJJRlkoYnVmZmVyMywgQ09OVEFJTkVSX1VOS05PV04pOwotCi0gIC8vIFJldXNlIGJ1ZmZlciwgYnV0IGFsbCBcbiB0aGlzIHRpbWUuCi0gIG1lbXNldChidWZmZXIzLCAnXG4nLCBzaXplb2YoYnVmZmVyMykpOwotICBWRVJJRlkoYnVmZmVyMywgQ09OVEFJTkVSX1VOS05PV04pOwotfQotCi0jZGVmaW5lIEJZVEVfT1JERVJfTUFSSyAiXHhlZlx4YmJceGJmIgotCi0vLyBOb3RlIHRoYXQgdGhlIGNvbXBhcmlzb25zIG5lZWQgYXQgbGVhc3QgMTIgYnl0ZXMsIHNvIG1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzCi0vLyBhdCBsZWFzdCB0aGF0IHNpemUuCi1jb25zdCBjaGFyIGtBbXJCdWZmZXJbMTJdID0gIiMhQU1SIjsKLXVpbnQ4X3Qga0FzZkJ1ZmZlcltdID0gezB4MzAsIDB4MjYsIDB4YjIsIDB4NzUsIDB4OGUsIDB4NjYsIDB4Y2YsIDB4MTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAweGE2LCAweGQ5LCAweDAwLCAweGFhLCAweDAwLCAweDYyLCAweGNlLCAweDZjfTsKLWNvbnN0IGNoYXIga0FzczFCdWZmZXJbXSA9ICJbU2NyaXB0IEluZm9dIjsKLWNvbnN0IGNoYXIga0FzczJCdWZmZXJbXSA9IEJZVEVfT1JERVJfTUFSSyAiW1NjcmlwdCBJbmZvXSI7Ci11aW50OF90IGtDYWZCdWZmZXJbXSA9IHsKLSAgICAnYycsICdhJywgJ2YnLCAnZicsIDAsICAgMSwgMCwgMCwgJ2QnLCAnZScsICdzJywgJ2MnLCAwLCAgIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMzIsICA2NCwgIDIyOSwgMTM2LCAxMjgsIDAsIDAsIDAsIDAsICAgJ2EnLCAnYScsICdjJywgJyAnLCAwLCAwLCAwLCAyLCAwLCAwLAotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAwLCAwLCAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMH07Ci1jb25zdCBjaGFyIGtEdHNoZEJ1ZmZlclsxMl0gPSAiRFRTSERIRFIiOwotY29uc3QgY2hhciBrRHhhQnVmZmVyWzE2XSA9ICJERVhBIjsKLWNvbnN0IGNoYXIga0ZsYWNCdWZmZXJbMTJdID0gImZMYUMiOwotdWludDhfdCBrRmx2QnVmZmVyWzEyXSA9IHsnRicsICdMJywgJ1YnLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwfTsKLXVpbnQ4X3Qga0lyY2FtQnVmZmVyW10gPSB7MHg2NCwgMHhhMywgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMX07Ci1jb25zdCBjaGFyIGtSbTFCdWZmZXJbMTJdID0gIi5STUZcMFwwIjsKLWNvbnN0IGNoYXIga1JtMkJ1ZmZlclsxMl0gPSAiLnJhXHhmZCI7Ci11aW50OF90IGtXdHZCdWZmZXJbXSA9IHsweGI3LCAweGQ4LCAweDAwLCAweDIwLCAweDM3LCAweDQ5LCAweGRhLCAweDExLAotICAgICAgICAgICAgICAgICAgICAgICAgMHhhNiwgMHg0ZSwgMHgwMCwgMHgwNywgMHhlOSwgMHg1ZSwgMHhhZCwgMHg4ZH07Ci11aW50OF90IGtCdWcyNjMwNzNCdWZmZXJbXSA9IHsKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDY2LCAweDc0LCAweDc5LCAweDcwLCAweDZkLCAweDcwLCAweDM0LAotICAgIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjksIDB4NzMsIDB4NmYsIDB4NmQsIDB4NmQsIDB4NzAsCi0gICAgMHgzNCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2ZCwgMHg2NCwgMHg2MSwgMHg3NCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweGFhLCAweDJlLCAweDIyLCAweGNmLCAweDAwLCAweDAwLCAweDAwLCAweDM3LAotICAgIDB4NjcsIDB4NjQsIDB4MDAsIDB4MjgsIDB4YWMsIDB4MmMsIDB4YTQsIDB4MDEsIDB4ZTAsIDB4MDgsIDB4OWYsCi0gICAgMHg5NywgMHgwMSwgMHg1MiwgMHgwMiwgMHgwMiwgMHgwMiwgMHg4MCwgMHgwMCwgMHgwMX07Ci11aW50OF90IGtCdWc1ODQ0MDFCdWZmZXJbXSA9IHsKLSAgICAweDFhLCAweDQ1LCAweGRmLCAweGEzLCAweDAxLCAweDAwLCAweDNiLCAweDAwLCAweGIxLCAweDAwLCAweDAwLCAweDFmLAotICAgIDB4NDIsIDB4ODYsIDB4ODEsIDB4MDEsIDB4NDIsIDB4ZjcsIDB4ODEsIDB4MDEsIDB4NDIsIDB4ZjIsIDB4MGIsIDB4NzcsCi0gICAgMHgwMSwgMHhiMiwgMHg3NCwgMHg4NywgMHhjMCwgMHgwMCwgMHgyMCwgMHg4NCwgMHgyMSwgMHgwOCwgMHgyMywgMHgwMCwKLSAgICAweGFlLCAweDA2LCAweDA2LCAweDAxLCAweDgxLCAweDg3LCAweGJiLCAweDhlLCAweDBmLCAweDlmLCAweDNlLCAweDdjLAotICAgIDB4ZmEsIDB4NjEsIDB4ZWIsIDB4OGUsIDB4OTcsIDB4NzQsIDB4MzcsIDB4ZDAsIDB4NWYsIDB4NWMsIDB4NzUsIDB4MWUsCi0gICAgMHg3MSwgMHgzMCwgMHhmZSwgMHg3YywgMHhlMCwgMHhmOSwgMHhmMywgMHhlNywgMHhjZiwgMHg5ZiwgMHgzZSwgMHg3YywKLSAgICAweGY4LCAweDAwLCAweGM3LCAweDMyLCAweGUyLCAweDMxLCAweGI5LCAweDU4LCAweDFhLCAweGU3LCAweGY5LCAweDk4LAotICAgIDB4MGMsIDB4ZGQsIDB4NmYsIDB4ZDQsIDB4MjAsIDB4YjcsIDB4ZTQsIDB4YjQsIDB4N2UsIDB4YWEsIDB4ZGYsIDB4MjksCi0gICAgMHhkNiwgMHg5ZCwgMHgyYiwgMHgzNywgMHgyZiwgMHg3YSwgMHhjMiwgMHg1ZiwgMHg1MiwgMHg0NCwgMHgwMSwgMHhkYywKLSAgICAweDMyLCAweDk2LCAweGJiLCAweGNiLCAweDI1LCAweDUyLCAweDUyLCAweGFjLCAweDZmLCAweGIxLCAweGJkLCAweDg1LAotICAgIDB4MDIsIDB4ODMsIDB4N2YsIDB4NWUsIDB4NDMsIDB4OTgsIDB4YTYsIDB4ODEsIDB4MDQsIDB4NDIsIDB4ZjMsIDB4OWIsCi0gICAgMHg4MSwgMHgzMCwgMHgyNiwgMHhiMiwgMHg3NSwgMHg4ZSwgMHg2NiwgMHhjZiwgMHgxMSwgMHhhNiwgMHhkOSwgMHgwMCwKLSAgICAweGFhLCAweDAwLCAweDYyLCAweGNlLCAweDZjLCAweDZkLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4YTEsIDB4ZGMsIDB4YWIsIDB4OGMsIDB4NDcsCi0gICAgMHhhOSwgMHhjZiwgMHgxMSwgMHg4ZSwgMHhlNCwgMHgwMCwgMHhjMCwgMHgwYywgMHgyMCwgMHg1MywgMHg2NSwgMHg2OCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NDIsIDB4ODIsIDB4ODQsIDB4NzcsIDB4MmEsCi0gICAgMHg2NSwgMHg2MiwgMHg2ZCwgMHg0MiwgMHhiZSwgMHg0YywgMHhkYSwgMHhjOSwgMHg0YywgMHhhNSwgMHgwZiwgMHgxNSwKLSAgICAweGU4LCAweGZkLCAweDViLCAweDA5LCAweDhjLCAweDM4LCAweGQ3LCAweDE4LCAweDBhLCAweDY4LCAweDQxLCAweDQ2LAotICAgIDB4NjMsIDB4MTgsIDB4ZjksIDB4ZjQsIDB4Y2IsIDB4YzcsIDB4NTcsIDB4OTUsIDB4ZDgsIDB4MGIsIDB4MmMsIDB4OTEsCi0gICAgMHg3MCwgMHgxYiwgMHg4MSwgMHhkMywgMHhkYSwgMHhhMCwgMHg2MiwgMHg4NywgMHgyZCwgMHgwMywgMHg1MCwgMHg2ZCwKLSAgICAweDI2LCAweGIxLCAweGNjLCAweGI4LCAweDhjLCAweDgxLCAweDZlLCAweDU2fTsKLXVpbnQ4X3Qga0J1ZzU4NTI0M0J1ZmZlcltdID0gezB4MWEsIDB4NDUsIDB4ZGYsIDB4YTMsIDB4MDEsIDB4MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MiwgMHg4MiwgMHg0MiwgMHg4MiwgMHgwMCwgMHgwMH07Ci0KLS8vIFRlc3QgdGhhdCBjb250YWluZXJzIHRoYXQgc3RhcnQgd2l0aCBmaXhlZCBzdHJpbmdzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4KLS8vIFRoaXMgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIFRBRyBtYXRjaGVzIHRoZSBmaXJzdCA0IGNoYXJhY3RlcnMgb2YgdGhlIHN0cmluZy4KLVRFU1QoQ29udGFpbmVyTmFtZXNUZXN0LCBDaGVja0ZpeGVkU3RyaW5ncykgewotICBWRVJJRlkoa0FtckJ1ZmZlciwgQ09OVEFJTkVSX0FNUik7Ci0gIFZFUklGWShrQXNmQnVmZmVyLCBDT05UQUlORVJfQVNGKTsKLSAgVkVSSUZZKGtBc3MxQnVmZmVyLCBDT05UQUlORVJfQVNTKTsKLSAgVkVSSUZZKGtBc3MyQnVmZmVyLCBDT05UQUlORVJfQVNTKTsKLSAgVkVSSUZZKGtDYWZCdWZmZXIsIENPTlRBSU5FUl9DQUYpOwotICBWRVJJRlkoa0R0c2hkQnVmZmVyLCBDT05UQUlORVJfRFRTSEQpOwotICBWRVJJRlkoa0R4YUJ1ZmZlciwgQ09OVEFJTkVSX0RYQSk7Ci0gIFZFUklGWShrRmxhY0J1ZmZlciwgQ09OVEFJTkVSX0ZMQUMpOwotICBWRVJJRlkoa0ZsdkJ1ZmZlciwgQ09OVEFJTkVSX0ZMVik7Ci0gIFZFUklGWShrSXJjYW1CdWZmZXIsIENPTlRBSU5FUl9JUkNBTSk7Ci0gIFZFUklGWShrUm0xQnVmZmVyLCBDT05UQUlORVJfUk0pOwotICBWRVJJRlkoa1JtMkJ1ZmZlciwgQ09OVEFJTkVSX1JNKTsKLSAgVkVSSUZZKGtXdHZCdWZmZXIsIENPTlRBSU5FUl9XVFYpOwotICBWRVJJRlkoa0J1ZzI2MzA3M0J1ZmZlciwgQ09OVEFJTkVSX01PVik7Ci0gIFZFUklGWShrQnVnNTg0NDAxQnVmZmVyLCBDT05UQUlORVJfRUFDMyk7Ci0gIFZFUklGWShrQnVnNTg1MjQzQnVmZmVyLCBDT05UQUlORVJfVU5LTk9XTik7Ci19Ci0KLS8vIERldGVybWluZSB0aGUgY29udGFpbmVyIHR5cGUgb2YgYSBzcGVjaWZpZWQgZmlsZS4KLXZvaWQgVGVzdEZpbGUoTWVkaWFDb250YWluZXJOYW1lIGV4cGVjdGVkLCBjb25zdCBiYXNlOjpGaWxlUGF0aCYgZmlsZW5hbWUpIHsKLSAgY2hhciBidWZmZXJbODE5Ml07Ci0KLSAgLy8gV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBSZWFkRmlsZSBmYWlscyBpZiBmaWxlIHNtYWxsZXIgdGhhbiBkZXNpcmVkIHNpemUsCi0gIC8vIHNvIHVzZSBmaWxlIGxlbmd0aCBpZiBmaWxlIGxlc3MgdGhhbiA4MTkyIGJ5dGVzIChodHRwOi8vY3JidWcuY29tLzI0Mzg4NSkuCi0gIGludCByZWFkX3NpemUgPSBzaXplb2YoYnVmZmVyKTsKLSAgaW50NjRfdCBhY3R1YWxfc2l6ZTsKLSAgaWYgKGJhc2U6OkdldEZpbGVTaXplKGZpbGVuYW1lLCAmYWN0dWFsX3NpemUpICYmIGFjdHVhbF9zaXplIDwgcmVhZF9zaXplKQotICAgIHJlYWRfc2l6ZSA9IGFjdHVhbF9zaXplOwotICBpbnQgcmVhZCA9IGJhc2U6OlJlYWRGaWxlKGZpbGVuYW1lLCBidWZmZXIsIHJlYWRfc2l6ZSk7Ci0KLSAgLy8gTm93IHZlcmlmeSB0aGUgdHlwZS4KLSAgRVhQRUNUX0VRKGV4cGVjdGVkLAotICAgICAgICAgICAgRGV0ZXJtaW5lQ29udGFpbmVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlciksIHJlYWQpKQotICAgICAgPDwgIkZhaWx1cmUgd2l0aCBmaWxlICIgPDwgZmlsZW5hbWUudmFsdWUoKTsKLX0KLQotVEVTVChDb250YWluZXJOYW1lc1Rlc3QsIEZpbGVDaGVja09HRykgewotICBUZXN0RmlsZShDT05UQUlORVJfT0dHLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJiZWFyLm9ndiIpKTsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX09HRywgR2V0VGVzdERhdGFGaWxlUGF0aCgiOWNoLm9nZyIpKTsKLX0KLQotVEVTVChDb250YWluZXJOYW1lc1Rlc3QsIEZpbGVDaGVja1dBVikgewotICBUZXN0RmlsZShDT05UQUlORVJfV0FWLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCI0Y2gud2F2IikpOwotICBUZXN0RmlsZShDT05UQUlORVJfV0FWLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJzZnhfZjMybGUud2F2IikpOwotICBUZXN0RmlsZShDT05UQUlORVJfV0FWLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJzZnhfczE2bGUud2F2IikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrTU9WKSB7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9NT1YsIEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXItMTI4MHg3MjAubXA0IikpOwotICBUZXN0RmlsZShDT05UQUlORVJfTU9WLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJzZngubTRhIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrV0VCTSkgewotICBUZXN0RmlsZShDT05UQUlORVJfV0VCTSwgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci0zMjB4MjQwLndlYm0iKSk7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9XRUJNLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJub19zdHJlYW1zLndlYm0iKSk7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9XRUJNLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJ3ZWJtX2VibWxfZWxlbWVudCIpKTsKLX0KLQotVEVTVChDb250YWluZXJOYW1lc1Rlc3QsIEZpbGVDaGVja01QMykgewotICBUZXN0RmlsZShDT05UQUlORVJfTVAzLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJpZDNfdGVzdC5tcDMiKSk7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9NUDMsIEdldFRlc3REYXRhRmlsZVBhdGgoInNmeC5tcDMiKSk7Ci19Ci0KLVRFU1QoQ29udGFpbmVyTmFtZXNUZXN0LCBGaWxlQ2hlY2tBQzMpIHsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX0FDMywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5hYzMiKSk7Ci19Ci0KLVRFU1QoQ29udGFpbmVyTmFtZXNUZXN0LCBGaWxlQ2hlY2tBQUMpIHsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX0FBQywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5hZHRzIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrQUlGRikgewotICBUZXN0RmlsZShDT05UQUlORVJfQUlGRiwgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5haWZmIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrQVNGKSB7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9BU0YsIEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXIuYXNmIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrQVZJKSB7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9BVkksIEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXIuYXZpIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrRUFDMykgewotICBUZXN0RmlsZShDT05UQUlORVJfRUFDMywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5lYWMzIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrRkxBQykgewotICBUZXN0RmlsZShDT05UQUlORVJfRkxBQywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5mbGFjIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrRkxWKSB7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9GTFYsIEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXIuZmx2IikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrSDI2MSkgewotICBUZXN0RmlsZShDT05UQUlORVJfSDI2MSwgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5oMjYxIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrSDI2MykgewotICBUZXN0RmlsZShDT05UQUlORVJfSDI2MywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5oMjYzIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrTUpQRUcpIHsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX01KUEVHLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJiZWFyLm1qcGVnIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrTVBFRzJQUykgewotICBUZXN0RmlsZShDT05UQUlORVJfTVBFRzJQUywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5tcGVnIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrTVBFRzJUUykgewotICBUZXN0RmlsZShDT05UQUlORVJfTVBFRzJUUywgR2V0VGVzdERhdGFGaWxlUGF0aCgiYmVhci5tMnRzIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrUk0pIHsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX1JNLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJiZWFyLnJtIikpOwotfQotCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrU1dGKSB7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9TV0YsIEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXIuc3dmIikpOwotfQotCi0vLyBUcnkgYSBmZXcgbm9uIGNvbnRhaW5lcnMuCi1URVNUKENvbnRhaW5lck5hbWVzVGVzdCwgRmlsZUNoZWNrVU5LTk9XTikgewotICBUZXN0RmlsZShDT05UQUlORVJfVU5LTk9XTiwgR2V0VGVzdERhdGFGaWxlUGF0aCgidGVuX2J5dGVfZmlsZSIpKTsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX1VOS05PV04sIEdldFRlc3REYXRhRmlsZVBhdGgoIlJFQURNRSIpKTsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX1VOS05PV04sIEdldFRlc3REYXRhRmlsZVBhdGgoImJhbGlfNjQweDM2MF9QNDIyLnl1diIpKTsKLSAgVGVzdEZpbGUoQ09OVEFJTkVSX1VOS05PV04sIEdldFRlc3REYXRhRmlsZVBhdGgoImJhbGlfNjQweDM2MF9SR0IyNC5yZ2IiKSk7Ci0gIFRlc3RGaWxlKENPTlRBSU5FUl9VTktOT1dOLCBHZXRUZXN0RGF0YUZpbGVQYXRoKCJ3ZWJtX3ZwOF90cmFja19lbnRyeSIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNvbnRhaW5lcl9uYW1lcwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RhdGFfYnVmZmVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9idWZmZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNWYxMWIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9idWZmZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLURhdGFCdWZmZXI6OkRhdGFCdWZmZXIoaW50IGJ1ZmZlcl9zaXplKQotICAgIDogYnVmZmVyX3NpemVfKGJ1ZmZlcl9zaXplKSwgZGF0YV9zaXplXygwKSB7Ci0gIENIRUNLX0dFKGJ1ZmZlcl9zaXplLCAwKTsKLSAgZGF0YV8ucmVzZXQobmV3IHVpbnQ4X3RbYnVmZmVyX3NpemVfXSk7Ci19Ci0KLURhdGFCdWZmZXI6OkRhdGFCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCi0gICAgOiBkYXRhXyhzdGQ6Om1vdmUoYnVmZmVyKSksCi0gICAgICBidWZmZXJfc2l6ZV8oYnVmZmVyX3NpemUpLAotICAgICAgZGF0YV9zaXplXyhidWZmZXJfc2l6ZSkgewotICBDSEVDSyhkYXRhXy5nZXQoKSk7Ci0gIENIRUNLX0dFKGJ1ZmZlcl9zaXplLCAwKTsKLX0KLQotRGF0YUJ1ZmZlcjo6RGF0YUJ1ZmZlcihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplKQotICAgIDogYnVmZmVyX3NpemVfKGRhdGFfc2l6ZSksIGRhdGFfc2l6ZV8oZGF0YV9zaXplKSB7Ci0gIGlmICghZGF0YSkgewotICAgIENIRUNLX0VRKGRhdGFfc2l6ZSwgMCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgQ0hFQ0tfR0UoZGF0YV9zaXplLCAwKTsKLSAgZGF0YV8ucmVzZXQobmV3IHVpbnQ4X3RbYnVmZmVyX3NpemVfXSk7Ci0gIG1lbWNweShkYXRhXy5nZXQoKSwgZGF0YSwgZGF0YV9zaXplXyk7Ci19Ci0KLURhdGFCdWZmZXI6On5EYXRhQnVmZmVyKCkge30KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IERhdGFCdWZmZXI6OkNvcHlGcm9tKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIC8vIElmIHlvdSBoaXQgdGhpcyBDSEVDSyB5b3UgbGlrZWx5IGhhdmUgYSBidWcgaW4gYSBkZW11eGVyLiBHbyBmaXggaXQuCi0gIENIRUNLKGRhdGEpOwotICByZXR1cm4gYmFzZTo6V3JhcFJlZkNvdW50ZWQobmV3IERhdGFCdWZmZXIoZGF0YSwgc2l6ZSkpOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8RGF0YUJ1ZmZlcj4gRGF0YUJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCkgewotICByZXR1cm4gYmFzZTo6V3JhcFJlZkNvdW50ZWQobmV3IERhdGFCdWZmZXIoTlVMTCwgMCkpOwotfQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kYXRhX2J1ZmZlci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRhYjVhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kYXRhX2J1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfREFUQV9CVUZGRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfREFUQV9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBBIHNpbXBsZSBidWZmZXIgdGhhdCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGdpdmVuIGRhdGEgcG9pbnRlciBvciBhbGxvY2F0ZXMKLS8vIGFzIG5lY2Vzc2FyeS4KLS8vCi0vLyBVbmxpa2UgRGVjb2RlckJ1ZmZlciwgYWxsb2NhdGlvbnMgYXJlIGFzc3VtZWQgdG8gYmUgYWxsb2NhdGVkIHdpdGggdGhlCi0vLyBkZWZhdWx0IG1lbW9yeSBhbGxvY2F0b3IgKGkuZS4sIG5ldyB1aW50OF90W10pLgotLy8KLS8vIE5PVEU6IEl0IGlzIGlsbGVnYWwgdG8gY2FsbCBhbnkgbWV0aG9kIHdoZW4gZW5kX29mX3N0cmVhbSgpIGlzIHRydWUuCi1jbGFzcyBNRURJQV9FWFBPUlQgRGF0YUJ1ZmZlciA6IHB1YmxpYyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxEYXRhQnVmZmVyPiB7Ci0gcHVibGljOgotICAvLyBBbGxvY2F0ZXMgYnVmZmVyIG9mIHNpemUgfGJ1ZmZlcl9zaXplfCA+PSAwLgotICBleHBsaWNpdCBEYXRhQnVmZmVyKGludCBidWZmZXJfc2l6ZSk7Ci0KLSAgLy8gQXNzdW1lcyB2YWxpZCBkYXRhIG9mIHNpemUgfGJ1ZmZlcl9zaXplfC4KLSAgRGF0YUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7Ci0KLSAgLy8gQ3JlYXRlIGEgRGF0YUJ1ZmZlciB3aG9zZSB8ZGF0YV98IGlzIGNvcGllZCBmcm9tIHxkYXRhfC4KLSAgLy8KLSAgLy8gfGRhdGF8IG11c3Qgbm90IGJlIG51bGwgYW5kIHxzaXplfCBtdXN0IGJlID49IDAuCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IENvcHlGcm9tKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLQotICAvLyBDcmVhdGUgYSBEYXRhQnVmZmVyIGluZGljYXRpbmcgd2UndmUgcmVhY2hlZCBlbmQgb2Ygc3RyZWFtLgotICAvLwotICAvLyBDYWxsaW5nIGFueSBtZXRob2Qgb3RoZXIgdGhhbiBlbmRfb2Zfc3RyZWFtKCkgb24gdGhlIHJlc3VsdGluZyBidWZmZXIKLSAgLy8gaXMgZGlzYWxsb3dlZC4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8RGF0YUJ1ZmZlcj4gQ3JlYXRlRU9TQnVmZmVyKCk7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIHRpbWVzdGFtcF87Ci0gIH0KLQotICB2b2lkIHNldF90aW1lc3RhbXAoY29uc3QgYmFzZTo6VGltZURlbHRhJiB0aW1lc3RhbXApIHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbigpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIGR1cmF0aW9uXzsKLSAgfQotCi0gIHZvaWQgc2V0X2R1cmF0aW9uKGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZHVyYXRpb24pIHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgZHVyYXRpb25fID0gZHVyYXRpb247Ci0gIH0KLQotICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICByZXR1cm4gZGF0YV8uZ2V0KCk7Ci0gIH0KLQotICB1aW50OF90KiB3cml0YWJsZV9kYXRhKCkgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICByZXR1cm4gZGF0YV8uZ2V0KCk7Ci0gIH0KLQotICAvLyBUaGUgc2l6ZSBvZiB2YWxpZCBkYXRhIGluIGJ5dGVzLgotICAvLwotICAvLyBTZXR0aW5nIHRoaXMgdmFsdWUgYmV5b25kIHRoZSBidWZmZXIgc2l6ZSBpcyBkaXNhbGxvd2VkLgotICBpbnQgZGF0YV9zaXplKCkgY29uc3QgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICByZXR1cm4gZGF0YV9zaXplXzsKLSAgfQotCi0gIHZvaWQgc2V0X2RhdGFfc2l6ZShpbnQgZGF0YV9zaXplKSB7Ci0gICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICAgIENIRUNLX0xFKGRhdGFfc2l6ZSwgYnVmZmVyX3NpemVfKTsKLSAgICBkYXRhX3NpemVfID0gZGF0YV9zaXplOwotICB9Ci0KLSAgLy8gSWYgdGhlcmUncyBubyBkYXRhIGluIHRoaXMgYnVmZmVyLCBpdCByZXByZXNlbnRzIGVuZCBvZiBzdHJlYW0uCi0gIGJvb2wgZW5kX29mX3N0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFfID09IE5VTEw7IH0KLQotIHByb3RlY3RlZDoKLSAgZnJpZW5kIGNsYXNzIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPERhdGFCdWZmZXI+OwotCi0gIC8vIEFsbG9jYXRlcyBidWZmZXIgb2Ygc2l6ZSB8ZGF0YV9zaXplfCwgY29waWVzIFtkYXRhLGRhdGErZGF0YV9zaXplKSB0bwotICAvLyB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgc2V0cyBkYXRhIHNpemUgdG8gfGRhdGFfc2l6ZXwuCi0gIC8vCi0gIC8vIElmIHxkYXRhfCBpcyBudWxsIGFuIGVuZCBvZiBzdHJlYW0gYnVmZmVyIGlzIGNyZWF0ZWQuCi0gIERhdGFCdWZmZXIoY29uc3QgdWludDhfdCogZGF0YSwgaW50IGRhdGFfc2l6ZSk7Ci0KLSAgdmlydHVhbCB+RGF0YUJ1ZmZlcigpOwotCi0gcHJpdmF0ZToKLSAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbl87Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZGF0YV87Ci0gIGludCBidWZmZXJfc2l6ZV87Ci0gIGludCBkYXRhX3NpemVfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEYXRhQnVmZmVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0RBVEFfQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kYXRhX2J1ZmZlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2RhdGFfYnVmZmVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFmY2ZhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RhdGFfYnVmZmVyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kYXRhX2J1ZmZlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVEVTVChEYXRhQnVmZmVyVGVzdCwgQ29uc3RydWN0b3JfWmVyb1NpemUpIHsKLSAgLy8gWmVyby1zaXplZCBidWZmZXJzIGFyZSB2YWxpZC4gSW4gcHJhY3RpY2UgdGhleSBhcmVuJ3QgdXNlZCB2ZXJ5IG11Y2ggYnV0IGl0Ci0gIC8vIGVsaW1pbmF0ZXMgY2xpZW50cyBmcm9tIHdvcnJ5aW5nIGFib3V0IG51bGwgZGF0YSBwb2ludGVycy4KLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPSBuZXcgRGF0YUJ1ZmZlcigwKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT5kYXRhKCkpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPndyaXRhYmxlX2RhdGEoKSk7Ci0gIEVYUEVDVF9FUSgwLCBidWZmZXItPmRhdGFfc2l6ZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKTsKLX0KLQotVEVTVChEYXRhQnVmZmVyVGVzdCwgQ29uc3RydWN0b3JfTm9uWmVyb1NpemUpIHsKLSAgLy8gQnVmZmVyIHNpemUgc2hvdWxkIGJlIHNldC4KLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPSBuZXcgRGF0YUJ1ZmZlcigxMCk7Ci0gIEVYUEVDVF9UUlVFKGJ1ZmZlci0+ZGF0YSgpKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT53cml0YWJsZV9kYXRhKCkpOwotICBFWFBFQ1RfRVEoMCwgYnVmZmVyLT5kYXRhX3NpemUoKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci19Ci0KLVRFU1QoRGF0YUJ1ZmZlclRlc3QsIENvbnN0cnVjdG9yX1Njb3BlZEFycmF5KSB7Ci0gIC8vIERhdGEgc2hvdWxkIGJlIHBhc3NlZCBhbmQgYm90aCBkYXRhIGFuZCBidWZmZXIgc2l6ZSBzaG91bGQgYmUgc2V0LgotICBjb25zdCBpbnQga1NpemUgPSA4OwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhKG5ldyB1aW50OF90W2tTaXplXSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIGtEYXRhID0gZGF0YS5nZXQoKTsKLQotICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGJ1ZmZlciA9IG5ldyBEYXRhQnVmZmVyKHN0ZDo6bW92ZShkYXRhKSwga1NpemUpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmRhdGEoKSk7Ci0gIEVYUEVDVF9UUlVFKGJ1ZmZlci0+d3JpdGFibGVfZGF0YSgpKTsKLSAgRVhQRUNUX0VRKGtEYXRhLCBidWZmZXItPmRhdGEoKSk7Ci0gIEVYUEVDVF9FUShrU2l6ZSwgYnVmZmVyLT5kYXRhX3NpemUoKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci19Ci0KLVRFU1QoRGF0YUJ1ZmZlclRlc3QsIENvcHlGcm9tKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga1Rlc3REYXRhW10gPSB7MHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3N307Ci0gIGNvbnN0IGludCBrVGVzdERhdGFTaXplID0gYXJyYXlzaXplKGtUZXN0RGF0YSk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPQotICAgICAgRGF0YUJ1ZmZlcjo6Q29weUZyb20oa1Rlc3REYXRhLCBrVGVzdERhdGFTaXplKTsKLSAgRVhQRUNUX0VRKGtUZXN0RGF0YVNpemUsIGJ1ZmZlci0+ZGF0YV9zaXplKCkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotCi0gIC8vIEVuc3VyZSB3ZSBhcmUgY29weWluZyB0aGUgZGF0YSwgbm90IGp1c3QgcG9pbnRpbmcgdG8gdGhlIG9yaWdpbmFsIGRhdGEuCi0gIEVYUEVDVF9FUSgwLCBtZW1jbXAoYnVmZmVyLT5kYXRhKCksIGtUZXN0RGF0YSwga1Rlc3REYXRhU2l6ZSkpOwotICBidWZmZXItPndyaXRhYmxlX2RhdGEoKVswXSA9IDB4RkY7Ci0gIEVYUEVDVF9ORSgwLCBtZW1jbXAoYnVmZmVyLT5kYXRhKCksIGtUZXN0RGF0YSwga1Rlc3REYXRhU2l6ZSkpOwotfQotCi1URVNUKERhdGFCdWZmZXJUZXN0LCBDcmVhdGVFT1NCdWZmZXIpIHsKLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPSBEYXRhQnVmZmVyOjpDcmVhdGVFT1NCdWZmZXIoKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotfQotCi1URVNUKERhdGFCdWZmZXJUZXN0LCBUaW1lc3RhbXApIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVzdGFtcEEgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMTMzNyk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZXN0YW1wQiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMjM0KTsKLQotICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGJ1ZmZlciA9IG5ldyBEYXRhQnVmZmVyKDApOwotICBFWFBFQ1RfVFJVRShidWZmZXItPnRpbWVzdGFtcCgpID09IGtaZXJvKTsKLQotICBidWZmZXItPnNldF90aW1lc3RhbXAoa1RpbWVzdGFtcEEpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPnRpbWVzdGFtcCgpID09IGtUaW1lc3RhbXBBKTsKLQotICBidWZmZXItPnNldF90aW1lc3RhbXAoa1RpbWVzdGFtcEIpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPnRpbWVzdGFtcCgpID09IGtUaW1lc3RhbXBCKTsKLX0KLQotVEVTVChEYXRhQnVmZmVyVGVzdCwgRHVyYXRpb24pIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0R1cmF0aW9uQSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMzM3KTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtEdXJhdGlvbkIgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMTIzNCk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPSBuZXcgRGF0YUJ1ZmZlcigwKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT5kdXJhdGlvbigpID09IGtaZXJvKTsKLQotICBidWZmZXItPnNldF9kdXJhdGlvbihrRHVyYXRpb25BKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT5kdXJhdGlvbigpID09IGtEdXJhdGlvbkEpOwotCi0gIGJ1ZmZlci0+c2V0X2R1cmF0aW9uKGtEdXJhdGlvbkIpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmR1cmF0aW9uKCkgPT0ga0R1cmF0aW9uQik7Ci19Ci0KLVRFU1QoRGF0YUJ1ZmZlclRlc3QsIFJlYWRpbmdXcml0aW5nKSB7Ci0gIGNvbnN0IGNoYXIga0RhdGFbXSA9ICJoZWxsbyI7Ci0gIGNvbnN0IGludCBrRGF0YVNpemUgPSBhcnJheXNpemUoa0RhdGEpOwotICBjb25zdCBjaGFyIGtOZXdEYXRhW10gPSAiY2hyb21pdW0iOwotICBjb25zdCBpbnQga05ld0RhdGFTaXplID0gYXJyYXlzaXplKGtOZXdEYXRhKTsKLQotICAvLyBDcmVhdGUgYSBEYXRhQnVmZmVyLgotICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGJ1ZmZlcihuZXcgRGF0YUJ1ZmZlcihrRGF0YVNpemUpKTsKLSAgQVNTRVJUX1RSVUUoYnVmZmVyLmdldCgpKTsKLQotICB1aW50OF90KiBkYXRhID0gYnVmZmVyLT53cml0YWJsZV9kYXRhKCk7Ci0gIEFTU0VSVF9UUlVFKGRhdGEpOwotICBtZW1jcHkoZGF0YSwga0RhdGEsIGtEYXRhU2l6ZSk7Ci0gIGJ1ZmZlci0+c2V0X2RhdGFfc2l6ZShrRGF0YVNpemUpOwotICBjb25zdCB1aW50OF90KiByZWFkX29ubHlfZGF0YSA9IGJ1ZmZlci0+ZGF0YSgpOwotICBBU1NFUlRfRVEoZGF0YSwgcmVhZF9vbmx5X2RhdGEpOwotICBBU1NFUlRfRVEoMCwgbWVtY21wKHJlYWRfb25seV9kYXRhLCBrRGF0YSwga0RhdGFTaXplKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIyKG5ldyBEYXRhQnVmZmVyKGtOZXdEYXRhU2l6ZSArIDEwKSk7Ci0gIGRhdGEgPSBidWZmZXIyLT53cml0YWJsZV9kYXRhKCk7Ci0gIEFTU0VSVF9UUlVFKGRhdGEpOwotICBtZW1jcHkoZGF0YSwga05ld0RhdGEsIGtOZXdEYXRhU2l6ZSk7Ci0gIGJ1ZmZlcjItPnNldF9kYXRhX3NpemUoa05ld0RhdGFTaXplKTsKLSAgcmVhZF9vbmx5X2RhdGEgPSBidWZmZXIyLT5kYXRhKCk7Ci0gIEVYUEVDVF9FUShrTmV3RGF0YVNpemUsIGJ1ZmZlcjItPmRhdGFfc2l6ZSgpKTsKLSAgQVNTRVJUX0VRKGRhdGEsIHJlYWRfb25seV9kYXRhKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNtcChyZWFkX29ubHlfZGF0YSwga05ld0RhdGEsIGtOZXdEYXRhU2l6ZSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZGRkYjAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSB7Ci1TYk1lZGlhVHlwZSBEZW11eGVyU3RyZWFtVHlwZVRvU2JNZWRpYVR5cGUoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6QVVESU86Ci0gICAgICByZXR1cm4ga1NiTWVkaWFUeXBlQXVkaW87Ci0gICAgY2FzZSBEZW11eGVyU3RyZWFtOjpWSURFTzoKLSAgICAgIHJldHVybiBrU2JNZWRpYVR5cGVWaWRlbzsKLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlVOS05PV046Ci0gICAgY2FzZSBEZW11eGVyU3RyZWFtOjpURVhUOgotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6TlVNX1RZUEVTOgotICAgICAgYnJlYWs7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4ga1NiTWVkaWFUeXBlQXVkaW87Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotRGVjb2RlckJ1ZmZlcjo6U2NvcGVkQWxsb2NhdG9yUHRyOjpTY29wZWRBbGxvY2F0b3JQdHIoQWxsb2NhdG9yKiBhbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIHR5cGUsIHNpemVfdCBzaXplKQotICAgIDogYWxsb2NhdG9yXyhhbGxvY2F0b3IpLCB0eXBlXyh0eXBlKSB7Ci0gIGlmIChzaXplID4gMCkgewotICAgIERDSEVDSyhhbGxvY2F0b3JfKTsKLSAgICBpbnQgcGFkZGluZyA9IFNiTWVkaWFHZXRCdWZmZXJQYWRkaW5nKERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZSh0eXBlKSk7Ci0gICAgaW50IGFsaWdubWVudCA9Ci0gICAgICAgIFNiTWVkaWFHZXRCdWZmZXJBbGlnbm1lbnQoRGVtdXhlclN0cmVhbVR5cGVUb1NiTWVkaWFUeXBlKHR5cGUpKTsKLSAgICBhbGxvY2F0aW9uc18gPSBhbGxvY2F0b3JfLT5BbGxvY2F0ZShzaXplICsgcGFkZGluZywgYWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludHB0cl90Pih0eXBlKSk7Ci0gICAgc3RhdGljIGJvb2wgbG9nZ2VkX3dhcm5pbmcgPSBmYWxzZTsKLSAgICBpZiAocGFkZGluZyA+IDApIHsKLSAgICAgIGlmIChhbGxvY2F0aW9uc18ubnVtYmVyX29mX2J1ZmZlcnMoKSA+IDApIHsKLSAgICAgICAgY29uc3QgaW50IGtNYXhQYWRkaW5nID0gMTAyNDsKLSAgICAgICAgaWYgKHBhZGRpbmcgPiBrTWF4UGFkZGluZykgewotICAgICAgICAgIGlmICghbG9nZ2VkX3dhcm5pbmcpIHsKLSAgICAgICAgICAgIExPRyhXQVJOSU5HKSA8PCAiTWVkaWEgYnVmZmVyIHBhZGRpbmcgaXMgbGFyZ2VyIHRoYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGtNYXhQYWRkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgdGhpcyB3aWxsIGNhdXNlIGV4dHJhIGFsbG9jYXRpb25zLiI7Ci0gICAgICAgICAgICBsb2dnZWRfd2FybmluZyA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHplcm9zKHBhZGRpbmcgKyAxLCAwKTsKLSAgICAgICAgICBhbGxvY2F0aW9uc18uV3JpdGUoc2l6ZSwgemVyb3MuZGF0YSgpLCBwYWRkaW5nKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjaGFyIHplcm9zW2tNYXhQYWRkaW5nICsgMV0gPSB7MH07Ci0gICAgICAgICAgYWxsb2NhdGlvbnNfLldyaXRlKHNpemUsIHplcm9zLCBwYWRkaW5nKTsKLSAgICAgICAgfQotICAgICAgICBhbGxvY2F0aW9uc18uU2hyaW5rVG8oc2l6ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLURlY29kZXJCdWZmZXI6OlNjb3BlZEFsbG9jYXRvclB0cjo6flNjb3BlZEFsbG9jYXRvclB0cigpIHsKLSAgLy8gfGFsbG9jYXRvcl98IGNhbiBiZSBOVUxMIGZvciBFT1MgYnVmZmVyLgotICBpZiAoYWxsb2NhdG9yXykgewotICAgIGFsbG9jYXRvcl8tPkZyZWUoYWxsb2NhdGlvbnNfKTsKLSAgfQotfQotCi1EZWNvZGVyQnVmZmVyOjpEZWNvZGVyQnVmZmVyKCkgOiBkYXRhXyhOVUxMLCBEZW11eGVyU3RyZWFtOjpVTktOT1dOLCAwKSB7fQotCi1EZWNvZGVyQnVmZmVyOjpEZWNvZGVyQnVmZmVyKEFsbG9jYXRvciogYWxsb2NhdG9yLCBUeXBlIHR5cGUsIHNpemVfdCBzaXplKQotICAgIDogZGF0YV8oYWxsb2NhdG9yLCB0eXBlLCBzaXplKSB7fQotCi1EZWNvZGVyQnVmZmVyOjpEZWNvZGVyQnVmZmVyKEFsbG9jYXRvciogYWxsb2NhdG9yLCBUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzaWRlX2RhdGEsIHNpemVfdCBzaWRlX2RhdGFfc2l6ZSkKLSAgICA6IGRhdGFfKGFsbG9jYXRvciwgdHlwZSwgc2l6ZSksIHNpZGVfZGF0YV9zaXplXyhzaWRlX2RhdGFfc2l6ZSkgewotICBpZiAoIWRhdGEpIHsKLSAgICBDSEVDS19FUShzaXplLCAwdSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGlmIChhbGxvY2F0aW9ucygpLm51bWJlcl9vZl9idWZmZXJzKCkpIHsKLSAgICBhbGxvY2F0aW9ucygpLldyaXRlKDAsIGRhdGEsIHNpemUpOwotICB9Ci0gIGlmIChzaWRlX2RhdGFfc2l6ZV8gPiAwKSB7Ci0gICAgRENIRUNLKHNpZGVfZGF0YSk7Ci0gICAgc2lkZV9kYXRhXy5yZXNldChuZXcgdWludDhfdFtzaWRlX2RhdGFfc2l6ZV9dKTsKLSAgICBtZW1jcHkoc2lkZV9kYXRhXy5nZXQoKSwgc2lkZV9kYXRhLCBzaWRlX2RhdGFfc2l6ZV8pOwotICB9Ci19Ci0KLURlY29kZXJCdWZmZXI6OkRlY29kZXJCdWZmZXIoQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLCBzaXplX3Qgc2lkZV9kYXRhX3NpemUpCi0gICAgOiBkYXRhXyhhbGxvY2F0b3IsIHR5cGUsIGFsbG9jYXRpb25zLnNpemUoKSksCi0gICAgICBzaWRlX2RhdGFfc2l6ZV8oc2lkZV9kYXRhX3NpemUpIHsKLSAgaW50IG9mZnNldCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsb2NhdGlvbnMubnVtYmVyX29mX2J1ZmZlcnMoKTsgKytpKSB7Ci0gICAgdGhpcy0+YWxsb2NhdGlvbnMoKS5Xcml0ZShvZmZzZXQsIGFsbG9jYXRpb25zLmJ1ZmZlcnMoKVtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRpb25zLmJ1ZmZlcl9zaXplcygpW2ldKTsKLSAgICBvZmZzZXQgKz0gYWxsb2NhdGlvbnMuYnVmZmVyX3NpemVzKClbaV07Ci0gIH0KLSAgaWYgKHNpZGVfZGF0YV9zaXplXyA+IDApIHsKLSAgICBzaWRlX2RhdGFfLnJlc2V0KG5ldyB1aW50OF90W3NpZGVfZGF0YV9zaXplX10pOwotICAgIG1lbWNweShzaWRlX2RhdGFfLmdldCgpLCBzaWRlX2RhdGEsIHNpZGVfZGF0YV9zaXplXyk7Ci0gIH0KLX0KLQotRGVjb2RlckJ1ZmZlcjo6fkRlY29kZXJCdWZmZXIoKSB7fQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gRGVjb2RlckJ1ZmZlcjo6Q3JlYXRlKEFsbG9jYXRvciogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSkgewotICBEQ0hFQ0tfR1Qoc2l6ZSwgMCk7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZGVjb2Rlcl9idWZmZXIgPQotICAgICAgbmV3IERlY29kZXJCdWZmZXIoYWxsb2NhdG9yLCB0eXBlLCBzaXplKTsKLSAgaWYgKGRlY29kZXJfYnVmZmVyLT5oYXNfZGF0YSgpKSB7Ci0gICAgcmV0dXJuIGRlY29kZXJfYnVmZmVyOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gRGVjb2RlckJ1ZmZlcjo6Q29weUZyb20oQWxsb2NhdG9yKiBhbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSkgewotICAvLyBJZiB5b3UgaGl0IHRoaXMgQ0hFQ0sgeW91IGxpa2VseSBoYXZlIGEgYnVnIGluIGEgZGVtdXhlci4gR28gZml4IGl0LgotICBDSEVDSyhkYXRhKTsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBkZWNvZGVyX2J1ZmZlciA9Ci0gICAgICBuZXcgRGVjb2RlckJ1ZmZlcihhbGxvY2F0b3IsIHR5cGUsIGRhdGEsIGRhdGFfc2l6ZSwgTlVMTCwgMCk7Ci0gIGlmIChkZWNvZGVyX2J1ZmZlci0+aGFzX2RhdGEoKSkgewotICAgIHJldHVybiBkZWNvZGVyX2J1ZmZlcjsKLSAgfQotICByZXR1cm4gTlVMTDsKLX0KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IERlY29kZXJCdWZmZXI6OkNvcHlGcm9tKAotICAgIEFsbG9jYXRvciogYWxsb2NhdG9yLCBUeXBlIHR5cGUsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCi0gICAgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLCBzaXplX3Qgc2lkZV9kYXRhX3NpemUpIHsKLSAgLy8gSWYgeW91IGhpdCB0aGlzIENIRUNLIHlvdSBsaWtlbHkgaGF2ZSBhIGJ1ZyBpbiBhIGRlbXV4ZXIuIEdvIGZpeCBpdC4KLSAgQ0hFQ0soZGF0YSk7Ci0gIENIRUNLKHNpZGVfZGF0YSk7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZGVjb2Rlcl9idWZmZXIgPSBuZXcgRGVjb2RlckJ1ZmZlcigKLSAgICAgIGFsbG9jYXRvciwgdHlwZSwgZGF0YSwgZGF0YV9zaXplLCBzaWRlX2RhdGEsIHNpZGVfZGF0YV9zaXplKTsKLSAgaWYgKGRlY29kZXJfYnVmZmVyLT5oYXNfZGF0YSgpICYmIGRlY29kZXJfYnVmZmVyLT5oYXNfc2lkZV9kYXRhKCkpIHsKLSAgICByZXR1cm4gZGVjb2Rlcl9idWZmZXI7Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBEZWNvZGVyQnVmZmVyOjpDcmVhdGVFT1NCdWZmZXIoKSB7Ci0gIHJldHVybiBiYXNlOjpXcmFwUmVmQ291bnRlZChuZXcgRGVjb2RlckJ1ZmZlcik7Ci19Ci0KLWNvbnN0IGNoYXIqIERlY29kZXJCdWZmZXI6OkdldFR5cGVOYW1lKCkgY29uc3QgewotICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6QVVESU86Ci0gICAgICByZXR1cm4gImF1ZGlvIjsKLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlZJREVPOgotICAgICAgcmV0dXJuICJ2aWRlbyI7Ci0gICAgY2FzZSBEZW11eGVyU3RyZWFtOjpURVhUOgotICAgICAgcmV0dXJuICJ0ZXh0IjsKLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlVOS05PV046Ci0gICAgICByZXR1cm4gInVua25vd24iOwotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6TlVNX1RZUEVTOgotICAgICAgLy8gRmFsbC10aHJvdWdoIHRvIE5PVFJFQUNIRUQoKS4KLSAgICAgIGJyZWFrOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuICIiOwotfQotCi1zdGQ6OnN0cmluZyBEZWNvZGVyQnVmZmVyOjpBc0h1bWFuUmVhZGFibGVTdHJpbmcoKSB7Ci0gIGlmIChlbmRfb2Zfc3RyZWFtKCkpIHsKLSAgICByZXR1cm4gImVuZCBvZiBzdHJlYW0iOwotICB9Ci0KLSAgc3RkOjpvc3RyaW5nc3RyZWFtIHM7Ci0gIHMgPDwgInR5cGU6ICIgPDwgR2V0VHlwZU5hbWUoKQotICAgIDw8ICIgdGltZXN0YW1wOiAiIDw8IHRpbWVzdGFtcF8uSW5NaWNyb3NlY29uZHMoKQotICAgIDw8ICIgZHVyYXRpb246ICIgPDwgZHVyYXRpb25fLkluTWljcm9zZWNvbmRzKCkgPDwgIiBzaXplOiAiIDw8IGRhdGFfc2l6ZSgpCi0gICAgPDwgIiBzaWRlX2RhdGFfc2l6ZTogIiA8PCBzaWRlX2RhdGFfc2l6ZV8KLSAgICA8PCAiIGlzX2tleV9mcmFtZTogIiA8PCBpc19rZXlfZnJhbWVfCi0gICAgPDwgIiBlbmNyeXB0ZWQ6ICIgPDwgKGRlY3J5cHRfY29uZmlnXyAhPSBOVUxMKSA8PCAiIGRpc2NhcmRfcGFkZGluZyAobXMpOiAoIgotICAgIDw8IGRpc2NhcmRfcGFkZGluZ18uZmlyc3QuSW5NaWxsaXNlY29uZHMoKSA8PCAiLCAiCi0gICAgPDwgZGlzY2FyZF9wYWRkaW5nXy5zZWNvbmQuSW5NaWxsaXNlY29uZHMoKSA8PCAiKSI7Ci0KLSAgaWYgKGRlY3J5cHRfY29uZmlnXykgcyA8PCAiIGRlY3J5cHQ6IiA8PCAoKmRlY3J5cHRfY29uZmlnXyk7Ci0KLSAgcmV0dXJuIHMuc3RyKCk7Ci19Ci0KLXZvaWQgRGVjb2RlckJ1ZmZlcjo6c2V0X3RpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNmYWYxNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfREVDT0RFUl9CVUZGRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfREVDT0RFUl9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L2FsaWduZWRfbWVtb3J5LmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAibmIvbXVsdGlwYXJ0X2FsbG9jYXRvci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBBIHNwZWNpYWxpemVkIGJ1ZmZlciBmb3IgaW50ZXJmYWNpbmcgd2l0aCBhdWRpbyAvIHZpZGVvIGRlY29kZXJzLgotLy8KLS8vIFNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgZGF0YSBpcyBhbGlnbmVkIGFuZCBwYWRkZWQgYXMgbmVjZXNzYXJ5IGJ5IHRoZQotLy8gdW5kZXJseWluZyBkZWNvZGluZyBmcmFtZXdvcmsuICBPbiBkZXNrdG9wIHBsYXRmb3JtcyB0aGlzIG1lYW5zIG1lbW9yeSBpcwotLy8gYWxsb2NhdGVkIHVzaW5nIEZGbXBlZyB3aXRoIHBhcnRpY3VsYXIgYWxpZ25tZW50IGFuZCBwYWRkaW5nIHJlcXVpcmVtZW50cy4KLS8vCi0vLyBBbHNvIGluY2x1ZGVzIGRlY29kZXIgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBmb3IgZGVjcnlwdGlvbi4KLS8vCi0vLyBOT1RFOiBJdCBpcyBpbGxlZ2FsIHRvIGNhbGwgYW55IG1ldGhvZCB3aGVuIGVuZF9vZl9zdHJlYW0oKSBpcyB0cnVlLgotY2xhc3MgTUVESUFfRVhQT1JUIERlY29kZXJCdWZmZXIKLSAgICA6IHB1YmxpYyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxEZWNvZGVyQnVmZmVyPiB7Ci0gcHVibGljOgotICB0eXBlZGVmIERlbXV4ZXJTdHJlYW06OlR5cGUgVHlwZTsKLSAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIG5iOjpNdWx0aXBhcnRBbGxvY2F0b3IgewotICAgcHVibGljOgotICAgIC8vIFVwZGF0ZSB0aGUgdmlkZW8gY29uZmlnIHNvIHRoYXQgY29uc3RyYWludHMgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUKLSAgICAvLyBjdXJyZW50IHJlc29sdXRpb24uCi0gICAgdmlydHVhbCB2b2lkIFVwZGF0ZVZpZGVvQ29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSA9IDA7Ci0gIH07Ci0KLSAgLy8gQ3JlYXRlIGEgRGVjb2RlckJ1ZmZlciB3aG9zZSB8ZGF0YV98IHBvaW50cyB0byBhIG1lbW9yeSB3aXRoIGF0IGxlYXN0Ci0gIC8vIHxzaXplfCBieXRlcy4gIEJ1ZmZlciB3aWxsIGJlIHBhZGRlZCBhbmQgYWxpZ25lZCBhcyBuZWNlc3NhcnkuCi0gIC8vIFRoZSBidWZmZXIncyB8aXNfa2V5X2ZyYW1lX3wgd2lsbCBkZWZhdWx0IHRvIGZhbHNlLgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBDcmVhdGUoQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKLQotICAvLyBDcmVhdGUgYSBEZWNvZGVyQnVmZmVyIHdob3NlIHxkYXRhX3wgaXMgY29waWVkIGZyb20gfGRhdGF8LiAgQnVmZmVyIHdpbGwgYmUKLSAgLy8gcGFkZGVkIGFuZCBhbGlnbmVkIGFzIG5lY2Vzc2FyeS4gIHxkYXRhfCBtdXN0IG5vdCBiZSBOVUxMIGFuZCB8c2l6ZXwgPj0gMC4KLSAgLy8gVGhlIGJ1ZmZlcidzIHxpc19rZXlfZnJhbWVffCB3aWxsIGRlZmF1bHQgdG8gZmFsc2UuCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IENvcHlGcm9tKEFsbG9jYXRvciogYWxsb2NhdG9yLCBUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplKTsKLQotICAvLyBDcmVhdGUgYSBEZWNvZGVyQnVmZmVyIHdob3NlIHxkYXRhX3wgaXMgY29waWVkIGZyb20gfGRhdGF8IGFuZCB8c2lkZV9kYXRhX3wKLSAgLy8gaXMgY29waWVkIGZyb20gfHNpZGVfZGF0YXwuIEJ1ZmZlcnMgd2lsbCBiZSBwYWRkZWQgYW5kIGFsaWduZWQgYXMgbmVjZXNzYXJ5Ci0gIC8vIERhdGEgcG9pbnRlcnMgbXVzdCBub3QgYmUgTlVMTCBhbmQgc2l6ZXMgbXVzdCBiZSA+PSAwLiBUaGUgYnVmZmVyJ3MKLSAgLy8gfGlzX2tleV9mcmFtZV98IHdpbGwgZGVmYXVsdCB0byBmYWxzZS4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gQ29weUZyb20oQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2lkZV9kYXRhX3NpemUpOwotCi0gIC8vIENyZWF0ZSBhIERlY29kZXJCdWZmZXIgaW5kaWNhdGluZyB3ZSd2ZSByZWFjaGVkIGVuZCBvZiBzdHJlYW0uCi0gIC8vCi0gIC8vIENhbGxpbmcgYW55IG1ldGhvZCBvdGhlciB0aGFuIGVuZF9vZl9zdHJlYW0oKSBvbiB0aGUgcmVzdWx0aW5nIGJ1ZmZlcgotICAvLyBpcyBkaXNhbGxvd2VkLgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBDcmVhdGVFT1NCdWZmZXIoKTsKLQotICAvLyBSZXR1cm5zIHRoZSBhbGxvY2F0b3IuICBUaGlzIGlzIHVzdWFsbHkgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY29weSBvZiB0aGUKLSAgLy8gYnVmZmVyLgotICBBbGxvY2F0b3IqIGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGRhdGFfLmFsbG9jYXRvcigpOyB9Ci0KLSAgLy8gR2V0cyB0aGUgcGFyc2VyJ3MgbWVkaWEgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXIuIFZhbHVlIGlzCi0gIC8vIG1lYW5pbmdsZXNzIGZvciBFT1MgYnVmZmVycy4KLSAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gZGF0YV8udHlwZSgpOyB9Ci0gIGNvbnN0IGNoYXIqIEdldFR5cGVOYW1lKCkgY29uc3Q7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIHRpbWVzdGFtcF87Ci0gIH0KLQotICAvLyBUT0RPKGRhbGVjdXJ0aXMpOiBUaGlzIHNob3VsZCBiZSByZW5hbWVkIGF0IHNvbWUgcG9pbnQsIGJ1dCB0byBhdm9pZCBhIHlhawotICAvLyBzaGF2ZSBrZWVwIGFzIGEgdmlydHVhbCB3aXRoIGhhY2tlcl9zdHlsZSgpIGZvciBub3cuCi0gIHZpcnR1YWwgdm9pZCBzZXRfdGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbigpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIGR1cmF0aW9uXzsKLSAgfQotCi0gIHZvaWQgc2V0X2R1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICBEQ0hFQ0soZHVyYXRpb24gPT0ga05vVGltZXN0YW1wIHx8Ci0gICAgICAgICAgIChkdXJhdGlvbiA+PSBiYXNlOjpUaW1lRGVsdGEoKSAmJiBkdXJhdGlvbiAhPSBrSW5maW5pdGVEdXJhdGlvbikpCi0gICAgICAgIDw8IGR1cmF0aW9uLkluU2Vjb25kc0YoKTsKLSAgICBkdXJhdGlvbl8gPSBkdXJhdGlvbjsKLSAgfQotCi0gIGJvb2wgaGFzX2RhdGEoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0aW9ucygpLm51bWJlcl9vZl9idWZmZXJzKCkgPiAwOyB9Ci0KLSAgY29uc3QgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyYgYWxsb2NhdGlvbnMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGRhdGFfLmFsbG9jYXRpb25zKCk7Ci0gIH0KLSAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyYgYWxsb2NhdGlvbnMoKSB7IHJldHVybiBkYXRhXy5hbGxvY2F0aW9ucygpOyB9Ci0KLSAgc2l6ZV90IGRhdGFfc2l6ZSgpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIGRhdGFfLmFsbG9jYXRpb25zKCkuc2l6ZSgpOwotICB9Ci0KLSAgdm9pZCBzaHJpbmtfdG8oc2l6ZV90IHNpemUpIHsKLSAgICBEQ0hFQ0tfR0Uoc3RhdGljX2Nhc3Q8aW50PihzaXplKSwgMCk7Ci0gICAgYWxsb2NhdGlvbnMoKS5TaHJpbmtUbyhzdGF0aWNfY2FzdDxpbnQ+KHNpemUpKTsKLSAgfQotCi0gIGJvb2wgaGFzX3NpZGVfZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHNpZGVfZGF0YV8uZ2V0KCkgIT0gTlVMTDsgfQotCi0gIGNvbnN0IHVpbnQ4X3QqIHNpZGVfZGF0YSgpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIHNpZGVfZGF0YV8uZ2V0KCk7Ci0gIH0KLQotICBzaXplX3Qgc2lkZV9kYXRhX3NpemUoKSBjb25zdCB7Ci0gICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICAgIHJldHVybiBzaWRlX2RhdGFfc2l6ZV87Ci0gIH0KLQotICAvLyBBIGRpc2NhcmQgd2luZG93IGluZGljYXRlcyB0aGUgYW1vdW50IG9mIGRhdGEgd2hpY2ggc2hvdWxkIGJlIGRpc2NhcmQgZnJvbQotICAvLyB0aGlzIGJ1ZmZlciBhZnRlciBkZWNvZGluZy4gIFRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgYW1vdW50IG9mIHRoZSBmcm9udCBhbmQKLSAgLy8gdGhlIHNlY29uZCB0aGUgYW1vdW50IG9mZiB0aGUgYmFjay4gIEEgdmFsdWUgb2Yga0luZmluaXRlRHVyYXRpb24gZm9yIHRoZQotICAvLyBmaXJzdCB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGVudGlyZSBidWZmZXIgc2hvdWxkIGJlIGRpc2NhcmRlZDsgdGhlIHNlY29uZAotICAvLyB2YWx1ZSBtdXN0IGJlIGJhc2U6OlRpbWVEZWx0YSgpIGluIHRoaXMgY2FzZS4KLSAgdHlwZWRlZiBzdGQ6OnBhaXI8YmFzZTo6VGltZURlbHRhLCBiYXNlOjpUaW1lRGVsdGE+IERpc2NhcmRQYWRkaW5nOwotICBjb25zdCBEaXNjYXJkUGFkZGluZyYgZGlzY2FyZF9wYWRkaW5nKCkgY29uc3QgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICByZXR1cm4gZGlzY2FyZF9wYWRkaW5nXzsKLSAgfQotCi0gIHZvaWQgc2V0X2Rpc2NhcmRfcGFkZGluZyhjb25zdCBEaXNjYXJkUGFkZGluZyYgZGlzY2FyZF9wYWRkaW5nKSB7Ci0gICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICAgIGRpc2NhcmRfcGFkZGluZ18gPSBkaXNjYXJkX3BhZGRpbmc7Ci0gIH0KLQotICBjb25zdCBEZWNyeXB0Q29uZmlnKiBkZWNyeXB0X2NvbmZpZygpIGNvbnN0IHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgcmV0dXJuIGRlY3J5cHRfY29uZmlnXy5nZXQoKTsKLSAgfQotCi0gIHZvaWQgc2V0X2RlY3J5cHRfY29uZmlnKHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBkZWNyeXB0X2NvbmZpZykgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICBkZWNyeXB0X2NvbmZpZ18gPSBzdGQ6Om1vdmUoZGVjcnlwdF9jb25maWcpOwotICB9Ci0KLSAgLy8gSWYgdGhlcmUncyBubyBkYXRhIGluIHRoaXMgYnVmZmVyLCBpdCByZXByZXNlbnRzIGVuZCBvZiBzdHJlYW0uCi0gIGJvb2wgZW5kX29mX3N0cmVhbSgpIGNvbnN0IHsgcmV0dXJuICFoYXNfZGF0YSgpOyB9Ci0KLSAgLy8gSW5kaWNhdGVzIHRoaXMgYnVmZmVyIGlzIHBhcnQgb2YgYSBzcGxpY2UgYXJvdW5kIHxzcGxpY2VfdGltZXN0YW1wX3wuCi0gIC8vIFJldHVybnMga05vVGltZXN0YW1wIGlmIHRoZSBidWZmZXIgaXMgbm90IHBhcnQgb2YgYSBzcGxpY2UuCi0gIGJhc2U6OlRpbWVEZWx0YSBzcGxpY2VfdGltZXN0YW1wKCkgY29uc3QgewotICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKLSAgICByZXR1cm4gc3BsaWNlX3RpbWVzdGFtcF87Ci0gIH0KLQotICAvLyBXaGVuIHNldCB0byBhbnl0aGluZyBidXQga05vVGltZXN0YW1wIGluZGljYXRlcyB0aGlzIGJ1ZmZlciBpcyBwYXJ0IG9mIGEKLSAgLy8gc3BsaWNlIGFyb3VuZCB8c3BsaWNlX3RpbWVzdGFtcHwuCi0gIHZvaWQgc2V0X3NwbGljZV90aW1lc3RhbXAoYmFzZTo6VGltZURlbHRhIHNwbGljZV90aW1lc3RhbXApIHsKLSAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgc3BsaWNlX3RpbWVzdGFtcF8gPSBzcGxpY2VfdGltZXN0YW1wOwotICB9Ci0KLSAgYm9vbCBpc19rZXlfZnJhbWUoKSBjb25zdCB7Ci0gICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICAgIHJldHVybiBpc19rZXlfZnJhbWVfOwotICB9Ci0KLSAgdm9pZCBzZXRfaXNfa2V5X2ZyYW1lKGJvb2wgaXNfa2V5X2ZyYW1lKSB7Ci0gICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICAgIGlzX2tleV9mcmFtZV8gPSBpc19rZXlfZnJhbWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgfCp0aGlzfC4KLSAgc3RkOjpzdHJpbmcgQXNIdW1hblJlYWRhYmxlU3RyaW5nKCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGZyaWVuZCBjbGFzcyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxEZWNvZGVyQnVmZmVyPjsKLQotICAvLyBUaGUgZGVmYXVsdCBjdG9yIGNyZWF0ZXMgYW4gRU9TIGJ1ZmZlciB3aXRob3V0IHNwZWNpZmljIHN0cmVhbSB0eXBlLgotICBEZWNvZGVyQnVmZmVyKCk7Ci0KLSAgLy8gQWxsb2NhdGVzIGJ1ZmZlciB3aXRoIHxzaXplfCA+PSAwLiAgQnVmZmVyIHdpbGwgYmUgcGFkZGVkIGFuZCBhbGlnbmVkCi0gIC8vIGFzIG5lY2Vzc2FyeSwgYW5kIHxpc19rZXlfZnJhbWVffCB3aWxsIGRlZmF1bHQgdG8gZmFsc2UuCi0gIERlY29kZXJCdWZmZXIoQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFR5cGUgdHlwZSwgc2l6ZV90IHNpemUpOwotCi0gIC8vIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiBzaXplIHxzaXplfCA+PSAwIGFuZCBjb3BpZXMgfGRhdGF8IGludG8gaXQuICBCdWZmZXIKLSAgLy8gd2lsbCBiZSBwYWRkZWQgYW5kIGFsaWduZWQgYXMgbmVjZXNzYXJ5LiAgSWYgfGRhdGF8IGlzIE5VTEwgdGhlbiB8ZGF0YV98IGlzCi0gIC8vIHNldCB0byBOVUxMIGFuZCB8YnVmZmVyX3NpemVffCB0byAwLiAgfGlzX2tleV9mcmFtZV98IHdpbGwgZGVmYXVsdCB0bwotICAvLyBmYWxzZS4KLSAgRGVjb2RlckJ1ZmZlcihBbGxvY2F0b3IqIGFsbG9jYXRvciwgVHlwZSB0eXBlLCBjb25zdCB1aW50OF90KiBkYXRhLAotICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBjb25zdCB1aW50OF90KiBzaWRlX2RhdGEsIHNpemVfdCBzaWRlX2RhdGFfc2l6ZSk7Ci0KLSAgLy8gQWxsb2NhdGVzIGEgYnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgaW4gfGFsbG9jYXRpb25zfC4gIEJ1ZmZlciB3aWxsIGJlCi0gIC8vIHBhZGRlZCBhbmQgYWxpZ25lZCBhcyBuZWNlc3NhcnkuICB8aXNfa2V5X2ZyYW1lX3wgd2lsbCBkZWZhdWx0IHRvIGZhbHNlLgotICBEZWNvZGVyQnVmZmVyKEFsbG9jYXRvciogYWxsb2NhdG9yLCBUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucywgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgIHNpemVfdCBzaWRlX2RhdGFfc2l6ZSk7Ci0KLSAgdmlydHVhbCB+RGVjb2RlckJ1ZmZlcigpOwotCi0gcHJpdmF0ZToKLSAgY2xhc3MgU2NvcGVkQWxsb2NhdG9yUHRyIHsKLSAgIHB1YmxpYzoKLSAgICBTY29wZWRBbGxvY2F0b3JQdHIoQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFR5cGUgdHlwZSwgc2l6ZV90IHNpemUpOwotICAgIH5TY29wZWRBbGxvY2F0b3JQdHIoKTsKLQotICAgIGNvbnN0IEFsbG9jYXRvcjo6QWxsb2NhdGlvbnMmIGFsbG9jYXRpb25zKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdGlvbnNfOyB9Ci0gICAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyYgYWxsb2NhdGlvbnMoKSB7IHJldHVybiBhbGxvY2F0aW9uc187IH0KLQotICAgIEFsbG9jYXRvciogYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yXzsgfQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0KLSAgIHByaXZhdGU6Ci0gICAgQWxsb2NhdG9yKiBhbGxvY2F0b3JfOwotICAgIFR5cGUgdHlwZV87Ci0gICAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBhbGxvY2F0aW9uc187Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2NvcGVkQWxsb2NhdG9yUHRyKTsKLSAgfTsKLQotICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wXzsKLSAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uXzsKLQotICBTY29wZWRBbGxvY2F0b3JQdHIgZGF0YV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBkZWNyeXB0X2NvbmZpZ187Ci0gIERpc2NhcmRQYWRkaW5nIGRpc2NhcmRfcGFkZGluZ187Ci0gIGJhc2U6OlRpbWVEZWx0YSBzcGxpY2VfdGltZXN0YW1wXyA9IGtOb1RpbWVzdGFtcDsKLSAgYm9vbCBpc19rZXlfZnJhbWVfID0gZmFsc2U7Ci0KLSAgc2l6ZV90IHNpZGVfZGF0YV9zaXplXyA9IDA7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHNpZGVfZGF0YV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlY29kZXJCdWZmZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfREVDT0RFUl9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyX2NhY2hlLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuY2MKaW5kZXggODY1MjE2Zi4uNDQwMDUzZCAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuY2MKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuY2MKQEAgLTY2LDcgKzY2LDcgQEAKICAgdmlkZW9fYnVmZmVyX2luZGV4XyA9IDA7CiB9CiAKLXNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gRGVjb2RlckJ1ZmZlckNhY2hlOjpHZXRCdWZmZXIoCitzY29wZWRfcmVmcHRyPDo6bWVkaWE6OkRlY29kZXJCdWZmZXI+IERlY29kZXJCdWZmZXJDYWNoZTo6R2V0QnVmZmVyKAogICAgIERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgY29uc3QgewogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9jYWNoZS5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuaAppbmRleCA0ZTUxOTBiLi42N2M5NWI1IDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9jYWNoZS5oCisrKyBiL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyX2NhY2hlLmgKQEAgLTIwLDggKzIwLDggQEAKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgogI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZF9jaGVja2VyLmgiCiAjaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS8vbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC0zMyw2ICszMyw5IEBACiAvLyBiZSB1c2VmdWwgdG8gaW1wbGVtZW50IHN1c3BlbmQvcmVzdW1lLgogY2xhc3MgRGVjb2RlckJ1ZmZlckNhY2hlIHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6RGVjb2RlckJ1ZmZlciBEZWNvZGVyQnVmZmVyOworICB0eXBlZGVmIDo6bWVkaWE6OkRlbXV4ZXJTdHJlYW0gRGVtdXhlclN0cmVhbTsKKwogICBEZWNvZGVyQnVmZmVyQ2FjaGUoKTsKIAogICB2b2lkIEFkZEJ1ZmZlcihEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUsCkBAIC00Niw3ICs0OSw3IEBACiAgIHZvaWQgQWR2YW5jZVRvTmV4dEJ1ZmZlcihEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpOwogCiAgcHJpdmF0ZToKLSAgdHlwZWRlZiBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gPiBCdWZmZXJzOworICB0eXBlZGVmIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPj4gQnVmZmVyczsKICAgdHlwZWRlZiBzdGQ6OmRlcXVlPGJhc2U6OlRpbWVEZWx0YT4gS2V5RnJhbWVUaW1lc3RhbXBzOwogCiAgIHN0YXRpYyBzaXplX3QgQ2xlYXJTZWdtZW50c0JlZm9yZU1lZGlhVGltZSgKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyX3F1ZXVlLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDZiM2QuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWUuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLURlY29kZXJCdWZmZXJRdWV1ZTo6RGVjb2RlckJ1ZmZlclF1ZXVlKCkKLSAgICA6IGVhcmxpZXN0X3ZhbGlkX3RpbWVzdGFtcF8oa05vVGltZXN0YW1wKSwgZGF0YV9zaXplXygwKSB7fQotCi1EZWNvZGVyQnVmZmVyUXVldWU6On5EZWNvZGVyQnVmZmVyUXVldWUoKSB7fQotCi12b2lkIERlY29kZXJCdWZmZXJRdWV1ZTo6UHVzaChjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIpIHsKLSAgQ0hFQ0soIWJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKTsKLQotICBxdWV1ZV8ucHVzaF9iYWNrKGJ1ZmZlcik7Ci0KLSAgZGF0YV9zaXplXyArPSBidWZmZXItPmRhdGFfc2l6ZSgpOwotCi0gIC8vIFRPRE8oc2NoZXJrdXMpOiBGRm1wZWcgcmV0dXJucyBzb21lIHBhY2tldHMgd2l0aCBubyB0aW1lc3RhbXAgYWZ0ZXIKLSAgLy8gc2Vla2luZy4gRml4IGFuZCB0dXJuIHRoaXMgaW50byBDSEVDSygpLiBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNjIxOTIKLSAgaWYgKGJ1ZmZlci0+dGltZXN0YW1wKCkgPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgRFZMT0coMSkgPDwgIkJ1ZmZlciBoYXMgbm8gdGltZXN0YW1wIjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoZWFybGllc3RfdmFsaWRfdGltZXN0YW1wXyA9PSBrTm9UaW1lc3RhbXApIHsKLSAgICBlYXJsaWVzdF92YWxpZF90aW1lc3RhbXBfID0gYnVmZmVyLT50aW1lc3RhbXAoKTsKLSAgfQotCi0gIGlmIChidWZmZXItPnRpbWVzdGFtcCgpIDwgZWFybGllc3RfdmFsaWRfdGltZXN0YW1wXykgewotICAgIERWTE9HKDIpIDw8ICJPdXQgb2Ygb3JkZXIgdGltZXN0YW1wczogIgotICAgICAgICAgICAgIDw8IGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSA8PCAiIHZzLiAiCi0gICAgICAgICAgICAgPDwgZWFybGllc3RfdmFsaWRfdGltZXN0YW1wXy5Jbk1pY3Jvc2Vjb25kcygpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGVhcmxpZXN0X3ZhbGlkX3RpbWVzdGFtcF8gPSBidWZmZXItPnRpbWVzdGFtcCgpOwotICBpbl9vcmRlcl9xdWV1ZV8ucHVzaF9iYWNrKGJ1ZmZlcik7Ci19Ci0KLXNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gRGVjb2RlckJ1ZmZlclF1ZXVlOjpQb3AoKSB7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gcXVldWVfLmZyb250KCk7Ci0gIHF1ZXVlXy5wb3BfZnJvbnQoKTsKLQotICBzaXplX3QgYnVmZmVyX2RhdGFfc2l6ZSA9IGJ1ZmZlci0+ZGF0YV9zaXplKCk7Ci0gIERDSEVDS19MRShidWZmZXJfZGF0YV9zaXplLCBkYXRhX3NpemVfKTsKLSAgZGF0YV9zaXplXyAtPSBidWZmZXJfZGF0YV9zaXplOwotCi0gIGlmICghaW5fb3JkZXJfcXVldWVfLmVtcHR5KCkgJiYKLSAgICAgIGluX29yZGVyX3F1ZXVlXy5mcm9udCgpLmdldCgpID09IGJ1ZmZlci5nZXQoKSkgewotICAgIGluX29yZGVyX3F1ZXVlXy5wb3BfZnJvbnQoKTsKLSAgfQotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgRGVjb2RlckJ1ZmZlclF1ZXVlOjpDbGVhcigpIHsKLSAgcXVldWVfLmNsZWFyKCk7Ci0gIGRhdGFfc2l6ZV8gPSAwOwotICBpbl9vcmRlcl9xdWV1ZV8uY2xlYXIoKTsKLSAgZWFybGllc3RfdmFsaWRfdGltZXN0YW1wXyA9IGtOb1RpbWVzdGFtcDsKLX0KLQotYm9vbCBEZWNvZGVyQnVmZmVyUXVldWU6OklzRW1wdHkoKSB7IHJldHVybiBxdWV1ZV8uZW1wdHkoKTsgfQotCi1iYXNlOjpUaW1lRGVsdGEgRGVjb2RlckJ1ZmZlclF1ZXVlOjpEdXJhdGlvbigpIHsKLSAgaWYgKGluX29yZGVyX3F1ZXVlXy5zaXplKCkgPCAyKSByZXR1cm4gYmFzZTo6VGltZURlbHRhKCk7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHN0YXJ0ID0gaW5fb3JkZXJfcXVldWVfLmZyb250KCktPnRpbWVzdGFtcCgpOwotICBiYXNlOjpUaW1lRGVsdGEgZW5kID0gaW5fb3JkZXJfcXVldWVfLmJhY2soKS0+dGltZXN0YW1wKCk7Ci0gIHJldHVybiBlbmQgLSBzdGFydDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9xdWV1ZS5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRlZTdlNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9xdWV1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9ERUNPREVSX0JVRkZFUl9RVUVVRV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9ERUNPREVSX0JVRkZFUl9RVUVVRV9IXwotCi0jaW5jbHVkZSA8ZGVxdWU+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgRGVjb2RlckJ1ZmZlcjsKLQotLy8gTWFpbnRhaW5zIGEgcXVldWUgb2YgRGVjb2RlckJ1ZmZlcnMgaW4gaW5jcmVhc2luZyB0aW1lc3RhbXAgb3JkZXIuCi0vLwotLy8gSW5kaXZpZHVhbCBidWZmZXIgZHVyYXRpb25zIGFyZSBpZ25vcmVkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGR1cmF0aW9uIG9mIHRoZQotLy8gcXVldWUgaS5lLiwgdGhlIHF1ZXVlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGluLW9yZGVyIGJ1ZmZlcnMgdG8gY2FsY3VsYXRlCi0vLyBkdXJhdGlvbi4KLS8vCi0vLyBOb3QgdGhyZWFkIHNhZmU6IGFjY2VzcyBtdXN0IGJlIGV4dGVybmFsbHkgc3luY2hyb25pemVkLgotY2xhc3MgTUVESUFfRVhQT1JUIERlY29kZXJCdWZmZXJRdWV1ZSB7Ci0gcHVibGljOgotICBEZWNvZGVyQnVmZmVyUXVldWUoKTsKLSAgfkRlY29kZXJCdWZmZXJRdWV1ZSgpOwotCi0gIC8vIFB1c2ggfGJ1ZmZlcnwgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuIElmIHxidWZmZXJ8IGlzIHF1ZXVlZCBvdXQgb2Ygb3JkZXIKLSAgLy8gaXQgd2lsbCBiZSBleGNsdWRlZCBmcm9tIGR1cmF0aW9uIGNhbGN1bGF0aW9ucy4KLSAgLy8KLSAgLy8gSXQgaXMgaW52YWxpZCB0byBwdXNoIGFuIGVuZC1vZi1zdHJlYW0gfGJ1ZmZlcnwuCi0gIHZvaWQgUHVzaChjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIpOwotCi0gIC8vIFBvcHMgYSBEZWNvZGVyQnVmZmVyIGZyb20gdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4KLSAgLy8KLSAgLy8gSXQgaXMgaW52YWxpZCB0byBjYWxsIFBvcCgpIG9uIGFuIGVtcHR5IHF1ZXVlLgotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IFBvcCgpOwotCi0gIC8vIFJlbW92ZXMgYWxsIHF1ZXVlZCBidWZmZXJzLgotICB2b2lkIENsZWFyKCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcXVldWUgaXMgZW1wdHkuCi0gIGJvb2wgSXNFbXB0eSgpOwotCi0gIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIGVuY29kZWQgZGF0YSBzdG9yZWQgaW4gdGhpcyBxdWV1ZSBhcyBtZWFzdXJlZCBieQotICAvLyB0aGUgdGltZXN0YW1wcyBvZiB0aGUgZWFybGllc3QgYW5kIGxhdGVzdCBidWZmZXJzLCBpZ25vcmluZyBvdXQgb2Ygb3JkZXIKLSAgLy8gYnVmZmVycy4KLSAgLy8KLSAgLy8gUmV0dXJucyB6ZXJvIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4KLSAgYmFzZTo6VGltZURlbHRhIER1cmF0aW9uKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiBidWZmZXJzIGluc2lkZSB0aGUgcXVldWUuCi0gIHNpemVfdCBkYXRhX3NpemUoKSBjb25zdCB7IHJldHVybiBkYXRhX3NpemVfOyB9Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiA+IFF1ZXVlOwotICBRdWV1ZSBxdWV1ZV87Ci0KLSAgLy8gQSBzdWJzZXQgb2YgfHF1ZXVlX3wgdGhhdCBjb250YWlucyBidWZmZXJzIHRoYXQgYXJlIGluIHN0cmljdGx5Ci0gIC8vIGluY3JlYXNpbmcgdGltZXN0YW1wIG9yZGVyLiBVc2VkIHRvIGNhbGN1bGF0ZSBEdXJhdGlvbigpIHdoaWxlIGlnbm9yaW5nCi0gIC8vIG91dC1vZi1vcmRlciBidWZmZXJzLgotICBRdWV1ZSBpbl9vcmRlcl9xdWV1ZV87Ci0KLSAgYmFzZTo6VGltZURlbHRhIGVhcmxpZXN0X3ZhbGlkX3RpbWVzdGFtcF87Ci0KLSAgLy8gVG90YWwgc2l6ZSBpbiBieXRlcyBvZiBidWZmZXJzIGluIHRoZSBxdWV1ZS4KLSAgc2l6ZV90IGRhdGFfc2l6ZV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlY29kZXJCdWZmZXJRdWV1ZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9ERUNPREVSX0JVRkZFUl9RVUVVRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWVfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9xdWV1ZV91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE2NTVmZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9xdWV1ZV91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfcXVldWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGF0aWMgYmFzZTo6VGltZURlbHRhIFRvVGltZURlbHRhKGludCBzZWNvbmRzKSB7Ci0gIGlmIChzZWNvbmRzIDwgMCkgcmV0dXJuIGtOb1RpbWVzdGFtcDsKLSAgcmV0dXJuIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoc2Vjb25kcyk7Ci19Ci0KLS8vIEhlbHBlciB0byBjcmVhdGUgYnVmZmVycyB3aXRoIHNwZWNpZmllZCB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KLS8vCi0vLyBOZWdhdGl2ZSBudW1iZXJzIHdpbGwgYmUgY29udmVydGVkIHRvIGtOb1RpbWVzdGFtcDsKLXN0YXRpYyBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IENyZWF0ZUJ1ZmZlcihpbnQgdGltZXN0YW1wKSB7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gbmV3IERlY29kZXJCdWZmZXIoMCk7Ci0gIGJ1ZmZlci0+c2V0X3RpbWVzdGFtcChUb1RpbWVEZWx0YSh0aW1lc3RhbXApKTsKLSAgYnVmZmVyLT5zZXRfZHVyYXRpb24oVG9UaW1lRGVsdGEoMCkpOwotICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGF0aWMgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBDcmVhdGVCdWZmZXIoaW50IHRpbWVzdGFtcCwgaW50IHNpemUpIHsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPSBuZXcgRGVjb2RlckJ1ZmZlcihzaXplKTsKLSAgYnVmZmVyLT5zZXRfdGltZXN0YW1wKFRvVGltZURlbHRhKHRpbWVzdGFtcCkpOwotICBidWZmZXItPnNldF9kdXJhdGlvbihUb1RpbWVEZWx0YSgwKSk7Ci0gIHJldHVybiBidWZmZXI7Ci19Ci0KLVRFU1QoRGVjb2RlckJ1ZmZlclF1ZXVlVGVzdCwgSXNFbXB0eSkgewotICBEZWNvZGVyQnVmZmVyUXVldWUgcXVldWU7Ci0gIEVYUEVDVF9UUlVFKHF1ZXVlLklzRW1wdHkoKSk7Ci0KLSAgcXVldWUuUHVzaChDcmVhdGVCdWZmZXIoMCkpOwotICBFWFBFQ1RfRkFMU0UocXVldWUuSXNFbXB0eSgpKTsKLX0KLQotVEVTVChEZWNvZGVyQnVmZmVyUXVldWVUZXN0LCBDbGVhcikgewotICBEZWNvZGVyQnVmZmVyUXVldWUgcXVldWU7Ci0gIHF1ZXVlLlB1c2goQ3JlYXRlQnVmZmVyKDApKTsKLSAgcXVldWUuUHVzaChDcmVhdGVCdWZmZXIoMSkpOwotICBFWFBFQ1RfRkFMU0UocXVldWUuSXNFbXB0eSgpKTsKLSAgRVhQRUNUX0VRKDEsIHF1ZXVlLkR1cmF0aW9uKCkuSW5TZWNvbmRzKCkpOwotCi0gIHF1ZXVlLkNsZWFyKCk7Ci0gIEVYUEVDVF9UUlVFKHF1ZXVlLklzRW1wdHkoKSk7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLX0KLQotVEVTVChEZWNvZGVyQnVmZmVyUXVldWVUZXN0LCBEdXJhdGlvbikgewotICBEZWNvZGVyQnVmZmVyUXVldWUgcXVldWU7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigwKSk7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigxKSk7Ci0gIEVYUEVDVF9FUSgxLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigyKSk7Ci0gIEVYUEVDVF9FUSgyLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcig0KSk7Ci0gIEVYUEVDVF9FUSg0LCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5Qb3AoKTsKLSAgRVhQRUNUX0VRKDMsIHF1ZXVlLkR1cmF0aW9uKCkuSW5TZWNvbmRzKCkpOwotCi0gIHF1ZXVlLlBvcCgpOwotICBFWFBFQ1RfRVEoMiwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgcXVldWUuUG9wKCk7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5Qb3AoKTsKLSAgRVhQRUNUX0VRKDAsIHF1ZXVlLkR1cmF0aW9uKCkuSW5TZWNvbmRzKCkpOwotfQotCi1URVNUKERlY29kZXJCdWZmZXJRdWV1ZVRlc3QsIER1cmF0aW9uX091dE9mT3JkZXIpIHsKLSAgRGVjb2RlckJ1ZmZlclF1ZXVlIHF1ZXVlOwotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigxMCkpOwotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigxMikpOwotICBFWFBFQ1RfRVEoMiwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgLy8gT3V0IG9mIG9yZGVyOiBkdXJhdGlvbiBzaG91bGRuJ3QgY2hhbmdlLgotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcig4KSk7Ci0gIEVYUEVDVF9FUSgyLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICAvLyBSZW1vdmluZyBmaXJzdCBidWZmZXIgc2hvdWxkIGxlYXZlIHRoZSBzZWNvbmQgYnVmZmVyIGFzIHRoZSBvbmx5IGJ1ZmZlcgotICAvLyBpbmNsdWRlZCBpbiB0aGUgZHVyYXRpb24gY2FsY3VsYXRpb24uCi0gIHF1ZXVlLlBvcCgpOwotICBFWFBFQ1RfRVEoMCwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgLy8gUmVtb3Zpbmcgc2Vjb25kIGJ1ZmZlciBsZWF2ZXMgdGhlIG91dC1vZi1vcmRlciBidWZmZXIuIEl0IHNob3VsZG4ndCBiZQotICAvLyBpbmNsdWRlZCBpbiBkdXJhdGlvbiBjYWxjdWxhdGlvbnMuCi0gIHF1ZXVlLlBvcCgpOwotICBFWFBFQ1RfRVEoMCwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgLy8gUHVzaCBhIHN0aWxsLXRvby1lYXJseSBidWZmZXIuIEl0IHNob3VsZG4ndCBiZSBpbmNsdWRlZCBpbiBkdXJhdGlvbgotICAvLyBjYWxjdWxhdGlvbnMuCi0gIHF1ZXVlLlB1c2goQ3JlYXRlQnVmZmVyKDExKSk7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICAvLyBQdXNoIGEgYnVmZmVyIHRoYXQncyBhZnRlciB0aGUgZWFybGllc3QgdmFsaWQgdGltZS4gSXQncyBhIHNpbmd1bGFyIHZhbGlkCi0gIC8vIGJ1ZmZlciBzbyBkdXJhdGlvbiBpcyBzdGlsbCB6ZXJvLgotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigxNCkpOwotICBFWFBFQ1RfRVEoMCwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgLy8gUHVzaCBhIHNlY29uZCB2YWxpZCBidWZmZXIuIFdlIHNob3VsZCBub3cgaGF2ZSBhIGR1cmF0aW9uLgotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigxNykpOwotICBFWFBFQ1RfRVEoMywgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci19Ci0KLVRFU1QoRGVjb2RlckJ1ZmZlclF1ZXVlVGVzdCwgRHVyYXRpb25fTm9UaW1lc3RhbXApIHsKLSAgLy8gQnVmZmVycyB3aXRoIG5vIHRpbWVzdGFtcCBkb24ndCBhZmZlY3QgZHVyYXRpb24uCi0gIERlY29kZXJCdWZmZXJRdWV1ZSBxdWV1ZTsKLSAgcXVldWUuUHVzaChDcmVhdGVCdWZmZXIoMCkpOwotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcig0KSk7Ci0gIEVYUEVDVF9FUSg0LCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigtMSkpOwotICBFWFBFQ1RfRVEoNCwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgcXVldWUuUHVzaChDcmVhdGVCdWZmZXIoNikpOwotICBFWFBFQ1RfRVEoNiwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgcXVldWUuUG9wKCk7Ci0gIEVYUEVDVF9FUSgyLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLQotICBxdWV1ZS5Qb3AoKTsKLSAgRVhQRUNUX0VRKDAsIHF1ZXVlLkR1cmF0aW9uKCkuSW5TZWNvbmRzKCkpOwotCi0gIHF1ZXVlLlBvcCgpOwotICBFWFBFQ1RfRVEoMCwgcXVldWUuRHVyYXRpb24oKS5JblNlY29uZHMoKSk7Ci0KLSAgcXVldWUuUG9wKCk7Ci0gIEVYUEVDVF9FUSgwLCBxdWV1ZS5EdXJhdGlvbigpLkluU2Vjb25kcygpKTsKLX0KLQotVEVTVChEZWNvZGVyQnVmZmVyUXVldWVUZXN0LCBEYXRhU2l6ZSkgewotICBEZWNvZGVyQnVmZmVyUXVldWUgcXVldWU7Ci0gIEVYUEVDVF9FUShxdWV1ZS5kYXRhX3NpemUoKSwgMHUpOwotCi0gIHF1ZXVlLlB1c2goQ3JlYXRlQnVmZmVyKDAsIDEyMDB1KSk7Ci0gIEVYUEVDVF9FUShxdWV1ZS5kYXRhX3NpemUoKSwgMTIwMHUpOwotCi0gIHF1ZXVlLlB1c2goQ3JlYXRlQnVmZmVyKDEsIDEwMDB1KSk7Ci0gIEVYUEVDVF9FUShxdWV1ZS5kYXRhX3NpemUoKSwgMjIwMHUpOwotCi0gIHF1ZXVlLlBvcCgpOwotICBFWFBFQ1RfRVEocXVldWUuZGF0YV9zaXplKCksIDEwMDB1KTsKLQotICBxdWV1ZS5QdXNoKENyZWF0ZUJ1ZmZlcigyLCA5OTl1KSk7Ci0gIHF1ZXVlLlB1c2goQ3JlYXRlQnVmZmVyKDMsIDk5OXUpKTsKLSAgRVhQRUNUX0VRKHF1ZXVlLmRhdGFfc2l6ZSgpLCAyOTk4dSk7Ci0KLSAgcXVldWUuQ2xlYXIoKTsKLSAgRVhQRUNUX0VRKHF1ZXVlLmRhdGFfc2l6ZSgpLCAwdSk7Ci0KLSAgcXVldWUuUHVzaChDcmVhdGVCdWZmZXIoNCwgMTQwMHUpKTsKLSAgRVhQRUNUX0VRKHF1ZXVlLmRhdGFfc2l6ZSgpLCAxNDAwdSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzOWM3OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3B0cl91dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRFU1QoRGVjb2RlckJ1ZmZlclRlc3QsIENvbnN0cnVjdG9ycykgewotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlcihuZXcgRGVjb2RlckJ1ZmZlcigwKSk7Ci0gIEVYUEVDVF9UUlVFKGJ1ZmZlci0+ZGF0YSgpKTsKLSAgRVhQRUNUX0VRKDB1LCBidWZmZXItPmRhdGFfc2l6ZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+aXNfa2V5X2ZyYW1lKCkpOwotCi0gIGNvbnN0IHNpemVfdCBrVGVzdFNpemUgPSAxMDsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIzKG5ldyBEZWNvZGVyQnVmZmVyKGtUZXN0U2l6ZSkpOwotICBBU1NFUlRfVFJVRShidWZmZXIzLmdldCgpKTsKLSAgRVhQRUNUX0VRKGtUZXN0U2l6ZSwgYnVmZmVyMy0+ZGF0YV9zaXplKCkpOwotfQotCi1URVNUKERlY29kZXJCdWZmZXJUZXN0LCBDcmVhdGVFT1NCdWZmZXIpIHsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIoRGVjb2RlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCkpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci19Ci0KLVRFU1QoRGVjb2RlckJ1ZmZlclRlc3QsIENvcHlGcm9tKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9ICJoZWxsbyI7Ci0gIGNvbnN0IHNpemVfdCBrRGF0YVNpemUgPSBhcnJheXNpemUoa0RhdGEpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyMihEZWNvZGVyQnVmZmVyOjpDb3B5RnJvbSgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZrRGF0YSksIGtEYXRhU2l6ZSkpOwotICBBU1NFUlRfVFJVRShidWZmZXIyLmdldCgpKTsKLSAgRVhQRUNUX05FKGtEYXRhLCBidWZmZXIyLT5kYXRhKCkpOwotICBFWFBFQ1RfRVEoYnVmZmVyMi0+ZGF0YV9zaXplKCksIGtEYXRhU2l6ZSk7Ci0gIEVYUEVDVF9FUSgwLCBtZW1jbXAoYnVmZmVyMi0+ZGF0YSgpLCBrRGF0YSwga0RhdGFTaXplKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXIyLT5lbmRfb2Zfc3RyZWFtKCkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyMi0+aXNfa2V5X2ZyYW1lKCkpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyMyhEZWNvZGVyQnVmZmVyOjpDb3B5RnJvbSgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZrRGF0YSksIGtEYXRhU2l6ZSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZrRGF0YSksIGtEYXRhU2l6ZSkpOwotICBBU1NFUlRfVFJVRShidWZmZXIzLmdldCgpKTsKLSAgRVhQRUNUX05FKGtEYXRhLCBidWZmZXIzLT5kYXRhKCkpOwotICBFWFBFQ1RfRVEoYnVmZmVyMy0+ZGF0YV9zaXplKCksIGtEYXRhU2l6ZSk7Ci0gIEVYUEVDVF9FUSgwLCBtZW1jbXAoYnVmZmVyMy0+ZGF0YSgpLCBrRGF0YSwga0RhdGFTaXplKSk7Ci0gIEVYUEVDVF9ORShrRGF0YSwgYnVmZmVyMy0+c2lkZV9kYXRhKCkpOwotICBFWFBFQ1RfRVEoYnVmZmVyMy0+c2lkZV9kYXRhX3NpemUoKSwga0RhdGFTaXplKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNtcChidWZmZXIzLT5zaWRlX2RhdGEoKSwga0RhdGEsIGtEYXRhU2l6ZSkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyMy0+ZW5kX29mX3N0cmVhbSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlcjMtPmlzX2tleV9mcmFtZSgpKTsKLX0KLQotI2lmICFkZWZpbmVkKE9TX0FORFJPSUQpCi1URVNUKERlY29kZXJCdWZmZXJUZXN0LCBQYWRkaW5nQWxpZ25tZW50KSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9ICJoZWxsbyI7Ci0gIGNvbnN0IHNpemVfdCBrRGF0YVNpemUgPSBhcnJheXNpemUoa0RhdGEpOwotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlcjIoRGVjb2RlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigma0RhdGEpLCBrRGF0YVNpemUpKTsKLSAgQVNTRVJUX1RSVUUoYnVmZmVyMi5nZXQoKSk7Ci0KLSAgLy8gUGFkZGluZyBkYXRhIHNob3VsZCBhbHdheXMgYmUgemVyb2VkLgotICBmb3IgKGludCBpID0gMDsgaSA8IERlY29kZXJCdWZmZXI6OmtQYWRkaW5nU2l6ZTsgaSsrKQotICAgIEVYUEVDVF9FUSgoYnVmZmVyMi0+ZGF0YSgpICsga0RhdGFTaXplKVtpXSwgMCk7Ci0KLSAgLy8gSWYgdGhlIGRhdGEgaXMgcGFkZGVkIGNvcnJlY3RseSB3ZSBzaG91bGQgYmUgYWJsZSB0byByZWFkIGFuZCB3cml0ZSBwYXN0Ci0gIC8vIHRoZSBlbmQgb2YgdGhlIGRhdGEgYnkgRGVjb2RlckJ1ZmZlcjo6a1BhZGRpbmdTaXplIGJ5dGVzIHdpdGhvdXQgY3Jhc2hpbmcKLSAgLy8gb3IgVmFsZ3JpbmQvQVNBTiB0aHJvd2luZyBlcnJvcnMuCi0gIGNvbnN0IHVpbnQ4X3Qga0ZpbGxDaGFyID0gMHhGRjsKLSAgbWVtc2V0KGJ1ZmZlcjItPndyaXRhYmxlX2RhdGEoKSArIGtEYXRhU2l6ZSwga0ZpbGxDaGFyLAotICAgICAgICAgICAgICBEZWNvZGVyQnVmZmVyOjprUGFkZGluZ1NpemUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IERlY29kZXJCdWZmZXI6OmtQYWRkaW5nU2l6ZTsgaSsrKQotICAgIEVYUEVDVF9FUSgoYnVmZmVyMi0+ZGF0YSgpICsga0RhdGFTaXplKVtpXSwga0ZpbGxDaGFyKTsKLQotICBFWFBFQ1RfRVEoMHUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihidWZmZXIyLT5kYXRhKCkpICYKLSAgICAgICAgICAgICAgICAgICAgKERlY29kZXJCdWZmZXI6OmtBbGlnbm1lbnRTaXplIC0gMSkpOwotCi0gIEVYUEVDVF9GQUxTRShidWZmZXIyLT5pc19rZXlfZnJhbWUoKSk7Ci19Ci0jZW5kaWYKLQotVEVTVChEZWNvZGVyQnVmZmVyVGVzdCwgUmVhZGluZ1dyaXRpbmcpIHsKLSAgY29uc3QgY2hhciBrRGF0YVtdID0gImhlbGxvIjsKLSAgY29uc3Qgc2l6ZV90IGtEYXRhU2l6ZSA9IGFycmF5c2l6ZShrRGF0YSk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIobmV3IERlY29kZXJCdWZmZXIoa0RhdGFTaXplKSk7Ci0gIEFTU0VSVF9UUlVFKGJ1ZmZlci5nZXQoKSk7Ci0KLSAgdWludDhfdCogZGF0YSA9IGJ1ZmZlci0+d3JpdGFibGVfZGF0YSgpOwotICBBU1NFUlRfVFJVRShkYXRhKTsKLSAgQVNTRVJUX0VRKGtEYXRhU2l6ZSwgYnVmZmVyLT5kYXRhX3NpemUoKSk7Ci0gIG1lbWNweShkYXRhLCBrRGF0YSwga0RhdGFTaXplKTsKLSAgY29uc3QgdWludDhfdCogcmVhZF9vbmx5X2RhdGEgPSBidWZmZXItPmRhdGEoKTsKLSAgQVNTRVJUX0VRKGRhdGEsIHJlYWRfb25seV9kYXRhKTsKLSAgQVNTRVJUX0VRKDAsIG1lbWNtcChyZWFkX29ubHlfZGF0YSwga0RhdGEsIGtEYXRhU2l6ZSkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotfQotCi1URVNUKERlY29kZXJCdWZmZXJUZXN0LCBEZWNyeXB0Q29uZmlnKSB7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyKG5ldyBEZWNvZGVyQnVmZmVyKDApKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlci0+ZGVjcnlwdF9jb25maWcoKSk7Ci0KLSAgY29uc3QgY2hhciBrS2V5SWRbXSA9ICJrZXkgaWQiOwotICBjb25zdCBjaGFyIGtJdltdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlczsKLSAgc3Vic2FtcGxlcy5wdXNoX2JhY2soU3Vic2FtcGxlRW50cnkoMTAsIDUpKTsKLSAgc3Vic2FtcGxlcy5wdXNoX2JhY2soU3Vic2FtcGxlRW50cnkoMTUsIDcpKTsKLQotICBEZWNyeXB0Q29uZmlnIGRlY3J5cHRfY29uZmlnKGtLZXlJZCwga0l2LCBzdWJzYW1wbGVzKTsKLQotICBidWZmZXItPnNldF9kZWNyeXB0X2NvbmZpZygKLSAgICAgIGJhc2U6Ok1ha2VVbmlxdWU8RGVjcnlwdENvbmZpZz4oa0tleUlkLCBrSXYsIHN1YnNhbXBsZXMpKTsKLQotICBFWFBFQ1RfVFJVRShidWZmZXItPmRlY3J5cHRfY29uZmlnKCkpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmRlY3J5cHRfY29uZmlnKCktPk1hdGNoZXMoZGVjcnlwdF9jb25maWcpKTsKLX0KLQotVEVTVChEZWNvZGVyQnVmZmVyVGVzdCwgSXNLZXlGcmFtZSkgewotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlcihuZXcgRGVjb2RlckJ1ZmZlcigwKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXItPmlzX2tleV9mcmFtZSgpKTsKLQotICBidWZmZXItPnNldF9pc19rZXlfZnJhbWUoZmFsc2UpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0KLSAgYnVmZmVyLT5zZXRfaXNfa2V5X2ZyYW1lKHRydWUpOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmlzX2tleV9mcmFtZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWY0MzhiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcHRyX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IGNoYXIqIEVuY3J5cHRpb25Nb2RlQXNTdHJpbmcoRW5jcnlwdGlvbk1vZGUgbW9kZSkgewotICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEVuY3J5cHRpb25Nb2RlOjprVW5lbmNyeXB0ZWQ6Ci0gICAgICByZXR1cm4gIlVuZW5jcnlwdGVkIjsKLSAgICBjYXNlIEVuY3J5cHRpb25Nb2RlOjprQ2VuYzoKLSAgICAgIHJldHVybiAiQ0VOQyI7Ci0gICAgY2FzZSBFbmNyeXB0aW9uTW9kZTo6a0NiY3M6Ci0gICAgICByZXR1cm4gIkNCQ1MiOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gIlVua25vd24iOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBzdGF0aWMKLXN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBEZWNyeXB0Q29uZmlnOjpDcmVhdGVDZW5jQ29uZmlnKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGl2LAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcykgewotICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEZWNyeXB0Q29uZmlnPihFbmNyeXB0aW9uTW9kZTo6a0NlbmMsIGtleV9pZCwgaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNhbXBsZXMsIGJhc2U6Om51bGxvcHQpOwotfQotCi0vLyBzdGF0aWMKLXN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBEZWNyeXB0Q29uZmlnOjpDcmVhdGVDYmNzQ29uZmlnKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGl2LAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcywKLSAgICBiYXNlOjpPcHRpb25hbDxFbmNyeXB0aW9uUGF0dGVybj4gZW5jcnlwdGlvbl9wYXR0ZXJuKSB7Ci0gIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlY3J5cHRDb25maWc+KEVuY3J5cHRpb25Nb2RlOjprQ2Jjcywga2V5X2lkLCBpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGVuY3J5cHRpb25fcGF0dGVybikpOwotfQotCi1EZWNyeXB0Q29uZmlnOjpEZWNyeXB0Q29uZmlnKAotICAgIGNvbnN0IEVuY3J5cHRpb25Nb2RlJiBlbmNyeXB0aW9uX21vZGUsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9pZCwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgaXYsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+JiBzdWJzYW1wbGVzLAotICAgIGJhc2U6Ok9wdGlvbmFsPEVuY3J5cHRpb25QYXR0ZXJuPiBlbmNyeXB0aW9uX3BhdHRlcm4pCi0gICAgOiBlbmNyeXB0aW9uX21vZGVfKGVuY3J5cHRpb25fbW9kZSksCi0gICAgICBrZXlfaWRfKGtleV9pZCksCi0gICAgICBpdl8oaXYpLAotICAgICAgc3Vic2FtcGxlc18oc3Vic2FtcGxlcyksCi0gICAgICBlbmNyeXB0aW9uX3BhdHRlcm5fKHN0ZDo6bW92ZShlbmNyeXB0aW9uX3BhdHRlcm4pKSB7Ci0gIC8vIFVuZW5jcnlwdGVkIGJsb2NrcyBzaG91bGQgbm90IGhhdmUgYSBEZWNyeXB0Q29uZmlnLgotICBEQ0hFQ0tfTkUoZW5jcnlwdGlvbl9tb2RlXywgRW5jcnlwdGlvbk1vZGU6OmtVbmVuY3J5cHRlZCk7Ci0gIENIRUNLX0dUKGtleV9pZF8uc2l6ZSgpLCAwdSk7Ci0gIENIRUNLX0VRKGl2Xy5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4oRGVjcnlwdENvbmZpZzo6a0RlY3J5cHRpb25LZXlTaXplKSk7Ci0KLSAgLy8gUGF0dGVybiBub3QgYWxsb3dlZCBmb3Igbm9uLSdjYmNzJyBtb2Rlcy4KLSAgRENIRUNLKGVuY3J5cHRpb25fbW9kZV8gPT0gRW5jcnlwdGlvbk1vZGU6OmtDYmNzIHx8ICFlbmNyeXB0aW9uX3BhdHRlcm5fKTsKLX0KLQotRGVjcnlwdENvbmZpZzo6fkRlY3J5cHRDb25maWcoKSB7fQotCi1ib29sIERlY3J5cHRDb25maWc6Okhhc1BhdHRlcm4oKSBjb25zdCB7Ci0gIHJldHVybiBlbmNyeXB0aW9uX3BhdHRlcm5fLmhhc192YWx1ZSgpOwotfQotCi1ib29sIERlY3J5cHRDb25maWc6Ok1hdGNoZXMoY29uc3QgRGVjcnlwdENvbmZpZyYgY29uZmlnKSBjb25zdCB7Ci0gIGlmIChrZXlfaWQoKSAhPSBjb25maWcua2V5X2lkKCkgfHwgaXYoKSAhPSBjb25maWcuaXYoKSB8fAotICAgICAgc3Vic2FtcGxlcygpLnNpemUoKSAhPSBjb25maWcuc3Vic2FtcGxlcygpLnNpemUoKSB8fAotICAgICAgZW5jcnlwdGlvbl9tb2RlXyAhPSBjb25maWcuZW5jcnlwdGlvbl9tb2RlXyB8fAotICAgICAgZW5jcnlwdGlvbl9wYXR0ZXJuXyAhPSBjb25maWcuZW5jcnlwdGlvbl9wYXR0ZXJuXykgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Vic2FtcGxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKChzdWJzYW1wbGVzKClbaV0uY2xlYXJfYnl0ZXMgIT0gY29uZmlnLnN1YnNhbXBsZXMoKVtpXS5jbGVhcl9ieXRlcykgfHwKLSAgICAgICAgKHN1YnNhbXBsZXMoKVtpXS5jeXBoZXJfYnl0ZXMgIT0gY29uZmlnLnN1YnNhbXBsZXMoKVtpXS5jeXBoZXJfYnl0ZXMpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0ZDo6b3N0cmVhbSYgRGVjcnlwdENvbmZpZzo6UHJpbnQoc3RkOjpvc3RyZWFtJiBvcykgY29uc3QgewotICBvcyA8PCAia2V5X2lkOiciIDw8IGJhc2U6OkhleEVuY29kZShrZXlfaWRfLmRhdGEoKSwga2V5X2lkXy5zaXplKCkpIDw8ICInIgotICAgICA8PCAiIGl2OiciIDw8IGJhc2U6OkhleEVuY29kZShpdl8uZGF0YSgpLCBpdl8uc2l6ZSgpKSA8PCAiJyIKLSAgICAgPDwgIiBtb2RlOiIgPDwgRW5jcnlwdGlvbk1vZGVBc1N0cmluZyhlbmNyeXB0aW9uX21vZGVfKTsKLQotICBpZiAoZW5jcnlwdGlvbl9wYXR0ZXJuXykgewotICAgIG9zIDw8ICIgcGF0dGVybjoiIDw8IGVuY3J5cHRpb25fcGF0dGVybl8tPmNyeXB0X2J5dGVfYmxvY2soKSA8PCAiOiIKLSAgICAgICA8PCBlbmNyeXB0aW9uX3BhdHRlcm5fLT5za2lwX2J5dGVfYmxvY2soKTsKLSAgfQotCi0gIG9zIDw8ICIgc3Vic2FtcGxlczpbIjsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJzYW1wbGVzXy5zaXplKCk7ICsraSkgewotICAgIG9zIDw8ICIoY2xlYXI6IiA8PCBzdWJzYW1wbGVzX1tpXS5jbGVhcl9ieXRlcwotICAgICAgIDw8ICIsIGN5cGhlcjoiIDw8IHN1YnNhbXBsZXNfW2ldLmN5cGhlcl9ieXRlcyA8PCAiKSI7Ci0gIH0KLSAgb3MgPDwgIl0iOwotICByZXR1cm4gb3M7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZTNiNDQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0RFQ1JZUFRfQ09ORklHX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0RFQ1JZUFRfQ09ORklHX0hfCi0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL29wdGlvbmFsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3Vic2FtcGxlX2VudHJ5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlIGVuY3J5cHRpb24gbW9kZS4gVGhlIGRlZmluaXRpb25zIGFyZSBmcm9tIElTTy9JRUMgMjMwMDEtNzoyMDE2LgotLy8gVE9ETyhjcmJ1Zy5jb20vODI1MDQxKTogTWVyZ2UgdGhpcyB3aXRoIGV4aXN0aW5nIG1lZGlhOjpFbmNyeXB0aW9uU2NoZW1lLgotZW51bSBjbGFzcyBFbmNyeXB0aW9uTW9kZSB7Ci0gIGtVbmVuY3J5cHRlZCA9IDAsCi0gIGtDZW5jLCAgLy8gJ2NlbmMnIHN1YnNhbXBsZSBlbmNyeXB0aW9uIHVzaW5nIEFFUy1DVFIgbW9kZS4KLSAga0NiY3MsICAvLyAnY2JjcycgcGF0dGVybiBlbmNyeXB0aW9uIHVzaW5nIEFFUy1DQkMgbW9kZS4KLSAga01heFZhbHVlID0ga0NiY3MKLX07Ci0KLS8vIENvbnRhaW5zIGFsbCBpbmZvcm1hdGlvbiB0aGF0IGEgZGVjcnlwdG9yIG5lZWRzIHRvIGRlY3J5cHQgYSBtZWRpYSBzYW1wbGUuCi1jbGFzcyBNRURJQV9FWFBPUlQgRGVjcnlwdENvbmZpZyB7Ci0gcHVibGljOgotICAvLyBLZXlzIGFyZSBhbHdheXMgMTI4IGJpdHMuCi0gIHN0YXRpYyBjb25zdCBpbnQga0RlY3J5cHRpb25LZXlTaXplID0gMTY7Ci0KLSAgLy8gfGtleV9pZHwgaXMgdGhlIElEIHRoYXQgcmVmZXJlbmNlcyB0aGUgZGVjcnlwdGlvbiBrZXkgZm9yIHRoaXMgc2FtcGxlLgotICAvLyB8aXZ8IGlzIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgZGVmaW5lZCBieSB0aGUgZW5jcnlwdGVkIGZvcm1hdC4KLSAgLy8gICBDdXJyZW50bHkgfGl2fCBtdXN0IGJlIDE2IGJ5dGVzIGFzIGRlZmluZWQgYnkgV2ViTSBhbmQgSVNPLiBJdCBtdXN0Ci0gIC8vICAgYmUgcHJvdmlkZWQuCi0gIC8vIHxzdWJzYW1wbGVzfCBkZWZpbmVzIHRoZSBjbGVhciBhbmQgZW5jcnlwdGVkIHBvcnRpb25zIG9mIHRoZSBzYW1wbGUgYXMKLSAgLy8gICBkZXNjcmliZWQgYWJvdmUuIEEgZGVjcnlwdGVkIGJ1ZmZlciB3aWxsIGJlIGVxdWFsIGluIHNpemUgdG8gdGhlIHN1bQotICAvLyAgIG9mIHRoZSBzdWJzYW1wbGUgc2l6ZXMuCi0gIC8vIHxlbmNyeXB0aW9uX3BhdHRlcm58IGlzIHRoZSBwYXR0ZXJuIHVzZWQgKCdjYmNzJyBvbmx5KS4gSXQgaXMgb3B0aW9uYWwKLSAgLy8gICBhcyBDb21tb24gZW5jcnlwdGlvbiBvZiBNUEVHLTIgdHJhbnNwb3J0IHN0cmVhbXMgdjEgKDIzMDA5LTE6MjAxNCkKLSAgLy8gICBkb2VzIG5vdCBzcGVjaWZ5IHBhdHRlcm5zIGZvciBjYmNzIGVuY3J5cHRpb24gbW9kZS4gVGhlIHBhdHRlcm4gaXMKLSAgLy8gICBhc3N1bWVkIHRvIGJlIDE6OSBmb3IgdmlkZW8gYW5kIDE6MCBmb3IgYXVkaW8uCi0gIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gQ3JlYXRlQ2VuY0NvbmZpZygKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpdiwKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcyk7Ci0gIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gQ3JlYXRlQ2Jjc0NvbmZpZygKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpdiwKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcywKLSAgICAgIGJhc2U6Ok9wdGlvbmFsPEVuY3J5cHRpb25QYXR0ZXJuPiBlbmNyeXB0aW9uX3BhdHRlcm4pOwotCi0gIERlY3J5cHRDb25maWcoY29uc3QgRW5jcnlwdGlvbk1vZGUmIGVuY3J5cHRpb25fbW9kZSwKLSAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X2lkLCBjb25zdCBzdGQ6OnN0cmluZyYgaXYsCi0gICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+JiBzdWJzYW1wbGVzLAotICAgICAgICAgICAgICAgIGJhc2U6Ok9wdGlvbmFsPEVuY3J5cHRpb25QYXR0ZXJuPiBlbmNyeXB0aW9uX3BhdHRlcm4pOwotICB+RGVjcnlwdENvbmZpZygpOwotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQoKSBjb25zdCB7IHJldHVybiBrZXlfaWRfOyB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBpdigpIGNvbnN0IHsgcmV0dXJuIGl2XzsgfQotICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBzdWJzYW1wbGVzXzsgfQotICBjb25zdCBFbmNyeXB0aW9uTW9kZSYgZW5jcnlwdGlvbl9tb2RlKCkgY29uc3QgeyByZXR1cm4gZW5jcnlwdGlvbl9tb2RlXzsgfQotICBjb25zdCBiYXNlOjpPcHRpb25hbDxFbmNyeXB0aW9uUGF0dGVybj4mIGVuY3J5cHRpb25fcGF0dGVybigpIGNvbnN0IHsKLSAgICByZXR1cm4gZW5jcnlwdGlvbl9wYXR0ZXJuXzsKLSAgfQotCi0gIC8vIFJldHVybnMgd2hldGhlciB0aGlzIGNvbmZpZyBoYXMgRW5jcnlwdGlvblBhdHRlcm4gc2V0IG9yIG5vdC4KLSAgYm9vbCBIYXNQYXR0ZXJuKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGRlY29kZXIgYnVmZmVyIHJlcXVpcmVzIGRlY3J5cHRpb24gYW5kCi0gIC8vIGZhbHNlIGlmIHRoYXQgYnVmZmVyIGlzIGNsZWFyIGRlc3BpdGUgdGhlIHByZXNlbmNlIG9mIERlY3J5cHRDb25maWcuCi0gIGJvb2wgaXNfZW5jcnlwdGVkKCkgY29uc3QgeyByZXR1cm4gIWtleV9pZF8uZW1wdHkoKSAmJiAhaXZfLmVtcHR5KCk7IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYWxsIGZpZWxkcyBpbiB8Y29uZmlnfCBtYXRjaCB0aGlzIGNvbmZpZy4KLSAgYm9vbCBNYXRjaGVzKGNvbnN0IERlY3J5cHRDb25maWcmIGNvbmZpZykgY29uc3Q7Ci0KLSAgLy8gUHJpbnRzIHRvIHN0ZDo6b3N0cmVhbS4KLSAgc3RkOjpvc3RyZWFtJiBQcmludChzdGQ6Om9zdHJlYW0mIG9zKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGNvbnN0IEVuY3J5cHRpb25Nb2RlIGVuY3J5cHRpb25fbW9kZV87Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGtleV9pZF87Ci0KLSAgLy8gSW5pdGlhbGl6YXRpb24gdmVjdG9yLgotICBjb25zdCBzdGQ6OnN0cmluZyBpdl87Ci0KLSAgLy8gU3Vic2FtcGxlIGluZm9ybWF0aW9uLiBNYXkgYmUgZW1wdHkgZm9yIHNvbWUgZm9ybWF0cywgbWVhbmluZyBlbnRpcmUgZnJhbWUKLSAgLy8gKGxlc3MgZGF0YSBpZ25vcmVkIGJ5IGRhdGFfb2Zmc2V0XykgaXMgZW5jcnlwdGVkLgotICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlc187Ci0KLSAgLy8gT25seSBzcGVjaWZpZWQgaWYgfGVuY3J5cHRpb25fbW9kZV98IHJlcXVpcmVzIGEgcGF0dGVybi4KLSAgYmFzZTo6T3B0aW9uYWw8RW5jcnlwdGlvblBhdHRlcm4+IGVuY3J5cHRpb25fcGF0dGVybl87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlY3J5cHRDb25maWcpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29iYWx0OjptZWRpYTo6RGVjcnlwdENvbmZpZyYgb2JqKSB7Ci0gIHJldHVybiBvYmouUHJpbnQob3MpOwotfQotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0RFQ1JZUFRfQ09ORklHX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3MzhhOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1EZW11eGVySG9zdDo6fkRlbXV4ZXJIb3N0KCkge30KLQotRGVtdXhlcjo6RGVtdXhlcigpIHt9Ci0KLURlbXV4ZXI6On5EZW11eGVyKCkge30KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YTU1NzMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfREVNVVhFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9ERU1VWEVSX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9zb3VyY2UuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW1lX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgVGV4dFRyYWNrQ29uZmlnOwotY2xhc3MgTWVkaWFUcmFja3M7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBEZW11eGVySG9zdCB7Ci0gcHVibGljOgotICAvLyBOb3RpZnkgdGhlIGhvc3QgdGhhdCBidWZmZXJlZCB0aW1lIHJhbmdlcyBoYXZlIGNoYW5nZWQuIE5vdGUgdGhhdCBidWZmZXJlZAotICAvLyB0aW1lIHJhbmdlcyBjYW4gZ3JvdyAod2hlbiBuZXcgbWVkaWEgZGF0YSBpcyBhcHBlbmRlZCksIGJ1dCB0aGV5IGNhbiBhbHNvCi0gIC8vIHNocmluayAod2hlbiBidWZmZXJpbmcgcmVhY2hlcyBsaW1pdCBjYXBhY2l0eSBhbmQgc29tZSBidWZmZXJlZCBkYXRhCi0gIC8vIGJlY29tZXMgZXZpY3RlZCwgZS5nLiBkdWUgdG8gTVNFIEdDIGFsZ29yaXRobSwgb3IgYnkgZXhwbGljaXQgcmVtb3ZhbCBvZgotICAvLyByYW5nZXMgZGlyZWN0ZWQgYnkgTVNFIHdlYiBhcHApLgotICB2aXJ0dWFsIHZvaWQgT25CdWZmZXJlZFRpbWVSYW5nZXNDaGFuZ2VkKAotICAgICAgY29uc3QgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4mIHJhbmdlcykgPSAwOwotCi0gIC8vIFNldHMgdGhlIGR1cmF0aW9uIG9mIHRoZSBtZWRpYSBpbiBtaWNyb3NlY29uZHMuCi0gIC8vIER1cmF0aW9uIG1heSBiZSBrSW5maW5pdGVEdXJhdGlvbiBpZiB0aGUgZHVyYXRpb24gaXMgbm90IGtub3duLgotICB2aXJ0dWFsIHZvaWQgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSA9IDA7Ci0KLSAgLy8gU3RvcHMgZXhlY3V0aW9uIG9mIHRoZSBwaXBlbGluZSBkdWUgdG8gYSBmYXRhbCBlcnJvci4gRG8gbm90IGNhbGwgdGhpcwotICAvLyBtZXRob2Qgd2l0aCBQSVBFTElORV9PSy4gU3RvcHBpbmcgaXMgbm90IGltbWVkaWF0ZSBzbyBkZW11eGVycyBtdXN0IGJlCi0gIC8vIHByZXBhcmVkIHRvIHNvZnQgZmFpbCBvbiBzdWJzZXF1ZW50IGNhbGxzLiBFLmcuLCBpZiBEZW11eGVyOjpTZWVrKCkgaXMKLSAgLy8gY2FsbGVkIGFmdGVyIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IgdGhlIHByb3ZpZGVkIFBpcGVsaW5lU3RhdHVzQ0IgbXVzdCBiZQotICAvLyBjYWxsZWQgd2l0aCBhbiBlcnJvci4KLSAgdmlydHVhbCB2b2lkIE9uRGVtdXhlckVycm9yKFBpcGVsaW5lU3RhdHVzIGVycm9yKSA9IDA7Ci0KLSAgLy8gQWRkIHx0ZXh0X3N0cmVhbXwgdG8gdGhlIGNvbGxlY3Rpb24gbWFuYWdlZCBieSB0aGUgdGV4dCByZW5kZXJlci4KLSAgdmlydHVhbCB2b2lkIEFkZFRleHRTdHJlYW0oRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRUcmFja0NvbmZpZyYgY29uZmlnKSA9IDA7Ci0KLSAgLy8gUmVtb3ZlIHx0ZXh0X3N0cmVhbXwgZnJvbSB0aGUgcHJlc2VudGF0aW9uLgotICB2aXJ0dWFsIHZvaWQgUmVtb3ZlVGV4dFN0cmVhbShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSkgPSAwOwotCi0gcHJvdGVjdGVkOgotICB2aXJ0dWFsIH5EZW11eGVySG9zdCgpOwotfTsKLQotY2xhc3MgTUVESUFfRVhQT1JUIERlbXV4ZXIgOiBwdWJsaWMgRGVtdXhlclN0cmVhbVByb3ZpZGVyIHsKLSBwdWJsaWM6Ci0gIC8vIEEgbmV3IHBvdGVudGlhbGx5IGVuY3J5cHRlZCBzdHJlYW0gaGFzIGJlZW4gcGFyc2VkLgotICAvLyBGaXJzdCBwYXJhbWV0ZXIgLSBUaGUgdHlwZSBvZiBpbml0aWFsaXphdGlvbiBkYXRhLgotICAvLyBTZWNvbmQgcGFyYW1ldGVyIC0gVGhlIGluaXRpYWxpemF0aW9uIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJlYW0uCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChFbWVJbml0RGF0YVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpPgotICAgICAgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCOwotCi0gIC8vIE5vdGlmaWVzIGRlbXV4ZXIgY2xpZW50cyB0aGF0IG1lZGlhIHRyYWNrIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gdXBkYXRlZAotICAvLyAoZS5nLiB0aGUgaW5pdGlhbCBzdHJlYW0gbWV0YWRhdGEgaGFzIGJlZW4gcGFyc2VkIHN1Y2Nlc3NmdWxseSwgb3IgYSBuZXcKLSAgLy8gaW5pdCBzZWdtZW50IGhhcyBiZWVuIHBhcnNlZCBzdWNjZXNzZnVsbHkgaW4gTVNFIGNhc2UpLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPik+Ci0gICAgICBNZWRpYVRyYWNrc1VwZGF0ZWRDQjsKLQotICBEZW11eGVyKCk7Ci0gIH5EZW11eGVyKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZGVtdXhlciBmb3IgbG9nZ2luZyBwdXJwb3NlLgotICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldERpc3BsYXlOYW1lKCkgY29uc3QgPSAwOwotCi0gIC8vIENvbXBsZXRlcyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZGVtdXhlci4KLSAgLy8KLSAgLy8gVGhlIGRlbXV4ZXIgZG9lcyBub3Qgb3duIHxob3N0fCBhcyBpdCBpcyBndWFyYW50ZWVkIHRvIG91dGxpdmUgdGhlCi0gIC8vIGxpZmV0aW1lIG9mIHRoZSBkZW11eGVyLiBEb24ndCBkZWxldGUgaXQhICB8c3RhdHVzX2NifCBtdXN0IG9ubHkgYmUgcnVuCi0gIC8vIGFmdGVyIHRoaXMgbWV0aG9kIGhhcyByZXR1cm5lZC4KLSAgdmlydHVhbCB2b2lkIEluaXRpYWxpemUoRGVtdXhlckhvc3QqIGhvc3QsIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVfdGV4dF90cmFja3MpID0gMDsKLQotICAvLyBBYm9ydHMgYW55IHBlbmRpbmcgcmVhZCBvcGVyYXRpb25zIHRoYXQgdGhlIGRlbXV4ZXIgaXMgaW52b2x2ZWQgd2l0aDsgYW55Ci0gIC8vIHJlYWQgYWJvcnRlZCB3aWxsIGJlIGFib3J0ZWQgd2l0aCBhIHN0YXR1cyBvZiBrQWJvcnRlZC4KLSAgdmlydHVhbCB2b2lkIEFib3J0UGVuZGluZ1JlYWRzKCkgPSAwOwotCi0gIC8vIEluZGljYXRlcyB0aGF0IGEgbmV3IFNlZWsoKSBjYWxsIGlzIG9uIGl0cyB3YXkuIEltcGxlbWVudGF0aW9ucyBtYXkgYWJvcnQKLSAgLy8gcGVuZGluZyByZWFkcyBhbmQgZnV0dXJlIFJlYWQoKSBjYWxscyBtYXkgcmV0dXJuIGtBYm9ydGVkIHVudGlsIFNlZWsoKSBpcwotICAvLyBleGVjdXRlZC4gfHNlZWtfdGltZXwgaXMgdGhlIHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgb2YgdGhlIG5ldyBTZWVrKCkgY2FsbC4KLSAgLy8KLSAgLy8gSW4gYWN0dWFsIHVzZSwgdGhpcyBjYWxsIG9jY3VycyBvbiB0aGUgbWFpbiB0aHJlYWQgd2hpbGUgU2VlaygpIGlzIGNhbGxlZAotICAvLyBvbiB0aGUgbWVkaWEgdGhyZWFkLiBTdGFydFdhaXRpbmdGb3JTZWVrKCkgY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlCi0gIC8vIHR3by4KLSAgLy8KLSAgLy8gU3RhcnRXYWl0aW5nRm9yU2VlaygpIE1VU1QgYmUgY2FsbGVkIGJlZm9yZSBTZWVrKCkuCi0gIHZpcnR1YWwgdm9pZCBTdGFydFdhaXRpbmdGb3JTZWVrKGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUpID0gMDsKLQotICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBTZWVrKCkgb3BlcmF0aW9uIGlzIG9ic29sZXRlZCBieSBhIG5ldyBvbmUuCi0gIC8vIEltcGxlbWVudGF0aW9ucyBjYW4gZXhwZWN0IHRoYXQgU3RhcnRXYWl0aW5nRm9yU2VlaygpIHdpbGwgYmUgY2FsbGVkCi0gIC8vIHdoZW4gdGhlIGN1cnJlbnQgc2VlayBvcGVyYXRpb24gY29tcGxldGVzLgotICAvLwotICAvLyBMaWtlIFN0YXJ0V2FpdGluZ0ZvclNlZWsoKSwgQ2FuY2VsUGVuZGluZ1NlZWsoKSBpcyBjYWxsZWQgb24gdGhlIG1haW4KLSAgLy8gdGhyZWFkLiBPcmRlcmluZyB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvLWJlLWNhbmNlbGVkIFNlZWsoKSBpcyBub3QKLSAgLy8gZ3VhcmFudGVlZC4gUmVnYXJkbGVzcyBvZiBvcmRlcmluZywgaW1wbGVtZW50YXRpb25zIG1heSBhYm9ydCBwZW5kaW5nIHJlYWRzCi0gIC8vIGFuZCBtYXkgcmV0dXJuIGtBYm9ydGVkIGZyb20gZnV0dXJlIFJlYWQoKSBjYWxscywgdW50aWwgYWZ0ZXIKLSAgLy8gU3RhcnRXYWl0aW5nRm9yU2VlaygpIGFuZCB0aGUgZm9sbG93aW5nIFNlZWsoKSBjYWxsIG9jY3Vycy4KLSAgLy8KLSAgLy8gfHNlZWtfdGltZXwgc2hvdWxkIG1hdGNoIHRoYXQgcGFzc2VkIHRvIHRoZSBuZXh0IFN0YXJ0V2FpdGluZ0ZvclNlZWsoKSwgYnV0Ci0gIC8vIG1heSBub3QgaWYgdGhlIHNlZWsgdGFyZ2V0IGNoYW5nZXMgYWdhaW4gYmVmb3JlIHRoZSBjdXJyZW50IHNlZWsgb3BlcmF0aW9uCi0gIC8vIGNvbXBsZXRlcyBvciBpcyBhYm9ydGVkLgotICB2aXJ0dWFsIHZvaWQgQ2FuY2VsUGVuZGluZ1NlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgPSAwOwotCi0gIC8vIENhcnJ5IG91dCBhbnkgYWN0aW9ucyByZXF1aXJlZCB0byBzZWVrIHRvIHRoZSBnaXZlbiB0aW1lLCBleGVjdXRpbmcgdGhlCi0gIC8vIGNhbGxiYWNrIHVwb24gY29tcGxldGlvbi4KLSAgdmlydHVhbCB2b2lkIFNlZWsoYmFzZTo6VGltZURlbHRhIHRpbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYikgPSAwOwotCi0gIC8vIFN0b3BzIHRoaXMgZGVtdXhlci4KLSAgLy8KLSAgLy8gQWZ0ZXIgdGhpcyBjYWxsIHRoZSBkZW11eGVyIG1heSBiZSBkZXN0cm95ZWQuIEl0IGlzIGlsbGVnYWwgdG8gY2FsbCBhbnkKLSAgLy8gbWV0aG9kIChpbmNsdWRpbmcgU3RvcCgpKSBhZnRlciBhIGRlbXV4ZXIgaGFzIHN0b3BwZWQuCi0gIHZpcnR1YWwgdm9pZCBTdG9wKCkgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN0YXJ0aW5nIHRpbWUgZm9yIHRoZSBtZWRpYSBmaWxlOyBpdCdzIGFsd2F5cyBwb3NpdGl2ZS4KLSAgdmlydHVhbCBiYXNlOjpUaW1lRGVsdGEgR2V0U3RhcnRUaW1lKCkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgVGltZSByZXByZXNlbnRlZCBieSBwcmVzZW50YXRpb24gdGltZXN0YW1wIDAuCi0gIC8vIElmIHRoZSB0aW1zdGFtcHMgYXJlIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBUaW1lLCB0aGVuCi0gIC8vIGEgbnVsbCBUaW1lIGlzIHJldHVybmVkLgotICB2aXJ0dWFsIGJhc2U6OlRpbWUgR2V0VGltZWxpbmVPZmZzZXQoKSBjb25zdCA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIGZvciB0aGUgZGVtdXhlci4KLSAgdmlydHVhbCBpbnQ2NF90IEdldE1lbW9yeVVzYWdlKCkgY29uc3QgPSAwOwotCi0gIHZpcnR1YWwgdm9pZCBPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQoCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSkgPSAwOwotCi0gIC8vIHx0cmFja19pZHN8IGlzIGVpdGhlciBlbXB0eSBvciBjb250YWlucyBhIHNpbmdsZSB2aWRlbyB0cmFjayBpZC4KLSAgdmlydHVhbCB2b2lkIE9uU2VsZWN0ZWRWaWRlb1RyYWNrQ2hhbmdlZCgKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYgdHJhY2tfaWRzLAotICAgICAgYmFzZTo6VGltZURlbHRhIGN1cnJUaW1lKSA9IDA7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVtdXhlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9ERU1VWEVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3BlcmZ0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9wZXJmdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmOTRkZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3BlcmZ0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjM4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYXRfZXhpdC5oIgotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgotI2luY2x1ZGUgImJhc2UvcnVuX2xvb3AuaCIKLSNpbmNsdWRlICJiYXNlL3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXIuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9mZm1wZWdfZGVtdXhlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2ZpbGVfZGF0YV9zb3VyY2UuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL3BlcmYvcGVyZl90ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIGNvbnN0IGludCBrQmVuY2htYXJrSXRlcmF0aW9ucyA9IDEwMDsKLQotY2xhc3MgRGVtdXhlckhvc3RJbXBsIDogcHVibGljIG1lZGlhOjpEZW11eGVySG9zdCB7Ci0gcHVibGljOgotICBEZW11eGVySG9zdEltcGwoKSB7fQotICB+RGVtdXhlckhvc3RJbXBsKCkgb3ZlcnJpZGUge30KLQotICAvLyBEZW11eGVySG9zdCBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBPbkJ1ZmZlcmVkVGltZVJhbmdlc0NoYW5nZWQoCi0gICAgICBjb25zdCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgcmFuZ2VzKSBvdmVycmlkZSB7fQotICB2b2lkIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgb3ZlcnJpZGUge30KLSAgdm9pZCBPbkRlbXV4ZXJFcnJvcihtZWRpYTo6UGlwZWxpbmVTdGF0dXMgZXJyb3IpIG92ZXJyaWRlIHt9Ci0gIHZvaWQgQWRkVGV4dFN0cmVhbShtZWRpYTo6RGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWRpYTo6VGV4dFRyYWNrQ29uZmlnJiBjb25maWcpIG92ZXJyaWRlIHt9Ci0gIHZvaWQgUmVtb3ZlVGV4dFN0cmVhbShtZWRpYTo6RGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0pIG92ZXJyaWRlIHt9Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGVtdXhlckhvc3RJbXBsKTsKLX07Ci0KLXN0YXRpYyB2b2lkIFF1aXRMb29wV2l0aFN0YXR1cyhiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKLSAgQ0hFQ0tfRVEoc3RhdHVzLCBtZWRpYTo6UElQRUxJTkVfT0spOwotICBtZXNzYWdlX2xvb3AtPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpNZXNzYWdlTG9vcDo6UXVpdFdoZW5JZGxlQ2xvc3VyZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKEVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdF9kYXRhKSB7Ci0gIFZMT0coMCkgPDwgIkZpbGUgaXMgZW5jcnlwdGVkLiI7Ci19Ci0KLXN0YXRpYyB2b2lkIE9uTWVkaWFUcmFja3NVcGRhdGVkKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKSB7Ci0gIFZMT0coMCkgPDwgIkdvdCBtZWRpYSB0cmFja3MgaW5mbywgdHJhY2tzID0gIiA8PCB0cmFja3MtPnRyYWNrcygpLnNpemUoKTsKLX0KLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxtZWRpYTo6RGVtdXhlclN0cmVhbSo+IFN0cmVhbXM7Ci0KLS8vIFNpbXVsYXRlcyBwbGF5YmFjayByZWFkaW5nIHJlcXVpcmVtZW50cyBieSByZWFkaW5nIGZyb20gZWFjaCBzdHJlYW0KLS8vIHByZXNlbnQgaW4gfGRlbXV4ZXJ8IGluIGFzLWNsb3NlLXRvLW1vbm90b25pY2FsbHktaW5jcmVhc2luZyB0aW1lc3RhbXAgb3JkZXIuCi1jbGFzcyBTdHJlYW1SZWFkZXIgewotIHB1YmxpYzoKLSAgU3RyZWFtUmVhZGVyKG1lZGlhOjpEZW11eGVyKiBkZW11eGVyLCBib29sIGVuYWJsZV9iaXRzdHJlYW1fY29udmVydGVyKTsKLSAgflN0cmVhbVJlYWRlcigpOwotCi0gIC8vIFBlcmZvcm1zIGEgc2luZ2xlIHN0ZXAgcmVhZC4KLSAgdm9pZCBSZWFkKCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIHdoZW4gYWxsIHN0cmVhbXMgaGF2ZSByZWFjaGVkIGVuZCBvZiBzdHJlYW0uCi0gIGJvb2wgSXNEb25lKCk7Ci0KLSAgaW50IG51bWJlcl9vZl9zdHJlYW1zKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHJlYW1zXy5zaXplKCkpOyB9Ci0gIGNvbnN0IFN0cmVhbXMmIHN0cmVhbXMoKSB7IHJldHVybiBzdHJlYW1zXzsgfQotICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBjb3VudHMoKSB7IHJldHVybiBjb3VudHNfOyB9Ci0KLSBwcml2YXRlOgotICB2b2lkIE9uUmVhZERvbmUoYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcCwgYm9vbCogZW5kX29mX3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSogdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgbWVkaWE6OkRlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPG1lZGlhOjpEZWNvZGVyQnVmZmVyPiYgYnVmZmVyKTsKLSAgaW50IEdldE5leHRTdHJlYW1JbmRleFRvUmVhZCgpOwotCi0gIFN0cmVhbXMgc3RyZWFtc187Ci0gIHN0ZDo6dmVjdG9yPGJvb2w+IGVuZF9vZl9zdHJlYW1fOwotICBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+IGxhc3RfcmVhZF90aW1lc3RhbXBfOwotICBzdGQ6OnZlY3RvcjxpbnQ+IGNvdW50c187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN0cmVhbVJlYWRlcik7Ci19OwotCi1TdHJlYW1SZWFkZXI6OlN0cmVhbVJlYWRlcihtZWRpYTo6RGVtdXhlciogZGVtdXhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlX2JpdHN0cmVhbV9jb252ZXJ0ZXIpIHsKLSAgbWVkaWE6OkRlbXV4ZXJTdHJlYW0qIHN0cmVhbSA9Ci0gICAgICBkZW11eGVyLT5HZXRTdHJlYW0obWVkaWE6OkRlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgaWYgKHN0cmVhbSkgewotICAgIHN0cmVhbXNfLnB1c2hfYmFjayhzdHJlYW0pOwotICAgIGVuZF9vZl9zdHJlYW1fLnB1c2hfYmFjayhmYWxzZSk7Ci0gICAgbGFzdF9yZWFkX3RpbWVzdGFtcF8ucHVzaF9iYWNrKG1lZGlhOjprTm9UaW1lc3RhbXApOwotICAgIGNvdW50c18ucHVzaF9iYWNrKDApOwotICB9Ci0KLSAgc3RyZWFtID0gZGVtdXhlci0+R2V0U3RyZWFtKG1lZGlhOjpEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0gIGlmIChzdHJlYW0pIHsKLSAgICBzdHJlYW1zXy5wdXNoX2JhY2soc3RyZWFtKTsKLSAgICBlbmRfb2Zfc3RyZWFtXy5wdXNoX2JhY2soZmFsc2UpOwotICAgIGxhc3RfcmVhZF90aW1lc3RhbXBfLnB1c2hfYmFjayhtZWRpYTo6a05vVGltZXN0YW1wKTsKLSAgICBjb3VudHNfLnB1c2hfYmFjaygwKTsKLQotICAgIGlmIChlbmFibGVfYml0c3RyZWFtX2NvbnZlcnRlcikgc3RyZWFtLT5FbmFibGVCaXRzdHJlYW1Db252ZXJ0ZXIoKTsKLSAgfQotfQotCi1TdHJlYW1SZWFkZXI6On5TdHJlYW1SZWFkZXIoKSB7fQotCi12b2lkIFN0cmVhbVJlYWRlcjo6UmVhZCgpIHsKLSAgaW50IGluZGV4ID0gR2V0TmV4dFN0cmVhbUluZGV4VG9SZWFkKCk7Ci0gIGJvb2wgZW5kX29mX3N0cmVhbSA9IGZhbHNlOwotICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wOwotCi0gIHN0cmVhbXNfW2luZGV4XS0+UmVhZCgKLSAgICAgIGJhc2U6OkJpbmQoJlN0cmVhbVJlYWRlcjo6T25SZWFkRG9uZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwKLSAgICAgICAgICAgICAgICAgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgJmVuZF9vZl9zdHJlYW0sICZ0aW1lc3RhbXApKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1bigpOwotCi0gIENIRUNLKGVuZF9vZl9zdHJlYW0gfHwgdGltZXN0YW1wICE9IG1lZGlhOjprTm9UaW1lc3RhbXApOwotICBlbmRfb2Zfc3RyZWFtX1tpbmRleF0gPSBlbmRfb2Zfc3RyZWFtOwotICBsYXN0X3JlYWRfdGltZXN0YW1wX1tpbmRleF0gPSB0aW1lc3RhbXA7Ci0gIGNvdW50c19baW5kZXhdKys7Ci19Ci0KLWJvb2wgU3RyZWFtUmVhZGVyOjpJc0RvbmUoKSB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW5kX29mX3N0cmVhbV8uc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoIWVuZF9vZl9zdHJlYW1fW2ldKSByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RyZWFtUmVhZGVyOjpPblJlYWREb25lKAotICAgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AsIGJvb2wqIGVuZF9vZl9zdHJlYW0sCi0gICAgYmFzZTo6VGltZURlbHRhKiB0aW1lc3RhbXAsIG1lZGlhOjpEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8bWVkaWE6OkRlY29kZXJCdWZmZXI+JiBidWZmZXIpIHsKLSAgQ0hFQ0tfRVEoc3RhdHVzLCBtZWRpYTo6RGVtdXhlclN0cmVhbTo6a09rKTsKLSAgQ0hFQ0soYnVmZmVyLmdldCgpKTsKLSAgKmVuZF9vZl9zdHJlYW0gPSBidWZmZXItPmVuZF9vZl9zdHJlYW0oKTsKLSAgKnRpbWVzdGFtcCA9ICplbmRfb2Zfc3RyZWFtID8gbWVkaWE6OmtOb1RpbWVzdGFtcCA6IGJ1ZmZlci0+dGltZXN0YW1wKCk7Ci0gIG1lc3NhZ2VfbG9vcC0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCi0gICAgICBGUk9NX0hFUkUsIGJhc2U6Ok1lc3NhZ2VMb29wOjpRdWl0V2hlbklkbGVDbG9zdXJlKCkpOwotfQotCi1pbnQgU3RyZWFtUmVhZGVyOjpHZXROZXh0U3RyZWFtSW5kZXhUb1JlYWQoKSB7Ci0gIGludCBpbmRleCA9IC0xOwotICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcl9vZl9zdHJlYW1zKCk7ICsraSkgewotICAgIC8vIElnbm9yZSBzdHJlYW1zIGF0IEVPUy4KLSAgICBpZiAoZW5kX29mX3N0cmVhbV9baV0pIGNvbnRpbnVlOwotCi0gICAgLy8gVXNlIGEgc3RyZWFtIGlmIGl0IGhhc24ndCBiZWVuIHJlYWQgZnJvbSB5ZXQuCi0gICAgaWYgKGxhc3RfcmVhZF90aW1lc3RhbXBfW2ldID09IG1lZGlhOjprTm9UaW1lc3RhbXApIHJldHVybiBpOwotCi0gICAgaWYgKGluZGV4IDwgMCB8fCBsYXN0X3JlYWRfdGltZXN0YW1wX1tpXSA8IGxhc3RfcmVhZF90aW1lc3RhbXBfW2luZGV4XSkgewotICAgICAgaW5kZXggPSBpOwotICAgIH0KLSAgfQotICBDSEVDS19HRShpbmRleCwgMCkgPDwgIkNvdWxkbid0IGZpbmQgYSBzdHJlYW0gdG8gcmVhZCI7Ci0gIHJldHVybiBpbmRleDsKLX0KLQotc3RhdGljIHZvaWQgUnVuRGVtdXhlckJlbmNobWFyayhjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpIHsKLSAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoKEdldFRlc3REYXRhRmlsZVBhdGgoZmlsZW5hbWUpKTsKLSAgZG91YmxlIHRvdGFsX3RpbWUgPSAwLjA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga0JlbmNobWFya0l0ZXJhdGlvbnM7ICsraSkgewotICAgIC8vIFNldHVwLgotICAgIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcDsKLSAgICBEZW11eGVySG9zdEltcGwgZGVtdXhlcl9ob3N0OwotICAgIEZpbGVEYXRhU291cmNlIGRhdGFfc291cmNlOwotICAgIEFTU0VSVF9UUlVFKGRhdGFfc291cmNlLkluaXRpYWxpemUoZmlsZV9wYXRoKSk7Ci0KLSAgICBEZW11eGVyOjpFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0IgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYiA9Ci0gICAgICAgIGJhc2U6OkJpbmQoJk9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSk7Ci0gICAgRGVtdXhlcjo6TWVkaWFUcmFja3NVcGRhdGVkQ0IgdHJhY2tzX3VwZGF0ZWRfY2IgPQotICAgICAgICBiYXNlOjpCaW5kKCZPbk1lZGlhVHJhY2tzVXBkYXRlZCk7Ci0gICAgRkZtcGVnRGVtdXhlciBkZW11eGVyKG1lc3NhZ2VfbG9vcC50YXNrX3J1bm5lcigpLCAmZGF0YV9zb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsIHRyYWNrc191cGRhdGVkX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTWVkaWFMb2coKSk7Ci0KLSAgICBkZW11eGVyLkluaXRpYWxpemUoJmRlbXV4ZXJfaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmUXVpdExvb3BXaXRoU3RhdHVzLCAmbWVzc2FnZV9sb29wKSwgZmFsc2UpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW4oKTsKLSAgICBTdHJlYW1SZWFkZXIgc3RyZWFtX3JlYWRlcigmZGVtdXhlciwgZmFsc2UpOwotCi0gICAgLy8gQmVuY2htYXJrLgotICAgIGJhc2U6OlRpbWVUaWNrcyBzdGFydCA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gICAgd2hpbGUgKCFzdHJlYW1fcmVhZGVyLklzRG9uZSgpKSB7Ci0gICAgICBzdHJlYW1fcmVhZGVyLlJlYWQoKTsKLSAgICB9Ci0gICAgYmFzZTo6VGltZVRpY2tzIGVuZCA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gICAgdG90YWxfdGltZSArPSAoZW5kIC0gc3RhcnQpLkluU2Vjb25kc0YoKTsKLSAgICBkZW11eGVyLlN0b3AoKTsKLSAgICBRdWl0TG9vcFdpdGhTdGF0dXMoJm1lc3NhZ2VfbG9vcCwgUElQRUxJTkVfT0spOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW4oKTsKLSAgfQotCi0gIHBlcmZfdGVzdDo6UHJpbnRSZXN1bHQoImRlbXV4ZXJfYmVuY2giLCAiIiwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAga0JlbmNobWFya0l0ZXJhdGlvbnMgLyB0b3RhbF90aW1lLCAicnVucy9zIiwgdHJ1ZSk7Ci19Ci0KLSNpZiBkZWZpbmVkKE9TX1dJTikKLS8vIGh0dHA6Ly9jcmJ1Zy5jb20vMzk5MDAyCi0jZGVmaW5lIE1BWUJFX0RlbXV4ZXIgRElTQUJMRURfRGVtdXhlcgotI2Vsc2UKLSNkZWZpbmUgTUFZQkVfRGVtdXhlciBEZW11eGVyCi0jZW5kaWYKLVRFU1QoRGVtdXhlclBlcmZUZXN0LCBNQVlCRV9EZW11eGVyKSB7Ci0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoImJlYXIub2d2Iik7Ci0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoImJlYXItNjQweDM2MC53ZWJtIik7Ci0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoInNmeF9zMTZsZS53YXYiKTsKLSNpZiBkZWZpbmVkKFVTRV9QUk9QUklFVEFSWV9DT0RFQ1MpCi0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoImJlYXItMTI4MHg3MjAubXA0Iik7Ci0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoInNmeC5tcDMiKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCi0gIFJ1bkRlbXV4ZXJCZW5jaG1hcmsoImJlYXIuZmxhYyIpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKSAmJiBkZWZpbmVkKE9TX0NIUk9NRU9TKQotICBSdW5EZW11eGVyQmVuY2htYXJrKCJiZWFyLmF2aSIpOwotI2VuZGlmCi19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg1ZWJkZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5jYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLURlbXV4ZXJTdHJlYW06On5EZW11eGVyU3RyZWFtKCkge30KLQotLy8gTW9zdCBEZW11eGVyU3RyZWFtIGltcGxlbWVudGF0aW9ucyBkb24ndCBzcGVjaWZ5IGxpdmVuZXNzLiBSZXR1cm5zIHVua25vd24KLS8vIGxpdmVuZXNzIGJ5IGRlZmF1bHQuCi1EZW11eGVyU3RyZWFtOjpMaXZlbmVzcyBEZW11eGVyU3RyZWFtOjpsaXZlbmVzcygpIGNvbnN0IHsKLSAgcmV0dXJuIERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1VOS05PV047Ci19Ci0KLS8vIE1vc3QgRGVtdXhlclN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGJpdCBzdHJlYW0uCi0vLyBEbyBub3RoaW5nIGJ5IGRlZmF1bHQuCi12b2lkIERlbXV4ZXJTdHJlYW06OkVuYWJsZUJpdHN0cmVhbUNvbnZlcnRlcigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NTBjN2MuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0RFTVVYRVJfU1RSRUFNX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0RFTVVYRVJfU1RSRUFNX0hfCi0KLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3JvdGF0aW9uLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQXVkaW9EZWNvZGVyQ29uZmlnOwotY2xhc3MgRGVjb2RlckJ1ZmZlcjsKLWNsYXNzIFZpZGVvRGVjb2RlckNvbmZpZzsKLQotY2xhc3MgTUVESUFfRVhQT1JUIERlbXV4ZXJTdHJlYW0gewotIHB1YmxpYzoKLSAgZW51bSBUeXBlIHsKLSAgICBVTktOT1dOLAotICAgIEFVRElPLAotICAgIFZJREVPLAotICAgIFRFWFQsCi0gICAgTlVNX1RZUEVTLCAgLy8gQWx3YXlzIGtlZXAgdGhpcyBlbnRyeSBhcyB0aGUgbGFzdCBvbmUhCi0gIH07Ci0KLSAgZW51bSBMaXZlbmVzcyB7Ci0gICAgTElWRU5FU1NfVU5LTk9XTiwKLSAgICBMSVZFTkVTU19SRUNPUkRFRCwKLSAgICBMSVZFTkVTU19MSVZFLAotICB9OwotCi0gIC8vIFN0YXR1cyByZXR1cm5lZCBpbiB0aGUgUmVhZCgpIGNhbGxiYWNrLgotICAvLyAga09rIDogSW5kaWNhdGVzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIE5vbi1OVUxMIGFuZCBjb250YWlucyBtZWRpYSBkYXRhCi0gIC8vICAgICAgICBvciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCi0gIC8vICBrQWJvcnRlZCA6IEluZGljYXRlcyBhbiBhYm9ydGVkIFJlYWQoKS4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZQotICAvLyAgICAgICAgICAgICBEZW11eGVyU3RyZWFtIGdldHMgZmx1c2hlZCBhbmQgZG9lc24ndCBoYXZlIGFueSBtb3JlIGRhdGEgdG8KLSAgLy8gICAgICAgICAgICAgcmV0dXJuLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBNVVNUIGJlIE5VTEwgd2hlbiB0aGlzIHN0YXR1cyBpcwotICAvLyAgICAgICAgICAgICByZXR1cm5lZC4KLSAgLy8gIGtDb25maWdDaGFuZ2UgOiBJbmRpY2F0ZXMgdGhhdCB0aGUgQXVkaW9EZWNvZGVyQ29uZmlnIG9yCi0gIC8vICAgICAgICAgICAgICAgICAgVmlkZW9EZWNvZGVyQ29uZmlnIGZvciB0aGUgc3RyZWFtIGhhcyBjaGFuZ2VkLgotICAvLyAgICAgICAgICAgICAgICAgIFRoZSBEZW11eGVyU3RyZWFtIGV4cGVjdHMgYW4gYXVkaW9fZGVjb2Rlcl9jb25maWcoKSBvcgotICAvLyAgICAgICAgICAgICAgICAgIHZpZGVvX2RlY29kZXJfY29uZmlnKCkgY2FsbCBiZWZvcmUgUmVhZCgpIHdpbGwgc3RhcnQKLSAgLy8gICAgICAgICAgICAgICAgICByZXR1cm5pbmcgRGVjb2RlckJ1ZmZlcnMgYWdhaW4uIFRoZSBkZWNvZGVyIHdpbGwgbmVlZCB0aGlzCi0gIC8vICAgICAgICAgICAgICAgICAgbmV3IGNvbmZpZ3VyYXRpb24gdG8gcHJvcGVybHkgZGVjb2RlIHRoZSBidWZmZXJzIHJlYWQKLSAgLy8gICAgICAgICAgICAgICAgICBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgTVVTVCBiZSBOVUxMCi0gIC8vICAgICAgICAgICAgICAgICAgd2hlbiB0aGlzIHN0YXR1cyBpcyByZXR1cm5lZC4KLSAgLy8gICAgICAgICAgICAgICAgICBUaGlzIHdpbGwgb25seSBiZSByZXR1cm5lZCBpZiBTdXBwb3J0c0NvbmZpZ0NoYW5nZXMoKQotICAvLyAgICAgICAgICAgICAgICAgIHJldHVybnMgJ3RydWUnIGZvciB0aGlzIERlbXV4ZXJTdHJlYW0uCi0gIGVudW0gU3RhdHVzIHsKLSAgICBrT2ssCi0gICAga0Fib3J0ZWQsCi0gICAga0NvbmZpZ0NoYW5nZWQsCi0gIH07Ci0KLSAgLy8gUmVxdWVzdCBhIGJ1ZmZlciB0byByZXR1cm5lZCB2aWEgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLgotICAvLwotICAvLyBUaGUgZmlyc3QgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoZSByZWFkLgotICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyBub24tTlVMTCBhbmQgY29udGFpbnMgbWVkaWEgZGF0YQotICAvLyBvciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBrT2suIE5VTEwgb3RoZXJ3aXNlLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoU3RhdHVzLCBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+Jik+Ci0gICAgICBSZWFkQ0I7Ci0gIHZpcnR1YWwgdm9pZCBSZWFkKGNvbnN0IFJlYWRDQiYgcmVhZF9jYikgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIGF1ZGlvL3ZpZGVvIGRlY29kZXIgY29uZmlndXJhdGlvbi4gSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGUKLSAgLy8gYXVkaW8gbWV0aG9kIG9uIGEgdmlkZW8gc3RyZWFtIGFuZCB2aWNlIHZlcnNhLiBBZnRlciB8a0NvbmZpZ0NoYW5nZWR8IGlzCi0gIC8vIHJldHVybmVkIGluIGEgUmVhZCgpLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFnYWluIHRvIHJldHJpZXZlCi0gIC8vIHRoZSBuZXcgY29uZmlnLgotICB2aXJ0dWFsIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19kZWNvZGVyX2NvbmZpZygpID0gMDsKLSAgdmlydHVhbCBWaWRlb0RlY29kZXJDb25maWcgdmlkZW9fZGVjb2Rlcl9jb25maWcoKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgdHlwZSBvZiBzdHJlYW0uCi0gIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgbGl2ZW5lc3Mgb2YgdGhlIHN0cmVhbXMgcHJvdmlkZWQsIGkuZS4gd2hldGhlciByZWNvcmRlZCBvciBsaXZlLgotICB2aXJ0dWFsIExpdmVuZXNzIGxpdmVuZXNzKCkgY29uc3Q7Ci0KLSAgdmlydHVhbCB2b2lkIEVuYWJsZUJpdHN0cmVhbUNvbnZlcnRlcigpOwotCi0gIC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgRGVtdXhlclN0cmVhbSBhbGxvd3MgbWlkc3RyZWFtIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KLSAgLy8KLSAgLy8gQSBEZW11eGVyU3RyZWFtIHRoYXQgcmV0dXJucyAndHJ1ZScgdG8gdGhpcyBtYXkgcmV0dXJuIHRoZSAna0NvbmZpZ0NoYW5nZScKLSAgLy8gc3RhdHVzIGZyb20gYSBSZWFkKCkgY2FsbC4gSW4gdGhpcyBjYXNlIHRoZSBjbGllbnQgaXMgZXhwZWN0ZWQgdG8gYmUKLSAgLy8gY2FwYWJsZSBvZiB0YWtpbmcgYXBwcm9wcmlhdGUgYWN0aW9uIHRvIGhhbmRsZSBjb25maWcgY2hhbmdlcy4gT3RoZXJ3aXNlCi0gIC8vIGF1ZGlvX2RlY29kZXJfY29uZmlnKCkgYW5kIHZpZGVvX2RlY29kZXJfY29uZmlnKCkncyByZXR1cm4gdmFsdWVzIGFyZQotICAvLyBndWFyYW50ZWVkIHRvIHJlbWFpbiBjb25zdGFudCwgYW5kIHRoZSBjbGllbnQgbWF5IG1ha2Ugb3B0aW1pemF0aW9ucyBiYXNlZAotICAvLyBvbiB0aGlzLgotICB2aXJ0dWFsIGJvb2wgU3VwcG9ydHNDb25maWdDaGFuZ2VzKCkgPSAwOwotCi0gIHZpcnR1YWwgVmlkZW9Sb3RhdGlvbiB2aWRlb19yb3RhdGlvbigpID0gMDsKLQotICAvLyBJbmRpY2F0ZXMgd2hldGhlciBhIERlbXV4ZXJTdHJlYW0gaXMgY3VycmVudGx5IGVuYWJsZWQgKGkuZS4gc2hvdWxkIGJlCi0gIC8vIGRlY29kZWQgYW5kIHJlbmRlcmVkKSBvciBub3QuCi0gIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3QgPSAwOwotCi0gIC8vIERpc2FibGVzIGFuZCByZS1lbmFibGVzIHRoZSBzdHJlYW0uIFJlYWRpbmcgZnJvbSBhIGRpc2FibGVkIHN0cmVhbSB3aWxsCi0gIC8vIHJldHVybiBhbiBlbmQtb2Ytc3RyZWFtIChFT1MpIGJ1ZmZlci4gV2hlbiBhIHN0cmVhbSBpcyByZS1lbmFibGVkLCBpdCBuZWVkcwotICAvLyB0byBrbm93IHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIHx0aW1lc3RhbXB8IGluIG9yZGVyIHRvIHJlc3VtZQotICAvLyByZWFkaW5nIGRhdGEgZnJvbSBhIGtleSBmcmFtZSBwcmVjZWVkaW5nIHRoZSB8dGltZXN0YW1wfC4KLSAgdmlydHVhbCB2b2lkIHNldF9lbmFibGVkKGJvb2wgZW5hYmxlZCwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgPSAwOwotCi0gIC8vIFRoZSBTdHJlYW1TdGF0dXNDaGFuZ2VDQiBhbGxvd3MgRGVtdXhlclN0cmVhbSBjbGllbnRzIHRvIHJlY2VpdmUKLSAgLy8gbm90aWZpY2F0aW9ucyBhYm91dCB0aGUgc3RyZWFtIGJlaW5nIGRpc2FibGVkIG9yIGVuYWJsZWQuCi0gIC8vIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgcGxheWJhY2sgcG9zaXRpb24gd2hlbiB0aGUgY2hhbmdlIG9jY3VyZWQuCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChib29sLCBiYXNlOjpUaW1lRGVsdGEpPiBTdHJlYW1TdGF0dXNDaGFuZ2VDQjsKLSAgdmlydHVhbCB2b2lkIFNldFN0cmVhbVN0YXR1c0NoYW5nZUNCKGNvbnN0IFN0cmVhbVN0YXR1c0NoYW5nZUNCJiBjYikgPSAwOwotCi0gcHJvdGVjdGVkOgotICAvLyBPbmx5IGFsbG93IGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyB0byBnZXQgZGVsZXRlZC4KLSAgdmlydHVhbCB+RGVtdXhlclN0cmVhbSgpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfREVNVVhFUl9TVFJFQU1fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW1fcHJvdmlkZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmYzOTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW1fcHJvdmlkZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbV9wcm92aWRlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLURlbXV4ZXJTdHJlYW1Qcm92aWRlcjo6RGVtdXhlclN0cmVhbVByb3ZpZGVyKCkge30KLQotRGVtdXhlclN0cmVhbVByb3ZpZGVyOjp+RGVtdXhlclN0cmVhbVByb3ZpZGVyKCkge30KLQotR1VSTCBEZW11eGVyU3RyZWFtUHJvdmlkZXI6OkdldFVybCgpIGNvbnN0IHsKLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gR1VSTCgpOwotfQotCi1EZW11eGVyU3RyZWFtUHJvdmlkZXI6OlR5cGUgRGVtdXhlclN0cmVhbVByb3ZpZGVyOjpHZXRUeXBlKCkgY29uc3QgewotICByZXR1cm4gU1RSRUFNOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbV9wcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmI5MjJhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfREVNVVhFUl9TVFJFQU1fUFJPVklERVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfREVNVVhFUl9TVFJFQU1fUFJPVklERVJfSF8KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAidXJsL2d1cmwuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBBYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgaG93IHRvIHJldHJpZXZlICJtZWRpYSBzb3VyY2VzIiBpbiBEZW11eGVyU3RyZWFtCi0vLyBmb3JtIChmb3IgbW9zdCBjYXNlcykgb3IgVVJMIGZvcm0gKGZvciB0aGUgTWVkaWFQbGF5ZXJSZW5kZXJlciBjYXNlKS4KLS8vCi0vLyBUaGUgc3ViLWNsYXNzZXMgZG8gbm90IHN0cmljdGx5IHByb3ZpZGUgZGVtdXhlciBzdHJlYW1zLCBidXQgYmVjYXVzZSBhbGwKLS8vIHN1Yi1jbGFzc2VzIGFyZSBmb3IgdGhlIG1vbWVudCBEZW11eGVycywgdGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gcmVuYW1lZCB0bwotLy8gIk1lZGlhUHJvdmlkZXIiLiBUaGlzIGNsYXNzIHdvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHJlbmFtaW5nLCBpZgotLy8gZXZlciBQaXBlbGluZSB3ZXJlIHRvIHN1cHBvcnQgdGhpcyBjbGFzcyBkaXJlY3RseSwgaW5zdGVhZCBvZiB0aGUgRGVtdXhlcgotLy8gaW50ZXJmYWNlLgotLy8KLS8vIFRoZSBkZXJpdmVkIGNsYXNzZXMgbXVzdCByZXR1cm4gYSBub24tbnVsbCB2YWx1ZSBmb3IgdGhlIGdldHRlciBtZXRob2QKLS8vIGFzc29jaWF0ZWQgd2l0aCB0aGVpciB0eXBlLCBhbmQgcmV0dXJuIGEgbnVsbC9lbXB0eSB2YWx1ZSBmb3Igb3RoZXIgZ2V0dGVycy4KLWNsYXNzIE1FRElBX0VYUE9SVCBEZW11eGVyU3RyZWFtUHJvdmlkZXIgewotIHB1YmxpYzoKLSAgZW51bSBUeXBlIHsKLSAgICBTVFJFQU0sICAvLyBJbmRpY2F0ZXMgR2V0U3RyZWFtKCkgc2hvdWxkIGJlIHVzZWQKLSAgICBVUkwsICAgICAvLyBJbmRpY2F0ZXMgR2V0VXJsKCkgc2hvdWxkIGJlIHVzZWQKLSAgfTsKLQotICBEZW11eGVyU3RyZWFtUHJvdmlkZXIoKTsKLSAgdmlydHVhbCB+RGVtdXhlclN0cmVhbVByb3ZpZGVyKCk7Ci0KLSAgLy8gRm9yIFR5cGU6OlNUUkVBTToKLSAgLy8gICBSZXR1cm5zIHRoZSBmaXJzdCBzdHJlYW0gb2YgdGhlIGdpdmVuIHN0cmVhbSB0eXBlICh3aGljaCBpcyBub3QgYWxsb3dlZAotICAvLyAgIHRvIGJlIERlbXV4ZXJTdHJlYW06OlRFWFQpLCBvciBOVUxMIGlmIHRoYXQgdHlwZSBvZiBzdHJlYW0gaXMgbm90Ci0gIC8vICAgcHJlc2VudC4KLSAgLy8gT3RoZXIgdHlwZXM6Ci0gIC8vICAgU2hvdWxkIG5vdCBiZSBjYWxsZWQuCi0gIHZpcnR1YWwgRGVtdXhlclN0cmVhbSogR2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgPSAwOwotCi0gIC8vIEZvciBUeXBlOjpVUkw6Ci0gIC8vICAgUmV0dXJucyB0aGUgVVJMIG9mIHRoZSBtZWRpYSB0byBwbGF5LiBUaGlzIG1pZ2h0IGJlIGFuIGVtcHR5IFVSTCwgYW5kCi0gIC8vICAgc2hvdWxkIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseSBieSB0aGUgY2FsbGVyLgotICAvLyBPdGhlciB0eXBlczoKLSAgLy8gICBTaG91bGQgbm90IGJlIGNhbGxlZC4KLSAgdmlydHVhbCBHVVJMIEdldFVybCgpIGNvbnN0OwotCi0gIHZpcnR1YWwgRGVtdXhlclN0cmVhbVByb3ZpZGVyOjpUeXBlIEdldFR5cGUoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEZW11eGVyU3RyZWFtUHJvdmlkZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfREVNVVhFUl9TVFJFQU1fUFJPVklERVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RqYjIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9kamIyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTZmMDhjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RqYjIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGpiMi5oIgotCi11aW50MzJfdCBESkIySGFzaChjb25zdCB2b2lkKiBidWYsIHNpemVfdCBsZW4sIHVpbnQzMl90IHNlZWQpIHsKLSAgY29uc3QgdWludDhfdCogc3JjID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmKTsKLSAgdWludDMyX3QgaGFzaCA9IHNlZWQ7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICBoYXNoID0gaGFzaCAqIDMzICsgc3JjW2ldOwotICB9Ci0gIHJldHVybiBoYXNoOwotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZGpiMi5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZGpiMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDRkMzMyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RqYjIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfREpCMl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9ESkIyX0hfCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotLy8gREpCMiBpcyBhIGhhc2ggYWxnb3JpdGhtIHdpdGggZXhjZWxsZW50IGRpc3RyaWJ1dGlvbiBhbmQgc3BlZWQKLS8vIG9uIG1hbnkgZGlmZmVyZW50IHNldHMuCi0vLyBJdCBoYXMgbWFyZ2luYWxseSBtb3JlIGNvbGxpc2lvbnMgdGhhbiBGTlYxLCBidXQgbWFrZXMgdXAgZm9yIGl0IGluCi0vLyBwZXJmb3JtYW5jZS4KLS8vIFRoZSByZXR1cm4gdmFsdWUgaXMgc3VpdGFibGUgZm9yIHRhYmxlIGxvb2t1cHMuCi0vLyBGb3Igc21hbGwgZml4ZWQgc2l6ZXMgKGllIGEgcGl4ZWwpLCBpdCBoYXMgbG93IG92ZXJoZWFkIGFuZCBpbmxpbmVzIHdlbGwuCi0vLyBGb3IgbGFyZ2UgZGF0YSBzZXRzLCBpdCBvcHRpbWl6ZXMgaW50byBhc3NlbWJseS9zaW1kIGFuZCBpcyBhcHByb3ByaWF0ZQotLy8gZm9yIHJlYWx0aW1lIGFwcGxpY2F0aW9ucy4KLS8vIFNlZSBBbHNvOgotLy8gICBodHRwOi8vd3d3LmNzZS55b3JrdS5jYS9+b3ovaGFzaC5odG1sCi0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrREpCMkhhc2hTZWVkID0gNTM4MXU7Ci0KLS8vIFRoZXNlIGZ1bmN0aW9ucyBwZXJmb3JtIERKQjIgaGFzaC4gVGhlIHNpbXBsZXN0IGNhbGwgaXMgREpCMkhhc2goKSB0bwotLy8gZ2VuZXJhdGUgdGhlIERKQjIgaGFzaCBvZiB0aGUgZ2l2ZW4gZGF0YToKLS8vICAgdWludDMyX3QgaGFzaCA9IERKQjJIYXNoKGRhdGExLCBsZW5ndGgxLCBrREpCMkhhc2hTZWVkKTsKLS8vCi0vLyBZb3UgY2FuIGFsc28gY29tcHV0ZSB0aGUgREpCMiBoYXNoIG9mIGRhdGEgaW5jcmVtZW50YWxseSBieSBtYWtpbmcgbXVsdGlwbGUKLS8vIGNhbGxzIHRvIERKQjJIYXNoKCk6Ci0vLyAgIHVpbnQzMl90IGhhc2hfdmFsdWUgPSBrREpCMkhhc2hTZWVkOyAgLy8gSW5pdGlhbCBzZWVkIGZvciBESkIyLgotLy8gICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvcHlfbGluZXM7ICsraSkgewotLy8gICAgIGhhc2hfdmFsdWUgPSBESkIySGFzaChzb3VyY2UsIGJ5dGVzX3Blcl9saW5lLCBoYXNoX3ZhbHVlKTsKLS8vICAgICBzb3VyY2UgKz0gc291cmNlX3N0cmlkZTsKLS8vICAgfQotCi0vLyBGb3IgdGhlIGdpdmVuIGJ1ZmZlciBvZiBkYXRhLCBjb21wdXRlIHRoZSBESkIyIGhhc2ggb2YKLS8vIHRoZSBkYXRhLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnkgbnVtYmVyIG9mIHRpbWVzIGR1cmluZyB0aGUgY29tcHV0YXRpb24uCi1NRURJQV9FWFBPUlQgdWludDMyX3QgREpCMkhhc2goY29uc3Qgdm9pZCogYnVmLCBzaXplX3QgbGVuLCB1aW50MzJfdCBzZWVkKTsKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9ESkIyX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9kamIyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZGpiMl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3NWE0NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9kamIyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RqYjIuaCIKLQotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11aW50OF90IGtUZXN0RGF0YVtdID0gezEsIDIsIDN9OwotCi1URVNUKERKQjJIYXNoVGVzdCwgSGFzaFRlc3QpIHsKLSAgRVhQRUNUX0VRKERKQjJIYXNoKE5VTEwsIDAsIDB1KSwgMHUpOwotICBFWFBFQ1RfRVEoREpCMkhhc2goa1Rlc3REYXRhLCBzaXplb2Yoa1Rlc3REYXRhKSwgNTM4MXUpLAotICAgICAgICAgICAgKCg1MzgxdSAqIDMzdSArIDF1KSAqIDMzdSArIDJ1KSAqIDMzdSArIDN1KTsKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2RybV9zeXN0ZW0uY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9kcm1fc3lzdGVtLmNjCmluZGV4IDExYmJiZDEuLmQ0NGU1ODMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2RybV9zeXN0ZW0uY2MKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5jYwpAQCAtMTIsMTAgKzEyLDExIEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgPG1lbW9yeT4KLQogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RybV9zeXN0ZW0uaCIKIAorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCiAjaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgogI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgpAQCAtMTQzLDEzICsxNDQsNiBAQAogYm9vbCBEcm1TeXN0ZW06OkdldE1ldHJpY3Moc3RkOjp2ZWN0b3I8dWludDhfdD4qIG1ldHJpY3MpIHsKICAgRENIRUNLKG1lc3NhZ2VfbG9vcF8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CiAgIERDSEVDSyhtZXRyaWNzKTsKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotICByZXR1cm4gZmFsc2U7Ci0KLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KICAgaW50IHNpemUgPSAwOwogICBjb25zdCB1aW50OF90KiByYXdfbWV0cmljcyA9CiAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oU2JEcm1HZXRNZXRyaWNzKHdyYXBwZWRfZHJtX3N5c3RlbV8sICZzaXplKSk7CkBAIC0xNjIsOCArMTU2LDYgQEAKICAgfQogICBtZXRyaWNzLT5hc3NpZ24ocmF3X21ldHJpY3MsIHJhd19tZXRyaWNzICsgc2l6ZSk7CiAgIHJldHVybiB0cnVlOwotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKIH0KIAogdm9pZCBEcm1TeXN0ZW06OkdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9lbWVfY29uc3RhbnRzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9lbWVfY29uc3RhbnRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlM2FmNzQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZW1lX2NvbnN0YW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9FTUVfQ09OU1RBTlRTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0VNRV9DT05TVEFOVFNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIERlZmluZXMgdmFsdWVzIHRoYXQgc3BlY2lmeSByZWdpc3RlcmVkIEluaXRpYWxpemF0aW9uIERhdGEgVHlwZXMgdXNlZAotLy8gaW4gRW5jcnlwdGVkIE1lZGlhIEV4dGVuc2lvbnMgKEVNRSkuCi0vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9lbmNyeXB0ZWQtbWVkaWEvaW5pdGRhdGEtZm9ybWF0LXJlZ2lzdHJ5Lmh0bWwjcmVnaXN0cnkKLWVudW0gRW1lSW5pdERhdGFUeXBlIHsKLSAga0VtZUluaXREYXRhVHlwZVVua25vd24sCi0gIGtFbWVJbml0RGF0YVR5cGVDZW5jLAotICBrRW1lSW5pdERhdGFUeXBlRmFpcnBsYXksCi0gIGtFbWVJbml0RGF0YVR5cGVLZXlJZHMsCi0gIGtFbWVJbml0RGF0YVR5cGVXZWJNLAotfTsKLQotLy8gRGVmaW5lcyBiaXRtYXNrIHZhbHVlcyB0aGF0IHNwZWNpZnkgY29kZWNzIHVzZWQgaW4gRW5jcnlwdGVkIE1lZGlhIEV4dGVuc2lvbgotLy8gKEVNRSkuIEVhY2ggdmFsdWUgcmVwcmVzZW50cyBhIGNvZGVjIHdpdGhpbiBhIHNwZWNpZmljIGNvbnRhaW5lci4KLS8vIFRoZSBtYXNrIHZhbHVlcyBhcmUgc3RvcmVkIGluIGEgU3VwcG9ydGVkQ29kZWNzLgotZW51bSBFbWVDb2RlYyB7Ci0gIC8vICpfQUxMIHZhbHVlcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBtYXNraW5nLCBkbyBub3QgdXNlIHRoZW0gdG8gc3BlY2lmeQotICAvLyBjb2RlYyBzdXBwb3J0IGJlY2F1c2UgdGhleSBtYXkgYmUgZXh0ZW5kZWQgdG8gaW5jbHVkZSBtb3JlIGNvZGVjcy4KLSAgRU1FX0NPREVDX05PTkUgPSAwLAotICBFTUVfQ09ERUNfV0VCTV9PUFVTID0gMSA8PCAwLAotICBFTUVfQ09ERUNfV0VCTV9WT1JCSVMgPSAxIDw8IDEsCi0gIEVNRV9DT0RFQ19XRUJNX0FVRElPX0FMTCA9IEVNRV9DT0RFQ19XRUJNX09QVVMgfCBFTUVfQ09ERUNfV0VCTV9WT1JCSVMsCi0gIEVNRV9DT0RFQ19XRUJNX1ZQOCA9IDEgPDwgMiwKLSAgRU1FX0NPREVDX1dFQk1fVlA5ID0gMSA8PCAzLAotICBFTUVfQ09ERUNfV0VCTV9WSURFT19BTEwgPSAoRU1FX0NPREVDX1dFQk1fVlA4IHwgRU1FX0NPREVDX1dFQk1fVlA5KSwKLSAgRU1FX0NPREVDX1dFQk1fQUxMID0gKEVNRV9DT0RFQ19XRUJNX0FVRElPX0FMTCB8IEVNRV9DT0RFQ19XRUJNX1ZJREVPX0FMTCksCi0gIEVNRV9DT0RFQ19NUDRfQUFDID0gMSA8PCA0LAotICBFTUVfQ09ERUNfTVA0X0FVRElPX0FMTCA9IEVNRV9DT0RFQ19NUDRfQUFDLAotICBFTUVfQ09ERUNfTVA0X0FWQzEgPSAxIDw8IDUsCi0gIEVNRV9DT0RFQ19NUDRfVlA5ID0gMSA8PCA2LAotICBFTUVfQ09ERUNfTVA0X0hFVkMgPSAxIDw8IDcsCi0gIEVNRV9DT0RFQ19NUDRfVklERU9fQUxMID0KLSAgICAgIChFTUVfQ09ERUNfTVA0X0FWQzEgfCBFTUVfQ09ERUNfTVA0X1ZQOSB8IEVNRV9DT0RFQ19NUDRfSEVWQyksCi0gIEVNRV9DT0RFQ19NUDRfQUxMID0gKEVNRV9DT0RFQ19NUDRfQVVESU9fQUxMIHwgRU1FX0NPREVDX01QNF9WSURFT19BTEwpLAotICBFTUVfQ09ERUNfQVVESU9fQUxMID0gKEVNRV9DT0RFQ19XRUJNX0FVRElPX0FMTCB8IEVNRV9DT0RFQ19NUDRfQVVESU9fQUxMKSwKLSAgRU1FX0NPREVDX1ZJREVPX0FMTCA9IChFTUVfQ09ERUNfV0VCTV9WSURFT19BTEwgfCBFTUVfQ09ERUNfTVA0X1ZJREVPX0FMTCksCi0gIEVNRV9DT0RFQ19BTEwgPSAoRU1FX0NPREVDX1dFQk1fQUxMIHwgRU1FX0NPREVDX01QNF9BTEwpLAotfTsKLQotdHlwZWRlZiB1aW50MzJfdCBTdXBwb3J0ZWRDb2RlY3M7Ci0KLWVudW0gRW1lU2Vzc2lvblR5cGVTdXBwb3J0IHsKLSAgLy8gSW52YWxpZCBkZWZhdWx0IHZhbHVlLgotICBrRW1lU2Vzc2lvblR5cGVTdXBwb3J0SW52YWxpZCwKLSAgLy8gVGhlIHNlc3Npb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkLgotICBrRW1lU2Vzc2lvblR5cGVTdXBwb3J0Tm90U3VwcG9ydGVkLAotICAvLyBUaGUgc2Vzc2lvbiB0eXBlIGlzIHN1cHBvcnRlZCBpZiBhIGRpc3RpbmN0aXZlIGlkZW50aWZpZXIgaXMgYXZhaWxhYmxlLgotICBrRW1lU2Vzc2lvblR5cGVTdXBwb3J0U3VwcG9ydGVkV2l0aElkZW50aWZpZXIsCi0gIC8vIFRoZSBzZXNzaW9uIHR5cGUgaXMgYWx3YXlzIHN1cHBvcnRlZC4KLSAga0VtZVNlc3Npb25UeXBlU3VwcG9ydFN1cHBvcnRlZCwKLX07Ci0KLS8vIFVzZWQgdG8gZGVjbGFyZSBzdXBwb3J0IGZvciBkaXN0aW5jdGl2ZSBpZGVudGlmaWVyIGFuZCBwZXJzaXN0ZW50IHN0YXRlLgotLy8gVGhlc2UgYXJlIHB1cnBvc2VmdWxseSBsaW1pdGVkIHRvIG5vdCBhbGxvdyBvbmUgdG8gcmVxdWlyZSB0aGUgb3RoZXIsIHNvIHRoYXQKLS8vIHRyYW5zaXRpdmUgcmVxdWlyZW1lbnRzIGFyZSBub3QgcG9zc2libGUuIE5vbi10cml2aWFsIHJlZmFjdG9yaW5nIHdvdWxkIGJlCi0vLyByZXF1aXJlZCB0byBzdXBwb3J0IHRyYW5zaXRpdmUgcmVxdWlyZW1lbnRzLgotZW51bSBFbWVGZWF0dXJlU3VwcG9ydCB7Ci0gIC8vIEludmFsaWQgZGVmYXVsdCB2YWx1ZS4KLSAga0VtZUZlYXR1cmVTdXBwb3J0SW52YWxpZCwKLSAgLy8gQWNjZXNzIHRvIHRoZSBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsLgotICBrRW1lRmVhdHVyZVN1cHBvcnROb3RTdXBwb3J0ZWQsCi0gIC8vIEFjY2VzcyB0byB0aGUgZmVhdHVyZSBtYXkgYmUgcmVxdWVzdGVkLgotICBrRW1lRmVhdHVyZVN1cHBvcnRSZXF1ZXN0YWJsZSwKLSAgLy8gQWNjZXNzIHRvIHRoZSBmZWF0dXJlIGNhbm5vdCBiZSBibG9ja2VkLgotICBrRW1lRmVhdHVyZVN1cHBvcnRBbHdheXNFbmFibGUsCi19OwotCi1lbnVtIEVtZU1lZGlhVHlwZSB7Ci0gIGtFbWVNZWRpYVR5cGVBdWRpbywKLSAga0VtZU1lZGlhVHlwZVZpZGVvLAotfTsKLQotLy8gQ29uZmlndXJhdGlvbiBydWxlcyBpbmRpY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZSByZXF1aXJlZCB0byBzdXBwb3J0IGEKLS8vIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChub3RlOiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1heSBiZSBkaXNhbGxvd2luZyBhCi0vLyBmZWF0dXJlKS4gQ29uZmlndXJhdGlvbiBydWxlcyBhcmUgdXNlZCB0byBhbnN3ZXIgcXVlcmllcyBhYm91dCBkaXN0aW5jdGl2ZQotLy8gaWRlbnRpZmllciwgcGVyc2lzdGVudCBzdGF0ZSwgYW5kIHJvYnVzdG5lc3MgcmVxdWlyZW1lbnRzLCBhcyB3ZWxsIGFzIHRvCi0vLyBkZXNjcmliZSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgc2Vzc2lvbiB0eXBlcy4KLS8vCi0vLyBJZiBpbiB0aGUgZnV0dXJlIHRoZXJlIGFyZSByZWFzb25zIHRvIHJlcXVlc3QgdXNlciBwZXJtaXNzaW9uIG90aGVyIHRoYW4KLS8vIGFjY2VzcyB0byBhIGRpc3RpbmN0aXZlIGlkZW50aWZpZXIsIHRoZW4gYWRkaXRpb25hbCBydWxlcyBzaG91bGQgYmUgYWRkZWQuCi0vLyBSdWxlcyBhcmUgaW1wbGVtZW50ZWQgaW4gQ29uZmlnU3RhdGUgYW5kIGFyZSBvdGhlcndpc2Ugb3BhcXVlLgotZW51bSBFbWVDb25maWdSdWxlIHsKLSAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gIGtFbWVDb25maWdSdWxlTm90U3VwcG9ydGVkLAotICAvLyBUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gcHJldmVudHMgdXNlIG9mIGEgZGlzdGluY3RpdmUgaWRlbnRpZmllci4KLSAga0VtZUNvbmZpZ1J1bGVJZGVudGlmaWVyTm90QWxsb3dlZCwKLSAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHN1cHBvcnRlZCBpZiBhIGRpc3RpbmN0aXZlIGlkZW50aWZpZXIgaXMKLSAgLy8gYXZhaWxhYmxlLgotICBrRW1lQ29uZmlnUnVsZUlkZW50aWZpZWRSZXF1aXJlZCwKLSAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHN1cHBvcnRlZCwgYnV0IHRoZSB1c2VyIGV4cGVyaWVuY2UgbWF5IGJlCi0gIC8vIGltcHJvdmVkIGlmIGEgZGlzdGluY3RpdmUgaWRlbnRpZmllciBpcyBhdmFpbGFibGUuCi0gIGtFbWVDb25maWdSdWxlSWRlbnRpZmllclJlY29tbWVuZGVkLAotICAvLyBUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gcHJldmVudHMgdXNlIG9mIHBlcnNpc3RlbnQgc3RhdGUuCi0gIGtFbWVDb25maWdSdWxlUGVyc2lzdE5vdEFsbG93ZWQsCi0gIC8vIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzdXBwb3J0ZWQgaWYgcGVyc2lzdGVudCBzdGF0ZSBpcyBhdmFpbGFibGUuCi0gIGtFbWVDb25maWdSdWxlUGVyc2lzdFJlcXVpcmVkLAotICAvLyBUaGUgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc3VwcG9ydGVkIGlmIGJvdGggYSBkaXN0aW5jdGl2ZSBpZGVudGlmaWVyIGFuZAotICAvLyBwZXJzaXN0ZW50IHN0YXRlIGFyZSBhdmFpbGFibGUuCi0gIGtFbWVDb25maWdSdWxlSWRlbnRpZmllckFuZFBlcnNpc3RlbmNlUmVxdWlyZWQsCi0gIC8vIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBwcmV2ZW50cyB1c2Ugb2YgaGFyZHdhcmUtc2VjdXJlIGNvZGVjcy4KLSAgLy8gVGhpcyBydWxlIG9ubHkgaGFzIG1lYW5pbmcgb24gcGxhdGZvcm1zIHRoYXQgZGlzdGluZ3Vpc2ggaGFyZHdhcmUtc2VjdXJlCi0gIC8vIGNvZGVjcyAoaWUuIEFuZHJvaWQpLgotICBrRW1lQ29uZmlnUnVsZUh3U2VjdXJlQ29kZWNzTm90QWxsb3dlZCwKLSAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHN1cHBvcnRlZCBpZiBoYXJkd2FyZS1zZWN1cmUgY29kZWNzIGFyZSB1c2VkLgotICAvLyBUaGlzIHJ1bGUgb25seSBoYXMgbWVhbmluZyBvbiBwbGF0Zm9ybXMgdGhhdCBkaXN0aW5ndWlzaCBoYXJkd2FyZS1zZWN1cmUKLSAgLy8gY29kZWNzIChpZS4gQW5kcm9pZCkuCi0gIGtFbWVDb25maWdSdWxlSHdTZWN1cmVDb2RlY3NSZXF1aXJlZCwKLSAgLy8gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHN1cHBvcnRlZCB3aXRob3V0IGNvbmRpdGlvbnMuCi0gIGtFbWVDb25maWdSdWxlU3VwcG9ydGVkLAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfRU1FX0NPTlNUQU5UU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzQ5YmMwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fcGF0dGVybi5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE4IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fcGF0dGVybi5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUVuY3J5cHRpb25QYXR0ZXJuOjpFbmNyeXB0aW9uUGF0dGVybigpID0gZGVmYXVsdDsKLQotRW5jcnlwdGlvblBhdHRlcm46OkVuY3J5cHRpb25QYXR0ZXJuKHVpbnQzMl90IGNyeXB0X2J5dGVfYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcF9ieXRlX2Jsb2NrKQotICAgIDogY3J5cHRfYnl0ZV9ibG9ja18oY3J5cHRfYnl0ZV9ibG9jayksIHNraXBfYnl0ZV9ibG9ja18oc2tpcF9ieXRlX2Jsb2NrKSB7fQotCi1FbmNyeXB0aW9uUGF0dGVybjo6RW5jcnlwdGlvblBhdHRlcm4oY29uc3QgRW5jcnlwdGlvblBhdHRlcm4mIHJocykgPSBkZWZhdWx0OwotCi1FbmNyeXB0aW9uUGF0dGVybiYgRW5jcnlwdGlvblBhdHRlcm46Om9wZXJhdG9yPShjb25zdCBFbmNyeXB0aW9uUGF0dGVybiYgcmhzKSA9Ci0gICAgZGVmYXVsdDsKLQotRW5jcnlwdGlvblBhdHRlcm46On5FbmNyeXB0aW9uUGF0dGVybigpID0gZGVmYXVsdDsKLQotYm9vbCBFbmNyeXB0aW9uUGF0dGVybjo6TWF0Y2hlcyhjb25zdCBFbmNyeXB0aW9uUGF0dGVybiYgb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuIGNyeXB0X2J5dGVfYmxvY2tfID09IG90aGVyLmNyeXB0X2J5dGVfYmxvY2soKSAmJgotICAgICAgICAgc2tpcF9ieXRlX2Jsb2NrXyA9PSBvdGhlci5za2lwX2J5dGVfYmxvY2soKTsKLX0KLQotYm9vbCBFbmNyeXB0aW9uUGF0dGVybjo6SXNJbkVmZmVjdCgpIGNvbnN0IHsKLSAgLy8gSVNPL0lFQyAyMzAwMS03KDIwMTYpLCBzZWN0aW9uIDEwLjMsIGRpc2N1c3NpbmcgJ2NlbnMnIHBhdHRlcm4gZW5jcnlwdGlvbgotICAvLyBzY2hlbWUsIHN0YXRlcyAiVHJhY2tzIG90aGVyIHRoYW4gdmlkZW8gYXJlIHByb3RlY3RlZCB1c2luZyB3aG9sZS1ibG9jawotICAvLyBmdWxsLXNhbXBsZSBlbmNyeXB0aW9uIGFzIHNwZWNpZmllZCBpbiA5LjcgYW5kIGhlbmNlIHNraXBfYnl0ZV9ibG9jawotICAvLyBTSEFMTCBiZSAwLiIgU28gcGF0dGVybiBpcyBpbiBlZmZlY3QgYXMgbG9uZyBhcyB8Y3J5cHRfYnl0ZV9ibG9ja198IGlzIHNldC4KLSAgcmV0dXJuIGNyeXB0X2J5dGVfYmxvY2tfICE9IDA7Ci19Ci0KLWJvb2wgRW5jcnlwdGlvblBhdHRlcm46Om9wZXJhdG9yPT0oY29uc3QgRW5jcnlwdGlvblBhdHRlcm4mIG90aGVyKSBjb25zdCB7Ci0gIHJldHVybiBjcnlwdF9ieXRlX2Jsb2NrXyA9PSBvdGhlci5jcnlwdF9ieXRlX2Jsb2NrXyAmJgotICAgICAgICAgc2tpcF9ieXRlX2Jsb2NrXyA9PSBvdGhlci5za2lwX2J5dGVfYmxvY2tfOwotfQotCi1ib29sIEVuY3J5cHRpb25QYXR0ZXJuOjpvcGVyYXRvciE9KGNvbnN0IEVuY3J5cHRpb25QYXR0ZXJuJiBvdGhlcikgY29uc3QgewotICByZXR1cm4gIW9wZXJhdG9yPT0ob3RoZXIpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fcGF0dGVybi5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlODMwYTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfRU5DUllQVElPTl9QQVRURVJOX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0VOQ1JZUFRJT05fUEFUVEVSTl9IXwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQ0VOQyAzcmQgRWRpdGlvbiBhZGRzIHBhdHRlcm4gZW5jcnlwdGlvbiwgdGhyb3VnaCB0d28gbmV3IHByb3RlY3Rpb24KLS8vIHNjaGVtZXM6ICdjZW5zJyAod2l0aCBBRVMtQ1RSKSBhbmQgJ2NiY3MnICh3aXRoIEFFUy1DQkMpLgotLy8gVGhlIHBhdHRlcm4gYXBwbGllcyBpbmRlcGVuZGVudGx5IHRvIGVhY2ggJ2VuY3J5cHRlZCcgcGFydCBvZiB0aGUgZnJhbWUgKGFzCi0vLyBkZWZpbmVkIGJ5IHRoZSByZWxldmFudCBzdWJzYW1wbGUgZW50cmllcyksIGFuZCByZWR1Y2VzIGZ1cnRoZXIgdGhlCi0vLyBhY3R1YWwgZW5jcnlwdGlvbiBhcHBsaWVkIHRocm91Z2ggYSByZXBlYXRpbmcgcGF0dGVybiBvZiAoZW5jcnlwdDpza2lwKQotLy8gMTYgYnl0ZSBibG9ja3MuIEZvciBleGFtcGxlLCBpbiBhICgxOjkpIHBhdHRlcm4sIHRoZSBmaXJzdCBibG9jayBpcwotLy8gZW5jcnlwdGVkLCBhbmQgdGhlIG5leHQgbmluZSBhcmUgc2tpcHBlZC4gVGhpcyBwYXR0ZXJuIGlzIGFwcGxpZWQKLS8vIHJlcGVhdGVkbHkgdW50aWwgdGhlIGVuZCBvZiB0aGUgbGFzdCAxNi1ieXRlIGJsb2NrIGluIHRoZSBzdWJzYW1wbGUuCi0vLyBBbnkgcmVtYWluaW5nIGJ5dGVzIGFyZSBsZWZ0IGNsZWFyLgotLy8gSWYgY3J5cHRfYnl0ZV9ibG9jayBpcyAwLCBwYXR0ZXJuIGVuY3J5cHRpb24gaXMgZGlzYWJsZWQuCi0vLyBUT0RPKGpydW1tZWxsKTogVXNlIGJhc2U6Ok9wdGlvbmFsPEVuY3J5cHRpb25QYXR0ZXJuPiBldmVyeXdoZXJlLCBhbmQgcmVtb3ZlCi0vLyBJc0luRWZmZWN0KCkuCi1jbGFzcyBNRURJQV9FWFBPUlQgRW5jcnlwdGlvblBhdHRlcm4gewotIHB1YmxpYzoKLSAgRW5jcnlwdGlvblBhdHRlcm4oKTsKLSAgRW5jcnlwdGlvblBhdHRlcm4odWludDMyX3QgY3J5cHRfYnl0ZV9ibG9jaywgdWludDMyX3Qgc2tpcF9ieXRlX2Jsb2NrKTsKLSAgRW5jcnlwdGlvblBhdHRlcm4oY29uc3QgRW5jcnlwdGlvblBhdHRlcm4mIHJocyk7Ci0gIEVuY3J5cHRpb25QYXR0ZXJuJiBvcGVyYXRvcj0oY29uc3QgRW5jcnlwdGlvblBhdHRlcm4mIHJocyk7Ci0gIH5FbmNyeXB0aW9uUGF0dGVybigpOwotCi0gIGJvb2wgTWF0Y2hlcyhjb25zdCBFbmNyeXB0aW9uUGF0dGVybiYgb3RoZXIpIGNvbnN0OwotCi0gIHVpbnQzMl90IGNyeXB0X2J5dGVfYmxvY2soKSBjb25zdCB7IHJldHVybiBjcnlwdF9ieXRlX2Jsb2NrXzsgfQotICB1aW50MzJfdCBza2lwX2J5dGVfYmxvY2soKSBjb25zdCB7IHJldHVybiBza2lwX2J5dGVfYmxvY2tfOyB9Ci0KLSAgYm9vbCBJc0luRWZmZWN0KCkgY29uc3Q7Ci0KLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEVuY3J5cHRpb25QYXR0ZXJuJiBvdGhlcikgY29uc3Q7Ci0gIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbmNyeXB0aW9uUGF0dGVybiYgb3RoZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgdWludDMyX3QgY3J5cHRfYnl0ZV9ibG9ja18gPSAwOyAgLy8gQ291bnQgb2YgdGhlIGVuY3J5cHRlZCBibG9ja3MuCi0gIHVpbnQzMl90IHNraXBfYnl0ZV9ibG9ja18gPSAwOyAgIC8vIENvdW50IG9mIHRoZSB1bmVuY3J5cHRlZCBibG9ja3MuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9FTkNSWVBUSU9OX1BBVFRFUk5fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fc2NoZW1lLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWJiNmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUVuY3J5cHRpb25TY2hlbWU6OkVuY3J5cHRpb25TY2hlbWUoKSA6IG1vZGVfKENJUEhFUl9NT0RFX1VORU5DUllQVEVEKSB7fQotCi1FbmNyeXB0aW9uU2NoZW1lOjpFbmNyeXB0aW9uU2NoZW1lKENpcGhlck1vZGUgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW5jcnlwdGlvblBhdHRlcm4mIHBhdHRlcm4pCi0gICAgOiBtb2RlXyhtb2RlKSwgcGF0dGVybl8ocGF0dGVybikge30KLQotRW5jcnlwdGlvblNjaGVtZTo6fkVuY3J5cHRpb25TY2hlbWUoKSB7fQotCi1ib29sIEVuY3J5cHRpb25TY2hlbWU6Ok1hdGNoZXMoY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgb3RoZXIpIGNvbnN0IHsKLSAgcmV0dXJuIG1vZGVfID09IG90aGVyLm1vZGVfICYmIHBhdHRlcm5fID09IG90aGVyLnBhdHRlcm5fOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fc2NoZW1lLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDBkOGQ1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fc2NoZW1lLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfRU5DUllQVElPTl9TQ0hFTUVfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfRU5DUllQVElPTl9TQ0hFTUVfSF8KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2VuY3J5cHRpb25fcGF0dGVybi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFNwZWNpZmljYXRpb24gb2Ygd2hldGhlciBhbmQgaG93IHRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIChpbiB3aG9sZSBvciBwYXJ0KS4KLWNsYXNzIE1FRElBX0VYUE9SVCBFbmNyeXB0aW9uU2NoZW1lIHsKLSBwdWJsaWM6Ci0gIC8vIEFsZ29yaXRobSBhbmQgbW9kZSB1c2VkIGZvciBlbmNyeXB0aW9uLiBDSVBIRVJfTU9ERV9VTkVOQ1JZUFRFRCBpbmRpY2F0ZXMKLSAgLy8gbm8gZW5jcnlwdGlvbi4KLSAgZW51bSBDaXBoZXJNb2RlIHsKLSAgICBDSVBIRVJfTU9ERV9VTkVOQ1JZUFRFRCwKLSAgICBDSVBIRVJfTU9ERV9BRVNfQ1RSLAotICAgIENJUEhFUl9NT0RFX0FFU19DQkMsCi0gICAgQ0lQSEVSX01PREVfTUFYID0gQ0lQSEVSX01PREVfQUVTX0NCQwotICB9OwotCi0gIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG1ha2VzIGFuIGluc3RhbmNlIHRoYXQgaW5kaWNhdGVzIG5vIGVuY3J5cHRpb24uCi0gIEVuY3J5cHRpb25TY2hlbWUoKTsKLQotICAvLyBUaGlzIGNvbnN0cnVjdG9yIGFsbG93cyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBjaXBoZXIgbW9kZSBhbmQgdGhlIHBhdHRlcm4uCi0gIEVuY3J5cHRpb25TY2hlbWUoQ2lwaGVyTW9kZSBtb2RlLCBjb25zdCBFbmNyeXB0aW9uUGF0dGVybiYgcGF0dGVybik7Ci0gIH5FbmNyeXB0aW9uU2NoZW1lKCk7Ci0KLSAgYm9vbCBNYXRjaGVzKGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIG90aGVyKSBjb25zdDsKLQotICBib29sIGlzX2VuY3J5cHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1vZGVfICE9IENJUEhFUl9NT0RFX1VORU5DUllQVEVEOyB9Ci0gIENpcGhlck1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1vZGVfOyB9Ci0gIGNvbnN0IEVuY3J5cHRpb25QYXR0ZXJuJiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gcGF0dGVybl87IH0KLQotIHByaXZhdGU6Ci0gIENpcGhlck1vZGUgbW9kZV87Ci0gIEVuY3J5cHRpb25QYXR0ZXJuIHBhdHRlcm5fOwotCi0gIC8vIEFsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9FTkNSWVBUSU9OX1NDSEVNRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZW5kaWFuX3V0aWwuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2VuZGlhbl91dGlsLmgKaW5kZXggY2FmYjRhMC4uZGU5NzljYyAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZW5kaWFuX3V0aWwuaAorKysgYi9jb2JhbHQvbWVkaWEvYmFzZS9lbmRpYW5fdXRpbC5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSAiYmFzZS9zeXNfYnl0ZW9yZGVyLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCisvLyBUT0RPOiBDb25zaWRlciBTdGFyYm9hcmRpemUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4KKwogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewogbmFtZXNwYWNlIGVuZGlhbl91dGlsIHsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9mYWtlX2RlbXV4ZXJfc3RyZWFtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWVhZjQxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uaCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcHRyX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXIuaCIKLSNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfdGFza19ydW5uZXJfaGFuZGxlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvcmVjdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9oZWxwZXJzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgaW50IGtTdGFydFRpbWVzdGFtcE1zID0gMDsKLWNvbnN0IGludCBrRHVyYXRpb25NcyA9IDMwOwotY29uc3QgaW50IGtTdGFydFdpZHRoID0gMzIwOwotY29uc3QgaW50IGtTdGFydEhlaWdodCA9IDI0MDsKLWNvbnN0IGludCBrV2lkdGhEZWx0YSA9IDQ7Ci1jb25zdCBpbnQga0hlaWdodERlbHRhID0gMzsKLWNvbnN0IHVpbnQ4X3Qga0tleUlkW10gPSB7MHgwMCwgMHgwMSwgMHgwMiwgMHgwM307Ci1jb25zdCB1aW50OF90IGtJdltdID0gezB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCi0gICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwotCi1GYWtlRGVtdXhlclN0cmVhbTo6RmFrZURlbXV4ZXJTdHJlYW0oaW50IG51bV9jb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZW5jcnlwdGVkKQotICAgIDogdGFza19ydW5uZXJfKGJhc2U6OlRocmVhZFRhc2tSdW5uZXJIYW5kbGU6OkdldCgpKSwKLSAgICAgIG51bV9jb25maWdzXyhudW1fY29uZmlncyksCi0gICAgICBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnXyhudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnKSwKLSAgICAgIGNvbmZpZ19jaGFuZ2VzXyhudW1fY29uZmlncyA+IDEpLAotICAgICAgaXNfZW5jcnlwdGVkXyhpc19lbmNyeXB0ZWQpLAotICAgICAgcmVhZF90b19ob2xkXygtMSkgewotICBEQ0hFQ0tfR1QobnVtX2NvbmZpZ3MsIDApOwotICBEQ0hFQ0tfR1QobnVtX2J1ZmZlcnNfaW5fb25lX2NvbmZpZywgMCk7Ci0gIEluaXRpYWxpemUoKTsKLSAgVXBkYXRlVmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci19Ci0KLUZha2VEZW11eGVyU3RyZWFtOjp+RmFrZURlbXV4ZXJTdHJlYW0oKSB7fQotCi12b2lkIEZha2VEZW11eGVyU3RyZWFtOjpJbml0aWFsaXplKCkgewotICBEQ0hFQ0tfRVEoLTEsIHJlYWRfdG9faG9sZF8pOwotICBudW1fY29uZmlnc19sZWZ0XyA9IG51bV9jb25maWdzXzsKLSAgbnVtX2J1ZmZlcnNfbGVmdF9pbl9jdXJyZW50X2NvbmZpZ18gPSBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnXzsKLSAgbnVtX2J1ZmZlcnNfcmV0dXJuZWRfID0gMDsKLSAgY3VycmVudF90aW1lc3RhbXBfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtTdGFydFRpbWVzdGFtcE1zKTsKLSAgZHVyYXRpb25fID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtEdXJhdGlvbk1zKTsKLSAgc3BsaWNlX3RpbWVzdGFtcF8gPSBrTm9UaW1lc3RhbXA7Ci0gIG5leHRfY29kZWRfc2l6ZV8gPSBtYXRoOjpTaXplKGtTdGFydFdpZHRoLCBrU3RhcnRIZWlnaHQpOwotICBuZXh0X3JlYWRfbnVtXyA9IDA7Ci19Ci0KLXZvaWQgRmFrZURlbXV4ZXJTdHJlYW06OlJlYWQoY29uc3QgUmVhZENCJiByZWFkX2NiKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIERDSEVDSyhyZWFkX2NiXy5pc19udWxsKCkpOwotCi0gIHJlYWRfY2JfID0gQmluZFRvQ3VycmVudExvb3AocmVhZF9jYik7Ci0KLSAgaWYgKHJlYWRfdG9faG9sZF8gPT0gbmV4dF9yZWFkX251bV8pIHJldHVybjsKLQotICBEQ0hFQ0socmVhZF90b19ob2xkXyA9PSAtMSB8fCByZWFkX3RvX2hvbGRfID4gbmV4dF9yZWFkX251bV8pOwotICBEb1JlYWQoKTsKLX0KLQotQXVkaW9EZWNvZGVyQ29uZmlnIEZha2VEZW11eGVyU3RyZWFtOjphdWRpb19kZWNvZGVyX2NvbmZpZygpIHsKLSAgRENIRUNLKHRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gQXVkaW9EZWNvZGVyQ29uZmlnKCk7Ci19Ci0KLVZpZGVvRGVjb2RlckNvbmZpZyBGYWtlRGVtdXhlclN0cmVhbTo6dmlkZW9fZGVjb2Rlcl9jb25maWcoKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIHJldHVybiB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci19Ci0KLS8vIFRPRE8oeGh3YW5nKTogU3VwcG9ydCBhdWRpbyBpZiBuZWVkZWQuCi1EZW11eGVyU3RyZWFtOjpUeXBlIEZha2VEZW11eGVyU3RyZWFtOjp0eXBlKCkgY29uc3QgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICByZXR1cm4gVklERU87Ci19Ci0KLWJvb2wgRmFrZURlbXV4ZXJTdHJlYW06OlN1cHBvcnRzQ29uZmlnQ2hhbmdlcygpIHsgcmV0dXJuIGNvbmZpZ19jaGFuZ2VzXzsgfQotCi1WaWRlb1JvdGF0aW9uIEZha2VEZW11eGVyU3RyZWFtOjp2aWRlb19yb3RhdGlvbigpIHsgcmV0dXJuIFZJREVPX1JPVEFUSU9OXzA7IH0KLQotYm9vbCBGYWtlRGVtdXhlclN0cmVhbTo6ZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotdm9pZCBGYWtlRGVtdXhlclN0cmVhbTo6c2V0X2VuYWJsZWQoYm9vbCBlbmFibGVkLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIE5PVElNUExFTUVOVEVEKCk7Ci19Ci0KLXZvaWQgRmFrZURlbXV4ZXJTdHJlYW06OlNldFN0cmVhbVN0YXR1c0NoYW5nZUNCKAotICAgIGNvbnN0IFN0cmVhbVN0YXR1c0NoYW5nZUNCJiBjYikgewotICBOT1RJTVBMRU1FTlRFRCgpOwotfQotCi12b2lkIEZha2VEZW11eGVyU3RyZWFtOjpIb2xkTmV4dFJlYWQoKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIHJlYWRfdG9faG9sZF8gPSBuZXh0X3JlYWRfbnVtXzsKLX0KLQotdm9pZCBGYWtlRGVtdXhlclN0cmVhbTo6SG9sZE5leHRDb25maWdDaGFuZ2VSZWFkKCkgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICAvLyBTZXQgfHJlYWRfdG9faG9sZF98IHRvIGJlIHRoZSBuZXh0IGNvbmZpZyBjaGFuZ2UgcmVhZC4KLSAgcmVhZF90b19ob2xkXyA9IG5leHRfcmVhZF9udW1fICsgbnVtX2J1ZmZlcnNfaW5fb25lX2NvbmZpZ18gLQotICAgICAgICAgICAgICAgICAgbmV4dF9yZWFkX251bV8gJSAobnVtX2J1ZmZlcnNfaW5fb25lX2NvbmZpZ18gKyAxKTsKLX0KLQotdm9pZCBGYWtlRGVtdXhlclN0cmVhbTo6U2F0aXNmeVJlYWQoKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIERDSEVDS19FUShyZWFkX3RvX2hvbGRfLCBuZXh0X3JlYWRfbnVtXyk7Ci0gIERDSEVDSyghcmVhZF9jYl8uaXNfbnVsbCgpKTsKLQotICByZWFkX3RvX2hvbGRfID0gLTE7Ci0gIERvUmVhZCgpOwotfQotCi12b2lkIEZha2VEZW11eGVyU3RyZWFtOjpTYXRpc2Z5UmVhZEFuZEhvbGROZXh0KCkgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0tfRVEocmVhZF90b19ob2xkXywgbmV4dF9yZWFkX251bV8pOwotICBEQ0hFQ0soIXJlYWRfY2JfLmlzX251bGwoKSk7Ci0KLSAgKytyZWFkX3RvX2hvbGRfOwotICBEb1JlYWQoKTsKLX0KLQotdm9pZCBGYWtlRGVtdXhlclN0cmVhbTo6UmVzZXQoKSB7Ci0gIHJlYWRfdG9faG9sZF8gPSAtMTsKLQotICBpZiAoIXJlYWRfY2JfLmlzX251bGwoKSkgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJnJlYWRfY2JfKS5SdW4oa0Fib3J0ZWQsIE5VTEwpOwotfQotCi12b2lkIEZha2VEZW11eGVyU3RyZWFtOjpTZWVrVG9TdGFydCgpIHsKLSAgUmVzZXQoKTsKLSAgSW5pdGlhbGl6ZSgpOwotfQotCi12b2lkIEZha2VEZW11eGVyU3RyZWFtOjpTZWVrVG9FbmRPZlN0cmVhbSgpIHsKLSAgbnVtX2NvbmZpZ3NfbGVmdF8gPSAwOwotICBudW1fYnVmZmVyc19sZWZ0X2luX2N1cnJlbnRfY29uZmlnXyA9IDA7Ci19Ci0KLXZvaWQgRmFrZURlbXV4ZXJTdHJlYW06OlVwZGF0ZVZpZGVvRGVjb2RlckNvbmZpZygpIHsKLSAgY29uc3QgbWF0aDo6UmVjdCBrVmlzaWJsZVJlY3Qoa1N0YXJ0V2lkdGgsIGtTdGFydEhlaWdodCk7Ci0gIHZpZGVvX2RlY29kZXJfY29uZmlnXy5Jbml0aWFsaXplKAotICAgICAga0NvZGVjVlA4LCBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04sIFBJWEVMX0ZPUk1BVF9ZVjEyLAotICAgICAgQ09MT1JfU1BBQ0VfVU5TUEVDSUZJRUQsIG5leHRfY29kZWRfc2l6ZV8sIGtWaXNpYmxlUmVjdCwgbmV4dF9jb2RlZF9zaXplXywKLSAgICAgIEVtcHR5RXh0cmFEYXRhKCksCi0gICAgICBpc19lbmNyeXB0ZWRfID8gQWVzQ3RyRW5jcnlwdGlvblNjaGVtZSgpIDogVW5lbmNyeXB0ZWQoKSk7Ci0gIG5leHRfY29kZWRfc2l6ZV8uRW5sYXJnZShrV2lkdGhEZWx0YSwga0hlaWdodERlbHRhKTsKLX0KLQotdm9pZCBGYWtlRGVtdXhlclN0cmVhbTo6RG9SZWFkKCkgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0soIXJlYWRfY2JfLmlzX251bGwoKSk7Ci0KLSAgbmV4dF9yZWFkX251bV8rKzsKLQotICBpZiAobnVtX2J1ZmZlcnNfbGVmdF9pbl9jdXJyZW50X2NvbmZpZ18gPT0gMCkgewotICAgIC8vIEVuZCBvZiBzdHJlYW0uCi0gICAgaWYgKG51bV9jb25maWdzX2xlZnRfID09IDApIHsKLSAgICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZyZWFkX2NiXykuUnVuKGtPaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcigpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDb25maWcgY2hhbmdlLgotICAgIG51bV9idWZmZXJzX2xlZnRfaW5fY3VycmVudF9jb25maWdfID0gbnVtX2J1ZmZlcnNfaW5fb25lX2NvbmZpZ187Ci0gICAgVXBkYXRlVmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0gICAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJnJlYWRfY2JfKS5SdW4oa0NvbmZpZ0NoYW5nZWQsIE5VTEwpOwotICAgIHJldHVybjsKLSAgfQotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gQ3JlYXRlRmFrZVZpZGVvQnVmZmVyRm9yVGVzdCgKLSAgICAgIHZpZGVvX2RlY29kZXJfY29uZmlnXywgY3VycmVudF90aW1lc3RhbXBfLCBkdXJhdGlvbl8pOwotCi0gIC8vIFRPRE8oeGh3YW5nKTogT3V0cHV0IG91dC1vZi1vcmRlciBidWZmZXJzIGlmIG5lZWRlZC4KLSAgaWYgKGlzX2VuY3J5cHRlZF8pIHsKLSAgICBidWZmZXItPnNldF9kZWNyeXB0X2NvbmZpZyhEZWNyeXB0Q29uZmlnOjpDcmVhdGVDZW5jQ29uZmlnKAotICAgICAgICBzdGQ6OnN0cmluZyhrS2V5SWQsIGtLZXlJZCArIGFycmF5c2l6ZShrS2V5SWQpKSwKLSAgICAgICAgc3RkOjpzdHJpbmcoa0l2LCBrSXYgKyBhcnJheXNpemUoa0l2KSksIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PigpKSk7Ci0gIH0KLSAgYnVmZmVyLT5zZXRfdGltZXN0YW1wKGN1cnJlbnRfdGltZXN0YW1wXyk7Ci0gIGJ1ZmZlci0+c2V0X2R1cmF0aW9uKGR1cmF0aW9uXyk7Ci0gIGJ1ZmZlci0+c2V0X3NwbGljZV90aW1lc3RhbXAoc3BsaWNlX3RpbWVzdGFtcF8pOwotICBjdXJyZW50X3RpbWVzdGFtcF8gKz0gZHVyYXRpb25fOwotCi0gIG51bV9idWZmZXJzX2xlZnRfaW5fY3VycmVudF9jb25maWdfLS07Ci0gIGlmIChudW1fYnVmZmVyc19sZWZ0X2luX2N1cnJlbnRfY29uZmlnXyA9PSAwKSBudW1fY29uZmlnc19sZWZ0Xy0tOwotCi0gIG51bV9idWZmZXJzX3JldHVybmVkXysrOwotICBiYXNlOjpSZXNldEFuZFJldHVybigmcmVhZF9jYl8pLlJ1bihrT2ssIGJ1ZmZlcik7Ci19Ci0KLUZha2VEZW11eGVyU3RyZWFtUHJvdmlkZXI6OkZha2VEZW11eGVyU3RyZWFtUHJvdmlkZXIoCi0gICAgaW50IG51bV92aWRlb19jb25maWdzLCBpbnQgbnVtX3ZpZGVvX2J1ZmZlcnNfaW5fb25lX2NvbmZpZywKLSAgICBib29sIGlzX3ZpZGVvX2VuY3J5cHRlZCkKLSAgICA6IGZha2VfdmlkZW9fc3RyZWFtXyhudW1fdmlkZW9fY29uZmlncywgbnVtX3ZpZGVvX2J1ZmZlcnNfaW5fb25lX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpc192aWRlb19lbmNyeXB0ZWQpIHt9Ci0KLUZha2VEZW11eGVyU3RyZWFtUHJvdmlkZXI6On5GYWtlRGVtdXhlclN0cmVhbVByb3ZpZGVyKCkge30KLQotRGVtdXhlclN0cmVhbSogRmFrZURlbXV4ZXJTdHJlYW1Qcm92aWRlcjo6R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICBpZiAodHlwZSA9PSBEZW11eGVyU3RyZWFtOjpUeXBlOjpBVURJTykgcmV0dXJuIE5VTEw7Ci0gIHJldHVybiAmZmFrZV92aWRlb19zdHJlYW1fOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyN2E5NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9mYWtlX2RlbXV4ZXJfc3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9GQUtFX0RFTVVYRVJfU1RSRUFNX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0ZBS0VfREVNVVhFUl9TVFJFQU1fSF8KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLQotbmFtZXNwYWNlIGJhc2UgewotY2xhc3MgU2luZ2xlVGhyZWFkVGFza1J1bm5lcjsKLX0gIC8vIG5hbWVzcGFjZSBiYXNlCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgRmFrZURlbXV4ZXJTdHJlYW0gOiBwdWJsaWMgRGVtdXhlclN0cmVhbSB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3RzIGFuIG9iamVjdCB0aGF0IG91dHB1dHMgfG51bV9jb25maWdzfCBkaWZmZXJlbnQgY29uZmlncyBpbgotICAvLyBzZXF1ZW5jZSB3aXRoIHxudW1fZnJhbWVzX2luX29uZV9jb25maWd8IGJ1ZmZlcnMgZm9yIGVhY2ggY29uZmlnLiBUaGUKLSAgLy8gb3V0cHV0IGJ1ZmZlcnMgYXJlIGVuY3J5cHRlZCBpZiB8aXNfZW5jcnlwdGVkfCBpcyB0cnVlLgotICBGYWtlRGVtdXhlclN0cmVhbShpbnQgbnVtX2NvbmZpZ3MsIGludCBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICBib29sIGlzX2VuY3J5cHRlZCk7Ci0gIH5GYWtlRGVtdXhlclN0cmVhbSgpIG92ZXJyaWRlOwotCi0gIC8vIERlbXV4ZXJTdHJlYW0gaW1wbGVtZW50YXRpb24uCi0gIHZvaWQgUmVhZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpIG92ZXJyaWRlOwotICBBdWRpb0RlY29kZXJDb25maWcgYXVkaW9fZGVjb2Rlcl9jb25maWcoKSBvdmVycmlkZTsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIHZpZGVvX2RlY29kZXJfY29uZmlnKCkgb3ZlcnJpZGU7Ci0gIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotICBib29sIFN1cHBvcnRzQ29uZmlnQ2hhbmdlcygpIG92ZXJyaWRlOwotICBWaWRlb1JvdGF0aW9uIHZpZGVvX3JvdGF0aW9uKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlOwotICB2b2lkIHNldF9lbmFibGVkKGJvb2wgZW5hYmxlZCwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgb3ZlcnJpZGU7Ci0gIHZvaWQgU2V0U3RyZWFtU3RhdHVzQ2hhbmdlQ0IoY29uc3QgU3RyZWFtU3RhdHVzQ2hhbmdlQ0ImIGNiKSBvdmVycmlkZTsKLQotICB2b2lkIEluaXRpYWxpemUoKTsKLQotICBpbnQgbnVtX2J1ZmZlcnNfcmV0dXJuZWQoKSBjb25zdCB7IHJldHVybiBudW1fYnVmZmVyc19yZXR1cm5lZF87IH0KLQotICAvLyBVcG9uIHRoZSBuZXh0IHJlYWQsIGhvbGRzIHRoZSByZWFkIGNhbGxiYWNrIHVudGlsIFNhdGlzZnlSZWFkKCkgb3IgUmVzZXQoKQotICAvLyBpcyBjYWxsZWQuCi0gIHZvaWQgSG9sZE5leHRSZWFkKCk7Ci0KLSAgLy8gVXBvbiB0aGUgbmV4dCBjb25maWcgY2hhbmdlIHJlYWQsIGhvbGRzIHRoZSByZWFkIGNhbGxiYWNrIHVudGlsCi0gIC8vIFNhdGlzZnlSZWFkKCkgb3IgUmVzZXQoKSBpcyBjYWxsZWQuIElmIHRoZXJlIGlzIG5vIGNvbmZpZyBjaGFuZ2UgYW55IG1vcmUsCi0gIC8vIG5vIHJlYWQgd2lsbCBiZSBoZWxkLgotICB2b2lkIEhvbGROZXh0Q29uZmlnQ2hhbmdlUmVhZCgpOwotCi0gIC8vIFNhdGlzZmllcyB0aGUgcGVuZGluZyByZWFkIHdpdGggdGhlIG5leHQgc2NoZWR1bGVkIHN0YXR1cyBhbmQgYnVmZmVyLgotICB2b2lkIFNhdGlzZnlSZWFkKCk7Ci0KLSAgLy8gU2F0aXNmaWVzIHBlbmRpbmcgcmVhZCByZXF1ZXN0IGFuZCB0aGVuIGhvbGRzIHRoZSBmb2xsb3dpbmcgcmVhZC4KLSAgdm9pZCBTYXRpc2Z5UmVhZEFuZEhvbGROZXh0KCk7Ci0KLSAgLy8gU2F0aXNmaWVzIHRoZSBwZW5kaW5nIHJlYWQgKGlmIGFueSkgd2l0aCBrQWJvcnRlZCBhbmQgTlVMTC4gVGhpcyBjYWxsCi0gIC8vIGFsd2F5cyBjbGVhcnMgfGhvbGRfbmV4dF9yZWFkX3wuCi0gIHZvaWQgUmVzZXQoKTsKLQotICAvLyBSZXNldCgpIHRoaXMgZGVtdXhlciBzdHJlYW0gYW5kIHNldCB0aGUgcmVhZGluZyBwb3NpdGlvbiB0byB0aGUgc3RhcnQgb2YKLSAgLy8gdGhlIHN0cmVhbS4KLSAgdm9pZCBTZWVrVG9TdGFydCgpOwotCi0gIC8vIFNldHMgZnVydGhlciByZWFkIHJlcXVlc3RzIHRvIHJldHVybiBFT1MgYnVmZmVycy4KLSAgdm9pZCBTZWVrVG9FbmRPZlN0cmVhbSgpOwotCi0gIC8vIFNldHMgdGhlIHNwbGljZSB0aW1lc3RhbXAgZm9yIGFsbCBmdXR1cmUgYnVmZmVycyByZXR1cm5lZCB2aWEgUmVhZCgpLgotICB2b2lkIHNldF9zcGxpY2VfdGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YSBzcGxpY2VfdGltZXN0YW1wKSB7Ci0gICAgc3BsaWNlX3RpbWVzdGFtcF8gPSBzcGxpY2VfdGltZXN0YW1wOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIFVwZGF0ZVZpZGVvRGVjb2RlckNvbmZpZygpOwotICB2b2lkIERvUmVhZCgpOwotCi0gIHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4gdGFza19ydW5uZXJfOwotCi0gIGNvbnN0IGludCBudW1fY29uZmlnc187Ci0gIGNvbnN0IGludCBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnXzsKLSAgY29uc3QgYm9vbCBjb25maWdfY2hhbmdlc187Ci0gIGNvbnN0IGJvb2wgaXNfZW5jcnlwdGVkXzsKLQotICBpbnQgbnVtX2NvbmZpZ3NfbGVmdF87Ci0KLSAgLy8gTnVtYmVyIG9mIGZyYW1lcyBsZWZ0IHdpdGggdGhlIGN1cnJlbnQgZGVjb2RlciBjb25maWcuCi0gIGludCBudW1fYnVmZmVyc19sZWZ0X2luX2N1cnJlbnRfY29uZmlnXzsKLQotICBpbnQgbnVtX2J1ZmZlcnNfcmV0dXJuZWRfOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBjdXJyZW50X3RpbWVzdGFtcF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbl87Ci0gIGJhc2U6OlRpbWVEZWx0YSBzcGxpY2VfdGltZXN0YW1wXzsKLQotICBtYXRoOjpTaXplIG5leHRfY29kZWRfc2l6ZV87Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgUmVhZENCIHJlYWRfY2JfOwotCi0gIGludCBuZXh0X3JlYWRfbnVtXzsKLSAgLy8gWmVyby1iYXNlZCBudW1iZXIgaW5kaWNhdGluZyB3aGljaCByZWFkIG9wZXJhdGlvbiBzaG91bGQgYmUgaGVsZC4gLTEgbWVhbnMKLSAgLy8gbm8gcmVhZCBzaGFsbCBiZSBoZWxkLgotICBpbnQgcmVhZF90b19ob2xkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmFrZURlbXV4ZXJTdHJlYW0pOwotfTsKLQotY2xhc3MgRmFrZURlbXV4ZXJTdHJlYW1Qcm92aWRlciA6IHB1YmxpYyBEZW11eGVyU3RyZWFtUHJvdmlkZXIgewotIHB1YmxpYzoKLSAgLy8gTm90ZTogRmFrZURlbXV4ZXJTdHJlYW0gY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgYSBmYWtlIHZpZGVvIERlbXV4ZXJTdHJlYW0uCi0gIEZha2VEZW11eGVyU3RyZWFtUHJvdmlkZXIoaW50IG51bV92aWRlb19jb25maWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fdmlkZW9fYnVmZmVyc19pbl9vbmVfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfdmlkZW9fZW5jcnlwdGVkKTsKLSAgfkZha2VEZW11eGVyU3RyZWFtUHJvdmlkZXIoKSBvdmVycmlkZTsKLQotICAvLyBEZW11eGVyU3RyZWFtUHJvdmlkZXIgaW1wbGVtZW50YXRpb24uCi0gIERlbXV4ZXJTdHJlYW0qIEdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgRmFrZURlbXV4ZXJTdHJlYW0gZmFrZV92aWRlb19zdHJlYW1fOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGYWtlRGVtdXhlclN0cmVhbVByb3ZpZGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0ZBS0VfREVNVVhFUl9TVFJFQU1fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW1fdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9mYWtlX2RlbXV4ZXJfc3RyZWFtX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU4Y2U1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW1fdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2Zha2VfZGVtdXhlcl9zdHJlYW0uaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgotI2luY2x1ZGUgImJhc2UvcnVuX2xvb3AuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgaW50IGtOdW1CdWZmZXJzSW5PbmVDb25maWcgPSA5OwotY29uc3QgaW50IGtOdW1CdWZmZXJzVG9SZWFkRmlyc3QgPSA1OwotY29uc3QgaW50IGtOdW1Db25maWdzID0gMzsKLXN0YXRpY19hc3NlcnQoa051bUJ1ZmZlcnNUb1JlYWRGaXJzdCA8IGtOdW1CdWZmZXJzSW5PbmVDb25maWcsCi0gICAgICAgICAgICAgICJkbyBub3QgcmVhZCB0b28gbWFueSBidWZmZXJzIik7Ci1zdGF0aWNfYXNzZXJ0KGtOdW1Db25maWdzID4gMCwKLSAgICAgICAgICAgICAgIm5lZWQgbXVsdGlwbGUgY29uZmlncyB0byB0cmlnZ2VyIGNvbmZpZyBjaGFuZ2UiKTsKLQotY2xhc3MgRmFrZURlbXV4ZXJTdHJlYW1UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgRmFrZURlbXV4ZXJTdHJlYW1UZXN0KCkKLSAgICAgIDogc3RhdHVzXyhEZW11eGVyU3RyZWFtOjprQWJvcnRlZCksCi0gICAgICAgIHJlYWRfcGVuZGluZ18oZmFsc2UpLAotICAgICAgICBudW1fYnVmZmVyc19yZWNlaXZlZF8oMCkge30KLSAgfkZha2VEZW11eGVyU3RyZWFtVGVzdCgpIG92ZXJyaWRlIHt9Ci0KLSAgdm9pZCBCdWZmZXJSZWFkeShEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgIERDSEVDSyhyZWFkX3BlbmRpbmdfKTsKLSAgICByZWFkX3BlbmRpbmdfID0gZmFsc2U7Ci0gICAgc3RhdHVzXyA9IHN0YXR1czsKLSAgICBidWZmZXJfID0gYnVmZmVyOwotICAgIGlmIChzdGF0dXMgPT0gRGVtdXhlclN0cmVhbTo6a09rICYmICFidWZmZXItPmVuZF9vZl9zdHJlYW0oKSkKLSAgICAgIG51bV9idWZmZXJzX3JlY2VpdmVkXysrOwotICB9Ci0KLSAgZW51bSBSZWFkUmVzdWx0IHsgT0ssIEFCT1JURUQsIENPTkZJR19DSEFOR0VELCBFT1MsIFBFTkRJTkcgfTsKLQotICB2b2lkIEVudGVyTm9ybWFsUmVhZFN0YXRlKCkgewotICAgIHN0cmVhbV8ucmVzZXQoCi0gICAgICAgIG5ldyBGYWtlRGVtdXhlclN0cmVhbShrTnVtQ29uZmlncywga051bUJ1ZmZlcnNJbk9uZUNvbmZpZywgZmFsc2UpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1CdWZmZXJzVG9SZWFkRmlyc3Q7ICsraSkgUmVhZEFuZEV4cGVjdChPSyk7Ci0gICAgRENIRUNLX0VRKGtOdW1CdWZmZXJzVG9SZWFkRmlyc3QsIG51bV9idWZmZXJzX3JlY2VpdmVkXyk7Ci0gIH0KLQotICB2b2lkIEVudGVyQmVmb3JlRU9TU3RhdGUoKSB7Ci0gICAgc3RyZWFtXy5yZXNldChuZXcgRmFrZURlbXV4ZXJTdHJlYW0oMSwga051bUJ1ZmZlcnNJbk9uZUNvbmZpZywgZmFsc2UpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1CdWZmZXJzSW5PbmVDb25maWc7ICsraSkgUmVhZEFuZEV4cGVjdChPSyk7Ci0gICAgRENIRUNLX0VRKGtOdW1CdWZmZXJzSW5PbmVDb25maWcsIG51bV9idWZmZXJzX3JlY2VpdmVkXyk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdFJlYWRSZXN1bHQoUmVhZFJlc3VsdCByZXN1bHQpIHsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgY2FzZSBPSzoKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHJlYWRfcGVuZGluZ18pOwotICAgICAgICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6a09rLCBzdGF0dXNfKTsKLSAgICAgICAgQVNTRVJUX1RSVUUoYnVmZmVyXy5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShidWZmZXJfLT5lbmRfb2Zfc3RyZWFtKCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBBQk9SVEVEOgotICAgICAgICBFWFBFQ1RfRkFMU0UocmVhZF9wZW5kaW5nXyk7Ci0gICAgICAgIEVYUEVDVF9FUShEZW11eGVyU3RyZWFtOjprQWJvcnRlZCwgc3RhdHVzXyk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShidWZmZXJfLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgQ09ORklHX0NIQU5HRUQ6Ci0gICAgICAgIEVYUEVDVF9UUlVFKHN0cmVhbV8tPlN1cHBvcnRzQ29uZmlnQ2hhbmdlcygpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHJlYWRfcGVuZGluZ18pOwotICAgICAgICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZWQsIHN0YXR1c18pOwotICAgICAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyXy5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEVPUzoKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHJlYWRfcGVuZGluZ18pOwotICAgICAgICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6a09rLCBzdGF0dXNfKTsKLSAgICAgICAgQVNTRVJUX1RSVUUoYnVmZmVyXy5nZXQoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGJ1ZmZlcl8tPmVuZF9vZl9zdHJlYW0oKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIFBFTkRJTkc6Ci0gICAgICAgIEVYUEVDVF9UUlVFKHJlYWRfcGVuZGluZ18pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICB2b2lkIFJlYWRBbmRFeHBlY3QoUmVhZFJlc3VsdCByZXN1bHQpIHsKLSAgICBFWFBFQ1RfRkFMU0UocmVhZF9wZW5kaW5nXyk7Ci0gICAgcmVhZF9wZW5kaW5nXyA9IHRydWU7Ci0gICAgc3RyZWFtXy0+UmVhZChiYXNlOjpCaW5kKCZGYWtlRGVtdXhlclN0cmVhbVRlc3Q6OkJ1ZmZlclJlYWR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICAgIEV4cGVjdFJlYWRSZXN1bHQocmVzdWx0KTsKLSAgfQotCi0gIHZvaWQgUmVhZFVudGlsUGVuZGluZygpIHsKLSAgICB3aGlsZSAoMSkgewotICAgICAgcmVhZF9wZW5kaW5nXyA9IHRydWU7Ci0gICAgICBzdHJlYW1fLT5SZWFkKGJhc2U6OkJpbmQoJkZha2VEZW11eGVyU3RyZWFtVGVzdDo6QnVmZmVyUmVhZHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwotICAgICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICAgICAgaWYgKHJlYWRfcGVuZGluZ18pIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIHZvaWQgU2F0aXNmeVJlYWRBbmRFeHBlY3QoUmVhZFJlc3VsdCByZXN1bHQpIHsKLSAgICBFWFBFQ1RfVFJVRShyZWFkX3BlbmRpbmdfKTsKLSAgICBzdHJlYW1fLT5TYXRpc2Z5UmVhZCgpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgICBFeHBlY3RSZWFkUmVzdWx0KHJlc3VsdCk7Ci0gIH0KLQotICB2b2lkIFJlc2V0KCkgewotICAgIGJvb2wgaGFkX3JlYWRfcGVuZGluZyA9IHJlYWRfcGVuZGluZ187Ci0gICAgc3RyZWFtXy0+UmVzZXQoKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0KLSAgICBFWFBFQ1RfRkFMU0UocmVhZF9wZW5kaW5nXyk7Ci0gICAgaWYgKGhhZF9yZWFkX3BlbmRpbmcpIEV4cGVjdFJlYWRSZXN1bHQoQUJPUlRFRCk7Ci0gIH0KLQotICB2b2lkIFJlYWRBbGxCdWZmZXJzKGludCBudW1fY29uZmlncywgaW50IG51bV9idWZmZXJzX2luX29uZV9jb25maWcpIHsKLSAgICBEQ0hFQ0tfRVEoMCwgbnVtX2J1ZmZlcnNfcmVjZWl2ZWRfKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9jb25maWdzOyArK2kpIHsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtX2J1ZmZlcnNfaW5fb25lX2NvbmZpZzsgKytqKSB7Ci0gICAgICAgIFJlYWRBbmRFeHBlY3QoT0spOwotICAgICAgICBFWFBFQ1RfRVEobnVtX2J1ZmZlcnNfcmVjZWl2ZWRfLCBzdHJlYW1fLT5udW1fYnVmZmVyc19yZXR1cm5lZCgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGkgPT0gbnVtX2NvbmZpZ3MgLSAxKQotICAgICAgICBSZWFkQW5kRXhwZWN0KEVPUyk7Ci0gICAgICBlbHNlCi0gICAgICAgIFJlYWRBbmRFeHBlY3QoQ09ORklHX0NIQU5HRUQpOwotICAgIH0KLQotICAgIC8vIFdpbGwgYWx3YXlzIGdldCBFT1MgYWZ0ZXIgd2UgaGl0IEVPUy4KLSAgICBSZWFkQW5kRXhwZWN0KEVPUyk7Ci0KLSAgICBFWFBFQ1RfRVEobnVtX2NvbmZpZ3MgKiBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnLCBudW1fYnVmZmVyc19yZWNlaXZlZF8pOwotICB9Ci0KLSAgdm9pZCBUZXN0UmVhZChpbnQgbnVtX2NvbmZpZ3MsIGludCBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnLAotICAgICAgICAgICAgICAgIGJvb2wgaXNfZW5jcnlwdGVkKSB7Ci0gICAgc3RyZWFtXy5yZXNldChuZXcgRmFrZURlbXV4ZXJTdHJlYW0obnVtX2NvbmZpZ3MsIG51bV9idWZmZXJzX2luX29uZV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZW5jcnlwdGVkKSk7Ci0KLSAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGNvbmZpZyA9IHN0cmVhbV8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCk7Ci0gICAgRVhQRUNUX1RSVUUoY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0gICAgRVhQRUNUX0VRKGlzX2VuY3J5cHRlZCwgY29uZmlnLmlzX2VuY3J5cHRlZCgpKTsKLQotICAgIFJlYWRBbGxCdWZmZXJzKG51bV9jb25maWdzLCBudW1fYnVmZmVyc19pbl9vbmVfY29uZmlnKTsKLSAgfQotCi0gIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcF87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxGYWtlRGVtdXhlclN0cmVhbT4gc3RyZWFtXzsKLQotICBEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzXzsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXJfOwotICBib29sIHJlYWRfcGVuZGluZ187Ci0gIGludCBudW1fYnVmZmVyc19yZWNlaXZlZF87Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmFrZURlbXV4ZXJTdHJlYW1UZXN0KTsKLX07Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIFJlYWRfT25lQ29uZmlnKSB7IFRlc3RSZWFkKDEsIDUsIGZhbHNlKTsgfQotCi1URVNUX0YoRmFrZURlbXV4ZXJTdHJlYW1UZXN0LCBSZWFkX011bHRpcGxlQ29uZmlncykgeyBUZXN0UmVhZCgzLCA1LCBmYWxzZSk7IH0KLQotVEVTVF9GKEZha2VEZW11eGVyU3RyZWFtVGVzdCwgUmVhZF9PbmVCdWZmZXJQZXJDb25maWcpIHsKLSAgVGVzdFJlYWQoMywgMSwgZmFsc2UpOwotfQotCi1URVNUX0YoRmFrZURlbXV4ZXJTdHJlYW1UZXN0LCBSZWFkX0VuY3J5cHRlZCkgeyBUZXN0UmVhZCg2LCAzLCB0cnVlKTsgfQotCi1URVNUX0YoRmFrZURlbXV4ZXJTdHJlYW1UZXN0LCBIb2xkUmVhZF9Ob3JtYWwpIHsKLSAgRW50ZXJOb3JtYWxSZWFkU3RhdGUoKTsKLSAgc3RyZWFtXy0+SG9sZE5leHRSZWFkKCk7Ci0gIFJlYWRBbmRFeHBlY3QoUEVORElORyk7Ci0gIFNhdGlzZnlSZWFkQW5kRXhwZWN0KE9LKTsKLX0KLQotVEVTVF9GKEZha2VEZW11eGVyU3RyZWFtVGVzdCwgSG9sZFJlYWRfQmVmb3JlQ29uZmlnQ2hhbmdlZCkgewotICBFbnRlck5vcm1hbFJlYWRTdGF0ZSgpOwotICBzdHJlYW1fLT5Ib2xkTmV4dENvbmZpZ0NoYW5nZVJlYWQoKTsKLSAgUmVhZFVudGlsUGVuZGluZygpOwotICBTYXRpc2Z5UmVhZEFuZEV4cGVjdChDT05GSUdfQ0hBTkdFRCk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIEhvbGRSZWFkX0JlZm9yZUVPUykgewotICBFbnRlckJlZm9yZUVPU1N0YXRlKCk7Ci0gIHN0cmVhbV8tPkhvbGROZXh0UmVhZCgpOwotICBSZWFkQW5kRXhwZWN0KFBFTkRJTkcpOwotICBTYXRpc2Z5UmVhZEFuZEV4cGVjdChFT1MpOwotfQotCi1URVNUX0YoRmFrZURlbXV4ZXJTdHJlYW1UZXN0LCBSZXNldF9Ob3JtYWwpIHsKLSAgRW50ZXJOb3JtYWxSZWFkU3RhdGUoKTsKLSAgUmVzZXQoKTsKLSAgUmVhZEFuZEV4cGVjdChPSyk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIFJlc2V0X0FmdGVySG9sZFJlYWQpIHsKLSAgRW50ZXJOb3JtYWxSZWFkU3RhdGUoKTsKLSAgc3RyZWFtXy0+SG9sZE5leHRSZWFkKCk7Ci0gIFJlc2V0KCk7Ci0gIFJlYWRBbmRFeHBlY3QoT0spOwotfQotCi1URVNUX0YoRmFrZURlbXV4ZXJTdHJlYW1UZXN0LCBSZXNldF9EdXJpbmdQZW5kaW5nUmVhZCkgewotICBFbnRlck5vcm1hbFJlYWRTdGF0ZSgpOwotICBzdHJlYW1fLT5Ib2xkTmV4dFJlYWQoKTsKLSAgUmVhZEFuZEV4cGVjdChQRU5ESU5HKTsKLSAgUmVzZXQoKTsKLSAgUmVhZEFuZEV4cGVjdChPSyk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIFJlc2V0X0JlZm9yZUNvbmZpZ0NoYW5nZWQpIHsKLSAgRW50ZXJOb3JtYWxSZWFkU3RhdGUoKTsKLSAgc3RyZWFtXy0+SG9sZE5leHRDb25maWdDaGFuZ2VSZWFkKCk7Ci0gIFJlYWRVbnRpbFBlbmRpbmcoKTsKLSAgUmVzZXQoKTsKLSAgUmVhZEFuZEV4cGVjdChDT05GSUdfQ0hBTkdFRCk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIFJlc2V0X0JlZm9yZUVPUykgewotICBFbnRlckJlZm9yZUVPU1N0YXRlKCk7Ci0gIHN0cmVhbV8tPkhvbGROZXh0UmVhZCgpOwotICBSZWFkQW5kRXhwZWN0KFBFTkRJTkcpOwotICBSZXNldCgpOwotICBSZWFkQW5kRXhwZWN0KEVPUyk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIE5vQ29uZmlnQ2hhbmdlcykgewotICBzdHJlYW1fLnJlc2V0KG5ldyBGYWtlRGVtdXhlclN0cmVhbSgxLCBrTnVtQnVmZmVyc0luT25lQ29uZmlnLCBmYWxzZSkpOwotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+U3VwcG9ydHNDb25maWdDaGFuZ2VzKCkpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1CdWZmZXJzSW5PbmVDb25maWc7ICsraSkgUmVhZEFuZEV4cGVjdChPSyk7Ci0gIFJlYWRBbmRFeHBlY3QoRU9TKTsKLX0KLQotVEVTVF9GKEZha2VEZW11eGVyU3RyZWFtVGVzdCwgU2Vla1RvU3RhcnRfTm9ybWFsKSB7Ci0gIEVudGVyTm9ybWFsUmVhZFN0YXRlKCk7Ci0gIHN0cmVhbV8tPlNlZWtUb1N0YXJ0KCk7Ci0gIG51bV9idWZmZXJzX3JlY2VpdmVkXyA9IDA7Ci0gIFJlYWRBbGxCdWZmZXJzKGtOdW1Db25maWdzLCBrTnVtQnVmZmVyc0luT25lQ29uZmlnKTsKLX0KLQotVEVTVF9GKEZha2VEZW11eGVyU3RyZWFtVGVzdCwgU2Vla1RvU3RhcnRfQmVmb3JlRU9TKSB7Ci0gIEVudGVyQmVmb3JlRU9TU3RhdGUoKTsKLSAgc3RyZWFtXy0+U2Vla1RvU3RhcnQoKTsKLSAgbnVtX2J1ZmZlcnNfcmVjZWl2ZWRfID0gMDsKLSAgUmVhZEFsbEJ1ZmZlcnMoMSwga051bUJ1ZmZlcnNJbk9uZUNvbmZpZyk7Ci19Ci0KLVRFU1RfRihGYWtlRGVtdXhlclN0cmVhbVRlc3QsIFNlZWtUb1N0YXJ0X0FmdGVyRU9TKSB7Ci0gIFRlc3RSZWFkKDMsIDUsIGZhbHNlKTsKLSAgc3RyZWFtXy0+U2Vla1RvU3RhcnQoKTsKLSAgbnVtX2J1ZmZlcnNfcmVjZWl2ZWRfID0gMDsKLSAgUmVhZEFsbEJ1ZmZlcnMoMywgNSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZmFrZV9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZmFrZV9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFlYWVkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2Vfc2luZ2xlX3RocmVhZF90YXNrX3J1bm5lci5jYworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9mYWtlX3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGlja19jbG9jay5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUZha2VTaW5nbGVUaHJlYWRUYXNrUnVubmVyOjpGYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lcigKLSAgICBiYXNlOjpTaW1wbGVUZXN0VGlja0Nsb2NrKiBjbG9jaykKLSAgICA6IGNsb2NrXyhjbG9jayksIGZhaWxfb25fbmV4dF90YXNrXyhmYWxzZSkge30KLQotRmFrZVNpbmdsZVRocmVhZFRhc2tSdW5uZXI6On5GYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lcigpIHt9Ci0KLWJvb2wgRmFrZVNpbmdsZVRocmVhZFRhc2tSdW5uZXI6OlBvc3REZWxheWVkVGFzaygKLSAgICBjb25zdCBiYXNlOjpMb2NhdGlvbiYgZnJvbV9oZXJlLCBjb25zdCBiYXNlOjpDbG9zdXJlJiB0YXNrLAotICAgIGJhc2U6OlRpbWVEZWx0YSBkZWxheSkgewotICBpZiAoZmFpbF9vbl9uZXh0X3Rhc2tfKSB7Ci0gICAgTE9HKEZBVEFMKSA8PCAiSW5maW5pdGUgdGFzayBwb3N0aW5nIGxvb3AgZGV0ZWN0ZWQuICBQb3NzaWJseSBjYXVzZWQgYnkgIgotICAgICAgICAgICAgICAgPDwgZnJvbV9oZXJlLlRvU3RyaW5nKCkgPDwgIiBwb3N0aW5nIGEgdGFzayB3aXRoIGRlbGF5ICIKLSAgICAgICAgICAgICAgIDw8IGRlbGF5LkluTWljcm9zZWNvbmRzKCkgPDwgIiB1c2VjLiI7Ci0gIH0KLQotICBDSEVDS19MRShiYXNlOjpUaW1lRGVsdGEoKSwgZGVsYXkpOwotICBjb25zdCBiYXNlOjpUaW1lVGlja3MgcnVuX3RpbWUgPSBjbG9ja18tPk5vd1RpY2tzKCkgKyBkZWxheTsKLQotICAvLyBJZiB0aGVyZSBhcmUgb25lIG9yIG1vcmUgdGFza3Mgd2l0aCB0aGUgZXhhY3Qgc2FtZSBydW4gdGltZSwgc2NoZWR1bGUgdGhpcwotICAvLyB0YXNrIHRvIG9jY3VyIGFmdGVyIHRoZW0uICBUaGlzIG1pbWljcyB0aGUgRklGTyBvcmRlcmluZyBiZWhhdmlvciB3aGVuCi0gIC8vIHNjaGVkdWxpbmcgZGVsYXllZCB0YXNrcyB0byBiZSBydW4gdmlhIGJhc2U6Ok1lc3NhZ2VMb29wIGluIGEKLSAgLy8gbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24uCi0gIGlmICghdGFza3NfLmVtcHR5KCkpIHsKLSAgICBjb25zdCBhdXRvIGFmdGVyX2l0ID0gdGFza3NfLmxvd2VyX2JvdW5kKAotICAgICAgICBUYXNrS2V5KHJ1bl90aW1lICsgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEpLCAwKSk7Ci0gICAgaWYgKGFmdGVyX2l0ICE9IHRhc2tzXy5iZWdpbigpKSB7Ci0gICAgICBhdXRvIGl0ID0gYWZ0ZXJfaXQ7Ci0gICAgICAtLWl0OwotICAgICAgaWYgKGl0LT5maXJzdC5maXJzdCA9PSBydW5fdGltZSkgewotICAgICAgICB0YXNrc18uaW5zZXJ0KAotICAgICAgICAgICAgYWZ0ZXJfaXQgLyogaGludCAqLywKLSAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKFRhc2tLZXkocnVuX3RpbWUsIGl0LT5maXJzdC5zZWNvbmQgKyAxKSwgdGFzaykpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBObyB0YXNrcyBoYXZlIHRoZSBleGFjdCBzYW1lIHJ1biB0aW1lLCBzbyBqdXN0IGRvIGEgc2ltcGxlIGluc2VydC4KLSAgdGFza3NfLmluc2VydChzdGQ6Om1ha2VfcGFpcihUYXNrS2V5KHJ1bl90aW1lLCAwKSwgdGFzaykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lcjo6UnVuc1Rhc2tzT25DdXJyZW50VGhyZWFkKCkgY29uc3QgewotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lcjo6UnVuVGFza3MoKSB7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgLy8gUnVuIGFsbCB0YXNrcyBlcXVhbCBvciBvbGRlciB0aGFuIGN1cnJlbnQgdGltZS4KLSAgICBjb25zdCBhdXRvIGl0ID0gdGFza3NfLmJlZ2luKCk7Ci0gICAgaWYgKGl0ID09IHRhc2tzXy5lbmQoKSkgcmV0dXJuOyAgLy8gTm8gbW9yZSB0YXNrcy4KLQotICAgIGlmIChjbG9ja18tPk5vd1RpY2tzKCkgPCBpdC0+Zmlyc3QuZmlyc3QpIHJldHVybjsKLQotICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUgdGFzayA9IGl0LT5zZWNvbmQ7Ci0gICAgdGFza3NfLmVyYXNlKGl0KTsKLSAgICB0YXNrLlJ1bigpOwotICB9Ci19Ci0KLXZvaWQgRmFrZVNpbmdsZVRocmVhZFRhc2tSdW5uZXI6OlNsZWVwKGJhc2U6OlRpbWVEZWx0YSB0KSB7Ci0gIENIRUNLX0xFKGJhc2U6OlRpbWVEZWx0YSgpLCB0KTsKLSAgY29uc3QgYmFzZTo6VGltZVRpY2tzIHJ1bl91bnRpbCA9IGNsb2NrXy0+Tm93VGlja3MoKSArIHQ7Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICAvLyBSdW4gdXAgdG8gMTAwMDAwIHRhc2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgdG8gcnVuIGR1cmluZyB0aGUgc2xlZXAKLSAgICAvLyBwZXJpb2QuIDEwMDAwMCBzaG91bGQgYmUgZW5vdWdoIGZvciBldmVyeWJvZHkgKHNlZSBjb21tZW50cyBiZWxvdykuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewotICAgICAgY29uc3QgYXV0byBpdCA9IHRhc2tzXy5iZWdpbigpOwotICAgICAgaWYgKGl0ID09IHRhc2tzXy5lbmQoKSB8fCBydW5fdW50aWwgPCBpdC0+Zmlyc3QuZmlyc3QpIHsKLSAgICAgICAgY2xvY2tfLT5BZHZhbmNlKHJ1bl91bnRpbCAtIGNsb2NrXy0+Tm93VGlja3MoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgY2xvY2tfLT5BZHZhbmNlKGl0LT5maXJzdC5maXJzdCAtIGNsb2NrXy0+Tm93VGlja3MoKSk7Ci0gICAgICBjb25zdCBiYXNlOjpDbG9zdXJlIHRhc2sgPSBpdC0+c2Vjb25kOwotICAgICAgdGFza3NfLmVyYXNlKGl0KTsKLSAgICAgIHRhc2suUnVuKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBwb2ludCBpcyByZWFjaGVkLCB0aGVyZSdzIGxpa2VseSBzb21lIHNvcnQgb2YgY2FzZSB3aGVyZSBhIG5ldwotICAgIC8vIG5vbi1kZWxheWVkIHRhc2sgaXMgYmVpbmcgcG9zdGVkIGV2ZXJ5IHRpbWUgYSB0YXNrIGlzIHBvcHBlZCBhbmQgaW52b2tlZAotICAgIC8vIGZyb20gdGhlIHF1ZXVlLiBJZiB0aGF0IGhhcHBlbnMsIHNldCBmYWlsX29uX25leHRfdGFza18gdG8gdHJ1ZSBhbmQgdGhyb3cKLSAgICAvLyBhbiBlcnJvciB3aGVuIHRoZSBuZXh0IHRhc2sgaXMgcG9zdGVkLCB3aGVyZSB3ZSBtaWdodCBiZSBhYmxlIHRvIGlkZW50aWZ5Ci0gICAgLy8gdGhlIGNhbGxlciBjYXVzaW5nIHRoZSBwcm9ibGVtIHZpYSBsb2dnaW5nLgotICAgIGZhaWxfb25fbmV4dF90YXNrXyA9IHRydWU7Ci0gIH0KLX0KLQotYm9vbCBGYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lcjo6UG9zdE5vbk5lc3RhYmxlRGVsYXllZFRhc2soCi0gICAgY29uc3QgYmFzZTo6TG9jYXRpb24mIGZyb21faGVyZSwgY29uc3QgYmFzZTo6Q2xvc3VyZSYgdGFzaywKLSAgICBiYXNlOjpUaW1lRGVsdGEgZGVsYXkpIHsKLSAgTk9USU1QTEVNRU5URUQoKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zha2Vfc2luZ2xlX3RocmVhZF90YXNrX3J1bm5lci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZmFrZV9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNjI0MTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZmFrZV9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfRkFLRV9TSU5HTEVfVEhSRUFEX1RBU0tfUlVOTkVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0ZBS0VfU0lOR0xFX1RIUkVBRF9UQVNLX1JVTk5FUl9IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9zaW5nbGVfdGhyZWFkX3Rhc2tfcnVubmVyLmgiCi0jaW5jbHVkZSAiYmFzZS90ZXN0L3NpbXBsZV90ZXN0X3RpY2tfY2xvY2suaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBGYWtlU2luZ2xlVGhyZWFkVGFza1J1bm5lciA6IHB1YmxpYyBiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEZha2VTaW5nbGVUaHJlYWRUYXNrUnVubmVyKGJhc2U6OlNpbXBsZVRlc3RUaWNrQ2xvY2sqIGNsb2NrKTsKLQotICB2b2lkIFJ1blRhc2tzKCk7Ci0KLSAgLy8gTm90ZTogQWR2YW5jZXMgfGNsb2NrX3wuCi0gIHZvaWQgU2xlZXAoYmFzZTo6VGltZURlbHRhIHQpOwotCi0gIC8vIGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXIgaW1wbGVtZW50YXRpb24uCi0gIGJvb2wgUG9zdERlbGF5ZWRUYXNrKGNvbnN0IGJhc2U6OkxvY2F0aW9uJiBmcm9tX2hlcmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUmIHRhc2ssIGJhc2U6OlRpbWVEZWx0YSBkZWxheSkgZmluYWw7Ci0KLSAgYm9vbCBSdW5zVGFza3NPbkN1cnJlbnRUaHJlYWQoKSBjb25zdCBmaW5hbDsKLQotICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBub3QgdXNlZCwgYW5kIHdpbGwgcmV0dXJuIGZhbHNlLgotICBib29sIFBvc3ROb25OZXN0YWJsZURlbGF5ZWRUYXNrKGNvbnN0IGJhc2U6OkxvY2F0aW9uJiBmcm9tX2hlcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgdGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgZGVsYXkpIGZpbmFsOwotCi0gcHJvdGVjdGVkOgotICB+RmFrZVNpbmdsZVRocmVhZFRhc2tSdW5uZXIoKSBmaW5hbDsKLQotIHByaXZhdGU6Ci0gIGJhc2U6OlNpbXBsZVRlc3RUaWNrQ2xvY2sqIGNvbnN0IGNsb2NrXzsKLQotICAvLyBBIGNvbXBvdW5kIGtleSBpcyB1c2VkIHRvIGVuc3VyZSBGSUZPIGV4ZWN1dGlvbiBvZiBkZWxheWVkIHRhc2tzIHNjaGVkdWxlZAotICAvLyBmb3IgdGhlIHNhbWUgcG9pbnQtaW4tdGltZS4gIFRoZSBzZWNvbmQgcGFydCBvZiB0aGUga2V5IGlzIHNpbXBseSBhIEZJRk8KLSAgLy8gc2VxdWVuY2UgbnVtYmVyLgotICB1c2luZyBUYXNrS2V5ID0gc3RkOjpwYWlyPGJhc2U6OlRpbWVUaWNrcywgdW5zaWduZWQgaW50PjsKLQotICAvLyBOb3RlOiBUaGUgc3RkOjptYXAgZGF0YSBzdHJ1Y3R1cmUgd2FzIGNob3NlbiBiZWNhdXNlIHRoZSBlbnRpcmUKLSAgLy8gY2FzdF91bml0dGVzdHMgc3VpdGUgcGVyZm9ybWVkIDIwJSBmYXN0ZXIgdGhhbiB3aGVuIHVzaW5nCi0gIC8vIHN0ZDo6cHJpb3JpdHlfcXVldWUuICBodHRwOi8vY3JidWcuY29tLzUzMDg0MgotICBzdGQ6Om1hcDxUYXNrS2V5LCBiYXNlOjpDbG9zdXJlPiB0YXNrc187Ci0KLSAgYm9vbCBmYWlsX29uX25leHRfdGFza187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZha2VTaW5nbGVUaHJlYWRUYXNrUnVubmVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0ZBS0VfU0lOR0xFX1RIUkVBRF9UQVNLX1JVTk5FUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZmVlZGJhY2tfc2lnbmFsX2FjY3VtdWxhdG9yLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9mZWVkYmFja19zaWduYWxfYWNjdW11bGF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlYzY4NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9mZWVkYmFja19zaWduYWxfYWNjdW11bGF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0ZFRURCQUNLX1NJR05BTF9BQ0NVTVVMQVRPUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9GRUVEQkFDS19TSUdOQUxfQUNDVU1VTEFUT1JfSF8KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVXRpbGl0eSBjbGFzcyBmb3IgbWFpbnRhaW5pbmcgYW4gZXhwb25lbnRpYWxseS1kZWNheWluZyBhdmVyYWdlIG9mIGZlZWRiYWNrCi0vLyBzaWduYWwgdmFsdWVzIHdob3NlIHVwZGF0ZXMgb2NjdXIgYXQgdW5kZXRlcm1pbmVkLCBwb3NzaWJseSBpcnJlZ3VsYXIgdGltZQotLy8gaW50ZXJ2YWxzLgotLy8KLS8vIEZlZWRiYWNrIHNpZ25hbHMgY2FuIGJlIG1hZGUgYnkgbXVsdGlwbGUgc291cmNlcy4gIE1lYW5pbmcsIHRoZXJlIGNhbiBiZQotLy8gc2V2ZXJhbCB2YWx1ZXMgcHJvdmlkZWQgZm9yIHRoZSBzYW1lIHRpbWVzdGFtcC4gIEluIHRoaXMgY2FzZSwgdGhlIGdyZWF0ZXN0Ci0vLyB2YWx1ZSBpcyByZXRhaW5lZCBhbmQgdXNlZCB0byByZS1jb21wdXRlIHRoZSBhdmVyYWdlLiAgVGhlcmVmb3JlLCB0aGUgdmFsdWVzCi0vLyBwcm92aWRlZCB0byB0aGlzIGNsYXNzJyBtZXRob2RzIHNob3VsZCBiZSBhcHByb3ByaWF0ZWx5IHRyYW5zbGF0ZWQgd2l0aCB0aGlzCi0vLyBpbiBtaW5kLiAgRm9yIGV4YW1wbGUsIGFuICJmcmFjdGlvbiBhdmFpbGFibGUiIG1ldHJpYyBzaG91bGQgYmUgdHJhbnNsYXRlZAotLy8gaW50byBhICJmcmFjdGlvbiB1dGlsaXplZCIgb25lLgotLy8KLS8vIFVzYWdlIG5vdGU6IFJlc2V0KCkgbXVzdCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8KLS8vIFVwZGF0ZSgpLgotLy8KLS8vIFRoaXMgdGVtcGxhdGUgY2xhc3Mgc3VwcG9ydHMgZGF0YSBwb2ludHMgdGhhdCBhcmUgdGltZXN0YW1wZWQgdXNpbmcgZWl0aGVyCi0vLyB8YmFzZTo6VGltZURlbHRhfCBvciB8YmFzZTo6VGltZVRpY2tzfC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUaW1lVHlwZT4KLWNsYXNzIEZlZWRiYWNrU2lnbmFsQWNjdW11bGF0b3IgewotIHB1YmxpYzoKLSAgLy8gfGhhbGZfbGlmZXwgaXMgdGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgbXVzdCBwYXNzIGJldHdlZW4gdHdvIGRhdGEgcG9pbnRzIHRvCi0gIC8vIG1vdmUgdGhlIGFjY3VtdWxhdGVkIGF2ZXJhZ2UgdmFsdWUgaGFsZndheSBpbi1iZXR3ZWVuLiAgRXhhbXBsZTogSWYKLSAgLy8gfGhhbGZfbGlmZXwgaXMgb25lIHNlY29uZCwgdGhlbiBjYWxsaW5nIFJlc2V0KDAuMCwgdD0wcykgYW5kIHRoZW4KLSAgLy8gVXBkYXRlKDEuMCwgdD0xcykgd2lsbCByZXN1bHQgaW4gYW4gYWNjdW11bGF0ZWQgYXZlcmFnZSB2YWx1ZSBvZiAwLjUuCi0gIGV4cGxpY2l0IEZlZWRiYWNrU2lnbmFsQWNjdW11bGF0b3IoYmFzZTo6VGltZURlbHRhIGhhbGZfbGlmZSkKLSAgICAgIDogaGFsZl9saWZlXyhoYWxmX2xpZmUpLCBhdmVyYWdlXyhOQU4pIHsKLSAgICBEQ0hFQ0soaGFsZl9saWZlXyA+IGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgfQotCi0gIC8vIEVyYXNlIGFsbCBtZW1vcnkgb2YgaGlzdG9yaWNhbCB2YWx1ZXMsIHJlLXN0YXJ0aW5nIHdpdGggdGhlIGdpdmVuCi0gIC8vIHxzdGFydGluZ192YWx1ZXwuCi0gIHZvaWQgUmVzZXQoZG91YmxlIHN0YXJ0aW5nX3ZhbHVlLCBUaW1lVHlwZSB0aW1lc3RhbXApIHsKLSAgICBhdmVyYWdlXyA9IHVwZGF0ZV92YWx1ZV8gPSBwcmlvcl9hdmVyYWdlXyA9IHN0YXJ0aW5nX3ZhbHVlOwotICAgIHJlc2V0X3RpbWVfID0gdXBkYXRlX3RpbWVfID0gcHJpb3JfdXBkYXRlX3RpbWVfID0gdGltZXN0YW1wOwotICB9Ci0KLSAgVGltZVR5cGUgcmVzZXRfdGltZSgpIGNvbnN0IHsgcmV0dXJuIHJlc2V0X3RpbWVfOyB9Ci0KLSAgLy8gQXBwbHkgdGhlIGdpdmVuIHx2YWx1ZXwsIHdoaWNoIHdhcyBvYnNlcnZlZCBhdCB0aGUgZ2l2ZW4gfHRpbWVzdGFtcHwsIHRvCi0gIC8vIHRoZSBhY2N1bXVsYXRlZCBhdmVyYWdlLiAgSWYgdGhlIHRpbWVzdGFtcCBpcyBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLCB0aGUKLSAgLy8gdXBkYXRlIHN1Y2NlZWRzIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIHRydWUuICBPdGhlcndpc2UgdGhlIHVwZGF0ZSBoYXMgbm8KLSAgLy8gZWZmZWN0IGFuZCBmYWxzZSBpcyByZXR1cm5lZC4gIElmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSB1cGRhdGVzIGF0IHRoZSBzYW1lCi0gIC8vIHx0aW1lc3RhbXB8LCBvbmx5IHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3QgdmFsdWUgd2lsbCBiZSBhY2NvdW50ZWQgZm9yCi0gIC8vIChzZWUgY2xhc3MgY29tbWVudHMgZm9yIGVsYWJvcmF0aW9uKS4KLSAgYm9vbCBVcGRhdGUoZG91YmxlIHZhbHVlLCBUaW1lVHlwZSB0aW1lc3RhbXApIHsKLSAgICBEQ0hFQ0soIXN0ZDo6aXNuYW4oYXZlcmFnZV8pKSA8PCAiUmVzZXQoKSBtdXN0IGJlIGNhbGxlZCBvbmNlLiI7Ci0KLSAgICBpZiAodGltZXN0YW1wIDwgdXBkYXRlX3RpbWVfKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7ICAvLyBOb3QgaW4gY2hyb25vbG9naWNhbCBvcmRlci4KLSAgICB9IGVsc2UgaWYgKHRpbWVzdGFtcCA9PSB1cGRhdGVfdGltZV8pIHsKLSAgICAgIGlmICh0aW1lc3RhbXAgPT0gcmVzZXRfdGltZV8pIHsKLSAgICAgICAgLy8gRWRnZSBjYXNlOiBNdWx0aXBsZSB1cGRhdGVzIGF0IHJlc2V0IHRpbWVzdGFtcC4KLSAgICAgICAgYXZlcmFnZV8gPSB1cGRhdGVfdmFsdWVfID0gcHJpb3JfYXZlcmFnZV8gPQotICAgICAgICAgICAgc3RkOjptYXgodmFsdWUsIHVwZGF0ZV92YWx1ZV8pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmICh2YWx1ZSA8PSB1cGRhdGVfdmFsdWVfKSByZXR1cm4gdHJ1ZTsKLSAgICAgIHVwZGF0ZV92YWx1ZV8gPSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcHJpb3JfYXZlcmFnZV8gPSBhdmVyYWdlXzsKLSAgICAgIHByaW9yX3VwZGF0ZV90aW1lXyA9IHVwZGF0ZV90aW1lXzsKLSAgICAgIHVwZGF0ZV92YWx1ZV8gPSB2YWx1ZTsKLSAgICAgIHVwZGF0ZV90aW1lXyA9IHRpbWVzdGFtcDsKLSAgICB9Ci0KLSAgICBjb25zdCBkb3VibGUgZWxhcHNlZF91cyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oCi0gICAgICAgICh1cGRhdGVfdGltZV8gLSBwcmlvcl91cGRhdGVfdGltZV8pLkluTWljcm9zZWNvbmRzKCkpOwotICAgIGNvbnN0IGRvdWJsZSB3ZWlnaHQgPQotICAgICAgICBlbGFwc2VkX3VzIC8gKGVsYXBzZWRfdXMgKyBoYWxmX2xpZmVfLkluTWljcm9zZWNvbmRzKCkpOwotICAgIGF2ZXJhZ2VfID0gd2VpZ2h0ICogdXBkYXRlX3ZhbHVlXyArICgxLjAgLSB3ZWlnaHQpICogcHJpb3JfYXZlcmFnZV87Ci0gICAgRENIRUNLKHN0ZDo6aXNmaW5pdGUoYXZlcmFnZV8pKTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgVGltZVR5cGUgdXBkYXRlX3RpbWUoKSBjb25zdCB7IHJldHVybiB1cGRhdGVfdGltZV87IH0KLQotICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGFjY3VtdWxhdGVkIGF2ZXJhZ2UgdmFsdWUuCi0gIGRvdWJsZSBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gYXZlcmFnZV87IH0KLQotIHByaXZhdGU6Ci0gIC8vIEluIGNvbmp1bmN0aW9uIHdpdGggdGhlIHx1cGRhdGVfdGltZV98IGFuZCB8cHJpb3JfdXBkYXRlX3RpbWVffCwgdGhpcyBpcwotICAvLyB1c2VkIHRvIGNvbXB1dGUgdGhlIHdlaWdodCBvZiB0aGUgY3VycmVudCB1cGRhdGUgdmFsdWUgdmVyc3VzIHRoZSBwcmlvcgotICAvLyBhY2N1bXVsYXRlZCBhdmVyYWdlLgotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgaGFsZl9saWZlXzsKLQotICBUaW1lVHlwZSByZXNldF90aW1lXzsgICAvLyB8dGltZXN0YW1wfCBwYXNzZWQgaW4gbGFzdCBjYWxsIHRvIFJlc2V0KCkuCi0gIGRvdWJsZSBhdmVyYWdlXzsgICAgICAgIC8vIEN1cnJlbnQgYWNjdW11bGF0ZWQgYXZlcmFnZS4KLSAgZG91YmxlIHVwZGF0ZV92YWx1ZV87ICAgLy8gTGF0ZXN0IHx2YWx1ZXwgYWNjZXB0ZWQgYnkgVXBkYXRlKCkuCi0gIFRpbWVUeXBlIHVwZGF0ZV90aW1lXzsgIC8vIExhdGVzdCB8dGltZXN0YW1wfCBhY2NlcHRlZCBieSBVcGRhdGUoKS4KLSAgZG91YmxlIHByaW9yX2F2ZXJhZ2VfOyAgLy8gQWNjdW11bGF0ZWQgYXZlcmFnZSBiZWZvcmUgbGFzdCBjYWxsIHRvIFVwZGF0ZSgpLgotICBUaW1lVHlwZSBwcmlvcl91cGRhdGVfdGltZV87ICAvLyB8dGltZXN0YW1wfCBpbiBwcmlvciBjYWxsIHRvIFVwZGF0ZSgpLgotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfRkVFREJBQ0tfU0lHTkFMX0FDQ1VNVUxBVE9SX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9mZWVkYmFja19zaWduYWxfYWNjdW11bGF0b3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9mZWVkYmFja19zaWduYWxfYWNjdW11bGF0b3JfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZmY0ZGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvZmVlZGJhY2tfc2lnbmFsX2FjY3VtdWxhdG9yX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9mZWVkYmFja19zaWduYWxfYWNjdW11bGF0b3IuaCIKLQotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEZlZWRiYWNrU2lnbmFsQWNjdW11bGF0b3JUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBGZWVkYmFja1NpZ25hbEFjY3VtdWxhdG9yVGVzdCgpCi0gICAgICA6IGhhbGZfbGlmZV8oYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSksCi0gICAgICAgIGFjY18oaGFsZl9saWZlXyksCi0gICAgICAgIHRfKGJhc2U6OlRpbWVUaWNrcygpICsgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMjApKSB7Ci0gICAgYWNjXy5SZXNldCgwLjAsIHRfKTsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgaGFsZl9saWZlXzsKLSAgRmVlZGJhY2tTaWduYWxBY2N1bXVsYXRvcjxiYXNlOjpUaW1lVGlja3M+IGFjY187Ci0gIGJhc2U6OlRpbWVUaWNrcyB0XzsKLX07Ci0KLVRFU1RfRihGZWVkYmFja1NpZ25hbEFjY3VtdWxhdG9yVGVzdCwgSGFzQ29ycmVjdFN0YXJ0aW5nVmFsdWVBZnRlclJlc2V0KSB7Ci0gIEFTU0VSVF9FUSgwLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnJlc2V0X3RpbWUoKSk7Ci0gIEFTU0VSVF9FUSh0XywgYWNjXy51cGRhdGVfdGltZSgpKTsKLQotICBhY2NfLlJlc2V0KDEuMCwgdF8pOwotICBBU1NFUlRfRVEoMS4wLCBhY2NfLmN1cnJlbnQoKSk7Ci0gIEFTU0VSVF9FUSh0XywgYWNjXy5yZXNldF90aW1lKCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0KLSAgdF8gKz0gaGFsZl9saWZlXzsKLSAgYWNjXy5SZXNldCgyLjAsIHRfKTsKLSAgQVNTRVJUX0VRKDIuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18ucmVzZXRfdGltZSgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotfQotCi1URVNUX0YoRmVlZGJhY2tTaWduYWxBY2N1bXVsYXRvclRlc3QsIERvZXNOb3RVcGRhdGVJZkJlZm9yZVJlc2V0VGltZSkgewotICBhY2NfLlJlc2V0KDAuMCwgdF8pOwotICBBU1NFUlRfRVEoMC4wLCBhY2NfLmN1cnJlbnQoKSk7Ci0gIEFTU0VSVF9FUSh0XywgYWNjXy51cGRhdGVfdGltZSgpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lVGlja3Mgb25lX3VzZWNfYmVmb3JlID0KLSAgICAgIHRfIC0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEpOwotICBBU1NFUlRfRkFMU0UoYWNjXy5VcGRhdGUoMS4wLCBvbmVfdXNlY19iZWZvcmUpKTsKLSAgQVNTRVJUX0VRKDAuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0KLSAgY29uc3QgYmFzZTo6VGltZVRpY2tzIG9uZV91c2VjX2FmdGVyID0KLSAgICAgIHRfICsgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEpOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIG9uZV91c2VjX2FmdGVyKSk7Ci0gIEFTU0VSVF9MVCgwLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKG9uZV91c2VjX2FmdGVyLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotfQotCi1URVNUX0YoRmVlZGJhY2tTaWduYWxBY2N1bXVsYXRvclRlc3QsIFRha2VzTWF4T2ZVcGRhdGVzQXRSZXNldFRpbWUpIHsKLSAgYWNjXy5SZXNldCgwLjAsIHRfKTsKLSAgQVNTRVJUX0VRKDAuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0KLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMS4wLCB0XykpOwotICBBU1NFUlRfRVEoMS4wLCBhY2NfLmN1cnJlbnQoKSk7Ci0gIEFTU0VSVF9FUSh0XywgYWNjXy51cGRhdGVfdGltZSgpKTsKLQotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgyLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgyLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotCi0gIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDEuMCwgdF8pKTsKLSAgQVNTRVJUX0VRKDIuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci19Ci0KLVRFU1RfRihGZWVkYmFja1NpZ25hbEFjY3VtdWxhdG9yVGVzdCwgQXBwbGllc01heE9mVXBkYXRlc1dpdGhTYW1lVGltZXN0YW1wKSB7Ci0gIGFjY18uUmVzZXQoMC4wLCB0Xyk7Ci0gIEFTU0VSVF9FUSgwLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAxICogaGFsZl9saWZlXzsKLQotICAvLyBVcGRhdGUgd2l0aCBhbiBpZGVudGljYWwgdmFsdWUgYXQgdGhlIHNhbWUgdGltZXN0YW1wLgotICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDEuMCwgdF8pKTsKLSAgICBBU1NFUlRfRVEoMC41LCBhY2NfLmN1cnJlbnQoKSk7Ci0gICAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB9Ci0KLSAgLy8gTm93IGNvbnRpbnVlIHVwZGF0aW5nIHdpdGggZGlmZmVyZW50IHZhbHVlcyBhdCB0aGUgc2FtZSB0aW1lc3RhbXAuCi0gIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDIuMCwgdF8pKTsKLSAgQVNTRVJUX0VRKDEuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDMuMCwgdF8pKTsKLSAgQVNTRVJUX0VRKDEuNSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDEuMCwgdF8pKTsKLSAgQVNTRVJUX0VRKDEuNSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci19Ci0KLVRFU1RfRihGZWVkYmFja1NpZ25hbEFjY3VtdWxhdG9yVGVzdCwgUHJvdmlkZXNFeHBlY3RlZEhvbGRSZXNwb25zZSkgewotICAvLyBTdGVwIG9uZSBoYWxmLWxpZmUgaW50ZXJ2YWwgcGVyIHVwZGF0ZS4KLSAgYWNjXy5SZXNldCgwLjAsIHRfKTsKLSAgQVNTRVJUX0VRKDAuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDEgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgwLjUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAxICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMS4wLCB0XykpOwotICBBU1NFUlRfRVEoMC43NSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDEgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgwLjg3NSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDEgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgwLjkzNzUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotCi0gIC8vIFN0ZXAgdHdvIGhhbGYtbGlmZSBpbnRlcnZhbHMgcGVyIHVwZGF0ZS4KLSAgYWNjXy5SZXNldCgwLjAsIHRfKTsKLSAgQVNTRVJUX0VRKDAuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDIgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9ORUFSKDAuNjY2NjY2NjY3LCBhY2NfLmN1cnJlbnQoKSwgMC4wMDAwMDAwMDEpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDIgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9ORUFSKDAuODg4ODg4ODg5LCBhY2NfLmN1cnJlbnQoKSwgMC4wMDAwMDAwMDEpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDIgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9ORUFSKDAuOTYyOTYyOTYzLCBhY2NfLmN1cnJlbnQoKSwgMC4wMDAwMDAwMDEpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDIgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9ORUFSKDAuOTg3NjU0MzIxLCBhY2NfLmN1cnJlbnQoKSwgMC4wMDAwMDAwMDEpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0KLSAgLy8gU3RlcCB0aHJlZSBoYWxmLWxpZmUgaW50ZXJ2YWxzIHBlciB1cGRhdGUuCi0gIGFjY18uUmVzZXQoMC4wLCB0Xyk7Ci0gIEFTU0VSVF9FUSgwLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAzICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMS4wLCB0XykpOwotICBBU1NFUlRfRVEoMC43NSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDMgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgxLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgwLjkzNzUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAzICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMS4wLCB0XykpOwotICBBU1NFUlRfRVEoMC45ODQzNzUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAzICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMS4wLCB0XykpOwotICBBU1NFUlRfRVEoMC45OTYwOTM3NSwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci19Ci0KLVRFU1RfRihGZWVkYmFja1NpZ25hbEFjY3VtdWxhdG9yVGVzdCwgSWdub3Jlc1VwZGF0ZXNUaGF0QXJlT3V0T2ZPcmRlcikgewotICAvLyBGaXJzdCwgZ28gZm9yd2FyZCBzZXZlcmFsIHN0ZXBzLCBpbiBvcmRlci4KLSAgYWNjXy5SZXNldCgwLjAsIHRfKTsKLSAgQVNTRVJUX0VRKDAuMCwgYWNjXy5jdXJyZW50KCkpOwotICBBU1NFUlRfRVEodF8sIGFjY18udXBkYXRlX3RpbWUoKSk7Ci0gIHRfICs9IDEgKiBoYWxmX2xpZmVfOwotICBBU1NFUlRfVFJVRShhY2NfLlVwZGF0ZSgyLjAsIHRfKSk7Ci0gIEFTU0VSVF9FUSgxLjAsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAxICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMi4wLCB0XykpOwotICBBU1NFUlRfRVEoMS41LCBhY2NfLmN1cnJlbnQoKSk7Ci0gIEFTU0VSVF9FUSh0XywgYWNjXy51cGRhdGVfdGltZSgpKTsKLSAgdF8gKz0gMSAqIGhhbGZfbGlmZV87Ci0gIEFTU0VSVF9UUlVFKGFjY18uVXBkYXRlKDIuMCwgdF8pKTsKLSAgQVNTRVJUX0VRKDEuNzUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICB0XyArPSAxICogaGFsZl9saWZlXzsKLSAgQVNTRVJUX1RSVUUoYWNjXy5VcGRhdGUoMi4wLCB0XykpOwotICBBU1NFUlRfRVEoMS44NzUsIGFjY18uY3VycmVudCgpKTsKLSAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotCi0gIC8vIEdvIGJhY2sgMSBzdGVwcywgdGhlbiAxLjUsIHRoZW4gMiwgdGhlbiAyLjUsIGV0Yy4gYW5kIGV4cGVjdCB0aGUgdXBkYXRlIHRvCi0gIC8vIGZhaWwgZWFjaCB0aW1lLgotICBiYXNlOjpUaW1lVGlja3MgZWFybGllciA9IHRfIC0gMSAqIGhhbGZfbGlmZV87Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7Ci0gICAgQVNTRVJUX0ZBTFNFKGFjY18uVXBkYXRlKDk5OS4wLCBlYXJsaWVyKSk7Ci0gICAgQVNTRVJUX0VRKDEuODc1LCBhY2NfLmN1cnJlbnQoKSk7Ci0gICAgQVNTRVJUX0VRKHRfLCBhY2NfLnVwZGF0ZV90aW1lKCkpOwotICAgIGVhcmxpZXIgLT0gaGFsZl9saWZlXyAvIDI7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9mb3JtYXRfc3VwcG9ydF9xdWVyeV9tZXRyaWNzLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQzNjIxCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5jYwpAQCAtMCwwICsxLDExMyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2UgbWVkaWEgeworCisjaWYgIWRlZmluZWQoQ09CQUxUX0JVSUxEX1RZUEVfR09MRCkKKworLy8gc3RhdGljCitTYlRpbWVNb25vdG9uaWMgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6Y2FjaGVkX3F1ZXJ5X2R1cmF0aW9uc19bXSA9IHswfTsKK2NoYXIgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6bWF4X3F1ZXJ5X2Rlc2NyaXB0aW9uX1tdID0ge307CitTYlRpbWVNb25vdG9uaWMgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6bWF4X3F1ZXJ5X2R1cmF0aW9uXyA9IDA7CitTYlRpbWVNb25vdG9uaWMgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6dG90YWxfcXVlcnlfZHVyYXRpb25fID0gMDsKK2ludCBGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzOjp0b3RhbF9udW1fcXVlcmllc18gPSAwOworCitGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzOjpGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCkgeworICBxdWVyeV9zdGFydF90aW1lXyA9IFNiVGltZUdldE1vbm90b25pY05vdygpOworfQorCisKK3ZvaWQgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6UmVjb3JkUXVlcnkoY29uc3QgY2hhciogcXVlcnlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFTdXBwb3J0VHlwZSBzdXBwb3J0X3R5cGUpIHsKKyAgYXV0byBnZXRfc3VwcG9ydF90eXBlX3N0ciA9IFtdKFNiTWVkaWFTdXBwb3J0VHlwZSBzdXBwb3J0X3R5cGUpIHsKKyAgICBzd2l0Y2ggKHN1cHBvcnRfdHlwZSkgeworICAgICAgY2FzZSBrU2JNZWRpYVN1cHBvcnRUeXBlTm90U3VwcG9ydGVkOgorICAgICAgICByZXR1cm4gIiAtPiBub3Qgc3VwcG9ydGVkL2ZhbHNlIjsKKyAgICAgIGNhc2Uga1NiTWVkaWFTdXBwb3J0VHlwZU1heWJlOgorICAgICAgICByZXR1cm4gIiAtPiBtYXliZS90cnVlIjsKKyAgICAgIGNhc2Uga1NiTWVkaWFTdXBwb3J0VHlwZVByb2JhYmx5OgorICAgICAgICByZXR1cm4gIiAtPiBwcm9iYWJseS90cnVlIjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIE5PVFJFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgfTsKKworICBTYlRpbWVNb25vdG9uaWMgZHVyYXRpb24gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKSAtIHF1ZXJ5X3N0YXJ0X3RpbWVfOworICB0b3RhbF9xdWVyeV9kdXJhdGlvbl8gKz0gZHVyYXRpb247CisKKyAgc3RkOjpzdHJpbmcgcXVlcnlfZGVzY3JpcHRpb24gPSBzdGFyYm9hcmQ6OkZvcm1hdFN0cmluZygKKyAgICAgICIlcyglcyVzJXMsICUiIFBSSWQ2NCAiIM68cyIsIHF1ZXJ5X25hbWUsIG1pbWVfdHlwZS5jX3N0cigpLAorICAgICAgKGtleV9zeXN0ZW0uZW1wdHkoKSA/ICIpIiA6ICIsICIgKyBrZXlfc3lzdGVtICsgIikiKS5jX3N0cigpLAorICAgICAgZ2V0X3N1cHBvcnRfdHlwZV9zdHIoc3VwcG9ydF90eXBlKSwgZHVyYXRpb24pOworICBMT0coSU5GTykgPDwgcXVlcnlfZGVzY3JpcHRpb247CisKKyAgaWYgKHRvdGFsX251bV9xdWVyaWVzXyA8IFNCX0FSUkFZX1NJWkVfSU5UKGNhY2hlZF9xdWVyeV9kdXJhdGlvbnNfKSkgeworICAgIGNhY2hlZF9xdWVyeV9kdXJhdGlvbnNfW3RvdGFsX251bV9xdWVyaWVzX10gPSBkdXJhdGlvbjsKKyAgfQorICArK3RvdGFsX251bV9xdWVyaWVzXzsKKyAgaWYgKGR1cmF0aW9uID4gbWF4X3F1ZXJ5X2R1cmF0aW9uXykgeworICAgIG1heF9xdWVyeV9kdXJhdGlvbl8gPSBkdXJhdGlvbjsKKyAgICBiYXNlOjpzdHJsY3B5KG1heF9xdWVyeV9kZXNjcmlwdGlvbl8sIHF1ZXJ5X2Rlc2NyaXB0aW9uLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICBTQl9BUlJBWV9TSVpFX0lOVChtYXhfcXVlcnlfZGVzY3JpcHRpb25fKSk7CisgIH0KK30KKworLy8gc3RhdGljCit2b2lkIEZvcm1hdFN1cHBvcnRRdWVyeU1ldHJpY3M6OlByaW50QW5kUmVzZXRGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCkgeworICBpZiAodG90YWxfbnVtX3F1ZXJpZXNfID09IDApIHsKKyAgICBMT0coSU5GTykgPDwgIkZvcm1hdCBzdXBwb3J0IHF1ZXJ5IG1ldHJpY3M6XG5cdE51bWJlciBvZiBxdWVyaWVzOiAwIjsKKyAgICByZXR1cm47CisgIH0KKworICBhdXRvIGdldF9tZWRpYW4gPSBbXSgpIHsKKyAgICBpbnQgbnVtX2VsZW1lbnRzID0gc3RkOjptaW4odG90YWxfbnVtX3F1ZXJpZXNfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQl9BUlJBWV9TSVpFX0lOVChjYWNoZWRfcXVlcnlfZHVyYXRpb25zXykpOworICAgIGludCBtaWRkbGVfaW5kZXggPSBudW1fZWxlbWVudHMgLyAyOworICAgIHN0ZDo6bnRoX2VsZW1lbnQoY2FjaGVkX3F1ZXJ5X2R1cmF0aW9uc18sCisgICAgICAgICAgICAgICAgICAgICBjYWNoZWRfcXVlcnlfZHVyYXRpb25zXyArIG1pZGRsZV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIGNhY2hlZF9xdWVyeV9kdXJhdGlvbnNfICsgbnVtX2VsZW1lbnRzKTsKKyAgICBhdXRvIG1pZGRsZV9lbGVtZW50ID0gY2FjaGVkX3F1ZXJ5X2R1cmF0aW9uc19bbWlkZGxlX2luZGV4XTsKKyAgICByZXR1cm4gbWlkZGxlX2VsZW1lbnQ7CisgIH07CisKKyAgTE9HKElORk8pIDw8ICJGb3JtYXQgc3VwcG9ydCBxdWVyeSBtZXRyaWNzOlxuXHROdW1iZXIgb2YgcXVlcmllczogIgorICAgICAgICAgICAgPDwgdG90YWxfbnVtX3F1ZXJpZXNfCisgICAgICAgICAgICA8PCAiXG5cdFRvdGFsIHF1ZXJ5IHRpbWU6ICIgPDwgdG90YWxfcXVlcnlfZHVyYXRpb25fCisgICAgICAgICAgICA8PCAiIM68c1xuXHRBdmVyYWdlIHF1ZXJ5IHRpbWU6ICIKKyAgICAgICAgICAgIDw8IHRvdGFsX3F1ZXJ5X2R1cmF0aW9uXyAvIHRvdGFsX251bV9xdWVyaWVzXworICAgICAgICAgICAgPDwgIiDOvHNcblx0TWVkaWFuIHF1ZXJ5IHRpbWU6IH4iIDw8IGdldF9tZWRpYW4oKQorICAgICAgICAgICAgPDwgIiDOvHNcblx0TG9uZ2VzdCBxdWVyeTogIiA8PCBtYXhfcXVlcnlfZGVzY3JpcHRpb25fOworCisgIG1heF9xdWVyeV9kZXNjcmlwdGlvbl9bMF0gPSAwOworICBtYXhfcXVlcnlfZHVyYXRpb25fID0gMDsKKyAgdG90YWxfcXVlcnlfZHVyYXRpb25fID0gMDsKKyAgdG90YWxfbnVtX3F1ZXJpZXNfID0gMDsKK30KKworI2VuZGlmICAvLyAhZGVmaW5lZChDT0JBTFRfQlVJTERfVFlQRV9HT0xEKQorCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2Zvcm1hdF9zdXBwb3J0X3F1ZXJ5X21ldHJpY3MuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2Zvcm1hdF9zdXBwb3J0X3F1ZXJ5X21ldHJpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc4ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9GT1JNQVRfU1VQUE9SVF9RVUVSWV9NRVRSSUNTX0hfCisjZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0ZPUk1BVF9TVVBQT1JUX1FVRVJZX01FVFJJQ1NfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90aW1lLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIG1lZGlhIHsKKworI2lmIGRlZmluZWQoQ09CQUxUX0JVSUxEX1RZUEVfR09MRCkKKworY2xhc3MgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljcyB7CisgcHVibGljOgorICBGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCkgPSBkZWZhdWx0OworICB+Rm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljcygpID0gZGVmYXVsdDsKKyAgdm9pZCBSZWNvcmRRdWVyeShjb25zdCBjaGFyKiBxdWVyeV9uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLAorICAgICAgICAgICAgICAgICAgIFNiTWVkaWFTdXBwb3J0VHlwZSBzdXBwb3J0X3R5cGUpIHt9CisgIHN0YXRpYyB2b2lkIFByaW50QW5kUmVzZXRGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCkge30KK307CisKKyNlbHNlICAvLyBkZWZpbmVkKENPQkFMVF9CVUlMRF9UWVBFX0dPTEQpCisKK2NsYXNzIEZvcm1hdFN1cHBvcnRRdWVyeU1ldHJpY3MgeworIHB1YmxpYzoKKyAgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljcygpOworICB+Rm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljcygpIHt9CisKKyAgdm9pZCBSZWNvcmRRdWVyeShjb25zdCBjaGFyKiBxdWVyeV9uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLAorICAgICAgICAgICAgICAgICAgIFNiTWVkaWFTdXBwb3J0VHlwZSBzdXBwb3J0X3R5cGUpOworCisgIHN0YXRpYyB2b2lkIFByaW50QW5kUmVzZXRGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCk7CisKKyBwcml2YXRlOgorICBzdGF0aWMgY29uc3RleHByIGludCBrTWF4Q2FjaGVkUXVlcnlEdXJhdGlvbnMgPSAxNTA7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtNYXhRdWVyeURlc2NyaXB0aW9uTGVuZ3RoID0gMzUwOworCisgIHN0YXRpYyBTYlRpbWVNb25vdG9uaWMgY2FjaGVkX3F1ZXJ5X2R1cmF0aW9uc19ba01heENhY2hlZFF1ZXJ5RHVyYXRpb25zXTsKKyAgc3RhdGljIGNoYXIgbWF4X3F1ZXJ5X2Rlc2NyaXB0aW9uX1trTWF4UXVlcnlEZXNjcmlwdGlvbkxlbmd0aF07CisgIHN0YXRpYyBTYlRpbWVNb25vdG9uaWMgbWF4X3F1ZXJ5X2R1cmF0aW9uXzsKKyAgc3RhdGljIFNiVGltZU1vbm90b25pYyB0b3RhbF9xdWVyeV9kdXJhdGlvbl87CisgIHN0YXRpYyBpbnQgdG90YWxfbnVtX3F1ZXJpZXNfOworCisgIFNiVGltZU1vbm90b25pYyBxdWVyeV9zdGFydF90aW1lXyA9IDA7Cit9OworCisjZW5kaWYgIC8vIGRlZmluZWQoQ09CQUxUX0JVSUxEX1RZUEVfR09MRCkKKworfSAgLy8gbmFtZXNwYWNlIG1lZGlhCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfRk9STUFUX1NVUFBPUlRfUVVFUllfTUVUUklDU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvZ21vY2tfY2FsbGJhY2tfc3VwcG9ydC5oIGIvY29iYWx0L21lZGlhL2Jhc2UvZ21vY2tfY2FsbGJhY2tfc3VwcG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTJhYjVjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2dtb2NrX2NhbGxiYWNrX3N1cHBvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfR01PQ0tfQ0FMTEJBQ0tfU1VQUE9SVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9HTU9DS19DQUxMQkFDS19TVVBQT1JUX0hfCi0KLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBNYXRjaGVycyBmb3IgYmFzZTo6Q2FsbGJhY2sgYW5kIGJhc2U6OkNsb3N1cmUuCi0KLU1BVENIRVIoSXNOdWxsQ2FsbGJhY2ssICJhIG51bGwgY2FsbGJhY2siKSB7IHJldHVybiAoYXJnLmlzX251bGwoKSk7IH0KLQotTUFUQ0hFUihJc05vdE51bGxDYWxsYmFjaywgImEgbm9uLW51bGwgY2FsbGJhY2siKSB7IHJldHVybiAoIWFyZy5pc19udWxsKCkpOyB9Ci0KLS8vIFRoZSBSdW5DbG9zdXJlPE4+KCkgYWN0aW9uIGludm9rZXMgUnVuKCkgbWV0aG9kIG9uIHRoZSBOLXRoICgwLWJhc2VkKQotLy8gYXJndW1lbnQgb2YgdGhlIG1vY2sgZnVuY3Rpb24uCi0KLUFDVElPTl9URU1QTEFURShSdW5DbG9zdXJlLCBIQVNfMV9URU1QTEFURV9QQVJBTVMoaW50LCBrKSwKLSAgICAgICAgICAgICAgICBBTkRfMF9WQUxVRV9QQVJBTVMoKSkgewotICA6OnN0ZDo6dHIxOjpnZXQ8az4oYXJncykuUnVuKCk7Ci19Ci0KLUFDVElPTl9QKFJ1bkNsb3N1cmUsIGNsb3N1cmUpIHsgY2xvc3VyZS5SdW4oKTsgfQotCi0vLyBWYXJpb3VzIG92ZXJsb2FkcyBmb3IgUnVuQ2FsbGJhY2s8Tj4oKS4KLS8vCi0vLyBUaGUgUnVuQ2FsbGJhY2s8Tj4ocDEsIHAyLCAuLi4sIHBfaykgYWN0aW9uIGludm9rZXMgUnVuKCkgbWV0aG9kIG9uIHRoZSBOLXRoCi0vLyAoMC1iYXNlZCkgYXJndW1lbnQgb2YgdGhlIG1vY2sgZnVuY3Rpb24sIHdpdGggYXJndW1lbnRzIHAxLCBwMiwgLi4uLCBwX2suCi0vLwotLy8gTm90ZXM6Ci0vLwotLy8gICAxLiBUaGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnkgdmFsdWUgYnkgZGVmYXVsdC4gIElmIHlvdSBuZWVkIHRvCi0vLyAgIHBhc3MgYW4gYXJndW1lbnQgYnkgcmVmZXJlbmNlLCB3cmFwIGl0IGluc2lkZSBCeVJlZigpLiAgRm9yIGV4YW1wbGUsCi0vLwotLy8gICAgIFJ1bkNhbGxiYWNrPDE+KDUsIHN0cmluZygiSGVsbG8iKSwgQnlSZWYoZm9vKSkKLS8vCi0vLyAgIHBhc3NlcyA1IGFuZCBzdHJpbmcoIkhlbGxvIikgYnkgdmFsdWUsIGFuZCBwYXNzZXMgZm9vIGJ5IHJlZmVyZW5jZS4KLS8vCi0vLyAgIDIuIElmIHRoZSBjYWxsYmFjayB0YWtlcyBhbiBhcmd1bWVudCBieSByZWZlcmVuY2UgYnV0IEJ5UmVmKCkgaXMKLS8vICAgbm90IHVzZWQsIGl0IHdpbGwgcmVjZWl2ZSB0aGUgcmVmZXJlbmNlIHRvIGEgY29weSBvZiB0aGUgdmFsdWUsCi0vLyAgIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLiAgRm9yIGV4YW1wbGUsIHdoZW4gdGhlIDAtdGgKLS8vICAgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrIHRha2VzIGEgY29uc3Qgc3RyaW5nJiwgdGhlIGFjdGlvbgotLy8KLS8vICAgICBSdW5DYWxsYmFjazwwPihzdHJpbmcoIkhlbGxvIikpCi0vLwotLy8gICBtYWtlcyBhIGNvcHkgb2YgdGhlIHRlbXBvcmFyeSBzdHJpbmcoIkhlbGxvIikgb2JqZWN0IGFuZCBwYXNzZXMgYQotLy8gICByZWZlcmVuY2Ugb2YgdGhlIGNvcHksIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHRlbXBvcmFyeSBvYmplY3QsCi0vLyAgIHRvIHRoZSBjYWxsYmFjay4gIFRoaXMgbWFrZXMgaXQgZWFzeSBmb3IgYSB1c2VyIHRvIGRlZmluZSBhbgotLy8gICBSdW5DYWxsYmFjayBhY3Rpb24gZnJvbSB0ZW1wb3JhcnkgdmFsdWVzIGFuZCBoYXZlIGl0IHBlcmZvcm1lZCBsYXRlci4KLQotQUNUSU9OX1RFTVBMQVRFKFJ1bkNhbGxiYWNrLCBIQVNfMV9URU1QTEFURV9QQVJBTVMoaW50LCBrKSwKLSAgICAgICAgICAgICAgICBBTkRfMF9WQUxVRV9QQVJBTVMoKSkgewotICByZXR1cm4gOjpzdGQ6OnRyMTo6Z2V0PGs+KGFyZ3MpLlJ1bigpOwotfQotCi1BQ1RJT05fVEVNUExBVEUoUnVuQ2FsbGJhY2ssIEhBU18xX1RFTVBMQVRFX1BBUkFNUyhpbnQsIGspLAotICAgICAgICAgICAgICAgIEFORF8xX1ZBTFVFX1BBUkFNUyhwMCkpIHsKLSAgcmV0dXJuIDo6c3RkOjp0cjE6OmdldDxrPihhcmdzKS5SdW4ocDApOwotfQotCi1BQ1RJT05fVEVNUExBVEUoUnVuQ2FsbGJhY2ssIEhBU18xX1RFTVBMQVRFX1BBUkFNUyhpbnQsIGspLAotICAgICAgICAgICAgICAgIEFORF8yX1ZBTFVFX1BBUkFNUyhwMCwgcDEpKSB7Ci0gIHJldHVybiA6OnN0ZDo6dHIxOjpnZXQ8az4oYXJncykuUnVuKHAwLCBwMSk7Ci19Ci0KLUFDVElPTl9URU1QTEFURShSdW5DYWxsYmFjaywgSEFTXzFfVEVNUExBVEVfUEFSQU1TKGludCwgayksCi0gICAgICAgICAgICAgICAgQU5EXzNfVkFMVUVfUEFSQU1TKHAwLCBwMSwgcDIpKSB7Ci0gIHJldHVybiA6OnN0ZDo6dHIxOjpnZXQ8az4oYXJncykuUnVuKHAwLCBwMSwgcDIpOwotfQotCi1BQ1RJT05fVEVNUExBVEUoUnVuQ2FsbGJhY2ssIEhBU18xX1RFTVBMQVRFX1BBUkFNUyhpbnQsIGspLAotICAgICAgICAgICAgICAgIEFORF80X1ZBTFVFX1BBUkFNUyhwMCwgcDEsIHAyLCBwMykpIHsKLSAgcmV0dXJuIDo6c3RkOjp0cjE6OmdldDxrPihhcmdzKS5SdW4ocDAsIHAxLCBwMiwgcDMpOwotfQotCi1BQ1RJT05fVEVNUExBVEUoUnVuQ2FsbGJhY2ssIEhBU18xX1RFTVBMQVRFX1BBUkFNUyhpbnQsIGspLAotICAgICAgICAgICAgICAgIEFORF81X1ZBTFVFX1BBUkFNUyhwMCwgcDEsIHAyLCBwMywgcDQpKSB7Ci0gIHJldHVybiA6OnN0ZDo6dHIxOjpnZXQ8az4oYXJncykuUnVuKHAwLCBwMSwgcDIsIHAzLCBwNCk7Ci19Ci0KLUFDVElPTl9URU1QTEFURShSdW5DYWxsYmFjaywgSEFTXzFfVEVNUExBVEVfUEFSQU1TKGludCwgayksCi0gICAgICAgICAgICAgICAgQU5EXzZfVkFMVUVfUEFSQU1TKHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpKSB7Ci0gIHJldHVybiA6OnN0ZDo6dHIxOjpnZXQ8az4oYXJncykuUnVuKHAwLCBwMSwgcDIsIHAzLCBwNCwgcDUpOwotfQotCi1BQ1RJT05fVEVNUExBVEUoUnVuQ2FsbGJhY2ssIEhBU18xX1RFTVBMQVRFX1BBUkFNUyhpbnQsIGspLAotICAgICAgICAgICAgICAgIEFORF83X1ZBTFVFX1BBUkFNUyhwMCwgcDEsIHAyLCBwMywgcDQsIHA1LCBwNikpIHsKLSAgcmV0dXJuIDo6c3RkOjp0cjE6OmdldDxrPihhcmdzKS5SdW4ocDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9HTU9DS19DQUxMQkFDS19TVVBQT1JUX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9nbW9ja19jYWxsYmFja19zdXBwb3J0X3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvZ21vY2tfY2FsbGJhY2tfc3VwcG9ydF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmMjA2YS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9nbW9ja19jYWxsYmFja19zdXBwb3J0X3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2dtb2NrX2NhbGxiYWNrX3N1cHBvcnQuaCIKLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgdGVzdGluZzo6QnlSZWY7Ci11c2luZyB0ZXN0aW5nOjpNb2NrRnVuY3Rpb247Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IGJvb2wmIHNyYywgYm9vbCogZHN0KT4gVGVzdENhbGxiYWNrOwotCi12b2lkIFNldEJvb2woY29uc3QgYm9vbCYgc3JjLCBib29sKiBkc3QpIHsgKmRzdCA9IHNyYzsgfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgSXNOdWxsQ2FsbGJhY2spIHsKLSAgTW9ja0Z1bmN0aW9uPHZvaWQoY29uc3QgVGVzdENhbGxiYWNrJik+IGNoZWNrOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbChJc051bGxDYWxsYmFjaygpKSk7Ci0gIGNoZWNrLkNhbGwoVGVzdENhbGxiYWNrKCkpOwotfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgSXNOb3ROdWxsQ2FsbGJhY2spIHsKLSAgTW9ja0Z1bmN0aW9uPHZvaWQoY29uc3QgVGVzdENhbGxiYWNrJik+IGNoZWNrOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbChJc05vdE51bGxDYWxsYmFjaygpKSk7Ci0gIGNoZWNrLkNhbGwoYmFzZTo6QmluZCgmU2V0Qm9vbCkpOwotfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgUnVuQ2xvc3VyZSkgewotICBNb2NrRnVuY3Rpb248dm9pZChjb25zdCBiYXNlOjpDbG9zdXJlJik+IGNoZWNrOwotICBib29sIGRzdCA9IGZhbHNlOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbChJc05vdE51bGxDYWxsYmFjaygpKSkuV2lsbE9uY2UoUnVuQ2xvc3VyZTwwPigpKTsKLSAgY2hlY2suQ2FsbChiYXNlOjpCaW5kKCZTZXRCb29sLCB0cnVlLCAmZHN0KSk7Ci0gIEVYUEVDVF9UUlVFKGRzdCk7Ci19Ci0KLVRFU1QoR21vY2tDYWxsYmFja1N1cHBvcnRUZXN0LCBSdW5DYWxsYmFjazApIHsKLSAgTW9ja0Z1bmN0aW9uPHZvaWQoY29uc3QgVGVzdENhbGxiYWNrJik+IGNoZWNrOwotICBib29sIGRzdCA9IGZhbHNlOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbChJc05vdE51bGxDYWxsYmFjaygpKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwwPih0cnVlLCAmZHN0KSk7Ci0gIGNoZWNrLkNhbGwoYmFzZTo6QmluZCgmU2V0Qm9vbCkpOwotICBFWFBFQ1RfVFJVRShkc3QpOwotfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgUnVuQ2FsbGJhY2sxKSB7Ci0gIE1vY2tGdW5jdGlvbjx2b2lkKGludCwgY29uc3QgVGVzdENhbGxiYWNrJik+IGNoZWNrOwotICBib29sIGRzdCA9IGZhbHNlOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbCgwLCBJc05vdE51bGxDYWxsYmFjaygpKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwxPih0cnVlLCAmZHN0KSk7Ci0gIGNoZWNrLkNhbGwoMCwgYmFzZTo6QmluZCgmU2V0Qm9vbCkpOwotICBFWFBFQ1RfVFJVRShkc3QpOwotfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgUnVuQ2FsbGJhY2tQYXNzQnlSZWYpIHsKLSAgTW9ja0Z1bmN0aW9uPHZvaWQoY29uc3QgVGVzdENhbGxiYWNrJik+IGNoZWNrOwotICBib29sIGRzdCA9IGZhbHNlOwotICBib29sIHNyYyA9IGZhbHNlOwotICBFWFBFQ1RfQ0FMTChjaGVjaywgQ2FsbChJc05vdE51bGxDYWxsYmFjaygpKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwwPihCeVJlZihzcmMpLCAmZHN0KSk7Ci0gIHNyYyA9IHRydWU7Ci0gIGNoZWNrLkNhbGwoYmFzZTo6QmluZCgmU2V0Qm9vbCkpOwotICBFWFBFQ1RfVFJVRShkc3QpOwotfQotCi1URVNUKEdtb2NrQ2FsbGJhY2tTdXBwb3J0VGVzdCwgUnVuQ2FsbGJhY2tQYXNzQnlWYWx1ZSkgewotICBNb2NrRnVuY3Rpb248dm9pZChjb25zdCBUZXN0Q2FsbGJhY2smKT4gY2hlY2s7Ci0gIGJvb2wgZHN0ID0gZmFsc2U7Ci0gIGJvb2wgc3JjID0gdHJ1ZTsKLSAgRVhQRUNUX0NBTEwoY2hlY2ssIENhbGwoSXNOb3ROdWxsQ2FsbGJhY2soKSkpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8MD4oc3JjLCAmZHN0KSk7Ci0gIHNyYyA9IGZhbHNlOwotICBjaGVjay5DYWxsKGJhc2U6OkJpbmQoJlNldEJvb2wpKTsKLSAgRVhQRUNUX1RSVUUoZHN0KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9oZHJfbWV0YWRhdGEuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9oZHJfbWV0YWRhdGEuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOGZjMTEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvaGRyX21ldGFkYXRhLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvaGRyX21ldGFkYXRhLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotTWFzdGVyaW5nTWV0YWRhdGE6Ok1hc3RlcmluZ01ldGFkYXRhKCkKLSAgICA6IHByaW1hcnlfcl9jaHJvbWF0aWNpdHlfeCgwKSwKLSAgICAgIHByaW1hcnlfcl9jaHJvbWF0aWNpdHlfeSgwKSwKLSAgICAgIHByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeCgwKSwKLSAgICAgIHByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeSgwKSwKLSAgICAgIHByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeCgwKSwKLSAgICAgIHByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeSgwKSwKLSAgICAgIHdoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94KDApLAotICAgICAgd2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3koMCksCi0gICAgICBsdW1pbmFuY2VfbWF4KDApLAotICAgICAgbHVtaW5hbmNlX21pbigwKSB7fQotCi1NYXN0ZXJpbmdNZXRhZGF0YTo6TWFzdGVyaW5nTWV0YWRhdGEoY29uc3QgTWFzdGVyaW5nTWV0YWRhdGEmIHJocykgewotICAqdGhpcyA9IHJoczsKLX0KLQotSERSTWV0YWRhdGE6OkhEUk1ldGFkYXRhKCkgOiBtYXhfY2xsKDApLCBtYXhfZmFsbCgwKSB7fQotCi1IRFJNZXRhZGF0YTo6SERSTWV0YWRhdGEoY29uc3QgSERSTWV0YWRhdGEmIHJocykgeyAqdGhpcyA9IHJoczsgfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2hkcl9tZXRhZGF0YS5oIGIvY29iYWx0L21lZGlhL2Jhc2UvaGRyX21ldGFkYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNThhMGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvaGRyX21ldGFkYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfSERSX01FVEFEQVRBX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0hEUl9NRVRBREFUQV9IXwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gU01QVEUgU1QgMjA4NiBtYXN0ZXJpbmcgbWV0YWRhdGEuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIE1hc3RlcmluZ01ldGFkYXRhIHsKLSAgZmxvYXQgcHJpbWFyeV9yX2Nocm9tYXRpY2l0eV94OwotICBmbG9hdCBwcmltYXJ5X3JfY2hyb21hdGljaXR5X3k7Ci0gIGZsb2F0IHByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeDsKLSAgZmxvYXQgcHJpbWFyeV9nX2Nocm9tYXRpY2l0eV95OwotICBmbG9hdCBwcmltYXJ5X2JfY2hyb21hdGljaXR5X3g7Ci0gIGZsb2F0IHByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeTsKLSAgZmxvYXQgd2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3g7Ci0gIGZsb2F0IHdoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV95OwotICBmbG9hdCBsdW1pbmFuY2VfbWF4OwotICBmbG9hdCBsdW1pbmFuY2VfbWluOwotCi0gIE1hc3RlcmluZ01ldGFkYXRhKCk7Ci0gIE1hc3RlcmluZ01ldGFkYXRhKGNvbnN0IE1hc3RlcmluZ01ldGFkYXRhJiByaHMpOwotCi0gIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNYXN0ZXJpbmdNZXRhZGF0YSYgcmhzKSBjb25zdCB7Ci0gICAgcmV0dXJuICgocHJpbWFyeV9yX2Nocm9tYXRpY2l0eV94ID09IHJocy5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3gpICYmCi0gICAgICAgICAgICAocHJpbWFyeV9yX2Nocm9tYXRpY2l0eV95ID09IHJocy5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3kpICYmCi0gICAgICAgICAgICAocHJpbWFyeV9nX2Nocm9tYXRpY2l0eV94ID09IHJocy5wcmltYXJ5X2dfY2hyb21hdGljaXR5X3gpICYmCi0gICAgICAgICAgICAocHJpbWFyeV9nX2Nocm9tYXRpY2l0eV95ID09IHJocy5wcmltYXJ5X2dfY2hyb21hdGljaXR5X3kpICYmCi0gICAgICAgICAgICAocHJpbWFyeV9iX2Nocm9tYXRpY2l0eV94ID09IHJocy5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3gpICYmCi0gICAgICAgICAgICAocHJpbWFyeV9iX2Nocm9tYXRpY2l0eV95ID09IHJocy5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3kpICYmCi0gICAgICAgICAgICAod2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3ggPT0gcmhzLndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94KSAmJgotICAgICAgICAgICAgKHdoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV95ID09IHJocy53aGl0ZV9wb2ludF9jaHJvbWF0aWNpdHlfeSkgJiYKLSAgICAgICAgICAgIChsdW1pbmFuY2VfbWF4ID09IHJocy5sdW1pbmFuY2VfbWF4KSAmJgotICAgICAgICAgICAgKGx1bWluYW5jZV9taW4gPT0gcmhzLmx1bWluYW5jZV9taW4pKTsKLSAgfQotfTsKLQotLy8gSERSIG1ldGFkYXRhIGNvbW1vbiBmb3IgSERSMTAgYW5kIFdlYk0vVlA5LWJhc2VkIEhEUiBmb3JtYXRzLgotc3RydWN0IE1FRElBX0VYUE9SVCBIRFJNZXRhZGF0YSB7Ci0gIE1hc3RlcmluZ01ldGFkYXRhIG1hc3RlcmluZ19tZXRhZGF0YTsKLSAgdW5zaWduZWQgbWF4X2NsbDsKLSAgdW5zaWduZWQgbWF4X2ZhbGw7Ci0KLSAgSERSTWV0YWRhdGEoKTsKLSAgSERSTWV0YWRhdGEoY29uc3QgSERSTWV0YWRhdGEmIHJocyk7Ci0KLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhEUk1ldGFkYXRhJiByaHMpIGNvbnN0IHsKLSAgICByZXR1cm4gKChtYXhfY2xsID09IHJocy5tYXhfY2xsKSAmJiAobWF4X2ZhbGwgPT0gcmhzLm1heF9mYWxsKSAmJgotICAgICAgICAgICAgKG1hc3RlcmluZ19tZXRhZGF0YSA9PSByaHMubWFzdGVyaW5nX21ldGFkYXRhKSk7Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0hEUl9NRVRBREFUQV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9uYW1lcy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fbmFtZXMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDdlMDIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9uYW1lcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fbmFtZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jb25zdCBjaGFyIGtDbGVhcktleVtdID0gIm9yZy53My5jbGVhcmtleSI7Ci1jb25zdCBjaGFyIGtFeHRlcm5hbENsZWFyS2V5W10gPSAib3JnLmNocm9taXVtLmV4dGVybmFsY2xlYXJrZXkiOwotCi1ib29sIElzQ2xlYXJLZXkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIHsKLSAgcmV0dXJuIGtleV9zeXN0ZW0gPT0ga0NsZWFyS2V5OwotfQotCi1ib29sIElzQ2hpbGRLZXlTeXN0ZW1PZihjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlKSB7Ci0gIHN0ZDo6c3RyaW5nIHByZWZpeCA9IGJhc2UgKyAnLic7Ci0gIHJldHVybiBrZXlfc3lzdGVtLnN1YnN0cigwLCBwcmVmaXguc2l6ZSgpKSA9PSBwcmVmaXg7Ci19Ci0KLWJvb2wgSXNFeHRlcm5hbENsZWFyS2V5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSB7Ci0gIHJldHVybiBrZXlfc3lzdGVtID09IGtFeHRlcm5hbENsZWFyS2V5IHx8Ci0gICAgICAgICBJc0NoaWxkS2V5U3lzdGVtT2Yoa2V5X3N5c3RlbSwga0V4dGVybmFsQ2xlYXJLZXkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fbmFtZXMuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fbmFtZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVkNDc3MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtX25hbWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfS0VZX1NZU1RFTV9OQU1FU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9LRVlfU1lTVEVNX05BTUVTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUT0RPKGpydW1tZWxsKTogVGhpcyBmaWxlIHNob3VsZCBiZSBmb2xkZWQgaW50byBrZXlfc3lzdGVtcy5jYyBhcyB0aGF0IGlzCi0vLyB0aGUgcHJpbWFyeSB1c2VyIG9mIHRoZXNlIGZ1bmN0aW9ucy4gaHR0cDovL2NyYnVnLmNvbS82MDY1NzkuCi0KLS8vIFJldHVybnMgdHJ1ZSBpZiB8a2V5X3N5c3RlbXwgaXMgQ2xlYXIgS2V5LCBmYWxzZSBvdGhlcndpc2UuCi1NRURJQV9FWFBPUlQgYm9vbCBJc0NsZWFyS2V5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHxrZXlfc3lzdGVtfCBpcyAocmV2ZXJzZSkgc3ViLWRvbWFpbiBvZiB8YmFzZXwuCi1NRURJQV9FWFBPUlQgYm9vbCBJc0NoaWxkS2V5U3lzdGVtT2YoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2UpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgfGtleV9zeXN0ZW18IGlzIEV4dGVybmFsIENsZWFyIEtleSwgZmFsc2Ugb3RoZXJ3aXNlLgotTUVESUFfRVhQT1JUIGJvb2wgSXNFeHRlcm5hbENsZWFyS2V5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfS0VZX1NZU1RFTV9OQU1FU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9wcm9wZXJ0aWVzLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9wcm9wZXJ0aWVzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTY4NTQzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fcHJvcGVydGllcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fcHJvcGVydGllcy5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotU3VwcG9ydGVkQ29kZWNzIEtleVN5c3RlbVByb3BlcnRpZXM6OkdldFN1cHBvcnRlZFNlY3VyZUNvZGVjcygpIGNvbnN0IHsKLSNpZiAhZGVmaW5lZChPU19BTkRST0lEKQotICBOT1RSRUFDSEVEKCk7Ci0jZW5kaWYKLSAgcmV0dXJuIEVNRV9DT0RFQ19OT05FOwotfQotCi1ib29sIEtleVN5c3RlbVByb3BlcnRpZXM6OlVzZUFlc0RlY3J5cHRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXN0ZDo6c3RyaW5nIEtleVN5c3RlbVByb3BlcnRpZXM6OkdldFBlcHBlclR5cGUoKSBjb25zdCB7Ci0jaWYgIWRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotICBOT1RSRUFDSEVEKCk7Ci0jZW5kaWYKLSAgcmV0dXJuICIiOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fcHJvcGVydGllcy5oIGIvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9wcm9wZXJ0aWVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYjRhNDUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9wcm9wZXJ0aWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfS0VZX1NZU1RFTV9QUk9QRVJUSUVTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX0tFWV9TWVNURU1fUFJPUEVSVElFU19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW1lX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgcXVlcnlpbmcgdGhlIHByb3BlcnRpZXMgb2YgYSByZWdpc3RlcmVkIGtleSBzeXN0ZW0uCi1jbGFzcyBNRURJQV9FWFBPUlQgS2V5U3lzdGVtUHJvcGVydGllcyB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5LZXlTeXN0ZW1Qcm9wZXJ0aWVzKCkge30KLQotICAvLyBHZXRzIHRoZSBuYW1lIG9mIHRoaXMga2V5IHN5c3RlbS4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRLZXlTeXN0ZW1OYW1lKCkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgd2hldGhlciB8aW5pdF9kYXRhX3R5cGV8IGlzIHN1cHBvcnRlZCBieSB0aGlzIGtleSBzeXN0ZW0uCi0gIHZpcnR1YWwgYm9vbCBJc1N1cHBvcnRlZEluaXREYXRhVHlwZSgKLSAgICAgIEVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIGNvZGVjcyBzdXBwb3J0ZWQgYnkgdGhpcyBrZXkgc3lzdGVtLgotICB2aXJ0dWFsIFN1cHBvcnRlZENvZGVjcyBHZXRTdXBwb3J0ZWRDb2RlY3MoKSBjb25zdCA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY29kZWNzIHdpdGggaGFyZHdhcmUtc2VjdXJlIHN1cHBvcnQgaW4gdGhpcyBrZXkgc3lzdGVtLgotICB2aXJ0dWFsIFN1cHBvcnRlZENvZGVjcyBHZXRTdXBwb3J0ZWRTZWN1cmVDb2RlY3MoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIHJ1bGUgZm9yIHN1cHBvcnRpbmcgYSByb2J1c3RuZXNzIHJlcXVpcmVtZW50LgotICB2aXJ0dWFsIEVtZUNvbmZpZ1J1bGUgR2V0Um9idXN0bmVzc0NvbmZpZ1J1bGUoCi0gICAgICBFbWVNZWRpYVR5cGUgbWVkaWFfdHlwZSwKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0ZWRfcm9idXN0bmVzcykgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN1cHBvcnQgdGhpcyBrZXkgc3lzdGVtIHByb3ZpZGVzIGZvciBwZXJzaXN0ZW50LWxpY2Vuc2UKLSAgLy8gc2Vzc2lvbnMuCi0gIHZpcnR1YWwgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoKSBjb25zdCA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgc3VwcG9ydCB0aGlzIGtleSBzeXN0ZW0gcHJvdmlkZXMgZm9yIHBlcnNpc3RlbnQtcmVsZWFzZS1tZXNzYWdlCi0gIC8vIHNlc3Npb25zLgotICB2aXJ0dWFsIEVtZVNlc3Npb25UeXBlU3VwcG9ydCBHZXRQZXJzaXN0ZW50UmVsZWFzZU1lc3NhZ2VTZXNzaW9uU3VwcG9ydCgpCi0gICAgICBjb25zdCA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgc3VwcG9ydCB0aGlzIGtleSBzeXN0ZW0gcHJvdmlkZXMgZm9yIHBlcnNpc3RlbnQgc3RhdGUuCi0gIHZpcnR1YWwgRW1lRmVhdHVyZVN1cHBvcnQgR2V0UGVyc2lzdGVudFN0YXRlU3VwcG9ydCgpIGNvbnN0ID0gMDsKLQotICAvLyBSZXR1cm5zIHRoZSBzdXBwb3J0IHRoaXMga2V5IHN5c3RlbSBwcm92aWRlcyBmb3IgZGlzdGluY3RpdmUgaWRlbnRpZmllcnMuCi0gIHZpcnR1YWwgRW1lRmVhdHVyZVN1cHBvcnQgR2V0RGlzdGluY3RpdmVJZGVudGlmaWVyU3VwcG9ydCgpIGNvbnN0ID0gMDsKLQotICAvLyBSZXR1cm5zIHdoZXRoZXIgQWVzRGVjcnlwdG9yIGNhbiBiZSB1c2VkIGZvciB0aGlzIGtleSBzeXN0ZW0uCi0gIHZpcnR1YWwgYm9vbCBVc2VBZXNEZWNyeXB0b3IoKSBjb25zdDsKLQotICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldFBlcHBlclR5cGUoKSBjb25zdDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0tFWV9TWVNURU1fUFJPUEVSVElFU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbXMuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY2ZTY5Ny4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDcwOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtcy5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jb250YWluZXJzL2hhc2hfdGFibGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9sYXp5X2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1fbmFtZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtX3Byb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NsaWVudC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3dpZGV2aW5lL2NkbS93aWRldmluZV9jZG1fY29tbW9uLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgY2hhciBrQ2xlYXJLZXlLZXlTeXN0ZW1bXSA9ICJvcmcudzMuY2xlYXJrZXkiOwotCi0vLyBUaGVzZSBuYW1lcyBhcmUgdXNlZCBieSBVTUEuIERvIG5vdCBjaGFuZ2UgdGhlbSEKLWNvbnN0IGNoYXIga0NsZWFyS2V5S2V5U3lzdGVtTmFtZUZvclVNQVtdID0gIkNsZWFyS2V5IjsKLWNvbnN0IGNoYXIga1Vua25vd25LZXlTeXN0ZW1OYW1lRm9yVU1BW10gPSAiVW5rbm93biI7Ci0KLXN0cnVjdCBOYW1lZENvZGVjIHsKLSAgY29uc3QgY2hhciogbmFtZTsKLSAgRW1lQ29kZWMgdHlwZTsKLX07Ci0KLS8vIE1hcHBpbmcgYmV0d2VlbiBjb250YWluZXJzIGFuZCB0aGVpciBjb2RlY3MuCi0vLyBPbmx5IGF1ZGlvIGNvZGVjcyBjYW4gYmVsb25nIHRvIGEgImF1ZGlvLyoiIG1pbWVfdHlwZSwgYW5kIG9ubHkgdmlkZW8gY29kZWNzCi0vLyBjYW4gYmVsb25nIHRvIGEgInZpZGVvLyoiIG1pbWVfdHlwZS4KLXN0YXRpYyBjb25zdCBOYW1lZENvZGVjIGtNaW1lVHlwZVRvQ29kZWNNYXNrc1tdID0gewotICAgIHsiYXVkaW8vd2VibSIsIEVNRV9DT0RFQ19XRUJNX0FVRElPX0FMTH0sCi0gICAgeyJ2aWRlby93ZWJtIiwgRU1FX0NPREVDX1dFQk1fVklERU9fQUxMfSwKLSNpZiBkZWZpbmVkKFVTRV9QUk9QUklFVEFSWV9DT0RFQ1MpCi0gICAgeyJhdWRpby9tcDQiLCBFTUVfQ09ERUNfTVA0X0FVRElPX0FMTH0sCi0gICAgeyJ2aWRlby9tcDQiLCBFTUVfQ09ERUNfTVA0X1ZJREVPX0FMTH0KLSNlbmRpZiAgLy8gZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotfTsKLQotLy8gTWFwcGluZyBiZXR3ZWVuIGNvZGVjIG5hbWVzIGFuZCBlbnVtIHZhbHVlcy4KLXN0YXRpYyBjb25zdCBOYW1lZENvZGVjIGtDb2RlY1N0cmluZ3NbXSA9IHsKLSAgICB7Im9wdXMiLCBFTUVfQ09ERUNfV0VCTV9PUFVTfSwgICAgICAvLyBPcHVzLgotICAgIHsidm9yYmlzIiwgRU1FX0NPREVDX1dFQk1fVk9SQklTfSwgIC8vIFZvcmJpcy4KLSAgICB7InZwOCIsIEVNRV9DT0RFQ19XRUJNX1ZQOH0sICAgICAgICAvLyBWUDguCi0gICAgeyJ2cDguMCIsIEVNRV9DT0RFQ19XRUJNX1ZQOH0sICAgICAgLy8gVlA4LgotICAgIHsidnA5IiwgRU1FX0NPREVDX1dFQk1fVlA5fSwgICAgICAgIC8vIFZQOS4KLSAgICB7InZwOS4wIiwgRU1FX0NPREVDX1dFQk1fVlA5fSwgICAgICAvLyBWUDkuCi0jaWYgZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotICAgIHsidnAwOSIsIEVNRV9DT0RFQ19NUDRfVlA5fSwgICAvLyBWUDkgaW4gTVA0LgotICAgIHsibXA0YSIsIEVNRV9DT0RFQ19NUDRfQUFDfSwgICAvLyBBQUMuCi0gICAgeyJhdmMxIiwgRU1FX0NPREVDX01QNF9BVkMxfSwgIC8vIEFWQzEuCi0gICAgeyJhdmMzIiwgRU1FX0NPREVDX01QNF9BVkMxfSwgIC8vIEFWQzMuCi0jaWYgQlVJTERGTEFHKEVOQUJMRV9IRVZDX0RFTVVYSU5HKQotICAgIHsiaGV2MSIsIEVNRV9DT0RFQ19NUDRfSEVWQ30sICAvLyBIRVYxLgotICAgIHsiaHZjMSIsIEVNRV9DT0RFQ19NUDRfSEVWQ30sICAvLyBIVkMxLgotI2VuZGlmCi0jZW5kaWYgIC8vIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLX07Ci0KLWNsYXNzIENsZWFyS2V5UHJvcGVydGllcyA6IHB1YmxpYyBLZXlTeXN0ZW1Qcm9wZXJ0aWVzIHsKLSBwdWJsaWM6Ci0gIHN0ZDo6c3RyaW5nIEdldEtleVN5c3RlbU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBrQ2xlYXJLZXlLZXlTeXN0ZW07IH0KLQotICBib29sIElzU3VwcG9ydGVkSW5pdERhdGFUeXBlKEVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSkgY29uc3Qgb3ZlcnJpZGUgewotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLSAgICBpZiAoaW5pdF9kYXRhX3R5cGUgPT0gRW1lSW5pdERhdGFUeXBlOjpDRU5DKSByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHJldHVybiBpbml0X2RhdGFfdHlwZSA9PSBFbWVJbml0RGF0YVR5cGU6OldFQk0gfHwKLSAgICAgICAgICAgaW5pdF9kYXRhX3R5cGUgPT0gRW1lSW5pdERhdGFUeXBlOjpLRVlJRFM7Ci0gIH0KLQotICBTdXBwb3J0ZWRDb2RlY3MgR2V0U3VwcG9ydGVkQ29kZWNzKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIC8vIE9uIEFuZHJvaWQsIFZvcmJpcywgVlA4LCBBQUMgYW5kIEFWQzEgYXJlIHN1cHBvcnRlZCBpbiBNZWRpYUNvZGVjOgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vZ3VpZGUvYXBwZW5kaXgvbWVkaWEtZm9ybWF0cy5odG1sCi0gICAgLy8gVlA5IHN1cHBvcnQgaXMgZGV2aWNlIGRlcGVuZGVudC4KLSAgICBTdXBwb3J0ZWRDb2RlY3MgY29kZWNzID0gRU1FX0NPREVDX1dFQk1fQUxMOwotCi0jaWYgZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotICAgIGNvZGVjcyB8PSBFTUVfQ09ERUNfTVA0X0FMTDsKLSNlbmRpZiAgLy8gZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotCi0gICAgcmV0dXJuIGNvZGVjczsKLSAgfQotCi0gIEVtZUNvbmZpZ1J1bGUgR2V0Um9idXN0bmVzc0NvbmZpZ1J1bGUoCi0gICAgICBFbWVNZWRpYVR5cGUgbWVkaWFfdHlwZSwKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0ZWRfcm9idXN0bmVzcykgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiByZXF1ZXN0ZWRfcm9idXN0bmVzcy5lbXB0eSgpID8gRW1lQ29uZmlnUnVsZTo6U1VQUE9SVEVECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBFbWVDb25maWdSdWxlOjpOT1RfU1VQUE9SVEVEOwotICB9Ci0gIEVtZVNlc3Npb25UeXBlU3VwcG9ydCBHZXRQZXJzaXN0ZW50TGljZW5zZVNlc3Npb25TdXBwb3J0KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBFbWVTZXNzaW9uVHlwZVN1cHBvcnQ6Ok5PVF9TVVBQT1JURUQ7Ci0gIH0KLSAgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRSZWxlYXNlTWVzc2FnZVNlc3Npb25TdXBwb3J0KCkKLSAgICAgIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gRW1lU2Vzc2lvblR5cGVTdXBwb3J0OjpOT1RfU1VQUE9SVEVEOwotICB9Ci0gIEVtZUZlYXR1cmVTdXBwb3J0IEdldFBlcnNpc3RlbnRTdGF0ZVN1cHBvcnQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIEVtZUZlYXR1cmVTdXBwb3J0OjpOT1RfU1VQUE9SVEVEOwotICB9Ci0gIEVtZUZlYXR1cmVTdXBwb3J0IEdldERpc3RpbmN0aXZlSWRlbnRpZmllclN1cHBvcnQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIEVtZUZlYXR1cmVTdXBwb3J0OjpOT1RfU1VQUE9SVEVEOwotICB9Ci0gIGJvb2wgVXNlQWVzRGVjcnlwdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotLy8gUmV0dXJucyB3aGV0aGVyIHRoZSB8a2V5X3N5c3RlbXwgaXMga25vd24gdG8gQ2hyb21pdW0gYW5kIGlzIHRodXMgbGlrZWx5IHRvCi0vLyBiZSBpbXBsZW1lbnRlZCBpbiBhbiBpbnRlcm9wZXJhYmxlIHdheS4KLS8vIFRydWUgaXMgYWx3YXlzIHJldHVybmVkIGZvciBhIHxrZXlfc3lzdGVtfCB0aGF0IGJlZ2lucyB3aXRoICJ4LSIuCi0vLwotLy8gQXMgd2l0aCBvdGhlciB3ZWIgcGxhdGZvcm0gZmVhdHVyZXMsIGFkdmVydGlzaW5nIHN1cHBvcnQgZm9yIGEga2V5IHN5c3RlbQotLy8gaW1wbGllcyB0aGF0IGl0IGFkaGVyZXMgdG8gYSBkZWZpbmVkIGFuZCBpbnRlcm9wZXJhYmxlIHNwZWNpZmljYXRpb24uCi0vLwotLy8gVG8gZW5zdXJlIGludGVyb3BlcmFiaWxpdHksIGltcGxlbWVudGF0aW9ucyBvZiBhIHNwZWNpZmljIHxrZXlfc3lzdGVtfCBzdHJpbmcKLS8vIG11c3QgY29uZm9ybSB0byBhIHNwZWNpZmljYXRpb24gZm9yIHRoYXQgaWRlbnRpZmllciB0aGF0IGRlZmluZXMKLS8vIGtleSBzeXN0ZW0tc3BlY2lmaWMgYmVoYXZpb3JzIG5vdCBmdWxseSBkZWZpbmVkIGJ5IHRoZSBFTUUgc3BlY2lmaWNhdGlvbi4KLS8vIFRoYXQgc3BlY2lmaWNhdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQgYnkgdGhlIG93bmVyIG9mIHRoZSBkb21haW4gdGhhdCBpcyB0aGUKLS8vIHJldmVyc2Ugb2YgdGhlIHxrZXlfc3lzdGVtfCBzdHJpbmcuCi0vLyBUaGlzIGludm9sdmVzIG1vcmUgdGhhbiBjYWxsaW5nIGEgbGlicmFyeSwgU0RLLCBvciBwbGF0Zm9ybSBBUEkuCi0vLyBLZXlTeXN0ZW1zSW1wbCBtdXN0IGJlIHBvcHVsYXRlZCBhcHByb3ByaWF0ZWx5LCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZ2x1ZQotLy8gY29kZSB0byBhZGFwdCB0byB0aGUgQVBJIG9mIHRoZSBsaWJyYXJ5LCBTREssIG9yIHBsYXRmb3JtIEFQSS4KLS8vCi0vLyBDaHJvbWl1bSBtYWlubGluZSBjb250YWlucyB0aGlzIGRhdGEgYW5kIGdsdWUgY29kZSBmb3Igc3BlY2lmaWMga2V5IHN5c3RlbXMsCi0vLyB3aGljaCBzaG91bGQgaGVscCBlbnN1cmUgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyB1c2luZwotLy8gdGhlc2Uga2V5IHN5c3RlbXMuCi0vLwotLy8gSWYgeW91IG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIG90aGVyIGtleSBzeXN0ZW1zLCBlbnN1cmUgdGhhdCB5b3UgaGF2ZQotLy8gb2J0YWluZWQgdGhlIHNwZWNpZmljYXRpb24gZm9yIGhvdyB0byBpbnRlZ3JhdGUgaXQgd2l0aCBFTUUsIGltcGxlbWVudGVkIHRoZQotLy8gYXBwcm9wcmlhdGUgZ2x1ZS9hZGFwdGVyIGNvZGUsIGFuZCBhZGRlZCBhbGwgdGhlIGFwcHJvcHJpYXRlIGRhdGEgdG8KLS8vIEtleVN5c3RlbXNJbXBsLiBPbmx5IHRoZW4gc2hvdWxkIHlvdSBjaGFuZ2UgdGhpcyBmdW5jdGlvbi4KLXN0YXRpYyBib29sIElzUG90ZW50aWFsbHlTdXBwb3J0ZWRLZXlTeXN0ZW0oY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIHsKLSAgLy8gS25vd24gYW5kIHN1cHBvcnRlZCBrZXkgc3lzdGVtcy4KLSAgaWYgKGtleV9zeXN0ZW0gPT0ga1dpZGV2aW5lS2V5U3lzdGVtKSByZXR1cm4gdHJ1ZTsKLSAgaWYgKGtleV9zeXN0ZW0gPT0ga0NsZWFyS2V5S2V5U3lzdGVtKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBFeHRlcm5hbCBDbGVhciBLZXkgaXMga25vd24gYW5kIHN1cHBvcnRzIHN1ZmZpeGVzIGZvciB0ZXN0aW5nLgotICBpZiAoSXNFeHRlcm5hbENsZWFyS2V5KGtleV9zeXN0ZW0pKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBDaHJvbWVjYXN0IGRlZmluZXMgYmVoYXZpb3JzIGZvciBDYXN0IGNsaWVudHMgd2l0aGluIGl0cyByZXZlcnNlIGRvbWFpbi4KLSAgY29uc3QgY2hhciBrQ2hyb21lY2FzdFJvb3RbXSA9ICJjb20uY2hyb21lY2FzdCI7Ci0gIGlmIChJc0NoaWxkS2V5U3lzdGVtT2Yoa2V5X3N5c3RlbSwga0Nocm9tZWNhc3RSb290KSkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IGhhdmUgYSBzcGVjaWZpY2F0aW9uIG9yIGFwcHJvcHJpYXRlIGdsdWUgY29kZQotICAvLyBjYW4gdXNlIHRoZSAieC0iIHByZWZpeCB0byBhdm9pZCBjb25mbGljdGluZyB3aXRoIGFuZCBhZHZlcnRpc2luZyBzdXBwb3J0Ci0gIC8vIGZvciByZWFsIGtleSBzeXN0ZW0gbmFtZXMuIFVzZSBpcyBkaXNjb3VyYWdlZC4KLSAgY29uc3QgY2hhciBrRXhjbHVkZWRQcmVmaXhbXSA9ICJ4LSI7Ci0gIHJldHVybiBiYXNlOjpTdGFydHNXaXRoKGtleV9zeXN0ZW0sIGtFeGNsdWRlZFByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSk7Ci19Ci0KLWNsYXNzIEtleVN5c3RlbXNJbXBsIDogcHVibGljIEtleVN5c3RlbXMgewotIHB1YmxpYzoKLSAgc3RhdGljIEtleVN5c3RlbXNJbXBsKiBHZXRJbnN0YW5jZSgpOwotCi0gIHZvaWQgVXBkYXRlSWZOZWVkZWQoKTsKLQotICBzdGQ6OnN0cmluZyBHZXRLZXlTeXN0ZW1OYW1lRm9yVU1BKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdDsKLQotICBib29sIFVzZUFlc0RlY3J5cHRvcihjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3Q7Ci0KLSNpZiBkZWZpbmVkKEVOQUJMRV9QRVBQRVJfQ0RNUykKLSAgc3RkOjpzdHJpbmcgR2V0UGVwcGVyVHlwZShjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3Q7Ci0jZW5kaWYKLQotICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBmb3IgdGVzdGluZyBwdXJwb3NlIG9ubHkuCi0gIHZvaWQgQWRkQ29kZWNNYXNrKEVtZU1lZGlhVHlwZSBtZWRpYV90eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWMsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1hc2spOwotICB2b2lkIEFkZE1pbWVUeXBlQ29kZWNNYXNrKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsIHVpbnQzMl90IG1hc2spOwotCi0gIC8vIEltcGxlbWVudGF0aW9uIG9mIEtleVN5c3RlbXMgaW50ZXJmYWNlLgotICBib29sIElzU3VwcG9ydGVkS2V5U3lzdGVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCBvdmVycmlkZTsKLQotICBib29sIElzU3VwcG9ydGVkSW5pdERhdGFUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgRW1lQ29uZmlnUnVsZSBHZXRDb250ZW50VHlwZUNvbmZpZ1J1bGUoCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSwgRW1lTWVkaWFUeXBlIG1lZGlhX3R5cGUsCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGFpbmVyX21pbWVfdHlwZSwKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzKSBjb25zdCBvdmVycmlkZTsKLQotICBFbWVDb25maWdSdWxlIEdldFJvYnVzdG5lc3NDb25maWdSdWxlKAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sIEVtZU1lZGlhVHlwZSBtZWRpYV90eXBlLAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlcXVlc3RlZF9yb2J1c3RuZXNzKSBjb25zdCBvdmVycmlkZTsKLQotICBFbWVTZXNzaW9uVHlwZVN1cHBvcnQgR2V0UGVyc2lzdGVudExpY2Vuc2VTZXNzaW9uU3VwcG9ydCgKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCBvdmVycmlkZTsKLQotICBFbWVTZXNzaW9uVHlwZVN1cHBvcnQgR2V0UGVyc2lzdGVudFJlbGVhc2VNZXNzYWdlU2Vzc2lvblN1cHBvcnQoCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgRW1lRmVhdHVyZVN1cHBvcnQgR2V0UGVyc2lzdGVudFN0YXRlU3VwcG9ydCgKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCBvdmVycmlkZTsKLQotICBFbWVGZWF0dXJlU3VwcG9ydCBHZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJTdXBwb3J0KAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgS2V5U3lzdGVtc0ltcGwoKTsKLSAgfktleVN5c3RlbXNJbXBsKCkgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBJbml0aWFsaXplVU1BSW5mbygpOwotCi0gIHZvaWQgVXBkYXRlU3VwcG9ydGVkS2V5U3lzdGVtcygpOwotCi0gIHZvaWQgQWRkU3VwcG9ydGVkS2V5U3lzdGVtcygKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxLZXlTeXN0ZW1Qcm9wZXJ0aWVzPj4qIGtleV9zeXN0ZW1zKTsKLQotICB2b2lkIFJlZ2lzdGVyTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgRW1lQ29kZWMgY29kZWNzX21hc2spOwotICBib29sIElzVmFsaWRNaW1lVHlwZUNvZGVjc0NvbWJpbmF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkQ29kZWNzIGNvZGVjc19tYXNrKSBjb25zdDsKLQotICBmcmllbmQgc3RydWN0IGJhc2U6OkRlZmF1bHRMYXp5SW5zdGFuY2VUcmFpdHM8S2V5U3lzdGVtc0ltcGw+OwotCi0gIHR5cGVkZWYgYmFzZTo6aGFzaF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxLZXlTeXN0ZW1Qcm9wZXJ0aWVzPj4KLSAgICAgIEtleVN5c3RlbVByb3BlcnRpZXNNYXA7Ci0gIHR5cGVkZWYgYmFzZTo6aGFzaF9tYXA8c3RkOjpzdHJpbmcsIFN1cHBvcnRlZENvZGVjcz4gTWltZVR5cGVDb2RlY3NNYXA7Ci0gIHR5cGVkZWYgYmFzZTo6aGFzaF9tYXA8c3RkOjpzdHJpbmcsIEVtZUNvZGVjPiBDb2RlY3NNYXA7Ci0gIHR5cGVkZWYgYmFzZTo6aGFzaF9tYXA8c3RkOjpzdHJpbmcsIEVtZUluaXREYXRhVHlwZT4gSW5pdERhdGFUeXBlc01hcDsKLSAgdHlwZWRlZiBiYXNlOjpoYXNoX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IEtleVN5c3RlbU5hbWVGb3JVTUFNYXA7Ci0KLSAgLy8gVE9ETyhzYW5kZXJzZCk6IFNlcGFyYXRlIGNvbnRhaW5lciBlbnVtIGZyb20gY29kZWMgbWFzayB2YWx1ZS4KLSAgLy8gaHR0cDovL2NyYnVnLmNvbS80MTc0NDAKLSAgLy8gUG90ZW50aWFsbHkgcGFzcyBFbWVNZWRpYVR5cGUgYW5kIGEgY29udGFpbmVyIGVudW0uCi0gIFN1cHBvcnRlZENvZGVjcyBHZXRDb2RlY01hc2tGb3JNaW1lVHlwZSgKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250YWluZXJfbWltZV90eXBlKSBjb25zdDsKLSAgRW1lQ29kZWMgR2V0Q29kZWNGb3JTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjKSBjb25zdDsKLQotICAvLyBNYXAgZnJvbSBrZXkgc3lzdGVtIHN0cmluZyB0byBLZXlTeXN0ZW1Qcm9wZXJ0aWVzIGluc3RhbmNlLgotICBLZXlTeXN0ZW1Qcm9wZXJ0aWVzTWFwIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfOwotCi0gIC8vIFRoaXMgbWVtYmVyIHNob3VsZCBvbmx5IGJlIG1vZGlmaWVkIGJ5IFJlZ2lzdGVyTWltZVR5cGUoKS4KLSAgTWltZVR5cGVDb2RlY3NNYXAgbWltZV90eXBlX3RvX2NvZGVjX21hc2tfbWFwXzsKLSAgQ29kZWNzTWFwIGNvZGVjX3N0cmluZ19tYXBfOwotICBLZXlTeXN0ZW1OYW1lRm9yVU1BTWFwIGtleV9zeXN0ZW1fbmFtZV9mb3JfdW1hX21hcF87Ci0KLSAgU3VwcG9ydGVkQ29kZWNzIGF1ZGlvX2NvZGVjX21hc2tfOwotICBTdXBwb3J0ZWRDb2RlY3MgdmlkZW9fY29kZWNfbWFza187Ci0KLSAgLy8gTWFrZXMgc3VyZSBhbGwgbWV0aG9kcyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhyZWFkLgotICBUSFJFQURfQ0hFQ0tFUih0aHJlYWRfY2hlY2tlcl8pOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihLZXlTeXN0ZW1zSW1wbCk7Ci19OwotCi1zdGF0aWMgYmFzZTo6TGF6eUluc3RhbmNlPEtleVN5c3RlbXNJbXBsPjo6RGVzdHJ1Y3RvckF0RXhpdCBnX2tleV9zeXN0ZW1zID0KLSAgICBMQVpZX0lOU1RBTkNFX0lOSVRJQUxJWkVSOwotCi1LZXlTeXN0ZW1zSW1wbCogS2V5U3lzdGVtc0ltcGw6OkdldEluc3RhbmNlKCkgewotICBLZXlTeXN0ZW1zSW1wbCoga2V5X3N5c3RlbXMgPSBnX2tleV9zeXN0ZW1zLlBvaW50ZXIoKTsKLSAga2V5X3N5c3RlbXMtPlVwZGF0ZUlmTmVlZGVkKCk7Ci0gIHJldHVybiBrZXlfc3lzdGVtczsKLX0KLQotLy8gQmVjYXVzZSB3ZSB1c2UgYSBMYXp5SW5zdGFuY2UsIHRoZSBrZXkgc3lzdGVtcyBpbmZvIG11c3QgYmUgcG9wdWxhdGVkIHdoZW4KLS8vIHRoZSBpbnN0YW5jZSBpcyBsYXppbHkgaW5pdGlhdGVkLgotS2V5U3lzdGVtc0ltcGw6OktleVN5c3RlbXNJbXBsKCkKLSAgICA6IGF1ZGlvX2NvZGVjX21hc2tfKEVNRV9DT0RFQ19BVURJT19BTEwpLAotICAgICAgdmlkZW9fY29kZWNfbWFza18oRU1FX0NPREVDX1ZJREVPX0FMTCkgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShrQ29kZWNTdHJpbmdzKTsgKytpKSB7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUgPSBrQ29kZWNTdHJpbmdzW2ldLm5hbWU7Ci0gICAgRENIRUNLKCFjb2RlY19zdHJpbmdfbWFwXy5jb3VudChuYW1lKSk7Ci0gICAgY29kZWNfc3RyaW5nX21hcF9bbmFtZV0gPSBrQ29kZWNTdHJpbmdzW2ldLnR5cGU7Ci0gIH0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoa01pbWVUeXBlVG9Db2RlY01hc2tzKTsgKytpKSB7Ci0gICAgUmVnaXN0ZXJNaW1lVHlwZShrTWltZVR5cGVUb0NvZGVjTWFza3NbaV0ubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGtNaW1lVHlwZVRvQ29kZWNNYXNrc1tpXS50eXBlKTsKLSAgfQotCi0gIEluaXRpYWxpemVVTUFJbmZvKCk7Ci0KLSAgLy8gQWx3YXlzIHVwZGF0ZSBzdXBwb3J0ZWQga2V5IHN5c3RlbXMgZHVyaW5nIGNvbnN0cnVjdGlvbi4KLSAgVXBkYXRlU3VwcG9ydGVkS2V5U3lzdGVtcygpOwotfQotCi1LZXlTeXN0ZW1zSW1wbDo6fktleVN5c3RlbXNJbXBsKCkge30KLQotU3VwcG9ydGVkQ29kZWNzIEtleVN5c3RlbXNJbXBsOjpHZXRDb2RlY01hc2tGb3JNaW1lVHlwZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGFpbmVyX21pbWVfdHlwZSkgY29uc3QgewotICBNaW1lVHlwZUNvZGVjc01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9Ci0gICAgICBtaW1lX3R5cGVfdG9fY29kZWNfbWFza19tYXBfLmZpbmQoY29udGFpbmVyX21pbWVfdHlwZSk7Ci0gIGlmIChpdGVyID09IG1pbWVfdHlwZV90b19jb2RlY19tYXNrX21hcF8uZW5kKCkpIHJldHVybiBFTUVfQ09ERUNfTk9ORTsKLQotICBEQ0hFQ0soSXNWYWxpZE1pbWVUeXBlQ29kZWNzQ29tYmluYXRpb24oY29udGFpbmVyX21pbWVfdHlwZSwgaXRlci0+c2Vjb25kKSk7Ci0gIHJldHVybiBpdGVyLT5zZWNvbmQ7Ci19Ci0KLUVtZUNvZGVjIEtleVN5c3RlbXNJbXBsOjpHZXRDb2RlY0ZvclN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWMpIGNvbnN0IHsKLSAgQ29kZWNzTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gY29kZWNfc3RyaW5nX21hcF8uZmluZChjb2RlYyk7Ci0gIGlmIChpdGVyICE9IGNvZGVjX3N0cmluZ19tYXBfLmVuZCgpKSByZXR1cm4gaXRlci0+c2Vjb25kOwotICByZXR1cm4gRU1FX0NPREVDX05PTkU7Ci19Ci0KLXZvaWQgS2V5U3lzdGVtc0ltcGw6OkluaXRpYWxpemVVTUFJbmZvKCkgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotICBEQ0hFQ0soa2V5X3N5c3RlbV9uYW1lX2Zvcl91bWFfbWFwXy5lbXB0eSgpKTsKLQotICBzdGQ6OnZlY3RvcjxLZXlTeXN0ZW1JbmZvRm9yVU1BPiBrZXlfc3lzdGVtc19pbmZvX2Zvcl91bWE7Ci0gIGlmIChHZXRNZWRpYUNsaWVudCgpKQotICAgIEdldE1lZGlhQ2xpZW50KCktPkFkZEtleVN5c3RlbXNJbmZvRm9yVU1BKCZrZXlfc3lzdGVtc19pbmZvX2Zvcl91bWEpOwotCi0gIGZvciAoY29uc3QgS2V5U3lzdGVtSW5mb0ZvclVNQSYgaW5mbyA6IGtleV9zeXN0ZW1zX2luZm9fZm9yX3VtYSkgewotICAgIGtleV9zeXN0ZW1fbmFtZV9mb3JfdW1hX21hcF9baW5mby5rZXlfc3lzdGVtXSA9Ci0gICAgICAgIGluZm8ua2V5X3N5c3RlbV9uYW1lX2Zvcl91bWE7Ci0gIH0KLQotICAvLyBDbGVhciBLZXkgaXMgYWx3YXlzIHN1cHBvcnRlZC4KLSAga2V5X3N5c3RlbV9uYW1lX2Zvcl91bWFfbWFwX1trQ2xlYXJLZXlLZXlTeXN0ZW1dID0KLSAgICAgIGtDbGVhcktleUtleVN5c3RlbU5hbWVGb3JVTUE7Ci19Ci0KLXZvaWQgS2V5U3lzdGVtc0ltcGw6OlVwZGF0ZUlmTmVlZGVkKCkgewotICBpZiAoR2V0TWVkaWFDbGllbnQoKSAmJiBHZXRNZWRpYUNsaWVudCgpLT5Jc0tleVN5c3RlbXNVcGRhdGVOZWVkZWQoKSkKLSAgICBVcGRhdGVTdXBwb3J0ZWRLZXlTeXN0ZW1zKCk7Ci19Ci0KLXZvaWQgS2V5U3lzdGVtc0ltcGw6OlVwZGF0ZVN1cHBvcnRlZEtleVN5c3RlbXMoKSB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0gIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmNsZWFyKCk7Ci0KLSAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEtleVN5c3RlbVByb3BlcnRpZXM+PiBrZXlfc3lzdGVtc19wcm9wZXJ0aWVzOwotCi0gIC8vIEFkZCBrZXkgc3lzdGVtcyBzdXBwb3J0ZWQgYnkgdGhlIE1lZGlhQ2xpZW50IGltcGxlbWVudGF0aW9uLgotICBpZiAoR2V0TWVkaWFDbGllbnQoKSkKLSAgICBHZXRNZWRpYUNsaWVudCgpLT5BZGRTdXBwb3J0ZWRLZXlTeXN0ZW1zKCZrZXlfc3lzdGVtc19wcm9wZXJ0aWVzKTsKLQotICAvLyBDbGVhciBLZXkgaXMgYWx3YXlzIHN1cHBvcnRlZC4KLSAga2V5X3N5c3RlbXNfcHJvcGVydGllcy5lbXBsYWNlX2JhY2sobmV3IENsZWFyS2V5UHJvcGVydGllcygpKTsKLQotICBBZGRTdXBwb3J0ZWRLZXlTeXN0ZW1zKCZrZXlfc3lzdGVtc19wcm9wZXJ0aWVzKTsKLX0KLQotdm9pZCBLZXlTeXN0ZW1zSW1wbDo6QWRkU3VwcG9ydGVkS2V5U3lzdGVtcygKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8S2V5U3lzdGVtUHJvcGVydGllcz4+KiBrZXlfc3lzdGVtcykgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotICBEQ0hFQ0soa2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW1wdHkoKSk7Ci0KLSAgZm9yIChhdXRvJiBwcm9wZXJ0aWVzIDogKmtleV9zeXN0ZW1zKSB7Ci0gICAgRENIRUNLKCFwcm9wZXJ0aWVzLT5HZXRLZXlTeXN0ZW1OYW1lKCkuZW1wdHkoKSk7Ci0gICAgRENIRUNLKHByb3BlcnRpZXMtPkdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoKSAhPQotICAgICAgICAgICBFbWVTZXNzaW9uVHlwZVN1cHBvcnQ6OklOVkFMSUQpOwotICAgIERDSEVDSyhwcm9wZXJ0aWVzLT5HZXRQZXJzaXN0ZW50UmVsZWFzZU1lc3NhZ2VTZXNzaW9uU3VwcG9ydCgpICE9Ci0gICAgICAgICAgIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6SU5WQUxJRCk7Ci0gICAgRENIRUNLKHByb3BlcnRpZXMtPkdldFBlcnNpc3RlbnRTdGF0ZVN1cHBvcnQoKSAhPQotICAgICAgICAgICBFbWVGZWF0dXJlU3VwcG9ydDo6SU5WQUxJRCk7Ci0gICAgRENIRUNLKHByb3BlcnRpZXMtPkdldERpc3RpbmN0aXZlSWRlbnRpZmllclN1cHBvcnQoKSAhPQotICAgICAgICAgICBFbWVGZWF0dXJlU3VwcG9ydDo6SU5WQUxJRCk7Ci0KLSAgICBpZiAoIUlzUG90ZW50aWFsbHlTdXBwb3J0ZWRLZXlTeXN0ZW0ocHJvcGVydGllcy0+R2V0S2V5U3lzdGVtTmFtZSgpKSkgewotICAgICAgLy8gSWYgeW91IGVuY291bnRlciB0aGlzIHBhdGgsIHNlZSB0aGUgY29tbWVudHMgZm9yIHRoZSBmdW5jdGlvbiBhYm92ZS4KLSAgICAgIERMT0coRVJST1IpIDw8ICJVbnN1cHBvcnRlZCBuYW1lICciIDw8IHByb3BlcnRpZXMtPkdldEtleVN5c3RlbU5hbWUoKQotICAgICAgICAgICAgICAgICAgPDwgIicuIFNlZSBjb2RlIGNvbW1lbnRzLiI7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0aW5nIHBlcnNpc3RlbnQgc3RhdGUgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIHN1cHBvcnRpbmcgcGVyc2lzdGVudAotICAgIC8vIHNlc3Npb25zLgotICAgIGlmIChwcm9wZXJ0aWVzLT5HZXRQZXJzaXN0ZW50U3RhdGVTdXBwb3J0KCkgPT0KLSAgICAgICAgRW1lRmVhdHVyZVN1cHBvcnQ6Ok5PVF9TVVBQT1JURUQpIHsKLSAgICAgIERDSEVDSyhwcm9wZXJ0aWVzLT5HZXRQZXJzaXN0ZW50TGljZW5zZVNlc3Npb25TdXBwb3J0KCkgPT0KLSAgICAgICAgICAgICBFbWVTZXNzaW9uVHlwZVN1cHBvcnQ6Ok5PVF9TVVBQT1JURUQpOwotICAgICAgRENIRUNLKHByb3BlcnRpZXMtPkdldFBlcnNpc3RlbnRSZWxlYXNlTWVzc2FnZVNlc3Npb25TdXBwb3J0KCkgPT0KLSAgICAgICAgICAgICBFbWVTZXNzaW9uVHlwZVN1cHBvcnQ6Ok5PVF9TVVBQT1JURUQpOwotICAgIH0KLQotICAgIC8vIHBlcnNpc3RlbnQtcmVsZWFzZS1tZXNzYWdlIHNlc3Npb25zIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KLSAgICAvLyBodHRwOi8vY3JidWcuY29tLzQ0ODg4OAotICAgIERDSEVDSyhwcm9wZXJ0aWVzLT5HZXRQZXJzaXN0ZW50UmVsZWFzZU1lc3NhZ2VTZXNzaW9uU3VwcG9ydCgpID09Ci0gICAgICAgICAgIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6Tk9UX1NVUFBPUlRFRCk7Ci0KLSAgICAvLyBJZiBkaXN0aW5jdGl2ZSBpZGVudGlmaWVycyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBubyBvdGhlciBmZWF0dXJlcyBjYW4KLSAgICAvLyByZXF1aXJlIHRoZW0uCi0gICAgaWYgKHByb3BlcnRpZXMtPkdldERpc3RpbmN0aXZlSWRlbnRpZmllclN1cHBvcnQoKSA9PQotICAgICAgICBFbWVGZWF0dXJlU3VwcG9ydDo6Tk9UX1NVUFBPUlRFRCkgewotICAgICAgRENIRUNLKHByb3BlcnRpZXMtPkdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoKSAhPQotICAgICAgICAgICAgIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6U1VQUE9SVEVEX1dJVEhfSURFTlRJRklFUik7Ci0gICAgICBEQ0hFQ0socHJvcGVydGllcy0+R2V0UGVyc2lzdGVudFJlbGVhc2VNZXNzYWdlU2Vzc2lvblN1cHBvcnQoKSAhPQotICAgICAgICAgICAgIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6U1VQUE9SVEVEX1dJVEhfSURFTlRJRklFUik7Ci0gICAgfQotCi0gICAgLy8gRGlzdGluY3RpdmUgaWRlbnRpZmllcnMgYW5kIHBlcnNpc3RlbnQgc3RhdGUgY2FuIG9ubHkgYmUgcmVsaWFibHkgYmxvY2tlZAotICAgIC8vIChhbmQgdGhlcmVmb3JlIGJlIHNhZmVseSBjb25maWd1cmFibGUpIGZvciBQZXBwZXItaG9zdGVkIGtleSBzeXN0ZW1zLiBGb3IKLSAgICAvLyBvdGhlciBwbGF0Zm9ybXMgYXNzdW1lIHRoZSBDRE0gY2FuIGFuZCB3aWxsIGRvIGFueXRoaW5nLCBleGNlcHQgZm9yIHRoZQotICAgIC8vIGZvbGxvd2luZyB0d28gY2FzZXM6Ci0gICAgLy8gMSkgQUVTIGRlY3J5cHRvciwgYW5kCi0gICAgLy8gMikgRXh0ZXJuYWwgQ2xlYXIgS2V5IGtleSBzeXN0ZW0gb24gQW5kcm9pZCwgb25seSBlbmFibGVkIGZvciB0ZXN0aW5nLgotICAgIGJvb2wgY2FuX2Jsb2NrID0gcHJvcGVydGllcy0+VXNlQWVzRGVjcnlwdG9yKCk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfUEVQUEVSX0NETVMpCi0gICAgRENIRUNLX0VRKHByb3BlcnRpZXMtPlVzZUFlc0RlY3J5cHRvcigpLAotICAgICAgICAgICAgICBwcm9wZXJ0aWVzLT5HZXRQZXBwZXJUeXBlKCkuZW1wdHkoKSk7Ci0gICAgaWYgKCFwcm9wZXJ0aWVzLT5HZXRQZXBwZXJUeXBlKCkuZW1wdHkoKSkgY2FuX2Jsb2NrID0gdHJ1ZTsKLSNlbGlmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgICBpZiAoSXNFeHRlcm5hbENsZWFyS2V5KHByb3BlcnRpZXMtPkdldEtleVN5c3RlbU5hbWUoKSkpIGNhbl9ibG9jayA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAoIWNhbl9ibG9jaykgewotICAgICAgRENIRUNLKHByb3BlcnRpZXMtPkdldERpc3RpbmN0aXZlSWRlbnRpZmllclN1cHBvcnQoKSA9PQotICAgICAgICAgICAgIEVtZUZlYXR1cmVTdXBwb3J0OjpBTFdBWVNfRU5BQkxFRCk7Ci0gICAgICBEQ0hFQ0socHJvcGVydGllcy0+R2V0UGVyc2lzdGVudFN0YXRlU3VwcG9ydCgpID09Ci0gICAgICAgICAgICAgRW1lRmVhdHVyZVN1cHBvcnQ6OkFMV0FZU19FTkFCTEVEKTsKLSAgICB9Ci0KLSAgICBEQ0hFQ0tfRVEoa2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uY291bnQocHJvcGVydGllcy0+R2V0S2V5U3lzdGVtTmFtZSgpKSwKLSAgICAgICAgICAgICAgMHUpCi0gICAgICAgIDw8ICJLZXkgc3lzdGVtICciIDw8IHByb3BlcnRpZXMtPkdldEtleVN5c3RlbU5hbWUoKQotICAgICAgICA8PCAiJyBhbHJlYWR5IHJlZ2lzdGVyZWQiOwotCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSByZW5kZXJlciBjYW4gYWNjZXNzIHRoZSBkZWNvZGVycyBuZWNlc3NhcnkgdG8gdXNlIHRoZQotICAgIC8vIGtleSBzeXN0ZW0uCi0gICAgaWYgKCFwcm9wZXJ0aWVzLT5Vc2VBZXNEZWNyeXB0b3IoKSAmJiAhQXJlUGxhdGZvcm1EZWNvZGVyc0F2YWlsYWJsZSgpKSB7Ci0gICAgICBETE9HKFdBUk5JTkcpIDw8IHByb3BlcnRpZXMtPkdldEtleVN5c3RlbU5hbWUoKSA8PCAiIG5vdCByZWdpc3RlcmVkIjsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotCi0gICAga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF9bcHJvcGVydGllcy0+R2V0S2V5U3lzdGVtTmFtZSgpXSA9Ci0gICAgICAgIHN0ZDo6bW92ZShwcm9wZXJ0aWVzKTsKLSAgfQotfQotCi0vLyBBZGRzIHRoZSBNSU1FIHR5cGUgd2l0aCB0aGUgY29kZWMgbWFzayBhZnRlciB2ZXJpZnlpbmcgdGhlIHZhbGlkaXR5LgotLy8gT25seSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBtb2RpZnkgfG1pbWVfdHlwZV90b19jb2RlY19tYXNrX21hcF98Lgotdm9pZCBLZXlTeXN0ZW1zSW1wbDo6UmVnaXN0ZXJNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWVDb2RlYyBjb2RlY3NfbWFzaykgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotICBEQ0hFQ0soIW1pbWVfdHlwZV90b19jb2RlY19tYXNrX21hcF8uY291bnQobWltZV90eXBlKSk7Ci0gIERDSEVDSyhJc1ZhbGlkTWltZVR5cGVDb2RlY3NDb21iaW5hdGlvbihtaW1lX3R5cGUsIGNvZGVjc19tYXNrKSk7Ci0KLSAgbWltZV90eXBlX3RvX2NvZGVjX21hc2tfbWFwX1ttaW1lX3R5cGVdID0gc3RhdGljX2Nhc3Q8RW1lQ29kZWM+KGNvZGVjc19tYXNrKTsKLX0KLQotLy8gUmV0dXJucyB3aGV0aGVyIHxtaW1lX3R5cGV8IGZvbGxvd3MgYSB2YWxpZCBmb3JtYXQgYW5kIHRoZSBzcGVjaWZpZWQgY29kZWNzCi0vLyBhcmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBiYXNlZCBvbiB8Kl9jb2RlY19tYXNrX3wuCi0vLyBPbmx5IGF1ZGlvLyBvciB2aWRlby8gTUlNRSB0eXBlcyB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29kZWNzIGFyZSBhbGxvd2VkLgotYm9vbCBLZXlTeXN0ZW1zSW1wbDo6SXNWYWxpZE1pbWVUeXBlQ29kZWNzQ29tYmluYXRpb24oCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgU3VwcG9ydGVkQ29kZWNzIGNvZGVjc19tYXNrKSBjb25zdCB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0gIGlmICghY29kZWNzX21hc2spIHJldHVybiBmYWxzZTsKLSAgaWYgKGJhc2U6OlN0YXJ0c1dpdGgobWltZV90eXBlLCAiYXVkaW8vIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpCi0gICAgcmV0dXJuICEoY29kZWNzX21hc2sgJiB+YXVkaW9fY29kZWNfbWFza18pOwotICBpZiAoYmFzZTo6U3RhcnRzV2l0aChtaW1lX3R5cGUsICJ2aWRlby8iLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkKLSAgICByZXR1cm4gIShjb2RlY3NfbWFzayAmIH52aWRlb19jb2RlY19tYXNrXyk7Ci0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEtleVN5c3RlbXNJbXBsOjpJc1N1cHBvcnRlZEluaXREYXRhVHlwZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSwgRW1lSW5pdERhdGFUeXBlIGluaXRfZGF0YV90eXBlKSBjb25zdCB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgS2V5U3lzdGVtUHJvcGVydGllc01hcDo6Y29uc3RfaXRlcmF0b3Iga2V5X3N5c3RlbV9pdGVyID0KLSAgICAgIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmZpbmQoa2V5X3N5c3RlbSk7Ci0gIGlmIChrZXlfc3lzdGVtX2l0ZXIgPT0ga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW5kKCkpIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBrZXlfc3lzdGVtX2l0ZXItPnNlY29uZC0+SXNTdXBwb3J0ZWRJbml0RGF0YVR5cGUoaW5pdF9kYXRhX3R5cGUpOwotfQotCi1zdGQ6OnN0cmluZyBLZXlTeXN0ZW1zSW1wbDo6R2V0S2V5U3lzdGVtTmFtZUZvclVNQSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotCi0gIEtleVN5c3RlbU5hbWVGb3JVTUFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPQotICAgICAga2V5X3N5c3RlbV9uYW1lX2Zvcl91bWFfbWFwXy5maW5kKGtleV9zeXN0ZW0pOwotICBpZiAoaXRlciA9PSBrZXlfc3lzdGVtX25hbWVfZm9yX3VtYV9tYXBfLmVuZCgpKQotICAgIHJldHVybiBrVW5rbm93bktleVN5c3RlbU5hbWVGb3JVTUE7Ci0KLSAgcmV0dXJuIGl0ZXItPnNlY29uZDsKLX0KLQotYm9vbCBLZXlTeXN0ZW1zSW1wbDo6VXNlQWVzRGVjcnlwdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgS2V5U3lzdGVtUHJvcGVydGllc01hcDo6Y29uc3RfaXRlcmF0b3Iga2V5X3N5c3RlbV9pdGVyID0KLSAgICAgIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmZpbmQoa2V5X3N5c3RlbSk7Ci0gIGlmIChrZXlfc3lzdGVtX2l0ZXIgPT0ga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW5kKCkpIHsKLSAgICBETE9HKEVSUk9SKSA8PCBrZXlfc3lzdGVtIDw8ICIgaXMgbm90IGEga25vd24gc3lzdGVtIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIGtleV9zeXN0ZW1faXRlci0+c2Vjb25kLT5Vc2VBZXNEZWNyeXB0b3IoKTsKLX0KLQotI2lmIGRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotc3RkOjpzdHJpbmcgS2V5U3lzdGVtc0ltcGw6OkdldFBlcHBlclR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIGNvbnN0IHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLQotICBLZXlTeXN0ZW1Qcm9wZXJ0aWVzTWFwOjpjb25zdF9pdGVyYXRvciBrZXlfc3lzdGVtX2l0ZXIgPQotICAgICAga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZmluZChrZXlfc3lzdGVtKTsKLSAgaWYgKGtleV9zeXN0ZW1faXRlciA9PSBrZXlfc3lzdGVtX3Byb3BlcnRpZXNfbWFwXy5lbmQoKSkgewotICAgIERMT0coRkFUQUwpIDw8IGtleV9zeXN0ZW0gPDwgIiBpcyBub3QgYSBrbm93biBzeXN0ZW0iOwotICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwotICB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiB0eXBlID0ga2V5X3N5c3RlbV9pdGVyLT5zZWNvbmQtPkdldFBlcHBlclR5cGUoKTsKLSAgRExPR19JRihGQVRBTCwgdHlwZS5lbXB0eSgpKQotICAgICAgPDwga2V5X3N5c3RlbV9pdGVyLT5zZWNvbmQtPkdldEtleVN5c3RlbU5hbWUoKSA8PCAiIGlzIG5vdCBQZXBwZXItYmFzZWQiOwotICByZXR1cm4gdHlwZTsKLX0KLQotI2VuZGlmCi0KLXZvaWQgS2V5U3lzdGVtc0ltcGw6OkFkZENvZGVjTWFzayhFbWVNZWRpYVR5cGUgbWVkaWFfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWMsIHVpbnQzMl90IG1hc2spIHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLSAgRENIRUNLKCFjb2RlY19zdHJpbmdfbWFwXy5jb3VudChjb2RlYykpOwotICBjb2RlY19zdHJpbmdfbWFwX1tjb2RlY10gPSBzdGF0aWNfY2FzdDxFbWVDb2RlYz4obWFzayk7Ci0gIGlmIChtZWRpYV90eXBlID09IEVtZU1lZGlhVHlwZTo6QVVESU8pIHsKLSAgICBhdWRpb19jb2RlY19tYXNrXyB8PSBtYXNrOwotICB9IGVsc2UgewotICAgIHZpZGVvX2NvZGVjX21hc2tfIHw9IG1hc2s7Ci0gIH0KLX0KLQotdm9pZCBLZXlTeXN0ZW1zSW1wbDo6QWRkTWltZVR5cGVDb2RlY01hc2soY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvZGVjc19tYXNrKSB7Ci0gIFJlZ2lzdGVyTWltZVR5cGUobWltZV90eXBlLCBzdGF0aWNfY2FzdDxFbWVDb2RlYz4oY29kZWNzX21hc2spKTsKLX0KLQotYm9vbCBLZXlTeXN0ZW1zSW1wbDo6SXNTdXBwb3J0ZWRLZXlTeXN0ZW0oY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIGNvbnN0IHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLQotICBpZiAoIWtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmNvdW50KGtleV9zeXN0ZW0pKSByZXR1cm4gZmFsc2U7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUVtZUNvbmZpZ1J1bGUgS2V5U3lzdGVtc0ltcGw6OkdldENvbnRlbnRUeXBlQ29uZmlnUnVsZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSwgRW1lTWVkaWFUeXBlIG1lZGlhX3R5cGUsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcl9taW1lX3R5cGUsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MpIGNvbnN0IHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLQotICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBNSU1FIHR5cGUgbWF0Y2hlcyB8bWVkaWFfdHlwZXwuCi0gIHN3aXRjaCAobWVkaWFfdHlwZSkgewotICAgIGNhc2UgRW1lTWVkaWFUeXBlOjpBVURJTzoKLSAgICAgIGlmICghYmFzZTo6U3RhcnRzV2l0aChjb250YWluZXJfbWltZV90eXBlLCAiYXVkaW8vIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkKLSAgICAgICAgcmV0dXJuIEVtZUNvbmZpZ1J1bGU6Ok5PVF9TVVBQT1JURUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEVtZU1lZGlhVHlwZTo6VklERU86Ci0gICAgICBpZiAoIWJhc2U6OlN0YXJ0c1dpdGgoY29udGFpbmVyX21pbWVfdHlwZSwgInZpZGVvLyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpCi0gICAgICAgIHJldHVybiBFbWVDb25maWdSdWxlOjpOT1RfU1VQUE9SVEVEOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICAvLyBMb29rIHVwIHRoZSBrZXkgc3lzdGVtJ3Mgc3VwcG9ydGVkIGNvZGVjcy4KLSAgS2V5U3lzdGVtUHJvcGVydGllc01hcDo6Y29uc3RfaXRlcmF0b3Iga2V5X3N5c3RlbV9pdGVyID0KLSAgICAgIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmZpbmQoa2V5X3N5c3RlbSk7Ci0gIGlmIChrZXlfc3lzdGVtX2l0ZXIgPT0ga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW5kKCkpIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVtZUNvbmZpZ1J1bGU6Ok5PVF9TVVBQT1JURUQ7Ci0gIH0KLQotICBTdXBwb3J0ZWRDb2RlY3Mga2V5X3N5c3RlbV9jb2RlY19tYXNrID0KLSAgICAgIGtleV9zeXN0ZW1faXRlci0+c2Vjb25kLT5HZXRTdXBwb3J0ZWRDb2RlY3MoKTsKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gIFN1cHBvcnRlZENvZGVjcyBrZXlfc3lzdGVtX3NlY3VyZV9jb2RlY19tYXNrID0KLSAgICAgIGtleV9zeXN0ZW1faXRlci0+c2Vjb25kLT5HZXRTdXBwb3J0ZWRTZWN1cmVDb2RlY3MoKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotCi0gIC8vIENoZWNrIHRoYXQgdGhlIGNvbnRhaW5lciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGtleSBzeXN0ZW0uIChUaGlzIGNoZWNrIGlzCi0gIC8vIG5lY2Vzc2FyeSBiZWNhdXNlIHxjb2RlY3N8IG1heSBiZSBlbXB0eS4pCi0gIFN1cHBvcnRlZENvZGVjcyBtaW1lX3R5cGVfY29kZWNfbWFzayA9Ci0gICAgICBHZXRDb2RlY01hc2tGb3JNaW1lVHlwZShjb250YWluZXJfbWltZV90eXBlKTsKLSAgaWYgKChrZXlfc3lzdGVtX2NvZGVjX21hc2sgJiBtaW1lX3R5cGVfY29kZWNfbWFzaykgPT0gMCkKLSAgICByZXR1cm4gRW1lQ29uZmlnUnVsZTo6Tk9UX1NVUFBPUlRFRDsKLQotICAvLyBDaGVjayB0aGF0IHRoZSBjb2RlY3MgYXJlIHN1cHBvcnRlZCBieSB0aGUga2V5IHN5c3RlbSBhbmQgY29udGFpbmVyLgotICBFbWVDb25maWdSdWxlIHN1cHBvcnQgPSBFbWVDb25maWdSdWxlOjpTVVBQT1JURUQ7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZWNzLnNpemUoKTsgaSsrKSB7Ci0gICAgU3VwcG9ydGVkQ29kZWNzIGNvZGVjID0gR2V0Q29kZWNGb3JTdHJpbmcoY29kZWNzW2ldKTsKLSAgICBpZiAoKGNvZGVjICYga2V5X3N5c3RlbV9jb2RlY19tYXNrICYgbWltZV90eXBlX2NvZGVjX21hc2spID09IDApCi0gICAgICByZXR1cm4gRW1lQ29uZmlnUnVsZTo6Tk9UX1NVUFBPUlRFRDsKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgY29kZWMgc3VwcG9ydHMgYSBoYXJkd2FyZS1zZWN1cmUgbW9kZS4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBwcmV2ZW50IG1peGluZyBvZiBub24taGFyZHdhcmUtc2VjdXJlIGNvZGVjcyB3aXRoIGhhcmR3YXJlLXNlY3VyZSBjb2RlY3MsCi0gICAgLy8gc2luY2UgdGhlIG1vZGUgaXMgZml4ZWQgYXQgQ0RNIGNyZWF0aW9uLgotICAgIC8vCi0gICAgLy8gQmVjYXVzZSB0aGUgY2hlY2sgZm9yIHJlZ3VsYXIgY29kZWMgc3VwcG9ydCBpcyBlYXJseS1leGl0LCB3ZSBkb24ndCBoYXZlCi0gICAgLy8gdG8gY29uc2lkZXIgY29kZWNzIHRoYXQgYXJlIG9ubHkgc3VwcG9ydGVkIGluIGhhcmR3YXJlLXNlY3VyZSBtb2RlLiBXZQotICAgIC8vIGNvdWxkIGRvIHNvLCBhbmQgbWFrZSB1c2Ugb2YgSFdfU0VDVVJFX0NPREVDU19SRVFVSVJFRCwgaWYgaXQgdHVybnMgb3V0Ci0gICAgLy8gdGhhdCBoYXJkd2FyZS1zZWN1cmUtb25seSBjb2RlY3MgYWN0dWFsbHkgZXhpc3QgYW5kIGFyZSB1c2VmdWwuCi0gICAgaWYgKChjb2RlYyAmIGtleV9zeXN0ZW1fc2VjdXJlX2NvZGVjX21hc2spID09IDApCi0gICAgICBzdXBwb3J0ID0gRW1lQ29uZmlnUnVsZTo6SFdfU0VDVVJFX0NPREVDU19OT1RfQUxMT1dFRDsKLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotICB9Ci0KLSAgcmV0dXJuIHN1cHBvcnQ7Ci19Ci0KLUVtZUNvbmZpZ1J1bGUgS2V5U3lzdGVtc0ltcGw6OkdldFJvYnVzdG5lc3NDb25maWdSdWxlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLCBFbWVNZWRpYVR5cGUgbWVkaWFfdHlwZSwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgcmVxdWVzdGVkX3JvYnVzdG5lc3MpIGNvbnN0IHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLQotICBLZXlTeXN0ZW1Qcm9wZXJ0aWVzTWFwOjpjb25zdF9pdGVyYXRvciBrZXlfc3lzdGVtX2l0ZXIgPQotICAgICAga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZmluZChrZXlfc3lzdGVtKTsKLSAgaWYgKGtleV9zeXN0ZW1faXRlciA9PSBrZXlfc3lzdGVtX3Byb3BlcnRpZXNfbWFwXy5lbmQoKSkgewotICAgIE5PVFJFQUNIRUQoKTsKLSAgICByZXR1cm4gRW1lQ29uZmlnUnVsZTo6Tk9UX1NVUFBPUlRFRDsKLSAgfQotICByZXR1cm4ga2V5X3N5c3RlbV9pdGVyLT5zZWNvbmQtPkdldFJvYnVzdG5lc3NDb25maWdSdWxlKG1lZGlhX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkX3JvYnVzdG5lc3MpOwotfQotCi1FbWVTZXNzaW9uVHlwZVN1cHBvcnQgS2V5U3lzdGVtc0ltcGw6OkdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIGNvbnN0IHsKLSAgRENIRUNLX0NBTExFRF9PTl9WQUxJRF9USFJFQUQodGhyZWFkX2NoZWNrZXJfKTsKLQotICBLZXlTeXN0ZW1Qcm9wZXJ0aWVzTWFwOjpjb25zdF9pdGVyYXRvciBrZXlfc3lzdGVtX2l0ZXIgPQotICAgICAga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZmluZChrZXlfc3lzdGVtKTsKLSAgaWYgKGtleV9zeXN0ZW1faXRlciA9PSBrZXlfc3lzdGVtX3Byb3BlcnRpZXNfbWFwXy5lbmQoKSkgewotICAgIE5PVFJFQUNIRUQoKTsKLSAgICByZXR1cm4gRW1lU2Vzc2lvblR5cGVTdXBwb3J0OjpJTlZBTElEOwotICB9Ci0gIHJldHVybiBrZXlfc3lzdGVtX2l0ZXItPnNlY29uZC0+R2V0UGVyc2lzdGVudExpY2Vuc2VTZXNzaW9uU3VwcG9ydCgpOwotfQotCi1FbWVTZXNzaW9uVHlwZVN1cHBvcnQgS2V5U3lzdGVtc0ltcGw6OkdldFBlcnNpc3RlbnRSZWxlYXNlTWVzc2FnZVNlc3Npb25TdXBwb3J0KAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgS2V5U3lzdGVtUHJvcGVydGllc01hcDo6Y29uc3RfaXRlcmF0b3Iga2V5X3N5c3RlbV9pdGVyID0KLSAgICAgIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmZpbmQoa2V5X3N5c3RlbSk7Ci0gIGlmIChrZXlfc3lzdGVtX2l0ZXIgPT0ga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW5kKCkpIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6SU5WQUxJRDsKLSAgfQotICByZXR1cm4ga2V5X3N5c3RlbV9pdGVyLT5zZWNvbmQtPkdldFBlcnNpc3RlbnRSZWxlYXNlTWVzc2FnZVNlc3Npb25TdXBwb3J0KCk7Ci19Ci0KLUVtZUZlYXR1cmVTdXBwb3J0IEtleVN5c3RlbXNJbXBsOjpHZXRQZXJzaXN0ZW50U3RhdGVTdXBwb3J0KAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSBjb25zdCB7Ci0gIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7Ci0KLSAgS2V5U3lzdGVtUHJvcGVydGllc01hcDo6Y29uc3RfaXRlcmF0b3Iga2V5X3N5c3RlbV9pdGVyID0KLSAgICAgIGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmZpbmQoa2V5X3N5c3RlbSk7Ci0gIGlmIChrZXlfc3lzdGVtX2l0ZXIgPT0ga2V5X3N5c3RlbV9wcm9wZXJ0aWVzX21hcF8uZW5kKCkpIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEVtZUZlYXR1cmVTdXBwb3J0OjpJTlZBTElEOwotICB9Ci0gIHJldHVybiBrZXlfc3lzdGVtX2l0ZXItPnNlY29uZC0+R2V0UGVyc2lzdGVudFN0YXRlU3VwcG9ydCgpOwotfQotCi1FbWVGZWF0dXJlU3VwcG9ydCBLZXlTeXN0ZW1zSW1wbDo6R2V0RGlzdGluY3RpdmVJZGVudGlmaWVyU3VwcG9ydCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgewotICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOwotCi0gIEtleVN5c3RlbVByb3BlcnRpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGtleV9zeXN0ZW1faXRlciA9Ci0gICAgICBrZXlfc3lzdGVtX3Byb3BlcnRpZXNfbWFwXy5maW5kKGtleV9zeXN0ZW0pOwotICBpZiAoa2V5X3N5c3RlbV9pdGVyID09IGtleV9zeXN0ZW1fcHJvcGVydGllc19tYXBfLmVuZCgpKSB7Ci0gICAgTk9UUkVBQ0hFRCgpOwotICAgIHJldHVybiBFbWVGZWF0dXJlU3VwcG9ydDo6SU5WQUxJRDsKLSAgfQotICByZXR1cm4ga2V5X3N5c3RlbV9pdGVyLT5zZWNvbmQtPkdldERpc3RpbmN0aXZlSWRlbnRpZmllclN1cHBvcnQoKTsKLX0KLQotS2V5U3lzdGVtcyogS2V5U3lzdGVtczo6R2V0SW5zdGFuY2UoKSB7IHJldHVybiBLZXlTeXN0ZW1zSW1wbDo6R2V0SW5zdGFuY2UoKTsgfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEluaXREYXRhVHlwZShjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtZUluaXREYXRhVHlwZSBpbml0X2RhdGFfdHlwZSkgewotICByZXR1cm4gS2V5U3lzdGVtc0ltcGw6OkdldEluc3RhbmNlKCktPklzU3VwcG9ydGVkSW5pdERhdGFUeXBlKGtleV9zeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9kYXRhX3R5cGUpOwotfQotCi1zdGQ6OnN0cmluZyBHZXRLZXlTeXN0ZW1OYW1lRm9yVU1BKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSB7Ci0gIHJldHVybiBLZXlTeXN0ZW1zSW1wbDo6R2V0SW5zdGFuY2UoKS0+R2V0S2V5U3lzdGVtTmFtZUZvclVNQShrZXlfc3lzdGVtKTsKLX0KLQotYm9vbCBDYW5Vc2VBZXNEZWNyeXB0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIHsKLSAgcmV0dXJuIEtleVN5c3RlbXNJbXBsOjpHZXRJbnN0YW5jZSgpLT5Vc2VBZXNEZWNyeXB0b3Ioa2V5X3N5c3RlbSk7Ci19Ci0KLSNpZiBkZWZpbmVkKEVOQUJMRV9QRVBQRVJfQ0RNUykKLXN0ZDo6c3RyaW5nIEdldFBlcHBlclR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIHsKLSAgcmV0dXJuIEtleVN5c3RlbXNJbXBsOjpHZXRJbnN0YW5jZSgpLT5HZXRQZXBwZXJUeXBlKGtleV9zeXN0ZW0pOwotfQotI2VuZGlmCi0KLS8vIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGZvciB0ZXN0aW5nIHB1cnBvc2Ugb25seS4gVGhlIGRlY2xhcmF0aW9uIGluIHRoZQotLy8gaGVhZGVyIGZpbGUgaXMgZ3VhcmRlZCBieSAiI2lmIGRlZmluZWQoVU5JVF9URVNUKSIgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkCi0vLyBieSB0ZXN0cyBidXQgbm90IG5vbi10ZXN0IGNvZGUuIEhvd2V2ZXIsIHRoaXMgLmNjIGZpbGUgaXMgY29tcGlsZWQgYXMgcGFydCBvZgotLy8gIm1lZGlhIiB3aGVyZSAiVU5JVF9URVNUIiBpcyBub3QgZGVmaW5lZC4gU28gd2UgbmVlZCB0byBzcGVjaWZ5Ci0vLyAiTUVESUFfRVhQT1JUIiBoZXJlIGFnYWluIHNvIHRoYXQgdGhleSBhcmUgdmlzaWJsZSB0byB0ZXN0cy4KLQotTUVESUFfRVhQT1JUIHZvaWQgQWRkQ29kZWNNYXNrKEVtZU1lZGlhVHlwZSBtZWRpYV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlYywgdWludDMyX3QgbWFzaykgewotICBLZXlTeXN0ZW1zSW1wbDo6R2V0SW5zdGFuY2UoKS0+QWRkQ29kZWNNYXNrKG1lZGlhX3R5cGUsIGNvZGVjLCBtYXNrKTsKLX0KLQotTUVESUFfRVhQT1JUIHZvaWQgQWRkTWltZVR5cGVDb2RlY01hc2soY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1hc2spIHsKLSAgS2V5U3lzdGVtc0ltcGw6OkdldEluc3RhbmNlKCktPkFkZE1pbWVUeXBlQ29kZWNNYXNrKG1pbWVfdHlwZSwgbWFzayk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbXMuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1Y2ZjZmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfS0VZX1NZU1RFTVNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfS0VZX1NZU1RFTVNfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbWVfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gUHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBxdWVyeWluZyByZWdpc3RlcmVkIGtleSBzeXN0ZW1zLgotLy8KLS8vIE1hbnkgb2YgdGhlIG9yaWdpbmFsIHN0YXRpYyBtZXRob2RzIGFyZSBzdGlsbCBhdmFpbGFibGUsIHRoZXkgc2hvdWxkIGJlCi0vLyBtaWdyYXRlZCBpbnRvIHRoaXMgaW50ZXJmYWNlIG92ZXIgdGltZSAob3IgcmVtb3ZlZCkuCi0vLwotLy8gVE9ETyhzYW5kZXJzZCk6IFByb3ZpZGUgR2V0S2V5U3lzdGVtKCkgc28gdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHBhc3MKLS8vIHxrZXlfc3lzdGVtfCB0byBldmVyeSBtZXRob2QuIGh0dHA6Ly9jcmJ1Zy5jb20vNDU3NDM4Ci1jbGFzcyBNRURJQV9FWFBPUlQgS2V5U3lzdGVtcyB7Ci0gcHVibGljOgotICBzdGF0aWMgS2V5U3lzdGVtcyogR2V0SW5zdGFuY2UoKTsKLQotICAvLyBSZXR1cm5zIHdoZXRoZXIgfGtleV9zeXN0ZW18IGlzIGEgc3VwcG9ydGVkIGtleSBzeXN0ZW0uCi0gIHZpcnR1YWwgYm9vbCBJc1N1cHBvcnRlZEtleVN5c3RlbShjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgd2hldGhlciB8aW5pdF9kYXRhX3R5cGV8IGlzIHN1cHBvcnRlZCBieSB8a2V5X3N5c3RlbXwuCi0gIHZpcnR1YWwgYm9vbCBJc1N1cHBvcnRlZEluaXREYXRhVHlwZSgKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLCBFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUpIGNvbnN0ID0gMDsKLQotICAvLyBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIHJ1bGUgZm9yIHN1cHBvcnRpbmcgYSBjb250YWluZXIgYW5kIGxpc3Qgb2YKLSAgLy8gY29kZWNzLgotICB2aXJ0dWFsIEVtZUNvbmZpZ1J1bGUgR2V0Q29udGVudFR5cGVDb25maWdSdWxlKAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sIEVtZU1lZGlhVHlwZSBtZWRpYV90eXBlLAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRhaW5lcl9taW1lX3R5cGUsCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcykgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gcnVsZSBmb3Igc3VwcG9ydGluZyBhIHJvYnVzdG5lc3MgcmVxdWlyZW1lbnQuCi0gIHZpcnR1YWwgRW1lQ29uZmlnUnVsZSBHZXRSb2J1c3RuZXNzQ29uZmlnUnVsZSgKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLCBFbWVNZWRpYVR5cGUgbWVkaWFfdHlwZSwKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXF1ZXN0ZWRfcm9idXN0bmVzcykgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN1cHBvcnQgfGtleV9zeXN0ZW18IHByb3ZpZGVzIGZvciBwZXJzaXN0ZW50LWxpY2Vuc2Ugc2Vzc2lvbnMuCi0gIHZpcnR1YWwgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN1cHBvcnQgfGtleV9zeXN0ZW18IHByb3ZpZGVzIGZvciBwZXJzaXN0ZW50LXJlbGVhc2UtbWVzc2FnZQotICAvLyBzZXNzaW9ucy4KLSAgdmlydHVhbCBFbWVTZXNzaW9uVHlwZVN1cHBvcnQgR2V0UGVyc2lzdGVudFJlbGVhc2VNZXNzYWdlU2Vzc2lvblN1cHBvcnQoCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN1cHBvcnQgfGtleV9zeXN0ZW18IHByb3ZpZGVzIGZvciBwZXJzaXN0ZW50IHN0YXRlLgotICB2aXJ0dWFsIEVtZUZlYXR1cmVTdXBwb3J0IEdldFBlcnNpc3RlbnRTdGF0ZVN1cHBvcnQoCi0gICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3QgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIHN1cHBvcnQgfGtleV9zeXN0ZW18IHByb3ZpZGVzIGZvciBkaXN0aW5jdGl2ZSBpZGVudGlmaWVycy4KLSAgdmlydHVhbCBFbWVGZWF0dXJlU3VwcG9ydCBHZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJTdXBwb3J0KAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pIGNvbnN0ID0gMDsKLQotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB+S2V5U3lzdGVtcygpIHt9Ci19OwotCi0vLyBUT0RPKGRkb3J3aW4pOiBXZWJDb250ZW50RGVjcnlwdGlvbk1vZHVsZVNlc3Npb25JbXBsOjppbml0aWFsaXplTmV3U2Vzc2lvbigpCi0vLyBpcyB2aW9sYXRpbmcgdGhpcyBydWxlISBodHRwczovL2NyYnVnLmNvbS8yNDk5NzYuCi0vLyBVc2UgZm9yIHByZWZpeGVkIEVNRSBvbmx5IQotTUVESUFfRVhQT1JUIGJvb2wgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoSW5pdERhdGFUeXBlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtLCBFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUpOwotCi0vLyBSZXR1cm5zIGEgbmFtZSBmb3IgfGtleV9zeXN0ZW18IHN1aXRhYmxlIHRvIFVNQSBsb2dnaW5nLgotTUVESUFfRVhQT1JUIHN0ZDo6c3RyaW5nIEdldEtleVN5c3RlbU5hbWVGb3JVTUEoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0pOwotCi0vLyBSZXR1cm5zIHdoZXRoZXIgQWVzRGVjcnlwdG9yIGNhbiBiZSB1c2VkIGZvciB0aGUgZ2l2ZW4gfGtleV9zeXN0ZW18LgotTUVESUFfRVhQT1JUIGJvb2wgQ2FuVXNlQWVzRGVjcnlwdG9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKTsKLQotI2lmIGRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotLy8gUmV0dXJucyB0aGUgUGVwcGVyIE1JTUUgdHlwZSBmb3IgfGtleV9zeXN0ZW18LgotLy8gUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgfGtleV9zeXN0ZW18IGlzIHVua25vd24gb3Igbm90IFBlcHBlci1iYXNlZC4KLU1FRElBX0VYUE9SVCBzdGQ6OnN0cmluZyBHZXRQZXBwZXJUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChVTklUX1RFU1QpCi0vLyBIZWxwZXIgZnVuY3Rpb25zIHRvIGFkZCBjb250YWluZXIvY29kZWMgdHlwZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCi0vLyBDYWxsIEFkZENvZGVjTWFzaygpIGZpcnN0IHRvIGVuc3VyZSB0aGUgbWFzayB2YWx1ZXMgcGFzc2VkIHRvCi0vLyBBZGRNaW1lVHlwZUNvZGVjTWFzaygpIGFscmVhZHkgZXhpc3QuCi1NRURJQV9FWFBPUlQgdm9pZCBBZGRDb2RlY01hc2soRW1lTWVkaWFUeXBlIG1lZGlhX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjLCB1aW50MzJfdCBtYXNrKTsKLU1FRElBX0VYUE9SVCB2b2lkIEFkZE1pbWVUeXBlQ29kZWNNYXNrKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXNrKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChVTklUX1RFU1QpCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX0tFWV9TWVNURU1TX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtc191bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1zX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODVhYmEzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL2tleV9zeXN0ZW1zX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNzY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gVE9ETyhzYW5kZXJzZCk6IFJlZmFjdG9yIHRvIHJlbW92ZSByZWNvbXB1dGVkIGNvZGVjIGFycmF5cywgYW5kIGdlbmVyYWxseQotLy8gc2hvcnRlbiBhbmQgaW1wcm92ZSBjb3ZlcmFnZS4KLS8vICAgLSBodHRwOi8vY3JidWcuY29tLzQxNzQ0NAotLy8gICAtIGh0dHA6Ly9jcmJ1Zy5jb20vNDU3NDM4Ci0vLyBUT0RPKHNhbmRlcnNkKTogQWRkIHRlc3RzIHRvIGNvdmVyIGNvZGVjIHZlY3RvcnMgd2l0aCBlbXB0eSBpdGVtcy4KLS8vIGh0dHA6Ly9jcmJ1Zy5jb20vNDE3NDYxCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2VtZV9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9rZXlfc3lzdGVtcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfY2xpZW50LmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlc2UgYXJlIHRoZSAoZmFrZSkga2V5IHN5c3RlbXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlc2UgdGVzdHMuCi0vLyBrVXNlc0FlcyB1c2VzIHRoZSBBZXNEZWNyeXB0b3IgbGlrZSBDbGVhciBLZXkuCi0vLyBrRXh0ZXJuYWwgdXNlcyBhbiBleHRlcm5hbCBDRE0sIHN1Y2ggYXMgUGVwcGVyLWJhc2VkIG9yIEFuZHJvaWQgcGxhdGZvcm0gQ0RNLgotY29uc3QgY2hhciBrVXNlc0Flc1tdID0gIngtb3JnLmV4YW1wbGUuY2xlYXIiOwotY29uc3QgY2hhciBrVXNlQWVzTmFtZUZvclVNQVtdID0gIlVzZUFlcyI7Ci1jb25zdCBjaGFyIGtFeHRlcm5hbFtdID0gIngtY29tLmV4YW1wbGUudGVzdCI7Ci1jb25zdCBjaGFyIGtFeHRlcm5hbE5hbWVGb3JVTUFbXSA9ICJFeHRlcm5hbCI7Ci0KLWNvbnN0IGNoYXIga0NsZWFyS2V5W10gPSAib3JnLnczLmNsZWFya2V5IjsKLWNvbnN0IGNoYXIga0V4dGVybmFsQ2xlYXJLZXlbXSA9ICJvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleSI7Ci0KLWNvbnN0IGNoYXIga0F1ZGlvV2ViTVtdID0gImF1ZGlvL3dlYm0iOwotY29uc3QgY2hhciBrVmlkZW9XZWJNW10gPSAidmlkZW8vd2VibSI7Ci1jb25zdCBjaGFyIGtBdWRpb0Zvb1tdID0gImF1ZGlvL2ZvbyI7Ci1jb25zdCBjaGFyIGtWaWRlb0Zvb1tdID0gInZpZGVvL2ZvbyI7Ci0KLS8vIFBpY2sgc29tZSBhcmJpdHJhcnkgYml0IGZpZWxkcyBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBpbiBjb25mbGljdCB3aXRoIHRoZQotLy8gcmVhbCBvbmVzLgotZW51bSBUZXN0Q29kZWMgewotICBURVNUX0NPREVDX0ZPT19BVURJTyA9IDEgPDwgMTAsICAvLyBBbiBhdWRpbyBjb2RlYyBmb3IgZm9vIGNvbnRhaW5lci4KLSAgVEVTVF9DT0RFQ19GT09fQVVESU9fQUxMID0gVEVTVF9DT0RFQ19GT09fQVVESU8sCi0gIFRFU1RfQ09ERUNfRk9PX1ZJREVPID0gMSA8PCAxMSwgIC8vIEEgdmlkZW8gY29kZWMgZm9yIGZvbyBjb250YWluZXIuCi0gIFRFU1RfQ09ERUNfRk9PX1ZJREVPX0FMTCA9IFRFU1RfQ09ERUNfRk9PX1ZJREVPLAotICBURVNUX0NPREVDX0ZPT19BTEwgPSBURVNUX0NPREVDX0ZPT19BVURJT19BTEwgfCBURVNUX0NPREVDX0ZPT19WSURFT19BTEwKLX07Ci0KLXN0YXRpY19hc3NlcnQoKFRFU1RfQ09ERUNfRk9PX0FMTCAmIEVNRV9DT0RFQ19BTEwpID09IEVNRV9DT0RFQ19OT05FLAotICAgICAgICAgICAgICAidGVzdCBjb2RlYyBtYXNrcyBzaG91bGQgb25seSB1c2UgaW52YWxpZCBjb2RlYyBtYXNrcyIpOwotCi1jbGFzcyBUZXN0S2V5U3lzdGVtUHJvcGVydGllcyA6IHB1YmxpYyBLZXlTeXN0ZW1Qcm9wZXJ0aWVzIHsKLSBwdWJsaWM6Ci0gIGJvb2wgSXNTdXBwb3J0ZWRJbml0RGF0YVR5cGUoRW1lSW5pdERhdGFUeXBlIGluaXRfZGF0YV90eXBlKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIGluaXRfZGF0YV90eXBlID09IEVtZUluaXREYXRhVHlwZTo6V0VCTTsKLSAgfQotICBTdXBwb3J0ZWRDb2RlY3MgR2V0U3VwcG9ydGVkQ29kZWNzKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBFTUVfQ09ERUNfV0VCTV9BTEwgfCBURVNUX0NPREVDX0ZPT19BTEw7Ci0gIH0KLSAgRW1lQ29uZmlnUnVsZSBHZXRSb2J1c3RuZXNzQ29uZmlnUnVsZSgKLSAgICAgIEVtZU1lZGlhVHlwZSBtZWRpYV90eXBlLAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHJlcXVlc3RlZF9yb2J1c3RuZXNzKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIHJlcXVlc3RlZF9yb2J1c3RuZXNzLmVtcHR5KCkgPyBFbWVDb25maWdSdWxlOjpTVVBQT1JURUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEVtZUNvbmZpZ1J1bGU6Ok5PVF9TVVBQT1JURUQ7Ci0gIH0KLSAgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRSZWxlYXNlTWVzc2FnZVNlc3Npb25TdXBwb3J0KCkKLSAgICAgIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gRW1lU2Vzc2lvblR5cGVTdXBwb3J0OjpOT1RfU1VQUE9SVEVEOwotICB9Ci19OwotCi1jbGFzcyBBZXNLZXlTeXN0ZW1Qcm9wZXJ0aWVzIDogcHVibGljIFRlc3RLZXlTeXN0ZW1Qcm9wZXJ0aWVzIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFlc0tleVN5c3RlbVByb3BlcnRpZXMoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIDogbmFtZV8obmFtZSkge30KLQotICBzdGQ6OnN0cmluZyBHZXRLZXlTeXN0ZW1OYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbmFtZV87IH0KLSAgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6Tk9UX1NVUFBPUlRFRDsKLSAgfQotICBFbWVGZWF0dXJlU3VwcG9ydCBHZXRQZXJzaXN0ZW50U3RhdGVTdXBwb3J0KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBFbWVGZWF0dXJlU3VwcG9ydDo6Tk9UX1NVUFBPUlRFRDsKLSAgfQotICBFbWVGZWF0dXJlU3VwcG9ydCBHZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJTdXBwb3J0KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBFbWVGZWF0dXJlU3VwcG9ydDo6Tk9UX1NVUFBPUlRFRDsKLSAgfQotICBib29sIFVzZUFlc0RlY3J5cHRvcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIG5hbWVfOwotfTsKLQotY2xhc3MgRXh0ZXJuYWxLZXlTeXN0ZW1Qcm9wZXJ0aWVzIDogcHVibGljIFRlc3RLZXlTeXN0ZW1Qcm9wZXJ0aWVzIHsKLSBwdWJsaWM6Ci0gIHN0ZDo6c3RyaW5nIEdldEtleVN5c3RlbU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBrRXh0ZXJuYWw7IH0KLSAgRW1lU2Vzc2lvblR5cGVTdXBwb3J0IEdldFBlcnNpc3RlbnRMaWNlbnNlU2Vzc2lvblN1cHBvcnQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIEVtZVNlc3Npb25UeXBlU3VwcG9ydDo6U1VQUE9SVEVEOwotICB9Ci0gIEVtZUZlYXR1cmVTdXBwb3J0IEdldFBlcnNpc3RlbnRTdGF0ZVN1cHBvcnQoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIEVtZUZlYXR1cmVTdXBwb3J0OjpBTFdBWVNfRU5BQkxFRDsKLSAgfQotICBFbWVGZWF0dXJlU3VwcG9ydCBHZXREaXN0aW5jdGl2ZUlkZW50aWZpZXJTdXBwb3J0KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBFbWVGZWF0dXJlU3VwcG9ydDo6QUxXQVlTX0VOQUJMRUQ7Ci0gIH0KLSAgc3RkOjpzdHJpbmcgR2V0UGVwcGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gImFwcGxpY2F0aW9uL3gtcHBhcGktZXh0ZXJuYWwtY2RtIjsKLSAgfQotfTsKLQotLy8gQWRhcHQgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgpIHRvIHRoZSBuZXcgQVBJLAotLy8gSXNTdXBwb3J0ZWRDb2RlY0NvbWJpbmF0aW9uKCkuCi1zdGF0aWMgYm9vbCBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSB7Ci0gIHJldHVybiAoS2V5U3lzdGVtczo6R2V0SW5zdGFuY2UoKS0+R2V0Q29udGVudFR5cGVDb25maWdSdWxlKAotICAgICAgICAgICAgICBrZXlfc3lzdGVtLCBFbWVNZWRpYVR5cGU6OlZJREVPLCBtaW1lX3R5cGUsIGNvZGVjcykgIT0KLSAgICAgICAgICBFbWVDb25maWdSdWxlOjpOT1RfU1VQUE9SVEVEKTsKLX0KLQotc3RhdGljIGJvb2wgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoQXVkaW9NaW1lVHlwZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcywKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgewotICByZXR1cm4gKEtleVN5c3RlbXM6OkdldEluc3RhbmNlKCktPkdldENvbnRlbnRUeXBlQ29uZmlnUnVsZSgKLSAgICAgICAgICAgICAga2V5X3N5c3RlbSwgRW1lTWVkaWFUeXBlOjpBVURJTywgbWltZV90eXBlLCBjb2RlY3MpICE9Ci0gICAgICAgICAgRW1lQ29uZmlnUnVsZTo6Tk9UX1NVUFBPUlRFRCk7Ci19Ci0KLXN0YXRpYyBib29sIElzU3VwcG9ydGVkS2V5U3lzdGVtKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtKSB7Ci0gIHJldHVybiBLZXlTeXN0ZW1zOjpHZXRJbnN0YW5jZSgpLT5Jc1N1cHBvcnRlZEtleVN5c3RlbShrZXlfc3lzdGVtKTsKLX0KLQotLy8gQWRkcyB0ZXN0IGNvbnRhaW5lciBhbmQgY29kZWMgbWFza3MuCi0vLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIFNldE1lZGlhQ2xpZW50KCkgaWYgYSBNZWRpYUNsaWVudCB3aWxsIGJlCi0vLyBwcm92aWRlZC4KLS8vIE1vcmUgZGV0YWlsczogQWRkWHh4TWFzaygpIHdpbGwgY3JlYXRlIEtleVN5c3RlbXMgaWYgaXQgaGFzbid0IGJlZW4gY3JlYXRlZC4KLS8vIER1cmluZyBLZXlTeXN0ZW1zJ3MgY29uc3RydWN0aW9uIEdldE1lZGlhQ2xpZW50KCkgd2lsbCBiZSB1c2VkIHRvIGFkZCBrZXkKLS8vIHN5c3RlbXMuIEluIHRlc3QgY29kZSwgdGhlIE1lZGlhQ2xpZW50IGlzIHNldCBieSBTZXRNZWRpYUNsaWVudCgpLgotLy8gVGhlcmVmb3JlLCBTZXRNZWRpYUNsaWVudCgpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZQotLy8gTWVkaWFDbGllbnQgaW4gZWZmZWN0IHdoZW4gY29uc3RydWN0aW5nIEtleVN5c3RlbXMuCi1zdGF0aWMgdm9pZCBBZGRDb250YWluZXJBbmRDb2RlY01hc2tzRm9yVGVzdCgpIHsKLSAgLy8gU2luY2UgS2V5U3lzdGVtcyBpcyBhIHNpbmdsZXRvbi4gTWFrZSBzdXJlIHdlIG9ubHkgYWRkIHRlc3QgY29udGFpbmVyIGFuZAotICAvLyBjb2RlYyBtYXNrcyBvbmNlIHBlciBwcm9jZXNzLgotICBzdGF0aWMgYm9vbCBpc190ZXN0X21hc2tzX2FkZGVkID0gZmFsc2U7Ci0KLSAgaWYgKGlzX3Rlc3RfbWFza3NfYWRkZWQpIHJldHVybjsKLQotICBBZGRDb2RlY01hc2soRW1lTWVkaWFUeXBlOjpBVURJTywgImZvb2F1ZGlvIiwgVEVTVF9DT0RFQ19GT09fQVVESU8pOwotICBBZGRDb2RlY01hc2soRW1lTWVkaWFUeXBlOjpWSURFTywgImZvb3ZpZGVvIiwgVEVTVF9DT0RFQ19GT09fVklERU8pOwotICBBZGRNaW1lVHlwZUNvZGVjTWFzaygiYXVkaW8vZm9vIiwgVEVTVF9DT0RFQ19GT09fQVVESU9fQUxMKTsKLSAgQWRkTWltZVR5cGVDb2RlY01hc2soInZpZGVvL2ZvbyIsIFRFU1RfQ09ERUNfRk9PX1ZJREVPX0FMTCk7Ci0KLSAgaXNfdGVzdF9tYXNrc19hZGRlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIENhblJ1bkV4dGVybmFsS2V5U3lzdGVtVGVzdHMoKSB7Ci0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICBpZiAoSGFzUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpKSByZXR1cm4gdHJ1ZTsKLQotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa0V4dGVybmFsKSk7Ci0gIHJldHVybiBmYWxzZTsKLSNlbHNlCi0gIHJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLWNsYXNzIFRlc3RNZWRpYUNsaWVudCA6IHB1YmxpYyBNZWRpYUNsaWVudCB7Ci0gcHVibGljOgotICBUZXN0TWVkaWFDbGllbnQoKTsKLSAgflRlc3RNZWRpYUNsaWVudCgpIG92ZXJyaWRlOwotCi0gIC8vIE1lZGlhQ2xpZW50IGltcGxlbWVudGF0aW9uLgotICB2b2lkIEFkZEtleVN5c3RlbXNJbmZvRm9yVU1BKAotICAgICAgc3RkOjp2ZWN0b3I8S2V5U3lzdGVtSW5mb0ZvclVNQT4qIGtleV9zeXN0ZW1zX2luZm9fZm9yX3VtYSkgZmluYWw7Ci0gIGJvb2wgSXNLZXlTeXN0ZW1zVXBkYXRlTmVlZGVkKCkgZmluYWw7Ci0gIHZvaWQgQWRkU3VwcG9ydGVkS2V5U3lzdGVtcyhzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8S2V5U3lzdGVtUHJvcGVydGllcz4+KgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9zeXN0ZW1zX3Byb3BlcnRpZXMpIG92ZXJyaWRlOwotICB2b2lkIFJlY29yZFJhcHBvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgbWV0cmljLCBjb25zdCBHVVJMJiB1cmwpIGZpbmFsOwotICBib29sIElzU3VwcG9ydGVkVmlkZW9Db25maWcobWVkaWE6OlZpZGVvQ29kZWMgY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTo6VmlkZW9Db2RlY1Byb2ZpbGUgcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkgZmluYWw7Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgSXNLZXlTeXN0ZW1zVXBkYXRlTmVlZGVkKCkgaXMgdHJ1ZQotICAvLyBhZnRlciBBZGRTdXBwb3J0ZWRLZXlTeXN0ZW1zKCkgaXMgY2FsbGVkLgotICB2b2lkIFNldEtleVN5c3RlbXNVcGRhdGVOZWVkZWQoKTsKLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzYWJsZSAia0V4dGVybmFsIiBrZXkgc3lzdGVtIHN1cHBvcnQgc28gdGhhdCB3ZSBjYW4KLSAgLy8gdGVzdCB0aGUga2V5IHN5c3RlbSB1cGRhdGUgY2FzZS4KLSAgdm9pZCBEaXNhYmxlRXh0ZXJuYWxLZXlTeXN0ZW1TdXBwb3J0KCk7Ci0KLSBwcml2YXRlOgotICBib29sIGlzX3VwZGF0ZV9uZWVkZWRfOwotICBib29sIHN1cHBvcnRzX2V4dGVybmFsX2tleV9zeXN0ZW1fOwotfTsKLQotVGVzdE1lZGlhQ2xpZW50OjpUZXN0TWVkaWFDbGllbnQoKQotICAgIDogaXNfdXBkYXRlX25lZWRlZF8odHJ1ZSksIHN1cHBvcnRzX2V4dGVybmFsX2tleV9zeXN0ZW1fKHRydWUpIHt9Ci0KLVRlc3RNZWRpYUNsaWVudDo6flRlc3RNZWRpYUNsaWVudCgpIHt9Ci0KLXZvaWQgVGVzdE1lZGlhQ2xpZW50OjpBZGRLZXlTeXN0ZW1zSW5mb0ZvclVNQSgKLSAgICBzdGQ6OnZlY3RvcjxLZXlTeXN0ZW1JbmZvRm9yVU1BPioga2V5X3N5c3RlbXNfaW5mb19mb3JfdW1hKSB7Ci0gIGtleV9zeXN0ZW1zX2luZm9fZm9yX3VtYS0+cHVzaF9iYWNrKAotICAgICAgbWVkaWE6OktleVN5c3RlbUluZm9Gb3JVTUEoa1VzZXNBZXMsIGtVc2VBZXNOYW1lRm9yVU1BKSk7Ci0gIGtleV9zeXN0ZW1zX2luZm9fZm9yX3VtYS0+cHVzaF9iYWNrKAotICAgICAgbWVkaWE6OktleVN5c3RlbUluZm9Gb3JVTUEoa0V4dGVybmFsLCBrRXh0ZXJuYWxOYW1lRm9yVU1BKSk7Ci19Ci0KLWJvb2wgVGVzdE1lZGlhQ2xpZW50OjpJc0tleVN5c3RlbXNVcGRhdGVOZWVkZWQoKSB7IHJldHVybiBpc191cGRhdGVfbmVlZGVkXzsgfQotCi12b2lkIFRlc3RNZWRpYUNsaWVudDo6QWRkU3VwcG9ydGVkS2V5U3lzdGVtcygKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8S2V5U3lzdGVtUHJvcGVydGllcz4+KiBrZXlfc3lzdGVtcykgewotICBEQ0hFQ0soaXNfdXBkYXRlX25lZWRlZF8pOwotCi0gIGtleV9zeXN0ZW1zLT5lbXBsYWNlX2JhY2sobmV3IEFlc0tleVN5c3RlbVByb3BlcnRpZXMoa1VzZXNBZXMpKTsKLQotICBpZiAoc3VwcG9ydHNfZXh0ZXJuYWxfa2V5X3N5c3RlbV8pCi0gICAga2V5X3N5c3RlbXMtPmVtcGxhY2VfYmFjayhuZXcgRXh0ZXJuYWxLZXlTeXN0ZW1Qcm9wZXJ0aWVzKCkpOwotCi0gIGlzX3VwZGF0ZV9uZWVkZWRfID0gZmFsc2U7Ci19Ci0KLXZvaWQgVGVzdE1lZGlhQ2xpZW50OjpSZWNvcmRSYXBwb3JVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIG1ldHJpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1VSTCYgdXJsKSB7Ci0gIE5PVElNUExFTUVOVEVEKCk7Ci19Ci0KLWJvb2wgVGVzdE1lZGlhQ2xpZW50OjpJc1N1cHBvcnRlZFZpZGVvQ29uZmlnKG1lZGlhOjpWaWRlb0NvZGVjIGNvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OlZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpIHsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGVzdE1lZGlhQ2xpZW50OjpTZXRLZXlTeXN0ZW1zVXBkYXRlTmVlZGVkKCkgeyBpc191cGRhdGVfbmVlZGVkXyA9IHRydWU7IH0KLQotdm9pZCBUZXN0TWVkaWFDbGllbnQ6OkRpc2FibGVFeHRlcm5hbEtleVN5c3RlbVN1cHBvcnQoKSB7Ci0gIHN1cHBvcnRzX2V4dGVybmFsX2tleV9zeXN0ZW1fID0gZmFsc2U7Ci19Ci0KLWNsYXNzIFBvdGVudGlhbGx5U3VwcG9ydGVkTmFtZXNUZXN0TWVkaWFDbGllbnQgOiBwdWJsaWMgVGVzdE1lZGlhQ2xpZW50IHsKLSAgdm9pZCBBZGRTdXBwb3J0ZWRLZXlTeXN0ZW1zKHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxLZXlTeXN0ZW1Qcm9wZXJ0aWVzPj4qCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X3N5c3RlbXNfcHJvcGVydGllcykgZmluYWw7Ci19OwotCi12b2lkIFBvdGVudGlhbGx5U3VwcG9ydGVkTmFtZXNUZXN0TWVkaWFDbGllbnQ6OkFkZFN1cHBvcnRlZEtleVN5c3RlbXMoCi0gICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEtleVN5c3RlbVByb3BlcnRpZXM+Pioga2V5X3N5c3RlbXMpIHsKLSAgLy8gb3JnLnczLmNsZWFya2V5IGlzIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZC4KLSAga2V5X3N5c3RlbXMtPmVtcGxhY2VfYmFjayhuZXcgQWVzS2V5U3lzdGVtUHJvcGVydGllcygiY29tLndpZGV2aW5lLmFscGhhIikpOwotICBrZXlfc3lzdGVtcy0+ZW1wbGFjZV9iYWNrKAotICAgICAgbmV3IEFlc0tleVN5c3RlbVByb3BlcnRpZXMoIm9yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5IikpOwotICBrZXlfc3lzdGVtcy0+ZW1wbGFjZV9iYWNrKAotICAgICAgbmV3IEFlc0tleVN5c3RlbVByb3BlcnRpZXMoIm9yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5LnNvbWV0aGluZyIpKTsKLSAga2V5X3N5c3RlbXMtPmVtcGxhY2VfYmFjaygKLSAgICAgIG5ldyBBZXNLZXlTeXN0ZW1Qcm9wZXJ0aWVzKCJjb20uY2hyb21lY2FzdC5zb21ldGhpbmciKSk7Ci0gIGtleV9zeXN0ZW1zLT5lbXBsYWNlX2JhY2sobmV3IEFlc0tleVN5c3RlbVByb3BlcnRpZXMoIngtc29tZXRoaW5nIikpOwotfQotCi1jbGFzcyBLZXlTeXN0ZW1zUG90ZW50aWFsbHlTdXBwb3J0ZWROYW1lc1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBLZXlTeXN0ZW1zUG90ZW50aWFsbHlTdXBwb3J0ZWROYW1lc1Rlc3QoKSB7Ci0gICAgU2V0TWVkaWFDbGllbnQoJnRlc3RfbWVkaWFfY2xpZW50Xyk7Ci0gIH0KLQotICB+S2V5U3lzdGVtc1BvdGVudGlhbGx5U3VwcG9ydGVkTmFtZXNUZXN0KCkgb3ZlcnJpZGUgewotICAgIC8vIENsZWFyIHRoZSB1c2Ugb2YgfHRlc3RfbWVkaWFfY2xpZW50X3wsIHdoaWNoIHdhcyBzZXQgaW4gU2V0VXAoKS4KLSAgICBTZXRNZWRpYUNsaWVudChOVUxMKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgUG90ZW50aWFsbHlTdXBwb3J0ZWROYW1lc1Rlc3RNZWRpYUNsaWVudCB0ZXN0X21lZGlhX2NsaWVudF87Ci19OwotCi1jbGFzcyBLZXlTeXN0ZW1zVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIEtleVN5c3RlbXNUZXN0KCkgewotICAgIHZwOF9jb2RlY18ucHVzaF9iYWNrKCJ2cDgiKTsKLQotICAgIHZwODBfY29kZWNfLnB1c2hfYmFjaygidnA4LjAiKTsKLQotICAgIHZwOV9jb2RlY18ucHVzaF9iYWNrKCJ2cDkiKTsKLQotICAgIHZwOTBfY29kZWNfLnB1c2hfYmFjaygidnA5LjAiKTsKLQotICAgIHZvcmJpc19jb2RlY18ucHVzaF9iYWNrKCJ2b3JiaXMiKTsKLQotICAgIHZwOF9hbmRfdm9yYmlzX2NvZGVjc18ucHVzaF9iYWNrKCJ2cDgiKTsKLSAgICB2cDhfYW5kX3ZvcmJpc19jb2RlY3NfLnB1c2hfYmFjaygidm9yYmlzIik7Ci0KLSAgICB2cDlfYW5kX3ZvcmJpc19jb2RlY3NfLnB1c2hfYmFjaygidnA5Iik7Ci0gICAgdnA5X2FuZF92b3JiaXNfY29kZWNzXy5wdXNoX2JhY2soInZvcmJpcyIpOwotCi0gICAgZm9vdmlkZW9fY29kZWNfLnB1c2hfYmFjaygiZm9vdmlkZW8iKTsKLQotICAgIGZvb3ZpZGVvX2V4dGVuZGVkX2NvZGVjXy5wdXNoX2JhY2soImZvb3ZpZGVvLjRENDAwQyIpOwotCi0gICAgZm9vdmlkZW9fZG90X2NvZGVjXy5wdXNoX2JhY2soImZvb3ZpZGVvLiIpOwotCi0gICAgZm9vYXVkaW9fY29kZWNfLnB1c2hfYmFjaygiZm9vYXVkaW8iKTsKLQotICAgIGZvb3ZpZGVvX2FuZF9mb29hdWRpb19jb2RlY3NfLnB1c2hfYmFjaygiZm9vdmlkZW8iKTsKLSAgICBmb292aWRlb19hbmRfZm9vYXVkaW9fY29kZWNzXy5wdXNoX2JhY2soImZvb2F1ZGlvIik7Ci0KLSAgICB1bmtub3duX2NvZGVjXy5wdXNoX2JhY2soInVua25vd24iKTsKLQotICAgIG1peGVkX2NvZGVjc18ucHVzaF9iYWNrKCJ2b3JiaXMiKTsKLSAgICBtaXhlZF9jb2RlY3NfLnB1c2hfYmFjaygiZm9vdmlkZW8iKTsKLQotICAgIFNldE1lZGlhQ2xpZW50KCZ0ZXN0X21lZGlhX2NsaWVudF8pOwotICB9Ci0KLSAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsgQWRkQ29udGFpbmVyQW5kQ29kZWNNYXNrc0ZvclRlc3QoKTsgfQotCi0gIH5LZXlTeXN0ZW1zVGVzdCgpIG92ZXJyaWRlIHsKLSAgICAvLyBDbGVhciB0aGUgdXNlIG9mIHx0ZXN0X21lZGlhX2NsaWVudF98LCB3aGljaCB3YXMgc2V0IGluIFNldFVwKCkuCi0gICAgU2V0TWVkaWFDbGllbnQoTlVMTCk7Ci0gIH0KLQotICB2b2lkIFVwZGF0ZUNsaWVudEtleVN5c3RlbXMoKSB7Ci0gICAgdGVzdF9tZWRpYV9jbGllbnRfLlNldEtleVN5c3RlbXNVcGRhdGVOZWVkZWQoKTsKLSAgICB0ZXN0X21lZGlhX2NsaWVudF8uRGlzYWJsZUV4dGVybmFsS2V5U3lzdGVtU3VwcG9ydCgpOwotICB9Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gQ29kZWNWZWN0b3I7Ci0KLSAgY29uc3QgQ29kZWNWZWN0b3ImIG5vX2NvZGVjcygpIGNvbnN0IHsgcmV0dXJuIG5vX2NvZGVjc187IH0KLQotICBjb25zdCBDb2RlY1ZlY3RvciYgdnA4X2NvZGVjKCkgY29uc3QgeyByZXR1cm4gdnA4X2NvZGVjXzsgfQotICBjb25zdCBDb2RlY1ZlY3RvciYgdnA4MF9jb2RlYygpIGNvbnN0IHsgcmV0dXJuIHZwODBfY29kZWNfOyB9Ci0gIGNvbnN0IENvZGVjVmVjdG9yJiB2cDlfY29kZWMoKSBjb25zdCB7IHJldHVybiB2cDlfY29kZWNfOyB9Ci0gIGNvbnN0IENvZGVjVmVjdG9yJiB2cDkwX2NvZGVjKCkgY29uc3QgeyByZXR1cm4gdnA5MF9jb2RlY187IH0KLQotICBjb25zdCBDb2RlY1ZlY3RvciYgdm9yYmlzX2NvZGVjKCkgY29uc3QgeyByZXR1cm4gdm9yYmlzX2NvZGVjXzsgfQotCi0gIGNvbnN0IENvZGVjVmVjdG9yJiB2cDhfYW5kX3ZvcmJpc19jb2RlY3MoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHZwOF9hbmRfdm9yYmlzX2NvZGVjc187Ci0gIH0KLSAgY29uc3QgQ29kZWNWZWN0b3ImIHZwOV9hbmRfdm9yYmlzX2NvZGVjcygpIGNvbnN0IHsKLSAgICByZXR1cm4gdnA5X2FuZF92b3JiaXNfY29kZWNzXzsKLSAgfQotCi0gIGNvbnN0IENvZGVjVmVjdG9yJiBmb292aWRlb19jb2RlYygpIGNvbnN0IHsgcmV0dXJuIGZvb3ZpZGVvX2NvZGVjXzsgfQotICBjb25zdCBDb2RlY1ZlY3RvciYgZm9vdmlkZW9fZXh0ZW5kZWRfY29kZWMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZvb3ZpZGVvX2V4dGVuZGVkX2NvZGVjXzsKLSAgfQotICBjb25zdCBDb2RlY1ZlY3RvciYgZm9vdmlkZW9fZG90X2NvZGVjKCkgY29uc3QgeyByZXR1cm4gZm9vdmlkZW9fZG90X2NvZGVjXzsgfQotICBjb25zdCBDb2RlY1ZlY3RvciYgZm9vYXVkaW9fY29kZWMoKSBjb25zdCB7IHJldHVybiBmb29hdWRpb19jb2RlY187IH0KLSAgY29uc3QgQ29kZWNWZWN0b3ImIGZvb3ZpZGVvX2FuZF9mb29hdWRpb19jb2RlY3MoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZvb3ZpZGVvX2FuZF9mb29hdWRpb19jb2RlY3NfOwotICB9Ci0KLSAgY29uc3QgQ29kZWNWZWN0b3ImIHVua25vd25fY29kZWMoKSBjb25zdCB7IHJldHVybiB1bmtub3duX2NvZGVjXzsgfQotCi0gIGNvbnN0IENvZGVjVmVjdG9yJiBtaXhlZF9jb2RlY3MoKSBjb25zdCB7IHJldHVybiBtaXhlZF9jb2RlY3NfOyB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBDb2RlY1ZlY3RvciBub19jb2RlY3NfOwotICBDb2RlY1ZlY3RvciB2cDhfY29kZWNfOwotICBDb2RlY1ZlY3RvciB2cDgwX2NvZGVjXzsKLSAgQ29kZWNWZWN0b3IgdnA5X2NvZGVjXzsKLSAgQ29kZWNWZWN0b3IgdnA5MF9jb2RlY187Ci0gIENvZGVjVmVjdG9yIHZvcmJpc19jb2RlY187Ci0gIENvZGVjVmVjdG9yIHZwOF9hbmRfdm9yYmlzX2NvZGVjc187Ci0gIENvZGVjVmVjdG9yIHZwOV9hbmRfdm9yYmlzX2NvZGVjc187Ci0KLSAgQ29kZWNWZWN0b3IgZm9vdmlkZW9fY29kZWNfOwotICBDb2RlY1ZlY3RvciBmb292aWRlb19leHRlbmRlZF9jb2RlY187Ci0gIENvZGVjVmVjdG9yIGZvb3ZpZGVvX2RvdF9jb2RlY187Ci0gIENvZGVjVmVjdG9yIGZvb2F1ZGlvX2NvZGVjXzsKLSAgQ29kZWNWZWN0b3IgZm9vdmlkZW9fYW5kX2Zvb2F1ZGlvX2NvZGVjc187Ci0KLSAgQ29kZWNWZWN0b3IgdW5rbm93bl9jb2RlY187Ci0KLSAgQ29kZWNWZWN0b3IgbWl4ZWRfY29kZWNzXzsKLQotICBUZXN0TWVkaWFDbGllbnQgdGVzdF9tZWRpYV9jbGllbnRfOwotfTsKLQotLy8gVE9ETyhkZG9yd2luKTogQ29uc2lkZXIgbW92aW5nIEdldFBlcHBlclR5cGUoKSBjYWxscyBvdXQgdG8gdGhlaXIgb3duIHRlc3QuCi0KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgRW1wdHlLZXlTeXN0ZW0pIHsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKHN0ZDo6c3RyaW5nKCkpKTsKLSAgRVhQRUNUX0VRKCJVbmtub3duIiwgR2V0S2V5U3lzdGVtTmFtZUZvclVNQShzdGQ6OnN0cmluZygpKSk7Ci19Ci0KLS8vIENsZWFyIEtleSBpcyB0aGUgb25seSBrZXkgc3lzdGVtIHJlZ2lzdGVyZWQgaW4gY29udGVudC4KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgQ2xlYXJLZXkpIHsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa0NsZWFyS2V5KSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvV2ViTSwgbm9fY29kZWNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NsZWFyS2V5KSk7Ci0KLSAgRVhQRUNUX0VRKCJDbGVhcktleSIsIEdldEtleVN5c3RlbU5hbWVGb3JVTUEoa0NsZWFyS2V5KSk7Ci19Ci0KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgQ2xlYXJLZXlXaXRoSW5pdERhdGFUeXBlKSB7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtKGtDbGVhcktleSkpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEluaXREYXRhVHlwZShrQ2xlYXJLZXksIEVtZUluaXREYXRhVHlwZTo6V0VCTSkpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEluaXREYXRhVHlwZShrQ2xlYXJLZXksIEVtZUluaXREYXRhVHlwZTo6S0VZSURTKSk7Ci0KLSAgLy8gQWxsIG90aGVyIEluaXREYXRhVHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhJbml0RGF0YVR5cGUoa0NsZWFyS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtZUluaXREYXRhVHlwZTo6VU5LTk9XTikpOwotfQotCi0vLyBUaGUga2V5IHN5c3RlbSBpcyBub3QgcmVnaXN0ZXJlZCBhbmQgdGhlcmVmb3JlIGlzIHVucmVjb2duaXplZC4KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgQmFzaWNfVW5yZWNvZ25pemVkS2V5U3lzdGVtKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBrVW5yZWNvZ25pemVkID0gIngtb3JnLmV4YW1wbGUudW5yZWNvZ25pemVkIjsKLQotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa1VucmVjb2duaXplZCkpOwotCi0gIEVYUEVDVF9FUSgiVW5rbm93biIsIEdldEtleVN5c3RlbU5hbWVGb3JVTUEoa1VucmVjb2duaXplZCkpOwotICBFWFBFQ1RfRkFMU0UoQ2FuVXNlQWVzRGVjcnlwdG9yKGtVbnJlY29nbml6ZWQpKTsKLQotI2lmIGRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotICBzdGQ6OnN0cmluZyB0eXBlOwotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgZGVmaW5lZChEQ0hFQ0tfQUxXQVlTX09OKQotICBFWFBFQ1RfREVBVEgodHlwZSA9IEdldFBlcHBlclR5cGUoa1VucmVjb2duaXplZCksCi0gICAgICAgICAgICAgICAieC1vcmcuZXhhbXBsZS51bnJlY29nbml6ZWQgaXMgbm90IGEga25vd24gc3lzdGVtIik7Ci0jZW5kaWYKLSAgRVhQRUNUX1RSVUUodHlwZS5lbXB0eSgpKTsKLSNlbmRpZgotfQotCi1URVNUX0YoS2V5U3lzdGVtc1Rlc3QsIEJhc2ljX1VzZXNBZXNEZWNyeXB0b3IpIHsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIG5vX2NvZGVjcygpLCBrVXNlc0FlcykpOwotCi0gIC8vIE5vIFVNQSB2YWx1ZSBmb3IgdGhpcyB0ZXN0IGtleSBzeXN0ZW0uCi0gIEVYUEVDVF9FUSgiVXNlQWVzIiwgR2V0S2V5U3lzdGVtTmFtZUZvclVNQShrVXNlc0FlcykpOwotCi0gIEVYUEVDVF9UUlVFKENhblVzZUFlc0RlY3J5cHRvcihrVXNlc0FlcykpOwotI2lmIGRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotICBzdGQ6OnN0cmluZyB0eXBlOwotI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgZGVmaW5lZChEQ0hFQ0tfQUxXQVlTX09OKQotICBFWFBFQ1RfREVBVEgodHlwZSA9IEdldFBlcHBlclR5cGUoa1VzZXNBZXMpLAotICAgICAgICAgICAgICAgIngtb3JnLmV4YW1wbGUuY2xlYXIgaXMgbm90IFBlcHBlci1iYXNlZCIpOwotI2VuZGlmCi0gIEVYUEVDVF9UUlVFKHR5cGUuZW1wdHkoKSk7Ci0jZW5kaWYKLX0KLQotVEVTVF9GKEtleVN5c3RlbXNUZXN0LAotICAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGVfVXNlc0Flc0RlY3J5cHRvcl9UeXBlc0NvbnRhaW5lcjEpIHsKLSAgLy8gVmFsaWQgdmlkZW8gdHlwZXMuCi0gIEVYUEVDVF9UUlVFKAotICAgICAgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCB2cDhfY29kZWMoKSwga1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCB2cDgwX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIHZwOV9jb2RlYygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIHZwOTBfY29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVXNlc0FlcykpOwotCi0gIC8vIEF1ZGlvIGluIGEgdmlkZW8gY29udGFpbmVyLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtWaWRlb1dlYk0sIHZwOF9hbmRfdm9yYmlzX2NvZGVjcygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtWaWRlb1dlYk0sIHZwOV9hbmRfdm9yYmlzX2NvZGVjcygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCB2b3JiaXNfY29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLQotICAvLyBOb24tV2VibSBjb2RlY3MuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgICAga1ZpZGVvV2ViTSwgZm9vdmlkZW9fY29kZWMoKSwga1VzZXNBZXMpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9XZWJNLCB1bmtub3duX2NvZGVjKCksIGtVc2VzQWVzKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIG1peGVkX2NvZGVjcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVXNlc0FlcykpOwotCi0gIC8vIFZhbGlkIGF1ZGlvIHR5cGVzLgotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoa0F1ZGlvV2ViTSwgbm9fY29kZWNzKCksIGtVc2VzQWVzKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoa0F1ZGlvV2ViTSwgdm9yYmlzX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLQotICAvLyBOb24tYXVkaW8gY29kZWNzLgotICBFWFBFQ1RfRkFMU0UoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtBdWRpb1dlYk0sIHZwOF9jb2RlYygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtBdWRpb1dlYk0sIHZwOF9hbmRfdm9yYmlzX2NvZGVjcygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtBdWRpb1dlYk0sIHZwOV9jb2RlYygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtBdWRpb1dlYk0sIHZwOV9hbmRfdm9yYmlzX2NvZGVjcygpLCBrVXNlc0FlcykpOwotCi0gIC8vIE5vbi1XZWJtIGNvZGVjLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoQXVkaW9NaW1lVHlwZSgKLSAgICAgIGtBdWRpb1dlYk0sIGZvb2F1ZGlvX2NvZGVjKCksIGtVc2VzQWVzKSk7Ci19Ci0KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1fSW52YWxpZFZhcmlhbnRzKSB7Ci0gIC8vIENhc2Ugc2Vuc2l0aXZlLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIngtb3JnLmV4YW1wbGUuQ2xFYVIiKSk7Ci0KLSAgLy8gVExEcyBhcmUgbm90IGFsbG93ZWQuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgib3JnLiIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20iKSk7Ci0KLSAgLy8gRXh0cmEgcGVyaW9kLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIngtb3JnLmV4YW1wbGUuY2xlYXIuIikpOwotCi0gIC8vIFByZWZpeC4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJ4LW9yZy5leGFtcGxlLiIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJ4LW9yZy5leGFtcGxlIikpOwotCi0gIC8vIEluY29tcGxldGUuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgieC1vcmcuZXhhbXBsZS5jbGVhIikpOwotCi0gIC8vIEV4dHJhIGNoYXJhY3Rlci4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJ4LW9yZy5leGFtcGxlLmNsZWFyeiIpKTsKLQotICAvLyBUaGVyZSBhcmUgbm8gY2hpbGQga2V5IHN5c3RlbXMgZm9yIFVzZXNBZXMuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgieC1vcmcuZXhhbXBsZS5jbGVhci5mb28iKSk7Ci19Ci0KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZV9Ob1R5cGUpIHsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoc3RkOjpzdHJpbmcoKSwgbm9fY29kZWNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVc2VzQWVzKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoc3RkOjpzdHJpbmcoKSwgbm9fY29kZWNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4LW9yZy5leGFtcGxlLmZvbyIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBzdGQ6OnN0cmluZygpLCBub19jb2RlY3MoKSwgIngtb3JnLmV4YW1wbGUuY2xlYXIuZm9vIikpOwotfQotCi0vLyBUZXN0cyB0aGUgc2Vjb25kIHJlZ2lzdGVyZWQgY29udGFpbmVyIHR5cGUuCi0vLyBUT0RPKGRkb3J3aW4pOiBDb21iaW5lZCB3aXRoIFR5cGVzQ29udGFpbmVyMSBpbiBhIGZ1dHVyZSBDTC4KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwKLSAgICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlX1VzZXNBZXNEZWNyeXB0b3JfVHlwZXNDb250YWluZXIyKSB7Ci0gIC8vIFZhbGlkIHZpZGVvIHR5cGVzLgotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCBub19jb2RlY3MoKSwga1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9Gb28sIGZvb3ZpZGVvX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLQotICAvLyBBdWRpbyBpbiBhIHZpZGVvIGNvbnRhaW5lci4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9Gb28sIGZvb3ZpZGVvX2FuZF9mb29hdWRpb19jb2RlY3MoKSwga1VzZXNBZXMpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9Gb28sIGZvb2F1ZGlvX2NvZGVjKCksIGtVc2VzQWVzKSk7Ci0KLSAgLy8gRXh0ZW5kZWQgY29kZWNzIGZhaWwgYmVjYXVzZSB0aGlzIGlzIGhhbmRsZWQgYnkgU2ltcGxlV2ViTWltZVJlZ2lzdHJ5SW1wbC4KLSAgLy8gVGhleSBzaG91bGQgcmVhbGx5IHBhc3MgY2FuUGxheVR5cGUoKS4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9Gb28sIGZvb3ZpZGVvX2V4dGVuZGVkX2NvZGVjKCksIGtVc2VzQWVzKSk7Ci0KLSAgLy8gSW52YWxpZCBjb2RlYyBmb3JtYXQuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgICAga1ZpZGVvRm9vLCBmb292aWRlb19kb3RfY29kZWMoKSwga1VzZXNBZXMpKTsKLQotICAvLyBOb24tY29udGFpbmVyMiBjb2RlYy4KLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9Gb28sIHZwOF9jb2RlYygpLCBrVXNlc0FlcykpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9Gb28sIHVua25vd25fY29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCBtaXhlZF9jb2RlY3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VzZXNBZXMpKTsKLQotICAvLyBWYWxpZCBhdWRpbyB0eXBlcy4KLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb0Zvbywgbm9fY29kZWNzKCksIGtVc2VzQWVzKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoa0F1ZGlvRm9vLCBmb29hdWRpb19jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVc2VzQWVzKSk7Ci0KLSAgLy8gTm9uLWF1ZGlvIGNvZGVjcy4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoCi0gICAgICBrQXVkaW9Gb28sIGZvb3ZpZGVvX2NvZGVjKCksIGtVc2VzQWVzKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKAotICAgICAga0F1ZGlvRm9vLCBmb292aWRlb19hbmRfZm9vYXVkaW9fY29kZWNzKCksIGtVc2VzQWVzKSk7Ci0KLSAgLy8gTm9uLWNvbnRhaW5lcjIgY29kZWMuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb0Zvbywgdm9yYmlzX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVc2VzQWVzKSk7Ci19Ci0KLS8vCi0vLyBOb24tQWVzRGVjcnlwdG9yLWJhc2VkIGtleSBzeXN0ZW0uCi0vLwotCi1URVNUX0YoS2V5U3lzdGVtc1Rlc3QsIEJhc2ljX0V4dGVybmFsRGVjcnlwdG9yKSB7Ci0gIGlmICghQ2FuUnVuRXh0ZXJuYWxLZXlTeXN0ZW1UZXN0cygpKSByZXR1cm47Ci0KLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvV2ViTSwgbm9fY29kZWNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKENhblVzZUFlc0RlY3J5cHRvcihrRXh0ZXJuYWwpKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9QRVBQRVJfQ0RNUykKLSAgRVhQRUNUX0VRKCJhcHBsaWNhdGlvbi94LXBwYXBpLWV4dGVybmFsLWNkbSIsIEdldFBlcHBlclR5cGUoa0V4dGVybmFsKSk7Ci0jZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX1BFUFBFUl9DRE1TKQotfQotCi1URVNUX0YoCi0gICAgS2V5U3lzdGVtc1Rlc3QsCi0gICAgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZV9FeHRlcm5hbERlY3J5cHRvcl9UeXBlc0NvbnRhaW5lcjEpIHsKLSAgaWYgKCFDYW5SdW5FeHRlcm5hbEtleVN5c3RlbVRlc3RzKCkpIHJldHVybjsKLQotICAvLyBWYWxpZCB2aWRlbyB0eXBlcy4KLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCBub19jb2RlY3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCB2cDhfY29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZShrVmlkZW9XZWJNLCB2cDgwX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvV2ViTSwgdnA5X2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvV2ViTSwgdnA5MF9jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeHRlcm5hbCkpOwotCi0gIC8vIEF1ZGlvIGluIGEgdmlkZW8gY29udGFpbmVyLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtWaWRlb1dlYk0sIHZwOF9hbmRfdm9yYmlzX2NvZGVjcygpLCBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9XZWJNLCB2cDlfYW5kX3ZvcmJpc19jb2RlY3MoKSwga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIHZvcmJpc19jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLQotICAvLyBOb24tV2VibSBjb2RlY3MuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgICAga1ZpZGVvV2ViTSwgZm9vdmlkZW9fY29kZWMoKSwga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgICAga1ZpZGVvV2ViTSwgdW5rbm93bl9jb2RlYygpLCBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvV2ViTSwgbWl4ZWRfY29kZWNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeHRlcm5hbCkpOwotCi0gIC8vIFZhbGlkIGF1ZGlvIHR5cGVzLgotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb1dlYk0sIG5vX2NvZGVjcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeHRlcm5hbCkpOwotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb1dlYk0sIHZvcmJpc19jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeHRlcm5hbCkpOwotCi0gIC8vIE5vbi1hdWRpbyBjb2RlY3MuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb1dlYk0sIHZwOF9jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoCi0gICAgICBrQXVkaW9XZWJNLCB2cDhfYW5kX3ZvcmJpc19jb2RlY3MoKSwga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKGtBdWRpb1dlYk0sIHZwOV9jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoCi0gICAgICBrQXVkaW9XZWJNLCB2cDlfYW5kX3ZvcmJpc19jb2RlY3MoKSwga0V4dGVybmFsKSk7Ci0KLSAgLy8gTm9uLVdlYm0gY29kZWMuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhBdWRpb01pbWVUeXBlKAotICAgICAga0F1ZGlvV2ViTSwgZm9vYXVkaW9fY29kZWMoKSwga0V4dGVybmFsKSk7Ci19Ci0KLVRFU1RfRigKLSAgICBLZXlTeXN0ZW1zVGVzdCwKLSAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlX0V4dGVybmFsRGVjcnlwdG9yX1R5cGVzQ29udGFpbmVyMikgewotICBpZiAoIUNhblJ1bkV4dGVybmFsS2V5U3lzdGVtVGVzdHMoKSkgcmV0dXJuOwotCi0gIC8vIFZhbGlkIHZpZGVvIHR5cGVzLgotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCBub19jb2RlY3MoKSwga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCBmb292aWRlb19jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFeHRlcm5hbCkpOwotCi0gIC8vIEF1ZGlvIGluIGEgdmlkZW8gY29udGFpbmVyLgotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoTWVkaWFNaW1lVHlwZSgKLSAgICAgIGtWaWRlb0ZvbywgZm9vdmlkZW9fYW5kX2Zvb2F1ZGlvX2NvZGVjcygpLCBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9Gb28sIGZvb2F1ZGlvX2NvZGVjKCksIGtFeHRlcm5hbCkpOwotCi0gIC8vIEV4dGVuZGVkIGNvZGVjcyBmYWlsIGJlY2F1c2UgdGhpcyBpcyBoYW5kbGVkIGJ5IFNpbXBsZVdlYk1pbWVSZWdpc3RyeUltcGwuCi0gIC8vIFRoZXkgc2hvdWxkIHJlYWxseSBwYXNzIGNhblBsYXlUeXBlKCkuCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKAotICAgICAga1ZpZGVvRm9vLCBmb292aWRlb19leHRlbmRlZF9jb2RlYygpLCBrRXh0ZXJuYWwpKTsKLQotICAvLyBJbnZhbGlkIGNvZGVjIGZvcm1hdC4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoCi0gICAgICBrVmlkZW9Gb28sIGZvb3ZpZGVvX2RvdF9jb2RlYygpLCBrRXh0ZXJuYWwpKTsKLQotICAvLyBOb24tY29udGFpbmVyMiBjb2RlY3MuCi0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCB2cDhfY29kZWMoKSwga0V4dGVybmFsKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb0ZvbywgdW5rbm93bl9jb2RlYygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aE1lZGlhTWltZVR5cGUoa1ZpZGVvRm9vLCBtaXhlZF9jb2RlY3MoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0KLSAgLy8gVmFsaWQgYXVkaW8gdHlwZXMuCi0gIEVYUEVDVF9UUlVFKAotICAgICAgSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoQXVkaW9NaW1lVHlwZShrQXVkaW9Gb28sIG5vX2NvZGVjcygpLCBrRXh0ZXJuYWwpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoQXVkaW9NaW1lVHlwZShrQXVkaW9Gb28sIGZvb2F1ZGlvX2NvZGVjKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0KLSAgLy8gTm9uLWF1ZGlvIGNvZGVjcy4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoCi0gICAgICBrQXVkaW9Gb28sIGZvb3ZpZGVvX2NvZGVjKCksIGtFeHRlcm5hbCkpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW1XaXRoQXVkaW9NaW1lVHlwZSgKLSAgICAgIGtBdWRpb0ZvbywgZm9vdmlkZW9fYW5kX2Zvb2F1ZGlvX2NvZGVjcygpLCBrRXh0ZXJuYWwpKTsKLQotICAvLyBOb24tY29udGFpbmVyMiBjb2RlYy4KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtV2l0aEF1ZGlvTWltZVR5cGUoa0F1ZGlvRm9vLCB2b3JiaXNfY29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci19Ci0KLVRFU1RfRihLZXlTeXN0ZW1zVGVzdCwgS2V5U3lzdGVtTmFtZUZvclVNQSkgewotICBFWFBFQ1RfRVEoIkNsZWFyS2V5IiwgR2V0S2V5U3lzdGVtTmFtZUZvclVNQShrQ2xlYXJLZXkpKTsKLQotICAvLyBFeHRlcm5hbCBDbGVhciBLZXkgbmV2ZXIgaGFzIGEgVU1BIG5hbWUuCi0gIGlmIChDYW5SdW5FeHRlcm5hbEtleVN5c3RlbVRlc3RzKCkpCi0gICAgRVhQRUNUX0VRKCJVbmtub3duIiwgR2V0S2V5U3lzdGVtTmFtZUZvclVNQShrRXh0ZXJuYWxDbGVhcktleSkpOwotfQotCi1URVNUX0YoS2V5U3lzdGVtc1Rlc3QsIEtleVN5c3RlbXNVcGRhdGUpIHsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIG5vX2NvZGVjcygpLCBrVXNlc0FlcykpOwotCi0gIGlmIChDYW5SdW5FeHRlcm5hbEtleVN5c3RlbVRlc3RzKCkpIHsKLSAgICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbShrRXh0ZXJuYWwpKTsKLSAgICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIG5vX2NvZGVjcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4dGVybmFsKSk7Ci0gIH0KLQotICBVcGRhdGVDbGllbnRLZXlTeXN0ZW1zKCk7Ci0KLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oa1VzZXNBZXMpKTsKLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc1N1cHBvcnRlZEtleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtWaWRlb1dlYk0sIG5vX2NvZGVjcygpLCBrVXNlc0FlcykpOwotICBpZiAoQ2FuUnVuRXh0ZXJuYWxLZXlTeXN0ZW1UZXN0cygpKQotICAgIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbShrRXh0ZXJuYWwpKTsKLX0KLQotVEVTVF9GKEtleVN5c3RlbXNQb3RlbnRpYWxseVN1cHBvcnRlZE5hbWVzVGVzdCwgUG90ZW50aWFsbHlTdXBwb3J0ZWROYW1lcykgewotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy53MyIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcudzMuIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy53My5jbGVhcmtlIikpOwotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZEtleVN5c3RlbSgib3JnLnczLmNsZWFya2V5IikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy53My5jbGVhcmtleXMiKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20ud2lkZXZpbmUiKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgiY29tLndpZGV2aW5lLiIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20ud2lkZXZpbmUuYWxwaCIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oImNvbS53aWRldmluZS5hbHBoYSIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20ud2lkZXZpbmUuYmV0YSIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20ud2lkZXZpbmUuYWxwaGFiZXRhIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oImNvbS53aWRldmluZS5hbHBoYS5iZXRhIikpOwotCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgib3JnLmNocm9taXVtIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy5jaHJvbWl1bS4iKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgib3JnLmNocm9taXVtLmV4dGVybmFsY2xlYXJrZSIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5IikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIm9yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5cyIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleS4iKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleS5zb21ldGhpbmciKSk7Ci0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleS5zb21ldGhpbmcuZWxzZSIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleS5vdGhlciIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJvcmcuY2hyb21pdW0ub3RoZXIiKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20uY2hyb21lY2FzdCIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20uY2hyb21lY2FzdC4iKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJjb20uY2hyb21lY2FzdC5zb21ldGhpbmciKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgiY29tLmNocm9tZWNhc3Quc29tZXRoaW5nLmVsc2UiKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgiY29tLmNocm9tZWNhc3Qub3RoZXIiKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkS2V5U3lzdGVtKCJ4LSIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIngtc29tZXRoaW5nIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRLZXlTeXN0ZW0oIngtc29tZXRoaW5nLmVsc2UiKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZEtleVN5c3RlbSgieC1vdGhlciIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlib2FyZF9ldmVudF9jb3VudGVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uva2V5Ym9hcmRfZXZlbnRfY291bnRlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1MmQ2OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlib2FyZF9ldmVudF9jb3VudGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uva2V5Ym9hcmRfZXZlbnRfY291bnRlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9hdG9taWNvcHMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1LZXlib2FyZEV2ZW50Q291bnRlcjo6S2V5Ym9hcmRFdmVudENvdW50ZXIoKSA6IHRvdGFsX2tleV9wcmVzc2VzXygwKSB7fQotCi1LZXlib2FyZEV2ZW50Q291bnRlcjo6fktleWJvYXJkRXZlbnRDb3VudGVyKCkge30KLQotdm9pZCBLZXlib2FyZEV2ZW50Q291bnRlcjo6UmVzZXQoKSB7Ci0gIHByZXNzZWRfa2V5c18uY2xlYXIoKTsKLSAgYmFzZTo6c3VidGxlOjpOb0JhcnJpZXJfU3RvcmUoCi0gICAgICByZWludGVycHJldF9jYXN0PGJhc2U6OnN1YnRsZTo6QXRvbWljV29yZCo+KCZ0b3RhbF9rZXlfcHJlc3Nlc18pLCAwKTsKLX0KLQotdm9pZCBLZXlib2FyZEV2ZW50Q291bnRlcjo6T25LZXlib2FyZEV2ZW50KHVpOjpFdmVudFR5cGUgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWk6OktleWJvYXJkQ29kZSBrZXlfY29kZSkgewotICAvLyBVcGRhdGVzIHRoZSBwcmVzc2VkIGtleXMgYW5kIHRoZSB0b3RhbCBjb3VudCBvZiBrZXkgcHJlc3Nlcy4KLSAgaWYgKGV2ZW50ID09IHVpOjpFVF9LRVlfUFJFU1NFRCkgewotICAgIGlmIChwcmVzc2VkX2tleXNfLmZpbmQoa2V5X2NvZGUpICE9IHByZXNzZWRfa2V5c18uZW5kKCkpIHJldHVybjsKLSAgICBwcmVzc2VkX2tleXNfLmluc2VydChrZXlfY29kZSk7Ci0gICAgYmFzZTo6c3VidGxlOjpOb0JhcnJpZXJfQXRvbWljSW5jcmVtZW50KAotICAgICAgICByZWludGVycHJldF9jYXN0PGJhc2U6OnN1YnRsZTo6QXRvbWljV29yZCo+KCZ0b3RhbF9rZXlfcHJlc3Nlc18pLCAxKTsKLSAgfSBlbHNlIHsKLSAgICBEQ0hFQ0tfRVEodWk6OkVUX0tFWV9SRUxFQVNFRCwgZXZlbnQpOwotICAgIHByZXNzZWRfa2V5c18uZXJhc2Uoa2V5X2NvZGUpOwotICB9Ci19Ci0KLXNpemVfdCBLZXlib2FyZEV2ZW50Q291bnRlcjo6R2V0S2V5UHJlc3NDb3VudCgpIGNvbnN0IHsKLSAgcmV0dXJuIGJhc2U6OnN1YnRsZTo6Tm9CYXJyaWVyX0xvYWQoCi0gICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGJhc2U6OnN1YnRsZTo6QXRvbWljV29yZCo+KCZ0b3RhbF9rZXlfcHJlc3Nlc18pKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9rZXlib2FyZF9ldmVudF9jb3VudGVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9rZXlib2FyZF9ldmVudF9jb3VudGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZTdiNmUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uva2V5Ym9hcmRfZXZlbnRfY291bnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0tFWUJPQVJEX0VWRU5UX0NPVU5URVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfS0VZQk9BUkRfRVZFTlRfQ09VTlRFUl9IXwotCi0jaW5jbHVkZSA8c2V0PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vbG9jay5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInVpL2V2ZW50cy9ldmVudF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJ1aS9ldmVudHMva2V5Y29kZXMva2V5Ym9hcmRfY29kZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUaGlzIGNsYXNzIHRyYWNrcyB0aGUgdG90YWwgbnVtYmVyIG9mIGtleXByZXNzZXMgYmFzZWQgb24gdGhlIE9uS2V5Ym9hcmRFdmVudAotLy8gY2FsbHMgaXQgcmVjZWl2ZXMgZnJvbSB0aGUgY2xpZW50LgotLy8gTXVsdGlwbGUga2V5IGRvd24gZXZlbnRzIGZvciB0aGUgc2FtZSBrZXkgYXJlIGNvdW50ZWQgYXMgb25lIGtleXByZXNzIHVudGlsCi0vLyB0aGUgc2FtZSBrZXkgaXMgcmVsZWFzZWQuCi1jbGFzcyBNRURJQV9FWFBPUlQgS2V5Ym9hcmRFdmVudENvdW50ZXIgewotIHB1YmxpYzoKLSAgS2V5Ym9hcmRFdmVudENvdW50ZXIoKTsKLSAgfktleWJvYXJkRXZlbnRDb3VudGVyKCk7Ci0KLSAgLy8gUmVzZXRzIHRoZSBjb3VudCB0byAwLiBNdXN0IGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQgYXMKLSAgLy8gT25LZXlib2FyZEV2ZW50LgotICB2b2lkIFJlc2V0KCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGtleXByZXNzZXMgc2luY2UgaXRzIGNyZWF0aW9uIG9yIGxhc3QgUmVzZXQoKQotICAvLyBjYWxsLiBDYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQuCi0gIHNpemVfdCBHZXRLZXlQcmVzc0NvdW50KCkgY29uc3Q7Ci0KLSAgLy8gVGhlIGNsaWVudCBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBvbiBrZXkgZG93biBvciBrZXkgdXAgZXZlbnRzLgotICAvLyBNdXN0IGJlIGNhbGxlZCBvbiBhIHNpbmdsZSB0aHJlYWQuCi0gIHZvaWQgT25LZXlib2FyZEV2ZW50KHVpOjpFdmVudFR5cGUgZXZlbnQsIHVpOjpLZXlib2FyZENvZGUga2V5X2NvZGUpOwotCi0gcHJpdmF0ZToKLSAgLy8gVGhlIHNldCBvZiBrZXlzIGN1cnJlbnRseSBoZWxkIGRvd24uCi0gIHN0ZDo6c2V0PHVpOjpLZXlib2FyZENvZGU+IHByZXNzZWRfa2V5c187Ci0KLSAgc2l6ZV90IHRvdGFsX2tleV9wcmVzc2VzXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oS2V5Ym9hcmRFdmVudENvdW50ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfS0VZQk9BUkRfRVZFTlRfQ09VTlRFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbGltaXRzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM3YzdhNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIENvbnRhaW5zIGxpbWl0IGRlZmluaXRpb24gY29uc3RhbnRzIGZvciB0aGUgbWVkaWEgc3Vic3lzdGVtLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX0xJTUlUU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9MSU1JVFNfSF8KLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgbGltaXRzIHsKLQotZW51bSB7Ci0gIC8vIE1heGltdW0gcG9zc2libGUgZGltZW5zaW9uICh3aWR0aCBvciBoZWlnaHQpIGZvciBhbnkgdmlkZW8uCi0gIGtNYXhEaW1lbnNpb24gPSAoMSA8PCAxNSkgLSAxLCAgLy8gMzI3NjcKLQotICAvLyBNYXhpbXVtIHBvc3NpYmxlIGNhbnZhcyBzaXplICh3aWR0aCBtdWx0aXBsaWVkIGJ5IGhlaWdodCkgZm9yIGFueSB2aWRlby4KLSAga01heENhbnZhcyA9ICgxIDw8ICgxNCAqIDIpKSwgIC8vIDE2Mzg0IHggMTYzODQKLQotICAvLyBUb3RhbCBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHdoaWNoIGFyZSBwb3B1bGF0aW5nIGluIHRoZSBwaXBlbGluZS4KLSAga01heFZpZGVvRnJhbWVzID0gNCwKLQotICAvLyBUaGUgZm9sbG93aW5nIGxpbWl0cyBhcmUgdXNlZCBieSBBdWRpb1BhcmFtZXRlcnM6OklzVmFsaWQoKS4KLSAgLy8KLSAgLy8gQSBmZXcgbm90ZXMgb24gc2FtcGxlIHJhdGVzIG9mIGNvbW1vbiBmb3JtYXRzOgotICAvLyAgIC0gQUFDIGZpbGVzIGFyZSBsaW1pdGVkIHRvIDk2IGtIei4KLSAgLy8gICAtIE1QMyBmaWxlcyBhcmUgbGltaXRlZCB0byA0OCBrSHouCi0gIC8vICAgLSBWb3JiaXMgdXNlZCB0byBiZSBsaW1pdGVkIHRvIDk2IGtIeiwgYnV0IG5vIGxvbmdlciBoYXMgdGhhdAotICAvLyAgICAgcmVzdHJpY3Rpb24uCi0gIC8vICAgLSBNb3N0IFBDIGF1ZGlvIGhhcmR3YXJlIGlzIGxpbWl0ZWQgdG8gMTkyIGtIeiwgc29tZSBzcGVjaWFsaXplZCBEQUMKLSAgLy8gICAgIGRldmljZXMgd2lsbCB1c2UgMzg0IGtIeiB0aG91Z2guCi0gIGtNYXhTYW1wbGVSYXRlID0gMzg0MDAwLAotICBrTWluU2FtcGxlUmF0ZSA9IDMwMDAsCi0gIGtNYXhDaGFubmVscyA9IDMyLAotICBrTWF4Qnl0ZXNQZXJTYW1wbGUgPSA0LAotICBrTWF4Qml0c1BlclNhbXBsZSA9IGtNYXhCeXRlc1BlclNhbXBsZSAqIDgsCi0gIGtNYXhTYW1wbGVzUGVyUGFja2V0ID0ga01heFNhbXBsZVJhdGUsCi0gIGtNYXhQYWNrZXRTaXplSW5CeXRlcyA9Ci0gICAgICBrTWF4Qnl0ZXNQZXJTYW1wbGUgKiBrTWF4Q2hhbm5lbHMgKiBrTWF4U2FtcGxlc1BlclBhY2tldCwKLQotICAvLyBUaGlzIGxpbWl0IGlzIHVzZWQgYnkgUGFyYW1UcmFpdHM8VmlkZW9DYXB0dXJlUGFyYW1zPi4KLSAga01heEZyYW1lc1BlclNlY29uZCA9IDEwMDAsCi0KLSAgLy8gTWF4aW11bSBsZW5ndGhzIGZvciB2YXJpb3VzIEVNRSBBUEkgcGFyYW1ldGVycy4gVGhlc2UgYXJlIGNoZWNrcyB0bwotICAvLyBwcmV2ZW50IHVubmVjZXNzYXJpbHkgbGFyZ2UgcGFyYW1ldGVycyBmcm9tIGJlaW5nIHBhc3NlZCBhcm91bmQsIGFuZCB0aGUKLSAgLy8gbGVuZ3RocyBhcmUgc29tZXdoYXQgYXJiaXRyYXJ5IGFzIHRoZSBFTUUgc3BlYyBkb2Vzbid0IHNwZWNpZnkgYW55IGxpbWl0cy4KLSAga01pbkNlcnRpZmljYXRlTGVuZ3RoID0gMTI4LAotICBrTWF4Q2VydGlmaWNhdGVMZW5ndGggPSAxNiAqIDEwMjQsCi0gIGtNYXhTZXNzaW9uSWRMZW5ndGggPSA1MTIsCi0gIGtNaW5LZXlJZExlbmd0aCA9IDEsCi0gIGtNYXhLZXlJZExlbmd0aCA9IDUxMiwKLSAga01heEtleUlkcyA9IDEyOCwKLSAga01heEluaXREYXRhTGVuZ3RoID0gNjQgKiAxMDI0LCAgICAgICAgIC8vIDY0IEtCCi0gIGtNYXhTZXNzaW9uUmVzcG9uc2VMZW5ndGggPSA2NCAqIDEwMjQsICAvLyA2NCBLQgotICBrTWF4S2V5U3lzdGVtTGVuZ3RoID0gMjU2LAotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxpbWl0cwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9MSU1JVFNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZWIwN2YuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuaCIKLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY29tbWFuZF9saW5lLmgiCi0jaW5jbHVkZSAiYmFzZS9sYXp5X2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXRyaWNzL2ZpZWxkX3RyaWFsLmgiCi0jaW5jbHVkZSAiYmFzZS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3N3aXRjaGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UveXV2X2NvbnZlcnQuaCIKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSNpbmNsdWRlICJiYXNlL2FuZHJvaWQvYnVpbGRfaW5mby5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2FuZHJvaWQvbWVkaWFfY29kZWNfdXRpbC5oIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNRURJQV9ESVNBQkxFX0ZGTVBFRykKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmZtcGVnL2ZmbXBlZ19jb21tb24uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIE1lZGlhIG11c3Qgb25seSBiZSBpbml0aWFsaXplZCBvbmNlLCBzbyB1c2UgYSBMYXp5SW5zdGFuY2UgdG8gZW5zdXJlIHRoaXMuCi1jbGFzcyBNZWRpYUluaXRpYWxpemVyIHsKLSBwdWJsaWM6Ci0gIHZvaWQgZW5hYmxlX3BsYXRmb3JtX2RlY29kZXJfc3VwcG9ydCgpIHsKLSAgICBoYXNfcGxhdGZvcm1fZGVjb2Rlcl9zdXBwb3J0XyA9IHRydWU7Ci0gIH0KLQotICBib29sIGhhc19wbGF0Zm9ybV9kZWNvZGVyX3N1cHBvcnQoKSB7IHJldHVybiBoYXNfcGxhdGZvcm1fZGVjb2Rlcl9zdXBwb3J0XzsgfQotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIHN0cnVjdCBiYXNlOjpEZWZhdWx0TGF6eUluc3RhbmNlVHJhaXRzPE1lZGlhSW5pdGlhbGl6ZXI+OwotCi0gIE1lZGlhSW5pdGlhbGl6ZXIoKSB7Ci0gICAgVFJBQ0VfRVZFTlRfV0FSTVVQX0NBVEVHT1JZKCJhdWRpbyIpOwotICAgIFRSQUNFX0VWRU5UX1dBUk1VUF9DQVRFR09SWSgibWVkaWEiKTsKLQotICAgIC8vIFBlcmZvcm0gaW5pdGlhbGl6YXRpb24gb2YgbGlicmFyaWVzIHdoaWNoIHJlcXVpcmUgcnVudGltZSBDUFUgZGV0ZWN0aW9uLgotICAgIEluaXRpYWxpemVDUFVTcGVjaWZpY1lVVkNvbnZlcnNpb25zKCk7Ci0KLSNpZiAhZGVmaW5lZChNRURJQV9ESVNBQkxFX0ZGTVBFRykKLSAgICAvLyBJbml0aWFsaXplIENQVSBmbGFncyBvdXRzaWRlIG9mIHRoZSBzYW5kYm94IGFzIHRoaXMgbWF5IHF1ZXJ5IC9wcm9jIGZvcgotICAgIC8vIGRldGFpbHMgb24gdGhlIGN1cnJlbnQgQ1BVIGZvciBORU9OLCBWRlAsIGV0YyBvcHRpbWl6YXRpb25zLgotICAgIGF2X2dldF9jcHVfZmxhZ3MoKTsKLQotICAgIC8vIERpc2FibGUgbG9nZ2luZyBhcyBpdCBpbnRlcmZlcmVzIHdpdGggbGF5b3V0IHRlc3RzLgotICAgIGF2X2xvZ19zZXRfbGV2ZWwoQVZfTE9HX1FVSUVUKTsKLQotI2lmIGRlZmluZWQoQUxMT0NBVE9SX1NISU0pCi0gICAgLy8gUmVtb3ZlIGFsbG9jYXRpb24gbGltaXQgZnJvbSBmZm1wZWcsIHNvIGNhbGxzIGdvIGRvd24gdG8gc2hpbSBsYXllci4KLSAgICBhdl9tYXhfYWxsb2MoMCk7Ci0jZW5kaWYgIC8vIGRlZmluZWQoQUxMT0NBVE9SX1NISU0pCi0KLSNlbmRpZiAgLy8gIWRlZmluZWQoTUVESUFfRElTQUJMRV9GRk1QRUcpCi0gIH0KLQotICB+TWVkaWFJbml0aWFsaXplcigpIHsgTk9UUkVBQ0hFRCgpIDw8ICJNZWRpYUluaXRpYWxpemVyIHNob3VsZCBiZSBsZWFreSEiOyB9Ci0KLSAgYm9vbCBoYXNfcGxhdGZvcm1fZGVjb2Rlcl9zdXBwb3J0XyA9IGZhbHNlOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNZWRpYUluaXRpYWxpemVyKTsKLX07Ci0KLXN0YXRpYyBiYXNlOjpMYXp5SW5zdGFuY2U8TWVkaWFJbml0aWFsaXplcj46OkRlc3RydWN0b3JBdEV4aXQgZ19tZWRpYV9saWJyYXJ5ID0KLSAgICBMQVpZX0lOU1RBTkNFX0lOSVRJQUxJWkVSOwotCi12b2lkIEluaXRpYWxpemVNZWRpYUxpYnJhcnkoKSB7IGdfbWVkaWFfbGlicmFyeS5HZXQoKTsgfQotCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotdm9pZCBFbmFibGVQbGF0Zm9ybURlY29kZXJTdXBwb3J0KCkgewotICBnX21lZGlhX2xpYnJhcnkuUG9pbnRlcigpLT5lbmFibGVfcGxhdGZvcm1fZGVjb2Rlcl9zdXBwb3J0KCk7Ci19Ci0KLWJvb2wgSGFzUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpIHsKLSAgcmV0dXJuIGdfbWVkaWFfbGlicmFyeS5Qb2ludGVyKCktPmhhc19wbGF0Zm9ybV9kZWNvZGVyX3N1cHBvcnQoKTsKLX0KLQotYm9vbCBQbGF0Zm9ybUhhc09wdXNTdXBwb3J0KCkgewotICByZXR1cm4gYmFzZTo6YW5kcm9pZDo6QnVpbGRJbmZvOjpHZXRJbnN0YW5jZSgpLT5zZGtfaW50KCkgPj0gMjE7Ci19Ci0KLWJvb2wgSXNVbmlmaWVkTWVkaWFQaXBlbGluZUVuYWJsZWQoKSB7Ci0gIHJldHVybiAhYmFzZTo6Q29tbWFuZExpbmU6OkZvckN1cnJlbnRQcm9jZXNzKCktPkhhc1N3aXRjaCgKLSAgICAgIHN3aXRjaGVzOjprRGlzYWJsZVVuaWZpZWRNZWRpYVBpcGVsaW5lKTsKLX0KLQotYm9vbCBBcmVQbGF0Zm9ybURlY29kZXJzQXZhaWxhYmxlKCkgewotICByZXR1cm4gSXNVbmlmaWVkTWVkaWFQaXBlbGluZUVuYWJsZWQoKQotICAgICAgICAgICAgID8gSGFzUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpCi0gICAgICAgICAgICAgOiBNZWRpYUNvZGVjVXRpbDo6SXNNZWRpYUNvZGVjQXZhaWxhYmxlKCk7Ci19Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYS5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUxNzJiMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gQ29udGFpbnMgY29kZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBpbml0aWFsaXppbmcsIG9yIHF1ZXJ5aW5nIHRoZSBzdGF0ZQotLy8gb2YgdGhlIG1lZGlhIGxpYnJhcnkgYXMgYSB3aG9sZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9IXwotCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBiYXNlIHsKLWNsYXNzIEZpbGVQYXRoOwotfQotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEluaXRpYWxpemVzIG1lZGlhIGxpYnJhcmllcyAoZS5nLiBmZm1wZWcpIGFzIHdlbGwgYXMgQ1BVIHNwZWNpZmljIG1lZGlhCi0vLyBmZWF0dXJlcy4KLU1FRElBX0VYUE9SVCB2b2lkIEluaXRpYWxpemVNZWRpYUxpYnJhcnkoKTsKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLS8vIFRlbGxzIHRoZSBtZWRpYSBsaWJyYXJ5IGl0IGhhcyBzdXBwb3J0IGZvciBPUyBsZXZlbCBkZWNvZGVycy4gU2hvdWxkIG9ubHkgYmUKLS8vIHVzZWQgZm9yIGFjdHVhbCBkZWNvZGVycyAoZS5nLiBNZWRpYUNvZGVjKSBhbmQgbm90IGZ1bGwtZmVhdHVyZWQgcGxheWVycwotLy8gKGUuZy4gTWVkaWFQbGF5ZXIpLgotTUVESUFfRVhQT1JUIHZvaWQgRW5hYmxlUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpOwotTUVESUFfRVhQT1JUIGJvb2wgSGFzUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpOwotCi0vLyBJbmRpY2F0ZXMgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIE9wdXMuIERldGVybWluZWQgKk9OTFkqIGJ5IHRoZSBwbGF0Zm9ybQotLy8gdmVyc2lvbiwgc28gZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgZWl0aGVyIGNhbiBhY3R1YWxseSBiZSBwbGF5ZWQuCi1NRURJQV9FWFBPUlQgYm9vbCBQbGF0Zm9ybUhhc09wdXNTdXBwb3J0KCk7Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5pZmllZCBtZWRpYSBwaXBlbGluZSBpcyBlbmFibGVkOyB0aGUgcGlwZWxpbmUgbWF5IHN0aWxsCi0vLyBub3Qgd29yayBmb3IgYWxsIGNvZGVjcyBpZiBIYXNQbGF0Zm9ybURlY29kZXJTdXBwb3J0KCkgaXMgZmFsc2UuIFBsZWFzZSBzZWUKLS8vIE1pbWVVdGlsIGZvciBhbiBleGhhdXN0aXZlIGxpc3Rpbmcgb2Ygc3VwcG9ydGVkIGNvZGVjcy4KLS8vCi0vLyBUT0RPKGRhbGVjdXJ0aXMpOiBUaGVzZSBtZXRob2RzIGFyZSB0ZW1wb3JhcnkgYW5kIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGhlCi0vLyB1bmlmaWVkIG1lZGlhIHBpcGVsaW5lIGlzIHN1cHBvcnRlZCBldmVyeXdoZXJlLiAgaHR0cDovL2NyYnVnLmNvbS81ODA2MjYuCi1NRURJQV9FWFBPUlQgYm9vbCBJc1VuaWZpZWRNZWRpYVBpcGVsaW5lRW5hYmxlZCgpOwotCi0vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBsYXRmb3JtIGRlY29kZXJzIGFyZSBhdmFpbGFibGUgZm9yIHVzZS4KLS8vIFRoaXMgaW5jbHVkZXMgZGVjb2RlcnMgYmVpbmcgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBhbmQgYWNjZXNzaWJsZSwgc3VjaAotLy8gYXMgdmlhIHRoZSBHUFUgcHJvY2Vzcy4gU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgYWN0dWFsIGRlY29kZXJzCi0vLyAoZS5nLiBNZWRpYUNvZGVjKSBhbmQgbm90IGZ1bGwtZmVhdHVyZWQgcGxheWVycyAoZS5nLiBNZWRpYVBsYXllcikuCi1NRURJQV9FWFBPUlQgYm9vbCBBcmVQbGF0Zm9ybURlY29kZXJzQXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfTUVESUFfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NsaWVudC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NsaWVudC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0MjMwMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9jbGllbnQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9jbGllbnQuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBNZWRpYUNsaWVudCogZ19tZWRpYV9jbGllbnQgPSBOVUxMOwotCi12b2lkIFNldE1lZGlhQ2xpZW50KE1lZGlhQ2xpZW50KiBtZWRpYV9jbGllbnQpIHsKLSAgZ19tZWRpYV9jbGllbnQgPSBtZWRpYV9jbGllbnQ7Ci19Ci0KLU1lZGlhQ2xpZW50KiBHZXRNZWRpYUNsaWVudCgpIHsgcmV0dXJuIGdfbWVkaWFfY2xpZW50OyB9Ci0KLUtleVN5c3RlbUluZm9Gb3JVTUE6OktleVN5c3RlbUluZm9Gb3JVTUEoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfc3lzdGVtX25hbWVfZm9yX3VtYSkKLSAgICA6IGtleV9zeXN0ZW0oa2V5X3N5c3RlbSksCi0gICAgICBrZXlfc3lzdGVtX25hbWVfZm9yX3VtYShrZXlfc3lzdGVtX25hbWVfZm9yX3VtYSkge30KLQotS2V5U3lzdGVtSW5mb0ZvclVNQTo6fktleVN5c3RlbUluZm9Gb3JVTUEoKSB7fQotCi1NZWRpYUNsaWVudDo6TWVkaWFDbGllbnQoKSB7fQotCi1NZWRpYUNsaWVudDo6fk1lZGlhQ2xpZW50KCkge30KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9jbGllbnQuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGFlMzIwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0NMSUVOVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9DTElFTlRfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uva2V5X3N5c3RlbV9wcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fY29kZWNzLmgiCi0jaW5jbHVkZSAidXJsL2d1cmwuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNZWRpYUNsaWVudDsKLQotLy8gU2V0dGVyIGZvciB0aGUgY2xpZW50LiBJZiBhIGN1c3RvbWl6ZWQgY2xpZW50IGlzIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldAotLy8gZWFybHksIGJlZm9yZSB0aGUgY2xpZW50IGNvdWxkIHBvc3NpYmx5IGJlIHVzZWQuCi1NRURJQV9FWFBPUlQgdm9pZCBTZXRNZWRpYUNsaWVudChNZWRpYUNsaWVudCogbWVkaWFfY2xpZW50KTsKLQotLy8gTWVkaWEncyBlbWJlZGRlciBBUEkgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBtZWRpYS4KLSNpZiBkZWZpbmVkKE1FRElBX0lNUExFTUVOVEFUSU9OKSB8fCBkZWZpbmVkKE1FRElBX0JMSU5LX0lNUExFTUVOVEFUSU9OKQotLy8gR2V0dGVyIGZvciB0aGUgY2xpZW50LiBSZXR1cm5zIE5VTEwgaWYgbm8gY3VzdG9taXplZCBjbGllbnQgaXMgbmVlZGVkLgotTUVESUFfRVhQT1JUIE1lZGlhQ2xpZW50KiBHZXRNZWRpYUNsaWVudCgpOwotI2VuZGlmCi0KLXN0cnVjdCBNRURJQV9FWFBPUlQgS2V5U3lzdGVtSW5mb0ZvclVNQSB7Ci0gIEtleVN5c3RlbUluZm9Gb3JVTUEoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9zeXN0ZW1fbmFtZV9mb3JfdW1hKTsKLSAgfktleVN5c3RlbUluZm9Gb3JVTUEoKTsKLQotICAvLyBDb25jcmV0ZSBrZXkgc3lzdGVtIG5hbWU7Ci0gIHN0ZDo6c3RyaW5nIGtleV9zeXN0ZW07Ci0KLSAgLy8gRGlzcGxheSBuYW1lIGZvciBVTUEgcmVwb3J0aW5nLiBGb3IgZXhhbXBsZSwgdGhlIGRpc3BsYXkgbmFtZSBmb3IKLSAgLy8gIm9yZy53My5jbGVhcmtleSIgaXMgIkNsZWFyS2V5Ii4gV2hlbiBwcm92aWRpbmcgdGhpcyB2YWx1ZSwgbWFrZSBzdXJlIHRvCi0gIC8vIHVwZGF0ZSB0b29scy9tZXRyaWNzL2hpc3RvZ3JhbXMvaGlzdG9ncmFtcy54bWwuCi0gIHN0ZDo6c3RyaW5nIGtleV9zeXN0ZW1fbmFtZV9mb3JfdW1hOwotfTsKLQotLy8gQSBjbGllbnQgaW50ZXJmYWNlIGZvciBlbWJlZGRlcnMgKGUuZy4gY29udGVudC9yZW5kZXJlcikgdG8gcHJvdmlkZQotLy8gY3VzdG9taXplZCBzZXJ2aWNlLgotY2xhc3MgTUVESUFfRVhQT1JUIE1lZGlhQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIE1lZGlhQ2xpZW50KCk7Ci0gIHZpcnR1YWwgfk1lZGlhQ2xpZW50KCk7Ci0KLSAgLy8gUHJvdmlkZXMgVU1BIGluZm8gZm9yIGtleSBzeXN0ZW1zIHRoYXQgU0hPVUxEIGJlIHJlcG9ydGVkIHRvIFVNQSwgbm8gbWF0dGVyCi0gIC8vIHdoZXRoZXIgYSBrZXkgc3lzdGVtIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGlzIGNsaWVudCBvciBub3QuIE9ubHkKLSAgLy8gY2FsbGVkIG9uY2UgcGVyIGluc3RhbmNlLgotICB2aXJ0dWFsIHZvaWQgQWRkS2V5U3lzdGVtc0luZm9Gb3JVTUEoCi0gICAgICBzdGQ6OnZlY3RvcjxLZXlTeXN0ZW1JbmZvRm9yVU1BPioga2V5X3N5c3RlbXNfaW5mb19mb3JfdW1hKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyB3aGV0aGVyIGNsaWVudCBrZXkgc3lzdGVtcyBwcm9wZXJ0aWVzIHNob3VsZCBiZSB1cGRhdGVkLgotICB2aXJ0dWFsIGJvb2wgSXNLZXlTeXN0ZW1zVXBkYXRlTmVlZGVkKCkgPSAwOwotCi0gIC8vIEFkZHMgcHJvcGVydGllcyBmb3Igc3VwcG9ydGVkIGtleSBzeXN0ZW1zLgotICB2aXJ0dWFsIHZvaWQgQWRkU3VwcG9ydGVkS2V5U3lzdGVtcygKLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxLZXlTeXN0ZW1Qcm9wZXJ0aWVzPj4qCi0gICAgICAgICAga2V5X3N5c3RlbXNfcHJvcGVydGllcykgPSAwOwotCi0gIC8vIFJlY29yZHMgYSBkb21haW4gYW5kIHJlZ2lzdHJ5IG9mIGEgdXJsIHRvIGEgUmFwcG9yIHByaXZhY3ktcHJlc2VydmluZwotICAvLyBtZXRyaWMuIFNlZTogaHR0cHM6Ly93d3cuY2hyb21pdW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy9yYXBwb3IKLSAgdmlydHVhbCB2b2lkIFJlY29yZFJhcHBvclVSTChjb25zdCBzdGQ6OnN0cmluZyYgbWV0cmljLCBjb25zdCBHVVJMJiB1cmwpID0gMDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHZpZGVvIGNvZGVjLCBwcm9maWxlIGFuZCBsZXZlbCBpcwotICAvLyBzdXBwb3J0ZWQuIFRoZSB8bGV2ZWx8IHZhbHVlIGlzIGNvZGVjLXNwZWNpZmljLgotICB2aXJ0dWFsIGJvb2wgSXNTdXBwb3J0ZWRWaWRlb0NvbmZpZyhWaWRlb0NvZGVjIGNvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlLCBpbnQgbGV2ZWwpID0gMDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0NMSUVOVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfY29udGVudF90eXBlLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfY29udGVudF90eXBlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTI5OGQ2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NvbnRlbnRfdHlwZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2NvbnRlbnRfdHlwZS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBpbnQga01pbmltdW1Db250ZW50RHVyYXRpb25TZWNzID0gNTsKLX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotTWVkaWFDb250ZW50VHlwZSBEdXJhdGlvblRvTWVkaWFDb250ZW50VHlwZShiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24pIHsKLSAgLy8gQSB6ZXJvIGR1cmF0aW9uIGluZGljYXRlcyB0aGF0IHRoZSBkdXJhdGlvbiBpcyB1bmtub3duLiAiUGVyc2lzdGVudCIgdHlwZQotICAvLyBzaG91bGQgYmUgdXNlZCBpbiB0aGlzIGNhc2UuCi0gIHJldHVybiAoZHVyYXRpb24uaXNfemVybygpIHx8Ci0gICAgICAgICAgZHVyYXRpb24gPiBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKGtNaW5pbXVtQ29udGVudER1cmF0aW9uU2VjcykpCi0gICAgICAgICAgICAgPyBNZWRpYUNvbnRlbnRUeXBlOjpQZXJzaXN0ZW50Ci0gICAgICAgICAgICAgOiBNZWRpYUNvbnRlbnRUeXBlOjpUcmFuc2llbnQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfY29udGVudF90eXBlLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9jb250ZW50X3R5cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ZmM4OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9jb250ZW50X3R5cGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9DT05URU5UX1RZUEVfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfQ09OVEVOVF9UWVBFX0hfCi0KLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFRoZSBjb250ZW50IHR5cGUgb2YgYSBtZWRpYSBwbGF5ZXIsIHdoaWNoIHdpbGwgYmUgdXNlZCBieSBNZWRpYVNlc3Npb24gdG8KLS8vIGNvbnRyb2wgaXRzIHBsYXllcnMuCi1lbnVtIGNsYXNzIE1lZGlhQ29udGVudFR5cGUgewotICAvLyBUeXBlIGluZGljYXRpbmcgdGhhdCBhIHBsYXllciBpcyBwZXJzaXN0ZW50LCB3aGljaCBuZWVkcyB0byB0YWtlIGF1ZGlvCi0gIC8vIGZvY3VzIHRvIHBsYXkuCi0gIFBlcnNpc3RlbnQsCi0gIC8vIFR5cGUgaW5kaWNhdGluZyB0aGF0IGEgcGxheWVyIG9ubHkgcGxheXMgYSB0cmFuc2llbnQgc291bmQuCi0gIFRyYW5zaWVudCwKLSAgLy8gVHlwZSBpbmRpY2F0aW5nIHRoYXQgYSBwbGF5ZXIgaXMgYSBQZXBwZXIgaW5zdGFuY2UuIE1lZGlhU2Vzc2lvbiBtYXkgZHVjawotICAvLyB0aGUgcGxheWVyIGluc3RlYWQgb2YgcGF1c2luZyBpdC4KLSAgUGVwcGVyLAotICAvLyBUeXBlIGluZGljYXRpbmcgdGhhdCBhIHBsYXllciBjYW5ub3QgYmUgY29udHJvbGxlZC4gTWVkaWFTZXNzaW9uIHdpbCBpZ25vcmUKLSAgLy8gdGhpcyBwbGF5ZXIuCi0gIFVuY29udHJvbGxhYmxlCi19OwotCi0vLyBVdGlsaXR5IGZ1bmN0aW9uIGZvciBkZWNpZGluZyB0aGUgTWVkaWFDb250ZW50VHlwZSBvZiBhIHBsYXllciBiYXNlZCBvbiBpdHMKLS8vIGR1cmF0aW9uLgotTUVESUFfRVhQT1JUIE1lZGlhQ29udGVudFR5cGUKLUR1cmF0aW9uVG9NZWRpYUNvbnRlbnRUeXBlKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0NPTlRFTlRfVFlQRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDk5Nzk1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2ZpbGVfY2hlY2tlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9maWxlX2NoZWNrZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mZm1wZWcvZmZtcGVnX2NvbW1vbi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2Jsb2NraW5nX3VybF9wcm90b2NvbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2ZmbXBlZ19nbHVlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvZmlsZV9kYXRhX3NvdXJjZS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQ2NF90IGtNYXhDaGVja1RpbWVJblNlY29uZHMgPSA1OwotCi1zdGF0aWMgdm9pZCBPbkVycm9yKGJvb2wqIGNhbGxlZCkgeyAqY2FsbGVkID0gZmFsc2U7IH0KLQotTWVkaWFGaWxlQ2hlY2tlcjo6TWVkaWFGaWxlQ2hlY2tlcihiYXNlOjpGaWxlIGZpbGUpIDogZmlsZV8oc3RkOjptb3ZlKGZpbGUpKSB7fQotCi1NZWRpYUZpbGVDaGVja2VyOjp+TWVkaWFGaWxlQ2hlY2tlcigpIHt9Ci0KLWJvb2wgTWVkaWFGaWxlQ2hlY2tlcjo6U3RhcnQoYmFzZTo6VGltZURlbHRhIGNoZWNrX3RpbWUpIHsKLSAgbWVkaWE6OkZpbGVEYXRhU291cmNlIHNvdXJjZShzdGQ6Om1vdmUoZmlsZV8pKTsKLSAgYm9vbCByZWFkX29rID0gdHJ1ZTsKLSAgbWVkaWE6OkJsb2NraW5nVXJsUHJvdG9jb2wgcHJvdG9jb2woJnNvdXJjZSwgYmFzZTo6QmluZCgmT25FcnJvciwgJnJlYWRfb2spKTsKLSAgbWVkaWE6OkZGbXBlZ0dsdWUgZ2x1ZSgmcHJvdG9jb2wpOwotICBBVkZvcm1hdENvbnRleHQqIGZvcm1hdF9jb250ZXh0ID0gZ2x1ZS5mb3JtYXRfY29udGV4dCgpOwotCi0gIGlmICghZ2x1ZS5PcGVuQ29udGV4dCgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKGF2Zm9ybWF0X2ZpbmRfc3RyZWFtX2luZm8oZm9ybWF0X2NvbnRleHQsIE5VTEwpIDwgMCkgcmV0dXJuIGZhbHNlOwotCi0gIC8vIFJlbWVtYmVyIHRoZSBjb2RlYyBjb250ZXh0IGZvciBhbnkgZGVjb2RhYmxlIGF1ZGlvIG9yIHZpZGVvIHN0cmVhbXMuCi0gIHN0ZDo6bWFwPGludCwgQVZDb2RlY0NvbnRleHQqPiBzdHJlYW1fY29udGV4dHM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0X2NvbnRleHQtPm5iX3N0cmVhbXM7ICsraSkgewotICAgIEFWQ29kZWNDb250ZXh0KiBjID0gZm9ybWF0X2NvbnRleHQtPnN0cmVhbXNbaV0tPmNvZGVjOwotICAgIGlmIChjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9BVURJTyB8fAotICAgICAgICBjLT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgewotICAgICAgQVZDb2RlYyogY29kZWMgPSBhdmNvZGVjX2ZpbmRfZGVjb2RlcihjLT5jb2RlY19pZCk7Ci0gICAgICBpZiAoY29kZWMgJiYgYXZjb2RlY19vcGVuMihjLCBjb2RlYywgTlVMTCkgPj0gMCkgc3RyZWFtX2NvbnRleHRzW2ldID0gYzsKLSAgICB9Ci0gIH0KLQotICBpZiAoc3RyZWFtX2NvbnRleHRzLnNpemUoKSA9PSAwKSByZXR1cm4gZmFsc2U7Ci0KLSAgQVZQYWNrZXQgcGFja2V0OwotICBzdGQ6OnVuaXF1ZV9wdHI8QVZGcmFtZSwgbWVkaWE6OlNjb3BlZFB0ckFWRnJlZUZyYW1lPiBmcmFtZShhdl9mcmFtZV9hbGxvYygpKTsKLSAgaW50IHJlc3VsdCA9IDA7Ci0KLSAgY29uc3QgYmFzZTo6VGltZVRpY2tzIGRlYWRsaW5lID0KLSAgICAgIGJhc2U6OlRpbWVUaWNrczo6Tm93KCkgKwotICAgICAgc3RkOjptaW4oY2hlY2tfdGltZSwKLSAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoa01heENoZWNrVGltZUluU2Vjb25kcykpOwotICBkbyB7Ci0gICAgcmVzdWx0ID0gYXZfcmVhZF9mcmFtZShnbHVlLmZvcm1hdF9jb250ZXh0KCksICZwYWNrZXQpOwotICAgIGlmIChyZXN1bHQgPCAwKSBicmVhazsKLQotICAgIHN0ZDo6bWFwPGludCwgQVZDb2RlY0NvbnRleHQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPQotICAgICAgICBzdHJlYW1fY29udGV4dHMuZmluZChwYWNrZXQuc3RyZWFtX2luZGV4KTsKLSAgICBpZiAoaXQgPT0gc3RyZWFtX2NvbnRleHRzLmVuZCgpKSB7Ci0gICAgICBhdl9wYWNrZXRfdW5yZWYoJnBhY2tldCk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgQVZDb2RlY0NvbnRleHQqIGF2X2NvbnRleHQgPSBpdC0+c2Vjb25kOwotCi0gICAgaW50IGZyYW1lX2RlY29kZWQgPSAwOwotICAgIGlmIChhdl9jb250ZXh0LT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9BVURJTykgewotICAgICAgLy8gQSBzaGFsbG93IGNvcHkgb2YgcGFja2V0IHNvIHdlIGNhbiBzbGlkZSBwYWNrZXQuZGF0YSBhcyBmcmFtZXMgYXJlCi0gICAgICAvLyBkZWNvZGVkOyBvdGhlcndpc2UgYXZfcGFja2V0X3VucmVmKCkgd2lsbCBjb3JydXB0IG1lbW9yeS4KLSAgICAgIEFWUGFja2V0IHRlbXBfcGFja2V0ID0gcGFja2V0OwotICAgICAgZG8gewotICAgICAgICByZXN1bHQgPSBhdmNvZGVjX2RlY29kZV9hdWRpbzQoYXZfY29udGV4dCwgZnJhbWUuZ2V0KCksICZmcmFtZV9kZWNvZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcGFja2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApIGJyZWFrOwotICAgICAgICBhdl9mcmFtZV91bnJlZihmcmFtZS5nZXQoKSk7Ci0gICAgICAgIHRlbXBfcGFja2V0LnNpemUgLT0gcmVzdWx0OwotICAgICAgICB0ZW1wX3BhY2tldC5kYXRhICs9IHJlc3VsdDsKLSAgICAgICAgZnJhbWVfZGVjb2RlZCA9IDA7Ci0gICAgICB9IHdoaWxlICh0ZW1wX3BhY2tldC5zaXplID4gMCk7Ci0gICAgfSBlbHNlIGlmIChhdl9jb250ZXh0LT5jb2RlY190eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykgewotICAgICAgcmVzdWx0ID0gYXZjb2RlY19kZWNvZGVfdmlkZW8yKGF2X2NvbnRleHQsIGZyYW1lLmdldCgpLCAmZnJhbWVfZGVjb2RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0KTsKLSAgICAgIGlmIChyZXN1bHQgPj0gMCAmJiBmcmFtZV9kZWNvZGVkKSBhdl9mcmFtZV91bnJlZihmcmFtZS5nZXQoKSk7Ci0gICAgfQotICAgIGF2X3BhY2tldF91bnJlZigmcGFja2V0KTsKLSAgfSB3aGlsZSAoYmFzZTo6VGltZVRpY2tzOjpOb3coKSA8IGRlYWRsaW5lICYmIHJlYWRfb2sgJiYgcmVzdWx0ID49IDApOwotCi0gIHJldHVybiByZWFkX29rICYmIChyZXN1bHQgPT0gQVZFUlJPUl9FT0YgfHwgcmVzdWx0ID49IDApOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2ZpbGVfY2hlY2tlci5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTFhNDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfRklMRV9DSEVDS0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0ZJTEVfQ0hFQ0tFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9maWxlcy9maWxlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBiYXNlIHsKLWNsYXNzIFRpbWVEZWx0YTsKLX0KLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUaGlzIGNsYXNzIHRyaWVzIHRvIGRldGVybWluZSBpZiBhIGZpbGUgaXMgYSB2YWxpZCBtZWRpYSBmaWxlLiBUaGUgZW50aXJlCi0vLyBmaWxlIGlzIG5vdCBkZWNvZGVkIHNvIGEgcG9zaXRpdmUgcmVzdWx0IGZyb20gdGhpcyBjbGFzcyBkb2VzIG5vdCBtYWtlIHRoZQotLy8gZmlsZSBzYWZlIHRvIHVzZSBpbiB0aGUgYnJvd3NlciBwcm9jZXNzLgotY2xhc3MgTUVESUFfRVhQT1JUIE1lZGlhRmlsZUNoZWNrZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWVkaWFGaWxlQ2hlY2tlcihiYXNlOjpGaWxlIGZpbGUpOwotICB+TWVkaWFGaWxlQ2hlY2tlcigpOwotCi0gIC8vIEFmdGVyIG9wZW5pbmcgfGZpbGV8LCB1cCB0byB8Y2hlY2tfdGltZXwgYW1vdW50IG9mIHdhbGwtY2xvY2sgdGltZSBpcyBzcGVudAotICAvLyBkZWNvZGluZyB0aGUgZmlsZS4gVGhlIGFtb3VudCBvZiBhdWRpby92aWRlbyBkYXRhIGRlY29kZWQgd2lsbCBkZXBlbmQgb24KLSAgLy8gdGhlIGJpdHJhdGUgb2YgdGhlIGZpbGUgYW5kIHRoZSBzcGVlZCBvZiB0aGUgQ1BVLgotICBib29sIFN0YXJ0KGJhc2U6OlRpbWVEZWx0YSBjaGVja190aW1lKTsKLQotIHByaXZhdGU6Ci0gIGJhc2U6OkZpbGUgZmlsZV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lZGlhRmlsZUNoZWNrZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfTUVESUFfRklMRV9DSEVDS0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9maWxlX2NoZWNrZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9maWxlX2NoZWNrZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTY2MTcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZmlsZV9jaGVja2VyLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvZmlsZXMvZmlsZS5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIHZvaWQgUnVuTWVkaWFGaWxlQ2hlY2tlcihjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGJvb2wgZXhwZWN0YXRpb24pIHsKLSAgYmFzZTo6RmlsZSBmaWxlKEdldFRlc3REYXRhRmlsZVBhdGgoZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgYmFzZTo6RmlsZTo6RkxBR19PUEVOIHwgYmFzZTo6RmlsZTo6RkxBR19SRUFEKTsKLSAgQVNTRVJUX1RSVUUoZmlsZS5Jc1ZhbGlkKCkpOwotCi0gIE1lZGlhRmlsZUNoZWNrZXIgY2hlY2tlcihzdGQ6Om1vdmUoZmlsZSkpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgY2hlY2tfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMDApOwotICBib29sIHJlc3VsdCA9IGNoZWNrZXIuU3RhcnQoY2hlY2tfdGltZSk7Ci0gIEVYUEVDVF9FUShleHBlY3RhdGlvbiwgcmVzdWx0KTsKLX0KLQotVEVTVChNZWRpYUZpbGVDaGVja2VyVGVzdCwgSW52YWxpZEZpbGUpIHsKLSAgUnVuTWVkaWFGaWxlQ2hlY2tlcigidGVuX2J5dGVfZmlsZSIsIGZhbHNlKTsKLX0KLQotVEVTVChNZWRpYUZpbGVDaGVja2VyVGVzdCwgVmlkZW8pIHsgUnVuTWVkaWFGaWxlQ2hlY2tlcigiYmVhci5vZ3YiLCB0cnVlKTsgfQotCi1URVNUKE1lZGlhRmlsZUNoZWNrZXJUZXN0LCBBdWRpbykgeyBSdW5NZWRpYUZpbGVDaGVja2VyKCJzZngub2dnIiwgdHJ1ZSk7IH0KLQotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLVRFU1QoTWVkaWFGaWxlQ2hlY2tlclRlc3QsIE1QMykgeyBSdW5NZWRpYUZpbGVDaGVja2VyKCJzZngubXAzIiwgdHJ1ZSk7IH0KLSNlbmRpZgotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzYjU4MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyOTYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2F0b21pY19zZXF1ZW5jZV9udW0uaCIKLSNpbmNsdWRlICJiYXNlL2pzb24vanNvbl93cml0ZXIuaCIKLSNpbmNsdWRlICJiYXNlL3ZhbHVlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEEgY291bnQgb2YgYWxsIE1lZGlhTG9ncyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MuIFVzZWQgdG8gZ2VuZXJhdGUKLS8vIHVuaXF1ZSBJRHMuCi1zdGF0aWMgYmFzZTo6QXRvbWljU2VxdWVuY2VOdW1iZXIgZ19tZWRpYV9sb2dfY291bnQ7Ci0KLWNvbnN0IGNoYXIgTWVkaWFMb2c6OmtXYXRjaFRpbWVBdWRpb1ZpZGVvQWxsW10gPQotICAgICJNZWRpYS5XYXRjaFRpbWUuQXVkaW9WaWRlby5BbGwiOwotY29uc3QgY2hhciBNZWRpYUxvZzo6a1dhdGNoVGltZUF1ZGlvVmlkZW9Nc2VbXSA9Ci0gICAgIk1lZGlhLldhdGNoVGltZS5BdWRpb1ZpZGVvLk1TRSI7Ci1jb25zdCBjaGFyIE1lZGlhTG9nOjprV2F0Y2hUaW1lQXVkaW9WaWRlb0VtZVtdID0KLSAgICAiTWVkaWEuV2F0Y2hUaW1lLkF1ZGlvVmlkZW8uRU1FIjsKLWNvbnN0IGNoYXIgTWVkaWFMb2c6OmtXYXRjaFRpbWVBdWRpb1ZpZGVvU3JjW10gPQotICAgICJNZWRpYS5XYXRjaFRpbWUuQXVkaW9WaWRlby5TUkMiOwotY29uc3QgY2hhciBNZWRpYUxvZzo6a1dhdGNoVGltZUF1ZGlvVmlkZW9CYXR0ZXJ5W10gPQotICAgICJNZWRpYS5XYXRjaFRpbWUuQXVkaW9WaWRlby5CYXR0ZXJ5IjsKLWNvbnN0IGNoYXIgTWVkaWFMb2c6OmtXYXRjaFRpbWVBdWRpb1ZpZGVvQWNbXSA9ICJNZWRpYS5XYXRjaFRpbWUuQXVkaW9WaWRlby5BQyI7Ci0KLWNvbnN0IGNoYXIgTWVkaWFMb2c6OmtXYXRjaFRpbWVGaW5hbGl6ZVtdID0gIkZpbmFsaXplV2F0Y2hUaW1lIjsKLWNvbnN0IGNoYXIgTWVkaWFMb2c6OmtXYXRjaFRpbWVGaW5hbGl6ZVBvd2VyW10gPSAiRmluYWxpemVQb3dlcldhdGNoVGltZSI7Ci0KLXN0ZDo6c3RyaW5nIE1lZGlhTG9nOjpNZWRpYUxvZ0xldmVsVG9TdHJpbmcoTWVkaWFMb2dMZXZlbCBsZXZlbCkgewotICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSBNRURJQUxPR19FUlJPUjoKLSAgICAgIHJldHVybiAiZXJyb3IiOwotICAgIGNhc2UgTUVESUFMT0dfSU5GTzoKLSAgICAgIHJldHVybiAiaW5mbyI7Ci0gICAgY2FzZSBNRURJQUxPR19ERUJVRzoKLSAgICAgIHJldHVybiAiZGVidWciOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLU1lZGlhTG9nRXZlbnQ6OlR5cGUgTWVkaWFMb2c6Ok1lZGlhTG9nTGV2ZWxUb0V2ZW50VHlwZShNZWRpYUxvZ0xldmVsIGxldmVsKSB7Ci0gIHN3aXRjaCAobGV2ZWwpIHsKLSAgICBjYXNlIE1FRElBTE9HX0VSUk9SOgotICAgICAgcmV0dXJuIE1lZGlhTG9nRXZlbnQ6Ok1FRElBX0VSUk9SX0xPR19FTlRSWTsKLSAgICBjYXNlIE1FRElBTE9HX0lORk86Ci0gICAgICByZXR1cm4gTWVkaWFMb2dFdmVudDo6TUVESUFfSU5GT19MT0dfRU5UUlk7Ci0gICAgY2FzZSBNRURJQUxPR19ERUJVRzoKLSAgICAgIHJldHVybiBNZWRpYUxvZ0V2ZW50OjpNRURJQV9ERUJVR19MT0dfRU5UUlk7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gTWVkaWFMb2dFdmVudDo6TUVESUFfRVJST1JfTE9HX0VOVFJZOwotfQotCi1zdGQ6OnN0cmluZyBNZWRpYUxvZzo6RXZlbnRUeXBlVG9TdHJpbmcoTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6V0VCTUVESUFQTEFZRVJfQ1JFQVRFRDoKLSAgICAgIHJldHVybiAiV0VCTUVESUFQTEFZRVJfQ1JFQVRFRCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpXRUJNRURJQVBMQVlFUl9ERVNUUk9ZRUQ6Ci0gICAgICByZXR1cm4gIldFQk1FRElBUExBWUVSX0RFU1RST1lFRCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpMT0FEOgotICAgICAgcmV0dXJuICJMT0FEIjsKLSAgICBjYXNlIE1lZGlhTG9nRXZlbnQ6OlNFRUs6Ci0gICAgICByZXR1cm4gIlNFRUsiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6UExBWToKLSAgICAgIHJldHVybiAiUExBWSI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpQQVVTRToKLSAgICAgIHJldHVybiAiUEFVU0UiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6UElQRUxJTkVfU1RBVEVfQ0hBTkdFRDoKLSAgICAgIHJldHVybiAiUElQRUxJTkVfU1RBVEVfQ0hBTkdFRCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpQSVBFTElORV9FUlJPUjoKLSAgICAgIHJldHVybiAiUElQRUxJTkVfRVJST1IiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6VklERU9fU0laRV9TRVQ6Ci0gICAgICByZXR1cm4gIlZJREVPX1NJWkVfU0VUIjsKLSAgICBjYXNlIE1lZGlhTG9nRXZlbnQ6OkRVUkFUSU9OX1NFVDoKLSAgICAgIHJldHVybiAiRFVSQVRJT05fU0VUIjsKLSAgICBjYXNlIE1lZGlhTG9nRXZlbnQ6OlRPVEFMX0JZVEVTX1NFVDoKLSAgICAgIHJldHVybiAiVE9UQUxfQllURVNfU0VUIjsKLSAgICBjYXNlIE1lZGlhTG9nRXZlbnQ6Ok5FVFdPUktfQUNUSVZJVFlfU0VUOgotICAgICAgcmV0dXJuICJORVRXT1JLX0FDVElWSVRZX1NFVCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpFTkRFRDoKLSAgICAgIHJldHVybiAiRU5ERUQiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6VEVYVF9FTkRFRDoKLSAgICAgIHJldHVybiAiVEVYVF9FTkRFRCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpCVUZGRVJFRF9FWFRFTlRTX0NIQU5HRUQ6Ci0gICAgICByZXR1cm4gIkJVRkZFUkVEX0VYVEVOVFNfQ0hBTkdFRCI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpNRURJQV9FUlJPUl9MT0dfRU5UUlk6Ci0gICAgICByZXR1cm4gIk1FRElBX0VSUk9SX0xPR19FTlRSWSI7Ci0gICAgY2FzZSBNZWRpYUxvZ0V2ZW50OjpNRURJQV9JTkZPX0xPR19FTlRSWToKLSAgICAgIHJldHVybiAiTUVESUFfSU5GT19MT0dfRU5UUlkiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6TUVESUFfREVCVUdfTE9HX0VOVFJZOgotICAgICAgcmV0dXJuICJNRURJQV9ERUJVR19MT0dfRU5UUlkiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6UFJPUEVSVFlfQ0hBTkdFOgotICAgICAgcmV0dXJuICJQUk9QRVJUWV9DSEFOR0UiOwotICAgIGNhc2UgTWVkaWFMb2dFdmVudDo6V0FUQ0hfVElNRV9VUERBVEU6Ci0gICAgICByZXR1cm4gIldBVENIX1RJTUVfVVBEQVRFIjsKLSAgfQotICBOT1RSRUFDSEVEKCk7Ci0gIHJldHVybiBOVUxMOwotfQotCi1zdGQ6OnN0cmluZyBNZWRpYUxvZzo6UGlwZWxpbmVTdGF0dXNUb1N0cmluZyhQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKLSAgc3dpdGNoIChzdGF0dXMpIHsKLSAgICBjYXNlIFBJUEVMSU5FX09LOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogb2siOwotICAgIGNhc2UgUElQRUxJTkVfRVJST1JfTkVUV09SSzoKLSAgICAgIHJldHVybiAicGlwZWxpbmU6IG5ldHdvcmsgZXJyb3IiOwotICAgIGNhc2UgUElQRUxJTkVfRVJST1JfREVDT0RFOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogZGVjb2RlIGVycm9yIjsKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX0FCT1JUOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogYWJvcnQiOwotICAgIGNhc2UgUElQRUxJTkVfRVJST1JfSU5JVElBTElaQVRJT05fRkFJTEVEOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogaW5pdGlhbGl6YXRpb24gZmFpbGVkIjsKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX0NPVUxEX05PVF9SRU5ERVI6Ci0gICAgICByZXR1cm4gInBpcGVsaW5lOiBjb3VsZCBub3QgcmVuZGVyIjsKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX0VYVEVSTkFMX1JFTkRFUkVSX0ZBSUxFRDoKLSAgICAgIHJldHVybiAicGlwZWxpbmU6IGV4dGVybmFsIHJlbmRlcmVyIGZhaWxlZCI7Ci0gICAgY2FzZSBQSVBFTElORV9FUlJPUl9SRUFEOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogcmVhZCBlcnJvciI7Ci0gICAgY2FzZSBQSVBFTElORV9FUlJPUl9JTlZBTElEX1NUQVRFOgotICAgICAgcmV0dXJuICJwaXBlbGluZTogaW52YWxpZCBzdGF0ZSI7Ci0gICAgY2FzZSBERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9PUEVOOgotICAgICAgcmV0dXJuICJkZW11eGVyOiBjb3VsZCBub3Qgb3BlbiI7Ci0gICAgY2FzZSBERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRToKLSAgICAgIHJldHVybiAiZGVtdXhlcjogY291bGQgbm90IHBhcnNlIjsKLSAgICBjYXNlIERFTVVYRVJfRVJST1JfTk9fU1VQUE9SVEVEX1NUUkVBTVM6Ci0gICAgICByZXR1cm4gImRlbXV4ZXI6IG5vIHN1cHBvcnRlZCBzdHJlYW1zIjsKLSAgICBjYXNlIERFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRDoKLSAgICAgIHJldHVybiAiZGVjb2Rlcjogbm90IHN1cHBvcnRlZCI7Ci0gICAgY2FzZSBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQ6Ci0gICAgICByZXR1cm4gImNodW5rIGRlbXV4ZXI6IGFwcGVuZCBmYWlsZWQiOwotICAgIGNhc2UgQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX0RFQ09ERV9FUlJPUjoKLSAgICAgIHJldHVybiAiY2h1bmsgZGVtdXhlcjogYXBwbGljYXRpb24gcmVxdWVzdGVkIGRlY29kZSBlcnJvciBvbiBlb3MiOwotICAgIGNhc2UgQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX05FVFdPUktfRVJST1I6Ci0gICAgICByZXR1cm4gImNodW5rIGRlbXV4ZXI6IGFwcGxpY2F0aW9uIHJlcXVlc3RlZCBuZXR3b3JrIGVycm9yIG9uIGVvcyI7Ci0gICAgY2FzZSBBVURJT19SRU5ERVJFUl9FUlJPUjoKLSAgICAgIHJldHVybiAiYXVkaW8gcmVuZGVyZXI6IG91dHB1dCBkZXZpY2UgcmVwb3J0ZWQgYW4gZXJyb3IiOwotICAgIGNhc2UgQVVESU9fUkVOREVSRVJfRVJST1JfU1BMSUNFX0ZBSUxFRDoKLSAgICAgIHJldHVybiAiYXVkaW8gcmVuZGVyZXI6IHBvc3QtZGVjb2RlIGF1ZGlvIHNwbGljaW5nIGZhaWxlZCI7Ci0gICAgY2FzZSBQTEFZQkFDS19DQVBBQklMSVRZX0NIQU5HRUQ6Ci0gICAgICByZXR1cm4gInBpcGVsaW5lOiBwbGF5YmFjayBjYXBhYmlsaXR5IGNoYW5nZWQiOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0ZDo6c3RyaW5nIE1lZGlhTG9nOjpNZWRpYUV2ZW50VG9Mb2dTdHJpbmcoY29uc3QgTWVkaWFMb2dFdmVudCYgZXZlbnQpIHsKLSAgLy8gU3BlY2lhbCBjYXNlIGZvciBQSVBFTElORV9FUlJPUiwgc2luY2UgdGhhdCdzIGJ5IGZhciB0aGUgbW9zdCB1c2VmdWwKLSAgLy8gZXZlbnQgZm9yIGZpZ3VyaW5nIG91dCBtZWRpYSBwaXBlbGluZSBmYWlsdXJlcywgYW5kIGp1c3QgcmVwb3J0aW5nCi0gIC8vIHBpcGVsaW5lIHN0YXR1cyBhcyBudW1lcmljIGNvZGUgaXMgbm90IHZlcnkgaGVscGZ1bC91c2VyLWZyaWVuZGx5LgotICBpbnQgZXJyb3JfY29kZSA9IDA7Ci0gIGlmIChldmVudC50eXBlID09IE1lZGlhTG9nRXZlbnQ6OlBJUEVMSU5FX0VSUk9SICYmCi0gICAgICBldmVudC5wYXJhbXMuR2V0SW50ZWdlcigicGlwZWxpbmVfZXJyb3IiLCAmZXJyb3JfY29kZSkpIHsKLSAgICBQaXBlbGluZVN0YXR1cyBzdGF0dXMgPSBzdGF0aWNfY2FzdDxQaXBlbGluZVN0YXR1cz4oZXJyb3JfY29kZSk7Ci0gICAgcmV0dXJuIEV2ZW50VHlwZVRvU3RyaW5nKGV2ZW50LnR5cGUpICsgIiAiICsKLSAgICAgICAgICAgbWVkaWE6Ok1lZGlhTG9nOjpQaXBlbGluZVN0YXR1c1RvU3RyaW5nKHN0YXR1cyk7Ci0gIH0KLSAgc3RkOjpzdHJpbmcgcGFyYW1zX2pzb247Ci0gIGJhc2U6OkpTT05Xcml0ZXI6OldyaXRlKGV2ZW50LnBhcmFtcywgJnBhcmFtc19qc29uKTsKLSAgcmV0dXJuIEV2ZW50VHlwZVRvU3RyaW5nKGV2ZW50LnR5cGUpICsgIiAiICsgcGFyYW1zX2pzb247Ci19Ci0KLU1lZGlhTG9nOjpNZWRpYUxvZygpIDogaWRfKGdfbWVkaWFfbG9nX2NvdW50LkdldE5leHQoKSkge30KLQotTWVkaWFMb2c6On5NZWRpYUxvZygpIHt9Ci0KLXZvaWQgTWVkaWFMb2c6OkFkZEV2ZW50KHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBldmVudCkge30KLQotc3RkOjpzdHJpbmcgTWVkaWFMb2c6OkdldExhc3RFcnJvck1lc3NhZ2UoKSB7IHJldHVybiAiIjsgfQotCi12b2lkIE1lZGlhTG9nOjpSZWNvcmRSYXBwb3JXaXRoU2VjdXJpdHlPcmlnaW4oY29uc3Qgc3RkOjpzdHJpbmcmIG1ldHJpYykgewotICBEVkxPRygxKSA8PCAiRGVmYXVsdCBNZWRpYUxvZyBkb2Vzbid0IHN1cHBvcnQgcmFwcG9yIHJlcG9ydGluZy4iOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gTWVkaWFMb2c6OkNyZWF0ZUV2ZW50KE1lZGlhTG9nRXZlbnQ6OlR5cGUgdHlwZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQobmV3IE1lZGlhTG9nRXZlbnQpOwotICBldmVudC0+aWQgPSBpZF87Ci0gIGV2ZW50LT50eXBlID0gdHlwZTsKLSAgZXZlbnQtPnRpbWUgPSBiYXNlOjpUaW1lVGlja3M6Ok5vdygpOwotICByZXR1cm4gc3RkOjptb3ZlKGV2ZW50KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IE1lZGlhTG9nOjpDcmVhdGVCb29sZWFuRXZlbnQoCi0gICAgTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksIGJvb2wgdmFsdWUpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IGV2ZW50KENyZWF0ZUV2ZW50KHR5cGUpKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXRCb29sZWFuKHByb3BlcnR5LCB2YWx1ZSk7Ci0gIHJldHVybiBzdGQ6Om1vdmUoZXZlbnQpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gTWVkaWFMb2c6OkNyZWF0ZVN0cmluZ0V2ZW50KAotICAgIE1lZGlhTG9nRXZlbnQ6OlR5cGUgdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHByb3BlcnR5LAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoQ3JlYXRlRXZlbnQodHlwZSkpOwotICBldmVudC0+cGFyYW1zLlNldFN0cmluZyhwcm9wZXJ0eSwgdmFsdWUpOwotICByZXR1cm4gc3RkOjptb3ZlKGV2ZW50KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IE1lZGlhTG9nOjpDcmVhdGVUaW1lRXZlbnQoCi0gICAgTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgcHJvcGVydHksCi0gICAgYmFzZTo6VGltZURlbHRhIHZhbHVlKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBldmVudChDcmVhdGVFdmVudCh0eXBlKSk7Ci0gIGlmICh2YWx1ZS5pc19tYXgoKSkKLSAgICBldmVudC0+cGFyYW1zLlNldFN0cmluZyhwcm9wZXJ0eSwgInVua25vd24iKTsKLSAgZWxzZQotICAgIGV2ZW50LT5wYXJhbXMuU2V0RG91YmxlKHByb3BlcnR5LCB2YWx1ZS5JblNlY29uZHNGKCkpOwotICByZXR1cm4gc3RkOjptb3ZlKGV2ZW50KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IE1lZGlhTG9nOjpDcmVhdGVMb2FkRXZlbnQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoQ3JlYXRlRXZlbnQoTWVkaWFMb2dFdmVudDo6TE9BRCkpOwotICBldmVudC0+cGFyYW1zLlNldFN0cmluZygidXJsIiwgdXJsKTsKLSAgcmV0dXJuIHN0ZDo6bW92ZShldmVudCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBNZWRpYUxvZzo6Q3JlYXRlU2Vla0V2ZW50KGZsb2F0IHNlY29uZHMpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IGV2ZW50KENyZWF0ZUV2ZW50KE1lZGlhTG9nRXZlbnQ6OlNFRUspKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXREb3VibGUoInNlZWtfdGFyZ2V0Iiwgc2Vjb25kcyk7Ci0gIHJldHVybiBzdGQ6Om1vdmUoZXZlbnQpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gTWVkaWFMb2c6OkNyZWF0ZVBpcGVsaW5lRXJyb3JFdmVudCgKLSAgICBQaXBlbGluZVN0YXR1cyBlcnJvcikgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoCi0gICAgICBDcmVhdGVFdmVudChNZWRpYUxvZ0V2ZW50OjpQSVBFTElORV9FUlJPUikpOwotICBldmVudC0+cGFyYW1zLlNldEludGVnZXIoInBpcGVsaW5lX2Vycm9yIiwgZXJyb3IpOwotICByZXR1cm4gc3RkOjptb3ZlKGV2ZW50KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IE1lZGlhTG9nOjpDcmVhdGVWaWRlb1NpemVTZXRFdmVudCgKLSAgICBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IGV2ZW50KAotICAgICAgQ3JlYXRlRXZlbnQoTWVkaWFMb2dFdmVudDo6VklERU9fU0laRV9TRVQpKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXRJbnRlZ2VyKCJ3aWR0aCIsIHdpZHRoKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXRJbnRlZ2VyKCJoZWlnaHQiLCBoZWlnaHQpOwotICByZXR1cm4gc3RkOjptb3ZlKGV2ZW50KTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IE1lZGlhTG9nOjpDcmVhdGVCdWZmZXJlZEV4dGVudHNDaGFuZ2VkRXZlbnQoCi0gICAgaW50NjRfdCBzdGFydCwgaW50NjRfdCBjdXJyZW50LCBpbnQ2NF90IGVuZCkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoCi0gICAgICBDcmVhdGVFdmVudChNZWRpYUxvZ0V2ZW50OjpCVUZGRVJFRF9FWFRFTlRTX0NIQU5HRUQpKTsKLSAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoZWFkZWQgdG8gSlMgd2hlcmUgdGhlcmUgaXMgbm8gaW50NjRfdCBzbyB3ZSB1c2UgYSBkb3VibGUKLSAgLy8gYW5kIGFjY2VwdCBsb3NzIG9mIHByZWNpc2lvbiBhYm92ZSAyXjUzIGJ5dGVzICg4IEV4YWJ5dGVzKS4KLSAgZXZlbnQtPnBhcmFtcy5TZXREb3VibGUoImJ1ZmZlcl9zdGFydCIsIHN0YXJ0KTsKLSAgZXZlbnQtPnBhcmFtcy5TZXREb3VibGUoImJ1ZmZlcl9jdXJyZW50IiwgY3VycmVudCk7Ci0gIGV2ZW50LT5wYXJhbXMuU2V0RG91YmxlKCJidWZmZXJfZW5kIiwgZW5kKTsKLSAgcmV0dXJuIHN0ZDo6bW92ZShldmVudCk7Ci19Ci0KLXZvaWQgTWVkaWFMb2c6OkFkZExvZ0V2ZW50KE1lZGlhTG9nTGV2ZWwgbGV2ZWwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBldmVudCgKLSAgICAgIENyZWF0ZUV2ZW50KE1lZGlhTG9nTGV2ZWxUb0V2ZW50VHlwZShsZXZlbCkpKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXRTdHJpbmcoTWVkaWFMb2dMZXZlbFRvU3RyaW5nKGxldmVsKSwgbWVzc2FnZSk7Ci0gIEFkZEV2ZW50KHN0ZDo6bW92ZShldmVudCkpOwotfQotCi12b2lkIE1lZGlhTG9nOjpTZXRTdHJpbmdQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBldmVudCgKLSAgICAgIENyZWF0ZUV2ZW50KE1lZGlhTG9nRXZlbnQ6OlBST1BFUlRZX0NIQU5HRSkpOwotICBldmVudC0+cGFyYW1zLlNldFN0cmluZyhrZXksIHZhbHVlKTsKLSAgQWRkRXZlbnQoc3RkOjptb3ZlKGV2ZW50KSk7Ci19Ci0KLXZvaWQgTWVkaWFMb2c6OlNldERvdWJsZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoCi0gICAgICBDcmVhdGVFdmVudChNZWRpYUxvZ0V2ZW50OjpQUk9QRVJUWV9DSEFOR0UpKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXREb3VibGUoa2V5LCB2YWx1ZSk7Ci0gIEFkZEV2ZW50KHN0ZDo6bW92ZShldmVudCkpOwotfQotCi12b2lkIE1lZGlhTG9nOjpTZXRCb29sZWFuUHJvcGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQoCi0gICAgICBDcmVhdGVFdmVudChNZWRpYUxvZ0V2ZW50OjpQUk9QRVJUWV9DSEFOR0UpKTsKLSAgZXZlbnQtPnBhcmFtcy5TZXRCb29sZWFuKGtleSwgdmFsdWUpOwotICBBZGRFdmVudChzdGQ6Om1vdmUoZXZlbnQpKTsKLX0KLQotTG9nSGVscGVyOjpMb2dIZWxwZXIoTWVkaWFMb2c6Ok1lZGlhTG9nTGV2ZWwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQotICAgIDogbGV2ZWxfKGxldmVsKSwgbWVkaWFfbG9nXyhtZWRpYV9sb2cpIHsKLSAgRENIRUNLKG1lZGlhX2xvZ18uZ2V0KCkpOwotfQotCi1Mb2dIZWxwZXI6On5Mb2dIZWxwZXIoKSB7IG1lZGlhX2xvZ18tPkFkZExvZ0V2ZW50KGxldmVsXywgc3RyZWFtXy5zdHIoKSk7IH0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWZhYTk4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfTE9HX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0xPR19IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2dfZXZlbnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNRURJQV9FWFBPUlQgTWVkaWFMb2cgOiBwdWJsaWMgYmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8TWVkaWFMb2c+IHsKLSBwdWJsaWM6Ci0gIGVudW0gTWVkaWFMb2dMZXZlbCB7Ci0gICAgTUVESUFMT0dfRVJST1IsCi0gICAgTUVESUFMT0dfSU5GTywKLSAgICBNRURJQUxPR19ERUJVRywKLSAgfTsKLQotICAvLyBDb252ZXJ0IHZhcmlvdXMgZW51bXMgdG8gc3RyaW5ncy4KLSAgc3RhdGljIHN0ZDo6c3RyaW5nIE1lZGlhTG9nTGV2ZWxUb1N0cmluZyhNZWRpYUxvZ0xldmVsIGxldmVsKTsKLSAgc3RhdGljIE1lZGlhTG9nRXZlbnQ6OlR5cGUgTWVkaWFMb2dMZXZlbFRvRXZlbnRUeXBlKE1lZGlhTG9nTGV2ZWwgbGV2ZWwpOwotICBzdGF0aWMgc3RkOjpzdHJpbmcgRXZlbnRUeXBlVG9TdHJpbmcoTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlKTsKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIFBpcGVsaW5lU3RhdHVzVG9TdHJpbmcoUGlwZWxpbmVTdGF0dXMgc3RhdHVzKTsKLQotICBzdGF0aWMgc3RkOjpzdHJpbmcgTWVkaWFFdmVudFRvTG9nU3RyaW5nKGNvbnN0IE1lZGlhTG9nRXZlbnQmIGV2ZW50KTsKLQotICBNZWRpYUxvZygpOwotCi0gIC8vIEFkZCBhbiBldmVudCB0byB0aGlzIGxvZy4gT3ZlcnJpZGVuIGJ5IGluaGVyaXRvcnMgdG8gYWN0dWFsbHkgZG8gc29tZXRoaW5nCi0gIC8vIHdpdGggaXQuCi0gIHZpcnR1YWwgdm9pZCBBZGRFdmVudChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gZXZlbnQpOwotCi0gIC8vIFJldHJpZXZlIGFuIGVycm9yIG1lc3NhZ2UsIGlmIGFueS4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRMYXN0RXJyb3JNZXNzYWdlKCk7Ci0KLSAgLy8gUmVjb3JkcyB0aGUgZG9tYWluIGFuZCByZWdpc3RyeSBvZiB0aGUgY3VycmVudCBmcmFtZSBzZWN1cml0eSBvcmlnaW4gdG8gYQotICAvLyBSYXBwb3IgcHJpdmFjeS1wcmVzZXJ2aW5nIG1ldHJpYy4gU2VlOgotICAvLyAgIGh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2Rlc2lnbi1kb2N1bWVudHMvcmFwcG9yCi0gIHZpcnR1YWwgdm9pZCBSZWNvcmRSYXBwb3JXaXRoU2VjdXJpdHlPcmlnaW4oY29uc3Qgc3RkOjpzdHJpbmcmIG1ldHJpYyk7Ci0KLSAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY3JlYXRlIGV2ZW50cyBhbmQgdGhlaXIgcGFyYW1ldGVycy4KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IENyZWF0ZUV2ZW50KE1lZGlhTG9nRXZlbnQ6OlR5cGUgdHlwZSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBDcmVhdGVCb29sZWFuRXZlbnQoTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZhbHVlKTsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IENyZWF0ZVN0cmluZ0V2ZW50KE1lZGlhTG9nRXZlbnQ6OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBDcmVhdGVUaW1lRXZlbnQoTWVkaWFMb2dFdmVudDo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgdmFsdWUpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gQ3JlYXRlTG9hZEV2ZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gQ3JlYXRlU2Vla0V2ZW50KGZsb2F0IHNlY29uZHMpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gQ3JlYXRlUGlwZWxpbmVFcnJvckV2ZW50KFBpcGVsaW5lU3RhdHVzIGVycm9yKTsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhTG9nRXZlbnQ+IENyZWF0ZVZpZGVvU2l6ZVNldEV2ZW50KHNpemVfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBoZWlnaHQpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFMb2dFdmVudD4gQ3JlYXRlQnVmZmVyZWRFeHRlbnRzQ2hhbmdlZEV2ZW50KAotICAgICAgaW50NjRfdCBzdGFydCwgaW50NjRfdCBjdXJyZW50LCBpbnQ2NF90IGVuZCk7Ci0KLSAgLy8gUmVwb3J0IGEgbG9nIG1lc3NhZ2UgYXQgdGhlIHNwZWNpZmllZCBsb2cgbGV2ZWwuCi0gIHZvaWQgQWRkTG9nRXZlbnQoTWVkaWFMb2dMZXZlbCBsZXZlbCwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOwotCi0gIC8vIFJlcG9ydCBhIHByb3BlcnR5IGNoYW5nZSB3aXRob3V0IGFuIGFjY29tcGFueWluZyBldmVudC4KLSAgdm9pZCBTZXRTdHJpbmdQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIFNldERvdWJsZVByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSk7Ci0gIHZvaWQgU2V0Qm9vbGVhblByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpOwotCi0gIC8vIEhpc3RvZ3JhbSBuYW1lcyB1c2VkIGZvciByZXBvcnRpbmc7IGFsc28gZG91YmxlIGFzIE1lZGlhTG9nIGtleSBuYW1lcy4KLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUF1ZGlvVmlkZW9BbGxbXTsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUF1ZGlvVmlkZW9Nc2VbXTsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUF1ZGlvVmlkZW9FbWVbXTsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUF1ZGlvVmlkZW9TcmNbXTsKLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUF1ZGlvVmlkZW9CYXR0ZXJ5W107Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGtXYXRjaFRpbWVBdWRpb1ZpZGVvQWNbXTsKLQotICAvLyBNYXJrZXJzIHdoaWNoIHNpZ25pZnkgdGhlIHdhdGNoIHRpbWUgc2hvdWxkIGJlIGZpbmFsaXplZCBpbW1lZGlhdGVseS4KLSAgc3RhdGljIGNvbnN0IGNoYXIga1dhdGNoVGltZUZpbmFsaXplW107Ci0gIHN0YXRpYyBjb25zdCBjaGFyIGtXYXRjaFRpbWVGaW5hbGl6ZVBvd2VyW107Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGZyaWVuZCBjbGFzcyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxNZWRpYUxvZz47Ci0gIHZpcnR1YWwgfk1lZGlhTG9nKCk7Ci0KLSBwcml2YXRlOgotICAvLyBBIHVuaXF1ZSAodG8gdGhpcyBwcm9jZXNzKSBpZCBmb3IgdGhpcyBNZWRpYUxvZy4KLSAgaW50MzJfdCBpZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lZGlhTG9nKTsKLX07Ci0KLS8vIEhlbHBlciBjbGFzcyB0byBtYWtlIGl0IGVhc2llciB0byB1c2UgTWVkaWFMb2cgbGlrZSBEVkxPRygpLgotY2xhc3MgTUVESUFfRVhQT1JUIExvZ0hlbHBlciB7Ci0gcHVibGljOgotICBMb2dIZWxwZXIoTWVkaWFMb2c6Ok1lZGlhTG9nTGV2ZWwgbGV2ZWwsCi0gICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLSAgfkxvZ0hlbHBlcigpOwotCi0gIHN0ZDo6b3N0cmVhbSYgc3RyZWFtKCkgeyByZXR1cm4gc3RyZWFtXzsgfQotCi0gcHJpdmF0ZToKLSAgTWVkaWFMb2c6Ok1lZGlhTG9nTGV2ZWwgbGV2ZWxfOwotICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOwotICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW1fOwotfTsKLQotLy8gUHJvdmlkZXMgYSBzdHJpbmdzdHJlYW0gdG8gY29sbGVjdCBhIGxvZyBlbnRyeSB0byBwYXNzIHRvIHRoZSBwcm92aWRlZAotLy8gTWVkaWFMb2cgYXQgdGhlIHJlcXVlc3RlZCBsZXZlbC4KLSNkZWZpbmUgTUVESUFfTE9HKGxldmVsLCBtZWRpYV9sb2cpIFwKLSAgTG9nSGVscGVyKChNZWRpYUxvZzo6TUVESUFMT0dfIyNsZXZlbCksIChtZWRpYV9sb2cpKS5zdHJlYW0oKQotCi0vLyBMb2dzIG9ubHkgd2hpbGUgfGNvdW50fCA8IHxtYXh8LCBpbmNyZW1lbnRzIHxjb3VudHwgZm9yIGVhY2ggbG9nLCBhbmQgd2FybnMKLS8vIGluIHRoZSBsb2cgaWYgfGNvdW50fCBoYXMganVzdCByZWFjaGVkIHxtYXh8LgotLy8gTXVsdGlwbGUgc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9ucyBhcmUgaW52b2x2ZWQgaW4gdGhpcyBtYWNybzoKLS8vIDEpIExBWllfU1RSRUFNIGF2b2lkcyB3YXN0ZWZ1bCBNRURJQV9MT0cgYW5kIGV2YWx1YXRpb24gb2Ygc3Vic2VxdWVudCBzdHJlYW0KLS8vICAgIGFyZ3VtZW50cyBpZiB8Y291bnR8IGlzID49IHxtYXh8LCBhbmQKLS8vIDIpIHRoZSB8Y29uZGl0aW9ufCBnaXZlbiB0byBMQVpZX1NUUkVBTSBpdHNlbGYgc2hvcnQtY2lyY3VpdHMgdG8gcHJldmVudAotLy8gICAgaW5jcmVtZW50aW5nIHxjb3VudHwgYmV5b25kIHxtYXh8LgotLy8gTm90ZSB0aGF0IExBWllfU1RSRUFNIGd1YXJhbnRlZXMgZXhhY3RseSBvbmUgZXZhbHVhdGlvbiBvZiB8Y29uZGl0aW9ufCwgc28KLS8vIHxjb3VudHwgd2lsbCBiZSBpbmNyZW1lbnRlZCBhdCBtb3N0IG9uY2UgZWFjaCB0aW1lIHRoaXMgbWFjcm8gcnVucy4KLS8vIFRoZSAifHwgdHJ1ZSIgcG9ydGlvbiBvZiB8Y29uZGl0aW9ufCBsZXRzIGxvZ2dpbmcgb2NjdXIgY29ycmVjdGx5IHdoZW4KLS8vIHxjb3VudHwgPCB8bWF4fCBhbmQgfGNvdW50fCsrIGlzIDAuCi0vLyBUT0RPKHdvbGVuZXR6LGNoY3VubmluZ2hhbSk6IENvbnNpZGVyIHVzaW5nIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgYSBtYWNybwotLy8gdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KLSNkZWZpbmUgTElNSVRFRF9NRURJQV9MT0cobGV2ZWwsIG1lZGlhX2xvZywgY291bnQsIG1heCkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgTEFaWV9TVFJFQU0oTUVESUFfTE9HKGxldmVsLCBtZWRpYV9sb2cpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgKGNvdW50KSA8IChtYXgpICYmICgoY291bnQpKysgfHwgdHJ1ZSkpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIDw8ICgoKGNvdW50KSA9PSAobWF4KSkgPyAiKExvZyBsaW1pdCByZWFjaGVkLiBGdXJ0aGVyIHNpbWlsYXIgZW50cmllcyAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF5IGJlIHN1cHByZXNzZWQpOiAiICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIikKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfTUVESUFfTE9HX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2dfZXZlbnQuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZ19ldmVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzk0YmJlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZ19ldmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfTE9HX0VWRU5UX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0xPR19FVkVOVF9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJiYXNlL3ZhbHVlcy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0cnVjdCBNZWRpYUxvZ0V2ZW50IHsKLSAgTWVkaWFMb2dFdmVudCgpIHt9Ci0KLSAgTWVkaWFMb2dFdmVudChjb25zdCBNZWRpYUxvZ0V2ZW50JiBldmVudCkgeyAqdGhpcyA9IGV2ZW50OyB9Ci0KLSAgTWVkaWFMb2dFdmVudCYgb3BlcmF0b3I9KGNvbnN0IE1lZGlhTG9nRXZlbnQmIGV2ZW50KSB7Ci0gICAgaWQgPSBldmVudC5pZDsKLSAgICB0eXBlID0gZXZlbnQudHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6RGljdGlvbmFyeVZhbHVlPiBldmVudF9jb3B5KGV2ZW50LnBhcmFtcy5EZWVwQ29weSgpKTsKLSAgICBwYXJhbXMuU3dhcChldmVudF9jb3B5LmdldCgpKTsKLSAgICB0aW1lID0gZXZlbnQudGltZTsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBlbnVtIFR5cGUgewotICAgIC8vIEEgV2ViTWVkaWFQbGF5ZXIgaXMgYmVpbmcgY3JlYXRlZCBvciBkZXN0cm95ZWQuCi0gICAgLy8gcGFyYW1zOiBub25lLgotICAgIFdFQk1FRElBUExBWUVSX0NSRUFURUQsCi0gICAgV0VCTUVESUFQTEFZRVJfREVTVFJPWUVELAotCi0gICAgLy8gQSBtZWRpYSBwbGF5ZXIgaXMgbG9hZGluZyBhIHJlc291cmNlLgotICAgIC8vIHBhcmFtczogInVybCI6IDxVUkwgb2YgdGhlIHJlc291cmNlPi4KLSAgICBMT0FELAotCi0gICAgLy8gQSBtZWRpYSBwbGF5ZXIgaGFzIHN0YXJ0ZWQgc2Vla2luZy4KLSAgICAvLyBwYXJhbXM6ICJzZWVrX3RhcmdldCI6IDxudW1iZXIgb2Ygc2Vjb25kcyB0byB3aGljaCB0byBzZWVrPi4KLSAgICBTRUVLLAotCi0gICAgLy8gQSBtZWRpYSBwbGF5ZXIgaGFzIGJlZW4gdG9sZCB0byBwbGF5IG9yIHBhdXNlLgotICAgIC8vIHBhcmFtczogbm9uZS4KLSAgICBQTEFZLAotICAgIFBBVVNFLAotCi0gICAgLy8gVGhlIHN0YXRlIG9mIFBpcGVsaW5lIGhhcyBjaGFuZ2VkLgotICAgIC8vIHBhcmFtczogInBpcGVsaW5lX3N0YXRlIjogPHN0cmluZyBuYW1lIG9mIHRoZSBzdGF0ZT4uCi0gICAgUElQRUxJTkVfU1RBVEVfQ0hBTkdFRCwKLQotICAgIC8vIEFuIGVycm9yIGhhcyBvY2N1cnJlZCBpbiB0aGUgcGlwZWxpbmUuCi0gICAgLy8gcGFyYW1zOiAicGlwZWxpbmVfZXJyb3IiOiA8c3RyaW5nIG5hbWUgb2YgdGhlIGVycm9yPi4KLSAgICBQSVBFTElORV9FUlJPUiwKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSB2aWRlbyBoYXMgYmVlbiBkZXRlcm1pbmVkLgotICAgIC8vIHBhcmFtczogIndpZHRoIjogPGludGVncmFsIHdpZHRoIG9mIHRoZSB2aWRlbz4uCi0gICAgLy8gICAgICAgICAiaGVpZ2h0IjogPGludGVncmFsIGhlaWdodCBvZiB0aGUgdmlkZW8+LgotICAgIFZJREVPX1NJWkVfU0VULAotCi0gICAgLy8gQSBwcm9wZXJ0eSBvZiB0aGUgcGlwZWxpbmUgaGFzIGJlZW4gc2V0IGJ5IGEgZmlsdGVyLgotICAgIC8vIFRoZXNlIHRha2UgYSBzaW5nbGUgcGFyYW1ldGVyIGJhc2VkIHVwb24gdGhlIG5hbWUgb2YgdGhlIGV2ZW50IGFuZCBvZgotICAgIC8vIHRoZSBhcHByb3ByaWF0ZSB0eXBlLiBlLmcuIERVUkFUSU9OX1NFVDogImR1cmF0aW9uIiBvZiB0eXBlIFRpbWVEZWx0YS4KLSAgICBEVVJBVElPTl9TRVQsCi0gICAgVE9UQUxfQllURVNfU0VULAotICAgIE5FVFdPUktfQUNUSVZJVFlfU0VULAotCi0gICAgLy8gQXVkaW8vVmlkZW8gc3RyZWFtIHBsYXliYWNrIGhhcyBlbmRlZC4KLSAgICBFTkRFRCwKLQotICAgIC8vIFRleHQgc3RyZWFtIHBsYXliYWNrIGhhcyBlbmRlZC4KLSAgICBURVhUX0VOREVELAotCi0gICAgLy8gVGhlIGV4dGVudHMgb2YgdGhlIHNsaWRpbmcgYnVmZmVyIGhhdmUgY2hhbmdlZC4KLSAgICAvLyBwYXJhbXM6ICJidWZmZXJfc3RhcnQiOiA8Zmlyc3QgYnVmZmVyZWQgYnl0ZT4uCi0gICAgLy8gICAgICAgICAiYnVmZmVyX2N1cnJlbnQiOiA8Y3VycmVudCBvZmZzZXQ+LgotICAgIC8vICAgICAgICAgImJ1ZmZlcl9lbmQiOiA8bGFzdCBidWZmZXJlZCBieXRlPi4KLSAgICBCVUZGRVJFRF9FWFRFTlRTX0NIQU5HRUQsCi0KLSAgICAvLyBFcnJvciBsb2cgcmVwb3J0ZWQgYnkgbWVkaWEgY29kZSBzdWNoIGFzIHJlYXNvbnMgb2YgcGxheWJhY2sgZXJyb3IuCi0gICAgTUVESUFfRVJST1JfTE9HX0VOVFJZLAotICAgIC8vIHBhcmFtczogImVycm9yIjogRXJyb3Igc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yIGRldGVjdGVkLgotCi0gICAgLy8gSW5mb3JtYXRpdmUgbG9nIHJlcG9ydGVkIGJ5IG1lZGlhIGNvZGUuCi0gICAgTUVESUFfSU5GT19MT0dfRU5UUlksCi0gICAgLy8gcGFyYW1zOiAiaW5mbyI6IFN0cmluZyB3aXRoIGRldGFpbHMgb2YgYW4gaW5mb3JtYXRpdmUgbG9nIGVudHJ5LgotCi0gICAgLy8gRGVidWcgbG9nIHJlcG9ydGVkIGJ5IG1lZGlhIGNvZGUuCi0gICAgTUVESUFfREVCVUdfTE9HX0VOVFJZLAotICAgIC8vIHBhcmFtczogImRlYnVnIjogU3RyaW5nIHdpdGggZGV0YWlscyBvZiBhIGRlYnVnIGxvZyBlbnRyeS4KLQotICAgIC8vIEEgcHJvcGVydHkgaGFzIGNoYW5nZWQgd2l0aG91dCBhbnkgc3BlY2lhbCBldmVudCBvY2N1cnJpbmcuCi0gICAgUFJPUEVSVFlfQ0hBTkdFLAotCi0gICAgLy8gSW5kaWNhdGVzIHRoYXQgdXBkYXRlZCB3YXRjaCB0aW1lIHN0YXRpc3RpY3MgYXJlIGF2YWlsYWJsZS4KLSAgICBXQVRDSF9USU1FX1VQREFURSwKLQotICAgIFRZUEVfTEFTVCA9IFdBVENIX1RJTUVfVVBEQVRFCi0gIH07Ci0KLSAgaW50MzJfdCBpZDsKLSAgVHlwZSB0eXBlOwotICBiYXNlOjpEaWN0aW9uYXJ5VmFsdWUgcGFyYW1zOwotICBiYXNlOjpUaW1lVGlja3MgdGltZTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX0xPR19FVkVOVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfcGVybWlzc2lvbi5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3Blcm1pc3Npb24uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTg0Y2YuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfcGVybWlzc2lvbi5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3Blcm1pc3Npb24uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1NZWRpYVBlcm1pc3Npb246Ok1lZGlhUGVybWlzc2lvbigpIHt9Ci0KLU1lZGlhUGVybWlzc2lvbjo6fk1lZGlhUGVybWlzc2lvbigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfcGVybWlzc2lvbi5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfcGVybWlzc2lvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTkxNjRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3Blcm1pc3Npb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9QRVJNSVNTSU9OX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01FRElBX1BFUk1JU1NJT05fSF8KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotY2xhc3MgR1VSTDsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBJbnRlcmZhY2UgdG8gaGFuZGxlIG1lZGlhIHJlbGF0ZWQgcGVybWlzc2lvbiBjaGVja3MgYW5kIHJlcXVlc3RzLgotY2xhc3MgTUVESUFfRVhQT1JUIE1lZGlhUGVybWlzc2lvbiB7Ci0gcHVibGljOgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoYm9vbCk+IFBlcm1pc3Npb25TdGF0dXNDQjsKLQotICBlbnVtIFR5cGUgewotICAgIFBST1RFQ1RFRF9NRURJQV9JREVOVElGSUVSLAotICAgIEFVRElPX0NBUFRVUkUsCi0gICAgVklERU9fQ0FQVFVSRSwKLSAgfTsKLQotICBNZWRpYVBlcm1pc3Npb24oKTsKLSAgdmlydHVhbCB+TWVkaWFQZXJtaXNzaW9uKCk7Ci0KLSAgLy8gQ2hlY2tzIHdoZXRoZXIgfHR5cGV8IGlzIHBlcm1pdHRlZCBmb3IgfHNlY3VyaXR5X29yaWdpbnwgd2l0aG91dAotICAvLyB0cmlnZ2VyaW5nIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gcGVybWlzc2lvbiBwcm9tcHQpLiBUaGUgc3RhdHVzIHdpbGwgYmUKLSAgLy8gfGZhbHNlfCBpZiB0aGUgcGVybWlzc2lvbiBoYXMgbmV2ZXIgYmVlbiBzZXQuCi0gIHZpcnR1YWwgdm9pZCBIYXNQZXJtaXNzaW9uKAotICAgICAgVHlwZSB0eXBlLCBjb25zdCBHVVJMJiBzZWN1cml0eV9vcmlnaW4sCi0gICAgICBjb25zdCBQZXJtaXNzaW9uU3RhdHVzQ0ImIHBlcm1pc3Npb25fc3RhdHVzX2NiKSA9IDA7Ci0KLSAgLy8gUmVxdWVzdHMgfHR5cGV8IHBlcm1pc3Npb24gZm9yIHxzZWN1cml0eV9vcmlnaW58LiBUaGlzIG1heSB0cmlnZ2VyIHVzZXIKLSAgLy8gaW50ZXJhY3Rpb24gKGUuZy4gcGVybWlzc2lvbiBwcm9tcHQpIGlmIHRoZSBwZXJtaXNzaW9uIGhhcyBuZXZlciBiZWVuIHNldC4KLSAgdmlydHVhbCB2b2lkIFJlcXVlc3RQZXJtaXNzaW9uKAotICAgICAgVHlwZSB0eXBlLCBjb25zdCBHVVJMJiBzZWN1cml0eV9vcmlnaW4sCi0gICAgICBjb25zdCBQZXJtaXNzaW9uU3RhdHVzQ0ImIHBlcm1pc3Npb25fc3RhdHVzX2NiKSA9IDA7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTWVkaWFQZXJtaXNzaW9uKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX1BFUk1JU1NJT05fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3Jlc291cmNlcy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3Jlc291cmNlcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1MmU1Ny4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9yZXNvdXJjZXMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9yZXNvdXJjZXMuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIExvY2FsaXplZFN0cmluZ1Byb3ZpZGVyIGdfbG9jYWxpemVkX3N0cmluZ19wcm92aWRlciA9IE5VTEw7Ci0KLXZvaWQgU2V0TG9jYWxpemVkU3RyaW5nUHJvdmlkZXIoTG9jYWxpemVkU3RyaW5nUHJvdmlkZXIgZnVuYykgewotICBnX2xvY2FsaXplZF9zdHJpbmdfcHJvdmlkZXIgPSBmdW5jOwotfQotCi0jaWYgIWRlZmluZWQoT1NfSU9TKQotc3RkOjpzdHJpbmcgR2V0TG9jYWxpemVkU3RyaW5nVVRGOChNZXNzYWdlSWQgbWVzc2FnZV9pZCkgewotICByZXR1cm4gYmFzZTo6VVRGMTZUb1VURjgoR2V0TG9jYWxpemVkU3RyaW5nVVRGMTYobWVzc2FnZV9pZCkpOwotfQotCi1iYXNlOjpzdHJpbmcxNiBHZXRMb2NhbGl6ZWRTdHJpbmdVVEYxNihNZXNzYWdlSWQgbWVzc2FnZV9pZCkgewotICByZXR1cm4gZ19sb2NhbGl6ZWRfc3RyaW5nX3Byb3ZpZGVyID8gZ19sb2NhbGl6ZWRfc3RyaW5nX3Byb3ZpZGVyKG1lc3NhZ2VfaWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiYXNlOjpzdHJpbmcxNigpOwotfQotI2VuZGlmCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfcmVzb3VyY2VzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9yZXNvdXJjZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYzMTdiOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9yZXNvdXJjZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9SRVNPVVJDRVNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfUkVTT1VSQ0VTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nMTYuaCIKLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUaGUgbWVkaWEgbGF5ZXIgY2FuJ3QgYWNjZXNzIENocm9tZSdzIHJlc291cmNlIGJ1bmRsZSBkaXJlY3RseS4gVGhpcyBmYWNpbGl0eQotLy8gYWxsb3dzIGNsaWVudHMgdG8gcHJvdmlkZSBpbmRpcmVjdCBhY2Nlc3MuCi0KLS8vIElEcyB0aGF0IHdpbGwgZ2V0IG1hcHBlZCB0byBjb3JyZXNwb25kaW5nIGVudHJpZXMgd2l0aCBJRFNfIHByZWZpeGVzIGluCi0vLyBjaHJvbWUvYXBwL2dlbmVyYXRlZF9yZXNvdXJjZXMuZ3JkLgotZW51bSBNZXNzYWdlSWQgewotICBERUZBVUxUX0FVRElPX0RFVklDRV9OQU1FLAotI2lmIGRlZmluZWQoT1NfV0lOKQotICBDT01NVU5JQ0FUSU9OU19BVURJT19ERVZJQ0VfTkFNRSwKLSNlbmRpZgotI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCi0gIEJFQU1GT1JNSU5HX09OX0RFRkFVTFRfQVVESU9fSU5QVVRfREVWSUNFX05BTUUsCi0gIEJFQU1GT1JNSU5HX09GRl9ERUZBVUxUX0FVRElPX0lOUFVUX0RFVklDRV9OQU1FLAotI2VuZGlmCi19OwotCi0vLyBJbXBsZW1lbnRhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGNvbnZlcnQgTWVzc2FnZUlkcyB0byBnZW5lcmF0ZWRfcmVzb3VyY2VzLmdyZAotLy8gSURzIGFuZCBleHRyYWN0IHRoZSBtYXRjaGluZyBzdHJpbmcgZnJvbSBDaHJvbWUncyByZXNvdXJjZSBidW5kbGUgKGUuZy4KLS8vIHRocm91Z2ggbDEwbl91dGlsOjpHZXRTdHJpbmdVVEYxNikuCi11c2luZyBMb2NhbGl6ZWRTdHJpbmdQcm92aWRlciA9IGJhc2U6OnN0cmluZzE2ICgqKShNZXNzYWdlSWQgbWVzc2FnZV9pZCk7Ci0KLS8vIEluaXRpYWxpemVzIHRoZSBnbG9iYWwgTG9jYWxpemVkU3RyaW5nUHJvdmlkZXIgZnVuY3Rpb24uCi1NRURJQV9FWFBPUlQgdm9pZCBTZXRMb2NhbGl6ZWRTdHJpbmdQcm92aWRlcihMb2NhbGl6ZWRTdHJpbmdQcm92aWRlciBmdW5jKTsKLQotI2lmICFkZWZpbmVkKE9TX0lPUykKLS8vIFRoZSBMb2NhbGl6ZWRTdHJpbmdQcm92aWRlciBoYXMgcHJvYmFibHkgbm90IGJlZW4gaW5pdGlhbGl6ZWQgb24gaU9TLiBUaGlzCi0vLyB3aWxsIGdpdmUgYW4gZWFybHkgY29tcGlsZSB3YXJuaW5nIGZvciBjbGllbnRzIGF0dGVtcHRpbmcgdG8gdXNlIGl0LgotCi0vLyBSZXR1cm5zIGEgcmVzb3VyY2Ugc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gfG1lc3NhZ2VfaWR8LiBTZWUgbDEwbl91dGlsLmguCi0vLyBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgTG9jYWxpemVkU3RyaW5nUHJvdmlkZXIgaGFzIG5vdCBiZWVuCi0vLyBpbml0aWFsaXplZCBvciBpZiB0aGUgSUQgaXMgdW5yZWNvZ25pemVkLgotc3RkOjpzdHJpbmcgR2V0TG9jYWxpemVkU3RyaW5nVVRGOChNZXNzYWdlSWQgbWVzc2FnZV9pZCk7Ci1iYXNlOjpzdHJpbmcxNiBHZXRMb2NhbGl6ZWRTdHJpbmdVVEYxNihNZXNzYWdlSWQgbWVzc2FnZV9pZCk7Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfTUVESUFfUkVTT1VSQ0VTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFjay5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzZlOGU5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2suaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1NZWRpYVRyYWNrOjpNZWRpYVRyYWNrKFR5cGUgdHlwZSwgU3RyZWFtUGFyc2VyOjpUcmFja0lkIGJ5dGVzdHJlYW1fdHJhY2tfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBraW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5nKQotICAgIDogdHlwZV8odHlwZSksCi0gICAgICBieXRlc3RyZWFtX3RyYWNrX2lkXyhieXRlc3RyZWFtX3RyYWNrX2lkKSwKLSAgICAgIGtpbmRfKGtpbmQpLAotICAgICAgbGFiZWxfKGxhYmVsKSwKLSAgICAgIGxhbmd1YWdlXyhsYW5nKSB7fQotCi1NZWRpYVRyYWNrOjp+TWVkaWFUcmFjaygpIHt9Ci0KLWNvbnN0IGNoYXIqIFRyYWNrVHlwZVRvU3RyKE1lZGlhVHJhY2s6OlR5cGUgdHlwZSkgewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE1lZGlhVHJhY2s6OkF1ZGlvOgotICAgICAgcmV0dXJuICJhdWRpbyI7Ci0gICAgY2FzZSBNZWRpYVRyYWNrOjpUZXh0OgotICAgICAgcmV0dXJuICJ0ZXh0IjsKLSAgICBjYXNlIE1lZGlhVHJhY2s6OlZpZGVvOgotICAgICAgcmV0dXJuICJ2aWRlbyI7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gIklOVkFMSUQiOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjhiMTNhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfVFJBQ0tfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfVFJBQ0tfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNRURJQV9FWFBPUlQgTWVkaWFUcmFjayB7Ci0gcHVibGljOgotICBlbnVtIFR5cGUgeyBUZXh0LCBBdWRpbywgVmlkZW8gfTsKLSAgdHlwZWRlZiBzdGQ6OnN0cmluZyBJZDsKLSAgTWVkaWFUcmFjayhUeXBlIHR5cGUsIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBieXRlc3RyZWFtX3RyYWNrX2lkLAotICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBraW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmcpOwotICB+TWVkaWFUcmFjaygpOwotCi0gIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0KLSAgU3RyZWFtUGFyc2VyOjpUcmFja0lkIGJ5dGVzdHJlYW1fdHJhY2tfaWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJ5dGVzdHJlYW1fdHJhY2tfaWRfOwotICB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBraW5kKCkgY29uc3QgeyByZXR1cm4ga2luZF87IH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhYmVsKCkgY29uc3QgeyByZXR1cm4gbGFiZWxfOyB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSgpIGNvbnN0IHsgcmV0dXJuIGxhbmd1YWdlXzsgfQotCi0gIElkIGlkKCkgY29uc3QgeyByZXR1cm4gaWRfOyB9Ci0gIHZvaWQgc2V0X2lkKElkIGlkKSB7Ci0gICAgRENIRUNLKGlkXy5lbXB0eSgpKTsKLSAgICBEQ0hFQ0soIWlkLmVtcHR5KCkpOwotICAgIGlkXyA9IGlkOwotICB9Ci0KLSBwcml2YXRlOgotICBUeXBlIHR5cGVfOwotCi0gIC8vIHxieXRlc3RyZWFtX3RyYWNrX2lkX3wgaXMgcmVhZCBmcm9tIHRoZSBieXRlc3RyZWFtIGFuZCBpcyBndWFyYW50ZWVkIHRvIGJlCi0gIC8vIHVuaXF1ZSBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2Ygc2luZ2xlIGJ5dGVzdHJlYW0ncyBpbml0aWFsaXphdGlvbiBzZWdtZW50LgotICAvLyBCdXQgd2UgbWlnaHQgaGF2ZSBtdWx0aXBsZSBieXRlc3RyZWFtcyAoTWVkaWFTb3VyY2UgbWlnaHQgaGF2ZSBtdWx0aXBsZQotICAvLyBTb3VyY2VCdWZmZXJzIGF0dGFjaGVkIHRvIGl0LCB3aGljaCB0cmFuc2xhdGVzIGludG8gQ2h1bmtEZW11eGVyIGhhdmluZwotICAvLyBtdWx0aXBsZSBTb3VyY2VCdWZmZXJTdGF0ZXMgYW5kIG11bHRpcGxlIGJ5dGVzdHJlYW1zKSBvciBzdWJzZXF1ZW50IGluaXQKLSAgLy8gc2VnbWVudHMgbWF5IHJlZGVmaW5lIHRoZSBieXRlc3RyZWFtIGlkcy4gVGh1cyBieXRlc3RyZWFtIHRyYWNrIGlkcyBhcmUgbm90Ci0gIC8vIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGF0IHRoZSBEZW11eGVyIGFuZCBIVE1MTWVkaWFFbGVtZW50IGxldmVsLiBTbyB3ZQotICAvLyBnZW5lcmF0ZSB0cnVseSB1bmlxdWUgbWVkaWEgdHJhY2sgfGlkX3wgb24gdGhlIERlbXV4ZXIgbGV2ZWwuCi0gIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBieXRlc3RyZWFtX3RyYWNrX2lkXzsKLSAgSWQgaWRfOwotCi0gIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIHJlYWQgZnJvbSBpbnB1dCBzdHJlYW1zIGJ5IHN0cmVhbSBwYXJzZXJzIGFzIHNwZWNpZmllZAotICAvLyBpbiBodHRwczovL2Rldi53My5vcmcvaHRtbDUvaHRtbC1zb3VyY2luZy1pbmJhbmQtdHJhY2tzLy4KLSAgc3RkOjpzdHJpbmcga2luZF87Ci0gIHN0ZDo6c3RyaW5nIGxhYmVsXzsKLSAgc3RkOjpzdHJpbmcgbGFuZ3VhZ2VfOwotfTsKLQotLy8gSGVscGVyIGZvciBsb2dnaW5nLgotTUVESUFfRVhQT1JUIGNvbnN0IGNoYXIqIFRyYWNrVHlwZVRvU3RyKE1lZGlhVHJhY2s6OlR5cGUgdHlwZSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX1RSQUNLX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzQxYzguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotTWVkaWFUcmFja3M6Ok1lZGlhVHJhY2tzKCkge30KLQotTWVkaWFUcmFja3M6On5NZWRpYVRyYWNrcygpIHt9Ci0KLU1lZGlhVHJhY2sqIE1lZGlhVHJhY2tzOjpBZGRBdWRpb1RyYWNrKAotICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgY29uZmlnLCBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhYmVsLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSkgewotICBEQ0hFQ0soY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0gIENIRUNLKGF1ZGlvX2NvbmZpZ3NfLmZpbmQoYnl0ZXN0cmVhbV90cmFja19pZCkgPT0gYXVkaW9fY29uZmlnc18uZW5kKCkpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFjaz4gdHJhY2sobmV3IE1lZGlhVHJhY2soCi0gICAgICBNZWRpYVRyYWNrOjpBdWRpbywgYnl0ZXN0cmVhbV90cmFja19pZCwga2luZCwgbGFiZWwsIGxhbmd1YWdlKSk7Ci0gIE1lZGlhVHJhY2sqIHRyYWNrX3B0ciA9IHRyYWNrLmdldCgpOwotICB0cmFja3NfLnB1c2hfYmFjayhzdGQ6Om1vdmUodHJhY2spKTsKLSAgYXVkaW9fY29uZmlnc19bYnl0ZXN0cmVhbV90cmFja19pZF0gPSBjb25maWc7Ci0gIHJldHVybiB0cmFja19wdHI7Ci19Ci0KLU1lZGlhVHJhY2sqIE1lZGlhVHJhY2tzOjpBZGRWaWRlb1RyYWNrKAotICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnLCBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYga2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhYmVsLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSkgewotICBEQ0hFQ0soY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0gIENIRUNLKHZpZGVvX2NvbmZpZ3NfLmZpbmQoYnl0ZXN0cmVhbV90cmFja19pZCkgPT0gdmlkZW9fY29uZmlnc18uZW5kKCkpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFjaz4gdHJhY2sobmV3IE1lZGlhVHJhY2soCi0gICAgICBNZWRpYVRyYWNrOjpWaWRlbywgYnl0ZXN0cmVhbV90cmFja19pZCwga2luZCwgbGFiZWwsIGxhbmd1YWdlKSk7Ci0gIE1lZGlhVHJhY2sqIHRyYWNrX3B0ciA9IHRyYWNrLmdldCgpOwotICB0cmFja3NfLnB1c2hfYmFjayhzdGQ6Om1vdmUodHJhY2spKTsKLSAgdmlkZW9fY29uZmlnc19bYnl0ZXN0cmVhbV90cmFja19pZF0gPSBjb25maWc7Ci0gIHJldHVybiB0cmFja19wdHI7Ci19Ci0KLWNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgTWVkaWFUcmFja3M6OmdldEF1ZGlvQ29uZmlnKAotICAgIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBieXRlc3RyZWFtX3RyYWNrX2lkKSBjb25zdCB7Ci0gIHN0ZDo6bWFwPFN0cmVhbVBhcnNlcjo6VHJhY2tJZCwgQXVkaW9EZWNvZGVyQ29uZmlnPjo6Y29uc3RfaXRlcmF0b3IgaXQgPQotICAgICAgYXVkaW9fY29uZmlnc18uZmluZChieXRlc3RyZWFtX3RyYWNrX2lkKTsKLSAgaWYgKGl0ICE9IGF1ZGlvX2NvbmZpZ3NfLmVuZCgpKSByZXR1cm4gaXQtPnNlY29uZDsKLSAgc3RhdGljIEF1ZGlvRGVjb2RlckNvbmZpZyBpbnZhbGlkQ29uZmlnOwotICByZXR1cm4gaW52YWxpZENvbmZpZzsKLX0KLQotY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBNZWRpYVRyYWNrczo6Z2V0VmlkZW9Db25maWcoCi0gICAgU3RyZWFtUGFyc2VyOjpUcmFja0lkIGJ5dGVzdHJlYW1fdHJhY2tfaWQpIGNvbnN0IHsKLSAgc3RkOjptYXA8U3RyZWFtUGFyc2VyOjpUcmFja0lkLCBWaWRlb0RlY29kZXJDb25maWc+Ojpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICB2aWRlb19jb25maWdzXy5maW5kKGJ5dGVzdHJlYW1fdHJhY2tfaWQpOwotICBpZiAoaXQgIT0gdmlkZW9fY29uZmlnc18uZW5kKCkpIHJldHVybiBpdC0+c2Vjb25kOwotICBzdGF0aWMgVmlkZW9EZWNvZGVyQ29uZmlnIGludmFsaWRDb25maWc7Ci0gIHJldHVybiBpbnZhbGlkQ29uZmlnOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrcy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMWI4ODguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfVFJBQ0tTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01FRElBX1RSQUNLU19IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2suaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBBdWRpb0RlY29kZXJDb25maWc7Ci1jbGFzcyBWaWRlb0RlY29kZXJDb25maWc7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBNZWRpYVRyYWNrcyB7Ci0gcHVibGljOgotICB0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrPj4gTWVkaWFUcmFja3NDb2xsZWN0aW9uOwotCi0gIE1lZGlhVHJhY2tzKCk7Ci0gIH5NZWRpYVRyYWNrcygpOwotCi0gIC8vIEFkZHMgYSBuZXcgYXVkaW8gdHJhY2suIFRoZSB8Ynl0ZXN0cmVhbVRyYWNrSWR8IG11c3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlCi0gIC8vIHRyYWNrIHdpdGhpbiB0aGUgYnl0ZXN0cmVhbS4KLSAgTWVkaWFUcmFjayogQWRkQXVkaW9UcmFjayhjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhYmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7Ci0gIC8vIEFkZHMgYSBuZXcgdmlkZW8gdHJhY2suIFRoZSB8Ynl0ZXN0cmVhbVRyYWNrSWR8IG11c3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlCi0gIC8vIHRyYWNrIHdpdGhpbiB0aGUgYnl0ZXN0cmVhbS4KLSAgTWVkaWFUcmFjayogQWRkVmlkZW9UcmFjayhjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhYmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSk7Ci0KLSAgY29uc3QgTWVkaWFUcmFja3NDb2xsZWN0aW9uJiB0cmFja3MoKSBjb25zdCB7IHJldHVybiB0cmFja3NfOyB9Ci0gIE1lZGlhVHJhY2tzQ29sbGVjdGlvbiYgdHJhY2tzKCkgeyByZXR1cm4gdHJhY2tzXzsgfQotCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgZ2V0QXVkaW9Db25maWcoCi0gICAgICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCkgY29uc3Q7Ci0gIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgZ2V0VmlkZW9Db25maWcoCi0gICAgICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYnl0ZXN0cmVhbV90cmFja19pZCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBNZWRpYVRyYWNrc0NvbGxlY3Rpb24gdHJhY2tzXzsKLSAgc3RkOjptYXA8U3RyZWFtUGFyc2VyOjpUcmFja0lkLCBBdWRpb0RlY29kZXJDb25maWc+IGF1ZGlvX2NvbmZpZ3NfOwotICBzdGQ6Om1hcDxTdHJlYW1QYXJzZXI6OlRyYWNrSWQsIFZpZGVvRGVjb2RlckNvbmZpZz4gdmlkZW9fY29uZmlnc187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lZGlhVHJhY2tzKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01FRElBX1RSQUNLU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXJsX2RlbXV4ZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91cmxfZGVtdXhlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxZjRlNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91cmxfZGVtdXhlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3VybF9kZW11eGVyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1NZWRpYVVybERlbXV4ZXI6Ok1lZGlhVXJsRGVtdXhlcigKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+JiB0YXNrX3J1bm5lciwKLSAgICBjb25zdCBHVVJMJiB1cmwpCi0gICAgOiB1cmxfKHVybCksIHRhc2tfcnVubmVyXyh0YXNrX3J1bm5lcikge30KLQotTWVkaWFVcmxEZW11eGVyOjp+TWVkaWFVcmxEZW11eGVyKCkge30KLQotLy8gU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBzaW5jZSBEZW11eGVyU3RyZWFtUHJvdmlkZXI6OlR5cGUgaXMgVVJMLgotRGVtdXhlclN0cmVhbSogTWVkaWFVcmxEZW11eGVyOjpHZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKSB7Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLUdVUkwgTWVkaWFVcmxEZW11eGVyOjpHZXRVcmwoKSBjb25zdCB7IHJldHVybiB1cmxfOyB9Ci0KLURlbXV4ZXJTdHJlYW1Qcm92aWRlcjo6VHlwZSBNZWRpYVVybERlbXV4ZXI6OkdldFR5cGUoKSBjb25zdCB7Ci0gIHJldHVybiBEZW11eGVyU3RyZWFtUHJvdmlkZXI6OlR5cGU6OlVSTDsKLX0KLQotc3RkOjpzdHJpbmcgTWVkaWFVcmxEZW11eGVyOjpHZXREaXNwbGF5TmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJNZWRpYVVybERlbXV4ZXIiOwotfQotCi12b2lkIE1lZGlhVXJsRGVtdXhlcjo6SW5pdGlhbGl6ZShEZW11eGVySG9zdCogaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlX3RleHRfdHJhY2tzKSB7Ci0gIERWTE9HKDEpIDw8IF9fRlVOQ1RJT05fXzsKLSAgdGFza19ydW5uZXJfLT5Qb3N0VGFzayhGUk9NX0hFUkUsIGJhc2U6OkJpbmQoc3RhdHVzX2NiLCBQSVBFTElORV9PSykpOwotfQotCi12b2lkIE1lZGlhVXJsRGVtdXhlcjo6U3RhcnRXYWl0aW5nRm9yU2VlayhiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lKSB7fQotCi12b2lkIE1lZGlhVXJsRGVtdXhlcjo6Q2FuY2VsUGVuZGluZ1NlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkge30KLQotdm9pZCBNZWRpYVVybERlbXV4ZXI6OlNlZWsoYmFzZTo6VGltZURlbHRhIHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBzdGF0dXNfY2IpIHsKLSAgdGFza19ydW5uZXJfLT5Qb3N0VGFzayhGUk9NX0hFUkUsIGJhc2U6OkJpbmQoc3RhdHVzX2NiLCBQSVBFTElORV9PSykpOwotfQotCi12b2lkIE1lZGlhVXJsRGVtdXhlcjo6U3RvcCgpIHt9Ci0KLXZvaWQgTWVkaWFVcmxEZW11eGVyOjpBYm9ydFBlbmRpbmdSZWFkcygpIHt9Ci0KLWJhc2U6OlRpbWVEZWx0YSBNZWRpYVVybERlbXV4ZXI6OkdldFN0YXJ0VGltZSgpIGNvbnN0IHsKLSAgLy8gVE9ETyh0Z3VpbGJlcnQpOiBJbnZlc3RpZ2F0ZSBpZiB3ZSBuZWVkIHRvIGZldGNoIGluZm9ybWF0aW9uIGZyb20gdGhlCi0gIC8vIE1lZGlhUGxheWVyUmVuZGVyIGluIG9yZGVyIHRvIHJldHVybiBhIHNlbnNpYmxlIHZhbHVlIGhlcmUuCi0gIHJldHVybiBiYXNlOjpUaW1lRGVsdGEoKTsKLX0KLWJhc2U6OlRpbWUgTWVkaWFVcmxEZW11eGVyOjpHZXRUaW1lbGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIGJhc2U6OlRpbWUoKTsgfQotCi1pbnQ2NF90IE1lZGlhVXJsRGVtdXhlcjo6R2V0TWVtb3J5VXNhZ2UoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLXZvaWQgTWVkaWFVcmxEZW11eGVyOjpPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8TWVkaWFUcmFjazo6SWQ+JiB0cmFja19pZHMsIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSkgewotICBOT1RJTVBMRU1FTlRFRCgpOwotfQotdm9pZCBNZWRpYVVybERlbXV4ZXI6Ok9uU2VsZWN0ZWRWaWRlb1RyYWNrQ2hhbmdlZCgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywgYmFzZTo6VGltZURlbHRhIGN1cnJUaW1lKSB7Ci0gIE5PVElNUExFTUVOVEVEKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXJsX2RlbXV4ZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3VybF9kZW11eGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmZhZGYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXJsX2RlbXV4ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9VUkxfREVNVVhFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9VUkxfREVNVVhFUl9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS93ZWFrX3B0ci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ1cmwvZ3VybC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIENsYXNzIHRoYXQgc2F2ZXMgYSBVUkwgZm9yIGxhdGVyIHJldHJpZXZhbC4gVG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0vLyB0aGUgTWVkaWFQbGF5ZXJSZW5kZXJlci4KLS8vCi0vLyBJdHMgcHJpbWFyeSBwdXJwb3NlIGlzIHRvIGFjdCBhcyBhIGR1bW15IERlbXV4ZXIsIHdoZW4gdGhlcmUgaXMgbm8gbmVlZAotLy8gZm9yIERlbXV4ZXJTdHJlYW1zIChlLmcuIGluIHRoZSBNZWRpYVBsYXllclJlbmRlcmVyIGNhc2UpLiBGb3IgdGhlIG1vc3QgcGFydCwKLS8vIGl0cyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRGVtdXhlciBhcmUgTk9QcyB0aGF0IHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kCi0vLyBmaXJlIGFueSBwcm92aWRlZCBjYWxsYmFja3MgaW1tZWRpYXRlbHkuCi0vLwotLy8gSWYgUGlwZWxpbmUgd2hlcmUgdG8gYmUgcmVmYWN0b3JlZCB0byB1c2UgYSBEZW11eGVyU3RyZWFtUHJvdmlkZXIgaW5zdGVhZCBvZgotLy8gYSBEZW11eGVyLCBNZWRpYVVybERlbXV4ZXIgc2hvdWxkIGJlIHJlZmFjdG9yZWQgdG8gaW5oZXJpdCBkaXJlY3RseSBmcm9tCi0vLyBEZW11eGVyU3RyZWFtUHJvdmlkZXIuCi1jbGFzcyBNRURJQV9FWFBPUlQgTWVkaWFVcmxEZW11eGVyIDogcHVibGljIERlbXV4ZXIgewotIHB1YmxpYzoKLSAgTWVkaWFVcmxEZW11eGVyKAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgdGFza19ydW5uZXIsCi0gICAgICBjb25zdCBHVVJMJiB1cmwpOwotICB+TWVkaWFVcmxEZW11eGVyKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gRGVtdXhlclN0cmVhbVByb3ZpZGVyIGludGVyZmFjZS4KLSAgRGVtdXhlclN0cmVhbSogR2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgb3ZlcnJpZGU7Ci0gIEdVUkwgR2V0VXJsKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIERlbXV4ZXJTdHJlYW1Qcm92aWRlcjo6VHlwZSBHZXRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgLy8gRGVtdXhlciBpbnRlcmZhY2UuCi0gIHN0ZDo6c3RyaW5nIEdldERpc3BsYXlOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIHZvaWQgSW5pdGlhbGl6ZShEZW11eGVySG9zdCogaG9zdCwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc3RhdHVzX2NiLAotICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVfdGV4dF90cmFja3MpIG92ZXJyaWRlOwotICB2b2lkIFN0YXJ0V2FpdGluZ0ZvclNlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgQ2FuY2VsUGVuZGluZ1NlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgU2VlayhiYXNlOjpUaW1lRGVsdGEgdGltZSwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc3RhdHVzX2NiKSBvdmVycmlkZTsKLSAgdm9pZCBTdG9wKCkgb3ZlcnJpZGU7Ci0gIHZvaWQgQWJvcnRQZW5kaW5nUmVhZHMoKSBvdmVycmlkZTsKLSAgYmFzZTo6VGltZURlbHRhIEdldFN0YXJ0VGltZSgpIGNvbnN0IG92ZXJyaWRlOwotICBiYXNlOjpUaW1lIEdldFRpbWVsaW5lT2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIGludDY0X3QgR2V0TWVtb3J5VXNhZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgdm9pZCBPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQoY29uc3Qgc3RkOjp2ZWN0b3I8TWVkaWFUcmFjazo6SWQ+JiB0cmFja19pZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25TZWxlY3RlZFZpZGVvVHJhY2tDaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYgdHJhY2tfaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgY3VyclRpbWUpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgR1VSTCB1cmxfOwotCi0gIHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4gdGFza19ydW5uZXJfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNZWRpYVVybERlbXV4ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfTUVESUFfVVJMX0RFTVVYRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3VybF9kZW11eGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXJsX2RlbXV4ZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZDVlM2UuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXJsX2RlbXV4ZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91cmxfZGVtdXhlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL3J1bl9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX3Rhc2tfcnVubmVyX2hhbmRsZS5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1lZGlhVXJsRGVtdXhlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBNZWRpYVVybERlbXV4ZXJUZXN0KCkgOiBkZWZhdWx0X3VybF8oImh0dHA6Ly9leGFtcGxlLmNvbS8iKSB7fQotCi0gIHZvaWQgSW5pdGlhbGl6ZVRlc3QoY29uc3QgR1VSTCYgZ3VybCkgewotICAgIGRlbXV4ZXJfLnJlc2V0KAotICAgICAgICBuZXcgTWVkaWFVcmxEZW11eGVyKGJhc2U6OlRocmVhZFRhc2tSdW5uZXJIYW5kbGU6OkdldCgpLCBndXJsKSk7Ci0gIH0KLQotICB2b2lkIEluaXRpYWxpemVUZXN0KCkgeyBJbml0aWFsaXplVGVzdChkZWZhdWx0X3VybF8pOyB9Ci0KLSAgdm9pZCBWZXJpZnlDYWxsYmFja09rKFBpcGVsaW5lU3RhdHVzIHN0YXR1cykgewotICAgIEVYUEVDVF9FUShQSVBFTElORV9PSywgc3RhdHVzKTsKLSAgfQotCi0gIEdVUkwgZGVmYXVsdF91cmxfOwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVtdXhlcj4gZGVtdXhlcl87Ci0KLSAgLy8gTmVjZXNzYXJ5LCBvciBlbHNlIGJhc2U6OlRocmVhZFRhc2tSdW5uZXJIYW5kbGU6OkdldCgpIGZhaWxzLgotICBiYXNlOjpNZXNzYWdlTG9vcCBtZXNzYWdlX2xvb3BfOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lZGlhVXJsRGVtdXhlclRlc3QpOwotfTsKLQotVEVTVF9GKE1lZGlhVXJsRGVtdXhlclRlc3QsIEJhc2VDYXNlKSB7Ci0gIEluaXRpYWxpemVUZXN0KCk7Ci0KLSAgRVhQRUNUX0VRKERlbXV4ZXJTdHJlYW1Qcm92aWRlcjo6VHlwZTo6VVJMLCBkZW11eGVyXy0+R2V0VHlwZSgpKTsKLSAgRVhQRUNUX0VRKGRlZmF1bHRfdXJsXywgZGVtdXhlcl8tPkdldFVybCgpKTsKLX0KLQotVEVTVF9GKE1lZGlhVXJsRGVtdXhlclRlc3QsIEFjY2VwdHNFbXB0eVN0cmluZ3MpIHsKLSAgSW5pdGlhbGl6ZVRlc3QoR1VSTCgpKTsKLQotICBFWFBFQ1RfRVEoR1VSTDo6RW1wdHlHVVJMKCksIGRlbXV4ZXJfLT5HZXRVcmwoKSk7Ci19Ci0KLVRFU1RfRihNZWRpYVVybERlbXV4ZXJUZXN0LCBJbml0aWFsaXplUmV0dXJuc1BpcGVsaW5lT2spIHsKLSAgSW5pdGlhbGl6ZVRlc3QoKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmTWVkaWFVcmxEZW11eGVyVGVzdDo6VmVyaWZ5Q2FsbGJhY2tPaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwotCi0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLX0KLQotVEVTVF9GKE1lZGlhVXJsRGVtdXhlclRlc3QsIFNlZWtSZXR1cm5zUGlwZWxpbmVPaykgewotICBJbml0aWFsaXplVGVzdCgpOwotICBkZW11eGVyXy0+U2VlayhiYXNlOjpUaW1lRGVsdGEoKSwKLSAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmTWVkaWFVcmxEZW11eGVyVGVzdDo6VmVyaWZ5Q2FsbGJhY2tPaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0KLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTM3NWM3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3BhdHRlcm4uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGQ6OnZlY3Rvcjx1aW50OF90PiBFbXB0eUV4dHJhRGF0YSgpIHsgcmV0dXJuIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KCk7IH0KLQotRW5jcnlwdGlvblNjaGVtZSBVbmVuY3J5cHRlZCgpIHsgcmV0dXJuIEVuY3J5cHRpb25TY2hlbWUoKTsgfQotCi1FbmNyeXB0aW9uU2NoZW1lIEFlc0N0ckVuY3J5cHRpb25TY2hlbWUoKSB7Ci0gIHJldHVybiBFbmNyeXB0aW9uU2NoZW1lKEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVuY3J5cHRpb25QYXR0ZXJuKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzMzk1MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTUVESUFfVVRJTF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9VVElMX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFNpbXBseSByZXR1cm5zIGFuIGVtcHR5IHZlY3Rvci4ge0F1ZGlvfFZpZGVvfURlY29kZXJDb25maWcgYXJlIG9mdGVuCi0vLyBjb25zdHJ1Y3RlZCB3aXRoIGVtcHR5IGV4dHJhIGRhdGEuCi1NRURJQV9FWFBPUlQgc3RkOjp2ZWN0b3I8dWludDhfdD4gRW1wdHlFeHRyYURhdGEoKTsKLQotLy8gVGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiBuZXcgaW5zdGFuY2VzIG9mIEVuY3J5cHRpb25TY2hlbWUgdGhhdAotLy8gaW5kaWNhdGUgd2lkZWx5IHVzZWQgc2V0dGluZ3MuCi1NRURJQV9FWFBPUlQgRW5jcnlwdGlvblNjaGVtZSBVbmVuY3J5cHRlZCgpOwotTUVESUFfRVhQT1JUIEVuY3J5cHRpb25TY2hlbWUgQWVzQ3RyRW5jcnlwdGlvblNjaGVtZSgpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9NRURJQV9VVElMX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWwuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OGNiNzYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsLmgiCi0KLSNpbmNsdWRlICJiYXNlL2xhenlfaW5zdGFuY2UuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWxfaW50ZXJuYWwuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUaGlzIHZhcmlhYmxlIGlzIExlYWt5IGJlY2F1c2UgaXQgaXMgYWNjZXNzZWQgZnJvbSBXb3JrZXJQb29sIHRocmVhZHMuCi1zdGF0aWMgYmFzZTo6TGF6eUluc3RhbmNlPGludGVybmFsOjpNaW1lVXRpbD46OkRlc3RydWN0b3JBdEV4aXQKLSAgICBnX21lZGlhX21pbWVfdXRpbCA9IExBWllfSU5TVEFOQ0VfSU5JVElBTElaRVI7Ci0KLWJvb2wgSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUpIHsKLSAgcmV0dXJuIGdfbWVkaWFfbWltZV91dGlsLlBvaW50ZXIoKS0+SXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKG1pbWVfdHlwZSk7Ci19Ci0KLVN1cHBvcnRzVHlwZSBJc1N1cHBvcnRlZE1lZGlhRm9ybWF0KGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcykgewotICByZXR1cm4gZ19tZWRpYV9taW1lX3V0aWwuUG9pbnRlcigpLT5Jc1N1cHBvcnRlZE1lZGlhRm9ybWF0KG1pbWVfdHlwZSwgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLX0KLQotU3VwcG9ydHNUeXBlIElzU3VwcG9ydGVkRW5jcnlwdGVkTWVkaWFGb3JtYXQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MpIHsKLSAgcmV0dXJuIGdfbWVkaWFfbWltZV91dGlsLlBvaW50ZXIoKS0+SXNTdXBwb3J0ZWRNZWRpYUZvcm1hdChtaW1lX3R5cGUsIGNvZGVjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLX0KLQotdm9pZCBQYXJzZUNvZGVjU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjb2RlY3Nfb3V0LCBib29sIHN0cmlwKSB7Ci0gIGdfbWVkaWFfbWltZV91dGlsLlBvaW50ZXIoKS0+UGFyc2VDb2RlY1N0cmluZyhjb2RlY3MsIGNvZGVjc19vdXQsIHN0cmlwKTsKLX0KLQotdm9pZCBSZW1vdmVQcm9wcmlldGFyeU1lZGlhVHlwZXNBbmRDb2RlY3NGb3JUZXN0cygpIHsKLSAgZ19tZWRpYV9taW1lX3V0aWwuUG9pbnRlcigpLT5SZW1vdmVQcm9wcmlldGFyeU1lZGlhVHlwZXNBbmRDb2RlY3MoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWwuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDc5MzI5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX01JTUVfVVRJTF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NSU1FX1VUSUxfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBDaGVjayB0byBzZWUgaWYgYSBwYXJ0aWN1bGFyIE1JTUUgdHlwZSBpcyBpbiB0aGUgbGlzdCBvZgotLy8gc3VwcG9ydGVkL3JlY29nbml6ZWQgTUlNRSB0eXBlcy4KLU1FRElBX0VYUE9SVCBib29sIElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKTsKLQotLy8gUGFyc2VzIGEgY29kZWMgc3RyaW5nLCBwb3B1bGF0aW5nIHxjb2RlY3Nfb3V0fCB3aXRoIHRoZSBwcmVmaXggb2YgZWFjaCBjb2RlYwotLy8gaW4gdGhlIHN0cmluZyB8Y29kZWNzX2lufC4gRm9yIGV4YW1wbGUsIHBhc3NlZCAiYWFhLmIuYyxkZC5lZWUiLCBpZgotLy8gfHN0cmlwfCA9PSB0cnVlIHxjb2RlY3Nfb3V0fCB3aWxsIGNvbnRhaW4geyJhYWEiLCAiZGQifSwgaWYgfHN0cmlwfCA9PSBmYWxzZQotLy8gfGNvZGVjc19vdXR8IHdpbGwgY29udGFpbiB7ImFhYS5iLmMiLCAiZGQuZWVlIn0uCi0vLyBTZWUgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDI4MS50eHQuCi1NRURJQV9FWFBPUlQgdm9pZCBQYXJzZUNvZGVjU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogY29kZWNzX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpcCk7Ci0KLS8vIEluZGljYXRlcyB0aGF0IHRoZSBNSU1FIHR5cGUgYW5kIChwb3NzaWJsZSBjb2RlYyBzdHJpbmcpIGFyZSBzdXBwb3J0ZWQuCi1lbnVtIFN1cHBvcnRzVHlwZSB7Ci0gIC8vIFRoZSBnaXZlbiBNSU1FIHR5cGUgYW5kIGNvZGVjIGNvbWJpbmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCi0gIElzTm90U3VwcG9ydGVkLAotCi0gIC8vIFRoZSBnaXZlbiBNSU1FIHR5cGUgYW5kIGNvZGVjIGNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZC4KLSAgSXNTdXBwb3J0ZWQsCi0KLSAgLy8gVGhlcmUncyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gTUlNRSB0eXBlIGFuZAotICAvLyBjb2RlYyBjb21iaW5hdGlvbiBjYW4gYmUgcmVuZGVyZWQgb3Igbm90IGJlZm9yZSBhY3R1YWxseSB0cnlpbmcgdG8gcGxheSBpdC4KLSAgTWF5QmVTdXBwb3J0ZWQKLX07Ci0KLS8vIENoZWNrcyB0aGUgfG1pbWVfdHlwZXwgYW5kIHxjb2RlY3N8IGFnYWluc3QgdGhlIE1JTUUgdHlwZXMga25vd24gdG8gc3VwcG9ydAotLy8gb25seSBhIHBhcnRpY3VsYXIgc3Vic2V0IG9mIGNvZGVjcy4KLS8vICogUmV0dXJucyBJc1N1cHBvcnRlZCBpZiB0aGUgfG1pbWVfdHlwZXwgaXMgc3VwcG9ydGVkIGFuZCBhbGwgdGhlIGNvZGVjcwotLy8gICB3aXRoaW4gdGhlIHxjb2RlY3N8IGFyZSBzdXBwb3J0ZWQgZm9yIHRoZSB8bWltZV90eXBlfC4KLS8vICogUmV0dXJucyBNYXlCZVN1cHBvcnRlZCBpZiB0aGUgfG1pbWVfdHlwZXwgaXMgc3VwcG9ydGVkIGFuZCBpcyBrbm93biB0bwotLy8gICBzdXBwb3J0IG9ubHkgYSBzdWJzZXQgb2YgY29kZWNzLCBidXQgfGNvZGVjc3wgd2FzIGVtcHR5LiBBbHNvIHJldHVybmVkIGlmCi0vLyAgIGFsbCB0aGUgY29kZWNzIGluIHxjb2RlY3N8IGFyZSBzdXBwb3J0ZWQsIGJ1dCBhZGRpdGlvbmFsIGNvZGVjIHBhcmFtZXRlcnMKLS8vICAgd2VyZSBzdXBwbGllZCAoc3VjaCBhcyBwcm9maWxlKSBmb3Igd2hpY2ggdGhlIHN1cHBvcnQgY2Fubm90IGJlIGRlY2lkZWQuCi0vLyAqIFJldHVybnMgSXNOb3RTdXBwb3J0ZWQgaWYgZWl0aGVyIHRoZSB8bWltZV90eXBlfCBpcyBub3Qgc3VwcG9ydGVkIG9yIHRoZQotLy8gICB8bWltZV90eXBlfCBpcyBzdXBwb3J0ZWQgYnV0IGF0IGxlYXN0IG9uZSBvZiB0aGUgY29kZWNzIHdpdGhpbiB8Y29kZWNzfCBpcwotLy8gICBub3Qgc3VwcG9ydGVkIGZvciB0aGUgfG1pbWVfdHlwZXwuCi1NRURJQV9FWFBPUlQgU3VwcG9ydHNUeXBlIElzU3VwcG9ydGVkTWVkaWFGb3JtYXQoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MpOwotCi0vLyBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IGZvciBlbmNyeXB0ZWQgZm9ybWF0cy4KLU1FRElBX0VYUE9SVCBTdXBwb3J0c1R5cGUgSXNTdXBwb3J0ZWRFbmNyeXB0ZWRNZWRpYUZvcm1hdCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcyk7Ci0KLS8vIFRlc3Qgb25seSBtZXRob2QgdGhhdCByZW1vdmVzIHByb3ByaWV0YXJ5IG1lZGlhIHR5cGVzIGFuZCBjb2RlY3MgZnJvbSB0aGUKLS8vIGxpc3Qgb2Ygc3VwcG9ydGVkIE1JTUUgdHlwZXMgYW5kIGNvZGVjcy4gVGhlc2UgdHlwZXMgYW5kIGNvZGVjcyBtdXN0IGJlCi0vLyByZW1vdmVkIHRvIGVuc3VyZSBjb25zaXN0ZW50IGxheW91dCB0ZXN0IHJlc3VsdHMgYWNyb3NzIGFsbCBDaHJvbWl1bQotLy8gdmFyaWF0aW9ucy4KLU1FRElBX0VYUE9SVCB2b2lkIFJlbW92ZVByb3ByaWV0YXJ5TWVkaWFUeXBlc0FuZENvZGVjc0ZvclRlc3RzKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01JTUVfVVRJTF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODczZWI5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbF9pbnRlcm5hbC5jYworKysgL2Rldi9udWxsCkBAIC0xLDY4MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWxfaW50ZXJuYWwuaCIKLQotI2luY2x1ZGUgImJhc2UvY29tbWFuZF9saW5lLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWEuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCIKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSNpbmNsdWRlICJiYXNlL2FuZHJvaWQvYnVpbGRfaW5mby5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2FuZHJvaWQvbWVkaWFfY29kZWNfdXRpbC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXN0cnVjdCBDb2RlY0lETWFwcGluZ3MgewotICBjb25zdCBjaGFyKiBjb25zdCBjb2RlY19pZDsKLSAgTWltZVV0aWw6OkNvZGVjIGNvZGVjOwotfTsKLQotLy8gTGlzdCBvZiBjb2RlYyBJRHMgdGhhdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgdGhlCi0vLyBjb2RlYyBhbmQgcHJvZmlsZSBiZWluZyByZXF1ZXN0ZWQuCi0vLwotLy8gVGhlICJtcDRhIiBzdHJpbmdzIGNvbWUgZnJvbSBSRkMgNjM4MS4KLXN0YXRpYyBjb25zdCBDb2RlY0lETWFwcGluZ3Mga1VuYW1iaWd1b3VzQ29kZWNTdHJpbmdNYXBbXSA9IHsKLSAgICB7IjEiLCBNaW1lVXRpbDo6UENNfSwgIC8vIFdlIG9ubHkgYWxsb3cgdGhpcyBmb3IgV0FWIHNvIGl0IGlzbid0IGFtYmlndW91cy4KLSAgICAvLyBhdmMxL2F2YzMuWFhYWFhYIG1heSBiZSB1bmFtYmlndW91czsgaGFuZGxlZCBieSBQYXJzZUFWQ0NvZGVjSWQoKS4KLSAgICAvLyBoZXYxL2h2YzEuWFhYWFhYIG1heSBiZSB1bmFtYmlndW91czsgaGFuZGxlZCBieSBQYXJzZUhFVkNDb2RlY0lEKCkuCi0gICAgLy8gdnA5LCB2cDkuMCwgdnAwOS54eC54eC54eC54eC54eC54eC54eCBtYXkgYmUgdW5hbWJpZ3VvdXM7IGhhbmRsZWQgYnkKLSAgICAvLyBQYXJzZVZwOUNvZGVjSUQoKS4KLSAgICB7Im1wMyIsIE1pbWVVdGlsOjpNUDN9LAotICAgIC8vIEZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBSRkMgNjM4MSBjb21wbGlhbnQgYXVkaW8gY29kZWMgc3RyaW5nczoKLSAgICAvLyAgIG1wNGEuNjYgICAgIC0gTVBFRy0yIEFBQyBNQUlOCi0gICAgLy8gICBtcDRhLjY3ICAgICAtIE1QRUctMiBBQUMgTEMKLSAgICAvLyAgIG1wNGEuNjggICAgIC0gTVBFRy0yIEFBQyBTU1IKLSAgICAvLyAgIG1wNGEuNjkgICAgIC0gTVBFRy0yIGV4dGVuc2lvbiB0byBNUEVHLTEgKE1QMykKLSAgICAvLyAgIG1wNGEuNkIgICAgIC0gTVBFRy0xIGF1ZGlvIChNUDMpCi0gICAgLy8gICBtcDRhLjQwLjIgICAtIE1QRUctNCBBQUMgTEMKLSAgICAvLyAgIG1wNGEuNDAuMDIgIC0gTVBFRy00IEFBQyBMQyAobGVhZGluZyAwIGluIGF1ZC1vdGkgZm9yIGNvbXBhdGliaWxpdHkpCi0gICAgLy8gICBtcDRhLjQwLjUgICAtIE1QRUctNCBIRS1BQUMgdjEgKEFBQyBMQyArIFNCUikKLSAgICAvLyAgIG1wNGEuNDAuMDUgIC0gTVBFRy00IEhFLUFBQyB2MSAoQUFDIExDICsgU0JSKSAobGVhZGluZyAwIGluIGF1ZC1vdGkgZm9yCi0gICAgLy8gICAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkpCi0gICAgLy8gICBtcDRhLjQwLjI5ICAtIE1QRUctNCBIRS1BQUMgdjIgKEFBQyBMQyArIFNCUiArIFBTKQotICAgIHsibXA0YS42NiIsIE1pbWVVdGlsOjpNUEVHMl9BQUN9LAotICAgIHsibXA0YS42NyIsIE1pbWVVdGlsOjpNUEVHMl9BQUN9LAotICAgIHsibXA0YS42OCIsIE1pbWVVdGlsOjpNUEVHMl9BQUN9LAotICAgIHsibXA0YS42OSIsIE1pbWVVdGlsOjpNUDN9LAotICAgIHsibXA0YS42QiIsIE1pbWVVdGlsOjpNUDN9LAotICAgIHsibXA0YS40MC4yIiwgTWltZVV0aWw6Ok1QRUc0X0FBQ30sCi0gICAgeyJtcDRhLjQwLjAyIiwgTWltZVV0aWw6Ok1QRUc0X0FBQ30sCi0gICAgeyJtcDRhLjQwLjUiLCBNaW1lVXRpbDo6TVBFRzRfQUFDfSwKLSAgICB7Im1wNGEuNDAuMDUiLCBNaW1lVXRpbDo6TVBFRzRfQUFDfSwKLSAgICB7Im1wNGEuNDAuMjkiLCBNaW1lVXRpbDo6TVBFRzRfQUFDfSwKLSAgICAvLyBUT0RPKHNlcnZvbGspOiBTdHJpY3RseSBzcGVha2luZyBvbmx5IG1wNGEuQTUgYW5kIG1wNGEuQTYgY29kZWMgaWRzIGFyZQotICAgIC8vIHZhbGlkIGFjY29yZGluZyB0byBSRkMgNjM4MSBzZWN0aW9uIDMuMywgMy40LiBMb3dlci1jYXNlIG90aSAobXA0YS5hNSBhbmQKLSAgICAvLyBtcDRhLmE2KSBzaG91bGQgYmUgcmVqZWN0ZWQuIEJ1dCB3ZSB1c2VkIHRvIGFsbG93IHRob3NlIGluIG9sZGVyIHZlcnNpb25zCi0gICAgLy8gb2YgQ2hyb21lY2FzdCBmaXJtd2FyZSBhbmQgc29tZSBhcHBzIChub3RhYmx5IE1QTCkgZGVwZW5kIG9uIHRob3NlIGNvZGVjCi0gICAgLy8gdHlwZXMgYmVpbmcgc3VwcG9ydGVkLCBzbyB0aGV5IHNob3VsZCBiZSBhbGxvd2VkIGZvciBub3cKLSAgICAvLyAoY3JidWcuY29tLzU2NDk2MCkuCi0gICAgeyJhYy0zIiwgTWltZVV0aWw6OkFDM30sCi0gICAgeyJtcDRhLmE1IiwgTWltZVV0aWw6OkFDM30sCi0gICAgeyJtcDRhLkE1IiwgTWltZVV0aWw6OkFDM30sCi0gICAgeyJlYy0zIiwgTWltZVV0aWw6OkVBQzN9LAotICAgIHsibXA0YS5hNiIsIE1pbWVVdGlsOjpFQUMzfSwKLSAgICB7Im1wNGEuQTYiLCBNaW1lVXRpbDo6RUFDM30sCi0gICAgeyJ2b3JiaXMiLCBNaW1lVXRpbDo6Vk9SQklTfSwKLSAgICB7Im9wdXMiLCBNaW1lVXRpbDo6T1BVU30sCi0gICAgeyJ2cDgiLCBNaW1lVXRpbDo6VlA4fSwKLSAgICB7InZwOC4wIiwgTWltZVV0aWw6OlZQOH0sCi0gICAgeyJ0aGVvcmEiLCBNaW1lVXRpbDo6VEhFT1JBfX07Ci0KLS8vIExpc3Qgb2YgY29kZWMgSURzIHRoYXQgYXJlIGFtYmlndW91cyBhbmQgZG9uJ3QgcHJvdmlkZQotLy8gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB0aGUgY29kZWMgYW5kIHByb2ZpbGUuCi0vLyBUaGUgY29kZWMgaW4gdGhlc2UgZW50cmllcyBpbmRpY2F0ZSB0aGUgY29kZWMgYW5kIHByb2ZpbGUKLS8vIHdlIGFzc3VtZSB0aGUgdXNlciBpcyB0cnlpbmcgdG8gaW5kaWNhdGUuCi1zdGF0aWMgY29uc3QgQ29kZWNJRE1hcHBpbmdzIGtBbWJpZ3VvdXNDb2RlY1N0cmluZ01hcFtdID0gewotICAgIHsibXA0YS40MCIsIE1pbWVVdGlsOjpNUEVHNF9BQUN9LAotICAgIHsiYXZjMSIsIE1pbWVVdGlsOjpIMjY0fSwKLSAgICB7ImF2YzMiLCBNaW1lVXRpbDo6SDI2NH0sCi0gICAgLy8gYXZjMS9hdmMzLlhYWFhYWCBtYXkgYmUgYW1iaWd1b3VzOyBoYW5kbGVkIGJ5IFBhcnNlQVZDQ29kZWNJZCgpLgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIga0hleFN0cmluZ1tdID0gIjAxMjM0NTY3ODlBQkNERUYiOwotc3RhdGljIGNoYXIgSW50VG9IZXgoaW50IGkpIHsKLSAgRENIRUNLX0dFKGksIDApIDw8IGkgPDwgIiBub3QgYSBoZXggdmFsdWUiOwotICBEQ0hFQ0tfTEUoaSwgMTUpIDw8IGkgPDwgIiBub3QgYSBoZXggdmFsdWUiOwotICByZXR1cm4ga0hleFN0cmluZ1tpXTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIFRyYW5zbGF0ZUxlZ2FjeUF2YzFDb2RlY0lkcyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQpIHsKLSAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3Igb2xkLCBwcmUtUkZDIDYzODEgZm9ybWF0IGF2YzEgc3RyaW5ncywgd2hpY2ggYXJlIHN0aWxsCi0gIC8vIGJlaW5nIHVzZWQgYnkgc29tZSBITFMgYXBwcyB0byBwcmVzZXJ2ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKLSAgLy8gaU9TIGRldmljZXMuIFRoZSBvbGQgZm9ybWF0IHdhcyBhdmMxLjxwcm9maWxlPi48bGV2ZWw+Ci0gIC8vIFdoZXJlIDxwcm9maWxlPiBpcyBILjI2NCBwcm9maWxlX2lkYyBlbmNvZGVkIGFzIGEgZGVjaW1hbCBudW1iZXIsIGkuZS4KLSAgLy8gNjYgaXMgYmFzZWxpbmUgcHJvZmlsZSAoMHg0MikKLSAgLy8gNzcgaXMgbWFpbiBwcm9maWxlICgweDRkKQotICAvLyAxMDAgaXMgaGlnaCBwcm9maWxlICgweDY0KQotICAvLyBBbmQgPGxldmVsPiBpcyBILjI2NCBsZXZlbCBtdWx0aXBsaWVkIGJ5IDEwLCBhbHNvIGVuY29kZWQgYXMgZGVjaW1hbCBudW1iZXIKLSAgLy8gRS5nLiA8bGV2ZWw+IDMxIGNvcnJlc3BvbmRzIHRvIEguMjY0IGxldmVsIDMuMQotICAvLyBTZWUsIGZvciBleGFtcGxlLCBodHRwOi8vcXRkZXZzZWVkLmFwcGxlLmNvbS9xYWRyaWZ0L3Rlc3RjYXNlcy90Yy0wMTMzLnBocAotICB1aW50MzJfdCBsZXZlbF9zdGFydCA9IDA7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLSAgaWYgKFN0YXJ0c1dpdGgoY29kZWNfaWQsICJhdmMxLjY2LiIsIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKSB7Ci0gICAgbGV2ZWxfc3RhcnQgPSA4OwotICAgIHJlc3VsdCA9ICJhdmMxLjQyMDAiOwotICB9IGVsc2UgaWYgKFN0YXJ0c1dpdGgoY29kZWNfaWQsICJhdmMxLjc3LiIsIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKSB7Ci0gICAgbGV2ZWxfc3RhcnQgPSA4OwotICAgIHJlc3VsdCA9ICJhdmMxLjREMDAiOwotICB9IGVsc2UgaWYgKFN0YXJ0c1dpdGgoY29kZWNfaWQsICJhdmMxLjEwMC4iLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgIGxldmVsX3N0YXJ0ID0gOTsKLSAgICByZXN1bHQgPSAiYXZjMS42NDAwIjsKLSAgfQotCi0gIHVpbnQzMl90IGxldmVsID0gMDsKLSAgaWYgKGxldmVsX3N0YXJ0ID4gMCAmJgotICAgICAgYmFzZTo6U3RyaW5nVG9VaW50KGNvZGVjX2lkLnN1YnN0cihsZXZlbF9zdGFydCksICZsZXZlbCkgJiYgbGV2ZWwgPCAyNTYpIHsKLSAgICAvLyBUaGlzIGlzIGEgdmFsaWQgbGVnYWN5IGF2YzEgY29kZWMgaWQgLSByZXR1cm4gdGhlIGNvZGVjIGlkIHRyYW5zbGF0ZWQKLSAgICAvLyBpbnRvIFJGQyA2MzgxIGZvcm1hdC4KLSAgICByZXN1bHQucHVzaF9iYWNrKEludFRvSGV4KGxldmVsID4+IDQpKTsKLSAgICByZXN1bHQucHVzaF9iYWNrKEludFRvSGV4KGxldmVsICYgMHhmKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgbGVnYWN5IGF2YzEgY29kZWMgaWQgLSByZXR1cm4gdGhlIG9yaWdpbmFsIGNvZGVjIGlkLgotICByZXR1cm4gY29kZWNfaWQ7Ci19Ci0KLXN0YXRpYyBib29sIFBhcnNlVnA5Q29kZWNJRChjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNQcm9maWxlKiBvdXRfcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBvdXRfbGV2ZWwpIHsKLSAgaWYgKG1pbWVfdHlwZV9sb3dlcl9jYXNlID09ICJ2aWRlby9tcDQiKSB7Ci0gICAgcmV0dXJuIFBhcnNlTmV3U3R5bGVWcDlDb2RlY0lEKGNvZGVjX2lkLCBvdXRfcHJvZmlsZSwgb3V0X2xldmVsKTsKLSAgfSBlbHNlIGlmIChtaW1lX3R5cGVfbG93ZXJfY2FzZSA9PSAidmlkZW8vd2VibSIpIHsKLSAgICAvLyBPbmx5IGxlZ2FjeSBjb2RlYyBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgaW4gV2ViTS4KLSAgICAvLyBUT0RPKGtxeWFuZyk6IFNob3VsZCB3ZSBzdXBwb3J0IG5ldyBjb2RlYyBzdHJpbmcgaW4gV2ViTT8KLSAgICByZXR1cm4gUGFyc2VMZWdhY3lWcDlDb2RlY0lEKGNvZGVjX2lkLCBvdXRfcHJvZmlsZSwgb3V0X2xldmVsKTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIElzVmFsaWRIMjY0TGV2ZWwodWludDhfdCBsZXZlbF9pZGMpIHsKLSAgLy8gVmFsaWQgbGV2ZWxzIHRha2VuIGZyb20gVGFibGUgQS0xIGluIElTTy9JRUMgMTQ0OTYtMTAuCi0gIC8vIExldmVsX2lkYyByZXByZXNlbnRzIHRoZSBzdGFuZGFyZCBsZXZlbCByZXByZXNlbnRlZCBhcyBkZWNpbWFsIG51bWJlcgotICAvLyBtdWx0aXBsaWVkIGJ5IHRlbiwgZS5nLiBsZXZlbF9pZGM9PTMyIGNvcnJlc3BvbmRzIHRvIGxldmVsPT0zLjIKLSAgcmV0dXJuICgobGV2ZWxfaWRjID49IDEwICYmIGxldmVsX2lkYyA8PSAxMykgfHwKLSAgICAgICAgICAobGV2ZWxfaWRjID49IDIwICYmIGxldmVsX2lkYyA8PSAyMikgfHwKLSAgICAgICAgICAobGV2ZWxfaWRjID49IDMwICYmIGxldmVsX2lkYyA8PSAzMikgfHwKLSAgICAgICAgICAobGV2ZWxfaWRjID49IDQwICYmIGxldmVsX2lkYyA8PSA0MikgfHwKLSAgICAgICAgICAobGV2ZWxfaWRjID49IDUwICYmIGxldmVsX2lkYyA8PSA1MSkpOwotfQotCi1NaW1lVXRpbDo6TWltZVV0aWwoKSA6IGFsbG93X3Byb3ByaWV0YXJ5X2NvZGVjc18oZmFsc2UpIHsKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gIHBsYXRmb3JtX2luZm9fLmlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCA9Ci0gICAgICBJc1VuaWZpZWRNZWRpYVBpcGVsaW5lRW5hYmxlZCgpOwotICAvLyBXaGVuIHRoZSB1bmlmaWVkIG1lZGlhIHBpcGVsaW5lIGlzIGVuYWJsZWQsIHdlIG5lZWQgc3VwcG9ydCBmb3IgYm90aCBHUFUKLSAgLy8gdmlkZW8gZGVjb2RlcnMgYW5kIE1lZGlhQ29kZWM7IGluZGljYXRlZCBieSBIYXNQbGF0Zm9ybURlY29kZXJTdXBwb3J0KCkuCi0gIC8vIFdoZW4gdGhlIEFuZHJvaWQgcGlwZWxpbmUgaXMgdXNlZCwgd2Ugb25seSBuZWVkIGFjY2VzcyB0byBNZWRpYUNvZGVjLgotICBwbGF0Zm9ybV9pbmZvXy5oYXNfcGxhdGZvcm1fZGVjb2RlcnMgPSBBcmVQbGF0Zm9ybURlY29kZXJzQXZhaWxhYmxlKCk7Ci0gIHBsYXRmb3JtX2luZm9fLmhhc19wbGF0Zm9ybV92cDhfZGVjb2RlciA9Ci0gICAgICBNZWRpYUNvZGVjVXRpbDo6SXNWcDhEZWNvZGVyQXZhaWxhYmxlKCk7Ci0gIHBsYXRmb3JtX2luZm9fLmhhc19wbGF0Zm9ybV92cDlfZGVjb2RlciA9Ci0gICAgICBNZWRpYUNvZGVjVXRpbDo6SXNWcDlEZWNvZGVyQXZhaWxhYmxlKCk7Ci0gIHBsYXRmb3JtX2luZm9fLnN1cHBvcnRzX29wdXMgPSBQbGF0Zm9ybUhhc09wdXNTdXBwb3J0KCk7Ci0jZW5kaWYKLQotICBJbml0aWFsaXplTWltZVR5cGVNYXBzKCk7Ci19Ci0KLU1pbWVVdGlsOjp+TWltZVV0aWwoKSB7fQotCi1WaWRlb0NvZGVjIE1pbWVVdGlsVG9WaWRlb0NvZGVjKE1pbWVVdGlsOjpDb2RlYyBjb2RlYykgewotICBzd2l0Y2ggKGNvZGVjKSB7Ci0gICAgY2FzZSBNaW1lVXRpbDo6SDI2NDoKLSAgICAgIHJldHVybiBrQ29kZWNIMjY0OwotICAgIGNhc2UgTWltZVV0aWw6OkhFVkM6Ci0gICAgICByZXR1cm4ga0NvZGVjSEVWQzsKLSAgICBjYXNlIE1pbWVVdGlsOjpWUDg6Ci0gICAgICByZXR1cm4ga0NvZGVjVlA4OwotICAgIGNhc2UgTWltZVV0aWw6OlZQOToKLSAgICAgIHJldHVybiBrQ29kZWNWUDk7Ci0gICAgY2FzZSBNaW1lVXRpbDo6VEhFT1JBOgotICAgICAgcmV0dXJuIGtDb2RlY1RoZW9yYTsKLSAgICBjYXNlIE1pbWVVdGlsOjpJTlZBTElEX0NPREVDOgotICAgIGNhc2UgTWltZVV0aWw6OlBDTToKLSAgICBjYXNlIE1pbWVVdGlsOjpNUDM6Ci0gICAgY2FzZSBNaW1lVXRpbDo6QUMzOgotICAgIGNhc2UgTWltZVV0aWw6OkVBQzM6Ci0gICAgY2FzZSBNaW1lVXRpbDo6TVBFRzJfQUFDOgotICAgIGNhc2UgTWltZVV0aWw6Ok1QRUc0X0FBQzoKLSAgICBjYXNlIE1pbWVVdGlsOjpWT1JCSVM6Ci0gICAgY2FzZSBNaW1lVXRpbDo6T1BVUzoKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBrVW5rbm93blZpZGVvQ29kZWM7Ci19Ci0KLVN1cHBvcnRzVHlwZSBNaW1lVXRpbDo6QXJlU3VwcG9ydGVkQ29kZWNzKAotICAgIGNvbnN0IENvZGVjU2V0JiBzdXBwb3J0ZWRfY29kZWNzLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcywKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGJvb2wgaXNfZW5jcnlwdGVkKSBjb25zdCB7Ci0gIERDSEVDSyghc3VwcG9ydGVkX2NvZGVjcy5lbXB0eSgpKTsKLSAgRENIRUNLKCFjb2RlY3MuZW1wdHkoKSk7Ci0KLSAgU3VwcG9ydHNUeXBlIHJlc3VsdCA9IElzU3VwcG9ydGVkOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVjcy5zaXplKCk7ICsraSkgewotICAgIGJvb2wgaXNfYW1iaWd1b3VzID0gdHJ1ZTsKLSAgICBDb2RlYyBjb2RlYyA9IElOVkFMSURfQ09ERUM7Ci0gICAgVmlkZW9Db2RlY1Byb2ZpbGUgdmlkZW9fcHJvZmlsZSA9IFZJREVPX0NPREVDX1BST0ZJTEVfVU5LTk9XTjsKLSAgICB1aW50OF90IHZpZGVvX2xldmVsID0gMDsKLSAgICBpZiAoIVN0cmluZ1RvQ29kZWMobWltZV90eXBlX2xvd2VyX2Nhc2UsIGNvZGVjc1tpXSwgJmNvZGVjLCAmaXNfYW1iaWd1b3VzLAotICAgICAgICAgICAgICAgICAgICAgICAmdmlkZW9fcHJvZmlsZSwgJnZpZGVvX2xldmVsLCBpc19lbmNyeXB0ZWQpKSB7Ci0gICAgICByZXR1cm4gSXNOb3RTdXBwb3J0ZWQ7Ci0gICAgfQotCi0gICAgVmlkZW9Db2RlYyB2aWRlb19jb2RlYyA9IE1pbWVVdGlsVG9WaWRlb0NvZGVjKGNvZGVjKTsKLQotICAgIGlmICghSXNDb2RlY1N1cHBvcnRlZChjb2RlYywgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGlzX2VuY3J5cHRlZCkgfHwKLSAgICAgICAgc3VwcG9ydGVkX2NvZGVjcy5maW5kKGNvZGVjKSA9PSBzdXBwb3J0ZWRfY29kZWNzLmVuZCgpKSB7Ci0gICAgICByZXR1cm4gSXNOb3RTdXBwb3J0ZWQ7Ci0gICAgfQotCi0gICAgaWYgKGlzX2FtYmlndW91cykgcmVzdWx0ID0gTWF5QmVTdXBwb3J0ZWQ7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIE1pbWVVdGlsOjpJbml0aWFsaXplTWltZVR5cGVNYXBzKCkgewotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLSAgYWxsb3dfcHJvcHJpZXRhcnlfY29kZWNzXyA9IHRydWU7Ci0jZW5kaWYKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShrVW5hbWJpZ3VvdXNDb2RlY1N0cmluZ01hcCk7ICsraSkgewotICAgIHN0cmluZ190b19jb2RlY19tYXBfW2tVbmFtYmlndW91c0NvZGVjU3RyaW5nTWFwW2ldLmNvZGVjX2lkXSA9Ci0gICAgICAgIENvZGVjRW50cnkoa1VuYW1iaWd1b3VzQ29kZWNTdHJpbmdNYXBbaV0uY29kZWMsIGZhbHNlKTsKLSAgfQotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGtBbWJpZ3VvdXNDb2RlY1N0cmluZ01hcCk7ICsraSkgewotICAgIHN0cmluZ190b19jb2RlY19tYXBfW2tBbWJpZ3VvdXNDb2RlY1N0cmluZ01hcFtpXS5jb2RlY19pZF0gPQotICAgICAgICBDb2RlY0VudHJ5KGtBbWJpZ3VvdXNDb2RlY1N0cmluZ01hcFtpXS5jb2RlYywgdHJ1ZSk7Ci0gIH0KLQotICBBZGRTdXBwb3J0ZWRNZWRpYUZvcm1hdHMoKTsKLX0KLQotLy8gRWFjaCBjYWxsIHRvIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoKSBjb250YWlucyBhIG1lZGlhIHR5cGUKLS8vIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZWRpYV90eXBlKSBhbmQgY29ycmVzcG9uZGluZyBtZWRpYSBjb2RlYyhzKQotLy8gc3VwcG9ydGVkIGJ5IHRoZXNlIHR5cGVzL2NvbnRhaW5lcnMuCi0vLyBUT0RPKGRkb3J3aW4pOiBSZXBsYWNlIGluc2VydCgpIGNhbGxzIHdpdGggaW5pdGlhbGl6ZXJfbGlzdCB3aGVuIGFsbG93ZWQuCi12b2lkIE1pbWVVdGlsOjpBZGRTdXBwb3J0ZWRNZWRpYUZvcm1hdHMoKSB7Ci0gIENvZGVjU2V0IGltcGxpY2l0X2NvZGVjOwotICBDb2RlY1NldCB3YXZfY29kZWNzOwotICB3YXZfY29kZWNzLmluc2VydChQQ00pOwotCi0gIENvZGVjU2V0IG9nZ19hdWRpb19jb2RlY3M7Ci0gIG9nZ19hdWRpb19jb2RlY3MuaW5zZXJ0KE9QVVMpOwotICBvZ2dfYXVkaW9fY29kZWNzLmluc2VydChWT1JCSVMpOwotICBDb2RlY1NldCBvZ2dfdmlkZW9fY29kZWNzOwotI2lmICFkZWZpbmVkKE9TX0FORFJPSUQpCi0gIG9nZ192aWRlb19jb2RlY3MuaW5zZXJ0KFRIRU9SQSk7Ci0jZW5kaWYgIC8vICFkZWZpbmVkKE9TX0FORFJPSUQpCi0gIENvZGVjU2V0IG9nZ19jb2RlY3Mob2dnX2F1ZGlvX2NvZGVjcyk7Ci0gIG9nZ19jb2RlY3MuaW5zZXJ0KG9nZ192aWRlb19jb2RlY3MuYmVnaW4oKSwgb2dnX3ZpZGVvX2NvZGVjcy5lbmQoKSk7Ci0KLSAgQ29kZWNTZXQgd2VibV9hdWRpb19jb2RlY3M7Ci0gIHdlYm1fYXVkaW9fY29kZWNzLmluc2VydChPUFVTKTsKLSAgd2VibV9hdWRpb19jb2RlY3MuaW5zZXJ0KFZPUkJJUyk7Ci0gIENvZGVjU2V0IHdlYm1fdmlkZW9fY29kZWNzOwotICB3ZWJtX3ZpZGVvX2NvZGVjcy5pbnNlcnQoVlA4KTsKLSAgd2VibV92aWRlb19jb2RlY3MuaW5zZXJ0KFZQOSk7Ci0gIENvZGVjU2V0IHdlYm1fY29kZWNzKHdlYm1fYXVkaW9fY29kZWNzKTsKLSAgd2VibV9jb2RlY3MuaW5zZXJ0KHdlYm1fdmlkZW9fY29kZWNzLmJlZ2luKCksIHdlYm1fdmlkZW9fY29kZWNzLmVuZCgpKTsKLQotICBDb2RlY1NldCBtcDNfY29kZWNzOwotICBtcDNfY29kZWNzLmluc2VydChNUDMpOwotCi0gIENvZGVjU2V0IGFhYzsKLSAgYWFjLmluc2VydChNUEVHMl9BQUMpOwotICBhYWMuaW5zZXJ0KE1QRUc0X0FBQyk7Ci0KLSAgQ29kZWNTZXQgYXZjX2FuZF9hYWMoYWFjKTsKLSAgYXZjX2FuZF9hYWMuaW5zZXJ0KEgyNjQpOwotCi0gIENvZGVjU2V0IG1wNF9hdWRpb19jb2RlY3MoYWFjKTsKLSAgbXA0X2F1ZGlvX2NvZGVjcy5pbnNlcnQoTVAzKTsKLSAgbXA0X2F1ZGlvX2NvZGVjcy5pbnNlcnQoQUMzKTsKLSAgbXA0X2F1ZGlvX2NvZGVjcy5pbnNlcnQoRUFDMyk7Ci0KLSAgQ29kZWNTZXQgbXA0X3ZpZGVvX2NvZGVjczsKLSAgbXA0X3ZpZGVvX2NvZGVjcy5pbnNlcnQoSDI2NCk7Ci0gIG1wNF92aWRlb19jb2RlY3MuaW5zZXJ0KEhFVkMpOwotICAvLyBPbmx5IFZQOSB3aXRoIHZhbGlkIGNvZGVjIHN0cmluZyB2cDA5Lnh4Lnh4Lnh4Lnh4Lnh4Lnh4Lnh4IGlzIHN1cHBvcnRlZC4KLSAgLy8gU2VlIFBhcnNlVnA5Q29kZWNJRCBmb3IgZGV0YWlscy4KLSAgbXA0X3ZpZGVvX2NvZGVjcy5pbnNlcnQoVlA5KTsKLSAgQ29kZWNTZXQgbXA0X2NvZGVjcyhtcDRfYXVkaW9fY29kZWNzKTsKLSAgbXA0X2NvZGVjcy5pbnNlcnQobXA0X3ZpZGVvX2NvZGVjcy5iZWdpbigpLCBtcDRfdmlkZW9fY29kZWNzLmVuZCgpKTsKLQotICBBZGRDb250YWluZXJXaXRoQ29kZWNzKCJhdWRpby93YXYiLCB3YXZfY29kZWNzLCBmYWxzZSk7Ci0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoImF1ZGlvL3gtd2F2Iiwgd2F2X2NvZGVjcywgZmFsc2UpOwotICBBZGRDb250YWluZXJXaXRoQ29kZWNzKCJhdWRpby93ZWJtIiwgd2VibV9hdWRpb19jb2RlY3MsIGZhbHNlKTsKLSAgRENIRUNLKCF3ZWJtX3ZpZGVvX2NvZGVjcy5lbXB0eSgpKTsKLSAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygidmlkZW8vd2VibSIsIHdlYm1fY29kZWNzLCBmYWxzZSk7Ci0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoImF1ZGlvL29nZyIsIG9nZ19hdWRpb19jb2RlY3MsIGZhbHNlKTsKLSAgLy8gdmlkZW8vb2dnIGlzIG9ubHkgc3VwcG9ydGVkIGlmIGFuIGFwcHJvcHJpYXRlIHZpZGVvIGNvZGVjIGlzIHN1cHBvcnRlZC4KLSAgLy8gTm90ZTogVGhpcyBhc3N1bWVzIHN1Y2ggY29kZWNzIGNhbm5vdCBiZSBsYXRlciBleGNsdWRlZC4KLSAgaWYgKCFvZ2dfdmlkZW9fY29kZWNzLmVtcHR5KCkpCi0gICAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygidmlkZW8vb2dnIiwgb2dnX2NvZGVjcywgZmFsc2UpOwotICAvLyBUT0RPKGRkb3J3aW4pOiBTaG91bGQgdGhlIGFwcGxpY2F0aW9uIHR5cGUgc3VwcG9ydCBPcHVzPwotICBBZGRDb250YWluZXJXaXRoQ29kZWNzKCJhcHBsaWNhdGlvbi9vZ2ciLCBvZ2dfY29kZWNzLCBmYWxzZSk7Ci0KLSAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygiYXVkaW8vbXBlZyIsIG1wM19jb2RlY3MsIHRydWUpOyAgLy8gQWxsb3cgIm1wMyIuCi0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoImF1ZGlvL21wMyIsIGltcGxpY2l0X2NvZGVjLCB0cnVlKTsKLSAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygiYXVkaW8veC1tcDMiLCBpbXBsaWNpdF9jb2RlYywgdHJ1ZSk7Ci0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoImF1ZGlvL2FhYyIsIGltcGxpY2l0X2NvZGVjLCB0cnVlKTsgIC8vIEFBQyAvIEFEVFMuCi0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoImF1ZGlvL21wNCIsIG1wNF9hdWRpb19jb2RlY3MsIHRydWUpOwotICBEQ0hFQ0soIW1wNF92aWRlb19jb2RlY3MuZW1wdHkoKSk7Ci0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoInZpZGVvL21wNCIsIG1wNF9jb2RlY3MsIHRydWUpOwotICAvLyBUaGVzZSBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkgYW5kIHRodXMgb25seQotICAvLyBzdXBwb3J0IHRoZSBjb2RlY3MgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5LgotICBBZGRDb250YWluZXJXaXRoQ29kZWNzKCJhdWRpby94LW00YSIsIGFhYywgdHJ1ZSk7Ci0gIEFkZENvbnRhaW5lcldpdGhDb2RlY3MoInZpZGVvL3gtbTR2IiwgYXZjX2FuZF9hYWMsIHRydWUpOwotCi0gIC8vIFRPRE8oZGRvcndpbik6IEV4YWN0bHkgd2hpY2ggY29kZWNzIHNob3VsZCBiZSBzdXBwb3J0ZWQ/Ci0gIERDSEVDSyghbXA0X3ZpZGVvX2NvZGVjcy5lbXB0eSgpKTsKLSAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygidmlkZW8vbXAydCIsIG1wNF9jb2RlY3MsIHRydWUpOwotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgLy8gSFRUUCBMaXZlIFN0cmVhbWluZyAoSExTKS4KLSAgLy8gVE9ETyhkZG9yd2luKTogSXMgYW55IE1QMyBjb2RlYyBzdHJpbmcgdmFyaWFudCBpbmNsdWRlZCBpbiByZWFsIHF1ZXJpZXM/Ci0gIENvZGVjU2V0IGhsc19jb2RlY3MoYXZjX2FuZF9hYWMpOwotICBobHNfY29kZWNzLmluc2VydChNUDMpOwotICBBZGRDb250YWluZXJXaXRoQ29kZWNzKCJhcHBsaWNhdGlvbi94LW1wZWd1cmwiLCBobHNfY29kZWNzLCB0cnVlKTsKLSAgQWRkQ29udGFpbmVyV2l0aENvZGVjcygiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLCBobHNfY29kZWNzLCB0cnVlKTsKLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotfQotCi12b2lkIE1pbWVVdGlsOjpBZGRDb250YWluZXJXaXRoQ29kZWNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvZGVjU2V0JiBjb2RlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcHJvcHJpZXRhcnlfbWltZV90eXBlKSB7Ci0gIG1lZGlhX2Zvcm1hdF9tYXBfW21pbWVfdHlwZV0gPSBjb2RlY3M7Ci0KLSAgaWYgKGlzX3Byb3ByaWV0YXJ5X21pbWVfdHlwZSkKLSAgICBwcm9wcmlldGFyeV9tZWRpYV9jb250YWluZXJzXy5wdXNoX2JhY2sobWltZV90eXBlKTsKLX0KLQotYm9vbCBNaW1lVXRpbDo6SXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUpIGNvbnN0IHsKLSAgcmV0dXJuIG1lZGlhX2Zvcm1hdF9tYXBfLmZpbmQoYmFzZTo6VG9Mb3dlckFTQ0lJKG1pbWVfdHlwZSkpICE9Ci0gICAgICAgICBtZWRpYV9mb3JtYXRfbWFwXy5lbmQoKTsKLX0KLQotdm9pZCBNaW1lVXRpbDo6UGFyc2VDb2RlY1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGNvZGVjc19vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaXApIHsKLSAgc3RkOjpzdHJpbmcgdHJpbW1lZF9jb2RlY3M7Ci0gIGJhc2U6OlRyaW1TdHJpbmcoY29kZWNzLCAiXCIiLCAmdHJpbW1lZF9jb2RlY3MpOwotICAqY29kZWNzX291dCA9IGJhc2U6OlNwbGl0U3RyaW5nKHRyaW1tZWRfY29kZWNzLCBzdGQ6OnN0cmluZygiLCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotCi0gIC8vIENvbnZlcnQgZW1wdHkgb3IgYWxsLXdoaXRlc3BhY2UgaW5wdXQgdG8gMCByZXN1bHRzLgotICBpZiAoY29kZWNzX291dC0+c2l6ZSgpID09IDEgJiYgKCpjb2RlY3Nfb3V0KVswXS5lbXB0eSgpKSBjb2RlY3Nfb3V0LT5jbGVhcigpOwotCi0gIGlmICghc3RyaXApIHJldHVybjsKLQotICAvLyBTdHJpcCBldmVyeXRoaW5nIHBhc3QgdGhlIGZpcnN0ICcuJwotICBmb3IgKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBjb2RlY3Nfb3V0LT5iZWdpbigpOwotICAgICAgIGl0ICE9IGNvZGVjc19vdXQtPmVuZCgpOyArK2l0KSB7Ci0gICAgc2l6ZV90IGZvdW5kID0gaXQtPmZpbmRfZmlyc3Rfb2YoJy4nKTsKLSAgICBpZiAoZm91bmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIGl0LT5yZXNpemUoZm91bmQpOwotICB9Ci19Ci0KLVN1cHBvcnRzVHlwZSBNaW1lVXRpbDo6SXNTdXBwb3J0ZWRNZWRpYUZvcm1hdCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcywKLSAgICBib29sIGlzX2VuY3J5cHRlZCkgY29uc3QgewotICBjb25zdCBzdGQ6OnN0cmluZyBtaW1lX3R5cGVfbG93ZXJfY2FzZSA9IGJhc2U6OlRvTG93ZXJBU0NJSShtaW1lX3R5cGUpOwotICBNZWRpYUZvcm1hdE1hcHBpbmdzOjpjb25zdF9pdGVyYXRvciBpdF9tZWRpYV9mb3JtYXRfbWFwID0KLSAgICAgIG1lZGlhX2Zvcm1hdF9tYXBfLmZpbmQobWltZV90eXBlX2xvd2VyX2Nhc2UpOwotICBpZiAoaXRfbWVkaWFfZm9ybWF0X21hcCA9PSBtZWRpYV9mb3JtYXRfbWFwXy5lbmQoKSkgcmV0dXJuIElzTm90U3VwcG9ydGVkOwotCi0gIGlmIChpdF9tZWRpYV9mb3JtYXRfbWFwLT5zZWNvbmQuZW1wdHkoKSkgewotICAgIC8vIFdlIGdldCBoZXJlIGlmIHRoZSBtaW1ldHlwZSBkb2VzIG5vdCBleHBlY3QgYSBjb2RlY3MgcGFyYW1ldGVyLgotICAgIHJldHVybiAoY29kZWNzLmVtcHR5KCkgJiYgSXNEZWZhdWx0Q29kZWNTdXBwb3J0ZWRMb3dlckNhc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGlzX2VuY3J5cHRlZCkpCi0gICAgICAgICAgICAgICA/IElzU3VwcG9ydGVkCi0gICAgICAgICAgICAgICA6IElzTm90U3VwcG9ydGVkOwotICB9Ci0KLSAgaWYgKGNvZGVjcy5lbXB0eSgpKSB7Ci0gICAgLy8gV2UgZ2V0IGhlcmUgaWYgdGhlIG1pbWV0eXBlIGV4cGVjdHMgdG8gZ2V0IGEgY29kZWNzIHBhcmFtZXRlciwKLSAgICAvLyBidXQgZGlkbid0IGdldCBvbmUuIElmIHxtaW1lX3R5cGVfbG93ZXJfY2FzZXwgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQKLSAgICAvLyBjb2RlYyB0aGUgYmVzdCB3ZSBjYW4gZG8gaXMgc2F5ICJtYXliZSIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaAotICAgIC8vIGluZm9ybWF0aW9uLgotICAgIENvZGVjIGRlZmF1bHRfY29kZWMgPSBJTlZBTElEX0NPREVDOwotICAgIGlmICghR2V0RGVmYXVsdENvZGVjTG93ZXJDYXNlKG1pbWVfdHlwZV9sb3dlcl9jYXNlLCAmZGVmYXVsdF9jb2RlYykpCi0gICAgICByZXR1cm4gTWF5QmVTdXBwb3J0ZWQ7Ci0KLSAgICByZXR1cm4gSXNDb2RlY1N1cHBvcnRlZChkZWZhdWx0X2NvZGVjLCBtaW1lX3R5cGVfbG93ZXJfY2FzZSwgaXNfZW5jcnlwdGVkKQotICAgICAgICAgICAgICAgPyBJc1N1cHBvcnRlZAotICAgICAgICAgICAgICAgOiBJc05vdFN1cHBvcnRlZDsKLSAgfQotCi0gIGlmIChtaW1lX3R5cGVfbG93ZXJfY2FzZSA9PSAidmlkZW8vbXAydCIpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29kZWNzX3RvX2NoZWNrOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZWNzLnNpemUoKTsgKytpKSB7Ci0gICAgICBjb2RlY3NfdG9fY2hlY2sucHVzaF9iYWNrKFRyYW5zbGF0ZUxlZ2FjeUF2YzFDb2RlY0lkcyhjb2RlY3NbaV0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIEFyZVN1cHBvcnRlZENvZGVjcyhpdF9tZWRpYV9mb3JtYXRfbWFwLT5zZWNvbmQsIGNvZGVjc190b19jaGVjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZV9sb3dlcl9jYXNlLCBpc19lbmNyeXB0ZWQpOwotICB9Ci0KLSAgcmV0dXJuIEFyZVN1cHBvcnRlZENvZGVjcyhpdF9tZWRpYV9mb3JtYXRfbWFwLT5zZWNvbmQsIGNvZGVjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lX3R5cGVfbG93ZXJfY2FzZSwgaXNfZW5jcnlwdGVkKTsKLX0KLQotdm9pZCBNaW1lVXRpbDo6UmVtb3ZlUHJvcHJpZXRhcnlNZWRpYVR5cGVzQW5kQ29kZWNzKCkgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3ByaWV0YXJ5X21lZGlhX2NvbnRhaW5lcnNfLnNpemUoKTsgKytpKQotICAgIG1lZGlhX2Zvcm1hdF9tYXBfLmVyYXNlKHByb3ByaWV0YXJ5X21lZGlhX2NvbnRhaW5lcnNfW2ldKTsKLSAgYWxsb3dfcHJvcHJpZXRhcnlfY29kZWNzXyA9IGZhbHNlOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgTWltZVV0aWw6OklzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKAotICAgIENvZGVjIGNvZGVjLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGJvb2wgaXNfZW5jcnlwdGVkLAotICAgIGNvbnN0IFBsYXRmb3JtSW5mbyYgcGxhdGZvcm1faW5mbykgewotICBEQ0hFQ0tfTkUobWltZV90eXBlX2xvd2VyX2Nhc2UsICIiKTsKLQotICAvLyBFbmNyeXB0ZWQgYmxvY2sgc3VwcG9ydCBpcyBuZXZlciBhdmFpbGFibGUgd2l0aG91dCBwbGF0Zm9ybSBkZWNvZGVycy4KLSAgaWYgKGlzX2VuY3J5cHRlZCAmJiAhcGxhdGZvcm1faW5mby5oYXNfcGxhdGZvcm1fZGVjb2RlcnMpIHJldHVybiBmYWxzZTsKLQotICAvLyBOT1RFOiBXZSBkbyBub3QgYWNjb3VudCBmb3IgTWVkaWEgU291cmNlIEV4dGVuc2lvbnMgKE1TRSkgd2l0aGluIHRoZXNlCi0gIC8vIGNoZWNrcyBzaW5jZSBpdCBoYXMgaXRzIG93biBpc1R5cGVTdXBwb3J0ZWQoKSB3aGljaCB3aWxsIGhhbmRsZSBwbGF0Zm9ybQotICAvLyBzcGVjaWZpYyBjb2RlYyByZWplY3Rpb25zLiAgU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNTg3MzAzLgotCi0gIHN3aXRjaCAoY29kZWMpIHsKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlY3MgYXJlIG5ldmVyIHN1cHBvcnRlZC4KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgY2FzZSBJTlZBTElEX0NPREVDOgotICAgIGNhc2UgQUMzOgotICAgIGNhc2UgRUFDMzoKLSAgICBjYXNlIFRIRU9SQToKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBUaGUgcmVtYWluaW5nIGNvZGVjcyBtYXkgYmUgc3VwcG9ydGVkIGRlcGVuZGluZyBvbiBwbGF0Zm9ybSBhYmlsaXRpZXMuCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgY2FzZSBQQ006Ci0gICAgY2FzZSBNUDM6Ci0gICAgY2FzZSBNUEVHNF9BQUM6Ci0gICAgY2FzZSBWT1JCSVM6Ci0gICAgICAvLyBUaGVzZSBjb2RlY3MgYXJlIGFsd2F5cyBzdXBwb3J0ZWQ7IHZpYSBhIHBsYXRmb3JtIGRlY29kZXIgKHdoZW4gdXNlZAotICAgICAgLy8gd2l0aCBNU0UvRU1FKSwgYSBzb2Z0d2FyZSBkZWNvZGVyICh0aGUgdW5pZmllZCBwaXBlbGluZSksIG9yIHdpdGgKLSAgICAgIC8vIE1lZGlhUGxheWVyLgotICAgICAgRENIRUNLKCFpc19lbmNyeXB0ZWQgfHwgcGxhdGZvcm1faW5mby5oYXNfcGxhdGZvcm1fZGVjb2RlcnMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIE1QRUcyX0FBQzoKLSAgICAgIC8vIE1QRUctMiB2YXJpYW50cyBvZiBBQUMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gQW5kcm9pZCB1bmxlc3MgdGhlIHVuaWZpZWQKLSAgICAgIC8vIG1lZGlhIHBpcGVsaW5lIGNhbiBiZSB1c2VkIGFuZCB0aGUgY29udGFpbmVyIGlzIG5vdCBITFMuIFRoZXNlIGNvZGVjcwotICAgICAgLy8gd2lsbCBiZSBkZWNvZGVkIGluIHNvZnR3YXJlLiBTZWUgaHR0cHM6Y3JidWcuY29tLzU0NDI2OCBmb3IgZGV0YWlscy4KLSAgICAgIGlmIChtaW1lX3R5cGVfbG93ZXJfY2FzZSA9PSAiYXBwbGljYXRpb24veC1tcGVndXJsIiB8fAotICAgICAgICAgIG1pbWVfdHlwZV9sb3dlcl9jYXNlID09ICJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybCIpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgcmV0dXJuICFpc19lbmNyeXB0ZWQgJiYgcGxhdGZvcm1faW5mby5pc191bmlmaWVkX21lZGlhX3BpcGVsaW5lX2VuYWJsZWQ7Ci0KLSAgICBjYXNlIE9QVVM6Ci0gICAgICAvLyBJZiBjbGVhciwgdGhlIHVuaWZpZWQgcGlwZWxpbmUgY2FuIGFsd2F5cyBkZWNvZGUgT3B1cyBpbiBzb2Z0d2FyZS4KLSAgICAgIGlmICghaXNfZW5jcnlwdGVkICYmIHBsYXRmb3JtX2luZm8uaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgLy8gT3RoZXJ3aXNlLCBwbGF0Zm9ybSBzdXBwb3J0IGlzIHJlcXVpcmVkLgotICAgICAgaWYgKCFwbGF0Zm9ybV9pbmZvLnN1cHBvcnRzX29wdXMpIHJldHVybiBmYWxzZTsKLQotICAgICAgLy8gTWVkaWFQbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBPcHVzIGluIG9nZyBjb250YWluZXJzLgotICAgICAgaWYgKGJhc2U6OkVuZHNXaXRoKG1pbWVfdHlwZV9sb3dlcl9jYXNlLCAib2dnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIERDSEVDSyghaXNfZW5jcnlwdGVkIHx8IHBsYXRmb3JtX2luZm8uaGFzX3BsYXRmb3JtX2RlY29kZXJzKTsKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBIMjY0OgotICAgICAgLy8gV2hlbiBjb250ZW50IGlzIG5vdCBlbmNyeXB0ZWQgd2UgZmFsbCBiYWNrIHRvIE1lZGlhUGxheWVyLCB0aHVzIHdlCi0gICAgICAvLyBhbHdheXMgc3VwcG9ydCBIMjY0LiBGb3IgRU1FIHdlIG5lZWQgTWVkaWFDb2RlYy4KLSAgICAgIHJldHVybiAhaXNfZW5jcnlwdGVkIHx8IHBsYXRmb3JtX2luZm8uaGFzX3BsYXRmb3JtX2RlY29kZXJzOwotCi0gICAgY2FzZSBIRVZDOgotICAgICAgaWYgKHBsYXRmb3JtX2luZm8uaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkICYmCi0gICAgICAgICAgIXBsYXRmb3JtX2luZm8uaGFzX3BsYXRmb3JtX2RlY29kZXJzKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgICAgIC8vIEhFVkMvSC4yNjUgaXMgc3VwcG9ydGVkIGluIExvbGxpcG9wKyAoQVBJIExldmVsIDIxKSwgYWNjb3JkaW5nIHRvCi0gICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL21lZGlhL01lZGlhRm9ybWF0Lmh0bWwKLSAgICAgIHJldHVybiBiYXNlOjphbmRyb2lkOjpCdWlsZEluZm86OkdldEluc3RhbmNlKCktPnNka19pbnQoKSA+PSAyMTsKLSNlbHNlCi0gICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotCi0gICAgY2FzZSBWUDg6Ci0gICAgICAvLyBJZiBjbGVhciwgdGhlIHVuaWZpZWQgcGlwZWxpbmUgY2FuIGFsd2F5cyBkZWNvZGUgVlA4IGluIHNvZnR3YXJlLgotICAgICAgaWYgKCFpc19lbmNyeXB0ZWQgJiYgcGxhdGZvcm1faW5mby5pc191bmlmaWVkX21lZGlhX3BpcGVsaW5lX2VuYWJsZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICBpZiAoaXNfZW5jcnlwdGVkKSByZXR1cm4gcGxhdGZvcm1faW5mby5oYXNfcGxhdGZvcm1fdnA4X2RlY29kZXI7Ci0KLSAgICAgIC8vIE1lZGlhUGxheWVyIGNhbiBhbHdheXMgcGxheSBWUDguIE5vdGU6IFRoaXMgaXMgaW5jb3JyZWN0IGZvciBNU0UsIGJ1dAotICAgICAgLy8gTVNFIGRvZXMgbm90IHVzZSB0aGlzIGNvZGUuIGh0dHA6Ly9jcmJ1Zy5jb20vNTg3MzAzLgotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIFZQOTogewotICAgICAgLy8gSWYgY2xlYXIsIHRoZSB1bmlmaWVkIHBpcGVsaW5lIGNhbiBhbHdheXMgZGVjb2RlIFZQOSBpbiBzb2Z0d2FyZS4KLSAgICAgIGlmICghaXNfZW5jcnlwdGVkICYmIHBsYXRmb3JtX2luZm8uaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgaWYgKCFwbGF0Zm9ybV9pbmZvLmhhc19wbGF0Zm9ybV92cDlfZGVjb2RlcikgcmV0dXJuIGZhbHNlOwotCi0gICAgICAvLyBFbmNyeXB0ZWQgY29udGVudCBpcyBkZW11eGVkIHNvIHRoZSBjb250YWluZXIgaXMgaXJyZWxldmFudC4KLSAgICAgIGlmIChpc19lbmNyeXB0ZWQpIHJldHVybiB0cnVlOwotCi0gICAgICAvLyBNZWRpYVBsYXllciBvbmx5IHN1cHBvcnRzIFZQOSBpbiBXZWJNLgotICAgICAgcmV0dXJuIG1pbWVfdHlwZV9sb3dlcl9jYXNlID09ICJ2aWRlby93ZWJtIjsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWltZVV0aWw6OlN0cmluZ1RvQ29kZWMoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZV9sb3dlcl9jYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsIENvZGVjKiBjb2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfYW1iaWd1b3VzLCBWaWRlb0NvZGVjUHJvZmlsZSogb3V0X3Byb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIG91dF9sZXZlbCwgYm9vbCBpc19lbmNyeXB0ZWQpIGNvbnN0IHsKLSAgRENIRUNLKG91dF9wcm9maWxlKTsKLSAgRENIRUNLKG91dF9sZXZlbCk7Ci0gICpvdXRfcHJvZmlsZSA9IFZJREVPX0NPREVDX1BST0ZJTEVfVU5LTk9XTjsKLSAgKm91dF9sZXZlbCA9IDA7Ci0KLSAgU3RyaW5nVG9Db2RlY01hcHBpbmdzOjpjb25zdF9pdGVyYXRvciBpdHIgPQotICAgICAgc3RyaW5nX3RvX2NvZGVjX21hcF8uZmluZChjb2RlY19pZCk7Ci0gIGlmIChpdHIgIT0gc3RyaW5nX3RvX2NvZGVjX21hcF8uZW5kKCkpIHsKLSAgICAqY29kZWMgPSBpdHItPnNlY29uZC5jb2RlYzsKLSAgICAqaXNfYW1iaWd1b3VzID0gaXRyLT5zZWNvbmQuaXNfYW1iaWd1b3VzOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gSWYgfGNvZGVjX2lkfCBpcyBub3QgaW4gfHN0cmluZ190b19jb2RlY19tYXBffCwgdGhlbiB3ZSBhc3N1bWUgdGhhdCBpdCBpcwotICAvLyBlaXRoZXIgVlA5LCBILjI2NCBvciBIRVZDL0guMjY1IGNvZGVjIElEIGJlY2F1c2UgY3VycmVudGx5IHRob3NlIGFyZSB0aGUKLSAgLy8gb25seSBvbmVzIHRoYXQgYXJlIG5vdCBhZGRlZCB0byB0aGUgfHN0cmluZ190b19jb2RlY19tYXBffCBhbmQgcmVxdWlyZQotICAvLyBwYXJzaW5nLgotICBpZiAoUGFyc2VWcDlDb2RlY0lEKG1pbWVfdHlwZV9sb3dlcl9jYXNlLCBjb2RlY19pZCwgb3V0X3Byb2ZpbGUsIG91dF9sZXZlbCkpIHsKLSAgICAqY29kZWMgPSBNaW1lVXRpbDo6VlA5OwotICAgIHN3aXRjaCAoKm91dF9wcm9maWxlKSB7Ci0gICAgICBjYXNlIFZQOVBST0ZJTEVfUFJPRklMRTA6Ci0gICAgICAgIC8vIFByb2ZpbGUgMCBzaG91bGQgYWx3YXlzIGJlIHN1cHBvcnRlZCBpZiBWUDkgaXMgc3VwcG9ydGVkLgotICAgICAgICAqaXNfYW1iaWd1b3VzID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBpZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBzdXBwb3J0cyB0aGVzZSBwcm9maWxlcy4KLSAgICAgICAgLy8gTmVlZCB0byBhZGQgcGxhdGZvcm0gbGV2ZWwgcXVlcnlpbmcgdG8gZ2V0IHN1cHBvcnRlZCBwcm9maWxlcwotICAgICAgICAvLyAoY3JidWcvNjA0NTY2KS4KLSAgICAgICAgKmlzX2FtYmlndW91cyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlmIChQYXJzZUFWQ0NvZGVjSWQoY29kZWNfaWQsIG91dF9wcm9maWxlLCBvdXRfbGV2ZWwpKSB7Ci0gICAgKmNvZGVjID0gTWltZVV0aWw6OkgyNjQ7Ci0gICAgc3dpdGNoICgqb3V0X3Byb2ZpbGUpIHsKLS8vIEhJR0gxMFBST0ZJTEUgaXMgc3VwcG9ydGVkIHRocm91Z2ggZmFsbGJhY2sgdG8gdGhlIGZmbXBlZyBkZWNvZGVyCi0vLyB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9uIEFuZHJvaWQsIG9yIGlmIEZGTVBFRyBpcyBub3QgdXNlZC4KLSNpZiAhZGVmaW5lZChNRURJQV9ESVNBQkxFX0ZGTVBFRykgJiYgIWRlZmluZWQoT1NfQU5EUk9JRCkKLSAgICAgIGNhc2UgSDI2NFBST0ZJTEVfSElHSDEwUFJPRklMRToKLSAgICAgICAgaWYgKGlzX2VuY3J5cHRlZCkgewotICAgICAgICAgIC8vIEZGbXBlZyBpcyBub3QgZ2VuZXJhbGx5IHVzZWQgZm9yIGVuY3J5cHRlZCB2aWRlb3MsIHNvIHdlIGRvIG5vdAotICAgICAgICAgIC8vIGtub3cgd2hldGhlciAxMC1iaXQgaXMgc3VwcG9ydGVkLgotICAgICAgICAgICppc19hbWJpZ3VvdXMgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0vLyBGYWxsIHRocm91Z2guCi0jZW5kaWYKLQotICAgICAgY2FzZSBIMjY0UFJPRklMRV9CQVNFTElORToKLSAgICAgIGNhc2UgSDI2NFBST0ZJTEVfTUFJTjoKLSAgICAgIGNhc2UgSDI2NFBST0ZJTEVfSElHSDoKLSAgICAgICAgKmlzX2FtYmlndW91cyA9ICFJc1ZhbGlkSDI2NExldmVsKCpvdXRfbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICppc19hbWJpZ3VvdXMgPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlmIChQYXJzZUhFVkNDb2RlY0lkKGNvZGVjX2lkLCBvdXRfcHJvZmlsZSwgb3V0X2xldmVsKSkgewotICAgICpjb2RlYyA9IE1pbWVVdGlsOjpIRVZDOwotICAgICppc19hbWJpZ3VvdXMgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIERWTE9HKDQpIDw8IF9fZnVuY19fIDw8ICI6IFVucmVjb2duaXplZCBjb2RlYyBpZCAiIDw8IGNvZGVjX2lkOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWltZVV0aWw6OklzQ29kZWNTdXBwb3J0ZWQoQ29kZWMgY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGVfbG93ZXJfY2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19lbmNyeXB0ZWQpIGNvbnN0IHsKLSAgRENIRUNLX05FKGNvZGVjLCBJTlZBTElEX0NPREVDKTsKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgaWYgKCFJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybShjb2RlYywgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGlzX2VuY3J5cHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9pbmZvXykpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiBhbGxvd19wcm9wcmlldGFyeV9jb2RlY3NfIHx8ICFJc0NvZGVjUHJvcHJpZXRhcnkoY29kZWMpOwotfQotCi1ib29sIE1pbWVVdGlsOjpJc0NvZGVjUHJvcHJpZXRhcnkoQ29kZWMgY29kZWMpIGNvbnN0IHsKLSAgc3dpdGNoIChjb2RlYykgewotICAgIGNhc2UgSU5WQUxJRF9DT0RFQzoKLSAgICBjYXNlIEFDMzoKLSAgICBjYXNlIEVBQzM6Ci0gICAgY2FzZSBNUDM6Ci0gICAgY2FzZSBNUEVHMl9BQUM6Ci0gICAgY2FzZSBNUEVHNF9BQUM6Ci0gICAgY2FzZSBIMjY0OgotICAgIGNhc2UgSEVWQzoKLSAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBQQ006Ci0gICAgY2FzZSBWT1JCSVM6Ci0gICAgY2FzZSBPUFVTOgotICAgIGNhc2UgVlA4OgotICAgIGNhc2UgVlA5OgotICAgIGNhc2UgVEhFT1JBOgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTWltZVV0aWw6OkdldERlZmF1bHRDb2RlY0xvd2VyQ2FzZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWMqIGRlZmF1bHRfY29kZWMpIGNvbnN0IHsKLSAgaWYgKG1pbWVfdHlwZV9sb3dlcl9jYXNlID09ICJhdWRpby9tcGVnIiB8fAotICAgICAgbWltZV90eXBlX2xvd2VyX2Nhc2UgPT0gImF1ZGlvL21wMyIgfHwKLSAgICAgIG1pbWVfdHlwZV9sb3dlcl9jYXNlID09ICJhdWRpby94LW1wMyIpIHsKLSAgICAqZGVmYXVsdF9jb2RlYyA9IE1pbWVVdGlsOjpNUDM7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAobWltZV90eXBlX2xvd2VyX2Nhc2UgPT0gImF1ZGlvL2FhYyIpIHsKLSAgICAqZGVmYXVsdF9jb2RlYyA9IE1pbWVVdGlsOjpNUEVHNF9BQUM7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTWltZVV0aWw6OklzRGVmYXVsdENvZGVjU3VwcG9ydGVkTG93ZXJDYXNlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGVfbG93ZXJfY2FzZSwgYm9vbCBpc19lbmNyeXB0ZWQpIGNvbnN0IHsKLSAgQ29kZWMgZGVmYXVsdF9jb2RlYyA9IElOVkFMSURfQ09ERUM7Ci0gIGlmICghR2V0RGVmYXVsdENvZGVjTG93ZXJDYXNlKG1pbWVfdHlwZV9sb3dlcl9jYXNlLCAmZGVmYXVsdF9jb2RlYykpCi0gICAgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gSXNDb2RlY1N1cHBvcnRlZChkZWZhdWx0X2NvZGVjLCBtaW1lX3R5cGVfbG93ZXJfY2FzZSwgaXNfZW5jcnlwdGVkKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbF9pbnRlcm5hbC5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmZDhkMjAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX01JTUVfVVRJTF9JTlRFUk5BTF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9NSU1FX1VUSUxfSU5URVJOQUxfSF8KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jb250YWluZXJzL2hhc2hfdGFibGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fY29kZWNzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLS8vIEludGVybmFsIHV0aWxpdHkgY2xhc3MgZm9yIGhhbmRsaW5nIG1pbWUgdHlwZXMuICBTaG91bGQgb25seSBiZSBpbnZva2VkIGJ5Ci0vLyB0ZXN0cyBhbmQgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gbWltZV91dGlsLmNjIC0tIE5PVCBmb3IgZGlyZWN0IHVzZSBieSBvdGhlcnMuCi1jbGFzcyBNRURJQV9FWFBPUlQgTWltZVV0aWwgewotIHB1YmxpYzoKLSAgTWltZVV0aWwoKTsKLSAgfk1pbWVVdGlsKCk7Ci0KLSAgZW51bSBDb2RlYyB7Ci0gICAgSU5WQUxJRF9DT0RFQywKLSAgICBQQ00sCi0gICAgTVAzLAotICAgIEFDMywKLSAgICBFQUMzLAotICAgIE1QRUcyX0FBQywKLSAgICBNUEVHNF9BQUMsCi0gICAgVk9SQklTLAotICAgIE9QVVMsCi0gICAgSDI2NCwKLSAgICBIRVZDLAotICAgIFZQOCwKLSAgICBWUDksCi0gICAgVEhFT1JBLAotICAgIExBU1RfQ09ERUMgPSBUSEVPUkEKLSAgfTsKLQotICAvLyBQbGF0Zm9ybSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4gIENvbnRyb2xzIHdoaWNoIGNvZGVjcyBhcmUgc3VwcG9ydGVkIGF0Ci0gIC8vIHJ1bnRpbWUuICBBbHNvIHVzZWQgYnkgdGVzdHMgdG8gc2ltdWxhdGUgcGxhdGZvcm0gZGlmZmVyZW5jZXMuCi0gIHN0cnVjdCBQbGF0Zm9ybUluZm8gewotICAgIGJvb2wgaGFzX3BsYXRmb3JtX2RlY29kZXJzOwotCi0gICAgYm9vbCBoYXNfcGxhdGZvcm1fdnA4X2RlY29kZXI7Ci0gICAgYm9vbCBoYXNfcGxhdGZvcm1fdnA5X2RlY29kZXI7Ci0gICAgYm9vbCBzdXBwb3J0c19vcHVzOwotCi0gICAgYm9vbCBpc191bmlmaWVkX21lZGlhX3BpcGVsaW5lX2VuYWJsZWQ7Ci0KLSAgICBQbGF0Zm9ybUluZm8oKQotICAgICAgICA6IGhhc19wbGF0Zm9ybV9kZWNvZGVycyhmYWxzZSksCi0gICAgICAgICAgaGFzX3BsYXRmb3JtX3ZwOF9kZWNvZGVyKGZhbHNlKSwKLSAgICAgICAgICBoYXNfcGxhdGZvcm1fdnA5X2RlY29kZXIoZmFsc2UpLAotICAgICAgICAgIHN1cHBvcnRzX29wdXMoZmFsc2UpLAotICAgICAgICAgIGlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZChmYWxzZSkge30KLSAgfTsKLQotICAvLyBTZWUgbWltZV91dGlsLmggZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UgbWV0aG9kcy4KLSAgYm9vbCBJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSkgY29uc3Q7Ci0gIHZvaWQgUGFyc2VDb2RlY1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBjb2RlY3Nfb3V0LCBib29sIHN0cmlwKTsKLSAgU3VwcG9ydHNUeXBlIElzU3VwcG9ydGVkTWVkaWFGb3JtYXQoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZW5jcnlwdGVkKSBjb25zdDsKLQotICB2b2lkIFJlbW92ZVByb3ByaWV0YXJ5TWVkaWFUeXBlc0FuZENvZGVjcygpOwotCi0gIC8vIENoZWNrcyBzcGVjaWFsIHBsYXRmb3JtIHNwZWNpZmljIGNvZGVjIHJlc3RyaWN0aW9ucy4gUmV0dXJucyB0cnVlIGlmCi0gIC8vIHxjb2RlY3wgaXMgc3VwcG9ydGVkIHdoZW4gY29udGFpbmVkIGluIHxtaW1lX3R5cGVfbG93ZXJfY2FzZXwuCi0gIC8vIHxpc19lbmNyeXB0ZWR8IG1lYW5zIHRoZSBjb2RlYyB3aWxsIGJlIHVzZWQgd2l0aCBlbmNyeXB0ZWQgYmxvY2tzLgotICAvLyB8cGxhdGZvcm1faW5mb3wgZGVzY3JpYmVzIHRoZSBhdmFpbGFiaWxpdHkgb2YgdmFyaW91cyBwbGF0Zm9ybSBmZWF0dXJlczsKLSAgLy8gc2VlIFBsYXRmb3JtSW5mbyBmb3IgbW9yZSBkZXRhaWxzLgotICBzdGF0aWMgYm9vbCBJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybSgKLSAgICAgIENvZGVjIGNvZGVjLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsIGJvb2wgaXNfZW5jcnlwdGVkLAotICAgICAgY29uc3QgUGxhdGZvcm1JbmZvJiBwbGF0Zm9ybV9pbmZvKTsKLQotIHByaXZhdGU6Ci0gIHR5cGVkZWYgYmFzZTo6aGFzaF9zZXQ8aW50PiBDb2RlY1NldDsKLSAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQ29kZWNTZXQ+IE1lZGlhRm9ybWF0TWFwcGluZ3M7Ci0gIHN0cnVjdCBDb2RlY0VudHJ5IHsKLSAgICBDb2RlY0VudHJ5KCkgOiBjb2RlYyhJTlZBTElEX0NPREVDKSwgaXNfYW1iaWd1b3VzKHRydWUpIHt9Ci0gICAgQ29kZWNFbnRyeShDb2RlYyBjLCBib29sIGFtYmlndW91cykgOiBjb2RlYyhjKSwgaXNfYW1iaWd1b3VzKGFtYmlndW91cykge30KLSAgICBDb2RlYyBjb2RlYzsKLSAgICBib29sIGlzX2FtYmlndW91czsKLSAgfTsKLSAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgQ29kZWNFbnRyeT4gU3RyaW5nVG9Db2RlY01hcHBpbmdzOwotCi0gIC8vIEluaXRpYWxpemVzIHRoZSBzdXBwb3J0ZWQgbWVkaWEgdHlwZXMgaW50byBoYXNoIHNldHMgZm9yIGZhc3RlciBsb29rdXAuCi0gIHZvaWQgSW5pdGlhbGl6ZU1pbWVUeXBlTWFwcygpOwotCi0gIC8vIEluaXRpYWxpemVzIHRoZSBzdXBwb3J0ZWQgbWVkaWEgZm9ybWF0cyAofG1lZGlhX2Zvcm1hdF9tYXBffCkuCi0gIHZvaWQgQWRkU3VwcG9ydGVkTWVkaWFGb3JtYXRzKCk7Ci0KLSAgLy8gQWRkcyB8bWltZV90eXBlfCB3aXRoIHRoZSBzcGVjaWZpZWQgY29kZWNzIHRvIHxtZWRpYV9mb3JtYXRfbWFwX3wuCi0gIHZvaWQgQWRkQ29udGFpbmVyV2l0aENvZGVjcyhjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29kZWNTZXQmIGNvZGVjc19saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19wcm9wcmlldGFyeV9taW1lX3R5cGUpOwotCi0gIC8vIFJldHVybnMgSXNTdXBwb3J0ZWQgaWYgYWxsIGNvZGVjIElEcyBpbiB8Y29kZWNzfCBhcmUgdW5hbWJpZ3VvdXMgYW5kIGFyZQotICAvLyBzdXBwb3J0ZWQgaW4gfG1pbWVfdHlwZV9sb3dlcl9jYXNlfC4gTWF5QmVTdXBwb3J0ZWQgaXMgcmV0dXJuZWQgaWYgYXQgbGVhc3QKLSAgLy8gb25lIGNvZGVjIElEIGluIHxjb2RlY3N8IGlzIGFtYmlndW91cyBidXQgYWxsIHRoZSBjb2RlY3MgYXJlIHN1cHBvcnRlZC4KLSAgLy8gSXNOb3RTdXBwb3J0ZWQgaXMgcmV0dXJuZWQgaWYgfG1pbWVfdHlwZV9sb3dlcl9jYXNlfCBpcyBub3Qgc3VwcG9ydGVkIG9yIGF0Ci0gIC8vIGxlYXN0IG9uZSBpcyBub3Qgc3VwcG9ydGVkIGluIHxtaW1lX3R5cGVfbG93ZXJfY2FzZXwuIHxpc19lbmNyeXB0ZWR8IG1lYW5zCi0gIC8vIHRoZSBjb2RlYyB3aWxsIGJlIHVzZWQgd2l0aCBlbmNyeXB0ZWQgYmxvY2tzLgotICBTdXBwb3J0c1R5cGUgQXJlU3VwcG9ydGVkQ29kZWNzKGNvbnN0IENvZGVjU2V0JiBzdXBwb3J0ZWRfY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGVfbG93ZXJfY2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2VuY3J5cHRlZCkgY29uc3Q7Ci0KLSAgLy8gQ29udmVydHMgYSBjb2RlYyBJRCBpbnRvIGFuIENvZGVjIGVudW0gdmFsdWUgYW5kIGluZGljYXRlcwotICAvLyB3aGV0aGVyIHRoZSBjb252ZXJzaW9uIHdhcyBhbWJpZ3VvdXMuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1ldGhvZCB3YXMgYWJsZSB0byBtYXAgfGNvZGVjX2lkfCB3aXRoCi0gIC8vIHxtaW1lX3R5cGVfbG93ZXJfY2FzZXwgdG8gYSBzcGVjaWZpYyBDb2RlYyBlbnVtIHZhbHVlLiB8Y29kZWN8IGFuZAotICAvLyB8aXNfYW1iaWd1b3VzfCBhcmUgb25seSB2YWxpZCBpZiB0cnVlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlaXIgdmFsdWUgaXMKLSAgLy8gdW5kZWZpbmVkIGFmdGVyIHRoZSBjYWxsLgotICAvLyB8aXNfYW1iaWd1b3VzfCBpcyB0cnVlIGlmIHxjb2RlY19pZHwgZGlkIG5vdCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0bwotICAvLyB1bmFtYmlndW91c2x5IGRldGVybWluZSB0aGUgcHJvcGVyIENvZGVjIGVudW0gdmFsdWUuIElmIHxpc19hbWJpZ3VvdXN8Ci0gIC8vIGlzIHRydWUgfGNvZGVjfCBjb250YWlucyB0aGUgYmVzdCBndWVzcyBmb3IgdGhlIGludGVuZGVkIENvZGVjIGVudW0gdmFsdWUuCi0gIC8vIHxwcm9maWxlfCBhbmQgfGxldmVsfCBpbmRpY2F0ZSB2aWRlbyBjb2RlYyBwcm9maWxlIGFuZCBsZXZlbCAodW51c2VkIGZvcgotICAvLyBhdWRpbyBjb2RlY3MpLgotICAvLyB8aXNfZW5jcnlwdGVkfCBtZWFucyB0aGUgY29kZWMgd2lsbCBiZSB1c2VkIHdpdGggZW5jcnlwdGVkIGJsb2Nrcy4KLSAgYm9vbCBTdHJpbmdUb0NvZGVjKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGVfbG93ZXJfY2FzZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwgQ29kZWMqIGNvZGVjLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfYW1iaWd1b3VzLCBWaWRlb0NvZGVjUHJvZmlsZSogb3V0X3Byb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBvdXRfbGV2ZWwsIGJvb2wgaXNfZW5jcnlwdGVkKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgfGNvZGVjfCBpcyBzdXBwb3J0ZWQgd2hlbiBjb250YWluZWQgaW4KLSAgLy8gfG1pbWVfdHlwZV9sb3dlcl9jYXNlfC4gTm90ZTogVGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvcgotICAvLyBwcm9wcmlldGFyeSBjb2RlY3MgaWYgfGFsbG93X3Byb3ByaWV0YXJ5X2NvZGVjc198IGlzIHNldCB0byBmYWxzZS4KLSAgLy8gfGlzX2VuY3J5cHRlZHwgbWVhbnMgdGhlIGNvZGVjIHdpbGwgYmUgdXNlZCB3aXRoIGVuY3J5cHRlZCBibG9ja3MuCi0gIGJvb2wgSXNDb2RlY1N1cHBvcnRlZChDb2RlYyBjb2RlYywgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZV9sb3dlcl9jYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19lbmNyeXB0ZWQpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8Y29kZWN8IHJlZmVycyB0byBhIHByb3ByaWV0YXJ5IGNvZGVjLgotICBib29sIElzQ29kZWNQcm9wcmlldGFyeShDb2RlYyBjb2RlYykgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGFuZCBzZXRzIHwqZGVmYXVsdF9jb2RlY3wgaWYgfG1pbWVfdHlwZXwgaGFzIGEgIGRlZmF1bHQgY29kZWMKLSAgLy8gYXNzb2NpYXRlZCB3aXRoIGl0LiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZSBhbmQgdGhlIHZhbHVlIG9mCi0gIC8vIHwqZGVmYXVsdF9jb2RlY3wgaXMgdW5kZWZpbmVkLgotICBib29sIEdldERlZmF1bHRDb2RlY0xvd2VyQ2FzZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjKiBkZWZhdWx0X2NvZGVjKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgfG1pbWVfdHlwZV9sb3dlcl9jYXNlfCBoYXMgYSBkZWZhdWx0IGNvZGVjIGFzc29jaWF0ZWQgd2l0aAotICAvLyBpdCBhbmQgSXNDb2RlY1N1cHBvcnRlZCgpIHJldHVybnMgdHJ1ZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGNvZGVjLgotICAvLyB8aXNfZW5jcnlwdGVkfCBtZWFucyB0aGUgY29kZWMgd2lsbCBiZSB1c2VkIHdpdGggZW5jcnlwdGVkIGJsb2Nrcy4KLSAgYm9vbCBJc0RlZmF1bHRDb2RlY1N1cHBvcnRlZExvd2VyQ2FzZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlX2xvd2VyX2Nhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19lbmNyeXB0ZWQpIGNvbnN0OwotCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICAvLyBJbmRpY2F0ZXMgdGhlIHN1cHBvcnQgb2YgdmFyaW91cyBjb2RlY3Mgd2l0aGluIHRoZSBwbGF0Zm9ybS4KLSAgUGxhdGZvcm1JbmZvIHBsYXRmb3JtX2luZm9fOwotI2VuZGlmCi0KLSAgLy8gQSBtYXAgb2YgbWltZV90eXBlcyBhbmQgaGFzaCBtYXAgb2YgdGhlIHN1cHBvcnRlZCBjb2RlY3MgZm9yIHRoZSBtaW1lX3R5cGUuCi0gIE1lZGlhRm9ybWF0TWFwcGluZ3MgbWVkaWFfZm9ybWF0X21hcF87Ci0KLSAgLy8gTGlzdCBvZiBwcm9wcmlldGFyeSBjb250YWluZXJzIGluIHxtZWRpYV9mb3JtYXRfbWFwX3wuCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwcm9wcmlldGFyeV9tZWRpYV9jb250YWluZXJzXzsKLSAgLy8gV2hldGhlciBwcm9wcmlldGFyeSBjb2RlYyBzdXBwb3J0IHNob3VsZCBiZSBhZHZlcnRpc2VkIHRvIGNhbGxlcnMuCi0gIGJvb2wgYWxsb3dfcHJvcHJpZXRhcnlfY29kZWNzXzsKLQotICAvLyBMb29rdXAgdGFibGUgZm9yIHN0cmluZyBjb21wYXJlIGJhc2VkIHN0cmluZyAtPiBDb2RlYyBtYXBwaW5ncy4KLSAgU3RyaW5nVG9Db2RlY01hcHBpbmdzIHN0cmluZ190b19jb2RlY19tYXBfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNaW1lVXRpbCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01JTUVfVVRJTF9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTljOGI5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWwuaCIKLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfc3BsaXQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5ncHJpbnRmLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL21lZGlhX2ZlYXR1cmVzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0jaW5jbHVkZSAiYmFzZS9hbmRyb2lkL2J1aWxkX2luZm8uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi0vLyBNSU1FIHR5cGUgZm9yIHVzZSB3aXRoIElzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKCkgdGVzdDsgdHlwZSBpcyBpZ25vcmVkIGluCi0vLyBhbGwgY2FzZXMgZXhjZXB0IGZvciB3aGVuIHBhaXJlZCB3aXRoIHRoZSBPcHVzIGNvZGVjLgotY29uc3QgY2hhciBrVGVzdE1pbWVUeXBlW10gPSAiZm9vL2ZvbyI7Ci0KLS8vIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbXVsdGktdmFsdWUgdmVjdG9yIG9mIHxrVGVzdFN0YXRlc3wgaWYKLS8vIHx0ZXN0X2FsbF92YWx1ZXN8IGlzIHRydWUgb3IgaWYgZmFsc2UsIGEgc2luZ2xlIHZhbHVlIHZlY3RvciBjb250YWluaW5nCi0vLyB8c2luZ2xlX3ZhbHVlfC4KLXN0YXRpYyBzdGQ6OnZlY3Rvcjxib29sPiBDcmVhdGVUZXN0VmVjdG9yKGJvb2wgdGVzdF9hbGxfdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaW5nbGVfdmFsdWUpIHsKLSAgY29uc3QgYm9vbCBrVGVzdFN0YXRlc1tdID0ge3RydWUsIGZhbHNlfTsKLSAgaWYgKHRlc3RfYWxsX3ZhbHVlcykKLSAgICByZXR1cm4gc3RkOjp2ZWN0b3I8Ym9vbD4oa1Rlc3RTdGF0ZXMsIGtUZXN0U3RhdGVzICsgYXJyYXlzaXplKGtUZXN0U3RhdGVzKSk7Ci0gIHJldHVybiBzdGQ6OnZlY3Rvcjxib29sPigxLCBzaW5nbGVfdmFsdWUpOwotfQotCi0vLyBIZWxwZXIgbWV0aG9kIGZvciBydW5uaW5nIElzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKCkgdGVzdHMgdGhhdCB3aWxsCi0vLyBpdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmxlIGZpZWxkIHZhbHVlcyBmb3IgYSBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvIHN0cnVjdC4KLS8vCi0vLyBUbyByZXF1ZXN0IGEgZmllbGQgYmUgdmFyaWVkLCBzZXQgaXRzIHZhbHVlIHRvIHRydWUgaW4gdGhlIHxzdGF0ZXNfdG9fdmFyeXwKLS8vIHN0cnVjdC4gIElmIGZhbHNlLCB0aGUgb25seSB2YWx1ZSB0ZXN0ZWQgd2lsbCBiZSB0aGUgZmllbGQgdmFsdWUgZnJvbQotLy8gfHRlc3Rfc3RhdGVzfC4KLS8vCi0vLyB8dGVzdF9mdW5jfCBzaG91bGQgaGF2ZSB0aGUgc2lnbmF0dXJlIDx2b2lkKGNvbnN0IE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8mLAotLy8gTWltZVV0aWw6OkNvZGVjKT4uCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVGVzdENhbGxiYWNrPgotc3RhdGljIHZvaWQgUnVuQ29kZWNTdXBwb3J0VGVzdChjb25zdCBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvJiBzdGF0ZXNfdG9fdmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyYgdGVzdF9zdGF0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDYWxsYmFjayB0ZXN0X2Z1bmMpIHsKLSNkZWZpbmUgTUFLRV9URVNUX1ZFQ1RPUihuYW1lKSAgICAgIFwKLSAgc3RkOjp2ZWN0b3I8Ym9vbD4gbmFtZSMjX3N0YXRlcyA9IFwKLSAgICAgIENyZWF0ZVRlc3RWZWN0b3Ioc3RhdGVzX3RvX3ZhcnkubmFtZSwgdGVzdF9zdGF0ZXMubmFtZSkKLQotICAvLyBTdHVmZiBzdGF0ZXMgdG8gdGVzdCBpbnRvIHZlY3RvcnMgZm9yIGVhc3kgZm9yX2VhY2goKSBpdGVyYXRpb24uCi0gIE1BS0VfVEVTVF9WRUNUT1IoaGFzX3BsYXRmb3JtX2RlY29kZXJzKTsKLSAgTUFLRV9URVNUX1ZFQ1RPUihoYXNfcGxhdGZvcm1fdnA4X2RlY29kZXIpOwotICBNQUtFX1RFU1RfVkVDVE9SKGhhc19wbGF0Zm9ybV92cDlfZGVjb2Rlcik7Ci0gIE1BS0VfVEVTVF9WRUNUT1Ioc3VwcG9ydHNfb3B1cyk7Ci0gIE1BS0VfVEVTVF9WRUNUT1IoaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkKTsKLSN1bmRlZiBNQUtFX1RFU1RfVkVDVE9SCi0KLSAgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyBpbmZvOwotCi0jZGVmaW5lIFJVTl9URVNUX1ZFQ1RPUihuYW1lKSAgICAgICAgICAgICAgICAgICBcCi0gIHNpemVfdCBuYW1lIyNfaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIGZvciAoaW5mby5uYW1lID0gbmFtZSMjX3N0YXRlc1tuYW1lIyNfaW5kZXhdOyBcCi0gICAgICAgbmFtZSMjX2luZGV4IDwgbmFtZSMjX3N0YXRlcy5zaXplKCk7ICsrbmFtZSMjX2luZGV4KQotCi0gIFJVTl9URVNUX1ZFQ1RPUihoYXNfcGxhdGZvcm1fZGVjb2RlcnMpIHsKLSAgICBSVU5fVEVTVF9WRUNUT1IoaGFzX3BsYXRmb3JtX3ZwOF9kZWNvZGVyKSB7Ci0gICAgICBSVU5fVEVTVF9WRUNUT1IoaGFzX3BsYXRmb3JtX3ZwOV9kZWNvZGVyKSB7Ci0gICAgICAgIFJVTl9URVNUX1ZFQ1RPUihzdXBwb3J0c19vcHVzKSB7Ci0gICAgICAgICAgUlVOX1RFU1RfVkVDVE9SKGlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCkgewotICAgICAgICAgICAgZm9yIChpbnQgY29kZWMgPSBNaW1lVXRpbDo6SU5WQUxJRF9DT0RFQzsKLSAgICAgICAgICAgICAgICAgY29kZWMgPD0gTWltZVV0aWw6OkxBU1RfQ09ERUM7ICsrY29kZWMpIHsKLSAgICAgICAgICAgICAgU0NPUEVEX1RSQUNFKGJhc2U6OlN0cmluZ1ByaW50ZigKLSAgICAgICAgICAgICAgICAgICJoYXNfcGxhdGZvcm1fZGVjb2RlcnM9JWQsIGhhc19wbGF0Zm9ybV92cDhfZGVjb2Rlcj0lZCwgIgotICAgICAgICAgICAgICAgICAgInN1cHBvcnRzX29wdXM9JWQsICIKLSAgICAgICAgICAgICAgICAgICJoYXNfcGxhdGZvcm1fdnA5X2RlY29kZXI9JWQsICIKLSAgICAgICAgICAgICAgICAgICJpc191bmlmaWVkX21lZGlhX3BpcGVsaW5lX2VuYWJsZWQ9JWQsICIKLSAgICAgICAgICAgICAgICAgICJjb2RlYz0lZCIsCi0gICAgICAgICAgICAgICAgICBpbmZvLmhhc19wbGF0Zm9ybV9kZWNvZGVycywgaW5mby5oYXNfcGxhdGZvcm1fdnA4X2RlY29kZXIsCi0gICAgICAgICAgICAgICAgICBpbmZvLnN1cHBvcnRzX29wdXMsIGluZm8uaGFzX3BsYXRmb3JtX3ZwOV9kZWNvZGVyLAotICAgICAgICAgICAgICAgICAgaW5mby5pc191bmlmaWVkX21lZGlhX3BpcGVsaW5lX2VuYWJsZWQsIGNvZGVjKSk7Ci0gICAgICAgICAgICAgIHRlc3RfZnVuYyhpbmZvLCBzdGF0aWNfY2FzdDxNaW1lVXRpbDo6Q29kZWM+KGNvZGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0jdW5kZWYgUlVOX1RFU1RfVkVDVE9SCi19Ci0KLS8vIEhlbHBlciBtZXRob2QgZm9yIGdlbmVyYXRpbmcgdGhlIHxzdGF0ZXNfdG9fdmFyeXwgdmFsdWUgdXNlZCBieQotLy8gUnVuUGxhdGZvcm1Db2RlY1Rlc3QoKS4gTWFya3MgYWxsIGZpZWxkcyB0byBiZSB2YXJpZWQuCi1zdGF0aWMgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyBWYXJ5QWxsRmllbGRzKCkgewotICBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvIHN0YXRlc190b192YXJ5OwotICBzdGF0ZXNfdG9fdmFyeS5oYXNfcGxhdGZvcm1fdnA4X2RlY29kZXIgPSB0cnVlOwotICBzdGF0ZXNfdG9fdmFyeS5oYXNfcGxhdGZvcm1fdnA5X2RlY29kZXIgPSB0cnVlOwotICBzdGF0ZXNfdG9fdmFyeS5zdXBwb3J0c19vcHVzID0gdHJ1ZTsKLSAgc3RhdGVzX3RvX3ZhcnkuaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkID0gdHJ1ZTsKLSAgc3RhdGVzX3RvX3ZhcnkuaGFzX3BsYXRmb3JtX2RlY29kZXJzID0gdHJ1ZTsKLSAgcmV0dXJuIHN0YXRlc190b192YXJ5OwotfQotCi1zdGF0aWMgYm9vbCBIYXNIZXZjU3VwcG9ydCgpIHsKLSNpZiBCVUlMREZMQUcoRU5BQkxFX0hFVkNfREVNVVhJTkcpCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICByZXR1cm4gYmFzZTo6YW5kcm9pZDo6QnVpbGRJbmZvOjpHZXRJbnN0YW5jZSgpLT5zZGtfaW50KCkgPj0gMjE7Ci0jZWxzZQotICByZXR1cm4gdHJ1ZTsKLSNlbmRpZiAgLy8gZGVmaW5lZChPU19BTkRST0lEKQotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmICAvLyBCVUlMREZMQUcoRU5BQkxFX0hFVkNfREVNVVhJTkcpCi19Ci0KLVRFU1QoTWltZVV0aWxUZXN0LCBDb21tb25NZWRpYU1pbWVUeXBlKSB7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vd2VibSIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJ2aWRlby93ZWJtIikpOwotCi0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vd2F2IikpOwotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoImF1ZGlvL3gtd2F2IikpOwotCi0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vb2dnIikpOwotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoImFwcGxpY2F0aW9uL29nZyIpKTsKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoInZpZGVvL29nZyIpKTsKLSNlbHNlCi0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgidmlkZW8vb2dnIikpOwotI2VuZGlmICAvLyBPU19BTkRST0lECi0KLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpICYmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLSAgLy8gSExTIGlzIHN1cHBvcnRlZCBvbiBBbmRyb2lkIEFQSSBsZXZlbCAxNCBhbmQgaGlnaGVyIGFuZCBDaHJvbWUgc3VwcG9ydHMKLSAgLy8gQVBJIGxldmVscyAxNSBhbmQgaGlnaGVyLCBzbyB0aGVzZSBhcmUgZXhwZWN0ZWQgdG8gYmUgc3VwcG9ydGVkLgotICBib29sIGtIbHNTdXBwb3J0ZWQgPSB0cnVlOwotI2Vsc2UKLSAgYm9vbCBrSGxzU3VwcG9ydGVkID0gZmFsc2U7Ci0jZW5kaWYKLQotICBFWFBFQ1RfRVEoa0hsc1N1cHBvcnRlZCwgSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhcHBsaWNhdGlvbi94LW1wZWd1cmwiKSk7Ci0gIEVYUEVDVF9FUShrSGxzU3VwcG9ydGVkLCBJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoIkFwcGxpY2F0aW9uL1gtTVBFR1VSTCIpKTsKLSAgRVhQRUNUX0VRKGtIbHNTdXBwb3J0ZWQsCi0gICAgICAgICAgICBJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIikpOwotCi0jaWYgZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotICBFWFBFQ1RfVFJVRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoImF1ZGlvL21wNCIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhdWRpby94LW00YSIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJ2aWRlby9tcDQiKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgidmlkZW8veC1tNHYiKSk7Ci0KLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhdWRpby9tcDMiKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8veC1tcDMiKSk7Ci0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vbXBlZyIpKTsKLSAgRVhQRUNUX1RSVUUoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhdWRpby9hYWMiKSk7Ci0KLSNpZiBCVUlMREZMQUcoRU5BQkxFX01TRV9NUEVHMlRTX1NUUkVBTV9QQVJTRVIpCi0gIEVYUEVDVF9UUlVFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgidmlkZW8vbXAydCIpKTsKLSNlbHNlCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoInZpZGVvL21wMnQiKSk7Ci0jZW5kaWYKLSNlbHNlCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoImF1ZGlvL21wNCIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8veC1tNGEiKSk7Ci0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoInZpZGVvL21wNCIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgidmlkZW8veC1tNHYiKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vbXAzIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhdWRpby94LW1wMyIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vbXBlZyIpKTsKLSAgRVhQRUNUX0ZBTFNFKElzU3VwcG9ydGVkTWVkaWFNaW1lVHlwZSgiYXVkaW8vYWFjIikpOwotI2VuZGlmICAvLyBVU0VfUFJPUFJJRVRBUllfQ09ERUNTCi0gIEVYUEVDVF9GQUxTRShJc1N1cHBvcnRlZE1lZGlhTWltZVR5cGUoInZpZGVvL21wMyIpKTsKLQotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJ2aWRlby91bmtub3duIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJhdWRpby91bmtub3duIikpOwotICBFWFBFQ1RfRkFMU0UoSXNTdXBwb3J0ZWRNZWRpYU1pbWVUeXBlKCJ1bmtub3duL3Vua25vd24iKSk7Ci19Ci0KLS8vIE5vdGU6IGNvZGVjcyBzaG91bGQgb25seSBiZSBhIGxpc3Qgb2YgMiBvciBmZXdlcjsgaGVuY2UgdGhlIHJlc3RyaWN0aW9uIG9mCi0vLyByZXN1bHRzJyBsZW5ndGggdG8gMi4KLVRFU1QoTWltZVV0aWxUZXN0LCBQYXJzZUNvZGVjU3RyaW5nKSB7Ci0gIGNvbnN0IHN0cnVjdCB7Ci0gICAgY29uc3QgY2hhciogY29uc3Qgb3JpZ2luYWw7Ci0gICAgc2l6ZV90IGV4cGVjdGVkX3NpemU7Ci0gICAgY29uc3QgY2hhciogY29uc3QgcmVzdWx0c1syXTsKLSAgfSB0ZXN0c1tdID0gewotICAgICAgeyJcImJvZ3VzXCIiLCAxLCB7ImJvZ3VzIn19LAotICAgICAgeyIwIiwgMSwgeyIwIn19LAotICAgICAgeyJhdmMxLjQyRTAxRSwgbXA0YS40MC4yIiwgMiwgeyJhdmMxIiwgIm1wNGEifX0sCi0gICAgICB7IlwibXA0di4yMC4yNDAsIG1wNGEuNDAuMlwiIiwgMiwgeyJtcDR2IiwgIm1wNGEifX0sCi0gICAgICB7Im1wNHYuMjAuOCwgc2FtciIsIDIsIHsibXA0diIsICJzYW1yIn19LAotICAgICAgeyJcInRoZW9yYSwgdm9yYmlzXCIiLCAyLCB7InRoZW9yYSIsICJ2b3JiaXMifX0sCi0gICAgICB7IiIsIDAsIHt9fSwKLSAgICAgIHsiXCJcIiIsIDAsIHt9fSwKLSAgICAgIHsiXCIgICBcIiIsIDAsIHt9fSwKLSAgICAgIHsiLCIsIDIsIHsiIiwgIiJ9fSwKLSAgfTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZSh0ZXN0cyk7ICsraSkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb2RlY3Nfb3V0OwotICAgIFBhcnNlQ29kZWNTdHJpbmcodGVzdHNbaV0ub3JpZ2luYWwsICZjb2RlY3Nfb3V0LCB0cnVlKTsKLSAgICBBU1NFUlRfRVEodGVzdHNbaV0uZXhwZWN0ZWRfc2l6ZSwgY29kZWNzX291dC5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdGVzdHNbaV0uZXhwZWN0ZWRfc2l6ZTsgKytqKQotICAgICAgRVhQRUNUX0VRKHRlc3RzW2ldLnJlc3VsdHNbal0sIGNvZGVjc19vdXRbal0pOwotICB9Ci0KLSAgLy8gVGVzdCB3aXRob3V0IHN0cmlwcGluZyB0aGUgY29kZWMgdHlwZS4KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvZGVjc19vdXQ7Ci0gIFBhcnNlQ29kZWNTdHJpbmcoImF2YzEuNDJFMDFFLCBtcDRhLjQwLjIiLCAmY29kZWNzX291dCwgZmFsc2UpOwotICBBU1NFUlRfRVEoMnUsIGNvZGVjc19vdXQuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKCJhdmMxLjQyRTAxRSIsIGNvZGVjc19vdXRbMF0pOwotICBFWFBFQ1RfRVEoIm1wNGEuNDAuMiIsIGNvZGVjc19vdXRbMV0pOwotfQotCi1URVNUKElzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtVGVzdCwKLSAgICAgRW5jcnlwdGVkQ29kZWNzRmFpbFdpdGhvdXRQbGF0Zm9ybVN1cHBvcnQpIHsKLSAgLy8gVmFyeSBhbGwgcGFyYW1ldGVycyBleGNlcHQgfGhhc19wbGF0Zm9ybV9kZWNvZGVyc3wuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gc3RhdGVzX3RvX3ZhcnkgPSBWYXJ5QWxsRmllbGRzKCk7Ci0gIHN0YXRlc190b192YXJ5Lmhhc19wbGF0Zm9ybV9kZWNvZGVycyA9IGZhbHNlOwotCi0gIC8vIERpc2FibGUgcGxhdGZvcm0gZGVjb2RlcnMuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gdGVzdF9zdGF0ZXM7Ci0gIHRlc3Rfc3RhdGVzLmhhc19wbGF0Zm9ybV9kZWNvZGVycyA9IGZhbHNlOwotCi0gIC8vIEV2ZXJ5IGNvZGVjIHNob3VsZCBmYWlsIHNpbmNlIHBsYXRmb3JtIHN1cHBvcnQgaXMgbWlzc2luZyBhbmQgd2UndmUKLSAgLy8gcmVxdWVzdGVkIGVuY3J5cHRlZCBjb2RlY3MuCi0gIFJ1bkNvZGVjU3VwcG9ydFRlc3QoCi0gICAgICBzdGF0ZXNfdG9fdmFyeSwgdGVzdF9zdGF0ZXMsCi0gICAgICBbXShjb25zdCBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvJiBpbmZvLCBNaW1lVXRpbDo6Q29kZWMgY29kZWMpIHsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKE1pbWVVdGlsOjpJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybShjb2RlYywga1Rlc3RNaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBpbmZvKSk7Ci0gICAgICB9KTsKLX0KLQotVEVTVChJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybVRlc3QsIEVuY3J5cHRlZENvZGVjQmVoYXZpb3IpIHsKLSAgLy8gVmFyeSBhbGwgcGFyYW1ldGVycyBleGNlcHQgfGhhc19wbGF0Zm9ybV9kZWNvZGVyc3wuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gc3RhdGVzX3RvX3ZhcnkgPSBWYXJ5QWxsRmllbGRzKCk7Ci0gIHN0YXRlc190b192YXJ5Lmhhc19wbGF0Zm9ybV9kZWNvZGVycyA9IGZhbHNlOwotCi0gIC8vIEVuYWJsZSBwbGF0Zm9ybSBkZWNvZGVycy4KLSAgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyB0ZXN0X3N0YXRlczsKLSAgdGVzdF9zdGF0ZXMuaGFzX3BsYXRmb3JtX2RlY29kZXJzID0gdHJ1ZTsKLQotICBSdW5Db2RlY1N1cHBvcnRUZXN0KAotICAgICAgc3RhdGVzX3RvX3ZhcnksIHRlc3Rfc3RhdGVzLAotICAgICAgW10oY29uc3QgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyYgaW5mbywgTWltZVV0aWw6OkNvZGVjIGNvZGVjKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gTWltZVV0aWw6OklzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKAotICAgICAgICAgICAgY29kZWMsIGtUZXN0TWltZVR5cGUsIHRydWUsIGluZm8pOwotICAgICAgICBzd2l0Y2ggKGNvZGVjKSB7Ci0gICAgICAgICAgLy8gVGhlc2UgY29kZWNzIGFyZSBuZXZlciBzdXBwb3J0ZWQgYnkgdGhlIEFuZHJvaWQgcGxhdGZvcm0uCi0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6SU5WQUxJRF9DT0RFQzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpBQzM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6RUFDMzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpNUEVHMl9BQUM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VEhFT1JBOgotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIC8vIFRoZXNlIGNvZGVjcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSB3aXRoIHBsYXRmb3JtIGRlY29kZXIgc3VwcG9ydC4KLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpQQ006Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6TVAzOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6Ok1QRUc0X0FBQzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpWT1JCSVM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6SDI2NDoKLSAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIC8vIFRoZSByZW1haW5pbmcgY29kZWNzIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgZXZlbiB3aGVuCi0gICAgICAgICAgLy8gYSBwbGF0Zm9ybSBkZWNvZGVyIGlzIGF2YWlsYWJsZS4KLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpPUFVTOgotICAgICAgICAgICAgRVhQRUNUX0VRKGluZm8uc3VwcG9ydHNfb3B1cywgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VlA4OgotICAgICAgICAgICAgRVhQRUNUX0VRKGluZm8uaGFzX3BsYXRmb3JtX3ZwOF9kZWNvZGVyLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpWUDk6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoaW5mby5oYXNfcGxhdGZvcm1fdnA5X2RlY29kZXIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkhFVkM6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoSGFzSGV2Y1N1cHBvcnQoKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9KTsKLX0KLQotVEVTVChJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybVRlc3QsIENsZWFyQ29kZWNCZWhhdmlvcldpdGhBbmRyb2lkUGlwZWxpbmUpIHsKLSAgLy8gVmFyeSBhbGwgcGFyYW1ldGVycyBleGNlcHQgfGlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZHwuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gc3RhdGVzX3RvX3ZhcnkgPSBWYXJ5QWxsRmllbGRzKCk7Ci0gIHN0YXRlc190b192YXJ5LmlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCA9IGZhbHNlOwotCi0gIC8vIERpc2FibGUgdGhlIHVuaWZpZWQgcGlwZWxpbmUuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gdGVzdF9zdGF0ZXM7Ci0gIHRlc3Rfc3RhdGVzLmlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCA9IGZhbHNlOwotCi0gIFJ1bkNvZGVjU3VwcG9ydFRlc3QoCi0gICAgICBzdGF0ZXNfdG9fdmFyeSwgdGVzdF9zdGF0ZXMsCi0gICAgICBbXShjb25zdCBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvJiBpbmZvLCBNaW1lVXRpbDo6Q29kZWMgY29kZWMpIHsKLSAgICAgICAgY29uc3QgYm9vbCByZXN1bHQgPSBNaW1lVXRpbDo6SXNDb2RlY1N1cHBvcnRlZE9uUGxhdGZvcm0oCi0gICAgICAgICAgICBjb2RlYywga1Rlc3RNaW1lVHlwZSwgZmFsc2UsIGluZm8pOwotICAgICAgICBzd2l0Y2ggKGNvZGVjKSB7Ci0gICAgICAgICAgLy8gVGhlc2UgY29kZWNzIGFyZSBuZXZlciBzdXBwb3J0ZWQgYnkgdGhlIEFuZHJvaWQgcGxhdGZvcm0uCi0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6SU5WQUxJRF9DT0RFQzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpBQzM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6RUFDMzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpNUEVHMl9BQUM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VEhFT1JBOgotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIC8vIFRoZXNlIGNvZGVjcyBhcmUgYWx3YXlzIGF2YWlsYWJsZSB2aWEgTWVkaWFQbGF5ZXIuCi0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6UENNOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6Ok1QMzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpNUEVHNF9BQUM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6Vk9SQklTOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkgyNjQ6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VlA4OgotICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlY3MgZGVwZW5kIG9uIHRoZSBwbGF0Zm9ybSB2ZXJzaW9uLgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6Ok9QVVM6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoaW5mby5zdXBwb3J0c19vcHVzLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpWUDk6Ci0gICAgICAgICAgICAvLyBNZWRpYVBsYXllciBvbmx5IHN1cHBvcnRzIFZQOSBpbiBXZWJNLgotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkhFVkM6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoSGFzSGV2Y1N1cHBvcnQoKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAvLyBWZXJpZnkgdnA5IHN1cHBvcnQgaW4gV2ViTS4KLSAgUnVuQ29kZWNTdXBwb3J0VGVzdCgKLSAgICAgIHN0YXRlc190b192YXJ5LCB0ZXN0X3N0YXRlcywKLSAgICAgIFtdKGNvbnN0IE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8mIGluZm8sIE1pbWVVdGlsOjpDb2RlYyBjb2RlYykgewotICAgICAgICBjb25zdCBib29sIHJlc3VsdCA9IE1pbWVVdGlsOjpJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybSgKLSAgICAgICAgICAgIGNvZGVjLCAidmlkZW8vd2VibSIsIHRydWUsIGluZm8pOwotICAgICAgICBpZiAoY29kZWMgPT0gTWltZVV0aWw6OlZQOSkKLSAgICAgICAgICBFWFBFQ1RfRVEoaW5mby5oYXNfcGxhdGZvcm1fdnA5X2RlY29kZXIsIHJlc3VsdCk7Ci0gICAgICB9KTsKLX0KLQotVEVTVChJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybVRlc3QsIENsZWFyQ29kZWNCZWhhdmlvcldpdGhVbmlmaWVkUGlwZWxpbmUpIHsKLSAgLy8gVmFyeSBhbGwgcGFyYW1ldGVycyBleGNlcHQgfGlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZHwuCi0gIE1pbWVVdGlsOjpQbGF0Zm9ybUluZm8gc3RhdGVzX3RvX3ZhcnkgPSBWYXJ5QWxsRmllbGRzKCk7Ci0gIHN0YXRlc190b192YXJ5LmlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCA9IGZhbHNlOwotCi0gIC8vIEVuYWJsZSB0aGUgdW5pZmllZCBwaXBlbGluZS4KLSAgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyB0ZXN0X3N0YXRlczsKLSAgdGVzdF9zdGF0ZXMuaXNfdW5pZmllZF9tZWRpYV9waXBlbGluZV9lbmFibGVkID0gdHJ1ZTsKLQotICBSdW5Db2RlY1N1cHBvcnRUZXN0KAotICAgICAgc3RhdGVzX3RvX3ZhcnksIHRlc3Rfc3RhdGVzLAotICAgICAgW10oY29uc3QgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyYgaW5mbywgTWltZVV0aWw6OkNvZGVjIGNvZGVjKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgcmVzdWx0ID0gTWltZVV0aWw6OklzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKAotICAgICAgICAgICAgY29kZWMsIGtUZXN0TWltZVR5cGUsIGZhbHNlLCBpbmZvKTsKLSAgICAgICAgc3dpdGNoIChjb2RlYykgewotICAgICAgICAgIC8vIFRoZXNlIGNvZGVjcyBhcmUgbmV2ZXIgc3VwcG9ydGVkIGJ5IHRoZSBBbmRyb2lkIHBsYXRmb3JtLgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OklOVkFMSURfQ09ERUM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6QUMzOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkVBQzM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VEhFT1JBOgotICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIC8vIFRoZXNlIGNvZGVjcyBhcmUgYWx3YXlzIHN1cHBvcnRlZCB3aXRoIHRoZSB1bmlmaWVkIHBpcGVsaW5lLgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OlBDTToKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpNUEVHMl9BQUM6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6TVAzOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6Ok1QRUc0X0FBQzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpPUFVTOgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OlZPUkJJUzoKLSAgICAgICAgICBjYXNlIE1pbWVVdGlsOjpWUDg6Ci0gICAgICAgICAgY2FzZSBNaW1lVXRpbDo6VlA5OgotICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgLy8gVGhlc2UgY29kZWNzIGFyZSBvbmx5IHN1cHBvcnRlZCBpZiBwbGF0Zm9ybSBkZWNvZGVycyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkgyNjQ6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoaW5mby5oYXNfcGxhdGZvcm1fZGVjb2RlcnMsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgTWltZVV0aWw6OkhFVkM6Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoSGFzSGV2Y1N1cHBvcnQoKSAmJiBpbmZvLmhhc19wbGF0Zm9ybV9kZWNvZGVycywgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9KTsKLX0KLQotVEVTVChJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybVRlc3QsIE9wdXNPZ2dTdXBwb3J0KSB7Ci0gIC8vIFZhcnkgYWxsIHBhcmFtZXRlcnM7IHRodXMgdXNlIGRlZmF1bHQgaW5pdGlhbCBzdGF0ZS4KLSAgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyBzdGF0ZXNfdG9fdmFyeSA9IFZhcnlBbGxGaWVsZHMoKTsKLSAgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyB0ZXN0X3N0YXRlczsKLQotICBSdW5Db2RlY1N1cHBvcnRUZXN0KAotICAgICAgc3RhdGVzX3RvX3ZhcnksIHRlc3Rfc3RhdGVzLAotICAgICAgW10oY29uc3QgTWltZVV0aWw6OlBsYXRmb3JtSW5mbyYgaW5mbywgTWltZVV0aWw6OkNvZGVjIGNvZGVjKSB7Ci0gICAgICAgIEVYUEVDVF9FUShpbmZvLmlzX3VuaWZpZWRfbWVkaWFfcGlwZWxpbmVfZW5hYmxlZCwKLSAgICAgICAgICAgICAgICAgIE1pbWVVdGlsOjpJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybSgKLSAgICAgICAgICAgICAgICAgICAgICBNaW1lVXRpbDo6T1BVUywgImF1ZGlvL29nZyIsIGZhbHNlLCBpbmZvKSk7Ci0gICAgICB9KTsKLX0KLQotVEVTVChJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybVRlc3QsIEhMU0RvZXNOb3RTdXBwb3J0TVBFRzJBQUMpIHsKLSAgLy8gVmFyeSBhbGwgcGFyYW1ldGVyczsgdGh1cyB1c2UgZGVmYXVsdCBpbml0aWFsIHN0YXRlLgotICBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvIHN0YXRlc190b192YXJ5ID0gVmFyeUFsbEZpZWxkcygpOwotICBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvIHRlc3Rfc3RhdGVzOwotCi0gIFJ1bkNvZGVjU3VwcG9ydFRlc3QoCi0gICAgICBzdGF0ZXNfdG9fdmFyeSwgdGVzdF9zdGF0ZXMsCi0gICAgICBbXShjb25zdCBNaW1lVXRpbDo6UGxhdGZvcm1JbmZvJiBpbmZvLCBNaW1lVXRpbDo6Q29kZWMgY29kZWMpIHsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKE1pbWVVdGlsOjpJc0NvZGVjU3VwcG9ydGVkT25QbGF0Zm9ybSgKLSAgICAgICAgICAgIE1pbWVVdGlsOjpNUEVHMl9BQUMsICJhcHBsaWNhdGlvbi94LW1wZWd1cmwiLCBmYWxzZSwgaW5mbykpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoTWltZVV0aWw6OklzQ29kZWNTdXBwb3J0ZWRPblBsYXRmb3JtKAotICAgICAgICAgICAgTWltZVV0aWw6Ok1QRUcyX0FBQywgImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIiwgZmFsc2UsIGluZm8pKTsKLSAgICAgIH0pOwotfQotCi19ICAvLyBuYW1lc3BhY2UgaW50ZXJuYWwKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19kZW11eGVyX2hvc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMwNmU2Ni4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLU1vY2tEZW11eGVySG9zdDo6TW9ja0RlbXV4ZXJIb3N0KCkge30KLQotTW9ja0RlbXV4ZXJIb3N0Ojp+TW9ja0RlbXV4ZXJIb3N0KCkge30KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19kZW11eGVyX2hvc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDExNWQ3MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX01PQ0tfREVNVVhFUl9IT1NUX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX01PQ0tfREVNVVhFUl9IT1NUX0hfCi0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFja19jb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNb2NrRGVtdXhlckhvc3QgOiBwdWJsaWMgRGVtdXhlckhvc3QgewotIHB1YmxpYzoKLSAgTW9ja0RlbXV4ZXJIb3N0KCk7Ci0gIHZpcnR1YWwgfk1vY2tEZW11eGVySG9zdCgpOwotCi0gIE1PQ0tfTUVUSE9EMShPbkJ1ZmZlcmVkVGltZVJhbmdlc0NoYW5nZWQsCi0gICAgICAgICAgICAgICB2b2lkKGNvbnN0IFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+JikpOwotICBNT0NLX01FVEhPRDEoU2V0RHVyYXRpb24sIHZvaWQoYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSk7Ci0gIE1PQ0tfTUVUSE9EMShPbkRlbXV4ZXJFcnJvciwgdm9pZChQaXBlbGluZVN0YXR1cyBlcnJvcikpOwotICBNT0NLX01FVEhPRDIoQWRkVGV4dFN0cmVhbSwgdm9pZChEZW11eGVyU3RyZWFtKiwgY29uc3QgVGV4dFRyYWNrQ29uZmlnJikpOwotICBNT0NLX01FVEhPRDEoUmVtb3ZlVGV4dFN0cmVhbSwgdm9pZChEZW11eGVyU3RyZWFtKikpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tEZW11eGVySG9zdCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9NT0NLX0RFTVVYRVJfSE9TVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19maWx0ZXJzLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19maWx0ZXJzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OThmYTQxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21vY2tfZmlsdGVycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19maWx0ZXJzLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpfOwotdXNpbmcgOjp0ZXN0aW5nOjpJbnZva2U7Ci11c2luZyA6OnRlc3Rpbmc6Ok5vdE51bGw7Ci11c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1Nb2NrUGlwZWxpbmVDbGllbnQ6Ok1vY2tQaXBlbGluZUNsaWVudCgpIHt9Ci1Nb2NrUGlwZWxpbmVDbGllbnQ6On5Nb2NrUGlwZWxpbmVDbGllbnQoKSB7fQotCi1Nb2NrUGlwZWxpbmU6Ok1vY2tQaXBlbGluZSgpIHt9Ci1Nb2NrUGlwZWxpbmU6On5Nb2NrUGlwZWxpbmUoKSB7fQotCi12b2lkIE1vY2tQaXBlbGluZTo6U3RhcnQoRGVtdXhlciogZGVtdXhlciwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmVyPiByZW5kZXJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQqIGNsaWVudCwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc2Vla19jYikgewotICBTdGFydChkZW11eGVyLCAmcmVuZGVyZXIsIGNsaWVudCwgc2Vla19jYik7Ci19Ci0KLXZvaWQgTW9ja1BpcGVsaW5lOjpSZXN1bWUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmVyPiByZW5kZXJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc2Vla19jYikgewotICBSZXN1bWUoJnJlbmRlcmVyLCB0aW1lc3RhbXAsIHNlZWtfY2IpOwotfQotCi1Nb2NrRGVtdXhlcjo6TW9ja0RlbXV4ZXIoKSB7fQotCi1Nb2NrRGVtdXhlcjo6fk1vY2tEZW11eGVyKCkge30KLQotc3RkOjpzdHJpbmcgTW9ja0RlbXV4ZXI6OkdldERpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gIk1vY2tEZW11eGVyIjsgfQotCi1Nb2NrRGVtdXhlclN0cmVhbTo6TW9ja0RlbXV4ZXJTdHJlYW0oRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKQotICAgIDogdHlwZV8odHlwZSksIGxpdmVuZXNzXyhMSVZFTkVTU19VTktOT1dOKSB7fQotCi1Nb2NrRGVtdXhlclN0cmVhbTo6fk1vY2tEZW11eGVyU3RyZWFtKCkge30KLQotRGVtdXhlclN0cmVhbTo6VHlwZSBNb2NrRGVtdXhlclN0cmVhbTo6dHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0KLURlbXV4ZXJTdHJlYW06OkxpdmVuZXNzIE1vY2tEZW11eGVyU3RyZWFtOjpsaXZlbmVzcygpIGNvbnN0IHsKLSAgcmV0dXJuIGxpdmVuZXNzXzsKLX0KLQotQXVkaW9EZWNvZGVyQ29uZmlnIE1vY2tEZW11eGVyU3RyZWFtOjphdWRpb19kZWNvZGVyX2NvbmZpZygpIHsKLSAgRENIRUNLX0VRKHR5cGVfLCBEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIHJldHVybiBhdWRpb19kZWNvZGVyX2NvbmZpZ187Ci19Ci0KLVZpZGVvRGVjb2RlckNvbmZpZyBNb2NrRGVtdXhlclN0cmVhbTo6dmlkZW9fZGVjb2Rlcl9jb25maWcoKSB7Ci0gIERDSEVDS19FUSh0eXBlXywgRGVtdXhlclN0cmVhbTo6VklERU8pOwotICByZXR1cm4gdmlkZW9fZGVjb2Rlcl9jb25maWdfOwotfQotCi12b2lkIE1vY2tEZW11eGVyU3RyZWFtOjpzZXRfYXVkaW9fZGVjb2Rlcl9jb25maWcoCi0gICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSAgRENIRUNLX0VRKHR5cGVfLCBEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIGF1ZGlvX2RlY29kZXJfY29uZmlnXyA9IGNvbmZpZzsKLX0KLQotdm9pZCBNb2NrRGVtdXhlclN0cmVhbTo6c2V0X3ZpZGVvX2RlY29kZXJfY29uZmlnKAotICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7Ci0gIERDSEVDS19FUSh0eXBlXywgRGVtdXhlclN0cmVhbTo6VklERU8pOwotICB2aWRlb19kZWNvZGVyX2NvbmZpZ18gPSBjb25maWc7Ci19Ci0KLXZvaWQgTW9ja0RlbXV4ZXJTdHJlYW06OnNldF9saXZlbmVzcyhEZW11eGVyU3RyZWFtOjpMaXZlbmVzcyBsaXZlbmVzcykgewotICBsaXZlbmVzc18gPSBsaXZlbmVzczsKLX0KLQotVmlkZW9Sb3RhdGlvbiBNb2NrRGVtdXhlclN0cmVhbTo6dmlkZW9fcm90YXRpb24oKSB7IHJldHVybiBWSURFT19ST1RBVElPTl8wOyB9Ci0KLXN0ZDo6c3RyaW5nIE1vY2tWaWRlb0RlY29kZXI6OkdldERpc3BsYXlOYW1lKCkgY29uc3QgewotICByZXR1cm4gIk1vY2tWaWRlb0RlY29kZXIiOwotfQotCi1Nb2NrVmlkZW9EZWNvZGVyOjpNb2NrVmlkZW9EZWNvZGVyKCkgewotICBPTl9DQUxMKCp0aGlzLCBDYW5SZWFkV2l0aG91dFN0YWxsaW5nKCkpLldpbGxCeURlZmF1bHQoUmV0dXJuKHRydWUpKTsKLX0KLQotc3RkOjpzdHJpbmcgTW9ja0F1ZGlvRGVjb2Rlcjo6R2V0RGlzcGxheU5hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAiTW9ja0F1ZGlvRGVjb2RlciI7Ci19Ci0KLU1vY2tWaWRlb0RlY29kZXI6On5Nb2NrVmlkZW9EZWNvZGVyKCkge30KLQotTW9ja0F1ZGlvRGVjb2Rlcjo6TW9ja0F1ZGlvRGVjb2RlcigpIHt9Ci0KLU1vY2tBdWRpb0RlY29kZXI6On5Nb2NrQXVkaW9EZWNvZGVyKCkge30KLQotTW9ja1JlbmRlcmVyQ2xpZW50OjpNb2NrUmVuZGVyZXJDbGllbnQoKSB7fQotCi1Nb2NrUmVuZGVyZXJDbGllbnQ6On5Nb2NrUmVuZGVyZXJDbGllbnQoKSB7fQotCi1Nb2NrVmlkZW9SZW5kZXJlcjo6TW9ja1ZpZGVvUmVuZGVyZXIoKSB7fQotCi1Nb2NrVmlkZW9SZW5kZXJlcjo6fk1vY2tWaWRlb1JlbmRlcmVyKCkge30KLQotTW9ja0F1ZGlvUmVuZGVyZXI6Ok1vY2tBdWRpb1JlbmRlcmVyKCkge30KLQotTW9ja0F1ZGlvUmVuZGVyZXI6On5Nb2NrQXVkaW9SZW5kZXJlcigpIHt9Ci0KLU1vY2tSZW5kZXJlcjo6TW9ja1JlbmRlcmVyKCkge30KLQotTW9ja1JlbmRlcmVyOjp+TW9ja1JlbmRlcmVyKCkge30KLQotTW9ja1RpbWVTb3VyY2U6Ok1vY2tUaW1lU291cmNlKCkge30KLQotTW9ja1RpbWVTb3VyY2U6On5Nb2NrVGltZVNvdXJjZSgpIHt9Ci0KLU1vY2tUZXh0VHJhY2s6Ok1vY2tUZXh0VHJhY2soKSB7fQotCi1Nb2NrVGV4dFRyYWNrOjp+TW9ja1RleHRUcmFjaygpIHt9Ci0KLU1vY2tEZWNyeXB0b3I6Ok1vY2tEZWNyeXB0b3IoKSB7fQotCi1Nb2NrRGVjcnlwdG9yOjp+TW9ja0RlY3J5cHRvcigpIHt9Ci0KLU1vY2tDZG1Db250ZXh0OjpNb2NrQ2RtQ29udGV4dCgpIHt9Ci0KLU1vY2tDZG1Db250ZXh0Ojp+TW9ja0NkbUNvbnRleHQoKSB7fQotCi1pbnQgTW9ja0NkbUNvbnRleHQ6OkdldENkbUlkKCkgY29uc3QgeyByZXR1cm4gY2RtX2lkXzsgfQotCi12b2lkIE1vY2tDZG1Db250ZXh0OjpzZXRfY2RtX2lkKGludCBjZG1faWQpIHsgY2RtX2lkXyA9IGNkbV9pZDsgfQotCi1Nb2NrU3RyZWFtUGFyc2VyOjpNb2NrU3RyZWFtUGFyc2VyKCkge30KLQotTW9ja1N0cmVhbVBhcnNlcjo6fk1vY2tTdHJlYW1QYXJzZXIoKSB7fQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21vY2tfZmlsdGVycy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19maWx0ZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2N2RiZDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19maWx0ZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9NT0NLX0ZJTFRFUlNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTU9DS19GSUxURVJTX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19yZW5kZXJlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NkbV9jb250ZXh0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0b3IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3JlbmRlcmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmVuZGVyZXJfY2xpZW50LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVfc291cmNlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZW5kZXJlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1vY2tQaXBlbGluZUNsaWVudCA6IHB1YmxpYyBQaXBlbGluZTo6Q2xpZW50IHsKLSBwdWJsaWM6Ci0gIE1vY2tQaXBlbGluZUNsaWVudCgpOwotICB+TW9ja1BpcGVsaW5lQ2xpZW50KCk7Ci0KLSAgTU9DS19NRVRIT0QxKE9uRXJyb3IsIHZvaWQoUGlwZWxpbmVTdGF0dXMpKTsKLSAgTU9DS19NRVRIT0QwKE9uRW5kZWQsIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMShPbk1ldGFkYXRhLCB2b2lkKFBpcGVsaW5lTWV0YWRhdGEpKTsKLSAgTU9DS19NRVRIT0QxKE9uQnVmZmVyaW5nU3RhdGVDaGFuZ2UsIHZvaWQoQnVmZmVyaW5nU3RhdGUpKTsKLSAgTU9DS19NRVRIT0QwKE9uRHVyYXRpb25DaGFuZ2UsIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMihPbkFkZFRleHRUcmFjaywKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3QgVGV4dFRyYWNrQ29uZmlnJiwgY29uc3QgQWRkVGV4dFRyYWNrRG9uZUNCJikpOwotICBNT0NLX01FVEhPRDAoT25XYWl0aW5nRm9yRGVjcnlwdGlvbktleSwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QxKE9uVmlkZW9OYXR1cmFsU2l6ZUNoYW5nZSwgdm9pZChjb25zdCBtYXRoOjpTaXplJikpOwotICBNT0NLX01FVEhPRDEoT25WaWRlb09wYWNpdHlDaGFuZ2UsIHZvaWQoYm9vbCkpOwotfTsKLQotY2xhc3MgTW9ja1BpcGVsaW5lIDogcHVibGljIFBpcGVsaW5lIHsKLSBwdWJsaWM6Ci0gIE1vY2tQaXBlbGluZSgpOwotICB2aXJ0dWFsIH5Nb2NrUGlwZWxpbmUoKTsKLQotICAvLyBOb3RlOiBTdGFydCgpIGFuZCBSZXN1bWUoKSBkZWNsYXJhdGlvbnMgYXJlIG5vdCBhY3R1YWxseSBvdmVycmlkZXM7IHRoZXkKLSAgLy8gdGFrZSB1bmlxdWVfcHRyKiBpbnN0ZWFkIG9mIHVuaXF1ZV9wdHIgc28gdGhhdCB0aGV5IGNhbiBiZSBtb2NrIG1ldGhvZHMuCi0gIC8vIFByaXZhdGUgc3R1YnMgZm9yIFN0YXJ0KCkgYW5kIFJlc3VtZSgpIGltcGxlbWVudCB0aGUgYWN0dWFsIFBpcGVsaW5lCi0gIC8vIGludGVyZmFjZSBieSBmb3J3YXJkaW5nIHRvIHRoZXNlIG1vY2sgbWV0aG9kcy4KLSAgTU9DS19NRVRIT0Q0KFN0YXJ0LCB2b2lkKERlbXV4ZXIqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyZXI+KiwgQ2xpZW50KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImKSk7Ci0gIE1PQ0tfTUVUSE9EMChTdG9wLCB2b2lkKCkpOwotICBNT0NLX01FVEhPRDIoU2Vlaywgdm9pZChiYXNlOjpUaW1lRGVsdGEsIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImKSk7Ci0gIE1PQ0tfTUVUSE9EMShTdXNwZW5kLCB2b2lkKGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImKSk7Ci0gIE1PQ0tfTUVUSE9EMyhSZXN1bWUsIHZvaWQoc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmVyPiosIGJhc2U6OlRpbWVEZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0YXR1c0NCJikpOwotCi0gIE1PQ0tfTUVUSE9EMShPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQsCi0gICAgICAgICAgICAgICB2b2lkKGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYpKTsKLSAgTU9DS19NRVRIT0QxKE9uU2VsZWN0ZWRWaWRlb1RyYWNrQ2hhbmdlZCwKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3Qgc3RkOjp2ZWN0b3I8TWVkaWFUcmFjazo6SWQ+JikpOwotCi0gIC8vIFRPRE8oc2FuZGVyc2QpOiBUaGlzIHNob3VsZCBhdXRvbWF0aWNhbGx5IHJldHVybiB0cnVlIGJldHdlZW4gU3RhcnQoKSBhbmQKLSAgLy8gU3RvcCgpLiAoT3IgYmV0dGVyLCByZW1vdmUgaXQgZnJvbSB0aGUgaW50ZXJmYWNlIGVudGlyZWx5LikKLSAgTU9DS19DT05TVF9NRVRIT0QwKElzUnVubmluZywgYm9vbCgpKTsKLQotICAvLyBUT0RPKHNhbmRlcnNkKTogVGhlc2Ugc2hvdWxkIGJlIHJlZ3VsYXIgZ2V0dGVycy9zZXR0ZXJzLgotICBNT0NLX0NPTlNUX01FVEhPRDAoR2V0UGxheWJhY2tSYXRlLCBkb3VibGUoKSk7Ci0gIE1PQ0tfTUVUSE9EMShTZXRQbGF5YmFja1JhdGUsIHZvaWQoZG91YmxlKSk7Ci0gIE1PQ0tfQ09OU1RfTUVUSE9EMChHZXRWb2x1bWUsIGZsb2F0KCkpOwotICBNT0NLX01FVEhPRDEoU2V0Vm9sdW1lLCB2b2lkKGZsb2F0KSk7Ci0KLSAgLy8gVE9ETyhzYW5kZXJzZCk6IFRoZXNlIHNob3VsZCBwcm9iYWJseSBoYXZlIHNldHRlcnMgdG9vLgotICBNT0NLX0NPTlNUX01FVEhPRDAoR2V0TWVkaWFUaW1lLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIE1PQ0tfQ09OU1RfTUVUSE9EMChHZXRCdWZmZXJlZFRpbWVSYW5nZXMsIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+KCkpOwotICBNT0NLX0NPTlNUX01FVEhPRDAoR2V0TWVkaWFEdXJhdGlvbiwgYmFzZTo6VGltZURlbHRhKCkpOwotICBNT0NLX01FVEhPRDAoRGlkTG9hZGluZ1Byb2dyZXNzLCBib29sKCkpOwotICBNT0NLX0NPTlNUX01FVEhPRDAoR2V0U3RhdGlzdGljcywgUGlwZWxpbmVTdGF0aXN0aWNzKCkpOwotCi0gIE1PQ0tfTUVUSE9EMihTZXRDZG0sIHZvaWQoQ2RtQ29udGV4dCosIGNvbnN0IENkbUF0dGFjaGVkQ0ImKSk7Ci0KLSBwcml2YXRlOgotICAvLyBGb3J3YXJkaW5nIHN0dWJzIChzZWUgY29tbWVudCBhYm92ZSkuCi0gIHZvaWQgU3RhcnQoRGVtdXhlciogZGVtdXhlciwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmVyPiByZW5kZXJlciwKLSAgICAgICAgICAgICBDbGllbnQqIGNsaWVudCwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc2Vla19jYikgb3ZlcnJpZGU7Ci0gIHZvaWQgUmVzdW1lKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJlcj4gcmVuZGVyZXIsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHNlZWtfY2IpIG92ZXJyaWRlOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb2NrUGlwZWxpbmUpOwotfTsKLQotY2xhc3MgTW9ja0RlbXV4ZXIgOiBwdWJsaWMgRGVtdXhlciB7Ci0gcHVibGljOgotICBNb2NrRGVtdXhlcigpOwotICB2aXJ0dWFsIH5Nb2NrRGVtdXhlcigpOwotCi0gIC8vIERlbXV4ZXIgaW1wbGVtZW50YXRpb24uCi0gIHZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0RGlzcGxheU5hbWUoKSBjb25zdDsKLSAgTU9DS19NRVRIT0QzKEluaXRpYWxpemUsCi0gICAgICAgICAgICAgICB2b2lkKERlbXV4ZXJIb3N0KiBob3N0LCBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBjYiwgYm9vbCkpOwotICBNT0NLX01FVEhPRDEoU3RhcnRXYWl0aW5nRm9yU2Vlaywgdm9pZChiYXNlOjpUaW1lRGVsdGEpKTsKLSAgTU9DS19NRVRIT0QxKENhbmNlbFBlbmRpbmdTZWVrLCB2b2lkKGJhc2U6OlRpbWVEZWx0YSkpOwotICBNT0NLX01FVEhPRDIoU2Vlaywgdm9pZChiYXNlOjpUaW1lRGVsdGEgdGltZSwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgY2IpKTsKLSAgTU9DS19NRVRIT0QwKFN0b3AsIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMChBYm9ydFBlbmRpbmdSZWFkcywgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QxKEdldFN0cmVhbSwgRGVtdXhlclN0cmVhbSooRGVtdXhlclN0cmVhbTo6VHlwZSkpOwotICBNT0NLX0NPTlNUX01FVEhPRDAoR2V0U3RhcnRUaW1lLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIE1PQ0tfQ09OU1RfTUVUSE9EMChHZXRUaW1lbGluZU9mZnNldCwgYmFzZTo6VGltZSgpKTsKLSAgTU9DS19DT05TVF9NRVRIT0QwKEdldE1lbW9yeVVzYWdlLCBpbnQ2NF90KCkpOwotICBNT0NLX01FVEhPRDIoT25FbmFibGVkQXVkaW9UcmFja3NDaGFuZ2VkLAotICAgICAgICAgICAgICAgdm9pZChjb25zdCBzdGQ6OnZlY3RvcjxNZWRpYVRyYWNrOjpJZD4mLCBiYXNlOjpUaW1lRGVsdGEpKTsKLSAgTU9DS19NRVRIT0QyKE9uU2VsZWN0ZWRWaWRlb1RyYWNrQ2hhbmdlZCwKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3Qgc3RkOjp2ZWN0b3I8TWVkaWFUcmFjazo6SWQ+JiwgYmFzZTo6VGltZURlbHRhKSk7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTW9ja0RlbXV4ZXIpOwotfTsKLQotY2xhc3MgTW9ja0RlbXV4ZXJTdHJlYW0gOiBwdWJsaWMgRGVtdXhlclN0cmVhbSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNb2NrRGVtdXhlclN0cmVhbShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpOwotICB2aXJ0dWFsIH5Nb2NrRGVtdXhlclN0cmVhbSgpOwotCi0gIC8vIERlbXV4ZXJTdHJlYW0gaW1wbGVtZW50YXRpb24uCi0gIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotICBMaXZlbmVzcyBsaXZlbmVzcygpIGNvbnN0IG92ZXJyaWRlOwotICBNT0NLX01FVEhPRDEoUmVhZCwgdm9pZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpKTsKLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2RlY29kZXJfY29uZmlnKCkgb3ZlcnJpZGU7Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZygpIG92ZXJyaWRlOwotICBNT0NLX01FVEhPRDAoRW5hYmxlQml0c3RyZWFtQ29udmVydGVyLCB2b2lkKCkpOwotICBNT0NLX01FVEhPRDAoU3VwcG9ydHNDb25maWdDaGFuZ2VzLCBib29sKCkpOwotCi0gIHZvaWQgc2V0X2F1ZGlvX2RlY29kZXJfY29uZmlnKGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgY29uZmlnKTsKLSAgdm9pZCBzZXRfdmlkZW9fZGVjb2Rlcl9jb25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpOwotICB2b2lkIHNldF9saXZlbmVzcyhMaXZlbmVzcyBsaXZlbmVzcyk7Ci0KLSAgVmlkZW9Sb3RhdGlvbiB2aWRlb19yb3RhdGlvbigpIG92ZXJyaWRlOwotICBNT0NLX0NPTlNUX01FVEhPRDAoZW5hYmxlZCwgYm9vbCgpKTsKLSAgTU9DS19NRVRIT0QyKHNldF9lbmFibGVkLCB2b2lkKGJvb2wsIGJhc2U6OlRpbWVEZWx0YSkpOwotICBNT0NLX01FVEhPRDEoU2V0U3RyZWFtU3RhdHVzQ2hhbmdlQ0IsIHZvaWQoY29uc3QgU3RyZWFtU3RhdHVzQ2hhbmdlQ0ImKSk7Ci0KLSBwcml2YXRlOgotICBUeXBlIHR5cGVfOwotICBMaXZlbmVzcyBsaXZlbmVzc187Ci0gIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19kZWNvZGVyX2NvbmZpZ187Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tEZW11eGVyU3RyZWFtKTsKLX07Ci0KLWNsYXNzIE1vY2tWaWRlb0RlY29kZXIgOiBwdWJsaWMgVmlkZW9EZWNvZGVyIHsKLSBwdWJsaWM6Ci0gIE1vY2tWaWRlb0RlY29kZXIoKTsKLSAgdmlydHVhbCB+TW9ja1ZpZGVvRGVjb2RlcigpOwotCi0gIC8vIFZpZGVvRGVjb2RlciBpbXBsZW1lbnRhdGlvbi4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXREaXNwbGF5TmFtZSgpIGNvbnN0OwotICBNT0NLX01FVEhPRDUoSW5pdGlhbGl6ZSwKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcsIGJvb2wgbG93X2RlbGF5LAotICAgICAgICAgICAgICAgICAgICBDZG1Db250ZXh0KiBjZG1fY29udGV4dCwgY29uc3QgSW5pdENCJiBpbml0X2NiLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRDQiYgb3V0cHV0X2NiKSk7Ci0gIE1PQ0tfTUVUSE9EMihEZWNvZGUsIHZvaWQoY29uc3Qgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiYgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlY29kZUNCJikpOwotICBNT0NLX01FVEhPRDEoUmVzZXQsIHZvaWQoY29uc3QgYmFzZTo6Q2xvc3VyZSYpKTsKLSAgTU9DS19DT05TVF9NRVRIT0QwKEhhc0FscGhhLCBib29sKCkpOwotICBNT0NLX0NPTlNUX01FVEhPRDAoQ2FuUmVhZFdpdGhvdXRTdGFsbGluZywgYm9vbCgpKTsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb2NrVmlkZW9EZWNvZGVyKTsKLX07Ci0KLWNsYXNzIE1vY2tBdWRpb0RlY29kZXIgOiBwdWJsaWMgQXVkaW9EZWNvZGVyIHsKLSBwdWJsaWM6Ci0gIE1vY2tBdWRpb0RlY29kZXIoKTsKLSAgdmlydHVhbCB+TW9ja0F1ZGlvRGVjb2RlcigpOwotCi0gIC8vIEF1ZGlvRGVjb2RlciBpbXBsZW1lbnRhdGlvbi4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXREaXNwbGF5TmFtZSgpIGNvbnN0OwotICBNT0NLX01FVEhPRDQoSW5pdGlhbGl6ZSwKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcsIENkbUNvbnRleHQqIGNkbV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBJbml0Q0ImIGluaXRfY2IsIGNvbnN0IE91dHB1dENCJiBvdXRwdXRfY2IpKTsKLSAgTU9DS19NRVRIT0QyKERlY29kZSwgdm9pZChjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVjb2RlQ0ImKSk7Ci0gIE1PQ0tfTUVUSE9EMShSZXNldCwgdm9pZChjb25zdCBiYXNlOjpDbG9zdXJlJikpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tBdWRpb0RlY29kZXIpOwotfTsKLQotY2xhc3MgTW9ja1JlbmRlcmVyQ2xpZW50IDogcHVibGljIFJlbmRlcmVyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIE1vY2tSZW5kZXJlckNsaWVudCgpOwotICB+TW9ja1JlbmRlcmVyQ2xpZW50KCk7Ci0KLSAgLy8gUmVuZGVyZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCi0gIE1PQ0tfTUVUSE9EMShPbkVycm9yLCB2b2lkKFBpcGVsaW5lU3RhdHVzKSk7Ci0gIE1PQ0tfTUVUSE9EMChPbkVuZGVkLCB2b2lkKCkpOwotICBNT0NLX01FVEhPRDEoT25TdGF0aXN0aWNzVXBkYXRlLCB2b2lkKGNvbnN0IFBpcGVsaW5lU3RhdGlzdGljcyYpKTsKLSAgTU9DS19NRVRIT0QxKE9uQnVmZmVyaW5nU3RhdGVDaGFuZ2UsIHZvaWQoQnVmZmVyaW5nU3RhdGUpKTsKLSAgTU9DS19NRVRIT0QwKE9uV2FpdGluZ0ZvckRlY3J5cHRpb25LZXksIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMShPblZpZGVvTmF0dXJhbFNpemVDaGFuZ2UsIHZvaWQoY29uc3QgbWF0aDo6U2l6ZSYpKTsKLSAgTU9DS19NRVRIT0QxKE9uVmlkZW9PcGFjaXR5Q2hhbmdlLCB2b2lkKGJvb2wpKTsKLSAgTU9DS19NRVRIT0QxKE9uRHVyYXRpb25DaGFuZ2UsIHZvaWQoYmFzZTo6VGltZURlbHRhKSk7Ci19OwotCi1jbGFzcyBNb2NrVmlkZW9SZW5kZXJlciA6IHB1YmxpYyBWaWRlb1JlbmRlcmVyIHsKLSBwdWJsaWM6Ci0gIE1vY2tWaWRlb1JlbmRlcmVyKCk7Ci0gIHZpcnR1YWwgfk1vY2tWaWRlb1JlbmRlcmVyKCk7Ci0KLSAgLy8gVmlkZW9SZW5kZXJlciBpbXBsZW1lbnRhdGlvbi4KLSAgTU9DS19NRVRIT0Q1KEluaXRpYWxpemUsCi0gICAgICAgICAgICAgICB2b2lkKERlbXV4ZXJTdHJlYW0qIHN0cmVhbSwgQ2RtQ29udGV4dCogY2RtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlcmVyQ2xpZW50KiBjbGllbnQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRpbWVTb3VyY2U6OldhbGxDbG9ja1RpbWVDQiYgd2FsbF9jbG9ja190aW1lX2NiLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBpbml0X2NiKSk7Ci0gIE1PQ0tfTUVUSE9EMShGbHVzaCwgdm9pZChjb25zdCBiYXNlOjpDbG9zdXJlJiBjYWxsYmFjaykpOwotICBNT0NLX01FVEhPRDEoU3RhcnRQbGF5aW5nRnJvbSwgdm9pZChiYXNlOjpUaW1lRGVsdGEpKTsKLSAgTU9DS19NRVRIT0QwKE9uVGltZVByb2dyZXNzaW5nLCB2b2lkKCkpOwotICBNT0NLX01FVEhPRDAoT25UaW1lU3RvcHBlZCwgdm9pZCgpKTsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb2NrVmlkZW9SZW5kZXJlcik7Ci19OwotCi1jbGFzcyBNb2NrQXVkaW9SZW5kZXJlciA6IHB1YmxpYyBBdWRpb1JlbmRlcmVyIHsKLSBwdWJsaWM6Ci0gIE1vY2tBdWRpb1JlbmRlcmVyKCk7Ci0gIHZpcnR1YWwgfk1vY2tBdWRpb1JlbmRlcmVyKCk7Ci0KLSAgLy8gQXVkaW9SZW5kZXJlciBpbXBsZW1lbnRhdGlvbi4KLSAgTU9DS19NRVRIT0Q0KEluaXRpYWxpemUsCi0gICAgICAgICAgICAgICB2b2lkKERlbXV4ZXJTdHJlYW0qIHN0cmVhbSwgQ2RtQ29udGV4dCogY2RtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlcmVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIGluaXRfY2IpKTsKLSAgTU9DS19NRVRIT0QwKEdldFRpbWVTb3VyY2UsIFRpbWVTb3VyY2UqKCkpOwotICBNT0NLX01FVEhPRDEoRmx1c2gsIHZvaWQoY29uc3QgYmFzZTo6Q2xvc3VyZSYgY2FsbGJhY2spKTsKLSAgTU9DS19NRVRIT0QwKFN0YXJ0UGxheWluZywgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QxKFNldFZvbHVtZSwgdm9pZChmbG9hdCB2b2x1bWUpKTsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb2NrQXVkaW9SZW5kZXJlcik7Ci19OwotCi1jbGFzcyBNb2NrUmVuZGVyZXIgOiBwdWJsaWMgUmVuZGVyZXIgewotIHB1YmxpYzoKLSAgTW9ja1JlbmRlcmVyKCk7Ci0gIHZpcnR1YWwgfk1vY2tSZW5kZXJlcigpOwotCi0gIC8vIFJlbmRlcmVyIGltcGxlbWVudGF0aW9uLgotICBNT0NLX01FVEhPRDMoSW5pdGlhbGl6ZSwKLSAgICAgICAgICAgICAgIHZvaWQoRGVtdXhlclN0cmVhbVByb3ZpZGVyKiBkZW11eGVyX3N0cmVhbV9wcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgaW5pdF9jYikpOwotICBNT0NLX01FVEhPRDEoRmx1c2gsIHZvaWQoY29uc3QgYmFzZTo6Q2xvc3VyZSYgZmx1c2hfY2IpKTsKLSAgTU9DS19NRVRIT0QxKFN0YXJ0UGxheWluZ0Zyb20sIHZvaWQoYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkpOwotICBNT0NLX01FVEhPRDEoU2V0UGxheWJhY2tSYXRlLCB2b2lkKGRvdWJsZSBwbGF5YmFja19yYXRlKSk7Ci0gIE1PQ0tfTUVUSE9EMShTZXRWb2x1bWUsIHZvaWQoZmxvYXQgdm9sdW1lKSk7Ci0gIE1PQ0tfTUVUSE9EMChHZXRNZWRpYVRpbWUsIGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgTU9DS19NRVRIT0QwKEhhc0F1ZGlvLCBib29sKCkpOwotICBNT0NLX01FVEhPRDAoSGFzVmlkZW8sIGJvb2woKSk7Ci0gIE1PQ0tfTUVUSE9EMihTZXRDZG0sIHZvaWQoQ2RtQ29udGV4dCogY2RtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2RtQXR0YWNoZWRDQiYgY2RtX2F0dGFjaGVkX2NiKSk7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTW9ja1JlbmRlcmVyKTsKLX07Ci0KLWNsYXNzIE1vY2tUaW1lU291cmNlIDogcHVibGljIFRpbWVTb3VyY2UgewotIHB1YmxpYzoKLSAgTW9ja1RpbWVTb3VyY2UoKTsKLSAgdmlydHVhbCB+TW9ja1RpbWVTb3VyY2UoKTsKLQotICAvLyBUaW1lU291cmNlIGltcGxlbWVudGF0aW9uLgotICBNT0NLX01FVEhPRDAoU3RhcnRUaWNraW5nLCB2b2lkKCkpOwotICBNT0NLX01FVEhPRDAoU3RvcFRpY2tpbmcsIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMShTZXRQbGF5YmFja1JhdGUsIHZvaWQoZG91YmxlKSk7Ci0gIE1PQ0tfTUVUSE9EMShTZXRNZWRpYVRpbWUsIHZvaWQoYmFzZTo6VGltZURlbHRhKSk7Ci0gIE1PQ0tfTUVUSE9EMChDdXJyZW50TWVkaWFUaW1lLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIE1PQ0tfTUVUSE9EMihHZXRXYWxsQ2xvY2tUaW1lcywgYm9vbChjb25zdCBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4qKSk7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTW9ja1RpbWVTb3VyY2UpOwotfTsKLQotY2xhc3MgTW9ja1RleHRUcmFjayA6IHB1YmxpYyBUZXh0VHJhY2sgewotIHB1YmxpYzoKLSAgTW9ja1RleHRUcmFjaygpOwotICB2aXJ0dWFsIH5Nb2NrVGV4dFRyYWNrKCk7Ci0KLSAgTU9DS19NRVRIT0Q1KGFkZFdlYlZUVEN1ZSwKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3QgYmFzZTo6VGltZURlbHRhJiBzdGFydCwgY29uc3QgYmFzZTo6VGltZURlbHRhJiBlbmQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5ncykpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tUZXh0VHJhY2spOwotfTsKLQotY2xhc3MgTW9ja0RlY3J5cHRvciA6IHB1YmxpYyBEZWNyeXB0b3IgewotIHB1YmxpYzoKLSAgTW9ja0RlY3J5cHRvcigpOwotICB2aXJ0dWFsIH5Nb2NrRGVjcnlwdG9yKCk7Ci0KLSAgTU9DS19NRVRIT0QyKFJlZ2lzdGVyTmV3S2V5Q0IsCi0gICAgICAgICAgICAgICB2b2lkKFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUsIGNvbnN0IE5ld0tleUNCJiBuZXdfa2V5X2NiKSk7Ci0gIE1PQ0tfTUVUSE9EMyhEZWNyeXB0LCB2b2lkKFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGVuY3J5cHRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGVjcnlwdENCJiBkZWNyeXB0X2NiKSk7Ci0gIE1PQ0tfTUVUSE9EMShDYW5jZWxEZWNyeXB0LCB2b2lkKFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUpKTsKLSAgTU9DS19NRVRIT0QyKEluaXRpYWxpemVBdWRpb0RlY29kZXIsIHZvaWQoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlY29kZXJJbml0Q0ImIGluaXRfY2IpKTsKLSAgTU9DS19NRVRIT0QyKEluaXRpYWxpemVWaWRlb0RlY29kZXIsIHZvaWQoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlY29kZXJJbml0Q0ImIGluaXRfY2IpKTsKLSAgTU9DS19NRVRIT0QyKERlY3J5cHRBbmREZWNvZGVBdWRpbywKLSAgICAgICAgICAgICAgIHZvaWQoY29uc3Qgc2NvcGVkX3JlZnB0cjxtZWRpYTo6RGVjb2RlckJ1ZmZlcj4mIGVuY3J5cHRlZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9EZWNvZGVDQiYgYXVkaW9fZGVjb2RlX2NiKSk7Ci0gIE1PQ0tfTUVUSE9EMihEZWNyeXB0QW5kRGVjb2RlVmlkZW8sCi0gICAgICAgICAgICAgICB2b2lkKGNvbnN0IHNjb3BlZF9yZWZwdHI8bWVkaWE6OkRlY29kZXJCdWZmZXI+JiBlbmNyeXB0ZWQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFZpZGVvRGVjb2RlQ0ImIHZpZGVvX2RlY29kZV9jYikpOwotICBNT0NLX01FVEhPRDEoUmVzZXREZWNvZGVyLCB2b2lkKFN0cmVhbVR5cGUgc3RyZWFtX3R5cGUpKTsKLSAgTU9DS19NRVRIT0QxKERlaW5pdGlhbGl6ZURlY29kZXIsIHZvaWQoU3RyZWFtVHlwZSBzdHJlYW1fdHlwZSkpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tEZWNyeXB0b3IpOwotfTsKLQotY2xhc3MgTW9ja0NkbUNvbnRleHQgOiBwdWJsaWMgQ2RtQ29udGV4dCB7Ci0gcHVibGljOgotICBNb2NrQ2RtQ29udGV4dCgpOwotICB+TW9ja0NkbUNvbnRleHQoKSBvdmVycmlkZTsKLQotICBNT0NLX01FVEhPRDAoR2V0RGVjcnlwdG9yLCBEZWNyeXB0b3IqKCkpOwotICBpbnQgR2V0Q2RtSWQoKSBjb25zdCBvdmVycmlkZTsKLQotICB2b2lkIHNldF9jZG1faWQoaW50IGNkbV9pZCk7Ci0KLSBwcml2YXRlOgotICBpbnQgY2RtX2lkXyA9IENkbUNvbnRleHQ6OmtJbnZhbGlkQ2RtSWQ7Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tDZG1Db250ZXh0KTsKLX07Ci0KLWNsYXNzIE1vY2tTdHJlYW1QYXJzZXIgOiBwdWJsaWMgU3RyZWFtUGFyc2VyIHsKLSBwdWJsaWM6Ci0gIE1vY2tTdHJlYW1QYXJzZXIoKTsKLSAgfk1vY2tTdHJlYW1QYXJzZXIoKSBvdmVycmlkZTsKLQotICAvLyBTdHJlYW1QYXJzZXIgaW50ZXJmYWNlCi0gIE1PQ0tfTUVUSE9EOCgKLSAgICAgIEluaXQsIHZvaWQoY29uc3QgSW5pdENCJiBpbml0X2NiLCBjb25zdCBOZXdDb25maWdDQiYgY29uZmlnX2NiLAotICAgICAgICAgICAgICAgICBjb25zdCBOZXdCdWZmZXJzQ0ImIG5ld19idWZmZXJzX2NiLCBib29sIGlnbm9yZV90ZXh0X3RyYWNrLAotICAgICAgICAgICAgICAgICBjb25zdCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgICAgICAgICAgICAgIGNvbnN0IE5ld01lZGlhU2VnbWVudENCJiBuZXdfc2VnbWVudF9jYiwKLSAgICAgICAgICAgICAgICAgY29uc3QgRW5kTWVkaWFTZWdtZW50Q0ImIGVuZF9vZl9zZWdtZW50X2NiLAotICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSk7Ci0gIE1PQ0tfTUVUSE9EMChGbHVzaCwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QyKFBhcnNlLCBib29sKGNvbnN0IHVpbnQ4X3QqLCBpbnQpKTsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb2NrU3RyZWFtUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01PQ0tfRklMVEVSU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3MDMwOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotTW9ja01lZGlhTG9nOjpNb2NrTWVkaWFMb2coKSB7fQotCi1Nb2NrTWVkaWFMb2c6On5Nb2NrTWVkaWFMb2coKSB7fQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjA1ZTE1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTU9DS19NRURJQV9MT0dfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTU9DS19NRURJQV9MT0dfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLQotLy8gSGVscGVyIG1hY3JvcyB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiB2ZXJpZnlpbmcgbWVkaWEgbG9nIGVudHJpZXMuCi0vLyB8b3V0ZXJ8IGlzIHRoZSBzdGQ6OnN0cmluZyBzZWFyY2hlZCBmb3Igc3Vic3RyaW5nIHxzdWJ8LgotI2RlZmluZSBDT05UQUlOU19TVFJJTkcob3V0ZXIsIHN1YikgKHN0ZDo6c3RyaW5nOjpucG9zICE9IChvdXRlcikuZmluZChzdWIpKQotCi0vLyAibWVkaWFfbG9nXyIgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzY29wZWRfcmVmcHRyPE1vY2tNZWRpYUxvZz4sIG9wdGlvbmFsbHkgYQotLy8gU3RyaWN0TW9jaywgaW4gc2NvcGUgb2YgdGhlIHVzYWdlIG9mIHRoaXMgbWFjcm8uCi0jZGVmaW5lIEVYUEVDVF9NRURJQV9MT0coeCkgRVhQRUNUX0NBTEwoKm1lZGlhX2xvZ18sIERvQWRkRXZlbnRMb2dTdHJpbmcoKHgpKSkKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNb2NrTWVkaWFMb2cgOiBwdWJsaWMgTWVkaWFMb2cgewotIHB1YmxpYzoKLSAgTW9ja01lZGlhTG9nKCk7Ci0KLSAgTU9DS19NRVRIT0QxKERvQWRkRXZlbnRMb2dTdHJpbmcsIHZvaWQoY29uc3Qgc3RkOjpzdHJpbmcmIGV2ZW50KSk7Ci0KLSAgLy8gVHJhbXBvbGluZSBtZXRob2QgdG8gd29ya2Fyb3VuZCBHTU9DSyBwcm9ibGVtcyB3aXRoIHN0ZDo6dW5pcXVlX3B0cjw+LgotICAvLyBBbHNvIHNpbXBsaWZpZXMgdGVzdHMgdG8gYmUgYWJsZSB0byBzdHJpbmcgbWF0Y2ggb24gdGhlIGxvZyBzdHJpbmcKLSAgLy8gcmVwcmVzZW50YXRpb24gb24gdGhlIGFkZGVkIGV2ZW50LgotICB2b2lkIEFkZEV2ZW50KHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUxvZ0V2ZW50PiBldmVudCkgb3ZlcnJpZGUgewotICAgIERvQWRkRXZlbnRMb2dTdHJpbmcoTWVkaWFFdmVudFRvTG9nU3RyaW5nKCpldmVudCkpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZpcnR1YWwgfk1vY2tNZWRpYUxvZygpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tNZWRpYUxvZyk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9NT0NLX01FRElBX0xPR19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvbW92aW5nX2F2ZXJhZ2UuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9tb3ZpbmdfYXZlcmFnZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ5NmVkNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9tb3ZpbmdfYXZlcmFnZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21vdmluZ19hdmVyYWdlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotTW92aW5nQXZlcmFnZTo6TW92aW5nQXZlcmFnZShzaXplX3QgZGVwdGgpCi0gICAgOiBkZXB0aF8oZGVwdGgpLCBjb3VudF8oMCksIHNhbXBsZXNfKGRlcHRoXyksIHNxdWFyZV9zdW1fdXNfKDApIHt9Ci0KLU1vdmluZ0F2ZXJhZ2U6On5Nb3ZpbmdBdmVyYWdlKCkge30KLQotdm9pZCBNb3ZpbmdBdmVyYWdlOjpBZGRTYW1wbGUoYmFzZTo6VGltZURlbHRhIHNhbXBsZSkgewotICAvLyB8c2FtcGxlc198IGlzIHplcm8taW5pdGlhbGl6ZWQsIHNvIHxvbGRlc3R8IGlzIGFsc28gemVybyBiZWZvcmUgfGNvdW50X3wKLSAgLy8gZXhjZWVkcyB8ZGVwdGhffC4KLSAgYmFzZTo6VGltZURlbHRhJiBvbGRlc3QgPSBzYW1wbGVzX1tjb3VudF8rKyAlIGRlcHRoX107Ci0gIHRvdGFsXyArPSBzYW1wbGUgLSBvbGRlc3Q7Ci0gIHNxdWFyZV9zdW1fdXNfICs9IHNhbXBsZS5Jbk1pY3Jvc2Vjb25kcygpICogc2FtcGxlLkluTWljcm9zZWNvbmRzKCkgLQotICAgICAgICAgICAgICAgICAgICBvbGRlc3QuSW5NaWNyb3NlY29uZHMoKSAqIG9sZGVzdC5Jbk1pY3Jvc2Vjb25kcygpOwotICBvbGRlc3QgPSBzYW1wbGU7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBNb3ZpbmdBdmVyYWdlOjpBdmVyYWdlKCkgY29uc3QgewotICBEQ0hFQ0tfR1QoY291bnRfLCAwdSk7Ci0KLSAgLy8gVE9ETyhkYWxlY3VydGlzKTogQ29uc2lkZXIgbGltaXRpbmcgfGRlcHRofCB0byBwb3dlcnMgb2YgdHdvIHNvIHRoYXQgd2UgY2FuCi0gIC8vIHJlcGxhY2UgdGhlIGludGVnZXIgZGl2aWRlIHdpdGggYSBiaXQgc2hpZnQgb3BlcmF0aW9uLgotCi0gIHJldHVybiB0b3RhbF8gLyBzdGQ6Om1pbihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGVwdGhfKSwgY291bnRfKTsKLX0KLQotYmFzZTo6VGltZURlbHRhIE1vdmluZ0F2ZXJhZ2U6OkRldmlhdGlvbigpIGNvbnN0IHsKLSAgRENIRUNLX0dUKGNvdW50XywgMHUpOwotCi0gIGNvbnN0IGRvdWJsZSBzaXplID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRlcHRoXyksIGNvdW50Xyk7Ci0gIGNvbnN0IGRvdWJsZSBhdmVyYWdlX3VzID0gdG90YWxfLkluTWljcm9zZWNvbmRzKCkgLyBzaXplOwotICBkb3VibGUgc3FyX2RldmlhdGlvbl91cyA9IHNxdWFyZV9zdW1fdXNfIC8gc2l6ZSAtIGF2ZXJhZ2VfdXMgKiBhdmVyYWdlX3VzOwotICBpZiAoc3FyX2RldmlhdGlvbl91cyA8IDApIHNxcl9kZXZpYXRpb25fdXMgPSAwOwotCi0gIHJldHVybiBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoc3FydChzcXJfZGV2aWF0aW9uX3VzKSk7Ci19Ci0KLXZvaWQgTW92aW5nQXZlcmFnZTo6UmVzZXQoKSB7Ci0gIGNvdW50XyA9IDA7Ci0gIHRvdGFsXyA9IGJhc2U6OlRpbWVEZWx0YSgpOwotICBzcXVhcmVfc3VtX3VzXyA9IDA7Ci0gIHN0ZDo6ZmlsbChzYW1wbGVzXy5iZWdpbigpLCBzYW1wbGVzXy5lbmQoKSwgYmFzZTo6VGltZURlbHRhKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL21vdmluZ19hdmVyYWdlLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9tb3ZpbmdfYXZlcmFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ1Mjc5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21vdmluZ19hdmVyYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfTU9WSU5HX0FWRVJBR0VfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfTU9WSU5HX0FWRVJBR0VfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gU2ltcGxlIGNsYXNzIGZvciBjYWxjdWxhdGluZyBhIG1vdmluZyBhdmVyYWdlIG9mIGZpeGVkIHNpemUuCi1jbGFzcyBNRURJQV9FWFBPUlQgTW92aW5nQXZlcmFnZSB7Ci0gcHVibGljOgotICAvLyBDcmVhdGVzIGEgTW92aW5nQXZlcmFnZSBpbnN0YW5jZSB3aXRoIHNwYWNlIGZvciB8ZGVwdGh8IHNhbXBsZXMuCi0gIGV4cGxpY2l0IE1vdmluZ0F2ZXJhZ2Uoc2l6ZV90IGRlcHRoKTsKLSAgfk1vdmluZ0F2ZXJhZ2UoKTsKLQotICAvLyBBZGRzIGEgbmV3IHNhbXBsZSB0byB0aGUgYXZlcmFnZTsgcmVwbGFjZXMgdGhlIG9sZGVzdCBzYW1wbGUgaWYgfGRlcHRoX3wKLSAgLy8gaGFzIGJlZW4gZXhjZWVkZWQuICBVcGRhdGVzIHx0b3RhbF98IHRvIHRoZSBuZXcgc3VtIG9mIHZhbHVlcy4KLSAgdm9pZCBBZGRTYW1wbGUoYmFzZTo6VGltZURlbHRhIHNhbXBsZSk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBhdmVyYWdlIG9mIGFsbCBoZWxkIHNhbXBsZXMuCi0gIGJhc2U6OlRpbWVEZWx0YSBBdmVyYWdlKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGFsbCBoZWxkIHNhbXBsZXMuCi0gIGJhc2U6OlRpbWVEZWx0YSBEZXZpYXRpb24oKSBjb25zdDsKLQotICAvLyBSZXNldHMgdGhlIHN0YXRlIG9mIHRoZSBjbGFzcyB0byBpdHMgaW5pdGlhbCBwb3N0LWNvbnN0cnVjdGlvbiBzdGF0ZS4KLSAgdm9pZCBSZXNldCgpOwotCi0gIHNpemVfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGNvdW50XzsgfQotCi0gcHJpdmF0ZToKLSAgLy8gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgYWxsb3dlZCBpbiB0aGUgYXZlcmFnZS4KLSAgY29uc3Qgc2l6ZV90IGRlcHRoXzsKLQotICAvLyBOdW1iZXIgb2YgZWxlbWVudHMgc2VlbiB0aHVzIGZhci4KLSAgdWludDY0X3QgY291bnRfOwotCi0gIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4gc2FtcGxlc187Ci0gIGJhc2U6OlRpbWVEZWx0YSB0b3RhbF87Ci0gIHVpbnQ2NF90IHNxdWFyZV9zdW1fdXNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNb3ZpbmdBdmVyYWdlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX01PVklOR19BVkVSQUdFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9tb3ZpbmdfYXZlcmFnZV91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL21vdmluZ19hdmVyYWdlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmZmNjU1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL21vdmluZ19hdmVyYWdlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW92aW5nX2F2ZXJhZ2UuaCIKLQotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVEVTVChNb3ZpbmdBdmVyYWdlVGVzdCwgQXZlcmFnZUFuZERldmlhdGlvbikgewotICBjb25zdCBpbnQga1NhbXBsZXMgPSA1OwotICBNb3ZpbmdBdmVyYWdlIG1vdmluZ19hdmVyYWdlKGtTYW1wbGVzKTsKLSAgbW92aW5nX2F2ZXJhZ2UuQWRkU2FtcGxlKGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMSkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSwgbW92aW5nX2F2ZXJhZ2UuQXZlcmFnZSgpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCBtb3ZpbmdfYXZlcmFnZS5EZXZpYXRpb24oKSk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrU2FtcGxlcyAtIDE7ICsraSkKLSAgICBtb3ZpbmdfYXZlcmFnZS5BZGRTYW1wbGUoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEpLCBtb3ZpbmdfYXZlcmFnZS5BdmVyYWdlKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIG1vdmluZ19hdmVyYWdlLkRldmlhdGlvbigpKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgZXhwZWN0X2RldmlhdGlvbltdID0gewotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDIwMDAwMCksCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMjQ0OTQ4KSwKLSAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygyNDQ5NDgpLAotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDIwMDAwMCksCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksCi0gIH07Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1NhbXBsZXM7ICsraSkgewotICAgIG1vdmluZ19hdmVyYWdlLkFkZFNhbXBsZShiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNTAwKSk7Ci0gICAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMDAwIC0gKGkgKyAxKSAqIDEwMCksCi0gICAgICAgICAgICAgIG1vdmluZ19hdmVyYWdlLkF2ZXJhZ2UoKSk7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdF9kZXZpYXRpb25baV0sIG1vdmluZ19hdmVyYWdlLkRldmlhdGlvbigpKTsKLSAgfQotfQotCi1URVNUKE1vdmluZ0F2ZXJhZ2VUZXN0LCBSZXNldCkgewotICBNb3ZpbmdBdmVyYWdlIG1vdmluZ19hdmVyYWdlKDIpOwotICBtb3ZpbmdfYXZlcmFnZS5BZGRTYW1wbGUoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEpLCBtb3ZpbmdfYXZlcmFnZS5BdmVyYWdlKCkpOwotICBtb3ZpbmdfYXZlcmFnZS5SZXNldCgpOwotICBtb3ZpbmdfYXZlcmFnZS5BZGRTYW1wbGUoYmFzZTo6VGltZURlbHRhKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIG1vdmluZ19hdmVyYWdlLkF2ZXJhZ2UoKSk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgbW92aW5nX2F2ZXJhZ2UuRGV2aWF0aW9uKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZS5oCmluZGV4IDEzYWUwMmYuLjkyMjhjZDMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lLmgKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmUuaApAQCAtMjEsMTUgKzIxLDE1IEBACiAjaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCiAjaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvcmVjdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWVfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvZHJtLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3Jhbmdlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC00NCwyMCArNDQsMjcgQEAKIC8vIENhbGxiYWNrIHRvIHNldCBhbiBEcm1TeXN0ZW1SZWFkeUNCLgogdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IERybVN5c3RlbVJlYWR5Q0ImKT4gU2V0RHJtU3lzdGVtUmVhZHlDQjsKIAotdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKFBpcGVsaW5lU3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYpPiBFcnJvckNCOwordHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzLCBjb25zdCBzdGQ6OnN0cmluZyYpPgorICAgIEVycm9yQ0I7CiAKIC8vIFBpcGVsaW5lIGNvbnRhaW5zIHRoZSBjb21tb24gaW50ZXJmYWNlIGZvciBtZWRpYSBwaXBlbGluZXMuICBJdCBwcm92aWRlcwogLy8gZnVuY3Rpb25zIHRvIHBlcmZvcm0gYXN5bmNocm9ub3VzIGluaXRpYWxpemF0aW9uLCBwYXVzaW5nLCBzZWVraW5nIGFuZAogLy8gcGxheWluZy4KIGNsYXNzIE1FRElBX0VYUE9SVCBQaXBlbGluZSA6IHB1YmxpYyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxQaXBlbGluZT4gewogIHB1YmxpYzoKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZW11eGVyIERlbXV4ZXI7CisgIHR5cGVkZWYgOjptZWRpYTo6TWVkaWFMb2cgTWVkaWFMb2c7CisgIHR5cGVkZWYgOjptZWRpYTo6UGlwZWxpbmVTdGF0aXN0aWNzIFBpcGVsaW5lU3RhdGlzdGljczsKKyAgdHlwZWRlZiA6Om1lZGlhOjpQaXBlbGluZVN0YXR1cyBQaXBlbGluZVN0YXR1czsKKyAgdHlwZWRlZiA6Om1lZGlhOjpQaXBlbGluZVN0YXR1c0NhbGxiYWNrIFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2s7CisKICAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKFBpcGVsaW5lU3RhdHVzIHN0YXR1cywgYm9vbCBpc19pbml0aWFsX3ByZXJvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3JfbWVzc2FnZSk+CiAgICAgICBTZWVrQ0I7CiAKICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIHB1bmNoIHRocm91Z2ggYm94IHNob3VsZCBiZSByZW5kZXJlZC4gIFJldHVybiBmYWxzZSBpZgogICAvLyBubyBwdW5jaCB0aHJvdWdoIGJveCBzaG91bGQgYmUgcmVuZGVyZWQuCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8Ym9vbChjb25zdCBtYXRoOjpSZWN0Jik+IFNldEJvdW5kc0NCOworICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPGJvb2woaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpPiBTZXRCb3VuZHNDQjsKIAogICAvLyBDYWxsIHRvIGdldCB0aGUgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlciBmb3IgU2JQbGF5ZXJDcmVhdGUoKS4KICAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKigpPgpAQCAtNzgsNyArODUsOCBAQAogCiAgIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChCdWZmZXJpbmdTdGF0ZSk+IEJ1ZmZlcmluZ1N0YXRlQ0I7CiAjaWYgU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKEVtZUluaXREYXRhVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mKT4KKyAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IGNoYXIqIGluaXRfZGF0YV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mKT4KICAgICAgIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkQ0I7CiAjZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCiAKQEAgLTExOCw3ICsxMjYsNyBAQAogICAvLyBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSBwaXBlbGluZSBoYXMgYWxyZWFkeSBzdGFydGVkLgogICB2aXJ0dWFsIHZvaWQgU3RhcnQoRGVtdXhlciogZGVtdXhlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNldERybVN5c3RlbVJlYWR5Q0ImIHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgZW5kZWRfY2IsIGNvbnN0IEVycm9yQ0ImIGVycm9yX2NiLAorICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBlbmRlZF9jYiwgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTZWVrQ0ImIHNlZWtfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJpbmdTdGF0ZUNCJiBidWZmZXJpbmdfc3RhdGVfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiBkdXJhdGlvbl9jaGFuZ2VfY2IsCkBAIC0xMzIsNyArMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkQ0ImCiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9lbmNvdW50ZXJlZF9jYiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfdXJsLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgZW5kZWRfY2IsIGNvbnN0IEVycm9yQ0ImIGVycm9yX2NiLAorICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBlbmRlZF9jYiwgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTZWVrQ0ImIHNlZWtfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJpbmdTdGF0ZUNCJiBidWZmZXJpbmdfc3RhdGVfY2IsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiBkdXJhdGlvbl9jaGFuZ2VfY2IsCkBAIC0xODgsNyArMTk2LDcgQEAKICAgdmlydHVhbCBiYXNlOjpUaW1lRGVsdGEgR2V0TWVkaWFUaW1lKCkgPSAwOwogCiAgIC8vIEdldCBhcHByb3hpbWF0ZSB0aW1lIHJhbmdlcyBvZiBidWZmZXJlZCBtZWRpYS4KLSAgdmlydHVhbCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiBHZXRCdWZmZXJlZFRpbWVSYW5nZXMoKSA9IDA7CisgIHZpcnR1YWwgOjptZWRpYTo6UmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gR2V0QnVmZmVyZWRUaW1lUmFuZ2VzKCkgPSAwOwogCiAgIC8vIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIGluIG1pY3Jvc2Vjb25kcy4gIElmIHRoZSBkdXJhdGlvbiBoYXMgbm90CiAgIC8vIGJlZW4gZGV0ZXJtaW5lZCB5ZXQsIHRoZW4gcmV0dXJuIDAuCkBAIC0yMDUsNyArMjEzLDcgQEAKICAgLy8gR2V0cyB0aGUgbmF0dXJhbCBzaXplIG9mIHRoZSB2aWRlbyBvdXRwdXQgaW4gcGl4ZWwgdW5pdHMuICBJZiB0aGVyZSBpcyBubwogICAvLyB2aWRlbyBvciB0aGUgdmlkZW8gaGFzIG5vdCBiZWVuIHJlbmRlcmVkIHlldCwgdGhlIHdpZHRoIGFuZCBoZWlnaHQgd2lsbAogICAvLyBiZSAwLgotICB2aXJ0dWFsIHZvaWQgR2V0TmF0dXJhbFZpZGVvU2l6ZShtYXRoOjpTaXplKiBvdXRfc2l6ZSkgY29uc3QgPSAwOworICB2aXJ0dWFsIHZvaWQgR2V0TmF0dXJhbFZpZGVvU2l6ZShnZng6OlNpemUqIG91dF9zaXplKSBjb25zdCA9IDA7CiAKICAgLy8gUmV0dXJuIHRydWUgaWYgbG9hZGluZyBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcwogICAvLyBtZXRob2Qgd2FzIGNhbGxlZC4KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX21ldGFkYXRhLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZV9tZXRhZGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2Y0NzkxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX21ldGFkYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfUElQRUxJTkVfTUVUQURBVEFfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfUElQRUxJTkVfTUVUQURBVEFfSF8KLQotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3JvdGF0aW9uLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gTWV0YWRhdGEgZGVzY3JpYmluZyBhIHBpcGVsaW5lIG9uY2UgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCi1zdHJ1Y3QgUGlwZWxpbmVNZXRhZGF0YSB7Ci0gIFBpcGVsaW5lTWV0YWRhdGEoKQotICAgICAgOiBoYXNfYXVkaW8oZmFsc2UpLCBoYXNfdmlkZW8oZmFsc2UpLCB2aWRlb19yb3RhdGlvbihWSURFT19ST1RBVElPTl8wKSB7fQotCi0gIGJvb2wgaGFzX2F1ZGlvOwotICBib29sIGhhc192aWRlbzsKLSAgbWF0aDo6U2l6ZSBuYXR1cmFsX3NpemU7Ci0gIFZpZGVvUm90YXRpb24gdmlkZW9fcm90YXRpb247Ci0gIGJhc2U6OlRpbWUgdGltZWxpbmVfb2Zmc2V0OwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfUElQRUxJTkVfTUVUQURBVEFfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YTVkNTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1BJUEVMSU5FX1NUQVRVU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9QSVBFTElORV9TVEFUVVNfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBTdGF0dXMgc3RhdGVzIGZvciBwaXBlbGluZS4gIEFsbCBjb2RlcyBleGNlcHQgUElQRUxJTkVfT0sgaW5kaWNhdGUgZXJyb3JzLgotLy8gTG9nZ2VkIHRvIFVNQSwgc28gbmV2ZXIgcmV1c2UgYSB2YWx1ZSwgYWx3YXlzIGFkZCBuZXcvZ3JlYXRlciBvbmVzIQotZW51bSBQaXBlbGluZVN0YXR1cyB7Ci0gIFBJUEVMSU5FX09LID0gMCwKLSAgLy8gRGVwcmVjYXRlZDogUElQRUxJTkVfRVJST1JfVVJMX05PVF9GT1VORCA9IDEsCi0gIFBJUEVMSU5FX0VSUk9SX05FVFdPUksgPSAyLAotICBQSVBFTElORV9FUlJPUl9ERUNPREUgPSAzLAotICAvLyBEZXByZWNhdGVkOiBQSVBFTElORV9FUlJPUl9ERUNSWVBUID0gNCwKLSAgUElQRUxJTkVfRVJST1JfQUJPUlQgPSA1LAotICBQSVBFTElORV9FUlJPUl9JTklUSUFMSVpBVElPTl9GQUlMRUQgPSA2LAotICBQSVBFTElORV9FUlJPUl9DT1VMRF9OT1RfUkVOREVSID0gOCwKLSAgUElQRUxJTkVfRVJST1JfUkVBRCA9IDksCi0gIC8vIERlcHJlY2F0ZWQ6IFBJUEVMSU5FX0VSUk9SX09QRVJBVElPTl9QRU5ESU5HID0gMTAsCi0gIFBJUEVMSU5FX0VSUk9SX0lOVkFMSURfU1RBVEUgPSAxMSwKLSAgUElQRUxJTkVfRVJST1JfRVhURVJOQUxfUkVOREVSRVJfRkFJTEVEID0gMjEsCi0KLSAgLy8gRGVtdXhlciByZWxhdGVkIGVycm9ycy4KLSAgREVNVVhFUl9FUlJPUl9DT1VMRF9OT1RfT1BFTiA9IDEyLAotICBERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRSA9IDEzLAotICBERU1VWEVSX0VSUk9SX05PX1NVUFBPUlRFRF9TVFJFQU1TID0gMTQsCi0KLSAgLy8gRGVjb2RlciByZWxhdGVkIGVycm9ycy4KLSAgREVDT0RFUl9FUlJPUl9OT1RfU1VQUE9SVEVEID0gMTUsCi0KLSAgLy8gQ2h1bmtEZW11eGVyIHJlbGF0ZWQgZXJyb3JzLgotICBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQgPSAxNiwKLSAgQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX0RFQ09ERV9FUlJPUiA9IDE3LAotICBDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfTkVUV09SS19FUlJPUiA9IDE4LAotCi0gIC8vIEF1ZGlvIHJlbmRlcmluZyBlcnJvcnMuCi0gIEFVRElPX1JFTkRFUkVSX0VSUk9SID0gMTksCi0gIEFVRElPX1JFTkRFUkVSX0VSUk9SX1NQTElDRV9GQUlMRUQgPSAyMCwKLQotICAvLyBUcmFuc2llbnQgZXJyb3JzLgotICBQTEFZQkFDS19DQVBBQklMSVRZX0NIQU5HRUQgPSAyMiwKLQotICAvLyBNdXN0IGJlIGVxdWFsIHRvIHRoZSBsYXJnZXN0IHZhbHVlIGV2ZXIgbG9nZ2VkLgotICBQSVBFTElORV9TVEFUVVNfTUFYID0gUExBWUJBQ0tfQ0FQQUJJTElUWV9DSEFOR0VELAotfTsKLQotdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKFBpcGVsaW5lU3RhdHVzKT4gUGlwZWxpbmVTdGF0dXNDQjsKLQotc3RydWN0IFBpcGVsaW5lU3RhdGlzdGljcyB7Ci0gIHVpbnQ2NF90IGF1ZGlvX2J5dGVzX2RlY29kZWQ7Ci0gIHVpbnQ2NF90IHZpZGVvX2J5dGVzX2RlY29kZWQ7Ci0gIHVpbnQzMl90IHZpZGVvX2ZyYW1lc19kZWNvZGVkOwotICB1aW50MzJfdCB2aWRlb19mcmFtZXNfZHJvcHBlZDsKLSAgaW50NjRfdCBhdWRpb19tZW1vcnlfdXNhZ2U7Ci0gIGludDY0X3QgdmlkZW9fbWVtb3J5X3VzYWdlOwotCi0gIFBpcGVsaW5lU3RhdGlzdGljcygpCi0gICAgICA6IGF1ZGlvX2J5dGVzX2RlY29kZWQoMCksCi0gICAgICAgIHZpZGVvX2J5dGVzX2RlY29kZWQoMCksCi0gICAgICAgIHZpZGVvX2ZyYW1lc19kZWNvZGVkKDApLAotICAgICAgICB2aWRlb19mcmFtZXNfZHJvcHBlZCgwKSwKLSAgICAgICAgYXVkaW9fbWVtb3J5X3VzYWdlKDApLAotICAgICAgICB2aWRlb19tZW1vcnlfdXNhZ2UoMCkge30KLX07Ci0KLS8vIFVzZWQgZm9yIHVwZGF0aW5nIHBpcGVsaW5lIHN0YXRpc3RpY3M7IHRoZSBwYXNzZWQgdmFsdWUgc2hvdWxkIGJlIGEgZGVsdGEKLS8vIG9mIGFsbCBhdHRyaWJ1dGVzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KLXR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBQaXBlbGluZVN0YXRpc3RpY3MmKT4gU3RhdGlzdGljc0NCOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9QSVBFTElORV9TVEFUVVNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9wbGF5YmFja19zdGF0aXN0aWNzLmNjCmluZGV4IGZmNDlkNzEuLmZmYjUxZjggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuY2MKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvcGxheWJhY2tfc3RhdGlzdGljcy5jYwpAQCAtMjUsNiArMjUsOSBAQAogbmFtZXNwYWNlIG1lZGlhIHsKIG5hbWVzcGFjZSB7CiAKK3VzaW5nIDo6bWVkaWE6OkdldENvZGVjTmFtZTsKK3VzaW5nIDo6bWVkaWE6OlZpZGVvQ29kZWM7CisKIHZvbGF0aWxlIFNiQXRvbWljMzIgc19tYXhfYWN0aXZlX2luc3RhbmNlcyA9IDA7CiB2b2xhdGlsZSBTYkF0b21pYzMyIHNfYWN0aXZlX2luc3RhbmNlcyA9IDA7CiB2b2xhdGlsZSBTYkF0b21pYzMyIHNfYXYxX3BsYXllZCA9IDA7CkBAIC0zNSw3ICszOCw4IEBACiB2b2xhdGlsZSBTYkF0b21pYzMyIHNfbWluX3ZpZGVvX2hlaWdodCA9IDk5OTk5OTsKIHZvbGF0aWxlIFNiQXRvbWljMzIgc19tYXhfdmlkZW9fd2lkdGggPSAwOwogdm9sYXRpbGUgU2JBdG9taWMzMiBzX21heF92aWRlb19oZWlnaHQgPSAwOwotdm9sYXRpbGUgU2JBdG9taWMzMiBzX2xhc3Rfd29ya2luZ19jb2RlYyA9IGtVbmtub3duVmlkZW9Db2RlYzsKK3ZvbGF0aWxlIFNiQXRvbWljMzIgc19sYXN0X3dvcmtpbmdfY29kZWMgPQorICAgIHN0YXRpY19jYXN0PFNiQXRvbWljMzI+KFZpZGVvQ29kZWM6OmtVbmtub3duKTsKIAogaW50NjRfdCBSb3VuZFZhbHVlKGludDY0X3QgdmFsdWUpIHsKICAgaWYgKHZhbHVlIDwgMTApIHsKQEAgLTEyMSw3ICsxMjUsOCBAQAogICAgICAgICAgIGZhbHNlLCAiSW5kaWNhdG9yIG9mIGlmIHRoZSB2aWRlbyBlb3MgaXMgd3JpdHRlbi4iKSwKICAgICAgIHBpcGVsaW5lX3N0YXR1c18oYmFzZTo6U3RyaW5nUHJpbnRmKCJNZWRpYS5QaXBlbGluZS4lcy5QaXBlbGluZVN0YXR1cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZV9pZGVudGlmaWVyLmNfc3RyKCkpLAotICAgICAgICAgICAgICAgICAgICAgICBQSVBFTElORV9PSywgIlRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIHBpcGVsaW5lLiIpLAorICAgICAgICAgICAgICAgICAgICAgICA6Om1lZGlhOjpQSVBFTElORV9PSywKKyAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzdGF0dXMgb2YgdGhlIG1lZGlhIHBpcGVsaW5lLiIpLAogICAgICAgZXJyb3JfbWVzc2FnZV8oYmFzZTo6U3RyaW5nUHJpbnRmKCJNZWRpYS5QaXBlbGluZS4lcy5FcnJvck1lc3NhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lX2lkZW50aWZpZXIuY19zdHIoKSksCiAgICAgICAgICAgICAgICAgICAgICAiIiwgIlRoZSBlcnJvciBtZXNzYWdlIG9mIHRoZSBtZWRpYSBwaXBlbGluZSBlcnJvci4iKSB7fQpAQCAtMTQyLDEzICsxNDcsMTMgQEAKIAogICAgIFVwZGF0ZU1heFZhbHVlKHNfYWN0aXZlX2luc3RhbmNlcywgJnNfbWF4X2FjdGl2ZV9pbnN0YW5jZXMpOwogCi0gICAgaWYgKHZpZGVvX2NvbmZpZy5jb2RlYygpID09IGtDb2RlY0FWMSkgeworICAgIGlmICh2aWRlb19jb25maWcuY29kZWMoKSA9PSBWaWRlb0NvZGVjOjprQVYxKSB7CiAgICAgICBTYkF0b21pY0JhcnJpZXJfSW5jcmVtZW50KCZzX2F2MV9wbGF5ZWQsIDEpOwotICAgIH0gZWxzZSBpZiAodmlkZW9fY29uZmlnLmNvZGVjKCkgPT0ga0NvZGVjSDI2NCkgeworICAgIH0gZWxzZSBpZiAodmlkZW9fY29uZmlnLmNvZGVjKCkgPT0gVmlkZW9Db2RlYzo6a0gyNjQpIHsKICAgICAgIFNiQXRvbWljQmFycmllcl9JbmNyZW1lbnQoJnNfaDI2NF9wbGF5ZWQsIDEpOwotICAgIH0gZWxzZSBpZiAodmlkZW9fY29uZmlnLmNvZGVjKCkgPT0ga0NvZGVjSEVWQykgeworICAgIH0gZWxzZSBpZiAodmlkZW9fY29uZmlnLmNvZGVjKCkgPT0gVmlkZW9Db2RlYzo6a0hFVkMpIHsKICAgICAgIFNiQXRvbWljQmFycmllcl9JbmNyZW1lbnQoJnNfaGV2Y19wbGF5ZWQsIDEpOwotICAgIH0gZWxzZSBpZiAodmlkZW9fY29uZmlnLmNvZGVjKCkgPT0ga0NvZGVjVlA5KSB7CisgICAgfSBlbHNlIGlmICh2aWRlb19jb25maWcuY29kZWMoKSA9PSBWaWRlb0NvZGVjOjprVlA5KSB7CiAgICAgICBTYkF0b21pY0JhcnJpZXJfSW5jcmVtZW50KCZzX3ZwOV9wbGF5ZWQsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICBTQl9OT1RSRUFDSEVEKCk7CkBAIC0xNzIsNyArMTc3LDggQEAKIAogCiB2b2lkIFBsYXliYWNrU3RhdGlzdGljczo6T25QcmVzZW50aW5nKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnKSB7Ci0gIFNiQXRvbWljTm9CYXJyaWVyX1N0b3JlKCZzX2xhc3Rfd29ya2luZ19jb2RlYywgdmlkZW9fY29uZmlnLmNvZGVjKCkpOworICBTYkF0b21pY05vQmFycmllcl9TdG9yZSgmc19sYXN0X3dvcmtpbmdfY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNiQXRvbWljMzI+KHZpZGVvX2NvbmZpZy5jb2RlYygpKSk7CiB9CiAKIHZvaWQgUGxheWJhY2tTdGF0aXN0aWNzOjpPblNlZWsoY29uc3QgYmFzZTo6VGltZURlbHRhJiBzZWVrX3RpbWUpIHsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuaAppbmRleCA3NTA3YjMxLi4yMjBkNDcyIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9wbGF5YmFja19zdGF0aXN0aWNzLmgKKysrIGIvY29iYWx0L21lZGlhL2Jhc2UvcGxheWJhY2tfc3RhdGlzdGljcy5oCkBAIC0yMCwxNSArMjAsMTkgQEAKICNpbmNsdWRlICJiYXNlL29wdGlvbmFsLmgiCiAjaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9jX3ZhbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKIAogY2xhc3MgUGxheWJhY2tTdGF0aXN0aWNzIHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6RGVjb2RlckJ1ZmZlciBEZWNvZGVyQnVmZmVyOworICB0eXBlZGVmIDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIFBpcGVsaW5lU3RhdHVzOworICB0eXBlZGVmIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZyBWaWRlb0RlY29kZXJDb25maWc7CisKICAgZXhwbGljaXQgUGxheWJhY2tTdGF0aXN0aWNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBwaXBlbGluZV9pZGVudGlmaWVyKTsKICAgflBsYXliYWNrU3RhdGlzdGljcygpOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDAzZWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Jhbmdlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXRlbXBsYXRlIDw+Ci12b2lkIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+OjpEQ2hlY2tMVChjb25zdCBiYXNlOjpUaW1lRGVsdGEmIGxocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgcmhzKSBjb25zdCB7Ci0gIERDSEVDSyhsaHMgPCByaHMpIDw8IGxocy5Ub0ludGVybmFsVmFsdWUoKSA8PCAiIDwgIiA8PCByaHMuVG9JbnRlcm5hbFZhbHVlKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBmMjlhNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1JBTkdFU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9SQU5HRVNfSF8KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxvc3RyZWFtPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBSYW5nZXMgYWxsb3dzIGhvbGRpbmcgYW4gb3JkZXJlZCBsaXN0IG9mIHJhbmdlcyBvZiBbc3RhcnQsZW5kKSBpbnRlcnZhbHMuCi0vLyBUaGUgY2Fub25pY2FsIGV4YW1wbGUgdXNlLWNhc2UgaXMgaG9sZGluZyB0aGUgbGlzdCBvZiByYW5nZXMgb2YgYnVmZmVyZWQKLS8vIGJ5dGVzIG9yIHRpbWVzIGluIGEgPHZpZGVvPiB0YWcuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gIC8vIEVuZHBvaW50IHR5cGU7IHR5cGljYWxseSBhIGJhc2U6OlRpbWVEZWx0YSBvciBhbiBpbnQ2NF90LgotY2xhc3MgUmFuZ2VzIHsKLSBwdWJsaWM6Ci0gIC8vIEFsbG93IGNvcHkgJiBhc3NpZ24uCi0KLSAgLy8gQWRkIChzdGFydCxlbmQpIHRvIHRoaXMgb2JqZWN0LCBjb2FsbGVzY2luZyBvdmVybGFwcyBhcyBhcHByb3ByaWF0ZS4KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0b3JlZCByYW5nZXMsIHBvc3QgY29hbGxlc2NpbmcuCi0gIHNpemVfdCBBZGQoVCBzdGFydCwgVCBlbmQpOwotCi0gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGRpc2pvaW50IHJhbmdlcy4KLSAgc2l6ZV90IHNpemUoKSBjb25zdDsKLQotICAvLyBSZXR1cm4gdGhlICJpIid0aCByYW5nZSdzIHN0YXJ0ICYgZW5kICgwLWJhc2VkKS4KLSAgVCBzdGFydChzaXplX3QgaSkgY29uc3Q7Ci0gIFQgZW5kKHNpemVfdCBpKSBjb25zdDsKLQotICAvLyBDbGVhciBhbGwgcmFuZ2VzLgotICB2b2lkIGNsZWFyKCk7Ci0KLSAgLy8gQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoaXMgcmFuZ2UgYW5kIHxvdGhlcnwuCi0gIFJhbmdlczxUPiBJbnRlcnNlY3Rpb25XaXRoKGNvbnN0IFJhbmdlczxUPiYgb3RoZXIpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gV3JhcHBlciBhcm91bmQgRENIRUNLX0xUIGFsbG93aW5nIGNvbXBhcmlzb25zIG9mIG9wZXJhdG9yPDwnYWJsZSBUJ3MuCi0gIHZvaWQgRENoZWNrTFQoY29uc3QgVCYgbGhzLCBjb25zdCBUJiByaHMpIGNvbnN0OwotCi0gIC8vIERpc2pvaW50LCBpbiBpbmNyZWFzaW5nIG9yZGVyIG9mIHN0YXJ0LgotICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8VCwgVD4gPiByYW5nZXNfOwotfTsKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRVZFUllUSElORyBCRUxPVyBIRVJFIElTIElNUExFTUVOVEFUSU9OIERFVEFJTCEhCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc2l6ZV90IFJhbmdlczxUPjo6QWRkKFQgc3RhcnQsIFQgZW5kKSB7Ci0gIGlmIChzdGFydCA9PSBlbmQpICAvLyBOb3RoaW5nIHRvIGJlIGRvbmUgd2l0aCBlbXB0eSByYW5nZXMuCi0gICAgcmV0dXJuIHJhbmdlc18uc2l6ZSgpOwotCi0gIERDaGVja0xUKHN0YXJ0LCBlbmQpOwotICBzaXplX3QgaTsKLSAgLy8gV2FsayBhbG9uZyB0aGUgYXJyYXkgb2YgcmFuZ2VzIHVudGlsIHxzdGFydHwgaXMgbm8gbG9uZ2VyIGxhcmdlciB0aGFuIHRoZQotICAvLyBjdXJyZW50IGludGVydmFsJ3MgZW5kLgotICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzXy5zaXplKCkgJiYgcmFuZ2VzX1tpXS5zZWNvbmQgPCBzdGFydDsgKytpKSB7Ci0gICAgLy8gRW1wdHkgYm9keQotICB9Ci0KLSAgLy8gTm93IHdlIGtub3cgfHN0YXJ0fCBiZWxvbmdzIGluIHRoZSBpJ3RoIHNsb3QuCi0gIC8vIElmIGkgaXMgdGhlIGVuZCBvZiB0aGUgcmFuZ2UsIGFwcGVuZCBuZXcgcmFuZ2UgYW5kIGRvbmUuCi0gIGlmIChpID09IHJhbmdlc18uc2l6ZSgpKSB7Ci0gICAgcmFuZ2VzXy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIoc3RhcnQsIGVuZCkpOwotICAgIHJldHVybiByYW5nZXNfLnNpemUoKTsKLSAgfQotCi0gIC8vIElmIHxlbmR8IGlzIGxlc3MgdGhhbiBpLT5maXJzdCwgdGhlbiBbc3RhcnQsZW5kKSBpcyBhIG5ldyAobm9uLW92ZXJsYXBwaW5nKQotICAvLyBpJ3RoIGVudHJ5IHB1c2hpbmcgZXZlcnlvbmUgZWxzZSBiYWNrLCBhbmQgZG9uZS4KLSAgaWYgKGVuZCA8IHJhbmdlc19baV0uZmlyc3QpIHsKLSAgICByYW5nZXNfLmluc2VydChyYW5nZXNfLmJlZ2luKCkgKyBpLCBzdGQ6Om1ha2VfcGFpcihzdGFydCwgZW5kKSk7Ci0gICAgcmV0dXJuIHJhbmdlc18uc2l6ZSgpOwotICB9Ci0KLSAgLy8gRWFzeSBjYXNlcyBkb25lLiAgR2V0dGluZyBoZXJlIG1lYW5zIHRoZXJlIGlzIG92ZXJsYXAgYmV0d2VlbiBbc3RhcnQsZW5kKQotICAvLyBhbmQgdGhlIGV4aXN0aW5nIHJhbmdlcy4KLQotICAvLyBOb3c6IHN0YXJ0IDw9IGktPnNlY29uZCAmJiBpLT5maXJzdCA8PSBlbmQKLSAgaWYgKHN0YXJ0IDwgcmFuZ2VzX1tpXS5maXJzdCkgcmFuZ2VzX1tpXS5maXJzdCA9IHN0YXJ0OwotICBpZiAocmFuZ2VzX1tpXS5zZWNvbmQgPCBlbmQpIHJhbmdlc19baV0uc2Vjb25kID0gZW5kOwotCi0gIC8vIE5vdzogW3N0YXJ0LGVuZCkgaXMgY29udGFpbmVkIGluIHRoZSBpJ3RoIHJhbmdlLCBhbmQgd2UnZCBiZSBkb25lLCBleGNlcHQKLSAgLy8gZm9yIHRoZSBmYWN0IHRoYXQgdGhlIG5ld2x5LWV4dGVuZGVkIGkndGggcmFuZ2UgbWlnaHQgbm93IG92ZXJsYXAKLSAgLy8gc3Vic2VxdWVudCByYW5nZXMuICBNZXJnZSB1bnRpbCBkaXNjb250aW51aXRpZXMgYXBwZWFyLiAgTm90ZSB0aGF0IHRoZXJlJ3MKLSAgLy8gbm8gbmVlZCB0byB0ZXN0L21lcmdlIHByZXZpb3VzIHJhbmdlcywgc2luY2UgbmVlZGluZyB0aGF0IHdvdWxkIG1lYW4gdGhlCi0gIC8vIG9yaWdpbmFsIGxvb3Agd2VudCB0b28gZmFyLgotICB3aGlsZSAoKGkgKyAxKSA8IHJhbmdlc18uc2l6ZSgpICYmCi0gICAgICAgICByYW5nZXNfW2kgKyAxXS5maXJzdCA8PSByYW5nZXNfW2ldLnNlY29uZCkgewotICAgIHJhbmdlc19baV0uc2Vjb25kID0gc3RkOjptYXgocmFuZ2VzX1tpXS5zZWNvbmQsIHJhbmdlc19baSArIDFdLnNlY29uZCk7Ci0gICAgcmFuZ2VzXy5lcmFzZShyYW5nZXNfLmJlZ2luKCkgKyBpICsgMSk7Ci0gIH0KLQotICByZXR1cm4gcmFuZ2VzXy5zaXplKCk7Ci19Ci0KLXRlbXBsYXRlIDw+Ci1NRURJQV9FWFBPUlQgdm9pZCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPjo6RENoZWNrTFQoCi0gICAgY29uc3QgYmFzZTo6VGltZURlbHRhJiBsaHMsIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgcmhzKSBjb25zdDsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIFJhbmdlczxUPjo6RENoZWNrTFQoY29uc3QgVCYgbGhzLCBjb25zdCBUJiByaHMpIGNvbnN0IHsKLSAgRENIRUNLX0xUKGxocywgcmhzKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zaXplX3QgUmFuZ2VzPFQ+OjpzaXplKCkgY29uc3QgewotICByZXR1cm4gcmFuZ2VzXy5zaXplKCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotVCBSYW5nZXM8VD46OnN0YXJ0KHNpemVfdCBpKSBjb25zdCB7Ci0gIHJldHVybiByYW5nZXNfW2ldLmZpcnN0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLVQgUmFuZ2VzPFQ+OjplbmQoc2l6ZV90IGkpIGNvbnN0IHsKLSAgcmV0dXJuIHJhbmdlc19baV0uc2Vjb25kOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgUmFuZ2VzPFQ+OjpjbGVhcigpIHsKLSAgcmFuZ2VzXy5jbGVhcigpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4KLVJhbmdlczxUPiBSYW5nZXM8VD46OkludGVyc2VjdGlvbldpdGgoY29uc3QgUmFuZ2VzPFQ+JiBvdGhlcikgY29uc3QgewotICBSYW5nZXM8VD4gcmVzdWx0OwotCi0gIHNpemVfdCBpID0gMDsKLSAgc2l6ZV90IGogPSAwOwotCi0gIHdoaWxlIChpIDwgc2l6ZSgpICYmIGogPCBvdGhlci5zaXplKCkpIHsKLSAgICBUIG1heF9zdGFydCA9IHN0ZDo6bWF4KHN0YXJ0KGkpLCBvdGhlci5zdGFydChqKSk7Ci0gICAgVCBtaW5fZW5kID0gc3RkOjptaW4oZW5kKGkpLCBvdGhlci5lbmQoaikpOwotCi0gICAgLy8gQWRkIGFuIGludGVyc2VjdGlvbiByYW5nZSB0byB0aGUgcmVzdWx0IGlmIHRoZSByYW5nZXMgb3ZlcmxhcC4KLSAgICBpZiAobWF4X3N0YXJ0IDwgbWluX2VuZCkgcmVzdWx0LkFkZChtYXhfc3RhcnQsIG1pbl9lbmQpOwotCi0gICAgaWYgKGVuZChpKSA8IG90aGVyLmVuZChqKSkKLSAgICAgICsraTsKLSAgICBlbHNlCi0gICAgICArK2o7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBGb3IgbG9nZ2luZyB1c2Ugb25seS4KLXRlbXBsYXRlIDxjbGFzcyBUPgotQkFTRV9FWFBPUlQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmFuZ2VzPFQ+JiByYW5nZXMpIHsKLSAgb3MgPDwgcmFuZ2VzLnNpemUoKSA8PCAiICgiOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewotICAgIG9zIDw8ICdbJyA8PCByYW5nZXMuc3RhcnQoaSkgPDwgIiwgIiA8PCByYW5nZXMuZW5kKGkpIDw8ICddJzsKLSAgICBpZiAoaSAhPSByYW5nZXMuc2l6ZSgpIC0gMSkgewotICAgICAgb3MgPDwgIiwgIjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIG9zIDw8ICcpJzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfUkFOR0VTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDBhZjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaCIKLQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3BpZWNlLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSHVtYW4tcmVhZGFibGUgb3V0cHV0IG9wZXJhdG9yLCBmb3IgZGVidWdnaW5nL3Rlc3RhYmlsaXR5LgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgUmFuZ2VzPFQ+JiByKSB7Ci0gIG9zIDw8ICJ7ICI7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgci5zaXplKCk7ICsraSkKLSAgICBvcyA8PCAiWyIgPDwgci5zdGFydChpKSA8PCAiLCIgPDwgci5lbmQoaSkgPDwgIikgIjsKLSAgb3MgPDwgIn0iOwotICByZXR1cm4gb3M7Ci19Ci0KLS8vIEhlbHBlciBtZXRob2QgZm9yIGFzc2VydGluZyBzdHJpbmdpZmllZCBmb3JtIG9mIHxyfCBtYXRjaGVzIGV4cGVjdGF0aW9uLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zdGF0aWMgdm9pZCBFeHBlY3RSYW5nZXMoY29uc3QgUmFuZ2VzPFQ+JiByLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlN0cmluZ1BpZWNlJiBleHBlY3RlZF9zdHJpbmcpIHsKLSAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gIHNzIDw8IHI7Ci0gIEFTU0VSVF9FUShzcy5zdHIoKSwgZXhwZWN0ZWRfc3RyaW5nKTsKLX0KLQotI2RlZmluZSBBU1NFUlRfUkFOR0VTKHJhbmdlcywgZXhwZWN0YXRpb24pIFwKLSAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoRXhwZWN0UmFuZ2VzKHJhbmdlcywgZXhwZWN0YXRpb24pKTsKLQotVEVTVChSYW5nZXNUZXN0LCBTaW1wbGVUZXN0cykgewotICBSYW5nZXM8aW50PiByOwotICBBU1NFUlRfRVEoci5zaXplKCksIDB1KSA8PCByOwotICBBU1NFUlRfRVEoci5BZGQoMCwgMSksIDF1KSA8PCByOwotICBBU1NFUlRfRVEoci5zaXplKCksIDF1KSA8PCByOwotICBBU1NFUlRfUkFOR0VTKHIsICJ7IFswLDEpIH0iKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDIsIDMpLCAydSkgPDwgcjsKLSAgQVNTRVJUX1JBTkdFUyhyLCAieyBbMCwxKSBbMiwzKSB9Iik7Ci0gIEFTU0VSVF9FUShyLkFkZCgxLCAyKSwgMXUpIDw8IHI7Ci0gIEFTU0VSVF9SQU5HRVMociwgInsgWzAsMykgfSIpOwotICBBU1NFUlRfRVEoci5BZGQoMSwgNCksIDF1KSA8PCByOwotICBBU1NFUlRfUkFOR0VTKHIsICJ7IFswLDQpIH0iKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDcsIDkpLCAydSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDUsIDYpLCAzdSkgPDwgcjsKLSAgQVNTRVJUX1JBTkdFUyhyLCAieyBbMCw0KSBbNSw2KSBbNyw5KSB9Iik7Ci0gIEFTU0VSVF9FUShyLkFkZCg2LCA3KSwgMnUpIDw8IHI7Ci0gIEFTU0VSVF9SQU5HRVMociwgInsgWzAsNCkgWzUsOSkgfSIpOwotfQotCi1URVNUKFJhbmdlc1Rlc3QsIEV4dGVuZFJhbmdlKSB7Ci0gIFJhbmdlczxkb3VibGU+IHI7Ci0gIEFTU0VSVF9FUShyLkFkZCgwLCAxKSwgMXUpIDw8IHI7Ci0gIEFTU0VSVF9FUShyLkFkZCgwLjUsIDEuNSksIDF1KSA8PCByOwotICBBU1NFUlRfUkFOR0VTKHIsICJ7IFswLDEuNSkgfSIpOwotCi0gIHIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDAsIDEpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKC0wLjUsIDAuNSksIDF1KSA8PCByOwotICBBU1NFUlRfUkFOR0VTKHIsICJ7IFstMC41LDEpIH0iKTsKLQotICByLmNsZWFyKCk7Ci0gIEFTU0VSVF9FUShyLkFkZCgwLCAxKSwgMXUpIDw8IHI7Ci0gIEFTU0VSVF9FUShyLkFkZCgyLCAzKSwgMnUpIDw8IHI7Ci0gIEFTU0VSVF9FUShyLkFkZCg0LCA1KSwgM3UpIDw8IHI7Ci0gIEFTU0VSVF9FUShyLkFkZCgwLjUsIDEuNSksIDN1KSA8PCByOwotICBBU1NFUlRfUkFOR0VTKHIsICJ7IFswLDEuNSkgWzIsMykgWzQsNSkgfSIpOwotCi0gIHIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDAsIDEpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDIsIDMpLCAydSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDQsIDUpLCAzdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDEuNSwgMi41KSwgM3UpIDw8IHI7Ci0gIEFTU0VSVF9SQU5HRVMociwgInsgWzAsMSkgWzEuNSwzKSBbNCw1KSB9Iik7Ci19Ci0KLVRFU1QoUmFuZ2VzVGVzdCwgQ29hbGVzY2VSYW5nZXMpIHsKLSAgUmFuZ2VzPGRvdWJsZT4gcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDAsIDEpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDIsIDMpLCAydSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDQsIDUpLCAzdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDAuNSwgMi41KSwgMnUpIDw8IHI7Ci0gIEFTU0VSVF9SQU5HRVMociwgInsgWzAsMykgWzQsNSkgfSIpOwotCi0gIHIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDAsIDEpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDIsIDMpLCAydSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDQsIDUpLCAzdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDAuNSwgNC41KSwgMXUpIDw8IHI7Ci0gIEFTU0VSVF9SQU5HRVMociwgInsgWzAsNSkgfSIpOwotCi0gIHIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKHIuQWRkKDAsIDEpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX0VRKHIuQWRkKDEsIDIpLCAxdSkgPDwgcjsKLSAgQVNTRVJUX1JBTkdFUyhyLCAieyBbMCwyKSB9Iik7Ci19Ci0KLVRFU1QoUmFuZ2VzVGVzdCwgSW50ZXJzZWN0aW9uV2l0aCkgewotICBSYW5nZXM8aW50PiBhOwotICBSYW5nZXM8aW50PiBiOwotCi0gIEFTU0VSVF9FUShhLkFkZCgwLCAxKSwgMXUpIDw8IGE7Ci0gIEFTU0VSVF9FUShhLkFkZCg0LCA3KSwgMnUpIDw8IGE7Ci0gIEFTU0VSVF9FUShhLkFkZCgxMCwgMTIpLCAzdSkgPDwgYTsKLQotICAvLyBUZXN0IGludGVyc2VjdGlvbnMgd2l0aCBhbiBlbXB0eSByYW5nZS4KLSAgQVNTRVJUX1JBTkdFUyhhLCAieyBbMCwxKSBbNCw3KSBbMTAsMTIpIH0iKTsKLSAgQVNTRVJUX1JBTkdFUyhiLCAieyB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYS5JbnRlcnNlY3Rpb25XaXRoKGIpLCAieyB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYi5JbnRlcnNlY3Rpb25XaXRoKGEpLCAieyB9Iik7Ci0KLSAgLy8gVGVzdCBpbnRlcnNlY3Rpb25zIHdpdGggYSBjb21wbGV0ZWx5IG92ZXJsYXBwaW5nIHJhbmdlLgotICBBU1NFUlRfRVEoYi5BZGQoLTEsIDEzKSwgMXUpIDw8IGI7Ci0gIEFTU0VSVF9SQU5HRVMoYSwgInsgWzAsMSkgWzQsNykgWzEwLDEyKSB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYiwgInsgWy0xLDEzKSB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYS5JbnRlcnNlY3Rpb25XaXRoKGIpLCAieyBbMCwxKSBbNCw3KSBbMTAsMTIpIH0iKTsKLSAgQVNTRVJUX1JBTkdFUyhiLkludGVyc2VjdGlvbldpdGgoYSksICJ7IFswLDEpIFs0LDcpIFsxMCwxMikgfSIpOwotCi0gIC8vIFRlc3QgaW50ZXJzZWN0aW9ucyB3aXRoIGEgZGlzam9pbnQgcmFuZ2VzLgotICBiLmNsZWFyKCk7Ci0gIEFTU0VSVF9FUShiLkFkZCgxLCA0KSwgMXUpIDw8IGI7Ci0gIEFTU0VSVF9FUShiLkFkZCg4LCA5KSwgMnUpIDw8IGI7Ci0gIEFTU0VSVF9SQU5HRVMoYSwgInsgWzAsMSkgWzQsNykgWzEwLDEyKSB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYiwgInsgWzEsNCkgWzgsOSkgfSIpOwotICBBU1NFUlRfUkFOR0VTKGEuSW50ZXJzZWN0aW9uV2l0aChiKSwgInsgfSIpOwotICBBU1NFUlRfUkFOR0VTKGIuSW50ZXJzZWN0aW9uV2l0aChhKSwgInsgfSIpOwotCi0gIC8vIFRlc3QgaW50ZXJzZWN0aW9ucyB3aXRoIHBhcnRpYWxseSBvdmVybGFwcGluZyByYW5nZXMuCi0gIGIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKGIuQWRkKDAsIDMpLCAxdSkgPDwgYjsKLSAgQVNTRVJUX0VRKGIuQWRkKDUsIDExKSwgMnUpIDw8IGI7Ci0gIEFTU0VSVF9SQU5HRVMoYSwgInsgWzAsMSkgWzQsNykgWzEwLDEyKSB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYiwgInsgWzAsMykgWzUsMTEpIH0iKTsKLSAgQVNTRVJUX1JBTkdFUyhhLkludGVyc2VjdGlvbldpdGgoYiksICJ7IFswLDEpIFs1LDcpIFsxMCwxMSkgfSIpOwotICBBU1NFUlRfUkFOR0VTKGIuSW50ZXJzZWN0aW9uV2l0aChhKSwgInsgWzAsMSkgWzUsNykgWzEwLDExKSB9Iik7Ci0KLSAgLy8gVGVzdCBpbnRlcnNlY3Rpb24gd2l0aCBhIHJhbmdlIHRoYXQgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gIC8vIGZpcnN0IHJhbmdlIGFuZCBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgcmFuZ2UuCi0gIGIuY2xlYXIoKTsKLSAgQVNTRVJUX0VRKGIuQWRkKDAsIDEyKSwgMXUpIDw8IGI7Ci0gIEFTU0VSVF9SQU5HRVMoYSwgInsgWzAsMSkgWzQsNykgWzEwLDEyKSB9Iik7Ci0gIEFTU0VSVF9SQU5HRVMoYiwgInsgWzAsMTIpIH0iKTsKLSAgQVNTRVJUX1JBTkdFUyhhLkludGVyc2VjdGlvbldpdGgoYiksICJ7IFswLDEpIFs0LDcpIFsxMCwxMikgfSIpOwotICBBU1NFUlRfUkFOR0VTKGIuSW50ZXJzZWN0aW9uV2l0aChhKSwgInsgWzAsMSkgWzQsNykgWzEwLDEyKSB9Iik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvcmVuZGVyZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9yZW5kZXJlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1YzI2ZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9yZW5kZXJlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3JlbmRlcmVyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotUmVuZGVyZXI6OlJlbmRlcmVyKCkge30KLQotUmVuZGVyZXI6On5SZW5kZXJlcigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvcmVuZGVyZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3JlbmRlcmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkM2IzZWIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvcmVuZGVyZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9SRU5ERVJFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9SRU5ERVJFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9idWZmZXJpbmdfc3RhdGUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jZG1fY29udGV4dC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIERlbXV4ZXJTdHJlYW1Qcm92aWRlcjsKLWNsYXNzIFJlbmRlcmVyQ2xpZW50OwotY2xhc3MgVmlkZW9GcmFtZTsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFJlbmRlcmVyIHsKLSBwdWJsaWM6Ci0gIFJlbmRlcmVyKCk7Ci0KLSAgLy8gU3RvcHMgcmVuZGVyaW5nIGFuZCBmaXJlcyBhbnkgcGVuZGluZyBjYWxsYmFja3MuCi0gIHZpcnR1YWwgflJlbmRlcmVyKCk7Ci0KLSAgLy8gSW5pdGlhbGl6ZXMgdGhlIFJlbmRlcmVyIHdpdGggfGRlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyfCwgZXhlY3V0aW5nCi0gIC8vIHxpbml0X2NifCB1cG9uIGNvbXBsZXRpb24uIHxkZW11eGVyX3N0cmVhbV9wcm92aWRlcnwgbXVzdCBiZSB2YWxpZCBmb3IKLSAgLy8gdGhlIGxpZmV0aW1lIG9mIHRoZSBSZW5kZXJlciBvYmplY3QuICB8aW5pdF9jYnwgbXVzdCBvbmx5IGJlIHJ1biBhZnRlciB0aGlzCi0gIC8vIG1ldGhvZCBoYXMgcmV0dXJuZWQuICBGaXJpbmcgfGluaXRfY2J8IG1heSByZXN1bHQgaW4gdGhlIGltbWVkaWF0ZQotICAvLyBkZXN0cnVjdGlvbiBvZiB0aGUgY2FsbGVyLCBzbyBpdCBtdXN0IGJlIHJ1biBvbmx5IHByaW9yIHRvIHJldHVybmluZy4KLSAgdmlydHVhbCB2b2lkIEluaXRpYWxpemUoRGVtdXhlclN0cmVhbVByb3ZpZGVyKiBkZW11eGVyX3N0cmVhbV9wcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyZXJDbGllbnQqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgaW5pdF9jYikgPSAwOwotCi0gIC8vIEFzc29jaWF0ZXMgdGhlIHxjZG1fY29udGV4dHwgd2l0aCB0aGlzIFJlbmRlcmVyIGZvciBkZWNyeXB0aW9uIChhbmQKLSAgLy8gZGVjb2RpbmcpIG9mIG1lZGlhIGRhdGEsIHRoZW4gZmlyZXMgfGNkbV9hdHRhY2hlZF9jYnwgd2l0aCB0aGUgcmVzdWx0LgotICB2aXJ0dWFsIHZvaWQgU2V0Q2RtKENkbUNvbnRleHQqIGNkbV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENkbUF0dGFjaGVkQ0ImIGNkbV9hdHRhY2hlZF9jYikgPSAwOwotCi0gIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIGFmdGVyIEluaXRpYWxpemUoKS4KLQotICAvLyBEaXNjYXJkcyBhbnkgYnVmZmVyZWQgZGF0YSwgZXhlY3V0aW5nIHxmbHVzaF9jYnwgd2hlbiBjb21wbGV0ZWQuCi0gIHZpcnR1YWwgdm9pZCBGbHVzaChjb25zdCBiYXNlOjpDbG9zdXJlJiBmbHVzaF9jYikgPSAwOwotCi0gIC8vIFN0YXJ0cyByZW5kZXJpbmcgZnJvbSB8dGltZXwuCi0gIHZpcnR1YWwgdm9pZCBTdGFydFBsYXlpbmdGcm9tKGJhc2U6OlRpbWVEZWx0YSB0aW1lKSA9IDA7Ci0KLSAgLy8gVXBkYXRlcyB0aGUgY3VycmVudCBwbGF5YmFjayByYXRlLiBUaGUgZGVmYXVsdCBwbGF5YmFjayByYXRlIHNob3VsZCBiZSAwLgotICB2aXJ0dWFsIHZvaWQgU2V0UGxheWJhY2tSYXRlKGRvdWJsZSBwbGF5YmFja19yYXRlKSA9IDA7Ci0KLSAgLy8gU2V0cyB0aGUgb3V0cHV0IHZvbHVtZS4gVGhlIGRlZmF1bHQgdm9sdW1lIHNob3VsZCBiZSAxLgotICB2aXJ0dWFsIHZvaWQgU2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgPSAwOwotCi0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4KLSAgdmlydHVhbCBiYXNlOjpUaW1lRGVsdGEgR2V0TWVkaWFUaW1lKCkgPSAwOwotCi0gIC8vIFJldHVybnMgd2hldGhlciB8dGhpc3wgcmVuZGVycyBhdWRpby4KLSAgdmlydHVhbCBib29sIEhhc0F1ZGlvKCkgPSAwOwotCi0gIC8vIFJldHVybnMgd2hldGhlciB8dGhpc3wgcmVuZGVycyB2aWRlby4KLSAgdmlydHVhbCBib29sIEhhc1ZpZGVvKCkgPSAwOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1JFTkRFUkVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9yZW5kZXJlcl9jbGllbnQuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3JlbmRlcmVyX2NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU0OTE5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3JlbmRlcmVyX2NsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1JFTkRFUkVSX0NMSUVOVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9SRU5ERVJFUl9DTElFTlRfSF8KLQotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEludGVyZmFjZSB1c2VkIGJ5IFJlbmRlcmVyLCBBdWRpb1JlbmRlcmVyLCBWaWRlb1JlbmRlcmVyIGFuZAotLy8gTWVkaWFQbGF5ZXJSZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMgdG8gbm90aWZ5IHRoZWlyIGNsaWVudHMuCi1jbGFzcyBSZW5kZXJlckNsaWVudCB7Ci0gcHVibGljOgotICAvLyBFeGVjdXRlZCBpZiBhbnkgZXJyb3Igd2FzIGVuY291bnRlcmVkIGFmdGVyIFJlbmRlcmVyIGluaXRpYWxpemF0aW9uLgotICB2aXJ0dWFsIHZvaWQgT25FcnJvcihQaXBlbGluZVN0YXR1cyBzdGF0dXMpID0gMDsKLQotICAvLyBFeGVjdXRlZCB3aGVuIHJlbmRlcmluZyBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHN0cmVhbS4KLSAgdmlydHVhbCB2b2lkIE9uRW5kZWQoKSA9IDA7Ci0KLSAgLy8gRXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHdpdGggcmVuZGVyaW5nIHN0YXRpc3RpY3MuCi0gIHZpcnR1YWwgdm9pZCBPblN0YXRpc3RpY3NVcGRhdGUoY29uc3QgUGlwZWxpbmVTdGF0aXN0aWNzJiBzdGF0cykgPSAwOwotCi0gIC8vIEV4ZWN1dGVkIHdoZW4gYnVmZmVyaW5nIHN0YXRlIGlzIGNoYW5nZWQuCi0gIHZpcnR1YWwgdm9pZCBPbkJ1ZmZlcmluZ1N0YXRlQ2hhbmdlKEJ1ZmZlcmluZ1N0YXRlIHN0YXRlKSA9IDA7Ci0KLSAgLy8gRXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGtleSBuZWVkZWQgdG8gZGVjcnlwdCB0aGUgc3RyZWFtIGlzIG5vdCBhdmFpbGFibGUuCi0gIHZpcnR1YWwgdm9pZCBPbldhaXRpbmdGb3JEZWNyeXB0aW9uS2V5KCkgPSAwOwotCi0gIC8vIEV4ZWN1dGVkIGZvciB0aGUgZmlyc3QgdmlkZW8gZnJhbWUgYW5kIHdoZW5ldmVyIG5hdHVyYWwgc2l6ZSBjaGFuZ2VzLgotICAvLyBPbmx5IHVzZWQgaWYgbWVkaWEgc3RyZWFtIGNvbnRhaW5zIHZpZGVvIHRyYWNrLgotICB2aXJ0dWFsIHZvaWQgT25WaWRlb05hdHVyYWxTaXplQ2hhbmdlKGNvbnN0IG1hdGg6OlNpemUmIHNpemUpID0gMDsKLQotICAvLyBFeGVjdXRlZCBmb3IgdGhlIGZpcnN0IHZpZGVvIGZyYW1lIGFuZCB3aGVuZXZlciBvcGFjaXR5IGNoYW5nZXMuCi0gIC8vIE9ubHkgdXNlZCBpZiBtZWRpYSBzdHJlYW0gY29udGFpbnMgdmlkZW8gdHJhY2suCi0gIHZpcnR1YWwgdm9pZCBPblZpZGVvT3BhY2l0eUNoYW5nZShib29sIG9wYXF1ZSkgPSAwOwotCi0gIC8vIEV4ZWN1dGVkIHdoZW4gdmlkZW8gbWV0YWRhdGEgaXMgZmlyc3QgcmVhZCwgYW5kIHdoZW5ldmVyIGl0IGNoYW5nZXMuCi0gIC8vIE9ubHkgdXNlZCB3aGVuIHdlIGFyZSB1c2luZyBhIFVSTCBkZW11eGVyIChlLmcuIGZvciBNZWRpYVBsYXllclJlbmRlcmVyKS4KLSAgdmlydHVhbCB2b2lkIE9uRHVyYXRpb25DaGFuZ2UoYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSA9IDA7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9SRU5ERVJFUl9DTElFTlRfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3J1bl9hbGxfcGVyZnRlc3RzLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvcnVuX2FsbF9wZXJmdGVzdHMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOGI5YWYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvcnVuX2FsbF9wZXJmdGVzdHMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL3Rlc3QvbGF1bmNoZXIvdW5pdF90ZXN0X2xhdW5jaGVyLmgiCi0jaW5jbHVkZSAiYmFzZS90ZXN0L3Rlc3Rfc3VpdGUuaCIKLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYS5oIgotCi1jbGFzcyBUZXN0U3VpdGVOb0F0RXhpdCA6IHB1YmxpYyBiYXNlOjpUZXN0U3VpdGUgewotIHB1YmxpYzoKLSAgVGVzdFN1aXRlTm9BdEV4aXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSA6IFRlc3RTdWl0ZShhcmdjLCBhcmd2KSB7fQotICB+VGVzdFN1aXRlTm9BdEV4aXQoKSBvdmVycmlkZSB7fQotCi0gcHJvdGVjdGVkOgotICB2b2lkIEluaXRpYWxpemUoKSBvdmVycmlkZTsKLX07Ci0KLXZvaWQgVGVzdFN1aXRlTm9BdEV4aXQ6OkluaXRpYWxpemUoKSB7Ci0gIC8vIFJ1biBUZXN0U3VpdGU6OkluaXRpYWxpemUgZmlyc3Qgc28gdGhhdCBsb2dnaW5nIGlzIGluaXRpYWxpemVkLgotICBiYXNlOjpBdEV4aXRNYW5hZ2VyIGV4aXRfbWFuYWdlcjsKLSAgYmFzZTo6VGVzdFN1aXRlOjpJbml0aWFsaXplKCk7Ci0KLSAgLy8gUnVuIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIG1haW4oKSB0byBlbnN1cmUgYW4gQXRFeGl0TWFuYWdlciBpcyBhbHJlYWR5Ci0gIC8vIHByZXNlbnQuCi0gIG1lZGlhOjpJbml0aWFsaXplTWVkaWFMaWJyYXJ5KCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICBUZXN0U3VpdGVOb0F0RXhpdCB0ZXN0X3N1aXRlKGFyZ2MsIGFyZ3YpOwotCi0gIC8vIEFsd2F5cyBydW4gdGhlIHBlcmYgdGVzdHMgc2VyaWFsbHksIHRvIGF2b2lkIGRpc3RvcnRpbmcKLSAgLy8gcGVyZiBtZWFzdXJlbWVudHMgd2l0aCByYW5kb21uZXNzIHJlc3VsdGluZyBmcm9tIHJ1bm5pbmcKLSAgLy8gaW4gcGFyYWxsZWwuCi0gIHJldHVybiBiYXNlOjpMYXVuY2hVbml0VGVzdHNTZXJpYWxseSgKLSAgICAgIGFyZ2MsIGFyZ3YsCi0gICAgICBiYXNlOjpCaW5kKCZUZXN0U3VpdGVOb0F0RXhpdDo6UnVuLCBiYXNlOjpVbnJldGFpbmVkKCZ0ZXN0X3N1aXRlKSkpOwotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvcnVuX2FsbF91bml0dGVzdHMuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9ydW5fYWxsX3VuaXR0ZXN0cy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYxYThlZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9ydW5fYWxsX3VuaXR0ZXN0cy5jYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2NvbW1hbmRfbGluZS5oIgotI2luY2x1ZGUgImJhc2UvdGVzdC9sYXVuY2hlci91bml0X3Rlc3RfbGF1bmNoZXIuaCIKLSNpbmNsdWRlICJiYXNlL3Rlc3QvdGVzdF9kaXNjYXJkYWJsZV9tZW1vcnlfYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiYmFzZS90ZXN0L3Rlc3Rfc3VpdGUuaCIKLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9mYWtlX21lZGlhX3Jlc291cmNlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfc3dpdGNoZXMuaCIKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSNpbmNsdWRlICJiYXNlL2FuZHJvaWQvam5pX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hbmRyb2lkL21lZGlhX2NvZGVjX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hbmRyb2lkL21lZGlhX2puaV9yZWdpc3RyYXIuaCIKLSNpbmNsdWRlICJ1aS9nbC9hbmRyb2lkL2dsX2puaV9yZWdpc3RyYXIuaCIKLSNlbmRpZgotCi1jbGFzcyBUZXN0U3VpdGVOb0F0RXhpdCA6IHB1YmxpYyBiYXNlOjpUZXN0U3VpdGUgewotIHB1YmxpYzoKLSAgVGVzdFN1aXRlTm9BdEV4aXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSA6IFRlc3RTdWl0ZShhcmdjLCBhcmd2KSB7fQotICB+VGVzdFN1aXRlTm9BdEV4aXQoKSBvdmVycmlkZSB7fQotCi0gcHJvdGVjdGVkOgotICB2b2lkIEluaXRpYWxpemUoKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIGJhc2U6OlRlc3REaXNjYXJkYWJsZU1lbW9yeUFsbG9jYXRvciBkaXNjYXJkYWJsZV9tZW1vcnlfYWxsb2NhdG9yXzsKLX07Ci0KLXZvaWQgVGVzdFN1aXRlTm9BdEV4aXQ6OkluaXRpYWxpemUoKSB7Ci0gIC8vIFJ1biBUZXN0U3VpdGU6OkluaXRpYWxpemUgZmlyc3Qgc28gdGhhdCBsb2dnaW5nIGlzIGluaXRpYWxpemVkLgotICBiYXNlOjpBdEV4aXRNYW5hZ2VyIGV4aXRfbWFuYWdlcjsKLSAgYmFzZTo6VGVzdFN1aXRlOjpJbml0aWFsaXplKCk7Ci0KLSAgYmFzZTo6Q29tbWFuZExpbmUqIGNvbW1hbmRfbGluZSA9IGJhc2U6OkNvbW1hbmRMaW5lOjpGb3JDdXJyZW50UHJvY2VzcygpOwotICBjb21tYW5kX2xpbmUtPkFwcGVuZFN3aXRjaChzd2l0Y2hlczo6a0VuYWJsZUluYmFuZFRleHRUcmFja3MpOwotCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICAvLyBSZWdpc3RlciBKTkkgYmluZGluZ3MgZm9yIGFuZHJvaWQuCi0gIEpOSUVudiogZW52ID0gYmFzZTo6YW5kcm9pZDo6QXR0YWNoQ3VycmVudFRocmVhZCgpOwotICAvLyBOZWVkZWQgZm9yIHN1cmZhY2UgdGV4dHVyZSBzdXBwb3J0LgotICB1aTo6Z2w6OmFuZHJvaWQ6OlJlZ2lzdGVySm5pKGVudik7Ci0gIG1lZGlhOjpSZWdpc3RlckpuaShlbnYpOwotCi0gIGlmIChtZWRpYTo6TWVkaWFDb2RlY1V0aWw6OklzTWVkaWFDb2RlY0F2YWlsYWJsZSgpKQotICAgIG1lZGlhOjpFbmFibGVQbGF0Zm9ybURlY29kZXJTdXBwb3J0KCk7Ci0jZW5kaWYKLQotICAvLyBSdW4gdGhpcyBoZXJlIGluc3RlYWQgb2YgbWFpbigpIHRvIGVuc3VyZSBhbiBBdEV4aXRNYW5hZ2VyIGlzIGFscmVhZHkKLSAgLy8gcHJlc2VudC4KLSAgbWVkaWE6OkluaXRpYWxpemVNZWRpYUxpYnJhcnkoKTsKLSAgbWVkaWE6OlNldFVwRmFrZU1lZGlhUmVzb3VyY2VzKCk7Ci0KLSAgYmFzZTo6RGlzY2FyZGFibGVNZW1vcnlBbGxvY2F0b3I6OlNldEluc3RhbmNlKCZkaXNjYXJkYWJsZV9tZW1vcnlfYWxsb2NhdG9yXyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICBUZXN0U3VpdGVOb0F0RXhpdCB0ZXN0X3N1aXRlKGFyZ2MsIGFyZ3YpOwotCi0gIHJldHVybiBiYXNlOjpMYXVuY2hVbml0VGVzdHMoCi0gICAgICBhcmdjLCBhcmd2LAotICAgICAgYmFzZTo6QmluZCgmVGVzdFN1aXRlTm9BdEV4aXQ6OlJ1biwgYmFzZTo6VW5yZXRhaW5lZCgmdGVzdF9zdWl0ZSkpKTsKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NhbXBsZV9mb3JtYXQuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zYW1wbGVfZm9ybWF0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjQ1YjI0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NhbXBsZV9mb3JtYXQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zYW1wbGVfZm9ybWF0LmgiCi0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1pbnQgU2FtcGxlRm9ybWF0VG9CeXRlc1BlckNoYW5uZWwoU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQpIHsKLSAgc3dpdGNoIChzYW1wbGVfZm9ybWF0KSB7Ci0gICAgY2FzZSBrVW5rbm93blNhbXBsZUZvcm1hdDoKLSAgICAgIHJldHVybiAwOwotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFU4OgotICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UzE2OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFBsYW5hclMxNjoKLSAgICAgIHJldHVybiAyOwotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFMyNDoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRTMzI6Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0RjMyOgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFBsYW5hckYzMjoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRQbGFuYXJTMzI6Ci0gICAgICByZXR1cm4gNDsKLSAgfQotCi0gIE5PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBzYW1wbGUgZm9ybWF0IHByb3ZpZGVkOiAiIDw8IHNhbXBsZV9mb3JtYXQ7Ci0gIHJldHVybiAwOwotfQotCi1jb25zdCBjaGFyKiBTYW1wbGVGb3JtYXRUb1N0cmluZyhTYW1wbGVGb3JtYXQgc2FtcGxlX2Zvcm1hdCkgewotICBzd2l0Y2ggKHNhbXBsZV9mb3JtYXQpIHsKLSAgICBjYXNlIGtVbmtub3duU2FtcGxlRm9ybWF0OgotICAgICAgcmV0dXJuICJVbmtub3duIHNhbXBsZSBmb3JtYXQiOwotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFU4OgotICAgICAgcmV0dXJuICJVbnNpZ25lZCA4LWJpdCB3aXRoIGJpYXMgb2YgMTI4IjsKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRTMTY6Ci0gICAgICByZXR1cm4gIlNpZ25lZCAxNi1iaXQiOwotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFMyNDoKLSAgICAgIHJldHVybiAiU2lnbmVkIDI0LWJpdCI7Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UzMyOgotICAgICAgcmV0dXJuICJTaWduZWQgMzItYml0IjsKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRGMzI6Ci0gICAgICByZXR1cm4gIkZsb2F0IDMyLWJpdCI7Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UGxhbmFyUzE2OgotICAgICAgcmV0dXJuICJTaWduZWQgMTYtYml0IHBsYW5hciI7Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyOgotICAgICAgcmV0dXJuICJGbG9hdCAzMi1iaXQgcGxhbmFyIjsKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRQbGFuYXJTMzI6Ci0gICAgICByZXR1cm4gIlNpZ25lZCAzMi1iaXQgcGxhbmFyIjsKLSAgfQotICBOT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgc2FtcGxlIGZvcm1hdCBwcm92aWRlZDogIiA8PCBzYW1wbGVfZm9ybWF0OwotICByZXR1cm4gIiI7Ci19Ci0KLWJvb2wgSXNQbGFuYXIoU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQpIHsKLSAgc3dpdGNoIChzYW1wbGVfZm9ybWF0KSB7Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UGxhbmFyUzE2OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFBsYW5hckYzMjoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRQbGFuYXJTMzI6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIGtVbmtub3duU2FtcGxlRm9ybWF0OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFU4OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFMxNjoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRTMjQ6Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UzMyOgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdEYzMjoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIE5PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBzYW1wbGUgZm9ybWF0IHByb3ZpZGVkOiAiIDw8IHNhbXBsZV9mb3JtYXQ7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJc0ludGVybGVhdmVkKFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0KSB7Ci0gIHN3aXRjaCAoc2FtcGxlX2Zvcm1hdCkgewotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFU4OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFMxNjoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRTMjQ6Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UzMyOgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdEYzMjoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Uga1Vua25vd25TYW1wbGVGb3JtYXQ6Ci0gICAgY2FzZSBrU2FtcGxlRm9ybWF0UGxhbmFyUzE2OgotICAgIGNhc2Uga1NhbXBsZUZvcm1hdFBsYW5hckYzMjoKLSAgICBjYXNlIGtTYW1wbGVGb3JtYXRQbGFuYXJTMzI6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBOT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgc2FtcGxlIGZvcm1hdCBwcm92aWRlZDogIiA8PCBzYW1wbGVfZm9ybWF0OwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2FtcGxlX2Zvcm1hdC5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2FtcGxlX2Zvcm1hdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTdmODRiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NhbXBsZV9mb3JtYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9TQU1QTEVfRk9STUFUX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1NBTVBMRV9GT1JNQVRfSF8KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWVudW0gU2FtcGxlRm9ybWF0IHsKLSAgLy8gVGhlc2UgdmFsdWVzIGFyZSBoaXN0b2dyYW1tZWQgb3ZlciB0aW1lOyBkbyBub3QgY2hhbmdlIHRoZWlyIG9yZGluYWwKLSAgLy8gdmFsdWVzLiAgV2hlbiBkZWxldGluZyBhIHNhbXBsZSBmb3JtYXQgcmVwbGFjZSBpdCB3aXRoIGEgZHVtbXkgdmFsdWU7IHdoZW4KLSAgLy8gYWRkaW5nIGEgc2FtcGxlIGZvcm1hdCwgZG8gc28gYXQgdGhlIGJvdHRvbSBiZWZvcmUga1NhbXBsZUZvcm1hdE1heCwgYW5kCi0gIC8vIHVwZGF0ZSB0aGUgdmFsdWUgb2Yga1NhbXBsZUZvcm1hdE1heC4KLSAga1Vua25vd25TYW1wbGVGb3JtYXQgPSAwLAotICBrU2FtcGxlRm9ybWF0VTgsICAgICAgICAgLy8gVW5zaWduZWQgOC1iaXQgdy8gYmlhcyBvZiAxMjguCi0gIGtTYW1wbGVGb3JtYXRTMTYsICAgICAgICAvLyBTaWduZWQgMTYtYml0LgotICBrU2FtcGxlRm9ybWF0UzMyLCAgICAgICAgLy8gU2lnbmVkIDMyLWJpdC4KLSAga1NhbXBsZUZvcm1hdEYzMiwgICAgICAgIC8vIEZsb2F0IDMyLWJpdC4KLSAga1NhbXBsZUZvcm1hdFBsYW5hclMxNiwgIC8vIFNpZ25lZCAxNi1iaXQgcGxhbmFyLgotICBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyLCAgLy8gRmxvYXQgMzItYml0IHBsYW5hci4KLSAga1NhbXBsZUZvcm1hdFBsYW5hclMzMiwgIC8vIFNpZ25lZCAzMi1iaXQgcGxhbmFyLgotICBrU2FtcGxlRm9ybWF0UzI0LCAgICAgICAgLy8gU2lnbmVkIDI0LWJpdC4KLQotICAvLyBNdXN0IGFsd2F5cyBiZSBlcXVhbCB0byBsYXJnZXN0IHZhbHVlIGV2ZXIgbG9nZ2VkLgotICBrU2FtcGxlRm9ybWF0TWF4ID0ga1NhbXBsZUZvcm1hdFMyNCwKLX07Ci0KLS8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIHBlciBjaGFubmVsIGZvciB0aGUgc3BlY2lmaWVkCi0vLyB8c2FtcGxlX2Zvcm1hdHwuCi1NRURJQV9FWFBPUlQgaW50IFNhbXBsZUZvcm1hdFRvQnl0ZXNQZXJDaGFubmVsKFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0KTsKLQotLy8gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgc2FtcGxlIGZvcm1hdCBhcyBhIHN0cmluZwotTUVESUFfRVhQT1JUIGNvbnN0IGNoYXIqIFNhbXBsZUZvcm1hdFRvU3RyaW5nKFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0KTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHxzYW1wbGVfZm9ybWF0fCBpcyBwbGFuYXIsIGZhbHNlIG90aGVyd2lzZS4KLU1FRElBX0VYUE9SVCBib29sIElzUGxhbmFyKFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0KTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHxzYW1wbGVfZm9ybWF0fCBpcyBpbnRlcmxlYXZlZCwgZmFsc2Ugb3RoZXJ3aXNlLgotTUVESUFfRVhQT1JUIGJvb2wgSXNJbnRlcmxlYXZlZChTYW1wbGVGb3JtYXQgc2FtcGxlX2Zvcm1hdCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1NBTVBMRV9GT1JNQVRfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NicGxheWVyX3BpcGVsaW5lLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfcGlwZWxpbmUuY2MKaW5kZXggNTJlNDRhNC4uMmMyNDVjNyAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfcGlwZWxpbmUuY2MKKysrIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfcGlwZWxpbmUuY2MKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIiAgLy8gRm9yIENPTVBJTEVfQVNTRVJUCkBAIC0yOCwzMiArMjksNDMgQEAKICNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgogI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9jX3ZhbC5oIgorI2luY2x1ZGUgImNvYmFsdC9iYXNlL3N0YXJ0dXBfdGltZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9waXBlbGluZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF9wbGF5ZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvY2hhbm5lbF9sYXlvdXQuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3Jhbmdlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3QuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3NpemUuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIHsKIAogdXNpbmcgYmFzZTo6VGltZTsKIHVzaW5nIGJhc2U6OlRpbWVEZWx0YTsKLQotbmFtZXNwYWNlIHsKK3VzaW5nIDo6bWVkaWE6OkF1ZGlvRGVjb2RlckNvbmZpZzsKK3VzaW5nIDo6bWVkaWE6OkRlY29kZXJCdWZmZXI7Cit1c2luZyA6Om1lZGlhOjpEZW11eGVyOwordXNpbmcgOjptZWRpYTo6RGVtdXhlckhvc3Q7Cit1c2luZyA6Om1lZGlhOjpEZW11eGVyU3RyZWFtOwordXNpbmcgOjptZWRpYTo6VmlkZW9EZWNvZGVyQ29uZmlnOwordXNpbmcgOjptZWRpYTo6UGlwZWxpbmVTdGF0aXN0aWNzOwordXNpbmcgOjptZWRpYTo6UGlwZWxpbmVTdGF0dXNDYWxsYmFjazsKIAogc3RhdGljIGNvbnN0IGludCBrUmV0cnlEZWxheUF0U3VzcGVuZEluTWlsbGlzZWNvbmRzID0gMTAwOwogCkBAIC02NCw3ICs3Niw3IEBACiBzdHJ1Y3QgU3RhcnRUYXNrUGFyYW1ldGVycyB7CiAgIERlbXV4ZXIqIGRlbXV4ZXI7CiAgIFNldERybVN5c3RlbVJlYWR5Q0Igc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2I7Ci0gIFBpcGVsaW5lU3RhdHVzQ0IgZW5kZWRfY2I7CisgIFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2sgZW5kZWRfY2I7CiAgIEVycm9yQ0IgZXJyb3JfY2I7CiAgIFBpcGVsaW5lOjpTZWVrQ0Igc2Vla19jYjsKICAgUGlwZWxpbmU6OkJ1ZmZlcmluZ1N0YXRlQ0IgYnVmZmVyaW5nX3N0YXRlX2NiOwpAQCAtMTAxLDcgKzExMyw3IEBACiAKICAgdm9pZCBTdGFydChEZW11eGVyKiBkZW11eGVyLAogICAgICAgICAgICAgIGNvbnN0IFNldERybVN5c3RlbVJlYWR5Q0ImIHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiLAotICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIGVuZGVkX2NiLCBjb25zdCBFcnJvckNCJiBlcnJvcl9jYiwKKyAgICAgICAgICAgICBQaXBlbGluZVN0YXR1c0NhbGxiYWNrIGVuZGVkX2NiLCBjb25zdCBFcnJvckNCJiBlcnJvcl9jYiwKICAgICAgICAgICAgICBjb25zdCBTZWVrQ0ImIHNlZWtfY2IsIGNvbnN0IEJ1ZmZlcmluZ1N0YXRlQ0ImIGJ1ZmZlcmluZ19zdGF0ZV9jYiwKICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiBkdXJhdGlvbl9jaGFuZ2VfY2IsCiAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgb3V0cHV0X21vZGVfY2hhbmdlX2NiLApAQCAtMTExLDcgKzEyMyw3IEBACiAgIHZvaWQgU3RhcnQoY29uc3QgU2V0RHJtU3lzdGVtUmVhZHlDQiYgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2IsCiAgICAgICAgICAgICAgY29uc3QgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWRDQiYKICAgICAgICAgICAgICAgICAgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9lbmNvdW50ZXJlZF9jYiwKLSAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX3VybCwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgZW5kZWRfY2IsCisgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV91cmwsIFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2sgZW5kZWRfY2IsCiAgICAgICAgICAgICAgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IsIGNvbnN0IFNlZWtDQiYgc2Vla19jYiwKICAgICAgICAgICAgICBjb25zdCBCdWZmZXJpbmdTdGF0ZUNCJiBidWZmZXJpbmdfc3RhdGVfY2IsCiAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgZHVyYXRpb25fY2hhbmdlX2NiLApAQCAtMTMwLDEyICsxNDIsMTIgQEAKICAgdm9pZCBTZXRWb2x1bWUoZmxvYXQgdm9sdW1lKSBvdmVycmlkZTsKIAogICBUaW1lRGVsdGEgR2V0TWVkaWFUaW1lKCkgb3ZlcnJpZGU7Ci0gIFJhbmdlczxUaW1lRGVsdGE+IEdldEJ1ZmZlcmVkVGltZVJhbmdlcygpIG92ZXJyaWRlOworICA6Om1lZGlhOjpSYW5nZXM8VGltZURlbHRhPiBHZXRCdWZmZXJlZFRpbWVSYW5nZXMoKSBvdmVycmlkZTsKICAgVGltZURlbHRhIEdldE1lZGlhRHVyYXRpb24oKSBjb25zdCBvdmVycmlkZTsKICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogICBUaW1lRGVsdGEgR2V0TWVkaWFTdGFydERhdGUoKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLSAgdm9pZCBHZXROYXR1cmFsVmlkZW9TaXplKG1hdGg6OlNpemUqIG91dF9zaXplKSBjb25zdCBvdmVycmlkZTsKKyAgdm9pZCBHZXROYXR1cmFsVmlkZW9TaXplKGdmeDo6U2l6ZSogb3V0X3NpemUpIGNvbnN0IG92ZXJyaWRlOwogCiAgIGJvb2wgRGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgIFBpcGVsaW5lU3RhdGlzdGljcyBHZXRTdGF0aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xNDMsMTkgKzE1NSwxNiBAQAogICB2b2lkIFNldERlY29kZVRvVGV4dHVyZU91dHB1dE1vZGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKIAogIHByaXZhdGU6Ci0gIHZvaWQgU3RhcnRUYXNrKGNvbnN0IFN0YXJ0VGFza1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOworICB2b2lkIFN0YXJ0VGFzayhTdGFydFRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpOwogICB2b2lkIFNldFZvbHVtZVRhc2soZmxvYXQgdm9sdW1lKTsKICAgdm9pZCBTZXRQbGF5YmFja1JhdGVUYXNrKGZsb2F0IHZvbHVtZSk7CiAgIHZvaWQgU2V0RHVyYXRpb25UYXNrKFRpbWVEZWx0YSBkdXJhdGlvbik7CiAKICAgLy8gRGVtdXhlckhvc3QgaW1wbGVtZW50YXRpb24uCiAgIHZvaWQgT25CdWZmZXJlZFRpbWVSYW5nZXNDaGFuZ2VkKAotICAgICAgY29uc3QgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4mIHJhbmdlcykgb3ZlcnJpZGU7CisgICAgICBjb25zdCA6Om1lZGlhOjpSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgcmFuZ2VzKSBvdmVycmlkZTsKICAgdm9pZCBTZXREdXJhdGlvbihUaW1lRGVsdGEgZHVyYXRpb24pIG92ZXJyaWRlOwogICB2b2lkIE9uRGVtdXhlckVycm9yKFBpcGVsaW5lU3RhdHVzIGVycm9yKSBvdmVycmlkZTsKLSAgdm9pZCBBZGRUZXh0U3RyZWFtKERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFRyYWNrQ29uZmlnJiBjb25maWcpIG92ZXJyaWRlOwotICB2b2lkIFJlbW92ZVRleHRTdHJlYW0oRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0pIG92ZXJyaWRlOwogCiAjaWYgU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKICAgdm9pZCBDcmVhdGVVcmxQbGF5ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV91cmwpOwpAQCAtMTY4LDcgKzE3Nyw3IEBACiAgIHZvaWQgT25EZW11eGVyU3RvcHBlZCgpOwogICB2b2lkIE9uRGVtdXhlclN0cmVhbVJlYWQoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlcik7CiAgIC8vIFN0YXJib2FyZFBsYXllcjo6SG9zdCBpbXBsZW1lbnRhdGlvbi4KICAgdm9pZCBPbk5lZWREYXRhKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgb3ZlcnJpZGU7CiAgIHZvaWQgT25QbGF5ZXJTdGF0dXMoU2JQbGF5ZXJTdGF0ZSBzdGF0ZSkgb3ZlcnJpZGU7CkBAIC0xOTMsNiArMjAyLDEyIEBACiAgIC8vIFJldHJpZXZlIHRoZSBzdGF0aXN0aWNzIGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgdG8gbWVzc2FnZS4KICAgc3RkOjpzdHJpbmcgQXBwZW5kU3RhdGlzdGljc1N0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgY29uc3Q7CiAKKyAgLy8gR2V0IGluZm9ybWF0aW9uIG9uIHRoZSB0aW1lIHNpbmNlIGFwcCBzdGFydCBhbmQgdGhlIHRpbWUgc2luY2UgdGhlIGxhc3QKKyAgLy8gcGxheWJhY2sgcmVzdW1lLgorICBzdGQ6OnN0cmluZyBHZXRUaW1lSW5mb3JtYXRpb24oKSBjb25zdDsKKworICB2b2lkIFJ1blNldERybVN5c3RlbVJlYWR5Q0IoKTsKKwogICAvLyBBbiBpZGVudGlmaWVyIHN0cmluZyBmb3IgdGhlIHBpcGVsaW5lLCB1c2VkIGluIENWYWwgdG8gaWRlbnRpZnkgbXVsdGlwbGUKICAgLy8gcGlwZWxpbmVzLgogICBjb25zdCBzdGQ6OnN0cmluZyBwaXBlbGluZV9pZGVudGlmaWVyXzsKQEAgLTIxNSwxNCArMjMwLDE0IEBACiAgIG11dGFibGUgYmFzZTo6TG9jayBsb2NrXzsKIAogICAvLyBBbW91bnQgb2YgYXZhaWxhYmxlIGJ1ZmZlcmVkIGRhdGEuICBTZXQgYnkgZmlsdGVycy4KLSAgUmFuZ2VzPFRpbWVEZWx0YT4gYnVmZmVyZWRfdGltZV9yYW5nZXNfOworICA6Om1lZGlhOjpSYW5nZXM8VGltZURlbHRhPiBidWZmZXJlZF90aW1lX3Jhbmdlc187CiAKICAgLy8gVHJ1ZSB3aGVuIEFkZEJ1ZmZlcmVkQnl0ZVJhbmdlKCkgaGFzIGJlZW4gY2FsbGVkIG1vcmUgcmVjZW50bHkgdGhhbgogICAvLyBEaWRMb2FkaW5nUHJvZ3Jlc3MoKS4KICAgbXV0YWJsZSBib29sIGRpZF9sb2FkaW5nX3Byb2dyZXNzXzsKIAogICAvLyBWaWRlbydzIG5hdHVyYWwgd2lkdGggYW5kIGhlaWdodC4gIFNldCBieSBmaWx0ZXJzLgotICBtYXRoOjpTaXplIG5hdHVyYWxfc2l6ZV87CisgIGdmeDo6U2l6ZSBuYXR1cmFsX3NpemVfOwogCiAgIC8vIEN1cnJlbnQgdm9sdW1lIGxldmVsIChmcm9tIDAuMGYgdG8gMS4wZikuICBUaGlzIHZhbHVlIGlzIHNldCBpbW1lZGlhdGVseQogICAvLyB2aWEgU2V0Vm9sdW1lKCkgYW5kIGEgdGFzayBpcyBkaXNwYXRjaGVkIG9uIHRoZSBtZXNzYWdlIGxvb3AgdG8gbm90aWZ5IHRoZQpAQCAtMjUwLDcgKzI2NSw3IEBACiAKICAgLy8gUGVybWFuZW50IGNhbGxiYWNrcyBwYXNzZWQgaW4gdmlhIFN0YXJ0KCkuCiAgIFNldERybVN5c3RlbVJlYWR5Q0Igc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfOwotICBQaXBlbGluZVN0YXR1c0NCIGVuZGVkX2NiXzsKKyAgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBlbmRlZF9jYl87CiAgIEVycm9yQ0IgZXJyb3JfY2JfOwogICBCdWZmZXJpbmdTdGF0ZUNCIGJ1ZmZlcmluZ19zdGF0ZV9jYl87CiAgIGJhc2U6OkNsb3N1cmUgZHVyYXRpb25fY2hhbmdlX2NiXzsKQEAgLTMxNyw2ICszMzIsMTAgQEAKIAogICBQbGF5YmFja1N0YXRpc3RpY3MgcGxheWJhY2tfc3RhdGlzdGljc187CiAKKyAgU2JUaW1lTW9ub3RvbmljIGxhc3RfcmVzdW1lX3RpbWVfID0gLTE7CisKKyAgU2JUaW1lTW9ub3RvbmljIHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiX3RpbWVfID0gLTE7CisKICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNiUGxheWVyUGlwZWxpbmUpOwogfTsKIApAQCAtNDA4LDI5ICs0MjcsMjEgQEAKICAgICAgICAgb25fZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9lbmNvdW50ZXJlZCwKICAgICBjb25zdCBjaGFyKiBpbml0X2RhdGFfdHlwZSwgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdF9kYXRhLAogICAgIHVuc2lnbmVkIGludCBpbml0X2RhdGFfbGVuZ3RoKSB7Ci0gIG1lZGlhOjpFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGVfZW51bTsKLSAgaWYgKCFzdHJjbXAoaW5pdF9kYXRhX3R5cGUsICJjZW5jIikpIHsKLSAgICBpbml0X2RhdGFfdHlwZV9lbnVtID0gbWVkaWE6OmtFbWVJbml0RGF0YVR5cGVDZW5jOwotICB9IGVsc2UgaWYgKCFzdHJjbXAoaW5pdF9kYXRhX3R5cGUsICJmYWlycGxheSIpKSB7Ci0gICAgaW5pdF9kYXRhX3R5cGVfZW51bSA9IG1lZGlhOjprRW1lSW5pdERhdGFUeXBlRmFpcnBsYXk7Ci0gIH0gZWxzZSBpZiAoIXN0cmNtcChpbml0X2RhdGFfdHlwZSwgImtleWlkcyIpKSB7Ci0gICAgaW5pdF9kYXRhX3R5cGVfZW51bSA9IG1lZGlhOjprRW1lSW5pdERhdGFUeXBlS2V5SWRzOwotICB9IGVsc2UgaWYgKCFzdHJjbXAoaW5pdF9kYXRhX3R5cGUsICJ3ZWJtIikpIHsKLSAgICBpbml0X2RhdGFfdHlwZV9lbnVtID0gbWVkaWE6OmtFbWVJbml0RGF0YVR5cGVXZWJNOwotICB9IGVsc2UgewotICAgIExPRyhXQVJOSU5HKSA8PCAiVW5rbm93biBFTUUgaW5pdGlhbGl6YXRpb24gZGF0YSB0eXBlLiI7Ci0gICAgcmV0dXJuOwotICB9CisgIExPR19JRihXQVJOSU5HLCBzdHJjbXAoaW5pdF9kYXRhX3R5cGUsICJjZW5jIikgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcChpbml0X2RhdGFfdHlwZSwgImZhaXJwbGF5IikgIT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcChpbml0X2RhdGFfdHlwZSwgImtleWlkcyIpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoaW5pdF9kYXRhX3R5cGUsICJ3ZWJtIikgIT0gMCkKKyAgICAgIDw8ICJVbmtub3duIEVNRSBpbml0aWFsaXphdGlvbiBkYXRhIHR5cGU6ICIgPDwgaW5pdF9kYXRhX3R5cGU7CisKICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gaW5pdF9kYXRhX3ZlYyhpbml0X2RhdGEsIGluaXRfZGF0YSArIGluaXRfZGF0YV9sZW5ndGgpOwogICBEQ0hFQ0soIW9uX2VuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfZW5jb3VudGVyZWQuaXNfbnVsbCgpKTsKLSAgb25fZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9lbmNvdW50ZXJlZC5SdW4oaW5pdF9kYXRhX3R5cGVfZW51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9kYXRhX3ZlYyk7CisgIG9uX2VuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfZW5jb3VudGVyZWQuUnVuKGluaXRfZGF0YV90eXBlLCBpbml0X2RhdGFfdmVjKTsKIH0KICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKIAogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpTdGFydChEZW11eGVyKiBkZW11eGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTZXREcm1TeXN0ZW1SZWFkeUNCJiBzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgZW5kZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2sgZW5kZWRfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVycm9yQ0ImIGVycm9yX2NiLCBjb25zdCBTZWVrQ0ImIHNlZWtfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlcmluZ1N0YXRlQ0ImIGJ1ZmZlcmluZ19zdGF0ZV9jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgZHVyYXRpb25fY2hhbmdlX2NiLApAQCAtNDUxLDcgKzQ2Miw3IEBACiAgIFN0YXJ0VGFza1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKICAgcGFyYW1ldGVycy5kZW11eGVyID0gZGVtdXhlcjsKICAgcGFyYW1ldGVycy5zZXRfZHJtX3N5c3RlbV9yZWFkeV9jYiA9IHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiOwotICBwYXJhbWV0ZXJzLmVuZGVkX2NiID0gZW5kZWRfY2I7CisgIHBhcmFtZXRlcnMuZW5kZWRfY2IgPSBzdGQ6Om1vdmUoZW5kZWRfY2IpOwogICBwYXJhbWV0ZXJzLmVycm9yX2NiID0gZXJyb3JfY2I7CiAgIHBhcmFtZXRlcnMuc2Vla19jYiA9IHNlZWtfY2I7CiAgIHBhcmFtZXRlcnMuYnVmZmVyaW5nX3N0YXRlX2NiID0gYnVmZmVyaW5nX3N0YXRlX2NiOwpAQCAtNDYzLDggKzQ3NCw5IEBACiAgIHBhcmFtZXRlcnMuaXNfdXJsX2Jhc2VkID0gZmFsc2U7CiAjZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCiAKLSAgdGFza19ydW5uZXJfLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmU2JQbGF5ZXJQaXBlbGluZTo6U3RhcnRUYXNrLCB0aGlzLCBwYXJhbWV0ZXJzKSk7CisgIHRhc2tfcnVubmVyXy0+UG9zdFRhc2soRlJPTV9IRVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJlNiUGxheWVyUGlwZWxpbmU6OlN0YXJ0VGFzaywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlBhc3NlZCgmcGFyYW1ldGVycykpKTsKIH0KIAogI2lmIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCkBAIC00NzIsNyArNDg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWRDQiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uX2VuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfZW5jb3VudGVyZWRfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBlbmRlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBlbmRlZF9jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IsIGNvbnN0IFNlZWtDQiYgc2Vla19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyaW5nU3RhdGVDQiYgYnVmZmVyaW5nX3N0YXRlX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpDbG9zdXJlJiBkdXJhdGlvbl9jaGFuZ2VfY2IsCkBAIC00OTIsNyArNTA0LDcgQEAKICAgU3RhcnRUYXNrUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogICBwYXJhbWV0ZXJzLmRlbXV4ZXIgPSBOVUxMOwogICBwYXJhbWV0ZXJzLnNldF9kcm1fc3lzdGVtX3JlYWR5X2NiID0gc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2I7Ci0gIHBhcmFtZXRlcnMuZW5kZWRfY2IgPSBlbmRlZF9jYjsKKyAgcGFyYW1ldGVycy5lbmRlZF9jYiA9IHN0ZDo6bW92ZShlbmRlZF9jYik7CiAgIHBhcmFtZXRlcnMuZXJyb3JfY2IgPSBlcnJvcl9jYjsKICAgcGFyYW1ldGVycy5zZWVrX2NiID0gc2Vla19jYjsKICAgcGFyYW1ldGVycy5idWZmZXJpbmdfc3RhdGVfY2IgPSBidWZmZXJpbmdfc3RhdGVfY2I7CkBAIC01MDYsMTEgKzUxOCwxMSBAQAogICAgICAgICAgICAgICAgICBvbl9lbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2VuY291bnRlcmVkX2NiKTsKICAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfID0gcGFyYW1ldGVycy5zZXRfZHJtX3N5c3RlbV9yZWFkeV9jYjsKICAgRENIRUNLKCFzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl8uaXNfbnVsbCgpKTsKLSAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfLlJ1bigKLSAgICAgIGJhc2U6OkJpbmQoJlNiUGxheWVyUGlwZWxpbmU6OlNldERybVN5c3RlbSwgdGhpcykpOworICBSdW5TZXREcm1TeXN0ZW1SZWFkeUNCKCk7CiAKLSAgdGFza19ydW5uZXJfLT5Qb3N0VGFzaygKLSAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmU2JQbGF5ZXJQaXBlbGluZTo6U3RhcnRUYXNrLCB0aGlzLCBwYXJhbWV0ZXJzKSk7CisgIHRhc2tfcnVubmVyXy0+UG9zdFRhc2soRlJPTV9IRVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJlNiUGxheWVyUGlwZWxpbmU6OlN0YXJ0VGFzaywgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlBhc3NlZCgmcGFyYW1ldGVycykpKTsKIH0KICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKIApAQCAtNTYxLDcgKzU3Myw3IEBACiAgIHBsYXliYWNrX3N0YXRpc3RpY3NfLk9uU2Vlayh0aW1lKTsKIAogICBpZiAoIXBsYXllcl8pIHsKLSAgICBzZWVrX2NiLlJ1bihQSVBFTElORV9FUlJPUl9JTlZBTElEX1NUQVRFLCBmYWxzZSwKKyAgICBzZWVrX2NiLlJ1big6Om1lZGlhOjpQSVBFTElORV9FUlJPUl9JTlZBTElEX1NUQVRFLCBmYWxzZSwKICAgICAgICAgICAgICAgICBBcHBlbmRTdGF0aXN0aWNzU3RyaW5nKCJTYlBsYXllclBpcGVsaW5lOjpTZWVrIGZhaWxlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBsYXllcl8gaXMgbnVsbHB0ci4iKSk7CiAgICAgcmV0dXJuOwpAQCAtNjY4LDcgKzY4MCw3IEBACiAgICAgcGxheWVyXy0+R2V0VmlkZW9SZXNvbHV0aW9uKCZmcmFtZV93aWR0aCwgJmZyYW1lX2hlaWdodCk7CiAgICAgaWYgKGZyYW1lX3dpZHRoICE9IG5hdHVyYWxfc2l6ZV8ud2lkdGgoKSB8fAogICAgICAgICBmcmFtZV9oZWlnaHQgIT0gbmF0dXJhbF9zaXplXy5oZWlnaHQoKSkgewotICAgICAgbmF0dXJhbF9zaXplXyA9IG1hdGg6OlNpemUoZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCk7CisgICAgICBuYXR1cmFsX3NpemVfID0gZ2Z4OjpTaXplKGZyYW1lX3dpZHRoLCBmcmFtZV9oZWlnaHQpOwogICAgICAgY29udGVudF9zaXplX2NoYW5nZV9jYl8uUnVuKCk7CiAgICAgfQogICB9CkBAIC02ODcsMTEgKzY5OSwxMSBAQAogICByZXR1cm4gbWVkaWFfdGltZTsKIH0KIAotUmFuZ2VzPFRpbWVEZWx0YT4gU2JQbGF5ZXJQaXBlbGluZTo6R2V0QnVmZmVyZWRUaW1lUmFuZ2VzKCkgeworOjptZWRpYTo6UmFuZ2VzPFRpbWVEZWx0YT4gU2JQbGF5ZXJQaXBlbGluZTo6R2V0QnVmZmVyZWRUaW1lUmFuZ2VzKCkgewogICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwogCiAjaWYgU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLSAgUmFuZ2VzPFRpbWVEZWx0YT4gdGltZV9yYW5nZXM7CisgIDo6bWVkaWE6OlJhbmdlczxUaW1lRGVsdGE+IHRpbWVfcmFuZ2VzOwogCiAgIGlmICghcGxheWVyXykgewogICAgIHJldHVybiB0aW1lX3JhbmdlczsKQEAgLTc0OCw3ICs3NjAsNyBAQAogfQogI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogCi12b2lkIFNiUGxheWVyUGlwZWxpbmU6OkdldE5hdHVyYWxWaWRlb1NpemUobWF0aDo6U2l6ZSogb3V0X3NpemUpIGNvbnN0IHsKK3ZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6R2V0TmF0dXJhbFZpZGVvU2l6ZShnZng6OlNpemUqIG91dF9zaXplKSBjb25zdCB7CiAgIENIRUNLKG91dF9zaXplKTsKICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKICAgKm91dF9zaXplID0gbmF0dXJhbF9zaXplXzsKQEAgLTc4OSw3ICs4MDEsNyBAQAogICBkZWNvZGVfdG9fdGV4dHVyZV9vdXRwdXRfbW9kZV8gPSBlbmFibGVkOwogfQogCi12b2lkIFNiUGxheWVyUGlwZWxpbmU6OlN0YXJ0VGFzayhjb25zdCBTdGFydFRhc2tQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKSB7Cit2b2lkIFNiUGxheWVyUGlwZWxpbmU6OlN0YXJ0VGFzayhTdGFydFRhc2tQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6Om1lZGlhIiwgIlNiUGxheWVyUGlwZWxpbmU6OlN0YXJ0VGFzayIpOwogCiAgIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CkBAIC03OTgsNyArODEwLDcgQEAKIAogICBkZW11eGVyXyA9IHBhcmFtZXRlcnMuZGVtdXhlcjsKICAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfID0gcGFyYW1ldGVycy5zZXRfZHJtX3N5c3RlbV9yZWFkeV9jYjsKLSAgZW5kZWRfY2JfID0gcGFyYW1ldGVycy5lbmRlZF9jYjsKKyAgZW5kZWRfY2JfID0gc3RkOjptb3ZlKHBhcmFtZXRlcnMuZW5kZWRfY2IpOwogICBlcnJvcl9jYl8gPSBwYXJhbWV0ZXJzLmVycm9yX2NiOwogICB7CiAgICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKQEAgLTgxNiwxMSArODI4LDkgQEAKICAgICByZXR1cm47CiAgIH0KICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLSAgY29uc3QgYm9vbCBrRW5hYmxlVGV4dFRyYWNrcyA9IGZhbHNlOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSh0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNiUGxheWVyUGlwZWxpbmU6Ok9uRGVtdXhlckluaXRpYWxpemVkLCB0aGlzKSksCi0gICAgICAgICAgICAgICAgICAgICAgIGtFbmFibGVUZXh0VHJhY2tzKTsKKyAgZGVtdXhlcl8tPkluaXRpYWxpemUoCisgICAgICB0aGlzLCBCaW5kVG9DdXJyZW50TG9vcCgKKyAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZTYlBsYXllclBpcGVsaW5lOjpPbkRlbXV4ZXJJbml0aWFsaXplZCwgdGhpcykpKTsKIAogICBzdGFydGVkXyA9IHRydWU7CiB9CkBAIC04NDksNyArODU5LDcgQEAKIH0KIAogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpPbkJ1ZmZlcmVkVGltZVJhbmdlc0NoYW5nZWQoCi0gICAgY29uc3QgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4mIHJhbmdlcykgeworICAgIGNvbnN0IDo6bWVkaWE6OlJhbmdlczxiYXNlOjpUaW1lRGVsdGE+JiByYW5nZXMpIHsKICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKICAgZGlkX2xvYWRpbmdfcHJvZ3Jlc3NfID0gdHJ1ZTsKICAgYnVmZmVyZWRfdGltZV9yYW5nZXNfID0gcmFuZ2VzOwpAQCAtODcwLDIwICs4ODAsMTEgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAoZXJyb3IgIT0gUElQRUxJTkVfT0spIHsKKyAgaWYgKGVycm9yICE9IDo6bWVkaWE6OlBJUEVMSU5FX09LKSB7CiAgICAgQ2FsbEVycm9yQ0IoZXJyb3IsICJEZW11eGVyIGVycm9yLiIpOwogICB9CiB9CiAKLXZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6QWRkVGV4dFN0cmVhbShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZykgewotICBOT1RSRUFDSEVEKCk7Ci19Ci0KLXZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6UmVtb3ZlVGV4dFN0cmVhbShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSkgewotICBOT1RSRUFDSEVEKCk7Ci19Ci0KICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpDcmVhdGVVcmxQbGF5ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV91cmwpIHsKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6Om1lZGlhIiwgIlNiUGxheWVyUGlwZWxpbmU6OkNyZWF0ZVVybFBsYXllciIpOwpAQCAtOTMzLDEwICs5MzQsMTUgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBDYWxsU2Vla0NCKERFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRCwKKyAgc3RkOjpzdHJpbmcgdGltZV9pbmZvcm1hdGlvbiA9IEdldFRpbWVJbmZvcm1hdGlvbigpOworICBMT0coSU5GTykgPDwgIlNiUGxheWVyUGlwZWxpbmU6OkNyZWF0ZVVybFBsYXllciBmYWlsZWQgdG8gY3JlYXRlIGEgdmFsaWQgIgorICAgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllciAtICIKKyAgICAgICAgICAgIDw8IHRpbWVfaW5mb3JtYXRpb24gPDwgIiBcJyIgPDwgZXJyb3JfbWVzc2FnZSA8PCAiXCciOworCisgIENhbGxTZWVrQ0IoOjptZWRpYTo6REVDT0RFUl9FUlJPUl9OT1RfU1VQUE9SVEVELAogICAgICAgICAgICAgICJTYlBsYXllclBpcGVsaW5lOjpDcmVhdGVVcmxQbGF5ZXIgZmFpbGVkIHRvIGNyZWF0ZSBhIHZhbGlkICIKLSAgICAgICAgICAgICAiU3RhcmJvYXJkUGxheWVyOiBcJyIgKwotICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlICsgIlwnIik7CisgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllciAtICIgKworICAgICAgICAgICAgICAgICB0aW1lX2luZm9ybWF0aW9uICsgIiBcJyIgKyBlcnJvcl9tZXNzYWdlICsgIlwnIik7CiB9CiAKIHZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6U2V0RHJtU3lzdGVtKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pIHsKQEAgLTk0OSw2ICs5NTUsNyBAQAogICB9CiAKICAgaWYgKHBsYXllcl8tPklzVmFsaWQoKSkgeworICAgIHBsYXllcl8tPlJlY29yZFNldERybVN5c3RlbVJlYWR5VGltZShzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl90aW1lXyk7CiAgICAgcGxheWVyXy0+U2V0RHJtU3lzdGVtKGRybV9zeXN0ZW0pOwogICB9CiB9CkBAIC05ODcsOSArOTk0LDEyIEBACiAgICAgICB2aWRlb19zdHJlYW1fID8gdmlkZW9fc3RyZWFtXy0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKQogICAgICAgICAgICAgICAgICAgICA6IGludmFsaWRfdmlkZW9fY29uZmlnOwogCisgIHN0ZDo6c3RyaW5nIGF1ZGlvX21pbWVfdHlwZSA9IGF1ZGlvX3N0cmVhbV8gPyBhdWRpb19zdHJlYW1fLT5taW1lX3R5cGUoKSA6ICIiOworICBzdGQ6OnN0cmluZyB2aWRlb19taW1lX3R5cGU7CiAgIGlmICh2aWRlb19zdHJlYW1fKSB7CiAgICAgcGxheWJhY2tfc3RhdGlzdGljc18uVXBkYXRlVmlkZW9Db25maWcoCiAgICAgICAgIHZpZGVvX3N0cmVhbV8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCkpOworICAgIHZpZGVvX21pbWVfdHlwZSA9IHZpZGVvX3N0cmVhbV8tPm1pbWVfdHlwZSgpOwogICB9CiAKICAgc3RkOjpzdHJpbmcgZXJyb3JfbWVzc2FnZTsKQEAgLTEwMDMsOCArMTAxMyw4IEBACiAgICAgTE9HKElORk8pIDw8ICJDcmVhdGluZyBTdGFyYm9hcmRQbGF5ZXIuIjsKICAgICBwbGF5ZXJfLnJlc2V0KG5ldyBTdGFyYm9hcmRQbGF5ZXIoCiAgICAgICAgIHRhc2tfcnVubmVyXywgZ2V0X2RlY29kZV90YXJnZXRfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl9mdW5jXywKLSAgICAgICAgYXVkaW9fY29uZmlnLCB2aWRlb19jb25maWcsIHdpbmRvd18sIGRybV9zeXN0ZW0sIHRoaXMsCi0gICAgICAgIHNldF9ib3VuZHNfaGVscGVyXy5nZXQoKSwgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmRfLAorICAgICAgICBhdWRpb19jb25maWcsIGF1ZGlvX21pbWVfdHlwZSwgdmlkZW9fY29uZmlnLCB2aWRlb19taW1lX3R5cGUsIHdpbmRvd18sCisgICAgICAgIGRybV9zeXN0ZW0sIHRoaXMsIHNldF9ib3VuZHNfaGVscGVyXy5nZXQoKSwgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmRfLAogICAgICAgICAqZGVjb2RlX3RvX3RleHR1cmVfb3V0cHV0X21vZGVfLCB2aWRlb19mcmFtZV9wcm92aWRlcl8sCiAgICAgICAgIG1heF92aWRlb19jYXBhYmlsaXRpZXNfKSk7CiAgICAgaWYgKHBsYXllcl8tPklzVmFsaWQoKSkgewpAQCAtMTAxOCw2ICsxMDI4LDcgQEAKICAgfQogCiAgIGlmIChwbGF5ZXJfICYmIHBsYXllcl8tPklzVmFsaWQoKSkgeworICAgIHBsYXllcl8tPlJlY29yZFNldERybVN5c3RlbVJlYWR5VGltZShzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl90aW1lXyk7CiAgICAgYmFzZTo6Q2xvc3VyZSBvdXRwdXRfbW9kZV9jaGFuZ2VfY2I7CiAgICAgewogICAgICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKQEAgLTEwMzUsMTAgKzEwNDYsMTUgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBDYWxsU2Vla0NCKERFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRCwKKyAgc3RkOjpzdHJpbmcgdGltZV9pbmZvcm1hdGlvbiA9IEdldFRpbWVJbmZvcm1hdGlvbigpOworICBMT0coSU5GTykgPDwgIlNiUGxheWVyUGlwZWxpbmU6OkNyZWF0ZVBsYXllciBmYWlsZWQgdG8gY3JlYXRlIGEgdmFsaWQgIgorICAgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllciAtICIKKyAgICAgICAgICAgIDw8IHRpbWVfaW5mb3JtYXRpb24gPDwgIiBcJyIgPDwgZXJyb3JfbWVzc2FnZSA8PCAiXCciOworCisgIENhbGxTZWVrQ0IoOjptZWRpYTo6REVDT0RFUl9FUlJPUl9OT1RfU1VQUE9SVEVELAogICAgICAgICAgICAgICJTYlBsYXllclBpcGVsaW5lOjpDcmVhdGVQbGF5ZXIgZmFpbGVkIHRvIGNyZWF0ZSBhIHZhbGlkICIKLSAgICAgICAgICAgICAiU3RhcmJvYXJkUGxheWVyOiBcJyIgKwotICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlICsgIlwnIik7CisgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllciAtICIgKworICAgICAgICAgICAgICAgICB0aW1lX2luZm9ybWF0aW9uICsgIiBcJyIgKyBlcnJvcl9tZXNzYWdlICsgIlwnIik7CiB9CiAKIHZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6T25EZW11eGVySW5pdGlhbGl6ZWQoUGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7CkBAIC0xMDUzLDcgKzEwNjksNyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGlmIChzdGF0dXMgIT0gUElQRUxJTkVfT0spIHsKKyAgaWYgKHN0YXR1cyAhPSA6Om1lZGlhOjpQSVBFTElORV9PSykgewogICAgIENhbGxFcnJvckNCKHN0YXR1cywgIkRlbXV4ZXIgaW5pdGlhbGl6YXRpb24gZXJyb3IuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC0xMDY2LDEyICsxMDgyLDI4IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOworICBhdXRvIHN0cmVhbXMgPSBkZW11eGVyXy0+R2V0QWxsU3RyZWFtcygpOworICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBudWxscHRyOworICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBudWxscHRyOworICBmb3IgKGF1dG8mJiBzdHJlYW0gOiBzdHJlYW1zKSB7CisgICAgaWYgKHN0cmVhbS0+dHlwZSgpID09IERlbXV4ZXJTdHJlYW06OkFVRElPKSB7CisgICAgICBpZiAoYXVkaW9fc3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgYXVkaW9fc3RyZWFtID0gc3RyZWFtOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBtb3JlIHRoYW4gb25lIGF1ZGlvIHN0cmVhbXMuIjsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0cmVhbS0+dHlwZSgpID09IERlbXV4ZXJTdHJlYW06OlZJREVPKSB7CisgICAgICBpZiAodmlkZW9fc3RyZWFtID09IG51bGxwdHIpIHsKKyAgICAgICAgdmlkZW9fc3RyZWFtID0gc3RyZWFtOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBtb3JlIHRoYW4gb25lIHZpZGVvIHN0cmVhbXMuIjsKKyAgICAgIH0KKyAgICB9CisgIH0KIAogICBpZiAoYXVkaW9fc3RyZWFtID09IE5VTEwgJiYgdmlkZW9fc3RyZWFtID09IE5VTEwpIHsKICAgICBMT0coSU5GTykgPDwgIlRoZSB2aWRlbyBoYXMgdG8gY29udGFpbiBhbiBhdWRpbyB0cmFjayBvciBhIHZpZGVvIHRyYWNrLiI7Ci0gICAgQ2FsbEVycm9yQ0IoREVNVVhFUl9FUlJPUl9OT19TVVBQT1JURURfU1RSRUFNUywKKyAgICBDYWxsRXJyb3JDQig6Om1lZGlhOjpERU1VWEVSX0VSUk9SX05PX1NVUFBPUlRFRF9TVFJFQU1TLAogICAgICAgICAgICAgICAgICJUaGUgdmlkZW8gaGFzIHRvIGNvbnRhaW4gYW4gYXVkaW8gdHJhY2sgb3IgYSB2aWRlbyB0cmFjay4iKTsKICAgICByZXR1cm47CiAgIH0KQEAgLTEwOTgsOCArMTEzMCw3IEBACiAgICAgICBjb250ZW50X3NpemVfY2hhbmdlX2NiXy5SdW4oKTsKICAgICB9CiAgICAgaWYgKGlzX2VuY3J5cHRlZCkgewotICAgICAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfLlJ1bigKLSAgICAgICAgICBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKCZTYlBsYXllclBpcGVsaW5lOjpDcmVhdGVQbGF5ZXIsIHRoaXMpKSk7CisgICAgICBSdW5TZXREcm1TeXN0ZW1SZWFkeUNCKCk7CiAgICAgICByZXR1cm47CiAgICAgfQogICB9CkBAIC0xMTEwLDcgKzExNDEsNyBAQAogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpPbkRlbXV4ZXJTZWVrZWQoUGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7CiAgIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CiAKLSAgaWYgKHN0YXR1cyA9PSBQSVBFTElORV9PSyAmJiBwbGF5ZXJfKSB7CisgIGlmIChzdGF0dXMgPT0gOjptZWRpYTo6UElQRUxJTkVfT0sgJiYgcGxheWVyXykgewogICAgIHBsYXllcl8tPlNlZWsoc2Vla190aW1lXyk7CiAgIH0KIH0KQEAgLTExMjksNyArMTE2MCw3IEBACiAKIHZvaWQgU2JQbGF5ZXJQaXBlbGluZTo6T25EZW11eGVyU3RyZWFtUmVhZCgKICAgICBEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUsIERlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIpIHsKICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogICBEQ0hFQ0soIWlzX3VybF9iYXNlZF8pOwogI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQpAQCAtMTEzOCw4ICsxMTY5LDggQEAKIAogICBpZiAoIXRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKSB7CiAgICAgdGFza19ydW5uZXJfLT5Qb3N0VGFzaygKLSAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZTYlBsYXllclBpcGVsaW5lOjpPbkRlbXV4ZXJTdHJlYW1SZWFkLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgc3RhdHVzLCBidWZmZXIpKTsKKyAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kT25jZSgmU2JQbGF5ZXJQaXBlbGluZTo6T25EZW11eGVyU3RyZWFtUmVhZCwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBzdGF0dXMsIGJ1ZmZlcikpOwogICAgIHJldHVybjsKICAgfQogCkBAIC0xMTYxLDcgKzExOTIsNyBAQAogICAgICAgdmlkZW9fcmVhZF9pbl9wcm9ncmVzc18gPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFzZWVrX2NiXy5pc19udWxsKCkpIHsKLSAgICAgIENhbGxTZWVrQ0IoUElQRUxJTkVfT0ssICIiKTsKKyAgICAgIENhbGxTZWVrQ0IoOjptZWRpYTo6UElQRUxJTkVfT0ssICIiKTsKICAgICB9CiAgICAgcmV0dXJuOwogICB9CkBAIC0xMTY5LDcgKzEyMDAsNyBAQAogICBpZiAoc3RhdHVzID09IERlbXV4ZXJTdHJlYW06OmtDb25maWdDaGFuZ2VkKSB7CiAgICAgVXBkYXRlRGVjb2RlckNvbmZpZyhzdHJlYW0pOwogICAgIHN0cmVhbS0+UmVhZCgKLSAgICAgICAgYmFzZTo6QmluZCgmU2JQbGF5ZXJQaXBlbGluZTo6T25EZW11eGVyU3RyZWFtUmVhZCwgdGhpcywgdHlwZSkpOworICAgICAgICBiYXNlOjpCaW5kT25jZSgmU2JQbGF5ZXJQaXBlbGluZTo6T25EZW11eGVyU3RyZWFtUmVhZCwgdGhpcywgdHlwZSkpOwogICAgIHJldHVybjsKICAgfQogCkBAIC0xMjQ2LDcgKzEyNzcsOCBAQAogICBEZW11eGVyU3RyZWFtKiBzdHJlYW0gPQogICAgICAgdHlwZSA9PSBEZW11eGVyU3RyZWFtOjpBVURJTyA/IGF1ZGlvX3N0cmVhbV8gOiB2aWRlb19zdHJlYW1fOwogICBEQ0hFQ0soc3RyZWFtKTsKLSAgc3RyZWFtLT5SZWFkKGJhc2U6OkJpbmQoJlNiUGxheWVyUGlwZWxpbmU6Ok9uRGVtdXhlclN0cmVhbVJlYWQsIHRoaXMsIHR5cGUpKTsKKyAgc3RyZWFtLT5SZWFkKAorICAgICAgYmFzZTo6QmluZE9uY2UoJlNiUGxheWVyUGlwZWxpbmU6Ok9uRGVtdXhlclN0cmVhbVJlYWQsIHRoaXMsIHR5cGUpKTsKIH0KIAogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpPblBsYXllclN0YXR1cyhTYlBsYXllclN0YXRlIHN0YXRlKSB7CkBAIC0xMjgwLDcgKzEzMTIsNyBAQAogICAgICAgICBwbGF5ZXJfLT5HZXRWaWRlb1Jlc29sdXRpb24oJmZyYW1lX3dpZHRoLCAmZnJhbWVfaGVpZ2h0KTsKICAgICAgICAgYm9vbCBuYXR1cmFsX3NpemVfY2hhbmdlZCA9IChmcmFtZV93aWR0aCAhPSBuYXR1cmFsX3NpemVfLndpZHRoKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9oZWlnaHQgIT0gbmF0dXJhbF9zaXplXy5oZWlnaHQoKSk7Ci0gICAgICAgIG5hdHVyYWxfc2l6ZV8gPSBtYXRoOjpTaXplKGZyYW1lX3dpZHRoLCBmcmFtZV9oZWlnaHQpOworICAgICAgICBuYXR1cmFsX3NpemVfID0gZ2Z4OjpTaXplKGZyYW1lX3dpZHRoLCBmcmFtZV9oZWlnaHQpOwogICAgICAgICBpZiAobmF0dXJhbF9zaXplX2NoYW5nZWQpIHsKICAgICAgICAgICBjb250ZW50X3NpemVfY2hhbmdlX2NiXy5SdW4oKTsKICAgICAgICAgfQpAQCAtMTI4OCw3ICsxMzIwLDcgQEAKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKICAgICAgIGJ1ZmZlcmluZ19zdGF0ZV9jYl8uUnVuKGtQcmVyb2xsQ29tcGxldGVkKTsKICAgICAgIGlmICghc2Vla19jYl8uaXNfbnVsbCgpKSB7Ci0gICAgICAgIENhbGxTZWVrQ0IoUElQRUxJTkVfT0ssICIiKTsKKyAgICAgICAgQ2FsbFNlZWtDQig6Om1lZGlhOjpQSVBFTElORV9PSywgIiIpOwogICAgICAgfQogICAgICAgaWYgKHZpZGVvX3N0cmVhbV8pIHsKICAgICAgICAgcGxheWJhY2tfc3RhdGlzdGljc18uT25QcmVzZW50aW5nKApAQCAtMTI5Nyw3ICsxMzI5LDcgQEAKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIGtTYlBsYXllclN0YXRlRW5kT2ZTdHJlYW06Ci0gICAgICBlbmRlZF9jYl8uUnVuKFBJUEVMSU5FX09LKTsKKyAgICAgIHN0ZDo6bW92ZShlbmRlZF9jYl8pLlJ1big6Om1lZGlhOjpQSVBFTElORV9PSyk7CiAgICAgICBlbmRlZF8gPSB0cnVlOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrU2JQbGF5ZXJTdGF0ZURlc3Ryb3llZDoKQEAgLTEzMTksMTAgKzEzNTEsMTAgQEAKICAgICBEQ0hFQ0soaXNfdXJsX2Jhc2VkXyk7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxTYlVybFBsYXllckVycm9yPihlcnJvcikpIHsKICAgICAgIGNhc2Uga1NiVXJsUGxheWVyRXJyb3JOZXR3b3JrOgotICAgICAgICBDYWxsRXJyb3JDQihQSVBFTElORV9FUlJPUl9ORVRXT1JLLCBtZXNzYWdlKTsKKyAgICAgICAgQ2FsbEVycm9yQ0IoOjptZWRpYTo6UElQRUxJTkVfRVJST1JfTkVUV09SSywgbWVzc2FnZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBrU2JVcmxQbGF5ZXJFcnJvclNyY05vdFN1cHBvcnRlZDoKLSAgICAgICAgQ2FsbEVycm9yQ0IoREVNVVhFUl9FUlJPUl9DT1VMRF9OT1RfT1BFTiwgbWVzc2FnZSk7CisgICAgICAgIENhbGxFcnJvckNCKDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfQ09VTERfTk9UX09QRU4sIG1lc3NhZ2UpOwogCiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTEzMzEsMTAgKzEzNjMsMTAgQEAKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKICAgc3dpdGNoIChlcnJvcikgewogICAgIGNhc2Uga1NiUGxheWVyRXJyb3JEZWNvZGU6Ci0gICAgICBDYWxsRXJyb3JDQihQSVBFTElORV9FUlJPUl9ERUNPREUsIG1lc3NhZ2UpOworICAgICAgQ2FsbEVycm9yQ0IoOjptZWRpYTo6UElQRUxJTkVfRVJST1JfREVDT0RFLCBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1NiUGxheWVyRXJyb3JDYXBhYmlsaXR5Q2hhbmdlZDoKLSAgICAgIENhbGxFcnJvckNCKFBMQVlCQUNLX0NBUEFCSUxJVFlfQ0hBTkdFRCwgbWVzc2FnZSk7CisgICAgICBDYWxsRXJyb3JDQig6Om1lZGlhOjpQTEFZQkFDS19DQVBBQklMSVRZX0NIQU5HRUQsIG1lc3NhZ2UpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBrU2JQbGF5ZXJFcnJvck1heDoKICAgICAgIE5PVFJFQUNIRUQoKTsKQEAgLTEzNTQsNyArMTM4Niw3IEBACiAKICAgaWYgKHN0cmVhbS0+dHlwZSgpID09IERlbXV4ZXJTdHJlYW06OkFVRElPKSB7CiAgICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBkZWNvZGVyX2NvbmZpZyA9IHN0cmVhbS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgICBwbGF5ZXJfLT5VcGRhdGVBdWRpb0NvbmZpZyhkZWNvZGVyX2NvbmZpZyk7CisgICAgcGxheWVyXy0+VXBkYXRlQXVkaW9Db25maWcoZGVjb2Rlcl9jb25maWcsIHN0cmVhbS0+bWltZV90eXBlKCkpOwogICB9IGVsc2UgewogICAgIERDSEVDS19FUShzdHJlYW0tPnR5cGUoKSwgRGVtdXhlclN0cmVhbTo6VklERU8pOwogICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgZGVjb2Rlcl9jb25maWcgPSBzdHJlYW0tPnZpZGVvX2RlY29kZXJfY29uZmlnKCk7CkBAIC0xMzYzLDcgKzEzOTUsNyBAQAogICAgICAgICAoZGVjb2Rlcl9jb25maWcubmF0dXJhbF9zaXplKCkud2lkdGgoKSAhPSBuYXR1cmFsX3NpemVfLndpZHRoKCkgfHwKICAgICAgICAgIGRlY29kZXJfY29uZmlnLm5hdHVyYWxfc2l6ZSgpLmhlaWdodCgpICE9IG5hdHVyYWxfc2l6ZV8uaGVpZ2h0KCkpOwogICAgIG5hdHVyYWxfc2l6ZV8gPSBkZWNvZGVyX2NvbmZpZy5uYXR1cmFsX3NpemUoKTsKLSAgICBwbGF5ZXJfLT5VcGRhdGVWaWRlb0NvbmZpZyhkZWNvZGVyX2NvbmZpZyk7CisgICAgcGxheWVyXy0+VXBkYXRlVmlkZW9Db25maWcoZGVjb2Rlcl9jb25maWcsIHN0cmVhbS0+bWltZV90eXBlKCkpOwogICAgIGlmIChuYXR1cmFsX3NpemVfY2hhbmdlZCkgewogICAgICAgY29udGVudF9zaXplX2NoYW5nZV9jYl8uUnVuKCk7CiAgICAgfQpAQCAtMTM3NCw3ICsxNDA2LDcgQEAKIAogdm9pZCBTYlBsYXllclBpcGVsaW5lOjpDYWxsU2Vla0NCKFBpcGVsaW5lU3RhdHVzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3JfbWVzc2FnZSkgewotICBpZiAoc3RhdHVzID09IFBJUEVMSU5FX09LKSB7CisgIGlmIChzdGF0dXMgPT0gOjptZWRpYTo6UElQRUxJTkVfT0spIHsKICAgICBEQ0hFQ0soZXJyb3JfbWVzc2FnZS5lbXB0eSgpKTsKICAgfQogCkBAIC0xMzkzLDcgKzE0MjUsNyBAQAogCiB2b2lkIFNiUGxheWVyUGlwZWxpbmU6OkNhbGxFcnJvckNCKFBpcGVsaW5lU3RhdHVzIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yX21lc3NhZ2UpIHsKLSAgRENIRUNLX05FKHN0YXR1cywgUElQRUxJTkVfT0spOworICBEQ0hFQ0tfTkUoc3RhdHVzLCA6Om1lZGlhOjpQSVBFTElORV9PSyk7CiAgIC8vIE9ubHkgdG8gcmVjb3JkIHRoZSBmaXJzdCBlcnJvci4KICAgaWYgKGVycm9yX2NiXy5pc19udWxsKCkpIHsKICAgICByZXR1cm47CkBAIC0xNDMyLDYgKzE0NjQsNyBAQAogICBEQ0hFQ0soc3VzcGVuZGVkXyk7CiAKICAgaWYgKCFzdXNwZW5kZWRfKSB7CisgICAgbGFzdF9yZXN1bWVfdGltZV8gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKICAgICBkb25lX2V2ZW50LT5TaWduYWwoKTsKICAgICByZXR1cm47CiAgIH0KQEAgLTE0NDcsMTcgKzE0ODAsMjIgQEAKICAgICAgICAgZXJyb3JfbWVzc2FnZSA9IHBsYXllcl8tPkdldFBsYXllckNyZWF0aW9uRXJyb3JNZXNzYWdlKCk7CiAgICAgICAgIHBsYXllcl8ucmVzZXQoKTsKICAgICAgIH0KKyAgICAgIHN0ZDo6c3RyaW5nIHRpbWVfaW5mb3JtYXRpb24gPSBHZXRUaW1lSW5mb3JtYXRpb24oKTsKKyAgICAgIExPRyhJTkZPKSA8PCAiU2JQbGF5ZXJQaXBlbGluZTo6UmVzdW1lVGFzayBmYWlsZWQgdG8gY3JlYXRlIGEgdmFsaWQgIgorICAgICAgICAgICAgICAgICAgICJTdGFyYm9hcmRQbGF5ZXIgLSAiCisgICAgICAgICAgICAgICAgPDwgdGltZV9pbmZvcm1hdGlvbiA8PCAiIFwnIiA8PCBlcnJvcl9tZXNzYWdlIDw8ICJcJyI7CiAgICAgICAvLyBUT0RPOiBEZXRlcm1pbmUgaWYgQ2FsbFNlZWtDQigpIG1heSBiZSB1c2VkIGhlcmUsIGFzIHxzZWVrX2NiX3wgbWF5IGJlCiAgICAgICAvLyBhdmFpbGFibGUgaWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQgYmVmb3JlIGEgc2VlayBpcyBjb21wbGV0ZWQuCi0gICAgICBDYWxsRXJyb3JDQihERUNPREVSX0VSUk9SX05PVF9TVVBQT1JURUQsCi0gICAgICAgICAgICAgICAgICAiU2JQbGF5ZXJQaXBlbGluZTo6UmVzdW1lVGFzayBmYWlsZWQgdG8gY3JlYXRlIGEgdmFsaWQgIgotICAgICAgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllcjogXCciICsKLSAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlICsgIlwnIik7CisgICAgICBDYWxsU2Vla0NCKDo6bWVkaWE6OkRFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgIlNiUGxheWVyUGlwZWxpbmU6OlJlc3VtZVRhc2sgZmFpbGVkIHRvIGNyZWF0ZSBhIHZhbGlkICIKKyAgICAgICAgICAgICAgICAgIlN0YXJib2FyZFBsYXllciAtICIgKworICAgICAgICAgICAgICAgICAgICAgdGltZV9pbmZvcm1hdGlvbiArICIgXCciICsgZXJyb3JfbWVzc2FnZSArICJcJyIpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgfQogCiAgIHN1c3BlbmRlZF8gPSBmYWxzZTsKKyAgbGFzdF9yZXN1bWVfdGltZV8gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKIAogICBkb25lX2V2ZW50LT5TaWduYWwoKTsKIH0KQEAgLTE0NzQsNiArMTUxMiw0NiBAQAogICB9CiB9CiAKK3N0ZDo6c3RyaW5nIFNiUGxheWVyUGlwZWxpbmU6OkdldFRpbWVJbmZvcm1hdGlvbigpIGNvbnN0IHsKKyAgYXV0byByb3VuZF90aW1lX2luX3NlY29uZHMgPSBbXShjb25zdCBTYlRpbWUgdGltZSkgeworICAgIGNvbnN0IGludDY0X3Qgc2Vjb25kcyA9IHRpbWUgLyBrU2JUaW1lU2Vjb25kOworICAgIGlmIChzZWNvbmRzIDwgMTUpIHsKKyAgICAgIHJldHVybiBzZWNvbmRzIC8gNSAqIDU7CisgICAgfQorICAgIGlmIChzZWNvbmRzIDwgNjApIHsKKyAgICAgIHJldHVybiBzZWNvbmRzIC8gMTUgKiAxNTsKKyAgICB9CisgICAgaWYgKHNlY29uZHMgPCAzNjAwKSB7CisgICAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8U2JUaW1lPig2MCksIHNlY29uZHMgLyA2MDAgKiA2MDApOworICAgIH0KKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8U2JUaW1lPigzNjAwKSwgc2Vjb25kcyAvIDE4MDAwICogMTgwMDApOworICB9OworICBzdGQ6OnN0cmluZyB0aW1lX3NpbmNlX3N0YXJ0ID0KKyAgICAgIHN0ZDo6dG9fc3RyaW5nKAorICAgICAgICAgIHJvdW5kX3RpbWVfaW5fc2Vjb25kcyhiYXNlOjpTdGFydHVwVGltZXI6OlRpbWVFbGFwc2VkKCkuVG9TYlRpbWUoKSkpICsKKyAgICAgICJzIjsKKyAgc3RkOjpzdHJpbmcgdGltZV9zaW5jZV9yZXN1bWUgPQorICAgICAgbGFzdF9yZXN1bWVfdGltZV8gIT0gLTEKKyAgICAgICAgICA/IHN0ZDo6dG9fc3RyaW5nKHJvdW5kX3RpbWVfaW5fc2Vjb25kcyhTYlRpbWVHZXRNb25vdG9uaWNOb3coKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9yZXN1bWVfdGltZV8pKSArCisgICAgICAgICAgICAgICAgInMiCisgICAgICAgICAgOiAibnVsbCI7CisgIHJldHVybiAidGltZSBzaW5jZSBhcHAgc3RhcnQ6ICIgKyB0aW1lX3NpbmNlX3N0YXJ0ICsKKyAgICAgICAgICIsIHRpbWUgc2luY2UgbGFzdCByZXN1bWU6ICIgKyB0aW1lX3NpbmNlX3Jlc3VtZTsKK30KKwordm9pZCBTYlBsYXllclBpcGVsaW5lOjpSdW5TZXREcm1TeXN0ZW1SZWFkeUNCKCkgeworICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6bWVkaWEiLCAiU2JQbGF5ZXJQaXBlbGluZTo6UnVuU2V0RHJtU3lzdGVtUmVhZHlDQiIpOworICBzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl90aW1lXyA9IFNiVGltZUdldE1vbm90b25pY05vdygpOworI2lmIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCisgIHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiXy5SdW4oCisgICAgICBiYXNlOjpCaW5kKCZTYlBsYXllclBpcGVsaW5lOjpTZXREcm1TeXN0ZW0sIHRoaXMpKTsKKyNlbHNlICAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKKyAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfLlJ1big6Om1lZGlhOjpCaW5kVG9DdXJyZW50TG9vcCgKKyAgICAgIGJhc2U6OkJpbmQoJlNiUGxheWVyUGlwZWxpbmU6OkNyZWF0ZVBsYXllciwgdGhpcykpKTsKKyNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKK30KKwogfSAgLy8gbmFtZXNwYWNlCiAKIC8vIHN0YXRpYwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfc2V0X2JvdW5kc19oZWxwZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5jYwppbmRleCBlNTYxYjEzLi5kMjllMDQyIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5jYworKysgYi9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5jYwpAQCAtMzYsOSArMzYsOSBAQAogICB9CiB9CiAKLWJvb2wgU2JQbGF5ZXJTZXRCb3VuZHNIZWxwZXI6OlNldEJvdW5kcyhjb25zdCBtYXRoOjpSZWN0JiByZWN0KSB7Citib29sIFNiUGxheWVyU2V0Qm91bmRzSGVscGVyOjpTZXRCb3VuZHMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgcmVjdF8gPSByZWN0OworICByZWN0XyA9IGdmeDo6UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgaWYgKHBsYXllcl8pIHsKICAgICBwbGF5ZXJfLT5TZXRCb3VuZHMoc196X2luZGV4LkdldE5leHQoKSwgcmVjdF8udmFsdWUoKSk7CiAgIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NicGxheWVyX3NldF9ib3VuZHNfaGVscGVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9zYnBsYXllcl9zZXRfYm91bmRzX2hlbHBlci5oCmluZGV4IGNhZWUyYmMuLjRjMDllM2MgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NicGxheWVyX3NldF9ib3VuZHNfaGVscGVyLmgKKysrIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfc2V0X2JvdW5kc19oZWxwZXIuaApAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCiAjaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgogI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL2xvY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0LmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTMxLDEyICszMSwxMiBAQAogICBTYlBsYXllclNldEJvdW5kc0hlbHBlcigpIHt9CiAKICAgdm9pZCBTZXRQbGF5ZXIoU3RhcmJvYXJkUGxheWVyKiBwbGF5ZXIpOwotICBib29sIFNldEJvdW5kcyhjb25zdCBtYXRoOjpSZWN0JiByZWN0KTsKKyAgYm9vbCBTZXRCb3VuZHMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCiAgcHJpdmF0ZToKICAgYmFzZTo6TG9jayBsb2NrXzsKICAgU3RhcmJvYXJkUGxheWVyKiBwbGF5ZXJfID0gbnVsbHB0cjsKLSAgYmFzZTo6T3B0aW9uYWw8bWF0aDo6UmVjdD4gcmVjdF87CisgIGJhc2U6Ok9wdGlvbmFsPGdmeDo6UmVjdD4gcmVjdF87CiAKICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNiUGxheWVyU2V0Qm91bmRzSGVscGVyKTsKIH07CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zZWVrYWJsZV9idWZmZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zZWVrYWJsZV9idWZmZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTY0OWIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2Vla2FibGVfYnVmZmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zZWVrYWJsZV9idWZmZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RhdGFfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1TZWVrYWJsZUJ1ZmZlcjo6U2Vla2FibGVCdWZmZXIoaW50IGJhY2t3YXJkX2NhcGFjaXR5LCBpbnQgZm9yd2FyZF9jYXBhY2l0eSkKLSAgICA6IGN1cnJlbnRfYnVmZmVyX29mZnNldF8oMCksCi0gICAgICBiYWNrd2FyZF9jYXBhY2l0eV8oYmFja3dhcmRfY2FwYWNpdHkpLAotICAgICAgYmFja3dhcmRfYnl0ZXNfKDApLAotICAgICAgZm9yd2FyZF9jYXBhY2l0eV8oZm9yd2FyZF9jYXBhY2l0eSksCi0gICAgICBmb3J3YXJkX2J5dGVzXygwKSwKLSAgICAgIGN1cnJlbnRfdGltZV8oa05vVGltZXN0YW1wKSB7Ci0gIGN1cnJlbnRfYnVmZmVyXyA9IGJ1ZmZlcnNfLmJlZ2luKCk7Ci19Ci0KLVNlZWthYmxlQnVmZmVyOjp+U2Vla2FibGVCdWZmZXIoKSB7fQotCi12b2lkIFNlZWthYmxlQnVmZmVyOjpDbGVhcigpIHsKLSAgYnVmZmVyc18uY2xlYXIoKTsKLSAgY3VycmVudF9idWZmZXJfID0gYnVmZmVyc18uYmVnaW4oKTsKLSAgY3VycmVudF9idWZmZXJfb2Zmc2V0XyA9IDA7Ci0gIGJhY2t3YXJkX2J5dGVzXyA9IDA7Ci0gIGZvcndhcmRfYnl0ZXNfID0gMDsKLSAgY3VycmVudF90aW1lXyA9IGtOb1RpbWVzdGFtcDsKLX0KLQotaW50IFNlZWthYmxlQnVmZmVyOjpSZWFkKHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIERDSEVDSyhkYXRhKTsKLSAgcmV0dXJuIEludGVybmFsUmVhZChkYXRhLCBzaXplLCB0cnVlLCAwKTsKLX0KLQotaW50IFNlZWthYmxlQnVmZmVyOjpQZWVrKHVpbnQ4X3QqIGRhdGEsIGludCBzaXplLCBpbnQgZm9yd2FyZF9vZmZzZXQpIHsKLSAgRENIRUNLKGRhdGEpOwotICByZXR1cm4gSW50ZXJuYWxSZWFkKGRhdGEsIHNpemUsIGZhbHNlLCBmb3J3YXJkX29mZnNldCk7Ci19Ci0KLWJvb2wgU2Vla2FibGVCdWZmZXI6OkdldEN1cnJlbnRDaHVuayhjb25zdCB1aW50OF90KiogZGF0YSwgaW50KiBzaXplKSBjb25zdCB7Ci0gIEJ1ZmZlclF1ZXVlOjppdGVyYXRvciBjdXJyZW50X2J1ZmZlciA9IGN1cnJlbnRfYnVmZmVyXzsKLSAgaW50IGN1cnJlbnRfYnVmZmVyX29mZnNldCA9IGN1cnJlbnRfYnVmZmVyX29mZnNldF87Ci0gIC8vIEFkdmFuY2UgcG9zaXRpb24gaWYgd2UgYXJlIGluIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLgotICB3aGlsZSAoY3VycmVudF9idWZmZXIgIT0gYnVmZmVyc18uZW5kKCkgJiYKLSAgICAgICAgIGN1cnJlbnRfYnVmZmVyX29mZnNldCA+PSAoKmN1cnJlbnRfYnVmZmVyKS0+ZGF0YV9zaXplKCkpIHsKLSAgICArK2N1cnJlbnRfYnVmZmVyOwotICAgIGN1cnJlbnRfYnVmZmVyX29mZnNldCA9IDA7Ci0gIH0KLSAgaWYgKGN1cnJlbnRfYnVmZmVyID09IGJ1ZmZlcnNfLmVuZCgpKSByZXR1cm4gZmFsc2U7Ci0gICpkYXRhID0gKCpjdXJyZW50X2J1ZmZlciktPmRhdGEoKSArIGN1cnJlbnRfYnVmZmVyX29mZnNldDsKLSAgKnNpemUgPSAoKmN1cnJlbnRfYnVmZmVyKS0+ZGF0YV9zaXplKCkgLSBjdXJyZW50X2J1ZmZlcl9vZmZzZXQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNlZWthYmxlQnVmZmVyOjpBcHBlbmQoY29uc3Qgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiYgYnVmZmVyX2luKSB7Ci0gIGlmIChidWZmZXJzXy5lbXB0eSgpICYmIGJ1ZmZlcl9pbi0+dGltZXN0YW1wKCkgIT0ga05vVGltZXN0YW1wKSB7Ci0gICAgY3VycmVudF90aW1lXyA9IGJ1ZmZlcl9pbi0+dGltZXN0YW1wKCk7Ci0gIH0KLQotICAvLyBTaW5jZSB0aGUgZm9yd2FyZCBjYXBhY2l0eSBpcyBvbmx5IHVzZWQgdG8gY2hlY2sgdGhlIGNyaXRlcmlhIGZvciBidWZmZXIKLSAgLy8gZnVsbCwgd2UgYWx3YXlzIGFwcGVuZCBkYXRhIHRvIHRoZSBidWZmZXIuCi0gIGJ1ZmZlcnNfLnB1c2hfYmFjayhidWZmZXJfaW4pOwotCi0gIC8vIEFmdGVyIHdlIGhhdmUgd3JpdHRlbiB0aGUgZmlyc3QgYnVmZmVyLCB1cGRhdGUgfGN1cnJlbnRfYnVmZmVyX3wgdG8gcG9pbnQKLSAgLy8gdG8gaXQuCi0gIGlmIChjdXJyZW50X2J1ZmZlcl8gPT0gYnVmZmVyc18uZW5kKCkpIHsKLSAgICBEQ0hFQ0tfRVEoMCwgZm9yd2FyZF9ieXRlc18pOwotICAgIGN1cnJlbnRfYnVmZmVyXyA9IGJ1ZmZlcnNfLmJlZ2luKCk7Ci0gIH0KLQotICAvLyBVcGRhdGUgdGhlIHxmb3J3YXJkX2J5dGVzX3wgY291bnRlciBzaW5jZSB3ZSBoYXZlIG1vcmUgYnl0ZXMuCi0gIGZvcndhcmRfYnl0ZXNfICs9IGJ1ZmZlcl9pbi0+ZGF0YV9zaXplKCk7Ci0KLSAgLy8gQWR2aXNlIHRoZSB1c2VyIHRvIHN0b3AgYXBwZW5kIGlmIHRoZSBhbW91bnQgb2YgZm9yd2FyZCBieXRlcyBleGNlZWRzCi0gIC8vIHRoZSBmb3J3YXJkIGNhcGFjaXR5LiBBIGZhbHNlIHJldHVybiB2YWx1ZSBtZWFucyB0aGUgdXNlciBzaG91bGQgc3RvcAotICAvLyBhcHBlbmRpbmcgbW9yZSBkYXRhIHRvIHRoaXMgYnVmZmVyLgotICBpZiAoZm9yd2FyZF9ieXRlc18gPj0gZm9yd2FyZF9jYXBhY2l0eV8pIHJldHVybiBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2Vla2FibGVCdWZmZXI6OkFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBpZiAoc2l6ZSA+IDApIHsKLSAgICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGRhdGFfYnVmZmVyID0gRGF0YUJ1ZmZlcjo6Q29weUZyb20oZGF0YSwgc2l6ZSk7Ci0gICAgcmV0dXJuIEFwcGVuZChkYXRhX2J1ZmZlcik7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBmb3J3YXJkIGNhcGFjaXR5LgotICAgIHJldHVybiBmb3J3YXJkX2J5dGVzXyA8IGZvcndhcmRfY2FwYWNpdHlfOwotICB9Ci19Ci0KLWJvb2wgU2Vla2FibGVCdWZmZXI6OlNlZWsoaW50MzJfdCBvZmZzZXQpIHsKLSAgaWYgKG9mZnNldCA+IDApCi0gICAgcmV0dXJuIFNlZWtGb3J3YXJkKG9mZnNldCk7Ci0gIGVsc2UgaWYgKG9mZnNldCA8IDApCi0gICAgcmV0dXJuIFNlZWtCYWNrd2FyZCgtb2Zmc2V0KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2Vla2FibGVCdWZmZXI6OlNlZWtGb3J3YXJkKGludCBzaXplKSB7Ci0gIC8vIFBlcmZvcm0gc2Vla2luZyBmb3J3YXJkIG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggYnl0ZXMgaW4gdGhlIHF1ZXVlLgotICBpZiAoc2l6ZSA+IGZvcndhcmRfYnl0ZXNfKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gRG8gYSByZWFkIG9mIHxzaXplfCBieXRlcy4KLSAgaW50IHRha2VuID0gSW50ZXJuYWxSZWFkKE5VTEwsIHNpemUsIHRydWUsIDApOwotICBEQ0hFQ0tfRVEodGFrZW4sIHNpemUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTZWVrYWJsZUJ1ZmZlcjo6U2Vla0JhY2t3YXJkKGludCBzaXplKSB7Ci0gIGlmIChzaXplID4gYmFja3dhcmRfYnl0ZXNfKSByZXR1cm4gZmFsc2U7Ci0gIC8vIFJlY29yZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRha2VuLgotICBpbnQgdGFrZW4gPSAwOwotICAvLyBMb29wIHVudGlsIHdlIHRha2VuIGVub3VnaCBieXRlcyBhbmQgcmV3aW5kIGJ5IHRoZSBkZXNpcmVkIHxzaXplfC4KLSAgd2hpbGUgKHRha2VuIDwgc2l6ZSkgewotICAgIC8vIHxjdXJyZW50X2J1ZmZlcl98IGNhbiBuZXZlciBiZSBpbnZhbGlkIHdoZW4gd2UgYXJlIGluIHRoaXMgbG9vcC4gSXQgY2FuCi0gICAgLy8gb25seSBiZSBpbnZhbGlkIGJlZm9yZSBhbnkgZGF0YSBpcyBhcHBlbmRlZC4gVGhlIGludmFsaWQgY2FzZSBzaG91bGQgYmUKLSAgICAvLyBoYW5kbGVkIGJ5IGNoZWNrcyBiZWZvcmUgd2UgZW50ZXIgdGhpcyBsb29wLgotICAgIERDSEVDSyhjdXJyZW50X2J1ZmZlcl8gIT0gYnVmZmVyc18uZW5kKCkpOwotCi0gICAgLy8gV2UgdHJ5IHRvIGNvbnN1bWUgYXQgbW9zdCB8c2l6ZXwgYnl0ZXMgaW4gdGhlIGJhY2t3YXJkIGRpcmVjdGlvbi4gV2UgYWxzbwotICAgIC8vIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlIG9mZnNldCB3ZSBhcmUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLCBzbyB0YWtlIHRoZQotICAgIC8vIG1pbmltdW0gYmV0d2VlbiB0aGUgdHdvIHRvIGRldGVybWluZSB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvIHRha2UgZnJvbSB0aGUKLSAgICAvLyBjdXJyZW50IGJ1ZmZlci4KLSAgICBpbnQgY29uc3VtZWQgPSBzdGQ6Om1pbihzaXplIC0gdGFrZW4sIGN1cnJlbnRfYnVmZmVyX29mZnNldF8pOwotCi0gICAgLy8gRGVjcmVhc2VzIHRoZSBvZmZzZXQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIHNpbmNlIHdlIGFyZSByZXdpbmRpbmcuCi0gICAgY3VycmVudF9idWZmZXJfb2Zmc2V0XyAtPSBjb25zdW1lZDsKLQotICAgIC8vIEluY3JlYXNlIHRoZSBhbW91bnQgb2YgYnl0ZXMgdGFrZW4gaW4gdGhlIGJhY2t3YXJkIGRpcmVjdGlvbi4gVGhpcwotICAgIC8vIGRldGVybWluZXMgd2hlbiB0byBzdG9wIHRoZSBsb29wLgotICAgIHRha2VuICs9IGNvbnN1bWVkOwotCi0gICAgLy8gRm9yd2FyZCBieXRlcyBpbmNyZWFzZXMgYW5kIGJhY2t3YXJkIGJ5dGVzIGRlY3JlYXNlcyBieSB0aGUgYW1vdW50Ci0gICAgLy8gY29uc3VtZWQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIGZvcndhcmRfYnl0ZXNfICs9IGNvbnN1bWVkOwotICAgIGJhY2t3YXJkX2J5dGVzXyAtPSBjb25zdW1lZDsKLSAgICBEQ0hFQ0tfR0UoYmFja3dhcmRfYnl0ZXNfLCAwKTsKLQotICAgIC8vIFRoZSBjdXJyZW50IGJ1ZmZlciBwb2ludGVkIGJ5IGN1cnJlbnQgaXRlcmF0b3IgaGFzIGJlZW4gY29uc3VtZWQuIE1vdmUKLSAgICAvLyB0aGUgaXRlcmF0b3IgYmFja3dhcmQgc28gaXQgcG9pbnRzIHRvIHRoZSBwcmV2aW91cyBidWZmZXIuCi0gICAgaWYgKGN1cnJlbnRfYnVmZmVyX29mZnNldF8gPT0gMCkgewotICAgICAgaWYgKGN1cnJlbnRfYnVmZmVyXyA9PSBidWZmZXJzXy5iZWdpbigpKSBicmVhazsKLSAgICAgIC8vIE1vdmUgdGhlIGl0ZXJhdG9yIGJhY2t3YXJkLgotICAgICAgLS1jdXJyZW50X2J1ZmZlcl87Ci0gICAgICAvLyBTZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlciB0byBiZSB0aGUgYnVmZmVyIHNpemUgYXMgd2UKLSAgICAgIC8vIGFyZSBwcmVwYXJpbmcgZm9yIHJld2luZCBmb3IgbmV4dCBpdGVyYXRpb24uCi0gICAgICBjdXJyZW50X2J1ZmZlcl9vZmZzZXRfID0gKCpjdXJyZW50X2J1ZmZlcl8pLT5kYXRhX3NpemUoKTsKLSAgICB9Ci0gIH0KLQotICBVcGRhdGVDdXJyZW50VGltZShjdXJyZW50X2J1ZmZlcl8sIGN1cnJlbnRfYnVmZmVyX29mZnNldF8pOwotCi0gIERDSEVDS19FUSh0YWtlbiwgc2l6ZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNlZWthYmxlQnVmZmVyOjpFdmljdEJhY2t3YXJkQnVmZmVycygpIHsKLSAgLy8gQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIHVudGlsIHdlIGhpdCB0aGUgY3VycmVudCBwb2ludGVyLgotICB3aGlsZSAoYmFja3dhcmRfYnl0ZXNfID4gYmFja3dhcmRfY2FwYWNpdHlfKSB7Ci0gICAgQnVmZmVyUXVldWU6Oml0ZXJhdG9yIGkgPSBidWZmZXJzXy5iZWdpbigpOwotICAgIGlmIChpID09IGN1cnJlbnRfYnVmZmVyXykgYnJlYWs7Ci0gICAgc2NvcGVkX3JlZnB0cjxEYXRhQnVmZmVyPiBidWZmZXIgPSAqaTsKLSAgICBiYWNrd2FyZF9ieXRlc18gLT0gYnVmZmVyLT5kYXRhX3NpemUoKTsKLSAgICBEQ0hFQ0tfR0UoYmFja3dhcmRfYnl0ZXNfLCAwKTsKLQotICAgIGJ1ZmZlcnNfLmVyYXNlKGkpOwotICB9Ci19Ci0KLWludCBTZWVrYWJsZUJ1ZmZlcjo6SW50ZXJuYWxSZWFkKHVpbnQ4X3QqIGRhdGEsIGludCBzaXplLCBib29sIGFkdmFuY2VfcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yd2FyZF9vZmZzZXQpIHsKLSAgLy8gQ291bnRzIGhvdyBtYW55IGJ5dGVzIGFyZSBhY3R1YWxseSByZWFkIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZS4KLSAgaW50IHRha2VuID0gMDsKLQotICBCdWZmZXJRdWV1ZTo6aXRlcmF0b3IgY3VycmVudF9idWZmZXIgPSBjdXJyZW50X2J1ZmZlcl87Ci0gIGludCBjdXJyZW50X2J1ZmZlcl9vZmZzZXQgPSBjdXJyZW50X2J1ZmZlcl9vZmZzZXRfOwotCi0gIGludCBieXRlc190b19za2lwID0gZm9yd2FyZF9vZmZzZXQ7Ci0gIHdoaWxlICh0YWtlbiA8IHNpemUpIHsKLSAgICAvLyB8Y3VycmVudF9idWZmZXJ8IGlzIHZhbGlkIHNpbmNlIHRoZSBmaXJzdCB0aW1lIHRoaXMgYnVmZmVyIGlzIGFwcGVuZGVkCi0gICAgLy8gd2l0aCBkYXRhLgotICAgIGlmIChjdXJyZW50X2J1ZmZlciA9PSBidWZmZXJzXy5lbmQoKSkgYnJlYWs7Ci0KLSAgICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGJ1ZmZlciA9ICpjdXJyZW50X2J1ZmZlcjsKLQotICAgIGludCByZW1haW5pbmdfYnl0ZXNfaW5fYnVmZmVyID0gYnVmZmVyLT5kYXRhX3NpemUoKSAtIGN1cnJlbnRfYnVmZmVyX29mZnNldDsKLQotICAgIGlmIChieXRlc190b19za2lwID09IDApIHsKLSAgICAgIC8vIEZpbmQgdGhlIHJpZ2h0IGFtb3VudCB0byBjb3B5IGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyIHJlZmVyZW5jZWQgYnkKLSAgICAgIC8vIHxidWZmZXJ8LiBXZSBzaGFsbCBjb3B5IG5vIG1vcmUgdGhhbiB8c2l6ZXwgYnl0ZXMgaW4gdG90YWwgYW5kIGVhY2gKLSAgICAgIC8vIHNpbmdsZSBzdGVwIGNvcGllZCBubyBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgYnVmZmVyIHNpemUuCi0gICAgICBpbnQgY29waWVkID0gc3RkOjptaW4oc2l6ZSAtIHRha2VuLCByZW1haW5pbmdfYnl0ZXNfaW5fYnVmZmVyKTsKLQotICAgICAgLy8gfGRhdGF8IGlzIE5VTEwgaWYgd2UgYXJlIHNlZWtpbmcgZm9yd2FyZCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNvcHkuCi0gICAgICBpZiAoZGF0YSkKLSAgICAgICAgbWVtY3B5KGRhdGEgKyB0YWtlbiwgYnVmZmVyLT5kYXRhKCkgKyBjdXJyZW50X2J1ZmZlcl9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICBjb3BpZWQpOwotCi0gICAgICAvLyBJbmNyZWFzZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgY29waWVkLCB3aGljaCByZWd1bGF0ZXMgd2hlbiB0byBlbmQgdGhpcwotICAgICAgLy8gbG9vcC4KLSAgICAgIHRha2VuICs9IGNvcGllZDsKLQotICAgICAgLy8gV2UgaGF2ZSByZWFkIHxjb3BpZWR8IGJ5dGVzIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLiBBZHZhbmNlcyB0aGUKLSAgICAgIC8vIG9mZnNldC4KLSAgICAgIGN1cnJlbnRfYnVmZmVyX29mZnNldCArPSBjb3BpZWQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGludCBza2lwcGVkID0gc3RkOjptaW4ocmVtYWluaW5nX2J5dGVzX2luX2J1ZmZlciwgYnl0ZXNfdG9fc2tpcCk7Ci0gICAgICBjdXJyZW50X2J1ZmZlcl9vZmZzZXQgKz0gc2tpcHBlZDsKLSAgICAgIGJ5dGVzX3RvX3NraXAgLT0gc2tpcHBlZDsKLSAgICB9Ci0KLSAgICAvLyBUaGUgYnVmZmVyIGhhcyBiZWVuIGNvbnN1bWVkLgotICAgIGlmIChjdXJyZW50X2J1ZmZlcl9vZmZzZXQgPT0gYnVmZmVyLT5kYXRhX3NpemUoKSkgewotICAgICAgaWYgKGFkdmFuY2VfcG9zaXRpb24pIHsKLSAgICAgICAgLy8gTmV4dCBidWZmZXIgbWF5IG5vdCBoYXZlIHRpbWVzdGFtcCwgc28gd2UgbmVlZCB0byB1cGRhdGUgY3VycmVudAotICAgICAgICAvLyB0aW1lc3RhbXAgYmVmb3JlIHN3aXRjaGluZyB0byB0aGUgbmV4dCBidWZmZXIuCi0gICAgICAgIFVwZGF0ZUN1cnJlbnRUaW1lKGN1cnJlbnRfYnVmZmVyLCBjdXJyZW50X2J1ZmZlcl9vZmZzZXQpOwotICAgICAgfQotCi0gICAgICBCdWZmZXJRdWV1ZTo6aXRlcmF0b3IgbmV4dCA9IGN1cnJlbnRfYnVmZmVyOwotICAgICAgKytuZXh0OwotICAgICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBsYXN0IGJ1ZmZlciwgZG9uJ3QgYWR2YW5jZS4KLSAgICAgIGlmIChuZXh0ID09IGJ1ZmZlcnNfLmVuZCgpKSBicmVhazsKLQotICAgICAgLy8gQWR2YW5jZXMgdGhlIGl0ZXJhdG9yLgotICAgICAgY3VycmVudF9idWZmZXIgPSBuZXh0OwotICAgICAgY3VycmVudF9idWZmZXJfb2Zmc2V0ID0gMDsKLSAgICB9Ci0gIH0KLQotICBpZiAoYWR2YW5jZV9wb3NpdGlvbikgewotICAgIC8vIFdlIGhhdmUgbGVzcyBmb3J3YXJkIGJ5dGVzIGFuZCBtb3JlIGJhY2t3YXJkIGJ5dGVzLiBVcGRhdGVzIHRoZXNlCi0gICAgLy8gY291bnRlcnMgYnkgfHRha2VufC4KLSAgICBmb3J3YXJkX2J5dGVzXyAtPSB0YWtlbjsKLSAgICBiYWNrd2FyZF9ieXRlc18gKz0gdGFrZW47Ci0gICAgRENIRUNLX0dFKGZvcndhcmRfYnl0ZXNfLCAwKTsKLSAgICBEQ0hFQ0soY3VycmVudF9idWZmZXJfICE9IGJ1ZmZlcnNfLmVuZCgpIHx8IGZvcndhcmRfYnl0ZXNfID09IDApOwotCi0gICAgY3VycmVudF9idWZmZXJfID0gY3VycmVudF9idWZmZXI7Ci0gICAgY3VycmVudF9idWZmZXJfb2Zmc2V0XyA9IGN1cnJlbnRfYnVmZmVyX29mZnNldDsKLQotICAgIFVwZGF0ZUN1cnJlbnRUaW1lKGN1cnJlbnRfYnVmZmVyXywgY3VycmVudF9idWZmZXJfb2Zmc2V0Xyk7Ci0gICAgRXZpY3RCYWNrd2FyZEJ1ZmZlcnMoKTsKLSAgfQotCi0gIHJldHVybiB0YWtlbjsKLX0KLQotdm9pZCBTZWVrYWJsZUJ1ZmZlcjo6VXBkYXRlQ3VycmVudFRpbWUoQnVmZmVyUXVldWU6Oml0ZXJhdG9yIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQpIHsKLSAgLy8gR2FyYmFnZSB2YWx1ZXMgYXJlIHVuYXZvaWRhYmxlLCBzbyB0aGlzIGNoZWNrIHdpbGwgcmVtYWluLgotICBpZiAoYnVmZmVyICE9IGJ1ZmZlcnNfLmVuZCgpICYmICgqYnVmZmVyKS0+dGltZXN0YW1wKCkgIT0ga05vVGltZXN0YW1wKSB7Ci0gICAgaW50NjRfdCB0aW1lX29mZnNldCA9ICgoKmJ1ZmZlciktPmR1cmF0aW9uKCkuSW5NaWNyb3NlY29uZHMoKSAqIG9mZnNldCkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAoKmJ1ZmZlciktPmRhdGFfc2l6ZSgpOwotCi0gICAgY3VycmVudF90aW1lXyA9Ci0gICAgICAgICgqYnVmZmVyKS0+dGltZXN0YW1wKCkgKyBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHModGltZV9vZmZzZXQpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2Vla2FibGVfYnVmZmVyLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9zZWVrYWJsZV9idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0OWE5Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zZWVrYWJsZV9idWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBTZWVrYWJsZUJ1ZmZlciB0byBzdXBwb3J0IGJhY2t3YXJkIGFuZCBmb3J3YXJkIHNlZWtpbmcgaW4gYSBidWZmZXIgZm9yCi0vLyByZWFkaW5nIGEgbWVkaWEgZGF0YSBzb3VyY2UuCi0vLwotLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBiYWNrd2FyZCBhbmQgZm9yd2FyZCBzZWVraW5nLCB0aGlzIGNsYXNzIGJ1ZmZlcnMgZGF0YSBpbgotLy8gYm90aCBiYWNrd2FyZCBhbmQgZm9yd2FyZCBkaXJlY3Rpb25zLCB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIGNhbiBiZSByZXNldAotLy8gdG8gYW55d2hlcmUgaW4gdGhlIGJ1ZmZlcmVkIGRhdGEuCi0vLwotLy8gVGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIGlzIHJlZ3VsYXRlZCBieSB0d28gdmFyaWFibGVzIGF0IGNvbnN0cnVjdGlvbiwKLS8vIHxiYWNrd2FyZF9jYXBhY2l0eXwgYW5kIHxmb3J3YXJkX2NhcGFjaXR5fC4KLS8vCi0vLyBJbiB0aGUgY2FzZSBvZiByZWFkaW5nIGFuZCBzZWVraW5nIGZvcndhcmQsIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24KLS8vIGFkdmFuY2VzIGFuZCB0aGVyZSB3aWxsIGJlIG1vcmUgZGF0YSBpbiB0aGUgYmFja3dhcmQgZGlyZWN0aW9uLiBJZiBiYWNrd2FyZAotLy8gYnl0ZXMgZXhjZWVkcyB8YmFja3dhcmRfY2FwYWNpdHl8LCB0aGUgZXhjZWVkaW5nIGJ5dGVzIGFyZSBldmljdGVkIGFuZCB0aHVzCi0vLyBiYWNrd2FyZF9ieXRlcygpIHdpbGwgYWx3YXlzIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB8YmFja3dhcmRfY2FwYWNpdHl8LgotLy8gVGhlIGV2aWN0aW9uIHdpbGwgYmUgY2F1c2VkIGJ5IFJlYWQoKSBhbmQgU2VlaygpIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiBhbmQKLS8vIGlzIGRvbmUgaW50ZXJuYWxseSB3aGVuIHRoZSBtZW50aW9uZWQgY3JpdGVyaWEgaXMgZnVsZmlsbGVkLgotLy8KLS8vIEluIHRoZSBjYXNlIG9mIGFwcGVuZGluZyBkYXRhIHRvIHRoZSBidWZmZXIsIHRoZXJlIGlzIGFuIGFkdmlzb3J5IGxpbWl0IG9mCi0vLyBob3cgbWFueSBieXRlcyBjYW4gYmUga2VwdCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24sIHJlZ3VsYXRlZCBieQotLy8gfGZvcndhcmRfY2FwYWNpdHl8LiBUaGUgYXBwZW5kIG9wZXJhdGlvbiAoYnkgY2FsbGluZyBBcHBlbmQoKSkgdGhhdCBjYXVzZWQKLS8vIGZvcndhcmQgYnl0ZXMgdG8gZXhjZWVkIHxmb3J3YXJkX2NhcGFjaXR5fCB3aWxsIGhhdmUgYSByZXR1cm4gdmFsdWUgdGhhdAotLy8gYWR2aXNlcyBhIGhhbHQgb2YgYXBwZW5kIG9wZXJhdGlvbiwgZnVydGhlciBhcHBlbmQgb3BlcmF0aW9ucyBhcmUgYWxsb3dlZCBidXQKLS8vIGFyZSBub3QgYWR2aXNlZC4gU2luY2UgdGhpcyBjbGFzcyBpcyB1c2VkIGFzIGEgYmFja2VuZCBidWZmZXIgZm9yIGNhY2hpbmcKLS8vIG1lZGlhIGZpbGVzIGRvd25sb2FkZWQgZnJvbSBuZXR3b3JrIHdlIGNhbm5vdCBhZmZvcmQgbG9zaW5nIGRhdGEsIHdlIGNhbgotLy8gb25seSBhZHZpc2UgYSBoYWx0IG9mIGZ1cnRoZXIgd3JpdGluZyB0byB0aGlzIGJ1ZmZlci4KLS8vIFRoaXMgY2xhc3MgaXMgbm90IGluaGVyZW50bHkgdGhyZWFkLXNhZmUuIENvbmN1cnJlbnQgYWNjZXNzIG11c3QgYmUKLS8vIGV4dGVybmFsbHkgc2VyaWFsaXplZC4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9TRUVLQUJMRV9CVUZGRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfU0VFS0FCTEVfQlVGRkVSX0hfCi0KLSNpbmNsdWRlIDxsaXN0PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIERhdGFCdWZmZXI7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBTZWVrYWJsZUJ1ZmZlciB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3RzIGFuIGluc3RhbmNlIHdpdGggfGZvcndhcmRfY2FwYWNpdHl8IGFuZCB8YmFja3dhcmRfY2FwYWNpdHl8LgotICAvLyBUaGUgdmFsdWVzIGFyZSBpbiBieXRlcy4KLSAgU2Vla2FibGVCdWZmZXIoaW50IGJhY2t3YXJkX2NhcGFjaXR5LCBpbnQgZm9yd2FyZF9jYXBhY2l0eSk7Ci0KLSAgflNlZWthYmxlQnVmZmVyKCk7Ci0KLSAgLy8gQ2xlYXJzIHRoZSBidWZmZXIgcXVldWUuCi0gIHZvaWQgQ2xlYXIoKTsKLQotICAvLyBSZWFkcyBhIG1heGltdW0gb2YgfHNpemV8IGJ5dGVzIGludG8gfGRhdGF8IGZyb20gdGhlIGN1cnJlbnQgcmVhZAotICAvLyBwb3NpdGlvbi4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCi0gIC8vIFRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gd2lsbCBhZHZhbmNlIGJ5IHRoZSBhbW91bnQgb2YgYnl0ZXMgcmVhZC4gSWYKLSAgLy8gcmVhZGluZyBjYXVzZWQgYmFja3dhcmRfYnl0ZXMoKSB0byBleGNlZWQgYmFja3dhcmRfY2FwYWNpdHkoKSwgYW4gZXZpY3Rpb24KLSAgLy8gb2YgdGhlIGJhY2t3YXJkIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW50ZXJuYWxseS4KLSAgaW50IFJlYWQodWludDhfdCogZGF0YSwgaW50IHNpemUpOwotCi0gIC8vIENvcGllcyB1cCB0byB8c2l6ZXwgYnl0ZXMgZnJvbSBjdXJyZW50IHBvc2l0aW9uIHRvIHxkYXRhfC4gUmV0dXJucwotICAvLyBudW1iZXIgb2YgYnl0ZXMgY29waWVkLiBEb2Vzbid0IGFkdmFuY2UgY3VycmVudCBwb3NpdGlvbi4gT3B0aW9uYWxseQotICAvLyBzdGFydHMgYXQgYSB8Zm9yd2FyZF9vZmZzZXR8IGZyb20gY3VycmVudCBwb3NpdGlvbi4KLSAgaW50IFBlZWsodWludDhfdCogZGF0YSwgaW50IHNpemUpIHsgcmV0dXJuIFBlZWsoZGF0YSwgc2l6ZSwgMCk7IH0KLSAgaW50IFBlZWsodWludDhfdCogZGF0YSwgaW50IHNpemUsIGludCBmb3J3YXJkX29mZnNldCk7Ci0KLSAgLy8gUmV0dXJucyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGNodW5rIG9mIGRhdGEgdGhhdCBpcyBiZWluZyBjb25zdW1lZC4KLSAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluIHRoZSBidWZmZXIgZmFsc2UgaXMgcmV0dXJuZWQsIG90aGVyd2lzZQotICAvLyB0cnVlIGlzIHJldHVybmVkIGFuZCB8ZGF0YXwgYW5kIHxzaXplfCBhcmUgdXBkYXRlZC4gVGhlIHJldHVybmVkCi0gIC8vIHxkYXRhfCB2YWx1ZSBiZWNvbWVzIGludmFsaWQgd2hlbiBSZWFkKCksIEFwcGVuZCgpIG9yIFNlZWsoKQotICAvLyBhcmUgY2FsbGVkLgotICBib29sIEdldEN1cnJlbnRDaHVuayhjb25zdCB1aW50OF90KiogZGF0YSwgaW50KiBzaXplKSBjb25zdDsKLQotICAvLyBBcHBlbmRzIHxidWZmZXJfaW58IHRvIHRoaXMgYnVmZmVyLiBSZXR1cm5zIGZhbHNlIGlmIGZvcndhcmRfYnl0ZXMoKSBpcwotICAvLyBncmVhdGVyIHRoYW4gb3IgZXF1YWxzIHRvIGZvcndhcmRfY2FwYWNpdHkoKSwgdHJ1ZSBvdGhlcndpc2UuIFRoZSBkYXRhCi0gIC8vIGlzIGFkZGVkIHRvIHRoZSBidWZmZXIgaW4gYW55IGNhc2UuCi0gIGJvb2wgQXBwZW5kKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGF0YUJ1ZmZlcj4mIGJ1ZmZlcl9pbik7Ci0KLSAgLy8gQXBwZW5kcyB8c2l6ZXwgYnl0ZXMgb2YgfGRhdGF8IHRvIHRoZSBidWZmZXIuIFJlc3VsdCBpcyB0aGUgc2FtZQotICAvLyBhcyBmb3IgQXBwZW5kKEJ1ZmZlciopLgotICBib29sIEFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gTW92ZXMgdGhlIHJlYWQgcG9zaXRpb24gYnkgfG9mZnNldHwgYnl0ZXMuIElmIHxvZmZzZXR8IGlzIHBvc2l0aXZlLCB0aGUKLSAgLy8gY3VycmVudCByZWFkIHBvc2l0aW9uIGlzIG1vdmVkIGZvcndhcmQuIElmIG5lZ2F0aXZlLCB0aGUgY3VycmVudCByZWFkCi0gIC8vIHBvc2l0aW9uIGlzIG1vdmVkIGJhY2t3YXJkLiBBIHplcm8gfG9mZnNldHwgdmFsdWUgd2lsbCBrZWVwIHRoZSBjdXJyZW50Ci0gIC8vIHJlYWQgcG9zaXRpb24gc3RhdGlvbmFyeS4KLSAgLy8gSWYgfG9mZnNldHwgZXhjZWVkcyBieXRlcyBidWZmZXJlZCBpbiBlaXRoZXIgZGlyZWN0aW9uLCByZXBvcnRlZCBieQotICAvLyBmb3J3YXJkX2J5dGVzKCkgd2hlbiBzZWVraW5nIGZvcndhcmQgYW5kIGJhY2t3YXJkX2J5dGVzKCkgd2hlbiBzZWVraW5nCi0gIC8vIGJhY2t3YXJkLCB0aGUgc2VlayBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCByZXR1cm4gdmFsdWUgd2lsbCBiZSBmYWxzZS4KLSAgLy8gSWYgdGhlIHNlZWsgb3BlcmF0aW9uIGZhaWxzLCB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIHdpbGwgbm90IGJlIHVwZGF0ZWQuCi0gIC8vIElmIGEgZm9yd2FyZCBzZWVraW5nIGNhdXNlZCBiYWNrd2FyZF9ieXRlcygpIHRvIGV4Y2VlZCBiYWNrd2FyZF9jYXBhY2l0eSgpLAotICAvLyB0aGlzIG1ldGhvZCBjYWxsIHdpbGwgY2F1c2UgYW4gZXZpY3Rpb24gb2YgdGhlIGJhY2t3YXJkIGJ1ZmZlci4KLSAgYm9vbCBTZWVrKGludDMyX3Qgb2Zmc2V0KTsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgYmV5b25kIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24uCi0gIGludCBmb3J3YXJkX2J5dGVzKCkgY29uc3QgeyByZXR1cm4gZm9yd2FyZF9ieXRlc187IH0KLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYnVmZmVyZWQgdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCByZWFkCi0gIC8vIHBvc2l0aW9uLgotICBpbnQgYmFja3dhcmRfYnl0ZXMoKSBjb25zdCB7IHJldHVybiBiYWNrd2FyZF9ieXRlc187IH0KLQotICAvLyBTZXRzIHRoZSBmb3J3YXJkX2NhcGFjaXR5IHRvIHxuZXdfZm9yd2FyZF9jYXBhY2l0eXwgYnl0ZXMuCi0gIHZvaWQgc2V0X2ZvcndhcmRfY2FwYWNpdHkoaW50IG5ld19mb3J3YXJkX2NhcGFjaXR5KSB7Ci0gICAgZm9yd2FyZF9jYXBhY2l0eV8gPSBuZXdfZm9yd2FyZF9jYXBhY2l0eTsKLSAgfQotCi0gIC8vIFNldHMgdGhlIGJhY2t3YXJkX2NhcGFjaXR5IHRvIHxuZXdfYmFja3dhcmRfY2FwYWNpdHl8IGJ5dGVzLgotICB2b2lkIHNldF9iYWNrd2FyZF9jYXBhY2l0eShpbnQgbmV3X2JhY2t3YXJkX2NhcGFjaXR5KSB7Ci0gICAgYmFja3dhcmRfY2FwYWNpdHlfID0gbmV3X2JhY2t3YXJkX2NhcGFjaXR5OwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUga2VwdCBpbiB0aGUgZm9yd2FyZAotICAvLyBkaXJlY3Rpb24uCi0gIGludCBmb3J3YXJkX2NhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gZm9yd2FyZF9jYXBhY2l0eV87IH0KLQotICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHNob3VsZCBiZSBrZXB0IGluIHRoZSBiYWNrd2FyZAotICAvLyBkaXJlY3Rpb24uCi0gIGludCBiYWNrd2FyZF9jYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIGJhY2t3YXJkX2NhcGFjaXR5XzsgfQotCi0gIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZXN0YW1wLCB0YWtpbmcgaW50byBhY2NvdW50IGN1cnJlbnQgb2Zmc2V0LiBUaGUKLSAgLy8gdmFsdWUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgdGltZXN0YW1wIG9mIHRoZSBjdXJyZW50IGJ1ZmZlci4gSWYKLSAgLy8gdGltZXN0YW1wIGZvciB0aGUgY3VycmVudCBidWZmZXIgaXMgc2V0IHRvIDAgb3IgdGhlIGRhdGEgd2FzIGFkZGVkIHdpdGgKLSAgLy8gQXBwZW5kKGNvbnN0IHVpbnQqLCBpbnQpLCB0aGVuIHJldHVybnMgdmFsdWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKLSAgLy8gbGFzdCBwb3NpdGlvbiBpbiBhIGJ1ZmZlciB0aGF0IGhhZCB0aW1lc3RhbXAgc2V0LgotICAvLyBrTm9UaW1lc3RhbXAgaXMgcmV0dXJuZWQgaWYgbm8gYnVmZmVycyB3ZSByZWFkIGZyb20gaGFkIHRpbWVzdGFtcCBzZXQuCi0gIGJhc2U6OlRpbWVEZWx0YSBjdXJyZW50X3RpbWUoKSBjb25zdCB7IHJldHVybiBjdXJyZW50X3RpbWVfOyB9Ci0KLSBwcml2YXRlOgotICAvLyBEZWZpbml0aW9uIG9mIHRoZSBidWZmZXIgcXVldWUuCi0gIHR5cGVkZWYgc3RkOjpsaXN0PHNjb3BlZF9yZWZwdHI8RGF0YUJ1ZmZlcj4gPiBCdWZmZXJRdWV1ZTsKLQotICAvLyBBIGhlbHBlciBtZXRob2QgdG8gZXZpY3QgYnVmZmVycyBpbiB0aGUgYmFja3dhcmQgZGlyZWN0aW9uIHVudGlsIGJhY2t3YXJkCi0gIC8vIGJ5dGVzIGlzIHdpdGhpbiB0aGUgYmFja3dhcmQgY2FwYWNpdHkuCi0gIHZvaWQgRXZpY3RCYWNrd2FyZEJ1ZmZlcnMoKTsKLQotICAvLyBBbiBpbnRlcm5hbCBtZXRob2Qgc2hhcmVkIGJ5IFJlYWQoKSBhbmQgU2Vla0ZvcndhcmQoKSB0aGF0IGFjdHVhbGx5IGRvZXMKLSAgLy8gcmVhZGluZy4gSXQgcmVhZHMgYSBtYXhpbXVtIG9mIHxzaXplfCBieXRlcyBpbnRvIHxkYXRhfC4gUmV0dXJucyB0aGUgbnVtYmVyCi0gIC8vIG9mIGJ5dGVzIHJlYWQuIFRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gd2lsbCBiZSBtb3ZlZCBmb3J3YXJkIGJ5IHRoZQotICAvLyBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSWYgfGRhdGF8IGlzIE5VTEwsIG9ubHkgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbgotICAvLyB3aWxsIGFkdmFuY2UgYnV0IG5vIGRhdGEgd2lsbCBiZSBjb3BpZWQuCi0gIGludCBJbnRlcm5hbFJlYWQodWludDhfdCogZGF0YSwgaW50IHNpemUsIGJvb2wgYWR2YW5jZV9wb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICBpbnQgZm9yd2FyZF9vZmZzZXQpOwotCi0gIC8vIEEgaGVscGVyIG1ldGhvZCB0aGF0IG1vdmVzIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gZm9yd2FyZCBieSB8c2l6ZXwKLSAgLy8gYnl0ZXMuCi0gIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgotICAvLyBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLCB8c2l6ZXwgaXMgZ3JlYXRlciB0aGFuIGZvcndhcmRfYnl0ZXMoKSBhbmQKLSAgLy8gdGhlIHNlZWsgb3BlcmF0aW9uIGZhaWxlZC4gVGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBpcyBub3QgdXBkYXRlZC4KLSAgYm9vbCBTZWVrRm9yd2FyZChpbnQgc2l6ZSk7Ci0KLSAgLy8gQSBoZWxwZXIgbWV0aG9kIHRoYXQgbW92ZXMgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBiYWNrd2FyZCBieSB8c2l6ZXwKLSAgLy8gYnl0ZXMuCi0gIC8vIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSwgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgotICAvLyBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLCB8c2l6ZXwgaXMgZ3JlYXRlciB0aGFuIGJhY2t3YXJkX2J5dGVzKCkgYW5kCi0gIC8vIHRoZSBzZWVrIG9wZXJhdGlvbiBmYWlsZWQuIFRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gaXMgbm90IHVwZGF0ZWQuCi0gIGJvb2wgU2Vla0JhY2t3YXJkKGludCBzaXplKTsKLQotICAvLyBVcGRhdGVzIHxjdXJyZW50X3RpbWVffCB3aXRoIHRoZSB0aW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCi0gIC8vIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyLgotICB2b2lkIFVwZGF0ZUN1cnJlbnRUaW1lKEJ1ZmZlclF1ZXVlOjppdGVyYXRvciBidWZmZXIsIGludCBvZmZzZXQpOwotCi0gIEJ1ZmZlclF1ZXVlOjppdGVyYXRvciBjdXJyZW50X2J1ZmZlcl87Ci0gIEJ1ZmZlclF1ZXVlIGJ1ZmZlcnNfOwotICBpbnQgY3VycmVudF9idWZmZXJfb2Zmc2V0XzsKLQotICBpbnQgYmFja3dhcmRfY2FwYWNpdHlfOwotICBpbnQgYmFja3dhcmRfYnl0ZXNfOwotCi0gIGludCBmb3J3YXJkX2NhcGFjaXR5XzsKLSAgaW50IGZvcndhcmRfYnl0ZXNfOwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudCB0aW1lIHdlJ3ZlIHNlZW4gaW4gY2FzZSB0aGUgfGJ1ZmZlcnNffCBpcwotICAvLyBlbXB0eSB3aGVuIG91ciBvd25lciBhc2tzIHdoYXQgdGltZSBpdCBpcy4KLSAgYmFzZTo6VGltZURlbHRhIGN1cnJlbnRfdGltZV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNlZWthYmxlQnVmZmVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1NFRUtBQkxFX0JVRkZFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2Vla2FibGVfYnVmZmVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2Vla2FibGVfYnVmZmVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGU1MTNjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NlZWthYmxlX2J1ZmZlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2Vla2FibGVfYnVmZmVyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFNlZWthYmxlQnVmZmVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIFNlZWthYmxlQnVmZmVyVGVzdCgpIDogYnVmZmVyXyhrQnVmZmVyU2l6ZSwga0J1ZmZlclNpemUpIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHN0YXRpYyBjb25zdCBpbnQga0RhdGFTaXplID0gNDA5NjAwOwotICBzdGF0aWMgY29uc3QgaW50IGtCdWZmZXJTaXplID0gNDA5NjsKLSAgc3RhdGljIGNvbnN0IGludCBrV3JpdGVTaXplID0gNTEyOwotCi0gIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7Ci0gICAgLy8gTm90ZTogV2UgdXNlIHNyYW5kKCkgYW5kIHJhbmQoKSByYXRoZXIgdGhhbiBiYXNlOjpSYW5kWFhYKCkgdG8gaW1wcm92ZQotICAgIC8vIHVuaXQgdGVzdCBwZXJmb3JtYW5jZS4gIFdlIGRvbid0IG5lZWQgZ29vZCByYW5kb20gbnVtYmVycywganVzdAotICAgIC8vIHNvbWV0aGluZyB0aGF0IGdlbmVyYXRlcyAibWl4ZWQgZGF0YS4iCi0gICAgY29uc3QgdW5zaWduZWQgaW50IGtLbm93blNlZWQgPSAweDk4NzY1NDMyOwotICAgIHNyYW5kKGtLbm93blNlZWQpOwotCi0gICAgLy8gQ3JlYXRlIHJhbmRvbSB0ZXN0IGRhdGEgc2FtcGxlcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtEYXRhU2l6ZTsgaSsrKSBkYXRhX1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHJhbmQoKSk7Ci0gIH0KLQotICBpbnQgR2V0UmFuZG9tSW50KGludCBtYXhpbXVtKSB7IHJldHVybiByYW5kKCkgJSAobWF4aW11bSArIDEpOyB9Ci0KLSAgU2Vla2FibGVCdWZmZXIgYnVmZmVyXzsKLSAgdWludDhfdCBkYXRhX1trRGF0YVNpemVdOwotICB1aW50OF90IHdyaXRlX2J1ZmZlcl9ba0RhdGFTaXplXTsKLX07Ci0KLVRFU1RfRihTZWVrYWJsZUJ1ZmZlclRlc3QsIFJhbmRvbVJlYWRXcml0ZSkgewotICBpbnQgd3JpdGVfcG9zaXRpb24gPSAwOwotICBpbnQgcmVhZF9wb3NpdGlvbiA9IDA7Ci0gIHdoaWxlIChyZWFkX3Bvc2l0aW9uIDwga0RhdGFTaXplKSB7Ci0gICAgLy8gV3JpdGUgYSByYW5kb20gYW1vdW50IG9mIGRhdGEuCi0gICAgaW50IHdyaXRlX3NpemUgPSBHZXRSYW5kb21JbnQoa0J1ZmZlclNpemUpOwotICAgIHdyaXRlX3NpemUgPSBzdGQ6Om1pbih3cml0ZV9zaXplLCBrRGF0YVNpemUgLSB3cml0ZV9wb3NpdGlvbik7Ci0gICAgYm9vbCBzaG91bGRfYXBwZW5kID0gYnVmZmVyXy5BcHBlbmQoZGF0YV8gKyB3cml0ZV9wb3NpdGlvbiwgd3JpdGVfc2l6ZSk7Ci0gICAgd3JpdGVfcG9zaXRpb24gKz0gd3JpdGVfc2l6ZTsKLSAgICBFWFBFQ1RfR0Uod3JpdGVfcG9zaXRpb24sIHJlYWRfcG9zaXRpb24pOwotICAgIEVYUEVDVF9FUSh3cml0ZV9wb3NpdGlvbiAtIHJlYWRfcG9zaXRpb24sIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgICBFWFBFQ1RfRVEoc2hvdWxkX2FwcGVuZCwgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkgPCBrQnVmZmVyU2l6ZSkKLSAgICAgICAgPDwgIkluY29ycmVjdCBidWZmZXIgZnVsbCByZXBvcnRlZCI7Ci0KLSAgICAvLyBQZWVrIGEgcmFuZG9tIGFtb3VudCBvZiBkYXRhLgotICAgIGludCBjb3B5X3NpemUgPSBHZXRSYW5kb21JbnQoa0J1ZmZlclNpemUpOwotICAgIGludCBieXRlc19jb3BpZWQgPSBidWZmZXJfLlBlZWsod3JpdGVfYnVmZmVyXywgY29weV9zaXplKTsKLSAgICBFWFBFQ1RfR0UoY29weV9zaXplLCBieXRlc19jb3BpZWQpOwotICAgIEVYUEVDVF9FUSgKLSAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwgYnl0ZXNfY29waWVkKSk7Ci0KLSAgICAvLyBSZWFkIGEgcmFuZG9tIGFtb3VudCBvZiBkYXRhLgotICAgIGludCByZWFkX3NpemUgPSBHZXRSYW5kb21JbnQoa0J1ZmZlclNpemUpOwotICAgIGludCBieXRlc19yZWFkID0gYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIHJlYWRfc2l6ZSk7Ci0gICAgRVhQRUNUX0dFKHJlYWRfc2l6ZSwgYnl0ZXNfcmVhZCk7Ci0gICAgRVhQRUNUX0VRKAotICAgICAgICAwLCBtZW1jbXAod3JpdGVfYnVmZmVyXywgZGF0YV8gKyByZWFkX3Bvc2l0aW9uLCBieXRlc19yZWFkKSk7Ci0gICAgcmVhZF9wb3NpdGlvbiArPSBieXRlc19yZWFkOwotICAgIEVYUEVDVF9HRSh3cml0ZV9wb3NpdGlvbiwgcmVhZF9wb3NpdGlvbik7Ci0gICAgRVhQRUNUX0VRKHdyaXRlX3Bvc2l0aW9uIC0gcmVhZF9wb3NpdGlvbiwgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkpOwotICB9Ci19Ci0KLVRFU1RfRihTZWVrYWJsZUJ1ZmZlclRlc3QsIFJlYWRXcml0ZVNlZWspIHsKLSAgY29uc3QgaW50IGtSZWFkU2l6ZSA9IGtXcml0ZVNpemUgLyA0OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgewotICAgIC8vIFdyaXRlIHVudGlsIGJ1ZmZlciBpcyBmdWxsLgotICAgIGZvciAoaW50IGogPSAwOyBqIDwga0J1ZmZlclNpemU7IGogKz0ga1dyaXRlU2l6ZSkgewotICAgICAgYm9vbCBzaG91bGRfYXBwZW5kID0gYnVmZmVyXy5BcHBlbmQoZGF0YV8gKyBqLCBrV3JpdGVTaXplKTsKLSAgICAgIEVYUEVDVF9FUShqIDwga0J1ZmZlclNpemUgLSBrV3JpdGVTaXplLCBzaG91bGRfYXBwZW5kKQotICAgICAgICAgIDw8ICJJbmNvcnJlY3QgYnVmZmVyIGZ1bGwgcmVwb3J0ZWQiOwotICAgICAgRVhQRUNUX0VRKGogKyBrV3JpdGVTaXplLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgfQotCi0gICAgLy8gU2ltdWxhdGUgYSByZWFkIGFuZCBzZWVrIHBhdHRlcm4uIEVhY2ggbG9vcCByZWFkcyA0IHRpbWVzLCBlYWNoIHRpbWUKLSAgICAvLyByZWFkaW5nIGEgcXVhcnRlciBvZiB8a1dyaXRlU2l6ZXwuCi0gICAgaW50IHJlYWRfcG9zaXRpb24gPSAwOwotICAgIGludCBmb3J3YXJkX2J5dGVzID0ga0J1ZmZlclNpemU7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQnVmZmVyU2l6ZTsgaiArPSBrV3JpdGVTaXplKSB7Ci0gICAgICAvLyBSZWFkLgotICAgICAgRVhQRUNUX0VRKGtSZWFkU2l6ZSwgYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIGtSZWFkU2l6ZSkpOwotICAgICAgZm9yd2FyZF9ieXRlcyAtPSBrUmVhZFNpemU7Ci0gICAgICBFWFBFQ1RfRVEoZm9yd2FyZF9ieXRlcywgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkpOwotICAgICAgRVhQRUNUX0VRKAotICAgICAgICAgIDAsIG1lbWNtcCh3cml0ZV9idWZmZXJfLCBkYXRhXyArIHJlYWRfcG9zaXRpb24sIGtSZWFkU2l6ZSkpOwotICAgICAgcmVhZF9wb3NpdGlvbiArPSBrUmVhZFNpemU7Ci0KLSAgICAgIC8vIFNlZWsgZm9yd2FyZC4KLSAgICAgIEVYUEVDVF9UUlVFKGJ1ZmZlcl8uU2VlaygyICoga1JlYWRTaXplKSk7Ci0gICAgICBmb3J3YXJkX2J5dGVzIC09IDIgKiBrUmVhZFNpemU7Ci0gICAgICByZWFkX3Bvc2l0aW9uICs9IDIgKiBrUmVhZFNpemU7Ci0gICAgICBFWFBFQ1RfRVEoZm9yd2FyZF9ieXRlcywgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkpOwotCi0gICAgICAvLyBDb3B5LgotICAgICAgRVhQRUNUX0VRKGtSZWFkU2l6ZSwgYnVmZmVyXy5QZWVrKHdyaXRlX2J1ZmZlcl8sIGtSZWFkU2l6ZSkpOwotICAgICAgRVhQRUNUX0VRKGZvcndhcmRfYnl0ZXMsIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgICAgIEVYUEVDVF9FUSgKLSAgICAgICAgICAwLCBtZW1jbXAod3JpdGVfYnVmZmVyXywgZGF0YV8gKyByZWFkX3Bvc2l0aW9uLCBrUmVhZFNpemUpKTsKLQotICAgICAgLy8gUmVhZC4KLSAgICAgIEVYUEVDVF9FUShrUmVhZFNpemUsIGJ1ZmZlcl8uUmVhZCh3cml0ZV9idWZmZXJfLCBrUmVhZFNpemUpKTsKLSAgICAgIGZvcndhcmRfYnl0ZXMgLT0ga1JlYWRTaXplOwotICAgICAgRVhQRUNUX0VRKGZvcndhcmRfYnl0ZXMsIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgICAgIEVYUEVDVF9FUSgKLSAgICAgICAgICAwLCBtZW1jbXAod3JpdGVfYnVmZmVyXywgZGF0YV8gKyByZWFkX3Bvc2l0aW9uLCBrUmVhZFNpemUpKTsKLSAgICAgIHJlYWRfcG9zaXRpb24gKz0ga1JlYWRTaXplOwotCi0gICAgICAvLyBTZWVrIGJhY2t3YXJkLgotICAgICAgRVhQRUNUX1RSVUUoYnVmZmVyXy5TZWVrKC0zICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oa1JlYWRTaXplKSkpOwotICAgICAgZm9yd2FyZF9ieXRlcyArPSAzICoga1JlYWRTaXplOwotICAgICAgcmVhZF9wb3NpdGlvbiAtPSAzICoga1JlYWRTaXplOwotICAgICAgRVhQRUNUX0VRKGZvcndhcmRfYnl0ZXMsIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLQotICAgICAgLy8gQ29weS4KLSAgICAgIEVYUEVDVF9FUShrUmVhZFNpemUsIGJ1ZmZlcl8uUGVlayh3cml0ZV9idWZmZXJfLCBrUmVhZFNpemUpKTsKLSAgICAgIEVYUEVDVF9FUShmb3J3YXJkX2J5dGVzLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoCi0gICAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwga1JlYWRTaXplKSk7Ci0KLSAgICAgIC8vIFJlYWQuCi0gICAgICBFWFBFQ1RfRVEoa1JlYWRTaXplLCBidWZmZXJfLlJlYWQod3JpdGVfYnVmZmVyXywga1JlYWRTaXplKSk7Ci0gICAgICBmb3J3YXJkX2J5dGVzIC09IGtSZWFkU2l6ZTsKLSAgICAgIEVYUEVDVF9FUShmb3J3YXJkX2J5dGVzLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoCi0gICAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwga1JlYWRTaXplKSk7Ci0gICAgICByZWFkX3Bvc2l0aW9uICs9IGtSZWFkU2l6ZTsKLQotICAgICAgLy8gQ29weS4KLSAgICAgIEVYUEVDVF9FUShrUmVhZFNpemUsIGJ1ZmZlcl8uUGVlayh3cml0ZV9idWZmZXJfLCBrUmVhZFNpemUpKTsKLSAgICAgIEVYUEVDVF9FUShmb3J3YXJkX2J5dGVzLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoCi0gICAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwga1JlYWRTaXplKSk7Ci0KLSAgICAgIC8vIFJlYWQuCi0gICAgICBFWFBFQ1RfRVEoa1JlYWRTaXplLCBidWZmZXJfLlJlYWQod3JpdGVfYnVmZmVyXywga1JlYWRTaXplKSk7Ci0gICAgICBmb3J3YXJkX2J5dGVzIC09IGtSZWFkU2l6ZTsKLSAgICAgIEVYUEVDVF9FUShmb3J3YXJkX2J5dGVzLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoCi0gICAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwga1JlYWRTaXplKSk7Ci0gICAgICByZWFkX3Bvc2l0aW9uICs9IGtSZWFkU2l6ZTsKLQotICAgICAgLy8gU2VlayBmb3J3YXJkLgotICAgICAgRVhQRUNUX1RSVUUoYnVmZmVyXy5TZWVrKGtSZWFkU2l6ZSkpOwotICAgICAgZm9yd2FyZF9ieXRlcyAtPSBrUmVhZFNpemU7Ci0gICAgICByZWFkX3Bvc2l0aW9uICs9IGtSZWFkU2l6ZTsKLSAgICAgIEVYUEVDVF9FUShmb3J3YXJkX2J5dGVzLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1RfRihTZWVrYWJsZUJ1ZmZlclRlc3QsIEJ1ZmZlckZ1bGwpIHsKLSAgY29uc3QgaW50IGtNYXhXcml0ZVNpemUgPSAyICoga0J1ZmZlclNpemU7Ci0KLSAgLy8gV3JpdGUgYW5kIGV4cGVjdCB0aGUgYnVmZmVyIHRvIGJlIG5vdCBmdWxsLgotICBmb3IgKGludCBpID0gMDsgaSA8IGtCdWZmZXJTaXplIC0ga1dyaXRlU2l6ZTsgaSArPSBrV3JpdGVTaXplKSB7Ci0gICAgRVhQRUNUX1RSVUUoYnVmZmVyXy5BcHBlbmQoZGF0YV8gKyBpLCBrV3JpdGVTaXplKSk7Ci0gICAgRVhQRUNUX0VRKGkgKyBrV3JpdGVTaXplLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gIH0KLQotICAvLyBXcml0ZSB1bnRpbCB3ZSBoYXZlIGtNYXhXcml0ZVNpemUgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4gQnVmZmVyIGlzIGZ1bGwgaW4KLSAgLy8gdGhlc2Ugd3JpdGVzLgotICBmb3IgKGludCBpID0gYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCk7IGkgPCBrTWF4V3JpdGVTaXplOyBpICs9IGtXcml0ZVNpemUpIHsKLSAgICBFWFBFQ1RfRkFMU0UoYnVmZmVyXy5BcHBlbmQoZGF0YV8gKyBpLCBrV3JpdGVTaXplKSk7Ci0gICAgRVhQRUNUX0VRKGkgKyBrV3JpdGVTaXplLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gIH0KLQotICAvLyBSZWFkIHVudGlsIHRoZSBidWZmZXIgaXMgZW1wdHkuCi0gIGludCByZWFkX3Bvc2l0aW9uID0gMDsKLSAgd2hpbGUgKGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKSB7Ci0gICAgLy8gUmVhZCBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YS4KLSAgICBpbnQgcmVhZF9zaXplID0gR2V0UmFuZG9tSW50KGtCdWZmZXJTaXplKTsKLSAgICBpbnQgZm9yd2FyZF9ieXRlcyA9IGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpOwotICAgIGludCBieXRlc19yZWFkID0gYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIHJlYWRfc2l6ZSk7Ci0gICAgRVhQRUNUX0VRKAotICAgICAgICAwLCBtZW1jbXAod3JpdGVfYnVmZmVyXywgZGF0YV8gKyByZWFkX3Bvc2l0aW9uLCBieXRlc19yZWFkKSk7Ci0gICAgaWYgKHJlYWRfc2l6ZSA+IGZvcndhcmRfYnl0ZXMpCi0gICAgICBFWFBFQ1RfRVEoZm9yd2FyZF9ieXRlcywgYnl0ZXNfcmVhZCk7Ci0gICAgZWxzZQotICAgICAgRVhQRUNUX0VRKHJlYWRfc2l6ZSwgYnl0ZXNfcmVhZCk7Ci0gICAgcmVhZF9wb3NpdGlvbiArPSBieXRlc19yZWFkOwotICAgIEVYUEVDVF9HRShrTWF4V3JpdGVTaXplLCByZWFkX3Bvc2l0aW9uKTsKLSAgICBFWFBFQ1RfRVEoa01heFdyaXRlU2l6ZSAtIHJlYWRfcG9zaXRpb24sIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgfQotCi0gIC8vIEV4cGVjdHMgd2UgaGF2ZSBubyBieXRlcyBsZWZ0LgotICBFWFBFQ1RfRVEoMCwgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkpOwotICBFWFBFQ1RfRVEoMCwgYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIDEpKTsKLX0KLQotVEVTVF9GKFNlZWthYmxlQnVmZmVyVGVzdCwgU2Vla0JhY2t3YXJkKSB7Ci0gIEVYUEVDVF9FUSgwLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gIEVYUEVDVF9FUSgwLCBidWZmZXJfLmJhY2t3YXJkX2J5dGVzKCkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyXy5TZWVrKDEpKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlcl8uU2VlaygtMSkpOwotCi0gIGNvbnN0IGludCBrUmVhZFNpemUgPSAyNTY7Ci0KLSAgLy8gV3JpdGUgaW50byBidWZmZXIgdW50aWwgaXQncyBmdWxsLgotICBmb3IgKGludCBpID0gMDsgaSA8IGtCdWZmZXJTaXplOyBpICs9IGtXcml0ZVNpemUpIHsKLSAgICAvLyBXcml0ZSBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YS4KLSAgICBidWZmZXJfLkFwcGVuZChkYXRhXyArIGksIGtXcml0ZVNpemUpOwotICB9Ci0KLSAgLy8gUmVhZCB1bnRpbCBidWZmZXIgaXMgZW1wdHkuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga0J1ZmZlclNpemU7IGkgKz0ga1JlYWRTaXplKSB7Ci0gICAgRVhQRUNUX0VRKGtSZWFkU2l6ZSwgYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIGtSZWFkU2l6ZSkpOwotICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAod3JpdGVfYnVmZmVyXywgZGF0YV8gKyBpLCBrUmVhZFNpemUpKTsKLSAgfQotCi0gIC8vIFNlZWsgYmFja3dhcmQuCi0gIEVYUEVDVF9UUlVFKGJ1ZmZlcl8uU2Vlaygtc3RhdGljX2Nhc3Q8aW50MzJfdD4oa0J1ZmZlclNpemUpKSk7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXJfLlNlZWsoLTEpKTsKLQotICAvLyBSZWFkIGFnYWluLgotICBmb3IgKGludCBpID0gMDsgaSA8IGtCdWZmZXJTaXplOyBpICs9IGtSZWFkU2l6ZSkgewotICAgIEVYUEVDVF9FUShrUmVhZFNpemUsIGJ1ZmZlcl8uUmVhZCh3cml0ZV9idWZmZXJfLCBrUmVhZFNpemUpKTsKLSAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgaSwga1JlYWRTaXplKSk7Ci0gIH0KLX0KLQotVEVTVF9GKFNlZWthYmxlQnVmZmVyVGVzdCwgR2V0Q3VycmVudENodW5rKSB7Ci0gIGNvbnN0IGludCBrU2Vla1NpemUgPSBrV3JpdGVTaXplIC8gMzsKLQotICBzY29wZWRfcmVmcHRyPERhdGFCdWZmZXI+IGJ1ZmZlciA9IERhdGFCdWZmZXI6OkNvcHlGcm9tKGRhdGFfLCBrV3JpdGVTaXplKTsKLSAgRENIRUNLKGJ1ZmZlcik7Ci0KLSAgY29uc3QgdWludDhfdCogZGF0YTsKLSAgaW50IHNpemU7Ci0gIEVYUEVDVF9GQUxTRShidWZmZXJfLkdldEN1cnJlbnRDaHVuaygmZGF0YSwgJnNpemUpKTsKLQotICBidWZmZXJfLkFwcGVuZChidWZmZXIuZ2V0KCkpOwotICBFWFBFQ1RfVFJVRShidWZmZXJfLkdldEN1cnJlbnRDaHVuaygmZGF0YSwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKGRhdGEsIGJ1ZmZlci0+ZGF0YSgpKTsKLSAgRVhQRUNUX0VRKHNpemUsIGJ1ZmZlci0+ZGF0YV9zaXplKCkpOwotCi0gIGJ1ZmZlcl8uU2VlayhrU2Vla1NpemUpOwotICBFWFBFQ1RfVFJVRShidWZmZXJfLkdldEN1cnJlbnRDaHVuaygmZGF0YSwgJnNpemUpKTsKLSAgRVhQRUNUX0VRKGRhdGEsIGJ1ZmZlci0+ZGF0YSgpICsga1NlZWtTaXplKTsKLSAgRVhQRUNUX0VRKHNpemUsIGJ1ZmZlci0+ZGF0YV9zaXplKCkgLSBrU2Vla1NpemUpOwotfQotCi1URVNUX0YoU2Vla2FibGVCdWZmZXJUZXN0LCBTZWVrRm9yd2FyZCkgewotICBpbnQgd3JpdGVfcG9zaXRpb24gPSAwOwotICBpbnQgcmVhZF9wb3NpdGlvbiA9IDA7Ci0gIHdoaWxlIChyZWFkX3Bvc2l0aW9uIDwga0RhdGFTaXplKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMCAmJiB3cml0ZV9wb3NpdGlvbiA8IGtEYXRhU2l6ZTsgKytpKSB7Ci0gICAgICAvLyBXcml0ZSBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YS4KLSAgICAgIGludCB3cml0ZV9zaXplID0gR2V0UmFuZG9tSW50KGtCdWZmZXJTaXplKTsKLSAgICAgIHdyaXRlX3NpemUgPSBzdGQ6Om1pbih3cml0ZV9zaXplLCBrRGF0YVNpemUgLSB3cml0ZV9wb3NpdGlvbik7Ci0KLSAgICAgIGJvb2wgc2hvdWxkX2FwcGVuZCA9IGJ1ZmZlcl8uQXBwZW5kKGRhdGFfICsgd3JpdGVfcG9zaXRpb24sIHdyaXRlX3NpemUpOwotICAgICAgd3JpdGVfcG9zaXRpb24gKz0gd3JpdGVfc2l6ZTsKLSAgICAgIEVYUEVDVF9HRSh3cml0ZV9wb3NpdGlvbiwgcmVhZF9wb3NpdGlvbik7Ci0gICAgICBFWFBFQ1RfRVEod3JpdGVfcG9zaXRpb24gLSByZWFkX3Bvc2l0aW9uLCBidWZmZXJfLmZvcndhcmRfYnl0ZXMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoc2hvdWxkX2FwcGVuZCwgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkgPCBrQnVmZmVyU2l6ZSkKLSAgICAgICAgICA8PCAiSW5jb3JyZWN0IGJ1ZmZlciBmdWxsIHN0YXR1cyByZXBvcnRlZCI7Ci0gICAgfQotCi0gICAgLy8gUmVhZCBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YS4KLSAgICBpbnQgc2Vla19zaXplID0gR2V0UmFuZG9tSW50KGtCdWZmZXJTaXplKTsKLSAgICBpZiAoYnVmZmVyXy5TZWVrKHNlZWtfc2l6ZSkpIHJlYWRfcG9zaXRpb24gKz0gc2Vla19zaXplOwotICAgIEVYUEVDVF9HRSh3cml0ZV9wb3NpdGlvbiwgcmVhZF9wb3NpdGlvbik7Ci0gICAgRVhQRUNUX0VRKHdyaXRlX3Bvc2l0aW9uIC0gcmVhZF9wb3NpdGlvbiwgYnVmZmVyXy5mb3J3YXJkX2J5dGVzKCkpOwotCi0gICAgLy8gUmVhZCBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YS4KLSAgICBpbnQgcmVhZF9zaXplID0gR2V0UmFuZG9tSW50KGtCdWZmZXJTaXplKTsKLSAgICBpbnQgYnl0ZXNfcmVhZCA9IGJ1ZmZlcl8uUmVhZCh3cml0ZV9idWZmZXJfLCByZWFkX3NpemUpOwotICAgIEVYUEVDVF9HRShyZWFkX3NpemUsIGJ5dGVzX3JlYWQpOwotICAgIEVYUEVDVF9FUSgKLSAgICAgICAgMCwgbWVtY21wKHdyaXRlX2J1ZmZlcl8sIGRhdGFfICsgcmVhZF9wb3NpdGlvbiwgYnl0ZXNfcmVhZCkpOwotICAgIHJlYWRfcG9zaXRpb24gKz0gYnl0ZXNfcmVhZDsKLSAgICBFWFBFQ1RfR0Uod3JpdGVfcG9zaXRpb24sIHJlYWRfcG9zaXRpb24pOwotICAgIEVYUEVDVF9FUSh3cml0ZV9wb3NpdGlvbiAtIHJlYWRfcG9zaXRpb24sIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgfQotfQotCi1URVNUX0YoU2Vla2FibGVCdWZmZXJUZXN0LCBBbGxNZXRob2RzKSB7Ci0gIEVYUEVDVF9FUSgwLCBidWZmZXJfLlJlYWQod3JpdGVfYnVmZmVyXywgMCkpOwotICBFWFBFQ1RfRVEoMCwgYnVmZmVyXy5SZWFkKHdyaXRlX2J1ZmZlcl8sIDEpKTsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyXy5TZWVrKDApKTsKLSAgRVhQRUNUX0ZBTFNFKGJ1ZmZlcl8uU2VlaygtMSkpOwotICBFWFBFQ1RfRkFMU0UoYnVmZmVyXy5TZWVrKDEpKTsKLSAgRVhQRUNUX0VRKDAsIGJ1ZmZlcl8uZm9yd2FyZF9ieXRlcygpKTsKLSAgRVhQRUNUX0VRKDAsIGJ1ZmZlcl8uYmFja3dhcmRfYnl0ZXMoKSk7Ci19Ci0KLVRFU1RfRihTZWVrYWJsZUJ1ZmZlclRlc3QsIEdldFRpbWUpIHsKLSAgY29uc3QgaW50NjRfdCBrTm9UUyA9IGtOb1RpbWVzdGFtcC5Ub0ludGVybmFsVmFsdWUoKTsKLSAgY29uc3Qgc3RydWN0IHsKLSAgICBpbnQ2NF90IGZpcnN0X3RpbWVfdXNlY29uZHM7Ci0gICAgaW50NjRfdCBkdXJhdGlvbl91c2Vjb25kczsKLSAgICBpbnQgY29uc3VtZV9ieXRlczsKLSAgICBpbnQ2NF90IGV4cGVjdGVkX3RpbWU7Ci0gIH0gdGVzdHNbXSA9IHsKLSAgICAgIHtrTm9UUywgMTAwMDAwMCwgMCwga05vVFN9LAotICAgICAge2tOb1RTLCA0MDAwMDAwLCAwLCBrTm9UU30sCi0gICAgICB7a05vVFMsIDgwMDAwMDAsIDAsIGtOb1RTfSwKLSAgICAgIHtrTm9UUywgMTAwMDAwMCwga1dyaXRlU2l6ZSAvIDIsIGtOb1RTfSwKLSAgICAgIHtrTm9UUywgNDAwMDAwMCwga1dyaXRlU2l6ZSAvIDIsIGtOb1RTfSwKLSAgICAgIHtrTm9UUywgODAwMDAwMCwga1dyaXRlU2l6ZSAvIDIsIGtOb1RTfSwKLSAgICAgIHtrTm9UUywgMTAwMDAwMCwga1dyaXRlU2l6ZSwga05vVFN9LAotICAgICAge2tOb1RTLCA0MDAwMDAwLCBrV3JpdGVTaXplLCBrTm9UU30sCi0gICAgICB7a05vVFMsIDgwMDAwMDAsIGtXcml0ZVNpemUsIGtOb1RTfSwKLSAgICAgIHswLCAxMDAwMDAwLCAwLCAwfSwKLSAgICAgIHswLCA0MDAwMDAwLCAwLCAwfSwKLSAgICAgIHswLCA4MDAwMDAwLCAwLCAwfSwKLSAgICAgIHswLCAxMDAwMDAwLCBrV3JpdGVTaXplIC8gMiwgNTAwMDAwfSwKLSAgICAgIHswLCA0MDAwMDAwLCBrV3JpdGVTaXplIC8gMiwgMjAwMDAwMH0sCi0gICAgICB7MCwgODAwMDAwMCwga1dyaXRlU2l6ZSAvIDIsIDQwMDAwMDB9LAotICAgICAgezAsIDEwMDAwMDAsIGtXcml0ZVNpemUsIDEwMDAwMDB9LAotICAgICAgezAsIDQwMDAwMDAsIGtXcml0ZVNpemUsIDQwMDAwMDB9LAotICAgICAgezAsIDgwMDAwMDAsIGtXcml0ZVNpemUsIDgwMDAwMDB9LAotICAgICAgezUsIDEwMDAwMDAsIDAsIDV9LAotICAgICAgezUsIDQwMDAwMDAsIDAsIDV9LAotICAgICAgezUsIDgwMDAwMDAsIDAsIDV9LAotICAgICAgezUsIDEwMDAwMDAsIGtXcml0ZVNpemUgLyAyLCA1MDAwMDV9LAotICAgICAgezUsIDQwMDAwMDAsIGtXcml0ZVNpemUgLyAyLCAyMDAwMDA1fSwKLSAgICAgIHs1LCA4MDAwMDAwLCBrV3JpdGVTaXplIC8gMiwgNDAwMDAwNX0sCi0gICAgICB7NSwgMTAwMDAwMCwga1dyaXRlU2l6ZSwgMTAwMDAwNX0sCi0gICAgICB7NSwgNDAwMDAwMCwga1dyaXRlU2l6ZSwgNDAwMDAwNX0sCi0gICAgICB7NSwgODAwMDAwMCwga1dyaXRlU2l6ZSwgODAwMDAwNX0sCi0gIH07Ci0KLSAgLy8gY3VycmVudF90aW1lKCkgbXVzdCBpbml0aWFsbHkgcmV0dXJuIGtOb1RpbWVzdGFtcC4KLSAgRVhQRUNUX0VRKGtOb1RpbWVzdGFtcC5Ub0ludGVybmFsVmFsdWUoKSwKLSAgICAgICAgICAgIGJ1ZmZlcl8uY3VycmVudF90aW1lKCkuVG9JbnRlcm5hbFZhbHVlKCkpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGF0YUJ1ZmZlcj4gYnVmZmVyID0gRGF0YUJ1ZmZlcjo6Q29weUZyb20oZGF0YV8sIGtXcml0ZVNpemUpOwotICBEQ0hFQ0soYnVmZmVyKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZSh0ZXN0cyk7ICsraSkgewotICAgIGJ1ZmZlci0+c2V0X3RpbWVzdGFtcCgKLSAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKHRlc3RzW2ldLmZpcnN0X3RpbWVfdXNlY29uZHMpKTsKLSAgICBidWZmZXItPnNldF9kdXJhdGlvbigKLSAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKHRlc3RzW2ldLmR1cmF0aW9uX3VzZWNvbmRzKSk7Ci0gICAgYnVmZmVyXy5BcHBlbmQoYnVmZmVyLmdldCgpKTsKLSAgICBFWFBFQ1RfVFJVRShidWZmZXJfLlNlZWsodGVzdHNbaV0uY29uc3VtZV9ieXRlcykpOwotCi0gICAgaW50NjRfdCBhY3R1YWwgPSBidWZmZXJfLmN1cnJlbnRfdGltZSgpLlRvSW50ZXJuYWxWYWx1ZSgpOwotCi0gICAgRVhQRUNUX0VRKHRlc3RzW2ldLmV4cGVjdGVkX3RpbWUsIGFjdHVhbCkKLSAgICAgICAgPDwgIldpdGggdGVzdCA9IHsgc3RhcnQ6IiA8PCB0ZXN0c1tpXS5maXJzdF90aW1lX3VzZWNvbmRzCi0gICAgICAgIDw8ICIsIGR1cmF0aW9uOiIgPDwgdGVzdHNbaV0uZHVyYXRpb25fdXNlY29uZHMKLSAgICAgICAgPDwgIiwgY29uc3VtZWQ6IiA8PCB0ZXN0c1tpXS5jb25zdW1lX2J5dGVzIDw8ICIgfVxuIjsKLQotICAgIGJ1ZmZlcl8uQ2xlYXIoKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmggYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1di5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWFhMmIxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1NJTURfQ09OVkVSVF9SR0JfVE9fWVVWX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1NJTURfQ09OVkVSVF9SR0JfVE9fWVVWX0hfCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYXJlIGV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuICBMaWJyYXJ5IHVzZXJzIHNob3VsZAotLy8gb25seSBjYWxsIHRoZSBtZXRob2RzIGxpc3RlZCBpbiB5dXZfY29udmVydC5oLgotCi1NRURJQV9FWFBPUlQgdm9pZCBDb252ZXJ0UkdCMzJUb1lVVl9TU1NFMyhjb25zdCB1aW50OF90KiByZ2JmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHlwbGFuZSwgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdnBsYW5lLCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRSR0IyNFRvWVVWX1NTU0UzKGNvbnN0IHVpbnQ4X3QqIHJnYmZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogeXBsYW5lLCB1aW50OF90KiB1cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB2cGxhbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFJHQjMyVG9ZVVZfU1NFMihjb25zdCB1aW50OF90KiByZ2JmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogeXBsYW5lLCB1aW50OF90KiB1cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHZwbGFuZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmdic3RyaWRlLCBpbnQgeXN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFJHQjMyVG9ZVVZfU1NFMl9SZWZlcmVuY2UoCi0gICAgY29uc3QgdWludDhfdCogcmdiZnJhbWUsIHVpbnQ4X3QqIHlwbGFuZSwgdWludDhfdCogdXBsYW5lLCB1aW50OF90KiB2cGxhbmUsCi0gICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLCBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFJHQjMyVG9ZVVZfQyhjb25zdCB1aW50OF90KiByZ2JmcmFtZSwgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFJHQjI0VG9ZVVZfQyhjb25zdCB1aW50OF90KiByZ2JmcmFtZSwgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfU0lNRF9DT05WRVJUX1JHQl9UT19ZVVZfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X2MuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9jLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTJlNTdiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X2MuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXYuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGF0aWMgaW50IGNsaXBfYnl0ZShpbnQgeCkgewotICBpZiAoeCA+IDI1NSkKLSAgICByZXR1cm4gMjU1OwotICBlbHNlIGlmICh4IDwgMCkKLSAgICByZXR1cm4gMDsKLSAgZWxzZQotICAgIHJldHVybiB4OwotfQotCi12b2lkIENvbnZlcnRSR0IzMlRvWVVWX0MoY29uc3QgdWludDhfdCogcmdiZnJhbWUsIHVpbnQ4X3QqIHlwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCByZ2JzdHJpZGUsIGludCB5c3RyaWRlLCBpbnQgdXZzdHJpZGUpIHsKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gIGNvbnN0IGludCByID0gMDsKLSAgY29uc3QgaW50IGcgPSAxOwotICBjb25zdCBpbnQgYiA9IDI7Ci0jZWxzZQotICBjb25zdCBpbnQgciA9IDI7Ci0gIGNvbnN0IGludCBnID0gMTsKLSAgY29uc3QgaW50IGIgPSAwOwotI2VuZGlmCi0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lkdGg7ICsraikgewotICAgICAgLy8gU2luY2UgdGhlIGlucHV0IHBpeGVsIGZvcm1hdCBpcyBSR0IzMiwgdGhlcmUgYXJlIDQgYnl0ZXMgcGVyIHBpeGVsLgotICAgICAgY29uc3QgdWludDhfdCogcGl4ZWwgPSByZ2JmcmFtZSArIDQgKiBqOwotICAgICAgeXBsYW5lW2pdID0gY2xpcF9ieXRlKAotICAgICAgICAgICgocGl4ZWxbcl0gKiA2NiArIHBpeGVsW2ddICogMTI5ICsgcGl4ZWxbYl0gKiAyNSArIDEyOCkgPj4gOCkgKyAxNik7Ci0gICAgICBpZiAoaSAlIDIgPT0gMCAmJiBqICUgMiA9PSAwKSB7Ci0gICAgICAgIHVwbGFuZVtqIC8gMl0gPSBjbGlwX2J5dGUoCi0gICAgICAgICAgICAoKHBpeGVsW3JdICogLTM4ICsgcGl4ZWxbZ10gKiAtNzQgKyBwaXhlbFtiXSAqIDExMiArIDEyOCkgPj4gOCkgKwotICAgICAgICAgICAgMTI4KTsKLSAgICAgICAgdnBsYW5lW2ogLyAyXSA9IGNsaXBfYnl0ZSgKLSAgICAgICAgICAgICgocGl4ZWxbcl0gKiAxMTIgKyBwaXhlbFtnXSAqIC05NCArIHBpeGVsW2JdICogLTE4ICsgMTI4KSA+PiA4KSArCi0gICAgICAgICAgICAxMjgpOwotICAgICAgfQotICAgIH0KLSAgICByZ2JmcmFtZSArPSByZ2JzdHJpZGU7Ci0gICAgeXBsYW5lICs9IHlzdHJpZGU7Ci0gICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICAgIHZwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZCBDb252ZXJ0UkdCMjRUb1lVVl9DKGNvbnN0IHVpbnQ4X3QqIHJnYmZyYW1lLCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdXBsYW5lLCB1aW50OF90KiB2cGxhbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLCBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyArK2kpIHsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHdpZHRoOyArK2opIHsKLSAgICAgIC8vIFNpbmNlIHRoZSBpbnB1dCBwaXhlbCBmb3JtYXQgaXMgUkdCMjQsIHRoZXJlIGFyZSAzIGJ5dGVzIHBlciBwaXhlbC4KLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHBpeGVsID0gcmdiZnJhbWUgKyAzICogajsKLSAgICAgIHlwbGFuZVtqXSA9IGNsaXBfYnl0ZSgKLSAgICAgICAgICAoKHBpeGVsWzJdICogNjYgKyBwaXhlbFsxXSAqIDEyOSArIHBpeGVsWzBdICogMjUgKyAxMjgpID4+IDgpICsgMTYpOwotICAgICAgaWYgKGkgJSAyID09IDAgJiYgaiAlIDIgPT0gMCkgewotICAgICAgICB1cGxhbmVbaiAvIDJdID0gY2xpcF9ieXRlKAotICAgICAgICAgICAgKChwaXhlbFsyXSAqIC0zOCArIHBpeGVsWzFdICogLTc0ICsgcGl4ZWxbMF0gKiAxMTIgKyAxMjgpID4+IDgpICsKLSAgICAgICAgICAgIDEyOCk7Ci0gICAgICAgIHZwbGFuZVtqIC8gMl0gPSBjbGlwX2J5dGUoCi0gICAgICAgICAgICAoKHBpeGVsWzJdICogMTEyICsgcGl4ZWxbMV0gKiAtOTQgKyBwaXhlbFswXSAqIC0xOCArIDEyOCkgPj4gOCkgKwotICAgICAgICAgICAgMTI4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZ2JmcmFtZSArPSByZ2JzdHJpZGU7Ci0gICAgeXBsYW5lICs9IHlzdHJpZGU7Ci0gICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICAgIHZwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc2UyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfc3NlMi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmMDM2NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc2UyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzcxICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1di5oIgotCi0jaWYgZGVmaW5lZChDT01QSUxFUl9NU1ZDKQotI2luY2x1ZGUgPGludHJpbi5oPgotI2Vsc2UKLS8vIGNsYW5nLWZvcm1hdCBvZmYKLSNpbmNsdWRlIDxtbWludHJpbi5oPgotI2luY2x1ZGUgPGVtbWludHJpbi5oPgotLy8gY2xhbmctZm9ybWF0IG9uCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT01QSUxFUl9NU1ZDKQotI2RlZmluZSBTSU1EX0FMSUdORUQodmFyKSBfX2RlY2xzcGVjKGFsaWduKDE2KSkgdmFyCi0jZWxzZQotI2RlZmluZSBTSU1EX0FMSUdORUQodmFyKSB2YXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxNikpKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotI2RlZmluZSBGSVhfU0hJRlQgMTIKLSNkZWZpbmUgRklYKHgpICgoeCkgKiAoMSA8PCBGSVhfU0hJRlQpKQotCi0vLyBEZWZpbmUgYSBjb252ZW5pZW50IG1hY3JvIHRvIGRvIHN0YXRpYyBjYXN0LgotI2RlZmluZSBJTlQxNl9GSVgoeCkgc3RhdGljX2Nhc3Q8aW50MTZfdD4oRklYKHgpKQotCi0vLyBBbmRyb2lkJ3MgcGl4ZWwgbGF5b3V0IGlzIFJHQkEsIHdoaWxlIG90aGVyIHBsYXRmb3JtcwotLy8gYXJlIEJHUkEuCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotU0lNRF9BTElHTkVEKGNvbnN0IGludDE2X3QgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbOCAqIDNdKSA9IHsKLSAgICBJTlQxNl9GSVgoMC4yNTcpLCAgSU5UMTZfRklYKDAuNTA0KSwgIElOVDE2X0ZJWCgwLjA5OCksICAwLAotICAgIElOVDE2X0ZJWCgwLjI1NyksICBJTlQxNl9GSVgoMC41MDQpLCAgSU5UMTZfRklYKDAuMDk4KSwgIDAsCi0gICAgLUlOVDE2X0ZJWCgwLjE0OCksIC1JTlQxNl9GSVgoMC4yOTEpLCBJTlQxNl9GSVgoMC40MzkpLCAgMCwKLSAgICAtSU5UMTZfRklYKDAuMTQ4KSwgLUlOVDE2X0ZJWCgwLjI5MSksIElOVDE2X0ZJWCgwLjQzOSksICAwLAotICAgIElOVDE2X0ZJWCgwLjQzOSksICAtSU5UMTZfRklYKDAuMzY4KSwgLUlOVDE2X0ZJWCgwLjA3MSksIDAsCi0gICAgSU5UMTZfRklYKDAuNDM5KSwgIC1JTlQxNl9GSVgoMC4zNjgpLCAtSU5UMTZfRklYKDAuMDcxKSwgMCwKLX07Ci0jZWxzZQotU0lNRF9BTElHTkVEKGNvbnN0IGludDE2X3QgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbOCAqIDNdKSA9IHsKLSAgICBJTlQxNl9GSVgoMC4wOTgpLCAgSU5UMTZfRklYKDAuNTA0KSwgIElOVDE2X0ZJWCgwLjI1NyksICAwLAotICAgIElOVDE2X0ZJWCgwLjA5OCksICBJTlQxNl9GSVgoMC41MDQpLCAgSU5UMTZfRklYKDAuMjU3KSwgIDAsCi0gICAgSU5UMTZfRklYKDAuNDM5KSwgIC1JTlQxNl9GSVgoMC4yOTEpLCAtSU5UMTZfRklYKDAuMTQ4KSwgMCwKLSAgICBJTlQxNl9GSVgoMC40MzkpLCAgLUlOVDE2X0ZJWCgwLjI5MSksIC1JTlQxNl9GSVgoMC4xNDgpLCAwLAotICAgIC1JTlQxNl9GSVgoMC4wNzEpLCAtSU5UMTZfRklYKDAuMzY4KSwgSU5UMTZfRklYKDAuNDM5KSwgIDAsCi0gICAgLUlOVDE2X0ZJWCgwLjA3MSksIC1JTlQxNl9GSVgoMC4zNjgpLCBJTlQxNl9GSVgoMC40MzkpLCAgMCwKLX07Ci0jZW5kaWYKLQotI3VuZGVmIElOVDE2X0ZJWAotCi0vLyBUaGlzIGlzIHRoZSBmaW5hbCBvZmZzZXQgZm9yIHRoZSBjb252ZXJzaW9uIGZyb20gc2lnbmVkIHl1diB2YWx1ZXMgdG8KLS8vIHVuc2lnbmVkIHZhbHVlcy4gSXQgaXMgYXJyYW5nZWQgc28gdGhhdCBvZmZzZXQgb2YgMTYgaXMgYXBwbGllZCB0byBZCi0vLyBjb21wb25lbnRzIGFuZCAxMjggaXMgYWRkZWQgdG8gVVYgY29tcG9uZW50cyBmb3IgMiBwaXhlbHMuCi1TSU1EX0FMSUdORUQoY29uc3QgaW50MzJfdCBrWU9mZnNldFs0XSkgPSB7MTYsIDE2LCAxNiwgMTZ9OwotCi1zdGF0aWMgaW5saW5lIHVpbnQ4X3QgQ2xhbXAoaW50IHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA8IDApIHJldHVybiAwOwotICBpZiAodmFsdWUgPiAyNTUpIHJldHVybiAyNTU7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDhfdCBSR0JUb1koaW50IHIsIGludCBnLCBpbnQgYikgewotICBpbnQgeSA9IENvbnZlcnRSR0JBVG9ZVVZfa1RhYmxlWzBdICogYiArIENvbnZlcnRSR0JBVG9ZVVZfa1RhYmxlWzFdICogZyArCi0gICAgICAgICAgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbMl0gKiByOwotICB5ID4+PSBGSVhfU0hJRlQ7Ci0gIHJldHVybiBDbGFtcCh5ICsgMTYpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ4X3QgUkdCVG9VKGludCByLCBpbnQgZywgaW50IGIsIGludCBzaGlmdCkgewotICBpbnQgdSA9IENvbnZlcnRSR0JBVG9ZVVZfa1RhYmxlWzhdICogYiArIENvbnZlcnRSR0JBVG9ZVVZfa1RhYmxlWzldICogZyArCi0gICAgICAgICAgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbMTBdICogcjsKLSAgdSA+Pj0gRklYX1NISUZUICsgc2hpZnQ7Ci0gIHJldHVybiBDbGFtcCh1ICsgMTI4KTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50OF90IFJHQlRvVihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgc2hpZnQpIHsKLSAgaW50IHYgPSBDb252ZXJ0UkdCQVRvWVVWX2tUYWJsZVsxNl0gKiBiICsgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbMTddICogZyArCi0gICAgICAgICAgQ29udmVydFJHQkFUb1lVVl9rVGFibGVbMThdICogcjsKLSAgdiA+Pj0gRklYX1NISUZUICsgc2hpZnQ7Ci0gIHJldHVybiBDbGFtcCh2ICsgMTI4KTsKLX0KLQotI2RlZmluZSBDT05WRVJUX1kocmdiX2J1ZiwgeV9idWYpIFwKLSAgYiA9ICpyZ2JfYnVmKys7ICAgICAgICAgICAgICAgICBcCi0gIGcgPSAqcmdiX2J1ZisrOyAgICAgICAgICAgICAgICAgXAotICByID0gKnJnYl9idWYrKzsgICAgICAgICAgICAgICAgIFwKLSAgKytyZ2JfYnVmOyAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN1bV9iICs9IGI7ICAgICAgICAgICAgICAgICAgICAgXAotICBzdW1fZyArPSBnOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3VtX3IgKz0gcjsgICAgICAgICAgICAgICAgICAgICBcCi0gICp5X2J1ZisrID0gUkdCVG9ZKHIsIGcsIGIpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgQ29udmVydFJHQlRvWVVWX1YySDIoY29uc3QgdWludDhfdCogcmdiX2J1Zl8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHJnYl9idWZfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB5X2J1Zl8xLCB1aW50OF90KiB5X2J1Zl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHVfYnVmLCB1aW50OF90KiB2X2J1ZikgewotICBpbnQgc3VtX2IgPSAwOwotICBpbnQgc3VtX2cgPSAwOwotICBpbnQgc3VtX3IgPSAwOwotICBpbnQgciwgZywgYjsKLQotICBDT05WRVJUX1kocmdiX2J1Zl8xLCB5X2J1Zl8xKTsKLSAgQ09OVkVSVF9ZKHJnYl9idWZfMSwgeV9idWZfMSk7Ci0gIENPTlZFUlRfWShyZ2JfYnVmXzIsIHlfYnVmXzIpOwotICBDT05WRVJUX1kocmdiX2J1Zl8yLCB5X2J1Zl8yKTsKLSAgKnVfYnVmKysgPSBSR0JUb1Uoc3VtX3IsIHN1bV9nLCBzdW1fYiwgMik7Ci0gICp2X2J1ZisrID0gUkdCVG9WKHN1bV9yLCBzdW1fZywgc3VtX2IsIDIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgQ29udmVydFJHQlRvWVVWX1YySDEoY29uc3QgdWludDhfdCogcmdiX2J1Zl8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHJnYl9idWZfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB5X2J1Zl8xLCB1aW50OF90KiB5X2J1Zl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHVfYnVmLCB1aW50OF90KiB2X2J1ZikgewotICBpbnQgc3VtX2IgPSAwOwotICBpbnQgc3VtX2cgPSAwOwotICBpbnQgc3VtX3IgPSAwOwotICBpbnQgciwgZywgYjsKLQotICBDT05WRVJUX1kocmdiX2J1Zl8xLCB5X2J1Zl8xKTsKLSAgQ09OVkVSVF9ZKHJnYl9idWZfMiwgeV9idWZfMik7Ci0gICp1X2J1ZisrID0gUkdCVG9VKHN1bV9yLCBzdW1fZywgc3VtX2IsIDEpOwotICAqdl9idWYrKyA9IFJHQlRvVihzdW1fciwgc3VtX2csIHN1bV9iLCAxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIENvbnZlcnRSR0JUb1lVVl9WMUgyKGNvbnN0IHVpbnQ4X3QqIHJnYl9idWYsIHVpbnQ4X3QqIHlfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHVfYnVmLCB1aW50OF90KiB2X2J1ZikgewotICBpbnQgc3VtX2IgPSAwOwotICBpbnQgc3VtX2cgPSAwOwotICBpbnQgc3VtX3IgPSAwOwotICBpbnQgciwgZywgYjsKLQotICBDT05WRVJUX1kocmdiX2J1ZiwgeV9idWYpOwotICBDT05WRVJUX1kocmdiX2J1ZiwgeV9idWYpOwotICAqdV9idWYrKyA9IFJHQlRvVShzdW1fciwgc3VtX2csIHN1bV9iLCAxKTsKLSAgKnZfYnVmKysgPSBSR0JUb1Yoc3VtX3IsIHN1bV9nLCBzdW1fYiwgMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBDb252ZXJ0UkdCVG9ZVVZfVjFIMShjb25zdCB1aW50OF90KiByZ2JfYnVmLCB1aW50OF90KiB5X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1X2J1ZiwgdWludDhfdCogdl9idWYpIHsKLSAgaW50IHN1bV9iID0gMDsKLSAgaW50IHN1bV9nID0gMDsKLSAgaW50IHN1bV9yID0gMDsKLSAgaW50IHIsIGcsIGI7Ci0KLSAgQ09OVkVSVF9ZKHJnYl9idWYsIHlfYnVmKTsKLSAgKnVfYnVmKysgPSBSR0JUb1UociwgZywgYiwgMCk7Ci0gICp2X2J1ZisrID0gUkdCVG9WKHIsIGcsIGIsIDApOwotfQotCi1zdGF0aWMgdm9pZCBDb252ZXJ0UkdCMzJUb1lVVlJvd19TU0UyKGNvbnN0IHVpbnQ4X3QqIHJnYl9idWZfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcmdiX2J1Zl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB5X2J1Zl8xLCB1aW50OF90KiB5X2J1Zl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1X2J1ZiwgdWludDhfdCogdl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCkgewotICB3aGlsZSAod2lkdGggPj0gNCkgewotICAgIC8vIE5hbWUgZm9yIHRoZSBZIHBpeGVsczoKLSAgICAvLyBSb3cgMTogYSBiIGMgZAotICAgIC8vIFJvdyAyOiBlIGYgZyBoCi0gICAgLy8KLSAgICAvLyBGaXJzdCByb3cgNCBwaXhlbHMuCi0gICAgX19tMTI4aSByZ2Jfcm93XzEgPQotICAgICAgICBfbW1fbG9hZHVfc2kxMjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4ocmdiX2J1Zl8xKSk7Ci0gICAgX19tMTI4aSB6ZXJvXzEgPSBfbW1feG9yX3NpMTI4KHJnYl9yb3dfMSwgcmdiX3Jvd18xKTsKLQotICAgIF9fbTEyOGkgeV90YWJsZSA9IF9tbV9sb2FkX3NpMTI4KAotICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPihDb252ZXJ0UkdCQVRvWVVWX2tUYWJsZSkpOwotCi0gICAgX19tMTI4aSByZ2JfYV9iID0gX21tX3VucGFja2hpX2VwaTgocmdiX3Jvd18xLCB6ZXJvXzEpOwotICAgIHJnYl9hX2IgPSBfbW1fbWFkZF9lcGkxNihyZ2JfYV9iLCB5X3RhYmxlKTsKLQotICAgIF9fbTEyOGkgcmdiX2NfZCA9IF9tbV91bnBhY2tsb19lcGk4KHJnYl9yb3dfMSwgemVyb18xKTsKLSAgICByZ2JfY19kID0gX21tX21hZGRfZXBpMTYocmdiX2NfZCwgeV90YWJsZSk7Ci0KLSAgICAvLyBEbyBhIGNyYXpoIHNodWZmbGUgc28gdGhhdCB3ZSBnZXQ6Ci0gICAgLy8gIHYtLS0tLS0tLS0tLS0gTXVsdGlwbHkgQWRkCi0gICAgLy8gQkc6IGEgYiBjIGQKLSAgICAvLyBBMDogYSBiIGMgZAotICAgIF9fbTEyOGkgYmdfYWJjZCA9IF9tbV9jYXN0cHNfc2kxMjgoCi0gICAgICAgIF9tbV9zaHVmZmxlX3BzKF9tbV9jYXN0c2kxMjhfcHMocmdiX2NfZCksIF9tbV9jYXN0c2kxMjhfcHMocmdiX2FfYiksCi0gICAgICAgICAgICAgICAgICAgICAgICgzIDw8IDYpIHwgKDEgPDwgNCkgfCAoMyA8PCAyKSB8IDEpKTsKLSAgICBfX20xMjhpIHJfYWJjZCA9IF9tbV9jYXN0cHNfc2kxMjgoX21tX3NodWZmbGVfcHMoX21tX2Nhc3RzaTEyOF9wcyhyZ2JfY19kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX2Nhc3RzaTEyOF9wcyhyZ2JfYV9iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIgPDwgNikgfCAoMiA8PCAyKSkpOwotICAgIF9fbTEyOGkgeV9hYmNkID0gX21tX2FkZF9lcGkzMihiZ19hYmNkLCByX2FiY2QpOwotCi0gICAgLy8gRG93biBzaGlmdCBiYWNrIHRvIDhiaXRzIHJhbmdlLgotICAgIF9fbTEyOGkgeV9vZmZzZXQgPQotICAgICAgICBfbW1fbG9hZF9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPihrWU9mZnNldCkpOwotICAgIHlfYWJjZCA9IF9tbV9zcmFpX2VwaTMyKHlfYWJjZCwgRklYX1NISUZUKTsKLSAgICB5X2FiY2QgPSBfbW1fYWRkX2VwaTMyKHlfYWJjZCwgeV9vZmZzZXQpOwotICAgIHlfYWJjZCA9IF9tbV9wYWNrc19lcGkzMih5X2FiY2QsIHlfYWJjZCk7Ci0gICAgeV9hYmNkID0gX21tX3BhY2t1c19lcGkxNih5X2FiY2QsIHlfYWJjZCk7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPih5X2J1Zl8xKSA9IF9tbV9jdnRzaTEyOF9zaTMyKHlfYWJjZCk7Ci0gICAgeV9idWZfMSArPSA0OwotCi0gICAgLy8gU2Vjb25kIHJvdyA0IHBpeGVscy4KLSAgICBfX20xMjhpIHJnYl9yb3dfMiA9Ci0gICAgICAgIF9tbV9sb2FkdV9zaTEyOChyZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPihyZ2JfYnVmXzIpKTsKLSAgICBfX20xMjhpIHplcm9fMiA9IF9tbV94b3Jfc2kxMjgocmdiX3Jvd18yLCByZ2Jfcm93XzIpOwotICAgIF9fbTEyOGkgcmdiX2VfZiA9IF9tbV91bnBhY2toaV9lcGk4KHJnYl9yb3dfMiwgemVyb18yKTsKLSAgICBfX20xMjhpIHJnYl9nX2ggPSBfbW1fdW5wYWNrbG9fZXBpOChyZ2Jfcm93XzIsIHplcm9fMik7Ci0KLSAgICAvLyBBZGQgdHdvIHJvd3MgdG9nZXRoZXIuCi0gICAgX19tMTI4aSByZ2JfYWVfYmYgPQotICAgICAgICBfbW1fYWRkX2VwaTE2KF9tbV91bnBhY2toaV9lcGk4KHJnYl9yb3dfMSwgemVyb18yKSwgcmdiX2VfZik7Ci0gICAgX19tMTI4aSByZ2JfY2dfZGggPQotICAgICAgICBfbW1fYWRkX2VwaTE2KF9tbV91bnBhY2tsb19lcGk4KHJnYl9yb3dfMSwgemVyb18yKSwgcmdiX2dfaCk7Ci0KLSAgICAvLyBNdWx0aXBseSBhZGQgbGlrZSB0aGUgcHJldmlvdXMgcm93LgotICAgIHJnYl9lX2YgPSBfbW1fbWFkZF9lcGkxNihyZ2JfZV9mLCB5X3RhYmxlKTsKLSAgICByZ2JfZ19oID0gX21tX21hZGRfZXBpMTYocmdiX2dfaCwgeV90YWJsZSk7Ci0KLSAgICBfX20xMjhpIGJnX2VmZ2ggPSBfbW1fY2FzdHBzX3NpMTI4KAotICAgICAgICBfbW1fc2h1ZmZsZV9wcyhfbW1fY2FzdHNpMTI4X3BzKHJnYl9nX2gpLCBfbW1fY2FzdHNpMTI4X3BzKHJnYl9lX2YpLAotICAgICAgICAgICAgICAgICAgICAgICAoMyA8PCA2KSB8ICgxIDw8IDQpIHwgKDMgPDwgMikgfCAxKSk7Ci0gICAgX19tMTI4aSByX2VmZ2ggPSBfbW1fY2FzdHBzX3NpMTI4KF9tbV9zaHVmZmxlX3BzKF9tbV9jYXN0c2kxMjhfcHMocmdiX2dfaCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tbV9jYXN0c2kxMjhfcHMocmdiX2VfZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyIDw8IDYpIHwgKDIgPDwgMikpKTsKLSAgICBfX20xMjhpIHlfZWZnaCA9IF9tbV9hZGRfZXBpMzIoYmdfZWZnaCwgcl9lZmdoKTsKLSAgICB5X2VmZ2ggPSBfbW1fc3JhaV9lcGkzMih5X2VmZ2gsIEZJWF9TSElGVCk7Ci0gICAgeV9lZmdoID0gX21tX2FkZF9lcGkzMih5X2VmZ2gsIHlfb2Zmc2V0KTsKLSAgICB5X2VmZ2ggPSBfbW1fcGFja3NfZXBpMzIoeV9lZmdoLCB5X2VmZ2gpOwotICAgIHlfZWZnaCA9IF9tbV9wYWNrdXNfZXBpMTYoeV9lZmdoLCB5X2VmZ2gpOwotICAgICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oeV9idWZfMikgPSBfbW1fY3Z0c2kxMjhfc2kzMih5X2VmZ2gpOwotICAgIHlfYnVmXzIgKz0gNDsKLQotICAgIF9fbTEyOGkgcmdiX2FlX2NnID0gX21tX2Nhc3Rwc19zaTEyOCgKLSAgICAgICAgX21tX3NodWZmbGVfcHMoX21tX2Nhc3RzaTEyOF9wcyhyZ2JfY2dfZGgpLCBfbW1fY2FzdHNpMTI4X3BzKHJnYl9hZV9iZiksCi0gICAgICAgICAgICAgICAgICAgICAgICgzIDw8IDYpIHwgKDIgPDwgNCkgfCAoMyA8PCAyKSB8IDIpKTsKLSAgICBfX20xMjhpIHJnYl9iZl9kaCA9IF9tbV9jYXN0cHNfc2kxMjgoCi0gICAgICAgIF9tbV9zaHVmZmxlX3BzKF9tbV9jYXN0c2kxMjhfcHMocmdiX2NnX2RoKSwgX21tX2Nhc3RzaTEyOF9wcyhyZ2JfYWVfYmYpLAotICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KSB8ICgxIDw8IDIpKSk7Ci0KLSAgICAvLyBUaGlzIGlzIGEgMngyIHN1YnNhbXBsaW5nIGZvciAyIHBpeGVscy4KLSAgICBfX20xMjhpIHJnYl9hYmVmX2NkZ2ggPSBfbW1fYWRkX2VwaTE2KHJnYl9hZV9jZywgcmdiX2JmX2RoKTsKLQotICAgIC8vIERvIGEgbXVsdGlwbHkgYWRkIHdpdGggVSB0YWJsZS4KLSAgICBfX20xMjhpIHVfYV9iID0gX21tX21hZGRfZXBpMTYoCi0gICAgICAgIHJnYl9hYmVmX2NkZ2gsIF9tbV9sb2FkX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydFJHQkFUb1lVVl9rVGFibGUgKyA4KSkpOwotICAgIHVfYV9iID0gX21tX2FkZF9lcGkzMihfbW1fc2h1ZmZsZV9lcGkzMih1X2FfYiwgKCgzIDw8IDIpIHwgMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fc2h1ZmZsZV9lcGkzMih1X2FfYiwgKDIgPDwgMikpKTsKLSAgICAvLyBSaWdodCBzaGlmdCAxNCBiZWNhdXNlIG9mIDEyIGZyb20gZml4ZWQgcG9pbnQgYW5kIDIgZnJvbSBzdWJzYW1wbGluZy4KLSAgICB1X2FfYiA9IF9tbV9zcmFpX2VwaTMyKHVfYV9iLCBGSVhfU0hJRlQgKyAyKTsKLSAgICBfX20xMjhpIHV2X29mZnNldCA9IF9tbV9zbGxpX2VwaTMyKHlfb2Zmc2V0LCAzKTsKLSAgICB1X2FfYiA9IF9tbV9hZGRfZXBpMzIodV9hX2IsIHV2X29mZnNldCk7Ci0gICAgdV9hX2IgPSBfbW1fcGFja3NfZXBpMzIodV9hX2IsIHVfYV9iKTsKLSAgICB1X2FfYiA9IF9tbV9wYWNrdXNfZXBpMTYodV9hX2IsIHVfYV9iKTsKLSAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KHVfYnVmKSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQxNl90PihfbW1fZXh0cmFjdF9lcGkxNih1X2FfYiwgMCkpOwotICAgIHVfYnVmICs9IDI7Ci0KLSAgICBfX20xMjhpIHZfYV9iID0gX21tX21hZGRfZXBpMTYoCi0gICAgICAgIHJnYl9hYmVmX2NkZ2gsIF9tbV9sb2FkX3NpMTI4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgX19tMTI4aSo+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydFJHQkFUb1lVVl9rVGFibGUgKyAxNikpKTsKLSAgICB2X2FfYiA9IF9tbV9hZGRfZXBpMzIoX21tX3NodWZmbGVfZXBpMzIodl9hX2IsICgoMyA8PCAyKSB8IDEpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX21tX3NodWZmbGVfZXBpMzIodl9hX2IsICgyIDw8IDIpKSk7Ci0gICAgdl9hX2IgPSBfbW1fc3JhaV9lcGkzMih2X2FfYiwgRklYX1NISUZUICsgMik7Ci0gICAgdl9hX2IgPSBfbW1fYWRkX2VwaTMyKHZfYV9iLCB1dl9vZmZzZXQpOwotICAgIHZfYV9iID0gX21tX3BhY2tzX2VwaTMyKHZfYV9iLCB2X2FfYik7Ci0gICAgdl9hX2IgPSBfbW1fcGFja3VzX2VwaTE2KHZfYV9iLCB2X2FfYik7Ci0gICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPih2X2J1ZikgPQotICAgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oX21tX2V4dHJhY3RfZXBpMTYodl9hX2IsIDApKTsKLSAgICB2X2J1ZiArPSAyOwotCi0gICAgcmdiX2J1Zl8xICs9IDE2OwotICAgIHJnYl9idWZfMiArPSAxNjsKLQotICAgIC8vIE1vdmUgZm9yd2FyZCBieSA0IHBpeGVscy4KLSAgICB3aWR0aCAtPSA0OwotICB9Ci0KLSAgLy8gSnVzdCB1c2UgQyBjb2RlIHRvIGNvbnZlcnQgdGhlIHJlbWFpbmluZyBwaXhlbHMuCi0gIGlmICh3aWR0aCA+PSAyKSB7Ci0gICAgQ29udmVydFJHQlRvWVVWX1YySDIocmdiX2J1Zl8xLCByZ2JfYnVmXzIsIHlfYnVmXzEsIHlfYnVmXzIsIHVfYnVmLCB2X2J1Zik7Ci0gICAgcmdiX2J1Zl8xICs9IDg7Ci0gICAgcmdiX2J1Zl8yICs9IDg7Ci0gICAgeV9idWZfMSArPSAyOwotICAgIHlfYnVmXzIgKz0gMjsKLSAgICArK3VfYnVmOwotICAgICsrdl9idWY7Ci0gICAgd2lkdGggLT0gMjsKLSAgfQotCi0gIGlmICh3aWR0aCkKLSAgICBDb252ZXJ0UkdCVG9ZVVZfVjJIMShyZ2JfYnVmXzEsIHJnYl9idWZfMiwgeV9idWZfMSwgeV9idWZfMiwgdV9idWYsIHZfYnVmKTsKLX0KLQotZXh0ZXJuIHZvaWQgQ29udmVydFJHQjMyVG9ZVVZfU1NFMihjb25zdCB1aW50OF90KiByZ2JmcmFtZSwgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLCBpbnQgeXN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlKSB7Ci0gIHdoaWxlIChoZWlnaHQgPj0gMikgewotICAgIENvbnZlcnRSR0IzMlRvWVVWUm93X1NTRTIocmdiZnJhbWUsIHJnYmZyYW1lICsgcmdic3RyaWRlLCB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5cGxhbmUgKyB5c3RyaWRlLCB1cGxhbmUsIHZwbGFuZSwgd2lkdGgpOwotICAgIHJnYmZyYW1lICs9IDIgKiByZ2JzdHJpZGU7Ci0gICAgeXBsYW5lICs9IDIgKiB5c3RyaWRlOwotICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB2cGxhbmUgKz0gdXZzdHJpZGU7Ci0gICAgaGVpZ2h0IC09IDI7Ci0gIH0KLQotICBpZiAoIWhlaWdodCkgcmV0dXJuOwotCi0gIC8vIEhhbmRsZSB0aGUgbGFzdCByb3cuCi0gIHdoaWxlICh3aWR0aCA+PSAyKSB7Ci0gICAgQ29udmVydFJHQlRvWVVWX1YxSDIocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUpOwotICAgIHJnYmZyYW1lICs9IDg7Ci0gICAgeXBsYW5lICs9IDI7Ci0gICAgKyt1cGxhbmU7Ci0gICAgKyt2cGxhbmU7Ci0gICAgd2lkdGggLT0gMjsKLSAgfQotCi0gIGlmICh3aWR0aCkgQ29udmVydFJHQlRvWVVWX1YxSDEocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUpOwotfQotCi12b2lkIENvbnZlcnRSR0IzMlRvWVVWX1NTRTJfUmVmZXJlbmNlKGNvbnN0IHVpbnQ4X3QqIHJnYmZyYW1lLCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHVwbGFuZSwgdWludDhfdCogdnBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5c3RyaWRlLCBpbnQgdXZzdHJpZGUpIHsKLSAgd2hpbGUgKGhlaWdodCA+PSAyKSB7Ci0gICAgaW50IGkgPSAwOwotCi0gICAgLy8gQ29udmVydCBhIDJ4MiBibG9jay4KLSAgICB3aGlsZSAoaSArIDIgPD0gd2lkdGgpIHsKLSAgICAgIENvbnZlcnRSR0JUb1lVVl9WMkgyKHJnYmZyYW1lICsgaSAqIDQsIHJnYmZyYW1lICsgcmdic3RyaWRlICsgaSAqIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5cGxhbmUgKyBpLCB5cGxhbmUgKyB5c3RyaWRlICsgaSwgdXBsYW5lICsgaSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2cGxhbmUgKyBpIC8gMik7Ci0gICAgICBpICs9IDI7Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0aGUgbGFzdCBwaXhlbCBvZiB0d28gcm93cy4KLSAgICBpZiAoaSA8IHdpZHRoKSB7Ci0gICAgICBDb252ZXJ0UkdCVG9ZVVZfVjJIMShyZ2JmcmFtZSArIGkgKiA0LCByZ2JmcmFtZSArIHJnYnN0cmlkZSArIGkgKiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeXBsYW5lICsgaSwgeXBsYW5lICsgeXN0cmlkZSArIGksIHVwbGFuZSArIGkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdnBsYW5lICsgaSAvIDIpOwotICAgIH0KLQotICAgIHJnYmZyYW1lICs9IDIgKiByZ2JzdHJpZGU7Ci0gICAgeXBsYW5lICs9IDIgKiB5c3RyaWRlOwotICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB2cGxhbmUgKz0gdXZzdHJpZGU7Ci0gICAgaGVpZ2h0IC09IDI7Ci0gIH0KLQotICBpZiAoIWhlaWdodCkgcmV0dXJuOwotCi0gIC8vIEhhbmRsZSB0aGUgbGFzdCByb3cuCi0gIHdoaWxlICh3aWR0aCA+PSAyKSB7Ci0gICAgQ29udmVydFJHQlRvWVVWX1YxSDIocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUpOwotICAgIHJnYmZyYW1lICs9IDg7Ci0gICAgeXBsYW5lICs9IDI7Ci0gICAgKyt1cGxhbmU7Ci0gICAgKyt2cGxhbmU7Ci0gICAgd2lkdGggLT0gMjsKLSAgfQotCi0gIC8vIEhhbmRsZSB0aGUgbGFzdCBwaXhlbCBpbiB0aGUgbGFzdCByb3cuCi0gIGlmICh3aWR0aCkgQ29udmVydFJHQlRvWVVWX1YxSDEocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmFzbSBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmFzbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4NmZmMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5hc20KKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgIm1lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtIgotJWluY2x1ZGUgInRoaXJkX3BhcnR5L3g4NmluYy94ODZpbmMuYXNtIgotCi07Ci07IFRoaXMgZmlsZSB1c2VzIFNTRSwgU1NFMiwgU1NFMywgYW5kIFNTU0UzLCB3aGljaCBhcmUgc3VwcG9ydGVkIGJ5IGFsbCBBVE9NCi07IHByb2Nlc3NvcnMuCi07Ci0gIFNFQ1RJT05fVEVYVAotICBDUFUgICAgICAgU1NFLCBTU0UzLCBTU0UzLCBTU1NFMwotCi07Ci07IFhNTSByZWdpc3RlcnMgcmVwcmVzZW50aW5nIGNvbnN0YW50cy4gV2UgbXVzdCBub3QgdXNlIHRoZXNlIHJlZ2lzdGVycyBhcwotOyBkZXN0aW5hdGlvbiBvcGVyYW5kcy4KLTsgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Ci07ICAgeG1tNy5iW2ldID0gMjU7ICB4bW03LmJbaSsxXSA9IDI7ICAgeG1tNy5iW2krMl0gPSA2NjsgIHhtbTcuYltpKzNdID0gMDsKLTsgICB4bW02LmJbaV0gPSAwOyAgIHhtbTYuYltpKzFdID0gMTI3OyB4bW02LmJbaSsyXSA9IDA7ICAgeG1tNi5iW2krM10gPSAwOwotOyAgIHhtbTUuYltpXSA9IDExMjsgeG1tNS5iW2krMV0gPSAtNzQ7IHhtbTUuYltpKzJdID0gLTM4OyB4bW01LmJbaSszXSA9IDA7Ci07ICAgeG1tNC5iW2ldID0gLTE4OyB4bW00LmJbaSsxXSA9IC05NDsgeG1tNC5iW2krMl0gPSAxMTI7IHhtbTQuYltpKzNdID0gMDsKLTsgfQotOwotJWRlZmluZSBYTU1fQ09OU1RfWTAgICAgeG1tNwotJWRlZmluZSBYTU1fQ09OU1RfWTEgICAgeG1tNgotJWRlZmluZSBYTU1fQ09OU1RfVSAgICAgeG1tNQotJWRlZmluZSBYTU1fQ09OU1RfViAgICAgeG1tNAotJWRlZmluZSBYTU1fQ09OU1RfMTI4ICAgeG1tMwotCi07Ci07IExPQURfWE1NICUxICh4bW0pLCAlMiAoaW1tMzIpCi07IExvYWRzIGFuIGltbWVkaWF0ZSB2YWx1ZSB0byBhbiBYTU0gcmVnaXN0ZXIuCi07ICAgJTEuZFswXSA9ICUxLmRbMV0gPSAgJTEuZFsyXSA9ICAlMS5kWzNdID0gJTI7Ci07Ci0lbWFjcm8gTE9BRF9YTU0gMgotICBtb3YgICAgICAgVEVNUGQsICUyCi0gIG1vdmQgICAgICAlMSwgVEVNUGQKLSAgcHNodWZkICAgICUxLCAlMSwgMDAwMDAwMDBCCi0lZW5kbWFjcm8KLQotOwotOyBVTlBBQ0tSR0IgJTEgKHhtbSksICUyIChpbW04KQotOyBVbnBhY2tzIG9uZSBSR0IgcGl4ZWwgaW4gdGhlIHNwZWNpZmllZCBYTU0gcmVnaXN0ZXIuCi07ICAgZm9yIChpbnQgaSA9IDE1OyBpID4gJTI7IC0taSkgJTEuYltpXSA9ICUxLmJbaSAtIDFdOwotOyAgICUxLmJbJTJdID0gMDsKLTsgICBmb3IgKGludCBpID0gJTIgLSAxOyBpID49IDA7IC0taSkgJTEuYltpXSA9ICUxLmJbaV07Ci07Ci0lbWFjcm8gVU5QQUNLUkdCIDIKLSAgbW92ZHFhICAgIHhtbTEsICUxCi0gIHBzcmxkcSAgICB4bW0xLCAlMgotICBwc2xsZHEgICAgeG1tMSwgJTIKLSAgcHhvciAgICAgICUxLCB4bW0xCi0gIHBzbGxkcSAgICB4bW0xLCAxCi0gIHBvciAgICAgICAlMSwgeG1tMQotJWVuZG1hY3JvCi0KLTsKLTsgUkVBRF9BUkdCICUxICh4bW0pLCAlMiAoaW1tKQotOyBSZWFkIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIEFSR0IgKG9yIFJHQikgcGl4ZWxzIGZyb20gdGhlIHNvdXJjZSBhbmQgc3RvcmUKLTsgdGhlbSB0byB0aGUgZGVzdGluYXRpb24geG1tIHJlZ2lzdGVyLiBJZiB0aGUgaW5wdXQgZm9ybWF0IGlzIFJHQiwgd2UgcmVhZCBSR0IKLTsgcGl4ZWxzIGFuZCBjb252ZXJ0IHRoZW0gdG8gQVJHQiBwaXhlbHMuIChGb3IgdGhpcyBjYXNlLCB0aGUgYWxwaGEgdmFsdWVzIG9mCi07IHRoZSBvdXRwdXQgcGl4ZWxzIGJlY29tZSAwLikKLTsKLSVtYWNybyBSRUFEX0FSR0IgMgotCi0laWYgUElYRUxTSVpFID09IDQKLQotICA7IFJlYWQgQVJHQiBwaXhlbHMgZnJvbSB0aGUgc291cmNlLiAoVGhpcyBtYWNybyBhc3N1bWVzIHRoZSBpbnB1dCBidWZmZXIgbWF5Ci0gIDsgbm90IGJlIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5LikKLSVpZiAlMiA9PSAxCi0gIG1vdmQgICAgICAlMSwgRFdPUkQgW0FSR0JxICsgV0lEVEhxICogNCAqIDJdCi0lZWxpZiAlMiA9PSAyCi0gIG1vdnEgICAgICAlMSwgUVdPUkQgW0FSR0JxICsgV0lEVEhxICogNCAqIDJdCi0lZWxpZiAlMiA9PSA0Ci0gIG1vdmRxdSAgICAlMSwgRFFXT1JEIFtBUkdCcSArIFdJRFRIcSAqIDQgKiAyXQotJWVsc2UKLSVlcnJvciB1bnN1cHBvcnRlZCBudW1iZXIgb2YgcGl4ZWxzLgotJWVuZGlmCi0KLSVlbGlmIFBJWEVMU0laRSA9PSAzCi0KLSAgOyBSZWFkIFJHQiBwaXhlbHMgZnJvbSB0aGUgc291cmNlIGFuZCBjb252ZXJ0IHRoZW0gdG8gQVJHQiBwaXhlbHMuCi0laWYgJTIgPT0gMQotICA7IFJlYWQgb25lIFJHQiBwaXhlbCBhbmQgY29udmVydCBpdCB0byBvbmUgQVJHQiBwaXhlbC4KLSAgOyBTYXZlIHRoZSBXSURUSCByZWdpc3RlciB0byB4bW0xLiAoVGhpcyBtYWNybyBuZWVkcyB0byBicmVhayBpdC4pCi0gIE1PVnEgICAgICB4bW0xLCBXSURUSHEKLQotICA7IE9uY2UgcmVhZCB0aHJlZSBieXRlcyBmcm9tIHRoZSBzb3VyY2UgdG8gVEVNUGQsIGFuZCBjb3B5IGl0IHRvIHRoZQotICA7IGRlc3RpbmF0aW9uIHhtbSByZWdpc3Rlci4KLSAgbGVhICAgICAgIFdJRFRIcSwgW1dJRFRIcSArIFdJRFRIcSAqIDJdCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbQVJHQnEgKyBXSURUSHEgKiAyICsgMl0KLSAgc2hsICAgICAgIFRFTVBkLCAxNgotICBtb3YgICAgICAgVEVNUHcsIFdPUkQgW0FSR0JxICsgV0lEVEhxICogMl0KLSAgbW92ZCAgICAgICUxLCBURU1QZAotCi0gIDsgUmVzdG9yZSB0aGUgV0lEVEggcmVnaXN0ZXIuCi0gIE1PVnEgICAgICBXSURUSHEsIHhtbTEKLSVlbGlmICUyID09IDIKLSAgOyBSZWFkIHR3byBSR0IgcGl4ZWxzIGFuZCBjb252ZXJ0IHRoZW0gdG8gdHdvIEFSR0IgcGl4ZWxzLgotICA7IFJlYWQgc2l4IGJ5dGVzIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24geG1tIHJlZ2lzdGVyLgotICBtb3YgICAgICAgVEVNUHEsIFdJRFRIcQotICBsZWEgICAgICAgVEVNUHEsIFtURU1QcSArIFRFTVBxICogMl0KLSAgbW92ZCAgICAgICUxLCBEV09SRCBbQVJHQnEgKyBURU1QcSAqIDJdCi0gIHBpbnNydyAgICAlMSwgV09SRCBbQVJHQnEgKyBURU1QcSAqIDIgKyA0XSwgMwotCi0gIDsgRmlsbCB0aGUgYWxwaGEgdmFsdWVzIG9mIHRoZXNlIFJHQiBwaXhlbHMgd2l0aCAwIGFuZCBjb252ZXJ0IHRoZW0gdG8gdHdvCi0gIDsgQVJHQiBwaXhlbHMuCi0gIFVOUEFDS1JHQiAlMSwgMwotJWVsaWYgJTIgPT0gNAotICA7IFJlYWQgZm91ciBSR0IgcGl4ZWxzIGFuZCBjb252ZXJ0IHRoZW0gdG8gZm91ciBBUkdCIHBpeGVscy4KLSAgOyBSZWFkIHR3ZWx2ZSBieXRlcyBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uIHhtbSByZWdpc3Rlci4KLSAgbW92ICAgICAgIFRFTVBxLCBXSURUSHEKLSAgbGVhICAgICAgIFRFTVBxLCBbVEVNUHEgKyBURU1QcSAqIDJdCi0gIG1vdnEgICAgICAlMSwgUVdPUkQgW0FSR0JxICsgVEVNUHEgKiAyXQotICBtb3ZkICAgICAgeG1tMSwgRFdPUkQgW0FSR0JxICsgVEVNUHEgKiAyICsgOF0KLSAgc2h1ZnBzICAgICUxLCB4bW0xLCAwMTAwMDEwMEIKLQotICA7IEZpbGwgdGhlIGFscGhhIHZhbHVlcyBvZiB0aGVzZSBSR0IgcGl4ZWxzIHdpdGggMCBhbmQgY29udmVydCB0aGVtIHRvIGZvdXIKLSAgOyBBUkdCIHBpeGVscy4KLSAgVU5QQUNLUkdCICUxLCAzCi0gIFVOUEFDS1JHQiAlMSwgNCArIDMKLSAgVU5QQUNLUkdCICUxLCA0ICsgNCArIDMKLSVlbHNlCi0lZXJyb3IgdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHBpeGVscy4KLSVlbmRpZgotCi0lZWxzZQotJWVycm9yIHVuc3VwcG9ydGVkIFBJWEVMU0laRSB2YWx1ZS4KLSVlbmRpZgotCi0lZW5kbWFjcm8KLQotOwotOyBDQUxDX1kgJTEgKHhtbSksICUyICh4bW0pCi07IENhbGN1bGF0ZXMgZm91ciBZIHZhbHVlcyBmcm9tIGZvdXIgQVJHQiBwaXhlbHMgc3RvcmVkIGluICUyLgotOyAgICUxLmJbMF0gPSBUb0J5dGUoKDI1ICogQigwKSArIDEyOSAqIEcoMCkgKyA2NiAqIFIoMCkgKyAxMjgpIC8gMjU2ICsgMTYpOwotOyAgICUxLmJbMV0gPSBUb0J5dGUoKDI1ICogQigxKSArIDEyOSAqIEcoMSkgKyA2NiAqIFIoMSkgKyAxMjgpIC8gMjU2ICsgMTYpOwotOyAgICUxLmJbMl0gPSBUb0J5dGUoKDI1ICogQigyKSArIDEyOSAqIEcoMikgKyA2NiAqIFIoMikgKyAxMjgpIC8gMjU2ICsgMTYpOwotOyAgICUxLmJbM10gPSBUb0J5dGUoKDI1ICogQigzKSArIDEyOSAqIEcoMykgKyA2NiAqIFIoMykgKyAxMjgpIC8gMjU2ICsgMTYpOwotOwotJW1hY3JvIENBTENfWSAyCi0gIDsgVG8gYXZvaWQgc2lnbmVkIHNhdHVyYXRpb24sIHdlIGRpdmlkZSB0aGlzIGNvbnZlcnNpb24gZm9ybXVsYSBpbnRvIHR3bwotICA7IGZvcm11bGFlIGFuZCBzdG9yZSB0aGVpciByZXN1bHRzIGludG8gdHdvIFhNTSByZWdpc3RlcnMgJTEgYW5kIHhtbTIuCi0gIDsgJTEud1swXSAgID0gMjUgICogJTIuYlswXSAgKyAyICAgKiAlMi5iWzFdICArIDY2ICAqICUyLmJbMl0gICsgMCAqICUyLmJbM107Ci0gIDsgJTEud1sxXSAgID0gMjUgICogJTIuYls0XSAgKyAyICAgKiAlMi5iWzVdICArIDY2ICAqICUyLmJbNl0gICsgMCAqICUyLmJbN107Ci0gIDsgJTEud1syXSAgID0gMjUgICogJTIuYls4XSAgKyAyICAgKiAlMi5iWzldICArIDY2ICAqICUyLmJbMTBdICsgMCAqICUyLmJbMTFdOwotICA7ICUxLndbM10gICA9IDI1ICAqICUyLmJbMTJdICsgMiAgICogJTIuYlsxM10gKyA2NiAgKiAlMi5iWzE0XSArIDAgKiAlMi5iWzE1XTsKLSAgOyB4bW0yLndbMF0gPSAwICAgKiAlMi5iWzBdICArIDEyNyAqICUyLmJbMV0gICsgMCAgICogJTIuYlsyXSAgKyAwICogJTIuYlszXTsKLSAgOyB4bW0yLndbMV0gPSAwICAgKiAlMi5iWzRdICArIDEyNyAqICUyLmJbNV0gICsgMCAgICogJTIuYls2XSAgKyAwICogJTIuYls3XTsKLSAgOyB4bW0yLndbMl0gPSAwICAgKiAlMi5iWzhdICArIDEyNyAqICUyLmJbOV0gICsgMCAgICogJTIuYlsxMF0gKyAwICogJTIuYlsxMV07Ci0gIDsgeG1tMi53WzNdID0gMCAgICogJTIuYlsxMl0gKyAxMjcgKiAlMi5iWzEzXSArIDAgICAqICUyLmJbMTRdICsgMCAqICUyLmJbMTVdOwotICBtb3ZkcWEgICAgJTEsICUyCi0gIHBtYWRkdWJzdyAlMSwgWE1NX0NPTlNUX1kwCi0gIHBoYWRkc3cgICAlMSwgJTEKLSAgbW92ZHFhICAgIHhtbTIsICUyCi0gIHBtYWRkdWJzdyB4bW0yLCBYTU1fQ09OU1RfWTEKLSAgcGhhZGRzdyAgIHhtbTIsIHhtbTIKLQotICA7ICUxLmJbMF0gPSBUb0J5dGUoKCUxLndbMF0gKyB4bW0yLndbMF0gKyAxMjgpIC8gMjU2ICsgMTYpOwotICA7ICUxLmJbMV0gPSBUb0J5dGUoKCUxLndbMV0gKyB4bW0yLndbMV0gKyAxMjgpIC8gMjU2ICsgMTYpOwotICA7ICUxLmJbMl0gPSBUb0J5dGUoKCUxLndbMl0gKyB4bW0yLndbMl0gKyAxMjgpIC8gMjU2ICsgMTYpOwotICA7ICUxLmJbM10gPSBUb0J5dGUoKCUxLndbM10gKyB4bW0yLndbM10gKyAxMjgpIC8gMjU2ICsgMTYpOwotICBwYWRkdyAgICAgJTEsIHhtbTIKLSAgbW92ZHFhICAgIHhtbTIsIFhNTV9DT05TVF8xMjgKLSAgcGFkZHcgICAgICUxLCB4bW0yCi0gIHBzcmx3ICAgICAlMSwgOAotICBwc3JsdyAgICAgeG1tMiwgMwotICBwYWRkdyAgICAgJTEsIHhtbTIKLSAgcGFja3Vzd2IgICUxLCAlMQotJWVuZG1hY3JvCi0KLTsKLTsgSU5JVF9VViAlMSAocjMyKSwgJTIgKHJlZykgJTMgKGltbSkKLTsKLSVtYWNybyBJTklUX1VWIDMKLQotJWlmIFNVQlNBTVBMSU5HID09IDEgJiYgTElORSA9PSAxCi0laWYgJTMgPT0gMSB8fCAlMyA9PSAyCi0gIG1vdnp4ICAgICAlMSwgQllURSBbJTIgKyBXSURUSHFdCi0lZWxpZiAlMyA9PSA0Ci0gIG1vdnp4ICAgICAlMSwgV09SRCBbJTIgKyBXSURUSHFdCi0lZWxzZQotJWVycm9yIHVuc3VwcG9ydGVkIG51bWJlciBvZiBwaXhlbHMuCi0lZW5kaWYKLSVlbmRpZgotCi0lZW5kbWFjcm8KLQotOwotOyBDQUxDX1VWICUxICh4bW0pLCAlMiAoeG1tKSwgJTMgKHhtbSksICU0IChyMzIpCi07IENhbGN1bGF0ZXMgdHdvIFUgKG9yIFYpIHZhbHVlcyBmcm9tIGZvdXIgQVJHQiBwaXhlbHMgc3RvcmVkIGluICUyLgotOyBpZiAlMyA9PSBYTU1fQ09OU1RfVQotOyBpZiAoU1VCU0FNUExJTkcpIHsKLTsgICAlMS5iWzBdID0gVG9CeXRlKCgxMTIgKiBCKDApIC0gNzQgKiBHKDApIC0gMzggKiBSKDApICsgMTI4KSAvIDI1NiArIDEyOCk7Ci07ICAgJTEuYlswXSA9IFRvQnl0ZSgoMTEyICogQigwKSAtIDc0ICogRygwKSAtIDM4ICogUigwKSArIDEyOCkgLyAyNTYgKyAxMjgpOwotOyAgICUxLmJbMV0gPSBUb0J5dGUoKDExMiAqIEIoMikgLSA3NCAqIEcoMikgLSAzOCAqIFIoMikgKyAxMjgpIC8gMjU2ICsgMTI4KTsKLTsgICAlMS5iWzFdID0gVG9CeXRlKCgxMTIgKiBCKDIpIC0gNzQgKiBHKDIpIC0gMzggKiBSKDIpICsgMTI4KSAvIDI1NiArIDEyOCk7Ci07IH0gZWxzZSB7Ci07ICAgJTEuYlswXSA9IFRvQnl0ZSgoMTEyICogQigwKSAtIDc0ICogRygwKSAtIDM4ICogUigwKSArIDEyOCkgLyAyNTYgKyAxMjgpOwotOyAgICUxLmJbMV0gPSBUb0J5dGUoKDExMiAqIEIoMikgLSA3NCAqIEcoMikgLSAzOCAqIFIoMikgKyAxMjgpIC8gMjU2ICsgMTI4KTsKLTsgfQotOyBpZiAlMyA9PSBYTU1fQ09OU1RfVgotOyAgICUxLmJbMF0gPSBUb0J5dGUoKC0xOCAqIEIoMCkgLSA5NCAqIEcoMCkgKyAxMTIgKiBSKDApICsgMTI4KSAvIDI1NiArIDEyOCk7Ci07ICAgJTEuYlsxXSA9IFRvQnl0ZSgoLTE4ICogQigyKSAtIDk0ICogRygyKSArIDExMiAqIFIoMikgKyAxMjgpIC8gMjU2ICsgMTI4KTsKLTsKLSVtYWNybyBDQUxDX1VWIDQKLSAgOyBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICA7ICAgJTEud1tpXSA9IDA7Ci0gIDsgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikKLSAgOyAgICAgJTEud1tpXSArPSAlMy5iW2kgKiA0ICsgal0gKyAlMi5iW2kgKiA0ICsgal07Ci0gIDsgfQotICBtb3ZkcWEgICAgJTEsICUyCi0gIHBtYWRkdWJzdyAlMSwgJTMKLSAgcGhhZGRzdyAgICUxLCAlMQotCi0laWYgU1VCU0FNUExJTkcgPT0gMQotICA7ICUxLndbMF0gPSAoJTEud1swXSArICUxLndbMV0gKyAxKSAvIDI7Ci0gIDsgJTEud1sxXSA9ICglMS53WzFdICsgJTEud1swXSArIDEpIC8gMjsKLSAgOyAlMS53WzJdID0gKCUxLndbMl0gKyAlMS53WzNdICsgMSkgLyAyOwotICA7ICUxLndbM10gPSAoJTEud1szXSArICUxLndbMl0gKyAxKSAvIDI7Ci0gIHBzaHVmbHcgICB4bW0yLCAlMSwgMTAxMTAwMDFCCi0gIHBhdmd3ICAgICAlMSwgeG1tMgotJWVuZGlmCi0KLSAgOyAlMS5iWzBdID0gVG9CeXRlKCglMS53WzBdICsgMTI4KSAvIDI1NiArIDEyOCk7Ci0gIDsgJTEuYlsxXSA9IFRvQnl0ZSgoJTEud1syXSArIDEyOCkgLyAyNTYgKyAxMjgpOwotICBwc2h1Zmx3ICAgJTEsICUxLCAxMDAwMTAwMEIKLSAgcGFkZHcgICAgICUxLCBYTU1fQ09OU1RfMTI4Ci0gIHBzcmF3ICAgICAlMSwgOAotICBwYWRkdyAgICAgJTEsIFhNTV9DT05TVF8xMjgKLSAgcGFja3Vzd2IgICUxLCAlMQotCi0laWYgU1VCU0FNUExJTkcgPT0gMSAmJiBMSU5FID09IDEKLSAgOyAlMS5iWzBdID0gKCUxLmJbMF0gKyAlMy5iWzBdICsgMSkgLyAyOwotICA7ICUxLmJbMV0gPSAoJTEuYlsxXSArICUzLmJbMV0gKyAxKSAvIDI7Ci0gIG1vdmQgICAgICB4bW0yLCAlNAotICBwYXZnYiAgICAgJTEsIHhtbTIKLSVlbmRpZgotJWVuZG1hY3JvCi0KLTsKLTsgZXh0ZXJuICJDIiB2b2lkIENvbnZlcnRBUkdCVG9ZVVZSb3dfU1NTRTMoY29uc3QgdWludDhfdCogYXJnYiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogeSwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdSwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHdpZHRoKTsKLTsKLSVkZWZpbmUgU1lNQk9MICAgICAgICAgIENvbnZlcnRBUkdCVG9ZVVZSb3dfU1NTRTMKLSVkZWZpbmUgUElYRUxTSVpFICAgICAgIDQKLSVkZWZpbmUgU1VCU0FNUExJTkcgICAgIDAKLSVkZWZpbmUgTElORSAgICAgICAgICAgIDAKLSVpbmNsdWRlICJjb252ZXJ0X3JnYl90b195dXZfc3NzZTMuaW5jIgotCi07Ci07IGV4dGVybiAiQyIgdm9pZCBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMoY29uc3QgdWludDhfdCogcmdiLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHksCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdSwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB2LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCk7Ci07Ci0lZGVmaW5lIFNZTUJPTCAgICAgICAgICBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMKLSVkZWZpbmUgUElYRUxTSVpFICAgICAgIDMKLSVkZWZpbmUgU1VCU0FNUExJTkcgICAgIDAKLSVkZWZpbmUgTElORSAgICAgICAgICAgIDAKLSVpbmNsdWRlICJjb252ZXJ0X3JnYl90b195dXZfc3NzZTMuaW5jIgotCi07Ci07IGV4dGVybiAiQyIgdm9pZCBDb252ZXJ0QVJHQlRvWVVWRXZlbl9TU1NFMyhjb25zdCB1aW50OF90KiBhcmdiLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogeSwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHUsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB2LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHdpZHRoKTsKLTsKLSVkZWZpbmUgU1lNQk9MICAgICAgICAgIENvbnZlcnRBUkdCVG9ZVVZFdmVuX1NTU0UzCi0lZGVmaW5lIFBJWEVMU0laRSAgICAgICA0Ci0lZGVmaW5lIFNVQlNBTVBMSU5HICAgICAxCi0lZGVmaW5lIExJTkUgICAgICAgICAgICAwCi0laW5jbHVkZSAiY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmluYyIKLQotOwotOyBleHRlcm4gIkMiIHZvaWQgQ29udmVydEFSR0JUb1lVVk9kZF9TU1NFMyhjb25zdCB1aW50OF90KiBhcmdiLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB5LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB2LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgpOwotOwotJWRlZmluZSBTWU1CT0wgICAgICAgICAgQ29udmVydEFSR0JUb1lVVk9kZF9TU1NFMwotJWRlZmluZSBQSVhFTFNJWkUgICAgICAgNAotJWRlZmluZSBTVUJTQU1QTElORyAgICAgMQotJWRlZmluZSBMSU5FICAgICAgICAgICAgMQotJWluY2x1ZGUgImNvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5pbmMiCi0KLTsKLTsgZXh0ZXJuICJDIiB2b2lkIENvbnZlcnRSR0JUb1lVVkV2ZW5fU1NTRTMoY29uc3QgdWludDhfdCogcmdiLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB5LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB2LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgpOwotOwotJWRlZmluZSBTWU1CT0wgICAgICAgICAgQ29udmVydFJHQlRvWVVWRXZlbl9TU1NFMwotJWRlZmluZSBQSVhFTFNJWkUgICAgICAgMwotJWRlZmluZSBTVUJTQU1QTElORyAgICAgMQotJWRlZmluZSBMSU5FICAgICAgICAgICAgMAotJWluY2x1ZGUgImNvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5pbmMiCi0KLTsKLTsgZXh0ZXJuICJDIiB2b2lkIENvbnZlcnRSR0JUb1lVVk9kZF9TU1NFMyhjb25zdCB1aW50OF90KiByZ2IsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogeSwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1LAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHdpZHRoKTsKLTsKLSVkZWZpbmUgU1lNQk9MICAgICAgICAgIENvbnZlcnRSR0JUb1lVVk9kZF9TU1NFMwotJWRlZmluZSBQSVhFTFNJWkUgICAgICAgMwotJWRlZmluZSBTVUJTQU1QTElORyAgICAgMQotJWRlZmluZSBMSU5FICAgICAgICAgICAgMQotJWluY2x1ZGUgImNvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5pbmMiCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTAyNWE1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgiCi0KLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXZvaWQgQ29udmVydFJHQjMyVG9ZVVZfU1NTRTMoY29uc3QgdWludDhfdCogcmdiZnJhbWUsIHVpbnQ4X3QqIHlwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdXBsYW5lLCB1aW50OF90KiB2cGxhbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHJnYnN0cmlkZSwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1dnN0cmlkZSkgewotICBmb3IgKDsgaGVpZ2h0ID49IDI7IGhlaWdodCAtPSAyKSB7Ci0gICAgQ29udmVydEFSR0JUb1lVVlJvd19TU1NFMyhyZ2JmcmFtZSwgeXBsYW5lLCB1cGxhbmUsIHZwbGFuZSwgd2lkdGgpOwotICAgIHJnYmZyYW1lICs9IHJnYnN0cmlkZTsKLSAgICB5cGxhbmUgKz0geXN0cmlkZTsKLQotICAgIENvbnZlcnRBUkdCVG9ZVVZSb3dfU1NTRTMocmdiZnJhbWUsIHlwbGFuZSwgTlVMTCwgTlVMTCwgd2lkdGgpOwotICAgIHJnYmZyYW1lICs9IHJnYnN0cmlkZTsKLSAgICB5cGxhbmUgKz0geXN0cmlkZTsKLQotICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB2cGxhbmUgKz0gdXZzdHJpZGU7Ci0gIH0KLQotICBpZiAoaGVpZ2h0KQotICAgIENvbnZlcnRBUkdCVG9ZVVZSb3dfU1NTRTMocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUsIHdpZHRoKTsKLX0KLQotdm9pZCBDb252ZXJ0UkdCMjRUb1lVVl9TU1NFMyhjb25zdCB1aW50OF90KiByZ2JmcmFtZSwgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgcmdic3RyaWRlLCBpbnQgeXN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlKSB7Ci0gIGZvciAoOyBoZWlnaHQgPj0gMjsgaGVpZ2h0IC09IDIpIHsKLSAgICBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUsIHdpZHRoKTsKLSAgICByZ2JmcmFtZSArPSByZ2JzdHJpZGU7Ci0gICAgeXBsYW5lICs9IHlzdHJpZGU7Ci0KLSAgICBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMocmdiZnJhbWUsIHlwbGFuZSwgTlVMTCwgTlVMTCwgd2lkdGgpOwotICAgIHJnYmZyYW1lICs9IHJnYnN0cmlkZTsKLSAgICB5cGxhbmUgKz0geXN0cmlkZTsKLQotICAgIHVwbGFuZSArPSB1dnN0cmlkZTsKLSAgICB2cGxhbmUgKz0gdXZzdHJpZGU7Ci0gIH0KLQotICBpZiAoaGVpZ2h0KSBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMocmdiZnJhbWUsIHlwbGFuZSwgdXBsYW5lLCB2cGxhbmUsIHdpZHRoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfc3NzZTMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA1OTg2MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9TSU1EX0NPTlZFUlRfUkdCX1RPX1lVVl9TU1NFM19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9TSU1EX0NPTlZFUlRfUkdCX1RPX1lVVl9TU1NFM19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotLy8gVGhlIGhlYWRlciBmaWxlIGZvciBBU00gZnVuY3Rpb25zIHRoYXQgY29udmVydCBhIHJvdyBvZiBSR0IgcGl4ZWxzIHdpdGggU1NTRTMKLS8vIGluc3RydWN0aW9ucyBzbyB3ZSBjYW4gY2FsbCB0aGVtIGZyb20gQysrIGNvZGUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKLS8vIGltcGxlbWVudGVkIGluICJjb252ZXJ0X3JnYl90b195dXZfc3NzZTMuYXNtIi4KLQotLy8gV2UgdXNlIHB0cmRpZmZfdCBpbnN0ZWFkIG9mIGludCBmb3IgeWFzbSByb3V0aW5lIHBhcmFtZXRlcnMgdG8gcG9ydGFibHkKLS8vIHNpZ24tZXh0ZW5kIGludC4gT24gV2luNjQsIE1TVkMgZG9lcyBub3Qgc2lnbi1leHRlbmQgdGhlIHZhbHVlIGluIHRoZSBzdGFjawotLy8gaG9tZSBvZiBpbnQgZnVuY3Rpb24gcGFyYW1ldGVycywgYW5kIHlhc20gcm91dGluZXMgYXJlIHVuYXdhcmUgb2YgdGhpcyBsYWNrCi0vLyBvZiBleHRlbnNpb24gYW5kIGZhdWx0LiAgcHRyZGlmZl90IGlzIHBvcnRhYmx5IHNpZ24tZXh0ZW5kZWQgYW5kIGZpeGVzIHRoaXMKLS8vIGlzc3VlIG9uIGF0IGxlYXN0IFdpbjY0LgotCi0vLyBDb252ZXJ0IGEgcm93IG9mIDI0LWJpdCBSR0IgcGl4ZWxzIHRvIFlWMTIgcGl4ZWxzLgotdm9pZCBDb252ZXJ0UkdCVG9ZVVZSb3dfU1NTRTMoY29uc3QgdWludDhfdCogcmdiLCB1aW50OF90KiB5LCB1aW50OF90KiB1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdiwgcHRyZGlmZl90IHdpZHRoKTsKLQotLy8gQ29udmVydCBhIHJvdyBvZiAzMi1iaXQgUkdCIHBpeGVscyB0byBZVjEyIHBpeGVscy4KLXZvaWQgQ29udmVydEFSR0JUb1lVVlJvd19TU1NFMyhjb25zdCB1aW50OF90KiBhcmdiLCB1aW50OF90KiB5LCB1aW50OF90KiB1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHYsIHB0cmRpZmZfdCB3aWR0aCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfU0lNRF9DT05WRVJUX1JHQl9UT19ZVVZfU1NTRTNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmluYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxN2M2OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotOwotOyB2b2lkIFNZTUJPTChjb25zdCB1aW50OF90KiBhcmdiLCB1aW50OF90KiB5LCB1aW50OF90KiB1LCB1aW50OF90KiB2LCBpbnQgd2lkdGgpOwotOwotOyBUaGUgbWFpbiBjb2RlIHRoYXQgY29udmVydHMgUkdCIHBpeGVscyB0byBZVVYgcGl4ZWxzLiBUaGlzIGZ1bmN0aW9uIHJvdWdobHkKLTsgY29uc2lzdHMgb2YgdGhyZWUgcGFydHM6IGNvbnZlcnRpbmcgb25lIEFSR0IgcGl4ZWwgdG8gWVVWIHBpeGVscywgY29udmVydGluZwotOyB0d28gQVJHQiBwaXhlbHMgdG8gWVVWIHBpeGVscywgYW5kIGNvbnZlcnRpbmcgZm91ciBBUkdCIHBpeGVscyB0byBZVVYgcGl4ZWxzLgotOyBUbyB3cml0ZSB0aGUgc3RydWN0dXJlIG9mIHRoaXMgZnVuY3Rpb24gaW4gQywgaXQgYmVjb21lcyB0aGUgc25pcHBldCBsaXN0ZWQKLTsgYmVsb3cuCi07Ci07ICAgaWYgKHdpZHRoICYgMSkgewotOyAgICAgLS13aWR0aDsKLTsgICAgIC8vIENvbnZlcnQgb25lIEFSR0IgcGl4ZWwgdG8gb25lIFkgcGl4ZWwsIG9uZSBVIHBpeGVsLCBhbmQgb25lIFYgcGl4ZWwuCi07ICAgfQotOwotOyAgIGlmICh3aWR0aCAmIDIpIHsKLTsgICAgIHdpZHRoIC09IDI7Ci07ICAgICAvLyBDb252ZXJ0IHR3byBBUkdCIHBpeGVscyB0byB0d28gWSBwaXhlbHMsIG9uZSBVIHBpeGVsLCBhbmQgb25lIFYgcGl4ZWwuCi07ICAgfQotOwotOyAgIHdoaWxlICh3aWR0aCkgewotOyAgICAgd2lkdGggLT0gNDsKLTsgICAgIC8vIENvbnZlcnQgZm91ciBBUkdCIHBpeGVscyB0byBmb3VyIFkgcGl4ZWxzLCB0d28gVSBwaXhlbHMsIGFuZCB0d28gVgotOyAgICAgLy8gcGl4ZWxzLgotOyAgIH0KLTsKLSAgRVhQT1JUICAgIFNZTUJPTAotICBhbGlnbiAgICAgZnVuY3Rpb25fYWxpZ24KLQotbWFuZ2xlKFNZTUJPTCk6Ci0gICVhc3NpZ24gc3RhY2tfb2Zmc2V0IDAKLSAgUFJPTE9HVUUgNSwgNiwgOCwgQVJHQiwgWSwgVSwgViwgV0lEVEgsIFRFTVAKLQotICA7IEluaXRpYWxpemUgY29uc3RhbnRzIHVzZWQgaW4gdGhpcyBmdW5jdGlvbi4gKFdlIHVzZSBpbW1lZGlhdGVzIHRvIGF2b2lkCi0gIDsgZGVwZW5kZW5jeSBvbnRvIEdPVC4pCi0gIExPQURfWE1NICBYTU1fQ09OU1RfWTAsIDB4MDA0MjAyMTkKLSAgTE9BRF9YTU0gIFhNTV9DT05TVF9ZMSwgMHgwMDAwN0YwMAotICBMT0FEX1hNTSAgWE1NX0NPTlNUX1UsIDB4MDBEQUI2NzAKLSAgTE9BRF9YTU0gIFhNTV9DT05TVF9WLCAweDAwNzBBMkVFCi0gIExPQURfWE1NICBYTU1fQ09OU1RfMTI4LCAweDAwODAwMDgwCi0KLS5jb252ZXJ0X29uZV9waXhlbDoKLSAgOyBEaXZpZGUgdGhlIGlucHV0IHdpZHRoIGJ5IHR3byBzbyBpdCByZXByZXNlbnRzIHRoZSBvZmZzZXRzIGZvciB1W10gYW5kIHZbXS4KLSAgOyBXaGVuIHRoZSB3aWR0aCBpcyBvZGQsIFdlIHJlYWQgdGhlIHJpZ2h0bW9zdCBBUkdCIHBpeGVsIGFuZCBjb252ZXJ0IGl0cwotICA7IGNvbG9yc3BhY2UgdG8gWVVWLiBUaGlzIGNvZGUgc3RvcmVzIG9uZSBZIHBpeGVsLCBvbmUgVSBwaXhlbCwgYW5kIG9uZSBWCi0gIDsgcGl4ZWwuCi0gIHNhciAgICAgICBXSURUSHEsIDEKLSAgam5jICAgICAgIC5jb252ZXJ0X3R3b19waXhlbHMKLQotICA7IFJlYWQgb25lIEFSR0IgKG9yIFJHQikgcGl4ZWwuCi0gIFJFQURfQVJHQiB4bW0wLCAxCi0KLSAgOyBDYWxjdWxhdGUgeVswXSBmcm9tIG9uZSBSR0IgcGl4ZWwgcmVhZCBhYm92ZS4KLSAgQ0FMQ19ZICAgIHhtbTEsIHhtbTAKLSAgbW92ZCAgICAgIFRFTVBkLCB4bW0xCi0gIG1vdiAgICAgICBCWVRFIFtZcSArIFdJRFRIcSAqIDJdLCBURU1QYgotCi0gIDsgQ2FsY3VsYXRlIHVbMF0gZnJvbSBvbmUgUkdCIHBpeGVsIHJlYWQgYWJvdmUuIElmIHRoaXMgaXMgYW4gb2RkIGxpbmUsIHRoZQotICA7IG91dHB1dCBwaXhlbCBjb250YWlucyB0aGUgVSB2YWx1ZSBjYWxjdWxhdGVkIGluIHRoZSBwcmV2aW91cyBjYWxsLiBXZSBhbHNvCi0gIDsgcmVhZCB0aGlzIHBpeGVsIGFuZCBjYWxjdWxhdGUgdGhlaXIgYXZlcmFnZS4KLSAgSU5JVF9VViAgIFRFTVBkLCBVcSwgNAotICBDQUxDX1VWICAgeG1tMSwgeG1tMCwgWE1NX0NPTlNUX1UsIFRFTVBkCi0gIG1vdmQgICAgICBURU1QZCwgeG1tMQotICBtb3YgICAgICAgQllURSBbVXEgKyBXSURUSHFdLCBURU1QYgotCi0gIDsgQ2FsY3VsYXRlIHZbMF0gZnJvbSBvbmUgUkdCIHBpeGVsLiBTYW1lIGFzIHVbMF0sIHdlIHJlYWQgdGhlIHJlc3VsdCBvZiB0aGUKLSAgOyBwcmV2aW91cyBjYWxsIGFuZCBnZXQgdGhlaXIgYXZlcmFnZS4KLSAgSU5JVF9VViAgIFRFTVBkLCBVcSwgNAotICBDQUxDX1VWICAgeG1tMSwgeG1tMCwgWE1NX0NPTlNUX1YsIFRFTVBkCi0gIG1vdmQgICAgICBURU1QZCwgeG1tMQotICBtb3YgICAgICAgQllURSBbVnEgKyBXSURUSHFdLCBURU1QYgotCi0uY29udmVydF90d29fcGl4ZWxzOgotICA7IElmIHRoZSBpbnB1dCB3aWR0aCBpcyBub3QgYSBtdWx0aXBsZSBvZiBmb3VyLCByZWFkIHRoZSByaWdodG1vc3QgdHdvIEFSR0IKLSAgOyBwaXhlbHMgYW5kIGNvbnZlcnQgdGhlaXIgY29sb3JzcGFjZSB0byBZVVYuIFRoaXMgY29kZSBzdG9yZXMgdHdvIFkgcGl4ZWxzLAotICA7IG9uZSBVIHBpeGVsLCBhbmQgb25lIFYgcGl4ZWwuCi0gIHRlc3QgICAgICBXSURUSGIsIDIgLyAyCi0gIGp6ICAgICAgICAuY29udmVydF9mb3VyX3BpeGVscwotICBzdWIgICAgICAgV0lEVEhiLCAyIC8gMgotCi0gIDsgUmVhZCB0d28gQVJHQiAob3IgUkdCKSBwaXhlbHMuCi0gIFJFQURfQVJHQiB4bW0wLCAyCi0KLSAgOyBDYWxjdWxhdGUgclswXSBhbmQgclsxXSBmcm9tIHR3byBSR0IgcGl4ZWxzIHJlYWQgYWJvdmUuCi0gIENBTENfWSAgICB4bW0xLCB4bW0wCi0gIG1vdmQgICAgICBURU1QZCwgeG1tMQotICBtb3YgICAgICAgV09SRCBbWXEgKyBXSURUSHEgKiAyXSwgVEVNUHcKLQotICA7IFNraXAgY2FsY3VsYXRpbmcgdSBhbmQgdiBpZiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBOVUxMLgotICB0ZXN0ICAgICAgVXEsIFVxCi0gIGp6ICAgICAgICAuY29udmVydF9mb3VyX3BpeGVscwotCi0gIDsgQ2FsY3VsYXRlIHVbMF0gZnJvbSB0d28gUkdCIHBpeGVscyByZWFkIGFib3ZlLiAoRm9yIGRldGFpbHMsIHJlYWQgdGhlIGFib3ZlCi0gIDsgY29tbWVudCBpbiAuY29udmVydF9vbmVfcGl4ZWwpLgotICBJTklUX1VWICAgVEVNUGQsIFVxLCAyCi0gIENBTENfVVYgICB4bW0xLCB4bW0wLCBYTU1fQ09OU1RfVSwgVEVNUGQKLSAgbW92ZCAgICAgIFRFTVBkLCB4bW0xCi0gIG1vdiAgICAgICBCWVRFIFtVcSArIFdJRFRIcV0sIFRFTVBiCi0KLSAgOyBDYWxjdWxhdGUgdlswXSBmcm9tIHR3byBSR0IgcGl4ZWxzIHJlYWQgYWJvdmUuCi0gIElOSVRfVVYgICBURU1QZCwgVnEsIDIKLSAgQ0FMQ19VViAgIHhtbTEsIHhtbTAsIFhNTV9DT05TVF9WLCBURU1QZAotICBtb3ZkICAgICAgVEVNUGQsIHhtbTEKLSAgbW92ICAgICAgIEJZVEUgW1ZxICsgV0lEVEhxXSwgVEVNUGIKLQotLmNvbnZlcnRfZm91cl9waXhlbHM6Ci0gIDsgUmVhZCBmb3VyIEFSR0IgcGl4ZWxzIGFuZCBjb252ZXJ0IHRoZWlyIGNvbG9yc3BhY2UgdG8gWVVWLiBUaGlzIGNvZGUgc3RvcmVzCi0gIDsgZm91ciBZIHBpeGVscywgdHdvIFUgcGl4ZWxzLCBhbmQgdHdvIFYgcGl4ZWxzLgotICB0ZXN0ICAgICAgV0lEVEhxLCBXSURUSHEKLSAganogICAgICAgIC5jb252ZXJ0X2ZpbmlzaAotCi0laWYgUElYRUxTSVpFID09IDQKLSAgOyBDaGVjayBpZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5IGFuZCB1c2UgbW92ZHFhCi0gIDsgZm9yIHJlYWRpbmcgdGhlIEFSR0IgcGl4ZWxzLgotICB0ZXN0ICAgICAgQVJHQncsIDE1Ci0gIGpueiAgICAgICAuY29udmVydF9mb3VyX3BpeGVsc191bmFsaWduZWQKLQotLmNvbnZlcnRfZm91cl9waXhlbHNfYWxpZ25lZDoKLSAgc3ViICAgICAgIFdJRFRIcSwgNCAvIDIKLQotICA7IFJlYWQgZm91ciBBUkdCIHBpeGVscy4gKFdlIGNhbiB1c2UgbW92ZHFhIGhlcmUgc2luY2Ugd2UgaGF2ZSBjaGVja2VkIGlmIHRoZQotICA7IHNvdXJjZSBhZGRyZXNzIGlzIGFsaWduZWQuKQotICBtb3ZkcWEgICAgeG1tMCwgRFFXT1JEIFtBUkdCcSArIFdJRFRIcSAqIDQgKiAyXQotCi0gIDsgQ2FsY3VsYXRlIHlbMF0sIHlbMV0sIHlbMl0sYW5kLCB5WzNdIGZyb20gdGhlIGlucHV0IEFSR0IgcGl4ZWxzLgotICBDQUxDX1kgICAgeG1tMSwgeG1tMAotICBtb3ZkICAgICAgRFdPUkQgW1lxICsgV0lEVEhxICogMl0sIHhtbTEKLQotJWlmIFNVQlNBTVBMSU5HID09IDAKLSAgOyBTa2lwIGNhbGN1bGF0aW5nIHUgYW5kIHYgaWYgdGhlIG91dHB1dCBidWZmZXIgaXMgTlVMTCwgd2hpY2ggbWVhbnMgd2UgYXJlCi0gIDsgY29udmVydGluZyBhbiBvZGQgbGluZS4gKFdoZW4gd2UgZW5hYmxlIHN1YnNhbXBsaW5nLCB0aGVzZSBidWZmZXJzIG11c3QKLSAgOyBjb250YWluIHRoZSB1IGFuZCB2IHZhbHVlcyBmb3IgdGhlIHByZXZpb3VzIGNhbGwsIGkuZS4gdGhlc2UgdmFyaWFibGVzIG11c3QKLSAgOyBub3QgYmUgTlVMTC4pCi0gIHRlc3QgICAgICBVcSwgVXEKLSAganogICAgICAgIC5jb252ZXJ0X2ZvdXJfcGl4ZWxzX2FsaWduZWRfbmV4dAotJWVuZGlmCi0KLSAgOyBDYWxjdWxhdGUgdVswXSBhbmQgdVsxXSBmcm9tIGZvdXIgQVJHQiBwaXhlbHMgcmVhZCBhYm92ZS4KLSAgSU5JVF9VViAgIFRFTVBkLCBVcSwgNAotICBDQUxDX1VWICAgeG1tMSwgeG1tMCwgWE1NX0NPTlNUX1UsIFRFTVBkCi0gIG1vdmQgICAgICBURU1QZCwgeG1tMQotICBtb3YgICAgICAgV09SRCBbVXEgKyBXSURUSHFdLCBURU1QdwotCi0gIDsgQ2FsY3VsYXRlIHZbMF0gYW5kIHZbMV0gZnJvbSBmb3VyIEFSR0IgcGl4ZWxzIHJlYWQgYWJvdmUuCi0gIElOSVRfVVYgICBURU1QZCwgVnEsIDQKLSAgQ0FMQ19VViAgIHhtbTEsIHhtbTAsIFhNTV9DT05TVF9WLCBURU1QZAotICBtb3ZkICAgICAgVEVNUGQsIHhtbTEKLSAgbW92ICAgICAgIFdPUkQgW1ZxICsgV0lEVEhxXSwgVEVNUHcKLQotJWlmIFNVQlNBTVBMSU5HID09IDAKLS5jb252ZXJ0X2ZvdXJfcGl4ZWxzX2FsaWduZWRfbmV4dDoKLSVlbmRpZgotCi0gIHRlc3QgICAgICBXSURUSHEsIFdJRFRIcQotICBqbnogICAgICAgLmNvbnZlcnRfZm91cl9waXhlbHNfYWxpZ25lZAotCi0gIGptcCAgICAgICAuY29udmVydF9maW5pc2gKLSVlbmRpZgotCi0uY29udmVydF9mb3VyX3BpeGVsc191bmFsaWduZWQ6Ci0gIHN1YiAgICAgICBXSURUSHEsIDQgLyAyCi0KLSAgOyBSZWFkIGZvdXIgQVJHQiAob3IgUkdCKSBwaXhlbHMuCi0gIFJFQURfQVJHQiB4bW0wLCA0Ci0KLSAgOyBDYWxjdWxhdGUgeVswXSwgeVsxXSwgeVsyXSxhbmQsIHlbM10gZnJvbSB0aGUgaW5wdXQgQVJHQiBwaXhlbHMuCi0gIENBTENfWSAgICB4bW0xLCB4bW0wCi0gIG1vdmQgICAgICBEV09SRCBbWXEgKyBXSURUSHEgKiAyXSwgeG1tMQotCi0laWYgU1VCU0FNUExJTkcgPT0gMAotICA7IFNraXAgY2FsY3VsYXRpbmcgdSBhbmQgdiBpZiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBOVUxMLgotICB0ZXN0ICAgICAgVXEsIFVxCi0gIGp6ICAgICAgICAuY29udmVydF9mb3VyX3BpeGVsc191bmFsaWduZWRfbmV4dAotJWVuZGlmCi0KLSAgOyBDYWxjdWxhdGUgdVswXSBhbmQgdVsxXSBmcm9tIHRoZSBpbnB1dCBBUkdCIHBpeGVscy4KLSAgSU5JVF9VViAgIFRFTVBkLCBVcSwgNAotICBDQUxDX1VWICAgeG1tMSwgeG1tMCwgWE1NX0NPTlNUX1UsIFRFTVBkCi0gIG1vdmQgICAgICBURU1QZCwgeG1tMQotICBtb3YgICAgICAgV09SRCBbVXEgKyBXSURUSHFdLCBURU1QdwotCi0gIDsgQ2FsY3VsYXRlIHZbMF0gYW5kIHZbMV0gZnJvbSB0aGUgaW5wdXQgQVJHQiBwaXhlbHMuCi0gIElOSVRfVVYgICBURU1QZCwgVnEsIDQKLSAgQ0FMQ19VViAgIHhtbTEsIHhtbTAsIFhNTV9DT05TVF9WLCBURU1QZAotICBtb3ZkICAgICAgVEVNUGQsIHhtbTEKLSAgbW92ICAgICAgIFdPUkQgW1ZxICsgV0lEVEhxXSwgVEVNUHcKLQotJWlmIFNVQlNBTVBMSU5HID09IDAKLS5jb252ZXJ0X2ZvdXJfcGl4ZWxzX3VuYWxpZ25lZF9uZXh0OgotJWVuZGlmCi0KLSAgdGVzdCAgICAgIFdJRFRIcSwgV0lEVEhxCi0gIGpueiAgICAgICAuY29udmVydF9mb3VyX3BpeGVsc191bmFsaWduZWQKLQotLmNvbnZlcnRfZmluaXNoOgotICA7IEp1c3QgZXhpdCB0aGlzIGZ1bmN0aW9uIHNpbmNlIHRoaXMgaXMgYSB2b2lkIGZ1bmN0aW9uLgotICBSRVQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMThmMDAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9jcHUuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIHsKLQotLy8gUmVmZXJlbmNlIGNvZGUgdGhhdCBjb252ZXJ0cyBSR0IgcGl4ZWxzIHRvIFlVViBwaXhlbHMuCi1pbnQgQ29udmVydFJHQlRvWShjb25zdCB1aW50OF90KiByZ2IpIHsKLSAgaW50IHkgPSAyNSAqIHJnYlswXSArIDEyOSAqIHJnYlsxXSArIDY2ICogcmdiWzJdOwotICB5ID0gKCh5ICsgMTI4KSA+PiA4KSArIDE2OwotICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oMjU1LCB5KSk7Ci19Ci0KLWludCBDb252ZXJ0UkdCVG9VKGNvbnN0IHVpbnQ4X3QqIHJnYiwgaW50IHNpemUpIHsKLSAgaW50IHUgPSAxMTIgKiByZ2JbMF0gLSA3NCAqIHJnYlsxXSAtIDM4ICogcmdiWzJdOwotICB1ID0gKCh1ICsgMTI4KSA+PiA4KSArIDEyODsKLSAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKDI1NSwgdSkpOwotfQotCi1pbnQgQ29udmVydFJHQlRvVihjb25zdCB1aW50OF90KiByZ2IsIGludCBzaXplKSB7Ci0gIGludCB2ID0gLTE4ICogcmdiWzBdIC0gOTQgKiByZ2JbMV0gKyAxMTIgKiByZ2JbMl07Ci0gIHYgPSAoKHYgKyAxMjgpID4+IDgpICsgMTI4OwotICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oMjU1LCB2KSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBBc3NlbWJseSBjb2RlIGNvbmZ1c2VzIE1lbW9yeVNhbml0aXplci4gRG8gbm90IHJ1biBpdCBpbiBNU2FuIGJ1aWxkcy4KLSNpZiBkZWZpbmVkKE1FTU9SWV9TQU5JVElaRVIpCi0jZGVmaW5lIE1BWUJFX1NpZGVCeVNpZGVSR0IgRElTQUJMRURfU2lkZUJ5U2lkZVJHQgotI2Vsc2UKLSNkZWZpbmUgTUFZQkVfU2lkZUJ5U2lkZVJHQiBTaWRlQnlTaWRlUkdCCi0jZW5kaWYKLQotLy8gQSBzaWRlLWJ5LXNpZGUgdGVzdCB0aGF0IHZlcmlmaWVzIG91ciBBU00gZnVuY3Rpb25zIHRoYXQgY29udmVydCBSR0IgcGl4ZWxzCi0vLyB0byBZVVYgcGl4ZWxzIGNhbiBvdXRwdXQgdGhlIGV4cGVjdGVkIHJlc3VsdHMuIFRoaXMgdGVzdCBjb252ZXJ0cyBSR0IgcGl4ZWxzCi0vLyB0byBZVVYgcGl4ZWxzIHdpdGggb3VyIEFTTSBmdW5jdGlvbnMgKHdoaWNoIHVzZSBTU0UsIFNTRTIsIFNTRTMsIGFuZCBTU1NFMykKLS8vIGFuZCBjb21wYXJlIHRoZSBvdXRwdXQgWVVWIHBpeGVscyB3aXRoIHRoZSBvbmVzIGNhbGN1bGF0ZWQgd2l0aCBvdXQgcmVmZXJlbmNlCi0vLyBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQysrLgotVEVTVChZVVZDb252ZXJ0VGVzdCwgTUFZQkVfU2lkZUJ5U2lkZVJHQikgewotICAvLyBXZSBza2lwIHRoaXMgdGVzdCBvbiBQQ3Mgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBTU0UzIGJlY2F1c2UgdGhpcyB0ZXN0Ci0gIC8vIG5lZWRzIGl0LgotICBiYXNlOjpDUFUgY3B1OwotICBpZiAoIWNwdS5oYXNfc3NzZTMoKSkgcmV0dXJuOwotCi0gIC8vIFRoaXMgdGVzdCBjaGVja3MgYSBzdWJzZXQgb2YgYWxsIFJHQiB2YWx1ZXMgc28gdGhpcyB0ZXN0IGRvZXMgbm90IHRha2Ugc28KLSAgLy8gbG9uZyB0aW1lLgotICBjb25zdCBpbnQga1N0ZXAgPSA4OwotICBjb25zdCBpbnQga1dpZHRoID0gMjU2IC8ga1N0ZXA7Ci0KLSAgZm9yIChpbnQgc2l6ZSA9IDM7IHNpemUgPD0gNDsgKytzaXplKSB7Ci0gICAgLy8gQ3JlYXRlIHRoZSBvdXRwdXQgYnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2IobmV3IHVpbnQ4X3Rba1dpZHRoICogc2l6ZV0pOwotICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHkobmV3IHVpbnQ4X3Rba1dpZHRoXSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdShuZXcgdWludDhfdFtrV2lkdGggLyAyXSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdihuZXcgdWludDhfdFtrV2lkdGggLyAyXSk7Ci0KLSAgICAvLyBDaG9vc2UgdGhlIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgZnJvbSBSR0IgcGl4ZWxzIHRvIFlVViBvbmVzLgotICAgIHZvaWQgKCpjb252ZXJ0KShjb25zdCB1aW50OF90KiwgdWludDhfdCosIHVpbnQ4X3QqLCB1aW50OF90KiwgaW50LCBpbnQsIGludCwKLSAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQpID0gTlVMTDsKLSAgICBpZiAoc2l6ZSA9PSAzKQotICAgICAgY29udmVydCA9IG1lZGlhOjpDb252ZXJ0UkdCMjRUb1lVVl9TU1NFMzsKLSAgICBlbHNlCi0gICAgICBjb252ZXJ0ID0gbWVkaWE6OkNvbnZlcnRSR0IzMlRvWVVWX1NTU0UzOwotCi0gICAgaW50IHRvdGFsX2Vycm9yID0gMDsKLSAgICBmb3IgKGludCByID0gMDsgciA8IGtXaWR0aDsgKytyKSB7Ci0gICAgICBmb3IgKGludCBnID0gMDsgZyA8IGtXaWR0aDsgKytnKSB7Ci0gICAgICAgIC8vIEZpbGwgdGhlIGlucHV0IHBpeGVscy4KLSAgICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBrV2lkdGg7ICsrYikgewotICAgICAgICAgIHJnYltiICogc2l6ZSArIDBdID0gYiAqIGtTdGVwOwotICAgICAgICAgIHJnYltiICogc2l6ZSArIDFdID0gZyAqIGtTdGVwOwotICAgICAgICAgIHJnYltiICogc2l6ZSArIDJdID0gciAqIGtTdGVwOwotICAgICAgICAgIGlmIChzaXplID09IDQpIHJnYltiICogc2l6ZSArIDNdID0gMjU1OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ29udmVydCB0aGUgaW5wdXQgUkdCIHBpeGVscyB0byBZVVYgb25lcy4KLSAgICAgICAgY29udmVydChyZ2IuZ2V0KCksIHkuZ2V0KCksIHUuZ2V0KCksIHYuZ2V0KCksIGtXaWR0aCwgMSwga1dpZHRoICogc2l6ZSwKLSAgICAgICAgICAgICAgICBrV2lkdGgsIGtXaWR0aCAvIDIpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBvdXRwdXQgWSBwaXhlbHMuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga1dpZHRoOyArK2kpIHsKLSAgICAgICAgICBjb25zdCB1aW50OF90KiBwID0gJnJnYltpICogc2l6ZV07Ci0gICAgICAgICAgaW50IGVycm9yID0gQ29udmVydFJHQlRvWShwKSAtIHlbaV07Ci0gICAgICAgICAgdG90YWxfZXJyb3IgKz0gZXJyb3IgPiAwID8gZXJyb3IgOiAtZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0aGUgb3V0cHV0IFUgcGl4ZWxzLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtXaWR0aCAvIDI7ICsraSkgewotICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAmcmdiW2kgKiAyICogc2l6ZV07Ci0gICAgICAgICAgaW50IGVycm9yID0gQ29udmVydFJHQlRvVShwLCBzaXplKSAtIHVbaV07Ci0gICAgICAgICAgdG90YWxfZXJyb3IgKz0gZXJyb3IgPiAwID8gZXJyb3IgOiAtZXJyb3I7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayB0aGUgb3V0cHV0IFYgcGl4ZWxzLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtXaWR0aCAvIDI7ICsraSkgewotICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAmcmdiW2kgKiAyICogc2l6ZV07Ci0gICAgICAgICAgaW50IGVycm9yID0gQ29udmVydFJHQlRvVihwLCBzaXplKSAtIHZbaV07Ci0gICAgICAgICAgdG90YWxfZXJyb3IgKz0gZXJyb3IgPiAwID8gZXJyb3IgOiAtZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBFWFBFQ1RfRVEoMCwgdG90YWxfZXJyb3IpOwotICB9Ci19CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYi5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmY2Q1OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfU0lNRF9DT05WRVJUX1lVVl9UT19SR0JfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfU0lNRF9DT05WRVJUX1lVVl9UT19SR0JfSF8KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlc2UgbWV0aG9kcyBhcmUgZXhwb3J0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4gIExpYnJhcnkgdXNlcnMgc2hvdWxkCi0vLyBvbmx5IGNhbGwgdGhlIG1ldGhvZHMgbGlzdGVkIGluIHl1dl9jb252ZXJ0LmguCi0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRZVVZUb1JHQjMyX0MoY29uc3QgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwgdWludDhfdCogcmdiZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1dnN0cmlkZSwgaW50IHJnYnN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVVWVHlwZSB5dXZfdHlwZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRZVVZUb1JHQjMyUm93X0MoY29uc3QgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiZnJhbWUsIHB0cmRpZmZfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRZVVZBVG9BUkdCX0MoCi0gICAgY29uc3QgdWludDhfdCogeXBsYW5lLCBjb25zdCB1aW50OF90KiB1cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwKLSAgICBjb25zdCB1aW50OF90KiBhcGxhbmUsIHVpbnQ4X3QqIHJnYmZyYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSwgaW50IGF2c3RyaWRlLCBpbnQgcmdic3RyaWRlLCBZVVZUeXBlIHl1dl90eXBlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFlVVkFUb0FSR0JSb3dfQyhjb25zdCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdnBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBhcGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYmZyYW1lLCBwdHJkaWZmX3Qgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBDb252ZXJ0WVVWVG9SR0IzMl9TU0UoY29uc3QgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiZnJhbWUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZ2JzdHJpZGUsIFlVVlR5cGUgeXV2X3R5cGUpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBDb252ZXJ0WVVWQVRvQVJHQl9NTVgoCi0gICAgY29uc3QgdWludDhfdCogeXBsYW5lLCBjb25zdCB1aW50OF90KiB1cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwKLSAgICBjb25zdCB1aW50OF90KiBhcGxhbmUsIHVpbnQ4X3QqIHJnYmZyYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSwgaW50IGF2c3RyaWRlLCBpbnQgcmdic3RyaWRlLCBZVVZUeXBlIHl1dl90eXBlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgU2NhbGVZVVZUb1JHQjMyUm93X0MoY29uc3QgdWludDhfdCogeV9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLCB1aW50OF90KiByZ2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHdpZHRoLCBwdHJkaWZmX3Qgc291cmNlX2R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19DKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsIHB0cmRpZmZfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzb3VyY2VfZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93V2l0aFJhbmdlX0MoCi0gICAgY29uc3QgdWludDhfdCogeV9idWYsIGNvbnN0IHVpbnQ4X3QqIHVfYnVmLCBjb25zdCB1aW50OF90KiB2X2J1ZiwKLSAgICB1aW50OF90KiByZ2JfYnVmLCBpbnQgZGVzdF93aWR0aCwgaW50IHNvdXJjZV94LCBpbnQgc291cmNlX2R4LAotICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotLy8gQXNzZW1ibHkgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCB3aXRob3V0IG5hbWVzcGFjZS4KLWV4dGVybiAiQyIgewotCi0vLyBXZSB1c2UgcHRyZGlmZl90IGluc3RlYWQgb2YgaW50IGZvciB5YXNtIHJvdXRpbmUgcGFyYW1ldGVycyB0byBwb3J0YWJseQotLy8gc2lnbi1leHRlbmQgaW50LiBPbiBXaW42NCwgTVNWQyBkb2VzIG5vdCBzaWduLWV4dGVuZCB0aGUgdmFsdWUgaW4gdGhlIHN0YWNrCi0vLyBob21lIG9mIGludCBmdW5jdGlvbiBwYXJhbWV0ZXJzLCBhbmQgeWFzbSByb3V0aW5lcyBhcmUgdW5hd2FyZSBvZiB0aGlzIGxhY2sKLS8vIG9mIGV4dGVuc2lvbiBhbmQgZmF1bHQuICBwdHJkaWZmX3QgaXMgcG9ydGFibHkgc2lnbi1leHRlbmRlZCBhbmQgZml4ZXMgdGhpcwotLy8gaXNzdWUgb24gYXQgbGVhc3QgV2luNjQuICBUaGUgQy1lcXVpdmFsZW50IFJvd1Byb2MgdmVyc2lvbnMnIHByb3RvdHlwZXMKLS8vIGluY2x1ZGUgdGhlIHNhbWUgY2hhbmdlIHRvIHB0cmRpZmZfdCB0byByZXVzZSB0aGUgdHlwZWRlZnMuCi0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRZVVZBVG9BUkdCUm93X01NWChjb25zdCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBhcGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiZnJhbWUsIHB0cmRpZmZfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFlVVlRvUkdCMzJSb3dfU1NFKGNvbnN0IHVpbnQ4X3QqIHlwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdnBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYmZyYW1lLCBwdHJkaWZmX3Qgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIFNjYWxlWVVWVG9SR0IzMlJvd19TU0UoY29uc3QgdWludDhfdCogeV9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwgdWludDhfdCogcmdiX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHdpZHRoLCBwdHJkaWZmX3Qgc291cmNlX2R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKTsKLQotTUVESUFfRVhQT1JUIHZvaWQgU2NhbGVZVVZUb1JHQjMyUm93X1NTRTJfWDY0KGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsIHB0cmRpZmZfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc291cmNlX2R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKAotICAgIGNvbnN0IHVpbnQ4X3QqIHlfYnVmLCBjb25zdCB1aW50OF90KiB1X2J1ZiwgY29uc3QgdWludDhfdCogdl9idWYsCi0gICAgdWludDhfdCogcmdiX2J1ZiwgcHRyZGlmZl90IHdpZHRoLCBwdHJkaWZmX3Qgc291cmNlX2R4LAotICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfTU1YX1g2NCgKLSAgICBjb25zdCB1aW50OF90KiB5X2J1ZiwgY29uc3QgdWludDhfdCogdV9idWYsIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLAotICAgIHVpbnQ4X3QqIHJnYl9idWYsIHB0cmRpZmZfdCB3aWR0aCwgcHRyZGlmZl90IHNvdXJjZV9keCwKLSAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKTsKLQotfSAgLy8gZXh0ZXJuICJDIgotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1NJTURfQ09OVkVSVF9ZVVZfVE9fUkdCX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9jLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2JfYy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFjMGJhMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9jLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYi5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLSNkZWZpbmUgcGFja3Vzd2IoeCkgKCh4KSA8IDAgPyAwIDogKCh4KSA+IDI1NSA/IDI1NSA6ICh4KSkpCi0jZGVmaW5lIHBhZGRzdyh4LCB5KSBcCi0gICgoKHgpICsgKHkpKSA8IC0zMjc2OCA/IC0zMjc2OCA6ICgoKHgpICsgKHkpKSA+IDMyNzY3ID8gMzI3NjcgOiAoKHgpICsgKHkpKSkpCi0KLS8vIE9uIEFuZHJvaWQsIHBpeGVsIGxheW91dCBpcyBSR0JBIChzZWUgc2tpYS9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaCk7Ci0vLyBob3dldmVyLCBvdGhlciBDaHJvbWUgcGxhdGZvcm1zIHVzZSBCR1JBIChzZWUgc2tpYS9jb25maWcvU2tVc2VyQ29uZmlnLmgpLgotLy8gSWRlYWxseSwgYW5kcm9pZCBzaG91bGQgbm90IHVzZSB0aGUgZnVuY3Rpb25zIGhlcmUgZHVlIHRvIHBlcmZvcm1hbmNlIGlzc3VlCi0vLyAoaHR0cDovL2NyYnVnLmNvbS8yNDk5ODApLgotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSNkZWZpbmUgU0tfUjMyX1NISUZUIDAKLSNkZWZpbmUgU0tfRzMyX1NISUZUIDgKLSNkZWZpbmUgU0tfQjMyX1NISUZUIDE2Ci0jZGVmaW5lIFNLX0EzMl9TSElGVCAyNAotI2RlZmluZSBSX0lOREVYIDAKLSNkZWZpbmUgR19JTkRFWCAxCi0jZGVmaW5lIEJfSU5ERVggMgotI2RlZmluZSBBX0lOREVYIDMKLSNlbHNlCi0jZGVmaW5lIFNLX0IzMl9TSElGVCAwCi0jZGVmaW5lIFNLX0czMl9TSElGVCA4Ci0jZGVmaW5lIFNLX1IzMl9TSElGVCAxNgotI2RlZmluZSBTS19BMzJfU0hJRlQgMjQKLSNkZWZpbmUgQl9JTkRFWCAwCi0jZGVmaW5lIEdfSU5ERVggMQotI2RlZmluZSBSX0lOREVYIDIKLSNkZWZpbmUgQV9JTkRFWCAzCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIENvbnZlcnRZVVZUb1JHQjMyX0ModWludDhfdCB5LCB1aW50OF90IHUsIHVpbnQ4X3QgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKSB7Ci0gIGludCBiID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgQl9JTkRFWF07Ci0gIGludCBnID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgR19JTkRFWF07Ci0gIGludCByID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgUl9JTkRFWF07Ci0gIGludCBhID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgQV9JTkRFWF07Ci0KLSAgYiA9IHBhZGRzdyhiLCBjb252ZXJ0X3RhYmxlWzQgKiAoNTEyICsgdikgKyBCX0lOREVYXSk7Ci0gIGcgPSBwYWRkc3coZywgY29udmVydF90YWJsZVs0ICogKDUxMiArIHYpICsgR19JTkRFWF0pOwotICByID0gcGFkZHN3KHIsIGNvbnZlcnRfdGFibGVbNCAqICg1MTIgKyB2KSArIFJfSU5ERVhdKTsKLSAgYSA9IHBhZGRzdyhhLCBjb252ZXJ0X3RhYmxlWzQgKiAoNTEyICsgdikgKyBBX0lOREVYXSk7Ci0KLSAgYiA9IHBhZGRzdyhiLCBjb252ZXJ0X3RhYmxlWzQgKiB5ICsgQl9JTkRFWF0pOwotICBnID0gcGFkZHN3KGcsIGNvbnZlcnRfdGFibGVbNCAqIHkgKyBHX0lOREVYXSk7Ci0gIHIgPSBwYWRkc3cociwgY29udmVydF90YWJsZVs0ICogeSArIFJfSU5ERVhdKTsKLSAgYSA9IHBhZGRzdyhhLCBjb252ZXJ0X3RhYmxlWzQgKiB5ICsgQV9JTkRFWF0pOwotCi0gIGIgPj49IDY7Ci0gIGcgPj49IDY7Ci0gIHIgPj49IDY7Ci0gIGEgPj49IDY7Ci0KLSAgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyZ2JfYnVmKSA9Ci0gICAgICAocGFja3Vzd2IoYikgPDwgU0tfQjMyX1NISUZUKSB8IChwYWNrdXN3YihnKSA8PCBTS19HMzJfU0hJRlQpIHwKLSAgICAgIChwYWNrdXN3YihyKSA8PCBTS19SMzJfU0hJRlQpIHwgKHBhY2t1c3diKGEpIDw8IFNLX0EzMl9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBDb252ZXJ0WVVWQVRvQVJHQl9DKHVpbnQ4X3QgeSwgdWludDhfdCB1LCB1aW50OF90IHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGEsIHVpbnQ4X3QqIHJnYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKSB7Ci0gIGludCBiID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgMF07Ci0gIGludCBnID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgMV07Ci0gIGludCByID0gY29udmVydF90YWJsZVs0ICogKDI1NiArIHUpICsgMl07Ci0KLSAgYiA9IHBhZGRzdyhiLCBjb252ZXJ0X3RhYmxlWzQgKiAoNTEyICsgdikgKyAwXSk7Ci0gIGcgPSBwYWRkc3coZywgY29udmVydF90YWJsZVs0ICogKDUxMiArIHYpICsgMV0pOwotICByID0gcGFkZHN3KHIsIGNvbnZlcnRfdGFibGVbNCAqICg1MTIgKyB2KSArIDJdKTsKLQotICBiID0gcGFkZHN3KGIsIGNvbnZlcnRfdGFibGVbNCAqIHkgKyAwXSk7Ci0gIGcgPSBwYWRkc3coZywgY29udmVydF90YWJsZVs0ICogeSArIDFdKTsKLSAgciA9IHBhZGRzdyhyLCBjb252ZXJ0X3RhYmxlWzQgKiB5ICsgMl0pOwotCi0gIGIgPj49IDY7Ci0gIGcgPj49IDY7Ci0gIHIgPj49IDY7Ci0KLSAgYiA9IHBhY2t1c3diKGIpICogYSA+PiA4OwotICBnID0gcGFja3Vzd2IoZykgKiBhID4+IDg7Ci0gIHIgPSBwYWNrdXN3YihyKSAqIGEgPj4gODsKLQotICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHJnYl9idWYpID0KLSAgICAgIChiIDw8IFNLX0IzMl9TSElGVCkgfCAoZyA8PCBTS19HMzJfU0hJRlQpIHwgKHIgPDwgU0tfUjMyX1NISUZUKSB8Ci0gICAgICAoYSA8PCBTS19BMzJfU0hJRlQpOwotfQotCi12b2lkIENvbnZlcnRZVVZUb1JHQjMyUm93X0MoY29uc3QgdWludDhfdCogeV9idWYsIGNvbnN0IHVpbnQ4X3QqIHVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLCB1aW50OF90KiByZ2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCwgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSkgewotICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4ICs9IDIpIHsKLSAgICB1aW50OF90IHUgPSB1X2J1Zlt4ID4+IDFdOwotICAgIHVpbnQ4X3QgdiA9IHZfYnVmW3ggPj4gMV07Ci0gICAgdWludDhfdCB5MCA9IHlfYnVmW3hdOwotICAgIENvbnZlcnRZVVZUb1JHQjMyX0MoeTAsIHUsIHYsIHJnYl9idWYsIGNvbnZlcnRfdGFibGUpOwotICAgIGlmICgoeCArIDEpIDwgd2lkdGgpIHsKLSAgICAgIHVpbnQ4X3QgeTEgPSB5X2J1Zlt4ICsgMV07Ci0gICAgICBDb252ZXJ0WVVWVG9SR0IzMl9DKHkxLCB1LCB2LCByZ2JfYnVmICsgNCwgY29udmVydF90YWJsZSk7Ci0gICAgfQotICAgIHJnYl9idWYgKz0gODsgIC8vIEFkdmFuY2UgMiBwaXhlbHMuCi0gIH0KLX0KLQotdm9pZCBDb252ZXJ0WVVWQVRvQVJHQlJvd19DKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLCBjb25zdCB1aW50OF90KiB1X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwgY29uc3QgdWludDhfdCogYV9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiYV9idWYsIHB0cmRpZmZfdCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBjb252ZXJ0X3RhYmxlKSB7Ci0gIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHggKz0gMikgewotICAgIHVpbnQ4X3QgdSA9IHVfYnVmW3ggPj4gMV07Ci0gICAgdWludDhfdCB2ID0gdl9idWZbeCA+PiAxXTsKLSAgICB1aW50OF90IHkwID0geV9idWZbeF07Ci0gICAgdWludDhfdCBhMCA9IGFfYnVmW3hdOwotICAgIENvbnZlcnRZVVZBVG9BUkdCX0MoeTAsIHUsIHYsIGEwLCByZ2JhX2J1ZiwgY29udmVydF90YWJsZSk7Ci0gICAgaWYgKCh4ICsgMSkgPCB3aWR0aCkgewotICAgICAgdWludDhfdCB5MSA9IHlfYnVmW3ggKyAxXTsKLSAgICAgIHVpbnQ4X3QgYTEgPSBhX2J1Zlt4ICsgMV07Ci0gICAgICBDb252ZXJ0WVVWQVRvQVJHQl9DKHkxLCB1LCB2LCBhMSwgcmdiYV9idWYgKyA0LCBjb252ZXJ0X3RhYmxlKTsKLSAgICB9Ci0gICAgcmdiYV9idWYgKz0gODsgIC8vIEFkdmFuY2UgMiBwaXhlbHMuCi0gIH0KLX0KLQotLy8gMTYuMTYgZml4ZWQgcG9pbnQgaXMgdXNlZC4gIEEgc2hpZnQgYnkgMTYgaXNvbGF0ZXMgdGhlIGludGVnZXIuCi0vLyBBIHNoaWZ0IGJ5IDE3IGlzIHVzZWQgdG8gZnVydGhlciBzdWJzYW1wbGUgdGhlIGNocm9taW5lbmNlIGNoYW5uZWxzLgotLy8gJiAweGZmZmYgaXNvbGF0ZXMgdGhlIGZpeGVkIHBvaW50IGZyYWN0aW9uLiAgPj4gMiB0byBnZXQgdGhlIHVwcGVyIDIgYml0cywKLS8vIGZvciAxLzY1NTM2IHBpeGVsIGFjY3VyYXRlIGludGVycG9sYXRpb24uCi12b2lkIFNjYWxlWVVWVG9SR0IzMlJvd19DKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLCBjb25zdCB1aW50OF90KiB1X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdl9idWYsIHVpbnQ4X3QqIHJnYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCwgcHRyZGlmZl90IHNvdXJjZV9keCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSkgewotICBpbnQgeCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKz0gMikgewotICAgIGludCB5ID0geV9idWZbeCA+PiAxNl07Ci0gICAgaW50IHUgPSB1X2J1ZlsoeCA+PiAxNyldOwotICAgIGludCB2ID0gdl9idWZbKHggPj4gMTcpXTsKLSAgICBDb252ZXJ0WVVWVG9SR0IzMl9DKHksIHUsIHYsIHJnYl9idWYsIGNvbnZlcnRfdGFibGUpOwotICAgIHggKz0gc291cmNlX2R4OwotICAgIGlmICgoaSArIDEpIDwgd2lkdGgpIHsKLSAgICAgIHkgPSB5X2J1Zlt4ID4+IDE2XTsKLSAgICAgIENvbnZlcnRZVVZUb1JHQjMyX0MoeSwgdSwgdiwgcmdiX2J1ZiArIDQsIGNvbnZlcnRfdGFibGUpOwotICAgICAgeCArPSBzb3VyY2VfZHg7Ci0gICAgfQotICAgIHJnYl9idWYgKz0gODsKLSAgfQotfQotCi12b2lkIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19DKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLCBjb25zdCB1aW50OF90KiB1X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdl9idWYsIHVpbnQ4X3QqIHJnYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCwgcHRyZGlmZl90IHNvdXJjZV9keCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSkgewotICAvLyBBdm9pZCBwb2ludC1zYW1wbGluZyBmb3IgZG93bi1zY2FsaW5nIGJ5ID4gMjoxLgotICBpbnQgc291cmNlX3ggPSAwOwotICBpZiAoc291cmNlX2R4ID49IDB4MjAwMDApIHNvdXJjZV94ICs9IDB4ODAwMDsKLSAgTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93V2l0aFJhbmdlX0MoeV9idWYsIHVfYnVmLCB2X2J1ZiwgcmdiX2J1Ziwgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV94LCBzb3VyY2VfZHgsIGNvbnZlcnRfdGFibGUpOwotfQotCi12b2lkIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd1dpdGhSYW5nZV9DKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdl9idWYsIHVpbnQ4X3QqIHJnYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgeCwgaW50IHNvdXJjZV9keCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSkgewotICBmb3IgKGludCBpID0gMDsgaSA8IGRlc3Rfd2lkdGg7IGkgKz0gMikgewotICAgIGludCB5MCA9IHlfYnVmW3ggPj4gMTZdOwotICAgIGludCB5MSA9IHlfYnVmWyh4ID4+IDE2KSArIDFdOwotICAgIGludCB1MCA9IHVfYnVmWyh4ID4+IDE3KV07Ci0gICAgaW50IHUxID0gdV9idWZbKHggPj4gMTcpICsgMV07Ci0gICAgaW50IHYwID0gdl9idWZbKHggPj4gMTcpXTsKLSAgICBpbnQgdjEgPSB2X2J1ZlsoeCA+PiAxNykgKyAxXTsKLSAgICBpbnQgeV9mcmFjID0gKHggJiA2NTUzNSk7Ci0gICAgaW50IHV2X2ZyYWMgPSAoKHggPj4gMSkgJiA2NTUzNSk7Ci0gICAgaW50IHkgPSAoeV9mcmFjICogeTEgKyAoeV9mcmFjIF4gNjU1MzUpICogeTApID4+IDE2OwotICAgIGludCB1ID0gKHV2X2ZyYWMgKiB1MSArICh1dl9mcmFjIF4gNjU1MzUpICogdTApID4+IDE2OwotICAgIGludCB2ID0gKHV2X2ZyYWMgKiB2MSArICh1dl9mcmFjIF4gNjU1MzUpICogdjApID4+IDE2OwotICAgIENvbnZlcnRZVVZUb1JHQjMyX0MoeSwgdSwgdiwgcmdiX2J1ZiwgY29udmVydF90YWJsZSk7Ci0gICAgeCArPSBzb3VyY2VfZHg7Ci0gICAgaWYgKChpICsgMSkgPCBkZXN0X3dpZHRoKSB7Ci0gICAgICB5MCA9IHlfYnVmW3ggPj4gMTZdOwotICAgICAgeTEgPSB5X2J1ZlsoeCA+PiAxNikgKyAxXTsKLSAgICAgIHlfZnJhYyA9ICh4ICYgNjU1MzUpOwotICAgICAgeSA9ICh5X2ZyYWMgKiB5MSArICh5X2ZyYWMgXiA2NTUzNSkgKiB5MCkgPj4gMTY7Ci0gICAgICBDb252ZXJ0WVVWVG9SR0IzMl9DKHksIHUsIHYsIHJnYl9idWYgKyA0LCBjb252ZXJ0X3RhYmxlKTsKLSAgICAgIHggKz0gc291cmNlX2R4OwotICAgIH0KLSAgICByZ2JfYnVmICs9IDg7Ci0gIH0KLX0KLQotdm9pZCBDb252ZXJ0WVVWVG9SR0IzMl9DKGNvbnN0IHVpbnQ4X3QqIHlwbGFuZSwgY29uc3QgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwgdWludDhfdCogcmdiZnJhbWUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlLCBpbnQgcmdic3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFlVVlR5cGUgeXV2X3R5cGUpIHsKLSAgdW5zaWduZWQgaW50IHlfc2hpZnQgPSBHZXRWZXJ0aWNhbFNoaWZ0KHl1dl90eXBlKTsKLSAgY29uc3QgaW50MTZfdCogbG9va3VwX3RhYmxlID0gR2V0TG9va3VwVGFibGUoeXV2X3R5cGUpOwotICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0gICAgdWludDhfdCogcmdiX3JvdyA9IHJnYmZyYW1lICsgeSAqIHJnYnN0cmlkZTsKLSAgICBjb25zdCB1aW50OF90KiB5X3B0ciA9IHlwbGFuZSArIHkgKiB5c3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHVfcHRyID0gdXBsYW5lICsgKHkgPj4geV9zaGlmdCkgKiB1dnN0cmlkZTsKLSAgICBjb25zdCB1aW50OF90KiB2X3B0ciA9IHZwbGFuZSArICh5ID4+IHlfc2hpZnQpICogdXZzdHJpZGU7Ci0KLSAgICBDb252ZXJ0WVVWVG9SR0IzMlJvd19DKHlfcHRyLCB1X3B0ciwgdl9wdHIsIHJnYl9yb3csIHdpZHRoLCBsb29rdXBfdGFibGUpOwotICB9Ci19Ci0KLXZvaWQgQ29udmVydFlVVkFUb0FSR0JfQyhjb25zdCB1aW50OF90KiB5cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIGFwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZ2JhZnJhbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlLCBpbnQgYXN0cmlkZSwgaW50IHJnYmFzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWVVWVHlwZSB5dXZfdHlwZSkgewotICB1bnNpZ25lZCBpbnQgeV9zaGlmdCA9IEdldFZlcnRpY2FsU2hpZnQoeXV2X3R5cGUpOwotICBjb25zdCBpbnQxNl90KiBsb29rdXBfdGFibGUgPSBHZXRMb29rdXBUYWJsZSh5dXZfdHlwZSk7Ci0gIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICB1aW50OF90KiByZ2JhX3JvdyA9IHJnYmFmcmFtZSArIHkgKiByZ2Jhc3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0geXBsYW5lICsgeSAqIHlzdHJpZGU7Ci0gICAgY29uc3QgdWludDhfdCogdV9wdHIgPSB1cGxhbmUgKyAoeSA+PiB5X3NoaWZ0KSAqIHV2c3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRyID0gdnBsYW5lICsgKHkgPj4geV9zaGlmdCkgKiB1dnN0cmlkZTsKLSAgICBjb25zdCB1aW50OF90KiBhX3B0ciA9IGFwbGFuZSArIHkgKiBhc3RyaWRlOwotCi0gICAgQ29udmVydFlVVkFUb0FSR0JSb3dfQyh5X3B0ciwgdV9wdHIsIHZfcHRyLCBhX3B0ciwgcmdiYV9yb3csIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwX3RhYmxlKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX21teC5pbmMgYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9tbXguaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY5ZDFiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX21teC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi07IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotOyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0laW5jbHVkZSAibWVkaWEvYmFzZS9zaW1kL21lZGlhX2V4cG9ydC5hc20iCi0KLSAgRVhQT1JUICAgIFNZTUJPTAotICBhbGlnbiAgICAgZnVuY3Rpb25fYWxpZ24KLQotbWFuZ2xlKFNZTUJPTCk6Ci0gICVhc3NpZ24gICBzdGFja19vZmZzZXQgMAotICBQUk9MT0dVRSAgNiwgNywgMywgWSwgVSwgViwgQVJHQiwgV0lEVEgsIFRBQkxFLCBURU1QCi0KLSAgam1wICAgICAgIC5jb252ZXJ0ZW5kCi0KLS5jb252ZXJ0bG9vcDoKLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtVcV0KLSAgbW92cSAgICAgIG1tMCwgW1RBQkxFcSArIDIwNDggKyA4ICogVEVNUHFdCi0gIGFkZCAgICAgICBVcSwgMQotCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbVnFdCi0gIHBhZGRzdyAgICBtbTAsIFtUQUJMRXEgKyA0MDk2ICsgOCAqIFRFTVBxXQotICBhZGQgICAgICAgVnEsIDEKLQotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1lxXQotICBtb3ZxICAgICAgbW0xLCBbVEFCTEVxICsgOCAqIFRFTVBxXQotCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbWXEgKyAxXQotICBtb3ZxICAgICAgbW0yLCBbVEFCTEVxICsgOCAqIFRFTVBxXQotICBhZGQgICAgICAgWXEsIDIKLQotICA7IEFkZCBVViBjb21wb25lbnRzIHRvIFkgY29tcG9uZW50LgotICBwYWRkc3cgICAgbW0xLCBtbTAKLSAgcGFkZHN3ICAgIG1tMiwgbW0wCi0KLSAgOyBEb3duIHNoaWZ0IGFuZCB0aGVuIHBhY2suCi0gIHBzcmF3ICAgICBtbTEsIDYKLSAgcHNyYXcgICAgIG1tMiwgNgotICBwYWNrdXN3YiAgbW0xLCBtbTIKLSAgTU9WUSAgICAgIFtBUkdCcV0sIG1tMQotICBhZGQgICAgICAgQVJHQnEsIDgKLQotLmNvbnZlcnRlbmQ6Ci0gIHN1YiAgICAgICBXSURUSHEsIDIKLSAgam5zICAgICAgIC5jb252ZXJ0bG9vcAotCi0gIDsgSWYgbnVtYmVyIG9mIHBpeGVscyBpcyBvZGQgdGhlbiBjb21wdXRlIGl0LgotICBhbmQgICAgICAgV0lEVEhxLCAxCi0gIGp6ICAgICAgICAuY29udmVydGRvbmUKLQotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1VxXQotICBtb3ZxICAgICAgbW0wLCBbVEFCTEVxICsgMjA0OCArIDggKiBURU1QcV0KLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtWcV0KLSAgcGFkZHN3ICAgIG1tMCwgW1RBQkxFcSArIDQwOTYgKyA4ICogVEVNUHFdCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbWXFdCi0gIG1vdnEgICAgICBtbTEsIFtUQUJMRXEgKyA4ICogVEVNUHFdCi0gIHBhZGRzdyAgICBtbTEsIG1tMAotICBwc3JhdyAgICAgbW0xLCA2Ci0gIHBhY2t1c3diICBtbTEsIG1tMQotICBtb3ZkICAgICAgW0FSR0JxXSwgbW0xCi0KLS5jb252ZXJ0ZG9uZToKLSAgUkVUCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9zc2UuYXNtIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2Jfc3NlLmFzbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY2NjI0My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9zc2UuYXNtCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgInRoaXJkX3BhcnR5L3g4NmluYy94ODZpbmMuYXNtIgotCi07Ci07IFRoaXMgZmlsZSB1c2VzIE1NWCBhbmQgU1NFIGluc3RydWN0aW9ucy4KLTsKLSAgU0VDVElPTl9URVhUCi0gIENQVSAgICAgICBNTVgsIFNTRQotCi07IFVzZSBTU0UgaW5zdHJ1Y3Rpb24gbW92bnRxIGNhbiB3cml0ZSBmYXN0ZXIuCi0lZGVmaW5lIE1PVlEgbW92bnRxCi0KLTsKLTsgZXh0ZXJuICJDIiB2b2lkIENvbnZlcnRZVVZUb1JHQjMyUm93X1NTRShjb25zdCB1aW50OF90KiB5X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZ2JfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCk7Ci07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSk7Ci0lZGVmaW5lIFNZTUJPTCBDb252ZXJ0WVVWVG9SR0IzMlJvd19TU0UKLSVpbmNsdWRlICJjb252ZXJ0X3l1dl90b19yZ2JfbW14LmluYyIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX3g4Ni5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX3g4Ni5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZhNzViNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl94ODYuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8bW1pbnRyaW4uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXZvaWQgQ29udmVydFlVVkFUb0FSR0JfTU1YKGNvbnN0IHVpbnQ4X3QqIHlwbGFuZSwgY29uc3QgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdnBsYW5lLCBjb25zdCB1aW50OF90KiBhcGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZ2JmcmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSwgaW50IGFzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmdic3RyaWRlLCBZVVZUeXBlIHl1dl90eXBlKSB7Ci0gIHVuc2lnbmVkIGludCB5X3NoaWZ0ID0gR2V0VmVydGljYWxTaGlmdCh5dXZfdHlwZSk7Ci0gIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICB1aW50OF90KiByZ2Jfcm93ID0gcmdiZnJhbWUgKyB5ICogcmdic3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0geXBsYW5lICsgeSAqIHlzdHJpZGU7Ci0gICAgY29uc3QgdWludDhfdCogdV9wdHIgPSB1cGxhbmUgKyAoeSA+PiB5X3NoaWZ0KSAqIHV2c3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRyID0gdnBsYW5lICsgKHkgPj4geV9zaGlmdCkgKiB1dnN0cmlkZTsKLSAgICBjb25zdCB1aW50OF90KiBhX3B0ciA9IGFwbGFuZSArIHkgKiBhc3RyaWRlOwotCi0gICAgQ29udmVydFlVVkFUb0FSR0JSb3dfTU1YKHlfcHRyLCB1X3B0ciwgdl9wdHIsIGFfcHRyLCByZ2Jfcm93LCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9va3VwVGFibGUoeXV2X3R5cGUpKTsKLSAgfQotCi0gIEVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvbnZlcnRZVVZUb1JHQjMyX1NTRShjb25zdCB1aW50OF90KiB5cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwgdWludDhfdCogcmdiZnJhbWUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCB5c3RyaWRlLCBpbnQgdXZzdHJpZGUsIGludCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBZVVZUeXBlIHl1dl90eXBlKSB7Ci0gIHVuc2lnbmVkIGludCB5X3NoaWZ0ID0gR2V0VmVydGljYWxTaGlmdCh5dXZfdHlwZSk7Ci0gIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICB1aW50OF90KiByZ2Jfcm93ID0gcmdiZnJhbWUgKyB5ICogcmdic3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0geXBsYW5lICsgeSAqIHlzdHJpZGU7Ci0gICAgY29uc3QgdWludDhfdCogdV9wdHIgPSB1cGxhbmUgKyAoeSA+PiB5X3NoaWZ0KSAqIHV2c3RyaWRlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRyID0gdnBsYW5lICsgKHkgPj4geV9zaGlmdCkgKiB1dnN0cmlkZTsKLQotICAgIENvbnZlcnRZVVZUb1JHQjMyUm93X1NTRSh5X3B0ciwgdV9wdHIsIHZfcHRyLCByZ2Jfcm93LCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9va3VwVGFibGUoeXV2X3R5cGUpKTsKLSAgfQotCi0gIEVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZhX3RvX2FyZ2JfbW14LmFzbSBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZhX3RvX2FyZ2JfbW14LmFzbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhhMTQ3ZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2YV90b19hcmdiX21teC5hc20KKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi07IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotOyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0laW5jbHVkZSAidGhpcmRfcGFydHkveDg2aW5jL3g4NmluYy5hc20iCi0KLTsKLTsgVGhpcyBmaWxlIHVzZXMgTU1YIGluc3RydWN0aW9ucy4KLTsKLSAgU0VDVElPTl9URVhUCi0gIENQVSAgICAgICBNTVgKLQotOyBVc2UgbW92cSB0byBzYXZlIHRoZSBvdXRwdXQuCi0lZGVmaW5lIE1PVlEgbW92cQotCi07IGV4dGVybiAiQyIgdm9pZCBDb252ZXJ0WVVWQVRvQVJHQlJvd19NTVgoY29uc3QgdWludDhfdCogeV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdl9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogYV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiX2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgpOwotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotJWRlZmluZSBTWU1CT0wgQ29udmVydFlVVkFUb0FSR0JSb3dfTU1YCi0laW5jbHVkZSAiY29udmVydF95dXZhX3RvX2FyZ2JfbW14LmluYyIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZhX3RvX2FyZ2JfbW14LmluYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZhX3RvX2FyZ2JfbW14LmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5MzM4My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfeXV2YV90b19hcmdiX21teC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgIm1lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtIgotCi0gIEVYUE9SVCAgICBTWU1CT0wKLSAgYWxpZ24gICAgIGZ1bmN0aW9uX2FsaWduCi0KLW1hbmdsZShTWU1CT0wpOgotICAlYXNzaWduICAgc3RhY2tfb2Zmc2V0IDAKLSAgUFJPTE9HVUUgIDcsIDcsIDMsIFksIFUsIFYsIEEsIEFSR0IsIFdJRFRILCBUQUJMRQotICBQVVNIICAgICAgV0lEVEhxCi0gIERFRklORV9BUkdTIFksIFUsIFYsIEEsIEFSR0IsIFRBQkxFLCBURU1QCi0gIG1vdiAgICAgICBUQUJMRXEsIFRFTVBxCi0gIGptcCAgICAgICAuY29udmVydGVuZAotCi0uY29udmVydGxvb3A6Ci0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbVXFdCi0gIG1vdnEgICAgICBtbTAsIFtUQUJMRXEgKyAyMDQ4ICsgOCAqIFRFTVBxXQotICBhZGQgICAgICAgVXEsIDEKLQotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1ZxXQotICBwYWRkc3cgICAgbW0wLCBbVEFCTEVxICsgNDA5NiArIDggKiBURU1QcV0KLSAgYWRkICAgICAgIFZxLCAxCi0KLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtZcV0KLSAgbW92cSAgICAgIG1tMSwgW1RBQkxFcSArIDggKiBURU1QcV0KLQotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1lxICsgMV0KLSAgbW92cSAgICAgIG1tMiwgW1RBQkxFcSArIDggKiBURU1QcV0KLSAgYWRkICAgICAgIFlxLCAyCi0KLSAgOyBBZGQgVVYgY29tcG9uZW50cyB0byBZIGNvbXBvbmVudC4KLSAgcGFkZHN3ICAgIG1tMSwgbW0wCi0gIHBhZGRzdyAgICBtbTIsIG1tMAotCi0gIDsgRG93biBzaGlmdCBhbmQgdGhlbiBwYWNrLgotICBwc3JhdyAgICAgbW0xLCA2Ci0gIHBzcmF3ICAgICBtbTIsIDYKLSAgcGFja3Vzd2IgIG1tMSwgbW0yCi0KLSAgOyBVbnBhY2sKLSAgbW92cSAgICAgIG1tMCwgbW0xCi0gIHB4b3IgICAgICBtbTIsIG1tMgotICBwdW5wY2tsYncgbW0wLCBtbTIKLSAgcHVucGNraGJ3IG1tMSwgbW0yCi0KLSAgOyBBZGQgb25lIHRvIG91ciBhbHBoYSB2YWx1ZXMsIHRoaXMgaXMgYSBzb21ld2hhdCB1bmZvcnR1bmF0ZSBoYWNrOyB3aGlsZQotICA7IHRoZSBwYWNrL3VucGFjayBhYm92ZSBoYW5kbGUgc2F0dXJhdGluZyBhbnkgbmVnYXRpdmUgbnVtYmVycyB0byAwLCB0aGV5IGFsc28KLSAgOyB0cnVuY2F0ZSB0aGUgYWxwaGEgdmFsdWUgdG8gMjU1LiBUaGUgbWF0aCBhaGVhZCB3YW50cyB0byBwcm9kdWNlIHRoZSBzYW1lCi0gIDsgQVJHQiBhbHBoYSB2YWx1ZSBhcyB0aGUgc291cmNlIHBpeGVsIGluIFlVVkEsIGJ1dCB0aGlzIGRlcGVuZHMgb24gdGhlIGFscGhhCi0gIDsgdmFsdWUgaW4gfG1tMHwgYW5kIHxtbTF8IGJlaW5nIDI1NiwgKGxldCBBIGJlIHRoZSBzb3VyY2UgaW1hZ2UgYWxwaGEsCi0gIDsgMjU2ICogQSA+PiA4ID09IEEsIHdoZXJlYXMgMjU1ICogQSA+PiA4IGlzIG9mZiBieSBvbmUgZXhjZXB0IGF0IDApLgotICBtb3YgICAgICAgVEVNUHEsIDB4MDAwMTAwMDAKLSAgbW92ZCAgICAgIG1tMiwgVEVNUGQKLSAgcHNsbHEgICAgIG1tMiwgMzIKLSAgcGFkZHN3ICAgIG1tMCwgbW0yCi0gIHBhZGRzdyAgICBtbTEsIG1tMgotCi0gIDsgTXVsdGlwbHkgYnkgYWxwaGEgdmFsdWUsIHRoZW4gcmVwYWNrIGhpZ2ggYnl0ZXMgb2Ygd29yZHMuCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbQXFdCi0gIG1vdnEgICAgICBtbTIsIFtUQUJMRXEgKyA2MTQ0ICsgOCAqIFRFTVBxXQotICBwbXVsbHcgICAgbW0wLCBtbTIKLSAgcHNybHcgICAgIG1tMCwgOAotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW0FxICsgMV0KLSAgbW92cSAgICAgIG1tMiwgW1RBQkxFcSArIDYxNDQgKyA4ICogVEVNUHFdCi0gIGFkZCAgICAgICBBcSwgMgotICBwbXVsbHcgICAgbW0xLCBtbTIKLSAgcHNybHcgICAgIG1tMSwgOAotICBwYWNrdXN3YiAgbW0wLCBtbTEKLQotICBNT1ZRICAgICAgW0FSR0JxXSwgbW0wCi0gIGFkZCAgICAgICBBUkdCcSwgOAotCi0uY29udmVydGVuZDoKLSAgc3ViICAgICAgIGR3b3JkIFtyc3BdLCAyCi0gIGpucyAgICAgICAuY29udmVydGxvb3AKLQotICA7IElmIG51bWJlciBvZiBwaXhlbHMgaXMgb2RkIHRoZW4gY29tcHV0ZSBpdC4KLSAgYW5kICAgICAgIGR3b3JkIFtyc3BdLCAxCi0gIGp6ICAgICAgICAuY29udmVydGRvbmUKLQotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1VxXQotICBtb3ZxICAgICAgbW0wLCBbVEFCTEVxICsgMjA0OCArIDggKiBURU1QcV0KLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtWcV0KLSAgcGFkZHN3ICAgIG1tMCwgW1RBQkxFcSArIDQwOTYgKyA4ICogVEVNUHFdCi0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbWXFdCi0gIG1vdnEgICAgICBtbTEsIFtUQUJMRXEgKyA4ICogVEVNUHFdCi0gIHBhZGRzdyAgICBtbTEsIG1tMAotICBwc3JhdyAgICAgbW0xLCA2Ci0gIHBhY2t1c3diICBtbTEsIG1tMQotCi0gIDsgTXVsdGlwbHkgQVJHQiBieSBhbHBoYSB2YWx1ZS4KLSAgcHhvciAgICAgIG1tMCwgbW0wCi0gIHB1bnBja2xidyBtbTEsIG1tMAotCi0gIDsgU2VlIGFib3ZlIG5vdGUgYWJvdXQgdGhpcyBoYWNrLgotICBtb3YgICAgICAgVEVNUHEsIDB4MDAwMTAwMDAKLSAgbW92ZCAgICAgIG1tMCwgVEVNUGQKLSAgcHNsbHEgICAgIG1tMCwgMzIKLSAgcGFkZHN3ICAgIG1tMSwgbW0wCi0KLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtBcV0KLSAgbW92cSAgICAgIG1tMCwgW1RBQkxFcSArIDYxNDQgKyA4ICogVEVNUHFdCi0gIHBtdWxsdyAgICBtbTEsIG1tMAotICBwc3JsdyAgICAgbW0xLCA4Ci0gIHBhY2t1c3diICBtbTEsIG1tMQotCi0gIG1vdmQgICAgICBbQVJHQnFdLCBtbTEKLQotLmNvbnZlcnRkb25lOgotICBQT1AgICAgICAgVEFCTEVxCi0gIFJFVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9lbXB0eV9yZWdpc3Rlcl9zdGF0ZV9tbXguYXNtIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9lbXB0eV9yZWdpc3Rlcl9zdGF0ZV9tbXguYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDAyOGI1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvZW1wdHlfcmVnaXN0ZXJfc3RhdGVfbW14LmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTsgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi07IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSVpbmNsdWRlICJtZWRpYS9iYXNlL3NpbWQvbWVkaWFfZXhwb3J0LmFzbSIKLSVpbmNsdWRlICJ0aGlyZF9wYXJ0eS94ODZpbmMveDg2aW5jLmFzbSIKLQotOwotOyBUaGlzIGZpbGUgdXNlcyBNTVggaW5zdHJ1Y3Rpb25zIGFzIGFuIGFsdGVybmF0aXZlIHRvIF9tbV9lbXB0eSgpIHdoaWNoCi07IGlzIG5vdCBzdXBwb3J0ZWQgaW4gVmlzdWFsIFN0dWRpbyAyMDEwIG9uIHg2NC4KLTsgVE9ETyh3b2xlbmV0eik6IFVzZSBNTVggaW50cmluc2ljcyB3aGVuIGNvbXBpbGluZyB3aW42NCB3aXRoIFZpc3VhbAotOyBTdHVkaW8gMjAxMj8gaHR0cDovL2NyYnVnLmNvbS8xNzM0NTAKLTsKLSAgU0VDVElPTl9URVhUCi0gIENQVSAgICAgICBNTVgKLQotJWRlZmluZSBTWU1CT0wgRW1wdHlSZWdpc3RlclN0YXRlX01NWAotICBFWFBPUlQgICAgU1lNQk9MCi0gIGFsaWduICAgICBmdW5jdGlvbl9hbGlnbgotCi1tYW5nbGUoU1lNQk9MKToKLSAgZW1tcwotICByZXQKLQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9maWx0ZXJfeXV2LmggYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2ZpbHRlcl95dXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjMzEwNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2ZpbHRlcl95dXYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfU0lNRF9GSUxURVJfWVVWX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1NJTURfRklMVEVSX1lVVl9IXwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlc2UgbWV0aG9kcyBhcmUgZXhwb3J0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4gIExpYnJhcnkgdXNlcnMgc2hvdWxkCi0vLyBvbmx5IGNhbGwgdGhlIG1ldGhvZHMgbGlzdGVkIGluIHl1dl9jb252ZXJ0LmguCi0KLU1FRElBX0VYUE9SVCB2b2lkIEZpbHRlcllVVlJvd3NfQyh1aW50OF90KiB5YnVmLCBjb25zdCB1aW50OF90KiB5MF9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogeTFfcHRyLCBpbnQgc291cmNlX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc291cmNlX3lfZnJhY3Rpb24pOwotCi1NRURJQV9FWFBPUlQgdm9pZCBGaWx0ZXJZVVZSb3dzX1NTRTIodWludDhfdCogeWJ1ZiwgY29uc3QgdWludDhfdCogeTBfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHkxX3B0ciwgaW50IHNvdXJjZV93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNvdXJjZV95X2ZyYWN0aW9uKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfU0lNRF9GSUxURVJfWVVWX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2ZpbHRlcl95dXZfYy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvZmlsdGVyX3l1dl9jLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODNlYzAwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvZmlsdGVyX3l1dl9jLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3NpbWQvZmlsdGVyX3l1di5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXZvaWQgRmlsdGVyWVVWUm93c19DKHVpbnQ4X3QqIHlidWYsIGNvbnN0IHVpbnQ4X3QqIHkwX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHkxX3B0ciwgaW50IHNvdXJjZV93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc291cmNlX3lfZnJhY3Rpb24pIHsKLSAgdWludDhfdCB5MV9mcmFjdGlvbiA9IHNvdXJjZV95X2ZyYWN0aW9uOwotICB1aW50MTZfdCB5MF9mcmFjdGlvbiA9IDI1NiAtIHkxX2ZyYWN0aW9uOwotICB1aW50OF90KiBlbmQgPSB5YnVmICsgc291cmNlX3dpZHRoOwotICB1aW50OF90KiByb3VuZGVkX2VuZCA9IHlidWYgKyAoc291cmNlX3dpZHRoICYgfjcpOwotCi0gIHdoaWxlICh5YnVmIDwgcm91bmRlZF9lbmQpIHsKLSAgICB5YnVmWzBdID0gKHkwX3B0clswXSAqIHkwX2ZyYWN0aW9uICsgeTFfcHRyWzBdICogeTFfZnJhY3Rpb24pID4+IDg7Ci0gICAgeWJ1ZlsxXSA9ICh5MF9wdHJbMV0gKiB5MF9mcmFjdGlvbiArIHkxX3B0clsxXSAqIHkxX2ZyYWN0aW9uKSA+PiA4OwotICAgIHlidWZbMl0gPSAoeTBfcHRyWzJdICogeTBfZnJhY3Rpb24gKyB5MV9wdHJbMl0gKiB5MV9mcmFjdGlvbikgPj4gODsKLSAgICB5YnVmWzNdID0gKHkwX3B0clszXSAqIHkwX2ZyYWN0aW9uICsgeTFfcHRyWzNdICogeTFfZnJhY3Rpb24pID4+IDg7Ci0gICAgeWJ1Zls0XSA9ICh5MF9wdHJbNF0gKiB5MF9mcmFjdGlvbiArIHkxX3B0cls0XSAqIHkxX2ZyYWN0aW9uKSA+PiA4OwotICAgIHlidWZbNV0gPSAoeTBfcHRyWzVdICogeTBfZnJhY3Rpb24gKyB5MV9wdHJbNV0gKiB5MV9mcmFjdGlvbikgPj4gODsKLSAgICB5YnVmWzZdID0gKHkwX3B0cls2XSAqIHkwX2ZyYWN0aW9uICsgeTFfcHRyWzZdICogeTFfZnJhY3Rpb24pID4+IDg7Ci0gICAgeWJ1Zls3XSA9ICh5MF9wdHJbN10gKiB5MF9mcmFjdGlvbiArIHkxX3B0cls3XSAqIHkxX2ZyYWN0aW9uKSA+PiA4OwotICAgIHkwX3B0ciArPSA4OwotICAgIHkxX3B0ciArPSA4OwotICAgIHlidWYgKz0gODsKLSAgfQotCi0gIHdoaWxlICh5YnVmIDwgZW5kKSB7Ci0gICAgeWJ1ZlswXSA9ICh5MF9wdHJbMF0gKiB5MF9mcmFjdGlvbiArIHkxX3B0clswXSAqIHkxX2ZyYWN0aW9uKSA+PiA4OwotICAgICsreWJ1ZjsKLSAgICArK3kwX3B0cjsKLSAgICArK3kxX3B0cjsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvZmlsdGVyX3l1dl9zc2UyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X3NzZTIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMWE5ZTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X3NzZTIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNpbmNsdWRlIDxpbnRyaW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8ZW1taW50cmluLmg+Ci0jaW5jbHVkZSA8bW1pbnRyaW4uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9maWx0ZXJfeXV2LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdm9pZCBGaWx0ZXJZVVZSb3dzX1NTRTIodWludDhfdCogZGVzdCwgY29uc3QgdWludDhfdCogc3JjMCwgY29uc3QgdWludDhfdCogc3JjMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgdWludDhfdCBmcmFjdGlvbikgewotICBpbnQgcGl4ZWwgPSAwOwotCi0gIC8vIFByb2Nlc3MgdGhlIHVuYWxpZ25lZCBieXRlcyBmaXJzdC4KLSAgaW50IHVuYWxpZ25lZF93aWR0aCA9ICgxNiAtIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGVzdCkgJiAxNSkpICYgMTU7Ci0gIHdoaWxlIChwaXhlbCA8IHdpZHRoICYmIHBpeGVsIDwgdW5hbGlnbmVkX3dpZHRoKSB7Ci0gICAgZGVzdFtwaXhlbF0gPQotICAgICAgICAoc3JjMFtwaXhlbF0gKiAoMjU2IC0gZnJhY3Rpb24pICsgc3JjMVtwaXhlbF0gKiBmcmFjdGlvbikgPj4gODsKLSAgICArK3BpeGVsOwotICB9Ci0KLSAgX19tMTI4aSB6ZXJvID0gX21tX3NldHplcm9fc2kxMjgoKTsKLSAgX19tMTI4aSBzcmMxX2ZyYWN0aW9uID0gX21tX3NldDFfZXBpMTYoZnJhY3Rpb24pOwotICBfX20xMjhpIHNyYzBfZnJhY3Rpb24gPSBfbW1fc2V0MV9lcGkxNigyNTYgLSBmcmFjdGlvbik7Ci0gIGNvbnN0IF9fbTEyOGkqIHNyYzBfMTI4ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBfX20xMjhpKj4oc3JjMCArIHBpeGVsKTsKLSAgY29uc3QgX19tMTI4aSogc3JjMV8xMjggPSByZWludGVycHJldF9jYXN0PGNvbnN0IF9fbTEyOGkqPihzcmMxICsgcGl4ZWwpOwotICBfX20xMjhpKiBkZXN0MTI4ID0gcmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oZGVzdCArIHBpeGVsKTsKLSAgX19tMTI4aSogZW5kMTI4ID0gcmVpbnRlcnByZXRfY2FzdDxfX20xMjhpKj4oCi0gICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGVzdCArIHdpZHRoKSAmIH4xNSk7Ci0KLSAgd2hpbGUgKGRlc3QxMjggPCBlbmQxMjgpIHsKLSAgICBfX20xMjhpIHNyYzAgPSBfbW1fbG9hZHVfc2kxMjgoc3JjMF8xMjgpOwotICAgIF9fbTEyOGkgc3JjMSA9IF9tbV9sb2FkdV9zaTEyOChzcmMxXzEyOCk7Ci0gICAgX19tMTI4aSBzcmMyID0gX21tX3VucGFja2hpX2VwaTgoc3JjMCwgemVybyk7Ci0gICAgX19tMTI4aSBzcmMzID0gX21tX3VucGFja2hpX2VwaTgoc3JjMSwgemVybyk7Ci0gICAgc3JjMCA9IF9tbV91bnBhY2tsb19lcGk4KHNyYzAsIHplcm8pOwotICAgIHNyYzEgPSBfbW1fdW5wYWNrbG9fZXBpOChzcmMxLCB6ZXJvKTsKLSAgICBzcmMwID0gX21tX211bGxvX2VwaTE2KHNyYzAsIHNyYzBfZnJhY3Rpb24pOwotICAgIHNyYzEgPSBfbW1fbXVsbG9fZXBpMTYoc3JjMSwgc3JjMV9mcmFjdGlvbik7Ci0gICAgc3JjMiA9IF9tbV9tdWxsb19lcGkxNihzcmMyLCBzcmMwX2ZyYWN0aW9uKTsKLSAgICBzcmMzID0gX21tX211bGxvX2VwaTE2KHNyYzMsIHNyYzFfZnJhY3Rpb24pOwotICAgIHNyYzAgPSBfbW1fYWRkX2VwaTE2KHNyYzAsIHNyYzEpOwotICAgIHNyYzIgPSBfbW1fYWRkX2VwaTE2KHNyYzIsIHNyYzMpOwotICAgIHNyYzAgPSBfbW1fc3JsaV9lcGkxNihzcmMwLCA4KTsKLSAgICBzcmMyID0gX21tX3NybGlfZXBpMTYoc3JjMiwgOCk7Ci0gICAgc3JjMCA9IF9tbV9wYWNrdXNfZXBpMTYoc3JjMCwgc3JjMik7Ci0gICAgKmRlc3QxMjgrKyA9IHNyYzA7Ci0gICAgKytzcmMwXzEyODsKLSAgICArK3NyYzFfMTI4OwotICAgIHBpeGVsICs9IDE2OwotICB9Ci0KLSAgd2hpbGUgKHBpeGVsIDwgd2lkdGgpIHsKLSAgICBkZXN0W3BpeGVsXSA9Ci0gICAgICAgIChzcmMwW3BpeGVsXSAqICgyNTYgLSBmcmFjdGlvbikgKyBzcmMxW3BpeGVsXSAqIGZyYWN0aW9uKSA+PiA4OwotICAgICsrcGl4ZWw7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiX21teC5hc20gYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiX21teC5hc20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZTRmOTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguYXNtCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgInRoaXJkX3BhcnR5L3g4NmluYy94ODZpbmMuYXNtIgotCi07Ci07IFRoaXMgZmlsZSB1c2VzIE1NWCBpbnN0cnVjdGlvbnMuCi07Ci0gIFNFQ1RJT05fVEVYVAotICBDUFUgICAgICAgTU1YCi0KLTsgVXNlIG1vdnEgdG8gc2F2ZSB0aGUgb3V0cHV0LgotJWRlZmluZSBNT1ZRIG1vdnEKLQotOyB2b2lkIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19NTVgoY29uc3QgdWludDhfdCogeV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiX2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzb3VyY2VfZHgpOwotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MTZfdCogY29udmVydF90YWJsZSk7Ci0lZGVmaW5lIFNZTUJPTCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfTU1YCi0laW5jbHVkZSAibGluZWFyX3NjYWxlX3l1dl90b19yZ2JfbW14LmluYyIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvbGluZWFyX3NjYWxlX3l1dl90b19yZ2JfbW14LmluYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvbGluZWFyX3NjYWxlX3l1dl90b19yZ2JfbW14LmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhmNjJhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiX21teC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgIm1lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtIgotCi0gIEVYUE9SVCAgICBTWU1CT0wKLSAgYWxpZ24gICAgIGZ1bmN0aW9uX2FsaWduCi0KLW1hbmdsZShTWU1CT0wpOgotICAlYXNzaWduICAgc3RhY2tfb2Zmc2V0IDAKLQotOyBQYXJhbWV0ZXJzIGFyZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotOyAxLiBZIHBsYW5lCi07IDIuIFUgcGxhbmUKLTsgMy4gViBwbGFuZQotOyA0LiBBUkdCIGZyYW1lCi07IDUuIFdpZHRoCi07IDYuIFNvdXJjZSBkeAotOyA3LiBDb252ZXJzaW9uIGxvb2t1cCB0YWJsZQotCi1QUk9MT0dVRSAgNywgNywgMywgWSwgUjAsIFIxLCBBUkdCLCBSMiwgVEVNUCwgUjMKLQotJWlmIGdwcnNpemUgPT0gOAotJWRlZmluZSAgICAgV09SRF9TSVpFICAgUVdPUkQKLSVlbHNlCi0lZGVmaW5lICAgICBXT1JEX1NJWkUgICBEV09SRAotJWVuZGlmCi0KLTsgRGVmaW5lIHJlZ2lzdGVyIGFsaWFzZXMuCi0lZGVmaW5lICAgICBYcSAgICAgICAgICAgICAgICAgIFIxcSAgICAgOyBDdXJyZW50IFggcG9zaXRpb24KLSVkZWZpbmUgICAgIENPTVBMcSAgICAgICAgICAgICAgUjJxICAgICA7IENvbXBvbmVudCBBIHZhbHVlCi0lZGVmaW5lICAgICBDT01QTGQgICAgICAgICAgICAgIFIyZCAgICAgOyBDb21wb25lbnQgQSB2YWx1ZQotJWRlZmluZSAgICAgVV9BUkdfUkVHcSAgICAgICAgICBSMHEgICAgIDsgVSBwbGFuZSBhZGRyZXNzIGFyZ3VtZW50Ci0lZGVmaW5lICAgICBWX0FSR19SRUdxICAgICAgICAgIFIxcSAgICAgOyBWIHBsYW5lIGFkZHJlc3MgYXJndW1lbnQKLSVkZWZpbmUgICAgIFNPVVJDRV9EWF9BUkdfUkVHcSAgVEVNUHEgICA7IFNvdXJjZSBkeCBhcmd1bWVudAotJWRlZmluZSAgICAgV0lEVEhfQVJHX1JFR3EgICAgICBSMnEgICAgIDsgV2lkdGggYXJndW1lbnQKLQotJWRlZmluZSAgICAgQ09NUFJxICAgICAgICAgICAgICBSMHEgICAgIDsgQ29tcG9uZW50IEIgdmFsdWUKLSVkZWZpbmUgICAgIENPTVBSZCAgICAgICAgICAgICAgUjBkICAgICA7IENvbXBvbmVudCBCIHZhbHVlCi0lZGVmaW5lICAgICBVcSAgICAgICAgICAgICAgICAgIFIwcSAgICAgOyBVIHBsYW5lIGFkZHJlc3MKLSVkZWZpbmUgICAgIFZxICAgICAgICAgICAgICAgICAgUjBxICAgICA7IFYgcGxhbmUgYWRkcmVzcwotJWRlZmluZSAgICAgVV9QTEFORSAgICAgICAgICAgICBXT1JEX1NJWkUgW3JzcCArIDMgKiBncHJzaXplXQotJWRlZmluZSAgICAgVEFCTEUgICAgICAgICAgICAgICBSM3EgICAgIDsgQWRkcmVzcyBvZiB0aGUgdGFibGUKLQotOyBEZWZpbmVzIGZvciBzdGFjayB2YXJpYWJsZXMuCi0lZGVmaW5lICAgICBWX1BMQU5FICAgICAgICAgICAgIFdPUkRfU0laRSBbcnNwICsgMiAqIGdwcnNpemVdCi0lZGVmaW5lICAgICBTT1VSQ0VfRFggICAgICAgICAgIFdPUkRfU0laRSBbcnNwICsgZ3Byc2l6ZV0KLSVkZWZpbmUgICAgIFNPVVJDRV9XSURUSCAgICAgICAgV09SRF9TSVpFIFtyc3BdCi0KLTsgRGVmaW5lIHN0YWNrIHVzYWdlLgotICBQVVNIICAgICAgVV9BUkdfUkVHcQotICBQVVNIICAgICAgVl9BUkdfUkVHcQotICBQVVNIICAgICAgU09VUkNFX0RYX0FSR19SRUdxCi0gIGltdWwgICAgICBXSURUSF9BUkdfUkVHcSwgU09VUkNFX0RYX0FSR19SRUdxICA7IHNvdXJjZV93aWR0aCA9IHdpZHRoICogc291cmNlX2R4Ci0gIFBVU0ggICAgICBXSURUSF9BUkdfUkVHcQotCi0lbWFjcm8gRVBJTE9HVUUgMAotICBBREQgICAgICAgcnNwLCA0ICogZ3Byc2l6ZQotJWVuZG1hY3JvCi0KLSAgeG9yICAgICAgIFhxLCBYcSAgICAgICAgICAgICAgICAgICAgICAgOyB4ID0gMAotICBjbXAgICAgICAgU09VUkNFX0RYX0FSR19SRUdxLCAweDIwMDAwCi0gIGpsICAgICAgICAubHNjYWxlZW5kCi0gIG1vdiAgICAgICBYcSwgMHg4MDAwICAgICAgICAgICAgICAgICAgIDsgeCA9IDAuNSBmb3IgMS8yIG9yIGxlc3MKLSAgam1wICAgICAgIC5sc2NhbGVlbmQKLQotLmxzY2FsZWxvb3A6Ci0gIG1vdiAgICAgICBVcSwgVV9QTEFORQotCi07IERlZmluZSBtYWNyb3MgZm9yIHNjYWxpbmcgWVVWIGNvbXBvbmVudHMgc2luY2UgdGhleSBhcmUgcmV1c2VkLgotJW1hY3JvIFNDQUxFVVYgMQotICBtb3YgICAgICAgVEVNUHEsIFhxCi0gIHNhciAgICAgICBURU1QcSwgMHgxMQotICBtb3Z6eCAgICAgQ09NUExkLCBCWVRFIFslMSArIFRFTVBxXQotICBtb3Z6eCAgICAgQ09NUFJkLCBCWVRFIFslMSArIFRFTVBxICsgMV0KLSAgbW92ICAgICAgIFRFTVBxLCBYcQotICBhbmQgICAgICAgVEVNUHEsIDB4MWZmZmUKLSAgaW11bCAgICAgIENPTVBScSwgVEVNUHEKLSAgeG9yICAgICAgIFRFTVBxLCAweDFmZmZlCi0gIGltdWwgICAgICBDT01QTHEsIFRFTVBxCi0gIGFkZCAgICAgICBDT01QTHEsIENPTVBScQotICBzaHIgICAgICAgQ09NUExxLCAxNwotJWVuZG1hY3JvCi0gIFNDQUxFVVYgICBVcSAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgVXNlIHRoZSBhYm92ZSBtYWNybyB0byBzY2FsZSBVCi0gIG1vdnEgICAgICBtbTAsIFtUQUJMRSArIDIwNDggKyA4ICogQ09NUExxXQotCi0gIG1vdiAgICAgICBWcSwgVl9QTEFORSAgICAgICAgICAgICAgICAgIDsgUmVhZCBWIGFkZHJlc3MgZnJvbSBzdGFjawotICBTQ0FMRVVWICAgVnEgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzZSB0aGUgYWJvdmUgbWFjcm8gdG8gc2NhbGUgVgotICBwYWRkc3cgICAgbW0wLCBbVEFCTEUgKyA0MDk2ICsgOCAqIENPTVBMcV0KLQotJW1hY3JvIFNDQUxFWSAwCi0gIG1vdiAgICAgICBURU1QcSwgWHEKLSAgc2FyICAgICAgIFRFTVBxLCAweDEwCi0gIG1vdnp4ICAgICBDT01QTGQsIEJZVEUgW1lxICsgVEVNUHFdCi0gIG1vdnp4ICAgICBDT01QUmQsIEJZVEUgW1lxICsgVEVNUHEgKyAxXQotICBtb3YgICAgICAgVEVNUHEsIFhxCi0gIGFkZCAgICAgICBYcSwgU09VUkNFX0RYICAgICAgICAgICAgICAgICA7IEFkZCBzb3VyY2VfZHggZnJvbSBzdGFjawotICBhbmQgICAgICAgVEVNUHEsIDB4ZmZmZgotICBpbXVsICAgICAgQ09NUFJxLCBURU1QcQotICB4b3IgICAgICAgVEVNUHEsIDB4ZmZmZgotICBpbXVsICAgICAgQ09NUExxLCBURU1QcQotICBhZGQgICAgICAgQ09NUExxLCBDT01QUnEKLSAgc2hyICAgICAgIENPTVBMcSwgMTYKLSVlbmRtYWNybwotICBTQ0FMRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBVc2UgdGhlIGFib3ZlIG1hY3JvIHRvIHNjYWxlIFkxCi0gIG1vdnEgICAgICBtbTEsIFtUQUJMRSArIDggKiBDT01QTHFdCi0KLSAgY21wICAgICAgIFhxLCBTT1VSQ0VfV0lEVEggICAgICAgICAgICAgIDsgQ29tcGFyZSBzb3VyY2Vfd2lkdGggZnJvbSBzdGFjawotICBqZ2UgICAgICAgLmxzY2FsZWxhc3RwaXhlbAotCi0gIFNDQUxFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFVzZSB0aGUgYWJvdmUgbWFjcm8gdG8gc2FjbGUgWTIKLSAgbW92cSAgICAgIG1tMiwgW1RBQkxFICsgOCAqIENPTVBMcV0KLQotICBwYWRkc3cgICAgbW0xLCBtbTAKLSAgcGFkZHN3ICAgIG1tMiwgbW0wCi0gIHBzcmF3ICAgICBtbTEsIDB4NgotICBwc3JhdyAgICAgbW0yLCAweDYKLSAgcGFja3Vzd2IgIG1tMSwgbW0yCi0gIE1PVlEgICAgICBbQVJHQnFdLCBtbTEKLSAgYWRkICAgICAgIEFSR0JxLCAweDgKLQotLmxzY2FsZWVuZDoKLSAgY21wICAgICAgIFhxLCBTT1VSQ0VfV0lEVEggICAgIDsgQ29tcGFyZSBzb3VyY2Vfd2lkdGggZnJvbSBzdGFjawotICBqbCAgICAgICAgLmxzY2FsZWxvb3AKLSAgRVBJTE9HVUUKLSAgUkVUCi0KLS5sc2NhbGVsYXN0cGl4ZWw6Ci0gIHBhZGRzdyAgICBtbTEsIG1tMAotICBwc3JhdyAgICAgbW0xLCA2Ci0gIHBhY2t1c3diICBtbTEsIG1tMQotICBtb3ZkICAgICAgW0FSR0JxXSwgbW0xCi0gIEVQSUxPR1VFCi0gIFJFVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXhfeDY0LmFzbSBiL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvbGluZWFyX3NjYWxlX3l1dl90b19yZ2JfbW14X3g2NC5hc20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OWExZmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXhfeDY0LmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi07IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotOyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0laW5jbHVkZSAibWVkaWEvYmFzZS9zaW1kL21lZGlhX2V4cG9ydC5hc20iCi0laW5jbHVkZSAidGhpcmRfcGFydHkveDg2aW5jL3g4NmluYy5hc20iCi0KLTsKLTsgVGhpcyBmaWxlIHVzZXMgTU1YIGluc3RydWN0aW9ucy4KLTsKLSAgU0VDVElPTl9URVhUCi0gIENQVSAgICAgICBNTVgKLQotO3ZvaWQgTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X01NWF9YNjQoY29uc3QgdWludDhfdCogeV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB1X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiX2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCB3aWR0aCwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzb3VyY2VfZHgpOwotJWRlZmluZSBTWU1CT0wgTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X01NWF9YNjQKLSAgRVhQT1JUICAgIFNZTUJPTAotICBhbGlnbiAgICAgZnVuY3Rpb25fYWxpZ24KLQotbWFuZ2xlKFNZTUJPTCk6Ci0gICVhc3NpZ24gICBzdGFja19vZmZzZXQgMAotCi07IFBhcmFtZXRlcnMgYXJlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci07IDEuIFkgcGxhbmUKLTsgMi4gVSBwbGFuZQotOyAzLiBWIHBsYW5lCi07IDQuIEFSR0IgZnJhbWUKLTsgNS4gV2lkdGgKLTsgNi4gU291cmNlIGR4Ci07IDcuIENvbnZlcnNpb24gbG9va3VwIHRhYmxlCi0KLVBST0xPR1VFICA3LCA3LCAzLCBZLCBVLCBWLCBBUkdCLCBXSURUSCwgU09VUkNFX0RYLCBSMQotCi0lZGVmaW5lICAgICBUQUJMRXEgICAgIHIxMAotJWRlZmluZSAgICAgWHEgICAgICAgICByMTEKLSVkZWZpbmUgICAgIElOREVYcSAgICAgcjEyCi0lZGVmaW5lICAgICBDT01QUmQgICAgIHIxM2QKLSVkZWZpbmUgICAgIENPTVBScSAgICAgcjEzCi0lZGVmaW5lICAgICBGUkFDVElPTnEgIHIxNAotJWRlZmluZSAgICAgQ09NUEwgICAgICBSMQotJWRlZmluZSAgICAgQ09NUExxICAgICBSMXEKLSVkZWZpbmUgICAgIENPTVBMZCAgICAgUjFkCi0KLSAgUFVTSCAgICAgIFRBQkxFcQotICBQVVNIICAgICAgWHEKLSAgUFVTSCAgICAgIElOREVYcQotICBQVVNIICAgICAgQ09NUFJxCi0gIFBVU0ggICAgICBGUkFDVElPTnEKLQotJW1hY3JvIEVQSUxPR1VFIDAKLSAgUE9QICAgICAgIEZSQUNUSU9OcQotICBQT1AgICAgICAgQ09NUFJxCi0gIFBPUCAgICAgICBJTkRFWHEKLSAgUE9QICAgICAgIFhxCi0gIFBPUCAgICAgICBUQUJMRXEKLSVlbmRtYWNybwotCi0gIG1vdiAgICAgICBUQUJMRXEsIFIxcQotCi0gIGltdWwgICAgICBXSURUSHEsIFNPVVJDRV9EWHEgICAgICAgICAgIDsgc291cmNlX3dpZHRoID0gd2lkdGggKiBzb3VyY2VfZHgKLSAgeG9yICAgICAgIFhxLCBYcSAgICAgICAgICAgICAgICAgICAgICAgOyB4ID0gMAotICBjbXAgICAgICAgU09VUkNFX0RYcSwgMHgyMDAwMAotICBqbCAgICAgICAgLmxzY2FsZWVuZAotICBtb3YgICAgICAgWHEsIDB4ODAwMCAgICAgICAgICAgICAgICAgICA7IHggPSAwLjUgZm9yIDEvMiBvciBsZXNzCi0gIGptcCAgICAgICAubHNjYWxlZW5kCi0KLS5sc2NhbGVsb29wOgotICA7IEludGVycG9sYXRlIFUKLSAgbW92ICAgICAgIElOREVYcSwgWHEKLSAgc2FyICAgICAgIElOREVYcSwgMHgxMQotICBtb3Z6eCAgICAgQ09NUExkLCBCWVRFIFtVcSArIElOREVYcV0KLSAgbW92enggICAgIENPTVBSZCwgQllURSBbVXEgKyBJTkRFWHEgKyAxXQotICBtb3YgICAgICAgRlJBQ1RJT05xLCBYcQotICBhbmQgICAgICAgRlJBQ1RJT05xLCAweDFmZmZlCi0gIGltdWwgICAgICBDT01QUnEsIEZSQUNUSU9OcQotICB4b3IgICAgICAgRlJBQ1RJT05xLCAweDFmZmZlCi0gIGltdWwgICAgICBDT01QTHEsIEZSQUNUSU9OcQotICBhZGQgICAgICAgQ09NUExxLCBDT01QUnEKLSAgc2hyICAgICAgIENPTVBMcSwgMTcKLSAgbW92cSAgICAgIG1tMCwgW1RBQkxFcSArIDIwNDggKyA4ICogQ09NUExxXQotCi0gIDsgSW50ZXJwb2xhdGUgVgotICBtb3Z6eCAgICAgQ09NUExkLCBCWVRFIFtWcSArIElOREVYcV0KLSAgbW92enggICAgIENPTVBSZCwgQllURSBbVnEgKyBJTkRFWHEgKyAxXQotICA7IFRyaWNrIGhlcmUgdG8gaW11bCBDT01QTCBmaXJzdCB0aGVuIENPTVBSLgotICA7IFNhdmVzIHR3byBpbnN0cnVjdGlvbi4gOikKLSAgaW11bCAgICAgIENPTVBMcSwgRlJBQ1RJT05xCi0gIHhvciAgICAgICBGUkFDVElPTnEsIDB4MWZmZmUKLSAgaW11bCAgICAgIENPTVBScSwgRlJBQ1RJT05xCi0gIGFkZCAgICAgICBDT01QTHEsIENPTVBScQotICBzaHIgICAgICAgQ09NUExxLCAxNwotICBwYWRkc3cgICAgbW0wLCBbVEFCTEVxICsgNDA5NiArIDggKiBDT01QTHFdCi0KLSAgOyBJbnRlcnBvbGF0ZSBmaXJzdCBZMS4KLSAgbGVhICAgICAgIElOREVYcSwgW1hxICsgU09VUkNFX0RYcV0gICA7IElOREVYcSBub3cgcG9pbnRzIHRvIG5leHQgcGl4ZWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBYcSBwb2ludHMgdG8gY3VycmVudCBwaXhlbC4KLSAgbW92ICAgICAgIEZSQUNUSU9OcSwgWHEKLSAgc2FyICAgICAgIFhxLCAweDEwCi0gIG1vdnp4ICAgICBDT01QTGQsIEJZVEUgW1lxICsgWHFdCi0gIG1vdnp4ICAgICBDT01QUmQsIEJZVEUgW1lxICsgWHEgKyAxXQotICBhbmQgICAgICAgRlJBQ1RJT05xLCAweGZmZmYKLSAgaW11bCAgICAgIENPTVBScSwgRlJBQ1RJT05xCi0gIHhvciAgICAgICBGUkFDVElPTnEsIDB4ZmZmZgotICBpbXVsICAgICAgQ09NUExxLCBGUkFDVElPTnEKLSAgYWRkICAgICAgIENPTVBMcSwgQ09NUFJxCi0gIHNociAgICAgICBDT01QTHEsIDE2Ci0gIG1vdnEgICAgICBtbTEsIFtUQUJMRXEgKyA4ICogQ09NUExxXQotCi0gIDsgSW50ZXJwb2xhdGUgWTIgaWYgYXZhaWxhYmxlLgotICBjbXAgICAgICAgSU5ERVhxLCBXSURUSHEKLSAgamdlICAgICAgIC5sc2NhbGVsYXN0cGl4ZWwKLQotICBsZWEgICAgICAgWHEsIFtJTkRFWHEgKyBTT1VSQ0VfRFhxXSAgICA7IFhxIHBvaW50cyB0byBuZXh0IHBpeGVsLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IElOREVYcSBwb2ludHMgdG8gY3VycmVudCBwaXhlbC4KLSAgbW92ICAgICAgIEZSQUNUSU9OcSwgSU5ERVhxCi0gIHNhciAgICAgICBJTkRFWHEsIDB4MTAKLSAgbW92enggICAgIENPTVBMZCwgQllURSBbWXEgKyBJTkRFWHFdCi0gIG1vdnp4ICAgICBDT01QUmQsIEJZVEUgW1lxICsgSU5ERVhxICsgMV0KLSAgYW5kICAgICAgIEZSQUNUSU9OcSwgMHhmZmZmCi0gIGltdWwgICAgICBDT01QUnEsIEZSQUNUSU9OcQotICB4b3IgICAgICAgRlJBQ1RJT05xLCAweGZmZmYKLSAgaW11bCAgICAgIENPTVBMcSwgRlJBQ1RJT05xCi0gIGFkZCAgICAgICBDT01QTHEsIENPTVBScQotICBzaHIgICAgICAgQ09NUExxLCAxNgotICBtb3ZxICAgICAgbW0yLCBbVEFCTEVxICsgOCAqIENPTVBMcV0KLQotICBwYWRkc3cgICAgbW0xLCBtbTAKLSAgcGFkZHN3ICAgIG1tMiwgbW0wCi0gIHBzcmF3ICAgICBtbTEsIDB4NgotICBwc3JhdyAgICAgbW0yLCAweDYKLSAgcGFja3Vzd2IgIG1tMSwgbW0yCi0gIG1vdm50cSAgICBbQVJHQnFdLCBtbTEKLSAgYWRkICAgICAgIEFSR0JxLCAweDgKLQotLmxzY2FsZWVuZDoKLSAgY21wICAgICAgIFhxLCBXSURUSHEKLSAgamwgICAgICAgIC5sc2NhbGVsb29wCi0gIGptcCAgICAgICAuZXBpbG9ndWUKLQotLmxzY2FsZWxhc3RwaXhlbDoKLSAgcGFkZHN3ICAgIG1tMSwgbW0wCi0gIHBzcmF3ICAgICBtbTEsIDYKLSAgcGFja3Vzd2IgIG1tMSwgbW0xCi0gIG1vdmQgICAgICBbQVJHQnFdLCBtbTEKLQotLmVwaWxvZ3VlCi0gIEVQSUxPR1VFCi0gIFJFVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmVlOWFjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvbGluZWFyX3NjYWxlX3l1dl90b19yZ2Jfc3NlLmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTsgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi07IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSVpbmNsdWRlICJ0aGlyZF9wYXJ0eS94ODZpbmMveDg2aW5jLmFzbSIKLQotOwotOyBUaGlzIGZpbGUgdXNlcyBNTVggYW5kIFNTRSBpbnN0cnVjdGlvbnMuCi07Ci0gIFNFQ1RJT05fVEVYVAotICBDUFUgICAgICAgTU1YLCBTU0UKLQotOyBVc2UgbW92cSB0byBzYXZlIHRoZSBvdXRwdXQuCi0lZGVmaW5lIE1PVlEgbW92bnRxCi0KLTsgdm9pZCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc291cmNlX2R4KTsKLSVkZWZpbmUgU1lNQk9MIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19TU0UKLSVpbmNsdWRlICJsaW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguaW5jIgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODJiZThkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvbWVkaWFfZXhwb3J0LmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTsgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLTsKLTsgQSBzZXQgb2YgaGVscGVyIG1hY3JvcyBmb3IgY29udHJvbGxpbmcgc3ltYm9sIHZpc2liaWxpdHkuCi07Ci0KLSVpZm5kZWYgTUVESUFfQkFTRV9TSU1EX01FRElBX0VYUE9SVF9BU01fCi0lZGVmaW5lIE1FRElBX0JBU0VfU0lNRF9NRURJQV9FWFBPUlRfQVNNXwotCi07IE5lY2Vzc2FyeSBmb3IgdGhlIG1hbmdsZSgpIG1hY3JvLgotJWluY2x1ZGUgInRoaXJkX3BhcnR5L3g4NmluYy94ODZpbmMuYXNtIgotCi07Ci07IFBSSVZBVEUKLTsgQSBmbGFnIHJlcHJlc2VudGluZyB0aGUgc3BlY2lmaWVkIHN5bWJvbCBpcyBhIHByaXZhdGUgc3ltYm9sLiBUaGlzIGRlZmluZSBhZGRzCi07IGEgaGlkZGVuIGZsYWcgb24gTGludXggYW5kIGEgcHJpdmF0ZV9leHRlcm4gZmxhZyBvbiBNYWMuIChXZSBjYW4gdXNlIHRoaXMKLTsgcHJpdmF0ZV9leHRlcm4gZmxhZyBvbmx5IG9uIHRoZSBsYXRlc3QgeWFzbS4pCi07Ci0laWZkZWYgTUFDSE8KLSVkZWZpbmUgUFJJVkFURSA6cHJpdmF0ZV9leHRlcm4KLSVlbGlmZGVmIEVMRgotJWRlZmluZSBQUklWQVRFIDpoaWRkZW4KLSVlbHNlCi0lZGVmaW5lIFBSSVZBVEUKLSVlbmRpZgotCi07Ci07IEVYUE9SVCAlMQotOyBEZXNpZ25hdGVzIGEgc3ltYm9sIGFzIFBSSVZBVEUgaWYgRVhQT1JUX1NZTUJPTFMgaXMgbm90IHNldC4KLTsKLSVtYWNybyBFWFBPUlQgMQotJWlmZGVmIEVYUE9SVF9TWU1CT0xTCi1nbG9iYWwgbWFuZ2xlKCUxKQotCi07IFdpbmRvd3MgbmVlZHMgYW4gYWRkaXRpb25hbCBleHBvcnQgZGVjbGFyYXRpb24uCi0laWZpZG4gX19PVVRQVVRfRk9STUFUX18sd2luMzIKLWV4cG9ydCBtYW5nbGUoJTEpCi0lZWxpZmlkbiBfX09VVFBVVF9GT1JNQVRfXyx3aW42NAotZXhwb3J0IG1hbmdsZSglMSkKLSVlbmRpZgotCi0lZWxzZQotZ2xvYmFsIG1hbmdsZSglMSkgUFJJVkFURQotJWVuZGlmCi0lZW5kbWFjcm8KLQotJWVuZGlmICA7IE1FRElBX0JBU0VfU0lNRF9NRURJQV9FWFBPUlRfQVNNXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX21teC5hc20gYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2JfbW14LmFzbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIxYzEyYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2JfbW14LmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTsgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi07IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSVpbmNsdWRlICJ0aGlyZF9wYXJ0eS94ODZpbmMveDg2aW5jLmFzbSIKLQotOwotOyBUaGlzIGZpbGUgdXNlcyBNTVggaW5zdHJ1Y3Rpb25zLgotOwotICBTRUNUSU9OX1RFWFQKLSAgQ1BVICAgICAgIE1NWAotCi07IFVzZSBtb3ZxIHRvIHNhdmUgdGhlIG91dHB1dC4KLSVkZWZpbmUgTU9WUSBtb3ZxCi0KLTsgdm9pZCBTY2FsZVlVVlRvUkdCMzJSb3dfTU1YKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc291cmNlX2R4KTsKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotJWRlZmluZSBTWU1CT0wgU2NhbGVZVVZUb1JHQjMyUm93X01NWAotJWluY2x1ZGUgInNjYWxlX3l1dl90b19yZ2JfbW14LmluYyIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9tbXguaW5jIGIvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX21teC5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNzgyY2IuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX21teC5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi07IENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLTsgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotOyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0laW5jbHVkZSAibWVkaWEvYmFzZS9zaW1kL21lZGlhX2V4cG9ydC5hc20iCi0KLSAgRVhQT1JUICAgIFNZTUJPTAotICBhbGlnbiAgICAgZnVuY3Rpb25fYWxpZ24KLQotbWFuZ2xlKFNZTUJPTCk6Ci0gICVhc3NpZ24gICBzdGFja19vZmZzZXQgMAotCi07IFBhcmFtZXRlcnMgYXJlIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Ci07IDEuIFkgcGxhbmUKLTsgMi4gVSBwbGFuZQotOyAzLiBWIHBsYW5lCi07IDQuIEFSR0IgZnJhbWUKLTsgNS4gV2lkdGgKLTsgNi4gU291cmNlIGR4Ci07IDcuIExvb2t1cCB0YWJsZSBhZGRyZXNzCi0KLVBST0xPR1VFICA3LCA3LCAzLCBZLCBVLCBWLCBBUkdCLCBSMSwgUjIsIFRFTVAKLQotJWlmZGVmIEFSQ0hfWDg2XzY0Ci0lZGVmaW5lICAgICBXT1JEX1NJWkUgICBRV09SRAotJWVsc2UKLSVkZWZpbmUgICAgIFdPUkRfU0laRSAgIERXT1JECi0lZW5kaWYKLQotICBQVVNIICAgICAgUjFxICA7IFdpZHRoCi0gIFBVU0ggICAgICBSMnEgIDsgU291cmNlIGR4Ci0KLSVkZWZpbmUgICAgIFNPVVJDRV9EWCAgIFdPUkRfU0laRSBbcnNwXQotCi0gIG1vdiAgICAgICBSMXEsIFRFTVBxCi0KLSVkZWZpbmUgICAgIFdJRFRIICAgICAgIFdPUkRfU0laRSBbcnNwICsgZ3Byc2l6ZV0KLSVkZWZpbmUgICAgIFRBQkxFICAgICAgIFIxcQotJWRlZmluZSAgICAgWHEgICAgICAgICAgUjJxCi0KLSAgOyBTZXQgWHEgaW5kZXggdG8gMC4KLSAgeG9yICAgICAgIFhxLCBYcQotICBqbXAgICAgICAgLnNjYWxlZW5kCi0KLS5zY2FsZWxvb3A6Ci0gIG1vdiAgICAgICBURU1QcSwgWHEKLSAgc2FyICAgICAgIFRFTVBxLCAxNwotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1VxICsgVEVNUHFdCi0gIG1vdnEgICAgICBtbTAsIFtUQUJMRSArIDIwNDggKyA4ICogVEVNUHFdCi0gIG1vdiAgICAgICBURU1QcSwgWHEKLSAgc2FyICAgICAgIFRFTVBxLCAxNwotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1ZxICsgVEVNUHFdCi0gIHBhZGRzdyAgICBtbTAsIFtUQUJMRSArIDQwOTYgKyA4ICogVEVNUHFdCi0gIG1vdiAgICAgICBURU1QcSwgWHEKLSAgYWRkICAgICAgIFhxLCBTT1VSQ0VfRFgKLSAgc2FyICAgICAgIFRFTVBxLCAxNgotICBtb3Z6eCAgICAgVEVNUGQsIEJZVEUgW1lxICsgVEVNUHFdCi0gIG1vdnEgICAgICBtbTEsIFtUQUJMRSArIDggKiBURU1QcV0KLSAgbW92ICAgICAgIFRFTVBxLCBYcQotICBhZGQgICAgICAgWHEsIFNPVVJDRV9EWAotICBzYXIgICAgICAgVEVNUHEsIDE2Ci0gIG1vdnp4ICAgICBURU1QZCwgQllURSBbWXEgKyBURU1QcV0KLSAgbW92cSAgICAgIG1tMiwgW1RBQkxFICsgOCAqIFRFTVBxXQotICBwYWRkc3cgICAgbW0xLCBtbTAKLSAgcGFkZHN3ICAgIG1tMiwgbW0wCi0gIHBzcmF3ICAgICBtbTEsIDYKLSAgcHNyYXcgICAgIG1tMiwgNgotICBwYWNrdXN3YiAgbW0xLCBtbTIKLSAgTU9WUSAgICAgIFFXT1JEIFtBUkdCcV0sIG1tMQotICBhZGQgICAgICAgQVJHQnEsIDgKLQotLnNjYWxlZW5kOgotICBzdWIgICAgICAgV0lEVEgsIDIKLSAgam5zICAgICAgIC5zY2FsZWxvb3AKLQotICBhbmQgICAgICAgV0lEVEgsIDEgICAgICAgICAgICAgOyBvZGQgbnVtYmVyIG9mIHBpeGVscz8KLSAganogICAgICAgIC5zY2FsZWRvbmUKLQotICBtb3YgICAgICAgVEVNUHEsIFhxCi0gIHNhciAgICAgICBURU1QcSwgMTcKLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtVcSArIFRFTVBxXQotICBtb3ZxICAgICAgbW0wLCBbVEFCTEUgKyAyMDQ4ICsgOCAqIFRFTVBxXQotICBtb3YgICAgICAgVEVNUHEsIFhxCi0gIHNhciAgICAgICBURU1QcSwgMTcKLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtWcSArIFRFTVBxXQotICBwYWRkc3cgICAgbW0wLCBbVEFCTEUgKyA0MDk2ICsgOCAqIFRFTVBxXQotICBtb3YgICAgICAgVEVNUHEsIFhxCi0gIHNhciAgICAgICBURU1QcSwgMTYKLSAgbW92enggICAgIFRFTVBkLCBCWVRFIFtZcSArIFRFTVBxXQotICBtb3ZxICAgICAgbW0xLCBbVEFCTEUgKyA4ICogVEVNUHFdCi0gIHBhZGRzdyAgICBtbTEsIG1tMAotICBwc3JhdyAgICAgbW0xLCA2Ci0gIHBhY2t1c3diICBtbTEsIG1tMQotICBtb3ZkICAgICAgRFdPUkQgW0FSR0JxXSwgbW0xCi0KLS5zY2FsZWRvbmU6Ci0gIEFERCAgICAgICByc3AsIDIgKiBncHJzaXplCi0gIFJFVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX3NzZS5hc20gYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2Jfc3NlLmFzbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRlMDExMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2Jfc3NlLmFzbQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTsgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi07IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSVpbmNsdWRlICJ0aGlyZF9wYXJ0eS94ODZpbmMveDg2aW5jLmFzbSIKLQotOwotOyBUaGlzIGZpbGUgdXNlcyBNTVggYW5kIFNTRSBpbnN0cnVjdGlvbnMuCi07Ci0gIFNFQ1RJT05fVEVYVAotICBDUFUgICAgICAgTU1YLCBTU0UKLQotOyBVc2UgbW92cSB0byBzYXZlIHRoZSBvdXRwdXQuCi0lZGVmaW5lIE1PVlEgbW92bnRxCi0KLTsgdm9pZCBTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKGNvbnN0IHVpbnQ4X3QqIHlfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHJnYl9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgc291cmNlX2R4KTsKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGNvbnZlcnRfdGFibGUpOwotJWRlZmluZSBTWU1CT0wgU2NhbGVZVVZUb1JHQjMyUm93X1NTRQotJWluY2x1ZGUgInNjYWxlX3l1dl90b19yZ2JfbW14LmluYyIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9zc2UyX3g2NC5hc20gYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2Jfc3NlMl94NjQuYXNtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzUyYjhkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9zc2UyX3g2NC5hc20KKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotOyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLTsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotJWluY2x1ZGUgIm1lZGlhL2Jhc2Uvc2ltZC9tZWRpYV9leHBvcnQuYXNtIgotJWluY2x1ZGUgInRoaXJkX3BhcnR5L3g4NmluYy94ODZpbmMuYXNtIgotCi07Ci07IFRoaXMgZmlsZSB1c2VzIE1NWCwgU1NFMiBhbmQgaW5zdHJ1Y3Rpb25zLgotOwotICBTRUNUSU9OX1RFWFQKLSAgQ1BVICAgICAgIFNTRTIKLQotOyB2b2lkIFNjYWxlWVVWVG9SR0IzMlJvd19TU0UyX1g2NChjb25zdCB1aW50OF90KiB5X2J1ZiwKLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdV9idWYsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiByZ2JfYnVmLAotOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJkaWZmX3Qgd2lkdGgsCi07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzb3VyY2VfZHgpOwotJWRlZmluZSBTWU1CT0wgU2NhbGVZVVZUb1JHQjMyUm93X1NTRTJfWDY0Ci0gIEVYUE9SVCAgICBTWU1CT0wKLSAgYWxpZ24gICAgIGZ1bmN0aW9uX2FsaWduCi0KLW1hbmdsZShTWU1CT0wpOgotICAlYXNzaWduICAgc3RhY2tfb2Zmc2V0IDAKLQotOyBQYXJhbWV0ZXJzIGFyZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotOyAxLiBZIHBsYW5lCi07IDIuIFUgcGxhbmUKLTsgMy4gViBwbGFuZQotOyA0LiBBUkdCIGZyYW1lCi07IDUuIFdpZHRoCi07IDYuIFNvdXJjZSBkeAotOyA3LiBDb252ZXJ0IHRhYmxlCi0KLVBST0xPR1VFICA3LCA3LCAzLCBZLCBVLCBWLCBBUkdCLCBXSURUSCwgU09VUkNFX0RYLCBSMQotCi0lZGVmaW5lICAgICBUQUJMRXEgICByMTAKLSVkZWZpbmUgICAgIFhxICAgICAgIHIxMQotJWRlZmluZSAgICAgSU5ERVhxICAgcjEyCi0lZGVmaW5lICAgICBDT01QcSAgICBSMXEKLSVkZWZpbmUgICAgIENPTVBkICAgIFIxZAotCi0gIFBVU0ggICAgICByMTAKLSAgUFVTSCAgICAgIHIxMQotICBQVVNIICAgICAgcjEyCi0KLSAgbW92IFRBQkxFcSwgUjFxCi0KLSAgOyBTZXQgWHEgaW5kZXggdG8gMC4KLSAgeG9yICAgICAgIFhxLCBYcQotICBqbXAgICAgICAgLnNjYWxlZW5kCi0KLS5zY2FsZWxvb3A6Ci0gIDsgUmVhZCBVViBwaXhlbHMuCi0gIG1vdiAgICAgICBJTkRFWHEsIFhxCi0gIHNhciAgICAgICBJTkRFWHEsIDE3Ci0gIG1vdnp4ICAgICBDT01QZCwgQllURSBbVXEgKyBJTkRFWHFdCi0gIG1vdnEgICAgICB4bW0wLCBbVEFCTEVxICsgMjA0OCArIDggKiBDT01QcV0KLSAgbW92enggICAgIENPTVBkLCBCWVRFIFtWcSArIElOREVYcV0KLSAgbW92cSAgICAgIHhtbTEsIFtUQUJMRXEgKyA0MDk2ICsgOCAqIENPTVBxXQotCi0gIDsgUmVhZCBmaXJzdCBZIHBpeGVsLgotICBsZWEgICAgICAgSU5ERVhxLCBbWHEgKyBTT1VSQ0VfRFhxXSA7IElOREVYcSBub3dzIHBvaW50cyB0byBuZXh0IHBpeGVsLgotICBzYXIgICAgICAgWHEsIDE2Ci0gIG1vdnp4ICAgICBDT01QZCwgQllURSBbWXEgKyBYcV0KLSAgcGFkZHN3ICAgIHhtbTAsIHhtbTEJCSAgICAgIDsgSGlkZSBhIEFERCBhZnRlciBtZW1vcnkgbG9hZC4KLSAgbW92cSAgICAgIHhtbTEsIFtUQUJMRXEgKyA4ICogQ09NUHFdCi0KLSAgOyAgUmVhZCBuZXh0IFkgcGl4ZWwuCi0gIGxlYSAgICAgICBYcSwgW0lOREVYcSArIFNPVVJDRV9EWHFdIDsgWHEgbm93IHBvaW50cyB0byBuZXh0IHBpeGVsLgotICBzYXIgICAgICAgSU5ERVhxLCAxNgotICBtb3Z6eCAgICAgQ09NUGQsIEJZVEUgW1lxICsgSU5ERVhxXQotICBtb3ZxICAgICAgeG1tMiwgW1RBQkxFcSArIDggKiBDT01QcV0KLSAgcGFkZHN3ICAgIHhtbTEsIHhtbTAKLSAgcGFkZHN3ICAgIHhtbTIsIHhtbTAKLSAgc2h1ZnBzICAgIHhtbTEsIHhtbTIsIDB4NDQgICAgICAgICAgOyBKb2luIHR3byBwaXhlbHMgaW50byBvbmUgWE1NIHJlZ2lzdGVyCi0gIHBzcmF3ICAgICB4bW0xLCA2Ci0gIHBhY2t1c3diICB4bW0xLCB4bW0xCi0gIG1vdnEgICAgICBRV09SRCBbQVJHQnFdLCB4bW0xCi0gIGFkZCAgICAgICBBUkdCcSwgOAotCi0uc2NhbGVlbmQ6Ci0gIHN1YiAgICAgICBXSURUSHEsIDIKLSAgam5zICAgICAgIC5zY2FsZWxvb3AKLQotICBhbmQgICAgICAgV0lEVEhxLCAxICAgICAgICAgICAgICAgICA7IG9kZCBudW1iZXIgb2YgcGl4ZWxzPwotICBqeiAgICAgICAgLnNjYWxlZG9uZQotCi0gIDsgUmVhZCBVIFYgY29tcG9uZW50cy4KLSAgbW92ICAgICAgIElOREVYcSwgWHEKLSAgc2FyICAgICAgIElOREVYcSwgMTcKLSAgbW92enggICAgIENPTVBkLCBCWVRFIFtVcSArIElOREVYcV0KLSAgbW92cSAgICAgIHhtbTAsIFtUQUJMRXEgKyAyMDQ4ICsgOCAqIENPTVBxXQotICBtb3Z6eCAgICAgQ09NUGQsIEJZVEUgW1ZxICsgSU5ERVhxXQotICBtb3ZxICAgICAgeG1tMSwgW1RBQkxFcSArIDQwOTYgKyA4ICogQ09NUHFdCi0gIHBhZGRzdyAgICB4bW0wLCB4bW0xCi0KLSAgOyBSZWFkIG9uZSBZIGNvbXBvbmVudC4KLSAgbW92ICAgICAgIElOREVYcSwgWHEKLSAgc2FyICAgICAgIElOREVYcSwgMTYKLSAgbW92enggICAgIENPTVBkLCBCWVRFIFtZcSArIElOREVYcV0KLSAgbW92cSAgICAgIHhtbTEsIFtUQUJMRXEgKyA4ICogQ09NUHFdCi0gIHBhZGRzdyAgICB4bW0xLCB4bW0wCi0gIHBzcmF3ICAgICB4bW0xLCA2Ci0gIHBhY2t1c3diICB4bW0xLCB4bW0xCi0gIG1vdmQgICAgICBEV09SRCBbQVJHQnFdLCB4bW0xCi0KLS5zY2FsZWRvbmU6Ci0gIFBPUCAgICAgICByMTIKLSAgUE9QICAgICAgIHIxMQotICBQT1AgICAgICAgcjEwCi0gIFJFVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC94Y29kZV9oYWNrLmMgYi9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3hjb2RlX2hhY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUwYjYxNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zaW1kL3hjb2RlX2hhY2suYworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gWENvZGUgZG9lc24ndCB3YW50IHRvIGxpbmsgYSBwdXJlIGFzc2VtYmx5IHRhcmdldCBhbmQgd2lsbCBmYWlsCi0vLyB0byBsaW5rIHdoZW4gaXQgY3JlYXRlcyBhbiBlbXB0eSBmaWxlIGxpc3QuICBTbyBhZGQgYSBkdW1teSBmaWxlCi0vLyBrZWVwIHRoZSBsaW5rZXIgaGFwcHkuICBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNTcwNzMKLWludCB4Y29kZV9zdWNrcygpIHsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfcGxheWVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5jYwppbmRleCA0N2FkNTJiLi4xMDM3ZTNmIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfcGxheWVyLmNjCisrKyBiL2NvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF9wbGF5ZXIuY2MKQEAgLTE0LDYgKzE0LDggQEAKIAogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF9wbGF5ZXIuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpb21hbmlwPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKQEAgLTIyLDggKzI0LDEwIEBACiAjaW5jbHVkZSAiYmFzZS9sb2NhdGlvbi5oIgogI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgogI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9mb3JtYXRfc3VwcG9ydF9xdWVyeV9tZXRyaWNzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAKQEAgLTExNyw5ICsxMjEsOSBAQAogICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIHRhc2tfcnVubmVyLAogICAgIGNvbnN0IEdldERlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyRnVuYyYKICAgICAgICAgZ2V0X2RlY29kZV90YXJnZXRfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl9mdW5jLAotICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnLAotICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnLCBTYldpbmRvdyB3aW5kb3csCi0gICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwgSG9zdCogaG9zdCwKKyAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX21pbWVfdHlwZSwKKyAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywgY29uc3Qgc3RkOjpzdHJpbmcmIHZpZGVvX21pbWVfdHlwZSwKKyAgICBTYldpbmRvdyB3aW5kb3csIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sIEhvc3QqIGhvc3QsCiAgICAgU2JQbGF5ZXJTZXRCb3VuZHNIZWxwZXIqIHNldF9ib3VuZHNfaGVscGVyLCBib29sIGFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kLAogICAgIGJvb2wgcHJlZmVyX2RlY29kZV90b190ZXh0dXJlLAogICAgIFZpZGVvRnJhbWVQcm92aWRlciogY29uc3QgdmlkZW9fZnJhbWVfcHJvdmlkZXIsCkBAIC0xNTMsMTAgKzE1NywxMCBAQAogICB2aWRlb19zYW1wbGVfaW5mb18uY29kZWMgPSBrU2JNZWRpYVZpZGVvQ29kZWNOb25lOwogCiAgIGlmIChhdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKSB7Ci0gICAgVXBkYXRlQXVkaW9Db25maWcoYXVkaW9fY29uZmlnKTsKKyAgICBVcGRhdGVBdWRpb0NvbmZpZyhhdWRpb19jb25maWcsIGF1ZGlvX21pbWVfdHlwZSk7CiAgIH0KICAgaWYgKHZpZGVvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpIHsKLSAgICBVcGRhdGVWaWRlb0NvbmZpZyh2aWRlb19jb25maWcpOworICAgIFVwZGF0ZVZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZywgdmlkZW9fbWltZV90eXBlKTsKICAgfQogCiAgIG91dHB1dF9tb2RlXyA9IENvbXB1dGVTYlBsYXllck91dHB1dE1vZGUocHJlZmVyX2RlY29kZV90b190ZXh0dXJlKTsKQEAgLTE4NSw4ICsxODksOCBAQAogICB9CiB9CiAKLXZvaWQgU3RhcmJvYXJkUGxheWVyOjpVcGRhdGVBdWRpb0NvbmZpZygKLSAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZykgewordm9pZCBTdGFyYm9hcmRQbGF5ZXI6OlVwZGF0ZUF1ZGlvQ29uZmlnKGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUpIHsKICAgRENIRUNLKHRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKICAgRENIRUNLKGF1ZGlvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwogCkBAIC0xOTQsMTIgKzE5OCwxNCBAQAogICAgICAgICAgICAgPDwgYXVkaW9fY29uZmlnLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwogCiAgIGF1ZGlvX2NvbmZpZ18gPSBhdWRpb19jb25maWc7Ci0gIGF1ZGlvX3NhbXBsZV9pbmZvXyA9IE1lZGlhQXVkaW9Db25maWdUb1NiTWVkaWFBdWRpb1NhbXBsZUluZm8oYXVkaW9fY29uZmlnXyk7CisgIGF1ZGlvX21pbWVfdHlwZV8gPSBtaW1lX3R5cGU7CisgIGF1ZGlvX3NhbXBsZV9pbmZvXyA9IE1lZGlhQXVkaW9Db25maWdUb1NiTWVkaWFBdWRpb1NhbXBsZUluZm8oCisgICAgICBhdWRpb19jb25maWdfLCBhdWRpb19taW1lX3R5cGVfLmNfc3RyKCkpOwogICBMT0coSU5GTykgPDwgIkNvbnZlcnRlZCB0byBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvIC0tICIgPDwgYXVkaW9fc2FtcGxlX2luZm9fOwogfQogCi12b2lkIFN0YXJib2FyZFBsYXllcjo6VXBkYXRlVmlkZW9Db25maWcoCi0gICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcpIHsKK3ZvaWQgU3RhcmJvYXJkUGxheWVyOjpVcGRhdGVWaWRlb0NvbmZpZyhjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKSB7CiAgIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CiAgIERDSEVDSyh2aWRlb19jb25maWcuSXNWYWxpZENvbmZpZygpKTsKIApAQCAtMjEzLDEyICsyMTksMTEgQEAKICAgICAgIHN0YXRpY19jYXN0PGludD4odmlkZW9fY29uZmlnXy5uYXR1cmFsX3NpemUoKS5oZWlnaHQoKSk7CiAgIHZpZGVvX3NhbXBsZV9pbmZvXy5jb2RlYyA9CiAgICAgICBNZWRpYVZpZGVvQ29kZWNUb1NiTWVkaWFWaWRlb0NvZGVjKHZpZGVvX2NvbmZpZ18uY29kZWMoKSk7Ci0gIHZpZGVvX3NhbXBsZV9pbmZvXy5jb2xvcl9tZXRhZGF0YSA9Ci0gICAgICBNZWRpYVRvU2JNZWRpYUNvbG9yTWV0YWRhdGEodmlkZW9fY29uZmlnXy53ZWJtX2NvbG9yX21ldGFkYXRhKCkpOwotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotICB2aWRlb19zYW1wbGVfaW5mb18ubWltZSA9IHZpZGVvX2NvbmZpZ18ubWltZSgpLmNfc3RyKCk7CisgIHZpZGVvX3NhbXBsZV9pbmZvXy5jb2xvcl9tZXRhZGF0YSA9IE1lZGlhVG9TYk1lZGlhQ29sb3JNZXRhZGF0YSgKKyAgICAgIHZpZGVvX2NvbmZpZ18uY29sb3Jfc3BhY2VfaW5mbygpLCB2aWRlb19jb25maWdfLmhkcl9tZXRhZGF0YSgpKTsKKyAgdmlkZW9fbWltZV90eXBlXyA9IG1pbWVfdHlwZTsKKyAgdmlkZW9fc2FtcGxlX2luZm9fLm1pbWUgPSB2aWRlb19taW1lX3R5cGVfLmNfc3RyKCk7CiAgIHZpZGVvX3NhbXBsZV9pbmZvXy5tYXhfdmlkZW9fY2FwYWJpbGl0aWVzID0gbWF4X3ZpZGVvX2NhcGFiaWxpdGllc18uY19zdHIoKTsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIExPRyhJTkZPKSA8PCAiQ29udmVydGVkIHRvIFNiTWVkaWFWaWRlb1NhbXBsZUluZm8gLS0gIiA8PCB2aWRlb19zYW1wbGVfaW5mb187CiB9CiAKQEAgLTI0Miw3ICsyNDcsNyBAQAogICBXcml0ZUJ1ZmZlckludGVybmFsKHR5cGUsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgU3RhcmJvYXJkUGxheWVyOjpTZXRCb3VuZHMoaW50IHpfaW5kZXgsIGNvbnN0IG1hdGg6OlJlY3QmIHJlY3QpIHsKK3ZvaWQgU3RhcmJvYXJkUGxheWVyOjpTZXRCb3VuZHMoaW50IHpfaW5kZXgsIGNvbnN0IGdmeDo6UmVjdCYgcmVjdCkgewogICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwogCiAgIHNldF9ib3VuZHNfel9pbmRleF8gPSB6X2luZGV4OwpAQCAtNTE4LDYgKzUyMywxMyBAQAogCiAgIERDSEVDSyghb25fZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9lbmNvdW50ZXJlZF9jYl8uaXNfbnVsbCgpKTsKICAgTE9HKElORk8pIDw8ICJDcmVhdGVVcmxQbGF5ZXIgcGFzc2VkIHVybCAiIDw8IHVybDsKKworICBpZiAobWF4X3ZpZGVvX2NhcGFiaWxpdGllc18uZW1wdHkoKSkgeworICAgIEZvcm1hdFN1cHBvcnRRdWVyeU1ldHJpY3M6OlByaW50QW5kUmVzZXRGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzKCk7CisgIH0KKworICBwbGF5ZXJfY3JlYXRpb25fdGltZV8gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKwogICBwbGF5ZXJfID0KICAgICAgIFNiVXJsUGxheWVyQ3JlYXRlKHVybC5jX3N0cigpLCB3aW5kb3dfLCAmU3RhcmJvYXJkUGxheWVyOjpQbGF5ZXJTdGF0dXNDQiwKICAgICAgICAgICAgICAgICAgICAgICAgICZTdGFyYm9hcmRQbGF5ZXI6OkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZENCLApAQCAtNTU2LDcgKzU2OCwxMSBAQAogCiAgIGlzX2NyZWF0aW5nX3BsYXllcl8gPSB0cnVlOwogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCisgIGlmIChtYXhfdmlkZW9fY2FwYWJpbGl0aWVzXy5lbXB0eSgpKSB7CisgICAgRm9ybWF0U3VwcG9ydFF1ZXJ5TWV0cmljczo6UHJpbnRBbmRSZXNldEZvcm1hdFN1cHBvcnRRdWVyeU1ldHJpY3MoKTsKKyAgfQorCisgIHBsYXllcl9jcmVhdGlvbl90aW1lXyA9IFNiVGltZUdldE1vbm90b25pY05vdygpOwogCiAgIFNiUGxheWVyQ3JlYXRpb25QYXJhbSBjcmVhdGlvbl9wYXJhbSA9IHt9OwogICBjcmVhdGlvbl9wYXJhbS5kcm1fc3lzdGVtID0gZHJtX3N5c3RlbV87CkBAIC01NzUsMjUgKzU5MSw2IEBACiAgICAgICAmU3RhcmJvYXJkUGxheWVyOjpQbGF5ZXJFcnJvckNCLCB0aGlzLAogICAgICAgZ2V0X2RlY29kZV90YXJnZXRfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl9mdW5jXy5SdW4oKSk7CiAKLSNlbHNlICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQotICBEQ0hFQ0soU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKG91dHB1dF9tb2RlXywgdmlkZW9fY29kZWMsIGRybV9zeXN0ZW1fKSk7Ci0gIC8vIFRPRE86IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBzdXBwb3J0aW5nIGJhY2tncm91bmQgbWVkaWEgcGxheWJhY2suCi0gIC8vICAgICAgIE5lZWQgdG8gYmUgcmVtb3ZlZCB3aXRoIG1lZGlhIHJlZmFjdG9yLgotICBpZiAoIWlzX3Zpc2libGUpIHsKLSAgICBEQ0hFQ0soYXVkaW9fY29kZWMgIT0ga1NiTWVkaWFBdWRpb0NvZGVjTm9uZSk7Ci0gIH0KLSAgcGxheWVyXyA9IFNiUGxheWVyQ3JlYXRlKAotICAgICAgd2luZG93XywgdmlkZW9fY29kZWMsIGF1ZGlvX2NvZGVjLCBkcm1fc3lzdGVtXywKLSAgICAgIGhhc19hdWRpbyA/ICZhdWRpb19zYW1wbGVfaW5mb18gOiBOVUxMLAotICAgICAgbWF4X3ZpZGVvX2NhcGFiaWxpdGllc18ubGVuZ3RoKCkgPiAwID8gbWF4X3ZpZGVvX2NhcGFiaWxpdGllc18uY19zdHIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKLSAgICAgICZTdGFyYm9hcmRQbGF5ZXI6OkRlYWxsb2NhdGVTYW1wbGVDQiwgJlN0YXJib2FyZFBsYXllcjo6RGVjb2RlclN0YXR1c0NCLAotICAgICAgJlN0YXJib2FyZFBsYXllcjo6UGxheWVyU3RhdHVzQ0IsICZTdGFyYm9hcmRQbGF5ZXI6OlBsYXllckVycm9yQ0IsIHRoaXMsCi0gICAgICBvdXRwdXRfbW9kZV8sIGdldF9kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfZnVuY18uUnVuKCkpOwotCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiAgIGlzX2NyZWF0aW5nX3BsYXllcl8gPSBmYWxzZTsKIAogICBpZiAoIVNiUGxheWVySXNWYWxpZChwbGF5ZXJfKSkgewpAQCAtNjQxLDE4ICs2MzgsMjIgQEAKICAgICByZXR1cm47CiAgIH0KIAotICBjb25zdCBhdXRvJiBhbGxvY2F0aW9ucyA9IGJ1ZmZlci0+YWxsb2NhdGlvbnMoKTsKLSAgRENIRUNLX0VRKGFsbG9jYXRpb25zLm51bWJlcl9vZl9idWZmZXJzKCksIDEpOwotCi0gIERlY29kaW5nQnVmZmVyczo6aXRlcmF0b3IgaXRlciA9Ci0gICAgICBkZWNvZGluZ19idWZmZXJzXy5maW5kKGFsbG9jYXRpb25zLmJ1ZmZlcnMoKVswXSk7CisgIERlY29kaW5nQnVmZmVyczo6aXRlcmF0b3IgaXRlciA9IGRlY29kaW5nX2J1ZmZlcnNfLmZpbmQoYnVmZmVyLT5kYXRhKCkpOwogICBpZiAoaXRlciA9PSBkZWNvZGluZ19idWZmZXJzXy5lbmQoKSkgewotICAgIGRlY29kaW5nX2J1ZmZlcnNfW2FsbG9jYXRpb25zLmJ1ZmZlcnMoKVswXV0gPSBzdGQ6Om1ha2VfcGFpcihidWZmZXIsIDEpOworICAgIGRlY29kaW5nX2J1ZmZlcnNfW2J1ZmZlci0+ZGF0YSgpXSA9IHN0ZDo6bWFrZV9wYWlyKGJ1ZmZlciwgMSk7CiAgIH0gZWxzZSB7CiAgICAgKytpdGVyLT5zZWNvbmQuc2Vjb25kOwogICB9CiAKICAgYXV0byBzYW1wbGVfdHlwZSA9IERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZSh0eXBlKTsKKworICBpZiAoc2FtcGxlX3R5cGUgPT0ga1NiTWVkaWFUeXBlQXVkaW8gJiYgZmlyc3RfYXVkaW9fc2FtcGxlX3RpbWVfID09IDApIHsKKyAgICBmaXJzdF9hdWRpb19zYW1wbGVfdGltZV8gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKyAgfSBlbHNlIGlmIChzYW1wbGVfdHlwZSA9PSBrU2JNZWRpYVR5cGVWaWRlbyAmJgorICAgICAgICAgICAgIGZpcnN0X3ZpZGVvX3NhbXBsZV90aW1lXyA9PSAwKSB7CisgICAgZmlyc3RfdmlkZW9fc2FtcGxlX3RpbWVfID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisgIH0KKwogICBTYkRybVNhbXBsZUluZm8gZHJtX2luZm87CiAgIFNiRHJtU3ViU2FtcGxlTWFwcGluZyBzdWJzYW1wbGVfbWFwcGluZzsKICAgZHJtX2luZm8uc3Vic2FtcGxlX2NvdW50ID0gMDsKQEAgLTY2NSw4ICs2NjYsOCBAQAogICBTYlBsYXllclNhbXBsZVNpZGVEYXRhIHNpZGVfZGF0YSA9IHt9OwogICBTYlBsYXllclNhbXBsZUluZm8gc2FtcGxlX2luZm8gPSB7fTsKICAgc2FtcGxlX2luZm8udHlwZSA9IHNhbXBsZV90eXBlOwotICBzYW1wbGVfaW5mby5idWZmZXIgPSBhbGxvY2F0aW9ucy5idWZmZXJzKClbMF07Ci0gIHNhbXBsZV9pbmZvLmJ1ZmZlcl9zaXplID0gYWxsb2NhdGlvbnMuYnVmZmVyX3NpemVzKClbMF07CisgIHNhbXBsZV9pbmZvLmJ1ZmZlciA9IGJ1ZmZlci0+ZGF0YSgpOworICBzYW1wbGVfaW5mby5idWZmZXJfc2l6ZSA9IGJ1ZmZlci0+ZGF0YV9zaXplKCk7CiAgIHNhbXBsZV9pbmZvLnRpbWVzdGFtcCA9IGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKTsKIAogICBpZiAoYnVmZmVyLT5zaWRlX2RhdGFfc2l6ZSgpID4gMCkgewpAQCAtNzgwLDE0ICs3ODEsNiBAQAogICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBrU2JQbGF5ZXJEZWNvZGVyU3RhdGVOZWVkc0RhdGE6CiAgICAgICBicmVhazsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0gICAgY2FzZSBrU2JQbGF5ZXJEZWNvZGVyU3RhdGVCdWZmZXJGdWxsOgotICAgICAgTE9HKFdBUk5JTkcpIDw8ICJrU2JQbGF5ZXJEZWNvZGVyU3RhdGVCdWZmZXJGdWxsIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIjsKLSAgICAgIHJldHVybjsKLSAgICBjYXNlIGtTYlBsYXllckRlY29kZXJTdGF0ZURlc3Ryb3llZDoKLSAgICAgIExPRyhXQVJOSU5HKSA8PCAia1NiUGxheWVyRGVjb2RlclN0YXRlRGVzdHJveWVkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIjsKLSAgICAgIHJldHVybjsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgogICB9CiAKICAgaWYgKHN0YXRlXyA9PSBrUmVzdW1pbmcpIHsKQEAgLTgwNyw2ICs4MDAsOCBAQAogCiB2b2lkIFN0YXJib2FyZFBsYXllcjo6T25QbGF5ZXJTdGF0dXMoU2JQbGF5ZXIgcGxheWVyLCBTYlBsYXllclN0YXRlIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQpIHsKKyAgVFJBQ0VfRVZFTlQxKCJjb2JhbHQ6Om1lZGlhIiwgIlN0YXJib2FyZFBsYXllcjo6T25QbGF5ZXJTdGF0dXMiLCAic3RhdGUiLAorICAgICAgICAgICAgICAgc3RhdGUpOwogICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwogCiAgIGlmIChwbGF5ZXJfICE9IHBsYXllcikgewpAQCAtODIzLDExICs4MTgsMjQgQEAKICAgICBpZiAodGlja2V0XyA9PSBTQl9QTEFZRVJfSU5JVElBTF9USUNLRVQpIHsKICAgICAgICsrdGlja2V0XzsKICAgICB9CisgICAgaWYgKHNiX3BsYXllcl9zdGF0ZV9pbml0aWFsaXplZF90aW1lXyA9PSAwKSB7CisgICAgICBzYl9wbGF5ZXJfc3RhdGVfaW5pdGlhbGl6ZWRfdGltZV8gPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKyAgICB9CiAgICAgU2JQbGF5ZXJTZWVrMihwbGF5ZXJfLCBwcmVyb2xsX3RpbWVzdGFtcF8uSW5NaWNyb3NlY29uZHMoKSwgdGlja2V0Xyk7CiAgICAgU2V0Vm9sdW1lKHZvbHVtZV8pOwogICAgIFNiUGxheWVyU2V0UGxheWJhY2tSYXRlKHBsYXllcl8sIHBsYXliYWNrX3JhdGVfKTsKICAgICByZXR1cm47CiAgIH0KKyAgaWYgKHN0YXRlID09IGtTYlBsYXllclN0YXRlUHJlcm9sbGluZyAmJgorICAgICAgc2JfcGxheWVyX3N0YXRlX3ByZXJvbGxpbmdfdGltZV8gPT0gMCkgeworICAgIHNiX3BsYXllcl9zdGF0ZV9wcmVyb2xsaW5nX3RpbWVfID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisgIH0gZWxzZSBpZiAoc3RhdGUgPT0ga1NiUGxheWVyU3RhdGVQcmVzZW50aW5nICYmCisgICAgICAgICAgICAgc2JfcGxheWVyX3N0YXRlX3ByZXNlbnRpbmdfdGltZV8gPT0gMCkgeworICAgIHNiX3BsYXllcl9zdGF0ZV9wcmVzZW50aW5nX3RpbWVfID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisjaWYgIWRlZmluZWQoQ09CQUxUX0JVSUxEX1RZUEVfR09MRCkKKyAgICBMb2dTdGFydHVwTGF0ZW5jeSgpOworI2VuZGlmICAvLyAhZGVmaW5lZChDT0JBTFRfQlVJTERfVFlQRV9HT0xEKQorICB9CiAgIGhvc3RfLT5PblBsYXllclN0YXR1cyhzdGF0ZSk7CiB9CiAKQEAgLTk0NCw3ICs5NTIsNiBAQAogLy8gc3RhdGljCiBTYlBsYXllck91dHB1dE1vZGUgU3RhcmJvYXJkUGxheWVyOjpDb21wdXRlU2JQbGF5ZXJPdXRwdXRNb2RlKAogICAgIGJvb2wgcHJlZmVyX2RlY29kZV90b190ZXh0dXJlKSBjb25zdCB7Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIFNiUGxheWVyQ3JlYXRpb25QYXJhbSBjcmVhdGlvbl9wYXJhbSA9IHt9OwogICBjcmVhdGlvbl9wYXJhbS5kcm1fc3lzdGVtID0gZHJtX3N5c3RlbV87CiAgIGNyZWF0aW9uX3BhcmFtLmF1ZGlvX3NhbXBsZV9pbmZvID0gYXVkaW9fc2FtcGxlX2luZm9fOwpAQCAtOTYwLDI4ICs5NjcsNDkgQEAKICAgYXV0byBvdXRwdXRfbW9kZSA9IFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZSgmY3JlYXRpb25fcGFyYW0pOwogICBDSEVDS19ORShrU2JQbGF5ZXJPdXRwdXRNb2RlSW52YWxpZCwgb3V0cHV0X21vZGUpOwogICByZXR1cm4gb3V0cHV0X21vZGU7Ci0jZWxzZSAgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYyA9IGtTYk1lZGlhVmlkZW9Db2RlY05vbmU7Cit9CiAKLSAgdmlkZW9fY29kZWMgPSB2aWRlb19zYW1wbGVfaW5mb18uY29kZWM7Cit2b2lkIFN0YXJib2FyZFBsYXllcjo6TG9nU3RhcnR1cExhdGVuY3koKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5nIGZpcnN0X2V2ZW50c19zdHI7CisgIGlmIChzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl90aW1lXyA9PSAtMSkgeworICAgIGZpcnN0X2V2ZW50c19zdHIgPQorICAgICAgICBzdGFyYm9hcmQ6OkZvcm1hdFN0cmluZygiJS01MHMwIHVzIiwgIlNiUGxheWVyQ3JlYXRlKCkgY2FsbGVkIik7CiAKLSAgLy8gVHJ5IHRvIGNob29zZSB8a1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZXwgd2hlbgotICAvLyB8cHJlZmVyX2RlY29kZV90b190ZXh0dXJlfCBpcyB0cnVlLgotICBpZiAocHJlZmVyX2RlY29kZV90b190ZXh0dXJlKSB7Ci0gICAgaWYgKFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fY29kZWMsIGRybV9zeXN0ZW1fKSkgewotICAgICAgcmV0dXJuIGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmU7Ci0gICAgfQorICB9IGVsc2UgaWYgKHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiX3RpbWVfIDwgcGxheWVyX2NyZWF0aW9uX3RpbWVfKSB7CisgICAgZmlyc3RfZXZlbnRzX3N0ciA9IHN0YXJib2FyZDo6Rm9ybWF0U3RyaW5nKAorICAgICAgICAiJS01MHMwIHVzXG4lLTUwcyUiIFBSSWQ2NCAiIHVzIiwgInNldF9kcm1fc3lzdGVtX3JlYWR5X2NiIGNhbGxlZCIsCisgICAgICAgICJTYlBsYXllckNyZWF0ZSgpIGNhbGxlZCIsCisgICAgICAgIHBsYXllcl9jcmVhdGlvbl90aW1lXyAtIHNldF9kcm1fc3lzdGVtX3JlYWR5X2NiX3RpbWVfKTsKKyAgfSBlbHNlIHsKKyAgICBmaXJzdF9ldmVudHNfc3RyID0gc3RhcmJvYXJkOjpGb3JtYXRTdHJpbmcoCisgICAgICAgICIlLTUwczAgdXNcbiUtNTBzJSIgUFJJZDY0ICIgdXMiLCAiU2JQbGF5ZXJDcmVhdGUoKSBjYWxsZWQiLAorICAgICAgICAic2V0X2RybV9zeXN0ZW1fcmVhZHlfY2IgY2FsbGVkIiwKKyAgICAgICAgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfdGltZV8gLSBwbGF5ZXJfY3JlYXRpb25fdGltZV8pOwogICB9CiAKLSAgaWYgKFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChrU2JQbGF5ZXJPdXRwdXRNb2RlUHVuY2hPdXQsIHZpZGVvX2NvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybV9zeXN0ZW1fKSkgewotICAgIHJldHVybiBrU2JQbGF5ZXJPdXRwdXRNb2RlUHVuY2hPdXQ7Ci0gIH0KLSAgQ0hFQ0soU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19jb2RlYywgZHJtX3N5c3RlbV8pKTsKLSAgcmV0dXJuIGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmU7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQorICBTYlRpbWUgcGxheWVyX2luaXRpYWxpemF0aW9uX3RpbWVfZGVsdGEgPQorICAgICAgc2JfcGxheWVyX3N0YXRlX2luaXRpYWxpemVkX3RpbWVfIC0KKyAgICAgIHN0ZDo6bWF4KHBsYXllcl9jcmVhdGlvbl90aW1lXywgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfdGltZV8pOworICBTYlRpbWUgcGxheWVyX3ByZXJvbGxfdGltZV9kZWx0YSA9CisgICAgICBzYl9wbGF5ZXJfc3RhdGVfcHJlcm9sbGluZ190aW1lXyAtIHNiX3BsYXllcl9zdGF0ZV9pbml0aWFsaXplZF90aW1lXzsKKyAgU2JUaW1lIGZpcnN0X2F1ZGlvX3NhbXBsZV90aW1lX2RlbHRhID0gc3RkOjptYXgoCisgICAgICBmaXJzdF9hdWRpb19zYW1wbGVfdGltZV8gLSBzYl9wbGF5ZXJfc3RhdGVfcHJlcm9sbGluZ190aW1lXywgU2JUaW1lKDApKTsKKyAgU2JUaW1lIGZpcnN0X3ZpZGVvX3NhbXBsZV90aW1lX2RlbHRhID0gc3RkOjptYXgoCisgICAgICBmaXJzdF92aWRlb19zYW1wbGVfdGltZV8gLSBzYl9wbGF5ZXJfc3RhdGVfcHJlcm9sbGluZ190aW1lXywgU2JUaW1lKDApKTsKKyAgU2JUaW1lIHBsYXllcl9wcmVzZW50aW5nX3RpbWVfZGVsdGEgPQorICAgICAgc2JfcGxheWVyX3N0YXRlX3ByZXNlbnRpbmdfdGltZV8gLQorICAgICAgc3RkOjptYXgoZmlyc3RfYXVkaW9fc2FtcGxlX3RpbWVfLCBmaXJzdF92aWRlb19zYW1wbGVfdGltZV8pOworCisgIExPRyhJTkZPKSA8PCBzdGFyYm9hcmQ6OkZvcm1hdFN0cmluZygKKyAgICAgICJTYlBsYXllciBzdGFydHVwIGxhdGVuY2llc1xuJS01MHMlc1xuJXNcbiUtNTBzJSIgUFJJZDY0CisgICAgICAiIHVzXG4lLTUwcyUiIFBSSWQ2NCAiIHVzXG4lLTUwcyUiIFBSSWQ2NCAiLyUiIFBSSWQ2NCAiIHVzXG4lLTUwcyUiIFBSSWQ2NAorICAgICAgIiB1cyIsCisgICAgICAiRXZlbnQgbmFtZSIsICJ0aW1lIHNpbmNlIGxhc3QgZXZlbnQiLCBmaXJzdF9ldmVudHNfc3RyLmNfc3RyKCksCisgICAgICAia1NiUGxheWVyU3RhdGVJbml0aWFsaXplZCByZWNlaXZlZCIsIHBsYXllcl9pbml0aWFsaXphdGlvbl90aW1lX2RlbHRhLAorICAgICAgImtTYlBsYXllclN0YXRlUHJlcm9sbGluZyByZWNlaXZlZCIsIHBsYXllcl9wcmVyb2xsX3RpbWVfZGVsdGEsCisgICAgICAiRmlyc3QgbWVkaWEgc2FtcGxlKHMpIHdyaXR0ZW4gW2F1ZGlvL3ZpZGVvXSIsCisgICAgICBmaXJzdF9hdWRpb19zYW1wbGVfdGltZV9kZWx0YSwgZmlyc3RfdmlkZW9fc2FtcGxlX3RpbWVfZGVsdGEsCisgICAgICAia1NiUGxheWVyU3RhdGVQcmVzZW50aW5nIHJlY2VpdmVkIiwgcGxheWVyX3ByZXNlbnRpbmdfdGltZV9kZWx0YSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3BsYXllci5oCmluZGV4IDZlNDBhYzQuLmE3MWVjM2IgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF9wbGF5ZXIuaAorKysgYi9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfcGxheWVyLmgKQEAgLTIzLDE1ICsyMywxNiBAQAogI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgogI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL2xvY2suaCIKICNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlcl9jYWNoZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2JwbGF5ZXJfc2V0X2JvdW5kc19oZWxwZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lX3Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3BsYXllci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3QuaCIKIAogI2lmIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCiAjaW5jbHVkZSBTQl9VUkxfUExBWUVSX0lOQ0xVREVfUEFUSApAQCAtNDIsNiArNDMsMTEgQEAKIAogLy8gVE9ETzogQWRkIHN3aXRjaCB0byBkaXNhYmxlIGNhY2hpbmcKIGNsYXNzIFN0YXJib2FyZFBsYXllciB7CisgIHR5cGVkZWYgOjptZWRpYTo6QXVkaW9EZWNvZGVyQ29uZmlnIEF1ZGlvRGVjb2RlckNvbmZpZzsKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZWNvZGVyQnVmZmVyIERlY29kZXJCdWZmZXI7CisgIHR5cGVkZWYgOjptZWRpYTo6RGVtdXhlclN0cmVhbSBEZW11eGVyU3RyZWFtOworICB0eXBlZGVmIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZyBWaWRlb0RlY29kZXJDb25maWc7CisKICBwdWJsaWM6CiAgIGNsYXNzIEhvc3QgewogICAgcHVibGljOgpAQCAtNzcsNyArODMsOSBAQAogICAgICAgY29uc3QgR2V0RGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXJGdW5jJgogICAgICAgICAgIGdldF9kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfZnVuYywKICAgICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnLAotICAgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcsIFNiV2luZG93IHdpbmRvdywKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdWRpb19taW1lX3R5cGUsCisgICAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19taW1lX3R5cGUsIFNiV2luZG93IHdpbmRvdywKICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sIEhvc3QqIGhvc3QsCiAgICAgICBTYlBsYXllclNldEJvdW5kc0hlbHBlciogc2V0X2JvdW5kc19oZWxwZXIsCiAgICAgICBib29sIGFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kLCBib29sIHByZWZlcl9kZWNvZGVfdG9fdGV4dHVyZSwKQEAgLTg4LDEzICs5NiwxNSBAQAogCiAgIGJvb2wgSXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNiUGxheWVySXNWYWxpZChwbGF5ZXJfKTsgfQogCi0gIHZvaWQgVXBkYXRlQXVkaW9Db25maWcoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19jb25maWcpOwotICB2b2lkIFVwZGF0ZVZpZGVvQ29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnKTsKKyAgdm9pZCBVcGRhdGVBdWRpb0NvbmZpZyhjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKTsKKyAgdm9pZCBVcGRhdGVWaWRlb0NvbmZpZyhjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKTsKIAogICB2b2lkIFdyaXRlQnVmZmVyKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIpOwogCi0gIHZvaWQgU2V0Qm91bmRzKGludCB6X2luZGV4LCBjb25zdCBtYXRoOjpSZWN0JiByZWN0KTsKKyAgdm9pZCBTZXRCb3VuZHMoaW50IHpfaW5kZXgsIGNvbnN0IGdmeDo6UmVjdCYgcmVjdCk7CiAKICAgdm9pZCBQcmVwYXJlRm9yU2VlaygpOwogICB2b2lkIFNlZWsoYmFzZTo6VGltZURlbHRhIHRpbWUpOwpAQCAtMTMwLDYgKzE0MCwxMCBAQAogICBTYkRlY29kZVRhcmdldCBHZXRDdXJyZW50U2JEZWNvZGVUYXJnZXQoKTsKICAgU2JQbGF5ZXJPdXRwdXRNb2RlIEdldFNiUGxheWVyT3V0cHV0TW9kZSgpOwogCisgIHZvaWQgUmVjb3JkU2V0RHJtU3lzdGVtUmVhZHlUaW1lKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApIHsKKyAgICBzZXRfZHJtX3N5c3RlbV9yZWFkeV9jYl90aW1lXyA9IHRpbWVzdGFtcDsKKyAgfQorCiAgcHJpdmF0ZToKICAgZW51bSBTdGF0ZSB7CiAgICAga1BsYXlpbmcsCkBAIC0xNjUsNyArMTc5LDcgQEAKICAgLy8gRGVjb2RlckJ1ZmZlciBhbmQgYSByZWZlcmVuY2UgY291bnQuICBUaGUgcmVmZXJlbmNlIGNvdW50IGluZGljYXRlcyBob3cKICAgLy8gbWFueSBpbnN0YW5jZXMgb2YgdGhlIERlY29kZXJCdWZmZXIgaXMgY3VycmVudGx5IGJlaW5nIGRlY29kZWQgaW4gdGhlCiAgIC8vIHBpcGVsaW5lLgotICB0eXBlZGVmIHN0ZDo6bWFwPGNvbnN0IHZvaWQqLCBzdGQ6OnBhaXI8c2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiwgaW50PiA+CisgIHR5cGVkZWYgc3RkOjptYXA8Y29uc3Qgdm9pZCosIHN0ZDo6cGFpcjxzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+LCBpbnQ+PgogICAgICAgRGVjb2RpbmdCdWZmZXJzOwogCiAjaWYgU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKQEAgLTIxNiw2ICsyMzAsOCBAQAogICBTYlBsYXllck91dHB1dE1vZGUgQ29tcHV0ZVNiUGxheWVyT3V0cHV0TW9kZSgKICAgICAgIGJvb2wgcHJlZmVyX2RlY29kZV90b190ZXh0dXJlKSBjb25zdDsKIAorICB2b2lkIExvZ1N0YXJ0dXBMYXRlbmN5KCkgY29uc3Q7CisKIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBpbiB0aGUgY3RvciBhbmQgbmV2ZXIgY2hhbmdlZC4KICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogICBzdGQ6OnN0cmluZyB1cmxfOwpAQCAtMjUwLDcgKzI2Niw3IEBACiAKICAgLy8gU3RvcmVzIHRoZSB8el9pbmRleHwgYW5kIHxyZWN0fCBwYXJhbWV0ZXJzIG9mIHRoZSBsYXRlc3QgU2V0Qm91bmRzKCkgY2FsbC4KICAgYmFzZTo6T3B0aW9uYWw8aW50PiBzZXRfYm91bmRzX3pfaW5kZXhfOwotICBiYXNlOjpPcHRpb25hbDxtYXRoOjpSZWN0PiBzZXRfYm91bmRzX3JlY3RfOworICBiYXNlOjpPcHRpb25hbDxnZng6OlJlY3Q+IHNldF9ib3VuZHNfcmVjdF87CiAgIFN0YXRlIHN0YXRlXyA9IGtQbGF5aW5nOwogICBTYlBsYXllciBwbGF5ZXJfOwogICB1aW50MzIgY2FjaGVkX3ZpZGVvX2ZyYW1lc19kZWNvZGVkXzsKQEAgLTI2Miw2ICsyNzgsMTAgQEAKIAogICBWaWRlb0ZyYW1lUHJvdmlkZXIqIGNvbnN0IHZpZGVvX2ZyYW1lX3Byb3ZpZGVyXzsKIAorICAvLyBLZWVwIGNvcGllcyBvZiB0aGUgbWltZSB0eXBlIHN0cmluZ3MgaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lcyBpbiB0aGUKKyAgLy8gRGVtdXhlclN0cmVhbXMgdG8gZW5zdXJlIHRoYXQgdGhlIHN0cmluZ3MgYXJlIGFsd2F5cyB2YWxpZC4KKyAgc3RkOjpzdHJpbmcgYXVkaW9fbWltZV90eXBlXzsKKyAgc3RkOjpzdHJpbmcgdmlkZW9fbWltZV90eXBlXzsKICAgLy8gQSBzdHJpbmcgb2YgdmlkZW8gbWF4aW11bSBjYXBhYmlsaXRpZXMuCiAgIHN0ZDo6c3RyaW5nIG1heF92aWRlb19jYXBhYmlsaXRpZXNfOwogCkBAIC0yNjksNiArMjg5LDE1IEBACiAgIGJvb2wgaXNfY3JlYXRpbmdfcGxheWVyXyA9IGZhbHNlOwogICBzdGQ6OnN0cmluZyBwbGF5ZXJfY3JlYXRpb25fZXJyb3JfbWVzc2FnZV87CiAKKyAgLy8gVmFyaWFibGVzIHJlbGF0ZWQgdG8gdHJhY2tpbmcgcGxheWVyIHN0YXJ0dXAgbGF0ZW5jaWVzLgorICBTYlRpbWVNb25vdG9uaWMgc2V0X2RybV9zeXN0ZW1fcmVhZHlfY2JfdGltZV8gPSAtMTsKKyAgU2JUaW1lTW9ub3RvbmljIHBsYXllcl9jcmVhdGlvbl90aW1lXyA9IDA7CisgIFNiVGltZU1vbm90b25pYyBzYl9wbGF5ZXJfc3RhdGVfaW5pdGlhbGl6ZWRfdGltZV8gPSAwOworICBTYlRpbWVNb25vdG9uaWMgc2JfcGxheWVyX3N0YXRlX3ByZXJvbGxpbmdfdGltZV8gPSAwOworICBTYlRpbWVNb25vdG9uaWMgZmlyc3RfYXVkaW9fc2FtcGxlX3RpbWVfID0gMDsKKyAgU2JUaW1lTW9ub3RvbmljIGZpcnN0X3ZpZGVvX3NhbXBsZV90aW1lXyA9IDA7CisgIFNiVGltZU1vbm90b25pYyBzYl9wbGF5ZXJfc3RhdGVfcHJlc2VudGluZ190aW1lXyA9IDA7CisKICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogICBjb25zdCBib29sIGlzX3VybF9iYXNlZF87CiAjZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuY2MKaW5kZXggZDg3NTcxNy4uZmU3ZTI3ZCAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmNjCisrKyBiL2NvYmFsdC9tZWRpYS9iYXNlL3N0YXJib2FyZF91dGlscy5jYwpAQCAtMTcsNDUgKzE3LDQ4IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmgiCiAKIHVzaW5nIGJhc2U6OlRpbWU7CiB1c2luZyBiYXNlOjpUaW1lRGVsdGE7CiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSB7CisKK3VzaW5nIDo6bWVkaWE6OkF1ZGlvQ29kZWM7Cit1c2luZyA6Om1lZGlhOjpWaWRlb0NvZGVjOwordXNpbmcgOjptZWRpYTo6VmlkZW9Db2xvclNwYWNlOworCit9ICAvLyBuYW1lc3BhY2UKIAogU2JNZWRpYUF1ZGlvQ29kZWMgTWVkaWFBdWRpb0NvZGVjVG9TYk1lZGlhQXVkaW9Db2RlYyhBdWRpb0NvZGVjIGNvZGVjKSB7CiAgIHN3aXRjaCAoY29kZWMpIHsKLSAgICBjYXNlIGtDb2RlY0FBQzoKKyAgICBjYXNlIEF1ZGlvQ29kZWM6OmtBQUM6CiAgICAgICByZXR1cm4ga1NiTWVkaWFBdWRpb0NvZGVjQWFjOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhBQzNfQVVESU8pCi0gICAgY2FzZSBrQ29kZWNBQzM6CisgICAgY2FzZSBBdWRpb0NvZGVjOjprQUMzOgogICAgICAgaWYgKCFrU2JIYXNBYzNBdWRpbykgewogICAgICAgICBETE9HKEVSUk9SKSA8PCAiQXVkaW8gY29kZWMgQUMzIG5vdCBlbmFibGVkIG9uIHRoaXMgcGxhdGZvcm0uIFRvICIKICAgICAgICAgICAgICAgICAgICAgPDwgImVuYWJsZSBpdCwgc2V0IGtTYkhhc0FjM0F1ZGlvIHRvIHx0cnVlfC4iOwogICAgICAgICByZXR1cm4ga1NiTWVkaWFBdWRpb0NvZGVjTm9uZTsKICAgICAgIH0KICAgICAgIHJldHVybiBrU2JNZWRpYUF1ZGlvQ29kZWNBYzM7Ci0gICAgY2FzZSBrQ29kZWNFQUMzOgorICAgIGNhc2UgQXVkaW9Db2RlYzo6a0VBQzM6CiAgICAgICBpZiAoIWtTYkhhc0FjM0F1ZGlvKSB7CiAgICAgICAgIERMT0coRVJST1IpIDw8ICJBdWRpbyBjb2RlYyBBQzMgbm90IGVuYWJsZWQgb24gdGhpcyBwbGF0Zm9ybS4gVG8gIgogICAgICAgICAgICAgICAgICAgICA8PCAiZW5hYmxlIGl0LCBzZXQga1NiSGFzQWMzQXVkaW8gdG8gfHRydWV8LiI7CiAgICAgICAgIHJldHVybiBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lOwogICAgICAgfQogICAgICAgcmV0dXJuIGtTYk1lZGlhQXVkaW9Db2RlY0VhYzM7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhBQzNfQVVESU8pCi0gICAgY2FzZSBrQ29kZWNWb3JiaXM6CisgICAgY2FzZSBBdWRpb0NvZGVjOjprVm9yYmlzOgogICAgICAgcmV0dXJuIGtTYk1lZGlhQXVkaW9Db2RlY1ZvcmJpczsKLSAgICBjYXNlIGtDb2RlY09wdXM6CisgICAgY2FzZSBBdWRpb0NvZGVjOjprT3B1czoKICAgICAgIHJldHVybiBrU2JNZWRpYUF1ZGlvQ29kZWNPcHVzOwogICAgIGRlZmF1bHQ6CiAgICAgICAvLyBDb2JhbHQgb25seSBzdXBwb3J0cyBhIHN1YnNldCBvZiBhdWRpbyBjb2RlY3MgZGVmaW5lZCBieSBDaHJvbWl1bS4KLSAgICAgIERMT0coRVJST1IpIDw8ICJVbnN1cHBvcnRlZCBhdWRpbyBjb2RlYyAiCi0gICAgICAgICAgICAgICAgICA8PCBjb2JhbHQ6Om1lZGlhOjpHZXRDb2RlY05hbWUoY29kZWMpOworICAgICAgRExPRyhFUlJPUikgPDwgIlVuc3VwcG9ydGVkIGF1ZGlvIGNvZGVjICIgPDwgOjptZWRpYTo6R2V0Q29kZWNOYW1lKGNvZGVjKTsKICAgICAgIHJldHVybiBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lOwogICB9CiAgIE5PVFJFQUNIRUQoKTsKQEAgLTY0LDI2ICs2NywyNSBAQAogCiBTYk1lZGlhVmlkZW9Db2RlYyBNZWRpYVZpZGVvQ29kZWNUb1NiTWVkaWFWaWRlb0NvZGVjKFZpZGVvQ29kZWMgY29kZWMpIHsKICAgc3dpdGNoIChjb2RlYykgewotICAgIGNhc2Uga0NvZGVjSDI2NDoKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtIMjY0OgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQ7Ci0gICAgY2FzZSBrQ29kZWNWQzE6CisgICAgY2FzZSBWaWRlb0NvZGVjOjprVkMxOgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMTsKLSAgICBjYXNlIGtDb2RlY01QRUcyOgorICAgIGNhc2UgVmlkZW9Db2RlYzo6a01QRUcyOgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY01wZWcyOwotICAgIGNhc2Uga0NvZGVjVGhlb3JhOgorICAgIGNhc2UgVmlkZW9Db2RlYzo6a1RoZW9yYToKICAgICAgIHJldHVybiBrU2JNZWRpYVZpZGVvQ29kZWNUaGVvcmE7Ci0gICAgY2FzZSBrQ29kZWNWUDg6CisgICAgY2FzZSBWaWRlb0NvZGVjOjprVlA4OgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY1ZwODsKLSAgICBjYXNlIGtDb2RlY1ZQOToKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtWUDk6CiAgICAgICByZXR1cm4ga1NiTWVkaWFWaWRlb0NvZGVjVnA5OwotICAgIGNhc2Uga0NvZGVjSEVWQzoKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtIRVZDOgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjU7Ci0gICAgY2FzZSBrQ29kZWNBVjE6CisgICAgY2FzZSBWaWRlb0NvZGVjOjprQVYxOgogICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0F2MTsKICAgICBkZWZhdWx0OgogICAgICAgLy8gQ29iYWx0IG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdmlkZW8gY29kZWNzIGRlZmluZWQgYnkgQ2hyb21pdW0uCi0gICAgICBETE9HKEVSUk9SKSA8PCAiVW5zdXBwb3J0ZWQgdmlkZW8gY29kZWMgIgotICAgICAgICAgICAgICAgICAgPDwgY29iYWx0OjptZWRpYTo6R2V0Q29kZWNOYW1lKGNvZGVjKTsKKyAgICAgIERMT0coRVJST1IpIDw8ICJVbnN1cHBvcnRlZCB2aWRlbyBjb2RlYyAiIDw8IDo6bWVkaWE6OkdldENvZGVjTmFtZShjb2RlYyk7CiAgICAgICByZXR1cm4ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZTsKICAgfQogICBOT1RSRUFDSEVEKCk7CkBAIC05MSwxOCArOTMsMTUgQEAKIH0KIAogU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyBNZWRpYUF1ZGlvQ29uZmlnVG9TYk1lZGlhQXVkaW9TYW1wbGVJbmZvKAotICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fZGVjb2Rlcl9jb25maWcpIHsKKyAgICBjb25zdCA6Om1lZGlhOjpBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2RlY29kZXJfY29uZmlnLAorICAgIGNvbnN0IGNoYXIqIG1pbWVfdHlwZSkgewogICBEQ0hFQ0soYXVkaW9fZGVjb2Rlcl9jb25maWcuSXNWYWxpZENvbmZpZygpKTsKIAogICBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvIGF1ZGlvX3NhbXBsZV9pbmZvOwogCiAgIGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjID0KICAgICAgIE1lZGlhQXVkaW9Db2RlY1RvU2JNZWRpYUF1ZGlvQ29kZWMoYXVkaW9fZGVjb2Rlcl9jb25maWcuY29kZWMoKSk7Ci0KLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLSAgYXVkaW9fc2FtcGxlX2luZm8ubWltZSA9IGF1ZGlvX2RlY29kZXJfY29uZmlnLm1pbWUoKS5jX3N0cigpOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQorICBhdWRpb19zYW1wbGVfaW5mby5taW1lID0gbWltZV90eXBlOwogICAvLyBUT0RPOiBNYWtlIHRoaXMgd29yayB3aXRoIG5vbiBBQUMgYXVkaW8uCiAgIGF1ZGlvX3NhbXBsZV9pbmZvLmZvcm1hdF90YWcgPSAweDAwZmY7CiAgIGF1ZGlvX3NhbXBsZV9pbmZvLm51bWJlcl9vZl9jaGFubmVscyA9CkBAIC0xMTMsNTggKzExMiw1NCBAQAogICBhdWRpb19zYW1wbGVfaW5mby5ibG9ja19hbGlnbm1lbnQgPSA0OwogICBhdWRpb19zYW1wbGVfaW5mby5iaXRzX3Blcl9zYW1wbGUgPSBhdWRpb19kZWNvZGVyX2NvbmZpZy5iaXRzX3Blcl9jaGFubmVsKCk7CiAKKyAgY29uc3QgYXV0byYgZXh0cmFfZGF0YSA9IGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjID09IGtTYk1lZGlhQXVkaW9Db2RlY0FhYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXVkaW9fZGVjb2Rlcl9jb25maWcuYWFjX2V4dHJhX2RhdGEoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXVkaW9fZGVjb2Rlcl9jb25maWcuZXh0cmFfZGF0YSgpOwogICBhdWRpb19zYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWdfc2l6ZSA9Ci0gICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oYXVkaW9fZGVjb2Rlcl9jb25maWcuZXh0cmFfZGF0YSgpLnNpemUoKSk7CisgICAgICBzdGF0aWNfY2FzdDx1aW50MTZfdD4oZXh0cmFfZGF0YS5zaXplKCkpOwogICBpZiAoYXVkaW9fc2FtcGxlX2luZm8uYXVkaW9fc3BlY2lmaWNfY29uZmlnX3NpemUgPT0gMCkgewogICAgIGF1ZGlvX3NhbXBsZV9pbmZvLmF1ZGlvX3NwZWNpZmljX2NvbmZpZyA9IE5VTEw7CiAgIH0gZWxzZSB7Ci0gICAgYXVkaW9fc2FtcGxlX2luZm8uYXVkaW9fc3BlY2lmaWNfY29uZmlnID0KLSAgICAgICAgJmF1ZGlvX2RlY29kZXJfY29uZmlnLmV4dHJhX2RhdGEoKVswXTsKKyAgICBhdWRpb19zYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWcgPSBleHRyYV9kYXRhLmRhdGEoKTsKICAgfQogCiAgIHJldHVybiBhdWRpb19zYW1wbGVfaW5mbzsKIH0KIAotRGVtdXhlclN0cmVhbTo6VHlwZSBTYk1lZGlhVHlwZVRvRGVtdXhlclN0cmVhbVR5cGUoU2JNZWRpYVR5cGUgdHlwZSkgeworOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6VHlwZSBTYk1lZGlhVHlwZVRvRGVtdXhlclN0cmVhbVR5cGUoU2JNZWRpYVR5cGUgdHlwZSkgewogICBpZiAodHlwZSA9PSBrU2JNZWRpYVR5cGVBdWRpbykgewotICAgIHJldHVybiBEZW11eGVyU3RyZWFtOjpBVURJTzsKKyAgICByZXR1cm4gOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6QVVESU87CiAgIH0KICAgRENIRUNLX0VRKHR5cGUsIGtTYk1lZGlhVHlwZVZpZGVvKTsKLSAgcmV0dXJuIERlbXV4ZXJTdHJlYW06OlZJREVPOworICByZXR1cm4gOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6VklERU87CiB9CiAKLVNiTWVkaWFUeXBlIERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIHsKLSAgaWYgKHR5cGUgPT0gRGVtdXhlclN0cmVhbTo6QVVESU8pIHsKK1NiTWVkaWFUeXBlIERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZSg6Om1lZGlhOjpEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIHsKKyAgaWYgKHR5cGUgPT0gOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6QVVESU8pIHsKICAgICByZXR1cm4ga1NiTWVkaWFUeXBlQXVkaW87CiAgIH0KLSAgRENIRUNLX0VRKHR5cGUsIERlbXV4ZXJTdHJlYW06OlZJREVPKTsKKyAgRENIRUNLX0VRKHR5cGUsIDo6bWVkaWE6OkRlbXV4ZXJTdHJlYW06OlZJREVPKTsKICAgcmV0dXJuIGtTYk1lZGlhVHlwZVZpZGVvOwogfQogCi12b2lkIEZpbGxEcm1TYW1wbGVJbmZvKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlciwKK3ZvaWQgRmlsbERybVNhbXBsZUluZm8oY29uc3Qgc2NvcGVkX3JlZnB0cjw6Om1lZGlhOjpEZWNvZGVyQnVmZmVyPiYgYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICBTYkRybVNhbXBsZUluZm8qIGRybV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN1YlNhbXBsZU1hcHBpbmcqIHN1YnNhbXBsZV9tYXBwaW5nKSB7CiAgIERDSEVDSyhkcm1faW5mbyk7CiAgIERDSEVDSyhzdWJzYW1wbGVfbWFwcGluZyk7CiAKLSAgY29uc3QgRGVjcnlwdENvbmZpZyogY29uZmlnID0gYnVmZmVyLT5kZWNyeXB0X2NvbmZpZygpOworICBjb25zdCA6Om1lZGlhOjpEZWNyeXB0Q29uZmlnKiBjb25maWcgPSBidWZmZXItPmRlY3J5cHRfY29uZmlnKCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICBpZiAoY29uZmlnLT5lbmNyeXB0aW9uX21vZGUoKSA9PSBFbmNyeXB0aW9uTW9kZTo6a0NlbmMpIHsKKyAgaWYgKGNvbmZpZy0+ZW5jcnlwdGlvbl9zY2hlbWUoKSA9PSA6Om1lZGlhOjpFbmNyeXB0aW9uU2NoZW1lOjprQ2VuYykgewogICAgIGRybV9pbmZvLT5lbmNyeXB0aW9uX3NjaGVtZSA9IGtTYkRybUVuY3J5cHRpb25TY2hlbWVBZXNDdHI7CiAgIH0gZWxzZSB7Ci0gICAgRENIRUNLX0VRKGNvbmZpZy0+ZW5jcnlwdGlvbl9tb2RlKCksIEVuY3J5cHRpb25Nb2RlOjprQ2Jjcyk7CisgICAgRENIRUNLX0VRKGNvbmZpZy0+ZW5jcnlwdGlvbl9zY2hlbWUoKSwgOjptZWRpYTo6RW5jcnlwdGlvblNjaGVtZTo6a0NiY3MpOwogICAgIGRybV9pbmZvLT5lbmNyeXB0aW9uX3NjaGVtZSA9IGtTYkRybUVuY3J5cHRpb25TY2hlbWVBZXNDYmM7CiAgIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgRENIRUNLX0VRKGNvbmZpZy0+ZW5jcnlwdGlvbl9tb2RlKCksIEVuY3J5cHRpb25Nb2RlOjprQ2VuYyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKLS8vIFNldCBjb250ZW50IG9mIHxkcm1faW5mb3wgdG8gZGVmYXVsdCBvciBpbnZhbGlkIHZhbHVlcy4KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgorICAvLyBTZXQgY29udGVudCBvZiB8ZHJtX2luZm98IHRvIGRlZmF1bHQgb3IgaW52YWxpZCB2YWx1ZXMuCiAgIGRybV9pbmZvLT5lbmNyeXB0aW9uX3BhdHRlcm4uY3J5cHRfYnl0ZV9ibG9jayA9IDA7CiAgIGRybV9pbmZvLT5lbmNyeXB0aW9uX3BhdHRlcm4uc2tpcF9ieXRlX2Jsb2NrID0gMDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgZHJtX2luZm8tPmluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplID0gMDsKICAgZHJtX2luZm8tPmlkZW50aWZpZXJfc2l6ZSA9IDA7CiAgIGRybV9pbmZvLT5zdWJzYW1wbGVfY291bnQgPSAwOwpAQCAtMTgzLDE2ICsxNzgsMTYgQEAKICAgfQogCiAgIG1lbWNweShkcm1faW5mby0+aW5pdGlhbGl6YXRpb25fdmVjdG9yLCAmY29uZmlnLT5pdigpWzBdLAotICAgICAgICAgICAgICAgY29uZmlnLT5pdigpLnNpemUoKSk7CisgICAgICAgICBjb25maWctPml2KCkuc2l6ZSgpKTsKICAgZHJtX2luZm8tPmluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplID0gY29uZmlnLT5pdigpLnNpemUoKTsKLSAgbWVtY3B5KGRybV9pbmZvLT5pZGVudGlmaWVyLCAmY29uZmlnLT5rZXlfaWQoKVswXSwKLSAgICAgICAgICAgICAgIGNvbmZpZy0+a2V5X2lkKCkuc2l6ZSgpKTsKKyAgbWVtY3B5KGRybV9pbmZvLT5pZGVudGlmaWVyLCAmY29uZmlnLT5rZXlfaWQoKVswXSwgY29uZmlnLT5rZXlfaWQoKS5zaXplKCkpOwogICBkcm1faW5mby0+aWRlbnRpZmllcl9zaXplID0gY29uZmlnLT5rZXlfaWQoKS5zaXplKCk7CiAgIGRybV9pbmZvLT5zdWJzYW1wbGVfY291bnQgPSBjb25maWctPnN1YnNhbXBsZXMoKS5zaXplKCk7CiAKICAgaWYgKGRybV9pbmZvLT5zdWJzYW1wbGVfY291bnQgPiAwKSB7Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNiRHJtU3ViU2FtcGxlTWFwcGluZykgPT0gc2l6ZW9mKFN1YnNhbXBsZUVudHJ5KSwKLSAgICAgICAgICAgICAgICAgICBTdWJTYW1wbGVFbnRyeVNpemVzTWF0Y2gpOworICAgIENPTVBJTEVfQVNTRVJUKAorICAgICAgICBzaXplb2YoU2JEcm1TdWJTYW1wbGVNYXBwaW5nKSA9PSBzaXplb2YoOjptZWRpYTo6U3Vic2FtcGxlRW50cnkpLAorICAgICAgICBTdWJTYW1wbGVFbnRyeVNpemVzTWF0Y2gpOwogICAgIGRybV9pbmZvLT5zdWJzYW1wbGVfbWFwcGluZyA9CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU2JEcm1TdWJTYW1wbGVNYXBwaW5nKj4oCiAgICAgICAgICAgICAmY29uZmlnLT5zdWJzYW1wbGVzKClbMF0pOwpAQCAtMjAzLDE2OSArMTk4LDE2NSBAQAogICAgIHN1YnNhbXBsZV9tYXBwaW5nLT5lbmNyeXB0ZWRfYnl0ZV9jb3VudCA9IGJ1ZmZlci0+ZGF0YV9zaXplKCk7CiAgIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmIChidWZmZXItPmRlY3J5cHRfY29uZmlnKCktPkhhc1BhdHRlcm4oKSkgewogICAgIGRybV9pbmZvLT5lbmNyeXB0aW9uX3BhdHRlcm4uY3J5cHRfYnl0ZV9ibG9jayA9CiAgICAgICAgIGNvbmZpZy0+ZW5jcnlwdGlvbl9wYXR0ZXJuKCktPmNyeXB0X2J5dGVfYmxvY2soKTsKICAgICBkcm1faW5mby0+ZW5jcnlwdGlvbl9wYXR0ZXJuLnNraXBfYnl0ZV9ibG9jayA9CiAgICAgICAgIGNvbmZpZy0+ZW5jcnlwdGlvbl9wYXR0ZXJuKCktPnNraXBfYnl0ZV9ibG9jaygpOwogICB9Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIGlmIChidWZmZXItPmRlY3J5cHRfY29uZmlnKCktPkhhc1BhdHRlcm4oKSkgewotICAgIERDSEVDS19FUShjb25maWctPmVuY3J5cHRpb25fcGF0dGVybigpLT5jcnlwdF9ieXRlX2Jsb2NrKCksIDApOwotICAgIERDSEVDS19FUShjb25maWctPmVuY3J5cHRpb25fcGF0dGVybigpLT5za2lwX2J5dGVfYmxvY2soKSwgMCk7Ci0gIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIH0KIAotLy8gRW5zdXJlIHRoYXQgdGhlIGVudW1zIGluIHN0YXJib2FyZC9tZWRpYS5oIG1hdGNoIGVudW1zIGluIGdmeDo6Q29sb3JTcGFjZS4KKy8vIEVuc3VyZSB0aGF0IHRoZSBlbnVtcyBpbiBzdGFyYm9hcmQvbWVkaWEuaCBtYXRjaCBlbnVtcyBpbgorLy8gOjptZWRpYTo6VmlkZW9Db2xvclNwYWNlIGFuZCBnZng6OkNvbG9yU3BhY2UuCiAjZGVmaW5lIEVOVU1fRVEoYSwgYikgXAogICBDT01QSUxFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGEpID09IHN0YXRpY19jYXN0PGludD4oYiksIG1pc21hdGNoaW5nX2VudW1zKQogCiAvLyBFbnN1cmUgUHJpbWFyeUlkIGVudW1zIGNvbnZlcnQgY29ycmVjdGx5LgotRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFJlc2VydmVkMCwgZ2Z4OjpDb2xvclNwYWNlOjprUHJpbWFyeUlkUmVzZXJ2ZWQwKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRCdDcwOSwgZ2Z4OjpDb2xvclNwYWNlOjprUHJpbWFyeUlkQnQ3MDkpOwotRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFVuc3BlY2lmaWVkLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRVbnNwZWNpZmllZCk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkUmVzZXJ2ZWQsIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZFJlc2VydmVkKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRCdDQ3ME0sIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZEJ0NDcwTSk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkQnQ0NzBCZywgZ2Z4OjpDb2xvclNwYWNlOjprUHJpbWFyeUlkQnQ0NzBCZyk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkU21wdGUxNzBNLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRTbXB0ZTE3ME0pOwotRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFNtcHRlMjQwTSwgZ2Z4OjpDb2xvclNwYWNlOjprUHJpbWFyeUlkU21wdGUyNDBNKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRGaWxtLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRGaWxtKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRCdDIwMjAsIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZEJ0MjAyMCk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkU21wdGVTdDQyODEsIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZFNtcHRlU3Q0MjgxKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRTbXB0ZVN0NDMxMiwgZ2Z4OjpDb2xvclNwYWNlOjprUHJpbWFyeUlkU21wdGVTdDQzMTIpOwotRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFNtcHRlU3Q0MzIxLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRTbXB0ZVN0NDMyMSk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkTGFzdFN0YW5kYXJkVmFsdWUsCi0gICAgICAgIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZExhc3RTdGFuZGFyZFZhbHVlKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRVbmtub3duLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRVbmtub3duKTsKLUVOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRYeXpENTAsIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZFh5ekQ1MCk7Ci1FTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkQ3VzdG9tLCBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRDdXN0b20pOwotRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZExhc3QsIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZExhc3QpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFJlc2VydmVkMCwgVmlkZW9Db2xvclNwYWNlOjpQcmltYXJ5SUQ6OklOVkFMSUQpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZEJ0NzA5LCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6QlQ3MDkpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFVuc3BlY2lmaWVkLCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6VU5TUEVDSUZJRUQpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZEJ0NDcwTSwgVmlkZW9Db2xvclNwYWNlOjpQcmltYXJ5SUQ6OkJUNDcwTSk7CitFTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkQnQ0NzBCZywgVmlkZW9Db2xvclNwYWNlOjpQcmltYXJ5SUQ6OkJUNDcwQkcpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFNtcHRlMTcwTSwgVmlkZW9Db2xvclNwYWNlOjpQcmltYXJ5SUQ6OlNNUFRFMTcwTSk7CitFTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkU21wdGUyNDBNLCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6U01QVEUyNDBNKTsKK0VOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRGaWxtLCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6RklMTSk7CitFTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkQnQyMDIwLCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6QlQyMDIwKTsKK0VOVU1fRVEoa1NiTWVkaWFQcmltYXJ5SWRTbXB0ZVN0NDI4MSwgVmlkZW9Db2xvclNwYWNlOjpQcmltYXJ5SUQ6OlNNUFRFU1Q0MjhfMSk7CitFTlVNX0VRKGtTYk1lZGlhUHJpbWFyeUlkU21wdGVTdDQzMTIsIFZpZGVvQ29sb3JTcGFjZTo6UHJpbWFyeUlEOjpTTVBURVNUNDMxXzIpOworRU5VTV9FUShrU2JNZWRpYVByaW1hcnlJZFNtcHRlU3Q0MzIxLCBWaWRlb0NvbG9yU3BhY2U6OlByaW1hcnlJRDo6U01QVEVTVDQzMl8xKTsKIAogLy8gRW5zdXJlIFRyYW5zZmVySWQgZW51bXMgY29udmVydCBjb3JyZWN0bHkuCi1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZFJlc2VydmVkMCwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZFJlc2VydmVkMCk7Ci1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEJ0NzA5LCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkQnQ3MDkpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRVbnNwZWNpZmllZCwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZFVuc3BlY2lmaWVkKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkUmVzZXJ2ZWQsIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRSZXNlcnZlZCk7Ci1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEdhbW1hMjIsIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRHYW1tYTIyKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkR2FtbWEyOCwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZEdhbW1hMjgpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRTbXB0ZTE3ME0sIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRTbXB0ZTE3ME0pOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRTbXB0ZTI0ME0sIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRTbXB0ZTI0ME0pOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMaW5lYXIsIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRMaW5lYXIpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMb2csIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRMb2cpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMb2dTcXJ0LCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkTG9nU3FydCk7Ci1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEllYzYxOTY2MjQsIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRJZWM2MTk2NjI0KTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkQnQxMzYxRWNnLCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkQnQxMzYxRWNnKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkSWVjNjE5NjYyMSwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZEllYzYxOTY2MjEpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWQxMEJpdEJ0MjAyMCwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZDEwQml0QnQyMDIwKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkMTJCaXRCdDIwMjAsIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWQxMkJpdEJ0MjAyMCk7Ci1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZFNtcHRlU3QyMDg0LCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkU21wdGVTdDIwODQpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRTbXB0ZVN0NDI4MSwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZFNtcHRlU3Q0MjgxKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkQXJpYlN0ZEI2NywgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZEFyaWJTdGRCNjcpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMYXN0U3RhbmRhcmRWYWx1ZSwKLSAgICAgICAgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZExhc3RTdGFuZGFyZFZhbHVlKTsKLUVOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkVW5rbm93biwgZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZFVua25vd24pOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRHYW1tYTI0LCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkR2FtbWEyNCk7Ci1FTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZFNtcHRlU3QyMDg0Tm9uSGRyLAotICAgICAgICBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkU21wdGVTdDIwODROb25IZHIpOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRDdXN0b20sIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRDdXN0b20pOwotRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMYXN0LCBnZng6OkNvbG9yU3BhY2U6OmtUcmFuc2ZlcklkTGFzdCk7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZFJlc2VydmVkMCwgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpJTlZBTElEKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkQnQ3MDksIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6QlQ3MDkpOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRVbnNwZWNpZmllZCwKKyAgICAgICAgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpVTlNQRUNJRklFRCk7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEdhbW1hMjIsIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6R0FNTUEyMik7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEdhbW1hMjgsIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6R0FNTUEyOCk7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZFNtcHRlMTcwTSwgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpTTVBURTE3ME0pOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRTbXB0ZTI0ME0sIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6U01QVEUyNDBNKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkTGluZWFyLCBWaWRlb0NvbG9yU3BhY2U6OlRyYW5zZmVySUQ6OkxJTkVBUik7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZExvZywgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpMT0cpOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRMb2dTcXJ0LCBWaWRlb0NvbG9yU3BhY2U6OlRyYW5zZmVySUQ6OkxPR19TUVJUKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkSWVjNjE5NjYyNCwKKyAgICAgICAgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpJRUM2MTk2Nl8yXzQpOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRCdDEzNjFFY2csIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6QlQxMzYxX0VDRyk7CitFTlVNX0VRKGtTYk1lZGlhVHJhbnNmZXJJZEllYzYxOTY2MjEsCisgICAgICAgIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6SUVDNjE5NjZfMl8xKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkMTBCaXRCdDIwMjAsIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6QlQyMDIwXzEwKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkMTJCaXRCdDIwMjAsIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6QlQyMDIwXzEyKTsKK0VOVU1fRVEoa1NiTWVkaWFUcmFuc2ZlcklkU21wdGVTdDIwODQsCisgICAgICAgIFZpZGVvQ29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6U01QVEVTVDIwODQpOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRTbXB0ZVN0NDI4MSwKKyAgICAgICAgVmlkZW9Db2xvclNwYWNlOjpUcmFuc2ZlcklEOjpTTVBURVNUNDI4XzEpOworRU5VTV9FUShrU2JNZWRpYVRyYW5zZmVySWRBcmliU3RkQjY3LAorICAgICAgICBWaWRlb0NvbG9yU3BhY2U6OlRyYW5zZmVySUQ6OkFSSUJfU1REX0I2Nyk7CiAKIC8vIEVuc3VyZSBNYXRyaXhJZCBlbnVtcyBjb252ZXJ0IGNvcnJlY3RseS4KLUVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZFJnYiwgZ2Z4OjpDb2xvclNwYWNlOjprTWF0cml4SWRSZ2IpOwotRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkQnQ3MDksIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkQnQ3MDkpOwotRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkVW5zcGVjaWZpZWQsIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkVW5zcGVjaWZpZWQpOwotRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkUmVzZXJ2ZWQsIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkUmVzZXJ2ZWQpOwotRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkRmNjLCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZEZjYyk7Ci1FTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRCdDQ3MEJnLCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZEJ0NDcwQmcpOwotRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkU21wdGUxNzBNLCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZFNtcHRlMTcwTSk7Ci1FTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRTbXB0ZTI0ME0sIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkU21wdGUyNDBNKTsKLUVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZFlDZ0NvLCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZFlDZ0NvKTsKK0VOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZFJnYiwgVmlkZW9Db2xvclNwYWNlOjpNYXRyaXhJRDo6UkdCKTsKK0VOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZEJ0NzA5LCBWaWRlb0NvbG9yU3BhY2U6Ok1hdHJpeElEOjpCVDcwOSk7CitFTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRVbnNwZWNpZmllZCwgVmlkZW9Db2xvclNwYWNlOjpNYXRyaXhJRDo6VU5TUEVDSUZJRUQpOworRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkRmNjLCBWaWRlb0NvbG9yU3BhY2U6Ok1hdHJpeElEOjpGQ0MpOworRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkQnQ0NzBCZywgVmlkZW9Db2xvclNwYWNlOjpNYXRyaXhJRDo6QlQ0NzBCRyk7CitFTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRTbXB0ZTE3ME0sIFZpZGVvQ29sb3JTcGFjZTo6TWF0cml4SUQ6OlNNUFRFMTcwTSk7CitFTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRTbXB0ZTI0ME0sIFZpZGVvQ29sb3JTcGFjZTo6TWF0cml4SUQ6OlNNUFRFMjQwTSk7CitFTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRZQ2dDbywgVmlkZW9Db2xvclNwYWNlOjpNYXRyaXhJRDo6WUNPQ0cpOwogRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2UsCi0gICAgICAgIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2UpOworICAgICAgICBWaWRlb0NvbG9yU3BhY2U6Ok1hdHJpeElEOjpCVDIwMjBfTkNMKTsKIEVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZEJ0MjAyMENvbnN0YW50THVtaW5hbmNlLAotICAgICAgICBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZEJ0MjAyMENvbnN0YW50THVtaW5hbmNlKTsKLUVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZFlEekR4LCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZFlEekR4KTsKLUVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZExhc3RTdGFuZGFyZFZhbHVlLAotICAgICAgICBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZExhc3RTdGFuZGFyZFZhbHVlKTsKLUVOVU1fRVEoa1NiTWVkaWFNYXRyaXhJZFVua25vd24sIGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkVW5rbm93bik7Ci1FTlVNX0VRKGtTYk1lZGlhTWF0cml4SWRMYXN0LCBnZng6OkNvbG9yU3BhY2U6OmtNYXRyaXhJZExhc3QpOworICAgICAgICBWaWRlb0NvbG9yU3BhY2U6Ok1hdHJpeElEOjpCVDIwMjBfQ0wpOworRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkWUR6RHgsIFZpZGVvQ29sb3JTcGFjZTo6TWF0cml4SUQ6OllEWkRYKTsKKy8vIFRPRE8oYi8yMzA4OTExNzcpOiBBZGQgYGtTYk1lZGlhTWF0cml4SWRJbnZhbGlkYCB0byBTYk1lZGlhTWF0cml4SWQgYW5kIHNldAorLy8gaXQgdG8gMjU1IGFuZCB1bmNvbW1lbnQgYW5kIHJlZmluZSB0aGUgc2VjdGlvbiBmb3IgYGtTYk1lZGlhTWF0cml4SWRJbnZhbGlkYAorLy8gaW4gTWVkaWFUb1NiTWVkaWFDb2xvck1ldGFkYXRhKCkuCisvLyAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfTUVESUFfTUFUUklYX0lEX0lOVkFMSURfQVBJX1ZFUlNJT04KKy8vICAgRU5VTV9FUShrU2JNZWRpYU1hdHJpeElkSW52YWxpZCwKKy8vICAgICAgICAgICBWaWRlb0NvbG9yU3BhY2U6Ok1hdHJpeElEOjpJTlZBTElEKTsKKy8vICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gIFNCX01FRElBX01BVFJJWF9JRF9JTlZBTElEX0FQSV9WRVJTSU9OCiAKIC8vIEVuc3VyZSBSYW5nZUlkIGVudW1zIGNvbnZlcnQgY29ycmVjdGx5LgotRU5VTV9FUShrU2JNZWRpYVJhbmdlSWRVbnNwZWNpZmllZCwgZ2Z4OjpDb2xvclNwYWNlOjprUmFuZ2VJZFVuc3BlY2lmaWVkKTsKLUVOVU1fRVEoa1NiTWVkaWFSYW5nZUlkTGltaXRlZCwgZ2Z4OjpDb2xvclNwYWNlOjprUmFuZ2VJZExpbWl0ZWQpOwotRU5VTV9FUShrU2JNZWRpYVJhbmdlSWRGdWxsLCBnZng6OkNvbG9yU3BhY2U6OmtSYW5nZUlkRnVsbCk7Ci1FTlVNX0VRKGtTYk1lZGlhUmFuZ2VJZERlcml2ZWQsIGdmeDo6Q29sb3JTcGFjZTo6a1JhbmdlSWREZXJpdmVkKTsKLUVOVU1fRVEoa1NiTWVkaWFSYW5nZUlkTGFzdCwgZ2Z4OjpDb2xvclNwYWNlOjprUmFuZ2VJZExhc3QpOworRU5VTV9FUShrU2JNZWRpYVJhbmdlSWRVbnNwZWNpZmllZCwgZ2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEOjpJTlZBTElEKTsKK0VOVU1fRVEoa1NiTWVkaWFSYW5nZUlkTGltaXRlZCwgZ2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEOjpMSU1JVEVEKTsKK0VOVU1fRVEoa1NiTWVkaWFSYW5nZUlkRnVsbCwgZ2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEOjpGVUxMKTsKK0VOVU1fRVEoa1NiTWVkaWFSYW5nZUlkRGVyaXZlZCwgZ2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEOjpERVJJVkVEKTsKIAogU2JNZWRpYUNvbG9yTWV0YWRhdGEgTWVkaWFUb1NiTWVkaWFDb2xvck1ldGFkYXRhKAotICAgIGNvbnN0IFdlYk1Db2xvck1ldGFkYXRhJiB3ZWJtX2NvbG9yX21ldGFkYXRhKSB7Ci0gIFNiTWVkaWFDb2xvck1ldGFkYXRhIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhOworICAgIGNvbnN0IFZpZGVvQ29sb3JTcGFjZSYgY29sb3Jfc3BhY2UsCisgICAgY29uc3QgYWJzbDo6b3B0aW9uYWw8Z2Z4OjpIRFJNZXRhZGF0YT4mIGhkcl9tZXRhZGF0YSkgeworICBTYk1lZGlhQ29sb3JNZXRhZGF0YSBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YSA9IHt9OwogCiAgIC8vIENvcHkgdGhlIG90aGVyIGNvbG9yIG1ldGFkYXRhIGJlbG93LgotICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5iaXRzX3Blcl9jaGFubmVsID0gd2VibV9jb2xvcl9tZXRhZGF0YS5CaXRzUGVyQ2hhbm5lbDsKLSAgc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEuY2hyb21hX3N1YnNhbXBsaW5nX2hvcml6b250YWwgPQotICAgICAgd2VibV9jb2xvcl9tZXRhZGF0YS5DaHJvbWFTdWJzYW1wbGluZ0hvcno7Ci0gIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmNocm9tYV9zdWJzYW1wbGluZ192ZXJ0aWNhbCA9Ci0gICAgICB3ZWJtX2NvbG9yX21ldGFkYXRhLkNocm9tYVN1YnNhbXBsaW5nVmVydDsKLSAgc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEuY2Jfc3Vic2FtcGxpbmdfaG9yaXpvbnRhbCA9Ci0gICAgICB3ZWJtX2NvbG9yX21ldGFkYXRhLkNiU3Vic2FtcGxpbmdIb3J6OwotICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jYl9zdWJzYW1wbGluZ192ZXJ0aWNhbCA9Ci0gICAgICB3ZWJtX2NvbG9yX21ldGFkYXRhLkNiU3Vic2FtcGxpbmdWZXJ0OwotICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jaHJvbWFfc2l0aW5nX2hvcml6b250YWwgPQotICAgICAgd2VibV9jb2xvcl9tZXRhZGF0YS5DaHJvbWFTaXRpbmdIb3J6OwotICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jaHJvbWFfc2l0aW5nX3ZlcnRpY2FsID0KLSAgICAgIHdlYm1fY29sb3JfbWV0YWRhdGEuQ2hyb21hU2l0aW5nVmVydDsKKyAgLy8gVE9ETyhiLzIzMDkxNTk0Mik6IFJldmlzaXQgdG8gZW5zdXJlIHRoYXQgdGhlIG1ldGFkYXRhIGlzIHZhbGlkIGFuZAorICAvLyBjb25zaWRlciBkZXByZWNhdGUgdGhlbSBmcm9tIGBTYk1lZGlhQ29sb3JNZXRhZGF0YWAuCisgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmJpdHNfcGVyX2NoYW5uZWwgPSAwOworICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jaHJvbWFfc3Vic2FtcGxpbmdfaG9yaXpvbnRhbCA9IDA7CisgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmNocm9tYV9zdWJzYW1wbGluZ192ZXJ0aWNhbCA9IDA7CisgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmNiX3N1YnNhbXBsaW5nX2hvcml6b250YWwgPSAwOworICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jYl9zdWJzYW1wbGluZ192ZXJ0aWNhbCA9IDA7CisgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmNocm9tYV9zaXRpbmdfaG9yaXpvbnRhbCA9IDA7CisgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmNocm9tYV9zaXRpbmdfdmVydGljYWwgPSAwOwogCiAgIC8vIENvcHkgdGhlIEhEUiBNZXRhZGF0YSBiZWxvdy4KLSAgU2JNZWRpYU1hc3RlcmluZ01ldGFkYXRhIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YTsKLSAgSERSTWV0YWRhdGEgaGRyX21ldGFkYXRhID0gd2VibV9jb2xvcl9tZXRhZGF0YS5oZHJfbWV0YWRhdGE7Ci0gIE1hc3RlcmluZ01ldGFkYXRhIG1hc3RlcmluZ19tZXRhZGF0YSA9IGhkcl9tZXRhZGF0YS5tYXN0ZXJpbmdfbWV0YWRhdGE7CisgIFNiTWVkaWFNYXN0ZXJpbmdNZXRhZGF0YSBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEgPSB7fTsKIAotICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9yX2Nocm9tYXRpY2l0eV94ID0KLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3g7Ci0gIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3kgPQotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfcl9jaHJvbWF0aWNpdHlfeTsKKyAgaWYgKGhkcl9tZXRhZGF0YSkgeworICAgIGNvbnN0IGF1dG8mIGNvbG9yX3ZvbHVtZV9tZXRhZGF0YSA9IGhkcl9tZXRhZGF0YS0+Y29sb3Jfdm9sdW1lX21ldGFkYXRhOwogCi0gIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X2dfY2hyb21hdGljaXR5X3ggPQotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeDsKLSAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeSA9Ci0gICAgICBtYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9nX2Nocm9tYXRpY2l0eV95OworICAgIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3ggPQorICAgICAgICBjb2xvcl92b2x1bWVfbWV0YWRhdGEucHJpbWFyeV9yLngoKTsKKyAgICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9yX2Nocm9tYXRpY2l0eV95ID0KKyAgICAgICAgY29sb3Jfdm9sdW1lX21ldGFkYXRhLnByaW1hcnlfci55KCk7CiAKLSAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeCA9Ci0gICAgICBtYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9iX2Nocm9tYXRpY2l0eV94OwotICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9iX2Nocm9tYXRpY2l0eV95ID0KLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3k7CisgICAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeCA9CisgICAgICAgIGNvbG9yX3ZvbHVtZV9tZXRhZGF0YS5wcmltYXJ5X2cueCgpOworICAgIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X2dfY2hyb21hdGljaXR5X3kgPQorICAgICAgICBjb2xvcl92b2x1bWVfbWV0YWRhdGEucHJpbWFyeV9nLnkoKTsKIAotICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEud2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3ggPQotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhLndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94OwotICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEud2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3kgPQotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhLndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV95OworICAgIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3ggPQorICAgICAgICBjb2xvcl92b2x1bWVfbWV0YWRhdGEucHJpbWFyeV9iLngoKTsKKyAgICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9iX2Nocm9tYXRpY2l0eV95ID0KKyAgICAgICAgY29sb3Jfdm9sdW1lX21ldGFkYXRhLnByaW1hcnlfYi55KCk7CiAKLSAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLmx1bWluYW5jZV9tYXggPSBtYXN0ZXJpbmdfbWV0YWRhdGEubHVtaW5hbmNlX21heDsKLSAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLmx1bWluYW5jZV9taW4gPSBtYXN0ZXJpbmdfbWV0YWRhdGEubHVtaW5hbmNlX21pbjsKKyAgICBzYl9tZWRpYV9tYXN0ZXJpbmdfbWV0YWRhdGEud2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3ggPQorICAgICAgICBjb2xvcl92b2x1bWVfbWV0YWRhdGEud2hpdGVfcG9pbnQueCgpOworICAgIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS53aGl0ZV9wb2ludF9jaHJvbWF0aWNpdHlfeSA9CisgICAgICAgIGNvbG9yX3ZvbHVtZV9tZXRhZGF0YS53aGl0ZV9wb2ludC55KCk7CiAKLSAgc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEubWFzdGVyaW5nX21ldGFkYXRhID0gc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhOwotICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5tYXhfY2xsID0gaGRyX21ldGFkYXRhLm1heF9jbGw7Ci0gIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLm1heF9mYWxsID0gaGRyX21ldGFkYXRhLm1heF9mYWxsOworICAgIHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YS5sdW1pbmFuY2VfbWF4ID0KKyAgICAgICAgY29sb3Jfdm9sdW1lX21ldGFkYXRhLmx1bWluYW5jZV9tYXg7CisgICAgc2JfbWVkaWFfbWFzdGVyaW5nX21ldGFkYXRhLmx1bWluYW5jZV9taW4gPQorICAgICAgICBjb2xvcl92b2x1bWVfbWV0YWRhdGEubHVtaW5hbmNlX21pbjsKKworICAgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLm1hc3RlcmluZ19tZXRhZGF0YSA9IHNiX21lZGlhX21hc3RlcmluZ19tZXRhZGF0YTsKKyAgICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5tYXhfY2xsID0gaGRyX21ldGFkYXRhLT5tYXhfY29udGVudF9saWdodF9sZXZlbDsKKyAgICBzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5tYXhfZmFsbCA9CisgICAgICAgIGhkcl9tZXRhZGF0YS0+bWF4X2ZyYW1lX2F2ZXJhZ2VfbGlnaHRfbGV2ZWw7CisgIH0KIAogICAvLyBDb3B5IHRoZSBjb2xvciBzcGFjZSBiZWxvdy4KLSAgZ2Z4OjpDb2xvclNwYWNlIGNvbG9yX3NwYWNlID0gd2VibV9jb2xvcl9tZXRhZGF0YS5jb2xvcl9zcGFjZTsKICAgc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEucHJpbWFyaWVzID0KLSAgICAgIHN0YXRpY19jYXN0PFNiTWVkaWFQcmltYXJ5SWQ+KGNvbG9yX3NwYWNlLnByaW1hcmllcygpKTsKKyAgICAgIHN0YXRpY19jYXN0PFNiTWVkaWFQcmltYXJ5SWQ+KGNvbG9yX3NwYWNlLnByaW1hcmllcyk7CiAgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLnRyYW5zZmVyID0KLSAgICAgIHN0YXRpY19jYXN0PFNiTWVkaWFUcmFuc2ZlcklkPihjb2xvcl9zcGFjZS50cmFuc2ZlcigpKTsKKyAgICAgIHN0YXRpY19jYXN0PFNiTWVkaWFUcmFuc2ZlcklkPihjb2xvcl9zcGFjZS50cmFuc2Zlcik7CiAgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLm1hdHJpeCA9Ci0gICAgICBzdGF0aWNfY2FzdDxTYk1lZGlhTWF0cml4SWQ+KGNvbG9yX3NwYWNlLm1hdHJpeCgpKTsKKyAgICAgIHN0YXRpY19jYXN0PFNiTWVkaWFNYXRyaXhJZD4oY29sb3Jfc3BhY2UubWF0cml4KTsKKworICAvLyAjaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9NRURJQV9NQVRSSVhfSURfSU5WQUxJRF9BUElfVkVSU0lPTgorICAvLyAgIC8vIFVzZSBga1NiTWVkaWFNYXRyaXhJZFVua25vd25gIHdoZW4gYGtTYk1lZGlhTWF0cml4SWRJbnZhbGlkYCBpc24ndAorICAvLyAgIC8vIGF2YWlsYWJsZS4KKyAgLy8gICBpZiAoY29sb3Jfc3BhY2UubWF0cml4ID09IFZpZGVvQ29sb3JTcGFjZTo6TWF0cml4SUQ6OklOVkFMSUQpIHsKKyAgLy8gICAgIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLm1hdHJpeCA9IGtTYk1lZGlhTWF0cml4SWRVbmtub3duOworICAvLyAgIH0KKyAgLy8gI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IFNCX01FRElBX01BVFJJWF9JRF9JTlZBTElEX0FQSV9WRVJTSU9OCisKICAgc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEucmFuZ2UgPQotICAgICAgc3RhdGljX2Nhc3Q8U2JNZWRpYVJhbmdlSWQ+KGNvbG9yX3NwYWNlLnJhbmdlKCkpOwotICBpZiAoc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEucHJpbWFyaWVzID09IGtTYk1lZGlhUHJpbWFyeUlkQ3VzdG9tKSB7Ci0gICAgY29uc3QgZmxvYXQqIGN1c3RvbV9wcmltYXJ5X21hdHJpeCA9IGNvbG9yX3NwYWNlLmN1c3RvbV9wcmltYXJ5X21hdHJpeCgpOwotICAgIG1lbWNweShzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jdXN0b21fcHJpbWFyeV9tYXRyaXgsCi0gICAgICAgICAgIGN1c3RvbV9wcmltYXJ5X21hdHJpeCwKLSAgICAgICAgICAgc2l6ZW9mKHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmN1c3RvbV9wcmltYXJ5X21hdHJpeCkpOwotICB9CisgICAgICBzdGF0aWNfY2FzdDxTYk1lZGlhUmFuZ2VJZD4oY29sb3Jfc3BhY2UucmFuZ2UpOworICAvLyBUT0RPKGIvMjMwOTE1OTQyKTogUmV2aXNpdCB0byBzZWUgaWYgd2UgaGF2ZSB0byBzdXBwb3J0IGN1c3RvbSBwcmltYXJ5IGlkLgorICAvLyBpZiAoc2JfbWVkaWFfY29sb3JfbWV0YWRhdGEucHJpbWFyaWVzID09IGtTYk1lZGlhUHJpbWFyeUlkQ3VzdG9tKSB7CisgIC8vICAgY29uc3QgZmxvYXQqIGN1c3RvbV9wcmltYXJ5X21hdHJpeCA9IGNvbG9yX3NwYWNlLmN1c3RvbV9wcmltYXJ5X21hdHJpeCgpOworICAvLyAgIG1lbWNweShzYl9tZWRpYV9jb2xvcl9tZXRhZGF0YS5jdXN0b21fcHJpbWFyeV9tYXRyaXgsCisgIC8vICAgICAgICAgIGN1c3RvbV9wcmltYXJ5X21hdHJpeCwKKyAgLy8gICAgICAgICAgc2l6ZW9mKHNiX21lZGlhX2NvbG9yX21ldGFkYXRhLmN1c3RvbV9wcmltYXJ5X21hdHJpeCkpOworICAvLyB9CiAKICAgcmV0dXJuIHNiX21lZGlhX2NvbG9yX21ldGFkYXRhOwogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaAppbmRleCAxODhiN2ExLi5kN2VjMmEyIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaAorKysgYi9jb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaApAQCAtMTUsMzIgKzE1LDM3IEBACiAjaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1NUQVJCT0FSRF9VVElMU19IXwogI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9TVEFSQk9BUkRfVVRJTFNfSF8KIAotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbG91cl9wYXJzZXIuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvZHJtLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzL29wdGlvbmFsLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9oZHJfbWV0YWRhdGEuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewogCi1TYk1lZGlhQXVkaW9Db2RlYyBNZWRpYUF1ZGlvQ29kZWNUb1NiTWVkaWFBdWRpb0NvZGVjKEF1ZGlvQ29kZWMgY29kZWMpOwotU2JNZWRpYVZpZGVvQ29kZWMgTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyhWaWRlb0NvZGVjIGNvZGVjKTsKK1NiTWVkaWFBdWRpb0NvZGVjIE1lZGlhQXVkaW9Db2RlY1RvU2JNZWRpYUF1ZGlvQ29kZWMoOjptZWRpYTo6QXVkaW9Db2RlYyBjb2RlYyk7CitTYk1lZGlhVmlkZW9Db2RlYyBNZWRpYVZpZGVvQ29kZWNUb1NiTWVkaWFWaWRlb0NvZGVjKDo6bWVkaWE6OlZpZGVvQ29kZWMgY29kZWMpOwogCiBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvIE1lZGlhQXVkaW9Db25maWdUb1NiTWVkaWFBdWRpb1NhbXBsZUluZm8oCi0gICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19kZWNvZGVyX2NvbmZpZyk7CisgICAgY29uc3QgOjptZWRpYTo6QXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19kZWNvZGVyX2NvbmZpZywKKyAgICBjb25zdCBjaGFyKiBtaW1lX3R5cGUpOwogCi1EZW11eGVyU3RyZWFtOjpUeXBlIFNiTWVkaWFUeXBlVG9EZW11eGVyU3RyZWFtVHlwZShTYk1lZGlhVHlwZSB0eXBlKTsKLVNiTWVkaWFUeXBlIERlbXV4ZXJTdHJlYW1UeXBlVG9TYk1lZGlhVHlwZShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpOworOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6VHlwZSBTYk1lZGlhVHlwZVRvRGVtdXhlclN0cmVhbVR5cGUoU2JNZWRpYVR5cGUgdHlwZSk7CitTYk1lZGlhVHlwZSBEZW11eGVyU3RyZWFtVHlwZVRvU2JNZWRpYVR5cGUoOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKTsKIAotdm9pZCBGaWxsRHJtU2FtcGxlSW5mbyhjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIsCit2b2lkIEZpbGxEcm1TYW1wbGVJbmZvKGNvbnN0IHNjb3BlZF9yZWZwdHI8OjptZWRpYTo6RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgU2JEcm1TYW1wbGVJbmZvKiBkcm1faW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgU2JEcm1TdWJTYW1wbGVNYXBwaW5nKiBzdWJzYW1wbGVfbWFwcGluZyk7CiAKIFNiTWVkaWFDb2xvck1ldGFkYXRhIE1lZGlhVG9TYk1lZGlhQ29sb3JNZXRhZGF0YSgKLSAgICBjb25zdCBXZWJNQ29sb3JNZXRhZGF0YSYgd2VibV9jb2xvcl9tZXRhZGF0YSk7CisgICAgY29uc3QgOjptZWRpYTo6VmlkZW9Db2xvclNwYWNlJiBjb2xvcl9zcGFjZSwKKyAgICBjb25zdCBhYnNsOjpvcHRpb25hbDxnZng6OkhEUk1ldGFkYXRhPiYgaGRyX21ldGFkYXRhKTsKIAogfSAgLy8gbmFtZXNwYWNlIG1lZGlhCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVjNDc0Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnM6OkluaXRQYXJhbWV0ZXJzKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikKLSAgICA6IGR1cmF0aW9uKGR1cmF0aW9uKSwKLSAgICAgIGF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXQoZmFsc2UpLAotICAgICAgbGl2ZW5lc3MoRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfVU5LTk9XTiksCi0gICAgICBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudCgwKSwKLSAgICAgIGRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50KDApLAotICAgICAgZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCgwKSB7fQotCi1TdHJlYW1QYXJzZXI6OlN0cmVhbVBhcnNlcigpIHt9Ci0KLVN0cmVhbVBhcnNlcjo6flN0cmVhbVBhcnNlcigpIHt9Ci0KLXN0YXRpYyBib29sIE1lcmdlQnVmZmVyUXVldWVzSW50ZXJuYWwoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSo+JiBidWZmZXJfcXVldWVzLAotICAgIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUqIG1lcmdlZF9idWZmZXJzKSB7Ci0gIC8vIEluc3RlYWQgb2Ygc3RkOjptZXJnZSB1c2FnZSwgdGhpcyBtZXRob2QgaW1wbGVtZW50cyBhIGN1c3RvbSBtZXJnZSBiZWNhdXNlOgotICAvLyAxKSB8YnVmZmVyX3F1ZXVlc3wgbWF5IGNvbnRhaW4gTiBxdWV1ZXMsCi0gIC8vIDIpIHdlIG11c3QgZGV0ZWN0IGFuZCByZXR1cm4gZmFsc2UgaWYgYW55IG9mIHRoZSBxdWV1ZXMgaW4gfGJ1ZmZlcl9xdWV1ZXN8Ci0gIC8vIGlzIHVuc29ydGVkLCBhbmQKLSAgLy8gMykgd2UgbXVzdCBkZXRlY3QgYW5kIHJldHVybiBmYWxzZSBpZiBhbnkgb2YgdGhlIGJ1ZmZlcnMgaW4gfGJ1ZmZlcl9xdWV1ZXN8Ci0gIC8vIGhhcyBhIGRlY29kZSB0aW1lc3RhbXAgcHJpb3IgdG8gdGhlIGxhc3QsIGlmIGFueSwgYnVmZmVyIGluCi0gIC8vIHxtZXJnZWRfYnVmZmVyc3wuCi0gIC8vIFRPRE8od29sZW5ldHovYWNvbHdlbGwpOiBSZWZhY3RvciBzdHJlYW0gcGFyc2VycyB0byBlbGltaW5hdGUgbmVlZCBmb3IKLSAgLy8gdGhpcyBsYXJnZSBncmFpbiBtZXJnZS4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzM4NDg0LgotCi0gIC8vIERvbmUgaWYgbm8gaW5wdXRzIHRvIG1lcmdlLgotICBpZiAoYnVmZmVyX3F1ZXVlcy5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBCdWlsZCBhIHZlY3RvciBvZiBpdGVyYXRvcnMsIG9uZSBmb3IgZWFjaCBpbnB1dCwgdG8gdHJhdmVyc2UgaW5wdXRzLgotICAvLyBUaGUgdW5pb24gb2YgdGhlc2UgaXRlcmF0b3JzIHBvaW50cyB0byB0aGUgc2V0IG9mIGNhbmRpZGF0ZSBidWZmZXJzCi0gIC8vIGZvciBiZWluZyBhcHBlbmRlZCB0byB8bWVyZ2VkX2J1ZmZlcnN8LgotICBzaXplX3QgbnVtX2l0cnMgPSBidWZmZXJfcXVldWVzLnNpemUoKTsKLSAgc3RkOjp2ZWN0b3I8U3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3I+IGl0cnMobnVtX2l0cnMpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9pdHJzOyArK2kpIGl0cnNbaV0gPSBidWZmZXJfcXVldWVzW2ldLT5iZWdpbigpOwotCi0gIC8vIHxsYXN0X2RlY29kZV90aW1lc3RhbXB8IHRyYWNrcyB0aGUgbG93ZXIgYm91bmQsIGlmIGFueSwgdGhhdCBhbGwgY2FuZGlkYXRlCi0gIC8vIGJ1ZmZlcnMgbXVzdCBub3QgYmUgbGVzcyB0aGFuLiBJZiB8bWVyZ2VkX2J1ZmZlcnN8IGFscmVhZHkgaGFzIGJ1ZmZlcnMsCi0gIC8vIGluaXRpYWxpemUgfGxhc3RfZGVjb2RlX3RpbWVzdGFtcHwgdG8gdGhlIGRlY29kZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QKLSAgLy8gYnVmZmVyIGluIGl0LgotICBEZWNvZGVUaW1lc3RhbXAgbGFzdF9kZWNvZGVfdGltZXN0YW1wID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0gIGlmICghbWVyZ2VkX2J1ZmZlcnMtPmVtcHR5KCkpCi0gICAgbGFzdF9kZWNvZGVfdGltZXN0YW1wID0gbWVyZ2VkX2J1ZmZlcnMtPmJhY2soKS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgLy8gUmVwZWF0ZWRseSBzZWxlY3QgYW5kIGFwcGVuZCB0aGUgbmV4dCBidWZmZXIgZnJvbSB0aGUgY2FuZGlkYXRlIGJ1ZmZlcnMKLSAgLy8gdW50aWwgZWl0aGVyOgotICAvLyAxKSByZXR1cm5pbmcgZmFsc2UsIHRvIGluZGljYXRlIGRldGVjdGlvbiBvZiBkZWNyZWFzaW5nIERUUyBpbiBzb21lIHF1ZXVlLAotICAvLyAgICB3aGVuIGEgY2FuZGlkYXRlIGJ1ZmZlciBoYXMgZGVjb2RlIHRpbWVzdGFtcCBiZWxvdwotICAvLyAgICB8bGFzdF9kZWNvZGVfdGltZXN0YW1wfCwgd2hpY2ggbWVhbnMgZWl0aGVyIGFuIGlucHV0IGJ1ZmZlciB3YXNuJ3QKLSAgLy8gICAgc29ydGVkIGNvcnJlY3RseSBvciBoYWQgYSBidWZmZXIgd2l0aCBkZWNvZGUgdGltZXN0YW1wIGJlbG93IHRoZSBsYXN0Ci0gIC8vICAgIGJ1ZmZlciwgaWYgYW55LCBpbiB8bWVyZ2VkX2J1ZmZlcnN8LCBvcgotICAvLyAyKSByZXR1cm5pbmcgdHJ1ZSB3aGVuIGFsbCBidWZmZXJzIGhhdmUgYmVlbiBtZXJnZWQgc3VjY2Vzc2Z1bGx5OwotICAvLyAgICBlcXVpdmFsZW50bHksIHdoZW4gYWxsIG9mIHRoZSBpdGVyYXRvcnMgaW4gfGl0cnN8IGhhdmUgcmVhY2hlZCB0aGUgZW5kCi0gIC8vICAgIG9mIHRoZWlyIHJlc3BlY3RpdmUgcXVldWUgZnJvbSB8YnVmZmVyX3F1ZXVlc3wuCi0gIC8vIFRPRE8od29sZW5ldHovYWNvbHdlbGwpOiBJZGVhbGx5LCB3ZSB3b3VsZCB1c2UgYSBoZWFwIHRvIHN0b3JlIHRoZSBoZWFkIG9mCi0gIC8vIGFsbCBxdWV1ZXMgYW5kIHBvcCB0aGUgaGVhZCB3aXRoIGxvd2VzdCBkZWNvZGUgdGltZXN0YW1wIGluIGxvZyhOKSB0aW1lLgotICAvLyBIb3dldmVyLCBOIHdpbGwgdHlwaWNhbGx5IGJlIHNtYWxsIGFuZCB1c2FnZSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzCi0gIC8vIG1lYW50IHRvIGJlIHNob3J0LXRlcm0uIFNlZSBodHRwOi8vY3JidWcuY29tLzMzODQ4NC4KLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyBUcmFja3Mgd2hpY2ggcXVldWUncyBpdGVyYXRvciBpcyBwb2ludGluZyB0byB0aGUgY2FuZGlkYXRlIGJ1ZmZlciB0bwotICAgIC8vIGFwcGVuZCBuZXh0LCBvciAtMSBpZiBubyBjYW5kaWRhdGUgYnVmZmVycyBmb3VuZC4gVGhpcyBpbmRleGVzIHxpdHJzfC4KLSAgICBpbnQgaW5kZXhfb2ZfcXVldWVfd2l0aF9uZXh0X2RlY29kZV90aW1lc3RhbXAgPSAtMTsKLSAgICBEZWNvZGVUaW1lc3RhbXAgbmV4dF9kZWNvZGVfdGltZXN0YW1wID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgICAvLyBTY2FuIGVhY2ggb2YgdGhlIGl0ZXJhdG9ycyBmb3IgfGJ1ZmZlcl9xdWV1ZXN8IHRvIGZpbmQgdGhlIGNhbmRpZGF0ZQotICAgIC8vIGJ1ZmZlciwgaWYgYW55LCB0aGF0IGhhcyB0aGUgbG93ZXN0IGRlY29kZSB0aW1lc3RhbXAuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1faXRyczsgKytpKSB7Ci0gICAgICBpZiAoaXRyc1tpXSA9PSBidWZmZXJfcXVldWVzW2ldLT5lbmQoKSkgY29udGludWU7Ci0KLSAgICAgIC8vIEV4dHJhY3QgdGhlIGNhbmRpZGF0ZSBidWZmZXIncyBkZWNvZGUgdGltZXN0YW1wLgotICAgICAgRGVjb2RlVGltZXN0YW1wIHRzID0gKCppdHJzW2ldKS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgICAgIGlmIChsYXN0X2RlY29kZV90aW1lc3RhbXAgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkgJiYKLSAgICAgICAgICB0cyA8IGxhc3RfZGVjb2RlX3RpbWVzdGFtcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBpZiAodHMgPCBuZXh0X2RlY29kZV90aW1lc3RhbXAgfHwKLSAgICAgICAgICBuZXh0X2RlY29kZV90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGRlY29kZSB0aW1lc3RhbXAgYW5kIHF1ZXVlIGl0ZXJhdG9yIGluZGV4IGZvciB0aGlzCi0gICAgICAgIC8vIHBvdGVudGlhbGx5IHdpbm5pbmcgY2FuZGlkYXRlIGJ1ZmZlci4KLSAgICAgICAgbmV4dF9kZWNvZGVfdGltZXN0YW1wID0gdHM7Ci0gICAgICAgIGluZGV4X29mX3F1ZXVlX3dpdGhfbmV4dF9kZWNvZGVfdGltZXN0YW1wID0gaTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGwgZG9uZSBpZiBubyBmdXJ0aGVyIGNhbmRpZGF0ZSBidWZmZXJzIGV4aXN0LgotICAgIGlmIChpbmRleF9vZl9xdWV1ZV93aXRoX25leHRfZGVjb2RlX3RpbWVzdGFtcCA9PSAtMSkgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBPdGhlcndpc2UsIGFwcGVuZCB0aGUgd2lubmluZyBjYW5kaWRhdGUgYnVmZmVyIHRvIHxtZXJnZWRfYnVmZmVyc3wsCi0gICAgLy8gcmVtZW1iZXIgaXRzIGRlY29kZSB0aW1lc3RhbXAgYXMgfGxhc3RfZGVjb2RlX3RpbWVzdGFtcHwgbm93IHRoYXQgaXQgaXMKLSAgICAvLyB0aGUgbGFzdCBidWZmZXIgaW4gfG1lcmdlZF9idWZmZXJzfCwgYWR2YW5jZSB0aGUgY29ycmVzcG9uZGluZwotICAgIC8vIGlucHV0IEJ1ZmZlclF1ZXVlIGl0ZXJhdG9yLCBhbmQgY29udGludWUuCi0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICAgICppdHJzW2luZGV4X29mX3F1ZXVlX3dpdGhfbmV4dF9kZWNvZGVfdGltZXN0YW1wXTsKLSAgICBsYXN0X2RlY29kZV90aW1lc3RhbXAgPSBidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpOwotICAgIG1lcmdlZF9idWZmZXJzLT5wdXNoX2JhY2soYnVmZmVyKTsKLSAgICArK2l0cnNbaW5kZXhfb2ZfcXVldWVfd2l0aF9uZXh0X2RlY29kZV90aW1lc3RhbXBdOwotICB9Ci19Ci0KLWJvb2wgTWVyZ2VCdWZmZXJRdWV1ZXMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSogbWVyZ2VkX2J1ZmZlcnMpIHsKLSAgRENIRUNLKG1lcmdlZF9idWZmZXJzKTsKLQotICAvLyBQcmVwYXJlIHZlY3RvciBjb250YWluaW5nIHBvaW50ZXJzIHRvIGFueSBwcm92aWRlZCBub24tZW1wdHkgYnVmZmVyIHF1ZXVlcy4KLQotICAvLyBBcHBlbmQgYXVkaW8gYnVmZmVyIHF1ZXVlcyBmaXJzdCwgYmVmb3JlIGFsbCBvdGhlciB0eXBlcywgc2luY2UKLSAgLy8gRnJhbWVQcm9jZXNzb3JUZXN0LkF1ZGlvVmlkZW9fRGlzY29udGludWl0eSBjdXJyZW50bHkgZGVwZW5kcyBvbiBhdWRpbwotICAvLyBidWZmZXJzIGJlaW5nIHByb2Nlc3NlZCBmaXJzdC4KLSAgc3RkOjp2ZWN0b3I8Y29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSo+IGJ1ZmZlcl9xdWV1ZXM7Ci0gIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICBmb3IgKGl0ID0gYnVmZmVyX3F1ZXVlX21hcC5iZWdpbigpOyBpdCAhPSBidWZmZXJfcXVldWVfbWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgRENIRUNLKCFpdC0+c2Vjb25kLmVtcHR5KCkpOwotICAgIGlmIChpdC0+c2Vjb25kWzBdLT50eXBlKCkgPT0gRGVtdXhlclN0cmVhbTo6QVVESU8pCi0gICAgICBidWZmZXJfcXVldWVzLnB1c2hfYmFjaygmaXQtPnNlY29uZCk7Ci0gIH0KLSAgZm9yIChpdCA9IGJ1ZmZlcl9xdWV1ZV9tYXAuYmVnaW4oKTsgaXQgIT0gYnVmZmVyX3F1ZXVlX21hcC5lbmQoKTsgKytpdCkgewotICAgIERDSEVDSyghaXQtPnNlY29uZC5lbXB0eSgpKTsKLSAgICBpZiAoaXQtPnNlY29uZFswXS0+dHlwZSgpICE9IERlbXV4ZXJTdHJlYW06OkFVRElPKQotICAgICAgYnVmZmVyX3F1ZXVlcy5wdXNoX2JhY2soJml0LT5zZWNvbmQpOwotICB9Ci0KLSAgLy8gRG8gdGhlIG1lcmdlLgotICByZXR1cm4gTWVyZ2VCdWZmZXJRdWV1ZXNJbnRlcm5hbChidWZmZXJfcXVldWVzLCBtZXJnZWRfYnVmZmVycyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmFkNjY4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1NUUkVBTV9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfU1RSRUFNX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8ZGVxdWU+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19mb3J3YXJkLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW1lX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1lZGlhTG9nOwotY2xhc3MgTWVkaWFUcmFja3M7Ci1jbGFzcyBTdHJlYW1QYXJzZXJCdWZmZXI7Ci1jbGFzcyBUZXh0VHJhY2tDb25maWc7Ci0KLS8vIEFic3RyYWN0IGludGVyZmFjZSBmb3IgcGFyc2luZyBtZWRpYSBieXRlIHN0cmVhbXMuCi1jbGFzcyBNRURJQV9FWFBPUlQgU3RyZWFtUGFyc2VyIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgc3RkOjpkZXF1ZTxzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gPiBCdWZmZXJRdWV1ZTsKLQotICAvLyBSYW5nZSBvZiB8VHJhY2tJZHwgaXMgZGVwZW5kZW50IHVwb24gc3RyZWFtIHBhcnNlcnMuIEl0IGlzIGN1cnJlbnRseQotICAvLyB0aGUga2V5IGZvciB0aGUgYnVmZmVyJ3MgdGV4dCB0cmFjayBjb25maWcgaW4gdGhlIGFwcGxpY2FibGUKLSAgLy8gVGV4dFRyYWNrQ29uZmlnTWFwICh3aGljaCBpcyBwYXNzZWQgaW4gU3RyZWFtUGFyc2VyOjpOZXdDb25maWdDQiksIG9yCi0gIC8vIDAgZm9yIG90aGVyIG1lZGlhIHR5cGVzIHRoYXQgY3VycmVudGx5IGFsbG93IGF0IG1vc3Qgb25lIHRyYWNrLgotICAvLyBXZWJNVHJhY2tzUGFyc2VyIHVzZXMgLTEgYXMgYW4gaW52YWxpZCB0ZXh0IHRyYWNrIG51bWJlci4KLSAgLy8gSXQgaXMgYWxzbyB0aGUga2V5IGZvciBCdWZmZXJRdWV1ZU1hcCBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgc3RyZWFtIHBhcnNlcnMuCi0gIC8vIFRPRE8oc2Vydm9say93b2xlbmV0eik6IENoYW5nZSB0byBzaXplX3R5cGUgb3IgdW5zaWduZWQgYWZ0ZXIgZml4aW5nIHRyYWNrCi0gIC8vIGlkIGhhbmRsaW5nIGluIEZyYW1lUHJvY2Vzc29yLgotICB0eXBlZGVmIGludCBUcmFja0lkOwotCi0gIC8vIE1hcCBvZiB0ZXh0IHRyYWNrIElEIHRvIHRoZSB0cmFjayBjb25maWd1cmF0aW9uLgotICB0eXBlZGVmIHN0ZDo6bWFwPFRyYWNrSWQsIFRleHRUcmFja0NvbmZpZz4gVGV4dFRyYWNrQ29uZmlnTWFwOwotCi0gIC8vIE1hcCBvZiB0cmFjayBJRCB0byBkZWNvZGUtdGltZXN0YW1wLW9yZGVyZWQgYnVmZmVycyBmb3IgdGhlIHRyYWNrLgotICB0eXBlZGVmIHN0ZDo6bWFwPFRyYWNrSWQsIEJ1ZmZlclF1ZXVlPiBCdWZmZXJRdWV1ZU1hcDsKLQotICAvLyBTdHJlYW0gcGFyYW1ldGVycyBwYXNzZWQgaW4gSW5pdENCLgotICBzdHJ1Y3QgTUVESUFfRVhQT1JUIEluaXRQYXJhbWV0ZXJzIHsKLSAgICBleHBsaWNpdCBJbml0UGFyYW1ldGVycyhiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24pOwotCi0gICAgLy8gU3RyZWFtIGR1cmF0aW9uLgotICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbjsKLQotICAgIC8vIEluZGljYXRlcyB0aGUgc291cmNlIHRpbWUgYXNzb2NpYXRlZCB3aXRoIHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgMC4gQQotICAgIC8vIG51bGwgVGltZSBpcyByZXR1cm5lZCBpZiBubyBtYXBwaW5nIHRvIFRpbWUgZXhpc3RzLgotICAgIGJhc2U6OlRpbWUgdGltZWxpbmVfb2Zmc2V0OwotCi0gICAgLy8gSW5kaWNhdGVzIHRoYXQgdGltZXN0YW1wT2Zmc2V0IHNob3VsZCBiZSB1cGRhdGVkIGJhc2VkIG9uIHRoZSBlYXJsaWVzdAotICAgIC8vIGVuZCB0aW1lc3RhbXAgKGF1ZGlvIG9yIHZpZGVvKSBwcm92aWRlZCBkdXJpbmcgZWFjaCBOZXdCdWZmZXJzQ0IuCi0gICAgYm9vbCBhdXRvX3VwZGF0ZV90aW1lc3RhbXBfb2Zmc2V0OwotCi0gICAgLy8gSW5kaWNhdGVzIGxpdmUgc3RyZWFtLgotICAgIERlbXV4ZXJTdHJlYW06OkxpdmVuZXNzIGxpdmVuZXNzOwotCi0gICAgLy8gQ291bnRzIG9mIHRyYWNrcyBkZXRlY3RlZCBieSB0eXBlIHdpdGhpbiB0aGlzIHN0cmVhbS4gTm90IGFsbCBvZiB0aGVzZQotICAgIC8vIHRyYWNrcyBtYXkgYmUgc2VsZWN0ZWQgZm9yIHVzZSBieSB0aGUgcGFyc2VyLgotICAgIGludCBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudDsKLSAgICBpbnQgZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQ7Ci0gICAgaW50IGRldGVjdGVkX3RleHRfdHJhY2tfY291bnQ7Ci0gIH07Ci0KLSAgLy8gSW5kaWNhdGVzIGNvbXBsZXRpb24gb2YgcGFyc2VyIGluaXRpYWxpemF0aW9uLgotICAvLyAgIHBhcmFtcyAtIFN0cmVhbSBwYXJhbWV0ZXJzLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgSW5pdFBhcmFtZXRlcnMmIHBhcmFtcyk+IEluaXRDQjsKLQotICAvLyBJbmRpY2F0ZXMgd2hlbiBuZXcgc3RyZWFtIGNvbmZpZ3VyYXRpb25zIGhhdmUgYmVlbiBwYXJzZWQuCi0gIC8vIEZpcnN0IHBhcmFtZXRlciAtIEFuIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IG1lZGlhIHRyYWNrcyBhcwotICAvLyAgICAgICAgICAgICAgICAgICB3ZWxsIGFzIGF1ZGlvL3ZpZGVvIGRlY29kZXIgY29uZmlncyBhc3NvY2lhdGVkIHdpdGggZWFjaAotICAvLyAgICAgICAgICAgICAgICAgICB0cmFjayB0aGUgcGFyc2VyIHdpbGwgdXNlIGZyb20gdGhlIHN0cmVhbS4KLSAgLy8gU2Vjb25kIHBhcmFtZXRlciAtIFRoZSBuZXcgdGV4dCB0cmFja3MgY29uZmlndXJhdGlvbi4gIElmIHRoZSBtYXAgaXMgZW1wdHksCi0gIC8vICAgICAgICAgICAgICAgICAgICB0aGVuIG5vIHRleHQgdHJhY2tzIHdlcmUgcGFyc2VkIGZvciB1c2UgZnJvbSB0aGUgc3RyZWFtLgotICAvLyBSZXR1cm4gdmFsdWUgLSBUcnVlIGlmIHRoZSBuZXcgY29uZmlndXJhdGlvbnMgYXJlIGFjY2VwdGVkLgotICAvLyAgICAgICAgICAgICAgICBGYWxzZSBpZiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkCi0gIC8vICAgICAgICAgICAgICAgIGFuZCBpbmRpY2F0ZXMgdGhhdCBhIHBhcnNpbmcgZXJyb3Igc2hvdWxkIGJlIHNpZ25hbGxlZC4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxib29sKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0VHJhY2tDb25maWdNYXAmKT4KLSAgICAgIE5ld0NvbmZpZ0NCOwotCi0gIC8vIE5ldyBzdHJlYW0gYnVmZmVycyBoYXZlIGJlZW4gcGFyc2VkLgotICAvLyBGaXJzdCBwYXJhbWV0ZXIgLSBBIG1hcCBvZiB0cmFjayBpZHMgdG8gcXVldWVzIG9mIG5ld2x5IHBhcnNlZCBidWZmZXJzLgotICAvLyBSZXR1cm4gdmFsdWUgLSBUcnVlIGluZGljYXRlcyB0aGF0IHRoZSBidWZmZXJzIGFyZSBhY2NlcHRlZC4KLSAgLy8gICAgICAgICAgICAgICAgRmFsc2UgaWYgc29tZXRoaW5nIHdhcyB3cm9uZyB3aXRoIHRoZSBidWZmZXJzIGFuZCBhIHBhcnNpbmcKLSAgLy8gICAgICAgICAgICAgICAgZXJyb3Igc2hvdWxkIGJlIHNpZ25hbGxlZC4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxib29sKGNvbnN0IEJ1ZmZlclF1ZXVlTWFwJik+IE5ld0J1ZmZlcnNDQjsKLQotICAvLyBTaWduYWxzIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgbWVkaWEgc2VnbWVudC4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKCk+IE5ld01lZGlhU2VnbWVudENCOwotCi0gIC8vIFNpZ25hbHMgdGhlIGVuZCBvZiBhIG1lZGlhIHNlZ21lbnQuCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZCgpPiBFbmRNZWRpYVNlZ21lbnRDQjsKLQotICAvLyBBIG5ldyBwb3RlbnRpYWxseSBlbmNyeXB0ZWQgc3RyZWFtIGhhcyBiZWVuIHBhcnNlZC4KLSAgLy8gRmlyc3QgcGFyYW1ldGVyIC0gVGhlIHR5cGUgb2YgdGhlIGluaXRpYWxpemF0aW9uIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAvLyAgICAgICAgICAgICAgICAgICBzdHJlYW0uCi0gIC8vIFNlY29uZCBwYXJhbWV0ZXIgLSBUaGUgaW5pdGlhbGl6YXRpb24gZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmVhbS4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKEVtZUluaXREYXRhVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mKT4KLSAgICAgIEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQjsKLQotICBTdHJlYW1QYXJzZXIoKTsKLSAgdmlydHVhbCB+U3RyZWFtUGFyc2VyKCk7Ci0KLSAgLy8gSW5pdGlhbGl6ZXMgdGhlIHBhcnNlciB3aXRoIG5lY2Vzc2FyeSBjYWxsYmFja3MuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkKLSAgLy8gZGF0YSBpcyBwYXNzZWQgdG8gUGFyc2UoKS4gfGluaXRfY2J8IHdpbGwgYmUgY2FsbGVkIG9uY2UgZW5vdWdoIGRhdGEgaGFzCi0gIC8vIGJlZW4gcGFyc2VkIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBzdHJlYW0gY29uZmlndXJhdGlvbnMsIHByZXNlbnRhdGlvbgotICAvLyBzdGFydCB0aW1lLCBhbmQgZHVyYXRpb24uIElmIHxpZ25vcmVfdGV4dF90cmFja3wgaXMgdHJ1ZSwgdGhlbiBubyB0ZXh0Ci0gIC8vIGJ1ZmZlcnMgc2hvdWxkIGJlIHBhc3NlZCBsYXRlciBieSB0aGUgcGFyc2VyIHRvIHxuZXdfYnVmZmVyc19jYnwuCi0gIHZpcnR1YWwgdm9pZCBJbml0KAotICAgICAgY29uc3QgSW5pdENCJiBpbml0X2NiLCBjb25zdCBOZXdDb25maWdDQiYgY29uZmlnX2NiLAotICAgICAgY29uc3QgTmV3QnVmZmVyc0NCJiBuZXdfYnVmZmVyc19jYiwgYm9vbCBpZ25vcmVfdGV4dF90cmFjaywKLSAgICAgIGNvbnN0IEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQiYgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYiwKLSAgICAgIGNvbnN0IE5ld01lZGlhU2VnbWVudENCJiBuZXdfc2VnbWVudF9jYiwKLSAgICAgIGNvbnN0IEVuZE1lZGlhU2VnbWVudENCJiBlbmRfb2Zfc2VnbWVudF9jYiwKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpID0gMDsKLQotICAvLyBDYWxsZWQgZHVyaW5nIHRoZSByZXNldCBwYXJzZXIgc3RhdGUgYWxnb3JpdGhtLiAgVGhpcyBmbHVzaGVzIHRoZSBjdXJyZW50Ci0gIC8vIHBhcnNlciBhbmQgcHV0cyB0aGUgcGFyc2VyIGluIGEgc3RhdGUgd2hlcmUgaXQgY2FuIHJlY2VpdmUgZGF0YS4gIFRoaXMKLSAgLy8gbWV0aG9kIGRvZXMgbm90IG5lZWQgdG8gaW52b2tlIHRoZSBFbmRNZWRpYVNlZ21lbnRDQiBzaW5jZSB0aGUgcGFyc2VyIHJlc2V0Ci0gIC8vIGFsZ29yaXRobSBhbHJlYWR5IHJlc2V0cyB0aGUgc2VnbWVudCBwYXJzaW5nIHN0YXRlLgotICB2aXJ0dWFsIHZvaWQgRmx1c2goKSA9IDA7Ci0KLSAgLy8gQ2FsbGVkIHdoZW4gdGhlcmUgaXMgbmV3IGRhdGEgdG8gcGFyc2UuCi0gIC8vCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2Ugc3VjY2VlZHMuCi0gIHZpcnR1YWwgYm9vbCBQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSA9IDA7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RyZWFtUGFyc2VyKTsKLX07Ci0KLS8vIEFwcGVuZHMgdG8gfG1lcmdlZF9idWZmZXJzfCB0aGUgcHJvdmlkZWQgYnVmZmVycyBpbiBkZWNvZGUtdGltZXN0YW1wIG9yZGVyLgotLy8gQW55IHByZXZpb3VzIGNvbnRlbnRzIG9mIHxtZXJnZWRfYnVmZmVyc3wgaXMgYXNzdW1lZCB0byBoYXZlIGxvd2VyCi0vLyBkZWNvZGUgdGltZXN0YW1wcyB2ZXJzdXMgdGhlIHByb3ZpZGVkIGJ1ZmZlcnMuIEFsbCBwcm92aWRlZCBidWZmZXIgcXVldWVzCi0vLyBhcmUgYXNzdW1lZCB0byBhbHJlYWR5IGJlIGluIGRlY29kZS10aW1lc3RhbXAgb3JkZXIuCi0vLyBSZXR1cm5zIGZhbHNlIGlmIGFueSBvZiB0aGUgcHJvdmlkZWQgYXVkaW8vdmlkZW8vdGV4dCBidWZmZXJzIGFyZSBmb3VuZAotLy8gdG8gbm90IGJlIGluIGRlY29kZSB0aW1lc3RhbXAgb3JkZXIsIG9yIGhhdmUgYSBkZWNvZGUgdGltZXN0YW1wIGxlc3MgdGhhbgotLy8gdGhlIGxhc3QgYnVmZmVyLCBpZiBhbnksIGluIHxtZXJnZWRfYnVmZmVyc3wuIFBhcnRpYWwgcmVzdWx0cyBtYXkgZXhpc3QKLS8vIGluIHxtZXJnZWRfYnVmZmVyc3wgaW4gdGhpcyBjYXNlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLS8vIE5vIHZhbGlkYXRpb24gb2YgbWVkaWEgdHlwZSB3aXRoaW4gdGhlIHZhcmlvdXMgYnVmZmVyIHF1ZXVlcyBpcyBkb25lIGhlcmUuCi0vLyBUT0RPKHdvbGVuZXR6L2Fjb2x3ZWxsKTogTWVyZ2UgaW5jcmVtZW50YWxseSBpbiBwYXJzZXJzIHRvIGVsaW1pbmF0ZQotLy8gc3VidGxlIGlzc3VlcyB3aXRoIHRpZS1icmVha2luZy4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzM4NDg0LgotTUVESUFfRVhQT1JUIGJvb2wgTWVyZ2VCdWZmZXJRdWV1ZXMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUqIG1lcmdlZF9idWZmZXJzKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfU1RSRUFNX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlMjMwMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCkgewotICByZXR1cm4gYmFzZTo6V3JhcFJlZkNvdW50ZWQobmV3IFN0cmVhbVBhcnNlckJ1ZmZlcik7Ci19Ci0KLXNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKAotICAgIEFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplLCBib29sIGlzX2tleV9mcmFtZSwKLSAgICBUeXBlIHR5cGUsIFRyYWNrSWQgdHJhY2tfaWQpIHsKLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IHN0cmVhbV9wYXJzZXJfYnVmZmVyID0KLSAgICAgIGJhc2U6OldyYXBSZWZDb3VudGVkKG5ldyBTdHJlYW1QYXJzZXJCdWZmZXIoCi0gICAgICAgICAgYWxsb2NhdG9yLCBkYXRhLCBkYXRhX3NpemUsIE5VTEwsIDAsIGlzX2tleV9mcmFtZSwgdHlwZSwgdHJhY2tfaWQpKTsKLSAgaWYgKCFzdHJlYW1fcGFyc2VyX2J1ZmZlci0+aGFzX2RhdGEoKSkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBzdHJlYW1fcGFyc2VyX2J1ZmZlcjsKLX0KLQotc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBkYXRhX3NpemUsCi0gICAgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLCBpbnQgc2lkZV9kYXRhX3NpemUsIGJvb2wgaXNfa2V5X2ZyYW1lLCBUeXBlIHR5cGUsCi0gICAgVHJhY2tJZCB0cmFja19pZCkgewotICByZXR1cm4gYmFzZTo6V3JhcFJlZkNvdW50ZWQoCi0gICAgICBuZXcgU3RyZWFtUGFyc2VyQnVmZmVyKGFsbG9jYXRvciwgZGF0YSwgZGF0YV9zaXplLCBzaWRlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVfZGF0YV9zaXplLCBpc19rZXlfZnJhbWUsIHR5cGUsIHRyYWNrX2lkKSk7Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTdHJlYW1QYXJzZXJCdWZmZXI6OkdldERlY29kZVRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgaWYgKGRlY29kZV90aW1lc3RhbXBfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKQotICAgIHJldHVybiBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKHRpbWVzdGFtcCgpKTsKLSAgcmV0dXJuIGRlY29kZV90aW1lc3RhbXBfOwotfQotCi12b2lkIFN0cmVhbVBhcnNlckJ1ZmZlcjo6U2V0RGVjb2RlVGltZXN0YW1wKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIHsKLSAgZGVjb2RlX3RpbWVzdGFtcF8gPSB0aW1lc3RhbXA7Ci0gIGlmIChwcmVyb2xsX2J1ZmZlcl8uZ2V0KCkpIHByZXJvbGxfYnVmZmVyXy0+U2V0RGVjb2RlVGltZXN0YW1wKHRpbWVzdGFtcCk7Ci19Ci0KLVN0cmVhbVBhcnNlckJ1ZmZlcjo6U3RyZWFtUGFyc2VyQnVmZmVyKCkKLSAgICA6IGRlY29kZV90aW1lc3RhbXBfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKLSAgICAgIGNvbmZpZ19pZF8oa0ludmFsaWRDb25maWdJZCksCi0gICAgICB0cmFja19pZF8oMCksCi0gICAgICBpc19kdXJhdGlvbl9lc3RpbWF0ZWRfKGZhbHNlKSB7fQotCi1TdHJlYW1QYXJzZXJCdWZmZXI6OlN0cmVhbVBhcnNlckJ1ZmZlcihBbGxvY2F0b3IqIGFsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzaWRlX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lkZV9kYXRhX3NpemUsIGJvb2wgaXNfa2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlLCBUcmFja0lkIHRyYWNrX2lkKQotICAgIDogRGVjb2RlckJ1ZmZlcihhbGxvY2F0b3IsIHR5cGUsIGRhdGEsIGRhdGFfc2l6ZSwgc2lkZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICBzaWRlX2RhdGFfc2l6ZSksCi0gICAgICBkZWNvZGVfdGltZXN0YW1wXyhrTm9EZWNvZGVUaW1lc3RhbXAoKSksCi0gICAgICBjb25maWdfaWRfKGtJbnZhbGlkQ29uZmlnSWQpLAotICAgICAgdHJhY2tfaWRfKHRyYWNrX2lkKSwKLSAgICAgIGlzX2R1cmF0aW9uX2VzdGltYXRlZF8oZmFsc2UpIHsKLSAgaWYgKGFsbG9jYXRpb25zKCkubnVtYmVyX29mX2J1ZmZlcnMoKSA9PSAwKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFRPRE8oc2NoZXJrdXMpOiBTaG91bGQgRGF0YUJ1ZmZlciBjb25zdHJ1Y3RvciBhY2NlcHQgYSB0aW1lc3RhbXAgYW5kCi0gIC8vIGR1cmF0aW9uIHRvIGZvcmNlIGNsaWVudHMgdG8gc2V0IHRoZW0/IFRvZGF5IHRoZXkgZW5kIHVwIGJlaW5nIHplcm8gd2hpY2gKLSAgLy8gaXMgYm90aCBhIGNvbW1vbiBhbmQgdmFsaWQgdmFsdWUgYW5kIGNvdWxkIGxlYWQgdG8gYnVncy4KLSAgaWYgKGRhdGEpIHsKLSAgICBzZXRfZHVyYXRpb24oa05vVGltZXN0YW1wKTsKLSAgfQotCi0gIGlmIChpc19rZXlfZnJhbWUpIHNldF9pc19rZXlfZnJhbWUodHJ1ZSk7Ci19Ci0KLVN0cmVhbVBhcnNlckJ1ZmZlcjo6U3RyZWFtUGFyc2VyQnVmZmVyKEFsbG9jYXRvciogYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNpZGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWRlX2RhdGFfc2l6ZSwgYm9vbCBpc19rZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIHR5cGUsIFRyYWNrSWQgdHJhY2tfaWQpCi0gICAgOiBEZWNvZGVyQnVmZmVyKGFsbG9jYXRvciwgdHlwZSwgYWxsb2NhdGlvbnMsIHNpZGVfZGF0YSwgc2lkZV9kYXRhX3NpemUpLAotICAgICAgZGVjb2RlX3RpbWVzdGFtcF8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgY29uZmlnX2lkXyhrSW52YWxpZENvbmZpZ0lkKSwKLSAgICAgIHRyYWNrX2lkXyh0cmFja19pZCksCi0gICAgICBpc19kdXJhdGlvbl9lc3RpbWF0ZWRfKGZhbHNlKSB7Ci0gIC8vIFRPRE8oc2NoZXJrdXMpOiBTaG91bGQgRGF0YUJ1ZmZlciBjb25zdHJ1Y3RvciBhY2NlcHQgYSB0aW1lc3RhbXAgYW5kCi0gIC8vIGR1cmF0aW9uIHRvIGZvcmNlIGNsaWVudHMgdG8gc2V0IHRoZW0/IFRvZGF5IHRoZXkgZW5kIHVwIGJlaW5nIHplcm8gd2hpY2gKLSAgLy8gaXMgYm90aCBhIGNvbW1vbiBhbmQgdmFsaWQgdmFsdWUgYW5kIGNvdWxkIGxlYWQgdG8gYnVncy4KLSAgc2V0X2R1cmF0aW9uKGtOb1RpbWVzdGFtcCk7Ci0KLSAgaWYgKGlzX2tleV9mcmFtZSkgc2V0X2lzX2tleV9mcmFtZSh0cnVlKTsKLX0KLQotU3RyZWFtUGFyc2VyQnVmZmVyOjp+U3RyZWFtUGFyc2VyQnVmZmVyKCkge30KLQotaW50IFN0cmVhbVBhcnNlckJ1ZmZlcjo6R2V0Q29uZmlnSWQoKSBjb25zdCB7IHJldHVybiBjb25maWdfaWRfOyB9Ci0KLXZvaWQgU3RyZWFtUGFyc2VyQnVmZmVyOjpTZXRDb25maWdJZChpbnQgY29uZmlnX2lkKSB7Ci0gIGNvbmZpZ19pZF8gPSBjb25maWdfaWQ7Ci0gIGlmIChwcmVyb2xsX2J1ZmZlcl8uZ2V0KCkpIHByZXJvbGxfYnVmZmVyXy0+U2V0Q29uZmlnSWQoY29uZmlnX2lkKTsKLX0KLQotaW50IFN0cmVhbVBhcnNlckJ1ZmZlcjo6R2V0U3BsaWNlQnVmZmVyQ29uZmlnSWQoc2l6ZV90IGluZGV4KSBjb25zdCB7Ci0gIGlmICghc3BsaWNlX2J1ZmZlcnNfIHx8IGluZGV4ID49IHNwbGljZV9idWZmZXJzKCkuc2l6ZSgpKSB7Ci0gICAgcmV0dXJuIEdldENvbmZpZ0lkKCk7Ci0gIH0KLSAgcmV0dXJuICgqc3BsaWNlX2J1ZmZlcnNfKVtpbmRleF0tPkdldENvbmZpZ0lkKCk7Ci19Ci0KLXZvaWQgU3RyZWFtUGFyc2VyQnVmZmVyOjpDb252ZXJ0VG9TcGxpY2VCdWZmZXIoCi0gICAgY29uc3QgQnVmZmVyUXVldWUmIHByZV9zcGxpY2VfYnVmZmVycykgewotICBEQ0hFQ0soIXNwbGljZV9idWZmZXJzXyk7Ci0gIERDSEVDSyhkdXJhdGlvbigpID4gYmFzZTo6VGltZURlbHRhKCkpCi0gICAgICA8PCAiT25seSBidWZmZXJzIHdpdGggYSB2YWxpZCBkdXJhdGlvbiBjYW4gY29udmVydCB0byBhIHNwbGljZSBidWZmZXIuIgotICAgICAgPDwgIiBwdHMgIiA8PCB0aW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIiBkdHMgIgotICAgICAgPDwgR2V0RGVjb2RlVGltZXN0YW1wKCkuSW5TZWNvbmRzRigpIDw8ICIgZHVyICIKLSAgICAgIDw8IGR1cmF0aW9uKCkuSW5TZWNvbmRzRigpOwotICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7Ci0KLSAgLy8gU3BsaWNpbmcgcmVxdWlyZXMgbm9uLWVzdGltYXRlZCBzYW1wbGUgYWNjdXJhdGUgZHVyYXRpb25zIHRvIGJlIGNvbmZpZGVudAotICAvLyB0aGluZ3Mgd2lsbCBzb3VuZCBzbW9vdGguIEFsc28sIHdlIGNhbm5vdCBiZSBjZXJ0YWluIHdoZXRoZXIgZXN0aW1hdGVkCi0gIC8vIG92ZXJsYXAgaXMgcmVhbGx5IGEgc3BsaWNlIHNjZW5hcmlvLCBvciBqdXN0IG92ZXIgZXN0aW1hdGlvbi4KLSAgRENIRUNLKCFpc19kdXJhdGlvbl9lc3RpbWF0ZWRfKTsKLQotICAvLyBNYWtlIGEgY29weSBvZiB0aGlzIGZpcnN0LCBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2VzLgotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gb3ZlcmxhcHBpbmdfYnVmZmVyID0gQ2xvbmUoKTsKLSAgb3ZlcmxhcHBpbmdfYnVmZmVyLT5zZXRfc3BsaWNlX3RpbWVzdGFtcChrTm9UaW1lc3RhbXApOwotCi0gIGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgZmlyc3Rfc3BsaWNlX2J1ZmZlciA9Ci0gICAgICBwcmVfc3BsaWNlX2J1ZmZlcnMuZnJvbnQoKTsKLQotICAvLyBFbnN1cmUgdGhlIGdpdmVuIGJ1ZmZlcnMgYXJlIGFjdHVhbGx5IGJlZm9yZSB0aGUgc3BsaWNlIHBvaW50LgotICBEQ0hFQ0soZmlyc3Rfc3BsaWNlX2J1ZmZlci0+dGltZXN0YW1wKCkgPD0gb3ZlcmxhcHBpbmdfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0KLSAgLy8gVE9ETyhkYWxlY3VydGlzKTogV2Ugc2hvdWxkIGFsc28gY2xlYXIgfGRhdGF8LCBidXQgc2luY2UgdGhhdCBpbXBsaWVzIEVPUwotICAvLyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBjbGllbnRzIHJlbHlpbmcgb24gdGhhdCBiZWhhdmlvci4KLQotICAvLyBNb3ZlIG92ZXIgYW55IHByZXJvbGwgZnJvbSB0aGlzIGJ1ZmZlci4KLSAgaWYgKHByZXJvbGxfYnVmZmVyXy5nZXQoKSkgewotICAgIERDSEVDSyghb3ZlcmxhcHBpbmdfYnVmZmVyLT5wcmVyb2xsX2J1ZmZlcl8uZ2V0KCkpOwotICAgIG92ZXJsYXBwaW5nX2J1ZmZlci0+cHJlcm9sbF9idWZmZXJfLnN3YXAocHJlcm9sbF9idWZmZXJfKTsKLSAgfQotCi0gIC8vIFJld3JpdGUgfHRoaXN8IGJ1ZmZlciBhcyBhIHNwbGljZSBidWZmZXIuCi0gIFNldERlY29kZVRpbWVzdGFtcChmaXJzdF9zcGxpY2VfYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKSk7Ci0gIFNldENvbmZpZ0lkKGZpcnN0X3NwbGljZV9idWZmZXItPkdldENvbmZpZ0lkKCkpOwotICBzZXRfdGltZXN0YW1wKGZpcnN0X3NwbGljZV9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgc2V0X2lzX2tleV9mcmFtZShmaXJzdF9zcGxpY2VfYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0gIERDSEVDS19FUSh0eXBlKCksIGZpcnN0X3NwbGljZV9idWZmZXItPnR5cGUoKSk7Ci0gIHRyYWNrX2lkXyA9IGZpcnN0X3NwbGljZV9idWZmZXItPnRyYWNrX2lkKCk7Ci0gIHNldF9zcGxpY2VfdGltZXN0YW1wKG92ZXJsYXBwaW5nX2J1ZmZlci0+dGltZXN0YW1wKCkpOwotCi0gIC8vIFRoZSBzcGxpY2UgZHVyYXRpb24gaXMgdGhlIGR1cmF0aW9uIG9mIGFsbCBidWZmZXJzIGJlZm9yZSB0aGUgc3BsaWNlIHBsdXMKLSAgLy8gdGhlIGhpZ2hlc3QgZW5kaW5nIHRpbWVzdGFtcCBhZnRlciB0aGUgc3BsaWNlIHBvaW50LgotICBEQ0hFQ0sob3ZlcmxhcHBpbmdfYnVmZmVyLT5kdXJhdGlvbigpID4gYmFzZTo6VGltZURlbHRhKCkpOwotICBEQ0hFQ0socHJlX3NwbGljZV9idWZmZXJzLmJhY2soKS0+ZHVyYXRpb24oKSA+IGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgc2V0X2R1cmF0aW9uKAotICAgICAgc3RkOjptYXgob3ZlcmxhcHBpbmdfYnVmZmVyLT50aW1lc3RhbXAoKSArIG92ZXJsYXBwaW5nX2J1ZmZlci0+ZHVyYXRpb24oKSwKLSAgICAgICAgICAgICAgIHByZV9zcGxpY2VfYnVmZmVycy5iYWNrKCktPnRpbWVzdGFtcCgpICsKLSAgICAgICAgICAgICAgICAgICBwcmVfc3BsaWNlX2J1ZmZlcnMuYmFjaygpLT5kdXJhdGlvbigpKSAtCi0gICAgICBmaXJzdF9zcGxpY2VfYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0KLSAgc3BsaWNlX2J1ZmZlcnNfLnJlc2V0KG5ldyBCdWZmZXJRdWV1ZSk7Ci0gIC8vIENvcHkgYWxsIHByZSBzcGxpY2UgYnVmZmVycyBpbnRvIG91ciB3cmFwcGVyIGJ1ZmZlci4KLSAgZm9yIChCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcmVfc3BsaWNlX2J1ZmZlcnMuYmVnaW4oKTsKLSAgICAgICBpdCAhPSBwcmVfc3BsaWNlX2J1ZmZlcnMuZW5kKCk7ICsraXQpIHsKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGJ1ZmZlciA9ICppdDsKLSAgICBEQ0hFQ0soIWJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKTsKLSAgICBEQ0hFQ0soIWJ1ZmZlci0+cHJlcm9sbF9idWZmZXIoKS5nZXQoKSk7Ci0gICAgRENIRUNLKGJ1ZmZlci0+c3BsaWNlX2J1ZmZlcnMoKS5lbXB0eSgpKTsKLSAgICBEQ0hFQ0soIWJ1ZmZlci0+aXNfZHVyYXRpb25fZXN0aW1hdGVkKCkpOwotICAgIHNwbGljZV9idWZmZXJzXy0+cHVzaF9iYWNrKGJ1ZmZlci0+Q2xvbmUoKSk7Ci0gICAgc3BsaWNlX2J1ZmZlcnNfLT5iYWNrKCktPnNldF9zcGxpY2VfdGltZXN0YW1wKHNwbGljZV90aW1lc3RhbXAoKSk7Ci0gIH0KLQotICBzcGxpY2VfYnVmZmVyc18tPnB1c2hfYmFjayhvdmVybGFwcGluZ19idWZmZXIpOwotfQotCi12b2lkIFN0cmVhbVBhcnNlckJ1ZmZlcjo6U2V0UHJlcm9sbEJ1ZmZlcigKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIHByZXJvbGxfYnVmZmVyKSB7Ci0gIERDSEVDSyghcHJlcm9sbF9idWZmZXJfLmdldCgpKTsKLSAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwotICBEQ0hFQ0soIXByZXJvbGxfYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotICBEQ0hFQ0soIXByZXJvbGxfYnVmZmVyLT5wcmVyb2xsX2J1ZmZlcl8uZ2V0KCkpOwotICBEQ0hFQ0socHJlcm9sbF9idWZmZXItPnNwbGljZV90aW1lc3RhbXAoKSA9PSBrTm9UaW1lc3RhbXApOwotICBEQ0hFQ0socHJlcm9sbF9idWZmZXItPnNwbGljZV9idWZmZXJzKCkuZW1wdHkoKSk7Ci0gIERDSEVDSyhwcmVyb2xsX2J1ZmZlci0+dGltZXN0YW1wKCkgPD0gdGltZXN0YW1wKCkpOwotICBEQ0hFQ0socHJlcm9sbF9idWZmZXItPmRpc2NhcmRfcGFkZGluZygpID09IERlY29kZXJCdWZmZXI6OkRpc2NhcmRQYWRkaW5nKCkpOwotICBEQ0hFQ0tfRVEocHJlcm9sbF9idWZmZXItPnR5cGUoKSwgdHlwZSgpKTsKLSAgRENIRUNLX0VRKHByZXJvbGxfYnVmZmVyLT50cmFja19pZCgpLCB0cmFja19pZCgpKTsKLQotICBwcmVyb2xsX2J1ZmZlcl8gPSBwcmVyb2xsX2J1ZmZlcjsKLSAgcHJlcm9sbF9idWZmZXJfLT5zZXRfdGltZXN0YW1wKHRpbWVzdGFtcCgpKTsKLSAgcHJlcm9sbF9idWZmZXJfLT5TZXREZWNvZGVUaW1lc3RhbXAoR2V0RGVjb2RlVGltZXN0YW1wKCkpOwotCi0gIC8vIE1hcmsgdGhlIGVudGlyZSBidWZmZXIgZm9yIGRpc2NhcmQuCi0gIHByZXJvbGxfYnVmZmVyXy0+c2V0X2Rpc2NhcmRfcGFkZGluZygKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKGtJbmZpbml0ZUR1cmF0aW9uLCBiYXNlOjpUaW1lRGVsdGEoKSkpOwotfQotCi12b2lkIFN0cmVhbVBhcnNlckJ1ZmZlcjo6c2V0X3RpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIERlY29kZXJCdWZmZXI6OnNldF90aW1lc3RhbXAodGltZXN0YW1wKTsKLSAgaWYgKHByZXJvbGxfYnVmZmVyXy5nZXQoKSkgcHJlcm9sbF9idWZmZXJfLT5zZXRfdGltZXN0YW1wKHRpbWVzdGFtcCk7Ci19Ci0KLXNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBTdHJlYW1QYXJzZXJCdWZmZXI6OkNsb25lKCkgY29uc3QgewotICBpZiAoZW5kX29mX3N0cmVhbSgpKSB7Ci0gICAgcmV0dXJuIFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCk7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gY2xvbmUgPSBuZXcgU3RyZWFtUGFyc2VyQnVmZmVyKAotICAgICAgYWxsb2NhdG9yKCksIGFsbG9jYXRpb25zKCksIHNpZGVfZGF0YSgpLCBzaWRlX2RhdGFfc2l6ZSgpLCBpc19rZXlfZnJhbWUoKSwKLSAgICAgIHR5cGUoKSwgdHJhY2tfaWQoKSk7Ci0gIGNsb25lLT5TZXREZWNvZGVUaW1lc3RhbXAoR2V0RGVjb2RlVGltZXN0YW1wKCkpOwotICBjbG9uZS0+U2V0Q29uZmlnSWQoR2V0Q29uZmlnSWQoKSk7Ci0gIGNsb25lLT5zZXRfdGltZXN0YW1wKHRpbWVzdGFtcCgpKTsKLSAgY2xvbmUtPnNldF9kdXJhdGlvbihkdXJhdGlvbigpKTsKLSAgY2xvbmUtPnNldF9pc19kdXJhdGlvbl9lc3RpbWF0ZWQoaXNfZHVyYXRpb25fZXN0aW1hdGVkKCkpOwotICBjbG9uZS0+c2V0X2Rpc2NhcmRfcGFkZGluZyhkaXNjYXJkX3BhZGRpbmcoKSk7Ci0gIGNsb25lLT5zZXRfc3BsaWNlX3RpbWVzdGFtcChzcGxpY2VfdGltZXN0YW1wKCkpOwotICBjb25zdCBEZWNyeXB0Q29uZmlnKiBkZWNyeXB0X2NvbmZpZyA9IHRoaXMtPmRlY3J5cHRfY29uZmlnKCk7Ci0gIGlmIChkZWNyeXB0X2NvbmZpZykgewotICAgIGNsb25lLT5zZXRfZGVjcnlwdF9jb25maWcoCi0gICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8RGVjcnlwdENvbmZpZz4oCi0gICAgICAgICAgZGVjcnlwdF9jb25maWctPmVuY3J5cHRpb25fbW9kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0X2NvbmZpZy0+a2V5X2lkKCksIGRlY3J5cHRfY29uZmlnLT5pdigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0X2NvbmZpZy0+c3Vic2FtcGxlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0X2NvbmZpZy0+ZW5jcnlwdGlvbl9wYXR0ZXJuKCkpKTsKLSAgfQotCi0gIHJldHVybiBjbG9uZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3ZGE0My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfU1RSRUFNX1BBUlNFUl9CVUZGRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfU1RSRUFNX1BBUlNFUl9CVUZGRVJfSF8KLQotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFNpbXBsZSB3cmFwcGVyIGFyb3VuZCBiYXNlOjpUaW1lRGVsdGEgdGhhdCByZXByZXNlbnRzIGEgZGVjb2RlIHRpbWVzdGFtcC4KLS8vIE1ha2luZyBEZWNvZGVUaW1lc3RhbXAgYSBkaWZmZXJlbnQgdHlwZSBtYWtlcyBpdCBlYXNpZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKLS8vIGNvZGUgaXMgb3BlcmF0aW5nIG9uIHByZXNlbnRhdGlvbiBvciBkZWNvZGUgdGltZXN0YW1wcyBhbmQgbWFrZXMgY29udmVyc2lvbnMKLS8vIGJldHdlZW4gdGhlIHR3byB0eXBlcyBleHBsaWNpdCBhbmQgZWFzeSB0byBzcG90LgotY2xhc3MgRGVjb2RlVGltZXN0YW1wIHsKLSBwdWJsaWM6Ci0gIERlY29kZVRpbWVzdGFtcCgpIHt9Ci0gIERlY29kZVRpbWVzdGFtcChjb25zdCBEZWNvZGVUaW1lc3RhbXAmIHJocykgOiB0c18ocmhzLnRzXykge30KLSAgRGVjb2RlVGltZXN0YW1wJiBvcGVyYXRvcj0oY29uc3QgRGVjb2RlVGltZXN0YW1wJiByaHMpIHsKLSAgICBpZiAoJnJocyAhPSB0aGlzKSB0c18gPSByaHMudHNfOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIC8vIE9ubHkgb3BlcmF0b3JzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGNvZGUgaGF2ZSBiZWVuIGRlZmluZWQuCi0gIC8vIFJldmlld2VycyBzaG91bGQgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wZXJhdG9ycy4KLSAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRGVjb2RlVGltZXN0YW1wJiByaHMpIGNvbnN0IHsgcmV0dXJuIHRzXyA8IHJocy50c187IH0KLSAgYm9vbCBvcGVyYXRvcj4oY29uc3QgRGVjb2RlVGltZXN0YW1wJiByaHMpIGNvbnN0IHsgcmV0dXJuIHRzXyA+IHJocy50c187IH0KLSAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERlY29kZVRpbWVzdGFtcCYgcmhzKSBjb25zdCB7IHJldHVybiB0c18gPT0gcmhzLnRzXzsgfQotICBib29sIG9wZXJhdG9yIT0oY29uc3QgRGVjb2RlVGltZXN0YW1wJiByaHMpIGNvbnN0IHsgcmV0dXJuIHRzXyAhPSByaHMudHNfOyB9Ci0gIGJvb2wgb3BlcmF0b3I+PShjb25zdCBEZWNvZGVUaW1lc3RhbXAmIHJocykgY29uc3QgeyByZXR1cm4gdHNfID49IHJocy50c187IH0KLSAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IERlY29kZVRpbWVzdGFtcCYgcmhzKSBjb25zdCB7IHJldHVybiB0c18gPD0gcmhzLnRzXzsgfQotCi0gIGJhc2U6OlRpbWVEZWx0YSBvcGVyYXRvci0oY29uc3QgRGVjb2RlVGltZXN0YW1wJiByaHMpIGNvbnN0IHsKLSAgICByZXR1cm4gdHNfIC0gcmhzLnRzXzsKLSAgfQotCi0gIERlY29kZVRpbWVzdGFtcCYgb3BlcmF0b3IrPShjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHJocykgewotICAgIHRzXyArPSByaHM7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgRGVjb2RlVGltZXN0YW1wJiBvcGVyYXRvci09KGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgcmhzKSB7Ci0gICAgdHNfIC09IHJoczsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBEZWNvZGVUaW1lc3RhbXAgb3BlcmF0b3IrKGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgcmhzKSBjb25zdCB7Ci0gICAgcmV0dXJuIERlY29kZVRpbWVzdGFtcCh0c18gKyByaHMpOwotICB9Ci0KLSAgRGVjb2RlVGltZXN0YW1wIG9wZXJhdG9yLShjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHJocykgY29uc3QgewotICAgIHJldHVybiBEZWNvZGVUaW1lc3RhbXAodHNfIC0gcmhzKTsKLSAgfQotCi0gIGludDY0X3Qgb3BlcmF0b3IvKGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgcmhzKSBjb25zdCB7IHJldHVybiB0c18gLyByaHM7IH0KLQotICBzdGF0aWMgRGVjb2RlVGltZXN0YW1wIEZyb21TZWNvbmRzRChkb3VibGUgc2Vjb25kcykgewotICAgIHJldHVybiBEZWNvZGVUaW1lc3RhbXAoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kc0Qoc2Vjb25kcykpOwotICB9Ci0KLSAgc3RhdGljIERlY29kZVRpbWVzdGFtcCBGcm9tTWlsbGlzZWNvbmRzKGludDY0X3QgbWlsbGlzZWNvbmRzKSB7Ci0gICAgcmV0dXJuIERlY29kZVRpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzKSk7Ci0gIH0KLQotICBzdGF0aWMgRGVjb2RlVGltZXN0YW1wIEZyb21NaWNyb3NlY29uZHMoaW50NjRfdCBtaWNyb3NlY29uZHMpIHsKLSAgICByZXR1cm4gRGVjb2RlVGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhtaWNyb3NlY29uZHMpKTsKLSAgfQotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZXhwbGljaXRseSBjYWxsIG91dCB3aGVuIHByZXNlbnRhdGlvbiB0aW1lc3RhbXBzCi0gIC8vIGFyZSBiZWluZyBjb252ZXJ0ZWQgdG8gYSBkZWNvZGUgdGltZXN0YW1wLgotICBzdGF0aWMgRGVjb2RlVGltZXN0YW1wIEZyb21QcmVzZW50YXRpb25UaW1lKGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIHsKLSAgICByZXR1cm4gRGVjb2RlVGltZXN0YW1wKHRpbWVzdGFtcCk7Ci0gIH0KLQotICBkb3VibGUgSW5TZWNvbmRzRigpIGNvbnN0IHsgcmV0dXJuIHRzXy5JblNlY29uZHNGKCk7IH0KLSAgaW50NjRfdCBJbk1pbGxpc2Vjb25kcygpIGNvbnN0IHsgcmV0dXJuIHRzXy5Jbk1pbGxpc2Vjb25kcygpOyB9Ci0gIGludDY0X3QgSW5NaWNyb3NlY29uZHMoKSBjb25zdCB7IHJldHVybiB0c18uSW5NaWNyb3NlY29uZHMoKTsgfQotCi0gIC8vIFRPRE8oYWNvbHdlbGwpOiBSZW1vdmUgb25jZSBhbGwgdGhlIGhhY2tzIGFyZSBnb25lLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQKLSAgLy8gYnkgaGFja3Mgd2hlcmUgYSBkZWNvZGUgdGltZSBpcyBiZWluZyB1c2VkIGFzIGEgcHJlc2VudGF0aW9uIHRpbWUuCi0gIGJhc2U6OlRpbWVEZWx0YSBUb1ByZXNlbnRhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiB0c187IH0KLQotIHByaXZhdGU6Ci0gIGV4cGxpY2l0IERlY29kZVRpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSA6IHRzXyh0aW1lc3RhbXApIHt9Ci0KLSAgYmFzZTo6VGltZURlbHRhIHRzXzsKLX07Ci0KLU1FRElBX0VYUE9SVCBleHRlcm4gaW5saW5lIERlY29kZVRpbWVzdGFtcCBrTm9EZWNvZGVUaW1lc3RhbXAoKSB7Ci0gIHJldHVybiBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGtOb1RpbWVzdGFtcCk7Ci19Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBTdHJlYW1QYXJzZXJCdWZmZXIgOiBwdWJsaWMgRGVjb2RlckJ1ZmZlciB7Ci0gcHVibGljOgotICAvLyBWYWx1ZSB1c2VkIHRvIHNpZ25hbCBhbiBpbnZhbGlkIGRlY29kZXIgY29uZmlnIElELgotICBlbnVtIHsga0ludmFsaWRDb25maWdJZCA9IC0xIH07Ci0KLSAgdHlwZWRlZiBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgVHJhY2tJZDsKLQotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IENyZWF0ZUVPU0J1ZmZlcigpOwotCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gQ29weUZyb20oCi0gICAgICBBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgdWludDhfdCogZGF0YSwgaW50IGRhdGFfc2l6ZSwKLSAgICAgIGJvb2wgaXNfa2V5X2ZyYW1lLCBUeXBlIHR5cGUsIFRyYWNrSWQgdHJhY2tfaWQpOwotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IENvcHlGcm9tKAotICAgICAgQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBkYXRhX3NpemUsCi0gICAgICBjb25zdCB1aW50OF90KiBzaWRlX2RhdGEsIGludCBzaWRlX2RhdGFfc2l6ZSwgYm9vbCBpc19rZXlfZnJhbWUsCi0gICAgICBUeXBlIHR5cGUsIFRyYWNrSWQgdHJhY2tfaWQpOwotCi0gIC8vIERlY29kZSB0aW1lc3RhbXAuIElmIG5vdCBleHBsaWNpdGx5IHNldCwgb3Igc2V0IHRvIGtOb1RpbWVzdGFtcCwgdGhlCi0gIC8vIHZhbHVlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgbm9ybWFsIHRpbWVzdGFtcC4KLSAgRGVjb2RlVGltZXN0YW1wIEdldERlY29kZVRpbWVzdGFtcCgpIGNvbnN0OwotICB2b2lkIFNldERlY29kZVRpbWVzdGFtcChEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKTsKLQotICAvLyBHZXRzL3NldHMgdGhlIElEIG9mIHRoZSBkZWNvZGVyIGNvbmZpZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBidWZmZXIuCi0gIGludCBHZXRDb25maWdJZCgpIGNvbnN0OwotICB2b2lkIFNldENvbmZpZ0lkKGludCBjb25maWdfaWQpOwotCi0gIC8vIFJldHVybnMgdGhlIGNvbmZpZyBJRCBvZiB0aGlzIGJ1ZmZlciBpZiBpdCBoYXMgbm8gc3BsaWNlIGJ1ZmZlcnMgb3IKLSAgLy8gfGluZGV4fCBpcyBvdXQgb2YgcmFuZ2UuICBPdGhlcndpc2UgcmV0dXJucyB0aGUgY29uZmlnIElEIGZvciB0aGUKLSAgLy8gYnVmZmVyIGluIHxzcGxpY2VfYnVmZmVyc198IGF0IHBvc2l0aW9uIHxpbmRleHwuCi0gIGludCBHZXRTcGxpY2VCdWZmZXJDb25maWdJZChzaXplX3QgaW5kZXgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIHBhcnNlcidzIHRyYWNrIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ1ZmZlci4gVmFsdWUgaXMKLSAgLy8gbWVhbmluZ2xlc3MgZm9yIEVPUyBidWZmZXJzLgotICBUcmFja0lkIHRyYWNrX2lkKCkgY29uc3QgeyByZXR1cm4gdHJhY2tfaWRfOyB9Ci0KLSAgLy8gQ29udmVydHMgdGhpcyBidWZmZXIgdG8gYSBzcGxpY2UgYnVmZmVyLiAgfHByZV9zcGxpY2VfYnVmZmVyc3wgbXVzdCBub3QKLSAgLy8gaGF2ZSBhbnkgRU9TIGJ1ZmZlcnMsIG11c3Qgbm90IGhhdmUgYW55IHNwbGljZSBidWZmZXJzLCBub3IgbXVzdCBoYXZlIGFueQotICAvLyBidWZmZXIgd2l0aCBwcmVyb2xsLgotICAvLwotICAvLyB8cHJlX3NwbGljZV9idWZmZXJzfCB3aWxsIGJlIGRlZXAgY29waWVkIGFuZCBlYWNoIGNvcHkncyBzcGxpY2VfdGltZXN0YW1wKCkKLSAgLy8gd2lsbCBiZSBzZXQgdG8gdGhpcyBidWZmZXIncyBzcGxpY2VfdGltZXN0YW1wKCkuICBBIGNvcHkgb2YgfHRoaXN8LCB3aXRoIGEKLSAgLy8gc3BsaWNlX3RpbWVzdGFtcCgpIG9mIGtOb1RpbWVzdGFtcCwgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5kIG9mCi0gIC8vIHxzcGxpY2VfYnVmZmVyc198LgotICAvLwotICAvLyBTZWUgdGhlIEF1ZGlvIFNwbGljZSBGcmFtZSBBbGdvcml0aG0gaW4gdGhlIE1TRSBzcGVjaWZpY2F0aW9uIGZvciBkZXRhaWxzLgotICB0eXBlZGVmIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgQnVmZmVyUXVldWU7Ci0gIHZvaWQgQ29udmVydFRvU3BsaWNlQnVmZmVyKGNvbnN0IEJ1ZmZlclF1ZXVlJiBwcmVfc3BsaWNlX2J1ZmZlcnMpOwotICBjb25zdCBCdWZmZXJRdWV1ZSYgc3BsaWNlX2J1ZmZlcnMoKSBjb25zdCB7Ci0gICAgc3RhdGljIEJ1ZmZlclF1ZXVlIGVtcHR5OwotICAgIHJldHVybiBzcGxpY2VfYnVmZmVyc18gPyAqc3BsaWNlX2J1ZmZlcnNfIDogZW1wdHk7Ci0gIH0KLQotICAvLyBTcGVjaWZpZXMgYSBidWZmZXIgd2hpY2ggbXVzdCBiZSBkZWNvZGVkIHByaW9yIHRvIHRoaXMgb25lIHRvIGVuc3VyZSB0aGlzCi0gIC8vIGJ1ZmZlciBjYW4gYmUgYWNjdXJhdGVseSBkZWNvZGVkLiAgVGhlIGdpdmVuIGJ1ZmZlciBtdXN0IGJlIG9mIHRoZSBzYW1lCi0gIC8vIHR5cGUsIG11c3Qgbm90IGJlIGEgc3BsaWNlIGJ1ZmZlciwgbXVzdCBub3QgaGF2ZSBhbnkgZGlzY2FyZCBwYWRkaW5nLCBhbmQKLSAgLy8gbXVzdCBub3QgYmUgYW4gZW5kIG9mIHN0cmVhbSBidWZmZXIuICB8cHJlcm9sbHwgaXMgbm90IGNvcGllZC4KLSAgLy8KLSAgLy8gSXQncyBleHBlY3RlZCB0aGF0IHRoaXMgcHJlcm9sbCBidWZmZXIgd2lsbCBiZSBkaXNjYXJkZWQgZW50aXJlbHkgcG9zdAotICAvLyBkZWNvZGluZy4gIEFzIHN1Y2ggaXQncyBkaXNjYXJkX3BhZGRpbmcoKSB3aWxsIGJlIHNldCB0byBrSW5maW5pdGVEdXJhdGlvbi4KLSAgLy8KLSAgLy8gQWxsIGZ1dHVyZSB0aW1lc3RhbXAsIGRlY29kZSB0aW1lc3RhbXAsIGNvbmZpZyBpZCwgb3IgdHJhY2sgaWQgY2hhbmdlcyB0bwotICAvLyB0aGlzIGJ1ZmZlciB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHByZXJvbGwgYnVmZmVyIGFzIHdlbGwuCi0gIHZvaWQgU2V0UHJlcm9sbEJ1ZmZlcihjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIHByZXJvbGwpOwotICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIHByZXJvbGxfYnVmZmVyKCkgewotICAgIHJldHVybiBwcmVyb2xsX2J1ZmZlcl87Ci0gIH0KLQotICB2b2lkIHNldF90aW1lc3RhbXAoYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgb3ZlcnJpZGU7Ci0KLSAgYm9vbCBpc19kdXJhdGlvbl9lc3RpbWF0ZWQoKSBjb25zdCB7IHJldHVybiBpc19kdXJhdGlvbl9lc3RpbWF0ZWRfOyB9Ci0KLSAgdm9pZCBzZXRfaXNfZHVyYXRpb25fZXN0aW1hdGVkKGJvb2wgaXNfZXN0aW1hdGVkKSB7Ci0gICAgaXNfZHVyYXRpb25fZXN0aW1hdGVkXyA9IGlzX2VzdGltYXRlZDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gVGhlIGRlZmF1bHQgY3RvciBjcmVhdGVzIGFuIEVPUyBidWZmZXIgd2l0aG91dCBzcGVjaWZpYyBzdHJlYW0gdHlwZS4KLSAgU3RyZWFtUGFyc2VyQnVmZmVyKCk7Ci0gIFN0cmVhbVBhcnNlckJ1ZmZlcihBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgdWludDhfdCogZGF0YSwgaW50IGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNpZGVfZGF0YSwgaW50IHNpZGVfZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19rZXlfZnJhbWUsIFR5cGUgdHlwZSwgVHJhY2tJZCB0cmFja19pZCk7Ci0gIFN0cmVhbVBhcnNlckJ1ZmZlcihBbGxvY2F0b3IqIGFsbG9jYXRvciwgQWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNpZGVfZGF0YSwgaW50IHNpZGVfZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19rZXlfZnJhbWUsIFR5cGUgdHlwZSwgVHJhY2tJZCB0cmFja19pZCk7Ci0gIH5TdHJlYW1QYXJzZXJCdWZmZXIoKSBvdmVycmlkZTsKLQotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gQ2xvbmUoKSBjb25zdDsKLQotICBEZWNvZGVUaW1lc3RhbXAgZGVjb2RlX3RpbWVzdGFtcF87Ci0gIGludCBjb25maWdfaWRfOwotICBUcmFja0lkIHRyYWNrX2lkXzsKLSAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclF1ZXVlPiBzcGxpY2VfYnVmZmVyc187Ci0gIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBwcmVyb2xsX2J1ZmZlcl87Ci0gIGJvb2wgaXNfZHVyYXRpb25fZXN0aW1hdGVkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3RyZWFtUGFyc2VyQnVmZmVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1NUUkVBTV9QQVJTRVJfQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlNGM1ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXR5cGVkZWYgU3RyZWFtUGFyc2VyOjpUcmFja0lkIFRyYWNrSWQ7Ci10eXBlZGVmIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgQnVmZmVyUXVldWU7Ci0KLWNvbnN0IGludCBrRW5kID0gLTE7Ci1jb25zdCB1aW50OF90IGtGYWtlRGF0YVtdID0gezB4RkZ9OwotY29uc3QgVHJhY2tJZCBrQXVkaW9UcmFja0lkID0gMDsKLWNvbnN0IFRyYWNrSWQga1ZpZGVvVHJhY2tJZCA9IDE7Ci1jb25zdCBUcmFja0lkIGtUZXh0VHJhY2tJZEEgPSAyOwotY29uc3QgVHJhY2tJZCBrVGV4dFRyYWNrSWRCID0gMzsKLQotc3RhdGljIGJvb2wgSXNBdWRpbyhzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyKSB7Ci0gIHJldHVybiBidWZmZXItPnR5cGUoKSA9PSBEZW11eGVyU3RyZWFtOjpBVURJTzsKLX0KLQotc3RhdGljIGJvb2wgSXNWaWRlbyhzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyKSB7Ci0gIHJldHVybiBidWZmZXItPnR5cGUoKSA9PSBEZW11eGVyU3RyZWFtOjpWSURFTzsKLX0KLQotc3RhdGljIGJvb2wgSXNUZXh0KHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXIpIHsKLSAgcmV0dXJuIGJ1ZmZlci0+dHlwZSgpID09IERlbXV4ZXJTdHJlYW06OlRFWFQ7Ci19Ci0KLS8vIENyZWF0ZXMgYW5kIGFwcGVuZHMgYSBzZXF1ZW5jZSBvZiBTdHJlYW1QYXJzZXJCdWZmZXJzIHRvIHRoZSBwcm92aWRlZAotLy8gfHF1ZXVlfC4gfGRlY29kZV90aW1lc3RhbXBzfCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgYXBwZW5kZWQgYnVmZmVycyBhbmQKLS8vIHRoZWlyIHNlcXVlbmNlIG9mIGRlY29kZSB0aW1lc3RhbXBzOyBhIHxrRW5kfCB0aW1lc3RhbXAgaW5kaWNhdGVzIHRoZQotLy8gZW5kIG9mIHRoZSBzZXF1ZW5jZSBhbmQgbm8gYnVmZmVyIGlzIGFwcGVuZGVkIGZvciBpdC4gRWFjaCBuZXcgYnVmZmVyJ3MKLS8vIHR5cGUgd2lsbCBiZSB8dHlwZXwgd2l0aCB0cmFjayBJRCBzZXQgdG8gfHRyYWNrX2lkfC4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlQnVmZmVycyhjb25zdCBpbnQqIGRlY29kZV90aW1lc3RhbXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbVBhcnNlckJ1ZmZlcjo6VHlwZSB0eXBlLCBUcmFja0lkIHRyYWNrX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclF1ZXVlKiBxdWV1ZSkgewotICBEQ0hFQ0soZGVjb2RlX3RpbWVzdGFtcHMpOwotICBEQ0hFQ0socXVldWUpOwotICBEQ0hFQ0tfTkUodHlwZSwgRGVtdXhlclN0cmVhbTo6VU5LTk9XTik7Ci0gIERDSEVDS19MVCh0eXBlLCBEZW11eGVyU3RyZWFtOjpOVU1fVFlQRVMpOwotICBmb3IgKGludCBpID0gMDsgZGVjb2RlX3RpbWVzdGFtcHNbaV0gIT0ga0VuZDsgKytpKSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICAgIGtGYWtlRGF0YSwgc2l6ZW9mKGtGYWtlRGF0YSksIHRydWUsIHR5cGUsIHRyYWNrX2lkKTsKLSAgICBEQ0hFQ0soYnVmZmVyKTsKLSAgICBidWZmZXItPlNldERlY29kZVRpbWVzdGFtcCgKLSAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWljcm9zZWNvbmRzKGRlY29kZV90aW1lc3RhbXBzW2ldKSk7Ci0gICAgcXVldWUtPnB1c2hfYmFjayhidWZmZXIpOwotICB9Ci19Ci0KLWNsYXNzIFN0cmVhbVBhcnNlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBTdHJlYW1QYXJzZXJUZXN0KCkge30KLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB8bWVyZ2VkX2J1ZmZlcnNffCBmb3Igd2hpY2ggfHByZWRpY2F0ZXwKLSAgLy8gcmV0dXJucyB0cnVlLgotICBzaXplX3QgQ291bnRNYXRjaGluZ01lcmdlZEJ1ZmZlcnMoCi0gICAgICBib29sICgqcHJlZGljYXRlKShzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyKSkgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KAotICAgICAgICBjb3VudF9pZihtZXJnZWRfYnVmZmVyc18uYmVnaW4oKSwgbWVyZ2VkX2J1ZmZlcnNfLmVuZCgpLCBwcmVkaWNhdGUpKTsKLSAgfQotCi0gIC8vIEFwcGVuZHMgdGVzdCBhdWRpbyBidWZmZXJzIGluIHRoZSBzZXF1ZW5jZSBkZXNjcmliZWQgYnkgfGRlY29kZV90aW1lc3RhbXBzfAotICAvLyB0byB8YXVkaW9fYnVmZmVyc198LiBTZWUgR2VuZXJhdGVCdWZmZXJzKCkgZm9yIHxkZWNvZGVfdGltZXN0YW1wc3wgZm9ybWF0LgotICB2b2lkIEdlbmVyYXRlQXVkaW9CdWZmZXJzKGNvbnN0IGludCogZGVjb2RlX3RpbWVzdGFtcHMpIHsKLSAgICBHZW5lcmF0ZUJ1ZmZlcnMoZGVjb2RlX3RpbWVzdGFtcHMsIERlbXV4ZXJTdHJlYW06OkFVRElPLCBrQXVkaW9UcmFja0lkLAotICAgICAgICAgICAgICAgICAgICAmYnVmZmVyX3F1ZXVlX21hcF9ba0F1ZGlvVHJhY2tJZF0pOwotICB9Ci0KLSAgLy8gQXBwZW5kcyB0ZXN0IHZpZGVvIGJ1ZmZlcnMgaW4gdGhlIHNlcXVlbmNlIGRlc2NyaWJlZCBieSB8ZGVjb2RlX3RpbWVzdGFtcHN8Ci0gIC8vIHRvIHx2aWRlb19idWZmZXJzX3wuIFNlZSBHZW5lcmF0ZUJ1ZmZlcnMoKSBmb3IgfGRlY29kZV90aW1lc3RhbXBzfCBmb3JtYXQuCi0gIHZvaWQgR2VuZXJhdGVWaWRlb0J1ZmZlcnMoY29uc3QgaW50KiBkZWNvZGVfdGltZXN0YW1wcykgewotICAgIEdlbmVyYXRlQnVmZmVycyhkZWNvZGVfdGltZXN0YW1wcywgRGVtdXhlclN0cmVhbTo6VklERU8sIGtWaWRlb1RyYWNrSWQsCi0gICAgICAgICAgICAgICAgICAgICZidWZmZXJfcXVldWVfbWFwX1trVmlkZW9UcmFja0lkXSk7Ci0gIH0KLQotICAvLyBDdXJyZW50IHRlc3RzIG9ubHkgbmVlZCB1cCB0byB0d28gZGlzdGluY3QgdGV4dCBCdWZmZXJRdWV1ZXMuIFRoaXMgaGVscGVyCi0gIC8vIGNvbmRpdGlvbmFsbHkgYXBwZW5kcyBidWZmZXJzIHRvIHRoZSB1bmRlcmx5aW5nIHxidWZmZXJfcXVldWVfbWFwX3wga2V5ZWQKLSAgLy8gYnkgdGhlIHJlc3BlY3RpdmUgdHJhY2sgSUQuIElmIHxkZWNvZGVfdGltZXN0YW1wc197YSxifXwKLSAgLy8gaXMgTlVMTCwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBCdWZmZXJRdWV1ZSBpcyBub3QgY2hhbmdlZCBhdCBhbGwuCi0gIC8vIE5vdGUgdGhhdCBrZXkgY29sbGlzaW9uIG9uIG1hcCBpbnNlcnRpb24gZG9lcyBub3QgcmVwbGFjZSB0aGUgcHJldmlvdXMKLSAgLy8gdmFsdWUuCi0gIHZvaWQgR2VuZXJhdGVUZXh0QnVmZmVycyhjb25zdCBpbnQqIGRlY29kZV90aW1lc3RhbXBzX2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQqIGRlY29kZV90aW1lc3RhbXBzX2IpIHsKLSAgICBpZiAoZGVjb2RlX3RpbWVzdGFtcHNfYSkgewotICAgICAgR2VuZXJhdGVCdWZmZXJzKGRlY29kZV90aW1lc3RhbXBzX2EsIERlbXV4ZXJTdHJlYW06OlRFWFQsIGtUZXh0VHJhY2tJZEEsCi0gICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl9xdWV1ZV9tYXBfW2tUZXh0VHJhY2tJZEFdKTsKLSAgICB9Ci0KLSAgICBpZiAoZGVjb2RlX3RpbWVzdGFtcHNfYikgewotICAgICAgR2VuZXJhdGVCdWZmZXJzKGRlY29kZV90aW1lc3RhbXBzX2IsIERlbXV4ZXJTdHJlYW06OlRFWFQsIGtUZXh0VHJhY2tJZEIsCi0gICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl9xdWV1ZV9tYXBfW2tUZXh0VHJhY2tJZEJdKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBzZXF1ZW5jZSBvZiBidWZmZXJzIGluCi0gIC8vIHxtZXJnZWRfYnVmZmVyc198LiBUaGUgc3RyaW5nIGlzIGEgY29uY2F0ZW5hdGlvbiBvZiBzcGFjZS1kZWxpbWl0ZWQgYnVmZmVyCi0gIC8vIGRlc2NyaXB0b3JzIGluIHRoZSBzYW1lIHNlcXVlbmNlIGFzIHxtZXJnZWRfYnVmZmVyc198LiBFYWNoIGRlc2NyaXB0b3IgaXMKLSAgLy8gdGhlIGNvbmNhdGVuYXRpb24gb2YKLSAgLy8gMSkgYSBzaW5nbGUgY2hhcmFjdGVyIHRoYXQgZGVzY3JpYmVzIHRoZSBidWZmZXIncyB0eXBlKCksIGUuZy4gQSwgViwgb3IgVAotICAvLyAgICBmb3IgYXVkaW8sIHZpZGVvLCBvciB0ZXh0LCByZXNwZWN0aXZlbHkKLSAgLy8gMikgdGhlIGJ1ZmZlcidzIHRyYWNrX2lkKCkKLSAgLy8gMykgIjoiCi0gIC8vIDQpIHRoZSBidWZmZXIncyBkZWNvZGUgdGltZXN0YW1wLgotICAvLyBJZiB8aW5jbHVkZV90eXBlX2FuZF90ZXh0X3RyYWNrfCBpcyBmYWxzZSwgdGhlbiBpdGVtcyAxLCAyLCBhbmQgMyBhcmUKLSAgLy8gbm90IGluY2x1ZGVkIGluIGRlc2NyaXB0b3JzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGJ1ZmZlcnMgd2l0aCBkaWZmZXJlbnQKLSAgLy8gbWVkaWEgdHlwZXMgYnV0IHRoZSBzYW1lIGRlY29kZSB0aW1lc3RhbXAgYXJlIGV4cGVjdGVkLCBhbmQgdGhlIGV4YWN0Ci0gIC8vIHNlcXVlbmNlIG9mIG1lZGlhIHR5cGVzIGZvciB0aGUgdHlpbmcgdGltZXN0YW1wcyBpcyBub3Qgc3ViamVjdCB0bwotICAvLyB2ZXJpZmljYXRpb24uCi0gIHN0ZDo6c3RyaW5nIE1lcmdlZEJ1ZmZlclF1ZXVlU3RyaW5nKGJvb2wgaW5jbHVkZV90eXBlX2FuZF90ZXh0X3RyYWNrKSB7Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gcmVzdWx0c19zdHJlYW07Ci0gICAgZm9yIChCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbWVyZ2VkX2J1ZmZlcnNfLmJlZ2luKCk7Ci0gICAgICAgICBpdHIgIT0gbWVyZ2VkX2J1ZmZlcnNfLmVuZCgpOyArK2l0cikgewotICAgICAgaWYgKGl0ciAhPSBtZXJnZWRfYnVmZmVyc18uYmVnaW4oKSkgcmVzdWx0c19zdHJlYW0gPDwgIiAiOwotICAgICAgY29uc3QgU3RyZWFtUGFyc2VyQnVmZmVyJiBidWZmZXIgPSAqKGl0ci0+Z2V0KCkpOwotICAgICAgaWYgKGluY2x1ZGVfdHlwZV9hbmRfdGV4dF90cmFjaykgewotICAgICAgICBzd2l0Y2ggKGJ1ZmZlci50eXBlKCkpIHsKLSAgICAgICAgICBjYXNlIERlbXV4ZXJTdHJlYW06OkFVRElPOgotICAgICAgICAgICAgcmVzdWx0c19zdHJlYW0gPDwgIkEiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEZW11eGVyU3RyZWFtOjpWSURFTzoKLSAgICAgICAgICAgIHJlc3VsdHNfc3RyZWFtIDw8ICJWIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VEVYVDoKLSAgICAgICAgICAgIHJlc3VsdHNfc3RyZWFtIDw8ICJUIjsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIE5PVFJFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHRzX3N0cmVhbSA8PCBidWZmZXIudHJhY2tfaWQoKSA8PCAiOiI7Ci0gICAgICB9Ci0gICAgICByZXN1bHRzX3N0cmVhbSA8PCBidWZmZXIuR2V0RGVjb2RlVGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0c19zdHJlYW0uc3RyKCk7Ci0gIH0KLQotICAvLyBWZXJpZmllcyB0aGF0IE1lcmdlQnVmZmVyUXVldWVzKCkgb2YgdGhlIGN1cnJlbnQgfGF1ZGlvX2J1ZmZlcnNffCwKLSAgLy8gfHZpZGVvX2J1ZmZlcnNffCwgfHRleHRfbWFwX3wsIGFuZCB8bWVyZ2VkX2J1ZmZlcnNffCByZXR1cm5zIHRydWUgYW5kCi0gIC8vIHJlc3VsdHMgaW4gYW4gdXBkYXRlZCB8bWVyZ2VkX2J1ZmZlcnNffCB0aGF0IG1hdGNoZXMgZXhwZWN0YXRpb24uIFRoZQotICAvLyBleHBlY3RhdGlvbiwgc3BlY2lmaWVkIGluIHxleHBlY3RlZHwsIGlzIGNvbXBhcmVkIHRvIHRoZSBzdHJpbmcgcmVzdWx0aW5nCi0gIC8vIGZyb20gTWVyZ2VkQnVmZmVyUXVldWVTdHJpbmcoKSAoc2VlIGNvbW1lbnRzIGZvciB0aGF0IG1ldGhvZCkgd2l0aAotICAvLyB8dmVyaWZ5X3R5cGVfYW5kX3RleHRfdHJhY2tfc2VxdWVuY2V8IHBhc3NlZC4gfG1lcmdlZF9idWZmZXJzX3wgaXMgYXBwZW5kZWQKLSAgLy8gdG8gYnkgdGhlIG1lcmdlLCBhbmQgbWF5IGJlIHNldHVwIGJ5IHRoZSBjYWxsZXIgdG8gaGF2ZSBzb21lIHByZS1leGlzdGluZwotICAvLyBidWZmZXJzOyBpdCBpcyBib3RoIGFuIGlucHV0IGFuZCBvdXRwdXQgb2YgdGhpcyBtZXRob2QuCi0gIC8vIFJlZ2FyZGxlc3Mgb2YgfHZlcmlmeV90eXBlX2FuZF90ZXh0X3RyYWNrX3NlcXVlbmNlfCwgdGhlIG1hcmdpbmFsIG51bWJlcgotICAvLyBvZiBidWZmZXJzIG9mIGVhY2ggdHlwZSAoYXVkaW8sIHZpZGVvLCB0ZXh0KSByZXN1bHRpbmcgZnJvbSB0aGUgbWVyZ2UgaXMKLSAgLy8gYWxzbyB2ZXJpZmllZCB0byBtYXRjaCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gfGF1ZGlvX2J1ZmZlcnNffCwKLSAgLy8gfHZpZGVvX2J1ZmZlcnNffCwgYW5kIHx0ZXh0X21hcF98LCByZXNwZWN0aXZlbHkuCi0gIHZvaWQgVmVyaWZ5TWVyZ2VTdWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2ZXJpZnlfdHlwZV9hbmRfdGV4dF90cmFja19zZXF1ZW5jZSkgewotICAgIC8vIHxtZXJnZWRfYnVmZmVyc3wgbWF5IGFscmVhZHkgaGF2ZSBzb21lIGJ1ZmZlcnMuIENvdW50IHRoZW0gYnkgdHlwZSBmb3IKLSAgICAvLyBsYXRlciBpbmNsdXNpb24gaW4gdmVyaWZpY2F0aW9uLgotICAgIHNpemVfdCBvcmlnaW5hbF9hdWRpb19pbl9tZXJnZWQgPSBDb3VudE1hdGNoaW5nTWVyZ2VkQnVmZmVycyhJc0F1ZGlvKTsKLSAgICBzaXplX3Qgb3JpZ2luYWxfdmlkZW9faW5fbWVyZ2VkID0gQ291bnRNYXRjaGluZ01lcmdlZEJ1ZmZlcnMoSXNWaWRlbyk7Ci0gICAgc2l6ZV90IG9yaWdpbmFsX3RleHRfaW5fbWVyZ2VkID0gQ291bnRNYXRjaGluZ01lcmdlZEJ1ZmZlcnMoSXNUZXh0KTsKLQotICAgIEVYUEVDVF9UUlVFKE1lcmdlQnVmZmVyUXVldWVzKGJ1ZmZlcl9xdWV1ZV9tYXBfLCAmbWVyZ2VkX2J1ZmZlcnNfKSk7Ci0KLSAgICAvLyBWZXJpZnkgcmVzdWx0aW5nIGNvbnRlbnRzIG9mIHxtZXJnZWRfYnVmZmVyc3wgbWF0Y2hlcyB8ZXhwZWN0ZWR8LgotICAgIEVYUEVDVF9FUShleHBlY3RlZCwKLSAgICAgICAgICAgICAgTWVyZ2VkQnVmZmVyUXVldWVTdHJpbmcodmVyaWZ5X3R5cGVfYW5kX3RleHRfdHJhY2tfc2VxdWVuY2UpKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IG51bWJlciBvZiBlYWNoIHR5cGUgb2YgYnVmZmVyIGlzIGluIHRoZSBtZXJnZQotICAgIC8vIHJlc3VsdC4KLSAgICBzaXplX3QgYXVkaW9faW5fbWVyZ2VkID0gQ291bnRNYXRjaGluZ01lcmdlZEJ1ZmZlcnMoSXNBdWRpbyk7Ci0gICAgc2l6ZV90IHZpZGVvX2luX21lcmdlZCA9IENvdW50TWF0Y2hpbmdNZXJnZWRCdWZmZXJzKElzVmlkZW8pOwotICAgIHNpemVfdCB0ZXh0X2luX21lcmdlZCA9IENvdW50TWF0Y2hpbmdNZXJnZWRCdWZmZXJzKElzVGV4dCk7Ci0KLSAgICBFWFBFQ1RfR0UoYXVkaW9faW5fbWVyZ2VkLCBvcmlnaW5hbF9hdWRpb19pbl9tZXJnZWQpOwotICAgIEVYUEVDVF9HRSh2aWRlb19pbl9tZXJnZWQsIG9yaWdpbmFsX3ZpZGVvX2luX21lcmdlZCk7Ci0gICAgRVhQRUNUX0dFKHRleHRfaW5fbWVyZ2VkLCBvcmlnaW5hbF90ZXh0X2luX21lcmdlZCk7Ci0KLSAgICBFWFBFQ1RfRVEoYnVmZmVyX3F1ZXVlX21hcF9ba0F1ZGlvVHJhY2tJZF0uc2l6ZSgpLAotICAgICAgICAgICAgICBhdWRpb19pbl9tZXJnZWQgLSBvcmlnaW5hbF9hdWRpb19pbl9tZXJnZWQpOwotICAgIGlmIChidWZmZXJfcXVldWVfbWFwX1trQXVkaW9UcmFja0lkXS5lbXB0eSgpKQotICAgICAgYnVmZmVyX3F1ZXVlX21hcF8uZXJhc2Uoa0F1ZGlvVHJhY2tJZCk7Ci0gICAgRVhQRUNUX0VRKGJ1ZmZlcl9xdWV1ZV9tYXBfW2tWaWRlb1RyYWNrSWRdLnNpemUoKSwKLSAgICAgICAgICAgICAgdmlkZW9faW5fbWVyZ2VkIC0gb3JpZ2luYWxfdmlkZW9faW5fbWVyZ2VkKTsKLSAgICBpZiAoYnVmZmVyX3F1ZXVlX21hcF9ba1ZpZGVvVHJhY2tJZF0uZW1wdHkoKSkKLSAgICAgIGJ1ZmZlcl9xdWV1ZV9tYXBfLmVyYXNlKGtWaWRlb1RyYWNrSWQpOwotCi0gICAgc2l6ZV90IGV4cGVjdGVkX3RleHRfYnVmZmVyX2NvdW50ID0gMDsKLSAgICBleHBlY3RlZF90ZXh0X2J1ZmZlcl9jb3VudCArPSBidWZmZXJfcXVldWVfbWFwX1trVGV4dFRyYWNrSWRBXS5zaXplKCk7Ci0gICAgaWYgKGJ1ZmZlcl9xdWV1ZV9tYXBfW2tUZXh0VHJhY2tJZEFdLmVtcHR5KCkpCi0gICAgICBidWZmZXJfcXVldWVfbWFwXy5lcmFzZShrVGV4dFRyYWNrSWRBKTsKLSAgICBleHBlY3RlZF90ZXh0X2J1ZmZlcl9jb3VudCArPSBidWZmZXJfcXVldWVfbWFwX1trVGV4dFRyYWNrSWRCXS5zaXplKCk7Ci0gICAgaWYgKGJ1ZmZlcl9xdWV1ZV9tYXBfW2tUZXh0VHJhY2tJZEJdLmVtcHR5KCkpCi0gICAgICBidWZmZXJfcXVldWVfbWFwXy5lcmFzZShrVGV4dFRyYWNrSWRCKTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfdGV4dF9idWZmZXJfY291bnQsCi0gICAgICAgICAgICAgIHRleHRfaW5fbWVyZ2VkIC0gb3JpZ2luYWxfdGV4dF9pbl9tZXJnZWQpOwotICB9Ci0KLSAgLy8gVmVyaWZpZXMgdGhhdCBNZXJnZUJ1ZmZlclF1ZXVlcygpIG9mIHRoZSBjdXJyZW50IHxidWZmZXJfcXVldWVfbWFwX3wgYW5kCi0gIC8vIHxtZXJnZWRfYnVmZmVyc198IHJldHVybnMgZmFsc2UuCi0gIHZvaWQgVmVyaWZ5TWVyZ2VGYWlsdXJlKCkgewotICAgIEVYUEVDVF9GQUxTRShNZXJnZUJ1ZmZlclF1ZXVlcyhidWZmZXJfcXVldWVfbWFwXywgJm1lcmdlZF9idWZmZXJzXykpOwotICB9Ci0KLSAgLy8gSGVscGVyIHRvIGFsbG93IHRlc3RzIHRvIGNsZWFyIGFsbCB0aGUgaW5wdXQgQnVmZmVyUXVldWVzIChleGNlcHQKLSAgLy8gfG1lcmdlZF9idWZmZXJzX3wpIGFuZCB0aGUgQnVmZmVyUXVldWVNYXAgdGhhdCBhcmUgdXNlZCBpbgotICAvLyBWZXJpZnlNZXJnZXtTdWNjZXNzL0ZhaWx1cmV9KCkuCi0gIHZvaWQgQ2xlYXJCdWZmZXJRdWV1ZXNCdXRLZWVwQW55TWVyZ2VkQnVmZmVycygpIHsgYnVmZmVyX3F1ZXVlX21hcF8uY2xlYXIoKTsgfQotCi0gcHJpdmF0ZToKLSAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCBidWZmZXJfcXVldWVfbWFwXzsKLSAgQnVmZmVyUXVldWUgbWVyZ2VkX2J1ZmZlcnNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdHJlYW1QYXJzZXJUZXN0KTsKLX07Ci0KLVRFU1RfRihTdHJlYW1QYXJzZXJUZXN0LCBNZXJnZUJ1ZmZlclF1ZXVlc19BbGxFbXB0eSkgewotICBzdGQ6OnN0cmluZyBleHBlY3RlZCA9ICIiOwotICBWZXJpZnlNZXJnZVN1Y2Nlc3MoZXhwZWN0ZWQsIHRydWUpOwotfQotCi1URVNUX0YoU3RyZWFtUGFyc2VyVGVzdCwgTWVyZ2VCdWZmZXJRdWV1ZXNfU2luZ2xlQXVkaW9CdWZmZXIpIHsKLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPSAiQTA6MTAwIjsKLSAgaW50IGF1ZGlvX3RpbWVzdGFtcHNbXSA9IHsxMDAsIGtFbmR9OwotICBHZW5lcmF0ZUF1ZGlvQnVmZmVycyhhdWRpb190aW1lc3RhbXBzKTsKLSAgVmVyaWZ5TWVyZ2VTdWNjZXNzKGV4cGVjdGVkLCB0cnVlKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX1NpbmdsZVZpZGVvQnVmZmVyKSB7Ci0gIHN0ZDo6c3RyaW5nIGV4cGVjdGVkID0gIlYxOjEwMCI7Ci0gIGludCB2aWRlb190aW1lc3RhbXBzW10gPSB7MTAwLCBrRW5kfTsKLSAgR2VuZXJhdGVWaWRlb0J1ZmZlcnModmlkZW9fdGltZXN0YW1wcyk7Ci0gIFZlcmlmeU1lcmdlU3VjY2VzcyhleHBlY3RlZCwgdHJ1ZSk7Ci19Ci0KLVRFU1RfRihTdHJlYW1QYXJzZXJUZXN0LCBNZXJnZUJ1ZmZlclF1ZXVlc19TaW5nbGVUZXh0QnVmZmVyKSB7Ci0gIHN0ZDo6c3RyaW5nIGV4cGVjdGVkID0gIlQyOjEwMCI7Ci0gIGludCB0ZXh0X3RpbWVzdGFtcHNbXSA9IHsxMDAsIGtFbmR9OwotICBHZW5lcmF0ZVRleHRCdWZmZXJzKHRleHRfdGltZXN0YW1wcywgTlVMTCk7Ci0gIFZlcmlmeU1lcmdlU3VjY2VzcyhleHBlY3RlZCwgdHJ1ZSk7Ci19Ci0KLVRFU1RfRihTdHJlYW1QYXJzZXJUZXN0LCBNZXJnZUJ1ZmZlclF1ZXVlc19PdmVybGFwcGluZ0F1ZGlvVmlkZW8pIHsKLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPSAiQTA6MTAwIFYxOjEwMSBWMToxMDIgQTA6MTAzIEEwOjEwNCBWMToxMDUiOwotICBpbnQgYXVkaW9fdGltZXN0YW1wc1tdID0gezEwMCwgMTAzLCAxMDQsIGtFbmR9OwotICBHZW5lcmF0ZUF1ZGlvQnVmZmVycyhhdWRpb190aW1lc3RhbXBzKTsKLSAgaW50IHZpZGVvX3RpbWVzdGFtcHNbXSA9IHsxMDEsIDEwMiwgMTA1LCBrRW5kfTsKLSAgR2VuZXJhdGVWaWRlb0J1ZmZlcnModmlkZW9fdGltZXN0YW1wcyk7Ci0gIFZlcmlmeU1lcmdlU3VjY2VzcyhleHBlY3RlZCwgdHJ1ZSk7Ci19Ci0KLVRFU1RfRihTdHJlYW1QYXJzZXJUZXN0LCBNZXJnZUJ1ZmZlclF1ZXVlc19PdmVybGFwcGluZ011bHRpcGxlVGV4dCkgewotICBzdGQ6OnN0cmluZyBleHBlY3RlZCA9ICJUMjoxMDAgVDI6MTAxIFQzOjEwMyBUMjoxMDQgVDM6MTA1IFQzOjEwNiI7Ci0gIGludCB0ZXh0X3RpbWVzdGFtcHNfYVtdID0gezEwMCwgMTAxLCAxMDQsIGtFbmR9OwotICBpbnQgdGV4dF90aW1lc3RhbXBzX2JbXSA9IHsxMDMsIDEwNSwgMTA2LCBrRW5kfTsKLSAgR2VuZXJhdGVUZXh0QnVmZmVycyh0ZXh0X3RpbWVzdGFtcHNfYSwgdGV4dF90aW1lc3RhbXBzX2IpOwotICBWZXJpZnlNZXJnZVN1Y2Nlc3MoZXhwZWN0ZWQsIHRydWUpOwotfQotCi1URVNUX0YoU3RyZWFtUGFyc2VyVGVzdCwgTWVyZ2VCdWZmZXJRdWV1ZXNfT3ZlcmxhcHBpbmdBdWRpb1ZpZGVvVGV4dCkgewotICBzdGQ6OnN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAiQTA6MTAwIFYxOjEwMSBUMjoxMDIgVjE6MTAzIFQzOjEwNCBBMDoxMDUgVjE6MTA2ICIKLSAgICAgICJUMjoxMDciOwotICBpbnQgYXVkaW9fdGltZXN0YW1wc1tdID0gezEwMCwgMTA1LCBrRW5kfTsKLSAgR2VuZXJhdGVBdWRpb0J1ZmZlcnMoYXVkaW9fdGltZXN0YW1wcyk7Ci0gIGludCB2aWRlb190aW1lc3RhbXBzW10gPSB7MTAxLCAxMDMsIDEwNiwga0VuZH07Ci0gIEdlbmVyYXRlVmlkZW9CdWZmZXJzKHZpZGVvX3RpbWVzdGFtcHMpOwotICBpbnQgdGV4dF90aW1lc3RhbXBzX2FbXSA9IHsxMDIsIDEwNywga0VuZH07Ci0gIGludCB0ZXh0X3RpbWVzdGFtcHNfYltdID0gezEwNCwga0VuZH07Ci0gIEdlbmVyYXRlVGV4dEJ1ZmZlcnModGV4dF90aW1lc3RhbXBzX2EsIHRleHRfdGltZXN0YW1wc19iKTsKLSAgVmVyaWZ5TWVyZ2VTdWNjZXNzKGV4cGVjdGVkLCB0cnVlKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX05vbkRlY3JlYXNpbmdOb0Nyb3NzTWVkaWFEdXBsaWNhdGUpIHsKLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgIkEwOjEwMCBBMDoxMDAgQTA6MTAwIFYxOjEwMSBWMToxMDEgVjE6MTAxIEEwOjEwMiAiCi0gICAgICAiVjE6MTAzIFYxOjEwMyI7Ci0gIGludCBhdWRpb190aW1lc3RhbXBzW10gPSB7MTAwLCAxMDAsIDEwMCwgMTAyLCBrRW5kfTsKLSAgR2VuZXJhdGVBdWRpb0J1ZmZlcnMoYXVkaW9fdGltZXN0YW1wcyk7Ci0gIGludCB2aWRlb190aW1lc3RhbXBzW10gPSB7MTAxLCAxMDEsIDEwMSwgMTAzLCAxMDMsIGtFbmR9OwotICBHZW5lcmF0ZVZpZGVvQnVmZmVycyh2aWRlb190aW1lc3RhbXBzKTsKLSAgVmVyaWZ5TWVyZ2VTdWNjZXNzKGV4cGVjdGVkLCB0cnVlKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX0Nyb3NzU3RyZWFtRHVwbGljYXRlcykgewotICAvLyBJbnRlcmZhY2Uga2VlcHMgdGhlIGNob2ljZSB1bmRlZmluZWQgb2Ygd2hpY2ggc3RyZWFtJ3MgYnVmZmVyIHdpbnMgdGhlCi0gIC8vIHNlbGVjdGlvbiB3aGVuIHRpbWVzdGFtcHMgYXJlIHRpZWQuIFZlcmlmeSBhdCBsZWFzdCB0aGUgcmlnaHQgbnVtYmVyIG9mCi0gIC8vIGVhY2gga2luZCBvZiBidWZmZXIgcmVzdWx0cywgYW5kIHRoYXQgYnVmZmVycyBhcmUgaW4gbm9uZGVjcmVhc2luZyBvcmRlci4KLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPSAiMTAwIDEwMCAxMDAgMTAwIDEwMCAxMDAgMTAyIDEwMiAxMDIgMTAyIDEwMiAxMDIgMTAyIjsKLSAgaW50IGF1ZGlvX3RpbWVzdGFtcHNbXSA9IHsxMDAsIDEwMCwgMTAwLCAxMDIsIGtFbmR9OwotICBHZW5lcmF0ZUF1ZGlvQnVmZmVycyhhdWRpb190aW1lc3RhbXBzKTsKLSAgaW50IHZpZGVvX3RpbWVzdGFtcHNbXSA9IHsxMDAsIDEwMCwgMTAyLCAxMDIsIDEwMiwga0VuZH07Ci0gIEdlbmVyYXRlVmlkZW9CdWZmZXJzKHZpZGVvX3RpbWVzdGFtcHMpOwotICBpbnQgdGV4dF90aW1lc3RhbXBzW10gPSB7MTAwLCAxMDIsIDEwMiwgMTAyLCBrRW5kfTsKLSAgR2VuZXJhdGVUZXh0QnVmZmVycyh0ZXh0X3RpbWVzdGFtcHMsIE5VTEwpOwotICBWZXJpZnlNZXJnZVN1Y2Nlc3MoZXhwZWN0ZWQsIGZhbHNlKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX0ludmFsaWREZWNyZWFzaW5nU2luZ2xlU3RyZWFtKSB7Ci0gIGludCBhdWRpb190aW1lc3RhbXBzW10gPSB7MTAxLCAxMDIsIDEwMCwgMTAzLCBrRW5kfTsKLSAgR2VuZXJhdGVBdWRpb0J1ZmZlcnMoYXVkaW9fdGltZXN0YW1wcyk7Ci0gIFZlcmlmeU1lcmdlRmFpbHVyZSgpOwotfQotCi1URVNUX0YoU3RyZWFtUGFyc2VyVGVzdCwgTWVyZ2VCdWZmZXJRdWV1ZXNfSW52YWxpZERlY3JlYXNpbmdNdWx0aXBsZVN0cmVhbXMpIHsKLSAgaW50IGF1ZGlvX3RpbWVzdGFtcHNbXSA9IHsxMDEsIDEwMiwgMTAwLCAxMDMsIGtFbmR9OwotICBHZW5lcmF0ZUF1ZGlvQnVmZmVycyhhdWRpb190aW1lc3RhbXBzKTsKLSAgaW50IHZpZGVvX3RpbWVzdGFtcHNbXSA9IHsxMDQsIDEwMCwga0VuZH07Ci0gIEdlbmVyYXRlVmlkZW9CdWZmZXJzKHZpZGVvX3RpbWVzdGFtcHMpOwotICBWZXJpZnlNZXJnZUZhaWx1cmUoKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX1ZhbGlkQXBwZW5kVG9FeGlzdGluZ01lcmdlKSB7Ci0gIHN0ZDo6c3RyaW5nIGV4cGVjdGVkID0KLSAgICAgICJBMDoxMDAgVjE6MTAxIFQyOjEwMiBWMToxMDMgVDM6MTA0IEEwOjEwNSBWMToxMDYgIgotICAgICAgIlQyOjEwNyI7Ci0gIGludCBhdWRpb190aW1lc3RhbXBzW10gPSB7MTAwLCAxMDUsIGtFbmR9OwotICBHZW5lcmF0ZUF1ZGlvQnVmZmVycyhhdWRpb190aW1lc3RhbXBzKTsKLSAgaW50IHZpZGVvX3RpbWVzdGFtcHNbXSA9IHsxMDEsIDEwMywgMTA2LCBrRW5kfTsKLSAgR2VuZXJhdGVWaWRlb0J1ZmZlcnModmlkZW9fdGltZXN0YW1wcyk7Ci0gIGludCB0ZXh0X3RpbWVzdGFtcHNfYVtdID0gezEwMiwgMTA3LCBrRW5kfTsKLSAgaW50IHRleHRfdGltZXN0YW1wc19iW10gPSB7MTA0LCBrRW5kfTsKLSAgR2VuZXJhdGVUZXh0QnVmZmVycyh0ZXh0X3RpbWVzdGFtcHNfYSwgdGV4dF90aW1lc3RhbXBzX2IpOwotICBWZXJpZnlNZXJnZVN1Y2Nlc3MoZXhwZWN0ZWQsIHRydWUpOwotCi0gIENsZWFyQnVmZmVyUXVldWVzQnV0S2VlcEFueU1lcmdlZEJ1ZmZlcnMoKTsKLQotICBleHBlY3RlZCA9Ci0gICAgICAiQTA6MTAwIFYxOjEwMSBUMjoxMDIgVjE6MTAzIFQzOjEwNCBBMDoxMDUgVjE6MTA2IFQyOjEwNyAiCi0gICAgICAiQTA6MTA3IFYxOjExMSBUMjoxMTIgVjE6MTEzIFQzOjExNCBBMDoxMTUgVjE6MTE2IFQyOjExNyI7Ci0gIGludCBtb3JlX2F1ZGlvX3RpbWVzdGFtcHNbXSA9IHsxMDcsIDExNSwga0VuZH07Ci0gIEdlbmVyYXRlQXVkaW9CdWZmZXJzKG1vcmVfYXVkaW9fdGltZXN0YW1wcyk7Ci0gIGludCBtb3JlX3ZpZGVvX3RpbWVzdGFtcHNbXSA9IHsxMTEsIDExMywgMTE2LCBrRW5kfTsKLSAgR2VuZXJhdGVWaWRlb0J1ZmZlcnMobW9yZV92aWRlb190aW1lc3RhbXBzKTsKLSAgaW50IG1vcmVfdGV4dF90aW1lc3RhbXBzX2FbXSA9IHsxMTIsIDExNywga0VuZH07Ci0gIGludCBtb3JlX3RleHRfdGltZXN0YW1wc19iW10gPSB7MTE0LCBrRW5kfTsKLSAgR2VuZXJhdGVUZXh0QnVmZmVycyhtb3JlX3RleHRfdGltZXN0YW1wc19hLCBtb3JlX3RleHRfdGltZXN0YW1wc19iKTsKLSAgVmVyaWZ5TWVyZ2VTdWNjZXNzKGV4cGVjdGVkLCB0cnVlKTsKLX0KLQotVEVTVF9GKFN0cmVhbVBhcnNlclRlc3QsIE1lcmdlQnVmZmVyUXVldWVzX0ludmFsaWRBcHBlbmRUb0V4aXN0aW5nTWVyZ2UpIHsKLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgIkEwOjEwMCBWMToxMDEgVDI6MTAyIFYxOjEwMyBUMzoxMDQgQTA6MTA1IFYxOjEwNiAiCi0gICAgICAiVDI6MTA3IjsKLSAgaW50IGF1ZGlvX3RpbWVzdGFtcHNbXSA9IHsxMDAsIDEwNSwga0VuZH07Ci0gIEdlbmVyYXRlQXVkaW9CdWZmZXJzKGF1ZGlvX3RpbWVzdGFtcHMpOwotICBpbnQgdmlkZW9fdGltZXN0YW1wc1tdID0gezEwMSwgMTAzLCAxMDYsIGtFbmR9OwotICBHZW5lcmF0ZVZpZGVvQnVmZmVycyh2aWRlb190aW1lc3RhbXBzKTsKLSAgaW50IHRleHRfdGltZXN0YW1wc19hW10gPSB7MTAyLCAxMDcsIGtFbmR9OwotICBpbnQgdGV4dF90aW1lc3RhbXBzX2JbXSA9IHsxMDQsIGtFbmR9OwotICBHZW5lcmF0ZVRleHRCdWZmZXJzKHRleHRfdGltZXN0YW1wc19hLCB0ZXh0X3RpbWVzdGFtcHNfYik7Ci0gIFZlcmlmeU1lcmdlU3VjY2VzcyhleHBlY3RlZCwgdHJ1ZSk7Ci0KLSAgLy8gQXBwZW5kaW5nIGVtcHR5IGJ1ZmZlcnMgdG8gcHJlLWV4aXN0aW5nIG1lcmdlIHJlc3VsdCBzaG91bGQgc3VjY2VlZCBhbmQgbm90Ci0gIC8vIGNoYW5nZSB0aGUgZXhpc3RpbmcgcmVzdWx0LgotICBDbGVhckJ1ZmZlclF1ZXVlc0J1dEtlZXBBbnlNZXJnZWRCdWZmZXJzKCk7Ci0gIFZlcmlmeU1lcmdlU3VjY2VzcyhleHBlY3RlZCwgdHJ1ZSk7Ci0KLSAgLy8gQnV0IGFwcGVuZGluZyBzb21ldGhpbmcgd2l0aCBhIGxvd2VyIHRpbWVzdGFtcCB0aGFuIHRoZSBsYXN0IHRpbWVzdGFtcAotICAvLyBpbiB0aGUgcHJlLWV4aXN0aW5nIG1lcmdlIHJlc3VsdCBzaG91bGQgZmFpbC4KLSAgaW50IG1vcmVfYXVkaW9fdGltZXN0YW1wc1tdID0gezEwNiwga0VuZH07Ci0gIEdlbmVyYXRlQXVkaW9CdWZmZXJzKG1vcmVfYXVkaW9fdGltZXN0YW1wcyk7Ci0gIFZlcmlmeU1lcmdlRmFpbHVyZSgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3N1YnNhbXBsZV9lbnRyeS5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3Vic2FtcGxlX2VudHJ5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNmQ4MWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc3Vic2FtcGxlX2VudHJ5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfU1VCU0FNUExFX0VOVFJZX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1NVQlNBTVBMRV9FTlRSWV9IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlIENvbW1vbiBFbmNyeXB0aW9uIHNwZWMgcHJvdmlkZXMgZm9yIHN1YnNhbXBsZSBlbmNyeXB0aW9uLCB3aGVyZSBwb3J0aW9ucwotLy8gb2YgYSBzYW1wbGUgYXJlIHNldCBpbiBjbGVhcnRleHQuIEEgU3Vic2FtcGxlRW50cnkgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YKLS8vIGNsZWFyIGFuZCBlbmNyeXB0ZWQgYnl0ZXMgaW4gZWFjaCBzdWJzYW1wbGUuIEZvciBkZWNyeXB0aW9uLCBhbGwgb2YgdGhlCi0vLyBlbmNyeXB0ZWQgYnl0ZXMgaW4gYSBzYW1wbGUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBzaW5nbGUgbG9naWNhbCBzdHJlYW0sCi0vLyByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBkaXZpZGVkIGludG8gc3Vic2FtcGxlcywgYW5kIHRoZSBjbGVhciBieXRlcwotLy8gc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFzIHBhcnQgb2YgZGVjcnlwdGlvbi4gVGhpcyBpcyBsb2dpY2FsbHkgZXF1aXZhbGVudAotLy8gdG8gY29uY2F0ZW5hdGluZyBhbGwgJ2N5cGhlcl9ieXRlcycgcG9ydGlvbnMgb2Ygc3Vic2FtcGxlcywgZGVjcnlwdGluZyB0aGF0Ci0vLyByZXN1bHQsIGFuZCB0aGVuIGNvcHlpbmcgZWFjaCBieXRlIGZyb20gdGhlIGRlY3J5cHRlZCBibG9jayBvdmVyIHRoZQotLy8gcG9zaXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgZW5jcnlwdGVkIGJ5dGUuCi1zdHJ1Y3QgU3Vic2FtcGxlRW50cnkgewotICBTdWJzYW1wbGVFbnRyeSgpIDogY2xlYXJfYnl0ZXMoMCksIGN5cGhlcl9ieXRlcygwKSB7fQotICBTdWJzYW1wbGVFbnRyeSh1aW50MzJfdCBjbGVhcl9ieXRlcywgdWludDMyX3QgY3lwaGVyX2J5dGVzKQotICAgICAgOiBjbGVhcl9ieXRlcyhjbGVhcl9ieXRlcyksIGN5cGhlcl9ieXRlcyhjeXBoZXJfYnl0ZXMpIHt9Ci0gIHVpbnQzMl90IGNsZWFyX2J5dGVzOwotICB1aW50MzJfdCBjeXBoZXJfYnl0ZXM7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9TVUJTQU1QTEVfRU5UUllfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3N1cmZhY2VfbWFuYWdlci5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvc3VyZmFjZV9tYW5hZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjE1OTIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2Uvc3VyZmFjZV9tYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfU1VSRkFDRV9NQU5BR0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1NVUkZBQ0VfTUFOQUdFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi11c2luZyBTdXJmYWNlQ3JlYXRlZENCID0gYmFzZTo6Q2FsbGJhY2s8dm9pZChpbnQpPjsKLXVzaW5nIFJlcXVlc3RTdXJmYWNlQ0IgPSBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IFN1cmZhY2VDcmVhdGVkQ0ImKT47Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBTdXJmYWNlTWFuYWdlciB7Ci0gcHVibGljOgotICBlbnVtIHsga05vU3VyZmFjZUlEID0gLTEgfTsKLQotICBTdXJmYWNlTWFuYWdlcigpIHt9Ci0gIHZpcnR1YWwgflN1cmZhY2VNYW5hZ2VyKCkge30KLQotICAvLyBDcmVhdGUgYSBmdWxsc2NyZWVuIHN1cmZhY2UuIFRoZSBpZCB3aWxsIGJlIHJldHVybmVkIHdpdGgKLSAgLy8gfHN1cmZhY2VfY3JlYXRlZF9jYnwuIElmIHRoaXMgaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSB0aGUgZmlyc3QKLSAgLy8gfHN1cmZhY2VfY3JlYXRlZF9jYnwgaXMgY2FsbGVkLCB0aGUgc3VyZmFjZSB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgbGFzdAotICAvLyBjYWxsZXIuIElmIHRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBmdWxsc2NyZWVuIHN1cmZhY2UgaXMgY3JlYXRlZCwgdGhlCi0gIC8vIGV4aXN0aW5nIHN1cmZhY2Ugd2lsbCBiZSByZXR1cm5lZC4gVGhlIGNsaWVudCBzaG91bGQgZW5zdXJlIHRoYXQgdGhlCi0gIC8vIHByZXZpb3VzIGNvbnN1bWVyIGlzIG5vIGxvbmdlciB1c2luZyB0aGUgc3VyZmFjZS4KLSAgdmlydHVhbCB2b2lkIENyZWF0ZUZ1bGxzY3JlZW5TdXJmYWNlKAotICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgdmlkZW9fbmF0dXJhbF9zaXplLAotICAgICAgY29uc3QgU3VyZmFjZUNyZWF0ZWRDQiYgc3VyZmFjZV9jcmVhdGVkX2NiKSA9IDA7Ci0KLSAgLy8gQ2FsbCB0aGlzIHdoZW4gdGhlIG5hdHVyYWwgc2l6ZSBvZiB0aGUgZnVsbHNjcmVlbiB2aWRlbyBjaGFuZ2VzLiBUaGUKLSAgLy8gc3VyZmFjZSB3aWxsIGJlIHJlc2l6ZWQgdG8gbWF0Y2ggdGhlIGFzcGVjdCByYXRpby4KLSAgdmlydHVhbCB2b2lkIE5hdHVyYWxTaXplQ2hhbmdlZChjb25zdCBtYXRoOjpTaXplJiBzaXplKSA9IDA7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZU1hbmFnZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfU1VSRkFDRV9NQU5BR0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGYxMzE3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0KLSNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfdXRpbC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2UvcGF0aF9zZXJ2aWNlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jb25zdCBiYXNlOjpGaWxlUGF0aDo6Q2hhclR5cGUga1Rlc3REYXRhUGF0aFtdID0KLSAgICBGSUxFX1BBVEhfTElURVJBTCgibWVkaWEvdGVzdC9kYXRhIik7Ci0KLWJhc2U6OkZpbGVQYXRoIEdldFRlc3REYXRhRmlsZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKLSAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoOwotICBDSEVDSyhiYXNlOjpQYXRoU2VydmljZTo6R2V0KGJhc2U6OkRJUl9URVNUX0RBVEEsICZmaWxlX3BhdGgpKTsKLSAgcmV0dXJuIGZpbGVfcGF0aC5BcHBlbmQoR2V0VGVzdERhdGFQYXRoKCkpLkFwcGVuZEFTQ0lJKG5hbWUpOwotfQotCi1iYXNlOjpGaWxlUGF0aCBHZXRUZXN0RGF0YVBhdGgoKSB7IHJldHVybiBiYXNlOjpGaWxlUGF0aChrVGVzdERhdGFQYXRoKTsgfQotCi1zdGQ6OnN0cmluZyBHZXRVUkxRdWVyeVN0cmluZyhjb25zdCBiYXNlOjpTdHJpbmdQYWlycyYgcXVlcnlfcGFyYW1zKSB7Ci0gIHN0ZDo6c3RyaW5nIHF1ZXJ5ID0gIiI7Ci0gIGJhc2U6OlN0cmluZ1BhaXJzOjpjb25zdF9pdGVyYXRvciBpdHIgPSBxdWVyeV9wYXJhbXMuYmVnaW4oKTsKLSAgZm9yICg7IGl0ciAhPSBxdWVyeV9wYXJhbXMuZW5kKCk7ICsraXRyKSB7Ci0gICAgaWYgKGl0ciAhPSBxdWVyeV9wYXJhbXMuYmVnaW4oKSkgcXVlcnkuYXBwZW5kKCImIik7Ci0gICAgcXVlcnkuYXBwZW5kKGl0ci0+Zmlyc3QgKyAiPSIgKyBpdHItPnNlY29uZCk7Ci0gIH0KLSAgcmV0dXJuIHF1ZXJ5OwotfQotCi1zY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IFJlYWRUZXN0RGF0YUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKLSAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoID0gR2V0VGVzdERhdGFGaWxlUGF0aChuYW1lKTsKLQotICBpbnQ2NF90IHRtcCA9IDA7Ci0gIENIRUNLKGJhc2U6OkdldEZpbGVTaXplKGZpbGVfcGF0aCwgJnRtcCkpCi0gICAgICA8PCAiRmFpbGVkIHRvIGdldCBmaWxlIHNpemUgZm9yICciIDw8IG5hbWUgPDwgIiciOwotCi0gIGludCBmaWxlX3NpemUgPSBiYXNlOjpjaGVja2VkX2Nhc3Q8aW50Pih0bXApOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyKG5ldyBEZWNvZGVyQnVmZmVyKGZpbGVfc2l6ZSkpOwotICBDSEVDS19FUShmaWxlX3NpemUsCi0gICAgICAgICAgIGJhc2U6OlJlYWRGaWxlKGZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyLT53cml0YWJsZV9kYXRhKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUpKQotICAgICAgPDwgIkZhaWxlZCB0byByZWFkICciIDw8IG5hbWUgPDwgIiciOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9kYXRhX3V0aWwuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMTlhMmEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9kYXRhX3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfVEVTVF9EQVRBX1VUSUxfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVEVTVF9EQVRBX1VUSUxfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvZmlsZXMvZmlsZV9wYXRoLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgRGVjb2RlckJ1ZmZlcjsKLQotLy8gUmV0dXJucyBhIGZpbGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSBtZWRpYS90ZXN0L2RhdGEgZGlyZWN0b3J5LgotYmFzZTo6RmlsZVBhdGggR2V0VGVzdERhdGFGaWxlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7Ci0KLS8vIFJldHVybnMgcmVsYXRpdmUgcGF0aCBmb3IgdGVzdCBkYXRhIGZvbGRlcjogbWVkaWEvdGVzdC9kYXRhLgotYmFzZTo6RmlsZVBhdGggR2V0VGVzdERhdGFQYXRoKCk7Ci0KLS8vIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBrZXkgdmFsdWUgcXVlcnkgcGFyYW1zIGluIHRoZSBmb3JtIG9mOgotLy8gImtleV8xPXZhbHVlXzEma2V5XzI9dmFsdWUyIgotc3RkOjpzdHJpbmcgR2V0VVJMUXVlcnlTdHJpbmcoY29uc3QgYmFzZTo6U3RyaW5nUGFpcnMmIHF1ZXJ5X3BhcmFtcyk7Ci0KLS8vIFJlYWRzIGEgdGVzdCBmaWxlIGZyb20gbWVkaWEvdGVzdC9kYXRhIGRpcmVjdG9yeSBhbmQgc3RvcmVzIGl0IGluCi0vLyBhIERlY29kZXJCdWZmZXIuICBVc2UgRGVjb2RlckJ1ZmZlciB2cyBEYXRhQnVmZmVyIHRvIGVuc3VyZSBubyBtYXR0ZXIKLS8vIHdoYXQgYSB0ZXN0IGRvZXMsIGl0J3Mgc2FmZSB0byB1c2UgRkZtcGVnIG1ldGhvZHMuCi0vLwotLy8gIHxuYW1lfCAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlLgotLy8gIHxidWZmZXJ8IC0gVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgotc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBSZWFkVGVzdERhdGFGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVEVTVF9EQVRBX1VUSUxfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBhM2RjMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2hlbHBlcnMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5oIgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9waWNrbGUuaCIKLSNpbmNsdWRlICJiYXNlL3J1bl9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS90ZXN0L3Rlc3RfdGltZW91dHMuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJhc2UvdGltZXIvdGltZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpfOwotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFV0aWxpdHkgbW9jayBmb3IgdGVzdGluZyBtZXRob2RzIGV4cGVjdGluZyBDbG9zdXJlcyBhbmQgUGlwZWxpbmVTdGF0dXNDQnMuCi1jbGFzcyBNb2NrQ2FsbGJhY2sgOiBwdWJsaWMgYmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8TW9ja0NhbGxiYWNrPiB7Ci0gcHVibGljOgotICBNb2NrQ2FsbGJhY2soKTsKLSAgTU9DS19NRVRIT0QwKFJ1biwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QxKFJ1bldpdGhCb29sLCB2b2lkKGJvb2wpKTsKLSAgTU9DS19NRVRIT0QxKFJ1bldpdGhTdGF0dXMsIHZvaWQoUGlwZWxpbmVTdGF0dXMpKTsKLQotIHByb3RlY3RlZDoKLSAgZnJpZW5kIGNsYXNzIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPE1vY2tDYWxsYmFjaz47Ci0gIHZpcnR1YWwgfk1vY2tDYWxsYmFjaygpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1vY2tDYWxsYmFjayk7Ci19OwotCi1Nb2NrQ2FsbGJhY2s6Ok1vY2tDYWxsYmFjaygpIHt9Ci1Nb2NrQ2FsbGJhY2s6On5Nb2NrQ2FsbGJhY2soKSB7fQotCi1iYXNlOjpDbG9zdXJlIE5ld0V4cGVjdGVkQ2xvc3VyZSgpIHsKLSAgU3RyaWN0TW9jazxNb2NrQ2FsbGJhY2s+KiBjYWxsYmFjayA9IG5ldyBTdHJpY3RNb2NrPE1vY2tDYWxsYmFjaz4oKTsKLSAgRVhQRUNUX0NBTEwoKmNhbGxiYWNrLCBSdW4oKSk7Ci0gIHJldHVybiBiYXNlOjpCaW5kKCZNb2NrQ2FsbGJhY2s6OlJ1biwgY2FsbGJhY2spOwotfQotCi1iYXNlOjpDYWxsYmFjazx2b2lkKGJvb2wpPiBOZXdFeHBlY3RlZEJvb2xDQihib29sIHN1Y2Nlc3MpIHsKLSAgU3RyaWN0TW9jazxNb2NrQ2FsbGJhY2s+KiBjYWxsYmFjayA9IG5ldyBTdHJpY3RNb2NrPE1vY2tDYWxsYmFjaz4oKTsKLSAgRVhQRUNUX0NBTEwoKmNhbGxiYWNrLCBSdW5XaXRoQm9vbChzdWNjZXNzKSk7Ci0gIHJldHVybiBiYXNlOjpCaW5kKCZNb2NrQ2FsbGJhY2s6OlJ1bldpdGhCb29sLCBjYWxsYmFjayk7Ci19Ci0KLVBpcGVsaW5lU3RhdHVzQ0IgTmV3RXhwZWN0ZWRTdGF0dXNDQihQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKLSAgU3RyaWN0TW9jazxNb2NrQ2FsbGJhY2s+KiBjYWxsYmFjayA9IG5ldyBTdHJpY3RNb2NrPE1vY2tDYWxsYmFjaz4oKTsKLSAgRVhQRUNUX0NBTEwoKmNhbGxiYWNrLCBSdW5XaXRoU3RhdHVzKHN0YXR1cykpOwotICByZXR1cm4gYmFzZTo6QmluZCgmTW9ja0NhbGxiYWNrOjpSdW5XaXRoU3RhdHVzLCBjYWxsYmFjayk7Ci19Ci0KLVdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6V2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50KCkKLSAgICA6IFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudChUZXN0VGltZW91dHM6OmFjdGlvbl90aW1lb3V0KCkpIHt9Ci0KLVdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6V2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50KAotICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lb3V0KQotICAgIDogc2lnbmFsZWRfKGZhbHNlKSwgc3RhdHVzXyhQSVBFTElORV9PSyksIHRpbWVvdXRfKHRpbWVvdXQpIHt9Ci0KLVdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6fldhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudCgpIHsKLSAgRENIRUNLKENhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci19Ci0KLWJhc2U6OkNsb3N1cmUgV2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50OjpHZXRDbG9zdXJlKCkgewotICBEQ0hFQ0soQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIEJpbmRUb0N1cnJlbnRMb29wKAotICAgICAgYmFzZTo6QmluZCgmV2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50OjpPbkNhbGxiYWNrLAotICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBQSVBFTElORV9PSykpOwotfQotCi1QaXBlbGluZVN0YXR1c0NCIFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6R2V0UGlwZWxpbmVTdGF0dXNDQigpIHsKLSAgRENIRUNLKENhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKAotICAgICAgJldhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6T25DYWxsYmFjaywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwotfQotCi12b2lkIFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6UnVuQW5kV2FpdCgpIHsKLSAgRENIRUNLKENhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJ1bkFuZFdhaXRGb3JTdGF0dXMoUElQRUxJTkVfT0spOwotfQotCi12b2lkIFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6UnVuQW5kV2FpdEZvclN0YXR1cygKLSAgICBQaXBlbGluZVN0YXR1cyBleHBlY3RlZCkgewotICBEQ0hFQ0soQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKHNpZ25hbGVkXykgewotICAgIEVYUEVDVF9FUShleHBlY3RlZCwgc3RhdHVzXyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcnVuX2xvb3BfLnJlc2V0KG5ldyBiYXNlOjpSdW5Mb29wKCkpOwotICBiYXNlOjpPbmVTaG90VGltZXIgdGltZXI7Ci0gIHRpbWVyLlN0YXJ0KEZST01fSEVSRSwgdGltZW91dF8sCi0gICAgICAgICAgICAgIGJhc2U6OkJpbmQoJldhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudDo6T25UaW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLQotICBydW5fbG9vcF8tPlJ1bigpOwotICBFWFBFQ1RfVFJVRShzaWduYWxlZF8pOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHN0YXR1c18pOwotICBydW5fbG9vcF8ucmVzZXQoKTsKLX0KLQotdm9pZCBXYWl0YWJsZWJhc2U6Ok1lc3NhZ2VMb29wRXZlbnQ6Ok9uQ2FsbGJhY2soUGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7Ci0gIERDSEVDSyhDYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBzaWduYWxlZF8gPSB0cnVlOwotICBzdGF0dXNfID0gc3RhdHVzOwotCi0gIC8vIHxydW5fbG9vcF98IG1heSBiZSBudWxsIGlmIHRoZSBjYWxsYmFjayBmaXJlcyBiZWZvcmUgUnVuQW5kV2FpdEZvclN0YXR1cygpLgotICBpZiAocnVuX2xvb3BfKSBydW5fbG9vcF8tPlF1aXQoKTsKLX0KLQotdm9pZCBXYWl0YWJsZWJhc2U6Ok1lc3NhZ2VMb29wRXZlbnQ6Ok9uVGltZW91dCgpIHsKLSAgRENIRUNLKENhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEFERF9GQUlMVVJFKCkgPDwgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtZXNzYWdlIGxvb3AgdG8gcXVpdCI7Ci0gIHJ1bl9sb29wXy0+UXVpdCgpOwotfQotCi1zdGF0aWMgVmlkZW9EZWNvZGVyQ29uZmlnIEdldFRlc3RDb25maWcoVmlkZW9Db2RlYyBjb2RlYywgbWF0aDo6U2l6ZSBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZW5jcnlwdGVkKSB7Ci0gIG1hdGg6OlJlY3QgdmlzaWJsZV9yZWN0KGNvZGVkX3NpemUud2lkdGgoKSwgY29kZWRfc2l6ZS5oZWlnaHQoKSk7Ci0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplID0gY29kZWRfc2l6ZTsKLQotICByZXR1cm4gVmlkZW9EZWNvZGVyQ29uZmlnKAotICAgICAgY29kZWMsIFZJREVPX0NPREVDX1BST0ZJTEVfVU5LTk9XTiwgUElYRUxfRk9STUFUX1lWMTIsCi0gICAgICBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsCi0gICAgICBFbXB0eUV4dHJhRGF0YSgpLAotICAgICAgaXNfZW5jcnlwdGVkID8gQWVzQ3RyRW5jcnlwdGlvblNjaGVtZSgpIDogVW5lbmNyeXB0ZWQoKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBtYXRoOjpTaXplIGtOb3JtYWxTaXplKDMyMCwgMjQwKTsKLXN0YXRpYyBjb25zdCBtYXRoOjpTaXplIGtMYXJnZVNpemUoNjQwLCA0ODApOwotCi0vLyBzdGF0aWMKLVZpZGVvRGVjb2RlckNvbmZpZyBUZXN0VmlkZW9Db25maWc6OkludmFsaWQoKSB7Ci0gIHJldHVybiBHZXRUZXN0Q29uZmlnKGtVbmtub3duVmlkZW9Db2RlYywga05vcm1hbFNpemUsIGZhbHNlKTsKLX0KLQotLy8gc3RhdGljCi1WaWRlb0RlY29kZXJDb25maWcgVGVzdFZpZGVvQ29uZmlnOjpOb3JtYWwoKSB7Ci0gIHJldHVybiBHZXRUZXN0Q29uZmlnKGtDb2RlY1ZQOCwga05vcm1hbFNpemUsIGZhbHNlKTsKLX0KLQotLy8gc3RhdGljCi1WaWRlb0RlY29kZXJDb25maWcgVGVzdFZpZGVvQ29uZmlnOjpOb3JtYWxFbmNyeXB0ZWQoKSB7Ci0gIHJldHVybiBHZXRUZXN0Q29uZmlnKGtDb2RlY1ZQOCwga05vcm1hbFNpemUsIHRydWUpOwotfQotCi0vLyBzdGF0aWMKLVZpZGVvRGVjb2RlckNvbmZpZyBUZXN0VmlkZW9Db25maWc6OkxhcmdlKCkgewotICByZXR1cm4gR2V0VGVzdENvbmZpZyhrQ29kZWNWUDgsIGtMYXJnZVNpemUsIGZhbHNlKTsKLX0KLQotLy8gc3RhdGljCi1WaWRlb0RlY29kZXJDb25maWcgVGVzdFZpZGVvQ29uZmlnOjpMYXJnZUVuY3J5cHRlZCgpIHsKLSAgcmV0dXJuIEdldFRlc3RDb25maWcoa0NvZGVjVlA4LCBrTGFyZ2VTaXplLCB0cnVlKTsKLX0KLQotLy8gc3RhdGljCi1tYXRoOjpTaXplIFRlc3RWaWRlb0NvbmZpZzo6Tm9ybWFsQ29kZWRTaXplKCkgeyByZXR1cm4ga05vcm1hbFNpemU7IH0KLQotLy8gc3RhdGljCi1tYXRoOjpTaXplIFRlc3RWaWRlb0NvbmZpZzo6TGFyZ2VDb2RlZFNpemUoKSB7IHJldHVybiBrTGFyZ2VTaXplOyB9Ci0KLS8vIHN0YXRpYwotQXVkaW9QYXJhbWV0ZXJzIFRlc3RBdWRpb1BhcmFtZXRlcnM6Ok5vcm1hbCgpIHsKLSAgcmV0dXJuIEF1ZGlvUGFyYW1ldGVycyhBdWRpb1BhcmFtZXRlcnM6OkFVRElPX1BDTV9MT1dfTEFURU5DWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDQ4MDAwLCAxNiwgMjA0OCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gTWFrZUF1ZGlvQnVmZmVyKFNhbXBsZUZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbExheW91dCBjaGFubmVsX2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2hhbm5lbF9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGUsIFQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCBpbmNyZW1lbnQsIHNpemVfdCBmcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICBjb25zdCBzaXplX3QgY2hhbm5lbHMgPSBDaGFubmVsTGF5b3V0VG9DaGFubmVsQ291bnQoY2hhbm5lbF9sYXlvdXQpOwotICBzY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBvdXRwdXQgPSBBdWRpb0J1ZmZlcjo6Q3JlYXRlQnVmZmVyKAotICAgICAgZm9ybWF0LCBjaGFubmVsX2xheW91dCwgc3RhdGljX2Nhc3Q8aW50PihjaGFubmVsX2NvdW50KSwgc2FtcGxlX3JhdGUsCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lcykpOwotICBvdXRwdXQtPnNldF90aW1lc3RhbXAodGltZXN0YW1wKTsKLQotICBjb25zdCBib29sIGlzX3BsYW5hciA9Ci0gICAgICBmb3JtYXQgPT0ga1NhbXBsZUZvcm1hdFBsYW5hclMxNiB8fCBmb3JtYXQgPT0ga1NhbXBsZUZvcm1hdFBsYW5hckYzMjsKLQotICAvLyBWYWx1ZXMgaW4gY2hhbm5lbCAwIHdpbGwgYmU6Ci0gIC8vICAgc3RhcnQKLSAgLy8gICBzdGFydCArIGluY3JlbWVudAotICAvLyAgIHN0YXJ0ICsgMiAqIGluY3JlbWVudCwgLi4uCi0gIC8vIFdoaWxlLCB2YWx1ZXMgaW4gY2hhbm5lbCAxIHdpbGwgYmU6Ci0gIC8vICAgc3RhcnQgKyBmcmFtZXMgKiBpbmNyZW1lbnQKLSAgLy8gICBzdGFydCArIChmcmFtZXMgKyAxKSAqIGluY3JlbWVudAotICAvLyAgIHN0YXJ0ICsgKGZyYW1lcyArIDIpICogaW5jcmVtZW50LCAuLi4KLSAgZm9yIChzaXplX3QgY2ggPSAwOyBjaCA8IGNoYW5uZWxzOyArK2NoKSB7Ci0gICAgVCogYnVmZmVyID0KLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0LT5jaGFubmVsX2RhdGEoKVtpc19wbGFuYXIgPyBjaCA6IDBdKTsKLSAgICBjb25zdCBUIHYgPSBzdGF0aWNfY2FzdDxUPihzdGFydCArIGNoICogZnJhbWVzICogaW5jcmVtZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7Ci0gICAgICBidWZmZXJbaXNfcGxhbmFyID8gaSA6IGNoICsgaSAqIGNoYW5uZWxzXSA9Ci0gICAgICAgICAgc3RhdGljX2Nhc3Q8VD4odiArIGkgKiBpbmNyZW1lbnQpOwotICAgIH0KLSAgfQotICByZXR1cm4gb3V0cHV0OwotfQotCi0vLyBJbnN0YW50aWF0ZSBhbGwgdGhlIHR5cGVzIG9mIE1ha2VBdWRpb0J1ZmZlcigpIGFuZAotLy8gTWFrZUF1ZGlvQnVmZmVyKCkgbmVlZGVkLgotI2RlZmluZSBERUZJTkVfTUFLRV9BVURJT19CVUZGRVJfSU5TVEFOQ0UodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgdGVtcGxhdGUgc2NvcGVkX3JlZnB0cjxBdWRpb0J1ZmZlcj4gTWFrZUF1ZGlvQnVmZmVyPHR5cGU+KCAgICAgICAgICAgICAgICAgICBcCi0gICAgICBTYW1wbGVGb3JtYXQgZm9ybWF0LCBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LCBzaXplX3QgY2hhbm5lbF9jb3VudCwgXAotICAgICAgaW50IHNhbXBsZV9yYXRlLCB0eXBlIHN0YXJ0LCB0eXBlIGluY3JlbWVudCwgc2l6ZV90IGZyYW1lcywgICAgICAgICAgICAgIFwKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBzdGFydF90aW1lKQotREVGSU5FX01BS0VfQVVESU9fQlVGRkVSX0lOU1RBTkNFKHVpbnQ4X3QpOwotREVGSU5FX01BS0VfQVVESU9fQlVGRkVSX0lOU1RBTkNFKGludDE2X3QpOwotREVGSU5FX01BS0VfQVVESU9fQlVGRkVSX0lOU1RBTkNFKGludDMyX3QpOwotREVGSU5FX01BS0VfQVVESU9fQlVGRkVSX0lOU1RBTkNFKGZsb2F0KTsKLQotc3RhdGljIGNvbnN0IGNoYXIga0Zha2VWaWRlb0J1ZmZlckhlYWRlcltdID0gIkZha2VWaWRlb0J1ZmZlckZvclRlc3QiOwotCi1zY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IENyZWF0ZUZha2VWaWRlb0J1ZmZlckZvclRlc3QoCi0gICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAsCi0gICAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSB7Ci0gIGJhc2U6OlBpY2tsZSBwaWNrbGU7Ci0gIHBpY2tsZS5Xcml0ZVN0cmluZyhrRmFrZVZpZGVvQnVmZmVySGVhZGVyKTsKLSAgcGlja2xlLldyaXRlSW50KGNvbmZpZy5jb2RlZF9zaXplKCkud2lkdGgoKSk7Ci0gIHBpY2tsZS5Xcml0ZUludChjb25maWcuY29kZWRfc2l6ZSgpLmhlaWdodCgpKTsKLSAgcGlja2xlLldyaXRlSW50NjQodGltZXN0YW1wLkluTWlsbGlzZWNvbmRzKCkpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIERlY29kZXJCdWZmZXI6OkNvcHlGcm9tKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaWNrbGUuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocGlja2xlLnNpemUoKSkpOwotICBEQ0hFQ0soYnVmZmVyKTsKLSAgYnVmZmVyLT5zZXRfdGltZXN0YW1wKHRpbWVzdGFtcCk7Ci0gIGJ1ZmZlci0+c2V0X2R1cmF0aW9uKGR1cmF0aW9uKTsKLSAgYnVmZmVyLT5zZXRfaXNfa2V5X2ZyYW1lKHRydWUpOwotCi0gIHJldHVybiBidWZmZXI7Ci19Ci0KLWJvb2wgVmVyaWZ5RmFrZVZpZGVvQnVmZmVyRm9yVGVzdChjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSAgLy8gQ2hlY2sgaWYgdGhlIGlucHV0IHxidWZmZXJ8IG1hdGNoZXMgdGhlIHxjb25maWd8LgotICBiYXNlOjpQaWNrbGVJdGVyYXRvciBwaWNrbGUoCi0gICAgICBiYXNlOjpQaWNrbGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpLAotICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYnVmZmVyLT5kYXRhX3NpemUoKSkpKTsKLSAgc3RkOjpzdHJpbmcgaGVhZGVyOwotICBpbnQgd2lkdGggPSAwOwotICBpbnQgaGVpZ2h0ID0gMDsKLSAgYm9vbCBzdWNjZXNzID0gcGlja2xlLlJlYWRTdHJpbmcoJmhlYWRlcikgJiYgcGlja2xlLlJlYWRJbnQoJndpZHRoKSAmJgotICAgICAgICAgICAgICAgICBwaWNrbGUuUmVhZEludCgmaGVpZ2h0KTsKLSAgcmV0dXJuIChzdWNjZXNzICYmIGhlYWRlciA9PSBrRmFrZVZpZGVvQnVmZmVySGVhZGVyICYmCi0gICAgICAgICAgd2lkdGggPT0gY29uZmlnLmNvZGVkX3NpemUoKS53aWR0aCgpICYmCi0gICAgICAgICAgaGVpZ2h0ID09IGNvbmZpZy5jb2RlZF9zaXplKCkuaGVpZ2h0KCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9oZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNTJkMjkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9oZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9URVNUX0hFTFBFUlNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVEVTVF9IRUxQRVJTX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJiYXNlL3RocmVhZGluZy9ub25fdGhyZWFkX3NhZmUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fcGFyYW1ldGVycy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2FtcGxlX2Zvcm1hdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9nbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLmgiCi0KLW5hbWVzcGFjZSBiYXNlIHsKLWNsYXNzIFJ1bkxvb3A7Ci1jbGFzcyBUaW1lRGVsdGE7Ci19ICAvLyBuYW1lc3BhY2UgYmFzZQotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgRGVjb2RlckJ1ZmZlcjsKLQotLy8gUmV0dXJuIGEgY2FsbGJhY2sgdGhhdCBleHBlY3RzIHRvIGJlIHJ1biBvbmNlLgotYmFzZTo6Q2xvc3VyZSBOZXdFeHBlY3RlZENsb3N1cmUoKTsKLWJhc2U6OkNhbGxiYWNrPHZvaWQoYm9vbCk+IE5ld0V4cGVjdGVkQm9vbENCKGJvb2wgc3VjY2Vzcyk7Ci1QaXBlbGluZVN0YXR1c0NCIE5ld0V4cGVjdGVkU3RhdHVzQ0IoUGlwZWxpbmVTdGF0dXMgc3RhdHVzKTsKLQotLy8gSGVscGVyIGNsYXNzIGZvciBydW5uaW5nIGEgbWVzc2FnZSBsb29wIHVudGlsIGEgY2FsbGJhY2sgaGFzIHJ1bi4gVXNlZnVsIGZvcgotLy8gdGVzdGluZyBjbGFzc2VzIHRoYXQgcnVuIG9uIG1vcmUgdGhhbiBhIHNpbmdsZSB0aHJlYWQuCi0vLwotLy8gRXZlbnRzIGFyZSBpbnRlbmRlZCBmb3Igc2luZ2xlIHVzZSBhbmQgY2Fubm90IGJlIHJlc2V0LgotY2xhc3MgV2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50IDogcHVibGljIGJhc2U6Ok5vblRocmVhZFNhZmUgewotIHB1YmxpYzoKLSAgV2FpdGFibGViYXNlOjpNZXNzYWdlTG9vcEV2ZW50KCk7Ci0gIGV4cGxpY2l0IFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudChiYXNlOjpUaW1lRGVsdGEgdGltZW91dCk7Ci0gIH5XYWl0YWJsZWJhc2U6Ok1lc3NhZ2VMb29wRXZlbnQoKTsKLQotICAvLyBSZXR1cm5zIGEgdGhyZWFkLXNhZmUgY2xvc3VyZSB0aGF0IHdpbGwgc2lnbmFsIHx0aGlzfCB3aGVuIGV4ZWN1dGVkLgotICBiYXNlOjpDbG9zdXJlIEdldENsb3N1cmUoKTsKLSAgUGlwZWxpbmVTdGF0dXNDQiBHZXRQaXBlbGluZVN0YXR1c0NCKCk7Ci0KLSAgLy8gUnVucyB0aGUgY3VycmVudCBtZXNzYWdlIGxvb3AgdW50aWwgfHRoaXN8IGhhcyBiZWVuIHNpZ25hbGVkLgotICAvLwotICAvLyBGYWlscyB0aGUgdGVzdCBpZiB0aGUgdGltZW91dCBpcyByZWFjaGVkLgotICB2b2lkIFJ1bkFuZFdhaXQoKTsKLQotICAvLyBSdW5zIHRoZSBjdXJyZW50IG1lc3NhZ2UgbG9vcCB1bnRpbCB8dGhpc3wgaGFzIGJlZW4gc2lnbmFsZWQgYW5kIGFzc2VydHMKLSAgLy8gdGhhdCB0aGUgfGV4cGVjdGVkfCBzdGF0dXMgd2FzIHJlY2VpdmVkLgotICAvLwotICAvLyBGYWlscyB0aGUgdGVzdCBpZiB0aGUgdGltZW91dCBpcyByZWFjaGVkLgotICB2b2lkIFJ1bkFuZFdhaXRGb3JTdGF0dXMoUGlwZWxpbmVTdGF0dXMgZXhwZWN0ZWQpOwotCi0gIGJvb2wgaXNfc2lnbmFsZWQoKSBjb25zdCB7IHJldHVybiBzaWduYWxlZF87IH0KLQotIHByaXZhdGU6Ci0gIHZvaWQgT25DYWxsYmFjayhQaXBlbGluZVN0YXR1cyBzdGF0dXMpOwotICB2b2lkIE9uVGltZW91dCgpOwotCi0gIGJvb2wgc2lnbmFsZWRfOwotICBQaXBlbGluZVN0YXR1cyBzdGF0dXNfOwotICBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6UnVuTG9vcD4gcnVuX2xvb3BfOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgdGltZW91dF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdhaXRhYmxlYmFzZTo6TWVzc2FnZUxvb3BFdmVudCk7Ci19OwotCi0vLyBQcm92aWRlcyBwcmUtY2FubmVkIFZpZGVvRGVjb2RlckNvbmZpZy4gVGhlc2UgdHlwZXMgYXJlIHVzZWQgZm9yIHRlc3RzIHRoYXQKLS8vIGRvbid0IGNhcmUgYWJvdXQgZGV0YWlsZWQgcGFyYW1ldGVycyBvZiB0aGUgY29uZmlnLgotY2xhc3MgVGVzdFZpZGVvQ29uZmlnIHsKLSBwdWJsaWM6Ci0gIC8vIFJldHVybnMgYSBjb25maWd1cmF0aW9uIHRoYXQgaXMgaW52YWxpZC4KLSAgc3RhdGljIFZpZGVvRGVjb2RlckNvbmZpZyBJbnZhbGlkKCk7Ci0KLSAgc3RhdGljIFZpZGVvRGVjb2RlckNvbmZpZyBOb3JtYWwoKTsKLSAgc3RhdGljIFZpZGVvRGVjb2RlckNvbmZpZyBOb3JtYWxFbmNyeXB0ZWQoKTsKLQotICAvLyBSZXR1cm5zIGEgY29uZmlndXJhdGlvbiB0aGF0IGlzIGxhcmdlciBpbiBkaW1lbnNpb25zIHRoYW4gTm9ybWFsKCkuCi0gIHN0YXRpYyBWaWRlb0RlY29kZXJDb25maWcgTGFyZ2UoKTsKLSAgc3RhdGljIFZpZGVvRGVjb2RlckNvbmZpZyBMYXJnZUVuY3J5cHRlZCgpOwotCi0gIC8vIFJldHVybnMgY29kZWQgc2l6ZSBmb3IgTm9ybWFsIGFuZCBMYXJnZSBjb25maWcuCi0gIHN0YXRpYyBtYXRoOjpTaXplIE5vcm1hbENvZGVkU2l6ZSgpOwotICBzdGF0aWMgbWF0aDo6U2l6ZSBMYXJnZUNvZGVkU2l6ZSgpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRlc3RWaWRlb0NvbmZpZyk7Ci19OwotCi0vLyBQcm92aWRlcyBwcmUtY2FubmVkIEF1ZGlvUGFyYW1ldGVycyBvYmplY3RzLgotY2xhc3MgVGVzdEF1ZGlvUGFyYW1ldGVycyB7Ci0gcHVibGljOgotICBzdGF0aWMgQXVkaW9QYXJhbWV0ZXJzIE5vcm1hbCgpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRlc3RBdWRpb1BhcmFtZXRlcnMpOwotfTsKLQotLy8gQ3JlYXRlIGFuIEF1ZGlvQnVmZmVyIGNvbnRhaW5pbmcgfGZyYW1lc3wgZnJhbWVzIG9mIGRhdGEsIHdoZXJlIGVhY2ggc2FtcGxlCi0vLyBpcyBvZiB0eXBlIFQuICB8c3RhcnR8IGFuZCB8aW5jcmVtZW50fCBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZXMgZm9yIHRoZQotLy8gc2FtcGxlcywgd2hpY2ggYXJlIGNyZWF0ZWQgaW4gY2hhbm5lbCBvcmRlci4gIFRoZSB2YWx1ZSBmb3IgZnJhbWUgYW5kIGNoYW5uZWwKLS8vIGlzIGRldGVybWluZWQgYnk6Ci0vLwotLy8gICB8c3RhcnR8ICsgfGNoYW5uZWx8ICogfGZyYW1lc3wgKiB8aW5jcmVtZW50fCArIGluZGV4ICogfGluY3JlbWVudHwKLS8vCi0vLyBFLmcuLCBmb3IgYSBzdGVyZW8gYnVmZmVyIHRoZSB2YWx1ZXMgaW4gY2hhbm5lbCAwIHdpbGwgYmU6Ci0vLyAgIHN0YXJ0Ci0vLyAgIHN0YXJ0ICsgaW5jcmVtZW50Ci0vLyAgIHN0YXJ0ICsgMiAqIGluY3JlbWVudCwgLi4uCi0vLwotLy8gV2hpbGUsIHZhbHVlcyBpbiBjaGFubmVsIDEgd2lsbCBiZToKLS8vICAgc3RhcnQgKyBmcmFtZXMgKiBpbmNyZW1lbnQKLS8vICAgc3RhcnQgKyAoZnJhbWVzICsgMSkgKiBpbmNyZW1lbnQKLS8vICAgc3RhcnQgKyAoZnJhbWVzICsgMikgKiBpbmNyZW1lbnQsIC4uLgotLy8KLS8vIHxzdGFydF90aW1lfCB3aWxsIGJlIHVzZWQgYXMgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZSBzYW1wbGVzLgotdGVtcGxhdGUgPGNsYXNzIFQ+Ci1zY29wZWRfcmVmcHRyPEF1ZGlvQnVmZmVyPiBNYWtlQXVkaW9CdWZmZXIoU2FtcGxlRm9ybWF0IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjaGFubmVsX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZSwgVCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUIGluY3JlbWVudCwgc2l6ZV90IGZyYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKTsKLQotLy8gQ3JlYXRlIGEgZmFrZSB2aWRlbyBEZWNvZGVyQnVmZmVyIGZvciB0ZXN0aW5nIHB1cnBvc2UuIFRoZSBidWZmZXIgY29udGFpbnMKLS8vIHBhcnQgb2YgdmlkZW8gZGVjb2RlciBjb25maWcgaW5mbyBlbWJlZGRlZCBzbyB0aGF0IHRoZSB0ZXN0aW5nIGNvZGUgY2FuIGRvCi0vLyBzb21lIHNhbml0eSBjaGVjay4KLXNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gQ3JlYXRlRmFrZVZpZGVvQnVmZmVyRm9yVGVzdCgKLSAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGNvbmZpZywgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCwKLSAgICBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24pOwotCi0vLyBWZXJpZnkgaWYgYSBmYWtlIHZpZGVvIERlY29kZXJCdWZmZXIgaXMgdmFsaWQuCi1ib29sIFZlcmlmeUZha2VWaWRlb0J1ZmZlckZvclRlc3QoY29uc3Qgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiYgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKTsKLQotTUFUQ0hFUl9QKEhhc1RpbWVzdGFtcCwgdGltZXN0YW1wX2luX21zLCAiIikgewotICByZXR1cm4gYXJnLmdldCgpICYmICFhcmctPmVuZF9vZl9zdHJlYW0oKSAmJgotICAgICAgICAgYXJnLT50aW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpID09IHRpbWVzdGFtcF9pbl9tczsKLX0KLQotTUFUQ0hFUihJc0VuZE9mU3RyZWFtLCAiIikgeyByZXR1cm4gYXJnLmdldCgpICYmIGFyZy0+ZW5kX29mX3N0cmVhbSgpOyB9Ci0KLU1BVENIRVJfUChTZWdtZW50TWlzc2luZ0ZyYW1lcywgdHJhY2tfaWQsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJNZWRpYSBzZWdtZW50IGRpZCBub3QgY29udGFpbiBhbnkgY29kZWQgZnJhbWVzIGZvciB0cmFjayAiICsKLSAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHRyYWNrX2lkKSk7Ci19Ci0KLU1BVENIRVIoU3RyZWFtUGFyc2luZ0ZhaWxlZCwgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJBcHBlbmQ6IHN0cmVhbSBwYXJzaW5nIGZhaWxlZC4iKTsKLX0KLQotTUFUQ0hFUl9QKEZvdW5kU3RyZWFtLCBzdHJlYW1fdHlwZV9zdHJpbmcsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICAgICAgICAgYXJnLCAiZm91bmRfIiArIHN0ZDo6c3RyaW5nKHN0cmVhbV90eXBlX3N0cmluZykgKyAiX3N0cmVhbSIpICYmCi0gICAgICAgICBDT05UQUlOU19TVFJJTkcoYXJnLCAidHJ1ZSIpOwotfQotCi1NQVRDSEVSX1AyKENvZGVjTmFtZSwgc3RyZWFtX3R5cGVfc3RyaW5nLCBjb2RlY19zdHJpbmcsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHN0cmVhbV90eXBlX3N0cmluZykgKyAiX2NvZGVjX25hbWUiKSAmJgotICAgICAgICAgQ09OVEFJTlNfU1RSSU5HKGFyZywgc3RkOjpzdHJpbmcoY29kZWNfc3RyaW5nKSk7Ci19Ci0KLU1BVENIRVJfUDIoSW5pdFNlZ21lbnRNaXNtYXRjaGVzTWltZVR5cGUsIHN0cmVhbV90eXBlLCBjb2RlY19uYW1lLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgc3RkOjpzdHJpbmcoc3RyZWFtX3R5cGUpICsgIiBzdHJlYW0gY29kZWMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoY29kZWNfbmFtZSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG9lc24ndCBtYXRjaCBTb3VyY2VCdWZmZXIgY29kZWNzLiIpOwotfQotCi1NQVRDSEVSX1AoSW5pdFNlZ21lbnRNaXNzZXNFeHBlY3RlZFRyYWNrLCBtaXNzaW5nX2NvZGVjLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIkluaXRpYWxpemF0aW9uIHNlZ21lbnQgbWlzc2VzIGV4cGVjdGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKG1pc3NpbmdfY29kZWMpICsgIiB0cmFjay4iKTsKLX0KLQotTUFUQ0hFUl9QMihVbmV4cGVjdGVkVHJhY2ssIHRyYWNrX3R5cGUsIGlkLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgc3RkOjpzdHJpbmcoIkdvdCB1bmV4cGVjdGVkICIpICsgdHJhY2tfdHlwZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0cmFjayB0cmFja19pZD0iICsgaWQpOwotfQotCi1NQVRDSEVSX1AyKEdlbmVyYXRlZFNwbGljZSwgZHVyYXRpb25fbWljcm9zZWNvbmRzLCB0aW1lX21pY3Jvc2Vjb25kcywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJHZW5lcmF0ZWQgc3BsaWNlIG9mIG92ZXJsYXAgZHVyYXRpb24gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6SW50VG9TdHJpbmcoZHVyYXRpb25fbWljcm9zZWNvbmRzKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzIGludG8gbmV3IGJ1ZmZlciBhdCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpJbnRUb1N0cmluZyh0aW1lX21pY3Jvc2Vjb25kcykgKyAidXMuIik7Ci19Ci0KLU1BVENIRVJfUDIoU2tpcHBpbmdTcGxpY2VBdE9yQmVmb3JlLCBuZXdfbWljcm9zZWNvbmRzLCBleGlzdGluZ19taWNyb3NlY29uZHMsCi0gICAgICAgICAgICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogZmlyc3QgbmV3IGJ1ZmZlciBhdCAiICsKLSAgICAgICAgICAgICAgIGJhc2U6OkludFRvU3RyaW5nKG5ld19taWNyb3NlY29uZHMpICsKLSAgICAgICAgICAgICAgICJ1cyBiZWdpbnMgYXQgb3IgYmVmb3JlIGV4aXN0aW5nIGJ1ZmZlciBhdCAiICsKLSAgICAgICAgICAgICAgIGJhc2U6OkludFRvU3RyaW5nKGV4aXN0aW5nX21pY3Jvc2Vjb25kcykgKyAidXMuIik7Ci19Ci0KLU1BVENIRVJfUChTa2lwcGluZ1NwbGljZUFscmVhZHlTcGxpY2VkLCB0aW1lX21pY3Jvc2Vjb25kcywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORygKLSAgICAgIGFyZywgIlNraXBwaW5nIHNwbGljZSBmcmFtZSBnZW5lcmF0aW9uOiBvdmVybGFwcGVkIGJ1ZmZlcnMgYXQgIiArCi0gICAgICAgICAgICAgICBiYXNlOjpJbnRUb1N0cmluZyh0aW1lX21pY3Jvc2Vjb25kcykgKwotICAgICAgICAgICAgICAgInVzIGFyZSBpbiBhIHByZXZpb3VzbHkgYnVmZmVyZWQgc3BsaWNlLiIpOwotfQotCi1NQVRDSEVSX1AoV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQsIGVzdGltYXRlZF9kdXJhdGlvbl9tcywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJFc3RpbWF0aW5nIFdlYk0gYmxvY2sgZHVyYXRpb24gdG8gYmUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6SW50VG9TdHJpbmcoZXN0aW1hdGVkX2R1cmF0aW9uX21zKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zIGZvciB0aGUgbGFzdCAoU2ltcGxlKUJsb2NrIGluIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNsdXN0ZXIgZm9yIHRoaXMgVHJhY2suIFVzZSBCbG9ja0dyb3VwcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggQmxvY2tEdXJhdGlvbnMgYXQgdGhlIGVuZCBvZiBlYWNoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhY2sgaW4gYSBDbHVzdGVyIHRvIGF2b2lkIGVzdGltYXRpb24uIik7Ci19Ci0KLU1BVENIRVJfUChXZWJNTmVnYXRpdmVUaW1lY29kZU9mZnNldCwgdGltZWNvZGVfc3RyaW5nLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIkdvdCBhIGJsb2NrIHdpdGggbmVnYXRpdmUgdGltZWNvZGUgb2Zmc2V0ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKHRpbWVjb2RlX3N0cmluZykpOwotfQotCi1NQVRDSEVSKFdlYk1PdXRPZk9yZGVyVGltZWNvZGUsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJHb3QgYSBibG9jayB3aXRoIGEgdGltZWNvZGUgYmVmb3JlIHRoZSBwcmV2aW91cyBibG9jay4iKTsKLX0KLQotTUFUQ0hFUihXZWJNQ2x1c3RlckJlZm9yZUZpcnN0SW5mbywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJGb3VuZCBDbHVzdGVyIGVsZW1lbnQgYmVmb3JlIEluZm8uIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1RFU1RfSEVMUEVSU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9yYW5kb20uaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfcmFuZG9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YWI0MDYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9yYW5kb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9URVNUX1JBTkRPTV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9URVNUX1JBTkRPTV9IXwotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLS8vIFZhc3RseSBzaW1wbGlmaWVkIEFDTSByYW5kb20gY2xhc3MgbWVhbnQgdG8gb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLgotLy8gVGhpcyBjbGFzcyBpcyBtZWFudCB0byBnZW5lcmF0ZSBwcmVkaWN0YWJsZSBzZXF1ZW5jZXMgb2YgcHNldWRvcmFuZG9tCi0vLyBudW1iZXJzLCB1bmxpa2UgdGhlIGNsYXNzZXMgaW4gYmFzZS9yYW5kX3V0aWwuaCB3aGljaCBhcmUgbWVhbnQgdG8gZ2VuZXJhdGUKLS8vIHVucHJlZGljdGFibGUgc2VxdWVuY2VzLgotLy8gU2VlCi0vLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3N6bC9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy91dGlsaXRpZXMvYWNtcmFuZG9tLmgKLS8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFRlc3RSYW5kb20gewotIHB1YmxpYzoKLSAgZXhwbGljaXQgVGVzdFJhbmRvbSh1aW50MzJfdCBzZWVkKSB7Ci0gICAgc2VlZF8gPSBzZWVkICYgMHg3ZmZmZmZmZjsgIC8vIG1ha2UgdGhpcyBhIG5vbi1uZWdhdGl2ZSBudW1iZXIKLSAgICBpZiAoc2VlZF8gPT0gMCB8fCBzZWVkXyA9PSBNKSB7Ci0gICAgICBzZWVkXyA9IDE7Ci0gICAgfQotICB9Ci0KLSAgaW50MzJfdCBSYW5kKCkgewotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBBID0gMTY4MDc7ICAvLyBiaXRzIDE0LCA4LCA3LCA1LCAyLCAxLCAwCi0gICAgc2VlZF8gPSBzdGF0aWNfY2FzdDxpbnQzMl90Pigoc2VlZF8gKiBBKSAlIE0pOwotICAgIENIRUNLX0dUKHNlZWRfLCAwKTsKLSAgICByZXR1cm4gc2VlZF87Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0YXRpYyBjb25zdCB1aW50NjRfdCBNID0gMjE0NzQ4MzY0N0w7ICAvLyAyXjMyLTEKLSAgaW50MzJfdCBzZWVkXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1RFU1RfUkFORE9NX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X2N1ZS5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfY3VlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmExNmJlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfY3VlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9jdWUuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1UZXh0Q3VlOjpUZXh0Q3VlKGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpUaW1lRGVsdGEmIGR1cmF0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgaWQsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5ncywgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpCi0gICAgOiB0aW1lc3RhbXBfKHRpbWVzdGFtcCksCi0gICAgICBkdXJhdGlvbl8oZHVyYXRpb24pLAotICAgICAgaWRfKGlkKSwKLSAgICAgIHNldHRpbmdzXyhzZXR0aW5ncyksCi0gICAgICB0ZXh0Xyh0ZXh0KSB7fQotCi1UZXh0Q3VlOjp+VGV4dEN1ZSgpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9jdWUuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfY3VlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZTRlZTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9jdWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9URVhUX0NVRV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9URVhUX0NVRV9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEEgdGV4dCBidWZmZXIgdG8gY2FycnkgdGhlIGNvbXBvbmVudHMgb2YgYSB0ZXh0IHRyYWNrIGN1ZS4KLWNsYXNzIE1FRElBX0VYUE9SVCBUZXh0Q3VlIDogcHVibGljIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPFRleHRDdWU+IHsKLSBwdWJsaWM6Ci0gIFRleHRDdWUoY29uc3QgYmFzZTo6VGltZURlbHRhJiB0aW1lc3RhbXAsIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZHVyYXRpb24sCi0gICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3MsCi0gICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRleHQpOwotCi0gIC8vIEFjY2VzcyB0byBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLgotICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gdGltZXN0YW1wXzsgfQotICBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBkdXJhdGlvbl87IH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gaWRfOyB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIHNldHRpbmdzXzsgfQotICBjb25zdCBzdGQ6OnN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRleHRfOyB9Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgYmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8VGV4dEN1ZT47Ci0gIH5UZXh0Q3VlKCk7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbl87Ci0gIHN0ZDo6c3RyaW5nIGlkXzsKLSAgc3RkOjpzdHJpbmcgc2V0dGluZ3NfOwotICBzdGQ6OnN0cmluZyB0ZXh0XzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVGV4dEN1ZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9URVhUX0NVRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9yYW5nZXMuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlcy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjMTc0Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlcy5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1UZXh0UmFuZ2VzOjpUZXh0UmFuZ2VzKCkgeyBSZXNldCgpOyB9Ci0KLVRleHRSYW5nZXM6On5UZXh0UmFuZ2VzKCkge30KLQotdm9pZCBUZXh0UmFuZ2VzOjpSZXNldCgpIHsgY3Vycl9yYW5nZV9pdHJfID0gcmFuZ2VfbWFwXy5lbmQoKTsgfQotCi1ib29sIFRleHRSYW5nZXM6OkFkZEN1ZShiYXNlOjpUaW1lRGVsdGEgc3RhcnRfdGltZSkgewotICB0eXBlZGVmIFJhbmdlTWFwOjppdGVyYXRvciBJdHI7Ci0KLSAgaWYgKGN1cnJfcmFuZ2VfaXRyXyA9PSByYW5nZV9tYXBfLmVuZCgpKSB7Ci0gICAgLy8gVGhlcmUgaXMgbm8gYWN0aXZlIHRpbWUgcmFuZ2UsIHNvIHRoaXMgaXMgdGhlIGZpcnN0IEFkZEN1ZSgpCi0gICAgLy8gYXR0ZW1wdCB0aGF0IGZvbGxvd3MgYSBSZXNldCgpLgotCi0gICAgaWYgKHJhbmdlX21hcF8uZW1wdHkoKSkgewotICAgICAgTmV3UmFuZ2Uoc3RhcnRfdGltZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhcnRfdGltZSA8IHJhbmdlX21hcF8uYmVnaW4oKS0+Zmlyc3QpIHsKLSAgICAgIE5ld1JhbmdlKHN0YXJ0X3RpbWUpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgSXRyIGl0ciA9IC0tSXRyKHJhbmdlX21hcF8udXBwZXJfYm91bmQoc3RhcnRfdGltZSkpOwotICAgIERDSEVDSyhzdGFydF90aW1lID49IGl0ci0+Zmlyc3QpOwotCi0gICAgUmFuZ2UmIHJhbmdlID0gaXRyLT5zZWNvbmQ7Ci0KLSAgICBpZiAoc3RhcnRfdGltZSA+IHJhbmdlLmxhc3RfdGltZSgpKSB7Ci0gICAgICBOZXdSYW5nZShzdGFydF90aW1lKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJhbmdlLlJlc2V0Q291bnQoc3RhcnRfdGltZSk7Ci0gICAgY3Vycl9yYW5nZV9pdHJfID0gaXRyOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIERDSEVDSyhzdGFydF90aW1lID49IGN1cnJfcmFuZ2VfaXRyXy0+Zmlyc3QpOwotCi0gIFJhbmdlJiBjdXJyX3JhbmdlID0gY3Vycl9yYW5nZV9pdHJfLT5zZWNvbmQ7Ci0KLSAgaWYgKHN0YXJ0X3RpbWUgPD0gY3Vycl9yYW5nZS5sYXN0X3RpbWUoKSkKLSAgICByZXR1cm4gY3Vycl9yYW5nZS5BZGRDdWUoc3RhcnRfdGltZSk7Ci0KLSAgY29uc3QgSXRyIG5leHRfcmFuZ2VfaXRyID0gKytJdHIoY3Vycl9yYW5nZV9pdHJfKTsKLQotICBpZiAobmV4dF9yYW5nZV9pdHIgIT0gcmFuZ2VfbWFwXy5lbmQoKSkgewotICAgIERDSEVDSyhuZXh0X3JhbmdlX2l0ci0+Zmlyc3QgPiBjdXJyX3JhbmdlLmxhc3RfdGltZSgpKTsKLSAgICBEQ0hFQ0soc3RhcnRfdGltZSA8PSBuZXh0X3JhbmdlX2l0ci0+Zmlyc3QpOwotCi0gICAgaWYgKHN0YXJ0X3RpbWUgPT0gbmV4dF9yYW5nZV9pdHItPmZpcnN0KSB7Ci0gICAgICAvLyBXZSBoYXZlIHdhbGtlZCBvZmYgdGhlIGN1cnJlbnQgcmFuZ2UsIGFuZCBvbnRvIHRoZSBuZXh0IG9uZS4KLSAgICAgIC8vIFRoZXJlIGlzIG5vdyBubyBhbWJpZ3VpdHkgYWJvdXQgd2hlcmUgdGhlIGN1cnJlbnQgdGltZSByYW5nZQotICAgICAgLy8gZW5kcywgYW5kIHNvIHdlIGNvYWxlc2NlIHRoZSBjdXJyZW50IGFuZCBuZXh0IHJhbmdlcy4KLQotICAgICAgTWVyZ2UobmV4dF9yYW5nZV9pdHIsICZjdXJyX3JhbmdlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvLyBFaXRoZXIgfGN1cnJfcmFuZ2V8IGlzIHRoZSBsYXN0IHJhbmdlIGluIHRoZSBtYXAsIG9yIHRoZXJlIGlzIGEKLSAgLy8gbmV4dCByYW5nZSBiZXlvbmQgfGN1cnJfcmFuZ2V8LCBidXQgaXRzIHN0YXJ0IHRpbWUgaXMgYWhlYWQgb2YKLSAgLy8gdGhpcyBjdWUncyBzdGFydCB0aW1lLiAgSW4gZWl0aGVyIGNhc2UsIHRoaXMgY3VlIGJlY29tZXMgdGhlIG5ldwotICAvLyBsYXN0X3RpbWUgZm9yIHxjdXJyX3JhbmdlfC4gIEV2ZW50dWFsbHkgd2Ugd2lsbCBzZWUgYSBjdWUgd2hvc2UKLSAgLy8gdGltZSBtYXRjaGVzIHRoZSBzdGFydCB0aW1lIG9mIHRoZSBuZXh0IHJhbmdlLCBpbiB3aGljaCBjYXNlIHdlCi0gIC8vIGNvYWxlc2NlIHRoZSBjdXJyZW50IGFuZCBuZXh0IHJhbmdlcy4KLQotICBjdXJyX3JhbmdlLlNldExhc3RUaW1lKHN0YXJ0X3RpbWUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotc2l6ZV90IFRleHRSYW5nZXM6OlJhbmdlQ291bnRGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gcmFuZ2VfbWFwXy5zaXplKCk7IH0KLQotdm9pZCBUZXh0UmFuZ2VzOjpOZXdSYW5nZShiYXNlOjpUaW1lRGVsdGEgc3RhcnRfdGltZSkgewotICBSYW5nZSByYW5nZTsKLSAgcmFuZ2UuU2V0TGFzdFRpbWUoc3RhcnRfdGltZSk7Ci0KLSAgc3RkOjpwYWlyPFJhbmdlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0KLSAgICAgIHJhbmdlX21hcF8uaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHN0YXJ0X3RpbWUsIHJhbmdlKSk7Ci0gIERDSEVDSyhyZXN1bHQuc2Vjb25kKTsKLQotICBjdXJyX3JhbmdlX2l0cl8gPSByZXN1bHQuZmlyc3Q7Ci19Ci0KLXZvaWQgVGV4dFJhbmdlczo6TWVyZ2UoY29uc3QgUmFuZ2VNYXA6Oml0ZXJhdG9yJiBuZXh0X3JhbmdlX2l0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2UqIGN1cnJfcmFuZ2UpIHsKLSAgRENIRUNLKGN1cnJfcmFuZ2UpOwotICAqY3Vycl9yYW5nZSA9IG5leHRfcmFuZ2VfaXRyLT5zZWNvbmQ7Ci0gIGN1cnJfcmFuZ2UtPlJlc2V0Q291bnQobmV4dF9yYW5nZV9pdHItPmZpcnN0KTsKLSAgcmFuZ2VfbWFwXy5lcmFzZShuZXh0X3JhbmdlX2l0cik7Ci19Ci0KLXZvaWQgVGV4dFJhbmdlczo6UmFuZ2U6OlJlc2V0Q291bnQoYmFzZTo6VGltZURlbHRhIHN0YXJ0X3RpbWUpIHsKLSAgY291bnRfID0gKHN0YXJ0X3RpbWUgPCBsYXN0X3RpbWVfKSA/IDAgOiAxOwotfQotCi12b2lkIFRleHRSYW5nZXM6OlJhbmdlOjpTZXRMYXN0VGltZShiYXNlOjpUaW1lRGVsdGEgbGFzdF90aW1lKSB7Ci0gIGxhc3RfdGltZV8gPSBsYXN0X3RpbWU7Ci0gIGNvdW50XyA9IDE7Ci0gIG1heF9jb3VudF8gPSAxOwotfQotCi1ib29sIFRleHRSYW5nZXM6OlJhbmdlOjpBZGRDdWUoYmFzZTo6VGltZURlbHRhIHN0YXJ0X3RpbWUpIHsKLSAgaWYgKHN0YXJ0X3RpbWUgPCBsYXN0X3RpbWVfKSB7Ci0gICAgRENIRUNLX0VRKGNvdW50XywgMCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgRENIRUNLKHN0YXJ0X3RpbWUgPT0gbGFzdF90aW1lXyk7Ci0KLSAgKytjb3VudF87Ci0gIGlmIChjb3VudF8gPD0gbWF4X2NvdW50XykgcmV0dXJuIGZhbHNlOwotCi0gICsrbWF4X2NvdW50XzsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBUZXh0UmFuZ2VzOjpSYW5nZTo6bGFzdF90aW1lKCkgY29uc3QgeyByZXR1cm4gbGFzdF90aW1lXzsgfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmFuZ2VzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzk5NTQ3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmFuZ2VzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfVEVYVF9SQU5HRVNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVEVYVF9SQU5HRVNfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSGVscGVyIGNsYXNzIHVzZWQgYnkgdGhlIFRleHRSZW5kZXJlciB0byBmaWx0ZXIgb3V0IHRleHQgY3VlcyB0aGF0Ci0vLyBoYXZlIGFscmVhZHkgYmVlbiBwYXNzZWQgZG93bnN0cmVhbS4KLWNsYXNzIE1FRElBX0VYUE9SVCBUZXh0UmFuZ2VzIHsKLSBwdWJsaWM6Ci0gIFRleHRSYW5nZXMoKTsKLSAgflRleHRSYW5nZXMoKTsKLQotICAvLyBSZXNldCB0aGUgY3VycmVudCByYW5nZSBwb2ludGVyLCBzdWNoIHRoYXQgd2UgYmluZCB0byBhIG5ldyByYW5nZQotICAvLyAoZWl0aGVyIG9uZSB0aGF0IGV4aXN0cyBhbHJlYWR5LCBvciBvbmUgdGhhdCBpcyBmcmVzaGx5LWNyZWF0ZWQpCi0gIC8vIGR1cmluZyB0aGUgbmV4dCBBZGRDdWUoKS4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIEdpdmVuIGEgY3VlIHdpdGggc3RhcnRpbmcgdGltZXN0YW1wIHxzdGFydF90aW1lfCwgYWRkIGl0cyBzdGFydAotICAvLyB0aW1lIHRvIHRoZSB0aW1lIHJhbmdlcy4gKE5vdGUgdGhhdCBmb2xsb3dpbmcgYSBSZXNldCgpLCBjdWUKLSAgLy8gdGltZXMgYXJlIGFzc3VtZWQgdG8gYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLikgSWYgdGhpcyB0aW1lCi0gIC8vIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIHRpbWUgcmFuZ2VzLCB0aGVuIEFkZEN1ZSgpIHJldHVybnMKLSAgLy8gZmFsc2UgYW5kIGNsaWVudHMgc2hvdWxkIG5vdCBwdXNoIHRoZSBjdWUgZG93bnN0cmVhbS4gT3RoZXJ3aXNlLAotICAvLyB0aGUgdGltZSBpcyBhZGRlZCB0byB0aGUgdGltZSByYW5nZXMgYW5kIEFkZEN1ZSgpIHJldHVybnMgdHJ1ZSwKLSAgLy8gbWVhbmluZyB0aGF0IHRoZSBjdWUgc2hvdWxkIGJlIHB1c2hlZCBkb3duc3RyZWFtLgotICBib29sIEFkZEN1ZShiYXNlOjpUaW1lRGVsdGEgc3RhcnRfdGltZSk7Ci0KLSAgLy8gUmV0dXJucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZSByYW5nZXMsIGludGVuZGVkIGZvciB1c2UgYnkKLSAgLy8gdGhlIHVuaXQgdGVzdCBtb2R1bGUgdG8gdmV0IHByb3BlciB0aW1lIHJhbmdlIG1lcmdlIGJlaGF2aW9yLgotICBzaXplX3QgUmFuZ2VDb3VudEZvclRlc3RpbmcoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIC8vIERlc2NyaWJlcyBhIHJhbmdlIG9mIHRpbWVzIGZvciBjdWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KLSAgLy8gcHVzaGVkIGRvd25zdHJlYW0uCi0gIGNsYXNzIFJhbmdlIHsKLSAgIHB1YmxpYzoKLSAgICAvLyBJbml0aWFsaXplIGxhc3RfdGltZSBjb3VudC4KLSAgICB2b2lkIFJlc2V0Q291bnQoYmFzZTo6VGltZURlbHRhIHN0YXJ0X3RpbWUpOwotCi0gICAgLy8gU2V0IGxhc3RfdGltZSBhbmQgYXNzb2NpYXRlZCBjb3VudHMuCi0gICAgdm9pZCBTZXRMYXN0VGltZShiYXNlOjpUaW1lRGVsdGEgbGFzdF90aW1lKTsKLQotICAgIC8vIEFkanVzdCB0aW1lIHJhbmdlIHN0YXRlIHRvIG1hcmsgdGhlIGN1ZSBhcyBoYXZpbmcgYmVlbiBzZWVuLAotICAgIC8vIHJldHVybmluZyB0cnVlIGlmIHdlIGhhdmUgbm90IHNlZW4gfHN0YXJ0X3RpbWV8IGFscmVhZHkgYW5kCi0gICAgLy8gZmFsc2Ugb3RoZXJ3aXNlLgotICAgIGJvb2wgQWRkQ3VlKGJhc2U6OlRpbWVEZWx0YSBzdGFydF90aW1lKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IHRpbWUgaW4gdGhlIHJhbmdlLgotICAgIGJhc2U6OlRpbWVEZWx0YSBsYXN0X3RpbWUoKSBjb25zdDsKLQotICAgcHJpdmF0ZToKLSAgICAvLyBUaGUgbGFzdCB0aW1lc3RhbXAgb2YgdGhpcyByYW5nZS4KLSAgICBiYXNlOjpUaW1lRGVsdGEgbGFzdF90aW1lXzsKLQotICAgIC8vIFRoZSBudW1iZXIgb2YgY3VlcyB3ZSBoYXZlIGRldGVjdGVkIHNvIGZhciwgZm9yIHRoaXMgcmFuZ2UsCi0gICAgLy8gd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgbGFzdF90aW1lLgotICAgIGludCBtYXhfY291bnRfOwotCi0gICAgLy8gVGhlIG51bWJlciBvZiBjdWVzIHdlIGhhdmUgc2VlbiBzaW5jZSB0aGUgbW9zdCByZWNlbnQgUmVzZXQoKSwKLSAgICAvLyB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyBsYXN0X3RpbWUuCi0gICAgaW50IGNvdW50XzsKLSAgfTsKLQotICB0eXBlZGVmIHN0ZDo6bWFwPGJhc2U6OlRpbWVEZWx0YSwgUmFuZ2U+IFJhbmdlTWFwOwotCi0gIC8vIE5ld1JhbmdlKCkgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgdGltZSByYW5nZSB3aGVuIEFkZEN1ZSgpIGlzCi0gIC8vIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBSZXNldCgpLCBhbmQgbm8gZXhpc3RpbmcgdGltZQotICAvLyByYW5nZSBjb250YWlucyB0aGUgaW5kaWNhdGVkIHxzdGFydF90aW1lfCBvZiB0aGUgY3VlLgotICB2b2lkIE5ld1JhbmdlKGJhc2U6OlRpbWVEZWx0YSBzdGFydF90aW1lKTsKLQotICAvLyBDb2FsZXNjZSBjdXJyX3JhbmdlIHdpdGggdGhlIHJhbmdlIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93cy4KLSAgdm9pZCBNZXJnZShjb25zdCBSYW5nZU1hcDo6aXRlcmF0b3ImIG5leHRfcmFuZ2VfaXRyLCBSYW5nZSogY3Vycl9yYW5nZSk7Ci0KLSAgLy8gVGhlIGNvbGxlY3Rpb24gb2YgdGltZSByYW5nZXMsIGVhY2ggb2Ygd2hpY2ggaXMgYm91bmRlZAotICAvLyAoaW5jbHVzaXZlKSBieSB0aGUga2V5IGFuZCBSYW5nZTo6bGFzdF90aW1lLgotICBSYW5nZU1hcCByYW5nZV9tYXBfOwotCi0gIC8vIFRoZSB0aW1lIHJhbmdlIHRvIHdoaWNoIHdlIGJpbmQgZm9sbG93aW5nIGEgUmVzZXQoKS4KLSAgUmFuZ2VNYXA6Oml0ZXJhdG9yIGN1cnJfcmFuZ2VfaXRyXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dFJhbmdlcyk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1JBTkdFU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9yYW5nZXNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlc191bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVjZDA0MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlc191bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3Jhbmdlcy5oIgotCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBUZXh0UmFuZ2VzVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3RlZDoKLSAgYm9vbCBBZGRDdWUoaW50IHNlY29uZHMpIHsKLSAgICByZXR1cm4gcmFuZ2VzXy5BZGRDdWUoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyhzZWNvbmRzKSk7Ci0gIH0KLQotICB2b2lkIFJlc2V0KCkgeyByYW5nZXNfLlJlc2V0KCk7IH0KLQotICBzaXplX3QgUmFuZ2VDb3VudCgpIHsgcmV0dXJuIHJhbmdlc18uUmFuZ2VDb3VudEZvclRlc3RpbmcoKTsgfQotCi0gIFRleHRSYW5nZXMgcmFuZ2VzXzsKLX07Ci0KLVRFU1RfRihUZXh0UmFuZ2VzVGVzdCwgVGVzdEVtcHR5UmFuZ2VzKSB7Ci0gIC8vIENyZWF0ZSBhIG5ldyBhY3RpdmUgcmFuZ2UsIHdpdGggdD01LgotICBFWFBFQ1RfVFJVRShBZGRDdWUoNSkpOwotCi0gIC8vIENyZWF0ZSBhIG5ldyBhY3RpdmUgcmFuZ2UsIHdpdGggdD0yLgotICBSZXNldCgpOwotICBFWFBFQ1RfVFJVRShBZGRDdWUoMikpOwotCi0gIC8vIENyZWF0ZSBhIG5ldyBhY3RpdmUgcmFuZ2UsIHdpdGggdD04LgotICBSZXNldCgpOwotICBFWFBFQ1RfVFJVRShBZGRDdWUoOCkpOwotCi0gIFJlc2V0KCk7Ci0KLSAgLy8gTWFrZSByYW5nZSBbMiwgMl0gYWN0aXZlLgotICBFWFBFQ1RfRkFMU0UoQWRkQ3VlKDIpKTsKLSAgRVhQRUNUX0VRKFJhbmdlQ291bnQoKSwgM1UpOwotCi0gIC8vIENvYWxlc2NlIGZpcnN0IHR3byByYW5nZXM6IFsyLCA1XS4KLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSg1KSk7Ci0gIEVYUEVDVF9FUShSYW5nZUNvdW50KCksIDJVKTsKLQotICAvLyBDb2FsZXNjZSBmaXJzdCB0d28gcmFuZ2VzOiBbMiwgOF0uCi0gIEVYUEVDVF9GQUxTRShBZGRDdWUoOCkpOwotICBFWFBFQ1RfRVEoUmFuZ2VDb3VudCgpLCAxVSk7Ci0KLSAgLy8gQWRkIG5ldyBjdWUgdG8gZW5kIG9mIChvbmx5KSByYW5nZS4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDkpKTsKLSAgRVhQRUNUX0VRKFJhbmdlQ291bnQoKSwgMVUpOwotfQotCi1URVNUX0YoVGV4dFJhbmdlc1Rlc3QsIFRlc3RPbmVSYW5nZSkgewotICAvLyBDcmVhdGUgYSBuZXcgYWN0aXZlIHJhbmdlLCB3aXRoIHQ9MC4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDApKTsKLQotICAvLyBBZGQgY3VlcyB0byBlbmQgb2YgZXhpc3RpbmcgcmFuZ2UuCi0gIEVYUEVDVF9UUlVFKEFkZEN1ZSgxKSk7Ci0gIEVYUEVDVF9UUlVFKEFkZEN1ZSg0KSk7Ci0KLSAgUmVzZXQoKTsKLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSgyKSk7Ci0gIEVYUEVDVF9GQUxTRShBZGRDdWUoMykpOwotICBFWFBFQ1RfRkFMU0UoQWRkQ3VlKDQpKTsKLX0KLQotVEVTVF9GKFRleHRSYW5nZXNUZXN0LCBUZXN0RHVwbGljYXRlTGFzdCkgewotICAvLyBDcmVhdGUgYSBuZXcgYWN0aXZlIHJhbmdlLCB3aXRoIHQ9MC4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDApKTsKLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDEpKTsKLQotICBSZXNldCgpOwotICBFWFBFQ1RfRkFMU0UoQWRkQ3VlKDEpKTsKLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDEpKTsKLX0KLQotVEVTVF9GKFRleHRSYW5nZXNUZXN0LCBUZXN0VHdvUmFuZ2VzKSB7Ci0gIC8vIENyZWF0ZSBhIG5ldyBhY3RpdmUgcmFuZ2UsIHdpdGggdD0wLgotICBFWFBFQ1RfVFJVRShBZGRDdWUoMCkpOwotCi0gIC8vIEFkZCBjdWUgdG8gZW5kIG9mIGV4aXN0aW5nIHJhbmdlLgotICBFWFBFQ1RfVFJVRShBZGRDdWUoMikpOwotCi0gIFJlc2V0KCk7Ci0KLSAgLy8gQ3JlYXRlIGEgbmV3IGFjdGl2ZSByYW5nZSwgd2l0aCB0PTQuCi0gIEVYUEVDVF9UUlVFKEFkZEN1ZSg0KSk7Ci0KLSAgLy8gQWRkIGEgbmV3IGN1ZSB0byBlbmQgb2YgbGFzdCAoYWN0aXZlKSByYW5nZS4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDUpKTsKLQotICBSZXNldCgpOwotCi0gIC8vIE1ha2UgZmlyc3QgcmFuZ2UgYWN0aXZlLgotICBFWFBFQ1RfRkFMU0UoQWRkQ3VlKDApKTsKLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSgyKSk7Ci0KLSAgLy8gRXhwYW5kIGZpcnN0IHJhbmdlLgotICBFWFBFQ1RfVFJVRShBZGRDdWUoMykpOwotCi0gIC8vIENvYWxlc2NlIGZpcnN0IGFuZCBzZWNvbmQgcmFuZ2VzLgotICBFWFBFQ1RfRkFMU0UoQWRkQ3VlKDQpKTsKLSAgRVhQRUNUX0VRKFJhbmdlQ291bnQoKSwgMVUpOwotfQotCi1URVNUX0YoVGV4dFJhbmdlc1Rlc3QsIFRlc3RUaHJlZVJhbmdlcykgewotICAvLyBDcmVhdGUgYSBuZXcgYWN0aXZlIHJhbmdlLCB3aXRoIHQ9MC4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDApKTsKLQotICAvLyBBZGQgY3VlIHRvIGVuZCBvZiBleGlzdGluZyByYW5nZS4KLSAgRVhQRUNUX1RSVUUoQWRkQ3VlKDIpKTsKLQotICBSZXNldCgpOwotCi0gIC8vIENyZWF0ZSBhIG5ldyBhY3RpdmUgcmFuZ2UsIHdpdGggdD00LgotICBFWFBFQ1RfVFJVRShBZGRDdWUoNCkpOwotCi0gIC8vIEFkZCBhIG5ldyBjdWUgdG8gZW5kIG9mIGxhc3QgKGFjdGl2ZSkgcmFuZ2UuCi0gIEVYUEVDVF9UUlVFKEFkZEN1ZSg1KSk7Ci0KLSAgUmVzZXQoKTsKLQotICAvLyBDcmVhdGUgYSBuZXcgYWN0aXZlIHJhbmdlLCBpbiBiZXR3ZWVuIHRoZSBvdGhlciB0d28uCi0gIEVYUEVDVF9UUlVFKEFkZEN1ZSgzKSk7Ci0KLSAgLy8gQ29hbGVzY2UgbWlkZGxlIGFuZCBsYXN0IHJhbmdlcy4KLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSg0KSk7Ci0KLSAgUmVzZXQoKTsKLQotICAvLyBNYWtlIGZpcnN0IHJhbmdlIGFjdGl2ZS4KLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSgwKSk7Ci0gIEVYUEVDVF9GQUxTRShBZGRDdWUoMikpOwotCi0gIC8vIENvYWxlc2NlIGZpcnN0IGFuZCBsYXN0IHJhbmdlcy4KLSAgRVhQRUNUX0ZBTFNFKEFkZEN1ZSgzKSk7Ci0gIEVYUEVDVF9FUShSYW5nZUNvdW50KCksIDFVKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9yZW5kZXJlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRhNDg2OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmVuZGVyZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2tfaGVscGVycy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc2luZ2xlX3RocmVhZF90YXNrX3J1bm5lci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9jdWUuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRleHRSZW5kZXJlcjo6VGV4dFJlbmRlcmVyKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIHRhc2tfcnVubmVyLAotICAgIGNvbnN0IEFkZFRleHRUcmFja0NCJiBhZGRfdGV4dF90cmFja19jYikKLSAgICA6IHRhc2tfcnVubmVyXyh0YXNrX3J1bm5lciksCi0gICAgICBhZGRfdGV4dF90cmFja19jYl8oYWRkX3RleHRfdHJhY2tfY2IpLAotICAgICAgc3RhdGVfKGtVbmluaXRpYWxpemVkKSwKLSAgICAgIHBlbmRpbmdfcmVhZF9jb3VudF8oMCksCi0gICAgICB3ZWFrX2ZhY3RvcnlfKHRoaXMpIHt9Ci0KLVRleHRSZW5kZXJlcjo6flRleHRSZW5kZXJlcigpIHsKLSAgRENIRUNLKHRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKLSAgdGV4dF90cmFja19zdGF0ZV9tYXBfLmNsZWFyKCk7Ci0gIGlmICghcGF1c2VfY2JfLmlzX251bGwoKSkgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJnBhdXNlX2NiXykuUnVuKCk7Ci19Ci0KLXZvaWQgVGV4dFJlbmRlcmVyOjpJbml0aWFsaXplKGNvbnN0IGJhc2U6OkNsb3N1cmUmIGVuZGVkX2NiKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIERDSEVDSyghZW5kZWRfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLX0VRKGtVbmluaXRpYWxpemVkLCBzdGF0ZV8pIDw8ICJzdGF0ZV8gIiA8PCBzdGF0ZV87Ci0gIERDSEVDSyh0ZXh0X3RyYWNrX3N0YXRlX21hcF8uZW1wdHkoKSk7Ci0gIERDSEVDS19FUShwZW5kaW5nX3JlYWRfY291bnRfLCAwKTsKLSAgRENIRUNLKHBlbmRpbmdfZW9zX3NldF8uZW1wdHkoKSk7Ci0gIERDSEVDSyhlbmRlZF9jYl8uaXNfbnVsbCgpKTsKLQotICBlbmRlZF9jYl8gPSBlbmRlZF9jYjsKLSAgc3RhdGVfID0ga1BhdXNlZDsKLX0KLQotdm9pZCBUZXh0UmVuZGVyZXI6OlN0YXJ0UGxheWluZygpIHsKLSAgRENIRUNLKHRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKLSAgRENIRUNLX0VRKHN0YXRlXywga1BhdXNlZCkgPDwgInN0YXRlXyAiIDw8IHN0YXRlXzsKLQotICBmb3IgKGF1dG8gaXRyID0gdGV4dF90cmFja19zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHRleHRfdHJhY2tfc3RhdGVfbWFwXy5lbmQoKTsgKytpdHIpIHsKLSAgICBUZXh0VHJhY2tTdGF0ZSogc3RhdGUgPSBpdHItPnNlY29uZC5nZXQoKTsKLSAgICBpZiAoc3RhdGUtPnJlYWRfc3RhdGUgPT0gVGV4dFRyYWNrU3RhdGU6OmtSZWFkUGVuZGluZykgewotICAgICAgRENIRUNLX0dUKHBlbmRpbmdfcmVhZF9jb3VudF8sIDApOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgUmVhZChzdGF0ZSwgaXRyLT5maXJzdCk7Ci0gIH0KLQotICBzdGF0ZV8gPSBrUGxheWluZzsKLX0KLQotdm9pZCBUZXh0UmVuZGVyZXI6OlBhdXNlKGNvbnN0IGJhc2U6OkNsb3N1cmUmIGNhbGxiYWNrKSB7Ci0gIERDSEVDSyh0YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7Ci0gIERDSEVDSyhzdGF0ZV8gPT0ga1BsYXlpbmcgfHwgc3RhdGVfID09IGtFbmRlZCkgPDwgInN0YXRlXyAiIDw8IHN0YXRlXzsKLSAgRENIRUNLX0dFKHBlbmRpbmdfcmVhZF9jb3VudF8sIDApOwotCi0gIGlmIChwZW5kaW5nX3JlYWRfY291bnRfID09IDApIHsKLSAgICBzdGF0ZV8gPSBrUGF1c2VkOwotICAgIHRhc2tfcnVubmVyXy0+UG9zdFRhc2soRlJPTV9IRVJFLCBjYWxsYmFjayk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgcGF1c2VfY2JfID0gY2FsbGJhY2s7Ci0gIHN0YXRlXyA9IGtQYXVzZVBlbmRpbmc7Ci19Ci0KLXZvaWQgVGV4dFJlbmRlcmVyOjpGbHVzaChjb25zdCBiYXNlOjpDbG9zdXJlJiBjYWxsYmFjaykgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0tfRVEocGVuZGluZ19yZWFkX2NvdW50XywgMCk7Ci0gIERDSEVDSyhzdGF0ZV8gPT0ga1BhdXNlZCkgPDwgInN0YXRlXyAiIDw8IHN0YXRlXzsKLQotICBmb3IgKGF1dG8gaXRyID0gdGV4dF90cmFja19zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHRleHRfdHJhY2tfc3RhdGVfbWFwXy5lbmQoKTsgKytpdHIpIHsKLSAgICBwZW5kaW5nX2Vvc19zZXRfLmluc2VydChpdHItPmZpcnN0KTsKLSAgICBpdHItPnNlY29uZC0+dGV4dF9yYW5nZXNfLlJlc2V0KCk7Ci0gIH0KLSAgRENIRUNLX0VRKHBlbmRpbmdfZW9zX3NldF8uc2l6ZSgpLCB0ZXh0X3RyYWNrX3N0YXRlX21hcF8uc2l6ZSgpKTsKLSAgdGFza19ydW5uZXJfLT5Qb3N0VGFzayhGUk9NX0hFUkUsIGNhbGxiYWNrKTsKLX0KLQotdm9pZCBUZXh0UmVuZGVyZXI6OkFkZFRleHRTdHJlYW0oRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZykgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0soc3RhdGVfICE9IGtVbmluaXRpYWxpemVkKSA8PCAic3RhdGVfICIgPDwgc3RhdGVfOwotICBEQ0hFQ0sodGV4dF90cmFja19zdGF0ZV9tYXBfLmZpbmQodGV4dF9zdHJlYW0pID09Ci0gICAgICAgICB0ZXh0X3RyYWNrX3N0YXRlX21hcF8uZW5kKCkpOwotICBEQ0hFQ0socGVuZGluZ19lb3Nfc2V0Xy5maW5kKHRleHRfc3RyZWFtKSA9PSBwZW5kaW5nX2Vvc19zZXRfLmVuZCgpKTsKLQotICBBZGRUZXh0VHJhY2tEb25lQ0IgZG9uZV9jYiA9Ci0gICAgICBCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKCZUZXh0UmVuZGVyZXI6Ok9uQWRkVGV4dFRyYWNrRG9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vha19mYWN0b3J5Xy5HZXRXZWFrUHRyKCksIHRleHRfc3RyZWFtKSk7Ci0KLSAgYWRkX3RleHRfdHJhY2tfY2JfLlJ1bihjb25maWcsIGRvbmVfY2IpOwotfQotCi12b2lkIFRleHRSZW5kZXJlcjo6UmVtb3ZlVGV4dFN0cmVhbShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSkgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotCi0gIGF1dG8gaXRyID0gdGV4dF90cmFja19zdGF0ZV9tYXBfLmZpbmQodGV4dF9zdHJlYW0pOwotICBEQ0hFQ0soaXRyICE9IHRleHRfdHJhY2tfc3RhdGVfbWFwXy5lbmQoKSk7Ci0KLSAgVGV4dFRyYWNrU3RhdGUqIHN0YXRlID0gaXRyLT5zZWNvbmQuZ2V0KCk7Ci0gIERDSEVDS19FUShzdGF0ZS0+cmVhZF9zdGF0ZSwgVGV4dFRyYWNrU3RhdGU6OmtSZWFkSWRsZSk7Ci0gIHRleHRfdHJhY2tfc3RhdGVfbWFwXy5lcmFzZShpdHIpOwotCi0gIHBlbmRpbmdfZW9zX3NldF8uZXJhc2UodGV4dF9zdHJlYW0pOwotfQotCi1ib29sIFRleHRSZW5kZXJlcjo6SGFzVHJhY2tzKCkgY29uc3QgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICByZXR1cm4gIXRleHRfdHJhY2tfc3RhdGVfbWFwXy5lbXB0eSgpOwotfQotCi12b2lkIFRleHRSZW5kZXJlcjo6QnVmZmVyUmVhZHkoRGVtdXhlclN0cmVhbSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiYgaW5wdXQpIHsKLSAgRENIRUNLKHRhc2tfcnVubmVyXy0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKLSAgRENIRUNLX05FKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZWQpOwotCi0gIGlmIChzdGF0dXMgPT0gRGVtdXhlclN0cmVhbTo6a0Fib3J0ZWQpIHsKLSAgICBEQ0hFQ0soIWlucHV0LmdldCgpKTsKLSAgICBEQ0hFQ0tfR1QocGVuZGluZ19yZWFkX2NvdW50XywgMCk7Ci0gICAgRENIRUNLKHBlbmRpbmdfZW9zX3NldF8uZmluZChzdHJlYW0pICE9IHBlbmRpbmdfZW9zX3NldF8uZW5kKCkpOwotCi0gICAgYXV0byBpdHIgPSB0ZXh0X3RyYWNrX3N0YXRlX21hcF8uZmluZChzdHJlYW0pOwotICAgIERDSEVDSyhpdHIgIT0gdGV4dF90cmFja19zdGF0ZV9tYXBfLmVuZCgpKTsKLQotICAgIFRleHRUcmFja1N0YXRlKiBzdGF0ZSA9IGl0ci0+c2Vjb25kLmdldCgpOwotICAgIERDSEVDS19FUShzdGF0ZS0+cmVhZF9zdGF0ZSwgVGV4dFRyYWNrU3RhdGU6OmtSZWFkUGVuZGluZyk7Ci0KLSAgICAtLXBlbmRpbmdfcmVhZF9jb3VudF87Ci0gICAgc3RhdGUtPnJlYWRfc3RhdGUgPSBUZXh0VHJhY2tTdGF0ZTo6a1JlYWRJZGxlOwotCi0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2Uga1BsYXlpbmc6Ci0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBrUGF1c2VQZW5kaW5nOgotICAgICAgICBpZiAocGVuZGluZ19yZWFkX2NvdW50XyA9PSAwKSB7Ci0gICAgICAgICAgc3RhdGVfID0ga1BhdXNlZDsKLSAgICAgICAgICBiYXNlOjpSZXNldEFuZFJldHVybigmcGF1c2VfY2JfKS5SdW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsKLQotICAgICAgY2FzZSBrUGF1c2VkOgotICAgICAgY2FzZSBrVW5pbml0aWFsaXplZDoKLSAgICAgIGNhc2Uga0VuZGVkOgotICAgICAgICBOT1RSRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOT1RSRUFDSEVEKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGlucHV0LT5lbmRfb2Zfc3RyZWFtKCkpIHsKLSAgICBDdWVSZWFkeShzdHJlYW0sIE5VTEwpOwotICAgIHJldHVybjsKLSAgfQotCi0gIERDSEVDS19FUShzdGF0dXMsIERlbXV4ZXJTdHJlYW06OmtPayk7Ci0gIERDSEVDS19HRShpbnB1dC0+c2lkZV9kYXRhX3NpemUoKSwgMnUpOwotCi0gIC8vIFRoZSBzaWRlIGRhdGEgY29udGFpbnMgYm90aCB0aGUgY3VlIGlkIGFuZCBjdWUgc2V0dGluZ3MsCi0gIC8vIGVhY2ggdGVybWluYXRlZCB3aXRoIGEgTlVMLgotICBjb25zdCBjaGFyKiBpZF9wdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dC0+c2lkZV9kYXRhKCkpOwotICBzaXplX3QgaWRfbGVuID0gc3RybGVuKGlkX3B0cik7Ci0gIHN0ZDo6c3RyaW5nIGlkKGlkX3B0ciwgaWRfbGVuKTsKLQotICBjb25zdCBjaGFyKiBzZXR0aW5nc19wdHIgPSBpZF9wdHIgKyBpZF9sZW4gKyAxOwotICBzaXplX3Qgc2V0dGluZ3NfbGVuID0gc3RybGVuKHNldHRpbmdzX3B0cik7Ci0gIHN0ZDo6c3RyaW5nIHNldHRpbmdzKHNldHRpbmdzX3B0ciwgc2V0dGluZ3NfbGVuKTsKLQotICAvLyBUaGUgY3VlIHBheWxvYWQgaXMgc3RvcmVkIGluIHRoZSBkYXRhLXBhcnQgb2YgdGhlIGlucHV0IGJ1ZmZlci4KLSAgc3RkOjpzdHJpbmcgdGV4dChpbnB1dC0+ZGF0YSgpLCBpbnB1dC0+ZGF0YSgpICsgaW5wdXQtPmRhdGFfc2l6ZSgpKTsKLQotICBzY29wZWRfcmVmcHRyPFRleHRDdWU+IHRleHRfY3VlKAotICAgICAgbmV3IFRleHRDdWUoaW5wdXQtPnRpbWVzdGFtcCgpLCBpbnB1dC0+ZHVyYXRpb24oKSwgaWQsIHNldHRpbmdzLCB0ZXh0KSk7Ci0KLSAgQ3VlUmVhZHkoc3RyZWFtLCB0ZXh0X2N1ZSk7Ci19Ci0KLXZvaWQgVGV4dFJlbmRlcmVyOjpDdWVSZWFkeShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFRleHRDdWU+JiB0ZXh0X2N1ZSkgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBrVW5pbml0aWFsaXplZCk7Ci0gIERDSEVDS19HVChwZW5kaW5nX3JlYWRfY291bnRfLCAwKTsKLSAgRENIRUNLKHBlbmRpbmdfZW9zX3NldF8uZmluZCh0ZXh0X3N0cmVhbSkgIT0gcGVuZGluZ19lb3Nfc2V0Xy5lbmQoKSk7Ci0KLSAgYXV0byBpdHIgPSB0ZXh0X3RyYWNrX3N0YXRlX21hcF8uZmluZCh0ZXh0X3N0cmVhbSk7Ci0gIERDSEVDSyhpdHIgIT0gdGV4dF90cmFja19zdGF0ZV9tYXBfLmVuZCgpKTsKLQotICBUZXh0VHJhY2tTdGF0ZSogc3RhdGUgPSBpdHItPnNlY29uZC5nZXQoKTsKLSAgRENIRUNLX0VRKHN0YXRlLT5yZWFkX3N0YXRlLCBUZXh0VHJhY2tTdGF0ZTo6a1JlYWRQZW5kaW5nKTsKLSAgRENIRUNLKHN0YXRlLT50ZXh0X3RyYWNrKTsKLQotICAtLXBlbmRpbmdfcmVhZF9jb3VudF87Ci0gIHN0YXRlLT5yZWFkX3N0YXRlID0gVGV4dFRyYWNrU3RhdGU6OmtSZWFkSWRsZTsKLQotICBzd2l0Y2ggKHN0YXRlXykgewotICAgIGNhc2Uga1BsYXlpbmc6IHsKLSAgICAgIGlmICh0ZXh0X2N1ZS5nZXQoKSkgYnJlYWs7Ci0KLSAgICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IHBlbmRpbmdfZW9zX3NldF8uZXJhc2UodGV4dF9zdHJlYW0pOwotICAgICAgRENIRUNLX0VRKGNvdW50LCAxVSk7Ci0KLSAgICAgIGlmIChwZW5kaW5nX2Vvc19zZXRfLmVtcHR5KCkpIHsKLSAgICAgICAgRENIRUNLX0VRKHBlbmRpbmdfcmVhZF9jb3VudF8sIDApOwotICAgICAgICBzdGF0ZV8gPSBrRW5kZWQ7Ci0gICAgICAgIHRhc2tfcnVubmVyXy0+UG9zdFRhc2soRlJPTV9IRVJFLCBlbmRlZF9jYl8pOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIERDSEVDS19HVChwZW5kaW5nX3JlYWRfY291bnRfLCAwKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrUGF1c2VQZW5kaW5nOiB7Ci0gICAgICBpZiAodGV4dF9jdWUuZ2V0KCkpIGJyZWFrOwotCi0gICAgICBjb25zdCBzaXplX3QgY291bnQgPSBwZW5kaW5nX2Vvc19zZXRfLmVyYXNlKHRleHRfc3RyZWFtKTsKLSAgICAgIERDSEVDS19FUShjb3VudCwgMVUpOwotCi0gICAgICBpZiAocGVuZGluZ19yZWFkX2NvdW50XyA+IDApIHsKLSAgICAgICAgRENIRUNLKCFwZW5kaW5nX2Vvc19zZXRfLmVtcHR5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHN0YXRlXyA9IGtQYXVzZWQ7Ci0gICAgICBiYXNlOjpSZXNldEFuZFJldHVybigmcGF1c2VfY2JfKS5SdW4oKTsKLQotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2Uga1BhdXNlZDoKLSAgICBjYXNlIGtVbmluaXRpYWxpemVkOgotICAgIGNhc2Uga0VuZGVkOgotICAgICAgTk9UUkVBQ0hFRCgpOwotICAgICAgcmV0dXJuOwotICB9Ci0KLSAgYmFzZTo6VGltZURlbHRhIHN0YXJ0ID0gdGV4dF9jdWUtPnRpbWVzdGFtcCgpOwotCi0gIGlmIChzdGF0ZS0+dGV4dF9yYW5nZXNfLkFkZEN1ZShzdGFydCkpIHsKLSAgICBiYXNlOjpUaW1lRGVsdGEgZW5kID0gc3RhcnQgKyB0ZXh0X2N1ZS0+ZHVyYXRpb24oKTsKLQotICAgIHN0YXRlLT50ZXh0X3RyYWNrLT5hZGRXZWJWVFRDdWUoc3RhcnQsIGVuZCwgdGV4dF9jdWUtPmlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2N1ZS0+dGV4dCgpLCB0ZXh0X2N1ZS0+c2V0dGluZ3MoKSk7Ci0gIH0KLQotICBpZiAoc3RhdGVfID09IGtQbGF5aW5nKSB7Ci0gICAgUmVhZChzdGF0ZSwgdGV4dF9zdHJlYW0pOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChwZW5kaW5nX3JlYWRfY291bnRfID09IDApIHsKLSAgICBEQ0hFQ0tfRVEoc3RhdGVfLCBrUGF1c2VQZW5kaW5nKSA8PCAic3RhdGVfICIgPDwgc3RhdGVfOwotICAgIHN0YXRlXyA9IGtQYXVzZWQ7Ci0gICAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJnBhdXNlX2NiXykuUnVuKCk7Ci0gIH0KLX0KLQotdm9pZCBUZXh0UmVuZGVyZXI6Ok9uQWRkVGV4dFRyYWNrRG9uZShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFjaz4gdGV4dF90cmFjaykgewotICBEQ0hFQ0sodGFza19ydW5uZXJfLT5CZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkpOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBrVW5pbml0aWFsaXplZCk7Ci0gIERDSEVDSyh0ZXh0X3N0cmVhbSk7Ci0gIERDSEVDSyh0ZXh0X3RyYWNrKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dFRyYWNrU3RhdGU+IHN0YXRlKAotICAgICAgbmV3IFRleHRUcmFja1N0YXRlKHN0ZDo6bW92ZSh0ZXh0X3RyYWNrKSkpOwotICB0ZXh0X3RyYWNrX3N0YXRlX21hcF9bdGV4dF9zdHJlYW1dID0gc3RkOjptb3ZlKHN0YXRlKTsKLSAgcGVuZGluZ19lb3Nfc2V0Xy5pbnNlcnQodGV4dF9zdHJlYW0pOwotCi0gIGlmIChzdGF0ZV8gPT0ga1BsYXlpbmcpCi0gICAgUmVhZCh0ZXh0X3RyYWNrX3N0YXRlX21hcF9bdGV4dF9zdHJlYW1dLmdldCgpLCB0ZXh0X3N0cmVhbSk7Ci19Ci0KLXZvaWQgVGV4dFJlbmRlcmVyOjpSZWFkKFRleHRUcmFja1N0YXRlKiBzdGF0ZSwgRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0pIHsKLSAgRENIRUNLX05FKHN0YXRlLT5yZWFkX3N0YXRlLCBUZXh0VHJhY2tTdGF0ZTo6a1JlYWRQZW5kaW5nKTsKLQotICBzdGF0ZS0+cmVhZF9zdGF0ZSA9IFRleHRUcmFja1N0YXRlOjprUmVhZFBlbmRpbmc7Ci0gICsrcGVuZGluZ19yZWFkX2NvdW50XzsKLQotICB0ZXh0X3N0cmVhbS0+UmVhZChiYXNlOjpCaW5kKCZUZXh0UmVuZGVyZXI6OkJ1ZmZlclJlYWR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtfZmFjdG9yeV8uR2V0V2Vha1B0cigpLCB0ZXh0X3N0cmVhbSkpOwotfQotCi1UZXh0UmVuZGVyZXI6OlRleHRUcmFja1N0YXRlOjpUZXh0VHJhY2tTdGF0ZShzdGQ6OnVuaXF1ZV9wdHI8VGV4dFRyYWNrPiB0dCkKLSAgICA6IHJlYWRfc3RhdGUoa1JlYWRJZGxlKSwgdGV4dF90cmFjayhzdGQ6Om1vdmUodHQpKSB7fQotCi1UZXh0UmVuZGVyZXI6OlRleHRUcmFja1N0YXRlOjp+VGV4dFRyYWNrU3RhdGUoKSB7fQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmVuZGVyZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmVuZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1YWNlZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1RFWFRfUkVOREVSRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVEVYVF9SRU5ERVJFUl9IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzZXQ+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvd2Vha19wdHIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfcmFuZ2VzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFjay5oIgotCi1uYW1lc3BhY2UgYmFzZSB7Ci1jbGFzcyBTaW5nbGVUaHJlYWRUYXNrUnVubmVyOwotfQotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFRleHRDdWU7Ci1jbGFzcyBUZXh0VHJhY2tDb25maWc7Ci0KLS8vIFJlY2VpdmVzIGRlY29kZXIgYnVmZmVycyBmcm9tIHRoZSB1cHN0cmVhbSBkZW11eGVyLCBkZWNvZGVzIHRoZW0gdG8gdGV4dAotLy8gY3VlcywgYW5kIHRoZW4gcGFzc2VzIHRoZW0gb250byB0aGUgVGV4dFRyYWNrIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggZWFjaAotLy8gZGVtdXhlciB0ZXh0IHN0cmVhbS4KLWNsYXNzIE1FRElBX0VYUE9SVCBUZXh0UmVuZGVyZXIgewotIHB1YmxpYzoKLSAgLy8gfHRhc2tfcnVubmVyfCBpcyB0aGUgdGhyZWFkIG9uIHdoaWNoIFRleHRSZW5kZXJlciB3aWxsIGV4ZWN1dGUuCi0gIC8vCi0gIC8vIHxhZGRfdGV4dF90cmFja19jYl0gaXMgY2FsbGVkIHdoZW4gdGhlIGRlbXV4ZXIgcmVxdWVzdHMgKHZpYSBpdHMgaG9zdCkKLSAgLy8gdGhhdCBhIG5ldyB0ZXh0IHRyYWNrIGJlIGNyZWF0ZWQuCi0gIFRleHRSZW5kZXJlcihjb25zdCBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+JiB0YXNrX3J1bm5lciwKLSAgICAgICAgICAgICAgIGNvbnN0IEFkZFRleHRUcmFja0NCJiBhZGRfdGV4dF90cmFja19jYik7Ci0KLSAgLy8gU3RvcHMgYWxsIG9wZXJhdGlvbnMgYW5kIGZpcmVzIGFsbCBwZW5kaW5nIGNhbGxiYWNrcy4KLSAgflRleHRSZW5kZXJlcigpOwotCi0gIC8vIHxlbmRlZF9jYnwgaXMgZXhlY3V0ZWQgd2hlbiBhbGwgb2YgdGhlIHRleHQgdHJhY2tzIGhhdmUgcmVhY2hlZAotICAvLyBlbmQgb2Ygc3RyZWFtLCBmb2xsb3dpbmcgYSBwbGF5IHJlcXVlc3QuCi0gIHZvaWQgSW5pdGlhbGl6ZShjb25zdCBiYXNlOjpDbG9zdXJlJiBlbmRlZF9jYik7Ci0KLSAgLy8gU3RhcnRzIHRleHQgdHJhY2sgY3VlIGRlY29kaW5nIGFuZCByZW5kZXJpbmcuCi0gIHZvaWQgU3RhcnRQbGF5aW5nKCk7Ci0KLSAgLy8gVGVtcG9yYXJpbHkgc3VzcGVuZHMgZGVjb2RpbmcgYW5kIHJlbmRlcmluZywgZXhlY3V0aW5nIHxjYWxsYmFja3wgd2hlbgotICAvLyBwbGF5YmFjayBoYXMgYmVlbiBzdXNwZW5kZWQuCi0gIHZvaWQgUGF1c2UoY29uc3QgYmFzZTo6Q2xvc3VyZSYgY2FsbGJhY2spOwotCi0gIC8vIERpc2NhcmRzIGFueSB0ZXh0IGRhdGEsIGV4ZWN1dGluZyB8Y2FsbGJhY2t8IHdoZW4gY29tcGxldGVkLgotICB2b2lkIEZsdXNoKGNvbnN0IGJhc2U6OkNsb3N1cmUmIGNhbGxiYWNrKTsKLQotICAvLyBBZGRzIG5ldyB8dGV4dF9zdHJlYW18LCBoYXZpbmcgdGhlIGluZGljYXRlZCB8Y29uZmlnfCwgdG8gdGhlIHRleHQgc3RyZWFtCi0gIC8vIGNvbGxlY3Rpb24gbWFuYWdlZCBieSB0aGlzIHRleHQgcmVuZGVyZXIuCi0gIHZvaWQgQWRkVGV4dFN0cmVhbShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwgY29uc3QgVGV4dFRyYWNrQ29uZmlnJiBjb25maWcpOwotCi0gIC8vIFJlbW92ZXMgfHRleHRfc3RyZWFtfCBmcm9tIHRoZSB0ZXh0IHN0cmVhbSBjb2xsZWN0aW9uLgotICB2b2lkIFJlbW92ZVRleHRTdHJlYW0oRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0pOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgZXh0YW50IHRleHQgdHJhY2tzLgotICBib29sIEhhc1RyYWNrcygpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgc3RydWN0IFRleHRUcmFja1N0YXRlIHsKLSAgICAvLyBUbyBkZXRlcm1pbmUgcmVhZCBwcm9ncmVzcy4KLSAgICBlbnVtIFJlYWRTdGF0ZSB7IGtSZWFkSWRsZSwga1JlYWRQZW5kaW5nIH07Ci0KLSAgICBleHBsaWNpdCBUZXh0VHJhY2tTdGF0ZShzdGQ6OnVuaXF1ZV9wdHI8VGV4dFRyYWNrPiB0ZXh0X3RyYWNrKTsKLSAgICB+VGV4dFRyYWNrU3RhdGUoKTsKLQotICAgIFJlYWRTdGF0ZSByZWFkX3N0YXRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0VHJhY2s+IHRleHRfdHJhY2s7Ci0gICAgVGV4dFJhbmdlcyB0ZXh0X3Jhbmdlc187Ci0gIH07Ci0KLSAgLy8gQ2FsbGJhY2sgZGVsaXZlcmVkIGJ5IHRoZSBkZW11eGVyIHx0ZXh0X3N0cmVhbXwgd2hlbgotICAvLyBhIHJlYWQgZnJvbSB0aGUgc3RyZWFtIGNvbXBsZXRlcy4KLSAgdm9pZCBCdWZmZXJSZWFkeShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBpbnB1dCk7Ci0KLSAgLy8gRGlzcGF0Y2hlcyB0aGUgZGVjb2RlZCBjdWUgZGVsaXZlcmVkIG9uIHRoZSBkZW11eGVyJ3MgfHRleHRfc3RyZWFtfC4KLSAgdm9pZCBDdWVSZWFkeShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFRleHRDdWU+JiB0ZXh0X2N1ZSk7Ci0KLSAgLy8gRGlzcGF0Y2hlZCB3aGVuIHRoZSBBZGRUZXh0VHJhY2tDQiBjb21wbGV0ZXMsIGFmdGVyIGhhdmluZyBjcmVhdGVkCi0gIC8vIHRoZSBUZXh0VHJhY2sgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB8dGV4dF9zdHJlYW18LgotICB2b2lkIE9uQWRkVGV4dFRyYWNrRG9uZShEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFjaz4gdGV4dF90cmFjayk7Ci0KLSAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBwb3N0IGEgcmVhZCByZXF1ZXN0IG9uIHx0ZXh0X3N0cmVhbXwuCi0gIHZvaWQgUmVhZChUZXh0VHJhY2tTdGF0ZSogc3RhdGUsIERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtKTsKLQotICBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+IHRhc2tfcnVubmVyXzsKLSAgY29uc3QgQWRkVGV4dFRyYWNrQ0IgYWRkX3RleHRfdHJhY2tfY2JfOwotCi0gIC8vIENhbGxiYWNrcyBwcm92aWRlZCBkdXJpbmcgSW5pdGlhbGl6ZSgpLgotICBiYXNlOjpDbG9zdXJlIGVuZGVkX2NiXzsKLQotICAvLyBDYWxsYmFjayBwcm92aWRlZCB0byBQYXVzZSgpLgotICBiYXNlOjpDbG9zdXJlIHBhdXNlX2NiXzsKLQotICAvLyBTaW1wbGUgc3RhdGUgdHJhY2tpbmcgdmFyaWFibGUuCi0gIGVudW0gU3RhdGUgeyBrVW5pbml0aWFsaXplZCwga1BhdXNlUGVuZGluZywga1BhdXNlZCwga1BsYXlpbmcsIGtFbmRlZCB9OwotICBTdGF0ZSBzdGF0ZV87Ci0KLSAgc3RkOjptYXA8RGVtdXhlclN0cmVhbSosIHN0ZDo6dW5pcXVlX3B0cjxUZXh0VHJhY2tTdGF0ZT4+Ci0gICAgICB0ZXh0X3RyYWNrX3N0YXRlX21hcF87Ci0KLSAgLy8gSW5kaWNhdGVzIGhvdyBtYW55IHJlYWQgcmVxdWVzdHMgYXJlIGluIGZsaWdodC4KLSAgaW50IHBlbmRpbmdfcmVhZF9jb3VudF87Ci0KLSAgLy8gSW5kaWNhdGVzIHdoaWNoIHRleHQgc3RyZWFtcyBoYXZlIG5vdCBkZWxpdmVyZWQgZW5kLW9mLXN0cmVhbSB5ZXQuCi0gIHR5cGVkZWYgc3RkOjpzZXQ8RGVtdXhlclN0cmVhbSo+IFBlbmRpbmdFb3NTZXQ7Ci0gIFBlbmRpbmdFb3NTZXQgcGVuZGluZ19lb3Nfc2V0XzsKLQotICAvLyBOT1RFOiBXZWFrIHBvaW50ZXJzIG11c3QgYmUgaW52YWxpZGF0ZWQgYmVmb3JlIGFsbCBvdGhlciBtZW1iZXIgdmFyaWFibGVzLgotICBiYXNlOjpXZWFrUHRyRmFjdG9yeTxUZXh0UmVuZGVyZXI+IHdlYWtfZmFjdG9yeV87Ci0KLSAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFRleHRSZW5kZXJlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1JFTkRFUkVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF9yZW5kZXJlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI2MzE2OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3JlbmRlcmVyLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19oZWxwZXJzLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS9ydW5fbG9vcC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2Zha2VfdGV4dF90cmFja19zdHJlYW0uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvd2VidnR0X3V0aWwuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBMb2NhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGV4dFRyYWNrIGludGVyZmFjZS4KLWNsYXNzIEZha2VUZXh0VHJhY2sgOiBwdWJsaWMgVGV4dFRyYWNrIHsKLSBwdWJsaWM6Ci0gIEZha2VUZXh0VHJhY2soY29uc3QgYmFzZTo6Q2xvc3VyZSYgZGVzdHJveV9jYiwgY29uc3QgVGV4dFRyYWNrQ29uZmlnJiBjb25maWcpCi0gICAgICA6IGRlc3Ryb3lfY2JfKGRlc3Ryb3lfY2IpLCBjb25maWdfKGNvbmZpZykge30KLSAgdmlydHVhbCB+RmFrZVRleHRUcmFjaygpIHsgZGVzdHJveV9jYl8uUnVuKCk7IH0KLQotICBNT0NLX01FVEhPRDUoYWRkV2ViVlRUQ3VlLAotICAgICAgICAgICAgICAgdm9pZChjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHN0YXJ0LCBjb25zdCBiYXNlOjpUaW1lRGVsdGEmIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNldHRpbmdzKSk7Ci0KLSAgY29uc3QgYmFzZTo6Q2xvc3VyZSBkZXN0cm95X2NiXzsKLSAgY29uc3QgVGV4dFRyYWNrQ29uZmlnIGNvbmZpZ187Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmFrZVRleHRUcmFjayk7Ci19OwotCi1jbGFzcyBUZXh0UmVuZGVyZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgVGV4dFJlbmRlcmVyVGVzdCgpIHt9Ci0KLSAgdm9pZCBDcmVhdGVUZXh0UmVuZGVyZXIoKSB7Ci0gICAgRENIRUNLKCF0ZXh0X3JlbmRlcmVyXyk7Ci0KLSAgICB0ZXh0X3JlbmRlcmVyXy5yZXNldChuZXcgVGV4dFJlbmRlcmVyKAotICAgICAgICBtZXNzYWdlX2xvb3BfLnRhc2tfcnVubmVyKCksCi0gICAgICAgIGJhc2U6OkJpbmQoJlRleHRSZW5kZXJlclRlc3Q6Ok9uQWRkVGV4dFRyYWNrLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpOwotICAgIHRleHRfcmVuZGVyZXJfLT5Jbml0aWFsaXplKAotICAgICAgICBiYXNlOjpCaW5kKCZUZXh0UmVuZGVyZXJUZXN0OjpPbkVuZCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwotICB9Ci0KLSAgdm9pZCBEZXN0cm95KCkgewotICAgIHRleHRfcmVuZGVyZXJfLnJlc2V0KCk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICB9Ci0KLSAgdm9pZCBBZGRUZXh0VHJhY2soVGV4dEtpbmQga2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwgYm9vbCBleHBlY3RfcmVhZCkgewotICAgIGNvbnN0IHNpemVfdCBpZHggPSB0ZXh0X3RyYWNrX3N0cmVhbXNfLnNpemUoKTsKLSAgICB0ZXh0X3RyYWNrX3N0cmVhbXNfLnB1c2hfYmFjayhuZXcgRmFrZVRleHRUcmFja1N0cmVhbSk7Ci0KLSAgICBpZiAoZXhwZWN0X3JlYWQpIEV4cGVjdFJlYWQoaWR4KTsKLQotICAgIGNvbnN0IFRleHRUcmFja0NvbmZpZyBjb25maWcoa2luZCwgbmFtZSwgbGFuZ3VhZ2UsIHN0ZDo6c3RyaW5nKCkpOwotICAgIHRleHRfcmVuZGVyZXJfLT5BZGRUZXh0U3RyZWFtKHRleHRfdHJhY2tfc3RyZWFtc18uYmFjaygpLCBjb25maWcpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICAgIEVYUEVDVF9FUSh0ZXh0X3RyYWNrc18uc2l6ZSgpLCB0ZXh0X3RyYWNrX3N0cmVhbXNfLnNpemUoKSk7Ci0gICAgRmFrZVRleHRUcmFjayogY29uc3QgdGV4dF90cmFjayA9IHRleHRfdHJhY2tzXy5iYWNrKCk7Ci0gICAgRVhQRUNUX1RSVUUodGV4dF90cmFjayk7Ci0gICAgRVhQRUNUX1RSVUUodGV4dF90cmFjay0+Y29uZmlnXy5NYXRjaGVzKGNvbmZpZykpOwotICB9Ci0KLSAgdm9pZCBPbkFkZFRleHRUcmFjayhjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRUZXh0VHJhY2tEb25lQ0ImIGRvbmVfY2IpIHsKLSAgICBiYXNlOjpDbG9zdXJlIGRlc3Ryb3lfY2IgPQotICAgICAgICBiYXNlOjpCaW5kKCZUZXh0UmVuZGVyZXJUZXN0OjpPbkRlc3Ryb3lUZXh0VHJhY2ssCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgdGV4dF90cmFja3NfLnNpemUoKSk7Ci0gICAgLy8gVGV4dCB0cmFjayBvYmplY3RzIGFyZSBvd25lZCBieSB0aGUgdGV4dCByZW5kZXJlciwgYnV0IHdlIGNhY2hlIHRoZW0KLSAgICAvLyBoZXJlIHNvIHdlIGNhbiBpbnNwZWN0IHRoZW0uICBUaGV5IGdldCByZW1vdmVkIGZyb20gb3VyIGNhY2hlIHdoZW4gdGhlCi0gICAgLy8gdGV4dCByZW5kZXJlciBkZWFsbG9jYXRlcyB0aGVtLgotICAgIHRleHRfdHJhY2tzXy5wdXNoX2JhY2sobmV3IEZha2VUZXh0VHJhY2soZGVzdHJveV9jYiwgY29uZmlnKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFjaz4gdGV4dF90cmFjayh0ZXh0X3RyYWNrc18uYmFjaygpKTsKLSAgICBkb25lX2NiLlJ1bihzdGQ6Om1vdmUodGV4dF90cmFjaykpOwotICB9Ci0KLSAgdm9pZCBSZW1vdmVUZXh0VHJhY2sodW5zaWduZWQgaWR4KSB7Ci0gICAgRmFrZVRleHRUcmFja1N0cmVhbSogY29uc3Qgc3RyZWFtID0gdGV4dF90cmFja19zdHJlYW1zX1tpZHhdOwotICAgIHRleHRfcmVuZGVyZXJfLT5SZW1vdmVUZXh0U3RyZWFtKHN0cmVhbSk7Ci0gICAgRVhQRUNUX0ZBTFNFKHRleHRfdHJhY2tzX1tpZHhdKTsKLSAgfQotCi0gIHZvaWQgU2F0aXNmeVBlbmRpbmdSZWFkcyhjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6VGltZURlbHRhJiBkdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2V0dGluZ3MpIHsKLSAgICBmb3IgKFRleHRUcmFja1N0cmVhbXM6Oml0ZXJhdG9yIGl0ciA9IHRleHRfdHJhY2tfc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICAgIGl0ciAhPSB0ZXh0X3RyYWNrX3N0cmVhbXNfLmVuZCgpOyArK2l0cikgewotICAgICAgKCppdHIpLT5TYXRpc2Z5UGVuZGluZ1JlYWQoc3RhcnQsIGR1cmF0aW9uLCBpZCwgY29udGVudCwgc2V0dGluZ3MpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgQWJvcnRQZW5kaW5nUmVhZCh1bnNpZ25lZCBpZHgpIHsKLSAgICBGYWtlVGV4dFRyYWNrU3RyZWFtKiBjb25zdCBzdHJlYW0gPSB0ZXh0X3RyYWNrX3N0cmVhbXNfW2lkeF07Ci0gICAgc3RyZWFtLT5BYm9ydFBlbmRpbmdSZWFkKCk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICB9Ci0KLSAgdm9pZCBBYm9ydFBlbmRpbmdSZWFkcygpIHsKLSAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCB0ZXh0X3RyYWNrX3N0cmVhbXNfLnNpemUoKTsgKytpZHgpIHsKLSAgICAgIEFib3J0UGVuZGluZ1JlYWQoaWR4KTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIFNlbmRFb3NOb3RpZmljYXRpb24odW5zaWduZWQgaWR4KSB7Ci0gICAgRmFrZVRleHRUcmFja1N0cmVhbSogY29uc3Qgc3RyZWFtID0gdGV4dF90cmFja19zdHJlYW1zX1tpZHhdOwotICAgIHN0cmVhbS0+U2VuZEVvc05vdGlmaWNhdGlvbigpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgfQotCi0gIHZvaWQgU2VuZEVvc05vdGlmaWNhdGlvbnMoKSB7Ci0gICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgdGV4dF90cmFja19zdHJlYW1zXy5zaXplKCk7ICsraWR4KSB7Ci0gICAgICBTZW5kRW9zTm90aWZpY2F0aW9uKGlkeCk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBTZW5kQ3VlKHVuc2lnbmVkIGlkeCwgYm9vbCBleHBlY3RfY3VlKSB7Ci0gICAgRmFrZVRleHRUcmFja1N0cmVhbSogY29uc3QgdGV4dF9zdHJlYW0gPSB0ZXh0X3RyYWNrX3N0cmVhbXNfW2lkeF07Ci0KLSAgICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgc3RhcnQ7Ci0gICAgY29uc3QgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg0Mik7Ci0gICAgY29uc3Qgc3RkOjpzdHJpbmcgaWQgPSAiaWQiOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGNvbnRlbnQgPSAic3VidGl0bGUiOwotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHNldHRpbmdzOwotCi0gICAgaWYgKGV4cGVjdF9jdWUpIHsKLSAgICAgIEZha2VUZXh0VHJhY2sqIGNvbnN0IHRleHRfdHJhY2sgPSB0ZXh0X3RyYWNrc19baWR4XTsKLSAgICAgIEVYUEVDVF9DQUxMKCp0ZXh0X3RyYWNrLAotICAgICAgICAgICAgICAgICAgYWRkV2ViVlRUQ3VlKHN0YXJ0LCBzdGFydCArIGR1cmF0aW9uLCBpZCwgY29udGVudCwgc2V0dGluZ3MpKTsKLSAgICB9Ci0KLSAgICB0ZXh0X3N0cmVhbS0+U2F0aXNmeVBlbmRpbmdSZWFkKHN0YXJ0LCBkdXJhdGlvbiwgaWQsIGNvbnRlbnQsIHNldHRpbmdzKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICB2b2lkIFNlbmRDdWVzKGJvb2wgZXhwZWN0X2N1ZSkgewotICAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8IHRleHRfdHJhY2tfc3RyZWFtc18uc2l6ZSgpOyArK2lkeCkgewotICAgICAgU2VuZEN1ZShpZHgsIGV4cGVjdF9jdWUpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgT25EZXN0cm95VGV4dFRyYWNrKHVuc2lnbmVkIGlkeCkgeyB0ZXh0X3RyYWNrc19baWR4XSA9IE5VTEw7IH0KLQotICB2b2lkIFBsYXkoKSB7IHRleHRfcmVuZGVyZXJfLT5TdGFydFBsYXlpbmcoKTsgfQotCi0gIHZvaWQgUGF1c2UoKSB7Ci0gICAgdGV4dF9yZW5kZXJlcl8tPlBhdXNlKAotICAgICAgICBiYXNlOjpCaW5kKCZUZXh0UmVuZGVyZXJUZXN0OjpPblBhdXNlLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICB9Ci0KLSAgdm9pZCBGbHVzaCgpIHsKLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25GbHVzaCgpKTsKLSAgICB0ZXh0X3JlbmRlcmVyXy0+Rmx1c2goCi0gICAgICAgIGJhc2U6OkJpbmQoJlRleHRSZW5kZXJlclRlc3Q6Ok9uRmx1c2gsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLSAgfQotCi0gIHZvaWQgRXhwZWN0UmVhZChzaXplX3QgaWR4KSB7Ci0gICAgRmFrZVRleHRUcmFja1N0cmVhbSogY29uc3Qgc3RyZWFtID0gdGV4dF90cmFja19zdHJlYW1zX1tpZHhdOwotICAgIEVYUEVDVF9DQUxMKCpzdHJlYW0sIE9uUmVhZCgpKTsKLSAgfQotCi0gIE1PQ0tfTUVUSE9EMChPbkVuZCwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QwKE9uUGF1c2UsIHZvaWQoKSk7Ci0gIE1PQ0tfTUVUSE9EMChPbkZsdXNoLCB2b2lkKCkpOwotCi0gIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcF87Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RmFrZVRleHRUcmFja1N0cmVhbT4+IFRleHRUcmFja1N0cmVhbXM7Ci0gIFRleHRUcmFja1N0cmVhbXMgdGV4dF90cmFja19zdHJlYW1zXzsKLQotICB0eXBlZGVmIHN0ZDo6dmVjdG9yPEZha2VUZXh0VHJhY2sqPiBUZXh0VHJhY2tzOwotICBUZXh0VHJhY2tzIHRleHRfdHJhY2tzXzsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dFJlbmRlcmVyPiB0ZXh0X3JlbmRlcmVyXzsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0UmVuZGVyZXJUZXN0KTsKLX07Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBDcmVhdGVUZXh0UmVuZGVyZXJOb0luaXQpIHsKLSAgdGV4dF9yZW5kZXJlcl8ucmVzZXQobmV3IFRleHRSZW5kZXJlcigKLSAgICAgIG1lc3NhZ2VfbG9vcF8udGFza19ydW5uZXIoKSwKLSAgICAgIGJhc2U6OkJpbmQoJlRleHRSZW5kZXJlclRlc3Q6Ok9uQWRkVGV4dFRyYWNrLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpOwotICB0ZXh0X3JlbmRlcmVyXy5yZXNldCgpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQ3JlYXRlKSB7IENyZWF0ZVRleHRSZW5kZXJlcigpOyB9Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUZXh0VHJhY2tPbmx5X09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgZmFsc2UpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVGV4dFRyYWNrT25seV9Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgInRyYWNrIDEiLCAiIiwgZmFsc2UpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICJ0cmFjayAyIiwgIiIsIGZhbHNlKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlPbmx5KSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBQbGF5KCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0JlZm9yZVBsYXlfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tCZWZvcmVQbGF5X1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tBZnRlclBsYXlfT25lVHJhY2tBZnRlcikgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgUGxheSgpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0FmdGVyUGxheV9Ud29UcmFja3NBZnRlcikgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgUGxheSgpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tBZnRlclBsYXlfT25lVHJhY2tCZWZvcmVPbmVUcmFja0FmdGVyKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5QWRkQ3VlX09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRXhwZWN0UmVhZCgwKTsKLSAgU2VuZEN1ZXModHJ1ZSk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5QWRkQ3VlX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFeHBlY3RSZWFkKDApOwotICBFeHBlY3RSZWFkKDEpOwotICBTZW5kQ3Vlcyh0cnVlKTsKLSAgQWJvcnRQZW5kaW5nUmVhZHMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NPbmx5X09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc09ubHlfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlDdWVFb3NfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFeHBlY3RSZWFkKDApOwotICBTZW5kQ3Vlcyh0cnVlKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZUVvc19Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRXhwZWN0UmVhZCgwKTsKLSAgRXhwZWN0UmVhZCgxKTsKLSAgU2VuZEN1ZXModHJ1ZSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIERlc3Ryb3lQZW5kaW5nX09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRGVzdHJveSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgRGVzdHJveVBlbmRpbmdfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIERlc3Ryb3koKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlQYXVzZV9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheVBhdXNlX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZVBlbmRpbmdfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZVBlbmRpbmdfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZVBhdXNlUGVuZGluZ19PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kQ3Vlcyh0cnVlKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlDdWVQYXVzZVBlbmRpbmdfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kQ3Vlcyh0cnVlKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZV9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VfU3BsaXRFb3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigwKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NGbHVzaF9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci0gIEZsdXNoKCk7Ci0gIEV4cGVjdFJlYWQoMCk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc0ZsdXNoX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb25zKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBGbHVzaCgpOwotICBFeHBlY3RSZWFkKDApOwotICBFeHBlY3RSZWFkKDEpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIEFkZFRleHRUcmFja09ubHlSZW1vdmVfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCBmYWxzZSk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUZXh0VHJhY2tPbmx5UmVtb3ZlX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAidHJhY2sgMSIsICIiLCBmYWxzZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgInRyYWNrIDIiLCAiIiwgZmFsc2UpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0JlZm9yZVBsYXlSZW1vdmVfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tCZWZvcmVQbGF5UmVtb3ZlX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0JlZm9yZVBsYXlSZW1vdmVfU2VwYXJhdGVDYW5jZWwpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tCZWZvcmVQbGF5UmVtb3ZlX1JlbW92ZU9uZVRoZW5QbGF5KSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIGZhbHNlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBQbGF5KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWQoMSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0JlZm9yZVBsYXlSZW1vdmVfUmVtb3ZlVHdvVGhlblBsYXkpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgZmFsc2UpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIGZhbHNlKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBQbGF5KCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0FmdGVyUGxheVJlbW92ZV9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgUGxheSgpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBBZGRUcmFja0FmdGVyUGxheVJlbW92ZV9Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIFBsYXkoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgQWJvcnRQZW5kaW5nUmVhZHMoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tBZnRlclBsYXlSZW1vdmVfU3BsaXRDYW5jZWwpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIFBsYXkoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkVHJhY2tBZnRlclBsYXlSZW1vdmVfU3BsaXRBZGQpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUFkZEN1ZVJlbW92ZV9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEV4cGVjdFJlYWQoMCk7Ci0gIFNlbmRDdWVzKHRydWUpOwotICBBYm9ydFBlbmRpbmdSZWFkcygpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUFkZEN1ZVJlbW92ZV9Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRXhwZWN0UmVhZCgwKTsKLSAgRXhwZWN0UmVhZCgxKTsKLSAgU2VuZEN1ZXModHJ1ZSk7Ci0gIEFib3J0UGVuZGluZ1JlYWQoMCk7Ci0gIEFib3J0UGVuZGluZ1JlYWQoMSk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NPbmx5UmVtb3ZlX09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc09ubHlSZW1vdmVfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZUVvc1JlbW92ZV9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEV4cGVjdFJlYWQoMCk7Ci0gIFNlbmRDdWVzKHRydWUpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb25zKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5Q3VlRW9zUmVtb3ZlX1R3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFeHBlY3RSZWFkKDApOwotICBFeHBlY3RSZWFkKDEpOwotICBTZW5kQ3Vlcyh0cnVlKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5UGF1c2VSZW1vdmVfUGF1c2VUaGVuUmVtb3ZlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZHMoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5UGF1c2VSZW1vdmVfUmVtb3ZlVGhhblBhdXNlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZHMoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5UGF1c2VfUGF1c2VUaGVuUmVtb3ZlVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5UGF1c2VSZW1vdmVfUmVtb3ZlVGhlblBhdXNlVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWRzKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5UGF1c2VSZW1vdmVfU3BsaXRDYW5jZWwpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlQYXVzZVJlbW92ZV9QYXVzZUxhc3QpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfVFJVRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZVBlbmRpbmdSZW1vdmVfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZVBlbmRpbmdSZW1vdmVfVHdvVHJhY2tzKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VQZW5kaW5nUmVtb3ZlX1NwbGl0RW9zKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5Q3VlUGF1c2VQZW5kaW5nUmVtb3ZlX09uZVRyYWNrKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgUGF1c2UoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRDdWVzKHRydWUpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZVBhdXNlUGVuZGluZ1JlbW92ZV9Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgUGF1c2UoKTsKLSAgU2VuZEN1ZSgwLCB0cnVlKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRDdWUoMSwgdHJ1ZSk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlDdWVQYXVzZVBlbmRpbmdSZW1vdmVfU3BsaXRTZW5kQ3VlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIFNlbmRDdWUoMCwgdHJ1ZSk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRDdWUoMSwgdHJ1ZSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VSZW1vdmVfUGF1c2VUaGVuUmVtb3ZlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZVJlbW92ZV9SZW1vdmVUaGVuUGF1c2UpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb25zKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc1BhdXNlX1BhdXNlVGhlblJlbW92ZVR3b1RyYWNrcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VfUmVtb3ZlUGF1c2VSZW1vdmUpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigwKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc1BhdXNlX0Vvc1RoZW5QYXVzZSkgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VfUGF1c2VMYXN0KSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZV9Fb3NQYXVzZVJlbW92ZSkgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zUGF1c2VfRW9zUmVtb3ZlUGF1c2UpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigwKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUVvc1BhdXNlX0Vvc1JlbW92ZUVvc1BhdXNlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NQYXVzZV9Fb3NSZW1vdmVFb3NSZW1vdmVQYXVzZSkgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFBhdXNlKCk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5RW9zRmx1c2hSZW1vdmVfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb25zKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBQYXVzZSgpOwotICBGbHVzaCgpOwotICBFeHBlY3RSZWFkKDApOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbnMoKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NGbHVzaFJlbW92ZV9Ud29UcmFja3MpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgRmx1c2goKTsKLSAgRXhwZWN0UmVhZCgwKTsKLSAgRXhwZWN0UmVhZCgxKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmQoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMSk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlFb3NGbHVzaFJlbW92ZV9Fb3NSZW1vdmUpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRW5kKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9ucygpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgRmx1c2goKTsKLSAgRXhwZWN0UmVhZCgwKTsKLSAgRXhwZWN0UmVhZCgxKTsKLSAgUGxheSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDEpOwotICBFWFBFQ1RfRkFMU0UodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlTaG9ydF9TZW5kQ3VlVGhlbkVvcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBTZW5kQ3VlKDAsIHRydWUpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlTaG9ydF9Fb3NUaGVuU2VuZEN1ZSkgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDApOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgU2VuZEN1ZSgxLCB0cnVlKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlTaG9ydFJlbW92ZV9TZW5kRW9zUmVtb3ZlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIFNlbmRDdWUoMCwgdHJ1ZSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIFJlbW92ZVRleHRUcmFjaygxKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5U2hvcnRSZW1vdmVfU2VuZFJlbW92ZUVvcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBTZW5kQ3VlKDAsIHRydWUpOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBTZW5kRW9zTm90aWZpY2F0aW9uKDEpOwotICBSZW1vdmVUZXh0VHJhY2soMSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlbmRlcmVyXy0+SGFzVHJhY2tzKCkpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZVBhdXNlUGVuZGluZ0NhbmNlbF9PbmVUcmFjaykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBBYm9ydFBlbmRpbmdSZWFkKDApOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZVBhdXNlUGVuZGluZ0NhbmNlbF9TZW5kVGhlbkNhbmNlbCkgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBTZW5kQ3VlKDAsIHRydWUpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgxKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIFBsYXlDdWVQYXVzZVBlbmRpbmdDYW5jZWxfQ2FuY2VsVGhlblNlbmQpIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjEiLCAiIiwgdHJ1ZSk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIjIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgUGF1c2UoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRDdWUoMSwgdHJ1ZSk7Ci19Ci0KLVRFU1RfRihUZXh0UmVuZGVyZXJUZXN0LCBQbGF5Q3VlRGVzdHJveVBlbmRpbmdDYW5jZWxfT25lVHJhY2spIHsKLSAgQ3JlYXRlVGV4dFJlbmRlcmVyKCk7Ci0gIEFkZFRleHRUcmFjayhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBQYXVzZSgpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgRGVzdHJveSgpOwotICBBYm9ydFBlbmRpbmdSZWFkKDApOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZURlc3Ryb3lQZW5kaW5nQ2FuY2VsX1NlbmRUaGVuQ2FuY2VsKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBEZXN0cm95KCk7Ci0gIFNlbmRDdWUoMCwgZmFsc2UpOwotICBBYm9ydFBlbmRpbmdSZWFkKDEpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgUGxheUN1ZURlc3Ryb3lQZW5kaW5nQ2FuY2VsX0NhbmNlbFRoZW5TZW5kKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIFBhdXNlKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPblBhdXNlKCkpOwotICBEZXN0cm95KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWQoMCk7Ci0gIFNlbmRDdWUoMSwgZmFsc2UpOwotfQotCi1URVNUX0YoVGV4dFJlbmRlcmVyVGVzdCwgQWRkUmVtb3ZlQWRkKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgdHJ1ZSk7Ci0gIFBsYXkoKTsKLSAgQWJvcnRQZW5kaW5nUmVhZCgwKTsKLSAgUmVtb3ZlVGV4dFRyYWNrKDApOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25QYXVzZSgpKTsKLSAgUGF1c2UoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIEFkZFJlbW92ZUVvcykgewotICBDcmVhdGVUZXh0UmVuZGVyZXIoKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMSIsICIiLCB0cnVlKTsKLSAgQWRkVGV4dFRyYWNrKGtUZXh0U3VidGl0bGVzLCAiMiIsICIiLCB0cnVlKTsKLSAgUGxheSgpOwotICBBYm9ydFBlbmRpbmdSZWFkKDApOwotICBSZW1vdmVUZXh0VHJhY2soMCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVuZGVyZXJfLT5IYXNUcmFja3MoKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkVuZCgpKTsKLSAgU2VuZEVvc05vdGlmaWNhdGlvbigxKTsKLX0KLQotVEVTVF9GKFRleHRSZW5kZXJlclRlc3QsIEFkZFJlbW92ZVBhdXNlKSB7Ci0gIENyZWF0ZVRleHRSZW5kZXJlcigpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIxIiwgIiIsIHRydWUpOwotICBBZGRUZXh0VHJhY2soa1RleHRTdWJ0aXRsZXMsICIyIiwgIiIsIHRydWUpOwotICBQbGF5KCk7Ci0gIEFib3J0UGVuZGluZ1JlYWQoMCk7Ci0gIFJlbW92ZVRleHRUcmFjaygwKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZW5kZXJlcl8tPkhhc1RyYWNrcygpKTsKLSAgUGF1c2UoKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uUGF1c2UoKSk7Ci0gIFNlbmRFb3NOb3RpZmljYXRpb24oMSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFjay5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE1ZjE4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfVEVYVF9UUkFDS19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1RSQUNLX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgVGV4dFRyYWNrQ29uZmlnOwotCi1jbGFzcyBUZXh0VHJhY2sgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+VGV4dFRyYWNrKCkge30KLSAgdmlydHVhbCB2b2lkIGFkZFdlYlZUVEN1ZShjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNldHRpbmdzKSA9IDA7Ci19OwotCi10eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFRleHRUcmFjaz4pPiBBZGRUZXh0VHJhY2tEb25lQ0I7Ci0KLXR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRUZXh0VHJhY2tEb25lQ0ImIGRvbmVfY2IpPgotICAgIEFkZFRleHRUcmFja0NCOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1RSQUNLX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmQ1MGNlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFja19jb25maWcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1UZXh0VHJhY2tDb25maWc6OlRleHRUcmFja0NvbmZpZygpIDoga2luZF8oa1RleHROb25lKSB7fQotCi1UZXh0VHJhY2tDb25maWc6OlRleHRUcmFja0NvbmZpZyhUZXh0S2luZCBraW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgaWQpCi0gICAgOiBraW5kXyhraW5kKSwgbGFiZWxfKGxhYmVsKSwgbGFuZ3VhZ2VfKGxhbmd1YWdlKSwgaWRfKGlkKSB7fQotCi1ib29sIFRleHRUcmFja0NvbmZpZzo6TWF0Y2hlcyhjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZykgY29uc3QgewotICByZXR1cm4gY29uZmlnLmtpbmQoKSA9PSBraW5kXyAmJiBjb25maWcubGFiZWwoKSA9PSBsYWJlbF8gJiYKLSAgICAgICAgIGNvbmZpZy5sYW5ndWFnZSgpID09IGxhbmd1YWdlXyAmJiBjb25maWcuaWQoKSA9PSBpZF87Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFja19jb25maWcuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZWUyMzEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFja19jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1RSQUNLX0NPTkZJR19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9URVhUX1RSQUNLX0NPTkZJR19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gU3BlY2lmaWVzIHRoZSB2YXJpZXRpZXMgb2YgdGV4dCB0cmFja3MuCi1lbnVtIFRleHRLaW5kIHsKLSAga1RleHRTdWJ0aXRsZXMsCi0gIGtUZXh0Q2FwdGlvbnMsCi0gIGtUZXh0RGVzY3JpcHRpb25zLAotICBrVGV4dE1ldGFkYXRhLAotICBrVGV4dE5vbmUKLX07Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBUZXh0VHJhY2tDb25maWcgewotIHB1YmxpYzoKLSAgVGV4dFRyYWNrQ29uZmlnKCk7Ci0gIFRleHRUcmFja0NvbmZpZyhUZXh0S2luZCBraW5kLCBjb25zdCBzdGQ6OnN0cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBmaWVsZHMgaW4gfGNvbmZpZ3wgbWF0Y2ggdGhpcyBjb25maWcuCi0gIGJvb2wgTWF0Y2hlcyhjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZykgY29uc3Q7Ci0KLSAgVGV4dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmRfOyB9Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIGxhYmVsXzsgfQotICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UoKSBjb25zdCB7IHJldHVybiBsYW5ndWFnZV87IH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gaWRfOyB9Ci0KLSBwcml2YXRlOgotICBUZXh0S2luZCBraW5kXzsKLSAgc3RkOjpzdHJpbmcgbGFiZWxfOwotICBzdGQ6OnN0cmluZyBsYW5ndWFnZV87Ci0gIHN0ZDo6c3RyaW5nIGlkXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1RFWFRfVFJBQ0tfQ09ORklHX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90aW1lX2RlbHRhX2ludGVycG9sYXRvci5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3RpbWVfZGVsdGFfaW50ZXJwb2xhdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjgwNjVhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RpbWVfZGVsdGFfaW50ZXJwb2xhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZV9kZWx0YV9pbnRlcnBvbGF0b3IuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aWNrX2Nsb2NrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRpbWVEZWx0YUludGVycG9sYXRvcjo6VGltZURlbHRhSW50ZXJwb2xhdG9yKGJhc2U6OlRpY2tDbG9jayogdGlja19jbG9jaykKLSAgICA6IHRpY2tfY2xvY2tfKHRpY2tfY2xvY2spLAotICAgICAgaW50ZXJwb2xhdGluZ18oZmFsc2UpLAotICAgICAgdXBwZXJfYm91bmRfKGtOb1RpbWVzdGFtcCksCi0gICAgICBwbGF5YmFja19yYXRlXygwKSB7Ci0gIERDSEVDSyh0aWNrX2Nsb2NrXyk7Ci19Ci0KLVRpbWVEZWx0YUludGVycG9sYXRvcjo6flRpbWVEZWx0YUludGVycG9sYXRvcigpIHt9Ci0KLWJhc2U6OlRpbWVEZWx0YSBUaW1lRGVsdGFJbnRlcnBvbGF0b3I6OlN0YXJ0SW50ZXJwb2xhdGluZygpIHsKLSAgRENIRUNLKCFpbnRlcnBvbGF0aW5nXyk7Ci0gIHJlZmVyZW5jZV8gPSB0aWNrX2Nsb2NrXy0+Tm93VGlja3MoKTsKLSAgaW50ZXJwb2xhdGluZ18gPSB0cnVlOwotICByZXR1cm4gbG93ZXJfYm91bmRfOwotfQotCi1iYXNlOjpUaW1lRGVsdGEgVGltZURlbHRhSW50ZXJwb2xhdG9yOjpTdG9wSW50ZXJwb2xhdGluZygpIHsKLSAgRENIRUNLKGludGVycG9sYXRpbmdfKTsKLSAgbG93ZXJfYm91bmRfID0gR2V0SW50ZXJwb2xhdGVkVGltZSgpOwotICBpbnRlcnBvbGF0aW5nXyA9IGZhbHNlOwotICByZXR1cm4gbG93ZXJfYm91bmRfOwotfQotCi12b2lkIFRpbWVEZWx0YUludGVycG9sYXRvcjo6U2V0UGxheWJhY2tSYXRlKGRvdWJsZSBwbGF5YmFja19yYXRlKSB7Ci0gIGxvd2VyX2JvdW5kXyA9IEdldEludGVycG9sYXRlZFRpbWUoKTsKLSAgcmVmZXJlbmNlXyA9IHRpY2tfY2xvY2tfLT5Ob3dUaWNrcygpOwotICBwbGF5YmFja19yYXRlXyA9IHBsYXliYWNrX3JhdGU7Ci19Ci0KLXZvaWQgVGltZURlbHRhSW50ZXJwb2xhdG9yOjpTZXRCb3VuZHMoYmFzZTo6VGltZURlbHRhIGxvd2VyX2JvdW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgdXBwZXJfYm91bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBjYXB0dXJlX3RpbWUpIHsKLSAgRENIRUNLKGxvd2VyX2JvdW5kIDw9IHVwcGVyX2JvdW5kKTsKLSAgRENIRUNLKGxvd2VyX2JvdW5kICE9IGtOb1RpbWVzdGFtcCk7Ci0KLSAgbG93ZXJfYm91bmRfID0gc3RkOjptYXgoYmFzZTo6VGltZURlbHRhKCksIGxvd2VyX2JvdW5kKTsKLSAgdXBwZXJfYm91bmRfID0gc3RkOjptYXgoYmFzZTo6VGltZURlbHRhKCksIHVwcGVyX2JvdW5kKTsKLSAgcmVmZXJlbmNlXyA9IGNhcHR1cmVfdGltZTsKLX0KLQotdm9pZCBUaW1lRGVsdGFJbnRlcnBvbGF0b3I6OlNldFVwcGVyQm91bmQoYmFzZTo6VGltZURlbHRhIHVwcGVyX2JvdW5kKSB7Ci0gIERDSEVDSyh1cHBlcl9ib3VuZCAhPSBrTm9UaW1lc3RhbXApOwotCi0gIGxvd2VyX2JvdW5kXyA9IEdldEludGVycG9sYXRlZFRpbWUoKTsKLSAgcmVmZXJlbmNlXyA9IHRpY2tfY2xvY2tfLT5Ob3dUaWNrcygpOwotICB1cHBlcl9ib3VuZF8gPSB1cHBlcl9ib3VuZDsKLX0KLQotYmFzZTo6VGltZURlbHRhIFRpbWVEZWx0YUludGVycG9sYXRvcjo6R2V0SW50ZXJwb2xhdGVkVGltZSgpIHsKLSAgaWYgKCFpbnRlcnBvbGF0aW5nXykgcmV0dXJuIGxvd2VyX2JvdW5kXzsKLQotICBpbnQ2NF90IG5vd191cyA9ICh0aWNrX2Nsb2NrXy0+Tm93VGlja3MoKSAtIHJlZmVyZW5jZV8pLkluTWljcm9zZWNvbmRzKCk7Ci0gIG5vd191cyA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG5vd191cyAqIHBsYXliYWNrX3JhdGVfKTsKLSAgYmFzZTo6VGltZURlbHRhIGludGVycG9sYXRlZF90aW1lID0KLSAgICAgIGxvd2VyX2JvdW5kXyArIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyhub3dfdXMpOwotCi0gIGlmICh1cHBlcl9ib3VuZF8gPT0ga05vVGltZXN0YW1wKSByZXR1cm4gaW50ZXJwb2xhdGVkX3RpbWU7Ci0KLSAgcmV0dXJuIHN0ZDo6bWluKGludGVycG9sYXRlZF90aW1lLCB1cHBlcl9ib3VuZF8pOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3RpbWVfZGVsdGFfaW50ZXJwb2xhdG9yLmggYi9jb2JhbHQvbWVkaWEvYmFzZS90aW1lX2RlbHRhX2ludGVycG9sYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODZmYjEyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3RpbWVfZGVsdGFfaW50ZXJwb2xhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfVElNRV9ERUxUQV9JTlRFUlBPTEFUT1JfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVElNRV9ERUxUQV9JTlRFUlBPTEFUT1JfSF8KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBiYXNlIHsKLWNsYXNzIFRpY2tDbG9jazsKLX0gIC8vIG5hbWVzcGFjZSBiYXNlCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIFRpbWVEZWx0YXMgYmFzZWQgb24gdGhlIHBhc3NhZ2Ugb2Ygd2FsbCBjbG9jayB0aW1lCi0vLyBhbmQgdGhlIGN1cnJlbnQgcGxheWJhY2sgcmF0ZS4KLS8vCi0vLyBUaW1lRGVsdGFJbnRlcnBvbGF0b3IgaXMgbm90IHRocmVhZC1zYWZlIGFuZCBtdXN0IGJlIGV4dGVybmFsbHkgbG9ja2VkLgotY2xhc3MgTUVESUFfRVhQT1JUIFRpbWVEZWx0YUludGVycG9sYXRvciB7Ci0gcHVibGljOgotICAvLyBDb25zdHJ1Y3RzIGFuIGludGVycG9sYXRvciBpbml0aWFsaXplZCB0byB6ZXJvIHdpdGggYSByYXRlIG9mIDEuMC4KLSAgLy8KLSAgLy8gfHRpY2tfY2xvY2t8IGlzIHVzZWQgZm9yIHNhbXBsaW5nIHdhbGwgY2xvY2sgdGltZSBmb3IgaW50ZXJwb2xhdGluZy4KLSAgZXhwbGljaXQgVGltZURlbHRhSW50ZXJwb2xhdG9yKGJhc2U6OlRpY2tDbG9jayogdGlja19jbG9jayk7Ci0gIH5UaW1lRGVsdGFJbnRlcnBvbGF0b3IoKTsKLQotICBib29sIGludGVycG9sYXRpbmcoKSB7IHJldHVybiBpbnRlcnBvbGF0aW5nXzsgfQotCi0gIC8vIFN0YXJ0cyByZXR1cm5pbmcgaW50ZXJwb2xhdGVkIFRpbWVEZWx0YSB2YWx1ZXMuCi0gIC8vCi0gIC8vIHx0aWNrX2Nsb2NrfCB3aWxsIGJlIHF1ZXJpZWQgZm9yIGEgbmV3IHJlZmVyZW5jZSB0aW1lIHZhbHVlLgotICBiYXNlOjpUaW1lRGVsdGEgU3RhcnRJbnRlcnBvbGF0aW5nKCk7Ci0KLSAgLy8gU3RvcHMgcmV0dXJuaW5nIGludGVycG9sYXRlZCBUaW1lRGVsdGEgdmFsdWVzLgotICAvLwotICAvLyB8dGlja19jbG9ja3wgd2lsbCBiZSBxdWVyaWVkIGZvciBhIG5ldyByZWZlcmVuY2UgdGltZSB2YWx1ZS4KLSAgYmFzZTo6VGltZURlbHRhIFN0b3BJbnRlcnBvbGF0aW5nKCk7Ci0KLSAgLy8gU2V0cyBhIG5ldyByYXRlIGF0IHdoaWNoIHRvIGludGVycG9sYXRlLgotICAvLyBUaGUgZGVmYXVsdCByYXRlIGlzIDAuCi0gIC8vCi0gIC8vIHx0aWNrX2Nsb2NrfCB3aWxsIGJlIHF1ZXJpZWQgZm9yIGEgbmV3IHJlZmVyZW5jZSB0aW1lIHZhbHVlLgotICB2b2lkIFNldFBsYXliYWNrUmF0ZShkb3VibGUgcGxheWJhY2tfcmF0ZSk7Ci0KLSAgLy8gU2V0cyB0aGUgdHdvIHRpbWVzdGFtcHMgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiBhdCB8cGxheWJhY2tfcmF0ZV98LgotICAvLyB8dXBwZXJfYm91bmR8IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byB8bG93ZXJfYm91bmR8LgotICAvLwotICAvLyB8dXBwZXJfYm91bmR8IGlzIHR5cGljYWxseSB0aGUgbWVkaWEgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGF1ZGlvIGZyYW1lCi0gIC8vIGJ1ZmZlcmVkIGJ5IHRoZSBhdWRpbyBoYXJkd2FyZS4KLSAgdm9pZCBTZXRCb3VuZHMoYmFzZTo6VGltZURlbHRhIGxvd2VyX2JvdW5kLCBiYXNlOjpUaW1lRGVsdGEgdXBwZXJfYm91bmQsCi0gICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVUaWNrcyBjYXB0dXJlX3RpbWUpOwotCi0gIC8vIFNldHMgdGhlIHVwcGVyIGJvdW5kIHVzZWQgZm9yIGludGVycG9sYXRpb24uIE5vdGUgdGhhdCBpZiB8dXBwZXJfYm91bmR8IGlzCi0gIC8vIGxlc3MgdGhhbiB3aGF0IHdhcyBwcmV2aW91c2x5IHNldCB2aWEgU2V0VGltZSgpLCB0aGVuIGFsbCBmdXR1cmUgY2FsbHMKLSAgLy8gdG8gR2V0SW50ZXJwb2xhdGVkVGltZSgpIHdpbGwgcmV0dXJuIHx1cHBlcl9ib3VuZHwuCi0gIHZvaWQgU2V0VXBwZXJCb3VuZChiYXNlOjpUaW1lRGVsdGEgdXBwZXJfYm91bmQpOwotCi0gIC8vIENvbXB1dGVzIGFuIGludGVycG9sYXRlZCB0aW1lIGJhc2VkIG9uIFNldFRpbWUoKS4KLSAgYmFzZTo6VGltZURlbHRhIEdldEludGVycG9sYXRlZFRpbWUoKTsKLQotIHByaXZhdGU6Ci0gIGJhc2U6OlRpY2tDbG9jayogY29uc3QgdGlja19jbG9ja187Ci0KLSAgYm9vbCBpbnRlcnBvbGF0aW5nXzsKLQotICAvLyBUaGUgcmFuZ2Ugb2YgdGltZSB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuLgotICBiYXNlOjpUaW1lRGVsdGEgbG93ZXJfYm91bmRfOwotICBiYXNlOjpUaW1lRGVsdGEgdXBwZXJfYm91bmRfOwotCi0gIC8vIFRoZSBtb25vdG9uaWMgc3lzdGVtIGNsb2NrIHRpbWUgdXNlZCBmb3IgaW50ZXJwb2xhdGluZyBiZXR3ZWVuCi0gIC8vIHxsb3dlcl9ib3VuZF98IGFuZCB8dXBwZXJfYm91bmRffC4KLSAgYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV87Ci0KLSAgZG91YmxlIHBsYXliYWNrX3JhdGVfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUaW1lRGVsdGFJbnRlcnBvbGF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVElNRV9ERUxUQV9JTlRFUlBPTEFUT1JfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3RpbWVfZGVsdGFfaW50ZXJwb2xhdG9yX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdGltZV9kZWx0YV9pbnRlcnBvbGF0b3JfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NGJmOWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGltZV9kZWx0YV9pbnRlcnBvbGF0b3JfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZV9kZWx0YV9pbnRlcnBvbGF0b3IuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvdGVzdC9zaW1wbGVfdGVzdF90aWNrX2Nsb2NrLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCgpIDogaW50ZXJwb2xhdG9yXygmdGVzdF90aWNrX2Nsb2NrXykgewotICAgIGludGVycG9sYXRvcl8uU2V0UGxheWJhY2tSYXRlKDEuMCk7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgdm9pZCBBZHZhbmNlU3lzdGVtVGltZShiYXNlOjpUaW1lRGVsdGEgZGVsdGEpIHsKLSAgICB0ZXN0X3RpY2tfY2xvY2tfLkFkdmFuY2UoZGVsdGEpOwotICB9Ci0KLSAgYmFzZTo6U2ltcGxlVGVzdFRpY2tDbG9jayB0ZXN0X3RpY2tfY2xvY2tfOwotICBUaW1lRGVsdGFJbnRlcnBvbGF0b3IgaW50ZXJwb2xhdG9yXzsKLX07Ci0KLVRFU1RfRihUaW1lRGVsdGFJbnRlcnBvbGF0b3JUZXN0LCBDcmVhdGVkKSB7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRXhwZWN0ZWQgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDApOwotICBFWFBFQ1RfRVEoa0V4cGVjdGVkLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci19Ci0KLVRFU1RfRihUaW1lRGVsdGFJbnRlcnBvbGF0b3JUZXN0LCBTdGFydEludGVycG9sYXRpbmdfTm9ybWFsU3BlZWQpIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVUb0FkdmFuY2UgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDIpOwotCi0gIEVYUEVDVF9FUShrWmVybywgaW50ZXJwb2xhdG9yXy5TdGFydEludGVycG9sYXRpbmcoKSk7Ci0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtUaW1lVG9BZHZhbmNlKTsKLSAgRVhQRUNUX0VRKGtUaW1lVG9BZHZhbmNlLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci19Ci0KLVRFU1RfRihUaW1lRGVsdGFJbnRlcnBvbGF0b3JUZXN0LCBTdGFydEludGVycG9sYXRpbmdfRG91YmxlU3BlZWQpIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1RpbWVUb0FkdmFuY2UgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDUpOwotCi0gIGludGVycG9sYXRvcl8uU2V0UGxheWJhY2tSYXRlKDIuMCk7Ci0gIEVYUEVDVF9FUShrWmVybywgaW50ZXJwb2xhdG9yXy5TdGFydEludGVycG9sYXRpbmcoKSk7Ci0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtUaW1lVG9BZHZhbmNlKTsKLSAgRVhQRUNUX0VRKDIgKiBrVGltZVRvQWR2YW5jZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU3RhcnRJbnRlcnBvbGF0aW5nX0hhbGZTcGVlZCkgewotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1plcm87Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZVRvQWR2YW5jZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoNCk7Ci0KLSAgaW50ZXJwb2xhdG9yXy5TZXRQbGF5YmFja1JhdGUoMC41KTsKLSAgRVhQRUNUX0VRKGtaZXJvLCBpbnRlcnBvbGF0b3JfLlN0YXJ0SW50ZXJwb2xhdGluZygpKTsKLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1RpbWVUb0FkdmFuY2UpOwotICBFWFBFQ1RfRVEoa1RpbWVUb0FkdmFuY2UgLyAyLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci19Ci0KLVRFU1RfRihUaW1lRGVsdGFJbnRlcnBvbGF0b3JUZXN0LCBTdGFydEludGVycG9sYXRpbmdfWmVyb1NwZWVkKSB7Ci0gIC8vIFdlJ2xsIHBsYXkgZm9yIDIgc2Vjb25kcyBhdCBub3JtYWwgc3BlZWQsIDQgc2Vjb25kcyBhdCB6ZXJvIHNwZWVkLCBhbmQgOAotICAvLyBzZWNvbmRzIGF0IG5vcm1hbCBzcGVlZC4KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1BsYXlEdXJhdGlvbjEgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDIpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1BsYXlEdXJhdGlvbjIgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDQpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1BsYXlEdXJhdGlvbjMgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDgpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0V4cGVjdGVkID0ga1BsYXlEdXJhdGlvbjEgKyBrUGxheUR1cmF0aW9uMzsKLQotICBFWFBFQ1RfRVEoa1plcm8sIGludGVycG9sYXRvcl8uU3RhcnRJbnRlcnBvbGF0aW5nKCkpOwotCi0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtQbGF5RHVyYXRpb24xKTsKLSAgaW50ZXJwb2xhdG9yXy5TZXRQbGF5YmFja1JhdGUoMC4wKTsKLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1BsYXlEdXJhdGlvbjIpOwotICBpbnRlcnBvbGF0b3JfLlNldFBsYXliYWNrUmF0ZSgxLjApOwotICBBZHZhbmNlU3lzdGVtVGltZShrUGxheUR1cmF0aW9uMyk7Ci0KLSAgRVhQRUNUX0VRKGtFeHBlY3RlZCwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU3RhcnRJbnRlcnBvbGF0aW5nX011bHRpU3BlZWQpIHsKLSAgLy8gV2UnbGwgcGxheSBmb3IgMiBzZWNvbmRzIGF0IGhhbGYgc3BlZWQsIDQgc2Vjb25kcyBhdCBub3JtYWwgc3BlZWQsIGFuZCA4Ci0gIC8vIHNlY29uZHMgYXQgZG91YmxlIHNwZWVkLgotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1plcm87Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrUGxheUR1cmF0aW9uMSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMik7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrUGxheUR1cmF0aW9uMiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoNCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrUGxheUR1cmF0aW9uMyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoOCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrRXhwZWN0ZWQgPQotICAgICAga1BsYXlEdXJhdGlvbjEgLyAyICsga1BsYXlEdXJhdGlvbjIgKyAyICoga1BsYXlEdXJhdGlvbjM7Ci0KLSAgaW50ZXJwb2xhdG9yXy5TZXRQbGF5YmFja1JhdGUoMC41KTsKLSAgRVhQRUNUX0VRKGtaZXJvLCBpbnRlcnBvbGF0b3JfLlN0YXJ0SW50ZXJwb2xhdGluZygpKTsKLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1BsYXlEdXJhdGlvbjEpOwotCi0gIGludGVycG9sYXRvcl8uU2V0UGxheWJhY2tSYXRlKDEuMCk7Ci0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtQbGF5RHVyYXRpb24yKTsKLQotICBpbnRlcnBvbGF0b3JfLlNldFBsYXliYWNrUmF0ZSgyLjApOwotICBBZHZhbmNlU3lzdGVtVGltZShrUGxheUR1cmF0aW9uMyk7Ci0gIEVYUEVDVF9FUShrRXhwZWN0ZWQsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLX0KLQotVEVTVF9GKFRpbWVEZWx0YUludGVycG9sYXRvclRlc3QsIFN0b3BJbnRlcnBvbGF0aW5nKSB7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrWmVybzsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtQbGF5RHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDQpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1BhdXNlRHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDIwKTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtFeHBlY3RlZEZpcnN0UGF1c2UgPSBrUGxheUR1cmF0aW9uOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0V4cGVjdGVkU2Vjb25kUGF1c2UgPSAyICoga1BsYXlEdXJhdGlvbjsKLQotICAvLyBQbGF5IGZvciA0IHNlY29uZHMuCi0gIEVYUEVDVF9FUShrWmVybywgaW50ZXJwb2xhdG9yXy5TdGFydEludGVycG9sYXRpbmcoKSk7Ci0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtQbGF5RHVyYXRpb24pOwotCi0gIC8vIFBhdXNlIGZvciAyMCBzZWNvbmRzLgotICBFWFBFQ1RfRVEoa0V4cGVjdGVkRmlyc3RQYXVzZSwgaW50ZXJwb2xhdG9yXy5TdG9wSW50ZXJwb2xhdGluZygpKTsKLSAgRVhQRUNUX0VRKGtFeHBlY3RlZEZpcnN0UGF1c2UsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1BhdXNlRHVyYXRpb24pOwotICBFWFBFQ1RfRVEoa0V4cGVjdGVkRmlyc3RQYXVzZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotCi0gIC8vIFBsYXkgYWdhaW4gZm9yIDQgbW9yZSBzZWNvbmRzLgotICBFWFBFQ1RfRVEoa0V4cGVjdGVkRmlyc3RQYXVzZSwgaW50ZXJwb2xhdG9yXy5TdGFydEludGVycG9sYXRpbmcoKSk7Ci0gIEFkdmFuY2VTeXN0ZW1UaW1lKGtQbGF5RHVyYXRpb24pOwotICBFWFBFQ1RfRVEoa0V4cGVjdGVkU2Vjb25kUGF1c2UsIGludGVycG9sYXRvcl8uU3RvcEludGVycG9sYXRpbmcoKSk7Ci0gIEVYUEVDVF9FUShrRXhwZWN0ZWRTZWNvbmRQYXVzZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU2V0Qm91bmRzX1N0b3BwZWQpIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtGaXJzdFRpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDQpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1NlY29uZFRpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDE2KTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtBcmJpdHJhcnlNYXhUaW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMDApOwotCi0gIGludGVycG9sYXRvcl8uU2V0Qm91bmRzKGtGaXJzdFRpbWUsIGtBcmJpdHJhcnlNYXhUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3RpY2tfY2xvY2tfLk5vd1RpY2tzKCkpOwotICBFWFBFQ1RfRVEoa0ZpcnN0VGltZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotICBpbnRlcnBvbGF0b3JfLlNldEJvdW5kcyhrU2Vjb25kVGltZSwga0FyYml0cmFyeU1heFRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdGlja19jbG9ja18uTm93VGlja3MoKSk7Ci0gIEVYUEVDVF9FUShrU2Vjb25kVGltZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU2V0Qm91bmRzX1N0YXJ0ZWQpIHsKLSAgLy8gV2UnbGwgcGxheSBmb3IgNCBzZWNvbmRzLCB0aGVuIHNldCB0aGUgdGltZSB0byAxMiwgdGhlbiBwbGF5IGZvciA0IG1vcmUKLSAgLy8gc2Vjb25kcy4KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtaZXJvOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1BsYXlEdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoNCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVXBkYXRlZFRpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEyKTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtBcmJpdHJhcnlNYXhUaW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMDApOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga0V4cGVjdGVkID0ga1VwZGF0ZWRUaW1lICsga1BsYXlEdXJhdGlvbjsKLQotICBFWFBFQ1RfRVEoa1plcm8sIGludGVycG9sYXRvcl8uU3RhcnRJbnRlcnBvbGF0aW5nKCkpOwotICBBZHZhbmNlU3lzdGVtVGltZShrUGxheUR1cmF0aW9uKTsKLQotICBpbnRlcnBvbGF0b3JfLlNldEJvdW5kcyhrVXBkYXRlZFRpbWUsIGtBcmJpdHJhcnlNYXhUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3RpY2tfY2xvY2tfLk5vd1RpY2tzKCkpOwotICBBZHZhbmNlU3lzdGVtVGltZShrUGxheUR1cmF0aW9uKTsKLSAgRVhQRUNUX0VRKGtFeHBlY3RlZCwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU2V0VXBwZXJCb3VuZCkgewotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1plcm87Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrVGltZUludGVydmFsID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg0KTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtNYXhUaW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg2KTsKLQotICBFWFBFQ1RfRVEoa1plcm8sIGludGVycG9sYXRvcl8uU3RhcnRJbnRlcnBvbGF0aW5nKCkpOwotICBpbnRlcnBvbGF0b3JfLlNldFVwcGVyQm91bmQoa01heFRpbWUpOwotICBBZHZhbmNlU3lzdGVtVGltZShrVGltZUludGVydmFsKTsKLSAgRVhQRUNUX0VRKGtUaW1lSW50ZXJ2YWwsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLQotICBBZHZhbmNlU3lzdGVtVGltZShrVGltZUludGVydmFsKTsKLSAgRVhQRUNUX0VRKGtNYXhUaW1lLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci0KLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1RpbWVJbnRlcnZhbCk7Ci0gIEVYUEVDVF9FUShrTWF4VGltZSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotfQotCi1URVNUX0YoVGltZURlbHRhSW50ZXJwb2xhdG9yVGVzdCwgU2V0VXBwZXJCb3VuZF9NdWx0aXBsZVRpbWVzKSB7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrWmVybzsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtUaW1lSW50ZXJ2YWwgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDQpOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga01heFRpbWUwID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMjApOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga01heFRpbWUxID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg2KTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtNYXhUaW1lMiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMTIpOwotCi0gIEVYUEVDVF9FUShrWmVybywgaW50ZXJwb2xhdG9yXy5TdGFydEludGVycG9sYXRpbmcoKSk7Ci0gIGludGVycG9sYXRvcl8uU2V0VXBwZXJCb3VuZChrTWF4VGltZTApOwotICBBZHZhbmNlU3lzdGVtVGltZShrVGltZUludGVydmFsKTsKLSAgRVhQRUNUX0VRKGtUaW1lSW50ZXJ2YWwsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLQotICBpbnRlcnBvbGF0b3JfLlNldFVwcGVyQm91bmQoa01heFRpbWUxKTsKLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1RpbWVJbnRlcnZhbCk7Ci0gIEVYUEVDVF9FUShrTWF4VGltZTEsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLQotICBBZHZhbmNlU3lzdGVtVGltZShrVGltZUludGVydmFsKTsKLSAgRVhQRUNUX0VRKGtNYXhUaW1lMSwgaW50ZXJwb2xhdG9yXy5HZXRJbnRlcnBvbGF0ZWRUaW1lKCkpOwotCi0gIGludGVycG9sYXRvcl8uU2V0VXBwZXJCb3VuZChrTWF4VGltZTIpOwotICBFWFBFQ1RfRVEoa01heFRpbWUxLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci0KLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1RpbWVJbnRlcnZhbCk7Ci0gIEVYUEVDVF9FUShrTWF4VGltZTEgKyBrVGltZUludGVydmFsLCBpbnRlcnBvbGF0b3JfLkdldEludGVycG9sYXRlZFRpbWUoKSk7Ci0KLSAgQWR2YW5jZVN5c3RlbVRpbWUoa1RpbWVJbnRlcnZhbCk7Ci0gIEVYUEVDVF9FUShrTWF4VGltZTIsIGludGVycG9sYXRvcl8uR2V0SW50ZXJwb2xhdGVkVGltZSgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90aW1lX3NvdXJjZS5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdGltZV9zb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjMjA1MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS90aW1lX3NvdXJjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1RJTUVfU09VUkNFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1RJTUVfU09VUkNFX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBBIFRpbWVTb3VyY2UgaXMgY2FwYWJsZSBvZiBwcm92aWRpbmcgdGhlIGN1cnJlbnQgbWVkaWEgdGltZS4KLWNsYXNzIE1FRElBX0VYUE9SVCBUaW1lU291cmNlIHsKLSBwdWJsaWM6Ci0gIC8vIEhlbHBlciBhbGlhcyBmb3IgY29udmVydGluZyBtZWRpYSB0aW1lc3RhbXBzIGludG8gYSB3YWxsIGNsb2NrIHRpbWVzdGFtcHMuCi0gIHVzaW5nIFdhbGxDbG9ja1RpbWVDQiA9IGJhc2U6OkNhbGxiYWNrPGJvb2woCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+Jiwgc3RkOjp2ZWN0b3I8YmFzZTo6VGltZVRpY2tzPiopPjsKLQotICBUaW1lU291cmNlKCkge30KLSAgdmlydHVhbCB+VGltZVNvdXJjZSgpIHt9Ci0KLSAgLy8gU2lnbmFsIHRoZSB0aW1lIHNvdXJjZSB0byBzdGFydCB0aWNraW5nLiBJdCBpcyBleHBlY3RlZCB0aGF0IHZhbHVlcyBmcm9tCi0gIC8vIEN1cnJlbnRNZWRpYVRpbWUoKSB3aWxsIHN0YXJ0IGluY3JlYXNpbmcuCi0gIHZpcnR1YWwgdm9pZCBTdGFydFRpY2tpbmcoKSA9IDA7Ci0KLSAgLy8gU2lnbmFsIHRoZSB0aW1lIHNvdXJjZSB0byBzdG9wIHRpY2tpbmcuIEl0IGlzIGV4cGVjdGVkIHRoYXQgdmFsdWVzIGZyb20KLSAgLy8gQ3VycmVudE1lZGlhVGltZSgpIHdpbGwgcmVtYWluIGNvbnN0YW50LgotICB2aXJ0dWFsIHZvaWQgU3RvcFRpY2tpbmcoKSA9IDA7Ci0KLSAgLy8gVXBkYXRlcyB0aGUgY3VycmVudCBwbGF5YmFjayByYXRlLiBJdCBpcyBleHBlY3RlZCB0aGF0IHZhbHVlcyBmcm9tCi0gIC8vIEN1cnJlbnRNZWRpYVRpbWUoKSB3aWxsIGV2ZW50dWFsbHkgcmVmbGVjdCB0aGUgbmV3IHBsYXliYWNrIHJhdGUgKGUuZy4sIHRoZQotICAvLyBtZWRpYSB0aW1lIHdpbGwgYWR2YW5jZSBhdCBoYWxmIHNwZWVkIGlmIHRoZSByYXRlIHdhcyBzZXQgdG8gMC41KS4KLSAgdmlydHVhbCB2b2lkIFNldFBsYXliYWNrUmF0ZShkb3VibGUgcGxheWJhY2tfcmF0ZSkgPSAwOwotCi0gIC8vIFNldHMgdGhlIG1lZGlhIHRpbWUgdG8gc3RhcnQgdGlja2luZyBmcm9tLiBPbmx5IHZhbGlkIHRvIGNhbGwgd2hpbGUgdGhlCi0gIC8vIHRpbWUgc291cmNlIGlzIG5vdCB0aWNraW5nLgotICB2aXJ0dWFsIHZvaWQgU2V0TWVkaWFUaW1lKGJhc2U6OlRpbWVEZWx0YSB0aW1lKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBtZWRpYSB0aW1lc3RhbXAgcmVsYXRpdmUgdG8gdGhlIHRpbWVzdGFtcCBzZXQgYnkKLSAgLy8gU2V0TWVkaWFUaW1lKCkuCi0gIC8vCi0gIC8vIFZhbHVlcyByZXR1cm5lZCBhcmUgaW50ZW5kZWQgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMsIHN1Y2ggYXMgZGlzcGxheWluZwotICAvLyBVSSB3aXRoIHRoZSBjdXJyZW50IG1pbnV0ZSBhbmQgc2Vjb25kIGNvdW50LiBXaGlsZSBpdCBpcyBndWFyYW50ZWVkIHZhbHVlcwotICAvLyB3aWxsIG5ldmVyIGdvIGJhY2t3YXJkcywgdGhlIGZyZXF1ZW5jeSBhdCB3aGljaCB0aGV5IHVwZGF0ZSBtYXkgYmUgbG93LgotICB2aXJ0dWFsIGJhc2U6OlRpbWVEZWx0YSBDdXJyZW50TWVkaWFUaW1lKCkgPSAwOwotCi0gIC8vIENvbnZlcnRzIGEgdmVjdG9yIG9mIG1lZGlhIHRpbWVzdGFtcHMgaW50byBhIHZlY3RvciBvZiB3YWxsIGNsb2NrIHRpbWVzOyBpZgotICAvLyB0aGUgbWVkaWEgdGltZSBpcyBzdG9wcGVkLCByZXR1cm5zIGZhbHNlLCBvdGhlcndpc2UgcmV0dXJucyB0cnVlLiBFdmVuIGlmCi0gIC8vIHRpbWUgaXMgc3RvcHBlZCwgdGltZXN0YW1wcyB3aWxsIGJlIGNvbnZlcnRlZC4KLSAgLy8KLSAgLy8gUGFzc2luZyBhbiBlbXB0eSB8bWVkaWFfdGltZXN0YW1wc3wgdmVjdG9yIHdpbGwgcmV0dXJuIHRoZSBsYXN0IGtub3duIG1lZGlhCi0gIC8vIHRpbWUgYXMgYSB3YWxsIGNsb2NrIHRpbWUuIEFmdGVyIFNldE1lZGlhVGltZSgpIGFuZCBwcmlvciB0byBTdGFydFRpY2tpbmcoKQotICAvLyB0aGUgcmV0dXJuZWQgd2FsbCBjbG9jayB0aW1lIG11c3QgYmUgemVyby4KLSAgLy8KLSAgLy8gV2l0aGluIGEgc2luZ2xlIGNhbGwgdG8gR2V0V2FsbENsb2NrVGltZXMoKSB0aGUgcmV0dXJuZWQgd2FsbCBjbG9jayB0aW1lcwotICAvLyBhcmUgYSBzdHJpY3RseSBpbmNyZWFzaW5nIGZ1bmN0aW9uIG9mIHRoZSBnaXZlbiBtZWRpYSB0aW1lcy4gVGhlcmUgaXMgbm8KLSAgLy8gc3VjaCBndWFyYW50ZWUgYmV0d2VlbiBjYWxscyB0aG91Z2g7IGUuZy4sIHBsYXliYWNrIHJhdGUgb3IgYXVkaW8gZGVsYXkgbWF5Ci0gIC8vIGNoYW5nZSBvbiBvdGhlciB0aHJlYWRzIHdpdGhpbiB0aGUgcGlwZWxpbmUuCi0gIC8vCi0gIC8vIEVhY2ggdGltZXN0YW1wIGNvbnZlcnRlZCBmcm9tIHxtZWRpYV90aW1lc3RhbXBzfCB3aWxsIGJlIHB1c2hlZCBpbnRvCi0gIC8vIHx3YWxsX2Nsb2NrX3RpbWVzfCBzdWNoIHRoYXQgYWZ0ZXIgYWxsIHRpbWVzdGFtcHMgYXJlIGNvbnZlcnRlZCwgdGhlIHR3bwotICAvLyB2ZWN0b3JzIGFyZSBwYXJhbGxlbCAobWVkaWFfdGltZXN0YW1wc1tpXSAtPiB3YWxsX2Nsb2NrX3RpbWVzW2ldKS4KLSAgLy8KLSAgLy8gfG1lZGlhX3RpbWVzdGFtcHN8IHZhbHVlcyB0b28gZmFyIGFoZWFkIG9mIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUgd2lsbAotICAvLyBiZSBjb252ZXJ0ZWQgdG8gYW4gZXN0aW1hdGVkIHZhbHVlOyBhcyBzdWNoLCB0aGVzZSB2YWx1ZXMgbWF5IGdvIGJhY2t3YXJkcwotICAvLyBpbiB0aW1lIHNsaWdodGx5IGJldHdlZW4gY2FsbHMgdG8gR2V0V2FsbENsb2NrVGltZXMoKS4KLSAgLy8KLSAgLy8gfG1lZGlhX3RpbWVzdGFtcHN8IHZhbHVlcyBiZWhpbmQgdGhlIGN1cnJlbnQgbWVkaWEgdGltZSBtYXkgYmUKLSAgLy8gc2lnbmlmaWNhbnRseSBpbmNvcnJlY3QgaWYgdGhlIHBsYXliYWNrIHJhdGUgaGFzIGNoYW5nZWQgcmVjZW50bHkuIFRoZSBvbmx5Ci0gIC8vIGd1YXJhbnRlZSBpcyB0aGF0IHRoZSByZXR1cm5lZCB0aW1lIHdpbGwgYmUgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHdhbGwKLSAgLy8gY2xvY2sgdGltZS4KLSAgdmlydHVhbCBib29sIEdldFdhbGxDbG9ja1RpbWVzKAotICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8YmFzZTo6VGltZURlbHRhPiYgbWVkaWFfdGltZXN0YW1wcywKLSAgICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4qIHdhbGxfY2xvY2tfdGltZXMpID0gMDsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1RJTUVfU09VUkNFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmggYi9jb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MGQyY2IuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9USU1FU1RBTVBfQ09OU1RBTlRTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1RJTUVTVEFNUF9DT05TVEFOVFNfSF8KLQotI2luY2x1ZGUgPGxpbWl0cz4KLQotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSW5kaWNhdGVzIGFuIGludmFsaWQgb3IgbWlzc2luZyB0aW1lc3RhbXAuCi1jb25zdCBiYXNlOjpUaW1lRGVsdGEga05vVGltZXN0YW1wID0KLSAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpOwotCi0vLyBSZXByZXNlbnRzIGFuIGluZmluaXRlIHN0cmVhbSBkdXJhdGlvbi4KLWNvbnN0IGJhc2U6OlRpbWVEZWx0YSBrSW5maW5pdGVEdXJhdGlvbiA9Ci0gICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVElNRVNUQU1QX0NPTlNUQU5UU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGguY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhMWYxYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGguaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aF90ZXN0aW5nLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotCi0vLyBOYUNsIGRvZXMgbm90IGFsbG93IGludHJpbnNpY3MuCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9YODZfRkFNSUxZKSAmJiAhZGVmaW5lZChPU19OQUNMKQotI2luY2x1ZGUgPHhtbWludHJpbi5oPgotLy8gRG9uJ3QgdXNlIGN1c3RvbSBTU0UgdmVyc2lvbnMgd2hlcmUgdGhlIGF1dG8tdmVjdG9yaXplZCBDIHZlcnNpb24gcGVyZm9ybXMKLS8vIGJldHRlciwgd2hpY2ggaXMgYW55d2hlcmUgY2xhbmcgaXMgdXNlZC4KLSNpZiAhZGVmaW5lZChfX2NsYW5nX18pCi0jZGVmaW5lIEZNQUNfRlVOQyBGTUFDX1NTRQotI2RlZmluZSBGTVVMX0ZVTkMgRk1VTF9TU0UKLSNlbHNlCi0jZGVmaW5lIEZNQUNfRlVOQyBGTUFDX0MKLSNkZWZpbmUgRk1VTF9GVU5DIEZNVUxfQwotI2VuZGlmCi0jZGVmaW5lIEVXTUFBbmRNYXhQb3dlcl9GVU5DIEVXTUFBbmRNYXhQb3dlcl9TU0UKLSNlbGlmIGRlZmluZWQoQVJDSF9DUFVfQVJNX0ZBTUlMWSkgJiYgZGVmaW5lZChVU0VfTkVPTikKLSNpbmNsdWRlIDxhcm1fbmVvbi5oPgotI2RlZmluZSBGTUFDX0ZVTkMgRk1BQ19ORU9OCi0jZGVmaW5lIEZNVUxfRlVOQyBGTVVMX05FT04KLSNkZWZpbmUgRVdNQUFuZE1heFBvd2VyX0ZVTkMgRVdNQUFuZE1heFBvd2VyX05FT04KLSNlbHNlCi0jZGVmaW5lIEZNQUNfRlVOQyBGTUFDX0MKLSNkZWZpbmUgRk1VTF9GVU5DIEZNVUxfQwotI2RlZmluZSBFV01BQW5kTWF4UG93ZXJfRlVOQyBFV01BQW5kTWF4UG93ZXJfQwotI2VuZGlmCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSB2ZWN0b3JfbWF0aCB7Ci0KLXZvaWQgRk1BQyhjb25zdCBmbG9hdCBzcmNbXSwgZmxvYXQgc2NhbGUsIGludCBsZW4sIGZsb2F0IGRlc3RbXSkgewotICAvLyBFbnN1cmUgfHNyY3wgYW5kIHxkZXN0fCBhcmUgMTYtYnl0ZSBhbGlnbmVkLgotICBEQ0hFQ0tfRVEoMHUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzcmMpICYgKGtSZXF1aXJlZEFsaWdubWVudCAtIDEpKTsKLSAgRENIRUNLX0VRKDB1LCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGVzdCkgJiAoa1JlcXVpcmVkQWxpZ25tZW50IC0gMSkpOwotICByZXR1cm4gRk1BQ19GVU5DKHNyYywgc2NhbGUsIGxlbiwgZGVzdCk7Ci19Ci0KLXZvaWQgRk1BQ19DKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwgZmxvYXQgZGVzdFtdKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIGRlc3RbaV0gKz0gc3JjW2ldICogc2NhbGU7Ci19Ci0KLXZvaWQgRk1VTChjb25zdCBmbG9hdCBzcmNbXSwgZmxvYXQgc2NhbGUsIGludCBsZW4sIGZsb2F0IGRlc3RbXSkgewotICAvLyBFbnN1cmUgfHNyY3wgYW5kIHxkZXN0fCBhcmUgMTYtYnl0ZSBhbGlnbmVkLgotICBEQ0hFQ0tfRVEoMHUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzcmMpICYgKGtSZXF1aXJlZEFsaWdubWVudCAtIDEpKTsKLSAgRENIRUNLX0VRKDB1LCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGVzdCkgJiAoa1JlcXVpcmVkQWxpZ25tZW50IC0gMSkpOwotICByZXR1cm4gRk1VTF9GVU5DKHNyYywgc2NhbGUsIGxlbiwgZGVzdCk7Ci19Ci0KLXZvaWQgRk1VTF9DKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwgZmxvYXQgZGVzdFtdKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIGRlc3RbaV0gPSBzcmNbaV0gKiBzY2FsZTsKLX0KLQotdm9pZCBDcm9zc2ZhZGUoY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sIGZsb2F0IGRlc3RbXSkgewotICBmbG9hdCBjZl9yYXRpbyA9IDA7Ci0gIGNvbnN0IGZsb2F0IGNmX2luY3JlbWVudCA9IDEuMGYgLyBsZW47Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2ksIGNmX3JhdGlvICs9IGNmX2luY3JlbWVudCkKLSAgICBkZXN0W2ldID0gKDEuMGYgLSBjZl9yYXRpbykgKiBzcmNbaV0gKyBjZl9yYXRpbyAqIGRlc3RbaV07Ci19Ci0KLXN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IEVXTUFBbmRNYXhQb3dlcihmbG9hdCBpbml0aWFsX3ZhbHVlLCBjb25zdCBmbG9hdCBzcmNbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBmbG9hdCBzbW9vdGhpbmdfZmFjdG9yKSB7Ci0gIC8vIEVuc3VyZSB8c3JjfCBpcyAxNi1ieXRlIGFsaWduZWQuCi0gIERDSEVDS19FUSgwdSwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNyYykgJiAoa1JlcXVpcmVkQWxpZ25tZW50IC0gMSkpOwotICByZXR1cm4gRVdNQUFuZE1heFBvd2VyX0ZVTkMoaW5pdGlhbF92YWx1ZSwgc3JjLCBsZW4sIHNtb290aGluZ19mYWN0b3IpOwotfQotCi1zdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBFV01BQW5kTWF4UG93ZXJfQyhmbG9hdCBpbml0aWFsX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzbW9vdGhpbmdfZmFjdG9yKSB7Ci0gIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IHJlc3VsdChpbml0aWFsX3ZhbHVlLCAwLjBmKTsKLSAgY29uc3QgZmxvYXQgd2VpZ2h0X3ByZXYgPSAxLjBmIC0gc21vb3RoaW5nX2ZhY3RvcjsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgIHJlc3VsdC5maXJzdCAqPSB3ZWlnaHRfcHJldjsKLSAgICBjb25zdCBmbG9hdCBzYW1wbGUgPSBzcmNbaV07Ci0gICAgY29uc3QgZmxvYXQgc2FtcGxlX3NxdWFyZWQgPSBzYW1wbGUgKiBzYW1wbGU7Ci0gICAgcmVzdWx0LmZpcnN0ICs9IHNhbXBsZV9zcXVhcmVkICogc21vb3RoaW5nX2ZhY3RvcjsKLSAgICByZXN1bHQuc2Vjb25kID0gc3RkOjptYXgocmVzdWx0LnNlY29uZCwgc2FtcGxlX3NxdWFyZWQpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpICYmICFkZWZpbmVkKE9TX05BQ0wpCi12b2lkIEZNVUxfU1NFKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwgZmxvYXQgZGVzdFtdKSB7Ci0gIGNvbnN0IGludCByZW0gPSBsZW4gJSA0OwotICBjb25zdCBpbnQgbGFzdF9pbmRleCA9IGxlbiAtIHJlbTsKLSAgX19tMTI4IG1fc2NhbGUgPSBfbW1fc2V0X3BzMShzY2FsZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdF9pbmRleDsgaSArPSA0KQotICAgIF9tbV9zdG9yZV9wcyhkZXN0ICsgaSwgX21tX211bF9wcyhfbW1fbG9hZF9wcyhzcmMgKyBpKSwgbV9zY2FsZSkpOwotCi0gIC8vIEhhbmRsZSBhbnkgcmVtYWluaW5nIHZhbHVlcyB0aGF0IHdvdWxkbid0IGZpdCBpbiBhbiBTU0UgcGFzcy4KLSAgZm9yIChpbnQgaSA9IGxhc3RfaW5kZXg7IGkgPCBsZW47ICsraSkgZGVzdFtpXSA9IHNyY1tpXSAqIHNjYWxlOwotfQotCi12b2lkIEZNQUNfU1NFKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwgZmxvYXQgZGVzdFtdKSB7Ci0gIGNvbnN0IGludCByZW0gPSBsZW4gJSA0OwotICBjb25zdCBpbnQgbGFzdF9pbmRleCA9IGxlbiAtIHJlbTsKLSAgX19tMTI4IG1fc2NhbGUgPSBfbW1fc2V0X3BzMShzY2FsZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbGFzdF9pbmRleDsgaSArPSA0KSB7Ci0gICAgX21tX3N0b3JlX3BzKGRlc3QgKyBpLAotICAgICAgICAgICAgICAgICBfbW1fYWRkX3BzKF9tbV9sb2FkX3BzKGRlc3QgKyBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW1fbXVsX3BzKF9tbV9sb2FkX3BzKHNyYyArIGkpLCBtX3NjYWxlKSkpOwotICB9Ci0KLSAgLy8gSGFuZGxlIGFueSByZW1haW5pbmcgdmFsdWVzIHRoYXQgd291bGRuJ3QgZml0IGluIGFuIFNTRSBwYXNzLgotICBmb3IgKGludCBpID0gbGFzdF9pbmRleDsgaSA8IGxlbjsgKytpKSBkZXN0W2ldICs9IHNyY1tpXSAqIHNjYWxlOwotfQotCi0vLyBDb252ZW5pZW5jZSBtYWNybyB0byBleHRyYWN0IGZsb2F0IDAgdGhyb3VnaCAzIGZyb20gdGhlIHZlY3RvciB8YXwuICBUaGlzIGlzCi0vLyBuZWVkZWQgYmVjYXVzZSBjb21waWxlcnMgb3RoZXIgdGhhbiBjbGFuZyBkb24ndCBzdXBwb3J0IGFjY2VzcyB2aWEKLS8vIG9wZXJhdG9yW10oKS4KLSNkZWZpbmUgRVhUUkFDVF9GTE9BVChhLCBpKSBcCi0gIChpID09IDAgPyBfbW1fY3Z0c3NfZjMyKGEpIDogX21tX2N2dHNzX2YzMihfbW1fc2h1ZmZsZV9wcyhhLCBhLCBpKSkpCi0KLXN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IEVXTUFBbmRNYXhQb3dlcl9TU0UoZmxvYXQgaW5pdGlhbF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNtb290aGluZ19mYWN0b3IpIHsKLSAgLy8gV2hlbiB0aGUgcmVjdXJyZW5jZSBpcyB1bnJvbGxlZCwgd2Ugc2VlIHRoYXQgd2UgY2FuIHNwbGl0IGl0IGludG8gNAotICAvLyBzZXBhcmF0ZSBsYW5lcyBvZiBldmFsdWF0aW9uOgotICAvLwotICAvLyB5W25dID0gYShTW25dXjIpICsgKDEtYSkoeVtuLTFdKQotICAvLyAgICAgID0gYShTW25dXjIpICsgKDEtYSleMShhU1tuLTFdXjIpICsgKDEtYSleMihhU1tuLTJdXjIpICsgLi4uCi0gIC8vICAgICAgPSB6W25dICsgKDEtYSleMSh6W24tMV0pICsgKDEtYSleMih6W24tMl0pICsgKDEtYSleMyh6W24tM10pCi0gIC8vCi0gIC8vIHdoZXJlIHpbbl0gPSBhKFNbbl1eMikgKyAoMS1hKV40KHpbbi00XSkgKyAoMS1hKV44KHpbbi04XSkgKyAuLi4KLSAgLy8KLSAgLy8gVGh1cywgdGhlIHN0cmF0ZWd5IGhlcmUgaXMgdG8gY29tcHV0ZSB6W25dLCB6W24tMV0sIHpbbi0yXSwgYW5kIHpbbi0zXSBpbgotICAvLyBlYWNoIG9mIHRoZSA0IGxhbmVzLCBhbmQgdGhlbiBjb21iaW5lIHRoZW0gdG8gZ2l2ZSB5W25dLgotCi0gIGNvbnN0IGludCByZW0gPSBsZW4gJSA0OwotICBjb25zdCBpbnQgbGFzdF9pbmRleCA9IGxlbiAtIHJlbTsKLQotICBjb25zdCBfX20xMjggc21vb3RoaW5nX2ZhY3Rvcl94NCA9IF9tbV9zZXRfcHMxKHNtb290aGluZ19mYWN0b3IpOwotICBjb25zdCBmbG9hdCB3ZWlnaHRfcHJldiA9IDEuMGYgLSBzbW9vdGhpbmdfZmFjdG9yOwotICBjb25zdCBfX20xMjggd2VpZ2h0X3ByZXZfeDQgPSBfbW1fc2V0X3BzMSh3ZWlnaHRfcHJldik7Ci0gIGNvbnN0IF9fbTEyOCB3ZWlnaHRfcHJldl9zcXVhcmVkX3g0ID0KLSAgICAgIF9tbV9tdWxfcHMod2VpZ2h0X3ByZXZfeDQsIHdlaWdodF9wcmV2X3g0KTsKLSAgY29uc3QgX19tMTI4IHdlaWdodF9wcmV2XzR0aF94NCA9Ci0gICAgICBfbW1fbXVsX3BzKHdlaWdodF9wcmV2X3NxdWFyZWRfeDQsIHdlaWdodF9wcmV2X3NxdWFyZWRfeDQpOwotCi0gIC8vIENvbXB1dGUgeltuXSwgeltuLTFdLCB6W24tMl0sIGFuZCB6W24tM10gaW4gcGFyYWxsZWwgaW4gbGFuZXMgMywgMiwgMSBhbmQKLSAgLy8gMCwgcmVzcGVjdGl2ZWx5LgotICBfX20xMjggbWF4X3g0ID0gX21tX3NldHplcm9fcHMoKTsKLSAgX19tMTI4IGV3bWFfeDQgPSBfbW1fc2V0cl9wcygwLjBmLCAwLjBmLCAwLjBmLCBpbml0aWFsX3ZhbHVlKTsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBsYXN0X2luZGV4OyBpICs9IDQpIHsKLSAgICBld21hX3g0ID0gX21tX211bF9wcyhld21hX3g0LCB3ZWlnaHRfcHJldl80dGhfeDQpOwotICAgIGNvbnN0IF9fbTEyOCBzYW1wbGVfeDQgPSBfbW1fbG9hZF9wcyhzcmMgKyBpKTsKLSAgICBjb25zdCBfX20xMjggc2FtcGxlX3NxdWFyZWRfeDQgPSBfbW1fbXVsX3BzKHNhbXBsZV94NCwgc2FtcGxlX3g0KTsKLSAgICBtYXhfeDQgPSBfbW1fbWF4X3BzKG1heF94NCwgc2FtcGxlX3NxdWFyZWRfeDQpOwotICAgIC8vIE5vdGU6IFRoZSBjb21waWxlciBvcHRpbWl6ZXMgdGhpcyB0byBhIHNpbmdsZSBtdWx0aXBseS1hbmQtYWNjdW11bGF0ZQotICAgIC8vIGluc3RydWN0aW9uOgotICAgIGV3bWFfeDQgPQotICAgICAgICBfbW1fYWRkX3BzKGV3bWFfeDQsIF9tbV9tdWxfcHMoc2FtcGxlX3NxdWFyZWRfeDQsIHNtb290aGluZ19mYWN0b3JfeDQpKTsKLSAgfQotCi0gIC8vIHlbbl0gPSB6W25dICsgKDEtYSleMSh6W24tMV0pICsgKDEtYSleMih6W24tMl0pICsgKDEtYSleMyh6W24tM10pCi0gIGZsb2F0IGV3bWEgPSBFWFRSQUNUX0ZMT0FUKGV3bWFfeDQsIDMpOwotICBld21hX3g0ID0gX21tX211bF9wcyhld21hX3g0LCB3ZWlnaHRfcHJldl94NCk7Ci0gIGV3bWEgKz0gRVhUUkFDVF9GTE9BVChld21hX3g0LCAyKTsKLSAgZXdtYV94NCA9IF9tbV9tdWxfcHMoZXdtYV94NCwgd2VpZ2h0X3ByZXZfeDQpOwotICBld21hICs9IEVYVFJBQ1RfRkxPQVQoZXdtYV94NCwgMSk7Ci0gIGV3bWFfeDQgPSBfbW1fbXVsX3NzKGV3bWFfeDQsIHdlaWdodF9wcmV2X3g0KTsKLSAgZXdtYSArPSBFWFRSQUNUX0ZMT0FUKGV3bWFfeDQsIDApOwotCi0gIC8vIEZvbGQgdGhlIG1heGltdW1zIHRvZ2V0aGVyIHRvIGdldCB0aGUgb3ZlcmFsbCBtYXhpbXVtLgotICBtYXhfeDQgPSBfbW1fbWF4X3BzKG1heF94NCwKLSAgICAgICAgICAgICAgICAgICAgICBfbW1fc2h1ZmZsZV9wcyhtYXhfeDQsIG1heF94NCwgX01NX1NIVUZGTEUoMywgMywgMSwgMSkpKTsKLSAgbWF4X3g0ID0gX21tX21heF9zcyhtYXhfeDQsIF9tbV9zaHVmZmxlX3BzKG1heF94NCwgbWF4X3g0LCAyKSk7Ci0KLSAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gcmVzdWx0KGV3bWEsIEVYVFJBQ1RfRkxPQVQobWF4X3g0LCAwKSk7Ci0KLSAgLy8gSGFuZGxlIHJlbWFpbmluZyB2YWx1ZXMgYXQgdGhlIGVuZCBvZiB8c3JjfC4KLSAgZm9yICg7IGkgPCBsZW47ICsraSkgewotICAgIHJlc3VsdC5maXJzdCAqPSB3ZWlnaHRfcHJldjsKLSAgICBjb25zdCBmbG9hdCBzYW1wbGUgPSBzcmNbaV07Ci0gICAgY29uc3QgZmxvYXQgc2FtcGxlX3NxdWFyZWQgPSBzYW1wbGUgKiBzYW1wbGU7Ci0gICAgcmVzdWx0LmZpcnN0ICs9IHNhbXBsZV9zcXVhcmVkICogc21vb3RoaW5nX2ZhY3RvcjsKLSAgICByZXN1bHQuc2Vjb25kID0gc3RkOjptYXgocmVzdWx0LnNlY29uZCwgc2FtcGxlX3NxdWFyZWQpOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiBkZWZpbmVkKFVTRV9ORU9OKQotdm9pZCBGTUFDX05FT04oY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLCBmbG9hdCBkZXN0W10pIHsKLSAgY29uc3QgaW50IHJlbSA9IGxlbiAlIDQ7Ci0gIGNvbnN0IGludCBsYXN0X2luZGV4ID0gbGVuIC0gcmVtOwotICBmbG9hdDMyeDRfdCBtX3NjYWxlID0gdm1vdnFfbl9mMzIoc2NhbGUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RfaW5kZXg7IGkgKz0gNCkgewotICAgIHZzdDFxX2YzMihkZXN0ICsgaSwKLSAgICAgICAgICAgICAgdm1sYXFfZjMyKHZsZDFxX2YzMihkZXN0ICsgaSksIHZsZDFxX2YzMihzcmMgKyBpKSwgbV9zY2FsZSkpOwotICB9Ci0KLSAgLy8gSGFuZGxlIGFueSByZW1haW5pbmcgdmFsdWVzIHRoYXQgd291bGRuJ3QgZml0IGluIGFuIE5FT04gcGFzcy4KLSAgZm9yIChpbnQgaSA9IGxhc3RfaW5kZXg7IGkgPCBsZW47ICsraSkgZGVzdFtpXSArPSBzcmNbaV0gKiBzY2FsZTsKLX0KLQotdm9pZCBGTVVMX05FT04oY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLCBmbG9hdCBkZXN0W10pIHsKLSAgY29uc3QgaW50IHJlbSA9IGxlbiAlIDQ7Ci0gIGNvbnN0IGludCBsYXN0X2luZGV4ID0gbGVuIC0gcmVtOwotICBmbG9hdDMyeDRfdCBtX3NjYWxlID0gdm1vdnFfbl9mMzIoc2NhbGUpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RfaW5kZXg7IGkgKz0gNCkKLSAgICB2c3QxcV9mMzIoZGVzdCArIGksIHZtdWxxX2YzMih2bGQxcV9mMzIoc3JjICsgaSksIG1fc2NhbGUpKTsKLQotICAvLyBIYW5kbGUgYW55IHJlbWFpbmluZyB2YWx1ZXMgdGhhdCB3b3VsZG4ndCBmaXQgaW4gYW4gTkVPTiBwYXNzLgotICBmb3IgKGludCBpID0gbGFzdF9pbmRleDsgaSA8IGxlbjsgKytpKSBkZXN0W2ldID0gc3JjW2ldICogc2NhbGU7Ci19Ci0KLXN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IEVXTUFBbmRNYXhQb3dlcl9ORU9OKGZsb2F0IGluaXRpYWxfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBzcmNbXSwgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNtb290aGluZ19mYWN0b3IpIHsKLSAgLy8gV2hlbiB0aGUgcmVjdXJyZW5jZSBpcyB1bnJvbGxlZCwgd2Ugc2VlIHRoYXQgd2UgY2FuIHNwbGl0IGl0IGludG8gNAotICAvLyBzZXBhcmF0ZSBsYW5lcyBvZiBldmFsdWF0aW9uOgotICAvLwotICAvLyB5W25dID0gYShTW25dXjIpICsgKDEtYSkoeVtuLTFdKQotICAvLyAgICAgID0gYShTW25dXjIpICsgKDEtYSleMShhU1tuLTFdXjIpICsgKDEtYSleMihhU1tuLTJdXjIpICsgLi4uCi0gIC8vICAgICAgPSB6W25dICsgKDEtYSleMSh6W24tMV0pICsgKDEtYSleMih6W24tMl0pICsgKDEtYSleMyh6W24tM10pCi0gIC8vCi0gIC8vIHdoZXJlIHpbbl0gPSBhKFNbbl1eMikgKyAoMS1hKV40KHpbbi00XSkgKyAoMS1hKV44KHpbbi04XSkgKyAuLi4KLSAgLy8KLSAgLy8gVGh1cywgdGhlIHN0cmF0ZWd5IGhlcmUgaXMgdG8gY29tcHV0ZSB6W25dLCB6W24tMV0sIHpbbi0yXSwgYW5kIHpbbi0zXSBpbgotICAvLyBlYWNoIG9mIHRoZSA0IGxhbmVzLCBhbmQgdGhlbiBjb21iaW5lIHRoZW0gdG8gZ2l2ZSB5W25dLgotCi0gIGNvbnN0IGludCByZW0gPSBsZW4gJSA0OwotICBjb25zdCBpbnQgbGFzdF9pbmRleCA9IGxlbiAtIHJlbTsKLQotICBjb25zdCBmbG9hdDMyeDRfdCBzbW9vdGhpbmdfZmFjdG9yX3g0ID0gdmR1cHFfbl9mMzIoc21vb3RoaW5nX2ZhY3Rvcik7Ci0gIGNvbnN0IGZsb2F0IHdlaWdodF9wcmV2ID0gMS4wZiAtIHNtb290aGluZ19mYWN0b3I7Ci0gIGNvbnN0IGZsb2F0MzJ4NF90IHdlaWdodF9wcmV2X3g0ID0gdmR1cHFfbl9mMzIod2VpZ2h0X3ByZXYpOwotICBjb25zdCBmbG9hdDMyeDRfdCB3ZWlnaHRfcHJldl9zcXVhcmVkX3g0ID0KLSAgICAgIHZtdWxxX2YzMih3ZWlnaHRfcHJldl94NCwgd2VpZ2h0X3ByZXZfeDQpOwotICBjb25zdCBmbG9hdDMyeDRfdCB3ZWlnaHRfcHJldl80dGhfeDQgPQotICAgICAgdm11bHFfZjMyKHdlaWdodF9wcmV2X3NxdWFyZWRfeDQsIHdlaWdodF9wcmV2X3NxdWFyZWRfeDQpOwotCi0gIC8vIENvbXB1dGUgeltuXSwgeltuLTFdLCB6W24tMl0sIGFuZCB6W24tM10gaW4gcGFyYWxsZWwgaW4gbGFuZXMgMywgMiwgMSBhbmQKLSAgLy8gMCwgcmVzcGVjdGl2ZWx5LgotICBmbG9hdDMyeDRfdCBtYXhfeDQgPSB2ZHVwcV9uX2YzMigwLjBmKTsKLSAgZmxvYXQzMng0X3QgZXdtYV94NCA9IHZzZXRxX2xhbmVfZjMyKGluaXRpYWxfdmFsdWUsIHZkdXBxX25fZjMyKDAuMGYpLCAzKTsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCBsYXN0X2luZGV4OyBpICs9IDQpIHsKLSAgICBld21hX3g0ID0gdm11bHFfZjMyKGV3bWFfeDQsIHdlaWdodF9wcmV2XzR0aF94NCk7Ci0gICAgY29uc3QgZmxvYXQzMng0X3Qgc2FtcGxlX3g0ID0gdmxkMXFfZjMyKHNyYyArIGkpOwotICAgIGNvbnN0IGZsb2F0MzJ4NF90IHNhbXBsZV9zcXVhcmVkX3g0ID0gdm11bHFfZjMyKHNhbXBsZV94NCwgc2FtcGxlX3g0KTsKLSAgICBtYXhfeDQgPSB2bWF4cV9mMzIobWF4X3g0LCBzYW1wbGVfc3F1YXJlZF94NCk7Ci0gICAgZXdtYV94NCA9IHZtbGFxX2YzMihld21hX3g0LCBzYW1wbGVfc3F1YXJlZF94NCwgc21vb3RoaW5nX2ZhY3Rvcl94NCk7Ci0gIH0KLQotICAvLyB5W25dID0geltuXSArICgxLWEpXjEoeltuLTFdKSArICgxLWEpXjIoeltuLTJdKSArICgxLWEpXjMoeltuLTNdKQotICBmbG9hdCBld21hID0gdmdldHFfbGFuZV9mMzIoZXdtYV94NCwgMyk7Ci0gIGV3bWFfeDQgPSB2bXVscV9mMzIoZXdtYV94NCwgd2VpZ2h0X3ByZXZfeDQpOwotICBld21hICs9IHZnZXRxX2xhbmVfZjMyKGV3bWFfeDQsIDIpOwotICBld21hX3g0ID0gdm11bHFfZjMyKGV3bWFfeDQsIHdlaWdodF9wcmV2X3g0KTsKLSAgZXdtYSArPSB2Z2V0cV9sYW5lX2YzMihld21hX3g0LCAxKTsKLSAgZXdtYV94NCA9IHZtdWxxX2YzMihld21hX3g0LCB3ZWlnaHRfcHJldl94NCk7Ci0gIGV3bWEgKz0gdmdldHFfbGFuZV9mMzIoZXdtYV94NCwgMCk7Ci0KLSAgLy8gRm9sZCB0aGUgbWF4aW11bXMgdG9nZXRoZXIgdG8gZ2V0IHRoZSBvdmVyYWxsIG1heGltdW0uCi0gIGZsb2F0MzJ4Ml90IG1heF94MiA9IHZwbWF4X2YzMih2Z2V0X2xvd19mMzIobWF4X3g0KSwgdmdldF9oaWdoX2YzMihtYXhfeDQpKTsKLSAgbWF4X3gyID0gdnBtYXhfZjMyKG1heF94MiwgbWF4X3gyKTsKLQotICBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiByZXN1bHQoZXdtYSwgdmdldF9sYW5lX2YzMihtYXhfeDIsIDApKTsKLQotICAvLyBIYW5kbGUgcmVtYWluaW5nIHZhbHVlcyBhdCB0aGUgZW5kIG9mIHxzcmN8LgotICBmb3IgKDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgcmVzdWx0LmZpcnN0ICo9IHdlaWdodF9wcmV2OwotICAgIGNvbnN0IGZsb2F0IHNhbXBsZSA9IHNyY1tpXTsKLSAgICBjb25zdCBmbG9hdCBzYW1wbGVfc3F1YXJlZCA9IHNhbXBsZSAqIHNhbXBsZTsKLSAgICByZXN1bHQuZmlyc3QgKz0gc2FtcGxlX3NxdWFyZWQgKiBzbW9vdGhpbmdfZmFjdG9yOwotICAgIHJlc3VsdC5zZWNvbmQgPSBzdGQ6Om1heChyZXN1bHQuc2Vjb25kLCBzYW1wbGVfc3F1YXJlZCk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLX0gIC8vIG5hbWVzcGFjZSB2ZWN0b3JfbWF0aAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aC5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlN2Q5Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WRUNUT1JfTUFUSF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9WRUNUT1JfTUFUSF9IXwotCi0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgdmVjdG9yX21hdGggewotCi0vLyBSZXF1aXJlZCBhbGlnbm1lbnQgZm9yIGlucHV0cyBhbmQgb3V0cHV0cyB0byBhbGwgdmVjdG9yIG1hdGggZnVuY3Rpb25zCi1lbnVtIHsga1JlcXVpcmVkQWxpZ25tZW50ID0gMTYgfTsKLQotLy8gTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHxzcmN8ICh1cCB0byB8bGVufCkgYnkgfHNjYWxlfCBhbmQgYWRkIHRvIHxkZXN0fC4KLS8vIHxzcmN8IGFuZCB8ZGVzdHwgbXVzdCBiZSBhbGlnbmVkIGJ5IGtSZXF1aXJlZEFsaWdubWVudC4KLU1FRElBX0VYUE9SVCB2b2lkIEZNQUMoY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLCBmbG9hdCBkZXN0W10pOwotCi0vLyBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgfHNyY3wgYnkgfHNjYWxlfCBhbmQgc3RvcmUgaW4gfGRlc3R8LiAgfHNyY3wgYW5kCi0vLyB8ZGVzdHwgbXVzdCBiZSBhbGlnbmVkIGJ5IGtSZXF1aXJlZEFsaWdubWVudC4KLU1FRElBX0VYUE9SVCB2b2lkIEZNVUwoY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLCBmbG9hdCBkZXN0W10pOwotCi0vLyBDb21wdXRlcyB0aGUgZXhwb25lbnRpYWxseS13ZWlnaHRlZCBtb3ZpbmcgYXZlcmFnZSBwb3dlciBvZiBhIHNpZ25hbCBieQotLy8gaXRlcmF0aW5nIHRoZSByZWN1cnJlbmNlOgotLy8KLS8vICAgeVstMV0gPSBpbml0aWFsX3ZhbHVlCi0vLyAgIHlbbl0gPSBzbW9vdGhpbmdfZmFjdG9yICogc3JjW25dXjIgKyAoMS1zbW9vdGhpbmdfZmFjdG9yKSAqIHlbbi0xXQotLy8KLS8vIFJldHVybnMgdGhlIGZpbmFsIGF2ZXJhZ2UgcG93ZXIgYW5kIHRoZSBtYXhpbXVtIHNxdWFyZWQgZWxlbWVudCB2YWx1ZS4KLU1FRElBX0VYUE9SVCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBFV01BQW5kTWF4UG93ZXIoZmxvYXQgaW5pdGlhbF92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNtb290aGluZ19mYWN0b3IpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBDcm9zc2ZhZGUoY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sIGZsb2F0IGRlc3RbXSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB2ZWN0b3JfbWF0aAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVkVDVE9SX01BVEhfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZlY3Rvcl9tYXRoX3BlcmZ0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfcGVyZnRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWE0ZjYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfcGVyZnRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvYWxpZ25lZF9tZW1vcnkuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZlY3Rvcl9tYXRoLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfdGVzdGluZy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotI2luY2x1ZGUgInRlc3RpbmcvcGVyZi9wZXJmX3Rlc3QuaCIKLQotdXNpbmcgYmFzZTo6VGltZVRpY2tzOwotdXNpbmcgc3RkOjpmaWxsOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQga0JlbmNobWFya0l0ZXJhdGlvbnMgPSAyMDAwMDA7Ci1zdGF0aWMgY29uc3QgaW50IGtFV01BQmVuY2htYXJrSXRlcmF0aW9ucyA9IDUwMDAwOwotc3RhdGljIGNvbnN0IGZsb2F0IGtTY2FsZSA9IDAuNTsKLXN0YXRpYyBjb25zdCBpbnQga1ZlY3RvclNpemUgPSA4MTkyOwotCi1jbGFzcyBWZWN0b3JNYXRoUGVyZlRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBWZWN0b3JNYXRoUGVyZlRlc3QoKSB7Ci0gICAgLy8gSW5pdGlhbGl6ZSBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvcnMuCi0gICAgaW5wdXRfdmVjdG9yXy5yZXNldChzdGF0aWNfY2FzdDxmbG9hdCo+KGJhc2U6OkFsaWduZWRBbGxvYygKLSAgICAgICAgc2l6ZW9mKGZsb2F0KSAqIGtWZWN0b3JTaXplLCB2ZWN0b3JfbWF0aDo6a1JlcXVpcmVkQWxpZ25tZW50KSkpOwotICAgIG91dHB1dF92ZWN0b3JfLnJlc2V0KHN0YXRpY19jYXN0PGZsb2F0Kj4oYmFzZTo6QWxpZ25lZEFsbG9jKAotICAgICAgICBzaXplb2YoZmxvYXQpICoga1ZlY3RvclNpemUsIHZlY3Rvcl9tYXRoOjprUmVxdWlyZWRBbGlnbm1lbnQpKSk7Ci0gICAgZmlsbChpbnB1dF92ZWN0b3JfLmdldCgpLCBpbnB1dF92ZWN0b3JfLmdldCgpICsga1ZlY3RvclNpemUsIDEuMGYpOwotICAgIGZpbGwob3V0cHV0X3ZlY3Rvcl8uZ2V0KCksIG91dHB1dF92ZWN0b3JfLmdldCgpICsga1ZlY3RvclNpemUsIDAuMGYpOwotICB9Ci0KLSAgdm9pZCBSdW5CZW5jaG1hcmsodm9pZCAoKmZuKShjb25zdCBmbG9hdFtdLCBmbG9hdCwgaW50LCBmbG9hdFtdKSwKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGlnbmVkLCBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdHJhY2VfbmFtZSkgewotICAgIFRpbWVUaWNrcyBzdGFydCA9IFRpbWVUaWNrczo6Tm93KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrQmVuY2htYXJrSXRlcmF0aW9uczsgKytpKSB7Ci0gICAgICBmbihpbnB1dF92ZWN0b3JfLmdldCgpLCBrU2NhbGUsIGtWZWN0b3JTaXplIC0gKGFsaWduZWQgPyAwIDogMSksCi0gICAgICAgICBvdXRwdXRfdmVjdG9yXy5nZXQoKSk7Ci0gICAgfQotICAgIGRvdWJsZSB0b3RhbF90aW1lX21pbGxpc2Vjb25kcyA9Ci0gICAgICAgIChUaW1lVGlja3M6Ok5vdygpIC0gc3RhcnQpLkluTWlsbGlzZWNvbmRzRigpOwotICAgIHBlcmZfdGVzdDo6UHJpbnRSZXN1bHQodGVzdF9uYW1lLCAiIiwgdHJhY2VfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtCZW5jaG1hcmtJdGVyYXRpb25zIC8gdG90YWxfdGltZV9taWxsaXNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicnVucy9tcyIsIHRydWUpOwotICB9Ci0KLSAgdm9pZCBSdW5CZW5jaG1hcmsoc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gKCpmbikoZmxvYXQsIGNvbnN0IGZsb2F0W10sIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQpLAotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBjb25zdCBzdGQ6OnN0cmluZyYgdGVzdF9uYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdHJhY2VfbmFtZSkgewotICAgIFRpbWVUaWNrcyBzdGFydCA9IFRpbWVUaWNrczo6Tm93KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrRVdNQUJlbmNobWFya0l0ZXJhdGlvbnM7ICsraSkgewotICAgICAgZm4oMC41ZiwgaW5wdXRfdmVjdG9yXy5nZXQoKSwgbGVuLCAwLjFmKTsKLSAgICB9Ci0gICAgZG91YmxlIHRvdGFsX3RpbWVfbWlsbGlzZWNvbmRzID0KLSAgICAgICAgKFRpbWVUaWNrczo6Tm93KCkgLSBzdGFydCkuSW5NaWxsaXNlY29uZHNGKCk7Ci0gICAgcGVyZl90ZXN0OjpQcmludFJlc3VsdCh0ZXN0X25hbWUsICIiLCB0cmFjZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0VXTUFCZW5jaG1hcmtJdGVyYXRpb25zIC8gdG90YWxfdGltZV9taWxsaXNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicnVucy9tcyIsIHRydWUpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHN0ZDo6dW5pcXVlX3B0cjxmbG9hdCwgYmFzZTo6QWxpZ25lZEZyZWVEZWxldGVyPiBpbnB1dF92ZWN0b3JfOwotICBzdGQ6OnVuaXF1ZV9wdHI8ZmxvYXQsIGJhc2U6OkFsaWduZWRGcmVlRGVsZXRlcj4gb3V0cHV0X3ZlY3Rvcl87Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmVjdG9yTWF0aFBlcmZUZXN0KTsKLX07Ci0KLS8vIERlZmluZSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gbmFtZXMgZm9yIFNJTUQgb3B0aW1pemVkIG1ldGhvZHMuCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9YODZfRkFNSUxZKQotI2RlZmluZSBGTUFDX0ZVTkMgRk1BQ19TU0UKLSNkZWZpbmUgRk1VTF9GVU5DIEZNVUxfU1NFCi0jZGVmaW5lIEVXTUFBbmRNYXhQb3dlcl9GVU5DIEVXTUFBbmRNYXhQb3dlcl9TU0UKLSNlbGlmIGRlZmluZWQoQVJDSF9DUFVfQVJNX0ZBTUlMWSkgJiYgZGVmaW5lZChVU0VfTkVPTikKLSNkZWZpbmUgRk1BQ19GVU5DIEZNQUNfTkVPTgotI2RlZmluZSBGTVVMX0ZVTkMgRk1VTF9ORU9OCi0jZGVmaW5lIEVXTUFBbmRNYXhQb3dlcl9GVU5DIEVXTUFBbmRNYXhQb3dlcl9ORU9OCi0jZW5kaWYKLQotLy8gQmVuY2htYXJrIGZvciBlYWNoIG9wdGltaXplZCB2ZWN0b3JfbWF0aDo6Rk1BQygpIG1ldGhvZC4KLVRFU1RfRihWZWN0b3JNYXRoUGVyZlRlc3QsIEZNQUMpIHsKLSAgLy8gQmVuY2htYXJrIEZNQUNfQygpLgotICBSdW5CZW5jaG1hcmsodmVjdG9yX21hdGg6OkZNQUNfQywgdHJ1ZSwgInZlY3Rvcl9tYXRoX2ZtYWMiLCAidW5vcHRpbWl6ZWQiKTsKLSNpZiBkZWZpbmVkKEZNQUNfRlVOQykKLSAgLy8gQmVuY2htYXJrIEZNQUNfRlVOQygpIHdpdGggdW5hbGlnbmVkIHNpemUuCi0gIEFTU0VSVF9ORSgKLSAgICAgIChrVmVjdG9yU2l6ZSAtIDEpICUgKHZlY3Rvcl9tYXRoOjprUmVxdWlyZWRBbGlnbm1lbnQgLyBzaXplb2YoZmxvYXQpKSwKLSAgICAgIDBVKTsKLSAgUnVuQmVuY2htYXJrKHZlY3Rvcl9tYXRoOjpGTUFDX0ZVTkMsIGZhbHNlLCAidmVjdG9yX21hdGhfZm1hYyIsCi0gICAgICAgICAgICAgICAib3B0aW1pemVkX3VuYWxpZ25lZCIpOwotICAvLyBCZW5jaG1hcmsgRk1BQ19GVU5DKCkgd2l0aCBhbGlnbmVkIHNpemUuCi0gIEFTU0VSVF9FUShrVmVjdG9yU2l6ZSAlICh2ZWN0b3JfbWF0aDo6a1JlcXVpcmVkQWxpZ25tZW50IC8gc2l6ZW9mKGZsb2F0KSksCi0gICAgICAgICAgICAwVSk7Ci0gIFJ1bkJlbmNobWFyayh2ZWN0b3JfbWF0aDo6Rk1BQ19GVU5DLCB0cnVlLCAidmVjdG9yX21hdGhfZm1hYyIsCi0gICAgICAgICAgICAgICAib3B0aW1pemVkX2FsaWduZWQiKTsKLSNlbmRpZgotfQotCi0vLyBCZW5jaG1hcmsgZm9yIGVhY2ggb3B0aW1pemVkIHZlY3Rvcl9tYXRoOjpGTVVMKCkgbWV0aG9kLgotVEVTVF9GKFZlY3Rvck1hdGhQZXJmVGVzdCwgRk1VTCkgewotICAvLyBCZW5jaG1hcmsgRk1VTF9DKCkuCi0gIFJ1bkJlbmNobWFyayh2ZWN0b3JfbWF0aDo6Rk1VTF9DLCB0cnVlLCAidmVjdG9yX21hdGhfZm11bCIsICJ1bm9wdGltaXplZCIpOwotI2lmIGRlZmluZWQoRk1VTF9GVU5DKQotICAvLyBCZW5jaG1hcmsgRk1VTF9GVU5DKCkgd2l0aCB1bmFsaWduZWQgc2l6ZS4KLSAgQVNTRVJUX05FKAotICAgICAgKGtWZWN0b3JTaXplIC0gMSkgJSAodmVjdG9yX21hdGg6OmtSZXF1aXJlZEFsaWdubWVudCAvIHNpemVvZihmbG9hdCkpLAotICAgICAgMFUpOwotICBSdW5CZW5jaG1hcmsodmVjdG9yX21hdGg6OkZNVUxfRlVOQywgZmFsc2UsICJ2ZWN0b3JfbWF0aF9mbXVsIiwKLSAgICAgICAgICAgICAgICJvcHRpbWl6ZWRfdW5hbGlnbmVkIik7Ci0gIC8vIEJlbmNobWFyayBGTVVMX0ZVTkMoKSB3aXRoIGFsaWduZWQgc2l6ZS4KLSAgQVNTRVJUX0VRKGtWZWN0b3JTaXplICUgKHZlY3Rvcl9tYXRoOjprUmVxdWlyZWRBbGlnbm1lbnQgLyBzaXplb2YoZmxvYXQpKSwKLSAgICAgICAgICAgIDBVKTsKLSAgUnVuQmVuY2htYXJrKHZlY3Rvcl9tYXRoOjpGTVVMX0ZVTkMsIHRydWUsICJ2ZWN0b3JfbWF0aF9mbXVsIiwKLSAgICAgICAgICAgICAgICJvcHRpbWl6ZWRfYWxpZ25lZCIpOwotI2VuZGlmCi19Ci0KLS8vIEJlbmNobWFyayBmb3IgZWFjaCBvcHRpbWl6ZWQgdmVjdG9yX21hdGg6OkVXTUFBbmRNYXhQb3dlcigpIG1ldGhvZC4KLVRFU1RfRihWZWN0b3JNYXRoUGVyZlRlc3QsIEVXTUFBbmRNYXhQb3dlcikgewotICAvLyBCZW5jaG1hcmsgRVdNQUFuZE1heFBvd2VyX0MoKS4KLSAgUnVuQmVuY2htYXJrKHZlY3Rvcl9tYXRoOjpFV01BQW5kTWF4UG93ZXJfQywga1ZlY3RvclNpemUsCi0gICAgICAgICAgICAgICAidmVjdG9yX21hdGhfZXdtYV9hbmRfbWF4X3Bvd2VyIiwgInVub3B0aW1pemVkIik7Ci0jaWYgZGVmaW5lZChFV01BQW5kTWF4UG93ZXJfRlVOQykKLSAgLy8gQmVuY2htYXJrIEVXTUFBbmRNYXhQb3dlcl9GVU5DKCkgd2l0aCB1bmFsaWduZWQgc2l6ZS4KLSAgQVNTRVJUX05FKAotICAgICAgKGtWZWN0b3JTaXplIC0gMSkgJSAodmVjdG9yX21hdGg6OmtSZXF1aXJlZEFsaWdubWVudCAvIHNpemVvZihmbG9hdCkpLAotICAgICAgMFUpOwotICBSdW5CZW5jaG1hcmsodmVjdG9yX21hdGg6OkVXTUFBbmRNYXhQb3dlcl9GVU5DLCBrVmVjdG9yU2l6ZSAtIDEsCi0gICAgICAgICAgICAgICAidmVjdG9yX21hdGhfZXdtYV9hbmRfbWF4X3Bvd2VyIiwgIm9wdGltaXplZF91bmFsaWduZWQiKTsKLSAgLy8gQmVuY2htYXJrIEVXTUFBbmRNYXhQb3dlcl9GVU5DKCkgd2l0aCBhbGlnbmVkIHNpemUuCi0gIEFTU0VSVF9FUShrVmVjdG9yU2l6ZSAlICh2ZWN0b3JfbWF0aDo6a1JlcXVpcmVkQWxpZ25tZW50IC8gc2l6ZW9mKGZsb2F0KSksCi0gICAgICAgICAgICAwVSk7Ci0gIFJ1bkJlbmNobWFyayh2ZWN0b3JfbWF0aDo6RVdNQUFuZE1heFBvd2VyX0ZVTkMsIGtWZWN0b3JTaXplLAotICAgICAgICAgICAgICAgInZlY3Rvcl9tYXRoX2V3bWFfYW5kX21heF9wb3dlciIsICJvcHRpbWl6ZWRfYWxpZ25lZCIpOwotI2VuZGlmCi19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfdGVzdGluZy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfdGVzdGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmRjZWM5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZlY3Rvcl9tYXRoX3Rlc3RpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0JBU0VfVkVDVE9SX01BVEhfVEVTVElOR19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9WRUNUT1JfTUFUSF9URVNUSU5HX0hfCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSB2ZWN0b3JfbWF0aCB7Ci0KLS8vIE9wdGltaXplZCB2ZXJzaW9ucyBleHBvc2VkIGZvciB0ZXN0aW5nLiAgU2VlIHZlY3Rvcl9tYXRoLmggZm9yIGRldGFpbHMuCi1NRURJQV9FWFBPUlQgdm9pZCBGTUFDX0MoY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLCBmbG9hdCBkZXN0W10pOwotTUVESUFfRVhQT1JUIHZvaWQgRk1VTF9DKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwgZmxvYXQgZGVzdFtdKTsKLU1FRElBX0VYUE9SVCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBFV01BQW5kTWF4UG93ZXJfQyhmbG9hdCBpbml0aWFsX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IHNyY1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc21vb3RoaW5nX2ZhY3Rvcik7Ci0KLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpICYmICFkZWZpbmVkKE9TX05BQ0wpCi1NRURJQV9FWFBPUlQgdm9pZCBGTUFDX1NTRShjb25zdCBmbG9hdCBzcmNbXSwgZmxvYXQgc2NhbGUsIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXN0W10pOwotTUVESUFfRVhQT1JUIHZvaWQgRk1VTF9TU0UoY29uc3QgZmxvYXQgc3JjW10sIGZsb2F0IHNjYWxlLCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVzdFtdKTsKLU1FRElBX0VYUE9SVCBzdGQ6OnBhaXI8ZmxvYXQsIGZsb2F0PiBFV01BQW5kTWF4UG93ZXJfU1NFKAotICAgIGZsb2F0IGluaXRpYWxfdmFsdWUsIGNvbnN0IGZsb2F0IHNyY1tdLCBpbnQgbGVuLCBmbG9hdCBzbW9vdGhpbmdfZmFjdG9yKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiBkZWZpbmVkKFVTRV9ORU9OKQotTUVESUFfRVhQT1JUIHZvaWQgRk1BQ19ORU9OKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXN0W10pOwotTUVESUFfRVhQT1JUIHZvaWQgRk1VTF9ORU9OKGNvbnN0IGZsb2F0IHNyY1tdLCBmbG9hdCBzY2FsZSwgaW50IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZXN0W10pOwotTUVESUFfRVhQT1JUIHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+IEVXTUFBbmRNYXhQb3dlcl9ORU9OKAotICAgIGZsb2F0IGluaXRpYWxfdmFsdWUsIGNvbnN0IGZsb2F0IHNyY1tdLCBpbnQgbGVuLCBmbG9hdCBzbW9vdGhpbmdfZmFjdG9yKTsKLSNlbmRpZgotCi19ICAvLyBuYW1lc3BhY2UgdmVjdG9yX21hdGgKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1ZFQ1RPUl9NQVRIX1RFU1RJTkdfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZlY3Rvcl9tYXRoX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNWE3ZTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGhfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gTVNWQysrIHJlcXVpcmVzIHRoaXMgdG8gYmUgc2V0IGJlZm9yZSBhbnkgb3RoZXIgaW5jbHVkZXMgdG8gZ2V0IE1fUEkuCi0jZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTCi0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9hbGlnbmVkX21lbW9yeS5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5naXplX21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmVjdG9yX21hdGguaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92ZWN0b3JfbWF0aF90ZXN0aW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyBzdGQ6OmZpbGw7Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gRGVmYXVsdCB0ZXN0IHZhbHVlcy4KLXN0YXRpYyBjb25zdCBmbG9hdCBrU2NhbGUgPSAwLjU7Ci1zdGF0aWMgY29uc3QgZmxvYXQga0lucHV0RmlsbFZhbHVlID0gMS4wOwotc3RhdGljIGNvbnN0IGZsb2F0IGtPdXRwdXRGaWxsVmFsdWUgPSAzLjA7Ci1zdGF0aWMgY29uc3QgaW50IGtWZWN0b3JTaXplID0gODE5MjsKLQotY2xhc3MgVmVjdG9yTWF0aFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBWZWN0b3JNYXRoVGVzdCgpIHsKLSAgICAvLyBJbml0aWFsaXplIGlucHV0IGFuZCBvdXRwdXQgdmVjdG9ycy4KLSAgICBpbnB1dF92ZWN0b3JfLnJlc2V0KHN0YXRpY19jYXN0PGZsb2F0Kj4oYmFzZTo6QWxpZ25lZEFsbG9jKAotICAgICAgICBzaXplb2YoZmxvYXQpICoga1ZlY3RvclNpemUsIHZlY3Rvcl9tYXRoOjprUmVxdWlyZWRBbGlnbm1lbnQpKSk7Ci0gICAgb3V0cHV0X3ZlY3Rvcl8ucmVzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQqPihiYXNlOjpBbGlnbmVkQWxsb2MoCi0gICAgICAgIHNpemVvZihmbG9hdCkgKiBrVmVjdG9yU2l6ZSwgdmVjdG9yX21hdGg6OmtSZXF1aXJlZEFsaWdubWVudCkpKTsKLSAgfQotCi0gIHZvaWQgRmlsbFRlc3RWZWN0b3JzKGZsb2F0IGlucHV0LCBmbG9hdCBvdXRwdXQpIHsKLSAgICAvLyBTZXR1cCBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvcnMuCi0gICAgZmlsbChpbnB1dF92ZWN0b3JfLmdldCgpLCBpbnB1dF92ZWN0b3JfLmdldCgpICsga1ZlY3RvclNpemUsIGlucHV0KTsKLSAgICBmaWxsKG91dHB1dF92ZWN0b3JfLmdldCgpLCBvdXRwdXRfdmVjdG9yXy5nZXQoKSArIGtWZWN0b3JTaXplLCBvdXRwdXQpOwotICB9Ci0KLSAgdm9pZCBWZXJpZnlPdXRwdXQoZmxvYXQgdmFsdWUpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtWZWN0b3JTaXplOyArK2kpCi0gICAgICBBU1NFUlRfRkxPQVRfRVEob3V0cHV0X3ZlY3Rvcl9baV0sIHZhbHVlKTsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBzdGQ6OnVuaXF1ZV9wdHI8ZmxvYXRbXSwgYmFzZTo6QWxpZ25lZEZyZWVEZWxldGVyPiBpbnB1dF92ZWN0b3JfOwotICBzdGQ6OnVuaXF1ZV9wdHI8ZmxvYXRbXSwgYmFzZTo6QWxpZ25lZEZyZWVEZWxldGVyPiBvdXRwdXRfdmVjdG9yXzsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZWN0b3JNYXRoVGVzdCk7Ci19OwotCi0vLyBFbnN1cmUgZWFjaCBvcHRpbWl6ZWQgdmVjdG9yX21hdGg6OkZNQUMoKSBtZXRob2QgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZS4KLVRFU1RfRihWZWN0b3JNYXRoVGVzdCwgRk1BQykgewotICBzdGF0aWMgY29uc3QgZmxvYXQga1Jlc3VsdCA9IGtJbnB1dEZpbGxWYWx1ZSAqIGtTY2FsZSArIGtPdXRwdXRGaWxsVmFsdWU7Ci0KLSAgewotICAgIFNDT1BFRF9UUkFDRSgiRk1BQyIpOwotICAgIEZpbGxUZXN0VmVjdG9ycyhrSW5wdXRGaWxsVmFsdWUsIGtPdXRwdXRGaWxsVmFsdWUpOwotICAgIHZlY3Rvcl9tYXRoOjpGTUFDKGlucHV0X3ZlY3Rvcl8uZ2V0KCksIGtTY2FsZSwga1ZlY3RvclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3ZlY3Rvcl8uZ2V0KCkpOwotICAgIFZlcmlmeU91dHB1dChrUmVzdWx0KTsKLSAgfQotCi0gIHsKLSAgICBTQ09QRURfVFJBQ0UoIkZNQUNfQyIpOwotICAgIEZpbGxUZXN0VmVjdG9ycyhrSW5wdXRGaWxsVmFsdWUsIGtPdXRwdXRGaWxsVmFsdWUpOwotICAgIHZlY3Rvcl9tYXRoOjpGTUFDX0MoaW5wdXRfdmVjdG9yXy5nZXQoKSwga1NjYWxlLCBrVmVjdG9yU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF92ZWN0b3JfLmdldCgpKTsKLSAgICBWZXJpZnlPdXRwdXQoa1Jlc3VsdCk7Ci0gIH0KLQotI2lmIGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkKLSAgewotICAgIFNDT1BFRF9UUkFDRSgiRk1BQ19TU0UiKTsKLSAgICBGaWxsVGVzdFZlY3RvcnMoa0lucHV0RmlsbFZhbHVlLCBrT3V0cHV0RmlsbFZhbHVlKTsKLSAgICB2ZWN0b3JfbWF0aDo6Rk1BQ19TU0UoaW5wdXRfdmVjdG9yXy5nZXQoKSwga1NjYWxlLCBrVmVjdG9yU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3ZlY3Rvcl8uZ2V0KCkpOwotICAgIFZlcmlmeU91dHB1dChrUmVzdWx0KTsKLSAgfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX0FSTV9GQU1JTFkpICYmIGRlZmluZWQoVVNFX05FT04pCi0gIHsKLSAgICBTQ09QRURfVFJBQ0UoIkZNQUNfTkVPTiIpOwotICAgIEZpbGxUZXN0VmVjdG9ycyhrSW5wdXRGaWxsVmFsdWUsIGtPdXRwdXRGaWxsVmFsdWUpOwotICAgIHZlY3Rvcl9tYXRoOjpGTUFDX05FT04oaW5wdXRfdmVjdG9yXy5nZXQoKSwga1NjYWxlLCBrVmVjdG9yU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF92ZWN0b3JfLmdldCgpKTsKLSAgICBWZXJpZnlPdXRwdXQoa1Jlc3VsdCk7Ci0gIH0KLSNlbmRpZgotfQotCi0vLyBFbnN1cmUgZWFjaCBvcHRpbWl6ZWQgdmVjdG9yX21hdGg6OkZNVUwoKSBtZXRob2QgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZS4KLVRFU1RfRihWZWN0b3JNYXRoVGVzdCwgRk1VTCkgewotICBzdGF0aWMgY29uc3QgZmxvYXQga1Jlc3VsdCA9IGtJbnB1dEZpbGxWYWx1ZSAqIGtTY2FsZTsKLQotICB7Ci0gICAgU0NPUEVEX1RSQUNFKCJGTVVMIik7Ci0gICAgRmlsbFRlc3RWZWN0b3JzKGtJbnB1dEZpbGxWYWx1ZSwga091dHB1dEZpbGxWYWx1ZSk7Ci0gICAgdmVjdG9yX21hdGg6OkZNVUwoaW5wdXRfdmVjdG9yXy5nZXQoKSwga1NjYWxlLCBrVmVjdG9yU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdmVjdG9yXy5nZXQoKSk7Ci0gICAgVmVyaWZ5T3V0cHV0KGtSZXN1bHQpOwotICB9Ci0KLSAgewotICAgIFNDT1BFRF9UUkFDRSgiRk1VTF9DIik7Ci0gICAgRmlsbFRlc3RWZWN0b3JzKGtJbnB1dEZpbGxWYWx1ZSwga091dHB1dEZpbGxWYWx1ZSk7Ci0gICAgdmVjdG9yX21hdGg6OkZNVUxfQyhpbnB1dF92ZWN0b3JfLmdldCgpLCBrU2NhbGUsIGtWZWN0b3JTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3ZlY3Rvcl8uZ2V0KCkpOwotICAgIFZlcmlmeU91dHB1dChrUmVzdWx0KTsKLSAgfQotCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9YODZfRkFNSUxZKQotICB7Ci0gICAgU0NPUEVEX1RSQUNFKCJGTVVMX1NTRSIpOwotICAgIEZpbGxUZXN0VmVjdG9ycyhrSW5wdXRGaWxsVmFsdWUsIGtPdXRwdXRGaWxsVmFsdWUpOwotICAgIHZlY3Rvcl9tYXRoOjpGTVVMX1NTRShpbnB1dF92ZWN0b3JfLmdldCgpLCBrU2NhbGUsIGtWZWN0b3JTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdmVjdG9yXy5nZXQoKSk7Ci0gICAgVmVyaWZ5T3V0cHV0KGtSZXN1bHQpOwotICB9Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQVJDSF9DUFVfQVJNX0ZBTUlMWSkgJiYgZGVmaW5lZChVU0VfTkVPTikKLSAgewotICAgIFNDT1BFRF9UUkFDRSgiRk1VTF9ORU9OIik7Ci0gICAgRmlsbFRlc3RWZWN0b3JzKGtJbnB1dEZpbGxWYWx1ZSwga091dHB1dEZpbGxWYWx1ZSk7Ci0gICAgdmVjdG9yX21hdGg6OkZNVUxfTkVPTihpbnB1dF92ZWN0b3JfLmdldCgpLCBrU2NhbGUsIGtWZWN0b3JTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3ZlY3Rvcl8uZ2V0KCkpOwotICAgIFZlcmlmeU91dHB1dChrUmVzdWx0KTsKLSAgfQotI2VuZGlmCi19Ci0KLVRFU1RfRihWZWN0b3JNYXRoVGVzdCwgQ3Jvc3NmYWRlKSB7Ci0gIEZpbGxUZXN0VmVjdG9ycygwLCAxKTsKLSAgdmVjdG9yX21hdGg6OkNyb3NzZmFkZShpbnB1dF92ZWN0b3JfLmdldCgpLCBrVmVjdG9yU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfdmVjdG9yXy5nZXQoKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1ZlY3RvclNpemU7ICsraSkgewotICAgIEFTU0VSVF9GTE9BVF9FUShpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGtWZWN0b3JTaXplKSwgb3V0cHV0X3ZlY3Rvcl9baV0pCi0gICAgICAgIDw8ICJpPSIgPDwgaTsKLSAgfQotfQotCi1jbGFzcyBFV01BVGVzdFNjZW5hcmlvIHsKLSBwdWJsaWM6Ci0gIEVXTUFUZXN0U2NlbmFyaW8oZmxvYXQgaW5pdGlhbF92YWx1ZSwgY29uc3QgZmxvYXQgc3JjW10sIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgZmxvYXQgc21vb3RoaW5nX2ZhY3RvcikKLSAgICAgIDogaW5pdGlhbF92YWx1ZV8oaW5pdGlhbF92YWx1ZSksCi0gICAgICAgIGRhdGFfKHN0YXRpY19jYXN0PGZsb2F0Kj4oCi0gICAgICAgICAgICBsZW4gPT0gMCA/IE5VTEwKLSAgICAgICAgICAgICAgICAgICAgIDogYmFzZTo6QWxpZ25lZEFsbG9jKGxlbiAqIHNpemVvZihmbG9hdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3JfbWF0aDo6a1JlcXVpcmVkQWxpZ25tZW50KSkpLAotICAgICAgICBkYXRhX2xlbl8obGVuKSwKLSAgICAgICAgc21vb3RoaW5nX2ZhY3Rvcl8oc21vb3RoaW5nX2ZhY3RvciksCi0gICAgICAgIGV4cGVjdGVkX2ZpbmFsX2F2Z18oaW5pdGlhbF92YWx1ZSksCi0gICAgICAgIGV4cGVjdGVkX21heF8oMC4wZikgewotICAgIGlmIChkYXRhX2xlbl8gPiAwKSBtZW1jcHkoZGF0YV8uZ2V0KCksIHNyYywgbGVuICogc2l6ZW9mKGZsb2F0KSk7Ci0gIH0KLQotICAvLyBDb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yIGZvciA6OnRlc3Rpbmc6OlZhbHVlcyguLi4pLgotICBFV01BVGVzdFNjZW5hcmlvKGNvbnN0IEVXTUFUZXN0U2NlbmFyaW8mIG90aGVyKSB7ICp0aGlzID0gb3RoZXI7IH0KLSAgRVdNQVRlc3RTY2VuYXJpbyYgb3BlcmF0b3I9KGNvbnN0IEVXTUFUZXN0U2NlbmFyaW8mIG90aGVyKSB7Ci0gICAgdGhpcy0+aW5pdGlhbF92YWx1ZV8gPSBvdGhlci5pbml0aWFsX3ZhbHVlXzsKLSAgICB0aGlzLT5zbW9vdGhpbmdfZmFjdG9yXyA9IG90aGVyLnNtb290aGluZ19mYWN0b3JfOwotICAgIGlmIChvdGhlci5kYXRhX2xlbl8gPT0gMCkgewotICAgICAgdGhpcy0+ZGF0YV8ucmVzZXQoKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy0+ZGF0YV8ucmVzZXQoc3RhdGljX2Nhc3Q8ZmxvYXQqPihiYXNlOjpBbGlnbmVkQWxsb2MoCi0gICAgICAgICAgb3RoZXIuZGF0YV9sZW5fICogc2l6ZW9mKGZsb2F0KSwgdmVjdG9yX21hdGg6OmtSZXF1aXJlZEFsaWdubWVudCkpKTsKLSAgICAgIG1lbWNweSh0aGlzLT5kYXRhXy5nZXQoKSwgb3RoZXIuZGF0YV8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgb3RoZXIuZGF0YV9sZW5fICogc2l6ZW9mKGZsb2F0KSk7Ci0gICAgfQotICAgIHRoaXMtPmRhdGFfbGVuXyA9IG90aGVyLmRhdGFfbGVuXzsKLSAgICB0aGlzLT5leHBlY3RlZF9maW5hbF9hdmdfID0gb3RoZXIuZXhwZWN0ZWRfZmluYWxfYXZnXzsKLSAgICB0aGlzLT5leHBlY3RlZF9tYXhfID0gb3RoZXIuZXhwZWN0ZWRfbWF4XzsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICBFV01BVGVzdFNjZW5hcmlvIFNjYWxlZEJ5KGZsb2F0IHNjYWxlKSBjb25zdCB7Ci0gICAgRVdNQVRlc3RTY2VuYXJpbyByZXN1bHQoKnRoaXMpOwotICAgIGZsb2F0KiBwID0gcmVzdWx0LmRhdGFfLmdldCgpOwotICAgIGZsb2F0KiBjb25zdCBwX2VuZCA9IHAgKyByZXN1bHQuZGF0YV9sZW5fOwotICAgIGZvciAoOyBwIDwgcF9lbmQ7ICsrcCkgKnAgKj0gc2NhbGU7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIEVXTUFUZXN0U2NlbmFyaW8gV2l0aEltcHVsc2UoZmxvYXQgdmFsdWUsIGludCBvZmZzZXQpIGNvbnN0IHsKLSAgICBFV01BVGVzdFNjZW5hcmlvIHJlc3VsdCgqdGhpcyk7Ci0gICAgcmVzdWx0LmRhdGFfLmdldCgpW29mZnNldF0gPSB2YWx1ZTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgRVdNQVRlc3RTY2VuYXJpbyBIYXNFeHBlY3RlZFJlc3VsdChmbG9hdCBmaW5hbF9hdmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWF4X3ZhbHVlKSBjb25zdCB7Ci0gICAgRVdNQVRlc3RTY2VuYXJpbyByZXN1bHQoKnRoaXMpOwotICAgIHJlc3VsdC5leHBlY3RlZF9maW5hbF9hdmdfID0gZmluYWxfYXZnX3ZhbHVlOwotICAgIHJlc3VsdC5leHBlY3RlZF9tYXhfID0gbWF4X3ZhbHVlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICB2b2lkIFJ1blRlc3QoKSBjb25zdCB7Ci0gICAgewotICAgICAgU0NPUEVEX1RSQUNFKCJFV01BQW5kTWF4UG93ZXIiKTsKLSAgICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiByZXN1bHQgPSB2ZWN0b3JfbWF0aDo6RVdNQUFuZE1heFBvd2VyKAotICAgICAgICAgIGluaXRpYWxfdmFsdWVfLCBkYXRhXy5nZXQoKSwgZGF0YV9sZW5fLCBzbW9vdGhpbmdfZmFjdG9yXyk7Ci0gICAgICBFWFBFQ1RfTkVBUihleHBlY3RlZF9maW5hbF9hdmdfLCByZXN1bHQuZmlyc3QsIDAuMDAwMDAwMWYpOwotICAgICAgRVhQRUNUX05FQVIoZXhwZWN0ZWRfbWF4XywgcmVzdWx0LnNlY29uZCwgMC4wMDAwMDAxZik7Ci0gICAgfQotCi0gICAgewotICAgICAgU0NPUEVEX1RSQUNFKCJFV01BQW5kTWF4UG93ZXJfQyIpOwotICAgICAgY29uc3Qgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4mIHJlc3VsdCA9IHZlY3Rvcl9tYXRoOjpFV01BQW5kTWF4UG93ZXJfQygKLSAgICAgICAgICBpbml0aWFsX3ZhbHVlXywgZGF0YV8uZ2V0KCksIGRhdGFfbGVuXywgc21vb3RoaW5nX2ZhY3Rvcl8pOwotICAgICAgRVhQRUNUX05FQVIoZXhwZWN0ZWRfZmluYWxfYXZnXywgcmVzdWx0LmZpcnN0LCAwLjAwMDAwMDFmKTsKLSAgICAgIEVYUEVDVF9ORUFSKGV4cGVjdGVkX21heF8sIHJlc3VsdC5zZWNvbmQsIDAuMDAwMDAwMWYpOwotICAgIH0KLQotI2lmIGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkKLSAgICB7Ci0gICAgICBTQ09QRURfVFJBQ0UoIkVXTUFBbmRNYXhQb3dlcl9TU0UiKTsKLSAgICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiByZXN1bHQgPSB2ZWN0b3JfbWF0aDo6RVdNQUFuZE1heFBvd2VyX1NTRSgKLSAgICAgICAgICBpbml0aWFsX3ZhbHVlXywgZGF0YV8uZ2V0KCksIGRhdGFfbGVuXywgc21vb3RoaW5nX2ZhY3Rvcl8pOwotICAgICAgRVhQRUNUX05FQVIoZXhwZWN0ZWRfZmluYWxfYXZnXywgcmVzdWx0LmZpcnN0LCAwLjAwMDAwMDFmKTsKLSAgICAgIEVYUEVDVF9ORUFSKGV4cGVjdGVkX21heF8sIHJlc3VsdC5zZWNvbmQsIDAuMDAwMDAwMWYpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiBkZWZpbmVkKFVTRV9ORU9OKQotICAgIHsKLSAgICAgIFNDT1BFRF9UUkFDRSgiRVdNQUFuZE1heFBvd2VyX05FT04iKTsKLSAgICAgIGNvbnN0IHN0ZDo6cGFpcjxmbG9hdCwgZmxvYXQ+JiByZXN1bHQgPSB2ZWN0b3JfbWF0aDo6RVdNQUFuZE1heFBvd2VyX05FT04oCi0gICAgICAgICAgaW5pdGlhbF92YWx1ZV8sIGRhdGFfLmdldCgpLCBkYXRhX2xlbl8sIHNtb290aGluZ19mYWN0b3JfKTsKLSAgICAgIEVYUEVDVF9ORUFSKGV4cGVjdGVkX2ZpbmFsX2F2Z18sIHJlc3VsdC5maXJzdCwgMC4wMDAwMDAxZik7Ci0gICAgICBFWFBFQ1RfTkVBUihleHBlY3RlZF9tYXhfLCByZXN1bHQuc2Vjb25kLCAwLjAwMDAwMDFmKTsKLSAgICB9Ci0jZW5kaWYKLSAgfQotCi0gcHJpdmF0ZToKLSAgZmxvYXQgaW5pdGlhbF92YWx1ZV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxmbG9hdCwgYmFzZTo6QWxpZ25lZEZyZWVEZWxldGVyPiBkYXRhXzsKLSAgaW50IGRhdGFfbGVuXzsKLSAgZmxvYXQgc21vb3RoaW5nX2ZhY3Rvcl87Ci0gIGZsb2F0IGV4cGVjdGVkX2ZpbmFsX2F2Z187Ci0gIGZsb2F0IGV4cGVjdGVkX21heF87Ci19OwotCi10eXBlZGVmIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08RVdNQVRlc3RTY2VuYXJpbz4gVmVjdG9yTWF0aEVXTUFBbmRNYXhQb3dlclRlc3Q7Ci0KLVRFU1RfUChWZWN0b3JNYXRoRVdNQUFuZE1heFBvd2VyVGVzdCwgQ29ycmVjdG5lc3MpIHsgR2V0UGFyYW0oKS5SdW5UZXN0KCk7IH0KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtaZXJvc1tdID0geyAgLy8gMzIgemVyb3MKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwotCi1zdGF0aWMgY29uc3QgZmxvYXQga09uZXNbXSA9IHsgIC8vIDMyIG9uZXMKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9OwotCi1zdGF0aWMgY29uc3QgZmxvYXQga0NoZWNrZXJib2FyZFtdID0geyAgLy8gMzIgYWx0ZXJuYXRpbmcgMCwgMQotICAgIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsCi0gICAgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMX07Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBrSW52ZXJzZUNoZWNrZXJib2FyZFtdID0geyAgLy8gMzIgYWx0ZXJuYXRpbmcgMSwgMAotICAgIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDAsCi0gICAgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMH07Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKAotICAgIFNjZW5hcmlvcywgVmVjdG9yTWF0aEVXTUFBbmRNYXhQb3dlclRlc3QsCi0gICAgOjp0ZXN0aW5nOjpWYWx1ZXMoCi0gICAgICAgIC8vIFplcm8tbGVuZ3RoIGlucHV0OiBSZXN1bHQgc2hvdWxkIGVxdWFsIGluaXRpYWwgdmFsdWUuCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwgTlVMTCwgMCwgMC4wZikuSGFzRXhwZWN0ZWRSZXN1bHQoMC4wZiwgMC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMS4wZiwgTlVMTCwgMCwgMC4wZikuSGFzRXhwZWN0ZWRSZXN1bHQoMS4wZiwgMC4wZiksCi0KLSAgICAgICAgLy8gU21vb3RoaW5nIGZhY3RvciBvZiB6ZXJvOiBTYW1wbGVzIGhhdmUgbm8gZWZmZWN0IG9uIHJlc3VsdC4KLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrT25lcywgMzIsIDAuMGYpLkhhc0V4cGVjdGVkUmVzdWx0KDAuMGYsIDEuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDEuMGYsIGtaZXJvcywgMzIsIDAuMGYpLkhhc0V4cGVjdGVkUmVzdWx0KDEuMGYsIDAuMGYpLAotCi0gICAgICAgIC8vIFNtb290aGluZyBmYWN0b3Igb2Ygb25lOiBSZXN1bHQgPSBsYXN0IHNhbXBsZSBzcXVhcmVkLgotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDAuMGYsIGtDaGVja2VyYm9hcmQsIDMyLCAxLjBmKQotICAgICAgICAgICAgLlNjYWxlZEJ5KDIuMGYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoNC4wZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMS4wZiwga0ludmVyc2VDaGVja2VyYm9hcmQsIDMyLCAxLjBmKQotICAgICAgICAgICAgLlNjYWxlZEJ5KDIuMGYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC4wZiwgNC4wZiksCi0KLSAgICAgICAgLy8gU21vb3RoaW5nIGZhY3RvciBvZiAxLzQsIG11dGVkIHNpZ25hbC4KLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygxLjBmLCBrWmVyb3MsIDEsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KHBvd2YoMC43NSwgMS4wZiksIDAuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDEuMGYsIGtaZXJvcywgMiwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQocG93ZigwLjc1LCAyLjBmKSwgMC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMS4wZiwga1plcm9zLCAzLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdChwb3dmKDAuNzUsIDMuMGYpLCAwLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygxLjBmLCBrWmVyb3MsIDEyLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdChwb3dmKDAuNzUsIDEyLjBmKSwgMC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMS4wZiwga1plcm9zLCAxMywgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQocG93ZigwLjc1LCAxMy4wZiksIDAuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDEuMGYsIGtaZXJvcywgMTQsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KHBvd2YoMC43NSwgMTQuMGYpLCAwLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygxLjBmLCBrWmVyb3MsIDE1LCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdChwb3dmKDAuNzUsIDE1LjBmKSwgMC4wZiksCi0KLSAgICAgICAgLy8gU21vb3RoaW5nIGZhY3RvciBvZiAxLzQsIGNvbnN0YW50IGZ1bGwtYW1wbGl0dWRlIHNpZ25hbC4KLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrT25lcywgMSwgMC4yNWYpLkhhc0V4cGVjdGVkUmVzdWx0KDAuMjVmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrT25lcywgMiwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC40Mzc1ZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga09uZXMsIDMsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNTc4MTI1ZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga09uZXMsIDEyLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjk2ODMyMzY1ZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga09uZXMsIDEzLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjk3NjI0Mjc0ZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga09uZXMsIDE0LCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjk4MjE4MjA1ZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga09uZXMsIDE1LCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjk4NjYzNjU0ZiwgMS4wZiksCi0KLSAgICAgICAgLy8gU21vb3RoaW5nIGZhY3RvciBvZiAxLzQsIGNoZWNrZXJib2FyZCBzaWduYWwuCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga0NoZWNrZXJib2FyZCwgMSwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC4wZiwgMC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga0NoZWNrZXJib2FyZCwgMiwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC4yNWYsIDEuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDAuMGYsIGtDaGVja2VyYm9hcmQsIDMsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuMTg3NWYsIDEuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDAuMGYsIGtDaGVja2VyYm9hcmQsIDEyLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjU1MzMyNzgwZiwgMS4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga0NoZWNrZXJib2FyZCwgMTMsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNDE0OTk1ODVmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrQ2hlY2tlcmJvYXJkLCAxNCwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC41NjEyNDY4OWYsIDEuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDAuMGYsIGtDaGVja2VyYm9hcmQsIDE1LCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjQyMDkzNTE3ZiwgMS4wZiksCi0KLSAgICAgICAgLy8gU21vb3RoaW5nIGZhY3RvciBvZiAxLzQsIGludmVyc2UgY2hlY2tlcmJvYXJkIHNpZ25hbC4KLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMSwgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC4yNWYsIDEuMGYpLAotICAgICAgICBFV01BVGVzdFNjZW5hcmlvKDAuMGYsIGtJbnZlcnNlQ2hlY2tlcmJvYXJkLCAyLCAwLjI1ZikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjE4NzVmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMywgMC4yNWYpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMC4zOTA2MjVmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMTIsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNDE0OTk1ODVmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMTMsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNTYxMjQ2ODlmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMTQsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNDIwOTM1MTdmLCAxLjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrSW52ZXJzZUNoZWNrZXJib2FyZCwgMTUsIDAuMjVmKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNTY1NzAxMzdmLCAxLjBmKSwKLQotICAgICAgICAvLyBTbW9vdGhpbmcgZmFjdG9yIG9mIDEvNCwgaW1wdWxzZSBzaWduYWwuCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzLCAwLjI1ZikKLSAgICAgICAgICAgIC5XaXRoSW1wdWxzZSgyLjBmLCAwKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNTYyNTAwZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzLCAwLjI1ZikKLSAgICAgICAgICAgIC5XaXRoSW1wdWxzZSgyLjBmLCAxKQotICAgICAgICAgICAgLkhhc0V4cGVjdGVkUmVzdWx0KDAuNzVmLCA0LjBmKSwKLSAgICAgICAgRVdNQVRlc3RTY2VuYXJpbygwLjBmLCBrWmVyb3MsIDMsIDAuMjVmKQotICAgICAgICAgICAgLldpdGhJbXB1bHNlKDIuMGYsIDIpCi0gICAgICAgICAgICAuSGFzRXhwZWN0ZWRSZXN1bHQoMS4wZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzMiwgMC4yNWYpCi0gICAgICAgICAgICAuV2l0aEltcHVsc2UoMi4wZiwgMCkKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjAwMDEzMzk0ZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzMiwgMC4yNWYpCi0gICAgICAgICAgICAuV2l0aEltcHVsc2UoMi4wZiwgMSkKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjAwMDE3ODU4ZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzMiwgMC4yNWYpCi0gICAgICAgICAgICAuV2l0aEltcHVsc2UoMi4wZiwgMikKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjAwMDIzODExZiwgNC4wZiksCi0gICAgICAgIEVXTUFUZXN0U2NlbmFyaW8oMC4wZiwga1plcm9zLCAzMiwgMC4yNWYpCi0gICAgICAgICAgICAuV2l0aEltcHVsc2UoMi4wZiwgMykKLSAgICAgICAgICAgIC5IYXNFeHBlY3RlZFJlc3VsdCgwLjAwMDMxNzQ4ZiwgNC4wZikpKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZDg4YzguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fY29kZWNzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjIxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlIG5hbWVzIGNvbWUgZnJvbSBzcmMvdGhpcmRfcGFydHkvZmZtcGVnL2xpYmF2Y29kZWMvY29kZWNfZGVzYy5jCi1zdGQ6OnN0cmluZyBHZXRDb2RlY05hbWUoVmlkZW9Db2RlYyBjb2RlYykgewotICBzd2l0Y2ggKGNvZGVjKSB7Ci0gICAgY2FzZSBrVW5rbm93blZpZGVvQ29kZWM6Ci0gICAgICByZXR1cm4gInVua25vd24iOwotICAgIGNhc2Uga0NvZGVjSDI2NDoKLSAgICAgIHJldHVybiAiaDI2NCI7Ci0gICAgY2FzZSBrQ29kZWNIRVZDOgotICAgICAgcmV0dXJuICJoZXZjIjsKLSAgICBjYXNlIGtDb2RlY0RvbGJ5VmlzaW9uOgotICAgICAgcmV0dXJuICJkb2xieXZpc2lvbiI7Ci0gICAgY2FzZSBrQ29kZWNWQzE6Ci0gICAgICByZXR1cm4gInZjMSI7Ci0gICAgY2FzZSBrQ29kZWNNUEVHMjoKLSAgICAgIHJldHVybiAibXBlZzJ2aWRlbyI7Ci0gICAgY2FzZSBrQ29kZWNNUEVHNDoKLSAgICAgIHJldHVybiAibXBlZzQiOwotICAgIGNhc2Uga0NvZGVjVGhlb3JhOgotICAgICAgcmV0dXJuICJ0aGVvcmEiOwotICAgIGNhc2Uga0NvZGVjVlA4OgotICAgICAgcmV0dXJuICJ2cDgiOwotICAgIGNhc2Uga0NvZGVjVlA5OgotICAgICAgcmV0dXJuICJ2cDkiOwotICAgIGNhc2Uga0NvZGVjQVYxOgotICAgICAgcmV0dXJuICJhdjEiOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuICIiOwotfQotCi1zdGQ6OnN0cmluZyBHZXRQcm9maWxlTmFtZShWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlKSB7Ci0gIHN3aXRjaCAocHJvZmlsZSkgewotICAgIGNhc2UgVklERU9fQ09ERUNfUFJPRklMRV9VTktOT1dOOgotICAgICAgcmV0dXJuICJ1bmtub3duIjsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0JBU0VMSU5FOgotICAgICAgcmV0dXJuICJoMjY0IGJhc2VsaW5lIjsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX01BSU46Ci0gICAgICByZXR1cm4gImgyNjQgbWFpbiI7Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9FWFRFTkRFRDoKLSAgICAgIHJldHVybiAiaDI2NCBleHRlbmRlZCI7Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9ISUdIOgotICAgICAgcmV0dXJuICJoMjY0IGhpZ2giOwotICAgIGNhc2UgSDI2NFBST0ZJTEVfSElHSDEwUFJPRklMRToKLSAgICAgIHJldHVybiAiaDI2NCBoaWdoIDEwIjsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0hJR0g0MjJQUk9GSUxFOgotICAgICAgcmV0dXJuICJoMjY0IGhpZ2ggNDoyOjIiOwotICAgIGNhc2UgSDI2NFBST0ZJTEVfSElHSDQ0NFBSRURJQ1RJVkVQUk9GSUxFOgotICAgICAgcmV0dXJuICJoMjY0IGhpZ2ggNDo0OjQgcHJlZGljdGl2ZSI7Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9TQ0FMQUJMRUJBU0VMSU5FOgotICAgICAgcmV0dXJuICJoMjY0IHNjYWxhYmxlIGJhc2VsaW5lIjsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX1NDQUxBQkxFSElHSDoKLSAgICAgIHJldHVybiAiaDI2NCBzY2FsYWJsZSBoaWdoIjsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX1NURVJFT0hJR0g6Ci0gICAgICByZXR1cm4gImgyNjQgc3RlcmVvIGhpZ2giOwotICAgIGNhc2UgSDI2NFBST0ZJTEVfTVVMVElWSUVXSElHSDoKLSAgICAgIHJldHVybiAiaDI2NCBtdWx0aXZpZXcgaGlnaCI7Ci0gICAgY2FzZSBIRVZDUFJPRklMRV9NQUlOOgotICAgICAgcmV0dXJuICJoZXZjIG1haW4iOwotICAgIGNhc2UgSEVWQ1BST0ZJTEVfTUFJTjEwOgotICAgICAgcmV0dXJuICJoZXZjIG1haW4gMTAiOwotICAgIGNhc2UgSEVWQ1BST0ZJTEVfTUFJTl9TVElMTF9QSUNUVVJFOgotICAgICAgcmV0dXJuICJoZXZjIG1haW4gc3RpbGwtcGljdHVyZSI7Ci0gICAgY2FzZSBWUDhQUk9GSUxFX0FOWToKLSAgICAgIHJldHVybiAidnA4IjsKLSAgICBjYXNlIFZQOVBST0ZJTEVfUFJPRklMRTA6Ci0gICAgICByZXR1cm4gInZwOSBwcm9maWxlMCI7Ci0gICAgY2FzZSBWUDlQUk9GSUxFX1BST0ZJTEUxOgotICAgICAgcmV0dXJuICJ2cDkgcHJvZmlsZTEiOwotICAgIGNhc2UgVlA5UFJPRklMRV9QUk9GSUxFMjoKLSAgICAgIHJldHVybiAidnA5IHByb2ZpbGUyIjsKLSAgICBjYXNlIFZQOVBST0ZJTEVfUFJPRklMRTM6Ci0gICAgICByZXR1cm4gInZwOSBwcm9maWxlMyI7Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFMDoKLSAgICAgIHJldHVybiAiZG9sYnkgdmlzaW9uIHByb2ZpbGUgMCI7Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFNDoKLSAgICAgIHJldHVybiAiZG9sYnkgdmlzaW9uIHByb2ZpbGUgNCI7Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFNToKLSAgICAgIHJldHVybiAiZG9sYnkgdmlzaW9uIHByb2ZpbGUgNSI7Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFNzoKLSAgICAgIHJldHVybiAiZG9sYnkgdmlzaW9uIHByb2ZpbGUgNyI7Ci0gICAgY2FzZSBUSEVPUkFQUk9GSUxFX0FOWToKLSAgICAgIHJldHVybiAidGhlb3JhIjsKLSAgICBjYXNlIEFWMVBST0ZJTEVfUFJPRklMRV9NQUlOOgotICAgICAgcmV0dXJuICJhdjEgcHJvZmlsZSBtYWluIjsKLSAgICBjYXNlIEFWMVBST0ZJTEVfUFJPRklMRV9ISUdIOgotICAgICAgcmV0dXJuICJhdjEgcHJvZmlsZSBoaWdoIjsKLSAgICBjYXNlIEFWMVBST0ZJTEVfUFJPRklMRV9QUk86Ci0gICAgICByZXR1cm4gImF2MSBwcm9maWxlIHBybyI7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gIiI7Ci19Ci0KLWJvb2wgUGFyc2VOZXdTdHlsZVZwOUNvZGVjSUQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjUHJvZmlsZSogcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbGV2ZWxfaWRjKSB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWVsZHMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgIGNvZGVjX2lkLCAiLiIsIGJhc2U6OktFRVBfV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotCi0gIC8vIFRPRE8oa3F5YW5nKTogVGhlIHNwZWMgc3BlY2lmaWVzIDggZmllbGRzLiBXZSBkbyBub3QgYWxsb3cgbWlzc2luZyBvciBleHRyYQotICAvLyBmaWVsZHMuIFNlZSBjcmJ1Zy5jb20vNjY3ODM0LgotICBpZiAoZmllbGRzLnNpemUoKSAhPSA4KQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAoZmllbGRzWzBdICE9ICJ2cDA5IikKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgc3RkOjp2ZWN0b3I8aW50PiB2YWx1ZXM7Ci0gIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgLy8gTWlzc2luZyB2YWx1ZSBpcyBub3QgYWxsb3dlZC4KLSAgICBpZiAoZmllbGRzW2ldID09ICIiKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGludCB2YWx1ZTsKLSAgICBpZiAoIWJhc2U6OlN0cmluZ1RvSW50KGZpZWxkc1tpXSwgJnZhbHVlKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodmFsdWUgPCAwKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZhbHVlcy5wdXNoX2JhY2sodmFsdWUpOwotICB9Ci0KLSAgY29uc3QgaW50IHByb2ZpbGVfaWRjID0gdmFsdWVzWzBdOwotICBzd2l0Y2ggKHByb2ZpbGVfaWRjKSB7Ci0gICAgY2FzZSAwOgotICAgICAgKnByb2ZpbGUgPSBWUDlQUk9GSUxFX1BST0ZJTEUwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgKnByb2ZpbGUgPSBWUDlQUk9GSUxFX1BST0ZJTEUxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgKnByb2ZpbGUgPSBWUDlQUk9GSUxFX1BST0ZJTEUyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgKnByb2ZpbGUgPSBWUDlQUk9GSUxFX1BST0ZJTEUzOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpsZXZlbF9pZGMgPSB2YWx1ZXNbMV07Ci0gIC8vIFRPRE8oa3F5YW5nKTogQ2hlY2sgaWYgfGxldmVsX2lkY3wgaXMgdmFsaWQuIFNlZSBjcmJ1Zy5jb20vNjY3ODM0LgotCi0gIGNvbnN0IGludCBiaXRfZGVwdGggPSB2YWx1ZXNbMl07Ci0gIGlmIChiaXRfZGVwdGggIT0gOCAmJiBiaXRfZGVwdGggIT0gMTAgJiYgYml0X2RlcHRoICE9IDEyKQotICAgIHJldHVybiBmYWxzZTsKLQotICBjb25zdCBpbnQgY29sb3Jfc3BhY2UgPSB2YWx1ZXNbM107Ci0gIGlmIChjb2xvcl9zcGFjZSA+IDcpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IGludCBjaHJvbWFfc3Vic2FtcGxpbmcgPSB2YWx1ZXNbNF07Ci0gIGlmIChjaHJvbWFfc3Vic2FtcGxpbmcgPiAzKQotICAgIHJldHVybiBmYWxzZTsKLQotICBjb25zdCBpbnQgdHJhbnNmZXJfZnVuY3Rpb24gPSB2YWx1ZXNbNV07Ci0gIGlmICh0cmFuc2Zlcl9mdW5jdGlvbiA+IDEpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IGludCB2aWRlb19mdWxsX3JhbmdlX2ZsYWcgPSB2YWx1ZXNbNl07Ci0gIGlmICh2aWRlb19mdWxsX3JhbmdlX2ZsYWcgPiAxKQotICAgIHJldHVybiBmYWxzZTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQYXJzZUxlZ2FjeVZwOUNvZGVjSUQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9Db2RlY1Byb2ZpbGUqIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBsZXZlbF9pZGMpIHsKLSAgaWYgKGNvZGVjX2lkID09ICJ2cDkiIHx8IGNvZGVjX2lkID09ICJ2cDkuMCIpIHsKLSAgICAvLyBQcm9maWxlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29kZWMgc3RyaW5nLiBBc3N1bWluZyBwcm9maWxlIDAgdG8gYmUKLSAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmxlLgotICAgICpwcm9maWxlID0gVlA5UFJPRklMRV9QUk9GSUxFMDsKLSAgICAvLyBVc2UgMCB0byBpbmRpY2F0ZSB1bmtub3duIGxldmVsLgotICAgICpsZXZlbF9pZGMgPSAwOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQYXJzZUF2MUNvZGVjSWQoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLCBWaWRlb0NvZGVjUHJvZmlsZSogcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGxldmVsX2lkYywgZ2Z4OjpDb2xvclNwYWNlKiBjb2xvcl9zcGFjZSkgewotICAvLyBUaGUgY29kZWNzIHBhcmFtZXRlciBzdHJpbmcgZm9yIHRoZSBBT00gQVYxIGNvZGVjIGlzIGFzIGZvbGxvd3M6Ci0gIC8vIFNlZSBodHRwczovL2FvbWVkaWFjb2RlYy5naXRodWIuaW8vYXYxLWlzb2JtZmYvI2NvZGVjc3BhcmFtLgotICAvLwotICAvLyA8c2FtcGxlIGVudHJ5NENDPi48cHJvZmlsZT4uPGxldmVsPjx0aWVyPi48Yml0RGVwdGg+Ljxtb25vY2hyb21lPi4KLSAgLy8gPGNocm9tYVN1YnNhbXBsaW5nPi48Y29sb3JQcmltYXJpZXM+Ljx0cmFuc2ZlckNoYXJhY3RlcmlzdGljcz4uCi0gIC8vIDxtYXRyaXhDb2VmZmljaWVudHM+Ljx2aWRlb0Z1bGxSYW5nZUZsYWc+Ci0KLSAgLy8gVE9ETzogUmVwbGFjZSB0aGUgZm9sbG93aW5nIGNvZGUgdXNpbmcKLSAgLy8gICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmllbGRzID0gYmFzZTo6U3BsaXRTdHJpbmcoCi0gIC8vICAgICAgICAgICAgIGNvZGVjX2lkLCAiLiIsIGJhc2U6OktFRVBfV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotICAvLyAgICAgICBvbmNlIENocm9taXVtIGJhc2UgcmViYXNlIGlzIGZpbmlzaGVkLgotICBpZiAoc3RyY2hyKGNvZGVjX2lkLmNfc3RyKCksICcgJykgIT0gbnVsbHB0cikgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoc3Ryc3RyKGNvZGVjX2lkLmNfc3RyKCksICIuLiIpICE9IG51bGxwdHIpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpZWxkcyA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgY29kZWNfaWQsICIuIiwgYmFzZTo6VFJJTV9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX0FMTCk7Ci0KLSAgLy8gVGhlIHBhcmFtZXRlcnMgc2FtcGxlIGVudHJ5IDRDQywgcHJvZmlsZSwgbGV2ZWwsIHRpZXIsIGFuZCBiaXREZXB0aCBhcmUgYWxsCi0gIC8vIG1hbmRhdG9yeSBmaWVsZHMuIElmIGFueSBvZiB0aGVzZSBmaWVsZHMgYXJlIGVtcHR5LCBvciBub3Qgd2l0aGluIHRoZWlyCi0gIC8vIGFsbG93ZWQgcmFuZ2UsIHRoZSBwcm9jZXNzaW5nIGRldmljZSBTSE9VTEQgdHJlYXQgaXQgYXMgYW4gZXJyb3IuCi0gIGlmIChmaWVsZHMuc2l6ZSgpIDwgNCB8fCBmaWVsZHMuc2l6ZSgpID4gMTApIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgbnVtYmVyIG9mIGZpZWxkcyAoIiA8PCBmaWVsZHMuc2l6ZSgpCi0gICAgICAgICAgICAgPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEFsbCB0aGUgb3RoZXIgZmllbGRzIChpbmNsdWRpbmcgdGhlaXIgbGVhZGluZyAnLicpIGFyZSBvcHRpb25hbCwgbXV0dWFsbHkKLSAgLy8gaW5jbHVzaXZlIChhbGwgb3Igbm9uZSkgZmllbGRzLiBJZiBub3Qgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlcyBsaXN0ZWQgaW4KLSAgLy8gdGhlIHRhYmxlIGJlbG93IGFyZSBhc3N1bWVkLgotICAvLwotICAvLyBtb25vX2Nocm9tZSAgICAgICAgICAgICAgMAotICAvLyBjaHJvbWFTdWJzYW1wbGluZyAgICAgICAgMTEyICg0OjI6MCBjb2xvY2F0ZWQgd2l0aCBsdW1hICgwLDApKQotICAvLyBjb2xvclByaW1hcmllcyAgICAgICAgICAgMSAoSVRVLVIgQlQuNzA5KQotICAvLyB0cmFuc2ZlckNoYXJhY3RlcmlzdGljcyAgMSAoSVRVLVIgQlQuNzA5KQotICAvLyBtYXRyaXhDb2VmZmljaWVudHMgICAgICAgMSAoSVRVLVIgQlQuNzA5KQotICAvLyB2aWRlb0Z1bGxSYW5nZUZsYWcgICAgICAgMCAoc3R1ZGlvIHN3aW5nIHJlcHJlc2VudGF0aW9uKQotICAqY29sb3Jfc3BhY2UgPSBnZng6OkNvbG9yU3BhY2U6OkNyZWF0ZVJFQzcwOSgpOwotCi0gIGlmIChmaWVsZHNbMF0gIT0gImF2MDEiKSB7Ci0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIEFWMSA0Q0MgKCIgPDwgZmllbGRzWzBdIDw8ICIpIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgbGV2ZWwgcGFyYW1ldGVyIHZhbHVlIFNIQUxMIGVxdWFsIHRoZSBmaXJzdCBsZXZlbCB2YWx1ZSBpbmRpY2F0ZWQgYnkKLSAgLy8gc2VxX2xldmVsX2lkeCBpbiB0aGUgU2VxdWVuY2UgSGVhZGVyLiBUaGUgdGllciBwYXJhbWV0ZXIgdmFsdWUgU0hBTEwgYmUKLSAgLy8gZXF1YWwgdG8gTSB3aGVuIHRoZSBmaXJzdCBzZXFfdGllciB2YWx1ZSBpbiB0aGUgU2VxdWVuY2UgSGVhZGVyIGlzIGVxdWFsIHRvCi0gIC8vIDAsIGFuZCBIIHdoZW4gaXQgaXMgZXF1YWwgdG8gMS4KLSAgaWYgKGZpZWxkc1syXS5zaXplKCkgIT0gMyB8fCAoZmllbGRzWzJdWzJdICE9ICdNJyAmJiBmaWVsZHNbMl1bMl0gIT0gJ0gnKSkgewotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBsZXZlbCt0aWVyICgiIDw8IGZpZWxkc1syXSA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gU2luY2UgdGllciBoYXMgYmVlbiB2YWxpZGF0ZWQsIHN0cmlwIHRoZSB0cmFpbGluZyB0aWVyIGluZGljYXRvciB0byBhbGxvdwotICAvLyBpbnQgY29udmVyc2lvbiBiZWxvdy4KLSAgZmllbGRzWzJdLnJlc2l6ZSgyKTsKLQotICAvLyBGaWxsIHdpdGggZHVtbXkgdmFsdWVzIHRvIGVuc3VyZSBwYXJhbGxlbCBpbmRpY2VzIHdpdGggZmllbGRzLgotICBzdGQ6OnZlY3RvcjxpbnQ+IHZhbHVlcyhmaWVsZHMuc2l6ZSgpLCAwKTsKLSAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoZmllbGRzW2ldLmVtcHR5KCkpIHsKLSAgICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBlbXB0eSBmaWVsZCAocG9zaXRpb246IiA8PCBpIDw8ICIpIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWJhc2U6OlN0cmluZ1RvSW50KGZpZWxkc1tpXSwgJnZhbHVlc1tpXSkgfHwgdmFsdWVzW2ldIDwgMCkgewotICAgICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIGZpZWxkIHZhbHVlICgiIDw8IHZhbHVlc1tpXSA8PCAiKSI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlIHByb2ZpbGUgcGFyYW1ldGVyIHZhbHVlLCByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBkaWdpdCBkZWNpbWFsLCBTSEFMTAotICAvLyBlcXVhbCB0aGUgdmFsdWUgb2Ygc2VxX3Byb2ZpbGUgaW4gdGhlIFNlcXVlbmNlIEhlYWRlci4KLSAgY29uc3QgaW50IHByb2ZpbGVfaWRjID0gZmllbGRzWzFdLnNpemUoKSA9PSAxID8gdmFsdWVzWzFdIDogLTE7Ci0gIHN3aXRjaCAocHJvZmlsZV9pZGMpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAqcHJvZmlsZSA9IEFWMVBST0ZJTEVfUFJPRklMRV9NQUlOOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgKnByb2ZpbGUgPSBBVjFQUk9GSUxFX1BST0ZJTEVfSElHSDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICpwcm9maWxlID0gQVYxUFJPRklMRV9QUk9GSUxFX1BSTzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgcHJvZmlsZSAoIiA8PCBmaWVsZHNbMV0gPDwgIikiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gVGhlIGxldmVsIHBhcmFtZXRlciB2YWx1ZSBTSEFMTCBlcXVhbCB0aGUgZmlyc3QgbGV2ZWwgdmFsdWUgaW5kaWNhdGVkIGJ5Ci0gIC8vIHNlcV9sZXZlbF9pZHggaW4gdGhlIFNlcXVlbmNlIEhlYWRlci4gTm90ZTogV2UgdmFsaWRhdGUgdGhhdCB0aGlzIGZpZWxkIGhhcwotICAvLyB0aGUgcmVxdWlyZWQgbGVhZGluZyB6ZXJvcyBhYm92ZS4KLSAgKmxldmVsX2lkYyA9IHZhbHVlc1syXTsKLSAgaWYgKCpsZXZlbF9pZGMgPiAzMSkgewotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBsZXZlbCAoIiA8PCAqbGV2ZWxfaWRjIDw8ICIpIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgYml0RGVwdGggcGFyYW1ldGVyIHZhbHVlIFNIQUxMIGVxdWFsIHRoZSB2YWx1ZSBvZiBCaXREZXB0aCB2YXJpYWJsZSBhcwotICAvLyBkZWZpbmVkIGluIFtBVjFdIGRlcml2ZWQgZnJvbSB0aGUgU2VxdWVuY2UgSGVhZGVyLiBMZWFkaW5nIHplcm9zIHJlcXVpcmVkLgotICBjb25zdCBpbnQgYml0X2RlcHRoID0gdmFsdWVzWzNdOwotICBpZiAoZmllbGRzWzNdLnNpemUoKSAhPSAyIHx8Ci0gICAgICAoYml0X2RlcHRoICE9IDggJiYgYml0X2RlcHRoICE9IDEwICYmIGJpdF9kZXB0aCAhPSAxMikpIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgYml0LWRlcHRoICgiIDw8IGZpZWxkc1szXSA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKHZhbHVlcy5zaXplKCkgPD0gNCkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gVGhlIG1vbm9jaHJvbWUgcGFyYW1ldGVyIHZhbHVlLCByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBkaWdpdCBkZWNpbWFsLAotICAvLyBTSEFMTCBlcXVhbCB0aGUgdmFsdWUgb2YgbW9ub19jaHJvbWUgaW4gdGhlIFNlcXVlbmNlIEhlYWRlci4KLSAgY29uc3QgaW50IG1vbm9jaHJvbWUgPSB2YWx1ZXNbNF07Ci0gIGlmIChmaWVsZHNbNF0uc2l6ZSgpICE9IDEgfHwgbW9ub2Nocm9tZSA+IDEpIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgbW9ub2Nocm9tZSAoIiA8PCBmaWVsZHNbNF0gPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh2YWx1ZXMuc2l6ZSgpIDw9IDUpIHJldHVybiB0cnVlOwotCi0gIC8vIFRoZSBjaHJvbWFTdWJzYW1wbGluZyBwYXJhbWV0ZXIgdmFsdWUsIHJlcHJlc2VudGVkIGJ5IGEgdGhyZWUtZGlnaXQKLSAgLy8gZGVjaW1hbCwgU0hBTEwgaGF2ZSBpdHMgZmlyc3QgZGlnaXQgZXF1YWwgdG8gc3Vic2FtcGxpbmdfeCBhbmQgaXRzIHNlY29uZAotICAvLyBkaWdpdCBlcXVhbCB0byBzdWJzYW1wbGluZ195LiBJZiBib3RoIHN1YnNhbXBsaW5nX3ggYW5kIHN1YnNhbXBsaW5nX3kgYXJlCi0gIC8vIHNldCB0byAxLCB0aGVuIHRoZSB0aGlyZCBkaWdpdCBTSEFMTCBiZSBlcXVhbCB0byBjaHJvbWFfc2FtcGxlX3Bvc2l0aW9uLAotICAvLyBvdGhlcndpc2UgaXQgU0hBTEwgYmUgc2V0IHRvIDAuCi0gIGlmIChmaWVsZHNbNV0uc2l6ZSgpICE9IDMpIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgY2hyb21hIHN1YnNhbXBsaW5nICgiIDw8IGZpZWxkc1s1XSA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgY29uc3QgY2hhciBzdWJzYW1wbGluZ194ID0gZmllbGRzWzVdWzBdOwotICBjb25zdCBjaGFyIHN1YnNhbXBsaW5nX3kgPSBmaWVsZHNbNV1bMV07Ci0gIGNvbnN0IGNoYXIgY2hyb21hX3NhbXBsZV9wb3NpdGlvbiA9IGZpZWxkc1s1XVsyXTsKLSAgaWYgKChzdWJzYW1wbGluZ194IDwgJzAnIHx8IHN1YnNhbXBsaW5nX3ggPiAnMScpIHx8Ci0gICAgICAoc3Vic2FtcGxpbmdfeSA8ICcwJyB8fCBzdWJzYW1wbGluZ195ID4gJzEnKSB8fAotICAgICAgKGNocm9tYV9zYW1wbGVfcG9zaXRpb24gPCAnMCcgfHwgY2hyb21hX3NhbXBsZV9wb3NpdGlvbiA+ICczJykpIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgY2hyb21hIHN1YnNhbXBsaW5nICgiIDw8IGZpZWxkc1s1XSA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKCgoc3Vic2FtcGxpbmdfeCA9PSAnMCcgfHwgc3Vic2FtcGxpbmdfeSA9PSAnMCcpICYmCi0gICAgICAgY2hyb21hX3NhbXBsZV9wb3NpdGlvbiAhPSAnMCcpKSB7Ci0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIGNocm9tYSBzdWJzYW1wbGluZyAoIiA8PCBmaWVsZHNbNV0gPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh2YWx1ZXMuc2l6ZSgpIDw9IDYpIHJldHVybiB0cnVlOwotCi0gIC8vIFRoZSBjb2xvclByaW1hcmllcywgdHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIG1hdHJpeENvZWZmaWNpZW50cyBhbmQKLSAgLy8gdmlkZW9GdWxsUmFuZ2VGbGFnIHBhcmFtZXRlciB2YWx1ZXMgU0hBTEwgZXF1YWwgdGhlIHZhbHVlIG9mIG1hdGNoaW5nCi0gIC8vIGZpZWxkcyBpbiB0aGUgU2VxdWVuY2UgSGVhZGVyLCBpZiBjb2xvcl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgaXMgc2V0IHRvCi0gIC8vIDEsIG90aGVyd2lzZSB0aGV5IFNIT1VMRCBub3QgYmUgc2V0LCBkZWZhdWx0aW5nIHRvIHRoZSB2YWx1ZXMgYmVsb3cuIFRoZQotICAvLyB2aWRlb0Z1bGxSYW5nZUZsYWcgaXMgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgZGlnaXQuCi0gIGF1dG8gcHJpbWFyaWVzID0gZ2Z4OjpDb2xvclNwYWNlOjpQcmltYXJ5SURGcm9tSW50KHZhbHVlc1s2XSk7Ci0gIGlmIChmaWVsZHNbNl0uc2l6ZSgpICE9IDIgfHwKLSAgICAgIHByaW1hcmllcyA9PSBnZng6OkNvbG9yU3BhY2U6OmtQcmltYXJ5SWRSZXNlcnZlZDApIHsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgY29sb3IgcHJpbWFyaWVzICgiIDw8IGZpZWxkc1s2XSA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKHZhbHVlcy5zaXplKCkgPD0gNykgcmV0dXJuIHRydWU7Ci0KLSAgYXV0byB0cmFuc2ZlciA9IGdmeDo6Q29sb3JTcGFjZTo6VHJhbnNmZXJJREZyb21JbnQodmFsdWVzWzddKTsKLSAgaWYgKGZpZWxkc1s3XS5zaXplKCkgIT0gMiB8fAotICAgICAgdHJhbnNmZXIgPT0gZ2Z4OjpDb2xvclNwYWNlOjprVHJhbnNmZXJJZFJlc2VydmVkMCkgewotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCB0cmFuc2ZlciBmdW5jdGlvbiAoIiA8PCBmaWVsZHNbN10gPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh2YWx1ZXMuc2l6ZSgpIDw9IDgpIHJldHVybiB0cnVlOwotCi0gIGF1dG8gbWF0cml4ID0gZ2Z4OjpDb2xvclNwYWNlOjpNYXRyaXhJREZyb21JbnQodmFsdWVzWzhdKTsKLSAgaWYgKGZpZWxkc1s4XS5zaXplKCkgIT0gMiB8fCBtYXRyaXggPT0gZ2Z4OjpDb2xvclNwYWNlOjprTWF0cml4SWRVbmtub3duKSB7Ci0gICAgLy8gVE9ETzogQVYxIGFsbG93cyBhIGZldyBtYXRyaWNlcyB3ZSBkb24ndCBzdXBwb3J0IHlldC4KLSAgICAvLyAgICAgICBodHRwczovL2NyYnVnLmNvbS84NTQyOTAKLSAgICBpZiAodmFsdWVzWzhdID09IDEyIHx8IHZhbHVlc1s4XSA9PSAxMyB8fCB2YWx1ZXNbOF0gPT0gMTQpIHsKLSAgICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgVW5zdXBwb3J0ZWQgbWF0cml4IGNvZWZmaWNpZW50cyAoIiA8PCBmaWVsZHNbOF0KLSAgICAgICAgICAgICAgIDw8ICIpIjsKLSAgICB9IGVsc2UgewotICAgICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIG1hdHJpeCBjb2VmZmljaWVudHMgKCIgPDwgZmllbGRzWzhdCi0gICAgICAgICAgICAgICA8PCAiKSI7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICh2YWx1ZXMuc2l6ZSgpIDw9IDkpIHJldHVybiB0cnVlOwotCi0gIGNvbnN0IGludCB2aWRlb19mdWxsX3JhbmdlX2ZsYWcgPSB2YWx1ZXNbOV07Ci0gIGlmIChmaWVsZHNbOV0uc2l6ZSgpICE9IDEgfHwgdmlkZW9fZnVsbF9yYW5nZV9mbGFnID4gMSkgewotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBmdWxsIHJhbmdlIGZsYWcgKCIgPDwgZmllbGRzWzldIDw8ICIpIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgYXV0byByYW5nZSA9IHZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9PSAxID8gZ2Z4OjpDb2xvclNwYWNlOjprUmFuZ2VJZEZ1bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2Z4OjpDb2xvclNwYWNlOjprUmFuZ2VJZExpbWl0ZWQ7Ci0gICpjb2xvcl9zcGFjZSA9IGdmeDo6Q29sb3JTcGFjZShwcmltYXJpZXMsIHRyYW5zZmVyLCBtYXRyaXgsIHJhbmdlKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFyc2VBVkNDb2RlY0lkKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwgVmlkZW9Db2RlY1Byb2ZpbGUqIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBsZXZlbF9pZGMpIHsKLSAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYXZjMS54eHh4eHggb3IgYXZjMy54eHh4eHggLCB3aGVyZSB4eHh4eHggYXJlIGhleCBkaWdpdHMKLSAgaWYgKCFTdGFydHNXaXRoKGNvZGVjX2lkLCAiYXZjMS4iLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSAmJgotICAgICAgIVN0YXJ0c1dpdGgoY29kZWNfaWQsICJhdmMzLiIsIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHVpbnQzMl90IGVsZW0gPSAwOwotICBpZiAoY29kZWNfaWQuc2l6ZSgpICE9IDExIHx8Ci0gICAgICAhYmFzZTo6SGV4U3RyaW5nVG9VSW50KGJhc2U6OlN0cmluZ1BpZWNlKGNvZGVjX2lkKS5zdWJzdHIoNSksICZlbGVtKSkgewotICAgIERWTE9HKDQpIDw8IF9fZnVuY19fIDw8ICI6IGludmFsaWQgYXZjIGNvZGVjIGlkICgiIDw8IGNvZGVjX2lkIDw8ICIpIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB1aW50OF90IGxldmVsX2J5dGUgPSBlbGVtICYgMHhGRjsKLSAgdWludDhfdCBjb25zdHJhaW50c19ieXRlID0gKGVsZW0gPj4gOCkgJiAweEZGOwotICB1aW50OF90IHByb2ZpbGVfaWRjID0gKGVsZW0gPj4gMTYpICYgMHhGRjsKLQotICAvLyBDaGVjayB0aGF0IHRoZSBsb3dlciB0d28gYml0cyBvZiB8Y29uc3RyYWludHNfYnl0ZXwgYXJlIHplcm8gKHRob3NlIGFyZQotICAvLyByZXNlcnZlZCBhbmQgbXVzdCBiZSB6ZXJvIGFjY29yZGluZyB0byBJU08gSUVDIDE0NDk2LTEwKS4KLSAgaWYgKGNvbnN0cmFpbnRzX2J5dGUgJiAzKSB7Ci0gICAgRFZMT0coNCkgPDwgX19mdW5jX18gPDwgIjogbm9uLXplcm8gcmVzZXJ2ZWQgYml0cyBpbiBjb2RlYyBpZCAiIDw8IGNvZGVjX2lkOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFZpZGVvQ29kZWNQcm9maWxlIG91dF9wcm9maWxlID0gVklERU9fQ09ERUNfUFJPRklMRV9VTktOT1dOOwotICAvLyBwcm9maWxlX2lkYyB2YWx1ZXMgZm9yIGVhY2ggcHJvZmlsZSBhcmUgdGFrZW4gZnJvbSBJU08gSUVDIDE0NDk2LTEwIGFuZAotICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ILjI2NC9NUEVHLTRfQVZDI1Byb2ZpbGVzCi0gIHN3aXRjaCAocHJvZmlsZV9pZGMpIHsKLSAgICBjYXNlIDY2OgotICAgICAgb3V0X3Byb2ZpbGUgPSBIMjY0UFJPRklMRV9CQVNFTElORTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgNzc6Ci0gICAgICBvdXRfcHJvZmlsZSA9IEgyNjRQUk9GSUxFX01BSU47Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDgzOgotICAgICAgb3V0X3Byb2ZpbGUgPSBIMjY0UFJPRklMRV9TQ0FMQUJMRUJBU0VMSU5FOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4NjoKLSAgICAgIG91dF9wcm9maWxlID0gSDI2NFBST0ZJTEVfU0NBTEFCTEVISUdIOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4ODoKLSAgICAgIG91dF9wcm9maWxlID0gSDI2NFBST0ZJTEVfRVhURU5ERUQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDEwMDoKLSAgICAgIG91dF9wcm9maWxlID0gSDI2NFBST0ZJTEVfSElHSDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMTEwOgotICAgICAgb3V0X3Byb2ZpbGUgPSBIMjY0UFJPRklMRV9ISUdIMTBQUk9GSUxFOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxMTg6Ci0gICAgICBvdXRfcHJvZmlsZSA9IEgyNjRQUk9GSUxFX01VTFRJVklFV0hJR0g7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDEyMjoKLSAgICAgIG91dF9wcm9maWxlID0gSDI2NFBST0ZJTEVfSElHSDQyMlBST0ZJTEU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDEyODoKLSAgICAgIG91dF9wcm9maWxlID0gSDI2NFBST0ZJTEVfU1RFUkVPSElHSDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjQ0OgotICAgICAgb3V0X3Byb2ZpbGUgPSBIMjY0UFJPRklMRV9ISUdINDQ0UFJFRElDVElWRVBST0ZJTEU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgRFZMT0coMSkgPDwgIldhcm5pbmc6IHVucmVjb2duaXplZCBBVkMvSC4yNjQgcHJvZmlsZSAiIDw8IHByb2ZpbGVfaWRjOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gVE9ETyhzZXJ2b2xrKTogVGFrZSBpbnRvIGFjY291bnQgYWxzbyBjb25zdHJhaW50IHNldCBmbGFncyAzIHRocm91Z2ggNS4KLSAgdWludDhfdCBjb25zdHJhaW50X3NldDBfZmxhZyA9IChjb25zdHJhaW50c19ieXRlID4+IDcpICYgMTsKLSAgdWludDhfdCBjb25zdHJhaW50X3NldDFfZmxhZyA9IChjb25zdHJhaW50c19ieXRlID4+IDYpICYgMTsKLSAgdWludDhfdCBjb25zdHJhaW50X3NldDJfZmxhZyA9IChjb25zdHJhaW50c19ieXRlID4+IDUpICYgMTsKLSAgaWYgKGNvbnN0cmFpbnRfc2V0Ml9mbGFnICYmIG91dF9wcm9maWxlID4gSDI2NFBST0ZJTEVfRVhURU5ERUQpIHsKLSAgICBvdXRfcHJvZmlsZSA9IEgyNjRQUk9GSUxFX0VYVEVOREVEOwotICB9Ci0gIGlmIChjb25zdHJhaW50X3NldDFfZmxhZyAmJiBvdXRfcHJvZmlsZSA+IEgyNjRQUk9GSUxFX01BSU4pIHsKLSAgICBvdXRfcHJvZmlsZSA9IEgyNjRQUk9GSUxFX01BSU47Ci0gIH0KLSAgaWYgKGNvbnN0cmFpbnRfc2V0MF9mbGFnICYmIG91dF9wcm9maWxlID4gSDI2NFBST0ZJTEVfQkFTRUxJTkUpIHsKLSAgICBvdXRfcHJvZmlsZSA9IEgyNjRQUk9GSUxFX0JBU0VMSU5FOwotICB9Ci0KLSAgaWYgKGxldmVsX2lkYykgKmxldmVsX2lkYyA9IGxldmVsX2J5dGU7Ci0KLSAgaWYgKHByb2ZpbGUpICpwcm9maWxlID0gb3V0X3Byb2ZpbGU7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFRoZSBzcGVjaWZpY2F0aW9uIGZvciBIRVZDIGNvZGVjIGlkIHN0cmluZ3MgY2FuIGJlIGZvdW5kIGluIElTTyBJRUMgMTQ0OTYtMTUKLS8vIGRhdGVkIDIwMTIgb3IgbmV3ZXIgaW4gdGhlIEFubmV4IEUuMwotYm9vbCBQYXJzZUhFVkNDb2RlY0lkKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwgVmlkZW9Db2RlY1Byb2ZpbGUqIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbGV2ZWxfaWRjKSB7Ci0gIGlmICghU3RhcnRzV2l0aChjb2RlY19pZCwgImhldjEuIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkgJiYKLSAgICAgICFTdGFydHNXaXRoKGNvZGVjX2lkLCAiaHZjMS4iLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEhFVkMgY29kZWMgaWQgY29uc2lzdHMgb2Y6Ci0gIGNvbnN0IGludCBrTWF4SGV2Y0NvZGVjSWRMZW5ndGggPQotICAgICAgNSArICAvLyAnaGV2MS4nIG9yICdodmMxLicgcHJlZml4ICg1IGNoYXJzKQotICAgICAgNCArICAvLyBwcm9maWxlLCBlLmcuICcuQTEyJyAobWF4IDQgY2hhcnMpCi0gICAgICA5ICsgIC8vIHByb2ZpbGVfY29tcGF0aWJpbGl0eSwgZG90ICsgMzItYml0IGhleCBudW1iZXIgKG1heCA5IGNoYXJzKQotICAgICAgNSArICAvLyB0aWVyIGFuZCBsZXZlbCwgZS5nLiAnLkgxMjAnIChtYXggNSBjaGFycykKLSAgICAgIDE4OyAgLy8gdXAgdG8gNiBjb25zdHJhaW50IGJ5dGVzLCBieXRlcyBhcmUgZG90LXNlcGFyYXRlZCBhbmQgaGV4LWVuY29kZWQuCi0KLSAgaWYgKGNvZGVjX2lkLnNpemUoKSA+IGtNYXhIZXZjQ29kZWNJZExlbmd0aCkgewotICAgIERWTE9HKDQpIDw8IF9fZnVuY19fIDw8ICI6IENvZGVjIGlkIGlzIHRvbyBsb25nICgiIDw8IGNvZGVjX2lkIDw8ICIpIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZWxlbSA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgY29kZWNfaWQsIHN0ZDo6c3RyaW5nKCIuIiksIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotICBEQ0hFQ0soZWxlbVswXSA9PSAiaGV2MSIgfHwgZWxlbVswXSA9PSAiaHZjMSIpOwotCi0gIGlmIChlbGVtLnNpemUoKSA8IDQpIHsKLSAgICBEVkxPRyg0KSA8PCBfX2Z1bmNfXyA8PCAiOiBpbnZhbGlkIEhFVkMgY29kZWMgaWQgIiA8PCBjb2RlY19pZDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB1aW50OF90IGdlbmVyYWxfcHJvZmlsZV9zcGFjZSA9IDA7Ci0gIGlmIChlbGVtWzFdLnNpemUoKSA+IDAgJiYKLSAgICAgIChlbGVtWzFdWzBdID09ICdBJyB8fCBlbGVtWzFdWzBdID09ICdCJyB8fCBlbGVtWzFdWzBdID09ICdDJykpIHsKLSAgICBnZW5lcmFsX3Byb2ZpbGVfc3BhY2UgPSAxICsgKGVsZW1bMV1bMF0gLSAnQScpOwotICAgIGVsZW1bMV0uZXJhc2UoMCwgMSk7Ci0gIH0KLSAgRENIRUNLKGdlbmVyYWxfcHJvZmlsZV9zcGFjZSA+PSAwICYmIGdlbmVyYWxfcHJvZmlsZV9zcGFjZSA8PSAzKTsKLQotICB1bnNpZ25lZCBnZW5lcmFsX3Byb2ZpbGVfaWRjID0gMDsKLSAgaWYgKCFiYXNlOjpTdHJpbmdUb1VpbnQoZWxlbVsxXSwgJmdlbmVyYWxfcHJvZmlsZV9pZGMpIHx8Ci0gICAgICBnZW5lcmFsX3Byb2ZpbGVfaWRjID4gMHgxZikgewotICAgIERWTE9HKDQpIDw8IF9fZnVuY19fIDw8ICI6IGludmFsaWQgZ2VuZXJhbF9wcm9maWxlX2lkYz0iIDw8IGVsZW1bMV07Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgdWludDMyX3QgZ2VuZXJhbF9wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MgPSAwOwotICBpZiAoIWJhc2U6OkhleFN0cmluZ1RvVUludChlbGVtWzJdLCAmZ2VuZXJhbF9wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MpKSB7Ci0gICAgRFZMT0coNCkgPDwgX19mdW5jX18KLSAgICAgICAgICAgICA8PCAiOiBpbnZhbGlkIGdlbmVyYWxfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdzPSIgPDwgZWxlbVsyXTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAocHJvZmlsZSkgewotICAgIC8vIFRPRE8oc2Vydm9sayk6IEhhbmRsZSBmb3JtYXQgcmFuZ2UgZXh0ZW5zaW9uIHByb2ZpbGVzIGFzIGV4cGxhaW5lZCBpbgotICAgIC8vIEhFVkMgc3RhbmRhcmQgKElTTy9JRUMgSVNPL0lFQyAyMzAwOC0yKSBzZWN0aW9uIEEuMy41Ci0gICAgaWYgKGdlbmVyYWxfcHJvZmlsZV9pZGMgPT0gMyB8fCAoZ2VuZXJhbF9wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MgJiA0KSkgewotICAgICAgKnByb2ZpbGUgPSBIRVZDUFJPRklMRV9NQUlOX1NUSUxMX1BJQ1RVUkU7Ci0gICAgfQotICAgIGlmIChnZW5lcmFsX3Byb2ZpbGVfaWRjID09IDIgfHwgKGdlbmVyYWxfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdzICYgMikpIHsKLSAgICAgICpwcm9maWxlID0gSEVWQ1BST0ZJTEVfTUFJTjEwOwotICAgIH0KLSAgICBpZiAoZ2VuZXJhbF9wcm9maWxlX2lkYyA9PSAxIHx8IChnZW5lcmFsX3Byb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFncyAmIDEpKSB7Ci0gICAgICAqcHJvZmlsZSA9IEhFVkNQUk9GSUxFX01BSU47Ci0gICAgfQotICB9Ci0KLSAgdWludDhfdCBnZW5lcmFsX3RpZXJfZmxhZzsKLSAgaWYgKGVsZW1bM10uc2l6ZSgpID4gMCAmJiAoZWxlbVszXVswXSA9PSAnTCcgfHwgZWxlbVszXVswXSA9PSAnSCcpKSB7Ci0gICAgZ2VuZXJhbF90aWVyX2ZsYWcgPSAoZWxlbVszXVswXSA9PSAnTCcpID8gMCA6IDE7Ci0gICAgZWxlbVszXS5lcmFzZSgwLCAxKTsKLSAgfSBlbHNlIHsKLSAgICBEVkxPRyg0KSA8PCBfX2Z1bmNfXyA8PCAiOiBpbnZhbGlkIGdlbmVyYWxfdGllcl9mbGFnPSIgPDwgZWxlbVszXTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgRENIRUNLKGdlbmVyYWxfdGllcl9mbGFnID09IDAgfHwgZ2VuZXJhbF90aWVyX2ZsYWcgPT0gMSk7Ci0KLSAgdW5zaWduZWQgZ2VuZXJhbF9sZXZlbF9pZGMgPSAwOwotICBpZiAoIWJhc2U6OlN0cmluZ1RvVWludChlbGVtWzNdLCAmZ2VuZXJhbF9sZXZlbF9pZGMpIHx8Ci0gICAgICBnZW5lcmFsX2xldmVsX2lkYyA+IDB4ZmYpIHsKLSAgICBEVkxPRyg0KSA8PCBfX2Z1bmNfXyA8PCAiOiBpbnZhbGlkIGdlbmVyYWxfbGV2ZWxfaWRjPSIgPDwgZWxlbVszXTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAobGV2ZWxfaWRjKSAqbGV2ZWxfaWRjID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZ2VuZXJhbF9sZXZlbF9pZGMpOwotCi0gIHVpbnQ4X3QgY29uc3RyYWludF9mbGFnc1s2XTsKLSAgbWVtc2V0KGNvbnN0cmFpbnRfZmxhZ3MsIDAsIHNpemVvZihjb25zdHJhaW50X2ZsYWdzKSk7Ci0KLSAgaWYgKGVsZW0uc2l6ZSgpID4gMTApIHsKLSAgICBEVkxPRyg0KSA8PCBfX2Z1bmNfXyA8PCAiOiB1bmV4cGVjdGVkIG51bWJlciBvZiB0cmFpbGluZyBieXRlcyBpbiBIRVZDICIKLSAgICAgICAgICAgICA8PCAiY29kZWMgaWQgIiA8PCBjb2RlY19pZDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgZm9yIChzaXplX3QgaSA9IDQ7IGkgPCBlbGVtLnNpemUoKTsgKytpKSB7Ci0gICAgdW5zaWduZWQgY29uc3RyX2J5dGUgPSAwOwotICAgIGlmICghYmFzZTo6SGV4U3RyaW5nVG9VSW50KGVsZW1baV0sICZjb25zdHJfYnl0ZSkgfHwgY29uc3RyX2J5dGUgPiAweEZGKSB7Ci0gICAgICBEVkxPRyg0KSA8PCBfX2Z1bmNfXyA8PCAiOiBpbnZhbGlkIGNvbnN0cmFpbnQgYnl0ZT0iIDw8IGVsZW1baV07Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0cmFpbnRfZmxhZ3NbaSAtIDRdID0gY29uc3RyX2J5dGU7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotVmlkZW9Db2RlYyBTdHJpbmdUb1ZpZGVvQ29kZWMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkKSB7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBlbGVtID0gYmFzZTo6U3BsaXRTdHJpbmcoCi0gICAgICBjb2RlY19pZCwgc3RkOjpzdHJpbmcoIi4iKSwgYmFzZTo6VFJJTV9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX0FMTCk7Ci0gIGlmIChlbGVtLmVtcHR5KCkpIHJldHVybiBrVW5rbm93blZpZGVvQ29kZWM7Ci0gIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUgPSBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV047Ci0gIHVpbnQ4X3QgbGV2ZWwgPSAwOwotICBpZiAoY29kZWNfaWQgPT0gInZwOCIgfHwgY29kZWNfaWQgPT0gInZwOC4wIikKLSAgICByZXR1cm4ga0NvZGVjVlA4OwotICBpZiAoUGFyc2VOZXdTdHlsZVZwOUNvZGVjSUQoY29kZWNfaWQsICZwcm9maWxlLCAmbGV2ZWwpIHx8Ci0gICAgICBQYXJzZUxlZ2FjeVZwOUNvZGVjSUQoY29kZWNfaWQsICZwcm9maWxlLCAmbGV2ZWwpKSB7Ci0gICAgcmV0dXJuIGtDb2RlY1ZQOTsKLSAgfQotICBpZiAoY29kZWNfaWQgPT0gInRoZW9yYSIpCi0gICAgcmV0dXJuIGtDb2RlY1RoZW9yYTsKLSAgaWYgKFBhcnNlQVZDQ29kZWNJZChjb2RlY19pZCwgJnByb2ZpbGUsICZsZXZlbCkpIHJldHVybiBrQ29kZWNIMjY0OwotICAvLyBXZSBkb24ndCBwYXJzZSB0aGUgZnVsbCBjb2RlYyBzdHJpbmcgYXMgaXQgbXVzdCBoYXZlIGJlZW4gY2hlY2tlZCBieQotICAvLyBpc1R5cGVTdXBwb3J0ZWQoKSBiZWZvcmUgcGFzc2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uCi0gIGlmIChjb2RlY19pZC5zdWJzdHIoMCwgNSkgPT0gInZwMDkuIikgewotICAgIHJldHVybiBrQ29kZWNWUDk7Ci0gIH0KLSAgZ2Z4OjpDb2xvclNwYWNlIGNvbG9yX3NwYWNlOwotICBpZiAoUGFyc2VBdjFDb2RlY0lkKGNvZGVjX2lkLCAmcHJvZmlsZSwgJmxldmVsLCAmY29sb3Jfc3BhY2UpKQotICAgIHJldHVybiBrQ29kZWNBVjE7Ci0gIGlmIChQYXJzZUhFVkNDb2RlY0lkKGNvZGVjX2lkLCAmcHJvZmlsZSwgJmxldmVsKSkgcmV0dXJuIGtDb2RlY0hFVkM7Ci0KLSAgcmV0dXJuIGtVbmtub3duVmlkZW9Db2RlYzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mjk0MjQ1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19DT0RFQ1NfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVklERU9fQ09ERUNTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jb2xvcl9zcGFjZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWVudW0gVmlkZW9Db2RlYyB7Ci0gIC8vIFRoZXNlIHZhbHVlcyBhcmUgaGlzdG9ncmFtbWVkIG92ZXIgdGltZTsgZG8gbm90IGNoYW5nZSB0aGVpciBvcmRpbmFsCi0gIC8vIHZhbHVlcy4gIFdoZW4gZGVsZXRpbmcgYSBjb2RlYyByZXBsYWNlIGl0IHdpdGggYSBkdW1teSB2YWx1ZTsgd2hlbiBhZGRpbmcgYQotICAvLyBjb2RlYywgZG8gc28gYXQgdGhlIGJvdHRvbSAoYW5kIHVwZGF0ZSBrVmlkZW9Db2RlY01heCkuCi0gIGtVbmtub3duVmlkZW9Db2RlYyA9IDAsCi0gIGtDb2RlY0gyNjQsCi0gIGtDb2RlY1ZDMSwKLSAga0NvZGVjTVBFRzIsCi0gIGtDb2RlY01QRUc0LAotICBrQ29kZWNUaGVvcmEsCi0gIGtDb2RlY1ZQOCwKLSAga0NvZGVjVlA5LAotICBrQ29kZWNIRVZDLAotICBrQ29kZWNEb2xieVZpc2lvbiwKLSAga0NvZGVjQVYxLAotICAvLyBETyBOT1QgQUREIFJBTkRPTSBWSURFTyBDT0RFQ1MhCi0gIC8vCi0gIC8vIFRoZSBvbmx5IGFjY2VwdGFibGUgdGltZSB0byBhZGQgYSBuZXcgY29kZWMgaXMgaWYgdGhlcmUgaXMgcHJvZHVjdGlvbiBjb2RlCi0gIC8vIHRoYXQgdXNlcyBzYWlkIGNvZGVjIGluIHRoZSBzYW1lIENMLgotCi0gIGtWaWRlb0NvZGVjTWF4ID0ga0NvZGVjQVYxICAvLyBNdXN0IGVxdWFsIHRoZSBsYXN0ICJyZWFsIiBjb2RlYyBhYm92ZS4KLX07Ci0KLS8vIFZpZGVvIGNvZGVjIHByb2ZpbGVzLiBLZWVwIGluIHN5bmMgd2l0aCBtb2pvOjpWaWRlb0NvZGVjUHJvZmlsZSAoc2VlCi0vLyBtZWRpYS9tb2pvL2ludGVyZmFjZXMvbWVkaWFfdHlwZXMubW9qb20pIGFuZCBncHU6OlZpZGVvQ29kZWNQcm9maWxlIChzZWUKLS8vIGdwdS9jb25maWcvZ3B1X2luZm8uaCksIGFzIHdlbGwgYXMgUFBfVmlkZW9EZWNvZGVyX1Byb2ZpbGUgKHRyYW5zbGF0aW9uIGlzCi0vLyBwZXJmb3JtZWQgaW4gY29udGVudC9yZW5kZXJlci9wZXBwZXIvcHBiX3ZpZGVvX2RlY29kZXJfaW1wbC5jYykuCi0vLyBOT1RFOiBUaGVzZSB2YWx1ZXMgYXJlIGhpc3RvZ3JhbW1lZCBvdmVyIHRpbWUgaW4gVU1BIHNvIHRoZSB2YWx1ZXMgbXVzdAotLy8gbmV2ZXIgZXZlciBjaGFuZ2UgKGFkZCBuZXcgdmFsdWVzIHRvIHRvb2xzL21ldHJpY3MvaGlzdG9ncmFtcy9oaXN0b2dyYW1zLnhtbCkKLWVudW0gVmlkZW9Db2RlY1Byb2ZpbGUgewotICAvLyBLZWVwIHRoZSB2YWx1ZXMgaW4gdGhpcyBlbnVtIHVuaXF1ZSwgYXMgdGhleSBpbXBseSBmb3JtYXQgKGguMjY0IHZzLiBWUDgsCi0gIC8vIGZvciBleGFtcGxlKSwgYW5kIGtlZXAgdGhlIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdCBncm91cGVkCi0gIC8vIHRvZ2V0aGVyIGZvciBjbGFyaXR5LgotICBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04gPSAtMSwKLSAgVklERU9fQ09ERUNfUFJPRklMRV9NSU4gPSBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04sCi0gIEgyNjRQUk9GSUxFX01JTiA9IDAsCi0gIEgyNjRQUk9GSUxFX0JBU0VMSU5FID0gSDI2NFBST0ZJTEVfTUlOLAotICBIMjY0UFJPRklMRV9NQUlOID0gMSwKLSAgSDI2NFBST0ZJTEVfRVhURU5ERUQgPSAyLAotICBIMjY0UFJPRklMRV9ISUdIID0gMywKLSAgSDI2NFBST0ZJTEVfSElHSDEwUFJPRklMRSA9IDQsCi0gIEgyNjRQUk9GSUxFX0hJR0g0MjJQUk9GSUxFID0gNSwKLSAgSDI2NFBST0ZJTEVfSElHSDQ0NFBSRURJQ1RJVkVQUk9GSUxFID0gNiwKLSAgSDI2NFBST0ZJTEVfU0NBTEFCTEVCQVNFTElORSA9IDcsCi0gIEgyNjRQUk9GSUxFX1NDQUxBQkxFSElHSCA9IDgsCi0gIEgyNjRQUk9GSUxFX1NURVJFT0hJR0ggPSA5LAotICBIMjY0UFJPRklMRV9NVUxUSVZJRVdISUdIID0gMTAsCi0gIEgyNjRQUk9GSUxFX01BWCA9IEgyNjRQUk9GSUxFX01VTFRJVklFV0hJR0gsCi0gIFZQOFBST0ZJTEVfTUlOID0gMTEsCi0gIFZQOFBST0ZJTEVfQU5ZID0gVlA4UFJPRklMRV9NSU4sCi0gIFZQOFBST0ZJTEVfTUFYID0gVlA4UFJPRklMRV9BTlksCi0gIFZQOVBST0ZJTEVfTUlOID0gMTIsCi0gIFZQOVBST0ZJTEVfUFJPRklMRTAgPSBWUDlQUk9GSUxFX01JTiwKLSAgVlA5UFJPRklMRV9QUk9GSUxFMSA9IDEzLAotICBWUDlQUk9GSUxFX1BST0ZJTEUyID0gMTQsCi0gIFZQOVBST0ZJTEVfUFJPRklMRTMgPSAxNSwKLSAgVlA5UFJPRklMRV9NQVggPSBWUDlQUk9GSUxFX1BST0ZJTEUzLAotICBIRVZDUFJPRklMRV9NSU4gPSAxNiwKLSAgSEVWQ1BST0ZJTEVfTUFJTiA9IEhFVkNQUk9GSUxFX01JTiwKLSAgSEVWQ1BST0ZJTEVfTUFJTjEwID0gMTcsCi0gIEhFVkNQUk9GSUxFX01BSU5fU1RJTExfUElDVFVSRSA9IDE4LAotICBIRVZDUFJPRklMRV9NQVggPSBIRVZDUFJPRklMRV9NQUlOX1NUSUxMX1BJQ1RVUkUsCi0gIERPTEJZVklTSU9OX01JTiA9IDE5LAotICBET0xCWVZJU0lPTl9QUk9GSUxFMCA9IERPTEJZVklTSU9OX01JTiwKLSAgRE9MQllWSVNJT05fUFJPRklMRTQgPSAyMCwKLSAgRE9MQllWSVNJT05fUFJPRklMRTUgPSAyMSwKLSAgRE9MQllWSVNJT05fUFJPRklMRTcgPSAyMiwKLSAgRE9MQllWSVNJT05fTUFYID0gRE9MQllWSVNJT05fUFJPRklMRTcsCi0gIFRIRU9SQVBST0ZJTEVfTUlOID0gMjMsCi0gIFRIRU9SQVBST0ZJTEVfQU5ZID0gVEhFT1JBUFJPRklMRV9NSU4sCi0gIFRIRU9SQVBST0ZJTEVfTUFYID0gVEhFT1JBUFJPRklMRV9BTlksCi0gIEFWMVBST0ZJTEVfTUlOID0gMjQsCi0gIEFWMVBST0ZJTEVfUFJPRklMRV9NQUlOID0gQVYxUFJPRklMRV9NSU4sCi0gIEFWMVBST0ZJTEVfUFJPRklMRV9ISUdIID0gMjUsCi0gIEFWMVBST0ZJTEVfUFJPRklMRV9QUk8gPSAyNiwKLSAgQVYxUFJPRklMRV9NQVggPSBBVjFQUk9GSUxFX1BST0ZJTEVfUFJPLAotICBWSURFT19DT0RFQ19QUk9GSUxFX01BWCA9IEFWMVBST0ZJTEVfUFJPRklMRV9QUk8sCi19OwotCi1zdGQ6OnN0cmluZyBNRURJQV9FWFBPUlQgR2V0Q29kZWNOYW1lKFZpZGVvQ29kZWMgY29kZWMpOwotc3RkOjpzdHJpbmcgTUVESUFfRVhQT1JUIEdldFByb2ZpbGVOYW1lKFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUpOwotCi0vLyBQYXJzZU5ld1N0eWxlVnA5Q29kZWNJRCBoYW5kbGVzIHBhcnNpbmcgb2YgbmV3IHN0eWxlIHZwOSBjb2RlYyBJRHMgcGVyCi0vLyBwcm9wb3NlZCBWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZyBzcGVjaWZpY2F0aW9uOgotLy8gaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2Fkcy53ZWJtcHJvamVjdC5vcmcvZG9jcy92cDkvdnAtY29kZWMtaXNvLW1lZGlhLWZpbGUtZm9ybWF0LWJpbmRpbmctMjAxNjA1MTYtZHJhZnQucGRmCi0vLyBQYXJzZUxlZ2FjeVZwOUNvZGVjSUQgaGFuZGxlcyBwYXJzaW5nIG9mIGxlZ2FjeSBWUDkgY29kZWMgc3RyaW5ncyBkZWZpbmVkCi0vLyBmb3IgV2ViTS4KLS8vIFRPRE8oa3F5YW5nKTogQ29uc29saWRhdGUgdGhlIHR3byBmdW5jdGlvbnMgb25jZSB3ZSBhZGRyZXNzIGNyYnVnLmNvbS82Njc4MzQKLU1FRElBX0VYUE9SVCBib29sIFBhcnNlTmV3U3R5bGVWcDlDb2RlY0lEKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNQcm9maWxlKiBwcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbGV2ZWxfaWRjKTsKLU1FRElBX0VYUE9SVCBib29sIFBhcnNlTGVnYWN5VnA5Q29kZWNJRChjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9Db2RlY1Byb2ZpbGUqIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbGV2ZWxfaWRjKTsKLQotTUVESUFfRVhQT1JUIGJvb2wgUGFyc2VBdjFDb2RlY0lkKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjUHJvZmlsZSogcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBsZXZlbF9pZGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4OjpDb2xvclNwYWNlKiBjb2xvcl9zcGFjZSk7Ci0KLS8vIEhhbmRsZSBwYXJzaW5nIEFWQy9ILjI2NCBjb2RlYyBpZHMgYXMgb3V0bGluZWQgaW4gUkZDIDYzODEgYW5kIElTTy0xNDQ5Ni0xMC4KLU1FRElBX0VYUE9SVCBib29sIFBhcnNlQVZDQ29kZWNJZChjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9Db2RlY1Byb2ZpbGUqIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogbGV2ZWxfaWRjKTsKLQotTUVESUFfRVhQT1JUIGJvb2wgUGFyc2VIRVZDQ29kZWNJZChjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNQcm9maWxlKiBwcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBsZXZlbF9pZGMpOwotCi1NRURJQV9FWFBPUlQgVmlkZW9Db2RlYyBTdHJpbmdUb1ZpZGVvQ29kZWMoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkKTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVklERU9fQ09ERUNTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3NfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3NfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NGUwNDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fY29kZWNzX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotI2lmIEJVSUxERkxBRyhFTkFCTEVfSEVWQ19ERU1VWElORykKLVRFU1QoUGFyc2VIRVZDQ29kZWNJZFRlc3QsIEludmFsaWRIRVZDQ29kZWNJZHMpIHsKLSAgVmlkZW9Db2RlY1Byb2ZpbGUgcHJvZmlsZSA9IFZJREVPX0NPREVDX1BST0ZJTEVfVU5LTk9XTjsKLSAgdWludDhfdCBsZXZlbF9pZGMgPSAwOwotCi0gIC8vIEJvdGggaGV2MSBhbmQgaHZjMSBzaG91bGQgYmUgc3VwcG9ydGVkCi0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImhldjEuMS42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9FUShwcm9maWxlLCBIRVZDUFJPRklMRV9NQUlOKTsKLSAgRVhQRUNUX0VRKGxldmVsX2lkYywgOTMpOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRVEocHJvZmlsZSwgSEVWQ1BST0ZJTEVfTUFJTik7Ci0gIEVYUEVDVF9FUShsZXZlbF9pZGMsIDkzKTsKLQotICAvLyBDaGVjayB0aGF0IGNvZGVjIGlkIHN0cmluZyB3aXRoIGluc3VmZmljaWVudCBudW1iZXIgb2YgZG90LXNlcGFyYXRlZAotICAvLyBlbGVtZW50cyBhcmUgcmVqZWN0ZWQuIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgNCBlbGVtZW50czogaGV2MS9odmMxIHByZWZpeCwKLSAgLy8gcHJvZmlsZSwgcHJvZmlsZV9jb21wYXRpYmlsaXR5LCB0aWVyK2xldmVsLgotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MOTMiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRVEocHJvZmlsZSwgSEVWQ1BST0ZJTEVfTUFJTik7Ci0gIEVYUEVDVF9FUShsZXZlbF9pZGMsIDkzKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaGV2MSIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4uLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi4uLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Li4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLi5MOTMiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLi5MOTMuIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS4uTDkzLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4uNiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi42LiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi42Li4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4uNi4uLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi42Lkw5MyIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLi42Lkw5My4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4uNi5MOTMuLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0KLSAgLy8gQ2hlY2sgdGhhdCBjb2RlYyBpZHMgd2l0aCBlbXB0eSBjb25zdHJhaW50IGJ5dGVzIGFyZSByZWplY3RlZC4KLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLi4uIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My4uLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLi4uLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLi4uLi4uIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My4uLi4uLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLi4uLi4uLjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLjAuIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My4wLi4iLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLjAuLjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoCi0gICAgICBQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MOTMuMC4uMC4wLjAuMC4wIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLjAuMC4wLjAuMC4wLiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0KLSAgLy8gRGlmZmVyZW50IHZhcmlhdGlvbnMgb2YgZ2VuZXJhbF9wcm9maWxlX3NwYWNlIChlbXB0eSwgJ0EnLCAnQicsICdDJykKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS5BMS42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuQjEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLkMxLjYuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuRDEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotCi0gIC8vIGdlbmVyYWxfcHJvZmlsZV9pZGMgKHRoZSBudW1iZXIgYWZ0ZXIgdGhlIGZpcnN0IGRvdCkgbXVzdCBiZSBhIDUtYml0Ci0gIC8vIGRlY2ltYWwtZW5jb2RlZCBudW1iZXIgKGJldHdlZW4gMCBhbmQgMzEpCi0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMC42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMzEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRVEocHJvZmlsZSwgSEVWQ1BST0ZJTEVfTUFJTik7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMi4yLkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9FUShwcm9maWxlLCBIRVZDUFJPRklMRV9NQUlOMTApOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjMuNC5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRVEocHJvZmlsZSwgSEVWQ1BST0ZJTEVfTUFJTl9TVElMTF9QSUNUVVJFKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuLTEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4zMi42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjk5OS42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLkEuNi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xRi42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0KLSAgLy8gZ2VuZXJhbF9wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MgaXMgYSAzMi1iaXQgaGV4IG51bWJlcgotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuMC5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuRkYuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLkZGRkYuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLkZGRkZGRkZGLkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS4xMDAwMDAwMDAuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLkZGRkZGRkZGRi5MOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLi0xLkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuMEcuTDkzLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLQotICAvLyBnZW5lcmFsX3RpZXJfZmxhZyBpcyBlbmNvZGVkIGFzIGVpdGhlciBjaGFyYWN0ZXIgJ0wnIChnZW5lcmFsX3RpZXJfZmxhZz09MCkKLSAgLy8gb3IgY2hhcmFjdGVyICdIJyAoZ2VuZXJhbF90aWVyX2ZsYWc9PTEpIGluIHRoZSBmb3VydGggZWxlbWVudCBvZiB0aGUgc3RyaW5nCi0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS4wLkg5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuMC45My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuMC5BOTMuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotCi0gIC8vIGdlbmVyYWxfbGV2ZWxfaWRjIGlzIDgtYml0IGRlY2ltYWwtZW5jb2RlZCBudW1iZXIgYWZ0ZXIgZ2VuZXJhbF90aWVyX2ZsYWcuCi0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwwLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0VRKGxldmVsX2lkYywgMCk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwxLkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0VRKGxldmVsX2lkYywgMSk7Ci0gIC8vIExldmVsIDMuMSAoOTMgPT0gMy4xICogMzApCi0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42Lkw5My5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9FUShsZXZlbF9pZGMsIDkzKTsKLSAgLy8gTGV2ZWwgNSAoMTUwID09IDUgKiAzMCkKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDE1MC5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9FUShsZXZlbF9pZGMsIDE1MCk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwyNTUuQjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRVEobGV2ZWxfaWRjLCAyNTUpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDI1Ni5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MOTk5LkIwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwtMS5CMCIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0KLSAgLy8gVGhlIGVsZW1lbnRzIGFmdGVyIHRoZSBmb3VydGggZG90IGFyZSBoZXgtZW5jb2RlZCBieXRlcyBjb250YWluaW5nCi0gIC8vIGNvbnN0cmFpbnQgZmxhZ3MgKHVwIHRvIDYgYnl0ZXMpLCB0cmFpbGluZyB6ZXJvIGJ5dGVzIG1heSBiZSBvbWl0dGVkCi0gIEVYUEVDVF9UUlVFKAotICAgICAgUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDAuMC4wLjAuMC4wLjAiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwwLjAwLjAwLjAwLjAwLjAwLjAwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDAuMTIiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MMC4xMi4zNC41NiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDAuMTIuMzQuNTYuNzguOUEuQkMiLCAmcHJvZmlsZSwgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwwLkZGLkZGLkZGLkZGLkZGLkZGIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwwLkZGLkZGLkZGLkZGLkZGLkZGLjAiLCAmcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxldmVsX2lkYykpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2VIRVZDQ29kZWNJZCgiaHZjMS4xLjYuTDAuMTAwIiwgJnByb2ZpbGUsICZsZXZlbF9pZGMpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlSEVWQ0NvZGVjSWQoImh2YzEuMS42LkwwLjFGRiIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZUhFVkNDb2RlY0lkKCJodmMxLjEuNi5MMC4tMSIsICZwcm9maWxlLCAmbGV2ZWxfaWRjKSk7Ci19Ci0jZW5kaWYKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyLmNjIGIvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjNDQ1ZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXIuaCIKLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVmlkZW9EZWNvZGVyOjpWaWRlb0RlY29kZXIoKSB7fQotCi1WaWRlb0RlY29kZXI6On5WaWRlb0RlY29kZXIoKSB7fQotCi1ib29sIFZpZGVvRGVjb2Rlcjo6TmVlZHNCaXRzdHJlYW1Db252ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotYm9vbCBWaWRlb0RlY29kZXI6OkNhblJlYWRXaXRob3V0U3RhbGxpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLWludCBWaWRlb0RlY29kZXI6OkdldE1heERlY29kZVJlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gMTsgfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXIuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5OGY1NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19ERUNPREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0RFQ09ERVJfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVfc3RhdHVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQ2RtQ29udGV4dDsKLWNsYXNzIERlY29kZXJCdWZmZXI7Ci1jbGFzcyBWaWRlb0RlY29kZXJDb25maWc7Ci1jbGFzcyBWaWRlb0ZyYW1lOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgVmlkZW9EZWNvZGVyIHsKLSBwdWJsaWM6Ci0gIC8vIENhbGxiYWNrIGZvciBWaWRlb0RlY29kZXIgaW5pdGlhbGl6YXRpb24uCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChib29sIHN1Y2Nlc3MpPiBJbml0Q0I7Ci0KLSAgLy8gQ2FsbGJhY2sgZm9yIFZpZGVvRGVjb2RlciB0byByZXR1cm4gYSBkZWNvZGVkIGZyYW1lIHdoZW5ldmVyIGl0IGJlY29tZXMKLSAgLy8gYXZhaWxhYmxlLiBPbmx5IG5vbi1FT1MgZnJhbWVzIHNob3VsZCBiZSByZXR1cm5lZCB2aWEgdGhpcyBjYWxsYmFjay4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4mKT4gT3V0cHV0Q0I7Ci0KLSAgLy8gQ2FsbGJhY2sgdHlwZSBmb3IgRGVjb2RlKCkuIENhbGxlZCBhZnRlciB0aGUgZGVjb2RlciBoYXMgY29tcGxldGVkIGRlY29kaW5nCi0gIC8vIGNvcnJlc3BvbmRpbmcgRGVjb2RlckJ1ZmZlciwgaW5kaWNhdGluZyB0aGF0IGl0J3MgcmVhZHkgdG8gYWNjZXB0IGFub3RoZXIKLSAgLy8gYnVmZmVyIHRvIGRlY29kZS4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKERlY29kZVN0YXR1cyk+IERlY29kZUNCOwotCi0gIFZpZGVvRGVjb2RlcigpOwotCi0gIC8vIEZpcmVzIGFueSBwZW5kaW5nIGNhbGxiYWNrcywgc3RvcHMgYW5kIGRlc3Ryb3lzIHRoZSBkZWNvZGVyLgotICAvLyBOb3RlOiBTaW5jZSB0aGlzIGlzIGEgZGVzdHJ1Y3RvciwgfHRoaXN8IHdpbGwgYmUgZGVzdHJveWVkIGFmdGVyIHRoaXMgY2FsbC4KLSAgLy8gTWFrZSBzdXJlIHRoZSBjYWxsYmFja3MgZmlyZWQgZnJvbSB0aGlzIGNhbGwgZG9lc24ndCBwb3N0IGFueSB0YXNrIHRoYXQKLSAgLy8gZGVwZW5kcyBvbiB8dGhpc3wuCi0gIHZpcnR1YWwgflZpZGVvRGVjb2RlcigpOwotCi0gIC8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGRlY29kZXIgZm9yIGxvZ2dpbmcgcHVycG9zZS4KLSAgdmlydHVhbCBzdGQ6OnN0cmluZyBHZXREaXNwbGF5TmFtZSgpIGNvbnN0ID0gMDsKLQotICAvLyBJbml0aWFsaXplcyBhIFZpZGVvRGVjb2RlciB3aXRoIHRoZSBnaXZlbiB8Y29uZmlnfCwgZXhlY3V0aW5nIHRoZQotICAvLyB8aW5pdF9jYnwgdXBvbiBjb21wbGV0aW9uLiB8b3V0cHV0X2NifCBpcyBjYWxsZWQgZm9yIGVhY2ggb3V0cHV0IGZyYW1lCi0gIC8vIGRlY29kZWQgYnkgRGVjb2RlKCkuCi0gIC8vCi0gIC8vIElmIHxsb3dfZGVsYXl8IGlzIHRydWUgdGhlbiB0aGUgZGVjb2RlciBpcyBub3QgYWxsb3dlZCB0byBxdWV1ZSBmcmFtZXMsCi0gIC8vIGV4Y2VwdCBmb3Igb3V0LW9mLW9yZGVyIGZyYW1lcywgaS5lLiBpZiB0aGUgbmV4dCBmcmFtZSBjYW4gYmUgcmV0dXJuZWQgaXQKLSAgLy8gbXVzdCBiZSByZXR1cm5lZCB3aXRob3V0IHdhaXRpbmcgZm9yIERlY29kZSgpIHRvIGJlIGNhbGxlZCBhZ2Fpbi4KLSAgLy8gSW5pdGlhbGl6YXRpb24gc2hvdWxkIGZhaWwgaWYgfGxvd19kZWxheXwgaXMgdHJ1ZSBhbmQgdGhlIGRlY29kZXIgY2Fubm90Ci0gIC8vIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBhYm92ZS4KLSAgLy8KLSAgLy8gfGNkbV9jb250ZXh0fCBjYW4gYmUgdXNlZCB0byBoYW5kbGUgZW5jcnlwdGVkIGJ1ZmZlcnMuIE1heSBiZSBudWxsIGlmIHRoZQotICAvLyBzdHJlYW0gaXMgbm90IGVuY3J5cHRlZC4KLSAgLy8KLSAgLy8gTm90ZToKLSAgLy8gMSkgVGhlIFZpZGVvRGVjb2RlciB3aWxsIGJlIHJlaW5pdGlhbGl6ZWQgaWYgaXQgd2FzIGluaXRpYWxpemVkIGJlZm9yZS4KLSAgLy8gICAgVXBvbiByZWluaXRpYWxpemF0aW9uLCBhbGwgaW50ZXJuYWwgYnVmZmVyZWQgZnJhbWVzIHdpbGwgYmUgZHJvcHBlZC4KLSAgLy8gMikgVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZHVyaW5nIHBlbmRpbmcgZGVjb2RlIG9yIHJlc2V0LgotICAvLyAzKSBObyBWaWRlb0RlY29kZXIgY2FsbHMgc2hvdWxkIGJlIG1hZGUgYmVmb3JlIHxpbml0X2NifCBpcyBleGVjdXRlZC4KLSAgLy8gNCkgVmlkZW9EZWNvZGVycyBzaG91bGQgdGFrZSBjYXJlIHRvIHJ1biB8b3V0cHV0X2NifCBhcyBzb29uIGFzIHRoZSBmcmFtZQotICAvLyBpcyByZWFkeSAoaS5lLiB3L28gdGhyZWFkIHRyYW1wb2xpbmluZykgc2luY2UgaXQgY2FuIHN0cm9uZ2x5IGFmZmVjdCBmcmFtZQotICAvLyBkZWxpdmVyeSB0aW1lcyB3aXRoIGhpZ2gtZnJhbWUtcmF0ZSBtYXRlcmlhbC4gIFNlZSBEZWNvZGUoKSBmb3IgYWRkaXRpb25hbAotICAvLyBub3Rlcy4KLSAgdmlydHVhbCB2b2lkIEluaXRpYWxpemUoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcsIGJvb2wgbG93X2RlbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDZG1Db250ZXh0KiBjZG1fY29udGV4dCwgY29uc3QgSW5pdENCJiBpbml0X2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRDQiYgb3V0cHV0X2NiKSA9IDA7Ci0KLSAgLy8gUmVxdWVzdHMgYSB8YnVmZmVyfCB0byBiZSBkZWNvZGVkLiBUaGUgc3RhdHVzIG9mIHRoZSBkZWNvZGVyIGFuZCBkZWNvZGVkCi0gIC8vIGZyYW1lIGFyZSByZXR1cm5lZCB2aWEgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLiBTb21lIGRlY29kZXJzIG1heSBhbGxvdwotICAvLyBkZWNvZGluZyBtdWx0aXBsZSBidWZmZXJzIGluIHBhcmFsbGVsLiBDYWxsZXJzIHNob3VsZCBjYWxsCi0gIC8vIEdldE1heERlY29kZVJlcXVlc3RzKCkgdG8gZ2V0IG51bWJlciBvZiBidWZmZXJzIHRoYXQgbWF5IGJlIGRlY29kZWQgaW4KLSAgLy8gcGFyYWxsZWwuIERlY29kZXIgbXVzdCBjYWxsIHxkZWNvZGVfY2J8IGluIHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIERlY29kZSgpCi0gIC8vIGlzIGNhbGxlZC4KLSAgLy8KLSAgLy8gSW1wbGVtZW50YXRpb25zIGd1YXJhbnRlZSB0aGF0IHRoZSB8ZGVjb2RlX2NifCB3aWxsIG5vdCBiZSBjYWxsZWQgZnJvbQotICAvLyB3aXRoaW4gdGhpcyBtZXRob2QsIGFuZCB0aGF0IGl0IHdpbGwgYmUgY2FsbGVkIGV2ZW4gaWYgRGVjb2RlKCkgaXMgbmV2ZXIKLSAgLy8gY2FsbGVkIGFnYWluLgotICAvLwotICAvLyBBZnRlciBkZWNvZGluZyBpcyBmaW5pc2hlZCB0aGUgZGVjb2RlciBjYWxscyB8b3V0cHV0X2NifCBzcGVjaWZpZWQgaW4KLSAgLy8gSW5pdGlhbGl6ZSgpIGZvciBlYWNoIGRlY29kZWQgZnJhbWUuIHxvdXRwdXRfY2J8IG1heSBiZSBjYWxsZWQgYmVmb3JlIG9yCi0gIC8vIGFmdGVyIHxkZWNvZGVfY2J8LCBpbmNsdWRpbmcgYmVmb3JlIERlY29kZSgpIHJldHVybnMuCi0gIC8vCi0gIC8vIElmIHxidWZmZXJ8IGlzIGFuIEVPUyBidWZmZXIgdGhlbiB0aGUgZGVjb2RlciBtdXN0IGJlIGZsdXNoZWQsIGkuZS4KLSAgLy8gfG91dHB1dF9jYnwgbXVzdCBiZSBjYWxsZWQgZm9yIGVhY2ggZnJhbWUgcGVuZGluZyBpbiB0aGUgcXVldWUgYW5kCi0gIC8vIHxkZWNvZGVfY2J8IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoYXQuIENhbGxlcnMgd2lsbCBub3QgY2FsbCBEZWNvZGUoKQotICAvLyBhZ2FpbiB1bnRpbCBhZnRlciB0aGUgZmx1c2ggY29tcGxldGVzLgotICB2aXJ0dWFsIHZvaWQgRGVjb2RlKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZWNvZGVDQiYgZGVjb2RlX2NiKSA9IDA7Ci0KLSAgLy8gUmVzZXRzIGRlY29kZXIgc3RhdGUuIEFsbCBwZW5kaW5nIERlY29kZSgpIHJlcXVlc3RzIHdpbGwgYmUgZmluaXNoZWQgb3IKLSAgLy8gYWJvcnRlZCBiZWZvcmUgfGNsb3N1cmV8IGlzIGNhbGxlZC4KLSAgLy8gTm90ZTogTm8gVmlkZW9EZWNvZGVyIGNhbGxzIHNob3VsZCBiZSBtYWRlIGJlZm9yZSB8Y2xvc3VyZXwgaXMgZXhlY3V0ZWQuCi0gIHZpcnR1YWwgdm9pZCBSZXNldChjb25zdCBiYXNlOjpDbG9zdXJlJiBjbG9zdXJlKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZWNvZGVyIG5lZWRzIGJpdHN0cmVhbSBjb252ZXJzaW9uIGJlZm9yZSBkZWNvZGluZy4KLSAgdmlydHVhbCBib29sIE5lZWRzQml0c3RyZWFtQ29udmVyc2lvbigpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGVjb2RlciBjdXJyZW50bHkgaGFzIHRoZSBhYmlsaXR5IHRvIGRlY29kZSBhbmQgcmV0dXJuCi0gIC8vIGEgVmlkZW9GcmFtZS4gTW9zdCBpbXBsZW1lbnRhdGlvbnMgY2FuIGFsbG9jYXRlIGEgbmV3IFZpZGVvRnJhbWUgYW5kIGhlbmNlCi0gIC8vIHRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuIE92ZXJyaWRlIGFuZCByZXR1cm4gZmFsc2UgZm9yIGRlY29kZXJzIHRoYXQKLSAgLy8gdXNlIGEgZml4ZWQgc2V0IG9mIFZpZGVvRnJhbWVzIGZvciBkZWNvZGluZy4KLSAgdmlydHVhbCBib29sIENhblJlYWRXaXRob3V0U3RhbGxpbmcoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGRlY29kZSByZXF1ZXN0cy4KLSAgdmlydHVhbCBpbnQgR2V0TWF4RGVjb2RlUmVxdWVzdHMoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWaWRlb0RlY29kZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVklERU9fREVDT0RFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNkZDc1ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVmlkZW9Db2RlYyBWaWRlb0NvZGVjUHJvZmlsZVRvVmlkZW9Db2RlYyhWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlKSB7Ci0gIHN3aXRjaCAocHJvZmlsZSkgewotICAgIGNhc2UgVklERU9fQ09ERUNfUFJPRklMRV9VTktOT1dOOgotICAgICAgcmV0dXJuIGtVbmtub3duVmlkZW9Db2RlYzsKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0JBU0VMSU5FOgotICAgIGNhc2UgSDI2NFBST0ZJTEVfTUFJTjoKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0VYVEVOREVEOgotICAgIGNhc2UgSDI2NFBST0ZJTEVfSElHSDoKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0hJR0gxMFBST0ZJTEU6Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9ISUdINDIyUFJPRklMRToKLSAgICBjYXNlIEgyNjRQUk9GSUxFX0hJR0g0NDRQUkVESUNUSVZFUFJPRklMRToKLSAgICBjYXNlIEgyNjRQUk9GSUxFX1NDQUxBQkxFQkFTRUxJTkU6Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9TQ0FMQUJMRUhJR0g6Ci0gICAgY2FzZSBIMjY0UFJPRklMRV9TVEVSRU9ISUdIOgotICAgIGNhc2UgSDI2NFBST0ZJTEVfTVVMVElWSUVXSElHSDoKLSAgICAgIHJldHVybiBrQ29kZWNIMjY0OwotICAgIGNhc2UgSEVWQ1BST0ZJTEVfTUFJTjoKLSAgICBjYXNlIEhFVkNQUk9GSUxFX01BSU4xMDoKLSAgICBjYXNlIEhFVkNQUk9GSUxFX01BSU5fU1RJTExfUElDVFVSRToKLSAgICAgIHJldHVybiBrQ29kZWNIRVZDOwotICAgIGNhc2UgVlA4UFJPRklMRV9BTlk6Ci0gICAgICByZXR1cm4ga0NvZGVjVlA4OwotICAgIGNhc2UgVlA5UFJPRklMRV9QUk9GSUxFMDoKLSAgICBjYXNlIFZQOVBST0ZJTEVfUFJPRklMRTE6Ci0gICAgY2FzZSBWUDlQUk9GSUxFX1BST0ZJTEUyOgotICAgIGNhc2UgVlA5UFJPRklMRV9QUk9GSUxFMzoKLSAgICAgIHJldHVybiBrQ29kZWNWUDk7Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFMDoKLSAgICBjYXNlIERPTEJZVklTSU9OX1BST0ZJTEU0OgotICAgIGNhc2UgRE9MQllWSVNJT05fUFJPRklMRTU6Ci0gICAgY2FzZSBET0xCWVZJU0lPTl9QUk9GSUxFNzoKLSAgICAgIHJldHVybiBrQ29kZWNEb2xieVZpc2lvbjsKLSAgICBjYXNlIFRIRU9SQVBST0ZJTEVfQU5ZOgotICAgICAgcmV0dXJuIGtDb2RlY1RoZW9yYTsKLSAgICBjYXNlIEFWMVBST0ZJTEVfUFJPRklMRV9NQUlOOgotICAgIGNhc2UgQVYxUFJPRklMRV9QUk9GSUxFX0hJR0g6Ci0gICAgY2FzZSBBVjFQUk9GSUxFX1BST0ZJTEVfUFJPOgotICAgICAgcmV0dXJuIGtDb2RlY0FWMTsKLSAgfQotICBOT1RSRUFDSEVEKCk7Ci0gIHJldHVybiBrVW5rbm93blZpZGVvQ29kZWM7Ci19Ci0KLVZpZGVvRGVjb2RlckNvbmZpZzo6VmlkZW9EZWNvZGVyQ29uZmlnKCkKLSAgICA6IGNvZGVjXyhrVW5rbm93blZpZGVvQ29kZWMpLAotICAgICAgcHJvZmlsZV8oVklERU9fQ09ERUNfUFJPRklMRV9VTktOT1dOKSwKLSAgICAgIGZvcm1hdF8oUElYRUxfRk9STUFUX1VOS05PV04pIHt9Ci0KLVZpZGVvRGVjb2RlckNvbmZpZzo6VmlkZW9EZWNvZGVyQ29uZmlnKAotICAgIFZpZGVvQ29kZWMgY29kZWMsIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUsIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgIENvbG9yU3BhY2UgY29sb3Jfc3BhY2UsIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGV4dHJhX2RhdGEsCi0gICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUpIHsKLSAgSW5pdGlhbGl6ZShjb2RlYywgcHJvZmlsZSwgZm9ybWF0LCBjb2xvcl9zcGFjZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgZXh0cmFfZGF0YSwgZW5jcnlwdGlvbl9zY2hlbWUpOwotfQotCi1WaWRlb0RlY29kZXJDb25maWc6On5WaWRlb0RlY29kZXJDb25maWcoKSB7fQotCi12b2lkIFZpZGVvRGVjb2RlckNvbmZpZzo6SW5pdGlhbGl6ZShWaWRlb0NvZGVjIGNvZGVjLCBWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvclNwYWNlIGNvbG9yX3NwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBleHRyYV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUpIHsKLSAgY29kZWNfID0gY29kZWM7Ci0gIHByb2ZpbGVfID0gcHJvZmlsZTsKLSAgZm9ybWF0XyA9IGZvcm1hdDsKLSAgY29sb3Jfc3BhY2VfID0gY29sb3Jfc3BhY2U7Ci0gIGNvZGVkX3NpemVfID0gY29kZWRfc2l6ZTsKLSAgdmlzaWJsZV9yZWN0XyA9IHZpc2libGVfcmVjdDsKLSAgbmF0dXJhbF9zaXplXyA9IG5hdHVyYWxfc2l6ZTsKLSAgZXh0cmFfZGF0YV8gPSBleHRyYV9kYXRhOwotICBlbmNyeXB0aW9uX3NjaGVtZV8gPSBlbmNyeXB0aW9uX3NjaGVtZTsKLQotICBzd2l0Y2ggKGNvbG9yX3NwYWNlKSB7Ci0gICAgY2FzZSBDT0xPUl9TUEFDRV9KUEVHOgotICAgICAgd2VibV9jb2xvcl9tZXRhZGF0YV8uY29sb3Jfc3BhY2UgPSBnZng6OkNvbG9yU3BhY2U6OkNyZWF0ZUpwZWcoKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09MT1JfU1BBQ0VfSERfUkVDNzA5OgotICAgICAgd2VibV9jb2xvcl9tZXRhZGF0YV8uY29sb3Jfc3BhY2UgPSBnZng6OkNvbG9yU3BhY2U6OkNyZWF0ZVJFQzcwOSgpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDT0xPUl9TUEFDRV9TRF9SRUM2MDE6Ci0gICAgICB3ZWJtX2NvbG9yX21ldGFkYXRhXy5jb2xvcl9zcGFjZSA9IGdmeDo6Q29sb3JTcGFjZTo6Q3JlYXRlUkVDNjAxKCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIENPTE9SX1NQQUNFX1VOU1BFQ0lGSUVEOgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1ib29sIFZpZGVvRGVjb2RlckNvbmZpZzo6SXNWYWxpZENvbmZpZygpIGNvbnN0IHsKLSAgcmV0dXJuIGNvZGVjXyAhPSBrVW5rbm93blZpZGVvQ29kZWMgJiYgbmF0dXJhbF9zaXplXy53aWR0aCgpID4gMCAmJgotICAgICAgICAgbmF0dXJhbF9zaXplXy5oZWlnaHQoKSA+IDA7Ci19Ci0KLWJvb2wgVmlkZW9EZWNvZGVyQ29uZmlnOjpNYXRjaGVzKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSBjb25zdCB7Ci0gIHJldHVybiAoKGNvZGVjKCkgPT0gY29uZmlnLmNvZGVjKCkpICYmIChmb3JtYXQoKSA9PSBjb25maWcuZm9ybWF0KCkpICYmCi0gICAgICAgICAgKHByb2ZpbGUoKSA9PSBjb25maWcucHJvZmlsZSgpKSAmJgotICAgICAgICAgIChjb2RlZF9zaXplKCkgPT0gY29uZmlnLmNvZGVkX3NpemUoKSkgJiYKLSAgICAgICAgICAodmlzaWJsZV9yZWN0KCkgPT0gY29uZmlnLnZpc2libGVfcmVjdCgpKSAmJgotICAgICAgICAgIChuYXR1cmFsX3NpemUoKSA9PSBjb25maWcubmF0dXJhbF9zaXplKCkpICYmCi0gICAgICAgICAgKGV4dHJhX2RhdGEoKSA9PSBjb25maWcuZXh0cmFfZGF0YSgpKSAmJgotICAgICAgICAgIChlbmNyeXB0aW9uX3NjaGVtZSgpLk1hdGNoZXMoY29uZmlnLmVuY3J5cHRpb25fc2NoZW1lKCkpKSAmJgotICAgICAgICAgIHdlYm1fY29sb3JfbWV0YWRhdGFfID09IGNvbmZpZy53ZWJtX2NvbG9yX21ldGFkYXRhKCkpOwotfQotCi1zdGQ6OnN0cmluZyBWaWRlb0RlY29kZXJDb25maWc6OkFzSHVtYW5SZWFkYWJsZVN0cmluZygpIGNvbnN0IHsKLSAgc3RkOjpvc3RyaW5nc3RyZWFtIHM7Ci0gIHMgPDwgImNvZGVjOiAiIDw8IEdldENvZGVjTmFtZShjb2RlYygpKSA8PCAiIGZvcm1hdDogIiA8PCBmb3JtYXQoKQotICAgIDw8ICIgcHJvZmlsZTogIiA8PCBHZXRQcm9maWxlTmFtZShwcm9maWxlKCkpIDw8ICIgY29kZWQgc2l6ZTogWyIKLSAgICA8PCBjb2RlZF9zaXplKCkud2lkdGgoKSA8PCAiLCIgPDwgY29kZWRfc2l6ZSgpLmhlaWdodCgpIDw8ICJdIgotICAgIDw8ICIgdmlzaWJsZSByZWN0OiBbIiA8PCB2aXNpYmxlX3JlY3QoKS54KCkgPDwgIiwiIDw8IHZpc2libGVfcmVjdCgpLnkoKQotICAgIDw8ICIsIiA8PCB2aXNpYmxlX3JlY3QoKS53aWR0aCgpIDw8ICIsIiA8PCB2aXNpYmxlX3JlY3QoKS5oZWlnaHQoKSA8PCAiXSIKLSAgICA8PCAiIG5hdHVyYWwgc2l6ZTogWyIgPDwgbmF0dXJhbF9zaXplKCkud2lkdGgoKSA8PCAiLCIKLSAgICA8PCBuYXR1cmFsX3NpemUoKS5oZWlnaHQoKSA8PCAiXSIKLSAgICA8PCAiIGhhcyBleHRyYSBkYXRhPyAiIDw8IChleHRyYV9kYXRhKCkuZW1wdHkoKSA/ICJmYWxzZSIgOiAidHJ1ZSIpCi0gICAgPDwgIiBlbmNyeXB0ZWQ/ICIgPDwgKGlzX2VuY3J5cHRlZCgpID8gInRydWUiIDogImZhbHNlIik7Ci0gIHJldHVybiBzLnN0cigpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmggYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzg5MjBjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19ERUNPREVSX0NPTkZJR19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19ERUNPREVSX0NPTkZJR19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2Uvb3B0aW9uYWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NvbG9yX3NwYWNlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9oZHJfbWV0YWRhdGEuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotTUVESUFfRVhQT1JUIFZpZGVvQ29kZWMKLVZpZGVvQ29kZWNQcm9maWxlVG9WaWRlb0NvZGVjKFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUpOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgVmlkZW9EZWNvZGVyQ29uZmlnIHsKLSBwdWJsaWM6Ci0gIC8vIENvbnN0cnVjdHMgYW4gdW5pbml0aWFsaXplZCBvYmplY3QuIENsaWVudHMgc2hvdWxkIGNhbGwgSW5pdGlhbGl6ZSgpIHdpdGgKLSAgLy8gYXBwcm9wcmlhdGUgdmFsdWVzIGJlZm9yZSB1c2luZy4KLSAgVmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0KLSAgLy8gQ29uc3RydWN0cyBhbiBpbml0aWFsaXplZCBvYmplY3QuIEl0IGlzIGFjY2VwdGFibGUgdG8gcGFzcyBpbiBOVUxMIGZvcgotICAvLyB8ZXh0cmFfZGF0YXwsIG90aGVyd2lzZSB0aGUgbWVtb3J5IGlzIGNvcGllZC4KLSAgVmlkZW9EZWNvZGVyQ29uZmlnKFZpZGVvQ29kZWMgY29kZWMsIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgQ29sb3JTcGFjZSBjb2xvcl9zcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgZXh0cmFfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIGVuY3J5cHRpb25fc2NoZW1lKTsKLQotICB+VmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0KLSAgLy8gUmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGlzIG9iamVjdC4KLSAgdm9pZCBJbml0aWFsaXplKFZpZGVvQ29kZWMgY29kZWMsIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgQ29sb3JTcGFjZSBjb2xvcl9zcGFjZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBleHRyYV9kYXRhLAotICAgICAgICAgICAgICAgICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG9iamVjdCBoYXMgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiB2YWx1ZXMsIGZhbHNlCi0gIC8vIG90aGVyd2lzZS4KLSAgYm9vbCBJc1ZhbGlkQ29uZmlnKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBmaWVsZHMgaW4gfGNvbmZpZ3wgbWF0Y2ggdGhpcyBjb25maWcuCi0gIC8vIE5vdGU6IFRoZSBjb250ZW50cyBvZiB8ZXh0cmFfZGF0YV98IGFyZSBjb21wYXJlZCBub3QgdGhlIHJhdyBwb2ludGVycy4KLSAgYm9vbCBNYXRjaGVzKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgfCp0aGlzfC4gIEZvciBkZWJ1Z2dpbmcgJiB0ZXN0Ci0gIC8vIG91dHB1dCBvbmx5LgotICBzdGQ6OnN0cmluZyBBc0h1bWFuUmVhZGFibGVTdHJpbmcoKSBjb25zdDsKLQotICBzdGQ6OnN0cmluZyBHZXRIdW1hblJlYWRhYmxlQ29kZWNOYW1lKCkgY29uc3Q7Ci0KLSAgc3RhdGljIHN0ZDo6c3RyaW5nIEdldEh1bWFuUmVhZGFibGVQcm9maWxlKFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUpOwotCi0gIFZpZGVvQ29kZWMgY29kZWMoKSBjb25zdCB7IHJldHVybiBjb2RlY187IH0KLSAgVmlkZW9Db2RlY1Byb2ZpbGUgcHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIHByb2ZpbGVfOyB9Ci0KLSAgLy8gVmlkZW8gZm9ybWF0IHVzZWQgdG8gZGV0ZXJtaW5lIFlVViBidWZmZXIgc2l6ZXMuCi0gIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0XzsgfQotCi0gIC8vIFRoZSBkZWZhdWx0IGNvbG9yIHNwYWNlIG9mIHRoZSBkZWNvZGVkIGZyYW1lcy4gRGVjb2RlcnMgc2hvdWxkIG91dHB1dAotICAvLyBmcmFtZXMgdGFnZ2VkIHdpdGggdGhpcyBjb2xvciBzcGFjZSB1bmxlc3MgdGhleSBmaW5kIGEgZGlmZmVyZW50IHZhbHVlIGluCi0gIC8vIHRoZSBiaXRzdHJlYW0uCi0gIENvbG9yU3BhY2UgY29sb3Jfc3BhY2UoKSBjb25zdCB7IHJldHVybiBjb2xvcl9zcGFjZV87IH0KLQotICAvLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIHZpZGVvIGZyYW1lIGltbWVkaWF0ZWx5IHBvc3QtZGVjb2RlLiBOb3QgYWxsIHBpeGVscwotICAvLyBpbiB0aGlzIHJlZ2lvbiBhcmUgdmFsaWQuCi0gIG1hdGg6OlNpemUgY29kZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGNvZGVkX3NpemVfOyB9Ci0KLSAgLy8gUmVnaW9uIG9mIHxjb2RlZF9zaXplX3wgdGhhdCBpcyB2aXNpYmxlLgotICBtYXRoOjpSZWN0IHZpc2libGVfcmVjdCgpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVfcmVjdF87IH0KLQotICAvLyBGaW5hbCB2aXNpYmxlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSB2aWRlbyBmcmFtZSB3aXRoIGFzcGVjdCByYXRpbyB0YWtlbgotICAvLyBpbnRvIGFjY291bnQuCi0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplKCkgY29uc3QgeyByZXR1cm4gbmF0dXJhbF9zaXplXzsgfQotCi0gIC8vIE9wdGlvbmFsIGJ5dGUgZGF0YSByZXF1aXJlZCB0byBpbml0aWFsaXplIHZpZGVvIGRlY29kZXJzLCBzdWNoIGFzIEguMjY0Ci0gIC8vIEFWQ0MgZGF0YS4KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGV4dHJhX2RhdGEoKSBjb25zdCB7IHJldHVybiBleHRyYV9kYXRhXzsgfQotCi0gIC8vIFdoZXRoZXIgdGhlIHZpZGVvIHN0cmVhbSBpcyBwb3RlbnRpYWxseSBlbmNyeXB0ZWQuCi0gIC8vIE5vdGUgdGhhdCBpbiBhIHBvdGVudGlhbGx5IGVuY3J5cHRlZCB2aWRlbyBzdHJlYW0sIGluZGl2aWR1YWwgYnVmZmVycwotICAvLyBjYW4gYmUgZW5jcnlwdGVkIG9yIG5vdCBlbmNyeXB0ZWQuCi0gIGJvb2wgaXNfZW5jcnlwdGVkKCkgY29uc3QgeyByZXR1cm4gZW5jcnlwdGlvbl9zY2hlbWVfLmlzX2VuY3J5cHRlZCgpOyB9Ci0KLSAgLy8gRW5jcnlwdGlvbiBzY2hlbWUgdXNlZCBmb3IgZW5jcnlwdGVkIGJ1ZmZlcnMuCi0gIGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIGVuY3J5cHRpb25fc2NoZW1lKCkgY29uc3QgewotICAgIHJldHVybiBlbmNyeXB0aW9uX3NjaGVtZV87Ci0gIH0KLQotICB2b2lkIHNldF93ZWJtX2NvbG9yX21ldGFkYXRhKGNvbnN0IFdlYk1Db2xvck1ldGFkYXRhJiB3ZWJtX2NvbG9yX21ldGFkYXRhKSB7Ci0gICAgd2VibV9jb2xvcl9tZXRhZGF0YV8gPSB3ZWJtX2NvbG9yX21ldGFkYXRhOwotICB9Ci0KLSAgY29uc3QgV2ViTUNvbG9yTWV0YWRhdGEmIHdlYm1fY29sb3JfbWV0YWRhdGEoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHdlYm1fY29sb3JfbWV0YWRhdGFfOwotICB9Ci0KLSAgdm9pZCBzZXRfbWltZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZSkgeyBtaW1lXyA9IG1pbWU7IH0KLSAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUoKSBjb25zdCB7IHJldHVybiBtaW1lXzsgfQotCi0gcHJpdmF0ZToKLSAgVmlkZW9Db2RlYyBjb2RlY187Ci0gIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGVfOwotCi0gIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0XzsKLQotICAvLyBUT0RPKHNlcnZvbGspOiBEZXByZWNhdGVkLCB1c2UgY29sb3Jfc3BhY2VfaW5mb18gaW5zdGVhZC4KLSAgQ29sb3JTcGFjZSBjb2xvcl9zcGFjZV87Ci0KLSAgbWF0aDo6U2l6ZSBjb2RlZF9zaXplXzsKLSAgbWF0aDo6UmVjdCB2aXNpYmxlX3JlY3RfOwotICBtYXRoOjpTaXplIG5hdHVyYWxfc2l6ZV87Ci0KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZXh0cmFfZGF0YV87Ci0KLSAgRW5jcnlwdGlvblNjaGVtZSBlbmNyeXB0aW9uX3NjaGVtZV87Ci0KLSAgV2ViTUNvbG9yTWV0YWRhdGEgd2VibV9jb2xvcl9tZXRhZGF0YV87Ci0KLSAgLy8gfG1pbWVffCBjb250YWlucyB0aGUgbWltZSB0eXBlIHN0cmluZyBzcGVjaWZpZWQgd2hlbiBjcmVhdGluZyB0aGUgc3RyZWFtLgotICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgc3RyZWFtIGlzIGNyZWF0ZWQgdmlhIE1lZGlhU291cmNlLCBpdCBpcyB0aGUgbWltZQotICAvLyBzdHJpbmcgcGFzc2VkIHRvIGFkZFNvdXJjZUJ1ZmZlcigpLiAgSXQgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZQotICAvLyBhcHByb3ByaWF0ZSBtaW1lIHN0cmluZyBpcyB1bmtub3duLiAgSXQgaXMgcHJvdmlkZWQgYXMgYW4gZXh0cmEgaW5mb3JtYXRpb24KLSAgLy8gYW5kIGNhbiBiZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgb3RoZXIgbWVtYmVyIHZhcmlhYmxlcy4KLSAgc3RkOjpzdHJpbmcgbWltZV87Ci0KLSAgLy8gTm90IHVzaW5nIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTiBoZXJlIGludGVudGlvbmFsbHkgdG8gYWxsb3cgdGhlIGNvbXBpbGVyCi0gIC8vIGdlbmVyYXRlZCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yLiBTaW5jZSB0aGUgZXh0cmEgZGF0YSBpcwotICAvLyB0eXBpY2FsbHkgc21hbGwsIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgaXMgbWluaW1hbC4KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0RFQ09ERVJfQ09ORklHX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZ191bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmJjMTQ2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2xpbWl0cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb191dGlsLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIGNvbnN0IFZpZGVvUGl4ZWxGb3JtYXQga1ZpZGVvRm9ybWF0ID0gUElYRUxfRk9STUFUX1lWMTI7Ci1zdGF0aWMgY29uc3QgbWF0aDo6U2l6ZSBrQ29kZWRTaXplKDMyMCwgMjQwKTsKLXN0YXRpYyBjb25zdCBtYXRoOjpSZWN0IGtWaXNpYmxlUmVjdCgzMjAsIDI0MCk7Ci1zdGF0aWMgY29uc3QgbWF0aDo6U2l6ZSBrTmF0dXJhbFNpemUoMzIwLCAyNDApOwotCi1URVNUKFZpZGVvRGVjb2RlckNvbmZpZ1Rlc3QsIEludmFsaWRfVW5zdXBwb3J0ZWRQaXhlbEZvcm1hdCkgewotICBWaWRlb0RlY29kZXJDb25maWcgY29uZmlnKGtDb2RlY1ZQOCwgVklERU9fQ09ERUNfUFJPRklMRV9VTktOT1dOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBJWEVMX0ZPUk1BVF9VTktOT1dOLCBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ29kZWRTaXplLCBrVmlzaWJsZVJlY3QsIGtOYXR1cmFsU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXB0eUV4dHJhRGF0YSgpLCBVbmVuY3J5cHRlZCgpKTsKLSAgRVhQRUNUX0ZBTFNFKGNvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotfQotCi1URVNUKFZpZGVvRGVjb2RlckNvbmZpZ1Rlc3QsIEludmFsaWRfQXNwZWN0UmF0aW9OdW1lcmF0b3JaZXJvKSB7Ci0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplID0gR2V0TmF0dXJhbFNpemUoa1Zpc2libGVSZWN0LnNpemUoKSwgMCwgMSk7Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyBjb25maWcoa0NvZGVjVlA4LCBWUDhQUk9GSUxFX0FOWSwga1ZpZGVvRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTE9SX1NQQUNFX1VOU1BFQ0lGSUVELCBrQ29kZWRTaXplLCBrVmlzaWJsZVJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplLCBFbXB0eUV4dHJhRGF0YSgpLCBVbmVuY3J5cHRlZCgpKTsKLSAgRVhQRUNUX0ZBTFNFKGNvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotfQotCi1URVNUKFZpZGVvRGVjb2RlckNvbmZpZ1Rlc3QsIEludmFsaWRfQXNwZWN0UmF0aW9EZW5vbWluYXRvclplcm8pIHsKLSAgbWF0aDo6U2l6ZSBuYXR1cmFsX3NpemUgPSBHZXROYXR1cmFsU2l6ZShrVmlzaWJsZVJlY3Quc2l6ZSgpLCAxLCAwKTsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIGNvbmZpZyhrQ29kZWNWUDgsIFZQOFBST0ZJTEVfQU5ZLCBrVmlkZW9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09MT1JfU1BBQ0VfVU5TUEVDSUZJRUQsIGtDb2RlZFNpemUsIGtWaXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsX3NpemUsIEVtcHR5RXh0cmFEYXRhKCksIFVuZW5jcnlwdGVkKCkpOwotICBFWFBFQ1RfRkFMU0UoY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci19Ci0KLVRFU1QoVmlkZW9EZWNvZGVyQ29uZmlnVGVzdCwgSW52YWxpZF9Bc3BlY3RSYXRpb051bWVyYXRvck5lZ2F0aXZlKSB7Ci0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplID0gR2V0TmF0dXJhbFNpemUoa1Zpc2libGVSZWN0LnNpemUoKSwgLTEsIDEpOwotICBWaWRlb0RlY29kZXJDb25maWcgY29uZmlnKGtDb2RlY1ZQOCwgVlA4UFJPRklMRV9BTlksIGtWaWRlb0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwga0NvZGVkU2l6ZSwga1Zpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9GQUxTRShjb25maWcuSXNWYWxpZENvbmZpZygpKTsKLX0KLQotVEVTVChWaWRlb0RlY29kZXJDb25maWdUZXN0LCBJbnZhbGlkX0FzcGVjdFJhdGlvRGVub21pbmF0b3JOZWdhdGl2ZSkgewotICBtYXRoOjpTaXplIG5hdHVyYWxfc2l6ZSA9IEdldE5hdHVyYWxTaXplKGtWaXNpYmxlUmVjdC5zaXplKCksIDEsIC0xKTsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIGNvbmZpZyhrQ29kZWNWUDgsIFZQOFBST0ZJTEVfQU5ZLCBrVmlkZW9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09MT1JfU1BBQ0VfVU5TUEVDSUZJRUQsIGtDb2RlZFNpemUsIGtWaXNpYmxlUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsX3NpemUsIEVtcHR5RXh0cmFEYXRhKCksIFVuZW5jcnlwdGVkKCkpOwotICBFWFBFQ1RfRkFMU0UoY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci19Ci0KLVRFU1QoVmlkZW9EZWNvZGVyQ29uZmlnVGVzdCwgSW52YWxpZF9Bc3BlY3RSYXRpb051bWVyYXRvclRvb0xhcmdlKSB7Ci0gIGludCB3aWR0aCA9IGtWaXNpYmxlUmVjdC5zaXplKCkud2lkdGgoKTsKLSAgaW50IG51bSA9IGNlaWwoc3RhdGljX2Nhc3Q8ZG91YmxlPihsaW1pdHM6OmtNYXhEaW1lbnNpb24gKyAxKSAvIHdpZHRoKTsKLSAgbWF0aDo6U2l6ZSBuYXR1cmFsX3NpemUgPSBHZXROYXR1cmFsU2l6ZShrVmlzaWJsZVJlY3Quc2l6ZSgpLCBudW0sIDEpOwotICBWaWRlb0RlY29kZXJDb25maWcgY29uZmlnKGtDb2RlY1ZQOCwgVlA4UFJPRklMRV9BTlksIGtWaWRlb0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwga0NvZGVkU2l6ZSwga1Zpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9GQUxTRShjb25maWcuSXNWYWxpZENvbmZpZygpKTsKLX0KLQotVEVTVChWaWRlb0RlY29kZXJDb25maWdUZXN0LCBJbnZhbGlkX0FzcGVjdFJhdGlvRGVub21pbmF0b3JUb29MYXJnZSkgewotICAvLyBEZW5vbWluYXRvciBpcyBsYXJnZSBlbm91Z2ggdGhhdCB0aGUgbmF0dXJhbCBzaXplIGhlaWdodCB3aWxsIGJlIHplcm8uCi0gIGludCBkZW4gPSAyICoga1Zpc2libGVSZWN0LnNpemUoKS53aWR0aCgpICsgMTsKLSAgbWF0aDo6U2l6ZSBuYXR1cmFsX3NpemUgPSBHZXROYXR1cmFsU2l6ZShrVmlzaWJsZVJlY3Quc2l6ZSgpLCAxLCBkZW4pOwotICBFWFBFQ1RfRVEoMCwgbmF0dXJhbF9zaXplLndpZHRoKCkpOwotICBWaWRlb0RlY29kZXJDb25maWcgY29uZmlnKGtDb2RlY1ZQOCwgVlA4UFJPRklMRV9BTlksIGtWaWRlb0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwga0NvZGVkU2l6ZSwga1Zpc2libGVSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9GQUxTRShjb25maWcuSXNWYWxpZENvbmZpZygpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZS5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI2MjJmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTA4MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbGltaXRzPgotCi0jaW5jbHVkZSAiYmFzZS9hdG9taWNfc2VxdWVuY2VfbnVtLmgiCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19oZWxwZXJzLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvYWxpZ25lZF9tZW1vcnkuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3BpZWNlLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ3ByaW50Zi5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL2dlb21ldHJ5L3BvaW50LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbGltaXRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3V0aWwuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gU3RhdGljIFBPRCBjbGFzcyBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaWRlbnRpZmllcnMgZm9yIGVhY2ggVmlkZW9GcmFtZS4KLXN0YXRpYyBiYXNlOjpBdG9taWNTZXF1ZW5jZU51bWJlciBnX3VuaXF1ZV9pZF9nZW5lcmF0b3I7Ci0KLXN0YXRpYyBib29sIElzUG93ZXJPZlR3byhzaXplX3QgeCkgeyByZXR1cm4geCAhPSAwICYmICh4ICYgKHggLSAxKSkgPT0gMDsgfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdCBSb3VuZFVwKHNpemVfdCB2YWx1ZSwgc2l6ZV90IGFsaWdubWVudCkgewotICBEQ0hFQ0soSXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwotICByZXR1cm4gKCh2YWx1ZSArIChhbGlnbm1lbnQgLSAxKSkgJiB+KGFsaWdubWVudCAtIDEpKTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QgUm91bmREb3duKHNpemVfdCB2YWx1ZSwgc2l6ZV90IGFsaWdubWVudCkgewotICBEQ0hFQ0soSXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwotICByZXR1cm4gdmFsdWUgJiB+KGFsaWdubWVudCAtIDEpOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgU3RvcmFnZVR5cGVUb1N0cmluZygKLSAgICBjb25zdCBWaWRlb0ZyYW1lOjpTdG9yYWdlVHlwZSBzdG9yYWdlX3R5cGUpIHsKLSAgc3dpdGNoIChzdG9yYWdlX3R5cGUpIHsKLSAgICBjYXNlIFZpZGVvRnJhbWU6OlNUT1JBR0VfVU5LTk9XTjoKLSAgICAgIHJldHVybiAiVU5LTk9XTiI7Ci0gICAgY2FzZSBWaWRlb0ZyYW1lOjpTVE9SQUdFX09QQVFVRToKLSAgICAgIHJldHVybiAiT1BBUVVFIjsKLSAgICBjYXNlIFZpZGVvRnJhbWU6OlNUT1JBR0VfVU5PV05FRF9NRU1PUlk6Ci0gICAgICByZXR1cm4gIlVOT1dORURfTUVNT1JZIjsKLSAgICBjYXNlIFZpZGVvRnJhbWU6OlNUT1JBR0VfT1dORURfTUVNT1JZOgotICAgICAgcmV0dXJuICJPV05FRF9NRU1PUlkiOwotICAgIGNhc2UgVmlkZW9GcmFtZTo6U1RPUkFHRV9TSE1FTToKLSAgICAgIHJldHVybiAiU0hNRU0iOwotI2lmIGRlZmluZWQoT1NfTElOVVgpCi0gICAgY2FzZSBWaWRlb0ZyYW1lOjpTVE9SQUdFX0RNQUJVRlM6Ci0gICAgICByZXR1cm4gIkRNQUJVRlMiOwotI2VuZGlmCi0gICAgY2FzZSBWaWRlb0ZyYW1lOjpTVE9SQUdFX0dQVV9NRU1PUllfQlVGRkVSUzoKLSAgICAgIHJldHVybiAiR1BVX01FTU9SWV9CVUZGRVJTIjsKLSAgICBjYXNlIFZpZGVvRnJhbWU6OlNUT1JBR0VfTU9KT19TSEFSRURfQlVGRkVSOgotICAgICAgcmV0dXJuICJNT0pPX1NIQVJFRF9CVUZGRVIiOwotICB9Ci0KLSAgTk9UUkVBQ0hFRCgpIDw8ICJJbnZhbGlkIFN0b3JhZ2VUeXBlIHByb3ZpZGVkOiAiIDw8IHN0b3JhZ2VfdHlwZTsKLSAgcmV0dXJuICJJTlZBTElEIjsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHxmcmFtZXwgaXMgYWNjZXNzaWJsZSBtYXBwZWQgaW4gdGhlIFZpZGVvRnJhbWUgbWVtb3J5IHNwYWNlLgotLy8gc3RhdGljCi1zdGF0aWMgYm9vbCBJc1N0b3JhZ2VUeXBlTWFwcGFibGUoVmlkZW9GcmFtZTo6U3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlKSB7Ci0gIHJldHVybgotI2lmIGRlZmluZWQoT1NfTElOVVgpCi0gICAgICAvLyBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQgYnV0IG1ha2VzIGV4cGxpY2l0IHRoYXQsIGF0IFZpZGVvRnJhbWUKLSAgICAgIC8vIGxldmVsLCBEbWFCdWZzIGFyZSBub3QgbWFwcGFibGUgZnJvbSB1c2Vyc3BhY2UuCi0gICAgICBzdG9yYWdlX3R5cGUgIT0gVmlkZW9GcmFtZTo6U1RPUkFHRV9ETUFCVUZTICYmCi0jZW5kaWYKLSAgICAgIChzdG9yYWdlX3R5cGUgPT0gVmlkZW9GcmFtZTo6U1RPUkFHRV9VTk9XTkVEX01FTU9SWSB8fAotICAgICAgIHN0b3JhZ2VfdHlwZSA9PSBWaWRlb0ZyYW1lOjpTVE9SQUdFX09XTkVEX01FTU9SWSB8fAotICAgICAgIHN0b3JhZ2VfdHlwZSA9PSBWaWRlb0ZyYW1lOjpTVE9SQUdFX1NITUVNIHx8Ci0gICAgICAgc3RvcmFnZV90eXBlID09IFZpZGVvRnJhbWU6OlNUT1JBR0VfR1BVX01FTU9SWV9CVUZGRVJTIHx8Ci0gICAgICAgc3RvcmFnZV90eXBlID09IFZpZGVvRnJhbWU6OlNUT1JBR0VfTU9KT19TSEFSRURfQlVGRkVSKTsKLX0KLQotLy8gQ2hlY2tzIGlmIHxzb3VyY2VfZm9ybWF0fCBjYW4gYmUgd3JhcHBlZCBpbnRvIGEgfHRhcmdldF9mb3JtYXR8IGZyYW1lLgotc3RhdGljIGJvb2wgQXJlVmFsaWRQaXhlbEZvcm1hdHNGb3JXcmFwKFZpZGVvUGl4ZWxGb3JtYXQgc291cmNlX2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb1BpeGVsRm9ybWF0IHRhcmdldF9mb3JtYXQpIHsKLSAgaWYgKHNvdXJjZV9mb3JtYXQgPT0gdGFyZ2V0X2Zvcm1hdCkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gSXQgaXMgcG9zc2libGUgdG8gYWRkIG90aGVyIHBsYW5hciB0byBwbGFuYXIgZm9ybWF0IGNvbnZlcnNpb25zIGhlcmUgaWYgdGhlCi0gIC8vIHVzZSBjYXNlIGlzIHRoZXJlLgotICByZXR1cm4gc291cmNlX2Zvcm1hdCA9PSBQSVhFTF9GT1JNQVRfWVYxMkEgJiYKLSAgICAgICAgIHRhcmdldF9mb3JtYXQgPT0gUElYRUxfRk9STUFUX0k0MjA7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBWaWRlb0ZyYW1lOjpJc1ZhbGlkQ29uZmlnKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VUeXBlIHN0b3JhZ2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUpIHsKLSAgLy8gQ2hlY2sgbWF4aW11bSBsaW1pdHMgZm9yIGFsbCBmb3JtYXRzLgotICBpbnQgY29kZWRfc2l6ZV9hcmVhID0gY29kZWRfc2l6ZS5HZXRDaGVja2VkQXJlYSgpLlZhbHVlT3JEZWZhdWx0KElOVF9NQVgpOwotICBpbnQgbmF0dXJhbF9zaXplX2FyZWEgPSBuYXR1cmFsX3NpemUuR2V0Q2hlY2tlZEFyZWEoKS5WYWx1ZU9yRGVmYXVsdChJTlRfTUFYKTsKLSAgc3RhdGljX2Fzc2VydChsaW1pdHM6OmtNYXhDYW52YXMgPCBJTlRfTUFYLCAiIik7Ci0gIGlmIChjb2RlZF9zaXplX2FyZWEgPiBsaW1pdHM6OmtNYXhDYW52YXMgfHwKLSAgICAgIGNvZGVkX3NpemUud2lkdGgoKSA+IGxpbWl0czo6a01heERpbWVuc2lvbiB8fAotICAgICAgY29kZWRfc2l6ZS5oZWlnaHQoKSA+IGxpbWl0czo6a01heERpbWVuc2lvbiB8fCB2aXNpYmxlX3JlY3QueCgpIDwgMCB8fAotICAgICAgdmlzaWJsZV9yZWN0LnkoKSA8IDAgfHwgdmlzaWJsZV9yZWN0LnJpZ2h0KCkgPiBjb2RlZF9zaXplLndpZHRoKCkgfHwKLSAgICAgIHZpc2libGVfcmVjdC5ib3R0b20oKSA+IGNvZGVkX3NpemUuaGVpZ2h0KCkgfHwKLSAgICAgIG5hdHVyYWxfc2l6ZV9hcmVhID4gbGltaXRzOjprTWF4Q2FudmFzIHx8Ci0gICAgICBuYXR1cmFsX3NpemUud2lkdGgoKSA+IGxpbWl0czo6a01heERpbWVuc2lvbiB8fAotICAgICAgbmF0dXJhbF9zaXplLmhlaWdodCgpID4gbGltaXRzOjprTWF4RGltZW5zaW9uKQotICAgIHJldHVybiBmYWxzZTsKLQotICAvLyBUT0RPKG1jYXNhcyk6IFJlbW92ZSBwYXJhbWV0ZXIgfHN0b3JhZ2VfdHlwZXwgd2hlbiB0aGUgb3BhcXVlIHN0b3JhZ2UgdHlwZXMKLSAgLy8gY29tcGx5IHdpdGggdGhlIGNoZWNrcyBiZWxvdy4gUmlnaHQgbm93IHdlIHNraXAgdGhlbS4KLSAgaWYgKCFJc1N0b3JhZ2VUeXBlTWFwcGFibGUoc3RvcmFnZV90eXBlKSkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gTWFrZSBzdXJlIG5ldyBmb3JtYXRzIGFyZSBwcm9wZXJseSBhY2NvdW50ZWQgZm9yIGluIHRoZSBtZXRob2QuCi0gIHN0YXRpY19hc3NlcnQoUElYRUxfRk9STUFUX01BWCA9PSAyNiwKLSAgICAgICAgICAgICAgICAiQWRkZWQgcGl4ZWwgZm9ybWF0LCBwbGVhc2UgcmV2aWV3IElzVmFsaWRDb25maWcoKSIpOwotCi0gIGlmIChmb3JtYXQgPT0gUElYRUxfRk9STUFUX1VOS05PV04pIHsKLSAgICByZXR1cm4gY29kZWRfc2l6ZS5Jc0VtcHR5KCkgJiYgdmlzaWJsZV9yZWN0LklzRW1wdHkoKSAmJgotICAgICAgICAgICBuYXR1cmFsX3NpemUuSXNFbXB0eSgpOwotICB9Ci0KLSAgLy8gQ2hlY2sgdGhhdCBzb2Z0d2FyZS1hbGxvY2F0ZWQgYnVmZmVyIGZvcm1hdHMgYXJlIG5vdCBlbXB0eS4KLSAgcmV0dXJuICFjb2RlZF9zaXplLklzRW1wdHkoKSAmJiAhdmlzaWJsZV9yZWN0LklzRW1wdHkoKSAmJgotICAgICAgICAgIW5hdHVyYWxfc2l6ZS5Jc0VtcHR5KCk7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0ZyYW1lOjpDcmVhdGVGcmFtZSgKLSAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIHJldHVybiBDcmVhdGVGcmFtZUludGVybmFsKGZvcm1hdCwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwgZmFsc2UpOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6Q3JlYXRlWmVyb0luaXRpYWxpemVkRnJhbWUoCi0gICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICByZXR1cm4gQ3JlYXRlRnJhbWVJbnRlcm5hbChmb3JtYXQsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXAsIHRydWUpOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6V3JhcE5hdGl2ZVRleHR1cmVzKAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgIGNvbnN0IGdwdTo6TWFpbGJveEhvbGRlciAoJm1haWxib3hfaG9sZGVycylba01heFBsYW5lc10sCi0gICAgY29uc3QgUmVsZWFzZU1haWxib3hDQiYgbWFpbGJveF9ob2xkZXJfcmVsZWFzZV9jYiwKLSAgICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLCBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsCi0gICAgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIGlmIChmb3JtYXQgIT0gUElYRUxfRk9STUFUX0FSR0IgJiYgZm9ybWF0ICE9IFBJWEVMX0ZPUk1BVF9YUkdCICYmCi0gICAgICBmb3JtYXQgIT0gUElYRUxfRk9STUFUX1VZVlkgJiYgZm9ybWF0ICE9IFBJWEVMX0ZPUk1BVF9OVjEyICYmCi0gICAgICBmb3JtYXQgIT0gUElYRUxfRk9STUFUX0k0MjApIHsKLSAgICBMT0coREZBVEFMKSA8PCAiVW5zdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0IHN1cHBvcnRlZCwgZ290ICIKLSAgICAgICAgICAgICAgICA8PCBWaWRlb1BpeGVsRm9ybWF0VG9TdHJpbmcoZm9ybWF0KTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBjb25zdCBTdG9yYWdlVHlwZSBzdG9yYWdlID0gU1RPUkFHRV9PUEFRVUU7Ci0gIGlmICghSXNWYWxpZENvbmZpZyhmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBjb25maWcuIgotICAgICAgICAgICAgICAgIDw8IENvbmZpZ1RvU3RyaW5nKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gbmV3IFZpZGVvRnJhbWUoZm9ybWF0LCBzdG9yYWdlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1haWxib3hfaG9sZGVycywgbWFpbGJveF9ob2xkZXJfcmVsZWFzZV9jYiwgdGltZXN0YW1wKTsKLX0KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFZpZGVvRnJhbWU6OldyYXBFeHRlcm5hbERhdGEoCi0gICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICByZXR1cm4gV3JhcEV4dGVybmFsU3RvcmFnZShmb3JtYXQsIFNUT1JBR0VfVU5PV05FRF9NRU1PUlksIGNvZGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLCBkYXRhLCBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCwgYmFzZTo6U2hhcmVkTWVtb3J5OjpOVUxMSGFuZGxlKCksIDApOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6V3JhcEV4dGVybmFsU2hhcmVkTWVtb3J5KAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgIHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBoYW5kbGUsCi0gICAgc2l6ZV90IGRhdGFfb2Zmc2V0LCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIHJldHVybiBXcmFwRXh0ZXJuYWxTdG9yYWdlKGZvcm1hdCwgU1RPUkFHRV9TSE1FTSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsX3NpemUsIGRhdGEsIGRhdGFfc2l6ZSwgdGltZXN0YW1wLCBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb2Zmc2V0KTsKLX0KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFZpZGVvRnJhbWU6OldyYXBFeHRlcm5hbFl1dkRhdGEoCi0gICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgaW50MzJfdCB5X3N0cmlkZSwgaW50MzJfdCB1X3N0cmlkZSwgaW50MzJfdCB2X3N0cmlkZSwgdWludDhfdCogeV9kYXRhLAotICAgIHVpbnQ4X3QqIHVfZGF0YSwgdWludDhfdCogdl9kYXRhLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIGNvbnN0IFN0b3JhZ2VUeXBlIHN0b3JhZ2UgPSBTVE9SQUdFX1VOT1dORURfTUVNT1JZOwotICBpZiAoIUlzVmFsaWRDb25maWcoZm9ybWF0LCBzdG9yYWdlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSkpIHsKLSAgICBMT0coREZBVEFMKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgY29uZmlnLiIKLSAgICAgICAgICAgICAgICA8PCBDb25maWdUb1N0cmluZyhmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsX3NpemUpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBmcmFtZShuZXcgVmlkZW9GcmFtZSgKLSAgICAgIGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsIHRpbWVzdGFtcCkpOwotICBmcmFtZS0+c3RyaWRlc19ba1lQbGFuZV0gPSB5X3N0cmlkZTsKLSAgZnJhbWUtPnN0cmlkZXNfW2tVUGxhbmVdID0gdV9zdHJpZGU7Ci0gIGZyYW1lLT5zdHJpZGVzX1trVlBsYW5lXSA9IHZfc3RyaWRlOwotICBmcmFtZS0+ZGF0YV9ba1lQbGFuZV0gPSB5X2RhdGE7Ci0gIGZyYW1lLT5kYXRhX1trVVBsYW5lXSA9IHVfZGF0YTsKLSAgZnJhbWUtPmRhdGFfW2tWUGxhbmVdID0gdl9kYXRhOwotICByZXR1cm4gZnJhbWU7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0ZyYW1lOjpXcmFwRXh0ZXJuYWxZdXZHcHVNZW1vcnlCdWZmZXJzKAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgIGludDMyX3QgeV9zdHJpZGUsIGludDMyX3QgdV9zdHJpZGUsIGludDMyX3Qgdl9zdHJpZGUsIHVpbnQ4X3QqIHlfZGF0YSwKLSAgICB1aW50OF90KiB1X2RhdGEsIHVpbnQ4X3QqIHZfZGF0YSwKLSAgICBjb25zdCBnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZSYgeV9oYW5kbGUsCi0gICAgY29uc3QgZ2Z4OjpHcHVNZW1vcnlCdWZmZXJIYW5kbGUmIHVfaGFuZGxlLAotICAgIGNvbnN0IGdmeDo6R3B1TWVtb3J5QnVmZmVySGFuZGxlJiB2X2hhbmRsZSwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICBjb25zdCBTdG9yYWdlVHlwZSBzdG9yYWdlID0gU1RPUkFHRV9HUFVfTUVNT1JZX0JVRkZFUlM7Ci0gIGlmICghSXNWYWxpZENvbmZpZyhmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBjb25maWcuIgotICAgICAgICAgICAgICAgIDw8IENvbmZpZ1RvU3RyaW5nKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lKG5ldyBWaWRlb0ZyYW1lKAotICAgICAgZm9ybWF0LCBzdG9yYWdlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSwgdGltZXN0YW1wKSk7Ci0gIGZyYW1lLT5zdHJpZGVzX1trWVBsYW5lXSA9IHlfc3RyaWRlOwotICBmcmFtZS0+c3RyaWRlc19ba1VQbGFuZV0gPSB1X3N0cmlkZTsKLSAgZnJhbWUtPnN0cmlkZXNfW2tWUGxhbmVdID0gdl9zdHJpZGU7Ci0gIGZyYW1lLT5kYXRhX1trWVBsYW5lXSA9IHlfZGF0YTsKLSAgZnJhbWUtPmRhdGFfW2tVUGxhbmVdID0gdV9kYXRhOwotICBmcmFtZS0+ZGF0YV9ba1ZQbGFuZV0gPSB2X2RhdGE7Ci0gIGZyYW1lLT5ncHVfbWVtb3J5X2J1ZmZlcl9oYW5kbGVzXy5wdXNoX2JhY2soeV9oYW5kbGUpOwotICBmcmFtZS0+Z3B1X21lbW9yeV9idWZmZXJfaGFuZGxlc18ucHVzaF9iYWNrKHVfaGFuZGxlKTsKLSAgZnJhbWUtPmdwdV9tZW1vcnlfYnVmZmVyX2hhbmRsZXNfLnB1c2hfYmFjayh2X2hhbmRsZSk7Ci0gIHJldHVybiBmcmFtZTsKLX0KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFZpZGVvRnJhbWU6OldyYXBFeHRlcm5hbFl1dmFEYXRhKAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgIGludDMyX3QgeV9zdHJpZGUsIGludDMyX3QgdV9zdHJpZGUsIGludDMyX3Qgdl9zdHJpZGUsIGludDMyX3QgYV9zdHJpZGUsCi0gICAgdWludDhfdCogeV9kYXRhLCB1aW50OF90KiB1X2RhdGEsIHVpbnQ4X3QqIHZfZGF0YSwgdWludDhfdCogYV9kYXRhLAotICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIHsKLSAgY29uc3QgU3RvcmFnZVR5cGUgc3RvcmFnZSA9IFNUT1JBR0VfVU5PV05FRF9NRU1PUlk7Ci0gIGlmICghSXNWYWxpZENvbmZpZyhmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBjb25maWcuIgotICAgICAgICAgICAgICAgIDw8IENvbmZpZ1RvU3RyaW5nKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoTnVtUGxhbmVzKGZvcm1hdCkgIT0gNCkgewotICAgIExPRyhERkFUQUwpIDw8ICJFeHBlY3RpbmcgWSwgVSwgViBhbmQgQSBwbGFuZXMgdG8gYmUgcHJlc2VudCBmb3IgdGhlIHZpZGVvIgotICAgICAgICAgICAgICAgIDw8ICIgZm9ybWF0LiI7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lKG5ldyBWaWRlb0ZyYW1lKAotICAgICAgZm9ybWF0LCBzdG9yYWdlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSwgdGltZXN0YW1wKSk7Ci0gIGZyYW1lLT5zdHJpZGVzX1trWVBsYW5lXSA9IHlfc3RyaWRlOwotICBmcmFtZS0+c3RyaWRlc19ba1VQbGFuZV0gPSB1X3N0cmlkZTsKLSAgZnJhbWUtPnN0cmlkZXNfW2tWUGxhbmVdID0gdl9zdHJpZGU7Ci0gIGZyYW1lLT5zdHJpZGVzX1trQVBsYW5lXSA9IGFfc3RyaWRlOwotICBmcmFtZS0+ZGF0YV9ba1lQbGFuZV0gPSB5X2RhdGE7Ci0gIGZyYW1lLT5kYXRhX1trVVBsYW5lXSA9IHVfZGF0YTsKLSAgZnJhbWUtPmRhdGFfW2tWUGxhbmVdID0gdl9kYXRhOwotICBmcmFtZS0+ZGF0YV9ba0FQbGFuZV0gPSBhX2RhdGE7Ci0gIHJldHVybiBmcmFtZTsKLX0KLQotI2lmIGRlZmluZWQoT1NfTElOVVgpCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6V3JhcEV4dGVybmFsRG1hYnVmcygKLSAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBkbWFidWZfZmRzLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIGNvbnN0IFN0b3JhZ2VUeXBlIHN0b3JhZ2UgPSBTVE9SQUdFX0RNQUJVRlM7Ci0gIGlmICghSXNWYWxpZENvbmZpZyhmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBjb25maWcuIgotICAgICAgICAgICAgICAgIDw8IENvbmZpZ1RvU3RyaW5nKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBncHU6Ok1haWxib3hIb2xkZXIgbWFpbGJveF9ob2xkZXJzW2tNYXhQbGFuZXNdOwotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lID0KLSAgICAgIG5ldyBWaWRlb0ZyYW1lKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICBtYWlsYm94X2hvbGRlcnMsIFJlbGVhc2VNYWlsYm94Q0IoKSwgdGltZXN0YW1wKTsKLSAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPkR1cGxpY2F0ZUZpbGVEZXNjcmlwdG9ycyhkbWFidWZfZmRzKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgQ291bGRuJ3QgZHVwbGljYXRlIGZkcy4iOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBmcmFtZTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChPU19NQUNPU1gpCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6V3JhcENWUGl4ZWxCdWZmZXIoCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBjdl9waXhlbF9idWZmZXIsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIHsKLSAgRENIRUNLKGN2X3BpeGVsX2J1ZmZlcik7Ci0gIERDSEVDSyhDRkdldFR5cGVJRChjdl9waXhlbF9idWZmZXIpID09IENWUGl4ZWxCdWZmZXJHZXRUeXBlSUQoKSk7Ci0KLSAgY29uc3QgT1NUeXBlIGN2X2Zvcm1hdCA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoY3ZfcGl4ZWxfYnVmZmVyKTsKLSAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQ7Ci0gIC8vIFRoZXJlIGFyZSB2ZXJ5IGZldyBjb21wYXRpYmxlIENWIHBpeGVsIGZvcm1hdHMsIHNvIGp1c3QgY2hlY2sgZWFjaC4KLSAgaWYgKGN2X2Zvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOFBsYW5hcikgewotICAgIGZvcm1hdCA9IFBJWEVMX0ZPUk1BVF9JNDIwOwotICB9IGVsc2UgaWYgKGN2X2Zvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDQ0WXBDYkNyOCkgewotICAgIGZvcm1hdCA9IFBJWEVMX0ZPUk1BVF9ZVjI0OwotICB9IGVsc2UgaWYgKGN2X2Zvcm1hdCA9PSAnNDIwdicpIHsKLSAgICAvLyBUT0RPKGpmcm95KTogVXNlIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRlb1JhbmdlIHdoZW4gdGhlCi0gICAgLy8gbWluaW11bSBPUyBYIGFuZCBpT1MgU0RLcyBwZXJtaXRzIGl0LgotICAgIGZvcm1hdCA9IFBJWEVMX0ZPUk1BVF9OVjEyOwotICB9IGVsc2UgewotICAgIExPRyhERkFUQUwpIDw8ICJDVlBpeGVsQnVmZmVyIGZvcm1hdCBub3Qgc3VwcG9ydGVkOiAiIDw8IGN2X2Zvcm1hdDsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGNvbnN0IG1hdGg6OlNpemUgY29kZWRfc2l6ZShDVkltYWdlQnVmZmVyR2V0RW5jb2RlZFNpemUoY3ZfcGl4ZWxfYnVmZmVyKSk7Ci0gIGNvbnN0IG1hdGg6OlJlY3QgdmlzaWJsZV9yZWN0KENWSW1hZ2VCdWZmZXJHZXRDbGVhblJlY3QoY3ZfcGl4ZWxfYnVmZmVyKSk7Ci0gIGNvbnN0IG1hdGg6OlNpemUgbmF0dXJhbF9zaXplKENWSW1hZ2VCdWZmZXJHZXREaXNwbGF5U2l6ZShjdl9waXhlbF9idWZmZXIpKTsKLSAgY29uc3QgU3RvcmFnZVR5cGUgc3RvcmFnZSA9IFNUT1JBR0VfVU5PV05FRF9NRU1PUlk7Ci0KLSAgaWYgKCFJc1ZhbGlkQ29uZmlnKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUpKSB7Ci0gICAgTE9HKERGQVRBTCkgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIGNvbmZpZy4iCi0gICAgICAgICAgICAgICAgPDwgQ29uZmlnVG9TdHJpbmcoZm9ybWF0LCBzdG9yYWdlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gZnJhbWUobmV3IFZpZGVvRnJhbWUoCi0gICAgICBmb3JtYXQsIHN0b3JhZ2UsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLCB0aW1lc3RhbXApKTsKLQotICBmcmFtZS0+Y3ZfcGl4ZWxfYnVmZmVyXy5yZXNldChjdl9waXhlbF9idWZmZXIsIGJhc2U6OnNjb3BlZF9wb2xpY3k6OlJFVEFJTik7Ci0gIHJldHVybiBmcmFtZTsKLX0KLSNlbmRpZgotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6V3JhcFZpZGVvRnJhbWUoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiYgZnJhbWUsIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplKSB7Ci0gIC8vIEZyYW1lcyB3aXRoIHRleHR1cmVzIG5lZWQgbWFpbGJveCBpbmZvIHByb3BhZ2F0ZWQsIGFuZCB0aGVyZSdzIG5vIHN1cHBvcnQKLSAgLy8gZm9yIHRoYXQgaGVyZSB5ZXQsIHNlZSBodHRwOi8vY3JidWcvMzYyNTIxLgotICBDSEVDSyghZnJhbWUtPkhhc1RleHR1cmVzKCkpOwotICBEQ0hFQ0soZnJhbWUtPnZpc2libGVfcmVjdCgpLkNvbnRhaW5zKHZpc2libGVfcmVjdCkpOwotCi0gIGlmICghQXJlVmFsaWRQaXhlbEZvcm1hdHNGb3JXcmFwKGZyYW1lLT5mb3JtYXQoKSwgZm9ybWF0KSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBmb3JtYXQgY29udmVyc2lvbi4iCi0gICAgICAgICAgICAgICAgPDwgVmlkZW9QaXhlbEZvcm1hdFRvU3RyaW5nKGZyYW1lLT5mb3JtYXQoKSkgPDwgIiB0byAiCi0gICAgICAgICAgICAgICAgPDwgVmlkZW9QaXhlbEZvcm1hdFRvU3RyaW5nKGZvcm1hdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoIUlzVmFsaWRDb25maWcoZm9ybWF0LCBmcmFtZS0+c3RvcmFnZV90eXBlKCksIGZyYW1lLT5jb2RlZF9zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSkpIHsKLSAgICBMT0coREZBVEFMKSA8PCBfX2Z1bmNfXyA8PCAiIEludmFsaWQgY29uZmlnLiIKLSAgICAgICAgICAgICAgICA8PCBDb25maWdUb1N0cmluZyhmb3JtYXQsIGZyYW1lLT5zdG9yYWdlX3R5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+Y29kZWRfc2l6ZSgpLCB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gd3JhcHBpbmdfZnJhbWUoCi0gICAgICBuZXcgVmlkZW9GcmFtZShmb3JtYXQsIGZyYW1lLT5zdG9yYWdlX3R5cGUoKSwgZnJhbWUtPmNvZGVkX3NpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLCBmcmFtZS0+dGltZXN0YW1wKCkpKTsKLQotICAvLyBDb3B5IGFsbCBtZXRhZGF0YSB0byB0aGUgd3JhcHBlZCBmcmFtZS4KLSAgd3JhcHBpbmdfZnJhbWUtPm1ldGFkYXRhKCktPk1lcmdlTWV0YWRhdGFGcm9tKGZyYW1lLT5tZXRhZGF0YSgpKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE51bVBsYW5lcyhmb3JtYXQpOyArK2kpIHsKLSAgICB3cmFwcGluZ19mcmFtZS0+c3RyaWRlc19baV0gPSBmcmFtZS0+c3RyaWRlKGkpOwotICAgIHdyYXBwaW5nX2ZyYW1lLT5kYXRhX1tpXSA9IGZyYW1lLT5kYXRhKGkpOwotICB9Ci0KLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAvLyBJZiB0aGVyZSBhcmUgYW55IHxkbWFidWZfZmRzX3wgcGx1Z2dlZCBpbiwgd2Ugc2hvdWxkIGR1cGxpY2F0ZSB0aGVtLgotICBpZiAoZnJhbWUtPnN0b3JhZ2VfdHlwZSgpID09IFNUT1JBR0VfRE1BQlVGUykgewotICAgIHN0ZDo6dmVjdG9yPGludD4gb3JpZ2luYWxfZmRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01heFBsYW5lczsgKytpKQotICAgICAgb3JpZ2luYWxfZmRzLnB1c2hfYmFjayhmcmFtZS0+ZG1hYnVmX2ZkKGkpKTsKLSAgICBpZiAoIXdyYXBwaW5nX2ZyYW1lLT5EdXBsaWNhdGVGaWxlRGVzY3JpcHRvcnMob3JpZ2luYWxfZmRzKSkgewotICAgICAgTE9HKERGQVRBTCkgPDwgX19mdW5jX18gPDwgIiBDb3VsZG4ndCBkdXBsaWNhdGUgZmRzLiI7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gIH0KLSNlbmRpZgotCi0gIGlmIChmcmFtZS0+c3RvcmFnZV90eXBlKCkgPT0gU1RPUkFHRV9TSE1FTSkKLSAgICB3cmFwcGluZ19mcmFtZS0+QWRkU2hhcmVkTWVtb3J5SGFuZGxlKGZyYW1lLT5zaGFyZWRfbWVtb3J5X2hhbmRsZV8pOwotCi0gIHJldHVybiB3cmFwcGluZ19mcmFtZTsKLX0KLQotLy8gc3RhdGljCi1zY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFZpZGVvRnJhbWU6OkNyZWF0ZUVPU0ZyYW1lKCkgewotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lID0KLSAgICAgIG5ldyBWaWRlb0ZyYW1lKFBJWEVMX0ZPUk1BVF9VTktOT1dOLCBTVE9SQUdFX1VOS05PV04sIG1hdGg6OlNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlJlY3QoKSwgbWF0aDo6U2l6ZSgpLCBrTm9UaW1lc3RhbXApOwotICBmcmFtZS0+bWV0YWRhdGEoKS0+U2V0Qm9vbGVhbihWaWRlb0ZyYW1lTWV0YWRhdGE6OkVORF9PRl9TVFJFQU0sIHRydWUpOwotICByZXR1cm4gZnJhbWU7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0ZyYW1lOjpDcmVhdGVDb2xvckZyYW1lKAotICAgIGNvbnN0IG1hdGg6OlNpemUmIHNpemUsIHVpbnQ4X3QgeSwgdWludDhfdCB1LCB1aW50OF90IHYsCi0gICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lID0KLSAgICAgIENyZWF0ZUZyYW1lKFBJWEVMX0ZPUk1BVF9ZVjEyLCBzaXplLCBtYXRoOjpSZWN0KHNpemUpLCBzaXplLCB0aW1lc3RhbXApOwotICBGaWxsWVVWKGZyYW1lLmdldCgpLCB5LCB1LCB2KTsKLSAgcmV0dXJuIGZyYW1lOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6Q3JlYXRlQmxhY2tGcmFtZShjb25zdCBtYXRoOjpTaXplJiBzaXplKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0JsYWNrWSA9IDB4MDA7Ci0gIGNvbnN0IHVpbnQ4X3Qga0JsYWNrVVYgPSAweDgwOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1plcm87Ci0gIHJldHVybiBDcmVhdGVDb2xvckZyYW1lKHNpemUsIGtCbGFja1ksIGtCbGFja1VWLCBrQmxhY2tVViwga1plcm8pOwotfQotCi0vLyBzdGF0aWMKLXNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gVmlkZW9GcmFtZTo6Q3JlYXRlVHJhbnNwYXJlbnRGcmFtZSgKLSAgICBjb25zdCBtYXRoOjpTaXplJiBzaXplKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0JsYWNrWSA9IDB4MDA7Ci0gIGNvbnN0IHVpbnQ4X3Qga0JsYWNrVVYgPSAweDAwOwotICBjb25zdCB1aW50OF90IGtUcmFuc3BhcmVudEEgPSAweDAwOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1plcm87Ci0gIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gZnJhbWUgPQotICAgICAgQ3JlYXRlRnJhbWUoUElYRUxfRk9STUFUX1lWMTJBLCBzaXplLCBtYXRoOjpSZWN0KHNpemUpLCBzaXplLCBrWmVybyk7Ci0gIEZpbGxZVVZBKGZyYW1lLmdldCgpLCBrQmxhY2tZLCBrQmxhY2tVViwga0JsYWNrVVYsIGtUcmFuc3BhcmVudEEpOwotICByZXR1cm4gZnJhbWU7Ci19Ci0KLS8vIHN0YXRpYwotc2l6ZV90IFZpZGVvRnJhbWU6Ok51bVBsYW5lcyhWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCkgewotICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgUElYRUxfRk9STUFUX1VZVlk6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVZMjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9BUkdCOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1hSR0I6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfUkdCMjQ6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfUkdCMzI6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfTUpQRUc6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWTg6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWTE2OgotICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfTlYxMjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9OVjIxOgotICAgIGNhc2UgUElYRUxfRk9STUFUX01UMjE6Ci0gICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9JNDIwOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lWMTI6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVYxNjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVjI0OgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMFA5OgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMlA5OgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQ0NFA5OgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMFAxMDoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVVY0MjJQMTA6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDQ0UDEwOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMFAxMjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVVY0MjJQMTI6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDQ0UDEyOgotICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVYxMkE6Ci0gICAgICByZXR1cm4gNDsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9VTktOT1dOOgotICAgICAgYnJlYWs7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpIDw8ICJVbnN1cHBvcnRlZCB2aWRlbyBmcmFtZSBmb3JtYXQ6ICIgPDwgZm9ybWF0OwotICByZXR1cm4gMDsKLX0KLQotLy8gc3RhdGljCi1zaXplX3QgVmlkZW9GcmFtZTo6QWxsb2NhdGlvblNpemUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSkgewotICBzaXplX3QgdG90YWwgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE51bVBsYW5lcyhmb3JtYXQpOyArK2kpCi0gICAgdG90YWwgKz0gUGxhbmVTaXplKGZvcm1hdCwgaSwgY29kZWRfc2l6ZSkuR2V0QXJlYSgpOwotICByZXR1cm4gdG90YWw7Ci19Ci0KLS8vIHN0YXRpYwotbWF0aDo6U2l6ZSBWaWRlb0ZyYW1lOjpQbGFuZVNpemUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIHNpemVfdCBwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUpIHsKLSAgRENIRUNLKElzVmFsaWRQbGFuZShwbGFuZSwgZm9ybWF0KSk7Ci0KLSAgaW50IHdpZHRoID0gY29kZWRfc2l6ZS53aWR0aCgpOwotICBpbnQgaGVpZ2h0ID0gY29kZWRfc2l6ZS5oZWlnaHQoKTsKLSAgaWYgKGZvcm1hdCAhPSBQSVhFTF9GT1JNQVRfQVJHQikgewotICAgIC8vIEFsaWduIHRvIG11bHRpcGxlLW9mLXR3byBzaXplIG92ZXJhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IG5vbi1zdWJzYW1wbGVkCi0gICAgLy8gcGxhbmVzIGNhbiBiZSBhZGRyZXNzZWQgYnkgcGl4ZWwgd2l0aCB0aGUgc2FtZSBzY2FsaW5nIGFzIHRoZSBzdWJzYW1wbGVkCi0gICAgLy8gcGxhbmVzLgotICAgIHdpZHRoID0gUm91bmRVcCh3aWR0aCwgMik7Ci0gICAgaGVpZ2h0ID0gUm91bmRVcChoZWlnaHQsIDIpOwotICB9Ci0KLSAgY29uc3QgbWF0aDo6U2l6ZSBzdWJzYW1wbGUgPSBTYW1wbGVTaXplKGZvcm1hdCwgcGxhbmUpOwotICBEQ0hFQ0tfRVEod2lkdGggJSBzdWJzYW1wbGUud2lkdGgoKSwgMCk7Ci0gIERDSEVDS19FUShoZWlnaHQgJSBzdWJzYW1wbGUuaGVpZ2h0KCksIDApOwotICByZXR1cm4gbWF0aDo6U2l6ZShCeXRlc1BlckVsZW1lbnQoZm9ybWF0LCBwbGFuZSkgKiB3aWR0aCAvIHN1YnNhbXBsZS53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgLyBzdWJzYW1wbGUuaGVpZ2h0KCkpOwotfQotCi0vLyBzdGF0aWMKLWludCBWaWRlb0ZyYW1lOjpQbGFuZUhvcml6b250YWxCaXRzUGVyUGl4ZWwoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwbGFuZSkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXQpKTsKLSAgY29uc3QgaW50IGJpdHNfcGVyX2VsZW1lbnQgPSA4ICogQnl0ZXNQZXJFbGVtZW50KGZvcm1hdCwgcGxhbmUpOwotICBjb25zdCBpbnQgaG9yaXpfcGl4ZWxzX3Blcl9lbGVtZW50ID0gU2FtcGxlU2l6ZShmb3JtYXQsIHBsYW5lKS53aWR0aCgpOwotICBEQ0hFQ0tfRVEoYml0c19wZXJfZWxlbWVudCAlIGhvcml6X3BpeGVsc19wZXJfZWxlbWVudCwgMCk7Ci0gIHJldHVybiBiaXRzX3Blcl9lbGVtZW50IC8gaG9yaXpfcGl4ZWxzX3Blcl9lbGVtZW50OwotfQotCi0vLyBzdGF0aWMKLWludCBWaWRlb0ZyYW1lOjpQbGFuZUJpdHNQZXJQaXhlbChWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgc2l6ZV90IHBsYW5lKSB7Ci0gIERDSEVDSyhJc1ZhbGlkUGxhbmUocGxhbmUsIGZvcm1hdCkpOwotICByZXR1cm4gUGxhbmVIb3Jpem9udGFsQml0c1BlclBpeGVsKGZvcm1hdCwgcGxhbmUpIC8KLSAgICAgICAgIFNhbXBsZVNpemUoZm9ybWF0LCBwbGFuZSkuaGVpZ2h0KCk7Ci19Ci0KLS8vIHN0YXRpYwotc2l6ZV90IFZpZGVvRnJhbWU6OlJvd0J5dGVzKHNpemVfdCBwbGFuZSwgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXQpKTsKLSAgcmV0dXJuIEJ5dGVzUGVyRWxlbWVudChmb3JtYXQsIHBsYW5lKSAqIENvbHVtbnMocGxhbmUsIGZvcm1hdCwgd2lkdGgpOwotfQotCi0vLyBzdGF0aWMKLXNpemVfdCBWaWRlb0ZyYW1lOjpSb3dzKHNpemVfdCBwbGFuZSwgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGludCBoZWlnaHQpIHsKLSAgRENIRUNLKElzVmFsaWRQbGFuZShwbGFuZSwgZm9ybWF0KSk7Ci0gIGNvbnN0IGludCBzYW1wbGVfaGVpZ2h0ID0gU2FtcGxlU2l6ZShmb3JtYXQsIHBsYW5lKS5oZWlnaHQoKTsKLSAgcmV0dXJuIFJvdW5kVXAoaGVpZ2h0LCBzYW1wbGVfaGVpZ2h0KSAvIHNhbXBsZV9oZWlnaHQ7Ci19Ci0KLS8vIHN0YXRpYwotc2l6ZV90IFZpZGVvRnJhbWU6OkNvbHVtbnMoc2l6ZV90IHBsYW5lLCBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoKSB7Ci0gIERDSEVDSyhJc1ZhbGlkUGxhbmUocGxhbmUsIGZvcm1hdCkpOwotICBjb25zdCBpbnQgc2FtcGxlX3dpZHRoID0gU2FtcGxlU2l6ZShmb3JtYXQsIHBsYW5lKS53aWR0aCgpOwotICByZXR1cm4gUm91bmRVcCh3aWR0aCwgc2FtcGxlX3dpZHRoKSAvIHNhbXBsZV93aWR0aDsKLX0KLQotLy8gc3RhdGljCi12b2lkIFZpZGVvRnJhbWU6Okhhc2hGcmFtZUZvclRlc3RpbmcoYmFzZTo6TUQ1Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+JiBmcmFtZSkgewotICBEQ0hFQ0soY29udGV4dCk7Ci0gIGZvciAoc2l6ZV90IHBsYW5lID0gMDsgcGxhbmUgPCBOdW1QbGFuZXMoZnJhbWUtPmZvcm1hdCgpKTsgKytwbGFuZSkgewotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGZyYW1lLT5yb3dzKHBsYW5lKTsgKytyb3cpIHsKLSAgICAgIGJhc2U6Ok1ENVVwZGF0ZSgKLSAgICAgICAgICBjb250ZXh0LAotICAgICAgICAgIGJhc2U6OlN0cmluZ1BpZWNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyYW1lLT5kYXRhKHBsYW5lKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnN0cmlkZShwbGFuZSkgKiByb3cpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5yb3dfYnl0ZXMocGxhbmUpKSk7Ci0gICAgfQotICB9Ci19Ci0KLWJvb2wgVmlkZW9GcmFtZTo6SXNNYXBwYWJsZSgpIGNvbnN0IHsKLSAgcmV0dXJuIElzU3RvcmFnZVR5cGVNYXBwYWJsZShzdG9yYWdlX3R5cGVfKTsKLX0KLQotYm9vbCBWaWRlb0ZyYW1lOjpIYXNUZXh0dXJlcygpIGNvbnN0IHsKLSAgcmV0dXJuICFtYWlsYm94X2hvbGRlcnNfWzBdLm1haWxib3guSXNaZXJvKCk7Ci19Ci0KLWdmeDo6Q29sb3JTcGFjZSBWaWRlb0ZyYW1lOjpDb2xvclNwYWNlKCkgY29uc3QgewotICBpZiAoY29sb3Jfc3BhY2VfID09IGdmeDo6Q29sb3JTcGFjZSgpKSB7Ci0gICAgaW50IHZpZGVvZnJhbWVfY29sb3Jfc3BhY2U7Ci0gICAgaWYgKG1ldGFkYXRhKCktPkdldEludGVnZXIobWVkaWE6OlZpZGVvRnJhbWVNZXRhZGF0YTo6Q09MT1JfU1BBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZGVvZnJhbWVfY29sb3Jfc3BhY2UpKSB7Ci0gICAgICBzd2l0Y2ggKHZpZGVvZnJhbWVfY29sb3Jfc3BhY2UpIHsKLSAgICAgICAgY2FzZSBtZWRpYTo6Q09MT1JfU1BBQ0VfSlBFRzoKLSAgICAgICAgICByZXR1cm4gZ2Z4OjpDb2xvclNwYWNlOjpDcmVhdGVKcGVnKCk7Ci0gICAgICAgIGNhc2UgbWVkaWE6OkNPTE9SX1NQQUNFX0hEX1JFQzcwOToKLSAgICAgICAgICByZXR1cm4gZ2Z4OjpDb2xvclNwYWNlOjpDcmVhdGVSRUM3MDkoKTsKLSAgICAgICAgY2FzZSBtZWRpYTo6Q09MT1JfU1BBQ0VfU0RfUkVDNjAxOgotICAgICAgICAgIHJldHVybiBnZng6OkNvbG9yU3BhY2U6OkNyZWF0ZVJFQzYwMSgpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gY29sb3Jfc3BhY2VfOwotfQotCi12b2lkIFZpZGVvRnJhbWU6OnNldF9jb2xvcl9zcGFjZShjb25zdCBnZng6OkNvbG9yU3BhY2UmIGNvbG9yX3NwYWNlKSB7Ci0gIGNvbG9yX3NwYWNlXyA9IGNvbG9yX3NwYWNlOwotfQotCi1pbnQgVmlkZW9GcmFtZTo6c3RyaWRlKHNpemVfdCBwbGFuZSkgY29uc3QgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXRfKSk7Ci0gIHJldHVybiBzdHJpZGVzX1twbGFuZV07Ci19Ci0KLWludCBWaWRlb0ZyYW1lOjpyb3dfYnl0ZXMoc2l6ZV90IHBsYW5lKSBjb25zdCB7Ci0gIHJldHVybiBSb3dCeXRlcyhwbGFuZSwgZm9ybWF0XywgY29kZWRfc2l6ZV8ud2lkdGgoKSk7Ci19Ci0KLWludCBWaWRlb0ZyYW1lOjpyb3dzKHNpemVfdCBwbGFuZSkgY29uc3QgewotICByZXR1cm4gUm93cyhwbGFuZSwgZm9ybWF0XywgY29kZWRfc2l6ZV8uaGVpZ2h0KCkpOwotfQotCi1jb25zdCB1aW50OF90KiBWaWRlb0ZyYW1lOjpkYXRhKHNpemVfdCBwbGFuZSkgY29uc3QgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXRfKSk7Ci0gIERDSEVDSyhJc01hcHBhYmxlKCkpOwotICByZXR1cm4gZGF0YV9bcGxhbmVdOwotfQotCi11aW50OF90KiBWaWRlb0ZyYW1lOjpkYXRhKHNpemVfdCBwbGFuZSkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXRfKSk7Ci0gIERDSEVDSyhJc01hcHBhYmxlKCkpOwotICByZXR1cm4gZGF0YV9bcGxhbmVdOwotfQotCi1jb25zdCB1aW50OF90KiBWaWRlb0ZyYW1lOjp2aXNpYmxlX2RhdGEoc2l6ZV90IHBsYW5lKSBjb25zdCB7Ci0gIERDSEVDSyhJc1ZhbGlkUGxhbmUocGxhbmUsIGZvcm1hdF8pKTsKLSAgRENIRUNLKElzTWFwcGFibGUoKSk7Ci0KLSAgLy8gQ2FsY3VsYXRlIGFuIG9mZnNldCB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFsbCBwbGFuZXMuCi0gIGNvbnN0IG1hdGg6OlNpemUgYWxpZ25tZW50ID0gQ29tbW9uQWxpZ25tZW50KGZvcm1hdF8pOwotICBjb25zdCBnZng6OlBvaW50IG9mZnNldChSb3VuZERvd24odmlzaWJsZV9yZWN0Xy54KCksIGFsaWdubWVudC53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUm91bmREb3duKHZpc2libGVfcmVjdF8ueSgpLCBhbGlnbm1lbnQuaGVpZ2h0KCkpKTsKLQotICBjb25zdCBtYXRoOjpTaXplIHN1YnNhbXBsZSA9IFNhbXBsZVNpemUoZm9ybWF0XywgcGxhbmUpOwotICBEQ0hFQ0tfRVEob2Zmc2V0LngoKSAlIHN1YnNhbXBsZS53aWR0aCgpLCAwKTsKLSAgRENIRUNLX0VRKG9mZnNldC55KCkgJSBzdWJzYW1wbGUuaGVpZ2h0KCksIDApOwotICByZXR1cm4gZGF0YShwbGFuZSkgKwotICAgICAgICAgc3RyaWRlKHBsYW5lKSAqIChvZmZzZXQueSgpIC8gc3Vic2FtcGxlLmhlaWdodCgpKSArICAvLyBSb3cgb2Zmc2V0LgotICAgICAgICAgQnl0ZXNQZXJFbGVtZW50KGZvcm1hdF8sIHBsYW5lKSAqICAgICAgICAgICAgICAgICAgICAvLyBDb2x1bW4gb2Zmc2V0LgotICAgICAgICAgICAgIChvZmZzZXQueCgpIC8gc3Vic2FtcGxlLndpZHRoKCkpOwotfQotCi11aW50OF90KiBWaWRlb0ZyYW1lOjp2aXNpYmxlX2RhdGEoc2l6ZV90IHBsYW5lKSB7Ci0gIHJldHVybiBjb25zdF9jYXN0PHVpbnQ4X3QqPigKLSAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFZpZGVvRnJhbWUqPih0aGlzKS0+dmlzaWJsZV9kYXRhKHBsYW5lKSk7Ci19Ci0KLWNvbnN0IGdwdTo6TWFpbGJveEhvbGRlciYgVmlkZW9GcmFtZTo6bWFpbGJveF9ob2xkZXIoCi0gICAgc2l6ZV90IHRleHR1cmVfaW5kZXgpIGNvbnN0IHsKLSAgRENIRUNLKEhhc1RleHR1cmVzKCkpOwotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHRleHR1cmVfaW5kZXgsIGZvcm1hdF8pKTsKLSAgcmV0dXJuIG1haWxib3hfaG9sZGVyc19bdGV4dHVyZV9pbmRleF07Ci19Ci0KLWJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBWaWRlb0ZyYW1lOjpzaGFyZWRfbWVtb3J5X2hhbmRsZSgpIGNvbnN0IHsKLSAgRENIRUNLX0VRKHN0b3JhZ2VfdHlwZV8sIFNUT1JBR0VfU0hNRU0pOwotICBEQ0hFQ0soc2hhcmVkX21lbW9yeV9oYW5kbGVfICE9IGJhc2U6OlNoYXJlZE1lbW9yeTo6TlVMTEhhbmRsZSgpKTsKLSAgcmV0dXJuIHNoYXJlZF9tZW1vcnlfaGFuZGxlXzsKLX0KLQotc2l6ZV90IFZpZGVvRnJhbWU6OnNoYXJlZF9tZW1vcnlfb2Zmc2V0KCkgY29uc3QgewotICBEQ0hFQ0tfRVEoc3RvcmFnZV90eXBlXywgU1RPUkFHRV9TSE1FTSk7Ci0gIERDSEVDSyhzaGFyZWRfbWVtb3J5X2hhbmRsZV8gIT0gYmFzZTo6U2hhcmVkTWVtb3J5OjpOVUxMSGFuZGxlKCkpOwotICByZXR1cm4gc2hhcmVkX21lbW9yeV9vZmZzZXRfOwotfQotCi1jb25zdCBzdGQ6OnZlY3RvcjxnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZT4mCi1WaWRlb0ZyYW1lOjpncHVfbWVtb3J5X2J1ZmZlcl9oYW5kbGVzKCkgY29uc3QgewotICBEQ0hFQ0tfRVEoc3RvcmFnZV90eXBlXywgU1RPUkFHRV9HUFVfTUVNT1JZX0JVRkZFUlMpOwotICBEQ0hFQ0soIWdwdV9tZW1vcnlfYnVmZmVyX2hhbmRsZXNfLmVtcHR5KCkpOwotICByZXR1cm4gZ3B1X21lbW9yeV9idWZmZXJfaGFuZGxlc187Ci19Ci0KLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotaW50IFZpZGVvRnJhbWU6OmRtYWJ1Zl9mZChzaXplX3QgcGxhbmUpIGNvbnN0IHsKLSAgRENIRUNLX0VRKHN0b3JhZ2VfdHlwZV8sIFNUT1JBR0VfRE1BQlVGUyk7Ci0gIERDSEVDSyhJc1ZhbGlkUGxhbmUocGxhbmUsIGZvcm1hdF8pKTsKLSAgcmV0dXJuIGRtYWJ1Zl9mZHNfW3BsYW5lXS5nZXQoKTsKLX0KLQotYm9vbCBWaWRlb0ZyYW1lOjpEdXBsaWNhdGVGaWxlRGVzY3JpcHRvcnMoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgaW5fZmRzKSB7Ci0gIC8vIFRPRE8obWNhc2FzKTogU3VwcG9ydCBvZmZzZXRzIGZvciBlLmcuIG11bHRpcGxhbmFyIGluc2lkZSBhIHNpbmdsZSB8aW5fZmR8LgotCi0gIHN0b3JhZ2VfdHlwZV8gPSBTVE9SQUdFX0RNQUJVRlM7Ci0gIC8vIFRPRE8ocG9zY2lhayk6IFRoaXMgaXMgbm90IGV4YWN0bHkgY29ycmVjdCwgaXQncyBwb3NzaWJsZSBmb3Igb25lCi0gIC8vIGJ1ZmZlciB0byBjb250YWluIG1vcmUgdGhhbiBvbmUgcGxhbmUuCi0gIGlmIChpbl9mZHMuc2l6ZSgpICE9IE51bVBsYW5lcyhmb3JtYXRfKSkgewotICAgIExPRyhGQVRBTCkgPDwgIk5vdCBlbm91Z2ggZG1hYnVmIGZkcyBwcm92aWRlZCwgZ290OiAiIDw8IGluX2Zkcy5zaXplKCkKLSAgICAgICAgICAgICAgIDw8ICIsIGV4cGVjdGVkOiAiIDw8IE51bVBsYW5lcyhmb3JtYXRfKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBNYWtlIHN1cmUgdGhhdCBhbGwgZmRzIGFyZSBjbG9zZWQgaWYgYW55IGR1cCgpIGZhaWxzLAotICBiYXNlOjpTY29wZWRGRCB0ZW1wX2RtYWJ1Zl9mZHNba01heFBsYW5lc107Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5fZmRzLnNpemUoKTsgKytpKSB7Ci0gICAgdGVtcF9kbWFidWZfZmRzW2ldID0gYmFzZTo6U2NvcGVkRkQoSEFORExFX0VJTlRSKGR1cChpbl9mZHNbaV0pKSk7Ci0gICAgaWYgKCF0ZW1wX2RtYWJ1Zl9mZHNbaV0uaXNfdmFsaWQoKSkgewotICAgICAgRFBMT0coRVJST1IpIDw8ICJGYWlsZWQgZHVwbGljYXRpbmcgYSBkbWFidWYgZmQiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtNYXhQbGFuZXM7ICsraSkKLSAgICBkbWFidWZfZmRzX1tpXSA9IHN0ZDo6bW92ZSh0ZW1wX2RtYWJ1Zl9mZHNbaV0pOwotCi0gIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLXZvaWQgVmlkZW9GcmFtZTo6QWRkU2hhcmVkTWVtb3J5SGFuZGxlKGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBoYW5kbGUpIHsKLSAgc3RvcmFnZV90eXBlXyA9IFNUT1JBR0VfU0hNRU07Ci0gIHNoYXJlZF9tZW1vcnlfaGFuZGxlXyA9IGhhbmRsZTsKLX0KLQotI2lmIGRlZmluZWQoT1NfTUFDT1NYKQotQ1ZQaXhlbEJ1ZmZlclJlZiBWaWRlb0ZyYW1lOjpjdl9waXhlbF9idWZmZXIoKSBjb25zdCB7Ci0gIHJldHVybiBjdl9waXhlbF9idWZmZXJfLmdldCgpOwotfQotI2VuZGlmCi0KLXZvaWQgVmlkZW9GcmFtZTo6QWRkRGVzdHJ1Y3Rpb25PYnNlcnZlcihjb25zdCBiYXNlOjpDbG9zdXJlJiBjYWxsYmFjaykgewotICBEQ0hFQ0soIWNhbGxiYWNrLmlzX251bGwoKSk7Ci0gIGRvbmVfY2FsbGJhY2tzXy5wdXNoX2JhY2soY2FsbGJhY2spOwotfQotCi12b2lkIFZpZGVvRnJhbWU6OlVwZGF0ZVJlbGVhc2VTeW5jVG9rZW4oU3luY1Rva2VuQ2xpZW50KiBjbGllbnQpIHsKLSAgRENIRUNLKEhhc1RleHR1cmVzKCkpOwotICBiYXNlOjpBdXRvTG9jayBsb2NrZXIocmVsZWFzZV9zeW5jX3Rva2VuX2xvY2tfKTsKLSAgLy8gTXVzdCB3YWl0IG9uIHRoZSBwcmV2aW91cyBzeW5jIHBvaW50IGJlZm9yZSBpbnNlcnRpbmcgYSBuZXcgc3luYyBwb2ludCBzbwotICAvLyB0aGF0IHxtYWlsYm94X2hvbGRlcnNfcmVsZWFzZV9jYl98IGd1YXJhbnRlZXMgdGhlIHByZXZpb3VzIHN5bmMgcG9pbnQKLSAgLy8gb2NjdXJyZWQgd2hlbiBpdCB3YWl0cyBvbiB8cmVsZWFzZV9zeW5jX3Rva2VuX3wuCi0gIGlmIChyZWxlYXNlX3N5bmNfdG9rZW5fLkhhc0RhdGEoKSkgY2xpZW50LT5XYWl0U3luY1Rva2VuKHJlbGVhc2Vfc3luY190b2tlbl8pOwotICBjbGllbnQtPkdlbmVyYXRlU3luY1Rva2VuKCZyZWxlYXNlX3N5bmNfdG9rZW5fKTsKLX0KLQotc3RkOjpzdHJpbmcgVmlkZW9GcmFtZTo6QXNIdW1hblJlYWRhYmxlU3RyaW5nKCkgewotICBpZiAobWV0YWRhdGEoKS0+SXNUcnVlKG1lZGlhOjpWaWRlb0ZyYW1lTWV0YWRhdGE6OkVORF9PRl9TVFJFQU0pKQotICAgIHJldHVybiAiZW5kIG9mIHN0cmVhbSI7Ci0KLSAgc3RkOjpvc3RyaW5nc3RyZWFtIHM7Ci0gIHMgPDwgQ29uZmlnVG9TdHJpbmcoZm9ybWF0Xywgc3RvcmFnZV90eXBlXywgY29kZWRfc2l6ZV8sIHZpc2libGVfcmVjdF8sCi0gICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplXykKLSAgICA8PCAiIHRpbWVzdGFtcDoiIDw8IHRpbWVzdGFtcF8uSW5NaWNyb3NlY29uZHMoKTsKLSAgcmV0dXJuIHMuc3RyKCk7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0ZyYW1lOjpXcmFwRXh0ZXJuYWxTdG9yYWdlKAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBTdG9yYWdlVHlwZSBzdG9yYWdlX3R5cGUsCi0gICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wLCBiYXNlOjpTaGFyZWRNZW1vcnlIYW5kbGUgaGFuZGxlLAotICAgIHNpemVfdCBkYXRhX29mZnNldCkgewotICBEQ0hFQ0soSXNTdG9yYWdlVHlwZU1hcHBhYmxlKHN0b3JhZ2VfdHlwZSkpOwotCi0gIC8vIFRPRE8obWl1KTogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3VwcG9ydCBhbnkgcGl4ZWwgZm9ybWF0LgotICAvLyBodHRwOi8vY3JidWcuY29tLzU1NTkwOQotICBpZiAoZm9ybWF0ICE9IFBJWEVMX0ZPUk1BVF9JNDIwKSB7Ci0gICAgTE9HKERGQVRBTCkgPDwgIk9ubHkgUElYRUxfRk9STUFUX0k0MjAgZm9ybWF0IHN1cHBvcnRlZDogIgotICAgICAgICAgICAgICAgIDw8IFZpZGVvUGl4ZWxGb3JtYXRUb1N0cmluZyhmb3JtYXQpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKCFJc1ZhbGlkQ29uZmlnKGZvcm1hdCwgc3RvcmFnZV90eXBlLCBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICBuYXR1cmFsX3NpemUpKSB7Ci0gICAgTE9HKERGQVRBTCkgPDwgX19mdW5jX18gPDwgIiBJbnZhbGlkIGNvbmZpZy4iCi0gICAgICAgICAgICAgICAgPDwgQ29uZmlnVG9TdHJpbmcoZm9ybWF0LCBzdG9yYWdlX3R5cGUsIGNvZGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBmcmFtZTsKLSAgaWYgKHN0b3JhZ2VfdHlwZSA9PSBTVE9SQUdFX1NITUVNKSB7Ci0gICAgZnJhbWUgPSBuZXcgVmlkZW9GcmFtZShmb3JtYXQsIHN0b3JhZ2VfdHlwZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplLCB0aW1lc3RhbXAsIGhhbmRsZSwgZGF0YV9vZmZzZXQpOwotICB9IGVsc2UgewotICAgIGZyYW1lID0gbmV3IFZpZGVvRnJhbWUoZm9ybWF0LCBzdG9yYWdlX3R5cGUsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgdGltZXN0YW1wKTsKLSAgfQotICBmcmFtZS0+c3RyaWRlc19ba1lQbGFuZV0gPSBjb2RlZF9zaXplLndpZHRoKCk7Ci0gIC8vIFRPRE8obWl1KTogVGhpcyBhbHdheXMgcm91bmRzIHdpZHRocyBkb3duLCB3aGVyZWFzIFZpZGVvRnJhbWU6OlJvd0J5dGVzKCkKLSAgLy8gYWx3YXlzIHJvdW5kcyB1cC4gIFRoaXMgaW5jb25zaXN0ZW5jeSBtdXN0IGJlIHJlc29sdmVkLiAgUGVyaGFwcyBhCi0gIC8vIENvbW1vbkFsaWdubWVudCgpIGNoZWNrIHNob3VsZCBiZSBtYWRlIGluIElzVmFsaWRDb25maWcoKT8KLSAgLy8gaHR0cDovL2NyYnVnLmNvbS81NTU5MDkKLSAgZnJhbWUtPnN0cmlkZXNfW2tVUGxhbmVdID0gY29kZWRfc2l6ZS53aWR0aCgpIC8gMjsKLSAgZnJhbWUtPnN0cmlkZXNfW2tWUGxhbmVdID0gY29kZWRfc2l6ZS53aWR0aCgpIC8gMjsKLSAgZnJhbWUtPmRhdGFfW2tZUGxhbmVdID0gZGF0YTsKLSAgZnJhbWUtPmRhdGFfW2tVUGxhbmVdID0gZGF0YSArIGNvZGVkX3NpemUuR2V0QXJlYSgpOwotICBmcmFtZS0+ZGF0YV9ba1ZQbGFuZV0gPSBkYXRhICsgKGNvZGVkX3NpemUuR2V0QXJlYSgpICogNSAvIDQpOwotICByZXR1cm4gZnJhbWU7Ci19Ci0KLVZpZGVvRnJhbWU6OlZpZGVvRnJhbWUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApCi0gICAgOiBmb3JtYXRfKGZvcm1hdCksCi0gICAgICBzdG9yYWdlX3R5cGVfKHN0b3JhZ2VfdHlwZSksCi0gICAgICBjb2RlZF9zaXplXyhjb2RlZF9zaXplKSwKLSAgICAgIHZpc2libGVfcmVjdF8odmlzaWJsZV9yZWN0KSwKLSAgICAgIG5hdHVyYWxfc2l6ZV8obmF0dXJhbF9zaXplKSwKLSAgICAgIHNoYXJlZF9tZW1vcnlfaGFuZGxlXyhiYXNlOjpTaGFyZWRNZW1vcnk6Ok5VTExIYW5kbGUoKSksCi0gICAgICBzaGFyZWRfbWVtb3J5X29mZnNldF8oMCksCi0gICAgICB0aW1lc3RhbXBfKHRpbWVzdGFtcCksCi0gICAgICB1bmlxdWVfaWRfKGdfdW5pcXVlX2lkX2dlbmVyYXRvci5HZXROZXh0KCkpIHsKLSAgRENIRUNLKElzVmFsaWRDb25maWcoZm9ybWF0Xywgc3RvcmFnZV90eXBlLCBjb2RlZF9zaXplXywgdmlzaWJsZV9yZWN0XywKLSAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplXykpOwotICBtZW1zZXQoJm1haWxib3hfaG9sZGVyc18sIDAsIHNpemVvZihtYWlsYm94X2hvbGRlcnNfKSk7Ci0gIG1lbXNldCgmc3RyaWRlc18sIDAsIHNpemVvZihzdHJpZGVzXykpOwotICBtZW1zZXQoJmRhdGFfLCAwLCBzaXplb2YoZGF0YV8pKTsKLX0KLQotVmlkZW9GcmFtZTo6flZpZGVvRnJhbWUoKSB7Ci0gIGlmICghbWFpbGJveF9ob2xkZXJzX3JlbGVhc2VfY2JfLmlzX251bGwoKSkgewotICAgIGdwdTo6U3luY1Rva2VuIHJlbGVhc2Vfc3luY190b2tlbjsKLSAgICB7Ci0gICAgICAvLyBUbyBlbnN1cmUgdGhhdCBjaGFuZ2VzIHRvIHxyZWxlYXNlX3N5bmNfdG9rZW5ffCBhcmUgdmlzaWJsZSBvbiB0aGlzCi0gICAgICAvLyB0aHJlYWQgKGltcGx5IGEgbWVtb3J5IGJhcnJpZXIpLgotICAgICAgYmFzZTo6QXV0b0xvY2sgbG9ja2VyKHJlbGVhc2Vfc3luY190b2tlbl9sb2NrXyk7Ci0gICAgICByZWxlYXNlX3N5bmNfdG9rZW4gPSByZWxlYXNlX3N5bmNfdG9rZW5fOwotICAgIH0KLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmbWFpbGJveF9ob2xkZXJzX3JlbGVhc2VfY2JfKS5SdW4ocmVsZWFzZV9zeW5jX3Rva2VuKTsKLSAgfQotCi0gIGZvciAoYXV0byYgY2FsbGJhY2sgOiBkb25lX2NhbGxiYWNrc18pIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZjYWxsYmFjaykuUnVuKCk7Ci19Ci0KLS8vIHN0YXRpYwotc3RkOjpzdHJpbmcgVmlkZW9GcmFtZTo6Q29uZmlnVG9TdHJpbmcoY29uc3QgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdG9yYWdlVHlwZSBzdG9yYWdlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplKSB7Ci0gIHJldHVybiBiYXNlOjpTdHJpbmdQcmludGYoCi0gICAgICAiZm9ybWF0OiVzIHN0b3JhZ2VfdHlwZTolcyBjb2RlZF9zaXplOiVzIHZpc2libGVfcmVjdDolcyBuYXR1cmFsX3NpemU6JXMiLAotICAgICAgVmlkZW9QaXhlbEZvcm1hdFRvU3RyaW5nKGZvcm1hdCkuY19zdHIoKSwKLSAgICAgIFN0b3JhZ2VUeXBlVG9TdHJpbmcoc3RvcmFnZV90eXBlKS5jX3N0cigpLCBjb2RlZF9zaXplLlRvU3RyaW5nKCkuY19zdHIoKSwKLSAgICAgIHZpc2libGVfcmVjdC5Ub1N0cmluZygpLmNfc3RyKCksIG5hdHVyYWxfc2l6ZS5Ub1N0cmluZygpLmNfc3RyKCkpOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgVmlkZW9GcmFtZTo6SXNWYWxpZFBsYW5lKHNpemVfdCBwbGFuZSwgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpIHsKLSAgRENIRUNLX0xFKE51bVBsYW5lcyhmb3JtYXQpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGtNYXhQbGFuZXMpKTsKLSAgcmV0dXJuIChwbGFuZSA8IE51bVBsYW5lcyhmb3JtYXQpKTsKLX0KLQotLy8gc3RhdGljCi1tYXRoOjpTaXplIFZpZGVvRnJhbWU6OkRldGVybWluZUFsaWduZWRTaXplKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBkaW1lbnNpb25zKSB7Ci0gIGNvbnN0IG1hdGg6OlNpemUgYWxpZ25tZW50ID0gQ29tbW9uQWxpZ25tZW50KGZvcm1hdCk7Ci0gIGNvbnN0IG1hdGg6OlNpemUgYWRqdXN0ZWQgPQotICAgICAgbWF0aDo6U2l6ZShSb3VuZFVwKGRpbWVuc2lvbnMud2lkdGgoKSwgYWxpZ25tZW50LndpZHRoKCkpLAotICAgICAgICAgICAgICAgICBSb3VuZFVwKGRpbWVuc2lvbnMuaGVpZ2h0KCksIGFsaWdubWVudC5oZWlnaHQoKSkpOwotICBEQ0hFQ0soKGFkanVzdGVkLndpZHRoKCkgJSBhbGlnbm1lbnQud2lkdGgoKSA9PSAwKSAmJgotICAgICAgICAgKGFkanVzdGVkLmhlaWdodCgpICUgYWxpZ25tZW50LmhlaWdodCgpID09IDApKTsKLSAgcmV0dXJuIGFkanVzdGVkOwotfQotCi12b2lkIFZpZGVvRnJhbWU6OnNldF9kYXRhKHNpemVfdCBwbGFuZSwgdWludDhfdCogcHRyKSB7Ci0gIERDSEVDSyhJc1ZhbGlkUGxhbmUocGxhbmUsIGZvcm1hdF8pKTsKLSAgRENIRUNLKHB0cik7Ci0gIGRhdGFfW3BsYW5lXSA9IHB0cjsKLX0KLQotdm9pZCBWaWRlb0ZyYW1lOjpzZXRfc3RyaWRlKHNpemVfdCBwbGFuZSwgaW50IHN0cmlkZSkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXRfKSk7Ci0gIERDSEVDS19HVChzdHJpZGUsIDApOwotICBzdHJpZGVzX1twbGFuZV0gPSBzdHJpZGU7Ci19Ci0KLVZpZGVvRnJhbWU6OlZpZGVvRnJhbWUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaGFyZWRfbWVtb3J5X29mZnNldCkKLSAgICA6IFZpZGVvRnJhbWUoZm9ybWF0LCBzdG9yYWdlX3R5cGUsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLAotICAgICAgICAgICAgICAgICB0aW1lc3RhbXApIHsKLSAgRENIRUNLX0VRKHN0b3JhZ2VfdHlwZSwgU1RPUkFHRV9TSE1FTSk7Ci0gIEFkZFNoYXJlZE1lbW9yeUhhbmRsZShoYW5kbGUpOwotICBzaGFyZWRfbWVtb3J5X29mZnNldF8gPSBzaGFyZWRfbWVtb3J5X29mZnNldDsKLX0KLQotVmlkZW9GcmFtZTo6VmlkZW9GcmFtZShWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgU3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3B1OjpNYWlsYm94SG9sZGVyICgmbWFpbGJveF9ob2xkZXJzKVtrTWF4UGxhbmVzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVsZWFzZU1haWxib3hDQiYgbWFpbGJveF9ob2xkZXJfcmVsZWFzZV9jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkKLSAgICA6IFZpZGVvRnJhbWUoZm9ybWF0LCBzdG9yYWdlX3R5cGUsIGNvZGVkX3NpemUsIHZpc2libGVfcmVjdCwgbmF0dXJhbF9zaXplLAotICAgICAgICAgICAgICAgICB0aW1lc3RhbXApIHsKLSAgbWVtY3B5KCZtYWlsYm94X2hvbGRlcnNfLCBtYWlsYm94X2hvbGRlcnMsIHNpemVvZihtYWlsYm94X2hvbGRlcnNfKSk7Ci0gIG1haWxib3hfaG9sZGVyc19yZWxlYXNlX2NiXyA9IG1haWxib3hfaG9sZGVyX3JlbGVhc2VfY2I7Ci19Ci0KLS8vIHN0YXRpYwotc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0ZyYW1lOjpDcmVhdGVGcmFtZUludGVybmFsKAotICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAsIGJvb2wgemVyb19pbml0aWFsaXplX21lbW9yeSkgewotICBpZiAoIUlzWXV2UGxhbmFyKGZvcm1hdCkpIHsKLSAgICBOT1RJTVBMRU1FTlRFRCgpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gU2luY2Ugd2UncmUgY3JlYXRpbmcgYSBuZXcgWVVWIGZyYW1lIChhbmQgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGl0Ci0gIC8vIG91cnNlbHZlcyksIHdlIGNhbiBwYWQgdGhlIHJlcXVlc3RlZCB8Y29kZWRfc2l6ZXwgaWYgbmVjZXNzYXJ5IGlmIHRoZQotICAvLyByZXF1ZXN0IGRvZXMgbm90IGxpbmUgdXAgb24gc2FtcGxlIGJvdW5kYXJpZXMuIFNlZSBkaXNjdXNzaW9uIGF0Ci0gIC8vIGh0dHA6Ly9jcnJldi5jb20vMTI0MDgzMzAwMwotICBjb25zdCBtYXRoOjpTaXplIG5ld19jb2RlZF9zaXplID0gRGV0ZXJtaW5lQWxpZ25lZFNpemUoZm9ybWF0LCBjb2RlZF9zaXplKTsKLSAgY29uc3QgU3RvcmFnZVR5cGUgc3RvcmFnZSA9IFNUT1JBR0VfT1dORURfTUVNT1JZOwotICBpZiAoIUlzVmFsaWRDb25maWcoZm9ybWF0LCBzdG9yYWdlLCBuZXdfY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbF9zaXplKSkgewotICAgIExPRyhERkFUQUwpIDw8IF9fZnVuY19fIDw8ICIgSW52YWxpZCBjb25maWcuIgotICAgICAgICAgICAgICAgIDw8IENvbmZpZ1RvU3RyaW5nKGZvcm1hdCwgc3RvcmFnZSwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IGZyYW1lKG5ldyBWaWRlb0ZyYW1lKAotICAgICAgZm9ybWF0LCBzdG9yYWdlLCBuZXdfY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsIHRpbWVzdGFtcCkpOwotICBmcmFtZS0+QWxsb2NhdGVZVVYoemVyb19pbml0aWFsaXplX21lbW9yeSk7Ci0gIHJldHVybiBmcmFtZTsKLX0KLQotLy8gc3RhdGljCi1tYXRoOjpTaXplIFZpZGVvRnJhbWU6OlNhbXBsZVNpemUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIHNpemVfdCBwbGFuZSkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXQpKTsKLQotICBzd2l0Y2ggKHBsYW5lKSB7Ci0gICAgY2FzZSBrWVBsYW5lOiAgLy8gYW5kIGtBUkdCUGxhbmU6Ci0gICAgY2FzZSBrQVBsYW5lOgotICAgICAgcmV0dXJuIG1hdGg6OlNpemUoMSwgMSk7Ci0KLSAgICBjYXNlIGtVUGxhbmU6ICAvLyBhbmQga1VWUGxhbmU6Ci0gICAgY2FzZSBrVlBsYW5lOgotICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfWVYyNDoKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDQ0UDk6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQ0NFAxMDoKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDQ0UDEyOgotICAgICAgICAgIHJldHVybiBtYXRoOjpTaXplKDEsIDEpOwotCi0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lWMTY6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMlA5OgotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVVY0MjJQMTA6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMlAxMjoKLSAgICAgICAgICByZXR1cm4gbWF0aDo6U2l6ZSgyLCAxKTsKLQotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVjEyOgotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9JNDIwOgotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVjEyQToKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfTlYxMjoKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfTlYyMToKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfTVQyMToKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIwUDk6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMFAxMDoKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIwUDEyOgotICAgICAgICAgIHJldHVybiBtYXRoOjpTaXplKDIsIDIpOwotCi0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1VOS05PV046Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1VZVlk6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1lVWTI6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX0FSR0I6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1hSR0I6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1JHQjI0OgotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9SR0IzMjoKLSAgICAgICAgY2FzZSBQSVhFTF9GT1JNQVRfTUpQRUc6Ci0gICAgICAgIGNhc2UgUElYRUxfRk9STUFUX1k4OgotICAgICAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZMTY6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gbWF0aDo6U2l6ZSgpOwotfQotCi0vLyBzdGF0aWMKLWludCBWaWRlb0ZyYW1lOjpCeXRlc1BlckVsZW1lbnQoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIHNpemVfdCBwbGFuZSkgewotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKHBsYW5lLCBmb3JtYXQpKTsKLSAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9BUkdCOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1hSR0I6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfUkdCMzI6Ci0gICAgICByZXR1cm4gNDsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9SR0IyNDoKLSAgICAgIHJldHVybiAzOwotICAgIGNhc2UgUElYRUxfRk9STUFUX1kxNjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9VWVZZOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVWTI6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIwUDk6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIyUDk6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDQ0UDk6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIwUDEwOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMlAxMDoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVVY0NDRQMTA6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWVVWNDIwUDEyOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lVVjQyMlAxMjoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVVY0NDRQMTI6Ci0gICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9OVjEyOgotICAgIGNhc2UgUElYRUxfRk9STUFUX05WMjE6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfTVQyMTogewotICAgICAgc3RhdGljIGNvbnN0IGludCBieXRlc19wZXJfZWxlbWVudFtdID0gezEsIDJ9OwotICAgICAgRENIRUNLX0xUKHBsYW5lLCBhcnJheXNpemUoYnl0ZXNfcGVyX2VsZW1lbnQpKTsKLSAgICAgIHJldHVybiBieXRlc19wZXJfZWxlbWVudFtwbGFuZV07Ci0gICAgfQotICAgIGNhc2UgUElYRUxfRk9STUFUX1lWMTI6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfSTQyMDoKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9ZVjE2OgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lWMTJBOgotICAgIGNhc2UgUElYRUxfRk9STUFUX1lWMjQ6Ci0gICAgY2FzZSBQSVhFTF9GT1JNQVRfWTg6Ci0gICAgICByZXR1cm4gMTsKLSAgICBjYXNlIFBJWEVMX0ZPUk1BVF9NSlBFRzoKLSAgICAgIHJldHVybiAwOwotICAgIGNhc2UgUElYRUxfRk9STUFUX1VOS05PV046Ci0gICAgICBicmVhazsKLSAgfQotICBOT1RSRUFDSEVEKCk7Ci0gIHJldHVybiAwOwotfQotCi0vLyBzdGF0aWMKLW1hdGg6OlNpemUgVmlkZW9GcmFtZTo6Q29tbW9uQWxpZ25tZW50KFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0KSB7Ci0gIGludCBtYXhfc2FtcGxlX3dpZHRoID0gMDsKLSAgaW50IG1heF9zYW1wbGVfaGVpZ2h0ID0gMDsKLSAgZm9yIChzaXplX3QgcGxhbmUgPSAwOyBwbGFuZSA8IE51bVBsYW5lcyhmb3JtYXQpOyArK3BsYW5lKSB7Ci0gICAgY29uc3QgbWF0aDo6U2l6ZSBzYW1wbGVfc2l6ZSA9IFNhbXBsZVNpemUoZm9ybWF0LCBwbGFuZSk7Ci0gICAgbWF4X3NhbXBsZV93aWR0aCA9IHN0ZDo6bWF4KG1heF9zYW1wbGVfd2lkdGgsIHNhbXBsZV9zaXplLndpZHRoKCkpOwotICAgIG1heF9zYW1wbGVfaGVpZ2h0ID0gc3RkOjptYXgobWF4X3NhbXBsZV9oZWlnaHQsIHNhbXBsZV9zaXplLmhlaWdodCgpKTsKLSAgfQotICByZXR1cm4gbWF0aDo6U2l6ZShtYXhfc2FtcGxlX3dpZHRoLCBtYXhfc2FtcGxlX2hlaWdodCk7Ci19Ci0KLXZvaWQgVmlkZW9GcmFtZTo6QWxsb2NhdGVZVVYoYm9vbCB6ZXJvX2luaXRpYWxpemVfbWVtb3J5KSB7Ci0gIERDSEVDS19FUShzdG9yYWdlX3R5cGVfLCBTVE9SQUdFX09XTkVEX01FTU9SWSk7Ci0gIHN0YXRpY19hc3NlcnQoMCA9PSBrWVBsYW5lLCAieSBwbGFuZSBkYXRhIG11c3QgYmUgaW5kZXggMCIpOwotCi0gIHNpemVfdCBkYXRhX3NpemUgPSAwOwotICBzaXplX3Qgb2Zmc2V0W2tNYXhQbGFuZXNdOwotICBmb3IgKHNpemVfdCBwbGFuZSA9IDA7IHBsYW5lIDwgTnVtUGxhbmVzKGZvcm1hdF8pOyArK3BsYW5lKSB7Ci0gICAgLy8gVGhlICoyIGluIGFsaWdubWVudCBmb3IgaGVpZ2h0IGlzIGJlY2F1c2Ugc29tZSBmb3JtYXRzIChlLmcuIGgyNjQpIGFsbG93Ci0gICAgLy8gaW50ZXJsYWNlZCBjb2RpbmcsIGFuZCB0aGVuIHRoZSBzaXplIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgdHdvCi0gICAgLy8gbWFjcm9ibG9ja3MgKHZlcnRpY2FsbHkpLiBTZWUKLSAgICAvLyBsaWJhdmNvZGVjL3V0aWxzLmM6YXZjb2RlY19hbGlnbl9kaW1lbnNpb25zMigpLgotICAgIGNvbnN0IHNpemVfdCBoZWlnaHQgPSBSb3VuZFVwKHJvd3MocGxhbmUpLCBrRnJhbWVTaXplQWxpZ25tZW50ICogMik7Ci0gICAgc3RyaWRlc19bcGxhbmVdID0gUm91bmRVcChyb3dfYnl0ZXMocGxhbmUpLCBrRnJhbWVTaXplQWxpZ25tZW50KTsKLSAgICBvZmZzZXRbcGxhbmVdID0gZGF0YV9zaXplOwotICAgIGRhdGFfc2l6ZSArPSBoZWlnaHQgKiBzdHJpZGVzX1twbGFuZV07Ci0gIH0KLQotICAvLyBUaGUgZXh0cmEgbGluZSBvZiBVViBiZWluZyBhbGxvY2F0ZWQgaXMgYmVjYXVzZSBoMjY0IGNocm9tYSBNQwotICAvLyBvdmVycmVhZHMgYnkgb25lIGxpbmUgaW4gc29tZSBjYXNlcywgc2VlIGxpYmF2Y29kZWMvdXRpbHMuYzoKLSAgLy8gYXZjb2RlY19hbGlnbl9kaW1lbnNpb25zMigpIGFuZCBsaWJhdmNvZGVjL3g4Ni9oMjY0X2Nocm9tYW1jLmFzbToKLSAgLy8gcHV0X2gyNjRfY2hyb21hX21jNF9zc3NlMygpLgotICBEQ0hFQ0soSXNWYWxpZFBsYW5lKGtVUGxhbmUsIGZvcm1hdF8pKTsKLSAgZGF0YV9zaXplICs9IHN0cmlkZXNfW2tVUGxhbmVdICsga0ZyYW1lU2l6ZVBhZGRpbmc7Ci0KLSAgdWludDhfdCogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KAotICAgICAgYmFzZTo6QWxpZ25lZEFsbG9jKGRhdGFfc2l6ZSwga0ZyYW1lQWRkcmVzc0FsaWdubWVudCkpOwotICBpZiAoemVyb19pbml0aWFsaXplX21lbW9yeSkgbWVtc2V0KGRhdGEsIDAsIGRhdGFfc2l6ZSk7Ci0KLSAgZm9yIChzaXplX3QgcGxhbmUgPSAwOyBwbGFuZSA8IE51bVBsYW5lcyhmb3JtYXRfKTsgKytwbGFuZSkKLSAgICBkYXRhX1twbGFuZV0gPSBkYXRhICsgb2Zmc2V0W3BsYW5lXTsKLQotICBBZGREZXN0cnVjdGlvbk9ic2VydmVyKGJhc2U6OkJpbmQoJmJhc2U6OkFsaWduZWRGcmVlLCBkYXRhKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMzAxODUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0ZSQU1FX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0ZSQU1FX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21kNS5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3NoYXJlZF9tZW1vcnkuaCIKLSNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi9sb2NrLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvZ3B1X21lbW9yeV9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NvbG9yX3NwYWNlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWVfbWV0YWRhdGEuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIgotI2luY2x1ZGUgImdwdS9jb21tYW5kX2J1ZmZlci9jb21tb24vbWFpbGJveF9ob2xkZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI2lmIGRlZmluZWQoT1NfTUFDT1NYKQotI2luY2x1ZGUgPENvcmVWaWRlby9DVlBpeGVsQnVmZmVyLmg+Ci0jaW5jbHVkZSAiYmFzZS9tYWMvc2NvcGVkX2NmdHlwZXJlZi5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFZpZGVvRnJhbWUgOiBwdWJsaWMgYmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8VmlkZW9GcmFtZT4gewotIHB1YmxpYzoKLSAgZW51bSB7Ci0gICAga0ZyYW1lU2l6ZUFsaWdubWVudCA9IDE2LAotICAgIGtGcmFtZVNpemVQYWRkaW5nID0gMTYsCi0gICAga0ZyYW1lQWRkcmVzc0FsaWdubWVudCA9IDMyCi0gIH07Ci0KLSAgZW51bSB7Ci0gICAga01heFBsYW5lcyA9IDQsCi0KLSAgICBrWVBsYW5lID0gMCwKLSAgICBrQVJHQlBsYW5lID0ga1lQbGFuZSwKLSAgICBrVVBsYW5lID0gMSwKLSAgICBrVVZQbGFuZSA9IGtVUGxhbmUsCi0gICAga1ZQbGFuZSA9IDIsCi0gICAga0FQbGFuZSA9IDMsCi0gIH07Ci0KLSAgLy8gRGVmaW5lcyB0aGUgcGl4ZWwgc3RvcmFnZSB0eXBlLiBEaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGRpcmVjdGx5IGFjY2Vzc2libGUKLSAgLy8gfGRhdGFffCBhbmQgcGl4ZWxzIHRoYXQgYXJlIG9ubHkgaW5kaXJlY3RseSBhY2Nlc3NpYmxlIGFuZCBub3QgdmlhIG1hcHBhYmxlCi0gIC8vIG1lbW9yeS4KLSAgLy8gTm90ZSB0aGF0IFZpZGVvRnJhbWVzIG9mIGFueSBTdG9yYWdlVHlwZSBjYW4gYWxzbyBoYXZlIFRleHR1cmUgYmFja2luZywKLSAgLy8gd2l0aCAiY2xhc3NpY2FsIiBHUFUgRHJpdmVyLW9ubHkgdGV4dHVyZXMgaWRlbnRpZmllZCBhcyBTVE9SQUdFX09QQVFVRS4KLSAgZW51bSBTdG9yYWdlVHlwZSB7Ci0gICAgU1RPUkFHRV9VTktOT1dOID0gMCwKLSAgICBTVE9SQUdFX09QQVFVRSA9IDEsICAvLyBXZSBkb24ndCBrbm93IGhvdyBWaWRlb0ZyYW1lJ3MgcGl4ZWxzIGFyZSBzdG9yZWQuCi0gICAgU1RPUkFHRV9VTk9XTkVEX01FTU9SWSA9IDIsICAvLyBFeHRlcm5hbCwgbm9uIG93bmVkIGRhdGEgcG9pbnRlcnMuCi0gICAgU1RPUkFHRV9PV05FRF9NRU1PUlkgPSAzLCAgLy8gVmlkZW9GcmFtZSBoYXMgYWxsb2NhdGVkIGl0cyBvd24gZGF0YSBidWZmZXIuCi0gICAgU1RPUkFHRV9TSE1FTSA9IDQsICAgICAgICAgLy8gUGl4ZWxzIGFyZSBiYWNrZWQgYnkgU2hhcmVkIE1lbW9yeS4KLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAgIC8vIFRPRE8obWNhc2FzKTogQ29uc2lkZXIgdHVybmluZyB0aGlzIHR5cGUgaW50byBTVE9SQUdFX05BVElWRSBvciBhbm90aGVyCi0gICAgLy8gbWVhbmluZ2Z1bCBuYW1lIGFuZCBoYW5kbGUgaXQgYXBwcm9wcmlhdGVseSBpbiBhbGwgY2FzZXMuCi0gICAgU1RPUkFHRV9ETUFCVUZTID0gNSwgIC8vIEVhY2ggcGxhbmUgaXMgc3RvcmVkIGludG8gYSBEbWFCdWYuCi0jZW5kaWYKLSAgICBTVE9SQUdFX0dQVV9NRU1PUllfQlVGRkVSUyA9IDYsCi0gICAgU1RPUkFHRV9NT0pPX1NIQVJFRF9CVUZGRVIgPSA3LAotICAgIFNUT1JBR0VfTEFTVCA9IFNUT1JBR0VfTU9KT19TSEFSRURfQlVGRkVSLAotICB9OwotCi0gIC8vIENCIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbGJveCBiYWNraW5nIHRoaXMgZnJhbWUgd2hlbiB0aGUgZnJhbWUgaXMKLSAgLy8gZGVzdHJveWVkLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgZ3B1OjpTeW5jVG9rZW4mKT4gUmVsZWFzZU1haWxib3hDQjsKLQotICAvLyBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGNsaWVudCBvcGVyYXRpb25zIG9uIGEgU3luY1Rva2VuLCBpLmUuIGluc2VydCBvbmUgaW4KLSAgLy8gdGhlIEdQVSBDb21tYW5kIEJ1ZmZlciBhbmQgd2FpdCBmb3IgaXQuCi0gIGNsYXNzIFN5bmNUb2tlbkNsaWVudCB7Ci0gICBwdWJsaWM6Ci0gICAgU3luY1Rva2VuQ2xpZW50KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgR2VuZXJhdGVTeW5jVG9rZW4oZ3B1OjpTeW5jVG9rZW4qIHN5bmNfdG9rZW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgV2FpdFN5bmNUb2tlbihjb25zdCBncHU6OlN5bmNUb2tlbiYgc3luY190b2tlbikgPSAwOwotCi0gICBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+U3luY1Rva2VuQ2xpZW50KCkge30KLQotICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3luY1Rva2VuQ2xpZW50KTsKLSAgfTsKLQotICAvLyBDYWxsIHByaW9yIHRvIENyZWF0ZUZyYW1lIHRvIGVuc3VyZSB2YWxpZGl0eSBvZiBmcmFtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQKLSAgLy8gYXV0b21hdGljYWxseSBieSBWaWRlb0RlY29kZXJDb25maWc6OklzVmFsaWRDb25maWcoKS4KLSAgc3RhdGljIGJvb2wgSXNWYWxpZENvbmZpZyhWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgU3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSk7Ci0KLSAgLy8gQ3JlYXRlcyBhIG5ldyBZVVYgZnJhbWUgaW4gc3lzdGVtIG1lbW9yeSB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgKHxmb3JtYXR8Ci0gIC8vIG11c3QgYmUgWVVWKS4gQnVmZmVycyBmb3IgdGhlIGZyYW1lIGFyZSBhbGxvY2F0ZWQgYnV0IG5vdCBpbml0aWFsaXplZC4gVGhlCi0gIC8vIGNhbGxlciBtb3N0IG5vdCBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSBhY3R1YWwgdW5kZXJseWluZyBzaXplKHMpLCBidXQKLSAgLy8gY2hlY2sgdGhlIHJldHVybmVkIFZpZGVvRnJhbWUgaW5zdGVhZC4KLSAgLy8gVE9ETyhtY2FzYXMpOiBpbXBsZW1lbnQgdGhlIFJHQiB2ZXJzaW9uIG9mIHRoaXMgZmFjdG9yeSBtZXRob2QuCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IENyZWF0ZUZyYW1lKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCk7Ci0KLSAgLy8gT2ZmZXJzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgQ3JlYXRlRnJhbWUsIGFuZCBhZGRpdGlvbmFsbHkgemVyb2VzIG91dAotICAvLyB0aGUgaW5pdGlhbCBhbGxvY2F0ZWQgYnVmZmVycy4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gQ3JlYXRlWmVyb0luaXRpYWxpemVkRnJhbWUoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCk7Ci0KLSAgLy8gV3JhcHMgYSBzZXQgb2YgbmF0aXZlIHRleHR1cmVzIHdpdGggYSBWaWRlb0ZyYW1lLgotICAvLyB8bWFpbGJveF9ob2xkZXJzX3JlbGVhc2VfY2J8IHdpbGwgYmUgY2FsbGVkIHdpdGggYSBzeW5jIHRva2VuIGFzIHRoZQotICAvLyBhcmd1bWVudCB3aGVuIHRoZSBWaWRlb0ZyYW1lIGlzIHRvIGJlIGRlc3Ryb3llZC4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gV3JhcE5hdGl2ZVRleHR1cmVzKAotICAgICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICBjb25zdCBncHU6Ok1haWxib3hIb2xkZXIgKCZtYWlsYm94X2hvbGRlcilba01heFBsYW5lc10sCi0gICAgICBjb25zdCBSZWxlYXNlTWFpbGJveENCJiBtYWlsYm94X2hvbGRlcnNfcmVsZWFzZV9jYiwKLSAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCk7Ci0KLSAgLy8gV3JhcHMgcGFja2VkIGltYWdlIGRhdGEgcmVzaWRpbmcgaW4gYSBtZW1vcnkgYnVmZmVyIHdpdGggYSBWaWRlb0ZyYW1lLgotICAvLyBUaGUgaW1hZ2UgZGF0YSByZXNpZGVzIGluIHxkYXRhfCBhbmQgaXMgYXNzdW1lZCB0byBiZSBwYWNrZWQgdGlnaHRseSBpbiBhCi0gIC8vIGJ1ZmZlciBvZiBsb2dpY2FsIGRpbWVuc2lvbnMgfGNvZGVkX3NpemV8IHdpdGggdGhlIGFwcHJvcHJpYXRlIGJpdCBkZXB0aAotICAvLyBhbmQgcGxhbmUgY291bnQgYXMgZ2l2ZW4gYnkgfGZvcm1hdHwuIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBXcmFwRXh0ZXJuYWxEYXRhKAotICAgICAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICAgIHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIC8vIFNhbWUgYXMgV3JhcEV4dGVybmFsRGF0YSgpIHdpdGggU2hhcmVkTWVtb3J5SGFuZGxlIGFuZCBpdHMgb2Zmc2V0LgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBXcmFwRXh0ZXJuYWxTaGFyZWRNZW1vcnkoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgICAgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwgYmFzZTo6U2hhcmVkTWVtb3J5SGFuZGxlIGhhbmRsZSwKLSAgICAgIHNpemVfdCBzaGFyZWRfbWVtb3J5X29mZnNldCwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCk7Ci0KLSAgLy8gV3JhcHMgZXh0ZXJuYWwgWVVWIGRhdGEgb2YgdGhlIGdpdmVuIHBhcmFtZXRlcnMgd2l0aCBhIFZpZGVvRnJhbWUuCi0gIC8vIFRoZSByZXR1cm5lZCBWaWRlb0ZyYW1lIGRvZXMgbm90IG93biB0aGUgZGF0YSBwYXNzZWQgaW4uCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFdyYXBFeHRlcm5hbFl1dkRhdGEoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgICAgaW50MzJfdCB5X3N0cmlkZSwgaW50MzJfdCB1X3N0cmlkZSwgaW50MzJfdCB2X3N0cmlkZSwgdWludDhfdCogeV9kYXRhLAotICAgICAgdWludDhfdCogdV9kYXRhLCB1aW50OF90KiB2X2RhdGEsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIC8vIFdyYXBzIGV4dGVybmFsIFlVViBkYXRhIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMgd2l0aCBhIFZpZGVvRnJhbWUuCi0gIC8vIFRoZSByZXR1cm5lZCBWaWRlb0ZyYW1lIGRvZXMgbm90IG93biB0aGUgR3B1TWVtb3J5QnVmZmVycyBwYXNzZWQgaW4uCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFdyYXBFeHRlcm5hbFl1dkdwdU1lbW9yeUJ1ZmZlcnMoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgICAgaW50MzJfdCB5X3N0cmlkZSwgaW50MzJfdCB1X3N0cmlkZSwgaW50MzJfdCB2X3N0cmlkZSwgdWludDhfdCogeV9kYXRhLAotICAgICAgdWludDhfdCogdV9kYXRhLCB1aW50OF90KiB2X2RhdGEsCi0gICAgICBjb25zdCBnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZSYgeV9oYW5kbGUsCi0gICAgICBjb25zdCBnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZSYgdV9oYW5kbGUsCi0gICAgICBjb25zdCBnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZSYgdl9oYW5kbGUsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIC8vIFdyYXBzIGV4dGVybmFsIFlVVkEgZGF0YSBvZiB0aGUgZ2l2ZW4gcGFyYW1ldGVycyB3aXRoIGEgVmlkZW9GcmFtZS4KLSAgLy8gVGhlIHJldHVybmVkIFZpZGVvRnJhbWUgZG9lcyBub3Qgb3duIHRoZSBkYXRhIHBhc3NlZCBpbi4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gV3JhcEV4dGVybmFsWXV2YURhdGEoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLAotICAgICAgaW50MzJfdCB5X3N0cmlkZSwgaW50MzJfdCB1X3N0cmlkZSwgaW50MzJfdCB2X3N0cmlkZSwgaW50MzJfdCBhX3N0cmlkZSwKLSAgICAgIHVpbnQ4X3QqIHlfZGF0YSwgdWludDhfdCogdV9kYXRhLCB1aW50OF90KiB2X2RhdGEsIHVpbnQ4X3QqIGFfZGF0YSwKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0jaWYgZGVmaW5lZChPU19MSU5VWCkKLSAgLy8gV3JhcHMgcHJvdmlkZWQgZG1hYnVmcwotICAvLyAoaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9kbWEtYnVmLXNoYXJpbmcudHh0KSB3aXRoIGEKLSAgLy8gVmlkZW9GcmFtZS4gVGhlIGRtYWJ1ZiBmZHMgYXJlIGR1cCgpZWQgb24gY3JlYXRpb24sIHNvIHRoYXQgdGhlIFZpZGVvRnJhbWUKLSAgLy8gcmV0YWlucyBhIHJlZmVyZW5jZSB0byB0aGVtLCBhbmQgYXJlIGF1dG9tYXRpY2FsbHkgY2xvc2UoKWQgb24gZGVzdHJ1Y3Rpb24sCi0gIC8vIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UuIFRoZSBjYWxsZXIgbWF5IHNhZmVseSBjbG9zZSgpIGl0cyByZWZlcmVuY2UgYWZ0ZXIKLSAgLy8gY2FsbGluZyBXcmFwRXh0ZXJuYWxEbWFidWZzKCkuCi0gIC8vIFRoZSBpbWFnZSBkYXRhIGlzIG9ubHkgYWNjZXNzaWJsZSB2aWEgZG1hYnVmIGZkcywgd2hpY2ggYXJlIHVzdWFsbHkgcGFzc2VkCi0gIC8vIGRpcmVjdGx5IHRvIGEgaGFyZHdhcmUgZGV2aWNlIGFuZC9vciB0byBhbm90aGVyIHByb2Nlc3MsIG9yIGNhbiBhbHNvIGJlCi0gIC8vIG1hcHBlZCB2aWEgbW1hcCgpIGZvciBDUFUgYWNjZXNzLgotICAvLyBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gV3JhcEV4dGVybmFsRG1hYnVmcygKLSAgICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBkbWFidWZfZmRzLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChPU19NQUNPU1gpCi0gIC8vIFdyYXBzIGEgcHJvdmlkZWQgQ1ZQaXhlbEJ1ZmZlciB3aXRoIGEgVmlkZW9GcmFtZS4gVGhlIHBpeGVsIGJ1ZmZlciBpcwotICAvLyByZXRhaW5lZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBWaWRlb0ZyYW1lIGFuZCByZWxlYXNlZCB1cG9uIGRlc3RydWN0aW9uLgotICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyBvbmx5IGFjY2Vzc2libGUgdmlhIHRoZSBwaXhlbCBidWZmZXIsIHdoaWNoIGNvdWxkIGJlCi0gIC8vIGJhY2tlZCBieSBhbiBJT1N1cmZhY2UgZnJvbSBhbm90aGVyIHByb2Nlc3MuIEFsbCB0aGUgYXR0cmlidXRlcyBvZiB0aGUKLSAgLy8gVmlkZW9GcmFtZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBwaXhlbCBidWZmZXIsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKLSAgLy8gdGltZXN0YW1wLiBJZiBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nIG9yIGlzIGluY29tcGF0aWJsZSAoZm9yIGV4YW1wbGUsIGEKLSAgLy8gcGl4ZWwgZm9ybWF0IHRoYXQgaGFzIG5vIFZpZGVvRnJhbWUgbWF0Y2gpLCBOVUxMIGlzIHJldHVybmVkLgotICAvLyBodHRwOi8vY3JidWcuY29tLzQwMTMwOAotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBXcmFwQ1ZQaXhlbEJ1ZmZlcigKLSAgICAgIENWUGl4ZWxCdWZmZXJSZWYgY3ZfcGl4ZWxfYnVmZmVyLCBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKTsKLSNlbmRpZgotCi0gIC8vIFdyYXBzIHxmcmFtZXwuIHx2aXNpYmxlX3JlY3R8IG11c3QgYmUgYSBzdWIgcmVjdCB3aXRoaW4KLSAgLy8gZnJhbWUtPnZpc2libGVfcmVjdCgpLgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBXcmFwVmlkZW9GcmFtZSgKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4mIGZyYW1lLCBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwKLSAgICAgIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplKTsKLQotICAvLyBDcmVhdGVzIGEgZnJhbWUgd2hpY2ggaW5kaWNhdGVzIGVuZC1vZi1zdHJlYW0uCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IENyZWF0ZUVPU0ZyYW1lKCk7Ci0KLSAgLy8gQWxsb2NhdGVzIFlWMTIgZnJhbWUgYmFzZWQgb24gfHNpemV8LCBhbmQgc2V0cyBpdHMgZGF0YSB0byB0aGUgWVVWKHksdSx2KS4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gQ3JlYXRlQ29sb3JGcmFtZShjb25zdCBtYXRoOjpTaXplJiBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgeSwgdWludDhfdCB1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKTsKLQotICAvLyBBbGxvY2F0ZXMgWVYxMiBmcmFtZSBiYXNlZCBvbiB8c2l6ZXwsIGFuZCBzZXRzIGl0cyBkYXRhIHRvIHRoZSBZVVYKLSAgLy8gZXF1aXZhbGVudCBvZiBSR0IoMCwwLDApLgotICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBDcmVhdGVCbGFja0ZyYW1lKGNvbnN0IG1hdGg6OlNpemUmIHNpemUpOwotCi0gIC8vIEFsbG9jYXRlcyBZVjEyQSBmcmFtZSBiYXNlZCBvbiB8c2l6ZXwsIGFuZCBzZXRzIGl0cyBkYXRhIHRvIHRoZSBZVVZBCi0gIC8vIGVxdWl2YWxlbnQgb2YgUkdCQSgwLDAsMCwwKS4KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gQ3JlYXRlVHJhbnNwYXJlbnRGcmFtZSgKLSAgICAgIGNvbnN0IG1hdGg6OlNpemUmIHNpemUpOwotCi0gIHN0YXRpYyBzaXplX3QgTnVtUGxhbmVzKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0KTsKLQotICAvLyBSZXR1cm5zIHRoZSByZXF1aXJlZCBhbGxvY2F0aW9uIHNpemUgZm9yIGEgKHRpZ2h0bHkgcGFja2VkKSBmcmFtZSBvZiB0aGUKLSAgLy8gZ2l2ZW4gY29kZWQgc2l6ZSBhbmQgZm9ybWF0LgotICBzdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXplKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUpOwotCi0gIC8vIFJldHVybnMgdGhlIHBsYW5lIG1hdGg6OlNpemUgKGluIGJ5dGVzKSBmb3IgYSBwbGFuZSBvZiB0aGUgZ2l2ZW4gY29kZWQgc2l6ZQotICAvLyBhbmQgZm9ybWF0LgotICBzdGF0aWMgbWF0aDo6U2l6ZSBQbGFuZVNpemUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQsIHNpemVfdCBwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUpOwotCi0gIC8vIFJldHVybnMgaG9yaXpvbnRhbCBiaXRzIHBlciBwaXhlbCBmb3IgZ2l2ZW4gfHBsYW5lfCBhbmQgfGZvcm1hdHwuCi0gIHN0YXRpYyBpbnQgUGxhbmVIb3Jpem9udGFsQml0c1BlclBpeGVsKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBzaXplX3QgcGxhbmUpOwotCi0gIC8vIFJldHVybnMgYml0cyBwZXIgcGl4ZWwgZm9yIGdpdmVuIHxwbGFuZXwgYW5kIHxmb3JtYXR8LgotICBzdGF0aWMgaW50IFBsYW5lQml0c1BlclBpeGVsKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBzaXplX3QgcGxhbmUpOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgcm93IGZvciB0aGUgZ2l2ZW4gcGxhbmUsIGZvcm1hdCwgYW5kIHdpZHRoLgotICAvLyBUaGUgd2lkdGggbWF5IGJlIGFsaWduZWQgdG8gZm9ybWF0IHJlcXVpcmVtZW50cy4KLSAgc3RhdGljIHNpemVfdCBSb3dCeXRlcyhzaXplX3QgcGxhbmUsIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgpOwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGZvciB0aGUgZ2l2ZW4gcGxhbmUsIGZvcm1hdCwgYW5kIGhlaWdodC4KLSAgLy8gVGhlIGhlaWdodCBtYXkgYmUgYWxpZ25lZCB0byBmb3JtYXQgcmVxdWlyZW1lbnRzLgotICBzdGF0aWMgc2l6ZV90IFJvd3Moc2l6ZV90IHBsYW5lLCBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgaW50IGhlaWdodCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZm9yIHRoZSBnaXZlbiBwbGFuZSwgZm9ybWF0LCBhbmQgd2lkdGguCi0gIC8vIFRoZSB3aWR0aCBtYXkgYmUgYWxpZ25lZCB0byBmb3JtYXQgcmVxdWlyZW1lbnRzLgotICBzdGF0aWMgc2l6ZV90IENvbHVtbnMoc2l6ZV90IHBsYW5lLCBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgaW50IHdpZHRoKTsKLQotICAvLyBVc2VkIHRvIGtlZXAgYSBydW5uaW5nIGhhc2ggb2Ygc2VlbiBmcmFtZXMuICBFeHBlY3RzIGFuIGluaXRpYWxpemVkIE1ENQotICAvLyBjb250ZXh0LiAgQ2FsbHMgTUQ1VXBkYXRlIHdpdGggdGhlIGNvbnRleHQgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgZnJhbWUuCi0gIHN0YXRpYyB2b2lkIEhhc2hGcmFtZUZvclRlc3RpbmcoYmFzZTo6TUQ1Q29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+JiBmcmFtZSk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxmcmFtZXwgaXMgYWNjZXNzaWJsZSBhbmQgbWFwcGVkIGluIHRoZSBWaWRlb0ZyYW1lIG1lbW9yeQotICAvLyBzcGFjZS4gSWYgZmFsc2UsIGNsaWVudHMgc2hvdWxkIHJlZnJhaW4gZnJvbSBhY2Nlc3NpbmcgZGF0YSgpLAotICAvLyB2aXNpYmxlX2RhdGEoKSBldGMuCi0gIGJvb2wgSXNNYXBwYWJsZSgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8ZnJhbWV8IGhhcyB0ZXh0dXJlcyB3aXRoIGFueSBTdG9yYWdlVHlwZSBhbmQgc2hvdWxkIG5vdCBiZQotICAvLyBhY2Nlc3NlZCB2aWEgZGF0YSgpLCB2aXNpYmxlX2RhdGEoKSBldGMuCi0gIGJvb2wgSGFzVGV4dHVyZXMoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBjb2xvciBzcGFjZSBvZiB0aGlzIGZyYW1lJ3MgY29udGVudC4KLSAgZ2Z4OjpDb2xvclNwYWNlIENvbG9yU3BhY2UoKSBjb25zdDsKLSAgdm9pZCBzZXRfY29sb3Jfc3BhY2UoY29uc3QgZ2Z4OjpDb2xvclNwYWNlJiBjb2xvcl9zcGFjZSk7Ci0KLSAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBmb3JtYXRfOyB9Ci0gIFN0b3JhZ2VUeXBlIHN0b3JhZ2VfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0b3JhZ2VfdHlwZV87IH0KLQotICBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gY29kZWRfc2l6ZV87IH0KLSAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0KCkgY29uc3QgeyByZXR1cm4gdmlzaWJsZV9yZWN0XzsgfQotICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUoKSBjb25zdCB7IHJldHVybiBuYXR1cmFsX3NpemVfOyB9Ci0KLSAgaW50IHN0cmlkZShzaXplX3QgcGxhbmUpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwZXIgcm93IGFuZCBudW1iZXIgb2Ygcm93cyBmb3IgYSBnaXZlbiBwbGFuZS4KLSAgLy8KLSAgLy8gQXMgb3Bwb3NlZCB0byBzdHJpZGUoKSwgcm93X2J5dGVzKCkgcmVmZXJzIHRvIHRoZSBieXRlcyByZXByZXNlbnRpbmcKLSAgLy8gZnJhbWUgZGF0YSBzY2FubGluZXMgKGNvZGVkX3NpemUud2lkdGgoKSBwaXhlbHMsIHdpdGhvdXQgc3RyaWRlIHBhZGRpbmcpLgotICBpbnQgcm93X2J5dGVzKHNpemVfdCBwbGFuZSkgY29uc3Q7Ci0gIGludCByb3dzKHNpemVfdCBwbGFuZSkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyBwb2ludGVyIHRvIHRoZSBidWZmZXIgZm9yIGEgZ2l2ZW4gcGxhbmUsIGlmIHRoaXMgaXMgYW4KLSAgLy8gSXNNYXBwYWJsZSgpIGZyYW1lIHR5cGUuIFRoZSBtZW1vcnkgaXMgb3duZWQgYnkgVmlkZW9GcmFtZSBvYmplY3QgYW5kIG11c3QKLSAgLy8gbm90IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGEoc2l6ZV90IHBsYW5lKSBjb25zdDsKLSAgdWludDhfdCogZGF0YShzaXplX3QgcGxhbmUpOwotCi0gIC8vIFJldHVybnMgcG9pbnRlciB0byB0aGUgZGF0YSBpbiB0aGUgdmlzaWJsZSByZWdpb24gb2YgdGhlIGZyYW1lLCBmb3IKLSAgLy8gSXNNYXBwYWJsZSgpIHN0b3JhZ2UgdHlwZXMuIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG9mZnNldHRlZCBpbnRvIHRoZQotICAvLyBwbGFuZSBidWZmZXIgc3BlY2lmaWVkIGJ5IHZpc2libGVfcmVjdCgpLm9yaWdpbigpLiBNZW1vcnkgaXMgb3duZWQgYnkKLSAgLy8gVmlkZW9GcmFtZSBvYmplY3QgYW5kIG11c3Qgbm90IGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIuCi0gIGNvbnN0IHVpbnQ4X3QqIHZpc2libGVfZGF0YShzaXplX3QgcGxhbmUpIGNvbnN0OwotICB1aW50OF90KiB2aXNpYmxlX2RhdGEoc2l6ZV90IHBsYW5lKTsKLQotICAvLyBSZXR1cm5zIGEgbWFpbGJveCBob2xkZXIgZm9yIGEgZ2l2ZW4gdGV4dHVyZS4KLSAgLy8gT25seSB2YWxpZCB0byBjYWxsIGlmIHRoaXMgaXMgYSBOQVRJVkVfVEVYVFVSRSBmcmFtZS4gQmVmb3JlIHVzaW5nIHRoZQotICAvLyBtYWlsYm94LCB0aGUgY2FsbGVyIG11c3Qgd2FpdCBmb3IgdGhlIGluY2x1ZGVkIHN5bmMgcG9pbnQuCi0gIGNvbnN0IGdwdTo6TWFpbGJveEhvbGRlciYgbWFpbGJveF9ob2xkZXIoc2l6ZV90IHRleHR1cmVfaW5kZXgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIHNoYXJlZC1tZW1vcnkgaGFuZGxlLCBpZiBwcmVzZW50Ci0gIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBzaGFyZWRfbWVtb3J5X2hhbmRsZSgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBzaGFyZWQgbWVtb3J5IHdoZXJlIHRoZSBmcmFtZSBkYXRhIGJlZ2lucy4KLSAgc2l6ZV90IHNoYXJlZF9tZW1vcnlfb2Zmc2V0KCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgdmVjdG9yIG9mIEdwdU1lbW9yeUJ1ZmZlciBoYW5kbGVzLCBpZiBwcmVzZW50LgotICBjb25zdCBzdGQ6OnZlY3RvcjxnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZT4mIGdwdV9tZW1vcnlfYnVmZmVyX2hhbmRsZXMoKQotICAgICAgY29uc3Q7Ci0KLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAvLyBSZXR1cm5zIGJhY2tpbmcgRG1hQnVmIGZpbGUgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gfHBsYW5lfCwgaWYgcHJlc2VudCwgb3IKLSAgLy8gLTEgaWYgbm90LgotICAvLyBUT0RPKG1jYXNhcyk6IFJlbmFtZSB0byBEbWFidWZGZCgpIHRvIGNvbXBseSB3aXRoIFN0eWxlIEd1aWRlLgotICBpbnQgZG1hYnVmX2ZkKHNpemVfdCBwbGFuZSkgY29uc3Q7Ci0KLSAgLy8gRHVwbGljYXRlcyBpbnRlcm5hbGx5IHRoZSB8ZmRzX2lufCwgb3ZlcndyaXRpbmcgdGhlIGN1cnJlbnQgb25lcy4gUmV0dXJucwotICAvLyBmYWxzZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZywgYW5kIGxlYXZlcyBhbGwgaW50ZXJuYWwgZmRzIGNsb3NlZC4KLSAgYm9vbCBEdXBsaWNhdGVGaWxlRGVzY3JpcHRvcnMoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgZmRzX2luKTsKLSNlbmRpZgotCi0gIHZvaWQgQWRkU2hhcmVkTWVtb3J5SGFuZGxlKGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBoYW5kbGUpOwotCi0jaWYgZGVmaW5lZChPU19NQUNPU1gpCi0gIC8vIFJldHVybnMgdGhlIGJhY2tpbmcgQ1ZQaXhlbEJ1ZmZlciwgaWYgcHJlc2VudC4KLSAgLy8gVE9ETyhtY2FzYXMpOiBSZW5hbWUgdG8gQ3ZQaXhlbEJ1ZmZlcigpIHRvIGNvbXBseSB3aXRoIFN0eWxlIEd1aWRlLgotICBDVlBpeGVsQnVmZmVyUmVmIGN2X3BpeGVsX2J1ZmZlcigpIGNvbnN0OwotI2VuZGlmCi0KLSAgLy8gQWRkcyBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBWaWRlb0ZyYW1lIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KLSAgLy8gVGhlIGNhbGxiYWNrIG1heSBiZSBydW4gZnJvbSBBTlkgVEhSRUFELCBhbmQgc28gaXQgaXMgdXAgdG8gdGhlIGNsaWVudCB0bwotICAvLyBlbnN1cmUgdGhyZWFkIHNhZmV0eS4gIEFsdGhvdWdoIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIG1lbWJlcnMgb2YgdGhpcwotICAvLyBWaWRlb0ZyYW1lIGlzIHBlcm1pdHRlZCB3aGlsZSB0aGUgY2FsbGJhY2sgZXhlY3V0ZXMgKGluY2x1ZGluZwotICAvLyBWaWRlb0ZyYW1lTWV0YWRhdGEpLCBjbGllbnRzIHNob3VsZCBub3QgYXNzdW1lIHRoZSBkYXRhIHBvaW50ZXJzIGFyZQotICAvLyB2YWxpZC4KLSAgdm9pZCBBZGREZXN0cnVjdGlvbk9ic2VydmVyKGNvbnN0IGJhc2U6OkNsb3N1cmUmIGNhbGxiYWNrKTsKLQotICAvLyBSZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBvcHRpb25hbCBtZXRhZGF0YS4gIFRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24KLSAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSB0aGF0IGRvd25zdHJlYW0gY2xpZW50cyBtaWdodCB1c2UgZm9yIGZyYW1lLWxldmVsCi0gIC8vIGxvZ2dpbmcsIHF1YWxpdHkvcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgc2lnbmFsaW5nLCBldGMuCi0gIC8vCi0gIC8vIFRPRE8obWl1KTogTW92ZSBzb21lIG9mIHRoZSAiZXh0cmEiIG1lbWJlcnMgb2YgVmlkZW9GcmFtZSAoYmVsb3cpIGludG8KLSAgLy8gaGVyZSBhcyBhIGxhdGVyIGNsZWFuLXVwIHN0ZXAuCi0gIGNvbnN0IFZpZGVvRnJhbWVNZXRhZGF0YSogbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAmbWV0YWRhdGFfOyB9Ci0gIFZpZGVvRnJhbWVNZXRhZGF0YSogbWV0YWRhdGEoKSB7IHJldHVybiAmbWV0YWRhdGFfOyB9Ci0KLSAgLy8gVGhlIHRpbWUgc3BhbiBiZXR3ZWVuIHRoZSBjdXJyZW50IGZyYW1lIGFuZCB0aGUgZmlyc3QgZnJhbWUgb2YgdGhlIHN0cmVhbS4KLSAgLy8gVGhpcyBpcyB0aGUgbWVkaWEgdGltZXN0YW1wLCBhbmQgbm90IHRoZSByZWZlcmVuY2UgdGltZS4KLSAgLy8gU2VlIFZpZGVvRnJhbWVNZXRhZGF0YTo6UkVGRVJFTkNFX1RJTUUgZm9yIGRldGFpbHMuCi0gIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiB0aW1lc3RhbXBfOyB9Ci0gIHZvaWQgc2V0X3RpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7IHRpbWVzdGFtcF8gPSB0aW1lc3RhbXA7IH0KLQotICAvLyBJdCB1c2VzIHxjbGllbnR8IHRvIGluc2VydCBhIG5ldyBzeW5jIHBvaW50IGFuZCBwb3RlbnRpYWxseSB3YWl0cyBvbiBhCi0gIC8vIG9sZGVyIHN5bmMgcG9pbnQuIFRoZSBmaW5hbCBzeW5jIHBvaW50IHdpbGwgYmUgdXNlZCB0byByZWxlYXNlIHRoaXMKLSAgLy8gVmlkZW9GcmFtZS4KLSAgLy8gVGhpcyBtZXRob2QgaXMgdGhyZWFkIHNhZmUuIEJvdGggYmxpbmsgYW5kIGNvbXBvc2l0b3IgdGhyZWFkcyBjYW4gY2FsbCBpdC4KLSAgdm9pZCBVcGRhdGVSZWxlYXNlU3luY1Rva2VuKFN5bmNUb2tlbkNsaWVudCogY2xpZW50KTsKLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGRlc2NyaWJpbmcgfCp0aGlzfC4KLSAgc3RkOjpzdHJpbmcgQXNIdW1hblJlYWRhYmxlU3RyaW5nKCk7Ci0KLSAgLy8gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgdmlkZW8gZnJhbWU7IGdlbmVyYXRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBhbmQKLSAgLy8gZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUgd2l0aGluIGEgc2luZ2xlIHByb2Nlc3MuCi0gIGludCB1bmlxdWVfaWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVfaWRfOyB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGZyaWVuZCBjbGFzcyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxWaWRlb0ZyYW1lPjsKLQotICAvLyBDbGllbnRzIG11c3QgdXNlIHRoZSBzdGF0aWMgZmFjdG9yeS93cmFwcGluZyBtZXRob2RzIHRvIGNyZWF0ZSBhIG5ldyBmcmFtZS4KLSAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBjcmVhdGUgdGhlaXIgb3duIGZhY3Rvcnkvd3JhcHBpbmcgbWV0aG9kcywgYW5kIHVzZQotICAvLyB0aGlzIGNvbnN0cnVjdG9yIHRvIGRvIGJhc2ljIGluaXRpYWxpemF0aW9uLgotICBWaWRlb0ZyYW1lKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBTdG9yYWdlVHlwZSBzdG9yYWdlX3R5cGUsCi0gICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCk7Ci0KLSAgdmlydHVhbCB+VmlkZW9GcmFtZSgpOwotCi0gIC8vIENyZWF0ZXMgYSBzdW1tYXJ5IG9mIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHByb3ZpZGVkIGFzIHBhcmFtZXRlcnMuCi0gIHN0YXRpYyBzdGQ6OnN0cmluZyBDb25maWdUb1N0cmluZyhjb25zdCBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZpZGVvRnJhbWU6OlN0b3JhZ2VUeXBlIHN0b3JhZ2VfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8cGxhbmV8IGlzIGEgdmFsaWQgcGxhbmUgaW5kZXggZm9yIHRoZSBnaXZlbiB8Zm9ybWF0fC4KLSAgc3RhdGljIGJvb2wgSXNWYWxpZFBsYW5lKHNpemVfdCBwbGFuZSwgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpOwotCi0gIC8vIFJldHVybnMgfGRpbWVuc2lvbnN8IGFkanVzdGVkIHRvIGFwcHJvcHJpYXRlIGJvdW5kYXJpZXMgYmFzZWQgb24gfGZvcm1hdHwuCi0gIHN0YXRpYyBtYXRoOjpTaXplIERldGVybWluZUFsaWduZWRTaXplKFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBkaW1lbnNpb25zKTsKLQotICB2b2lkIHNldF9kYXRhKHNpemVfdCBwbGFuZSwgdWludDhfdCogcHRyKTsKLSAgdm9pZCBzZXRfc3RyaWRlKHNpemVfdCBwbGFuZSwgaW50IHN0cmlkZSk7Ci0KLSBwcml2YXRlOgotICAvLyBDbGllbnRzIG11c3QgdXNlIHRoZSBzdGF0aWMgZmFjdG9yeS93cmFwcGluZyBtZXRob2RzIHRvIGNyZWF0ZSBhIG5ldyBmcmFtZS4KLSAgVmlkZW9GcmFtZShWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgU3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlLAotICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgYmFzZTo6U2hhcmVkTWVtb3J5SGFuZGxlIGhhbmRsZSwgc2l6ZV90IHNoYXJlZF9tZW1vcnlfb2Zmc2V0KTsKLSAgVmlkZW9GcmFtZShWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgU3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlLAotICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGNvZGVkX3NpemUsIGNvbnN0IG1hdGg6OlJlY3QmIHZpc2libGVfcmVjdCwKLSAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICAgICAgICAgY29uc3QgZ3B1OjpNYWlsYm94SG9sZGVyICgmbWFpbGJveF9ob2xkZXJzKVtrTWF4UGxhbmVzXSwKLSAgICAgICAgICAgICBjb25zdCBSZWxlYXNlTWFpbGJveENCJiBtYWlsYm94X2hvbGRlcl9yZWxlYXNlX2NiLAotICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIHN0YXRpYyBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFdyYXBFeHRlcm5hbFN0b3JhZ2UoCi0gICAgICBWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgU3RvcmFnZVR5cGUgc3RvcmFnZV90eXBlLAotICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LAotICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgbmF0dXJhbF9zaXplLCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAotICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCwgYmFzZTo6U2hhcmVkTWVtb3J5SGFuZGxlIGhhbmRsZSwKLSAgICAgIHNpemVfdCBkYXRhX29mZnNldCk7Ci0KLSAgc3RhdGljIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gQ3JlYXRlRnJhbWVJbnRlcm5hbCgKLSAgICAgIFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0LCBjb25zdCBtYXRoOjpTaXplJiBjb2RlZF9zaXplLAotICAgICAgY29uc3QgbWF0aDo6UmVjdCYgdmlzaWJsZV9yZWN0LCBjb25zdCBtYXRoOjpTaXplJiBuYXR1cmFsX3NpemUsCi0gICAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wLCBib29sIHplcm9faW5pdGlhbGl6ZV9tZW1vcnkpOwotCi0gIC8vIFJldHVybnMgdGhlIHBpeGVsIHNpemUgb2YgZWFjaCBzdWJzYW1wbGUgZm9yIGEgZ2l2ZW4gfHBsYW5lfCBhbmQgfGZvcm1hdHwuCi0gIC8vIEUuZy4gMngyIGZvciB0aGUgVS1wbGFuZSBpbiBQSVhFTF9GT1JNQVRfSTQyMC4KLSAgc3RhdGljIG1hdGg6OlNpemUgU2FtcGxlU2l6ZShWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgc2l6ZV90IHBsYW5lKTsKLQotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGVsZW1lbnQgZm9yIGdpdmVuIHxwbGFuZXwgYW5kIHxmb3JtYXR8LgotICBzdGF0aWMgaW50IEJ5dGVzUGVyRWxlbWVudChWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgc2l6ZV90IHBsYW5lKTsKLQotICAvLyBSZXR1cm4gdGhlIGFsaWdubWVudCBmb3IgdGhlIHdob2xlIGZyYW1lLCBjYWxjdWxhdGVkIGFzIHRoZSBtYXggb2YgdGhlCi0gIC8vIGFsaWdubWVudCBmb3IgZWFjaCBpbmRpdmlkdWFsIHBsYW5lLgotICBzdGF0aWMgbWF0aDo6U2l6ZSBDb21tb25BbGlnbm1lbnQoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpOwotCi0gIHZvaWQgQWxsb2NhdGVZVVYoYm9vbCB6ZXJvX2luaXRpYWxpemVfbWVtb3J5KTsKLQotICAvLyBGcmFtZSBmb3JtYXQuCi0gIGNvbnN0IFZpZGVvUGl4ZWxGb3JtYXQgZm9ybWF0XzsKLQotICAvLyBTdG9yYWdlIHR5cGUgZm9yIHRoZSBkaWZmZXJlbnQgcGxhbmVzLgotICBTdG9yYWdlVHlwZSBzdG9yYWdlX3R5cGVfOyAgLy8gVE9ETyhtY2FzYXMpOiBtYWtlIGNvbnN0Ci0KLSAgLy8gV2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdmlkZW8gZnJhbWUsIGluIHBpeGVscy4gVGhpcyBtdXN0IGluY2x1ZGUgcGl4ZWwKLSAgLy8gZGF0YSBmb3IgdGhlIHdob2xlIGltYWdlOyBpLmUuIGZvciBZVVYgZm9ybWF0cyB3aXRoIHN1YnNhbXBsZWQgY2hyb21hCi0gIC8vIHBsYW5lcywgaW4gdGhlIGNhc2UgdGhhdCB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBpbWFnZSBkb2VzIG5vdCBsaW5lIHVwCi0gIC8vIG9uIGEgc2FtcGxlIGJvdW5kYXJ5LCB8Y29kZWRfc2l6ZV98IG11c3QgYmUgcm91bmRlZCB1cCBhcHByb3ByaWF0ZWx5IGFuZAotICAvLyB0aGUgcGl4ZWwgZGF0YSBwcm92aWRlZCBmb3IgdGhlIG9kZCBwaXhlbHMuCi0gIGNvbnN0IG1hdGg6OlNpemUgY29kZWRfc2l6ZV87Ci0KLSAgLy8gV2lkdGgsIGhlaWdodCwgYW5kIG9mZnNldHMgb2YgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgdmlkZW8gZnJhbWUuIE11c3QKLSAgLy8gYmUgYSBzdWJyZWN0IG9mIHxjb2RlZF9zaXplX3wuIENhbiBiZSBvZGQgd2l0aCByZXNwZWN0IHRvIHRoZSBzYW1wbGUKLSAgLy8gYm91bmRhcmllcywgZS5nLiBmb3IgZm9ybWF0cyB3aXRoIHN1YnNhbXBsZWQgY2hyb21hLgotICBjb25zdCBtYXRoOjpSZWN0IHZpc2libGVfcmVjdF87Ci0KLSAgLy8gV2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSB2aWRlbyBmcmFtZQotICAvLyAofHZpc2libGVfcmVjdF8uc2l6ZSgpfCkgd2l0aCBhc3BlY3QgcmF0aW8gdGFrZW4gaW50byBhY2NvdW50LgotICBjb25zdCBtYXRoOjpTaXplIG5hdHVyYWxfc2l6ZV87Ci0KLSAgLy8gQXJyYXkgb2Ygc3RyaWRlcyBmb3IgZWFjaCBwbGFuZSwgdHlwaWNhbGx5IGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHdpZHRoCi0gIC8vIG9mIHRoZSBzdXJmYWNlIGRpdmlkZWQgYnkgdGhlIGhvcml6b250YWwgc2FtcGxpbmcgcGVyaW9kLiAgTm90ZSB0aGF0Ci0gIC8vIHN0cmlkZXMgY2FuIGJlIG5lZ2F0aXZlLgotICBpbnQzMl90IHN0cmlkZXNfW2tNYXhQbGFuZXNdOwotCi0gIC8vIEFycmF5IG9mIGRhdGEgcG9pbnRlcnMgdG8gZWFjaCBwbGFuZS4KLSAgLy8gVE9ETyhtY2FzYXMpOiB3ZSBkb24ndCBrbm93IG9uIGN0b3IgaWYgd2Ugb3duIHxkYXRhX3wgb3Igbm90LiBDaGFuZ2UKLSAgLy8gdG8gc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3QsIEFsaWduZWRGcmVlRGVsZXRlcj4gYWZ0ZXIgcmVmYWN0b3JpbmcKLSAgLy8gVmlkZW9GcmFtZS4KLSAgdWludDhfdCogZGF0YV9ba01heFBsYW5lc107Ci0KLSAgLy8gTmF0aXZlIHRleHR1cmUgbWFpbGJveGVzLCBpZiB0aGlzIGlzIGEgSXNUZXh0dXJlKCkgZnJhbWUuCi0gIGdwdTo6TWFpbGJveEhvbGRlciBtYWlsYm94X2hvbGRlcnNfW2tNYXhQbGFuZXNdOwotICBSZWxlYXNlTWFpbGJveENCIG1haWxib3hfaG9sZGVyc19yZWxlYXNlX2NiXzsKLQotICAvLyBTaGFyZWQgbWVtb3J5IGhhbmRsZSBhbmQgYXNzb2NpYXRlZCBvZmZzZXQgaW5zaWRlIGl0LCBpZiB0aGlzIGZyYW1lIGlzCi0gIC8vIGEgU1RPUkFHRV9TSE1FTSBvbmUuCi0gIGJhc2U6OlNoYXJlZE1lbW9yeUhhbmRsZSBzaGFyZWRfbWVtb3J5X2hhbmRsZV87Ci0gIHNpemVfdCBzaGFyZWRfbWVtb3J5X29mZnNldF87Ci0KLSAgLy8gR3B1TWVtb3J5QnVmZmVyIGhhbmRsZXMgYXR0YWNoZWQgdG8gdGhlIHZpZGVvX2ZyYW1lLgotICBzdGQ6OnZlY3RvcjxnZng6OkdwdU1lbW9yeUJ1ZmZlckhhbmRsZT4gZ3B1X21lbW9yeV9idWZmZXJfaGFuZGxlc187Ci0KLSNpZiBkZWZpbmVkKE9TX0xJTlVYKQotICAvLyBEbWFidWZzIGZvciBlYWNoIHBsYW5lLiBJZiBzZXQsIHRoaXMgZnJhbWUgaGFzIERtYUJ1ZiBiYWNraW5nIGluIHNvbWUgd2F5LgotICBiYXNlOjpTY29wZWRGRCBkbWFidWZfZmRzX1trTWF4UGxhbmVzXTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChPU19NQUNPU1gpCi0gIC8vIENWUGl4ZWxCdWZmZXIsIGlmIHRoaXMgZnJhbWUgaXMgd3JhcHBpbmcgb25lLgotICBiYXNlOjpTY29wZWRDRlR5cGVSZWY8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3ZfcGl4ZWxfYnVmZmVyXzsKLSNlbmRpZgotCi0gIHN0ZDo6dmVjdG9yPGJhc2U6OkNsb3N1cmU+IGRvbmVfY2FsbGJhY2tzXzsKLQotICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wXzsKLQotICBiYXNlOjpMb2NrIHJlbGVhc2Vfc3luY190b2tlbl9sb2NrXzsKLSAgZ3B1OjpTeW5jVG9rZW4gcmVsZWFzZV9zeW5jX3Rva2VuXzsKLQotICBWaWRlb0ZyYW1lTWV0YWRhdGEgbWV0YWRhdGFfOwotCi0gIC8vIEdlbmVyYXRlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZS4KLSAgY29uc3QgaW50IHVuaXF1ZV9pZF87Ci0KLSAgZ2Z4OjpDb2xvclNwYWNlIGNvbG9yX3NwYWNlXzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVmlkZW9GcmFtZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19GUkFNRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWVfbWV0YWRhdGEuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZV9tZXRhZGF0YS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3NzY2Ni4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZV9tZXRhZGF0YS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE4MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZV9tZXRhZGF0YS5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi0vLyBNYXAgZW51bSBrZXkgdG8gaW50ZXJuYWwgc3RkOjpzdHJpbmcga2V5IHVzZWQgYnkgYmFzZTo6RGljdGlvbmFyeVZhbHVlLgotaW5saW5lIHN0ZDo6c3RyaW5nIFRvSW50ZXJuYWxLZXkoVmlkZW9GcmFtZU1ldGFkYXRhOjpLZXkga2V5KSB7Ci0gIERDSEVDS19MVChrZXksIFZpZGVvRnJhbWVNZXRhZGF0YTo6TlVNX0tFWVMpOwotICByZXR1cm4gYmFzZTo6SW50VG9TdHJpbmcoc3RhdGljX2Nhc3Q8aW50PihrZXkpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLVZpZGVvRnJhbWVNZXRhZGF0YTo6VmlkZW9GcmFtZU1ldGFkYXRhKCkge30KLQotVmlkZW9GcmFtZU1ldGFkYXRhOjp+VmlkZW9GcmFtZU1ldGFkYXRhKCkge30KLQotYm9vbCBWaWRlb0ZyYW1lTWV0YWRhdGE6Okhhc0tleShLZXkga2V5KSBjb25zdCB7Ci0gIHJldHVybiBkaWN0aW9uYXJ5Xy5IYXNLZXkoVG9JbnRlcm5hbEtleShrZXkpKTsKLX0KLQotdm9pZCBWaWRlb0ZyYW1lTWV0YWRhdGE6OlNldEJvb2xlYW4oS2V5IGtleSwgYm9vbCB2YWx1ZSkgewotICBkaWN0aW9uYXJ5Xy5TZXRCb29sZWFuV2l0aG91dFBhdGhFeHBhbnNpb24oVG9JbnRlcm5hbEtleShrZXkpLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgVmlkZW9GcmFtZU1ldGFkYXRhOjpTZXRJbnRlZ2VyKEtleSBrZXksIGludCB2YWx1ZSkgewotICBkaWN0aW9uYXJ5Xy5TZXRJbnRlZ2VyV2l0aG91dFBhdGhFeHBhbnNpb24oVG9JbnRlcm5hbEtleShrZXkpLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgVmlkZW9GcmFtZU1ldGFkYXRhOjpTZXREb3VibGUoS2V5IGtleSwgZG91YmxlIHZhbHVlKSB7Ci0gIGRpY3Rpb25hcnlfLlNldERvdWJsZVdpdGhvdXRQYXRoRXhwYW5zaW9uKFRvSW50ZXJuYWxLZXkoa2V5KSwgdmFsdWUpOwotfQotCi12b2lkIFZpZGVvRnJhbWVNZXRhZGF0YTo6U2V0Um90YXRpb24oS2V5IGtleSwgVmlkZW9Sb3RhdGlvbiB2YWx1ZSkgewotICBEQ0hFQ0tfRVEoUk9UQVRJT04sIGtleSk7Ci0gIGRpY3Rpb25hcnlfLlNldEludGVnZXJXaXRob3V0UGF0aEV4cGFuc2lvbihUb0ludGVybmFsS2V5KGtleSksIHZhbHVlKTsKLX0KLQotdm9pZCBWaWRlb0ZyYW1lTWV0YWRhdGE6OlNldFN0cmluZyhLZXkga2V5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgZGljdGlvbmFyeV8uU2V0V2l0aG91dFBhdGhFeHBhbnNpb24oCi0gICAgICBUb0ludGVybmFsS2V5KGtleSksCi0gICAgICAvLyBVc2luZyBCaW5hcnlWYWx1ZSBzaW5jZSB3ZSBkb24ndCB3YW50IHRoZSB8dmFsdWV8IGludGVycHJldGVkIGFzIGhhdmluZwotICAgICAgLy8gYW55IHBhcnRpY3VsYXIgY2hhcmFjdGVyIGVuY29kaW5nIChlLmcuLCBVVEYtOCkgYnkKLSAgICAgIC8vIGJhc2U6OkRpY3Rpb25hcnlWYWx1ZS4KLSAgICAgIGJhc2U6OkJpbmFyeVZhbHVlOjpDcmVhdGVXaXRoQ29waWVkQnVmZmVyKHZhbHVlLmRhdGEoKSwgdmFsdWUuc2l6ZSgpKSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci10ZW1wbGF0ZSA8Y2xhc3MgVGltZVR5cGU+Ci12b2lkIFNldFRpbWVWYWx1ZShWaWRlb0ZyYW1lTWV0YWRhdGE6OktleSBrZXksIGNvbnN0IFRpbWVUeXBlJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgIGJhc2U6OkRpY3Rpb25hcnlWYWx1ZSogZGljdGlvbmFyeSkgewotICBjb25zdCBpbnQ2NF90IGludGVybmFsX3ZhbHVlID0gdmFsdWUuVG9JbnRlcm5hbFZhbHVlKCk7Ci0gIGRpY3Rpb25hcnktPlNldFdpdGhvdXRQYXRoRXhwYW5zaW9uKAotICAgICAgVG9JbnRlcm5hbEtleShrZXkpLCBiYXNlOjpCaW5hcnlWYWx1ZTo6Q3JlYXRlV2l0aENvcGllZEJ1ZmZlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZpbnRlcm5hbF92YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50ZXJuYWxfdmFsdWUpKSk7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotdm9pZCBWaWRlb0ZyYW1lTWV0YWRhdGE6OlNldFRpbWVEZWx0YShLZXkga2V5LCBjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHZhbHVlKSB7Ci0gIFNldFRpbWVWYWx1ZShrZXksIHZhbHVlLCAmZGljdGlvbmFyeV8pOwotfQotCi12b2lkIFZpZGVvRnJhbWVNZXRhZGF0YTo6U2V0VGltZVRpY2tzKEtleSBrZXksIGNvbnN0IGJhc2U6OlRpbWVUaWNrcyYgdmFsdWUpIHsKLSAgU2V0VGltZVZhbHVlKGtleSwgdmFsdWUsICZkaWN0aW9uYXJ5Xyk7Ci19Ci0KLXZvaWQgVmlkZW9GcmFtZU1ldGFkYXRhOjpTZXRWYWx1ZShLZXkga2V5LCBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6VmFsdWU+IHZhbHVlKSB7Ci0gIGRpY3Rpb25hcnlfLlNldFdpdGhvdXRQYXRoRXhwYW5zaW9uKFRvSW50ZXJuYWxLZXkoa2V5KSwgc3RkOjptb3ZlKHZhbHVlKSk7Ci19Ci0KLWJvb2wgVmlkZW9GcmFtZU1ldGFkYXRhOjpHZXRCb29sZWFuKEtleSBrZXksIGJvb2wqIHZhbHVlKSBjb25zdCB7Ci0gIERDSEVDSyh2YWx1ZSk7Ci0gIHJldHVybiBkaWN0aW9uYXJ5Xy5HZXRCb29sZWFuV2l0aG91dFBhdGhFeHBhbnNpb24oVG9JbnRlcm5hbEtleShrZXkpLCB2YWx1ZSk7Ci19Ci0KLWJvb2wgVmlkZW9GcmFtZU1ldGFkYXRhOjpHZXRJbnRlZ2VyKEtleSBrZXksIGludCogdmFsdWUpIGNvbnN0IHsKLSAgRENIRUNLKHZhbHVlKTsKLSAgcmV0dXJuIGRpY3Rpb25hcnlfLkdldEludGVnZXJXaXRob3V0UGF0aEV4cGFuc2lvbihUb0ludGVybmFsS2V5KGtleSksIHZhbHVlKTsKLX0KLQotYm9vbCBWaWRlb0ZyYW1lTWV0YWRhdGE6OkdldERvdWJsZShLZXkga2V5LCBkb3VibGUqIHZhbHVlKSBjb25zdCB7Ci0gIERDSEVDSyh2YWx1ZSk7Ci0gIHJldHVybiBkaWN0aW9uYXJ5Xy5HZXREb3VibGVXaXRob3V0UGF0aEV4cGFuc2lvbihUb0ludGVybmFsS2V5KGtleSksIHZhbHVlKTsKLX0KLQotYm9vbCBWaWRlb0ZyYW1lTWV0YWRhdGE6OkdldFJvdGF0aW9uKEtleSBrZXksIFZpZGVvUm90YXRpb24qIHZhbHVlKSBjb25zdCB7Ci0gIERDSEVDS19FUShST1RBVElPTiwga2V5KTsKLSAgRENIRUNLKHZhbHVlKTsKLSAgaW50IGludF92YWx1ZTsKLSAgY29uc3QgYm9vbCBydiA9IGRpY3Rpb25hcnlfLkdldEludGVnZXJXaXRob3V0UGF0aEV4cGFuc2lvbihUb0ludGVybmFsS2V5KGtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludF92YWx1ZSk7Ci0gIGlmIChydikgKnZhbHVlID0gc3RhdGljX2Nhc3Q8VmlkZW9Sb3RhdGlvbj4oaW50X3ZhbHVlKTsKLSAgcmV0dXJuIHJ2OwotfQotCi1ib29sIFZpZGVvRnJhbWVNZXRhZGF0YTo6R2V0U3RyaW5nKEtleSBrZXksIHN0ZDo6c3RyaW5nKiB2YWx1ZSkgY29uc3QgewotICBEQ0hFQ0sodmFsdWUpOwotICBjb25zdCBiYXNlOjpCaW5hcnlWYWx1ZSogY29uc3QgYmluYXJ5X3ZhbHVlID0gR2V0QmluYXJ5VmFsdWUoa2V5KTsKLSAgaWYgKGJpbmFyeV92YWx1ZSkKLSAgICB2YWx1ZS0+YXNzaWduKGJpbmFyeV92YWx1ZS0+R2V0QnVmZmVyKCksIGJpbmFyeV92YWx1ZS0+R2V0U2l6ZSgpKTsKLSAgcmV0dXJuICEhYmluYXJ5X3ZhbHVlOwotfQotCi1uYW1lc3BhY2UgewotdGVtcGxhdGUgPGNsYXNzIFRpbWVUeXBlPgotYm9vbCBUb1RpbWVWYWx1ZShjb25zdCBiYXNlOjpCaW5hcnlWYWx1ZSYgYmluYXJ5X3ZhbHVlLCBUaW1lVHlwZSogdmFsdWUpIHsKLSAgRENIRUNLKHZhbHVlKTsKLSAgaW50NjRfdCBpbnRlcm5hbF92YWx1ZTsKLSAgaWYgKGJpbmFyeV92YWx1ZS5HZXRTaXplKCkgIT0gc2l6ZW9mKGludGVybmFsX3ZhbHVlKSkgcmV0dXJuIGZhbHNlOwotICBtZW1jcHkoJmludGVybmFsX3ZhbHVlLCBiaW5hcnlfdmFsdWUuR2V0QnVmZmVyKCksCi0gICAgICAgICAgICAgICBzaXplb2YoaW50ZXJuYWxfdmFsdWUpKTsKLSAgKnZhbHVlID0gVGltZVR5cGU6OkZyb21JbnRlcm5hbFZhbHVlKGludGVybmFsX3ZhbHVlKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotYm9vbCBWaWRlb0ZyYW1lTWV0YWRhdGE6OkdldFRpbWVEZWx0YShLZXkga2V5LCBiYXNlOjpUaW1lRGVsdGEqIHZhbHVlKSBjb25zdCB7Ci0gIGNvbnN0IGJhc2U6OkJpbmFyeVZhbHVlKiBjb25zdCBiaW5hcnlfdmFsdWUgPSBHZXRCaW5hcnlWYWx1ZShrZXkpOwotICByZXR1cm4gYmluYXJ5X3ZhbHVlICYmIFRvVGltZVZhbHVlKCpiaW5hcnlfdmFsdWUsIHZhbHVlKTsKLX0KLQotYm9vbCBWaWRlb0ZyYW1lTWV0YWRhdGE6OkdldFRpbWVUaWNrcyhLZXkga2V5LCBiYXNlOjpUaW1lVGlja3MqIHZhbHVlKSBjb25zdCB7Ci0gIGNvbnN0IGJhc2U6OkJpbmFyeVZhbHVlKiBjb25zdCBiaW5hcnlfdmFsdWUgPSBHZXRCaW5hcnlWYWx1ZShrZXkpOwotICByZXR1cm4gYmluYXJ5X3ZhbHVlICYmIFRvVGltZVZhbHVlKCpiaW5hcnlfdmFsdWUsIHZhbHVlKTsKLX0KLQotY29uc3QgYmFzZTo6VmFsdWUqIFZpZGVvRnJhbWVNZXRhZGF0YTo6R2V0VmFsdWUoS2V5IGtleSkgY29uc3QgewotICBjb25zdCBiYXNlOjpWYWx1ZSogcmVzdWx0ID0gTlVMTDsKLSAgaWYgKCFkaWN0aW9uYXJ5Xy5HZXRXaXRob3V0UGF0aEV4cGFuc2lvbihUb0ludGVybmFsS2V5KGtleSksICZyZXN1bHQpKQotICAgIHJldHVybiBOVUxMOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFZpZGVvRnJhbWVNZXRhZGF0YTo6SXNUcnVlKEtleSBrZXkpIGNvbnN0IHsKLSAgYm9vbCB2YWx1ZSA9IGZhbHNlOwotICByZXR1cm4gR2V0Qm9vbGVhbihrZXksICZ2YWx1ZSkgJiYgdmFsdWU7Ci19Ci0KLXZvaWQgVmlkZW9GcmFtZU1ldGFkYXRhOjpNZXJnZUludGVybmFsVmFsdWVzSW50bygKLSAgICBiYXNlOjpEaWN0aW9uYXJ5VmFsdWUqIG91dCkgY29uc3QgewotICBvdXQtPk1lcmdlRGljdGlvbmFyeSgmZGljdGlvbmFyeV8pOwotfQotCi12b2lkIFZpZGVvRnJhbWVNZXRhZGF0YTo6TWVyZ2VJbnRlcm5hbFZhbHVlc0Zyb20oCi0gICAgY29uc3QgYmFzZTo6RGljdGlvbmFyeVZhbHVlJiBpbikgewotICBkaWN0aW9uYXJ5Xy5NZXJnZURpY3Rpb25hcnkoJmluKTsKLX0KLQotdm9pZCBWaWRlb0ZyYW1lTWV0YWRhdGE6Ok1lcmdlTWV0YWRhdGFGcm9tKAotICAgIGNvbnN0IFZpZGVvRnJhbWVNZXRhZGF0YSogbWV0YWRhdGFfc291cmNlKSB7Ci0gIGRpY3Rpb25hcnlfLk1lcmdlRGljdGlvbmFyeSgmbWV0YWRhdGFfc291cmNlLT5kaWN0aW9uYXJ5Xyk7Ci19Ci0KLWNvbnN0IGJhc2U6OkJpbmFyeVZhbHVlKiBWaWRlb0ZyYW1lTWV0YWRhdGE6OkdldEJpbmFyeVZhbHVlKEtleSBrZXkpIGNvbnN0IHsKLSAgY29uc3QgYmFzZTo6VmFsdWUqIGludGVybmFsX3ZhbHVlID0gTlVMTDsKLSAgaWYgKGRpY3Rpb25hcnlfLkdldFdpdGhvdXRQYXRoRXhwYW5zaW9uKFRvSW50ZXJuYWxLZXkoa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbF92YWx1ZSkgJiYKLSAgICAgIGludGVybmFsX3ZhbHVlLT5HZXRUeXBlKCkgPT0gYmFzZTo6VmFsdWU6OlRZUEVfQklOQVJZKSB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGJhc2U6OkJpbmFyeVZhbHVlKj4oaW50ZXJuYWxfdmFsdWUpOwotICB9Ci0gIHJldHVybiBOVUxMOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lX21ldGFkYXRhLmggYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZV9tZXRhZGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODcwYTMyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2ZyYW1lX21ldGFkYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0ZSQU1FX01FVEFEQVRBX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0ZSQU1FX01FVEFEQVRBX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiYmFzZS92YWx1ZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yb3RhdGlvbi5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBWaWRlb0ZyYW1lTWV0YWRhdGEgewotIHB1YmxpYzoKLSAgZW51bSBLZXkgewotICAgIC8vIFNvdXJjZXMgb2YgVmlkZW9GcmFtZXMgdXNlIHRoaXMgbWFya2VyIHRvIGluZGljYXRlIHRoYXQgdGhlIGFzc29jaWF0ZWQKLSAgICAvLyBWaWRlb0ZyYW1lIGNhbiBiZSBvdmVybGF5ZWQsIGNhc2UgaW4gd2hpY2ggaXRzIGNvbnRlbnRzIGRvIG5vdCBuZWVkIHRvIGJlCi0gICAgLy8gZnVydGhlciBjb21wb3NpdGVkIGJ1dCBkaXNwbGF5ZWQgZGlyZWN0bHkuIFVzZSBHZXQvU2V0Qm9vbGVhbigpIGZvcgotICAgIC8vIHRoaXMgS2V5LgotICAgIEFMTE9XX09WRVJMQVksCi0KLSAgICAvLyBWaWRlbyBjYXB0dXJlIGJlZ2luL2VuZCB0aW1lc3RhbXBzLiAgQ29uc3VtZXJzIGNhbiB1c2UgdGhlc2UgdmFsdWVzIGZvcgotICAgIC8vIGR5bmFtaWMgb3B0aW1pemF0aW9ucywgbG9nZ2luZyBzdGF0cywgZXRjLiAgVXNlIEdldC9TZXRUaW1lVGlja3MoKSBmb3IKLSAgICAvLyB0aGVzZSBrZXlzLgotICAgIENBUFRVUkVfQkVHSU5fVElNRSwKLSAgICBDQVBUVVJFX0VORF9USU1FLAotCi0gICAgLy8gU29tZSBWaWRlb0ZyYW1lcyBoYXZlIGFuIGluZGljYXRpb24gb2YgdGhlIGNvbG9yIHNwYWNlIHVzZWQuICBVc2UKLSAgICAvLyBHZXRJbnRlZ2VyKCkvU2V0SW50ZWdlcigpIGFuZCBDb2xvclNwYWNlIGVudW1lcmF0aW9uLgotICAgIENPTE9SX1NQQUNFLAotCi0gICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhpcyBmcmFtZSBtdXN0IGJlIGNvcGllZCB0byBhIG5ldyB0ZXh0dXJlIGJlZm9yZSB1c2UsCi0gICAgLy8gcmF0aGVyIHRoYW4gYmVpbmcgdXNlZCBkaXJlY3RseS4gU3BlY2lmaWNhbGx5IHRoaXMgaXMgcmVxdWlyZWQgZm9yCi0gICAgLy8gV2ViVmlldyBiZWNhdXNlIG9mIGxpbWl0YXRpb25zIGFib3V0IHNoYXJpbmcgc3VyZmFjZSB0ZXh0dXJlcyBiZXR3ZWVuIEdMCi0gICAgLy8gY29udGV4dHMuCi0gICAgQ09QWV9SRVFVSVJFRCwKLQotICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSBmcmFtZSBpcyBvd25lZCBieSB0aGUgZGVjb2RlciBhbmQgdGhhdCBkZXN0cm95aW5nIHRoZQotICAgIC8vIGRlY29kZXIgd2lsbCBtYWtlIHRoZSBmcmFtZSB1bnJlbmRlcmFibGUuIFRPRE8oc2FuZGVyc2QpOiBSZW1vdmUgb25jZSBPU1gKLSAgICAvLyBhbmQgV2luZG93cyBoYXJkd2FyZSBkZWNvZGVycyBzdXBwb3J0IGZyYW1lcyB3aGljaCBvdXRsaXZlIHRoZSBkZWNvZGVyLgotICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vNTk1NzE2IGFuZCBodHRwOi8vY3JidWcuY29tLzYwMjcwOC4KLSAgICBERUNPREVSX09XTlNfRlJBTUUsCi0KLSAgICAvLyBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgZnJhbWUgaXMgdGhlIEVuZCBvZiBpdHMgY3VycmVudCBTdHJlYW0uIFVzZQotICAgIC8vIEdldC9TZXRCb29sZWFuKCkgZm9yIHRoaXMgS2V5LgotICAgIEVORF9PRl9TVFJFQU0sCi0KLSAgICAvLyBUaGUgZXN0aW1hdGVkIGR1cmF0aW9uIG9mIHRoaXMgZnJhbWUgKGkuZS4sIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuCi0gICAgLy8gdGhlIG1lZGlhIHRpbWVzdGFtcCBvZiB0aGlzIGZyYW1lIGFuZCB0aGUgbmV4dCkuICBOb3RlIHRoYXQgdGhpcyBpcyBub3QKLSAgICAvLyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBGUkFNRV9SQVRFIGFzIHRoZSBGUkFNRV9EVVJBVElPTiBjYW4KLSAgICAvLyB2YXJ5IHVucHJlZGljdGFibHkgZm9yIGV2ZXJ5IGZyYW1lLiAgQ29uc3VtZXJzIGNhbiB1c2UgdGhpcyB0byBvcHRpbWl6ZQotICAgIC8vIHBsYXliYWNrIHNjaGVkdWxpbmcsIG1ha2UgZW5jb2RpbmcgcXVhbGl0eSBkZWNpc2lvbnMsIGFuZC9vciBjb21wdXRlCi0gICAgLy8gZnJhbWUtbGV2ZWwgcmVzb3VyY2UgdXRpbGl6YXRpb24gc3RhdHMuICBVc2UgR2V0L1NldFRpbWVEZWx0YSgpIGZvciB0aGlzCi0gICAgLy8ga2V5LgotICAgIEZSQU1FX0RVUkFUSU9OLAotCi0gICAgLy8gUmVwcmVzZW50cyBlaXRoZXIgdGhlIGZpeGVkIGZyYW1lIHJhdGUsIG9yIHRoZSBtYXhpbXVtIGZyYW1lIHJhdGUgdG8KLSAgICAvLyBleHBlY3QgZnJvbSBhIHZhcmlhYmxlLXJhdGUgc291cmNlLiAgVGhpcyB2YWx1ZSBnZW5lcmFsbHkgcmVtYWlucyB0aGUKLSAgICAvLyBzYW1lIGZvciBhbGwgZnJhbWVzIGluIHRoZSBzYW1lIHNlc3Npb24uICBVc2UgR2V0L1NldERvdWJsZSgpIGZvciB0aGlzCi0gICAgLy8ga2V5LgotICAgIEZSQU1FX1JBVEUsCi0KLSAgICAvLyBUaGlzIGlzIGEgYm9vbGVhbiB0aGF0IHNpZ25hbHMgdGhhdCB0aGUgdmlkZW8gY2FwdHVyZSBlbmdpbmUgZGV0ZWN0cwotICAgIC8vIGludGVyYWN0aXZlIGNvbnRlbnQuIE9uZSBwb3NzaWJsZSBvcHRpbWl6YXRpb24gdGhhdCB0aGlzIHNpZ25hbCBjYW4gaGVscAotICAgIC8vIHdpdGggaXMgcmVtb3RlIGNvbnRlbnQ6IGFkanVzdGluZyBlbmQtdG8tZW5kIGxhdGVuY3kgZG93biB0byBoZWxwIHRoZQotICAgIC8vIHVzZXIgYmV0dGVyIGNvb3JkaW5hdGUgdGhlaXIgYWN0aW9ucy4KLSAgICAvLwotICAgIC8vIFVzZSBHZXQvU2V0Qm9vbGVhbiBmb3IgdGhpcyBrZXkuCi0gICAgSU5URVJBQ1RJVkVfQ09OVEVOVCwKLQotICAgIC8vIFRoaXMgZmllbGQgcmVwcmVzZW50cyB0aGUgbG9jYWwgdGltZSBhdCB3aGljaCBlaXRoZXI6IDEpIHRoZSBmcmFtZSB3YXMKLSAgICAvLyBnZW5lcmF0ZWQsIGlmIGl0IHdhcyBkb25lIHNvIGxvY2FsbHk7IG9yIDIpIHRoZSB0YXJnZXRlZCBwbGF5LW91dCB0aW1lCi0gICAgLy8gb2YgdGhlIGZyYW1lLCBpZiBpdCB3YXMgZ2VuZXJhdGVkIGZyb20gYSByZW1vdGUgc291cmNlLiBUaGlzIHZhbHVlIGlzIE5PVAotICAgIC8vIGEgaGlnaC1yZXNvbHV0aW9uIHRpbWVzdGFtcCwgYW5kIHNvIGl0IHNob3VsZCBub3QgYmUgdXNlZCBhcyBhCi0gICAgLy8gcHJlc2VudGF0aW9uIHRpbWU7IGJ1dCwgaW5zdGVhZCwgaXQgc2hvdWxkIGJlIHVzZWQgZm9yIGJ1ZmZlcmluZyBwbGF5YmFjawotICAgIC8vIGFuZCBmb3IgQS9WIHN5bmNocm9uaXphdGlvbiBwdXJwb3Nlcy4KLSAgICAvLyBVc2UgR2V0L1NldFRpbWVUaWNrcygpIGZvciB0aGlzIGtleS4KLSAgICBSRUZFUkVOQ0VfVElNRSwKLQotICAgIC8vIEEgZmVlZGJhY2sgc2lnbmFsIHRoYXQgaW5kaWNhdGVzIHRoZSBmcmFjdGlvbiBvZiB0aGUgdG9sZXJhYmxlIG1heGltdW0KLSAgICAvLyBhbW91bnQgb2YgcmVzb3VyY2VzIHRoYXQgd2VyZSB1dGlsaXplZCB0byBwcm9jZXNzIHRoaXMgZnJhbWUuICBBIHByb2R1Y2VyCi0gICAgLy8gY2FuIGNoZWNrIHRoaXMgdmFsdWUgYWZ0ZXItdGhlLWZhY3QsIHVzdWFsbHkgdmlhIGEgVmlkZW9GcmFtZSBkZXN0cnVjdGlvbgotICAgIC8vIG9ic2VydmVyLCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29uc3VtZXIgY2FuIGhhbmRsZSBtb3JlIG9yIGxlc3MgZGF0YQotICAgIC8vIHZvbHVtZSwgYW5kIGFjaGlldmUgdGhlIHJpZ2h0IHF1YWxpdHkgdmVyc3VzIHBlcmZvcm1hbmNlIHRyYWRlLW9mZi4KLSAgICAvLwotICAgIC8vIFVzZSBHZXQvU2V0RG91YmxlKCkgZm9yIHRoaXMga2V5LiAgVmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgotICAgIC8vIExlc3MgdGhhbiAwLjAgaXMgbWVhbmluZ2xlc3MgYW5kIHNob3VsZCBiZSBpZ25vcmVkLiAgMS4wIGluZGljYXRlcyBhCi0gICAgLy8gbWF4aW11bSBzdXN0YWluYWJsZSB1dGlsaXphdGlvbi4gIEdyZWF0ZXIgdGhhbiAxLjAgaW5kaWNhdGVzIHRoZSBjb25zdW1lcgotICAgIC8vIGlzIGxpa2VseSB0byBzdGFsbCBvciBkcm9wIGZyYW1lcyBpZiB0aGUgZGF0YSB2b2x1bWUgaXMgbm90IHJlZHVjZWQuCi0gICAgLy8KLSAgICAvLyBFeGFtcGxlOiBJbiBhIHN5c3RlbSB0aGF0IGVuY29kZXMgYW5kIHRyYW5zbWl0cyB2aWRlbyBmcmFtZXMgb3ZlciB0aGUKLSAgICAvLyBuZXR3b3JrLCB0aGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgc3VmZmljaWVudCBDUFUKLSAgICAvLyBpcyBhdmFpbGFibGUgZm9yIGVuY29kaW5nIGFuZC9vciBzdWZmaWNpZW50IGJhbmR3aWR0aCBpcyBhdmFpbGFibGUgZm9yCi0gICAgLy8gdHJhbnNtaXNzaW9uIG92ZXIgdGhlIG5ldHdvcmsuICBUaGUgbWF4aW11bSBvZiB0aGUgdHdvIHV0aWxpemF0aW9uCi0gICAgLy8gbWVhc3VyZW1lbnRzIHdvdWxkIGJlIHVzZWQgYXMgZmVlZGJhY2suCi0gICAgUkVTT1VSQ0VfVVRJTElaQVRJT04sCi0KLSAgICAvLyBTb3VyY2VzIG9mIFZpZGVvRnJhbWVzIHVzZSB0aGlzIG1hcmtlciB0byBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mCi0gICAgLy8gVmlkZW9GcmFtZUV4dGVybmFsUmVzb3VyY2VzIHByb2R1Y2VkIGZyb20gdGhlIGFzc29jaWF0ZWQgdmlkZW8gZnJhbWUKLSAgICAvLyBzaG91bGQgdXNlIHJlYWQgbG9jayBmZW5jZXMuCi0gICAgUkVBRF9MT0NLX0ZFTkNFU19FTkFCTEVELAotCi0gICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIGZyYW1lIGlzIHJvdGF0ZWQuCi0gICAgUk9UQVRJT04sCi0KLSAgICBOVU1fS0VZUwotICB9OwotCi0gIFZpZGVvRnJhbWVNZXRhZGF0YSgpOwotICB+VmlkZW9GcmFtZU1ldGFkYXRhKCk7Ci0KLSAgYm9vbCBIYXNLZXkoS2V5IGtleSkgY29uc3Q7Ci0KLSAgdm9pZCBDbGVhcigpIHsgZGljdGlvbmFyeV8uQ2xlYXIoKTsgfQotCi0gIC8vIFNldHRlcnMuICBPdmVyd3JpdGVzIGV4aXN0aW5nIHZhbHVlLCBpZiBwcmVzZW50LgotICB2b2lkIFNldEJvb2xlYW4oS2V5IGtleSwgYm9vbCB2YWx1ZSk7Ci0gIHZvaWQgU2V0SW50ZWdlcihLZXkga2V5LCBpbnQgdmFsdWUpOwotICB2b2lkIFNldERvdWJsZShLZXkga2V5LCBkb3VibGUgdmFsdWUpOwotICB2b2lkIFNldFJvdGF0aW9uKEtleSBrZXksIFZpZGVvUm90YXRpb24gdmFsdWUpOwotICB2b2lkIFNldFN0cmluZyhLZXkga2V5LCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpOwotICB2b2lkIFNldFRpbWVEZWx0YShLZXkga2V5LCBjb25zdCBiYXNlOjpUaW1lRGVsdGEmIHZhbHVlKTsKLSAgdm9pZCBTZXRUaW1lVGlja3MoS2V5IGtleSwgY29uc3QgYmFzZTo6VGltZVRpY2tzJiB2YWx1ZSk7Ci0gIHZvaWQgU2V0VmFsdWUoS2V5IGtleSwgc3RkOjp1bmlxdWVfcHRyPGJhc2U6OlZhbHVlPiB2YWx1ZSk7Ci0KLSAgLy8gR2V0dGVycy4gIFJldHVybnMgdHJ1ZSBpZiB8a2V5fCBpcyBwcmVzZW50LCBhbmQgaXRzIHZhbHVlIGhhcyBiZWVuIHNldC4KLSAgYm9vbCBHZXRCb29sZWFuKEtleSBrZXksIGJvb2wqIHZhbHVlKSBjb25zdCBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0gIGJvb2wgR2V0SW50ZWdlcihLZXkga2V5LCBpbnQqIHZhbHVlKSBjb25zdCBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0gIGJvb2wgR2V0RG91YmxlKEtleSBrZXksIGRvdWJsZSogdmFsdWUpIGNvbnN0IFdBUk5fVU5VU0VEX1JFU1VMVDsKLSAgYm9vbCBHZXRSb3RhdGlvbihLZXkga2V5LCBWaWRlb1JvdGF0aW9uKiB2YWx1ZSkgY29uc3QgV0FSTl9VTlVTRURfUkVTVUxUOwotICBib29sIEdldFN0cmluZyhLZXkga2V5LCBzdGQ6OnN0cmluZyogdmFsdWUpIGNvbnN0IFdBUk5fVU5VU0VEX1JFU1VMVDsKLSAgYm9vbCBHZXRUaW1lRGVsdGEoS2V5IGtleSwgYmFzZTo6VGltZURlbHRhKiB2YWx1ZSkgY29uc3QgV0FSTl9VTlVTRURfUkVTVUxUOwotICBib29sIEdldFRpbWVUaWNrcyhLZXkga2V5LCBiYXNlOjpUaW1lVGlja3MqIHZhbHVlKSBjb25zdCBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIHxrZXl8IHdhcyBub3QgcHJlc2VudC4KLSAgY29uc3QgYmFzZTo6VmFsdWUqIEdldFZhbHVlKEtleSBrZXkpIGNvbnN0IFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICAvLyBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCByZXR1cm5zIHRydWUgaWYgfGtleXwgZXhpc3RzIGFuZCBpcyBzZXQgdG8gdHJ1ZS4KLSAgYm9vbCBJc1RydWUoS2V5IGtleSkgY29uc3QgV0FSTl9VTlVTRURfUkVTVUxUOwotCi0gIC8vIEZvciBzZXJpYWxpemF0aW9uLgotICB2b2lkIE1lcmdlSW50ZXJuYWxWYWx1ZXNJbnRvKGJhc2U6OkRpY3Rpb25hcnlWYWx1ZSogb3V0KSBjb25zdDsKLSAgdm9pZCBNZXJnZUludGVybmFsVmFsdWVzRnJvbShjb25zdCBiYXNlOjpEaWN0aW9uYXJ5VmFsdWUmIGluKTsKLQotICAvLyBNZXJnZXMgaW50ZXJuYWwgdmFsdWVzIGZyb20gfG1ldGFkYXRhX3NvdXJjZXwuCi0gIHZvaWQgTWVyZ2VNZXRhZGF0YUZyb20oY29uc3QgVmlkZW9GcmFtZU1ldGFkYXRhKiBtZXRhZGF0YV9zb3VyY2UpOwotCi0gcHJpdmF0ZToKLSAgY29uc3QgYmFzZTo6QmluYXJ5VmFsdWUqIEdldEJpbmFyeVZhbHVlKEtleSBrZXkpIGNvbnN0OwotCi0gIGJhc2U6OkRpY3Rpb25hcnlWYWx1ZSBkaWN0aW9uYXJ5XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmlkZW9GcmFtZU1ldGFkYXRhKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX0ZSQU1FX01FVEFEQVRBX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZXNvbHV0aW9uLmggYi9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb19yZXNvbHV0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllM2M4OTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcmVzb2x1dGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1JFU09MVVRJT05fSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVklERU9fUkVTT0xVVElPTl9IXwotCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEVudW1lcmF0ZXMgdGhlIHZhcmlvdXMgcmVwcmVzZW50YXRpb25zIG9mIHRoZSByZXNvbHV0aW9uIG9mIHZpZGVvcy4gIE5vdGUKLS8vIHRoYXQgZXhjZXB0IHxrVmlkZW9SZXNvbHV0aW9uSW52YWxpZHwsIGFsbCBvdGhlciB2YWx1ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKLS8vIGluIHRoZSBzYW1lIG9yZGVyIGFzIGl0cyAod2lkdGgsIGhlaWdodCkgcGFpci4KLWVudW0gVmlkZW9SZXNvbHV0aW9uIHsKLSAga1ZpZGVvUmVzb2x1dGlvbjEwODBwLCAgLy8gMTkyMCB4IDEwODAKLSAga1ZpZGVvUmVzb2x1dGlvbjJrLCAgICAgLy8gMjU2MCB4IDE0NDAKLSAga1ZpZGVvUmVzb2x1dGlvbjRrLCAgICAgLy8gMzg0MCB4IDIxNjAKLSAga1ZpZGVvUmVzb2x1dGlvbkludmFsaWQsCi19OwotCi1pbmxpbmUgVmlkZW9SZXNvbHV0aW9uIEdldFZpZGVvUmVzb2x1dGlvbihpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgaWYgKHdpZHRoIDw9IDE5MjAgJiYgaGVpZ2h0IDw9IDEwODApIHsKLSAgICByZXR1cm4ga1ZpZGVvUmVzb2x1dGlvbjEwODBwOwotICB9Ci0gIGlmICh3aWR0aCA8PSAyNTYwICYmIGhlaWdodCA8PSAxNDQwKSB7Ci0gICAgcmV0dXJuIGtWaWRlb1Jlc29sdXRpb24yazsKLSAgfQotICBpZiAod2lkdGggPD0gMzg0MCAmJiBoZWlnaHQgPD0gMjE2MCkgewotICAgIHJldHVybiBrVmlkZW9SZXNvbHV0aW9uNGs7Ci0gIH0KLSAgcmV0dXJuIGtWaWRlb1Jlc29sdXRpb25JbnZhbGlkOwotfQotCi1pbmxpbmUgVmlkZW9SZXNvbHV0aW9uIEdldFZpZGVvUmVzb2x1dGlvbihjb25zdCBtYXRoOjpTaXplJiBzaXplKSB7Ci0gIHJldHVybiBHZXRWaWRlb1Jlc29sdXRpb24oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVklERU9fUkVTT0xVVElPTl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcm90YXRpb24uaCBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3JvdGF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNTdhOWUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcm90YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19ST1RBVElPTl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19ST1RBVElPTl9IXwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEVudW1lcmF0aW9uIHRvIHJlcHJlc2VudCA5MCBkZWdyZWUgdmlkZW8gcm90YXRpb24gZm9yIE1QNCB2aWRlb3MKLS8vIHdoZXJlIGl0IGNhbiBiZSByb3RhdGVkIGJ5IDkwIGRlZ3JlZSBpbnRlcnZhbHMuCi1lbnVtIFZpZGVvUm90YXRpb24gewotICBWSURFT19ST1RBVElPTl8wID0gMCwKLSAgVklERU9fUk9UQVRJT05fOTAsCi0gIFZJREVPX1JPVEFUSU9OXzE4MCwKLSAgVklERU9fUk9UQVRJT05fMjcwLAotICBWSURFT19ST1RBVElPTl9NQVggPSBWSURFT19ST1RBVElPTl8yNzAKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1JPVEFUSU9OX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4YWZjMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1RZUEVTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1RZUEVTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBQaXhlbCBmb3JtYXRzIHJvdWdobHkgYmFzZWQgb24gRk9VUkNDIGxhYmVscywgc2VlOgotLy8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL3JnYi5waHAgYW5kIGh0dHA6Ly93d3cuZm91cmNjLm9yZy95dXYucGhwCi0vLyBMb2dnZWQgdG8gVU1BLCBzbyBuZXZlciByZXVzZSB2YWx1ZXMuIExlYXZlIGdhcHMgaWYgbmVjZXNzYXJ5LgotLy8gT3JkZXJlZCBhcyBwbGFuYXIsIHNlbWktcGxhbmFyLCBZVVYtcGFja2VkLCBhbmQgUkdCIGZvcm1hdHMuCi1lbnVtIFZpZGVvUGl4ZWxGb3JtYXQgewotICBQSVhFTF9GT1JNQVRfVU5LTk9XTiA9IDAsICAvLyBVbmtub3duIG9yIHVuc3BlY2lmaWVkIGZvcm1hdCB2YWx1ZS4KLSAgUElYRUxfRk9STUFUX0k0MjAgPQotICAgICAgMSwgIC8vIDEyYnBwIFlVViBwbGFuYXIgMXgxIFksIDJ4MiBVViBzYW1wbGVzLCBhLmsuYS4gWVUxMi4KLSAgUElYRUxfRk9STUFUX1lWMTIgPSAyLCAgIC8vIDEyYnBwIFlWVSBwbGFuYXIgMXgxIFksIDJ4MiBWVSBzYW1wbGVzLgotICBQSVhFTF9GT1JNQVRfWVYxNiA9IDMsICAgLy8gMTZicHAgWVZVIHBsYW5hciAxeDEgWSwgMngxIFZVIHNhbXBsZXMuCi0gIFBJWEVMX0ZPUk1BVF9ZVjEyQSA9IDQsICAvLyAyMGJwcCBZVVZBIHBsYW5hciAxeDEgWSwgMngyIFZVLCAxeDEgQSBzYW1wbGVzLgotICBQSVhFTF9GT1JNQVRfWVYyNCA9IDUsICAgLy8gMjRicHAgWVVWIHBsYW5hciwgbm8gc3Vic2FtcGxpbmcuCi0gIFBJWEVMX0ZPUk1BVF9OVjEyID0KLSAgICAgIDYsICAvLyAxMmJwcCB3aXRoIFkgcGxhbmUgZm9sbG93ZWQgYnkgYSAyeDIgaW50ZXJsZWF2ZWQgVVYgcGxhbmUuCi0gIFBJWEVMX0ZPUk1BVF9OVjIxID0KLSAgICAgIDcsICAvLyAxMmJwcCB3aXRoIFkgcGxhbmUgZm9sbG93ZWQgYnkgYSAyeDIgaW50ZXJsZWF2ZWQgVlUgcGxhbmUuCi0gIFBJWEVMX0ZPUk1BVF9VWVZZID0KLSAgICAgIDgsICAvLyAxNmJwcCBpbnRlcmxlYXZlZCAyeDEgVSwgMXgxIFksIDJ4MSBWLCAxeDEgWSBzYW1wbGVzLgotICBQSVhFTF9GT1JNQVRfWVVZMiA9Ci0gICAgICA5LCAgLy8gMTZicHAgaW50ZXJsZWF2ZWQgMXgxIFksIDJ4MSBVLCAxeDEgWSwgMngxIFYgc2FtcGxlcy4KLSAgUElYRUxfRk9STUFUX0FSR0IgPSAxMCwgICAvLyAzMmJwcCBBUkdCLCAxIHBsYW5lLgotICBQSVhFTF9GT1JNQVRfWFJHQiA9IDExLCAgIC8vIDI0YnBwIFhSR0IsIDEgcGxhbmUuCi0gIFBJWEVMX0ZPUk1BVF9SR0IyNCA9IDEyLCAgLy8gMjRicHAgQkdSLCAxIHBsYW5lLgotICBQSVhFTF9GT1JNQVRfUkdCMzIgPSAxMywgIC8vIDMyYnBwIEJHUkEsIDEgcGxhbmUuCi0gIFBJWEVMX0ZPUk1BVF9NSlBFRyA9IDE0LCAgLy8gTUpQRUcgY29tcHJlc3NlZC4KLSAgLy8gTWVkaWFUZWsgcHJvcHJpZXRhcnkgZm9ybWF0LiBNVDIxIGlzIHNpbWlsYXIgdG8gTlYyMSBleGNlcHQgdGhlIG1lbW9yeQotICAvLyBsYXlvdXQgYW5kIHBpeGVsIGxheW91dCAoc3dpenpsZXMpLiAxMmJwcCB3aXRoIFkgcGxhbmUgZm9sbG93ZWQgYnkgYSAyeDIKLSAgLy8gaW50ZXJsZWF2ZWQgVlUgcGxhbmUuIEVhY2ggaW1hZ2UgY29udGFpbnMgdHdvIGJ1ZmZlcnMgLS0gWSBwbGFuZSBhbmQgVlUKLSAgLy8gcGxhbmUuIFR3byBwbGFuZXMgY2FuIGJlIG5vbi1jb250aWd1b3VzIGluIG1lbW9yeS4gVGhlIHN0YXJ0aW5nIGFkZHJlc3NlcwotICAvLyBvZiBZIHBsYW5lIGFuZCBWVSBwbGFuZSBhcmUgNEtCIGFsaWdubWVudC4KLSAgLy8gU3VwcG9zZSBpbWFnZSBkaW1lbnNpb24gaXMgKHdpZHRoLCBoZWlnaHQpLiBGb3IgYm90aCBZIHBsYW5lIGFuZCBWVSBwbGFuZToKLSAgLy8gUm93IHBpdGNoID0gKCh3aWR0aCsxNSkvMTYpICogMTYuCi0gIC8vIFBsYW5lIHNpemUgPSBSb3cgcGl0Y2ggKiAoKChoZWlnaHQrMzEpLzMyKSozMikKLSAgUElYRUxfRk9STUFUX01UMjEgPSAxNSwKLQotICBQSVhFTF9GT1JNQVRfWVVWNDIwUDkgPSAxNiwKLSAgUElYRUxfRk9STUFUX1lVVjQyMFAxMCA9IDE3LAotICBQSVhFTF9GT1JNQVRfWVVWNDIyUDkgPSAxOCwKLSAgUElYRUxfRk9STUFUX1lVVjQyMlAxMCA9IDE5LAotICBQSVhFTF9GT1JNQVRfWVVWNDQ0UDkgPSAyMCwKLSAgUElYRUxfRk9STUFUX1lVVjQ0NFAxMCA9IDIxLAotCi0gIFBJWEVMX0ZPUk1BVF9ZVVY0MjBQMTIgPSAyMiwKLSAgUElYRUxfRk9STUFUX1lVVjQyMlAxMiA9IDIzLAotICBQSVhFTF9GT1JNQVRfWVVWNDQ0UDEyID0gMjQsCi0KLSAgUElYRUxfRk9STUFUX1k4ID0gMjUsICAgLy8gc2luZ2xlIDhicHAgcGxhbmUuCi0gIFBJWEVMX0ZPUk1BVF9ZMTYgPSAyNiwgIC8vIHNpbmdsZSAxNmJwcCBwbGFuZS4KLQotICAvLyBQbGVhc2UgdXBkYXRlIFVNQSBoaXN0b2dyYW0gZW51bWVyYXRpb24gd2hlbiBhZGRpbmcgbmV3IGZvcm1hdHMgaGVyZS4KLSAgUElYRUxfRk9STUFUX01BWCA9Ci0gICAgICBQSVhFTF9GT1JNQVRfWTE2LCAgLy8gTXVzdCBhbHdheXMgYmUgZXF1YWwgdG8gbGFyZ2VzdCBlbnRyeSBsb2dnZWQuCi19OwotCi0vLyBDb2xvciBzcGFjZSBvciBjb2xvciByYW5nZSB1c2VkIGZvciB0aGUgcGl4ZWxzLgotLy8gTG9nZ2VkIHRvIFVNQSwgc28gbmV2ZXIgcmV1c2UgdmFsdWVzLiBMZWF2ZSBnYXBzIGlmIG5lY2Vzc2FyeS4KLWVudW0gQ29sb3JTcGFjZSB7Ci0gIENPTE9SX1NQQUNFX1VOU1BFQ0lGSUVEID0gMCwgIC8vIEluIGdlbmVyYWwgdGhpcyBpcyBSZWM2MDEuCi0gIC8vIFRoZSBKUEVHIGNvbG9yIHNwYWNlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBSZWMuNjAxIGFuZCBmdWxsIHJhbmdlIGNvbG9ycwotICAvLyAoYWthIHBjIHJhbmdlIGNvbG9ycykuCi0gIENPTE9SX1NQQUNFX0pQRUcgPSAxLAotICBDT0xPUl9TUEFDRV9IRF9SRUM3MDkgPSAyLCAgLy8gUmVjNzA5ICJIRCIgY29sb3Igc3BhY2UuCi0gIENPTE9SX1NQQUNFX1NEX1JFQzYwMSA9IDMsICAvLyBSZWM2MDEgIlNEIiBjb2xvciBzcGFjZS4KLSAgQ09MT1JfU1BBQ0VfTUFYID0gQ09MT1JfU1BBQ0VfU0RfUkVDNjAxLAotfTsKLQotLy8gUmV0dXJucyB0aGUgbmFtZSBvZiBhIEZvcm1hdCBhcyBhIHN0cmluZy4KLU1FRElBX0VYUE9SVCBzdGQ6OnN0cmluZyBWaWRlb1BpeGVsRm9ybWF0VG9TdHJpbmcoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgfGZvcm1hdHwgaXMgYSBZVVYgZm9ybWF0IHdpdGggbXVsdGlwbGUgcGxhbmVzLgotTUVESUFfRVhQT1JUIGJvb2wgSXNZdXZQbGFuYXIoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgfGZvcm1hdHwgaGFzIG5vIEFscGhhIGNoYW5uZWwgKGhlbmNlIGlzIGFsd2F5cyBvcGFxdWUpLgotTUVESUFfRVhQT1JUIGJvb2wgSXNPcGFxdWUoVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfQkFTRV9WSURFT19UWVBFU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3V0aWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMTE4MDEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5oIgotCi0jaW5jbHVkZSA8Y21hdGg+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1tYXRoOjpTaXplIEdldE5hdHVyYWxTaXplKGNvbnN0IG1hdGg6OlNpemUmIHZpc2libGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFzcGVjdF9yYXRpb19udW1lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhc3BlY3RfcmF0aW9fZGVub21pbmF0b3IpIHsKLSAgaWYgKGFzcGVjdF9yYXRpb19kZW5vbWluYXRvciA9PSAwIHx8IGFzcGVjdF9yYXRpb19udW1lcmF0b3IgPCAwIHx8Ci0gICAgICBhc3BlY3RfcmF0aW9fZGVub21pbmF0b3IgPCAwKQotICAgIHJldHVybiBtYXRoOjpTaXplKCk7Ci0KLSAgZG91YmxlIGFzcGVjdF9yYXRpbyA9Ci0gICAgICBhc3BlY3RfcmF0aW9fbnVtZXJhdG9yIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihhc3BlY3RfcmF0aW9fZGVub21pbmF0b3IpOwotCi0gIHJldHVybiBtYXRoOjpTaXplKHJvdW5kKHZpc2libGVfc2l6ZS53aWR0aCgpICogYXNwZWN0X3JhdGlvKSwKLSAgICAgICAgICAgICAgICAgICAgdmlzaWJsZV9zaXplLmhlaWdodCgpKTsKLX0KLQotdm9pZCBSb3RhdGVQbGFuZUJ5UGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIHNyYywgdWludDhfdCogZGVzdCwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvdGF0aW9uLCAgLy8gQ2xvY2t3aXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcF92ZXJ0LCBib29sIGZsaXBfaG9yaXopIHsKLSAgRENIRUNLKCh3aWR0aCA+IDApICYmIChoZWlnaHQgPiAwKSAmJiAoKHdpZHRoICYgMSkgPT0gMCkgJiYKLSAgICAgICAgICgoaGVpZ2h0ICYgMSkgPT0gMCkgJiYgKHJvdGF0aW9uID49IDApICYmIChyb3RhdGlvbiA8IDM2MCkgJiYKLSAgICAgICAgIChyb3RhdGlvbiAlIDkwID09IDApKTsKLQotICAvLyBDb25zb2xpZGF0ZSBjYXNlcy4gT25seSAwIGFuZCA5MCBhcmUgbGVmdC4KLSAgaWYgKHJvdGF0aW9uID09IDE4MCB8fCByb3RhdGlvbiA9PSAyNzApIHsKLSAgICByb3RhdGlvbiAtPSAxODA7Ci0gICAgZmxpcF92ZXJ0ID0gIWZsaXBfdmVydDsKLSAgICBmbGlwX2hvcml6ID0gIWZsaXBfaG9yaXo7Ci0gIH0KLQotICBpbnQgbnVtX3Jvd3MgPSBoZWlnaHQ7Ci0gIGludCBudW1fY29scyA9IHdpZHRoOwotICBpbnQgc3JjX3N0cmlkZSA9IHdpZHRoOwotICAvLyBEdXJpbmcgcGl4ZWwgY29weWluZywgdGhlIGNvcnJlc3BvbmRpbmcgaW5jcmVtZW50YWwgb2YgZGVzdCBwb2ludGVyCi0gIC8vIHdoZW4gc3JjIHBvaW50ZXIgbW92ZXMgdG8gbmV4dCByb3cuCi0gIGludCBkZXN0X3Jvd19zdGVwID0gd2lkdGg7Ci0gIC8vIER1cmluZyBwaXhlbCBjb3B5aW5nLCB0aGUgY29ycmVzcG9uZGluZyBpbmNyZW1lbnRhbCBvZiBkZXN0IHBvaW50ZXIKLSAgLy8gd2hlbiBzcmMgcG9pbnRlciBtb3ZlcyB0byBuZXh0IGNvbHVtbi4KLSAgaW50IGRlc3RfY29sX3N0ZXAgPSAxOwotCi0gIGlmIChyb3RhdGlvbiA9PSAwKSB7Ci0gICAgaWYgKGZsaXBfaG9yaXopIHsKLSAgICAgIC8vIFVzZSBwaXhlbCBjb3B5aW5nLgotICAgICAgZGVzdF9jb2xfc3RlcCA9IC0xOwotICAgICAgaWYgKGZsaXBfdmVydCkgewotICAgICAgICAvLyBSb3RhdGlvbiAxODAuCi0gICAgICAgIGRlc3Rfcm93X3N0ZXAgPSAtd2lkdGg7Ci0gICAgICAgIGRlc3QgKz0gaGVpZ2h0ICogd2lkdGggLSAxOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdCArPSB3aWR0aCAtIDE7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChmbGlwX3ZlcnQpIHsKLSAgICAgICAgLy8gRmFzdCBjb3B5IGJ5IHJvd3MuCi0gICAgICAgIGRlc3QgKz0gd2lkdGggKiAoaGVpZ2h0IC0gMSk7Ci0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgKytyb3cpIHsKLSAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCB3aWR0aCk7Ci0gICAgICAgICAgc3JjICs9IHdpZHRoOwotICAgICAgICAgIGRlc3QgLT0gd2lkdGg7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHdpZHRoICogaGVpZ2h0KTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0gZWxzZSBpZiAocm90YXRpb24gPT0gOTApIHsKLSAgICBpbnQgb2Zmc2V0OwotICAgIGlmICh3aWR0aCA+IGhlaWdodCkgewotICAgICAgb2Zmc2V0ID0gKHdpZHRoIC0gaGVpZ2h0KSAvIDI7Ci0gICAgICBzcmMgKz0gb2Zmc2V0OwotICAgICAgbnVtX3Jvd3MgPSBudW1fY29scyA9IGhlaWdodDsKLSAgICB9IGVsc2UgewotICAgICAgb2Zmc2V0ID0gKGhlaWdodCAtIHdpZHRoKSAvIDI7Ci0gICAgICBzcmMgKz0gd2lkdGggKiBvZmZzZXQ7Ci0gICAgICBudW1fcm93cyA9IG51bV9jb2xzID0gd2lkdGg7Ci0gICAgfQotCi0gICAgZGVzdF9jb2xfc3RlcCA9IChmbGlwX3ZlcnQgPyAtd2lkdGggOiB3aWR0aCk7Ci0gICAgZGVzdF9yb3dfc3RlcCA9IChmbGlwX2hvcml6ID8gMSA6IC0xKTsKLSAgICBpZiAoZmxpcF9ob3JpeikgewotICAgICAgaWYgKGZsaXBfdmVydCkgewotICAgICAgICBkZXN0ICs9ICh3aWR0aCA+IGhlaWdodCA/IHdpZHRoICogKGhlaWdodCAtIDEpICsgb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogd2lkdGggKiAoaGVpZ2h0IC0gb2Zmc2V0IC0gMSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdCArPSAod2lkdGggPiBoZWlnaHQgPyBvZmZzZXQgOiB3aWR0aCAqIG9mZnNldCk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChmbGlwX3ZlcnQpIHsKLSAgICAgICAgZGVzdCArPSAod2lkdGggPiBoZWlnaHQgPyB3aWR0aCAqIGhlaWdodCAtIG9mZnNldCAtIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3aWR0aCAqIChoZWlnaHQgLSBvZmZzZXQpIC0gMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkZXN0ICs9Ci0gICAgICAgICAgICAod2lkdGggPiBoZWlnaHQgPyB3aWR0aCAtIG9mZnNldCAtIDEgOiB3aWR0aCAqIChvZmZzZXQgKyAxKSAtIDEpOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gIH0KLQotICAvLyBDb3B5IHBpeGVscy4KLSAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7ICsrcm93KSB7Ci0gICAgY29uc3QgdWludDhfdCogc3JjX3B0ciA9IHNyYzsKLSAgICB1aW50OF90KiBkZXN0X3B0ciA9IGRlc3Q7Ci0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbnVtX2NvbHM7ICsrY29sKSB7Ci0gICAgICAqZGVzdF9wdHIgPSAqc3JjX3B0cisrOwotICAgICAgZGVzdF9wdHIgKz0gZGVzdF9jb2xfc3RlcDsKLSAgICB9Ci0gICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgZGVzdCArPSBkZXN0X3Jvd19zdGVwOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5oIGIvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzJhZDlmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9CQVNFX1ZJREVPX1VUSUxfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0JBU0VfVklERU9fVVRJTF9IXwotCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFZpZGVvRnJhbWU7Ci0KLS8vIENvbXB1dGVzIHRoZSBzaXplIG9mIHx2aXNpYmxlX3NpemV8IGZvciBhIGdpdmVuIGFzcGVjdCByYXRpby4KLU1FRElBX0VYUE9SVCBtYXRoOjpTaXplIEdldE5hdHVyYWxTaXplKGNvbnN0IG1hdGg6OlNpemUmIHZpc2libGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhc3BlY3RfcmF0aW9fbnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFzcGVjdF9yYXRpb19kZW5vbWluYXRvcik7Ci0KLS8vIEZpbGxzIHxmcmFtZXwgY29udGFpbmluZyBZVVYgZGF0YSB0byB0aGUgZ2l2ZW4gY29sb3IgdmFsdWVzLgotTUVESUFfRVhQT1JUIHZvaWQgRmlsbFlVVihWaWRlb0ZyYW1lKiBmcmFtZSwgdWludDhfdCB5LCB1aW50OF90IHUsIHVpbnQ4X3Qgdik7Ci0KLS8vIEZpbGxzIHxmcmFtZXwgY29udGFpbmluZyBZVVZBIGRhdGEgd2l0aCB0aGUgZ2l2ZW4gY29sb3IgdmFsdWVzLgotTUVESUFfRVhQT1JUIHZvaWQgRmlsbFlVVkEoVmlkZW9GcmFtZSogZnJhbWUsIHVpbnQ4X3QgeSwgdWludDhfdCB1LCB1aW50OF90IHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGEpOwotCi0vLyBDcmVhdGVzIGEgYm9yZGVyIGluIHxmcmFtZXwgc3VjaCB0aGF0IGFsbCBwaXhlbHMgb3V0c2lkZSBvZgotLy8gfHZpZXdfYXJlYXwgYXJlIGJsYWNrLiBUaGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgfHZpZXdfYXJlYXwKLS8vIG11c3QgYmUgZXZlbiB0byBhbGlnbiBjb3JyZWN0bHkgd2l0aCB0aGUgY29sb3IgcGxhbmVzLgotLy8gT25seSBZVjEyIGZvcm1hdCB2aWRlbyBmcmFtZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCi1NRURJQV9FWFBPUlQgdm9pZCBMZXR0ZXJib3hZVVYoVmlkZW9GcmFtZSogZnJhbWUsIGNvbnN0IG1hdGg6OlJlY3QmIHZpZXdfYXJlYSk7Ci0KLS8vIFJvdGF0ZXMgfHNyY3wgcGxhbmUgYnkgfHJvdGF0aW9ufCBkZWdyZWUgd2l0aCBwb3NzaWJsZSBmbGlwcGluZyB2ZXJ0aWNhbGx5Ci0vLyBhbmQgaG9yaXpvbnRhbGx5LgotLy8gfHJvdGF0aW9ufCBpcyBsaW1pdGVkIHRvIHswLCA5MCwgMTgwLCAyNzB9LgotLy8gfHdpZHRofCBhbmQgfGhlaWdodHwgYXJlIGV4cGVjdGVkIHRvIGJlIGV2ZW4gbnVtYmVycy4KLS8vIEJvdGggfHNyY3wgYW5kIHxkZXN0fCBwbGFuZXMgYXJlIHBhY2tlZCBhbmQgaGF2ZSBzYW1lIHx3aWR0aHwgYW5kIHxoZWlnaHR8LgotLy8gV2hlbiB8d2lkdGh8ICE9IHxoZWlnaHR8IGFuZCByb3RhdGVkIGJ5IDkwLzI3MCwgb25seSB0aGUgbWF4aW11bSBzcXVhcmUKLS8vIHBvcnRpb24gbG9jYXRlZCBpbiB0aGUgY2VudGVyIGlzIHJvdGF0ZWQuIEZvciBleGFtcGxlLCBmb3Igd2lkdGg9NjQwIGFuZAotLy8gaGVpZ2h0PTQ4MCwgdGhlIHJvdGF0ZWQgYXJlYSBpcyA0ODB4NDgwIGxvY2F0ZWQgZnJvbSByb3cgMCB0aHJvdWdoIDQ3OSBhbmQKLS8vIGZyb20gY29sdW1uIDgwIHRocm91Z2ggNTU5LiBUaGUgbGVmdG1vc3QgYW5kIHJpZ2h0bW9zdCA4MCBjb2x1bW5zIGFyZQotLy8gaWdub3JlZCBmb3IgYm90aCB8c3JjfCBhbmQgfGRlc3R8LgotLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYmxhbmtpbmcgb3V0IHRoZSBtYXJnaW4gYXJlYS4KLU1FRElBX0VYUE9SVCB2b2lkIFJvdGF0ZVBsYW5lQnlQaXhlbHMoY29uc3QgdWludDhfdCogc3JjLCB1aW50OF90KiBkZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3RhdGlvbiwgIC8vIENsb2Nrd2lzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwX3ZlcnQsIGJvb2wgZmxpcF9ob3Jpeik7Ci0KLS8vIFJldHVybiB0aGUgbGFyZ2VzdCBjZW50ZXJlZCByZWN0YW5nbGUgd2l0aCB0aGUgc2FtZSBhc3BlY3QgcmF0aW8gb2YgfGNvbnRlbnR8Ci0vLyB0aGF0IGZpdHMgZW50aXJlbHkgaW5zaWRlIG9mIHxib3VuZHN8LiAgSWYgfGNvbnRlbnR8IGlzIGVtcHR5LCBpdHMgYXNwZWN0Ci0vLyByYXRpbyB3b3VsZCBiZSB1bmRlZmluZWQ7IGFuZCBpbiB0aGlzIGNhc2UgYW4gZW1wdHkgUmVjdCB3b3VsZCBiZSByZXR1cm5lZC4KLU1FRElBX0VYUE9SVCBtYXRoOjpSZWN0IENvbXB1dGVMZXR0ZXJib3hSZWdpb24oY29uc3QgbWF0aDo6UmVjdCYgYm91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBjb250ZW50KTsKLQotLy8gUmV0dXJuIGEgc2NhbGVkIHxzaXplfCB3aG9zZSBhcmVhIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB8dGFyZ2V0fCwgd2hlcmUKLS8vIG9uZSBvZiBpdHMgZGltZW5zaW9ucyBpcyBlcXVhbCB0byB8dGFyZ2V0fCdzLiAgVGhlIGFzcGVjdCByYXRpbyBvZiB8c2l6ZXwgaXMKLS8vIHByZXNlcnZlZCBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLiAgSWYgfHNpemV8IGlzIGVtcHR5LCB0aGUgcmVzdWx0IHdpbGwgYmUKLS8vIGVtcHR5LgotTUVESUFfRVhQT1JUIG1hdGg6OlNpemUgU2NhbGVTaXplVG9GaXRXaXRoaW5UYXJnZXQoY29uc3QgbWF0aDo6U2l6ZSYgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIHRhcmdldCk7Ci0KLS8vIFJldHVybiBhIHNjYWxlZCB8c2l6ZXwgd2hvc2UgYXJlYSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gfHRhcmdldHwsIHdoZXJlCi0vLyBvbmUgb2YgaXRzIGRpbWVuc2lvbnMgaXMgZXF1YWwgdG8gfHRhcmdldHwncy4gIFRoZSBhc3BlY3QgcmF0aW8gb2YgfHNpemV8IGlzCi0vLyBwcmVzZXJ2ZWQgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4gIElmIHxzaXplfCBpcyBlbXB0eSwgdGhlIHJlc3VsdCB3aWxsIGJlCi0vLyBlbXB0eS4KLU1FRElBX0VYUE9SVCBtYXRoOjpTaXplIFNjYWxlU2l6ZVRvRW5jb21wYXNzVGFyZ2V0KGNvbnN0IG1hdGg6OlNpemUmIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiB0YXJnZXQpOwotCi0vLyBSZXR1cm5zIHxzaXplfCB3aXRoIG9ubHkgb25lIG9mIGl0cyBkaW1lbnNpb25zIGluY3JlYXNlZCBzdWNoIHRoYXQgdGhlIHJlc3VsdAotLy8gbWF0Y2hlcyB0aGUgYXNwZWN0IHJhdGlvIG9mIHx0YXJnZXR8LiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQotLy8gU2NhbGVTaXplVG9FbmNvbXBhc3NUYXJnZXQoKSBpbiB0d28gd2F5czogMSkgVGhlIGdvYWwgaXMgdG8gbWF0Y2ggdGhlIGFzcGVjdAotLy8gcmF0aW8gb2YgfHRhcmdldHwgcmF0aGVyIHRoYW4gdGhhdCBvZiB8c2l6ZXwuICAyKSBPbmx5IG9uZSBvZiB0aGUgZGltZW5zaW9ucwotLy8gb2YgfHNpemV8IG1heSBjaGFuZ2UsIGFuZCBpdCBtYXkgb25seSBiZSBpbmNyZWFzZWQgKHBhZGRlZCkuICBJZiBlaXRoZXIKLS8vIHxzaXplfCBvciB8dGFyZ2V0fCBpcyBlbXB0eSwgdGhlIHJlc3VsdCB3aWxsIGJlIGVtcHR5LgotTUVESUFfRVhQT1JUIG1hdGg6OlNpemUgUGFkVG9NYXRjaEFzcGVjdFJhdGlvKGNvbnN0IG1hdGg6OlNpemUmIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgdGFyZ2V0KTsKLQotLy8gQ29weSBhbiBSR0IgYml0bWFwIGludG8gdGhlIHNwZWNpZmllZCB8cmVnaW9uX2luX2ZyYW1lfCBvZiBhIFlVViB2aWRlbyBmcmFtZS4KLS8vIEZpbGxzIHRoZSByZWdpb25zIG91dHNpZGUgfHJlZ2lvbl9pbl9mcmFtZXwgd2l0aCBibGFjay4KLU1FRElBX0VYUE9SVCB2b2lkIENvcHlSR0JUb1ZpZGVvRnJhbWUoY29uc3QgdWludDhfdCogc291cmNlLCBpbnQgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpSZWN0JiByZWdpb25faW5fZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvRnJhbWUqIGZyYW1lKTsKLQotLy8gQ29udmVydHMgYSBmcmFtZSB3aXRoIFlWMTJBIGZvcm1hdCBpbnRvIEk0MjAgYnkgZHJvcHBpbmcgYWxwaGEgY2hhbm5lbC4KLU1FRElBX0VYUE9SVCBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWU+IFdyYXBBc0k0MjBWaWRlb0ZyYW1lKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4mIGZyYW1lKTsKLQotLy8gQ29weSBJNDIwIHZpZGVvIGZyYW1lIHRvIG1hdGNoIHRoZSByZXF1aXJlZCBjb2RlZCBzaXplIGFuZCBwYWQgdGhlIHJlZ2lvbgotLy8gb3V0c2lkZSB0aGUgdmlzaWJsZSByZWN0IHJlcGVhdGVkbHkgd2l0aCB0aGUgbGFzdCBjb2x1bW4gLyByb3cgdXAgdG8gdGhlCi0vLyBjb2RlZCBzaXplIG9mIHxkc3RfZnJhbWV8LiBSZXR1cm4gZmFsc2Ugd2hlbiB8ZHN0X2ZyYW1lfCBpcyBlbXB0eSBvciB2aXNpYmxlCi0vLyByZWN0IGlzIGVtcHR5LgotLy8gT25lIGFwcGxpY2F0aW9uIGlzIGNvbnRlbnQgbWlycm9yaW5nIHVzaW5nIEhXIGVuY29kZXIuIEFzIHRoZSByZXF1aXJlZCBjb2RlZAotLy8gc2l6ZSBmb3IgZW5jb2RlciBpcyB1bmtub3duIGJlZm9yZSBjYXB0dXJpbmcsIG1lbW9yeSBjb3B5IGlzIG5lZWRlZCB3aGVuIHRoZQotLy8gY29kZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZW1lbnQuIFBhZGRpbmcgY2FuIGltcHJvdmUgdGhlIGVuY29kaW5nCi0vLyBlZmZpY2llbmN5IGluIHRoaXMgY2FzZSwgYXMgdGhlIGVuY29kZXIgd2lsbCBlbmNvZGUgdGhlIHdob2xlIGNvZGVkIHJlZ2lvbi4KLS8vIFBlcmZvcm1hbmNlLXdpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgZXhwZW5zaXZlIGFzIGl0IGRvZXMgbWVtb3J5IGNvcHkgb2YKLS8vIHRoZSB3aG9sZSB2aXNpYmxlIHJlY3QuCi0vLyBOb3RlOgotLy8gMS4gfHNyY19mcmFtZXwgYW5kIHxkc3RfZnJhbWV8IHNob3VsZCBoYXZlIHNhbWUgc2l6ZSBvZiB2aXNpYmxlIHJlY3QuCi0vLyAyLiBUaGUgdmlzaWJsZSByZWN0J3Mgb3JpZ2luIG9mIHxkc3RfZnJhbWV8IHNob3VsZCBiZSAoMCwwKS4KLS8vIDMuIHxkc3RfZnJhbWV8J3MgY29kZWQgc2l6ZSAoYm90aCB3aWR0aCBhbmQgaGVpZ2h0KSBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gb3IKLS8vIGVxdWFsIHRvIHRoZSB2aXNpYmxlIHNpemUsIHNpbmNlIHRoZSB2aXNpYmxlIHJlZ2lvbiBpbiBib3RoIGZyYW1lcyBzaG91bGQgYmUKLS8vIGlkZW50aWNhbC4KLU1FRElBX0VYUE9SVCBib29sIEk0MjBDb3B5V2l0aFBhZGRpbmcoY29uc3QgVmlkZW9GcmFtZSYgc3JjX2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0ZyYW1lKiBkc3RfZnJhbWUpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0JBU0VfVklERU9fVVRJTF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbF91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3V0aWxfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiYTM0OWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIEluaXRpYWxpemUgYSBwbGFuZSdzIHZpc2libGUgcmVjdCB3aXRoIHZhbHVlIGNpcmN1bGFybHkgZnJvbSAwIHRvIDI1NS4KLXZvaWQgRmlsbFBsYW5lV2l0aFBhdHRlcm4odWludDhfdCogZGF0YSwgaW50IHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgdmlzaWJsZV9zaXplKSB7Ci0gIERDSEVDSyhkYXRhICYmIHZpc2libGVfc2l6ZS53aWR0aCgpIDw9IHN0cmlkZSk7Ci0KLSAgdWludDMyX3QgdmFsID0gMDsKLSAgdWludDhfdCogc3JjID0gZGF0YTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCB2aXNpYmxlX3NpemUuaGVpZ2h0KCk7ICsraSwgc3JjICs9IHN0cmlkZSkgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmlzaWJsZV9zaXplLndpZHRoKCk7ICsraiwgKyt2YWwpIHNyY1tqXSA9IHZhbCAmIDB4ZmY7Ci0gIH0KLX0KLQotLy8gQ3JlYXRlIGEgVmlkZW9GcmFtZSBhbmQgaW5pdGlhbGl6ZSB0aGUgdmlzaWJsZSByZWN0IHVzaW5nCi0vLyB8RmlsbFBsYW5lV2l0aFBhdHRlcm4oKXwuIEZvciB0ZXN0aW5nIHB1cnBvc2UsIHRoZSBWaWRlb0ZyYW1lIHNob3VsZCBiZQotLy8gZmlsbGVkIHdpdGggdmFyeWluZyB2YWx1ZXMsIHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tCi0vLyB8VmlkZW9GcmFtZTo6Q3JlYXRlQ29sb3JGcmFtZSgpfCB3aGVyZSB0aGUgZW50aXJlIFZpZGVvRnJhbWUgaXMgZmlsbGVkCi0vLyB3aXRoIGEgZ2l2ZW4gY29sb3IuCi1zY29wZWRfcmVmcHRyPG1lZGlhOjpWaWRlb0ZyYW1lPiBDcmVhdGVGcmFtZVdpdGhQYXR0ZXJuRmlsbGVkKAotICAgIG1lZGlhOjpWaWRlb1BpeGVsRm9ybWF0IGZvcm1hdCwgY29uc3QgbWF0aDo6U2l6ZSYgY29kZWRfc2l6ZSwKLSAgICBjb25zdCBtYXRoOjpSZWN0JiB2aXNpYmxlX3JlY3QsIGNvbnN0IG1hdGg6OlNpemUmIG5hdHVyYWxfc2l6ZSwKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKSB7Ci0gIHNjb3BlZF9yZWZwdHI8bWVkaWE6OlZpZGVvRnJhbWU+IGZyYW1lKG1lZGlhOjpWaWRlb0ZyYW1lOjpDcmVhdGVGcmFtZSgKLSAgICAgIGZvcm1hdCwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsIHRpbWVzdGFtcCkpOwotCi0gIEZpbGxQbGFuZVdpdGhQYXR0ZXJuKGZyYW1lLT5kYXRhKG1lZGlhOjpWaWRlb0ZyYW1lOjprWVBsYW5lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnN0cmlkZShtZWRpYTo6VmlkZW9GcmFtZTo6a1lQbGFuZSksCi0gICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aXNpYmxlX3JlY3QoKS5zaXplKCkpOwotICBGaWxsUGxhbmVXaXRoUGF0dGVybigKLSAgICAgIGZyYW1lLT5kYXRhKG1lZGlhOjpWaWRlb0ZyYW1lOjprVVBsYW5lKSwKLSAgICAgIGZyYW1lLT5zdHJpZGUobWVkaWE6OlZpZGVvRnJhbWU6OmtVUGxhbmUpLAotICAgICAgbWVkaWE6OlZpZGVvRnJhbWU6OlBsYW5lU2l6ZShmb3JtYXQsIG1lZGlhOjpWaWRlb0ZyYW1lOjprVVBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+dmlzaWJsZV9yZWN0KCkuc2l6ZSgpKSk7Ci0gIEZpbGxQbGFuZVdpdGhQYXR0ZXJuKAotICAgICAgZnJhbWUtPmRhdGEobWVkaWE6OlZpZGVvRnJhbWU6OmtWUGxhbmUpLAotICAgICAgZnJhbWUtPnN0cmlkZShtZWRpYTo6VmlkZW9GcmFtZTo6a1ZQbGFuZSksCi0gICAgICBtZWRpYTo6VmlkZW9GcmFtZTo6UGxhbmVTaXplKGZvcm1hdCwgbWVkaWE6OlZpZGVvRnJhbWU6OmtWUGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT52aXNpYmxlX3JlY3QoKS5zaXplKCkpKTsKLSAgcmV0dXJuIGZyYW1lOwotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCB0byB2ZXJpZnkgdGhlIGRhdGEgaW4gdGhlIGNvZGVkIHJlZ2lvbiBhZnRlciBjb3B5aW5nIHRoZQotLy8gdmlzaWJsZSByZWdpb24gYW5kIHBhZGRpbmcgdGhlIHJlbWFpbmluZyBhcmVhLgotYm9vbCBWZXJpZnlQbGFuQ29weVdpdGhQYWRkaW5nKGNvbnN0IHVpbnQ4X3QqIHNyYywgc2l6ZV90IHNyY19zdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2l6ZSBvZiB2aXNpYmxlIHJlZ2lvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRoOjpTaXplJiBzcmNfc2l6ZSwgY29uc3QgdWludDhfdCogZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkc3Rfc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvZGVkIHNpemUgb2YgfGRzdHwuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgZHN0X3NpemUpIHsKLSAgaWYgKCFzcmMgfHwgIWRzdCkgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IHNpemVfdCBzcmNfd2lkdGggPSBzcmNfc2l6ZS53aWR0aCgpOwotICBjb25zdCBzaXplX3Qgc3JjX2hlaWdodCA9IHNyY19zaXplLmhlaWdodCgpOwotICBjb25zdCBzaXplX3QgZHN0X3dpZHRoID0gZHN0X3NpemUud2lkdGgoKTsKLSAgY29uc3Qgc2l6ZV90IGRzdF9oZWlnaHQgPSBkc3Rfc2l6ZS5oZWlnaHQoKTsKLSAgaWYgKHNyY193aWR0aCA+IGRzdF93aWR0aCB8fCBzcmNfd2lkdGggPiBzcmNfc3RyaWRlIHx8Ci0gICAgICBzcmNfaGVpZ2h0ID4gZHN0X2hlaWdodCB8fCBzcmNfc2l6ZS5Jc0VtcHR5KCkgfHwgZHN0X3NpemUuSXNFbXB0eSgpKQotICAgIHJldHVybiBmYWxzZTsKLQotICBjb25zdCB1aW50OF90ICpzcmNfcHRyID0gc3JjLCAqZHN0X3B0ciA9IGRzdDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcmNfaGVpZ2h0OwotICAgICAgICsraSwgc3JjX3B0ciArPSBzcmNfc3RyaWRlLCBkc3RfcHRyICs9IGRzdF9zdHJpZGUpIHsKLSAgICBpZiAobWVtY21wKHNyY19wdHIsIGRzdF9wdHIsIHNyY193aWR0aCkpIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBqID0gc3JjX3dpZHRoOyBqIDwgZHN0X3dpZHRoOyArK2opIHsKLSAgICAgIGlmIChzcmNfcHRyW3NyY193aWR0aCAtIDFdICE9IGRzdF9wdHJbal0pIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgaWYgKHNyY19oZWlnaHQgPCBkc3RfaGVpZ2h0KSB7Ci0gICAgc3JjX3B0ciA9IGRzdCArIChzcmNfaGVpZ2h0IC0gMSkgKiBkc3Rfc3RyaWRlOwotICAgIGlmIChtZW1jbXAoc3JjX3B0ciwgZHN0X3B0ciwgZHN0X3dpZHRoKSkgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZlcmlmeUNvcHlXaXRoUGFkZGluZyhjb25zdCBtZWRpYTo6VmlkZW9GcmFtZSYgc3JjX2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVkaWE6OlZpZGVvRnJhbWUmIGRzdF9mcmFtZSkgewotICBpZiAoIXNyY19mcmFtZS5Jc01hcHBhYmxlKCkgfHwgIWRzdF9mcmFtZS5Jc01hcHBhYmxlKCkgfHwKLSAgICAgIHNyY19mcmFtZS52aXNpYmxlX3JlY3QoKS5zaXplKCkgIT0gZHN0X2ZyYW1lLnZpc2libGVfcmVjdCgpLnNpemUoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKCFWZXJpZnlQbGFuQ29weVdpdGhQYWRkaW5nKAotICAgICAgICAgIHNyY19mcmFtZS52aXNpYmxlX2RhdGEobWVkaWE6OlZpZGVvRnJhbWU6OmtZUGxhbmUpLAotICAgICAgICAgIHNyY19mcmFtZS5zdHJpZGUobWVkaWE6OlZpZGVvRnJhbWU6OmtZUGxhbmUpLAotICAgICAgICAgIHNyY19mcmFtZS52aXNpYmxlX3JlY3QoKS5zaXplKCksCi0gICAgICAgICAgZHN0X2ZyYW1lLmRhdGEobWVkaWE6OlZpZGVvRnJhbWU6OmtZUGxhbmUpLAotICAgICAgICAgIGRzdF9mcmFtZS5zdHJpZGUobWVkaWE6OlZpZGVvRnJhbWU6OmtZUGxhbmUpLCBkc3RfZnJhbWUuY29kZWRfc2l6ZSgpKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmICghVmVyaWZ5UGxhbkNvcHlXaXRoUGFkZGluZygKLSAgICAgICAgICBzcmNfZnJhbWUudmlzaWJsZV9kYXRhKG1lZGlhOjpWaWRlb0ZyYW1lOjprVVBsYW5lKSwKLSAgICAgICAgICBzcmNfZnJhbWUuc3RyaWRlKG1lZGlhOjpWaWRlb0ZyYW1lOjprVVBsYW5lKSwKLSAgICAgICAgICBtZWRpYTo6VmlkZW9GcmFtZTo6UGxhbmVTaXplKG1lZGlhOjpQSVhFTF9GT1JNQVRfSTQyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpWaWRlb0ZyYW1lOjprVVBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2ZyYW1lLnZpc2libGVfcmVjdCgpLnNpemUoKSksCi0gICAgICAgICAgZHN0X2ZyYW1lLmRhdGEobWVkaWE6OlZpZGVvRnJhbWU6OmtVUGxhbmUpLAotICAgICAgICAgIGRzdF9mcmFtZS5zdHJpZGUobWVkaWE6OlZpZGVvRnJhbWU6OmtVUGxhbmUpLAotICAgICAgICAgIG1lZGlhOjpWaWRlb0ZyYW1lOjpQbGFuZVNpemUobWVkaWE6OlBJWEVMX0ZPUk1BVF9JNDIwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OlZpZGVvRnJhbWU6OmtVUGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZnJhbWUuY29kZWRfc2l6ZSgpKSkpCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAoIVZlcmlmeVBsYW5Db3B5V2l0aFBhZGRpbmcoCi0gICAgICAgICAgc3JjX2ZyYW1lLnZpc2libGVfZGF0YShtZWRpYTo6VmlkZW9GcmFtZTo6a1ZQbGFuZSksCi0gICAgICAgICAgc3JjX2ZyYW1lLnN0cmlkZShtZWRpYTo6VmlkZW9GcmFtZTo6a1ZQbGFuZSksCi0gICAgICAgICAgbWVkaWE6OlZpZGVvRnJhbWU6OlBsYW5lU2l6ZShtZWRpYTo6UElYRUxfRk9STUFUX0k0MjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTo6VmlkZW9GcmFtZTo6a1ZQbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19mcmFtZS52aXNpYmxlX3JlY3QoKS5zaXplKCkpLAotICAgICAgICAgIGRzdF9mcmFtZS5kYXRhKG1lZGlhOjpWaWRlb0ZyYW1lOjprVlBsYW5lKSwKLSAgICAgICAgICBkc3RfZnJhbWUuc3RyaWRlKG1lZGlhOjpWaWRlb0ZyYW1lOjprVlBsYW5lKSwKLSAgICAgICAgICBtZWRpYTo6VmlkZW9GcmFtZTo6UGxhbmVTaXplKG1lZGlhOjpQSVhFTF9GT1JNQVRfSTQyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpWaWRlb0ZyYW1lOjprVlBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2ZyYW1lLmNvZGVkX3NpemUoKSkpKQotICAgIHJldHVybiBmYWxzZTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgVmlkZW9VdGlsVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIFZpZGVvVXRpbFRlc3QoKSA6IGhlaWdodF8oMCksIHlfc3RyaWRlXygwKSwgdV9zdHJpZGVfKDApLCB2X3N0cmlkZV8oMCkge30KLQotICB+VmlkZW9VdGlsVGVzdCgpIG92ZXJyaWRlIHt9Ci0KLSAgdm9pZCBDcmVhdGVTb3VyY2VGcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5X3N0cmlkZSwgaW50IHVfc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2X3N0cmlkZSkgewotICAgIEVYUEVDVF9HRSh5X3N0cmlkZSwgd2lkdGgpOwotICAgIEVYUEVDVF9HRSh1X3N0cmlkZSwgd2lkdGggLyAyKTsKLSAgICBFWFBFQ1RfR0Uodl9zdHJpZGUsIHdpZHRoIC8gMik7Ci0KLSAgICBoZWlnaHRfID0gaGVpZ2h0OwotICAgIHlfc3RyaWRlXyA9IHlfc3RyaWRlOwotICAgIHVfc3RyaWRlXyA9IHVfc3RyaWRlOwotICAgIHZfc3RyaWRlXyA9IHZfc3RyaWRlOwotCi0gICAgeV9wbGFuZV8ucmVzZXQobmV3IHVpbnQ4X3RbeV9zdHJpZGUgKiBoZWlnaHRdKTsKLSAgICB1X3BsYW5lXy5yZXNldChuZXcgdWludDhfdFt1X3N0cmlkZSAqIGhlaWdodCAvIDJdKTsKLSAgICB2X3BsYW5lXy5yZXNldChuZXcgdWludDhfdFt2X3N0cmlkZSAqIGhlaWdodCAvIDJdKTsKLSAgfQotCi0gIHZvaWQgQ3JlYXRlRGVzdGluYXRpb25GcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBtYXRoOjpTaXplIHNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgZGVzdGluYXRpb25fZnJhbWVfID0gVmlkZW9GcmFtZTo6Q3JlYXRlRnJhbWUoCi0gICAgICAgIFBJWEVMX0ZPUk1BVF9ZVjEyLCBzaXplLCBtYXRoOjpSZWN0KHNpemUpLCBzaXplLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHlfcGxhbmVfOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB1X3BsYW5lXzsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gdl9wbGFuZV87Ci0KLSAgaW50IGhlaWdodF87Ci0gIGludCB5X3N0cmlkZV87Ci0gIGludCB1X3N0cmlkZV87Ci0gIGludCB2X3N0cmlkZV87Ci0KLSAgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBkZXN0aW5hdGlvbl9mcmFtZV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZpZGVvVXRpbFRlc3QpOwotfTsKLQotVEVTVF9GKFZpZGVvVXRpbFRlc3QsIEdldE5hdHVyYWxTaXplKSB7Ci0gIG1hdGg6OlNpemUgdmlzaWJsZV9zaXplKDMyMCwgMjQwKTsKLQotICAvLyBUZXN0IDAgc2l6ZXMuCi0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDAsIDApLCBHZXROYXR1cmFsU2l6ZShtYXRoOjpTaXplKDAsIDApLCAxLCAxKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDAsIDEpLCBHZXROYXR1cmFsU2l6ZShtYXRoOjpTaXplKDAsIDEpLCAxLCAxKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDEsIDApLCBHZXROYXR1cmFsU2l6ZShtYXRoOjpTaXplKDEsIDApLCAxLCAxKSk7Ci0KLSAgLy8gVGVzdCBhYm5vcm1hbCByYXRpb3MuCi0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDAsIDApLCBHZXROYXR1cmFsU2l6ZSh2aXNpYmxlX3NpemUsIDAsIDApKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlNpemUoMCwgMCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMSwgMCkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSgwLCAwKSwgR2V0TmF0dXJhbFNpemUodmlzaWJsZV9zaXplLCAxLCAtMSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSgwLCAwKSwgR2V0TmF0dXJhbFNpemUodmlzaWJsZV9zaXplLCAtMSwgMSkpOwotCi0gIC8vIFRlc3Qgbm9ybWFsIHNpemVzIGFuZCByYXRpb3MuCi0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDAsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMCwgMSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSgzMjAsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMSwgMSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg2NDAsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMiwgMSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSgxNjAsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMSwgMikpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg0MjcsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgNCwgMykpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSgyNDAsIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMywgNCkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg1NjksIDI0MCksIEdldE5hdHVyYWxTaXplKHZpc2libGVfc2l6ZSwgMTYsIDkpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlNpemUoMTgwLCAyNDApLCBHZXROYXR1cmFsU2l6ZSh2aXNpYmxlX3NpemUsIDksIDE2KSk7Ci0KLSAgLy8gVGVzdCBzb21lIHJhbmRvbSByYXRpb3MuCi0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDQ5NSwgMjQwKSwgR2V0TmF0dXJhbFNpemUodmlzaWJsZV9zaXplLCAxNywgMTEpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlNpemUoMjA3LCAyNDApLCBHZXROYXR1cmFsU2l6ZSh2aXNpYmxlX3NpemUsIDExLCAxNykpOwotfQotCi1uYW1lc3BhY2UgewotCi11aW50OF90IHNyYzZ4NFtdID0gezAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksICAxMCwgMTEsCi0gICAgICAgICAgICAgICAgICAgIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjN9OwotCi0vLyBUYXJnZXQgaW1hZ2VzLCBuYW1lIHBhdHRlcm4gdGFyZ2V0X3JvdGF0aW9uX2ZsaXBWX2ZsaXBILgotdWludDhfdCogdGFyZ2V0Nng0XzBfbl9uID0gc3JjNng0OwotCi11aW50OF90IHRhcmdldDZ4NF8wX25feVtdID0gezUsICA0LCAgMywgIDIsICAxLCAgMCwgIDExLCAxMCwgOSwgIDgsICA3LCAgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcsIDE2LCAxNSwgMTQsIDEzLCAxMiwgMjMsIDIyLCAyMSwgMjAsIDE5LCAxOH07Ci0KLXVpbnQ4X3QgdGFyZ2V0Nng0XzBfeV9uW10gPSB7MTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiwgIDcsICA4LCAgOSwgIDEwLCAxMSwgMCwgIDEsICAyLCAgMywgIDQsICA1fTsKLQotdWludDhfdCB0YXJnZXQ2eDRfMF95X3lbXSA9IHsyMywgMjIsIDIxLCAyMCwgMTksIDE4LCAxNywgMTYsIDE1LCAxNCwgMTMsIDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSwgMTAsIDksICA4LCAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgIDB9OwotCi11aW50OF90IHRhcmdldDZ4NF85MF9uX25bXSA9IHsyNTUsIDE5LCAxMywgNywgMSwgMjU1LCAyNTUsIDIwLCAxNCwgOCwgIDIsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMjEsIDE1LCA5LCAzLCAyNTUsIDI1NSwgMjIsIDE2LCAxMCwgNCwgMjU1fTsKLQotdWludDhfdCB0YXJnZXQ2eDRfOTBfbl95W10gPSB7MjU1LCAxLCA3LCAxMywgMTksIDI1NSwgMjU1LCAyLCA4LCAgMTQsIDIwLCAyNTUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsIDMsIDksIDE1LCAyMSwgMjU1LCAyNTUsIDQsIDEwLCAxNiwgMjIsIDI1NX07Ci0KLXVpbnQ4X3QgdGFyZ2V0Nng0XzkwX3lfbltdID0gezI1NSwgMjIsIDE2LCAxMCwgNCwgMjU1LCAyNTUsIDIxLCAxNSwgOSwgMywgMjU1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU1LCAyMCwgMTQsIDgsICAyLCAyNTUsIDI1NSwgMTksIDEzLCA3LCAxLCAyNTV9OwotCi11aW50OF90IHRhcmdldDZ4NF85MF95X3lbXSA9IHsyNTUsIDQsIDEwLCAxNiwgMjIsIDI1NSwgMjU1LCAzLCA5LCAxNSwgMjEsIDI1NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1NSwgMiwgOCwgIDE0LCAyMCwgMjU1LCAyNTUsIDEsIDcsIDEzLCAxOSwgMjU1fTsKLQotdWludDhfdCogdGFyZ2V0Nng0XzE4MF9uX24gPSB0YXJnZXQ2eDRfMF95X3k7Ci11aW50OF90KiB0YXJnZXQ2eDRfMTgwX25feSA9IHRhcmdldDZ4NF8wX3lfbjsKLXVpbnQ4X3QqIHRhcmdldDZ4NF8xODBfeV9uID0gdGFyZ2V0Nng0XzBfbl95OwotdWludDhfdCogdGFyZ2V0Nng0XzE4MF95X3kgPSB0YXJnZXQ2eDRfMF9uX247Ci0KLXVpbnQ4X3QqIHRhcmdldDZ4NF8yNzBfbl9uID0gdGFyZ2V0Nng0XzkwX3lfeTsKLXVpbnQ4X3QqIHRhcmdldDZ4NF8yNzBfbl95ID0gdGFyZ2V0Nng0XzkwX3lfbjsKLXVpbnQ4X3QqIHRhcmdldDZ4NF8yNzBfeV9uID0gdGFyZ2V0Nng0XzkwX25feTsKLXVpbnQ4X3QqIHRhcmdldDZ4NF8yNzBfeV95ID0gdGFyZ2V0Nng0XzkwX25fbjsKLQotdWludDhfdCBzcmM0eDZbXSA9IHswLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywgIDgsICA5LCAgMTAsIDExLAotICAgICAgICAgICAgICAgICAgICAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzfTsKLQotdWludDhfdCogdGFyZ2V0NHg2XzBfbl9uID0gc3JjNHg2OwotCi11aW50OF90IHRhcmdldDR4Nl8wX25feVtdID0gezMsICAyLCAgMSwgIDAsICA3LCAgNiwgIDUsICA0LCAgMTEsIDEwLCA5LCAgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUsIDE0LCAxMywgMTIsIDE5LCAxOCwgMTcsIDE2LCAyMywgMjIsIDIxLCAyMH07Ci0KLXVpbnQ4X3QgdGFyZ2V0NHg2XzBfeV9uW10gPSB7MjAsIDIxLCAyMiwgMjMsIDE2LCAxNywgMTgsIDE5LCAxMiwgMTMsIDE0LCAxNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgIDksICAxMCwgMTEsIDQsICA1LCAgNiwgIDcsICAwLCAgMSwgIDIsICAzfTsKLQotdWludDhfdCB0YXJnZXQ0eDZfMF95X3lbXSA9IHsyMywgMjIsIDIxLCAyMCwgMTksIDE4LCAxNywgMTYsIDE1LCAxNCwgMTMsIDEyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSwgMTAsIDksICA4LCAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwgIDB9OwotCi11aW50OF90IHRhcmdldDR4Nl85MF9uX25bXSA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDE2LCAgMTIsICA4LCAgIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNywgIDEzLCAgOSwgICA1LCAgIDE4LCAgMTQsICAxMCwgIDYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOSwgIDE1LCAgMTEsICA3LCAgIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0KLXVpbnQ4X3QgdGFyZ2V0NHg2XzkwX25feVtdID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgNCwgICA4LCAgIDEyLCAgMTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LCAgIDksICAgMTMsICAxNywgIDYsICAgMTAsICAxNCwgIDE4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgICAxMSwgIDE1LCAgMTksICAyNTUsIDI1NSwgMjU1LCAyNTV9OwotCi11aW50OF90IHRhcmdldDR4Nl85MF95X25bXSA9IHsyNTUsIDI1NSwgMjU1LCAyNTUsIDE5LCAgMTUsICAxMSwgIDcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCwgIDE0LCAgMTAsICA2LCAgIDE3LCAgMTMsICA5LCAgIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgIDEyLCAgOCwgICA0LCAgIDI1NSwgMjU1LCAyNTUsIDI1NX07Ci0KLXVpbnQ4X3QgdGFyZ2V0NHg2XzkwX3lfeVtdID0gezI1NSwgMjU1LCAyNTUsIDI1NSwgNywgICAxMSwgIDE1LCAgMTksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAgIDEwLCAgMTQsICAxOCwgIDUsICAgOSwgICAxMywgIDE3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgICA4LCAgIDEyLCAgMTYsICAyNTUsIDI1NSwgMjU1LCAyNTV9OwotCi11aW50OF90KiB0YXJnZXQ0eDZfMTgwX25fbiA9IHRhcmdldDR4Nl8wX3lfeTsKLXVpbnQ4X3QqIHRhcmdldDR4Nl8xODBfbl95ID0gdGFyZ2V0NHg2XzBfeV9uOwotdWludDhfdCogdGFyZ2V0NHg2XzE4MF95X24gPSB0YXJnZXQ0eDZfMF9uX3k7Ci11aW50OF90KiB0YXJnZXQ0eDZfMTgwX3lfeSA9IHRhcmdldDR4Nl8wX25fbjsKLQotdWludDhfdCogdGFyZ2V0NHg2XzI3MF9uX24gPSB0YXJnZXQ0eDZfOTBfeV95OwotdWludDhfdCogdGFyZ2V0NHg2XzI3MF9uX3kgPSB0YXJnZXQ0eDZfOTBfeV9uOwotdWludDhfdCogdGFyZ2V0NHg2XzI3MF95X24gPSB0YXJnZXQ0eDZfOTBfbl95OwotdWludDhfdCogdGFyZ2V0NHg2XzI3MF95X3kgPSB0YXJnZXQ0eDZfOTBfbl9uOwotCi1zdHJ1Y3QgVmlkZW9Sb3RhdGlvblRlc3REYXRhIHsKLSAgdWludDhfdCogc3JjOwotICB1aW50OF90KiB0YXJnZXQ7Ci0gIGludCB3aWR0aDsKLSAgaW50IGhlaWdodDsKLSAgaW50IHJvdGF0aW9uOwotICBib29sIGZsaXBfdmVydDsKLSAgYm9vbCBmbGlwX2hvcml6OwotfTsKLQotY29uc3QgVmlkZW9Sb3RhdGlvblRlc3REYXRhIGtWaWRlb1JvdGF0aW9uVGVzdERhdGFbXSA9IHsKLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfMF9uX24sIDYsIDQsIDAsIGZhbHNlLCBmYWxzZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzBfbl95LCA2LCA0LCAwLCBmYWxzZSwgdHJ1ZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzBfeV9uLCA2LCA0LCAwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzBfeV95LCA2LCA0LCAwLCB0cnVlLCB0cnVlfSwKLQotICAgIHtzcmM2eDQsIHRhcmdldDZ4NF85MF9uX24sIDYsIDQsIDkwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM2eDQsIHRhcmdldDZ4NF85MF9uX3ksIDYsIDQsIDkwLCBmYWxzZSwgdHJ1ZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzkwX3lfbiwgNiwgNCwgOTAsIHRydWUsIGZhbHNlfSwKLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfOTBfeV95LCA2LCA0LCA5MCwgdHJ1ZSwgdHJ1ZX0sCi0KLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfMTgwX25fbiwgNiwgNCwgMTgwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM2eDQsIHRhcmdldDZ4NF8xODBfbl95LCA2LCA0LCAxODAsIGZhbHNlLCB0cnVlfSwKLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfMTgwX3lfbiwgNiwgNCwgMTgwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzE4MF95X3ksIDYsIDQsIDE4MCwgdHJ1ZSwgdHJ1ZX0sCi0KLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfMjcwX25fbiwgNiwgNCwgMjcwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM2eDQsIHRhcmdldDZ4NF8yNzBfbl95LCA2LCA0LCAyNzAsIGZhbHNlLCB0cnVlfSwKLSAgICB7c3JjNng0LCB0YXJnZXQ2eDRfMjcwX3lfbiwgNiwgNCwgMjcwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzZ4NCwgdGFyZ2V0Nng0XzI3MF95X3ksIDYsIDQsIDI3MCwgdHJ1ZSwgdHJ1ZX0sCi0KLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfMF9uX24sIDQsIDYsIDAsIGZhbHNlLCBmYWxzZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzBfbl95LCA0LCA2LCAwLCBmYWxzZSwgdHJ1ZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzBfeV9uLCA0LCA2LCAwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzBfeV95LCA0LCA2LCAwLCB0cnVlLCB0cnVlfSwKLQotICAgIHtzcmM0eDYsIHRhcmdldDR4Nl85MF9uX24sIDQsIDYsIDkwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM0eDYsIHRhcmdldDR4Nl85MF9uX3ksIDQsIDYsIDkwLCBmYWxzZSwgdHJ1ZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzkwX3lfbiwgNCwgNiwgOTAsIHRydWUsIGZhbHNlfSwKLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfOTBfeV95LCA0LCA2LCA5MCwgdHJ1ZSwgdHJ1ZX0sCi0KLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfMTgwX25fbiwgNCwgNiwgMTgwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM0eDYsIHRhcmdldDR4Nl8xODBfbl95LCA0LCA2LCAxODAsIGZhbHNlLCB0cnVlfSwKLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfMTgwX3lfbiwgNCwgNiwgMTgwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzE4MF95X3ksIDQsIDYsIDE4MCwgdHJ1ZSwgdHJ1ZX0sCi0KLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfMjcwX25fbiwgNCwgNiwgMjcwLCBmYWxzZSwgZmFsc2V9LAotICAgIHtzcmM0eDYsIHRhcmdldDR4Nl8yNzBfbl95LCA0LCA2LCAyNzAsIGZhbHNlLCB0cnVlfSwKLSAgICB7c3JjNHg2LCB0YXJnZXQ0eDZfMjcwX3lfbiwgNCwgNiwgMjcwLCB0cnVlLCBmYWxzZX0sCi0gICAge3NyYzR4NiwgdGFyZ2V0NHg2XzI3MF95X3ksIDQsIDYsIDI3MCwgdHJ1ZSwgdHJ1ZX19OwotCi19ICAvLyBuYW1lc3BhY2UKLQotY2xhc3MgVmlkZW9VdGlsUm90YXRpb25UZXN0Ci0gICAgOiBwdWJsaWMgdGVzdGluZzo6VGVzdFdpdGhQYXJhbTxWaWRlb1JvdGF0aW9uVGVzdERhdGE+IHsKLSBwdWJsaWM6Ci0gIFZpZGVvVXRpbFJvdGF0aW9uVGVzdCgpIHsKLSAgICBkZXN0Xy5yZXNldChuZXcgdWludDhfdFtHZXRQYXJhbSgpLndpZHRoICogR2V0UGFyYW0oKS5oZWlnaHRdKTsKLSAgfQotCi0gIHZpcnR1YWwgflZpZGVvVXRpbFJvdGF0aW9uVGVzdCgpIHt9Ci0KLSAgdWludDhfdCogZGVzdF9wbGFuZSgpIHsgcmV0dXJuIGRlc3RfLmdldCgpOyB9Ci0KLSBwcml2YXRlOgotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkZXN0XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmlkZW9VdGlsUm90YXRpb25UZXN0KTsKLX07Ci0KLVRFU1RfUChWaWRlb1V0aWxSb3RhdGlvblRlc3QsIFJvdGF0ZSkgewotICBpbnQgcm90YXRpb24gPSBHZXRQYXJhbSgpLnJvdGF0aW9uOwotICBFWFBFQ1RfVFJVRSgocm90YXRpb24gPj0gMCkgJiYgKHJvdGF0aW9uIDwgMzYwKSAmJiAocm90YXRpb24gJSA5MCA9PSAwKSk7Ci0KLSAgaW50IHNpemUgPSBHZXRQYXJhbSgpLndpZHRoICogR2V0UGFyYW0oKS5oZWlnaHQ7Ci0gIHVpbnQ4X3QqIGRlc3QgPSBkZXN0X3BsYW5lKCk7Ci0gIG1lbXNldChkZXN0LCAyNTUsIHNpemUpOwotCi0gIFJvdGF0ZVBsYW5lQnlQaXhlbHMoR2V0UGFyYW0oKS5zcmMsIGRlc3QsIEdldFBhcmFtKCkud2lkdGgsIEdldFBhcmFtKCkuaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uLCBHZXRQYXJhbSgpLmZsaXBfdmVydCwgR2V0UGFyYW0oKS5mbGlwX2hvcml6KTsKLQotICBFWFBFQ1RfRVEobWVtY21wKGRlc3QsIEdldFBhcmFtKCkudGFyZ2V0LCBzaXplKSwgMCk7Ci19Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKCwgVmlkZW9VdGlsUm90YXRpb25UZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGluZzo6VmFsdWVzSW4oa1ZpZGVvUm90YXRpb25UZXN0RGF0YSkpOwotCi0vLyBUZXN0cyB0aGUgQ29tcHV0ZUxldHRlcmJveFJlZ2lvbiBmdW5jdGlvbi4gIEFsc28sIGJlY2F1c2Ugb2Ygc2hhcmVkIGNvZGUKLS8vIGludGVybmFsbHksIHRoaXMgYWxzbyB0ZXN0cyBTY2FsZVNpemVUb0ZpdFdpdGhpblRhcmdldCgpLgotVEVTVF9GKFZpZGVvVXRpbFRlc3QsIENvbXB1dGVMZXR0ZXJib3hSZWdpb24pIHsKLSAgRVhQRUNUX0VRKG1hdGg6OlJlY3QoMTY2LCAwLCA2NjcsIDUwMCksCi0gICAgICAgICAgICBDb21wdXRlTGV0dGVyYm94UmVnaW9uKG1hdGg6OlJlY3QoMCwgMCwgMTAwMCwgNTAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aDo6U2l6ZSg2NDAsIDQ4MCkpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlJlY3QoMCwgMzEyLCA1MDAsIDM3NSksCi0gICAgICAgICAgICBDb21wdXRlTGV0dGVyYm94UmVnaW9uKG1hdGg6OlJlY3QoMCwgMCwgNTAwLCAxMDAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aDo6U2l6ZSg2NDAsIDQ4MCkpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlJlY3QoNTUsIDAsIDg4OSwgNTAwKSwKLSAgICAgICAgICAgIENvbXB1dGVMZXR0ZXJib3hSZWdpb24obWF0aDo6UmVjdCgwLCAwLCAxMDAwLCA1MDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoOjpTaXplKDE5MjAsIDEwODApKSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAgIG1hdGg6OlJlY3QoMCwgMTIsIDEwMCwgNzUpLAotICAgICAgQ29tcHV0ZUxldHRlcmJveFJlZ2lvbihtYXRoOjpSZWN0KDAsIDAsIDEwMCwgMTAwKSwgbWF0aDo6U2l6ZSg0MDAsIDMwMCkpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlJlY3QoMCwgMjUwMDAwMDAwLCAyMDAwMDAwMDAwLCAxNTAwMDAwMDAwKSwKLSAgICAgICAgICAgIENvbXB1dGVMZXR0ZXJib3hSZWdpb24obWF0aDo6UmVjdCgwLCAwLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aDo6U2l6ZSg0MDAwMCwgMzAwMDApKSk7Ci0gIEVYUEVDVF9UUlVFKENvbXB1dGVMZXR0ZXJib3hSZWdpb24obWF0aDo6UmVjdCgwLCAwLCAyMDAwMDAwMDAwLCAyMDAwMDAwMDAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoOjpTaXplKDAsIDApKQotICAgICAgICAgICAgICAgICAgLklzRW1wdHkoKSk7Ci19Ci0KLVRFU1RfRihWaWRlb1V0aWxUZXN0LCBTY2FsZVNpemVUb0VuY29tcGFzc1RhcmdldCkgewotICBFWFBFQ1RfRVEoCi0gICAgICBtYXRoOjpTaXplKDEwMDAsIDc1MCksCi0gICAgICBTY2FsZVNpemVUb0VuY29tcGFzc1RhcmdldChtYXRoOjpTaXplKDY0MCwgNDgwKSwgbWF0aDo6U2l6ZSgxMDAwLCA1MDApKSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAgIG1hdGg6OlNpemUoMTMzMywgMTAwMCksCi0gICAgICBTY2FsZVNpemVUb0VuY29tcGFzc1RhcmdldChtYXRoOjpTaXplKDY0MCwgNDgwKSwgbWF0aDo6U2l6ZSg1MDAsIDEwMDApKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDEwMDAsIDU2MyksCi0gICAgICAgICAgICBTY2FsZVNpemVUb0VuY29tcGFzc1RhcmdldChtYXRoOjpTaXplKDE5MjAsIDEwODApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aDo6U2l6ZSgxMDAwLCA1MDApKSk7Ci0gIEVYUEVDVF9FUSgKLSAgICAgIG1hdGg6OlNpemUoMTMzLCAxMDApLAotICAgICAgU2NhbGVTaXplVG9FbmNvbXBhc3NUYXJnZXQobWF0aDo6U2l6ZSg0MDAsIDMwMCksIG1hdGg6OlNpemUoMTAwLCAxMDApKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDI2NjY2NjY2NywgMjAwMDAwMDAwKSwKLSAgICAgICAgICAgIFNjYWxlU2l6ZVRvRW5jb21wYXNzVGFyZ2V0KG1hdGg6OlNpemUoNDAwMDAsIDMwMDAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlNpemUoMjAwMDAwMDAwLCAyMDAwMDAwMDApKSk7Ci0gIEVYUEVDVF9UUlVFKFNjYWxlU2l6ZVRvRW5jb21wYXNzVGFyZ2V0KG1hdGg6OlNpemUoMCwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlNpemUoMjAwMDAwMDAwMCwgMjAwMDAwMDAwMCkpCi0gICAgICAgICAgICAgICAgICAuSXNFbXB0eSgpKTsKLX0KLQotVEVTVF9GKFZpZGVvVXRpbFRlc3QsIFBhZFRvTWF0Y2hBc3BlY3RSYXRpbykgewotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg2NDAsIDQ4MCksCi0gICAgICAgICAgICBQYWRUb01hdGNoQXNwZWN0UmF0aW8obWF0aDo6U2l6ZSg2NDAsIDQ4MCksIG1hdGg6OlNpemUoNjQwLCA0ODApKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDY0MCwgNDgwKSwKLSAgICAgICAgICAgIFBhZFRvTWF0Y2hBc3BlY3RSYXRpbyhtYXRoOjpTaXplKDY0MCwgNDgwKSwgbWF0aDo6U2l6ZSg0LCAzKSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg5NjAsIDQ4MCksCi0gICAgICAgICAgICBQYWRUb01hdGNoQXNwZWN0UmF0aW8obWF0aDo6U2l6ZSg2NDAsIDQ4MCksIG1hdGg6OlNpemUoMTAwMCwgNTAwKSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg2NDAsIDEyODApLAotICAgICAgICAgICAgUGFkVG9NYXRjaEFzcGVjdFJhdGlvKG1hdGg6OlNpemUoNjQwLCA0ODApLCBtYXRoOjpTaXplKDUwMCwgMTAwMCkpKTsKLSAgRVhQRUNUX0VRKAotICAgICAgbWF0aDo6U2l6ZSgyMTYwLCAxMDgwKSwKLSAgICAgIFBhZFRvTWF0Y2hBc3BlY3RSYXRpbyhtYXRoOjpTaXplKDE5MjAsIDEwODApLCBtYXRoOjpTaXplKDEwMDAsIDUwMCkpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlNpemUoNDAwLCA0MDApLAotICAgICAgICAgICAgUGFkVG9NYXRjaEFzcGVjdFJhdGlvKG1hdGg6OlNpemUoNDAwLCAzMDApLCBtYXRoOjpTaXplKDEwMCwgMTAwKSkpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg0MDAsIDQwMCksCi0gICAgICAgICAgICBQYWRUb01hdGNoQXNwZWN0UmF0aW8obWF0aDo6U2l6ZSgzMDAsIDQwMCksIG1hdGg6OlNpemUoMTAwLCAxMDApKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDQwMDAwLCA0MDAwMCksCi0gICAgICAgICAgICBQYWRUb01hdGNoQXNwZWN0UmF0aW8obWF0aDo6U2l6ZSg0MDAwMCwgMzAwMDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlNpemUoMjAwMDAwMDAwMCwgMjAwMDAwMDAwMCkpKTsKLSAgRVhQRUNUX1RSVUUoUGFkVG9NYXRjaEFzcGVjdFJhdGlvKG1hdGg6OlNpemUoNDAwMDAsIDMwMDAwKSwgbWF0aDo6U2l6ZSgwLCAwKSkKLSAgICAgICAgICAgICAgICAgIC5Jc0VtcHR5KCkpOwotfQotCi1URVNUX0YoVmlkZW9VdGlsVGVzdCwgTGV0dGVyYm94WVVWKSB7Ci0gIGludCB3aWR0aCA9IDQwOwotICBpbnQgaGVpZ2h0ID0gMzA7Ci0gIG1hdGg6OlNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBmcmFtZShWaWRlb0ZyYW1lOjpDcmVhdGVGcmFtZSgKLSAgICAgIFBJWEVMX0ZPUk1BVF9ZVjEyLCBzaXplLCBtYXRoOjpSZWN0KHNpemUpLCBzaXplLCBiYXNlOjpUaW1lRGVsdGEoKSkpOwotCi0gIGZvciAoaW50IGxlZnRfbWFyZ2luID0gMDsgbGVmdF9tYXJnaW4gPD0gMTA7IGxlZnRfbWFyZ2luICs9IDEwKSB7Ci0gICAgZm9yIChpbnQgcmlnaHRfbWFyZ2luID0gMDsgcmlnaHRfbWFyZ2luIDw9IDEwOyByaWdodF9tYXJnaW4gKz0gMTApIHsKLSAgICAgIGZvciAoaW50IHRvcF9tYXJnaW4gPSAwOyB0b3BfbWFyZ2luIDw9IDEwOyB0b3BfbWFyZ2luICs9IDEwKSB7Ci0gICAgICAgIGZvciAoaW50IGJvdHRvbV9tYXJnaW4gPSAwOyBib3R0b21fbWFyZ2luIDw9IDEwOyBib3R0b21fbWFyZ2luICs9IDEwKSB7Ci0gICAgICAgICAgbWF0aDo6UmVjdCB2aWV3X2FyZWEobGVmdF9tYXJnaW4sIHRvcF9tYXJnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggLSBsZWZ0X21hcmdpbiAtIHJpZ2h0X21hcmdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgLSB0b3BfbWFyZ2luIC0gYm90dG9tX21hcmdpbik7Ci0gICAgICAgICAgRmlsbFlVVihmcmFtZS5nZXQoKSwgMHgxLCAweDIsIDB4Myk7Ci0gICAgICAgICAgTGV0dGVyYm94WVVWKGZyYW1lLmdldCgpLCB2aWV3X2FyZWEpOwotICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgICBib29sIGluc2lkZSA9Ci0gICAgICAgICAgICAgICAgICB4ID49IHZpZXdfYXJlYS54KCkgJiYgeCA8IHZpZXdfYXJlYS54KCkgKyB2aWV3X2FyZWEud2lkdGgoKSAmJgotICAgICAgICAgICAgICAgICAgeSA+PSB2aWV3X2FyZWEueSgpICYmIHkgPCB2aWV3X2FyZWEueSgpICsgdmlld19hcmVhLmhlaWdodCgpOwotICAgICAgICAgICAgICBFWFBFQ1RfRVEoZnJhbWUtPmRhdGEoVmlkZW9GcmFtZTo6a1lQbGFuZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeSAqIGZyYW1lLT5zdHJpZGUoVmlkZW9GcmFtZTo6a1lQbGFuZSkgKyB4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSA/IDB4MDEgOiAweDAwKTsKLSAgICAgICAgICAgICAgRVhQRUNUX0VRKAotICAgICAgICAgICAgICAgICAgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZTo6a1VQbGFuZSkKLSAgICAgICAgICAgICAgICAgICAgICBbKHkgLyAyKSAqIGZyYW1lLT5zdHJpZGUoVmlkZW9GcmFtZTo6a1VQbGFuZSkgKyAoeCAvIDIpXSwKLSAgICAgICAgICAgICAgICAgIGluc2lkZSA/IDB4MDIgOiAweDgwKTsKLSAgICAgICAgICAgICAgRVhQRUNUX0VRKAotICAgICAgICAgICAgICAgICAgZnJhbWUtPmRhdGEoVmlkZW9GcmFtZTo6a1ZQbGFuZSkKLSAgICAgICAgICAgICAgICAgICAgICBbKHkgLyAyKSAqIGZyYW1lLT5zdHJpZGUoVmlkZW9GcmFtZTo6a1ZQbGFuZSkgKyAoeCAvIDIpXSwKLSAgICAgICAgICAgICAgICAgIGluc2lkZSA/IDB4MDMgOiAweDgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotVEVTVF9GKFZpZGVvVXRpbFRlc3QsIEk0MjBDb3B5V2l0aFBhZGRpbmcpIHsKLSAgbWF0aDo6U2l6ZSB2aXNpYmxlX3NpemUoNDAsIDMwKTsKLSAgc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBzcmNfZnJhbWUgPSBDcmVhdGVGcmFtZVdpdGhQYXR0ZXJuRmlsbGVkKAotICAgICAgUElYRUxfRk9STUFUX0k0MjAsIHZpc2libGVfc2l6ZSwgbWF0aDo6UmVjdCh2aXNpYmxlX3NpemUpLCB2aXNpYmxlX3NpemUsCi0gICAgICBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIC8vIEV4cGVjdCB0byByZXR1cm4gZmFsc2Ugd2hlbiBjb3B5aW5nIHRvIGFuIGVtcHR5IGJ1ZmZlci4KLSAgRVhQRUNUX0ZBTFNFKEk0MjBDb3B5V2l0aFBhZGRpbmcoKnNyY19mcmFtZSwgTlVMTCkpOwotCi0gIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gZHN0X2ZyYW1lID0gQ3JlYXRlRnJhbWVXaXRoUGF0dGVybkZpbGxlZCgKLSAgICAgIFBJWEVMX0ZPUk1BVF9JNDIwLCB2aXNpYmxlX3NpemUsIG1hdGg6OlJlY3QodmlzaWJsZV9zaXplKSwgdmlzaWJsZV9zaXplLAotICAgICAgYmFzZTo6VGltZURlbHRhKCkpOwotICBFWFBFQ1RfVFJVRShJNDIwQ29weVdpdGhQYWRkaW5nKCpzcmNfZnJhbWUsIGRzdF9mcmFtZS5nZXQoKSkpOwotICBFWFBFQ1RfVFJVRShWZXJpZnlDb3B5V2l0aFBhZGRpbmcoKnNyY19mcmFtZSwgKmRzdF9mcmFtZSkpOwotCi0gIG1hdGg6OlNpemUgY29kZWRfc2l6ZSg2MCwgNDApOwotICBkc3RfZnJhbWUgPSBDcmVhdGVGcmFtZVdpdGhQYXR0ZXJuRmlsbGVkKFBJWEVMX0ZPUk1BVF9JNDIwLCBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlJlY3QodmlzaWJsZV9zaXplKSwgY29kZWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIEVYUEVDVF9UUlVFKEk0MjBDb3B5V2l0aFBhZGRpbmcoKnNyY19mcmFtZSwgZHN0X2ZyYW1lLmdldCgpKSk7Ci0gIEVYUEVDVF9UUlVFKFZlcmlmeUNvcHlXaXRoUGFkZGluZygqc3JjX2ZyYW1lLCAqZHN0X2ZyYW1lKSk7Ci0KLSAgbWF0aDo6U2l6ZSBvZGRfc2l6ZSgzOSwgMzEpOwotICBzcmNfZnJhbWUgPSBDcmVhdGVGcmFtZVdpdGhQYXR0ZXJuRmlsbGVkKFBJWEVMX0ZPUk1BVF9JNDIwLCBvZGRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoOjpSZWN0KG9kZF9zaXplKSwgb2RkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKCkpOwotICBkc3RfZnJhbWUgPSBDcmVhdGVGcmFtZVdpdGhQYXR0ZXJuRmlsbGVkKFBJWEVMX0ZPUk1BVF9JNDIwLCBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlJlY3Qob2RkX3NpemUpLCBjb2RlZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgRVhQRUNUX1RSVUUoSTQyMENvcHlXaXRoUGFkZGluZygqc3JjX2ZyYW1lLCBkc3RfZnJhbWUuZ2V0KCkpKTsKLSAgRVhQRUNUX1RSVUUoVmVyaWZ5Q29weVdpdGhQYWRkaW5nKCpzcmNfZnJhbWUsICpkc3RfZnJhbWUpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS93YWxsX2Nsb2NrX3RpbWVfc291cmNlLmNjIGIvY29iYWx0L21lZGlhL2Jhc2Uvd2FsbF9jbG9ja190aW1lX3NvdXJjZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MDMxZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvYmFzZS93YWxsX2Nsb2NrX3RpbWVfc291cmNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvd2FsbF9jbG9ja190aW1lX3NvdXJjZS5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotV2FsbENsb2NrVGltZVNvdXJjZTo6V2FsbENsb2NrVGltZVNvdXJjZSgpCi0gICAgOiB0aWNrX2Nsb2NrXygmZGVmYXVsdF90aWNrX2Nsb2NrXyksIHRpY2tpbmdfKGZhbHNlKSwgcGxheWJhY2tfcmF0ZV8oMS4wKSB7fQotCi1XYWxsQ2xvY2tUaW1lU291cmNlOjp+V2FsbENsb2NrVGltZVNvdXJjZSgpIHt9Ci0KLXZvaWQgV2FsbENsb2NrVGltZVNvdXJjZTo6U3RhcnRUaWNraW5nKCkgewotICBEVkxPRygxKSA8PCBfX2Z1bmNfXzsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRENIRUNLKCF0aWNraW5nXyk7Ci0gIHRpY2tpbmdfID0gdHJ1ZTsKLSAgcmVmZXJlbmNlX3RpbWVfID0gdGlja19jbG9ja18tPk5vd1RpY2tzKCk7Ci19Ci0KLXZvaWQgV2FsbENsb2NrVGltZVNvdXJjZTo6U3RvcFRpY2tpbmcoKSB7Ci0gIERWTE9HKDEpIDw8IF9fZnVuY19fOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0sodGlja2luZ18pOwotICBiYXNlX3RpbWVzdGFtcF8gPSBDdXJyZW50TWVkaWFUaW1lX0xvY2tlZCgpOwotICB0aWNraW5nXyA9IGZhbHNlOwotICByZWZlcmVuY2VfdGltZV8gPSB0aWNrX2Nsb2NrXy0+Tm93VGlja3MoKTsKLX0KLQotdm9pZCBXYWxsQ2xvY2tUaW1lU291cmNlOjpTZXRQbGF5YmFja1JhdGUoZG91YmxlIHBsYXliYWNrX3JhdGUpIHsKLSAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIigiIDw8IHBsYXliYWNrX3JhdGUgPDwgIikiOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICAvLyBFc3RpbWF0ZSBjdXJyZW50IG1lZGlhIHRpbWUgdXNpbmcgb2xkIHJhdGUgdG8gdXNlIGFzIGEgbmV3IGJhc2UgdGltZSBmb3IKLSAgLy8gdGhlIG5ldyByYXRlLgotICBpZiAodGlja2luZ18pIHsKLSAgICBiYXNlX3RpbWVzdGFtcF8gPSBDdXJyZW50TWVkaWFUaW1lX0xvY2tlZCgpOwotICAgIHJlZmVyZW5jZV90aW1lXyA9IHRpY2tfY2xvY2tfLT5Ob3dUaWNrcygpOwotICB9Ci0KLSAgcGxheWJhY2tfcmF0ZV8gPSBwbGF5YmFja19yYXRlOwotfQotCi12b2lkIFdhbGxDbG9ja1RpbWVTb3VyY2U6OlNldE1lZGlhVGltZShiYXNlOjpUaW1lRGVsdGEgdGltZSkgewotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiKCIgPDwgdGltZS5Jbk1pY3Jvc2Vjb25kcygpIDw8ICIpIjsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgQ0hFQ0soIXRpY2tpbmdfKTsKLSAgYmFzZV90aW1lc3RhbXBfID0gdGltZTsKLSAgcmVmZXJlbmNlX3RpbWVfID0gYmFzZTo6VGltZVRpY2tzKCk7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBXYWxsQ2xvY2tUaW1lU291cmNlOjpDdXJyZW50TWVkaWFUaW1lKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICByZXR1cm4gQ3VycmVudE1lZGlhVGltZV9Mb2NrZWQoKTsKLX0KLQotYm9vbCBXYWxsQ2xvY2tUaW1lU291cmNlOjpHZXRXYWxsQ2xvY2tUaW1lcygKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+JiBtZWRpYV90aW1lc3RhbXBzLAotICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4qIHdhbGxfY2xvY2tfdGltZXMpIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRENIRUNLKHdhbGxfY2xvY2tfdGltZXMtPmVtcHR5KCkpOwotCi0gIGlmIChtZWRpYV90aW1lc3RhbXBzLmVtcHR5KCkpIHsKLSAgICB3YWxsX2Nsb2NrX3RpbWVzLT5wdXNoX2JhY2socmVmZXJlbmNlX3RpbWVfKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBXaGVuIHBsYXliYWNrIGlzIHBhdXNlZCAocmF0ZSBpcyB6ZXJvKSwgYXNzdW1lIGEgcmF0ZSBvZiAxLjAuCi0gICAgY29uc3QgZG91YmxlIHBsYXliYWNrX3JhdGUgPSBwbGF5YmFja19yYXRlXyA/IHBsYXliYWNrX3JhdGVfIDogMS4wOwotCi0gICAgd2FsbF9jbG9ja190aW1lcy0+cmVzZXJ2ZShtZWRpYV90aW1lc3RhbXBzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBtZWRpYV90aW1lc3RhbXAgOiBtZWRpYV90aW1lc3RhbXBzKSB7Ci0gICAgICB3YWxsX2Nsb2NrX3RpbWVzLT5wdXNoX2JhY2socmVmZXJlbmNlX3RpbWVfICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWVkaWFfdGltZXN0YW1wIC0gYmFzZV90aW1lc3RhbXBfKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrX3JhdGUpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBwbGF5YmFja19yYXRlXyAmJiB0aWNraW5nXzsKLX0KLQotYmFzZTo6VGltZURlbHRhIFdhbGxDbG9ja1RpbWVTb3VyY2U6OkN1cnJlbnRNZWRpYVRpbWVfTG9ja2VkKCkgewotICBsb2NrXy5Bc3NlcnRBY3F1aXJlZCgpOwotICBpZiAoIXRpY2tpbmdfIHx8ICFwbGF5YmFja19yYXRlXykgcmV0dXJuIGJhc2VfdGltZXN0YW1wXzsKLQotICBiYXNlOjpUaW1lVGlja3Mgbm93ID0gdGlja19jbG9ja18tPk5vd1RpY2tzKCk7Ci0gIHJldHVybiBiYXNlX3RpbWVzdGFtcF8gKwotICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKAotICAgICAgICAgICAgIChub3cgLSByZWZlcmVuY2VfdGltZV8pLkluTWljcm9zZWNvbmRzKCkgKiBwbGF5YmFja19yYXRlXyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Jhc2Uvd2FsbF9jbG9ja190aW1lX3NvdXJjZS5oIGIvY29iYWx0L21lZGlhL2Jhc2Uvd2FsbF9jbG9ja190aW1lX3NvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWRjZmNjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3dhbGxfY2xvY2tfdGltZV9zb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9XQUxMX0NMT0NLX1RJTUVfU09VUkNFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9CQVNFX1dBTExfQ0xPQ0tfVElNRV9TT1VSQ0VfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvZGVmYXVsdF90aWNrX2Nsb2NrLmgiCi0jaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vbG9jay5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVfc291cmNlLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQSB0aW1lIHNvdXJjZSB0aGF0IHVzZXMgaW50ZXJwb2xhdGlvbiBiYXNlZCBvbiB0aGUgc3lzdGVtIGNsb2NrLgotY2xhc3MgTUVESUFfRVhQT1JUIFdhbGxDbG9ja1RpbWVTb3VyY2UgOiBwdWJsaWMgVGltZVNvdXJjZSB7Ci0gcHVibGljOgotICBXYWxsQ2xvY2tUaW1lU291cmNlKCk7Ci0gIH5XYWxsQ2xvY2tUaW1lU291cmNlKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gVGltZVNvdXJjZSBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBTdGFydFRpY2tpbmcoKSBvdmVycmlkZTsKLSAgdm9pZCBTdG9wVGlja2luZygpIG92ZXJyaWRlOwotICB2b2lkIFNldFBsYXliYWNrUmF0ZShkb3VibGUgcGxheWJhY2tfcmF0ZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgU2V0TWVkaWFUaW1lKGJhc2U6OlRpbWVEZWx0YSB0aW1lKSBvdmVycmlkZTsKLSAgYmFzZTo6VGltZURlbHRhIEN1cnJlbnRNZWRpYVRpbWUoKSBvdmVycmlkZTsKLSAgYm9vbCBHZXRXYWxsQ2xvY2tUaW1lcygKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4mIG1lZGlhX3RpbWVzdGFtcHMsCi0gICAgICBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lVGlja3M+KiB3YWxsX2Nsb2NrX3RpbWVzKSBvdmVycmlkZTsKLQotICB2b2lkIHNldF90aWNrX2Nsb2NrX2Zvcl90ZXN0aW5nKGJhc2U6OlRpY2tDbG9jayogdGlja19jbG9jaykgewotICAgIHRpY2tfY2xvY2tfID0gdGlja19jbG9jazsKLSAgfQotCi0gcHJpdmF0ZToKLSAgYmFzZTo6VGltZURlbHRhIEN1cnJlbnRNZWRpYVRpbWVfTG9ja2VkKCk7Ci0KLSAgLy8gQWxsb3cgZm9yIGFuIGluamVjdGFibGUgdGljayBjbG9jayBmb3IgdGVzdGluZy4KLSAgYmFzZTo6RGVmYXVsdFRpY2tDbG9jayBkZWZhdWx0X3RpY2tfY2xvY2tfOwotCi0gIC8vIElmIHNwZWNpZmllZCwgdXNlZCBpbnN0ZWFkIG9mIHxkZWZhdWx0X3RpY2tfY2xvY2tffC4KLSAgYmFzZTo6VGlja0Nsb2NrKiB0aWNrX2Nsb2NrXzsKLQotICBib29sIHRpY2tpbmdfOwotCi0gIC8vIFdoaWxlIHRpY2tpbmcgd2UgY2FuIGludGVycG9sYXRlIHRoZSBjdXJyZW50IG1lZGlhIHRpbWUgYnkgbWVhc3VyaW5nIHRoZQotICAvLyBkZWx0YSBiZXR3ZWVuIG91ciByZWZlcmVuY2UgdGlja3MgYW5kIHRoZSBjdXJyZW50IHN5c3RlbSB0aWNrcyBhbmQgc2NhbGluZwotICAvLyB0aGF0IHRpbWUgYnkgdGhlIHBsYXliYWNrIHJhdGUuCi0gIGRvdWJsZSBwbGF5YmFja19yYXRlXzsKLSAgYmFzZTo6VGltZURlbHRhIGJhc2VfdGltZXN0YW1wXzsKLSAgYmFzZTo6VGltZVRpY2tzIHJlZmVyZW5jZV90aW1lXzsKLQotICAvLyBUT0RPKHNjaGVya3VzKTogUmVtb3ZlIGludGVybmFsIGxvY2tpbmcgZnJvbSB0aGlzIGNsYXNzIGFmdGVyIGFjY2VzcyB0bwotICAvLyBSZW5kZXJlcjo6Q3VycmVudE1lZGlhVGltZSgpIGlzIHNpbmdsZSB0aHJlYWRlZCBodHRwOi8vY3JidWcuY29tLzM3MDYzNAotICBiYXNlOjpMb2NrIGxvY2tfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXYWxsQ2xvY2tUaW1lU291cmNlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1dBTExfQ0xPQ0tfVElNRV9TT1VSQ0VfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3dhbGxfY2xvY2tfdGltZV9zb3VyY2VfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvYmFzZS93YWxsX2Nsb2NrX3RpbWVfc291cmNlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2NiMDE2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3dhbGxfY2xvY2tfdGltZV9zb3VyY2VfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS90ZXN0L3NpbXBsZV90ZXN0X3RpY2tfY2xvY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS93YWxsX2Nsb2NrX3RpbWVfc291cmNlLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgV2FsbENsb2NrVGltZVNvdXJjZVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBXYWxsQ2xvY2tUaW1lU291cmNlVGVzdCgpIDogdGlja19jbG9ja18obmV3IGJhc2U6OlNpbXBsZVRlc3RUaWNrQ2xvY2soKSkgewotICAgIHRpbWVfc291cmNlXy5zZXRfdGlja19jbG9ja19mb3JfdGVzdGluZyh0aWNrX2Nsb2NrXy5nZXQoKSk7Ci0gICAgQWR2YW5jZVRpbWVJblNlY29uZHMoMSk7Ci0gIH0KLSAgfldhbGxDbG9ja1RpbWVTb3VyY2VUZXN0KCkgb3ZlcnJpZGUge30KLQotICB2b2lkIEFkdmFuY2VUaW1lSW5TZWNvbmRzKGludCBzZWNvbmRzKSB7Ci0gICAgdGlja19jbG9ja18tPkFkdmFuY2UoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyhzZWNvbmRzKSk7Ci0gIH0KLQotICBpbnQgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpIHsKLSAgICByZXR1cm4gdGltZV9zb3VyY2VfLkN1cnJlbnRNZWRpYVRpbWUoKS5JblNlY29uZHMoKTsKLSAgfQotCi0gIHZvaWQgU2V0TWVkaWFUaW1lSW5TZWNvbmRzKGludCBzZWNvbmRzKSB7Ci0gICAgcmV0dXJuIHRpbWVfc291cmNlXy5TZXRNZWRpYVRpbWUoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyhzZWNvbmRzKSk7Ci0gIH0KLQotICBiYXNlOjpUaW1lVGlja3MgQ29udmVydE1lZGlhVGltZShiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBpc190aW1lX21vdmluZykgewotICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4gd2FsbF9jbG9ja190aW1lczsKLSAgICAqaXNfdGltZV9tb3ZpbmcgPSB0aW1lX3NvdXJjZV8uR2V0V2FsbENsb2NrVGltZXMoCi0gICAgICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4oMSwgdGltZXN0YW1wKSwgJndhbGxfY2xvY2tfdGltZXMpOwotICAgIHJldHVybiB3YWxsX2Nsb2NrX3RpbWVzWzBdOwotICB9Ci0KLSAgYm9vbCBJc1dhbGxDbG9ja05vd0Zvck1lZGlhVGltZUluU2Vjb25kcyhpbnQgc2Vjb25kcykgewotICAgIGJvb2wgaXNfdGltZV9tb3ZpbmcgPSBmYWxzZTsKLSAgICByZXR1cm4gdGlja19jbG9ja18tPk5vd1RpY2tzKCkgPT0KLSAgICAgICAgICAgQ29udmVydE1lZGlhVGltZShiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKHNlY29uZHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc190aW1lX21vdmluZyk7Ci0gIH0KLQotICBib29sIElzVGltZVN0b3BwZWQoKSB7Ci0gICAgYm9vbCBpc190aW1lX21vdmluZyA9IGZhbHNlOwotICAgIC8vIENvbnZlcnQgYW55IHJhbmRvbSB2YWx1ZSwgaXQgc2hvdWxkbid0IG1hdHRlciBmb3IgdGhpcyBjYWxsLgotICAgIENvbnZlcnRNZWRpYVRpbWUoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxKSwgJmlzX3RpbWVfbW92aW5nKTsKLSAgICByZXR1cm4gIWlzX3RpbWVfbW92aW5nOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIFdhbGxDbG9ja1RpbWVTb3VyY2UgdGltZV9zb3VyY2VfOwotICBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6U2ltcGxlVGVzdFRpY2tDbG9jaz4gdGlja19jbG9ja187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdhbGxDbG9ja1RpbWVTb3VyY2VUZXN0KTsKLX07Ci0KLVRFU1RfRihXYWxsQ2xvY2tUaW1lU291cmNlVGVzdCwgSW5pdGlhbFRpbWVJc1plcm8pIHsKLSAgRVhQRUNUX0VRKDAsIEN1cnJlbnRNZWRpYVRpbWVJblNlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKElzVGltZVN0b3BwZWQoKSk7Ci19Ci0KLVRFU1RfRihXYWxsQ2xvY2tUaW1lU291cmNlVGVzdCwgSW5pdGlhbFRpbWVJc05vdFRpY2tpbmcpIHsKLSAgRVhQRUNUX0VRKDAsIEN1cnJlbnRNZWRpYVRpbWVJblNlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKElzVGltZVN0b3BwZWQoKSk7Ci0gIEFkdmFuY2VUaW1lSW5TZWNvbmRzKDEwMCk7Ci0gIEVYUEVDVF9FUSgwLCBDdXJyZW50TWVkaWFUaW1lSW5TZWNvbmRzKCkpOwotICBFWFBFQ1RfVFJVRShJc1RpbWVTdG9wcGVkKCkpOwotfQotCi1URVNUX0YoV2FsbENsb2NrVGltZVNvdXJjZVRlc3QsIEluaXRpYWxQbGF5YmFja1JhdGVJc09uZSkgewotICB0aW1lX3NvdXJjZV8uU3RhcnRUaWNraW5nKCk7Ci0KLSAgRVhQRUNUX0VRKDAsIEN1cnJlbnRNZWRpYVRpbWVJblNlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKElzV2FsbENsb2NrTm93Rm9yTWVkaWFUaW1lSW5TZWNvbmRzKDApKTsKLSAgQWR2YW5jZVRpbWVJblNlY29uZHMoMTAwKTsKLSAgRVhQRUNUX0VRKDEwMCwgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpKTsKLSAgRVhQRUNUX1RSVUUoSXNXYWxsQ2xvY2tOb3dGb3JNZWRpYVRpbWVJblNlY29uZHMoMTAwKSk7Ci19Ci0KLVRFU1RfRihXYWxsQ2xvY2tUaW1lU291cmNlVGVzdCwgU2V0TWVkaWFUaW1lKSB7Ci0gIEVYUEVDVF9FUSgwLCBDdXJyZW50TWVkaWFUaW1lSW5TZWNvbmRzKCkpOwotICBFWFBFQ1RfVFJVRShJc1RpbWVTdG9wcGVkKCkpOwotICBTZXRNZWRpYVRpbWVJblNlY29uZHMoMTApOwotICBFWFBFQ1RfRVEoMTAsIEN1cnJlbnRNZWRpYVRpbWVJblNlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKElzVGltZVN0b3BwZWQoKSk7Ci0gIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4gd2FsbF9jbG9ja190aW1lczsKLSAgdGltZV9zb3VyY2VfLkdldFdhbGxDbG9ja1RpbWVzKHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3YWxsX2Nsb2NrX3RpbWVzKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVUaWNrcygpLCB3YWxsX2Nsb2NrX3RpbWVzWzBdKTsKLX0KLQotVEVTVF9GKFdhbGxDbG9ja1RpbWVTb3VyY2VUZXN0LCBTZXRQbGF5YmFja1JhdGUpIHsKLSAgdGltZV9zb3VyY2VfLlN0YXJ0VGlja2luZygpOwotCi0gIHRpbWVfc291cmNlXy5TZXRQbGF5YmFja1JhdGUoMC41KTsKLSAgRVhQRUNUX0VRKDAsIEN1cnJlbnRNZWRpYVRpbWVJblNlY29uZHMoKSk7Ci0gIEVYUEVDVF9UUlVFKElzV2FsbENsb2NrTm93Rm9yTWVkaWFUaW1lSW5TZWNvbmRzKDApKTsKLSAgQWR2YW5jZVRpbWVJblNlY29uZHMoMTApOwotICBFWFBFQ1RfRVEoNSwgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpKTsKLSAgRVhQRUNUX1RSVUUoSXNXYWxsQ2xvY2tOb3dGb3JNZWRpYVRpbWVJblNlY29uZHMoNSkpOwotCi0gIHRpbWVfc291cmNlXy5TZXRQbGF5YmFja1JhdGUoMik7Ci0gIEVYUEVDVF9FUSg1LCBDdXJyZW50TWVkaWFUaW1lSW5TZWNvbmRzKCkpOwotICBFWFBFQ1RfVFJVRShJc1dhbGxDbG9ja05vd0Zvck1lZGlhVGltZUluU2Vjb25kcyg1KSk7Ci0gIEFkdmFuY2VUaW1lSW5TZWNvbmRzKDEwKTsKLSAgRVhQRUNUX0VRKDI1LCBDdXJyZW50TWVkaWFUaW1lSW5TZWNvbmRzKCkpOwotICBFWFBFQ1RfVFJVRShJc1dhbGxDbG9ja05vd0Zvck1lZGlhVGltZUluU2Vjb25kcygyNSkpOwotfQotCi1URVNUX0YoV2FsbENsb2NrVGltZVNvdXJjZVRlc3QsIFN0b3BUaWNraW5nKSB7Ci0gIHRpbWVfc291cmNlXy5TdGFydFRpY2tpbmcoKTsKLQotICBFWFBFQ1RfRVEoMCwgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpKTsKLSAgRVhQRUNUX1RSVUUoSXNXYWxsQ2xvY2tOb3dGb3JNZWRpYVRpbWVJblNlY29uZHMoMCkpOwotICBBZHZhbmNlVGltZUluU2Vjb25kcygxMCk7Ci0gIEVYUEVDVF9FUSgxMCwgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpKTsKLSAgRVhQRUNUX1RSVUUoSXNXYWxsQ2xvY2tOb3dGb3JNZWRpYVRpbWVJblNlY29uZHMoMTApKTsKLQotICB0aW1lX3NvdXJjZV8uU3RvcFRpY2tpbmcoKTsKLQotICBBZHZhbmNlVGltZUluU2Vjb25kcygxMCk7Ci0gIEVYUEVDVF9FUSgxMCwgQ3VycmVudE1lZGlhVGltZUluU2Vjb25kcygpKTsKLSAgRVhQRUNUX1RSVUUoSXNUaW1lU3RvcHBlZCgpKTsKLX0KLQotVEVTVF9GKFdhbGxDbG9ja1RpbWVTb3VyY2VUZXN0LCBDb252ZXJ0c1RpbWVzdGFtcHNXaGVuU3RvcHBlZCkgewotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga09uZVNlY29uZCA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMSk7Ci0gIGJvb2wgaXNfdGltZV9tb3ZpbmcgPSBmYWxzZTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVUaWNrcygpLAotICAgICAgICAgICAgQ29udmVydE1lZGlhVGltZShiYXNlOjpUaW1lRGVsdGEoKSwgJmlzX3RpbWVfbW92aW5nKSk7Ci0gIEVYUEVDVF9GQUxTRShpc190aW1lX21vdmluZyk7Ci0gIEVYUEVDVF9ORShiYXNlOjpUaW1lVGlja3MoKSwgQ29udmVydE1lZGlhVGltZShrT25lU2Vjb25kLCAmaXNfdGltZV9tb3ZpbmcpKTsKLSAgRVhQRUNUX0ZBTFNFKGlzX3RpbWVfbW92aW5nKTsKLSAgdGltZV9zb3VyY2VfLlN0YXJ0VGlja2luZygpOwotICB0aW1lX3NvdXJjZV8uU3RvcFRpY2tpbmcoKTsKLSAgRVhQRUNUX0VRKHRpY2tfY2xvY2tfLT5Ob3dUaWNrcygpLAotICAgICAgICAgICAgQ29udmVydE1lZGlhVGltZShiYXNlOjpUaW1lRGVsdGEoKSwgJmlzX3RpbWVfbW92aW5nKSk7Ci0gIEVYUEVDVF9GQUxTRShpc190aW1lX21vdmluZyk7Ci0gIEVYUEVDVF9FUSh0aWNrX2Nsb2NrXy0+Tm93VGlja3MoKSArIGtPbmVTZWNvbmQsCi0gICAgICAgICAgICBDb252ZXJ0TWVkaWFUaW1lKGtPbmVTZWNvbmQsICZpc190aW1lX21vdmluZykpOwotICBFWFBFQ1RfRkFMU0UoaXNfdGltZV9tb3ZpbmcpOwotfQotCi1URVNUX0YoV2FsbENsb2NrVGltZVNvdXJjZVRlc3QsIEVtcHR5TWVkaWFUaW1lc3RhbXBzUmV0dXJuTWVkaWFXYWxsQ2xvY2tUaW1lKSB7Ci0gIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVUaWNrcz4gd2FsbF9jbG9ja190aW1lczsKLSAgYm9vbCBpc190aW1lX21vdmluZyA9IHRpbWVfc291cmNlXy5HZXRXYWxsQ2xvY2tUaW1lcygKLSAgICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4oKSwgJndhbGxfY2xvY2tfdGltZXMpOwotICBFWFBFQ1RfRkFMU0UoaXNfdGltZV9tb3ZpbmcpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZVRpY2tzKCksIHdhbGxfY2xvY2tfdGltZXNbMF0pOwotCi0gIHdhbGxfY2xvY2tfdGltZXMuY2xlYXIoKTsKLSAgdGltZV9zb3VyY2VfLlN0YXJ0VGlja2luZygpOwotICBpc190aW1lX21vdmluZyA9IHRpbWVfc291cmNlXy5HZXRXYWxsQ2xvY2tUaW1lcygKLSAgICAgIHN0ZDo6dmVjdG9yPGJhc2U6OlRpbWVEZWx0YT4oKSwgJndhbGxfY2xvY2tfdGltZXMpOwotICBFWFBFQ1RfVFJVRShpc190aW1lX21vdmluZyk7Ci0gIEVYUEVDVF9FUSh0aWNrX2Nsb2NrXy0+Tm93VGlja3MoKSwgd2FsbF9jbG9ja190aW1lc1swXSk7Ci0KLSAgd2FsbF9jbG9ja190aW1lcy5jbGVhcigpOwotICB0aW1lX3NvdXJjZV8uU3RvcFRpY2tpbmcoKTsKLSAgaXNfdGltZV9tb3ZpbmcgPSB0aW1lX3NvdXJjZV8uR2V0V2FsbENsb2NrVGltZXMoCi0gICAgICBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+KCksICZ3YWxsX2Nsb2NrX3RpbWVzKTsKLSAgRVhQRUNUX0ZBTFNFKGlzX3RpbWVfbW92aW5nKTsKLSAgRVhQRUNUX0VRKHRpY2tfY2xvY2tfLT5Ob3dUaWNrcygpLCB3YWxsX2Nsb2NrX3RpbWVzWzBdKTsKLQotICAvLyBTZXR0aW5nIG1lZGlhIHRpbWUgc2hvdWxkIGNsZWFyIHJlZmVyZW5jZSB0aW1lLgotICBTZXRNZWRpYVRpbWVJblNlY29uZHMoNSk7Ci0gIHdhbGxfY2xvY2tfdGltZXMuY2xlYXIoKTsKLSAgaXNfdGltZV9tb3ZpbmcgPSB0aW1lX3NvdXJjZV8uR2V0V2FsbENsb2NrVGltZXMoCi0gICAgICBzdGQ6OnZlY3RvcjxiYXNlOjpUaW1lRGVsdGE+KCksICZ3YWxsX2Nsb2NrX3RpbWVzKTsKLSAgRVhQRUNUX0ZBTFNFKGlzX3RpbWVfbW92aW5nKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVUaWNrcygpLCB3YWxsX2Nsb2NrX3RpbWVzWzBdKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWNmOWY0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIFRoaXMgd2VicGFnZSBzaG93cyBsYXlvdXQgb2YgWVYxMiBhbmQgb3RoZXIgWVVWIGZvcm1hdHMKLS8vIGh0dHA6Ly93d3cuZm91cmNjLm9yZy95dXYucGhwCi0vLyBUaGUgYWN0dWFsIGNvbnZlcnNpb24gaXMgYmVzdCBkZXNjcmliZWQgaGVyZQotLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZVVYKLS8vIEFuIGFydGljbGUgb24gb3B0aW1pemluZyBZVVYgY29udmVyc2lvbiB1c2luZyB0YWJsZXMgaW5zdGVhZCBvZiBtdWx0aXBsaWVzCi0vLyBodHRwOi8vbGVzdG91cnRlcmVhdXguZnJlZS5mci9wYXBlcnMvZGF0YS95dXZyZ2IucGRmCi0vLwotLy8gWVYxMiBpcyBhIGZ1bGwgcGxhbmUgb2YgWSBhbmQgYSBoYWxmIGhlaWdodCwgaGFsZiB3aWR0aCBjaHJvbWEgcGxhbmVzCi0vLyBZVjE2IGlzIGEgZnVsbCBwbGFuZSBvZiBZIGFuZCBhIGZ1bGwgaGVpZ2h0LCBoYWxmIHdpZHRoIGNocm9tYSBwbGFuZXMKLS8vCi0vLyBBUkdCIHBpeGVsIGZvcm1hdCBpcyBvdXRwdXQsIHdoaWNoIG9uIGxpdHRsZSBlbmRpYW4gaXMgc3RvcmVkIGFzIEJHUkEuCi0vLyBUaGUgYWxwaGEgaXMgc2V0IHRvIDI1NSwgYWxsb3dpbmcgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSBSR0JBIG9yIFJHQjMyLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UveXV2X2NvbnZlcnQuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY3B1LmgiCi0jaW5jbHVkZSAiYmFzZS9sYXp5X2luc3RhbmNlLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvYWxpZ25lZF9tZW1vcnkuaCIKLSNpbmNsdWRlICJiYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2ZpbHRlcl95dXYuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpCi0jaWYgZGVmaW5lZChDT01QSUxFUl9NU1ZDKQotI2luY2x1ZGUgPGludHJpbi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxtbWludHJpbi5oPgotI2VuZGlmCi0jZW5kaWYKLQotLy8gQXNzZW1ibHkgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCB3aXRob3V0IG5hbWVzcGFjZS4KLWV4dGVybiAiQyIgewotdm9pZCBFbXB0eVJlZ2lzdGVyU3RhdGVfTU1YKCk7Ci19ICAvLyBleHRlcm4gIkMiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdHlwZWRlZiB2b2lkICgqRmlsdGVyWVVWUm93c1Byb2MpKHVpbnQ4X3QqLCBjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KTsKLQotdHlwZWRlZiB2b2lkICgqQ29udmVydFJHQlRvWVVWUHJvYykoY29uc3QgdWludDhfdCosIHVpbnQ4X3QqLCB1aW50OF90KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7Ci0KLXR5cGVkZWYgdm9pZCAoKkNvbnZlcnRZVVZUb1JHQjMyUHJvYykoY29uc3QgdWludDhfdCosIGNvbnN0IHVpbnQ4X3QqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiwgdWludDhfdCosIGludCwgaW50LCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBZVVZUeXBlKTsKLQotdHlwZWRlZiB2b2lkICgqQ29udmVydFlVVkFUb0FSR0JQcm9jKShjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqLCBjb25zdCB1aW50OF90KiwgdWludDhfdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIFlVVlR5cGUpOwotCi10eXBlZGVmIHZvaWQgKCpDb252ZXJ0WVVWVG9SR0IzMlJvd1Byb2MpKGNvbnN0IHVpbnQ4X3QqLCBjb25zdCB1aW50OF90KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCosIHVpbnQ4X3QqLCBwdHJkaWZmX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqKTsKLQotdHlwZWRlZiB2b2lkICgqQ29udmVydFlVVkFUb0FSR0JSb3dQcm9jKShjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqLCBjb25zdCB1aW50OF90KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCosIHB0cmRpZmZfdCwgY29uc3QgaW50MTZfdCopOwotCi10eXBlZGVmIHZvaWQgKCpTY2FsZVlVVlRvUkdCMzJSb3dQcm9jKShjb25zdCB1aW50OF90KiwgY29uc3QgdWludDhfdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiwgdWludDhfdCosIHB0cmRpZmZfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdCwgY29uc3QgaW50MTZfdCopOwotCi1zdGF0aWMgRmlsdGVyWVVWUm93c1Byb2MgZ19maWx0ZXJfeXV2X3Jvd3NfcHJvY18gPSBOVUxMOwotc3RhdGljIENvbnZlcnRZVVZUb1JHQjMyUm93UHJvYyBnX2NvbnZlcnRfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyA9IE5VTEw7Ci1zdGF0aWMgU2NhbGVZVVZUb1JHQjMyUm93UHJvYyBnX3NjYWxlX3l1dl90b19yZ2IzMl9yb3dfcHJvY18gPSBOVUxMOwotc3RhdGljIFNjYWxlWVVWVG9SR0IzMlJvd1Byb2MgZ19saW5lYXJfc2NhbGVfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyA9IE5VTEw7Ci1zdGF0aWMgQ29udmVydFJHQlRvWVVWUHJvYyBnX2NvbnZlcnRfcmdiMzJfdG9feXV2X3Byb2NfID0gTlVMTDsKLXN0YXRpYyBDb252ZXJ0UkdCVG9ZVVZQcm9jIGdfY29udmVydF9yZ2IyNF90b195dXZfcHJvY18gPSBOVUxMOwotc3RhdGljIENvbnZlcnRZVVZUb1JHQjMyUHJvYyBnX2NvbnZlcnRfeXV2X3RvX3JnYjMyX3Byb2NfID0gTlVMTDsKLXN0YXRpYyBDb252ZXJ0WVVWQVRvQVJHQlByb2MgZ19jb252ZXJ0X3l1dmFfdG9fYXJnYl9wcm9jXyA9IE5VTEw7Ci0KLXN0YXRpYyBjb25zdCBpbnQga1lVVlRvUkdCVGFibGVTaXplID0gMjU2ICogNCAqIDQgKiBzaXplb2YoaW50MTZfdCk7Ci0KLS8vIGJhc2U6OkFsaWduZWRNZW1vcnkgaGFzIGEgcHJpdmF0ZSBvcGVyYXRvciBuZXcoKSwgc28gd3JhcCBpdCBpbiBhIHN0cnVjdCBzbwotLy8gdGhhdCB3ZSBjYW4gcHV0IGl0IGluIGEgTGF6eUluc3RhbmNlOjpEZXN0cnVjdG9yQXRFeGl0Lgotc3RydWN0IFlVVlRvUkdCVGFibGVXcmFwcGVyIHsKLSAgYmFzZTo6QWxpZ25lZE1lbW9yeTxrWVVWVG9SR0JUYWJsZVNpemUsIDE2PiB0YWJsZTsKLX07Ci0KLXR5cGVkZWYgYmFzZTo6TGF6eUluc3RhbmNlPFlVVlRvUkdCVGFibGVXcmFwcGVyPjo6RGVzdHJ1Y3RvckF0RXhpdAotICAgIFlVVlRvUkdCVGFibGU7Ci1zdGF0aWMgWVVWVG9SR0JUYWJsZSBnX3RhYmxlX3JlYzYwMSA9IExBWllfSU5TVEFOQ0VfSU5JVElBTElaRVI7Ci1zdGF0aWMgWVVWVG9SR0JUYWJsZSBnX3RhYmxlX2pwZWcgPSBMQVpZX0lOU1RBTkNFX0lOSVRJQUxJWkVSOwotc3RhdGljIFlVVlRvUkdCVGFibGUgZ190YWJsZV9yZWM3MDkgPSBMQVpZX0lOU1RBTkNFX0lOSVRJQUxJWkVSOwotc3RhdGljIGNvbnN0IGludDE2X3QqIGdfdGFibGVfcmVjNjAxX3B0ciA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgaW50MTZfdCogZ190YWJsZV9qcGVnX3B0ciA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgaW50MTZfdCogZ190YWJsZV9yZWM3MDlfcHRyID0gTlVMTDsKLQotLy8gRW1wdHkgU0lNRCByZWdpc3RlcnMgc3RhdGUgYWZ0ZXIgdXNpbmcgdGhlbS4KLXZvaWQgRW1wdHlSZWdpc3RlclN0YXRlU3R1YigpIHt9Ci0jaWYgZGVmaW5lZChNRURJQV9NTVhfSU5UUklOU0lDU19BVkFJTEFCTEUpCi12b2lkIEVtcHR5UmVnaXN0ZXJTdGF0ZUludHJpbnNpYygpIHsgX21tX2VtcHR5KCk7IH0KLSNlbmRpZgotdHlwZWRlZiB2b2lkICgqRW1wdHlSZWdpc3RlclN0YXRlUHJvYykoKTsKLXN0YXRpYyBFbXB0eVJlZ2lzdGVyU3RhdGVQcm9jIGdfZW1wdHlfcmVnaXN0ZXJfc3RhdGVfcHJvY18gPSBOVUxMOwotCi0vLyBHZXQgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIHRvIGJpdHNoaWZ0IGJ5IGZvciB2ZXJ0aWNhbCBpbmRpY2VzLgotaW50IEdldFZlcnRpY2FsU2hpZnQoWVVWVHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgWVYxNjoKLSAgICAgIHJldHVybiAwOwotICAgIGNhc2UgWVYxMjoKLSAgICBjYXNlIFlWMTJKOgotICAgIGNhc2UgWVYxMkhEOgotICAgICAgcmV0dXJuIDE7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gMDsKLX0KLQotY29uc3QgaW50MTZfdCogR2V0TG9va3VwVGFibGUoWVVWVHlwZSB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgWVYxMjoKLSAgICBjYXNlIFlWMTY6Ci0gICAgICByZXR1cm4gZ190YWJsZV9yZWM2MDFfcHRyOwotICAgIGNhc2UgWVYxMko6Ci0gICAgICByZXR1cm4gZ190YWJsZV9qcGVnX3B0cjsKLSAgICBjYXNlIFlWMTJIRDoKLSAgICAgIHJldHVybiBnX3RhYmxlX3JlYzcwOV9wdHI7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gTlVMTDsKLX0KLQotLy8gUG9wdWxhdGVzIGEgcHJlLWFsbG9jYXRlZCBsb29rdXAgdGFibGUgZnJvbSBhIFlVVi0+UkdCIG1hdHJpeC4KLWNvbnN0IGludDE2X3QqIFBvcHVsYXRlWVVWVG9SR0JUYWJsZShjb25zdCBkb3VibGUgbWF0cml4WzNdWzNdLCBib29sIGZ1bGxfcmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCogdGFibGUpIHsKLSAgLy8gV2UnbGwgaGF2ZSA0IHN1Yi10YWJsZXMgdGhhdCBsaWUgY29udGlndW91cyBpbiBtZW1vcnksIG9uZSBmb3IgZWFjaCBvZiBZLAotICAvLyBVLCBWIGFuZCBBLgotICBjb25zdCBpbnQga051bVRhYmxlcyA9IDQ7Ci0gIC8vIEVhY2ggdGFibGUgaGFzIDI1NiByb3dzIChmb3IgYWxsIHBvc3NpYmxlIDgtYml0IHZhbHVlcykuCi0gIGNvbnN0IGludCBrTnVtUm93cyA9IDI1NjsKLSAgLy8gRWFjaCByb3cgaGFzIDQgY29sdW1ucywgZm9yIGNvbnRyaWJ1dGlvbnMgdG8gZWFjaCBvZiBSLCBHLCBCIGFuZCBBLgotICBjb25zdCBpbnQga051bUNvbHVtbnMgPSA0OwotICAvLyBFYWNoIGVsZW1lbnQgaXMgYSBmaXhlZC1wb2ludCAoMTAuNikgMTYtYml0IHNpZ25lZCB2YWx1ZS4KLSAgY29uc3QgaW50IGtFbGVtZW50U2l6ZSA9IHNpemVvZihpbnQxNl90KTsKLQotICAvLyBTYW5pdHkgY2hlY2sgdGhhdCBvdXIgY29uc3RhbnRzIGhlcmUgbWF0Y2ggdGhlIHNpemUgb2YgdGhlIHN0YXRpY2FsbHkKLSAgLy8gYWxsb2NhdGVkIHRhYmxlcy4KLSAgc3RhdGljX2Fzc2VydCgKLSAgICAgIGtOdW1UYWJsZXMgKiBrTnVtUm93cyAqIGtOdW1Db2x1bW5zICoga0VsZW1lbnRTaXplID09IGtZVVZUb1JHQlRhYmxlU2l6ZSwKLSAgICAgICJZVVYgbG9va3VwIHRhYmxlIHNpemUgZG9lc24ndCBtYXRjaCBleHBlY3RhdGlvbi4iKTsKLQotICAvLyBZIG5lZWRzIGFuIG9mZnNldCBvZiAtMTYgZm9yIGNvbG9yIHJhbmdlcyB0aGF0IGlnbm9yZSB0aGUgbG93ZXIgMTYgdmFsdWVzLAotICAvLyBVIGFuZCBWIGdldCAtMTI4IHRvIHB1dCB0aGVtIGluIFstMTI4LCAxMjddIGZyb20gWzAsIDI1NV0uCi0gIGludCBvZmZzZXRzWzNdID0geyhmdWxsX3JhbmdlID8gMCA6IC0xNiksIC0xMjgsIC0xMjh9OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bVJvd3M7ICsraSkgewotICAgIC8vIFksIFUsIGFuZCBWIGNvbnRyaWJ1dGlvbnMgdG8gZWFjaCBvZiBSLCBHLCBCIGFuZCBBLgotICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgKytqKSB7Ci0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICAgICAgLy8gQW5kcm9pZCBpcyBSR0JBLgotICAgICAgdGFibGVbKGogKiBrTnVtUm93cyArIGkpICoga051bUNvbHVtbnMgKyAwXSA9Ci0gICAgICAgICAgbWF0cml4W2pdWzBdICogNjQgKiAoaSArIG9mZnNldHNbal0pICsgMC41OwotICAgICAgdGFibGVbKGogKiBrTnVtUm93cyArIGkpICoga051bUNvbHVtbnMgKyAxXSA9Ci0gICAgICAgICAgbWF0cml4W2pdWzFdICogNjQgKiAoaSArIG9mZnNldHNbal0pICsgMC41OwotICAgICAgdGFibGVbKGogKiBrTnVtUm93cyArIGkpICoga051bUNvbHVtbnMgKyAyXSA9Ci0gICAgICAgICAgbWF0cml4W2pdWzJdICogNjQgKiAoaSArIG9mZnNldHNbal0pICsgMC41OwotI2Vsc2UKLSAgICAgIC8vIE90aGVyIHBsYXRmb3JtcyBhcmUgQkdSQS4KLSAgICAgIHRhYmxlWyhqICoga051bVJvd3MgKyBpKSAqIGtOdW1Db2x1bW5zICsgMF0gPQotICAgICAgICAgIG1hdHJpeFtqXVsyXSAqIDY0ICogKGkgKyBvZmZzZXRzW2pdKSArIDAuNTsKLSAgICAgIHRhYmxlWyhqICoga051bVJvd3MgKyBpKSAqIGtOdW1Db2x1bW5zICsgMV0gPQotICAgICAgICAgIG1hdHJpeFtqXVsxXSAqIDY0ICogKGkgKyBvZmZzZXRzW2pdKSArIDAuNTsKLSAgICAgIHRhYmxlWyhqICoga051bVJvd3MgKyBpKSAqIGtOdW1Db2x1bW5zICsgMl0gPQotICAgICAgICAgIG1hdHJpeFtqXVswXSAqIDY0ICogKGkgKyBvZmZzZXRzW2pdKSArIDAuNTsKLSNlbmRpZgotICAgICAgLy8gQWxwaGEgY29udHJpYnV0aW9ucyBmcm9tIFkgYW5kIFYgYXJlIGFsd2F5cyAwLiBVIGlzIHNldCBzdWNoIHRoYXQKLSAgICAgIC8vIGFsbCB2YWx1ZXMgcmVzdWx0IGluIGEgZnVsbCAnMjU1JyBhbHBoYSB2YWx1ZS4KLSAgICAgIHRhYmxlWyhqICoga051bVJvd3MgKyBpKSAqIGtOdW1Db2x1bW5zICsgM10gPSAoaiA9PSAxKSA/IDI1NiAqIDY0IC0gMSA6IDA7Ci0gICAgfQotICAgIC8vIEFuZCBZVVZBIGFscGhhIGlzIHBhc3NlZCB0aHJvdWdoIGFzLWlzLgotICAgIGZvciAoaW50IGsgPSAwOyBrIDwga051bVRhYmxlczsgKytrKQotICAgICAgdGFibGVbKChrTnVtVGFibGVzIC0gMSkgKiBrTnVtUm93cyArIGkpICoga051bUNvbHVtbnMgKyBrXSA9IGk7Ci0gIH0KLQotICByZXR1cm4gdGFibGU7Ci19Ci0KLXZvaWQgSW5pdGlhbGl6ZUNQVVNwZWNpZmljWVVWQ29udmVyc2lvbnMoKSB7Ci0gIENIRUNLKCFnX2ZpbHRlcl95dXZfcm93c19wcm9jXyk7Ci0gIENIRUNLKCFnX2NvbnZlcnRfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyk7Ci0gIENIRUNLKCFnX3NjYWxlX3l1dl90b19yZ2IzMl9yb3dfcHJvY18pOwotICBDSEVDSyghZ19saW5lYXJfc2NhbGVfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyk7Ci0gIENIRUNLKCFnX2NvbnZlcnRfcmdiMzJfdG9feXV2X3Byb2NfKTsKLSAgQ0hFQ0soIWdfY29udmVydF9yZ2IyNF90b195dXZfcHJvY18pOwotICBDSEVDSyghZ19jb252ZXJ0X3l1dl90b19yZ2IzMl9wcm9jXyk7Ci0gIENIRUNLKCFnX2NvbnZlcnRfeXV2YV90b19hcmdiX3Byb2NfKTsKLSAgQ0hFQ0soIWdfZW1wdHlfcmVnaXN0ZXJfc3RhdGVfcHJvY18pOwotCi0gIGdfZmlsdGVyX3l1dl9yb3dzX3Byb2NfID0gRmlsdGVyWVVWUm93c19DOwotICBnX2NvbnZlcnRfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyA9IENvbnZlcnRZVVZUb1JHQjMyUm93X0M7Ci0gIGdfc2NhbGVfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyA9IFNjYWxlWVVWVG9SR0IzMlJvd19DOwotICBnX2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiMzJfcm93X3Byb2NfID0gTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X0M7Ci0gIGdfY29udmVydF9yZ2IzMl90b195dXZfcHJvY18gPSBDb252ZXJ0UkdCMzJUb1lVVl9DOwotICBnX2NvbnZlcnRfcmdiMjRfdG9feXV2X3Byb2NfID0gQ29udmVydFJHQjI0VG9ZVVZfQzsKLSAgZ19jb252ZXJ0X3l1dl90b19yZ2IzMl9wcm9jXyA9IENvbnZlcnRZVVZUb1JHQjMyX0M7Ci0gIGdfY29udmVydF95dXZhX3RvX2FyZ2JfcHJvY18gPSBDb252ZXJ0WVVWQVRvQVJHQl9DOwotICBnX2VtcHR5X3JlZ2lzdGVyX3N0YXRlX3Byb2NfID0gRW1wdHlSZWdpc3RlclN0YXRlU3R1YjsKLQotLy8gQXNzZW1ibHkgY29kZSBjb25mdXNlcyBNZW1vcnlTYW5pdGl6ZXIuIEFsc28gbm90IGF2YWlsYWJsZSBpbiBpT1MgYnVpbGRzLgotI2lmIGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkgJiYgIWRlZmluZWQoTUVNT1JZX1NBTklUSVpFUikgJiYgXAotICAgICFkZWZpbmVkKE9TX0lPUykKLSAgZ19jb252ZXJ0X3l1dmFfdG9fYXJnYl9wcm9jXyA9IENvbnZlcnRZVVZBVG9BUkdCX01NWDsKLQotI2lmIGRlZmluZWQoTUVESUFfTU1YX0lOVFJJTlNJQ1NfQVZBSUxBQkxFKQotICBnX2VtcHR5X3JlZ2lzdGVyX3N0YXRlX3Byb2NfID0gRW1wdHlSZWdpc3RlclN0YXRlSW50cmluc2ljOwotI2Vsc2UKLSAgZ19lbXB0eV9yZWdpc3Rlcl9zdGF0ZV9wcm9jXyA9IEVtcHR5UmVnaXN0ZXJTdGF0ZV9NTVg7Ci0jZW5kaWYKLQotICBnX2NvbnZlcnRfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyA9IENvbnZlcnRZVVZUb1JHQjMyUm93X1NTRTsKLSAgZ19jb252ZXJ0X3l1dl90b19yZ2IzMl9wcm9jXyA9IENvbnZlcnRZVVZUb1JHQjMyX1NTRTsKLQotICBnX2ZpbHRlcl95dXZfcm93c19wcm9jXyA9IEZpbHRlcllVVlJvd3NfU1NFMjsKLSAgZ19jb252ZXJ0X3JnYjMyX3RvX3l1dl9wcm9jXyA9IENvbnZlcnRSR0IzMlRvWVVWX1NTRTI7Ci0KLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl82NCkKLSAgZ19zY2FsZV95dXZfdG9fcmdiMzJfcm93X3Byb2NfID0gU2NhbGVZVVZUb1JHQjMyUm93X1NTRTJfWDY0OwotCi0gIC8vIFRlY2huaWNhbGx5IHRoaXMgc2hvdWxkIGJlIGluIHRoZSBNTVggc2VjdGlvbiwgYnV0IE1TVkMgd2lsbCBvcHRpbWl6ZSBvdXQKLSAgLy8gdGhlIGV4cG9ydCBvZiBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfTU1YLCB3aGljaCBpcyByZXF1aXJlZCBieSB0aGUgdW5pdAotICAvLyB0ZXN0cywgaWYgdGhhdCBkZWNpc2lvbiBjYW4gYmUgbWFkZSBhdCBjb21waWxlIHRpbWUuICBTaW5jZSBhbGwgWDY0IENQVXMKLSAgLy8gaGF2ZSBTU0UyLCB3ZSBjYW4gaGFjayBhcm91bmQgdGhpcyBieSBtYWtpbmcgdGhlIHNlbGVjdGlvbiBoZXJlLgotICBnX2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiMzJfcm93X3Byb2NfID0gTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X01NWF9YNjQ7Ci0jZWxzZQotICBnX3NjYWxlX3l1dl90b19yZ2IzMl9yb3dfcHJvY18gPSBTY2FsZVlVVlRvUkdCMzJSb3dfU1NFOwotICBnX2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiMzJfcm93X3Byb2NfID0gTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X1NTRTsKLSNlbmRpZgotCi0gIGJhc2U6OkNQVSBjcHU7Ci0gIGlmIChjcHUuaGFzX3Nzc2UzKCkpIHsKLSAgICBnX2NvbnZlcnRfcmdiMjRfdG9feXV2X3Byb2NfID0gJkNvbnZlcnRSR0IyNFRvWVVWX1NTU0UzOwotCi0gICAgLy8gVE9ETyhoY2xhbSk6IEFkZCBDb252ZXJ0UkdCMzJUb1lVVl9TU1NFMyB3aGVuIHRoZSBjeWFuIHByb2JsZW0gaXMgc29sdmVkLgotICAgIC8vIFNlZTogY3JidWcuY29tLzEwMDQ2MgotICB9Ci0jZW5kaWYKLQotICAvLyBJbml0aWFsaXplIFlVViBjb252ZXJzaW9uIGxvb2t1cCB0YWJsZXMuCi0KLSAgLy8gU0QgUmVjNjAxIFlVVi0+UkdCIG1hdHJpeCwgc2VlIGh0dHA6Ly93d3cuZm91cmNjLm9yZy9mY2N5dnJnYi5waHAKLSAgY29uc3QgZG91YmxlIGtSZWM2MDFDb252ZXJ0TWF0cml4WzNdWzNdID0gewotICAgICAgezEuMTY0LCAxLjE2NCwgMS4xNjR9LCB7MC4wLCAtMC4zOTEsIDIuMDE4fSwgezEuNTk2LCAtMC44MTMsIDAuMH0sCi0gIH07Ci0KLSAgLy8gSlBFRyB0YWJsZSwgdmFsdWVzIGZyb20gYWJvdmUgbGluay4KLSAgY29uc3QgZG91YmxlIGtKUEVHQ29udmVydE1hdHJpeFszXVszXSA9IHsKLSAgICAgIHsxLjAsIDEuMCwgMS4wfSwgezAuMCwgLTAuMzQ0MTQsIDEuNzcyfSwgezEuNDAyLCAtMC43MTQxNCwgMC4wfSwKLSAgfTsKLQotICAvLyBSZWM3MDkgIkhEIiBjb2xvciBzcGFjZSwgdmFsdWVzIGZyb206Ci0gIC8vIGh0dHA6Ly93d3cuZXF1YXN5cy5kZS9jb2xvcmNvbnZlcnNpb24uaHRtbAotICBjb25zdCBkb3VibGUga1JlYzcwOUNvbnZlcnRNYXRyaXhbM11bM10gPSB7Ci0gICAgICB7MS4xNjQsIDEuMTY0LCAxLjE2NH0sIHswLjAsIC0wLjIxMywgMi4xMTJ9LCB7MS43OTMsIC0wLjUzMywgMC4wfSwKLSAgfTsKLQotICBQb3B1bGF0ZVlVVlRvUkdCVGFibGUoa1JlYzYwMUNvbnZlcnRNYXRyaXgsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgZ190YWJsZV9yZWM2MDEuR2V0KCkudGFibGUuZGF0YV9hczxpbnQxNl90PigpKTsKLSAgUG9wdWxhdGVZVVZUb1JHQlRhYmxlKGtKUEVHQ29udmVydE1hdHJpeCwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfdGFibGVfanBlZy5HZXQoKS50YWJsZS5kYXRhX2FzPGludDE2X3Q+KCkpOwotICBQb3B1bGF0ZVlVVlRvUkdCVGFibGUoa1JlYzcwOUNvbnZlcnRNYXRyaXgsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgZ190YWJsZV9yZWM3MDkuR2V0KCkudGFibGUuZGF0YV9hczxpbnQxNl90PigpKTsKLSAgZ190YWJsZV9yZWM2MDFfcHRyID0gZ190YWJsZV9yZWM2MDEuR2V0KCkudGFibGUuZGF0YV9hczxpbnQxNl90PigpOwotICBnX3RhYmxlX3JlYzcwOV9wdHIgPSBnX3RhYmxlX3JlYzcwOS5HZXQoKS50YWJsZS5kYXRhX2FzPGludDE2X3Q+KCk7Ci0gIGdfdGFibGVfanBlZ19wdHIgPSBnX3RhYmxlX2pwZWcuR2V0KCkudGFibGUuZGF0YV9hczxpbnQxNl90PigpOwotfQotCi0vLyBFbXB0eSBTSU1EIHJlZ2lzdGVycyBzdGF0ZSBhZnRlciB1c2luZyB0aGVtLgotdm9pZCBFbXB0eVJlZ2lzdGVyU3RhdGUoKSB7IGdfZW1wdHlfcmVnaXN0ZXJfc3RhdGVfcHJvY18oKTsgfQotCi0vLyAxNi4xNiBmaXhlZCBwb2ludCBhcml0aG1ldGljCi1jb25zdCBpbnQga0ZyYWN0aW9uQml0cyA9IDE2OwotY29uc3QgaW50IGtGcmFjdGlvbk1heCA9IDEgPDwga0ZyYWN0aW9uQml0czsKLWNvbnN0IGludCBrRnJhY3Rpb25NYXNrID0gKCgxIDw8IGtGcmFjdGlvbkJpdHMpIC0gMSk7Ci0KLS8vIFNjYWxlIGEgZnJhbWUgb2YgWVVWIHRvIDMyIGJpdCBBUkdCLgotdm9pZCBTY2FsZVlVVlRvUkdCMzIoY29uc3QgdWludDhfdCogeV9idWYsIGNvbnN0IHVpbnQ4X3QqIHVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdl9idWYsIHVpbnQ4X3QqIHJnYl9idWYsIGludCBzb3VyY2Vfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlX2hlaWdodCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgeV9waXRjaCwKLSAgICAgICAgICAgICAgICAgICAgIGludCB1dl9waXRjaCwgaW50IHJnYl9waXRjaCwgWVVWVHlwZSB5dXZfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIFJvdGF0ZSB2aWV3X3JvdGF0ZSwgU2NhbGVGaWx0ZXIgZmlsdGVyKSB7Ci0gIC8vIEhhbmRsZSB6ZXJvIHNpemVkIHNvdXJjZXMgYW5kIGRlc3RpbmF0aW9ucy4KLSAgaWYgKCh5dXZfdHlwZSA9PSBZVjEyICYmIChzb3VyY2Vfd2lkdGggPCAyIHx8IHNvdXJjZV9oZWlnaHQgPCAyKSkgfHwKLSAgICAgICh5dXZfdHlwZSA9PSBZVjE2ICYmIChzb3VyY2Vfd2lkdGggPCAyIHx8IHNvdXJjZV9oZWlnaHQgPCAxKSkgfHwKLSAgICAgIHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgcmV0dXJuOwotCi0gIGNvbnN0IGludDE2X3QqIGxvb2t1cF90YWJsZSA9IEdldExvb2t1cFRhYmxlKHl1dl90eXBlKTsKLQotICAvLyA0MDk2IGFsbG93cyAzIGJ1ZmZlcnMgdG8gZml0IGluIDEyay4KLSAgLy8gSGVscHMgcGVyZm9ybWFuY2Ugb24gQ1BVIHdpdGggMTZLIEwxIGNhY2hlLgotICAvLyBMYXJnZSBlbm91Z2ggZm9yIDM4MzB4MjE2MCBhbmQgMzAiIGRpc3BsYXlzIHdoaWNoIGFyZSAyNTYweDE2MDAuCi0gIGNvbnN0IGludCBrRmlsdGVyQnVmZmVyU2l6ZSA9IDQwOTY7Ci0gIC8vIERpc2FibGUgZmlsdGVyaW5nIGlmIHRoZSBzY3JlZW4gaXMgdG9vIGJpZyAodG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cykuCi0gIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiB0byByZWd1bGFyIHVzZXJzOiB0aGV5IGRvbid0IGhhdmUgbW9uaXRvcnMKLSAgLy8gd2lkZXIgdGhhbiA0MDk2IHBpeGVscy4KLSAgLy8gVE9ETyhmYmFyY2hhcmQpOiBBbGxvdyByb3RhdGVkIHZpZGVvcyB0byBmaWx0ZXIuCi0gIGlmIChzb3VyY2Vfd2lkdGggPiBrRmlsdGVyQnVmZmVyU2l6ZSB8fCB2aWV3X3JvdGF0ZSkgZmlsdGVyID0gRklMVEVSX05PTkU7Ci0KLSAgdW5zaWduZWQgaW50IHlfc2hpZnQgPSBHZXRWZXJ0aWNhbFNoaWZ0KHl1dl90eXBlKTsKLSAgLy8gRGlhZ3JhbSBzaG93aW5nIG9yaWdpbiBhbmQgZGlyZWN0aW9uIG9mIHNvdXJjZSBzYW1wbGluZy4KLSAgLy8gLT4wICAgNDwtCi0gIC8vIDcgICAgICAgMwotICAvLwotICAvLyA2ICAgICAgIDUKLSAgLy8gLT4xICAgMjwtCi0gIC8vIFJvdGF0aW9ucyB0aGF0IHN0YXJ0IGF0IHJpZ2h0IHNpZGUgb2YgaW1hZ2UuCi0gIGlmICgodmlld19yb3RhdGUgPT0gUk9UQVRFXzE4MCkgfHwgKHZpZXdfcm90YXRlID09IFJPVEFURV8yNzApIHx8Ci0gICAgICAodmlld19yb3RhdGUgPT0gTUlSUk9SX1JPVEFURV8wKSB8fCAodmlld19yb3RhdGUgPT0gTUlSUk9SX1JPVEFURV85MCkpIHsKLSAgICB5X2J1ZiArPSBzb3VyY2Vfd2lkdGggLSAxOwotICAgIHVfYnVmICs9IHNvdXJjZV93aWR0aCAvIDIgLSAxOwotICAgIHZfYnVmICs9IHNvdXJjZV93aWR0aCAvIDIgLSAxOwotICAgIHNvdXJjZV93aWR0aCA9IC1zb3VyY2Vfd2lkdGg7Ci0gIH0KLSAgLy8gUm90YXRpb25zIHRoYXQgc3RhcnQgYXQgYm90dG9tIG9mIGltYWdlLgotICBpZiAoKHZpZXdfcm90YXRlID09IFJPVEFURV85MCkgfHwgKHZpZXdfcm90YXRlID09IFJPVEFURV8xODApIHx8Ci0gICAgICAodmlld19yb3RhdGUgPT0gTUlSUk9SX1JPVEFURV85MCkgfHwgKHZpZXdfcm90YXRlID09IE1JUlJPUl9ST1RBVEVfMTgwKSkgewotICAgIHlfYnVmICs9IChzb3VyY2VfaGVpZ2h0IC0gMSkgKiB5X3BpdGNoOwotICAgIHVfYnVmICs9ICgoc291cmNlX2hlaWdodCA+PiB5X3NoaWZ0KSAtIDEpICogdXZfcGl0Y2g7Ci0gICAgdl9idWYgKz0gKChzb3VyY2VfaGVpZ2h0ID4+IHlfc2hpZnQpIC0gMSkgKiB1dl9waXRjaDsKLSAgICBzb3VyY2VfaGVpZ2h0ID0gLXNvdXJjZV9oZWlnaHQ7Ci0gIH0KLQotICBpbnQgc291cmNlX2R4ID0gc291cmNlX3dpZHRoICoga0ZyYWN0aW9uTWF4IC8gd2lkdGg7Ci0KLSAgaWYgKCh2aWV3X3JvdGF0ZSA9PSBST1RBVEVfOTApIHx8ICh2aWV3X3JvdGF0ZSA9PSBST1RBVEVfMjcwKSkgewotICAgIGludCB0bXAgPSBoZWlnaHQ7Ci0gICAgaGVpZ2h0ID0gd2lkdGg7Ci0gICAgd2lkdGggPSB0bXA7Ci0gICAgdG1wID0gc291cmNlX2hlaWdodDsKLSAgICBzb3VyY2VfaGVpZ2h0ID0gc291cmNlX3dpZHRoOwotICAgIHNvdXJjZV93aWR0aCA9IHRtcDsKLSAgICBpbnQgc291cmNlX2R5ID0gc291cmNlX2hlaWdodCAqIGtGcmFjdGlvbk1heCAvIGhlaWdodDsKLSAgICBzb3VyY2VfZHggPSAoKHNvdXJjZV9keSA+PiBrRnJhY3Rpb25CaXRzKSAqIHlfcGl0Y2gpIDw8IGtGcmFjdGlvbkJpdHM7Ci0gICAgaWYgKHZpZXdfcm90YXRlID09IFJPVEFURV85MCkgewotICAgICAgeV9waXRjaCA9IC0xOwotICAgICAgdXZfcGl0Y2ggPSAtMTsKLSAgICAgIHNvdXJjZV9oZWlnaHQgPSAtc291cmNlX2hlaWdodDsKLSAgICB9IGVsc2UgewotICAgICAgeV9waXRjaCA9IDE7Ci0gICAgICB1dl9waXRjaCA9IDE7Ci0gICAgfQotICB9Ci0KLSAgLy8gTmVlZCBwYWRkaW5nIGJlY2F1c2UgRmlsdGVyUm93cygpIHdpbGwgd3JpdGUgMSB0byAxNiBleHRyYSBwaXhlbHMKLSAgLy8gYWZ0ZXIgdGhlIGVuZCBmb3IgU1NFMiB2ZXJzaW9uLgotICB1aW50OF90IHl1dmJ1ZlsxNiArIGtGaWx0ZXJCdWZmZXJTaXplICogMyArIDE2XTsKLSAgdWludDhfdCogeWJ1ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KAotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHl1dmJ1ZiArIDE1KSAmIH4xNSk7Ci0gIHVpbnQ4X3QqIHVidWYgPSB5YnVmICsga0ZpbHRlckJ1ZmZlclNpemU7Ci0gIHVpbnQ4X3QqIHZidWYgPSB1YnVmICsga0ZpbHRlckJ1ZmZlclNpemU7Ci0KLSAgLy8gVE9ETyhmYmFyY2hhcmQpOiBGaXhlZCBwb2ludCBtYXRoIGlzIG9mZiBieSAxIG9uIG5lZ2F0aXZlcy4KLQotICAvLyBXZSB0YWtlIGEgeS1jb29yZGluYXRlIGluIFswLDFdIHNwYWNlIGluIHRoZSBzb3VyY2UgaW1hZ2Ugc3BhY2UsIGFuZAotICAvLyB0cmFuc2Zvcm0gdG8gYSB5LWNvb3JkaW5hdGUgaW4gWzAsMV0gc3BhY2UgaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlIHNwYWNlLgotICAvLyBOb3RlIHRoYXQgdGhlIGNvb3JkaW5hdGUgZW5kcG9pbnRzIGxpZSBvbiBwaXhlbCBib3VuZGFyaWVzLCBub3Qgb24gcGl4ZWwKLSAgLy8gY2VudGVyczogZS5nLiBhIHR3by1waXhlbC1oaWdoIGltYWdlIHdpbGwgaGF2ZSBwaXhlbCBjZW50ZXJzIGF0IDAuMjUgYW5kCi0gIC8vIDAuNzUuICBUaGUgZm9ybXVsYSBpcyBhcyBmb2xsb3dzIChpbiBmaXhlZC1wb2ludCBhcml0aG1ldGljKToKLSAgLy8gICB5X2RzdCA9IGRzdF9oZWlnaHQgKiAoKHlfc3JjICsgMC41KSAvIHNyY19oZWlnaHQpCi0gIC8vICAgZHN0X3BpeGVsID0gY2xhbXAoWzAsIGRzdF9oZWlnaHQgLSAxXSwgZmxvb3IoeV9kc3QgLSAwLjUpKQotICAvLyBJbXBsZW1lbnQgdGhpcyBoZXJlIGFzIGFuIGFjY3VtdWxhdG9yICsgZGVsdGEsIHRvIGF2b2lkIGV4cGVuc2l2ZSBtYXRoCi0gIC8vIGluIHRoZSBsb29wLgotICBpbnQgc291cmNlX3lfc3VicGl4ZWxfYWNjdW0gPQotICAgICAgKChrRnJhY3Rpb25NYXggLyAyKSAqIHNvdXJjZV9oZWlnaHQpIC8gaGVpZ2h0IC0gKGtGcmFjdGlvbk1heCAvIDIpOwotICBpbnQgc291cmNlX3lfc3VicGl4ZWxfZGVsdGEgPSAoKDEgPDwga0ZyYWN0aW9uQml0cykgKiBzb3VyY2VfaGVpZ2h0KSAvIGhlaWdodDsKLQotICAvLyBUT0RPKGZiYXJjaGFyZCk6IFNwbGl0IHRoaXMgaW50byBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgYmV0dGVyIGVmZmljaWVuY3kuCi0gIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICB1aW50OF90KiBkZXN0X3BpeGVsID0gcmdiX2J1ZiArIHkgKiByZ2JfcGl0Y2g7Ci0gICAgaW50IHNvdXJjZV95X3N1YnBpeGVsID0gc291cmNlX3lfc3VicGl4ZWxfYWNjdW07Ci0gICAgc291cmNlX3lfc3VicGl4ZWxfYWNjdW0gKz0gc291cmNlX3lfc3VicGl4ZWxfZGVsdGE7Ci0gICAgaWYgKHNvdXJjZV95X3N1YnBpeGVsIDwgMCkKLSAgICAgIHNvdXJjZV95X3N1YnBpeGVsID0gMDsKLSAgICBlbHNlIGlmIChzb3VyY2VfeV9zdWJwaXhlbCA+ICgoc291cmNlX2hlaWdodCAtIDEpIDw8IGtGcmFjdGlvbkJpdHMpKQotICAgICAgc291cmNlX3lfc3VicGl4ZWwgPSAoc291cmNlX2hlaWdodCAtIDEpIDw8IGtGcmFjdGlvbkJpdHM7Ci0KLSAgICBjb25zdCB1aW50OF90KiB5X3B0ciA9IE5VTEw7Ci0gICAgY29uc3QgdWludDhfdCogdV9wdHIgPSBOVUxMOwotICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRyID0gTlVMTDsKLSAgICAvLyBBcHBseSB2ZXJ0aWNhbCBmaWx0ZXJpbmcgaWYgbmVjZXNzYXJ5LgotICAgIC8vIFRPRE8oZmJhcmNoYXJkKTogUmVtb3ZlIG1lbWNweSB3aGVuIG5vdCBuZWNlc3NhcnkuCi0gICAgaWYgKGZpbHRlciAmIG1lZGlhOjpGSUxURVJfQklMSU5FQVJfVikgewotICAgICAgaW50IHNvdXJjZV95ID0gc291cmNlX3lfc3VicGl4ZWwgPj4ga0ZyYWN0aW9uQml0czsKLSAgICAgIHlfcHRyID0geV9idWYgKyBzb3VyY2VfeSAqIHlfcGl0Y2g7Ci0gICAgICB1X3B0ciA9IHVfYnVmICsgKHNvdXJjZV95ID4+IHlfc2hpZnQpICogdXZfcGl0Y2g7Ci0gICAgICB2X3B0ciA9IHZfYnVmICsgKHNvdXJjZV95ID4+IHlfc2hpZnQpICogdXZfcGl0Y2g7Ci0KLSAgICAgIC8vIFZlcnRpY2FsIHNjYWxlciB1c2VzIDE2LjggZml4ZWQgcG9pbnQuCi0gICAgICB1aW50OF90IHNvdXJjZV95X2ZyYWN0aW9uID0gKHNvdXJjZV95X3N1YnBpeGVsICYga0ZyYWN0aW9uTWFzaykgPj4gODsKLSAgICAgIGlmIChzb3VyY2VfeV9mcmFjdGlvbiAhPSAwKSB7Ci0gICAgICAgIGdfZmlsdGVyX3l1dl9yb3dzX3Byb2NfKHlidWYsIHlfcHRyLCB5X3B0ciArIHlfcGl0Y2gsIHNvdXJjZV93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3lfZnJhY3Rpb24pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbWVtY3B5KHlidWYsIHlfcHRyLCBzb3VyY2Vfd2lkdGgpOwotICAgICAgfQotICAgICAgeV9wdHIgPSB5YnVmOwotICAgICAgeWJ1Zltzb3VyY2Vfd2lkdGhdID0geWJ1Zltzb3VyY2Vfd2lkdGggLSAxXTsKLQotICAgICAgaW50IHV2X3NvdXJjZV93aWR0aCA9IChzb3VyY2Vfd2lkdGggKyAxKSAvIDI7Ci0gICAgICB1aW50OF90IHNvdXJjZV91dl9mcmFjdGlvbjsKLQotICAgICAgLy8gRm9yIGZvcm1hdHMgd2l0aCBoYWxmLWhlaWdodCBVViBwbGFuZXMsIGVhY2ggZXZlbi1udW1iZXJlZCBwaXhlbCByb3cKLSAgICAgIC8vIHNob3VsZCBub3QgaW50ZXJwb2xhdGUsIHNpbmNlIHRoZSBuZXh0IHJvdyB0byBpbnRlcnBvbGF0ZSBmcm9tIHNob3VsZAotICAgICAgLy8gYmUgYSBkdXBsaWNhdGUgb2YgdGhlIGN1cnJlbnQgcm93LgotICAgICAgaWYgKHlfc2hpZnQgJiYgKHNvdXJjZV95ICYgMHgxKSA9PSAwKQotICAgICAgICBzb3VyY2VfdXZfZnJhY3Rpb24gPSAwOwotICAgICAgZWxzZQotICAgICAgICBzb3VyY2VfdXZfZnJhY3Rpb24gPSBzb3VyY2VfeV9mcmFjdGlvbjsKLQotICAgICAgaWYgKHNvdXJjZV91dl9mcmFjdGlvbiAhPSAwKSB7Ci0gICAgICAgIGdfZmlsdGVyX3l1dl9yb3dzX3Byb2NfKHVidWYsIHVfcHRyLCB1X3B0ciArIHV2X3BpdGNoLCB1dl9zb3VyY2Vfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV91dl9mcmFjdGlvbik7Ci0gICAgICAgIGdfZmlsdGVyX3l1dl9yb3dzX3Byb2NfKHZidWYsIHZfcHRyLCB2X3B0ciArIHV2X3BpdGNoLCB1dl9zb3VyY2Vfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV91dl9mcmFjdGlvbik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtZW1jcHkodWJ1ZiwgdV9wdHIsIHV2X3NvdXJjZV93aWR0aCk7Ci0gICAgICAgIG1lbWNweSh2YnVmLCB2X3B0ciwgdXZfc291cmNlX3dpZHRoKTsKLSAgICAgIH0KLSAgICAgIHVfcHRyID0gdWJ1ZjsKLSAgICAgIHZfcHRyID0gdmJ1ZjsKLSAgICAgIHVidWZbdXZfc291cmNlX3dpZHRoXSA9IHVidWZbdXZfc291cmNlX3dpZHRoIC0gMV07Ci0gICAgICB2YnVmW3V2X3NvdXJjZV93aWR0aF0gPSB2YnVmW3V2X3NvdXJjZV93aWR0aCAtIDFdOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBPZmZzZXQgYnkgMS8yIHBpeGVsIGZvciBjZW50ZXIgc2FtcGxpbmcuCi0gICAgICBpbnQgc291cmNlX3kgPSAoc291cmNlX3lfc3VicGl4ZWwgKyAoa0ZyYWN0aW9uTWF4IC8gMikpID4+IGtGcmFjdGlvbkJpdHM7Ci0gICAgICB5X3B0ciA9IHlfYnVmICsgc291cmNlX3kgKiB5X3BpdGNoOwotICAgICAgdV9wdHIgPSB1X2J1ZiArIChzb3VyY2VfeSA+PiB5X3NoaWZ0KSAqIHV2X3BpdGNoOwotICAgICAgdl9wdHIgPSB2X2J1ZiArIChzb3VyY2VfeSA+PiB5X3NoaWZ0KSAqIHV2X3BpdGNoOwotICAgIH0KLSAgICBpZiAoc291cmNlX2R4ID09IGtGcmFjdGlvbk1heCkgeyAgLy8gTm90IHNjYWxlZAotICAgICAgZ19jb252ZXJ0X3l1dl90b19yZ2IzMl9yb3dfcHJvY18oeV9wdHIsIHVfcHRyLCB2X3B0ciwgZGVzdF9waXhlbCwgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBfdGFibGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZmlsdGVyICYgRklMVEVSX0JJTElORUFSX0gpIHsKLSAgICAgICAgZ19saW5lYXJfc2NhbGVfeXV2X3RvX3JnYjMyX3Jvd19wcm9jXyh5X3B0ciwgdV9wdHIsIHZfcHRyLCBkZXN0X3BpeGVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBzb3VyY2VfZHgsIGxvb2t1cF90YWJsZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnX3NjYWxlX3l1dl90b19yZ2IzMl9yb3dfcHJvY18oeV9wdHIsIHVfcHRyLCB2X3B0ciwgZGVzdF9waXhlbCwgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZHgsIGxvb2t1cF90YWJsZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZ19lbXB0eV9yZWdpc3Rlcl9zdGF0ZV9wcm9jXygpOwotfQotCi0vLyBTY2FsZSBhIGZyYW1lIG9mIFlWMTIgdG8gMzIgYml0IEFSR0IgZm9yIGEgc3BlY2lmaWMgcmVjdGFuZ2xlLgotdm9pZCBTY2FsZVlVVlRvUkdCMzJXaXRoUmVjdChjb25zdCB1aW50OF90KiB5X2J1ZiwgY29uc3QgdWludDhfdCogdV9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfYnVmLCB1aW50OF90KiByZ2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlX3dpZHRoLCBpbnQgc291cmNlX2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfcmVjdF9sZWZ0LCBpbnQgZGVzdF9yZWN0X3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfcmVjdF9yaWdodCwgaW50IGRlc3RfcmVjdF9ib3R0b20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB5X3BpdGNoLCBpbnQgdXZfcGl0Y2gsIGludCByZ2JfcGl0Y2gpIHsKLSAgLy8gVGhpcyByb3V0aW5lIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgdXAtc2NhbGluZy4KLSAgQ0hFQ0tfTEUoZGVzdF93aWR0aCwgc291cmNlX3dpZHRoKTsKLSAgQ0hFQ0tfTEUoZGVzdF9oZWlnaHQsIHNvdXJjZV9oZWlnaHQpOwotCi0gIC8vIFNhbml0eS1jaGVjayB0aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlLgotICBEQ0hFQ0soZGVzdF9yZWN0X2xlZnQgPj0gMCAmJiBkZXN0X3JlY3RfcmlnaHQgPD0gZGVzdF93aWR0aCk7Ci0gIERDSEVDSyhkZXN0X3JlY3RfdG9wID49IDAgJiYgZGVzdF9yZWN0X2JvdHRvbSA8PSBkZXN0X2hlaWdodCk7Ci0gIERDSEVDSyhkZXN0X3JlY3RfcmlnaHQgPiBkZXN0X3JlY3RfbGVmdCk7Ci0gIERDSEVDSyhkZXN0X3JlY3RfYm90dG9tID4gZGVzdF9yZWN0X3RvcCk7Ci0KLSAgY29uc3QgaW50MTZfdCogbG9va3VwX3RhYmxlID0gR2V0TG9va3VwVGFibGUoWVYxMik7Ci0KLSAgLy8gRml4ZWQtcG9pbnQgdmFsdWUgb2YgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2NhbGUgZG93biBmYWN0b3IuCi0gIC8vIFZhbHVlcyBhcmUgaW4gdGhlIGZvcm1hdCAxNi4xNi4KLSAgaW50IHlfc3RlcCA9IGtGcmFjdGlvbk1heCAqIHNvdXJjZV9oZWlnaHQgLyBkZXN0X2hlaWdodDsKLSAgaW50IHhfc3RlcCA9IGtGcmFjdGlvbk1heCAqIHNvdXJjZV93aWR0aCAvIGRlc3Rfd2lkdGg7Ci0KLSAgLy8gRGV0ZXJtaW5lIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVjdGFuZ2xlIGluIDE2LjE2IGNvb3Jkcy4KLSAgLy8gTkI6IE91ciBvcmlnaW4gaXMgdGhlICpjZW50ZXIqIG9mIHRoZSB0b3AvbGVmdCBwaXhlbCwgTk9UIGl0cyB0b3AvbGVmdC4KLSAgLy8gSWYgd2UncmUgZG93bi1zY2FsaW5nIGJ5IG1vcmUgdGhhbiBhIGZhY3RvciBvZiB0d28sIHdlIHN0YXJ0IHdpdGggYSA1MCUKLSAgLy8gZnJhY3Rpb24gdG8gYXZvaWQgZGVnZW5lcmF0aW5nIHRvIHBvaW50LXNhbXBsaW5nIC0gd2Ugc2hvdWxkIHJlYWxseSBqdXN0Ci0gIC8vIGZpeCB0aGUgZnJhY3Rpb24gYXQgNTAlIGZvciBhbGwgcGl4ZWxzIGluIHRoYXQgY2FzZS4KLSAgaW50IHNvdXJjZV9sZWZ0ID0gZGVzdF9yZWN0X2xlZnQgKiB4X3N0ZXA7Ci0gIGludCBzb3VyY2VfcmlnaHQgPSAoZGVzdF9yZWN0X3JpZ2h0IC0gMSkgKiB4X3N0ZXA7Ci0gIGlmICh4X3N0ZXAgPCBrRnJhY3Rpb25NYXggKiAyKSB7Ci0gICAgc291cmNlX2xlZnQgKz0gKCh4X3N0ZXAgLSBrRnJhY3Rpb25NYXgpIC8gMik7Ci0gICAgc291cmNlX3JpZ2h0ICs9ICgoeF9zdGVwIC0ga0ZyYWN0aW9uTWF4KSAvIDIpOwotICB9IGVsc2UgewotICAgIHNvdXJjZV9sZWZ0ICs9IGtGcmFjdGlvbk1heCAvIDI7Ci0gICAgc291cmNlX3JpZ2h0ICs9IGtGcmFjdGlvbk1heCAvIDI7Ci0gIH0KLSAgaW50IHNvdXJjZV90b3AgPSBkZXN0X3JlY3RfdG9wICogeV9zdGVwOwotICBpZiAoeV9zdGVwIDwga0ZyYWN0aW9uTWF4ICogMikgewotICAgIHNvdXJjZV90b3AgKz0gKCh5X3N0ZXAgLSBrRnJhY3Rpb25NYXgpIC8gMik7Ci0gIH0gZWxzZSB7Ci0gICAgc291cmNlX3RvcCArPSBrRnJhY3Rpb25NYXggLyAyOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIHRoZSBwYXJ0cyBvZiB0aGUgWSwgVSBhbmQgViBidWZmZXJzIHRvIGludGVycG9sYXRlLgotICBpbnQgc291cmNlX3lfbGVmdCA9IHNvdXJjZV9sZWZ0ID4+IGtGcmFjdGlvbkJpdHM7Ci0gIGludCBzb3VyY2VfeV9yaWdodCA9Ci0gICAgICBzdGQ6Om1pbigoc291cmNlX3JpZ2h0ID4+IGtGcmFjdGlvbkJpdHMpICsgMiwgc291cmNlX3dpZHRoICsgMSk7Ci0KLSAgaW50IHNvdXJjZV91dl9sZWZ0ID0gc291cmNlX3lfbGVmdCAvIDI7Ci0gIGludCBzb3VyY2VfdXZfcmlnaHQgPSBzdGQ6Om1pbigoc291cmNlX3JpZ2h0ID4+IChrRnJhY3Rpb25CaXRzICsgMSkpICsgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2Vfd2lkdGggKyAxKSAvIDIpOwotCi0gIGludCBzb3VyY2VfeV93aWR0aCA9IHNvdXJjZV95X3JpZ2h0IC0gc291cmNlX3lfbGVmdDsKLSAgaW50IHNvdXJjZV91dl93aWR0aCA9IHNvdXJjZV91dl9yaWdodCAtIHNvdXJjZV91dl9sZWZ0OwotCi0gIC8vIERldGVybWluZSBudW1iZXIgb2YgcGl4ZWxzIGluIGVhY2ggb3V0cHV0IHJvdy4KLSAgaW50IGRlc3RfcmVjdF93aWR0aCA9IGRlc3RfcmVjdF9yaWdodCAtIGRlc3RfcmVjdF9sZWZ0OwotCi0gIC8vIEludGVybWVkaWF0ZSBidWZmZXIgZm9yIHZlcnRpY2FsIGludGVycG9sYXRpb24uCi0gIC8vIDQwOTYgYnl0ZXMgYWxsb3dzIDMgYnVmZmVycyB0byBmaXQgaW4gMTJrLCB3aGljaCBmaXRzIGluIGEgMTZLIEwxIGNhY2hlLAotICAvLyBhbmQgaXMgYmlnZ2VyIHRoYW4gbW9zdCB1c2VycyB3aWxsIGdlbmVyYWxseSBuZWVkLgotICAvLyBUaGUgYnVmZmVyIGlzIDE2LWJ5dGUgYWxpZ25lZCBhbmQgcGFkZGVkIHdpdGggMTYgZXh0cmEgYnl0ZXM7IHNvbWUgb2YgdGhlCi0gIC8vIEZpbHRlcllVVlJvd3NQcm9jcyBoYXZlIGFsaWdubWVudCByZXF1aXJlbWVudHMsIGFuZCB0aGUgU1NFIHZlcnNpb24gY2FuCi0gIC8vIHdyaXRlIHVwIHRvIDE2IGJ5dGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICBjb25zdCBpbnQga0ZpbHRlckJ1ZmZlclNpemUgPSA0MDk2OwotICBjb25zdCBib29sIGtBdm9pZFVzaW5nT3B0aW1pemVkRmlsdGVyID0gc291cmNlX3dpZHRoID4ga0ZpbHRlckJ1ZmZlclNpemU7Ci0gIHVpbnQ4X3QgeXV2X3RlbXBbMTYgKyBrRmlsdGVyQnVmZmVyU2l6ZSAqIDMgKyAxNl07Ci0gIC8vIG1lbXNldCgpIHl1dl90ZW1wIHRvIDAgdG8gYXZvaWQgYm9ndXMgd2FybmluZ3Mgd2hlbiBydW5uaW5nIG9uIFZhbGdyaW5kLgotICBpZiAoUnVubmluZ09uVmFsZ3JpbmQoKSkgbWVtc2V0KHl1dl90ZW1wLCAwLCBzaXplb2YoeXV2X3RlbXApKTsKLSAgdWludDhfdCogeV90ZW1wID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oCi0gICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oeXV2X3RlbXAgKyAxNSkgJiB+MTUpOwotICB1aW50OF90KiB1X3RlbXAgPSB5X3RlbXAgKyBrRmlsdGVyQnVmZmVyU2l6ZTsKLSAgdWludDhfdCogdl90ZW1wID0gdV90ZW1wICsga0ZpbHRlckJ1ZmZlclNpemU7Ci0KLSAgLy8gTW92ZSB0byB0aGUgdG9wLWxlZnQgcGl4ZWwgb2Ygb3V0cHV0LgotICByZ2JfYnVmICs9IGRlc3RfcmVjdF90b3AgKiByZ2JfcGl0Y2g7Ci0gIHJnYl9idWYgKz0gZGVzdF9yZWN0X2xlZnQgKiA0OwotCi0gIC8vIEZvciBlYWNoIGRlc3RpbmF0aW9uIHJvdyBwZXJmb3JtIGludGVycG9sYXRpb24gYW5kIGNvbG9yIHNwYWNlCi0gIC8vIGNvbnZlcnNpb24gdG8gcHJvZHVjZSB0aGUgb3V0cHV0LgotICBmb3IgKGludCByb3cgPSBkZXN0X3JlY3RfdG9wOyByb3cgPCBkZXN0X3JlY3RfYm90dG9tOyArK3JvdykgewotICAgIC8vIFJvdW5kIHRoZSBmaXhlZC1wb2ludCB5IHBvc2l0aW9uIHRvIGdldCB0aGUgY3VycmVudCByb3cuCi0gICAgaW50IHNvdXJjZV9yb3cgPSBzb3VyY2VfdG9wID4+IGtGcmFjdGlvbkJpdHM7Ci0gICAgaW50IHNvdXJjZV91dl9yb3cgPSBzb3VyY2Vfcm93IC8gMjsKLSAgICBEQ0hFQ0soc291cmNlX3JvdyA8IHNvdXJjZV9oZWlnaHQpOwotCi0gICAgLy8gTG9jYXRlIHRoZSBmaXJzdCByb3cgZm9yIGVhY2ggcGxhbmUgZm9yIGludGVycG9sYXRpb24uCi0gICAgY29uc3QgdWludDhfdCogeTBfcHRyID0geV9idWYgKyB5X3BpdGNoICogc291cmNlX3JvdyArIHNvdXJjZV95X2xlZnQ7Ci0gICAgY29uc3QgdWludDhfdCogdTBfcHRyID0gdV9idWYgKyB1dl9waXRjaCAqIHNvdXJjZV91dl9yb3cgKyBzb3VyY2VfdXZfbGVmdDsKLSAgICBjb25zdCB1aW50OF90KiB2MF9wdHIgPSB2X2J1ZiArIHV2X3BpdGNoICogc291cmNlX3V2X3JvdyArIHNvdXJjZV91dl9sZWZ0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHkxX3B0ciA9IE5VTEw7Ci0gICAgY29uc3QgdWludDhfdCogdTFfcHRyID0gTlVMTDsKLSAgICBjb25zdCB1aW50OF90KiB2MV9wdHIgPSBOVUxMOwotCi0gICAgLy8gTG9jYXRlIHRoZSBzZWNvbmQgcm93IGZvciBpbnRlcnBvbGF0aW9uLCBiZWluZyBjYXJlZnVsIG5vdCB0byBvdmVycnVuLgotICAgIGlmIChzb3VyY2Vfcm93ICsgMSA+PSBzb3VyY2VfaGVpZ2h0KSB7Ci0gICAgICB5MV9wdHIgPSB5MF9wdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHkxX3B0ciA9IHkwX3B0ciArIHlfcGl0Y2g7Ci0gICAgfQotICAgIGlmIChzb3VyY2VfdXZfcm93ICsgMSA+PSAoc291cmNlX2hlaWdodCArIDEpIC8gMikgewotICAgICAgdTFfcHRyID0gdTBfcHRyOwotICAgICAgdjFfcHRyID0gdjBfcHRyOwotICAgIH0gZWxzZSB7Ci0gICAgICB1MV9wdHIgPSB1MF9wdHIgKyB1dl9waXRjaDsKLSAgICAgIHYxX3B0ciA9IHYwX3B0ciArIHV2X3BpdGNoOwotICAgIH0KLQotICAgIGlmICgha0F2b2lkVXNpbmdPcHRpbWl6ZWRGaWx0ZXIpIHsKLSAgICAgIC8vIFZlcnRpY2FsIHNjYWxlciB1c2VzIDE2LjggZml4ZWQgcG9pbnQuCi0gICAgICB1aW50OF90IGZyYWN0aW9uID0gKHNvdXJjZV90b3AgJiBrRnJhY3Rpb25NYXNrKSA+PiA4OwotICAgICAgZ19maWx0ZXJfeXV2X3Jvd3NfcHJvY18oeV90ZW1wICsgc291cmNlX3lfbGVmdCwgeTBfcHRyLCB5MV9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfeV93aWR0aCwgZnJhY3Rpb24pOwotICAgICAgZ19maWx0ZXJfeXV2X3Jvd3NfcHJvY18odV90ZW1wICsgc291cmNlX3V2X2xlZnQsIHUwX3B0ciwgdTFfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3V2X3dpZHRoLCBmcmFjdGlvbik7Ci0gICAgICBnX2ZpbHRlcl95dXZfcm93c19wcm9jXyh2X3RlbXAgKyBzb3VyY2VfdXZfbGVmdCwgdjBfcHRyLCB2MV9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdXZfd2lkdGgsIGZyYWN0aW9uKTsKLQotICAgICAgLy8gUGVyZm9ybSBob3Jpem9udGFsIGludGVycG9sYXRpb24gYW5kIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24uCi0gICAgICAvLyBUT0RPKGhjbGFtKTogVXNlIHRoZSBNTVggdmVyc2lvbiBhZnRlciBtb3JlIHRlc3RpbmcuCi0gICAgICBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dXaXRoUmFuZ2VfQyh5X3RlbXAsIHVfdGVtcCwgdl90ZW1wLCByZ2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yZWN0X3dpZHRoLCBzb3VyY2VfbGVmdCwgeF9zdGVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwX3RhYmxlKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHRvbyBsYXJnZSB0aGVuIHdlIGxpbmVhciBzY2FsZSBhIHNpbmdsZSByb3cuCi0gICAgICBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dXaXRoUmFuZ2VfQyh5MF9wdHIsIHUwX3B0ciwgdjBfcHRyLCByZ2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yZWN0X3dpZHRoLCBzb3VyY2VfbGVmdCwgeF9zdGVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwX3RhYmxlKTsKLSAgICB9Ci0KLSAgICAvLyBBZHZhbmNlIHZlcnRpY2FsbHkgaW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW1hZ2UuCi0gICAgc291cmNlX3RvcCArPSB5X3N0ZXA7Ci0gICAgcmdiX2J1ZiArPSByZ2JfcGl0Y2g7Ci0gIH0KLQotICBnX2VtcHR5X3JlZ2lzdGVyX3N0YXRlX3Byb2NfKCk7Ci19Ci0KLXZvaWQgQ29udmVydFJHQjMyVG9ZVVYoY29uc3QgdWludDhfdCogcmdiZnJhbWUsIHVpbnQ4X3QqIHlwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdXBsYW5lLCB1aW50OF90KiB2cGxhbmUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHJnYnN0cmlkZSwgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSkgewotICBnX2NvbnZlcnRfcmdiMzJfdG9feXV2X3Byb2NfKHJnYmZyYW1lLCB5cGxhbmUsIHVwbGFuZSwgdnBsYW5lLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYnN0cmlkZSwgeXN0cmlkZSwgdXZzdHJpZGUpOwotfQotCi12b2lkIENvbnZlcnRSR0IyNFRvWVVWKGNvbnN0IHVpbnQ4X3QqIHJnYmZyYW1lLCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIHVwbGFuZSwgdWludDhfdCogdnBsYW5lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCByZ2JzdHJpZGUsIGludCB5c3RyaWRlLCBpbnQgdXZzdHJpZGUpIHsKLSAgZ19jb252ZXJ0X3JnYjI0X3RvX3l1dl9wcm9jXyhyZ2JmcmFtZSwgeXBsYW5lLCB1cGxhbmUsIHZwbGFuZSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JzdHJpZGUsIHlzdHJpZGUsIHV2c3RyaWRlKTsKLX0KLQotdm9pZCBDb252ZXJ0WVVWVG9SR0IzMihjb25zdCB1aW50OF90KiB5cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdnBsYW5lLCB1aW50OF90KiByZ2JmcmFtZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlLCBpbnQgcmdic3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICBZVVZUeXBlIHl1dl90eXBlKSB7Ci0gIGdfY29udmVydF95dXZfdG9fcmdiMzJfcHJvY18oeXBsYW5lLCB1cGxhbmUsIHZwbGFuZSwgcmdiZnJhbWUsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXN0cmlkZSwgdXZzdHJpZGUsIHJnYnN0cmlkZSwgeXV2X3R5cGUpOwotfQotCi12b2lkIENvbnZlcnRZVVZBVG9BUkdCKGNvbnN0IHVpbnQ4X3QqIHlwbGFuZSwgY29uc3QgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIGFwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogcmdiZnJhbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCB1dnN0cmlkZSwgaW50IGFzdHJpZGUsIGludCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIFlVVlR5cGUgeXV2X3R5cGUpIHsKLSAgZ19jb252ZXJ0X3l1dmFfdG9fYXJnYl9wcm9jXyh5cGxhbmUsIHVwbGFuZSwgdnBsYW5lLCBhcGxhbmUsIHJnYmZyYW1lLCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsIHlzdHJpZGUsIHV2c3RyaWRlLCBhc3RyaWRlLCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X3R5cGUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmggYi9jb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTk0NjMyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfQkFTRV9ZVVZfQ09OVkVSVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfQkFTRV9ZVVZfQ09OVkVSVF9IXwotCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLS8vIFZpc3VhbCBTdHVkaW8gMjAxMCBkb2VzIG5vdCBzdXBwb3J0IE1NWCBpbnRyaW5zaWNzIG9uIHg2NC4KLS8vIFNvbWUgd2luNjQgeXV2X2NvbnZlcnQgY29kZSBwYXRocyB1c2UgU1NFK01NWCB5YXNtLCBzbyB3aXRob3V0IHJld3JpdGluZwotLy8gdGhlbSwgd2UgdXNlIHlhc20gRW1wdHlSZWdpc3RlclN0YXRlX01NWCBpbiBwbGFjZSBvZiBfbW1fZW1wdHkoKSBvcgotLy8gaGlkZSB0aGUgdmVyc2lvbnMgaW1wbGVtZW50ZWQgd2l0aCBoZWF2eSB1c2Ugb2YgTU1YIGludHJpbnNpY3MuCi0vLyBUT0RPKHdvbGVuZXR6KTogVXNlIE1NWCBpbnRyaW5zaWNzIHdoZW4gY29tcGlsaW5nIHdpbjY0IHdpdGggVmlzdWFsCi0vLyBTdHVkaW8gMjAxMj8gaHR0cDovL2NyYnVnLmNvbS8xNzM0NTAKLSNpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpICYmIFwKLSAgICAhKGRlZmluZWQoQVJDSF9DUFVfWDg2XzY0KSAmJiBkZWZpbmVkKENPTVBJTEVSX01TVkMpKQotI2RlZmluZSBNRURJQV9NTVhfSU5UUklOU0lDU19BVkFJTEFCTEUKLSNlbmRpZgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFR5cGUgb2YgWVVWIHN1cmZhY2UuCi1lbnVtIFlVVlR5cGUgewotICBZVjE2ID0gMCwgICAgLy8gWVYxNiBpcyBoYWxmIHdpZHRoIGFuZCBmdWxsIGhlaWdodCBjaHJvbWEgY2hhbm5lbHMuCi0gIFlWMTIgPSAxLCAgICAvLyBZVjEyIGlzIGhhbGYgd2lkdGggYW5kIGhhbGYgaGVpZ2h0IGNocm9tYSBjaGFubmVscy4KLSAgWVYxMkogPSAyLCAgIC8vIFlWMTJKIGlzIHRoZSBzYW1lIGFzIFlWMTIsIGJ1dCBpbiBKUEVHIGNvbG9yIHJhbmdlLgotICBZVjEySEQgPSAzLCAgLy8gWVYxMkhEIGlzIHRoZSBzYW1lIGFzIFlWMTIsIGJ1dCBpbiAnSEQnIFJlYzcwOSBjb2xvciBzcGFjZS4KLX07Ci0KLS8vIEdldCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgdG8gYml0c2hpZnQgYnkgZm9yIHZlcnRpY2FsIGluZGljZXMuCi1NRURJQV9FWFBPUlQgaW50IEdldFZlcnRpY2FsU2hpZnQoWVVWVHlwZSB0eXBlKTsKLQotLy8gR2V0IHRoZSBhcHByb3ByaWF0ZSBsb29rdXAgdGFibGUgZm9yIGEgZ2l2ZW4gWVVWIGZvcm1hdC4KLU1FRElBX0VYUE9SVCBjb25zdCBpbnQxNl90KiBHZXRMb29rdXBUYWJsZShZVVZUeXBlIHR5cGUpOwotCi0vLyBNaXJyb3IgbWVhbnMgZmxpcCB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5LCBhcyBpbiBsb29raW5nIGluIGEgbWlycm9yLgotLy8gUm90YXRlIGhhcHBlbnMgYWZ0ZXIgbWlycm9yaW5nLgotZW51bSBSb3RhdGUgewotICBST1RBVEVfMCwgICAgICAgICAgIC8vIFJvdGF0aW9uIG9mZi4KLSAgUk9UQVRFXzkwLCAgICAgICAgICAvLyBSb3RhdGUgY2xvY2t3aXNlLgotICBST1RBVEVfMTgwLCAgICAgICAgIC8vIFJvdGF0ZSB1cHNpZGUgZG93bi4KLSAgUk9UQVRFXzI3MCwgICAgICAgICAvLyBSb3RhdGUgY291bnRlciBjbG9ja3dpc2UuCi0gIE1JUlJPUl9ST1RBVEVfMCwgICAgLy8gTWlycm9yIGhvcml6b250YWxseS4KLSAgTUlSUk9SX1JPVEFURV85MCwgICAvLyBNaXJyb3IgdGhlbiBSb3RhdGUgY2xvY2t3aXNlLgotICBNSVJST1JfUk9UQVRFXzE4MCwgIC8vIE1pcnJvciB2ZXJ0aWNhbGx5LgotICBNSVJST1JfUk9UQVRFXzI3MCwgIC8vIFRyYW5zcG9zZS4KLX07Ci0KLS8vIEZpbHRlciBhZmZlY3RzIGhvdyBzY2FsaW5nIGxvb2tzLgotZW51bSBTY2FsZUZpbHRlciB7Ci0gIEZJTFRFUl9OT05FID0gMCwgICAgICAgIC8vIE5vIGZpbHRlciAocG9pbnQgc2FtcGxlZCkuCi0gIEZJTFRFUl9CSUxJTkVBUl9IID0gMSwgIC8vIEJpbGluZWFyIGhvcml6b250YWwgZmlsdGVyLgotICBGSUxURVJfQklMSU5FQVJfViA9IDIsICAvLyBCaWxpbmVhciB2ZXJ0aWNhbCBmaWx0ZXIuCi0gIEZJTFRFUl9CSUxJTkVBUiA9IDMsICAgIC8vIEJpbGluZWFyIGZpbHRlci4KLX07Ci0KLU1FRElBX0VYUE9SVCB2b2lkIEluaXRpYWxpemVDUFVTcGVjaWZpY1lVVkNvbnZlcnNpb25zKCk7Ci0KLS8vIENvbnZlcnQgYSBmcmFtZSBvZiBZVVYgdG8gMzIgYml0IEFSR0IuCi0vLyBQYXNzIGluIFlWMTYvWVYxMiBkZXBlbmRpbmcgb24gc291cmNlIGZvcm1hdAotTUVESUFfRVhQT1JUIHZvaWQgQ29udmVydFlVVlRvUkdCMzIoY29uc3QgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogdnBsYW5lLCB1aW50OF90KiByZ2JmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXZzdHJpZGUsIGludCByZ2JzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZVVZUeXBlIHl1dl90eXBlKTsKLQotLy8gQ29udmVydCBhIGZyYW1lIG9mIFlVVkEgdG8gMzIgYml0IEFSR0IuCi0vLyBQYXNzIGluIFlWMTJBCi1NRURJQV9FWFBPUlQgdm9pZCBDb252ZXJ0WVVWQVRvQVJHQigKLSAgICBjb25zdCB1aW50OF90KiB5cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwgY29uc3QgdWludDhfdCogdnBsYW5lLAotICAgIGNvbnN0IHVpbnQ4X3QqIGFwbGFuZSwgdWludDhfdCogcmdiZnJhbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICBpbnQgeXN0cmlkZSwgaW50IHV2c3RyaWRlLCBpbnQgYXN0cmlkZSwgaW50IHJnYnN0cmlkZSwgWVVWVHlwZSB5dXZfdHlwZSk7Ci0KLS8vIFNjYWxlIGEgZnJhbWUgb2YgWVVWIHRvIDMyIGJpdCBBUkdCLgotLy8gU3VwcG9ydHMgcm90YXRpb24gYW5kIG1pcnJvcmluZy4KLU1FRElBX0VYUE9SVCB2b2lkIFNjYWxlWVVWVG9SR0IzMihjb25zdCB1aW50OF90KiB5cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHVwbGFuZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiB2cGxhbmUsIHVpbnQ4X3QqIHJnYmZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2Vfd2lkdGgsIGludCBzb3VyY2VfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlLCBpbnQgcmdic3RyaWRlLCBZVVZUeXBlIHl1dl90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdGF0ZSB2aWV3X3JvdGF0ZSwgU2NhbGVGaWx0ZXIgZmlsdGVyKTsKLQotLy8gQmlsaW5lYXIgU2NhbGUgYSBmcmFtZSBvZiBZVjEyIHRvIDMyIGJpdHMgQVJHQiBvbiBhIHNwZWNpZmllZCByZWN0YW5nbGUuCi0vLyB8eXBsYW5lfCwgZXRjIGFuZCB8cmdiZnJhbWV8IHNob3VsZCBwb2ludCB0byB0aGUgdG9wLWxlZnQgcGl4ZWxzIG9mIHRoZQotLy8gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBidWZmZXJzLgotTUVESUFfRVhQT1JUIHZvaWQgU2NhbGVZVVZUb1JHQjMyV2l0aFJlY3QoCi0gICAgY29uc3QgdWludDhfdCogeXBsYW5lLCBjb25zdCB1aW50OF90KiB1cGxhbmUsIGNvbnN0IHVpbnQ4X3QqIHZwbGFuZSwKLSAgICB1aW50OF90KiByZ2JmcmFtZSwgaW50IHNvdXJjZV93aWR0aCwgaW50IHNvdXJjZV9oZWlnaHQsIGludCBkZXN0X3dpZHRoLAotICAgIGludCBkZXN0X2hlaWdodCwgaW50IGRlc3RfcmVjdF9sZWZ0LCBpbnQgZGVzdF9yZWN0X3RvcCwgaW50IGRlc3RfcmVjdF9yaWdodCwKLSAgICBpbnQgZGVzdF9yZWN0X2JvdHRvbSwgaW50IHlzdHJpZGUsIGludCB1dnN0cmlkZSwgaW50IHJnYnN0cmlkZSk7Ci0KLU1FRElBX0VYUE9SVCB2b2lkIENvbnZlcnRSR0IzMlRvWVVWKGNvbnN0IHVpbnQ4X3QqIHJnYmZyYW1lLCB1aW50OF90KiB5cGxhbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiB1cGxhbmUsIHVpbnQ4X3QqIHZwbGFuZSwgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgaW50IHJnYnN0cmlkZSwgaW50IHlzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXZzdHJpZGUpOwotCi1NRURJQV9FWFBPUlQgdm9pZCBDb252ZXJ0UkdCMjRUb1lVVihjb25zdCB1aW50OF90KiByZ2JmcmFtZSwgdWludDhfdCogeXBsYW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogdXBsYW5lLCB1aW50OF90KiB2cGxhbmUsIGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIGludCByZ2JzdHJpZGUsIGludCB5c3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHV2c3RyaWRlKTsKLQotLy8gRW1wdHkgU0lNRCByZWdpc3RlciBzdGF0ZSBhZnRlciBjYWxsaW5nIG9wdGltaXplZCBzY2FsZXIgZnVuY3Rpb25zLgotTUVESUFfRVhQT1JUIHZvaWQgRW1wdHlSZWdpc3RlclN0YXRlKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9CQVNFX1lVVl9DT05WRVJUX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydF9wZXJmdGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0X3BlcmZ0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJmOTcyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0X3BlcmZ0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzZV9wYXRocy5oIgotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY3B1LmgiCi0jaW5jbHVkZSAiYmFzZS9maWxlcy9maWxlX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3BhdGhfc2VydmljZS5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS95dXZfY29udmVydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotI2luY2x1ZGUgInRlc3RpbmcvcGVyZi9wZXJmX3Rlc3QuaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvcm93LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLSNpZiAhZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiAhZGVmaW5lZChBUkNIX0NQVV9NSVBTX0ZBTUlMWSkKLS8vIFNpemUgb2YgcmF3IGltYWdlLgotc3RhdGljIGNvbnN0IGludCBrU291cmNlV2lkdGggPSA2NDA7Ci1zdGF0aWMgY29uc3QgaW50IGtTb3VyY2VIZWlnaHQgPSAzNjA7Ci1zdGF0aWMgY29uc3QgaW50IGtTb3VyY2VZU2l6ZSA9IGtTb3VyY2VXaWR0aCAqIGtTb3VyY2VIZWlnaHQ7Ci1zdGF0aWMgY29uc3QgaW50IGtTb3VyY2VVT2Zmc2V0ID0ga1NvdXJjZVlTaXplOwotc3RhdGljIGNvbnN0IGludCBrU291cmNlVk9mZnNldCA9IGtTb3VyY2VZU2l6ZSAqIDUgLyA0Owotc3RhdGljIGNvbnN0IGludCBrQnBwID0gNDsKLQotLy8gV2lkdGggb2YgdGhlIHJvdyB0byBjb252ZXJ0LiBPZGQgc28gdGhhdCB3ZSBleGVyY2lzZSB0aGUgZW5kaW5nCi0vLyBvbmUtcGl4ZWwtbGVmdG92ZXIgY2FzZS4KLXN0YXRpYyBjb25zdCBpbnQga1dpZHRoID0gNjM5OwotCi0vLyBTdXJmYWNlIHNpemVzIGZvciB2YXJpb3VzIHRlc3QgZmlsZXMuCi1zdGF0aWMgY29uc3QgaW50IGtZVVYxMlNpemUgPSBrU291cmNlWVNpemUgKiAxMiAvIDg7Ci1zdGF0aWMgY29uc3QgaW50IGtSR0JTaXplID0ga1NvdXJjZVlTaXplICoga0JwcDsKLQotc3RhdGljIGNvbnN0IGludCBrUGVyZlRlc3RJdGVyYXRpb25zID0gMjAwMDsKLQotY2xhc3MgWVVWQ29udmVydFBlcmZUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgWVVWQ29udmVydFBlcmZUZXN0KCkKLSAgICAgIDogeXV2X2J5dGVzXyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSksCi0gICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWRfKG5ldyB1aW50OF90W2tSR0JTaXplXSkgewotICAgIGJhc2U6OkZpbGVQYXRoIHBhdGg7Ci0gICAgQ0hFQ0soYmFzZTo6UGF0aFNlcnZpY2U6OkdldChiYXNlOjpESVJfVEVTVF9EQVRBLCAmcGF0aCkpOwotICAgIHBhdGggPSBwYXRoLkFwcGVuZChGSUxFX1BBVEhfTElURVJBTCgibWVkaWEiKSkKLSAgICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoInRlc3QiKSkKLSAgICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoImRhdGEiKSkKLSAgICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoImJhbGlfNjQweDM2MF9QNDIwLnl1diIpKTsKLQotICAgIC8vIFZlcmlmeSBmaWxlIHNpemUgaXMgY29ycmVjdC4KLSAgICBpbnQ2NF90IGFjdHVhbF9zaXplID0gMDsKLSAgICBiYXNlOjpHZXRGaWxlU2l6ZShwYXRoLCAmYWN0dWFsX3NpemUpOwotICAgIENIRUNLX0VRKGFjdHVhbF9zaXplLCBrWVVWMTJTaXplKTsKLQotICAgIC8vIFZlcmlmeSBieXRlcyByZWFkIGFyZSBjb3JyZWN0LgotICAgIGludCBieXRlc19yZWFkID0gYmFzZTo6UmVhZEZpbGUoCi0gICAgICAgIHBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHl1dl9ieXRlc18uZ2V0KCkpLCBrWVVWMTJTaXplKTsKLQotICAgIENIRUNLX0VRKGJ5dGVzX3JlYWQsIGtZVVYxMlNpemUpOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2J5dGVzXzsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzX2NvbnZlcnRlZF87Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oWVVWQ29udmVydFBlcmZUZXN0KTsKLX07Ci0KLVRFU1RfRihZVVZDb252ZXJ0UGVyZlRlc3QsIENvbnZlcnRZVVZUb1JHQjMyUm93X1NTRSkgewotICBBU1NFUlRfVFJVRShiYXNlOjpDUFUoKS5oYXNfc3NlKCkpOwotCi0gIGJhc2U6OlRpbWVUaWNrcyBzdGFydCA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1BlcmZUZXN0SXRlcmF0aW9uczsgKytpKSB7Ci0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwga1NvdXJjZUhlaWdodDsgKytyb3cpIHsKLSAgICAgIGludCBjaHJvbWFfcm93ID0gcm93IC8gMjsKLSAgICAgIENvbnZlcnRZVVZUb1JHQjMyUm93X1NTRSgKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVU9mZnNldCArIChjaHJvbWFfcm93ICoga1NvdXJjZVdpZHRoIC8gMiksCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0ICsgKGNocm9tYV9yb3cgKiBrU291cmNlV2lkdGggLyAyKSwKLSAgICAgICAgICByZ2JfYnl0ZXNfY29udmVydGVkXy5nZXQoKSwga1dpZHRoLCBHZXRMb29rdXBUYWJsZShZVjEyKSk7Ci0gICAgfQotICB9Ci0gIG1lZGlhOjpFbXB0eVJlZ2lzdGVyU3RhdGUoKTsKLSAgZG91YmxlIHRvdGFsX3RpbWVfc2Vjb25kcyA9IChiYXNlOjpUaW1lVGlja3M6Ok5vdygpIC0gc3RhcnQpLkluU2Vjb25kc0YoKTsKLSAgcGVyZl90ZXN0OjpQcmludFJlc3VsdCgieXV2X2NvbnZlcnRfcGVyZnRlc3QiLCAiIiwgIkNvbnZlcnRZVVZUb1JHQjMyUm93X1NTRSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAga1BlcmZUZXN0SXRlcmF0aW9ucyAvIHRvdGFsX3RpbWVfc2Vjb25kcywgInJ1bnMvcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci19Ci0KLSNpZmRlZiBIQVNfSTQyMlRPQVJHQlJPV19TU1NFMwotVEVTVF9GKFlVVkNvbnZlcnRQZXJmVGVzdCwgSTQyMlRvQVJHQlJvd19TU1NFMykgewotICBBU1NFUlRfVFJVRShiYXNlOjpDUFUoKS5oYXNfc3NzZTMoKSk7Ci0KLSAgYmFzZTo6VGltZVRpY2tzIHN0YXJ0ID0gYmFzZTo6VGltZVRpY2tzOjpOb3coKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrUGVyZlRlc3RJdGVyYXRpb25zOyArK2kpIHsKLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBrU291cmNlSGVpZ2h0OyArK3JvdykgewotICAgICAgaW50IGNocm9tYV9yb3cgPSByb3cgLyAyOwotICAgICAgbGlieXV2OjpJNDIyVG9BUkdCUm93X1NTU0UzKAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyByb3cgKiBrU291cmNlV2lkdGgsCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0ICsgKGNocm9tYV9yb3cgKiBrU291cmNlV2lkdGggLyAyKSwKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsga1NvdXJjZVZPZmZzZXQgKyAoY2hyb21hX3JvdyAqIGtTb3VyY2VXaWR0aCAvIDIpLAotICAgICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWRfLmdldCgpLCAmbGlieXV2OjprWXV2STYwMUNvbnN0YW50cywga1dpZHRoKTsKLSAgICB9Ci0gIH0KLSAgZG91YmxlIHRvdGFsX3RpbWVfc2Vjb25kcyA9IChiYXNlOjpUaW1lVGlja3M6Ok5vdygpIC0gc3RhcnQpLkluU2Vjb25kc0YoKTsKLSAgcGVyZl90ZXN0OjpQcmludFJlc3VsdCgieXV2X2NvbnZlcnRfcGVyZnRlc3QiLCAiIiwgIkk0MjJUb0FSR0JSb3dfU1NTRTMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtQZXJmVGVzdEl0ZXJhdGlvbnMgLyB0b3RhbF90aW1lX3NlY29uZHMsICJydW5zL3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotfQotI2VuZGlmCi0KLVRFU1RfRihZVVZDb252ZXJ0UGVyZlRlc3QsIENvbnZlcnRZVVZBVG9BUkdCUm93X01NWCkgewotICBBU1NFUlRfVFJVRShiYXNlOjpDUFUoKS5oYXNfc3NlKCkpOwotCi0gIGJhc2U6OlRpbWVUaWNrcyBzdGFydCA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1BlcmZUZXN0SXRlcmF0aW9uczsgKytpKSB7Ci0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwga1NvdXJjZUhlaWdodDsgKytyb3cpIHsKLSAgICAgIGludCBjaHJvbWFfcm93ID0gcm93IC8gMjsKLSAgICAgIENvbnZlcnRZVVZBVG9BUkdCUm93X01NWCgKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVU9mZnNldCArIChjaHJvbWFfcm93ICoga1NvdXJjZVdpZHRoIC8gMiksCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0ICsgKGNocm9tYV9yb3cgKiBrU291cmNlV2lkdGggLyAyKSwKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLCAgLy8gaGFjazogdXNlIGx1bWEgZm9yIGFscGhhCi0gICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZF8uZ2V0KCksIGtXaWR0aCwgR2V0TG9va3VwVGFibGUoWVYxMikpOwotICAgIH0KLSAgfQotICBtZWRpYTo6RW1wdHlSZWdpc3RlclN0YXRlKCk7Ci0gIGRvdWJsZSB0b3RhbF90aW1lX3NlY29uZHMgPSAoYmFzZTo6VGltZVRpY2tzOjpOb3coKSAtIHN0YXJ0KS5JblNlY29uZHNGKCk7Ci0gIHBlcmZfdGVzdDo6UHJpbnRSZXN1bHQoInl1dl9jb252ZXJ0X3BlcmZ0ZXN0IiwgIiIsICJDb252ZXJ0WVVWQVRvQVJHQlJvd19NTVgiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtQZXJmVGVzdEl0ZXJhdGlvbnMgLyB0b3RhbF90aW1lX3NlY29uZHMsICJydW5zL3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotfQotCi0jaWZkZWYgSEFTX0k0MjJBTFBIQVRPQVJHQlJPV19TU1NFMwotVEVTVF9GKFlVVkNvbnZlcnRQZXJmVGVzdCwgSTQyMkFscGhhVG9BUkdCUm93X1NTU0UzKSB7Ci0gIEFTU0VSVF9UUlVFKGJhc2U6OkNQVSgpLmhhc19zc3NlMygpKTsKLQotICBiYXNlOjpUaW1lVGlja3Mgc3RhcnQgPSBiYXNlOjpUaW1lVGlja3M6Ok5vdygpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtQZXJmVGVzdEl0ZXJhdGlvbnM7ICsraSkgewotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGtTb3VyY2VIZWlnaHQ7ICsrcm93KSB7Ci0gICAgICBpbnQgY2hyb21hX3JvdyA9IHJvdyAvIDI7Ci0gICAgICBsaWJ5dXY6Okk0MjJBbHBoYVRvQVJHQlJvd19TU1NFMygKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVU9mZnNldCArIChjaHJvbWFfcm93ICoga1NvdXJjZVdpZHRoIC8gMiksCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0ICsgKGNocm9tYV9yb3cgKiBrU291cmNlV2lkdGggLyAyKSwKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLCAgLy8gaGFjazogdXNlIGx1bWEgZm9yIGFscGhhCi0gICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZF8uZ2V0KCksICZsaWJ5dXY6OmtZdXZJNjAxQ29uc3RhbnRzLCBrV2lkdGgpOwotICAgIH0KLSAgfQotICBkb3VibGUgdG90YWxfdGltZV9zZWNvbmRzID0gKGJhc2U6OlRpbWVUaWNrczo6Tm93KCkgLSBzdGFydCkuSW5TZWNvbmRzRigpOwotICBwZXJmX3Rlc3Q6OlByaW50UmVzdWx0KCJ5dXZfY29udmVydF9wZXJmdGVzdCIsICIiLCAiSTQyMkFscGhhVG9BUkdCUm93X1NTU0UzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBrUGVyZlRlc3RJdGVyYXRpb25zIC8gdG90YWxfdGltZV9zZWNvbmRzLCAicnVucy9zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLX0KLSNlbmRpZgotCi0vLyA2NC1iaXQgcmVsZWFzZSArIGNvbXBvbmVudCBidWlsZHMgb24gV2luZG93cyBhcmUgdG9vIHNtYXJ0IGFuZCBvcHRpbWl6ZXMKLS8vIGF3YXkgdGhlIGZ1bmN0aW9uIGJlaW5nIHRlc3RlZC4KLSNpZiBkZWZpbmVkKE9TX1dJTikgJiYgKGRlZmluZWQoQVJDSF9DUFVfWDg2KSB8fCAhZGVmaW5lZChDT01QT05FTlRfQlVJTEQpKQotVEVTVF9GKFlVVkNvbnZlcnRQZXJmVGVzdCwgU2NhbGVZVVZUb1JHQjMyUm93X1NTRSkgewotICBBU1NFUlRfVFJVRShiYXNlOjpDUFUoKS5oYXNfc3NlKCkpOwotCi0gIGNvbnN0IGludCBrU291cmNlRHggPSA4MDAwMDsgIC8vIFRoaXMgdmFsdWUgbWVhbnMgYSBzY2FsZSBkb3duLgotCi0gIGJhc2U6OlRpbWVUaWNrcyBzdGFydCA9IGJhc2U6OlRpbWVUaWNrczo6Tm93KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1BlcmZUZXN0SXRlcmF0aW9uczsgKytpKSB7Ci0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwga1NvdXJjZUhlaWdodDsgKytyb3cpIHsKLSAgICAgIGludCBjaHJvbWFfcm93ID0gcm93IC8gMjsKLSAgICAgIFNjYWxlWVVWVG9SR0IzMlJvd19TU0UoCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIHJvdyAqIGtTb3VyY2VXaWR0aCwKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsga1NvdXJjZVVPZmZzZXQgKyAoY2hyb21hX3JvdyAqIGtTb3VyY2VXaWR0aCAvIDIpLAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVk9mZnNldCArIChjaHJvbWFfcm93ICoga1NvdXJjZVdpZHRoIC8gMiksCi0gICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZF8uZ2V0KCksIGtXaWR0aCwga1NvdXJjZUR4LCBHZXRMb29rdXBUYWJsZShZVjEyKSk7Ci0gICAgfQotICB9Ci0gIG1lZGlhOjpFbXB0eVJlZ2lzdGVyU3RhdGUoKTsKLSAgZG91YmxlIHRvdGFsX3RpbWVfc2Vjb25kcyA9IChiYXNlOjpUaW1lVGlja3M6Ok5vdygpIC0gc3RhcnQpLkluU2Vjb25kc0YoKTsKLSAgcGVyZl90ZXN0OjpQcmludFJlc3VsdCgieXV2X2NvbnZlcnRfcGVyZnRlc3QiLCAiIiwgIlNjYWxlWVVWVG9SR0IzMlJvd19TU0UiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtQZXJmVGVzdEl0ZXJhdGlvbnMgLyB0b3RhbF90aW1lX3NlY29uZHMsICJydW5zL3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotfQotCi1URVNUX0YoWVVWQ29udmVydFBlcmZUZXN0LCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKSB7Ci0gIEFTU0VSVF9UUlVFKGJhc2U6OkNQVSgpLmhhc19zc2UoKSk7Ci0KLSAgY29uc3QgaW50IGtTb3VyY2VEeCA9IDgwMDAwOyAgLy8gVGhpcyB2YWx1ZSBtZWFucyBhIHNjYWxlIGRvd24uCi0KLSAgYmFzZTo6VGltZVRpY2tzIHN0YXJ0ID0gYmFzZTo6VGltZVRpY2tzOjpOb3coKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrUGVyZlRlc3RJdGVyYXRpb25zOyArK2kpIHsKLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBrU291cmNlSGVpZ2h0OyArK3JvdykgewotICAgICAgaW50IGNocm9tYV9yb3cgPSByb3cgLyAyOwotICAgICAgTGluZWFyU2NhbGVZVVZUb1JHQjMyUm93X1NTRSgKLSAgICAgICAgICB5dXZfYnl0ZXNfLmdldCgpICsgcm93ICoga1NvdXJjZVdpZHRoLAotICAgICAgICAgIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVU9mZnNldCArIChjaHJvbWFfcm93ICoga1NvdXJjZVdpZHRoIC8gMiksCi0gICAgICAgICAgeXV2X2J5dGVzXy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0ICsgKGNocm9tYV9yb3cgKiBrU291cmNlV2lkdGggLyAyKSwKLSAgICAgICAgICByZ2JfYnl0ZXNfY29udmVydGVkXy5nZXQoKSwga1dpZHRoLCBrU291cmNlRHgsIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgICB9Ci0gIH0KLSAgbWVkaWE6OkVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotICBkb3VibGUgdG90YWxfdGltZV9zZWNvbmRzID0gKGJhc2U6OlRpbWVUaWNrczo6Tm93KCkgLSBzdGFydCkuSW5TZWNvbmRzRigpOwotICBwZXJmX3Rlc3Q6OlByaW50UmVzdWx0KAotICAgICAgInl1dl9jb252ZXJ0X3BlcmZ0ZXN0IiwgIiIsICJMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFIiwKLSAgICAgIGtQZXJmVGVzdEl0ZXJhdGlvbnMgLyB0b3RhbF90aW1lX3NlY29uZHMsICJydW5zL3MiLCB0cnVlKTsKLX0KLSNlbmRpZiAgLy8gZGVmaW5lZChPU19XSU4pICYmIChBUkNIX0NQVV9YODYgfHwgQ09NUE9ORU5UX0JVSUxEKQotCi0jZW5kaWYgIC8vICFkZWZpbmVkKEFSQ0hfQ1BVX0FSTV9GQU1JTFkpICYmICFkZWZpbmVkKEFSQ0hfQ1BVX01JUFNfRkFNSUxZKQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0X3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Jhc2UveXV2X2NvbnZlcnRfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZjJhZjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Jhc2UveXV2X2NvbnZlcnRfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3l1dl9jb252ZXJ0LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNlX3BhdGhzLmgiCi0jaW5jbHVkZSAiYmFzZS9jcHUuaCIKLSNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfdXRpbC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvcGF0aF9zZXJ2aWNlLmgiCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvcmVjdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RqYjIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1di5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc2ltZC9maWx0ZXJfeXV2LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi0vLyBTaXplIG9mIHJhdyBpbWFnZS4KLXN0YXRpYyBjb25zdCBpbnQga1NvdXJjZVdpZHRoID0gNjQwOwotc3RhdGljIGNvbnN0IGludCBrU291cmNlSGVpZ2h0ID0gMzYwOwotc3RhdGljIGNvbnN0IGludCBrU291cmNlWVNpemUgPSBrU291cmNlV2lkdGggKiBrU291cmNlSGVpZ2h0Owotc3RhdGljIGNvbnN0IGludCBrU291cmNlVU9mZnNldCA9IGtTb3VyY2VZU2l6ZTsKLXN0YXRpYyBjb25zdCBpbnQga1NvdXJjZVZPZmZzZXQgPSBrU291cmNlWVNpemUgKiA1IC8gNDsKLXN0YXRpYyBjb25zdCBpbnQga1NjYWxlZFdpZHRoID0gMTAyNDsKLXN0YXRpYyBjb25zdCBpbnQga1NjYWxlZEhlaWdodCA9IDc2ODsKLXN0YXRpYyBjb25zdCBpbnQga0Rvd25TY2FsZWRXaWR0aCA9IDUxMjsKLXN0YXRpYyBjb25zdCBpbnQga0Rvd25TY2FsZWRIZWlnaHQgPSAzMjA7Ci1zdGF0aWMgY29uc3QgaW50IGtCcHAgPSA0OwotCi0vLyBTdXJmYWNlIHNpemVzIGZvciB2YXJpb3VzIHRlc3QgZmlsZXMuCi1zdGF0aWMgY29uc3QgaW50IGtZVVYxMlNpemUgPSBrU291cmNlWVNpemUgKiAxMiAvIDg7Ci1zdGF0aWMgY29uc3QgaW50IGtZVVYxNlNpemUgPSBrU291cmNlWVNpemUgKiAxNiAvIDg7Ci1zdGF0aWMgY29uc3QgaW50IGtSR0JTaXplID0ga1NvdXJjZVlTaXplICoga0JwcDsKLXN0YXRpYyBjb25zdCBpbnQga1JHQlNpemVTY2FsZWQgPSBrU2NhbGVkV2lkdGggKiBrU2NhbGVkSGVpZ2h0ICoga0JwcDsKLXN0YXRpYyBjb25zdCBpbnQga1JHQjI0U2l6ZSA9IGtTb3VyY2VZU2l6ZSAqIDM7Ci1zdGF0aWMgY29uc3QgaW50IGtSR0JTaXplQ29udmVydGVkID0ga1NvdXJjZVlTaXplICoga0JwcDsKLQotI2lmICFkZWZpbmVkKEFSQ0hfQ1BVX0FSTV9GQU1JTFkpICYmICFkZWZpbmVkKEFSQ0hfQ1BVX01JUFNfRkFNSUxZKSAmJiBcCi0gICAgIWRlZmluZWQoT1NfQU5EUk9JRCkKLXN0YXRpYyBjb25zdCBpbnQga1NvdXJjZUFPZmZzZXQgPSBrU291cmNlWVNpemUgKiAxMiAvIDg7Ci1zdGF0aWMgY29uc3QgaW50IGtZVVZBMTJTaXplID0ga1NvdXJjZVlTaXplICogMjAgLyA4OwotI2VuZGlmCi0KLS8vIEhlbHBlciBmb3IgcmVhZGluZyB0ZXN0IGRhdGEgaW50byBhIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+Lgotc3RhdGljIHZvaWQgUmVhZERhdGEoY29uc3QgYmFzZTo6RmlsZVBhdGg6OkNoYXJUeXBlKiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9zaXplLCBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiogZGF0YSkgewotICBkYXRhLT5yZXNldChuZXcgdWludDhfdFtleHBlY3RlZF9zaXplXSk7Ci0KLSAgYmFzZTo6RmlsZVBhdGggcGF0aDsKLSAgQ0hFQ0soYmFzZTo6UGF0aFNlcnZpY2U6OkdldChiYXNlOjpESVJfVEVTVF9EQVRBLCAmcGF0aCkpOwotICBwYXRoID0gcGF0aC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoIm1lZGlhIikpCi0gICAgICAgICAgICAgLkFwcGVuZChGSUxFX1BBVEhfTElURVJBTCgidGVzdCIpKQotICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoImRhdGEiKSkKLSAgICAgICAgICAgICAuQXBwZW5kKGZpbGVuYW1lKTsKLQotICAvLyBWZXJpZnkgZmlsZSBzaXplIGlzIGNvcnJlY3QuCi0gIGludDY0X3QgYWN0dWFsX3NpemUgPSAwOwotICBiYXNlOjpHZXRGaWxlU2l6ZShwYXRoLCAmYWN0dWFsX3NpemUpOwotICBDSEVDS19FUShhY3R1YWxfc2l6ZSwgZXhwZWN0ZWRfc2l6ZSk7Ci0KLSAgLy8gVmVyaWZ5IGJ5dGVzIHJlYWQgYXJlIGNvcnJlY3QuCi0gIGludCBieXRlc19yZWFkID0KLSAgICAgIGJhc2U6OlJlYWRGaWxlKHBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEtPmdldCgpKSwgZXhwZWN0ZWRfc2l6ZSk7Ci0gIENIRUNLX0VRKGJ5dGVzX3JlYWQsIGV4cGVjdGVkX3NpemUpOwotfQotCi1zdGF0aWMgdm9pZCBSZWFkWVYxMkRhdGEoc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4qIGRhdGEpIHsKLSAgUmVhZERhdGEoRklMRV9QQVRIX0xJVEVSQUwoImJhbGlfNjQweDM2MF9QNDIwLnl1diIpLCBrWVVWMTJTaXplLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgUmVhZFlWMTZEYXRhKHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+KiBkYXRhKSB7Ci0gIFJlYWREYXRhKEZJTEVfUEFUSF9MSVRFUkFMKCJiYWxpXzY0MHgzNjBfUDQyMi55dXYiKSwga1lVVjE2U2l6ZSwgZGF0YSk7Ci19Ci0KLSNpZiAhZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiAhZGVmaW5lZChBUkNIX0NQVV9NSVBTX0ZBTUlMWSkgJiYgXAotICAgICFkZWZpbmVkKE9TX0FORFJPSUQpCi1zdGF0aWMgdm9pZCBSZWFkWVYxMkFEYXRhKHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+KiBkYXRhKSB7Ci0gIFJlYWREYXRhKEZJTEVfUEFUSF9MSVRFUkFMKCJiYWxpXzY0MHgzNjBfUDQyMF9hbHBoYS55dXYiKSwga1lVVkExMlNpemUsIGRhdGEpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIFJlYWRSR0IyNERhdGEoc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4qIGRhdGEpIHsKLSAgUmVhZERhdGEoRklMRV9QQVRIX0xJVEVSQUwoImJhbGlfNjQweDM2MF9SR0IyNC5yZ2IiKSwga1JHQjI0U2l6ZSwgZGF0YSk7Ci19Ci0KLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0vLyBIZWxwZXIgZm9yIHN3YXBwaW5nIHJlZCBhbmQgYmx1ZSBjaGFubmVscyBvZiBSR0JBIG9yIEJHUkEuCi1zdGF0aWMgdm9pZCBTd2FwUmVkQW5kQmx1ZUNoYW5uZWxzKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyX3NpemU7IGkgKz0gNCkgewotICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOwotICB9Ci19Ci0jZW5kaWYKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBZVjEyKSB7Ci0gIC8vIEFsbG9jYXRlIGFsbCBzdXJmYWNlcy4KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2J5dGVzOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXMobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2NvbnZlcnRlZF9ieXRlcygKLSAgICAgIG5ldyB1aW50OF90W2tSR0JTaXplQ29udmVydGVkXSk7Ci0KLSAgLy8gUmVhZCBZVVYgcmVmZXJlbmNlIGRhdGEgZnJvbSBmaWxlLgotICBSZWFkWVYxMkRhdGEoJnl1dl9ieXRlcyk7Ci0KLSAgLy8gQ29udmVydCBhIGZyYW1lIG9mIFlVViB0byAzMiBiaXQgQVJHQi4KLSAgbWVkaWE6OkNvbnZlcnRZVVZUb1JHQjMyKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksICAgIC8vIFJHQiBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIsICAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSR0JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpZVjEyKTsKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgU3dhcFJlZEFuZEJsdWVDaGFubmVscyhyZ2JfY29udmVydGVkX2J5dGVzLmdldCgpLCBrUkdCU2l6ZUNvbnZlcnRlZCk7Ci0jZW5kaWYKLQotICB1aW50MzJfdCByZ2JfaGFzaCA9Ci0gICAgICBESkIySGFzaChyZ2JfY29udmVydGVkX2J5dGVzLmdldCgpLCBrUkdCU2l6ZUNvbnZlcnRlZCwga0RKQjJIYXNoU2VlZCk7Ci0gIEVYUEVDVF9FUSgyNDEzMTcxMjI2dSwgcmdiX2hhc2gpOwotfQotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBZVjE2KSB7Ci0gIC8vIEFsbG9jYXRlIGFsbCBzdXJmYWNlcy4KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2J5dGVzOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXMobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2NvbnZlcnRlZF9ieXRlcygKLSAgICAgIG5ldyB1aW50OF90W2tSR0JTaXplQ29udmVydGVkXSk7Ci0KLSAgLy8gUmVhZCBZVVYgcmVmZXJlbmNlIGRhdGEgZnJvbSBmaWxlLgotICBSZWFkWVYxNkRhdGEoJnl1dl9ieXRlcyk7Ci0KLSAgLy8gQ29udmVydCBhIGZyYW1lIG9mIFlVViB0byAzMiBiaXQgQVJHQi4KLSAgbWVkaWE6OkNvbnZlcnRZVVZUb1JHQjMyKHl1dl9ieXRlcy5nZXQoKSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWQotICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsICAgICAgICAvLyBVCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlWVNpemUgKiAzIC8gMiwgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksICAgIC8vIFJHQiBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIsICAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSR0JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpZVjE2KTsKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgU3dhcFJlZEFuZEJsdWVDaGFubmVscyhyZ2JfY29udmVydGVkX2J5dGVzLmdldCgpLCBrUkdCU2l6ZUNvbnZlcnRlZCk7Ci0jZW5kaWYKLQotICB1aW50MzJfdCByZ2JfaGFzaCA9Ci0gICAgICBESkIySGFzaChyZ2JfY29udmVydGVkX2J5dGVzLmdldCgpLCBrUkdCU2l6ZUNvbnZlcnRlZCwga0RKQjJIYXNoU2VlZCk7Ci0gIEVYUEVDVF9FUSg0MjIyMzQyMDQ3dSwgcmdiX2hhc2gpOwotfQotCi1zdHJ1Y3QgWVVWU2NhbGVUZXN0RGF0YSB7Ci0gIFlVVlNjYWxlVGVzdERhdGEobWVkaWE6OllVVlR5cGUgeSwgbWVkaWE6OlNjYWxlRmlsdGVyIHMsIHVpbnQzMl90IHIpCi0gICAgICA6IHl1dl90eXBlKHkpLCBzY2FsZV9maWx0ZXIocyksIHJnYl9oYXNoKHIpIHt9Ci0KLSAgbWVkaWE6OllVVlR5cGUgeXV2X3R5cGU7Ci0gIG1lZGlhOjpTY2FsZUZpbHRlciBzY2FsZV9maWx0ZXI7Ci0gIHVpbnQzMl90IHJnYl9oYXNoOwotfTsKLQotY2xhc3MgWVVWU2NhbGVUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdFdpdGhQYXJhbTxZVVZTY2FsZVRlc3REYXRhPiB7Ci0gcHVibGljOgotICBZVVZTY2FsZVRlc3QoKSB7Ci0gICAgc3dpdGNoIChHZXRQYXJhbSgpLnl1dl90eXBlKSB7Ci0gICAgICBjYXNlIG1lZGlhOjpZVjEyOgotICAgICAgY2FzZSBtZWRpYTo6WVYxMko6Ci0gICAgICBjYXNlIG1lZGlhOjpZVjEySEQ6Ci0gICAgICAgIFJlYWRZVjEyRGF0YSgmeXV2X2J5dGVzXyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBtZWRpYTo6WVYxNjoKLSAgICAgICAgUmVhZFlWMTZEYXRhKCZ5dXZfYnl0ZXNfKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmdiX2J5dGVzXy5yZXNldChuZXcgdWludDhfdFtrUkdCU2l6ZVNjYWxlZF0pOwotICB9Ci0KLSAgLy8gSGVscGVycyBmb3IgZ2V0dGluZyB0aGUgcHJvcGVyIFksIFUgYW5kIFYgcGxhbmUgb2Zmc2V0cy4KLSAgdWludDhfdCogeV9wbGFuZSgpIHsgcmV0dXJuIHl1dl9ieXRlc18uZ2V0KCk7IH0KLSAgdWludDhfdCogdV9wbGFuZSgpIHsgcmV0dXJuIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlWVNpemU7IH0KLSAgdWludDhfdCogdl9wbGFuZSgpIHsKLSAgICBzd2l0Y2ggKEdldFBhcmFtKCkueXV2X3R5cGUpIHsKLSAgICAgIGNhc2UgbWVkaWE6OllWMTI6Ci0gICAgICBjYXNlIG1lZGlhOjpZVjEySjoKLSAgICAgIGNhc2UgbWVkaWE6OllWMTJIRDoKLSAgICAgICAgcmV0dXJuIHl1dl9ieXRlc18uZ2V0KCkgKyBrU291cmNlVk9mZnNldDsKLSAgICAgIGNhc2UgbWVkaWE6OllWMTY6Ci0gICAgICAgIHJldHVybiB5dXZfYnl0ZXNfLmdldCgpICsga1NvdXJjZVlTaXplICogMyAvIDI7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2J5dGVzXzsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzXzsKLX07Ci0KLVRFU1RfUChZVVZTY2FsZVRlc3QsIE5vU2NhbGUpIHsKLSAgbWVkaWE6OlNjYWxlWVVWVG9SR0IzMih5X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgdV9wbGFuZSgpLCAgICAgICAgICAgICAgICAgICAgLy8gVQotICAgICAgICAgICAgICAgICAgICAgICAgIHZfcGxhbmUoKSwgICAgICAgICAgICAgICAgICAgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfLmdldCgpLCAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCBrU291cmNlSGVpZ2h0LCAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgLy8gVXZTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSZ2JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLnl1dl90eXBlLCBtZWRpYTo6Uk9UQVRFXzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKS5zY2FsZV9maWx0ZXIpOwotCi0gIHVpbnQzMl90IHl1dl9oYXNoID0gREpCMkhhc2gocmdiX2J5dGVzXy5nZXQoKSwga1JHQlNpemUsIGtESkIySGFzaFNlZWQpOwotCi0gIG1lZGlhOjpDb252ZXJ0WVVWVG9SR0IzMih5X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBVCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBWCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfLmdldCgpLCAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggLyAyLCAgICAgICAgICAgICAvLyBVVlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoICoga0JwcCwgICAgICAgICAgLy8gUkdCU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLnl1dl90eXBlKTsKLQotICB1aW50MzJfdCByZ2JfaGFzaCA9IERKQjJIYXNoKHJnYl9ieXRlc18uZ2V0KCksIGtSR0JTaXplLCBrREpCMkhhc2hTZWVkKTsKLQotICBFWFBFQ1RfRVEoeXV2X2hhc2gsIHJnYl9oYXNoKTsKLX0KLQotVEVTVF9QKFlVVlNjYWxlVGVzdCwgTm9ybWFsKSB7Ci0gIG1lZGlhOjpTY2FsZVlVVlRvUkdCMzIoeV9wbGFuZSgpLCAgICAgICAgICAgICAgICAgICAgLy8gWQotICAgICAgICAgICAgICAgICAgICAgICAgIHVfcGxhbmUoKSwgICAgICAgICAgICAgICAgICAgIC8vIFUKLSAgICAgICAgICAgICAgICAgICAgICAgICB2X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBWCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzXy5nZXQoKSwgICAgICAgICAgICAgLy8gUkdCIG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU2NhbGVkV2lkdGgsIGtTY2FsZWRIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCAgICAgICAgICAgICAgICAgLy8gWVN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIsICAgICAgICAgICAgIC8vIFV2U3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NjYWxlZFdpZHRoICoga0JwcCwgICAgICAgICAgLy8gUmdiU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKS55dXZfdHlwZSwgbWVkaWE6OlJPVEFURV8wLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhcmFtKCkuc2NhbGVfZmlsdGVyKTsKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgU3dhcFJlZEFuZEJsdWVDaGFubmVscyhyZ2JfYnl0ZXNfLmdldCgpLCBrUkdCU2l6ZVNjYWxlZCk7Ci0jZW5kaWYKLQotICB1aW50MzJfdCByZ2JfaGFzaCA9IERKQjJIYXNoKHJnYl9ieXRlc18uZ2V0KCksIGtSR0JTaXplU2NhbGVkLCBrREpCMkhhc2hTZWVkKTsKLSAgRVhQRUNUX0VRKEdldFBhcmFtKCkucmdiX2hhc2gsIHJnYl9oYXNoKTsKLX0KLQotVEVTVF9QKFlVVlNjYWxlVGVzdCwgWmVyb1NvdXJjZVNpemUpIHsKLSAgbWVkaWE6OlNjYWxlWVVWVG9SR0IzMih5X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgdV9wbGFuZSgpLCAgICAgICAgICAgICAgICAgICAgLy8gVQotICAgICAgICAgICAgICAgICAgICAgICAgIHZfcGxhbmUoKSwgICAgICAgICAgICAgICAgICAgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfLmdldCgpLCAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgIGtTY2FsZWRXaWR0aCwga1NjYWxlZEhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgLy8gVXZTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU2NhbGVkV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSZ2JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLnl1dl90eXBlLCBtZWRpYTo6Uk9UQVRFXzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKS5zY2FsZV9maWx0ZXIpOwotCi0gIC8vIFRlc3RpbmcgZm9yIG91dC1vZi1ib3VuZCByZWFkL3dyaXRlcyB3aXRoIEFkZHJlc3NTYW5pdGl6ZXIuCi19Ci0KLVRFU1RfUChZVVZTY2FsZVRlc3QsIFplcm9EZXN0aW5hdGlvblNpemUpIHsKLSAgbWVkaWE6OlNjYWxlWVVWVG9SR0IzMih5X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgdV9wbGFuZSgpLCAgICAgICAgICAgICAgICAgICAgLy8gVQotICAgICAgICAgICAgICAgICAgICAgICAgIHZfcGxhbmUoKSwgICAgICAgICAgICAgICAgICAgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfLmdldCgpLCAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCBrU291cmNlSGVpZ2h0LCAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgLy8gVXZTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU2NhbGVkV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSZ2JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLnl1dl90eXBlLCBtZWRpYTo6Uk9UQVRFXzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKS5zY2FsZV9maWx0ZXIpOwotCi0gIC8vIFRlc3RpbmcgZm9yIG91dC1vZi1ib3VuZCByZWFkL3dyaXRlcyB3aXRoIEFkZHJlc3NTYW5pdGl6ZXIuCi19Ci0KLVRFU1RfUChZVVZTY2FsZVRlc3QsIE9kZFdpZHRoQW5kSGVpZ2h0Tm90Q3Jhc2gpIHsKLSAgbWVkaWE6OlNjYWxlWVVWVG9SR0IzMih5X3BsYW5lKCksICAgICAgICAgICAgICAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgdV9wbGFuZSgpLCAgICAgICAgICAgICAgICAgICAgLy8gVQotICAgICAgICAgICAgICAgICAgICAgICAgIHZfcGxhbmUoKSwgICAgICAgICAgICAgICAgICAgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfLmdldCgpLCAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCBrU291cmNlSGVpZ2h0LCAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgIDMsIDMsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgLy8gVXZTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBrU2NhbGVkV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSZ2JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLnl1dl90eXBlLCBtZWRpYTo6Uk9UQVRFXzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKS5zY2FsZV9maWx0ZXIpOwotfQotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUCgKLSAgICBZVVZTY2FsZUZvcm1hdHMsIFlVVlNjYWxlVGVzdCwKLSAgICA6OnRlc3Rpbmc6OlZhbHVlcygKLSAgICAgICAgWVVWU2NhbGVUZXN0RGF0YShtZWRpYTo6WVYxMiwgbWVkaWE6OkZJTFRFUl9OT05FLCA0MTM2OTA0OTUydSksCi0gICAgICAgIFlVVlNjYWxlVGVzdERhdGEobWVkaWE6OllWMTYsIG1lZGlhOjpGSUxURVJfTk9ORSwgMTUwMTc3NzU0N3UpLAotICAgICAgICBZVVZTY2FsZVRlc3REYXRhKG1lZGlhOjpZVjEyLCBtZWRpYTo6RklMVEVSX0JJTElORUFSLCAzMTY0Mjc0Njg5dSksCi0gICAgICAgIFlVVlNjYWxlVGVzdERhdGEobWVkaWE6OllWMTYsIG1lZGlhOjpGSUxURVJfQklMSU5FQVIsIDMwOTU4NzgwNDZ1KSkpOwotCi0vLyBUaGlzIHRlc3RzIGEga25vd24gd29yc3QgY2FzZSBZVVYgdmFsdWUsIGFuZCBmb3Igb3ZlcmZsb3cuCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBDbGFtcCkgewotICAvLyBBbGxvY2F0ZSBhbGwgc3VyZmFjZXMuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHl1dl9ieXRlcyhuZXcgdWludDhfdFsxXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlcyhuZXcgdWludDhfdFsxXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9jb252ZXJ0ZWRfYnl0ZXMobmV3IHVpbnQ4X3RbMV0pOwotCi0gIC8vIFZhbHVlcyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IGluIGJ1ZyByZXBvcnQuCi0gIHVuc2lnbmVkIGNoYXIgeSA9IDI1NXU7Ci0gIHVuc2lnbmVkIGNoYXIgdSA9IDI1NXU7Ci0gIHVuc2lnbmVkIGNoYXIgdiA9IDE5dTsKLQotICAvLyBQcmVmaWxsIGV4dHJhIGxhcmdlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0byB0ZXN0IGZvciBvdmVyZmxvdy4KLSAgdW5zaWduZWQgY2hhciByZ2JbOF0gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgN307Ci0gIHVuc2lnbmVkIGNoYXIgZXhwZWN0ZWRbOF0gPSB7MjU1LCAyNTUsIDEwNCwgMjU1LCA0LCA1LCA2LCA3fTsKLSAgLy8gQ29udmVydCBhIGZyYW1lIG9mIFlVViB0byAzMiBiaXQgQVJHQi4KLSAgbWVkaWE6OkNvbnZlcnRZVVZUb1JHQjMyKCZ5LCAgICAgICAvLyBZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmdSwgICAgICAgLy8gVQotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnYsICAgICAgIC8vIFYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZ2JbMF0sICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCAgICAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAvLyBVVlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgIC8vIFJHQlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OllWMTIpOwotCi0jaWYgZGVmaW5lZChPU19BTkRST0lEKQotICBTd2FwUmVkQW5kQmx1ZUNoYW5uZWxzKHJnYiwga0JwcCk7Ci0jZW5kaWYKLQotICBpbnQgZXhwZWN0ZWRfdGVzdCA9IG1lbWNtcChyZ2IsIGV4cGVjdGVkLCBzaXplb2YoZXhwZWN0ZWQpKTsKLSAgRVhQRUNUX0VRKDAsIGV4cGVjdGVkX3Rlc3QpOwotfQotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBSR0IyNFRvWVVWKSB7Ci0gIC8vIEFsbG9jYXRlIGFsbCBzdXJmYWNlcy4KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfY29udmVydGVkX2J5dGVzKG5ldyB1aW50OF90W2tZVVYxMlNpemVdKTsKLQotICAvLyBSZWFkIFJHQjI0IHJlZmVyZW5jZSBkYXRhIGZyb20gZmlsZS4KLSAgUmVhZFJHQjI0RGF0YSgmcmdiX2J5dGVzKTsKLQotICAvLyBDb252ZXJ0IHRvIEk0MjAuCi0gIG1lZGlhOjpDb252ZXJ0UkdCMjRUb1lVVihyZ2JfYnl0ZXMuZ2V0KCksIHl1dl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpICsga1NvdXJjZVZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiAzLCAgICAgICAgICAgICAvLyBSR0JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIpOyAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0KLSAgdWludDMyX3QgcmdiX2hhc2ggPQotICAgICAgREpCMkhhc2goeXV2X2NvbnZlcnRlZF9ieXRlcy5nZXQoKSwga1lVVjEyU2l6ZSwga0RKQjJIYXNoU2VlZCk7Ci0gIEVYUEVDVF9FUSgzMjA4MjQ0MzJ1LCByZ2JfaGFzaCk7Ci19Ci0KLVRFU1QoWVVWQ29udmVydFRlc3QsIFJHQjMyVG9ZVVYpIHsKLSAgLy8gQWxsb2NhdGUgYWxsIHN1cmZhY2VzLgotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfYnl0ZXMobmV3IHVpbnQ4X3Rba1lVVjEyU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXMobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2NvbnZlcnRlZF9ieXRlcyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9jb252ZXJ0ZWRfYnl0ZXMobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLQotICAvLyBSZWFkIFlVViByZWZlcmVuY2UgZGF0YSBmcm9tIGZpbGUuCi0gIGJhc2U6OkZpbGVQYXRoIHl1dl91cmw7Ci0gIEVYUEVDVF9UUlVFKGJhc2U6OlBhdGhTZXJ2aWNlOjpHZXQoYmFzZTo6RElSX1RFU1RfREFUQSwgJnl1dl91cmwpKTsKLSAgeXV2X3VybCA9IHl1dl91cmwuQXBwZW5kKEZJTEVfUEFUSF9MSVRFUkFMKCJtZWRpYSIpKQotICAgICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoInRlc3QiKSkKLSAgICAgICAgICAgICAgICAuQXBwZW5kKEZJTEVfUEFUSF9MSVRFUkFMKCJkYXRhIikpCi0gICAgICAgICAgICAgICAgLkFwcGVuZChGSUxFX1BBVEhfTElURVJBTCgiYmFsaV82NDB4MzYwX1A0MjAueXV2IikpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PihrWVVWMTJTaXplKSwKLSAgICAgICAgICAgIGJhc2U6OlJlYWRGaWxlKHl1dl91cmwsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHl1dl9ieXRlcy5nZXQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtZVVYxMlNpemUpKSk7Ci0KLSAgLy8gQ29udmVydCBhIGZyYW1lIG9mIFlVViB0byAzMiBiaXQgQVJHQi4KLSAgbWVkaWE6OkNvbnZlcnRZVVZUb1JHQjMyKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9ieXRlcy5nZXQoKSwgICAgICAgICAgICAgIC8vIFJHQiBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgIC8vIERpbWVuc2lvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIsICAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiBrQnBwLCAgICAgICAgICAvLyBSR0JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOjpZVjEyKTsKLQotICAvLyBDb252ZXJ0IFJHQjMyIHRvIFlWMTIuCi0gIG1lZGlhOjpDb252ZXJ0UkdCMzJUb1lVVihyZ2JfYnl0ZXMuZ2V0KCksIHl1dl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpICsga1NvdXJjZVZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggKiA0LCAgICAgICAgICAgICAvLyBSR0JTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIpOyAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0KLSAgLy8gQ29udmVydCBZVjEyIGJhY2sgdG8gUkdCMzIuCi0gIG1lZGlhOjpDb252ZXJ0WVVWVG9SR0IzMih5dXZfY29udmVydGVkX2J5dGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2NvbnZlcnRlZF9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2NvbnZlcnRlZF9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2NvbnZlcnRlZF9ieXRlcy5nZXQoKSwgICAgLy8gUkdCIG91dHB1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCBrU291cmNlSGVpZ2h0LCAgLy8gRGltZW5zaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoLCAgICAgICAgICAgICAgICAgLy8gWVN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgLy8gVVZTdHJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAqIGtCcHAsICAgICAgICAgIC8vIFJHQlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6OllWMTIpOwotCi0gIGludCBlcnJvciA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga1JHQlNpemU7ICsraSkgewotICAgIGludCBkaWZmID0gcmdiX2NvbnZlcnRlZF9ieXRlc1tpXSAtIHJnYl9ieXRlc1tpXTsKLSAgICBpZiAoZGlmZiA8IDApIGRpZmYgPSAtZGlmZjsKLSAgICBlcnJvciArPSBkaWZmOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIGVycm9yIGlzIHdpdGhpbiBib3VuZC4KLSAgRFZMT0coMSkgPDwgIkF2ZXJhZ2UgZXJyb3IgcGVyIGNoYW5uZWw6ICIgPDwgZXJyb3IgLyBrUkdCU2l6ZTsKLSAgRVhQRUNUX0dUKDUsIGVycm9yIC8ga1JHQlNpemUpOwotfQotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBEb3duU2NhbGVZVVZUb1JHQjMyV2l0aFJlY3QpIHsKLSAgLy8gUmVhZCBZVVYgcmVmZXJlbmNlIGRhdGEgZnJvbSBmaWxlLgotICBiYXNlOjpGaWxlUGF0aCB5dXZfdXJsOwotICBFWFBFQ1RfVFJVRShiYXNlOjpQYXRoU2VydmljZTo6R2V0KGJhc2U6OkRJUl9URVNUX0RBVEEsICZ5dXZfdXJsKSk7Ci0gIHl1dl91cmwgPSB5dXZfdXJsLkFwcGVuZChGSUxFX1BBVEhfTElURVJBTCgibWVkaWEiKSkKLSAgICAgICAgICAgICAgICAuQXBwZW5kKEZJTEVfUEFUSF9MSVRFUkFMKCJ0ZXN0IikpCi0gICAgICAgICAgICAgICAgLkFwcGVuZChGSUxFX1BBVEhfTElURVJBTCgiZGF0YSIpKQotICAgICAgICAgICAgICAgIC5BcHBlbmQoRklMRV9QQVRIX0xJVEVSQUwoImJhbGlfNjQweDM2MF9QNDIwLnl1diIpKTsKLSAgY29uc3Qgc2l6ZV90IHNpemVfb2ZfeXV2ID0ga1NvdXJjZVlTaXplICogMTIgLyA4OyAgLy8gMTIgYnBwLgotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfYnl0ZXMobmV3IHVpbnQ4X3Rbc2l6ZV9vZl95dXZdKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oc2l6ZV9vZl95dXYpLAotICAgICAgICAgICAgYmFzZTo6UmVhZEZpbGUoeXV2X3VybCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oeXV2X2J5dGVzLmdldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc2l6ZV9vZl95dXYpKSk7Ci0KLSAgLy8gU2NhbGUgdGhlIGZ1bGwgZnJhbWUgb2YgWVVWIHRvIDMyIGJpdCBBUkdCLgotICAvLyBUaGUgQVBJIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGRvd24tc2NhbGluZywgc28gd2UgZG9uJ3QgdGVzdCB1cC1zY2FsaW5nLgotICBjb25zdCBzaXplX3Qgc2l6ZV9vZl9yZ2Jfc2NhbGVkID0ga0Rvd25TY2FsZWRXaWR0aCAqIGtEb3duU2NhbGVkSGVpZ2h0ICoga0JwcDsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX3NjYWxlZF9ieXRlcyhuZXcgdWludDhfdFtzaXplX29mX3JnYl9zY2FsZWRdKTsKLSAgbWF0aDo6UmVjdCBzdWJfcmVjdCgwLCAwLCBrRG93blNjYWxlZFdpZHRoLCBrRG93blNjYWxlZEhlaWdodCk7Ci0KLSAgLy8gV2UgY2FuJ3QgY29tcGFyZSB3aXRoIHRoZSBmdWxsLWZyYW1lIHNjYWxlciBiZWNhdXNlIGl0IHVzZXMgc2xpZ2h0bHkKLSAgLy8gZGlmZmVyZW50IHNhbXBsaW5nIGNvb3JkaW5hdGVzLgotICBtZWRpYTo6U2NhbGVZVVZUb1JHQjMyV2l0aFJlY3QoCi0gICAgICB5dXZfYnl0ZXMuZ2V0KCksICAgICAgICAgICAgICAgICAgICAgIC8vIFkKLSAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LCAgICAgLy8gVQotICAgICAgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVZPZmZzZXQsICAgICAvLyBWCi0gICAgICByZ2Jfc2NhbGVkX2J5dGVzLmdldCgpLCAgICAgICAgICAgICAgIC8vIFJnYiBvdXRwdXQKLSAgICAgIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwgICAgICAgICAgLy8gRGltZW5zaW9ucwotICAgICAga0Rvd25TY2FsZWRXaWR0aCwga0Rvd25TY2FsZWRIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICBzdWJfcmVjdC54KCksIHN1Yl9yZWN0LnkoKSwgICAgICAgICAgIC8vIERlc3QgcmVjdAotICAgICAgc3ViX3JlY3QucmlnaHQoKSwgc3ViX3JlY3QuYm90dG9tKCksICAvLyBEZXN0IHJlY3QKLSAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWVN0cmlkZQotICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgICAgICAgICAvLyBVdlN0cmlkZQotICAgICAga0Rvd25TY2FsZWRXaWR0aCAqIGtCcHApOyAgICAgICAgICAgICAvLyBSZ2JTdHJpZGUKLQotICB1aW50MzJfdCByZ2JfaGFzaF9mdWxsX3JlY3QgPQotICAgICAgREpCMkhhc2gocmdiX3NjYWxlZF9ieXRlcy5nZXQoKSwgc2l6ZV9vZl9yZ2Jfc2NhbGVkLCBrREpCMkhhc2hTZWVkKTsKLQotICAvLyBSZS1zY2FsZSBzdWItcmVjdGFuZ2xlcyBhbmQgdmVyaWZ5IHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZS4KLSAgaW50IG5leHRfc3ViX3JlY3QgPSAwOwotICB3aGlsZSAoIXN1Yl9yZWN0LklzRW1wdHkoKSkgewotICAgIC8vIFNjYWxlIGEgcGFydGlhbCByZWN0YW5nbGUuCi0gICAgbWVkaWE6OlNjYWxlWVVWVG9SR0IzMldpdGhSZWN0KAotICAgICAgICB5dXZfYnl0ZXMuZ2V0KCksICAgICAgICAgICAgICAgICAgICAgIC8vIFkKLSAgICAgICAgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsICAgICAvLyBVCi0gICAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LCAgICAgLy8gVgotICAgICAgICByZ2Jfc2NhbGVkX2J5dGVzLmdldCgpLCAgICAgICAgICAgICAgIC8vIFJnYiBvdXRwdXQKLSAgICAgICAga1NvdXJjZVdpZHRoLCBrU291cmNlSGVpZ2h0LCAgICAgICAgICAvLyBEaW1lbnNpb25zCi0gICAgICAgIGtEb3duU2NhbGVkV2lkdGgsIGtEb3duU2NhbGVkSGVpZ2h0LCAgLy8gRGltZW5zaW9ucwotICAgICAgICBzdWJfcmVjdC54KCksIHN1Yl9yZWN0LnkoKSwgICAgICAgICAgIC8vIERlc3QgcmVjdAotICAgICAgICBzdWJfcmVjdC5yaWdodCgpLCBzdWJfcmVjdC5ib3R0b20oKSwgIC8vIERlc3QgcmVjdAotICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFlTdHJpZGUKLSAgICAgICAga1NvdXJjZVdpZHRoIC8gMiwgICAgICAgICAgICAgICAgICAgICAvLyBVdlN0cmlkZQotICAgICAgICBrRG93blNjYWxlZFdpZHRoICoga0JwcCk7ICAgICAgICAgICAgIC8vIFJnYlN0cmlkZQotICAgIHVpbnQzMl90IHJnYl9oYXNoX3N1Yl9yZWN0ID0KLSAgICAgICAgREpCMkhhc2gocmdiX3NjYWxlZF9ieXRlcy5nZXQoKSwgc2l6ZV9vZl9yZ2Jfc2NhbGVkLCBrREpCMkhhc2hTZWVkKTsKLQotICAgIEVYUEVDVF9FUShyZ2JfaGFzaF9mdWxsX3JlY3QsIHJnYl9oYXNoX3N1Yl9yZWN0KTsKLQotICAgIC8vIE5vdyBwaWNrIGNob29zZSBhIHF1YXJ0ZXIgcmVjdCBvZiB0aGlzIHN1Yi1yZWN0LgotICAgIGlmIChuZXh0X3N1Yl9yZWN0ICYgMSkgc3ViX3JlY3Quc2V0X3goc3ViX3JlY3QueCgpICsgc3ViX3JlY3Qud2lkdGgoKSAvIDIpOwotICAgIGlmIChuZXh0X3N1Yl9yZWN0ICYgMikgc3ViX3JlY3Quc2V0X3koc3ViX3JlY3QueSgpICsgc3ViX3JlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICBzdWJfcmVjdC5zZXRfd2lkdGgoc3ViX3JlY3Qud2lkdGgoKSAvIDIpOwotICAgIHN1Yl9yZWN0LnNldF9oZWlnaHQoc3ViX3JlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICBuZXh0X3N1Yl9yZWN0Kys7Ci0gIH0KLX0KLQotI2lmICFkZWZpbmVkKEFSQ0hfQ1BVX0FSTV9GQU1JTFkpICYmICFkZWZpbmVkKEFSQ0hfQ1BVX01JUFNfRkFNSUxZKQotI2lmICFkZWZpbmVkKE9TX0FORFJPSUQpCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBZVVZBdG9BUkdCX01NWF9NYXRjaFJlZmVyZW5jZSkgewotICAvLyBBbGxvY2F0ZSBhbGwgc3VyZmFjZXMuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHl1dl9ieXRlczsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzKG5ldyB1aW50OF90W2tSR0JTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9jb252ZXJ0ZWRfYnl0ZXMoCi0gICAgICBuZXcgdWludDhfdFtrUkdCU2l6ZUNvbnZlcnRlZF0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfY29udmVydGVkX2J5dGVzX3JlZigKLSAgICAgIG5ldyB1aW50OF90W2tSR0JTaXplQ29udmVydGVkXSk7Ci0KLSAgLy8gUmVhZCBZVVYgcmVmZXJlbmNlIGRhdGEgZnJvbSBmaWxlLgotICBSZWFkWVYxMkFEYXRhKCZ5dXZfYnl0ZXMpOwotCi0gIC8vIENvbnZlcnQgYSBmcmFtZSBvZiBZVVYgdG8gMzIgYml0IEFSR0IgdXNpbmcgYm90aCBDIGFuZCBNTVggdmVyc2lvbnMuCi0gIG1lZGlhOjpDb252ZXJ0WVVWQVRvQVJHQl9DKAotICAgICAgeXV2X2J5dGVzLmdldCgpLCB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LCB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlQU9mZnNldCwKLSAgICAgIHJnYl9jb252ZXJ0ZWRfYnl0ZXNfcmVmLmdldCgpLCBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsIGtTb3VyY2VXaWR0aCwKLSAgICAgIGtTb3VyY2VXaWR0aCAvIDIsIGtTb3VyY2VXaWR0aCwga1NvdXJjZVdpZHRoICoga0JwcCwgbWVkaWE6OllWMTIpOwotICBtZWRpYTo6Q29udmVydFlVVkFUb0FSR0JfTU1YKAotICAgICAgeXV2X2J5dGVzLmdldCgpLCB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LCB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlQU9mZnNldCwKLSAgICAgIHJnYl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksIGtTb3VyY2VXaWR0aCwga1NvdXJjZUhlaWdodCwga1NvdXJjZVdpZHRoLAotICAgICAga1NvdXJjZVdpZHRoIC8gMiwga1NvdXJjZVdpZHRoLCBrU291cmNlV2lkdGggKiBrQnBwLCBtZWRpYTo6WVYxMik7Ci0KLSAgRVhQRUNUX0VRKDAsCi0gICAgICAgICAgICBtZW1jbXAocmdiX2NvbnZlcnRlZF9ieXRlcy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfY29udmVydGVkX2J5dGVzX3JlZi5nZXQoKSwga1JHQlNpemVDb252ZXJ0ZWQpKTsKLX0KLSNlbmRpZiAgLy8gIWRlZmluZWQoT1NfQU5EUk9JRCkKLQotVEVTVChZVVZDb252ZXJ0VGVzdCwgUkdCMzJUb1lVVl9TU0UyX01hdGNoUmVmZXJlbmNlKSB7Ci0gIGJhc2U6OkNQVSBjcHU7Ci0gIGlmICghY3B1Lmhhc19zc2UyKCkpIHsKLSAgICBMT0coV0FSTklORykgPDwgIlN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgU1NFMiwgdGVzdCBub3QgZXhlY3V0ZWQuIjsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBhbGwgc3VyZmFjZXMuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHl1dl9ieXRlcyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlcyhuZXcgdWludDhfdFtrUkdCU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfY29udmVydGVkX2J5dGVzKG5ldyB1aW50OF90W2tZVVYxMlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X3JlZmVyZW5jZV9ieXRlcyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSk7Ci0KLSAgUmVhZFlWMTJEYXRhKCZ5dXZfYnl0ZXMpOwotCi0gIC8vIENvbnZlcnQgYSBmcmFtZSBvZiBZVVYgdG8gMzIgYml0IEFSR0IuCi0gIG1lZGlhOjpDb252ZXJ0WVVWVG9SR0IzMih5dXZfYnl0ZXMuZ2V0KCksIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXMuZ2V0KCksICAgICAgICAgICAgICAvLyBSR0Igb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggLyAyLCAgICAgICAgICAgICAvLyBVVlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAga1NvdXJjZVdpZHRoICoga0JwcCwgICAgICAgICAgLy8gUkdCU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTo6WVYxMik7Ci0KLSAgLy8gQ29udmVydCBSR0IzMiB0byBZVjEyIHdpdGggU1NFMiB2ZXJzaW9uLgotICBtZWRpYTo6Q29udmVydFJHQjMyVG9ZVVZfU1NFMihyZ2JfYnl0ZXMuZ2V0KCksIHl1dl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2NvbnZlcnRlZF9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsIGtTb3VyY2VIZWlnaHQsICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAqIDQsICAgICAgICAgICAgIC8vIFJHQlN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGgsICAgICAgICAgICAgICAgICAvLyBZU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAvIDIpOyAgICAgICAgICAgIC8vIFVWU3RyaWRlCi0KLSAgLy8gQ29udmVydCBSR0IzMiB0byBZVjEyIHdpdGggcmVmZXJlbmNlIHZlcnNpb24uCi0gIG1lZGlhOjpDb252ZXJ0UkdCMzJUb1lVVl9TU0UyX1JlZmVyZW5jZSgKLSAgICAgIHJnYl9ieXRlcy5nZXQoKSwgeXV2X3JlZmVyZW5jZV9ieXRlcy5nZXQoKSwKLSAgICAgIHl1dl9yZWZlcmVuY2VfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgIHl1dl9yZWZlcmVuY2VfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwga1NvdXJjZVdpZHRoLAotICAgICAga1NvdXJjZUhlaWdodCwgICAgICAvLyBEaW1lbnNpb25zCi0gICAgICBrU291cmNlV2lkdGggKiA0LCAgIC8vIFJHQlN0cmlkZQotICAgICAga1NvdXJjZVdpZHRoLCAgICAgICAvLyBZU3RyaWRlCi0gICAgICBrU291cmNlV2lkdGggLyAyKTsgIC8vIFVWU3RyaWRlCi0KLSAgLy8gTm93IGNvbnZlcnQgYSBvZGQgd2lkdGggYW5kIGhlaWdodCwgdGhpcyBvdmVycmlkZXMgcGFydCBvZiB0aGUgYnVmZmVyCi0gIC8vIGdlbmVyYXRlZCBhYm92ZSBidXQgdGhhdCBpcyBmaW5lIGJlY2F1c2UgdGhlIHBvaW50IG9mIHRoaXMgdGVzdCBpcyB0bwotICAvLyBtYXRjaCB0aGUgcmVzdWx0IHdpdGggdGhlIHJlZmVyZW5jZSBjb2RlLgotCi0gIC8vIENvbnZlcnQgUkdCMzIgdG8gWVYxMiB3aXRoIFNTRTIgdmVyc2lvbi4KLSAgbWVkaWE6OkNvbnZlcnRSR0IzMlRvWVVWX1NTRTIocmdiX2J5dGVzLmdldCgpLCB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfY29udmVydGVkX2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9jb252ZXJ0ZWRfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwgNywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgICAgICAgICAgICAgICAgICAvLyBEaW1lbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCAqIDQsICAgLy8gUkdCU3RyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VXaWR0aCwgICAgICAgLy8gWVN0cmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU291cmNlV2lkdGggLyAyKTsgIC8vIFVWU3RyaWRlCi0KLSAgLy8gQ29udmVydCBSR0IzMiB0byBZVjEyIHdpdGggcmVmZXJlbmNlIHZlcnNpb24uCi0gIG1lZGlhOjpDb252ZXJ0UkdCMzJUb1lVVl9TU0UyX1JlZmVyZW5jZSgKLSAgICAgIHJnYl9ieXRlcy5nZXQoKSwgeXV2X3JlZmVyZW5jZV9ieXRlcy5nZXQoKSwKLSAgICAgIHl1dl9yZWZlcmVuY2VfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgIHl1dl9yZWZlcmVuY2VfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwgNywgNywgIC8vIERpbWVuc2lvbnMKLSAgICAgIGtTb3VyY2VXaWR0aCAqIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJHQlN0cmlkZQotICAgICAga1NvdXJjZVdpZHRoLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWVN0cmlkZQotICAgICAga1NvdXJjZVdpZHRoIC8gMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVVZTdHJpZGUKLQotICBpbnQgZXJyb3IgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtZVVYxMlNpemU7ICsraSkgewotICAgIGludCBkaWZmID0geXV2X3JlZmVyZW5jZV9ieXRlc1tpXSAtIHl1dl9jb252ZXJ0ZWRfYnl0ZXNbaV07Ci0gICAgaWYgKGRpZmYgPCAwKSBkaWZmID0gLWRpZmY7Ci0gICAgZXJyb3IgKz0gZGlmZjsKLSAgfQotCi0gIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIGRpZmZlcmVuY2UgZnJvbSB0aGUgcmVmZXJlbmNlLgotICBFWFBFQ1RfRVEoMCwgZXJyb3IpOwotfQotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBDb252ZXJ0WVVWVG9SR0IzMlJvd19TU0UpIHsKLSAgYmFzZTo6Q1BVIGNwdTsKLSAgaWYgKCFjcHUuaGFzX3NzZSgpKSB7Ci0gICAgTE9HKFdBUk5JTkcpIDw8ICJTeXN0ZW0gbm90IHN1cHBvcnRlZC4gVGVzdCBza2lwcGVkLiI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4geXV2X2J5dGVzKG5ldyB1aW50OF90W2tZVVYxMlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzX3JlZmVyZW5jZShuZXcgdWludDhfdFtrUkdCU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXNfY29udmVydGVkKG5ldyB1aW50OF90W2tSR0JTaXplXSk7Ci0gIFJlYWRZVjEyRGF0YSgmeXV2X2J5dGVzKTsKLQotICBjb25zdCBpbnQga1dpZHRoID0gMTY3OwotICBDb252ZXJ0WVVWVG9SR0IzMlJvd19DKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX3JlZmVyZW5jZS5nZXQoKSwga1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgQ29udmVydFlVVlRvUkdCMzJSb3dfU1NFKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWQuZ2V0KCksIGtXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgbWVkaWE6OkVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotICBFWFBFQ1RfRVEoMCwgbWVtY21wKHJnYl9ieXRlc19yZWZlcmVuY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZC5nZXQoKSwga1dpZHRoICoga0JwcCkpOwotfQotCi0vLyA2NC1iaXQgcmVsZWFzZSArIGNvbXBvbmVudCBidWlsZHMgb24gV2luZG93cyBhcmUgdG9vIHNtYXJ0IGFuZCBvcHRpbWl6ZXMKLS8vIGF3YXkgdGhlIGZ1bmN0aW9uIGJlaW5nIHRlc3RlZC4KLSNpZiBkZWZpbmVkKE9TX1dJTikgJiYgKGRlZmluZWQoQVJDSF9DUFVfWDg2KSB8fCAhZGVmaW5lZChDT01QT05FTlRfQlVJTEQpKQotVEVTVChZVVZDb252ZXJ0VGVzdCwgU2NhbGVZVVZUb1JHQjMyUm93X1NTRSkgewotICBiYXNlOjpDUFUgY3B1OwotICBpZiAoIWNwdS5oYXNfc3NlKCkpIHsKLSAgICBMT0coV0FSTklORykgPDwgIlN5c3RlbSBub3Qgc3VwcG9ydGVkLiBUZXN0IHNraXBwZWQuIjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfYnl0ZXMobmV3IHVpbnQ4X3Rba1lVVjEyU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXNfcmVmZXJlbmNlKG5ldyB1aW50OF90W2tSR0JTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlc19jb252ZXJ0ZWQobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgUmVhZFlWMTJEYXRhKCZ5dXZfYnl0ZXMpOwotCi0gIGNvbnN0IGludCBrV2lkdGggPSAxNjc7Ci0gIGNvbnN0IGludCBrU291cmNlRHggPSA4MDAwMDsgIC8vIFRoaXMgdmFsdWUgbWVhbnMgYSBzY2FsZSBkb3duLgotICBTY2FsZVlVVlRvUkdCMzJSb3dfQyh5dXZfYnl0ZXMuZ2V0KCksIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX3JlZmVyZW5jZS5nZXQoKSwga1dpZHRoLCBrU291cmNlRHgsCi0gICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgU2NhbGVZVVZUb1JHQjMyUm93X1NTRSh5dXZfYnl0ZXMuZ2V0KCksIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWQuZ2V0KCksIGtXaWR0aCwga1NvdXJjZUR4LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgbWVkaWE6OkVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotICBFWFBFQ1RfRVEoMCwgbWVtY21wKHJnYl9ieXRlc19yZWZlcmVuY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZC5nZXQoKSwga1dpZHRoICoga0JwcCkpOwotfQotCi1URVNUKFlVVkNvbnZlcnRUZXN0LCBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKSB7Ci0gIGJhc2U6OkNQVSBjcHU7Ci0gIGlmICghY3B1Lmhhc19zc2UoKSkgewotICAgIExPRyhXQVJOSU5HKSA8PCAiU3lzdGVtIG5vdCBzdXBwb3J0ZWQuIFRlc3Qgc2tpcHBlZC4iOwotICAgIHJldHVybjsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHl1dl9ieXRlcyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlc19yZWZlcmVuY2UobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzX2NvbnZlcnRlZChuZXcgdWludDhfdFtrUkdCU2l6ZV0pOwotICBSZWFkWVYxMkRhdGEoJnl1dl9ieXRlcyk7Ci0KLSAgY29uc3QgaW50IGtXaWR0aCA9IDE2NzsKLSAgY29uc3QgaW50IGtTb3VyY2VEeCA9IDgwMDAwOyAgLy8gVGhpcyB2YWx1ZSBtZWFucyBhIHNjYWxlIGRvd24uCi0gIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19DKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfcmVmZXJlbmNlLmdldCgpLCBrV2lkdGgsIGtTb3VyY2VEeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9va3VwVGFibGUoWVYxMikpOwotICBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfU1NFKAotICAgICAgeXV2X2J5dGVzLmdldCgpLCB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVU9mZnNldCwKLSAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LCByZ2JfYnl0ZXNfY29udmVydGVkLmdldCgpLCBrV2lkdGgsCi0gICAgICBrU291cmNlRHgsIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgbWVkaWE6OkVtcHR5UmVnaXN0ZXJTdGF0ZSgpOwotICBFWFBFQ1RfRVEoMCwgbWVtY21wKHJnYl9ieXRlc19yZWZlcmVuY2UuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX2NvbnZlcnRlZC5nZXQoKSwga1dpZHRoICoga0JwcCkpOwotfQotI2VuZGlmICAvLyBkZWZpbmVkKE9TX1dJTikgJiYgKEFSQ0hfQ1BVX1g4NiB8fCBDT01QT05FTlRfQlVJTEQpCi0KLVRFU1QoWVVWQ29udmVydFRlc3QsIEZpbHRlcllVVlJvd3NfQ19PdXRPZkJvdW5kcykgewotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBzcmMobmV3IHVpbnQ4X3RbMTZdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZHN0KG5ldyB1aW50OF90WzE2XSk7Ci0KLSAgbWVtc2V0KHNyYy5nZXQoKSwgMHhmZiwgMTYpOwotICBtZW1zZXQoZHN0LmdldCgpLCAwLCAxNik7Ci0KLSAgbWVkaWE6OkZpbHRlcllVVlJvd3NfQyhkc3QuZ2V0KCksIHNyYy5nZXQoKSwgc3JjLmdldCgpLCAxLCAyNTUpOwotCi0gIEVYUEVDVF9FUSgyNTV1LCBkc3RbMF0pOwotICBmb3IgKGludCBpID0gMTsgaSA8IDE2OyArK2kpIHsKLSAgICBFWFBFQ1RfRVEoMHUsIGRzdFtpXSkgPDwgIiBub3QgZXF1YWwgYXQgIiA8PCBpOwotICB9Ci19Ci0KLVRFU1QoWVVWQ29udmVydFRlc3QsIEZpbHRlcllVVlJvd3NfU1NFMl9PdXRPZkJvdW5kcykgewotICBiYXNlOjpDUFUgY3B1OwotICBpZiAoIWNwdS5oYXNfc3NlMigpKSB7Ci0gICAgTE9HKFdBUk5JTkcpIDw8ICJTeXN0ZW0gbm90IHN1cHBvcnRlZC4gVGVzdCBza2lwcGVkLiI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gc3JjKG5ldyB1aW50OF90WzE2XSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGRzdChuZXcgdWludDhfdFsxNl0pOwotCi0gIG1lbXNldChzcmMuZ2V0KCksIDB4ZmYsIDE2KTsKLSAgbWVtc2V0KGRzdC5nZXQoKSwgMCwgMTYpOwotCi0gIG1lZGlhOjpGaWx0ZXJZVVZSb3dzX1NTRTIoZHN0LmdldCgpLCBzcmMuZ2V0KCksIHNyYy5nZXQoKSwgMSwgMjU1KTsKLQotICBFWFBFQ1RfRVEoMjU1dSwgZHN0WzBdKTsKLSAgZm9yIChpbnQgaSA9IDE7IGkgPCAxNjsgKytpKSB7Ci0gICAgRVhQRUNUX0VRKDB1LCBkc3RbaV0pOwotICB9Ci19Ci0KLVRFU1QoWVVWQ29udmVydFRlc3QsIEZpbHRlcllVVlJvd3NfU1NFMl9VbmFsaWduZWREZXN0aW5hdGlvbikgewotICBiYXNlOjpDUFUgY3B1OwotICBpZiAoIWNwdS5oYXNfc3NlMigpKSB7Ci0gICAgTE9HKFdBUk5JTkcpIDw8ICJTeXN0ZW0gbm90IHN1cHBvcnRlZC4gVGVzdCBza2lwcGVkLiI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgY29uc3QgaW50IGtTaXplID0gNjQ7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHNyYyhuZXcgdWludDhfdFtrU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkc3Rfc2FtcGxlKG5ldyB1aW50OF90W2tTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGRzdChuZXcgdWludDhfdFtrU2l6ZV0pOwotCi0gIG1lbXNldChkc3Rfc2FtcGxlLmdldCgpLCAwLCBrU2l6ZSk7Ci0gIG1lbXNldChkc3QuZ2V0KCksIDAsIGtTaXplKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrU2l6ZTsgKytpKSBzcmNbaV0gPSAxMDAgKyBpOwotCi0gIG1lZGlhOjpGaWx0ZXJZVVZSb3dzX0MoZHN0X3NhbXBsZS5nZXQoKSwgc3JjLmdldCgpLCBzcmMuZ2V0KCksIDM3LCAxMjgpOwotCi0gIC8vIEdlbmVyYXRlIGFuIHVuYWxpZ25lZCBvdXRwdXQgYWRkcmVzcy4KLSAgdWludDhfdCogZHN0X3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KAotICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihkc3QuZ2V0KCkgKyAxNikgJiB+MTUpICsgMSk7Ci0gIG1lZGlhOjpGaWx0ZXJZVVZSb3dzX1NTRTIoZHN0X3B0ciwgc3JjLmdldCgpLCBzcmMuZ2V0KCksIDM3LCAxMjgpOwotICBtZWRpYTo6RW1wdHlSZWdpc3RlclN0YXRlKCk7Ci0KLSAgRVhQRUNUX0VRKDAsIG1lbWNtcChkc3Rfc2FtcGxlLmdldCgpLCBkc3RfcHRyLCAzNykpOwotfQotCi0jaWYgZGVmaW5lZChBUkNIX0NQVV9YODZfNjQpCi0KLVRFU1QoWVVWQ29udmVydFRlc3QsIFNjYWxlWVVWVG9SR0IzMlJvd19TU0UyX1g2NCkgewotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiB5dXZfYnl0ZXMobmV3IHVpbnQ4X3Rba1lVVjEyU2l6ZV0pOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiByZ2JfYnl0ZXNfcmVmZXJlbmNlKG5ldyB1aW50OF90W2tSR0JTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlc19jb252ZXJ0ZWQobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgUmVhZFlWMTJEYXRhKCZ5dXZfYnl0ZXMpOwotCi0gIGNvbnN0IGludCBrV2lkdGggPSAxNjc7Ci0gIGNvbnN0IGludCBrU291cmNlRHggPSA4MDAwMDsgIC8vIFRoaXMgdmFsdWUgbWVhbnMgYSBzY2FsZSBkb3duLgotICBTY2FsZVlVVlRvUkdCMzJSb3dfQyh5dXZfYnl0ZXMuZ2V0KCksIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VVT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgcmdiX2J5dGVzX3JlZmVyZW5jZS5nZXQoKSwga1dpZHRoLCBrU291cmNlRHgsCi0gICAgICAgICAgICAgICAgICAgICAgIEdldExvb2t1cFRhYmxlKFlWMTIpKTsKLSAgU2NhbGVZVVZUb1JHQjMyUm93X1NTRTJfWDY0KHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWQuZ2V0KCksIGtXaWR0aCwga1NvdXJjZUR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9va3VwVGFibGUoWVYxMikpOwotICBtZWRpYTo6RW1wdHlSZWdpc3RlclN0YXRlKCk7Ci0gIEVYUEVDVF9FUSgwLCBtZW1jbXAocmdiX2J5dGVzX3JlZmVyZW5jZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfY29udmVydGVkLmdldCgpLCBrV2lkdGggKiBrQnBwKSk7Ci19Ci0KLVRFU1QoWVVWQ29udmVydFRlc3QsIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19NTVhfWDY0KSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHl1dl9ieXRlcyhuZXcgdWludDhfdFtrWVVWMTJTaXplXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IHJnYl9ieXRlc19yZWZlcmVuY2UobmV3IHVpbnQ4X3Rba1JHQlNpemVdKTsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gcmdiX2J5dGVzX2NvbnZlcnRlZChuZXcgdWludDhfdFtrUkdCU2l6ZV0pOwotICBSZWFkWVYxMkRhdGEoJnl1dl9ieXRlcyk7Ci0KLSAgY29uc3QgaW50IGtXaWR0aCA9IDE2NzsKLSAgY29uc3QgaW50IGtTb3VyY2VEeCA9IDgwMDAwOyAgLy8gVGhpcyB2YWx1ZSBtZWFucyBhIHNjYWxlIGRvd24uCi0gIExpbmVhclNjYWxlWVVWVG9SR0IzMlJvd19DKHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9ieXRlcy5nZXQoKSArIGtTb3VyY2VWT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JfYnl0ZXNfcmVmZXJlbmNlLmdldCgpLCBrV2lkdGgsIGtTb3VyY2VEeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9va3VwVGFibGUoWVYxMikpOwotICBMaW5lYXJTY2FsZVlVVlRvUkdCMzJSb3dfTU1YX1g2NCgKLSAgICAgIHl1dl9ieXRlcy5nZXQoKSwgeXV2X2J5dGVzLmdldCgpICsga1NvdXJjZVVPZmZzZXQsCi0gICAgICB5dXZfYnl0ZXMuZ2V0KCkgKyBrU291cmNlVk9mZnNldCwgcmdiX2J5dGVzX2NvbnZlcnRlZC5nZXQoKSwga1dpZHRoLAotICAgICAga1NvdXJjZUR4LCBHZXRMb29rdXBUYWJsZShZVjEyKSk7Ci0gIG1lZGlhOjpFbXB0eVJlZ2lzdGVyU3RhdGUoKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNtcChyZ2JfYnl0ZXNfcmVmZXJlbmNlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYl9ieXRlc19jb252ZXJ0ZWQuZ2V0KCksIGtXaWR0aCAqIGtCcHApKTsKLX0KLQotI2VuZGlmICAvLyBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl82NCkKLQotI2VuZGlmICAvLyBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYyBiL2NvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuY2MKaW5kZXggNzZiYTIzYy4uYmU5YjhlNiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5jYworKysgYi9jb2JhbHQvbWVkaWEvZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yLmNjCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcmVzb2x1dGlvbi5oIgogI2luY2x1ZGUgIm5iL2FsbG9jYXRvci5oIgogI2luY2x1ZGUgIm5iL21lbW9yeV9zY29wZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCkBAIC00NywxMSArNDYsMTMgQEAKICAgICAgIGFsbG9jYXRpb25fdW5pdF8oU2JNZWRpYUdldEJ1ZmZlckFsbG9jYXRpb25Vbml0KCkpIHsKICAgaWYgKCF1c2luZ19tZW1vcnlfcG9vbF8pIHsKICAgICBETE9HKElORk8pIDw8ICJBbGxvY2F0ZWQgbWVkaWEgYnVmZmVyIG1lbW9yeSB1c2luZyBTYk1lbW9yeSogZnVuY3Rpb25zLiI7CisgICAgQWxsb2NhdG9yOjpTZXQodGhpcyk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgaWYgKGlzX21lbW9yeV9wb29sX2FsbG9jYXRlZF9vbl9kZW1hbmRfKSB7CiAgICAgRExPRyhJTkZPKSA8PCAiQWxsb2NhdGVkIG1lZGlhIGJ1ZmZlciBwb29sIG9uIGRlbWFuZC4iOworICAgIEFsbG9jYXRvcjo6U2V0KHRoaXMpOwogICAgIHJldHVybjsKICAgfQogCkBAIC02Miw5ICs2MywxMiBAQAogICAvLyBVcGRhdGVWaWRlb0NvbmZpZygpLgogICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKICAgQ3JlYXRlUmV1c2VBbGxvY2F0b3IoMCk7CisgIEFsbG9jYXRvcjo6U2V0KHRoaXMpOwogfQogCiBEZWNvZGVyQnVmZmVyQWxsb2NhdG9yOjp+RGVjb2RlckJ1ZmZlckFsbG9jYXRvcigpIHsKKyAgQWxsb2NhdG9yOjpTZXQobnVsbHB0cik7CisKICAgaWYgKCF1c2luZ19tZW1vcnlfcG9vbF8pIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTEwOSwxMyArMTEzLDEyIEBACiAgIH0KIH0KIAotRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yOjpBbGxvY2F0aW9ucyBEZWNvZGVyQnVmZmVyQWxsb2NhdG9yOjpBbGxvY2F0ZSgKLSAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgaW50cHRyX3QgY29udGV4dCkgewordm9pZCogRGVjb2RlckJ1ZmZlckFsbG9jYXRvcjo6QWxsb2NhdGUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKICAgVFJBQ0tfTUVNT1JZX1NDT1BFKCJNZWRpYSIpOwogCiAgIGlmICghdXNpbmdfbWVtb3J5X3Bvb2xfKSB7CiAgICAgc2JtZW1vcnlfYnl0ZXNfdXNlZF8uZmV0Y2hfYWRkKHNpemUpOwotICAgIHJldHVybiBBbGxvY2F0aW9ucyhTYk1lbW9yeUFsbG9jYXRlQWxpZ25lZChhbGlnbm1lbnQsIHNpemUpLCBzaXplKTsKKyAgICByZXR1cm4gU2JNZW1vcnlBbGxvY2F0ZUFsaWduZWQoYWxpZ25tZW50LCBzaXplKTsKICAgfQogCiAgIHN0YXJib2FyZDo6U2NvcGVkTG9jayBzY29wZWRfbG9jayhtdXRleF8pOwpAQCAtMTM2LDI4ICsxMzksMjUgQEAKIAogICB2b2lkKiBwID0gcmV1c2VfYWxsb2NhdG9yXy0+QWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKICAgaWYgKCFwKSB7Ci0gICAgcmV0dXJuIEFsbG9jYXRpb25zKCk7CisgICAgcmV0dXJuIHA7CiAgIH0KICAgTE9HX0lGKElORk8sIGtFbmFibGVBbGxvY2F0aW9uTG9nKQotICAgICAgPDwgIk1lZGlhIEFsbG9jYXRpb24gTG9nICIgPDwgcCA8PCAiICIgPDwgc2l6ZSA8PCAiICIgPDwgYWxpZ25tZW50IDw8ICIgIgotICAgICAgPDwgY29udGV4dDsKLSAgaWYgKCFVcGRhdGVBbGxvY2F0aW9uUmVjb3JkKCkpIHsKLSAgICAvLyBVcGRhdGVBbGxvY2F0aW9uUmVjb3JkIG1heSBmYWlsIHdpdGggbm9uLU5VTEwgcCB3aGVuIGNhcGFjaXR5IGlzCi0gICAgLy8gZXhjZWVkZWQuCi0gICAgcmV1c2VfYWxsb2NhdG9yXy0+RnJlZShwKTsKLSAgICByZXR1cm4gQWxsb2NhdGlvbnMoKTsKLSAgfQotICByZXR1cm4gQWxsb2NhdGlvbnMocCwgc2l6ZSk7CisgICAgICA8PCAiTWVkaWEgQWxsb2NhdGlvbiBMb2cgIiA8PCBwIDw8ICIgIiA8PCBzaXplIDw8ICIgIiA8PCBhbGlnbm1lbnQgPDwgIiAiOworICBVcGRhdGVBbGxvY2F0aW9uUmVjb3JkKCk7CisgIHJldHVybiBwOwogfQogCi12b2lkIERlY29kZXJCdWZmZXJBbGxvY2F0b3I6OkZyZWUoQWxsb2NhdGlvbnMgYWxsb2NhdGlvbnMpIHsKK3ZvaWQgRGVjb2RlckJ1ZmZlckFsbG9jYXRvcjo6RnJlZSh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkgewogICBUUkFDS19NRU1PUllfU0NPUEUoIk1lZGlhIik7CiAKKyAgaWYgKHAgPT0gbnVsbHB0cikgeworICAgIERDSEVDS19FUShzaXplLCAwKTsKKyAgICByZXR1cm47CisgIH0KKwogICBpZiAoIXVzaW5nX21lbW9yeV9wb29sXykgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsb2NhdGlvbnMubnVtYmVyX29mX2J1ZmZlcnMoKTsgKytpKSB7Ci0gICAgICBzYm1lbW9yeV9ieXRlc191c2VkXy5mZXRjaF9zdWIoYWxsb2NhdGlvbnMuYnVmZmVyX3NpemVzKClbaV0pOwotICAgICAgU2JNZW1vcnlEZWFsbG9jYXRlQWxpZ25lZChhbGxvY2F0aW9ucy5idWZmZXJzKClbaV0pOwotICAgIH0KKyAgICBzYm1lbW9yeV9ieXRlc191c2VkXy5mZXRjaF9zdWIoc2l6ZSk7CisgICAgU2JNZW1vcnlEZWFsbG9jYXRlQWxpZ25lZChwKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTY1LDE1ICsxNjUsOSBAQAogCiAgIERDSEVDSyhyZXVzZV9hbGxvY2F0b3JfKTsKIAotICBpZiAoa0VuYWJsZUFsbG9jYXRpb25Mb2cpIHsKLSAgICBEQ0hFQ0tfRVEoYWxsb2NhdGlvbnMubnVtYmVyX29mX2J1ZmZlcnMoKSwgMSk7Ci0gICAgTE9HKElORk8pIDw8ICJNZWRpYSBBbGxvY2F0aW9uIExvZyAiIDw8IGFsbG9jYXRpb25zLmJ1ZmZlcnMoKVswXTsKLSAgfQorICBMT0dfSUYoSU5GTywga0VuYWJsZUFsbG9jYXRpb25Mb2cpIDw8ICJNZWRpYSBBbGxvY2F0aW9uIExvZyAiIDw8IHA7CiAKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxvY2F0aW9ucy5udW1iZXJfb2ZfYnVmZmVycygpOyArK2kpIHsKLSAgICByZXVzZV9hbGxvY2F0b3JfLT5GcmVlKGFsbG9jYXRpb25zLmJ1ZmZlcnMoKVtpXSk7Ci0gIH0KLQorICByZXVzZV9hbGxvY2F0b3JfLT5GcmVlKHApOwogICBpZiAoaXNfbWVtb3J5X3Bvb2xfYWxsb2NhdGVkX29uX2RlbWFuZF8pIHsKICAgICBpZiAocmV1c2VfYWxsb2NhdG9yXy0+R2V0QWxsb2NhdGVkKCkgPT0gMCkgewogICAgICAgRExPRyhJTkZPKSA8PCAiRnJlZWQgIiA8PCByZXVzZV9hbGxvY2F0b3JfLT5HZXRDYXBhY2l0eSgpCkBAIC0xODQsMjIgKzE3OCwyNCBAQAogfQogCiB2b2lkIERlY29kZXJCdWZmZXJBbGxvY2F0b3I6OlVwZGF0ZVZpZGVvQ29uZmlnKAotICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7CisgICAgY29uc3QgOjptZWRpYTo6VmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKICAgaWYgKCF1c2luZ19tZW1vcnlfcG9vbF8pIHsKICAgICByZXR1cm47CiAgIH0KIAogICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgc2NvcGVkX2xvY2sobXV0ZXhfKTsKIAotICB2aWRlb19jb2RlY18gPSBNZWRpYVZpZGVvQ29kZWNUb1NiTWVkaWFWaWRlb0NvZGVjKGNvbmZpZy5jb2RlYygpKTsKLSAgcmVzb2x1dGlvbl93aWR0aF8gPSBjb25maWcudmlzaWJsZV9yZWN0KCkuc2l6ZSgpLndpZHRoKCk7Ci0gIHJlc29sdXRpb25faGVpZ2h0XyA9IGNvbmZpZy52aXNpYmxlX3JlY3QoKS5zaXplKCkuaGVpZ2h0KCk7Ci0gIGJpdHNfcGVyX3BpeGVsXyA9IGNvbmZpZy53ZWJtX2NvbG9yX21ldGFkYXRhKCkuQml0c1BlckNoYW5uZWw7Ci0KICAgaWYgKCFyZXVzZV9hbGxvY2F0b3JfKSB7CiAgICAgcmV0dXJuOwogICB9CiAKKyAgdmlkZW9fY29kZWNfID0gTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyhjb25maWcuY29kZWMoKSk7CisgIHJlc29sdXRpb25fd2lkdGhfID0gY29uZmlnLnZpc2libGVfcmVjdCgpLnNpemUoKS53aWR0aCgpOworICByZXNvbHV0aW9uX2hlaWdodF8gPSBjb25maWcudmlzaWJsZV9yZWN0KCkuc2l6ZSgpLmhlaWdodCgpOworICAvLyBUT0RPKGIvMjMwNzk5ODE1KTogQ29uc2lkZXIgaW5mZXIgfGJpdHNfcGVyX3BpeGVsX3wgZnJvbSB0aGUgdmlkZW8gY29kZWMsCisgIC8vIG9yIGRlcHJlY2F0ZSBpdCBjb21wbGV0ZWx5LgorICBiaXRzX3Blcl9waXhlbF8gPSAwOworCiAgIHJldXNlX2FsbG9jYXRvcl8tPkluY3JlYXNlTWF4Q2FwYWNpdHlJZk5lY2Vzc2FyeShTYk1lZGlhR2V0TWF4QnVmZmVyQ2FwYWNpdHkoCiAgICAgICB2aWRlb19jb2RlY18sIHJlc29sdXRpb25fd2lkdGhfLCByZXNvbHV0aW9uX2hlaWdodF8sIGJpdHNfcGVyX3BpeGVsXykpOwogICBETE9HKElORk8pIDw8ICJNYXggY2FwYWNpdHkgb2YgZGVjb2RlciBidWZmZXIgYWxsb2NhdG9yIGFmdGVyIGluY3JlYXNpbmcgaXMgIgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5oIGIvY29iYWx0L21lZGlhL2RlY29kZXJfYnVmZmVyX2FsbG9jYXRvci5oCmluZGV4IDY3ZTUzNTIuLjI3NDU2MWQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuaAorKysgYi9jb2JhbHQvbWVkaWEvZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yLmgKQEAgLTE4LDIwICsxOCwxOSBAQAogI2luY2x1ZGUgPG1lbW9yeT4KIAogI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcmVzb2x1dGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9kZWNvZGVyX2J1ZmZlcl9tZW1vcnlfaW5mby5oIgogI2luY2x1ZGUgIm5iL2JpZGlyZWN0aW9uYWxfZml0X3JldXNlX2FsbG9jYXRvci5oIgogI2luY2x1ZGUgIm5iL3N0YXJib2FyZF9tZW1vcnlfYWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2F0b21pYy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbXV0ZXguaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CiAKLWNsYXNzIERlY29kZXJCdWZmZXJBbGxvY2F0b3IgOiBwdWJsaWMgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yLAorY2xhc3MgRGVjb2RlckJ1ZmZlckFsbG9jYXRvciA6IHB1YmxpYyA6Om1lZGlhOjpEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIERlY29kZXJCdWZmZXJNZW1vcnlJbmZvIHsKICBwdWJsaWM6CiAgIERlY29kZXJCdWZmZXJBbGxvY2F0b3IoKTsKQEAgLTQwLDE0ICszOSwxNyBAQAogICB2b2lkIFN1c3BlbmQoKTsKICAgdm9pZCBSZXN1bWUoKTsKIAotICBBbGxvY2F0aW9ucyBBbGxvY2F0ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50cHRyX3QgY29udGV4dCkgb3ZlcnJpZGU7Ci0gIHZvaWQgRnJlZShBbGxvY2F0aW9ucyBhbGxvY2F0aW9ucykgb3ZlcnJpZGU7Ci0gIHZvaWQgVXBkYXRlVmlkZW9Db25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcpIG92ZXJyaWRlOworICAvLyBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IgbWV0aG9kcy4KKyAgdm9pZCogQWxsb2NhdGUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpIG92ZXJyaWRlOworICB2b2lkIEZyZWUodm9pZCogcCwgc2l6ZV90IHNpemUpIG92ZXJyaWRlOworCisgIC8vIERlY29kZXJCdWZmZXJNZW1vcnlJbmZvIG1ldGhvZHMuCiAgIHNpemVfdCBHZXRBbGxvY2F0ZWRNZW1vcnkoKSBjb25zdCBvdmVycmlkZTsKICAgc2l6ZV90IEdldEN1cnJlbnRNZW1vcnlDYXBhY2l0eSgpIGNvbnN0IG92ZXJyaWRlOwogICBzaXplX3QgR2V0TWF4aW11bU1lbW9yeUNhcGFjaXR5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgdm9pZCBVcGRhdGVWaWRlb0NvbmZpZyhjb25zdCA6Om1lZGlhOjpWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZyk7CisKICBwcml2YXRlOgogICB2b2lkIENyZWF0ZVJldXNlQWxsb2NhdG9yKGludCBtYXhfY2FwYWNpdHkpOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmV0Y2hlcl9idWZmZXJlZF9kYXRhX3NvdXJjZS5jYyBiL2NvYmFsdC9tZWRpYS9mZXRjaGVyX2J1ZmZlcmVkX2RhdGFfc291cmNlLmNjCmluZGV4IDllYjI1YmUuLmM4YTk1OTUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9mZXRjaGVyX2J1ZmZlcmVkX2RhdGFfc291cmNlLmNjCisrKyBiL2NvYmFsdC9tZWRpYS9mZXRjaGVyX2J1ZmZlcmVkX2RhdGFfc291cmNlLmNjCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImJhc2UvYmluZC5oIgogI2luY2x1ZGUgImJhc2UvY2FsbGJhY2tfaGVscGVycy5oIgpAQCAtMjI2LDkgKzIyNywxNCBAQAogCiAgIHNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6bWluPHVpbnQ2ND4oc2l6ZSwgbGFzdF9yZXF1ZXN0X3NpemVfKSk7CiAKLSAgaWYgKHNpemUgPT0gMCkgeworICBpZiAoc2l6ZSA9PSAwIHx8IHNpemUgPiBidWZmZXJfLkdldE1heENhcGFjaXR5KCkpIHsKICAgICAvLyBUaGUgc2VydmVyIHNpZGUgZG9lc24ndCBzdXBwb3J0IHJhbmdlIHJlcXVlc3QuICBEZWxldGUgdGhlIGZldGNoZXIgdG8KICAgICAvLyBzdG9wIHRoZSBjdXJyZW50IHJlcXVlc3QuCisgICAgTE9HKEVSUk9SKQorICAgICAgICA8PCAiRmV0Y2hlckJ1ZmZlcmVkRGF0YVNvdXJjZTo6T25VUkxGZXRjaERvd25sb2FkUHJvZ3Jlc3M6IHNlcnZlciAiCisgICAgICAgIDw8ICJkb2Vzbid0IHN1cHBvcnQgcmFuZ2UgcmVxdWVzdHMgKGUuZy4gUHl0aG9uIFNpbXBsZUhUVFBTZXJ2ZXIpLiAiCisgICAgICAgIDw8ICJQbGVhc2UgdXNlIGEgc2VydmVyIHRoYXQgc3VwcG9ydHMgcmFuZ2UgcmVxdWVzdHMgKGUuZy4gRmxhc2spLiI7CisgICAgZXJyb3Jfb2NjdXJlZF8gPSB0cnVlOwogICAgIGZldGNoZXJfLnJlc2V0KCk7CiAgICAgUHJvY2Vzc1BlbmRpbmdSZWFkX0xvY2tlZCgpOwogICAgIFVwZGF0ZURvd25sb2FkaW5nU3RhdHVzKC8qIGlzX2Rvd25sb2FkaW5nID0gKi8gZmFsc2UpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNWE0YmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0MzkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXRyaWNzL2hpc3RvZ3JhbS5oIgotI2luY2x1ZGUgImJhc2UvbWV0cmljcy9oaXN0b2dyYW1fbWFjcm9zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9taW1lX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLXVzaW5nIGJhc2U6OlRpbWVEZWx0YTsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi0vLyBQYXJzZSB0eXBlIGFuZCBjb2RlY3MgZnJvbSBtaW1lIHR5cGUuIEl0IHdpbGwgcmV0dXJuICJ2aWRlby9tcDQiIGFuZAotLy8gImF2YzEuNDJFMDFFLCBtcDRhLjQwLjIiIGZvciAidmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFLCBtcDRhLjQwLjIiLgotLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBtaW5pbXVtIHZhbGlkYXRpb24gYXMgdGhlIG1lZGlhIHN0YWNrIHdpbGwgY2hlY2sKLS8vIHRoZSB0eXBlIGFuZCBjb2RlY3Mgc3RyaWN0bHkuCi1ib29sIFBhcnNlTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgc3RkOjpzdHJpbmcqIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGNvZGVjcykgewotICBEQ0hFQ0sodHlwZSk7Ci0gIERDSEVDSyhjb2RlY3MpOwotICBzdGF0aWMgY29uc3QgY2hhciBrQ29kZWNzW10gPSAiY29kZWNzPSI7Ci0KLSAgLy8gU3BsaXRTdHJpbmcgd2lsbCBhbHNvIHRyaW0gdGhlIHJlc3VsdHMuCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnMgPSA6OmJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgbWltZV90eXBlLCAiOyIsIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotICAvLyBUaGUgZmlyc3Qgb25lIGhhcyB0byBiZSBtaW1lIHR5cGUgd2l0aCBkZWxpbWl0ZXIgJy8nIGxpa2UgJ3ZpZGVvL21wNCcuCi0gIGlmICh0b2tlbnMuc2l6ZSgpIDwgMiB8fCB0b2tlbnNbMF0uZmluZCgnLycpID09IHRva2Vuc1swXS5ucG9zKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gICp0eXBlID0gdG9rZW5zWzBdOwotICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHRva2Vucy5zaXplKCk7ICsraSkgewotICAgIGlmIChiYXNlOjpzdHJuY2FzZWNtcCh0b2tlbnNbaV0uY19zdHIoKSwga0NvZGVjcywgc3RybGVuKGtDb2RlY3MpKSkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgICpjb2RlY3MgPSB0b2tlbnNbaV0uc3Vic3RyKHN0cmxlbigiY29kZWNzPSIpKTsKLSAgICBiYXNlOjpUcmltU3RyaW5nKCpjb2RlY3MsICIgXCIiLCBjb2RlY3MpOwotICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiAhY29kZWNzLT5lbXB0eSgpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotQ2h1bmtEZW11eGVyU3RyZWFtOjpDaHVua0RlbXV4ZXJTdHJlYW0oVHlwZSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3BsaWNlX2ZyYW1lc19lbmFibGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWQpCi0gICAgOiB0eXBlXyh0eXBlKSwKLSAgICAgIG1pbWVfKG1pbWUpLAotICAgICAgbGl2ZW5lc3NfKERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1VOS05PV04pLAotICAgICAgbWVkaWFfdHJhY2tfaWRfKG1lZGlhX3RyYWNrX2lkKSwKLSAgICAgIHN0YXRlXyhVTklOSVRJQUxJWkVEKSwKLSAgICAgIHNwbGljZV9mcmFtZXNfZW5hYmxlZF8oc3BsaWNlX2ZyYW1lc19lbmFibGVkKSwKLSAgICAgIHBhcnRpYWxfYXBwZW5kX3dpbmRvd190cmltbWluZ19lbmFibGVkXyhmYWxzZSksCi0gICAgICBpc19lbmFibGVkXyh0cnVlKSB7fQotCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6U3RhcnRSZXR1cm5pbmdEYXRhKCkgewotICBEVkxPRygxKSA8PCAiQ2h1bmtEZW11eGVyU3RyZWFtOjpTdGFydFJldHVybmluZ0RhdGEoKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERDSEVDSyhyZWFkX2NiXy5pc19udWxsKCkpOwotICBDaGFuZ2VTdGF0ZV9Mb2NrZWQoUkVUVVJOSU5HX0RBVEFfRk9SX1JFQURTKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06OkFib3J0UmVhZHMoKSB7Ci0gIERWTE9HKDEpIDw8ICJDaHVua0RlbXV4ZXJTdHJlYW06OkFib3J0UmVhZHMoKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIENoYW5nZVN0YXRlX0xvY2tlZChSRVRVUk5JTkdfQUJPUlRfRk9SX1JFQURTKTsKLSAgaWYgKCFyZWFkX2NiXy5pc19udWxsKCkpIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZyZWFkX2NiXykuUnVuKGtBYm9ydGVkLCBOVUxMKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06OkNvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBpZiAocmVhZF9jYl8uaXNfbnVsbCgpKSByZXR1cm47Ci0KLSAgQ29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGVfTG9ja2VkKCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyU3RyZWFtOjpTaHV0ZG93bigpIHsKLSAgRFZMT0coMSkgPDwgIkNodW5rRGVtdXhlclN0cmVhbTo6U2h1dGRvd24oKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIENoYW5nZVN0YXRlX0xvY2tlZChTSFVURE9XTik7Ci0KLSAgLy8gUGFzcyBhbiBlbmQgb2Ygc3RyZWFtIGJ1ZmZlciB0byB0aGUgcGVuZGluZyBjYWxsYmFjayB0byBzaWduYWwgdGhhdCBubyBtb3JlCi0gIC8vIGRhdGEgd2lsbCBiZSBzZW50LgotICBpZiAoIXJlYWRfY2JfLmlzX251bGwoKSkgewotICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZyZWFkX2NiXykuUnVuKERlbXV4ZXJTdHJlYW06OmtPaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcigpKTsKLSAgfQotfQotCi1ib29sIENodW5rRGVtdXhlclN0cmVhbTo6SXNTZWVrV2FpdGluZ0ZvckRhdGEoKSBjb25zdCB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0KLSAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIHRleHQgdHJhY2tzLiBTZWUgdGhlIG5vdGUgaW4KLSAgLy8gU291cmNlQnVmZmVyU3RhdGU6OklzU2Vla1dhaXRpbmdGb3JEYXRhKCkuCi0gIERDSEVDS19ORSh0eXBlXywgRGVtdXhlclN0cmVhbTo6VEVYVCk7Ci0KLSAgcmV0dXJuIHN0cmVhbV8tPklzU2Vla1BlbmRpbmcoKTsKLX0KLQotYmFzZTo6VGltZURlbHRhIENodW5rRGVtdXhlclN0cmVhbTo6R2V0U2Vla0tleWZyYW1lVGltZXN0YW1wKCkgY29uc3QgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICByZXR1cm4gc3RyZWFtXy0+R2V0U2Vla0tleWZyYW1lVGltZXN0YW1wKCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyU3RyZWFtOjpTZWVrKFRpbWVEZWx0YSB0aW1lKSB7Ci0gIERWTE9HKDEpIDw8ICJDaHVua0RlbXV4ZXJTdHJlYW06OlNlZWsoIiA8PCB0aW1lLkluU2Vjb25kc0YoKSA8PCAiKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERDSEVDSyhyZWFkX2NiXy5pc19udWxsKCkpOwotICBEQ0hFQ0soc3RhdGVfID09IFVOSU5JVElBTElaRUQgfHwgc3RhdGVfID09IFJFVFVSTklOR19BQk9SVF9GT1JfUkVBRFMpCi0gICAgICA8PCBzdGF0ZV87Ci0KLSAgc3RyZWFtXy0+U2Vlayh0aW1lKTsKLX0KLQotYm9vbCBDaHVua0RlbXV4ZXJTdHJlYW06OkFwcGVuZChjb25zdCBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlJiBidWZmZXJzKSB7Ci0gIGlmIChidWZmZXJzLmVtcHR5KCkpIHJldHVybiBmYWxzZTsKLQotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBTSFVURE9XTik7Ci0gIGlmICghc3RyZWFtXy0+QXBwZW5kKGJ1ZmZlcnMpKSB7Ci0gICAgRFZMT0coMSkgPDwgIkNodW5rRGVtdXhlclN0cmVhbTo6QXBwZW5kKCkgOiBzdHJlYW0gYXBwZW5kIGZhaWxlZCI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKCFyZWFkX2NiXy5pc19udWxsKCkpIENvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlX0xvY2tlZCgpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6UmVtb3ZlKFRpbWVEZWx0YSBzdGFydCwgVGltZURlbHRhIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGR1cmF0aW9uKSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHN0cmVhbV8tPlJlbW92ZShzdGFydCwgZW5kLCBkdXJhdGlvbik7Ci19Ci0KLWJvb2wgQ2h1bmtEZW11eGVyU3RyZWFtOjpFdmljdENvZGVkRnJhbWVzKERlY29kZVRpbWVzdGFtcCBtZWRpYV90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ld0RhdGFTaXplKSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHJldHVybiBzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKG1lZGlhX3RpbWUsIG5ld0RhdGFTaXplKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06Ok9uU2V0RHVyYXRpb24oVGltZURlbHRhIGR1cmF0aW9uKSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHN0cmVhbV8tPk9uU2V0RHVyYXRpb24oZHVyYXRpb24pOwotfQotCi1SYW5nZXM8VGltZURlbHRhPiBDaHVua0RlbXV4ZXJTdHJlYW06OkdldEJ1ZmZlcmVkUmFuZ2VzKAotICAgIFRpbWVEZWx0YSBkdXJhdGlvbikgY29uc3QgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotCi0gIGlmICh0eXBlXyA9PSBURVhUKSB7Ci0gICAgLy8gU2luY2UgdGV4dCB0cmFja3MgYXJlIGRpc2NvbnRpbnVvdXMgYW5kIHRoZSBsYWNrIG9mIGN1ZXMgc2hvdWxkIG5vdCBibG9jawotICAgIC8vIHBsYXliYWNrLCByZXBvcnQgdGhlIGJ1ZmZlcmVkIHJhbmdlIGZvciB0ZXh0IHRyYWNrcyBhcyBbMCwgfGR1cmF0aW9ufCkgc28KLSAgICAvLyB0aGF0IGludGVyc2VjdGlvbnMgd2l0aCBhdWRpbyAmIHZpZGVvIHRyYWNrcyBhcmUgY29tcHV0ZWQgY29ycmVjdGx5IHdoZW4KLSAgICAvLyBubyBjdWVzIGFyZSBwcmVzZW50LgotICAgIFJhbmdlczxUaW1lRGVsdGE+IHRleHRfcmFuZ2U7Ci0gICAgdGV4dF9yYW5nZS5BZGQoVGltZURlbHRhKCksIGR1cmF0aW9uKTsKLSAgICByZXR1cm4gdGV4dF9yYW5nZTsKLSAgfQotCi0gIFJhbmdlczxUaW1lRGVsdGE+IHJhbmdlID0gc3RyZWFtXy0+R2V0QnVmZmVyZWRUaW1lKCk7Ci0KLSAgaWYgKHJhbmdlLnNpemUoKSA9PSAwdSkgcmV0dXJuIHJhbmdlOwotCi0gIC8vIENsYW1wIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSdzIGJ1ZmZlcmVkIHJhbmdlcyB0byBmaXQgd2l0aGluIHRoZSBkdXJhdGlvbi4KLSAgLy8gVGhpcyBjYW4gYmUgZG9uZSBieSBpbnRlcnNlY3RpbmcgdGhlIHN0cmVhbSdzIHJhbmdlIHdpdGggdGhlIHZhbGlkIHRpbWUKLSAgLy8gcmFuZ2UuCi0gIFJhbmdlczxUaW1lRGVsdGE+IHZhbGlkX3RpbWVfcmFuZ2U7Ci0gIHZhbGlkX3RpbWVfcmFuZ2UuQWRkKHJhbmdlLnN0YXJ0KDApLCBkdXJhdGlvbik7Ci0gIHJldHVybiByYW5nZS5JbnRlcnNlY3Rpb25XaXRoKHZhbGlkX3RpbWVfcmFuZ2UpOwotfQotCi1UaW1lRGVsdGEgQ2h1bmtEZW11eGVyU3RyZWFtOjpHZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkgY29uc3QgewotICByZXR1cm4gc3RyZWFtXy0+R2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpOwotfQotCi1UaW1lRGVsdGEgQ2h1bmtEZW11eGVyU3RyZWFtOjpHZXRCdWZmZXJlZER1cmF0aW9uKCkgY29uc3QgewotICByZXR1cm4gc3RyZWFtXy0+R2V0QnVmZmVyZWREdXJhdGlvbigpOwotfQotCi1zaXplX3QgQ2h1bmtEZW11eGVyU3RyZWFtOjpHZXRCdWZmZXJlZFNpemUoKSBjb25zdCB7Ci0gIHJldHVybiBzdHJlYW1fLT5HZXRCdWZmZXJlZFNpemUoKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06Ok9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cCgKLSAgICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wKSB7Ci0gIERWTE9HKDIpIDw8ICJDaHVua0RlbXV4ZXJTdHJlYW06Ok9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cCgiCi0gICAgICAgICAgIDw8IHN0YXJ0X3RpbWVzdGFtcC5JblNlY29uZHNGKCkgPDwgIikiOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBzdHJlYW1fLT5PblN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoc3RhcnRfdGltZXN0YW1wKTsKLX0KLQotYm9vbCBDaHVua0RlbXV4ZXJTdHJlYW06OlVwZGF0ZUF1ZGlvQ29uZmlnKAotICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgY29uZmlnLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgRENIRUNLKGNvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotICBEQ0hFQ0tfRVEodHlwZV8sIEFVRElPKTsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgaWYgKCFzdHJlYW1fKSB7Ci0gICAgRENIRUNLX0VRKHN0YXRlXywgVU5JTklUSUFMSVpFRCk7Ci0KLSAgICAvLyBPbiBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBzcGxpY2UgZnJhbWVzLCBlbmFibGUgc3BsaWNlIGZyYW1lcyBhbmQKLSAgICAvLyBwYXJ0aWFsIGFwcGVuZCB3aW5kb3cgc3VwcG9ydCBmb3IgbW9zdCBjb2RlY3MgKG5vdGFibHk6IG5vdCBvcHVzKS4KLSAgICBjb25zdCBib29sIGNvZGVjX3N1cHBvcnRlZCA9IGNvbmZpZy5jb2RlYygpID09IGtDb2RlY01QMyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvZGVjKCkgPT0ga0NvZGVjQUFDIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29kZWMoKSA9PSBrQ29kZWNWb3JiaXM7Ci0gICAgc3BsaWNlX2ZyYW1lc19lbmFibGVkXyA9IHNwbGljZV9mcmFtZXNfZW5hYmxlZF8gJiYgY29kZWNfc3VwcG9ydGVkOwotICAgIHBhcnRpYWxfYXBwZW5kX3dpbmRvd190cmltbWluZ19lbmFibGVkXyA9Ci0gICAgICAgIHNwbGljZV9mcmFtZXNfZW5hYmxlZF8gJiYgY29kZWNfc3VwcG9ydGVkOwotCi0gICAgc3RyZWFtXy5yZXNldCgKLSAgICAgICAgbmV3IFNvdXJjZUJ1ZmZlclN0cmVhbShjb25maWcsIG1lZGlhX2xvZywgc3BsaWNlX2ZyYW1lc19lbmFibGVkXykpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIHN0cmVhbV8tPlVwZGF0ZUF1ZGlvQ29uZmlnKGNvbmZpZyk7Ci19Ci0KLWJvb2wgQ2h1bmtEZW11eGVyU3RyZWFtOjpVcGRhdGVWaWRlb0NvbmZpZygKLSAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGNvbmZpZywKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIERDSEVDSyhjb25maWcuSXNWYWxpZENvbmZpZygpKTsKLSAgRENIRUNLX0VRKHR5cGVfLCBWSURFTyk7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0KLSAgaWYgKCFzdHJlYW1fKSB7Ci0gICAgRENIRUNLX0VRKHN0YXRlXywgVU5JTklUSUFMSVpFRCk7Ci0gICAgc3RyZWFtXy5yZXNldCgKLSAgICAgICAgbmV3IFNvdXJjZUJ1ZmZlclN0cmVhbShjb25maWcsIG1lZGlhX2xvZywgc3BsaWNlX2ZyYW1lc19lbmFibGVkXykpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIHN0cmVhbV8tPlVwZGF0ZVZpZGVvQ29uZmlnKGNvbmZpZyk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyU3RyZWFtOjpVcGRhdGVUZXh0Q29uZmlnKAotICAgIGNvbnN0IFRleHRUcmFja0NvbmZpZyYgY29uZmlnLCBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIERDSEVDS19FUSh0eXBlXywgVEVYVCk7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERDSEVDSyghc3RyZWFtXyk7Ci0gIERDSEVDS19FUShzdGF0ZV8sIFVOSU5JVElBTElaRUQpOwotICBzdHJlYW1fLnJlc2V0KAotICAgICAgbmV3IFNvdXJjZUJ1ZmZlclN0cmVhbShjb25maWcsIG1lZGlhX2xvZywgc3BsaWNlX2ZyYW1lc19lbmFibGVkXykpOwotfQotCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6TWFya0VuZE9mU3RyZWFtKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBzdHJlYW1fLT5NYXJrRW5kT2ZTdHJlYW0oKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06OlVubWFya0VuZE9mU3RyZWFtKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBzdHJlYW1fLT5Vbm1hcmtFbmRPZlN0cmVhbSgpOwotfQotCi0vLyBEZW11eGVyU3RyZWFtIG1ldGhvZHMuCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6UmVhZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRENIRUNLX05FKHN0YXRlXywgVU5JTklUSUFMSVpFRCk7Ci0gIERDSEVDSyhyZWFkX2NiXy5pc19udWxsKCkpOwotCi0gIHJlYWRfY2JfID0gQmluZFRvQ3VycmVudExvb3AocmVhZF9jYik7Ci0KLSAgaWYgKCFpc19lbmFibGVkXykgewotICAgIERWTE9HKDEpIDw8ICJSZWFkIGZyb20gZGlzYWJsZWQgc3RyZWFtLCByZXR1cm5pbmcgRU9TIjsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmcmVhZF9jYl8pLlJ1bihrT2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtUGFyc2VyQnVmZmVyOjpDcmVhdGVFT1NCdWZmZXIoKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgQ29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGVfTG9ja2VkKCk7Ci19Ci0KLURlbXV4ZXJTdHJlYW06OlR5cGUgQ2h1bmtEZW11eGVyU3RyZWFtOjp0eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZV87IH0KLQotRGVtdXhlclN0cmVhbTo6TGl2ZW5lc3MgQ2h1bmtEZW11eGVyU3RyZWFtOjpsaXZlbmVzcygpIGNvbnN0IHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgcmV0dXJuIGxpdmVuZXNzXzsKLX0KLQotQXVkaW9EZWNvZGVyQ29uZmlnIENodW5rRGVtdXhlclN0cmVhbTo6YXVkaW9fZGVjb2Rlcl9jb25maWcoKSB7Ci0gIENIRUNLX0VRKHR5cGVfLCBBVURJTyk7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIGF1dG8gY29uZmlnID0gc3RyZWFtXy0+R2V0Q3VycmVudEF1ZGlvRGVjb2RlckNvbmZpZygpOwotICBjb25maWcuc2V0X21pbWUobWltZV8pOwotICByZXR1cm4gY29uZmlnOwotfQotCi1WaWRlb0RlY29kZXJDb25maWcgQ2h1bmtEZW11eGVyU3RyZWFtOjp2aWRlb19kZWNvZGVyX2NvbmZpZygpIHsKLSAgQ0hFQ0tfRVEodHlwZV8sIFZJREVPKTsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgYXV0byBjb25maWcgPSBzdHJlYW1fLT5HZXRDdXJyZW50VmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0gIGNvbmZpZy5zZXRfbWltZShtaW1lXyk7Ci0gIHJldHVybiBjb25maWc7Ci19Ci0KLWJvb2wgQ2h1bmtEZW11eGVyU3RyZWFtOjpTdXBwb3J0c0NvbmZpZ0NoYW5nZXMoKSB7IHJldHVybiB0cnVlOyB9Ci0KLVZpZGVvUm90YXRpb24gQ2h1bmtEZW11eGVyU3RyZWFtOjp2aWRlb19yb3RhdGlvbigpIHsgcmV0dXJuIFZJREVPX1JPVEFUSU9OXzA7IH0KLQotYm9vbCBDaHVua0RlbXV4ZXJTdHJlYW06OmVuYWJsZWQoKSBjb25zdCB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHJldHVybiBpc19lbmFibGVkXzsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06OnNldF9lbmFibGVkKGJvb2wgZW5hYmxlZCwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotCi0gIGlmIChlbmFibGVkID09IGlzX2VuYWJsZWRfKSByZXR1cm47Ci0KLSAgaXNfZW5hYmxlZF8gPSBlbmFibGVkOwotICBpZiAoZW5hYmxlZCkgewotICAgIERDSEVDSyhzdHJlYW1fKTsKLSAgICBzdHJlYW1fLT5TZWVrKHRpbWVzdGFtcCk7Ci0gIH0gZWxzZSBpZiAoIXJlYWRfY2JfLmlzX251bGwoKSkgewotICAgIERWTE9HKDEpIDw8ICJSZWFkIGZyb20gZGlzYWJsZWQgc3RyZWFtLCByZXR1cm5pbmcgRU9TIjsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmcmVhZF9jYl8pLlJ1bihrT2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtUGFyc2VyQnVmZmVyOjpDcmVhdGVFT1NCdWZmZXIoKSk7Ci0gIH0KLSAgaWYgKCFzdHJlYW1fc3RhdHVzX2NoYW5nZV9jYl8uaXNfbnVsbCgpKQotICAgIHN0cmVhbV9zdGF0dXNfY2hhbmdlX2NiXy5SdW4oaXNfZW5hYmxlZF8sIHRpbWVzdGFtcCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyU3RyZWFtOjpTZXRTdHJlYW1TdGF0dXNDaGFuZ2VDQigKLSAgICBjb25zdCBTdHJlYW1TdGF0dXNDaGFuZ2VDQiYgY2IpIHsKLSAgRENIRUNLKCFjYi5pc19udWxsKCkpOwotICBzdHJlYW1fc3RhdHVzX2NoYW5nZV9jYl8gPSBCaW5kVG9DdXJyZW50TG9vcChjYik7Ci19Ci0KLVRleHRUcmFja0NvbmZpZyBDaHVua0RlbXV4ZXJTdHJlYW06OnRleHRfdHJhY2tfY29uZmlnKCkgewotICBDSEVDS19FUSh0eXBlXywgVEVYVCk7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHJldHVybiBzdHJlYW1fLT5HZXRDdXJyZW50VGV4dFRyYWNrQ29uZmlnKCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyU3RyZWFtOjpTZXRTdHJlYW1NZW1vcnlMaW1pdChzaXplX3QgbWVtb3J5X2xpbWl0KSB7Ci0gIHN0cmVhbV8tPnNldF9tZW1vcnlfbGltaXQobWVtb3J5X2xpbWl0KTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXJTdHJlYW06OlNldExpdmVuZXNzKExpdmVuZXNzIGxpdmVuZXNzKSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIGxpdmVuZXNzXyA9IGxpdmVuZXNzOwotfQotCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6Q2hhbmdlU3RhdGVfTG9ja2VkKFN0YXRlIHN0YXRlKSB7Ci0gIGxvY2tfLkFzc2VydEFjcXVpcmVkKCk7Ci0gIERWTE9HKDEpIDw8ICJDaHVua0RlbXV4ZXJTdHJlYW06OkNoYW5nZVN0YXRlX0xvY2tlZCgpIDogIgotICAgICAgICAgICA8PCAidHlwZSAiIDw8IHR5cGVfIDw8ICIgLSAiIDw8IHN0YXRlXyA8PCAiIC0+ICIgPDwgc3RhdGU7Ci0gIHN0YXRlXyA9IHN0YXRlOwotfQotCi1DaHVua0RlbXV4ZXJTdHJlYW06On5DaHVua0RlbXV4ZXJTdHJlYW0oKSB7fQotCi12b2lkIENodW5rRGVtdXhlclN0cmVhbTo6Q29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGVfTG9ja2VkKCkgewotICBsb2NrXy5Bc3NlcnRBY3F1aXJlZCgpOwotICBEQ0hFQ0soIXJlYWRfY2JfLmlzX251bGwoKSk7Ci0KLSAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cyA9IERlbXV4ZXJTdHJlYW06OmtBYm9ydGVkOwotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyOwotCi0gIHN3aXRjaCAoc3RhdGVfKSB7Ci0gICAgY2FzZSBVTklOSVRJQUxJWkVEOgotICAgICAgTk9UUkVBQ0hFRCgpOwotICAgICAgcmV0dXJuOwotICAgIGNhc2UgUkVUVVJOSU5HX0RBVEFfRk9SX1JFQURTOgotICAgICAgc3dpdGNoIChzdHJlYW1fLT5HZXROZXh0QnVmZmVyKCZidWZmZXIpKSB7Ci0gICAgICAgIGNhc2UgU291cmNlQnVmZmVyU3RyZWFtOjprU3VjY2VzczoKLSAgICAgICAgICBzdGF0dXMgPSBEZW11eGVyU3RyZWFtOjprT2s7Ci0gICAgICAgICAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIjogcmV0dXJuaW5nIGtPaywgdHlwZSAiIDw8IHR5cGVfIDw8ICIsIGR0cyAiCi0gICAgICAgICAgICAgICAgICAgPDwgYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIiwgcHRzICIKLSAgICAgICAgICAgICAgICAgICA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKSA8PCAiLCBkdXIgIgotICAgICAgICAgICAgICAgICAgIDw8IGJ1ZmZlci0+ZHVyYXRpb24oKS5JblNlY29uZHNGKCkgPDwgIiwga2V5ICIKLSAgICAgICAgICAgICAgICAgICA8PCBidWZmZXItPmlzX2tleV9mcmFtZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a05lZWRCdWZmZXI6Ci0gICAgICAgICAgLy8gUmV0dXJuIGVhcmx5IHdpdGhvdXQgY2FsbGluZyB8cmVhZF9jYl98IHNpbmNlIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAvLyBhbnkgZGF0YSB0byByZXR1cm4geWV0LgotICAgICAgICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICI6IHJldHVybmluZyBrTmVlZEJ1ZmZlciwgdHlwZSAiIDw8IHR5cGVfOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBTb3VyY2VCdWZmZXJTdHJlYW06OmtFbmRPZlN0cmVhbToKLSAgICAgICAgICBzdGF0dXMgPSBEZW11eGVyU3RyZWFtOjprT2s7Ci0gICAgICAgICAgYnVmZmVyID0gU3RyZWFtUGFyc2VyQnVmZmVyOjpDcmVhdGVFT1NCdWZmZXIoKTsKLSAgICAgICAgICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiOiByZXR1cm5pbmcga09rIHdpdGggRU9TIGJ1ZmZlciwgdHlwZSAiCi0gICAgICAgICAgICAgICAgICAgPDwgdHlwZV87Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlOgotICAgICAgICAgIHN0YXR1cyA9IGtDb25maWdDaGFuZ2VkOwotICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIjogcmV0dXJuaW5nIGtDb25maWdDaGFuZ2UsIHR5cGUgIiA8PCB0eXBlXzsKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUkVUVVJOSU5HX0FCT1JUX0ZPUl9SRUFEUzoKLSAgICAgIC8vIE51bGwgYnVmZmVycyBzaG91bGQgYmUgcmV0dXJuZWQgaW4gdGhpcyBzdGF0ZSBzaW5jZSB3ZSBhcmUgd2FpdGluZwotICAgICAgLy8gZm9yIGEgc2Vlay4gQW55IGJ1ZmZlcnMgaW4gdGhlIFNvdXJjZUJ1ZmZlciBzaG91bGQgTk9UIGJlIHJldHVybmVkCi0gICAgICAvLyBiZWNhdXNlIHRoZXkgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vlay4KLSAgICAgIHN0YXR1cyA9IERlbXV4ZXJTdHJlYW06OmtBYm9ydGVkOwotICAgICAgYnVmZmVyID0gTlVMTDsKLSAgICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICI6IHJldHVybmluZyBrQWJvcnRlZCwgdHlwZSAiIDw8IHR5cGVfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSFVURE9XTjoKLSAgICAgIHN0YXR1cyA9IERlbXV4ZXJTdHJlYW06OmtPazsKLSAgICAgIGJ1ZmZlciA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCk7Ci0gICAgICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiOiByZXR1cm5pbmcga09rIHdpdGggRU9TIGJ1ZmZlciwgdHlwZSAiIDw8IHR5cGVfOwotICAgICAgYnJlYWs7Ci0gIH0KLQotICBiYXNlOjpSZXNldEFuZFJldHVybigmcmVhZF9jYl8pLlJ1bihzdGF0dXMsIGJ1ZmZlcik7Ci19Ci0KLUNodW5rRGVtdXhlcjo6Q2h1bmtEZW11eGVyKAotICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgY29uc3QgYmFzZTo6Q2xvc3VyZSYgb3Blbl9jYiwKLSAgICBjb25zdCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywgYm9vbCBzcGxpY2VfZnJhbWVzX2VuYWJsZWQpCi0gICAgOiBidWZmZXJfYWxsb2NhdG9yXyhidWZmZXJfYWxsb2NhdG9yKSwKLSAgICAgIHN0YXRlXyhXQUlUSU5HX0ZPUl9JTklUKSwKLSAgICAgIGNhbmNlbF9uZXh0X3NlZWtfKGZhbHNlKSwKLSAgICAgIGhvc3RfKE5VTEwpLAotICAgICAgb3Blbl9jYl8ob3Blbl9jYiksCi0gICAgICBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiXyhlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiKSwKLSAgICAgIGVuYWJsZV90ZXh0XyhmYWxzZSksCi0gICAgICBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCi0gICAgICBkdXJhdGlvbl8oa05vVGltZXN0YW1wKSwKLSAgICAgIHVzZXJfc3BlY2lmaWVkX2R1cmF0aW9uXygtMSksCi0gICAgICBsaXZlbmVzc18oRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfVU5LTk9XTiksCi0gICAgICBzcGxpY2VfZnJhbWVzX2VuYWJsZWRfKHNwbGljZV9mcmFtZXNfZW5hYmxlZCksCi0gICAgICBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudF8oMCksCi0gICAgICBkZXRlY3RlZF92aWRlb190cmFja19jb3VudF8oMCksCi0gICAgICBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50XygwKSB7Ci0gIERDSEVDSyhidWZmZXJfYWxsb2NhdG9yXyk7Ci0gIERDSEVDSyghb3Blbl9jYl8uaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiXy5pc19udWxsKCkpOwotfQotCi1zdGQ6OnN0cmluZyBDaHVua0RlbXV4ZXI6OkdldERpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gIkNodW5rRGVtdXhlciI7IH0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OkluaXRpYWxpemUoRGVtdXhlckhvc3QqIGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBpbml0X2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVfdGV4dF90cmFja3MpIHsKLSAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6Om1lZGlhIiwgIkNodW5rRGVtdXhlcjo6SW5pdGlhbGl6ZSIpOwotICBETE9HKElORk8pIDw8ICJUaGlzIGlzIGFuIEFTWU5DIE1FRElBIFNPVVJDRSBwbGF5YmFjay4iOwotICBEVkxPRygxKSA8PCAiSW5pdCgpIjsKLQotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBpZiAoc3RhdGVfID09IFNIVVRET1dOKSB7Ci0gICAgLy8gSW5pdCBjYiBtdXN0IG9ubHkgYmUgcnVuIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMsIHNvIHBvc3QuCi0gICAgYmFzZTo6VGhyZWFkVGFza1J1bm5lckhhbmRsZTo6R2V0KCktPlBvc3RUYXNrKAotICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoaW5pdF9jYiwgREVNVVhFUl9FUlJPUl9DT1VMRF9OT1RfT1BFTikpOwotICAgIHJldHVybjsKLSAgfQotCi0gIERDSEVDS19FUShzdGF0ZV8sIFdBSVRJTkdfRk9SX0lOSVQpOwotICBob3N0XyA9IGhvc3Q7Ci0gIC8vIERvIG5vdCBwb3N0IGluaXRfY2Igb25jZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYmVjYXVzZSBpZiB0aGVyZSBpcyBhbgotICAvLyBlcnJvciBhZnRlciBpbml0aWFsaXphdGlvbiwgdGhlIGVycm9yIG1pZ2h0IGJlIHJlcG9ydGVkIGJlZm9yZSBpbml0X2NiCi0gIC8vIGhhcyBhIGNoYW5jZSB0byBydW4uIFRoaXMgaXMgYmVjYXVzZSBDaHVua0RlbXV4ZXI6OlJlcG9ydEVycm9yX0xvY2tlZAotICAvLyBkaXJlY3RseSBjYWxscyBEZW11eGVySG9zdDo6T25EZW11eGVyRXJyb3I6IGNyYnVnLmNvbS82MzMwMTYuCi0gIGluaXRfY2JfID0gaW5pdF9jYjsKLSAgZW5hYmxlX3RleHRfID0gZW5hYmxlX3RleHRfdHJhY2tzOwotCi0gIENoYW5nZVN0YXRlX0xvY2tlZChJTklUSUFMSVpJTkcpOwotCi0gIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZvcGVuX2NiXykuUnVuKCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpTdG9wKCkgewotICBEVkxPRygxKSA8PCAiU3RvcCgpIjsKLSAgU2h1dGRvd24oKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlNlZWsoVGltZURlbHRhIHRpbWUsIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIGNiKSB7Ci0gIERWTE9HKDEpIDw8ICJTZWVrKCIgPDwgdGltZS5JblNlY29uZHNGKCkgPDwgIikiOwotICBEQ0hFQ0sodGltZSA+PSBUaW1lRGVsdGEoKSk7Ci0KLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRENIRUNLKHNlZWtfY2JfLmlzX251bGwoKSk7Ci0KLSAgc2Vla19jYl8gPSBCaW5kVG9DdXJyZW50TG9vcChjYik7Ci0gIGlmIChzdGF0ZV8gIT0gSU5JVElBTElaRUQgJiYgc3RhdGVfICE9IEVOREVEKSB7Ci0gICAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJnNlZWtfY2JfKS5SdW4oUElQRUxJTkVfRVJST1JfSU5WQUxJRF9TVEFURSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKGNhbmNlbF9uZXh0X3NlZWtfKSB7Ci0gICAgY2FuY2VsX25leHRfc2Vla18gPSBmYWxzZTsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmc2Vla19jYl8pLlJ1bihQSVBFTElORV9PSyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgU2Vla0FsbFNvdXJjZXModGltZSk7Ci0KLSNpZiBTQl9IQVNfUVVJUksoU0VFS19UT19LRVlGUkFNRSkKLSAgY29uc3QgYm9vbCBrUmV0dXJuaW5nRGF0YVVudGlsU2Vla0ZpbmlzaGVkID0gdHJ1ZTsKLSNlbHNlICAgLy8gU0JfSEFTX1FVSVJLKFNFRUtfVE9fS0VZRlJBTUUpCi0gIGNvbnN0IGJvb2wga1JldHVybmluZ0RhdGFVbnRpbFNlZWtGaW5pc2hlZCA9IGZhbHNlOwotI2VuZGlmICAvLyBTQl9IQVNfUVVJUksoU0VFS19UT19LRVlGUkFNRSkKLQotICAvLyBVc3VhbGx5IGFsbCBlbmNvZGVkIGF1ZGlvIGZyYW1lcyBhcmUga2V5IGZyYW1lcyB3aGlsZSBub3QgYWxsIGVuY29kZWQgdmlkZW8KLSAgLy8gZnJhbWVzIGFyZSBrZXkgZnJhbWVzLgotICAvLwotICAvLyBBZnRlciBhIHNlZWsgdG8gfHRpbWV8LCB0aGUgYXVkaW8gQ2h1bmtEZW11eGVyU3RyZWFtIHdpbGwgcmV0dXJuIGVuY29kZWQKLSAgLy8gYXVkaW8gZnJhbWVzIHJpZ2h0IGJlZm9yZSB8dGltZXwuICBUaGUgYXVkaW8gZGVjb2RlciBjYW4gZGVjb2RlIHRoZW0KLSAgLy8gd2l0aG91dCBrbm93bGVkZ2Ugb2YgcHJpb3IgZW5jb2RlZCBhdWRpbyBmcmFtZXMuICBIb3dldmVyLCB0aGUgdmlkZW8KLSAgLy8gQ2h1bmtEZW11eGVyU3RyZWFtIGhhcyB0byByZXR1cm4gZW5jb2RlZCB2aWRlbyBmcmFtZXMgZnJvbSB0aGUga2V5IGZyYW1lCi0gIC8vIHdob3NlIHRpbWVzdGFtcCBpcyBhdCBvciBiZWZvcmUgfHRpbWV8LiAgRGVwZW5kaW5nIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlCi0gIC8vIHZpZGVvIHN0cmVhbSwgdGhlIGdhcCBiZXR3ZWVuIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGtleSBmcmFtZSBhbmQgfHRpbWV8IGNhbgotICAvLyBiZSBzZXZlcmFsIHNlY29uZHMgb3IgbW9yZS4gIFNvIHRoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQotICAvLyB0aW1lc3RhbXBzIG9mIHRoZSBmaXJzdCBhdWRpbyBmcmFtZSBhbmQgdGhlIGZpcnN0IHZpZGVvIGZyYW1lIHJldHVybmVkCi0gIC8vIGFmdGVyIGEgc2Vlay4gIE1vc3QgbW9kZXJuIHBsYXRmb3JtcyBjYW4gcGxheSB0aGUgYXVkaW8gZGF0YSBhcyBpcyBhbmQKLSAgLy8gcXVpY2tseSBkZWNvZGUgdGhlIHZpZGVvIGZyYW1lcyB3aG9zZSB0aW1lc3RhbXAgaXMgZWFybGllciB0aGFuIHRoZSBmaXJzdAotICAvLyBhdWRpbyBmcmFtZSB3aXRob3V0IGRpc3BsYXlpbmcgdGhlbS4gIFRoaXMgYWxsb3dzIHRoZSB2aWRlbyBwbGF5YmFjayB0bwotICAvLyAiY2F0Y2ggdXAiIHdpdGggdGhlIGF1ZGlvIHBsYXliYWNrLgotICAvLwotICAvLyBTQl9IQVNfUVVJUksoU0VFS19UT19LRVlGUkFNRSkgaXMgZW5hYmxlZCBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0Ci0gIC8vIHN1Y2ggImNhdGNoIHVwIiBiZWhhdmlvdXIsIHdoZXJlIHRoZSBhdWRpbyBDaHVua0RlbXV4ZXJTdHJlYW0gc2hvdWxkIHN0YXJ0Ci0gIC8vIHRvIHJldHVybiBhdWRpbyBmcmFtZSB3aG9zZSB0aW1lc3RhbXAgaXMgZWFybGllciB0aGFuIHRoZSB2aWRlbyBrZXkgZnJhbWUsCi0gIC8vIGluc3RlYWQgb2YgfHRpbWV8LiAgU28gU3RhcnRSZXR1cm5pbmdEYXRhKCkgc2hvdWxkIGJlIGRlbGF5ZWQgdW50aWwgYWxsCi0gIC8vIENodW5rRGVtdXhlclN0cmVhbXMgYXJlIHNlZWtlZC4KLSAgaWYgKCFrUmV0dXJuaW5nRGF0YVVudGlsU2Vla0ZpbmlzaGVkKSB7Ci0gICAgU3RhcnRSZXR1cm5pbmdEYXRhKCk7Ci0gIH0KLQotICBpZiAoSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCkpIHsKLSAgICBEVkxPRygxKSA8PCAiU2VlaygpIDogd2FpdGluZyBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS4iOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChrUmV0dXJuaW5nRGF0YVVudGlsU2Vla0ZpbmlzaGVkKSB7Ci0gICAgQWRqdXN0U2Vla09uQXVkaW9Tb3VyY2UoKTsKLSAgICBTdGFydFJldHVybmluZ0RhdGEoKTsKLSAgfQotCi0gIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZzZWVrX2NiXykuUnVuKFBJUEVMSU5FX09LKTsKLX0KLQotLy8gRGVtdXhlciBpbXBsZW1lbnRhdGlvbi4KLWJhc2U6OlRpbWUgQ2h1bmtEZW11eGVyOjpHZXRUaW1lbGluZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHRpbWVsaW5lX29mZnNldF87IH0KLQotRGVtdXhlclN0cmVhbSogQ2h1bmtEZW11eGVyOjpHZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKSB7Ci0gIERDSEVDS19ORSh0eXBlLCBEZW11eGVyU3RyZWFtOjpURVhUKTsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLQotICAvLyBUT0RPOiBGb3Igbm93IHJldHVybiBvbmx5IHRoZSBmaXJzdCBlbmFibGVkIGF1ZGlvL3ZpZGVvIHN0cmVhbSwgc2luY2UgdGhpcwotICAvLyBHZXRTdHJlYW0gbWV0aG9kIGlzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZW11eGVyU3RyZWFtUHJvdmlkZXIKLSAgLy8gaW50ZXJmYWNlIHRoYXQgaXMgdXNlZCBpbiBtYW55IHBsYWNlcyBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBlYXNpbHkuIEl0IHdpbGwKLSAgLy8gYmUgZml4ZWQgbGF0ZXIsIHdoZW4gd2UgYWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHN0cmVhbXMvdHJhY2tzIGluCi0gIC8vIERlbXV4ZXJTdHJlYW1Qcm92aWRlciwgdHJhY2tlZCBieSBjcmJ1Zy5jb20vNjQ2NjY5Ci0gIGlmICh0eXBlID09IERlbXV4ZXJTdHJlYW06OkFVRElPKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb19zdHJlYW1zXy5zaXplKCk7ICsraSkgewotICAgICAgaWYgKGF1ZGlvX3N0cmVhbXNfW2ldLT5lbmFibGVkKCkpIHJldHVybiBhdWRpb19zdHJlYW1zX1tpXS5nZXQoKTsKLSAgICB9Ci0gIH0KLQotICBpZiAodHlwZSA9PSBEZW11eGVyU3RyZWFtOjpWSURFTykgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9fc3RyZWFtc18uc2l6ZSgpOyArK2kpIHsKLSAgICAgIGlmICh2aWRlb19zdHJlYW1zX1tpXS0+ZW5hYmxlZCgpKSByZXR1cm4gdmlkZW9fc3RyZWFtc19baV0uZ2V0KCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLVRpbWVEZWx0YSBDaHVua0RlbXV4ZXI6OkdldFN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIFRpbWVEZWx0YSgpOyB9Ci0KLWludDY0X3QgQ2h1bmtEZW11eGVyOjpHZXRNZW1vcnlVc2FnZSgpIGNvbnN0IHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgaW50NjRfdCBtZW0gPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvX3N0cmVhbXNfLnNpemUoKTsgKytpKQotICAgIG1lbSArPSBhdWRpb19zdHJlYW1zX1tpXS0+R2V0QnVmZmVyZWRTaXplKCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9fc3RyZWFtc18uc2l6ZSgpOyArK2kpCi0gICAgbWVtICs9IHZpZGVvX3N0cmVhbXNfW2ldLT5HZXRCdWZmZXJlZFNpemUoKTsKLSAgcmV0dXJuIG1lbTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OkFib3J0UGVuZGluZ1JlYWRzKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0soc3RhdGVfID09IElOSVRJQUxJWkVEIHx8IHN0YXRlXyA9PSBFTkRFRCB8fCBzdGF0ZV8gPT0gU0hVVERPV04gfHwKLSAgICAgICAgIHN0YXRlXyA9PSBQQVJTRV9FUlJPUikKLSAgICAgIDw8IHN0YXRlXzsKLQotICBpZiAoc3RhdGVfID09IFNIVVRET1dOIHx8IHN0YXRlXyA9PSBQQVJTRV9FUlJPUikgcmV0dXJuOwotCi0gIEFib3J0UGVuZGluZ1JlYWRzX0xvY2tlZCgpOwotfQotCi12b2lkIENodW5rRGVtdXhlcjo6U3RhcnRXYWl0aW5nRm9yU2VlayhUaW1lRGVsdGEgc2Vla190aW1lKSB7Ci0gIERWTE9HKDEpIDw8ICJTdGFydFdhaXRpbmdGb3JTZWVrKCkiOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0soc3RhdGVfID09IElOSVRJQUxJWkVEIHx8IHN0YXRlXyA9PSBFTkRFRCB8fCBzdGF0ZV8gPT0gU0hVVERPV04gfHwKLSAgICAgICAgIHN0YXRlXyA9PSBQQVJTRV9FUlJPUikKLSAgICAgIDw8IHN0YXRlXzsKLSAgRENIRUNLKHNlZWtfY2JfLmlzX251bGwoKSk7Ci0KLSAgaWYgKHN0YXRlXyA9PSBTSFVURE9XTiB8fCBzdGF0ZV8gPT0gUEFSU0VfRVJST1IpIHJldHVybjsKLQotICBBYm9ydFBlbmRpbmdSZWFkc19Mb2NrZWQoKTsKLSAgU2Vla0FsbFNvdXJjZXMoc2Vla190aW1lKTsKLQotICAvLyBDYW5jZWwgc3RhdGUgc2V0IGluIENhbmNlbFBlbmRpbmdTZWVrKCkgc2luY2Ugd2Ugd2FudCB0bwotICAvLyBhY2NlcHQgdGhlIG5leHQgU2VlaygpLgotICBjYW5jZWxfbmV4dF9zZWVrXyA9IGZhbHNlOwotfQotCi12b2lkIENodW5rRGVtdXhlcjo6Q2FuY2VsUGVuZGluZ1NlZWsoVGltZURlbHRhIHNlZWtfdGltZSkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBJTklUSUFMSVpJTkcpOwotICBEQ0hFQ0soc2Vla19jYl8uaXNfbnVsbCgpIHx8IElzU2Vla1dhaXRpbmdGb3JEYXRhX0xvY2tlZCgpKTsKLQotICBpZiAoY2FuY2VsX25leHRfc2Vla18pIHJldHVybjsKLQotICBBYm9ydFBlbmRpbmdSZWFkc19Mb2NrZWQoKTsKLSAgU2Vla0FsbFNvdXJjZXMoc2Vla190aW1lKTsKLQotICBpZiAoc2Vla19jYl8uaXNfbnVsbCgpKSB7Ci0gICAgY2FuY2VsX25leHRfc2Vla18gPSB0cnVlOwotICAgIHJldHVybjsKLSAgfQotCi0gIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZzZWVrX2NiXykuUnVuKFBJUEVMSU5FX09LKTsKLX0KLQotQ2h1bmtEZW11eGVyOjpTdGF0dXMgQ2h1bmtEZW11eGVyOjpBZGRJZChjb25zdCBzdGQ6OnN0cmluZyYgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lKSB7Ci0gIERWTE9HKDEpIDw8IF9fZnVuY19fIDw8ICIgaWQ9IiA8PCBpZCA8PCAiIG1pbWVfdHlwZT0iIDw8IG1pbWU7Ci0KLSAgc3RkOjpzdHJpbmcgdHlwZTsKLSAgc3RkOjpzdHJpbmcgY29kZWNzOwotCi0gIGlmICghUGFyc2VNaW1lVHlwZShtaW1lLCAmdHlwZSwgJmNvZGVjcykpIHsKLSAgICByZXR1cm4ga05vdFN1cHBvcnRlZDsKLSAgfQotCi0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0KLSAgaWYgKChzdGF0ZV8gIT0gV0FJVElOR19GT1JfSU5JVCAmJiBzdGF0ZV8gIT0gSU5JVElBTElaSU5HKSB8fCBJc1ZhbGlkSWQoaWQpKQotICAgIHJldHVybiBrUmVhY2hlZElkTGltaXQ7Ci0KLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhcnNlZF9jb2RlY19pZHM7Ci0gIG1lZGlhOjpQYXJzZUNvZGVjU3RyaW5nKGNvZGVjcywgJnBhcnNlZF9jb2RlY19pZHMsIGZhbHNlKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8bWVkaWE6OlN0cmVhbVBhcnNlcj4gc3RyZWFtX3BhcnNlcigKLSAgICAgIFN0cmVhbVBhcnNlckZhY3Rvcnk6OkNyZWF0ZShidWZmZXJfYWxsb2NhdG9yXywgdHlwZSwgcGFyc2VkX2NvZGVjX2lkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYV9sb2dfKSk7Ci0KLSAgaWYgKCFzdHJlYW1fcGFyc2VyKSByZXR1cm4gQ2h1bmtEZW11eGVyOjprTm90U3VwcG9ydGVkOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxGcmFtZVByb2Nlc3Nvcj4gZnJhbWVfcHJvY2Vzc29yKAotICAgICAgbmV3IEZyYW1lUHJvY2Vzc29yKGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlcjo6SW5jcmVhc2VEdXJhdGlvbklmTmVjZXNzYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfbG9nXykpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gc291cmNlX3N0YXRlKG5ldyBTb3VyY2VCdWZmZXJTdGF0ZSgKLSAgICAgIHN0ZDo6bW92ZShzdHJlYW1fcGFyc2VyKSwgc3RkOjptb3ZlKGZyYW1lX3Byb2Nlc3NvciksCi0gICAgICBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXI6OkNyZWF0ZURlbXV4ZXJTdHJlYW0sIGJhc2U6OlVucmV0YWluZWQodGhpcyksIGlkLAotICAgICAgICAgICAgICAgICBtaW1lKSwKLSAgICAgIG1lZGlhX2xvZ18sIGJ1ZmZlcl9hbGxvY2F0b3JfKSk7Ci0KLSAgU291cmNlQnVmZmVyU3RhdGU6Ok5ld1RleHRUcmFja0NCIG5ld190ZXh0X3RyYWNrX2NiOwotCi0gIGlmIChlbmFibGVfdGV4dF8pIHsKLSAgICBuZXdfdGV4dF90cmFja19jYiA9Ci0gICAgICAgIGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlcjo6T25OZXdUZXh0VHJhY2ssIGJhc2U6OlVucmV0YWluZWQodGhpcykpOwotICB9Ci0KLSAgcGVuZGluZ19zb3VyY2VfaW5pdF9pZHNfLmluc2VydChpZCk7Ci0KLSAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRfc2JzX2NvZGVjcyA9IGNvZGVjczsKLSAgaWYgKGNvZGVjcyA9PSAiIiAmJiB0eXBlID09ICJhdWRpby9hYWMiKSBleHBlY3RlZF9zYnNfY29kZWNzID0gImFhYyI7Ci0gIGlmIChjb2RlY3MgPT0gIiIgJiYgKHR5cGUgPT0gImF1ZGlvL21wZWciIHx8IHR5cGUgPT0gImF1ZGlvL21wMyIpKQotICAgIGV4cGVjdGVkX3Nic19jb2RlY3MgPSAibXAzIjsKLQotICBzb3VyY2Vfc3RhdGUtPkluaXQoCi0gICAgICBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXI6Ok9uU291cmNlSW5pdERvbmUsIGJhc2U6OlVucmV0YWluZWQodGhpcyksIGlkKSwKLSAgICAgIGV4cGVjdGVkX3Nic19jb2RlY3MsIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfLCBuZXdfdGV4dF90cmFja19jYik7Ci0KLSAgc291cmNlX3N0YXRlX21hcF9baWRdID0gc291cmNlX3N0YXRlLnJlbGVhc2UoKTsKLSAgcmV0dXJuIGtPazsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlNldFRyYWNrc1dhdGNoZXIoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCBNZWRpYVRyYWNrc1VwZGF0ZWRDQiYgdHJhY2tzX3VwZGF0ZWRfY2IpIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgQ0hFQ0soSXNWYWxpZElkKGlkKSk7Ci0gIHNvdXJjZV9zdGF0ZV9tYXBfW2lkXS0+U2V0VHJhY2tzV2F0Y2hlcih0cmFja3NfdXBkYXRlZF9jYik7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpSZW1vdmVJZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpIHsKLSAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiBpZD0iIDw8IGlkOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBDSEVDSyhJc1ZhbGlkSWQoaWQpKTsKLQotICBkZWxldGUgc291cmNlX3N0YXRlX21hcF9baWRdOwotICBzb3VyY2Vfc3RhdGVfbWFwXy5lcmFzZShpZCk7Ci0gIHBlbmRpbmdfc291cmNlX2luaXRfaWRzXy5lcmFzZShpZCk7Ci0gIC8vIFJlbW92ZSBkZW11eGVyIHN0cmVhbXMgY3JlYXRlZCBmb3IgdGhpcyBpZC4KLSAgc3RkOjp2ZWN0b3I8Q2h1bmtEZW11eGVyU3RyZWFtKj4mIHN0cmVhbXMgPSBpZF90b19zdHJlYW1zX21hcF9baWRdOwotICBmb3IgKHN0ZDo6dmVjdG9yPENodW5rRGVtdXhlclN0cmVhbSo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gc3RyZWFtcy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0gc3RyZWFtcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgYm9vbCBzdHJlYW1fZm91bmQgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvX3N0cmVhbXNfLnNpemUoKTsgKytpKSB7Ci0gICAgICBpZiAoYXVkaW9fc3RyZWFtc19baV0uZ2V0KCkgPT0gKml0ZXIpIHsKLSAgICAgICAgc3RyZWFtX2ZvdW5kID0gdHJ1ZTsKLSAgICAgICAgcmVtb3ZlZF9zdHJlYW1zXy5wdXNoX2JhY2soc3RkOjptb3ZlKGF1ZGlvX3N0cmVhbXNfW2ldKSk7Ci0gICAgICAgIGF1ZGlvX3N0cmVhbXNfLmVyYXNlKGF1ZGlvX3N0cmVhbXNfLmJlZ2luKCkgKyBpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChzdHJlYW1fZm91bmQpIGNvbnRpbnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9fc3RyZWFtc18uc2l6ZSgpOyArK2kpIHsKLSAgICAgIGlmICh2aWRlb19zdHJlYW1zX1tpXS5nZXQoKSA9PSAqaXRlcikgewotICAgICAgICBzdHJlYW1fZm91bmQgPSB0cnVlOwotICAgICAgICByZW1vdmVkX3N0cmVhbXNfLnB1c2hfYmFjayhzdGQ6Om1vdmUodmlkZW9fc3RyZWFtc19baV0pKTsKLSAgICAgICAgdmlkZW9fc3RyZWFtc18uZXJhc2UodmlkZW9fc3RyZWFtc18uYmVnaW4oKSArIGkpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgQ0hFQ0soc3RyZWFtX2ZvdW5kKTsKLSAgfQotICBpZF90b19zdHJlYW1zX21hcF8uZXJhc2UoaWQpOwotfQotCi1SYW5nZXM8VGltZURlbHRhPiBDaHVua0RlbXV4ZXI6OkdldEJ1ZmZlcmVkUmFuZ2VzKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkgY29uc3QgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0soIWlkLmVtcHR5KCkpOwotCi0gIFNvdXJjZUJ1ZmZlclN0YXRlTWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBzb3VyY2Vfc3RhdGVfbWFwXy5maW5kKGlkKTsKLQotICBEQ0hFQ0soaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpKTsKLSAgcmV0dXJuIGl0ci0+c2Vjb25kLT5HZXRCdWZmZXJlZFJhbmdlcyhkdXJhdGlvbl8sIHN0YXRlXyA9PSBFTkRFRCk7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBDaHVua0RlbXV4ZXI6OkdldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkKSBjb25zdCB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERDSEVDSyghaWQuZW1wdHkoKSk7Ci0KLSAgU291cmNlQnVmZmVyU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmZpbmQoaWQpOwotCi0gIERDSEVDSyhpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCkpOwotICByZXR1cm4gaXRyLT5zZWNvbmQtPkdldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAoKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6Ok9uRW5hYmxlZEF1ZGlvVHJhY2tzQ2hhbmdlZCgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywgYmFzZTo6VGltZURlbHRhIGN1cnJUaW1lKSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIHN0ZDo6c2V0PERlbXV4ZXJTdHJlYW0qPiBlbmFibGVkX3N0cmVhbXM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tfaWRzLnNpemUoKTsgKytpKSB7Ci0gICAgRGVtdXhlclN0cmVhbSogc3RyZWFtID0gdHJhY2tfaWRfdG9fZGVtdXhfc3RyZWFtX21hcF9bdHJhY2tfaWRzW2ldXTsKLSAgICBEQ0hFQ0soc3RyZWFtKTsKLSAgICBEQ0hFQ0tfRVEoRGVtdXhlclN0cmVhbTo6QVVESU8sIHN0cmVhbS0+dHlwZSgpKTsKLSAgICBlbmFibGVkX3N0cmVhbXMuaW5zZXJ0KHN0cmVhbSk7Ci0gIH0KLQotICAvLyBGaXJzdCBkaXNhYmxlIGFsbCBzdHJlYW1zIHRoYXQgbmVlZCB0byBiZSBkaXNhYmxlZCBhbmQgdGhlbiBlbmFibGUgc3RyZWFtcwotICAvLyB0aGF0IGFyZSBlbmFibGVkLgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvX3N0cmVhbXNfLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGVuYWJsZWRfc3RyZWFtcy5maW5kKGF1ZGlvX3N0cmVhbXNfW2ldLmdldCgpKSA9PQotICAgICAgICBlbmFibGVkX3N0cmVhbXMuZW5kKCkpIHsKLSAgICAgIERWTE9HKDEpIDw8IF9fZnVuY19fIDw8ICI6IGRpc2FibGluZyBzdHJlYW0gIiA8PCBhdWRpb19zdHJlYW1zX1tpXS5nZXQoKTsKLSAgICAgIGF1ZGlvX3N0cmVhbXNfW2ldLT5zZXRfZW5hYmxlZChmYWxzZSwgY3VyclRpbWUpOwotICAgIH0KLSAgfQotICBmb3IgKHN0ZDo6c2V0PERlbXV4ZXJTdHJlYW0qPjo6aXRlcmF0b3IgaXRlciA9IGVuYWJsZWRfc3RyZWFtcy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0gZW5hYmxlZF9zdHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiOiBlbmFibGluZyBzdHJlYW0gIiA8PCAqaXRlcjsKLSAgICAoKml0ZXIpLT5zZXRfZW5hYmxlZCh0cnVlLCBjdXJyVGltZSk7Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6Ok9uU2VsZWN0ZWRWaWRlb1RyYWNrQ2hhbmdlZCgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywgYmFzZTo6VGltZURlbHRhIGN1cnJUaW1lKSB7Ci0gIERDSEVDS19MRSh0cmFja19pZHMuc2l6ZSgpLCAxdSk7Ci0KLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRGVtdXhlclN0cmVhbSogc2VsZWN0ZWRfc3RyZWFtID0gTlVMTDsKLSAgaWYgKCF0cmFja19pZHMuZW1wdHkoKSkgewotICAgIHNlbGVjdGVkX3N0cmVhbSA9IHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfW3RyYWNrX2lkc1swXV07Ci0gICAgRENIRUNLKHNlbGVjdGVkX3N0cmVhbSk7Ci0gICAgRENIRUNLX0VRKERlbXV4ZXJTdHJlYW06OlZJREVPLCBzZWxlY3RlZF9zdHJlYW0tPnR5cGUoKSk7Ci0gIH0KLQotICAvLyBGaXJzdCBkaXNhYmxlIGFsbCBzdHJlYW1zIHRoYXQgbmVlZCB0byBiZSBkaXNhYmxlZCBhbmQgdGhlbiBlbmFibGUgdGhlCi0gIC8vIHN0cmVhbSB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgKGlmIGFueSkuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9fc3RyZWFtc18uc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAodmlkZW9fc3RyZWFtc19baV0uZ2V0KCkgIT0gc2VsZWN0ZWRfc3RyZWFtKSB7Ci0gICAgICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiOiBkaXNhYmxpbmcgc3RyZWFtICIgPDwgdmlkZW9fc3RyZWFtc19baV0uZ2V0KCk7Ci0gICAgICBEQ0hFQ0tfRVEoRGVtdXhlclN0cmVhbTo6VklERU8sIHZpZGVvX3N0cmVhbXNfW2ldLT50eXBlKCkpOwotICAgICAgdmlkZW9fc3RyZWFtc19baV0tPnNldF9lbmFibGVkKGZhbHNlLCBjdXJyVGltZSk7Ci0gICAgfQotICB9Ci0gIGlmIChzZWxlY3RlZF9zdHJlYW0pIHsKLSAgICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiOiBlbmFibGluZyBzdHJlYW0gIiA8PCBzZWxlY3RlZF9zdHJlYW07Ci0gICAgc2VsZWN0ZWRfc3RyZWFtLT5zZXRfZW5hYmxlZCh0cnVlLCBjdXJyVGltZSk7Ci0gIH0KLX0KLQotYm9vbCBDaHVua0RlbXV4ZXI6OkV2aWN0Q29kZWRGcmFtZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGN1cnJlbnRNZWRpYVRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmV3RGF0YVNpemUpIHsKLSAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIigiIDw8IGlkIDw8ICIpIgotICAgICAgICAgICA8PCAiIG1lZGlhX3RpbWU9IiA8PCBjdXJyZW50TWVkaWFUaW1lLkluU2Vjb25kc0YoKQotICAgICAgICAgICA8PCAiIG5ld0RhdGFTaXplPSIgPDwgbmV3RGF0YVNpemU7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0KLSAgLy8gTm90ZTogVGhlIGRpcmVjdCBjb252ZXJzaW9uIGZyb20gUFRTIHRvIERUUyBpcyBzYWZlIGhlcmUsIHNpbmNlIHdlIGRvbid0Ci0gIC8vIG5lZWQgdG8ga25vdyBjdXJyZW50VGltZSBwcmVjaXNlbHkgZm9yIEdDLiBHQyBvbmx5IG5lZWRzIHRvIGtub3cgd2hpY2ggR09QCi0gIC8vIGN1cnJlbnRUaW1lIHBvaW50cyB0by4KLSAgRGVjb2RlVGltZXN0YW1wIG1lZGlhX3RpbWVfZHRzID0KLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbVByZXNlbnRhdGlvblRpbWUoY3VycmVudE1lZGlhVGltZSk7Ci0KLSAgRENIRUNLKCFpZC5lbXB0eSgpKTsKLSAgU291cmNlQnVmZmVyU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmZpbmQoaWQpOwotICBpZiAoaXRyID09IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpKSB7Ci0gICAgTE9HKFdBUk5JTkcpIDw8IF9fZnVuY19fIDw8ICIgc3RyZWFtICIgPDwgaWQgPDwgIiBub3QgZm91bmQiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gaXRyLT5zZWNvbmQtPkV2aWN0Q29kZWRGcmFtZXMobWVkaWFfdGltZV9kdHMsIG5ld0RhdGFTaXplKTsKLX0KLQotYm9vbCBDaHVua0RlbXV4ZXI6OkFwcGVuZERhdGEoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCB1aW50OF90KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpIHsKLSAgRFZMT0coMSkgPDwgIkFwcGVuZERhdGEoIiA8PCBpZCA8PCAiLCAiIDw8IGxlbmd0aCA8PCAiKSI7Ci0KLSAgRENIRUNLKCFpZC5lbXB0eSgpKTsKLSAgRENIRUNLKHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIFJhbmdlczxUaW1lRGVsdGE+IHJhbmdlczsKLQotICB7Ci0gICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgICBEQ0hFQ0tfTkUoc3RhdGVfLCBFTkRFRCk7Ci0KLSAgICAvLyBDYXB0dXJlIGlmIGFueSBvZiB0aGUgU291cmNlQnVmZmVycyBhcmUgd2FpdGluZyBmb3IgZGF0YSBiZWZvcmUgd2Ugc3RhcnQKLSAgICAvLyBwYXJzaW5nLgotICAgIGJvb2wgb2xkX3dhaXRpbmdfZm9yX2RhdGEgPSBJc1NlZWtXYWl0aW5nRm9yRGF0YV9Mb2NrZWQoKTsKLQotICAgIGlmIChsZW5ndGggPT0gMHUpIHJldHVybiB0cnVlOwotCi0gICAgRENIRUNLKGRhdGEpOwotCi0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2UgSU5JVElBTElaSU5HOgotICAgICAgY2FzZSBJTklUSUFMSVpFRDoKLSAgICAgICAgRENIRUNLKElzVmFsaWRJZChpZCkpOwotICAgICAgICBpZiAoIXNvdXJjZV9zdGF0ZV9tYXBfW2lkXS0+QXBwZW5kKGRhdGEsIGxlbmd0aCwgYXBwZW5kX3dpbmRvd19zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfd2luZG93X2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfb2Zmc2V0KSkgewotICAgICAgICAgIFJlcG9ydEVycm9yX0xvY2tlZChDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBQQVJTRV9FUlJPUjoKLSAgICAgIGNhc2UgV0FJVElOR19GT1JfSU5JVDoKLSAgICAgIGNhc2UgRU5ERUQ6Ci0gICAgICBjYXNlIFNIVVRET1dOOgotICAgICAgICBEVkxPRygxKSA8PCAiQXBwZW5kRGF0YSgpOiBjYWxsZWQgaW4gdW5leHBlY3RlZCBzdGF0ZSAiIDw8IHN0YXRlXzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiBkYXRhIHdhcyBhcHBlbmRlZCBhdCB0aGUgcGVuZGluZyBzZWVrIHBvaW50LiBUaGlzCi0gICAgLy8gaW5kaWNhdGVzIHdlIGhhdmUgcGFyc2VkIGVub3VnaCBkYXRhIHRvIGNvbXBsZXRlIHRoZSBzZWVrLgotICAgIGlmIChvbGRfd2FpdGluZ19mb3JfZGF0YSAmJiAhSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCkgJiYKLSAgICAgICAgIXNlZWtfY2JfLmlzX251bGwoKSkgewotI2lmIFNCX0hBU19RVUlSSyhTRUVLX1RPX0tFWUZSQU1FKQotICAgICAgQWRqdXN0U2Vla09uQXVkaW9Tb3VyY2UoKTsKLSAgICAgIFN0YXJ0UmV0dXJuaW5nRGF0YSgpOwotI2VuZGlmICAvLyBTQl9IQVNfUVVJUksoU0VFS19UT19LRVlGUkFNRSkKLSAgICAgIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZzZWVrX2NiXykuUnVuKFBJUEVMSU5FX09LKTsKLSAgICB9Ci0KLSAgICByYW5nZXMgPSBHZXRCdWZmZXJlZFJhbmdlc19Mb2NrZWQoKTsKLSAgfQotCi0gIGhvc3RfLT5PbkJ1ZmZlcmVkVGltZVJhbmdlc0NoYW5nZWQocmFuZ2VzKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpSZXNldFBhcnNlclN0YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVEZWx0YSBhcHBlbmRfd2luZG93X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhKiB0aW1lc3RhbXBfb2Zmc2V0KSB7Ci0gIERWTE9HKDEpIDw8ICJSZXNldFBhcnNlclN0YXRlKCIgPDwgaWQgPDwgIikiOwotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICBEQ0hFQ0soIWlkLmVtcHR5KCkpOwotICBDSEVDSyhJc1ZhbGlkSWQoaWQpKTsKLSAgYm9vbCBvbGRfd2FpdGluZ19mb3JfZGF0YSA9IElzU2Vla1dhaXRpbmdGb3JEYXRhX0xvY2tlZCgpOwotICBzb3VyY2Vfc3RhdGVfbWFwX1tpZF0tPlJlc2V0UGFyc2VyU3RhdGUoYXBwZW5kX3dpbmRvd19zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF93aW5kb3dfZW5kLCB0aW1lc3RhbXBfb2Zmc2V0KTsKLSAgLy8gUmVzZXRQYXJzZXJTdGF0ZSBjYW4gcG9zc2libHkgZW1pdCBzb21lIGJ1ZmZlcnMuCi0gIC8vIE5lZWQgdG8gY2hlY2sgd2hldGhlciBzZWVraW5nIGNhbiBiZSBjb21wbGV0ZWQuCi0gIGlmIChvbGRfd2FpdGluZ19mb3JfZGF0YSAmJiAhSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCkgJiYKLSAgICAgICFzZWVrX2NiXy5pc19udWxsKCkpIHsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmc2Vla19jYl8pLlJ1bihQSVBFTElORV9PSyk7Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlJlbW92ZShjb25zdCBzdGQ6OnN0cmluZyYgaWQsIFRpbWVEZWx0YSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGVuZCkgewotICBEVkxPRygxKSA8PCAiUmVtb3ZlKCIgPDwgaWQgPDwgIiwgIiA8PCBzdGFydC5JblNlY29uZHNGKCkgPDwgIiwgIgotICAgICAgICAgICA8PCBlbmQuSW5TZWNvbmRzRigpIDw8ICIpIjsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLQotICBEQ0hFQ0soIWlkLmVtcHR5KCkpOwotICBDSEVDSyhJc1ZhbGlkSWQoaWQpKTsKLSAgRENIRUNLKHN0YXJ0ID49IGJhc2U6OlRpbWVEZWx0YSgpKSA8PCBzdGFydC5JblNlY29uZHNGKCk7Ci0gIERDSEVDSyhzdGFydCA8IGVuZCkgPDwgInN0YXJ0ICIgPDwgc3RhcnQuSW5TZWNvbmRzRigpIDw8ICIgZW5kICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBlbmQuSW5TZWNvbmRzRigpOwotICBEQ0hFQ0soZHVyYXRpb25fICE9IGtOb1RpbWVzdGFtcCk7Ci0gIERDSEVDSyhzdGFydCA8PSBkdXJhdGlvbl8pIDw8ICJzdGFydCAiIDw8IHN0YXJ0LkluU2Vjb25kc0YoKSA8PCAiIGR1cmF0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZHVyYXRpb25fLkluU2Vjb25kc0YoKTsKLQotICBpZiAoc3RhcnQgPT0gZHVyYXRpb25fKSByZXR1cm47Ci0KLSAgc291cmNlX3N0YXRlX21hcF9baWRdLT5SZW1vdmUoc3RhcnQsIGVuZCwgZHVyYXRpb25fKTsKLSAgaG9zdF8tPk9uQnVmZmVyZWRUaW1lUmFuZ2VzQ2hhbmdlZChHZXRCdWZmZXJlZFJhbmdlc19Mb2NrZWQoKSk7Ci19Ci0KLWRvdWJsZSBDaHVua0RlbXV4ZXI6OkdldER1cmF0aW9uKCkgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICByZXR1cm4gR2V0RHVyYXRpb25fTG9ja2VkKCk7Ci19Ci0KLWRvdWJsZSBDaHVua0RlbXV4ZXI6OkdldER1cmF0aW9uX0xvY2tlZCgpIHsKLSAgbG9ja18uQXNzZXJ0QWNxdWlyZWQoKTsKLSAgaWYgKGR1cmF0aW9uXyA9PSBrTm9UaW1lc3RhbXApCi0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0KLSAgLy8gUmV0dXJuIHBvc2l0aXZlIGluZmluaXR5IGlmIHRoZSByZXNvdXJjZSBpcyB1bmJvdW5kZWQuCi0gIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3ZpZGVvLmh0bWwjZG9tLW1lZGlhLWR1cmF0aW9uCi0gIGlmIChkdXJhdGlvbl8gPT0ga0luZmluaXRlRHVyYXRpb24pCi0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLQotICBpZiAodXNlcl9zcGVjaWZpZWRfZHVyYXRpb25fID49IDApIHJldHVybiB1c2VyX3NwZWNpZmllZF9kdXJhdGlvbl87Ci0KLSAgcmV0dXJuIGR1cmF0aW9uXy5JblNlY29uZHNGKCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpTZXREdXJhdGlvbihkb3VibGUgZHVyYXRpb24pIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRFZMT0coMSkgPDwgIlNldER1cmF0aW9uKCIgPDwgZHVyYXRpb24gPDwgIikiOwotICBEQ0hFQ0tfR0UoZHVyYXRpb24sIDApOwotCi0gIGlmIChkdXJhdGlvbiA9PSBHZXREdXJhdGlvbl9Mb2NrZWQoKSkgcmV0dXJuOwotCi0gIC8vIENvbXB1dGUgJiBib3VuZHMgY2hlY2sgdGhlIFRpbWVEZWx0YSByZXByZXNlbnRhdGlvbiBvZiBkdXJhdGlvbi4KLSAgLy8gVGhpcyBjYW4gYmUgZGlmZmVyZW50IGlmIHRoZSB2YWx1ZSBvZiB8ZHVyYXRpb258IGRvZXNuJ3QgZml0IHRoZSByYW5nZSBvcgotICAvLyBwcmVjaXNpb24gb2YgVGltZURlbHRhLgotICBUaW1lRGVsdGEgbWluX2R1cmF0aW9uID0gVGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZSgxKTsKLSAgLy8gRG9uJ3QgdXNlIFRpbWVEZWx0YTo6TWF4KCkgaGVyZSwgYXMgd2Ugd2FudCB0aGUgbGFyZ2VzdCBmaW5pdGUgdGltZSBkZWx0YS4KLSAgVGltZURlbHRhIG1heF9kdXJhdGlvbiA9Ci0gICAgICBUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpIC0gMSk7Ci0gIGRvdWJsZSBtaW5fZHVyYXRpb25faW5fc2Vjb25kcyA9IG1pbl9kdXJhdGlvbi5JblNlY29uZHNGKCk7Ci0gIGRvdWJsZSBtYXhfZHVyYXRpb25faW5fc2Vjb25kcyA9IG1heF9kdXJhdGlvbi5JblNlY29uZHNGKCk7Ci0KLSAgVGltZURlbHRhIGR1cmF0aW9uX3RkOwotICBpZiAoZHVyYXRpb24gPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSB7Ci0gICAgZHVyYXRpb25fdGQgPSBtZWRpYTo6a0luZmluaXRlRHVyYXRpb247Ci0gIH0gZWxzZSBpZiAoZHVyYXRpb24gPCBtaW5fZHVyYXRpb25faW5fc2Vjb25kcykgewotICAgIGR1cmF0aW9uX3RkID0gbWluX2R1cmF0aW9uOwotICB9IGVsc2UgaWYgKGR1cmF0aW9uID4gbWF4X2R1cmF0aW9uX2luX3NlY29uZHMpIHsKLSAgICBkdXJhdGlvbl90ZCA9IG1heF9kdXJhdGlvbjsKLSAgfSBlbHNlIHsKLSAgICBkdXJhdGlvbl90ZCA9IFRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygKLSAgICAgICAgZHVyYXRpb24gKiBiYXNlOjpUaW1lOjprTWljcm9zZWNvbmRzUGVyU2Vjb25kKTsKLSAgfQotCi0gIERDSEVDSyhkdXJhdGlvbl90ZCA+IFRpbWVEZWx0YSgpKTsKLQotICB1c2VyX3NwZWNpZmllZF9kdXJhdGlvbl8gPSBkdXJhdGlvbjsKLSAgZHVyYXRpb25fID0gZHVyYXRpb25fdGQ7Ci0gIGhvc3RfLT5TZXREdXJhdGlvbihkdXJhdGlvbl8pOwotCi0gIGZvciAoU291cmNlQnVmZmVyU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpOyArK2l0cikgewotICAgIGl0ci0+c2Vjb25kLT5PblNldER1cmF0aW9uKGR1cmF0aW9uXyk7Ci0gIH0KLX0KLQotYm9vbCBDaHVua0RlbXV4ZXI6OklzUGFyc2luZ01lZGlhU2VnbWVudChjb25zdCBzdGQ6OnN0cmluZyYgaWQpIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRFZMT0coMSkgPDwgIklzUGFyc2luZ01lZGlhU2VnbWVudCgiIDw8IGlkIDw8ICIpIjsKLSAgQ0hFQ0soSXNWYWxpZElkKGlkKSk7Ci0KLSAgcmV0dXJuIHNvdXJjZV9zdGF0ZV9tYXBfW2lkXS0+cGFyc2luZ19tZWRpYV9zZWdtZW50KCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpTZXRTZXF1ZW5jZU1vZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBib29sIHNlcXVlbmNlX21vZGUpIHsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLSAgRFZMT0coMSkgPDwgIlNldFNlcXVlbmNlTW9kZSgiIDw8IGlkIDw8ICIsICIgPDwgc2VxdWVuY2VfbW9kZSA8PCAiKSI7Ci0gIENIRUNLKElzVmFsaWRJZChpZCkpOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBFTkRFRCk7Ci0KLSAgc291cmNlX3N0YXRlX21hcF9baWRdLT5TZXRTZXF1ZW5jZU1vZGUoc2VxdWVuY2VfbW9kZSk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpTZXRHcm91cFN0YXJ0VGltZXN0YW1wSWZJblNlcXVlbmNlTW9kZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgaWQsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfb2Zmc2V0KSB7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERWTE9HKDEpIDw8ICJTZXRHcm91cFN0YXJ0VGltZXN0YW1wSWZJblNlcXVlbmNlTW9kZSgiIDw8IGlkIDw8ICIsICIKLSAgICAgICAgICAgPDwgdGltZXN0YW1wX29mZnNldC5JblNlY29uZHNGKCkgPDwgIikiOwotICBDSEVDSyhJc1ZhbGlkSWQoaWQpKTsKLSAgRENIRUNLX05FKHN0YXRlXywgRU5ERUQpOwotCi0gIHNvdXJjZV9zdGF0ZV9tYXBfW2lkXS0+U2V0R3JvdXBTdGFydFRpbWVzdGFtcElmSW5TZXF1ZW5jZU1vZGUoCi0gICAgICB0aW1lc3RhbXBfb2Zmc2V0KTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6Ok1hcmtFbmRPZlN0cmVhbShQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKLSAgRFZMT0coMSkgPDwgIk1hcmtFbmRPZlN0cmVhbSgiIDw8IHN0YXR1cyA8PCAiKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIERDSEVDS19ORShzdGF0ZV8sIFdBSVRJTkdfRk9SX0lOSVQpOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBFTkRFRCk7Ci0KLSAgaWYgKHN0YXRlXyA9PSBTSFVURE9XTiB8fCBzdGF0ZV8gPT0gUEFSU0VfRVJST1IpIHJldHVybjsKLQotICBpZiAoc3RhdGVfID09IElOSVRJQUxJWklORykgewotICAgIFJlcG9ydEVycm9yX0xvY2tlZChERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9PUEVOKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBib29sIG9sZF93YWl0aW5nX2Zvcl9kYXRhID0gSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCk7Ci0gIGZvciAoU291cmNlQnVmZmVyU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpOyArK2l0cikgewotICAgIGl0ci0+c2Vjb25kLT5NYXJrRW5kT2ZTdHJlYW0oKTsKLSAgfQotCi0gIENvbXBsZXRlUGVuZGluZ1JlYWRzSWZQb3NzaWJsZSgpOwotCi0gIC8vIEdpdmUgYSBjaGFuY2UgdG8gcmVzdW1lIHRoZSBwZW5kaW5nIHNlZWsgcHJvY2Vzcy4KLSAgaWYgKHN0YXR1cyAhPSBQSVBFTElORV9PSykgewotICAgIERDSEVDSyhzdGF0dXMgPT0gQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX0RFQ09ERV9FUlJPUiB8fAotICAgICAgICAgICBzdGF0dXMgPT0gQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX05FVFdPUktfRVJST1IpOwotICAgIFJlcG9ydEVycm9yX0xvY2tlZChzdGF0dXMpOwotICAgIHJldHVybjsKLSAgfQotCi0gIENoYW5nZVN0YXRlX0xvY2tlZChFTkRFRCk7Ci0gIERlY3JlYXNlRHVyYXRpb25JZk5lY2Vzc2FyeSgpOwotCi0gIGlmIChvbGRfd2FpdGluZ19mb3JfZGF0YSAmJiAhSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCkgJiYKLSAgICAgICFzZWVrX2NiXy5pc19udWxsKCkpIHsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmc2Vla19jYl8pLlJ1bihQSVBFTElORV9PSyk7Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlVubWFya0VuZE9mU3RyZWFtKCkgewotICBEVkxPRygxKSA8PCAiVW5tYXJrRW5kT2ZTdHJlYW0oKSI7Ci0gIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7Ci0gIC8vIFdoZW4gd2UgZXhjZWVkIHRoZSBtYXggYnVmZmVyIGNhcGFjaXR5IHdlIGhhdmUgfHN0YXRlX3wgUEFSU0VfRVJST1IuCi0gIC8vIFJldHVybmluZyBlYXJseSBjYXVzZXMgYSBwbGF5YmFjayBlcnJvci4KLSAgaWYgKHN0YXRlXyA9PSBQQVJTRV9FUlJPUikgewotICAgIHJldHVybjsKLSAgfQotICBEQ0hFQ0tfRVEoc3RhdGVfLCBFTkRFRCk7Ci0KLSAgQ2hhbmdlU3RhdGVfTG9ja2VkKElOSVRJQUxJWkVEKTsKLQotICBmb3IgKFNvdXJjZUJ1ZmZlclN0YXRlTWFwOjppdGVyYXRvciBpdHIgPSBzb3VyY2Vfc3RhdGVfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSBzb3VyY2Vfc3RhdGVfbWFwXy5lbmQoKTsgKytpdHIpIHsKLSAgICBpdHItPnNlY29uZC0+VW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgfQotfQotCi12b2lkIENodW5rRGVtdXhlcjo6U2h1dGRvd24oKSB7Ci0gIERWTE9HKDEpIDw8ICJTaHV0ZG93bigpIjsKLSAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKLQotICBpZiAoc3RhdGVfID09IFNIVVRET1dOKSByZXR1cm47Ci0KLSAgU2h1dGRvd25BbGxTdHJlYW1zKCk7Ci0KLSAgQ2hhbmdlU3RhdGVfTG9ja2VkKFNIVVRET1dOKTsKLQotICBpZiAoIXNlZWtfY2JfLmlzX251bGwoKSkKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmc2Vla19jYl8pLlJ1bihQSVBFTElORV9FUlJPUl9BQk9SVCk7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpTZXRNZW1vcnlMaW1pdHNGb3JUZXN0KERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtZW1vcnlfbGltaXQpIHsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPlNldE1lbW9yeUxpbWl0cyh0eXBlLCBtZW1vcnlfbGltaXQpOwotICB9Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpDaGFuZ2VTdGF0ZV9Mb2NrZWQoU3RhdGUgbmV3X3N0YXRlKSB7Ci0gIGxvY2tfLkFzc2VydEFjcXVpcmVkKCk7Ci0gIERWTE9HKDEpIDw8ICJDaHVua0RlbXV4ZXI6OkNoYW5nZVN0YXRlX0xvY2tlZCgpIDogIiA8PCBzdGF0ZV8gPDwgIiAtPiAiCi0gICAgICAgICAgIDw8IG5ld19zdGF0ZTsKLSAgc3RhdGVfID0gbmV3X3N0YXRlOwotfQotCi1DaHVua0RlbXV4ZXI6On5DaHVua0RlbXV4ZXIoKSB7Ci0gIERDSEVDS19ORShzdGF0ZV8sIElOSVRJQUxJWkVEKTsKLQotICB3aGlsZSAoIXNvdXJjZV9zdGF0ZV9tYXBfLmVtcHR5KCkpIHsKLSAgICBkZWxldGUgc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKS0+c2Vjb25kOwotICAgIHNvdXJjZV9zdGF0ZV9tYXBfLmVyYXNlKHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCkpOwotICB9Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpSZXBvcnRFcnJvcl9Mb2NrZWQoUGlwZWxpbmVTdGF0dXMgZXJyb3IpIHsKLSAgRFZMT0coMSkgPDwgIlJlcG9ydEVycm9yX0xvY2tlZCgiIDw8IGVycm9yIDw8ICIpIjsKLSAgbG9ja18uQXNzZXJ0QWNxdWlyZWQoKTsKLSAgRENIRUNLX05FKGVycm9yLCBQSVBFTElORV9PSyk7Ci0KLSAgQ2hhbmdlU3RhdGVfTG9ja2VkKFBBUlNFX0VSUk9SKTsKLQotICBQaXBlbGluZVN0YXR1c0NCIGNiOwotCi0gIGlmICghaW5pdF9jYl8uaXNfbnVsbCgpKSB7Ci0gICAgc3RkOjpzd2FwKGNiLCBpbml0X2NiXyk7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKCFzZWVrX2NiXy5pc19udWxsKCkpIHN0ZDo6c3dhcChjYiwgc2Vla19jYl8pOwotCi0gICAgU2h1dGRvd25BbGxTdHJlYW1zKCk7Ci0gIH0KLQotICBpZiAoIWNiLmlzX251bGwoKSkgewotICAgIGNiLlJ1bihlcnJvcik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgYmFzZTo6QXV0b1VubG9jayBhdXRvX3VubG9jayhsb2NrXyk7Ci0gIGhvc3RfLT5PbkRlbXV4ZXJFcnJvcihlcnJvcik7Ci19Ci0KLWJvb2wgQ2h1bmtEZW11eGVyOjpJc1NlZWtXYWl0aW5nRm9yRGF0YV9Mb2NrZWQoKSBjb25zdCB7Ci0gIGxvY2tfLkFzc2VydEFjcXVpcmVkKCk7Ci0gIGZvciAoU291cmNlQnVmZmVyU3RhdGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpOyArK2l0cikgewotICAgIGlmIChpdHItPnNlY29uZC0+SXNTZWVrV2FpdGluZ0ZvckRhdGEoKSkgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpPblNvdXJjZUluaXREb25lKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsIGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMmIHBhcmFtcykgewotICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6bWVkaWEiLCAiQ2h1bmtEZW11eGVyOjpPblNvdXJjZUluaXREb25lIik7Ci0gIERWTE9HKDEpIDw8ICJPblNvdXJjZUluaXREb25lIHNvdXJjZV9pZD0iIDw8IHNvdXJjZV9pZAotICAgICAgICAgICA8PCAiIGR1cmF0aW9uPSIgPDwgcGFyYW1zLmR1cmF0aW9uLkluU2Vjb25kc0YoKTsKLSAgbG9ja18uQXNzZXJ0QWNxdWlyZWQoKTsKLSAgRENIRUNLX0VRKHN0YXRlXywgSU5JVElBTElaSU5HKTsKLSAgRENIRUNLKHBlbmRpbmdfc291cmNlX2luaXRfaWRzXy5maW5kKHNvdXJjZV9pZCkgIT0KLSAgICAgICAgIHBlbmRpbmdfc291cmNlX2luaXRfaWRzXy5lbmQoKSk7Ci0gIGlmIChhdWRpb19zdHJlYW1zXy5lbXB0eSgpICYmIHZpZGVvX3N0cmVhbXNfLmVtcHR5KCkpIHsKLSAgICBSZXBvcnRFcnJvcl9Mb2NrZWQoREVNVVhFUl9FUlJPUl9DT1VMRF9OT1RfT1BFTik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgaWYgKCFwYXJhbXMuZHVyYXRpb24uaXNfemVybygpICYmIGR1cmF0aW9uXyA9PSBrTm9UaW1lc3RhbXApCi0gICAgVXBkYXRlRHVyYXRpb24ocGFyYW1zLmR1cmF0aW9uKTsKLQotICBpZiAoIXBhcmFtcy50aW1lbGluZV9vZmZzZXQuaXNfbnVsbCgpKSB7Ci0gICAgaWYgKCF0aW1lbGluZV9vZmZzZXRfLmlzX251bGwoKSAmJgotICAgICAgICBwYXJhbXMudGltZWxpbmVfb2Zmc2V0ICE9IHRpbWVsaW5lX29mZnNldF8pIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICA8PCAiVGltZWxpbmUgb2Zmc2V0IGlzIG5vdCB0aGUgc2FtZSBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlcnMuIjsKLSAgICAgIFJlcG9ydEVycm9yX0xvY2tlZChERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9PUEVOKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0aW1lbGluZV9vZmZzZXRfID0gcGFyYW1zLnRpbWVsaW5lX29mZnNldDsKLSAgfQotCi0gIGlmIChwYXJhbXMubGl2ZW5lc3MgIT0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfVU5LTk9XTikgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXVkaW9fc3RyZWFtc18uc2l6ZSgpOyArK2kpCi0gICAgICBhdWRpb19zdHJlYW1zX1tpXS0+U2V0TGl2ZW5lc3MocGFyYW1zLmxpdmVuZXNzKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZpZGVvX3N0cmVhbXNfLnNpemUoKTsgKytpKQotICAgICAgdmlkZW9fc3RyZWFtc19baV0tPlNldExpdmVuZXNzKHBhcmFtcy5saXZlbmVzcyk7Ci0gIH0KLQotICBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudF8gKz0gcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50OwotICBkZXRlY3RlZF92aWRlb190cmFja19jb3VudF8gKz0gcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50OwotICBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50XyArPSBwYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudDsKLQotICAvLyBXYWl0IHVudGlsIGFsbCBzdHJlYW1zIGhhdmUgaW5pdGlhbGl6ZWQuCi0gIHBlbmRpbmdfc291cmNlX2luaXRfaWRzXy5lcmFzZShzb3VyY2VfaWQpOwotICBpZiAoIXBlbmRpbmdfc291cmNlX2luaXRfaWRzXy5lbXB0eSgpKSByZXR1cm47Ci0KLSAgLy8gUmVjb3JkIGRldGVjdGVkIHRyYWNrIGNvdW50cyBieSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gYW4gTVNFIHBsYXliYWNrLgotICAvLyBDb3VudHMgYXJlIHNwbGl0IGludG8gNTAgYnVja2V0cywgY2FwcGVkIGludG8gWzAsMTAwXSByYW5nZS4KLSAgVU1BX0hJU1RPR1JBTV9DT1VOVFNfMTAwKCJNZWRpYS5NU0UuRGV0ZWN0ZWRUcmFja0NvdW50LkF1ZGlvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50Xyk7Ci0gIFVNQV9ISVNUT0dSQU1fQ09VTlRTXzEwMCgiTWVkaWEuTVNFLkRldGVjdGVkVHJhY2tDb3VudC5WaWRlbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZF92aWRlb190cmFja19jb3VudF8pOwotICBVTUFfSElTVE9HUkFNX0NPVU5UU18xMDAoIk1lZGlhLk1TRS5EZXRlY3RlZFRyYWNrQ291bnQuVGV4dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50Xyk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb19zdHJlYW1zXy5zaXplKCk7ICsraSkgewotICAgIG1lZGlhX2xvZ18tPlJlY29yZFJhcHBvcldpdGhTZWN1cml0eU9yaWdpbigKLSAgICAgICAgIk1lZGlhLk9yaWdpblVybC5NU0UuVmlkZW9Db2RlYy4iICsKLSAgICAgICAgR2V0Q29kZWNOYW1lKHZpZGVvX3N0cmVhbXNfW2ldLT52aWRlb19kZWNvZGVyX2NvbmZpZygpLmNvZGVjKCkpKTsKLSAgfQotCi0gIFNlZWtBbGxTb3VyY2VzKEdldFN0YXJ0VGltZSgpKTsKLSAgU3RhcnRSZXR1cm5pbmdEYXRhKCk7Ci0KLSAgaWYgKGR1cmF0aW9uXyA9PSBrTm9UaW1lc3RhbXApIGR1cmF0aW9uXyA9IGtJbmZpbml0ZUR1cmF0aW9uOwotCi0gIC8vIFRoZSBkZW11eGVyIGlzIG5vdyBpbml0aWFsaXplZCBhZnRlciB0aGUgfHN0YXJ0X3RpbWVzdGFtcF98IHdhcyBzZXQuCi0gIENoYW5nZVN0YXRlX0xvY2tlZChJTklUSUFMSVpFRCk7Ci0gIGJhc2U6OlJlc2V0QW5kUmV0dXJuKCZpbml0X2NiXykuUnVuKFBJUEVMSU5FX09LKTsKLX0KLQotLy8gc3RhdGljCi1NZWRpYVRyYWNrOjpJZCBDaHVua0RlbXV4ZXI6OkdlbmVyYXRlTWVkaWFUcmFja0lkKCkgewotICBzdGF0aWMgdW5zaWduZWQgZ190cmFja19jb3VudCA9IDA7Ci0gIHJldHVybiBiYXNlOjpVaW50VG9TdHJpbmcoKytnX3RyYWNrX2NvdW50KTsKLX0KLQotQ2h1bmtEZW11eGVyU3RyZWFtKiBDaHVua0RlbXV4ZXI6OkNyZWF0ZURlbXV4ZXJTdHJlYW0oCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV9pZCwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUsCi0gICAgRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKSB7Ci0gIC8vIE5ldyBDaHVua0RlbXV4ZXJTdHJlYW1zIGNhbiBiZSBjcmVhdGVkIG9ubHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIHNlZ21lbnQKLSAgLy8gcHJvY2Vzc2luZywgd2hpY2ggaGFwcGVucyB3aGVuIGEgbmV3IGNodW5rIG9mIGRhdGEgaXMgYXBwZW5kZWQgYW5kIHRoZQotICAvLyBsb2NrXyBtdXN0IGJlIGhlbGQgYnkgQ2h1bmtEZW11eGVyOjpBcHBlbmREYXRhLgotICBsb2NrXy5Bc3NlcnRBY3F1aXJlZCgpOwotCi0gIE1lZGlhVHJhY2s6OklkIG1lZGlhX3RyYWNrX2lkID0gR2VuZXJhdGVNZWRpYVRyYWNrSWQoKTsKLQotICBPd25lZENodW5rRGVtdXhlclN0cmVhbVZlY3Rvciogb3duaW5nX3ZlY3RvciA9IE5VTEw7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6QVVESU86Ci0gICAgICBvd25pbmdfdmVjdG9yID0gJmF1ZGlvX3N0cmVhbXNfOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlZJREVPOgotICAgICAgb3duaW5nX3ZlY3RvciA9ICZ2aWRlb19zdHJlYW1zXzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBEZW11eGVyU3RyZWFtOjpURVhUOgotICAgICAgb3duaW5nX3ZlY3RvciA9ICZ0ZXh0X3N0cmVhbXNfOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlVOS05PV046Ci0gICAgY2FzZSBEZW11eGVyU3RyZWFtOjpOVU1fVFlQRVM6Ci0gICAgICBOT1RSRUFDSEVEKCk7Ci0gICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+IHN0cmVhbShuZXcgQ2h1bmtEZW11eGVyU3RyZWFtKAotICAgICAgdHlwZSwgbWltZSwgc3BsaWNlX2ZyYW1lc19lbmFibGVkXywgbWVkaWFfdHJhY2tfaWQpKTsKLSAgRENIRUNLKHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfLmZpbmQobWVkaWFfdHJhY2tfaWQpID09Ci0gICAgICAgICB0cmFja19pZF90b19kZW11eF9zdHJlYW1fbWFwXy5lbmQoKSk7Ci0gIHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfW21lZGlhX3RyYWNrX2lkXSA9IHN0cmVhbS5nZXQoKTsKLSAgaWRfdG9fc3RyZWFtc19tYXBfW3NvdXJjZV9pZF0ucHVzaF9iYWNrKHN0cmVhbS5nZXQoKSk7Ci0gIG93bmluZ192ZWN0b3ItPnB1c2hfYmFjaygKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+KHN0cmVhbS5yZWxlYXNlKCkpKTsKLSAgcmV0dXJuIG93bmluZ192ZWN0b3ItPmJhY2soKS5nZXQoKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6Ok9uTmV3VGV4dFRyYWNrKENodW5rRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFRyYWNrQ29uZmlnJiBjb25maWcpIHsKLSAgbG9ja18uQXNzZXJ0QWNxdWlyZWQoKTsKLSAgRENIRUNLX05FKHN0YXRlXywgU0hVVERPV04pOwotICBob3N0Xy0+QWRkVGV4dFN0cmVhbSh0ZXh0X3N0cmVhbSwgY29uZmlnKTsKLX0KLQotYm9vbCBDaHVua0RlbXV4ZXI6OklzVmFsaWRJZChjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2lkKSBjb25zdCB7Ci0gIGxvY2tfLkFzc2VydEFjcXVpcmVkKCk7Ci0gIHJldHVybiBzb3VyY2Vfc3RhdGVfbWFwXy5jb3VudChzb3VyY2VfaWQpID4gMHU7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpVcGRhdGVEdXJhdGlvbihUaW1lRGVsdGEgbmV3X2R1cmF0aW9uKSB7Ci0gIERDSEVDSyhkdXJhdGlvbl8gIT0gbmV3X2R1cmF0aW9uKTsKLSAgdXNlcl9zcGVjaWZpZWRfZHVyYXRpb25fID0gLTE7Ci0gIGR1cmF0aW9uXyA9IG5ld19kdXJhdGlvbjsKLSAgaG9zdF8tPlNldER1cmF0aW9uKG5ld19kdXJhdGlvbik7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpJbmNyZWFzZUR1cmF0aW9uSWZOZWNlc3NhcnkoVGltZURlbHRhIG5ld19kdXJhdGlvbikgewotICBEQ0hFQ0sobmV3X2R1cmF0aW9uICE9IGtOb1RpbWVzdGFtcCk7Ci0gIERDSEVDSyhuZXdfZHVyYXRpb24gIT0ga0luZmluaXRlRHVyYXRpb24pOwotCi0gIC8vIFBlciBBcHJpbCAxLCAyMDE0IE1TRSBzcGVjIGVkaXRvcidzIGRyYWZ0OgotICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZDQ3MWE0NDEyMDQwL21lZGlhLXNvdXJjZS8KLSAgLy8gICAgIG1lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1wcm9jZXNzaW5nCi0gIC8vIDUuIElmIHRoZSBtZWRpYSBzZWdtZW50IGNvbnRhaW5zIGRhdGEgYmV5b25kIHRoZSBjdXJyZW50IGR1cmF0aW9uLCB0aGVuIHJ1bgotICAvLyAgICB0aGUgZHVyYXRpb24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhlIG1heGltdW0gb2YKLSAgLy8gICAgdGhlIGN1cnJlbnQgZHVyYXRpb24gYW5kIHRoZSBncm91cCBlbmQgdGltZXN0YW1wLgotCi0gIGlmIChuZXdfZHVyYXRpb24gPD0gZHVyYXRpb25fKSByZXR1cm47Ci0KLSAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIjogSW5jcmVhc2luZyBkdXJhdGlvbjogIiA8PCBkdXJhdGlvbl8uSW5TZWNvbmRzRigpCi0gICAgICAgICAgIDw8ICIgLT4gIiA8PCBuZXdfZHVyYXRpb24uSW5TZWNvbmRzRigpOwotCi0gIFVwZGF0ZUR1cmF0aW9uKG5ld19kdXJhdGlvbik7Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpEZWNyZWFzZUR1cmF0aW9uSWZOZWNlc3NhcnkoKSB7Ci0gIGxvY2tfLkFzc2VydEFjcXVpcmVkKCk7Ci0KLSAgVGltZURlbHRhIG1heF9kdXJhdGlvbjsKLQotICBmb3IgKFNvdXJjZUJ1ZmZlclN0YXRlTWFwOjppdGVyYXRvciBpdHIgPSBzb3VyY2Vfc3RhdGVfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSBzb3VyY2Vfc3RhdGVfbWFwXy5lbmQoKTsgKytpdHIpIHsKLSAgICBtYXhfZHVyYXRpb24gPQotICAgICAgICBzdGQ6Om1heChtYXhfZHVyYXRpb24sIGl0ci0+c2Vjb25kLT5HZXRNYXhCdWZmZXJlZER1cmF0aW9uKCkpOwotICB9Ci0KLSAgaWYgKG1heF9kdXJhdGlvbi5pc196ZXJvKCkpIHJldHVybjsKLQotICBpZiAobWF4X2R1cmF0aW9uIDwgZHVyYXRpb25fKSBVcGRhdGVEdXJhdGlvbihtYXhfZHVyYXRpb24pOwotfQotCi1SYW5nZXM8VGltZURlbHRhPiBDaHVua0RlbXV4ZXI6OkdldEJ1ZmZlcmVkUmFuZ2VzKCkgY29uc3QgewotICBiYXNlOjpBdXRvTG9jayBhdXRvX2xvY2sobG9ja18pOwotICByZXR1cm4gR2V0QnVmZmVyZWRSYW5nZXNfTG9ja2VkKCk7Ci19Ci0KLVJhbmdlczxUaW1lRGVsdGE+IENodW5rRGVtdXhlcjo6R2V0QnVmZmVyZWRSYW5nZXNfTG9ja2VkKCkgY29uc3QgewotICBsb2NrXy5Bc3NlcnRBY3F1aXJlZCgpOwotCi0gIGJvb2wgZW5kZWQgPSBzdGF0ZV8gPT0gRU5ERUQ7Ci0gIC8vIFRPRE8oYWNvbHdlbGwpOiBXaGVuIHdlIHN0YXJ0IGFsbG93aW5nIFNvdXJjZUJ1ZmZlcnMgdGhhdCBhcmUgbm90IGFjdGl2ZSwKLSAgLy8gd2UnbGwgbmVlZCB0byB1cGRhdGUgdGhpcyBsb29wIHRvIG9ubHkgYWRkIHJhbmdlcyBmcm9tIGFjdGl2ZSBzb3VyY2VzLgotICBTb3VyY2VCdWZmZXJTdGF0ZTo6UmFuZ2VzTGlzdCByYW5nZXNfbGlzdDsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgcmFuZ2VzX2xpc3QucHVzaF9iYWNrKGl0ci0+c2Vjb25kLT5HZXRCdWZmZXJlZFJhbmdlcyhkdXJhdGlvbl8sIGVuZGVkKSk7Ci0gIH0KLQotICByZXR1cm4gU291cmNlQnVmZmVyU3RhdGU6OkNvbXB1dGVSYW5nZXNJbnRlcnNlY3Rpb24ocmFuZ2VzX2xpc3QsIGVuZGVkKTsKLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlN0YXJ0UmV0dXJuaW5nRGF0YSgpIHsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPlN0YXJ0UmV0dXJuaW5nRGF0YSgpOwotICB9Ci19Ci0KLXZvaWQgQ2h1bmtEZW11eGVyOjpBYm9ydFBlbmRpbmdSZWFkc19Mb2NrZWQoKSB7Ci0gIGZvciAoU291cmNlQnVmZmVyU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpOyArK2l0cikgewotICAgIGl0ci0+c2Vjb25kLT5BYm9ydFJlYWRzKCk7Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlNlZWtBbGxTb3VyY2VzKFRpbWVEZWx0YSBzZWVrX3RpbWUpIHsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPlNlZWsoc2Vla190aW1lKTsKLSAgfQotfQotCi12b2lkIENodW5rRGVtdXhlcjo6QWRqdXN0U2Vla09uQXVkaW9Tb3VyY2UoKSB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGF1ZGlvIGFuZCBvbmUgdmlkZW8gc3RyZWFtIGluCi0gIC8vIHRoZSB2aWRlby4gIEFzIHdlIHdvbid0IGJlIGFibGUgdG8gYWxpZ24gc2VlayB0byBtb3JlIHRoYW4gb25lIHZpZGVvCi0gIC8vIHN0cmVhbXMgdW5sZXNzIHRoZWlyIGtleWZyYW1lcyBhcmUgYWxpZ25lZC4KLQotICAvLyBGaW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHZpZGVvIGtleWZyYW1lIGp1c3QgYmVmb3JlIHRoZSBzZWVrIHRpbWVzdGFtcCBvZgotICAvLyB0aGUgZmlyc3QgdmlkZW8gc3RyZWFtLgotICBUaW1lRGVsdGEgYWRqdXN0ZWRfc2Vla190aW1lID0ga05vVGltZXN0YW1wOwotICBmb3IgKFNvdXJjZUJ1ZmZlclN0YXRlTWFwOjppdGVyYXRvciBpdHIgPSBzb3VyY2Vfc3RhdGVfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSBzb3VyY2Vfc3RhdGVfbWFwXy5lbmQoKTsgKytpdHIpIHsKLSAgICBUaW1lRGVsdGEgc2Vla19rZXlmcmFtZV90aW1lc3RhbXAgPQotICAgICAgICBpdHItPnNlY29uZC0+R2V0VmlkZW9TZWVrS2V5ZnJhbWVUaW1lc3RhbXAoKTsKLSAgICBpZiAoc2Vla19rZXlmcmFtZV90aW1lc3RhbXAgPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgYWRqdXN0ZWRfc2Vla190aW1lID0gc2Vla19rZXlmcmFtZV90aW1lc3RhbXA7Ci0gICAgYnJlYWs7Ci0gIH0KLQotICBpZiAoYWRqdXN0ZWRfc2Vla190aW1lID09IGtOb1RpbWVzdGFtcCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGZvciAoU291cmNlQnVmZmVyU3RhdGVNYXA6Oml0ZXJhdG9yIGl0ciA9IHNvdXJjZV9zdGF0ZV9tYXBfLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNvdXJjZV9zdGF0ZV9tYXBfLmVuZCgpOyArK2l0cikgewotICAgIFJhbmdlczxUaW1lRGVsdGE+IHJhbmdlc19saXN0ID0KLSAgICAgICAgaXRyLT5zZWNvbmQtPkdldEF1ZGlvQnVmZmVyZWRSYW5nZXMoZHVyYXRpb25fLCBzdGF0ZV8gPT0gRU5ERUQpOwotICAgIGlmIChyYW5nZXNfbGlzdC5zaXplKCkgPT0gMCkgewotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIC8vIE5vdGUgdGhhdCBpbiByYXJlIHNpdHVhdGlvbnMgdGhlIHNlZWsgbWF5IGZhaWwgYXMgdGhlIGFwcGVuZCBhZnRlciBzZWVrCi0gICAgLy8gbWF5IGVqZWN0IHNvbWUgYXVkaW8gYnVmZmVyIGFuZCBubyBsb25nZXIgYmUgYWJsZSB0byBmdWxmaWxsIHRoZSBzZWVrLgotICAgIC8vIEF2b2lkIGNhbGxpbmcgU2VlaygpIGluIHRoaXMgY2FzZSBzbyB0aGUgZGVtdXhlciB3b24ndCBoYW5nLiAgVGhlIHZpZGVvCi0gICAgLy8gY2FuIGNvbnRpbnVlIHRvIHBsYXksIGp1c3Qgd2l0aCBzb21lIGxlYWRpbmcgc2lsZW5jZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJhbmdlc19saXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICBpZiAoYWRqdXN0ZWRfc2Vla190aW1lID49IHJhbmdlc19saXN0LnN0YXJ0KGkpICYmCi0gICAgICAgICAgYWRqdXN0ZWRfc2Vla190aW1lIDw9IHJhbmdlc19saXN0LmVuZChpKSkgewotICAgICAgICBpdHItPnNlY29uZC0+U2VlayhhZGp1c3RlZF9zZWVrX3RpbWUpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm47Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OkNvbXBsZXRlUGVuZGluZ1JlYWRzSWZQb3NzaWJsZSgpIHsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPkNvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlKCk7Ci0gIH0KLX0KLQotdm9pZCBDaHVua0RlbXV4ZXI6OlNodXRkb3duQWxsU3RyZWFtcygpIHsKLSAgZm9yIChTb3VyY2VCdWZmZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaXRyID0gc291cmNlX3N0YXRlX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gc291cmNlX3N0YXRlX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPlNodXRkb3duKCk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDI0MjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfQ0hVTktfREVNVVhFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19DSFVOS19ERU1VWEVSX0hfCi0KLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi9sb2NrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVtdXhlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEZGbXBlZ1VSTFByb3RvY29sOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgQ2h1bmtEZW11eGVyU3RyZWFtIDogcHVibGljIERlbXV4ZXJTdHJlYW0gewotIHB1YmxpYzoKLSAgdHlwZWRlZiBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPj4gQnVmZmVyUXVldWU7Ci0KLSAgQ2h1bmtEZW11eGVyU3RyZWFtKFR5cGUgdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUsCi0gICAgICAgICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCwgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWQpOwotICB+Q2h1bmtEZW11eGVyU3RyZWFtKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gQ2h1bmtEZW11eGVyU3RyZWFtIGNvbnRyb2wgbWV0aG9kcy4KLSAgdm9pZCBTdGFydFJldHVybmluZ0RhdGEoKTsKLSAgdm9pZCBBYm9ydFJlYWRzKCk7Ci0gIHZvaWQgQ29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGUoKTsKLSAgdm9pZCBTaHV0ZG93bigpOwotCi0gIC8vIFNvdXJjZUJ1ZmZlclN0cmVhbSBtYW5pcHVsYXRpb24gbWV0aG9kcy4KLSAgdm9pZCBTZWVrKGJhc2U6OlRpbWVEZWx0YSB0aW1lKTsKLSAgYm9vbCBJc1NlZWtXYWl0aW5nRm9yRGF0YSgpIGNvbnN0OwotICBiYXNlOjpUaW1lRGVsdGEgR2V0U2Vla0tleWZyYW1lVGltZXN0YW1wKCkgY29uc3Q7Ci0KLSAgLy8gQWRkIGJ1ZmZlcnMgdG8gdGhpcyBzdHJlYW0uICBCdWZmZXJzIGFyZSBzdG9yZWQgaW4gU291cmNlQnVmZmVyU3RyZWFtcywKLSAgLy8gd2hpY2ggaGFuZGxlIG9yZGVyaW5nIGFuZCBvdmVybGFwIHJlc29sdXRpb24uCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBidWZmZXJzIHdlcmUgc3VjY2Vzc2Z1bGx5IGFkZGVkLgotICBib29sIEFwcGVuZChjb25zdCBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlJiBidWZmZXJzKTsKLQotICAvLyBSZW1vdmVzIGJ1ZmZlcnMgYmV0d2VlbiB8c3RhcnR8IGFuZCB8ZW5kfCBhY2NvcmRpbmcgdG8gdGhlIHN0ZXBzCi0gIC8vIGluIHRoZSAiQ29kZWQgRnJhbWUgUmVtb3ZhbCBBbGdvcml0aG0iIGluIHRoZSBNZWRpYSBTb3VyY2UKLSAgLy8gRXh0ZW5zaW9ucyBTcGVjLgotICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjc291cmNlYnVmZmVyLWNvZGVkLWZyYW1lLXJlbW92YWwKLSAgLy8KLSAgLy8gfGR1cmF0aW9ufCBpcyB0aGUgY3VycmVudCBkdXJhdGlvbiBvZiB0aGUgcHJlc2VudGF0aW9uLiBJdCBpcwotICAvLyByZXF1aXJlZCBieSB0aGUgY29tcHV0YXRpb24gb3V0bGluZWQgaW4gdGhlIHNwZWMuCi0gIHZvaWQgUmVtb3ZlKGJhc2U6OlRpbWVEZWx0YSBzdGFydCwgYmFzZTo6VGltZURlbHRhIGVuZCwKLSAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKTsKLQotICAvLyBJZiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGF0dGVtcHRzIHRvIHRyeSB0byBmcmVlIHVwIHNwYWNlLCBhcyBzcGVjaWZpZWQgaW4KLSAgLy8gdGhlICJDb2RlZCBGcmFtZSBFdmljdGlvbiBBbGdvcml0aG0iIGluIHRoZSBNZWRpYSBTb3VyY2UgRXh0ZW5zaW9ucyBTcGVjLgotICAvLyBSZXR1cm5zIGZhbHNlIGlmZiBidWZmZXIgaXMgc3RpbGwgZnVsbCBhZnRlciBydW5uaW5nIGV2aWN0aW9uLgotICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWEtc291cmNlLyNzb3VyY2VidWZmZXItY29kZWQtZnJhbWUtZXZpY3Rpb24KLSAgYm9vbCBFdmljdENvZGVkRnJhbWVzKERlY29kZVRpbWVzdGFtcCBtZWRpYV90aW1lLCBzaXplX3QgbmV3RGF0YVNpemUpOwotCi0gIC8vIFNpZ25hbCB0byB0aGUgc3RyZWFtIHRoYXQgZHVyYXRpb24gaGFzIGNoYW5nZWQgdG8gfGR1cmF0aW9ufC4KLSAgdm9pZCBPblNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbik7Ci0KLSAgLy8gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgYnVmZmVyZWQgZGF0YSBpbiB0aGlzIHN0cmVhbSwgY2FwcGVkIGF0IHxkdXJhdGlvbnwuCi0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IEdldEJ1ZmZlcmVkUmFuZ2VzKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgaGlnaGVzdCBQVFMgb2YgdGhlIGJ1ZmZlcmVkIGRhdGEuCi0gIC8vIFJldHVybnMgYmFzZTo6VGltZURlbHRhKCkgaWYgdGhlIHN0cmVhbSBoYXMgbm8gYnVmZmVyZWQgZGF0YS4KLSAgYmFzZTo6VGltZURlbHRhIEdldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyZWQgZGF0YS4KLSAgLy8gUmV0dXJucyBiYXNlOjpUaW1lRGVsdGEoKSBpZiB0aGUgc3RyZWFtIGhhcyBubyBidWZmZXJlZCBkYXRhLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0QnVmZmVyZWREdXJhdGlvbigpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcmVkIGRhdGEgaW4gYnl0ZXMuCi0gIHNpemVfdCBHZXRCdWZmZXJlZFNpemUoKSBjb25zdDsKLQotICAvLyBTaWduYWwgdG8gdGhlIHN0cmVhbSB0aGF0IGJ1ZmZlcnMgaGFuZGVkIGluIHRocm91Z2ggc3Vic2VxdWVudCBjYWxscyB0bwotICAvLyBBcHBlbmQoKSBiZWxvbmcgdG8gYSBjb2RlZCBmcmFtZSBncm91cCB0aGF0IHN0YXJ0cyBhdCB8c3RhcnRfdGltZXN0YW1wfC4KLSAgdm9pZCBPblN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoRGVjb2RlVGltZXN0YW1wIHN0YXJ0X3RpbWVzdGFtcCk7Ci0KLSAgLy8gQ2FsbGVkIHdoZW4gbWlkc3RyZWFtIGNvbmZpZyB1cGRhdGVzIG9jY3VyLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5ldyBjb25maWcgaXMgYWNjZXB0ZWQuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIG5ldyBjb25maWcgc2hvdWxkIHRyaWdnZXIgYW4gZXJyb3IuCi0gIGJvb2wgVXBkYXRlQXVkaW9Db25maWcoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7Ci0gIGJvb2wgVXBkYXRlVmlkZW9Db25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7Ci0gIHZvaWQgVXBkYXRlVGV4dENvbmZpZyhjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotCi0gIHZvaWQgTWFya0VuZE9mU3RyZWFtKCk7Ci0gIHZvaWQgVW5tYXJrRW5kT2ZTdHJlYW0oKTsKLQotICAvLyBEZW11eGVyU3RyZWFtIG1ldGhvZHMuCi0gIHZvaWQgUmVhZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpIG92ZXJyaWRlOwotICBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZTsKLSAgTGl2ZW5lc3MgbGl2ZW5lc3MoKSBjb25zdCBvdmVycmlkZTsKLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2RlY29kZXJfY29uZmlnKCkgb3ZlcnJpZGU7Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZygpIG92ZXJyaWRlOwotICBib29sIFN1cHBvcnRzQ29uZmlnQ2hhbmdlcygpIG92ZXJyaWRlOwotICBWaWRlb1JvdGF0aW9uIHZpZGVvX3JvdGF0aW9uKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlOwotICB2b2lkIHNldF9lbmFibGVkKGJvb2wgZW5hYmxlZCwgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCkgb3ZlcnJpZGU7Ci0gIHZvaWQgU2V0U3RyZWFtU3RhdHVzQ2hhbmdlQ0IoY29uc3QgU3RyZWFtU3RhdHVzQ2hhbmdlQ0ImIGNiKSBvdmVycmlkZTsKLQotICAvLyBSZXR1cm5zIHRoZSB0ZXh0IHRyYWNrIGNvbmZpZ3VyYXRpb24uICBJdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgbWV0aG9kCi0gIC8vIGlmIHR5cGUoKSAhPSBURVhULgotICBUZXh0VHJhY2tDb25maWcgdGV4dF90cmFja19jb25maWcoKTsKLQotICAvLyBTZXRzIHRoZSBtZW1vcnkgbGltaXQsIGluIGJ5dGVzLCBvbiB0aGUgU291cmNlQnVmZmVyU3RyZWFtLgotICB2b2lkIFNldFN0cmVhbU1lbW9yeUxpbWl0KHNpemVfdCBtZW1vcnlfbGltaXQpOwotCi0gIGJvb2wgc3VwcG9ydHNfcGFydGlhbF9hcHBlbmRfd2luZG93X3RyaW1taW5nKCkgY29uc3QgewotICAgIHJldHVybiBwYXJ0aWFsX2FwcGVuZF93aW5kb3dfdHJpbW1pbmdfZW5hYmxlZF87Ci0gIH0KLQotICB2b2lkIFNldExpdmVuZXNzKExpdmVuZXNzIGxpdmVuZXNzKTsKLQotICBNZWRpYVRyYWNrOjpJZCBtZWRpYV90cmFja19pZCgpIGNvbnN0IHsgcmV0dXJuIG1lZGlhX3RyYWNrX2lkXzsgfQotCi0gcHJpdmF0ZToKLSAgZW51bSBTdGF0ZSB7Ci0gICAgVU5JTklUSUFMSVpFRCwKLSAgICBSRVRVUk5JTkdfREFUQV9GT1JfUkVBRFMsCi0gICAgUkVUVVJOSU5HX0FCT1JUX0ZPUl9SRUFEUywKLSAgICBTSFVURE9XTiwKLSAgfTsKLQotICAvLyBBc3NpZ25zIHxzdGF0ZV98IHRvIHxzdGF0ZXwKLSAgdm9pZCBDaGFuZ2VTdGF0ZV9Mb2NrZWQoU3RhdGUgc3RhdGUpOwotCi0gIHZvaWQgQ29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGVfTG9ja2VkKCk7Ci0KLSAgLy8gU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBzdHJlYW0uCi0gIFR5cGUgdHlwZV87Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcgbWltZV87Ci0KLSAgTGl2ZW5lc3MgbGl2ZW5lc3NfOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdHJlYW0+IHN0cmVhbV87Ci0KLSAgY29uc3QgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWRfOwotCi0gIG11dGFibGUgYmFzZTo6TG9jayBsb2NrXzsKLSAgU3RhdGUgc3RhdGVfOwotICBSZWFkQ0IgcmVhZF9jYl87Ci0gIGJvb2wgc3BsaWNlX2ZyYW1lc19lbmFibGVkXzsKLSAgYm9vbCBwYXJ0aWFsX2FwcGVuZF93aW5kb3dfdHJpbW1pbmdfZW5hYmxlZF87Ci0gIGJvb2wgaXNfZW5hYmxlZF87Ci0gIFN0cmVhbVN0YXR1c0NoYW5nZUNCIHN0cmVhbV9zdGF0dXNfY2hhbmdlX2NiXzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoQ2h1bmtEZW11eGVyU3RyZWFtKTsKLX07Ci0KLS8vIERlbXV4ZXIgaW1wbGVtZW50YXRpb24gdGhhdCBhbGxvd3MgY2h1bmtzIG9mIG1lZGlhIGRhdGEgdG8gYmUgcGFzc2VkCi0vLyBmcm9tIEphdmFTY3JpcHQgdG8gdGhlIG1lZGlhIHN0YWNrLgotY2xhc3MgTUVESUFfRVhQT1JUIENodW5rRGVtdXhlciA6IHB1YmxpYyBEZW11eGVyIHsKLSBwdWJsaWM6Ci0gIGVudW0gU3RhdHVzIHsKLSAgICBrT2ssICAgICAgICAgICAgICAvLyBJRCBhZGRlZCB3L28gZXJyb3IuCi0gICAga05vdFN1cHBvcnRlZCwgICAgLy8gVHlwZSBzcGVjaWZpZWQgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBrUmVhY2hlZElkTGltaXQsICAvLyBSZWFjaGVkIElEIGxpbWl0LiBXZSBjYW4ndCBoYW5kbGUgYW55IG1vcmUgSURzLgotICB9OwotCi0gIC8vIHxvcGVuX2NifCBSdW4gd2hlbiBJbml0aWFsaXplKCkgaXMgY2FsbGVkIHRvIHNpZ25hbCB0aGF0IHRoZSBkZW11eGVyCi0gIC8vICAgaXMgcmVhZHkgdG8gcmVjZWl2ZSBtZWRpYSBkYXRhIHZpYSBBcHBlbkRhdGEoKS4KLSAgLy8gfGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2J8IFJ1biB3aGVuIHRoZSBkZW11eGVyIGRldGVybWluZXMgdGhhdCBhbgotICAvLyAgIGVuY3J5cHRpb24ga2V5IGlzIG5lZWRlZCB0byBkZWNyeXB0IHRoZSBjb250ZW50LgotICAvLyB8bWVkaWFfbG9nfCBVc2VkIHRvIHJlcG9ydCBjb250ZW50IGFuZCBlbmdpbmUgZGVidWcgbWVzc2FnZXMuCi0gIC8vIHxzcGxpY2VfZnJhbWVzX2VuYWJsZWR8IEluZGljYXRlcyB0aGF0IGl0J3Mgb2theSB0byBnZW5lcmF0ZSBzcGxpY2UgZnJhbWVzCi0gIC8vICAgcGVyIHRoZSBNU0Ugc3BlY2lmaWNhdGlvbi4gIFJlbmRlcmVycyBtdXN0IHVuZGVyc3RhbmQgRGVjb2RlckJ1ZmZlcidzCi0gIC8vICAgc3BsaWNlX3RpbWVzdGFtcCgpIGZpZWxkLgotICBDaHVua0RlbXV4ZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6Q2xvc3VyZSYgb3Blbl9jYiwKLSAgICAgICAgICAgICAgIGNvbnN0IEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQiYgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYiwKLSAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCk7Ci0gIH5DaHVua0RlbXV4ZXIoKSBvdmVycmlkZTsKLQotICAvLyBEZW11eGVyIGltcGxlbWVudGF0aW9uLgotICBzdGQ6OnN0cmluZyBHZXREaXNwbGF5TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gIC8vIHxlbmFibGVfdGV4dHwgUHJvY2VzcyBpbmJhbmQgdGV4dCB0cmFja3MgaW4gdGhlIG5vcm1hbCB3YXkgd2hlbiB0cnVlLAotICAvLyAgIG90aGVyd2lzZSBpZ25vcmUgdGhlbS4KLSAgdm9pZCBJbml0aWFsaXplKERlbXV4ZXJIb3N0KiBob3N0LCBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBpbml0X2NiLAotICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVfdGV4dF90cmFja3MpIG92ZXJyaWRlOwotICB2b2lkIFN0b3AoKSBvdmVycmlkZTsKLSAgdm9pZCBTZWVrKGJhc2U6OlRpbWVEZWx0YSB0aW1lLCBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBjYikgb3ZlcnJpZGU7Ci0gIGJhc2U6OlRpbWUgR2V0VGltZWxpbmVPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKLSAgRGVtdXhlclN0cmVhbSogR2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgb3ZlcnJpZGU7Ci0gIGJhc2U6OlRpbWVEZWx0YSBHZXRTdGFydFRpbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgaW50NjRfdCBHZXRNZW1vcnlVc2FnZSgpIGNvbnN0IG92ZXJyaWRlOwotICB2b2lkIEFib3J0UGVuZGluZ1JlYWRzKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gQ2h1bmtEZW11eGVyIHJlYWRzIGFyZSBhYm9ydGFibGUuIFN0YXJ0V2FpdGluZ0ZvclNlZWsoKSBhbmQKLSAgLy8gQ2FuY2VsUGVuZGluZ1NlZWsoKSBhbHdheXMgYWJvcnQgcGVuZGluZyBhbmQgZnV0dXJlIHJlYWRzIHVudGlsIHRoZQotICAvLyBleHBlY3RlZCBzZWVrIG9jY3Vycywgc28gdGhhdCBDaHVua0RlbXV4ZXIgY2FuIHN0YXkgc3luY2hyb25pemVkIHdpdGggdGhlCi0gIC8vIGFzc29jaWF0ZWQgSlMgbWV0aG9kIGNhbGxzLgotICB2b2lkIFN0YXJ0V2FpdGluZ0ZvclNlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgQ2FuY2VsUGVuZGluZ1NlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgb3ZlcnJpZGU7Ci0KLSAgLy8gUmVnaXN0ZXJzIGEgbmV3IHxpZHwgdG8gdXNlIGZvciBBcHBlbmREYXRhKCkgY2FsbHMuIHxtaW1lfCBpbmRpY2F0ZXMKLSAgLy8gdGhlIE1JTUUgdHlwZSBmb3IgdGhlIGRhdGEgdGhhdCB3ZSBpbnRlbmQgdG8gYXBwZW5kIGZvciB0aGlzIElELgotICAvLyBrT2sgaXMgcmV0dXJuZWQgaWYgdGhlIGRlbXV4ZXIgaGFzIGVub3VnaCByZXNvdXJjZXMgdG8gc3VwcG9ydCBhbm90aGVyIElECi0gIC8vICAgIGFuZCBzdXBwb3J0cyB0aGUgZm9ybWF0IGluZGljYXRlZCBieSB8dHlwZXwuCi0gIC8vIGtOb3RTdXBwb3J0ZWQgaXMgcmV0dXJuZWQgaWYgfHR5cGV8IGlzIG5vdCBhIHN1cHBvcnRlZCBmb3JtYXQuCi0gIC8vIGtSZWFjaGVkSWRMaW1pdCBpcyByZXR1cm5lZCBpZiB0aGUgZGVtdXhlciBjYW5ub3QgaGFuZGxlIGFub3RoZXIgSUQgcmlnaHQKLSAgLy8gICAgbm93LgotICBTdGF0dXMgQWRkSWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZSk7Ci0KLSAgLy8gTm90aWZpZXMgYSBjYWxsZXIgdmlhIHx0cmFja3NfdXBkYXRlZF9jYnwgdGhhdCB0aGUgc2V0IG9mIG1lZGlhIHRyYWNrcwotICAvLyBmb3IgYSBnaXZlbiB8aWR8IGhhcyBjaGFuZ2VkLgotICB2b2lkIFNldFRyYWNrc1dhdGNoZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWVkaWFUcmFja3NVcGRhdGVkQ0ImIHRyYWNrc191cGRhdGVkX2NiKTsKLQotICAvLyBSZW1vdmVkIGFuIElEICYgYXNzb2NpYXRlZCByZXNvdXJjZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgYWRkZWQgd2l0aAotICAvLyBBZGRJZCgpLgotICB2b2lkIFJlbW92ZUlkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7Ci0KLSAgLy8gR2V0cyB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHJhbmdlcyBmb3IgdGhlIHNwZWNpZmllZCBJRC4KLSAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gR2V0QnVmZmVyZWRSYW5nZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKSBjb25zdDsKLQotICAvLyBHZXRzIHRoZSBoaWdoZXN0IGJ1ZmZlcmVkIFBUUyBmb3IgdGhlIHNwZWNpZmllZCB8aWR8LiBJZiB0aGVyZSBpcyBub3RoaW5nCi0gIC8vIGJ1ZmZlcmVkLCByZXR1cm5zIGJhc2U6OlRpbWVEZWx0YSgpLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcChjb25zdCBzdGQ6OnN0cmluZyYgaWQpIGNvbnN0OwotCi0gIHZvaWQgT25FbmFibGVkQXVkaW9UcmFja3NDaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYgdHJhY2tfaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgY3VyclRpbWUpIG92ZXJyaWRlOwotICAvLyB8dHJhY2tfaWRzfCBpcyBlaXRoZXIgZW1wdHkgb3IgY29udGFpbnMgYSBzaW5nbGUgdmlkZW8gdHJhY2sgaWQuCi0gIHZvaWQgT25TZWxlY3RlZFZpZGVvVHJhY2tDaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYgdHJhY2tfaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgY3VyclRpbWUpIG92ZXJyaWRlOwotCi0gIC8vIEFwcGVuZHMgbWVkaWEgZGF0YSB0byB0aGUgc291cmNlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggfGlkfCwgYXBwbHlpbmcKLSAgLy8gYW5kIHBvc3NpYmx5IHVwZGF0aW5nIHwqdGltZXN0YW1wX29mZnNldHwgZHVyaW5nIGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcuCi0gIC8vIHxhcHBlbmRfd2luZG93X3N0YXJ0fCBhbmQgfGFwcGVuZF93aW5kb3dfZW5kfCBjb3JyZXNwb25kIHRvIHRoZSBNU0Ugc3BlYydzCi0gIC8vIHNpbWlsYXJseSBuYW1lZCBzb3VyY2UgYnVmZmVyIGF0dHJpYnV0ZXMgdGhhdCBhcmUgdXNlZCBpbiBjb2RlZCBmcmFtZQotICAvLyBwcm9jZXNzaW5nLiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgdGhlIGNhbGxlciBuZWVkcyB0byBydW4gdGhlCi0gIC8vIGFwcGVuZCBlcnJvciBhbGdvcml0aG0gd2l0aCBkZWNvZGUgZXJyb3IgcGFyYW1ldGVyIHNldCB0byB0cnVlLgotICBib29sIEFwcGVuZERhdGEoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnQsCi0gICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmQsCi0gICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIEFib3J0cyBwYXJzaW5nIHRoZSBjdXJyZW50IHNlZ21lbnQgYW5kIHJlc2V0IHRoZSBwYXJzZXIgdG8gYSBzdGF0ZSB3aGVyZQotICAvLyBpdCBjYW4gYWNjZXB0IGEgbmV3IHNlZ21lbnQuCi0gIC8vIFNvbWUgcGVuZGluZyBmcmFtZXMgY2FuIGJlIGVtaXR0ZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy4gVGhlc2UgZnJhbWVzIGFyZQotICAvLyBhcHBsaWVkIHx0aW1lc3RhbXBfb2Zmc2V0fC4KLSAgdm9pZCBSZXNldFBhcnNlclN0YXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBhcHBlbmRfd2luZG93X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKiB0aW1lc3RhbXBfb2Zmc2V0KTsKLQotICAvLyBSZW1vdmUgYnVmZmVycyBiZXR3ZWVuIHxzdGFydHwgYW5kIHxlbmR8IGZvciB0aGUgc291cmNlIGJ1ZmZlcgotICAvLyBhc3NvY2lhdGVkIHdpdGggfGlkfC4KLSAgdm9pZCBSZW1vdmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBiYXNlOjpUaW1lRGVsdGEgc3RhcnQsCi0gICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBlbmQpOwotCi0gIC8vIElmIHRoZSBidWZmZXIgaXMgZnVsbCwgYXR0ZW1wdHMgdG8gdHJ5IHRvIGZyZWUgdXAgc3BhY2UsIGFzIHNwZWNpZmllZCBpbgotICAvLyB0aGUgIkNvZGVkIEZyYW1lIEV2aWN0aW9uIEFsZ29yaXRobSIgaW4gdGhlIE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zIFNwZWMuCi0gIC8vIFJldHVybnMgZmFsc2UgaWZmIGJ1ZmZlciBpcyBzdGlsbCBmdWxsIGFmdGVyIHJ1bm5pbmcgZXZpY3Rpb24uCi0gIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1ldmljdGlvbgotICBib29sIEV2aWN0Q29kZWRGcmFtZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBiYXNlOjpUaW1lRGVsdGEgY3VycmVudE1lZGlhVGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdEYXRhU2l6ZSk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBwcmVzZW50YXRpb24gZHVyYXRpb24uCi0gIGRvdWJsZSBHZXREdXJhdGlvbigpOwotICBkb3VibGUgR2V0RHVyYXRpb25fTG9ja2VkKCk7Ci0KLSAgLy8gTm90aWZpZXMgdGhlIGRlbXV4ZXIgdGhhdCB0aGUgZHVyYXRpb24gb2YgdGhlIG1lZGlhIGhhcyBjaGFuZ2VkIHRvCi0gIC8vIHxkdXJhdGlvbnwuCi0gIHZvaWQgU2V0RHVyYXRpb24oZG91YmxlIGR1cmF0aW9uKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNvdXJjZSBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHxpZHwgaXMgY3VycmVudGx5IHBhcnNpbmcKLSAgLy8gYSBtZWRpYSBzZWdtZW50LCBvciBmYWxzZSBvdGhlcndpc2UuCi0gIGJvb2wgSXNQYXJzaW5nTWVkaWFTZWdtZW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCk7Ci0KLSAgLy8gU2V0IHRoZSBhcHBlbmQgbW9kZSB0byBiZSBhcHBsaWVkIHRvIHN1YnNlcXVlbnQgYnVmZmVycyBhcHBlbmRlZCB0byB0aGUKLSAgLy8gc291cmNlIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggfGlkfC4gSWYgfHNlcXVlbmNlX21vZGV8IGlzIHRydWUsIGNhbGxlcgotICAvLyBpcyByZXF1ZXN0aW5nICJzZXF1ZW5jZSIgbW9kZS4gT3RoZXJ3aXNlLCBjYWxsZXIgaXMgcmVxdWVzdGluZyAic2VnbWVudHMiCi0gIC8vIG1vZGUuCi0gIHZvaWQgU2V0U2VxdWVuY2VNb2RlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgYm9vbCBzZXF1ZW5jZV9tb2RlKTsKLQotICAvLyBTaWduYWxzIHRoZSBjb2RlZCBmcmFtZSBwcm9jZXNzb3IgZm9yIHRoZSBzb3VyY2UgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aAotICAvLyB8aWR8IHRvIHVwZGF0ZSBpdHMgZ3JvdXAgc3RhcnQgdGltZXN0YW1wIHRvIGJlIHx0aW1lc3RhbXBfb2Zmc2V0fCBpZiBpdCBpcwotICAvLyBpbiBzZXF1ZW5jZSBhcHBlbmQgbW9kZS4KLSAgdm9pZCBTZXRHcm91cFN0YXJ0VGltZXN0YW1wSWZJblNlcXVlbmNlTW9kZShjb25zdCBzdGQ6OnN0cmluZyYgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIENhbGxlZCB0byBzaWduYWwgY2hhbmdlcyBpbiB0aGUgImVuZCBvZiBzdHJlYW0iCi0gIC8vIHN0YXRlLiBVbm1hcmtFbmRPZlN0cmVhbSgpIG11c3Qgbm90IGJlIGNhbGxlZCBpZiBhIG1hdGNoaW5nCi0gIC8vIE1hcmtFbmRPZlN0cmVhbSgpIGhhcyBub3QgY29tZSBiZWZvcmUgaXQuCi0gIHZvaWQgTWFya0VuZE9mU3RyZWFtKFBpcGVsaW5lU3RhdHVzIHN0YXR1cyk7Ci0gIHZvaWQgVW5tYXJrRW5kT2ZTdHJlYW0oKTsKLQotICB2b2lkIFNodXRkb3duKCk7Ci0KLSAgLy8gU2V0cyB0aGUgbWVtb3J5IGxpbWl0IG9uIGVhY2ggc3RyZWFtIG9mIGEgc3BlY2lmaWMgdHlwZS4KLSAgLy8gfG1lbW9yeV9saW1pdHwgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGVhY2ggc3RyZWFtIG9mIHR5cGUgfHR5cGV8Ci0gIC8vIGlzIGFsbG93ZWQgdG8gaG9sZCBpbiBpdHMgYnVmZmVyLgotICB2b2lkIFNldE1lbW9yeUxpbWl0c0ZvclRlc3QoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlLCBzaXplX3QgbWVtb3J5X2xpbWl0KTsKLQotICAvLyBSZXR1cm5zIHRoZSByYW5nZXMgcmVwcmVzZW50aW5nIHRoZSBidWZmZXJlZCBkYXRhIGluIHRoZSBkZW11eGVyLgotICAvLyBUT0RPKHdvbGVuZXR6KTogUmVtb3ZlIHRoaXMgbWV0aG9kIG9uY2UgTWVkaWFTb3VyY2VEZWxlZ2F0ZSBubyBsb25nZXIKLSAgLy8gcmVxdWlyZXMgaXQgZm9yIGRvaW5nIGhhY2sgYnJvd3NlciBzZWVrcyB0byBJLWZyYW1lIG9uIEFuZHJvaWQuIFNlZQotICAvLyBodHRwOi8vY3JidWcuY29tLzMwNDIzNC4KLSAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gR2V0QnVmZmVyZWRSYW5nZXMoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGVudW0gU3RhdGUgewotICAgIFdBSVRJTkdfRk9SX0lOSVQsCi0gICAgSU5JVElBTElaSU5HLAotICAgIElOSVRJQUxJWkVELAotICAgIEVOREVELAotICAgIFBBUlNFX0VSUk9SLAotICAgIFNIVVRET1dOLAotICB9OwotCi0gIHZvaWQgQ2hhbmdlU3RhdGVfTG9ja2VkKFN0YXRlIG5ld19zdGF0ZSk7Ci0KLSAgLy8gUmVwb3J0cyBhbiBlcnJvciBhbmQgcHV0cyB0aGUgZGVtdXhlciBpbiBhIHN0YXRlIHdoZXJlIGl0IHdvbid0IGFjY2VwdCBtb3JlCi0gIC8vIGRhdGEuCi0gIHZvaWQgUmVwb3J0RXJyb3JfTG9ja2VkKFBpcGVsaW5lU3RhdHVzIGVycm9yKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IHN0cmVhbSBoYXMgc2Vla2VkIHRvIGEgdGltZSB3aXRob3V0IGJ1ZmZlcmVkIGRhdGEuCi0gIGJvb2wgSXNTZWVrV2FpdGluZ0ZvckRhdGFfTG9ja2VkKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBzdHJlYW1zIGNhbiBzdWNjZXNzZnVsbHkgY2FsbCBFbmRPZlN0cmVhbSwKLSAgLy8gZmFsc2UgaWYgYW55IGNhbiBub3QuCi0gIGJvb2wgQ2FuRW5kT2ZTdHJlYW1fTG9ja2VkKCkgY29uc3Q7Ci0KLSAgLy8gU291cmNlQnVmZmVyU3RhdGUgY2FsbGJhY2tzLgotICB2b2lkIE9uU291cmNlSW5pdERvbmUoY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMmIHBhcmFtcyk7Ci0KLSAgLy8gQ3JlYXRlcyBhIERlbXV4ZXJTdHJlYW0gb2YgdGhlIHNwZWNpZmllZCB8dHlwZXwgZm9yIHRoZSBTb3VyY2VCdWZmZXJTdGF0ZQotICAvLyB3aXRoIHRoZSBnaXZlbiB8c291cmNlX2lkfC4KLSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgQ2h1bmtEZW11eGVyU3RyZWFtIGluc3RhbmNlLCB3aGljaCBpcyBvd25lZCBieQotICAvLyBDaHVua0RlbXV4ZXIuCi0gIENodW5rRGVtdXhlclN0cmVhbSogQ3JlYXRlRGVtdXhlclN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpOwotCi0gIHZvaWQgT25OZXdUZXh0VHJhY2soQ2h1bmtEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZyk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxzb3VyY2VfaWR8IGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCi0gIGJvb2wgSXNWYWxpZElkKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQpIGNvbnN0OwotCi0gIC8vIEluY3JlYXNlcyB8ZHVyYXRpb25ffCB0byB8bmV3X2R1cmF0aW9ufCwgaWYgfG5ld19kdXJhdGlvbnwgaXMgaGlnaGVyLgotICB2b2lkIEluY3JlYXNlRHVyYXRpb25JZk5lY2Vzc2FyeShiYXNlOjpUaW1lRGVsdGEgbmV3X2R1cmF0aW9uKTsKLQotICAvLyBEZWNyZWFzZXMgfGR1cmF0aW9uX3wgaWYgdGhlIGJ1ZmZlcmVkIHJlZ2lvbiBpcyBsZXNzIHRoYW4gfGR1cmF0aW9uX3wgd2hlbgotICAvLyBFbmRPZlN0cmVhbSgpIGlzIGNhbGxlZC4KLSAgdm9pZCBEZWNyZWFzZUR1cmF0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAvLyBTZXRzIHxkdXJhdGlvbl98IHRvIHxuZXdfZHVyYXRpb258LCBzZXRzIHx1c2VyX3NwZWNpZmllZF9kdXJhdGlvbl98IHRvIC0xCi0gIC8vIGFuZCBub3RpZmllcyB8aG9zdF98LgotICB2b2lkIFVwZGF0ZUR1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBuZXdfZHVyYXRpb24pOwotCi0gIC8vIFJldHVybnMgdGhlIHJhbmdlcyByZXByZXNlbnRpbmcgdGhlIGJ1ZmZlcmVkIGRhdGEgaW4gdGhlIGRlbXV4ZXIuCi0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IEdldEJ1ZmZlcmVkUmFuZ2VzX0xvY2tlZCgpIGNvbnN0OwotCi0gIC8vIFN0YXJ0IHJldHVybmluZyBkYXRhIG9uIGFsbCBEZW11eGVyU3RyZWFtcy4KLSAgdm9pZCBTdGFydFJldHVybmluZ0RhdGEoKTsKLQotICB2b2lkIEFib3J0UGVuZGluZ1JlYWRzX0xvY2tlZCgpOwotCi0gIC8vIENvbXBsZXRlcyBhbnkgcGVuZGluZyByZWFkcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBkbyBzby4KLSAgdm9pZCBDb21wbGV0ZVBlbmRpbmdSZWFkc0lmUG9zc2libGUoKTsKLQotICAvLyBTZWVrcyBhbGwgU291cmNlQnVmZmVyU3RyZWFtcyB0byB8c2Vla190aW1lfC4KLSAgdm9pZCBTZWVrQWxsU291cmNlcyhiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lKTsKLQotICAvLyBBZGp1c3QgdGhlIHByZXZpb3VzIHNlZWsgb24gYXVkaW8gU291cmNlQnVmZmVyU3RyZWFtIHRvIG1ha2UgaXQgbW9yZQotICAvLyBjb25mb3JtIHRvIHRoZSB0aW1lIG9mIHRoZSBmaXJzdCBrZXlmcmFtZSBvZiB0aGUgdmlkZW8gc3RyZWFtIGJlZm9yZSB0aGUKLSAgLy8gc2VlayB0aW1lLiAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgYXVkaW8gYW5kIG9uZQotICAvLyB2aWRlbyBzdHJlYW0gaW4gdGhlIHZpZGVvLgotICB2b2lkIEFkanVzdFNlZWtPbkF1ZGlvU291cmNlKCk7Ci0KLSAgLy8gR2VuZXJhdGVzIGFuZCByZXR1cm5zIGEgdW5pcXVlIG1lZGlhIHRyYWNrIGlkLgotICBzdGF0aWMgTWVkaWFUcmFjazo6SWQgR2VuZXJhdGVNZWRpYVRyYWNrSWQoKTsKLQotICAvLyBTaHV0cyBkb3duIGFsbCBEZW11eGVyU3RyZWFtcyBieSBjYWxsaW5nIFNodXRkb3duKCkgb24KLSAgLy8gYWxsIG9iamVjdHMgaW4gfHNvdXJjZV9zdGF0ZV9tYXBffC4KLSAgdm9pZCBTaHV0ZG93bkFsbFN0cmVhbXMoKTsKLQotICBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3JfOwotICBtdXRhYmxlIGJhc2U6OkxvY2sgbG9ja187Ci0gIFN0YXRlIHN0YXRlXzsKLSAgYm9vbCBjYW5jZWxfbmV4dF9zZWVrXzsKLQotICBEZW11eGVySG9zdCogaG9zdF87Ci0gIGJhc2U6OkNsb3N1cmUgb3Blbl9jYl87Ci0gIEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiXzsKLSAgYm9vbCBlbmFibGVfdGV4dF87Ci0KLSAgLy8gTWVkaWFMb2cgZm9yIHJlcG9ydGluZyBtZXNzYWdlcyBhbmQgcHJvcGVydGllcyB0byBkZWJ1ZyBjb250ZW50IGFuZCBlbmdpbmUuCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgUGlwZWxpbmVTdGF0dXNDQiBpbml0X2NiXzsKLSAgLy8gQ2FsbGJhY2sgdG8gZXhlY3V0ZSB1cG9uIHNlZWsgY29tcGxldGlvbi4KLSAgLy8gVE9ETyh3b2xlbmV0ei9hY29sd2VsbCk6IFByb3RlY3QgYWdhaW5zdCBwb3NzaWJsZSBkb3VibGUtbG9ja2luZyBieSBmaXJzdAotICAvLyByZWxlYXNpbmcgfGxvY2tffCBiZWZvcmUgZXhlY3V0aW5nIHRoaXMgY2FsbGJhY2suIFNlZQotICAvLyBodHRwOi8vY3JidWcuY29tLzMwODIyNgotICBQaXBlbGluZVN0YXR1c0NCIHNlZWtfY2JfOwotCi0gIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENodW5rRGVtdXhlclN0cmVhbT4+Ci0gICAgICBPd25lZENodW5rRGVtdXhlclN0cmVhbVZlY3RvcjsKLSAgT3duZWRDaHVua0RlbXV4ZXJTdHJlYW1WZWN0b3IgYXVkaW9fc3RyZWFtc187Ci0gIE93bmVkQ2h1bmtEZW11eGVyU3RyZWFtVmVjdG9yIHZpZGVvX3N0cmVhbXNfOwotICBPd25lZENodW5rRGVtdXhlclN0cmVhbVZlY3RvciB0ZXh0X3N0cmVhbXNfOwotCi0gIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggaWRzIHN0aWxsIHJlbWFpbiB1bmluaXRpYWxpemVkIHNvIHRoYXQgd2UgdHJhbnNpdGlvbgotICAvLyBpbnRvIHRoZSBJTklUSUFMSVpFRCBvbmx5IGFmdGVyIGFsbCBpZHMvU291cmNlQnVmZmVycyBnb3QgaW5pdCBzZWdtZW50LgotICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gcGVuZGluZ19zb3VyY2VfaW5pdF9pZHNfOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbl87Ci0KLSAgLy8gVGhlIGR1cmF0aW9uIHBhc3NlZCB0byB0aGUgbGFzdCBTZXREdXJhdGlvbigpLiBJZgotICAvLyBTZXREdXJhdGlvbigpIGlzIG5ldmVyIGNhbGxlZCBvciBhbiBBcHBlbmREYXRhKCkgY2FsbCBvcgotICAvLyBhIEVuZE9mU3RyZWFtKCkgY2FsbCBjaGFuZ2VzIHxkdXJhdGlvbl98LCB0aGVuIHRoaXMKLSAgLy8gdmFyaWFibGUgaXMgc2V0IHRvIDwgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB8ZHVyYXRpb25ffCByZXByZXNlbnRzCi0gIC8vIHRoZSBhY3R1YWwgZHVyYXRpb24gaW5zdGVhZCBvZiBhIHVzZXIgc3BlY2lmaWVkIHZhbHVlLgotICBkb3VibGUgdXNlcl9zcGVjaWZpZWRfZHVyYXRpb25fOwotCi0gIGJhc2U6OlRpbWUgdGltZWxpbmVfb2Zmc2V0XzsKLSAgRGVtdXhlclN0cmVhbTo6TGl2ZW5lc3MgbGl2ZW5lc3NfOwotCi0gIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFNvdXJjZUJ1ZmZlclN0YXRlKj4gU291cmNlQnVmZmVyU3RhdGVNYXA7Ci0gIFNvdXJjZUJ1ZmZlclN0YXRlTWFwIHNvdXJjZV9zdGF0ZV9tYXBfOwotCi0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxDaHVua0RlbXV4ZXJTdHJlYW0qPj4gaWRfdG9fc3RyZWFtc19tYXBfOwotICAvLyBVc2VkIHRvIGhvbGQgYWxpdmUgdGhlIGRlbXV4ZXIgc3RyZWFtcyB0aGF0IHdlcmUgY3JlYXRlZCBmb3IgcmVtb3ZlZCAvCi0gIC8vIHJlbGVhc2VkIFNvdXJjZUJ1ZmZlclN0YXRlIG9iamVjdHMuIERlbXV4ZXIgY2xpZW50cyBtaWdodCBzdGlsbCBoYXZlCi0gIC8vIHJlZmVyZW5jZXMgdG8gdGhlc2Ugc3RyZWFtcywgc28gd2UgbmVlZCB0byBrZWVwIHRoZW0gYWxpdmUuIEJ1dCB0aGV5J2xsIGJlCi0gIC8vIGluIGEgc2h1dCBkb3duIHN0YXRlLCBzbyByZWFkaW5nIGZyb20gdGhlbSB3aWxsIHJldHVybiBFT1MuCi0gIE93bmVkQ2h1bmtEZW11eGVyU3RyZWFtVmVjdG9yIHJlbW92ZWRfc3RyZWFtc187Ci0KLSAgLy8gSW5kaWNhdGVzIHRoYXQgc3BsaWNlIGZyYW1lIGdlbmVyYXRpb24gaXMgZW5hYmxlZC4KLSAgY29uc3QgYm9vbCBzcGxpY2VfZnJhbWVzX2VuYWJsZWRfOwotCi0gIC8vIEFjY3VtdWxhdGUsIGJ5IHR5cGUsIGRldGVjdGVkIHRyYWNrIGNvdW50cyBhY3Jvc3MgdGhlIFNvdXJjZUJ1ZmZlcnMuCi0gIGludCBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudF87Ci0gIGludCBkZXRlY3RlZF92aWRlb190cmFja19jb3VudF87Ci0gIGludCBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50XzsKLQotICBzdGQ6Om1hcDxNZWRpYVRyYWNrOjpJZCwgRGVtdXhlclN0cmVhbSo+IHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDaHVua0RlbXV4ZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfQ0hVTktfREVNVVhFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYzViNjcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ2MDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cXVldWU+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgotI2luY2x1ZGUgImJhc2UvcnVuX2xvb3AuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfc3BsaXQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19kZW11eGVyX2hvc3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9oZWxwZXJzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9tZWRpYV9mZWF0dXJlcy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6OkFueU51bWJlcjsKLXVzaW5nIDo6dGVzdGluZzo6RXhhY3RseTsKLXVzaW5nIDo6dGVzdGluZzo6SW5TZXF1ZW5jZTsKLXVzaW5nIDo6dGVzdGluZzo6Tm90TnVsbDsKLXVzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwotdXNpbmcgOjp0ZXN0aW5nOjpTYXZlQXJnOwotdXNpbmcgOjp0ZXN0aW5nOjpTZXRBcmd1bWVudFBvaW50ZWU7Ci11c2luZyA6OnRlc3Rpbmc6OlN0cmljdE1vY2s7Ci11c2luZyA6OnRlc3Rpbmc6Ol87Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgdWludDhfdCBrVHJhY2tzSGVhZGVyW10gPSB7Ci0gICAgMHgxNiwgMHg1NCwgMHhBRSwgMHg2QiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYWNrcyBJRAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyB0cmFja3Moc2l6ZSA9IDApCi19OwotCi0vLyBXZWJNIEJsb2NrIGJ5dGVzIHRoYXQgcmVwcmVzZW50IGEgVlA4IGtleSBmcmFtZS4KLWNvbnN0IHVpbnQ4X3Qga1ZQOEtleWZyYW1lW10gPSB7MHgwMTAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsICAweDEwLCAweDAwLCAweDEwLCAweDAwfTsKLQotLy8gV2ViTSBCbG9jayBieXRlcyB0aGF0IHJlcHJlc2VudCBhIFZQOCBpbnRlcmZyYW1lLgotY29uc3QgdWludDhfdCBrVlA4SW50ZXJmcmFtZVtdID0gezB4MTEsIDB4MDAsIDB4MDB9OwotCi1jb25zdCB1aW50OF90IGtDdWVzSGVhZGVyW10gPSB7Ci0gICAgMHgxQywgMHg1MywgMHhCQiwgMHg2QiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1ZXMgSUQKLSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgLy8gY3VlcyhzaXplID0gMCkKLX07Ci0KLWNvbnN0IHVpbnQ4X3Qga0VuY3J5cHRlZE1lZGlhSW5pdERhdGFbXSA9IHsKLSAgICAweDY4LCAweEZFLCAweEY5LCAweEExLCAweEIzLCAweDBELCAweDZCLCAweDRELAotICAgIDB4RjIsIDB4MjIsIDB4QjUsIDB4MEIsIDB4NEQsIDB4RTksIDB4RTksIDB4OTUsCi19OwotCi1jb25zdCBpbnQga1RyYWNrc0hlYWRlclNpemUgPSBzaXplb2Yoa1RyYWNrc0hlYWRlcik7Ci1jb25zdCBpbnQga1RyYWNrc1NpemVPZmZzZXQgPSA0OwotCi0vLyBUaGUgc2l6ZSBvZiBUcmFja0VudHJ5IGVsZW1lbnQgaW4gdGVzdCBmaWxlICJ3ZWJtX3ZvcmJpc190cmFja19lbnRyeSIgc3RhcnRzCi0vLyBhdCBpbmRleCAxIGFuZCBzcGFucyA4IGJ5dGVzLgotY29uc3QgaW50IGtBdWRpb1RyYWNrU2l6ZU9mZnNldCA9IDE7Ci1jb25zdCBpbnQga0F1ZGlvVHJhY2tTaXplV2lkdGggPSA4OwotY29uc3QgaW50IGtBdWRpb1RyYWNrRW50cnlIZWFkZXJTaXplID0KLSAgICBrQXVkaW9UcmFja1NpemVPZmZzZXQgKyBrQXVkaW9UcmFja1NpemVXaWR0aDsKLQotLy8gVGhlIHNpemUgb2YgVHJhY2tFbnRyeSBlbGVtZW50IGluIHRlc3QgZmlsZSAid2VibV92cDhfdHJhY2tfZW50cnkiIHN0YXJ0cyBhdAotLy8gaW5kZXggMSBhbmQgc3BhbnMgOCBieXRlcy4KLWNvbnN0IGludCBrVmlkZW9UcmFja1NpemVPZmZzZXQgPSAxOwotY29uc3QgaW50IGtWaWRlb1RyYWNrU2l6ZVdpZHRoID0gODsKLWNvbnN0IGludCBrVmlkZW9UcmFja0VudHJ5SGVhZGVyU2l6ZSA9Ci0gICAga1ZpZGVvVHJhY2tTaXplT2Zmc2V0ICsga1ZpZGVvVHJhY2tTaXplV2lkdGg7Ci0KLWNvbnN0IGludCBrVmlkZW9UcmFja051bSA9IDE7Ci1jb25zdCBpbnQga0F1ZGlvVHJhY2tOdW0gPSAyOwotY29uc3QgaW50IGtUZXh0VHJhY2tOdW0gPSAzOwotY29uc3QgaW50IGtBbHRlcm5hdGVWaWRlb1RyYWNrTnVtID0gNDsKLWNvbnN0IGludCBrQWx0ZXJuYXRlQXVkaW9UcmFja051bSA9IDU7Ci1jb25zdCBpbnQga0FsdGVybmF0ZVRleHRUcmFja051bSA9IDY7Ci0KLWNvbnN0IGludCBrQXVkaW9CbG9ja0R1cmF0aW9uID0gMjM7Ci1jb25zdCBpbnQga1ZpZGVvQmxvY2tEdXJhdGlvbiA9IDMzOwotY29uc3QgaW50IGtUZXh0QmxvY2tEdXJhdGlvbiA9IDEwMDsKLWNvbnN0IGludCBrQmxvY2tTaXplID0gMTA7Ci0KLWNvbnN0IGNoYXIga1NvdXJjZUlkW10gPSAiU291cmNlSWQiOwotY29uc3QgY2hhciBrRGVmYXVsdEZpcnN0Q2x1c3RlclJhbmdlW10gPSAieyBbMCw0NikgfSI7Ci1jb25zdCBpbnQga0RlZmF1bHRGaXJzdENsdXN0ZXJFbmRUaW1lc3RhbXAgPSA2NjsKLWNvbnN0IGludCBrRGVmYXVsdFNlY29uZENsdXN0ZXJFbmRUaW1lc3RhbXAgPSAxMzI7Ci0KLWJhc2U6OlRpbWVEZWx0YSBrRGVmYXVsdER1cmF0aW9uKCkgewotICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIwMTIyNCk7Ci19Ci0KLS8vIFdyaXRlIGFuIGludGVnZXIgaW50byBidWZmZXIgaW4gdGhlIGZvcm0gb2YgdmludCB0aGF0IHNwYW5zIDggYnl0ZXMuCi0vLyBUaGUgZGF0YSBwb2ludGVkIGJ5IHxidWZmZXJ8IHNob3VsZCBiZSBhdCBsZWFzdCA4IGJ5dGVzIGxvbmcuCi0vLyB8bnVtYmVyfCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDAgPD0gbnVtYmVyIDwgMHgwMEZGRkZGRkZGRkZGRkZGLgotc3RhdGljIHZvaWQgV3JpdGVJbnQ2NCh1aW50OF90KiBidWZmZXIsIGludDY0X3QgbnVtYmVyKSB7Ci0gIERDSEVDSyhudW1iZXIgPj0gMCAmJiBudW1iZXIgPCAweDAwRkZGRkZGRkZGRkZGRkZMTCk7Ci0gIGJ1ZmZlclswXSA9IDB4MDE7Ci0gIGludDY0X3QgdG1wID0gbnVtYmVyOwotICBmb3IgKGludCBpID0gNzsgaSA+IDA7IGktLSkgewotICAgIGJ1ZmZlcltpXSA9IHRtcCAmIDB4ZmY7Ci0gICAgdG1wID4+PSA4OwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIE9uUmVhZERvbmUoY29uc3QgYmFzZTo6VGltZURlbHRhJiBleHBlY3RlZF90aW1lLCBib29sKiBjYWxsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIERlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICBFWFBFQ1RfRVEoc3RhdHVzLCBEZW11eGVyU3RyZWFtOjprT2spOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfdGltZSwgYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gICpjYWxsZWQgPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBPblJlYWREb25lX0Fib3J0RXhwZWN0ZWQoCi0gICAgYm9vbCogY2FsbGVkLCBEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICBFWFBFQ1RfRVEoc3RhdHVzLCBEZW11eGVyU3RyZWFtOjprQWJvcnRlZCk7Ci0gIEVYUEVDVF9FUShOVUxMLCBidWZmZXIuZ2V0KCkpOwotICAqY2FsbGVkID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgT25SZWFkRG9uZV9FT1NFeHBlY3RlZChib29sKiBjYWxsZWQsIERlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICBFWFBFQ1RfRVEoc3RhdHVzLCBEZW11eGVyU3RyZWFtOjprT2spOwotICBFWFBFQ1RfVFJVRShidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci0gICpjYWxsZWQgPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBPblNlZWtEb25lX09LRXhwZWN0ZWQoYm9vbCogY2FsbGVkLCBQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKLSAgRVhQRUNUX0VRKHN0YXR1cywgUElQRUxJTkVfT0spOwotICAqY2FsbGVkID0gdHJ1ZTsKLX0KLQotY2xhc3MgQ2h1bmtEZW11eGVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgLy8gUHVibGljIG1ldGhvZCBiZWNhdXNlIHRlc3QgY2FzZXMgdXNlIGl0IGRpcmVjdGx5LgotICBNT0NLX01FVEhPRDEoRGVtdXhlckluaXRpYWxpemVkLCB2b2lkKFBpcGVsaW5lU3RhdHVzKSk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGVudW0gQ29kZWNzSW5kZXggeyBBVURJTywgVklERU8sIE1BWF9DT0RFQ1NfSU5ERVggfTsKLQotICAvLyBEZWZhdWx0IGNsdXN0ZXIgdG8gYXBwZW5kIGZpcnN0IGZvciBzaW1wbGUgdGVzdHMuCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBrRGVmYXVsdEZpcnN0Q2x1c3RlcigpIHsKLSAgICByZXR1cm4gR2VuZXJhdGVDbHVzdGVyKDAsIDQpOwotICB9Ci0KLSAgLy8gRGVmYXVsdCBjbHVzdGVyIHRvIGFwcGVuZCBhZnRlciBrRGVmYXVsdEZpcnN0Q2x1c3RlcigpCi0gIC8vIGhhcyBiZWVuIGFwcGVuZGVkLiBUaGlzIGNsdXN0ZXIgc3RhcnRzIHdpdGggYmxvY2tzIHRoYXQKLSAgLy8gaGF2ZSB0aW1lc3RhbXBzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZW5kIHRpbWVzIG9mIHRoZSBibG9ja3MKLSAgLy8gaW4ga0RlZmF1bHRGaXJzdENsdXN0ZXIoKSBzbyB0aGF0IHRoZXNlIHR3byBjbHVzdGVycyByZXByZXNlbnQKLSAgLy8gYSBjb250aW51b3VzIHJlZ2lvbi4KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGtEZWZhdWx0U2Vjb25kQ2x1c3RlcigpIHsKLSAgICByZXR1cm4gR2VuZXJhdGVDbHVzdGVyKDQ2LCA2NiwgNSk7Ci0gIH0KLQotICBDaHVua0RlbXV4ZXJUZXN0KCkKLSAgICAgIDogbWVkaWFfbG9nXyhuZXcgU3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpLAotICAgICAgICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfKGtJbmZpbml0ZUR1cmF0aW9uKSB7Ci0gICAgaW5pdF9zZWdtZW50X3JlY2VpdmVkX2NiXyA9IGJhc2U6OkJpbmQoCi0gICAgICAgICZDaHVua0RlbXV4ZXJUZXN0OjpJbml0U2VnbWVudFJlY2VpdmVkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKLSAgICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0gIH0KLQotICB2b2lkIENyZWF0ZU5ld0RlbXV4ZXIoKSB7Ci0gICAgYmFzZTo6Q2xvc3VyZSBvcGVuX2NiID0KLSAgICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6RGVtdXhlck9wZW5lZCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSk7Ci0gICAgRGVtdXhlcjo6RW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IgPSBiYXNlOjpCaW5kKAotICAgICAgICAmQ2h1bmtEZW11eGVyVGVzdDo6T25FbmNyeXB0ZWRNZWRpYUluaXREYXRhLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKLSAgICBkZW11eGVyXy5yZXNldChuZXcgQ2h1bmtEZW11eGVyKG9wZW5fY2IsIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYV9sb2dfLCB0cnVlKSk7Ci0gIH0KLQotICB2aXJ0dWFsIH5DaHVua0RlbXV4ZXJUZXN0KCkgeyBTaHV0ZG93bkRlbXV4ZXIoKTsgfQotCi0gIHZvaWQgQ3JlYXRlSW5pdFNlZ21lbnQoaW50IHN0cmVhbV9mbGFncywgYm9vbCBpc19hdWRpb19lbmNyeXB0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc192aWRlb19lbmNyeXB0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4qIGJ1ZmZlciwgaW50KiBzaXplKSB7Ci0gICAgYm9vbCBoYXNfYXVkaW8gPSAoc3RyZWFtX2ZsYWdzICYgSEFTX0FVRElPKSAhPSAwOwotICAgIGJvb2wgaGFzX3ZpZGVvID0gKHN0cmVhbV9mbGFncyAmIEhBU19WSURFTykgIT0gMDsKLSAgICBib29sIGhhc190ZXh0ID0gKHN0cmVhbV9mbGFncyAmIEhBU19URVhUKSAhPSAwOwotICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gZWJtbF9oZWFkZXI7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBpbmZvOwotICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYXVkaW9fdHJhY2tfZW50cnk7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiB2aWRlb190cmFja19lbnRyeTsKLSAgICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGF1ZGlvX2NvbnRlbnRfZW5jb2RpbmdzOwotICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gdmlkZW9fY29udGVudF9lbmNvZGluZ3M7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiB0ZXh0X3RyYWNrX2VudHJ5OwotCi0gICAgZWJtbF9oZWFkZXIgPSBSZWFkVGVzdERhdGFGaWxlKCJ3ZWJtX2VibWxfZWxlbWVudCIpOwotCi0gICAgaW5mbyA9IFJlYWRUZXN0RGF0YUZpbGUoIndlYm1faW5mb19lbGVtZW50Iik7Ci0KLSAgICBpbnQgdHJhY2tzX2VsZW1lbnRfc2l6ZSA9IDA7Ci0KLSAgICBpZiAoaGFzX2F1ZGlvKSB7Ci0gICAgICBhdWRpb190cmFja19lbnRyeSA9IFJlYWRUZXN0RGF0YUZpbGUoIndlYm1fdm9yYmlzX3RyYWNrX2VudHJ5Iik7Ci0gICAgICB0cmFja3NfZWxlbWVudF9zaXplICs9IGF1ZGlvX3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKTsKLSAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgVHJhY2tOdW0gKDB4RDcpIEVCTUwgZWxlbWVudCBhdCBleHBlY3RlZCBvZmZzZXQuCi0gICAgICBEQ0hFQ0tfRVEoYXVkaW9fdHJhY2tfZW50cnktPmRhdGEoKVs5XSwga1dlYk1JZFRyYWNrTnVtYmVyKTsKLSAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBzaXplIG9mIFRyYWNrTnVtIGVsZW1lbnQgaXMgMS4gVGhlIGFjdHVhbCB2YWx1ZSBpcyAweDgxCi0gICAgICAvLyBkdWUgdG8gaG93IGVsZW1lbnQgc2l6ZXMgYXJlIGVuY29kZWQgaW4gRUJNTC4KLSAgICAgIERDSEVDS19FUShhdWRpb190cmFja19lbnRyeS0+ZGF0YSgpWzEwXSwgMHg4MSk7Ci0gICAgICAvLyBFbnN1cmUgdGhlIHRyYWNrIGlkIGluIFRyYWNrTnVtIEVCTUwgZWxlbWVudCBtYXRjaGVzIGtBdWRpb1RyYWNrTnVtLgotICAgICAgRENIRUNLX0VRKGF1ZGlvX3RyYWNrX2VudHJ5LT5kYXRhKClbMTFdLCBrQXVkaW9UcmFja051bSk7Ci0gICAgICBpZiAoc3RyZWFtX2ZsYWdzICYgVVNFX0FMVEVSTkFURV9BVURJT19UUkFDS19JRCkKLSAgICAgICAgYXVkaW9fdHJhY2tfZW50cnktPndyaXRhYmxlX2RhdGEoKVsxMV0gPSBrQWx0ZXJuYXRlQXVkaW9UcmFja051bTsKLSAgICAgIGlmIChpc19hdWRpb19lbmNyeXB0ZWQpIHsKLSAgICAgICAgYXVkaW9fY29udGVudF9lbmNvZGluZ3MgPSBSZWFkVGVzdERhdGFGaWxlKCJ3ZWJtX2NvbnRlbnRfZW5jb2RpbmdzIik7Ci0gICAgICAgIHRyYWNrc19lbGVtZW50X3NpemUgKz0gYXVkaW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChoYXNfdmlkZW8pIHsKLSAgICAgIHZpZGVvX3RyYWNrX2VudHJ5ID0gUmVhZFRlc3REYXRhRmlsZSgid2VibV92cDhfdHJhY2tfZW50cnkiKTsKLSAgICAgIHRyYWNrc19lbGVtZW50X3NpemUgKz0gdmlkZW9fdHJhY2tfZW50cnktPmRhdGFfc2l6ZSgpOwotICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBUcmFja051bSAoMHhENykgRUJNTCBlbGVtZW50IGF0IGV4cGVjdGVkIG9mZnNldC4KLSAgICAgIERDSEVDS19FUSh2aWRlb190cmFja19lbnRyeS0+ZGF0YSgpWzldLCBrV2ViTUlkVHJhY2tOdW1iZXIpOwotICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNpemUgb2YgVHJhY2tOdW0gZWxlbWVudCBpcyAxLiBUaGUgYWN0dWFsIHZhbHVlIGlzIDB4ODEKLSAgICAgIC8vIGR1ZSB0byBob3cgZWxlbWVudCBzaXplcyBhcmUgZW5jb2RlZCBpbiBFQk1MLgotICAgICAgRENIRUNLX0VRKHZpZGVvX3RyYWNrX2VudHJ5LT5kYXRhKClbMTBdLCAweDgxKTsKLSAgICAgIC8vIEVuc3VyZSB0aGUgdHJhY2sgaWQgaW4gVHJhY2tOdW0gRUJNTCBlbGVtZW50IG1hdGNoZXMga1ZpZGVvVHJhY2tOdW0uCi0gICAgICBEQ0hFQ0tfRVEodmlkZW9fdHJhY2tfZW50cnktPmRhdGEoKVsxMV0sIGtWaWRlb1RyYWNrTnVtKTsKLSAgICAgIGlmIChzdHJlYW1fZmxhZ3MgJiBVU0VfQUxURVJOQVRFX1ZJREVPX1RSQUNLX0lEKQotICAgICAgICB2aWRlb190cmFja19lbnRyeS0+d3JpdGFibGVfZGF0YSgpWzExXSA9IGtBbHRlcm5hdGVWaWRlb1RyYWNrTnVtOwotICAgICAgaWYgKGlzX3ZpZGVvX2VuY3J5cHRlZCkgewotICAgICAgICB2aWRlb19jb250ZW50X2VuY29kaW5ncyA9IFJlYWRUZXN0RGF0YUZpbGUoIndlYm1fY29udGVudF9lbmNvZGluZ3MiKTsKLSAgICAgICAgdHJhY2tzX2VsZW1lbnRfc2l6ZSArPSB2aWRlb19jb250ZW50X2VuY29kaW5ncy0+ZGF0YV9zaXplKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhhc190ZXh0KSB7Ci0gICAgICAvLyBUT0RPKG1hdHRoZXdqaGVhbmV5KTogY3JlYXRlIGFuIGFic3RyYWN0aW9uIHRvIGRvCi0gICAgICAvLyB0aGlzIChodHRwOi8vY3JidWcvMzIxNDU0KS4KLSAgICAgIC8vIFdlIG5lZWQgaXQgdG8gYWxzbyBoYW5kbGUgdGhlIGNyZWF0aW9uIG9mIG11bHRpcGxlIHRleHQgdHJhY2tzLgotICAgICAgLy8KLSAgICAgIC8vIFRoaXMgaXMgdGhlIHRyYWNrIGVudHJ5IGZvciBhIHRleHQgdHJhY2ssCi0gICAgICAvLyBUcmFja0VudHJ5IFtBRV0sIHNpemU9MzAKLSAgICAgIC8vICAgVHJhY2tOdW0gW0Q3XSwgc2l6ZT0xLCB2YWw9MyAob3IgNCBpZiBVU0VfQUxURVJOQVRFX1RFWFRfVFJBQ0tfSUQpCi0gICAgICAvLyAgIFRyYWNrVUlEIFs3M10gW0M1XSwgc2l6ZT0xLCB2YWx1ZT0zIChtdXN0IHJlbWFpbiBjb25zdGFudCBmb3Igc2FtZQotICAgICAgLy8gICAgIHRyYWNrLCBldmVuIGlmIFRyYWNrTnVtIGNoYW5nZXMpCi0gICAgICAvLyAgIFRyYWNrVHlwZSBbODNdLCBzaXplPTEsIHZhbD0weDExCi0gICAgICAvLyAgIENvZGVjSWQgWzg2XSwgc2l6ZT0xOCwgdmFsPSJEX1dFQlZUVC9TVUJUSVRMRVMiCi0gICAgICBjaGFyIHN0cltdID0KLSAgICAgICAgICAiXHhBRVx4OUVceEQ3XHg4MVx4MDNceDczXHhDNVx4ODFceDAzIgotICAgICAgICAgICJceDgzXHg4MVx4MTFceDg2XHg5MiIKLSAgICAgICAgICAiRF9XRUJWVFQvU1VCVElUTEVTIjsKLSAgICAgIERDSEVDS19FUShzdHJbNF0sIGtUZXh0VHJhY2tOdW0pOwotICAgICAgaWYgKHN0cmVhbV9mbGFncyAmIFVTRV9BTFRFUk5BVEVfVEVYVF9UUkFDS19JRCkKLSAgICAgICAgc3RyWzRdID0ga0FsdGVybmF0ZVRleHRUcmFja051bTsKLQotICAgICAgY29uc3QgaW50IGxlbiA9IHN0cmxlbihzdHIpOwotICAgICAgRENIRUNLX0VRKGxlbiwgMzIpOwotICAgICAgY29uc3QgdWludDhfdCogY29uc3QgYnVmID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyKTsKLSAgICAgIHRleHRfdHJhY2tfZW50cnkgPSBEZWNvZGVyQnVmZmVyOjpDb3B5RnJvbShidWYsIGxlbik7Ci0gICAgICBBU1NFUlRfVFJVRSh0ZXh0X3RyYWNrX2VudHJ5KTsKLSAgICAgIHRyYWNrc19lbGVtZW50X3NpemUgKz0gdGV4dF90cmFja19lbnRyeS0+ZGF0YV9zaXplKCk7Ci0gICAgfQotCi0gICAgKnNpemUgPSBlYm1sX2hlYWRlci0+ZGF0YV9zaXplKCkgKyBpbmZvLT5kYXRhX3NpemUoKSArIGtUcmFja3NIZWFkZXJTaXplICsKLSAgICAgICAgICAgIHRyYWNrc19lbGVtZW50X3NpemU7Ci0KLSAgICBidWZmZXItPnJlc2V0KG5ldyB1aW50OF90WypzaXplXSk7Ci0KLSAgICB1aW50OF90KiBidWYgPSBidWZmZXItPmdldCgpOwotICAgIG1lbWNweShidWYsIGVibWxfaGVhZGVyLT5kYXRhKCksIGVibWxfaGVhZGVyLT5kYXRhX3NpemUoKSk7Ci0gICAgYnVmICs9IGVibWxfaGVhZGVyLT5kYXRhX3NpemUoKTsKLQotICAgIG1lbWNweShidWYsIGluZm8tPmRhdGEoKSwgaW5mby0+ZGF0YV9zaXplKCkpOwotICAgIGJ1ZiArPSBpbmZvLT5kYXRhX3NpemUoKTsKLQotICAgIG1lbWNweShidWYsIGtUcmFja3NIZWFkZXIsIGtUcmFja3NIZWFkZXJTaXplKTsKLSAgICBXcml0ZUludDY0KGJ1ZiArIGtUcmFja3NTaXplT2Zmc2V0LCB0cmFja3NfZWxlbWVudF9zaXplKTsKLSAgICBidWYgKz0ga1RyYWNrc0hlYWRlclNpemU7Ci0KLSAgICAvLyBUT0RPKHhod2FuZyk6IFNpbXBsaWZ5IHRoaXMhIFByb2JhYmx5IGhhdmUgdGVzdCBkYXRhIGZpbGVzIHRoYXQgY29udGFpbgotICAgIC8vIENvbnRlbnRFbmNvZGluZ3MgZGlyZWN0bHkgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY3JlYXRlIG9uZSBhdCBydW4tdGltZS4KLSAgICBpZiAoaGFzX3ZpZGVvKSB7Ci0gICAgICBtZW1jcHkoYnVmLCB2aWRlb190cmFja19lbnRyeS0+ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgIHZpZGVvX3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKSk7Ci0gICAgICBpZiAoaXNfdmlkZW9fZW5jcnlwdGVkKSB7Ci0gICAgICAgIG1lbWNweShidWYgKyB2aWRlb190cmFja19lbnRyeS0+ZGF0YV9zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICB2aWRlb19jb250ZW50X2VuY29kaW5ncy0+ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgdmlkZW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpKTsKLSAgICAgICAgV3JpdGVJbnQ2NChidWYgKyBrVmlkZW9UcmFja1NpemVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgdmlkZW9fdHJhY2tfZW50cnktPmRhdGFfc2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpIC0KLSAgICAgICAgICAgICAgICAgICAgICAga1ZpZGVvVHJhY2tFbnRyeUhlYWRlclNpemUpOwotICAgICAgICBidWYgKz0gdmlkZW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpOwotICAgICAgfQotICAgICAgYnVmICs9IHZpZGVvX3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzX2F1ZGlvKSB7Ci0gICAgICBtZW1jcHkoYnVmLCBhdWRpb190cmFja19lbnRyeS0+ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgIGF1ZGlvX3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKSk7Ci0gICAgICBpZiAoaXNfYXVkaW9fZW5jcnlwdGVkKSB7Ci0gICAgICAgIG1lbWNweShidWYgKyBhdWRpb190cmFja19lbnRyeS0+ZGF0YV9zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICBhdWRpb19jb250ZW50X2VuY29kaW5ncy0+ZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgYXVkaW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpKTsKLSAgICAgICAgV3JpdGVJbnQ2NChidWYgKyBrQXVkaW9UcmFja1NpemVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgYXVkaW9fdHJhY2tfZW50cnktPmRhdGFfc2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpIC0KLSAgICAgICAgICAgICAgICAgICAgICAga0F1ZGlvVHJhY2tFbnRyeUhlYWRlclNpemUpOwotICAgICAgICBidWYgKz0gYXVkaW9fY29udGVudF9lbmNvZGluZ3MtPmRhdGFfc2l6ZSgpOwotICAgICAgfQotICAgICAgYnVmICs9IGF1ZGlvX3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzX3RleHQpIHsKLSAgICAgIG1lbWNweShidWYsIHRleHRfdHJhY2tfZW50cnktPmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICB0ZXh0X3RyYWNrX2VudHJ5LT5kYXRhX3NpemUoKSk7Ci0gICAgICBidWYgKz0gdGV4dF90cmFja19lbnRyeS0+ZGF0YV9zaXplKCk7Ci0gICAgfQotICB9Ci0KLSAgQ2h1bmtEZW11eGVyOjpTdGF0dXMgQWRkSWQoKSB7Ci0gICAgcmV0dXJuIEFkZElkKGtTb3VyY2VJZCwgSEFTX0FVRElPIHwgSEFTX1ZJREVPKTsKLSAgfQotCi0gIENodW5rRGVtdXhlcjo6U3RhdHVzIEFkZElkKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsIGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICBib29sIGhhc19hdWRpbyA9IChzdHJlYW1fZmxhZ3MgJiBIQVNfQVVESU8pICE9IDA7Ci0gICAgYm9vbCBoYXNfdmlkZW8gPSAoc3RyZWFtX2ZsYWdzICYgSEFTX1ZJREVPKSAhPSAwOwotICAgIHN0ZDo6c3RyaW5nIGNvZGVjczsKLSAgICBzdGQ6OnN0cmluZyB0eXBlOwotCi0gICAgaWYgKGhhc19hdWRpbykgewotICAgICAgY29kZWNzICs9ICJ2b3JiaXMiOwotICAgICAgdHlwZSA9ICJhdWRpby93ZWJtIjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzX3ZpZGVvKSB7Ci0gICAgICBpZiAoY29kZWNzID09ICIiKQotICAgICAgICBjb2RlY3MgPSAidnA4IjsKLSAgICAgIGVsc2UKLSAgICAgICAgY29kZWNzICs9ICIsdnA4IjsKLSAgICAgIHR5cGUgPSAidmlkZW8vd2VibSI7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNfYXVkaW8gJiYgIWhhc192aWRlbykgewotICAgICAgcmV0dXJuIEFkZElkKGtTb3VyY2VJZCwgSEFTX0FVRElPIHwgSEFTX1ZJREVPKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQWRkSWQoc291cmNlX2lkLCB0eXBlLCBjb2RlY3MpOwotICB9Ci0KLSAgQ2h1bmtEZW11eGVyOjpTdGF0dXMgQWRkSWQoY29uc3Qgc3RkOjpzdHJpbmcmIHNvdXJjZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjcykgewotICAgIENodW5rRGVtdXhlcjo6U3RhdHVzIHN0YXR1cyA9IGRlbXV4ZXJfLT5BZGRJZChzb3VyY2VfaWQsIG1pbWVfdHlwZSwgY29kZWNzKTsKLSAgICBpZiAoc3RhdHVzID09IENodW5rRGVtdXhlcjo6a09rKQotICAgICAgZGVtdXhlcl8tPlNldFRyYWNrc1dhdGNoZXIoCi0gICAgICAgICAgc291cmNlX2lkLCBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXJUZXN0OjpJbml0U2VnbWVudFJlY2VpdmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gIGJvb2wgQXBwZW5kRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7Ci0gICAgcmV0dXJuIEFwcGVuZERhdGEoa1NvdXJjZUlkLCBkYXRhLCBsZW5ndGgpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmRDbHVzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3RlcikgewotICAgIHJldHVybiBBcHBlbmREYXRhKHNvdXJjZV9pZCwgY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmRDbHVzdGVyKHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKSB7Ci0gICAgcmV0dXJuIEFwcGVuZENsdXN0ZXIoa1NvdXJjZUlkLCBzdGQ6Om1vdmUoY2x1c3RlcikpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmRDbHVzdGVyKGludCB0aW1lY29kZSwgaW50IGJsb2NrX2NvdW50KSB7Ci0gICAgcmV0dXJuIEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKHRpbWVjb2RlLCBibG9ja19jb3VudCkpOwotICB9Ci0KLSAgdm9pZCBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsIGludCB0cmFja19udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZWNvZGUsIGludCBibG9ja19jb3VudCkgewotICAgIGludCBibG9ja19kdXJhdGlvbiA9IDA7Ci0gICAgc3dpdGNoICh0cmFja19udW1iZXIpIHsKLSAgICAgIGNhc2Uga1ZpZGVvVHJhY2tOdW06Ci0gICAgICBjYXNlIGtBbHRlcm5hdGVWaWRlb1RyYWNrTnVtOgotICAgICAgICBibG9ja19kdXJhdGlvbiA9IGtWaWRlb0Jsb2NrRHVyYXRpb247Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrQXVkaW9UcmFja051bToKLSAgICAgIGNhc2Uga0FsdGVybmF0ZUF1ZGlvVHJhY2tOdW06Ci0gICAgICAgIGJsb2NrX2R1cmF0aW9uID0ga0F1ZGlvQmxvY2tEdXJhdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtUZXh0VHJhY2tOdW06ICAvLyBGYWxsLXRocm91Z2guCi0gICAgICBjYXNlIGtBbHRlcm5hdGVUZXh0VHJhY2tOdW06Ci0gICAgICAgIGJsb2NrX2R1cmF0aW9uID0ga1RleHRCbG9ja0R1cmF0aW9uOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05FKGJsb2NrX2R1cmF0aW9uLCAwKTsKLSAgICBpbnQgZW5kX3RpbWVjb2RlID0gdGltZWNvZGUgKyBibG9ja19jb3VudCAqIGJsb2NrX2R1cmF0aW9uOwotICAgIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICAgIHNvdXJjZV9pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKHRpbWVjb2RlLCBlbmRfdGltZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrX251bWJlciwgYmxvY2tfZHVyYXRpb24pKSk7Ci0gIH0KLQotICBzdHJ1Y3QgQmxvY2tJbmZvIHsKLSAgICBCbG9ja0luZm8oKSA6IHRyYWNrX251bWJlcigwKSwgdGltZXN0YW1wX2luX21zKDApLCBmbGFncygwKSwgZHVyYXRpb24oMCkge30KLQotICAgIEJsb2NrSW5mbyhpbnQgdG4sIGludCB0cywgaW50IGYsIGludCBkKQotICAgICAgICA6IHRyYWNrX251bWJlcih0biksIHRpbWVzdGFtcF9pbl9tcyh0cyksIGZsYWdzKGYpLCBkdXJhdGlvbihkKSB7fQotCi0gICAgaW50IHRyYWNrX251bWJlcjsKLSAgICBpbnQgdGltZXN0YW1wX2luX21zOwotICAgIGludCBmbGFnczsKLSAgICBpbnQgZHVyYXRpb247Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBCbG9ja0luZm8mIHJocykgY29uc3QgewotICAgICAgcmV0dXJuIHRpbWVzdGFtcF9pbl9tcyA8IHJocy50aW1lc3RhbXBfaW5fbXM7Ci0gICAgfQotICB9OwotCi0gIC8vIHx0cmFja19udW1iZXJ8IC0gVGhlIHRyYWNrIG51bWJlciB0byBwbGFjZSBpbgotICAvLyB8YmxvY2tfZGVzY3JpcHRpb25zfCAtIEEgc3BhY2UgZGVsaW1pdGVkIHN0cmluZyBvZiBibG9jayBpbmZvIHRoYXQKLSAgLy8gIGlzIHVzZWQgdG8gcG9wdWxhdGUgfGJsb2Nrc3wuIEVhY2ggYmxvY2sgaW5mbyBoYXMgYSB0aW1lc3RhbXAgaW4KLSAgLy8gIG1pbGxpc2Vjb25kcyBhbmQgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICdLJyB0byBpbmRpY2F0ZSB0aGF0IGEgYmxvY2sKLSAgLy8gIHNob3VsZCBiZSBtYXJrZWQgYXMgYSBrZXkgZnJhbWUuIEZvciBleGFtcGxlICIwSyAzMCA2MCIgc2hvdWxkIHBvcHVsYXRlCi0gIC8vICB8YmxvY2tzfCB3aXRoIDMgQmxvY2tJbmZvIG9iamVjdHM6IGEga2V5IGZyYW1lIHdpdGggdGltZXN0YW1wIDAgYW5kIDIKLSAgLy8gIG5vbi1rZXktZnJhbWVzIGF0IDMwbXMgYW5kIDYwbXMuCi0gIC8vICBFdmVyeSBibG9jayB3aWxsIGJlIGEgU2ltcGxlQmxvY2ssIHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IHRoZSBsYXN0IGJsb2NrCi0gIC8vICBtYXkgaGF2ZSBhbiBvcHRpb25hbCBkdXJhdGlvbiBkZWxpbWl0ZWQgd2l0aCBhICdEJyBhbmQgYXBwZW5kZWQgdG8gdGhlCi0gIC8vICBibG9jayBpbmZvIHRpbWVzdGFtcCwgcHJpb3IgdG8gdGhlIG9wdGlvbmFsIGtleWZyYW1lICdLJy4gRm9yIGV4YW1wbGUgIjBLCi0gIC8vICAzMCA2MEQxMEsiIGluZGljYXRlcyB0aGF0IHRoZSBsYXN0IGJsb2NrIHdpbGwgYmUgYSBrZXlmcmFtZSBCbG9ja0dyb3VwCi0gIC8vICB3aXRoIGR1cmF0aW9uIDEwbXMuCi0gIHZvaWQgUGFyc2VCbG9ja0Rlc2NyaXB0aW9ucyhpbnQgdHJhY2tfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgYmxvY2tfZGVzY3JpcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8QmxvY2tJbmZvPiogYmxvY2tzKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRpbWVzdGFtcHMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgICAgYmxvY2tfZGVzY3JpcHRpb25zLCAiICIsIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lc3RhbXBzLnNpemUoKTsgKytpKSB7Ci0gICAgICBzdGQ6OnN0cmluZyB0aW1lc3RhbXBfc3RyID0gdGltZXN0YW1wc1tpXTsKLSAgICAgIEJsb2NrSW5mbyBibG9ja19pbmZvOwotICAgICAgYmxvY2tfaW5mby50cmFja19udW1iZXIgPSB0cmFja19udW1iZXI7Ci0gICAgICBibG9ja19pbmZvLmZsYWdzID0gMDsKLSAgICAgIGJsb2NrX2luZm8uZHVyYXRpb24gPSAwOwotCi0gICAgICBpZiAoYmFzZTo6RW5kc1dpdGgodGltZXN0YW1wX3N0ciwgIksiLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICBibG9ja19pbmZvLmZsYWdzID0ga1dlYk1GbGFnS2V5ZnJhbWU7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgIksiIG9mZiBvZiB0aGUgdG9rZW4uCi0gICAgICAgIHRpbWVzdGFtcF9zdHIgPSB0aW1lc3RhbXBfc3RyLnN1YnN0cigwLCB0aW1lc3RhbXBzW2ldLmxlbmd0aCgpIC0gMSk7Ci0gICAgICB9Ci0KLSAgICAgIHNpemVfdCBkdXJhdGlvbl9wb3MgPSB0aW1lc3RhbXBfc3RyLmZpbmQoJ0QnKTsKLSAgICAgIGNvbnN0IGJvb2wgZXhwbGljaXRfZHVyYXRpb24gPSBkdXJhdGlvbl9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgICBjb25zdCBib29sIGlzX2xhc3RfYmxvY2sgPSBpID09IHRpbWVzdGFtcHMuc2l6ZSgpIC0gMTsKLSAgICAgIENIRUNLKCFleHBsaWNpdF9kdXJhdGlvbiB8fCBpc19sYXN0X2Jsb2NrKTsKLSAgICAgIGlmIChleHBsaWNpdF9kdXJhdGlvbikgewotICAgICAgICBDSEVDSyhiYXNlOjpTdHJpbmdUb0ludCh0aW1lc3RhbXBfc3RyLnN1YnN0cihkdXJhdGlvbl9wb3MgKyAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NrX2luZm8uZHVyYXRpb24pKTsKLSAgICAgICAgdGltZXN0YW1wX3N0ciA9IHRpbWVzdGFtcF9zdHIuc3Vic3RyKDAsIGR1cmF0aW9uX3Bvcyk7Ci0gICAgICB9Ci0KLSAgICAgIENIRUNLKGJhc2U6OlN0cmluZ1RvSW50KHRpbWVzdGFtcF9zdHIsICZibG9ja19pbmZvLnRpbWVzdGFtcF9pbl9tcykpOwotCi0gICAgICBpZiAodHJhY2tfbnVtYmVyID09IGtUZXh0VHJhY2tOdW0gfHwKLSAgICAgICAgICB0cmFja19udW1iZXIgPT0ga0FsdGVybmF0ZVRleHRUcmFja051bSkgewotICAgICAgICBibG9ja19pbmZvLmR1cmF0aW9uID0ga1RleHRCbG9ja0R1cmF0aW9uOwotICAgICAgICBBU1NFUlRfRVEoa1dlYk1GbGFnS2V5ZnJhbWUsIGJsb2NrX2luZm8uZmxhZ3MpCi0gICAgICAgICAgICA8PCAiVGV4dCBibG9jayB3aXRoIHRpbWVzdGFtcCAiIDw8IGJsb2NrX2luZm8udGltZXN0YW1wX2luX21zCi0gICAgICAgICAgICA8PCAiIHdhcyBub3QgbWFya2VkIGFzIGEga2V5IGZyYW1lLiIKLSAgICAgICAgICAgIDw8ICIgQWxsIHRleHQgYmxvY2tzIG11c3QgYmUga2V5IGZyYW1lcyI7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0cmFja19udW1iZXIgPT0ga0F1ZGlvVHJhY2tOdW0gfHwKLSAgICAgICAgICB0cmFja19udW1iZXIgPT0ga0FsdGVybmF0ZUF1ZGlvVHJhY2tOdW0pCi0gICAgICAgIEFTU0VSVF9UUlVFKGJsb2NrX2luZm8uZmxhZ3MgJiBrV2ViTUZsYWdLZXlmcmFtZSk7Ci0KLSAgICAgIGJsb2Nrcy0+cHVzaF9iYWNrKGJsb2NrX2luZm8pOwotICAgIH0KLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBHZW5lcmF0ZUNsdXN0ZXIoY29uc3Qgc3RkOjp2ZWN0b3I8QmxvY2tJbmZvPiYgYmxvY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5rbm93bl9zaXplKSB7Ci0gICAgRENIRUNLX0dUKGJsb2Nrcy5zaXplKCksIDB1KTsKLSAgICBDbHVzdGVyQnVpbGRlciBjYjsKLQotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGEoMTApOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICBpZiAoaSA9PSAwKSBjYi5TZXRDbHVzdGVyVGltZWNvZGUoYmxvY2tzW2ldLnRpbWVzdGFtcF9pbl9tcyk7Ci0KLSAgICAgIGlmIChibG9ja3NbaV0uZHVyYXRpb24pIHsKLSAgICAgICAgaWYgKGJsb2Nrc1tpXS50cmFja19udW1iZXIgPT0ga1ZpZGVvVHJhY2tOdW0gfHwKLSAgICAgICAgICAgIGJsb2Nrc1tpXS50cmFja19udW1iZXIgPT0ga0FsdGVybmF0ZVZpZGVvVHJhY2tOdW0pIHsKLSAgICAgICAgICBBZGRWaWRlb0Jsb2NrR3JvdXAoJmNiLCBibG9ja3NbaV0udHJhY2tfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NbaV0udGltZXN0YW1wX2luX21zLCBibG9ja3NbaV0uZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrc1tpXS5mbGFncyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2IuQWRkQmxvY2tHcm91cChibG9ja3NbaV0udHJhY2tfbnVtYmVyLCBibG9ja3NbaV0udGltZXN0YW1wX2luX21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzW2ldLmR1cmF0aW9uLCBibG9ja3NbaV0uZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NbaV0uZmxhZ3MgJiBrV2ViTUZsYWdLZXlmcmFtZSwgJmRhdGFbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNiLkFkZFNpbXBsZUJsb2NrKGJsb2Nrc1tpXS50cmFja19udW1iZXIsIGJsb2Nrc1tpXS50aW1lc3RhbXBfaW5fbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrc1tpXS5mbGFncywgJmRhdGFbMF0sIGRhdGEuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdW5rbm93bl9zaXplID8gY2IuRmluaXNoV2l0aFVua25vd25TaXplKCkgOiBjYi5GaW5pc2goKTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBHZW5lcmF0ZUNsdXN0ZXIoCi0gICAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPEJsb2NrSW5mbz4gYmxvY2tfcXVldWUsIGJvb2wgdW5rbm93bl9zaXplKSB7Ci0gICAgc3RkOjp2ZWN0b3I8QmxvY2tJbmZvPiBibG9ja3MoYmxvY2tfcXVldWUuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gYmxvY2tfcXVldWUuc2l6ZSgpIC0gMTsgIWJsb2NrX3F1ZXVlLmVtcHR5KCk7IC0taSkgewotICAgICAgYmxvY2tzW2ldID0gYmxvY2tfcXVldWUudG9wKCk7Ci0gICAgICBibG9ja19xdWV1ZS5wb3AoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR2VuZXJhdGVDbHVzdGVyKGJsb2NrcywgdW5rbm93bl9zaXplKTsKLSAgfQotCi0gIC8vIHxibG9ja19kZXNjcmlwdGlvbnN8IC0gVGhlIGJsb2NrIGRlc2NyaXB0aW9ucyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUKLSAgLy8gY2x1c3Rlci4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBQYXJzZUJsb2NrRGVzY3JpcHRpb25zKCkgZm9yIGRldGFpbHMgb24KLSAgLy8gdGhlIHN0cmluZyBmb3JtYXQuCi0gIHZvaWQgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3Rlcihjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2lkLCBpbnQgdHJhY2tfbnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJsb2NrX2Rlc2NyaXB0aW9ucykgewotICAgIHN0ZDo6dmVjdG9yPEJsb2NrSW5mbz4gYmxvY2tzOwotICAgIFBhcnNlQmxvY2tEZXNjcmlwdGlvbnModHJhY2tfbnVtYmVyLCBibG9ja19kZXNjcmlwdGlvbnMsICZibG9ja3MpOwotICAgIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoc291cmNlX2lkLCBHZW5lcmF0ZUNsdXN0ZXIoYmxvY2tzLCBmYWxzZSkpKTsKLSAgfQotCi0gIHN0cnVjdCBNdXhlZFN0cmVhbUluZm8gewotICAgIE11eGVkU3RyZWFtSW5mbygpCi0gICAgICAgIDogdHJhY2tfbnVtYmVyKDApLAotICAgICAgICAgIGJsb2NrX2Rlc2NyaXB0aW9ucygiIiksCi0gICAgICAgICAgbGFzdF9ibG9ja3NfZXN0aW1hdGVkX2R1cmF0aW9uKC0xKSB7fQotCi0gICAgTXV4ZWRTdHJlYW1JbmZvKGludCB0cmFja19udW0sIGNvbnN0IGNoYXIqIGJsb2NrX2Rlc2MpCi0gICAgICAgIDogdHJhY2tfbnVtYmVyKHRyYWNrX251bSksCi0gICAgICAgICAgYmxvY2tfZGVzY3JpcHRpb25zKGJsb2NrX2Rlc2MpLAotICAgICAgICAgIGxhc3RfYmxvY2tzX2VzdGltYXRlZF9kdXJhdGlvbigtMSkge30KLQotICAgIE11eGVkU3RyZWFtSW5mbyhpbnQgdHJhY2tfbnVtLCBjb25zdCBjaGFyKiBibG9ja19kZXNjLAotICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdF9ibG9ja19kdXJhdGlvbl9lc3RpbWF0ZSkKLSAgICAgICAgOiB0cmFja19udW1iZXIodHJhY2tfbnVtKSwKLSAgICAgICAgICBibG9ja19kZXNjcmlwdGlvbnMoYmxvY2tfZGVzYyksCi0gICAgICAgICAgbGFzdF9ibG9ja3NfZXN0aW1hdGVkX2R1cmF0aW9uKGxhc3RfYmxvY2tfZHVyYXRpb25fZXN0aW1hdGUpIHt9Ci0KLSAgICBpbnQgdHJhY2tfbnVtYmVyOwotICAgIC8vIFRoZSBibG9jayBkZXNjcmlwdGlvbiBwYXNzZWQgdG8gUGFyc2VCbG9ja0Rlc2NyaXB0aW9ucygpLgotICAgIC8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBtZXRob2QgZm9yIGRldGFpbHMgb24gdGhlIHN0cmluZyBmb3JtYXQuCi0gICAgY29uc3QgY2hhciogYmxvY2tfZGVzY3JpcHRpb25zOwotCi0gICAgLy8gSWYgLTEsIG5vIFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkIE1lZGlhTG9nIGV4cGVjdGF0aW9uIGlzIGFkZGVkCi0gICAgLy8gd2hlbiBhcHBlbmRpbmcgdGhlIHJlc3VsdGluZyBjbHVzdGVyLiBPdGhlcndpc2UsIGFuIGV4cGVjdGF0aW9uIChpbiBtcykKLSAgICAvLyBpcyBhZGRlZC4KLSAgICBpbnQgbGFzdF9ibG9ja3NfZXN0aW1hdGVkX2R1cmF0aW9uOwotICB9OwotCi0gIHZvaWQgQXBwZW5kTXV4ZWRDbHVzdGVyKGNvbnN0IE11eGVkU3RyZWFtSW5mbyYgbXNpXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE11eGVkU3RyZWFtSW5mbyYgbXNpXzIpIHsKLSAgICBzdGQ6OnZlY3RvcjxNdXhlZFN0cmVhbUluZm8+IG1zaSgyKTsKLSAgICBtc2lbMF0gPSBtc2lfMTsKLSAgICBtc2lbMV0gPSBtc2lfMjsKLSAgICBBcHBlbmRNdXhlZENsdXN0ZXIobXNpKTsKLSAgfQotCi0gIHZvaWQgQXBwZW5kTXV4ZWRDbHVzdGVyKGNvbnN0IE11eGVkU3RyZWFtSW5mbyYgbXNpXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE11eGVkU3RyZWFtSW5mbyYgbXNpXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE11eGVkU3RyZWFtSW5mbyYgbXNpXzMpIHsKLSAgICBzdGQ6OnZlY3RvcjxNdXhlZFN0cmVhbUluZm8+IG1zaSgzKTsKLSAgICBtc2lbMF0gPSBtc2lfMTsKLSAgICBtc2lbMV0gPSBtc2lfMjsKLSAgICBtc2lbMl0gPSBtc2lfMzsKLSAgICBBcHBlbmRNdXhlZENsdXN0ZXIobXNpKTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBHZW5lcmF0ZU11eGVkQ2x1c3RlcigKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE11eGVkU3RyZWFtSW5mbz4gbXNpKSB7Ci0gICAgc3RkOjpwcmlvcml0eV9xdWV1ZTxCbG9ja0luZm8+IGJsb2NrX3F1ZXVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXNpLnNpemUoKTsgKytpKSB7Ci0gICAgICBzdGQ6OnZlY3RvcjxCbG9ja0luZm8+IHRyYWNrX2Jsb2NrczsKLSAgICAgIFBhcnNlQmxvY2tEZXNjcmlwdGlvbnMobXNpW2ldLnRyYWNrX251bWJlciwgbXNpW2ldLmJsb2NrX2Rlc2NyaXB0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYWNrX2Jsb2Nrcyk7Ci0KLSAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdHJhY2tfYmxvY2tzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgIGJsb2NrX3F1ZXVlLnB1c2godHJhY2tfYmxvY2tzW2pdKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG1zaVtpXS5sYXN0X2Jsb2Nrc19lc3RpbWF0ZWRfZHVyYXRpb24gIT0gLTEpIHsKLSAgICAgICAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgKLSAgICAgICAgICAgIG1zaVtpXS5sYXN0X2Jsb2Nrc19lc3RpbWF0ZWRfZHVyYXRpb24pKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIEdlbmVyYXRlQ2x1c3RlcihibG9ja19xdWV1ZSwgZmFsc2UpOwotICB9Ci0KLSAgdm9pZCBBcHBlbmRNdXhlZENsdXN0ZXIoY29uc3Qgc3RkOjp2ZWN0b3I8TXV4ZWRTdHJlYW1JbmZvPiBtc2kpIHsKLSAgICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtTb3VyY2VJZCwgR2VuZXJhdGVNdXhlZENsdXN0ZXIobXNpKSkpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmREYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSB7Ci0gICAgRVhQRUNUX0NBTEwoaG9zdF8sIE9uQnVmZmVyZWRUaW1lUmFuZ2VzQ2hhbmdlZChfKSkuVGltZXMoQW55TnVtYmVyKCkpOwotCi0gICAgcmV0dXJuIGRlbXV4ZXJfLT5BcHBlbmREYXRhKAotICAgICAgICBzb3VyY2VfaWQsIGRhdGEsIGxlbmd0aCwgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLCAmdGltZXN0YW1wX29mZnNldF9tYXBfW3NvdXJjZV9pZF0pOwotICB9Ci0KLSAgYm9vbCBBcHBlbmREYXRhSW5QaWVjZXMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewotICAgIHJldHVybiBBcHBlbmREYXRhSW5QaWVjZXMoZGF0YSwgbGVuZ3RoLCA3KTsKLSAgfQotCi0gIGJvb2wgQXBwZW5kRGF0YUluUGllY2VzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwaWVjZV9zaXplKSB7Ci0gICAgY29uc3QgdWludDhfdCogc3RhcnQgPSBkYXRhOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICBzaXplX3QgYXBwZW5kX3NpemUgPQotICAgICAgICAgIHN0ZDo6bWluKHBpZWNlX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gc3RhcnQpKTsKLSAgICAgIGlmICghQXBwZW5kRGF0YShzdGFydCwgYXBwZW5kX3NpemUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBzdGFydCArPSBhcHBlbmRfc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBib29sIEFwcGVuZEluaXRTZWdtZW50KGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICByZXR1cm4gQXBwZW5kSW5pdFNlZ21lbnRXaXRoU291cmNlSWQoa1NvdXJjZUlkLCBzdHJlYW1fZmxhZ3MpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmRJbml0U2VnbWVudFdpdGhTb3VyY2VJZChjb25zdCBzdGQ6OnN0cmluZyYgc291cmNlX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICByZXR1cm4gQXBwZW5kSW5pdFNlZ21lbnRXaXRoRW5jcnlwdGVkSW5mbyhzb3VyY2VfaWQsIHN0cmVhbV9mbGFncywgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmRJbml0U2VnbWVudFdpdGhFbmNyeXB0ZWRJbmZvKGNvbnN0IHN0ZDo6c3RyaW5nJiBzb3VyY2VfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19hdWRpb19lbmNyeXB0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX3ZpZGVvX2VuY3J5cHRlZCkgewotICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGluZm9fdHJhY2tzOwotICAgIGludCBpbmZvX3RyYWNrc19zaXplID0gMDsKLSAgICBDcmVhdGVJbml0U2VnbWVudChzdHJlYW1fZmxhZ3MsIGlzX2F1ZGlvX2VuY3J5cHRlZCwgaXNfdmlkZW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgICAgICAgICZpbmZvX3RyYWNrcywgJmluZm9fdHJhY2tzX3NpemUpOwotICAgIHJldHVybiBBcHBlbmREYXRhKHNvdXJjZV9pZCwgaW5mb190cmFja3MuZ2V0KCksIGluZm9fdHJhY2tzX3NpemUpOwotICB9Ci0KLSAgdm9pZCBBcHBlbmRHYXJiYWdlKCkgewotICAgIC8vIEZpbGwgdXAgYW4gYXJyYXkgd2l0aCBnaWJiZXJpc2guCi0gICAgaW50IGdhcmJhZ2VfY2x1c3Rlcl9zaXplID0gMTA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZ2FyYmFnZV9jbHVzdGVyKAotICAgICAgICBuZXcgdWludDhfdFtnYXJiYWdlX2NsdXN0ZXJfc2l6ZV0pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2FyYmFnZV9jbHVzdGVyX3NpemU7ICsraSkgZ2FyYmFnZV9jbHVzdGVyW2ldID0gaTsKLSAgICBBU1NFUlRfRkFMU0UoQXBwZW5kRGF0YShnYXJiYWdlX2NsdXN0ZXIuZ2V0KCksIGdhcmJhZ2VfY2x1c3Rlcl9zaXplKSk7Ci0gIH0KLQotICBQaXBlbGluZVN0YXR1c0NCIENyZWF0ZUluaXREb25lQ0IoY29uc3QgYmFzZTo6VGltZURlbHRhJiBleHBlY3RlZF9kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RhdHVzIGV4cGVjdGVkX3N0YXR1cykgewotICAgIGlmIChleHBlY3RlZF9kdXJhdGlvbiAhPSBrTm9UaW1lc3RhbXApCi0gICAgICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oZXhwZWN0ZWRfZHVyYXRpb24pKTsKLSAgICByZXR1cm4gQ3JlYXRlSW5pdERvbmVDQihleHBlY3RlZF9zdGF0dXMpOwotICB9Ci0KLSAgUGlwZWxpbmVTdGF0dXNDQiBDcmVhdGVJbml0RG9uZUNCKFBpcGVsaW5lU3RhdHVzIGV4cGVjdGVkX3N0YXR1cykgewotICAgIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVySW5pdGlhbGl6ZWQoZXhwZWN0ZWRfc3RhdHVzKSk7Ci0gICAgcmV0dXJuIGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlclRlc3Q6OkRlbXV4ZXJJbml0aWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKTsKLSAgfQotCi0gIGVudW0gU3RyZWFtRmxhZ3MgewotICAgIEhBU19BVURJTyA9IDEgPDwgMCwKLSAgICBIQVNfVklERU8gPSAxIDw8IDEsCi0gICAgSEFTX1RFWFQgPSAxIDw8IDIsCi0gICAgVVNFX0FMVEVSTkFURV9BVURJT19UUkFDS19JRCA9IDEgPDwgMywKLSAgICBVU0VfQUxURVJOQVRFX1ZJREVPX1RSQUNLX0lEID0gMSA8PCA0LAotICAgIFVTRV9BTFRFUk5BVEVfVEVYVF9UUkFDS19JRCA9IDEgPDwgNSwKLSAgfTsKLQotICBib29sIEluaXREZW11eGVyKGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICByZXR1cm4gSW5pdERlbXV4ZXJXaXRoRW5jcnlwdGlvbkluZm8oc3RyZWFtX2ZsYWdzLCBmYWxzZSwgZmFsc2UpOwotICB9Ci0KLSAgdm9pZCBFeHBlY3RJbml0TWVkaWFMb2dzKGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICBpZiAoc3RyZWFtX2ZsYWdzICYgSEFTX1ZJREVPKSB7Ci0gICAgICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgICAgIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJ2aWRlbyIsICJ2cDgiKSk7Ci0gICAgfQotICAgIGlmIChzdHJlYW1fZmxhZ3MgJiBIQVNfQVVESU8pIHsKLSAgICAgIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oImF1ZGlvIikpOwotICAgICAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgInZvcmJpcyIpKTsKLSAgICB9Ci0gIH0KLQotICBib29sIEluaXREZW11eGVyV2l0aEVuY3J5cHRpb25JbmZvKGludCBzdHJlYW1fZmxhZ3MsIGJvb2wgaXNfYXVkaW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfdmlkZW9fZW5jcnlwdGVkKSB7Ci0gICAgUGlwZWxpbmVTdGF0dXMgZXhwZWN0ZWRfc3RhdHVzID0KLSAgICAgICAgKHN0cmVhbV9mbGFncyAhPSAwKSA/IFBJUEVMSU5FX09LIDogQ0hVTktfREVNVVhFUl9FUlJPUl9BUFBFTkRfRkFJTEVEOwotCi0gICAgYmFzZTo6VGltZURlbHRhIGV4cGVjdGVkX2R1cmF0aW9uID0ga05vVGltZXN0YW1wOwotICAgIGlmIChleHBlY3RlZF9zdGF0dXMgPT0gUElQRUxJTkVfT0spIGV4cGVjdGVkX2R1cmF0aW9uID0ga0RlZmF1bHREdXJhdGlvbigpOwotCi0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0KLSAgICBpZiAoaXNfYXVkaW9fZW5jcnlwdGVkIHx8IGlzX3ZpZGVvX2VuY3J5cHRlZCkgewotICAgICAgRENIRUNLKCFpc19hdWRpb19lbmNyeXB0ZWQgfHwgc3RyZWFtX2ZsYWdzICYgSEFTX0FVRElPKTsKLSAgICAgIERDSEVDSyghaXNfdmlkZW9fZW5jcnlwdGVkIHx8IHN0cmVhbV9mbGFncyAmIEhBU19WSURFTyk7Ci0KLSAgICAgIGludCBuZWVkX2tleV9jb3VudCA9Ci0gICAgICAgICAgKGlzX2F1ZGlvX2VuY3J5cHRlZCA/IDEgOiAwKSArIChpc192aWRlb19lbmNyeXB0ZWQgPyAxIDogMCk7Ci0gICAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWVJbml0RGF0YVR5cGU6OldFQk0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0VuY3J5cHRlZE1lZGlhSW5pdERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRW5jcnlwdGVkTWVkaWFJbml0RGF0YSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzaXplKGtFbmNyeXB0ZWRNZWRpYUluaXREYXRhKSkpKQotICAgICAgICAgIC5UaW1lcyhFeGFjdGx5KG5lZWRfa2V5X2NvdW50KSk7Ci0gICAgfQotCi0gICAgLy8gQWRkaW5nIGV4cGVjdGF0aW9ucyBwcmlvciB0byBDcmVhdGVJbml0RG9uZUNCKCkgaGVyZSBiZWNhdXNlIEluU2VxdWVuY2UKLSAgICAvLyB0ZXN0cyByZXF1aXJlIGluaXQgc2VnbWVudCByZWNlaXZlZCBiZWZvcmUgZHVyYXRpb24gc2V0LiBBbHNvLCBvbmx5Ci0gICAgLy8gZXhwZWN0IGFuIGluaXQgc2VnbWVudCByZWNlaXZlZCBjYWxsYmFjayBpZiB0aGVyZSBpcyBhY3R1YWxseSBhIHRyYWNrIGluCi0gICAgLy8gaXQuCi0gICAgaWYgKHN0cmVhbV9mbGFncyAhPSAwKSB7Ci0gICAgICBFeHBlY3RJbml0TWVkaWFMb2dzKHN0cmVhbV9mbGFncyk7Ci0gICAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBPbk5ld0NvbmZpZ3MoKSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXVkaW8sIHZpZGVvLCBvciB0ZXh0IHRyYWNrLgotICAgICAgRVhQRUNUX01FRElBX0xPRyhJbml0U2VnbWVudE1pc3Nlc0V4cGVjdGVkVHJhY2soInZvcmJpcyIpKTsKLSAgICAgIEVYUEVDVF9NRURJQV9MT0coSW5pdFNlZ21lbnRNaXNzZXNFeHBlY3RlZFRyYWNrKCJ2cDgiKSk7Ci0gICAgICBFWFBFQ1RfTUVESUFfTE9HKFN0cmVhbVBhcnNpbmdGYWlsZWQoKSk7Ci0gICAgfQotCi0gICAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAgICZob3N0XywgQ3JlYXRlSW5pdERvbmVDQihleHBlY3RlZF9kdXJhdGlvbiwgZXhwZWN0ZWRfc3RhdHVzKSwgdHJ1ZSk7Ci0KLSAgICBpZiAoQWRkSWQoa1NvdXJjZUlkLCBzdHJlYW1fZmxhZ3MpICE9IENodW5rRGVtdXhlcjo6a09rKSByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gQXBwZW5kSW5pdFNlZ21lbnRXaXRoRW5jcnlwdGVkSW5mbygKLSAgICAgICAga1NvdXJjZUlkLCBzdHJlYW1fZmxhZ3MsIGlzX2F1ZGlvX2VuY3J5cHRlZCwgaXNfdmlkZW9fZW5jcnlwdGVkKTsKLSAgfQotCi0gIGJvb2wgSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlc1RleHQoY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc190ZXh0KSB7Ci0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0gICAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAgICZob3N0XywgQ3JlYXRlSW5pdERvbmVDQihrRGVmYXVsdER1cmF0aW9uKCksIFBJUEVMSU5FX09LKSwgdHJ1ZSk7Ci0KLSAgICBpZiAoQWRkSWQoYXVkaW9faWQsIEhBU19BVURJTykgIT0gQ2h1bmtEZW11eGVyOjprT2spIHJldHVybiBmYWxzZTsKLSAgICBpZiAoQWRkSWQodmlkZW9faWQsIEhBU19WSURFTykgIT0gQ2h1bmtEZW11eGVyOjprT2spIHJldHVybiBmYWxzZTsKLQotICAgIGludCBhdWRpb19mbGFncyA9IEhBU19BVURJTzsKLSAgICBpbnQgdmlkZW9fZmxhZ3MgPSBIQVNfVklERU87Ci0KLSAgICBpZiAoaGFzX3RleHQpIHsKLSAgICAgIGF1ZGlvX2ZsYWdzIHw9IEhBU19URVhUOwotICAgICAgdmlkZW9fZmxhZ3MgfD0gSEFTX1RFWFQ7Ci0gICAgfQotCi0gICAgLy8gTm90ZTogVW5saWtlIEluaXREZW11eGVyV2l0aEVuY3J5cHRpb25JbmZvLCB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkKLSAgICAvLyBpbmNvbXBhdGlibGUgd2l0aCBJblNlcXVlbmNlIHRlc3RzLiBSZWZhY3RvcmluZyBvZiB0aGUgZHVyYXRpb24KLSAgICAvLyBzZXQgZXhwZWN0YXRpb24gdG8gbm90IGJlIGFkZGVkIGR1cmluZyBDcmVhdGVJbml0RG9uZUNCKCkgY291bGQgZml4IHRoaXMuCi0gICAgRXhwZWN0SW5pdE1lZGlhTG9ncyhhdWRpb19mbGFncyk7Ci0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgICBFWFBFQ1RfVFJVRShBcHBlbmRJbml0U2VnbWVudFdpdGhTb3VyY2VJZChhdWRpb19pZCwgYXVkaW9fZmxhZ3MpKTsKLQotICAgIEV4cGVjdEluaXRNZWRpYUxvZ3ModmlkZW9fZmxhZ3MpOwotICAgIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gICAgRVhQRUNUX1RSVUUoQXBwZW5kSW5pdFNlZ21lbnRXaXRoU291cmNlSWQodmlkZW9faWQsIHZpZGVvX2ZsYWdzKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBib29sIEluaXREZW11eGVyQXVkaW9BbmRWaWRlb1NvdXJjZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZpZGVvX2lkKSB7Ci0gICAgcmV0dXJuIEluaXREZW11eGVyQXVkaW9BbmRWaWRlb1NvdXJjZXNUZXh0KGF1ZGlvX2lkLCB2aWRlb19pZCwgZmFsc2UpOwotICB9Ci0KLSAgLy8gSW5pdGlhbGl6ZXMgdGhlIGRlbXV4ZXIgd2l0aCBkYXRhIGZyb20gMiBmaWxlcyB3aXRoIGRpZmZlcmVudAotICAvLyBkZWNvZGVyIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIHVzZWQgdG8gdGVzdCB0aGUgZGVjb2RlciBjb25maWcgY2hhbmdlCi0gIC8vIGxvZ2ljLgotICAvLwotICAvLyBiZWFyLTMyMHgyNDAud2VibSBWaWRlb0RlY29kZXJDb25maWcgcmV0dXJucyAzMjB4MjQwIGZvciBpdHMgbmF0dXJhbF9zaXplKCkKLSAgLy8gYmVhci02NDB4MzYwLndlYm0gVmlkZW9EZWNvZGVyQ29uZmlnIHJldHVybnMgNjQweDM2MCBmb3IgaXRzIG5hdHVyYWxfc2l6ZSgpCi0gIC8vIFRoZSByZXN1bHRpbmcgdmlkZW8gc3RyZWFtIHJldHVybnMgZGF0YSBmcm9tIGVhY2ggZmlsZSBmb3IgdGhlIGZvbGxvd2luZwotICAvLyB0aW1lIHJhbmdlcy4KLSAgLy8gYmVhci0zMjB4MjQwLndlYm0gOiBbMC01MDEpICAgICAgIFs4MDEtMjczNikKLSAgLy8gYmVhci02NDB4MzYwLndlYm0gOiAgICAgICBbNTI3LTc2MCkKLSAgLy8KLSAgLy8gYmVhci0zMjB4MjQwLndlYm0gQXVkaW9EZWNvZGVyQ29uZmlnIHJldHVybnMgMzg2MyBmb3IgaXRzIGV4dHJhX2RhdGEgc2l6ZS4KLSAgLy8gYmVhci02NDB4MzYwLndlYm0gQXVkaW9EZWNvZGVyQ29uZmlnIHJldHVybnMgMzkzNSBmb3IgaXRzIGV4dHJhX2RhdGEgc2l6ZS4KLSAgLy8gVGhlIHJlc3VsdGluZyBhdWRpbyBzdHJlYW0gcmV0dXJucyBkYXRhIGZyb20gZWFjaCBmaWxlIGZvciB0aGUgZm9sbG93aW5nCi0gIC8vIHRpbWUgcmFuZ2VzLgotICAvLyBiZWFyLTMyMHgyNDAud2VibSA6IFswLTUyNCkgICAgICAgWzc3OS0yNzM2KQotICAvLyBiZWFyLTY0MHgzNjAud2VibSA6ICAgICAgIFs1MjctNzU5KQotICBib29sIEluaXREZW11eGVyV2l0aENvbmZpZ0NoYW5nZURhdGEoKSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBiZWFyMSA9IFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMzIweDI0MC53ZWJtIik7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBiZWFyMiA9IFJlYWRUZXN0RGF0YUZpbGUoImJlYXItNjQweDM2MC53ZWJtIik7Ci0KLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLQotICAgIC8vIEFkZGluZyBleHBlY3RhdGlvbiBwcmlvciB0byBDcmVhdGVJbml0RG9uZUNCKCkgaGVyZSBiZWNhdXNlIEluU2VxdWVuY2UKLSAgICAvLyB0ZXN0cyByZXF1aXJlIGluaXQgc2VnbWVudCByZWNlaXZlZCBiZWZvcmUgZHVyYXRpb24gc2V0LgotICAgIEV4cGVjdEluaXRNZWRpYUxvZ3MoSEFTX0FVRElPIHwgSEFTX1ZJREVPKTsKLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICAgIGRlbXV4ZXJfLT5Jbml0aWFsaXplKAotICAgICAgICAmaG9zdF8sCi0gICAgICAgIENyZWF0ZUluaXREb25lQ0IoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3NDQpLCBQSVBFTElORV9PSyksCi0gICAgICAgIHRydWUpOwotCi0gICAgaWYgKEFkZElkKGtTb3VyY2VJZCwgSEFTX0FVRElPIHwgSEFTX1ZJREVPKSAhPSBDaHVua0RlbXV4ZXI6OmtPaykKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEFwcGVuZCB0aGUgd2hvbGUgYmVhcjEgZmlsZS4KLSAgICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIpKS5UaW1lcyg3KTsKLSAgICAvLyBFeHBlY3QgZHVyYXRpb24gYWRqdXN0bWVudCBzaW5jZSBhY3R1YWwgZHVyYXRpb24gZGlmZmVycyBzbGlnaHRseSBmcm9tCi0gICAgLy8gZHVyYXRpb24gaW4gdGhlIGluaXQgc2VnbWVudC4KLSAgICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3NDYpKSk7Ci0gICAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YShiZWFyMS0+ZGF0YSgpLCBiZWFyMS0+ZGF0YV9zaXplKCkpKTsKLSAgICAvLyBMYXN0IGF1ZGlvIGZyYW1lIGhhcyB0aW1lc3RhbXAgMjcyMSBhbmQgZHVyYXRpb24gMjQgKGVzdGltYXRlZCBmcm9tIG1heAotICAgIC8vIHNlZW4gc28gZmFyIGZvciBhdWRpbyB0cmFjaykuCi0gICAgLy8gTGFzdCB2aWRlbyBmcmFtZSBoYXMgdGltZXN0YW1wIDI3MDMgYW5kIGR1cmF0aW9uIDMzIChmcm9tIFRyYWNrRW50cnkKLSAgICAvLyBEZWZhdWx0RHVyYXRpb24gZm9yIHZpZGVvIHRyYWNrKS4KLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDI3MzYpIH0iKTsKLQotICAgIC8vIEFwcGVuZCBpbml0aWFsaXphdGlvbiBzZWdtZW50IGZvciBiZWFyMi4KLSAgICAvLyBOb3RlOiBPZmZzZXRzIGhlcmUgYW5kIGJlbG93IGFyZSBkZXJpdmVkIGZyb20KLSAgICAvLyBtZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLW1hbmlmZXN0LmpzIGFuZAotICAgIC8vIG1lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtbWFuaWZlc3QuanMgd2hpY2ggd2VyZQotICAgIC8vIGdlbmVyYXRlZCBmcm9tIG1lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAud2VibSBhbmQKLSAgICAvLyBtZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLndlYm0gcmVzcGVjdGl2ZWx5LgotICAgIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gICAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YShiZWFyMi0+ZGF0YSgpLCA0MzQwKSk7Ci0KLSAgICAvLyBBcHBlbmQgYSBtZWRpYSBzZWdtZW50IHRoYXQgZ29lcyBmcm9tIFswLjUyNzAwMCwgMS4wMTQwMDApLgotICAgIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMikpOwotICAgIEVYUEVDVF9NRURJQV9MT0coR2VuZXJhdGVkU3BsaWNlKDIwMDAwLCA1MjcwMDApKTsKLSAgICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhKGJlYXIyLT5kYXRhKCkgKyA1NTI5MCwgMTg3ODUpKTsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDEwMjcpIFsxMjAxLDI3MzYpIH0iKTsKLQotICAgIC8vIEFwcGVuZCBpbml0aWFsaXphdGlvbiBzZWdtZW50IGZvciBiZWFyMSAmIGZpbGwgZ2FwIHdpdGggWzc3OS0xMTk3KQotICAgIC8vIHNlZ21lbnQuCi0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhKGJlYXIxLT5kYXRhKCksIDQzNzApKTsKLSAgICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIzKSk7Ci0gICAgRVhQRUNUX01FRElBX0xPRyhHZW5lcmF0ZWRTcGxpY2UoMjYwMDAsIDc3OTAwMCkpOwotICAgIEVYUEVDVF9UUlVFKEFwcGVuZERhdGEoYmVhcjEtPmRhdGEoKSArIDcyNzM3LCAyODE4MykpOwotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMjczNikgfSIpOwotCi0gICAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgU2h1dGRvd25EZW11eGVyKCkgewotICAgIGlmIChkZW11eGVyXykgewotICAgICAgZGVtdXhlcl8tPlNodXRkb3duKCk7Ci0gICAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBBZGRTaW1wbGVCbG9jayhDbHVzdGVyQnVpbGRlciogY2IsIGludCB0cmFja19udW0sIGludDY0X3QgdGltZWNvZGUpIHsKLSAgICB1aW50OF90IGRhdGFbXSA9IHsweDAwfTsKLSAgICBjYi0+QWRkU2ltcGxlQmxvY2sodHJhY2tfbnVtLCB0aW1lY29kZSwgMCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBHZW5lcmF0ZUNsdXN0ZXIoaW50IHRpbWVjb2RlLCBpbnQgYmxvY2tfY291bnQpIHsKLSAgICByZXR1cm4gR2VuZXJhdGVDbHVzdGVyKHRpbWVjb2RlLCB0aW1lY29kZSwgYmxvY2tfY291bnQpOwotICB9Ci0KLSAgdm9pZCBBZGRWaWRlb0Jsb2NrR3JvdXAoQ2x1c3RlckJ1aWxkZXIqIGNiLCBpbnQgdHJhY2tfbnVtLCBpbnQ2NF90IHRpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVyYXRpb24sIGludCBmbGFncykgewotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPQotICAgICAgICAoZmxhZ3MgJiBrV2ViTUZsYWdLZXlmcmFtZSkgIT0gMCA/IGtWUDhLZXlmcmFtZSA6IGtWUDhJbnRlcmZyYW1lOwotICAgIGludCBzaXplID0gKGZsYWdzICYga1dlYk1GbGFnS2V5ZnJhbWUpICE9IDAgPyBzaXplb2Yoa1ZQOEtleWZyYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzaXplb2Yoa1ZQOEludGVyZnJhbWUpOwotICAgIGNiLT5BZGRCbG9ja0dyb3VwKHRyYWNrX251bSwgdGltZWNvZGUsIGR1cmF0aW9uLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIGtXZWJNRmxhZ0tleWZyYW1lLCBkYXRhLCBzaXplKTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBHZW5lcmF0ZUNsdXN0ZXIoaW50IGZpcnN0X2F1ZGlvX3RpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaXJzdF92aWRlb190aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxvY2tfY291bnQpIHsKLSAgICByZXR1cm4gR2VuZXJhdGVDbHVzdGVyKGZpcnN0X2F1ZGlvX3RpbWVjb2RlLCBmaXJzdF92aWRlb190aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2NvdW50LCBmYWxzZSk7Ci0gIH0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IEdlbmVyYXRlQ2x1c3RlcihpbnQgZmlyc3RfYXVkaW9fdGltZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0X3ZpZGVvX3RpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19jb3VudCwgYm9vbCB1bmtub3duX3NpemUpIHsKLSAgICBDSEVDS19HVChibG9ja19jb3VudCwgMCk7Ci0KLSAgICBzdGQ6OnByaW9yaXR5X3F1ZXVlPEJsb2NrSW5mbz4gYmxvY2tfcXVldWU7Ci0KLSAgICBpZiAoYmxvY2tfY291bnQgPT0gMSkgewotICAgICAgYmxvY2tfcXVldWUucHVzaChCbG9ja0luZm8oa0F1ZGlvVHJhY2tOdW0sIGZpcnN0X2F1ZGlvX3RpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1dlYk1GbGFnS2V5ZnJhbWUsIGtBdWRpb0Jsb2NrRHVyYXRpb24pKTsKLSAgICAgIHJldHVybiBHZW5lcmF0ZUNsdXN0ZXIoYmxvY2tfcXVldWUsIHVua25vd25fc2l6ZSk7Ci0gICAgfQotCi0gICAgaW50IGF1ZGlvX3RpbWVjb2RlID0gZmlyc3RfYXVkaW9fdGltZWNvZGU7Ci0gICAgaW50IHZpZGVvX3RpbWVjb2RlID0gZmlyc3RfdmlkZW9fdGltZWNvZGU7Ci0KLSAgICAvLyBDcmVhdGUgc2ltcGxlIGJsb2NrcyBmb3IgZXZlcnl0aGluZyBleGNlcHQgdGhlIGxhc3QgMiBibG9ja3MuCi0gICAgLy8gVGhlIGZpcnN0IHZpZGVvIGZyYW1lIG11c3QgYmUgYSBrZXkgZnJhbWUuCi0gICAgdWludDhfdCB2aWRlb19mbGFnID0ga1dlYk1GbGFnS2V5ZnJhbWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja19jb3VudCAtIDI7IGkrKykgewotICAgICAgaWYgKGF1ZGlvX3RpbWVjb2RlIDw9IHZpZGVvX3RpbWVjb2RlKSB7Ci0gICAgICAgIGJsb2NrX3F1ZXVlLnB1c2goCi0gICAgICAgICAgICBCbG9ja0luZm8oa0F1ZGlvVHJhY2tOdW0sIGF1ZGlvX3RpbWVjb2RlLCBrV2ViTUZsYWdLZXlmcmFtZSwgMCkpOwotICAgICAgICBhdWRpb190aW1lY29kZSArPSBrQXVkaW9CbG9ja0R1cmF0aW9uOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgYmxvY2tfcXVldWUucHVzaCgKLSAgICAgICAgICBCbG9ja0luZm8oa1ZpZGVvVHJhY2tOdW0sIHZpZGVvX3RpbWVjb2RlLCB2aWRlb19mbGFnLCAwKSk7Ci0gICAgICB2aWRlb190aW1lY29kZSArPSBrVmlkZW9CbG9ja0R1cmF0aW9uOwotICAgICAgdmlkZW9fZmxhZyA9IDA7Ci0gICAgfQotCi0gICAgLy8gTWFrZSB0aGUgbGFzdCAyIGJsb2NrcyBCbG9ja0dyb3VwcyBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGRlbGF5ZWQgYnkgdGhlCi0gICAgLy8gYmxvY2sgZHVyYXRpb24gY2FsY3VsYXRpb24gbG9naWMuCi0gICAgYmxvY2tfcXVldWUucHVzaChCbG9ja0luZm8oa0F1ZGlvVHJhY2tOdW0sIGF1ZGlvX3RpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtXZWJNRmxhZ0tleWZyYW1lLCBrQXVkaW9CbG9ja0R1cmF0aW9uKSk7Ci0gICAgYmxvY2tfcXVldWUucHVzaChCbG9ja0luZm8oa1ZpZGVvVHJhY2tOdW0sIHZpZGVvX3RpbWVjb2RlLCB2aWRlb19mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtWaWRlb0Jsb2NrRHVyYXRpb24pKTsKLQotICAgIHJldHVybiBHZW5lcmF0ZUNsdXN0ZXIoYmxvY2tfcXVldWUsIHVua25vd25fc2l6ZSk7Ci0gIH0KLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKGludCB0aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kX3RpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFja19udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrX2R1cmF0aW9uKSB7Ci0gICAgQ0hFQ0tfR1QoZW5kX3RpbWVjb2RlLCB0aW1lY29kZSk7Ci0KLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhKGtCbG9ja1NpemUpOwotCi0gICAgQ2x1c3RlckJ1aWxkZXIgY2I7Ci0gICAgY2IuU2V0Q2x1c3RlclRpbWVjb2RlKHRpbWVjb2RlKTsKLQotICAgIC8vIENyZWF0ZSBzaW1wbGUgYmxvY2tzIGZvciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgbGFzdCBibG9jay4KLSAgICB3aGlsZSAodGltZWNvZGUgPCAoZW5kX3RpbWVjb2RlIC0gYmxvY2tfZHVyYXRpb24pKSB7Ci0gICAgICBjYi5BZGRTaW1wbGVCbG9jayh0cmFja19udW1iZXIsIHRpbWVjb2RlLCBrV2ViTUZsYWdLZXlmcmFtZSwgJmRhdGFbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNpemUoKSk7Ci0gICAgICB0aW1lY29kZSArPSBibG9ja19kdXJhdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAodHJhY2tfbnVtYmVyID09IGtWaWRlb1RyYWNrTnVtKSB7Ci0gICAgICBBZGRWaWRlb0Jsb2NrR3JvdXAoJmNiLCB0cmFja19udW1iZXIsIHRpbWVjb2RlLCBibG9ja19kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBrV2ViTUZsYWdLZXlmcmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNiLkFkZEJsb2NrR3JvdXAodHJhY2tfbnVtYmVyLCB0aW1lY29kZSwgYmxvY2tfZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgIGtXZWJNRmxhZ0tleWZyYW1lLCBzdGF0aWNfY2FzdDxib29sPihrV2ViTUZsYWdLZXlmcmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICZkYXRhWzBdLCBkYXRhLnNpemUoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNiLkZpbmlzaCgpOwotICB9Ci0KLSAgdm9pZCBSZWFkKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwgY29uc3QgRGVtdXhlclN0cmVhbTo6UmVhZENCJiByZWFkX2NiKSB7Ci0gICAgZGVtdXhlcl8tPkdldFN0cmVhbSh0eXBlKS0+UmVhZChyZWFkX2NiKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICB2b2lkIFJlYWRBdWRpbyhjb25zdCBEZW11eGVyU3RyZWFtOjpSZWFkQ0ImIHJlYWRfY2IpIHsKLSAgICBSZWFkKERlbXV4ZXJTdHJlYW06OkFVRElPLCByZWFkX2NiKTsKLSAgfQotCi0gIHZvaWQgUmVhZFZpZGVvKGNvbnN0IERlbXV4ZXJTdHJlYW06OlJlYWRDQiYgcmVhZF9jYikgewotICAgIFJlYWQoRGVtdXhlclN0cmVhbTo6VklERU8sIHJlYWRfY2IpOwotICB9Ci0KLSAgdm9pZCBHZW5lcmF0ZUV4cGVjdGVkUmVhZHMoaW50IHRpbWVjb2RlLCBpbnQgYmxvY2tfY291bnQpIHsKLSAgICBHZW5lcmF0ZUV4cGVjdGVkUmVhZHModGltZWNvZGUsIHRpbWVjb2RlLCBibG9ja19jb3VudCk7Ci0gIH0KLQotICB2b2lkIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcyhpbnQgc3RhcnRfYXVkaW9fdGltZWNvZGUsIGludCBzdGFydF92aWRlb190aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrX2NvdW50KSB7Ci0gICAgQ0hFQ0tfR1QoYmxvY2tfY291bnQsIDApOwotCi0gICAgaWYgKGJsb2NrX2NvdW50ID09IDEpIHsKLSAgICAgIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6QVVESU8sIHN0YXJ0X2F1ZGlvX3RpbWVjb2RlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgYXVkaW9fdGltZWNvZGUgPSBzdGFydF9hdWRpb190aW1lY29kZTsKLSAgICBpbnQgdmlkZW9fdGltZWNvZGUgPSBzdGFydF92aWRlb190aW1lY29kZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tfY291bnQ7IGkrKykgewotICAgICAgaWYgKGF1ZGlvX3RpbWVjb2RlIDw9IHZpZGVvX3RpbWVjb2RlKSB7Ci0gICAgICAgIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6QVVESU8sIGF1ZGlvX3RpbWVjb2RlKTsKLSAgICAgICAgYXVkaW9fdGltZWNvZGUgKz0ga0F1ZGlvQmxvY2tEdXJhdGlvbjsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6VklERU8sIHZpZGVvX3RpbWVjb2RlKTsKLSAgICAgIHZpZGVvX3RpbWVjb2RlICs9IGtWaWRlb0Jsb2NrRHVyYXRpb247Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUV4cGVjdGVkUmVhZHMoaW50IHRpbWVjb2RlLCBpbnQgYmxvY2tfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrX2R1cmF0aW9uKSB7Ci0gICAgQ0hFQ0tfR1QoYmxvY2tfY291bnQsIDApOwotICAgIGludCBzdHJlYW1fdGltZWNvZGUgPSB0aW1lY29kZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tfY291bnQ7IGkrKykgewotICAgICAgRXhwZWN0UmVhZCh0eXBlLCBzdHJlYW1fdGltZWNvZGUpOwotICAgICAgc3RyZWFtX3RpbWVjb2RlICs9IGJsb2NrX2R1cmF0aW9uOwotICAgIH0KLSAgfQotCi0gIHZvaWQgR2VuZXJhdGVBdWRpb1N0cmVhbUV4cGVjdGVkUmVhZHMoaW50IHRpbWVjb2RlLCBpbnQgYmxvY2tfY291bnQpIHsKLSAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUV4cGVjdGVkUmVhZHMoCi0gICAgICAgIHRpbWVjb2RlLCBibG9ja19jb3VudCwgRGVtdXhlclN0cmVhbTo6QVVESU8sIGtBdWRpb0Jsb2NrRHVyYXRpb24pOwotICB9Ci0KLSAgdm9pZCBHZW5lcmF0ZVZpZGVvU3RyZWFtRXhwZWN0ZWRSZWFkcyhpbnQgdGltZWNvZGUsIGludCBibG9ja19jb3VudCkgewotICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtRXhwZWN0ZWRSZWFkcygKLSAgICAgICAgdGltZWNvZGUsIGJsb2NrX2NvdW50LCBEZW11eGVyU3RyZWFtOjpWSURFTywga1ZpZGVvQmxvY2tEdXJhdGlvbik7Ci0gIH0KLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gR2VuZXJhdGVFbXB0eUNsdXN0ZXIoaW50IHRpbWVjb2RlKSB7Ci0gICAgQ2x1c3RlckJ1aWxkZXIgY2I7Ci0gICAgY2IuU2V0Q2x1c3RlclRpbWVjb2RlKHRpbWVjb2RlKTsKLSAgICByZXR1cm4gY2IuRmluaXNoKCk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRSYW5nZXNGb3JNZWRpYVNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWQpIHsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzKGRlbXV4ZXJfLT5HZXRCdWZmZXJlZFJhbmdlcygpLCBleHBlY3RlZCk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRSYW5nZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhrU291cmNlSWQsIGV4cGVjdGVkKTsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzRm9yTWVkaWFTb3VyY2UoZXhwZWN0ZWQpOwotICB9Ci0KLSAgdm9pZCBDaGVja0V4cGVjdGVkUmFuZ2VzKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhkZW11eGVyXy0+R2V0QnVmZmVyZWRSYW5nZXMoaWQpLCBleHBlY3RlZCk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgQ2h1bmtEZW11eGVyU3RyZWFtKiBzdHJlYW0gPQotICAgICAgICBzdGF0aWNfY2FzdDxDaHVua0RlbXV4ZXJTdHJlYW0qPihkZW11eGVyXy0+R2V0U3RyZWFtKHR5cGUpKTsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzKHN0cmVhbS0+R2V0QnVmZmVyZWRSYW5nZXMoa0RlZmF1bHREdXJhdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKTsKLSAgfQotCi0gIHZvaWQgQ2hlY2tFeHBlY3RlZFJhbmdlcyhjb25zdCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZCkgewotICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICAgIHNzIDw8ICJ7ICI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByLnNpemUoKTsgKytpKSB7Ci0gICAgICBzcyA8PCAiWyIgPDwgci5zdGFydChpKS5Jbk1pbGxpc2Vjb25kcygpIDw8ICIsIgotICAgICAgICAgPDwgci5lbmQoaSkuSW5NaWxsaXNlY29uZHMoKSA8PCAiKSAiOwotICAgIH0KLSAgICBzcyA8PCAifSI7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBzcy5zdHIoKSk7Ci0gIH0KLQotICBNT0NLX01FVEhPRDIoUmVhZERvbmUsIHZvaWQoRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mKSk7Ci0KLSAgdm9pZCBTdG9yZVN0YXR1c0FuZEJ1ZmZlcihEZW11eGVyU3RyZWFtOjpTdGF0dXMqIHN0YXR1c19vdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiogYnVmZmVyX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgICpzdGF0dXNfb3V0ID0gc3RhdHVzOwotICAgICpidWZmZXJfb3V0ID0gYnVmZmVyOwotICB9Ci0KLSAgdm9pZCBSZWFkVW50aWxOb3RPa09yRW5kT2ZTdHJlYW0oRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpTdGF0dXMqIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKiBsYXN0X3RpbWVzdGFtcCkgewotICAgIERlbXV4ZXJTdHJlYW0qIHN0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0odHlwZSk7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXI7Ci0KLSAgICAqbGFzdF90aW1lc3RhbXAgPSBrTm9UaW1lc3RhbXA7Ci0gICAgZG8gewotICAgICAgc3RyZWFtLT5SZWFkKGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlclRlc3Q6OlN0b3JlU3RhdHVzQW5kQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgc3RhdHVzLCAmYnVmZmVyKSk7Ci0gICAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gICAgICBpZiAoKnN0YXR1cyA9PSBEZW11eGVyU3RyZWFtOjprT2sgJiYgIWJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKQotICAgICAgICAqbGFzdF90aW1lc3RhbXAgPSBidWZmZXItPnRpbWVzdGFtcCgpOwotICAgIH0gd2hpbGUgKCpzdGF0dXMgPT0gRGVtdXhlclN0cmVhbTo6a09rICYmICFidWZmZXItPmVuZF9vZl9zdHJlYW0oKSk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdEVuZE9mU3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICAgIEVYUEVDVF9DQUxMKCp0aGlzLCBSZWFkRG9uZShEZW11eGVyU3RyZWFtOjprT2ssIElzRW5kT2ZTdHJlYW0oKSkpOwotICAgIGRlbXV4ZXJfLT5HZXRTdHJlYW0odHlwZSktPlJlYWQoCi0gICAgICAgIGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlclRlc3Q6OlJlYWREb25lLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICB9Ci0KLSAgdm9pZCBFeHBlY3RSZWFkKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwgaW50NjRfdCB0aW1lc3RhbXBfaW5fbXMpIHsKLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywKLSAgICAgICAgICAgICAgICBSZWFkRG9uZShEZW11eGVyU3RyZWFtOjprT2ssIEhhc1RpbWVzdGFtcCh0aW1lc3RhbXBfaW5fbXMpKSk7Ci0gICAgZGVtdXhlcl8tPkdldFN0cmVhbSh0eXBlKS0+UmVhZCgKLSAgICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6UmVhZERvbmUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICB2b2lkIEV4cGVjdENvbmZpZ0NoYW5nZWQoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlKSB7Ci0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIFJlYWREb25lKERlbXV4ZXJTdHJlYW06OmtDb25maWdDaGFuZ2VkLCBfKSk7Ci0gICAgZGVtdXhlcl8tPkdldFN0cmVhbSh0eXBlKS0+UmVhZCgKLSAgICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6UmVhZERvbmUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRCdWZmZXJzKERlbXV4ZXJTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWQpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGltZXN0YW1wcyA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgICBleHBlY3RlZCwgIiAiLCBiYXNlOjpUUklNX1dISVRFU1BBQ0UsIGJhc2U6OlNQTElUX1dBTlRfQUxMKTsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVzdGFtcHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIC8vIEluaXRpYWxpemUgc3RhdHVzIHRvIGtBYm9ydGVkIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIFJlYWQoKSB0byByZXR1cm4KLSAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyBTdG9yZVN0YXR1c0FuZEJ1ZmZlcigpIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgYnVmZmVycwotICAgICAgLy8gbGVmdCB0byByZXR1cm4uCi0gICAgICBEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzID0gRGVtdXhlclN0cmVhbTo6a0Fib3J0ZWQ7Ci0gICAgICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlcjsKLSAgICAgIHN0cmVhbS0+UmVhZChiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXJUZXN0OjpTdG9yZVN0YXR1c0FuZEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcyksICZzdGF0dXMsICZidWZmZXIpKTsKLSAgICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgICAgIGlmIChzdGF0dXMgIT0gRGVtdXhlclN0cmVhbTo6a09rIHx8IGJ1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKSBicmVhazsKLQotICAgICAgaWYgKGkgPiAwKSBzcyA8PCAiICI7Ci0gICAgICBzcyA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluTWlsbGlzZWNvbmRzKCk7Ci0KLSAgICAgIGlmIChidWZmZXItPmlzX2tleV9mcmFtZSgpKSBzcyA8PCAiSyI7Ci0KLSAgICAgIC8vIEhhbmRsZSBwcmVyb2xsIGJ1ZmZlcnMuCi0gICAgICBpZiAoYmFzZTo6RW5kc1dpdGgodGltZXN0YW1wc1tpXSwgIlAiLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICBBU1NFUlRfRVEoa0luZmluaXRlRHVyYXRpb24sIGJ1ZmZlci0+ZGlzY2FyZF9wYWRkaW5nKCkuZmlyc3QpOwotICAgICAgICBBU1NFUlRfRVEoYmFzZTo6VGltZURlbHRhKCksIGJ1ZmZlci0+ZGlzY2FyZF9wYWRkaW5nKCkuc2Vjb25kKTsKLSAgICAgICAgc3MgPDwgIlAiOwotICAgICAgfQotICAgIH0KLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHNzLnN0cigpKTsKLSAgfQotCi0gIE1PQ0tfTUVUSE9EMShDaGVja3BvaW50LCB2b2lkKGludCBpZCkpOwotCi0gIHN0cnVjdCBCdWZmZXJUaW1lc3RhbXBzIHsKLSAgICBpbnQgdmlkZW9fdGltZV9tczsKLSAgICBpbnQgYXVkaW9fdGltZV9tczsKLSAgfTsKLSAgc3RhdGljIGNvbnN0IGludCBrU2tpcCA9IC0xOwotCi0gIC8vIFRlc3QgcGFyc2luZyBhIFdlYk0gZmlsZS4KLSAgLy8gfGZpbGVuYW1lfCAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIG1lZGlhL3Rlc3QvZGF0YSB0byBwYXJzZS4KLSAgLy8gfHRpbWVzdGFtcHN8IC0gVGhlIGV4cGVjdGVkIHRpbWVzdGFtcHMgb24gdGhlIHBhcnNlZCBidWZmZXJzLgotICAvLyAgICBhIHRpbWVzdGFtcCBvZiBrU2tpcCBpbmRpY2F0ZXMgdGhhdCBhIFJlYWQoKSBjYWxsIGZvciB0aGF0IHN0cmVhbQotICAvLyAgICBzaG91bGRuJ3QgYmUgbWFkZSBvbiB0aGF0IGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC4gSWYgYm90aCBzdHJlYW1zIGhhdmUKLSAgLy8gICAgYSBrU2tpcCB0aGVuIHRoZSBsb29wIHdpbGwgdGVybWluYXRlLgotICBib29sIFBhcnNlV2ViTUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyVGltZXN0YW1wcyogdGltZXN0YW1wcywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZHVyYXRpb24pIHsKLSAgICByZXR1cm4gUGFyc2VXZWJNRmlsZShmaWxlbmFtZSwgdGltZXN0YW1wcywgZHVyYXRpb24sIEhBU19BVURJTyB8IEhBU19WSURFTyk7Ci0gIH0KLQotICBib29sIFBhcnNlV2ViTUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyVGltZXN0YW1wcyogdGltZXN0YW1wcywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSYgZHVyYXRpb24sIGludCBzdHJlYW1fZmxhZ3MpIHsKLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgmaG9zdF8sIENyZWF0ZUluaXREb25lQ0IoZHVyYXRpb24sIFBJUEVMSU5FX09LKSwgdHJ1ZSk7Ci0KLSAgICBpZiAoQWRkSWQoa1NvdXJjZUlkLCBzdHJlYW1fZmxhZ3MpICE9IENodW5rRGVtdXhlcjo6a09rKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSZWFkIGEgV2ViTSBmaWxlIGludG8gbWVtb3J5IGFuZCBzZW5kIHRoZSBkYXRhIHRvIHRoZSBkZW11eGVyLgotICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gUmVhZFRlc3REYXRhRmlsZShmaWxlbmFtZSk7Ci0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YV9zaXplKCksIDUxMikpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRpbWVzdGFtcHMgb24gdGhlIGZpcnN0IGZldyBwYWNrZXRzIG1hdGNoIHdoYXQgd2UKLSAgICAvLyBleHBlY3QuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7ICh0aW1lc3RhbXBzW2ldLmF1ZGlvX3RpbWVfbXMgIT0ga1NraXAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNbaV0udmlkZW9fdGltZV9tcyAhPSBrU2tpcCk7Ci0gICAgICAgICBpKyspIHsKLSAgICAgIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gICAgICBib29sIHZpZGVvX3JlYWRfZG9uZSA9IGZhbHNlOwotCi0gICAgICBpZiAodGltZXN0YW1wc1tpXS5hdWRpb190aW1lX21zICE9IGtTa2lwKSB7Ci0gICAgICAgIFJlYWRBdWRpbyhiYXNlOjpCaW5kKAotICAgICAgICAgICAgJk9uUmVhZERvbmUsCi0gICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHModGltZXN0YW1wc1tpXS5hdWRpb190aW1lX21zKSwKLSAgICAgICAgICAgICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYXVkaW9fcmVhZF9kb25lKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRpbWVzdGFtcHNbaV0udmlkZW9fdGltZV9tcyAhPSBrU2tpcCkgewotICAgICAgICBSZWFkVmlkZW8oYmFzZTo6QmluZCgKLSAgICAgICAgICAgICZPblJlYWREb25lLAotICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKHRpbWVzdGFtcHNbaV0udmlkZW9fdGltZV9tcyksCi0gICAgICAgICAgICAmdmlkZW9fcmVhZF9kb25lKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZpZGVvX3JlYWRfZG9uZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBNT0NLX01FVEhPRDAoRGVtdXhlck9wZW5lZCwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QyKE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSwKLSAgICAgICAgICAgICAgIHZvaWQoRW1lSW5pdERhdGFUeXBlIGluaXRfZGF0YV90eXBlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdF9kYXRhKSk7Ci0KLSAgTU9DS19NRVRIT0QxKEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrLCB2b2lkKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4mKSk7Ci0KLSAgdm9pZCBTZWVrKGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUpIHsKLSAgICBkZW11eGVyXy0+U3RhcnRXYWl0aW5nRm9yU2VlayhzZWVrX3RpbWUpOwotICAgIGRlbXV4ZXJfLT5TZWVrKHNlZWtfdGltZSwgTmV3RXhwZWN0ZWRTdGF0dXNDQihQSVBFTElORV9PSykpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgfQotCi0gIHZvaWQgTWFya0VuZE9mU3RyZWFtKFBpcGVsaW5lU3RhdHVzIHN0YXR1cykgewotICAgIGRlbXV4ZXJfLT5NYXJrRW5kT2ZTdHJlYW0oc3RhdHVzKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICBib29sIFNldFRpbWVzdGFtcE9mZnNldChjb25zdCBzdGQ6OnN0cmluZyYgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfb2Zmc2V0KSB7Ci0gICAgaWYgKGRlbXV4ZXJfLT5Jc1BhcnNpbmdNZWRpYVNlZ21lbnQoaWQpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aW1lc3RhbXBfb2Zmc2V0X21hcF9baWRdID0gdGltZXN0YW1wX29mZnNldDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcF87Ci0gIE1vY2tEZW11eGVySG9zdCBob3N0XzsKLQotICBzY29wZWRfcmVmcHRyPFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPj4gbWVkaWFfbG9nXzsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2h1bmtEZW11eGVyPiBkZW11eGVyXzsKLSAgRGVtdXhlcjo6TWVkaWFUcmFja3NVcGRhdGVkQ0IgaW5pdF9zZWdtZW50X3JlY2VpdmVkX2NiXzsKLQotICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfOwotICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXzsKLQotICAvLyBNYXAgb2Ygc291cmNlIGlkIHRvIHRpbWVzdGFtcCBvZmZzZXQgdG8gdXNlIGZvciB0aGUgbmV4dCBBcHBlbmREYXRhKCkKLSAgLy8gb3BlcmF0aW9uIGZvciB0aGF0IHNvdXJjZSBpZC4KLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGJhc2U6OlRpbWVEZWx0YT4gdGltZXN0YW1wX29mZnNldF9tYXBfOwotCi0gcHVibGljOgotICB2b2lkIEluaXRTZWdtZW50UmVjZWl2ZWQoc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MpIHsKLSAgICBEQ0hFQ0sodHJhY2tzLmdldCgpKTsKLSAgICBEQ0hFQ0tfR1QodHJhY2tzLT50cmFja3MoKS5zaXplKCksIDB1KTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHRyYWNrIGlkcyBhcmUgdW5pcXVlLgotICAgIHN0ZDo6c2V0PE1lZGlhVHJhY2s6OklkPiB0cmFja19pZHM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFjayA6IHRyYWNrcy0+dHJhY2tzKCkpIHsKLSAgICAgIEVYUEVDVF9FUSh0cmFja19pZHMuZW5kKCksIHRyYWNrX2lkcy5maW5kKHRyYWNrLT5pZCgpKSk7Ci0gICAgICB0cmFja19pZHMuaW5zZXJ0KHRyYWNrLT5pZCgpKTsKLSAgICB9Ci0KLSAgICBJbml0U2VnbWVudFJlY2VpdmVkTW9jayh0cmFja3MpOwotICB9Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ2h1bmtEZW11eGVyVGVzdCk7Ci19OwotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgSW5pdCkgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgLy8gVGVzdCBubyBzdHJlYW1zLCBhdWRpby1vbmx5LCB2aWRlby1vbmx5LCBhbmQgYXVkaW8gJiB2aWRlbyBzY2VuYXJpb3MuCi0gIC8vIEF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zIGNhbiBiZSBlbmNyeXB0ZWQgb3Igbm90IGVuY3J5cHRlZC4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgYm9vbCBoYXNfYXVkaW8gPSAoaSAmIDB4MSkgIT0gMDsKLSAgICBib29sIGhhc192aWRlbyA9IChpICYgMHgyKSAhPSAwOwotICAgIGJvb2wgaXNfYXVkaW9fZW5jcnlwdGVkID0gKGkgJiAweDQpICE9IDA7Ci0gICAgYm9vbCBpc192aWRlb19lbmNyeXB0ZWQgPSAoaSAmIDB4OCkgIT0gMDsKLQotICAgIC8vIE5vIHRlc3Qgb24gaW52YWxpZCBjb21iaW5hdGlvbi4KLSAgICBpZiAoKCFoYXNfYXVkaW8gJiYgaXNfYXVkaW9fZW5jcnlwdGVkKSB8fAotICAgICAgICAoIWhhc192aWRlbyAmJiBpc192aWRlb19lbmNyeXB0ZWQpKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0KLSAgICBpbnQgc3RyZWFtX2ZsYWdzID0gMDsKLSAgICBpZiAoaGFzX2F1ZGlvKSBzdHJlYW1fZmxhZ3MgfD0gSEFTX0FVRElPOwotCi0gICAgaWYgKGhhc192aWRlbykgc3RyZWFtX2ZsYWdzIHw9IEhBU19WSURFTzsKLQotICAgIGlmIChoYXNfYXVkaW8gfHwgaGFzX3ZpZGVvKSB7Ci0gICAgICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcldpdGhFbmNyeXB0aW9uSW5mbygKLSAgICAgICAgICBzdHJlYW1fZmxhZ3MsIGlzX2F1ZGlvX2VuY3J5cHRlZCwgaXNfdmlkZW9fZW5jcnlwdGVkKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEFTU0VSVF9GQUxTRShJbml0RGVtdXhlcldpdGhFbmNyeXB0aW9uSW5mbygKLSAgICAgICAgICBzdHJlYW1fZmxhZ3MsIGlzX2F1ZGlvX2VuY3J5cHRlZCwgaXNfdmlkZW9fZW5jcnlwdGVkKSk7Ci0gICAgfQotCi0gICAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gICAgaWYgKGhhc19hdWRpbykgewotICAgICAgQVNTRVJUX1RSVUUoYXVkaW9fc3RyZWFtKTsKLQotICAgICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcgPSBhdWRpb19zdHJlYW0tPmF1ZGlvX2RlY29kZXJfY29uZmlnKCk7Ci0gICAgICBFWFBFQ1RfRVEoa0NvZGVjVm9yYmlzLCBjb25maWcuY29kZWMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoMzIsIGNvbmZpZy5iaXRzX3Blcl9jaGFubmVsKCkpOwotICAgICAgRVhQRUNUX0VRKENIQU5ORUxfTEFZT1VUX1NURVJFTywgY29uZmlnLmNoYW5uZWxfbGF5b3V0KCkpOwotICAgICAgRVhQRUNUX0VRKDQ0MTAwLCBjb25maWcuc2FtcGxlc19wZXJfc2Vjb25kKCkpOwotICAgICAgRVhQRUNUX0dUKGNvbmZpZy5leHRyYV9kYXRhKCkuc2l6ZSgpLCAwdSk7Ci0gICAgICBFWFBFQ1RfRVEoa1NhbXBsZUZvcm1hdFBsYW5hckYzMiwgY29uZmlnLnNhbXBsZV9mb3JtYXQoKSk7Ci0gICAgICBFWFBFQ1RfRVEoaXNfYXVkaW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKS5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxDaHVua0RlbXV4ZXJTdHJlYW0qPihhdWRpb19zdHJlYW0pCi0gICAgICAgICAgICAgICAgICAgICAgLT5zdXBwb3J0c19wYXJ0aWFsX2FwcGVuZF93aW5kb3dfdHJpbW1pbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVYUEVDVF9GQUxTRShhdWRpb19zdHJlYW0pOwotICAgIH0KLQotICAgIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotICAgIGlmIChoYXNfdmlkZW8pIHsKLSAgICAgIEVYUEVDVF9UUlVFKHZpZGVvX3N0cmVhbSk7Ci0gICAgICBFWFBFQ1RfRVEoaXNfdmlkZW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgIHZpZGVvX3N0cmVhbS0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKS5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Q2h1bmtEZW11eGVyU3RyZWFtKj4odmlkZW9fc3RyZWFtKQotICAgICAgICAgICAgICAgICAgICAgICAtPnN1cHBvcnRzX3BhcnRpYWxfYXBwZW5kX3dpbmRvd190cmltbWluZygpKTsKLSAgICB9IGVsc2UgewotICAgICAgRVhQRUNUX0ZBTFNFKHZpZGVvX3N0cmVhbSk7Ci0gICAgfQotCi0gICAgU2h1dGRvd25EZW11eGVyKCk7Ci0gICAgZGVtdXhlcl8ucmVzZXQoKTsKLSAgfQotfQotCi0vLyBUT0RPKGFjb2x3ZWxsKTogRm9sZCB0aGlzIHRlc3QgaW50byBJbml0IHRlc3RzIHNpbmNlIHRoZSB0ZXN0cyBhcmUKLS8vIGFsbW9zdCBpZGVudGljYWwuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgSW5pdFRleHQpIHsKLSAgLy8gVGVzdCB3aXRoIDEgdmlkZW8gc3RyZWFtIGFuZCAxIHRleHQgc3RyZWFtcywgYW5kIDAgb3IgMSBhdWRpbyBzdHJlYW1zLgotICAvLyBObyBlbmNyeXB0aW9uIGNhc2VzIGhhbmRsZWQgaGVyZS4KLSAgYm9vbCBoYXNfdmlkZW8gPSB0cnVlOwotICBib29sIGlzX2F1ZGlvX2VuY3J5cHRlZCA9IGZhbHNlOwotICBib29sIGlzX3ZpZGVvX2VuY3J5cHRlZCA9IGZhbHNlOwotICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotICAgIGJvb2wgaGFzX2F1ZGlvID0gKGkgJiAweDEpICE9IDA7Ci0KLSAgICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0KLSAgICBEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSA9IE5VTEw7Ci0gICAgVGV4dFRyYWNrQ29uZmlnIHRleHRfY29uZmlnOwotICAgIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKQotICAgICAgICAuV2lsbE9uY2UoRG9BbGwoU2F2ZUFyZzwwPigmdGV4dF9zdHJlYW0pLCBTYXZlQXJnPDE+KCZ0ZXh0X2NvbmZpZykpKTsKLQotICAgIGludCBzdHJlYW1fZmxhZ3MgPSBIQVNfVEVYVDsKLSAgICBpZiAoaGFzX2F1ZGlvKSBzdHJlYW1fZmxhZ3MgfD0gSEFTX0FVRElPOwotCi0gICAgaWYgKGhhc192aWRlbykgc3RyZWFtX2ZsYWdzIHw9IEhBU19WSURFTzsKLQotICAgIEFTU0VSVF9UUlVFKEluaXREZW11eGVyV2l0aEVuY3J5cHRpb25JbmZvKHN0cmVhbV9mbGFncywgaXNfYXVkaW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZpZGVvX2VuY3J5cHRlZCkpOwotICAgIEFTU0VSVF9UUlVFKHRleHRfc3RyZWFtKTsKLSAgICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6VEVYVCwgdGV4dF9zdHJlYW0tPnR5cGUoKSk7Ci0gICAgRVhQRUNUX0VRKGtUZXh0U3VidGl0bGVzLCB0ZXh0X2NvbmZpZy5raW5kKCkpOwotICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxDaHVua0RlbXV4ZXJTdHJlYW0qPih0ZXh0X3N0cmVhbSkKLSAgICAgICAgICAgICAgICAgICAgIC0+c3VwcG9ydHNfcGFydGlhbF9hcHBlbmRfd2luZG93X3RyaW1taW5nKCkpOwotCi0gICAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gICAgaWYgKGhhc19hdWRpbykgewotICAgICAgQVNTRVJUX1RSVUUoYXVkaW9fc3RyZWFtKTsKLQotICAgICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcgPSBhdWRpb19zdHJlYW0tPmF1ZGlvX2RlY29kZXJfY29uZmlnKCk7Ci0gICAgICBFWFBFQ1RfRVEoa0NvZGVjVm9yYmlzLCBjb25maWcuY29kZWMoKSk7Ci0gICAgICBFWFBFQ1RfRVEoMzIsIGNvbmZpZy5iaXRzX3Blcl9jaGFubmVsKCkpOwotICAgICAgRVhQRUNUX0VRKENIQU5ORUxfTEFZT1VUX1NURVJFTywgY29uZmlnLmNoYW5uZWxfbGF5b3V0KCkpOwotICAgICAgRVhQRUNUX0VRKDQ0MTAwLCBjb25maWcuc2FtcGxlc19wZXJfc2Vjb25kKCkpOwotICAgICAgRVhQRUNUX0dUKGNvbmZpZy5leHRyYV9kYXRhKCkuc2l6ZSgpLCAwdSk7Ci0gICAgICBFWFBFQ1RfRVEoa1NhbXBsZUZvcm1hdFBsYW5hckYzMiwgY29uZmlnLnNhbXBsZV9mb3JtYXQoKSk7Ci0gICAgICBFWFBFQ1RfRVEoaXNfYXVkaW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKS5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgICBFWFBFQ1RfVFJVRShzdGF0aWNfY2FzdDxDaHVua0RlbXV4ZXJTdHJlYW0qPihhdWRpb19zdHJlYW0pCi0gICAgICAgICAgICAgICAgICAgICAgLT5zdXBwb3J0c19wYXJ0aWFsX2FwcGVuZF93aW5kb3dfdHJpbW1pbmcoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVYUEVDVF9GQUxTRShhdWRpb19zdHJlYW0pOwotICAgIH0KLQotICAgIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotICAgIGlmIChoYXNfdmlkZW8pIHsKLSAgICAgIEVYUEVDVF9UUlVFKHZpZGVvX3N0cmVhbSk7Ci0gICAgICBFWFBFQ1RfRVEoaXNfdmlkZW9fZW5jcnlwdGVkLAotICAgICAgICAgICAgICAgIHZpZGVvX3N0cmVhbS0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKS5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8Q2h1bmtEZW11eGVyU3RyZWFtKj4odmlkZW9fc3RyZWFtKQotICAgICAgICAgICAgICAgICAgICAgICAtPnN1cHBvcnRzX3BhcnRpYWxfYXBwZW5kX3dpbmRvd190cmltbWluZygpKTsKLSAgICB9IGVsc2UgewotICAgICAgRVhQRUNUX0ZBTFNFKHZpZGVvX3N0cmVhbSk7Ci0gICAgfQotCi0gICAgU2h1dGRvd25EZW11eGVyKCk7Ci0gICAgZGVtdXhlcl8ucmVzZXQoKTsKLSAgfQotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2luZ2xlVGV4dFRyYWNrSWRDaGFuZ2UpIHsKLSAgLy8gVGVzdCB3aXRoIDEgdmlkZW8gc3RyZWFtLCAxIGF1ZGlvLCBhbmQgMSB0ZXh0IHN0cmVhbS4gU2VuZCBhIHNlY29uZCBpbml0Ci0gIC8vIHNlZ21lbnQgaW4gd2hpY2ggdGhlIHRleHQgdHJhY2sgSUQgY2hhbmdlcy4gVmVyaWZ5IGFwcGVuZGVkIGJ1ZmZlcnMgYmVmb3JlCi0gIC8vIGFuZCBhZnRlciB0aGUgc2Vjb25kIGluaXQgc2VnbWVudCBtYXAgdG8gdGhlIHNhbWUgdW5kZXJseWluZyB0cmFjayBidWZmZXJzLgotICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0gIERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtID0gTlVMTDsKLSAgVGV4dFRyYWNrQ29uZmlnIHRleHRfY29uZmlnOwotICBFWFBFQ1RfQ0FMTChob3N0XywgQWRkVGV4dFN0cmVhbShfLCBfKSkKLSAgICAgIC5XaWxsT25jZShEb0FsbChTYXZlQXJnPDA+KCZ0ZXh0X3N0cmVhbSksIFNhdmVBcmc8MT4oJnRleHRfY29uZmlnKSkpOwotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcldpdGhFbmNyeXB0aW9uSW5mbyhIQVNfVEVYVCB8IEhBU19BVURJTyB8IEhBU19WSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fc3RyZWFtKTsKLSAgQVNTRVJUX1RSVUUodmlkZW9fc3RyZWFtKTsKLSAgQVNTRVJUX1RSVUUodGV4dF9zdHJlYW0pOwotCi0gIEFwcGVuZE11eGVkQ2x1c3RlcihNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sICIwSyAyM0siLCAyMyksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIwSyAzMCIsIDMwKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiMTBLIikpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gaW5mb190cmFja3M7Ci0gIGludCBpbmZvX3RyYWNrc19zaXplID0gMDsKLSAgQ3JlYXRlSW5pdFNlZ21lbnQoCi0gICAgICBIQVNfVEVYVCB8IEhBU19BVURJTyB8IEhBU19WSURFTyB8IFVTRV9BTFRFUk5BVEVfVEVYVF9UUkFDS19JRCwgZmFsc2UsCi0gICAgICBmYWxzZSwgJmluZm9fdHJhY2tzLCAmaW5mb190cmFja3Nfc2l6ZSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gIEFTU0VSVF9UUlVFKGRlbXV4ZXJfLT5BcHBlbmREYXRhKAotICAgICAga1NvdXJjZUlkLCBpbmZvX3RyYWNrcy5nZXQoKSwgaW5mb190cmFja3Nfc2l6ZSwKLSAgICAgIGFwcGVuZF93aW5kb3dfc3RhcnRfZm9yX25leHRfYXBwZW5kXywgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXywKLSAgICAgICZ0aW1lc3RhbXBfb2Zmc2V0X21hcF9ba1NvdXJjZUlkXSkpOwotCi0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjQ2SyA2OUsiLCAyMyksCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICI2MEsiLAotICAgICAgICAgICAgICAgICAgICAgIFdlYk1DbHVzdGVyUGFyc2VyOjprRGVmYXVsdFZpZGVvQnVmZmVyRHVyYXRpb25Jbk1zKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQWx0ZXJuYXRlVGV4dFRyYWNrTnVtLCAiNDVLIikpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsOTIpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoYXVkaW9fc3RyZWFtLCAiMEsgMjNLIDQ2SyA2OUsiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiMEsgMzAgNjBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHRleHRfc3RyZWFtLCAiMTBLIDQ1SyIpOwotCi0gIFNodXRkb3duRGVtdXhlcigpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQXVkaW9WaWRlb1RyYWNrSWRzQ2hhbmdlKSB7Ci0gIC8vIFRlc3Qgd2l0aCAxIGF1ZGlvIGFuZCAxIHZpZGVvIHN0cmVhbS4gU2VuZCBhIHNlY29uZCBpbml0IHNlZ21lbnQgaW4gd2hpY2gKLSAgLy8gdGhlIGF1ZGlvIGFuZCB2aWRlbyB0cmFjayBJRHMgY2hhbmdlLiBWZXJpZnkgdGhhdCBhcHBlbmRlZCBidWZmZXJzIGJlZm9yZQotICAvLyBhbmQgYWZ0ZXIgdGhlIHNlY29uZCBpbml0IHNlZ21lbnQgbWFwIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgdHJhY2sgYnVmZmVycy4KLSAgQ3JlYXRlTmV3RGVtdXhlcigpOwotICBBU1NFUlRfVFJVRSgKLSAgICAgIEluaXREZW11eGVyV2l0aEVuY3J5cHRpb25JbmZvKEhBU19BVURJTyB8IEhBU19WSURFTywgZmFsc2UsIGZhbHNlKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fc3RyZWFtKTsKLSAgQVNTRVJUX1RSVUUodmlkZW9fc3RyZWFtKTsKLQotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEsgMjNLIiwgMjMpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMEsgMzAiLCAzMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kSW5pdFNlZ21lbnQoSEFTX0FVRElPIHwgSEFTX1ZJREVPIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNFX0FMVEVSTkFURV9BVURJT19UUkFDS19JRCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTRV9BTFRFUk5BVEVfVklERU9fVFJBQ0tfSUQpKTsKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQWx0ZXJuYXRlQXVkaW9UcmFja051bSwgIjQ2SyA2OUsiLCA2MyksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa0FsdGVybmF0ZVZpZGVvVHJhY2tOdW0sICI2MEsiLCAyMykpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDkyKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwgIjBLIDIzSyA0NksgNjlLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjBLIDMwIDYwSyIpOwotCi0gIFNodXRkb3duRGVtdXhlcigpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgSW5pdFNlZ21lbnRTZXRzTmVlZFJhbmRvbUFjY2Vzc1BvaW50RmxhZykgewotICAvLyBUZXN0cyB0aGF0IG5vbi1rZXktZnJhbWVzIGZvbGxvd2luZyBhbiBpbml0IHNlZ21lbnQgYXJlIGFsbG93ZWQKLSAgLy8gYW5kIGRyb3BwZWQsIGFzIGV4cGVjdGVkIGlmIHRoZSBpbml0aWFsaXphdGlvbiBzZWdtZW50IHJlY2VpdmVkCi0gIC8vIGFsZ29yaXRobSBjb3JyZWN0bHkgc2V0cyB0aGUgbmVlZHMgcmFuZG9tIGFjY2VzcyBwb2ludCBmbGFnIHRvIHRydWUgZm9yIGFsbAotICAvLyB0cmFjayBidWZmZXJzLiBOb3RlIHRoYXQgdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQgaXMgaW5zdWZmaWNpZW50Ci0gIC8vIHRvIGZ1bGx5IHRlc3QgdGhpcyBzaW5jZSBuZWVkcyByYW5kb20gYWNjZXNzIHBvaW50IGZsYWcgaW5pdGlhbGl6ZXMgdG8KLSAgLy8gdHJ1ZS4KLSAgQ3JlYXRlTmV3RGVtdXhlcigpOwotICBEZW11eGVyU3RyZWFtKiB0ZXh0X3N0cmVhbSA9IE5VTEw7Ci0gIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKS5XaWxsT25jZShTYXZlQXJnPDA+KCZ0ZXh0X3N0cmVhbSkpOwotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcldpdGhFbmNyeXB0aW9uSW5mbyhIQVNfVEVYVCB8IEhBU19BVURJTyB8IEhBU19WSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fc3RyZWFtICYmIHZpZGVvX3N0cmVhbSAmJiB0ZXh0X3N0cmVhbSk7Ci0KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMjNLIiwKLSAgICAgICAgICAgICAgICAgICAgICBXZWJNQ2x1c3RlclBhcnNlcjo6a0RlZmF1bHRBdWRpb0J1ZmZlckR1cmF0aW9uSW5NcyksCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIwIDMwSyIsIDMwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiMjVLIDQwSyIpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMjMsNDYpIH0iKTsKLQotICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICBBU1NFUlRfVFJVRShBcHBlbmRJbml0U2VnbWVudChIQVNfVEVYVCB8IEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiNDZLIDY5SyIsIDIzKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjYwIDkwSyIsIDMwKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiODBLIDkwSyIpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMjMsOTIpIH0iKTsKLQotICBDaGVja0V4cGVjdGVkQnVmZmVycyhhdWRpb19zdHJlYW0sICIyM0sgNDZLIDY5SyIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh2aWRlb19zdHJlYW0sICIzMEsgOTBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHRleHRfc3RyZWFtLCAiMjVLIDQwSyA4MEsgOTBLIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTaHV0ZG93bl9CZWZvcmVBbGxJbml0U2VnbWVudHNBcHBlbmRlZCkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAmaG9zdF8sCi0gICAgICBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXJUZXN0OjpEZW11eGVySW5pdGlhbGl6ZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgdHJ1ZSk7Ci0KLSAgRVhQRUNUX0VRKEFkZElkKCJhdWRpbyIsIEhBU19BVURJTyksIENodW5rRGVtdXhlcjo6a09rKTsKLSAgRVhQRUNUX0VRKEFkZElkKCJ2aWRlbyIsIEhBU19WSURFTyksIENodW5rRGVtdXhlcjo6a09rKTsKLQotICBFeHBlY3RJbml0TWVkaWFMb2dzKEhBU19BVURJTyk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZEluaXRTZWdtZW50V2l0aFNvdXJjZUlkKCJhdWRpbyIsIEhBU19BVURJTykpOwotCi0gIFNodXRkb3duRGVtdXhlcigpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2h1dGRvd25fQmVmb3JlQWxsSW5pdFNlZ21lbnRzQXBwZW5kZWRUZXh0KSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgKLSAgICAgICZob3N0XywKLSAgICAgIGJhc2U6OkJpbmQoJkNodW5rRGVtdXhlclRlc3Q6OkRlbXV4ZXJJbml0aWFsaXplZCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICB0cnVlKTsKLQotICBFWFBFQ1RfRVEoQWRkSWQoImF1ZGlvIiwgSEFTX0FVRElPKSwgQ2h1bmtEZW11eGVyOjprT2spOwotICBFWFBFQ1RfRVEoQWRkSWQoInZpZGVvX2FuZF90ZXh0IiwgSEFTX1ZJREVPKSwgQ2h1bmtEZW11eGVyOjprT2spOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKS5UaW1lcyhFeGFjdGx5KDEpKTsKLQotICBFeHBlY3RJbml0TWVkaWFMb2dzKEhBU19WSURFTyk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gIEFTU0VSVF9UUlVFKAotICAgICAgQXBwZW5kSW5pdFNlZ21lbnRXaXRoU291cmNlSWQoInZpZGVvX2FuZF90ZXh0IiwgSEFTX1ZJREVPIHwgSEFTX1RFWFQpKTsKLQotICBTaHV0ZG93bkRlbXV4ZXIoKTsKLX0KLQotLy8gVmVyaWZpZXMgdGhhdCBhbGwgc3RyZWFtcyB3YWl0aW5nIGZvciBkYXRhIHJlY2VpdmUgYW4gZW5kIG9mIHN0cmVhbQotLy8gYnVmZmVyIHdoZW4gU2h1dGRvd24oKSBpcyBjYWxsZWQuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2h1dGRvd25fRW5kT2ZTdHJlYW1XaGlsZVdhaXRpbmdGb3JEYXRhKSB7Ci0gIERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtID0gTlVMTDsKLSAgRVhQRUNUX0NBTEwoaG9zdF8sIEFkZFRleHRTdHJlYW0oXywgXykpLldpbGxPbmNlKFNhdmVBcmc8MD4oJnRleHRfc3RyZWFtKSk7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTyB8IEhBU19URVhUKSk7Ci0KLSAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGJvb2wgdmlkZW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGJvb2wgdGV4dF9yZWFkX2RvbmUgPSBmYWxzZTsKLSAgYXVkaW9fc3RyZWFtLT5SZWFkKGJhc2U6OkJpbmQoJk9uUmVhZERvbmVfRU9TRXhwZWN0ZWQsICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgdmlkZW9fc3RyZWFtLT5SZWFkKGJhc2U6OkJpbmQoJk9uUmVhZERvbmVfRU9TRXhwZWN0ZWQsICZ2aWRlb19yZWFkX2RvbmUpKTsKLSAgdGV4dF9zdHJlYW0tPlJlYWQoYmFzZTo6QmluZCgmT25SZWFkRG9uZV9FT1NFeHBlY3RlZCwgJnRleHRfcmVhZF9kb25lKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICBFWFBFQ1RfRkFMU0UoYXVkaW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX0ZBTFNFKHZpZGVvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9GQUxTRSh0ZXh0X3JlYWRfZG9uZSk7Ci0KLSAgU2h1dGRvd25EZW11eGVyKCk7Ci0KLSAgRVhQRUNUX1RSVUUoYXVkaW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX1RSVUUodmlkZW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX1RSVUUodGV4dF9yZWFkX2RvbmUpOwotfQotCi0vLyBUZXN0IHRoYXQgU2VlaygpIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgd2hlbiB0aGUgZmlyc3QgY2x1c3RlcgotLy8gYXJyaXZlcy4KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBBcHBlbmREYXRhQWZ0ZXJTZWVrKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0Rmlyc3RDbHVzdGVyKCkpKTsKLQotICBJblNlcXVlbmNlIHM7Ci0KLSAgRVhQRUNUX0NBTEwoKnRoaXMsIENoZWNrcG9pbnQoMSkpOwotCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDQ2KSk7Ci0KLSAgRVhQRUNUX0NBTEwoKnRoaXMsIENoZWNrcG9pbnQoMikpOwotCi0gIENoZWNrcG9pbnQoMSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdFNlY29uZENsdXN0ZXIoKSkpOwotCi0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICBDaGVja3BvaW50KDIpOwotfQotCi0vLyBUZXN0IHRoYXQgcGFyc2luZyBlcnJvcnMgYXJlIGhhbmRsZWQgZm9yIGNsdXN0ZXJzIGFwcGVuZGVkIGFmdGVyIGluaXQuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRXJyb3JXaGlsZVBhcnNpbmdDbHVzdGVyQWZ0ZXJJbml0KSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhTdHJlYW1QYXJzaW5nRmFpbGVkKCkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgT25EZW11eGVyRXJyb3IoQ0hVTktfREVNVVhFUl9FUlJPUl9BUFBFTkRfRkFJTEVEKSk7Ci0gIEFwcGVuZEdhcmJhZ2UoKTsKLX0KLQotLy8gVGVzdCB0aGUgY2FzZSB3aGVyZSBhIFNlZWsoKSBpcyByZXF1ZXN0ZWQgd2hpbGUgdGhlIHBhcnNlcgotLy8gaXMgaW4gdGhlIG1pZGRsZSBvZiBjbHVzdGVyLiBUaGlzIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBwYXJzZXIKLS8vIGRvZXMgbm90IHJlc2V0IGl0c2VsZiBvbiBhIHNlZWsuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2Vla1doaWxlUGFyc2luZ0NsdXN0ZXIpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgSW5TZXF1ZW5jZSBzOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyX2EoR2VuZXJhdGVDbHVzdGVyKDAsIDYpKTsKLQotICAvLyBTcGxpdCB0aGUgY2x1c3RlciBpbnRvIHR3byBhcHBlbmRzIGF0IGFuIGFyYml0cmFyeSBwb2ludCBuZWFyIHRoZSBlbmQuCi0gIGludCBmaXJzdF9hcHBlbmRfc2l6ZSA9IGNsdXN0ZXJfYS0+c2l6ZSgpIC0gMTE7Ci0gIGludCBzZWNvbmRfYXBwZW5kX3NpemUgPSBjbHVzdGVyX2EtPnNpemUoKSAtIGZpcnN0X2FwcGVuZF9zaXplOwotCi0gIC8vIEFwcGVuZCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgY2x1c3Rlci4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YShjbHVzdGVyX2EtPmRhdGEoKSwgZmlyc3RfYXBwZW5kX3NpemUpKTsKLQotICBFeHBlY3RSZWFkKERlbXV4ZXJTdHJlYW06OkFVRElPLCAwKTsKLSAgRXhwZWN0UmVhZChEZW11eGVyU3RyZWFtOjpWSURFTywgMCk7Ci0gIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6QVVESU8sIGtBdWRpb0Jsb2NrRHVyYXRpb24pOwotCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg1KSk7Ci0KLSAgLy8gQXBwZW5kIHRoZSByZXN0IG9mIHRoZSBjbHVzdGVyLgotICBBU1NFUlRfVFJVRSgKLSAgICAgIEFwcGVuZERhdGEoY2x1c3Rlcl9hLT5kYXRhKCkgKyBmaXJzdF9hcHBlbmRfc2l6ZSwgc2Vjb25kX2FwcGVuZF9zaXplKSk7Ci0KLSAgLy8gQXBwZW5kIHRoZSBuZXcgY2x1c3RlciBhbmQgdmVyaWZ5IHRoYXQgb25seSB0aGUgYmxvY2tzCi0gIC8vIGluIHRoZSBuZXcgY2x1c3RlciBhcmUgcmV0dXJuZWQuCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDUwMDAsIDYpKSk7Ci0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcyg1MDAwLCA2KTsKLX0KLQotLy8gVGVzdCB0aGUgY2FzZSB3aGVyZSBBcHBlbmREYXRhKCkgaXMgY2FsbGVkIGJlZm9yZSBJbml0KCkuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQXBwZW5kRGF0YUJlZm9yZUluaXQpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gaW5mb190cmFja3M7Ci0gIGludCBpbmZvX3RyYWNrc19zaXplID0gMDsKLSAgQ3JlYXRlSW5pdFNlZ21lbnQoSEFTX0FVRElPIHwgSEFTX1ZJREVPLCBmYWxzZSwgZmFsc2UsICZpbmZvX3RyYWNrcywKLSAgICAgICAgICAgICAgICAgICAgJmluZm9fdHJhY2tzX3NpemUpOwotICBBU1NFUlRfRkFMU0UoZGVtdXhlcl8tPkFwcGVuZERhdGEoCi0gICAgICBrU291cmNlSWQsIGluZm9fdHJhY2tzLmdldCgpLCBpbmZvX3RyYWNrc19zaXplLAotICAgICAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfLCBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgJnRpbWVzdGFtcF9vZmZzZXRfbWFwX1trU291cmNlSWRdKSk7Ci19Ci0KLS8vIE1ha2Ugc3VyZSBSZWFkKCkgY2FsbGJhY2tzIGFyZSBkaXNwYXRjaGVkIHdpdGggdGhlIHByb3BlciBkYXRhLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFJlYWQpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdEZpcnN0Q2x1c3RlcigpKSk7Ci0KLSAgYm9vbCBhdWRpb19yZWFkX2RvbmUgPSBmYWxzZTsKLSAgYm9vbCB2aWRlb19yZWFkX2RvbmUgPSBmYWxzZTsKLSAgUmVhZEF1ZGlvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmF1ZGlvX3JlYWRfZG9uZSkpOwotICBSZWFkVmlkZW8oYmFzZTo6QmluZCgmT25SZWFkRG9uZSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDApLAotICAgICAgICAgICAgICAgICAgICAgICAmdmlkZW9fcmVhZF9kb25lKSk7Ci0KLSAgRVhQRUNUX1RSVUUoYXVkaW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX1RSVUUodmlkZW9fcmVhZF9kb25lKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIE91dE9mT3JkZXJDbHVzdGVycykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdEZpcnN0Q2x1c3RlcigpKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coR2VuZXJhdGVkU3BsaWNlKDEzMDAwLCAxMDAwMCkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlQ2x1c3RlcigxMCwgNCkpKTsKLQotICAvLyBNYWtlIHN1cmUgdGhhdCBBcHBlbmRDbHVzdGVyKCkgZG9lcyBub3QgZmFpbCB3aXRoIGEgY2x1c3RlciB0aGF0IGhhcwotICAvLyBvdmVybGFwcyB3aXRoIHRoZSBwcmV2aW91c2x5IGFwcGVuZGVkIGNsdXN0ZXIuCi0gIEVYUEVDVF9NRURJQV9MT0coU2tpcHBpbmdTcGxpY2VBbHJlYWR5U3BsaWNlZCgwKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDUsIDQpKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgQXBwZW5kRGF0YSgpIGNhbiBzdGlsbCBhY2NlcHQgbW9yZSBkYXRhLgotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3Rlcl9jKEdlbmVyYXRlQ2x1c3Rlcig0NSwgMikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEdlbmVyYXRlZFNwbGljZSg2MDAwLCA0NTAwMCkpOwotICBBU1NFUlRfVFJVRShkZW11eGVyXy0+QXBwZW5kRGF0YSgKLSAgICAgIGtTb3VyY2VJZCwgY2x1c3Rlcl9jLT5kYXRhKCksIGNsdXN0ZXJfYy0+c2l6ZSgpLAotICAgICAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfLCBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgJnRpbWVzdGFtcF9vZmZzZXRfbWFwX1trU291cmNlSWRdKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBOb25Nb25vdG9uaWNCdXRBYm92ZUNsdXN0ZXJUaW1lY29kZSkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdEZpcnN0Q2x1c3RlcigpKSk7Ci0KLSAgQ2x1c3RlckJ1aWxkZXIgY2I7Ci0KLSAgLy8gVGVzdCB0aGUgY2FzZSB3aGVyZSBibG9jayB0aW1lY29kZXMgYXJlIG5vdCBtb25vdG9uaWNhbGx5Ci0gIC8vIGluY3JlYXNpbmcgYnV0IHN0YXkgYWJvdmUgdGhlIGNsdXN0ZXIgdGltZWNvZGUuCi0gIGNiLlNldENsdXN0ZXJUaW1lY29kZSg1KTsKLSAgQWRkU2ltcGxlQmxvY2soJmNiLCBrQXVkaW9UcmFja051bSwgNSk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga1ZpZGVvVHJhY2tOdW0sIDEwKTsKLSAgQWRkU2ltcGxlQmxvY2soJmNiLCBrQXVkaW9UcmFja051bSwgNyk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga1ZpZGVvVHJhY2tOdW0sIDE1KTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1PdXRPZk9yZGVyVGltZWNvZGUoKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU3RyZWFtUGFyc2luZ0ZhaWxlZCgpKTsKLSAgRVhQRUNUX0NBTEwoaG9zdF8sIE9uRGVtdXhlckVycm9yKENIVU5LX0RFTVVYRVJfRVJST1JfQVBQRU5EX0ZBSUxFRCkpOwotICBBU1NFUlRfRkFMU0UoQXBwZW5kQ2x1c3RlcihjYi5GaW5pc2goKSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IEFwcGVuZERhdGEoKSBpZ25vcmVzIGRhdGEgYWZ0ZXIgdGhlIGVycm9yLgotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3Rlcl9iKEdlbmVyYXRlQ2x1c3RlcigyMCwgMikpOwotICBBU1NFUlRfRkFMU0UoZGVtdXhlcl8tPkFwcGVuZERhdGEoCi0gICAgICBrU291cmNlSWQsIGNsdXN0ZXJfYi0+ZGF0YSgpLCBjbHVzdGVyX2ItPnNpemUoKSwKLSAgICAgIGFwcGVuZF93aW5kb3dfc3RhcnRfZm9yX25leHRfYXBwZW5kXywgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXywKLSAgICAgICZ0aW1lc3RhbXBfb2Zmc2V0X21hcF9ba1NvdXJjZUlkXSkpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQmFja3dhcmRzQW5kQmVmb3JlQ2x1c3RlclRpbWVjb2RlKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0Rmlyc3RDbHVzdGVyKCkpKTsKLQotICBDbHVzdGVyQnVpbGRlciBjYjsKLQotICAvLyBUZXN0IHRpbWVjb2RlcyBnb2luZyBiYWNrd2FyZHMgYW5kIGluY2x1ZGluZyB2YWx1ZXMgbGVzcyB0aGFuIHRoZSBjbHVzdGVyCi0gIC8vIHRpbWVjb2RlLgotICBjYi5TZXRDbHVzdGVyVGltZWNvZGUoNSk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga0F1ZGlvVHJhY2tOdW0sIDUpOwotICBBZGRTaW1wbGVCbG9jaygmY2IsIGtWaWRlb1RyYWNrTnVtLCA1KTsKLSAgQWRkU2ltcGxlQmxvY2soJmNiLCBrQXVkaW9UcmFja051bSwgMyk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga1ZpZGVvVHJhY2tOdW0sIDMpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTU5lZ2F0aXZlVGltZWNvZGVPZmZzZXQoIi0yIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKFN0cmVhbVBhcnNpbmdGYWlsZWQoKSk7Ci0gIEVYUEVDVF9DQUxMKGhvc3RfLCBPbkRlbXV4ZXJFcnJvcihDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpKTsKLSAgQVNTRVJUX0ZBTFNFKEFwcGVuZENsdXN0ZXIoY2IuRmluaXNoKCkpKTsKLQotICAvLyBWZXJpZnkgdGhhdCBBcHBlbmREYXRhKCkgaWdub3JlcyBkYXRhIGFmdGVyIHRoZSBlcnJvci4KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXJfYihHZW5lcmF0ZUNsdXN0ZXIoNiwgMikpOwotICBBU1NFUlRfRkFMU0UoZGVtdXhlcl8tPkFwcGVuZERhdGEoCi0gICAgICBrU291cmNlSWQsIGNsdXN0ZXJfYi0+ZGF0YSgpLCBjbHVzdGVyX2ItPnNpemUoKSwKLSAgICAgIGFwcGVuZF93aW5kb3dfc3RhcnRfZm9yX25leHRfYXBwZW5kXywgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXywKLSAgICAgICZ0aW1lc3RhbXBfb2Zmc2V0X21hcF9ba1NvdXJjZUlkXSkpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgUGVyU3RyZWFtTW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lc3RhbXBzKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0Rmlyc3RDbHVzdGVyKCkpKTsKLQotICBDbHVzdGVyQnVpbGRlciBjYjsKLQotICAvLyBUZXN0IG1vbm90b25pYyBpbmNyZWFzaW5nIHRpbWVzdGFtcHMgb24gYSBwZXIgc3RyZWFtCi0gIC8vIGJhc2lzLgotICBjYi5TZXRDbHVzdGVyVGltZWNvZGUoNCk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga0F1ZGlvVHJhY2tOdW0sIDUpOwotICBBZGRTaW1wbGVCbG9jaygmY2IsIGtWaWRlb1RyYWNrTnVtLCA1KTsKLSAgQWRkU2ltcGxlQmxvY2soJmNiLCBrQXVkaW9UcmFja051bSwgNCk7Ci0gIEFkZFNpbXBsZUJsb2NrKCZjYiwga1ZpZGVvVHJhY2tOdW0sIDcpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTU91dE9mT3JkZXJUaW1lY29kZSgpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhTdHJlYW1QYXJzaW5nRmFpbGVkKCkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgT25EZW11eGVyRXJyb3IoQ0hVTktfREVNVVhFUl9FUlJPUl9BUFBFTkRfRkFJTEVEKSk7Ci0gIEFTU0VSVF9GQUxTRShBcHBlbmRDbHVzdGVyKGNiLkZpbmlzaCgpKSk7Ci19Ci0KLS8vIFRlc3QgdGhlIGNhc2Ugd2hlcmUgYSBjbHVzdGVyIGlzIHBhc3NlZCB0byBBcHBlbmRDbHVzdGVyKCkgYmVmb3JlCi0vLyBJTkZPICYgVFJBQ0tTIGRhdGEuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQ2x1c3RlckJlZm9yZUluaXRTZWdtZW50KSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgKLSAgICAgICZob3N0XywgTmV3RXhwZWN0ZWRTdGF0dXNDQihDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpLCB0cnVlKTsKLQotICBBU1NFUlRfRVEoQWRkSWQoKSwgQ2h1bmtEZW11eGVyOjprT2spOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTUNsdXN0ZXJCZWZvcmVGaXJzdEluZm8oKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU3RyZWFtUGFyc2luZ0ZhaWxlZCgpKTsKLSAgQVNTRVJUX0ZBTFNFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDEpKSk7Ci19Ci0KLS8vIFRlc3QgY2FzZXMgd2hlcmUgd2UgZ2V0IGFuIE1hcmtFbmRPZlN0cmVhbSgpIGNhbGwgZHVyaW5nIGluaXRpYWxpemF0aW9uLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEVPU0R1cmluZ0luaXQpIHsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0gIGRlbXV4ZXJfLT5Jbml0aWFsaXplKCZob3N0XywKLSAgICAgICAgICAgICAgICAgICAgICAgTmV3RXhwZWN0ZWRTdGF0dXNDQihERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9PUEVOKSwgdHJ1ZSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBFbmRPZlN0cmVhbVdpdGhOb0FwcGVuZCkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoJmhvc3RfLAotICAgICAgICAgICAgICAgICAgICAgICBOZXdFeHBlY3RlZFN0YXR1c0NCKERFTVVYRVJfRVJST1JfQ09VTERfTk9UX09QRU4pLCB0cnVlKTsKLQotICBBU1NFUlRfRVEoQWRkSWQoKSwgQ2h1bmtEZW11eGVyOjprT2spOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgfSIpOwotICBNYXJrRW5kT2ZTdHJlYW0oUElQRUxJTkVfT0spOwotICBTaHV0ZG93bkRlbXV4ZXIoKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyB9Iik7Ci0gIGRlbXV4ZXJfLT5SZW1vdmVJZChrU291cmNlSWQpOwotICBkZW11eGVyXy5yZXNldCgpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1XaXRoTm9NZWRpYUFwcGVuZCkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IH0iKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBEZWNvZGVFcnJvckVuZE9mU3RyZWFtKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKGtEZWZhdWx0Rmlyc3RDbHVzdGVyUmFuZ2UpOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLAotICAgICAgICAgICAgICBPbkRlbXV4ZXJFcnJvcihDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfREVDT0RFX0VSUk9SKSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfREVDT0RFX0VSUk9SKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhrRGVmYXVsdEZpcnN0Q2x1c3RlclJhbmdlKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIE5ldHdvcmtFcnJvckVuZE9mU3RyZWFtKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKGtEZWZhdWx0Rmlyc3RDbHVzdGVyUmFuZ2UpOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLAotICAgICAgICAgICAgICBPbkRlbXV4ZXJFcnJvcihDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfTkVUV09SS19FUlJPUikpOwotICBNYXJrRW5kT2ZTdHJlYW0oQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX05FVFdPUktfRVJST1IpOwotfQotCi0vLyBIZWxwZXIgY2xhc3MgdG8gcmVkdWNlIGR1cGxpY2F0ZSBjb2RlIHdoZW4gdGVzdGluZyBlbmQgb2Ygc3RyZWFtCi0vLyBSZWFkKCkgYmVoYXZpb3IuCi1jbGFzcyBFbmRPZlN0cmVhbUhlbHBlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBFbmRPZlN0cmVhbUhlbHBlcihEZW11eGVyKiBkZW11eGVyKQotICAgICAgOiBkZW11eGVyXyhkZW11eGVyKSwgYXVkaW9fcmVhZF9kb25lXyhmYWxzZSksIHZpZGVvX3JlYWRfZG9uZV8oZmFsc2UpIHt9Ci0KLSAgLy8gUmVxdWVzdCBhIHJlYWQgb24gdGhlIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zLgotICB2b2lkIFJlcXVlc3RSZWFkcygpIHsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fcmVhZF9kb25lXyk7Ci0gICAgRVhQRUNUX0ZBTFNFKHZpZGVvX3JlYWRfZG9uZV8pOwotCi0gICAgRGVtdXhlclN0cmVhbSogYXVkaW8gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgICBEZW11eGVyU3RyZWFtKiB2aWRlbyA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gICAgYXVkaW8tPlJlYWQoYmFzZTo6QmluZCgmT25FbmRPZlN0cmVhbVJlYWREb25lLCAmYXVkaW9fcmVhZF9kb25lXykpOwotICAgIHZpZGVvLT5SZWFkKGJhc2U6OkJpbmQoJk9uRW5kT2ZTdHJlYW1SZWFkRG9uZSwgJnZpZGVvX3JlYWRfZG9uZV8pKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICAvLyBDaGVjayB0byBzZWUgaWYgfGF1ZGlvX3JlYWRfZG9uZV98IGFuZCB8dmlkZW9fcmVhZF9kb25lX3wgdmFyaWFibGVzCi0gIC8vIG1hdGNoIHxleHBlY3RlZHwuCi0gIHZvaWQgQ2hlY2tJZlJlYWREb25lc1dlcmVDYWxsZWQoYm9vbCBleHBlY3RlZCkgewotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIGF1ZGlvX3JlYWRfZG9uZV8pOwotICAgIEVYUEVDVF9FUShleHBlY3RlZCwgdmlkZW9fcmVhZF9kb25lXyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0YXRpYyB2b2lkIE9uRW5kT2ZTdHJlYW1SZWFkRG9uZSgKLSAgICAgIGJvb2wqIGNhbGxlZCwgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgIEVYUEVDVF9FUShzdGF0dXMsIERlbXV4ZXJTdHJlYW06OmtPayk7Ci0gICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5lbmRfb2Zfc3RyZWFtKCkpOwotICAgICpjYWxsZWQgPSB0cnVlOwotICB9Ci0KLSAgRGVtdXhlciogZGVtdXhlcl87Ci0gIGJvb2wgYXVkaW9fcmVhZF9kb25lXzsKLSAgYm9vbCB2aWRlb19yZWFkX2RvbmVfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFbmRPZlN0cmVhbUhlbHBlcik7Ci19OwotCi0vLyBNYWtlIHN1cmUgdGhhdCBhbGwgcGVuZGluZyByZWFkcyB0aGF0IHdlIGRvbid0IGhhdmUgbWVkaWEgZGF0YSBmb3IgZ2V0IGFuCi0vLyAiZW5kIG9mIHN0cmVhbSIgYnVmZmVyIHdoZW4gTWFya0VuZE9mU3RyZWFtKCkgaXMgY2FsbGVkLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEVuZE9mU3RyZWFtV2l0aFBlbmRpbmdSZWFkcykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlQ2x1c3RlcigwLCAyKSkpOwotCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lXzEgPSBmYWxzZTsKLSAgYm9vbCB2aWRlb19yZWFkX2RvbmVfMSA9IGZhbHNlOwotICBFbmRPZlN0cmVhbUhlbHBlciBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8xKGRlbXV4ZXJfLmdldCgpKTsKLSAgRW5kT2ZTdHJlYW1IZWxwZXIgZW5kX29mX3N0cmVhbV9oZWxwZXJfMihkZW11eGVyXy5nZXQoKSk7Ci0KLSAgUmVhZEF1ZGlvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmF1ZGlvX3JlYWRfZG9uZV8xKSk7Ci0gIFJlYWRWaWRlbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICZ2aWRlb19yZWFkX2RvbmVfMSkpOwotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0KLSAgRVhQRUNUX1RSVUUoYXVkaW9fcmVhZF9kb25lXzEpOwotICBFWFBFQ1RfVFJVRSh2aWRlb19yZWFkX2RvbmVfMSk7Ci0KLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMS5SZXF1ZXN0UmVhZHMoKTsKLQotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGhvc3RfLAotICAgICAgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtWaWRlb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci0KLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMS5DaGVja0lmUmVhZERvbmVzV2VyZUNhbGxlZCh0cnVlKTsKLQotICBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8yLlJlcXVlc3RSZWFkcygpOwotICBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8yLkNoZWNrSWZSZWFkRG9uZXNXZXJlQ2FsbGVkKHRydWUpOwotfQotCi0vLyBNYWtlIHN1cmUgdGhhdCBhbGwgUmVhZCgpIGNhbGxzIGFmdGVyIHdlIGdldCBhbiBNYXJrRW5kT2ZTdHJlYW0oKQotLy8gY2FsbCByZXR1cm4gYW4gImVuZCBvZiBzdHJlYW0iIGJ1ZmZlci4KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZWFkc0FmdGVyRW5kT2ZTdHJlYW0pIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoMCwgMikpKTsKLQotICBib29sIGF1ZGlvX3JlYWRfZG9uZV8xID0gZmFsc2U7Ci0gIGJvb2wgdmlkZW9fcmVhZF9kb25lXzEgPSBmYWxzZTsKLSAgRW5kT2ZTdHJlYW1IZWxwZXIgZW5kX29mX3N0cmVhbV9oZWxwZXJfMShkZW11eGVyXy5nZXQoKSk7Ci0gIEVuZE9mU3RyZWFtSGVscGVyIGVuZF9vZl9zdHJlYW1faGVscGVyXzIoZGVtdXhlcl8uZ2V0KCkpOwotICBFbmRPZlN0cmVhbUhlbHBlciBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8zKGRlbXV4ZXJfLmdldCgpKTsKLQotICBSZWFkQXVkaW8oYmFzZTo6QmluZCgmT25SZWFkRG9uZSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDApLAotICAgICAgICAgICAgICAgICAgICAgICAmYXVkaW9fcmVhZF9kb25lXzEpKTsKLSAgUmVhZFZpZGVvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJnZpZGVvX3JlYWRfZG9uZV8xKSk7Ci0KLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMS5SZXF1ZXN0UmVhZHMoKTsKLQotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmVfMSk7Ci0gIEVYUEVDVF9UUlVFKHZpZGVvX3JlYWRfZG9uZV8xKTsKLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMS5DaGVja0lmUmVhZERvbmVzV2VyZUNhbGxlZChmYWxzZSk7Ci0KLSAgRVhQRUNUX0NBTEwoCi0gICAgICBob3N0XywKLSAgICAgIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotICBNYXJrRW5kT2ZTdHJlYW0oUElQRUxJTkVfT0spOwotCi0gIGVuZF9vZl9zdHJlYW1faGVscGVyXzEuQ2hlY2tJZlJlYWREb25lc1dlcmVDYWxsZWQodHJ1ZSk7Ci0KLSAgLy8gUmVxdWVzdCBhIGZldyBtb3JlIHJlYWRzIGFuZCBtYWtlIHN1cmUgd2UgaW1tZWRpYXRlbHkgZ2V0Ci0gIC8vIGVuZCBvZiBzdHJlYW0gYnVmZmVycy4KLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMi5SZXF1ZXN0UmVhZHMoKTsKLSAgZW5kX29mX3N0cmVhbV9oZWxwZXJfMi5DaGVja0lmUmVhZERvbmVzV2VyZUNhbGxlZCh0cnVlKTsKLQotICBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8zLlJlcXVlc3RSZWFkcygpOwotICBlbmRfb2Zfc3RyZWFtX2hlbHBlcl8zLkNoZWNrSWZSZWFkRG9uZXNXZXJlQ2FsbGVkKHRydWUpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1EdXJpbmdDYW5jZWxlZFNlZWspIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigwLCAxMCkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEzOCkpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICAvLyBTdGFydCB0aGUgZmlyc3Qgc2Vlay4KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjApKTsKLQotICAvLyBTaW11bGF0ZSBhbm90aGVyIHNlZWsgYmVpbmcgcmVxdWVzdGVkIGJlZm9yZSB0aGUgZmlyc3QKLSAgLy8gc2VlayBoYXMgZmluaXNoZWQgcHJlcm9sbGluZy4KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZTIgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMzApOwotICBkZW11eGVyXy0+Q2FuY2VsUGVuZGluZ1NlZWsoc2Vla190aW1lMik7Ci0KLSAgLy8gRmluaXNoIHNlY29uZCBzZWVrLgotICBTZWVrKHNlZWtfdGltZTIpOwotCi0gIERlbXV4ZXJTdHJlYW06OlN0YXR1cyBzdGF0dXM7Ci0gIGJhc2U6OlRpbWVEZWx0YSBsYXN0X3RpbWVzdGFtcDsKLQotICAvLyBNYWtlIHN1cmUgYXVkaW8gY2FuIHJlYWNoIGVuZCBvZiBzdHJlYW0uCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgQVNTRVJUX0VRKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a09rKTsKLQotICAvLyBNYWtlIHN1cmUgdmlkZW8gY2FuIHJlYWNoIGVuZCBvZiBzdHJlYW0uCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgQVNTRVJUX0VRKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a09rKTsKLX0KLQotLy8gVmVyaWZ5IGJ1ZmZlcmVkIHJhbmdlIGNoYW5nZSBiZWhhdmlvciBmb3IgYXVkaW8vdmlkZW8vdGV4dCB0cmFja3MuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1SYW5nZUNoYW5nZXMpIHsKLSAgRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0gPSBOVUxMOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKS5XaWxsT25jZShTYXZlQXJnPDA+KCZ0ZXh0X3N0cmVhbSkpOwotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8gfCBIQVNfVEVYVCkpOwotCi0gIEFwcGVuZE11eGVkQ2x1c3RlcihNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIwSyAzMyIsIDMzKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjBLIDIzSyIsIDIzKSk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzIGFuZCB2ZXJpZnkgdGhhdCBhbiBlbXB0eSB0ZXh0IHRyYWNrIGRvZXMgbm90Ci0gIC8vIGFmZmVjdCB0aGUgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgRVhQRUNUX0NBTEwoaG9zdF8sIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg2NikpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZXMgYW5kIHZlcmlmeSB0aGF0IGFuIGVtcHR5IHRleHQgdHJhY2sgZG9lcyBub3QKLSAgLy8gYWZmZWN0IHRoZSBleHBlY3RlZCByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNjYpIH0iKTsKLQotICAvLyBVbm1hcmsgZW5kIG9mIHN0cmVhbSBzdGF0ZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHJhbmdlcyByZXR1cm4gdG8KLSAgLy8gdGhlaXIgcHJlLSJlbmQgb2Ygc3RyZWFtIiB2YWx1ZXMuCi0gIGRlbXV4ZXJfLT5Vbm1hcmtFbmRPZlN0cmVhbSgpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgLy8gQWRkIHRleHQgdHJhY2sgZGF0YSBhbmQgdmVyaWZ5IHRoYXQgdGhlIGJ1ZmZlcmVkIHJhbmdlcyBkb24ndCBjaGFuZ2UKLSAgLy8gc2luY2UgdGhlIGludGVyc2VjdGlvbiBvZiBhbGwgdGhlIHRyYWNrcyBkb2Vzbid0IGNoYW5nZS4KLSAgRVhQRUNUX01FRElBX0xPRyhTa2lwcGluZ1NwbGljZUF0T3JCZWZvcmUoMCwgMCkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIwMCkpKTsKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBLIDMzIiwgMzMpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEsgMjNLIiwgMjMpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtUZXh0VHJhY2tOdW0sICIwSyAxMDBLIikpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgLy8gTWFyayBlbmQgb2Ygc3RyZWFtIGFuZCB2ZXJpZnkgdGhhdCB0ZXh0IHRyYWNrIGRhdGEgaXMgcmVmbGVjdGVkIGluCi0gIC8vIHRoZSBuZXcgcmFuZ2UuCi0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMjAwKSB9Iik7Ci19Ci0KLS8vIE1ha2Ugc3VyZSBBcHBlbmREYXRhKCkgd2lsbCBhY2NlcHQgZWxlbWVudHMgdGhhdCBzcGFuIG11bHRpcGxlIGNhbGxzLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFwcGVuZGluZ0luUGllY2VzKSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgmaG9zdF8sCi0gICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUluaXREb25lQ0Ioa0RlZmF1bHREdXJhdGlvbigpLCBQSVBFTElORV9PSyksIHRydWUpOwotCi0gIEFTU0VSVF9FUShBZGRJZCgpLCBDaHVua0RlbXV4ZXI6OmtPayk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gaW5mb190cmFja3M7Ci0gIGludCBpbmZvX3RyYWNrc19zaXplID0gMDsKLSAgQ3JlYXRlSW5pdFNlZ21lbnQoSEFTX0FVRElPIHwgSEFTX1ZJREVPLCBmYWxzZSwgZmFsc2UsICZpbmZvX3RyYWNrcywKLSAgICAgICAgICAgICAgICAgICAgJmluZm9fdHJhY2tzX3NpemUpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyX2Eoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyX2Ioa0RlZmF1bHRTZWNvbmRDbHVzdGVyKCkpOwotCi0gIHNpemVfdCBidWZmZXJfc2l6ZSA9IGluZm9fdHJhY2tzX3NpemUgKyBjbHVzdGVyX2EtPnNpemUoKSArIGNsdXN0ZXJfYi0+c2l6ZSgpOwotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBidWZmZXIobmV3IHVpbnQ4X3RbYnVmZmVyX3NpemVdKTsKLSAgdWludDhfdCogZHN0ID0gYnVmZmVyLmdldCgpOwotICBtZW1jcHkoZHN0LCBpbmZvX3RyYWNrcy5nZXQoKSwgaW5mb190cmFja3Nfc2l6ZSk7Ci0gIGRzdCArPSBpbmZvX3RyYWNrc19zaXplOwotCi0gIG1lbWNweShkc3QsIGNsdXN0ZXJfYS0+ZGF0YSgpLCBjbHVzdGVyX2EtPnNpemUoKSk7Ci0gIGRzdCArPSBjbHVzdGVyX2EtPnNpemUoKTsKLQotICBtZW1jcHkoZHN0LCBjbHVzdGVyX2ItPmRhdGEoKSwgY2x1c3Rlcl9iLT5zaXplKCkpOwotICBkc3QgKz0gY2x1c3Rlcl9iLT5zaXplKCk7Ci0KLSAgRXhwZWN0SW5pdE1lZGlhTG9ncyhIQVNfQVVESU8gfCBIQVNfVklERU8pOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICBBU1NFUlRfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyLmdldCgpLCBidWZmZXJfc2l6ZSkpOwotCi0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcygwLCA5KTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFdlYk1GaWxlX0F1ZGlvQW5kVmlkZW8pIHsKLSAgc3RydWN0IEJ1ZmZlclRpbWVzdGFtcHMgYnVmZmVyX3RpbWVzdGFtcHNbXSA9IHsKLSAgICAgIHswLCAwfSwgezMzLCAzfSwgezY3LCA2fSwgezEwMCwgOX0sIHsxMzMsIDEyfSwge2tTa2lwLCBrU2tpcH0sCi0gIH07Ci0KLSAgRXhwZWN0SW5pdE1lZGlhTG9ncyhIQVNfQVVESU8gfCBIQVNfVklERU8pOwotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIpKS5UaW1lcyg3KTsKLQotICAvLyBFeHBlY3QgZHVyYXRpb24gYWRqdXN0bWVudCBzaW5jZSBhY3R1YWwgZHVyYXRpb24gZGlmZmVycyBzbGlnaHRseSBmcm9tCi0gIC8vIGR1cmF0aW9uIGluIHRoZSBpbml0IHNlZ21lbnQuCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBTZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjc0NikpKTsKLQotICBBU1NFUlRfVFJVRShQYXJzZVdlYk1GaWxlKCJiZWFyLTMyMHgyNDAud2VibSIsIGJ1ZmZlcl90aW1lc3RhbXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNzQ0KSkpOwotICBFWFBFQ1RfRVEoMjEyOTQ5LCBkZW11eGVyXy0+R2V0TWVtb3J5VXNhZ2UoKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBXZWJNRmlsZV9MaXZlQXVkaW9BbmRWaWRlbykgewotICBzdHJ1Y3QgQnVmZmVyVGltZXN0YW1wcyBidWZmZXJfdGltZXN0YW1wc1tdID0gewotICAgICAgezAsIDB9LCB7MzMsIDN9LCB7NjcsIDZ9LCB7MTAwLCA5fSwgezEzMywgMTJ9LCB7a1NraXAsIGtTa2lwfSwKLSAgfTsKLQotICBFeHBlY3RJbml0TWVkaWFMb2dzKEhBU19BVURJTyB8IEhBU19WSURFTyk7Ci0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMikpLlRpbWVzKDcpOwotICBBU1NFUlRfVFJVRShQYXJzZVdlYk1GaWxlKCJiZWFyLTMyMHgyNDAtbGl2ZS53ZWJtIiwgYnVmZmVyX3RpbWVzdGFtcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga0luZmluaXRlRHVyYXRpb24pKTsKLQotICBEZW11eGVyU3RyZWFtKiBhdWRpbyA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfTElWRSwgYXVkaW8tPmxpdmVuZXNzKCkpOwotICBEZW11eGVyU3RyZWFtKiB2aWRlbyA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfTElWRSwgdmlkZW8tPmxpdmVuZXNzKCkpOwotICBFWFBFQ1RfRVEoMjEyOTQ5LCBkZW11eGVyXy0+R2V0TWVtb3J5VXNhZ2UoKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBXZWJNRmlsZV9BdWRpb09ubHkpIHsKLSAgc3RydWN0IEJ1ZmZlclRpbWVzdGFtcHMgYnVmZmVyX3RpbWVzdGFtcHNbXSA9IHsKLSAgICAgIHtrU2tpcCwgMH0sIHtrU2tpcCwgM30sICB7a1NraXAsIDZ9LAotICAgICAge2tTa2lwLCA5fSwge2tTa2lwLCAxMn0sIHtrU2tpcCwga1NraXB9LAotICB9OwotCi0gIEV4cGVjdEluaXRNZWRpYUxvZ3MoSEFTX0FVRElPKTsKLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgyKSk7Ci0KLSAgLy8gRXhwZWN0IGR1cmF0aW9uIGFkanVzdG1lbnQgc2luY2UgYWN0dWFsIGR1cmF0aW9uIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbQotICAvLyBkdXJhdGlvbiBpbiB0aGUgaW5pdCBzZWdtZW50LgotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3NDYpKSk7Ci0KLSAgQVNTRVJUX1RSVUUoUGFyc2VXZWJNRmlsZSgiYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHkud2VibSIsIGJ1ZmZlcl90aW1lc3RhbXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNzQ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVNfQVVESU8pKTsKLSAgRVhQRUNUX0VRKDE4NjI0LCBkZW11eGVyXy0+R2V0TWVtb3J5VXNhZ2UoKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBXZWJNRmlsZV9WaWRlb09ubHkpIHsKLSAgc3RydWN0IEJ1ZmZlclRpbWVzdGFtcHMgYnVmZmVyX3RpbWVzdGFtcHNbXSA9IHsKLSAgICAgIHswLCBrU2tpcH0sICAgezMzLCBrU2tpcH0sICB7NjcsIGtTa2lwfSwKLSAgICAgIHsxMDAsIGtTa2lwfSwgezEzMywga1NraXB9LCB7a1NraXAsIGtTa2lwfSwKLSAgfTsKLQotICBFeHBlY3RJbml0TWVkaWFMb2dzKEhBU19WSURFTyk7Ci0KLSAgLy8gRXhwZWN0IGR1cmF0aW9uIGFkanVzdG1lbnQgc2luY2UgYWN0dWFsIGR1cmF0aW9uIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbQotICAvLyBkdXJhdGlvbiBpbiB0aGUgaW5pdCBzZWdtZW50LgotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3MzYpKSk7Ci0KLSAgQVNTRVJUX1RSVUUoUGFyc2VXZWJNRmlsZSgiYmVhci0zMjB4MjQwLXZpZGVvLW9ubHkud2VibSIsIGJ1ZmZlcl90aW1lc3RhbXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNzAzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVNfVklERU8pKTsKLSAgRVhQRUNUX0VRKDE5NDMyNSwgZGVtdXhlcl8tPkdldE1lbW9yeVVzYWdlKCkpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgV2ViTUZpbGVfQWx0UmVmRnJhbWVzKSB7Ci0gIHN0cnVjdCBCdWZmZXJUaW1lc3RhbXBzIGJ1ZmZlcl90aW1lc3RhbXBzW10gPSB7Ci0gICAgICB7MCwgMH0sIHszMywgM30sIHszMywgNn0sIHs2NywgOX0sIHsxMDAsIDEyfSwge2tTa2lwLCBrU2tpcH0sCi0gIH07Ci0KLSAgRXhwZWN0SW5pdE1lZGlhTG9ncyhIQVNfQVVESU8gfCBIQVNfVklERU8pOwotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIpKTsKLSAgQVNTRVJUX1RSVUUoUGFyc2VXZWJNRmlsZSgiYmVhci0zMjB4MjQwLWFsdHJlZi53ZWJtIiwgYnVmZmVyX3RpbWVzdGFtcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3NjcpKSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IHdlIG91dHB1dCBidWZmZXJzIGJlZm9yZSB0aGUgZW50aXJlIGNsdXN0ZXIgaGFzIGJlZW4gcGFyc2VkLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEluY3JlbWVudGFsQ2x1c3RlclBhcnNpbmcpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDYpKTsKLQotICBib29sIGF1ZGlvX3JlYWRfZG9uZSA9IGZhbHNlOwotICBib29sIHZpZGVvX3JlYWRfZG9uZSA9IGZhbHNlOwotICBSZWFkQXVkaW8oYmFzZTo6QmluZCgmT25SZWFkRG9uZSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDApLAotICAgICAgICAgICAgICAgICAgICAgICAmYXVkaW9fcmVhZF9kb25lKSk7Ci0gIFJlYWRWaWRlbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICZ2aWRlb19yZWFkX2RvbmUpKTsKLQotICAvLyBNYWtlIHN1cmUgdGhlIHJlYWRzIGhhdmVuJ3QgY29tcGxldGVkIHlldC4KLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9GQUxTRSh2aWRlb19yZWFkX2RvbmUpOwotCi0gIC8vIEFwcGVuZCBkYXRhIG9uZSBieXRlIGF0IGEgdGltZSB1bnRpbCBvbmUgb3IgYm90aCByZWFkcyBjb21wbGV0ZS4KLSAgaW50IGkgPSAwOwotICBmb3IgKDsgaSA8IGNsdXN0ZXItPnNpemUoKSAmJiAhKGF1ZGlvX3JlYWRfZG9uZSB8fCB2aWRlb19yZWFkX2RvbmUpOyArK2kpIHsKLSAgICBBU1NFUlRfVFJVRShBcHBlbmREYXRhKGNsdXN0ZXItPmRhdGEoKSArIGksIDEpKTsKLSAgICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIH0KLQotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmUgfHwgdmlkZW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX0dUKGksIDApOwotICBFWFBFQ1RfTFQoaSwgY2x1c3Rlci0+c2l6ZSgpKTsKLQotICBhdWRpb19yZWFkX2RvbmUgPSBmYWxzZTsKLSAgdmlkZW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIFJlYWRBdWRpbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjMpLAotICAgICAgICAgICAgICAgICAgICAgICAmYXVkaW9fcmVhZF9kb25lKSk7Ci0gIFJlYWRWaWRlbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMzMpLAotICAgICAgICAgICAgICAgICAgICAgICAmdmlkZW9fcmVhZF9kb25lKSk7Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSByZWFkcyBoYXZlbid0IGNvbXBsZXRlZCB5ZXQuCi0gIEVYUEVDVF9GQUxTRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfRkFMU0UodmlkZW9fcmVhZF9kb25lKTsKLQotICAvLyBBcHBlbmQgdGhlIHJlbWFpbmluZyBkYXRhLgotICBBU1NFUlRfTFQoaSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YShjbHVzdGVyLT5kYXRhKCkgKyBpLCBjbHVzdGVyLT5zaXplKCkgLSBpKSk7Ci0KLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotCi0gIEVYUEVDVF9UUlVFKGF1ZGlvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9UUlVFKHZpZGVvX3JlYWRfZG9uZSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBQYXJzZUVycm9yRHVyaW5nSW5pdCkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa05vVGltZXN0YW1wLCBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpLAotICAgICAgdHJ1ZSk7Ci0KLSAgQVNTRVJUX0VRKEFkZElkKCksIENodW5rRGVtdXhlcjo6a09rKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKFN0cmVhbVBhcnNpbmdGYWlsZWQoKSk7Ci0gIHVpbnQ4X3QgdG1wID0gMDsKLSAgQVNTRVJUX0ZBTFNFKGRlbXV4ZXJfLT5BcHBlbmREYXRhKAotICAgICAga1NvdXJjZUlkLCAmdG1wLCAxLCBhcHBlbmRfd2luZG93X3N0YXJ0X2Zvcl9uZXh0X2FwcGVuZF8sCi0gICAgICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLCAmdGltZXN0YW1wX29mZnNldF9tYXBfW2tTb3VyY2VJZF0pKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFWSGVhZGVyc1dpdGhBdWRpb09ubHlUeXBlKSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgKLSAgICAgICZob3N0XywgQ3JlYXRlSW5pdERvbmVDQihrTm9UaW1lc3RhbXAsIENIVU5LX0RFTVVYRVJfRVJST1JfQVBQRU5EX0ZBSUxFRCksCi0gICAgICB0cnVlKTsKLQotICBBU1NFUlRfRVEoZGVtdXhlcl8tPkFkZElkKGtTb3VyY2VJZCwgImF1ZGlvL3dlYm0iLCAidm9yYmlzIiksCi0gICAgICAgICAgICBDaHVua0RlbXV4ZXI6OmtPayk7Ci0gIGRlbXV4ZXJfLT5TZXRUcmFja3NXYXRjaGVyKGtTb3VyY2VJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6SW5pdFNlZ21lbnRSZWNlaXZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0KLSAgLy8gVmlkZW8gdHJhY2sgaXMgdW5leHBlY3RlZCBwZXIgbWltZXR5cGUuCi0gIEVYUEVDVF9NRURJQV9MT0coSW5pdFNlZ21lbnRNaXNtYXRjaGVzTWltZVR5cGUoIlZpZGVvIiwgInZwOCIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhTdHJlYW1QYXJzaW5nRmFpbGVkKCkpOwotICBBU1NFUlRfRkFMU0UoQXBwZW5kSW5pdFNlZ21lbnQoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBBVkhlYWRlcnNXaXRoVmlkZW9Pbmx5VHlwZSkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa05vVGltZXN0YW1wLCBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpLAotICAgICAgdHJ1ZSk7Ci0KLSAgQVNTRVJUX0VRKGRlbXV4ZXJfLT5BZGRJZChrU291cmNlSWQsICJ2aWRlby93ZWJtIiwgInZwOCIpLCBDaHVua0RlbXV4ZXI6OmtPayk7Ci0gIGRlbXV4ZXJfLT5TZXRUcmFja3NXYXRjaGVyKGtTb3VyY2VJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6SW5pdFNlZ21lbnRSZWNlaXZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0KLSAgLy8gQXVkaW8gdHJhY2sgaXMgdW5leHBlY3RlZCBwZXIgbWltZXR5cGUuCi0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oInZpZGVvIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvZGVjTmFtZSgidmlkZW8iLCAidnA4IikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEluaXRTZWdtZW50TWlzbWF0Y2hlc01pbWVUeXBlKCJBdWRpbyIsICJ2b3JiaXMiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU3RyZWFtUGFyc2luZ0ZhaWxlZCgpKTsKLSAgQVNTRVJUX0ZBTFNFKEFwcGVuZEluaXRTZWdtZW50KEhBU19BVURJTyB8IEhBU19WSURFTykpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQXVkaW9Pbmx5SGVhZGVyV2l0aEFWVHlwZSkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa05vVGltZXN0YW1wLCBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpLAotICAgICAgdHJ1ZSk7Ci0KLSAgQVNTRVJUX0VRKGRlbXV4ZXJfLT5BZGRJZChrU291cmNlSWQsICJ2aWRlby93ZWJtIiwgInZvcmJpcyx2cDgiKSwKLSAgICAgICAgICAgIENodW5rRGVtdXhlcjo6a09rKTsKLSAgZGVtdXhlcl8tPlNldFRyYWNrc1dhdGNoZXIoa1NvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXJUZXN0OjpJbml0U2VnbWVudFJlY2VpdmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLQotICAvLyBWaWRlbyB0cmFjayBpcyBhbHNvIGV4cGVjdGVkIHBlciBtaW1ldHlwZS4KLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgiYXVkaW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJhdWRpbyIsICJ2b3JiaXMiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coSW5pdFNlZ21lbnRNaXNzZXNFeHBlY3RlZFRyYWNrKCJ2cDgiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU3RyZWFtUGFyc2luZ0ZhaWxlZCgpKTsKLSAgQVNTRVJUX0ZBTFNFKEFwcGVuZEluaXRTZWdtZW50KEhBU19BVURJTykpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgVmlkZW9Pbmx5SGVhZGVyV2l0aEFWVHlwZSkgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoCi0gICAgICAmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa05vVGltZXN0YW1wLCBDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpLAotICAgICAgdHJ1ZSk7Ci0KLSAgQVNTRVJUX0VRKGRlbXV4ZXJfLT5BZGRJZChrU291cmNlSWQsICJ2aWRlby93ZWJtIiwgInZvcmJpcyx2cDgiKSwKLSAgICAgICAgICAgIENodW5rRGVtdXhlcjo6a09rKTsKLSAgZGVtdXhlcl8tPlNldFRyYWNrc1dhdGNoZXIoa1NvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZDaHVua0RlbXV4ZXJUZXN0OjpJbml0U2VnbWVudFJlY2VpdmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLQotICAvLyBBdWRpbyB0cmFjayBpcyBhbHNvIGV4cGVjdGVkIHBlciBtaW1ldHlwZS4KLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgidmlkZW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJ2aWRlbyIsICJ2cDgiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coSW5pdFNlZ21lbnRNaXNzZXNFeHBlY3RlZFRyYWNrKCJ2b3JiaXMiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU3RyZWFtUGFyc2luZ0ZhaWxlZCgpKTsKLSAgQVNTRVJUX0ZBTFNFKEFwcGVuZEluaXRTZWdtZW50KEhBU19WSURFTykpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgTXVsdGlwbGVIZWFkZXJzKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSkpOwotCi0gIC8vIEFwcGVuZCBhbm90aGVyIGlkZW50aWNhbCBpbml0aWFsaXphdGlvbiBzZWdtZW50LgotICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICBBU1NFUlRfVFJVRShBcHBlbmRJbml0U2VnbWVudChIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0U2Vjb25kQ2x1c3RlcigpKSk7Ci0KLSAgR2VuZXJhdGVFeHBlY3RlZFJlYWRzKDAsIDkpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQWRkU2VwYXJhdGVTb3VyY2VzRm9yQXVkaW9BbmRWaWRlbykgewotICBzdGQ6OnN0cmluZyBhdWRpb19pZCA9ICJhdWRpbzEiOwotICBzdGQ6OnN0cmluZyB2aWRlb19pZCA9ICJ2aWRlbzEiOwotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlckF1ZGlvQW5kVmlkZW9Tb3VyY2VzKGF1ZGlvX2lkLCB2aWRlb19pZCkpOwotCi0gIC8vIEFwcGVuZCBhdWRpbyBhbmQgdmlkZW8gZGF0YSBpbnRvIHNlcGFyYXRlIHNvdXJjZSBpZHMuCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICBhdWRpb19pZCwKLSAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCA5Miwga0F1ZGlvVHJhY2tOdW0sIGtBdWRpb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIEdlbmVyYXRlQXVkaW9TdHJlYW1FeHBlY3RlZFJlYWRzKDAsIDQpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKHZpZGVvX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCAxMzIsIGtWaWRlb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotICBHZW5lcmF0ZVZpZGVvU3RyZWFtRXhwZWN0ZWRSZWFkcygwLCA0KTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFkZFNlcGFyYXRlU291cmNlc0ZvckF1ZGlvQW5kVmlkZW9UZXh0KSB7Ci0gIC8vIFRPRE8obWF0dGhld2poZWFuZXkpOiBIZXJlIGFuZCBlbHNld2hlcmUsIHdlIG5lZWQgbW9yZSB0ZXN0cwotICAvLyBmb3IgaW5iYW5kIHRleHQgdHJhY2tzIChodHRwOi8vY3JidWcvMzIxNDU1KS4KLQotICBzdGQ6OnN0cmluZyBhdWRpb19pZCA9ICJhdWRpbzEiOwotICBzdGQ6OnN0cmluZyB2aWRlb19pZCA9ICJ2aWRlbzEiOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKS5UaW1lcyhFeGFjdGx5KDIpKTsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlc1RleHQoYXVkaW9faWQsIHZpZGVvX2lkLCB0cnVlKSk7Ci0KLSAgLy8gQXBwZW5kIGF1ZGlvIGFuZCB2aWRlbyBkYXRhIGludG8gc2VwYXJhdGUgc291cmNlIGlkcy4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLAotICAgICAgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDAsIDkyLCBrQXVkaW9UcmFja051bSwga0F1ZGlvQmxvY2tEdXJhdGlvbikpKTsKLSAgR2VuZXJhdGVBdWRpb1N0cmVhbUV4cGVjdGVkUmVhZHMoMCwgNCk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIodmlkZW9faWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDAsIDEzMiwga1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtWaWRlb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIEdlbmVyYXRlVmlkZW9TdHJlYW1FeHBlY3RlZFJlYWRzKDAsIDQpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQWRkSWRGYWlsdXJlcykgewotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoJmhvc3RfLAotICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbml0RG9uZUNCKGtEZWZhdWx0RHVyYXRpb24oKSwgUElQRUxJTkVfT0spLCB0cnVlKTsKLQotICBzdGQ6OnN0cmluZyBhdWRpb19pZCA9ICJhdWRpbzEiOwotICBzdGQ6OnN0cmluZyB2aWRlb19pZCA9ICJ2aWRlbzEiOwotCi0gIEFTU0VSVF9FUShBZGRJZChhdWRpb19pZCwgSEFTX0FVRElPKSwgQ2h1bmtEZW11eGVyOjprT2spOwotCi0gIEV4cGVjdEluaXRNZWRpYUxvZ3MoSEFTX0FVRElPKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kSW5pdFNlZ21lbnRXaXRoU291cmNlSWQoYXVkaW9faWQsIEhBU19BVURJTykpOwotCi0gIC8vIEFkZGluZyBhbiBpZCBhZnRlciBhcHBlbmQgc2hvdWxkIGZhaWwuCi0gIEFTU0VSVF9FUShBZGRJZCh2aWRlb19pZCwgSEFTX1ZJREVPKSwgQ2h1bmtEZW11eGVyOjprUmVhY2hlZElkTGltaXQpOwotfQotCi0vLyBUZXN0IHRoYXQgUmVhZCgpIGNhbGxzIGFmdGVyIGEgUmVtb3ZlSWQoKSByZXR1cm4gImVuZCBvZiBzdHJlYW0iIGJ1ZmZlcnMuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgUmVtb3ZlSWQpIHsKLSAgc3RkOjpzdHJpbmcgYXVkaW9faWQgPSAiYXVkaW8xIjsKLSAgc3RkOjpzdHJpbmcgdmlkZW9faWQgPSAidmlkZW8xIjsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlcyhhdWRpb19pZCwgdmlkZW9faWQpKTsKLQotICAvLyBBcHBlbmQgYXVkaW8gYW5kIHZpZGVvIGRhdGEgaW50byBzZXBhcmF0ZSBzb3VyY2UgaWRzLgotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgYXVkaW9faWQsCi0gICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMCwgOTIsIGtBdWRpb1RyYWNrTnVtLCBrQXVkaW9CbG9ja0R1cmF0aW9uKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKHZpZGVvX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCAxMzIsIGtWaWRlb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotCi0gIC8vIFJlYWQoKSBmcm9tIGF1ZGlvIHNob3VsZCByZXR1cm4gbm9ybWFsIGJ1ZmZlcnMuCi0gIEdlbmVyYXRlQXVkaW9TdHJlYW1FeHBlY3RlZFJlYWRzKDAsIDQpOwotCi0gIC8vIEF1ZGlvIHN0cmVhbSB3aWxsIGJlY29tZSBpbmFjY2Vzc2libGUgYWZ0ZXIgfGF1ZGlvX2lkfCBpcyByZW1vdmVkLCBzbyBzYXZlCi0gIC8vIGl0IGhlcmUgdG8gcmVhZCBmcm9tIGl0IGFmdGVyIFJlbW92ZUlkLgotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLQotICAvLyBSZW1vdmUgdGhlIGF1ZGlvIGlkLgotICBkZW11eGVyXy0+UmVtb3ZlSWQoYXVkaW9faWQpOwotCi0gIC8vIFJlYWQoKSBmcm9tIGF1ZGlvIHNob3VsZCByZXR1cm4gImVuZCBvZiBzdHJlYW0iIGJ1ZmZlcnMuCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGF1ZGlvX3N0cmVhbS0+UmVhZChiYXNlOjpCaW5kKCZPblJlYWREb25lX0VPU0V4cGVjdGVkLCAmYXVkaW9fcmVhZF9kb25lKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoYXVkaW9fcmVhZF9kb25lKTsKLQotICAvLyBSZWFkKCkgZnJvbSB2aWRlbyBzaG91bGQgc3RpbGwgcmV0dXJuIG5vcm1hbCBidWZmZXJzLgotICBHZW5lcmF0ZVZpZGVvU3RyZWFtRXhwZWN0ZWRSZWFkcygwLCA0KTsKLX0KLQotLy8gVGVzdCB0aGF0IHJlbW92aW5nIGFuIElEIGltbWVkaWF0ZWx5IGFmdGVyIGFkZGluZyBpdCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aAotLy8gcXVvdGEgZm9yIG5ldyBJRHMgaW4gdGhlIGZ1dHVyZS4KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZW1vdmVBbmRBZGRJZCkgewotICBzdGQ6OnN0cmluZyBhdWRpb19pZF8xID0gImF1ZGlvMSI7Ci0gIEFTU0VSVF9UUlVFKEFkZElkKGF1ZGlvX2lkXzEsIEhBU19BVURJTykgPT0gQ2h1bmtEZW11eGVyOjprT2spOwotICBkZW11eGVyXy0+UmVtb3ZlSWQoYXVkaW9faWRfMSk7Ci0KLSAgc3RkOjpzdHJpbmcgYXVkaW9faWRfMiA9ICJhdWRpbzIiOwotICBBU1NFUlRfVFJVRShBZGRJZChhdWRpb19pZF8yLCBIQVNfQVVESU8pID09IENodW5rRGVtdXhlcjo6a09rKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFNlZWtDYW5jZWxlZCkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICAvLyBBcHBlbmQgY2x1c3RlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDQpKSk7Ci0KLSAgLy8gU2VlayB0byBhbiB1bmJ1ZmZlcmVkIHJlZ2lvbi4KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDUwKSk7Ci0KLSAgLy8gQXR0ZW1wdCB0byByZWFkIGluIHVuYnVmZmVyZWQgYXJlYTsgc2hvdWxkIG5vdCBmdWxmaWxsIHRoZSByZWFkLgotICBib29sIGF1ZGlvX3JlYWRfZG9uZSA9IGZhbHNlOwotICBib29sIHZpZGVvX3JlYWRfZG9uZSA9IGZhbHNlOwotICBSZWFkQXVkaW8oYmFzZTo6QmluZCgmT25SZWFkRG9uZV9BYm9ydEV4cGVjdGVkLCAmYXVkaW9fcmVhZF9kb25lKSk7Ci0gIFJlYWRWaWRlbyhiYXNlOjpCaW5kKCZPblJlYWREb25lX0Fib3J0RXhwZWN0ZWQsICZ2aWRlb19yZWFkX2RvbmUpKTsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9GQUxTRSh2aWRlb19yZWFkX2RvbmUpOwotCi0gIC8vIE5vdyBjYW5jZWwgdGhlIHBlbmRpbmcgc2Vlaywgd2hpY2ggc2hvdWxkIGZsdXNoIHRoZSByZWFkcyB3aXRoIGVtcHR5Ci0gIC8vIGJ1ZmZlcnMuCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDApOwotICBkZW11eGVyXy0+Q2FuY2VsUGVuZGluZ1NlZWsoc2Vla190aW1lKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfVFJVRSh2aWRlb19yZWFkX2RvbmUpOwotCi0gIC8vIEEgc2VlayBiYWNrIHRvIHRoZSBidWZmZXJlZCByZWdpb24gc2hvdWxkIHN1Y2NlZWQuCi0gIFNlZWsoc2Vla190aW1lKTsKLSAgR2VuZXJhdGVFeHBlY3RlZFJlYWRzKDAsIDQpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2Vla0NhbmNlbGVkV2hpbGVXYWl0aW5nRm9yU2VlaykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICAvLyBBcHBlbmQgY2x1c3RlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDQpKSk7Ci0KLSAgLy8gU3RhcnQgd2FpdGluZyBmb3IgYSBzZWVrLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lMSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoNTApOwotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lMiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMCk7Ci0gIGRlbXV4ZXJfLT5TdGFydFdhaXRpbmdGb3JTZWVrKHNlZWtfdGltZTEpOwotCi0gIC8vIE5vdyBjYW5jZWwgdGhlIHVwY29taW5nIHNlZWsgdG8gYW4gdW5idWZmZXJlZCByZWdpb24uCi0gIGRlbXV4ZXJfLT5DYW5jZWxQZW5kaW5nU2VlayhzZWVrX3RpbWUyKTsKLSAgZGVtdXhlcl8tPlNlZWsoc2Vla190aW1lMSwgTmV3RXhwZWN0ZWRTdGF0dXNDQihQSVBFTElORV9PSykpOwotCi0gIC8vIFJlYWQgcmVxdWVzdHMgc2hvdWxkIGJlIGZ1bGZpbGxlZCB3aXRoIGVtcHR5IGJ1ZmZlcnMuCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGJvb2wgdmlkZW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIFJlYWRBdWRpbyhiYXNlOjpCaW5kKCZPblJlYWREb25lX0Fib3J0RXhwZWN0ZWQsICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgUmVhZFZpZGVvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmVfQWJvcnRFeHBlY3RlZCwgJnZpZGVvX3JlYWRfZG9uZSkpOwotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfVFJVRSh2aWRlb19yZWFkX2RvbmUpOwotCi0gIC8vIEEgc2VlayBiYWNrIHRvIHRoZSBidWZmZXJlZCByZWdpb24gc2hvdWxkIHN1Y2NlZWQuCi0gIFNlZWsoc2Vla190aW1lMik7Ci0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcygwLCA0KTsKLX0KLQotLy8gVGVzdCB0aGF0IFNlZWsoKSBzdWNjZXNzZnVsbHkgc2Vla3MgdG8gYWxsIHNvdXJjZSBJRHMuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2Vla0F1ZGlvQW5kVmlkZW9Tb3VyY2VzKSB7Ci0gIHN0ZDo6c3RyaW5nIGF1ZGlvX2lkID0gImF1ZGlvMSI7Ci0gIHN0ZDo6c3RyaW5nIHZpZGVvX2lkID0gInZpZGVvMSI7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyQXVkaW9BbmRWaWRlb1NvdXJjZXMoYXVkaW9faWQsIHZpZGVvX2lkKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLAotICAgICAgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDAsIDkyLCBrQXVkaW9UcmFja051bSwga0F1ZGlvQmxvY2tEdXJhdGlvbikpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3Rlcih2aWRlb19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMCwgMTMyLCBrVmlkZW9UcmFja051bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1ZpZGVvQmxvY2tEdXJhdGlvbikpKTsKLQotICAvLyBSZWFkKCkgc2hvdWxkIHJldHVybiBidWZmZXJzIGF0IDAuCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGJvb2wgdmlkZW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIFJlYWRBdWRpbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgUmVhZFZpZGVvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJnZpZGVvX3JlYWRfZG9uZSkpOwotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfVFJVRSh2aWRlb19yZWFkX2RvbmUpOwotCi0gIC8vIFNlZWsgdG8gMyAoYW4gdW5idWZmZXJlZCByZWdpb24pLgotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMykpOwotCi0gIGF1ZGlvX3JlYWRfZG9uZSA9IGZhbHNlOwotICB2aWRlb19yZWFkX2RvbmUgPSBmYWxzZTsKLSAgUmVhZEF1ZGlvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMyksCi0gICAgICAgICAgICAgICAgICAgICAgICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgUmVhZFZpZGVvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmUsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMyksCi0gICAgICAgICAgICAgICAgICAgICAgICZ2aWRlb19yZWFkX2RvbmUpKTsKLSAgLy8gUmVhZCgpcyBzaG91bGQgbm90IHJldHVybiB1bnRpbCBhZnRlciBkYXRhIGlzIGFwcGVuZGVkIGF0IHRoZSBTZWVrIHBvaW50LgotICBFWFBFQ1RfRkFMU0UoYXVkaW9fcmVhZF9kb25lKTsKLSAgRVhQRUNUX0ZBTFNFKHZpZGVvX3JlYWRfZG9uZSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMzAwMCwgMzA5Miwga0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBdWRpb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICB2aWRlb19pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDMwMDAsIDMxMzIsIGtWaWRlb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotCi0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICAvLyBSZWFkKCkgc2hvdWxkIHJldHVybiBidWZmZXJzIGF0IDMuCi0gIEVYUEVDVF9UUlVFKGF1ZGlvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9UUlVFKHZpZGVvX3JlYWRfZG9uZSk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBTZWVrKCkgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSB3aGVuIEVuZE9mU3RyZWFtCi0vLyBpcyBjYWxsZWQgYmVmb3JlIGRhdGEgaXMgYXZhaWxhYmxlIGZvciB0aGF0IHNlZWsgcG9pbnQuCi0vLyBUaGlzIHNjZW5hcmlvIG1pZ2h0IGJlIHVzZWZ1bCBpZiBzZWVraW5nIHBhc3QgdGhlIGVuZCBvZiBzdHJlYW0KLS8vIG9mIGVpdGhlciBhdWRpbyBvciB2aWRlbyAob3IgYm90aCkuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1BZnRlclBhc3RFb3NTZWVrKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwKLSAgICAgICAgICAgICAgICAgICAgICAiMEsgMTBLIDIwSyAzMEsgNDBLIDUwSyA2MEsgNzBLIDgwSyA5MEsgMTAwSyAxMTBLIiwgMTApLAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMEsgMjBLIDQwSyA2MEsgODBLIiwgMjApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxMDApIH0iKTsKLQotICAvLyBTZWVraW5nIHBhc3QgdGhlIGVuZCBvZiB2aWRlby4KLSAgLy8gTm90ZTogYXVkaW8gZGF0YSBpcyBhdmFpbGFibGUgZm9yIHRoYXQgc2VlayBwb2ludC4KLSAgYm9vbCBzZWVrX2NiX3dhc19jYWxsZWQgPSBmYWxzZTsKLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMTApOwotICBkZW11eGVyXy0+U3RhcnRXYWl0aW5nRm9yU2VlayhzZWVrX3RpbWUpOwotICBkZW11eGVyXy0+U2VlayhzZWVrX3RpbWUsCi0gICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoT25TZWVrRG9uZV9PS0V4cGVjdGVkLCAmc2Vla19jYl93YXNfY2FsbGVkKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICBFWFBFQ1RfRkFMU0Uoc2Vla19jYl93YXNfY2FsbGVkKTsKLQotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEyMCkpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxMjApIH0iKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotCi0gIEVYUEVDVF9UUlVFKHNlZWtfY2Jfd2FzX2NhbGxlZCk7Ci0KLSAgU2h1dGRvd25EZW11eGVyKCk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBFbmRPZlN0cmVhbSBpcyBpZ25vcmVkIGlmIGNvbWluZyBkdXJpbmcgYSBwZW5kaW5nIHNlZWsKLS8vIHdob3NlIHNlZWsgdGltZSBpcyBiZWZvcmUgc29tZSBleGlzdGluZyByYW5nZXMuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1EdXJpbmdQZW5kaW5nU2VlaykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBBcHBlbmRNdXhlZENsdXN0ZXIoCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgIjBLIDEwSyAyMEsgMzBLIDQwSyA1MEsgNjBLIDcwSyA4MEsgOTBLIDEwMEsgMTEwSyIsIDEwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBLIDIwSyA0MEsgNjBLIDgwSyIsIDIwKSk7Ci0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwKLSAgICAgICAgICAgICAgICAgICAgICAiMjAwSyAyMTBLIDIyMEsgMjMwSyAyNDBLIDI1MEsgMjYwSyAyNzBLIDI4MEsgMjkwSyIsIDEwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjIwMEsgMjIwSyAyNDBLIDI2MEsgMjgwSyIsIDIwKSk7Ci0KLSAgYm9vbCBzZWVrX2NiX3dhc19jYWxsZWQgPSBmYWxzZTsKLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxNjApOwotICBkZW11eGVyXy0+U3RhcnRXYWl0aW5nRm9yU2VlayhzZWVrX3RpbWUpOwotICBkZW11eGVyXy0+U2VlayhzZWVrX3RpbWUsCi0gICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoT25TZWVrRG9uZV9PS0V4cGVjdGVkLCAmc2Vla19jYl93YXNfY2FsbGVkKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICBFWFBFQ1RfRkFMU0Uoc2Vla19jYl93YXNfY2FsbGVkKTsKLQotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDMwMCkpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotCi0gIEVYUEVDVF9GQUxTRShzZWVrX2NiX3dhc19jYWxsZWQpOwotCi0gIGRlbXV4ZXJfLT5Vbm1hcmtFbmRPZlN0cmVhbSgpOwotCi0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjE0MEsgMTUwSyAxNjBLIDE3MEsiLCAxMCksCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIxNDBLIDE0NUsgMTUwSyAxNTVLIDE2MEsgMTY1SyAxNzBLIDE3NUsiLAotICAgICAgICAgICAgICAgICAgICAgIDIwKSk7Ci0KLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotCi0gIEVYUEVDVF9UUlVFKHNlZWtfY2Jfd2FzX2NhbGxlZCk7Ci0KLSAgU2h1dGRvd25EZW11eGVyKCk7Ci19Ci0KLS8vIFRlc3QgcmFuZ2VzIGluIGFuIGF1ZGlvLW9ubHkgc3RyZWFtLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdldEJ1ZmZlcmVkUmFuZ2VzX0F1ZGlvSWRPbmx5KSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTykpOwotCi0gIC8vIFRlc3QgYSBzaW1wbGUgY2x1c3Rlci4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCA5Miwga0F1ZGlvVHJhY2tOdW0sIGtBdWRpb0Jsb2NrRHVyYXRpb24pKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw5MikgfSIpOwotCi0gIC8vIEFwcGVuZCBhIGRpc2pvaW50IGNsdXN0ZXIgdG8gY2hlY2sgZm9yIHR3byBzZXBhcmF0ZSByYW5nZXMuCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKAotICAgICAgMTUwLCAyMTksIGtBdWRpb1RyYWNrTnVtLCBrQXVkaW9CbG9ja0R1cmF0aW9uKSkpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsOTIpIFsxNTAsMjE5KSB9Iik7Ci19Ci0KLS8vIFRlc3QgcmFuZ2VzIGluIGEgdmlkZW8tb25seSBzdHJlYW0uCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgR2V0QnVmZmVyZWRSYW5nZXNfVmlkZW9JZE9ubHkpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX1ZJREVPKSk7Ci0KLSAgLy8gVGVzdCBhIHNpbXBsZSBjbHVzdGVyLgotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCAxMzIsIGtWaWRlb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTMyKSB9Iik7Ci0KLSAgLy8gQXBwZW5kIGEgZGlzam9pbnQgY2x1c3RlciB0byBjaGVjayBmb3IgdHdvIHNlcGFyYXRlIHJhbmdlcy4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoCi0gICAgICAyMDAsIDI5OSwga1ZpZGVvVHJhY2tOdW0sIGtWaWRlb0Jsb2NrRHVyYXRpb24pKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxMzIpIFsyMDAsMjk5KSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBHZXRCdWZmZXJlZFJhbmdlc19TZXBhcmF0ZVN0cmVhbXMpIHsKLSAgc3RkOjpzdHJpbmcgYXVkaW9faWQgPSAiYXVkaW8xIjsKLSAgc3RkOjpzdHJpbmcgdmlkZW9faWQgPSAidmlkZW8xIjsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlcyhhdWRpb19pZCwgdmlkZW9faWQpKTsKLQotICAvLyBBcHBlbmQgYXVkaW8gYW5kIHZpZGVvIGRhdGEgaW50byBzZXBhcmF0ZSBzb3VyY2UgaWRzLgotCi0gIC8vIEF1ZGlvIGJsb2NrOiAwIC0+IDIzCi0gIC8vIFZpZGVvIGJsb2NrOiAwIC0+IDMzCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiAwIC0+IDIzCi0gIC8vIEF1ZGlvIGJsb2NrIGR1cmF0aW9uIGlzIHNtYWxsZXIgdGhhbiB2aWRlbyBibG9jayBkdXJhdGlvbiwKLSAgLy8gc28gdGhlIGJ1ZmZlcmVkIHJhbmdlcyBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgYXVkaW8gYmxvY2tzLgotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgYXVkaW9faWQsIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCAyMywga0F1ZGlvVHJhY2tOdW0sIDIzKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgdmlkZW9faWQsIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCAzMywga1ZpZGVvVHJhY2tOdW0sIDMzKSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OkFVRElPLCAieyBbMCwyMykgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OlZJREVPLCAieyBbMCwzMykgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzRm9yTWVkaWFTb3VyY2UoInsgWzAsMjMpIH0iKTsKLQotICAvLyBBdWRpbyBibG9ja3M6IDMwMCAtPiA0MDAKLSAgLy8gVmlkZW8gYmxvY2tzOiAzMjAgLT4gNDIwCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiAzMjAgLT4gNDAwICAoamFnZ2VkIHN0YXJ0IGFuZCBlbmQgYWNyb3NzIFNvdXJjZUJ1ZmZlcnMpCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICBhdWRpb19pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDMwMCwgNDAwLCBrQXVkaW9UcmFja051bSwgNTApKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICB2aWRlb19pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDMyMCwgNDIwLCBrVmlkZW9UcmFja051bSwgNTApKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFswLDIzKSBbMzAwLDQwMCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OlZJREVPLCAieyBbMCwzMykgWzMyMCw0MjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0Zvck1lZGlhU291cmNlKCJ7IFswLDIzKSBbMzIwLDQwMCkgfSIpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiA1MjAgLT4gNTkwCi0gIC8vIFZpZGVvIGJsb2NrOiA1MDAgLT4gNTcwCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiA1MjAgLT4gNTcwICAoamFnZ2VkIHN0YXJ0IGFuZCBlbmQgYWNyb3NzIFNvdXJjZUJ1ZmZlcnMpCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICBhdWRpb19pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDUyMCwgNTkwLCBrQXVkaW9UcmFja051bSwgNzApKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICB2aWRlb19pZCwgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDUwMCwgNTcwLCBrVmlkZW9UcmFja051bSwgNzApKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFswLDIzKSBbMzAwLDQwMCkgWzUyMCw1OTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywgInsgWzAsMzMpIFszMjAsNDIwKSBbNTAwLDU3MCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzRm9yTWVkaWFTb3VyY2UoInsgWzAsMjMpIFszMjAsNDAwKSBbNTIwLDU3MCkgfSIpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiA3MjAgLT4gNzUwCi0gIC8vIFZpZGVvIGJsb2NrOiA3MDAgLT4gNzcwCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiA3MjAgLT4gNzUwICAoY29tcGxldGUgb3ZlcmxhcCBvZiBhdWRpbykKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoNzIwLCA3NTAsIGtBdWRpb1RyYWNrTnVtLCAzMCkpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIHZpZGVvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoNzAwLCA3NzAsIGtWaWRlb1RyYWNrTnVtLCA3MCkpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwyMykgWzMwMCw0MDApIFs1MjAsNTkwKSBbNzIwLDc1MCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OlZJREVPLAotICAgICAgICAgICAgICAgICAgICAgICJ7IFswLDMzKSBbMzIwLDQyMCkgWzUwMCw1NzApIFs3MDAsNzcwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNGb3JNZWRpYVNvdXJjZSgieyBbMCwyMykgWzMyMCw0MDApIFs1MjAsNTcwKSBbNzIwLDc1MCkgfSIpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiA5MDAgLT4gOTcwCi0gIC8vIFZpZGVvIGJsb2NrOiA5MjAgLT4gOTUwCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiA5MjAgLT4gOTUwICAoY29tcGxldGUgb3ZlcmxhcCBvZiB2aWRlbykKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoOTAwLCA5NzAsIGtBdWRpb1RyYWNrTnVtLCA3MCkpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIHZpZGVvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoOTIwLCA5NTAsIGtWaWRlb1RyYWNrTnVtLCAzMCkpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwyMykgWzMwMCw0MDApIFs1MjAsNTkwKSBbNzIwLDc1MCkgWzkwMCw5NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwzMykgWzMyMCw0MjApIFs1MDAsNTcwKSBbNzAwLDc3MCkgWzkyMCw5NTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0Zvck1lZGlhU291cmNlKAotICAgICAgInsgWzAsMjMpIFszMjAsNDAwKSBbNTIwLDU3MCkgWzcyMCw3NTApIFs5MjAsOTUwKSB9Iik7Ci0KLSAgLy8gQXBwZW5kaW5nIHdpdGhpbiBidWZmZXJlZCByYW5nZSBzaG91bGQgbm90IGFmZmVjdCBidWZmZXJlZCByYW5nZXMuCi0gIEVYUEVDVF9NRURJQV9MT0coR2VuZXJhdGVkU3BsaWNlKDQwMDAwLCA5MzAwMDApKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoOTMwLCA5NTAsIGtBdWRpb1RyYWNrTnVtLCAyMCkpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIHZpZGVvX2lkLCBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoOTMwLCA5NTAsIGtWaWRlb1RyYWNrTnVtLCAyMCkpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwyMykgWzMwMCw0MDApIFs1MjAsNTkwKSBbNzIwLDc1MCkgWzkwMCw5NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwzMykgWzMyMCw0MjApIFs1MDAsNTcwKSBbNzAwLDc3MCkgWzkyMCw5NTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0Zvck1lZGlhU291cmNlKAotICAgICAgInsgWzAsMjMpIFszMjAsNDAwKSBbNTIwLDU3MCkgWzcyMCw3NTApIFs5MjAsOTUwKSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBHZXRCdWZmZXJlZFJhbmdlc19BdWRpb1ZpZGVvKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiAwIC0+IDIzCi0gIC8vIFZpZGVvIGJsb2NrOiAwIC0+IDMzCi0gIC8vIEJ1ZmZlcmVkIFJhbmdlOiAwIC0+IDIzCi0gIC8vIEF1ZGlvIGJsb2NrIGR1cmF0aW9uIGlzIHNtYWxsZXIgdGhhbiB2aWRlbyBibG9jayBkdXJhdGlvbiwKLSAgLy8gc28gdGhlIGJ1ZmZlcmVkIHJhbmdlcyBzaG91bGQgY29ycmVzcG9uZCB0byB0aGUgYXVkaW8gYmxvY2tzLgotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEQyM0siKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBEMzNLIikpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFswLDIzKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sICJ7IFswLDMzKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMjMpIH0iKTsKLQotICAvLyBBdWRpbyBibG9ja3M6IDMwMCAtPiA0MDAKLSAgLy8gVmlkZW8gYmxvY2tzOiAzMjAgLT4gNDIwCi0gIC8vIE5haXZlIEJ1ZmZlcmVkIFJhbmdlOiAzMjAgLT4gNDAwICAoZW5kIG92ZXJsYXApICoqCi0gIC8vICoqRXhjZXB0IHRoZXNlIGFyZSBpbiB0aGUgc2FtZSBjbHVzdGVyLCB3aXRoIHNhbWUgc2VnbWVudCBzdGFydCB0aW1lIG9mCi0gIC8vIDMwMCwgc28gdGhlIGFkZGVkIGJ1ZmZlcmVkIHJhbmdlIGlzIDMwMCAtPiA0MDAgIChzdGlsbCB3aXRoIGVuZCBvdmVybGFwKQotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMzAwSyAzNTBENTBLIiksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIzMjBLIDM3MEQ1MEsiKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywgInsgWzAsMjMpIFszMDAsNDAwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sICJ7IFswLDMzKSBbMzAwLDQyMCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDIzKSBbMzAwLDQwMCkgfSIpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiA1MjAgLT4gNTkwCi0gIC8vIFZpZGVvIGJsb2NrOiA1MDAgLT4gNTcwCi0gIC8vIE5haXZlIEJ1ZmZlcmVkIFJhbmdlOiA1MjAgLT4gNTcwICAoZnJvbnQgb3ZlcmxhcCkgKioKLSAgLy8gKipFeGNlcHQgdGhlc2UgYXJlIGluIHRoZSBzYW1lIGNsdXN0ZXIsIHdpdGggc2FtZSBzZWdtZW50IHN0YXJ0IHRpbWUgb2YKLSAgLy8gNTAwLCBzbyB0aGUgYWRkZWQgYnVmZmVyZWQgcmFuZ2UgaXMgNTAwIC0+IDU3MAotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiNTIwRDcwSyIpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiNTAwRDcwSyIpKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OkFVRElPLCAieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTkwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sICJ7IFswLDMzKSBbMzAwLDQyMCkgWzUwMCw1NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTcwKSB9Iik7Ci0KLSAgLy8gQXVkaW8gYmxvY2s6IDcyMCAtPiA3NTAKLSAgLy8gVmlkZW8gYmxvY2s6IDcwMCAtPiA3NzAKLSAgLy8gTmFpdmUgQnVmZmVyZWQgUmFuZ2U6IDcyMCAtPiA3NTAgIChjb21wbGV0ZSBvdmVybGFwLCBhdWRpbykgKioKLSAgLy8gKipFeGNlcHQgdGhlc2UgYXJlIGluIHRoZSBzYW1lIGNsdXN0ZXIsIHdpdGggc2FtZSBzZWdtZW50IHN0YXJ0IHRpbWUgb2YKLSAgLy8gNzAwLCBzbyB0aGUgYWRkZWQgYnVmZmVyZWQgcmFuZ2UgaXMgNzAwIC0+IDc1MAotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiNzIwRDMwSyIpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiNzAwRDcwSyIpKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OkFVRElPLAotICAgICAgICAgICAgICAgICAgICAgICJ7IFswLDIzKSBbMzAwLDQwMCkgWzUwMCw1OTApIFs3MDAsNzUwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sCi0gICAgICAgICAgICAgICAgICAgICAgInsgWzAsMzMpIFszMDAsNDIwKSBbNTAwLDU3MCkgWzcwMCw3NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTcwKSBbNzAwLDc1MCkgfSIpOwotCi0gIC8vIEF1ZGlvIGJsb2NrOiA5MDAgLT4gOTcwCi0gIC8vIFZpZGVvIGJsb2NrOiA5MjAgLT4gOTUwCi0gIC8vIE5haXZlIEJ1ZmZlcmVkIFJhbmdlOiA5MjAgLT4gOTUwICAoY29tcGxldGUgb3ZlcmxhcCwgdmlkZW8pICoqCi0gIC8vICoqRXhjZXB0IHRoZXNlIGFyZSBpbiB0aGUgc2FtZSBjbHVzdGVyLCB3aXRoIHNhbWUgc2VnbWVudCBzdGFydCB0aW1lIG9mCi0gIC8vIDkwMCwgc28gdGhlIGFkZGVkIGJ1ZmZlcmVkIHJhbmdlIGlzIDkwMCAtPiA5NTAKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjkwMEQ3MEsiKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjkyMEQzMEsiKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTkwKSBbNzAwLDc1MCkgWzkwMCw5NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwzMykgWzMwMCw0MjApIFs1MDAsNTcwKSBbNzAwLDc3MCkgWzkwMCw5NTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTcwKSBbNzAwLDc1MCkgWzkwMCw5NTApIH0iKTsKLQotICAvLyBBcHBlbmRpbmcgd2l0aGluIGJ1ZmZlcmVkIHJhbmdlIHNob3VsZCBub3QgYWZmZWN0IGJ1ZmZlcmVkIHJhbmdlcy4KLSAgRVhQRUNUX01FRElBX0xPRyhHZW5lcmF0ZWRTcGxpY2UoNDAwMDAsIDkzMDAwMCkpOwotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiOTMwRDIwSyIpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiOTMwRDIwSyIpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTkwKSBbNzAwLDc1MCkgWzkwMCw5NzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywKLSAgICAgICAgICAgICAgICAgICAgICAieyBbMCwzMykgWzMwMCw0MjApIFs1MDAsNTcwKSBbNzAwLDc3MCkgWzkwMCw5NTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyMykgWzMwMCw0MDApIFs1MDAsNTcwKSBbNzAwLDc1MCkgWzkwMCw5NTApIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdldEJ1ZmZlcmVkUmFuZ2VzX0F1ZGlvVmlkZW9UZXh0KSB7Ci0gIEVYUEVDVF9DQUxMKGhvc3RfLCBBZGRUZXh0U3RyZWFtKF8sIF8pKTsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPIHwgSEFTX1RFWFQpKTsKLQotICAvLyBBcHBlbmQgYXVkaW8gJiB2aWRlbyBkYXRhCi0gIEFwcGVuZE11eGVkQ2x1c3RlcihNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sICIwSyAyM0siLCAyMyksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIwSyAzMyIsIDMzKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgYSB0ZXh0IHRyYWNrIHdpdGggbm8gY3VlcyBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZW1wdHkgYnVmZmVyZWQKLSAgLy8gcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNDYpIH0iKTsKLQotICAvLyBBZGQgc29tZSB0ZXh0IGN1ZXMuCi0gIEFwcGVuZE11eGVkQ2x1c3RlcihNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sICIxMDBLIDEyM0siLCAyMyksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIxMDBLIDEzMyIsIDMzKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiMTAwSyAyMDBLIikpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSB0ZXh0IGN1ZXMgYXJlIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGJ1ZmZlcmVkIHJhbmdlcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0NikgWzEwMCwxNDYpIH0iKTsKLQotICAvLyBSZW1vdmUgdGhlIGJ1ZmZlcmVkIHJhbmdlcy4KLSAgZGVtdXhlcl8tPlJlbW92ZShrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNTApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyB9Iik7Ci19Ci0KLS8vIE9uY2UgTWFya0VuZE9mU3RyZWFtKCkgaXMgY2FsbGVkLCBHZXRCdWZmZXJlZFJhbmdlcyBzaG91bGQgbm90IGN1dCBvZmYgYW55Ci0vLyBvdmVyLWhhbmdpbmcgdGFpbHMgYXQgdGhlIGVuZCBvZiB0aGUgcmFuZ2VzIGFzIHRoaXMgaXMgbGlrZWx5IGR1ZSB0byBibG9jawotLy8gZHVyYXRpb24gZGlmZmVyZW5jZXMuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgR2V0QnVmZmVyZWRSYW5nZXNfRW5kT2ZTdHJlYW0pIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjBLIDIzSyIsIDIzKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBLIDMzIiwgMzMpKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSB9Iik7Ci0KLSAgRVhQRUNUX0NBTEwoaG9zdF8sIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg2NikpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmFuZ2UgZXh0ZW5kcyB0byB0aGUgZW5kIG9mIHRoZSB2aWRlbyBkYXRhLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDY2KSB9Iik7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHJhbmdlIHJldmVydHMgdG8gdGhlIGludGVyc2VjdGlvbiB3aGVuIGVuZCBvZiBzdHJlYW0KLSAgLy8gaGFzIGJlZW4gY2FuY2VsbGVkLgotICBkZW11eGVyXy0+VW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0NikgfSIpOwotCi0gIC8vIEFwcGVuZCBhbmQgcmVtb3ZlIGRhdGEgc28gdGhhdCB0aGUgMiBzdHJlYW1zJyBlbmQgcmFuZ2VzIGRvIG5vdCBvdmVybGFwLgotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDM5OCkpKTsKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMjAwSyAyMjNLIiwgMjMpLAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMjAwSyAyMzMgMjY2IDI5OSAzMzJLIDM2NSIsIDMzKSk7Ci0KLSAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHBlci1zdHJlYW0gcmFuZ2VzIGFyZSBhcyBmb2xsb3dzOgotICAvLyBBdWRpbzogWzAsNDYpIFsyMDAsMjQ2KQotICAvLyBWaWRlbzogWzAsNjYpIFsyMDAsMzk4KQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSBbMjAwLDI0NikgfSIpOwotCi0gIGRlbXV4ZXJfLT5SZW1vdmUoa1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjAwKSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMzAwKSk7Ci0KLSAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHBlci1zdHJlYW0gcmFuZ2VzIGFyZSBhcyBmb2xsb3dzOgotICAvLyBBdWRpbzogWzAsNDYpCi0gIC8vIFZpZGVvOiBbMCw2NikgWzMzMiwzOTgpCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNDYpIH0iKTsKLQotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMjAwSyAyMjNLIiwgMjMpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMjAwSyAyMzMiLCAzMykpOwotCi0gIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBwZXItc3RyZWFtIHJhbmdlcyBhcmUgYXMgZm9sbG93czoKLSAgLy8gQXVkaW86IFswLDQ2KSBbMjAwLDI0NikKLSAgLy8gVmlkZW86IFswLDY2KSBbMjAwLDI2NikgWzMzMiwzOTgpCi0gIC8vIE5PVEU6IFRoZSBsYXN0IHJhbmdlIG9uIGVhY2ggc3RyZWFtIGRvIG5vdCBvdmVybGFwIGluIHRpbWUuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNDYpIFsyMDAsMjQ2KSB9Iik7Ci0KLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICAvLyBOT1RFOiBUaGUgbGFzdCByYW5nZSBvbiBlYWNoIHN0cmVhbSBnZXRzIGV4dGVuZGVkIHRvIHRoZSBoaWdoZXN0Ci0gIC8vIGVuZCB0aW1lc3RhbXAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLiBUaGUgbGFzdCBhdWRpbyByYW5nZSBnZXRzIGV4dGVuZGVkCi0gIC8vIGZyb20gWzIwMCwyNDYpIHRvIFsyMDAsMzk4KSB3aGljaCBpcyB3aHkgdGhlIGludGVyc2VjdGlvbiByZXN1bHRzIGluIHRoZQotICAvLyBtaWRkbGUgcmFuZ2UgZ2V0dGluZyBsYXJnZXIgQU5EIHRoZSBuZXcgcmFuZ2UgYXBwZWFyaW5nLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQ2KSBbMjAwLDI2NikgWzMzMiwzOTgpIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIERpZmZlcmVudFN0cmVhbVRpbWVjb2RlcykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICAvLyBDcmVhdGUgYSBjbHVzdGVyIHdoZXJlIHRoZSB2aWRlbyB0aW1lY29kZSBiZWdpbnMgMjVtcyBhZnRlciB0aGUgYXVkaW8uCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDI1LCA4KSkpOwotCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygwKSk7Ci0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcygwLCAyNSwgOCk7Ci0KLSAgLy8gU2VlayB0byA1IHNlY29uZHMuCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg1KSk7Ci0KLSAgLy8gR2VuZXJhdGUgYSBjbHVzdGVyIHRvIGZ1bGZpbGwgdGhpcyBzZWVrLCB3aGVyZSBhdWRpbyB0aW1lY29kZSBiZWdpbnMgMjVtcwotICAvLyBhZnRlciB0aGUgdmlkZW8uCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDUwMjUsIDUwMDAsIDgpKSk7Ci0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcyg1MDI1LCA1MDAwLCA4KTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIERpZmZlcmVudFN0cmVhbVRpbWVjb2Rlc1NlcGFyYXRlU291cmNlcykgewotICBzdGQ6OnN0cmluZyBhdWRpb19pZCA9ICJhdWRpbzEiOwotICBzdGQ6OnN0cmluZyB2aWRlb19pZCA9ICJ2aWRlbzEiOwotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlckF1ZGlvQW5kVmlkZW9Tb3VyY2VzKGF1ZGlvX2lkLCB2aWRlb19pZCkpOwotCi0gIC8vIEdlbmVyYXRlIHR3byBzdHJlYW1zIHdoZXJlIHRoZSB2aWRlbyBzdHJlYW0gc3RhcnRzIDVtcyBhZnRlciB0aGUgYXVkaW8KLSAgLy8gc3RyZWFtIGFuZCBhcHBlbmQgdGhlbS4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcigKLSAgICAgIGF1ZGlvX2lkLAotICAgICAgR2VuZXJhdGVTaW5nbGVTdHJlYW1DbHVzdGVyKDI1LCA0ICoga0F1ZGlvQmxvY2tEdXJhdGlvbiArIDI1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBdWRpb1RyYWNrTnVtLCBrQXVkaW9CbG9ja0R1cmF0aW9uKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgdmlkZW9faWQsCi0gICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMzAsIDQgKiBrVmlkZW9CbG9ja0R1cmF0aW9uICsgMzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1ZpZGVvVHJhY2tOdW0sIGtWaWRlb0Jsb2NrRHVyYXRpb24pKSk7Ci0KLSAgLy8gQm90aCBzdHJlYW1zIHNob3VsZCBiZSBhYmxlIHRvIGZ1bGZpbGwgYSBzZWVrIHRvIDI1LgotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNSkpOwotICBHZW5lcmF0ZUF1ZGlvU3RyZWFtRXhwZWN0ZWRSZWFkcygyNSwgNCk7Ci0gIEdlbmVyYXRlVmlkZW9TdHJlYW1FeHBlY3RlZFJlYWRzKDMwLCA0KTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIERpZmZlcmVudFN0cmVhbVRpbWVjb2Rlc091dE9mUmFuZ2UpIHsKLSAgc3RkOjpzdHJpbmcgYXVkaW9faWQgPSAiYXVkaW8xIjsKLSAgc3RkOjpzdHJpbmcgdmlkZW9faWQgPSAidmlkZW8xIjsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlcyhhdWRpb19pZCwgdmlkZW9faWQpKTsKLQotICAvLyBHZW5lcmF0ZSB0d28gc3RyZWFtcyB3aGVyZSB0aGUgdmlkZW8gc3RyZWFtIHN0YXJ0cyAxMHMgYWZ0ZXIgdGhlIGF1ZGlvCi0gIC8vIHN0cmVhbSBhbmQgYXBwZW5kIHRoZW0uCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICBhdWRpb19pZCwKLSAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCA0ICoga0F1ZGlvQmxvY2tEdXJhdGlvbiArIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0F1ZGlvVHJhY2tOdW0sIGtBdWRpb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICB2aWRlb19pZCwKLSAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigxMDAwMCwgNCAqIGtWaWRlb0Jsb2NrRHVyYXRpb24gKyAxMDAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9UcmFja051bSwga1ZpZGVvQmxvY2tEdXJhdGlvbikpKTsKLQotICAvLyBTaG91bGQgbm90IGJlIGFibGUgdG8gZnVsZmlsbCBhIHNlZWsgdG8gMC4KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKTsKLSAgZGVtdXhlcl8tPlN0YXJ0V2FpdGluZ0ZvclNlZWsoc2Vla190aW1lKTsKLSAgZGVtdXhlcl8tPlNlZWsoc2Vla190aW1lLCBOZXdFeHBlY3RlZFN0YXR1c0NCKFBJUEVMSU5FX0VSUk9SX0FCT1JUKSk7Ci0gIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6QVVESU8sIDApOwotICBFeHBlY3RFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBDb2RlY1ByZWZpeE1hdGNoaW5nKSB7Ci0gIENodW5rRGVtdXhlcjo6U3RhdHVzIGV4cGVjdGVkID0gQ2h1bmtEZW11eGVyOjprTm90U3VwcG9ydGVkOwotCi0jaWYgZGVmaW5lZChVU0VfUFJPUFJJRVRBUllfQ09ERUNTKQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSAgaWYgKEhhc1BsYXRmb3JtRGVjb2RlclN1cHBvcnQoKSkgZXhwZWN0ZWQgPSBDaHVua0RlbXV4ZXI6OmtPazsKLSNlbHNlCi0gIGV4cGVjdGVkID0gQ2h1bmtEZW11eGVyOjprT2s7Ci0jZW5kaWYKLSNlbmRpZgotCi0gIEVYUEVDVF9FUShkZW11eGVyXy0+QWRkSWQoInNvdXJjZV9pZCIsICJ2aWRlby9tcDQiLCAiYXZjMS40RDQwNDEiKSwgZXhwZWN0ZWQpOwotfQotCi0vLyBUZXN0IGNvZGVjIElEJ3MgdGhhdCBhcmUgbm90IGNvbXBsaWFudCB3aXRoIFJGQzYzODEsIGJ1dCBoYXZlIGJlZW4KLS8vIHNlZW4gaW4gdGhlIHdpbGQuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQ29kZWNJRHNUaGF0QXJlTm90UkZDNjM4MUNvbXBsaWFudCkgewotICBDaHVua0RlbXV4ZXI6OlN0YXR1cyBleHBlY3RlZCA9IENodW5rRGVtdXhlcjo6a05vdFN1cHBvcnRlZDsKLQotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLSAgZXhwZWN0ZWQgPSBDaHVua0RlbXV4ZXI6OmtPazsKLSNlbmRpZgotICBjb25zdCBjaGFyKiBjb2RlY19pZHNbXSA9IHsKLSAgICAgIC8vIEdQQUMgcGxhY2VzIGxlYWRpbmcgemVyb3Mgb24gdGhlIGF1ZGlvIG9iamVjdCB0eXBlLgotICAgICAgIm1wNGEuNDAuMDIiLCAibXA0YS40MC4wNSJ9OwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGNvZGVjX2lkcyk7ICsraSkgewotICAgIENodW5rRGVtdXhlcjo6U3RhdHVzIHJlc3VsdCA9Ci0gICAgICAgIGRlbXV4ZXJfLT5BZGRJZCgic291cmNlX2lkIiwgImF1ZGlvL21wNCIsIGNvZGVjX2lkc1tpXSk7Ci0KLSAgICBFWFBFQ1RfRVEocmVzdWx0LCBleHBlY3RlZCkKLSAgICAgICAgPDwgIkZhaWwgdG8gYWRkIGNvZGVjX2lkICciIDw8IGNvZGVjX2lkc1tpXSA8PCAiJyI7Ci0KLSAgICBpZiAocmVzdWx0ID09IENodW5rRGVtdXhlcjo6a09rKSBkZW11eGVyXy0+UmVtb3ZlSWQoInNvdXJjZV9pZCIpOwotICB9Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBFbmRPZlN0cmVhbVN0aWxsU2V0QWZ0ZXJTZWVrKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBTZXREdXJhdGlvbihfKSkuVGltZXMoQW55TnVtYmVyKCkpOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBrTGFzdEF1ZGlvVGltZXN0YW1wID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDkyKTsKLSAgYmFzZTo6VGltZURlbHRhIGtMYXN0VmlkZW9UaW1lc3RhbXAgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoOTkpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0U2Vjb25kQ2x1c3RlcigpKSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci0KLSAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1czsKLSAgYmFzZTo6VGltZURlbHRhIGxhc3RfdGltZXN0YW1wOwotCi0gIC8vIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFkIGF1ZGlvICYgdmlkZW8gdG8gdGhlIGVuZCB3L28gcHJvYmxlbXMuCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgRVhQRUNUX0VRKERlbXV4ZXJTdHJlYW06OmtPaywgc3RhdHVzKTsKLSAgRVhQRUNUX0VRKGtMYXN0QXVkaW9UaW1lc3RhbXAsIGxhc3RfdGltZXN0YW1wKTsKLQotICBSZWFkVW50aWxOb3RPa09yRW5kT2ZTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8sICZzdGF0dXMsICZsYXN0X3RpbWVzdGFtcCk7Ci0gIEVYUEVDVF9FUShEZW11eGVyU3RyZWFtOjprT2ssIHN0YXR1cyk7Ci0gIEVYUEVDVF9FUShrTGFzdFZpZGVvVGltZXN0YW1wLCBsYXN0X3RpbWVzdGFtcCk7Ci0KLSAgLy8gU2VlayBiYWNrIHRvIDAgYW5kIHZlcmlmeSB0aGF0IHdlIGNhbiByZWFkIHRvIHRoZSBlbmQgYWdhaW4uLgotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSk7Ci0KLSAgUmVhZFVudGlsTm90T2tPckVuZE9mU3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPLCAmc3RhdHVzLCAmbGFzdF90aW1lc3RhbXApOwotICBFWFBFQ1RfRVEoRGVtdXhlclN0cmVhbTo6a09rLCBzdGF0dXMpOwotICBFWFBFQ1RfRVEoa0xhc3RBdWRpb1RpbWVzdGFtcCwgbGFzdF90aW1lc3RhbXApOwotCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgRVhQRUNUX0VRKERlbXV4ZXJTdHJlYW06OmtPaywgc3RhdHVzKTsKLSAgRVhQRUNUX0VRKGtMYXN0VmlkZW9UaW1lc3RhbXAsIGxhc3RfdGltZXN0YW1wKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdldEJ1ZmZlcmVkUmFuZ2VzQmVmb3JlSW5pdFNlZ21lbnQpIHsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0gIGRlbXV4ZXJfLT5Jbml0aWFsaXplKAotICAgICAgJmhvc3RfLAotICAgICAgYmFzZTo6QmluZCgmQ2h1bmtEZW11eGVyVGVzdDo6RGVtdXhlckluaXRpYWxpemVkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIHRydWUpOwotICBBU1NFUlRfRVEoQWRkSWQoImF1ZGlvIiwgSEFTX0FVRElPKSwgQ2h1bmtEZW11eGVyOjprT2spOwotICBBU1NFUlRfRVEoQWRkSWQoInZpZGVvIiwgSEFTX1ZJREVPKSwgQ2h1bmtEZW11eGVyOjprT2spOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoImF1ZGlvIiwgInsgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ2aWRlbyIsICJ7IH0iKTsKLX0KLQotLy8gVGVzdCB0aGF0IFNlZWsoKSBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IHdoZW4gdGhlIGZpcnN0IGNsdXN0ZXIKLS8vIGFycml2ZXMuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1EdXJpbmdTZWVrKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0Rmlyc3RDbHVzdGVyKCkpKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygwKTsKLSAgZGVtdXhlcl8tPlN0YXJ0V2FpdGluZ0ZvclNlZWsoc2Vla190aW1lKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKGtEZWZhdWx0U2Vjb25kQ2x1c3RlcigpKSk7Ci0gIEVYUEVDVF9DQUxMKGhvc3RfLCBTZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAga0RlZmF1bHRTZWNvbmRDbHVzdGVyRW5kVGltZXN0YW1wKSkpOwotICBNYXJrRW5kT2ZTdHJlYW0oUElQRUxJTkVfT0spOwotCi0gIGRlbXV4ZXJfLT5TZWVrKHNlZWtfdGltZSwgTmV3RXhwZWN0ZWRTdGF0dXNDQihQSVBFTElORV9PSykpOwotCi0gIEdlbmVyYXRlRXhwZWN0ZWRSZWFkcygwLCA0KTsKLSAgR2VuZXJhdGVFeHBlY3RlZFJlYWRzKDQ2LCA2NiwgNSk7Ci0KLSAgRW5kT2ZTdHJlYW1IZWxwZXIgZW5kX29mX3N0cmVhbV9oZWxwZXIoZGVtdXhlcl8uZ2V0KCkpOwotICBlbmRfb2Zfc3RyZWFtX2hlbHBlci5SZXF1ZXN0UmVhZHMoKTsKLSAgZW5kX29mX3N0cmVhbV9oZWxwZXIuQ2hlY2tJZlJlYWREb25lc1dlcmVDYWxsZWQodHJ1ZSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBDb25maWdDaGFuZ2VfVmlkZW8pIHsKLSAgSW5TZXF1ZW5jZSBzOwotCi0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyV2l0aENvbmZpZ0NoYW5nZURhdGEoKSk7Ci0KLSAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1czsKLSAgYmFzZTo6VGltZURlbHRhIGxhc3RfdGltZXN0YW1wOwotCi0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgLy8gRmV0Y2ggaW5pdGlhbCB2aWRlbyBjb25maWcgYW5kIHZlcmlmeSBpdCBtYXRjaGVzIHdoYXQgd2UgZXhwZWN0LgotICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZ18xID0gdmlkZW8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCk7Ci0gIEFTU0VSVF9UUlVFKHZpZGVvX2NvbmZpZ18xLklzVmFsaWRDb25maWcoKSk7Ci0gIEVYUEVDVF9FUSh2aWRlb19jb25maWdfMS5uYXR1cmFsX3NpemUoKS53aWR0aCgpLCAzMjApOwotICBFWFBFQ1RfRVEodmlkZW9fY29uZmlnXzEubmF0dXJhbF9zaXplKCkuaGVpZ2h0KCksIDI0MCk7Ci0KLSAgRXhwZWN0UmVhZChEZW11eGVyU3RyZWFtOjpWSURFTywgMCk7Ci0KLSAgUmVhZFVudGlsTm90T2tPckVuZE9mU3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPLCAmc3RhdHVzLCAmbGFzdF90aW1lc3RhbXApOwotCi0gIEFTU0VSVF9FUShzdGF0dXMsIERlbXV4ZXJTdHJlYW06OmtDb25maWdDaGFuZ2VkKTsKLSAgRVhQRUNUX0VRKGxhc3RfdGltZXN0YW1wLkluTWlsbGlzZWNvbmRzKCksIDUwMSk7Ci0KLSAgLy8gRmV0Y2ggdGhlIG5ldyBkZWNvZGVyIGNvbmZpZy4KLSAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWdfMiA9IHZpZGVvLT52aWRlb19kZWNvZGVyX2NvbmZpZygpOwotICBBU1NFUlRfVFJVRSh2aWRlb19jb25maWdfMi5Jc1ZhbGlkQ29uZmlnKCkpOwotICBFWFBFQ1RfRVEodmlkZW9fY29uZmlnXzIubmF0dXJhbF9zaXplKCkud2lkdGgoKSwgNjQwKTsKLSAgRVhQRUNUX0VRKHZpZGVvX2NvbmZpZ18yLm5hdHVyYWxfc2l6ZSgpLmhlaWdodCgpLCAzNjApOwotCi0gIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6VklERU8sIDUyNyk7Ci0KLSAgLy8gUmVhZCB1bnRpbCB0aGUgbmV4dCBjb25maWcgY2hhbmdlLgotICBSZWFkVW50aWxOb3RPa09yRW5kT2ZTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8sICZzdGF0dXMsICZsYXN0X3RpbWVzdGFtcCk7Ci0gIEFTU0VSVF9FUShzdGF0dXMsIERlbXV4ZXJTdHJlYW06OmtDb25maWdDaGFuZ2VkKTsKLSAgRVhQRUNUX0VRKGxhc3RfdGltZXN0YW1wLkluTWlsbGlzZWNvbmRzKCksIDc2MCk7Ci0KLSAgLy8gR2V0IHRoZSBuZXcgY29uZmlnIGFuZCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBmaXJzdCBvbmUuCi0gIEFTU0VSVF9UUlVFKHZpZGVvX2NvbmZpZ18xLk1hdGNoZXModmlkZW8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCkpKTsKLQotICBFeHBlY3RSZWFkKERlbXV4ZXJTdHJlYW06OlZJREVPLCA4MDEpOwotCi0gIC8vIFJlYWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIKLSAgLy8gY29uZmlnIGNoYW5nZXMuCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgQVNTRVJUX0VRKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a09rKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIENvbmZpZ0NoYW5nZV9BdWRpbykgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJXaXRoQ29uZmlnQ2hhbmdlRGF0YSgpKTsKLQotICBEZW11eGVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzOwotICBiYXNlOjpUaW1lRGVsdGEgbGFzdF90aW1lc3RhbXA7Ci0KLSAgRGVtdXhlclN0cmVhbSogYXVkaW8gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLQotICAvLyBGZXRjaCBpbml0aWFsIGF1ZGlvIGNvbmZpZyBhbmQgdmVyaWZ5IGl0IG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QuCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnXzEgPSBhdWRpby0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fY29uZmlnXzEuSXNWYWxpZENvbmZpZygpKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX2NvbmZpZ18xLnNhbXBsZXNfcGVyX3NlY29uZCgpLCA0NDEwMCk7Ci0gIEVYUEVDVF9FUShhdWRpb19jb25maWdfMS5leHRyYV9kYXRhKCkuc2l6ZSgpLCAzODYzdSk7Ci0KLSAgRXhwZWN0UmVhZChEZW11eGVyU3RyZWFtOjpBVURJTywgMCk7Ci0KLSAgLy8gVGhlIGZpcnN0IGNvbmZpZyBjaGFuZ2Ugc2VlbiBpcyBmcm9tIGEgc3BsaWNlIGZyYW1lIHJlcHJlc2VudGluZyBhbiBvdmVybGFwCi0gIC8vIG9mIGJ1ZmZlciBmcm9tIGNvbmZpZyAxIGJ5IGJ1ZmZlcnMgZnJvbSBjb25maWcgMi4KLSAgUmVhZFVudGlsTm90T2tPckVuZE9mU3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPLCAmc3RhdHVzLCAmbGFzdF90aW1lc3RhbXApOwotICBBU1NFUlRfRVEoc3RhdHVzLCBEZW11eGVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlZCk7Ci0gIEVYUEVDVF9FUShsYXN0X3RpbWVzdGFtcC5Jbk1pbGxpc2Vjb25kcygpLCA1MjQpOwotCi0gIC8vIEZldGNoIHRoZSBuZXcgZGVjb2RlciBjb25maWcuCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnXzIgPSBhdWRpby0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fY29uZmlnXzIuSXNWYWxpZENvbmZpZygpKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX2NvbmZpZ18yLnNhbXBsZXNfcGVyX3NlY29uZCgpLCA0NDEwMCk7Ci0gIEVYUEVDVF9FUShhdWRpb19jb25maWdfMi5leHRyYV9kYXRhKCkuc2l6ZSgpLCAzOTM1dSk7Ci0KLSAgLy8gVGhlIG5leHQgY29uZmlnIGNoYW5nZSBpcyBmcm9tIGEgc3BsaWNlIGZyYW1lIHJlcHJlc2VudGluZyBhbiBvdmVybGFwIG9mCi0gIC8vIGJ1ZmZlcnMgZnJvbSBjb25maWcgMiBieSBidWZmZXJzIGZyb20gY29uZmlnIDEuCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgQVNTRVJUX0VRKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZWQpOwotICBFWFBFQ1RfRVEobGFzdF90aW1lc3RhbXAuSW5NaWxsaXNlY29uZHMoKSwgNzgyKTsKLSAgQVNTRVJUX1RSVUUoYXVkaW9fY29uZmlnXzEuTWF0Y2hlcyhhdWRpby0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKSkpOwotCi0gIC8vIFJlYWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIKLSAgLy8gY29uZmlnIGNoYW5nZXMuCi0gIFJlYWRVbnRpbE5vdE9rT3JFbmRPZlN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTywgJnN0YXR1cywgJmxhc3RfdGltZXN0YW1wKTsKLSAgQVNTRVJUX0VRKHN0YXR1cywgRGVtdXhlclN0cmVhbTo6a09rKTsKLSAgRVhQRUNUX0VRKGxhc3RfdGltZXN0YW1wLkluTWlsbGlzZWNvbmRzKCksIDI3NDQpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQ29uZmlnQ2hhbmdlX1NlZWspIHsKLSAgSW5TZXF1ZW5jZSBzOwotCi0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyV2l0aENvbmZpZ0NoYW5nZURhdGEoKSk7Ci0KLSAgRGVtdXhlclN0cmVhbSogdmlkZW8gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLQotICAvLyBGZXRjaCBpbml0aWFsIHZpZGVvIGNvbmZpZyBhbmQgdmVyaWZ5IGl0IG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QuCi0gIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnXzEgPSB2aWRlby0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgQVNTRVJUX1RSVUUodmlkZW9fY29uZmlnXzEuSXNWYWxpZENvbmZpZygpKTsKLSAgRVhQRUNUX0VRKHZpZGVvX2NvbmZpZ18xLm5hdHVyYWxfc2l6ZSgpLndpZHRoKCksIDMyMCk7Ci0gIEVYUEVDVF9FUSh2aWRlb19jb25maWdfMS5uYXR1cmFsX3NpemUoKS5oZWlnaHQoKSwgMjQwKTsKLQotICBFeHBlY3RSZWFkKERlbXV4ZXJTdHJlYW06OlZJREVPLCAwKTsKLQotICAvLyBTZWVrIHRvIGEgbG9jYXRpb24gd2l0aCBhIGRpZmZlcmVudCBjb25maWcuCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDUyNykpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBjb25maWcgY2hhbmdlIGlzIHNpZ25hbGxlZC4KLSAgRXhwZWN0Q29uZmlnQ2hhbmdlZChEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgLy8gRmV0Y2ggdGhlIG5ldyBkZWNvZGVyIGNvbmZpZyBhbmQgdmVyaWZ5IGl0IGlzIHdoYXQgd2UgZXhwZWN0LgotICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZ18yID0gdmlkZW8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCk7Ci0gIEFTU0VSVF9UUlVFKHZpZGVvX2NvbmZpZ18yLklzVmFsaWRDb25maWcoKSk7Ci0gIEVYUEVDVF9FUSh2aWRlb19jb25maWdfMi5uYXR1cmFsX3NpemUoKS53aWR0aCgpLCA2NDApOwotICBFWFBFQ1RfRVEodmlkZW9fY29uZmlnXzIubmF0dXJhbF9zaXplKCkuaGVpZ2h0KCksIDM2MCk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgUmVhZCgpIHdpbGwgcmV0dXJuIGEgYnVmZmVyIG5vdy4KLSAgRXhwZWN0UmVhZChEZW11eGVyU3RyZWFtOjpWSURFTywgNTI3KTsKLQotICAvLyBTZWVrIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBhbmQgdmVyaWZ5IHdlIGdldCBhbm90aGVyIGNvbmZpZyBjaGFuZ2UuCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDApKTsKLSAgRXhwZWN0Q29uZmlnQ2hhbmdlZChEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0gIEFTU0VSVF9UUlVFKHZpZGVvX2NvbmZpZ18xLk1hdGNoZXModmlkZW8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCkpKTsKLSAgRXhwZWN0UmVhZChEZW11eGVyU3RyZWFtOjpWSURFTywgMCk7Ci0KLSAgLy8gU2VlayB0byBhIGxvY2F0aW9uIHRoYXQgcmVxdWlyZXMgYSBjb25maWcgY2hhbmdlIGFuZCB0aGVuCi0gIC8vIHNlZWsgdG8gYSBuZXcgbG9jYXRpb24gdGhhdCBoYXMgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBhcwotICAvLyB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgd2l0aG91dCBhIFJlYWQoKSBpbiB0aGUgbWlkZGxlLgotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MjcpKTsKLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoODAxKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgbm8gY29uZmlnIGNoYW5nZSBpcyBzaWduYWxsZWQuCi0gIEV4cGVjdFJlYWQoRGVtdXhlclN0cmVhbTo6VklERU8sIDgwMSk7Ci0gIEFTU0VSVF9UUlVFKHZpZGVvX2NvbmZpZ18xLk1hdGNoZXModmlkZW8tPnZpZGVvX2RlY29kZXJfY29uZmlnKCkpKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFRpbWVzdGFtcFBvc2l0aXZlT2Zmc2V0KSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKFNldFRpbWVzdGFtcE9mZnNldChrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMzApKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDIpKSk7Ci0KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMzAwMDApKTsKLQotICBHZW5lcmF0ZUV4cGVjdGVkUmVhZHMoMzAwMDAsIDIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgVGltZXN0YW1wTmVnYXRpdmVPZmZzZXQpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQVNTRVJUX1RSVUUoU2V0VGltZXN0YW1wT2Zmc2V0KGtTb3VyY2VJZCwgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygtMSkpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoMTAwMCwgMikpKTsKLQotICBHZW5lcmF0ZUV4cGVjdGVkUmVhZHMoMCwgMik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBUaW1lc3RhbXBPZmZzZXRTZXBhcmF0ZVN0cmVhbXMpIHsKLSAgc3RkOjpzdHJpbmcgYXVkaW9faWQgPSAiYXVkaW8xIjsKLSAgc3RkOjpzdHJpbmcgdmlkZW9faWQgPSAidmlkZW8xIjsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXJBdWRpb0FuZFZpZGVvU291cmNlcyhhdWRpb19pZCwgdmlkZW9faWQpKTsKLQotICBBU1NFUlRfVFJVRSgKLSAgICAgIFNldFRpbWVzdGFtcE9mZnNldChhdWRpb19pZCwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKC0yNTAwKSkpOwotICBBU1NFUlRfVFJVRSgKLSAgICAgIFNldFRpbWVzdGFtcE9mZnNldCh2aWRlb19pZCwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKC0yNTAwKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgYXVkaW9faWQsCi0gICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMjUwMCwgMjUwMCArIGtBdWRpb0Jsb2NrRHVyYXRpb24gKiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBdWRpb1RyYWNrTnVtLCBrQXVkaW9CbG9ja0R1cmF0aW9uKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgdmlkZW9faWQsCi0gICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMjUwMCwgMjUwMCArIGtWaWRlb0Jsb2NrRHVyYXRpb24gKiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtWaWRlb1RyYWNrTnVtLCBrVmlkZW9CbG9ja0R1cmF0aW9uKSkpOwotICBHZW5lcmF0ZUF1ZGlvU3RyZWFtRXhwZWN0ZWRSZWFkcygwLCA0KTsKLSAgR2VuZXJhdGVWaWRlb1N0cmVhbUV4cGVjdGVkUmVhZHMoMCwgNCk7Ci0KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjczMDApKTsKLQotICBBU1NFUlRfVFJVRSgKLSAgICAgIFNldFRpbWVzdGFtcE9mZnNldChhdWRpb19pZCwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3MzAwKSkpOwotICBBU1NFUlRfVFJVRSgKLSAgICAgIFNldFRpbWVzdGFtcE9mZnNldCh2aWRlb19pZCwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3MzAwKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKAotICAgICAgYXVkaW9faWQsCi0gICAgICBHZW5lcmF0ZVNpbmdsZVN0cmVhbUNsdXN0ZXIoMCwga0F1ZGlvQmxvY2tEdXJhdGlvbiAqIDQsIGtBdWRpb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtBdWRpb0Jsb2NrRHVyYXRpb24pKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoCi0gICAgICB2aWRlb19pZCwKLSAgICAgIEdlbmVyYXRlU2luZ2xlU3RyZWFtQ2x1c3RlcigwLCBrVmlkZW9CbG9ja0R1cmF0aW9uICogNCwga1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1ZpZGVvQmxvY2tEdXJhdGlvbikpKTsKLSAgR2VuZXJhdGVWaWRlb1N0cmVhbUV4cGVjdGVkUmVhZHMoMjczMDAsIDQpOwotICBHZW5lcmF0ZUF1ZGlvU3RyZWFtRXhwZWN0ZWRSZWFkcygyNzMwMCwgNCk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBJc1BhcnNpbmdNZWRpYVNlZ21lbnRNaWRNZWRpYVNlZ21lbnQpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIgPSBHZW5lcmF0ZUNsdXN0ZXIoMCwgMik7Ci0gIC8vIEFwcGVuZCBvbmx5IHBhcnQgb2YgdGhlIGNsdXN0ZXIgZGF0YS4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSAtIDEzKSk7Ci0KLSAgLy8gQ29uZmlybSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcgYSBtZWRpYSBzZWdtZW50LgotICBBU1NFUlRfVFJVRShkZW11eGVyXy0+SXNQYXJzaW5nTWVkaWFTZWdtZW50KGtTb3VyY2VJZCkpOwotCi0gIGRlbXV4ZXJfLT5SZXNldFBhcnNlclN0YXRlKGtTb3VyY2VJZCwgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZXN0YW1wX29mZnNldF9tYXBfW2tTb3VyY2VJZF0pOwotCi0gIC8vIEFmdGVyIFJlc2V0UGFyc2VyU3RhdGUoKSwgcGFyc2luZyBzaG91bGQgbm8gbG9uZ2VyIGJlIGluIHRoZSBtaWRkbGUgb2YgYQotICAvLyBtZWRpYSBzZWdtZW50LgotICBBU1NFUlRfRkFMU0UoZGVtdXhlcl8tPklzUGFyc2luZ01lZGlhU2VnbWVudChrU291cmNlSWQpKTsKLX0KLQotI2lmIGRlZmluZWQoVVNFX1BST1BSSUVUQVJZX0NPREVDUykKLSNpZiBCVUlMREZMQUcoRU5BQkxFX01TRV9NUEVHMlRTX1NUUkVBTV9QQVJTRVIpCi1uYW1lc3BhY2UgewotY29uc3QgY2hhcioga01wMnRNaW1lVHlwZSA9ICJ2aWRlby9tcDJ0IjsKLWNvbnN0IGNoYXIqIGtNcDJ0Q29kZWNzID0gIm1wNGEuNDAuMixhdmMxLjY0MDAyOCI7Ci19ICAvLyBuYW1lc3BhY2UKLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEVtaXRCdWZmZXJzRHVyaW5nQWJvcnQpIHsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oImF1ZGlvIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvZGVjTmFtZSgiYXVkaW8iLCAiYWFjIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgImgyNjQiKSk7Ci0gIGRlbXV4ZXJfLT5Jbml0aWFsaXplKCZob3N0XywgQ3JlYXRlSW5pdERvbmVDQihrSW5maW5pdGVEdXJhdGlvbiwgUElQRUxJTkVfT0spLAotICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgRVhQRUNUX0VRKENodW5rRGVtdXhlcjo6a09rLCBBZGRJZChrU291cmNlSWQsIGtNcDJ0TWltZVR5cGUsIGtNcDJ0Q29kZWNzKSk7Ci0KLSAgLy8gRm9yIGluZm86Ci0gIC8vIERUUy9QVFMgZGVyaXZlZCB1c2luZyBkdmJzbm9vcCAtcyB0cyAtaWYgYmVhci0xMjgweDcyMC50cyAtdHNzdWJkZWNvZGUKLSAgLy8gVmlkZW86IGZpcnN0IFBFUzoKLSAgLy8gICAgICAgIFBUUzogMTI2OTEyICgweDAwMDFlZmMwKSAgWz0gOTAga0h6LVRpbWVzdGFtcDogMDowMDowMS40MTAxXQotICAvLyAgICAgICAgRFRTOiAxMjM5MDkgKDB4MDAwMWU0MDUpICBbPSA5MCBrSHotVGltZXN0YW1wOiAwOjAwOjAxLjM3NjddCi0gIC8vIEF1ZGlvOiBmaXJzdCBQRVM6Ci0gIC8vICAgICAgICBQVFM6IDEyNjAwMCAoMHgwMDAxZWMzMCkgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDEuNDAwMF0KLSAgLy8gICAgICAgIERUUzogMTIzOTEwICgweDAwMDFlNDA2KSAgWz0gOTAga0h6LVRpbWVzdGFtcDogMDowMDowMS4zNzY3XQotICAvLyBWaWRlbzogbGFzdCBQRVM6Ci0gIC8vICAgICAgICBQVFM6IDM3MDE1NSAoMHgwMDA1YTVlYikgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDQuMTEyOF0KLSAgLy8gICAgICAgIERUUzogMzY3MTUyICgweDAwMDU5YTMwKSAgWz0gOTAga0h6LVRpbWVzdGFtcDogMDowMDowNC4wNzk0XQotICAvLyBBdWRpbzogbGFzdCBQRVM6Ci0gIC8vICAgICAgICBQVFM6IDM1Mzc4OCAoMHgwMDA1NjVmYykgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDMuOTMwOV0KLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9IFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMTI4MHg3MjAudHMiKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YShrU291cmNlSWQsIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpKSk7Ci0KLSAgLy8gQ29uZmlybSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIHBhcnNpbmcgYSBtZWRpYSBzZWdtZW50LgotICBBU1NFUlRfVFJVRShkZW11eGVyXy0+SXNQYXJzaW5nTWVkaWFTZWdtZW50KGtTb3VyY2VJZCkpOwotCi0gIC8vIFJlc2V0UGFyc2VyU3RhdGUgb24gdGhlIE1wZWcyIFRTIHBhcnNlciB0cmlnZ2VycyB0aGUgZW1pc3Npb24gb2YgdGhlIGxhc3QKLSAgLy8gdmlkZW8gYnVmZmVyIHdoaWNoIGlzIHBlbmRpbmcgaW4gdGhlIHN0cmVhbSBwYXJzZXIuCi0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IHJhbmdlX2JlZm9yZV9hYm9ydCA9Ci0gICAgICBkZW11eGVyXy0+R2V0QnVmZmVyZWRSYW5nZXMoa1NvdXJjZUlkKTsKLSAgZGVtdXhlcl8tPlJlc2V0UGFyc2VyU3RhdGUoa1NvdXJjZUlkLCBhcHBlbmRfd2luZG93X3N0YXJ0X2Zvcl9uZXh0X2FwcGVuZF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF93aW5kb3dfZW5kX2Zvcl9uZXh0X2FwcGVuZF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lc3RhbXBfb2Zmc2V0X21hcF9ba1NvdXJjZUlkXSk7Ci0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IHJhbmdlX2FmdGVyX2Fib3J0ID0KLSAgICAgIGRlbXV4ZXJfLT5HZXRCdWZmZXJlZFJhbmdlcyhrU291cmNlSWQpOwotCi0gIEFTU0VSVF9FUShyYW5nZV9iZWZvcmVfYWJvcnQuc2l6ZSgpLCAxdSk7Ci0gIEFTU0VSVF9FUShyYW5nZV9hZnRlcl9hYm9ydC5zaXplKCksIDF1KTsKLSAgRVhQRUNUX0VRKHJhbmdlX2FmdGVyX2Fib3J0LnN0YXJ0KDApLCByYW5nZV9iZWZvcmVfYWJvcnQuc3RhcnQoMCkpOwotICBFWFBFQ1RfR1QocmFuZ2VfYWZ0ZXJfYWJvcnQuZW5kKDApLCByYW5nZV9iZWZvcmVfYWJvcnQuZW5kKDApKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFNlZWtDb21wbGV0ZUR1cmluZ0Fib3J0KSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJhdWRpbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgImFhYyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgidmlkZW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJ2aWRlbyIsICJoMjY0IikpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa0luZmluaXRlRHVyYXRpb24sIFBJUEVMSU5FX09LKSwKLSAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7Ci0gIEVYUEVDVF9FUShDaHVua0RlbXV4ZXI6OmtPaywgQWRkSWQoa1NvdXJjZUlkLCBrTXAydE1pbWVUeXBlLCBrTXAydENvZGVjcykpOwotCi0gIC8vIEZvciBpbmZvOgotICAvLyBEVFMvUFRTIGRlcml2ZWQgdXNpbmcgZHZic25vb3AgLXMgdHMgLWlmIGJlYXItMTI4MHg3MjAudHMgLXRzc3ViZGVjb2RlCi0gIC8vIFZpZGVvOiBmaXJzdCBQRVM6Ci0gIC8vICAgICAgICBQVFM6IDEyNjkxMiAoMHgwMDAxZWZjMCkgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDEuNDEwMV0KLSAgLy8gICAgICAgIERUUzogMTIzOTA5ICgweDAwMDFlNDA1KSAgWz0gOTAga0h6LVRpbWVzdGFtcDogMDowMDowMS4zNzY3XQotICAvLyBBdWRpbzogZmlyc3QgUEVTOgotICAvLyAgICAgICAgUFRTOiAxMjYwMDAgKDB4MDAwMWVjMzApICBbPSA5MCBrSHotVGltZXN0YW1wOiAwOjAwOjAxLjQwMDBdCi0gIC8vICAgICAgICBEVFM6IDEyMzkxMCAoMHgwMDAxZTQwNikgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDEuMzc2N10KLSAgLy8gVmlkZW86IGxhc3QgUEVTOgotICAvLyAgICAgICAgUFRTOiAzNzAxNTUgKDB4MDAwNWE1ZWIpICBbPSA5MCBrSHotVGltZXN0YW1wOiAwOjAwOjA0LjExMjhdCi0gIC8vICAgICAgICBEVFM6IDM2NzE1MiAoMHgwMDA1OWEzMCkgIFs9IDkwIGtIei1UaW1lc3RhbXA6IDA6MDA6MDQuMDc5NF0KLSAgLy8gQXVkaW86IGxhc3QgUEVTOgotICAvLyAgICAgICAgUFRTOiAzNTM3ODggKDB4MDAwNTY1ZmMpICBbPSA5MCBrSHotVGltZXN0YW1wOiAwOjAwOjAzLjkzMDldCi0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPSBSZWFkVGVzdERhdGFGaWxlKCJiZWFyLTEyODB4NzIwLnRzIik7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZERhdGEoa1NvdXJjZUlkLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSkpOwotCi0gIC8vIENvbmZpcm0gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBwYXJzaW5nIGEgbWVkaWEgc2VnbWVudC4KLSAgQVNTRVJUX1RSVUUoZGVtdXhlcl8tPklzUGFyc2luZ01lZGlhU2VnbWVudChrU291cmNlSWQpKTsKLQotICAvLyBTZWVrIHRvIGEgdGltZSBjb3JyZXNwb25kaW5nIHRvIGJ1ZmZlcnMgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgZHVyaW5nIHRoZQotICAvLyBhYm9ydC4KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNDExMCkpOwotCi0gIC8vIFJlc2V0UGFyc2VyU3RhdGUgb24gdGhlIE1wZWcyIFRTIHBhcnNlciB0cmlnZ2VycyB0aGUgZW1pc3Npb24gb2YgdGhlIGxhc3QKLSAgLy8gdmlkZW8gYnVmZmVyIHdoaWNoIGlzIHBlbmRpbmcgaW4gdGhlIHN0cmVhbSBwYXJzZXIuCi0gIGRlbXV4ZXJfLT5SZXNldFBhcnNlclN0YXRlKGtTb3VyY2VJZCwgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZXN0YW1wX29mZnNldF9tYXBfW2tTb3VyY2VJZF0pOwotfQotCi0jZW5kaWYKLSNlbmRpZgotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgV2ViTUlzUGFyc2luZ01lZGlhU2VnbWVudERldGVjdGlvbikgewotICBjb25zdCB1aW50OF90IGtCdWZmZXJbXSA9IHsKLSAgICAgIC8vIENMVVNURVIgKHNpemUgPSAxMCkKLSAgICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsIDB4OEEsCi0KLSAgICAgIC8vIENsdXN0ZXIgVElNRUNPREUgKHZhbHVlID0gMSkKLSAgICAgIDB4RTcsIDB4ODEsIDB4MDEsCi0KLSAgICAgIC8vIFNJTVBMRUJMT0NLIChzaXplID0gNSkKLSAgICAgIDB4QTMsIDB4ODUsCi0KLSAgICAgIC8vIEF1ZGlvIFRyYWNrIE51bWJlcgotICAgICAgMHg4MCB8IChrQXVkaW9UcmFja051bSAmIDB4N0YpLAotCi0gICAgICAvLyBUaW1lY29kZSAocmVsYXRpdmUgdG8gY2x1c3RlcikgKHZhbHVlID0gMCkKLSAgICAgIDB4MDAsIDB4MDAsCi0KLSAgICAgIC8vIEtleWZyYW1lIGZsYWcKLSAgICAgIDB4ODAsCi0KLSAgICAgIC8vIEZha2UgYmxvY2sgZGF0YQotICAgICAgMHgwMCwKLQotICAgICAgLy8gQ0xVU1RFUiAoc2l6ZSA9IHVua25vd247IHJlYWxseSAxMCkKLSAgICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsIDB4RkYsCi0KLSAgICAgIC8vIENsdXN0ZXIgVElNRUNPREUgKHZhbHVlID0gMikKLSAgICAgIDB4RTcsIDB4ODEsIDB4MDIsCi0KLSAgICAgIC8vIFNJTVBMRUJMT0NLIChzaXplID0gNSkKLSAgICAgIDB4QTMsIDB4ODUsCi0KLSAgICAgIC8vIEF1ZGlvIFRyYWNrIE51bWJlcgotICAgICAgMHg4MCB8IChrQXVkaW9UcmFja051bSAmIDB4N0YpLAotCi0gICAgICAvLyBUaW1lY29kZSAocmVsYXRpdmUgdG8gY2x1c3RlcikgKHZhbHVlID0gMCkKLSAgICAgIDB4MDAsIDB4MDAsCi0KLSAgICAgIC8vIEtleWZyYW1lIGZsYWcKLSAgICAgIDB4ODAsCi0KLSAgICAgIC8vIEZha2UgYmxvY2sgZGF0YQotICAgICAgMHgwMCwKLQotICAgICAgLy8gRUJNTEhFQURFUiAoc2l6ZSA9IDEwLCBub3QgZnVsbHkgYXBwZW5kZWQpCi0gICAgICAweDFBLCAweDQ1LCAweERGLCAweEEzLCAweDhBLAotICB9OwotCi0gIC8vIFRoaXMgYXJyYXkgaW5kaWNhdGVzIGV4cGVjdGVkIHJldHVybiB2YWx1ZSBvZiBJc1BhcnNpbmdNZWRpYVNlZ21lbnQoKQotICAvLyBmb2xsb3dpbmcgZWFjaCBpbmNyZW1lbnRhbGx5IGFwcGVuZGVkIGJ5dGUgaW4gfGtCdWZmZXJ8LgotICBjb25zdCBib29sIGtFeHBlY3RlZFJldHVyblZhbHVlc1tdID0gewotICAgICAgLy8gRmlyc3QgQ2x1c3RlciwgZXhwbGljaXQgc2l6ZQotICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsCi0gICAgICB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwKLQotICAgICAgLy8gU2Vjb25kIENsdXN0ZXIsIHVua25vd24gc2l6ZQotICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsCi0gICAgICB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLAotCi0gICAgICAvLyBFQk1MSEVBREVSCi0gICAgICB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwKLSAgfTsKLQotICBzdGF0aWNfYXNzZXJ0KGFycmF5c2l6ZShrQnVmZmVyKSA9PSBhcnJheXNpemUoa0V4cGVjdGVkUmV0dXJuVmFsdWVzKSwKLSAgICAgICAgICAgICAgICAidGVzdCBhcnJheXMgb3V0IG9mIHN5bmMiKTsKLSAgc3RhdGljX2Fzc2VydChhcnJheXNpemUoa0J1ZmZlcikgPT0gc2l6ZW9mKGtCdWZmZXIpLAotICAgICAgICAgICAgICAgICJ0aGVyZSBzaG91bGQgYmUgb25lIGJ5dGUgcGVyIGluZGV4Iik7Ci0KLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMjMpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhHZW5lcmF0ZWRTcGxpY2UoMjIwMDAsIDIwMDApKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yoa0J1ZmZlcik7IGkrKykgewotICAgIERWTE9HKDMpIDw8ICJBcHBlbmRpbmcgYW5kIHRlc3RpbmcgaW5kZXggIiA8PCBpOwotICAgIEFTU0VSVF9UUlVFKEFwcGVuZERhdGEoa0J1ZmZlciArIGksIDEpKTsKLSAgICBib29sIGV4cGVjdGVkX3JldHVybl92YWx1ZSA9IGtFeHBlY3RlZFJldHVyblZhbHVlc1tpXTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfcmV0dXJuX3ZhbHVlLAotICAgICAgICAgICAgICBkZW11eGVyXy0+SXNQYXJzaW5nTWVkaWFTZWdtZW50KGtTb3VyY2VJZCkpOwotICB9Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBEdXJhdGlvbkNoYW5nZSkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgY29uc3QgaW50IGtTdHJlYW1EdXJhdGlvbiA9IGtEZWZhdWx0RHVyYXRpb24oKS5Jbk1pbGxpc2Vjb25kcygpOwotCi0gIC8vIEFkZCBkYXRhIGxlYWRpbmcgdXAgdG8gdGhlIGN1cnJlbnRseSBzZXQgZHVyYXRpb24uCi0gIEFTU0VSVF9UUlVFKAotICAgICAgQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoa1N0cmVhbUR1cmF0aW9uIC0ga0F1ZGlvQmxvY2tEdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTdHJlYW1EdXJhdGlvbiAtIGtWaWRlb0Jsb2NrRHVyYXRpb24sIDIpKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMjAxMTkxLDIwMTIyNCkgfSIpOwotCi0gIC8vIEFkZCBkYXRhIGJlZ2lubmluZyBhdCB0aGUgY3VycmVudGx5IHNldCBkdXJhdGlvbiBhbmQgZXhwZWN0IGEgbmV3IGR1cmF0aW9uCi0gIC8vIHRvIGJlIHNpZ25hbGVkLiBOb3RlIHRoYXQgdGhlIGxhc3QgdmlkZW8gYmxvY2sgd2lsbCBoYXZlIGEgaGlnaGVyIGVuZAotICAvLyB0aW1lc3RhbXAgdGhhbiB0aGUgbGFzdCBhdWRpbyBibG9jay4KLSAgY29uc3QgaW50IGtOZXdTdHJlYW1EdXJhdGlvblZpZGVvID0ga1N0cmVhbUR1cmF0aW9uICsga1ZpZGVvQmxvY2tEdXJhdGlvbjsKLSAgRVhQRUNUX0NBTEwoCi0gICAgICBob3N0XywKLSAgICAgIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhrTmV3U3RyZWFtRHVyYXRpb25WaWRlbykpKTsKLSAgQVNTRVJUX1RSVUUoCi0gICAgICBBcHBlbmRDbHVzdGVyKEdlbmVyYXRlQ2x1c3RlcihrRGVmYXVsdER1cmF0aW9uKCkuSW5NaWxsaXNlY29uZHMoKSwgMikpKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsyMDExOTEsMjAxMjQ3KSB9Iik7Ci0KLSAgLy8gQWRkIG1vcmUgZGF0YSB0byB0aGUgZW5kIG9mIGVhY2ggbWVkaWEgdHlwZS4gTm90ZSB0aGF0IHRoZSBsYXN0IGF1ZGlvIGJsb2NrCi0gIC8vIHdpbGwgaGF2ZSBhIGhpZ2hlciBlbmQgdGltZXN0YW1wIHRoYW4gdGhlIGxhc3QgdmlkZW8gYmxvY2suCi0gIGNvbnN0IGludCBrRmluYWxTdHJlYW1EdXJhdGlvbiA9IGtTdHJlYW1EdXJhdGlvbiArIGtBdWRpb0Jsb2NrRHVyYXRpb24gKiAzOwotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGhvc3RfLAotICAgICAgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtGaW5hbFN0cmVhbUR1cmF0aW9uKSkpOwotICBBU1NFUlRfVFJVRSgKLSAgICAgIEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKGtTdHJlYW1EdXJhdGlvbiArIGtBdWRpb0Jsb2NrRHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3RyZWFtRHVyYXRpb24gKyBrVmlkZW9CbG9ja0R1cmF0aW9uLCAzKSkpOwotCi0gIC8vIFNlZSB0aGF0IHRoZSByYW5nZSBoYXMgaW5jcmVhc2VkIGFwcHJvcHJpYXRlbHkgKGJ1dCBub3QgdG8gdGhlIGZ1bGwKLSAgLy8gZHVyYXRpb24gb2YgMjAxMjkzLCBzaW5jZSB0aGVyZSBpcyBub3QgZW5vdWdoIHZpZGVvIGFwcGVuZGVkIGZvciB0aGF0KS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMjAxMTkxLDIwMTI5MCkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRHVyYXRpb25DaGFuZ2VUaW1lc3RhbXBPZmZzZXQpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0gIEFTU0VSVF9UUlVFKFNldFRpbWVzdGFtcE9mZnNldChrU291cmNlSWQsIGtEZWZhdWx0RHVyYXRpb24oKSkpOwotICBFWFBFQ1RfQ0FMTCgKLSAgICAgIGhvc3RfLCBTZXREdXJhdGlvbihrRGVmYXVsdER1cmF0aW9uKCkgKyBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtWaWRlb0Jsb2NrRHVyYXRpb24gKiAyKSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlQ2x1c3RlcigwLCA0KSkpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRW5kT2ZTdHJlYW1UcnVuY2F0ZUR1cmF0aW9uKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoa0RlZmF1bHRGaXJzdENsdXN0ZXIoKSkpOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBTZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAga0RlZmF1bHRGaXJzdENsdXN0ZXJFbmRUaW1lc3RhbXApKSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBaZXJvTGVuZ3RoQXBwZW5kKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBBU1NFUlRfVFJVRShBcHBlbmREYXRhKE5VTEwsIDApKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFwcGVuZEFmdGVyRW5kT2ZTdHJlYW0pIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgRVhQRUNUX0NBTEwoaG9zdF8sIFNldER1cmF0aW9uKF8pKS5UaW1lcyhBbnlOdW1iZXIoKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdEZpcnN0Q2x1c3RlcigpKSk7Ci0gIE1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7Ci0KLSAgZGVtdXhlcl8tPlVubWFya0VuZE9mU3RyZWFtKCk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihrRGVmYXVsdFNlY29uZENsdXN0ZXIoKSkpOwotICBNYXJrRW5kT2ZTdHJlYW0oUElQRUxJTkVfT0spOwotfQotCi0vLyBUZXN0IHJlY2VpdmluZyBhIFNodXRkb3duKCkgY2FsbCBiZWZvcmUgd2UgZ2V0IGFuIEluaXRpYWxpemUoKQotLy8gY2FsbC4gVGhpcyBjYW4gaGFwcGVuIGlmIHZpZGVvIGVsZW1lbnQgZ2V0cyBkZXN0cm95ZWQgYmVmb3JlCi0vLyB0aGUgcGlwZWxpbmUgaGFzIGEgY2hhbmNlIHRvIGluaXRpYWxpemUgdGhlIGRlbXV4ZXIuCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgU2h1dGRvd25fQmVmb3JlSW5pdGlhbGl6ZSkgewotICBkZW11eGVyXy0+U2h1dGRvd24oKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoJmhvc3RfLCBDcmVhdGVJbml0RG9uZUNCKERFTVVYRVJfRVJST1JfQ09VTERfTk9UX09QRU4pLAotICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKLSAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotfQotCi0vLyBWZXJpZmllcyB0aGF0IHNpZ25hbGluZyBlbmQgb2Ygc3RyZWFtIHdoaWxlIHN0YWxsZWQgYXQgYSBnYXAKLS8vIGJvdW5kYXJ5IGRvZXMgbm90IHRyaWdnZXIgZW5kIG9mIHN0cmVhbSBidWZmZXJzIHRvIGJlIHJldHVybmVkLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEVuZE9mU3RyZWFtV2hpbGVXYWl0aW5nRm9yR2FwVG9CZUZpbGxlZCkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKDAsIDEwKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoMzAwLCAxMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDEzMikgWzMwMCw0MzIpIH0iKTsKLQotICBHZW5lcmF0ZUV4cGVjdGVkUmVhZHMoMCwgMTApOwotCi0gIGJvb2wgYXVkaW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIGJvb2wgdmlkZW9fcmVhZF9kb25lID0gZmFsc2U7Ci0gIFJlYWRBdWRpbyhiYXNlOjpCaW5kKCZPblJlYWREb25lLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTM4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmF1ZGlvX3JlYWRfZG9uZSkpOwotICBSZWFkVmlkZW8oYmFzZTo6QmluZCgmT25SZWFkRG9uZSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEzOCksCi0gICAgICAgICAgICAgICAgICAgICAgICZ2aWRlb19yZWFkX2RvbmUpKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmVhZHMgZGlkbid0IGNvbXBsZXRlCi0gIEVYUEVDVF9GQUxTRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfRkFMU0UodmlkZW9fcmVhZF9kb25lKTsKLQotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDQzOCkpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmVhZHMgc3RpbGwgaGF2ZW4ndCBjb21wbGV0ZWQuCi0gIEVYUEVDVF9GQUxTRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfRkFMU0UodmlkZW9fcmVhZF9kb25lKTsKLQotICBkZW11eGVyXy0+VW5tYXJrRW5kT2ZTdHJlYW0oKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKDEzOCwgMjIpKTsKLQotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0MzUpIH0iKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmVhZHMgaGF2ZSBjb21wbGV0ZWQuCi0gIEVYUEVDVF9UUlVFKGF1ZGlvX3JlYWRfZG9uZSk7Ci0gIEVYUEVDVF9UUlVFKHZpZGVvX3JlYWRfZG9uZSk7Ci0KLSAgLy8gUmVhZCB0aGUgcmVzdCBvZiB0aGUgYnVmZmVycy4KLSAgR2VuZXJhdGVFeHBlY3RlZFJlYWRzKDE2MSwgMTcxLCAyMCk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgcmVhZHMgYmxvY2sgYmVjYXVzZSB0aGUgYXBwZW5kIGNsZWFyZWQgdGhlIGVuZCBvZiBzdHJlYW0gc3RhdGUuCi0gIGF1ZGlvX3JlYWRfZG9uZSA9IGZhbHNlOwotICB2aWRlb19yZWFkX2RvbmUgPSBmYWxzZTsKLSAgUmVhZEF1ZGlvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmVfRU9TRXhwZWN0ZWQsICZhdWRpb19yZWFkX2RvbmUpKTsKLSAgUmVhZFZpZGVvKGJhc2U6OkJpbmQoJk9uUmVhZERvbmVfRU9TRXhwZWN0ZWQsICZ2aWRlb19yZWFkX2RvbmUpKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmVhZHMgZG9uJ3QgY29tcGxldGUuCi0gIEVYUEVDVF9GQUxTRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfRkFMU0UodmlkZW9fcmVhZF9kb25lKTsKLQotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDQzNykpKTsKLSAgTWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKLQotICBFWFBFQ1RfVFJVRShhdWRpb19yZWFkX2RvbmUpOwotICBFWFBFQ1RfVFJVRSh2aWRlb19yZWFkX2RvbmUpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQ2FuY2VsZWRTZWVrRHVyaW5nSW5pdGlhbFByZXJvbGwpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgLy8gQ2FuY2VsIHByZXJvbGwuCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjAwKTsKLSAgZGVtdXhlcl8tPkNhbmNlbFBlbmRpbmdTZWVrKHNlZWtfdGltZSk7Ci0KLSAgLy8gSW5pdGlhdGUgdGhlIHNlZWsgdG8gdGhlIG5ldyBsb2NhdGlvbi4KLSAgU2VlayhzZWVrX3RpbWUpOwotCi0gIC8vIEFwcGVuZCBkYXRhIHRvIHNhdGlzZnkgdGhlIHNlZWsuCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoc2Vla190aW1lLkluTWlsbGlzZWNvbmRzKCksIDEwKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZXRNZW1vcnlMaW1pdFR5cGUpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgLy8gU2V0IGRpZmZlcmVudCBtZW1vcnkgbGltaXRzIGZvciBhdWRpbyBhbmQgdmlkZW8uCi0gIGRlbXV4ZXJfLT5TZXRNZW1vcnlMaW1pdHNGb3JUZXN0KERlbXV4ZXJTdHJlYW06OkFVRElPLCAxMCAqIGtCbG9ja1NpemUpOwotICBkZW11eGVyXy0+U2V0TWVtb3J5TGltaXRzRm9yVGVzdChEZW11eGVyU3RyZWFtOjpWSURFTywgNSAqIGtCbG9ja1NpemUgKyAxKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwMDApOwotCi0gIC8vIEFwcGVuZCBkYXRhIGF0IHRoZSBzdGFydCB0aGF0IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZDoKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLAotICAgICAgICAgICAgICAgICAgICAgICIwSyAyM0sgNDZLIDY5SyA5MksgMTE1SyAxMzhLIDE2MUsgMTg0SyAyMDdLIiwgMjMpLAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMEsgMzNLIDY2SyA5OUsgMTMySyIsIDMzKSk7Ci0KLSAgLy8gV2Ugc2hvdWxkIGJlIHJpZ2h0IGF0IGJ1ZmZlciBsaW1pdCwgc2hvdWxkIHBhc3MKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoCi0gICAgICBrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwgMCkpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFswLDIzMCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OlZJREVPLCAieyBbMCwxNjUpIH0iKTsKLQotICAvLyBTZWVrIHNvIHdlIGNhbiBnYXJiYWdlIGNvbGxlY3QgdGhlIGRhdGEgYXBwZW5kZWQgYWJvdmUuCi0gIFNlZWsoc2Vla190aW1lKTsKLQotICAvLyBBcHBlbmQgZGF0YSBhdCBzZWVrX3RpbWUuCi0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbygKLSAgICAgICAgICBrQXVkaW9UcmFja051bSwKLSAgICAgICAgICAiMTAwMEsgMTAyM0sgMTA0NksgMTA2OUsgMTA5MksgMTExNUsgMTEzOEsgMTE2MUsgMTE4NEsgMTIwN0siLCAyMyksCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIxMDAwSyAxMDMzSyAxMDY2SyAxMDk5SyAxMTMySyIsIDMzKSk7Ci0KLSAgLy8gV2Ugc2hvdWxkIGRlbGV0ZSBmaXJzdCBhcHBlbmQsIGFuZCBiZSBleGFjdGx5IGF0IGJ1ZmZlciBsaW1pdAotICBFWFBFQ1RfVFJVRShkZW11eGVyXy0+RXZpY3RDb2RlZEZyYW1lcyhrU291cmNlSWQsIHNlZWtfdGltZSwgMCkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBvbGQgZGF0YSwgYW5kIG5vdGhpbmcgbW9yZSwgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFsxMDAwLDEyMzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywgInsgWzEwMDAsMTE2NSkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgR0NEdXJpbmdTZWVrX1NpbmdsZVJhbmdlX1NlZWtGb3J3YXJkKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTykpOwotICBkZW11eGVyXy0+U2V0TWVtb3J5TGltaXRzRm9yVGVzdChEZW11eGVyU3RyZWFtOjpBVURJTywgMTAgKiBrQmxvY2tTaXplKTsKLSAgLy8gQXBwZW5kIHNvbWUgZGF0YSBhdCBwb3NpdGlvbiAxMDAwbXMKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAxMDAwLCAxMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwMDAsMTIzMCkgfSIpOwotCi0gIC8vIEdDIHNob3VsZCBiZSBhYmxlIHRvIGV2aWN0IGZyYW1lcyBpbiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHJhbmdlLCBzaW5jZQotICAvLyB0aG9zZSBmcmFtZXMgYXJlIGVhcmxpZXIgdGhhbiB0aGUgc2VlayB0YXJnZXQgcG9zaXRpb24uCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjAwMCk7Ci0gIFNlZWsoc2Vla190aW1lKTsKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUsIDUgKiBrQmxvY2tTaXplKSk7Ci0KLSAgLy8gQXBwZW5kIGRhdGEgdG8gY29tcGxldGUgc2VlayBvcGVyYXRpb24KLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAyMDAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTExNSwxMjMwKSBbMjAwMCwyMTE1KSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBHQ0R1cmluZ1NlZWtfU2luZ2xlUmFuZ2VfU2Vla0JhY2spIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPKSk7Ci0gIGRlbXV4ZXJfLT5TZXRNZW1vcnlMaW1pdHNGb3JUZXN0KERlbXV4ZXJTdHJlYW06OkFVRElPLCAxMCAqIGtCbG9ja1NpemUpOwotICAvLyBBcHBlbmQgc29tZSBkYXRhIGF0IHBvc2l0aW9uIDEwMDBtcwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sIDEwMDAsIDEwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAwMCwxMjMwKSB9Iik7Ci0KLSAgLy8gR0Mgc2hvdWxkIGJlIGFibGUgdG8gZXZpY3QgZnJhbWVzIGluIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgcmFuZ2UsIHNpbmNlCi0gIC8vIHNlZWsgdGFyZ2V0IHBvc2l0aW9uIGhhcyBubyBkYXRhIGFuZCBzbyB3ZSBzaG91bGQgYWxsb3cgc29tZSBmcmFtZXMgdG8gYmUKLSAgLy8gZXZpY3RlZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgdXBjb21pbmcgYXBwZW5kIGF0IHNlZWsgdGFyZ2V0IHBvc2l0aW9uLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIFNlZWsoc2Vla190aW1lKTsKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUsIDUgKiBrQmxvY2tTaXplKSk7Ci0KLSAgLy8gQXBwZW5kIGRhdGEgdG8gY29tcGxldGUgc2VlayBvcGVyYXRpb24KLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxMTUpIFsxMTE1LDEyMzApIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdDRHVyaW5nU2Vla19NdWx0aXBsZVJhbmdlc19TZWVrRm9yd2FyZCkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8pKTsKLSAgZGVtdXhlcl8tPlNldE1lbW9yeUxpbWl0c0ZvclRlc3QoRGVtdXhlclN0cmVhbTo6QVVESU8sIDEwICoga0Jsb2NrU2l6ZSk7Ci0gIC8vIEFwcGVuZCBzb21lIGRhdGEgYXQgcG9zaXRpb24gMTAwMG1zIHRoZW4gYXQgMjAwMG1zCi0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMTAwMCwgNSk7Ci0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMjAwMCwgNSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwMDAsMTExNSkgWzIwMDAsMjExNSkgfSIpOwotCi0gIC8vIEdDIHNob3VsZCBiZSBhYmxlIHRvIGV2aWN0IGZyYW1lcyBpbiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHJhbmdlcywgc2luY2UKLSAgLy8gdGhvc2UgZnJhbWVzIGFyZSBlYXJsaWVyIHRoYW4gdGhlIHNlZWsgdGFyZ2V0IHBvc2l0aW9uLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDMwMDApOwotICBTZWVrKHNlZWtfdGltZSk7Ci0gIEVYUEVDVF9UUlVFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKGtTb3VyY2VJZCwgc2Vla190aW1lLCA4ICoga0Jsb2NrU2l6ZSkpOwotCi0gIC8vIEFwcGVuZCBkYXRhIHRvIGNvbXBsZXRlIHNlZWsgb3BlcmF0aW9uCi0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMzAwMCwgNSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzIwNjksMjExNSkgWzMwMDAsMzExNSkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgR0NEdXJpbmdTZWVrX011bHRpcGxlUmFuZ2VzX1NlZWtJbmJldHdlZW4xKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTykpOwotICBkZW11eGVyXy0+U2V0TWVtb3J5TGltaXRzRm9yVGVzdChEZW11eGVyU3RyZWFtOjpBVURJTywgMTAgKiBrQmxvY2tTaXplKTsKLSAgLy8gQXBwZW5kIHNvbWUgZGF0YSBhdCBwb3NpdGlvbiAxMDAwbXMgdGhlbiBhdCAyMDAwbXMKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAxMDAwLCA1KTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAyMDAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAwMCwxMTE1KSBbMjAwMCwyMTE1KSB9Iik7Ci0KLSAgLy8gR0Mgc2hvdWxkIGJlIGFibGUgdG8gZXZpY3QgYWxsIGZyYW1lcyBmcm9tIHRoZSBmaXJzdCBidWZmZXJlZCByYW5nZSwgc2luY2UKLSAgLy8gdGhvc2UgZnJhbWVzIGFyZSBlYXJsaWVyIHRoYW4gdGhlIHNlZWsgdGFyZ2V0IHBvc2l0aW9uLiBCdXQgdGhlcmUncyBvbmx5IDUKLSAgLy8gYmxvY2tzIHdvcnRoIG9mIGRhdGEgaW4gdGhlIGZpcnN0IHJhbmdlIGFuZCBzZWVrIHRhcmdldCBwb3NpdGlvbiBoYXMgbm8KLSAgLy8gZGF0YSwgc28gR0MgcHJvY2VlZHMgd2l0aCB0cnlpbmcgdG8gZGVsZXRlIHNvbWUgZnJhbWVzIGZyb20gdGhlIGJhY2sgb2YKLSAgLy8gYnVmZmVyZWQgcmFuZ2VzLCB0aGF0IGRvZXNuJ3QgeWllbGQgYW55dGhpbmcsIHNpbmNlIHRoYXQncyB0aGUgbW9zdAotICAvLyByZWNlbnRseSBhcHBlbmRlZCBkYXRhLCBzbyB0aGVuIEdDIHN0YXJ0cyByZW1vdmluZyBkYXRhIGZyb20gdGhlIGZyb250IG9mCi0gIC8vIHRoZSByZW1haW5pbmcgYnVmZmVyZWQgcmFuZ2UgKDIwMDBtcykgdG8gZW5zdXJlIHdlIGZyZWUgdXAgZW5vdWdoIHNwYWNlIGZvcgotICAvLyB0aGUgdXBjb21pbmcgYXBwZW5kIGFuZCBhbGxvdyBzZWVrIHRvIHByb2NlZWQuCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTUwMCk7Ci0gIFNlZWsoc2Vla190aW1lKTsKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUsIDggKiBrQmxvY2tTaXplKSk7Ci0KLSAgLy8gQXBwZW5kIGRhdGEgdG8gY29tcGxldGUgc2VlayBvcGVyYXRpb24KLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAxNTAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTUwMCwxNjE1KSBbMjA2OSwyMTE1KSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBHQ0R1cmluZ1NlZWtfTXVsdGlwbGVSYW5nZXNfU2Vla0luYmV0d2VlbjIpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPKSk7Ci0gIGRlbXV4ZXJfLT5TZXRNZW1vcnlMaW1pdHNGb3JUZXN0KERlbXV4ZXJTdHJlYW06OkFVRElPLCAxMCAqIGtCbG9ja1NpemUpOwotCi0gIC8vIEFwcGVuZCBzb21lIGRhdGEgYXQgcG9zaXRpb24gMjAwMG1zIGZpcnN0LCB0aGVuIGF0IDEwMDBtcywgc28gdGhhdCB0aGUgbGFzdAotICAvLyBhcHBlbmRlZCBkYXRhIHBvc2l0aW9uIGlzIGluIHRoZSBmaXJzdCBidWZmZXJlZCByYW5nZSAodGhhdCBtYXR0ZXJzIHRvIHRoZQotICAvLyBHQyBhbGdvcml0aG0gc2luY2UgaXQgdHJpZXMgdG8gcHJlc2VydmUgbW9yZSByZWNlbnRseSBhcHBlbmRlZCBkYXRhKS4KLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAyMDAwLCA1KTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAxMDAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAwMCwxMTE1KSBbMjAwMCwyMTE1KSB9Iik7Ci0KLSAgLy8gTm93IHRyeSBwZXJmb3JtaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiB3aXRob3V0IGFubm91bmNpbmcgc2VlayBmaXJzdCwgaS5lLgotICAvLyB3aXRob3V0IGNhbGxpbmcgU2VlaygpLCB0aGUgR0MgYWxnb3JpdGhtIHNob3VsZCB0cnkgdG8gcHJlc2VydmUgZGF0YSBpbiB0aGUKLSAgLy8gZmlyc3QgcmFuZ2UsIHNpbmNlIHRoYXQgaXMgbW9zdCByZWNlbnRseSBhcHBlbmRlZCBkYXRhLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIwMzApOwotICBFWFBFQ1RfVFJVRShkZW11eGVyXy0+RXZpY3RDb2RlZEZyYW1lcyhrU291cmNlSWQsIHNlZWtfdGltZSwgNSAqIGtCbG9ja1NpemUpKTsKLQotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sIDE1MDAsIDUpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsxMDAwLDExMTUpIFsxNTAwLDE2MTUpIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdDRHVyaW5nU2Vla19NdWx0aXBsZVJhbmdlc19TZWVrQmFjaykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8pKTsKLSAgZGVtdXhlcl8tPlNldE1lbW9yeUxpbWl0c0ZvclRlc3QoRGVtdXhlclN0cmVhbTo6QVVESU8sIDEwICoga0Jsb2NrU2l6ZSk7Ci0gIC8vIEFwcGVuZCBzb21lIGRhdGEgYXQgcG9zaXRpb24gMTAwMG1zIHRoZW4gYXQgMjAwMG1zCi0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMTAwMCwgNSk7Ci0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMjAwMCwgNSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwMDAsMTExNSkgWzIwMDAsMjExNSkgfSIpOwotCi0gIC8vIEdDIHNob3VsZCBiZSBhYmxlIHRvIGV2aWN0IGZyYW1lcyBpbiB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHJhbmdlcywgc2luY2UKLSAgLy8gdGhvc2UgZnJhbWVzIGFyZSBlYXJsaWVyIHRoYW4gdGhlIHNlZWsgdGFyZ2V0IHBvc2l0aW9uLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIFNlZWsoc2Vla190aW1lKTsKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUsIDggKiBrQmxvY2tTaXplKSk7Ci0KLSAgLy8gQXBwZW5kIGRhdGEgdG8gY29tcGxldGUgc2VlayBvcGVyYXRpb24KLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAwLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxMTUpIFsyMDY5LDIxMTUpIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEdDRHVyaW5nU2VlaykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8pKTsKLQotICBkZW11eGVyXy0+U2V0TWVtb3J5TGltaXRzRm9yVGVzdChEZW11eGVyU3RyZWFtOjpBVURJTywgNSAqIGtCbG9ja1NpemUpOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUxID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwMDApOwotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lMiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MDApOwotCi0gIC8vIEluaXRpYXRlIGEgc2VlayB0byB8c2Vla190aW1lMXwuCi0gIFNlZWsoc2Vla190aW1lMSk7Ci0KLSAgLy8gQXBwZW5kIGRhdGEgdG8gc2F0aXNmeSB0aGUgZmlyc3Qgc2VlayByZXF1ZXN0LgotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vla190aW1lMS5Jbk1pbGxpc2Vjb25kcygpLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAwMCwxMTE1KSB9Iik7Ci0KLSAgLy8gV2UgYXJlIHVuZGVyIG1lbW9yeSBsaW1pdCwgc28gRXZpY3Qgc2hvdWxkIGJlIGEgbm8tb3AuCi0gIEVYUEVDVF9UUlVFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKGtTb3VyY2VJZCwgc2Vla190aW1lMSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsxMDAwLDExMTUpIH0iKTsKLQotICAvLyBTaWduYWwgdGhhdCB0aGUgc2Vjb25kIHNlZWsgaXMgc3RhcnRpbmcuCi0gIGRlbXV4ZXJfLT5TdGFydFdhaXRpbmdGb3JTZWVrKHNlZWtfdGltZTIpOwotCi0gIC8vIEFwcGVuZCBkYXRhIHRvIHNhdGlzZnkgdGhlIHNlY29uZCBzZWVrLgotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vla190aW1lMi5Jbk1pbGxpc2Vjb25kcygpLCA1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNTAwLDYxNSkgWzEwMDAsMTExNSkgfSIpOwotCi0gIC8vIFdlIGFyZSBub3cgb3ZlciBvdXIgbWVtb3J5IHVzYWdlIGxpbWl0LiBXZSBoYXZlIGp1c3Qgc2Vla2VkIHRvIHxzZWVrX3RpbWUyfAotICAvLyBzbyBkYXRhIGFyb3VuZCA1MDBtcyBwb3NpdGlvbiBzaG91bGQgYmUgcHJlc2VydmVkLCB3aGlsZSB0aGUgcHJldmlvdXMKLSAgLy8gYXBwZW5kIGF0IDEwMDBtcyBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUyLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUwMCw2MTUpIH0iKTsKLQotICAvLyBDb21wbGV0ZSB0aGUgc2Vlay4KLSAgZGVtdXhlcl8tPlNlZWsoc2Vla190aW1lMiwgTmV3RXhwZWN0ZWRTdGF0dXNDQihQSVBFTElORV9PSykpOwotCi0gIC8vIEFwcGVuZCBtb3JlIGRhdGEgYW5kIG1ha2Ugc3VyZSB0aGF0IHdlIHByZXNlcnZlIGJvdGggdGhlIGJ1ZmZlcmVkIHJhbmdlCi0gIC8vIGFyb3VuZCB8c2Vla190aW1lMnwsIGJlY2F1c2UgdGhhdCdzIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLAotICAvLyBhbmQgdGhlIG5ld2x5IGFwcGVuZGVkIHJhbmdlLCBzaW5jZSB0aGlzIGlzIHRoZSBtb3N0IHJlY2VudCBhcHBlbmQuCi0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgNzAwLCA1KTsKLSAgRVhQRUNUX0ZBTFNFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKGtTb3VyY2VJZCwgc2Vla190aW1lMiwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1MDAsNjE1KSBbNzAwLDgxNSkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgR0NLZWVwUGxheWhlYWQpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPKSk7Ci0KLSAgZGVtdXhlcl8tPlNldE1lbW9yeUxpbWl0c0ZvclRlc3QoRGVtdXhlclN0cmVhbTo6QVVESU8sIDUgKiBrQmxvY2tTaXplKTsKLQotICAvLyBBcHBlbmQgZGF0YSBhdCB0aGUgc3RhcnQgdGhhdCBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQ6Ci0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwgMCwgMTApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDIzMCkgfSIpOwotCi0gIC8vIFdlIGV4cGVjdCBnYXJiYWdlIGNvbGxlY3Rpb24gdG8gZmFpbCwgYXMgd2UgZG9uJ3Qgd2FudCB0byBzcG9udGFuZW91c2x5Ci0gIC8vIGNyZWF0ZSBnYXBzIGluIHNvdXJjZSBidWZmZXIgc3RyZWFtLiBHYXBzIGNvdWxkIGJyZWFrIHBsYXliYWNrIGZvciBtYW55Ci0gIC8vIGNsaWVudHMsIHdobyBkb24ndCBib3RoZXIgdG8gY2hlY2sgcmFuZ2VzIGFmdGVyIGFwcGVuZC4KLSAgRVhQRUNUX0ZBTFNFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKAotICAgICAga1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyMzApIH0iKTsKLQotICAvLyBJbmNyZWFzZSBtZWRpYV90aW1lIGEgYml0LCB0aGlzIHdpbGwgYWxsb3cgc29tZSBkYXRhIHRvIGJlIGNvbGxlY3RlZCwgYnV0Ci0gIC8vIHdlIGFyZSBzdGlsbCBvdmVyIG1lbW9yeSB1c2FnZSBsaW1pdC4KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZTEgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjMgKiAyKTsKLSAgU2VlayhzZWVrX3RpbWUxKTsKLSAgRVhQRUNUX0ZBTFNFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKGtTb3VyY2VJZCwgc2Vla190aW1lMSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs0NiwyMzApIH0iKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lMiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyMyAqIDQpOwotICBTZWVrKHNlZWtfdGltZTIpOwotICBFWFBFQ1RfRkFMU0UoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUyLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzkyLDIzMCkgfSIpOwotCi0gIC8vIG1lZGlhX3RpbWUgaGFzIHByb2dyZXNzZWQgdG8gYSBwb2ludCB3aGVyZSB3ZSBjYW4gY29sbGVjdCBlbm91Z2ggZGF0YSB0bwotICAvLyBiZSB1bmRlciBtZW1vcnkgbGltaXQsIHNvIEV2aWN0IHNob3VsZCByZXR1cm4gdHJ1ZS4KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZTMgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjMgKiA2KTsKLSAgU2VlayhzZWVrX3RpbWUzKTsKLSAgRVhQRUNUX1RSVUUoZGVtdXhlcl8tPkV2aWN0Q29kZWRGcmFtZXMoa1NvdXJjZUlkLCBzZWVrX3RpbWUzLCAwKSk7Ci0gIC8vIFN0cmljdGx5IHNwZWFraW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHRpbWUgaXMgMjMqNj09MTM4bXMsIHNvIHdlIGNvdWxkCi0gIC8vIHJlbGVhc2UgZGF0YSB1cCB0byAxMzhtcywgYnV0IHdlIG9ubHkgcmVsZWFzZSBhcyBtdWNoIGRhdGEgYXMgbmVjZXNzYXJ5Ci0gIC8vIHRvIGJyaW5nIG1lbW9yeSB1c2FnZSB1bmRlciB0aGUgbGltaXQsIHNvIHdlIHJlbGVhc2Ugb25seSB1cCB0byAxMTVtcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTE1LDIzMCkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQXBwZW5kV2luZG93X1ZpZGVvKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19WSURFTykpOwotICBEZW11eGVyU3RyZWFtKiBzdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLQotICAvLyBTZXQgdGhlIGFwcGVuZCB3aW5kb3cgdG8gWzUwLDI4MCkuCi0gIGFwcGVuZF93aW5kb3dfc3RhcnRfZm9yX25leHRfYXBwZW5kXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MCk7Ci0gIGFwcGVuZF93aW5kb3dfZW5kX2Zvcl9uZXh0X2FwcGVuZF8gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjgwKTsKLQotICAvLyBBcHBlbmQgYSBjbHVzdGVyIHRoYXQgc3RhcnRzIGJlZm9yZSBhbmQgZW5kcyBhZnRlciB0aGUgYXBwZW5kIHdpbmRvdy4KLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgzMCkpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjBLIDMwIDYwIDkwIDEyMEsgMTUwIDE4MCAyMTAgMjQwSyAyNzAgMzAwIDMzMEsiKTsKLQotICAvLyBWZXJpZnkgdGhhdCBHT1BzIHRoYXQgc3RhcnQgb3V0c2lkZSB0aGUgd2luZG93IGFyZSBub3QgaW5jbHVkZWQKLSAgLy8gaW4gdGhlIGJ1ZmZlci4gQWxzbyB2ZXJpZnkgdGhhdCBidWZmZXJzIHRoYXQgc3RhcnQgaW5zaWRlIHRoZQotICAvLyB3aW5kb3cgYW5kIGV4dGVuZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2luZG93IGFyZSBub3QgaW5jbHVkZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEyMCwyNzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoc3RyZWFtLCAiMTIwSyAxNTAgMTgwIDIxMCAyNDBLIik7Ci0KLSAgLy8gRXh0ZW5kIHRoZSBhcHBlbmQgd2luZG93IHRvIFs1MCw2NTApLgotICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDY1MCk7Ci0KLSAgLy8gQXBwZW5kIG1vcmUgZGF0YSBhbmQgdmVyaWZ5IHRoYXQgYWRkaW5nIGJ1ZmZlcnMgc3RhcnQgYXQgdGhlIG5leHQKLSAgLy8ga2V5IGZyYW1lLgotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDMwKSk7Ci0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoa1NvdXJjZUlkLCBrVmlkZW9UcmFja051bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMzYwIDM5MCA0MjBLIDQ1MCA0ODAgNTEwIDU0MEsgNTcwIDYwMCA2MzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEyMCwyNzApIFs0MjAsNjMwKSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBBcHBlbmRXaW5kb3dfQXVkaW8pIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHN0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotCi0gIC8vIFNldCB0aGUgYXBwZW5kIHdpbmRvdyB0byBbNTAsMjgwKS4KLSAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDUwKTsKLSAgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyODApOwotCi0gIC8vIEFwcGVuZCBhIGNsdXN0ZXIgdGhhdCBzdGFydHMgYmVmb3JlIGFuZCBlbmRzIGFmdGVyIHRoZSBhcHBlbmQgd2luZG93LgotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDMwKSk7Ci0gIEFwcGVuZFNpbmdsZVN0cmVhbUNsdXN0ZXIoCi0gICAgICBrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLAotICAgICAgIjBLIDMwSyA2MEsgOTBLIDEyMEsgMTUwSyAxODBLIDIxMEsgMjQwSyAyNzBLIDMwMEsgMzMwSyIpOwotCi0gIC8vIFZlcmlmeSB0aGF0IGZyYW1lcyB0aGF0IGVuZCBvdXRzaWRlIHRoZSB3aW5kb3cgYXJlIG5vdCBpbmNsdWRlZAotICAvLyBpbiB0aGUgYnVmZmVyLiBBbHNvIHZlcmlmeSB0aGF0IGJ1ZmZlcnMgdGhhdCBzdGFydCBpbnNpZGUgdGhlCi0gIC8vIHdpbmRvdyBhbmQgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cgYXJlIG5vdCBpbmNsdWRlZC4KLSAgLy8KLSAgLy8gVGhlIGZpcnN0IDUwbXMgb2YgdGhlIHJhbmdlIHNob3VsZCBiZSB0cnVuY2F0ZWQgc2luY2UgaXQgb3ZlcmxhcHMKLSAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBhcHBlbmQgd2luZG93LgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1MCwyODApIH0iKTsKLQotICAvLyBUaGUgIjUwUCIgYnVmZmVyIGlzIHRoZSAiMCIgYnVmZmVyIG1hcmtlZCBmb3IgY29tcGxldGUgZGlzY2FyZC4gIFRoZSBuZXh0Ci0gIC8vICI1MCIgYnVmZmVyIGlzIHRoZSAiMzAiIGJ1ZmZlciBtYXJrZWQgd2l0aCAyMG1zIG9mIHN0YXJ0IGRpc2NhcmQuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHN0cmVhbSwgIjUwS1AgNTBLIDYwSyA5MEsgMTIwSyAxNTBLIDE4MEsgMjEwSyAyNDBLIik7Ci0KLSAgLy8gRXh0ZW5kIHRoZSBhcHBlbmQgd2luZG93IHRvIFs1MCw2NTApLgotICBhcHBlbmRfd2luZG93X2VuZF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDY1MCk7Ci0KLSAgLy8gQXBwZW5kIG1vcmUgZGF0YSBhbmQgdmVyaWZ5IHRoYXQgYSBuZXcgcmFuZ2UgaXMgY3JlYXRlZC4KLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgzMCkpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKAotICAgICAga1NvdXJjZUlkLCBrQXVkaW9UcmFja051bSwKLSAgICAgICIzNjBLIDM5MEsgNDIwSyA0NTBLIDQ4MEsgNTEwSyA1NDBLIDU3MEsgNjAwSyA2MzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUwLDI4MCkgWzM2MCw2NTApIH0iKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFwcGVuZFdpbmRvd19BdWRpb092ZXJsYXBTdGFydEFuZEVuZCkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8pKTsKLQotICAvLyBTZXQgdGhlIGFwcGVuZCB3aW5kb3cgdG8gWzEwLDIwKS4KLSAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKTsKLSAgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyMCk7Ci0KLSAgLy8gQXBwZW5kIGEgY2x1c3RlciB0aGF0IHN0YXJ0cyBiZWZvcmUgYW5kIGVuZHMgYWZ0ZXIgdGhlIGFwcGVuZCB3aW5kb3cuCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoCi0gICAgICBXZWJNQ2x1c3RlclBhcnNlcjo6a0RlZmF1bHRBdWRpb0J1ZmZlckR1cmF0aW9uSW5NcykpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sICIwSyIpOwotCi0gIC8vIFZlcmlmeSB0aGUgYXBwZW5kIGlzIGNsaXBwZWQgdG8gdGhlIGFwcGVuZCB3aW5kb3cuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwLDIwKSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBBcHBlbmRXaW5kb3dfV2ViTUZpbGVfQXVkaW9Pbmx5KSB7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgKLSAgICAgICZob3N0XywKLSAgICAgIENyZWF0ZUluaXREb25lQ0IoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDI3NDQpLCBQSVBFTElORV9PSyksCi0gICAgICB0cnVlKTsKLSAgQVNTRVJUX0VRKENodW5rRGVtdXhlcjo6a09rLCBBZGRJZChrU291cmNlSWQsIEhBU19BVURJTykpOwotCi0gIC8vIFNldCB0aGUgYXBwZW5kIHdpbmRvdyB0byBbNTAsMTUwKS4KLSAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDUwKTsKLSAgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxNTApOwotCi0gIC8vIFJlYWQgYSBXZWJNIGZpbGUgaW50byBtZW1vcnkgYW5kIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGRlbXV4ZXIuICBUaGUgY2h1bmsKLSAgLy8gc2l6ZSBoYXMgYmVlbiBjaG9zZW4gY2FyZWZ1bGx5IHRvIGVuc3VyZSB0aGUgcHJlcm9sbCBidWZmZXIgdXNlZCBieSB0aGUKLSAgLy8gcGFydGlhbCBhcHBlbmQgd2luZG93IHRyaW0gbXVzdCBjb21lIGZyb20gYSBwcmV2aW91cyBBcHBlbmQoKSBjYWxsLgotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBSZWFkVGVzdERhdGFGaWxlKCJiZWFyLTMyMHgyNDAtYXVkaW8tb25seS53ZWJtIik7Ci0gIEV4cGVjdEluaXRNZWRpYUxvZ3MoSEFTX0FVRElPKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgyKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSwgMTI4KSk7Ci0KLSAgRGVtdXhlclN0cmVhbSogc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHN0cmVhbSwgIjUwS1AgNTBLIDYySyA4NksgMTA5SyAxMjJLIDEyNUsgMTI4SyIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQXBwZW5kV2luZG93X0F1ZGlvQ29uZmlnVXBkYXRlUmVtb3Zlc1ByZXJvbGwpIHsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIERlbXV4ZXJPcGVuZWQoKSk7Ci0gIGRlbXV4ZXJfLT5Jbml0aWFsaXplKAotICAgICAgJmhvc3RfLAotICAgICAgQ3JlYXRlSW5pdERvbmVDQihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjc0NCksIFBJUEVMSU5FX09LKSwKLSAgICAgIHRydWUpOwotICBBU1NFUlRfRVEoQ2h1bmtEZW11eGVyOjprT2ssIEFkZElkKGtTb3VyY2VJZCwgSEFTX0FVRElPKSk7Ci0KLSAgLy8gU2V0IHRoZSBhcHBlbmQgd2luZG93IHN1Y2ggdGhhdCB0aGUgZmlyc3QgZmlsZSBpcyBjb21wbGV0ZWx5IGJlZm9yZSB0aGUKLSAgLy8gYXBwZW5kIHdpbmRvdy4KLSAgLy8gRXhwZWN0IGR1cmF0aW9uIGFkanVzdG1lbnQgc2luY2UgYWN0dWFsIGR1cmF0aW9uIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbQotICAvLyBkdXJhdGlvbiBpbiB0aGUgaW5pdCBzZWdtZW50LgotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb25fMSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyNzQ2KTsKLSAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfID0gZHVyYXRpb25fMTsKLQotICAvLyBSZWFkIGEgV2ViTSBmaWxlIGludG8gbWVtb3J5IGFuZCBhcHBlbmQgdGhlIGRhdGEuCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMzIweDI0MC1hdWRpby1vbmx5LndlYm0iKTsKLSAgRXhwZWN0SW5pdE1lZGlhTG9ncyhIQVNfQVVESU8pOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyB9Iik7Ci0KLSAgRGVtdXhlclN0cmVhbSogc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIEF1ZGlvRGVjb2RlckNvbmZpZyBjb25maWdfMSA9IHN0cmVhbS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKLQotICAvLyBSZWFkIGEgc2Vjb25kIFdlYk0gd2l0aCBhIGRpZmZlcmVudCBjb25maWcgaW4gYW5kIGFwcGVuZCB0aGUgZGF0YS4KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMzIweDI0MC1hdWRpby1vbmx5LTQ4a2h6LndlYm0iKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgyMSkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oXykpLlRpbWVzKEFueU51bWJlcigpKTsKLSAgQVNTRVJUX1RSVUUoU2V0VGltZXN0YW1wT2Zmc2V0KGtTb3VyY2VJZCwgZHVyYXRpb25fMSkpOwotICBBU1NFUlRfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyMi0+ZGF0YSgpLCBidWZmZXIyLT5kYXRhX3NpemUoKSwgNTEyKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzI3NDYsNTUxOSkgfSIpOwotCi0gIFNlZWsoZHVyYXRpb25fMSk7Ci0gIEV4cGVjdENvbmZpZ0NoYW5nZWQoRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBBU1NFUlRfRkFMU0UoY29uZmlnXzEuTWF0Y2hlcyhzdHJlYW0tPmF1ZGlvX2RlY29kZXJfY29uZmlnKCkpKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoc3RyZWFtLCAiMjc0NksgMjc2N0sgMjc4OUsgMjgxMEsiKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIEFwcGVuZFdpbmRvd19UZXh0KSB7Ci0gIERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtID0gTlVMTDsKLSAgRVhQRUNUX0NBTEwoaG9zdF8sIEFkZFRleHRTdHJlYW0oXywgXykpLldpbGxPbmNlKFNhdmVBcmc8MD4oJnRleHRfc3RyZWFtKSk7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19WSURFTyB8IEhBU19URVhUKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIC8vIFNldCB0aGUgYXBwZW5kIHdpbmRvdyB0byBbMjAsMjgwKS4KLSAgYXBwZW5kX3dpbmRvd19zdGFydF9mb3JfbmV4dF9hcHBlbmRfID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIwKTsKLSAgYXBwZW5kX3dpbmRvd19lbmRfZm9yX25leHRfYXBwZW5kXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyODApOwotCi0gIC8vIEFwcGVuZCBhIGNsdXN0ZXIgdGhhdCBzdGFydHMgYmVmb3JlIGFuZCBlbmRzIGFmdGVyIHRoZSBhcHBlbmQKLSAgLy8gd2luZG93LgotICBBcHBlbmRNdXhlZENsdXN0ZXIoCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgIjBLIDMwIDYwIDkwIDEyMEsgMTUwIDE4MCAyMTAgMjQwSyAyNzAgMzAwIDMzMEsiLCAzMCksCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1RleHRUcmFja051bSwgIjBLIDEwMEsgMjAwSyAzMDBLIikpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRleHQgY3VlcyB0aGF0IHN0YXJ0IG91dHNpZGUgdGhlIHdpbmRvdyBhcmUgbm90IGluY2x1ZGVkCi0gIC8vIGluIHRoZSBidWZmZXIuIEFsc28gdmVyaWZ5IHRoYXQgY3VlcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlCi0gIC8vIHdpbmRvdyBhcmUgbm90IGluY2x1ZGVkLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsxMDAsMjcwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjEyMEsgMTUwIDE4MCAyMTAgMjQwSyIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh0ZXh0X3N0cmVhbSwgIjEwMEsiKTsKLQotICAvLyBFeHRlbmQgdGhlIGFwcGVuZCB3aW5kb3cgdG8gWzIwLDY1MCkuCi0gIGFwcGVuZF93aW5kb3dfZW5kX2Zvcl9uZXh0X2FwcGVuZF8gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNjUwKTsKLQotICAvLyBBcHBlbmQgbW9yZSBkYXRhIGFuZCB2ZXJpZnkgdGhhdCBhIG5ldyByYW5nZSBpcyBjcmVhdGVkLgotICBBcHBlbmRNdXhlZENsdXN0ZXIoCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgIjM2MCAzOTAgNDIwSyA0NTAgNDgwIDUxMCA1NDBLIDU3MCA2MDAgNjMwSyIsIDMwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiNDAwSyA1MDBLIDYwMEsgNzAwSyIpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAwLDI3MCkgWzQwMCw2MzApIH0iKTsKLQotICAvLyBTZWVrIHRvIHRoZSBuZXcgcmFuZ2UgYW5kIHZlcmlmeSB0aGF0IHRoZSBleHBlY3RlZCBidWZmZXJzIGFyZSByZXR1cm5lZC4KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNDIwKSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjQyMEsgNDUwIDQ4MCA1MTAgNTQwSyA1NzAgNjAwIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHRleHRfc3RyZWFtLCAiNDAwSyA1MDBLIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTdGFydFdhaXRpbmdGb3JTZWVrQWZ0ZXJQYXJzZUVycm9yKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBFWFBFQ1RfTUVESUFfTE9HKFN0cmVhbVBhcnNpbmdGYWlsZWQoKSk7Ci0gIEVYUEVDVF9DQUxMKGhvc3RfLCBPbkRlbXV4ZXJFcnJvcihDSFVOS19ERU1VWEVSX0VSUk9SX0FQUEVORF9GQUlMRUQpKTsKLSAgQXBwZW5kR2FyYmFnZSgpOwotICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyg1MCk7Ci0gIGRlbXV4ZXJfLT5TdGFydFdhaXRpbmdGb3JTZWVrKHNlZWtfdGltZSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZW1vdmVfQXVkaW9WaWRlb1RleHQpIHsKLSAgRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0gPSBOVUxMOwotICBFWFBFQ1RfQ0FMTChob3N0XywgQWRkVGV4dFN0cmVhbShfLCBfKSkuV2lsbE9uY2UoU2F2ZUFyZzwwPigmdGV4dF9zdHJlYW0pKTsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPIHwgSEFTX1RFWFQpKTsKLQotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgRGVtdXhlclN0cmVhbSogdmlkZW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEsgMjBLIDQwSyA2MEsgODBLIDEwMEsgMTIwSyAxNDBLIiwgMjApLAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMEsgMzAgNjAgOTAgMTIwSyAxNTAgMTgwIiwgMzApLAotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtUZXh0VHJhY2tOdW0sICIwSyAxMDBLIDIwMEsiKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoYXVkaW9fc3RyZWFtLCAiMEsgMjBLIDQwSyA2MEsgODBLIDEwMEsgMTIwSyAxNDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjBLIDMwIDYwIDkwIDEyMEsgMTUwIDE4MCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh0ZXh0X3N0cmVhbSwgIjBLIDEwMEsgMjAwSyIpOwotCi0gIC8vIFJlbW92ZSB0aGUgYnVmZmVycyB0aGF0IHdlcmUgYWRkZWQuCi0gIGRlbXV4ZXJfLT5SZW1vdmUoa1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGEoKSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMzAwKSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgYWxsIHRoZSBhcHBlbmRlZCBkYXRhIGhhcyBiZWVuIHJlbW92ZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgfSIpOwotCi0gIC8vIEFwcGVuZCBuZXcgYnVmZmVycyB0aGF0IGFyZSBjbGVhcmx5IGRpZmZlcmVudCB0aGFuIHRoZSBvcmlnaW5hbAotICAvLyBvbmVzIGFuZCB2ZXJpZnkgdGhhdCBvbmx5IHRoZSBuZXcgYnVmZmVycyBhcmUgcmV0dXJuZWQuCi0gIEFwcGVuZE11eGVkQ2x1c3RlcigKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjFLIDIxSyA0MUsgNjFLIDgxSyAxMDFLIDEyMUsgMTQxSyIsIDIwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjFLIDMxIDYxIDkxIDEyMUsgMTUxIDE4MSIsIDMwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVGV4dFRyYWNrTnVtLCAiMUsgMTAxSyAyMDFLIikpOwotCi0gIFNlZWsoYmFzZTo6VGltZURlbHRhKCkpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyhhdWRpb19zdHJlYW0sICIxSyAyMUsgNDFLIDYxSyA4MUsgMTAxSyAxMjFLIDE0MUsiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiMUsgMzEgNjEgOTEgMTIxSyAxNTEgMTgxIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHRleHRfc3RyZWFtLCAiMUsgMTAxSyAyMDFLIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZW1vdmVfU3RhcnRBdER1cmF0aW9uKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTykpOwotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLQotICAvLyBTZXQgdGhlIGR1cmF0aW9uIHRvIHNvbWV0aGluZyBzbWFsbCBzbyB0aGF0IHRoZSBhcHBlbmQgdGhhdAotICAvLyBmb2xsb3dzIHVwZGF0ZXMgdGhlIGR1cmF0aW9uIHRvIHJlZmxlY3QgdGhlIGVuZCBvZiB0aGUgYXBwZW5kZWQgZGF0YS4KLSAgRVhQRUNUX0NBTEwoaG9zdF8sIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxKSkpOwotICBkZW11eGVyXy0+U2V0RHVyYXRpb24oMC4wMDEpOwotCi0gIEVYUEVDVF9DQUxMKGhvc3RfLCBTZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTYwKSkpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjBLIDIwSyA0MEsgNjBLIDgwSyAxMDBLIDEyMEsgMTQwRDIwSyIpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTYwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwgIjBLIDIwSyA0MEsgNjBLIDgwSyAxMDBLIDEyMEsgMTQwSyIpOwotCi0gIGRlbXV4ZXJfLT5SZW1vdmUoa1NvdXJjZUlkLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHNEKGRlbXV4ZXJfLT5HZXREdXJhdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICBrSW5maW5pdGVEdXJhdGlvbik7Ci0KLSAgU2VlayhiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTYwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwgIjBLIDIwSyA0MEsgNjBLIDgwSyAxMDBLIDEyMEsgMTQwSyIpOwotfQotCi0vLyBWZXJpZmllcyB0aGF0IGEgU2VlaygpIHdpbGwgY29tcGxldGUgd2l0aG91dCB0ZXh0IGN1ZXMgZm9yCi0vLyB0aGUgc2VlayBwb2ludCBhbmQgd2lsbCByZXR1cm4gY3VlcyBhZnRlciB0aGUgc2VlayBwb3NpdGlvbgotLy8gd2hlbiB0aGV5IGFyZSBldmVudHVhbGx5IGFwcGVuZGVkLgotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFNlZWtDb21wbGV0ZXNXaXRob3V0VGV4dEN1ZXMpIHsKLSAgRGVtdXhlclN0cmVhbSogdGV4dF9zdHJlYW0gPSBOVUxMOwotICBFWFBFQ1RfQ0FMTChob3N0XywgQWRkVGV4dFN0cmVhbShfLCBfKSkuV2lsbE9uY2UoU2F2ZUFyZzwwPigmdGV4dF9zdHJlYW0pKTsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPIHwgSEFTX1RFWFQpKTsKLQotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgRGVtdXhlclN0cmVhbSogdmlkZW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMjApOwotICBib29sIHNlZWtfY2Jfd2FzX2NhbGxlZCA9IGZhbHNlOwotICBkZW11eGVyXy0+U3RhcnRXYWl0aW5nRm9yU2VlayhzZWVrX3RpbWUpOwotICBkZW11eGVyXy0+U2VlayhzZWVrX3RpbWUsCi0gICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoT25TZWVrRG9uZV9PS0V4cGVjdGVkLCAmc2Vla19jYl93YXNfY2FsbGVkKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLQotICBFWFBFQ1RfRkFMU0Uoc2Vla19jYl93YXNfY2FsbGVkKTsKLQotICBib29sIHRleHRfcmVhZF9kb25lID0gZmFsc2U7Ci0gIHRleHRfc3RyZWFtLT5SZWFkKGJhc2U6OkJpbmQoCi0gICAgICAmT25SZWFkRG9uZSwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIyNSksICZ0ZXh0X3JlYWRfZG9uZSkpOwotCi0gIC8vIEFwcGVuZCBhdWRpbyAmIHZpZGVvIGRhdGEgc28gdGhlIHNlZWsgY29tcGxldGVzLgotICBBcHBlbmRNdXhlZENsdXN0ZXIoCi0gICAgICBNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgIjBLIDIwSyA0MEsgNjBLIDgwSyAxMDBLIDEyMEsgMTQwSyAxNjBLIDE4MEsgMjAwSyIsIDIwKSwKLSAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBLIDMwIDYwIDkwIDEyMEsgMTUwIDE4MCAyMTAiLCAzMCkpOwotCi0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgRVhQRUNUX1RSVUUoc2Vla19jYl93YXNfY2FsbGVkKTsKLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVhZF9kb25lKTsKLQotICAvLyBSZWFkIHNvbWUgYXVkaW8gJiB2aWRlbyBidWZmZXJzIHRvIGZ1cnRoZXIgdmVyaWZ5IHNlZWsgY29tcGxldGlvbi4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoYXVkaW9fc3RyZWFtLCAiMTIwSyAxNDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjEyMEsgMTUwIik7Ci0KLSAgRVhQRUNUX0ZBTFNFKHRleHRfcmVhZF9kb25lKTsKLQotICAvLyBBcHBlbmQgdGV4dCBjdWVzIHRoYXQgc3RhcnQgYWZ0ZXIgdGhlIHNlZWsgcG9pbnQgYW5kIHZlcmlmeSB0aGF0Ci0gIC8vIHRoZXkgYXJlIHJldHVybmVkIGJ5IFJlYWQoKSBjYWxscy4KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjIyMEsgMjQwSyAyNjBLIDI4MEsiLCAyMCksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIyNDBLIDI3MCAzMDAgMzMwIiwgMzApLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtUZXh0VHJhY2tOdW0sICIyMjVLIDI3NUsgMzI1SyIpKTsKLQotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIEVYUEVDVF9UUlVFKHRleHRfcmVhZF9kb25lKTsKLQotICAvLyBOT1RFOiB3ZSBzdGFydCBhdCAyNzUgaGVyZSBiZWNhdXNlIHRoZSBidWZmZXIgYXQgMjI1IHdhcyByZXR1cm5lZAotICAvLyB0byB0aGUgcGVuZGluZyByZWFkIGluaXRpYXRlZCBhYm92ZS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModGV4dF9zdHJlYW0sICIyNzVLIDMyNUsiKTsKLQotICAvLyBWZXJpZnkgdGhhdCBhdWRpbyAmIHZpZGVvIHN0cmVhbXMgY29udGludWUgdG8gcmV0dXJuIGV4cGVjdGVkIHZhbHVlcy4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoYXVkaW9fc3RyZWFtLCAiMTYwSyAxODBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjE4MCAyMTAiKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIENsdXN0ZXJXaXRoVW5rbm93blNpemUpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoMCwgMCwgNCwgdHJ1ZSkpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0NikgfSIpOwotCi0gIC8vIEEgbmV3IGNsdXN0ZXIgaW5kaWNhdGVzIGVuZCBvZiB0aGUgcHJldmlvdXMgY2x1c3RlciB3aXRoIHVua25vd24gc2l6ZS4KLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoNDYsIDY2LCA1LCB0cnVlKSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDExNSkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgQ3Vlc0JldHdlZW5DbHVzdGVyc1dpdGhVbmtub3duU2l6ZSkgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLQotICAvLyBBZGQgdHdvIGNsdXN0ZXJzIHNlcGFyYXRlZCBieSBDdWVzIGluIGEgc2luZ2xlIEFwcGVuZCgpIGNhbGwuCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyID0gR2VuZXJhdGVDbHVzdGVyKDAsIDAsIDQsIHRydWUpOwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+ZGF0YSgpICsgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwga0N1ZXNIZWFkZXIsIGtDdWVzSGVhZGVyICsgc2l6ZW9mKGtDdWVzSGVhZGVyKSk7Ci0gIGNsdXN0ZXIgPSBHZW5lcmF0ZUNsdXN0ZXIoNDYsIDY2LCA1LCB0cnVlKTsKLSAgZGF0YS5pbnNlcnQoZGF0YS5lbmQoKSwgY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5kYXRhKCkgKyBjbHVzdGVyLT5zaXplKCkpOwotICBBU1NFUlRfVFJVRShBcHBlbmREYXRhKCYqZGF0YS5iZWdpbigpLCBkYXRhLnNpemUoKSkpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTE1KSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBDdWVzQmV0d2VlbkNsdXN0ZXJzKSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVDbHVzdGVyKDAsIDAsIDQpKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZERhdGEoa0N1ZXNIZWFkZXIsIHNpemVvZihrQ3Vlc0hlYWRlcikpKTsKLSAgQVNTRVJUX1RSVUUoQXBwZW5kQ2x1c3RlcihHZW5lcmF0ZUNsdXN0ZXIoNDYsIDY2LCA1KSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDExNSkgfSIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwgRXZpY3RDb2RlZEZyYW1lc1Rlc3QpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0gIGRlbXV4ZXJfLT5TZXRNZW1vcnlMaW1pdHNGb3JUZXN0KERlbXV4ZXJTdHJlYW06OkFVRElPLCAxMCAqIGtCbG9ja1NpemUpOwotICBkZW11eGVyXy0+U2V0TWVtb3J5TGltaXRzRm9yVGVzdChEZW11eGVyU3RyZWFtOjpWSURFTywgMTUgKiBrQmxvY2tTaXplKTsKLSAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIGNvbnN0IGNoYXIqIGtBdWRpb1N0cmVhbUluZm8gPSAiMEsgNDBLIDgwSyAxMjBLIDE2MEsgMjAwSyAyNDBLIDI4MEsiOwotICBjb25zdCBjaGFyKiBrVmlkZW9TdHJlYW1JbmZvID0KLSAgICAgICIwSyAxMCAyMEsgMzAgNDBLIDUwIDYwSyA3MCA4MEsgOTAgMTAwSyAiCi0gICAgICAiMTEwIDEyMEsgMTMwIDE0MEsiOwotICAvLyBBcHBlbmQgOCBibG9ja3MgKDgwIGJ5dGVzKSBvZiBkYXRhIHRvIGF1ZGlvIHN0cmVhbSBhbmQgMTUgYmxvY2tzICgxNTAKLSAgLy8gYnl0ZXMpIHRvIHZpZGVvIHN0cmVhbS4KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwga0F1ZGlvU3RyZWFtSW5mbywgNDApLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCBrVmlkZW9TdHJlYW1JbmZvLCAxMCkpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyhhdWRpb19zdHJlYW0sIGtBdWRpb1N0cmVhbUluZm8pOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh2aWRlb19zdHJlYW0sIGtWaWRlb1N0cmVhbUluZm8pOwotCi0gIC8vIElmIHdlIHdhbnQgdG8gYXBwZW5kIDgwIG1vcmUgYmxvY2tzIG9mIG11eGVkIGErdiBkYXRhIGFuZCB0aGUgY3VycmVudAotICAvLyBwb3NpdGlvbiBpcyAwLCB0aGF0IHdpbGwgZmFpbCwgYmVjYXVzZSBFdmljdENvZGVkRnJhbWVzIHdvbid0IHJlbW92ZSB0aGUKLSAgLy8gZGF0YSBhZnRlciB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbi4KLSAgQVNTRVJUX0ZBTFNFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKAotICAgICAga1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMCksIDgwKSk7Ci0gIC8vIEV2aWN0Q29kZWRGcmFtZXMgaGFzIGZhaWxlZCwgc28gZGF0YSBzaG91bGQgYmUgdW5jaGFuZ2VkLgotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwga0F1ZGlvU3RyZWFtSW5mbyk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwga1ZpZGVvU3RyZWFtSW5mbyk7Ci0KLSAgLy8gQnV0IGlmIHdlIHByZXRlbmQgdGhhdCBwbGF5YmFjayBwb3NpdGlvbiBoYXMgbW92ZWQgdG8gMTIwbXMsIHRoYXQgYWxsb3dzCi0gIC8vIEV2aWN0Q29kZWRGcmFtZXMgdG8gZ2FyYmFnZS1jb2xsZWN0IGVub3VnaCBkYXRhIHRvIHN1Y2NlZWQuCi0gIEFTU0VSVF9UUlVFKGRlbXV4ZXJfLT5FdmljdENvZGVkRnJhbWVzKAotICAgICAga1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTIwKSwgODApKTsKLQotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSk7Ci0gIC8vIEF1ZGlvIHN0cmVhbSBoYWQgOCBidWZmZXJzLCB2aWRlbyBzdHJlYW0gaGFkIDE1LiBXZSB0b2xkIEV2aWN0Q29kZWRGcmFtZXMKLSAgLy8gdGhhdCB0aGUgbmV3IGRhdGEgc2l6ZSBpcyA4IGJsb2NrcyBtdXhlZCwgaS5lLiA4MCBieXRlcy4gR2l2ZW4gdGhlIGN1cnJlbnQKLSAgLy8gcmF0aW8gb2YgdmlkZW8gdG8gdGhlIHRvdGFsIGRhdGEgc2l6ZSAoMTUgOiAoOCsxNSkgfj0gMC42NSkgdGhlIGVzdGltYXRlZAotICAvLyBzaXplcyBvZiB2aWRlbyBhbmQgYXVkaW8gZGF0YSBpbiB0aGUgbmV3IDgwIGJ5dGUgY2h1bmsgYXJlIDUyIGJ5dGVzIGZvcgotICAvLyB2aWRlbyAoODAqMC42NSA9IDUyKSBhbmQgMjggYnl0ZXMgZm9yIGF1ZGlvICg4MCAtIDUyKS4KLSAgLy8gR2l2ZW4gdGhlc2UgbnVtYmVycyBNU0UgR0Mgd2lsbCByZW1vdmUganVzdCBvbmUgYXVkaW8gYmxvY2sgKHNpbmNlIGN1cnJlbnQKLSAgLy8gYXVkaW8gc2l6ZSBpcyA4MCBieXRlcywgbmV3IGRhdGEgaXMgMjggYnl0ZXMsIHdlIG5lZWQgdG8gcmVtb3ZlIGp1c3Qgb25lIDEwCi0gIC8vIGJ5dGUgYmxvY2sgdG8gc3RheSB1bmRlciAxMDAgYnl0ZXMgbWVtb3J5IGxpbWl0IGFmdGVyIGFwcGVuZAotICAvLyA4MCAtIDEwICsgMjggPSA5OCkuCi0gIC8vIEZvciB2aWRlbyBzdHJlYW0gMTUwICsgNTIgPSAyMDIuIFZpZGVvIGxpbWl0IGlzIDE1MCBieXRlcy4gV2UgbmVlZCB0bwotICAvLyByZW1vdmUgYXQgbGVhc3QgNiBibG9ja3MgdG8gc3RheSB1bmRlciBsaW1pdC4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoYXVkaW9fc3RyZWFtLCAiNDBLIDgwSyAxMjBLIDE2MEsgMjAwSyAyNDBLIDI4MEsiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiNjBLIDcwIDgwSyA5MCAxMDBLIDExMCAxMjBLIDEzMCAxNDBLIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZWdtZW50TWlzc2luZ0F1ZGlvRnJhbWVfQXVkaW9Pbmx5KSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTykpOwotICBFWFBFQ1RfTUVESUFfTE9HKFNlZ21lbnRNaXNzaW5nRnJhbWVzKCIyIikpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlRW1wdHlDbHVzdGVyKDApKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZWdtZW50TWlzc2luZ1ZpZGVvRnJhbWVfVmlkZW9Pbmx5KSB7Ci0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19WSURFTykpOwotICBFWFBFQ1RfTUVESUFfTE9HKFNlZ21lbnRNaXNzaW5nRnJhbWVzKCIxIikpOwotICBBU1NFUlRfVFJVRShBcHBlbmRDbHVzdGVyKEdlbmVyYXRlRW1wdHlDbHVzdGVyKDApKSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZWdtZW50TWlzc2luZ0F1ZGlvRnJhbWVfQXVkaW9WaWRlbykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgRVhQRUNUX01FRElBX0xPRyhTZWdtZW50TWlzc2luZ0ZyYW1lcygiMiIpKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAwLCAxMCk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZWdtZW50TWlzc2luZ1ZpZGVvRnJhbWVfQXVkaW9WaWRlbykgewotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgRVhQRUNUX01FRElBX0xPRyhTZWdtZW50TWlzc2luZ0ZyYW1lcygiMSIpKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtBdWRpb1RyYWNrTnVtLCAwLCAxMCk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBTZWdtZW50TWlzc2luZ0F1ZGlvVmlkZW9GcmFtZXMpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU2VnbWVudE1pc3NpbmdGcmFtZXMoIjEiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coU2VnbWVudE1pc3NpbmdGcmFtZXMoIjIiKSk7Ci0gIEFTU0VSVF9UUlVFKEFwcGVuZENsdXN0ZXIoR2VuZXJhdGVFbXB0eUNsdXN0ZXIoMCkpKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFJlbGF4ZWRLZXlmcmFtZV9GaXJzdFNlZ21lbnRNaXNzaW5nS2V5ZnJhbWUpIHsKLSAgLy8gQXBwZW5kIFY6W24gbiBuXVtuIG4gS10KLSAgLy8gRXhwZWN0IFY6ICAgICAgICAgICBbS10KLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX1ZJREVPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMTApKS5UaW1lcygyKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAiMCAxMCAyMCIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIzMCA0MCA1MEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNTAsNjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiNTBLIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZWxheGVkS2V5ZnJhbWVfU2Vjb25kU2VnbWVudE1pc3NpbmdLZXlmcmFtZSkgewotICAvLyBBcHBlbmQgVjpbSyBuIG5dW24gbiBuXQotICAvLyBFeHBlY3QgVjpbSyBuIG5dW24gbiBuXQotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfVklERU8pKTsKLSAgRGVtdXhlclN0cmVhbSogdmlkZW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgxMCkpLlRpbWVzKDIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIwSyAxMCAyMCIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIzMCA0MCA1MCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDYwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjBLIDEwIDIwIDMwIDQwIDUwIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZWxheGVkS2V5ZnJhbWVfUmVtb3ZlSW50ZXJydXB0c0NvZGVkRnJhbWVHcm91cF8xKSB7Ci0gIC8vIEFwcGVuZCBWOltLIG4gbl0KLSAgLy8gUmVtb3ZlICAgICoqKioqCi0gIC8vIEFwcGVuZCBWOiAgICAgICBbbiBuIG5dW24gSyBuXQotICAvLyBFeHBlY3Q6ICAgICAgICAgICAgICAgICAgW0sgbl0KLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX1ZJREVPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMTApKS5UaW1lcygzKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAiMEsgMTAgMjAiKTsKLSAgZGVtdXhlcl8tPlJlbW92ZShrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygzMCkpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIzMCA0MCA1MCIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICI2MCA3MEsgODAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNzAsOTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiNzBLIDgwIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZWxheGVkS2V5ZnJhbWVfUmVtb3ZlSW50ZXJydXB0c0NvZGVkRnJhbWVHcm91cF8yKSB7Ci0gIC8vIEFwcGVuZCBWOltLIG4gbl1bbiBuIG5dW24gSyBuXQotICAvLyBSZW1vdmUgICAgKgotICAvLyBFeHBlY3Q6ICAgICAgICAgICAgICAgICAgW0sgbl0KLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX1ZJREVPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMTApKS5UaW1lcygzKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAiMEsgMTAgMjAiKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAiMzAgNDAgNTAiKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrU291cmNlSWQsIGtWaWRlb1RyYWNrTnVtLCAiNjAgNzBLIDgwIik7Ci0gIGRlbXV4ZXJfLT5SZW1vdmUoa1NvdXJjZUlkLCBiYXNlOjpUaW1lRGVsdGEoKSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNzAsOTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnModmlkZW9fc3RyZWFtLCAiNzBLIDgwIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZWxheGVkS2V5ZnJhbWVfUmVtb3ZlSW50ZXJydXB0c0NvZGVkRnJhbWVHcm91cF8zKSB7Ci0gIC8vIEFwcGVuZCBWOltLIG4gbl1bbiBuIG5dW24gSyBuXQotICAvLyBSZW1vdmUgICAgICAgICAgICAgICAqCi0gIC8vIEV4cGVjdDogIFtLIG4gbi4ubiBuXSAgICBbSyBuXQotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfVklERU8pKTsKLSAgRGVtdXhlclN0cmVhbSogdmlkZW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgxMCkpLlRpbWVzKDMpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIwSyAxMCAyMCIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICIzMCA0MCA1MCIpOwotICBBcHBlbmRTaW5nbGVTdHJlYW1DbHVzdGVyKGtTb3VyY2VJZCwga1ZpZGVvVHJhY2tOdW0sICI2MCA3MEsgODAiKTsKLSAgZGVtdXhlcl8tPlJlbW92ZShrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MCksCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDYwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNTApIFs3MCw5MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh2aWRlb19zdHJlYW0sICIwSyAxMCAyMCAzMCA0MCIpOwotICBTZWVrKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg3MCkpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh2aWRlb19zdHJlYW0sICI3MEsgODAiKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsCi0gICAgICAgUmVsYXhlZEtleWZyYW1lX1JlbW92ZUludGVycnVwdHNNdXhlZENvZGVkRnJhbWVHcm91cF8xKSB7Ci0gIC8vIEFwcGVuZCBtdXhlZDoKLSAgLy8gICAgICAgIEE6W0sgSyBLXQotICAvLyAgICAgICAgVjpbSyBuIG5dCi0gIC8vIFJlbW92ZSAgICAqKioqKgotICAvLyBBcHBlbmQgbXV4ZWQ6Ci0gIC8vICAgICAgICBBOiAgICAgICBbSyBLIEtdW0sgSyBLXQotICAvLyAgICAgICAgVjogICAgICAgW24gbiBuXVtuIEsgbl0KLSAgLy8gRXhwZWN0OgotICAvLyAgICAgICAgQTogICAgICAgW0sgSyBLXVtLIEsgS10KLSAgLy8gICAgICAgIFYgICAgICAgICAgICAgICAgIFtLIG5dCi0gIEFTU0VSVF9UUlVFKEluaXREZW11eGVyKEhBU19BVURJTyB8IEhBU19WSURFTykpOwotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgRGVtdXhlclN0cmVhbSogdmlkZW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0KLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjBLIDEwSyAyMEQxMEsiKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjBLIDEwIDIwIiwgMTApKTsKLSAgZGVtdXhlcl8tPlJlbW92ZShrU291cmNlSWQsIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygzMCkpOwotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMzBLIDQwSyA1MEQxMEsiKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjMwIDQwIDUwIiwgMTApKTsKLSAgQXBwZW5kTXV4ZWRDbHVzdGVyKE11eGVkU3RyZWFtSW5mbyhrQXVkaW9UcmFja051bSwgIjYwSyA3MEsgODBEMTBLIiksCi0gICAgICAgICAgICAgICAgICAgICBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICI2MCA3MEsgODAiLCAxMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OkFVRElPLCAieyBbMzAsOTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpWSURFTywgInsgWzcwLDkwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzcwLDkwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwgIjMwSyA0MEsgNTBLIDYwSyA3MEsgODBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjcwSyA4MCIpOwotfQotCi1URVNUX0YoQ2h1bmtEZW11eGVyVGVzdCwKLSAgICAgICBSZWxheGVkS2V5ZnJhbWVfUmVtb3ZlSW50ZXJydXB0c011eGVkQ29kZWRGcmFtZUdyb3VwXzIpIHsKLSAgLy8gQXBwZW5kIG11eGVkOgotICAvLyAgICAgICAgQTpbSyBLIEtdCi0gIC8vICAgICAgICBWOihOb3RoaW5nLCBzaW11bGF0aW5nIGphZ2dlZCBjbHVzdGVyIHN0YXJ0IG9yIGEgbG9uZyBwcmV2aW91cwotICAvLyAgICAgICAgICB2aWRlbyBmcmFtZSkKLSAgLy8gUmVtb3ZlICAgICoqKioqCi0gIC8vIEFwcGVuZCBtdXhlZDoKLSAgLy8gICAgICAgIEE6ICAgICAgIFtLIEsgS11bSyBLIEtdCi0gIC8vICAgICAgICBWOiAgICAgICBbbiBuIG5dW24gSyBuXQotICAvLyBFeHBlY3Q6Ci0gIC8vICAgICAgICBBOiAgICAgICBbSyBLIEtdW0sgSyBLXQotICAvLyAgICAgICAgViBbLi4uLi4uLi4uLi4uLi4uLksgbl0gKEFzIHdvdWxkIG9jY3VyIGlmIHRoZXJlIHJlYWxseSB3ZXJlIGEKLSAgLy8gICAgICAgIGphZ2dlZCBjbHVzdGVyIHN0YXJ0IGFuZCBub3QgYmFkbHkgbXV4ZWQgY2x1c3RlcnMgYXMgdXNlZCB0bwotICAvLyAgICAgICAgc2ltdWxhdGUgYSBqYWdnZWQgc3RhcnQgaW4gdGhpcyB0ZXN0LikKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBkZW11eGVyXy0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKFNlZ21lbnRNaXNzaW5nRnJhbWVzKCIxIikpOwotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEsgMTBLIDIwRDEwSyIpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiIikpOwotICBkZW11eGVyXy0+UmVtb3ZlKGtTb3VyY2VJZCwgYmFzZTo6VGltZURlbHRhKCksCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDMwKSk7Ci0gIEFwcGVuZE11eGVkQ2x1c3RlcihNdXhlZFN0cmVhbUluZm8oa0F1ZGlvVHJhY2tOdW0sICIzMEsgNDBLIDUwRDEwSyIpLAotICAgICAgICAgICAgICAgICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtWaWRlb1RyYWNrTnVtLCAiMzAgNDAgNTAiLCAxMCkpOwotICBBcHBlbmRNdXhlZENsdXN0ZXIoTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiNjBLIDcwSyA4MEQxMEsiKSwKLSAgICAgICAgICAgICAgICAgICAgIE11eGVkU3RyZWFtSW5mbyhrVmlkZW9UcmFja051bSwgIjYwIDcwSyA4MCIsIDEwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFszMCw5MCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKERlbXV4ZXJTdHJlYW06OlZJREVPLCAieyBbMCw5MCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFszMCw5MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyhhdWRpb19zdHJlYW0sICIzMEsgNDBLIDUwSyA2MEsgNzBLIDgwSyIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyh2aWRlb19zdHJlYW0sICI3MEsgODAiKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsCi0gICAgICAgUmVsYXhlZEtleWZyYW1lX1JlbW92ZUludGVycnVwdHNNdXhlZENvZGVkRnJhbWVHcm91cF8zKSB7Ci0gIC8vIEFwcGVuZCBtdXhlZDoKLSAgLy8gICAgICAgIEE6W0sgSyBLCi0gIC8vICAgICAgICBWOihOb3RoaW5nIHlldC4gVGhpcyBpcyBhIGphZ2dlZCBzdGFydCwgbm90IHNpbXVsYXRlZC4pCi0gIC8vIFJlbW92ZSAgICAqKioqKgotICAvLyBBcHBlbmQgbXV4ZWQ6Ci0gIC8vICAgICAgICBBOiAgICAgICBLIEsgSyBLIEsgS10KLSAgLy8gICAgICAgIFY6ICAgICAgIG4gbiBuIG4gSyBuXQotICAvLyBFeHBlY3Q6Ci0gIC8vICAgICAgICBBOiAgICAgIFtLIEsgSyBLIEsgS10KLSAgLy8gICAgICAgIFYgWy4uLi4uLi4uLi4uLi4uSyBuXQotICBBU1NFUlRfVFJVRShJbml0RGVtdXhlcihIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgRGVtdXhlclN0cmVhbSogYXVkaW9fc3RyZWFtID0gZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotCi0gIHN0ZDo6dmVjdG9yPE11eGVkU3RyZWFtSW5mbz4gbXNpKDIpOwotICBtc2lbMF0gPQotICAgICAgTXV4ZWRTdHJlYW1JbmZvKGtBdWRpb1RyYWNrTnVtLCAiMEsgMTBLIDIwSyAzMEsgNDBLIDUwSyA2MEsgNzBLIDgwRDEwSyIpOwotICBtc2lbMV0gPSBNdXhlZFN0cmVhbUluZm8oa1ZpZGVvVHJhY2tOdW0sICIzMSA0MSA1MSA2MSA3MUsgODEiLCAxMCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyID0gR2VuZXJhdGVNdXhlZENsdXN0ZXIobXNpKTsKLQotICAvLyBBcHBlbmQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGNsdXN0ZXIsIHVwIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0Ci0gIC8vIHZpZGVvIHNpbXBsZWJsb2NrLiBUaGUgcmVzdWx0IHNob3VsZCBiZSBqdXN0IDQgYXVkaW8gYmxvY2tzIGFuZCBubyB2aWRlbwotICAvLyBibG9ja3MgYXJlIGFwcGVuZGVkLiBTaW5jZSB0aGUgc3RyZWFtIHBhcnNlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhIGR1cmF0aW9uCi0gIC8vIGZvciB0aGUgNHRoIGF1ZGlvIGJsb2NrIGluIHRoaXMgcGFydGlhbCBjbHVzdGVyIGFwcGVuZCwgaXQgaXMgbm90IHlldAotICAvLyBlbWl0dGVkIGZyb20gdGhlIHBhcnNlciwgYW5kIG9ubHkgdGhlIGZpcnN0IDMgYXVkaW8gYmxvY2tzIGFyZSBleHBlY3RlZCB0bwotICAvLyBiZSBidWZmZXJlZCBieSBhbmQgYXZhaWxhYmxlIGZyb20gdGhlIGRlbXV4ZXIuCi0gIEFTU0VSVF9FUShrVmlkZW9UcmFja051bSwgMSk7Ci0gIGludCB2aWRlb19zdGFydCA9IDA7Ci0gIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgd2hpbGUgKHZpZGVvX3N0YXJ0IDwgY2x1c3Rlci0+c2l6ZSgpIC0gMTApIHsKLSAgICBpZiAoY2x1c3Rlci0+ZGF0YSgpW3ZpZGVvX3N0YXJ0XSA9PSAweEEzICYmCi0gICAgICAgIGNsdXN0ZXItPmRhdGEoKVt2aWRlb19zdGFydCArIDldID09IDB4ODEpIHsKLSAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICB2aWRlb19zdGFydCsrOwotICB9Ci0KLSAgQVNTRVJUX1RSVUUoZm91bmQpOwotICBBU1NFUlRfR1QodmlkZW9fc3RhcnQsIDApOwotICBBU1NFUlRfTFQodmlkZW9fc3RhcnQsIGNsdXN0ZXItPnNpemUoKSAtIDMpOwotCi0gIEFTU0VSVF9UUlVFKEFwcGVuZERhdGEoa1NvdXJjZUlkLCBjbHVzdGVyLT5kYXRhKCksIHZpZGVvX3N0YXJ0KSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6QVVESU8sICJ7IFswLDMwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sICJ7IH0iKTsKLQotICBkZW11eGVyXy0+UmVtb3ZlKGtTb3VyY2VJZCwgYmFzZTo6VGltZURlbHRhKCksCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDMwKSk7Ci0KLSAgLy8gQXBwZW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGNsdXN0ZXIKLSAgQVNTRVJUX1RSVUUoQXBwZW5kRGF0YShrU291cmNlSWQsIGNsdXN0ZXItPmRhdGEoKSArIHZpZGVvX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXItPnNpemUoKSAtIHZpZGVvX3N0YXJ0KSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhEZW11eGVyU3RyZWFtOjpBVURJTywgInsgWzMwLDkwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoRGVtdXhlclN0cmVhbTo6VklERU8sICJ7IFswLDkxKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzMwLDkwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGF1ZGlvX3N0cmVhbSwgIjMwSyA0MEsgNTBLIDYwSyA3MEsgODBLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHZpZGVvX3N0cmVhbSwgIjcxSyA4MSIpOwotfQotCi12b2lkIE9uU3RyZWFtU3RhdHVzQ2hhbmdlZChiYXNlOjpXYWl0YWJsZUV2ZW50KiBldmVudCwgRGVtdXhlclN0cmVhbSogc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkLCBiYXNlOjpUaW1lRGVsdGEpIHsKLSAgRVhQRUNUX0VRKGVuYWJsZWQsIHN0cmVhbS0+ZW5hYmxlZCgpKTsKLSAgZXZlbnQtPlNpZ25hbCgpOwotfQotCi12b2lkIENoZWNrU3RyZWFtU3RhdHVzTm90aWZpY2F0aW9ucyhEZW11eGVyU3RyZWFtKiBzdHJlYW0pIHsKLSAgYmFzZTo6V2FpdGFibGVFdmVudCBldmVudChiYXNlOjpXYWl0YWJsZUV2ZW50OjpSZXNldFBvbGljeTo6QVVUT01BVElDLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OldhaXRhYmxlRXZlbnQ6OkluaXRpYWxTdGF0ZTo6Tk9UX1NJR05BTEVEKTsKLQotICBBU1NFUlRfVFJVRShzdHJlYW0tPmVuYWJsZWQoKSk7Ci0gIHN0cmVhbS0+U2V0U3RyZWFtU3RhdHVzQ2hhbmdlQ0IoYmFzZTo6QmluZCgmT25TdHJlYW1TdGF0dXNDaGFuZ2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCgmZXZlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChzdHJlYW0pKSk7Ci0KLSAgc3RyZWFtLT5zZXRfZW5hYmxlZChmYWxzZSwgYmFzZTo6VGltZURlbHRhKCkpOwotICBiYXNlOjpSdW5Mb29wKCkuUnVuVW50aWxJZGxlKCk7Ci0gIEFTU0VSVF9UUlVFKGV2ZW50LklzU2lnbmFsZWQoKSk7Ci0KLSAgZXZlbnQuUmVzZXQoKTsKLSAgc3RyZWFtLT5zZXRfZW5hYmxlZCh0cnVlLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgQVNTRVJUX1RSVUUoZXZlbnQuSXNTaWduYWxlZCgpKTsKLX0KLQotVEVTVF9GKENodW5rRGVtdXhlclRlc3QsIFN0cmVhbVN0YXR1c05vdGlmaWNhdGlvbnMpIHsKLSAgQVNTRVJUX1RSVUUoSW5pdERlbXV4ZXIoSEFTX0FVRElPIHwgSEFTX1ZJREVPKSk7Ci0gIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBFWFBFQ1RfTkUoTlVMTCwgYXVkaW9fc3RyZWFtKTsKLSAgQ2hlY2tTdHJlYW1TdGF0dXNOb3RpZmljYXRpb25zKGF1ZGlvX3N0cmVhbSk7Ci0gIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOwotICBFWFBFQ1RfTkUoTlVMTCwgdmlkZW9fc3RyZWFtKTsKLSAgQ2hlY2tTdHJlYW1TdGF0dXNOb3RpZmljYXRpb25zKHZpZGVvX3N0cmVhbSk7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBNdWx0aXBsZUlkcykgewotICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBFWFBFQ1RfQ0FMTChob3N0XywgU2V0RHVyYXRpb24oXykpLlRpbWVzKDIpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgmaG9zdF8sIENyZWF0ZUluaXREb25lQ0Ioa05vVGltZXN0YW1wLCBQSVBFTElORV9PSyksCi0gICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwotCi0gIGNvbnN0IGNoYXIqIGtJZDEgPSAiaWQxIjsKLSAgY29uc3QgY2hhcioga0lkMiA9ICJpZDIiOwotICBFWFBFQ1RfRVEoQWRkSWQoa0lkMSwgInZpZGVvL3dlYm0iLCAib3B1cyx2cDkiKSwgQ2h1bmtEZW11eGVyOjprT2spOwotICBFWFBFQ1RfRVEoQWRkSWQoa0lkMiwgInZpZGVvL3dlYm0iLCAib3B1cyx2cDkiKSwgQ2h1bmtEZW11eGVyOjprT2spOwotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGRhdGExID0gUmVhZFRlc3REYXRhRmlsZSgiZ3JlZW4tYTMwMGh6LndlYm0iKTsKLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBkYXRhMiA9IFJlYWRUZXN0RGF0YUZpbGUoInJlZC1hNTAwaHoud2VibSIpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oImF1ZGlvIikpLlRpbWVzKDIpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgIm9wdXMiKSkuVGltZXMoMik7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJ2aWRlbyIsICJ2cDkiKSkuVGltZXMoMik7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBJbml0U2VnbWVudFJlY2VpdmVkTW9jayhfKSkuVGltZXMoMik7Ci0gIEVYUEVDVF9NRURJQV9MT0coU2VnbWVudE1pc3NpbmdGcmFtZXMoIjEiKSkuVGltZXMoMSk7Ci0KLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YShrSWQxLCBkYXRhMS0+ZGF0YSgpLCBkYXRhMS0+ZGF0YV9zaXplKCkpKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YShrSWQyLCBkYXRhMi0+ZGF0YSgpLCBkYXRhMi0+ZGF0YV9zaXplKCkpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcyhrSWQxLCAieyBbMCwxMjAwNykgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKGtJZDIsICJ7IFswLDEwMDA3KSB9Iik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBDb21wbGV0ZUluaXRBZnRlcklkUmVtb3ZlZCkgewotICBDcmVhdGVOZXdEZW11eGVyKCk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBEZW11eGVyT3BlbmVkKCkpOwotICBkZW11eGVyXy0+SW5pdGlhbGl6ZSgmaG9zdF8sCi0gICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUluaXREb25lQ0Ioa0RlZmF1bHREdXJhdGlvbigpLCBQSVBFTElORV9PSyksIHRydWUpOwotCi0gIC8vIEFkZCB0d28gaWRzLCB0aGVuIHJlbW92ZSBvbmUgb2YgdGhlIGlkcyBhbmQgdmVyaWZ5IHRoYXQgYWRkaW5nIGluaXQgc2VnbWVudAotICAvLyBvbmx5IGZvciB0aGUgcmVtYWluaW5nIGlkIHN0aWxsIHRyaWdnZXJzIHRoZSBJbml0RG9uZUNCLgotICBjb25zdCBjaGFyKiBrSWQxID0gImlkMSI7Ci0gIGNvbnN0IGNoYXIqIGtJZDIgPSAiaWQyIjsKLSAgRVhQRUNUX0VRKEFkZElkKGtJZDEsICJ2aWRlby93ZWJtIiwgInZwOCIpLCBDaHVua0RlbXV4ZXI6OmtPayk7Ci0gIEVYUEVDVF9FUShBZGRJZChrSWQyLCAidmlkZW8vd2VibSIsICJ2cDkiKSwgQ2h1bmtEZW11eGVyOjprT2spOwotICBkZW11eGVyXy0+UmVtb3ZlSWQoa0lkMik7Ci0KLSAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRTZWdtZW50UmVjZWl2ZWRNb2NrKF8pKTsKLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgzMCkpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOCIpKTsKLQotICBBU1NFUlRfVFJVRShBcHBlbmRJbml0U2VnbWVudFdpdGhTb3VyY2VJZChrSWQxLCBIQVNfVklERU8pKTsKLSAgQXBwZW5kU2luZ2xlU3RyZWFtQ2x1c3RlcihrSWQxLCBrVmlkZW9UcmFja051bSwgIjBLIDMwIDYwIDkwIik7Ci19Ci0KLVRFU1RfRihDaHVua0RlbXV4ZXJUZXN0LCBSZW1vdmluZ0lkTXVzdFJlbW92ZVN0cmVhbXMpIHsKLSAgQ3JlYXRlTmV3RGVtdXhlcigpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgRGVtdXhlck9wZW5lZCgpKTsKLSAgZGVtdXhlcl8tPkluaXRpYWxpemUoJmhvc3RfLAotICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbml0RG9uZUNCKGtEZWZhdWx0RHVyYXRpb24oKSwgUElQRUxJTkVfT0spLCB0cnVlKTsKLQotICBjb25zdCBjaGFyKiBrSWQxID0gImlkMSI7Ci0gIEVYUEVDVF9FUShBZGRJZChrSWQxLCAidmlkZW8vd2VibSIsICJ2b3JiaXMsdnA4IiksIENodW5rRGVtdXhlcjo6a09rKTsKLQotICBFWFBFQ1RfQ0FMTCgqdGhpcywgSW5pdFNlZ21lbnRSZWNlaXZlZE1vY2soXykpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOCIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgiYXVkaW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJhdWRpbyIsICJ2b3JiaXMiKSk7Ci0KLSAgLy8gQXBwZW5kIGluaXQgc2VnbWVudCB0byBlbnN1cmUgZGVtdXhlciBzdHJlYW1zIGdldCBjcmVhdGVkLgotICBBU1NFUlRfVFJVRShBcHBlbmRJbml0U2VnbWVudFdpdGhTb3VyY2VJZChrSWQxLCBIQVNfQVVESU8gfCBIQVNfVklERU8pKTsKLSAgRVhQRUNUX05FKE5VTEwsIGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pKTsKLSAgRVhQRUNUX05FKE5VTEwsIGRlbXV4ZXJfLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pKTsKLQotICAvLyBSZW1vdmluZyB0aGUgaWQgc2hvdWxkIHJlbW92ZSBhbHNvIHRoZSBEZW11eGVyU3RyZWFtcy4KLSAgZGVtdXhlcl8tPlJlbW92ZUlkKGtJZDEpOwotICBFWFBFQ1RfRVEoTlVMTCwgZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTykpOwotICBFWFBFQ1RfRVEoTlVMTCwgZGVtdXhlcl8tPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTykpOwotfQotCi0vLyBUT0RPKHNlcnZvbGspOiBBZGQgYSB1bml0IHRlc3Qgd2l0aCBtdWx0aXBsZSBhdWRpby92aWRlbyB0cmFja3MgdXNpbmcgdGhlCi0vLyBzYW1lIGNvZGVjIHR5cGUgaW4gYSBzaW5nbGUgU291cmNlQnVmZmVyU3RhdGUsIHdoZW4gV2ViTSBwYXJzZXIgc3VwcG9ydHMKLS8vIG11bHRpcGxlIHRyYWNrcy4gY3JidWcuY29tLzY0NjkwMAotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUxNTQ5MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3NTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvZnJhbWVfcHJvY2Vzc29yLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgaW50IGtNYXhEcm9wcGVkUHJlcm9sbFdhcm5pbmdzID0gMTA7Ci1jb25zdCBpbnQga01heER0c0JleW9uZFB0c1dhcm5pbmdzID0gMTA7Ci0KLS8vIEhlbHBlciBjbGFzcyB0byBjYXB0dXJlIHBlci10cmFjayBkZXRhaWxzIG5lZWRlZCBieSBhIGZyYW1lIHByb2Nlc3Nvci4gU29tZQotLy8gb2YgdGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUgZHVwbGljYXRlZCBpbiB0aGUgc2hvcnQtdGVybSBpbiB0aGUgYXNzb2NpYXRlZAotLy8gQ2h1bmtEZW11eGVyU3RyZWFtIGFuZCBTb3VyY2VCdWZmZXJTdHJlYW0gZm9yIGEgdHJhY2suCi0vLyBUaGlzIHBhcmFsbGVscyB0aGUgTVNFIHNwZWMgZWFjaCBvZiBhIFNvdXJjZUJ1ZmZlcidzIFRyYWNrIEJ1ZmZlcnMgYXQKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhLXNvdXJjZS8jdHJhY2stYnVmZmVycy4KLWNsYXNzIE1zZVRyYWNrQnVmZmVyIDogcHVibGljIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPE1zZVRyYWNrQnVmZmVyPiB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNc2VUcmFja0J1ZmZlcihDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSk7Ci0gIH5Nc2VUcmFja0J1ZmZlcigpOwotCi0gIC8vIEdldC9zZXQgfGxhc3RfZGVjb2RlX3RpbWVzdGFtcF98LgotICBEZWNvZGVUaW1lc3RhbXAgbGFzdF9kZWNvZGVfdGltZXN0YW1wKCkgY29uc3QgewotICAgIHJldHVybiBsYXN0X2RlY29kZV90aW1lc3RhbXBfOwotICB9Ci0gIHZvaWQgc2V0X2xhc3RfZGVjb2RlX3RpbWVzdGFtcChEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSB7Ci0gICAgbGFzdF9kZWNvZGVfdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIC8vIEdldC9zZXQgfGxhc3RfZnJhbWVfZHVyYXRpb25ffC4KLSAgYmFzZTo6VGltZURlbHRhIGxhc3RfZnJhbWVfZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBsYXN0X2ZyYW1lX2R1cmF0aW9uXzsgfQotICB2b2lkIHNldF9sYXN0X2ZyYW1lX2R1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgewotICAgIGxhc3RfZnJhbWVfZHVyYXRpb25fID0gZHVyYXRpb247Ci0gIH0KLQotICAvLyBHZXRzIHxoaWdoZXN0X3ByZXNlbnRhdGlvbl90aW1lc3RhbXBffC4KLSAgYmFzZTo6VGltZURlbHRhIGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcCgpIGNvbnN0IHsKLSAgICByZXR1cm4gaGlnaGVzdF9wcmVzZW50YXRpb25fdGltZXN0YW1wXzsKLSAgfQotCi0gIC8vIEdldC9zZXQgfG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnRffC4KLSAgYm9vbCBuZWVkc19yYW5kb21fYWNjZXNzX3BvaW50KCkgY29uc3QgeyByZXR1cm4gbmVlZHNfcmFuZG9tX2FjY2Vzc19wb2ludF87IH0KLSAgdm9pZCBzZXRfbmVlZHNfcmFuZG9tX2FjY2Vzc19wb2ludChib29sIG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnQpIHsKLSAgICBuZWVkc19yYW5kb21fYWNjZXNzX3BvaW50XyA9IG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnQ7Ci0gIH0KLQotICAvLyBHZXRzIGEgcG9pbnRlciB0byB0aGlzIHRyYWNrJ3MgQ2h1bmtEZW11eGVyU3RyZWFtLgotICBDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIHN0cmVhbV87IH0KLQotICAvLyBVbnNldHMgfGxhc3RfZGVjb2RlX3RpbWVzdGFtcF98LCB1bnNldHMgfGxhc3RfZnJhbWVfZHVyYXRpb25ffCwKLSAgLy8gdW5zZXRzIHxoaWdoZXN0X3ByZXNlbnRhdGlvbl90aW1lc3RhbXBffCwgYW5kIHNldHMKLSAgLy8gfG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnRffCB0byB0cnVlLgotICB2b2lkIFJlc2V0KCk7Ci0KLSAgLy8gSWYgfGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF98IGlzIHVuc2V0IG9yIHx0aW1lc3RhbXB8IGlzIGdyZWF0ZXIKLSAgLy8gdGhhbiB8aGlnaGVzdF9wcmVzZW50YXRpb25fdGltZXN0YW1wX3wsIHNldHMKLSAgLy8gfGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF98IHRvIHx0aW1lc3RhbXB8LiBOb3RlIHRoYXQgYmlkaXJlY3Rpb25hbAotICAvLyBwcmVkaWN0aW9uIGJldHdlZW4gY29kZWQgZnJhbWVzIGNhbiBjYXVzZSB8dGltZXN0YW1wfCB0byBub3QgYmUKLSAgLy8gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGV2ZW4gdGhvdWdoIHRoZSBkZWNvZGUgdGltZXN0YW1wcyBhcmUKLSAgLy8gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLgotICB2b2lkIFNldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXBJZkluY3JlYXNlZChiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wKTsKLQotICAvLyBBZGRzIHxmcmFtZXwgdG8gdGhlIGVuZCBvZiB8cHJvY2Vzc2VkX2ZyYW1lc198LgotICB2b2lkIEVucXVldWVQcm9jZXNzZWRGcmFtZShjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGZyYW1lKTsKLQotICAvLyBBcHBlbmRzIHxwcm9jZXNzZWRfZnJhbWVzX3wsIGlmIG5vdCBlbXB0eSwgdG8gfHN0cmVhbV98IGFuZCBjbGVhcnMKLSAgLy8gfHByb2Nlc3NlZF9mcmFtZXNffC4gUmV0dXJucyBmYWxzZSBpZiBhcHBlbmQgZmFpbGVkLCB0cnVlIG90aGVyd2lzZS4KLSAgLy8gfHByb2Nlc3NlZF9mcmFtZXNffCBpcyBjbGVhcmVkIGluIGJvdGggY2FzZXMuCi0gIGJvb2wgRmx1c2hQcm9jZXNzZWRGcmFtZXMoKTsKLQotIHByaXZhdGU6Ci0gIC8vIFRoZSBkZWNvZGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGNvZGVkIGZyYW1lIGFwcGVuZGVkIGluIHRoZSBjdXJyZW50IGNvZGVkCi0gIC8vIGZyYW1lIGdyb3VwLiBJbml0aWFsbHkga05vVGltZXN0YW1wLCBtZWFuaW5nICJ1bnNldCIuCi0gIERlY29kZVRpbWVzdGFtcCBsYXN0X2RlY29kZV90aW1lc3RhbXBfOwotCi0gIC8vIFRoZSBjb2RlZCBmcmFtZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBjb2RlZCBmcmFtZSBhcHBlbmRlZCBpbiB0aGUgY3VycmVudAotICAvLyBjb2RlZCBmcmFtZSBncm91cC4gSW5pdGlhbGx5IGtOb1RpbWVzdGFtcCwgbWVhbmluZyAidW5zZXQiLgotICBiYXNlOjpUaW1lRGVsdGEgbGFzdF9mcmFtZV9kdXJhdGlvbl87Ci0KLSAgLy8gVGhlIGhpZ2hlc3QgcHJlc2VudGF0aW9uIHRpbWVzdGFtcCBlbmNvdW50ZXJlZCBpbiBhIGNvZGVkIGZyYW1lIGFwcGVuZGVkCi0gIC8vIGluIHRoZSBjdXJyZW50IGNvZGVkIGZyYW1lIGdyb3VwLiBJbml0aWFsbHkga05vVGltZXN0YW1wLCBtZWFuaW5nCi0gIC8vICJ1bnNldCIuCi0gIGJhc2U6OlRpbWVEZWx0YSBoaWdoZXN0X3ByZXNlbnRhdGlvbl90aW1lc3RhbXBfOwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIHRyYWNrIGJ1ZmZlciBpcyB3YWl0aW5nIGZvciBhIHJhbmRvbSBhY2Nlc3MKLSAgLy8gcG9pbnQgY29kZWQgZnJhbWUuIEluaXRpYWxseSBzZXQgdG8gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IGEgcmFuZG9tIGFjY2VzcwotICAvLyBwb2ludCBjb2RlZCBmcmFtZSBpcyBuZWVkZWQgYmVmb3JlIGFueXRoaW5nIGNhbiBiZSBhZGRlZCB0byB0aGUgdHJhY2sKLSAgLy8gYnVmZmVyLgotICBib29sIG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnRfOwotCi0gIC8vIFBvaW50ZXIgdG8gdGhlIHN0cmVhbSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFjay4gVGhlIHN0cmVhbSBpcyBub3Qgb3duZWQKLSAgLy8gYnkgfHRoaXN8LgotICBDaHVua0RlbXV4ZXJTdHJlYW0qIGNvbnN0IHN0cmVhbV87Ci0KLSAgLy8gUXVldWUgb2YgcHJvY2Vzc2VkIGZyYW1lcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGFwcGVuZGVkIHRvIHxzdHJlYW1ffC4KLSAgLy8gRW5xdWV1ZVByb2Nlc3NlZEZyYW1lKCkgYWRkcyB0byB0aGlzIHF1ZXVlLCBhbmQgRmx1c2hQcm9jZXNzZWRGcmFtZXMoKQotICAvLyBjbGVhcnMgaXQuCi0gIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgcHJvY2Vzc2VkX2ZyYW1lc187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1zZVRyYWNrQnVmZmVyKTsKLX07Ci0KLU1zZVRyYWNrQnVmZmVyOjpNc2VUcmFja0J1ZmZlcihDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSkKLSAgICA6IGxhc3RfZGVjb2RlX3RpbWVzdGFtcF8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgbGFzdF9mcmFtZV9kdXJhdGlvbl8oa05vVGltZXN0YW1wKSwKLSAgICAgIGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF8oa05vVGltZXN0YW1wKSwKLSAgICAgIG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnRfKHRydWUpLAotICAgICAgc3RyZWFtXyhzdHJlYW0pIHsKLSAgRENIRUNLKHN0cmVhbV8pOwotfQotCi1Nc2VUcmFja0J1ZmZlcjo6fk1zZVRyYWNrQnVmZmVyKCkgeyBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiKCkiOyB9Ci0KLXZvaWQgTXNlVHJhY2tCdWZmZXI6OlJlc2V0KCkgewotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiKCkiOwotCi0gIGxhc3RfZGVjb2RlX3RpbWVzdGFtcF8gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgbGFzdF9mcmFtZV9kdXJhdGlvbl8gPSBrTm9UaW1lc3RhbXA7Ci0gIGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF8gPSBrTm9UaW1lc3RhbXA7Ci0gIG5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnRfID0gdHJ1ZTsKLX0KLQotdm9pZCBNc2VUcmFja0J1ZmZlcjo6U2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcElmSW5jcmVhc2VkKAotICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIHsKLSAgaWYgKGhpZ2hlc3RfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF8gPT0ga05vVGltZXN0YW1wIHx8Ci0gICAgICB0aW1lc3RhbXAgPiBoaWdoZXN0X3ByZXNlbnRhdGlvbl90aW1lc3RhbXBfKSB7Ci0gICAgaGlnaGVzdF9wcmVzZW50YXRpb25fdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKLSAgfQotfQotCi12b2lkIE1zZVRyYWNrQnVmZmVyOjpFbnF1ZXVlUHJvY2Vzc2VkRnJhbWUoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBmcmFtZSkgewotICBwcm9jZXNzZWRfZnJhbWVzXy5wdXNoX2JhY2soZnJhbWUpOwotfQotCi1ib29sIE1zZVRyYWNrQnVmZmVyOjpGbHVzaFByb2Nlc3NlZEZyYW1lcygpIHsKLSAgaWYgKHByb2Nlc3NlZF9mcmFtZXNfLmVtcHR5KCkpIHJldHVybiB0cnVlOwotCi0gIGJvb2wgcmVzdWx0ID0gc3RyZWFtXy0+QXBwZW5kKHByb2Nlc3NlZF9mcmFtZXNfKTsKLSAgcHJvY2Vzc2VkX2ZyYW1lc18uY2xlYXIoKTsKLQotICBEVkxPR19JRigzLCAhcmVzdWx0KSA8PCBfX2Z1bmNfXwotICAgICAgICAgICAgICAgICAgICAgICA8PCAiKCk6IEZhaWx1cmUgYXBwZW5kaW5nIHByb2Nlc3NlZCBmcmFtZXMgdG8gc3RyZWFtIjsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1GcmFtZVByb2Nlc3Nvcjo6RnJhbWVQcm9jZXNzb3IoY29uc3QgVXBkYXRlRHVyYXRpb25DQiYgdXBkYXRlX2R1cmF0aW9uX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpCi0gICAgOiBzZXF1ZW5jZV9tb2RlXyhmYWxzZSksCi0gICAgICBjb2RlZF9mcmFtZV9ncm91cF9sYXN0X2R0c18oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgZ3JvdXBfc3RhcnRfdGltZXN0YW1wXyhrTm9UaW1lc3RhbXApLAotICAgICAgdXBkYXRlX2R1cmF0aW9uX2NiXyh1cGRhdGVfZHVyYXRpb25fY2IpLAotICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAotICAgICAgbnVtX2Ryb3BwZWRfcHJlcm9sbF93YXJuaW5nc18oMCksCi0gICAgICBudW1fZHRzX2JleW9uZF9wdHNfd2FybmluZ3NfKDApIHsKLSAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIigpIjsKLSAgRENIRUNLKCF1cGRhdGVfZHVyYXRpb25fY2IuaXNfbnVsbCgpKTsKLX0KLQotRnJhbWVQcm9jZXNzb3I6On5GcmFtZVByb2Nlc3NvcigpIHsgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIigpIjsgfQotCi12b2lkIEZyYW1lUHJvY2Vzc29yOjpTZXRTZXF1ZW5jZU1vZGUoYm9vbCBzZXF1ZW5jZV9tb2RlKSB7Ci0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIoIiA8PCBzZXF1ZW5jZV9tb2RlIDw8ICIpIjsKLSAgLy8gUGVyIEp1bmUgOSwgMjAxNiBNU0Ugc3BlYyBlZGl0b3IncyBkcmFmdDoKLSAgLy8gaHR0cHM6Ly9yYXdnaXQuY29tL3czYy9tZWRpYS1zb3VyY2UvZDhmOTAxZjIyLwotICAvLyAgICAgaW5kZXguaHRtbCN3aWRsLVNvdXJjZUJ1ZmZlci1tb2RlCi0gIC8vIFN0ZXAgNzogSWYgdGhlIG5ldyBtb2RlIGVxdWFscyAic2VxdWVuY2UiLCB0aGVuIHNldCB0aGUgZ3JvdXAgc3RhcnQKLSAgLy8gdGltZXN0YW1wIHRvIHRoZSBncm91cCBlbmQgdGltZXN0YW1wLgotICBpZiAoc2VxdWVuY2VfbW9kZSkgewotICAgIERDSEVDSyhrTm9UaW1lc3RhbXAgIT0gZ3JvdXBfZW5kX3RpbWVzdGFtcF8pOwotICAgIGdyb3VwX3N0YXJ0X3RpbWVzdGFtcF8gPSBncm91cF9lbmRfdGltZXN0YW1wXzsKLSAgfSBlbHNlIGlmIChzZXF1ZW5jZV9tb2RlXykgewotICAgIC8vIFdlJ3JlIHN3aXRjaGluZyBmcm9tICdzZXF1ZW5jZScgdG8gJ3NlZ21lbnRzJyBtb2RlLiBCZSBzYWZlIGFuZCBzaWduYWwgYQotICAgIC8vIG5ldyBjb2RlZCBmcmFtZSBncm91cCBvbiB0aGUgbmV4dCBmcmFtZSBlbWl0dGVkLgotICAgIGNvZGVkX2ZyYW1lX2dyb3VwX2xhc3RfZHRzXyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotICB9Ci0KLSAgLy8gU3RlcCA4OiBVcGRhdGUgdGhlIGF0dHJpYnV0ZSB0byBuZXcgbW9kZS4KLSAgc2VxdWVuY2VfbW9kZV8gPSBzZXF1ZW5jZV9tb2RlOwotfQotCi1ib29sIEZyYW1lUHJvY2Vzc29yOjpQcm9jZXNzRnJhbWVzKAotICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAmIGJ1ZmZlcl9xdWV1ZV9tYXAsCi0gICAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnQsIGJhc2U6OlRpbWVEZWx0YSBhcHBlbmRfd2luZG93X2VuZCwKLSAgICBiYXNlOjpUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpIHsKLSAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSBmcmFtZXM7Ci0gIGlmICghTWVyZ2VCdWZmZXJRdWV1ZXMoYnVmZmVyX3F1ZXVlX21hcCwgJmZyYW1lcykpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJQYXJzZWQgYnVmZmVycyBub3QgaW4gRFRTIHNlcXVlbmNlIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBEQ0hFQ0soIWZyYW1lcy5lbXB0eSgpKTsKLQotICAvLyBJbXBsZW1lbnRzIHRoZSBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSdzIG91dGVyIGxvb3AgZm9yIHN0ZXAgMS4KLSAgLy8gTm90ZSB0aGF0IFByb2Nlc3NGcmFtZSgpIGltcGxlbWVudHMgYW4gaW5uZXIgbG9vcCBmb3IgYSBzaW5nbGUgZnJhbWUgdGhhdAotICAvLyBoYW5kbGVzICJqdW1wIHRvIHRoZSBMb29wIFRvcCBzdGVwIHRvIHJlc3RhcnQgcHJvY2Vzc2luZyBvZiB0aGUgY3VycmVudAotICAvLyBjb2RlZCBmcmFtZSIgcGVyIEp1bmUgOSwgMjAxNiBNU0Ugc3BlYyBlZGl0b3IncyBkcmFmdDoKLSAgLy8gaHR0cHM6Ly9yYXdnaXQuY29tL3czYy9tZWRpYS1zb3VyY2UvZDhmOTAxZjIyLwotICAvLyAgICAgaW5kZXguaHRtbCNzb3VyY2VidWZmZXItY29kZWQtZnJhbWUtcHJvY2Vzc2luZwotICAvLyAxLiBGb3IgZWFjaCBjb2RlZCBmcmFtZSBpbiB0aGUgbWVkaWEgc2VnbWVudCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgZm9yIChTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlOjpjb25zdF9pdGVyYXRvciBmcmFtZXNfaXRyID0gZnJhbWVzLmJlZ2luKCk7Ci0gICAgICAgZnJhbWVzX2l0ciAhPSBmcmFtZXMuZW5kKCk7ICsrZnJhbWVzX2l0cikgewotICAgIGlmICghUHJvY2Vzc0ZyYW1lKCpmcmFtZXNfaXRyLCBhcHBlbmRfd2luZG93X3N0YXJ0LCBhcHBlbmRfd2luZG93X2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfb2Zmc2V0KSkgewotICAgICAgRmx1c2hQcm9jZXNzZWRGcmFtZXMoKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpZiAoIUZsdXNoUHJvY2Vzc2VkRnJhbWVzKCkpIHJldHVybiBmYWxzZTsKLQotICAvLyAyLiAtIDQuIEFyZSBoYW5kbGVkIGJ5IHRoZSBXZWJNZWRpYVBsYXllciAvIFBpcGVsaW5lIC8gTWVkaWEgRWxlbWVudC4KLQotICAvLyA1LiBJZiB0aGUgbWVkaWEgc2VnbWVudCBjb250YWlucyBkYXRhIGJleW9uZCB0aGUgY3VycmVudCBkdXJhdGlvbiwgdGhlbiBydW4KLSAgLy8gICAgdGhlIGR1cmF0aW9uIGNoYW5nZSBhbGdvcml0aG0gd2l0aCBuZXcgZHVyYXRpb24gc2V0IHRvIHRoZSBtYXhpbXVtIG9mCi0gIC8vICAgIHRoZSBjdXJyZW50IGR1cmF0aW9uIGFuZCB0aGUgZ3JvdXAgZW5kIHRpbWVzdGFtcC4KLSAgdXBkYXRlX2R1cmF0aW9uX2NiXy5SdW4oZ3JvdXBfZW5kX3RpbWVzdGFtcF8pOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZyYW1lUHJvY2Vzc29yOjpTZXRHcm91cFN0YXJ0VGltZXN0YW1wSWZJblNlcXVlbmNlTW9kZSgKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wX29mZnNldCkgewotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiKCIgPDwgdGltZXN0YW1wX29mZnNldC5JblNlY29uZHNGKCkgPDwgIikiOwotICBEQ0hFQ0soa05vVGltZXN0YW1wICE9IHRpbWVzdGFtcF9vZmZzZXQpOwotICBpZiAoc2VxdWVuY2VfbW9kZV8pIGdyb3VwX3N0YXJ0X3RpbWVzdGFtcF8gPSB0aW1lc3RhbXBfb2Zmc2V0OwotCi0gIC8vIENoYW5nZXMgdG8gdGltZXN0YW1wT2Zmc2V0IHNob3VsZCBpbnZhbGlkYXRlIHRoZSBwcmVyb2xsIGJ1ZmZlci4KLSAgYXVkaW9fcHJlcm9sbF9idWZmZXJfID0gTlVMTDsKLX0KLQotYm9vbCBGcmFtZVByb2Nlc3Nvcjo6QWRkVHJhY2soU3RyZWFtUGFyc2VyOjpUcmFja0lkIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2h1bmtEZW11eGVyU3RyZWFtKiBzdHJlYW0pIHsKLSAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIigpOiBpZD0iIDw8IGlkOwotCi0gIE1zZVRyYWNrQnVmZmVyKiBleGlzdGluZ190cmFjayA9IEZpbmRUcmFjayhpZCk7Ci0gIERDSEVDSyghZXhpc3RpbmdfdHJhY2spOwotICBpZiAoZXhpc3RpbmdfdHJhY2spIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJGYWlsdXJlIGFkZGluZyB0cmFjayB3aXRoIGR1cGxpY2F0ZSBJRCAiIDw8IGlkOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHRyYWNrX2J1ZmZlcnNfW2lkXSA9IG5ldyBNc2VUcmFja0J1ZmZlcihzdHJlYW0pOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGcmFtZVByb2Nlc3Nvcjo6VXBkYXRlVHJhY2tJZHMoY29uc3QgVHJhY2tJZENoYW5nZXMmIHRyYWNrX2lkX2NoYW5nZXMpIHsKLSAgVHJhY2tCdWZmZXJzTWFwJiBvbGRfdHJhY2tfYnVmZmVycyA9IHRyYWNrX2J1ZmZlcnNfOwotICBUcmFja0J1ZmZlcnNNYXAgbmV3X3RyYWNrX2J1ZmZlcnM7Ci0KLSAgZm9yIChUcmFja0lkQ2hhbmdlczo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRyYWNrX2lkX2NoYW5nZXMuYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IHRyYWNrX2lkX2NoYW5nZXMuZW5kKCk7ICsraXRlcikgewotICAgIGlmIChvbGRfdHJhY2tfYnVmZmVycy5maW5kKGl0ZXItPmZpcnN0KSA9PSBvbGRfdHJhY2tfYnVmZmVycy5lbmQoKSB8fAotICAgICAgICBuZXdfdHJhY2tfYnVmZmVycy5maW5kKGl0ZXItPnNlY29uZCkgIT0gbmV3X3RyYWNrX2J1ZmZlcnMuZW5kKCkpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkZhaWx1cmUgdXBkYXRpbmcgdHJhY2sgaWQgZnJvbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGl0ZXItPmZpcnN0IDw8ICIgdG8gIiA8PCBpdGVyLT5zZWNvbmQ7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG5ld190cmFja19idWZmZXJzW2l0ZXItPnNlY29uZF0gPSBvbGRfdHJhY2tfYnVmZmVyc1tpdGVyLT5maXJzdF07Ci0gICAgQ0hFQ0tfRVEoMXUsIG9sZF90cmFja19idWZmZXJzLmVyYXNlKGl0ZXItPmZpcnN0KSk7Ci0gIH0KLQotICAvLyBQcm9jZXNzIHJlbWFpbmluZyB0cmFjayBidWZmZXJzIHdpdGggdW5jaGFuZ2VkIGlkcy4KLSAgZm9yIChUcmFja0J1ZmZlcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBvbGRfdHJhY2tfYnVmZmVycy5iZWdpbigpOwotICAgICAgIGl0ZXIgIT0gb2xkX3RyYWNrX2J1ZmZlcnMuZW5kKCk7ICsraXRlcikgewotICAgIGlmIChuZXdfdHJhY2tfYnVmZmVycy5maW5kKGl0ZXItPmZpcnN0KSAhPSBuZXdfdHJhY2tfYnVmZmVycy5lbmQoKSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiVHJhY2sgaWQgIiA8PCBpdGVyLT5maXJzdCA8PCAiIGNvbmZsaWN0IjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbmV3X3RyYWNrX2J1ZmZlcnNbaXRlci0+Zmlyc3RdID0gb2xkX3RyYWNrX2J1ZmZlcnNbaXRlci0+Zmlyc3RdOwotICB9Ci0KLSAgc3RkOjpzd2FwKHRyYWNrX2J1ZmZlcnNfLCBuZXdfdHJhY2tfYnVmZmVycyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEZyYW1lUHJvY2Vzc29yOjpTZXRBbGxUcmFja0J1ZmZlcnNOZWVkUmFuZG9tQWNjZXNzUG9pbnQoKSB7Ci0gIGZvciAoVHJhY2tCdWZmZXJzTWFwOjppdGVyYXRvciBpdHIgPSB0cmFja19idWZmZXJzXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSB0cmFja19idWZmZXJzXy5lbmQoKTsgKytpdHIpIHsKLSAgICBpdHItPnNlY29uZC0+c2V0X25lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnQodHJ1ZSk7Ci0gIH0KLX0KLQotdm9pZCBGcmFtZVByb2Nlc3Nvcjo6UmVzZXQoKSB7Ci0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIoKSI7Ci0gIGZvciAoVHJhY2tCdWZmZXJzTWFwOjppdGVyYXRvciBpdHIgPSB0cmFja19idWZmZXJzXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSB0cmFja19idWZmZXJzXy5lbmQoKTsgKytpdHIpIHsKLSAgICBpdHItPnNlY29uZC0+UmVzZXQoKTsKLSAgfQotCi0gIC8vIE1haW50YWluIGN1cnJlbnQgfGNvZGVkX2ZyYW1lX2dyb3VwX2xhc3RfZHRzX3wgc3RhdGUgZm9yIFJlc2V0KCkgZHVyaW5nCi0gIC8vIHNlcXVlbmNlIG1vZGUuIFJlc2V0IGl0IGhlcmUgb25seSBpZiBpbiBzZWdtZW50cyBtb2RlLiBJbiBzZXF1ZW5jZSBtb2RlLAotICAvLyB0aGUgY3VycmVudCBjb2RlZCBmcmFtZSBncm91cCBtYXkgYmUgY29udGludWVkIGFjcm9zcyBSZXNldCgpIG9wZXJhdGlvbnMgdG8KLSAgLy8gYWxsb3cgdGhlIHN0cmVhbSB0byBjb2FsZXNjZSB3aGF0IG1pZ2h0IG90aGVyd2lzZSBiZSBnYXBzIGluIHRoZSBidWZmZXJlZAotICAvLyByYW5nZXMuIFNlZSBhbHNvIHRoZSBkZWNsYXJhdGlvbiBmb3IgfGNvZGVkX2ZyYW1lX2dyb3VwX2xhc3RfZHRzX3wuCi0gIGlmICghc2VxdWVuY2VfbW9kZV8pIHsKLSAgICBjb2RlZF9mcmFtZV9ncm91cF9sYXN0X2R0c18gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBTZXF1ZW5jZSBtb2RlCi0gIERDSEVDSyhrTm9UaW1lc3RhbXAgIT0gZ3JvdXBfZW5kX3RpbWVzdGFtcF8pOwotICBncm91cF9zdGFydF90aW1lc3RhbXBfID0gZ3JvdXBfZW5kX3RpbWVzdGFtcF87Ci19Ci0KLXZvaWQgRnJhbWVQcm9jZXNzb3I6Ok9uUG9zc2libGVBdWRpb0NvbmZpZ1VwZGF0ZSgKLSAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGNvbmZpZykgewotICBEQ0hFQ0soY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0KLSAgLy8gQWx3YXlzIGNsZWFyIHRoZSBwcmVyb2xsIGJ1ZmZlciB3aGVuIGEgY29uZmlnIHVwZGF0ZSBpcyByZWNlaXZlZC4KLSAgYXVkaW9fcHJlcm9sbF9idWZmZXJfID0gTlVMTDsKLQotICBpZiAoY29uZmlnLk1hdGNoZXMoY3VycmVudF9hdWRpb19jb25maWdfKSkgcmV0dXJuOwotCi0gIGN1cnJlbnRfYXVkaW9fY29uZmlnXyA9IGNvbmZpZzsKLSAgc2FtcGxlX2R1cmF0aW9uXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHNEKAotICAgICAgMS4wIC8gY3VycmVudF9hdWRpb19jb25maWdfLnNhbXBsZXNfcGVyX3NlY29uZCgpKTsKLX0KLQotTXNlVHJhY2tCdWZmZXIqIEZyYW1lUHJvY2Vzc29yOjpGaW5kVHJhY2soU3RyZWFtUGFyc2VyOjpUcmFja0lkIGlkKSB7Ci0gIFRyYWNrQnVmZmVyc01hcDo6aXRlcmF0b3IgaXRyID0gdHJhY2tfYnVmZmVyc18uZmluZChpZCk7Ci0gIGlmIChpdHIgPT0gdHJhY2tfYnVmZmVyc18uZW5kKCkpIHJldHVybiBOVUxMOwotCi0gIHJldHVybiBpdHItPnNlY29uZC5nZXQoKTsKLX0KLQotdm9pZCBGcmFtZVByb2Nlc3Nvcjo6Tm90aWZ5U3RhcnRPZkNvZGVkRnJhbWVHcm91cCgKLSAgICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wKSB7Ci0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIoIiA8PCBzdGFydF90aW1lc3RhbXAuSW5TZWNvbmRzRigpIDw8ICIpIjsKLQotICBmb3IgKFRyYWNrQnVmZmVyc01hcDo6aXRlcmF0b3IgaXRyID0gdHJhY2tfYnVmZmVyc18uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gdHJhY2tfYnVmZmVyc18uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQtPnN0cmVhbSgpLT5PblN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoc3RhcnRfdGltZXN0YW1wKTsKLSAgfQotfQotCi1ib29sIEZyYW1lUHJvY2Vzc29yOjpGbHVzaFByb2Nlc3NlZEZyYW1lcygpIHsKLSAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIigpIjsKLQotICBib29sIHJlc3VsdCA9IHRydWU7Ci0gIGZvciAoVHJhY2tCdWZmZXJzTWFwOjppdGVyYXRvciBpdHIgPSB0cmFja19idWZmZXJzXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSB0cmFja19idWZmZXJzXy5lbmQoKTsgKytpdHIpIHsKLSAgICBpZiAoIWl0ci0+c2Vjb25kLT5GbHVzaFByb2Nlc3NlZEZyYW1lcygpKSByZXN1bHQgPSBmYWxzZTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRnJhbWVQcm9jZXNzb3I6OkhhbmRsZVBhcnRpYWxBcHBlbmRXaW5kb3dUcmltbWluZygKLSAgICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydCwgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgYnVmZmVyKSB7Ci0gIERDSEVDSyhidWZmZXItPmR1cmF0aW9uKCkgPj0gYmFzZTo6VGltZURlbHRhKCkpOwotICBEQ0hFQ0tfRVEoRGVtdXhlclN0cmVhbTo6QVVESU8sIGJ1ZmZlci0+dHlwZSgpKTsKLSAgRENIRUNLKGJ1ZmZlci0+aXNfa2V5X2ZyYW1lKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBmcmFtZV9lbmRfdGltZXN0YW1wID0KLSAgICAgIGJ1ZmZlci0+dGltZXN0YW1wKCkgKyBidWZmZXItPmR1cmF0aW9uKCk7Ci0KLSAgLy8gSWYgdGhlIGJ1ZmZlciBpcyBlbnRpcmVseSBiZWZvcmUgfGFwcGVuZF93aW5kb3dfc3RhcnR8LCBzYXZlIGl0IGFzIHByZXJvbGwKLSAgLy8gZm9yIHRoZSBmaXJzdCBidWZmZXIgd2hpY2ggb3ZlcmxhcHMgfGFwcGVuZF93aW5kb3dfc3RhcnR8LgotICBpZiAoYnVmZmVyLT50aW1lc3RhbXAoKSA8IGFwcGVuZF93aW5kb3dfc3RhcnQgJiYKLSAgICAgIGZyYW1lX2VuZF90aW1lc3RhbXAgPD0gYXBwZW5kX3dpbmRvd19zdGFydCkgewotICAgIGF1ZGlvX3ByZXJvbGxfYnVmZmVyXyA9IGJ1ZmZlcjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBJZiB0aGUgYnVmZmVyIGlzIGVudGlyZWx5IGFmdGVyIHxhcHBlbmRfd2luZG93X2VuZHwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgotICBpZiAoYnVmZmVyLT50aW1lc3RhbXAoKSA+PSBhcHBlbmRfd2luZG93X2VuZCkgcmV0dXJuIGZhbHNlOwotCi0gIERDSEVDSyhidWZmZXItPnRpbWVzdGFtcCgpID49IGFwcGVuZF93aW5kb3dfc3RhcnQgfHwKLSAgICAgICAgIGZyYW1lX2VuZF90aW1lc3RhbXAgPiBhcHBlbmRfd2luZG93X3N0YXJ0KTsKLQotICBib29sIHByb2Nlc3NlZF9idWZmZXIgPSBmYWxzZTsKLQotICAvLyBJZiB3ZSBoYXZlIGEgcHJlcm9sbCBidWZmZXIgc2VlIGlmIHdlIGNhbiBhdHRhY2ggaXQgdG8gdGhlIGZpcnN0IGJ1ZmZlcgotICAvLyBvdmVybGFwcGluZyBvciBhZnRlciB8YXBwZW5kX3dpbmRvd19zdGFydHwuCi0gIGlmIChhdWRpb19wcmVyb2xsX2J1ZmZlcl8uZ2V0KCkpIHsKLSAgICAvLyBXZSBvbmx5IHdhbnQgdG8gdXNlIHRoZSBwcmVyb2xsIGJ1ZmZlciBpZiBpdCBkaXJlY3RseSBwcmVjZWRlcyAobGVzcwotICAgIC8vIHRoYW4gb25lIHNhbXBsZSBhcGFydCkgdGhlIGN1cnJlbnQgYnVmZmVyLgotICAgIGNvbnN0IGludDY0X3QgZGVsdGEgPQotICAgICAgICAoYXVkaW9fcHJlcm9sbF9idWZmZXJfLT50aW1lc3RhbXAoKSArCi0gICAgICAgICBhdWRpb19wcmVyb2xsX2J1ZmZlcl8tPmR1cmF0aW9uKCkgLSBidWZmZXItPnRpbWVzdGFtcCgpKQotICAgICAgICAgICAgLkluTWljcm9zZWNvbmRzKCk7Ci0gICAgaWYgKHN0ZDo6YWJzKGRlbHRhKSA8IHNhbXBsZV9kdXJhdGlvbl8uSW5NaWNyb3NlY29uZHMoKSkgewotICAgICAgRFZMT0coMSkgPDwgIkF0dGFjaGluZyBhdWRpbyBwcmVyb2xsIGJ1ZmZlciBbIgotICAgICAgICAgICAgICAgPDwgYXVkaW9fcHJlcm9sbF9idWZmZXJfLT50aW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIiwgIgotICAgICAgICAgICAgICAgPDwgKGF1ZGlvX3ByZXJvbGxfYnVmZmVyXy0+dGltZXN0YW1wKCkgKwotICAgICAgICAgICAgICAgICAgIGF1ZGlvX3ByZXJvbGxfYnVmZmVyXy0+ZHVyYXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgICA8PCAiKSB0byAiIDw8IGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5TZWNvbmRzRigpOwotICAgICAgYnVmZmVyLT5TZXRQcmVyb2xsQnVmZmVyKGF1ZGlvX3ByZXJvbGxfYnVmZmVyXyk7Ci0gICAgICBwcm9jZXNzZWRfYnVmZmVyID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9kcm9wcGVkX3ByZXJvbGxfd2FybmluZ3NfLAotICAgICAgICAgICAgICAgICAgICAgICAga01heERyb3BwZWRQcmVyb2xsV2FybmluZ3MpCi0gICAgICAgICAgPDwgIlBhcnRpYWwgYXBwZW5kIHdpbmRvdyB0cmltbWluZyBkcm9wcGluZyB1bnVzZWQgYXVkaW8gcHJlcm9sbCAiCi0gICAgICAgICAgICAgImJ1ZmZlciB3aXRoIFBUUyAiCi0gICAgICAgICAgPDwgYXVkaW9fcHJlcm9sbF9idWZmZXJfLT50aW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgPDwgInVzIHRoYXQgZW5kcyB0b28gZmFyICgiIDw8IGRlbHRhCi0gICAgICAgICAgPDwgInVzKSBmcm9tIG5leHQgYnVmZmVyIHdpdGggUFRTICIKLSAgICAgICAgICA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkgPDwgInVzIjsKLSAgICB9Ci0gICAgYXVkaW9fcHJlcm9sbF9idWZmZXJfID0gTlVMTDsKLSAgfQotCi0gIC8vIFNlZSBpZiBhIHBhcnRpYWwgZGlzY2FyZCBjYW4gYmUgZG9uZSBhcm91bmQgfGFwcGVuZF93aW5kb3dfc3RhcnR8LgotICBpZiAoYnVmZmVyLT50aW1lc3RhbXAoKSA8IGFwcGVuZF93aW5kb3dfc3RhcnQpIHsKLSAgICBEVkxPRygxKSA8PCAiVHJ1bmNhdGluZyBidWZmZXIgd2hpY2ggb3ZlcmxhcHMgYXBwZW5kIHdpbmRvdyBzdGFydC4iCi0gICAgICAgICAgICAgPDwgIiBwcmVzZW50YXRpb25fdGltZXN0YW1wICIgPDwgYnVmZmVyLT50aW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgICA8PCAiIGZyYW1lX2VuZF90aW1lc3RhbXAgIiA8PCBmcmFtZV9lbmRfdGltZXN0YW1wLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgIDw8ICIgYXBwZW5kX3dpbmRvd19zdGFydCAiIDw8IGFwcGVuZF93aW5kb3dfc3RhcnQuSW5TZWNvbmRzRigpOwotCi0gICAgLy8gTWFyayB0aGUgb3ZlcmxhcHBpbmcgcG9ydGlvbiBvZiB0aGUgYnVmZmVyIGZvciBkaXNjYXJkLgotICAgIGJ1ZmZlci0+c2V0X2Rpc2NhcmRfcGFkZGluZyhzdGQ6Om1ha2VfcGFpcigKLSAgICAgICAgYXBwZW5kX3dpbmRvd19zdGFydCAtIGJ1ZmZlci0+dGltZXN0YW1wKCksIGJhc2U6OlRpbWVEZWx0YSgpKSk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIHRpbWVzdGFtcCBvZiB0aGlzIGJ1ZmZlciBmb3J3YXJkIHRvIHxhcHBlbmRfd2luZG93X3N0YXJ0fCBhbmQKLSAgICAvLyBkZWNyZWFzZSB0aGUgZHVyYXRpb24gdG8gY29tcGVuc2F0ZS4gQWRqdXN0IERUUyBieSB0aGUgc2FtZSBkZWx0YSBhcyBQVFMKLSAgICAvLyB0byBoZWxwIHByZXZlbnQgc3B1cmlvdXMgZGlzY29udGludWl0aWVzIHdoZW4gRFRTID4gUFRTLgotICAgIGJhc2U6OlRpbWVEZWx0YSBwdHNfZGVsdGEgPSBhcHBlbmRfd2luZG93X3N0YXJ0IC0gYnVmZmVyLT50aW1lc3RhbXAoKTsKLSAgICBidWZmZXItPnNldF90aW1lc3RhbXAoYXBwZW5kX3dpbmRvd19zdGFydCk7Ci0gICAgYnVmZmVyLT5TZXREZWNvZGVUaW1lc3RhbXAoYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKSArIHB0c19kZWx0YSk7Ci0gICAgYnVmZmVyLT5zZXRfZHVyYXRpb24oZnJhbWVfZW5kX3RpbWVzdGFtcCAtIGFwcGVuZF93aW5kb3dfc3RhcnQpOwotICAgIHByb2Nlc3NlZF9idWZmZXIgPSB0cnVlOwotICB9Ci0KLSAgLy8gU2VlIGlmIGEgcGFydGlhbCBkaXNjYXJkIGNhbiBiZSBkb25lIGFyb3VuZCB8YXBwZW5kX3dpbmRvd19lbmR8LgotICBpZiAoZnJhbWVfZW5kX3RpbWVzdGFtcCA+IGFwcGVuZF93aW5kb3dfZW5kKSB7Ci0gICAgRFZMT0coMSkgPDwgIlRydW5jYXRpbmcgYnVmZmVyIHdoaWNoIG92ZXJsYXBzIGFwcGVuZCB3aW5kb3cgZW5kLiIKLSAgICAgICAgICAgICA8PCAiIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgIiA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgIDw8ICIgZnJhbWVfZW5kX3RpbWVzdGFtcCAiIDw8IGZyYW1lX2VuZF90aW1lc3RhbXAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgPDwgIiBhcHBlbmRfd2luZG93X2VuZCAiIDw8IGFwcGVuZF93aW5kb3dfZW5kLkluU2Vjb25kc0YoKTsKLQotICAgIC8vIE1hcmsgdGhlIG92ZXJsYXBwaW5nIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBmb3IgZGlzY2FyZC4KLSAgICBidWZmZXItPnNldF9kaXNjYXJkX3BhZGRpbmcoCi0gICAgICAgIHN0ZDo6bWFrZV9wYWlyKGJ1ZmZlci0+ZGlzY2FyZF9wYWRkaW5nKCkuZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGZyYW1lX2VuZF90aW1lc3RhbXAgLSBhcHBlbmRfd2luZG93X2VuZCkpOwotCi0gICAgLy8gRGVjcmVhc2UgdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIgdG8gcmVtb3ZlIHRoZSBkaXNjYXJkZWQgcG9ydGlvbi4KLSAgICBidWZmZXItPnNldF9kdXJhdGlvbihhcHBlbmRfd2luZG93X2VuZCAtIGJ1ZmZlci0+dGltZXN0YW1wKCkpOwotICAgIHByb2Nlc3NlZF9idWZmZXIgPSB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIHByb2Nlc3NlZF9idWZmZXI7Ci19Ci0KLWJvb2wgRnJhbWVQcm9jZXNzb3I6OlByb2Nlc3NGcmFtZSgKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGZyYW1lLAotICAgIGJhc2U6OlRpbWVEZWx0YSBhcHBlbmRfd2luZG93X3N0YXJ0LCBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmQsCi0gICAgYmFzZTo6VGltZURlbHRhKiB0aW1lc3RhbXBfb2Zmc2V0KSB7Ci0gIC8vIEltcGxlbWVudHMgdGhlIGxvb3Agd2l0aGluIHN0ZXAgMSBvZiB0aGUgY29kZWQgZnJhbWUgcHJvY2Vzc2luZyBhbGdvcml0aG0KLSAgLy8gZm9yIGEgc2luZ2xlIGlucHV0IGZyYW1lIHBlciBKdW5lIDksIDIwMTYgTVNFIHNwZWMgZWRpdG9yJ3MgZHJhZnQ6Ci0gIC8vIGh0dHBzOi8vcmF3Z2l0LmNvbS93M2MvbWVkaWEtc291cmNlL2Q4ZjkwMWYyMi8KLSAgLy8gICAgIGluZGV4Lmh0bWwjc291cmNlYnVmZmVyLWNvZGVkLWZyYW1lLXByb2Nlc3NpbmcKLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyAxLiBMb29wIFRvcDoKLSAgICAvLyBPdGhlcndpc2UgY2FzZTogKFNlZSBTb3VyY2VCdWZmZXJTdGF0ZSdzIHxhdXRvX3VwZGF0ZV90aW1lc3RhbXBfb2Zmc2V0X3wsCi0gICAgLy8gdG9vKS4KLSAgICAvLyAxLjEuIExldCBwcmVzZW50YXRpb24gdGltZXN0YW1wIGJlIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludAotICAgIC8vICAgICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvZGVkIGZyYW1lJ3MgcHJlc2VudGF0aW9uIHRpbWVzdGFtcCBpbgotICAgIC8vICAgICAgc2Vjb25kcy4KLSAgICAvLyAxLjIuIExldCBkZWNvZGUgdGltZXN0YW1wIGJlIGEgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludAotICAgIC8vICAgICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvZGVkIGZyYW1lJ3MgZGVjb2RlIHRpbWVzdGFtcCBpbiBzZWNvbmRzLgotICAgIC8vIDIuIExldCBmcmFtZSBkdXJhdGlvbiBiZSBhIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb24KLSAgICAvLyAgICBvZiB0aGUgY29kZWQgZnJhbWUncyBkdXJhdGlvbiBpbiBzZWNvbmRzLgotICAgIC8vIFdlIHVzZSBiYXNlOjpUaW1lRGVsdGEgYW5kIERlY29kZVRpbWVzdGFtcCBpbnN0ZWFkIG9mIGRvdWJsZS4KLSAgICBiYXNlOjpUaW1lRGVsdGEgcHJlc2VudGF0aW9uX3RpbWVzdGFtcCA9IGZyYW1lLT50aW1lc3RhbXAoKTsKLSAgICBEZWNvZGVUaW1lc3RhbXAgZGVjb2RlX3RpbWVzdGFtcCA9IGZyYW1lLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZHVyYXRpb24gPSBmcmFtZS0+ZHVyYXRpb24oKTsKLQotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICI6IFByb2Nlc3NpbmcgZnJhbWUgVHlwZT0iIDw8IGZyYW1lLT50eXBlKCkKLSAgICAgICAgICAgICA8PCAiLCBUcmFja0lEPSIgPDwgZnJhbWUtPnRyYWNrX2lkKCkKLSAgICAgICAgICAgICA8PCAiLCBQVFM9IiA8PCBwcmVzZW50YXRpb25fdGltZXN0YW1wLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgIDw8ICIsIERUUz0iIDw8IGRlY29kZV90aW1lc3RhbXAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgPDwgIiwgRFVSPSIgPDwgZnJhbWVfZHVyYXRpb24uSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgPDwgIiwgUkFQPSIgPDwgZnJhbWUtPmlzX2tleV9mcmFtZSgpOwotCi0gICAgLy8gU2FuaXR5IGNoZWNrIHRoZSB0aW1lc3RhbXBzLgotICAgIGlmIChwcmVzZW50YXRpb25fdGltZXN0YW1wID09IGtOb1RpbWVzdGFtcCkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmtub3duIFBUUyBmb3IgIiA8PCBmcmFtZS0+R2V0VHlwZU5hbWUoKSA8PCAiIGZyYW1lIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRlY29kZV90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICA8PCAiVW5rbm93biBEVFMgZm9yICIgPDwgZnJhbWUtPkdldFR5cGVOYW1lKCkgPDwgIiBmcmFtZSI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkZWNvZGVfdGltZXN0YW1wLlRvUHJlc2VudGF0aW9uVGltZSgpID4gcHJlc2VudGF0aW9uX3RpbWVzdGFtcCkgewotICAgICAgLy8gVE9ETyh3b2xlbmV0eik6IERldGVybWluZSB3aGV0aGVyIERUUz5QVFMgc2hvdWxkIHJlYWxseSBiZSBhbGxvd2VkLiBTZWUKLSAgICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMzU0NTE4LgotICAgICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9kdHNfYmV5b25kX3B0c193YXJuaW5nc18sCi0gICAgICAgICAgICAgICAgICAgICAgICBrTWF4RHRzQmV5b25kUHRzV2FybmluZ3MpCi0gICAgICAgICAgPDwgIlBhcnNlZCAiIDw8IGZyYW1lLT5HZXRUeXBlTmFtZSgpIDw8ICIgZnJhbWUgaGFzIERUUyAiCi0gICAgICAgICAgPDwgZGVjb2RlX3RpbWVzdGFtcC5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgPDwgInVzLCB3aGljaCBpcyBhZnRlciB0aGUgZnJhbWUncyBQVFMgIgotICAgICAgICAgIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMiOwotICAgICAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIjogV0FSTklORzogRnJhbWUgRFRTKCIKLSAgICAgICAgICAgICAgIDw8IGRlY29kZV90aW1lc3RhbXAuSW5TZWNvbmRzRigpIDw8ICIpID4gUFRTKCIKLSAgICAgICAgICAgICAgIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgICA8PCAiKSwgZnJhbWUgdHlwZT0iIDw8IGZyYW1lLT5HZXRUeXBlTmFtZSgpOwotICAgIH0KLQotICAgIC8vIEFsbCBzdHJlYW0gcGFyc2VycyBtdXN0IGVtaXQgdmFsaWQgKG5vbi1uZWdhdGl2ZSkgZnJhbWUgZHVyYXRpb25zLgotICAgIC8vIE5vdGUgdGhhdCBkdXJhdGlvbiBvZiAwIGNhbiBvY2N1ciBmb3IgYXQgbGVhc3QgV2ViTSBhbHQtcmVmIGZyYW1lcy4KLSAgICBpZiAoZnJhbWVfZHVyYXRpb24gPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIlVua25vd24gZHVyYXRpb24gZm9yICIgPDwgZnJhbWUtPkdldFR5cGVOYW1lKCkgPDwgIiBmcmFtZSBhdCBQVFMgIgotICAgICAgICAgIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoZnJhbWVfZHVyYXRpb24gPCBiYXNlOjpUaW1lRGVsdGEoKSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJOZWdhdGl2ZSBkdXJhdGlvbiAiIDw8IGZyYW1lX2R1cmF0aW9uLkluTWljcm9zZWNvbmRzKCkKLSAgICAgICAgICA8PCAidXMgZm9yICIgPDwgZnJhbWUtPkdldFR5cGVOYW1lKCkgPDwgIiBmcmFtZSBhdCBQVFMgIgotICAgICAgICAgIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIDMuIElmIG1vZGUgZXF1YWxzICJzZXF1ZW5jZSIgYW5kIGdyb3VwIHN0YXJ0IHRpbWVzdGFtcCBpcyBzZXQsIHRoZW4gcnVuCi0gICAgLy8gICAgdGhlIGZvbGxvd2luZyBzdGVwczoKLSAgICBpZiAoc2VxdWVuY2VfbW9kZV8gJiYgZ3JvdXBfc3RhcnRfdGltZXN0YW1wXyAhPSBrTm9UaW1lc3RhbXApIHsKLSAgICAgIC8vIDMuMS4gU2V0IHRpbWVzdGFtcE9mZnNldCBlcXVhbCB0byBncm91cCBzdGFydCB0aW1lc3RhbXAgLQotICAgICAgLy8gICAgICBwcmVzZW50YXRpb24gdGltZXN0YW1wLgotICAgICAgKnRpbWVzdGFtcF9vZmZzZXQgPSBncm91cF9zdGFydF90aW1lc3RhbXBfIC0gcHJlc2VudGF0aW9uX3RpbWVzdGFtcDsKLQotICAgICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIjogdXBkYXRlZCB0aW1lc3RhbXBPZmZzZXQgaXMgbm93ICIKLSAgICAgICAgICAgICAgIDw8IHRpbWVzdGFtcF9vZmZzZXQtPkluU2Vjb25kc0YoKTsKLQotICAgICAgLy8gMy4yLiBTZXQgZ3JvdXAgZW5kIHRpbWVzdGFtcCBlcXVhbCB0byBncm91cCBzdGFydCB0aW1lc3RhbXAuCi0gICAgICBncm91cF9lbmRfdGltZXN0YW1wXyA9IGdyb3VwX3N0YXJ0X3RpbWVzdGFtcF87Ci0KLSAgICAgIC8vIDMuMy4gU2V0IHRoZSBuZWVkIHJhbmRvbSBhY2Nlc3MgcG9pbnQgZmxhZyBvbiBhbGwgdHJhY2sgYnVmZmVycyB0bwotICAgICAgLy8gICAgICB0cnVlLgotICAgICAgU2V0QWxsVHJhY2tCdWZmZXJzTmVlZFJhbmRvbUFjY2Vzc1BvaW50KCk7Ci0KLSAgICAgIC8vIDMuNC4gVW5zZXQgZ3JvdXAgc3RhcnQgdGltZXN0YW1wLgotICAgICAgZ3JvdXBfc3RhcnRfdGltZXN0YW1wXyA9IGtOb1RpbWVzdGFtcDsKLSAgICB9Ci0KLSAgICAvLyA0LiBJZiB0aW1lc3RhbXBPZmZzZXQgaXMgbm90IDAsIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgaWYgKCF0aW1lc3RhbXBfb2Zmc2V0LT5pc196ZXJvKCkpIHsKLSAgICAgIC8vIDQuMS4gQWRkIHRpbWVzdGFtcE9mZnNldCB0byB0aGUgcHJlc2VudGF0aW9uIHRpbWVzdGFtcC4KLSAgICAgIC8vIE5vdGU6IHxmcmFtZXwgUFRTIGlzIG9ubHkgdXBkYXRlZCBpZiBpdCBzdXJ2aXZlcyBkaXNjb250aW51aXR5Ci0gICAgICAvLyBwcm9jZXNzaW5nLgotICAgICAgcHJlc2VudGF0aW9uX3RpbWVzdGFtcCArPSAqdGltZXN0YW1wX29mZnNldDsKLQotICAgICAgLy8gNC4yLiBBZGQgdGltZXN0YW1wT2Zmc2V0IHRvIHRoZSBkZWNvZGUgdGltZXN0YW1wLgotICAgICAgLy8gRnJhbWUgRFRTIGlzIG9ubHkgdXBkYXRlZCBpZiBpdCBzdXJ2aXZlcyBkaXNjb250aW51aXR5IHByb2Nlc3NpbmcuCi0gICAgICBkZWNvZGVfdGltZXN0YW1wICs9ICp0aW1lc3RhbXBfb2Zmc2V0OwotICAgIH0KLQotICAgIC8vIDUuIExldCB0cmFjayBidWZmZXIgZXF1YWwgdGhlIHRyYWNrIGJ1ZmZlciB0aGF0IHRoZSBjb2RlZCBmcmFtZSB3aWxsIGJlCi0gICAgLy8gICAgYWRkZWQgdG8uCi0gICAgU3RyZWFtUGFyc2VyOjpUcmFja0lkIHRyYWNrX2lkID0gZnJhbWUtPnRyYWNrX2lkKCk7Ci0gICAgTXNlVHJhY2tCdWZmZXIqIHRyYWNrX2J1ZmZlciA9IEZpbmRUcmFjayh0cmFja19pZCk7Ci0gICAgaWYgKCF0cmFja19idWZmZXIpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICA8PCAiVW5rbm93biB0cmFjayB3aXRoIHR5cGUgIiA8PCBmcmFtZS0+R2V0VHlwZU5hbWUoKQotICAgICAgICAgIDw8ICIsIGZyYW1lIHByb2Nlc3NvciB0cmFjayBpZCAiIDw8IHRyYWNrX2lkCi0gICAgICAgICAgPDwgIiwgYW5kIHBhcnNlciB0cmFjayBpZCAiIDw8IGZyYW1lLT50cmFja19pZCgpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoZnJhbWUtPnR5cGUoKSAhPSB0cmFja19idWZmZXItPnN0cmVhbSgpLT50eXBlKCkpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkZyYW1lIHR5cGUgIiA8PCBmcmFtZS0+R2V0VHlwZU5hbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGRvZXNuJ3QgbWF0Y2ggdHJhY2sgYnVmZmVyIHR5cGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB0cmFja19idWZmZXItPnN0cmVhbSgpLT50eXBlKCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gNi4gSWYgbGFzdCBkZWNvZGUgdGltZXN0YW1wIGZvciB0cmFjayBidWZmZXIgaXMgc2V0IGFuZCBkZWNvZGUgdGltZXN0YW1wCi0gICAgLy8gICAgaXMgbGVzcyB0aGFuIGxhc3QgZGVjb2RlIHRpbWVzdGFtcAotICAgIC8vICAgIE9SCi0gICAgLy8gICAgSWYgbGFzdCBkZWNvZGUgdGltZXN0YW1wIGZvciB0cmFjayBidWZmZXIgaXMgc2V0IGFuZCB0aGUgZGlmZmVyZW5jZQotICAgIC8vICAgIGJldHdlZW4gZGVjb2RlIHRpbWVzdGFtcCBhbmQgbGFzdCBkZWNvZGUgdGltZXN0YW1wIGlzIGdyZWF0ZXIgdGhhbiAyCi0gICAgLy8gICAgdGltZXMgbGFzdCBmcmFtZSBkdXJhdGlvbjoKLSAgICBEZWNvZGVUaW1lc3RhbXAgdHJhY2tfbGFzdF9kZWNvZGVfdGltZXN0YW1wID0KLSAgICAgICAgdHJhY2tfYnVmZmVyLT5sYXN0X2RlY29kZV90aW1lc3RhbXAoKTsKLSAgICBpZiAodHJhY2tfbGFzdF9kZWNvZGVfdGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgICBiYXNlOjpUaW1lRGVsdGEgdHJhY2tfZHRzX2RlbHRhID0KLSAgICAgICAgICBkZWNvZGVfdGltZXN0YW1wIC0gdHJhY2tfbGFzdF9kZWNvZGVfdGltZXN0YW1wOwotICAgICAgaWYgKHRyYWNrX2R0c19kZWx0YSA8IGJhc2U6OlRpbWVEZWx0YSgpIHx8Ci0gICAgICAgICAgdHJhY2tfZHRzX2RlbHRhID4gMiAqIHRyYWNrX2J1ZmZlci0+bGFzdF9mcmFtZV9kdXJhdGlvbigpKSB7Ci0gICAgICAgIERDSEVDSyhjb2RlZF9mcmFtZV9ncm91cF9sYXN0X2R0c18gIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpOwotICAgICAgICAvLyA2LjEuIElmIG1vZGUgZXF1YWxzICJzZWdtZW50cyI6IFNldCBncm91cCBlbmQgdGltZXN0YW1wIHRvCi0gICAgICAgIC8vICAgICAgcHJlc2VudGF0aW9uIHRpbWVzdGFtcC4KLSAgICAgICAgLy8gICAgICBJZiBtb2RlIGVxdWFscyAic2VxdWVuY2UiOiBTZXQgZ3JvdXAgc3RhcnQgdGltZXN0YW1wIGVxdWFsIHRvCi0gICAgICAgIC8vICAgICAgdGhlIGdyb3VwIGVuZCB0aW1lc3RhbXAuCi0gICAgICAgIGlmICghc2VxdWVuY2VfbW9kZV8pIHsKLSAgICAgICAgICBncm91cF9lbmRfdGltZXN0YW1wXyA9IHByZXNlbnRhdGlvbl90aW1lc3RhbXA7Ci0gICAgICAgICAgLy8gVGhpcyB0cmlnZ2VycyBhIGRpc2NvbnRpbnVpdHkgc28gd2UgbmVlZCB0byB0cmVhdCB0aGUgbmV4dCBmcmFtZXMKLSAgICAgICAgICAvLyBhcHBlbmRlZCB3aXRoaW4gdGhlIGFwcGVuZCB3aW5kb3cgYXMgaWYgdGhleSB3ZXJlIHRoZSBiZWdpbm5pbmcgb2YKLSAgICAgICAgICAvLyBhIG5ldyBjb2RlZCBmcmFtZSBncm91cC4gfGNvZGVkX2ZyYW1lX2dyb3VwX2xhc3RfZHRzX3wgaXMgcmVzZXQgaW4KLSAgICAgICAgICAvLyBSZXNldCgpLCBiZWxvdywgZm9yICJzZWdtZW50cyIgbW9kZS4KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIDogU2VxdWVuY2UgbW9kZSBkaXNjb250aW51aXR5LCBHRVRTOiAiCi0gICAgICAgICAgICAgICAgICAgPDwgZ3JvdXBfZW5kX3RpbWVzdGFtcF8uSW5TZWNvbmRzRigpOwotICAgICAgICAgIC8vIFJlc2V0KCksIGJlbG93LCBwZXJmb3JtcyB0aGUgIlNldCBncm91cCBzdGFydCB0aW1lc3RhbXAgZXF1YWwgdG8KLSAgICAgICAgICAvLyB0aGUgZ3JvdXAgZW5kIHRpbWVzdGFtcCIgb3BlcmF0aW9uIGZvciAic2VxdWVuY2UiIG1vZGUuCi0gICAgICAgIH0KLQotICAgICAgICAvLyA2LjIuIC0gNi41LjoKLSAgICAgICAgUmVzZXQoKTsKLQotICAgICAgICAvLyA2LjYuIEp1bXAgdG8gdGhlIExvb3AgVG9wIHN0ZXAgYWJvdmUgdG8gcmVzdGFydCBwcm9jZXNzaW5nIG9mIHRoZQotICAgICAgICAvLyAgICAgIGN1cnJlbnQgY29kZWQgZnJhbWUuCi0gICAgICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICI6IERpc2NvbnRpbnVpdHk6IHJlcHJvY2Vzc2luZyBmcmFtZSI7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIDcuIExldCBmcmFtZSBlbmQgdGltZXN0YW1wIGVxdWFsIHRoZSBzdW0gb2YgcHJlc2VudGF0aW9uIHRpbWVzdGFtcCBhbmQKLSAgICAvLyAgICBmcmFtZSBkdXJhdGlvbi4KLSAgICBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZW5kX3RpbWVzdGFtcCA9Ci0gICAgICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgKyBmcmFtZV9kdXJhdGlvbjsKLQotICAgIC8vIDguICBJZiBwcmVzZW50YXRpb24gdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBhcHBlbmRXaW5kb3dTdGFydCwgdGhlbiBzZXQKLSAgICAvLyAgICAgdGhlIG5lZWQgcmFuZG9tIGFjY2VzcyBwb2ludCBmbGFnIHRvIHRydWUsIGRyb3AgdGhlIGNvZGVkIGZyYW1lLCBhbmQKLSAgICAvLyAgICAganVtcCB0byB0aGUgdG9wIG9mIHRoZSBsb29wIHRvIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIG5leHQgY29kZWQKLSAgICAvLyAgICAgZnJhbWUuCi0gICAgLy8gTm90ZTogV2Uga2VlcCB0aGUgcmVzdWx0IG9mIHBhcnRpYWwgZGlzY2FyZCBvZiBhIGJ1ZmZlciB0aGF0IG92ZXJsYXBzCi0gICAgLy8gICAgICAgfGFwcGVuZF93aW5kb3dfc3RhcnR8IGFuZCBkb2VzIG5vdCBlbmQgYWZ0ZXIgfGFwcGVuZF93aW5kb3dfZW5kfCwKLSAgICAvLyAgICAgICBmb3Igc3RyZWFtcyB3aGljaCBzdXBwb3J0IHBhcnRpYWwgdHJpbW1pbmcuCi0gICAgLy8gOS4gSWYgZnJhbWUgZW5kIHRpbWVzdGFtcCBpcyBncmVhdGVyIHRoYW4gYXBwZW5kV2luZG93RW5kLCB0aGVuIHNldCB0aGUKLSAgICAvLyAgICBuZWVkIHJhbmRvbSBhY2Nlc3MgcG9pbnQgZmxhZyB0byB0cnVlLCBkcm9wIHRoZSBjb2RlZCBmcmFtZSwgYW5kIGp1bXAKLSAgICAvLyAgICB0byB0aGUgdG9wIG9mIHRoZSBsb29wIHRvIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIG5leHQgY29kZWQgZnJhbWUuCi0gICAgLy8gTm90ZTogV2Uga2VlcCB0aGUgcmVzdWx0IG9mIHBhcnRpYWwgZGlzY2FyZCBvZiBhIGJ1ZmZlciB0aGF0IG92ZXJsYXBzCi0gICAgLy8gICAgICAgfGFwcGVuZF93aW5kb3dfZW5kfCwgZm9yIHN0cmVhbXMgd2hpY2ggc3VwcG9ydCBwYXJ0aWFsIHRyaW1taW5nLgotICAgIGZyYW1lLT5zZXRfdGltZXN0YW1wKHByZXNlbnRhdGlvbl90aW1lc3RhbXApOwotICAgIGZyYW1lLT5TZXREZWNvZGVUaW1lc3RhbXAoZGVjb2RlX3RpbWVzdGFtcCk7Ci0gICAgaWYgKHRyYWNrX2J1ZmZlci0+c3RyZWFtKCktPnN1cHBvcnRzX3BhcnRpYWxfYXBwZW5kX3dpbmRvd190cmltbWluZygpICYmCi0gICAgICAgIEhhbmRsZVBhcnRpYWxBcHBlbmRXaW5kb3dUcmltbWluZyhhcHBlbmRfd2luZG93X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3dpbmRvd19lbmQsIGZyYW1lKSkgewotICAgICAgLy8gfGZyYW1lfCBoYXMgYmVlbiBwYXJ0aWFsbHkgdHJpbW1lZCBvciBoYWQgcHJlcm9sbCBhZGRlZC4gIFRob3VnaAotICAgICAgLy8gfGZyYW1lfCdzIGR1cmF0aW9uIG1heSBoYXZlIGNoYW5nZWQsIGRvIG5vdCB1cGRhdGUgfGZyYW1lX2R1cmF0aW9ufAotICAgICAgLy8gaGVyZSwgc28gfHRyYWNrX2J1ZmZlcnwncyBsYXN0IGZyYW1lIGR1cmF0aW9uIHVwZGF0ZSB1c2VzIG9yaWdpbmFsCi0gICAgICAvLyBmcmFtZSBkdXJhdGlvbiBhbmQgcmVkdWNlcyBzcHVyaW91cyBkaXNjb250aW51aXR5IGRldGVjdGlvbi4KLSAgICAgIGRlY29kZV90aW1lc3RhbXAgPSBmcmFtZS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0gICAgICBwcmVzZW50YXRpb25fdGltZXN0YW1wID0gZnJhbWUtPnRpbWVzdGFtcCgpOwotICAgICAgZnJhbWVfZW5kX3RpbWVzdGFtcCA9IGZyYW1lLT50aW1lc3RhbXAoKSArIGZyYW1lLT5kdXJhdGlvbigpOwotICAgIH0KLQotICAgIGlmIChwcmVzZW50YXRpb25fdGltZXN0YW1wIDwgYXBwZW5kX3dpbmRvd19zdGFydCB8fAotICAgICAgICBmcmFtZV9lbmRfdGltZXN0YW1wID4gYXBwZW5kX3dpbmRvd19lbmQpIHsKLSAgICAgIHRyYWNrX2J1ZmZlci0+c2V0X25lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnQodHJ1ZSk7Ci0gICAgICBEVkxPRygzKSA8PCAiRHJvcHBpbmcgZnJhbWUgdGhhdCBpcyBvdXRzaWRlIGFwcGVuZCB3aW5kb3cuIjsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIERDSEVDSyhwcmVzZW50YXRpb25fdGltZXN0YW1wID49IGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgICBpZiAoZGVjb2RlX3RpbWVzdGFtcCA8IERlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgICAvLyBCLWZyYW1lcyBtYXkgc3RpbGwgcmVzdWx0IGluIG5lZ2F0aXZlIERUUyBoZXJlIGFmdGVyIGJlaW5nIHNoaWZ0ZWQgYnkKLSAgICAgIC8vIHx0aW1lc3RhbXBfb2Zmc2V0X3wuCi0gICAgICAvLyBUT0RPKHdvbGVuZXR6KTogVGhpcyBpcyBubyBsb25nZXIgYSBzdGVwIGluIHRoZSBDRlAsIHNpbmNlIG5lZ2F0aXZlIERUUwotICAgICAgLy8gYXJlIGFsbG93ZWQuIFJlbW92ZSB0aGlzIHBhcnNlIGZhaWx1cmUgYW5kIGVycm9yIGxvZyBhcyBwYXJ0IG9mIGZpeGluZwotICAgICAgLy8gUFRTL0RUUyBjb25mbGF0aW9uIGluIFNvdXJjZUJ1ZmZlclN0cmVhbS4gU2VlIGh0dHBzOi8vY3JidWcuY29tLzM5ODE0MQotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8IGZyYW1lLT5HZXRUeXBlTmFtZSgpIDw8ICIgZnJhbWUgd2l0aCBQVFMgIgotICAgICAgICAgIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMgaGFzIG5lZ2F0aXZlIERUUyAiCi0gICAgICAgICAgPDwgZGVjb2RlX3RpbWVzdGFtcC5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgPDwgInVzIGFmdGVyIGFwcGx5aW5nIHRpbWVzdGFtcE9mZnNldCwgaGFuZGxpbmcgYW55IGRpc2NvbnRpbnVpdHksICIKLSAgICAgICAgICAgICAiYW5kIGZpbHRlcmluZyBhZ2FpbnN0IGFwcGVuZCB3aW5kb3ciOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIDEwLiBJZiB0aGUgbmVlZCByYW5kb20gYWNjZXNzIHBvaW50IGZsYWcgb24gdHJhY2sgYnVmZmVyIGVxdWFscyB0cnVlLAotICAgIC8vICAgICB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgIGlmICh0cmFja19idWZmZXItPm5lZWRzX3JhbmRvbV9hY2Nlc3NfcG9pbnQoKSkgewotICAgICAgLy8gMTAuMS4gSWYgdGhlIGNvZGVkIGZyYW1lIGlzIG5vdCBhIHJhbmRvbSBhY2Nlc3MgcG9pbnQsIHRoZW4gZHJvcCB0aGUKLSAgICAgIC8vICAgICAgIGNvZGVkIGZyYW1lIGFuZCBqdW1wIHRvIHRoZSB0b3Agb2YgdGhlIGxvb3AgdG8gc3RhcnQgcHJvY2Vzc2luZwotICAgICAgLy8gICAgICAgdGhlIG5leHQgY29kZWQgZnJhbWUuCi0gICAgICBpZiAoIWZyYW1lLT5pc19rZXlfZnJhbWUoKSkgewotICAgICAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXwotICAgICAgICAgICAgICAgICA8PCAiOiBEcm9wcGluZyBmcmFtZSB0aGF0IGlzIG5vdCBhIHJhbmRvbSBhY2Nlc3MgcG9pbnQiOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgLy8gMTAuMi4gU2V0IHRoZSBuZWVkIHJhbmRvbSBhY2Nlc3MgcG9pbnQgZmxhZyBvbiB0cmFjayBidWZmZXIgdG8gZmFsc2UuCi0gICAgICB0cmFja19idWZmZXItPnNldF9uZWVkc19yYW5kb21fYWNjZXNzX3BvaW50KGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBub3cgaGF2ZSBhIHByb2Nlc3NlZCBidWZmZXIgdG8gYXBwZW5kIHRvIHRoZSB0cmFjayBidWZmZXIncyBzdHJlYW0uCi0gICAgLy8gSWYgaXQgaXMgdGhlIGZpcnN0IGluIGEgbmV3IGNvZGVkIGZyYW1lIGdyb3VwIChzdWNoIGFzIGZvbGxvd2luZyBhCi0gICAgLy8gZGlzY29udGludWl0eSksIG5vdGlmeSBhbGwgdGhlIHRyYWNrIGJ1ZmZlcnMnIHN0cmVhbXMgdGhhdCBhIGNvZGVkIGZyYW1lCi0gICAgLy8gZ3JvdXAgaXMgc3RhcnRpbmcuCi0gICAgLy8gSWYgaW4gJ3NlcXVlbmNlJyBhcHBlbmRNb2RlLCBhbHNvIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBuZWVkIHRvCi0gICAgLy8gc2lnbmFsIHRoZSBzdGFydCBvZiBhIG5ldyBjb2RlZCBmcmFtZSBncm91cCBpbiB0aGUgY2FzZSB3aGVyZQotICAgIC8vIHRpbWVzdGFtcE9mZnNldCBhZGp1c3RtZW50cyBieSB0aGUgYXBwIG1heSBjYXVzZSB0aGlzIGNvZGVkIGZyYW1lIHRvIGJlCi0gICAgLy8gaW4gdGhlIHRpbWVsaW5lIHByaW9yIHRvIHRoZSBsYXN0IGZyYW1lIHByb2Nlc3NlZC4KLSAgICBpZiAoY29kZWRfZnJhbWVfZ3JvdXBfbGFzdF9kdHNfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpIHx8Ci0gICAgICAgIChzZXF1ZW5jZV9tb2RlXyAmJiBjb2RlZF9mcmFtZV9ncm91cF9sYXN0X2R0c18gPiBkZWNvZGVfdGltZXN0YW1wKSkgewotICAgICAgLy8gRmlyc3QsIGNvbXBsZXRlIHRoZSBhcHBlbmQgdG8gdHJhY2sgYnVmZmVyIHN0cmVhbXMgb2YgdGhlIHByZXZpb3VzCi0gICAgICAvLyBjb2RlZCBmcmFtZSBncm91cCdzIGZyYW1lcywgaWYgYW55LgotICAgICAgaWYgKCFGbHVzaFByb2Nlc3NlZEZyYW1lcygpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIC8vIFRPRE8od29sZW5ldHopOiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGEgcHJlc2VudGF0aW9uIHRpbWVzdGFtcC4gU2VlCi0gICAgICAvLyBodHRwOi8vY3JidWcuY29tLzQwMjUwMgotICAgICAgTm90aWZ5U3RhcnRPZkNvZGVkRnJhbWVHcm91cChkZWNvZGVfdGltZXN0YW1wKTsKLSAgICB9Ci0KLSAgICBjb2RlZF9mcmFtZV9ncm91cF9sYXN0X2R0c18gPSBkZWNvZGVfdGltZXN0YW1wOwotCi0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIjogU2VuZGluZyBwcm9jZXNzZWQgZnJhbWUgdG8gc3RyZWFtLCAiCi0gICAgICAgICAgICAgPDwgIlBUUz0iIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgPDwgIiwgRFRTPSIgPDwgZGVjb2RlX3RpbWVzdGFtcC5JblNlY29uZHNGKCk7Ci0KLSAgICAvLyBTdGVwcyAxMS0xNjogTm90ZSwgd2Ugb3B0aW1pemUgYnkgYXBwZW5kaW5nIGdyb3VwcyBvZiBjb250aWd1b3VzCi0gICAgLy8gcHJvY2Vzc2VkIGZyYW1lcyBmb3IgZWFjaCB0cmFjayBidWZmZXIgYXQgZW5kIG9mIFByb2Nlc3NGcmFtZXMoKSBvciBwcmlvcgotICAgIC8vIHRvIE5vdGlmeVN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoKS4KLSAgICB0cmFja19idWZmZXItPkVucXVldWVQcm9jZXNzZWRGcmFtZShmcmFtZSk7Ci0KLSAgICAvLyAxNy4gU2V0IGxhc3QgZGVjb2RlIHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIHRvIGRlY29kZSB0aW1lc3RhbXAuCi0gICAgdHJhY2tfYnVmZmVyLT5zZXRfbGFzdF9kZWNvZGVfdGltZXN0YW1wKGRlY29kZV90aW1lc3RhbXApOwotCi0gICAgLy8gMTguIFNldCBsYXN0IGZyYW1lIGR1cmF0aW9uIGZvciB0cmFjayBidWZmZXIgdG8gZnJhbWUgZHVyYXRpb24uCi0gICAgdHJhY2tfYnVmZmVyLT5zZXRfbGFzdF9mcmFtZV9kdXJhdGlvbihmcmFtZV9kdXJhdGlvbik7Ci0KLSAgICAvLyAxOS4gSWYgaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZXN0YW1wIGZvciB0cmFjayBidWZmZXIgaXMgdW5zZXQgb3IgZnJhbWUKLSAgICAvLyAgICAgZW5kIHRpbWVzdGFtcCBpcyBncmVhdGVyIHRoYW4gaGlnaGVzdCBwcmVzZW50YXRpb24gdGltZXN0YW1wLCB0aGVuCi0gICAgLy8gICAgIHNldCBoaWdoZXN0IHByZXNlbnRhdGlvbiB0aW1lc3RhbXAgZm9yIHRyYWNrIGJ1ZmZlciB0byBmcmFtZSBlbmQKLSAgICAvLyAgICAgdGltZXN0YW1wLgotICAgIHRyYWNrX2J1ZmZlci0+U2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcElmSW5jcmVhc2VkKAotICAgICAgICBmcmFtZV9lbmRfdGltZXN0YW1wKTsKLQotICAgIC8vIDIwLiBJZiBmcmFtZSBlbmQgdGltZXN0YW1wIGlzIGdyZWF0ZXIgdGhhbiBncm91cCBlbmQgdGltZXN0YW1wLCB0aGVuIHNldAotICAgIC8vICAgICBncm91cCBlbmQgdGltZXN0YW1wIGVxdWFsIHRvIGZyYW1lIGVuZCB0aW1lc3RhbXAuCi0gICAgaWYgKGZyYW1lX2VuZF90aW1lc3RhbXAgPiBncm91cF9lbmRfdGltZXN0YW1wXykKLSAgICAgIGdyb3VwX2VuZF90aW1lc3RhbXBfID0gZnJhbWVfZW5kX3RpbWVzdGFtcDsKLSAgICBEQ0hFQ0soZ3JvdXBfZW5kX3RpbWVzdGFtcF8gPj0gYmFzZTo6VGltZURlbHRhKCkpOwotCi0gICAgLy8gU3RlcCAyMSBpcyBjdXJyZW50bHkgaGFuZGxlZCBkaWZmZXJlbnRseS4gU2VlIFNvdXJjZUJ1ZmZlclN0YXRlJ3MKLSAgICAvLyB8YXV0b191cGRhdGVfdGltZXN0YW1wX29mZnNldF98LgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvZnJhbWVfcHJvY2Vzc29yLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ5ODg3YS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfRlJBTUVfUFJPQ0VTU09SX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX0ZSQU1FX1BST0NFU1NPUl9IXwotCi0jaW5jbHVkZSA8bWFwPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19mb3J3YXJkLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgTXNlVHJhY2tCdWZmZXI7Ci0KLS8vIEhlbHBlciBjbGFzcyB0aGF0IGltcGxlbWVudHMgTWVkaWEgU291cmNlIEV4dGVuc2lvbidzIGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcKLS8vIGFsZ29yaXRobS4KLWNsYXNzIE1FRElBX0VYUE9SVCBGcmFtZVByb2Nlc3NvciB7Ci0gcHVibGljOgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoYmFzZTo6VGltZURlbHRhKT4gVXBkYXRlRHVyYXRpb25DQjsKLQotICBGcmFtZVByb2Nlc3Nvcihjb25zdCBVcGRhdGVEdXJhdGlvbkNCJiB1cGRhdGVfZHVyYXRpb25fY2IsCi0gICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotICB+RnJhbWVQcm9jZXNzb3IoKTsKLQotICAvLyBHZXQvc2V0IHRoZSBjdXJyZW50IGFwcGVuZCBtb2RlLCB3aGljaCBpZiB0cnVlIG1lYW5zICJzZXF1ZW5jZSIgYW5kIGlmCi0gIC8vIGZhbHNlIG1lYW5zICJzZWdtZW50cyIuCi0gIC8vIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3dpZGwtU291cmNlQnVmZmVyLW1vZGUuCi0gIGJvb2wgc2VxdWVuY2VfbW9kZSgpIHsgcmV0dXJuIHNlcXVlbmNlX21vZGVfOyB9Ci0gIHZvaWQgU2V0U2VxdWVuY2VNb2RlKGJvb2wgc2VxdWVuY2VfbW9kZSk7Ci0KLSAgLy8gUHJvY2Vzc2VzIGJ1ZmZlcnMgaW4gfGJ1ZmZlcl9xdWV1ZV9tYXB8LgotICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlIHdoaWNoIGluZGljYXRlcyBkZWNvZGUgZXJyb3IuCi0gIC8vIHxhcHBlbmRfd2luZG93X3N0YXJ0fCBhbmQgfGFwcGVuZF93aW5kb3dfZW5kfCBjb3JyZXNwb25kIHRvIHRoZSBNU0Ugc3BlYydzCi0gIC8vIHNpbWlsYXJseSBuYW1lZCBzb3VyY2UgYnVmZmVyIGF0dHJpYnV0ZXMgdGhhdCBhcmUgdXNlZCBpbiBjb2RlZCBmcmFtZQotICAvLyBwcm9jZXNzaW5nLgotICAvLyBVc2VzIHwqdGltZXN0YW1wX29mZnNldHwgYWNjb3JkaW5nIHRvIHRoZSBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSwKLSAgLy8gaW5jbHVkaW5nIHVwZGF0aW5nIGl0IGFzIHJlcXVpcmVkIGluICdzZXF1ZW5jZScgbW9kZSBmcmFtZSBwcm9jZXNzaW5nLgotICBib29sIFByb2Nlc3NGcmFtZXMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBhcHBlbmRfd2luZG93X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKiB0aW1lc3RhbXBfb2Zmc2V0KTsKLQotICAvLyBTaWduYWxzIHRoZSBmcmFtZSBwcm9jZXNzb3IgdG8gdXBkYXRlIGl0cyBncm91cCBzdGFydCB0aW1lc3RhbXAgdG8gYmUKLSAgLy8gfHRpbWVzdGFtcF9vZmZzZXR8IGlmIGl0IGlzIGluIHNlcXVlbmNlIGFwcGVuZCBtb2RlLgotICB2b2lkIFNldEdyb3VwU3RhcnRUaW1lc3RhbXBJZkluU2VxdWVuY2VNb2RlKGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfb2Zmc2V0KTsKLQotICAvLyBBZGRzIGEgbmV3IHRyYWNrIHdpdGggdW5pcXVlIHRyYWNrIElEIHxpZHwuCi0gIC8vIElmIHxpZHwgaGFzIHByZXZpb3VzbHkgYmVlbiBhZGRlZCwgcmV0dXJucyBmYWxzZSB0byBpbmRpY2F0ZSBlcnJvci4KLSAgLy8gT3RoZXJ3aXNlLCByZXR1cm5zIHRydWUsIGluZGljYXRpbmcgZnV0dXJlIFByb2Nlc3NGcmFtZXMoKSB3aWxsIGVtaXQKLSAgLy8gZnJhbWVzIGZvciB0aGUgdHJhY2sgfGlkfCB0byB8c3RyZWFtfC4KLSAgYm9vbCBBZGRUcmFjayhTdHJlYW1QYXJzZXI6OlRyYWNrSWQgaWQsIENodW5rRGVtdXhlclN0cmVhbSogc3RyZWFtKTsKLQotICAvLyBBIG1hcCB0aGF0IGRlc2NyaWJlcyBob3cgdHJhY2sgaWRzIGNoYW5nZWQgYmV0d2VlbiBpbml0IHNlZ21lbnQuIE1hcHMgdGhlCi0gIC8vIG9sZCB0cmFjayBpZCBmb3IgYSBuZXcgdHJhY2sgaWQgZm9yIHRoZSBzYW1lIHRyYWNrLgotICB0eXBlZGVmIHN0ZDo6bWFwPFN0cmVhbVBhcnNlcjo6VHJhY2tJZCwgU3RyZWFtUGFyc2VyOjpUcmFja0lkPiBUcmFja0lkQ2hhbmdlczsKLQotICAvLyBVcGRhdGVzIHRoZSBpbnRlcm5hbCBtYXBwaW5nIG9mIFRyYWNrSWRzIHRvIHRyYWNrIGJ1ZmZlcnMuIFRoZSBpbnB1dAotICAvLyBwYXJhbWV0ZXIgfHRyYWNrX2lkX2NoYW5nZXN8IG1hcHMgb2xkIHRyYWNrIGlkcyB0byBuZXcgb25lcy4gVGhlIHRyYWNrIGlkcwotICAvLyBub3QgcHJlc2VudCBpbiB0aGUgbWFwIG11c3QgYmUgYXNzdW1lZCB1bmNoYW5nZWQuIFJldHVybnMgZmFsc2UgaWYKLSAgLy8gcmVtYXBwaW5nIGZhaWxlZC4KLSAgYm9vbCBVcGRhdGVUcmFja0lkcyhjb25zdCBUcmFja0lkQ2hhbmdlcyYgdHJhY2tfaWRfY2hhbmdlcyk7Ci0KLSAgLy8gU2V0cyB0aGUgbmVlZCByYW5kb20gYWNjZXNzIHBvaW50IGZsYWcgb24gYWxsIHRyYWNrIGJ1ZmZlcnMgdG8gdHJ1ZS4KLSAgdm9pZCBTZXRBbGxUcmFja0J1ZmZlcnNOZWVkUmFuZG9tQWNjZXNzUG9pbnQoKTsKLQotICAvLyBSZXNldHMgc3RhdGUgZm9yIHRoZSBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSBhcyBkZXNjcmliZWQgaW4gc3RlcHMKLSAgLy8gMi01IG9mIHRoZSBNU0UgUmVzZXQgUGFyc2VyIFN0YXRlIGFsZ29yaXRobSBkZXNjcmliZWQgYXQKLSAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvbWVkaWEtc291cmNlLyNzb3VyY2VidWZmZXItcmVzZXQtcGFyc2VyLXN0YXRlCi0gIHZvaWQgUmVzZXQoKTsKLQotICAvLyBNdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBhdWRpbyBjb25maWcgaXMgdXBkYXRlZC4gIFVzZWQgdG8gbWFuYWdlIHdoZW4KLSAgLy8gdGhlIHByZXJvbGwgYnVmZmVyIGlzIGNsZWFyZWQgYW5kIHRoZSBhbGxvd2VkICJmdWRnZSIgZmFjdG9yIGJldHdlZW4KLSAgLy8gcHJlcm9sbCBidWZmZXJzLgotICB2b2lkIE9uUG9zc2libGVBdWRpb0NvbmZpZ1VwZGF0ZShjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGNvbmZpZyk7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgRnJhbWVQcm9jZXNzb3JUZXN0OwotCi0gIC8vIElmIHx0cmFja19idWZmZXJzX3wgY29udGFpbnMgfGlkfCwgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQKLSAgLy8gTXNlVHJhY2tCdWZmZXIuIE90aGVyd2lzZSwgcmV0dXJucyBOVUxMLgotICBNc2VUcmFja0J1ZmZlciogRmluZFRyYWNrKFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBpZCk7Ci0KLSAgLy8gU2lnbmFscyBhbGwgdHJhY2sgYnVmZmVycycgc3RyZWFtcyB0aGF0IGEgY29kZWQgZnJhbWUgZ3JvdXAgaXMgc3RhcnRpbmcKLSAgLy8gd2l0aCBkZWNvZGUgdGltZXN0YW1wIHxzdGFydF90aW1lc3RhbXB8LgotICB2b2lkIE5vdGlmeVN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoRGVjb2RlVGltZXN0YW1wIHN0YXJ0X3RpbWVzdGFtcCk7Ci0KLSAgLy8gSGVscGVyIHRoYXQgc2lnbmFscyBlYWNoIHRyYWNrIGJ1ZmZlciB0byBhcHBlbmQgYW55IHByb2Nlc3NlZCwgYnV0IG5vdCB5ZXQKLSAgLy8gYXBwZW5kZWQsIGZyYW1lcyB0byBpdHMgc3RyZWFtLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcywgb3IgZmFsc2UgaWYgb25lIG9yCi0gIC8vIG1vcmUgb2YgdGhlIGFwcGVuZHMgZmFpbGVkLgotICBib29sIEZsdXNoUHJvY2Vzc2VkRnJhbWVzKCk7Ci0KLSAgLy8gSGFuZGxlcyBwYXJ0aWFsIGFwcGVuZCB3aW5kb3cgdHJpbW1pbmcgb2YgfGJ1ZmZlcnwuICBSZXR1cm5zIHRydWUgaWYgdGhlCi0gIC8vIGdpdmVuIHxidWZmZXJ8IGNhbiBiZSBwYXJ0aWFsbHkgdHJpbW1lZCBvciBoYXZlIHByZXJvbGwgYWRkZWQ7IG90aGVyd2lzZSwKLSAgLy8gcmV0dXJucyBmYWxzZS4KLSAgLy8KLSAgLy8gSWYgfGJ1ZmZlcnwgb3ZlcmxhcHMgfGFwcGVuZF93aW5kb3dfc3RhcnR8LCB0aGUgcG9ydGlvbiBvZiB8YnVmZmVyfCBiZWZvcmUKLSAgLy8gfGFwcGVuZF93aW5kb3dfc3RhcnR8IHdpbGwgYmUgbWFya2VkIGZvciBwb3N0LWRlY29kZSBkaXNjYXJkLiAgRnVydGhlciwgaWYKLSAgLy8gfGF1ZGlvX3ByZXJvbGxfYnVmZmVyX3wgZXhpc3RzIGFuZCBhYnV0cyB8YnVmZmVyfCwgaXQgd2lsbCBiZSBzZXQgYXMKLSAgLy8gcHJlcm9sbCBvbiB8YnVmZmVyfCBhbmQgfGF1ZGlvX3ByZXJvbGxfYnVmZmVyX3wgd2lsbCBiZSBjbGVhcmVkLiAgSWYgdGhlCi0gIC8vIHByZXJvbGwgYnVmZmVyIGRvZXMgbm90IGFidXQgfGJ1ZmZlcnwsIGl0IHdpbGwgYmUgZGlzY2FyZGVkIHVudXNlZC4KLSAgLy8KLSAgLy8gTGlrZXdpc2UsIGlmIHxidWZmZXJ8IG92ZXJsYXBzIHxhcHBlbmRfd2luZG93X2VuZHwsIHRoZSBwb3J0aW9uIG9mIHxidWZmZXJ8Ci0gIC8vIGFmdGVyIHxhcHBlbmRfd2luZG93X2VuZHwgd2lsbCBiZSBtYXJrZWQgZm9yIHBvc3QtZGVjb2RlIGRpc2NhcmQuCi0gIC8vCi0gIC8vIElmIHxidWZmZXJ8IGxpZXMgZW50aXJlbHkgYmVmb3JlIHxhcHBlbmRfd2luZG93X3N0YXJ0fCwgYW5kIHRodXMgd291bGQKLSAgLy8gbm9ybWFsbHkgYmUgZGlzY2FyZGVkLCB8YXVkaW9fcHJlcm9sbF9idWZmZXJffCB3aWxsIGJlIHNldCB0byB8YnVmZmVyfCBhbmQKLSAgLy8gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBmYWxzZS4KLSAgYm9vbCBIYW5kbGVQYXJ0aWFsQXBwZW5kV2luZG93VHJpbW1pbmcoCi0gICAgICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydCwgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBidWZmZXIpOwotCi0gIC8vIEhlbHBlciB0aGF0IHByb2Nlc3NlcyBvbmUgZnJhbWUgd2l0aCB0aGUgY29kZWQgZnJhbWUgcHJvY2Vzc2luZyBhbGdvcml0aG0uCi0gIC8vIFJldHVybnMgZmFsc2Ugb24gZXJyb3Igb3IgdHJ1ZSBvbiBzdWNjZXNzLgotICBib29sIFByb2Nlc3NGcmFtZShjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIFRyYWNrSWQtaW5kZXhlZCBtYXAgb2YgZWFjaCB0cmFjaydzIHN0cmVhbS4KLSAgdHlwZWRlZiBzdGQ6Om1hcDxTdHJlYW1QYXJzZXI6OlRyYWNrSWQsIHNjb3BlZF9yZWZwdHI8TXNlVHJhY2tCdWZmZXI+ID4KLSAgICAgIFRyYWNrQnVmZmVyc01hcDsKLSAgVHJhY2tCdWZmZXJzTWFwIHRyYWNrX2J1ZmZlcnNfOwotCi0gIC8vIFRoZSBsYXN0IGF1ZGlvIGJ1ZmZlciBzZWVuIGJ5IHRoZSBmcmFtZSBwcm9jZXNzb3IgdGhhdCB3YXMgcmVtb3ZlZCBiZWNhdXNlCi0gIC8vIGl0IHdhcyBlbnRpcmVseSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBhcHBlbmQgd2luZG93LgotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYXVkaW9fcHJlcm9sbF9idWZmZXJfOwotCi0gIC8vIFRoZSBBdWRpb0RlY29kZXJDb25maWcgYXNzb2NpYXRlZCB3aXRoIGJ1ZmZlcnMgaGFuZGVkIHRvIFByb2Nlc3NGcmFtZXMoKS4KLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGN1cnJlbnRfYXVkaW9fY29uZmlnXzsKLSAgYmFzZTo6VGltZURlbHRhIHNhbXBsZV9kdXJhdGlvbl87Ci0KLSAgLy8gVGhlIEFwcGVuZE1vZGUgb2YgdGhlIGFzc29jaWF0ZWQgU291cmNlQnVmZmVyLgotICAvLyBTZWUgU2V0U2VxdWVuY2VNb2RlKCkgZm9yIGludGVycHJldGF0aW9uIG9mIHxzZXF1ZW5jZV9tb2RlX3wuCi0gIC8vIFBlciBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3dpZGwtU291cmNlQnVmZmVyLW1vZGU6Ci0gIC8vIENvbnRyb2xzIGhvdyBhIHNlcXVlbmNlIG9mIG1lZGlhIHNlZ21lbnRzIGFyZSBoYW5kbGVkLiBUaGlzIGlzIGluaXRpYWxseQotICAvLyBzZXQgdG8gZmFsc2UgKCJzZWdtZW50cyIpLgotICBib29sIHNlcXVlbmNlX21vZGVfOwotCi0gIC8vIFRyYWNrcyB3aGV0aGVyIG9yIG5vdCB0aGUgbmV4dCBwcm9jZXNzZWQgZnJhbWUgaXMgYSBjb250aW51YXRpb24gb2YgYSBjb2RlZAotICAvLyBmcmFtZSBncm91cCAoc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYS1zb3VyY2UvI2NvZGVkLWZyYW1lLWdyb3VwKS4KLSAgLy8gUmVzZXRzIHRvIGtOb0RlY29kZVRpbWVzdGFtcCgpIHVwb24gZGV0ZWN0aW9uIG9mICdzZWdtZW50cycgbW9kZQotICAvLyBkaXNjb250aW51aXR5LCBwYXJzZXIgcmVzZXQgZHVyaW5nICdzZWdtZW50cycgbW9kZSwgb3Igc3dpdGNoaW5nIGZyb20KLSAgLy8gJ3NlcXVlbmNlJyB0byAnc2VnbWVudHMnIG1vZGUuCi0gIC8vIE9uY2UgYSBwcm9jZXNzZWQgY29kZWQgZnJhbWUgaXMgZW1pdHRlZCBmb3IgdGhlIGN1cnJlbnQgY29kZWQgZnJhbWUgZ3JvdXAsCi0gIC8vIHRyYWNrcyB0aGUgZGVjb2RlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBmcmFtZSBlbWl0dGVkLgotICAvLyBFeHBsaWNpdCBzZXR0aW5nIG9mIHRpbWVzdGFtcE9mZnNldCB3aWxsIHRyaWdnZXIgc3Vic2VxdWVudCBub3RpZmljYXRpb24gb2YKLSAgLy8gYSBuZXcgY29kZWQgZnJhbWUgc3RhcnQgdG8gdGhlIHRyYWNrcycgc3RyZWFtcywgZXZlbiBpbiAnc2VxdWVuY2UnIG1vZGUsIGlmCi0gIC8vIHRoZSByZXN1bHRpbmcgZnJhbWUgaGFzIGEgRFRTIGxlc3MgdGhhbiB0aGlzLgotICBEZWNvZGVUaW1lc3RhbXAgY29kZWRfZnJhbWVfZ3JvdXBfbGFzdF9kdHNfOwotCi0gIC8vIFRyYWNrcyB0aGUgTVNFIGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcgdmFyaWFibGUgb2Ygc2FtZSBuYW1lLgotICAvLyBJbml0aWFsbHkga05vVGltZXN0YW1wLCBtZWFuaW5nICJ1bnNldCIuCi0gIGJhc2U6OlRpbWVEZWx0YSBncm91cF9zdGFydF90aW1lc3RhbXBfOwotCi0gIC8vIFRyYWNrcyB0aGUgTVNFIGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcgdmFyaWFibGUgb2Ygc2FtZSBuYW1lLiBJdCBzdG9yZXMgdGhlCi0gIC8vIGhpZ2hlc3QgY29kZWQgZnJhbWUgZW5kIHRpbWVzdGFtcCBhY3Jvc3MgYWxsIGNvZGVkIGZyYW1lcyBpbiB0aGUgY3VycmVudAotICAvLyBjb2RlZCBmcmFtZSBncm91cC4gSXQgaXMgc2V0IHRvIDAgd2hlbiB0aGUgU291cmNlQnVmZmVyIG9iamVjdCBpcyBjcmVhdGVkCi0gIC8vIGFuZCBnZXRzIHVwZGF0ZWQgYnkgUHJvY2Vzc0ZyYW1lcygpLgotICBiYXNlOjpUaW1lRGVsdGEgZ3JvdXBfZW5kX3RpbWVzdGFtcF87Ci0KLSAgVXBkYXRlRHVyYXRpb25DQiB1cGRhdGVfZHVyYXRpb25fY2JfOwotCi0gIC8vIE1lZGlhTG9nIGZvciByZXBvcnRpbmcgbWVzc2FnZXMgYW5kIHByb3BlcnRpZXMgdG8gZGVidWcgY29udGVudCBhbmQgZW5naW5lLgotICBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOwotCi0gIC8vIENvdW50ZXJzIHRoYXQgbGltaXQgc3BhbSB0byB8bWVkaWFfbG9nX3wgZm9yIGZyYW1lIHByb2Nlc3NvciB3YXJuaW5ncy4KLSAgaW50IG51bV9kcm9wcGVkX3ByZXJvbGxfd2FybmluZ3NfOwotICBpbnQgbnVtX2R0c19iZXlvbmRfcHRzX3dhcm5pbmdzXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVQcm9jZXNzb3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfRlJBTUVfUFJPQ0VTU09SX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3JfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYWQ2YjkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvZnJhbWVfcHJvY2Vzc29yX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODkzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgotI2luY2x1ZGUgImJhc2UvcnVuX2xvb3AuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfc3BsaXQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2ZpbHRlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2hlbHBlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6OkluU2VxdWVuY2U7Ci11c2luZyA6OnRlc3Rpbmc6OlN0cmljdE1vY2s7Ci11c2luZyA6OnRlc3Rpbmc6OlZhbHVlczsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi10eXBlZGVmIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgQnVmZmVyUXVldWU7Ci10eXBlZGVmIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBUcmFja0lkOwotCi0vLyBVc2VkIGZvciBzZXR0aW5nIGV4cGVjdGF0aW9ucyBvbiBjYWxsYmFja3MuIFVzaW5nIGEgU3RyaWN0TW9jayBhbHNvIGxldHMgdXMKLS8vIHRlc3QgZm9yIG1pc3Npbmcgb3IgZXh0cmEgY2FsbGJhY2tzLgotY2xhc3MgRnJhbWVQcm9jZXNzb3JUZXN0Q2FsbGJhY2tIZWxwZXIgewotIHB1YmxpYzoKLSAgRnJhbWVQcm9jZXNzb3JUZXN0Q2FsbGJhY2tIZWxwZXIoKSB7fQotICB2aXJ0dWFsIH5GcmFtZVByb2Nlc3NvclRlc3RDYWxsYmFja0hlbHBlcigpIHt9Ci0KLSAgTU9DS19NRVRIT0QxKFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZSwgdm9pZChiYXNlOjpUaW1lRGVsdGEgbmV3X2R1cmF0aW9uKSk7Ci0KLSAgLy8gSGVscGVyIHRoYXQgY2FsbHMgdGhlIG1vY2sgbWV0aG9kIGFzIHdlbGwgYXMgZG9lcyBiYXNpYyBzYW5pdHkgY2hlY2tzIG9uCi0gIC8vIHxuZXdfZHVyYXRpb258LgotICB2b2lkIE9uUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGJhc2U6OlRpbWVEZWx0YSBuZXdfZHVyYXRpb24pIHsKLSAgICBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UobmV3X2R1cmF0aW9uKTsKLSAgICBBU1NFUlRfTkUoa05vVGltZXN0YW1wLCBuZXdfZHVyYXRpb24pOwotICAgIEFTU0VSVF9ORShrSW5maW5pdGVEdXJhdGlvbiwgbmV3X2R1cmF0aW9uKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lUHJvY2Vzc29yVGVzdENhbGxiYWNrSGVscGVyKTsKLX07Ci0KLS8vIFRlc3QgcGFyYW1ldGVyIGRldGVybWluZXMgaW5kaWNhdGVzIGlmIHRoZSBURVNUX1AgaW5zdGFuY2UgaXMgdGFyZ2V0ZWQgZm9yCi0vLyBzZXF1ZW5jZSBtb2RlIChpZiB0cnVlKSwgb3Igc2VnbWVudHMgbW9kZSAoaWYgZmFsc2UpLgotY2xhc3MgRnJhbWVQcm9jZXNzb3JUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08Ym9vbD4gewotIHByb3RlY3RlZDoKLSAgRnJhbWVQcm9jZXNzb3JUZXN0KCkKLSAgICAgIDogZnJhbWVfcHJvY2Vzc29yXyhuZXcgRnJhbWVQcm9jZXNzb3IoCi0gICAgICAgICAgICBiYXNlOjpCaW5kKAotICAgICAgICAgICAgICAgICZGcmFtZVByb2Nlc3NvclRlc3RDYWxsYmFja0hlbHBlcjo6T25Qb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UsCi0gICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCgmY2FsbGJhY2tzXykpLAotICAgICAgICAgICAgbmV3IE1lZGlhTG9nKCkpKSwKLSAgICAgICAgYXBwZW5kX3dpbmRvd19lbmRfKGtJbmZpbml0ZUR1cmF0aW9uKSwKLSAgICAgICAgZnJhbWVfZHVyYXRpb25fKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMCkpLAotICAgICAgICBhdWRpb19pZF8oMSksCi0gICAgICAgIHZpZGVvX2lkXygyKSB7fQotCi0gIGVudW0gU3RyZWFtRmxhZ3MgeyBIQVNfQVVESU8gPSAxIDw8IDAsIEhBU19WSURFTyA9IDEgPDwgMSB9OwotCi0gIHZvaWQgQWRkVGVzdFRyYWNrcyhpbnQgc3RyZWFtX2ZsYWdzKSB7Ci0gICAgY29uc3QgYm9vbCBoYXNfYXVkaW8gPSAoc3RyZWFtX2ZsYWdzICYgSEFTX0FVRElPKSAhPSAwOwotICAgIGNvbnN0IGJvb2wgaGFzX3ZpZGVvID0gKHN0cmVhbV9mbGFncyAmIEhBU19WSURFTykgIT0gMDsKLSAgICBBU1NFUlRfVFJVRShoYXNfYXVkaW8gfHwgaGFzX3ZpZGVvKTsKLQotICAgIGlmIChoYXNfYXVkaW8pIHsKLSAgICAgIENyZWF0ZUFuZENvbmZpZ3VyZVN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyk7Ci0gICAgICBBU1NFUlRfVFJVRShhdWRpb18pOwotICAgICAgRVhQRUNUX1RSVUUoZnJhbWVfcHJvY2Vzc29yXy0+QWRkVHJhY2soYXVkaW9faWRfLCBhdWRpb18uZ2V0KCkpKTsKLSAgICAgIHNlZWsoYXVkaW9fLmdldCgpLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgfQotICAgIGlmIChoYXNfdmlkZW8pIHsKLSAgICAgIENyZWF0ZUFuZENvbmZpZ3VyZVN0cmVhbShEZW11eGVyU3RyZWFtOjpWSURFTyk7Ci0gICAgICBBU1NFUlRfVFJVRSh2aWRlb18pOwotICAgICAgRVhQRUNUX1RSVUUoZnJhbWVfcHJvY2Vzc29yXy0+QWRkVHJhY2sodmlkZW9faWRfLCB2aWRlb18uZ2V0KCkpKTsKLSAgICAgIHNlZWsodmlkZW9fLmdldCgpLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBTZXRUaW1lc3RhbXBPZmZzZXQoYmFzZTo6VGltZURlbHRhIG5ld19vZmZzZXQpIHsKLSAgICB0aW1lc3RhbXBfb2Zmc2V0XyA9IG5ld19vZmZzZXQ7Ci0gICAgZnJhbWVfcHJvY2Vzc29yXy0+U2V0R3JvdXBTdGFydFRpbWVzdGFtcElmSW5TZXF1ZW5jZU1vZGUodGltZXN0YW1wX29mZnNldF8pOwotICB9Ci0KLSAgQnVmZmVyUXVldWUgU3RyaW5nVG9CdWZmZXJRdWV1ZShjb25zdCBzdGQ6OnN0cmluZyYgYnVmZmVyc190b19hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJhY2tJZCB0cmFja19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGltZXN0YW1wcyA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgICBidWZmZXJzX3RvX2FwcGVuZCwgIiAiLCBiYXNlOjpUUklNX1dISVRFU1BBQ0UsIGJhc2U6OlNQTElUX1dBTlRfQUxMKTsKLQotICAgIEJ1ZmZlclF1ZXVlIGJ1ZmZlcnM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lc3RhbXBzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBib29sIGlzX2tleWZyYW1lID0gZmFsc2U7Ci0gICAgICBpZiAoYmFzZTo6RW5kc1dpdGgodGltZXN0YW1wc1tpXSwgIksiLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICBpc19rZXlmcmFtZSA9IHRydWU7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgIksiIG9mZiBvZiB0aGUgdG9rZW4uCi0gICAgICAgIHRpbWVzdGFtcHNbaV0gPSB0aW1lc3RhbXBzW2ldLnN1YnN0cigwLCB0aW1lc3RhbXBzW2ldLmxlbmd0aCgpIC0gMSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFVzZSBjdXN0b20gZGVjb2RlIHRpbWVzdGFtcCBpZiBpbmNsdWRlZC4KLSAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBidWZmZXJfdGltZXN0YW1wcyA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgICAgIHRpbWVzdGFtcHNbaV0sICJ8IiwgYmFzZTo6VFJJTV9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX0FMTCk7Ci0gICAgICBpZiAoYnVmZmVyX3RpbWVzdGFtcHMuc2l6ZSgpID09IDEpCi0gICAgICAgIGJ1ZmZlcl90aW1lc3RhbXBzLnB1c2hfYmFjayhidWZmZXJfdGltZXN0YW1wc1swXSk7Ci0gICAgICBDSEVDS19FUSgydSwgYnVmZmVyX3RpbWVzdGFtcHMuc2l6ZSgpKTsKLQotICAgICAgZG91YmxlIHRpbWVfaW5fbXMsIGRlY29kZV90aW1lX2luX21zOwotICAgICAgQ0hFQ0soYmFzZTo6U3RyaW5nVG9Eb3VibGUoYnVmZmVyX3RpbWVzdGFtcHNbMF0sICZ0aW1lX2luX21zKSk7Ci0gICAgICBDSEVDSyhiYXNlOjpTdHJpbmdUb0RvdWJsZShidWZmZXJfdGltZXN0YW1wc1sxXSwgJmRlY29kZV90aW1lX2luX21zKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSBidWZmZXIuIEVuY29kZSB0aGUgb3JpZ2luYWwgdGltZV9pbl9tcyBhcyB0aGUgYnVmZmVyJ3MgZGF0YSB0bwotICAgICAgLy8gZW5hYmxlIGxhdGVyIHZlcmlmaWNhdGlvbiBvZiBwb3NzaWJsZSBidWZmZXIgcmVsb2NhdGlvbiBpbiBwcmVzZW50YXRpb24KLSAgICAgIC8vIHRpbWVsaW5lIGR1ZSB0byBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nLgotICAgICAgY29uc3QgdWludDhfdCogdGltZXN0YW1wX2FzX2RhdGEgPQotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0aW1lX2luX21zKTsKLSAgICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXIgPSBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKAotICAgICAgICAgIHRpbWVzdGFtcF9hc19kYXRhLCBzaXplb2YodGltZV9pbl9tcyksIGlzX2tleWZyYW1lLCB0eXBlLCB0cmFja19pZCk7Ci0gICAgICBBU1NFUlRfVFJVRShidWZmZXIpOwotICAgICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHNEKAotICAgICAgICAgIHRpbWVfaW5fbXMgLyBiYXNlOjpUaW1lOjprTWlsbGlzZWNvbmRzUGVyU2Vjb25kKTsKLSAgICAgIGJ1ZmZlci0+c2V0X3RpbWVzdGFtcCh0aW1lc3RhbXApOwotICAgICAgaWYgKHRpbWVfaW5fbXMgIT0gZGVjb2RlX3RpbWVfaW5fbXMpIHsKLSAgICAgICAgRGVjb2RlVGltZXN0YW1wIGRlY29kZV90aW1lc3RhbXAgPSBEZWNvZGVUaW1lc3RhbXA6OkZyb21TZWNvbmRzRCgKLSAgICAgICAgICAgIGRlY29kZV90aW1lX2luX21zIC8gYmFzZTo6VGltZTo6a01pbGxpc2Vjb25kc1BlclNlY29uZCk7Ci0gICAgICAgIGJ1ZmZlci0+U2V0RGVjb2RlVGltZXN0YW1wKGRlY29kZV90aW1lc3RhbXApOwotICAgICAgfQotCi0gICAgICBidWZmZXItPnNldF9kdXJhdGlvbihmcmFtZV9kdXJhdGlvbl8pOwotICAgICAgYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7Ci0gIH0KLQotICB2b2lkIFByb2Nlc3NGcmFtZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX3RpbWVzdGFtcHMsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmlkZW9fdGltZXN0YW1wcykgewotICAgIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAgYnVmZmVyX3F1ZXVlX21hcDsKLSAgICBjb25zdCBhdXRvJiBhdWRpb19idWZmZXJzID0KLSAgICAgICAgU3RyaW5nVG9CdWZmZXJRdWV1ZShhdWRpb190aW1lc3RhbXBzLCBhdWRpb19pZF8sIERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgICBpZiAoIWF1ZGlvX2J1ZmZlcnMuZW1wdHkoKSkKLSAgICAgIGJ1ZmZlcl9xdWV1ZV9tYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGF1ZGlvX2lkXywgYXVkaW9fYnVmZmVycykpOwotICAgIGNvbnN0IGF1dG8mIHZpZGVvX2J1ZmZlcnMgPQotICAgICAgICBTdHJpbmdUb0J1ZmZlclF1ZXVlKHZpZGVvX3RpbWVzdGFtcHMsIHZpZGVvX2lkXywgRGVtdXhlclN0cmVhbTo6VklERU8pOwotICAgIGlmICghdmlkZW9fYnVmZmVycy5lbXB0eSgpKQotICAgICAgYnVmZmVyX3F1ZXVlX21hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIodmlkZW9faWRfLCB2aWRlb19idWZmZXJzKSk7Ci0gICAgQVNTRVJUX1RSVUUoZnJhbWVfcHJvY2Vzc29yXy0+UHJvY2Vzc0ZyYW1lcygKLSAgICAgICAgYnVmZmVyX3F1ZXVlX21hcCwgYXBwZW5kX3dpbmRvd19zdGFydF8sIGFwcGVuZF93aW5kb3dfZW5kXywKLSAgICAgICAgJnRpbWVzdGFtcF9vZmZzZXRfKSk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgLy8gTm90ZSwgRGVtdXhlclN0cmVhbTo6VEVYVCBzdHJlYW1zIHJldHVybiBbMCxkdXJhdGlvbiAoPT1pbmZpbml0eSBoZXJlKSkKLSAgICBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiByID0gc3RyZWFtLT5HZXRCdWZmZXJlZFJhbmdlcyhrSW5maW5pdGVEdXJhdGlvbik7Ci0KLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKLSAgICBzcyA8PCAieyAiOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgci5zaXplKCk7ICsraSkgewotICAgICAgaW50NjRfdCBzdGFydCA9IHIuc3RhcnQoaSkuSW5NaWxsaXNlY29uZHMoKTsKLSAgICAgIGludDY0X3QgZW5kID0gci5lbmQoaSkuSW5NaWxsaXNlY29uZHMoKTsKLSAgICAgIHNzIDw8ICJbIiA8PCBzdGFydCA8PCAiLCIgPDwgZW5kIDw8ICIpICI7Ci0gICAgfQotICAgIHNzIDw8ICJ9IjsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHNzLnN0cigpKTsKLSAgfQotCi0gIHZvaWQgQ2hlY2tSZWFkU3RhbGxzKENodW5rRGVtdXhlclN0cmVhbSogc3RyZWFtKSB7Ci0gICAgaW50IGxvb3BfY291bnQgPSAwOwotCi0gICAgZG8gewotICAgICAgcmVhZF9jYWxsYmFja19jYWxsZWRfID0gZmFsc2U7Ci0gICAgICBzdHJlYW0tPlJlYWQoYmFzZTo6QmluZCgmRnJhbWVQcm9jZXNzb3JUZXN0OjpTdG9yZVN0YXR1c0FuZEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKLSAgICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgICB9IHdoaWxlICgrK2xvb3BfY291bnQgPCAyICYmIHJlYWRfY2FsbGJhY2tfY2FsbGVkXyAmJgotICAgICAgICAgICAgIGxhc3RfcmVhZF9zdGF0dXNfID09IERlbXV4ZXJTdHJlYW06OmtBYm9ydGVkKTsKLQotICAgIEFTU0VSVF9GQUxTRShyZWFkX2NhbGxiYWNrX2NhbGxlZF8gJiYKLSAgICAgICAgICAgICAgICAgbGFzdF9yZWFkX3N0YXR1c18gPT0gRGVtdXhlclN0cmVhbTo6a0Fib3J0ZWQpCi0gICAgICAgIDw8ICIyIGtBYm9ydGVkIHJlYWRzIGluIGEgcm93LiBHaXZpbmcgdXAuIjsKLSAgICBFWFBFQ1RfRkFMU0UocmVhZF9jYWxsYmFja19jYWxsZWRfKTsKLSAgfQotCi0gIC8vIEZvcm1hdCBvZiB8ZXhwZWN0ZWR8IGlzIGEgc3BhY2UtZGVsaW1pdGVkIHNlcXVlbmNlIG9mCi0gIC8vIHRpbWVzdGFtcF9pbl9tczpvcmlnaW5hbF90aW1lc3RhbXBfaW5fbXMKLSAgLy8gb3JpZ2luYWxfdGltZXN0YW1wX2luX21zIChhbmQgdGhlIGNvbG9uKSBtdXN0IGJlIG9taXR0ZWQgaWYgaXQgaXMgdGhlIHNhbWUKLSAgLy8gYXMgdGltZXN0YW1wX2luX21zLgotICB2b2lkIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRpbWVzdGFtcHMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgICAgZXhwZWN0ZWQsICIgIiwgYmFzZTo6VFJJTV9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX0FMTCk7Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aW1lc3RhbXBzLnNpemUoKTsgKytpKSB7Ci0gICAgICBpbnQgbG9vcF9jb3VudCA9IDA7Ci0KLSAgICAgIGRvIHsKLSAgICAgICAgcmVhZF9jYWxsYmFja19jYWxsZWRfID0gZmFsc2U7Ci0gICAgICAgIHN0cmVhbS0+UmVhZChiYXNlOjpCaW5kKCZGcmFtZVByb2Nlc3NvclRlc3Q6OlN0b3JlU3RhdHVzQW5kQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocmVhZF9jYWxsYmFja19jYWxsZWRfKTsKLSAgICAgIH0gd2hpbGUgKCsrbG9vcF9jb3VudCA8IDIgJiYKLSAgICAgICAgICAgICAgIGxhc3RfcmVhZF9zdGF0dXNfID09IERlbXV4ZXJTdHJlYW06OmtBYm9ydGVkKTsKLQotICAgICAgQVNTRVJUX0ZBTFNFKGxhc3RfcmVhZF9zdGF0dXNfID09IERlbXV4ZXJTdHJlYW06OmtBYm9ydGVkKQotICAgICAgICAgIDw8ICIyIGtBYm9ydGVkIHJlYWRzIGluIGEgcm93LiBHaXZpbmcgdXAuIjsKLSAgICAgIEVYUEVDVF9FUShEZW11eGVyU3RyZWFtOjprT2ssIGxhc3RfcmVhZF9zdGF0dXNfKTsKLSAgICAgIEVYUEVDVF9GQUxTRShsYXN0X3JlYWRfYnVmZmVyXy0+ZW5kX29mX3N0cmVhbSgpKTsKLQotICAgICAgaWYgKGkgPiAwKSBzcyA8PCAiICI7Ci0KLSAgICAgIGludCB0aW1lX2luX21zID0gbGFzdF9yZWFkX2J1ZmZlcl8tPnRpbWVzdGFtcCgpLkluTWlsbGlzZWNvbmRzKCk7Ci0gICAgICBzcyA8PCB0aW1lX2luX21zOwotCi0gICAgICAvLyBEZWNvZGUgdGhlIG9yaWdpbmFsX3RpbWVfaW5fbXMgZnJvbSB0aGUgYnVmZmVyJ3MgZGF0YS4KLSAgICAgIGRvdWJsZSBvcmlnaW5hbF90aW1lX2luX21zOwotICAgICAgQVNTRVJUX0VRKHNpemVvZihvcmlnaW5hbF90aW1lX2luX21zKSwgbGFzdF9yZWFkX2J1ZmZlcl8tPmRhdGFfc2l6ZSgpKTsKLSAgICAgIG9yaWdpbmFsX3RpbWVfaW5fbXMgPQotICAgICAgICAgICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBkb3VibGUqPihsYXN0X3JlYWRfYnVmZmVyXy0+ZGF0YSgpKSk7Ci0gICAgICBpZiAob3JpZ2luYWxfdGltZV9pbl9tcyAhPSB0aW1lX2luX21zKSBzcyA8PCAiOiIgPDwgb3JpZ2luYWxfdGltZV9pbl9tczsKLQotICAgICAgLy8gRGV0ZWN0IGZ1bGwtZGlzY2FyZCBwcmVyb2xsIGJ1ZmZlci4KLSAgICAgIGlmIChsYXN0X3JlYWRfYnVmZmVyXy0+ZGlzY2FyZF9wYWRkaW5nKCkuZmlyc3QgPT0ga0luZmluaXRlRHVyYXRpb24gJiYKLSAgICAgICAgICBsYXN0X3JlYWRfYnVmZmVyXy0+ZGlzY2FyZF9wYWRkaW5nKCkuc2Vjb25kLmlzX3plcm8oKSkgewotICAgICAgICBzcyA8PCAiUCI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBzcy5zdHIoKSk7Ci0gICAgQ2hlY2tSZWFkU3RhbGxzKHN0cmVhbSk7Ci0gIH0KLQotICAvLyBUT0RPKHdvbGVuZXR6KTogUmVmYWN0b3IgdG8gaW5zdGVhZCB2ZXJpZnkgdGhlIGV4cGVjdGVkIHNpZ25hbGxpbmcgb3IgbGFjawotICAvLyB0aGVyZW9mIG9mIG5ldyBjb2RlZCBmcmFtZSBncm91cCBieSB0aGUgRnJhbWVQcm9jZXNzb3IuIFNlZQotICAvLyBodHRwczovL2NyYnVnLmNvbS81ODA2MTMuCi0gIGJvb2wgaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSB7Ci0gICAgcmV0dXJuIGZyYW1lX3Byb2Nlc3Nvcl8tPmNvZGVkX2ZyYW1lX2dyb3VwX2xhc3RfZHRzXyAhPQotICAgICAgICAgICBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgfQotCi0gIHZvaWQgc2VlayhDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSwgYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgewotICAgIHN0cmVhbS0+QWJvcnRSZWFkcygpOwotICAgIHN0cmVhbS0+U2VlayhzZWVrX3RpbWUpOwotICAgIHN0cmVhbS0+U3RhcnRSZXR1cm5pbmdEYXRhKCk7Ci0gIH0KLQotICBiYXNlOjpNZXNzYWdlTG9vcCBtZXNzYWdlX2xvb3BfOwotICBTdHJpY3RNb2NrPEZyYW1lUHJvY2Vzc29yVGVzdENhbGxiYWNrSGVscGVyPiBjYWxsYmFja3NfOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxGcmFtZVByb2Nlc3Nvcj4gZnJhbWVfcHJvY2Vzc29yXzsKLSAgYmFzZTo6VGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnRfOwotICBiYXNlOjpUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmRfOwotICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wX29mZnNldF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBmcmFtZV9kdXJhdGlvbl87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+IGF1ZGlvXzsKLSAgc3RkOjp1bmlxdWVfcHRyPENodW5rRGVtdXhlclN0cmVhbT4gdmlkZW9fOwotICBjb25zdCBUcmFja0lkIGF1ZGlvX2lkXzsKLSAgY29uc3QgVHJhY2tJZCB2aWRlb19pZF87Ci0gIGNvbnN0IEJ1ZmZlclF1ZXVlIGVtcHR5X3F1ZXVlXzsKLQotICAvLyBTdG9yZVN0YXR1c0FuZEJ1ZmZlcidzIG1vc3QgcmVjZW50IHJlc3VsdC4KLSAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIGxhc3RfcmVhZF9zdGF0dXNfOwotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGxhc3RfcmVhZF9idWZmZXJfOwotICBib29sIHJlYWRfY2FsbGJhY2tfY2FsbGVkXzsKLQotIHByaXZhdGU6Ci0gIHZvaWQgU3RvcmVTdGF0dXNBbmRCdWZmZXIoRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIpIHsKLSAgICBpZiAoc3RhdHVzID09IERlbXV4ZXJTdHJlYW06OmtPayAmJiBidWZmZXIuZ2V0KCkpIHsKLSAgICAgIERWTE9HKDMpIDw8IF9fRlVOQ1RJT05fXyA8PCAic3RhdHVzOiAiIDw8IHN0YXR1cwotICAgICAgICAgICAgICAgPDwgIiB0czogIiA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKTsKLSAgICB9IGVsc2UgewotICAgICAgRFZMT0coMykgPDwgX19GVU5DVElPTl9fIDw8ICJzdGF0dXM6ICIgPDwgc3RhdHVzIDw8ICIgdHM6IG4vYSI7Ci0gICAgfQotCi0gICAgcmVhZF9jYWxsYmFja19jYWxsZWRfID0gdHJ1ZTsKLSAgICBsYXN0X3JlYWRfc3RhdHVzXyA9IHN0YXR1czsKLSAgICBsYXN0X3JlYWRfYnVmZmVyXyA9IGJ1ZmZlcjsKLSAgfQotCi0gIHZvaWQgQ3JlYXRlQW5kQ29uZmlndXJlU3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICAgIC8vIFRPRE8od29sZW5ldHovZGFsZWN1cnRpcyk6IEFsc28gdGVzdCB3aXRoIHNwbGljaW5nIGRpc2FibGVkPwotICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgY2FzZSBEZW11eGVyU3RyZWFtOjpBVURJTzogewotICAgICAgICBBU1NFUlRfRkFMU0UoYXVkaW9fKTsKLSAgICAgICAgYXVkaW9fLnJlc2V0KG5ldyBDaHVua0RlbXV4ZXJTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8sIHRydWUsICIxIikpOwotICAgICAgICBBdWRpb0RlY29kZXJDb25maWcgZGVjb2Rlcl9jb25maWcoa0NvZGVjVm9yYmlzLCBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPLCAxMDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gICAgICAgIGZyYW1lX3Byb2Nlc3Nvcl8tPk9uUG9zc2libGVBdWRpb0NvbmZpZ1VwZGF0ZShkZWNvZGVyX2NvbmZpZyk7Ci0gICAgICAgIEFTU0VSVF9UUlVFKGF1ZGlvXy0+VXBkYXRlQXVkaW9Db25maWcoZGVjb2Rlcl9jb25maWcsIG5ldyBNZWRpYUxvZygpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBEZW11eGVyU3RyZWFtOjpWSURFTzogewotICAgICAgICBBU1NFUlRfRkFMU0UodmlkZW9fKTsKLSAgICAgICAgdmlkZW9fLnJlc2V0KG5ldyBDaHVua0RlbXV4ZXJTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8sIHRydWUsICIyIikpOwotICAgICAgICBBU1NFUlRfVFJVRSh2aWRlb18tPlVwZGF0ZVZpZGVvQ29uZmlnKFRlc3RWaWRlb0NvbmZpZzo6Tm9ybWFsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1lZGlhTG9nKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICAvLyBUT0RPKHdvbGVuZXR6KTogVGVzdCB0ZXh0IGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcuCi0gICAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlRFWFQ6Ci0gICAgICBjYXNlIERlbXV4ZXJTdHJlYW06OlVOS05PV046Ci0gICAgICBjYXNlIERlbXV4ZXJTdHJlYW06Ok5VTV9UWVBFUzogewotICAgICAgICBBU1NFUlRfRkFMU0UodHJ1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lUHJvY2Vzc29yVGVzdCk7Ci19OwotCi1URVNUX0YoRnJhbWVQcm9jZXNzb3JUZXN0LCBXcm9uZ1R5cGVJbkFwcGVuZGVkQnVmZmVyKSB7Ci0gIEFkZFRlc3RUcmFja3MoSEFTX0FVRElPKTsKLSAgRVhQRUNUX0ZBTFNFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotCi0gIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAgYnVmZmVyX3F1ZXVlX21hcDsKLSAgY29uc3QgYXV0byYgYXVkaW9fYnVmZmVycyA9Ci0gICAgICBTdHJpbmdUb0J1ZmZlclF1ZXVlKCIwSyIsIGF1ZGlvX2lkXywgRGVtdXhlclN0cmVhbTo6VklERU8pOwotICBidWZmZXJfcXVldWVfbWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihhdWRpb19pZF8sIGF1ZGlvX2J1ZmZlcnMpKTsKLSAgQVNTRVJUX0ZBTFNFKAotICAgICAgZnJhbWVfcHJvY2Vzc29yXy0+UHJvY2Vzc0ZyYW1lcyhidWZmZXJfcXVldWVfbWFwLCBhcHBlbmRfd2luZG93X3N0YXJ0XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3dpbmRvd19lbmRfLCAmdGltZXN0YW1wX29mZnNldF8pKTsKLSAgRVhQRUNUX0ZBTFNFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgfSIpOwotICBDaGVja1JlYWRTdGFsbHMoYXVkaW9fLmdldCgpKTsKLX0KLQotVEVTVF9GKEZyYW1lUHJvY2Vzc29yVGVzdCwgTm9uTW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lc3RhbXBJbk9uZUNhbGwpIHsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotCi0gIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAgYnVmZmVyX3F1ZXVlX21hcDsKLSAgY29uc3QgYXV0byYgYXVkaW9fYnVmZmVycyA9Ci0gICAgICBTdHJpbmdUb0J1ZmZlclF1ZXVlKCIxMEsgMEsiLCBhdWRpb19pZF8sIERlbXV4ZXJTdHJlYW06OkFVRElPKTsKLSAgYnVmZmVyX3F1ZXVlX21hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoYXVkaW9faWRfLCBhdWRpb19idWZmZXJzKSk7Ci0gIEFTU0VSVF9GQUxTRSgKLSAgICAgIGZyYW1lX3Byb2Nlc3Nvcl8tPlByb2Nlc3NGcmFtZXMoYnVmZmVyX3F1ZXVlX21hcCwgYXBwZW5kX3dpbmRvd19zdGFydF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF93aW5kb3dfZW5kXywgJnRpbWVzdGFtcF9vZmZzZXRfKSk7Ci0gIEVYUEVDVF9GQUxTRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IH0iKTsKLSAgQ2hlY2tSZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSk7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEF1ZGlvT25seV9TaW5nbGVGcmFtZSkgewotICAvLyBUZXN0cyBBOiBQKEEpIC0+IChhKQotICBJblNlcXVlbmNlIHM7Ci0gIEFkZFRlc3RUcmFja3MoSEFTX0FVRElPKTsKLSAgaWYgKEdldFBhcmFtKCkpIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLQotICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIiwgIiIpOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDEwKSB9Iik7Ci0gIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICIwIik7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIFZpZGVvT25seV9TaW5nbGVGcmFtZSkgewotICAvLyBUZXN0cyBWOiBQKFYpIC0+ICh2KQotICBJblNlcXVlbmNlIHM7Ci0gIEFkZFRlc3RUcmFja3MoSEFTX1ZJREVPKTsKLSAgaWYgKEdldFBhcmFtKCkpIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLQotICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIiIsICIwSyIpOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCh2aWRlb18uZ2V0KCksICJ7IFswLDEwKSB9Iik7Ci0gIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyh2aWRlb18uZ2V0KCksICIwIik7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEF1ZGlvT25seV9Ud29GcmFtZXMpIHsKLSAgLy8gVGVzdHMgQTogUChBMCwgQTEwKSAtPiAoYTAsIGExMCkKLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyk7Ci0gIGlmIChHZXRQYXJhbSgpKSBmcmFtZV9wcm9jZXNzb3JfLT5TZXRTZXF1ZW5jZU1vZGUodHJ1ZSk7Ci0KLSAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXyAqIDIpKTsKLSAgUHJvY2Vzc0ZyYW1lcygiMEsgMTBLIiwgIiIpOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDIwKSB9Iik7Ci0gIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICIwIDEwIik7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEF1ZGlvT25seV9TZXRPZmZzZXRUaGVuU2luZ2xlRnJhbWUpIHsKLSAgLy8gVGVzdHMgQTogU1RTTyg1MCkrUChBMCkgLT4gVFNPPT01MCwoYTBANTApCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBpZiAoR2V0UGFyYW0oKSkgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBmaWZ0eV9tcyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MCk7Ci0gIFNldFRpbWVzdGFtcE9mZnNldChmaWZ0eV9tcyk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKyBmaWZ0eV9tcykpOwotICBQcm9jZXNzRnJhbWVzKCIwSyIsICIiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0gIEVYUEVDVF9FUShmaWZ0eV9tcywgdGltZXN0YW1wX29mZnNldF8pOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbNTAsNjApIH0iKTsKLQotICAvLyBXZSBkbyBub3Qgc3RhbGwgb24gcmVhZGluZyB3aXRob3V0IHNlZWtpbmcgdG8gNTBtcyBkdWUgdG8KLSAgLy8gU291cmNlQnVmZmVyU3RyZWFtOjprU2Vla1RvU3RhcnRGdWRnZVJvb20oKS4KLSAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjUwOjAiKTsKLX0KLQotVEVTVF9QKEZyYW1lUHJvY2Vzc29yVGVzdCwgQXVkaW9Pbmx5X1NldE9mZnNldFRoZW5GcmFtZVRpbWVzdGFtcEJlbG93T2Zmc2V0KSB7Ci0gIC8vIFRlc3RzIEE6IFNUU08oNTApK1AoQTIwKSAtPgotICAvLyAgIGlmIHNlcXVlbmNlIG1vZGU6IFRTTz09MzAsKGEyMEA1MCkKLSAgLy8gICBpZiBzZWdtZW50cyBtb2RlOiBUU089PTUwLChhMjBANzApCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBib29sIHVzaW5nX3NlcXVlbmNlX21vZGUgPSBHZXRQYXJhbSgpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBmaWZ0eV9tcyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1MCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSB0d2VudHlfbXMgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjApOwotICBTZXRUaW1lc3RhbXBPZmZzZXQoZmlmdHlfbXMpOwotCi0gIGlmICh1c2luZ19zZXF1ZW5jZV9tb2RlKSB7Ci0gICAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywKLSAgICAgICAgICAgICAgICBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZmlmdHlfbXMgKyBmcmFtZV9kdXJhdGlvbl8pKTsKLSAgfSBlbHNlIHsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZmlmdHlfbXMgKyB0d2VudHlfbXMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZV9kdXJhdGlvbl8pKTsKLSAgfQotCi0gIFByb2Nlc3NGcmFtZXMoIjIwSyIsICIiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0KLSAgLy8gV2UgZG8gbm90IHN0YWxsIG9uIHJlYWRpbmcgd2l0aG91dCBzZWVraW5nIHRvIDUwbXMgLyA3MG1zIGR1ZSB0bwotICAvLyBTb3VyY2VCdWZmZXJTdHJlYW06OmtTZWVrVG9TdGFydEZ1ZGdlUm9vbSgpLgotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIEVYUEVDVF9FUShmaWZ0eV9tcyAtIHR3ZW50eV9tcywgdGltZXN0YW1wX29mZnNldF8pOwotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFs1MCw2MCkgfSIpOwotICAgIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICI1MDoyMCIpOwotICB9IGVsc2UgewotICAgIEVYUEVDVF9FUShmaWZ0eV9tcywgdGltZXN0YW1wX29mZnNldF8pOwotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFs3MCw4MCkgfSIpOwotICAgIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICI3MDoyMCIpOwotICB9Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEF1ZGlvT25seV9TZXF1ZW50aWFsUHJvY2Vzc0ZyYW1lcykgewotICAvLyBUZXN0cyBBOiBQKEEwLEExMCkrUChBMjAsQTMwKSAtPiAoYTAsYTEwLGEyMCxhMzApCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBpZiAoR2V0UGFyYW0oKSkgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotCi0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAyKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIDEwSyIsICIiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgdGltZXN0YW1wX29mZnNldF8pOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMCwyMCkgfSIpOwotCi0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiA0KSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjIwSyAzMEsiLCAiIik7Ci0gIEVYUEVDVF9UUlVFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsNDApIH0iKTsKLQotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMCAxMCAyMCAzMCIpOwotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LCBBdWRpb09ubHlfTm9uU2VxdWVudGlhbFByb2Nlc3NGcmFtZXMpIHsKLSAgLy8gVGVzdHMgQTogUChBMjAsQTMwKStQKEEwLEExMCkgLT4KLSAgLy8gICBpZiBzZXF1ZW5jZSBtb2RlOiBUU089PS0yMCBhZnRlciBmaXJzdCBQKCksIDIwIGFmdGVyIHNlY29uZCBQKCksIGFuZAotICAvLyAgICAgICAgICAgICAgICAgICAgIGEoMjBAMCxhMzBAMTAsYTBAMjAsYTEwQDMwKQotICAvLyAgIGlmIHNlZ21lbnRzIG1vZGU6IFRTTz09MCwoYTAsYTEwLGEyMCxhMzApCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBib29sIHVzaW5nX3NlcXVlbmNlX21vZGUgPSBHZXRQYXJhbSgpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fICogMikpOwotICB9IGVsc2UgewotICAgIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiA0KSk7Ci0gIH0KLQotICBQcm9jZXNzRnJhbWVzKCIyMEsgMzBLIiwgIiIpOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLQotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDIwKSB9Iik7Ci0gICAgRVhQRUNUX0VRKGZyYW1lX2R1cmF0aW9uXyAqIC0yLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gICAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXyAqIDQpKTsKLSAgfSBlbHNlIHsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMjAsNDApIH0iKTsKLSAgICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fICogMikpOwotICB9Ci0KLSAgUHJvY2Vzc0ZyYW1lcygiMEsgMTBLIiwgIiIpOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLQotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDQwKSB9Iik7Ci0gICAgRVhQRUNUX0VRKGZyYW1lX2R1cmF0aW9uXyAqIDIsIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDoyMCAxMDozMCAyMDowIDMwOjEwIik7Ci0gIH0gZWxzZSB7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsNDApIH0iKTsKLSAgICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgICAvLyBSZS1zZWVrIHRvIDBtcyBub3cgdGhhdCB3ZSd2ZSBhcHBlbmRlZCBkYXRhIGVhcmxpZXIgdGhhbiB3aGF0IGhhcyBhbHJlYWR5Ci0gICAgLy8gc2F0aXNmaWVkIG91ciBpbml0aWFsIHNlZWsgdG8gc3RhcnQsIGFib3ZlLgotICAgIHNlZWsoYXVkaW9fLmdldCgpLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjAgMTAgMjAgMzAiKTsKLSAgfQotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LCBBdWRpb1ZpZGVvX1NlcXVlbnRpYWxQcm9jZXNzRnJhbWVzKSB7Ci0gIC8vIFRlc3RzIEFWOiBQKEEwLEExMDtWMGssVjEwLFYyMCkrUChBMjAsQTMwLEE0MCxWMzApIC0+Ci0gIC8vICAgKGEwLGExMCxhMjAsYTMwLGE0MCk7KHYwLHYxMCx2MjAsdjMwKQotICBJblNlcXVlbmNlIHM7Ci0gIEFkZFRlc3RUcmFja3MoSEFTX0FVRElPIHwgSEFTX1ZJREVPKTsKLSAgaWYgKEdldFBhcmFtKCkpIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLQotICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fICogMykpOwotICBQcm9jZXNzRnJhbWVzKCIwSyAxMEsiLCAiMEsgMTAgMjAiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgdGltZXN0YW1wX29mZnNldF8pOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMCwyMCkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAodmlkZW9fLmdldCgpLCAieyBbMCwzMCkgfSIpOwotCi0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiA1KSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjIwSyAzMEsgNDBLIiwgIjMwIik7Ci0gIEVYUEVDVF9UUlVFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsNTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwgInsgWzAsNDApIH0iKTsKLQotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMCAxMCAyMCAzMCA0MCIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiMCAxMCAyMCAzMCIpOwotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LCBBdWRpb1ZpZGVvX0Rpc2NvbnRpbnVpdHkpIHsKLSAgLy8gVGVzdHMgQVY6IFAoQTAsQTEwLEEzMCxBNDAsQTUwO1YwayxWMTAsVjQwLFY1MGtleSkgLT4KLSAgLy8gICBpZiBzZXF1ZW5jZSBtb2RlOiBUU089PTEwLChhMCxhMTAsYTMwLGE0MCxhNTBANjApOyh2MCx2MTAsdjUwQDYwKQotICAvLyAgIGlmIHNlZ21lbnRzIG1vZGU6IFRTTz09MCwoYTAsYTEwLGEzMCxhNDAsYTUwKTsodjAsdjEwLHY1MCkKLSAgLy8gVGhpcyBhc3N1bWVzIEE0MEsgaXMgcHJvY2Vzc2VkIGJlZm9yZSBWNDAsIHdoaWNoIGRlcGVuZHMgY3VycmVudGx5IG9uCi0gIC8vIE1lcmdlQnVmZmVyUXVldWVzKCkgYmVoYXZpb3IuCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8gfCBIQVNfVklERU8pOwotICBib29sIHVzaW5nX3NlcXVlbmNlX21vZGUgPSBHZXRQYXJhbSgpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fICogNykpOwotICB9IGVsc2UgewotICAgIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiA2KSk7Ci0gIH0KLQotICBQcm9jZXNzRnJhbWVzKCIwSyAxMEsgMzBLIDQwSyA1MEsiLCAiMEsgMTAgNDAgNTBLIik7Ci0gIEVYUEVDVF9UUlVFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotCi0gIGlmICh1c2luZ19zZXF1ZW5jZV9tb2RlKSB7Ci0gICAgRVhQRUNUX0VRKGZyYW1lX2R1cmF0aW9uXywgdGltZXN0YW1wX29mZnNldF8pOwotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDcwKSB9Iik7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwgInsgWzAsNzApIH0iKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMCAxMCAzMCA0MCA2MDo1MCIpOwotICAgIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyh2aWRlb18uZ2V0KCksICIwIDEwIDYwOjUwIik7Ci0gIH0gZWxzZSB7Ci0gICAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsNjApIH0iKTsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAodmlkZW9fLmdldCgpLCAieyBbMCwyMCkgWzUwLDYwKSB9Iik7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjAgMTAgMzAgNDAgNTAiKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiMCAxMCIpOwotICAgIHNlZWsodmlkZW9fLmdldCgpLCBmcmFtZV9kdXJhdGlvbl8gKiA1KTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiNTAiKTsKLSAgfQotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LCBBdWRpb1ZpZGVvX0Rpc2NvbnRpbnVpdHlfVGltZXN0YW1wT2Zmc2V0KSB7Ci0gIC8vIElmIGluICdzZXF1ZW5jZScgbW9kZSwgYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgaXMgKm9ubHkqIHN0YXJ0ZWQgaWYgdGhlCi0gIC8vIHByb2Nlc3NlZCBmcmFtZSBzZXF1ZW5jZSBvdXRwdXRzIHNvbWV0aGluZyB0aGF0IGdvZXMgYmFja3dhcmRzIGluIERUUwotICAvLyBvcmRlci4gVGhpcyBoZWxwcyByZXRhaW4gdGhlIGludGVudCBvZiAnc2VxdWVuY2UnIG1vZGU6IGl0IGJvdGggY29sbGFwc2VzCi0gIC8vIGdhcHMgYXMgd2VsbCBhcyBhbGxvd3MgYXBwIHRvIG92ZXJyaWRlIHRoZSB0aW1lbGluZSBwbGFjZW1lbnQgYW5kIHNvIG5lZWRzCi0gIC8vIHRvIGhhbmRsZSBvdmVybGFwLWFwcGVuZHMsIHRvby4KLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyB8IEhBU19WSURFTyk7Ci0gIGJvb2wgdXNpbmdfc2VxdWVuY2VfbW9kZSA9IEdldFBhcmFtKCk7Ci0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh1c2luZ19zZXF1ZW5jZV9tb2RlKTsKLQotICAvLyBTdGFydCBhIGNvZGVkIGZyYW1lIGdyb3VwIGF0IHRpbWUgMTAwbXMuIE5vdGUgdGhlIGphZ2dlZCBzdGFydCBzdGlsbCB1c2VzCi0gIC8vIHRoZSBjb2RlZCBmcmFtZSBncm91cCdzIHN0YXJ0IHRpbWUgYXMgdGhlIHJhbmdlIHN0YXJ0IGZvciBib3RoIHN0cmVhbXMuCi0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAxNCkpOwotICBTZXRUaW1lc3RhbXBPZmZzZXQoZnJhbWVfZHVyYXRpb25fICogMTApOwotICBQcm9jZXNzRnJhbWVzKCIwSyAxMEsgMjBLIiwgIjEwSyAyMEsgMzBLIik7Ci0gIEVYUEVDVF9FUShmcmFtZV9kdXJhdGlvbl8gKiAxMCwgdGltZXN0YW1wX29mZnNldF8pOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzEwMCwxMzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwgInsgWzEwMCwxNDApIH0iKTsKLQotICAvLyBUZXN0IHRoZSBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiAnc2VxdWVuY2UnIGFuZCAnc2VnbWVudHMnIG1vZGUgcmVzdWx0cyBpZgotICAvLyB0aGUgY29kZWQgZnJhbWUgc2VxdWVuY2UganVtcHMgZm9yd2FyZCBiZXlvbmQgdGhlIG5vcm1hbCBkaXNjb250aW51aXR5Ci0gIC8vIHRocmVzaG9sZC4KLSAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXyAqIDI0KSk7Ci0gIFNldFRpbWVzdGFtcE9mZnNldChmcmFtZV9kdXJhdGlvbl8gKiAyMCk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIDEwSyAyMEsiLCAiMTBLIDIwSyAzMEsiKTsKLSAgRVhQRUNUX0VRKGZyYW1lX2R1cmF0aW9uXyAqIDIwLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIEVYUEVDVF9UUlVFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFsxMDAsMjMwKSB9Iik7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwgInsgWzEwMCwyNDApIH0iKTsKLSAgfSBlbHNlIHsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMTAwLDEzMCkgWzIwMCwyMzApIH0iKTsKLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAodmlkZW9fLmdldCgpLCAieyBbMTAwLDE0MCkgWzIwMCwyNDApIH0iKTsKLSAgfQotCi0gIC8vIFRlc3QgdGhlIGJlaGF2aW9yIHdoZW4gdGltZXN0YW1wT2Zmc2V0IGFkanVzdG1lbnQgY2F1c2VzIG5leHQgZnJhbWVzIHRvIGJlCi0gIC8vIGluIHRoZSBwYXN0IHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91c2x5IHByb2Nlc3NlZCBmcmFtZSBhbmQgdHJpZ2dlcnMgYSBuZXcKLSAgLy8gY29kZWQgZnJhbWUgZ3JvdXAsIGV2ZW4gaW4gJ3NlcXVlbmNlJyBtb2RlLgotICBiYXNlOjpUaW1lRGVsdGEgZmlmdHlfZml2ZV9tcyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1NSk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sCi0gICAgICAgICAgICAgIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmaWZ0eV9maXZlX21zICsgZnJhbWVfZHVyYXRpb25fICogNCkpOwotICBTZXRUaW1lc3RhbXBPZmZzZXQoZmlmdHlfZml2ZV9tcyk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIDEwSyAyMEsiLCAiMTBLIDIwSyAzMEsiKTsKLSAgRVhQRUNUX0VRKGZpZnR5X2ZpdmVfbXMsIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0gIC8vIFRoZSBuZXcgYXVkaW8gcmFuZ2UgaXMgbm90IHdpdGhpbiBTb3VyY2VCdWZmZXJTdHJlYW0ncyBjb2FsZXNjaW5nIHRocmVzaG9sZAotICAvLyByZWxhdGl2ZSB0byB0aGUgbmV4dCByYW5nZSwgYnV0IHRoZSBuZXcgdmlkZW8gcmFuZ2UgaXMgd2l0aGluIHRoZQotICAvLyB0aHJlc2hvbGQuCi0gIGlmICh1c2luZ19zZXF1ZW5jZV9tb2RlKSB7Ci0gICAgLy8gVE9ETyh3b2xlbmV0ei9jaGN1bm5pbmdoYW0pOiBUaGUgbGFyZ2UgZXhwbGljaXQtdGltZXN0YW1wT2Zmc2V0LWluZHVjZWQKLSAgICAvLyBqdW1wIGZvcndhcmQgKGZyb20gdGltZXN0YW1wIDEzMCB0byAyMDApIHdoaWxlIGluIGEgc2VxdWVuY2UgbW9kZSBjb2RlZAotICAgIC8vIGZyYW1lIGdyb3VwIG1ha2VzIG91ciBhZGphY2VuY3kgdGhyZXNob2xkIGluIFNvdXJjZUJ1ZmZlciwgYmFzZWQgb24KLSAgICAvLyBtYXgtaW50ZXJidWZmZXItZGlzdGFuY2Utd2l0aGluLWNvZGVkLWZyYW1lLWdyb3VwLCB2ZXJ5IGxlbmllbnQuCi0gICAgLy8gVGhpcyBjYXVzZXMgWzU1LDg1KSB0byBtZXJnZSB3aXRoIFsxMDAsMjMwKSBoZXJlIGZvciBhdWRpbywgYW5kIHNpbWlsYXIKLSAgICAvLyBmb3IgdmlkZW8uIFNlZSBhbHNvIGh0dHBzOi8vY3JidWcuY29tLzYyMDUyMy4KLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbNTUsMjMwKSB9Iik7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwgInsgWzU1LDI0MCkgfSIpOwotICB9IGVsc2UgewotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IFs1NSw4NSkgWzEwMCwxMzApIFsyMDAsMjMwKSB9Iik7Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSByYW5nZSBhZGphY2VuY3kgbG9naWMgdXNlZCBpbiB0aGlzIGNhc2UgaXMgZG9lc24ndCBjb25zaWRlcgotICAgIC8vIERUUyA4NSB0byBiZSBjbG9zZSBlbm91Z2ggdG8gWzEwMCwxNDApLCBzaW5jZSB0aGUgZmlyc3QgRFRTIGluIHZpZGVvCi0gICAgLy8gcmFuZ2UgWzEwMCwxNDApIGlzIGFjdHVhbGx5IDExMC4gVGhlIG11eGVkIGRhdGEgc3RhcnRlZCBhIGNvZGVkIGZyYW1lCi0gICAgLy8gZ3JvdXAgYXQgdGltZSAxMDAsIGJ1dCBhY3R1YWwgRFRTIGlzIHVzZWQgZm9yIGFkamFjZW5jeSBjaGVja3Mgd2hpbGUKLSAgICAvLyBhcHBlbmRpbmcuCi0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKHZpZGVvXy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgWzU1LDk1KSBbMTAwLDE0MCkgWzIwMCwyNDApIH0iKTsKLSAgfQotCi0gIC8vIFZlcmlmeSB0aGUgYnVmZmVycy4KLSAgLy8gUmUtc2VlayBub3cgdGhhdCB3ZSd2ZSBhcHBlbmRlZCBkYXRhIGVhcmxpZXIgdGhhbiB3aGF0IGFscmVhZHkgc2F0aXNmaWVkCi0gIC8vIG91ciBpbml0aWFsIHNlZWsgdG8gc3RhcnQuCi0gIHNlZWsoYXVkaW9fLmdldCgpLCBmaWZ0eV9maXZlX21zKTsKLSAgc2Vlayh2aWRlb18uZ2V0KCksIGZpZnR5X2ZpdmVfbXMpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscygKLSAgICAgICAgYXVkaW9fLmdldCgpLAotICAgICAgICAiNTU6MCA2NToxMCA3NToyMCAxMDA6MCAxMTA6MTAgMTIwOjIwIDIwMDowIDIxMDoxMCAyMjA6MjAiKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoCi0gICAgICAgIHZpZGVvXy5nZXQoKSwKLSAgICAgICAgIjY1OjEwIDc1OjIwIDg1OjMwIDExMDoxMCAxMjA6MjAgMTMwOjMwIDIxMDoxMCAyMjA6MjAgMjMwOjMwIik7Ci0gIH0gZWxzZSB7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjU1OjAgNjU6MTAgNzU6MjAiKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiNjU6MTAgNzU6MjAgODU6MzAiKTsKLSAgICBzZWVrKGF1ZGlvXy5nZXQoKSwgZnJhbWVfZHVyYXRpb25fICogMTApOwotICAgIHNlZWsodmlkZW9fLmdldCgpLCBmcmFtZV9kdXJhdGlvbl8gKiAxMCk7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjEwMDowIDExMDoxMCAxMjA6MjAiKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiMTEwOjEwIDEyMDoyMCAxMzA6MzAiKTsKLSAgICBzZWVrKGF1ZGlvXy5nZXQoKSwgZnJhbWVfZHVyYXRpb25fICogMjApOwotICAgIHNlZWsodmlkZW9fLmdldCgpLCBmcmFtZV9kdXJhdGlvbl8gKiAyMCk7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjIwMDowIDIxMDoxMCAyMjA6MjAiKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiMjEwOjEwIDIyMDoyMCAyMzA6MzAiKTsKLSAgfQotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LAotICAgICAgIEFwcGVuZFdpbmRvd0ZpbHRlck9mTmVnYXRpdmVCdWZmZXJUaW1lc3RhbXBzV2l0aFByZXJvbGxEaXNjYXJkKSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBpZiAoR2V0UGFyYW0oKSkgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotCi0gIFNldFRpbWVzdGFtcE9mZnNldChmcmFtZV9kdXJhdGlvbl8gKiAtMik7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8pKTsKLSAgUHJvY2Vzc0ZyYW1lcygiMEsgMTBLIDIwSyIsICIiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0gIEVYUEVDVF9FUShmcmFtZV9kdXJhdGlvbl8gKiAtMiwgdGltZXN0YW1wX29mZnNldF8pOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMCwxMCkgfSIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDoxMFAgMDoyMCIpOwotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LCBBcHBlbmRXaW5kb3dGaWx0ZXJXaXRoSW5leGFjdFByZXJvbGwpIHsKLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyk7Ci0gIGlmIChHZXRQYXJhbSgpKSBmcmFtZV9wcm9jZXNzb3JfLT5TZXRTZXF1ZW5jZU1vZGUodHJ1ZSk7Ci0gIFNldFRpbWVzdGFtcE9mZnNldCgtZnJhbWVfZHVyYXRpb25fKTsKLSAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXyAqIDIpKTsKLSAgUHJvY2Vzc0ZyYW1lcygiMEsgOS43NUsgMjBLIiwgIiIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMCwyMCkgfSIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMFAgMDo5Ljc1IDEwOjIwIik7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEFwcGVuZFdpbmRvd0ZpbHRlcldpdGhJbmV4YWN0UHJlcm9sbF8yKSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBpZiAoR2V0UGFyYW0oKSkgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotICBTZXRUaW1lc3RhbXBPZmZzZXQoLWZyYW1lX2R1cmF0aW9uXyk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAyKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIDEwLjI1SyAyMEsiLCAiIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFswLDIwKSB9Iik7Ci0gIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICIwUCAwOjEwLjI1IDEwOjIwIik7Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIEFsbG93TmVnYXRpdmVGcmFtZVBUU0FuZERUU0JlZm9yZU9mZnNldEFkanVzdG1lbnQpIHsKLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyk7Ci0gIGJvb2wgdXNpbmdfc2VxdWVuY2VfbW9kZSA9IEdldFBhcmFtKCk7Ci0gIGlmICh1c2luZ19zZXF1ZW5jZV9tb2RlKSB7Ci0gICAgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHRydWUpOwotICAgIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAzKSk7Ci0gIH0gZWxzZSB7Ci0gICAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywKLSAgICAgICAgICAgICAgICBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoKGZyYW1lX2R1cmF0aW9uXyAqIDUpIC8gMikpOwotICB9Ci0KLSAgUHJvY2Vzc0ZyYW1lcygiLTVLIDVLIDE1SyIsICIiKTsKLQotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIEVYUEVDVF9FUShmcmFtZV9kdXJhdGlvbl8gLyAyLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsMzApIH0iKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDotNSAxMDo1IDIwOjE1Iik7Ci0gIH0gZWxzZSB7Ci0gICAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsMjUpIH0iKTsKLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDotNSA1IDE1Iik7Ci0gIH0KLX0KLQotVEVTVF9QKEZyYW1lUHJvY2Vzc29yVGVzdCwgUGFydGlhbEFwcGVuZFdpbmRvd0ZpbHRlck5vRGlzY29udGludWl0eSkgewotICAvLyBUZXN0cyB0aGF0IHNwdXJpb3VzIGRpc2NvbnRpbnVpdHkgaXMgbm90IGludHJvZHVjZWQgYnkgYSBwYXJ0aWFsbHkKLSAgLy8gdHJpbW1lZCBmcmFtZS4KLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyk7Ci0gIGlmIChHZXRQYXJhbSgpKSBmcmFtZV9wcm9jZXNzb3JfLT5TZXRTZXF1ZW5jZU1vZGUodHJ1ZSk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sCi0gICAgICAgICAgICAgIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMjkpKSk7Ci0KLSAgYXBwZW5kX3dpbmRvd19zdGFydF8gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNyk7Ci0gIFByb2Nlc3NGcmFtZXMoIjBLIDE5SyIsICIiKTsKLQotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzcsMjkpIH0iKTsKLSAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjc6MCAxOSIpOwotfQotCi1URVNUX1AoRnJhbWVQcm9jZXNzb3JUZXN0LAotICAgICAgIFBhcnRpYWxBcHBlbmRXaW5kb3dGaWx0ZXJOb0Rpc2NvbnRpbnVpdHlfRHRzQWZ0ZXJQdHMpIHsKLSAgLy8gVGVzdHMgdGhhdCBzcHVyaW91cyBkaXNjb250aW51aXR5IGlzIG5vdCBpbnRyb2R1Y2VkIGJ5IGEgcGFydGlhbGx5IHRyaW1tZWQKLSAgLy8gZnJhbWUgdGhhdCBvcmlnaW5hbGx5IGhhZCBEVFMgPiBQVFMuCi0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBib29sIHVzaW5nX3NlcXVlbmNlX21vZGUgPSBHZXRQYXJhbSgpOwotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZSh0cnVlKTsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygyMCkpKTsKLSAgfSBlbHNlIHsKLSAgICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMykpKTsKLSAgfQotCi0gIFByb2Nlc3NGcmFtZXMoIi03fDEwSyAzfDIwSyIsICIiKTsKLQotICBpZiAodXNpbmdfc2VxdWVuY2VfbW9kZSkgewotICAgIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNyksIHRpbWVzdGFtcF9vZmZzZXRfKTsKLQotICAgIC8vIFRPRE8od29sZW5ldHopOiBBZGp1c3QgdGhlIGZvbGxvd2luZyBleHBlY3RhdGlvbiB0byB1c2UgUFRTIGluc3RlYWQgb2YKLSAgICAvLyBEVFMgb25jZSBodHRwczovL2NyYnVnLmNvbS8zOTgxMzAgaXMgZml4ZWQuCi0gICAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzE3LDM3KSB9Iik7Ci0KLSAgICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDotNyAxMDozIik7Ci0gIH0gZWxzZSB7Ci0gICAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0KLSAgICAvLyBUT0RPKHdvbGVuZXR6KTogQWRqdXN0IHRoZSBmb2xsb3dpbmcgZXhwZWN0YXRpb24gdG8gdXNlIFBUUyBpbnN0ZWFkIG9mCi0gICAgLy8gRFRTIG9uY2UgaHR0cHM6Ly9jcmJ1Zy5jb20vMzk4MTMwIGlzIGZpeGVkLgotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFsxNywzMCkgfSIpOwotCi0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjA6LTcgMyIpOwotICB9Ci19Ci0KLVRFU1RfUChGcmFtZVByb2Nlc3NvclRlc3QsIFBhcnRpYWxBcHBlbmRXaW5kb3dGaWx0ZXJOb05ld01lZGlhU2VnbWVudCkgewotICAvLyBUZXN0cyB0aGF0IGEgbmV3IG1lZGlhIHNlZ21lbnQgaXMgbm90IGZvcmNpYmx5IHNpZ25hbGxlZCBmb3IgYXVkaW8gZnJhbWUKLSAgLy8gcGFydGlhbCBmcm9udCB0cmltLCB0byBwcmV2ZW50IGluY29ycmVjdCBpbnRyb2R1Y3Rpb24gb2YgYSBkaXNjb250aW51aXR5Ci0gIC8vIGFuZCBwb3RlbnRpYWxseSBhIG5vbi1rZXlmcmFtZSB2aWRlbyBmcmFtZSB0byBiZSBwcm9jZXNzZWQgbmV4dCBhZnRlciB0aGUKLSAgLy8gZGlzY29udGludWl0eS4KLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyB8IEhBU19WSURFTyk7Ci0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZShHZXRQYXJhbSgpKTsKLSAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXykpOwotICBQcm9jZXNzRnJhbWVzKCIiLCAiMEsiKTsKLSAgRVhQRUNUX0NBTEwoY2FsbGJhY2tzXywgUG9zc2libGVEdXJhdGlvbkluY3JlYXNlKGZyYW1lX2R1cmF0aW9uXykpOwotICBQcm9jZXNzRnJhbWVzKCItNUsiLCAiIik7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAyKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIiIsICIxMCIpOwotCi0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgdGltZXN0YW1wX29mZnNldF8pOwotICBFWFBFQ1RfVFJVRShpbl9jb2RlZF9mcmFtZV9ncm91cCgpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKGF1ZGlvXy5nZXQoKSwgInsgWzAsNSkgfSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAodmlkZW9fLmdldCgpLCAieyBbMCwyMCkgfSIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMDotNSIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHModmlkZW9fLmdldCgpLCAiMCAxMCIpOwotfQotCi1URVNUX0YoRnJhbWVQcm9jZXNzb3JUZXN0LCBBdWRpb09ubHlfU2VxdWVuY2VNb2RlQ29udGludWl0eUFjcm9zc1Jlc2V0KSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgQWRkVGVzdFRyYWNrcyhIQVNfQVVESU8pOwotICBmcmFtZV9wcm9jZXNzb3JfLT5TZXRTZXF1ZW5jZU1vZGUodHJ1ZSk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8pKTsKLSAgUHJvY2Vzc0ZyYW1lcygiMEsiLCAiIik7Ci0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlJlc2V0KCk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShmcmFtZV9kdXJhdGlvbl8gKiAyKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjEwMEsiLCAiIik7Ci0KLSAgRVhQRUNUX0VRKGZyYW1lX2R1cmF0aW9uXyAqIC05LCB0aW1lc3RhbXBfb2Zmc2V0Xyk7Ci0gIEVYUEVDVF9UUlVFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbMCwyMCkgfSIpOwotICBDaGVja1JlYWRzVGhlblJlYWRTdGFsbHMoYXVkaW9fLmdldCgpLCAiMCAxMDoxMDAiKTsKLX0KLQotVEVTVF9QKEZyYW1lUHJvY2Vzc29yVGVzdCwgUGFydGlhbEFwcGVuZFdpbmRvd1plcm9EdXJhdGlvblByZXJvbGwpIHsKLSAgSW5TZXF1ZW5jZSBzOwotICBBZGRUZXN0VHJhY2tzKEhBU19BVURJTyk7Ci0gIGJvb2wgaXNfc2VxdWVuY2VfbW9kZSA9IEdldFBhcmFtKCk7Ci0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldFNlcXVlbmNlTW9kZShpc19zZXF1ZW5jZV9tb2RlKTsKLQotICBhcHBlbmRfd2luZG93X3N0YXJ0XyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1KTsKLQotICAvLyBBcHBlbmQgYSAwIGR1cmF0aW9uIGZyYW1lIHRoYXQgZmFsbHMganVzdCBiZWZvcmUgdGhlIGFwcGVuZCB3aW5kb3cuCi0gIGZyYW1lX2R1cmF0aW9uXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKTsKLSAgRVhQRUNUX0ZBTFNFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotICBFWFBFQ1RfQ0FMTChjYWxsYmFja3NfLCBQb3NzaWJsZUR1cmF0aW9uSW5jcmVhc2UoZnJhbWVfZHVyYXRpb25fKSk7Ci0gIFByb2Nlc3NGcmFtZXMoIjRLIiwgIiIpOwotICAvLyBWZXJpZnkgYnVmZmVyIGlzIG5vdCBwYXJ0IG9mIHJhbmdlcy4gSXQgc2hvdWxkIGJlIHNpbGVudGx5IHNhdmVkIGZvcgotICAvLyBwcmVyb2xsIGZvciBmdXR1cmUgYXBwZW5kLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyB9Iik7Ci0gIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICIiKTsKLSAgRVhQRUNUX0ZBTFNFKGluX2NvZGVkX2ZyYW1lX2dyb3VwKCkpOwotCi0gIC8vIEFib3J0IHRoZSByZWFkcyBmcm9tIGxhc3Qgc3RhbGwuIFdlIGRvbid0IHdhbnQgdGhvc2UgcmVhZHMgdG8gImNvbXBsZXRlIgotICAvLyB3aGVuIHdlIGFwcGVuZCBiZWxvdy4gV2Ugd2lsbCBpbml0aWF0ZSBuZXcgcmVhZHMgdG8gY29uZmlybSB0aGUgYnVmZmVyCi0gIC8vIGxvb2tzIGFzIHdlIGV4cGVjdC4KLSAgc2VlayhhdWRpb18uZ2V0KCksIGJhc2U6OlRpbWVEZWx0YSgpKTsKLQotICAvLyBBcHBlbmQgYSBmcmFtZSB3aXRoIDEwbXMgZHVyYXRpb24sIHdpdGggOW1zIGZhbGxpbmcgYWZ0ZXIgdGhlIHdpbmRvdyBzdGFydC4KLSAgYmFzZTo6VGltZURlbHRhIGV4cGVjdGVkX2R1cmF0aW9uID0KLSAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhpc19zZXF1ZW5jZV9tb2RlID8gMTAgOiAxNCk7Ci0gIEVYUEVDVF9DQUxMKGNhbGxiYWNrc18sIFBvc3NpYmxlRHVyYXRpb25JbmNyZWFzZShleHBlY3RlZF9kdXJhdGlvbikpOwotICBmcmFtZV9kdXJhdGlvbl8gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTApOwotICBQcm9jZXNzRnJhbWVzKCI0SyIsICIiKTsKLSAgRVhQRUNUX1RSVUUoaW5fY29kZWRfZnJhbWVfZ3JvdXAoKSk7Ci0KLSAgLy8gVmVyaWZ5IHJhbmdlIHVwZGF0ZWQgdG8gcmVmbGVjdCBsYXN0IGFwcGVuZCB3YXMgcHJvY2Vzc2VkIGFuZCB0cmltbWVkLCBhbmQKLSAgLy8gYWxzbyB0aGF0IHplcm8gZHVyYXRpb24gYnVmZmVyIHdhcyBzYXZlZCBhbmQgYXR0YWNoZWQgYXMgcHJlcm9sbC4KLSAgaWYgKGlzX3NlcXVlbmNlX21vZGUpIHsKLSAgICAvLyBGb3Igc2VxdWVuY2UgbW9kZSwgYXBwZW5kIHdpbmRvdyB0cmltbWluZyBpcyBhcHBsaWVkIGFmdGVyIHRoZSBhcHBlbmQKLSAgICAvLyBpcyBhZGp1c3RlZCBmb3IgdGltZXN0YW1wT2Zmc2V0LiBCYXNpY2FsbHksIGV2ZXJ5dGhpbmcgZ2V0cyByZWJhc2VkIHRvIDAKLSAgICAvLyBhbmQgdHJpbW1pbmcgdGhlbiByZW1vdmVzIDUgc2Vjb25kcyBmcm9tIHRoZSBmcm9udC4KLSAgICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoYXVkaW9fLmdldCgpLCAieyBbNSwxMCkgfSIpOwotICAgIENoZWNrUmVhZHNUaGVuUmVhZFN0YWxscyhhdWRpb18uZ2V0KCksICI1OjRQIDU6NCIpOwotICB9IGVsc2UgeyAgLy8gc2VnbWVudHMgbW9kZQotICAgIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcChhdWRpb18uZ2V0KCksICJ7IFs1LDE0KSB9Iik7Ci0gICAgQ2hlY2tSZWFkc1RoZW5SZWFkU3RhbGxzKGF1ZGlvXy5nZXQoKSwgIjU6NFAgNTo0Iik7Ci0gIH0KLQotICAvLyBWZXJpZnkgdGhlIHByZXJvbGwgYnVmZmVyIHN0aWxsIGhhcyB6ZXJvIGR1cmF0aW9uLgotICBTdHJlYW1QYXJzZXJCdWZmZXIqIGxhc3RfcmVhZF9wYXJzZXJfYnVmZmVyID0KLSAgICAgIHN0YXRpY19jYXN0PFN0cmVhbVBhcnNlckJ1ZmZlcio+KGxhc3RfcmVhZF9idWZmZXJfLmdldCgpKTsKLSAgQVNTRVJUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgIGxhc3RfcmVhZF9wYXJzZXJfYnVmZmVyLT5wcmVyb2xsX2J1ZmZlcigpLT5kdXJhdGlvbigpKTsKLX0KLQotSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoU2VxdWVuY2VNb2RlLCBGcmFtZVByb2Nlc3NvclRlc3QsIFZhbHVlcyh0cnVlKSk7Ci1JTlNUQU5USUFURV9URVNUX0NBU0VfUChTZWdtZW50c01vZGUsIEZyYW1lUHJvY2Vzc29yVGVzdCwgVmFsdWVzKGZhbHNlKSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjE5OWQ3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0X3JlYWRlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X2JpdF9yZWFkZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUgyNjRCaXRSZWFkZXI6OkgyNjRCaXRSZWFkZXIoKQotICAgIDogZGF0YV8oTlVMTCksCi0gICAgICBieXRlc19sZWZ0XygwKSwKLSAgICAgIGN1cnJfYnl0ZV8oMCksCi0gICAgICBudW1fcmVtYWluaW5nX2JpdHNfaW5fY3Vycl9ieXRlXygwKSwKLSAgICAgIHByZXZfdHdvX2J5dGVzXygwKSwKLSAgICAgIGVtdWxhdGlvbl9wcmV2ZW50aW9uX2J5dGVzXygwKSB7fQotCi1IMjY0Qml0UmVhZGVyOjp+SDI2NEJpdFJlYWRlcigpIHt9Ci0KLWJvb2wgSDI2NEJpdFJlYWRlcjo6SW5pdGlhbGl6ZShjb25zdCB1aW50OF90KiBkYXRhLCBvZmZfdCBzaXplKSB7Ci0gIERDSEVDSyhkYXRhKTsKLQotICBpZiAoc2l6ZSA8IDEpIHJldHVybiBmYWxzZTsKLQotICBkYXRhXyA9IGRhdGE7Ci0gIGJ5dGVzX2xlZnRfID0gc2l6ZTsKLSAgbnVtX3JlbWFpbmluZ19iaXRzX2luX2N1cnJfYnl0ZV8gPSAwOwotICAvLyBJbml0aWFsbHkgc2V0IHRvIDB4ZmZmZiB0byBhY2NlcHQgYWxsIGluaXRpYWwgdHdvLWJ5dGUgc2VxdWVuY2VzLgotICBwcmV2X3R3b19ieXRlc18gPSAweGZmZmY7Ci0gIGVtdWxhdGlvbl9wcmV2ZW50aW9uX2J5dGVzXyA9IDA7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSDI2NEJpdFJlYWRlcjo6VXBkYXRlQ3VyckJ5dGUoKSB7Ci0gIGlmIChieXRlc19sZWZ0XyA8IDEpIHJldHVybiBmYWxzZTsKLQotICAvLyBFbXVsYXRpb24gcHJldmVudGlvbiB0aHJlZS1ieXRlIGRldGVjdGlvbi4KLSAgLy8gSWYgYSBzZXF1ZW5jZSBvZiAweDAwMDAwMyBpcyBmb3VuZCwgc2tpcCAoaWdub3JlKSB0aGUgbGFzdCBieXRlICgweDAzKS4KLSAgaWYgKCpkYXRhXyA9PSAweDAzICYmIChwcmV2X3R3b19ieXRlc18gJiAweGZmZmYpID09IDApIHsKLSAgICAvLyBEZXRlY3RlZCAweDAwMDAwMywgc2tpcCBsYXN0IGJ5dGUuCi0gICAgKytkYXRhXzsKLSAgICAtLWJ5dGVzX2xlZnRfOwotICAgICsrZW11bGF0aW9uX3ByZXZlbnRpb25fYnl0ZXNfOwotICAgIC8vIE5lZWQgYW5vdGhlciBmdWxsIHRocmVlIGJ5dGVzIGJlZm9yZSB3ZSBjYW4gZGV0ZWN0IHRoZSBzZXF1ZW5jZSBhZ2Fpbi4KLSAgICBwcmV2X3R3b19ieXRlc18gPSAweGZmZmY7Ci0KLSAgICBpZiAoYnl0ZXNfbGVmdF8gPCAxKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBMb2FkIGEgbmV3IGJ5dGUgYW5kIGFkdmFuY2UgcG9pbnRlcnMuCi0gIGN1cnJfYnl0ZV8gPSAqZGF0YV8rKyAmIDB4ZmY7Ci0gIC0tYnl0ZXNfbGVmdF87Ci0gIG51bV9yZW1haW5pbmdfYml0c19pbl9jdXJyX2J5dGVfID0gODsKLQotICBwcmV2X3R3b19ieXRlc18gPSAoKHByZXZfdHdvX2J5dGVzXyAmIDB4ZmYpIDw8IDgpIHwgY3Vycl9ieXRlXzsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUmVhZCB8bnVtX2JpdHN8ICgxIHRvIDMxIGluY2x1c2l2ZSkgZnJvbSB0aGUgc3RyZWFtIGFuZCByZXR1cm4gdGhlbQotLy8gaW4gfG91dHwsIHdpdGggZmlyc3QgYml0IGluIHRoZSBzdHJlYW0gYXMgTVNCIGluIHxvdXR8IGF0IHBvc2l0aW9uCi0vLyAofG51bV9iaXRzfCAtIDEpLgotYm9vbCBIMjY0Qml0UmVhZGVyOjpSZWFkQml0cyhpbnQgbnVtX2JpdHMsIGludCogb3V0KSB7Ci0gIGludCBiaXRzX2xlZnQgPSBudW1fYml0czsKLSAgKm91dCA9IDA7Ci0gIERDSEVDS19HRSgzMSwgbnVtX2JpdHMpOwotCi0gIHdoaWxlIChudW1fcmVtYWluaW5nX2JpdHNfaW5fY3Vycl9ieXRlXyA8IGJpdHNfbGVmdCkgewotICAgIC8vIFRha2UgYWxsIHRoYXQncyBsZWZ0IGluIGN1cnJlbnQgYnl0ZSwgc2hpZnQgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIHJlc3QuCi0gICAgKm91dCB8PSAoY3Vycl9ieXRlXyA8PCAoYml0c19sZWZ0IC0gbnVtX3JlbWFpbmluZ19iaXRzX2luX2N1cnJfYnl0ZV8pKTsKLSAgICBiaXRzX2xlZnQgLT0gbnVtX3JlbWFpbmluZ19iaXRzX2luX2N1cnJfYnl0ZV87Ci0KLSAgICBpZiAoIVVwZGF0ZUN1cnJCeXRlKCkpIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpvdXQgfD0gKGN1cnJfYnl0ZV8gPj4gKG51bV9yZW1haW5pbmdfYml0c19pbl9jdXJyX2J5dGVfIC0gYml0c19sZWZ0KSk7Ci0gICpvdXQgJj0gKCgxdSA8PCBudW1fYml0cykgLSAxdSk7Ci0gIG51bV9yZW1haW5pbmdfYml0c19pbl9jdXJyX2J5dGVfIC09IGJpdHNfbGVmdDsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotb2ZmX3QgSDI2NEJpdFJlYWRlcjo6TnVtQml0c0xlZnQoKSB7Ci0gIHJldHVybiAobnVtX3JlbWFpbmluZ19iaXRzX2luX2N1cnJfYnl0ZV8gKyBieXRlc19sZWZ0XyAqIDgpOwotfQotCi1ib29sIEgyNjRCaXRSZWFkZXI6Okhhc01vcmVSQlNQRGF0YSgpIHsKLSAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgbW9yZSBiaXRzLCBpZiB3ZSBhcmUgYXQgMCBiaXRzIGluIGN1cnJlbnQgYnl0ZSBhbmQKLSAgLy8gdXBkYXRpbmcgY3VycmVudCBieXRlIGZhaWxzLCB3ZSBkb24ndCBoYXZlIG1vcmUgZGF0YSBhbnl3YXkuCi0gIGlmIChudW1fcmVtYWluaW5nX2JpdHNfaW5fY3Vycl9ieXRlXyA9PSAwICYmICFVcGRhdGVDdXJyQnl0ZSgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gSWYgdGhlcmUgaXMgbm8gbW9yZSBSQlNQIGRhdGEsIHRoZW4gfGN1cnJfYnl0ZV98IGNvbnRhaW5zIHRoZSBzdG9wIGJpdCBhbmQKLSAgLy8gemVybyBwYWRkaW5nLiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgb3RoZXIgZGF0YSBpbnN0ZWFkLgotICAvLyAoV2UgZG9uJ3QgYWN0dWFsbHkgY2hlY2sgZm9yIHRoZSBzdG9wIGJpdCBpdHNlbGYsIGluc3RlYWQgdHJlYXRpbmcgdGhlCi0gIC8vIGludmFsaWQgY2FzZSBvZiBhbGwgdHJhaWxpbmcgemVyb3MgaWRlbnRpY2FsbHkpLgotICBpZiAoKGN1cnJfYnl0ZV8gJiAoKDEgPDwgKG51bV9yZW1haW5pbmdfYml0c19pbl9jdXJyX2J5dGVfIC0gMSkpIC0gMSkpICE9IDApCi0gICAgcmV0dXJuIHRydWU7Ci0KLSAgLy8gV2hpbGUgdGhlIHNwZWMgZGlzYWxsb3dzIGl0ICg3LjQuMTogIlRoZSBsYXN0IGJ5dGUgb2YgdGhlIE5BTCB1bml0IHNoYWxsCi0gIC8vIG5vdCBiZSBlcXVhbCB0byAweDAwIiksIHNvbWUgc3RyZWFtcyBoYXZlIHRyYWlsaW5nIG51bGwgYnl0ZXMgYW55d2F5LiBXZQotICAvLyBkb24ndCBoYW5kbGUgZW11bGF0aW9uIHByZXZlbnRpb24gc2VxdWVuY2VzIGJlY2F1c2UgSGFzTW9yZVJCU1BEYXRhKCkgaXMKLSAgLy8gbm90IHVzZWQgd2hlbiBwYXJzaW5nIHNsaWNlcyAod2hlcmUgY2FiYWNfemVyb193b3JkIGVsZW1lbnRzIGFyZSBsZWdhbCkuCi0gIGZvciAob2ZmX3QgaSA9IDA7IGkgPCBieXRlc19sZWZ0XzsgaSsrKSB7Ci0gICAgaWYgKGRhdGFfW2ldICE9IDApIHJldHVybiB0cnVlOwotICB9Ci0KLSAgYnl0ZXNfbGVmdF8gPSAwOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXNpemVfdCBIMjY0Qml0UmVhZGVyOjpOdW1FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNSZWFkKCkgewotICByZXR1cm4gZW11bGF0aW9uX3ByZXZlbnRpb25fYnl0ZXNfOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0X3JlYWRlci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NTEzYTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGFuIEgyNjQgQW5uZXgtQiB2aWRlbyBzdHJlYW0gcGFyc2VyLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfQklUX1JFQURFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY0X0JJVF9SRUFERVJfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQSBjbGFzcyB0byBwcm92aWRlIGJpdC1ncmFudWxhcml0eSByZWFkaW5nIG9mIEguMjY0IHN0cmVhbXMuCi0vLyBUaGlzIGlzIG5vdCBhIGdlbmVyaWMgYml0IHJlYWRlciBjbGFzcywgYXMgaXQgdGFrZXMgaW50byBhY2NvdW50Ci0vLyBILjI2NCBzdHJlYW0tc3BlY2lmaWMgY29uc3RyYWludHMsIHN1Y2ggYXMgc2tpcHBpbmcgZW11bGF0aW9uLXByZXZlbnRpb24KLS8vIGJ5dGVzIGFuZCBzdG9wIGJpdHMuIFNlZSBzcGVjIGZvciBtb3JlIGRldGFpbHMuCi1jbGFzcyBNRURJQV9FWFBPUlQgSDI2NEJpdFJlYWRlciB7Ci0gcHVibGljOgotICBIMjY0Qml0UmVhZGVyKCk7Ci0gIH5IMjY0Qml0UmVhZGVyKCk7Ci0KLSAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVhZGVyIHRvIHN0YXJ0IHJlYWRpbmcgYXQgfGRhdGF8LCB8c2l6ZXwgYmVpbmcgc2l6ZQotICAvLyBvZiB8ZGF0YXwgaW4gYnl0ZXMuCi0gIC8vIFJldHVybiBmYWxzZSBvbiBpbnN1ZmZpY2llbnQgc2l6ZSBvZiBzdHJlYW0uLgotICAvLyBUT0RPKHBvc2NpYWssZmlzY2htYW4pOiBjb25zaWRlciByZXBsYWNpbmcgSW5pdGlhbGl6ZSgpIHdpdGgKLSAgLy8gaGVhcC1hbGxvY2F0aW5nIGFuZCBjcmVhdGluZyBiaXQgcmVhZGVycyBvbiBkZW1hbmQgaW5zdGVhZC4KLSAgYm9vbCBJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIG9mZl90IHNpemUpOwotCi0gIC8vIFJlYWQgfG51bV9iaXRzfCBuZXh0IGJpdHMgZnJvbSBzdHJlYW0gYW5kIHJldHVybiBpbiB8Km91dHwsIGZpcnN0IGJpdAotICAvLyBmcm9tIHRoZSBzdHJlYW0gc3RhcnRpbmcgYXQgfG51bV9iaXRzfCBwb3NpdGlvbiBpbiB8Km91dHwuCi0gIC8vIHxudW1fYml0c3wgbWF5IGJlIDEtMzIsIGluY2x1c2l2ZS4KLSAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBnaXZlbiBudW1iZXIgb2YgYml0cyBjYW5ub3QgYmUgcmVhZCAobm90IGVub3VnaAotICAvLyBiaXRzIGluIHRoZSBzdHJlYW0pLCB0cnVlIG90aGVyd2lzZS4KLSAgYm9vbCBSZWFkQml0cyhpbnQgbnVtX2JpdHMsIGludCogb3V0KTsKLQotICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGxlZnQgaW4gdGhlIHN0cmVhbS4KLSAgb2ZmX3QgTnVtQml0c0xlZnQoKTsKLQotICAvLyBTZWUgdGhlIGRlZmluaXRpb24gb2YgbW9yZV9yYnNwX2RhdGEoKSBpbiBzcGVjLgotICBib29sIEhhc01vcmVSQlNQRGF0YSgpOwotCi0gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVtdWxhdGlvbiBwcmV2ZW50aW9uIGJ5dGVzIGFscmVhZHkgcmVhZC4KLSAgc2l6ZV90IE51bUVtdWxhdGlvblByZXZlbnRpb25CeXRlc1JlYWQoKTsKLQotIHByaXZhdGU6Ci0gIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgYnl0ZSwgbG9hZGluZyBpdCBpbnRvIGN1cnJfYnl0ZV8uCi0gIC8vIFJldHVybiBmYWxzZSBvbiBlbmQgb2Ygc3RyZWFtLgotICBib29sIFVwZGF0ZUN1cnJCeXRlKCk7Ci0KLSAgLy8gUG9pbnRlciB0byB0aGUgbmV4dCB1bnJlYWQgKG5vdCBpbiBjdXJyX2J5dGVfKSBieXRlIGluIHRoZSBzdHJlYW0uCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGFfOwotCi0gIC8vIEJ5dGVzIGxlZnQgaW4gdGhlIHN0cmVhbSAod2l0aG91dCB0aGUgY3Vycl9ieXRlXykuCi0gIG9mZl90IGJ5dGVzX2xlZnRfOwotCi0gIC8vIENvbnRlbnRzIG9mIHRoZSBjdXJyZW50IGJ5dGU7IGZpcnN0IHVucmVhZCBiaXQgc3RhcnRpbmcgYXQgcG9zaXRpb24KLSAgLy8gOCAtIG51bV9yZW1haW5pbmdfYml0c19pbl9jdXJyX2J5dGVfIGZyb20gTVNCLgotICBpbnQgY3Vycl9ieXRlXzsKLQotICAvLyBOdW1iZXIgb2YgYml0cyByZW1haW5pbmcgaW4gY3Vycl9ieXRlXwotICBpbnQgbnVtX3JlbWFpbmluZ19iaXRzX2luX2N1cnJfYnl0ZV87Ci0KLSAgLy8gVXNlZCBpbiBlbXVsYXRpb24gcHJldmVudGlvbiB0aHJlZSBieXRlIGRldGVjdGlvbiAoc2VlIHNwZWMpLgotICAvLyBJbml0aWFsbHkgc2V0IHRvIDB4ZmZmZiB0byBhY2NlcHQgYWxsIGluaXRpYWwgdHdvLWJ5dGUgc2VxdWVuY2VzLgotICBpbnQgcHJldl90d29fYnl0ZXNfOwotCi0gIC8vIE51bWJlciBvZiBlbXVsYXRpb24gcHJldmVudGF0aW9uIGJ5dGVzICgweDAwMDAwMykgd2UgbWV0LgotICBzaXplX3QgZW11bGF0aW9uX3ByZXZlbnRpb25fYnl0ZXNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIMjY0Qml0UmVhZGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfQklUX1JFQURFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDRlMGZhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0X3JlYWRlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0X3JlYWRlci5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRFU1QoSDI2NEJpdFJlYWRlclRlc3QsIFJlYWRTdHJlYW1XaXRob3V0RXNjYXBlQW5kVHJhaWxpbmdaZXJvQnl0ZXMpIHsKLSAgSDI2NEJpdFJlYWRlciByZWFkZXI7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmJzcFtdID0gezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YTB9OwotICBpbnQgZHVtbXkgPSAwOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlci5Jbml0aWFsaXplKHJic3AsIHNpemVvZihyYnNwKSkpOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlci5SZWFkQml0cygxLCAmZHVtbXkpKTsKLSAgRVhQRUNUX0VRKGR1bW15LCAweDAwKTsKLSAgRVhQRUNUX0VRKHJlYWRlci5OdW1CaXRzTGVmdCgpLCA0Nyk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci5IYXNNb3JlUkJTUERhdGEoKSk7Ci0KLSAgRVhQRUNUX1RSVUUocmVhZGVyLlJlYWRCaXRzKDgsICZkdW1teSkpOwotICBFWFBFQ1RfRVEoZHVtbXksIDB4MDIpOwotICBFWFBFQ1RfRVEocmVhZGVyLk51bUJpdHNMZWZ0KCksIDM5KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLkhhc01vcmVSQlNQRGF0YSgpKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJpdHMoMzEsICZkdW1teSkpOwotICBFWFBFQ1RfRVEoZHVtbXksIDB4MjM0NTY3ODkpOwotICBFWFBFQ1RfRVEocmVhZGVyLk51bUJpdHNMZWZ0KCksIDgpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIuSGFzTW9yZVJCU1BEYXRhKCkpOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlci5SZWFkQml0cygxLCAmZHVtbXkpKTsKLSAgRVhQRUNUX0VRKGR1bW15LCAxKTsKLSAgRVhQRUNUX0VRKHJlYWRlci5OdW1CaXRzTGVmdCgpLCA3KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLkhhc01vcmVSQlNQRGF0YSgpKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJpdHMoMSwgJmR1bW15KSk7Ci0gIEVYUEVDVF9FUShkdW1teSwgMCk7Ci0gIEVYUEVDVF9FUShyZWFkZXIuTnVtQml0c0xlZnQoKSwgNik7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIuSGFzTW9yZVJCU1BEYXRhKCkpOwotfQotCi1URVNUKEgyNjRCaXRSZWFkZXJUZXN0LCBTaW5nbGVCeXRlU3RyZWFtKSB7Ci0gIEgyNjRCaXRSZWFkZXIgcmVhZGVyOwotICBjb25zdCB1bnNpZ25lZCBjaGFyIHJic3BbXSA9IHsweDE4fTsKLSAgaW50IGR1bW15ID0gMDsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuSW5pdGlhbGl6ZShyYnNwLCBzaXplb2YocmJzcCkpKTsKLSAgRVhQRUNUX0VRKHJlYWRlci5OdW1CaXRzTGVmdCgpLCA4KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLkhhc01vcmVSQlNQRGF0YSgpKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJpdHMoNCwgJmR1bW15KSk7Ci0gIEVYUEVDVF9FUShkdW1teSwgMHgwMSk7Ci0gIEVYUEVDVF9FUShyZWFkZXIuTnVtQml0c0xlZnQoKSwgNCk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIuSGFzTW9yZVJCU1BEYXRhKCkpOwotfQotCi1URVNUKEgyNjRCaXRSZWFkZXJUZXN0LCBTdG9wQml0T2NjdXB5RnVsbEJ5dGUpIHsKLSAgSDI2NEJpdFJlYWRlciByZWFkZXI7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmJzcFtdID0gezB4YWIsIDB4ODB9OwotICBpbnQgZHVtbXkgPSAwOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlci5Jbml0aWFsaXplKHJic3AsIHNpemVvZihyYnNwKSkpOwotICBFWFBFQ1RfRVEocmVhZGVyLk51bUJpdHNMZWZ0KCksIDE2KTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLkhhc01vcmVSQlNQRGF0YSgpKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJpdHMoOCwgJmR1bW15KSk7Ci0gIEVYUEVDVF9FUShkdW1teSwgMHhhYik7Ci0gIEVYUEVDVF9FUShyZWFkZXIuTnVtQml0c0xlZnQoKSwgOCk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIuSGFzTW9yZVJCU1BEYXRhKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgzZDY2OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRzdHJlYW1fYnVmZmVyLmgiCi0KLSNpbmNsdWRlICJiYXNlL3N5c19ieXRlb3JkZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotSDI2NEJpdHN0cmVhbUJ1ZmZlcjo6SDI2NEJpdHN0cmVhbUJ1ZmZlcigpIDogZGF0YV8oTlVMTCkgeyBSZXNldCgpOyB9Ci0KLUgyNjRCaXRzdHJlYW1CdWZmZXI6On5IMjY0Qml0c3RyZWFtQnVmZmVyKCkgewotICBTYk1lbW9yeURlYWxsb2NhdGUoZGF0YV8pOwotICBkYXRhXyA9IE5VTEw7Ci19Ci0KLXZvaWQgSDI2NEJpdHN0cmVhbUJ1ZmZlcjo6UmVzZXQoKSB7Ci0gIFNiTWVtb3J5RGVhbGxvY2F0ZShkYXRhXyk7Ci0gIGRhdGFfID0gTlVMTDsKLQotICBjYXBhY2l0eV8gPSAwOwotICBwb3NfID0gMDsKLSAgcmVnXyA9IDA7Ci0KLSAgR3JvdygpOwotCi0gIGJpdHNfbGVmdF9pbl9yZWdfID0ga1JlZ0JpdFNpemU7Ci19Ci0KLXZvaWQgSDI2NEJpdHN0cmVhbUJ1ZmZlcjo6R3JvdygpIHsKLSAgZGF0YV8gPQotICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KFNiTWVtb3J5UmVhbGxvY2F0ZShkYXRhXywgY2FwYWNpdHlfICsga0dyb3dCeXRlcykpOwotICBDSEVDSyhkYXRhXykgPDwgIkZhaWxlZCBncm93aW5nIHRoZSBidWZmZXIiOwotICBjYXBhY2l0eV8gKz0ga0dyb3dCeXRlczsKLX0KLQotdm9pZCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpGbHVzaFJlZygpIHsKLSAgLy8gRmx1c2ggYWxsIGJ5dGVzIHRoYXQgaGF2ZSBhdCBsZWFzdCBvbmUgYml0IGNhY2hlZCwgYnV0IG5vdCBtb3JlCi0gIC8vIChvbiBGbHVzaCgpLCByZWdfIG1heSBub3QgYmUgZnVsbCkuCi0gIHNpemVfdCBiaXRzX2luX3JlZyA9IGtSZWdCaXRTaXplIC0gYml0c19sZWZ0X2luX3JlZ187Ci0gIGlmIChiaXRzX2luX3JlZyA9PSAwKSByZXR1cm47Ci0KLSAgc2l6ZV90IGJ5dGVzX2luX3JlZyA9IChiaXRzX2luX3JlZyArIDcpIC8gODsKLSAgcmVnXyA8PD0gKGtSZWdCaXRTaXplIC0gYml0c19pbl9yZWcpOwotCi0gIC8vIENvbnZlcnQgdG8gTVNCIGFuZCBhcHBlbmQgYXMgc3VjaCB0byB0aGUgc3RyZWFtLgotICByZWdfID0gYmFzZTo6SG9zdFRvTmV0NjQocmVnXyk7Ci0KLSAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNwYWNlLiBHcm93KCkgd2lsbCBDSEVDSygpIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAgaWYgKHBvc18gKyBieXRlc19pbl9yZWcgPCBjYXBhY2l0eV8pIEdyb3coKTsKLQotICBtZW1jcHkoZGF0YV8gKyBwb3NfLCAmcmVnXywgYnl0ZXNfaW5fcmVnKTsKLSAgcG9zXyArPSBieXRlc19pbl9yZWc7Ci0KLSAgcmVnXyA9IDA7Ci0gIGJpdHNfbGVmdF9pbl9yZWdfID0ga1JlZ0JpdFNpemU7Ci19Ci0KLXZvaWQgSDI2NEJpdHN0cmVhbUJ1ZmZlcjo6QXBwZW5kVTY0KHNpemVfdCBudW1fYml0cywgdWludDY0X3QgdmFsKSB7Ci0gIENIRUNLX0xFKG51bV9iaXRzLCBrUmVnQml0U2l6ZSk7Ci0KLSAgd2hpbGUgKG51bV9iaXRzID4gMCkgewotICAgIGlmIChiaXRzX2xlZnRfaW5fcmVnXyA9PSAwKSBGbHVzaFJlZygpOwotCi0gICAgdWludDY0X3QgYml0c190b193cml0ZSA9Ci0gICAgICAgIG51bV9iaXRzID4gYml0c19sZWZ0X2luX3JlZ18gPyBiaXRzX2xlZnRfaW5fcmVnXyA6IG51bV9iaXRzOwotICAgIHVpbnQ2NF90IHZhbF90b193cml0ZSA9ICh2YWwgPj4gKG51bV9iaXRzIC0gYml0c190b193cml0ZSkpOwotICAgIGlmIChiaXRzX3RvX3dyaXRlIDwgNjQpIHZhbF90b193cml0ZSAmPSAoKDF1bGwgPDwgYml0c190b193cml0ZSkgLSAxKTsKLSAgICByZWdfIDw8PSBiaXRzX3RvX3dyaXRlOwotICAgIHJlZ18gfD0gdmFsX3RvX3dyaXRlOwotICAgIG51bV9iaXRzIC09IGJpdHNfdG9fd3JpdGU7Ci0gICAgYml0c19sZWZ0X2luX3JlZ18gLT0gYml0c190b193cml0ZTsKLSAgfQotfQotCi12b2lkIEgyNjRCaXRzdHJlYW1CdWZmZXI6OkFwcGVuZEJvb2woYm9vbCB2YWwpIHsKLSAgaWYgKGJpdHNfbGVmdF9pbl9yZWdfID09IDApIEZsdXNoUmVnKCk7Ci0KLSAgcmVnXyA8PD0gMTsKLSAgcmVnXyB8PSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZhbCkgJiAxKTsKLSAgLS1iaXRzX2xlZnRfaW5fcmVnXzsKLX0KLQotdm9pZCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpBcHBlbmRTRShpbnQgdmFsKSB7Ci0gIGlmICh2YWwgPiAwKQotICAgIEFwcGVuZFVFKHZhbCAqIDIgLSAxKTsKLSAgZWxzZQotICAgIEFwcGVuZFVFKC12YWwgKiAyKTsKLX0KLQotdm9pZCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpBcHBlbmRVRSh1bnNpZ25lZCBpbnQgdmFsKSB7Ci0gIHNpemVfdCBudW1femVyb3MgPSAwOwotICB1bnNpZ25lZCBpbnQgdiA9IHZhbCArIDE7Ci0KLSAgd2hpbGUgKHYgPiAxKSB7Ci0gICAgdiA+Pj0gMTsKLSAgICArK251bV96ZXJvczsKLSAgfQotCi0gIEFwcGVuZEJpdHMobnVtX3plcm9zLCAwKTsKLSAgQXBwZW5kQml0cyhudW1femVyb3MgKyAxLCB2YWwgKyAxKTsKLX0KLQotI2RlZmluZSBEQ0hFQ0tfRklOSVNIRUQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRENIRUNLX0VRKGJpdHNfbGVmdF9pbl9yZWdfLCBrUmVnQml0U2l6ZSkgPDwgIlBlbmRpbmcgYml0cyBub3QgeWV0IHdyaXR0ZW4gIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byB0aGUgYnVmZmVyLCBjYWxsICIgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmluaXNoTkFMVSgpIGZpcnN0LiIKLQotdm9pZCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpCZWdpbk5BTFUoSDI2NE5BTFU6OlR5cGUgbmFsdV90eXBlLCBpbnQgbmFsX3JlZl9pZGMpIHsKLSAgRENIRUNLX0ZJTklTSEVEKCk7Ci0KLSAgRENIRUNLX0xFKG5hbHVfdHlwZSwgSDI2NE5BTFU6OmtFT1N0cmVhbSk7Ci0gIERDSEVDS19HRShuYWxfcmVmX2lkYywgMCk7Ci0gIERDSEVDS19MRShuYWxfcmVmX2lkYywgMyk7Ci0KLSAgQXBwZW5kQml0cygzMiwgMHgwMDAwMDAwMSk7Ci0gIEFwcGVuZEJpdHMoMSwgMCk7ICAvLyBmb3JiaWRkZW5femVyb19iaXQKLSAgQXBwZW5kQml0cygyLCBuYWxfcmVmX2lkYyk7Ci0gIEFwcGVuZEJpdHMoNSwgbmFsdV90eXBlKTsKLX0KLQotdm9pZCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpGaW5pc2hOQUxVKCkgewotICAvLyBSQlNQIHN0b3Agb25lIGJpdC4KLSAgQXBwZW5kQml0cygxLCAxKTsKLQotICAvLyBCeXRlLWFsaWdubWVudCB6ZXJvIGJpdHMuCi0gIEFwcGVuZEJpdHMoYml0c19sZWZ0X2luX3JlZ18gJSA4LCAwKTsKLQotICBpZiAoYml0c19sZWZ0X2luX3JlZ18gIT0ga1JlZ0JpdFNpemUpIEZsdXNoUmVnKCk7Ci19Ci0KLXNpemVfdCBIMjY0Qml0c3RyZWFtQnVmZmVyOjpCeXRlc0luQnVmZmVyKCkgewotICBEQ0hFQ0tfRklOSVNIRUQoKTsKLSAgcmV0dXJuIHBvc187Ci19Ci0KLXVpbnQ4X3QqIEgyNjRCaXRzdHJlYW1CdWZmZXI6OmRhdGEoKSB7Ci0gIERDSEVDSyhkYXRhXyk7Ci0gIERDSEVDS19GSU5JU0hFRCgpOwotCi0gIHJldHVybiBkYXRhXzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjNlYWRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBIMjY0Qml0c3RyZWFtQnVmZmVyIGNsYXNzIGZvcgotLy8gY29uc3RydWN0aW5nIHJhdyBiaXRzdHJlYW0gYnVmZmVycyBjb250YWluaW5nIE5BTCB1bml0cyBpbgotLy8gSC4yNjQgQW5uZXgtQiBzdHJlYW0gZm9ybWF0LgotLy8gU2VlIEguMjY0IHNwZWMgQW5uZXggQiBhbmQgY2hhcHRlciA3Zm9yIG1vcmUgZGV0YWlscy4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY0X0JJVFNUUkVBTV9CVUZGRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfSDI2NF9CSVRTVFJFQU1fQlVGRkVSX0hfCi0KLSNpbmNsdWRlICJiYXNlL2d0ZXN0X3Byb2RfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSG9sZHMgb25lIG9yIG1vcmUgTkFMVXMgYXMgYSByYXcgYml0c3RyZWFtIGJ1ZmZlciBpbiBILjI2NCBBbm5leC1CIGZvcm1hdC4KLS8vIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGN1cnJlbnRseSBkb2VzIE5PVCBpbnNlcnQgZW11bGF0aW9uIHByZXZlbnRpb24KLS8vIHRocmVlLWJ5dGUgc2VxdWVuY2VzIChzcGVjIDcuMy4xKS4KLWNsYXNzIE1FRElBX0VYUE9SVCBIMjY0Qml0c3RyZWFtQnVmZmVyIHsKLSBwdWJsaWM6Ci0gIEgyNjRCaXRzdHJlYW1CdWZmZXIoKTsKLSAgfkgyNjRCaXRzdHJlYW1CdWZmZXIoKTsKLQotICAvLyBEaXNjYXJkIGFsbCBkYXRhIGFuZCByZXNldCB0aGUgYnVmZmVyIGZvciByZXVzZS4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIEFwcGVuZCB8bnVtX2JpdHN8IGJpdHMgdG8gdGhlIHN0cmVhbSBmcm9tIHx2YWx8LgotICAvLyB8dmFsfCBpcyBpbnRlcnByZXRlZCBpbiB0aGUgaG9zdCBlbmRpYW5uZXNzLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgdm9pZCBBcHBlbmRCaXRzKHNpemVfdCBudW1fYml0cywgVCB2YWwpIHsKLSAgICBBcHBlbmRVNjQobnVtX2JpdHMsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWwpKTsKLSAgfQotCi0gIHZvaWQgQXBwZW5kQml0cyhzaXplX3QgbnVtX2JpdHMsIGJvb2wgdmFsKSB7Ci0gICAgRENIRUNLX0VRKG51bV9iaXRzLCAxdWwpOwotICAgIEFwcGVuZEJvb2wodmFsKTsKLSAgfQotCi0gIC8vIEFwcGVuZCBhIG9uZS1iaXQgYm9vbC9mbGFnIHZhbHVlIHx2YWx8IHRvIHRoZSBzdHJlYW0uCi0gIHZvaWQgQXBwZW5kQm9vbChib29sIHZhbCk7Ci0KLSAgLy8gQXBwZW5kIGEgc2lnbmVkIHZhbHVlIGluIHx2YWx8IGluIEV4cC1Hb2xvbWIgY29kZS4KLSAgdm9pZCBBcHBlbmRTRShpbnQgdmFsKTsKLQotICAvLyBBcHBlbmQgYW4gdW5zaWduZWQgdmFsdWUgaW4gfHZhbHwgaW4gRXhwLUdvbG9tYiBjb2RlLgotICB2b2lkIEFwcGVuZFVFKHVuc2lnbmVkIGludCB2YWwpOwotCi0gIC8vIFN0YXJ0IGEgbmV3IE5BTFUgb2YgdHlwZSB8bmFsdV90eXBlfCBhbmQgd2l0aCBnaXZlbiB8bmFsX3JlZl9pZGN8Ci0gIC8vIChzZWUgc3BlYykuIE5vdGUsIHRoYXQgdW50aWwgRmluaXNoTkFMVSgpIGlzIGNhbGxlZCwgc29tZSBvZiB0aGUgYml0cwotICAvLyBtYXkgbm90IGJlIGZsdXNoZWQgaW50byB0aGUgYnVmZmVyIGFuZCB0aGUgZGF0YSB3aWxsIG5vdCBiZSBjb3JyZWN0bHkKLSAgLy8gYWxpZ25lZCB3aXRoIHRyYWlsaW5nIGJpdHMuCi0gIHZvaWQgQmVnaW5OQUxVKEgyNjROQUxVOjpUeXBlIG5hbHVfdHlwZSwgaW50IG5hbF9yZWZfaWRjKTsKLQotICAvLyBGaW5pc2ggY3VycmVudCBOQUxVLiBUaGlzIHdpbGwgZmx1c2ggYW55IGNhY2hlZCBiaXRzIGFuZCBjb3JyZWN0bHkgYWxpZ24KLSAgLy8gdGhlIGJ1ZmZlciB3aXRoIFJCU1AgdHJhaWxpbmcgYml0cy4gVGhpcyBNVVNUIGJlIGNhbGxlZCBmb3IgdGhlIHN0cmVhbQotICAvLyByZXR1cm5lZCBieSBkYXRhKCkgdG8gYmUgY29ycmVjdC4KLSAgdm9pZCBGaW5pc2hOQUxVKCk7Ci0KLSAgLy8gUmV0dXJuIG51bWJlciBvZiBmdWxsIGJ5dGVzIGluIHRoZSBzdHJlYW0uIE5vdGUgdGhhdCBGaW5pc2hOQUxVKCkgaGFzIHRvCi0gIC8vIGJlIGNhbGxlZCB0byBmbHVzaCBjYWNoZWQgYml0cywgb3IgdGhlIHJldHVybiB2YWx1ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0uCi0gIHNpemVfdCBCeXRlc0luQnVmZmVyKCk7Ci0KLSAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RyZWFtLiBGaW5pc2hOQUxVKCkgbXVzdCBiZSBjYWxsZWQgYmVmb3JlCi0gIC8vIGFjY2Vzc2luZyB0aGUgc3RyZWFtLCBvdGhlcndpc2Ugc29tZSBiaXRzIG1heSBzdGlsbCBiZSBjYWNoZWQgYW5kIG5vdAotICAvLyBpbiB0aGUgYnVmZmVyLgotICB1aW50OF90KiBkYXRhKCk7Ci0KLSBwcml2YXRlOgotICBGUklFTkRfVEVTVF9BTExfUFJFRklYRVMoSDI2NEJpdHN0cmVhbUJ1ZmZlckFwcGVuZEJpdHNUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwZW5kQW5kVmVyaWZ5Qml0cyk7Ci0KLSAgLy8gQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkgKGtHcm93Qnl0ZXMgYnl0ZXMpIGZvciB0aGUgYnVmZmVyLgotICB2b2lkIEdyb3coKTsKLQotICAvLyBBcHBlbmQgfG51bV9iaXRzfCBiaXRzIGZyb20gVTY0IHZhbHVlIHx2YWx8IChpbiBob3N0IGVuZGlhbm5lc3MpLgotICB2b2lkIEFwcGVuZFU2NChzaXplX3QgbnVtX2JpdHMsIHVpbnQ2NF90IHZhbCk7Ci0KLSAgLy8gRmx1c2ggYW55IGNhY2hlZCBiaXRzIGluIHRoZSByZWcgd2l0aCBieXRlIGdyYW51bGFyaXR5LCBpLmUuIGVub3VnaAotICAvLyBieXRlcyB0byBmbHVzaCBhbGwgcGVuZGluZyBiaXRzLCBidXQgbm90IG1vcmUuCi0gIHZvaWQgRmx1c2hSZWcoKTsKLQotICB0eXBlZGVmIHVpbnQ2NF90IFJlZ1R5cGU7Ci0gIGVudW0gewotICAgIC8vIFNpemVzIG9mIHJlZ18uCi0gICAga1JlZ0J5dGVTaXplID0gc2l6ZW9mKFJlZ1R5cGUpLAotICAgIGtSZWdCaXRTaXplID0ga1JlZ0J5dGVTaXplICogOCwKLSAgICAvLyBBbW91bnQgb2YgYnl0ZXMgdG8gZ3JvdyB0aGUgYnVmZmVyIGJ5IHdoZW4gd2UgcnVuIG91dCBvZgotICAgIC8vIHByZXZpb3VzbHktYWxsb2NhdGVkIG1lbW9yeSBmb3IgaXQuCi0gICAga0dyb3dCeXRlcyA9IDQwOTYsCi0gIH07Ci0KLSAgQ09NUElMRV9BU1NFUlQoa0dyb3dCeXRlcyA+PSBrUmVnQnl0ZVNpemUsCi0gICAgICAgICAgICAgICAgIGtHcm93Qnl0ZXNfbXVzdF9iZV9sYXJnZXJfdGhhbl9rUmVnQnl0ZVNpemUpOwotCi0gIC8vIFVudXNlZCBiaXRzIGxlZnQgaW4gcmVnXy4KLSAgc2l6ZV90IGJpdHNfbGVmdF9pbl9yZWdfOwotCi0gIC8vIENhY2hlIGZvciBhcHBlbmRlZCBiaXRzLiBCaXRzIGFyZSBmbHVzaGVkIHRvIGRhdGFfIHdpdGgga1JlZ0J5dGVTaXplCi0gIC8vIGdyYW51bGFyaXR5LCBpLmUuIHdoZW4gcmVnXyBiZWNvbWVzIGZ1bGwsIG9yIHdoZW4gYW4gZXhwbGljaXQgRmx1c2hSZWcoKQotICAvLyBpcyBjYWxsZWQuCi0gIFJlZ1R5cGUgcmVnXzsKLQotICAvLyBDdXJyZW50IGNhcGFjaXR5IG9mIGRhdGFfLCBpbiBieXRlcy4KLSAgc2l6ZV90IGNhcGFjaXR5XzsKLQotICAvLyBDdXJyZW50IGJ5dGUgb2Zmc2V0IGluIGRhdGFfIChwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHVud3JpdHRlbiBiaXRzKS4KLSAgc2l6ZV90IHBvc187Ci0KLSAgLy8gQnVmZmVyIGZvciBzdHJlYW0gZGF0YS4KLSAgdWludDhfdCogZGF0YV87Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY0X0JJVFNUUkVBTV9CVUZGRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM5OGVmMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotY29uc3QgdWludDY0X3Qga1Rlc3RQYXR0ZXJuID0gMHhmZWRjYmEwOTg3NjU0MzIxOwotfQotCi1jbGFzcyBIMjY0Qml0c3RyZWFtQnVmZmVyQXBwZW5kQml0c1Rlc3QKLSAgICA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08dWludDY0X3Q+IHt9OwotCi0vLyBUT0RPKHBvc2NpYWspOiBNb3JlIHRlc3RzIQotCi1URVNUX1AoSDI2NEJpdHN0cmVhbUJ1ZmZlckFwcGVuZEJpdHNUZXN0LCBBcHBlbmRBbmRWZXJpZnlCaXRzKSB7Ci0gIEgyNjRCaXRzdHJlYW1CdWZmZXIgYjsKLSAgdWludDY0X3QgbnVtX2JpdHMgPSBHZXRQYXJhbSgpOwotICAvLyBUT0RPKHBvc2NpYWspOiBUZXN0cyBmb3IgPjY0IGJpdHMuCi0gIEFTU0VSVF9MRShudW1fYml0cywgNjR1KTsKLSAgdWludDY0X3QgbnVtX2J5dGVzID0gKG51bV9iaXRzICsgNykgLyA4OwotCi0gIGIuQXBwZW5kQml0cyhudW1fYml0cywga1Rlc3RQYXR0ZXJuKTsKLSAgYi5GbHVzaFJlZygpOwotCi0gIEVYUEVDVF9FUShiLkJ5dGVzSW5CdWZmZXIoKSwgbnVtX2J5dGVzKTsKLQotICB1aW50OF90KiBwdHIgPSBiLmRhdGEoKTsKLSAgdWludDY0X3QgZ290ID0gMDsKLSAgdWludDY0X3QgZXhwZWN0ZWQgPSBrVGVzdFBhdHRlcm47Ci0KLSAgaWYgKG51bV9iaXRzIDwgNjQpIGV4cGVjdGVkICY9ICgoMXVsbCA8PCBudW1fYml0cykgLSAxKTsKLQotICB3aGlsZSAobnVtX2JpdHMgPiA4KSB7Ci0gICAgZ290IHw9ICgqcHRyICYgMHhmZik7Ci0gICAgbnVtX2JpdHMgLT0gODsKLSAgICBnb3QgPDw9IChudW1fYml0cyA+IDggPyA4IDogbnVtX2JpdHMpOwotICAgIHB0cisrOwotICB9Ci0gIGlmIChudW1fYml0cyA+IDApIHsKLSAgICB1aW50NjRfdCB0ZW1wID0gKCpwdHIgJiAweGZmKTsKLSAgICB0ZW1wID4+PSAoOCAtIG51bV9iaXRzKTsKLSAgICBnb3QgfD0gdGVtcDsKLSAgfQotICBFWFBFQ1RfRVEoZ290LCBleHBlY3RlZCkgPDwgc3RkOjpoZXggPDwgIjB4IiA8PCBnb3QgPDwgIiB2cyAweCIgPDwgZXhwZWN0ZWQ7Ci19Ci0KLUlOU1RBTlRJQVRFX1RFU1RfQ0FTRV9QKEFwcGVuZE51bUJpdHMsIEgyNjRCaXRzdHJlYW1CdWZmZXJBcHBlbmRCaXRzVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6UmFuZ2Uoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oNjUpKSk7Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZTY1OGMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzk3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3JlY3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotYm9vbCBIMjY0U2xpY2VIZWFkZXI6OklzUFNsaWNlKCkgY29uc3QgeyByZXR1cm4gKHNsaWNlX3R5cGUgJSA1ID09IGtQU2xpY2UpOyB9Ci0KLWJvb2wgSDI2NFNsaWNlSGVhZGVyOjpJc0JTbGljZSgpIGNvbnN0IHsgcmV0dXJuIChzbGljZV90eXBlICUgNSA9PSBrQlNsaWNlKTsgfQotCi1ib29sIEgyNjRTbGljZUhlYWRlcjo6SXNJU2xpY2UoKSBjb25zdCB7IHJldHVybiAoc2xpY2VfdHlwZSAlIDUgPT0ga0lTbGljZSk7IH0KLQotYm9vbCBIMjY0U2xpY2VIZWFkZXI6OklzU1BTbGljZSgpIGNvbnN0IHsgcmV0dXJuIChzbGljZV90eXBlICUgNSA9PSBrU1BTbGljZSk7IH0KLQotYm9vbCBIMjY0U2xpY2VIZWFkZXI6OklzU0lTbGljZSgpIGNvbnN0IHsgcmV0dXJuIChzbGljZV90eXBlICUgNSA9PSBrU0lTbGljZSk7IH0KLQotSDI2NE5BTFU6OkgyNjROQUxVKCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KLQotSDI2NFNQUzo6SDI2NFNQUygpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9Ci0KLS8vIEJhc2VkIG9uIFQtUkVDLUguMjY0IDcuNC4yLjEuMSwgIlNlcXVlbmNlIHBhcmFtZXRlciBzZXQgZGF0YSBzZW1hbnRpY3MiLAotLy8gYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5pdHUuaW50L3JlYy9ULVJFQy1ILjI2NC4KLWJhc2U6Ok9wdGlvbmFsPG1hdGg6OlNpemU+IEgyNjRTUFM6OkdldENvZGVkU2l6ZSgpIGNvbnN0IHsKLSAgLy8gSW50ZXJsYWNlZCBmcmFtZXMgYXJlIHR3aWNlIHRoZSBoZWlnaHQgb2YgZWFjaCBmaWVsZC4KLSAgY29uc3QgaW50IG1iX3VuaXQgPSAxNjsKLSAgaW50IG1hcF91bml0ID0gZnJhbWVfbWJzX29ubHlfZmxhZyA/IDE2IDogMzI7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHZhbHVlcyBhcmUgbm90IHRvbyBsYXJnZSBiZWZvcmUgbXVsdGlwbHlpbmcgdGhlbS4KLSAgLy8gVE9ETzogVGhlc2UgbGltaXRzIGNvdWxkIGJlIG11Y2ggc21hbGxlci4gVGhlIGN1cnJlbnRseS1sYXJnZXN0IHNwZWNpZmllZAotICAvLyBsaW1pdCAoZXhjbHVkaW5nIFNWQywgbXVsdGl2aWV3LCBldGMuLCB3aGljaCBJIGRpZG4ndCBib3RoZXIgdG8gcmVhZCkgaXMKLSAgLy8gNTQzIG1hY3JvYmxvY2tzIChzZWN0aW9uIEEuMy4xKS4KLSAgaW50IG1heF9tYl9taW51czEgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8gbWJfdW5pdCAtIDE7Ci0gIGludCBtYXhfbWFwX3VuaXRzX21pbnVzMSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBtYXBfdW5pdCAtIDE7Ci0gIGlmIChwaWNfd2lkdGhfaW5fbWJzX21pbnVzMSA+IG1heF9tYl9taW51czEgfHwKLSAgICAgIHBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSA+IG1heF9tYXBfdW5pdHNfbWludXMxKSB7Ci0gICAgRFZMT0coMSkgPDwgIkNvZGVkIHNpemUgaXMgdG9vIGxhcmdlLiI7Ci0gICAgcmV0dXJuIGJhc2U6Om51bGxvcHQ7Ci0gIH0KLQotICByZXR1cm4gbWF0aDo6U2l6ZShtYl91bml0ICogKHBpY193aWR0aF9pbl9tYnNfbWludXMxICsgMSksCi0gICAgICAgICAgICAgICAgICAgIG1hcF91bml0ICogKHBpY19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSArIDEpKTsKLX0KLQotLy8gQWxzbyBiYXNlZCBvbiBzZWN0aW9uIDcuNC4yLjEuMS4KLWJhc2U6Ok9wdGlvbmFsPG1hdGg6OlJlY3Q+IEgyNjRTUFM6OkdldFZpc2libGVSZWN0KCkgY29uc3QgewotICBiYXNlOjpPcHRpb25hbDxtYXRoOjpTaXplPiBjb2RlZF9zaXplID0gR2V0Q29kZWRTaXplKCk7Ci0gIGlmICghY29kZWRfc2l6ZSkgcmV0dXJuIGJhc2U6Om51bGxvcHQ7Ci0KLSAgaWYgKCFmcmFtZV9jcm9wcGluZ19mbGFnKSByZXR1cm4gbWF0aDo6UmVjdChjb2RlZF9zaXplLnZhbHVlKCkpOwotCi0gIGludCBjcm9wX3VuaXRfeDsKLSAgaW50IGNyb3BfdW5pdF95OwotICBpZiAoY2hyb21hX2FycmF5X3R5cGUgPT0gMCkgewotICAgIGNyb3BfdW5pdF94ID0gMTsKLSAgICBjcm9wX3VuaXRfeSA9IGZyYW1lX21ic19vbmx5X2ZsYWcgPyAxIDogMjsKLSAgfSBlbHNlIHsKLSAgICAvLyBTZWN0aW9uIDYuMi4KLSAgICAvLyB8Y2hyb21hX2Zvcm1hdF9pZGN8IG1heSBiZToKLSAgICAvLyAgIDEgPT4gNDoyOjAKLSAgICAvLyAgIDIgPT4gNDoyOjIKLSAgICAvLyAgIDMgPT4gNDo0OjQKLSAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaGFzIHxjaHJvbWFfYXJyYXlfdHlwZXwgPT0gMC4KLSAgICBpbnQgc3ViX3dpZHRoX2MgPSBjaHJvbWFfZm9ybWF0X2lkYyA+IDIgPyAxIDogMjsKLSAgICBpbnQgc3ViX2hlaWdodF9jID0gY2hyb21hX2Zvcm1hdF9pZGMgPiAxID8gMSA6IDI7Ci0gICAgY3JvcF91bml0X3ggPSBzdWJfd2lkdGhfYzsKLSAgICBjcm9wX3VuaXRfeSA9IHN1Yl9oZWlnaHRfYyAqIChmcmFtZV9tYnNfb25seV9mbGFnID8gMSA6IDIpOwotICB9Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHZhbHVlcyBhcmUgbm90IHRvbyBsYXJnZSBiZWZvcmUgbXVsdGlwbHlpbmcuCi0gIGlmIChjb2RlZF9zaXplLT53aWR0aCgpIC8gY3JvcF91bml0X3ggPCBmcmFtZV9jcm9wX2xlZnRfb2Zmc2V0IHx8Ci0gICAgICBjb2RlZF9zaXplLT53aWR0aCgpIC8gY3JvcF91bml0X3ggPCBmcmFtZV9jcm9wX3JpZ2h0X29mZnNldCB8fAotICAgICAgY29kZWRfc2l6ZS0+aGVpZ2h0KCkgLyBjcm9wX3VuaXRfeSA8IGZyYW1lX2Nyb3BfdG9wX29mZnNldCB8fAotICAgICAgY29kZWRfc2l6ZS0+aGVpZ2h0KCkgLyBjcm9wX3VuaXRfeSA8IGZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCkgewotICAgIERWTE9HKDEpIDw8ICJGcmFtZSBjcm9wcGluZyBleGNlZWRzIGNvZGVkIHNpemUuIjsKLSAgICByZXR1cm4gYmFzZTo6bnVsbG9wdDsKLSAgfQotICBpbnQgY3JvcF9sZWZ0ID0gY3JvcF91bml0X3ggKiBmcmFtZV9jcm9wX2xlZnRfb2Zmc2V0OwotICBpbnQgY3JvcF9yaWdodCA9IGNyb3BfdW5pdF94ICogZnJhbWVfY3JvcF9yaWdodF9vZmZzZXQ7Ci0gIGludCBjcm9wX3RvcCA9IGNyb3BfdW5pdF95ICogZnJhbWVfY3JvcF90b3Bfb2Zmc2V0OwotICBpbnQgY3JvcF9ib3R0b20gPSBjcm9wX3VuaXRfeSAqIGZyYW1lX2Nyb3BfYm90dG9tX29mZnNldDsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgdmFsdWVzIGFyZSBzYW5lLiBOb3RlIHRoYXQgc29tZSBkZWNvZGVycyBhbHNvIHJlcXVpcmUgdGhhdAotICAvLyBjcm9wcyBhcmUgc21hbGxlciB0aGFuIGEgbWFjcm9ibG9jayBhbmQvb3IgdGhhdCBjcm9wcyBtdXN0IGJlIGFkamFjZW50IHRvCi0gIC8vIGF0IGxlYXN0IG9uZSBjb3JuZXIgb2YgdGhlIGNvZGVkIGZyYW1lLgotICBpZiAoY29kZWRfc2l6ZS0+d2lkdGgoKSAtIGNyb3BfbGVmdCA8PSBjcm9wX3JpZ2h0IHx8Ci0gICAgICBjb2RlZF9zaXplLT5oZWlnaHQoKSAtIGNyb3BfdG9wIDw9IGNyb3BfYm90dG9tKSB7Ci0gICAgRFZMT0coMSkgPDwgIkZyYW1lIGNyb3BwaW5nIGV4Y2x1ZGVzIGVudGlyZSBmcmFtZS4iOwotICAgIHJldHVybiBiYXNlOjpudWxsb3B0OwotICB9Ci0KLSAgcmV0dXJuIG1hdGg6OlJlY3QoY3JvcF9sZWZ0LCBjcm9wX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgY29kZWRfc2l6ZS0+d2lkdGgoKSAtIGNyb3BfbGVmdCAtIGNyb3BfcmlnaHQsCi0gICAgICAgICAgICAgICAgICAgIGNvZGVkX3NpemUtPmhlaWdodCgpIC0gY3JvcF90b3AgLSBjcm9wX2JvdHRvbSk7Ci19Ci0KLUgyNjRQUFM6OkgyNjRQUFMoKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsgfQotCi1IMjY0U2xpY2VIZWFkZXI6OkgyNjRTbGljZUhlYWRlcigpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9Ci0KLUgyNjRTRUlNZXNzYWdlOjpIMjY0U0VJTWVzc2FnZSgpIHsgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9Ci0KLSNkZWZpbmUgUkVBRF9CSVRTX09SX1JFVFVSTihudW1fYml0cywgb3V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpbnQgX291dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIWJyXy5SZWFkQml0cyhudW1fYml0cywgJl9vdXQpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERWTE9HKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICA8PCAiRXJyb3IgaW4gc3RyZWFtOiB1bmV4cGVjdGVkIEVPUyB3aGlsZSB0cnlpbmcgdG8gcmVhZCAiICNvdXQ7IFwKLSAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqb3V0ID0gX291dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRUFEX0JPT0xfT1JfUkVUVVJOKG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGludCBfb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghYnJfLlJlYWRCaXRzKDEsICZfb3V0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRFZMT0coMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIDw8ICJFcnJvciBpbiBzdHJlYW06IHVuZXhwZWN0ZWQgRU9TIHdoaWxlIHRyeWluZyB0byByZWFkICIgI291dDsgXAotICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICpvdXQgPSBfb3V0ICE9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJFQURfVUVfT1JfUkVUVVJOKG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoUmVhZFVFKG91dCkgIT0ga09rKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBEVkxPRygxKSA8PCAiRXJyb3IgaW4gc3RyZWFtOiBpbnZhbGlkIHZhbHVlIHdoaWxlIHRyeWluZyB0byByZWFkICIgI291dDsgXAotICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgUkVBRF9TRV9PUl9SRVRVUk4ob3V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChSZWFkU0Uob3V0KSAhPSBrT2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERWTE9HKDEpIDw8ICJFcnJvciBpbiBzdHJlYW06IGludmFsaWQgdmFsdWUgd2hpbGUgdHJ5aW5nIHRvIHJlYWQgIiAjb3V0OyBcCi0gICAgICByZXR1cm4ga0ludmFsaWRTdHJlYW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJTl9SQU5HRV9PUl9SRVRVUk4odmFsLCBtaW4sIG1heCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCh2YWwpIDwgKG1pbikgfHwgKHZhbCkgPiAobWF4KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRFZMT0coMSkgPDwgIkVycm9yIGluIHN0cmVhbTogaW52YWxpZCB2YWx1ZSwgZXhwZWN0ZWQgIiAjdmFsICIgdG8gYmUiIFwKLSAgICAgICAgICAgICAgIDw8ICIgaW4gcmFuZ2UgWyIgPDwgKG1pbikgPDwgIjoiIDw8IChtYXgpIDw8ICJdIiAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICA8PCAiIGZvdW5kICIgPDwgKHZhbCkgPDwgIiBpbnN0ZWFkIjsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVFJVRV9PUl9SRVRVUk4oYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERWTE9HKDEpIDw8ICJFcnJvciBpbiBzdHJlYW06IGludmFsaWQgdmFsdWUsIGV4cGVjdGVkICIgPDwgI2E7IFwKLSAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLy8gSVNPIDE0NDk2IHBhcnQgMTAKLS8vIFZVSSBwYXJhbWV0ZXJzOiBUYWJsZSBFLTEgIk1lYW5pbmcgb2Ygc2FtcGxlIGFzcGVjdCByYXRpbyBpbmRpY2F0b3IiCi1zdGF0aWMgY29uc3QgaW50IGtUYWJsZVNhcldpZHRoW10gPSB7MCwgIDEsICAxMiwgMTAsIDE2LCAgNDAsIDI0LCAyMCwgMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAsIDE4LCAxNSwgNjQsIDE2MCwgNCwgIDMsICAyfTsKLXN0YXRpYyBjb25zdCBpbnQga1RhYmxlU2FySGVpZ2h0W10gPSB7MCwgIDEsICAxMSwgMTEsIDExLCAzMywgMTEsIDExLCAxMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMsIDExLCAxMSwgMzMsIDk5LCAzLCAgMiwgIDF9OwotQ09NUElMRV9BU1NFUlQoYXJyYXlzaXplKGtUYWJsZVNhcldpZHRoKSA9PSBhcnJheXNpemUoa1RhYmxlU2FySGVpZ2h0KSwKLSAgICAgICAgICAgICAgIHNhcl90YWJsZXNfbXVzdF9oYXZlX3RoZV9zYW1lX3NpemUpOwotCi1IMjY0UGFyc2VyOjpIMjY0UGFyc2VyKCkgeyBSZXNldCgpOyB9Ci0KLUgyNjRQYXJzZXI6On5IMjY0UGFyc2VyKCkge30KLQotdm9pZCBIMjY0UGFyc2VyOjpSZXNldCgpIHsKLSAgc3RyZWFtXyA9IE5VTEw7Ci0gIGJ5dGVzX2xlZnRfID0gMDsKLSAgZW5jcnlwdGVkX3Jhbmdlc18uY2xlYXIoKTsKLX0KLQotdm9pZCBIMjY0UGFyc2VyOjpTZXRTdHJlYW0oY29uc3QgdWludDhfdCogc3RyZWFtLCBvZmZfdCBzdHJlYW1fc2l6ZSkgewotICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlczsKLSAgU2V0RW5jcnlwdGVkU3RyZWFtKHN0cmVhbSwgc3RyZWFtX3NpemUsIHN1YnNhbXBsZXMpOwotfQotCi12b2lkIEgyNjRQYXJzZXI6OlNldEVuY3J5cHRlZFN0cmVhbSgKLSAgICBjb25zdCB1aW50OF90KiBzdHJlYW0sIG9mZl90IHN0cmVhbV9zaXplLAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcykgewotICBEQ0hFQ0soc3RyZWFtKTsKLSAgRENIRUNLX0dUKHN0cmVhbV9zaXplLCAwKTsKLQotICBzdHJlYW1fID0gc3RyZWFtOwotICBieXRlc19sZWZ0XyA9IHN0cmVhbV9zaXplOwotCi0gIGVuY3J5cHRlZF9yYW5nZXNfLmNsZWFyKCk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHN0YXJ0ID0gc3RyZWFtOwotICBjb25zdCB1aW50OF90KiBzdHJlYW1fZW5kID0gc3RyZWFtXyArIGJ5dGVzX2xlZnRfOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YnNhbXBsZXMuc2l6ZSgpICYmIHN0YXJ0IDwgc3RyZWFtX2VuZDsgKytpKSB7Ci0gICAgc3RhcnQgKz0gc3Vic2FtcGxlc1tpXS5jbGVhcl9ieXRlczsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9Ci0gICAgICAgIHN0ZDo6bWluKHN0YXJ0ICsgc3Vic2FtcGxlc1tpXS5jeXBoZXJfYnl0ZXMsIHN0cmVhbV9lbmQpOwotICAgIGVuY3J5cHRlZF9yYW5nZXNfLkFkZChzdGFydCwgZW5kKTsKLSAgICBzdGFydCA9IGVuZDsKLSAgfQotfQotCi1jb25zdCBIMjY0UFBTKiBIMjY0UGFyc2VyOjpHZXRQUFMoaW50IHBwc19pZCkgY29uc3QgewotICBzdGQ6Om1hcDxpbnQsIEgyNjRQUFM+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFjdGl2ZV9QUFNlc18uZmluZChwcHNfaWQpOwotICBpZiAoaXQgPT0gYWN0aXZlX1BQU2VzXy5lbmQoKSkgewotICAgIERWTE9HKDEpIDw8ICJSZXF1ZXN0ZWQgYSBub25leGlzdGVudCBQUFMgaWQgIiA8PCBwcHNfaWQ7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICByZXR1cm4gJml0LT5zZWNvbmQ7Ci19Ci0KLWNvbnN0IEgyNjRTUFMqIEgyNjRQYXJzZXI6OkdldFNQUyhpbnQgc3BzX2lkKSBjb25zdCB7Ci0gIHN0ZDo6bWFwPGludCwgSDI2NFNQUz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWN0aXZlX1NQU2VzXy5maW5kKHNwc19pZCk7Ci0gIGlmIChpdCA9PSBhY3RpdmVfU1BTZXNfLmVuZCgpKSB7Ci0gICAgRFZMT0coMSkgPDwgIlJlcXVlc3RlZCBhIG5vbmV4aXN0ZW50IFNQUyBpZCAiIDw8IHNwc19pZDsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHJldHVybiAmaXQtPnNlY29uZDsKLX0KLQotc3RhdGljIGlubGluZSBib29sIElzU3RhcnRDb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEpIHsKLSAgcmV0dXJuIGRhdGFbMF0gPT0gMHgwMCAmJiBkYXRhWzFdID09IDB4MDAgJiYgZGF0YVsyXSA9PSAweDAxOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgSDI2NFBhcnNlcjo6RmluZFN0YXJ0Q29kZShjb25zdCB1aW50OF90KiBkYXRhLCBvZmZfdCBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QqIG9mZnNldCwgb2ZmX3QqIHN0YXJ0X2NvZGVfc2l6ZSkgewotICBEQ0hFQ0tfR0UoZGF0YV9zaXplLCAwKTsKLSAgb2ZmX3QgYnl0ZXNfbGVmdCA9IGRhdGFfc2l6ZTsKLQotICB3aGlsZSAoYnl0ZXNfbGVmdCA+PSAzKSB7Ci0gICAgaWYgKElzU3RhcnRDb2RlKGRhdGEpKSB7Ci0gICAgICAvLyBGb3VuZCB0aHJlZS1ieXRlIHN0YXJ0IGNvZGUsIHNldCBwb2ludGVyIGF0IGl0cyBiZWdpbm5pbmcuCi0gICAgICAqb2Zmc2V0ID0gZGF0YV9zaXplIC0gYnl0ZXNfbGVmdDsKLSAgICAgICpzdGFydF9jb2RlX3NpemUgPSAzOwotCi0gICAgICAvLyBJZiB0aGVyZSBpcyBhIHplcm8gYnl0ZSBiZWZvcmUgdGhpcyBzdGFydCBjb2RlLAotICAgICAgLy8gdGhlbiBpdCdzIGFjdHVhbGx5IGEgZm91ci1ieXRlIHN0YXJ0IGNvZGUsIHNvIGJhY2t0cmFjayBvbmUgYnl0ZS4KLSAgICAgIGlmICgqb2Zmc2V0ID4gMCAmJiAqKGRhdGEgLSAxKSA9PSAweDAwKSB7Ci0gICAgICAgIC0tKCpvZmZzZXQpOwotICAgICAgICArKygqc3RhcnRfY29kZV9zaXplKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgKytkYXRhOwotICAgIC0tYnl0ZXNfbGVmdDsKLSAgfQotCi0gIC8vIEVuZCBvZiBkYXRhOiBvZmZzZXQgaXMgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJ5dGUgdGhhdCB3YXMgbm90IGNvbnNpZGVyZWQKLSAgLy8gYXMgYSBwb3NzaWJsZSBzdGFydCBvZiBhIHN0YXJ0IGNvZGUuCi0gIC8vIE5vdGU6IHRoZXJlIGlzIG5vIHNlY3VyaXR5IGlzc3VlIHdoZW4gcmVjZWl2aW5nIGEgbmVnYXRpdmUgfGRhdGFfc2l6ZXwKLSAgLy8gc2luY2UgaW4gdGhpcyBjYXNlLCB8Ynl0ZXNfbGVmdHwgaXMgZXF1YWwgdG8gfGRhdGFfc2l6ZXwgYW5kIHRodXMKLSAgLy8gfCpvZmZzZXR8IGlzIGVxdWFsIHRvIDAgKHZhbGlkIG9mZnNldCkuCi0gICpvZmZzZXQgPSBkYXRhX3NpemUgLSBieXRlc19sZWZ0OwotICAqc3RhcnRfY29kZV9zaXplID0gMDsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEgyNjRQYXJzZXI6OkxvY2F0ZU5BTFUob2ZmX3QqIG5hbHVfc2l6ZSwgb2ZmX3QqIHN0YXJ0X2NvZGVfc2l6ZSkgewotICAvLyBGaW5kIHRoZSBzdGFydCBjb2RlIG9mIG5leHQgTkFMVS4KLSAgb2ZmX3QgbmFsdV9zdGFydF9vZmYgPSAwOwotICBvZmZfdCBhbm5leGJfc3RhcnRfY29kZV9zaXplID0gMDsKLQotICBpZiAoIUZpbmRTdGFydENvZGVJbkNsZWFyUmFuZ2VzKHN0cmVhbV8sIGJ5dGVzX2xlZnRfLCBlbmNyeXB0ZWRfcmFuZ2VzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFsdV9zdGFydF9vZmYsICZhbm5leGJfc3RhcnRfY29kZV9zaXplKSkgewotICAgIERWTE9HKDQpIDw8ICJDb3VsZCBub3QgZmluZCBzdGFydCBjb2RlLCBlbmQgb2Ygc3RyZWFtPyI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gTW92ZSB0aGUgc3RyZWFtIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE5BTFUgKHBvaW50aW5nIGF0IHRoZSBzdGFydCBjb2RlKS4KLSAgc3RyZWFtXyArPSBuYWx1X3N0YXJ0X29mZjsKLSAgYnl0ZXNfbGVmdF8gLT0gbmFsdV9zdGFydF9vZmY7Ci0KLSAgY29uc3QgdWludDhfdCogbmFsdV9kYXRhID0gc3RyZWFtXyArIGFubmV4Yl9zdGFydF9jb2RlX3NpemU7Ci0gIG9mZl90IG1heF9uYWx1X2RhdGFfc2l6ZSA9IGJ5dGVzX2xlZnRfIC0gYW5uZXhiX3N0YXJ0X2NvZGVfc2l6ZTsKLSAgaWYgKG1heF9uYWx1X2RhdGFfc2l6ZSA8PSAwKSB7Ci0gICAgRFZMT0coMykgPDwgIkVuZCBvZiBzdHJlYW0iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEZpbmQgdGhlIHN0YXJ0IGNvZGUgb2YgbmV4dCBOQUxVOwotICAvLyBpZiBzdWNjZXNzZnVsLCB8bmFsdV9zaXplX3dpdGhvdXRfc3RhcnRfY29kZXwgaXMgdGhlIG51bWJlciBvZiBieXRlcyBmcm9tCi0gIC8vIGFmdGVyIHByZXZpb3VzIHN0YXJ0IGNvZGUgdG8gYmVmb3JlIHRoaXMgb25lOwotICAvLyBpZiBuZXh0IHN0YXJ0IGNvZGUgaXMgbm90IGZvdW5kLCBpdCBpcyBzdGlsbCBhIHZhbGlkIE5BTFUgc2luY2UgdGhlcmUKLSAgLy8gYXJlIHNvbWUgYnl0ZXMgbGVmdCBhZnRlciB0aGUgZmlyc3Qgc3RhcnQgY29kZTogYWxsIHRoZSByZW1haW5pbmcgYnl0ZXMKLSAgLy8gYmVsb25nIHRvIHRoZSBjdXJyZW50IE5BTFUuCi0gIG9mZl90IG5leHRfc3RhcnRfY29kZV9zaXplID0gMDsKLSAgb2ZmX3QgbmFsdV9zaXplX3dpdGhvdXRfc3RhcnRfY29kZSA9IDA7Ci0gIGlmICghRmluZFN0YXJ0Q29kZUluQ2xlYXJSYW5nZXMoCi0gICAgICAgICAgbmFsdV9kYXRhLCBtYXhfbmFsdV9kYXRhX3NpemUsIGVuY3J5cHRlZF9yYW5nZXNfLAotICAgICAgICAgICZuYWx1X3NpemVfd2l0aG91dF9zdGFydF9jb2RlLCAmbmV4dF9zdGFydF9jb2RlX3NpemUpKSB7Ci0gICAgbmFsdV9zaXplX3dpdGhvdXRfc3RhcnRfY29kZSA9IG1heF9uYWx1X2RhdGFfc2l6ZTsKLSAgfQotICAqbmFsdV9zaXplID0gbmFsdV9zaXplX3dpdGhvdXRfc3RhcnRfY29kZSArIGFubmV4Yl9zdGFydF9jb2RlX3NpemU7Ci0gICpzdGFydF9jb2RlX3NpemUgPSBhbm5leGJfc3RhcnRfY29kZV9zaXplOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBIMjY0UGFyc2VyOjpGaW5kU3RhcnRDb2RlSW5DbGVhclJhbmdlcygKLSAgICBjb25zdCB1aW50OF90KiBkYXRhLCBvZmZfdCBkYXRhX3NpemUsCi0gICAgY29uc3QgUmFuZ2VzPGNvbnN0IHVpbnQ4X3QqPiYgZW5jcnlwdGVkX3Jhbmdlcywgb2ZmX3QqIG9mZnNldCwKLSAgICBvZmZfdCogc3RhcnRfY29kZV9zaXplKSB7Ci0gIGlmIChlbmNyeXB0ZWRfcmFuZ2VzLnNpemUoKSA9PSAwKQotICAgIHJldHVybiBGaW5kU3RhcnRDb2RlKGRhdGEsIGRhdGFfc2l6ZSwgb2Zmc2V0LCBzdGFydF9jb2RlX3NpemUpOwotCi0gIERDSEVDS19HRShkYXRhX3NpemUsIDApOwotICBjb25zdCB1aW50OF90KiBzdGFydCA9IGRhdGE7Ci0gIGRvIHsKLSAgICBvZmZfdCBieXRlc19sZWZ0ID0gZGF0YV9zaXplIC0gKHN0YXJ0IC0gZGF0YSk7Ci0KLSAgICBpZiAoIUZpbmRTdGFydENvZGUoc3RhcnQsIGJ5dGVzX2xlZnQsIG9mZnNldCwgc3RhcnRfY29kZV9zaXplKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENvbnN0cnVjdCBhIFJhbmdlcyBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZWdpb24gb2NjdXBpZWQKLSAgICAvLyBieSB0aGUgc3RhcnQgY29kZSBhbmQgdGhlIDEgYnl0ZSBuZWVkZWQgdG8gcmVhZCB0aGUgTkFMIHVuaXQgdHlwZS4KLSAgICBjb25zdCB1aW50OF90KiBzdGFydF9jb2RlID0gc3RhcnQgKyAqb2Zmc2V0OwotICAgIGNvbnN0IHVpbnQ4X3QqIHN0YXJ0X2NvZGVfZW5kID0gc3RhcnRfY29kZSArICpzdGFydF9jb2RlX3NpemU7Ci0gICAgUmFuZ2VzPGNvbnN0IHVpbnQ4X3QqPiBzdGFydF9jb2RlX3JhbmdlOwotICAgIHN0YXJ0X2NvZGVfcmFuZ2UuQWRkKHN0YXJ0X2NvZGUsIHN0YXJ0X2NvZGVfZW5kICsgMSk7Ci0KLSAgICBpZiAoZW5jcnlwdGVkX3Jhbmdlcy5JbnRlcnNlY3Rpb25XaXRoKHN0YXJ0X2NvZGVfcmFuZ2UpLnNpemUoKSA+IDApIHsKLSAgICAgIC8vIFRoZSBzdGFydCBjb2RlIGlzIGluc2lkZSBhbiBlbmNyeXB0ZWQgc2VjdGlvbiBzbyB3ZSBuZWVkIHRvIHNjYW4KLSAgICAgIC8vIGZvciBhbm90aGVyIHN0YXJ0IGNvZGUuCi0gICAgICAqc3RhcnRfY29kZV9zaXplID0gMDsKLSAgICAgIHN0YXJ0ICs9IHN0ZDo6bWluKCpvZmZzZXQgKyAxLCBieXRlc19sZWZ0KTsKLSAgICB9Ci0gIH0gd2hpbGUgKCpzdGFydF9jb2RlX3NpemUgPT0gMCk7Ci0KLSAgLy8gVXBkYXRlIHwqb2Zmc2V0fCB0byBpbmNsdWRlIHRoZSBkYXRhIHdlIHNraXBwZWQgb3Zlci4KLSAgKm9mZnNldCArPSBzdGFydCAtIGRhdGE7Ci0gIHJldHVybiB0cnVlOwotfQotCi1WaWRlb0NvZGVjUHJvZmlsZSBIMjY0UGFyc2VyOjpQcm9maWxlSURDVG9WaWRlb0NvZGVjUHJvZmlsZShpbnQgcHJvZmlsZV9pZGMpIHsKLSAgc3dpdGNoIChwcm9maWxlX2lkYykgewotICAgIGNhc2UgSDI2NFNQUzo6a1Byb2ZpbGVJRENCYXNlbGluZToKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9CQVNFTElORTsKLSAgICBjYXNlIEgyNjRTUFM6OmtQcm9maWxlSURDTWFpbjoKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9NQUlOOwotICAgIGNhc2UgSDI2NFNQUzo6a1Byb2ZpbGVJRENIaWdoOgotICAgICAgcmV0dXJuIEgyNjRQUk9GSUxFX0hJR0g7Ci0gICAgY2FzZSBIMjY0U1BTOjprUHJvZmlsZUlESGlnaDEwOgotICAgICAgcmV0dXJuIEgyNjRQUk9GSUxFX0hJR0gxMFBST0ZJTEU7Ci0gICAgY2FzZSBIMjY0U1BTOjprUHJvZmlsZUlESGlnaDQyMjoKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9ISUdINDIyUFJPRklMRTsKLSAgICBjYXNlIEgyNjRTUFM6OmtQcm9maWxlSURIaWdoNDQ0UHJlZGljdGl2ZToKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9ISUdINDQ0UFJFRElDVElWRVBST0ZJTEU7Ci0gICAgY2FzZSBIMjY0U1BTOjprUHJvZmlsZUlEU2NhbGFibGVCYXNlbGluZToKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9TQ0FMQUJMRUJBU0VMSU5FOwotICAgIGNhc2UgSDI2NFNQUzo6a1Byb2ZpbGVJRFNjYWxhYmxlSGlnaDoKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9TQ0FMQUJMRUhJR0g7Ci0gICAgY2FzZSBIMjY0U1BTOjprUHJvZmlsZUlEU3RlcmVvSGlnaDoKLSAgICAgIHJldHVybiBIMjY0UFJPRklMRV9TVEVSRU9ISUdIOwotICAgIGNhc2UgSDI2NFNQUzo6a1Byb2ZpbGVJRFNNdWx0aXZpZXdIaWdoOgotICAgICAgcmV0dXJuIEgyNjRQUk9GSUxFX01VTFRJVklFV0hJR0g7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpIDw8ICJ1bmtub3duIHZpZGVvIHByb2ZpbGU6ICIgPDwgcHJvZmlsZV9pZGM7Ci0gIHJldHVybiBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV047Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpSZWFkVUUoaW50KiB2YWwpIHsKLSAgaW50IG51bV9iaXRzID0gLTE7Ci0gIGludCBiaXQ7Ci0gIGludCByZXN0OwotCi0gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgY29udGlndW91cyB6ZXJvIGJpdHMuCi0gIGRvIHsKLSAgICBSRUFEX0JJVFNfT1JfUkVUVVJOKDEsICZiaXQpOwotICAgIG51bV9iaXRzKys7Ci0gIH0gd2hpbGUgKGJpdCA9PSAwKTsKLQotICBpZiAobnVtX2JpdHMgPiAzMSkgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOwotCi0gIC8vIENhbGN1bGF0ZSBleHAtR29sb21iIGNvZGUgdmFsdWUgb2Ygc2l6ZSBudW1fYml0cy4KLSAgLy8gU3BlY2lhbCBjYXNlIGZvciB8bnVtX2JpdHN8ID09IDMxIHRvIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBvbmx5Ci0gIC8vIHZhbGlkIHJlcHJlc2VudGF0aW9uIGFzIGFuIGludCBpcyAyXjMxIC0gMSwgc28gdGhlIHJlbWFpbmluZyBiaXRzIG11c3QKLSAgLy8gYmUgMCBvciBlbHNlIHRoZSBudW1iZXIgaXMgdG9vIGxhcmdlLgotICAqdmFsID0gKDF1IDw8IG51bV9iaXRzKSAtIDF1OwotCi0gIGlmIChudW1fYml0cyA9PSAzMSkgewotICAgIFJFQURfQklUU19PUl9SRVRVUk4obnVtX2JpdHMsICZyZXN0KTsKLSAgICByZXR1cm4gKHJlc3QgPT0gMCkgPyBrT2sgOiBrSW52YWxpZFN0cmVhbTsKLSAgfQotCi0gIGlmIChudW1fYml0cyA+IDApIHsKLSAgICBSRUFEX0JJVFNfT1JfUkVUVVJOKG51bV9iaXRzLCAmcmVzdCk7Ci0gICAgKnZhbCArPSByZXN0OwotICB9Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OlJlYWRTRShpbnQqIHZhbCkgewotICBpbnQgdWU7Ci0gIFJlc3VsdCByZXM7Ci0KLSAgLy8gU2VlIENoYXB0ZXIgOSBpbiB0aGUgc3BlYy4KLSAgcmVzID0gUmVhZFVFKCZ1ZSk7Ci0gIGlmIChyZXMgIT0ga09rKSByZXR1cm4gcmVzOwotCi0gIGlmICh1ZSAlIDIgPT0gMCkKLSAgICAqdmFsID0gLSh1ZSAvIDIpOwotICBlbHNlCi0gICAgKnZhbCA9IHVlIC8gMiArIDE7Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OkFkdmFuY2VUb05leHROQUxVKEgyNjROQUxVKiBuYWx1KSB7Ci0gIG9mZl90IHN0YXJ0X2NvZGVfc2l6ZTsKLSAgb2ZmX3QgbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZTsKLSAgaWYgKCFMb2NhdGVOQUxVKCZuYWx1X3NpemVfd2l0aF9zdGFydF9jb2RlLCAmc3RhcnRfY29kZV9zaXplKSkgewotICAgIERWTE9HKDQpIDw8ICJDb3VsZCBub3QgZmluZCBuZXh0IE5BTFUsIGJ5dGVzIGxlZnQgaW4gc3RyZWFtOiAiCi0gICAgICAgICAgICAgPDwgYnl0ZXNfbGVmdF87Ci0gICAgcmV0dXJuIGtFT1N0cmVhbTsKLSAgfQotCi0gIG5hbHUtPmRhdGEgPSBzdHJlYW1fICsgc3RhcnRfY29kZV9zaXplOwotICBuYWx1LT5zaXplID0gbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZSAtIHN0YXJ0X2NvZGVfc2l6ZTsKLSAgRFZMT0coNCkgPDwgIk5BTFUgZm91bmQ6IHNpemU9IiA8PCBuYWx1X3NpemVfd2l0aF9zdGFydF9jb2RlOwotCi0gIC8vIEluaXRpYWxpemUgYml0IHJlYWRlciBhdCB0aGUgc3RhcnQgb2YgZm91bmQgTkFMVS4KLSAgaWYgKCFicl8uSW5pdGlhbGl6ZShuYWx1LT5kYXRhLCBuYWx1LT5zaXplKSkgcmV0dXJuIGtFT1N0cmVhbTsKLQotICAvLyBNb3ZlIHBhcnNlciBzdGF0ZSB0byBhZnRlciB0aGlzIE5BTFUsIHNvIG5leHQgdGltZSBBZHZhbmNlVG9OZXh0TkFMVQotICAvLyBpcyBjYWxsZWQsIHdlIHdpbGwgZWZmZWN0aXZlbHkgYmUgc2tpcHBpbmcgaXQ7Ci0gIC8vIG90aGVyIHBhcnNpbmcgZnVuY3Rpb25zIHdpbGwgdXNlIHRoZSBwb3NpdGlvbiBzYXZlZAotICAvLyBpbiBiaXQgcmVhZGVyIGZvciBwYXJzaW5nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlbWVtYmVyIGl0IGhlcmUuCi0gIHN0cmVhbV8gKz0gbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZTsKLSAgYnl0ZXNfbGVmdF8gLT0gbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZTsKLQotICAvLyBSZWFkIE5BTFUgaGVhZGVyLCBza2lwIHRoZSBmb3JiaWRkZW5femVyb19iaXQsIGJ1dCBjaGVjayBmb3IgaXQuCi0gIGludCBkYXRhOwotICBSRUFEX0JJVFNfT1JfUkVUVVJOKDEsICZkYXRhKTsKLSAgVFJVRV9PUl9SRVRVUk4oZGF0YSA9PSAwKTsKLQotICBSRUFEX0JJVFNfT1JfUkVUVVJOKDIsICZuYWx1LT5uYWxfcmVmX2lkYyk7Ci0gIFJFQURfQklUU19PUl9SRVRVUk4oNSwgJm5hbHUtPm5hbF91bml0X3R5cGUpOwotCi0gIERWTE9HKDQpIDw8ICJOQUxVIHR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8aW50PihuYWx1LT5uYWxfdW5pdF90eXBlKQotICAgICAgICAgICA8PCAiIGF0OiAiIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KG5hbHUtPmRhdGEpCi0gICAgICAgICAgIDw8ICIgc2l6ZTogIiA8PCBuYWx1LT5zaXplCi0gICAgICAgICAgIDw8ICIgcmVmOiAiIDw8IHN0YXRpY19jYXN0PGludD4obmFsdS0+bmFsX3JlZl9pZGMpOwotCi0gIHJldHVybiBrT2s7Ci19Ci0KLS8vIERlZmF1bHQgc2NhbGluZyBsaXN0cyAocGVyIHNwZWMpLgotc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdDR4NEludHJhW2tIMjY0U2NhbGluZ0xpc3Q0eDRMZW5ndGhdID0gewotICAgIDYsIDEzLCAxMywgMjAsIDIwLCAyMCwgMjgsIDI4LCAyOCwgMjgsIDMyLCAzMiwgMzIsIDM3LCAzNywgNDIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0NHg0SW50ZXJba0gyNjRTY2FsaW5nTGlzdDR4NExlbmd0aF0gPSB7Ci0gICAgMTAsIDE0LCAxNCwgMjAsIDIwLCAyMCwgMjQsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDMwLCAzMCwgMzQsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0OHg4SW50cmFba0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aF0gPSB7Ci0gICAgNiwgIDEwLCAxMCwgMTMsIDExLCAxMywgMTYsIDE2LCAxNiwgMTYsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjMsCi0gICAgMjMsIDIzLCAyMywgMjMsIDIzLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsCi0gICAgMjcsIDI3LCAyNywgMjcsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAzMSwgMzEsIDMxLCAzMSwgMzEsCi0gICAgMzEsIDMzLCAzMywgMzMsIDMzLCAzMywgMzYsIDM2LCAzNiwgMzYsIDM4LCAzOCwgMzgsIDQwLCA0MCwgNDIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0OHg4SW50ZXJba0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aF0gPSB7Ci0gICAgOSwgIDEzLCAxMywgMTUsIDEzLCAxNSwgMTcsIDE3LCAxNywgMTcsIDE5LCAxOSwgMTksIDE5LCAxOSwgMjEsCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjQsIDI0LCAyNCwgMjQsCi0gICAgMjQsIDI0LCAyNCwgMjQsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsCi0gICAgMjcsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMzAsIDMwLCAzMCwgMzAsIDMyLCAzMiwgMzIsIDMzLCAzMywgMzUsCi19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgRGVmYXVsdFNjYWxpbmdMaXN0NHg0KAotICAgIGludCBpLCBpbnQgc2NhbGluZ19saXN0NHg0W11ba0gyNjRTY2FsaW5nTGlzdDR4NExlbmd0aF0pIHsKLSAgRENIRUNLX0xUKGksIDYpOwotCi0gIGlmIChpIDwgMykKLSAgICBtZW1jcHkoc2NhbGluZ19saXN0NHg0W2ldLCBrRGVmYXVsdDR4NEludHJhLAotICAgICAgICAgICAgICAgICBzaXplb2Yoa0RlZmF1bHQ0eDRJbnRyYSkpOwotICBlbHNlIGlmIChpIDwgNikKLSAgICBtZW1jcHkoc2NhbGluZ19saXN0NHg0W2ldLCBrRGVmYXVsdDR4NEludGVyLAotICAgICAgICAgICAgICAgICBzaXplb2Yoa0RlZmF1bHQ0eDRJbnRlcikpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgRGVmYXVsdFNjYWxpbmdMaXN0OHg4KAotICAgIGludCBpLCBpbnQgc2NhbGluZ19saXN0OHg4W11ba0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aF0pIHsKLSAgRENIRUNLX0xUKGksIDYpOwotCi0gIGlmIChpICUgMiA9PSAwKQotICAgIG1lbWNweShzY2FsaW5nX2xpc3Q4eDhbaV0sIGtEZWZhdWx0OHg4SW50cmEsCi0gICAgICAgICAgICAgICAgIHNpemVvZihrRGVmYXVsdDh4OEludHJhKSk7Ci0gIGVsc2UKLSAgICBtZW1jcHkoc2NhbGluZ19saXN0OHg4W2ldLCBrRGVmYXVsdDh4OEludGVyLAotICAgICAgICAgICAgICAgICBzaXplb2Yoa0RlZmF1bHQ4eDhJbnRlcikpOwotfQotCi1zdGF0aWMgdm9pZCBGYWxsYmFja1NjYWxpbmdMaXN0NHg0KAotICAgIGludCBpLCBjb25zdCBpbnQgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50cmFbXSwKLSAgICBjb25zdCBpbnQgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50ZXJbXSwKLSAgICBpbnQgc2NhbGluZ19saXN0NHg0W11ba0gyNjRTY2FsaW5nTGlzdDR4NExlbmd0aF0pIHsKLSAgc3RhdGljIGNvbnN0IGludCBrU2NhbGluZ0xpc3Q0eDRCeXRlU2l6ZSA9Ci0gICAgICBzaXplb2Yoc2NhbGluZ19saXN0NHg0WzBdWzBdKSAqIGtIMjY0U2NhbGluZ0xpc3Q0eDRMZW5ndGg7Ci0KLSAgc3dpdGNoIChpKSB7Ci0gICAgY2FzZSAwOgotICAgICAgbWVtY3B5KHNjYWxpbmdfbGlzdDR4NFtpXSwgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50cmEsCi0gICAgICAgICAgICAgICAgICAga1NjYWxpbmdMaXN0NHg0Qnl0ZVNpemUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDE6Ci0gICAgICBtZW1jcHkoc2NhbGluZ19saXN0NHg0W2ldLCBzY2FsaW5nX2xpc3Q0eDRbMF0sCi0gICAgICAgICAgICAgICAgICAga1NjYWxpbmdMaXN0NHg0Qnl0ZVNpemUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDI6Ci0gICAgICBtZW1jcHkoc2NhbGluZ19saXN0NHg0W2ldLCBzY2FsaW5nX2xpc3Q0eDRbMV0sCi0gICAgICAgICAgICAgICAgICAga1NjYWxpbmdMaXN0NHg0Qnl0ZVNpemUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDM6Ci0gICAgICBtZW1jcHkoc2NhbGluZ19saXN0NHg0W2ldLCBkZWZhdWx0X3NjYWxpbmdfbGlzdF9pbnRlciwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q0eDRCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgNDoKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q0eDRbaV0sIHNjYWxpbmdfbGlzdDR4NFszXSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q0eDRCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgNToKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q0eDRbaV0sIHNjYWxpbmdfbGlzdDR4NFs0XSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q0eDRCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBOT1RSRUFDSEVEKCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBGYWxsYmFja1NjYWxpbmdMaXN0OHg4KAotICAgIGludCBpLCBjb25zdCBpbnQgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50cmFbXSwKLSAgICBjb25zdCBpbnQgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50ZXJbXSwKLSAgICBpbnQgc2NhbGluZ19saXN0OHg4W11ba0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aF0pIHsKLSAgc3RhdGljIGNvbnN0IGludCBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSA9Ci0gICAgICBzaXplb2Yoc2NhbGluZ19saXN0OHg4WzBdWzBdKSAqIGtIMjY0U2NhbGluZ0xpc3Q4eDhMZW5ndGg7Ci0KLSAgc3dpdGNoIChpKSB7Ci0gICAgY2FzZSAwOgotICAgICAgbWVtY3B5KHNjYWxpbmdfbGlzdDh4OFtpXSwgZGVmYXVsdF9zY2FsaW5nX2xpc3RfaW50cmEsCi0gICAgICAgICAgICAgICAgICAga1NjYWxpbmdMaXN0OHg4Qnl0ZVNpemUpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDE6Ci0gICAgICBtZW1jcHkoc2NhbGluZ19saXN0OHg4W2ldLCBkZWZhdWx0X3NjYWxpbmdfbGlzdF9pbnRlciwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMjoKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q4eDhbaV0sIHNjYWxpbmdfbGlzdDh4OFswXSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMzoKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q4eDhbaV0sIHNjYWxpbmdfbGlzdDh4OFsxXSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgNDoKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q4eDhbaV0sIHNjYWxpbmdfbGlzdDh4OFsyXSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgNToKLSAgICAgIG1lbWNweShzY2FsaW5nX2xpc3Q4eDhbaV0sIHNjYWxpbmdfbGlzdDh4OFszXSwKLSAgICAgICAgICAgICAgICAgICBrU2NhbGluZ0xpc3Q4eDhCeXRlU2l6ZSk7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBOT1RSRUFDSEVEKCk7Ci0gICAgICBicmVhazsKLSAgfQotfQotCi1IMjY0UGFyc2VyOjpSZXN1bHQgSDI2NFBhcnNlcjo6UGFyc2VTY2FsaW5nTGlzdChpbnQgc2l6ZSwgaW50KiBzY2FsaW5nX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiB1c2VfZGVmYXVsdCkgewotICAvLyBTZWUgY2hhcHRlciA3LjMuMi4xLjEuMS4KLSAgaW50IGxhc3Rfc2NhbGUgPSA4OwotICBpbnQgbmV4dF9zY2FsZSA9IDg7Ci0gIGludCBkZWx0YV9zY2FsZTsKLQotICAqdXNlX2RlZmF1bHQgPSBmYWxzZTsKLQotICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7ICsraikgewotICAgIGlmIChuZXh0X3NjYWxlICE9IDApIHsKLSAgICAgIFJFQURfU0VfT1JfUkVUVVJOKCZkZWx0YV9zY2FsZSk7Ci0gICAgICBJTl9SQU5HRV9PUl9SRVRVUk4oZGVsdGFfc2NhbGUsIC0xMjgsIDEyNyk7Ci0gICAgICBuZXh0X3NjYWxlID0gKGxhc3Rfc2NhbGUgKyBkZWx0YV9zY2FsZSArIDI1NikgJiAweGZmOwotCi0gICAgICBpZiAoaiA9PSAwICYmIG5leHRfc2NhbGUgPT0gMCkgewotICAgICAgICAqdXNlX2RlZmF1bHQgPSB0cnVlOwotICAgICAgICByZXR1cm4ga09rOwotICAgICAgfQotICAgIH0KLQotICAgIHNjYWxpbmdfbGlzdFtqXSA9IChuZXh0X3NjYWxlID09IDApID8gbGFzdF9zY2FsZSA6IG5leHRfc2NhbGU7Ci0gICAgbGFzdF9zY2FsZSA9IHNjYWxpbmdfbGlzdFtqXTsKLSAgfQotCi0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZVNQU1NjYWxpbmdMaXN0cyhIMjY0U1BTKiBzcHMpIHsKLSAgLy8gU2VlIDcuNC4yLjEuMS4KLSAgYm9vbCBzZXFfc2NhbGluZ19saXN0X3ByZXNlbnRfZmxhZzsKLSAgYm9vbCB1c2VfZGVmYXVsdDsKLSAgUmVzdWx0IHJlczsKLQotICAvLyBQYXJzZSBzY2FsaW5nX2xpc3Q0eDQuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKSB7Ci0gICAgUkVBRF9CT09MX09SX1JFVFVSTigmc2VxX3NjYWxpbmdfbGlzdF9wcmVzZW50X2ZsYWcpOwotCi0gICAgaWYgKHNlcV9zY2FsaW5nX2xpc3RfcHJlc2VudF9mbGFnKSB7Ci0gICAgICByZXMgPSBQYXJzZVNjYWxpbmdMaXN0KGFycmF5c2l6ZShzcHMtPnNjYWxpbmdfbGlzdDR4NFtpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcy0+c2NhbGluZ19saXN0NHg0W2ldLCAmdXNlX2RlZmF1bHQpOwotICAgICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0KLSAgICAgIGlmICh1c2VfZGVmYXVsdCkgRGVmYXVsdFNjYWxpbmdMaXN0NHg0KGksIHNwcy0+c2NhbGluZ19saXN0NHg0KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICBGYWxsYmFja1NjYWxpbmdMaXN0NHg0KGksIGtEZWZhdWx0NHg0SW50cmEsIGtEZWZhdWx0NHg0SW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcy0+c2NhbGluZ19saXN0NHg0KTsKLSAgICB9Ci0gIH0KLQotICAvLyBQYXJzZSBzY2FsaW5nX2xpc3Q4eDguCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgKChzcHMtPmNocm9tYV9mb3JtYXRfaWRjICE9IDMpID8gMiA6IDYpOyArK2kpIHsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzZXFfc2NhbGluZ19saXN0X3ByZXNlbnRfZmxhZyk7Ci0KLSAgICBpZiAoc2VxX3NjYWxpbmdfbGlzdF9wcmVzZW50X2ZsYWcpIHsKLSAgICAgIHJlcyA9IFBhcnNlU2NhbGluZ0xpc3QoYXJyYXlzaXplKHNwcy0+c2NhbGluZ19saXN0OHg4W2ldKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzLT5zY2FsaW5nX2xpc3Q4eDhbaV0sICZ1c2VfZGVmYXVsdCk7Ci0gICAgICBpZiAocmVzICE9IGtPaykgcmV0dXJuIHJlczsKLQotICAgICAgaWYgKHVzZV9kZWZhdWx0KSBEZWZhdWx0U2NhbGluZ0xpc3Q4eDgoaSwgc3BzLT5zY2FsaW5nX2xpc3Q4eDgpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgIEZhbGxiYWNrU2NhbGluZ0xpc3Q4eDgoaSwga0RlZmF1bHQ4eDhJbnRyYSwga0RlZmF1bHQ4eDhJbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzLT5zY2FsaW5nX2xpc3Q4eDgpOwotICAgIH0KLSAgfQotCi0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZVBQU1NjYWxpbmdMaXN0cyhjb25zdCBIMjY0U1BTJiBzcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSDI2NFBQUyogcHBzKSB7Ci0gIC8vIFNlZSA3LjQuMi4yLgotICBib29sIHBpY19zY2FsaW5nX2xpc3RfcHJlc2VudF9mbGFnOwotICBib29sIHVzZV9kZWZhdWx0OwotICBSZXN1bHQgcmVzOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKSB7Ci0gICAgUkVBRF9CT09MX09SX1JFVFVSTigmcGljX3NjYWxpbmdfbGlzdF9wcmVzZW50X2ZsYWcpOwotCi0gICAgaWYgKHBpY19zY2FsaW5nX2xpc3RfcHJlc2VudF9mbGFnKSB7Ci0gICAgICByZXMgPSBQYXJzZVNjYWxpbmdMaXN0KGFycmF5c2l6ZShwcHMtPnNjYWxpbmdfbGlzdDR4NFtpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcy0+c2NhbGluZ19saXN0NHg0W2ldLCAmdXNlX2RlZmF1bHQpOwotICAgICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0KLSAgICAgIGlmICh1c2VfZGVmYXVsdCkgRGVmYXVsdFNjYWxpbmdMaXN0NHg0KGksIHBwcy0+c2NhbGluZ19saXN0NHg0KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoc3BzLnNlcV9zY2FsaW5nX21hdHJpeF9wcmVzZW50X2ZsYWcpIHsKLSAgICAgICAgLy8gVGFibGUgNy0yIGZhbGxiYWNrIHJ1bGUgQSBpbiBzcGVjLgotICAgICAgICBGYWxsYmFja1NjYWxpbmdMaXN0NHg0KGksIGtEZWZhdWx0NHg0SW50cmEsIGtEZWZhdWx0NHg0SW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBzLT5zY2FsaW5nX2xpc3Q0eDQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGFibGUgNy0yIGZhbGxiYWNrIHJ1bGUgQiBpbiBzcGVjLgotICAgICAgICBGYWxsYmFja1NjYWxpbmdMaXN0NHg0KGksIHNwcy5zY2FsaW5nX2xpc3Q0eDRbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzLnNjYWxpbmdfbGlzdDR4NFszXSwgcHBzLT5zY2FsaW5nX2xpc3Q0eDQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChwcHMtPnRyYW5zZm9ybV84eDhfbW9kZV9mbGFnKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoKHNwcy5jaHJvbWFfZm9ybWF0X2lkYyAhPSAzKSA/IDIgOiA2KTsgKytpKSB7Ci0gICAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZwaWNfc2NhbGluZ19saXN0X3ByZXNlbnRfZmxhZyk7Ci0KLSAgICAgIGlmIChwaWNfc2NhbGluZ19saXN0X3ByZXNlbnRfZmxhZykgewotICAgICAgICByZXMgPSBQYXJzZVNjYWxpbmdMaXN0KGFycmF5c2l6ZShwcHMtPnNjYWxpbmdfbGlzdDh4OFtpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBzLT5zY2FsaW5nX2xpc3Q4eDhbaV0sICZ1c2VfZGVmYXVsdCk7Ci0gICAgICAgIGlmIChyZXMgIT0ga09rKSByZXR1cm4gcmVzOwotCi0gICAgICAgIGlmICh1c2VfZGVmYXVsdCkgRGVmYXVsdFNjYWxpbmdMaXN0OHg4KGksIHBwcy0+c2NhbGluZ19saXN0OHg4KTsKLQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNwcy5zZXFfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnKSB7Ci0gICAgICAgICAgLy8gVGFibGUgNy0yIGZhbGxiYWNrIHJ1bGUgQSBpbiBzcGVjLgotICAgICAgICAgIEZhbGxiYWNrU2NhbGluZ0xpc3Q4eDgoaSwga0RlZmF1bHQ4eDhJbnRyYSwga0RlZmF1bHQ4eDhJbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcy0+c2NhbGluZ19saXN0OHg4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBUYWJsZSA3LTIgZmFsbGJhY2sgcnVsZSBCIGluIHNwZWMuCi0gICAgICAgICAgRmFsbGJhY2tTY2FsaW5nTGlzdDh4OChpLCBzcHMuc2NhbGluZ19saXN0OHg4WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BzLnNjYWxpbmdfbGlzdDh4OFsxXSwgcHBzLT5zY2FsaW5nX2xpc3Q4eDgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZUFuZElnbm9yZUhSRFBhcmFtZXRlcnMoCi0gICAgYm9vbCogaHJkX3BhcmFtZXRlcnNfcHJlc2VudCkgewotICBpbnQgZGF0YTsKLSAgUkVBRF9CT09MX09SX1JFVFVSTigmZGF0YSk7ICAvLyB7bmFsLHZjbH1faHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnCi0gIGlmICghZGF0YSkgcmV0dXJuIGtPazsKLQotICAqaHJkX3BhcmFtZXRlcnNfcHJlc2VudCA9IHRydWU7Ci0KLSAgaW50IGNwYl9jbnRfbWludXMxOwotICBSRUFEX1VFX09SX1JFVFVSTigmY3BiX2NudF9taW51czEpOwotICBJTl9SQU5HRV9PUl9SRVRVUk4oY3BiX2NudF9taW51czEsIDAsIDMxKTsKLSAgUkVBRF9CSVRTX09SX1JFVFVSTig4LCAmZGF0YSk7ICAvLyBiaXRfcmF0ZV9zY2FsZSwgY3BiX3NpemVfc2NhbGUKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0gY3BiX2NudF9taW51czE7ICsraSkgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZkYXRhKTsgICAgLy8gYml0X3JhdGVfdmFsdWVfbWludXMxW2ldCi0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJmRhdGEpOyAgICAvLyBjcGJfc2l6ZV92YWx1ZV9taW51czFbaV0KLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgIC8vIGNicl9mbGFnCi0gIH0KLSAgUkVBRF9CSVRTX09SX1JFVFVSTigyMCwgJmRhdGEpOyAgLy8gY3BiL2RwYiBkZWxheXMsIGV0Yy4KLQotICByZXR1cm4ga09rOwotfQotCi1IMjY0UGFyc2VyOjpSZXN1bHQgSDI2NFBhcnNlcjo6UGFyc2VWVUlQYXJhbWV0ZXJzKEgyNjRTUFMqIHNwcykgewotICBib29sIGFzcGVjdF9yYXRpb19pbmZvX3ByZXNlbnRfZmxhZzsKLSAgUkVBRF9CT09MX09SX1JFVFVSTigmYXNwZWN0X3JhdGlvX2luZm9fcHJlc2VudF9mbGFnKTsKLSAgaWYgKGFzcGVjdF9yYXRpb19pbmZvX3ByZXNlbnRfZmxhZykgewotICAgIGludCBhc3BlY3RfcmF0aW9faWRjOwotICAgIFJFQURfQklUU19PUl9SRVRVUk4oOCwgJmFzcGVjdF9yYXRpb19pZGMpOwotICAgIGlmIChhc3BlY3RfcmF0aW9faWRjID09IEgyNjRTUFM6OmtFeHRlbmRlZFNhcikgewotICAgICAgUkVBRF9CSVRTX09SX1JFVFVSTigxNiwgJnNwcy0+c2FyX3dpZHRoKTsKLSAgICAgIFJFQURfQklUU19PUl9SRVRVUk4oMTYsICZzcHMtPnNhcl9oZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb25zdCBpbnQgbWF4X2FzcGVjdF9yYXRpb19pZGMgPSBhcnJheXNpemUoa1RhYmxlU2FyV2lkdGgpIC0gMTsKLSAgICAgIElOX1JBTkdFX09SX1JFVFVSTihhc3BlY3RfcmF0aW9faWRjLCAwLCBtYXhfYXNwZWN0X3JhdGlvX2lkYyk7Ci0gICAgICBzcHMtPnNhcl93aWR0aCA9IGtUYWJsZVNhcldpZHRoW2FzcGVjdF9yYXRpb19pZGNdOwotICAgICAgc3BzLT5zYXJfaGVpZ2h0ID0ga1RhYmxlU2FySGVpZ2h0W2FzcGVjdF9yYXRpb19pZGNdOwotICAgIH0KLSAgfQotCi0gIGludCBkYXRhOwotICAvLyBSZWFkIGFuZCBpZ25vcmUgb3ZlcnNjYW4gYW5kIHZpZGVvIHNpZ25hbCB0eXBlIGluZm8uCi0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJmRhdGEpOyAgICAgICAgICAgIC8vIG92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnCi0gIGlmIChkYXRhKSBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgIC8vIG92ZXJzY2FuX2FwcHJvcHJpYXRlX2ZsYWcKLQotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgIC8vIHZpZGVvX3NpZ25hbF90eXBlX3ByZXNlbnRfZmxhZwotICBpZiAoZGF0YSkgewotICAgIFJFQURfQklUU19PUl9SRVRVUk4oMywgJmRhdGEpOyAgLy8gdmlkZW9fZm9ybWF0Ci0gICAgUkVBRF9CT09MX09SX1JFVFVSTigmZGF0YSk7ICAgICAvLyB2aWRlb19mdWxsX3JhbmdlX2ZsYWcKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgICAgIC8vIGNvbG91cl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcKLSAgICBpZiAoZGF0YSkKLSAgICAgIFJFQURfQklUU19PUl9SRVRVUk4oMjQsICZkYXRhKTsgIC8vIGNvbG9yIGRlc2NyaXB0aW9uIHN5bnRheCBlbGVtZW50cwotICB9Ci0KLSAgUkVBRF9CT09MX09SX1JFVFVSTigmZGF0YSk7ICAvLyBjaHJvbWFfbG9jX2luZm9fcHJlc2VudF9mbGFnCi0gIGlmIChkYXRhKSB7Ci0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJmRhdGEpOyAgLy8gY2hyb21hX3NhbXBsZV9sb2NfdHlwZV90b3BfZmllbGQKLSAgICBSRUFEX1VFX09SX1JFVFVSTigmZGF0YSk7ICAvLyBjaHJvbWFfc2FtcGxlX2xvY190eXBlX2JvdHRvbV9maWVsZAotICB9Ci0KLSAgLy8gUmVhZCBhbmQgaWdub3JlIHRpbWluZyBpbmZvLgotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgIC8vIHRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZwotICBpZiAoZGF0YSkgewotICAgIFJFQURfQklUU19PUl9SRVRVUk4oMTYsICZkYXRhKTsgIC8vIG51bV91bml0c19pbl90aWNrCi0gICAgUkVBRF9CSVRTX09SX1JFVFVSTigxNiwgJmRhdGEpOyAgLy8gbnVtX3VuaXRzX2luX3RpY2sKLSAgICBSRUFEX0JJVFNfT1JfUkVUVVJOKDE2LCAmZGF0YSk7ICAvLyB0aW1lX3NjYWxlCi0gICAgUkVBRF9CSVRTX09SX1JFVFVSTigxNiwgJmRhdGEpOyAgLy8gdGltZV9zY2FsZQotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJmRhdGEpOyAgICAgIC8vIGZpeGVkX2ZyYW1lX3JhdGVfZmxhZwotICB9Ci0KLSAgLy8gUmVhZCBhbmQgaWdub3JlIE5BTCBIUkQgcGFyYW1ldGVycywgaWYgcHJlc2VudC4KLSAgYm9vbCBocmRfcGFyYW1ldGVyc19wcmVzZW50ID0gZmFsc2U7Ci0gIFJlc3VsdCByZXMgPSBQYXJzZUFuZElnbm9yZUhSRFBhcmFtZXRlcnMoJmhyZF9wYXJhbWV0ZXJzX3ByZXNlbnQpOwotICBpZiAocmVzICE9IGtPaykgcmV0dXJuIHJlczsKLQotICAvLyBSZWFkIGFuZCBpZ25vcmUgVkNMIEhSRCBwYXJhbWV0ZXJzLCBpZiBwcmVzZW50LgotICByZXMgPSBQYXJzZUFuZElnbm9yZUhSRFBhcmFtZXRlcnMoJmhyZF9wYXJhbWV0ZXJzX3ByZXNlbnQpOwotICBpZiAocmVzICE9IGtPaykgcmV0dXJuIHJlczsKLQotICBpZiAoaHJkX3BhcmFtZXRlcnNfcHJlc2VudCkgICAgLy8gT25lIG9mIE5BTCBvciBWQ0wgcGFyYW1zIHByZXNlbnQgaXMgZW5vdWdoLgotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJmRhdGEpOyAgLy8gbG93X2RlbGF5X2hyZF9mbGFnCi0KLSAgUkVBRF9CT09MX09SX1JFVFVSTigmZGF0YSk7ICAvLyBwaWNfc3RydWN0X3ByZXNlbnRfZmxhZwotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzcHMtPmJpdHN0cmVhbV9yZXN0cmljdGlvbl9mbGFnKTsKLSAgaWYgKHNwcy0+Yml0c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcpIHsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZkYXRhKTsgIC8vIG1vdGlvbl92ZWN0b3JzX292ZXJfcGljX2JvdW5kYXJpZXNfZmxhZwotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZkYXRhKTsgICAgLy8gbWF4X2J5dGVzX3Blcl9waWNfZGVub20KLSAgICBSRUFEX1VFX09SX1JFVFVSTigmZGF0YSk7ICAgIC8vIG1heF9iaXRzX3Blcl9tYl9kZW5vbQotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZkYXRhKTsgICAgLy8gbG9nMl9tYXhfbXZfbGVuZ3RoX2hvcml6b250YWwKLSAgICBSRUFEX1VFX09SX1JFVFVSTigmZGF0YSk7ICAgIC8vIGxvZzJfbWF4X212X2xlbmd0aF92ZXJ0aWNhbAotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPm1heF9udW1fcmVvcmRlcl9mcmFtZXMpOwotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nKTsKLSAgICBUUlVFX09SX1JFVFVSTihzcHMtPm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nID49IHNwcy0+bWF4X251bV9yZWZfZnJhbWVzKTsKLSAgICBJTl9SQU5HRV9PUl9SRVRVUk4oc3BzLT5tYXhfbnVtX3Jlb3JkZXJfZnJhbWVzLCAwLAotICAgICAgICAgICAgICAgICAgICAgICBzcHMtPm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nKTsKLSAgfQotCi0gIHJldHVybiBrT2s7Ci19Ci0KLXN0YXRpYyB2b2lkIEZpbGxEZWZhdWx0U2VxU2NhbGluZ0xpc3RzKEgyNjRTUFMqIHNwcykgewotICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIMjY0U2NhbGluZ0xpc3Q0eDRMZW5ndGg7ICsraikKLSAgICAgIHNwcy0+c2NhbGluZ19saXN0NHg0W2ldW2pdID0gMTY7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCi0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSDI2NFNjYWxpbmdMaXN0OHg4TGVuZ3RoOyArK2opCi0gICAgICBzcHMtPnNjYWxpbmdfbGlzdDh4OFtpXVtqXSA9IDE2OwotfQotCi1IMjY0UGFyc2VyOjpSZXN1bHQgSDI2NFBhcnNlcjo6UGFyc2VTUFMoaW50KiBzcHNfaWQpIHsKLSAgLy8gU2VlIDcuNC4yLjEuCi0gIGludCBkYXRhOwotICBSZXN1bHQgcmVzOwotCi0gICpzcHNfaWQgPSAtMTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8SDI2NFNQUz4gc3BzKG5ldyBIMjY0U1BTKCkpOwotCi0gIFJFQURfQklUU19PUl9SRVRVUk4oOCwgJnNwcy0+cHJvZmlsZV9pZGMpOwotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzcHMtPmNvbnN0cmFpbnRfc2V0MF9mbGFnKTsKLSAgUkVBRF9CT09MX09SX1JFVFVSTigmc3BzLT5jb25zdHJhaW50X3NldDFfZmxhZyk7Ci0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+Y29uc3RyYWludF9zZXQyX2ZsYWcpOwotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzcHMtPmNvbnN0cmFpbnRfc2V0M19mbGFnKTsKLSAgUkVBRF9CT09MX09SX1JFVFVSTigmc3BzLT5jb25zdHJhaW50X3NldDRfZmxhZyk7Ci0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+Y29uc3RyYWludF9zZXQ1X2ZsYWcpOwotICBSRUFEX0JJVFNfT1JfUkVUVVJOKDIsICZkYXRhKTsgIC8vIHJlc2VydmVkX3plcm9fMmJpdHMKLSAgUkVBRF9CSVRTX09SX1JFVFVSTig4LCAmc3BzLT5sZXZlbF9pZGMpOwotICBSRUFEX1VFX09SX1JFVFVSTigmc3BzLT5zZXFfcGFyYW1ldGVyX3NldF9pZCk7Ci0gIFRSVUVfT1JfUkVUVVJOKHNwcy0+c2VxX3BhcmFtZXRlcl9zZXRfaWQgPCAzMik7Ci0KLSAgaWYgKHNwcy0+cHJvZmlsZV9pZGMgPT0gMTAwIHx8IHNwcy0+cHJvZmlsZV9pZGMgPT0gMTEwIHx8Ci0gICAgICBzcHMtPnByb2ZpbGVfaWRjID09IDEyMiB8fCBzcHMtPnByb2ZpbGVfaWRjID09IDI0NCB8fAotICAgICAgc3BzLT5wcm9maWxlX2lkYyA9PSA0NCB8fCBzcHMtPnByb2ZpbGVfaWRjID09IDgzIHx8Ci0gICAgICBzcHMtPnByb2ZpbGVfaWRjID09IDg2IHx8IHNwcy0+cHJvZmlsZV9pZGMgPT0gMTE4IHx8Ci0gICAgICBzcHMtPnByb2ZpbGVfaWRjID09IDEyOCkgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPmNocm9tYV9mb3JtYXRfaWRjKTsKLSAgICBUUlVFX09SX1JFVFVSTihzcHMtPmNocm9tYV9mb3JtYXRfaWRjIDwgNCk7Ci0KLSAgICBpZiAoc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA9PSAzKQotICAgICAgUkVBRF9CT09MX09SX1JFVFVSTigmc3BzLT5zZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZyk7Ci0KLSAgICBSRUFEX1VFX09SX1JFVFVSTigmc3BzLT5iaXRfZGVwdGhfbHVtYV9taW51czgpOwotICAgIFRSVUVfT1JfUkVUVVJOKHNwcy0+Yml0X2RlcHRoX2x1bWFfbWludXM4IDwgNyk7Ci0KLSAgICBSRUFEX1VFX09SX1JFVFVSTigmc3BzLT5iaXRfZGVwdGhfY2hyb21hX21pbnVzOCk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc3BzLT5iaXRfZGVwdGhfY2hyb21hX21pbnVzOCA8IDcpOwotCi0gICAgUkVBRF9CT09MX09SX1JFVFVSTigmc3BzLT5xcHByaW1lX3lfemVyb190cmFuc2Zvcm1fYnlwYXNzX2ZsYWcpOwotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+c2VxX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZyk7Ci0KLSAgICBpZiAoc3BzLT5zZXFfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnKSB7Ci0gICAgICBEVkxPRyg0KSA8PCAiU2NhbGluZyBtYXRyaXggcHJlc2VudCI7Ci0gICAgICByZXMgPSBQYXJzZVNQU1NjYWxpbmdMaXN0cyhzcHMuZ2V0KCkpOwotICAgICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEZpbGxEZWZhdWx0U2VxU2NhbGluZ0xpc3RzKHNwcy5nZXQoKSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMgPSAxOwotICAgIEZpbGxEZWZhdWx0U2VxU2NhbGluZ0xpc3RzKHNwcy5nZXQoKSk7Ci0gIH0KLQotICBpZiAoc3BzLT5zZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZykKLSAgICBzcHMtPmNocm9tYV9hcnJheV90eXBlID0gMDsKLSAgZWxzZQotICAgIHNwcy0+Y2hyb21hX2FycmF5X3R5cGUgPSBzcHMtPmNocm9tYV9mb3JtYXRfaWRjOwotCi0gIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPmxvZzJfbWF4X2ZyYW1lX251bV9taW51czQpOwotICBUUlVFX09SX1JFVFVSTihzcHMtPmxvZzJfbWF4X2ZyYW1lX251bV9taW51czQgPCAxMyk7Ci0KLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+cGljX29yZGVyX2NudF90eXBlKTsKLSAgVFJVRV9PUl9SRVRVUk4oc3BzLT5waWNfb3JkZXJfY250X3R5cGUgPCAzKTsKLQotICBpZiAoc3BzLT5waWNfb3JkZXJfY250X3R5cGUgPT0gMCkgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc3BzLT5sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQgPCAxMyk7Ci0gICAgc3BzLT5leHBlY3RlZF9kZWx0YV9wZXJfcGljX29yZGVyX2NudF9jeWNsZSA9IDA7Ci0gIH0gZWxzZSBpZiAoc3BzLT5waWNfb3JkZXJfY250X3R5cGUgPT0gMSkgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+ZGVsdGFfcGljX29yZGVyX2Fsd2F5c196ZXJvX2ZsYWcpOwotICAgIFJFQURfU0VfT1JfUkVUVVJOKCZzcHMtPm9mZnNldF9mb3Jfbm9uX3JlZl9waWMpOwotICAgIFJFQURfU0VfT1JfUkVUVVJOKCZzcHMtPm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZCk7Ci0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+bnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZSk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc3BzLT5udW1fcmVmX2ZyYW1lc19pbl9waWNfb3JkZXJfY250X2N5Y2xlIDwgMjU1KTsKLQotICAgIGludCBvZmZzZXRfYWNjID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwcy0+bnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZTsgKytpKSB7Ci0gICAgICBSRUFEX1NFX09SX1JFVFVSTigmc3BzLT5vZmZzZXRfZm9yX3JlZl9mcmFtZVtpXSk7Ci0gICAgICBpZiAob2Zmc2V0X2FjYyArIHNwcy0+b2Zmc2V0X2Zvcl9yZWZfZnJhbWVbaV0gPCAwKSB7Ci0gICAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLSAgICAgIH0KLSAgICAgIG9mZnNldF9hY2MgKz0gc3BzLT5vZmZzZXRfZm9yX3JlZl9mcmFtZVtpXTsKLSAgICB9Ci0gICAgc3BzLT5leHBlY3RlZF9kZWx0YV9wZXJfcGljX29yZGVyX2NudF9jeWNsZSA9IG9mZnNldF9hY2M7Ci0gIH0KLQotICBSRUFEX1VFX09SX1JFVFVSTigmc3BzLT5tYXhfbnVtX3JlZl9mcmFtZXMpOwotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzcHMtPmdhcHNfaW5fZnJhbWVfbnVtX3ZhbHVlX2FsbG93ZWRfZmxhZyk7Ci0KLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+cGljX3dpZHRoX2luX21ic19taW51czEpOwotICBSRUFEX1VFX09SX1JFVFVSTigmc3BzLT5waWNfaGVpZ2h0X2luX21hcF91bml0c19taW51czEpOwotCi0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+ZnJhbWVfbWJzX29ubHlfZmxhZyk7Ci0gIGlmICghc3BzLT5mcmFtZV9tYnNfb25seV9mbGFnKQotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+bWJfYWRhcHRpdmVfZnJhbWVfZmllbGRfZmxhZyk7Ci0KLSAgUkVBRF9CT09MX09SX1JFVFVSTigmc3BzLT5kaXJlY3RfOHg4X2luZmVyZW5jZV9mbGFnKTsKLQotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzcHMtPmZyYW1lX2Nyb3BwaW5nX2ZsYWcpOwotICBpZiAoc3BzLT5mcmFtZV9jcm9wcGluZ19mbGFnKSB7Ci0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+ZnJhbWVfY3JvcF9sZWZ0X29mZnNldCk7Ci0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+ZnJhbWVfY3JvcF9yaWdodF9vZmZzZXQpOwotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzcHMtPmZyYW1lX2Nyb3BfdG9wX29mZnNldCk7Ci0gICAgUkVBRF9VRV9PUl9SRVRVUk4oJnNwcy0+ZnJhbWVfY3JvcF9ib3R0b21fb2Zmc2V0KTsKLSAgfQotCi0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNwcy0+dnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnKTsKLSAgaWYgKHNwcy0+dnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnKSB7Ci0gICAgRFZMT0coNCkgPDwgIlZVSSBwYXJhbWV0ZXJzIHByZXNlbnQiOwotICAgIHJlcyA9IFBhcnNlVlVJUGFyYW1ldGVycyhzcHMuZ2V0KCkpOwotICAgIGlmIChyZXMgIT0ga09rKSByZXR1cm4gcmVzOwotICB9Ci0KLSAgLy8gSWYgYW4gU1BTIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMsIHJlcGxhY2UgaXQuCi0gICpzcHNfaWQgPSBzcHMtPnNlcV9wYXJhbWV0ZXJfc2V0X2lkOwotICBhY3RpdmVfU1BTZXNfWypzcHNfaWRdID0gKnNwczsKLQotICByZXR1cm4ga09rOwotfQotCi1IMjY0UGFyc2VyOjpSZXN1bHQgSDI2NFBhcnNlcjo6UGFyc2VQUFMoaW50KiBwcHNfaWQpIHsKLSAgLy8gU2VlIDcuNC4yLjIuCi0gIGNvbnN0IEgyNjRTUFMqIHNwczsKLSAgUmVzdWx0IHJlczsKLQotICAqcHBzX2lkID0gLTE7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEgyNjRQUFM+IHBwcyhuZXcgSDI2NFBQUygpKTsKLQotICBSRUFEX1VFX09SX1JFVFVSTigmcHBzLT5waWNfcGFyYW1ldGVyX3NldF9pZCk7Ci0gIFJFQURfVUVfT1JfUkVUVVJOKCZwcHMtPnNlcV9wYXJhbWV0ZXJfc2V0X2lkKTsKLSAgVFJVRV9PUl9SRVRVUk4ocHBzLT5zZXFfcGFyYW1ldGVyX3NldF9pZCA8IDMyKTsKLQotICBpZiAoYWN0aXZlX1NQU2VzXy5maW5kKHBwcy0+c2VxX3BhcmFtZXRlcl9zZXRfaWQpID09IGFjdGl2ZV9TUFNlc18uZW5kKCkpIHsKLSAgICBEVkxPRygxKSA8PCAiSW52YWxpZCBzdHJlYW0sIG5vIFNQUyBpZDogIiA8PCBwcHMtPnNlcV9wYXJhbWV0ZXJfc2V0X2lkOwotICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLSAgfQotCi0gIHNwcyA9IEdldFNQUyhwcHMtPnNlcV9wYXJhbWV0ZXJfc2V0X2lkKTsKLSAgVFJVRV9PUl9SRVRVUk4oc3BzKTsKLQotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZwcHMtPmVudHJvcHlfY29kaW5nX21vZGVfZmxhZyk7Ci0gIFJFQURfQk9PTF9PUl9SRVRVUk4oJnBwcy0+Ym90dG9tX2ZpZWxkX3BpY19vcmRlcl9pbl9mcmFtZV9wcmVzZW50X2ZsYWcpOwotCi0gIFJFQURfVUVfT1JfUkVUVVJOKCZwcHMtPm51bV9zbGljZV9ncm91cHNfbWludXMxKTsKLSAgaWYgKHBwcy0+bnVtX3NsaWNlX2dyb3Vwc19taW51czEgPiAxKSB7Ci0gICAgRFZMT0coMSkgPDwgIlNsaWNlIGdyb3VwcyBub3Qgc3VwcG9ydGVkIjsKLSAgICByZXR1cm4ga1Vuc3VwcG9ydGVkU3RyZWFtOwotICB9Ci0KLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnBwcy0+bnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxKTsKLSAgVFJVRV9PUl9SRVRVUk4ocHBzLT5udW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEgPCAzMik7Ci0KLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnBwcy0+bnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxKTsKLSAgVFJVRV9PUl9SRVRVUk4ocHBzLT5udW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czEgPCAzMik7Ci0KLSAgUkVBRF9CT09MX09SX1JFVFVSTigmcHBzLT53ZWlnaHRlZF9wcmVkX2ZsYWcpOwotICBSRUFEX0JJVFNfT1JfUkVUVVJOKDIsICZwcHMtPndlaWdodGVkX2JpcHJlZF9pZGMpOwotICBUUlVFX09SX1JFVFVSTihwcHMtPndlaWdodGVkX2JpcHJlZF9pZGMgPCAzKTsKLQotICBSRUFEX1NFX09SX1JFVFVSTigmcHBzLT5waWNfaW5pdF9xcF9taW51czI2KTsKLSAgSU5fUkFOR0VfT1JfUkVUVVJOKHBwcy0+cGljX2luaXRfcXBfbWludXMyNiwgLTI2LCAyNSk7Ci0KLSAgUkVBRF9TRV9PUl9SRVRVUk4oJnBwcy0+cGljX2luaXRfcXNfbWludXMyNik7Ci0gIElOX1JBTkdFX09SX1JFVFVSTihwcHMtPnBpY19pbml0X3FzX21pbnVzMjYsIC0yNiwgMjUpOwotCi0gIFJFQURfU0VfT1JfUkVUVVJOKCZwcHMtPmNocm9tYV9xcF9pbmRleF9vZmZzZXQpOwotICBJTl9SQU5HRV9PUl9SRVRVUk4ocHBzLT5jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0LCAtMTIsIDEyKTsKLSAgcHBzLT5zZWNvbmRfY2hyb21hX3FwX2luZGV4X29mZnNldCA9IHBwcy0+Y2hyb21hX3FwX2luZGV4X29mZnNldDsKLQotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZwcHMtPmRlYmxvY2tpbmdfZmlsdGVyX2NvbnRyb2xfcHJlc2VudF9mbGFnKTsKLSAgUkVBRF9CT09MX09SX1JFVFVSTigmcHBzLT5jb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWcpOwotICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZwcHMtPnJlZHVuZGFudF9waWNfY250X3ByZXNlbnRfZmxhZyk7Ci0KLSAgaWYgKGJyXy5IYXNNb3JlUkJTUERhdGEoKSkgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnBwcy0+dHJhbnNmb3JtXzh4OF9tb2RlX2ZsYWcpOwotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnBwcy0+cGljX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZyk7Ci0KLSAgICBpZiAocHBzLT5waWNfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnKSB7Ci0gICAgICBEVkxPRyg0KSA8PCAiUGljdHVyZSBzY2FsaW5nIG1hdHJpeCBwcmVzZW50IjsKLSAgICAgIHJlcyA9IFBhcnNlUFBTU2NhbGluZ0xpc3RzKCpzcHMsIHBwcy5nZXQoKSk7Ci0gICAgICBpZiAocmVzICE9IGtPaykgcmV0dXJuIHJlczsKLSAgICB9Ci0KLSAgICBSRUFEX1NFX09SX1JFVFVSTigmcHBzLT5zZWNvbmRfY2hyb21hX3FwX2luZGV4X29mZnNldCk7Ci0gIH0KLQotICAvLyBJZiBhIFBQUyB3aXRoIHRoZSBzYW1lIGlkIGFscmVhZHkgZXhpc3RzLCByZXBsYWNlIGl0LgotICAqcHBzX2lkID0gcHBzLT5waWNfcGFyYW1ldGVyX3NldF9pZDsKLSAgYWN0aXZlX1BQU2VzX1sqcHBzX2lkXSA9ICpwcHM7Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OlBhcnNlUmVmUGljTGlzdE1vZGlmaWNhdGlvbigKLSAgICBpbnQgbnVtX3JlZl9pZHhfYWN0aXZlX21pbnVzMSwgSDI2NE1vZGlmaWNhdGlvbk9mUGljTnVtKiByZWZfbGlzdF9tb2RzKSB7Ci0gIEgyNjRNb2RpZmljYXRpb25PZlBpY051bSogcGljX251bV9tb2Q7Ci0KLSAgaWYgKG51bV9yZWZfaWR4X2FjdGl2ZV9taW51czEgPj0gMzIpIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyArK2kpIHsKLSAgICBwaWNfbnVtX21vZCA9ICZyZWZfbGlzdF9tb2RzW2ldOwotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZwaWNfbnVtX21vZC0+bW9kaWZpY2F0aW9uX29mX3BpY19udW1zX2lkYyk7Ci0gICAgVFJVRV9PUl9SRVRVUk4ocGljX251bV9tb2QtPm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMgPCA0KTsKLQotICAgIHN3aXRjaCAocGljX251bV9tb2QtPm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMpIHsKLSAgICAgIGNhc2UgMDoKLSAgICAgIGNhc2UgMToKLSAgICAgICAgUkVBRF9VRV9PUl9SRVRVUk4oJnBpY19udW1fbW9kLT5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDI6Ci0gICAgICAgIFJFQURfVUVfT1JfUkVUVVJOKCZwaWNfbnVtX21vZC0+bG9uZ190ZXJtX3BpY19udW0pOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAzOgotICAgICAgICAvLyBQZXIgc3BlYywgbGlzdCBjYW5ub3QgYmUgZW1wdHkuCi0gICAgICAgIGlmIChpID09IDApIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLSAgICAgICAgcmV0dXJuIGtPazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOwotICAgIH0KLSAgfQotCi0gIC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBkaWRuJ3QgZ2V0IGxvb3AgZW5kIG1hcmtlciBwcmVtYXR1cmVseSwKLSAgLy8gc28gbWFrZSBzdXJlIGl0IGlzIHRoZXJlIGZvciBvdXIgY2xpZW50LgotICBpbnQgbW9kaWZpY2F0aW9uX29mX3BpY19udW1zX2lkYzsKLSAgUkVBRF9VRV9PUl9SRVRVUk4oJm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMpOwotICBUUlVFX09SX1JFVFVSTihtb2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID09IDMpOwotCi0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZVJlZlBpY0xpc3RNb2RpZmljYXRpb25zKAotICAgIEgyNjRTbGljZUhlYWRlciogc2hkcikgewotICBSZXN1bHQgcmVzOwotCi0gIGlmICghc2hkci0+SXNJU2xpY2UoKSAmJiAhc2hkci0+SXNTSVNsaWNlKCkpIHsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDApOwotICAgIGlmIChzaGRyLT5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDApIHsKLSAgICAgIHJlcyA9IFBhcnNlUmVmUGljTGlzdE1vZGlmaWNhdGlvbihzaGRyLT5udW1fcmVmX2lkeF9sMF9hY3RpdmVfbWludXMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZHItPnJlZl9saXN0X2wwX21vZGlmaWNhdGlvbnMpOwotICAgICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNoZHItPklzQlNsaWNlKCkpIHsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDEpOwotICAgIGlmIChzaGRyLT5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDEpIHsKLSAgICAgIHJlcyA9IFBhcnNlUmVmUGljTGlzdE1vZGlmaWNhdGlvbihzaGRyLT5udW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZHItPnJlZl9saXN0X2wxX21vZGlmaWNhdGlvbnMpOwotICAgICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OlBhcnNlV2VpZ2h0aW5nRmFjdG9ycygKLSAgICBpbnQgbnVtX3JlZl9pZHhfYWN0aXZlX21pbnVzMSwgaW50IGNocm9tYV9hcnJheV90eXBlLAotICAgIGludCBsdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tLCBpbnQgY2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tLAotICAgIEgyNjRXZWlnaHRpbmdGYWN0b3JzKiB3X2ZhY3RzKSB7Ci0gIGludCBkZWZfbHVtYV93ZWlnaHQgPSAxIDw8IGx1bWFfbG9nMl93ZWlnaHRfZGVub207Ci0gIGludCBkZWZfY2hyb21hX3dlaWdodCA9IDEgPDwgY2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3JlZl9pZHhfYWN0aXZlX21pbnVzMSArIDE7ICsraSkgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJndfZmFjdHMtPmx1bWFfd2VpZ2h0X2ZsYWcpOwotICAgIGlmICh3X2ZhY3RzLT5sdW1hX3dlaWdodF9mbGFnKSB7Ci0gICAgICBSRUFEX1NFX09SX1JFVFVSTigmd19mYWN0cy0+bHVtYV93ZWlnaHRbaV0pOwotICAgICAgSU5fUkFOR0VfT1JfUkVUVVJOKHdfZmFjdHMtPmx1bWFfd2VpZ2h0W2ldLCAtMTI4LCAxMjcpOwotCi0gICAgICBSRUFEX1NFX09SX1JFVFVSTigmd19mYWN0cy0+bHVtYV9vZmZzZXRbaV0pOwotICAgICAgSU5fUkFOR0VfT1JfUkVUVVJOKHdfZmFjdHMtPmx1bWFfb2Zmc2V0W2ldLCAtMTI4LCAxMjcpOwotICAgIH0gZWxzZSB7Ci0gICAgICB3X2ZhY3RzLT5sdW1hX3dlaWdodFtpXSA9IGRlZl9sdW1hX3dlaWdodDsKLSAgICAgIHdfZmFjdHMtPmx1bWFfb2Zmc2V0W2ldID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoY2hyb21hX2FycmF5X3R5cGUgIT0gMCkgewotICAgICAgUkVBRF9CT09MX09SX1JFVFVSTigmd19mYWN0cy0+Y2hyb21hX3dlaWdodF9mbGFnKTsKLSAgICAgIGlmICh3X2ZhY3RzLT5jaHJvbWFfd2VpZ2h0X2ZsYWcpIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAyOyArK2opIHsKLSAgICAgICAgICBSRUFEX1NFX09SX1JFVFVSTigmd19mYWN0cy0+Y2hyb21hX3dlaWdodFtpXVtqXSk7Ci0gICAgICAgICAgSU5fUkFOR0VfT1JfUkVUVVJOKHdfZmFjdHMtPmNocm9tYV93ZWlnaHRbaV1bal0sIC0xMjgsIDEyNyk7Ci0KLSAgICAgICAgICBSRUFEX1NFX09SX1JFVFVSTigmd19mYWN0cy0+Y2hyb21hX29mZnNldFtpXVtqXSk7Ci0gICAgICAgICAgSU5fUkFOR0VfT1JfUkVUVVJOKHdfZmFjdHMtPmNocm9tYV9vZmZzZXRbaV1bal0sIC0xMjgsIDEyNyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgKytqKSB7Ci0gICAgICAgICAgd19mYWN0cy0+Y2hyb21hX3dlaWdodFtpXVtqXSA9IGRlZl9jaHJvbWFfd2VpZ2h0OwotICAgICAgICAgIHdfZmFjdHMtPmNocm9tYV9vZmZzZXRbaV1bal0gPSAwOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OlBhcnNlUHJlZFdlaWdodFRhYmxlKGNvbnN0IEgyNjRTUFMmIHNwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIMjY0U2xpY2VIZWFkZXIqIHNoZHIpIHsKLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnNoZHItPmx1bWFfbG9nMl93ZWlnaHRfZGVub20pOwotICBUUlVFX09SX1JFVFVSTihzaGRyLT5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tIDwgOCk7Ci0KLSAgaWYgKHNwcy5jaHJvbWFfYXJyYXlfdHlwZSAhPSAwKQotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5jaHJvbWFfbG9nMl93ZWlnaHRfZGVub20pOwotICBUUlVFX09SX1JFVFVSTihzaGRyLT5jaHJvbWFfbG9nMl93ZWlnaHRfZGVub20gPCA4KTsKLQotICBSZXN1bHQgcmVzID0gUGFyc2VXZWlnaHRpbmdGYWN0b3JzKAotICAgICAgc2hkci0+bnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMSwgc3BzLmNocm9tYV9hcnJheV90eXBlLAotICAgICAgc2hkci0+bHVtYV9sb2cyX3dlaWdodF9kZW5vbSwgc2hkci0+Y2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tLAotICAgICAgJnNoZHItPnByZWRfd2VpZ2h0X3RhYmxlX2wwKTsKLSAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0KLSAgaWYgKHNoZHItPklzQlNsaWNlKCkpIHsKLSAgICByZXMgPSBQYXJzZVdlaWdodGluZ0ZhY3RvcnMoCi0gICAgICAgIHNoZHItPm51bV9yZWZfaWR4X2wxX2FjdGl2ZV9taW51czEsIHNwcy5jaHJvbWFfYXJyYXlfdHlwZSwKLSAgICAgICAgc2hkci0+bHVtYV9sb2cyX3dlaWdodF9kZW5vbSwgc2hkci0+Y2hyb21hX2xvZzJfd2VpZ2h0X2Rlbm9tLAotICAgICAgICAmc2hkci0+cHJlZF93ZWlnaHRfdGFibGVfbDEpOwotICAgIGlmIChyZXMgIT0ga09rKSByZXR1cm4gcmVzOwotICB9Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotSDI2NFBhcnNlcjo6UmVzdWx0IEgyNjRQYXJzZXI6OlBhcnNlRGVjUmVmUGljTWFya2luZyhIMjY0U2xpY2VIZWFkZXIqIHNoZHIpIHsKLSAgc2l6ZV90IGJpdHNfbGVmdF9hdF9zdGFydCA9IGJyXy5OdW1CaXRzTGVmdCgpOwotCi0gIGlmIChzaGRyLT5pZHJfcGljX2ZsYWcpIHsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5ub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnKTsKLSAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5sb25nX3Rlcm1fcmVmZXJlbmNlX2ZsYWcpOwotICB9IGVsc2UgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNoZHItPmFkYXB0aXZlX3JlZl9waWNfbWFya2luZ19tb2RlX2ZsYWcpOwotCi0gICAgSDI2NERlY1JlZlBpY01hcmtpbmcqIG1hcmtpbmc7Ci0gICAgaWYgKHNoZHItPmFkYXB0aXZlX3JlZl9waWNfbWFya2luZ19tb2RlX2ZsYWcpIHsKLSAgICAgIHNpemVfdCBpOwotICAgICAgZm9yIChpID0gMDsgaSA8IGFycmF5c2l6ZShzaGRyLT5yZWZfcGljX21hcmtpbmcpOyArK2kpIHsKLSAgICAgICAgbWFya2luZyA9ICZzaGRyLT5yZWZfcGljX21hcmtpbmdbaV07Ci0KLSAgICAgICAgUkVBRF9VRV9PUl9SRVRVUk4oJm1hcmtpbmctPm1lbW9yeV9tZ21udF9jb250cm9sX29wZXJhdGlvbik7Ci0gICAgICAgIGlmIChtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPT0gMCkgYnJlYWs7Ci0KLSAgICAgICAgaWYgKG1hcmtpbmctPm1lbW9yeV9tZ21udF9jb250cm9sX29wZXJhdGlvbiA9PSAxIHx8Ci0gICAgICAgICAgICBtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPT0gMykKLSAgICAgICAgICBSRUFEX1VFX09SX1JFVFVSTigmbWFya2luZy0+ZGlmZmVyZW5jZV9vZl9waWNfbnVtc19taW51czEpOwotCi0gICAgICAgIGlmIChtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPT0gMikKLSAgICAgICAgICBSRUFEX1VFX09SX1JFVFVSTigmbWFya2luZy0+bG9uZ190ZXJtX3BpY19udW0pOwotCi0gICAgICAgIGlmIChtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPT0gMyB8fAotICAgICAgICAgICAgbWFya2luZy0+bWVtb3J5X21nbW50X2NvbnRyb2xfb3BlcmF0aW9uID09IDYpCi0gICAgICAgICAgUkVBRF9VRV9PUl9SRVRVUk4oJm1hcmtpbmctPmxvbmdfdGVybV9mcmFtZV9pZHgpOwotCi0gICAgICAgIGlmIChtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPT0gNCkKLSAgICAgICAgICBSRUFEX1VFX09SX1JFVFVSTigmbWFya2luZy0+bWF4X2xvbmdfdGVybV9mcmFtZV9pZHhfcGx1czEpOwotCi0gICAgICAgIGlmIChtYXJraW5nLT5tZW1vcnlfbWdtbnRfY29udHJvbF9vcGVyYXRpb24gPiA2KSByZXR1cm4ga0ludmFsaWRTdHJlYW07Ci0gICAgICB9Ci0KLSAgICAgIGlmIChpID09IGFycmF5c2l6ZShzaGRyLT5yZWZfcGljX21hcmtpbmcpKSB7Ci0gICAgICAgIERWTE9HKDEpIDw8ICJSYW4gb3V0IG9mIGRlYyByZWYgcGljIG1hcmtpbmcgZmllbGRzIjsKLSAgICAgICAgcmV0dXJuIGtVbnN1cHBvcnRlZFN0cmVhbTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzaGRyLT5kZWNfcmVmX3BpY19tYXJraW5nX2JpdF9zaXplID0gYml0c19sZWZ0X2F0X3N0YXJ0IC0gYnJfLk51bUJpdHNMZWZ0KCk7Ci0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZVNsaWNlSGVhZGVyKGNvbnN0IEgyNjROQUxVJiBuYWx1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSDI2NFNsaWNlSGVhZGVyKiBzaGRyKSB7Ci0gIC8vIFNlZSA3LjQuMy4KLSAgY29uc3QgSDI2NFNQUyogc3BzOwotICBjb25zdCBIMjY0UFBTKiBwcHM7Ci0gIFJlc3VsdCByZXM7Ci0KLSAgbWVtc2V0KHNoZHIsIDAsIHNpemVvZigqc2hkcikpOwotCi0gIHNoZHItPmlkcl9waWNfZmxhZyA9IChuYWx1Lm5hbF91bml0X3R5cGUgPT0gNSk7Ci0gIHNoZHItPm5hbF9yZWZfaWRjID0gbmFsdS5uYWxfcmVmX2lkYzsKLSAgc2hkci0+bmFsdV9kYXRhID0gbmFsdS5kYXRhOwotICBzaGRyLT5uYWx1X3NpemUgPSBuYWx1LnNpemU7Ci0KLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnNoZHItPmZpcnN0X21iX2luX3NsaWNlKTsKLSAgUkVBRF9VRV9PUl9SRVRVUk4oJnNoZHItPnNsaWNlX3R5cGUpOwotICBUUlVFX09SX1JFVFVSTihzaGRyLT5zbGljZV90eXBlIDwgMTApOwotCi0gIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5waWNfcGFyYW1ldGVyX3NldF9pZCk7Ci0KLSAgcHBzID0gR2V0UFBTKHNoZHItPnBpY19wYXJhbWV0ZXJfc2V0X2lkKTsKLSAgVFJVRV9PUl9SRVRVUk4ocHBzKTsKLQotICBzcHMgPSBHZXRTUFMocHBzLT5zZXFfcGFyYW1ldGVyX3NldF9pZCk7Ci0gIFRSVUVfT1JfUkVUVVJOKHNwcyk7Ci0KLSAgaWYgKHNwcy0+c2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcpIHsKLSAgICBEVkxPRygxKSA8PCAiSW50ZXJsYWNlZCBzdHJlYW1zIG5vdCBzdXBwb3J0ZWQiOwotICAgIHJldHVybiBrVW5zdXBwb3J0ZWRTdHJlYW07Ci0gIH0KLQotICBSRUFEX0JJVFNfT1JfUkVUVVJOKHNwcy0+bG9nMl9tYXhfZnJhbWVfbnVtX21pbnVzNCArIDQsICZzaGRyLT5mcmFtZV9udW0pOwotICBpZiAoIXNwcy0+ZnJhbWVfbWJzX29ubHlfZmxhZykgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNoZHItPmZpZWxkX3BpY19mbGFnKTsKLSAgICBpZiAoc2hkci0+ZmllbGRfcGljX2ZsYWcpIHsKLSAgICAgIERWTE9HKDEpIDw8ICJJbnRlcmxhY2VkIHN0cmVhbXMgbm90IHN1cHBvcnRlZCI7Ci0gICAgICByZXR1cm4ga1Vuc3VwcG9ydGVkU3RyZWFtOwotICAgIH0KLSAgfQotCi0gIGlmIChzaGRyLT5pZHJfcGljX2ZsYWcpIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5pZHJfcGljX2lkKTsKLQotICBzaXplX3QgYml0c19sZWZ0X2F0X3BpY19vcmRlcl9jbnRfc3RhcnQgPSBicl8uTnVtQml0c0xlZnQoKTsKLSAgaWYgKHNwcy0+cGljX29yZGVyX2NudF90eXBlID09IDApIHsKLSAgICBSRUFEX0JJVFNfT1JfUkVUVVJOKHNwcy0+bG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0ICsgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzaGRyLT5waWNfb3JkZXJfY250X2xzYik7Ci0gICAgaWYgKHBwcy0+Ym90dG9tX2ZpZWxkX3BpY19vcmRlcl9pbl9mcmFtZV9wcmVzZW50X2ZsYWcgJiYKLSAgICAgICAgIXNoZHItPmZpZWxkX3BpY19mbGFnKQotICAgICAgUkVBRF9TRV9PUl9SRVRVUk4oJnNoZHItPmRlbHRhX3BpY19vcmRlcl9jbnRfYm90dG9tKTsKLSAgfQotCi0gIGlmIChzcHMtPnBpY19vcmRlcl9jbnRfdHlwZSA9PSAxICYmICFzcHMtPmRlbHRhX3BpY19vcmRlcl9hbHdheXNfemVyb19mbGFnKSB7Ci0gICAgUkVBRF9TRV9PUl9SRVRVUk4oJnNoZHItPmRlbHRhX3BpY19vcmRlcl9jbnQwKTsKLSAgICBpZiAocHBzLT5ib3R0b21fZmllbGRfcGljX29yZGVyX2luX2ZyYW1lX3ByZXNlbnRfZmxhZyAmJgotICAgICAgICAhc2hkci0+ZmllbGRfcGljX2ZsYWcpCi0gICAgICBSRUFEX1NFX09SX1JFVFVSTigmc2hkci0+ZGVsdGFfcGljX29yZGVyX2NudDEpOwotICB9Ci0KLSAgc2hkci0+cGljX29yZGVyX2NudF9iaXRfc2l6ZSA9Ci0gICAgICBiaXRzX2xlZnRfYXRfcGljX29yZGVyX2NudF9zdGFydCAtIGJyXy5OdW1CaXRzTGVmdCgpOwotCi0gIGlmIChwcHMtPnJlZHVuZGFudF9waWNfY250X3ByZXNlbnRfZmxhZykgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5yZWR1bmRhbnRfcGljX2NudCk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc2hkci0+cmVkdW5kYW50X3BpY19jbnQgPCAxMjgpOwotICB9Ci0KLSAgaWYgKHNoZHItPklzQlNsaWNlKCkpIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNoZHItPmRpcmVjdF9zcGF0aWFsX212X3ByZWRfZmxhZyk7Ci0KLSAgaWYgKHNoZHItPklzUFNsaWNlKCkgfHwgc2hkci0+SXNTUFNsaWNlKCkgfHwgc2hkci0+SXNCU2xpY2UoKSkgewotICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNoZHItPm51bV9yZWZfaWR4X2FjdGl2ZV9vdmVycmlkZV9mbGFnKTsKLSAgICBpZiAoc2hkci0+bnVtX3JlZl9pZHhfYWN0aXZlX292ZXJyaWRlX2ZsYWcpIHsKLSAgICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5udW1fcmVmX2lkeF9sMF9hY3RpdmVfbWludXMxKTsKLSAgICAgIGlmIChzaGRyLT5Jc0JTbGljZSgpKQotICAgICAgICBSRUFEX1VFX09SX1JFVFVSTigmc2hkci0+bnVtX3JlZl9pZHhfbDFfYWN0aXZlX21pbnVzMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNoZHItPm51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czEgPQotICAgICAgICAgIHBwcy0+bnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxOwotICAgICAgaWYgKHNoZHItPklzQlNsaWNlKCkpIHsKLSAgICAgICAgc2hkci0+bnVtX3JlZl9pZHhfbDFfYWN0aXZlX21pbnVzMSA9Ci0gICAgICAgICAgICBwcHMtPm51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKHNoZHItPmZpZWxkX3BpY19mbGFnKSB7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc2hkci0+bnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMSA8IDMyKTsKLSAgICBUUlVFX09SX1JFVFVSTihzaGRyLT5udW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxIDwgMzIpOwotICB9IGVsc2UgewotICAgIFRSVUVfT1JfUkVUVVJOKHNoZHItPm51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czEgPCAxNik7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc2hkci0+bnVtX3JlZl9pZHhfbDFfYWN0aXZlX21pbnVzMSA8IDE2KTsKLSAgfQotCi0gIGlmIChuYWx1Lm5hbF91bml0X3R5cGUgPT0gSDI2NE5BTFU6OmtDb2RlZFNsaWNlRXh0ZW5zaW9uKSB7Ci0gICAgcmV0dXJuIGtVbnN1cHBvcnRlZFN0cmVhbTsKLSAgfSBlbHNlIHsKLSAgICByZXMgPSBQYXJzZVJlZlBpY0xpc3RNb2RpZmljYXRpb25zKHNoZHIpOwotICAgIGlmIChyZXMgIT0ga09rKSByZXR1cm4gcmVzOwotICB9Ci0KLSAgaWYgKChwcHMtPndlaWdodGVkX3ByZWRfZmxhZyAmJiAoc2hkci0+SXNQU2xpY2UoKSB8fCBzaGRyLT5Jc1NQU2xpY2UoKSkpIHx8Ci0gICAgICAocHBzLT53ZWlnaHRlZF9iaXByZWRfaWRjID09IDEgJiYgc2hkci0+SXNCU2xpY2UoKSkpIHsKLSAgICByZXMgPSBQYXJzZVByZWRXZWlnaHRUYWJsZSgqc3BzLCBzaGRyKTsKLSAgICBpZiAocmVzICE9IGtPaykgcmV0dXJuIHJlczsKLSAgfQotCi0gIGlmIChuYWx1Lm5hbF9yZWZfaWRjICE9IDApIHsKLSAgICByZXMgPSBQYXJzZURlY1JlZlBpY01hcmtpbmcoc2hkcik7Ci0gICAgaWYgKHJlcyAhPSBrT2spIHJldHVybiByZXM7Ci0gIH0KLQotICBpZiAocHBzLT5lbnRyb3B5X2NvZGluZ19tb2RlX2ZsYWcgJiYgIXNoZHItPklzSVNsaWNlKCkgJiYKLSAgICAgICFzaGRyLT5Jc1NJU2xpY2UoKSkgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5jYWJhY19pbml0X2lkYyk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc2hkci0+Y2FiYWNfaW5pdF9pZGMgPCAzKTsKLSAgfQotCi0gIFJFQURfU0VfT1JfUkVUVVJOKCZzaGRyLT5zbGljZV9xcF9kZWx0YSk7Ci0KLSAgaWYgKHNoZHItPklzU1BTbGljZSgpIHx8IHNoZHItPklzU0lTbGljZSgpKSB7Ci0gICAgaWYgKHNoZHItPklzU1BTbGljZSgpKSBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5zcF9mb3Jfc3dpdGNoX2ZsYWcpOwotICAgIFJFQURfU0VfT1JfUkVUVVJOKCZzaGRyLT5zbGljZV9xc19kZWx0YSk7Ci0gIH0KLQotICBpZiAocHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3ByZXNlbnRfZmxhZykgewotICAgIFJFQURfVUVfT1JfUkVUVVJOKCZzaGRyLT5kaXNhYmxlX2RlYmxvY2tpbmdfZmlsdGVyX2lkYyk7Ci0gICAgVFJVRV9PUl9SRVRVUk4oc2hkci0+ZGlzYWJsZV9kZWJsb2NraW5nX2ZpbHRlcl9pZGMgPCAzKTsKLQotICAgIGlmIChzaGRyLT5kaXNhYmxlX2RlYmxvY2tpbmdfZmlsdGVyX2lkYyAhPSAxKSB7Ci0gICAgICBSRUFEX1NFX09SX1JFVFVSTigmc2hkci0+c2xpY2VfYWxwaGFfYzBfb2Zmc2V0X2RpdjIpOwotICAgICAgSU5fUkFOR0VfT1JfUkVUVVJOKHNoZHItPnNsaWNlX2FscGhhX2MwX29mZnNldF9kaXYyLCAtNiwgNik7Ci0KLSAgICAgIFJFQURfU0VfT1JfUkVUVVJOKCZzaGRyLT5zbGljZV9iZXRhX29mZnNldF9kaXYyKTsKLSAgICAgIElOX1JBTkdFX09SX1JFVFVSTihzaGRyLT5zbGljZV9iZXRhX29mZnNldF9kaXYyLCAtNiwgNik7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHBwcy0+bnVtX3NsaWNlX2dyb3Vwc19taW51czEgPiAwKSB7Ci0gICAgRFZMT0coMSkgPDwgIlNsaWNlIGdyb3VwcyBub3Qgc3VwcG9ydGVkIjsKLSAgICByZXR1cm4ga1Vuc3VwcG9ydGVkU3RyZWFtOwotICB9Ci0KLSAgc2l6ZV90IGVwYiA9IGJyXy5OdW1FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXNSZWFkKCk7Ci0gIHNoZHItPmhlYWRlcl9iaXRfc2l6ZSA9IChzaGRyLT5uYWx1X3NpemUgLSBlcGIpICogOCAtIGJyXy5OdW1CaXRzTGVmdCgpOwotCi0gIHJldHVybiBrT2s7Ci19Ci0KLUgyNjRQYXJzZXI6OlJlc3VsdCBIMjY0UGFyc2VyOjpQYXJzZVNFSShIMjY0U0VJTWVzc2FnZSogc2VpX21zZykgewotICBpbnQgYnl0ZTsKLQotICBtZW1zZXQoc2VpX21zZywgMCwgc2l6ZW9mKCpzZWlfbXNnKSk7Ci0KLSAgUkVBRF9CSVRTX09SX1JFVFVSTig4LCAmYnl0ZSk7Ci0gIHdoaWxlIChieXRlID09IDB4ZmYpIHsKLSAgICBzZWlfbXNnLT50eXBlICs9IDI1NTsKLSAgICBSRUFEX0JJVFNfT1JfUkVUVVJOKDgsICZieXRlKTsKLSAgfQotICBzZWlfbXNnLT50eXBlICs9IGJ5dGU7Ci0KLSAgUkVBRF9CSVRTX09SX1JFVFVSTig4LCAmYnl0ZSk7Ci0gIHdoaWxlIChieXRlID09IDB4ZmYpIHsKLSAgICBzZWlfbXNnLT5wYXlsb2FkX3NpemUgKz0gMjU1OwotICAgIFJFQURfQklUU19PUl9SRVRVUk4oOCwgJmJ5dGUpOwotICB9Ci0gIHNlaV9tc2ctPnBheWxvYWRfc2l6ZSArPSBieXRlOwotCi0gIERWTE9HKDQpIDw8ICJGb3VuZCBTRUkgbWVzc2FnZSB0eXBlOiAiIDw8IHNlaV9tc2ctPnR5cGUKLSAgICAgICAgICAgPDwgIiBwYXlsb2FkIHNpemU6ICIgPDwgc2VpX21zZy0+cGF5bG9hZF9zaXplOwotCi0gIHN3aXRjaCAoc2VpX21zZy0+dHlwZSkgewotICAgIGNhc2UgSDI2NFNFSU1lc3NhZ2U6OmtTRUlSZWNvdmVyeVBvaW50OgotICAgICAgUkVBRF9VRV9PUl9SRVRVUk4oJnNlaV9tc2ctPnJlY292ZXJ5X3BvaW50LnJlY292ZXJ5X2ZyYW1lX2NudCk7Ci0gICAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZzZWlfbXNnLT5yZWNvdmVyeV9wb2ludC5leGFjdF9tYXRjaF9mbGFnKTsKLSAgICAgIFJFQURfQk9PTF9PUl9SRVRVUk4oJnNlaV9tc2ctPnJlY292ZXJ5X3BvaW50LmJyb2tlbl9saW5rX2ZsYWcpOwotICAgICAgUkVBRF9CSVRTX09SX1JFVFVSTigyLCAmc2VpX21zZy0+cmVjb3ZlcnlfcG9pbnQuY2hhbmdpbmdfc2xpY2VfZ3JvdXBfaWRjKTsKLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIERWTE9HKDQpIDw8ICJVbnN1cHBvcnRlZCBTRUkgbWVzc2FnZSI7Ci0gICAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiBrT2s7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNThiM2UuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGFuIEgyNjQgQW5uZXgtQiB2aWRlbyBzdHJlYW0gcGFyc2VyLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfUEFSU0VSX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3JlY3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fY29kZWNzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RydWN0IFN1YnNhbXBsZUVudHJ5OwotCi0vLyBGb3IgZXhwbGFuYXRpb25zIG9mIGVhY2ggc3RydWN0IGFuZCBpdHMgbWVtYmVycywgc2VlIEguMjY0IHNwZWNpZmljYXRpb24KLS8vIGF0IGh0dHA6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjQuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjROQUxVIHsKLSAgSDI2NE5BTFUoKTsKLQotICBlbnVtIFR5cGUgewotICAgIGtVbnNwZWNpZmllZCA9IDAsCi0gICAga05vbklEUlNsaWNlID0gMSwKLSAgICBrU2xpY2VEYXRhQSA9IDIsCi0gICAga1NsaWNlRGF0YUIgPSAzLAotICAgIGtTbGljZURhdGFDID0gNCwKLSAgICBrSURSU2xpY2UgPSA1LAotICAgIGtTRUlNZXNzYWdlID0gNiwKLSAgICBrU1BTID0gNywKLSAgICBrUFBTID0gOCwKLSAgICBrQVVEID0gOSwKLSAgICBrRU9TZXEgPSAxMCwKLSAgICBrRU9TdHJlYW0gPSAxMSwKLSAgICBrRmlsbGVyID0gMTIsCi0gICAga1NQU0V4dCA9IDEzLAotICAgIGtSZXNlcnZlZDE0ID0gMTQsCi0gICAga1Jlc2VydmVkMTUgPSAxNSwKLSAgICBrUmVzZXJ2ZWQxNiA9IDE2LAotICAgIGtSZXNlcnZlZDE3ID0gMTcsCi0gICAga1Jlc2VydmVkMTggPSAxOCwKLSAgICBrQ29kZWRTbGljZUF1eCA9IDE5LAotICAgIGtDb2RlZFNsaWNlRXh0ZW5zaW9uID0gMjAsCi0gIH07Ci0KLSAgLy8gQWZ0ZXIgKHdpdGhvdXQpIHN0YXJ0IGNvZGU7IHdlIGRvbid0IG93biB0aGUgdW5kZXJseWluZyBtZW1vcnkKLSAgLy8gYW5kIGEgc2hhbGxvdyBjb3B5IHNob3VsZCBiZSBtYWRlIHdoZW4gY29weWluZyB0aGlzIHN0cnVjdC4KLSAgY29uc3QgdWludDhfdCogZGF0YTsKLSAgb2ZmX3Qgc2l6ZTsgIC8vIEZyb20gYWZ0ZXIgc3RhcnQgY29kZSB0byBzdGFydCBjb2RlIG9mIG5leHQgTkFMVSAob3IgRU9TKS4KLQotICBpbnQgbmFsX3JlZl9pZGM7Ci0gIGludCBuYWxfdW5pdF90eXBlOwotfTsKLQotZW51bSB7Ci0gIGtIMjY0U2NhbGluZ0xpc3Q0eDRMZW5ndGggPSAxNiwKLSAga0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aCA9IDY0LAotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBIMjY0U1BTIHsKLSAgSDI2NFNQUygpOwotCi0gIGVudW0gSDI2NFByb2ZpbGVJREMgewotICAgIGtQcm9maWxlSURDQmFzZWxpbmUgPSA2NiwKLSAgICBrUHJvZmlsZUlEQ0NvbnN0cmFpbmVkQmFzZWxpbmUgPSBrUHJvZmlsZUlEQ0Jhc2VsaW5lLAotICAgIGtQcm9maWxlSURDTWFpbiA9IDc3LAotICAgIGtQcm9maWxlSURTY2FsYWJsZUJhc2VsaW5lID0gODMsCi0gICAga1Byb2ZpbGVJRFNjYWxhYmxlSGlnaCA9IDg2LAotICAgIGtQcm9maWxlSURDSGlnaCA9IDEwMCwKLSAgICBrUHJvZmlsZUlESGlnaDEwID0gMTEwLAotICAgIGtQcm9maWxlSURTTXVsdGl2aWV3SGlnaCA9IDExOCwKLSAgICBrUHJvZmlsZUlESGlnaDQyMiA9IDEyMiwKLSAgICBrUHJvZmlsZUlEU3RlcmVvSGlnaCA9IDEyOCwKLSAgICBrUHJvZmlsZUlESGlnaDQ0NFByZWRpY3RpdmUgPSAyNDQsCi0gIH07Ci0KLSAgZW51bSBBc3BlY3RSYXRpb0lkYyB7Ci0gICAga0V4dGVuZGVkU2FyID0gMjU1LAotICB9OwotCi0gIGVudW0gewotICAgIC8vIENvbnN0YW50cyBmb3IgSFJEIHBhcmFtZXRlcnMgKHNwZWMgY2guIEUuMi4yKS4KLSAgICBrQml0UmF0ZVNjYWxlQ29uc3RhbnRUZXJtID0gNiwgIC8vIEVxdWF0aW9uIEUtMzcuCi0gICAga0NQQlNpemVTY2FsZUNvbnN0YW50VGVybSA9IDQsICAvLyBFcXVhdGlvbiBFLTM4LgotICAgIGtEZWZhdWx0SW5pdGlhbENQQlJlbW92YWxEZWxheUxlbmd0aCA9IDI0LAotICAgIGtEZWZhdWx0RFBCT3V0cHV0RGVsYXlMZW5ndGggPSAyNCwKLSAgICBrRGVmYXVsdFRpbWVPZmZzZXRMZW5ndGggPSAyNCwKLSAgfTsKLQotICBpbnQgcHJvZmlsZV9pZGM7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQwX2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQxX2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQyX2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQzX2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQ0X2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWludF9zZXQ1X2ZsYWc7Ci0gIGludCBsZXZlbF9pZGM7Ci0gIGludCBzZXFfcGFyYW1ldGVyX3NldF9pZDsKLQotICBpbnQgY2hyb21hX2Zvcm1hdF9pZGM7Ci0gIGJvb2wgc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWc7Ci0gIGludCBiaXRfZGVwdGhfbHVtYV9taW51czg7Ci0gIGludCBiaXRfZGVwdGhfY2hyb21hX21pbnVzODsKLSAgYm9vbCBxcHByaW1lX3lfemVyb190cmFuc2Zvcm1fYnlwYXNzX2ZsYWc7Ci0KLSAgYm9vbCBzZXFfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnOwotICBpbnQgc2NhbGluZ19saXN0NHg0WzZdW2tIMjY0U2NhbGluZ0xpc3Q0eDRMZW5ndGhdOwotICBpbnQgc2NhbGluZ19saXN0OHg4WzZdW2tIMjY0U2NhbGluZ0xpc3Q4eDhMZW5ndGhdOwotCi0gIGludCBsb2cyX21heF9mcmFtZV9udW1fbWludXM0OwotICBpbnQgcGljX29yZGVyX2NudF90eXBlOwotICBpbnQgbG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0OwotICBib29sIGRlbHRhX3BpY19vcmRlcl9hbHdheXNfemVyb19mbGFnOwotICBpbnQgb2Zmc2V0X2Zvcl9ub25fcmVmX3BpYzsKLSAgaW50IG9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZDsKLSAgaW50IG51bV9yZWZfZnJhbWVzX2luX3BpY19vcmRlcl9jbnRfY3ljbGU7Ci0gIGludCBleHBlY3RlZF9kZWx0YV9wZXJfcGljX29yZGVyX2NudF9jeWNsZTsgIC8vIGNhbGN1bGF0ZWQKLSAgaW50IG9mZnNldF9mb3JfcmVmX2ZyYW1lWzI1NV07Ci0gIGludCBtYXhfbnVtX3JlZl9mcmFtZXM7Ci0gIGJvb2wgZ2Fwc19pbl9mcmFtZV9udW1fdmFsdWVfYWxsb3dlZF9mbGFnOwotICBpbnQgcGljX3dpZHRoX2luX21ic19taW51czE7Ci0gIGludCBwaWNfaGVpZ2h0X2luX21hcF91bml0c19taW51czE7Ci0gIGJvb2wgZnJhbWVfbWJzX29ubHlfZmxhZzsKLSAgYm9vbCBtYl9hZGFwdGl2ZV9mcmFtZV9maWVsZF9mbGFnOwotICBib29sIGRpcmVjdF84eDhfaW5mZXJlbmNlX2ZsYWc7Ci0gIGJvb2wgZnJhbWVfY3JvcHBpbmdfZmxhZzsKLSAgaW50IGZyYW1lX2Nyb3BfbGVmdF9vZmZzZXQ7Ci0gIGludCBmcmFtZV9jcm9wX3JpZ2h0X29mZnNldDsKLSAgaW50IGZyYW1lX2Nyb3BfdG9wX29mZnNldDsKLSAgaW50IGZyYW1lX2Nyb3BfYm90dG9tX29mZnNldDsKLQotICBib29sIHZ1aV9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZzsKLSAgaW50IHNhcl93aWR0aDsgICAvLyBTZXQgdG8gMCB3aGVuIG5vdCBzcGVjaWZpZWQuCi0gIGludCBzYXJfaGVpZ2h0OyAgLy8gU2V0IHRvIDAgd2hlbiBub3Qgc3BlY2lmaWVkLgotICBib29sIGJpdHN0cmVhbV9yZXN0cmljdGlvbl9mbGFnOwotICBpbnQgbWF4X251bV9yZW9yZGVyX2ZyYW1lczsKLSAgaW50IG1heF9kZWNfZnJhbWVfYnVmZmVyaW5nOwotICBib29sIHRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZzsKLSAgaW50IG51bV91bml0c19pbl90aWNrOwotICBpbnQgdGltZV9zY2FsZTsKLSAgYm9vbCBmaXhlZF9mcmFtZV9yYXRlX2ZsYWc7Ci0KLSAgLy8gVE9ETyhwb3NjaWFrKTogYWN0dWFsbHkgcGFyc2UgdGhlc2UgaW5zdGVhZCBvZiBQYXJzZUFuZElnbm9yZUhSRFBhcmFtZXRlcnMuCi0gIGJvb2wgbmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZzsKLSAgaW50IGNwYl9jbnRfbWludXMxOwotICBpbnQgYml0X3JhdGVfc2NhbGU7Ci0gIGludCBjcGJfc2l6ZV9zY2FsZTsKLSAgaW50IGJpdF9yYXRlX3ZhbHVlX21pbnVzMVszMl07Ci0gIGludCBjcGJfc2l6ZV92YWx1ZV9taW51czFbMzJdOwotICBib29sIGNicl9mbGFnWzMyXTsKLSAgaW50IGluaXRpYWxfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzXzE7Ci0gIGludCBjcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxOwotICBpbnQgZHBiX291dHB1dF9kZWxheV9sZW5ndGhfbWludXMxOwotICBpbnQgdGltZV9vZmZzZXRfbGVuZ3RoOwotCi0gIGJvb2wgbG93X2RlbGF5X2hyZF9mbGFnOwotCi0gIGludCBjaHJvbWFfYXJyYXlfdHlwZTsKLQotICAvLyBIZWxwZXJzIHRvIGNvbXB1dGUgZnJlcXVlbnRseS11c2VkIHZhbHVlcy4gVGhlc2UgbWV0aG9kcyByZXR1cm4KLSAgLy8gYmFzZTo6bnVsbG9wdCBpZiB0aGV5IGVuY291bnRlciBpbnRlZ2VyIG92ZXJmbG93LiBUaGV5IGRvIG5vdCB2ZXJpZnkgdGhhdAotICAvLyB0aGUgcmVzdWx0cyBhcmUgaW4tc3BlYyBmb3IgdGhlIGdpdmVuIHByb2ZpbGUgb3IgbGV2ZWwuCi0gIGJhc2U6Ok9wdGlvbmFsPG1hdGg6OlNpemU+IEdldENvZGVkU2l6ZSgpIGNvbnN0OwotICBiYXNlOjpPcHRpb25hbDxtYXRoOjpSZWN0PiBHZXRWaXNpYmxlUmVjdCgpIGNvbnN0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBIMjY0UFBTIHsKLSAgSDI2NFBQUygpOwotCi0gIGludCBwaWNfcGFyYW1ldGVyX3NldF9pZDsKLSAgaW50IHNlcV9wYXJhbWV0ZXJfc2V0X2lkOwotICBib29sIGVudHJvcHlfY29kaW5nX21vZGVfZmxhZzsKLSAgYm9vbCBib3R0b21fZmllbGRfcGljX29yZGVyX2luX2ZyYW1lX3ByZXNlbnRfZmxhZzsKLSAgaW50IG51bV9zbGljZV9ncm91cHNfbWludXMxOwotICAvLyBUT0RPKHBvc2NpYWspOiBTbGljZSBncm91cHMgbm90IGltcGxlbWVudGVkLCBjb3VsZCBiZSBhZGRlZCBhdCBzb21lIHBvaW50LgotICBpbnQgbnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxOwotICBpbnQgbnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxOwotICBib29sIHdlaWdodGVkX3ByZWRfZmxhZzsKLSAgaW50IHdlaWdodGVkX2JpcHJlZF9pZGM7Ci0gIGludCBwaWNfaW5pdF9xcF9taW51czI2OwotICBpbnQgcGljX2luaXRfcXNfbWludXMyNjsKLSAgaW50IGNocm9tYV9xcF9pbmRleF9vZmZzZXQ7Ci0gIGJvb2wgZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWc7Ci0gIGJvb2wgY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnOwotICBib29sIHJlZHVuZGFudF9waWNfY250X3ByZXNlbnRfZmxhZzsKLSAgYm9vbCB0cmFuc2Zvcm1fOHg4X21vZGVfZmxhZzsKLQotICBib29sIHBpY19zY2FsaW5nX21hdHJpeF9wcmVzZW50X2ZsYWc7Ci0gIGludCBzY2FsaW5nX2xpc3Q0eDRbNl1ba0gyNjRTY2FsaW5nTGlzdDR4NExlbmd0aF07Ci0gIGludCBzY2FsaW5nX2xpc3Q4eDhbNl1ba0gyNjRTY2FsaW5nTGlzdDh4OExlbmd0aF07Ci0KLSAgaW50IHNlY29uZF9jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBIMjY0TW9kaWZpY2F0aW9uT2ZQaWNOdW0gewotICBpbnQgbW9kaWZpY2F0aW9uX29mX3BpY19udW1zX2lkYzsKLSAgdW5pb24gewotICAgIGludCBhYnNfZGlmZl9waWNfbnVtX21pbnVzMTsKLSAgICBpbnQgbG9uZ190ZXJtX3BpY19udW07Ci0gIH07Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjRXZWlnaHRpbmdGYWN0b3JzIHsKLSAgYm9vbCBsdW1hX3dlaWdodF9mbGFnOwotICBib29sIGNocm9tYV93ZWlnaHRfZmxhZzsKLSAgaW50IGx1bWFfd2VpZ2h0WzMyXTsKLSAgaW50IGx1bWFfb2Zmc2V0WzMyXTsKLSAgaW50IGNocm9tYV93ZWlnaHRbMzJdWzJdOwotICBpbnQgY2hyb21hX29mZnNldFszMl1bMl07Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjREZWNSZWZQaWNNYXJraW5nIHsKLSAgaW50IG1lbW9yeV9tZ21udF9jb250cm9sX29wZXJhdGlvbjsKLSAgaW50IGRpZmZlcmVuY2Vfb2ZfcGljX251bXNfbWludXMxOwotICBpbnQgbG9uZ190ZXJtX3BpY19udW07Ci0gIGludCBsb25nX3Rlcm1fZnJhbWVfaWR4OwotICBpbnQgbWF4X2xvbmdfdGVybV9mcmFtZV9pZHhfcGx1czE7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjRTbGljZUhlYWRlciB7Ci0gIEgyNjRTbGljZUhlYWRlcigpOwotCi0gIGVudW0geyBrUmVmTGlzdFNpemUgPSAzMiwga1JlZkxpc3RNb2RTaXplID0ga1JlZkxpc3RTaXplIH07Ci0KLSAgZW51bSBUeXBlIHsKLSAgICBrUFNsaWNlID0gMCwKLSAgICBrQlNsaWNlID0gMSwKLSAgICBrSVNsaWNlID0gMiwKLSAgICBrU1BTbGljZSA9IDMsCi0gICAga1NJU2xpY2UgPSA0LAotICB9OwotCi0gIGJvb2wgSXNQU2xpY2UoKSBjb25zdDsKLSAgYm9vbCBJc0JTbGljZSgpIGNvbnN0OwotICBib29sIElzSVNsaWNlKCkgY29uc3Q7Ci0gIGJvb2wgSXNTUFNsaWNlKCkgY29uc3Q7Ci0gIGJvb2wgSXNTSVNsaWNlKCkgY29uc3Q7Ci0KLSAgYm9vbCBpZHJfcGljX2ZsYWc7ICAgICAgICAgLy8gZnJvbSBOQUwgaGVhZGVyCi0gIGludCBuYWxfcmVmX2lkYzsgICAgICAgICAgIC8vIGZyb20gTkFMIGhlYWRlcgotICBjb25zdCB1aW50OF90KiBuYWx1X2RhdGE7ICAvLyBmcm9tIE5BTCBoZWFkZXIKLSAgb2ZmX3QgbmFsdV9zaXplOyAgICAgICAgICAgLy8gZnJvbSBOQUwgaGVhZGVyCi0gIG9mZl90IGhlYWRlcl9iaXRfc2l6ZTsgICAgIC8vIGNhbGN1bGF0ZWQKLQotICBpbnQgZmlyc3RfbWJfaW5fc2xpY2U7Ci0gIGludCBzbGljZV90eXBlOwotICBpbnQgcGljX3BhcmFtZXRlcl9zZXRfaWQ7Ci0gIGludCBjb2xvdXJfcGxhbmVfaWQ7ICAvLyBUT0RPKHBvc2NpYWspOiB1c2UgdGhpcyEgIGh0dHA6Ly9jcmJ1Zy5jb20vMTM5ODc4Ci0gIGludCBmcmFtZV9udW07Ci0gIGJvb2wgZmllbGRfcGljX2ZsYWc7Ci0gIGJvb2wgYm90dG9tX2ZpZWxkX2ZsYWc7Ci0gIGludCBpZHJfcGljX2lkOwotICBpbnQgcGljX29yZGVyX2NudF9sc2I7Ci0gIGludCBkZWx0YV9waWNfb3JkZXJfY250X2JvdHRvbTsKLSAgaW50IGRlbHRhX3BpY19vcmRlcl9jbnQwOwotICBpbnQgZGVsdGFfcGljX29yZGVyX2NudDE7Ci0gIGludCByZWR1bmRhbnRfcGljX2NudDsKLSAgYm9vbCBkaXJlY3Rfc3BhdGlhbF9tdl9wcmVkX2ZsYWc7Ci0KLSAgYm9vbCBudW1fcmVmX2lkeF9hY3RpdmVfb3ZlcnJpZGVfZmxhZzsKLSAgaW50IG51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czE7Ci0gIGludCBudW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxOwotICBib29sIHJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMDsKLSAgYm9vbCByZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDE7Ci0gIEgyNjRNb2RpZmljYXRpb25PZlBpY051bSByZWZfbGlzdF9sMF9tb2RpZmljYXRpb25zW2tSZWZMaXN0TW9kU2l6ZV07Ci0gIEgyNjRNb2RpZmljYXRpb25PZlBpY051bSByZWZfbGlzdF9sMV9tb2RpZmljYXRpb25zW2tSZWZMaXN0TW9kU2l6ZV07Ci0KLSAgaW50IGx1bWFfbG9nMl93ZWlnaHRfZGVub207Ci0gIGludCBjaHJvbWFfbG9nMl93ZWlnaHRfZGVub207Ci0KLSAgYm9vbCBsdW1hX3dlaWdodF9sMF9mbGFnOwotICBib29sIGNocm9tYV93ZWlnaHRfbDBfZmxhZzsKLSAgSDI2NFdlaWdodGluZ0ZhY3RvcnMgcHJlZF93ZWlnaHRfdGFibGVfbDA7Ci0KLSAgYm9vbCBsdW1hX3dlaWdodF9sMV9mbGFnOwotICBib29sIGNocm9tYV93ZWlnaHRfbDFfZmxhZzsKLSAgSDI2NFdlaWdodGluZ0ZhY3RvcnMgcHJlZF93ZWlnaHRfdGFibGVfbDE7Ci0KLSAgYm9vbCBub19vdXRwdXRfb2ZfcHJpb3JfcGljc19mbGFnOwotICBib29sIGxvbmdfdGVybV9yZWZlcmVuY2VfZmxhZzsKLQotICBib29sIGFkYXB0aXZlX3JlZl9waWNfbWFya2luZ19tb2RlX2ZsYWc7Ci0gIEgyNjREZWNSZWZQaWNNYXJraW5nIHJlZl9waWNfbWFya2luZ1trUmVmTGlzdFNpemVdOwotCi0gIGludCBjYWJhY19pbml0X2lkYzsKLSAgaW50IHNsaWNlX3FwX2RlbHRhOwotICBib29sIHNwX2Zvcl9zd2l0Y2hfZmxhZzsKLSAgaW50IHNsaWNlX3FzX2RlbHRhOwotICBpbnQgZGlzYWJsZV9kZWJsb2NraW5nX2ZpbHRlcl9pZGM7Ci0gIGludCBzbGljZV9hbHBoYV9jMF9vZmZzZXRfZGl2MjsKLSAgaW50IHNsaWNlX2JldGFfb2Zmc2V0X2RpdjI7Ci0KLSAgLy8gQ2FsY3VsYXRlZC4KLSAgLy8gU2l6ZSBpbiBiaXRzIG9mIGRlY19yZWZfcGljX21hcmtpbmcoKSBzeW50YXggZWxlbWVudC4KLSAgc2l6ZV90IGRlY19yZWZfcGljX21hcmtpbmdfYml0X3NpemU7Ci0gIHNpemVfdCBwaWNfb3JkZXJfY250X2JpdF9zaXplOwotfTsKLQotc3RydWN0IEgyNjRTRUlSZWNvdmVyeVBvaW50IHsKLSAgaW50IHJlY292ZXJ5X2ZyYW1lX2NudDsKLSAgYm9vbCBleGFjdF9tYXRjaF9mbGFnOwotICBib29sIGJyb2tlbl9saW5rX2ZsYWc7Ci0gIGludCBjaGFuZ2luZ19zbGljZV9ncm91cF9pZGM7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjRTRUlNZXNzYWdlIHsKLSAgSDI2NFNFSU1lc3NhZ2UoKTsKLQotICBlbnVtIFR5cGUgewotICAgIGtTRUlSZWNvdmVyeVBvaW50ID0gNiwKLSAgfTsKLQotICBpbnQgdHlwZTsKLSAgaW50IHBheWxvYWRfc2l6ZTsKLSAgdW5pb24gewotICAgIC8vIFBsYWNlaG9sZGVyOyBpbiBmdXR1cmUgbW9yZSBzdXBwb3J0ZWQgdHlwZXMgd2lsbCBjb250cmlidXRlIHRvIG1vcmUKLSAgICAvLyB1bmlvbiBtZW1iZXJzIGhlcmUuCi0gICAgSDI2NFNFSVJlY292ZXJ5UG9pbnQgcmVjb3ZlcnlfcG9pbnQ7Ci0gIH07Ci19OwotCi0vLyBDbGFzcyB0byBwYXJzZSBhbiBBbm5leC1CIEguMjY0IHN0cmVhbSwKLS8vIGFzIHNwZWNpZmllZCBpbiBjaGFwdGVycyA3IGFuZCBBbm5leCBCIG9mIHRoZSBILjI2NCBzcGVjLgotY2xhc3MgTUVESUFfRVhQT1JUIEgyNjRQYXJzZXIgewotIHB1YmxpYzoKLSAgZW51bSBSZXN1bHQgewotICAgIGtPaywKLSAgICBrSW52YWxpZFN0cmVhbSwgICAgICAvLyBlcnJvciBpbiBzdHJlYW0KLSAgICBrVW5zdXBwb3J0ZWRTdHJlYW0sICAvLyBzdHJlYW0gbm90IHN1cHBvcnRlZCBieSB0aGUgcGFyc2VyCi0gICAga0VPU3RyZWFtLCAgICAgICAgICAgLy8gZW5kIG9mIHN0cmVhbQotICB9OwotCi0gIC8vIEZpbmQgb2Zmc2V0IGZyb20gc3RhcnQgb2YgZGF0YSB0byBuZXh0IE5BTFUgc3RhcnQgY29kZQotICAvLyBhbmQgc2l6ZSBvZiBmb3VuZCBzdGFydCBjb2RlICgzIG9yIDQgYnl0ZXMpLgotICAvLyBJZiBubyBzdGFydCBjb2RlIGlzIGZvdW5kLCBvZmZzZXQgaXMgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IHVucHJvY2Vzc2VkIGJ5dGUKLSAgLy8gKGkuZS4gdGhlIGZpcnN0IGJ5dGUgdGhhdCB3YXMgbm90IGNvbnNpZGVyZWQgYXMgYSBwb3NzaWJsZSBzdGFydCBvZiBhIHN0YXJ0Ci0gIC8vIGNvZGUpIGFuZCB8KnN0YXJ0X2NvZGVfc2l6ZXwgaXMgc2V0IHRvIDAuCi0gIC8vIFByZWNvbmRpdGlvbnM6Ci0gIC8vIC0gfGRhdGFfc2l6ZXwgPj0gMAotICAvLyBQb3N0Y29uZGl0aW9uczoKLSAgLy8gLSB8Km9mZnNldHwgaXMgYmV0d2VlbiAwIGFuZCB8ZGF0YV9zaXplfCBpbmNsdWRlZC4KLSAgLy8gICBJdCBpcyBzdHJpY3RseSBsZXNzIHRoYW4gfGRhdGFfc2l6ZXwgaWYgfGRhdGFfc2l6ZXwgPiAwLgotICAvLyAtIHwqc3RhcnRfY29kZV9zaXplfCBpcyBlaXRoZXIgMCwgMyBvciA0LgotICBzdGF0aWMgYm9vbCBGaW5kU3RhcnRDb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIG9mZl90IGRhdGFfc2l6ZSwgb2ZmX3QqIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCogc3RhcnRfY29kZV9zaXplKTsKLQotICAvLyBXcmFwcGVyIGZvciBGaW5kU3RhcnRDb2RlKCkgdGhhdCBza2lwcyBvdmVyIHN0YXJ0IGNvZGVzIHRoYXQKLSAgLy8gbWF5IGFwcGVhciBpbnNpZGUgb2YgfGVuY3J5cHRlZF9yYW5nZXNffC4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGEgc3RhcnQgY29kZSB3YXMgZm91bmQuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgotICBzdGF0aWMgYm9vbCBGaW5kU3RhcnRDb2RlSW5DbGVhclJhbmdlcyhjb25zdCB1aW50OF90KiBkYXRhLCBvZmZfdCBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJhbmdlczxjb25zdCB1aW50OF90Kj4mIHJhbmdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QqIG9mZnNldCwgb2ZmX3QqIHN0YXJ0X2NvZGVfc2l6ZSk7Ci0KLSAgc3RhdGljIFZpZGVvQ29kZWNQcm9maWxlIFByb2ZpbGVJRENUb1ZpZGVvQ29kZWNQcm9maWxlKGludCBwcm9maWxlX2lkYyk7Ci0KLSAgSDI2NFBhcnNlcigpOwotICB+SDI2NFBhcnNlcigpOwotCi0gIHZvaWQgUmVzZXQoKTsKLSAgLy8gU2V0IGN1cnJlbnQgc3RyZWFtIHBvaW50ZXIgdG8gfHN0cmVhbXwgb2YgfHN0cmVhbV9zaXplfCBpbiBieXRlcywKLSAgLy8gfHN0cmVhbXwgb3duZWQgYnkgY2FsbGVyLgotICAvLyB8c3Vic2FtcGxlc3wgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBwYXJ0cyBvZiB8c3RyZWFtfCBhcmUKLSAgLy8gZW5jcnlwdGVkLgotICB2b2lkIFNldFN0cmVhbShjb25zdCB1aW50OF90KiBzdHJlYW0sIG9mZl90IHN0cmVhbV9zaXplKTsKLSAgdm9pZCBTZXRFbmNyeXB0ZWRTdHJlYW0oY29uc3QgdWludDhfdCogc3RyZWFtLCBvZmZfdCBzdHJlYW1fc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+JiBzdWJzYW1wbGVzKTsKLQotICAvLyBSZWFkIHRoZSBzdHJlYW0gdG8gZmluZCB0aGUgbmV4dCBOQUxVLCBpZGVudGlmeSBpdCBhbmQgcmV0dXJuCi0gIC8vIHRoYXQgaW5mb3JtYXRpb24gaW4gfCpuYWx1fC4gVGhpcyBhZHZhbmNlcyB0aGUgc3RyZWFtIHRvIHRoZSBiZWdpbm5pbmcKLSAgLy8gb2YgdGhpcyBOQUxVLCBidXQgbm90IHBhc3QgaXQsIHNvIHN1YnNlcXVlbnQgY2FsbHMgdG8gTkFMVS1zcGVjaWZpYwotICAvLyBwYXJzaW5nIGZ1bmN0aW9ucyAoUGFyc2VTUFMsIGV0Yy4pICB3aWxsIHBhcnNlIHRoaXMgTkFMVS4KLSAgLy8gSWYgdGhlIGNhbGxlciB3aXNoZXMgdG8gc2tpcCB0aGUgY3VycmVudCBOQUxVLCBpdCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCi0gIC8vIGFnYWluLCBpbnN0ZWFkIG9mIGFueSBOQUxVLXR5cGUgc3BlY2lmaWMgcGFyc2UgZnVuY3Rpb25zIGJlbG93LgotICBSZXN1bHQgQWR2YW5jZVRvTmV4dE5BTFUoSDI2NE5BTFUqIG5hbHUpOwotCi0gIC8vIE5BTFUtc3BlY2lmaWMgcGFyc2luZyBmdW5jdGlvbnMuCi0gIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgQWR2YW5jZVRvTmV4dE5BTFUoKS4KLQotICAvLyBTUFNlcyBhbmQgUFBTZXMgYXJlIG93bmVkIGJ5IHRoZSBwYXJzZXIgY2xhc3MgYW5kIHRoZSBtZW1vcnkgZm9yIHRoZWlyCi0gIC8vIHN0cnVjdHVyZXMgaXMgbWFuYWdlZCBoZXJlLCBub3QgYnkgdGhlIGNhbGxlciwgYXMgdGhleSBhcmUgcmV1c2VkCi0gIC8vIGFjcm9zcyBOQUxVcy4KLSAgLy8KLSAgLy8gUGFyc2UgYW4gU1BTL1BQUyBOQUxVIGFuZCBzYXZlIHRoZWlyIGRhdGEgaW4gdGhlIHBhcnNlciwgcmV0dXJuaW5nIGlkCi0gIC8vIG9mIHRoZSBwYXJzZWQgc3RydWN0dXJlIGluIHwqcHBzX2lkfC98KnNwc19pZHwuCi0gIC8vIFRvIGdldCBhIHBvaW50ZXIgdG8gYSBnaXZlbiBTUFMvUFBTIHN0cnVjdHVyZSwgdXNlIEdldFNQUygpL0dldFBQUygpLAotICAvLyBwYXNzaW5nIHRoZSByZXR1cm5lZCB8KnNwc19pZHwvfCpwcHNfaWR8IGFzIHBhcmFtZXRlci4KLSAgLy8gVE9ETyhwb3NjaWFrLGZpc2NobWFuKTogY29uc2lkZXIgcmVwbGFjaW5nIHJldHVybmluZyBSZXN1bHQgZnJvbSBQYXJzZSooKQotICAvLyBtZXRob2RzIHdpdGggYSBzdGQ6OnVuaXF1ZV9wdHIgYW5kIGFkZGluZyBhbiBBdEVPUygpIGZ1bmN0aW9uIHRvIGNoZWNrIGZvcgotICAvLyBFT1MgaWYgUGFyc2UqKCkgcmV0dXJuIE5VTEwuCi0gIFJlc3VsdCBQYXJzZVNQUyhpbnQqIHNwc19pZCk7Ci0gIFJlc3VsdCBQYXJzZVBQUyhpbnQqIHBwc19pZCk7Ci0KLSAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byBTUFMvUFBTIHdpdGggZ2l2ZW4gfHNwc19pZHwvfHBwc19pZHwgb3IgTlVMTCBpZiBub3QKLSAgLy8gcHJlc2VudC4KLSAgY29uc3QgSDI2NFNQUyogR2V0U1BTKGludCBzcHNfaWQpIGNvbnN0OwotICBjb25zdCBIMjY0UFBTKiBHZXRQUFMoaW50IHBwc19pZCkgY29uc3Q7Ci0KLSAgLy8gU2xpY2UgaGVhZGVycyBhbmQgU0VJIG1lc3NhZ2VzIGFyZSBub3QgdXNlZCBhY3Jvc3MgTkFMVXMgYnkgdGhlIHBhcnNlcgotICAvLyBhbmQgY2FuIGJlIGRpc2NhcmRlZCBhZnRlciBjdXJyZW50IE5BTFUsIHNvIHRoZSBwYXJzZXIgZG9lcyBub3Qgc3RvcmUKLSAgLy8gdGhlbSwgbm9yIGRvZXMgaXQgbWFuYWdlIHRoZWlyIG1lbW9yeS4KLSAgLy8gVGhlIGNhbGxlciBoYXMgdG8gcHJvdmlkZSBhbmQgbWFuYWdlIGl0IGluc3RlYWQuCi0KLSAgLy8gUGFyc2UgYSBzbGljZSBoZWFkZXIsIHJldHVybmluZyBpdCBpbiB8KnNoZHJ8LiB8Km5hbHV8IG11c3QgYmUgc2V0IHRvCi0gIC8vIHRoZSBOQUxVIHJldHVybmVkIGZyb20gQWR2YW5jZVRvTmV4dE5BTFUoKSBhbmQgY29ycmVzcG9uZGluZyB0byB8KnNoZHJ8LgotICBSZXN1bHQgUGFyc2VTbGljZUhlYWRlcihjb25zdCBIMjY0TkFMVSYgbmFsdSwgSDI2NFNsaWNlSGVhZGVyKiBzaGRyKTsKLQotICAvLyBQYXJzZSBhIFNFSSBtZXNzYWdlLCByZXR1cm5pbmcgaXQgaW4gfCpzZWlfbXNnfCwgcHJvdmlkZWQgYW5kIG1hbmFnZWQKLSAgLy8gYnkgdGhlIGNhbGxlci4KLSAgUmVzdWx0IFBhcnNlU0VJKEgyNjRTRUlNZXNzYWdlKiBzZWlfbXNnKTsKLQotIHByaXZhdGU6Ci0gIC8vIE1vdmUgdGhlIHN0cmVhbSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgTkFMVSwKLSAgLy8gaS5lLiBwb2ludGluZyBhdCB0aGUgbmV4dCBzdGFydCBjb2RlLgotICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIE5BTFUgaGFzIGJlZW4gZm91bmQuCi0gIC8vIElmIGEgTkFMVSBpcyBmb3VuZDoKLSAgLy8gLSBpdHMgc2l6ZSBpbiBieXRlcyBpcyByZXR1cm5lZCBpbiB8Km5hbHVfc2l6ZXwgYW5kIGluY2x1ZGVzCi0gIC8vICAgdGhlIHN0YXJ0IGNvZGUgYXMgd2VsbCBhcyB0aGUgdHJhaWxpbmcgemVybyBiaXRzLgotICAvLyAtIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzdGFydCBjb2RlIGlzIHJldHVybmVkIGluIHwqc3RhcnRfY29kZV9zaXplfC4KLSAgYm9vbCBMb2NhdGVOQUxVKG9mZl90KiBuYWx1X3NpemUsIG9mZl90KiBzdGFydF9jb2RlX3NpemUpOwotCi0gIC8vIEV4cC1Hb2xvbWIgY29kZSBwYXJzaW5nIGFzIHNwZWNpZmllZCBpbiBjaGFwdGVyIDkuMSBvZiB0aGUgc3BlYy4KLSAgLy8gUmVhZCBvbmUgdW5zaWduZWQgZXhwLUdvbG9tYiBjb2RlIGZyb20gdGhlIHN0cmVhbSBhbmQgcmV0dXJuIGluIHwqdmFsfC4KLSAgUmVzdWx0IFJlYWRVRShpbnQqIHZhbCk7Ci0KLSAgLy8gUmVhZCBvbmUgc2lnbmVkIGV4cC1Hb2xvbWIgY29kZSBmcm9tIHRoZSBzdHJlYW0gYW5kIHJldHVybiBpbiB8KnZhbHwuCi0gIFJlc3VsdCBSZWFkU0UoaW50KiB2YWwpOwotCi0gIC8vIFBhcnNlIHNjYWxpbmcgbGlzdHMgKHNlZSBzcGVjKS4KLSAgUmVzdWx0IFBhcnNlU2NhbGluZ0xpc3QoaW50IHNpemUsIGludCogc2NhbGluZ19saXN0LCBib29sKiB1c2VfZGVmYXVsdCk7Ci0gIFJlc3VsdCBQYXJzZVNQU1NjYWxpbmdMaXN0cyhIMjY0U1BTKiBzcHMpOwotICBSZXN1bHQgUGFyc2VQUFNTY2FsaW5nTGlzdHMoY29uc3QgSDI2NFNQUyYgc3BzLCBIMjY0UFBTKiBwcHMpOwotCi0gIC8vIFBhcnNlIG9wdGlvbmFsIFZVSSBwYXJhbWV0ZXJzIGluIFNQUyAoc2VlIHNwZWMpLgotICBSZXN1bHQgUGFyc2VWVUlQYXJhbWV0ZXJzKEgyNjRTUFMqIHNwcyk7Ci0gIC8vIFNldCB8aHJkX3BhcmFtZXRlcnNfcHJlc2VudHwgdG8gdHJ1ZSBvbmx5IGlmIHRoZXkgYXJlIHByZXNlbnQuCi0gIFJlc3VsdCBQYXJzZUFuZElnbm9yZUhSRFBhcmFtZXRlcnMoYm9vbCogaHJkX3BhcmFtZXRlcnNfcHJlc2VudCk7Ci0KLSAgLy8gUGFyc2UgcmVmZXJlbmNlIHBpY3R1cmUgbGlzdHMnIG1vZGlmaWNhdGlvbnMgKHNlZSBzcGVjKS4KLSAgUmVzdWx0IFBhcnNlUmVmUGljTGlzdE1vZGlmaWNhdGlvbnMoSDI2NFNsaWNlSGVhZGVyKiBzaGRyKTsKLSAgUmVzdWx0IFBhcnNlUmVmUGljTGlzdE1vZGlmaWNhdGlvbihpbnQgbnVtX3JlZl9pZHhfYWN0aXZlX21pbnVzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIMjY0TW9kaWZpY2F0aW9uT2ZQaWNOdW0qIHJlZl9saXN0X21vZHMpOwotCi0gIC8vIFBhcnNlIHByZWRpY3Rpb24gd2VpZ2h0IHRhYmxlIChzZWUgc3BlYykuCi0gIFJlc3VsdCBQYXJzZVByZWRXZWlnaHRUYWJsZShjb25zdCBIMjY0U1BTJiBzcHMsIEgyNjRTbGljZUhlYWRlciogc2hkcik7Ci0KLSAgLy8gUGFyc2Ugd2VpZ2h0aW5nIGZhY3RvcnMgKHNlZSBzcGVjKS4KLSAgUmVzdWx0IFBhcnNlV2VpZ2h0aW5nRmFjdG9ycyhpbnQgbnVtX3JlZl9pZHhfYWN0aXZlX21pbnVzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hyb21hX2FycmF5X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGx1bWFfbG9nMl93ZWlnaHRfZGVub20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNocm9tYV9sb2cyX3dlaWdodF9kZW5vbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIMjY0V2VpZ2h0aW5nRmFjdG9ycyogd19mYWN0cyk7Ci0KLSAgLy8gUGFyc2UgZGVjb2RlZCByZWZlcmVuY2UgcGljdHVyZSBtYXJraW5nIGluZm9ybWF0aW9uIChzZWUgc3BlYykuCi0gIFJlc3VsdCBQYXJzZURlY1JlZlBpY01hcmtpbmcoSDI2NFNsaWNlSGVhZGVyKiBzaGRyKTsKLQotICAvLyBQb2ludGVyIHRvIHRoZSBjdXJyZW50IE5BTFUgaW4gdGhlIHN0cmVhbS4KLSAgY29uc3QgdWludDhfdCogc3RyZWFtXzsKLQotICAvLyBCeXRlcyBsZWZ0IGluIHRoZSBzdHJlYW0gYWZ0ZXIgdGhlIGN1cnJlbnQgTkFMVS4KLSAgb2ZmX3QgYnl0ZXNfbGVmdF87Ci0KLSAgSDI2NEJpdFJlYWRlciBicl87Ci0KLSAgLy8gUFBTZXMgYW5kIFNQU2VzIHN0b3JlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KLSAgc3RkOjptYXA8aW50LCBIMjY0U1BTPiBhY3RpdmVfU1BTZXNfOwotICBzdGQ6Om1hcDxpbnQsIEgyNjRQUFM+IGFjdGl2ZV9QUFNlc187Ci0KLSAgLy8gUmFuZ2VzIG9mIGVuY3J5cHRlZCBieXRlcyBpbiB0aGUgYnVmZmVyIHBhc3NlZCB0bwotICAvLyBTZXRFbmNyeXB0ZWRTdHJlYW0oKS4KLSAgUmFuZ2VzPGNvbnN0IHVpbnQ4X3QqPiBlbmNyeXB0ZWRfcmFuZ2VzXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSDI2NFBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY0X1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXJfZnV6emVydGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyX2Z1enplcnRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMmVmMjQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXJfZnV6emVydGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2Uvb3B0aW9uYWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvc2l6ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLXN0YXRpYyB2b2xhdGlsZSBzaXplX3Qgdm9sYXRpbGVfc2luazsKLQotLy8gRW50cnkgcG9pbnQgZm9yIExpYkZ1enplci4KLWV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgaWYgKCFzaXplKSByZXR1cm4gMDsKLQotICBtZWRpYTo6SDI2NFBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5TZXRTdHJlYW0oZGF0YSwgYmFzZTo6Y2hlY2tlZF9jYXN0PG9mZl90PihzaXplKSk7Ci0KLSAgLy8gUGFyc2UgdW50aWwgdGhlIGVuZCBvZiBzdHJlYW0vdW5zdXBwb3J0ZWQgc3RyZWFtL2Vycm9yIGluIHN0cmVhbSBpcwotICAvLyBmb3VuZC4KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBtZWRpYTo6SDI2NE5BTFUgbmFsdTsKLSAgICBtZWRpYTo6SDI2NFBhcnNlcjo6UmVzdWx0IHJlcyA9IHBhcnNlci5BZHZhbmNlVG9OZXh0TkFMVSgmbmFsdSk7Ci0gICAgaWYgKHJlcyAhPSBtZWRpYTo6SDI2NFBhcnNlcjo6a09rKSBicmVhazsKLQotICAgIHN3aXRjaCAobmFsdS5uYWxfdW5pdF90eXBlKSB7Ci0gICAgICBjYXNlIG1lZGlhOjpIMjY0TkFMVTo6a0lEUlNsaWNlOgotICAgICAgY2FzZSBtZWRpYTo6SDI2NE5BTFU6OmtOb25JRFJTbGljZTogewotICAgICAgICBtZWRpYTo6SDI2NFNsaWNlSGVhZGVyIHNoZHI7Ci0gICAgICAgIHJlcyA9IHBhcnNlci5QYXJzZVNsaWNlSGVhZGVyKG5hbHUsICZzaGRyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgbWVkaWE6OkgyNjROQUxVOjprU1BTOiB7Ci0gICAgICAgIGludCBpZDsKLSAgICAgICAgcmVzID0gcGFyc2VyLlBhcnNlU1BTKCZpZCk7Ci0gICAgICAgIGlmIChyZXMgIT0gbWVkaWE6OkgyNjRQYXJzZXI6OmtPaykgYnJlYWs7Ci0gICAgICAgIGNvbnN0IG1lZGlhOjpIMjY0U1BTKiBzcHMgPSBwYXJzZXIuR2V0U1BTKGlkKTsKLSAgICAgICAgaWYgKCFzcHMpIGJyZWFrOwotICAgICAgICAvLyBBbHNvIHRlc3QgdGhlIFNQUyBoZWxwZXIgbWV0aG9kcy4gV2UgbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdHMgYXJlCi0gICAgICAgIC8vIHVzZWQgc28gdGhhdCB0aGUgY2FsbHMgYXJlIG5vdCBvcHRpbWl6ZWQgYXdheS4KLSAgICAgICAgYmFzZTo6T3B0aW9uYWw8bWF0aDo6U2l6ZT4gY29kZWRfc2l6ZSA9IHNwcy0+R2V0Q29kZWRTaXplKCk7Ci0gICAgICAgIHZvbGF0aWxlX3NpbmsgPSBjb2RlZF9zaXplLnZhbHVlX29yKG1hdGg6OlNpemUoKSkuVG9TdHJpbmcoKS5sZW5ndGgoKTsKLSAgICAgICAgYmFzZTo6T3B0aW9uYWw8bWF0aDo6UmVjdD4gdmlzaWJsZV9yZWN0ID0gc3BzLT5HZXRWaXNpYmxlUmVjdCgpOwotICAgICAgICB2b2xhdGlsZV9zaW5rID0gdmlzaWJsZV9yZWN0LnZhbHVlX29yKG1hdGg6OlJlY3QoKSkuVG9TdHJpbmcoKS5sZW5ndGgoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgbWVkaWE6OkgyNjROQUxVOjprUFBTOiB7Ci0gICAgICAgIGludCBpZDsKLSAgICAgICAgcmVzID0gcGFyc2VyLlBhcnNlUFBTKCZpZCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBjYXNlIG1lZGlhOjpIMjY0TkFMVTo6a1NFSU1lc3NhZ2U6IHsKLSAgICAgICAgbWVkaWE6OkgyNjRTRUlNZXNzYWdlIHNlaV9tc2c7Ci0gICAgICAgIHJlcyA9IHBhcnNlci5QYXJzZVNFSSgmc2VpX21zZyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICAvLyBTa2lwIGFueSBvdGhlciBOQUxVLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKHJlcyAhPSBtZWRpYTo6SDI2NFBhcnNlcjo6a09rKSBicmVhazsKLSAgfQotCi0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBhZTJjNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9jb21tYW5kX2xpbmUuaCIKLSNpbmNsdWRlICJiYXNlL2ZpbGVzL21lbW9yeV9tYXBwZWRfZmlsZS5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3B0cl91dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21hdGgvcmVjdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgSDI2NFNQU1Rlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIC8vIEFuIGV4YWN0IGNsb25lIG9mIGFuIFNQUyBmcm9tIEJpZyBCdWNrIEJ1bm55IDQ4MHAuCi0gIHN0ZDo6dW5pcXVlX3B0cjxIMjY0U1BTPiBNYWtlU1BTX0JCQjQ4MHAoKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEgyNjRTUFM+IHNwcyA9IGJhc2U6Ok1ha2VVbmlxdWU8SDI2NFNQUz4oKTsKLSAgICBzcHMtPnByb2ZpbGVfaWRjID0gMTAwOwotICAgIHNwcy0+bGV2ZWxfaWRjID0gMzA7Ci0gICAgc3BzLT5jaHJvbWFfZm9ybWF0X2lkYyA9IDE7Ci0gICAgc3BzLT5sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQgPSAyOwotICAgIHNwcy0+bWF4X251bV9yZWZfZnJhbWVzID0gNTsKLSAgICBzcHMtPnBpY193aWR0aF9pbl9tYnNfbWludXMxID0gNTI7Ci0gICAgc3BzLT5waWNfaGVpZ2h0X2luX21hcF91bml0c19taW51czEgPSAyOTsKLSAgICBzcHMtPmZyYW1lX21ic19vbmx5X2ZsYWcgPSB0cnVlOwotICAgIHNwcy0+ZGlyZWN0Xzh4OF9pbmZlcmVuY2VfZmxhZyA9IHRydWU7Ci0gICAgc3BzLT52dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSB0cnVlOwotICAgIHNwcy0+dGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gdHJ1ZTsKLSAgICBzcHMtPm51bV91bml0c19pbl90aWNrID0gMTsKLSAgICBzcHMtPnRpbWVfc2NhbGUgPSA0ODsKLSAgICBzcHMtPmZpeGVkX2ZyYW1lX3JhdGVfZmxhZyA9IHRydWU7Ci0gICAgc3BzLT5iaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyA9IHRydWU7Ci0gICAgLy8gVGhlc2UgbmV4dCB0aHJlZSBmaWVsZHMgYXJlIG5vdCBwYXJ0IG9mIG91ciBTUFMgc3RydWN0IHlldC4KLSAgICAvLyBzcHMtPm1vdGlvbl92ZWN0b3JzX292ZXJfcGljX2JvdW5kYXJpZXNfZmxhZyA9IHRydWU7Ci0gICAgLy8gc3BzLT5sb2cyX21heF9tdl9sZW5ndGhfaG9yaXpvbnRhbCA9IDEwOwotICAgIC8vIHNwcy0+bG9nMl9tYXhfbXZfbGVuZ3RoX3ZlcnRpY2FsID0gMTA7Ci0gICAgc3BzLT5tYXhfbnVtX3Jlb3JkZXJfZnJhbWVzID0gMjsKLSAgICBzcHMtPm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nID0gNTsKLQotICAgIC8vIENvbXB1dGVkIGZpZWxkLCBtYXRjaGVzIHxjaHJvbWFfZm9ybWF0X2lkY3wgaW4gdGhpcyBjYXNlLgotICAgIC8vIFRPRE8oc2FuZGVyc2QpOiBFeHRyYWN0IHRoYXQgY29tcHV0YXRpb24gZnJvbSB0aGUgcGFyc2luZyBzdGVwLgotICAgIHNwcy0+Y2hyb21hX2FycmF5X3R5cGUgPSAxOwotCi0gICAgcmV0dXJuIHNwczsKLSAgfQotfTsKLQotVEVTVF9GKEgyNjRTUFNUZXN0LCBHZXRDb2RlZFNpemUpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPEgyNjRTUFM+IHNwcyA9IE1ha2VTUFNfQkJCNDgwcCgpOwotICBFWFBFQ1RfRVEobWF0aDo6U2l6ZSg4NDgsIDQ4MCksIHNwcy0+R2V0Q29kZWRTaXplKCkpOwotCi0gIC8vIE92ZXJmbG93LgotICBzcHMtPnBpY193aWR0aF9pbl9tYnNfbWludXMxID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgRVhQRUNUX0VRKGJhc2U6Om51bGxvcHQsIHNwcy0+R2V0Q29kZWRTaXplKCkpOwotfQotCi1URVNUX0YoSDI2NFNQU1Rlc3QsIEdldFZpc2libGVSZWN0KSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxIMjY0U1BTPiBzcHMgPSBNYWtlU1BTX0JCQjQ4MHAoKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlJlY3QoMCwgMCwgODQ4LCA0ODApLCBzcHMtPkdldFZpc2libGVSZWN0KCkpOwotCi0gIC8vIEFkZCBzb21lIGNyb3BwaW5nLgotICBzcHMtPmZyYW1lX2Nyb3BwaW5nX2ZsYWcgPSB0cnVlOwotICBzcHMtPmZyYW1lX2Nyb3BfbGVmdF9vZmZzZXQgPSAxOwotICBzcHMtPmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0ID0gMjsKLSAgc3BzLT5mcmFtZV9jcm9wX3RvcF9vZmZzZXQgPSAzOwotICBzcHMtPmZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCA9IDQ7Ci0gIEVYUEVDVF9FUShtYXRoOjpSZWN0KDIsIDYsIDg0OCAtIDYsIDQ4MCAtIDE0KSwgc3BzLT5HZXRWaXNpYmxlUmVjdCgpKTsKLQotICAvLyBOb3QgcXVpdGUgaW52YWxpZC4KLSAgc3BzLT5mcmFtZV9jcm9wX2xlZnRfb2Zmc2V0ID0gNDIyOwotICBzcHMtPmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0ID0gMTsKLSAgc3BzLT5mcmFtZV9jcm9wX3RvcF9vZmZzZXQgPSAwOwotICBzcHMtPmZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCA9IDA7Ci0gIEVYUEVDVF9FUShtYXRoOjpSZWN0KDg0NCwgMCwgMiwgNDgwKSwgc3BzLT5HZXRWaXNpYmxlUmVjdCgpKTsKLQotICAvLyBJbnZhbGlkIGNyb3AuCi0gIHNwcy0+ZnJhbWVfY3JvcF9sZWZ0X29mZnNldCA9IDQyMzsKLSAgc3BzLT5mcmFtZV9jcm9wX3JpZ2h0X29mZnNldCA9IDE7Ci0gIHNwcy0+ZnJhbWVfY3JvcF90b3Bfb2Zmc2V0ID0gMDsKLSAgc3BzLT5mcmFtZV9jcm9wX2JvdHRvbV9vZmZzZXQgPSAwOwotICBFWFBFQ1RfRVEoYmFzZTo6bnVsbG9wdCwgc3BzLT5HZXRWaXNpYmxlUmVjdCgpKTsKLQotICAvLyBPdmVyZmxvdy4KLSAgc3BzLT5mcmFtZV9jcm9wX2xlZnRfb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIDIgKyAxOwotICBzcHMtPmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0ID0gMDsKLSAgc3BzLT5mcmFtZV9jcm9wX3RvcF9vZmZzZXQgPSAwOwotICBzcHMtPmZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCA9IDA7Ci0gIEVYUEVDVF9FUShiYXNlOjpudWxsb3B0LCBzcHMtPkdldFZpc2libGVSZWN0KCkpOwotfQotCi1URVNUKEgyNjRQYXJzZXJUZXN0LCBTdHJlYW1GaWxlUGFyc2luZykgewotICBiYXNlOjpGaWxlUGF0aCBmaWxlX3BhdGggPSBHZXRUZXN0RGF0YUZpbGVQYXRoKCJ0ZXN0LTI1ZnBzLmgyNjQiKTsKLSAgLy8gTnVtYmVyIG9mIE5BTFVzIGluIHRoZSB0ZXN0IHN0cmVhbSB0byBiZSBwYXJzZWQuCi0gIGludCBudW1fbmFsdXMgPSA3NTk7Ci0KLSAgYmFzZTo6TWVtb3J5TWFwcGVkRmlsZSBzdHJlYW07Ci0gIEFTU0VSVF9UUlVFKHN0cmVhbS5Jbml0aWFsaXplKGZpbGVfcGF0aCkpCi0gICAgICA8PCAiQ291bGRuJ3Qgb3BlbiBzdHJlYW0gZmlsZTogIiA8PCBmaWxlX3BhdGguTWF5YmVBc0FTQ0lJKCk7Ci0KLSAgSDI2NFBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5TZXRTdHJlYW0oc3RyZWFtLmRhdGEoKSwgc3RyZWFtLmxlbmd0aCgpKTsKLQotICAvLyBQYXJzZSB1bnRpbCB0aGUgZW5kIG9mIHN0cmVhbS91bnN1cHBvcnRlZCBzdHJlYW0vZXJyb3IgaW4gc3RyZWFtIGlzIGZvdW5kLgotICBpbnQgbnVtX3BhcnNlZF9uYWx1cyA9IDA7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgbWVkaWE6OkgyNjRTbGljZUhlYWRlciBzaGRyOwotICAgIG1lZGlhOjpIMjY0U0VJTWVzc2FnZSBzZWlfbXNnOwotICAgIEgyNjROQUxVIG5hbHU7Ci0gICAgSDI2NFBhcnNlcjo6UmVzdWx0IHJlcyA9IHBhcnNlci5BZHZhbmNlVG9OZXh0TkFMVSgmbmFsdSk7Ci0gICAgaWYgKHJlcyA9PSBIMjY0UGFyc2VyOjprRU9TdHJlYW0pIHsKLSAgICAgIERWTE9HKDEpIDw8ICJOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHBhcnNlZCBOQUxVcyBiZWZvcmUgRU9TOiAiCi0gICAgICAgICAgICAgICA8PCBudW1fcGFyc2VkX25hbHVzOwotICAgICAgQVNTRVJUX0VRKG51bV9uYWx1cywgbnVtX3BhcnNlZF9uYWx1cyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVF9FUShyZXMsIEgyNjRQYXJzZXI6OmtPayk7Ci0KLSAgICArK251bV9wYXJzZWRfbmFsdXM7Ci0KLSAgICBpbnQgaWQ7Ci0gICAgc3dpdGNoIChuYWx1Lm5hbF91bml0X3R5cGUpIHsKLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtJRFJTbGljZToKLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtOb25JRFJTbGljZToKLSAgICAgICAgQVNTRVJUX0VRKHBhcnNlci5QYXJzZVNsaWNlSGVhZGVyKG5hbHUsICZzaGRyKSwgSDI2NFBhcnNlcjo6a09rKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtTUFM6Ci0gICAgICAgIEFTU0VSVF9FUShwYXJzZXIuUGFyc2VTUFMoJmlkKSwgSDI2NFBhcnNlcjo6a09rKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtQUFM6Ci0gICAgICAgIEFTU0VSVF9FUShwYXJzZXIuUGFyc2VQUFMoJmlkKSwgSDI2NFBhcnNlcjo6a09rKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtTRUlNZXNzYWdlOgotICAgICAgICBBU1NFUlRfRVEocGFyc2VyLlBhcnNlU0VJKCZzZWlfbXNnKSwgSDI2NFBhcnNlcjo6a09rKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFNraXAgdW5zdXBwb3J0ZWQgTkFMVS4KLSAgICAgICAgRFZMT0coNCkgPDwgIlNraXBwaW5nIHVuc3VwcG9ydGVkIE5BTFUiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk4NDIxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjgyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtTdGFydENvZGVQcmVmaXhbM10gPSB7MCwgMCwgMX07Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga1BhcmFtU2V0U3RhcnRDb2RlU2l6ZSA9IDEgKyBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCk7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgTkFMIHVuaXQgb2YgZ2l2ZW4gdHlwZSBtYXJrcwotLy8gYWNjZXNzIHVuaXQgYm91bmRhcnkuCi1zdGF0aWMgYm9vbCBJc0FjY2Vzc1VuaXRCb3VuZGFyeU5hbChpbnQgbmFsX3VuaXRfdHlwZSkgewotICAvLyBDaGVjayBpZiB0aGlzIHBhY2tldCBtYXJrcyBhY2Nlc3MgdW5pdCBib3VuZGFyeSBieSBjaGVja2luZyB0aGUKLSAgLy8gcGFja2V0IHR5cGUuCi0gIGlmIChuYWxfdW5pdF90eXBlID09IDYgfHwgIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbgotICAgICAgbmFsX3VuaXRfdHlwZSA9PSA3IHx8ICAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXQKLSAgICAgIG5hbF91bml0X3R5cGUgPT0gOCB8fCAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldAotICAgICAgbmFsX3VuaXRfdHlwZSA9PSA5IHx8ICAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXIKLSAgICAgIChuYWxfdW5pdF90eXBlID49IDE0ICYmIG5hbF91bml0X3R5cGUgPD0gMTgpKSB7ICAvLyBSZXNlcnZlZCB0eXBlcwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyOjpIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXIoKQotICAgIDogY29uZmlndXJhdGlvbl9wcm9jZXNzZWRfKGZhbHNlKSwKLSAgICAgIGZpcnN0X25hbF91bml0X2luX2FjY2Vzc191bml0Xyh0cnVlKSwKLSAgICAgIG5hbF91bml0X2xlbmd0aF9maWVsZF93aWR0aF8oMCkge30KLQotSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyOjp+SDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyKCkge30KLQotYm9vbCBIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXI6OlBhcnNlQ29uZmlndXJhdGlvbigKLSAgICBjb25zdCB1aW50OF90KiBjb25maWd1cmF0aW9uX3JlY29yZCwgaW50IGNvbmZpZ3VyYXRpb25fcmVjb3JkX3NpemUsCi0gICAgbXA0OjpBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCogYXZjX2NvbmZpZykgewotICBEQ0hFQ0soY29uZmlndXJhdGlvbl9yZWNvcmQpOwotICBEQ0hFQ0tfR1QoY29uZmlndXJhdGlvbl9yZWNvcmRfc2l6ZSwgMCk7Ci0gIERDSEVDSyhhdmNfY29uZmlnKTsKLQotICBpZiAoIWF2Y19jb25maWctPlBhcnNlKGNvbmZpZ3VyYXRpb25fcmVjb3JkLCBjb25maWd1cmF0aW9uX3JlY29yZF9zaXplKSkKLSAgICByZXR1cm4gZmFsc2U7ICAvLyBFcnJvcjogaW52YWxpZCBpbnB1dAotCi0gIC8vIFdlJ3JlIGRvbmUgcHJvY2Vzc2luZyB0aGUgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQsCi0gIC8vIHN0b3JlIHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZm9yIHBhcnNpbmcgYWN0dWFsIHBheWxvYWQKLSAgbmFsX3VuaXRfbGVuZ3RoX2ZpZWxkX3dpZHRoXyA9IGF2Y19jb25maWctPmxlbmd0aF9zaXplOwotICBjb25maWd1cmF0aW9uX3Byb2Nlc3NlZF8gPSB0cnVlOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdWludDMyX3QgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyOjpHZXRDb25maWdTaXplKAotICAgIGNvbnN0IG1wNDo6QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGF2Y19jb25maWcpIGNvbnN0IHsKLSAgdWludDMyX3QgY29uZmlnX3NpemUgPSAwOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZjX2NvbmZpZy5zcHNfbGlzdC5zaXplKCk7ICsraSkKLSAgICBjb25maWdfc2l6ZSArPSBrUGFyYW1TZXRTdGFydENvZGVTaXplICsgYXZjX2NvbmZpZy5zcHNfbGlzdFtpXS5zaXplKCk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmNfY29uZmlnLnBwc19saXN0LnNpemUoKTsgKytpKQotICAgIGNvbmZpZ19zaXplICs9IGtQYXJhbVNldFN0YXJ0Q29kZVNpemUgKyBhdmNfY29uZmlnLnBwc19saXN0W2ldLnNpemUoKTsKLQotICByZXR1cm4gY29uZmlnX3NpemU7Ci19Ci0KLXVpbnQzMl90IEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlcjo6Q2FsY3VsYXRlTmVlZGVkT3V0cHV0QnVmZmVyU2l6ZSgKLSAgICBjb25zdCB1aW50OF90KiBpbnB1dCwgdWludDMyX3QgaW5wdXRfc2l6ZSwKLSAgICBjb25zdCBtcDQ6OkFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKiBhdmNfY29uZmlnKSBjb25zdCB7Ci0gIHVpbnQzMl90IG91dHB1dF9zaXplID0gMDsKLSAgdWludDMyX3QgZGF0YV9sZWZ0ID0gaW5wdXRfc2l6ZTsKLSAgYm9vbCBmaXJzdF9uYWxfaW5fdGhpc19hY2Nlc3NfdW5pdCA9IGZpcnN0X25hbF91bml0X2luX2FjY2Vzc191bml0XzsKLQotICBpZiAoaW5wdXRfc2l6ZSA9PSAwKSByZXR1cm4gMDsgIC8vIEVycm9yOiBpbnZhbGlkIGlucHV0IGRhdGEKLQotICBpZiAoIWNvbmZpZ3VyYXRpb25fcHJvY2Vzc2VkXykgewotICAgIHJldHVybiAwOyAgLy8gRXJyb3I6IGNvbmZpZ3VyYXRpb24gbm90IGhhbmRsZWQsIHdlIGRvbid0IGtub3cgbmFsIHVuaXQgd2lkdGgKLSAgfQotCi0gIGlmIChhdmNfY29uZmlnKSBvdXRwdXRfc2l6ZSArPSBHZXRDb25maWdTaXplKCphdmNfY29uZmlnKTsKLQotICBDSEVDSyhuYWxfdW5pdF9sZW5ndGhfZmllbGRfd2lkdGhfID09IDEgfHwKLSAgICAgICAgbmFsX3VuaXRfbGVuZ3RoX2ZpZWxkX3dpZHRoXyA9PSAyIHx8IG5hbF91bml0X2xlbmd0aF9maWVsZF93aWR0aF8gPT0gNCk7Ci0KLSAgLy8gVGhlbiBhZGQgdGhlIG5lZWRlZCBzaXplIGZvciB0aGUgYWN0dWFsIHBhY2tldAotICB3aGlsZSAoZGF0YV9sZWZ0ID4gMCkgewotICAgIGlmIChkYXRhX2xlZnQgPCBuYWxfdW5pdF9sZW5ndGhfZmllbGRfd2lkdGhfKSB7Ci0gICAgICByZXR1cm4gMDsgIC8vIEVycm9yOiBub3QgZW5vdWdoIGRhdGEgZm9yIGNvcnJlY3QgY29udmVyc2lvbi4KLSAgICB9Ci0KLSAgICAvLyBSZWFkIHRoZSBuZXh0IE5BTCB1bml0IGxlbmd0aCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgICB1aW50OF90IHNpemVfb2ZfbGVuX2ZpZWxkOwotICAgIHVpbnQzMl90IG5hbF91bml0X2xlbmd0aDsKLSAgICBmb3IgKG5hbF91bml0X2xlbmd0aCA9IDAsIHNpemVfb2ZfbGVuX2ZpZWxkID0gbmFsX3VuaXRfbGVuZ3RoX2ZpZWxkX3dpZHRoXzsKLSAgICAgICAgIHNpemVfb2ZfbGVuX2ZpZWxkID4gMDsgaW5wdXQrKywgc2l6ZV9vZl9sZW5fZmllbGQtLSwgZGF0YV9sZWZ0LS0pIHsKLSAgICAgIG5hbF91bml0X2xlbmd0aCA8PD0gODsKLSAgICAgIG5hbF91bml0X2xlbmd0aCB8PSAqaW5wdXQ7Ci0gICAgfQotCi0gICAgaWYgKG5hbF91bml0X2xlbmd0aCA9PSAwKSB7Ci0gICAgICBicmVhazsgIC8vIFNpZ25pZmllcyB0aGF0IG5vIG1vcmUgZGF0YSBsZWZ0IGluIHRoZSBidWZmZXIKLSAgICB9IGVsc2UgaWYgKG5hbF91bml0X2xlbmd0aCA+IGRhdGFfbGVmdCkgewotICAgICAgcmV0dXJuIDA7ICAvLyBFcnJvcjogTm90IGVub3VnaCBkYXRhIGZvciBjb3JyZWN0IGNvbnZlcnNpb24KLSAgICB9Ci0gICAgZGF0YV9sZWZ0IC09IG5hbF91bml0X2xlbmd0aDsKLQotICAgIC8vIGZpdmUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiBmaXJzdCBOQUwgdW5pdCBieXRlIHNpZ25pZnkgbmFsX3VuaXRfdHlwZQotICAgIGludCBuYWxfdW5pdF90eXBlID0gKmlucHV0ICYgMHgxRjsKLSAgICBpZiAoZmlyc3RfbmFsX2luX3RoaXNfYWNjZXNzX3VuaXQgfHwKLSAgICAgICAgSXNBY2Nlc3NVbml0Qm91bmRhcnlOYWwobmFsX3VuaXRfdHlwZSkpIHsKLSAgICAgIG91dHB1dF9zaXplICs9IDE7ICAvLyBFeHRyYSB6ZXJvX2J5dGUgZm9yIHRoZXNlIG5hbCB1bml0cwotICAgICAgZmlyc3RfbmFsX2luX3RoaXNfYWNjZXNzX3VuaXQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gU3RhcnQgY29kZSBwcmVmaXgKLSAgICBvdXRwdXRfc2l6ZSArPSBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCk7Ci0gICAgLy8gQWN0dWFsIE5BTCB1bml0IHNpemUKLSAgICBvdXRwdXRfc2l6ZSArPSBuYWxfdW5pdF9sZW5ndGg7Ci0gICAgaW5wdXQgKz0gbmFsX3VuaXRfbGVuZ3RoOwotICAgIC8vIE5vIG5lZWQgZm9yIHRyYWlsaW5nIHplcm8gYml0cwotICB9Ci0gIHJldHVybiBvdXRwdXRfc2l6ZTsKLX0KLQotYm9vbCBIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXI6OkNvbnZlcnRBVkNEZWNvZGVyQ29uZmlnVG9CeXRlU3RyZWFtKAotICAgIGNvbnN0IG1wNDo6QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGF2Y19jb25maWcsIHVpbnQ4X3QqIG91dHB1dCwKLSAgICB1aW50MzJfdCogb3V0cHV0X3NpemUpIHsKLSAgdWludDhfdCogb3V0ID0gb3V0cHV0OwotICB1aW50MzJfdCBvdXRfc2l6ZSA9ICpvdXRwdXRfc2l6ZTsKLSAgKm91dHB1dF9zaXplID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmNfY29uZmlnLnNwc19saXN0LnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKCFXcml0ZVBhcmFtU2V0KGF2Y19jb25maWcuc3BzX2xpc3RbaV0sICZvdXQsICZvdXRfc2l6ZSkpIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZjX2NvbmZpZy5wcHNfbGlzdC5zaXplKCk7ICsraSkgewotICAgIGlmICghV3JpdGVQYXJhbVNldChhdmNfY29uZmlnLnBwc19saXN0W2ldLCAmb3V0LCAmb3V0X3NpemUpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBuYWxfdW5pdF9sZW5ndGhfZmllbGRfd2lkdGhfID0gYXZjX2NvbmZpZy5sZW5ndGhfc2l6ZTsKLSAgY29uZmlndXJhdGlvbl9wcm9jZXNzZWRfID0gdHJ1ZTsKLSAgKm91dHB1dF9zaXplID0gb3V0IC0gb3V0cHV0OwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXI6OkNvbnZlcnROYWxVbml0U3RyZWFtVG9CeXRlU3RyZWFtKAotICAgIGNvbnN0IHVpbnQ4X3QqIGlucHV0LCB1aW50MzJfdCBpbnB1dF9zaXplLAotICAgIGNvbnN0IG1wNDo6QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQqIGF2Y19jb25maWcsIHVpbnQ4X3QqIG91dHB1dCwKLSAgICB1aW50MzJfdCogb3V0cHV0X3NpemUpIHsKLSAgY29uc3QgdWludDhfdCogaW5zY2FuID0gaW5wdXQ7ICAvLyBXZSByZWFkIHRoZSBpbnB1dCBmcm9tIGhlcmUgcHJvZ3Jlc3NpdmVseQotICB1aW50OF90KiBvdXRzY2FuID0gb3V0cHV0OyAgICAgIC8vIFdlIHdyaXRlIHRoZSBvdXRwdXQgdG8gaGVyZSBwcm9ncmVzc2l2ZWx5Ci0gIHVpbnQzMl90IGRhdGFfbGVmdCA9IGlucHV0X3NpemU7Ci0KLSAgaWYgKGlucHV0X3NpemUgPT0gMCB8fCAqb3V0cHV0X3NpemUgPT0gMCkgewotICAgICpvdXRwdXRfc2l6ZSA9IDA7Ci0gICAgcmV0dXJuIGZhbHNlOyAgLy8gRXJyb3I6IGludmFsaWQgaW5wdXQKLSAgfQotCi0gIC8vIE5BTCB1bml0IHdpZHRoIHNob3VsZCBiZSBrbm93biBhdCB0aGlzIHBvaW50Ci0gIENIRUNLKG5hbF91bml0X2xlbmd0aF9maWVsZF93aWR0aF8gPT0gMSB8fAotICAgICAgICBuYWxfdW5pdF9sZW5ndGhfZmllbGRfd2lkdGhfID09IDIgfHwgbmFsX3VuaXRfbGVuZ3RoX2ZpZWxkX3dpZHRoXyA9PSA0KTsKLQotICAvLyBEbyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gZm9yIHRoZSBhY3R1YWwgaW5wdXQgcGFja2V0Ci0gIGludCBuYWxfdW5pdF9jb3VudCA9IDA7Ci0gIHdoaWxlIChkYXRhX2xlZnQgPiAwKSB7Ci0gICAgdWludDhfdCBpOwotICAgIHVpbnQzMl90IG5hbF91bml0X2xlbmd0aDsKLQotICAgIC8vIFJlYWQgdGhlIG5leHQgTkFMIHVuaXQgbGVuZ3RoIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBieSBzY2FubmluZwotICAgIC8vIHRoZSBpbnB1dCBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWMgbGVuZ3RoIGZpZWxkIHdpZHRoCi0gICAgZm9yIChuYWxfdW5pdF9sZW5ndGggPSAwLCBpID0gbmFsX3VuaXRfbGVuZ3RoX2ZpZWxkX3dpZHRoXzsKLSAgICAgICAgIGkgPiAwICYmIGRhdGFfbGVmdCA+IDA7IGluc2NhbisrLCBpLS0sIGRhdGFfbGVmdC0tKSB7Ci0gICAgICBuYWxfdW5pdF9sZW5ndGggPDw9IDg7Ci0gICAgICBuYWxfdW5pdF9sZW5ndGggfD0gKmluc2NhbjsKLSAgICB9Ci0KLSAgICBpZiAobmFsX3VuaXRfbGVuZ3RoID09IDApIHsKLSAgICAgIGJyZWFrOyAgLy8gU3VjY2Vzc2Z1bCBjb252ZXJzaW9uLCBlbmQgb2YgYnVmZmVyCi0gICAgfSBlbHNlIGlmIChuYWxfdW5pdF9sZW5ndGggPiBkYXRhX2xlZnQpIHsKLSAgICAgICpvdXRwdXRfc2l6ZSA9IDA7Ci0gICAgICByZXR1cm4gZmFsc2U7ICAvLyBFcnJvcjogbm90IGVub3VnaCBkYXRhIGZvciBjb3JyZWN0IGNvbnZlcnNpb24KLSAgICB9Ci0KLSAgICAvLyBGaXZlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgZmlyc3QgTkFMIHVuaXQgYnl0ZSBzaWduaWZ5Ci0gICAgLy8gbmFsX3VuaXRfdHlwZS4KLSAgICBpbnQgbmFsX3VuaXRfdHlwZSA9ICppbnNjYW4gJiAweDFGOwotICAgIG5hbF91bml0X2NvdW50Kys7Ci0KLSAgICAvLyBJbnNlcnQgdGhlIGNvbmZpZyBhZnRlciB0aGUgQVVEIGlmIGFuIEFVRCBpcyB0aGUgZmlyc3QgTkFMIHVuaXQgb3IKLSAgICAvLyBiZWZvcmUgYWxsIE5BTCB1bml0cyBpZiB0aGUgZmlyc3Qgb25lIGlzbid0IGFuIEFVRC4KLSAgICBpZiAoYXZjX2NvbmZpZyAmJiAobmFsX3VuaXRfdHlwZSAhPSBIMjY0TkFMVTo6a0FVRCB8fCBuYWxfdW5pdF9jb3VudCA+IDEpKSB7Ci0gICAgICB1aW50MzJfdCBvdXRwdXRfYnl0ZXNfdXNlZCA9IG91dHNjYW4gLSBvdXRwdXQ7Ci0KLSAgICAgIERDSEVDS19HRSgqb3V0cHV0X3NpemUsIG91dHB1dF9ieXRlc191c2VkKTsKLQotICAgICAgdWludDMyX3QgY29uZmlnX3NpemUgPSAqb3V0cHV0X3NpemUgLSBvdXRwdXRfYnl0ZXNfdXNlZDsKLSAgICAgIGlmICghQ29udmVydEFWQ0RlY29kZXJDb25maWdUb0J5dGVTdHJlYW0oKmF2Y19jb25maWcsIG91dHNjYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWdfc2l6ZSkpIHsKLSAgICAgICAgRFZMT0coMSkgPDwgIkZhaWxlZCB0byBpbnNlcnQgcGFyYW1ldGVyIHNldHMuIjsKLSAgICAgICAgKm91dHB1dF9zaXplID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gRmFpbGVkIHRvIGNvbnZlcnQgdGhlIGJ1ZmZlci4KLSAgICAgIH0KLSAgICAgIG91dHNjYW4gKz0gY29uZmlnX3NpemU7Ci0gICAgICBhdmNfY29uZmlnID0gTlVMTDsKLSAgICB9Ci0gICAgdWludDMyX3Qgc3RhcnRfY29kZV9sZW47Ci0gICAgZmlyc3RfbmFsX3VuaXRfaW5fYWNjZXNzX3VuaXRfCi0gICAgICAgID8gc3RhcnRfY29kZV9sZW4gPSBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCkgKyAxCi0gICAgICAgIDogc3RhcnRfY29kZV9sZW4gPSBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90PihvdXRzY2FuIC0gb3V0cHV0KSArIHN0YXJ0X2NvZGVfbGVuICsKLSAgICAgICAgICAgIG5hbF91bml0X2xlbmd0aCA+Ci0gICAgICAgICpvdXRwdXRfc2l6ZSkgewotICAgICAgKm91dHB1dF9zaXplID0gMDsKLSAgICAgIHJldHVybiBmYWxzZTsgIC8vIEVycm9yOiB0b28gc21hbGwgb3V0cHV0IGJ1ZmZlcgotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoaXMgcGFja2V0IG1hcmtzIGFjY2VzcyB1bml0IGJvdW5kYXJ5IGJ5IGNoZWNraW5nIHRoZQotICAgIC8vIHBhY2tldCB0eXBlLgotICAgIGlmIChJc0FjY2Vzc1VuaXRCb3VuZGFyeU5hbChuYWxfdW5pdF90eXBlKSkgewotICAgICAgZmlyc3RfbmFsX3VuaXRfaW5fYWNjZXNzX3VuaXRfID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSBleHRyYSB6ZXJvLWJ5dGUgYmVmb3JlIHN0YXJ0IGNvZGUgcHJlZml4IGlmIHRoaXMgcGFja2V0Ci0gICAgLy8gc2lnbmFscyBuZXh0IGFjY2VzcyB1bml0LgotICAgIGlmIChmaXJzdF9uYWxfdW5pdF9pbl9hY2Nlc3NfdW5pdF8pIHsKLSAgICAgICpvdXRzY2FuID0gMDsKLSAgICAgIG91dHNjYW4rKzsKLSAgICAgIGZpcnN0X25hbF91bml0X2luX2FjY2Vzc191bml0XyA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIE5vIG5lZWQgdG8gd3JpdGUgbGVhZGluZyB6ZXJvIGJpdHMuCi0gICAgLy8gV3JpdGUgc3RhcnQtY29kZSBwcmVmaXguCi0gICAgbWVtY3B5KG91dHNjYW4sIGtTdGFydENvZGVQcmVmaXgsIHNpemVvZihrU3RhcnRDb2RlUHJlZml4KSk7Ci0gICAgb3V0c2NhbiArPSBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCk7Ci0gICAgLy8gVGhlbiB3cml0ZSB0aGUgYWN0dWFsIE5BTCB1bml0IGZyb20gdGhlIGlucHV0IGJ1ZmZlci4KLSAgICBtZW1jcHkob3V0c2NhbiwgaW5zY2FuLCBuYWxfdW5pdF9sZW5ndGgpOwotICAgIGluc2NhbiArPSBuYWxfdW5pdF9sZW5ndGg7Ci0gICAgZGF0YV9sZWZ0IC09IG5hbF91bml0X2xlbmd0aDsKLSAgICBvdXRzY2FuICs9IG5hbF91bml0X2xlbmd0aDsKLSAgICAvLyBObyBuZWVkIGZvciB0cmFpbGluZyB6ZXJvIGJpdHMuCi0gIH0KLSAgLy8gU3VjY2Vzc2Z1bCBjb252ZXJzaW9uLCBvdXRwdXQgdGhlIGZyZXNobHkgYWxsb2NhdGVkIGJpdHN0cmVhbSBidWZmZXIuCi0gICpvdXRwdXRfc2l6ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihvdXRzY2FuIC0gb3V0cHV0KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyOjpXcml0ZVBhcmFtU2V0KAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBwYXJhbV9zZXQsIHVpbnQ4X3QqKiBvdXQsCi0gICAgdWludDMyX3QqIG91dF9zaXplKSBjb25zdCB7Ci0gIC8vIFN0cmlwIHRyYWlsaW5nIG51bGwgYnl0ZXMuCi0gIHNpemVfdCBzaXplID0gcGFyYW1fc2V0LnNpemUoKTsKLSAgd2hpbGUgKHNpemUgJiYgcGFyYW1fc2V0W3NpemUgLSAxXSA9PSAwKSBzaXplLS07Ci0gIGlmICghc2l6ZSkgcmV0dXJuIGZhbHNlOwotCi0gIC8vIFZlcmlmeSBzcGFjZS4KLSAgdWludDMyX3QgYnl0ZXNfbGVmdCA9ICpvdXRfc2l6ZTsKLSAgaWYgKGJ5dGVzX2xlZnQgPCBrUGFyYW1TZXRTdGFydENvZGVTaXplIHx8Ci0gICAgICBieXRlc19sZWZ0IC0ga1BhcmFtU2V0U3RhcnRDb2RlU2l6ZSA8IHNpemUpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB1aW50OF90KiBzdGFydCA9ICpvdXQ7Ci0gIHVpbnQ4X3QqIGJ1ZiA9IHN0YXJ0OwotCi0gIC8vIFdyaXRlIHRoZSA0IGJ5dGUgQW5uZXggQiBzdGFydCBjb2RlLgotICAqYnVmKysgPSAwOyAgLy8gemVybyBieXRlCi0gIG1lbWNweShidWYsIGtTdGFydENvZGVQcmVmaXgsIHNpemVvZihrU3RhcnRDb2RlUHJlZml4KSk7Ci0gIGJ1ZiArPSBzaXplb2Yoa1N0YXJ0Q29kZVByZWZpeCk7Ci0KLSAgLy8gQ29weSB0aGUgZGF0YS4KLSAgbWVtY3B5KGJ1ZiwgJnBhcmFtX3NldFswXSwgc2l6ZSk7Ci0gIGJ1ZiArPSBzaXplOwotCi0gICpvdXQgPSBidWY7Ci0gICpvdXRfc2l6ZSAtPSBidWYgLSBzdGFydDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF90b19hbm5leF9iX2JpdHN0cmVhbV9jb252ZXJ0ZXIuaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlODAzY2YuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF90b19hbm5leF9iX2JpdHN0cmVhbV9jb252ZXJ0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfVE9fQU5ORVhfQl9CSVRTVFJFQU1fQ09OVkVSVEVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX0gyNjRfVE9fQU5ORVhfQl9CSVRTVFJFQU1fQ09OVkVSVEVSX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgbXA0IHsKLXN0cnVjdCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDsKLX0KLQotLy8gSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyIGlzIGEgY2xhc3MgdG8gY29udmVydCBILjI2NCBiaXRzdHJlYW0gZnJvbQotLy8gTVA0IGZvcm1hdCAoYXMgc3BlY2lmaWVkIGluIElTTy9JRUMgMTQ0OTYtMTUpIGludG8gSC4yNjQgYnl0ZXN0cmVhbQotLy8gKGFzIHNwZWNpZmllZCBpbiBJU08vSUVDIDE0NDk2LTEwIEFubmV4IEIpLgotY2xhc3MgTUVESUFfRVhQT1JUIEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlciB7Ci0gcHVibGljOgotICBIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXIoKTsKLSAgfkgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlcigpOwotCi0gIC8vIFBhcnNlcyB0aGUgZ2xvYmFsIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIGZyb20gdGhlIGZpbGUgZm9ybWF0J3MKLSAgLy8gaGVhZGVycy4gQ29udmVydGVyIHdpbGwgcmVtZW1iZXIgdGhlIGZpZWxkIGxlbmd0aCBmcm9tIHRoZSBjb25maWd1cmF0aW9uCi0gIC8vIGhlYWRlcnMgYWZ0ZXIgdGhpcy4KLSAgLy8KLSAgLy8gUGFyYW1ldGVycwotICAvLyAgIGNvbmZpZ3VyYXRpb25fcmVjb3JkCi0gIC8vICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkLgotICAvLyAgIGNvbmZpZ3VyYXRpb25fcmVjb3JkX3NpemUKLSAgLy8gICAgIFNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KLSAgLy8gICBhdmNfY29uZmlnCi0gIC8vICAgICBQb2ludGVyIHRvIHBsYWNlIHRoZSBwYXJzZWQgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgZGF0YSBpbnRvLgotICAvLwotICAvLyBSZXR1cm5zCi0gIC8vICAgUmV0dXJucyB0cnVlIGlmIHxjb25maWd1cmF0aW9uX3JlY29yZHwgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuIEZhbHNlCi0gIC8vICAgaXMgcmV0dXJuZWQgaWYgYSBwYXJzaW5nIGVycm9yIG9jY3VycmVkLgotICAvLyAgIHxhdmNfY29uZmlnfCBvbmx5IGNvbnRhaW5zIHZhbGlkIGRhdGEgd2hlbiB0cnVlIGlzIHJldHVybmVkLgotICBib29sIFBhcnNlQ29uZmlndXJhdGlvbihjb25zdCB1aW50OF90KiBjb25maWd1cmF0aW9uX3JlY29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpZ3VyYXRpb25fcmVjb3JkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1wNDo6QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQqIGF2Y19jb25maWcpOwotCi0gIC8vIFJldHVybnMgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB0byBzdG9yZSB0aGUgcGFyYW1ldGVyIHNldHMgaW4gfGF2Y19jb25maWd8Ci0gIC8vIGluIEFubmV4IEIgZm9ybS4KLSAgdWludDMyX3QgR2V0Q29uZmlnU2l6ZSgKLSAgICAgIGNvbnN0IG1wNDo6QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGF2Y19jb25maWcpIGNvbnN0OwotCi0gIC8vIENhbGN1bGF0ZXMgbmVlZGVkIGJ1ZmZlciBzaXplIGZvciB0aGUgYml0c3RyZWFtIGNvbnZlcnRlZCBpbnRvIGJ5dGVzdHJlYW0uCi0gIC8vIExpZ2h0d2VpZ2h0IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3QgZG8gdGhlIGFjdHVhbCBjb252ZXJzaW9uLgotICAvLwotICAvLyBQYXJhbWV0ZXJzCi0gIC8vICAgaW5wdXQKLSAgLy8gICAgIFBvaW50ZXIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgTkFMIHVuaXRzIGluIE1QNCBmb3JtYXQuCi0gIC8vICAgaW5wdXRfc2l6ZQotICAvLyAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgotICAvLyAgIGF2Y19jb25maWcKLSAgLy8gICAgIFRoZSBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB0aGF0IGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgc2V0cyB0aGF0Ci0gIC8vICAgICB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIG91dHB1dC4gTlVMTCBpZiBubyBwYXJhbWV0ZXIgc2V0cyBuZWVkIHRvIGJlCi0gIC8vICAgICBpbnNlcnRlZC4KLSAgLy8KLSAgLy8gUmV0dXJucwotICAvLyAgIFJlcXVpcmVkIGJ1ZmZlciBzaXplIGZvciB0aGUgb3V0cHV0IE5BTCB1bml0IGJ1ZmZlciB3aGVuIGNvbnZlcnRlZAotICAvLyAgIHRvIGJ5dGVzdHJlYW0gZm9ybWF0LCBvciAwIGlmIGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHNpemUgb2YKLSAgLy8gICB0aGUgb3V0cHV0IGJ1ZmZlciBmcm9tIHRoZSBkYXRhIGluIHxpbnB1dHwgYW5kIHxhdmNfY29uZmlnfC4KLSAgdWludDMyX3QgQ2FsY3VsYXRlTmVlZGVkT3V0cHV0QnVmZmVyU2l6ZSgKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIGlucHV0LCB1aW50MzJfdCBpbnB1dF9zaXplLAotICAgICAgY29uc3QgbXA0OjpBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCogYXZjX2NvbmZpZykgY29uc3Q7Ci0KLSAgLy8gQ29udmVydEFWQ0RlY29kZXJDb25maWdUb0J5dGVTdHJlYW0gY29udmVydHMgdGhlCi0gIC8vIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIGZyb20gdGhlIE1QNCBoZWFkZXJzIHRvIGJ5dGVzdHJlYW0gZm9ybWF0LgotICAvLyBDbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAvLyB0byBob2xkIHRoZSBvdXRwdXQgZGF0YS4gQ2xpZW50IGNhbiBwcmVjYWxjdWxhdGUgdGhlIG5lZWRlZCBvdXRwdXQgYnVmZmVyCi0gIC8vIHNpemUgYnkgdXNpbmcgR2V0Q29uZmlnU2l6ZSgpLgotICAvLwotICAvLyBQYXJhbWV0ZXJzCi0gIC8vICAgYXZjX2NvbmZpZwotICAvLyAgICAgVGhlIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHRoYXQgY29udGFpbnMgdGhlIHBhcmFtZXRlciBzZXRzIHRoYXQKLSAgLy8gICAgIHdpbGwgYmUgd3JpdHRlbiB0byB8b3V0cHV0fC4KLSAgLy8gICBvdXRwdXQKLSAgLy8gICAgIFBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8uCi0gIC8vICAgb3V0cHV0X3NpemUgKGkvbykKLSAgLy8gICAgIFBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIFdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mCi0gIC8vICAgICBieXRlcyB3cml0dGVuIHRvIG91dHB1dCBhZnRlciBzdWNjZXNzZnVsIGNhbGwuCi0gIC8vCi0gIC8vIFJldHVybnMKLSAgLy8gICAgdHJ1ZSAgaWYgc3VjY2Vzc2Z1bCBjb252ZXJzaW9ufAotICAvLyAgICBmYWxzZSBpZiBjb252ZXJzaW9uIG5vdCBzdWNjZXNzZnVsICh8b3V0cHV0X3NpemV8IHdpbGwgaG9sZCB0aGUgYW1vdW50Ci0gIC8vICAgICAgICAgIG9mIGNvbnZlcnRlZCBkYXRhKQotICBib29sIENvbnZlcnRBVkNEZWNvZGVyQ29uZmlnVG9CeXRlU3RyZWFtKAotICAgICAgY29uc3QgbXA0OjpBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCYgYXZjX2NvbmZpZywgdWludDhfdCogb3V0cHV0LAotICAgICAgdWludDMyX3QqIG91dHB1dF9zaXplKTsKLQotICAvLyBDb252ZXJ0TmFsVW5pdFN0cmVhbVRvQnl0ZVN0cmVhbSBjb252ZXJ0cyB0aGUgTkFMIHVuaXQgZnJvbSBNUDQgZm9ybWF0Ci0gIC8vIHRvIGJ5dGVzdHJlYW0gZm9ybWF0LiBDbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoZSBvdXRwdXQKLSAgLy8gYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBvdXRwdXQgZGF0YS4gQ2xpZW50IGNhbiBwcmVjYWxjdWxhdGUgdGhlCi0gIC8vIG5lZWRlZCBvdXRwdXQgYnVmZmVyIHNpemUgYnkgdXNpbmcgQ2FsY3VsYXRlTmVlZGVkT3V0cHV0QnVmZmVyU2l6ZS4KLSAgLy8KLSAgLy8gUGFyYW1ldGVycwotICAvLyAgIGlucHV0Ci0gIC8vICAgICBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIE5BTCB1bml0cyBpbiBNUDQgZm9ybWF0LgotICAvLyAgIGlucHV0X3NpemUKLSAgLy8gICAgIFNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcy4KLSAgLy8gICBhdmNfY29uZmlnCi0gIC8vICAgICBUaGUgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgdGhhdCBjb250YWlucyB0aGUgcGFyYW1ldGVyIHNldHMgdG8KLSAgLy8gICAgIGluc2VydCBpbnRvIHRoZSBvdXRwdXQuIE5VTEwgaWYgbm8gcGFyYW1ldGVyIHNldHMgbmVlZCB0byBiZSBpbnNlcnRlZC4KLSAgLy8gICBvdXRwdXQKLSAgLy8gICAgIFBvaW50ZXIgdG8gYnVmZmVyIHdoZXJlIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8uCi0gIC8vICAgb3V0cHV0X3NpemUgKGkvbykKLSAgLy8gICAgIFBvaW50ZXIgdG8gdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIFdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mCi0gIC8vICAgICBieXRlcyB3cml0dGVuIHRvIG91dHB1dCBhZnRlciBzdWNjZXNzZnVsIGNhbGwuCi0gIC8vCi0gIC8vIFJldHVybnMKLSAgLy8gICAgdHJ1ZSAgaWYgc3VjY2Vzc2Z1bCBjb252ZXJzaW9uCi0gIC8vICAgIGZhbHNlIGlmIGNvbnZlcnNpb24gbm90IHN1Y2Nlc3NmdWwgKG91dHB1dF9zaXplIHdpbGwgaG9sZCB0aGUgYW1vdW50Ci0gIC8vICAgICAgICAgIG9mIGNvbnZlcnRlZCBkYXRhKQotICBib29sIENvbnZlcnROYWxVbml0U3RyZWFtVG9CeXRlU3RyZWFtKAotICAgICAgY29uc3QgdWludDhfdCogaW5wdXQsIHVpbnQzMl90IGlucHV0X3NpemUsCi0gICAgICBjb25zdCBtcDQ6OkFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKiBhdmNfY29uZmlnLCB1aW50OF90KiBvdXRwdXQsCi0gICAgICB1aW50MzJfdCogb3V0cHV0X3NpemUpOwotCi0gcHJpdmF0ZToKLSAgLy8gV3JpdGVzIEFubmV4IEIgc3RhcnQgY29kZSBhbmQgfHBhcmFtX3NldHwgdG8gfCpvdXR8LgotICAvLyAgfCpvdXR8IC0gSXMgdGhlIG1lbW9yeSBsb2NhdGlvbiB0byB3cml0ZSB0aGUgcGFyYW1ldGVyIHNldC4KLSAgLy8gIHwqb3V0X3NpemV8IC0gTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHBhcmFtZXRlciBzZXQuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhcnQgY29kZSBhbmQgcGFyYW0gc2V0IHdlcmUgc3VjY2Vzc2Z1bGx5Ci0gIC8vIHdyaXR0ZW4uIE9uIGEgc3VjY2Vzc2Z1bCB3cml0ZSwgfCpvdXR8IGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGZpcnN0Ci0gIC8vIGJ5dGUgYWZ0ZXIgdGhlIGRhdGEgdGhhdCB3YXMgd3JpdHRlbi4gfCpvdXRfc2l6ZXwgaXMgdXBkYXRlZCB0byByZWZsZWN0Ci0gIC8vIHRoZSBuZXcgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gfCpvdXR8LgotICBib29sIFdyaXRlUGFyYW1TZXQoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHBhcmFtX3NldCwgdWludDhfdCoqIG91dCwKLSAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBvdXRfc2l6ZSkgY29uc3Q7Ci0KLSAgLy8gRmxhZyBmb3IgaW5kaWNhdGluZyB3aGV0aGVyIGdsb2JhbCBwYXJhbWV0ZXIgc2V0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgotICBib29sIGNvbmZpZ3VyYXRpb25fcHJvY2Vzc2VkXzsKLSAgLy8gRmxhZyBmb3IgaW5kaWNhdGluZyB3aGV0aGVyIG5leHQgTkFMIHVuaXQgc3RhcnRzIG5ldyBhY2Nlc3MgdW5pdC4KLSAgYm9vbCBmaXJzdF9uYWxfdW5pdF9pbl9hY2Nlc3NfdW5pdF87Ci0gIC8vIFZhcmlhYmxlIHRvIGhvbGQgaW50ZXJsZWF2aW5nIGZpZWxkJ3MgbGVuZ3RoIGluIGJ5dGVzLgotICB1aW50OF90IG5hbF91bml0X2xlbmd0aF9maWVsZF93aWR0aF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY0X1RPX0FOTkVYX0JfQklUU1RSRUFNX0NPTlZFUlRFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF90b19hbm5leF9iX2JpdHN0cmVhbV9jb252ZXJ0ZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3OGQ3NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ3NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF90b19hbm5leF9iX2JpdHN0cmVhbV9jb252ZXJ0ZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlclRlc3QoKSB7fQotCi0gIH5IMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXJUZXN0KCkgb3ZlcnJpZGUge30KLQotIHByb3RlY3RlZDoKLSAgbXA0OjpBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCBhdmNfY29uZmlnXzsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXJUZXN0KTsKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtIZWFkZXJEYXRhT2tXaXRoRmllbGRMZW40W10gPSB7Ci0gICAgMHgwMSwgMHg0MiwgMHgwMCwgMHgyOCwgMHhGRiwgMHhFMSwgMHgwMCwgMHgwOCwgMHg2NywgMHg0MiwgMHgwMCwgMHgyOCwKLSAgICAweEU5LCAweDA1LCAweDg5LCAweEM4LCAweDAxLCAweDAwLCAweDA0LCAweDY4LCAweENFLCAweDA2LCAweEYyLCAweDAwfTsKLQotc3RhdGljIGNvbnN0IHVpbnQ4X3Qga1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjRbXSA9IHsKLSAgICAweDAwLCAweDAwLCAweDBCLCAweEY3LCAweDY1LCAweEI4LCAweDQwLCAweDU3LCAweDBCLCAweEYwLCAweERGLCAweEY4LAotICAgIDB4MDAsIDB4MUYsIDB4NzgsIDB4OTgsIDB4NTQsIDB4QUMsIDB4RjIsIDB4MDAsIDB4MDQsIDB4OUQsIDB4MjYsIDB4RTAsCi0gICAgMHgzQiwgMHg1QywgMHgwMCwgMHgwQSwgMHgwMCwgMHg4RiwgMHg5RSwgMHg4NiwgMHg2MywgMHgxQiwgMHg0NiwgMHhFNywKLSAgICAweEQ2LCAweDQ1LCAweDg4LCAweDg4LCAweEVBLCAweDEwLCAweDg5LCAweDc5LCAweDAxLCAweDM0LCAweDMwLCAweDAxLAotICAgIDB4OEUsIDB4N0QsIDB4MUEsIDB4MzksIDB4NDUsIDB4NEUsIDB4NjksIDB4ODYsIDB4MTIsIDB4RjIsIDB4RTcsIDB4Q0YsCi0gICAgMHg1MCwgMHhGOCwgMHgyNiwgMHg1NCwgMHgxNywgMHhCRSwgMHgzRiwgMHhDNCwgMHg4MCwgMHgzMiwgMHhEOCwgMHgwMiwKLSAgICAweDMyLCAweEU0LCAweEFFLCAweERELCAweDM5LCAweDExLCAweDhFLCAweDU0LCAweDQyLCAweEFFLCAweEJELCAweDEyLAotICAgIDB4QTQsIDB4Q0UsIDB4RTIsIDB4OTgsIDB4OTEsIDB4MDUsIDB4QzQsIDB4QTgsIDB4MjAsIDB4QzcsIDB4QjMsIDB4RDksCi0gICAgMHg0NywgMHg3MywgMHgwOSwgMHhENSwgMHhDRiwgMHg2MiwgMHg1NywgMHgzRiwgMHhGRiwgMHhGRCwgMHhCOSwgMHg5NCwKLSAgICAweDJCLCAweDNELCAweDEyLCAweDFBLCAweDg0LCAweDBCLCAweDI4LCAweEFELCAweDVDLCAweDlFLCAweDVDLCAweEMzLAotICAgIDB4QkIsIDB4QkQsIDB4N0YsIDB4RkUsIDB4MDksIDB4ODcsIDB4NzQsIDB4MzksIDB4MUMsIDB4QTUsIDB4MEUsIDB4NDQsCi0gICAgMHhEOCwgMHg1RCwgMHg0MSwgMHhEQiwgMHhBQSwgMHhCQywgMHgwNSwgMHgxNiwgMHhBMywgMHg5OCwgMHhFRSwgMHhFRSwKLSAgICAweDlDLCAweEEwLCAweEYxLCAweDIzLCAweDkwLCAweEYwLCAweDVFLCAweDlGLCAweEY0LCAweEZBLCAweDdGLCAweDRCLAotICAgIDB4NjksIDB4NjYsIDB4NDksIDB4NTIsIDB4REQsIDB4RDYsIDB4QzAsIDB4MEYsIDB4OEMsIDB4NkUsIDB4ODAsIDB4REQsCi0gICAgMHg3QSwgMHhERiwgMHgxMCwgMHhDRCwgMHg0QiwgMHg1NCwgMHg2RiwgMHhGQywgMHg3RCwgMHgzNCwgMHhCQSwgMHg4QiwKLSAgICAweEQ0LCAweEQ5LCAweDMwLCAweDE4LCAweDlGLCAweDM5LCAweDA0LCAweDlGLCAweENCLCAweERCLCAweDFCLCAweEE3LAotICAgIDB4NzAsIDB4OTYsIDB4QUYsIDB4RkYsIDB4NkYsIDB4QjUsIDB4QkYsIDB4NTgsIDB4MDEsIDB4OTgsIDB4Q0QsIDB4RjIsCi0gICAgMHg2NiwgMHgyOCwgMHgxQSwgMHhDNCwgMHg5RSwgMHg1OCwgMHg0MCwgMHgzOSwgMHhBRSwgMHgwNywgMHgxMSwgMHgzRiwKLSAgICAweEYyLCAweDlCLCAweDA2LCAweDlDLCAweEI4LCAweEM5LCAweDE2LCAweDEyLCAweDA5LCAweDhFLCAweEQyLCAweEQ0LAotICAgIDB4RjUsIDB4QzYsIDB4NzcsIDB4NDAsIDB4MEYsIDB4RkQsIDB4MTIsIDB4MTksIDB4NTUsIDB4MUEsIDB4OEUsIDB4OUMsCi0gICAgMHgxOCwgMHg4QiwgMHgwRCwgMHgxOCwgMHhGQSwgMHhCQSwgMHg3RiwgMHhCQiwgMHg4MywgMHhCQiwgMHg4NSwgMHhBMCwKLSAgICAweENDLCAweEFGLCAweEY2LCAweEVBLCAweDgxLCAweDEwLCAweDE4LCAweDhFLCAweDEwLCAweDAwLCAweENCLCAweDdGLAotICAgIDB4MjcsIDB4MDgsIDB4MDYsIDB4REUsIDB4M0MsIDB4MjAsIDB4RTUsIDB4RkUsIDB4Q0MsIDB4NEYsIDB4QjMsIDB4NDEsCi0gICAgMHhFMCwgMHhDQywgMHg0QywgMHgyNiwgMHhDMSwgMHhDMCwgMHgyQywgMHgxNiwgMHgxMiwgMHhBQSwgMHgwNCwgMHg4MywKLSAgICAweDUxLCAweDRFLCAweENBLCAweDAwLCAweENGLCAweDQyLCAweDlDLCAweDA2LCAweDJELCAweDA2LCAweERELCAweDFELAotICAgIDB4MDgsIDB4NzUsIDB4RTAsIDB4ODksIDB4QzcsIDB4NjIsIDB4NjgsIDB4MkUsIDB4QkYsIDB4NEQsIDB4MkQsIDB4MEEsCi0gICAgMHhDNCwgMHg4NiwgMHhGNiwgMHgyRiwgMHhBMSwgMHg0OSwgMHhBNywgMHgwRiwgMHhEQiwgMHgxRiwgMHg4MiwgMHhFQywKLSAgICAweEMxLCAweDYyLCAweEZCLCAweDdGLCAweEYxLCAweEFFLCAweEE2LCAweDFBLCAweEQ1LCAweDZCLCAweDA2LCAweDVFLAotICAgIDB4QjYsIDB4MDIsIDB4NTAsIDB4QUUsIDB4MkQsIDB4RjksIDB4RDksIDB4OTUsIDB4QUQsIDB4MDEsIDB4OEMsIDB4NTMsCi0gICAgMHgwMSwgMHhBRiwgMHhDRSwgMHhFNSwgMHhBNSwgMHhCQiwgMHg5NSwgMHg4QSwgMHg4NSwgMHg3MCwgMHg3NywgMHhFMywKLSAgICAweDlBLCAweDY4LCAweDFCLCAweERGLCAweDQ3LCAweEY5LCAweEY0LCAweEJELCAweDgwLCAweDdELCAweDc2LCAweDlBLAotICAgIDB4NjksIDB4RkMsIDB4QkUsIDB4MTQsIDB4MEQsIDB4ODcsIDB4MDksIDB4MTIsIDB4OTgsIDB4MjAsIDB4MDUsIDB4NDYsCi0gICAgMHhCNywgMHhBRSwgMHgxMCwgMHhCNywgMHgwMSwgMHhCNywgMHhERSwgMHgzQiwgMHhERCwgMHg3QSwgMHg4QSwgMHg1NSwKLSAgICAweDczLCAweEFELCAweERGLCAweDY5LCAweERFLCAweEQwLCAweDUxLCAweDk3LCAweEEwLCAweEU2LCAweDVFLCAweEJBLAotICAgIDB4QkEsIDB4ODAsIDB4MEYsIDB4NEUsIDB4OUEsIDB4NjgsIDB4MzYsIDB4RTYsIDB4OUYsIDB4NUIsIDB4MzksIDB4QzAsCi0gICAgMHg5MCwgMHhBMSwgMHhDMCwgMHhDMywgMHg4MiwgMHhFNCwgMHg1MCwgMHhFQSwgMHg2MCwgMHg3QSwgMHhERCwgMHg1RiwKLSAgICAweDhCLCAweDVGLCAweEFGLCAweEZDLCAweDc0LCAweEFGLCAweERDLCAweDU2LCAweEY3LCAweDJFLCAweDNFLCAweDk3LAotICAgIDB4NkUsIDB4MkIsIDB4RjMsIDB4QUYsIDB4RkUsIDB4N0QsIDB4MzIsIDB4REMsIDB4NTYsIDB4RjgsIDB4QUYsIDB4QjUsCi0gICAgMHhBMywgMHhCQiwgMHgwMCwgMHg1QiwgMHg4NCwgMHgzRCwgMHg5RiwgMHgwQiwgMHg0MCwgMHg4OCwgMHg2MSwgMHg1RiwKLSAgICAweDRGLCAweDRGLCAweEIwLCAweEIzLCAweDA3LCAweDgxLCAweDNFLCAweEYyLCAweEZCLCAweDUwLCAweENBLCAweDc3LAotICAgIDB4NDAsIDB4MTIsIDB4QTgsIDB4RTYsIDB4MTEsIDB4OEUsIDB4RDYsIDB4OEEsIDB4QzYsIDB4RDYsIDB4OEMsIDB4MUQsCi0gICAgMHg2MywgMHg1NSwgMHgzRCwgMHgzNCwgMHhFQSwgMHhDMywgMHhDNiwgMHg2QSwgMHhEMiwgMHg4QywgMHhCMCwgMHgxRCwKLSAgICAweDVFLCAweDRBLCAweDdBLCAweDhCLCAweEQ1LCAweDk5LCAweDgwLCAweDg0LCAweDMyLCAweEZCLCAweEI3LCAweDAyLAotICAgIDB4NkUsIDB4NjEsIDB4RkUsIDB4QUMsIDB4MUIsIDB4NUQsIDB4MTAsIDB4MjMsIDB4MjQsIDB4QzMsIDB4OEMsIDB4N0IsCi0gICAgMHg1OCwgMHgyQywgMHg0RCwgMHgwNCwgMHg3NCwgMHg4NCwgMHgyNSwgMHgxMCwgMHg0RSwgMHg5NCwgMHgyOSwgMHg0RCwKLSAgICAweDg4LCAweEFFLCAweDY1LCAweDUzLCAweEI5LCAweDk1LCAweDRFLCAweEU3LCAweERELCAweEVFLCAweEYyLCAweDcwLAotICAgIDB4MUYsIDB4MjYsIDB4NEYsIDB4QTgsIDB4QkMsIDB4M0QsIDB4MzUsIDB4MDIsIDB4M0IsIDB4QzAsIDB4OTgsIDB4NzAsCi0gICAgMHgzOCwgMHgxOCwgMHhFNSwgMHgxRSwgMHgwNSwgMHhBQywgMHgyOCwgMHhBQSwgMHg0NiwgMHgxQSwgMHhCMCwgMHgxOSwKLSAgICAweDk5LCAweDE4LCAweDM1LCAweDc4LCAweDFFLCAweDQxLCAweDYwLCAweDBELCAweDRGLCAweDdFLCAweEVDLCAweDM3LAotICAgIDB4QzMsIDB4MzAsIDB4NzMsIDB4MkEsIDB4NjksIDB4RkUsIDB4RUYsIDB4MjcsIDB4RUUsIDB4MTMsIDB4Q0MsIDB4RDAsCi0gICAgMHhEQiwgMHhFNiwgMHg0NSwgMHhFQywgMHg1QywgMHhCNSwgMHg3MSwgMHg1NCwgMHgyRSwgMHhCMSwgMHhFOSwgMHg4OCwKLSAgICAweEI0LCAweDNGLCAweDZGLCAweEZELCAweEY3LCAweEZGLCAweDlELCAweDJELCAweDUyLCAweDJFLCAweEFFLCAweEM5LAotICAgIDB4OTUsIDB4REUsIDB4QkYsIDB4REYsIDB4RkYsIDB4QkYsIDB4MjEsIDB4QjMsIDB4MkIsIDB4RjUsIDB4RjcsIDB4RjcsCi0gICAgMHhEMSwgMHhBMCwgMHhGMCwgMHg3NiwgMHg2OCwgMHgzNywgMHhEQiwgMHg4RiwgMHg4NSwgMHg0RCwgMHhBOCwgMHgxQSwKLSAgICAweEY5LCAweDdGLCAweDc1LCAweEE3LCAweDkzLCAweEY1LCAweDAzLCAweEMxLCAweEYyLCAweDYwLCAweDhBLCAweDkyLAotICAgIDB4NTMsIDB4RjUsIDB4RDEsIDB4QzEsIDB4NTYsIDB4NEIsIDB4NjgsIDB4MDUsIDB4MTYsIDB4ODgsIDB4NjEsIDB4RTcsCi0gICAgMHgxNCwgMHhDOCwgMHgwRCwgMHhGMCwgMHhERiwgMHhFRiwgMHg0NiwgMHg0QSwgMHhFRCwgMHgwQiwgMHhEMSwgMHhEMSwKLSAgICAweEQxLCAweEE0LCAweDg1LCAweEEzLCAweDJDLCAweDFELCAweERFLCAweDQ1LCAweDE0LCAweEExLCAweDhFLCAweEE4LAotICAgIDB4RDksIDB4OEMsIDB4QUIsIDB4NDcsIDB4MzEsIDB4RjEsIDB4MDAsIDB4MTUsIDB4QUQsIDB4ODAsIDB4MjAsIDB4QUEsCi0gICAgMHhFNCwgMHg1NywgMHhGOCwgMHgwNSwgMHgxNCwgMHg1OCwgMHgwQiwgMHhEMywgMHg2MywgMHgwMCwgMHg4RiwgMHg0NCwKLSAgICAweDE1LCAweDdGLCAweDE5LCAweEM3LCAweDBBLCAweEUwLCAweDQ5LCAweDMyLCAweEZFLCAweDM2LCAweDBFLCAweEYzLAotICAgIDB4NjYsIDB4MTAsIDB4MkIsIDB4MTEsIDB4NzMsIDB4M0QsIDB4MTksIDB4OTIsIDB4MjIsIDB4MjAsIDB4NzUsIDB4MUYsCi0gICAgMHhGMSwgMHhEQiwgMHg5NiwgMHg3MywgMHhDRiwgMHgxQiwgMHg1MywgMHhGRiwgMHhEMiwgMHgyMywgMHhGMiwgMHhCNiwKLSAgICAweEFBLCAweEI2LCAweDQ0LCAweEEzLCAweDczLCAweDdFLCAweDAwLCAweDJELCAweDRELCAweDRELCAweDg3LCAweEUwLAotICAgIDB4ODQsIDB4NTUsIDB4RDYsIDB4MDMsIDB4QjgsIDB4RDgsIDB4OTAsIDB4RUYsIDB4QzAsIDB4NzYsIDB4NUQsIDB4NjksCi0gICAgMHgwMiwgMHgwMCwgMHgwRSwgMHgxNywgMHhEMCwgMHgwMiwgMHg5NiwgMHg1MCwgMHhFQSwgMHhBQiwgMHhCRiwgMHgwRCwKLSAgICAweEFGLCAweENCLCAweEQzLCAweEZGLCAweEFBLCAweDlELCAweDdGLCAweEQ2LCAweEJELCAweDJDLCAweDE0LCAweEI0LAotICAgIDB4Q0QsIDB4MjAsIDB4NzMsIDB4QjQsIDB4RjQsIDB4MzgsIDB4OTYsIDB4REUsIDB4QjAsIDB4NkIsIDB4RTUsIDB4MUIsCi0gICAgMHhGRCwgMHgwRSwgMHgwQiwgMHhBNCwgMHg4MSwgMHhCRiwgMHhDOCwgMHhBMCwgMHgyMSwgMHg3NiwgMHg3QiwgMHgyNSwKLSAgICAweDNGLCAweEU2LCAweDg0LCAweDQwLCAweDFBLCAweERBLCAweDI1LCAweDVBLCAweEZGLCAweDczLCAweDZCLCAweDE0LAotICAgIDB4MUIsIDB4RjcsIDB4MDgsIDB4RkEsIDB4MjYsIDB4NzMsIDB4N0EsIDB4NTgsIDB4MDIsIDB4MUEsIDB4RTYsIDB4NjMsCi0gICAgMHhCNiwgMHg0NSwgMHg3QiwgMHhFMywgMHhFMCwgMHg4MCwgMHgxNCwgMHg0MiwgMHhBOCwgMHg3RCwgMHhGMywgMHg4MCwKLSAgICAweDlCLCAweDAxLCAweDQzLCAweDgyLCAweDgyLCAweDhDLCAweEJFLCAweDBELCAweEZELCAweEFFLCAweDg4LCAweEE4LAotICAgIDB4QjksIDB4QzMsIDB4RUUsIDB4RkYsIDB4NDYsIDB4MDAsIDB4ODQsIDB4RTYsIDB4QjQsIDB4MEMsIDB4QTksIDB4NjYsCi0gICAgMHhDNiwgMHg3NCwgMHg3MiwgMHhBQSwgMHhBNCwgMHgzQSwgMHhCMCwgMHgxQiwgMHgwNiwgMHhCNCwgMHhEQiwgMHhFOCwKLSAgICAweEMyLCAweDE3LCAweEEyLCAweEJDLCAweEJFLCAweDVDLCAweDBGLCAweDJBLCAweDc2LCAweEQ1LCAweEVFLCAweDM5LAotICAgIDB4MzYsIDB4N0MsIDB4MjUsIDB4OTQsIDB4MTUsIDB4M0MsIDB4QzksIDB4QjksIDB4OTMsIDB4MDcsIDB4MTksIDB4QUYsCi0gICAgMHhFNiwgMHg3MCwgMHhDMywgMHhGNSwgMHhENCwgMHgxNywgMHg4NywgMHg1NywgMHg3NywgMHg3RCwgMHhDRiwgMHgwRCwKLSAgICAweERELCAweERFLCAweEI3LCAweEZGLCAweEI0LCAweERBLCAweDIwLCAweDQ1LCAweDFBLCAweDQ1LCAweEY0LCAweDU4LAotICAgIDB4MDEsIDB4QkMsIDB4RUIsIDB4M0YsIDB4MTYsIDB4N0YsIDB4NEMsIDB4MTUsIDB4ODQsIDB4OEMsIDB4RTUsIDB4RjYsCi0gICAgMHg5NiwgMHhBNiwgMHhBMSwgMHhCOSwgMHhCMiwgMHg3RiwgMHg2QiwgMHhGRiwgMHgzMSwgMHhGMiwgMHhGNSwgMHhDOSwKLSAgICAweEZGLCAweDYxLCAweEVFLCAweEI1LCAweDg0LCAweEFFLCAweDY4LCAweDQxLCAweEVBLCAweEQwLCAweEYwLCAweEE1LAotICAgIDB4Q0UsIDB4MEMsIDB4RTYsIDB4NEMsIDB4NkQsIDB4NkQsIDB4OTQsIDB4MDgsIDB4QzksIDB4QTksIDB4NEEsIDB4NjAsCi0gICAgMHg2RCwgMHgwMSwgMHgzQiwgMHhFRiwgMHg0RCwgMHg5OSwgMHg4RCwgMHg0MiwgMHgyQSwgMHg2QiwgMHg4QSwgMHhDNywKLSAgICAweEZBLCAweEE5LCAweDkwLCAweDQwLCAweDAwLCAweDkwLCAweEYzLCAweEEwLCAweDc1LCAweDhFLCAweEQ1LCAweEZFLAotICAgIDB4RTcsIDB4QkQsIDB4MDIsIDB4ODcsIDB4MEMsIDB4N0QsIDB4RjAsIDB4QUYsIDB4MUUsIDB4NUYsIDB4OEQsIDB4QzgsCi0gICAgMHhFMSwgMHhENCwgMHg1NiwgMHgwOCwgMHhCRiwgMHg3NiwgMHg4MCwgMHhENCwgMHgxOCwgMHg4OSwgMHgyRCwgMHg1NywKLSAgICAweERGLCAweDY2LCAweEQwLCAweDQ2LCAweDY4LCAweDc3LCAweDU1LCAweDQ3LCAweEY1LCAweDdDLCAweEY3LCAweEE2LAotICAgIDB4NjYsIDB4RDYsIDB4NUEsIDB4NjQsIDB4NTUsIDB4RDQsIDB4ODAsIDB4QzQsIDB4NTUsIDB4RTksIDB4MzYsIDB4M0YsCi0gICAgMHg1RSwgMHhFMiwgMHg1QywgMHg3RiwgMHg1RiwgMHhDRSwgMHg3RiwgMHhFMSwgMHgwQywgMHg4MiwgMHgzRCwgMHg2QiwKLSAgICAweDZFLCAweEEyLCAweEVBLCAweDNCLCAweDFGLCAweEU4LCAweDlFLCAweEM3LCAweDRFLCAweDI0LCAweDNELCAweERELAotICAgIDB4RkEsIDB4RUIsIDB4NzEsIDB4REYsIDB4RkUsIDB4MTUsIDB4RkUsIDB4NDEsIDB4OUIsIDB4QjQsIDB4NEUsIDB4QUIsCi0gICAgMHg1MSwgMHhFNSwgMHgxRiwgMHg3RCwgMHgyRCwgMHhBQywgMHhEMCwgMHg2NiwgMHhEOSwgMHhBMSwgMHg1OSwgMHg3OCwKLSAgICAweEM2LCAweEVGLCAweEM0LCAweDQzLCAweDA4LCAweDY1LCAweDE4LCAweDczLCAweERFLCAweDJBLCAweEFELCAweDcyLAotICAgIDB4RTcsIDB4NUEsIDB4N0UsIDB4MzMsIDB4MDQsIDB4NzIsIDB4MzgsIDB4NTcsIDB4NDcsIDB4NzMsIDB4MTAsIDB4MUQsCi0gICAgMHg4OCwgMHg1NywgMHg0QywgMHhERiwgMHhBNywgMHg3OCwgMHgxNiwgMHhGQiwgMHgwMSwgMHgyMSwgMHgyOCwgMHgyRCwKLSAgICAweEI2LCAweDdFLCAweDA1LCAweDE4LCAweDMyLCAweDUyLCAweEMzLCAweDQ5LCAweDBCLCAweDMyLCAweDE4LCAweDEyLAotICAgIDB4OTMsIDB4NTQsIDB4MTUsIDB4M0IsIDB4QzgsIDB4NkQsIDB4NEEsIDB4NzcsIDB4RUYsIDB4MEEsIDB4NDYsIDB4ODMsCi0gICAgMHg4OSwgMHg1QywgMHg4QiwgMHhDQiwgMHgxOCwgMHhBNiwgMHhEQywgMHg5NywgMHg2RiwgMHhFRSwgMHhFRSwgMHgwMCwKLSAgICAweDZBLCAweEYxLCAweDEwLCAweEZFLCAweDA3LCAweDBDLCAweEUwLCAweDUzLCAweEQyLCAweEI4LCAweDQ1LCAweEY0LAotICAgIDB4NkUsIDB4MTYsIDB4NEIsIDB4QzksIDB4OUMsIDB4QzcsIDB4OTMsIDB4ODMsIDB4MjMsIDB4MUQsIDB4NEQsIDB4MDAsCi0gICAgMHhCOSwgMHg0RiwgMHg4NiwgMHg1MSwgMHhGMCwgMHgyOSwgMHg2OSwgMHg0MSwgMHgyMSwgMHhDNSwgMHg0QSwgMHhDNiwKLSAgICAweDZELCAweEQxLCAweDgxLCAweDM4LCAweERCLCAweDdDLCAweDA2LCAweEE4LCAweDI2LCAweDhFLCAweDcxLCAweDAwLAotICAgIDB4NEMsIDB4NDQsIDB4MTQsIDB4MDUsIDB4RjIsIDB4MUMsIDB4MDAsIDB4NDksIDB4RkMsIDB4MjksIDB4NkEsIDB4RjksCi0gICAgMHg5RSwgMHhEMSwgMHgzNSwgMHg0QiwgMHhCNywgMHhFNSwgMHhEQiwgMHhGQywgMHgwMSwgMHgwNCwgMHgzRiwgMHg3MCwKLSAgICAweDMzLCAweDU2LCAweDg3LCAweDY5LCAweDAxLCAweEI0LCAweENFLCAweDFDLCAweDRELCAweDJFLCAweDgzLCAweDUxLAotICAgIDB4NTEsIDB4RDAsIDB4MzcsIDB4M0IsIDB4QjQsIDB4QkEsIDB4NDcsIDB4RjUsIDB4RkYsIDB4QkYsIDB4RkEsIDB4RDUsCi0gICAgMHgwMywgMHg2NSwgMHhEMywgMHgyOCwgMHg5RiwgMHgzOCwgMHg1NywgMHhGRSwgMHg3MSwgMHhEOCwgMHg5QywgMHgxNiwKLSAgICAweEVFLCAweDcyLCAweDE5LCAweDAzLCAweDE3LCAweDZFLCAweEMwLCAweEVDLCAweDQ5LCAweDNELCAweDk2LCAweEUyLAotICAgIDB4MzAsIDB4OTcsIDB4OTcsIDB4ODQsIDB4MzgsIDB4NkIsIDB4RTgsIDB4MkUsIDB4QUIsIDB4MEUsIDB4MkUsIDB4MDMsCi0gICAgMHg1MiwgMHhCQSwgMHg2OCwgMHg1NSwgMHhCQSwgMHgxRCwgMHgyQywgMHg0NywgMHhBQSwgMHg3MiwgMHhBRSwgMHgwMiwKLSAgICAweDMxLCAweDZFLCAweEExLCAweERDLCAweEFELCAweDBGLCAweDRBLCAweDQ2LCAweEM5LCAweEYyLCAweEE5LCAweEFCLAotICAgIDB4RkQsIDB4ODcsIDB4ODksIDB4NUMsIDB4QjMsIDB4NzUsIDB4N0UsIDB4RTMsIDB4REUsIDB4OUYsIDB4QzQsIDB4MDIsCi0gICAgMHgxRSwgMHhBMiwgMHhGOCwgMHg4QiwgMHhEMywgMHgwMCwgMHg4MywgMHg5NiwgMHhDNCwgMHhEMCwgMHhCOSwgMHg2MiwKLSAgICAweEI5LCAweDY5LCAweEVDLCAweDU2LCAweERGLCAweDdELCAweDkxLCAweDRCLCAweDY4LCAweDI3LCAweEE4LCAweDYxLAotICAgIDB4NzgsIDB4QTcsIDB4OTUsIDB4NjYsIDB4NTEsIDB4NDEsIDB4RjYsIDB4Q0UsIDB4NzgsIDB4RDMsIDB4OUEsIDB4OTEsCi0gICAgMHhBMCwgMHgzMSwgMHgwOSwgMHg0NywgMHhCOCwgMHg0NywgMHhCOCwgMHg0NCwgMHhFMSwgMHgxMywgMHg4NiwgMHg3RSwKLSAgICAweDkyLCAweDgwLCAweEM2LCAweDFBLCAweEY3LCAweDc5LCAweDdFLCAweEYxLCAweDVELCAweDlGLCAweDE3LCAweDJELAotICAgIDB4ODAsIDB4MDAsIDB4NzksIDB4MzQsIDB4N0QsIDB4RTMsIDB4QUQsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDcsIDB4ODAsCi0gICAgMHgwMCwgMHg0MCwgMHgwMSwgMHhGOCwgMHhBMSwgMHg4NiwgMHhCMSwgMHhFRSwgMHgyMSwgMHg2MywgMHg4NSwgMHg2MCwKLSAgICAweDUxLCAweDg0LCAweDkwLCAweDdFLCAweDkyLCAweDA5LCAweDM5LCAweDFDLCAweDE2LCAweDg3LCAweDVDLCAweEE2LAotICAgIDB4MDksIDB4OTAsIDB4MDYsIDB4MzQsIDB4NkUsIDB4QjgsIDB4OEQsIDB4NUQsIDB4QUMsIDB4NzcsIDB4OTcsIDB4QjUsCi0gICAgMHg0RCwgMHgzMCwgMHhGRCwgMHgzOSwgMHhEMCwgMHg1MCwgMHgwMCwgMHhDOSwgMHg5OCwgMHgwNCwgMHg4NiwgMHgwMCwKLSAgICAweDBELCAweEQ4LCAweDNFLCAweDM0LCAweEMyLCAweEE2LCAweDI1LCAweEY4LCAweDIwLCAweENDLCAweDZELCAweDlFLAotICAgIDB4NjMsIDB4MDUsIDB4MzAsIDB4QzQsIDB4QzYsIDB4Q0MsIDB4NTQsIDB4MzEsIDB4OUYsIDB4M0MsIDB4RjUsIDB4ODYsCi0gICAgMHhCOSwgMHgwOCwgMHgxOCwgMHhDMywgMHgxRSwgMHhCOSwgMHhBMCwgMHgwQywgMHg0NSwgMHgyQywgMHg1NCwgMHgzMiwKLSAgICAweDhCLCAweDg1LCAweDg2LCAweDU5LCAweEMzLCAweEIzLCAweDUwLCAweDVBLCAweEZFLCAweEJBLCAweEY3LCAweDRELAotICAgIDB4QzksIDB4OUMsIDB4OUUsIDB4MDEsIDB4REYsIDB4RDcsIDB4NkUsIDB4QjUsIDB4MTUsIDB4NTMsIDB4MDgsIDB4NTcsCi0gICAgMHhBNCwgMHg3MSwgMHgzNiwgMHg4MCwgMHg0NiwgMHgwNSwgMHgyMSwgMHg0OCwgMHg3QiwgMHg5MSwgMHhDOCwgMHhBQSwKLSAgICAweEZGLCAweDA3LCAweDlGLCAweDc4LCAweDY4LCAweENGLCAweDNDLCAweEVGLCAweEZGLCAweEJDLCAweEI2LCAweEEyLAotICAgIDB4MzYsIDB4QjcsIDB4OUYsIDB4NTQsIDB4RjYsIDB4NkYsIDB4NUQsIDB4REQsIDB4NzUsIDB4RDQsIDB4M0MsIDB4NzUsCi0gICAgMHhFOCwgMHhDRiwgMHgxNSwgMHgwMiwgMHg1QiwgMHg5NCwgMHhDMywgMHhBMiwgMHg0MSwgMHg2MywgMHhBMSwgMHgxNCwKLSAgICAweEY2LCAweEMwLCAweDU3LCAweDE1LCAweDlGLCAweDBDLCAweDNGLCAweDgwLCAweEYyLCAweDk4LCAweEVFLCAweDQxLAotICAgIDB4ODUsIDB4RUUsIDB4QkMsIDB4QUEsIDB4RTksIDB4NTksIDB4QUEsIDB4QTAsIDB4OTIsIDB4Q0EsIDB4MDAsIDB4RjMsCi0gICAgMHg1MCwgMHhDQywgMHhGRiwgMHhBRCwgMHg5NywgMHg2OSwgMHhBNywgMHhGMiwgMHgwQiwgMHg4RiwgMHhENywgMHhENywKLSAgICAweDgyLCAweDNBLCAweEJCLCAweDk4LCAweDFELCAweENCLCAweDg5LCAweDBCLCAweDlCLCAweDA1LCAweEY3LCAweEQwLAotICAgIDB4MUEsIDB4NjAsIDB4RjMsIDB4MjksIDB4MTYsIDB4MTIsIDB4RjgsIDB4RjQsIDB4RjEsIDB4NEEsIDB4MDUsIDB4OUIsCi0gICAgMHg1NywgMHgxMiwgMHg3RSwgMHgzQSwgMHg0QSwgMHg4RCwgMHhBNiwgMHhERiwgMHhCNiwgMHhERCwgMHhERiwgMHhDMywKLSAgICAweEYwLCAweEQyLCAweEQ0LCAweEQ3LCAweDQxLCAweEE2LCAweDAwLCAweDc2LCAweDhDLCAweDc1LCAweDA4LCAweEYwLAotICAgIDB4MTksIDB4RDgsIDB4MTQsIDB4NjMsIDB4NTUsIDB4NTIsIDB4MTgsIDB4MzAsIDB4OTgsIDB4RDAsIDB4M0YsIDB4NjUsCi0gICAgMHg1MiwgMHhCMywgMHg4OCwgMHg2RCwgMHgxNywgMHgzOSwgMHg5MywgMHhDQSwgMHgzQiwgMHhCNCwgMHgxRCwgMHg4RCwKLSAgICAweERGLCAweERGLCAweEFELCAweDcyLCAweERBLCAweDc0LCAweEFGLCAweEJELCAweDMxLCAweEY5LCAweDEyLCAweDYxLAotICAgIDB4NDUsIDB4MjksIDB4NEMsIDB4MkIsIDB4NjEsIDB4QTEsIDB4MTIsIDB4OTAsIDB4NTMsIDB4RTcsIDB4NUEsIDB4OUQsCi0gICAgMHg0NCwgMHhDOCwgMHgzQSwgMHg4MywgMHhEQywgMHgzNCwgMHg0QywgMHgwNywgMHhBRiwgMHhEQiwgMHg5MCwgMHhDRCwKLSAgICAweDAzLCAweEE0LCAweDY0LCAweDc4LCAweEJELCAweDU1LCAweEIyLCAweDU2LCAweDU5LCAweDMyLCAweEFCLCAweDEzLAotICAgIDB4MkMsIDB4QzksIDB4NzcsIDB4RjgsIDB4M0IsIDB4REYsIDB4RkYsIDB4QUMsIDB4MDcsIDB4QjksIDB4MDgsIDB4N0IsCi0gICAgMHhFOSwgMHg4MiwgMHhCOSwgMHg1OSwgMHhDNywgMHhGRiwgMHg4NiwgMHgyQywgMHgxMiwgMHg3QywgMHhDNiwgMHg2NSwKLSAgICAweDNDLCAweDcxLCAweEI4LCAweDk4LCAweDlGLCAweEEyLCAweDQ1LCAweDAzLCAweEE1LCAweEQ5LCAweEMzLCAweENGLAotICAgIDB4RkEsIDB4RUIsIDB4ODksIDB4QUQsIDB4MDMsIDB4RUUsIDB4REQsIDB4NzYsIDB4RDMsIDB4NEYsIDB4MTAsIDB4NkYsCi0gICAgMHhGMCwgMHhDMSwgMHg2MCwgMHgwQywgMHgwMCwgMHhENCwgMHg3NiwgMHgxMiwgMHgwQSwgMHg4RCwgMHhEQywgMHhGRCwKLSAgICAweDVFLCAweDBCLCAweDI2LCAweDJGLCAweDAxLCAweDFELCAweEI5LCAweEU3LCAweDczLCAweEQ0LCAweEYyLCAweENCLAotICAgIDB4RDgsIDB4NzgsIDB4MjEsIDB4NTIsIDB4NEIsIDB4ODMsIDB4M0MsIDB4NDQsIDB4NzIsIDB4MEUsIDB4QjEsIDB4NEUsCi0gICAgMHgzNywgMHhCQywgMHhDNywgMHg1MCwgMHhGQSwgMHgwNywgMHg4MCwgMHg3MSwgMHgxMCwgMHgwQiwgMHgyNCwgMHhEMSwKLSAgICAweDdFLCAweERBLCAweDdGLCAweEE3LCAweDJGLCAweDQwLCAweEFBLCAweEQzLCAweEY1LCAweDQ0LCAweDEwLCAweDU2LAotICAgIDB4NEUsIDB4M0IsIDB4RjEsIDB4NkUsIDB4OUEsIDB4QTAsIDB4RUEsIDB4ODUsIDB4NjYsIDB4MTYsIDB4RkIsIDB4NUMsCi0gICAgMHgwQiwgMHgyQiwgMHg3NCwgMHgxOCwgMHhBRiwgMHgzRCwgMHgwNCwgMHgzRSwgMHhDRSwgMHg4OCwgMHg5QiwgMHgzRSwKLSAgICAweEY0LCAweEI5LCAweDAwLCAweDYwLCAweDBFLCAweEUxLCAweEUyLCAweENCLCAweDEyLCAweEI5LCAweDZELCAweDVBLAotICAgIDB4QzcsIDB4NTUsIDB4MUQsIDB4QjksIDB4NzksIDB4QUMsIDB4NDMsIDB4NDMsIDB4RTYsIDB4M0IsIDB4REQsIDB4N0UsCi0gICAgMHg5RiwgMHg3OCwgMHhEMywgMHhFQSwgMHhBMywgMHgxMSwgMHhGRiwgMHhEQiwgMHhCQiwgMHhCOCwgMHg5NywgMHgzNywKLSAgICAweDE1LCAweERCLCAweEYxLCAweDk3LCAweDk2LCAweEM3LCAweEZDLCAweEU1LCAweEJGLCAweEYyLCAweDg2LCAweEMwLAotICAgIDB4RkEsIDB4OUIsIDB4NEMsIDB4MDAsIDB4MDQsIDB4MDMsIDB4QTUsIDB4QjYsIDB4QjcsIDB4OUMsIDB4RDksIDB4QUIsCi0gICAgMHgwOSwgMHg3NywgMHg1MSwgMHgxOCwgMHgzQiwgMHhBRCwgMHg2MSwgMHg2QywgMHhGQywgMHg1MSwgMHg5NiwgMHhGQiwKLSAgICAweDE5LCAweEM4LCAweDUyLCAweDM1LCAweDA3LCAweDAwLCAweDYzLCAweDg3LCAweDE0LCAweDA0LCAweEZBLCAweDdBLAotICAgIDB4NDgsIDB4M0UsIDB4MDAsIDB4NDcsIDB4MjksIDB4MDcsIDB4NzQsIDB4OTcsIDB4NzQsIDB4ODQsIDB4RUIsIDB4QjIsCi0gICAgMHgxNiwgMHhCMiwgMHgzMSwgMHg4MSwgMHhDRSwgMHgyQSwgMHgzMSwgMHhBNywgMHhCMSwgMHhFQiwgMHg4MywgMHgzNCwKLSAgICAweDdBLCAweDczLCAweEQ3LCAweDJGLCAweEZGLCAweEJDLCAweEZGLCAweEU1LCAweEFBLCAweEYyLCAweEI1LCAweDZFLAotICAgIDB4OUUsIDB4QTUsIDB4NzAsIDB4OEEsIDB4OEMsIDB4REYsIDB4NkEsIDB4MDYsIDB4MTYsIDB4QzEsIDB4QUIsIDB4NTksCi0gICAgMHg3MCwgMHhEOSwgMHgzRCwgMHg0NywgMHg3QywgMHhERCwgMHhFRiwgMHhERiwgMHgyRiwgMHhGRiwgMHg0MiwgMHg2QiwKLSAgICAweEJBLCAweDRCLCAweEJGLCAweEY4LCAweDdGLCAweEYyLCAweDAzLCAweDBELCAweDc5LCAweEJDLCAweDAzLCAweDc2LAotICAgIDB4NjQsIDB4MUMsIDB4MEQsIDB4N0IsIDB4RDcsIDB4QkQsIDB4QjAsIDB4NkMsIDB4RDgsIDB4NjEsIDB4MTcsIDB4MTcsCi0gICAgMHg4QywgMHhFRCwgMHg0RSwgMHgyMCwgMHhFQiwgMHg1NSwgMHgzMywgMHgzOSwgMHhFOSwgMHg3RSwgMHhCRSwgMHg4RSwKLSAgICAweDA1LCAweDRCLCAweDc4LCAweDk2LCAweDg1LCAweENDLCAweDY4LCAweEM5LCAweDc4LCAweEFGLCAweEFFLCAweDQ0LAotICAgIDB4MzYsIDB4NjEsIDB4RDMsIDB4NTMsIDB4RUIsIDB4QjMsIDB4M0UsIDB4NEYsIDB4OTcsIDB4RTIsIDB4OEQsIDB4QUUsCi0gICAgMHg5MCwgMHhFRCwgMHhCNSwgMHg0RiwgMHg4RSwgMHhFNCwgMHg3QSwgMHg0NCwgMHhDRiwgMHg5RCwgMHhDNSwgMHg3NywKLSAgICAweDRELCAweEFCLCAweDRGLCAweEU1LCAweEM1LCAweDczLCAweEEwLCAweEM4LCAweEE1LCAweEJCLCAweDRCLCAweDdELAotICAgIDB4RDUsIDB4RkIsIDB4RkIsIDB4RkYsIDB4NjEsIDB4RkQsIDB4QUEsIDB4MUEsIDB4NjIsIDB4N0UsIDB4M0MsIDB4NjYsCi0gICAgMHgzNCwgMHgxNSwgMHg2NCwgMHgyNSwgMHhFQywgMHg3QywgMHg5RCwgMHg2QSwgMHg2NCwgMHg0RCwgMHg4MCwgMHhENSwKLSAgICAweDRGLCAweEZFLCAweDhFLCAweEVFLCAweDE4LCAweDUzLCAweEMxLCAweDA5LCAweDUxLCAweEY3LCAweEMwLCAweEE2LAotICAgIDB4QjIsIDB4OUIsIDB4MTksIDB4MkIsIDB4MTQsIDB4NjYsIDB4NjYsIDB4NEIsIDB4MzksIDB4NjIsIDB4MUQsIDB4ODQsCi0gICAgMHhCOSwgMHgwMiwgMHg4NCwgMHhBQywgMHhDMSwgMHhEQSwgMHg2QywgMHg4MCwgMHhDRCwgMHg0MCwgMHgyMCwgMHgyMCwKLSAgICAweDE5LCAweDUxLCAweERDLCAweDJCLCAweDdELCAweDVELCAweDdGLCAweEUzLCAweDg2LCAweDhFLCAweEMzLCAweDM1LAotICAgIDB4RkUsIDB4NUMsIDB4RjYsIDB4MUMsIDB4RkYsIDB4MDUsIDB4OUUsIDB4QjUsIDB4QjYsIDB4QkIsIDB4QkUsIDB4RjcsCi0gICAgMHgyRiwgMHhCNywgMHhFMSwgMHhGNSwgMHgzMywgMHg4NiwgMHhBMCwgMHg0NywgMHhERSwgMHhGNywgMHhFOSwgMHgzQiwKLSAgICAweEJFLCAweDdFLCAweDlCLCAweDE3LCAweEZDLCAweEZELCAweDJFLCAweDQwLCAweDg2LCAweDQxLCAweDc1LCAweEYxLAotICAgIDB4QjIsIDB4MTgsIDB4QTksIDB4REUsIDB4MkQsIDB4RDYsIDB4MDQsIDB4MjAsIDB4QTQsIDB4QkEsIDB4ODEsIDB4QkMsCi0gICAgMHgxRCwgMHg1QSwgMHhENiwgMHhGNywgMHhGNiwgMHhCOCwgMHg0MiwgMHhGNywgMHhGNSwgMHgzRCwgMHg5NywgMHhBQywKLSAgICAweENELCAweDZGLCAweEFELCAweERCLCAweDRGLCAweDVBLCAweDJFLCAweDY0LCAweEI5LCAweDVELCAweERELCAweDhCLAotICAgIDB4NEEsIDB4MzUsIDB4NDQsIDB4RkUsIDB4M0QsIDB4QzYsIDB4NzcsIDB4N0EsIDB4QkYsIDB4REEsIDB4QUMsIDB4OUUsCi0gICAgMHhCMCwgMHhBMiwgMHhCOSwgMHg2QywgMHhBRiwgMHgwMiwgMHhERCwgMHhGMiwgMHg3MSwgMHgyQiwgMHhFRiwgMHhEMywKLSAgICAweDUxLCAweDBFLCAweDA3LCAweDExLCAweEJELCAweEVELCAweDM5LCAweDdGLCAweEQ5LCAweEI4LCAweEJELCAweEVFLAotICAgIDB4MzUsIDB4RTksIDB4NUMsIDB4NjcsIDB4NDIsIDB4REEsIDB4MDUsIDB4NkUsIDB4MzksIDB4Q0UsIDB4NTUsIDB4RkIsCi0gICAgMHgyNiwgMHhCNywgMHg5MCwgMHg0QiwgMHhEQSwgMHg5MSwgMHg0OCwgMHhGRCwgMHhERSwgMHhCMiwgMHhFQywgMHg4OCwKLSAgICAweDlBLCAweDQ2LCAweDFBLCAweDRDLCAweEQ0LCAweDA1LCAweDEyLCAweDg1LCAweDU3LCAweDM3LCAweDIyLCAweEQzLAotICAgIDB4MEUsIDB4NEYsIDB4NzksIDB4RTMsIDB4ODEsIDB4QTksIDB4MkIsIDB4NUYsIDB4RDcsIDB4NkQsIDB4QkQsIDB4MjEsCi0gICAgMHg5OCwgMHg2RiwgMHg3RCwgMHhGNSwgMHgzMiwgMHg3QSwgMHg2RSwgMHhGOCwgMHgyMCwgMHgwMSwgMHg1MCwgMHg5MCwKLSAgICAweDdBLCAweDg4LCAweDNFLCAweDBELCAweDU3LCAweEIxLCAweDU4LCAweDY1LCAweEU2LCAweDgyLCAweENFLCAweDA4LAotICAgIDB4NjksIDB4OEIsIDB4ODcsIDB4NjIsIDB4MzYsIDB4QjEsIDB4N0IsIDB4REUsIDB4NzQsIDB4QkQsIDB4RkUsIDB4MTAsCi0gICAgMHhCRSwgMHgyNiwgMHhBQiwgMHg3RSwgMHhCNywgMHg4RCwgMHhGNywgMHg4MywgMHgyRSwgMHgwRiwgMHhBRiwgMHg3RSwKLSAgICAweEJDLCAweDE3LCAweDMxLCAweEZGLCAweEIwLCAweDRGLCAweDdGLCAweDRCLCAweDEzLCAweDgzLCAweERGLCAweEVFLAotICAgIDB4MjMsIDB4RDMsIDB4RTcsIDB4QzgsIDB4QUYsIDB4NzUsIDB4QUIsIDB4RUEsIDB4QkQsIDB4N0QsIDB4RDIsIDB4OUQsCi0gICAgMHhFOSwgMHhDMSwgMHgxOCwgMHg4QiwgMHg3QywgMHg5RiwgMHg1MSwgMHhEQywgMHgzNywgMHhBMywgMHhEQiwgMHhGQywKLSAgICAweEQ0LCAweDZBLCAweDkxLCAweDQ0LCAweDdGLCAweDcyLCAweEM1LCAweEQ5LCAweEM4LCAweDM3LCAweDM4LCAweDYzLAotICAgIDB4MEQsIDB4NTksIDB4OEIsIDB4N0YsIDB4N0QsIDB4OTYsIDB4QzEsIDB4NUYsIDB4NEMsIDB4N0MsIDB4ODgsIDB4Q0IsCi0gICAgMHg2NSwgMHgwNywgMHgyQiwgMHgwRSwgMHgxRCwgMHgyNCwgMHhBQSwgMHgyMCwgMHgyRSwgMHg2QywgMHgzMywgMHhBQiwKLSAgICAweEVGLCAweDIzLCAweEU1LCAweEUzLCAweDZDLCAweEEzLCAweEE1LCAweDJELCAweDAxLCAweERGLCAweDI2LCAweDkyLAotICAgIDB4NTIsIDB4RjUsIDB4RTYsIDB4M0UsIDB4RTMsIDB4REQsIDB4QzYsIDB4RUQsIDB4NDIsIDB4MEYsIDB4NzEsIDB4N0IsCi0gICAgMHhEMSwgMHhGNCwgMHgwNiwgMHhGNiwgMHg4MiwgMHhENSwgMHgxMywgMHhCMywgMHg2MCwgMHgzMSwgMHgwOSwgMHg4OSwKLSAgICAweDYzLCAweDE1LCAweEQyLCAweENCLCAweEFBLCAweDc3LCAweEZELCAweEY0LCAweEVCLCAweEY0LCAweEVELCAweDJFLAotICAgIDB4RTIsIDB4QkEsIDB4MjcsIDB4MkUsIDB4NzQsIDB4RDIsIDB4OTEsIDB4N0YsIDB4MEYsIDB4REUsIDB4MjUsIDB4RkUsCi0gICAgMHg3OCwgMHgyMCwgMHgwNSwgMHgwQSwgMHg2QSwgMHhGRSwgMHg4OSwgMHgxNCwgMHgyMywgMHhGMywgMHhGNSwgMHgzQSwKLSAgICAweDFFLCAweEYzLCAweDIyLCAweENFLCAweDEyLCAweDgyLCAweDI0LCAweDExLCAweDA1LCAweDA0LCAweDcxLCAweDk5LAotICAgIDB4RTUsIDB4RjAsIDB4QTYsIDB4REIsIDB4N0IsIDB4RjUsIDB4OEYsIDB4RjksIDB4M0MsIDB4MDIsIDB4MEMsIDB4NDYsCi0gICAgMHhGRCwgMHhCNiwgMHhFQSwgMHgwNiwgMHgxMSwgMHhGNCwgMHgxRSwgMHg3QSwgMHgyMCwgMHg2QSwgMHg1NCwgMHhCQiwKLSAgICAweDRBLCAweDYwLCAweEIwLCAweDMwLCAweDI4LCAweDlBLCAweEYzLCAweDNCLCAweEU5LCAweEJELCAweEQ2LCAweDA0LAotICAgIDB4Q0EsIDB4M0EsIDB4MzMsIDB4MzcsIDB4NUYsIDB4QjcsIDB4QUQsIDB4RTcsIDB4OUMsIDB4RTIsIDB4OTUsIDB4MjEsCi0gICAgMHhGNywgMHhCNSwgMHhDNCwgMHhGMCwgMHhEMSwgMHg1MSwgMHgwOSwgMHg0NCwgMHgzRiwgMHgwNywgMHhGQywgMHg1RiwKLSAgICAweDM3LCAweEZELCAweDdELCAweDdFLCAweEQ1LCAweEY3LCAweEVCLCAweDY5LCAweEI5LCAweDU0LCAweDk4LCAweDVBLAotICAgIDB4MkEsIDB4NTYsIDB4RTMsIDB4QzAsIDB4MjEsIDB4NTcsIDB4RDEsIDB4RUIsIDB4NzUsIDB4MTUsIDB4RUQsIDB4QUMsCi0gICAgMHhBRiwgMHg1RCwgMHhGRiwgMHhDMiwgMHhGRSwgMHg0RSwgMHhGQiwgMHhCQSwgMHgxMywgMHhCOCwgMHg4NywgMHhGQSwKLSAgICAweDRFLCAweDVFLCAweDVDLCAweDI0LCAweDE1LCAweDVCLCAweDJCLCAweDJDLCAweDMyLCAweDY4LCAweDFGLCAweDMwLAotICAgIDB4NUYsIDB4QzEsIDB4RjcsIDB4RTcsIDB4RTEsIDB4OUMsIDB4MDAsIDB4QzEsIDB4OUMsIDB4QjEsIDB4QUIsIDB4RkEsCi0gICAgMHhGRiwgMHhDMSwgMHgxRSwgMHg3MiwgMHhBMSwgMHg0NiwgMHg5RSwgMHgyRSwgMHhDRCwgMHg3NiwgMHg5NiwgMHg0RiwKLSAgICAweDE0LCAweERDLCAweDY4LCAweEMxLCAweDEwLCAweDlGLCAweERGLCAweEVCLCAweDVBLCAweEJBLCAweDhELCAweDkxLAotICAgIDB4NEUsIDB4NzYsIDB4RTksIDB4M0EsIDB4NDMsIDB4MkQsIDB4ODgsIDB4RDIsIDB4ODEsIDB4MEMsIDB4RUMsIDB4NkYsCi0gICAgMHhCNywgMHhBNCwgMHg4QiwgMHg5NywgMHg0RiwgMHhDNCwgMHgxRSwgMHhGMywgMHgwRiwgMHhGNSwgMHg2NiwgMHg2NiwKLSAgICAweEJGLCAweDZDLCAweDNGLCAweEZCLCAweDZFLCAweDJCLCAweDQ4LCAweDZDLCAweDdCLCAweEQxLCAweDJFLCAweDY0LAotICAgIDB4RDEsIDB4MEIsIDB4NkUsIDB4NUIsIDB4MDUsIDB4MTYsIDB4REQsIDB4Q0IsIDB4MUIsIDB4REUsIDB4QTIsIDB4QjksCi0gICAgMHhBOCwgMHg5NCwgMHhENiwgMHg1QSwgMHg1QiwgMHhFMiwgMHhDOSwgMHhCQywgMHhENSwgMHhBQiwgMHg2NCwgMHg1QiwKLSAgICAweDBGLCAweDlBLCAweEZELCAweEM3LCAweDJFLCAweEI3LCAweEVGLCAweEFFLCAweEU5LCAweDFGLCAweDMyLCAweEQyLAotICAgIDB4Q0EsIDB4QTAsIDB4MzcsIDB4NjMsIDB4ODYsIDB4NzIsIDB4NDEsIDB4MDcsIDB4QkMsIDB4QUIsIDB4NkYsIDB4RkYsCi0gICAgMHhCNywgMHgxNiwgMHhBQSwgMHhBOSwgMHg1OCwgMHg5RSwgMHg0MywgMHg5QywgMHgyMiwgMHg4RCwgMHg0OCwgMHhDRSwKLSAgICAweEU1LCAweEVGLCAweEUwLCAweDdELCAweDQ3LCAweDg3LCAweDVBLCAweEE4LCAweDVCLCAweDA2LCAweEE5LCAweDQ3LAotICAgIDB4RjAsIDB4MjYsIDB4QjQsIDB4OTksIDB4RDgsIDB4QTMsIDB4NjQsIDB4RUQsIDB4NzMsIDB4QjMsIDB4OTYsIDB4QjQsCi0gICAgMHgyMSwgMHgxOSwgMHhBNSwgMHhDMSwgMHhEQywgMHg4OCwgMHgyRSwgMHhFRSwgMHhGMiwgMHg3NywgMHg5MSwgMHhFQywKLSAgICAweEZCLCAweEQ1LCAweEY5LCAweEY4LCAweDkwLCAweDQ3LCAweEFELCAweEY1LCAweEVCLCAweDk2LCAweDZELCAweEYxLAotICAgIDB4MUMsIDB4RTAsIDB4REMsIDB4NzQsIDB4MUMsIDB4RTYsIDB4MkUsIDB4RTEsIDB4NzYsIDB4OUQsIDB4RUUsIDB4RjQsCi0gICAgMHhFRiwgMHhBNSwgMHgzMSwgMHgwMywgMHg4NywgMHgwRSwgMHgyQywgMHg4NCwgMHhBNSwgMHhGMSwgMHgyMiwgMHhCRSwKLSAgICAweDQ4LCAweEE5LCAweENELCAweDA5LCAweDA3LCAweEMxLCAweEYwLCAweEQ0LCAweEU3LCAweDAzLCAweDgyLCAweDM5LAotICAgIDB4RTIsIDB4QTAsIDB4MEIsIDB4REUsIDB4QUMsIDB4MzcsIDB4QUMsIDB4NjIsIDB4OTcsIDB4OEUsIDB4NzksIDB4Q0UsCi0gICAgMHg1MiwgMHgyNCwgMHg3OCwgMHhGOSwgMHgxNywgMHhEMiwgMHhGMSwgMHg1RCwgMHgyRCwgMHhBMSwgMHhERiwgMHgxMiwKLSAgICAweDJDLCAweDgzLCAweEU1LCAweDFBLCAweDI4LCAweDlBLCAweDJELCAweEVELCAweDhBLCAweEJGLCAweEZDLCAweDQxLAotICAgIDB4QzMsIDB4RUIsIDB4MEUsIDB4OTEsIDB4REIsIDB4RjIsIDB4QTEsIDB4QzgsIDB4QTgsIDB4MDEsIDB4OEIsIDB4RjIsCi0gICAgMHhGMywgMHg1OSwgMHhCNywgMHhBNywgMHg2RiwgMHg4MCwgMHhGRiwgMHgwQiwgMHg0NiwgMHhFMSwgMHg2MywgMHhBNywKLSAgICAweDVGLCAweDZCLCAweEJFLCAweDMzLCAweDcxLCAweEJFLCAweDNBLCAweEFGLCAweEE5LCAweDUzLCAweDVELCAweDNCLAotICAgIDB4QjIsIDB4RjYsIDB4RUIsIDB4NDIsIDB4MUMsIDB4M0UsIDB4M0YsIDB4MUQsIDB4NkEsIDB4MzQsIDB4QUUsIDB4QjEsCi0gICAgMHgwNSwgMHhBMSwgMHgzMiwgMHg2QywgMHhCNSwgMHhFNCwgMHhEMywgMHhCQiwgMHhFOCwgMHgxMCwgMHgxNCwgMHg5RSwKLSAgICAweDY4LCAweDZBLCAweDI0LCAweDUxLCAweEE1LCAweDY2LCAweDY0LCAweENDLCAweEM0LCAweDJELCAweDk2LCAweEEyLAotICAgIDB4QzcsIDB4MkQsIDB4MUYsIDB4MEEsIDB4MEYsIDB4NkIsIDB4RDksIDB4QUQsIDB4QTMsIDB4MTEsIDB4OEYsIDB4MDAsCi0gICAgMHhBQSwgMHgwNiwgMHhDMiwgMHgxRSwgMHhGMywgMHhFOCwgMHg1QSwgMHgzNywgMHg0QywgMHhENiwgMHg0QiwgMHg2QiwKLSAgICAweDAxLCAweEM5LCAweEIwLCAweEI2LCAweEI5LCAweDkyLCAweEVELCAweDFELCAweDA4LCAweEIwLCAweDgwLCAweDA2LAotICAgIDB4MjAsIDB4RUEsIDB4RUUsIDB4RjksIDB4MUQsIDB4QTQsIDB4NTcsIDB4NzMsIDB4MkUsIDB4MUIsIDB4QTUsIDB4QUYsCi0gICAgMHhGNiwgMHhBRiwgMHhBRSwgMHgwNCwgMHg3QywgMHg0QywgMHg3RSwgMHhDOCwgMHhEQiwgMHhDMCwgMHhGQiwgMHgzNywKLSAgICAweEM4LCAweDdFLCAweEZFLCAweDQ3LCAweDBBLCAweDNDLCAweEZBLCAweDYxLCAweEU3LCAweEVCLCAweDFCLCAweEYzLAotICAgIDB4N0MsIDB4MzIsIDB4RTMsIDB4N0MsIDB4MzcsIDB4NjYsIDB4N0MsIDB4NTMsIDB4MDcsIDB4QzIsIDB4MzcsIDB4QTMsCi0gICAgMHhCRCwgMHhGNywgMHhGQSwgMHhFMywgMHg4QSwgMHg3NiwgMHhDQiwgMHg2QywgMHhDOCwgMHgxMywgMHhDNCwgMHg1MywKLSAgICAweDUzLCAweERCLCAweEFELCAweDM3LCAweDFBLCAweEVCLCAweEUwfTsKLQotVEVTVF9GKEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlclRlc3QsIFN1Y2Nlc3MpIHsKLSAgLy8gSW5pdGlhbGl6ZSBjb252ZXJ0ZXIuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IG91dHB1dDsKLSAgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyIGNvbnZlcnRlcjsKLQotICAvLyBQYXJzZSB0aGUgaGVhZGVycy4KLSAgRVhQRUNUX1RSVUUoY29udmVydGVyLlBhcnNlQ29uZmlndXJhdGlvbihrSGVhZGVyRGF0YU9rV2l0aEZpZWxkTGVuNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0hlYWRlckRhdGFPa1dpdGhGaWVsZExlbjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdmNfY29uZmlnXykpOwotICB1aW50MzJfdCBjb25maWdfc2l6ZSA9IGNvbnZlcnRlci5HZXRDb25maWdTaXplKGF2Y19jb25maWdfKTsKLSAgRVhQRUNUX0dUKGNvbmZpZ19zaXplLCAwVSk7Ci0KLSAgLy8gR28gb24gd2l0aCBjb252ZXJ0aW5nIHRoZSBoZWFkZXJzLgotICBvdXRwdXQucmVzZXQobmV3IHVpbnQ4X3RbY29uZmlnX3NpemVdKTsKLSAgRVhQRUNUX1RSVUUob3V0cHV0LmdldCgpICE9IE5VTEwpOwotICBFWFBFQ1RfVFJVRShjb252ZXJ0ZXIuQ29udmVydEFWQ0RlY29kZXJDb25maWdUb0J5dGVTdHJlYW0oCi0gICAgICBhdmNfY29uZmlnXywgb3V0cHV0LmdldCgpLCAmY29uZmlnX3NpemUpKTsKLQotICAvLyBDYWxjdWxhdGUgYnVmZmVyIHNpemUgZm9yIGFjdHVhbCBOQUwgdW5pdC4KLSAgdWludDMyX3Qgb3V0cHV0X3NpemUgPSBjb252ZXJ0ZXIuQ2FsY3VsYXRlTmVlZGVkT3V0cHV0QnVmZmVyU2l6ZSgKLSAgICAgIGtQYWNrZXREYXRhT2tXaXRoRmllbGRMZW40LCBzaXplb2Yoa1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQpLAotICAgICAgJmF2Y19jb25maWdfKTsKLSAgRVhQRUNUX0dUKG91dHB1dF9zaXplLCAwVSk7Ci0gIG91dHB1dC5yZXNldChuZXcgdWludDhfdFtvdXRwdXRfc2l6ZV0pOwotICBFWFBFQ1RfVFJVRShvdXRwdXQuZ2V0KCkgIT0gTlVMTCk7Ci0KLSAgdWludDMyX3Qgb3V0cHV0X3NpemVfbGVmdF9mb3JfbmFsX3VuaXQgPSBvdXRwdXRfc2l6ZTsKLSAgLy8gRG8gdGhlIGNvbnZlcnNpb24gZm9yIGFjdHVhbCBOQUwgdW5pdC4KLSAgRVhQRUNUX1RSVUUoY29udmVydGVyLkNvbnZlcnROYWxVbml0U3RyZWFtVG9CeXRlU3RyZWFtKAotICAgICAga1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQsIHNpemVvZihrUGFja2V0RGF0YU9rV2l0aEZpZWxkTGVuNCksCi0gICAgICAmYXZjX2NvbmZpZ18sIG91dHB1dC5nZXQoKSwgJm91dHB1dF9zaXplX2xlZnRfZm9yX25hbF91bml0KSk7Ci19Ci0KLVRFU1RfRihIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXJUZXN0LCBGYWlsdXJlSGVhZGVyQnVmZmVyT3ZlcmZsb3cpIHsKLSAgLy8gSW5pdGlhbGl6ZSBjb252ZXJ0ZXIKLSAgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyIGNvbnZlcnRlcjsKLQotICAvLyBTaW11bGF0ZSAxMCBzcHMgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQsCi0gIC8vIHdoaWNoIHdvdWxkIGV4dGVuZCBiZXlvbmQgdGhlIGJ1ZmZlci4KLSAgdWludDhfdCBjb3JydXB0ZWRfaGVhZGVyW3NpemVvZihrSGVhZGVyRGF0YU9rV2l0aEZpZWxkTGVuNCldOwotICBtZW1jcHkoY29ycnVwdGVkX2hlYWRlciwga0hlYWRlckRhdGFPa1dpdGhGaWVsZExlbjQsCi0gICAgICAgICAgICAgICBzaXplb2Yoa0hlYWRlckRhdGFPa1dpdGhGaWVsZExlbjQpKTsKLSAgLy8gNnRoIGJ5dGUsIDUgTFNCcyBjb250YWluIHRoZSBudW1iZXIgb2Ygc3BzJ3MuCi0gIGNvcnJ1cHRlZF9oZWFkZXJbNV0gPSBjb3JydXB0ZWRfaGVhZGVyWzVdIHwgMHhBOwotCi0gIC8vIFBhcnNlIHRoZSBoZWFkZXJzCi0gIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuUGFyc2VDb25maWd1cmF0aW9uKAotICAgICAgY29ycnVwdGVkX2hlYWRlciwgc2l6ZW9mKGNvcnJ1cHRlZF9oZWFkZXIpLCAmYXZjX2NvbmZpZ18pKTsKLX0KLQotVEVTVF9GKEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlclRlc3QsIEZhaWx1cmVOYWxVbml0QnJlYWthZ2UpIHsKLSAgLy8gSW5pdGlhbGl6ZSBjb252ZXJ0ZXIuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IG91dHB1dDsKLSAgSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyIGNvbnZlcnRlcjsKLQotICAvLyBQYXJzZSB0aGUgaGVhZGVycy4KLSAgRVhQRUNUX1RSVUUoY29udmVydGVyLlBhcnNlQ29uZmlndXJhdGlvbihrSGVhZGVyRGF0YU9rV2l0aEZpZWxkTGVuNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0hlYWRlckRhdGFPa1dpdGhGaWVsZExlbjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdmNfY29uZmlnXykpOwotICB1aW50MzJfdCBjb25maWdfc2l6ZSA9IGNvbnZlcnRlci5HZXRDb25maWdTaXplKGF2Y19jb25maWdfKTsKLSAgRVhQRUNUX0dUKGNvbmZpZ19zaXplLCAwVSk7Ci0KLSAgLy8gR28gb24gd2l0aCBjb252ZXJ0aW5nIHRoZSBoZWFkZXJzLgotICBvdXRwdXQucmVzZXQobmV3IHVpbnQ4X3RbY29uZmlnX3NpemVdKTsKLSAgRVhQRUNUX1RSVUUob3V0cHV0LmdldCgpICE9IE5VTEwpOwotICBFWFBFQ1RfVFJVRShjb252ZXJ0ZXIuQ29udmVydEFWQ0RlY29kZXJDb25maWdUb0J5dGVTdHJlYW0oCi0gICAgICBhdmNfY29uZmlnXywgb3V0cHV0LmdldCgpLCAmY29uZmlnX3NpemUpKTsKLQotICAvLyBTaW11bGF0ZSBOQUwgdW5pdCBicm9rZW4gaW4gbWlkZGxlIGJ5IHdyaXRpbmcgb25seSBzb21lIG9mIHRoZSBkYXRhLgotICB1aW50OF90IGNvcnJ1cHRlZF9uYWxfdW5pdFtzaXplb2Yoa1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQpIC0gMTAwXTsKLSAgbWVtY3B5KGNvcnJ1cHRlZF9uYWxfdW5pdCwga1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQsCi0gICAgICAgICAgICAgICBzaXplb2Yoa1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQpIC0gMTAwKTsKLQotICAvLyBDYWxjdWxhdGUgYnVmZmVyIHNpemUgZm9yIGFjdHVhbCBOQUwgdW5pdCwgc2hvdWxkIHJldHVybiAwIGJlY2F1c2Ugb2YKLSAgLy8gaW5jb21wbGV0ZSBpbnB1dCBidWZmZXIuCi0gIHVpbnQzMl90IG91dHB1dF9zaXplID0gY29udmVydGVyLkNhbGN1bGF0ZU5lZWRlZE91dHB1dEJ1ZmZlclNpemUoCi0gICAgICBjb3JydXB0ZWRfbmFsX3VuaXQsIHNpemVvZihjb3JydXB0ZWRfbmFsX3VuaXQpLCAmYXZjX2NvbmZpZ18pOwotICBFWFBFQ1RfRVEob3V0cHV0X3NpemUsIDBVKTsKLQotICAvLyBJZ25vcmUgdGhlIGVycm9yIGFuZCB0cnkgdG8gZ28gb24gd2l0aCBjb252ZXJzaW9uIHNpbXVsYXRpbmcgd3JvbmcgdXNhZ2UuCi0gIG91dHB1dF9zaXplID0gc2l6ZW9mKGtQYWNrZXREYXRhT2tXaXRoRmllbGRMZW40KTsKLSAgb3V0cHV0LnJlc2V0KG5ldyB1aW50OF90W291dHB1dF9zaXplXSk7Ci0gIEVYUEVDVF9UUlVFKG91dHB1dC5nZXQoKSAhPSBOVUxMKTsKLQotICB1aW50MzJfdCBvdXRwdXRfc2l6ZV9sZWZ0X2Zvcl9uYWxfdW5pdCA9IG91dHB1dF9zaXplOwotICAvLyBEbyB0aGUgY29udmVyc2lvbiBmb3IgYWN0dWFsIE5BTCB1bml0LCBleHBlY3RpbmcgZmFpbHVyZS4KLSAgRVhQRUNUX0ZBTFNFKGNvbnZlcnRlci5Db252ZXJ0TmFsVW5pdFN0cmVhbVRvQnl0ZVN0cmVhbSgKLSAgICAgIGNvcnJ1cHRlZF9uYWxfdW5pdCwgc2l6ZW9mKGNvcnJ1cHRlZF9uYWxfdW5pdCksICZhdmNfY29uZmlnXywKLSAgICAgIG91dHB1dC5nZXQoKSwgJm91dHB1dF9zaXplX2xlZnRfZm9yX25hbF91bml0KSk7Ci0gIEVYUEVDVF9FUShvdXRwdXRfc2l6ZV9sZWZ0X2Zvcl9uYWxfdW5pdCwgMFUpOwotfQotCi1URVNUX0YoSDI2NFRvQW5uZXhCQml0c3RyZWFtQ29udmVydGVyVGVzdCwgRmFpbHVyZVRvb1NtYWxsT3V0cHV0QnVmZmVyKSB7Ci0gIC8vIEluaXRpYWxpemUgY29udmVydGVyLgotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBvdXRwdXQ7Ci0gIEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlciBjb252ZXJ0ZXI7Ci0KLSAgLy8gUGFyc2UgdGhlIGhlYWRlcnMuCi0gIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5QYXJzZUNvbmZpZ3VyYXRpb24oa0hlYWRlckRhdGFPa1dpdGhGaWVsZExlbjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtIZWFkZXJEYXRhT2tXaXRoRmllbGRMZW40KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXZjX2NvbmZpZ18pKTsKLSAgdWludDMyX3QgY29uZmlnX3NpemUgPSBjb252ZXJ0ZXIuR2V0Q29uZmlnU2l6ZShhdmNfY29uZmlnXyk7Ci0gIEVYUEVDVF9HVChjb25maWdfc2l6ZSwgMFUpOwotICB1aW50MzJfdCByZWFsX2NvbmZpZ19zaXplID0gY29uZmlnX3NpemU7Ci0KLSAgLy8gR28gb24gd2l0aCBjb252ZXJ0aW5nIHRoZSBoZWFkZXJzIHdpdGggdG9vIHNtYWxsIGJ1ZmZlci4KLSAgY29uZmlnX3NpemUgLT0gMTA7Ci0gIG91dHB1dC5yZXNldChuZXcgdWludDhfdFtjb25maWdfc2l6ZV0pOwotICBFWFBFQ1RfVFJVRShvdXRwdXQuZ2V0KCkgIT0gTlVMTCk7Ci0gIEVYUEVDVF9GQUxTRShjb252ZXJ0ZXIuQ29udmVydEFWQ0RlY29kZXJDb25maWdUb0J5dGVTdHJlYW0oCi0gICAgICBhdmNfY29uZmlnXywgb3V0cHV0LmdldCgpLCAmY29uZmlnX3NpemUpKTsKLSAgRVhQRUNUX0VRKGNvbmZpZ19zaXplLCAwVSk7Ci0KLSAgLy8gU3RpbGwgdG9vIHNtYWxsIChidXQgb25seSAxIGJ5dGUgc2hvcnQpLgotICBjb25maWdfc2l6ZSA9IHJlYWxfY29uZmlnX3NpemUgLSAxOwotICBvdXRwdXQucmVzZXQobmV3IHVpbnQ4X3RbY29uZmlnX3NpemVdKTsKLSAgRVhQRUNUX1RSVUUob3V0cHV0LmdldCgpICE9IE5VTEwpOwotICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLkNvbnZlcnRBVkNEZWNvZGVyQ29uZmlnVG9CeXRlU3RyZWFtKAotICAgICAgYXZjX2NvbmZpZ18sIG91dHB1dC5nZXQoKSwgJmNvbmZpZ19zaXplKSk7Ci0gIEVYUEVDVF9FUShjb25maWdfc2l6ZSwgMFUpOwotCi0gIC8vIEZpbmFsbHksIHJldHJ5IHdpdGggdmFsaWQgYnVmZmVyLgotICBjb25maWdfc2l6ZSA9IHJlYWxfY29uZmlnX3NpemU7Ci0gIG91dHB1dC5yZXNldChuZXcgdWludDhfdFtjb25maWdfc2l6ZV0pOwotICBFWFBFQ1RfVFJVRShvdXRwdXQuZ2V0KCkgIT0gTlVMTCk7Ci0gIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5Db252ZXJ0QVZDRGVjb2RlckNvbmZpZ1RvQnl0ZVN0cmVhbSgKLSAgICAgIGF2Y19jb25maWdfLCBvdXRwdXQuZ2V0KCksICZjb25maWdfc2l6ZSkpOwotCi0gIC8vIENhbGN1bGF0ZSBidWZmZXIgc2l6ZSBmb3IgYWN0dWFsIE5BTCB1bml0LgotICB1aW50MzJfdCBvdXRwdXRfc2l6ZSA9IGNvbnZlcnRlci5DYWxjdWxhdGVOZWVkZWRPdXRwdXRCdWZmZXJTaXplKAotICAgICAga1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQsIHNpemVvZihrUGFja2V0RGF0YU9rV2l0aEZpZWxkTGVuNCksCi0gICAgICAmYXZjX2NvbmZpZ18pOwotICBFWFBFQ1RfR1Qob3V0cHV0X3NpemUsIDBVKTsKLSAgLy8gU2ltdWxhdGUgdG9vIHNtYWxsIG91dHB1dCBidWZmZXIuCi0gIG91dHB1dF9zaXplIC09IDE7Ci0gIG91dHB1dC5yZXNldChuZXcgdWludDhfdFtvdXRwdXRfc2l6ZV0pOwotICBFWFBFQ1RfVFJVRShvdXRwdXQuZ2V0KCkgIT0gTlVMTCk7Ci0KLSAgdWludDMyX3Qgb3V0cHV0X3NpemVfbGVmdF9mb3JfbmFsX3VuaXQgPSBvdXRwdXRfc2l6ZTsKLSAgLy8gRG8gdGhlIGNvbnZlcnNpb24gZm9yIGFjdHVhbCBOQUwgdW5pdCAoZXhwZWN0IGZhaWx1cmUpLgotICBFWFBFQ1RfRkFMU0UoY29udmVydGVyLkNvbnZlcnROYWxVbml0U3RyZWFtVG9CeXRlU3RyZWFtKAotICAgICAga1BhY2tldERhdGFPa1dpdGhGaWVsZExlbjQsIHNpemVvZihrUGFja2V0RGF0YU9rV2l0aEZpZWxkTGVuNCksCi0gICAgICAmYXZjX2NvbmZpZ18sIG91dHB1dC5nZXQoKSwgJm91dHB1dF9zaXplX2xlZnRfZm9yX25hbF91bml0KSk7Ci0gIEVYUEVDVF9FUShvdXRwdXRfc2l6ZV9sZWZ0X2Zvcl9uYWxfdW5pdCwgMFUpOwotfQotCi0vLyBHZW5lcmF0ZWQgZnJvbSBjcmFzaCBkdW1wIGluIGh0dHA6Ly9jcmJ1Zy5jb20vMjM0NDQ5IHVzaW5nIHh4ZCAtaSBbZmlsZV0uCi1zdGF0aWMgY29uc3QgdWludDhfdCBrQ29ycnVwdGVkUGFja2V0Q29uZmlndXJhdGlvbltdID0gewotICAgIDB4MDEsIDB4NjQsIDB4MDAsIDB4MTUsIDB4ZmYsIDB4ZTEsIDB4MDAsIDB4MTcsIDB4NjcsIDB4NjQsCi0gICAgMHgwMCwgMHgxNSwgMHhhYywgMHhjOCwgMHhjMSwgMHg0MSwgMHhmYiwgMHgwZSwgMHgxMCwgMHgwMCwKLSAgICAweDAwLCAweDNlLCAweDkwLCAweDAwLCAweDBlLCAweGE2LCAweDAwLCAweGYxLCAweDYyLCAweGQzLAotICAgIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4NjgsIDB4ZWEsIDB4YzAsIDB4YmMsIDB4YjIsIDB4MmN9OwotCi1zdGF0aWMgY29uc3QgdWludDhfdCBrQ29ycnVwdGVkUGFja2V0RGF0YVtdID0gewotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDEsIDB4OWYsIDB4NmUsIDB4YmMsIDB4ODUsIDB4M2YsCi0gICAgMHgwZiwgMHg4NywgMHg0NywgMHhhOCwgMHhkNywgMHg1YiwgMHhmYywgMHhiOCwgMHhmZCwgMHgzZiwKLSAgICAweDU3LCAweDBlLCAweGFjLCAweGY1LCAweDRjLCAweDAxLCAweDJlLCAweDU3fTsKLQotVEVTVF9GKEgyNjRUb0FubmV4QkJpdHN0cmVhbUNvbnZlcnRlclRlc3QsIENvcnJ1cHRlZFBhY2tldCkgewotICAvLyBJbml0aWFsaXplIGNvbnZlcnRlci4KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gb3V0cHV0OwotICBIMjY0VG9Bbm5leEJCaXRzdHJlYW1Db252ZXJ0ZXIgY29udmVydGVyOwotCi0gIC8vIFBhcnNlIHRoZSBoZWFkZXJzLgotICBFWFBFQ1RfVFJVRShjb252ZXJ0ZXIuUGFyc2VDb25maWd1cmF0aW9uKAotICAgICAga0NvcnJ1cHRlZFBhY2tldENvbmZpZ3VyYXRpb24sIHNpemVvZihrQ29ycnVwdGVkUGFja2V0Q29uZmlndXJhdGlvbiksCi0gICAgICAmYXZjX2NvbmZpZ18pKTsKLSAgdWludDMyX3QgY29uZmlnX3NpemUgPSBjb252ZXJ0ZXIuR2V0Q29uZmlnU2l6ZShhdmNfY29uZmlnXyk7Ci0gIEVYUEVDVF9HVChjb25maWdfc2l6ZSwgMFUpOwotCi0gIC8vIEdvIG9uIHdpdGggY29udmVydGluZyB0aGUgaGVhZGVycy4KLSAgb3V0cHV0LnJlc2V0KG5ldyB1aW50OF90W2NvbmZpZ19zaXplXSk7Ci0gIEVYUEVDVF9UUlVFKGNvbnZlcnRlci5Db252ZXJ0QVZDRGVjb2RlckNvbmZpZ1RvQnl0ZVN0cmVhbSgKLSAgICAgIGF2Y19jb25maWdfLCBvdXRwdXQuZ2V0KCksICZjb25maWdfc2l6ZSkpOwotCi0gIC8vIEV4cGVjdCBhbiBlcnJvciBoZXJlLgotICB1aW50MzJfdCBvdXRwdXRfc2l6ZSA9IGNvbnZlcnRlci5DYWxjdWxhdGVOZWVkZWRPdXRwdXRCdWZmZXJTaXplKAotICAgICAga0NvcnJ1cHRlZFBhY2tldERhdGEsIHNpemVvZihrQ29ycnVwdGVkUGFja2V0RGF0YSksICZhdmNfY29uZmlnXyk7Ci0gIEVYUEVDVF9FUShvdXRwdXRfc2l6ZSwgMFUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjVfcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NV9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YjVlNWYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NV9wYXJzZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RsX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0jZGVmaW5lIFJFQURfQklUU19PUl9SRVRVUk4obnVtX2JpdHMsIG91dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaW50IF9vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFicl8uUmVhZEJpdHMobnVtX2JpdHMsICZfb3V0KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBEVkxPRygxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgPDwgIkVycm9yIGluIHN0cmVhbTogdW5leHBlY3RlZCBFT1Mgd2hpbGUgdHJ5aW5nIHRvIHJlYWQgIiAjb3V0OyBcCi0gICAgICByZXR1cm4ga0ludmFsaWRTdHJlYW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKm91dCA9IF9vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVFJVRV9PUl9SRVRVUk4oYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERWTE9HKDEpIDw8ICJFcnJvciBpbiBzdHJlYW06IGludmFsaWQgdmFsdWUsIGV4cGVjdGVkICIgPDwgI2E7IFwKLSAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotSDI2NU5BTFU6OkgyNjVOQUxVKCkgeyBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KLQotSDI2NVBhcnNlcjo6SDI2NVBhcnNlcigpIHsgUmVzZXQoKTsgfQotCi1IMjY1UGFyc2VyOjp+SDI2NVBhcnNlcigpIHt9Ci0KLXZvaWQgSDI2NVBhcnNlcjo6UmVzZXQoKSB7Ci0gIHN0cmVhbV8gPSBOVUxMOwotICBieXRlc19sZWZ0XyA9IDA7Ci0gIGVuY3J5cHRlZF9yYW5nZXNfLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSDI2NVBhcnNlcjo6U2V0U3RyZWFtKGNvbnN0IHVpbnQ4X3QqIHN0cmVhbSwgb2ZmX3Qgc3RyZWFtX3NpemUpIHsKLSAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZXM7Ci0gIFNldEVuY3J5cHRlZFN0cmVhbShzdHJlYW0sIHN0cmVhbV9zaXplLCBzdWJzYW1wbGVzKTsKLX0KLQotdm9pZCBIMjY1UGFyc2VyOjpTZXRFbmNyeXB0ZWRTdHJlYW0oCi0gICAgY29uc3QgdWludDhfdCogc3RyZWFtLCBvZmZfdCBzdHJlYW1fc2l6ZSwKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpIHsKLSAgRENIRUNLKHN0cmVhbSk7Ci0gIERDSEVDS19HVChzdHJlYW1fc2l6ZSwgMCk7Ci0KLSAgc3RyZWFtXyA9IHN0cmVhbTsKLSAgYnl0ZXNfbGVmdF8gPSBzdHJlYW1fc2l6ZTsKLQotICBlbmNyeXB0ZWRfcmFuZ2VzXy5jbGVhcigpOwotICBjb25zdCB1aW50OF90KiBzdGFydCA9IHN0cmVhbTsKLSAgY29uc3QgdWludDhfdCogc3RyZWFtX2VuZCA9IHN0cmVhbV8gKyBieXRlc19sZWZ0XzsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJzYW1wbGVzLnNpemUoKSAmJiBzdGFydCA8IHN0cmVhbV9lbmQ7ICsraSkgewotICAgIHN0YXJ0ICs9IHN1YnNhbXBsZXNbaV0uY2xlYXJfYnl0ZXM7Ci0KLSAgICBjb25zdCB1aW50OF90KiBlbmQgPQotICAgICAgICBzdGQ6Om1pbihzdGFydCArIHN1YnNhbXBsZXNbaV0uY3lwaGVyX2J5dGVzLCBzdHJlYW1fZW5kKTsKLSAgICBlbmNyeXB0ZWRfcmFuZ2VzXy5BZGQoc3RhcnQsIGVuZCk7Ci0gICAgc3RhcnQgPSBlbmQ7Ci0gIH0KLX0KLQotYm9vbCBIMjY1UGFyc2VyOjpMb2NhdGVOQUxVKG9mZl90KiBuYWx1X3NpemUsIG9mZl90KiBzdGFydF9jb2RlX3NpemUpIHsKLSAgLy8gRmluZCB0aGUgc3RhcnQgY29kZSBvZiBuZXh0IE5BTFUuCi0gIG9mZl90IG5hbHVfc3RhcnRfb2ZmID0gMDsKLSAgb2ZmX3QgYW5uZXhiX3N0YXJ0X2NvZGVfc2l6ZSA9IDA7Ci0KLSAgaWYgKCFIMjY0UGFyc2VyOjpGaW5kU3RhcnRDb2RlSW5DbGVhclJhbmdlcygKLSAgICAgICAgICBzdHJlYW1fLCBieXRlc19sZWZ0XywgZW5jcnlwdGVkX3Jhbmdlc18sICZuYWx1X3N0YXJ0X29mZiwKLSAgICAgICAgICAmYW5uZXhiX3N0YXJ0X2NvZGVfc2l6ZSkpIHsKLSAgICBEVkxPRyg0KSA8PCAiQ291bGQgbm90IGZpbmQgc3RhcnQgY29kZSwgZW5kIG9mIHN0cmVhbT8iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE1vdmUgdGhlIHN0cmVhbSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBOQUxVIChwb2ludGluZyBhdCB0aGUgc3RhcnQgY29kZSkuCi0gIHN0cmVhbV8gKz0gbmFsdV9zdGFydF9vZmY7Ci0gIGJ5dGVzX2xlZnRfIC09IG5hbHVfc3RhcnRfb2ZmOwotCi0gIGNvbnN0IHVpbnQ4X3QqIG5hbHVfZGF0YSA9IHN0cmVhbV8gKyBhbm5leGJfc3RhcnRfY29kZV9zaXplOwotICBvZmZfdCBtYXhfbmFsdV9kYXRhX3NpemUgPSBieXRlc19sZWZ0XyAtIGFubmV4Yl9zdGFydF9jb2RlX3NpemU7Ci0gIGlmIChtYXhfbmFsdV9kYXRhX3NpemUgPD0gMCkgewotICAgIERWTE9HKDMpIDw8ICJFbmQgb2Ygc3RyZWFtIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBGaW5kIHRoZSBzdGFydCBjb2RlIG9mIG5leHQgTkFMVTsKLSAgLy8gaWYgc3VjY2Vzc2Z1bCwgfG5hbHVfc2l6ZV93aXRob3V0X3N0YXJ0X2NvZGV8IGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbQotICAvLyBhZnRlciBwcmV2aW91cyBzdGFydCBjb2RlIHRvIGJlZm9yZSB0aGlzIG9uZTsKLSAgLy8gaWYgbmV4dCBzdGFydCBjb2RlIGlzIG5vdCBmb3VuZCwgaXQgaXMgc3RpbGwgYSB2YWxpZCBOQUxVIHNpbmNlIHRoZXJlCi0gIC8vIGFyZSBzb21lIGJ5dGVzIGxlZnQgYWZ0ZXIgdGhlIGZpcnN0IHN0YXJ0IGNvZGU6IGFsbCB0aGUgcmVtYWluaW5nIGJ5dGVzCi0gIC8vIGJlbG9uZyB0byB0aGUgY3VycmVudCBOQUxVLgotICBvZmZfdCBuZXh0X3N0YXJ0X2NvZGVfc2l6ZSA9IDA7Ci0gIG9mZl90IG5hbHVfc2l6ZV93aXRob3V0X3N0YXJ0X2NvZGUgPSAwOwotICBpZiAoIUgyNjRQYXJzZXI6OkZpbmRTdGFydENvZGVJbkNsZWFyUmFuZ2VzKAotICAgICAgICAgIG5hbHVfZGF0YSwgbWF4X25hbHVfZGF0YV9zaXplLCBlbmNyeXB0ZWRfcmFuZ2VzXywKLSAgICAgICAgICAmbmFsdV9zaXplX3dpdGhvdXRfc3RhcnRfY29kZSwgJm5leHRfc3RhcnRfY29kZV9zaXplKSkgewotICAgIG5hbHVfc2l6ZV93aXRob3V0X3N0YXJ0X2NvZGUgPSBtYXhfbmFsdV9kYXRhX3NpemU7Ci0gIH0KLSAgKm5hbHVfc2l6ZSA9IG5hbHVfc2l6ZV93aXRob3V0X3N0YXJ0X2NvZGUgKyBhbm5leGJfc3RhcnRfY29kZV9zaXplOwotICAqc3RhcnRfY29kZV9zaXplID0gYW5uZXhiX3N0YXJ0X2NvZGVfc2l6ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUgyNjVQYXJzZXI6OlJlc3VsdCBIMjY1UGFyc2VyOjpBZHZhbmNlVG9OZXh0TkFMVShIMjY1TkFMVSogbmFsdSkgewotICBvZmZfdCBzdGFydF9jb2RlX3NpemU7Ci0gIG9mZl90IG5hbHVfc2l6ZV93aXRoX3N0YXJ0X2NvZGU7Ci0gIGlmICghTG9jYXRlTkFMVSgmbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZSwgJnN0YXJ0X2NvZGVfc2l6ZSkpIHsKLSAgICBEVkxPRyg0KSA8PCAiQ291bGQgbm90IGZpbmQgbmV4dCBOQUxVLCBieXRlcyBsZWZ0IGluIHN0cmVhbTogIgotICAgICAgICAgICAgIDw8IGJ5dGVzX2xlZnRfOwotICAgIHJldHVybiBrRU9TdHJlYW07Ci0gIH0KLQotICBuYWx1LT5kYXRhID0gc3RyZWFtXyArIHN0YXJ0X2NvZGVfc2l6ZTsKLSAgbmFsdS0+c2l6ZSA9IG5hbHVfc2l6ZV93aXRoX3N0YXJ0X2NvZGUgLSBzdGFydF9jb2RlX3NpemU7Ci0gIERWTE9HKDQpIDw8ICJOQUxVIGZvdW5kOiBzaXplPSIgPDwgbmFsdV9zaXplX3dpdGhfc3RhcnRfY29kZTsKLQotICAvLyBJbml0aWFsaXplIGJpdCByZWFkZXIgYXQgdGhlIHN0YXJ0IG9mIGZvdW5kIE5BTFUuCi0gIGlmICghYnJfLkluaXRpYWxpemUobmFsdS0+ZGF0YSwgbmFsdS0+c2l6ZSkpIHJldHVybiBrRU9TdHJlYW07Ci0KLSAgLy8gTW92ZSBwYXJzZXIgc3RhdGUgdG8gYWZ0ZXIgdGhpcyBOQUxVLCBzbyBuZXh0IHRpbWUgQWR2YW5jZVRvTmV4dE5BTFUKLSAgLy8gaXMgY2FsbGVkLCB3ZSB3aWxsIGVmZmVjdGl2ZWx5IGJlIHNraXBwaW5nIGl0OwotICAvLyBvdGhlciBwYXJzaW5nIGZ1bmN0aW9ucyB3aWxsIHVzZSB0aGUgcG9zaXRpb24gc2F2ZWQKLSAgLy8gaW4gYml0IHJlYWRlciBmb3IgcGFyc2luZywgc28gd2UgZG9uJ3QgaGF2ZSB0byByZW1lbWJlciBpdCBoZXJlLgotICBzdHJlYW1fICs9IG5hbHVfc2l6ZV93aXRoX3N0YXJ0X2NvZGU7Ci0gIGJ5dGVzX2xlZnRfIC09IG5hbHVfc2l6ZV93aXRoX3N0YXJ0X2NvZGU7Ci0KLSAgLy8gUmVhZCBOQUxVIGhlYWRlciwgc2tpcCB0aGUgZm9yYmlkZGVuX3plcm9fYml0LCBidXQgY2hlY2sgZm9yIGl0LgotICBpbnQgZGF0YTsKLSAgUkVBRF9CSVRTX09SX1JFVFVSTigxLCAmZGF0YSk7Ci0gIFRSVUVfT1JfUkVUVVJOKGRhdGEgPT0gMCk7Ci0KLSAgUkVBRF9CSVRTX09SX1JFVFVSTig2LCAmbmFsdS0+bmFsX3VuaXRfdHlwZSk7Ci0gIFJFQURfQklUU19PUl9SRVRVUk4oNiwgJm5hbHUtPm51aF9sYXllcl9pZCk7Ci0gIFJFQURfQklUU19PUl9SRVRVUk4oMywgJm5hbHUtPm51aF90ZW1wb3JhbF9pZF9wbHVzMSk7Ci0KLSAgRFZMT0coNCkgPDwgIk5BTFUgdHlwZTogIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KG5hbHUtPm5hbF91bml0X3R5cGUpCi0gICAgICAgICAgIDw8ICIgYXQ6ICIgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4obmFsdS0+ZGF0YSkKLSAgICAgICAgICAgPDwgIiBzaXplOiAiIDw8IG5hbHUtPnNpemU7Ci0KLSAgcmV0dXJuIGtPazsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY1X3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NV9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5ODFjOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY1X3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgYW4gSDI2NSBBbm5leC1CIHZpZGVvIHN0cmVhbSBwYXJzZXIuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfSDI2NV9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfSDI2NV9QQVJTRVJfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Jhbmdlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfYml0X3JlYWRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RydWN0IFN1YnNhbXBsZUVudHJ5OwotCi0vLyBGb3IgZXhwbGFuYXRpb25zIG9mIGVhY2ggc3RydWN0IGFuZCBpdHMgbWVtYmVycywgc2VlIEguMjY1IHNwZWNpZmljYXRpb24KLS8vIGF0IGh0dHA6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjUuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEgyNjVOQUxVIHsKLSAgSDI2NU5BTFUoKTsKLQotICAvLyBOQUwgVW5pdCB0eXBlcyBhcmUgdGFrZW4gZnJvbSBUYWJsZSA3LTEgb2YgSEVWQy9IMjY1IHN0YW5kYXJkCi0gIC8vIGh0dHA6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjUtMjAxNDEwLUkvZW4KLSAgZW51bSBUeXBlIHsKLSAgICBUUkFJTF9OID0gMCwKLSAgICBUUkFJTF9SID0gMSwKLSAgICBUU0FfTiA9IDIsCi0gICAgVFNBX1IgPSAzLAotICAgIFNUU0FfTiA9IDQsCi0gICAgU1RTQV9SID0gNSwKLSAgICBSQURMX04gPSA2LAotICAgIFJBRExfUiA9IDcsCi0gICAgUkFTTF9OID0gOCwKLSAgICBSQVNMX1IgPSA5LAotICAgIFJTVl9WQ0xfTjEwID0gMTAsCi0gICAgUlNWX1ZDTF9SMTEgPSAxMSwKLSAgICBSU1ZfVkNMX04xMiA9IDEyLAotICAgIFJTVl9WQ0xfUjEzID0gMTMsCi0gICAgUlNWX1ZDTF9OMTQgPSAxNCwKLSAgICBSU1ZfVkNMX1IxNSA9IDE1LAotICAgIEJMQV9XX0xQID0gMTYsCi0gICAgQkxBX1dfUkFETCA9IDE3LAotICAgIEJMQV9OX0xQID0gMTgsCi0gICAgSURSX1dfUkFETCA9IDE5LAotICAgIElEUl9OX0xQID0gMjAsCi0gICAgQ1JBX05VVCA9IDIxLAotICAgIFJTVl9JUkFQX1ZDTDIyID0gMjIsCi0gICAgUlNWX0lSQVBfVkNMMjMgPSAyMywKLSAgICBSU1ZfVkNMMjQgPSAyNCwKLSAgICBSU1ZfVkNMMjUgPSAyNSwKLSAgICBSU1ZfVkNMMjYgPSAyNiwKLSAgICBSU1ZfVkNMMjcgPSAyNywKLSAgICBSU1ZfVkNMMjggPSAyOCwKLSAgICBSU1ZfVkNMMjkgPSAyOSwKLSAgICBSU1ZfVkNMMzAgPSAzMCwKLSAgICBSU1ZfVkNMMzEgPSAzMSwKLSAgICBWUFNfTlVUID0gMzIsCi0gICAgU1BTX05VVCA9IDMzLAotICAgIFBQU19OVVQgPSAzNCwKLSAgICBBVURfTlVUID0gMzUsCi0gICAgRU9TX05VVCA9IDM2LAotICAgIEVPQl9OVVQgPSAzNywKLSAgICBGRF9OVVQgPSAzOCwKLSAgICBQUkVGSVhfU0VJX05VVCA9IDM5LAotICAgIFNVRkZJWF9TRUlfTlVUID0gNDAsCi0gICAgUlNWX05WQ0w0MSA9IDQxLAotICAgIFJTVl9OVkNMNDIgPSA0MiwKLSAgICBSU1ZfTlZDTDQzID0gNDMsCi0gICAgUlNWX05WQ0w0NCA9IDQ0LAotICAgIFJTVl9OVkNMNDUgPSA0NSwKLSAgICBSU1ZfTlZDTDQ2ID0gNDYsCi0gICAgUlNWX05WQ0w0NyA9IDQ3LAotICB9OwotCi0gIC8vIEFmdGVyICh3aXRob3V0KSBzdGFydCBjb2RlOyB3ZSBkb24ndCBvd24gdGhlIHVuZGVybHlpbmcgbWVtb3J5Ci0gIC8vIGFuZCBhIHNoYWxsb3cgY29weSBzaG91bGQgYmUgbWFkZSB3aGVuIGNvcHlpbmcgdGhpcyBzdHJ1Y3QuCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGE7Ci0gIG9mZl90IHNpemU7ICAvLyBGcm9tIGFmdGVyIHN0YXJ0IGNvZGUgdG8gc3RhcnQgY29kZSBvZiBuZXh0IE5BTFUgKG9yIEVPUykuCi0KLSAgaW50IG5hbF91bml0X3R5cGU7Ci0gIGludCBudWhfbGF5ZXJfaWQ7Ci0gIGludCBudWhfdGVtcG9yYWxfaWRfcGx1czE7Ci19OwotCi0vLyBDbGFzcyB0byBwYXJzZSBhbiBBbm5leC1CIEguMjY1IHN0cmVhbS4KLWNsYXNzIE1FRElBX0VYUE9SVCBIMjY1UGFyc2VyIHsKLSBwdWJsaWM6Ci0gIGVudW0gUmVzdWx0IHsKLSAgICBrT2ssCi0gICAga0ludmFsaWRTdHJlYW0sICAgICAgLy8gZXJyb3IgaW4gc3RyZWFtCi0gICAga1Vuc3VwcG9ydGVkU3RyZWFtLCAgLy8gc3RyZWFtIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHBhcnNlcgotICAgIGtFT1N0cmVhbSwgICAgICAgICAgIC8vIGVuZCBvZiBzdHJlYW0KLSAgfTsKLQotICBIMjY1UGFyc2VyKCk7Ci0gIH5IMjY1UGFyc2VyKCk7Ci0KLSAgdm9pZCBSZXNldCgpOwotICAvLyBTZXQgY3VycmVudCBzdHJlYW0gcG9pbnRlciB0byB8c3RyZWFtfCBvZiB8c3RyZWFtX3NpemV8IGluIGJ5dGVzLAotICAvLyB8c3RyZWFtfCBvd25lZCBieSBjYWxsZXIuCi0gIC8vIHxzdWJzYW1wbGVzfCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHBhcnRzIG9mIHxzdHJlYW18IGFyZQotICAvLyBlbmNyeXB0ZWQuCi0gIHZvaWQgU2V0U3RyZWFtKGNvbnN0IHVpbnQ4X3QqIHN0cmVhbSwgb2ZmX3Qgc3RyZWFtX3NpemUpOwotICB2b2lkIFNldEVuY3J5cHRlZFN0cmVhbShjb25zdCB1aW50OF90KiBzdHJlYW0sIG9mZl90IHN0cmVhbV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpOwotCi0gIC8vIFJlYWQgdGhlIHN0cmVhbSB0byBmaW5kIHRoZSBuZXh0IE5BTFUsIGlkZW50aWZ5IGl0IGFuZCByZXR1cm4KLSAgLy8gdGhhdCBpbmZvcm1hdGlvbiBpbiB8Km5hbHV8LiBUaGlzIGFkdmFuY2VzIHRoZSBzdHJlYW0gdG8gdGhlIGJlZ2lubmluZwotICAvLyBvZiB0aGlzIE5BTFUsIGJ1dCBub3QgcGFzdCBpdCwgc28gc3Vic2VxdWVudCBjYWxscyB0byBOQUxVLXNwZWNpZmljCi0gIC8vIHBhcnNpbmcgZnVuY3Rpb25zIChQYXJzZVNQUywgZXRjLikgIHdpbGwgcGFyc2UgdGhpcyBOQUxVLgotICAvLyBJZiB0aGUgY2FsbGVyIHdpc2hlcyB0byBza2lwIHRoZSBjdXJyZW50IE5BTFUsIGl0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24KLSAgLy8gYWdhaW4sIGluc3RlYWQgb2YgYW55IE5BTFUtdHlwZSBzcGVjaWZpYyBwYXJzZSBmdW5jdGlvbnMgYmVsb3cuCi0gIFJlc3VsdCBBZHZhbmNlVG9OZXh0TkFMVShIMjY1TkFMVSogbmFsdSk7Ci0KLSBwcml2YXRlOgotICAvLyBNb3ZlIHRoZSBzdHJlYW0gcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IE5BTFUsCi0gIC8vIGkuZS4gcG9pbnRpbmcgYXQgdGhlIG5leHQgc3RhcnQgY29kZS4KLSAgLy8gUmV0dXJuIHRydWUgaWYgYSBOQUxVIGhhcyBiZWVuIGZvdW5kLgotICAvLyBJZiBhIE5BTFUgaXMgZm91bmQ6Ci0gIC8vIC0gaXRzIHNpemUgaW4gYnl0ZXMgaXMgcmV0dXJuZWQgaW4gfCpuYWx1X3NpemV8IGFuZCBpbmNsdWRlcwotICAvLyAgIHRoZSBzdGFydCBjb2RlIGFzIHdlbGwgYXMgdGhlIHRyYWlsaW5nIHplcm8gYml0cy4KLSAgLy8gLSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgc3RhcnQgY29kZSBpcyByZXR1cm5lZCBpbiB8KnN0YXJ0X2NvZGVfc2l6ZXwuCi0gIGJvb2wgTG9jYXRlTkFMVShvZmZfdCogbmFsdV9zaXplLCBvZmZfdCogc3RhcnRfY29kZV9zaXplKTsKLQotICAvLyBQb2ludGVyIHRvIHRoZSBjdXJyZW50IE5BTFUgaW4gdGhlIHN0cmVhbS4KLSAgY29uc3QgdWludDhfdCogc3RyZWFtXzsKLQotICAvLyBCeXRlcyBsZWZ0IGluIHRoZSBzdHJlYW0gYWZ0ZXIgdGhlIGN1cnJlbnQgTkFMVS4KLSAgb2ZmX3QgYnl0ZXNfbGVmdF87Ci0KLSAgSDI2NEJpdFJlYWRlciBicl87Ci0KLSAgLy8gUmFuZ2VzIG9mIGVuY3J5cHRlZCBieXRlcyBpbiB0aGUgYnVmZmVyIHBhc3NlZCB0bwotICAvLyBTZXRFbmNyeXB0ZWRTdHJlYW0oKS4KLSAgUmFuZ2VzPGNvbnN0IHVpbnQ4X3QqPiBlbmNyeXB0ZWRfcmFuZ2VzXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSDI2NVBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19IMjY1X1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NV9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY1X3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZhODQ0NS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY1X3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjVfcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2ZpbGVzL21lbW9yeV9tYXBwZWRfZmlsZS5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVEVTVChIMjY1UGFyc2VyVGVzdCwgUmF3SGV2Y1N0cmVhbUZpbGVQYXJzaW5nKSB7Ci0gIGJhc2U6OkZpbGVQYXRoIGZpbGVfcGF0aCA9IEdldFRlc3REYXRhRmlsZVBhdGgoImJlYXIuaGV2YyIpOwotICAvLyBOdW1iZXIgb2YgTkFMVXMgaW4gdGhlIHRlc3Qgc3RyZWFtIHRvIGJlIHBhcnNlZC4KLSAgY29uc3QgaW50IG51bV9uYWx1cyA9IDM1OwotCi0gIGJhc2U6Ok1lbW9yeU1hcHBlZEZpbGUgc3RyZWFtOwotICBBU1NFUlRfVFJVRShzdHJlYW0uSW5pdGlhbGl6ZShmaWxlX3BhdGgpKQotICAgICAgPDwgIkNvdWxkbid0IG9wZW4gc3RyZWFtIGZpbGU6ICIgPDwgZmlsZV9wYXRoLk1heWJlQXNBU0NJSSgpOwotCi0gIEgyNjVQYXJzZXIgcGFyc2VyOwotICBwYXJzZXIuU2V0U3RyZWFtKHN0cmVhbS5kYXRhKCksIHN0cmVhbS5sZW5ndGgoKSk7Ci0KLSAgLy8gUGFyc2UgdW50aWwgdGhlIGVuZCBvZiBzdHJlYW0vdW5zdXBwb3J0ZWQgc3RyZWFtL2Vycm9yIGluIHN0cmVhbSBpcyBmb3VuZC4KLSAgaW50IG51bV9wYXJzZWRfbmFsdXMgPSAwOwotICB3aGlsZSAodHJ1ZSkgewotICAgIEgyNjVOQUxVIG5hbHU7Ci0gICAgSDI2NVBhcnNlcjo6UmVzdWx0IHJlcyA9IHBhcnNlci5BZHZhbmNlVG9OZXh0TkFMVSgmbmFsdSk7Ci0gICAgaWYgKHJlcyA9PSBIMjY1UGFyc2VyOjprRU9TdHJlYW0pIHsKLSAgICAgIERWTE9HKDEpIDw8ICJOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHBhcnNlZCBOQUxVcyBiZWZvcmUgRU9TOiAiCi0gICAgICAgICAgICAgICA8PCBudW1fcGFyc2VkX25hbHVzOwotICAgICAgQVNTRVJUX0VRKG51bV9uYWx1cywgbnVtX3BhcnNlZF9uYWx1cyk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVF9FUShyZXMsIEgyNjVQYXJzZXI6OmtPayk7Ci0KLSAgICArK251bV9wYXJzZWRfbmFsdXM7Ci0gICAgRFZMT0coNCkgPDwgIkZvdW5kIE5BTFUgIiA8PCBuYWx1Lm5hbF91bml0X3R5cGU7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc0NDY4OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zeXNfYnl0ZW9yZGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXZvaWQgSXZmRmlsZUhlYWRlcjo6Qnl0ZVN3YXAoKSB7Ci0gIHZlcnNpb24gPSBiYXNlOjpCeXRlU3dhcFRvTEUxNih2ZXJzaW9uKTsKLSAgaGVhZGVyX3NpemUgPSBiYXNlOjpCeXRlU3dhcFRvTEUxNihoZWFkZXJfc2l6ZSk7Ci0gIGZvdXJjYyA9IGJhc2U6OkJ5dGVTd2FwVG9MRTMyKGZvdXJjYyk7Ci0gIHdpZHRoID0gYmFzZTo6Qnl0ZVN3YXBUb0xFMTYod2lkdGgpOwotICBoZWlnaHQgPSBiYXNlOjpCeXRlU3dhcFRvTEUxNihoZWlnaHQpOwotICB0aW1lYmFzZV9kZW51bSA9IGJhc2U6OkJ5dGVTd2FwVG9MRTMyKHRpbWViYXNlX2RlbnVtKTsKLSAgdGltZWJhc2VfbnVtID0gYmFzZTo6Qnl0ZVN3YXBUb0xFMzIodGltZWJhc2VfbnVtKTsKLSAgbnVtX2ZyYW1lcyA9IGJhc2U6OkJ5dGVTd2FwVG9MRTMyKG51bV9mcmFtZXMpOwotICB1bnVzZWQgPSBiYXNlOjpCeXRlU3dhcFRvTEUzMih1bnVzZWQpOwotfQotCi12b2lkIEl2ZkZyYW1lSGVhZGVyOjpCeXRlU3dhcCgpIHsKLSAgZnJhbWVfc2l6ZSA9IGJhc2U6OkJ5dGVTd2FwVG9MRTMyKGZyYW1lX3NpemUpOwotICB0aW1lc3RhbXAgPSBiYXNlOjpCeXRlU3dhcFRvTEU2NCh0aW1lc3RhbXApOwotfQotCi1JdmZQYXJzZXI6Okl2ZlBhcnNlcigpIDogcHRyXyhOVUxMKSwgZW5kXyhOVUxMKSB7fQotCi1ib29sIEl2ZlBhcnNlcjo6SW5pdGlhbGl6ZShjb25zdCB1aW50OF90KiBzdHJlYW0sIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgSXZmRmlsZUhlYWRlciogZmlsZV9oZWFkZXIpIHsKLSAgRENIRUNLKHN0cmVhbSk7Ci0gIERDSEVDSyhmaWxlX2hlYWRlcik7Ci0gIHB0cl8gPSBzdHJlYW07Ci0gIGVuZF8gPSBzdHJlYW0gKyBzaXplOwotCi0gIGlmIChzaXplIDwgc2l6ZW9mKEl2ZkZpbGVIZWFkZXIpKSB7Ci0gICAgRExPRyhFUlJPUikgPDwgIkVPRiBiZWZvcmUgZmlsZSBoZWFkZXIiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIG1lbWNweShmaWxlX2hlYWRlciwgcHRyXywgc2l6ZW9mKEl2ZkZpbGVIZWFkZXIpKTsKLSAgZmlsZV9oZWFkZXItPkJ5dGVTd2FwKCk7Ci0KLSAgaWYgKG1lbWNtcChmaWxlX2hlYWRlci0+c2lnbmF0dXJlLCBrSXZmSGVhZGVyU2lnbmF0dXJlLAotICAgICAgICAgICAgIHNpemVvZihmaWxlX2hlYWRlci0+c2lnbmF0dXJlKSkgIT0gMCkgewotICAgIERMT0coRVJST1IpIDw8ICJJVkYgc2lnbmF0dXJlIG1pc21hdGNoIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgRExPR19JRihXQVJOSU5HLCBmaWxlX2hlYWRlci0+dmVyc2lvbiAhPSAwKQotICAgICAgPDwgIklWRiB2ZXJzaW9uIHVua25vd246ICIgPDwgZmlsZV9oZWFkZXItPnZlcnNpb24KLSAgICAgIDw8ICIsIHRoZSBwYXJzZXIgbWF5IG5vdCBiZSBhYmxlIHRvIHBhcnNlIGNvcnJlY3RseSI7Ci0gIGlmIChmaWxlX2hlYWRlci0+aGVhZGVyX3NpemUgIT0gc2l6ZW9mKEl2ZkZpbGVIZWFkZXIpKSB7Ci0gICAgRExPRyhFUlJPUikgPDwgIklWRiBmaWxlIGhlYWRlciBzaXplIG1pc21hdGNoIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdHJfICs9IHNpemVvZihJdmZGaWxlSGVhZGVyKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJdmZQYXJzZXI6OlBhcnNlTmV4dEZyYW1lKEl2ZkZyYW1lSGVhZGVyKiBmcmFtZV9oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCoqIHBheWxvYWQpIHsKLSAgRENIRUNLKHB0cl8pOwotICBEQ0hFQ0socGF5bG9hZCk7Ci0KLSAgaWYgKGVuZF8gPCBwdHJfICsgc2l6ZW9mKEl2ZkZyYW1lSGVhZGVyKSkgewotICAgIERMT0dfSUYoRVJST1IsIHB0cl8gIT0gZW5kXykgPDwgIkluY29tcGxldGUgZnJhbWUgaGVhZGVyIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBtZW1jcHkoZnJhbWVfaGVhZGVyLCBwdHJfLCBzaXplb2YoSXZmRnJhbWVIZWFkZXIpKTsKLSAgZnJhbWVfaGVhZGVyLT5CeXRlU3dhcCgpOwotICBwdHJfICs9IHNpemVvZihJdmZGcmFtZUhlYWRlcik7Ci0KLSAgaWYgKGVuZF8gPCBwdHJfICsgZnJhbWVfaGVhZGVyLT5mcmFtZV9zaXplKSB7Ci0gICAgRExPRyhFUlJPUikgPDwgIk5vdCBlbm91Z2ggZnJhbWUgZGF0YSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgKnBheWxvYWQgPSBwdHJfOwotICBwdHJfICs9IGZyYW1lX2hlYWRlci0+ZnJhbWVfc2l6ZTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwMDU0YzcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX0lWRl9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfSVZGX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgY2hhciBrSXZmSGVhZGVyU2lnbmF0dXJlW10gPSAiREtJRiI7Ci0KLSNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IE1FRElBX0VYUE9SVCBJdmZGaWxlSGVhZGVyIHsKLSAgLy8gQnl0ZSBzd2FwIGludGVnZXIgZmllbGRzIGJldHdlZW4gbmF0aXZlIGFuZCAob24gZGlzaykgbGl0dGxlIGVuZGlhbi4KLSAgdm9pZCBCeXRlU3dhcCgpOwotCi0gIGNoYXIgc2lnbmF0dXJlWzRdOyAgICAgICAgLy8gc2lnbmF0dXJlOiAnREtJRicKLSAgdWludDE2X3QgdmVyc2lvbjsgICAgICAgICAvLyB2ZXJzaW9uIChzaG91bGQgYmUgMCkKLSAgdWludDE2X3QgaGVhZGVyX3NpemU7ICAgICAvLyBzaXplIG9mIGhlYWRlciBpbiBieXRlcwotICB1aW50MzJfdCBmb3VyY2M7ICAgICAgICAgIC8vIGNvZGVjIEZvdXJDQyAoZS5nLiwgJ1ZQODAnKQotICB1aW50MTZfdCB3aWR0aDsgICAgICAgICAgIC8vIHdpZHRoIGluIHBpeGVscwotICB1aW50MTZfdCBoZWlnaHQ7ICAgICAgICAgIC8vIGhlaWdodCBpbiBwaXhlbHMKLSAgdWludDMyX3QgdGltZWJhc2VfZGVudW07ICAvLyB0aW1lYmFzZSBkZW51bWVyYXRvcgotICB1aW50MzJfdCB0aW1lYmFzZV9udW07ICAgIC8vIHRpbWViYXNlIG51bWVyYXRvci4gRm9yIGV4YW1wbGUsIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZWJhc2VfZGVudW0gaXMgMzAgYW5kIHRpbWViYXNlX251bSBpcyAyLCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bml0IG9mIEl2ZkZyYW1lSGVhZGVyLnRpbWVzdGFtcCBpcyAyLzMwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kcy4KLSAgdWludDMyX3QgbnVtX2ZyYW1lczsgICAgICAvLyBudW1iZXIgb2YgZnJhbWVzIGluIGZpbGUKLSAgdWludDMyX3QgdW51c2VkOyAgICAgICAgICAvLyB1bnVzZWQKLX07Ci1zdGF0aWNfYXNzZXJ0KAotICAgIHNpemVvZihJdmZGaWxlSGVhZGVyKSA9PSAzMiwKLSAgICAic2l6ZW9mKEl2ZkZpbGVIZWFkZXIpIG11c3QgYmUgZml4ZWQgc2luY2UgaXQgd2lsbCBiZSB1c2VkIHdpdGggZmlsZSBJTyIpOwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIEl2ZkZyYW1lSGVhZGVyIHsKLSAgLy8gQnl0ZSBzd2FwIGludGVnZXIgZmllbGRzIGJldHdlZW4gbmF0aXZlIGFuZCAob24gZGlzaykgbGl0dGxlIGVuZGlhbi4KLSAgdm9pZCBCeXRlU3dhcCgpOwotCi0gIHVpbnQzMl90IGZyYW1lX3NpemU7ICAvLyBTaXplIG9mIGZyYW1lIGluIGJ5dGVzIChub3QgaW5jbHVkaW5nIHRoZSBoZWFkZXIpCi0gIHVpbnQ2NF90IHRpbWVzdGFtcDsgICAvLyA2NC1iaXQgcHJlc2VudGF0aW9uIHRpbWVzdGFtcCBpbiB1bml0IHRpbWViYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVmaW5lZCBpbiBJdmZGaWxlSGVhZGVyLgotfTsKLXN0YXRpY19hc3NlcnQoCi0gICAgc2l6ZW9mKEl2ZkZyYW1lSGVhZGVyKSA9PSAxMiwKLSAgICAic2l6ZW9mKEl2ZkZyYW1lSGVhZGVyKSBtdXN0IGJlIGZpeGVkIHNpbmNlIGl0IHdpbGwgYmUgdXNlZCB3aXRoIGZpbGUgSU8iKTsKLSNwcmFnbWEgcGFjayhwb3ApCi0KLS8vIElWRiBpcyBhIHNpbXBsZSBjb250YWluZXIgZm9ybWF0IGZvciB2aWRlbyBmcmFtZS4gSXQgaXMgdXNlZCBieSBsaWJ2cHggdG8KLS8vIHRyYW5zcG9ydCBWUDggYW5kIFZQOSBiaXRzdHJlYW0uCi1jbGFzcyBNRURJQV9FWFBPUlQgSXZmUGFyc2VyIHsKLSBwdWJsaWM6Ci0gIEl2ZlBhcnNlcigpOwotCi0gIC8vIEluaXRpYWxpemVzIHRoZSBwYXJzZXIgZm9yIElWRiB8c3RyZWFtfCB3aXRoIHNpemUgfHNpemV8IGFuZCBwYXJzZXMgdGhlCi0gIC8vIGZpbGUgaGVhZGVyLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLSAgYm9vbCBJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIHN0cmVhbSwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICBJdmZGaWxlSGVhZGVyKiBmaWxlX2hlYWRlcik7Ci0KLSAgLy8gUGFyc2VzIHRoZSBuZXh0IGZyYW1lLiBSZXR1cm5zIHRydWUgaWYgdGhlIG5leHQgZnJhbWUgaXMgcGFyc2VkIHdpdGhvdXQKLSAgLy8gZXJyb3IuIHxmcmFtZV9oZWFkZXJ8IHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIGZyYW1lIGhlYWRlciBhbmQgfHBheWxvYWR8Ci0gIC8vIHdpbGwgcG9pbnQgdG8gZnJhbWUgcGF5bG9hZCAoaW5zaWRlIHRoZSB8c3RyZWFtfCBidWZmZXIgZ2l2ZW4gdG8KLSAgLy8gSW5pdGlhbGl6ZS4pCi0gIGJvb2wgUGFyc2VOZXh0RnJhbWUoSXZmRnJhbWVIZWFkZXIqIGZyYW1lX2hlYWRlciwgY29uc3QgdWludDhfdCoqIHBheWxvYWQpOwotCi0gcHJpdmF0ZToKLSAgYm9vbCBQYXJzZUZpbGVIZWFkZXIoSXZmRmlsZUhlYWRlciogZmlsZV9oZWFkZXIpOwotCi0gIC8vIEN1cnJlbnQgcmVhZGluZyBwb3NpdGlvbiBvZiBpbnB1dCBzdHJlYW0uCi0gIGNvbnN0IHVpbnQ4X3QqIHB0cl87Ci0KLSAgLy8gVGhlIGVuZCBwb3NpdGlvbiBvZiBpbnB1dCBzdHJlYW0uCi0gIGNvbnN0IHVpbnQ4X3QqIGVuZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEl2ZlBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19JVkZfUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRhYjliYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9pdmZfcGFyc2VyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9maWxlcy9tZW1vcnlfbWFwcGVkX2ZpbGUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1URVNUKEl2ZlBhcnNlclRlc3QsIFN0cmVhbUZpbGVQYXJzaW5nKSB7Ci0gIGJhc2U6OkZpbGVQYXRoIGZpbGVfcGF0aCA9IEdldFRlc3REYXRhRmlsZVBhdGgoInRlc3QtMjVmcHMudnA4Iik7Ci0KLSAgYmFzZTo6TWVtb3J5TWFwcGVkRmlsZSBzdHJlYW07Ci0gIEFTU0VSVF9UUlVFKHN0cmVhbS5Jbml0aWFsaXplKGZpbGVfcGF0aCkpCi0gICAgICA8PCAiQ291bGRuJ3Qgb3BlbiBzdHJlYW0gZmlsZTogIiA8PCBmaWxlX3BhdGguTWF5YmVBc0FTQ0lJKCk7Ci0KLSAgSXZmUGFyc2VyIHBhcnNlcjsKLSAgSXZmRmlsZUhlYWRlciBmaWxlX2hlYWRlciA9IHt9OwotCi0gIEVYUEVDVF9UUlVFKHBhcnNlci5Jbml0aWFsaXplKHN0cmVhbS5kYXRhKCksIHN0cmVhbS5sZW5ndGgoKSwgJmZpbGVfaGVhZGVyKSk7Ci0KLSAgLy8gQ2hlY2sgZmlsZSBoZWFkZXIgZmllbGRzLgotICBFWFBFQ1RfRVEoMCwgbWVtY21wKGZpbGVfaGVhZGVyLnNpZ25hdHVyZSwga0l2ZkhlYWRlclNpZ25hdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZmlsZV9oZWFkZXIuc2lnbmF0dXJlKSkpOwotICBFWFBFQ1RfRVEoMCwgZmlsZV9oZWFkZXIudmVyc2lvbik7Ci0gIEVYUEVDVF9FUShzaXplb2YoSXZmRmlsZUhlYWRlciksIGZpbGVfaGVhZGVyLmhlYWRlcl9zaXplKTsKLSAgRVhQRUNUX0VRKDB4MzAzODUwNTZ1LCBmaWxlX2hlYWRlci5mb3VyY2MpOyAgLy8gVlA4MAotICBFWFBFQ1RfRVEoMzIwdSwgZmlsZV9oZWFkZXIud2lkdGgpOwotICBFWFBFQ1RfRVEoMjQwdSwgZmlsZV9oZWFkZXIuaGVpZ2h0KTsKLSAgRVhQRUNUX0VRKDUwdSwgZmlsZV9oZWFkZXIudGltZWJhc2VfZGVudW0pOwotICBFWFBFQ1RfRVEoMnUsIGZpbGVfaGVhZGVyLnRpbWViYXNlX251bSk7Ci0gIEVYUEVDVF9FUSgyNTB1LCBmaWxlX2hlYWRlci5udW1fZnJhbWVzKTsKLQotICBJdmZGcmFtZUhlYWRlciBmcmFtZV9oZWFkZXI7Ci0gIHNpemVfdCBudW1fcGFyc2VkX2ZyYW1lcyA9IDA7Ci0gIGNvbnN0IHVpbnQ4X3QqIHBheWxvYWQgPSBOVUxMOwotICB3aGlsZSAocGFyc2VyLlBhcnNlTmV4dEZyYW1lKCZmcmFtZV9oZWFkZXIsICZwYXlsb2FkKSkgewotICAgICsrbnVtX3BhcnNlZF9mcmFtZXM7Ci0gICAgRVhQRUNUX1RSVUUocGF5bG9hZCAhPSBOVUxMKTsKLQotICAgIC8vIE9ubHkgY2hlY2sgdGhlIGZpcnN0IGZyYW1lLgotICAgIGlmIChudW1fcGFyc2VkX2ZyYW1lcyA9PSAxdSkgewotICAgICAgRVhQRUNUX0VRKDE0Nzg4dSwgZnJhbWVfaGVhZGVyLmZyYW1lX3NpemUpOwotICAgICAgRVhQRUNUX0VRKDB1LCBmcmFtZV9oZWFkZXIudGltZXN0YW1wKTsKLSAgICAgIEVYUEVDVF9FUSgKLSAgICAgICAgICBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihmaWxlX2hlYWRlcikgKyBzaXplb2YoZnJhbWVfaGVhZGVyKSksCi0gICAgICAgICAgcGF5bG9hZCAtIHN0cmVhbS5kYXRhKCkpOwotICAgIH0KLSAgfQotCi0gIEVYUEVDVF9FUShmaWxlX2hlYWRlci5udW1fZnJhbWVzLCBudW1fcGFyc2VkX2ZyYW1lcyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9yYW5nZS5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfcmFuZ2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZWI5MTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9yYW5nZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDYyNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gQ29tcGFyaXNvbiBvcGVyYXRvcnMgZm9yIHN0ZDo6dXBwZXJfYm91bmQoKSBhbmQgc3RkOjpsb3dlcl9ib3VuZCgpLgotc3RhdGljIGJvb2wgQ29tcGFyZVRpbWVEZWx0YVRvU3RyZWFtUGFyc2VyQnVmZmVyKAotICAgIGNvbnN0IERlY29kZVRpbWVzdGFtcCYgZGVjb2RlX3RpbWVzdGFtcCwKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICByZXR1cm4gZGVjb2RlX3RpbWVzdGFtcCA8IGJ1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci19Ci1zdGF0aWMgYm9vbCBDb21wYXJlU3RyZWFtUGFyc2VyQnVmZmVyVG9UaW1lRGVsdGEoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBidWZmZXIsCi0gICAgY29uc3QgRGVjb2RlVGltZXN0YW1wJiBkZWNvZGVfdGltZXN0YW1wKSB7Ci0gIHJldHVybiBidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpIDwgZGVjb2RlX3RpbWVzdGFtcDsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6SXNVbmNvbW1vblNhbWVUaW1lc3RhbXBTZXF1ZW5jZSgKLSAgICBib29sIHByZXZfaXNfa2V5ZnJhbWUsIGJvb2wgY3VycmVudF9pc19rZXlmcmFtZSkgewotICByZXR1cm4gY3VycmVudF9pc19rZXlmcmFtZSAmJiAhcHJldl9pc19rZXlmcmFtZTsKLX0KLQotU291cmNlQnVmZmVyUmFuZ2U6OlNvdXJjZUJ1ZmZlclJhbmdlKAotICAgIEdhcFBvbGljeSBnYXBfcG9saWN5LCBjb25zdCBCdWZmZXJRdWV1ZSYgbmV3X2J1ZmZlcnMsCi0gICAgRGVjb2RlVGltZXN0YW1wIHJhbmdlX3N0YXJ0X3RpbWUsCi0gICAgY29uc3QgSW50ZXJidWZmZXJEaXN0YW5jZUNCJiBpbnRlcmJ1ZmZlcl9kaXN0YW5jZV9jYikKLSAgICA6IGdhcF9wb2xpY3lfKGdhcF9wb2xpY3kpLAotICAgICAga2V5ZnJhbWVfbWFwX2luZGV4X2Jhc2VfKDApLAotICAgICAgbmV4dF9idWZmZXJfaW5kZXhfKC0xKSwKLSAgICAgIHJhbmdlX3N0YXJ0X3RpbWVfKHJhbmdlX3N0YXJ0X3RpbWUpLAotICAgICAgaW50ZXJidWZmZXJfZGlzdGFuY2VfY2JfKGludGVyYnVmZmVyX2Rpc3RhbmNlX2NiKSwKLSAgICAgIHNpemVfaW5fYnl0ZXNfKDApIHsKLSAgQ0hFQ0soIW5ld19idWZmZXJzLmVtcHR5KCkpOwotICBEQ0hFQ0sobmV3X2J1ZmZlcnMuZnJvbnQoKS0+aXNfa2V5X2ZyYW1lKCkpOwotICBEQ0hFQ0soIWludGVyYnVmZmVyX2Rpc3RhbmNlX2NiLmlzX251bGwoKSk7Ci0gIEFwcGVuZEJ1ZmZlcnNUb0VuZChuZXdfYnVmZmVycywgcmFuZ2Vfc3RhcnRfdGltZV8pOwotfQotCi1Tb3VyY2VCdWZmZXJSYW5nZTo6flNvdXJjZUJ1ZmZlclJhbmdlKCkge30KLQotdm9pZCBTb3VyY2VCdWZmZXJSYW5nZTo6QXBwZW5kQnVmZmVyc1RvRW5kKAotICAgIGNvbnN0IEJ1ZmZlclF1ZXVlJiBuZXdfYnVmZmVycywKLSAgICBEZWNvZGVUaW1lc3RhbXAgbmV3X2J1ZmZlcnNfZ3JvdXBfc3RhcnRfdGltZXN0YW1wKSB7Ci0gIENIRUNLKGJ1ZmZlcnNfLmVtcHR5KCkgfHwKLSAgICAgICAgQ2FuQXBwZW5kQnVmZmVyc1RvRW5kKG5ld19idWZmZXJzLCBuZXdfYnVmZmVyc19ncm91cF9zdGFydF90aW1lc3RhbXApKTsKLSAgRENIRUNLKHJhbmdlX3N0YXJ0X3RpbWVfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpIHx8Ci0gICAgICAgICByYW5nZV9zdGFydF90aW1lXyA8PSBuZXdfYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKSk7Ci0KLSAgQWRqdXN0RXN0aW1hdGVkRHVyYXRpb25Gb3JOZXdBcHBlbmQobmV3X2J1ZmZlcnMpOwotCi0gIGZvciAoQnVmZmVyUXVldWU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG5ld19idWZmZXJzLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IG5ld19idWZmZXJzLmVuZCgpOyArK2l0cikgewotICAgIERDSEVDSygoKml0ciktPkdldERlY29kZVRpbWVzdGFtcCgpICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLSAgICBidWZmZXJzXy5wdXNoX2JhY2soKml0cik7Ci0gICAgc2l6ZV9pbl9ieXRlc18gKz0gKCppdHIpLT5kYXRhX3NpemUoKTsKLQotICAgIERDSEVDS19MRShidWZmZXJzXy5zaXplKCksIGtpbnQzMm1heCk7Ci0gICAgaWYgKCgqaXRyKS0+aXNfa2V5X2ZyYW1lKCkpIHsKLSAgICAgIGludCBvZmZzZXQgPQotICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYnVmZmVyc18uc2l6ZSgpKSAtIDEgKyBrZXlmcmFtZV9tYXBfaW5kZXhfYmFzZV87Ci0gICAgICBEQ0hFQ0tfR0Uob2Zmc2V0LCAwKTsKLSAgICAgIGtleWZyYW1lX21hcF8uaW5zZXJ0KAotICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKCgqaXRyKS0+R2V0RGVjb2RlVGltZXN0YW1wKCksIG9mZnNldCkpOwotICAgIH0KLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclJhbmdlOjpBZGp1c3RFc3RpbWF0ZWREdXJhdGlvbkZvck5ld0FwcGVuZCgKLSAgICBjb25zdCBCdWZmZXJRdWV1ZSYgbmV3X2J1ZmZlcnMpIHsKLSAgaWYgKGJ1ZmZlcnNfLmVtcHR5KCkgfHwgbmV3X2J1ZmZlcnMuZW1wdHkoKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIElmIHRoZSBsYXN0IG9mIHRoZSBwcmV2aW91c2x5IGFwcGVuZGVkIGJ1ZmZlcnMgY29udGFpbnMgZXN0aW1hdGVkIGR1cmF0aW9uLAotICAvLyB3ZSBub3cgcmVmaW5lIHRoYXQgZXN0aW1hdGUgYnkgdGFraW5nIHRoZSBQVFMgZGVsdGEgZnJvbSB0aGUgZmlyc3QgbmV3Ci0gIC8vIGJ1ZmZlciBiZWluZyBhcHBlbmRlZC4KLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGxhc3RfYXBwZW5kZWRfYnVmZmVyID0gYnVmZmVyc18uYmFjaygpOwotICBpZiAobGFzdF9hcHBlbmRlZF9idWZmZXItPmlzX2R1cmF0aW9uX2VzdGltYXRlZCgpKSB7Ci0gICAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcF9kZWx0YSA9Ci0gICAgICAgIG5ld19idWZmZXJzLmZyb250KCktPnRpbWVzdGFtcCgpIC0gbGFzdF9hcHBlbmRlZF9idWZmZXItPnRpbWVzdGFtcCgpOwotICAgIERDSEVDSyh0aW1lc3RhbXBfZGVsdGEgPiBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgaWYgKGxhc3RfYXBwZW5kZWRfYnVmZmVyLT5kdXJhdGlvbigpICE9IHRpbWVzdGFtcF9kZWx0YSkgewotICAgICAgRFZMT0coMSkgPDwgIlJlcGxhY2luZyBlc3RpbWF0ZWQgZHVyYXRpb24gKCIKLSAgICAgICAgICAgICAgIDw8IGxhc3RfYXBwZW5kZWRfYnVmZmVyLT5kdXJhdGlvbigpCi0gICAgICAgICAgICAgICA8PCAiKSBmcm9tIHByZXZpb3VzIHJhbmdlLWVuZCB3aXRoIGRlcml2ZWQgZHVyYXRpb24gKCIKLSAgICAgICAgICAgICAgIDw8IHRpbWVzdGFtcF9kZWx0YSA8PCAiKS4iOwotICAgICAgbGFzdF9hcHBlbmRlZF9idWZmZXItPnNldF9kdXJhdGlvbih0aW1lc3RhbXBfZGVsdGEpOwotICAgIH0KLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclJhbmdlOjpTZWVrKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIHsKLSAgRENIRUNLKCFrZXlmcmFtZV9tYXBfLmVtcHR5KCkpOwotCi0gIEtleWZyYW1lTWFwOjppdGVyYXRvciByZXN1bHQgPSBHZXRGaXJzdEtleWZyYW1lQXRPckJlZm9yZSh0aW1lc3RhbXApOwotICBuZXh0X2J1ZmZlcl9pbmRleF8gPSByZXN1bHQtPnNlY29uZCAtIGtleWZyYW1lX21hcF9pbmRleF9iYXNlXzsKLSAgQ0hFQ0tfTFQobmV4dF9idWZmZXJfaW5kZXhfLCBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlcnNfLnNpemUoKSkpCi0gICAgICA8PCBuZXh0X2J1ZmZlcl9pbmRleF8gPDwgIiwgc2l6ZSA9ICIgPDwgYnVmZmVyc18uc2l6ZSgpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclJhbmdlOjpTZWVrQWhlYWRUbyhEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSB7Ci0gIFNlZWtBaGVhZCh0aW1lc3RhbXAsIGZhbHNlKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJSYW5nZTo6U2Vla0FoZWFkUGFzdChEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSB7Ci0gIFNlZWtBaGVhZCh0aW1lc3RhbXAsIHRydWUpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclJhbmdlOjpTZWVrQWhlYWQoRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfZ2l2ZW5fdGltZXN0YW1wKSB7Ci0gIERDSEVDSygha2V5ZnJhbWVfbWFwXy5lbXB0eSgpKTsKLQotICBLZXlmcmFtZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0KLSAgICAgIEdldEZpcnN0S2V5ZnJhbWVBdCh0aW1lc3RhbXAsIHNraXBfZ2l2ZW5fdGltZXN0YW1wKTsKLQotICAvLyBJZiB0aGVyZSBpc24ndCBhIGtleWZyYW1lIGFmdGVyIHx0aW1lc3RhbXB8LCB0aGVuIHNlZWsgdG8gZW5kIGFuZCByZXR1cm4KLSAgLy8ga05vVGltZXN0YW1wIHRvIHNpZ25hbCBzdWNoLgotICBpZiAocmVzdWx0ID09IGtleWZyYW1lX21hcF8uZW5kKCkpIHsKLSAgICBuZXh0X2J1ZmZlcl9pbmRleF8gPSAtMTsKLSAgICByZXR1cm47Ci0gIH0KLSAgbmV4dF9idWZmZXJfaW5kZXhfID0gcmVzdWx0LT5zZWNvbmQgLSBrZXlmcmFtZV9tYXBfaW5kZXhfYmFzZV87Ci0gIERDSEVDS19MVChuZXh0X2J1ZmZlcl9pbmRleF8sIHN0YXRpY19jYXN0PGludD4oYnVmZmVyc18uc2l6ZSgpKSk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUmFuZ2U6OlNlZWtUb1N0YXJ0KCkgewotICBDSEVDSyghYnVmZmVyc18uZW1wdHkoKSk7Ci0gIG5leHRfYnVmZmVyX2luZGV4XyA9IDA7Ci19Ci0KLVNvdXJjZUJ1ZmZlclJhbmdlKiBTb3VyY2VCdWZmZXJSYW5nZTo6U3BsaXRSYW5nZShEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSB7Ci0gIENIRUNLKCFidWZmZXJzXy5lbXB0eSgpKTsKLQotICAvLyBGaW5kIHRoZSBmaXJzdCBrZXlmcmFtZSBhdCBvciBhZnRlciB8dGltZXN0YW1wfC4KLSAgS2V5ZnJhbWVNYXA6Oml0ZXJhdG9yIG5ld19iZWdpbm5pbmdfa2V5ZnJhbWUgPQotICAgICAgR2V0Rmlyc3RLZXlmcmFtZUF0KHRpbWVzdGFtcCwgZmFsc2UpOwotCi0gIC8vIElmIHRoZXJlIGlzIG5vIGtleWZyYW1lIGFmdGVyIHx0aW1lc3RhbXB8LCB3ZSBjYW4ndCBzcGxpdCB0aGUgcmFuZ2UuCi0gIGlmIChuZXdfYmVnaW5uaW5nX2tleWZyYW1lID09IGtleWZyYW1lX21hcF8uZW5kKCkpIHJldHVybiBOVUxMOwotCi0gIC8vIFJlbW92ZSB0aGUgZGF0YSBiZWdpbm5pbmcgYXQgfGtleWZyYW1lX2luZGV4fCBmcm9tIHxidWZmZXJzX3wgYW5kIHNhdmUgaXQKLSAgLy8gaW50byB8cmVtb3ZlZF9idWZmZXJzfC4KLSAgaW50IGtleWZyYW1lX2luZGV4ID0KLSAgICAgIG5ld19iZWdpbm5pbmdfa2V5ZnJhbWUtPnNlY29uZCAtIGtleWZyYW1lX21hcF9pbmRleF9iYXNlXzsKLSAgRENIRUNLX0xUKGtleWZyYW1lX2luZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlcnNfLnNpemUoKSkpOwotICBCdWZmZXJRdWV1ZTo6aXRlcmF0b3Igc3RhcnRpbmdfcG9pbnQgPSBidWZmZXJzXy5iZWdpbigpICsga2V5ZnJhbWVfaW5kZXg7Ci0gIEJ1ZmZlclF1ZXVlIHJlbW92ZWRfYnVmZmVycyhzdGFydGluZ19wb2ludCwgYnVmZmVyc18uZW5kKCkpOwotCi0gIERlY29kZVRpbWVzdGFtcCBuZXdfcmFuZ2Vfc3RhcnRfdGltZXN0YW1wID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0gIGlmIChHZXRTdGFydFRpbWVzdGFtcCgpIDwgYnVmZmVyc18uZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkgJiYKLSAgICAgIHRpbWVzdGFtcCA8IHJlbW92ZWRfYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKSkgewotICAgIC8vIFRoZSBzcGxpdCBpcyBpbiB0aGUgZ2FwIGJldHdlZW4gfHJhbmdlX3N0YXJ0X3RpbWVffCBhbmQgdGhlIGZpcnN0IGJ1ZmZlcgotICAgIC8vIG9mIHRoZSBuZXcgcmFuZ2Ugc28gd2Ugc2hvdWxkIHNldCB0aGUgc3RhcnQgdGltZSBvZiB0aGUgbmV3IHJhbmdlIHRvCi0gICAgLy8gfHRpbWVzdGFtcHwgc28gd2UgcHJlc2VydmUgcGFydCBvZiB0aGUgZ2FwIGluIHRoZSBuZXcgcmFuZ2UuCi0gICAgbmV3X3JhbmdlX3N0YXJ0X3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgfQotCi0gIGtleWZyYW1lX21hcF8uZXJhc2UobmV3X2JlZ2lubmluZ19rZXlmcmFtZSwga2V5ZnJhbWVfbWFwXy5lbmQoKSk7Ci0gIEZyZWVCdWZmZXJSYW5nZShzdGFydGluZ19wb2ludCwgYnVmZmVyc18uZW5kKCkpOwotCi0gIC8vIENyZWF0ZSBhIG5ldyByYW5nZSB3aXRoIHxyZW1vdmVkX2J1ZmZlcnN8LgotICBTb3VyY2VCdWZmZXJSYW5nZSogc3BsaXRfcmFuZ2UgPSBuZXcgU291cmNlQnVmZmVyUmFuZ2UoCi0gICAgICBnYXBfcG9saWN5XywgcmVtb3ZlZF9idWZmZXJzLCBuZXdfcmFuZ2Vfc3RhcnRfdGltZXN0YW1wLAotICAgICAgaW50ZXJidWZmZXJfZGlzdGFuY2VfY2JfKTsKLQotICAvLyBJZiB0aGUgbmV4dCBidWZmZXIgcG9zaXRpb24gaXMgbm93IGluIHxzcGxpdF9yYW5nZXwsIHVwZGF0ZSB0aGUgc3RhdGUgb2YKLSAgLy8gdGhpcyByYW5nZSBhbmQgfHNwbGl0X3JhbmdlfCBhY2NvcmRpbmdseS4KLSAgaWYgKG5leHRfYnVmZmVyX2luZGV4XyA+PSBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlcnNfLnNpemUoKSkpIHsKLSAgICBzcGxpdF9yYW5nZS0+bmV4dF9idWZmZXJfaW5kZXhfID0gbmV4dF9idWZmZXJfaW5kZXhfIC0ga2V5ZnJhbWVfaW5kZXg7Ci0KLSAgICBpbnQgc3BsaXRfcmFuZ2VfbmV4dF9idWZmZXJfaW5kZXggPSBzcGxpdF9yYW5nZS0+bmV4dF9idWZmZXJfaW5kZXhfOwotICAgIENIRUNLX0dFKHNwbGl0X3JhbmdlX25leHRfYnVmZmVyX2luZGV4LCAwKTsKLSAgICAvLyBOb3RlIHRoYXQgYSBTb3VyY2VCdWZmZXJSYW5nZSdzIHxuZXh0X2J1ZmZlcl9pbmRleF98IGNhbiBiZSB0aGUgaW5kZXgKLSAgICAvLyBvZiBhIGJ1ZmZlciBvbmUgYmV5b25kIHdoYXQgaXMgY3VycmVudGx5IGluIHxidWZmZXJzX3wuCi0gICAgQ0hFQ0tfTEUoc3BsaXRfcmFuZ2VfbmV4dF9idWZmZXJfaW5kZXgsCi0gICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzcGxpdF9yYW5nZS0+YnVmZmVyc18uc2l6ZSgpKSk7Ci0KLSAgICBSZXNldE5leHRCdWZmZXJQb3NpdGlvbigpOwotICB9Ci0KLSAgcmV0dXJuIHNwbGl0X3JhbmdlOwotfQotCi1Tb3VyY2VCdWZmZXJSYW5nZTo6QnVmZmVyUXVldWU6Oml0ZXJhdG9yIFNvdXJjZUJ1ZmZlclJhbmdlOjpHZXRCdWZmZXJJdHJBdCgKLSAgICBEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wLCBib29sIHNraXBfZ2l2ZW5fdGltZXN0YW1wKSB7Ci0gIHJldHVybiBza2lwX2dpdmVuX3RpbWVzdGFtcAotICAgICAgICAgICAgID8gc3RkOjp1cHBlcl9ib3VuZChidWZmZXJzXy5iZWdpbigpLCBidWZmZXJzXy5lbmQoKSwgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlVGltZURlbHRhVG9TdHJlYW1QYXJzZXJCdWZmZXIpCi0gICAgICAgICAgICAgOiBzdGQ6Omxvd2VyX2JvdW5kKGJ1ZmZlcnNfLmJlZ2luKCksIGJ1ZmZlcnNfLmVuZCgpLCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmVTdHJlYW1QYXJzZXJCdWZmZXJUb1RpbWVEZWx0YSk7Ci19Ci0KLVNvdXJjZUJ1ZmZlclJhbmdlOjpLZXlmcmFtZU1hcDo6aXRlcmF0b3IgU291cmNlQnVmZmVyUmFuZ2U6OkdldEZpcnN0S2V5ZnJhbWVBdCgKLSAgICBEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wLCBib29sIHNraXBfZ2l2ZW5fdGltZXN0YW1wKSB7Ci0gIHJldHVybiBza2lwX2dpdmVuX3RpbWVzdGFtcCA/IGtleWZyYW1lX21hcF8udXBwZXJfYm91bmQodGltZXN0YW1wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlmcmFtZV9tYXBfLmxvd2VyX2JvdW5kKHRpbWVzdGFtcCk7Ci19Ci0KLVNvdXJjZUJ1ZmZlclJhbmdlOjpLZXlmcmFtZU1hcDo6aXRlcmF0b3IKLVNvdXJjZUJ1ZmZlclJhbmdlOjpHZXRGaXJzdEtleWZyYW1lQXRPckJlZm9yZShEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSB7Ci0gIEtleWZyYW1lTWFwOjppdGVyYXRvciByZXN1bHQgPSBrZXlmcmFtZV9tYXBfLmxvd2VyX2JvdW5kKHRpbWVzdGFtcCk7Ci0gIC8vIGxvd2VyX2JvdW5kKCkgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCA+PSB8dGltZXN0YW1wfCwgc28gd2Ugd2FudCB0aGUKLSAgLy8gcHJldmlvdXMgZWxlbWVudCBpZiBpdCBkaWQgbm90IHJldHVybiB0aGUgZWxlbWVudCBleGFjdGx5IGVxdWFsIHRvCi0gIC8vIHx0aW1lc3RhbXB8LgotICBpZiAocmVzdWx0ICE9IGtleWZyYW1lX21hcF8uYmVnaW4oKSAmJgotICAgICAgKHJlc3VsdCA9PSBrZXlmcmFtZV9tYXBfLmVuZCgpIHx8IHJlc3VsdC0+Zmlyc3QgIT0gdGltZXN0YW1wKSkgewotICAgIC0tcmVzdWx0OwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUmFuZ2U6OkRlbGV0ZUFsbChCdWZmZXJRdWV1ZSogcmVtb3ZlZF9idWZmZXJzKSB7Ci0gIFRydW5jYXRlQXQoYnVmZmVyc18uYmVnaW4oKSwgcmVtb3ZlZF9idWZmZXJzKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6VHJ1bmNhdGVBdChEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJRdWV1ZSogcmVtb3ZlZF9idWZmZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2V4Y2x1c2l2ZSkgewotICAvLyBGaW5kIHRoZSBwbGFjZSBpbiB8YnVmZmVyc198IHdoZXJlIHdlIHdpbGwgYmVnaW4gZGVsZXRpbmcgZGF0YS4KLSAgQnVmZmVyUXVldWU6Oml0ZXJhdG9yIHN0YXJ0aW5nX3BvaW50ID0KLSAgICAgIEdldEJ1ZmZlckl0ckF0KHRpbWVzdGFtcCwgaXNfZXhjbHVzaXZlKTsKLSAgcmV0dXJuIFRydW5jYXRlQXQoc3RhcnRpbmdfcG9pbnQsIHJlbW92ZWRfYnVmZmVycyk7Ci19Ci0KLXNpemVfdCBTb3VyY2VCdWZmZXJSYW5nZTo6RGVsZXRlR09QRnJvbUZyb250KEJ1ZmZlclF1ZXVlKiBkZWxldGVkX2J1ZmZlcnMpIHsKLSAgRENIRUNLKCFidWZmZXJzXy5lbXB0eSgpKTsKLSAgRENIRUNLKCFGaXJzdEdPUENvbnRhaW5zTmV4dEJ1ZmZlclBvc2l0aW9uKCkpOwotICBEQ0hFQ0soZGVsZXRlZF9idWZmZXJzKTsKLQotICBpbnQgYnVmZmVyc19kZWxldGVkID0gMDsKLSAgc2l6ZV90IHRvdGFsX2J5dGVzX2RlbGV0ZWQgPSAwOwotCi0gIEtleWZyYW1lTWFwOjppdGVyYXRvciBmcm9udCA9IGtleWZyYW1lX21hcF8uYmVnaW4oKTsKLSAgRENIRUNLKGZyb250ICE9IGtleWZyYW1lX21hcF8uZW5kKCkpOwotCi0gIC8vIERlbGV0ZSB0aGUga2V5ZnJhbWUgYXQgdGhlIHN0YXJ0IG9mIHxrZXlmcmFtZV9tYXBffC4KLSAga2V5ZnJhbWVfbWFwXy5lcmFzZShmcm9udCk7Ci0KLSAgLy8gTm93IHdlIG5lZWQgdG8gZGVsZXRlIGFsbCB0aGUgYnVmZmVycyB0aGF0IGRlcGVuZCBvbiB0aGUga2V5ZnJhbWUgd2UndmUKLSAgLy8ganVzdCBkZWxldGVkLgotICBpbnQgZW5kX2luZGV4ID0ga2V5ZnJhbWVfbWFwXy5zaXplKCkgPiAwCi0gICAgICAgICAgICAgICAgICAgICAgPyBrZXlmcmFtZV9tYXBfLmJlZ2luKCktPnNlY29uZCAtIGtleWZyYW1lX21hcF9pbmRleF9iYXNlXwotICAgICAgICAgICAgICAgICAgICAgIDogYnVmZmVyc18uc2l6ZSgpOwotCi0gIC8vIERlbGV0ZSBidWZmZXJzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyZWQgcmFuZ2UgdXAgdW50aWwgKGJ1dCBub3QKLSAgLy8gaW5jbHVkaW5nKSB0aGUgbmV4dCBrZXlmcmFtZS4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmRfaW5kZXg7IGkrKykgewotICAgIHNpemVfdCBieXRlc19kZWxldGVkID0gYnVmZmVyc18uZnJvbnQoKS0+ZGF0YV9zaXplKCk7Ci0gICAgRENIRUNLX0dFKHNpemVfaW5fYnl0ZXNfLCBieXRlc19kZWxldGVkKTsKLSAgICBzaXplX2luX2J5dGVzXyAtPSBieXRlc19kZWxldGVkOwotICAgIHRvdGFsX2J5dGVzX2RlbGV0ZWQgKz0gYnl0ZXNfZGVsZXRlZDsKLSAgICBkZWxldGVkX2J1ZmZlcnMtPnB1c2hfYmFjayhidWZmZXJzXy5mcm9udCgpKTsKLSAgICBidWZmZXJzXy5wb3BfZnJvbnQoKTsKLSAgICArK2J1ZmZlcnNfZGVsZXRlZDsKLSAgfQotCi0gIC8vIFVwZGF0ZSB8a2V5ZnJhbWVfbWFwX2luZGV4X2Jhc2VffCB0byBhY2NvdW50IGZvciB0aGUgZGVsZXRlZCBidWZmZXJzLgotICBrZXlmcmFtZV9tYXBfaW5kZXhfYmFzZV8gKz0gYnVmZmVyc19kZWxldGVkOwotCi0gIGlmIChuZXh0X2J1ZmZlcl9pbmRleF8gPiAtMSkgewotICAgIG5leHRfYnVmZmVyX2luZGV4XyAtPSBidWZmZXJzX2RlbGV0ZWQ7Ci0gICAgQ0hFQ0tfR0UobmV4dF9idWZmZXJfaW5kZXhfLCAwKQotICAgICAgICA8PCBuZXh0X2J1ZmZlcl9pbmRleF8gPDwgIiwgZGVsZXRlZCAiIDw8IGJ1ZmZlcnNfZGVsZXRlZDsKLSAgfQotCi0gIC8vIEludmFsaWRhdGUgcmFuZ2Ugc3RhcnQgdGltZSBpZiB3ZSd2ZSBkZWxldGVkIHRoZSBmaXJzdCBidWZmZXIgb2YgdGhlIHJhbmdlLgotICBpZiAoYnVmZmVyc19kZWxldGVkID4gMCkgcmFuZ2Vfc3RhcnRfdGltZV8gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLQotICByZXR1cm4gdG90YWxfYnl0ZXNfZGVsZXRlZDsKLX0KLQotc2l6ZV90IFNvdXJjZUJ1ZmZlclJhbmdlOjpEZWxldGVHT1BGcm9tQmFjayhCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzKSB7Ci0gIERDSEVDSyghYnVmZmVyc18uZW1wdHkoKSk7Ci0gIERDSEVDSyghTGFzdEdPUENvbnRhaW5zTmV4dEJ1ZmZlclBvc2l0aW9uKCkpOwotICBEQ0hFQ0soZGVsZXRlZF9idWZmZXJzKTsKLQotICAvLyBSZW1vdmUgdGhlIGxhc3QgR09QJ3Mga2V5ZnJhbWUgZnJvbSB0aGUgfGtleWZyYW1lX21hcF98LgotICBLZXlmcmFtZU1hcDo6aXRlcmF0b3IgYmFjayA9IGtleWZyYW1lX21hcF8uZW5kKCk7Ci0gIERDSEVDS19HVChrZXlmcmFtZV9tYXBfLnNpemUoKSwgMHUpOwotICAtLWJhY2s7Ci0KLSAgLy8gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBidWZmZXIgaW4gdGhlIGxhc3QgR09QIGlzIGVxdWFsIHRvIHRoZSBuZXcgc2l6ZSBvZgotICAvLyB8YnVmZmVyc198IGFmdGVyIHRoYXQgR09QIGlzIGRlbGV0ZWQuCi0gIHNpemVfdCBnb2FsX3NpemUgPSBiYWNrLT5zZWNvbmQgLSBrZXlmcmFtZV9tYXBfaW5kZXhfYmFzZV87Ci0gIGtleWZyYW1lX21hcF8uZXJhc2UoYmFjayk7Ci0KLSAgc2l6ZV90IHRvdGFsX2J5dGVzX2RlbGV0ZWQgPSAwOwotICB3aGlsZSAoYnVmZmVyc18uc2l6ZSgpICE9IGdvYWxfc2l6ZSkgewotICAgIHNpemVfdCBieXRlc19kZWxldGVkID0gYnVmZmVyc18uYmFjaygpLT5kYXRhX3NpemUoKTsKLSAgICBEQ0hFQ0tfR0Uoc2l6ZV9pbl9ieXRlc18sIGJ5dGVzX2RlbGV0ZWQpOwotICAgIHNpemVfaW5fYnl0ZXNfIC09IGJ5dGVzX2RlbGV0ZWQ7Ci0gICAgdG90YWxfYnl0ZXNfZGVsZXRlZCArPSBieXRlc19kZWxldGVkOwotICAgIC8vIFdlJ3JlIHJlbW92aW5nIGJ1ZmZlcnMgZnJvbSB0aGUgYmFjaywgc28gcHVzaCBlYWNoIHJlbW92ZWQgYnVmZmVyIHRvIHRoZQotICAgIC8vIGZyb250IG9mIHxkZWxldGVkX2J1ZmZlcnN8IHNvIHRoYXQgfGRlbGV0ZWRfYnVmZmVyc3wgYXJlIGluIG5vbmRlY3JlYXNpbmcKLSAgICAvLyBvcmRlci4KLSAgICBkZWxldGVkX2J1ZmZlcnMtPnB1c2hfZnJvbnQoYnVmZmVyc18uYmFjaygpKTsKLSAgICBidWZmZXJzXy5wb3BfYmFjaygpOwotICB9Ci0KLSAgcmV0dXJuIHRvdGFsX2J5dGVzX2RlbGV0ZWQ7Ci19Ci0KLXNpemVfdCBTb3VyY2VCdWZmZXJSYW5nZTo6R2V0UmVtb3ZhbEdPUCgKLSAgICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wLCBEZWNvZGVUaW1lc3RhbXAgZW5kX3RpbWVzdGFtcCwKLSAgICBzaXplX3QgdG90YWxfYnl0ZXNfdG9fZnJlZSwgRGVjb2RlVGltZXN0YW1wKiByZW1vdmFsX2VuZF90aW1lc3RhbXApIHsKLSAgc2l6ZV90IGJ5dGVzX3JlbW92ZWQgPSAwOwotCi0gIEtleWZyYW1lTWFwOjppdGVyYXRvciBnb3BfaXRyID0gR2V0Rmlyc3RLZXlmcmFtZUF0KHN0YXJ0X3RpbWVzdGFtcCwgZmFsc2UpOwotICBpZiAoZ29wX2l0ciA9PSBrZXlmcmFtZV9tYXBfLmVuZCgpKSByZXR1cm4gMDsKLSAgaW50IGtleWZyYW1lX2luZGV4ID0gZ29wX2l0ci0+c2Vjb25kIC0ga2V5ZnJhbWVfbWFwX2luZGV4X2Jhc2VfOwotICBCdWZmZXJRdWV1ZTo6aXRlcmF0b3IgYnVmZmVyX2l0ciA9IGJ1ZmZlcnNfLmJlZ2luKCkgKyBrZXlmcmFtZV9pbmRleDsKLSAgS2V5ZnJhbWVNYXA6Oml0ZXJhdG9yIGdvcF9lbmQgPSBrZXlmcmFtZV9tYXBfLmVuZCgpOwotICBpZiAoZW5kX3RpbWVzdGFtcCA8IEdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkpCi0gICAgZ29wX2VuZCA9IEdldEZpcnN0S2V5ZnJhbWVBdE9yQmVmb3JlKGVuZF90aW1lc3RhbXApOwotCi0gIC8vIENoZWNrIGlmIHRoZSByZW1vdmFsIHJhbmdlIGlzIHdpdGhpbiBhIEdPUCBhbmQgc2tpcCB0aGUgbG9vcCBpZiBzby4KLSAgLy8gW2tleWZyYW1lXS4uLltzdGFydF90aW1lc3RhbXBdLi4uW2VuZF90aW1lc3RhbXBdLi4uW2tleWZyYW1lXQotICBLZXlmcmFtZU1hcDo6aXRlcmF0b3IgZ29wX2l0cl9wcmV2ID0gZ29wX2l0cjsKLSAgaWYgKGdvcF9pdHJfcHJldiAhPSBrZXlmcmFtZV9tYXBfLmJlZ2luKCkgJiYgLS1nb3BfaXRyX3ByZXYgPT0gZ29wX2VuZCkKLSAgICBnb3BfZW5kID0gZ29wX2l0cjsKLQotICB3aGlsZSAoZ29wX2l0ciAhPSBnb3BfZW5kICYmIGJ5dGVzX3JlbW92ZWQgPCB0b3RhbF9ieXRlc190b19mcmVlKSB7Ci0gICAgKytnb3BfaXRyOwotCi0gICAgc2l6ZV90IGdvcF9zaXplID0gMDsKLSAgICBpbnQgbmV4dF9nb3BfaW5kZXggPSBnb3BfaXRyID09IGtleWZyYW1lX21hcF8uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBidWZmZXJzXy5zaXplKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnb3BfaXRyLT5zZWNvbmQgLSBrZXlmcmFtZV9tYXBfaW5kZXhfYmFzZV87Ci0gICAgQnVmZmVyUXVldWU6Oml0ZXJhdG9yIG5leHRfZ29wX3N0YXJ0ID0gYnVmZmVyc18uYmVnaW4oKSArIG5leHRfZ29wX2luZGV4OwotICAgIGZvciAoOyBidWZmZXJfaXRyICE9IG5leHRfZ29wX3N0YXJ0OyArK2J1ZmZlcl9pdHIpIHsKLSAgICAgIGdvcF9zaXplICs9ICgqYnVmZmVyX2l0ciktPmRhdGFfc2l6ZSgpOwotICAgIH0KLQotICAgIGJ5dGVzX3JlbW92ZWQgKz0gZ29wX3NpemU7Ci0gIH0KLSAgaWYgKGJ5dGVzX3JlbW92ZWQgPiAwKSB7Ci0gICAgKnJlbW92YWxfZW5kX3RpbWVzdGFtcCA9IGdvcF9pdHIgPT0ga2V5ZnJhbWVfbWFwXy5lbmQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBHZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdvcF9pdHItPmZpcnN0OwotICB9Ci0gIHJldHVybiBieXRlc19yZW1vdmVkOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclJhbmdlOjpGaXJzdEdPUEVhcmxpZXJUaGFuTWVkaWFUaW1lKAotICAgIERlY29kZVRpbWVzdGFtcCBtZWRpYV90aW1lKSBjb25zdCB7Ci0gIGlmIChrZXlmcmFtZV9tYXBfLnNpemUoKSA9PSAxdSkKLSAgICByZXR1cm4gKEdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkgPD0gbWVkaWFfdGltZSk7Ci0KLSAgS2V5ZnJhbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIHNlY29uZF9nb3AgPSBrZXlmcmFtZV9tYXBfLmJlZ2luKCk7Ci0gICsrc2Vjb25kX2dvcDsKLSAgcmV0dXJuIHNlY29uZF9nb3AtPmZpcnN0IDw9IG1lZGlhX3RpbWU7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUmFuZ2U6OkZpcnN0R09QQ29udGFpbnNOZXh0QnVmZmVyUG9zaXRpb24oKSBjb25zdCB7Ci0gIGlmICghSGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkpIHJldHVybiBmYWxzZTsKLQotICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBHT1AsIGl0IG11c3QgY29udGFpbiB0aGUgbmV4dCBidWZmZXIgcG9zaXRpb24uCi0gIGlmIChrZXlmcmFtZV9tYXBfLnNpemUoKSA9PSAxdSkgcmV0dXJuIHRydWU7Ci0KLSAgS2V5ZnJhbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIHNlY29uZF9nb3AgPSBrZXlmcmFtZV9tYXBfLmJlZ2luKCk7Ci0gICsrc2Vjb25kX2dvcDsKLSAgcmV0dXJuIG5leHRfYnVmZmVyX2luZGV4XyA8IHNlY29uZF9nb3AtPnNlY29uZCAtIGtleWZyYW1lX21hcF9pbmRleF9iYXNlXzsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6TGFzdEdPUENvbnRhaW5zTmV4dEJ1ZmZlclBvc2l0aW9uKCkgY29uc3QgewotICBpZiAoIUhhc05leHRCdWZmZXJQb3NpdGlvbigpKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gSWYgdGhlcmUgaXMgb25seSBvbmUgR09QLCBpdCBtdXN0IGNvbnRhaW4gdGhlIG5leHQgYnVmZmVyIHBvc2l0aW9uLgotICBpZiAoa2V5ZnJhbWVfbWFwXy5zaXplKCkgPT0gMXUpIHJldHVybiB0cnVlOwotCi0gIEtleWZyYW1lTWFwOjpjb25zdF9pdGVyYXRvciBsYXN0X2dvcCA9IGtleWZyYW1lX21hcF8uZW5kKCk7Ci0gIC0tbGFzdF9nb3A7Ci0gIHJldHVybiBsYXN0X2dvcC0+c2Vjb25kIC0ga2V5ZnJhbWVfbWFwX2luZGV4X2Jhc2VfIDw9IG5leHRfYnVmZmVyX2luZGV4XzsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJSYW5nZTo6RnJlZUJ1ZmZlclJhbmdlKAotICAgIGNvbnN0IEJ1ZmZlclF1ZXVlOjppdGVyYXRvciYgc3RhcnRpbmdfcG9pbnQsCi0gICAgY29uc3QgQnVmZmVyUXVldWU6Oml0ZXJhdG9yJiBlbmRpbmdfcG9pbnQpIHsKLSAgZm9yIChCdWZmZXJRdWV1ZTo6aXRlcmF0b3IgaXRyID0gc3RhcnRpbmdfcG9pbnQ7IGl0ciAhPSBlbmRpbmdfcG9pbnQ7ICsraXRyKSB7Ci0gICAgc2l6ZV90IGl0cl9kYXRhX3NpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KCgqaXRyKS0+ZGF0YV9zaXplKCkpOwotICAgIERDSEVDS19HRShzaXplX2luX2J5dGVzXywgaXRyX2RhdGFfc2l6ZSk7Ci0gICAgc2l6ZV9pbl9ieXRlc18gLT0gaXRyX2RhdGFfc2l6ZTsKLSAgfQotICBidWZmZXJzXy5lcmFzZShzdGFydGluZ19wb2ludCwgZW5kaW5nX3BvaW50KTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6VHJ1bmNhdGVBdChjb25zdCBCdWZmZXJRdWV1ZTo6aXRlcmF0b3ImIHN0YXJ0aW5nX3BvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJRdWV1ZSogcmVtb3ZlZF9idWZmZXJzKSB7Ci0gIERDSEVDSyghcmVtb3ZlZF9idWZmZXJzIHx8IHJlbW92ZWRfYnVmZmVycy0+ZW1wdHkoKSk7Ci0KLSAgLy8gUmV0dXJuIGlmIHdlJ3JlIG5vdCBkZWxldGluZyBhbnl0aGluZy4KLSAgaWYgKHN0YXJ0aW5nX3BvaW50ID09IGJ1ZmZlcnNfLmVuZCgpKSByZXR1cm4gYnVmZmVyc18uZW1wdHkoKTsKLQotICAvLyBSZXNldCB0aGUgbmV4dCBidWZmZXIgaW5kZXggaWYgd2Ugd2lsbCBiZSBkZWxldGluZyB0aGUgYnVmZmVyIHRoYXQncyBuZXh0Ci0gIC8vIGluIHNlcXVlbmNlLgotICBpZiAoSGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkpIHsKLSAgICBEZWNvZGVUaW1lc3RhbXAgbmV4dF9idWZmZXJfdGltZXN0YW1wID0gR2V0TmV4dFRpbWVzdGFtcCgpOwotICAgIGlmIChuZXh0X2J1ZmZlcl90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkgfHwKLSAgICAgICAgbmV4dF9idWZmZXJfdGltZXN0YW1wID49ICgqc3RhcnRpbmdfcG9pbnQpLT5HZXREZWNvZGVUaW1lc3RhbXAoKSkgewotICAgICAgaWYgKEhhc05leHRCdWZmZXIoKSAmJiByZW1vdmVkX2J1ZmZlcnMpIHsKLSAgICAgICAgaW50IHN0YXJ0aW5nX29mZnNldCA9IHN0YXJ0aW5nX3BvaW50IC0gYnVmZmVyc18uYmVnaW4oKTsKLSAgICAgICAgaW50IG5leHRfYnVmZmVyX29mZnNldCA9IG5leHRfYnVmZmVyX2luZGV4XyAtIHN0YXJ0aW5nX29mZnNldDsKLSAgICAgICAgRENIRUNLX0dFKG5leHRfYnVmZmVyX29mZnNldCwgMCk7Ci0gICAgICAgIEJ1ZmZlclF1ZXVlIHNhdmVkKHN0YXJ0aW5nX3BvaW50ICsgbmV4dF9idWZmZXJfb2Zmc2V0LCBidWZmZXJzXy5lbmQoKSk7Ci0gICAgICAgIHJlbW92ZWRfYnVmZmVycy0+c3dhcChzYXZlZCk7Ci0gICAgICB9Ci0gICAgICBSZXNldE5leHRCdWZmZXJQb3NpdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8vIFJlbW92ZSBrZXlmcmFtZXMgZnJvbSB8c3RhcnRpbmdfcG9pbnR8IG9ud2FyZC4KLSAgS2V5ZnJhbWVNYXA6Oml0ZXJhdG9yIHN0YXJ0aW5nX3BvaW50X2tleWZyYW1lID0KLSAgICAgIGtleWZyYW1lX21hcF8ubG93ZXJfYm91bmQoKCpzdGFydGluZ19wb2ludCktPkdldERlY29kZVRpbWVzdGFtcCgpKTsKLSAga2V5ZnJhbWVfbWFwXy5lcmFzZShzdGFydGluZ19wb2ludF9rZXlmcmFtZSwga2V5ZnJhbWVfbWFwXy5lbmQoKSk7Ci0KLSAgLy8gUmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB8c3RhcnRpbmdfcG9pbnR8IG9ud2FyZC4KLSAgRnJlZUJ1ZmZlclJhbmdlKHN0YXJ0aW5nX3BvaW50LCBidWZmZXJzXy5lbmQoKSk7Ci0gIHJldHVybiBidWZmZXJzXy5lbXB0eSgpOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclJhbmdlOjpHZXROZXh0QnVmZmVyKAotICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiogb3V0X2J1ZmZlcikgewotICBpZiAoIUhhc05leHRCdWZmZXIoKSkgcmV0dXJuIGZhbHNlOwotCi0gICpvdXRfYnVmZmVyID0gYnVmZmVyc19bbmV4dF9idWZmZXJfaW5kZXhfXTsKLSAgbmV4dF9idWZmZXJfaW5kZXhfKys7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclJhbmdlOjpIYXNOZXh0QnVmZmVyKCkgY29uc3QgewotICByZXR1cm4gbmV4dF9idWZmZXJfaW5kZXhfID49IDAgJiYKLSAgICAgICAgIG5leHRfYnVmZmVyX2luZGV4XyA8IHN0YXRpY19jYXN0PGludD4oYnVmZmVyc18uc2l6ZSgpKTsKLX0KLQotaW50IFNvdXJjZUJ1ZmZlclJhbmdlOjpHZXROZXh0Q29uZmlnSWQoKSBjb25zdCB7Ci0gIENIRUNLKEhhc05leHRCdWZmZXIoKSkgPDwgbmV4dF9idWZmZXJfaW5kZXhfOwotICAvLyBJZiB0aGUgbmV4dCBidWZmZXIgaXMgYW4gYXVkaW8gc3BsaWNlIGZyYW1lLCB0aGUgbmV4dCBlZmZlY3RpdmUgY29uZmlnIGlkCi0gIC8vIGNvbWVzIGZyb20gdGhlIGZpcnN0IGZhZGUgb3V0IHByZXJvbGwgYnVmZmVyLgotICByZXR1cm4gYnVmZmVyc19bbmV4dF9idWZmZXJfaW5kZXhfXS0+R2V0U3BsaWNlQnVmZmVyQ29uZmlnSWQoMCk7Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTb3VyY2VCdWZmZXJSYW5nZTo6R2V0TmV4dFRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgQ0hFQ0soIWJ1ZmZlcnNfLmVtcHR5KCkpIDw8IG5leHRfYnVmZmVyX2luZGV4XzsKLSAgQ0hFQ0soSGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkpCi0gICAgICA8PCBuZXh0X2J1ZmZlcl9pbmRleF8gPDwgIiwgc2l6ZT0iIDw8IGJ1ZmZlcnNfLnNpemUoKTsKLQotICBpZiAobmV4dF9idWZmZXJfaW5kZXhfID49IHN0YXRpY19jYXN0PGludD4oYnVmZmVyc18uc2l6ZSgpKSkgewotICAgIHJldHVybiBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgfQotCi0gIHJldHVybiBidWZmZXJzX1tuZXh0X2J1ZmZlcl9pbmRleF9dLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6SGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkgY29uc3QgewotICByZXR1cm4gbmV4dF9idWZmZXJfaW5kZXhfID49IDA7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUmFuZ2U6OlJlc2V0TmV4dEJ1ZmZlclBvc2l0aW9uKCkgeyBuZXh0X2J1ZmZlcl9pbmRleF8gPSAtMTsgfQotCi12b2lkIFNvdXJjZUJ1ZmZlclJhbmdlOjpBcHBlbmRSYW5nZVRvRW5kKGNvbnN0IFNvdXJjZUJ1ZmZlclJhbmdlJiByYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cmFuc2Zlcl9jdXJyZW50X3Bvc2l0aW9uKSB7Ci0gIERDSEVDSyhDYW5BcHBlbmRSYW5nZVRvRW5kKHJhbmdlKSk7Ci0gIERDSEVDSyghYnVmZmVyc18uZW1wdHkoKSk7Ci0KLSAgaWYgKHRyYW5zZmVyX2N1cnJlbnRfcG9zaXRpb24gJiYgcmFuZ2UubmV4dF9idWZmZXJfaW5kZXhfID49IDApCi0gICAgbmV4dF9idWZmZXJfaW5kZXhfID0gcmFuZ2UubmV4dF9idWZmZXJfaW5kZXhfICsgYnVmZmVyc18uc2l6ZSgpOwotCi0gIEFwcGVuZEJ1ZmZlcnNUb0VuZChyYW5nZS5idWZmZXJzXywga05vRGVjb2RlVGltZXN0YW1wKCkpOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclJhbmdlOjpDYW5BcHBlbmRSYW5nZVRvRW5kKAotICAgIGNvbnN0IFNvdXJjZUJ1ZmZlclJhbmdlJiByYW5nZSkgY29uc3QgewotICByZXR1cm4gQ2FuQXBwZW5kQnVmZmVyc1RvRW5kKHJhbmdlLmJ1ZmZlcnNfLCBrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUmFuZ2U6OkNhbkFwcGVuZEJ1ZmZlcnNUb0VuZCgKLSAgICBjb25zdCBCdWZmZXJRdWV1ZSYgYnVmZmVycywKLSAgICBEZWNvZGVUaW1lc3RhbXAgbmV3X2J1ZmZlcnNfZ3JvdXBfc3RhcnRfdGltZXN0YW1wKSBjb25zdCB7Ci0gIERDSEVDSyghYnVmZmVyc18uZW1wdHkoKSk7Ci0gIGlmIChuZXdfYnVmZmVyc19ncm91cF9zdGFydF90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICByZXR1cm4gSXNOZXh0SW5TZXF1ZW5jZShidWZmZXJzLmZyb250KCktPkdldERlY29kZVRpbWVzdGFtcCgpKTsKLSAgfQotICBEQ0hFQ0sobmV3X2J1ZmZlcnNfZ3JvdXBfc3RhcnRfdGltZXN0YW1wID49IEdldEVuZFRpbWVzdGFtcCgpKTsKLSAgRENIRUNLKGJ1ZmZlcnMuZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkgPj0KLSAgICAgICAgIG5ld19idWZmZXJzX2dyb3VwX3N0YXJ0X3RpbWVzdGFtcCk7Ci0gIHJldHVybiBJc05leHRJblNlcXVlbmNlKG5ld19idWZmZXJzX2dyb3VwX3N0YXJ0X3RpbWVzdGFtcCk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUmFuZ2U6OkJlbG9uZ3NUb1JhbmdlKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIGNvbnN0IHsKLSAgRENIRUNLKCFidWZmZXJzXy5lbXB0eSgpKTsKLQotICByZXR1cm4gKElzTmV4dEluU2VxdWVuY2UodGltZXN0YW1wKSB8fAotICAgICAgICAgIChHZXRTdGFydFRpbWVzdGFtcCgpIDw9IHRpbWVzdGFtcCAmJiB0aW1lc3RhbXAgPD0gR2V0RW5kVGltZXN0YW1wKCkpKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6Q2FuU2Vla1RvKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIGNvbnN0IHsKLSAgRGVjb2RlVGltZXN0YW1wIHN0YXJ0X3RpbWVzdGFtcCA9Ci0gICAgICBzdGQ6Om1heChEZWNvZGVUaW1lc3RhbXAoKSwgR2V0U3RhcnRUaW1lc3RhbXAoKSAtIEdldEZ1ZGdlUm9vbSgpKTsKLSAgcmV0dXJuICFrZXlmcmFtZV9tYXBfLmVtcHR5KCkgJiYgc3RhcnRfdGltZXN0YW1wIDw9IHRpbWVzdGFtcCAmJgotICAgICAgICAgdGltZXN0YW1wIDwgR2V0QnVmZmVyZWRFbmRUaW1lc3RhbXAoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6Q29tcGxldGVseU92ZXJsYXBzKAotICAgIGNvbnN0IFNvdXJjZUJ1ZmZlclJhbmdlJiByYW5nZSkgY29uc3QgewotICByZXR1cm4gR2V0U3RhcnRUaW1lc3RhbXAoKSA8PSByYW5nZS5HZXRTdGFydFRpbWVzdGFtcCgpICYmCi0gICAgICAgICBHZXRFbmRUaW1lc3RhbXAoKSA+PSByYW5nZS5HZXRFbmRUaW1lc3RhbXAoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6RW5kT3ZlcmxhcHMoY29uc3QgU291cmNlQnVmZmVyUmFuZ2UmIHJhbmdlKSBjb25zdCB7Ci0gIHJldHVybiByYW5nZS5HZXRTdGFydFRpbWVzdGFtcCgpIDw9IEdldEVuZFRpbWVzdGFtcCgpICYmCi0gICAgICAgICBHZXRFbmRUaW1lc3RhbXAoKSA8IHJhbmdlLkdldEVuZFRpbWVzdGFtcCgpOwotfQotCi1EZWNvZGVUaW1lc3RhbXAgU291cmNlQnVmZmVyUmFuZ2U6OkdldFN0YXJ0VGltZXN0YW1wKCkgY29uc3QgewotICBEQ0hFQ0soIWJ1ZmZlcnNfLmVtcHR5KCkpOwotICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wID0gcmFuZ2Vfc3RhcnRfdGltZV87Ci0gIGlmIChzdGFydF90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpCi0gICAgc3RhcnRfdGltZXN0YW1wID0gYnVmZmVyc18uZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0gIHJldHVybiBzdGFydF90aW1lc3RhbXA7Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTb3VyY2VCdWZmZXJSYW5nZTo6R2V0RW5kVGltZXN0YW1wKCkgY29uc3QgewotICBEQ0hFQ0soIWJ1ZmZlcnNfLmVtcHR5KCkpOwotICByZXR1cm4gYnVmZmVyc18uYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLX0KLQotRGVjb2RlVGltZXN0YW1wIFNvdXJjZUJ1ZmZlclJhbmdlOjpHZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgRENIRUNLKCFidWZmZXJzXy5lbXB0eSgpKTsKLSAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uID0gYnVmZmVyc18uYmFjaygpLT5kdXJhdGlvbigpOwotICBpZiAoZHVyYXRpb24gPT0ga05vVGltZXN0YW1wIHx8IGR1cmF0aW9uLmlzX3plcm8oKSkKLSAgICBkdXJhdGlvbiA9IEdldEFwcHJveGltYXRlRHVyYXRpb24oKTsKLSAgcmV0dXJuIEdldEVuZFRpbWVzdGFtcCgpICsgZHVyYXRpb247Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTb3VyY2VCdWZmZXJSYW5nZTo6TmV4dEtleWZyYW1lVGltZXN0YW1wKAotICAgIERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIHsKLSAgRENIRUNLKCFrZXlmcmFtZV9tYXBfLmVtcHR5KCkpOwotCi0gIGlmICh0aW1lc3RhbXAgPCBHZXRTdGFydFRpbWVzdGFtcCgpIHx8IHRpbWVzdGFtcCA+PSBHZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpKQotICAgIHJldHVybiBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLQotICBLZXlmcmFtZU1hcDo6aXRlcmF0b3IgaXRyID0gR2V0Rmlyc3RLZXlmcmFtZUF0KHRpbWVzdGFtcCwgZmFsc2UpOwotICBpZiAoaXRyID09IGtleWZyYW1lX21hcF8uZW5kKCkpIHJldHVybiBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLQotICAvLyBJZiB0aGUgdGltZXN0YW1wIGlzIGluc2lkZSB0aGUgZ2FwIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBjb2RlZCBmcmFtZQotICAvLyBncm91cCBhbmQgdGhlIGZpcnN0IGJ1ZmZlciwgdGhlbiBqdXN0IHByZXRlbmQgdGhlcmUgaXMgYSBrZXlmcmFtZSBhdCB0aGUKLSAgLy8gc3BlY2lmaWVkIHRpbWVzdGFtcC4KLSAgaWYgKGl0ciA9PSBrZXlmcmFtZV9tYXBfLmJlZ2luKCkgJiYgdGltZXN0YW1wID4gcmFuZ2Vfc3RhcnRfdGltZV8gJiYKLSAgICAgIHRpbWVzdGFtcCA8IGl0ci0+Zmlyc3QpIHsKLSAgICByZXR1cm4gdGltZXN0YW1wOwotICB9Ci0KLSAgcmV0dXJuIGl0ci0+Zmlyc3Q7Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTb3VyY2VCdWZmZXJSYW5nZTo6S2V5ZnJhbWVCZWZvcmVUaW1lc3RhbXAoCi0gICAgRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgewotICBEQ0hFQ0soIWtleWZyYW1lX21hcF8uZW1wdHkoKSk7Ci0KLSAgaWYgKHRpbWVzdGFtcCA8IEdldFN0YXJ0VGltZXN0YW1wKCkgfHwgdGltZXN0YW1wID49IEdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkpCi0gICAgcmV0dXJuIGtOb0RlY29kZVRpbWVzdGFtcCgpOwotCi0gIHJldHVybiBHZXRGaXJzdEtleWZyYW1lQXRPckJlZm9yZSh0aW1lc3RhbXApLT5maXJzdDsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6SXNOZXh0SW5TZXF1ZW5jZShEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKSBjb25zdCB7Ci0gIERlY29kZVRpbWVzdGFtcCBlbmQgPSBidWZmZXJzXy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotICByZXR1cm4gKGVuZCA9PSB0aW1lc3RhbXAgfHwKLSAgICAgICAgICAoZW5kIDwgdGltZXN0YW1wICYmCi0gICAgICAgICAgIChnYXBfcG9saWN5XyA9PSBBTExPV19HQVBTIHx8IHRpbWVzdGFtcCA8PSBlbmQgKyBHZXRGdWRnZVJvb20oKSkpKTsKLX0KLQotYmFzZTo6VGltZURlbHRhIFNvdXJjZUJ1ZmZlclJhbmdlOjpHZXRGdWRnZVJvb20oKSBjb25zdCB7Ci0gIC8vIEJlY2F1c2Ugd2UgZG8gbm90IGtub3cgZXhhY3RseSB3aGVuIGlzIHRoZSBuZXh0IHRpbWVzdGFtcCwgYW55IGJ1ZmZlcgotICAvLyB0aGF0IHN0YXJ0cyB3aXRoaW4gMnggdGhlIGFwcHJveGltYXRlIGR1cmF0aW9uIG9mIGEgYnVmZmVyIGlzIGNvbnNpZGVyZWQKLSAgLy8gd2l0aGluIHRoaXMgcmFuZ2UuCi0gIHJldHVybiAyICogR2V0QXBwcm94aW1hdGVEdXJhdGlvbigpOwotfQotCi1iYXNlOjpUaW1lRGVsdGEgU291cmNlQnVmZmVyUmFuZ2U6OkdldEFwcHJveGltYXRlRHVyYXRpb24oKSBjb25zdCB7Ci0gIGJhc2U6OlRpbWVEZWx0YSBtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2UgPSBpbnRlcmJ1ZmZlcl9kaXN0YW5jZV9jYl8uUnVuKCk7Ci0gIERDSEVDSyhtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2UgIT0ga05vVGltZXN0YW1wKTsKLSAgcmV0dXJuIG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJSYW5nZTo6R2V0QnVmZmVyc0luUmFuZ2UoRGVjb2RlVGltZXN0YW1wIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclF1ZXVlKiBidWZmZXJzKSB7Ci0gIC8vIEZpbmQgdGhlIG5lYXJlc3QgYnVmZmVyIHdpdGggYSBkZWNvZGUgdGltZXN0YW1wIDw9IHN0YXJ0LgotICBjb25zdCBEZWNvZGVUaW1lc3RhbXAgZmlyc3RfdGltZXN0YW1wID0gS2V5ZnJhbWVCZWZvcmVUaW1lc3RhbXAoc3RhcnQpOwotICBpZiAoZmlyc3RfdGltZXN0YW1wID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gRmluZCBhbGwgYnVmZmVycyBpbnZvbHZlZCBpbiB0aGUgcmFuZ2UuCi0gIGNvbnN0IHNpemVfdCBwcmV2aW91c19zaXplID0gYnVmZmVycy0+c2l6ZSgpOwotICBmb3IgKEJ1ZmZlclF1ZXVlOjppdGVyYXRvciBpdCA9IEdldEJ1ZmZlckl0ckF0KGZpcnN0X3RpbWVzdGFtcCwgZmFsc2UpOwotICAgICAgIGl0ICE9IGJ1ZmZlcnNfLmVuZCgpOyArK2l0KSB7Ci0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBidWZmZXIgPSAqaXQ7Ci0gICAgLy8gQnVmZmVycyB3aXRob3V0IGR1cmF0aW9uIGFyZSBub3Qgc3VwcG9ydGVkLCBzbyBiYWlsIGlmIHdlIGVuY291bnRlciBhbnkuCi0gICAgaWYgKGJ1ZmZlci0+ZHVyYXRpb24oKSA9PSBrTm9UaW1lc3RhbXAgfHwKLSAgICAgICAgYnVmZmVyLT5kdXJhdGlvbigpIDw9IGJhc2U6OlRpbWVEZWx0YSgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChidWZmZXItPmVuZF9vZl9zdHJlYW0oKSB8fAotICAgICAgICBidWZmZXItPnRpbWVzdGFtcCgpID49IGVuZC5Ub1ByZXNlbnRhdGlvblRpbWUoKSkgewotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZmZlci0+dGltZXN0YW1wKCkgKyBidWZmZXItPmR1cmF0aW9uKCkgPD0gc3RhcnQuVG9QcmVzZW50YXRpb25UaW1lKCkpCi0gICAgICBjb250aW51ZTsKLSAgICBidWZmZXJzLT5wdXNoX2JhY2soYnVmZmVyKTsKLSAgfQotICByZXR1cm4gcHJldmlvdXNfc2l6ZSA8IGJ1ZmZlcnMtPnNpemUoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMjM3NzkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9yYW5nZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19TT1VSQ0VfQlVGRkVSX1JBTkdFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX1NPVVJDRV9CVUZGRVJfUkFOR0VfSF8KLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gSGVscGVyIGNsYXNzIHJlcHJlc2VudGluZyBhIHJhbmdlIG9mIGJ1ZmZlcmVkIGRhdGEuIEFsbCBidWZmZXJzIGluIGEKLS8vIFNvdXJjZUJ1ZmZlclJhbmdlIGFyZSBvcmRlcmVkIHNlcXVlbnRpYWxseSBpbiBkZWNvZGUgdGltZXN0YW1wIG9yZGVyIHdpdGggbm8KLS8vIGdhcHMuCi1jbGFzcyBTb3VyY2VCdWZmZXJSYW5nZSB7Ci0gcHVibGljOgotICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGluIHRpbWUgYmV0d2VlbiBhbnkgYnVmZmVyIHNlZW4gaW4gdGhpcwotICAvLyBzdHJlYW0uIFVzZWQgdG8gZXN0aW1hdGUgdGhlIGR1cmF0aW9uIG9mIGEgYnVmZmVyIGlmIGl0cyBkdXJhdGlvbiBpcyBub3QKLSAgLy8ga25vd24uCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8YmFzZTo6VGltZURlbHRhKCk+IEludGVyYnVmZmVyRGlzdGFuY2VDQjsKLQotICB0eXBlZGVmIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgQnVmZmVyUXVldWU7Ci0KLSAgLy8gUG9saWN5IGZvciBoYW5kbGluZyBsYXJnZSBnYXBzIGJldHdlZW4gYnVmZmVycy4gQ29udGludW91cyBtZWRpYSBsaWtlCi0gIC8vIGF1ZGlvICYgdmlkZW8gc2hvdWxkIHVzZSBOT19HQVBTX0FMTE9XRUQuIERpc2NvbnRpbnVvdXMgbWVkaWEgbGlrZQotICAvLyB0aW1lZCB0ZXh0IHNob3VsZCB1c2UgQUxMT1dfR0FQUyBiZWNhdXNlIGxhcmdlIGRpZmZlcmVuY2VzIGluIHRpbWVzdGFtcHMKLSAgLy8gYXJlIGNvbW1vbiBhbmQgYWNjZXB0YWJsZS4KLSAgZW51bSBHYXBQb2xpY3kgeyBOT19HQVBTX0FMTE9XRUQsIEFMTE9XX0dBUFMgfTsKLQotICAvLyBTZXF1ZW50aWFsIGJ1ZmZlcnMgd2l0aCB0aGUgc2FtZSBkZWNvZGUgdGltZXN0YW1wIG1ha2Ugc2Vuc2UgdW5kZXIgY2VydGFpbgotICAvLyBjb25kaXRpb25zLCB0eXBpY2FsbHkgd2hlbiB0aGUgZmlyc3QgYnVmZmVyIGlzIGEga2V5ZnJhbWUuIER1ZSB0byBzb21lCi0gIC8vIGF0eXBpY2FsIG1lZGlhIGFwcGVuZCBiZWhhdmlvcnMgd2hlcmUgYSBuZXcga2V5ZnJhbWUgbWlnaHQgaGF2ZSB0aGUgc2FtZQotICAvLyB0aW1lc3RhbXAgYXMgYSBwcmV2aW91cyBub24ta2V5ZnJhbWUsIHRoZSBwbGF5YmFjayBvZiB0aGUgc2VxdWVuY2UgbWlnaHQKLSAgLy8gaW52b2x2ZSBzb21lIHRocm93YXdheSBkZWNvZGUgd29yay4gVGhpcyBtZXRob2Qgc3VwcG9ydHMgZGV0ZWN0aW5nIHRoaXMKLSAgLy8gc2l0dWF0aW9uIHNvIHRoYXQgY2FsbGVycyBjYW4gbG9nIHdhcm5pbmdzIChpdCByZXR1cm5zIHRydWUgaW4gdGhpcyBjYXNlCi0gIC8vIG9ubHkpLgotICAvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCBpbmNsdWRpbmcgbW9yZSB0eXBpY2FsIHNhbWUtRFRTIHNlcXVlbmNlcywgdGhpcyBtZXRob2QKLSAgLy8gcmV0dXJucyBmYWxzZS4gRXhhbXBsZXMgb2YgdHlwaWNhbCBzaXR1YXRpb25zIHdoZXJlIERUUyBvZiB0d28gY29uc2VjdXRpdmUKLSAgLy8gZnJhbWVzIGNhbiBiZSBlcXVhbDoKLSAgLy8gLSBWaWRlbzogVlA4IEFsdC1SZWYgZnJhbWVzLgotICAvLyAtIFZpZGVvOiBJUEJQQlAuLi46IERUUyBmb3IgSSBmcmFtZSBhbmQgZm9yIFAgZnJhbWUgY2FuIGJlIGVxdWFsLgotICAvLyAtIFRleHQgdHJhY2sgY3VlcyB0aGF0IHN0YXJ0IGF0IHNhbWUgdGltZS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxwcmV2X2lzX2tleWZyYW1lfCBhbmQgfGN1cnJlbnRfaXNfa2V5ZnJhbWV8IGluZGljYXRlIGEKLSAgLy8gc2FtZSB0aW1lc3RhbXAgc2l0dWF0aW9uIHRoYXQgaXMgYXR5cGljYWwuIEZhbHNlIGlzIHJldHVybmVkIG90aGVyd2lzZS4KLSAgc3RhdGljIGJvb2wgSXNVbmNvbW1vblNhbWVUaW1lc3RhbXBTZXF1ZW5jZShib29sIHByZXZfaXNfa2V5ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdXJyZW50X2lzX2tleWZyYW1lKTsKLQotICAvLyBDcmVhdGVzIGEgc291cmNlIGJ1ZmZlciByYW5nZSB3aXRoIHxuZXdfYnVmZmVyc3wuIHxuZXdfYnVmZmVyc3wgY2Fubm90IGJlCi0gIC8vIGVtcHR5IGFuZCB0aGUgZnJvbnQgb2YgfG5ld19idWZmZXJzfCBtdXN0IGJlIGEga2V5ZnJhbWUuCi0gIC8vIHxyYW5nZV9zdGFydF90aW1lfCByZWZlcnMgdG8gdGhlIHN0YXJ0aW5nIHRpbWVzdGFtcCBmb3IgdGhlIGNvZGVkIGZyYW1lCi0gIC8vIGdyb3VwIHRvIHdoaWNoIHRoZXNlIGJ1ZmZlcnMgYmVsb25nLgotICBTb3VyY2VCdWZmZXJSYW5nZShHYXBQb2xpY3kgZ2FwX3BvbGljeSwgY29uc3QgQnVmZmVyUXVldWUmIG5ld19idWZmZXJzLAotICAgICAgICAgICAgICAgICAgICBEZWNvZGVUaW1lc3RhbXAgcmFuZ2Vfc3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50ZXJidWZmZXJEaXN0YW5jZUNCJiBpbnRlcmJ1ZmZlcl9kaXN0YW5jZV9jYik7Ci0KLSAgflNvdXJjZUJ1ZmZlclJhbmdlKCk7Ci0KLSAgLy8gQXBwZW5kcyB8YnVmZmVyc3wgdG8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgYW5kIHVwZGF0ZXMgfGtleWZyYW1lX21hcF98IGFzCi0gIC8vIGl0IGVuY291bnRlcnMgbmV3IGtleWZyYW1lcy4KLSAgLy8gSWYgfG5ld19idWZmZXJzX2dyb3VwX3N0YXJ0X3RpbWVzdGFtcHwgaXMga05vRGVjb2RlVGltZXN0YW1wKCksIHRoZW4gdGhlCi0gIC8vIGZpcnN0IGJ1ZmZlciBpbiB8YnVmZmVyc3wgbXVzdCBjb21lIGRpcmVjdGx5IGFmdGVyIHRoZSBsYXN0IGJ1ZmZlciBpbiB0aGlzCi0gIC8vIHJhbmdlICh3aXRoaW4gdGhlIGZ1ZGdlIHJvb20pLgotICAvLyBJZiB8bmV3X2J1ZmZlcnNfZ3JvdXBfc3RhcnRfdGltZXN0YW1wfCBpcyBzZXQgb3RoZXJ3aXNlLCB0aGVuIHRoYXQgdGltZQotICAvLyBtdXN0IGNvbWUgZGlyZWN0bHkgYWZ0ZXIgdGhlIGxhc3QgYnVmZmVyIGluIHRoaXMgcmFuZ2UgKHdpdGhpbiB0aGUgZnVkZ2UKLSAgLy8gcm9vbSkuIFRoZSBsYXR0ZXIgc2NlbmFyaW8gaXMgcmVxdWlyZWQgd2hlbiBhIG11eGVkIGNvZGVkIGZyYW1lIGdyb3VwIGhhcwotICAvLyBzdWNoIGEgbGFyZ2UgamFnZ2VkIHN0YXJ0IGFjcm9zcyB0cmFja3MgdGhhdCBpdHMgZmlyc3QgYnVmZmVyIGlzIG5vdCB3aXRoaW4KLSAgLy8gdGhlIGZ1ZGdlIHJvb20sIHlldCBpdHMgZ3JvdXAgc3RhcnQgd2FzLgotICB2b2lkIEFwcGVuZEJ1ZmZlcnNUb0VuZChjb25zdCBCdWZmZXJRdWV1ZSYgYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIG5ld19idWZmZXJzX2dyb3VwX3N0YXJ0X3RpbWVzdGFtcCk7Ci0gIGJvb2wgQ2FuQXBwZW5kQnVmZmVyc1RvRW5kKAotICAgICAgY29uc3QgQnVmZmVyUXVldWUmIGJ1ZmZlcnMsCi0gICAgICBEZWNvZGVUaW1lc3RhbXAgbmV3X2J1ZmZlcnNfZ3JvdXBfc3RhcnRfdGltZXN0YW1wKSBjb25zdDsKLQotICAvLyBBcHBlbmRzIHRoZSBidWZmZXJzIGZyb20gfHJhbmdlfCBpbnRvIHRoaXMgcmFuZ2UuCi0gIC8vIFRoZSBmaXJzdCBidWZmZXIgaW4gfHJhbmdlfCBtdXN0IGNvbWUgZGlyZWN0bHkgYWZ0ZXIgdGhlIGxhc3QgYnVmZmVyCi0gIC8vIGluIHRoaXMgcmFuZ2UuCi0gIC8vIElmIHx0cmFuc2Zlcl9jdXJyZW50X3Bvc2l0aW9ufCBpcyB0cnVlLCB8cmFuZ2V8J3MgfG5leHRfYnVmZmVyX2luZGV4X3wKLSAgLy8gaXMgdHJhbnNmZXJyZWQgdG8gdGhpcyBTb3VyY2VCdWZmZXJSYW5nZS4KLSAgLy8gTm90ZTogVXNlIHRoZXNlIG9ubHkgdG8gbWVyZ2UgZXhpc3RpbmcgcmFuZ2VzLiB8cmFuZ2V8J3MgZmlyc3QgYnVmZmVyCi0gIC8vIHRpbWVzdGFtcCBtdXN0IGJlIGFkamFjZW50IHRvIHRoaXMgcmFuZ2UuIE5vIGdyb3VwIHN0YXJ0IHRpbWVzdGFtcAotICAvLyBhZGphY2VuY3kgaXMgaW52b2x2ZWQgaW4gdGhlc2UgbWV0aG9kcy4KLSAgdm9pZCBBcHBlbmRSYW5nZVRvRW5kKGNvbnN0IFNvdXJjZUJ1ZmZlclJhbmdlJiByYW5nZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmZXJfY3VycmVudF9wb3NpdGlvbik7Ci0gIGJvb2wgQ2FuQXBwZW5kUmFuZ2VUb0VuZChjb25zdCBTb3VyY2VCdWZmZXJSYW5nZSYgcmFuZ2UpIGNvbnN0OwotCi0gIC8vIFVwZGF0ZXMgfG5leHRfYnVmZmVyX2luZGV4X3wgdG8gcG9pbnQgdG8gdGhlIEJ1ZmZlciBjb250YWluaW5nIHx0aW1lc3RhbXB8LgotICAvLyBBc3N1bWVzIHx0aW1lc3RhbXB8IGlzIHZhbGlkIGFuZCBpbiB0aGlzIHJhbmdlLgotICB2b2lkIFNlZWsoRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCk7Ci0KLSAgLy8gVXBkYXRlcyB8bmV4dF9idWZmZXJfaW5kZXhffCB0byBwb2ludCB0byBuZXh0IGtleWZyYW1lIGFmdGVyIG9yIGVxdWFsIHRvCi0gIC8vIHx0aW1lc3RhbXB8LgotICB2b2lkIFNlZWtBaGVhZFRvKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIFVwZGF0ZXMgfG5leHRfYnVmZmVyX2luZGV4X3wgdG8gcG9pbnQgdG8gbmV4dCBrZXlmcmFtZSBzdHJpY3RseSBhZnRlcgotICAvLyB8dGltZXN0YW1wfC4KLSAgdm9pZCBTZWVrQWhlYWRQYXN0KERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIFNlZWtzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlLgotICB2b2lkIFNlZWtUb1N0YXJ0KCk7Ci0KLSAgLy8gRmluZHMgdGhlIG5leHQga2V5ZnJhbWUgZnJvbSB8YnVmZmVyc198IHN0YXJ0aW5nIGF0IG9yIGFmdGVyIHx0aW1lc3RhbXB8Ci0gIC8vIGFuZCBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IFNvdXJjZUJ1ZmZlclJhbmdlIHdpdGggdGhlIGJ1ZmZlcnMgZnJvbSB0aGF0Ci0gIC8vIGtleWZyYW1lIG9ud2FyZC4gVGhlIGJ1ZmZlcnMgaW4gdGhlIG5ldyBTb3VyY2VCdWZmZXJSYW5nZSBhcmUgbW92ZWQgb3V0IG9mCi0gIC8vIHRoaXMgcmFuZ2UuIElmIHRoZXJlIGlzIG5vIGtleWZyYW1lIGF0IG9yIGFmdGVyIHx0aW1lc3RhbXB8LCBTcGxpdFJhbmdlKCkKLSAgLy8gcmV0dXJucyBudWxsIGFuZCB0aGlzIHJhbmdlIGlzIHVubW9kaWZpZWQuIFRoaXMgcmFuZ2UgY2FuIGJlY29tZSBlbXB0eSBpZgotICAvLyB8dGltZXN0YW1wfCA8PSB0aGUgRFRTIG9mIHRoZSBmaXJzdCBidWZmZXIgaW4gdGhpcyByYW5nZS4KLSAgU291cmNlQnVmZmVyUmFuZ2UqIFNwbGl0UmFuZ2UoRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCk7Ci0KLSAgLy8gRGVsZXRlcyB0aGUgYnVmZmVycyBmcm9tIHRoaXMgcmFuZ2Ugc3RhcnRpbmcgYXQgfHRpbWVzdGFtcHwsIGV4Y2x1c2l2ZSBpZgotICAvLyB8aXNfZXhjbHVzaXZlfCBpcyB0cnVlLCBpbmNsdXNpdmUgb3RoZXJ3aXNlLgotICAvLyBSZXNldHMgfG5leHRfYnVmZmVyX2luZGV4X3wgaWYgdGhlIGJ1ZmZlciBhdCB8bmV4dF9idWZmZXJfaW5kZXhffCB3YXMKLSAgLy8gZGVsZXRlZCwgYW5kIGRlbGV0ZXMgdGhlIHxrZXlmcmFtZV9tYXBffCBlbnRyaWVzIGZvciB0aGUgYnVmZmVycyB0aGF0Ci0gIC8vIHdlcmUgcmVtb3ZlZC4KLSAgLy8gfGRlbGV0ZWRfYnVmZmVyc3wgY29udGFpbnMgdGhlIGJ1ZmZlcnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGlzIHJhbmdlLAotICAvLyBzdGFydGluZyBhdCB0aGUgYnVmZmVyIHRoYXQgaGFkIGJlZW4gYXQgfG5leHRfYnVmZmVyX2luZGV4X3wuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIGluIHRoZSByYW5nZSB3YXMgZGVsZXRlZC4gT3RoZXJ3aXNlCi0gIC8vIHJldHVybnMgZmFsc2UuCi0gIGJvb2wgVHJ1bmNhdGVBdChEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wLCBCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzLAotICAgICAgICAgICAgICAgICAgYm9vbCBpc19leGNsdXNpdmUpOwotICAvLyBEZWxldGVzIGFsbCBidWZmZXJzIGluIHJhbmdlLgotICB2b2lkIERlbGV0ZUFsbChCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzKTsKLQotICAvLyBEZWxldGVzIGEgR09QIGZyb20gdGhlIGZyb250IG9yIGJhY2sgb2YgdGhlIHJhbmdlIGFuZCBtb3ZlcyB0aGVzZQotICAvLyBidWZmZXJzIGludG8gfGRlbGV0ZWRfYnVmZmVyc3wuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBkZWxldGVkIGZyb20KLSAgLy8gdGhlIHJhbmdlIChpLmUuIHRoZSBzaXplIGluIGJ5dGVzIG9mIHxkZWxldGVkX2J1ZmZlcnN8KS4KLSAgLy8gVGhpcyByYW5nZSBtdXN0IE5PVCBiZSBlbXB0eSB3aGVuIHRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZC4KLSAgLy8gVGhlIEdPUCBiZWluZyBkZWxldGVkIG11c3QgTk9UIGNvbnRhaW4gdGhlIG5leHQgYnVmZmVyIHBvc2l0aW9uLgotICBzaXplX3QgRGVsZXRlR09QRnJvbUZyb250KEJ1ZmZlclF1ZXVlKiBkZWxldGVkX2J1ZmZlcnMpOwotICBzaXplX3QgRGVsZXRlR09QRnJvbUJhY2soQnVmZmVyUXVldWUqIGRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgLy8gR2V0cyB0aGUgcmFuZ2Ugb2YgR09QIHRvIHNlY3VyZSBhdCBsZWFzdCB8Ynl0ZXNfdG9fZnJlZXwgZnJvbQotICAvLyBbfHN0YXJ0X3RpbWVzdGFtcHwsIHxlbmRfdGltZXN0YW1wfCkuCi0gIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcnMgdG8gc2VjdXJlIGlmIHRoZSBidWZmZXJzIG9mCi0gIC8vIFt8c3RhcnRfdGltZXN0YW1wfCwgfGVuZF9yZW1vdmFsX3RpbWVzdGFtcHwpIGlzIHJlbW92ZWQuCi0gIC8vIFdpbGwgbm90IHVwZGF0ZSB8ZW5kX3JlbW92YWxfdGltZXN0YW1wfCBpZiB0aGUgcmV0dXJuZWQgc2l6ZSBpcyAwLgotICBzaXplX3QgR2V0UmVtb3ZhbEdPUChEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVUaW1lc3RhbXAgZW5kX3RpbWVzdGFtcCwgc2l6ZV90IGJ5dGVzX3RvX2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcCogZW5kX3JlbW92YWxfdGltZXN0YW1wKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBidWZmZXJlZCBlbmQgdGltZSBvZiB0aGUgZmlyc3QgR09QIGluIHRoaXMgcmFuZ2UgaXMKLSAgLy8gYXQgb3IgYmVmb3JlIHxtZWRpYV90aW1lfC4KLSAgYm9vbCBGaXJzdEdPUEVhcmxpZXJUaGFuTWVkaWFUaW1lKERlY29kZVRpbWVzdGFtcCBtZWRpYV90aW1lKSBjb25zdDsKLQotICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgR09QIGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSByYW5nZSBjb250YWlucyB0aGUKLSAgLy8gbmV4dCBidWZmZXIgcG9zaXRpb24uCi0gIGJvb2wgRmlyc3RHT1BDb250YWluc05leHRCdWZmZXJQb3NpdGlvbigpIGNvbnN0OwotICBib29sIExhc3RHT1BDb250YWluc05leHRCdWZmZXJQb3NpdGlvbigpIGNvbnN0OwotCi0gIC8vIFVwZGF0ZXMgfG91dF9idWZmZXJ8IHdpdGggdGhlIG5leHQgYnVmZmVyIGluIHByZXNlbnRhdGlvbiBvcmRlci4gU2VlaygpCi0gIC8vIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjYWxscyB0byBHZXROZXh0QnVmZmVyKCksIGFuZCBidWZmZXJzIGFyZSByZXR1cm5lZAotICAvLyBpbiBvcmRlciBmcm9tIHRoZSBsYXN0IGNhbGwgdG8gU2VlaygpLiBSZXR1cm5zIHRydWUgaWYgfG91dF9idWZmZXJ8IGlzCi0gIC8vIGZpbGxlZCB3aXRoIGEgdmFsaWQgYnVmZmVyLCBmYWxzZSBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgdG8gZnVsZmlsbAotICAvLyB0aGUgcmVxdWVzdC4KLSAgYm9vbCBHZXROZXh0QnVmZmVyKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiogb3V0X2J1ZmZlcik7Ci0gIGJvb2wgSGFzTmV4dEJ1ZmZlcigpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIGNvbmZpZyBJRCBmb3IgdGhlIGJ1ZmZlciB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgYnkKLSAgLy8gR2V0TmV4dEJ1ZmZlcigpLgotICBpbnQgR2V0TmV4dENvbmZpZ0lkKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByYW5nZSBrbm93cyB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgYnVmZmVyIGl0IHNob3VsZAotICAvLyByZXR1cm4sIGkuZS4gaXQgaGFzIGJlZW4gU2VlaygpZWQuIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGl0Ci0gIC8vIGhhcyB0aGUgbmV4dCBidWZmZXIgeWV0LgotICBib29sIEhhc05leHRCdWZmZXJQb3NpdGlvbigpIGNvbnN0OwotCi0gIC8vIFJlc2V0cyB0aGlzIHJhbmdlIHRvIGFuICJ1bnNlZWtlZCIgc3RhdGUuCi0gIHZvaWQgUmVzZXROZXh0QnVmZmVyUG9zaXRpb24oKTsKLQotICAvLyBSZXR1cm5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG5leHQgYnVmZmVyIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBmcm9tCi0gIC8vIEdldE5leHRCdWZmZXIoKSwgb3Iga05vVGltZXN0YW1wIGlmIHRoZSB0aW1lc3RhbXAgaXMgdW5rbm93bi4KLSAgRGVjb2RlVGltZXN0YW1wIEdldE5leHRUaW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBzdGFydCB0aW1lc3RhbXAgb2YgdGhlIHJhbmdlLgotICBEZWNvZGVUaW1lc3RhbXAgR2V0U3RhcnRUaW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgYnVmZmVyIGluIHRoZSByYW5nZS4KLSAgRGVjb2RlVGltZXN0YW1wIEdldEVuZFRpbWVzdGFtcCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIGVuZCBvZiB0aGUgYnVmZmVyZWQgcmVnaW9uIGluIHRoaXMgcmFuZ2UuCi0gIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBpZiB0aGUgZHVyYXRpb24gZm9yIHRoZSBsYXN0IGJ1ZmZlciBpbiB0aGUgcmFuZ2UKLSAgLy8gaXMgdW5zZXQuCi0gIERlY29kZVRpbWVzdGFtcCBHZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIGtleWZyYW1lIHRoYXQgaXMgYWZ0ZXIgfHRpbWVzdGFtcHwuIElmCi0gIC8vIHRoZXJlIGlzbid0IGEga2V5ZnJhbWUgaW4gdGhlIHJhbmdlIGFmdGVyIHx0aW1lc3RhbXB8IHRoZW4ga05vVGltZXN0YW1wCi0gIC8vIGlzIHJldHVybmVkLiBJZiB8dGltZXN0YW1wfCBpcyBpbiB0aGUgImdhcCIgYmV0d2VlbiB0aGUgdmFsdWUgIHJldHVybmVkIGJ5Ci0gIC8vIEdldFN0YXJ0VGltZXN0YW1wKCkgYW5kIHRoZSB0aW1lc3RhbXAgb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiB8YnVmZmVyc198LAotICAvLyB0aGVuIHx0aW1lc3RhbXB8IGlzIHJldHVybmVkLgotICBEZWNvZGVUaW1lc3RhbXAgTmV4dEtleWZyYW1lVGltZXN0YW1wKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIEdldHMgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIGNsb3Nlc3Qga2V5ZnJhbWUgdGhhdCBpcyA8PSB8dGltZXN0YW1wfC4gSWYKLSAgLy8gdGhlcmUgaXNuJ3QgYSBrZXlmcmFtZSBiZWZvcmUgfHRpbWVzdGFtcHwgb3IgfHRpbWVzdGFtcHwgaXMgb3V0c2lkZQotICAvLyB0aGlzIHJhbmdlLCB0aGVuIGtOb1RpbWVzdGFtcCBpcyByZXR1cm5lZC4KLSAgRGVjb2RlVGltZXN0YW1wIEtleWZyYW1lQmVmb3JlVGltZXN0YW1wKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIFJldHVybnMgd2hldGhlciBhIGJ1ZmZlciB3aXRoIGEgc3RhcnRpbmcgdGltZXN0YW1wIG9mIHx0aW1lc3RhbXB8IHdvdWxkCi0gIC8vIGJlbG9uZyBpbiB0aGlzIHJhbmdlLiBUaGlzIGluY2x1ZGVzIGEgYnVmZmVyIHRoYXQgd291bGQgYmUgYXBwZW5kZWQgdG8KLSAgLy8gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCi0gIGJvb2wgQmVsb25nc1RvUmFuZ2UoRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSByYW5nZSBoYXMgZW5vdWdoIGRhdGEgdG8gc2VlayB0byB0aGUgc3BlY2lmaWVkCi0gIC8vIHx0aW1lc3RhbXB8LCBmYWxzZSBvdGhlcndpc2UuCi0gIGJvb2wgQ2FuU2Vla1RvKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJhbmdlJ3MgYnVmZmVyZWQgdGltZXNwYW4gY29tcGxldGVseSBvdmVybGFwcyB0aGUKLSAgLy8gYnVmZmVyZWQgdGltZXNwYW4gb2YgfHJhbmdlfC4KLSAgYm9vbCBDb21wbGV0ZWx5T3ZlcmxhcHMoY29uc3QgU291cmNlQnVmZmVyUmFuZ2UmIHJhbmdlKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZCBvZiB0aGlzIHJhbmdlIGNvbnRhaW5zIGJ1ZmZlcnMgdGhhdCBvdmVybGFwcyB3aXRoCi0gIC8vIHRoZSBiZWdpbm5pbmcgb2YgfHJhbmdlfC4KLSAgYm9vbCBFbmRPdmVybGFwcyhjb25zdCBTb3VyY2VCdWZmZXJSYW5nZSYgcmFuZ2UpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8dGltZXN0YW1wfCBpcyB0aGUgdGltZXN0YW1wIG9mIHRoZSBuZXh0IGJ1ZmZlciBpbgotICAvLyBzZXF1ZW5jZSBhZnRlciB8YnVmZmVyc18uYmFjaygpfCwgZmFsc2Ugb3RoZXJ3aXNlLgotICBib29sIElzTmV4dEluU2VxdWVuY2UoRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgY29uc3Q7Ci0KLSAgLy8gQWRkcyBhbGwgYnVmZmVycyB3aGljaCBvdmVybGFwIFtzdGFydCwgZW5kKSB0byB0aGUgZW5kIG9mIHxidWZmZXJzfC4gIElmCi0gIC8vIG5vIGJ1ZmZlcnMgZXhpc3QgaW4gdGhlIHJhbmdlIHJldHVybnMgZmFsc2UsIHRydWUgb3RoZXJ3aXNlLgotICBib29sIEdldEJ1ZmZlcnNJblJhbmdlKERlY29kZVRpbWVzdGFtcCBzdGFydCwgRGVjb2RlVGltZXN0YW1wIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJRdWV1ZSogYnVmZmVycyk7Ci0KLSAgc2l6ZV90IHNpemVfaW5fYnl0ZXMoKSBjb25zdCB7IHJldHVybiBzaXplX2luX2J5dGVzXzsgfQotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBzdGQ6Om1hcDxEZWNvZGVUaW1lc3RhbXAsIGludD4gS2V5ZnJhbWVNYXA7Ci0KLSAgLy8gQ2FsbGVkIGR1cmluZyBBcHBlbmRCdWZmZXJzVG9FbmQgdG8gYWRqdXN0IGVzdGltYXRlZCBkdXJhdGlvbiBhdCB0aGUKLSAgLy8gZW5kIG9mIHRoZSBsYXN0IGFwcGVuZCB0byBtYXRjaCB0aGUgZGVsdGEgaW4gdGltZXN0YW1wcyBiZXR3ZWVuCi0gIC8vIHRoZSBsYXN0IGFwcGVuZCBhbmQgdGhlIHVwY29taW5nIGFwcGVuZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yCi0gIC8vIFdlYk0gbWVkaWEgd2hlcmUgYSBkdXJhdGlvbiBpcyBub3QgYWx3YXlzIHNwZWNpZmllZC4KLSAgdm9pZCBBZGp1c3RFc3RpbWF0ZWREdXJhdGlvbkZvck5ld0FwcGVuZChjb25zdCBCdWZmZXJRdWV1ZSYgbmV3X2J1ZmZlcnMpOwotCi0gIC8vIFNlZWtzIHRoZSByYW5nZSB0byB0aGUgbmV4dCBrZXlmcmFtZSBhZnRlciB8dGltZXN0YW1wfC4gSWYKLSAgLy8gfHNraXBfZ2l2ZW5fdGltZXN0YW1wfCBpcyB0cnVlLCB0aGUgc2VlayB3aWxsIGdvIHRvIGEga2V5ZnJhbWUgd2l0aCBhCi0gIC8vIHRpbWVzdGFtcCBzdHJpY3RseSBncmVhdGVyIHRoYW4gfHRpbWVzdGFtcHwuCi0gIHZvaWQgU2Vla0FoZWFkKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgc2tpcF9naXZlbl90aW1lc3RhbXApOwotCi0gIC8vIFJldHVybnMgYW4gaXRlcmF0b3IgaW4gfGJ1ZmZlcnNffCBwb2ludGluZyB0byB0aGUgYnVmZmVyIGF0IHx0aW1lc3RhbXB8LgotICAvLyBJZiB8c2tpcF9naXZlbl90aW1lc3RhbXB8IGlzIHRydWUsIHRoaXMgcmV0dXJucyB0aGUgZmlyc3QgYnVmZmVyIHdpdGgKLSAgLy8gdGltZXN0YW1wIGdyZWF0ZXIgdGhhbiB8dGltZXN0YW1wfC4KLSAgQnVmZmVyUXVldWU6Oml0ZXJhdG9yIEdldEJ1ZmZlckl0ckF0KERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNraXBfZ2l2ZW5fdGltZXN0YW1wKTsKLQotICAvLyBSZXR1cm5zIGFuIGl0ZXJhdG9yIGluIHxrZXlmcmFtZV9tYXBffCBwb2ludGluZyB0byB0aGUgbmV4dCBrZXlmcmFtZSBhZnRlcgotICAvLyB8dGltZXN0YW1wfC4gSWYgfHNraXBfZ2l2ZW5fdGltZXN0YW1wfCBpcyB0cnVlLCB0aGlzIHJldHVybnMgdGhlIGZpcnN0Ci0gIC8vIGtleWZyYW1lIHdpdGggYSB0aW1lc3RhbXAgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHx0aW1lc3RhbXB8LgotICBLZXlmcmFtZU1hcDo6aXRlcmF0b3IgR2V0Rmlyc3RLZXlmcmFtZUF0KERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBza2lwX2dpdmVuX3RpbWVzdGFtcCk7Ci0KLSAgLy8gUmV0dXJucyBhbiBpdGVyYXRvciBpbiB8a2V5ZnJhbWVfbWFwX3wgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGtleWZyYW1lCi0gIC8vIGJlZm9yZSBvciBhdCB8dGltZXN0YW1wfC4KLSAgS2V5ZnJhbWVNYXA6Oml0ZXJhdG9yIEdldEZpcnN0S2V5ZnJhbWVBdE9yQmVmb3JlKERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIEhlbHBlciBtZXRob2QgdG8gZGVsZXRlIGJ1ZmZlcnMgaW4gfGJ1ZmZlcnNffCBzdGFydGluZyBhdAotICAvLyB8c3RhcnRpbmdfcG9pbnR8LCBhbiBpdGVyYXRvciBpbiB8YnVmZmVyc198LgotICAvLyBSZXR1cm5zIHRydWUgaWYgZXZlcnl0aGluZyBpbiB0aGUgcmFuZ2Ugd2FzIHJlbW92ZWQuIFJldHVybnMKLSAgLy8gZmFsc2UgaWYgdGhlIHJhbmdlIHN0aWxsIGNvbnRhaW5zIGJ1ZmZlcnMuCi0gIGJvb2wgVHJ1bmNhdGVBdChjb25zdCBCdWZmZXJRdWV1ZTo6aXRlcmF0b3ImIHN0YXJ0aW5nX3BvaW50LAotICAgICAgICAgICAgICAgICAgQnVmZmVyUXVldWUqIGRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgLy8gRnJlZXMgdGhlIGJ1ZmZlcnMgaW4gfGJ1ZmZlcnNffCBmcm9tIFt8c3RhcnRfcG9pbnR8LHxlbmRpbmdfcG9pbnR8KSBhbmQKLSAgLy8gdXBkYXRlcyB0aGUgfHNpemVfaW5fYnl0ZXNffCBhY2NvcmRpbmdseS4gRG9lcyBub3QgdXBkYXRlIHxrZXlmcmFtZV9tYXBffC4KLSAgdm9pZCBGcmVlQnVmZmVyUmFuZ2UoY29uc3QgQnVmZmVyUXVldWU6Oml0ZXJhdG9yJiBzdGFydGluZ19wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVmZmVyUXVldWU6Oml0ZXJhdG9yJiBlbmRpbmdfcG9pbnQpOwotCi0gIC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGluIHRpbWUgZXN0aW1hdGluZyBob3cgZmFyIGZyb20gdGhlIGJlZ2lubmluZyBvciBlbmQKLSAgLy8gb2YgdGhpcyByYW5nZSBhIGJ1ZmZlciBjYW4gYmUgdG8gY29uc2lkZXJlZCBpbiB0aGUgcmFuZ2UuCi0gIGJhc2U6OlRpbWVEZWx0YSBHZXRGdWRnZVJvb20oKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBhcHByb3hpbWF0ZSBkdXJhdGlvbiBvZiBhIGJ1ZmZlciBpbiB0aGlzIHJhbmdlLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0QXBwcm94aW1hdGVEdXJhdGlvbigpIGNvbnN0OwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgZ2FwcyBhcmUgYWxsb3dlZC4KLSAgY29uc3QgR2FwUG9saWN5IGdhcF9wb2xpY3lfOwotCi0gIC8vIEFuIG9yZGVyZWQgbGlzdCBvZiBidWZmZXJzIGluIHRoaXMgcmFuZ2UuCi0gIEJ1ZmZlclF1ZXVlIGJ1ZmZlcnNfOwotCi0gIC8vIE1hcHMga2V5ZnJhbWUgdGltZXN0YW1wcyB0byBpdHMgaW5kZXggcG9zaXRpb24gaW4gfGJ1ZmZlcnNffC4KLSAgS2V5ZnJhbWVNYXAga2V5ZnJhbWVfbWFwXzsKLQotICAvLyBJbmRleCBiYXNlIG9mIGFsbCBwb3NpdGlvbnMgaW4gfGtleWZyYW1lX21hcF98LiBJbiBvdGhlciB3b3JkcywgdGhlCi0gIC8vIHJlYWwgcG9zaXRpb24gb2YgZW50cnkgfGt8IG9mIHxrZXlmcmFtZV9tYXBffCBpbiB0aGUgcmFuZ2UgaXM6Ci0gIC8vICAga2V5ZnJhbWVfbWFwX1trXSAtIGtleWZyYW1lX21hcF9pbmRleF9iYXNlXwotICBpbnQga2V5ZnJhbWVfbWFwX2luZGV4X2Jhc2VfOwotCi0gIC8vIEluZGV4IGludG8gfGJ1ZmZlcnNffCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJlIHJldHVybmVkIGJ5Ci0gIC8vIEdldE5leHRCdWZmZXIoKSwgc2V0IHRvIC0xIGJlZm9yZSBTZWVrKCkuCi0gIGludCBuZXh0X2J1ZmZlcl9pbmRleF87Ci0KLSAgLy8gSWYgdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGlzIHJhbmdlIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlZCBmcmFtZSBncm91cCwKLSAgLy8gfHJhbmdlX3N0YXJ0X3RpbWVffCBpcyB0aGUgdGltZSB3aGVuIHRoZSBjb2RlZCBmcmFtZSBncm91cCBiZWdpbnMuIFRoaXMgaXMKLSAgLy8gZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gbXV4ZWQgbWVkaWEgd2hlcmUgdGhlIGZpcnN0IGNvZGVkIGZyYW1lcyBmb3IgZWFjaAotICAvLyB0cmFjayBkbyBub3QgbmVjZXNzYXJpbHkgYmVnaW4gYXQgdGhlIHNhbWUgdGltZS4KLSAgLy8gfHJhbmdlX3N0YXJ0X3RpbWVffCBtYXkgYmUgPD0gdGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3QgYnVmZmVyIGluCi0gIC8vIHxidWZmZXJzX3wuIHxyYW5nZV9zdGFydF90aW1lX3wgaXMga05vRGVjb2RlVGltZXN0YW1wKCkgaWYgdGhpcyByYW5nZSBkb2VzCi0gIC8vIG5vdCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29kZWQgZnJhbWUgZ3JvdXAsIHdoaWNoIGNhbiBoYXBwZW4gYnkKLSAgLy8gcmFuZ2UgcmVtb3ZhbCBvciBzcGxpdCB3aGVuIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Yga25vd2luZywgYWNyb3NzCi0gIC8vIHBvdGVudGlhbGx5IG11bHRpcGxlIG11eGVkIHN0cmVhbXMsIHRoZSBjb2RlZCBmcmFtZSBncm91cCBzdGFydCB0aW1lc3RhbXAKLSAgLy8gZm9yIHRoZSBuZXcgcmFuZ2UuCi0gIERlY29kZVRpbWVzdGFtcCByYW5nZV9zdGFydF90aW1lXzsKLQotICAvLyBDYWxsZWQgdG8gZ2V0IHRoZSBsYXJnZXN0IGludGVyYnVmZmVyIGRpc3RhbmNlIHNlZW4gc28gZmFyIGluIHRoZSBzdHJlYW0uCi0gIEludGVyYnVmZmVyRGlzdGFuY2VDQiBpbnRlcmJ1ZmZlcl9kaXN0YW5jZV9jYl87Ci0KLSAgLy8gU3RvcmVzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRha2VuIHVwIGJ5IHRoZSBkYXRhIGluIHxidWZmZXJzX3wuCi0gIHNpemVfdCBzaXplX2luX2J5dGVzXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU291cmNlQnVmZmVyUmFuZ2UpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfU09VUkNFX0JVRkZFUl9SQU5HRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZS5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YTQ0ODUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDk1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2tfaGVscGVycy5oIgotI2luY2x1ZGUgImJhc2UvY29tbWFuZF9saW5lLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFjay5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21pbWVfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9mcmFtZV9wcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWVudW0gewotICAvLyBMaW1pdHMgdGhlIG51bWJlciBvZiBNRURJQV9MT0coKSBjYWxscyB3YXJuaW5nIHRoZSB1c2VyIHRoYXQgYSBtdXhlZCBzdHJlYW0KLSAgLy8gbWVkaWEgc2VnbWVudCBpcyBtaXNzaW5nIGEgYmxvY2sgZnJvbSBhdCBsZWFzdCBvbmUgb2YgdGhlIGF1ZGlvIG9yIHZpZGVvCi0gIC8vIHRyYWNrcy4KLSAga01heE1pc3NpbmdUcmFja0luU2VnbWVudExvZ3MgPSAxMCwKLX07Ci0KLW5hbWVzcGFjZSB7Ci0KLVRpbWVEZWx0YSBFbmRUaW1lc3RhbXAoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSYgcXVldWUpIHsKLSAgcmV0dXJuIHF1ZXVlLmJhY2soKS0+dGltZXN0YW1wKCkgKyBxdWV1ZS5iYWNrKCktPmR1cmF0aW9uKCk7Ci19Ci0KLS8vIENoZWNrIHRoZSBpbnB1dCB8dGV4dF9jb25maWdzfCBhbmQgfGJ5dGVzdHJlYW1faWRzfCBhbmQgcmV0dXJuIGZhbHNlIGlmCi0vLyBkdXBsaWNhdGUgdHJhY2sgaWRzIGFyZSBkZXRlY3RlZC4KLWJvb2wgQ2hlY2tCeXRlc3RyZWFtVHJhY2tJZHMoCi0gICAgY29uc3QgTWVkaWFUcmFja3MmIHRyYWNrcywKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcCYgdGV4dF9jb25maWdzKSB7Ci0gIHN0ZDo6c2V0PFN0cmVhbVBhcnNlcjo6VHJhY2tJZD4gYnl0ZXN0cmVhbV9pZHM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLnRyYWNrcygpLnNpemUoKTsgKytpKSB7Ci0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpUcmFja0lkJiB0cmFja19pZCA9Ci0gICAgICAgIHRyYWNrcy50cmFja3MoKVtpXS0+Ynl0ZXN0cmVhbV90cmFja19pZCgpOwotICAgIGlmIChieXRlc3RyZWFtX2lkcy5maW5kKHRyYWNrX2lkKSAhPSBieXRlc3RyZWFtX2lkcy5lbmQoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBieXRlc3RyZWFtX2lkcy5pbnNlcnQodHJhY2tfaWQpOwotICB9Ci0gIGZvciAoU3RyZWFtUGFyc2VyOjpUZXh0VHJhY2tDb25maWdNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICB0ZXh0X2NvbmZpZ3MuYmVnaW4oKTsKLSAgICAgICBpdGVyICE9IHRleHRfY29uZmlncy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpUcmFja0lkJiB0cmFja19pZCA9IGl0ZXItPmZpcnN0OwotICAgIGlmIChieXRlc3RyZWFtX2lkcy5maW5kKHRyYWNrX2lkKSAhPSBieXRlc3RyZWFtX2lkcy5lbmQoKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBieXRlc3RyZWFtX2lkcy5pbnNlcnQodHJhY2tfaWQpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotLy8gTGlzdCBvZiB0aW1lIHJhbmdlcyBmb3IgZWFjaCBTb3VyY2VCdWZmZXIuCi0vLyBzdGF0aWMKLVJhbmdlczxUaW1lRGVsdGE+IFNvdXJjZUJ1ZmZlclN0YXRlOjpDb21wdXRlUmFuZ2VzSW50ZXJzZWN0aW9uKAotICAgIGNvbnN0IFJhbmdlc0xpc3QmIGFjdGl2ZV9yYW5nZXMsIGJvb2wgZW5kZWQpIHsKLSAgLy8gVE9ETyhzZXJ2b2xrKTogUGVyaGFwcyB0aGlzIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGJsaW5rIGltcGxlbWVudGF0aW9uCi0gIC8vIChNZWRpYVNvdXJjZTo6YnVmZmVyZWQpPyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgb24gQW5kcm9pZCBhbmQgZm9yCi0gIC8vIHVwZGF0aW5nIERlbXV4ZXJIb3N0J3MgYnVmZmVyZWQgcmFuZ2VzIGR1cmluZyBBcHBlbmREYXRhKCkgYXMgd2VsbCBhcwotICAvLyBTb3VyY2VCdWZmZXIuYnVmZmVyZWQgcHJvcGVydHkgaW1wbGVtZW50YXRpb24uCi0gIC8vIEltcGxlbWVudGF0aW9uIG9mIEhUTUxNZWRpYUVsZW1lbnQuYnVmZmVyZWQgYWxnb3JpdGhtIGluIE1TRSBzcGVjLgotICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvZGVmYXVsdC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjZG9tLWh0bWxtZWRpYWVsZW1lbnQuYnVmZmVyZWQKLQotICAvLyBTdGVwIDE6IElmIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMubGVuZ3RoIGVxdWFscyAwIHRoZW4gcmV0dXJuIGFuIGVtcHR5Ci0gIC8vICBUaW1lUmFuZ2VzIG9iamVjdCBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCi0gIGlmIChhY3RpdmVfcmFuZ2VzLmVtcHR5KCkpIHJldHVybiBSYW5nZXM8VGltZURlbHRhPigpOwotCi0gIC8vIFN0ZXAgMjogTGV0IGFjdGl2ZSByYW5nZXMgYmUgdGhlIHJhbmdlcyByZXR1cm5lZCBieSBidWZmZXJlZCBmb3IgZWFjaAotICAvLyAgU291cmNlQnVmZmVyIG9iamVjdCBpbiBhY3RpdmVTb3VyY2VCdWZmZXJzLgotICAvLyBTdGVwIDM6IExldCBoaWdoZXN0IGVuZCB0aW1lIGJlIHRoZSBsYXJnZXN0IHJhbmdlIGVuZCB0aW1lIGluIHRoZSBhY3RpdmUKLSAgLy8gIHJhbmdlcy4KLSAgVGltZURlbHRhIGhpZ2hlc3RfZW5kX3RpbWU7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlX3Jhbmdlcy5zaXplKCk7ICsraSkgewotICAgIGlmICghYWN0aXZlX3Jhbmdlc1tpXS5zaXplKCkpIGNvbnRpbnVlOwotCi0gICAgaGlnaGVzdF9lbmRfdGltZSA9IHN0ZDo6bWF4KAotICAgICAgICBoaWdoZXN0X2VuZF90aW1lLCBhY3RpdmVfcmFuZ2VzW2ldLmVuZChhY3RpdmVfcmFuZ2VzW2ldLnNpemUoKSAtIDEpKTsKLSAgfQotCi0gIC8vIFN0ZXAgNDogTGV0IGludGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgYSBUaW1lUmFuZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgYQotICAvLyAgc2luZ2xlIHJhbmdlIGZyb20gMCB0byBoaWdoZXN0IGVuZCB0aW1lLgotICBSYW5nZXM8VGltZURlbHRhPiBpbnRlcnNlY3Rpb25fcmFuZ2VzOwotICBpbnRlcnNlY3Rpb25fcmFuZ2VzLkFkZChUaW1lRGVsdGEoKSwgaGlnaGVzdF9lbmRfdGltZSk7Ci0KLSAgLy8gU3RlcCA1OiBGb3IgZWFjaCBTb3VyY2VCdWZmZXIgb2JqZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMgcnVuIHRoZQotICAvLyAgZm9sbG93aW5nIHN0ZXBzOgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZV9yYW5nZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAvLyBTdGVwIDUuMTogTGV0IHNvdXJjZSByYW5nZXMgZXF1YWwgdGhlIHJhbmdlcyByZXR1cm5lZCBieSB0aGUgYnVmZmVyZWQKLSAgICAvLyAgYXR0cmlidXRlIG9uIHRoZSBjdXJyZW50IFNvdXJjZUJ1ZmZlci4KLSAgICBSYW5nZXM8VGltZURlbHRhPiBzb3VyY2VfcmFuZ2VzID0gYWN0aXZlX3Jhbmdlc1tpXTsKLQotICAgIC8vIFN0ZXAgNS4yOiBJZiByZWFkeVN0YXRlIGlzICJlbmRlZCIsIHRoZW4gc2V0IHRoZSBlbmQgdGltZSBvbiB0aGUgbGFzdAotICAgIC8vICByYW5nZSBpbiBzb3VyY2UgcmFuZ2VzIHRvIGhpZ2hlc3QgZW5kIHRpbWUuCi0gICAgaWYgKGVuZGVkICYmIHNvdXJjZV9yYW5nZXMuc2l6ZSgpKSB7Ci0gICAgICBzb3VyY2VfcmFuZ2VzLkFkZChzb3VyY2VfcmFuZ2VzLnN0YXJ0KHNvdXJjZV9yYW5nZXMuc2l6ZSgpIC0gMSksCi0gICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2VuZF90aW1lKTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDUuMzogTGV0IG5ldyBpbnRlcnNlY3Rpb24gcmFuZ2VzIGVxdWFsIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbgotICAgIC8vIHRoZSBpbnRlcnNlY3Rpb24gcmFuZ2VzIGFuZCB0aGUgc291cmNlIHJhbmdlcy4KLSAgICAvLyBTdGVwIDUuNDogUmVwbGFjZSB0aGUgcmFuZ2VzIGluIGludGVyc2VjdGlvbiByYW5nZXMgd2l0aCB0aGUgbmV3Ci0gICAgLy8gaW50ZXJzZWN0aW9uIHJhbmdlcy4KLSAgICBpbnRlcnNlY3Rpb25fcmFuZ2VzID0gaW50ZXJzZWN0aW9uX3Jhbmdlcy5JbnRlcnNlY3Rpb25XaXRoKHNvdXJjZV9yYW5nZXMpOwotICB9Ci0KLSAgcmV0dXJuIGludGVyc2VjdGlvbl9yYW5nZXM7Ci19Ci0KLVNvdXJjZUJ1ZmZlclN0YXRlOjpTb3VyY2VCdWZmZXJTdGF0ZSgKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RyZWFtUGFyc2VyPiBzdHJlYW1fcGFyc2VyLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxGcmFtZVByb2Nlc3Nvcj4gZnJhbWVfcHJvY2Vzc29yLAotICAgIGNvbnN0IENyZWF0ZURlbXV4ZXJTdHJlYW1DQiYgY3JlYXRlX2RlbXV4ZXJfc3RyZWFtX2NiLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yKQotICAgIDogbnVtX21pc3NpbmdfdHJhY2tfbG9nc18oMCksCi0gICAgICBjcmVhdGVfZGVtdXhlcl9zdHJlYW1fY2JfKGNyZWF0ZV9kZW11eGVyX3N0cmVhbV9jYiksCi0gICAgICB0aW1lc3RhbXBfb2Zmc2V0X2R1cmluZ19hcHBlbmRfKE5VTEwpLAotICAgICAgcGFyc2luZ19tZWRpYV9zZWdtZW50XyhmYWxzZSksCi0gICAgICBzdHJlYW1fcGFyc2VyXyhzdHJlYW1fcGFyc2VyLnJlbGVhc2UoKSksCi0gICAgICBmcmFtZV9wcm9jZXNzb3JfKGZyYW1lX3Byb2Nlc3Nvci5yZWxlYXNlKCkpLAotICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAotICAgICAgc3RhdGVfKFVOSU5JVElBTElaRUQpLAotICAgICAgYXBwZW5kX2luX3Byb2dyZXNzXyhmYWxzZSksCi0gICAgICBmaXJzdF9pbml0X3NlZ21lbnRfcmVjZWl2ZWRfKGZhbHNlKSwKLSAgICAgIGF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXRfKGZhbHNlKSwKLSAgICAgIGJ1ZmZlcl9hbGxvY2F0b3JfKGJ1ZmZlcl9hbGxvY2F0b3IpIHsKLSAgRENIRUNLKCFjcmVhdGVfZGVtdXhlcl9zdHJlYW1fY2JfLmlzX251bGwoKSk7Ci0gIERDSEVDSyhmcmFtZV9wcm9jZXNzb3JfKTsKLX0KLQotU291cmNlQnVmZmVyU3RhdGU6On5Tb3VyY2VCdWZmZXJTdGF0ZSgpIHsgU2h1dGRvd24oKTsgfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpJbml0KAotICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdENCJiBpbml0X2NiLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRfY29kZWNzLAotICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6RW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCJiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgIGNvbnN0IE5ld1RleHRUcmFja0NCJiBuZXdfdGV4dF90cmFja19jYikgewotICBEQ0hFQ0tfRVEoc3RhdGVfLCBVTklOSVRJQUxJWkVEKTsKLSAgbmV3X3RleHRfdHJhY2tfY2JfID0gbmV3X3RleHRfdHJhY2tfY2I7Ci0gIGluaXRfY2JfID0gaW5pdF9jYjsKLQotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZXhwZWN0ZWRfY29kZWNzX3BhcnNlZDsKLSAgUGFyc2VDb2RlY1N0cmluZyhleHBlY3RlZF9jb2RlY3MsICZleHBlY3RlZF9jb2RlY3NfcGFyc2VkLCBmYWxzZSk7Ci0KLSAgc3RkOjp2ZWN0b3I8QXVkaW9Db2RlYz4gZXhwZWN0ZWRfYWNvZGVjczsKLSAgc3RkOjp2ZWN0b3I8VmlkZW9Db2RlYz4gZXhwZWN0ZWRfdmNvZGVjczsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZF9jb2RlY3NfcGFyc2VkLnNpemUoKTsgKytpKSB7Ci0gICAgQXVkaW9Db2RlYyBhY29kZWMgPSBTdHJpbmdUb0F1ZGlvQ29kZWMoZXhwZWN0ZWRfY29kZWNzX3BhcnNlZFtpXSk7Ci0gICAgaWYgKGFjb2RlYyAhPSBrVW5rbm93bkF1ZGlvQ29kZWMpIHsKLSAgICAgIGV4cGVjdGVkX2F1ZGlvX2NvZGVjc18ucHVzaF9iYWNrKGFjb2RlYyk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgVmlkZW9Db2RlYyB2Y29kZWMgPSBTdHJpbmdUb1ZpZGVvQ29kZWMoZXhwZWN0ZWRfY29kZWNzX3BhcnNlZFtpXSk7Ci0gICAgaWYgKHZjb2RlYyAhPSBrVW5rbm93blZpZGVvQ29kZWMpIHsKLSAgICAgIGV4cGVjdGVkX3ZpZGVvX2NvZGVjc18ucHVzaF9iYWNrKHZjb2RlYyk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgTUVESUFfTE9HKElORk8sIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJVbnJlY29nbml6ZWQgbWVkaWEgY29kZWM6ICIgPDwgZXhwZWN0ZWRfY29kZWNzX3BhcnNlZFtpXTsKLSAgfQotCi0gIHN0YXRlXyA9IFBFTkRJTkdfUEFSU0VSX0NPTkZJRzsKLSAgc3RyZWFtX3BhcnNlcl8tPkluaXQoCi0gICAgICBiYXNlOjpCaW5kKCZTb3VyY2VCdWZmZXJTdGF0ZTo6T25Tb3VyY2VJbml0RG9uZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZTb3VyY2VCdWZmZXJTdGF0ZTo6T25OZXdDb25maWdzLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLAotICAgICAgICAgICAgICAgICBleHBlY3RlZF9jb2RlY3MpLAotICAgICAgYmFzZTo6QmluZCgmU291cmNlQnVmZmVyU3RhdGU6Ok9uTmV3QnVmZmVycywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBuZXdfdGV4dF90cmFja19jYl8uaXNfbnVsbCgpLCBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgICAgYmFzZTo6QmluZCgmU291cmNlQnVmZmVyU3RhdGU6Ok9uTmV3TWVkaWFTZWdtZW50LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIGJhc2U6OkJpbmQoJlNvdXJjZUJ1ZmZlclN0YXRlOjpPbkVuZE9mTWVkaWFTZWdtZW50LAotICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIG1lZGlhX2xvZ18pOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpTZXRTZXF1ZW5jZU1vZGUoYm9vbCBzZXF1ZW5jZV9tb2RlKSB7Ci0gIERDSEVDSyghcGFyc2luZ19tZWRpYV9zZWdtZW50Xyk7Ci0KLSAgZnJhbWVfcHJvY2Vzc29yXy0+U2V0U2VxdWVuY2VNb2RlKHNlcXVlbmNlX21vZGUpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpTZXRHcm91cFN0YXJ0VGltZXN0YW1wSWZJblNlcXVlbmNlTW9kZSgKLSAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wX29mZnNldCkgewotICBEQ0hFQ0soIXBhcnNpbmdfbWVkaWFfc2VnbWVudF8pOwotCi0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlNldEdyb3VwU3RhcnRUaW1lc3RhbXBJZkluU2VxdWVuY2VNb2RlKHRpbWVzdGFtcF9vZmZzZXQpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpTZXRUcmFja3NXYXRjaGVyKAotICAgIGNvbnN0IERlbXV4ZXI6Ok1lZGlhVHJhY2tzVXBkYXRlZENCJiB0cmFja3NfdXBkYXRlZF9jYikgewotICBEQ0hFQ0soaW5pdF9zZWdtZW50X3JlY2VpdmVkX2NiXy5pc19udWxsKCkpOwotICBEQ0hFQ0soIXRyYWNrc191cGRhdGVkX2NiLmlzX251bGwoKSk7Ci0gIGluaXRfc2VnbWVudF9yZWNlaXZlZF9jYl8gPSB0cmFja3NfdXBkYXRlZF9jYjsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdGF0ZTo6QXBwZW5kKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVEZWx0YSogdGltZXN0YW1wX29mZnNldCkgewotICBhcHBlbmRfaW5fcHJvZ3Jlc3NfID0gdHJ1ZTsKLSAgRENIRUNLKHRpbWVzdGFtcF9vZmZzZXQpOwotICBEQ0hFQ0soIXRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8pOwotICBhcHBlbmRfd2luZG93X3N0YXJ0X2R1cmluZ19hcHBlbmRfID0gYXBwZW5kX3dpbmRvd19zdGFydDsKLSAgYXBwZW5kX3dpbmRvd19lbmRfZHVyaW5nX2FwcGVuZF8gPSBhcHBlbmRfd2luZG93X2VuZDsKLSAgdGltZXN0YW1wX29mZnNldF9kdXJpbmdfYXBwZW5kXyA9IHRpbWVzdGFtcF9vZmZzZXQ7Ci0KLSAgLy8gVE9ETyh3b2xlbmV0ei9hY29sd2VsbCk6IEN1cnJ5IGFuZCBwYXNzIGEgTmV3QnVmZmVyc0NCIGhlcmUgYm91bmQgd2l0aAotICAvLyBhcHBlbmQgd2luZG93IGFuZCB0aW1lc3RhbXAgb2Zmc2V0IHBvaW50ZXIuIFNlZSBodHRwOi8vY3JidWcuY29tLzM1MTQ1NC4KLSAgYm9vbCByZXN1bHQgPSBzdHJlYW1fcGFyc2VyXy0+UGFyc2UoZGF0YSwgbGVuZ3RoKTsKLSAgaWYgKCFyZXN1bHQpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8IF9fZnVuY19fIDw8ICI6IHN0cmVhbSBwYXJzaW5nIGZhaWxlZC4gRGF0YSBzaXplPSIgPDwgbGVuZ3RoCi0gICAgICAgIDw8ICIgYXBwZW5kX3dpbmRvd19zdGFydD0iIDw8IGFwcGVuZF93aW5kb3dfc3RhcnQuSW5TZWNvbmRzRigpCi0gICAgICAgIDw8ICIgYXBwZW5kX3dpbmRvd19lbmQ9IiA8PCBhcHBlbmRfd2luZG93X2VuZC5JblNlY29uZHNGKCk7Ci0gIH0KLSAgdGltZXN0YW1wX29mZnNldF9kdXJpbmdfYXBwZW5kXyA9IE5VTEw7Ci0gIGFwcGVuZF9pbl9wcm9ncmVzc18gPSBmYWxzZTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6UmVzZXRQYXJzZXJTdGF0ZShUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpIHsKLSAgRENIRUNLKHRpbWVzdGFtcF9vZmZzZXQpOwotICBEQ0hFQ0soIXRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8pOwotICB0aW1lc3RhbXBfb2Zmc2V0X2R1cmluZ19hcHBlbmRfID0gdGltZXN0YW1wX29mZnNldDsKLSAgYXBwZW5kX3dpbmRvd19zdGFydF9kdXJpbmdfYXBwZW5kXyA9IGFwcGVuZF93aW5kb3dfc3RhcnQ7Ci0gIGFwcGVuZF93aW5kb3dfZW5kX2R1cmluZ19hcHBlbmRfID0gYXBwZW5kX3dpbmRvd19lbmQ7Ci0KLSAgc3RyZWFtX3BhcnNlcl8tPkZsdXNoKCk7Ci0gIHRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8gPSBOVUxMOwotCi0gIGZyYW1lX3Byb2Nlc3Nvcl8tPlJlc2V0KCk7Ci0gIHBhcnNpbmdfbWVkaWFfc2VnbWVudF8gPSBmYWxzZTsKLSAgbWVkaWFfc2VnbWVudF9oYXNfZGF0YV9mb3JfdHJhY2tfLmNsZWFyKCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RhdGU6OlJlbW92ZShUaW1lRGVsdGEgc3RhcnQsIFRpbWVEZWx0YSBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZURlbHRhIGR1cmF0aW9uKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+UmVtb3ZlKHN0YXJ0LCBlbmQsIGR1cmF0aW9uKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+UmVtb3ZlKHN0YXJ0LCBlbmQsIGR1cmF0aW9uKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPlJlbW92ZShzdGFydCwgZW5kLCBkdXJhdGlvbik7Ci0gIH0KLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdGF0ZTo6RXZpY3RDb2RlZEZyYW1lcyhEZWNvZGVUaW1lc3RhbXAgbWVkaWFfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ld0RhdGFTaXplKSB7Ci0gIHNpemVfdCB0b3RhbF9idWZmZXJlZF9zaXplID0gMDsKLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IGF1ZGlvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYXVkaW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICB0b3RhbF9idWZmZXJlZF9zaXplICs9IGl0LT5zZWNvbmQtPkdldEJ1ZmZlcmVkU2l6ZSgpOwotICB9Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgdG90YWxfYnVmZmVyZWRfc2l6ZSArPSBpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFNpemUoKTsKLSAgfQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dF9zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICB0b3RhbF9idWZmZXJlZF9zaXplICs9IGl0LT5zZWNvbmQtPkdldEJ1ZmZlcmVkU2l6ZSgpOwotICB9Ci0KLSAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBtZWRpYV90aW1lPSIgPDwgbWVkaWFfdGltZS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIiBuZXdEYXRhU2l6ZT0iIDw8IG5ld0RhdGFTaXplCi0gICAgICAgICAgIDw8ICIgdG90YWxfYnVmZmVyZWRfc2l6ZT0iIDw8IHRvdGFsX2J1ZmZlcmVkX3NpemU7Ci0KLSAgaWYgKHRvdGFsX2J1ZmZlcmVkX3NpemUgPT0gMCkgcmV0dXJuIHRydWU7Ci0KLSAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IGF1ZGlvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYXVkaW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICB1aW50NjRfdCBjdXJyX3NpemUgPSBpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFNpemUoKTsKLSAgICBpZiAoY3Vycl9zaXplID09IDApIGNvbnRpbnVlOwotICAgIHVpbnQ2NF90IGVzdGltYXRlZF9uZXdfc2l6ZSA9IG5ld0RhdGFTaXplICogY3Vycl9zaXplIC8gdG90YWxfYnVmZmVyZWRfc2l6ZTsKLSAgICBEQ0hFQ0tfTEUoZXN0aW1hdGVkX25ld19zaXplLCBTSVpFX01BWCk7Ci0gICAgc3VjY2VzcyAmPSBpdC0+c2Vjb25kLT5FdmljdENvZGVkRnJhbWVzKAotICAgICAgICBtZWRpYV90aW1lLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGVzdGltYXRlZF9uZXdfc2l6ZSkpOwotICB9Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgdWludDY0X3QgY3Vycl9zaXplID0gaXQtPnNlY29uZC0+R2V0QnVmZmVyZWRTaXplKCk7Ci0gICAgaWYgKGN1cnJfc2l6ZSA9PSAwKSBjb250aW51ZTsKLSAgICB1aW50NjRfdCBlc3RpbWF0ZWRfbmV3X3NpemUgPSBuZXdEYXRhU2l6ZSAqIGN1cnJfc2l6ZSAvIHRvdGFsX2J1ZmZlcmVkX3NpemU7Ci0gICAgRENIRUNLX0xFKGVzdGltYXRlZF9uZXdfc2l6ZSwgU0laRV9NQVgpOwotICAgIHN1Y2Nlc3MgJj0gaXQtPnNlY29uZC0+RXZpY3RDb2RlZEZyYW1lcygKLSAgICAgICAgbWVkaWFfdGltZSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihlc3RpbWF0ZWRfbmV3X3NpemUpKTsKLSAgfQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dF9zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICB1aW50NjRfdCBjdXJyX3NpemUgPSBpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFNpemUoKTsKLSAgICBpZiAoY3Vycl9zaXplID09IDApIGNvbnRpbnVlOwotICAgIHVpbnQ2NF90IGVzdGltYXRlZF9uZXdfc2l6ZSA9IG5ld0RhdGFTaXplICogY3Vycl9zaXplIC8gdG90YWxfYnVmZmVyZWRfc2l6ZTsKLSAgICBEQ0hFQ0tfTEUoZXN0aW1hdGVkX25ld19zaXplLCBTSVpFX01BWCk7Ci0gICAgc3VjY2VzcyAmPSBpdC0+c2Vjb25kLT5FdmljdENvZGVkRnJhbWVzKAotICAgICAgICBtZWRpYV90aW1lLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGVzdGltYXRlZF9uZXdfc2l6ZSkpOwotICB9Ci0KLSAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBzdWNjZXNzPSIgPDwgc3VjY2VzczsKLSAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLVJhbmdlczxUaW1lRGVsdGE+IFNvdXJjZUJ1ZmZlclN0YXRlOjpHZXRCdWZmZXJlZFJhbmdlcyhUaW1lRGVsdGEgZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmRlZCkgY29uc3QgewotICBSYW5nZXNMaXN0IHJhbmdlc19saXN0OwotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIHJhbmdlc19saXN0LnB1c2hfYmFjayhpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFJhbmdlcyhkdXJhdGlvbikpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICByYW5nZXNfbGlzdC5wdXNoX2JhY2soaXQtPnNlY29uZC0+R2V0QnVmZmVyZWRSYW5nZXMoZHVyYXRpb24pKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIHJhbmdlc19saXN0LnB1c2hfYmFjayhpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFJhbmdlcyhkdXJhdGlvbikpOwotICB9Ci0KLSAgcmV0dXJuIENvbXB1dGVSYW5nZXNJbnRlcnNlY3Rpb24ocmFuZ2VzX2xpc3QsIGVuZGVkKTsKLX0KLQotUmFuZ2VzPFRpbWVEZWx0YT4gU291cmNlQnVmZmVyU3RhdGU6OkdldEF1ZGlvQnVmZmVyZWRSYW5nZXMoVGltZURlbHRhIGR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmRlZCkgY29uc3QgewotICBSYW5nZXNMaXN0IHJhbmdlc19saXN0OwotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIHJhbmdlc19saXN0LnB1c2hfYmFjayhpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZFJhbmdlcyhkdXJhdGlvbikpOwotICB9Ci0KLSAgcmV0dXJuIENvbXB1dGVSYW5nZXNJbnRlcnNlY3Rpb24ocmFuZ2VzX2xpc3QsIGVuZGVkKTsKLX0KLQotVGltZURlbHRhIFNvdXJjZUJ1ZmZlclN0YXRlOjpHZXRWaWRlb1NlZWtLZXlmcmFtZVRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgaWYgKHZpZGVvX3N0cmVhbXNfLmVtcHR5KCkpIHsKLSAgICByZXR1cm4ga05vVGltZXN0YW1wOwotICB9Ci0gIERDSEVDS19FUSh2aWRlb19zdHJlYW1zXy5zaXplKCksIDEpOwotICByZXR1cm4gdmlkZW9fc3RyZWFtc18uYmVnaW4oKS0+c2Vjb25kLT5HZXRTZWVrS2V5ZnJhbWVUaW1lc3RhbXAoKTsKLX0KLQotVGltZURlbHRhIFNvdXJjZUJ1ZmZlclN0YXRlOjpHZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkgY29uc3QgewotICBUaW1lRGVsdGEgbWF4X3B0czsKLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIG1heF9wdHMgPSBzdGQ6Om1heChtYXhfcHRzLCBpdC0+c2Vjb25kLT5HZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBtYXhfcHRzID0gc3RkOjptYXgobWF4X3B0cywgaXQtPnNlY29uZC0+R2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIG1heF9wdHMgPSBzdGQ6Om1heChtYXhfcHRzLCBpdC0+c2Vjb25kLT5HZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkpOwotICB9Ci0KLSAgcmV0dXJuIG1heF9wdHM7Ci19Ci0KLVRpbWVEZWx0YSBTb3VyY2VCdWZmZXJTdGF0ZTo6R2V0TWF4QnVmZmVyZWREdXJhdGlvbigpIGNvbnN0IHsKLSAgVGltZURlbHRhIG1heF9kdXJhdGlvbjsKLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIG1heF9kdXJhdGlvbiA9IHN0ZDo6bWF4KG1heF9kdXJhdGlvbiwgaXQtPnNlY29uZC0+R2V0QnVmZmVyZWREdXJhdGlvbigpKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgbWF4X2R1cmF0aW9uID0gc3RkOjptYXgobWF4X2R1cmF0aW9uLCBpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZER1cmF0aW9uKCkpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRfc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSB0ZXh0X3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgbWF4X2R1cmF0aW9uID0gc3RkOjptYXgobWF4X2R1cmF0aW9uLCBpdC0+c2Vjb25kLT5HZXRCdWZmZXJlZER1cmF0aW9uKCkpOwotICB9Ci0KLSAgcmV0dXJuIG1heF9kdXJhdGlvbjsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6U3RhcnRSZXR1cm5pbmdEYXRhKCkgewotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPlN0YXJ0UmV0dXJuaW5nRGF0YSgpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5TdGFydFJldHVybmluZ0RhdGEoKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPlN0YXJ0UmV0dXJuaW5nRGF0YSgpOwotICB9Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RhdGU6OkFib3J0UmVhZHMoKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+QWJvcnRSZWFkcygpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5BYm9ydFJlYWRzKCk7Ci0gIH0KLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dF9zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5BYm9ydFJlYWRzKCk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6U2VlayhUaW1lRGVsdGEgc2Vla190aW1lKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+U2VlayhzZWVrX3RpbWUpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5TZWVrKHNlZWtfdGltZSk7Ci0gIH0KLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dF9zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5TZWVrKHNlZWtfdGltZSk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6Q29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGUoKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+Q29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGUoKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+Q29tcGxldGVQZW5kaW5nUmVhZElmUG9zc2libGUoKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPkNvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlKCk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6T25TZXREdXJhdGlvbihUaW1lRGVsdGEgZHVyYXRpb24pIHsKLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IGF1ZGlvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYXVkaW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5PblNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+T25TZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gIH0KLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dF9zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpdC0+c2Vjb25kLT5PblNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpNYXJrRW5kT2ZTdHJlYW0oKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+TWFya0VuZE9mU3RyZWFtKCk7Ci0gIH0KLQotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdmlkZW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSB2aWRlb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPk1hcmtFbmRPZlN0cmVhbSgpOwotICB9Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IHRleHRfc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSB0ZXh0X3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+TWFya0VuZE9mU3RyZWFtKCk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6VW5tYXJrRW5kT2ZTdHJlYW0oKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+VW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+VW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPlVubWFya0VuZE9mU3RyZWFtKCk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6U2h1dGRvd24oKSB7Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+U2h1dGRvd24oKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaXQtPnNlY29uZC0+U2h1dGRvd24oKTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gdGV4dF9zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQtPlNodXRkb3duKCk7Ci0gIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6U2V0TWVtb3J5TGltaXRzKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWVtb3J5X2xpbWl0KSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6QVVESU86Ci0gICAgICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICAgICAgaXQgIT0gYXVkaW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+U2V0U3RyZWFtTWVtb3J5TGltaXQobWVtb3J5X2xpbWl0KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VklERU86Ci0gICAgICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdmlkZW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICAgICAgaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+U2V0U3RyZWFtTWVtb3J5TGltaXQobWVtb3J5X2xpbWl0KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VEVYVDoKLSAgICAgIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgICAgIGl0ICE9IHRleHRfc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaXQtPnNlY29uZC0+U2V0U3RyZWFtTWVtb3J5TGltaXQobWVtb3J5X2xpbWl0KTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRGVtdXhlclN0cmVhbTo6VU5LTk9XTjoKLSAgICBjYXNlIERlbXV4ZXJTdHJlYW06Ok5VTV9UWVBFUzoKLSAgICAgIE5PVFJFQUNIRUQoKTsKLSAgICAgIGJyZWFrOwotICB9Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyU3RhdGU6OklzU2Vla1dhaXRpbmdGb3JEYXRhKCkgY29uc3QgewotICBmb3IgKERlbXV4ZXJTdHJlYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKTsgKytpdCkgewotICAgIGlmIChpdC0+c2Vjb25kLT5Jc1NlZWtXYWl0aW5nRm9yRGF0YSgpKSByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaWYgKGl0LT5zZWNvbmQtPklzU2Vla1dhaXRpbmdGb3JEYXRhKCkpIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gTk9URTogV2UgYXJlIGludGVudGlvbmFsbHkgbm90IGNoZWNraW5nIHRoZSB0ZXh0IHRyYWNrcwotICAvLyBiZWNhdXNlIHRleHQgdHJhY2tzIGFyZSBkaXNjb250aW51b3VzIGFuZCBtYXkgbm90IGhhdmUgZGF0YQotICAvLyBmb3IgdGhlIHNlZWsgcG9zaXRpb24uIFRoaXMgaXMgb2sgYW5kIHBsYXliYWNrIHNob3VsZCBub3QgYmUKLSAgLy8gc3RhbGxlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY3Vlcy4gSWYgY3Vlcywgd2l0aCB0aW1lc3RhbXBzIGFmdGVyCi0gIC8vIHRoZSBzZWVrIHRpbWUsIGV2ZW50dWFsbHkgYXJyaXZlIHRoZXkgd2lsbCBiZSBkZWxpdmVyZWQgcHJvcGVybHkKLSAgLy8gaW4gcmVzcG9uc2UgdG8gQ2h1bmtEZW11eGVyU3RyZWFtOjpSZWFkKCkgY2FsbHMuCi0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclN0YXRlOjpPbk5ld0NvbmZpZ3MoCi0gICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRfY29kZWNzLCBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcywKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcCYgdGV4dF9jb25maWdzKSB7Ci0gIERDSEVDSyh0cmFja3MuZ2V0KCkpOwotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiIGV4cGVjdGVkX2NvZGVjcz0iIDw8IGV4cGVjdGVkX2NvZGVjcwotICAgICAgICAgICA8PCAiIHRyYWNrcz0iIDw8IHRyYWNrcy0+dHJhY2tzKCkuc2l6ZSgpOwotICBEQ0hFQ0tfR0Uoc3RhdGVfLCBQRU5ESU5HX1BBUlNFUl9DT05GSUcpOwotCi0gIC8vIENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gY2xhc2hpbmcgYnl0ZXN0cmVhbSB0cmFjayBpZHMuCi0gIGlmICghQ2hlY2tCeXRlc3RyZWFtVHJhY2tJZHMoKnRyYWNrcywgdGV4dF9jb25maWdzKSkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkR1cGxpY2F0ZSBieXRlc3RyZWFtIHRyYWNrIGlkcyBkZXRlY3RlZCI7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFja3MtPnRyYWNrcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICBjb25zdCBTdHJlYW1QYXJzZXI6OlRyYWNrSWQmIHRyYWNrX2lkID0KLSAgICAgICAgICB0cmFja3MtPnRyYWNrcygpW2ldLT5ieXRlc3RyZWFtX3RyYWNrX2lkKCk7Ci0gICAgICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgVHJhY2tUeXBlVG9TdHIodHJhY2tzLT50cmFja3MoKVtpXS0+dHlwZSgpKSA8PCAiIHRyYWNrICIKLSAgICAgICAgICA8PCAiIGJ5dGVzdHJlYW0gdHJhY2sgaWQ9IiA8PCB0cmFja19pZDsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gTVNFIHNwZWMgYWxsb3dzIG5ldyBjb25maWdzIHRvIGJlIGVtaXR0ZWQgb25seSBkdXJpbmcgQXBwZW5kLCBidXQgbm90Ci0gIC8vIGR1cmluZyBGbHVzaCBvciBwYXJzZXIgcmVzZXQgb3BlcmF0aW9ucy4KLSAgQ0hFQ0soYXBwZW5kX2luX3Byb2dyZXNzXyk7Ci0KLSAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLQotICAvLyBUT0RPKHdvbGVuZXR6KTogVXBkYXRlIGNvZGVjIHN0cmluZyBzdHJpY3RuZXNzLCBpZiBuZWNlc3NhcnksIG9uY2Ugc3BlYwotICAvLyBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL21lZGlhLXNvdXJjZS9pc3N1ZXMvMTYxIGlzIHJlc29sdmVkLgotICBzdGQ6OnZlY3RvcjxBdWRpb0NvZGVjPiBleHBlY3RlZF9hY29kZWNzID0gZXhwZWN0ZWRfYXVkaW9fY29kZWNzXzsKLSAgc3RkOjp2ZWN0b3I8VmlkZW9Db2RlYz4gZXhwZWN0ZWRfdmNvZGVjcyA9IGV4cGVjdGVkX3ZpZGVvX2NvZGVjc187Ci0KLSAgRnJhbWVQcm9jZXNzb3I6OlRyYWNrSWRDaGFuZ2VzIHRyYWNrX2lkX2NoYW5nZXM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tzLT50cmFja3MoKS5zaXplKCk7ICsraSkgewotICAgIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCB0cmFja19pZCA9IHRyYWNrcy0+dHJhY2tzKClbaV0tPmJ5dGVzdHJlYW1fdHJhY2tfaWQoKTsKLQotICAgIGlmICh0cmFja3MtPnRyYWNrcygpW2ldLT50eXBlKCkgPT0gTWVkaWFUcmFjazo6QXVkaW8pIHsKLSAgICAgIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19jb25maWcgPSB0cmFja3MtPmdldEF1ZGlvQ29uZmlnKHRyYWNrX2lkKTsKLSAgICAgIERWTE9HKDEpIDw8ICJBdWRpbyB0cmFja19pZD0iIDw8IHRyYWNrX2lkCi0gICAgICAgICAgICAgICA8PCAiIGNvbmZpZzogIiA8PCBhdWRpb19jb25maWcuQXNIdW1hblJlYWRhYmxlU3RyaW5nKCk7Ci0gICAgICBEQ0hFQ0soYXVkaW9fY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0KLSAgICAgIHN0ZDo6dmVjdG9yPEF1ZGlvQ29kZWM+OjppdGVyYXRvciBpdCA9Ci0gICAgICAgICAgc3RkOjpmaW5kKGV4cGVjdGVkX2Fjb2RlY3MuYmVnaW4oKSwgZXhwZWN0ZWRfYWNvZGVjcy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgYXVkaW9fY29uZmlnLmNvZGVjKCkpOwotICAgICAgaWYgKGl0ID09IGV4cGVjdGVkX2Fjb2RlY3MuZW5kKCkpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgIkF1ZGlvIHN0cmVhbSBjb2RlYyAiIDw8IEdldENvZGVjTmFtZShhdWRpb19jb25maWcuY29kZWMoKSkKLSAgICAgICAgICAgIDw8ICIgZG9lc24ndCBtYXRjaCBTb3VyY2VCdWZmZXIgY29kZWNzLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGV4cGVjdGVkX2Fjb2RlY3MuZXJhc2UoaXQpOwotCi0gICAgICBDaHVua0RlbXV4ZXJTdHJlYW0qIHN0cmVhbSA9IE5VTEw7Ci0gICAgICBpZiAoIWZpcnN0X2luaXRfc2VnbWVudF9yZWNlaXZlZF8pIHsKLSAgICAgICAgRENIRUNLKGF1ZGlvX3N0cmVhbXNfLmZpbmQodHJhY2tfaWQpID09IGF1ZGlvX3N0cmVhbXNfLmVuZCgpKTsKLSAgICAgICAgc3RyZWFtID0gY3JlYXRlX2RlbXV4ZXJfc3RyZWFtX2NiXy5SdW4oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICAgICAgICBpZiAoIXN0cmVhbSB8fCAhZnJhbWVfcHJvY2Vzc29yXy0+QWRkVHJhY2sodHJhY2tfaWQsIHN0cmVhbSkpIHsKLSAgICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJGYWlsZWQgdG8gY3JlYXRlIGF1ZGlvIHN0cmVhbS4iOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBhdWRpb19zdHJlYW1zX1t0cmFja19pZF0gPSBzdHJlYW07Ci0gICAgICAgIG1lZGlhX2xvZ18tPlNldEJvb2xlYW5Qcm9wZXJ0eSgiZm91bmRfYXVkaW9fc3RyZWFtIiwgdHJ1ZSk7Ci0gICAgICAgIG1lZGlhX2xvZ18tPlNldFN0cmluZ1Byb3BlcnR5KCJhdWRpb19jb2RlY19uYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q29kZWNOYW1lKGF1ZGlvX2NvbmZpZy5jb2RlYygpKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXVkaW9fc3RyZWFtc18uc2l6ZSgpID4gMSkgewotICAgICAgICAgIERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gYXVkaW9fc3RyZWFtc18uZmluZCh0cmFja19pZCk7Ci0gICAgICAgICAgaWYgKGl0ICE9IGF1ZGlvX3N0cmVhbXNfLmVuZCgpKSBzdHJlYW0gPSBpdC0+c2Vjb25kOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIGF1ZGlvIHRyYWNrIHRoZW4gYnl0ZXN0cmVhbSBpZCBtaWdodCBjaGFuZ2UgaW4KLSAgICAgICAgICAvLyBhIG5ldyBpbml0IHNlZ21lbnQuIFNvIHVwZGF0ZSBvdXIgc3RhdGUgYW5kIG5vdGlmeSBmcmFtZSBwcm9jZXNzb3IuCi0gICAgICAgICAgRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSBhdWRpb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgICAgIGlmIChpdCAhPSBhdWRpb19zdHJlYW1zXy5lbmQoKSkgewotICAgICAgICAgICAgc3RyZWFtID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGlmIChpdC0+Zmlyc3QgIT0gdHJhY2tfaWQpIHsKLSAgICAgICAgICAgICAgdHJhY2tfaWRfY2hhbmdlc1tpdC0+Zmlyc3RdID0gdHJhY2tfaWQ7Ci0gICAgICAgICAgICAgIGF1ZGlvX3N0cmVhbXNfW3RyYWNrX2lkXSA9IHN0cmVhbTsKLSAgICAgICAgICAgICAgYXVkaW9fc3RyZWFtc18uZXJhc2UoaXQtPmZpcnN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJHb3QgdW5leHBlY3RlZCBhdWRpbyB0cmFjayIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgdHJhY2tfaWQ9IiA8PCB0cmFja19pZDsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdHJhY2tzLT50cmFja3MoKVtpXS0+c2V0X2lkKHN0cmVhbS0+bWVkaWFfdHJhY2tfaWQoKSk7Ci0gICAgICBmcmFtZV9wcm9jZXNzb3JfLT5PblBvc3NpYmxlQXVkaW9Db25maWdVcGRhdGUoYXVkaW9fY29uZmlnKTsKLSAgICAgIHN1Y2Nlc3MgJj0gc3RyZWFtLT5VcGRhdGVBdWRpb0NvbmZpZyhhdWRpb19jb25maWcsIG1lZGlhX2xvZ18pOwotICAgIH0gZWxzZSBpZiAodHJhY2tzLT50cmFja3MoKVtpXS0+dHlwZSgpID09IE1lZGlhVHJhY2s6OlZpZGVvKSB7Ci0gICAgICBWaWRlb0RlY29kZXJDb25maWcgdmlkZW9fY29uZmlnID0gdHJhY2tzLT5nZXRWaWRlb0NvbmZpZyh0cmFja19pZCk7Ci0gICAgICBEVkxPRygxKSA8PCAiVmlkZW8gdHJhY2tfaWQ9IiA8PCB0cmFja19pZAotICAgICAgICAgICAgICAgPDwgIiBjb25maWc6ICIgPDwgdmlkZW9fY29uZmlnLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwotICAgICAgRENIRUNLKHZpZGVvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotCi0gICAgICBzdGQ6OnZlY3RvcjxWaWRlb0NvZGVjPjo6aXRlcmF0b3IgaXQgPQotICAgICAgICAgIHN0ZDo6ZmluZChleHBlY3RlZF92Y29kZWNzLmJlZ2luKCksIGV4cGVjdGVkX3Zjb2RlY3MuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgIHZpZGVvX2NvbmZpZy5jb2RlYygpKTsKLSAgICAgIGlmIChpdCA9PSBleHBlY3RlZF92Y29kZWNzLmVuZCgpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICAgIDw8ICJWaWRlbyBzdHJlYW0gY29kZWMgIiA8PCBHZXRDb2RlY05hbWUodmlkZW9fY29uZmlnLmNvZGVjKCkpCi0gICAgICAgICAgICA8PCAiIGRvZXNuJ3QgbWF0Y2ggU291cmNlQnVmZmVyIGNvZGVjcy4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBleHBlY3RlZF92Y29kZWNzLmVyYXNlKGl0KTsKLQotICAgICAgQ2h1bmtEZW11eGVyU3RyZWFtKiBzdHJlYW0gPSBOVUxMOwotICAgICAgaWYgKCFmaXJzdF9pbml0X3NlZ21lbnRfcmVjZWl2ZWRfKSB7Ci0gICAgICAgIERDSEVDSyh2aWRlb19zdHJlYW1zXy5maW5kKHRyYWNrX2lkKSA9PSB2aWRlb19zdHJlYW1zXy5lbmQoKSk7Ci0gICAgICAgIHN0cmVhbSA9IGNyZWF0ZV9kZW11eGVyX3N0cmVhbV9jYl8uUnVuKERlbXV4ZXJTdHJlYW06OlZJREVPKTsKLSAgICAgICAgaWYgKCFzdHJlYW0gfHwgIWZyYW1lX3Byb2Nlc3Nvcl8tPkFkZFRyYWNrKHRyYWNrX2lkLCBzdHJlYW0pKSB7Ci0gICAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSB2aWRlbyBzdHJlYW0uIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdmlkZW9fc3RyZWFtc19bdHJhY2tfaWRdID0gc3RyZWFtOwotICAgICAgICBtZWRpYV9sb2dfLT5TZXRCb29sZWFuUHJvcGVydHkoImZvdW5kX3ZpZGVvX3N0cmVhbSIsIHRydWUpOwotICAgICAgICBtZWRpYV9sb2dfLT5TZXRTdHJpbmdQcm9wZXJ0eSgidmlkZW9fY29kZWNfbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENvZGVjTmFtZSh2aWRlb19jb25maWcuY29kZWMoKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHZpZGVvX3N0cmVhbXNfLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICBEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IHZpZGVvX3N0cmVhbXNfLmZpbmQodHJhY2tfaWQpOwotICAgICAgICAgIGlmIChpdCAhPSB2aWRlb19zdHJlYW1zXy5lbmQoKSkgc3RyZWFtID0gaXQtPnNlY29uZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSB2aWRlbyB0cmFjayB0aGVuIGJ5dGVzdHJlYW0gaWQgbWlnaHQgY2hhbmdlIGluCi0gICAgICAgICAgLy8gYSBuZXcgaW5pdCBzZWdtZW50LiBTbyB1cGRhdGUgb3VyIHN0YXRlIGFuZCBub3RpZnkgZnJhbWUgcHJvY2Vzc29yLgotICAgICAgICAgIERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIGl0ID0gdmlkZW9fc3RyZWFtc18uYmVnaW4oKTsKLSAgICAgICAgICBpZiAoaXQgIT0gdmlkZW9fc3RyZWFtc18uZW5kKCkpIHsKLSAgICAgICAgICAgIHN0cmVhbSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0ICE9IHRyYWNrX2lkKSB7Ci0gICAgICAgICAgICAgIHRyYWNrX2lkX2NoYW5nZXNbaXQtPmZpcnN0XSA9IHRyYWNrX2lkOwotICAgICAgICAgICAgICB2aWRlb19zdHJlYW1zX1t0cmFja19pZF0gPSBzdHJlYW07Ci0gICAgICAgICAgICAgIHZpZGVvX3N0cmVhbXNfLmVyYXNlKGl0LT5maXJzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghc3RyZWFtKSB7Ci0gICAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiR290IHVuZXhwZWN0ZWQgdmlkZW8gdHJhY2siCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIHRyYWNrX2lkPSIgPDwgdHJhY2tfaWQ7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRyYWNrcy0+dHJhY2tzKClbaV0tPnNldF9pZChzdHJlYW0tPm1lZGlhX3RyYWNrX2lkKCkpOwotICAgICAgYnVmZmVyX2FsbG9jYXRvcl8tPlVwZGF0ZVZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZyk7Ci0gICAgICBzdWNjZXNzICY9IHN0cmVhbS0+VXBkYXRlVmlkZW9Db25maWcodmlkZW9fY29uZmlnLCBtZWRpYV9sb2dfKTsKLSAgICB9IGVsc2UgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiRXJyb3I6IHVuc3VwcG9ydGVkIG1lZGlhIHRyYWNrIHR5cGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB0cmFja3MtPnRyYWNrcygpW2ldLT50eXBlKCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFleHBlY3RlZF9hY29kZWNzLmVtcHR5KCkgfHwgIWV4cGVjdGVkX3Zjb2RlY3MuZW1wdHkoKSkgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhwZWN0ZWRfYWNvZGVjcy5zaXplKCk7ICsraSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJJbml0aWFsaXphdGlvbiBzZWdtZW50IG1pc3NlcyBleHBlY3RlZCAiCi0gICAgICAgICAgPDwgR2V0Q29kZWNOYW1lKGV4cGVjdGVkX2Fjb2RlY3NbaV0pIDw8ICIgdHJhY2suIjsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZF92Y29kZWNzLnNpemUoKTsgKytpKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIkluaXRpYWxpemF0aW9uIHNlZ21lbnQgbWlzc2VzIGV4cGVjdGVkICIKLSAgICAgICAgICA8PCBHZXRDb2RlY05hbWUoZXhwZWN0ZWRfdmNvZGVjc1tpXSkgPDwgIiB0cmFjay4iOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAodGV4dF9zdHJlYW1zXy5lbXB0eSgpKSB7Ci0gICAgZm9yIChTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcDo6Y29uc3RfaXRlcmF0b3IgaXRyID0KLSAgICAgICAgICAgICB0ZXh0X2NvbmZpZ3MuYmVnaW4oKTsKLSAgICAgICAgIGl0ciAhPSB0ZXh0X2NvbmZpZ3MuZW5kKCk7ICsraXRyKSB7Ci0gICAgICBDaHVua0RlbXV4ZXJTdHJlYW0qIGNvbnN0IHRleHRfc3RyZWFtID0KLSAgICAgICAgICBjcmVhdGVfZGVtdXhlcl9zdHJlYW1fY2JfLlJ1bihEZW11eGVyU3RyZWFtOjpURVhUKTsKLSAgICAgIGlmICghZnJhbWVfcHJvY2Vzc29yXy0+QWRkVHJhY2soaXRyLT5maXJzdCwgdGV4dF9zdHJlYW0pKSB7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gZmFsc2U7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkZhaWxlZCB0byBhZGQgdGV4dCB0cmFjayBJRCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgaXRyLT5maXJzdCA8PCAiIHRvIGZyYW1lIHByb2Nlc3Nvci4iOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHRleHRfc3RyZWFtLT5VcGRhdGVUZXh0Q29uZmlnKGl0ci0+c2Vjb25kLCBtZWRpYV9sb2dfKTsKLSAgICAgIHRleHRfc3RyZWFtc19baXRyLT5maXJzdF0gPSB0ZXh0X3N0cmVhbTsKLSAgICAgIG5ld190ZXh0X3RyYWNrX2NiXy5SdW4odGV4dF9zdHJlYW0sIGl0ci0+c2Vjb25kKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3Qgc2l6ZV90IHRleHRfY291bnQgPSB0ZXh0X3N0cmVhbXNfLnNpemUoKTsKLSAgICBpZiAodGV4dF9jb25maWdzLnNpemUoKSAhPSB0ZXh0X2NvdW50KSB7Ci0gICAgICBzdWNjZXNzICY9IGZhbHNlOwotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJUaGUgbnVtYmVyIG9mIHRleHQgdHJhY2sgY29uZmlncyBjaGFuZ2VkLiI7Ci0gICAgfSBlbHNlIGlmICh0ZXh0X2NvdW50ID09IDEpIHsKLSAgICAgIFN0cmVhbVBhcnNlcjo6VGV4dFRyYWNrQ29uZmlnTWFwOjpjb25zdF9pdGVyYXRvciBjb25maWdfaXRyID0KLSAgICAgICAgICB0ZXh0X2NvbmZpZ3MuYmVnaW4oKTsKLSAgICAgIERlbXV4ZXJTdHJlYW1NYXA6Oml0ZXJhdG9yIHN0cmVhbV9pdHIgPSB0ZXh0X3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICBDaHVua0RlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtID0gc3RyZWFtX2l0ci0+c2Vjb25kOwotICAgICAgVGV4dFRyYWNrQ29uZmlnIG9sZF9jb25maWcgPSB0ZXh0X3N0cmVhbS0+dGV4dF90cmFja19jb25maWcoKTsKLSAgICAgIFRleHRUcmFja0NvbmZpZyBuZXdfY29uZmlnKAotICAgICAgICAgIGNvbmZpZ19pdHItPnNlY29uZC5raW5kKCksIGNvbmZpZ19pdHItPnNlY29uZC5sYWJlbCgpLAotICAgICAgICAgIGNvbmZpZ19pdHItPnNlY29uZC5sYW5ndWFnZSgpLCBvbGRfY29uZmlnLmlkKCkpOwotICAgICAgaWYgKCFuZXdfY29uZmlnLk1hdGNoZXMob2xkX2NvbmZpZykpIHsKLSAgICAgICAgc3VjY2VzcyAmPSBmYWxzZTsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgIk5ldyB0ZXh0IHRyYWNrIGNvbmZpZyBkb2VzIG5vdCBtYXRjaCBvbGQgb25lLiI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgb2xkX2lkID0gc3RyZWFtX2l0ci0+Zmlyc3Q7Ci0gICAgICAgIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBuZXdfaWQgPSBjb25maWdfaXRyLT5maXJzdDsKLSAgICAgICAgaWYgKG5ld19pZCAhPSBvbGRfaWQpIHsKLSAgICAgICAgICB0cmFja19pZF9jaGFuZ2VzW29sZF9pZF0gPSBuZXdfaWQ7Ci0gICAgICAgICAgdGV4dF9zdHJlYW1zXy5lcmFzZShvbGRfaWQpOwotICAgICAgICAgIHRleHRfc3RyZWFtc19bbmV3X2lkXSA9IHRleHRfc3RyZWFtOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAoU3RyZWFtUGFyc2VyOjpUZXh0VHJhY2tDb25maWdNYXA6OmNvbnN0X2l0ZXJhdG9yIGNvbmZpZ19pdHIgPQotICAgICAgICAgICAgICAgdGV4dF9jb25maWdzLmJlZ2luKCk7Ci0gICAgICAgICAgIGNvbmZpZ19pdHIgIT0gdGV4dF9jb25maWdzLmVuZCgpOyArK2NvbmZpZ19pdHIpIHsKLSAgICAgICAgRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3Igc3RyZWFtX2l0ciA9Ci0gICAgICAgICAgICB0ZXh0X3N0cmVhbXNfLmZpbmQoY29uZmlnX2l0ci0+Zmlyc3QpOwotICAgICAgICBpZiAoc3RyZWFtX2l0ciA9PSB0ZXh0X3N0cmVhbXNfLmVuZCgpKSB7Ci0gICAgICAgICAgc3VjY2VzcyAmPSBmYWxzZTsKLSAgICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIHRleHQgdHJhY2sgY29uZmlndXJhdGlvbiBmb3IgdHJhY2sgSUQgIgotICAgICAgICAgICAgICA8PCBjb25maWdfaXRyLT5maXJzdDsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFRleHRUcmFja0NvbmZpZyYgbmV3X2NvbmZpZyA9IGNvbmZpZ19pdHItPnNlY29uZDsKLSAgICAgICAgQ2h1bmtEZW11eGVyU3RyZWFtKiBzdHJlYW0gPSBzdHJlYW1faXRyLT5zZWNvbmQ7Ci0gICAgICAgIFRleHRUcmFja0NvbmZpZyBvbGRfY29uZmlnID0gc3RyZWFtLT50ZXh0X3RyYWNrX2NvbmZpZygpOwotICAgICAgICBpZiAoIW5ld19jb25maWcuTWF0Y2hlcyhvbGRfY29uZmlnKSkgewotICAgICAgICAgIHN1Y2Nlc3MgJj0gZmFsc2U7Ci0gICAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgICA8PCAiTmV3IHRleHQgdHJhY2sgY29uZmlnIGZvciB0cmFjayBJRCAiIDw8IGNvbmZpZ19pdHItPmZpcnN0Ci0gICAgICAgICAgICAgIDw8ICIgZG9lcyBub3QgbWF0Y2ggb2xkIG9uZS4iOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGF1ZGlvX3N0cmVhbXNfLmVtcHR5KCkgJiYgdmlkZW9fc3RyZWFtc18uZW1wdHkoKSkgewotICAgIERWTE9HKDEpIDw8IF9fZnVuY19fIDw8ICI6IGNvdWxkbid0IGZpbmQgYSB2YWxpZCBhdWRpbyBvciB2aWRlbyBzdHJlYW0iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICghZnJhbWVfcHJvY2Vzc29yXy0+VXBkYXRlVHJhY2tJZHModHJhY2tfaWRfY2hhbmdlcykpIHsKLSAgICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiOiBmYWlsZWQgdG8gcmVtYXAgdHJhY2sgaWRzIGluIGZyYW1lIHByb2Nlc3NvciI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZnJhbWVfcHJvY2Vzc29yXy0+U2V0QWxsVHJhY2tCdWZmZXJzTmVlZFJhbmRvbUFjY2Vzc1BvaW50KCk7Ci0KLSAgaWYgKCFmaXJzdF9pbml0X3NlZ21lbnRfcmVjZWl2ZWRfKSB7Ci0gICAgZmlyc3RfaW5pdF9zZWdtZW50X3JlY2VpdmVkXyA9IHRydWU7Ci0gICAgU2V0U3RyZWFtTWVtb3J5TGltaXRzKCk7Ci0gIH0KLQotICBEVkxPRygxKSA8PCAiT25OZXdDb25maWdzKCkgOiAiIDw8IChzdWNjZXNzID8gInN1Y2Nlc3MiIDogImZhaWxlZCIpOwotICBpZiAoc3VjY2VzcykgewotICAgIGlmIChzdGF0ZV8gPT0gUEVORElOR19QQVJTRVJfQ09ORklHKSBzdGF0ZV8gPSBQRU5ESU5HX1BBUlNFUl9JTklUOwotICAgIERDSEVDSyghaW5pdF9zZWdtZW50X3JlY2VpdmVkX2NiXy5pc19udWxsKCkpOwotICAgIGluaXRfc2VnbWVudF9yZWNlaXZlZF9jYl8uUnVuKHN0ZDo6bW92ZSh0cmFja3MpKTsKLSAgfQotCi0gIHJldHVybiBzdWNjZXNzOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpTZXRTdHJlYW1NZW1vcnlMaW1pdHMoKSB7fQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0YXRlOjpPbk5ld01lZGlhU2VnbWVudCgpIHsKLSAgRFZMT0coMikgPDwgIk9uTmV3TWVkaWFTZWdtZW50KCkiOwotICBEQ0hFQ0tfRVEoc3RhdGVfLCBQQVJTRVJfSU5JVElBTElaRUQpOwotICBwYXJzaW5nX21lZGlhX3NlZ21lbnRfID0gdHJ1ZTsKLSAgbWVkaWFfc2VnbWVudF9oYXNfZGF0YV9mb3JfdHJhY2tfLmNsZWFyKCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RhdGU6Ok9uRW5kT2ZNZWRpYVNlZ21lbnQoKSB7Ci0gIERWTE9HKDIpIDw8ICJPbkVuZE9mTWVkaWFTZWdtZW50KCkiOwotICBEQ0hFQ0tfRVEoc3RhdGVfLCBQQVJTRVJfSU5JVElBTElaRUQpOwotICBwYXJzaW5nX21lZGlhX3NlZ21lbnRfID0gZmFsc2U7Ci0KLSAgZm9yIChEZW11eGVyU3RyZWFtTWFwOjppdGVyYXRvciBpdCA9IGF1ZGlvX3N0cmVhbXNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYXVkaW9fc3RyZWFtc18uZW5kKCk7ICsraXQpIHsKLSAgICBpZiAoIW1lZGlhX3NlZ21lbnRfaGFzX2RhdGFfZm9yX3RyYWNrX1tpdC0+Zmlyc3RdKSB7Ci0gICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX21pc3NpbmdfdHJhY2tfbG9nc18sCi0gICAgICAgICAgICAgICAgICAgICAgICBrTWF4TWlzc2luZ1RyYWNrSW5TZWdtZW50TG9ncykKLSAgICAgICAgICA8PCAiTWVkaWEgc2VnbWVudCBkaWQgbm90IGNvbnRhaW4gYW55IGNvZGVkIGZyYW1lcyBmb3IgdHJhY2sgIgotICAgICAgICAgIDw8IGl0LT5maXJzdAotICAgICAgICAgIDw8ICIsIG1pc21hdGNoaW5nIGluaXRpYWxpemF0aW9uIHNlZ21lbnQuIFRoZXJlZm9yZSwgTVNFIgotICAgICAgICAgICAgICIgY29kZWQgZnJhbWUgcHJvY2Vzc2luZyBtYXkgbm90IGludGVyb3BlcmFibHkgZGV0ZWN0IgotICAgICAgICAgICAgICIgZGlzY29udGludWl0aWVzIGluIGFwcGVuZGVkIG1lZGlhLiI7Ci0gICAgfQotICB9Ci0gIGZvciAoRGVtdXhlclN0cmVhbU1hcDo6aXRlcmF0b3IgaXQgPSB2aWRlb19zdHJlYW1zXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHZpZGVvX3N0cmVhbXNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaWYgKCFtZWRpYV9zZWdtZW50X2hhc19kYXRhX2Zvcl90cmFja19baXQtPmZpcnN0XSkgewotICAgICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9taXNzaW5nX3RyYWNrX2xvZ3NfLAotICAgICAgICAgICAgICAgICAgICAgICAga01heE1pc3NpbmdUcmFja0luU2VnbWVudExvZ3MpCi0gICAgICAgICAgPDwgIk1lZGlhIHNlZ21lbnQgZGlkIG5vdCBjb250YWluIGFueSBjb2RlZCBmcmFtZXMgZm9yIHRyYWNrICIKLSAgICAgICAgICA8PCBpdC0+Zmlyc3QKLSAgICAgICAgICA8PCAiLCBtaXNtYXRjaGluZyBpbml0aWFsaXphdGlvbiBzZWdtZW50LiBUaGVyZWZvcmUsIE1TRSIKLSAgICAgICAgICAgICAiIGNvZGVkIGZyYW1lIHByb2Nlc3NpbmcgbWF5IG5vdCBpbnRlcm9wZXJhYmx5IGRldGVjdCIKLSAgICAgICAgICAgICAiIGRpc2NvbnRpbnVpdGllcyBpbiBhcHBlbmRlZCBtZWRpYS4iOwotICAgIH0KLSAgfQotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclN0YXRlOjpPbk5ld0J1ZmZlcnMoCi0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCkgewotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiIGJ1ZmZlcl9xdWV1ZXM9IiA8PCBidWZmZXJfcXVldWVfbWFwLnNpemUoKTsKLSAgRENIRUNLX0VRKHN0YXRlXywgUEFSU0VSX0lOSVRJQUxJWkVEKTsKLSAgRENIRUNLKHRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8pOwotICBEQ0hFQ0socGFyc2luZ19tZWRpYV9zZWdtZW50Xyk7Ci0KLSAgZm9yIChTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICAgICAgIGJ1ZmZlcl9xdWV1ZV9tYXAuYmVnaW4oKTsKLSAgICAgICBpdCAhPSBidWZmZXJfcXVldWVfbWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSYgYnVmcSA9IGl0LT5zZWNvbmQ7Ci0gICAgRENIRUNLKCFidWZxLmVtcHR5KCkpOwotICAgIG1lZGlhX3NlZ21lbnRfaGFzX2RhdGFfZm9yX3RyYWNrX1tpdC0+Zmlyc3RdID0gdHJ1ZTsKLSAgfQotCi0gIGNvbnN0IFRpbWVEZWx0YSB0aW1lc3RhbXBfb2Zmc2V0X2JlZm9yZV9wcm9jZXNzaW5nID0KLSAgICAgICp0aW1lc3RhbXBfb2Zmc2V0X2R1cmluZ19hcHBlbmRfOwotCi0gIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHRpbWVzdGFtcCBvZmZzZXQgZm9yIGF1ZGlvL3ZpZGVvIHRyYWNrcyBpZiB0aGUgc3RyZWFtCi0gIC8vIHBhcnNlciBoYXMgcmVxdWVzdGVkIGF1dG9tYXRpYyB1cGRhdGVzLgotICBUaW1lRGVsdGEgbmV3X3RpbWVzdGFtcF9vZmZzZXQgPSB0aW1lc3RhbXBfb2Zmc2V0X2JlZm9yZV9wcm9jZXNzaW5nOwotICBpZiAoYXV0b191cGRhdGVfdGltZXN0YW1wX29mZnNldF8pIHsKLSAgICBUaW1lRGVsdGEgbWluX2VuZF90aW1lc3RhbXAgPSBrTm9UaW1lc3RhbXA7Ci0gICAgZm9yIChTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICAgICAgICAgYnVmZmVyX3F1ZXVlX21hcC5iZWdpbigpOwotICAgICAgICAgaXQgIT0gYnVmZmVyX3F1ZXVlX21hcC5lbmQoKTsgKytpdCkgewotICAgICAgY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSYgYnVmcSA9IGl0LT5zZWNvbmQ7Ci0gICAgICBEQ0hFQ0soIWJ1ZnEuZW1wdHkoKSk7Ci0gICAgICBpZiAobWluX2VuZF90aW1lc3RhbXAgPT0ga05vVGltZXN0YW1wIHx8Ci0gICAgICAgICAgRW5kVGltZXN0YW1wKGJ1ZnEpIDwgbWluX2VuZF90aW1lc3RhbXApIHsKLSAgICAgICAgbWluX2VuZF90aW1lc3RhbXAgPSBFbmRUaW1lc3RhbXAoYnVmcSk7Ci0gICAgICAgIERDSEVDS19ORShrTm9UaW1lc3RhbXAsIG1pbl9lbmRfdGltZXN0YW1wKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1pbl9lbmRfdGltZXN0YW1wICE9IGtOb1RpbWVzdGFtcCkKLSAgICAgIG5ld190aW1lc3RhbXBfb2Zmc2V0ICs9IG1pbl9lbmRfdGltZXN0YW1wOwotICB9Ci0KLSAgaWYgKCFmcmFtZV9wcm9jZXNzb3JfLT5Qcm9jZXNzRnJhbWVzKAotICAgICAgICAgIGJ1ZmZlcl9xdWV1ZV9tYXAsIGFwcGVuZF93aW5kb3dfc3RhcnRfZHVyaW5nX2FwcGVuZF8sCi0gICAgICAgICAgYXBwZW5kX3dpbmRvd19lbmRfZHVyaW5nX2FwcGVuZF8sIHRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8pKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gT25seSB1cGRhdGUgdGhlIHRpbWVzdGFtcCBvZmZzZXQgaWYgdGhlIGZyYW1lIHByb2Nlc3NvciBoYXNuJ3QgYWxyZWFkeS4KLSAgaWYgKGF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXRfICYmCi0gICAgICB0aW1lc3RhbXBfb2Zmc2V0X2JlZm9yZV9wcm9jZXNzaW5nID09ICp0aW1lc3RhbXBfb2Zmc2V0X2R1cmluZ19hcHBlbmRfKSB7Ci0gICAgKnRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF8gPSBuZXdfdGltZXN0YW1wX29mZnNldDsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotdm9pZCBTb3VyY2VCdWZmZXJTdGF0ZTo6T25Tb3VyY2VJbml0RG9uZSgKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBwYXJhbXMpIHsKLSAgRENIRUNLX0VRKHN0YXRlXywgUEVORElOR19QQVJTRVJfSU5JVCk7Ci0gIHN0YXRlXyA9IFBBUlNFUl9JTklUSUFMSVpFRDsKLSAgYXV0b191cGRhdGVfdGltZXN0YW1wX29mZnNldF8gPSBwYXJhbXMuYXV0b191cGRhdGVfdGltZXN0YW1wX29mZnNldDsKLSAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJmluaXRfY2JfKS5SdW4ocGFyYW1zKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMTI2ZmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfU09VUkNFX0JVRkZFUl9TVEFURV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19TT1VSQ0VfQlVGRkVSX1NUQVRFX0hfCi0KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2NvZGVjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXVzaW5nIGJhc2U6OlRpbWVEZWx0YTsKLQotY2xhc3MgQ2h1bmtEZW11eGVyU3RyZWFtOwotY2xhc3MgRnJhbWVQcm9jZXNzb3I7Ci0KLS8vIENvbnRhaW5zIHN0YXRlIGJlbG9uZ2luZyB0byBhIHNvdXJjZSBpZC4KLWNsYXNzIE1FRElBX0VYUE9SVCBTb3VyY2VCdWZmZXJTdGF0ZSB7Ci0gcHVibGljOgotICAvLyBDYWxsYmFjayBzaWduYXR1cmUgdXNlZCB0byBjcmVhdGUgQ2h1bmtEZW11eGVyU3RyZWFtcy4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxDaHVua0RlbXV4ZXJTdHJlYW0qKERlbXV4ZXJTdHJlYW06OlR5cGUpPgotICAgICAgQ3JlYXRlRGVtdXhlclN0cmVhbUNCOwotCi0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChDaHVua0RlbXV4ZXJTdHJlYW0qLCBjb25zdCBUZXh0VHJhY2tDb25maWcmKT4KLSAgICAgIE5ld1RleHRUcmFja0NCOwotCi0gIFNvdXJjZUJ1ZmZlclN0YXRlKHN0ZDo6dW5pcXVlX3B0cjxTdHJlYW1QYXJzZXI+IHN0cmVhbV9wYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGcmFtZVByb2Nlc3Nvcj4gZnJhbWVfcHJvY2Vzc29yLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBDcmVhdGVEZW11eGVyU3RyZWFtQ0ImIGNyZWF0ZV9kZW11eGVyX3N0cmVhbV9jYiwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywKLSAgICAgICAgICAgICAgICAgICAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yKTsKLQotICB+U291cmNlQnVmZmVyU3RhdGUoKTsKLQotICB2b2lkIEluaXQoY29uc3QgU3RyZWFtUGFyc2VyOjpJbml0Q0ImIGluaXRfY2IsCi0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRfY29kZWNzLAotICAgICAgICAgICAgY29uc3QgU3RyZWFtUGFyc2VyOjpFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImCi0gICAgICAgICAgICAgICAgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYiwKLSAgICAgICAgICAgIGNvbnN0IE5ld1RleHRUcmFja0NCJiBuZXdfdGV4dF90cmFja19jYik7Ci0KLSAgLy8gQXBwZW5kcyBuZXcgZGF0YSB0byB0aGUgU3RyZWFtUGFyc2VyLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSBhcHBlbmRlZC4gUmV0dXJucyBmYWxzZSBpZiBhbgotICAvLyBlcnJvciBvY2N1cnJlZC4gfCp0aW1lc3RhbXBfb2Zmc2V0fCBpcyB1c2VkIGFuZCBwb3NzaWJseSB1cGRhdGVkIGJ5IHRoZQotICAvLyBhcHBlbmQuIHxhcHBlbmRfd2luZG93X3N0YXJ0fCBhbmQgfGFwcGVuZF93aW5kb3dfZW5kfCBjb3JyZXNwb25kIHRvIHRoZSBNU0UKLSAgLy8gc3BlYydzIHNpbWlsYXJseSBuYW1lZCBzb3VyY2UgYnVmZmVyIGF0dHJpYnV0ZXMgdGhhdCBhcmUgdXNlZCBpbiBjb2RlZAotICAvLyBmcmFtZSBwcm9jZXNzaW5nLgotICBib29sIEFwcGVuZChjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydCwKLSAgICAgICAgICAgICAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kLCBUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIEFib3J0cyB0aGUgY3VycmVudCBhcHBlbmQgc2VxdWVuY2UgYW5kIHJlc2V0cyB0aGUgcGFyc2VyLgotICB2b2lkIFJlc2V0UGFyc2VyU3RhdGUoVGltZURlbHRhIGFwcGVuZF93aW5kb3dfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19lbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIENhbGxzIFJlbW92ZSh8c3RhcnR8LCB8ZW5kfCwgfGR1cmF0aW9ufCkgb24gYWxsCi0gIC8vIENodW5rRGVtdXhlclN0cmVhbXMgbWFuYWdlZCBieSB0aGlzIG9iamVjdC4KLSAgdm9pZCBSZW1vdmUoVGltZURlbHRhIHN0YXJ0LCBUaW1lRGVsdGEgZW5kLCBUaW1lRGVsdGEgZHVyYXRpb24pOwotCi0gIC8vIElmIHRoZSBidWZmZXIgaXMgZnVsbCwgYXR0ZW1wdHMgdG8gdHJ5IHRvIGZyZWUgdXAgc3BhY2UsIGFzIHNwZWNpZmllZCBpbgotICAvLyB0aGUgIkNvZGVkIEZyYW1lIEV2aWN0aW9uIEFsZ29yaXRobSIgaW4gdGhlIE1lZGlhIFNvdXJjZSBFeHRlbnNpb25zIFNwZWMuCi0gIC8vIFJldHVybnMgZmFsc2UgaWZmIGJ1ZmZlciBpcyBzdGlsbCBmdWxsIGFmdGVyIHJ1bm5pbmcgZXZpY3Rpb24uCi0gIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1ldmljdGlvbgotICBib29sIEV2aWN0Q29kZWRGcmFtZXMoRGVjb2RlVGltZXN0YW1wIG1lZGlhX3RpbWUsIHNpemVfdCBuZXdEYXRhU2l6ZSk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGN1cnJlbnRseSBwYXJzaW5nIGEgbWVkaWEgc2VnbWVudCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLgotICBib29sIHBhcnNpbmdfbWVkaWFfc2VnbWVudCgpIGNvbnN0IHsgcmV0dXJuIHBhcnNpbmdfbWVkaWFfc2VnbWVudF87IH0KLQotICAvLyBTZXRzIHxmcmFtZV9wcm9jZXNzb3JffCdzIHNlcXVlbmNlIG1vZGUgdG8gfHNlcXVlbmNlX21vZGV8LgotICB2b2lkIFNldFNlcXVlbmNlTW9kZShib29sIHNlcXVlbmNlX21vZGUpOwotCi0gIC8vIFNpZ25hbHMgdGhlIGNvZGVkIGZyYW1lIHByb2Nlc3NvciB0byB1cGRhdGUgaXRzIGdyb3VwIHN0YXJ0IHRpbWVzdGFtcCB0byBiZQotICAvLyB8dGltZXN0YW1wX29mZnNldHwgaWYgaXQgaXMgaW4gc2VxdWVuY2UgYXBwZW5kIG1vZGUuCi0gIHZvaWQgU2V0R3JvdXBTdGFydFRpbWVzdGFtcElmSW5TZXF1ZW5jZU1vZGUoYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcF9vZmZzZXQpOwotCi0gIC8vIFJldHVybnMgdGhlIHJhbmdlIG9mIGJ1ZmZlcmVkIGRhdGEgaW4gdGhpcyBzb3VyY2UsIGNhcHBlZCBhdCB8ZHVyYXRpb258LgotICAvLyB8ZW5kZWR8IC0gU2V0IHRvIHRydWUgaWYgZW5kIG9mIHN0cmVhbSBoYXMgYmVlbiBzaWduYWxlZCBhbmQgdGhlIHNwZWNpYWwKLSAgLy8gZW5kIG9mIHN0cmVhbSByYW5nZSBsb2dpYyBuZWVkcyB0byBiZSBleGVjdXRlZC4KLSAgUmFuZ2VzPFRpbWVEZWx0YT4gR2V0QnVmZmVyZWRSYW5nZXMoVGltZURlbHRhIGR1cmF0aW9uLCBib29sIGVuZGVkKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSByYW5nZSBvZiBidWZmZXJlZCBhdWRpbyBkYXRhIGluIHRoaXMgc291cmNlLCBjYXBwZWQgYXQKLSAgLy8gfGR1cmF0aW9ufC4gfGVuZGVkfCAtIFNldCB0byB0cnVlIGlmIGVuZCBvZiBzdHJlYW0gaGFzIGJlZW4gc2lnbmFsZWQgYW5kCi0gIC8vIHRoZSBzcGVjaWFsIGVuZCBvZiBzdHJlYW0gcmFuZ2UgbG9naWMgbmVlZHMgdG8gYmUgZXhlY3V0ZWQuCi0gIFJhbmdlczxUaW1lRGVsdGE+IEdldEF1ZGlvQnVmZmVyZWRSYW5nZXMoVGltZURlbHRhIGR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5kZWQpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgdmlkZW8ga2V5ZnJhbWUgdGhhdCBpcyBhdCBvciBiZWZvcmUgdGhlIGxhc3QKLSAgLy8gc2VlayB0aW1lc3RhbXAuICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB2aWRlbyBzdHJlYW0uCi0gIFRpbWVEZWx0YSBHZXRWaWRlb1NlZWtLZXlmcmFtZVRpbWVzdGFtcCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIGhpZ2hlc3QgUFRTIG9mIGN1cnJlbnRseSBidWZmZXJlZCBmcmFtZXMgaW4gdGhpcyBzb3VyY2UsIG9yCi0gIC8vIGJhc2U6OlRpbWVEZWx0YSgpIGlmIG5vbmUgb2YgdGhlIHN0cmVhbXMgY29udGFpbiBidWZmZXJlZCBkYXRhLgotICBUaW1lRGVsdGEgR2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIGhpZ2hlc3QgYnVmZmVyZWQgZHVyYXRpb24gYWNyb3NzIGFsbCBzdHJlYW1zIG1hbmFnZWQKLSAgLy8gYnkgdGhpcyBvYmplY3QuCi0gIC8vIFJldHVybnMgVGltZURlbHRhKCkgaWYgbm9uZSBvZiB0aGUgc3RyZWFtcyBjb250YWluIGJ1ZmZlcmVkIGRhdGEuCi0gIFRpbWVEZWx0YSBHZXRNYXhCdWZmZXJlZER1cmF0aW9uKCkgY29uc3Q7Ci0KLSAgLy8gSGVscGVyIG1ldGhvZHMgdGhhdCBjYWxsIG1ldGhvZHMgd2l0aCBzaW1pbGFyIG5hbWVzIG9uIGFsbCB0aGUKLSAgLy8gQ2h1bmtEZW11eGVyU3RyZWFtcyBtYW5hZ2VkIGJ5IHRoaXMgb2JqZWN0LgotICB2b2lkIFN0YXJ0UmV0dXJuaW5nRGF0YSgpOwotICB2b2lkIEFib3J0UmVhZHMoKTsKLSAgdm9pZCBTZWVrKFRpbWVEZWx0YSBzZWVrX3RpbWUpOwotICB2b2lkIENvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlKCk7Ci0gIHZvaWQgT25TZXREdXJhdGlvbihUaW1lRGVsdGEgZHVyYXRpb24pOwotICB2b2lkIE1hcmtFbmRPZlN0cmVhbSgpOwotICB2b2lkIFVubWFya0VuZE9mU3RyZWFtKCk7Ci0gIHZvaWQgU2h1dGRvd24oKTsKLSAgLy8gU2V0cyB0aGUgbWVtb3J5IGxpbWl0IG9uIGVhY2ggc3RyZWFtIG9mIGEgc3BlY2lmaWMgdHlwZS4KLSAgLy8gfG1lbW9yeV9saW1pdHwgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGVhY2ggc3RyZWFtIG9mIHR5cGUgfHR5cGV8Ci0gIC8vIGlzIGFsbG93ZWQgdG8gaG9sZCBpbiBpdHMgYnVmZmVyLgotICB2b2lkIFNldE1lbW9yeUxpbWl0cyhEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUsIHNpemVfdCBtZW1vcnlfbGltaXQpOwotICBib29sIElzU2Vla1dhaXRpbmdGb3JEYXRhKCkgY29uc3Q7Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxSYW5nZXM8VGltZURlbHRhPiA+IFJhbmdlc0xpc3Q7Ci0gIHN0YXRpYyBSYW5nZXM8VGltZURlbHRhPiBDb21wdXRlUmFuZ2VzSW50ZXJzZWN0aW9uKAotICAgICAgY29uc3QgUmFuZ2VzTGlzdCYgYWN0aXZlX3JhbmdlcywgYm9vbCBlbmRlZCk7Ci0KLSAgdm9pZCBTZXRUcmFja3NXYXRjaGVyKGNvbnN0IERlbXV4ZXI6Ok1lZGlhVHJhY2tzVXBkYXRlZENCJiB0cmFja3NfdXBkYXRlZF9jYik7Ci0KLSBwcml2YXRlOgotICAvLyBTdGF0ZSBhZHZhbmNlcyB0aHJvdWdoIHRoaXMgbGlzdC4gVGhlIGludGVudCBpcyB0byBlbnN1cmUgYXQgbGVhc3Qgb25lCi0gIC8vIGNvbmZpZyBpcyByZWNlaXZlZCBwcmlvciB0byBwYXJzZXIgY2FsbGluZyBpbml0aWFsaXphdGlvbiBjYWxsYmFjaywgYW5kCi0gIC8vIHRoYXQgc3VjaCBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBvY2N1cnMgYXQgbW9zdCBvbmNlIHBlciBwYXJzZXIuCi0gIGVudW0gU3RhdGUgewotICAgIFVOSU5JVElBTElaRUQgPSAwLAotICAgIFBFTkRJTkdfUEFSU0VSX0NPTkZJRywKLSAgICBQRU5ESU5HX1BBUlNFUl9JTklULAotICAgIFBBUlNFUl9JTklUSUFMSVpFRAotICB9OwotCi0gIC8vIENhbGxlZCBieSB0aGUgfHN0cmVhbV9wYXJzZXJffCB3aGVuIGEgbmV3IGluaXRpYWxpemF0aW9uIHNlZ21lbnQgaXMKLSAgLy8gZW5jb3VudGVyZWQuCi0gIC8vIFJldHVybnMgdHJ1ZSBvbiBhIHN1Y2Nlc3NmdWwgY2FsbC4gUmV0dXJucyBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZQotICAvLyBwcm9jZXNzaW5nIGRlY29kZXIgY29uZmlndXJhdGlvbnMuCi0gIGJvb2wgT25OZXdDb25maWdzKHN0ZDo6c3RyaW5nIGV4cGVjdGVkX2NvZGVjcywKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6VGV4dFRyYWNrQ29uZmlnTWFwJiB0ZXh0X2NvbmZpZ3MpOwotCi0gIC8vIENhbGxlZCBieSB0aGUgfHN0cmVhbV9wYXJzZXJffCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IG1lZGlhIHNlZ21lbnQuCi0gIHZvaWQgT25OZXdNZWRpYVNlZ21lbnQoKTsKLQotICAvLyBDYWxsZWQgYnkgdGhlIHxzdHJlYW1fcGFyc2VyX3wgYXQgdGhlIGVuZCBvZiBhIG1lZGlhIHNlZ21lbnQuCi0gIHZvaWQgT25FbmRPZk1lZGlhU2VnbWVudCgpOwotCi0gIC8vIENhbGxlZCBieSB0aGUgfHN0cmVhbV9wYXJzZXJffCB3aGVuIG5ldyBidWZmZXJzIGhhdmUgYmVlbiBwYXJzZWQuCi0gIC8vIEl0IHByb2Nlc3NlcyB0aGUgbmV3IGJ1ZmZlcnMgdXNpbmcgfGZyYW1lX3Byb2Nlc3Nvcl98LCB3aGljaCBpbmNsdWRlcwotICAvLyBhcHBlbmRpbmcgdGhlIHByb2Nlc3NlZCBmcmFtZXMgdG8gYXNzb2NpYXRlZCBkZW11eGVyIHN0cmVhbXMgZm9yIGVhY2gKLSAgLy8gZnJhbWUncyB0cmFjay4KLSAgLy8gUmV0dXJucyB0cnVlIG9uIGEgc3VjY2Vzc2Z1bCBjYWxsLiBSZXR1cm5zIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlCi0gIC8vIHByb2Nlc3NpbmcgdGhlIGJ1ZmZlcnMuCi0gIGJvb2wgT25OZXdCdWZmZXJzKGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAmIGJ1ZmZlcl9xdWV1ZV9tYXApOwotCi0gIHZvaWQgT25Tb3VyY2VJbml0RG9uZShjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBwYXJhbXMpOwotCi0gIC8vIFNldHMgbWVtb3J5IGxpbWl0cyBmb3IgYWxsIGRlbXV4ZXIgc3RyZWFtcy4KLSAgdm9pZCBTZXRTdHJlYW1NZW1vcnlMaW1pdHMoKTsKLQotICAvLyBUcmFja3MgdGhlIG51bWJlciBvZiBNRURJQV9MT0dzIGVtaXR0ZWQgZm9yIHNlZ21lbnRzIG1pc3NpbmcgZXhwZWN0ZWQgYXVkaW8KLSAgLy8gb3IgdmlkZW8gYmxvY2tzLiBVc2VmdWwgdG8gcHJldmVudCBsb2cgc3BhbS4KLSAgaW50IG51bV9taXNzaW5nX3RyYWNrX2xvZ3NfOwotCi0gIENyZWF0ZURlbXV4ZXJTdHJlYW1DQiBjcmVhdGVfZGVtdXhlcl9zdHJlYW1fY2JfOwotICBOZXdUZXh0VHJhY2tDQiBuZXdfdGV4dF90cmFja19jYl87Ci0KLSAgLy8gRHVyaW5nIEFwcGVuZCgpLCBpZiBPbk5ld0J1ZmZlcnMoKSBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nIHVwZGF0ZXMgdGhlCi0gIC8vIHRpbWVzdGFtcCBvZmZzZXQgdGhlbiB8KnRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF98IGlzIGFsc28gdXBkYXRlZAotICAvLyBzbyBBcHBlbmQoKSdzIGNhbGxlciBjYW4ga25vdyB0aGUgbmV3IG9mZnNldC4gVGhpcyBwb2ludGVyIGlzIG9ubHkgbm9uLU5VTEwKLSAgLy8gZHVyaW5nIHRoZSBsaWZldGltZSBvZiBhbiBBcHBlbmQoKSBjYWxsLgotICBUaW1lRGVsdGEqIHRpbWVzdGFtcF9vZmZzZXRfZHVyaW5nX2FwcGVuZF87Ci0KLSAgLy8gRHVyaW5nIEFwcGVuZCgpLCBjb2RlZCBmcmFtZSBwcm9jZXNzaW5nIHRyaWdnZXJlZCBieSBPbk5ld0J1ZmZlcnMoKQotICAvLyByZXF1aXJlcyB0aGVzZSB0d28gYXR0cmlidXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgotICAvLyBhbiBBcHBlbmQoKSBjYWxsLgotICBUaW1lRGVsdGEgYXBwZW5kX3dpbmRvd19zdGFydF9kdXJpbmdfYXBwZW5kXzsKLSAgVGltZURlbHRhIGFwcGVuZF93aW5kb3dfZW5kX2R1cmluZ19hcHBlbmRfOwotCi0gIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgYSBtZWRpYSBzZWdtZW50IGlzIGJlaW5nIHBhcnNlZC4KLSAgYm9vbCBwYXJzaW5nX21lZGlhX3NlZ21lbnRfOwotCi0gIC8vIFZhbGlkIG9ubHkgd2hpbGUgfHBhcnNpbmdfbWVkaWFfc2VnbWVudF98IGlzIHRydWUuIFRoZXNlIGZsYWdzIGVuYWJsZQotICAvLyB3YXJuaW5nIHdoZW4gdGhlIHBhcnNlZCBtZWRpYSBzZWdtZW50IGRvZXNuJ3QgaGF2ZSBmcmFtZXMgZm9yIHNvbWUgdHJhY2suCi0gIHN0ZDo6bWFwPFN0cmVhbVBhcnNlcjo6VHJhY2tJZCwgYm9vbD4gbWVkaWFfc2VnbWVudF9oYXNfZGF0YV9mb3JfdHJhY2tfOwotCi0gIC8vIFRoZSBvYmplY3QgdXNlZCB0byBwYXJzZSBhcHBlbmRlZCBkYXRhLgotICBzdGQ6OnVuaXF1ZV9wdHI8U3RyZWFtUGFyc2VyPiBzdHJlYW1fcGFyc2VyXzsKLQotICAvLyBOb3RlIHRoYXQgQ2h1bmtEZW11eGVyU3RyZWFtcyBhcmUgY3JlYXRlZCBhbmQgb3duZWQgYnkgdGhlIHBhcmVudAotICAvLyBDaHVua0RlbXV4ZXIuIFRoZXkgYXJlIG5vdCBvd25lZCBieSB8dGhpc3wuCi0gIHR5cGVkZWYgc3RkOjptYXA8U3RyZWFtUGFyc2VyOjpUcmFja0lkLCBDaHVua0RlbXV4ZXJTdHJlYW0qPiBEZW11eGVyU3RyZWFtTWFwOwotICBEZW11eGVyU3RyZWFtTWFwIGF1ZGlvX3N0cmVhbXNfOwotICBEZW11eGVyU3RyZWFtTWFwIHZpZGVvX3N0cmVhbXNfOwotICBEZW11eGVyU3RyZWFtTWFwIHRleHRfc3RyZWFtc187Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEZyYW1lUHJvY2Vzc29yPiBmcmFtZV9wcm9jZXNzb3JfOwotICBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOwotICBTdHJlYW1QYXJzZXI6OkluaXRDQiBpbml0X2NiXzsKLQotICBTdGF0ZSBzdGF0ZV87Ci0KLSAgLy8gRHVyaW5nIEFwcGVuZCgpLCBPbk5ld0NvbmZpZ3MoKSB3aWxsIHRyaWdnZXIgdGhlIGluaXRpYWxpemF0aW9uIHNlZ21lbnQKLSAgLy8gcmVjZWl2ZWQgYWxnb3JpdGhtLiBOb3RlLCB0aGUgTVNFIHNwZWMgZXhwbGljaXRseSBkaXNhbGxvd3MgdGhpcyBhbGdvcml0aG0KLSAgLy8gZHVyaW5nIGFuIEFib3J0KCksIHNpbmNlIEFib3J0KCkgaXMgYWxsb3dlZCBvbmx5IHRvIGVtaXQgY29kZWQgZnJhbWVzLCBhbmQKLSAgLy8gb25seSBpZiB0aGUgcGFyc2VyIGlzIFBBUlNJTkdfTUVESUFfU0VHTUVOVCAobm90IGFuIElOSVQgc2VnbWVudCkuIFNvIHdlCi0gIC8vIGFsc28gaGF2ZSBhIGZsYWcgaGVyZSB0aGF0IGluZGljYXRlcyBpZiBBcHBlbmQgaXMgaW4gcHJvZ3Jlc3MgYW5kIHdlIGNhbgotICAvLyBpbnZva2UgdGhpcyBjYWxsYmFjay4KLSAgRGVtdXhlcjo6TWVkaWFUcmFja3NVcGRhdGVkQ0IgaW5pdF9zZWdtZW50X3JlY2VpdmVkX2NiXzsKLSAgYm9vbCBhcHBlbmRfaW5fcHJvZ3Jlc3NfOwotICBib29sIGZpcnN0X2luaXRfc2VnbWVudF9yZWNlaXZlZF87Ci0KLSAgc3RkOjp2ZWN0b3I8QXVkaW9Db2RlYz4gZXhwZWN0ZWRfYXVkaW9fY29kZWNzXzsKLSAgc3RkOjp2ZWN0b3I8VmlkZW9Db2RlYz4gZXhwZWN0ZWRfdmlkZW9fY29kZWNzXzsKLQotICAvLyBJbmRpY2F0ZXMgdGhhdCB0aW1lc3RhbXBPZmZzZXQgc2hvdWxkIGJlIHVwZGF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcKLSAgLy8gT25OZXdCdWZmZXJzKCkgYmFzZWQgb24gdGhlIGVhcmxpZXN0IGVuZCB0aW1lc3RhbXAgb2YgdGhlIGJ1ZmZlcnMgcHJvdmlkZWQuCi0gIC8vIFRPRE8od29sZW5ldHopOiBSZWZhY3RvciB0aGlzIGZ1bmN0aW9uIHdoaWxlIGludGVncmF0aW5nIEFwcmlsIDI5LCAyMDE0Ci0gIC8vIGNoYW5nZXMgdG8gTVNFIHNwZWMuIFNlZSBodHRwOi8vY3JidWcuY29tLzM3MTQ5OS4KLSAgYm9vbCBhdXRvX3VwZGF0ZV90aW1lc3RhbXBfb2Zmc2V0XzsKLQotICBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3JfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTb3VyY2VCdWZmZXJTdGF0ZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19TT1VSQ0VfQlVGRkVSX1NUQVRFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZV91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5M2VlMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9wdHJfdXRpbC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZ21vY2tfY2FsbGJhY2tfc3VwcG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2ZpbHRlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXVzaW5nIHRlc3Rpbmc6Ol87Ci11c2luZyB0ZXN0aW5nOjpTYXZlQXJnOwotCi1uYW1lc3BhY2UgewotCi1BdWRpb0RlY29kZXJDb25maWcgQ3JlYXRlQXVkaW9Db25maWcoQXVkaW9Db2RlYyBjb2RlYykgewotICByZXR1cm4gQXVkaW9EZWNvZGVyQ29uZmlnKGNvZGVjLCBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgMTAwMCwgRW1wdHlFeHRyYURhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmVuY3J5cHRlZCgpKTsKLX0KLQotVmlkZW9EZWNvZGVyQ29uZmlnIENyZWF0ZVZpZGVvQ29uZmlnKFZpZGVvQ29kZWMgY29kZWMsIGludCB3LCBpbnQgaCkgewotICBtYXRoOjpTaXplIHNpemUodywgaCk7Ci0gIG1hdGg6OlJlY3QgdmlzaWJsZV9yZWN0KHNpemUpOwotICByZXR1cm4gVmlkZW9EZWNvZGVyQ29uZmlnKGNvZGVjLCBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUElYRUxfRk9STUFUX1lWMTIsIENPTE9SX1NQQUNFX0hEX1JFQzcwOSwgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlX3JlY3QsIHNpemUsIEVtcHR5RXh0cmFEYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5lbmNyeXB0ZWQoKSk7Ci19Ci0KLXZvaWQgQWRkQXVkaW9UcmFjayhzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+JiB0LCBBdWRpb0NvZGVjIGNvZGVjLCBpbnQgaWQpIHsKLSAgdC0+QWRkQXVkaW9UcmFjayhDcmVhdGVBdWRpb0NvbmZpZyhjb2RlYyksIGlkLCAiIiwgIiIsICIiKTsKLX0KLQotdm9pZCBBZGRWaWRlb1RyYWNrKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4mIHQsIFZpZGVvQ29kZWMgY29kZWMsIGludCBpZCkgewotICB0LT5BZGRWaWRlb1RyYWNrKENyZWF0ZVZpZGVvQ29uZmlnKGNvZGVjLCAxNiwgMTYpLCBpZCwgIiIsICIiLCAiIik7Ci19Ci0KLXZvaWQgSW52b2tlQ2JBbmRTYXZlUmVzdWx0KGNvbnN0IGJhc2U6OkNhbGxiYWNrPGJvb2woKT4mIGNiLCBib29sKiByZXN1bHQpIHsKLSAgRENIRUNLKHJlc3VsdCk7Ci0gICpyZXN1bHQgPSBjYi5SdW4oKTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBTb3VyY2VCdWZmZXJTdGF0ZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCgpCi0gICAgICA6IG1lZGlhX2xvZ18obmV3IHRlc3Rpbmc6OlN0cmljdE1vY2s8TW9ja01lZGlhTG9nPigpKSwKLSAgICAgICAgbW9ja19zdHJlYW1fcGFyc2VyXyhOVUxMKSB7fQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gQ3JlYXRlU291cmNlQnVmZmVyU3RhdGUoKSB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZyYW1lUHJvY2Vzc29yPiBmcmFtZV9wcm9jZXNzb3IgPSBiYXNlOjpXcmFwVW5pcXVlKAotICAgICAgICBuZXcgRnJhbWVQcm9jZXNzb3IoYmFzZTo6QmluZCgmU291cmNlQnVmZmVyU3RhdGVUZXN0OjpPblVwZGF0ZUR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhX2xvZ18pKTsKLSAgICBtb2NrX3N0cmVhbV9wYXJzZXJfID0gbmV3IHRlc3Rpbmc6OlN0cmljdE1vY2s8TW9ja1N0cmVhbVBhcnNlcj4oKTsKLSAgICByZXR1cm4gYmFzZTo6V3JhcFVuaXF1ZShuZXcgU291cmNlQnVmZmVyU3RhdGUoCi0gICAgICAgIGJhc2U6OldyYXBVbmlxdWUobW9ja19zdHJlYW1fcGFyc2VyXyksIHN0ZDo6bW92ZShmcmFtZV9wcm9jZXNzb3IpLAotICAgICAgICBiYXNlOjpCaW5kKCZTb3VyY2VCdWZmZXJTdGF0ZVRlc3Q6OkNyZWF0ZURlbXV4ZXJTdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIG1lZGlhX2xvZ18pKTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkX2NvZGVjcykgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gc2JzID0gQ3JlYXRlU291cmNlQnVmZmVyU3RhdGUoKTsKLSAgICBFWFBFQ1RfQ0FMTCgqbW9ja19zdHJlYW1fcGFyc2VyXywgSW5pdChfLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSkKLSAgICAgICAgLldpbGxPbmNlKFNhdmVBcmc8MT4oJm5ld19jb25maWdfY2JfKSk7Ci0gICAgc2JzLT5Jbml0KGJhc2U6OkJpbmQoJlNvdXJjZUJ1ZmZlclN0YXRlVGVzdDo6U291cmNlSW5pdERvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgICAgICAgIGV4cGVjdGVkX2NvZGVjcywKLSAgICAgICAgICAgICAgYmFzZTo6QmluZCgmU291cmNlQnVmZmVyU3RhdGVUZXN0OjpTdHJlYW1QYXJzZXJFbmNyeXB0ZWRJbml0RGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgICAgICAgYmFzZTo6QmluZCgmU291cmNlQnVmZmVyU3RhdGVUZXN0OjpTdHJlYW1QYXJzZXJOZXdUZXh0VHJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwotCi0gICAgc2JzLT5TZXRUcmFja3NXYXRjaGVyKGJhc2U6OkJpbmQoCi0gICAgICAgICZTb3VyY2VCdWZmZXJTdGF0ZVRlc3Q6Ok9uTWVkaWFUcmFja3NVcGRhdGVkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgcmV0dXJuIHNiczsKLSAgfQotCi0gIC8vIEVtdWxhdGVzIGFwcGVuZGluZyBzb21lIGRhdGEgdG8gdGhlIFNvdXJjZUJ1ZmZlclN0YXRlLCBzaW5jZSBPbk5ld0NvbmZpZ3MKLSAgLy8gY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIGFwcGVuZCBpcyBpbiBwcm9ncmVzcy4KLSAgYm9vbCBBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4mIHNicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKSB7Ci0gICAgY29uc3QgdWludDhfdCBzdHJlYW1fZGF0YVtdID0gInN0cmVhbV9kYXRhIjsKLSAgICBjb25zdCBpbnQgZGF0YV9zaXplID0gc2l6ZW9mKHN0cmVhbV9kYXRhKTsKLSAgICBiYXNlOjpUaW1lRGVsdGEgdDsKLSAgICBTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcCB0ZXh0X3RyYWNrX2NvbmZpZ19tYXA7Ci0KLSAgICBib29sIG5ld19jb25maWdzX3Jlc3VsdCA9IGZhbHNlOwotICAgIGJhc2U6OkNsb3N1cmUgbmV3X2NvbmZpZ3NfY2xvc3VyZSA9Ci0gICAgICAgIGJhc2U6OkJpbmQoSW52b2tlQ2JBbmRTYXZlUmVzdWx0LAotICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQobmV3X2NvbmZpZ19jYl8sIGJhc2U6OlBhc3NlZChzdGQ6Om1vdmUodHJhY2tzKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X3RyYWNrX2NvbmZpZ19tYXApLAotICAgICAgICAgICAgICAgICAgICZuZXdfY29uZmlnc19yZXN1bHQpOwotICAgIEVYUEVDVF9DQUxMKCptb2NrX3N0cmVhbV9wYXJzZXJfLCBQYXJzZShzdHJlYW1fZGF0YSwgZGF0YV9zaXplKSkKLSAgICAgICAgLldpbGxPbmNlKHRlc3Rpbmc6OkRvQWxsKFJ1bkNsb3N1cmUobmV3X2NvbmZpZ3NfY2xvc3VyZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpSZXR1cm4odHJ1ZSkpKTsKLSAgICBzYnMtPkFwcGVuZChzdHJlYW1fZGF0YSwgZGF0YV9zaXplLCB0LCB0LCAmdCk7Ci0gICAgcmV0dXJuIG5ld19jb25maWdzX3Jlc3VsdDsKLSAgfQotCi0gIE1PQ0tfTUVUSE9EMShPblVwZGF0ZUR1cmF0aW9uLCB2b2lkKGJhc2U6OlRpbWVEZWx0YSkpOwotCi0gIE1PQ0tfTUVUSE9EMShTb3VyY2VJbml0RG9uZSwgdm9pZChjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJikpOwotICBNT0NLX01FVEhPRDIoU3RyZWFtUGFyc2VyRW5jcnlwdGVkSW5pdERhdGEsCi0gICAgICAgICAgICAgICB2b2lkKEVtZUluaXREYXRhVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mKSk7Ci0gIE1PQ0tfTUVUSE9EMihTdHJlYW1QYXJzZXJOZXdUZXh0VHJhY2ssCi0gICAgICAgICAgICAgICB2b2lkKENodW5rRGVtdXhlclN0cmVhbSosIGNvbnN0IFRleHRUcmFja0NvbmZpZyYpKTsKLQotICBNT0NLX01FVEhPRDEoTWVkaWFUcmFja3NVcGRhdGVkTW9jaywgdm9pZChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+JikpOwotICB2b2lkIE9uTWVkaWFUcmFja3NVcGRhdGVkKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKSB7Ci0gICAgTWVkaWFUcmFja3NVcGRhdGVkTW9jayh0cmFja3MpOwotICB9Ci0KLSAgQ2h1bmtEZW11eGVyU3RyZWFtKiBDcmVhdGVEZW11eGVyU3RyZWFtKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICAgIHN0YXRpYyB1bnNpZ25lZCB0cmFja19pZCA9IDA7Ci0gICAgZGVtdXhlcl9zdHJlYW1zXy5wdXNoX2JhY2soYmFzZTo6V3JhcFVuaXF1ZSgKLSAgICAgICAgbmV3IENodW5rRGVtdXhlclN0cmVhbSh0eXBlLCBmYWxzZSwgYmFzZTo6VWludFRvU3RyaW5nKCsrdHJhY2tfaWQpKSkpOwotICAgIHJldHVybiBkZW11eGVyX3N0cmVhbXNfLmJhY2soKS5nZXQoKTsKLSAgfQotCi0gIHNjb3BlZF9yZWZwdHI8dGVzdGluZzo6U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+PiBtZWRpYV9sb2dfOwotICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2h1bmtEZW11eGVyU3RyZWFtPj4gZGVtdXhlcl9zdHJlYW1zXzsKLSAgTW9ja1N0cmVhbVBhcnNlciogbW9ja19zdHJlYW1fcGFyc2VyXzsKLSAgU3RyZWFtUGFyc2VyOjpOZXdDb25maWdDQiBuZXdfY29uZmlnX2NiXzsKLX07Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdGF0ZVRlc3QsIEluaXRTaW5nbGVBdWRpb1RyYWNrKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gc2JzID0KLSAgICAgIENyZWF0ZUFuZEluaXRTb3VyY2VCdWZmZXJTdGF0ZSgidm9yYmlzIik7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MobmV3IE1lZGlhVHJhY2tzKCkpOwotICBBZGRBdWRpb1RyYWNrKHRyYWNrcywga0NvZGVjVm9yYmlzLCAxKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJhdWRpbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgInZvcmJpcyIpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCwgSW5pdFNpbmdsZVZpZGVvVHJhY2spIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJ2cDgiKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzLCBrQ29kZWNWUDgsIDEpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oInZpZGVvIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvZGVjTmFtZSgidmlkZW8iLCAidnA4IikpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgTWVkaWFUcmFja3NVcGRhdGVkTW9jayhfKSk7Ci0gIEVYUEVDVF9UUlVFKEFwcGVuZERhdGFBbmRSZXBvcnRUcmFja3Moc2JzLCBzdGQ6Om1vdmUodHJhY2tzKSkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RhdGVUZXN0LCBJbml0TXVsdGlwbGVUcmFja3MpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJ2b3JiaXMsdnA4LG9wdXMsdnA5Iik7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MobmV3IE1lZGlhVHJhY2tzKCkpOwotICBBZGRBdWRpb1RyYWNrKHRyYWNrcywga0NvZGVjVm9yYmlzLCAxKTsKLSAgQWRkQXVkaW9UcmFjayh0cmFja3MsIGtDb2RlY09wdXMsIDIpOwotICBBZGRWaWRlb1RyYWNrKHRyYWNrcywga0NvZGVjVlA4LCAzKTsKLSAgQWRkVmlkZW9UcmFjayh0cmFja3MsIGtDb2RlY1ZQOSwgNCk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgiYXVkaW8iKSkuVGltZXMoMik7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJhdWRpbyIsICJ2b3JiaXMiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJhdWRpbyIsICJvcHVzIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOCIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOSIpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCwgQXVkaW9TdHJlYW1NaXNtYXRjaGVzRXhwZWN0ZWRDb2RlY3MpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJvcHVzIik7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQWRkQXVkaW9UcmFjayh0cmFja3MsIGtDb2RlY1ZvcmJpcywgMSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coSW5pdFNlZ21lbnRNaXNtYXRjaGVzTWltZVR5cGUoIkF1ZGlvIiwgInZvcmJpcyIpKTsKLSAgRVhQRUNUX0ZBTFNFKEFwcGVuZERhdGFBbmRSZXBvcnRUcmFja3Moc2JzLCBzdGQ6Om1vdmUodHJhY2tzKSkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RhdGVUZXN0LCBWaWRlb1N0cmVhbU1pc21hdGNoZXNFeHBlY3RlZENvZGVjcykgewotICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlQnVmZmVyU3RhdGU+IHNicyA9Ci0gICAgICBDcmVhdGVBbmRJbml0U291cmNlQnVmZmVyU3RhdGUoInZwOSIpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzLCBrQ29kZWNWUDgsIDEpOwotICBFWFBFQ1RfTUVESUFfTE9HKEluaXRTZWdtZW50TWlzbWF0Y2hlc01pbWVUeXBlKCJWaWRlbyIsICJ2cDgiKSk7Ci0gIEVYUEVDVF9GQUxTRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCwgTWlzc2luZ0V4cGVjdGVkQXVkaW9TdHJlYW0pIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJvcHVzLHZwOSIpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzLCBrQ29kZWNWUDksIDEpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOSIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhJbml0U2VnbWVudE1pc3Nlc0V4cGVjdGVkVHJhY2soIm9wdXMiKSk7Ci0gIEVYUEVDVF9GQUxTRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCwgTWlzc2luZ0V4cGVjdGVkVmlkZW9TdHJlYW0pIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJvcHVzLHZwOSIpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIHRyYWNrcy0+QWRkQXVkaW9UcmFjayhDcmVhdGVBdWRpb0NvbmZpZyhrQ29kZWNPcHVzKSwgMSwgIiIsICIiLCAiIik7Ci0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oImF1ZGlvIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvZGVjTmFtZSgiYXVkaW8iLCAib3B1cyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhJbml0U2VnbWVudE1pc3Nlc0V4cGVjdGVkVHJhY2soInZwOSIpKTsKLSAgRVhQRUNUX0ZBTFNFKEFwcGVuZERhdGFBbmRSZXBvcnRUcmFja3Moc2JzLCBzdGQ6Om1vdmUodHJhY2tzKSkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RhdGVUZXN0LCBUcmFja0lkc0NoYW5nZUluU2Vjb25kSW5pdFNlZ21lbnQpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0YXRlPiBzYnMgPQotICAgICAgQ3JlYXRlQW5kSW5pdFNvdXJjZUJ1ZmZlclN0YXRlKCJvcHVzLHZwOSIpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQWRkQXVkaW9UcmFjayh0cmFja3MsIGtDb2RlY09wdXMsIDEpOwotICBBZGRWaWRlb1RyYWNrKHRyYWNrcywga0NvZGVjVlA5LCAyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgiYXVkaW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJhdWRpbyIsICJvcHVzIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOSIpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpOwotCi0gIC8vIFRoaXMgc2Vjb25kIHNldCBvZiB0cmFja3MgaGF2ZSBieXRlc3RyZWFtIHRyYWNrIGlkcyB0aGF0IGRpZmZlciBmcm9tIHRoZQotICAvLyBmaXJzdCBpbml0IHNlZ21lbnQgYWJvdmUgKGF1ZGlvIHRyYWNrIGlkIDEgLT4gMywgdmlkZW8gdHJhY2sgaWQgMiAtPiA0KS4KLSAgLy8gQnl0ZXN0cmVhbSB0cmFjayBpZHMgYXJlIGFsbG93ZWQgdG8gY2hhbmdlIHdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZQotICAvLyB0cmFjayBvZiBlYWNoIHR5cGUuCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzMihuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZEF1ZGlvVHJhY2sodHJhY2tzMiwga0NvZGVjT3B1cywgMyk7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzMiwga0NvZGVjVlA5LCA0KTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrczIpKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0YXRlVGVzdCwgVHJhY2tJZENoYW5nZVdpdGhUd29BdWRpb1RyYWNrcykgewotICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlQnVmZmVyU3RhdGU+IHNicyA9Ci0gICAgICBDcmVhdGVBbmRJbml0U291cmNlQnVmZmVyU3RhdGUoInZvcmJpcyxvcHVzIik7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MobmV3IE1lZGlhVHJhY2tzKCkpOwotICBBZGRBdWRpb1RyYWNrKHRyYWNrcywga0NvZGVjVm9yYmlzLCAxKTsKLSAgQWRkQXVkaW9UcmFjayh0cmFja3MsIGtDb2RlY09wdXMsIDIpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJhdWRpbyIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgInZvcmJpcyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoImF1ZGlvIiwgIm9wdXMiKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBNZWRpYVRyYWNrc1VwZGF0ZWRNb2NrKF8pKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUFuZFJlcG9ydFRyYWNrcyhzYnMsIHN0ZDo6bW92ZSh0cmFja3MpKSk7Ci0KLSAgLy8gU2luY2Ugd2UgaGF2ZSB0d28gYXVkaW8gdHJhY2tzLCBieXRlc3RyZWFtIHRyYWNrIGlkcyBtdXN0IG1hdGNoIHRoZSBmaXJzdAotICAvLyBpbml0IHNlZ21lbnQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzMihuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZEF1ZGlvVHJhY2sodHJhY2tzMiwga0NvZGVjVm9yYmlzLCAxKTsKLSAgQWRkQXVkaW9UcmFjayh0cmFja3MyLCBrQ29kZWNPcHVzLCAyKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrczIpKSk7Ci0KLSAgLy8gRW11bGF0ZSB0aGUgc2l0dWF0aW9uIHdoZXJlIGJ5dGVzdHJlYW0gdHJhY2sgaWRzIGhhdmUgY2hhbmdlZCBpbiB0aGUgdGhpcmQKLSAgLy8gaW5pdCBzZWdtZW50LiBUaGlzIG11c3QgY2F1c2UgZmFpbHVyZSBpbiB0aGUgT25OZXdDb25maWdzLgotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrczMobmV3IE1lZGlhVHJhY2tzKCkpOwotICBBZGRBdWRpb1RyYWNrKHRyYWNrczMsIGtDb2RlY1ZvcmJpcywgMSk7Ci0gIEFkZEF1ZGlvVHJhY2sodHJhY2tzMywga0NvZGVjT3B1cywgMyk7Ci0gIEVYUEVDVF9NRURJQV9MT0coVW5leHBlY3RlZFRyYWNrKCJhdWRpbyIsICIzIikpOwotICBFWFBFQ1RfRkFMU0UoQXBwZW5kRGF0YUFuZFJlcG9ydFRyYWNrcyhzYnMsIHN0ZDo6bW92ZSh0cmFja3MzKSkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RhdGVUZXN0LCBUcmFja0lkQ2hhbmdlV2l0aFR3b1ZpZGVvVHJhY2tzKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gc2JzID0KLSAgICAgIENyZWF0ZUFuZEluaXRTb3VyY2VCdWZmZXJTdGF0ZSgidnA4LHZwOSIpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQWRkVmlkZW9UcmFjayh0cmFja3MsIGtDb2RlY1ZQOCwgMSk7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzLCBrQ29kZWNWUDksIDIpOwotICBFWFBFQ1RfTUVESUFfTE9HKEZvdW5kU3RyZWFtKCJ2aWRlbyIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOCIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb2RlY05hbWUoInZpZGVvIiwgInZwOSIpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrcykpKTsKLQotICAvLyBTaW5jZSB3ZSBoYXZlIHR3byB2aWRlbyB0cmFja3MsIGJ5dGVzdHJlYW0gdHJhY2sgaWRzIG11c3QgbWF0Y2ggdGhlIGZpcnN0Ci0gIC8vIGluaXQgc2VnbWVudC4KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MyKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQWRkVmlkZW9UcmFjayh0cmFja3MyLCBrQ29kZWNWUDgsIDEpOwotICBBZGRWaWRlb1RyYWNrKHRyYWNrczIsIGtDb2RlY1ZQOSwgMik7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBNZWRpYVRyYWNrc1VwZGF0ZWRNb2NrKF8pKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUFuZFJlcG9ydFRyYWNrcyhzYnMsIHN0ZDo6bW92ZSh0cmFja3MyKSkpOwotCi0gIC8vIEVtdWxhdGUgdGhlIHNpdHVhdGlvbiB3aGVyZSBieXRlc3RyZWFtIHRyYWNrIGlkcyBoYXZlIGNoYW5nZWQgaW4gdGhlIHRoaXJkCi0gIC8vIGluaXQgc2VnbWVudC4gVGhpcyBtdXN0IGNhdXNlIGZhaWx1cmUgaW4gdGhlIE9uTmV3Q29uZmlncy4KLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQWRkVmlkZW9UcmFjayh0cmFja3MzLCBrQ29kZWNWUDgsIDEpOwotICBBZGRWaWRlb1RyYWNrKHRyYWNrczMsIGtDb2RlY1ZQOSwgMyk7Ci0gIEVYUEVDVF9NRURJQV9MT0coVW5leHBlY3RlZFRyYWNrKCJ2aWRlbyIsICIzIikpOwotICBFWFBFQ1RfRkFMU0UoQXBwZW5kRGF0YUFuZFJlcG9ydFRyYWNrcyhzYnMsIHN0ZDo6bW92ZSh0cmFja3MzKSkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RhdGVUZXN0LCBUcmFja0lkc1N3YXBwZWRJblNlY29uZEluaXRTZWdtZW50KSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJTdGF0ZT4gc2JzID0KLSAgICAgIENyZWF0ZUFuZEluaXRTb3VyY2VCdWZmZXJTdGF0ZSgib3B1cyx2cDkiKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZEF1ZGlvVHJhY2sodHJhY2tzLCBrQ29kZWNPcHVzLCAxKTsKLSAgQWRkVmlkZW9UcmFjayh0cmFja3MsIGtDb2RlY1ZQOSwgMik7Ci0gIEVYUEVDVF9NRURJQV9MT0coRm91bmRTdHJlYW0oImF1ZGlvIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvZGVjTmFtZSgiYXVkaW8iLCAib3B1cyIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhGb3VuZFN0cmVhbSgidmlkZW8iKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29kZWNOYW1lKCJ2aWRlbyIsICJ2cDkiKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBNZWRpYVRyYWNrc1VwZGF0ZWRNb2NrKF8pKTsKLSAgQXBwZW5kRGF0YUFuZFJlcG9ydFRyYWNrcyhzYnMsIHN0ZDo6bW92ZSh0cmFja3MpKTsKLQotICAvLyBUcmFjayBpZHMgYXJlIHN3YXBwZWQgaW4gdGhlIHNlY29uZCBpbml0IHNlZ21lbnQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzMihuZXcgTWVkaWFUcmFja3MoKSk7Ci0gIEFkZEF1ZGlvVHJhY2sodHJhY2tzMiwga0NvZGVjT3B1cywgMik7Ci0gIEFkZFZpZGVvVHJhY2sodHJhY2tzMiwga0NvZGVjVlA5LCAxKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE1lZGlhVHJhY2tzVXBkYXRlZE1vY2soXykpOwotICBBcHBlbmREYXRhQW5kUmVwb3J0VHJhY2tzKHNicywgc3RkOjptb3ZlKHRyYWNrczIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDMwMzUyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTg2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdGFyYm9hcmRfdXRpbHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fcmVzb2x1dGlvbi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfcmFuZ2UuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi0vLyBUaGUgbnVtYmVyIG9mIG1zIHRvIGNyb3NzZmFkZSBiZWZvcmUgdHJpbW1pbmcgd2hlbiBidWZmZXJzIG92ZXJsYXAuCi0vLyBOb3RlIHRoYXQgdGhpcyB3YXMgZGVmaW5lZCBpbnNpZGUgQXVkaW9TcGxpY2VyLiAgUmUtZGVmaW5lIGl0IGhlcmUgdG8gYXZvaWQKLS8vIGRlcGVuZGVuY3kgb24gQXVkaW9TcGxpY2VyLgotY29uc3QgaW50IGtDcm9zc2ZhZGVEdXJhdGlvbkluTWlsbGlzZWNvbmRzID0gNTsKLQotLy8gQW4gYXJiaXRyYXJpbHktY2hvc2VuIG51bWJlciB0byBlc3RpbWF0ZSB0aGUgZHVyYXRpb24gb2YgYSBidWZmZXIgaWYgbm9uZSBpcwotLy8gc2V0IGFuZCB0aGVyZSdzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZ2V0IGEgYmV0dGVyIGVzdGltYXRlLgotY29uc3QgaW50IGtEZWZhdWx0QnVmZmVyRHVyYXRpb25Jbk1zID0gMTI1OwotCi0vLyBMaW1pdCB0aGUgbnVtYmVyIG9mIE1FRElBX0xPRygpIGxvZ3MgZm9yIHNwbGljZSBidWZmZXIgZ2VuZXJhdGlvbiB3YXJuaW5ncwotLy8gYW5kIHN1Y2Nlc3Nlcy4gVGhvdWdoIHRoZXNlIHZhbHVlcyBhcmUgaGlnaCBlbm91Z2ggdG8gcG9zc2libHkgZXhoYXVzdCB0aGUKLS8vIG1lZGlhIGludGVybmFscyBldmVudCBjYWNoZSAoYWxvbmcgd2l0aCBvdGhlciBldmVudHMpLCB0aGVzZSBsb2dzIGFyZQotLy8gaW1wb3J0YW50IGZvciBkZWJ1Z2dpbmcgc3BsaWNlIGdlbmVyYXRpb24uCi1jb25zdCBpbnQga01heFNwbGljZUdlbmVyYXRpb25XYXJuaW5nTG9ncyA9IDUwOwotY29uc3QgaW50IGtNYXhTcGxpY2VHZW5lcmF0aW9uU3VjY2Vzc0xvZ3MgPSAyMDsKLQotLy8gTGltaXQgdGhlIG51bWJlciBvZiBNRURJQV9MT0coKSBsb2dzIGZvciB0cmFjayBidWZmZXIgdGltZSBnYXBzLgotY29uc3QgaW50IGtNYXhUcmFja0J1ZmZlckdhcFdhcm5pbmdMb2dzID0gMjA7Ci0KLS8vIExpbWl0IHRoZSBudW1iZXIgb2YgTUVESUFfTE9HKCkgbG9ncyBmb3IgTVNFIEdDIGFsZ29yaXRobSB3YXJuaW5ncy4KLWNvbnN0IGludCBrTWF4R2FyYmFnZUNvbGxlY3RBbGdvcml0aG1XYXJuaW5nTG9ncyA9IDIwOwotCi0vLyBMaW1pdCB0aGUgbnVtYmVyIG9mIE1FRElBX0xPRygpIGxvZ3MgZm9yIHNhbWUgRFRTIGZvciBub24ta2V5ZnJhbWUgZm9sbG93ZWQKLS8vIGJ5IGtleWZyYW1lLiBQcmlvciB0byByZWxheGluZyB0aGUgIm1lZGlhIHNlZ21lbnRzIG11c3QgYmVnaW4gd2l0aCBhCi0vLyBrZXlmcmFtZSIgcmVxdWlyZW1lbnQsIHdlIGlzc3VlZCBkZWNvZGUgZXJyb3IgZm9yIHRoaXMgc2l0dWF0aW9uLiBUaGF0IHdhcwotLy8gbGlrZWx5IHRvbyBzdHJpY3QsIGFuZCBub3cgdGhhdCB0aGUga2V5ZnJhbWUgcmVxdWlyZW1lbnQgaXMgcmVsYXhlZCwgd2UgaGF2ZQotLy8gbm8ga25vd2xlZGdlIG9mIG1lZGlhIHNlZ21lbnQgYm91bmRhcmllcyBoZXJlLiBOb3csIHdlIGxvZyBidXQgZG9uJ3QgdHJpZ2dlcgotLy8gZGVjb2RlIGVycm9yLCBzaW5jZSB3ZSBhbGxvdyB0aGVzZSBzZXF1ZW5jZXMgd2hpY2ggbWF5IGNhdXNlIGV4dHJhIGRlY29kZXIKLS8vIHdvcmsgb3Igb3RoZXIgc2lkZS1lZmZlY3RzLgotY29uc3QgaW50IGtNYXhTdHJhbmdlU2FtZVRpbWVzdGFtcHNMb2dzID0gMjA7Ci0KLS8vIEhlbHBlciBtZXRob2QgdGhhdCByZXR1cm5zIHRydWUgaWYgfHJhbmdlc3wgaXMgc29ydGVkIGluIGluY3JlYXNpbmcgb3JkZXIsCi0vLyBmYWxzZSBvdGhlcndpc2UuCi1ib29sIElzUmFuZ2VMaXN0U29ydGVkKGNvbnN0IHN0ZDo6bGlzdDxtZWRpYTo6U291cmNlQnVmZmVyUmFuZ2UqPiYgcmFuZ2VzKSB7Ci0gIERlY29kZVRpbWVzdGFtcCBwcmV2ID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0gIGZvciAoc3RkOjpsaXN0PFNvdXJjZUJ1ZmZlclJhbmdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IHJhbmdlcy5iZWdpbigpOwotICAgICAgIGl0ciAhPSByYW5nZXMuZW5kKCk7ICsraXRyKSB7Ci0gICAgaWYgKHByZXYgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkgJiYgcHJldiA+PSAoKml0ciktPkdldFN0YXJ0VGltZXN0YW1wKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcHJldiA9ICgqaXRyKS0+R2V0RW5kVGltZXN0YW1wKCk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgYW4gZXN0aW1hdGUgb2YgaG93IGZhciBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgcmFuZ2UgYSBidWZmZXIKLS8vIGNhbiBiZSB0byBzdGlsbCBiZSBjb25zaWRlcmVkIGluIHRoZSByYW5nZSwgZ2l2ZW4gdGhlIHxhcHByb3hpbWF0ZV9kdXJhdGlvbnwKLS8vIG9mIGEgYnVmZmVyIGluIHRoZSBzdHJlYW0uCi0vLyBUT0RPOiBPbmNlIGFsbCBzdHJlYW0gcGFyc2VycyBlbWl0IGFjY3VyYXRlIGZyYW1lIGR1cmF0aW9ucywgdXNlIGxvZ2ljIGxpa2UKLS8vIEZyYW1lUHJvY2Vzc29yICgyKmxhc3RfZnJhbWVfZHVyYXRpb24gKyBsYXN0X2RlY29kZV90aW1lc3RhbXApIGluc3RlYWQgb2YgYW4KLS8vIG92ZXJhbGwgbWF4aW11bSBpbnRlcmJ1ZmZlciBkZWx0YSBmb3IgcmFuZ2UgZGlzY29udGludWl0eSBkZXRlY3Rpb24sIGFuZAotLy8gYWRqdXN0IHNpbWlsYXJseSBmb3Igc3BsaWNlIGZyYW1lIGRpc2NvbnRpbnVpdHkgZGV0ZWN0aW9uLgotLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzUxNDg5IGFuZCBodHRwOi8vY3JidWcuY29tLzM1MTE2Ni4KLWJhc2U6OlRpbWVEZWx0YSBDb21wdXRlRnVkZ2VSb29tKGJhc2U6OlRpbWVEZWx0YSBhcHByb3hpbWF0ZV9kdXJhdGlvbikgewotICAvLyBCZWNhdXNlIHdlIGRvIG5vdCBrbm93IGV4YWN0bHkgd2hlbiBpcyB0aGUgbmV4dCB0aW1lc3RhbXAsIGFueSBidWZmZXIKLSAgLy8gdGhhdCBzdGFydHMgd2l0aGluIDJ4IHRoZSBhcHByb3hpbWF0ZSBkdXJhdGlvbiBvZiBhIGJ1ZmZlciBpcyBjb25zaWRlcmVkCi0gIC8vIHdpdGhpbiB0aGlzIHJhbmdlLgotICByZXR1cm4gMiAqIGFwcHJveGltYXRlX2R1cmF0aW9uOwotfQotCi0vLyBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyZWQgZGF0YSBjYW4gZGlmZmVyIGZyb20gdGhlCi0vLyBzdGFydCB0aW1lIGluIG9yZGVyIHRvIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIHN0YXJ0IG9mIHN0cmVhbS4KLWJhc2U6OlRpbWVEZWx0YSBrU2Vla1RvU3RhcnRGdWRnZVJvb20oKSB7Ci0gIHJldHVybiBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTAwMCk7Ci19Ci0KLS8vIEhlbHBlciBtZXRob2QgZm9yIGxvZ2dpbmcsIGNvbnZlcnRzIGEgcmFuZ2UgaW50byBhIHJlYWRhYmxlIHN0cmluZy4KLXN0ZDo6c3RyaW5nIFJhbmdlVG9TdHJpbmcoY29uc3QgU291cmNlQnVmZmVyUmFuZ2UmIHJhbmdlKSB7Ci0gIGlmIChyYW5nZS5zaXplX2luX2J5dGVzKCkgPT0gMCkgewotICAgIHJldHVybiAiW10iOwotICB9Ci0gIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICBzcyA8PCAiWyIgPDwgcmFuZ2UuR2V0U3RhcnRUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIjsiCi0gICAgIDw8IHJhbmdlLkdldEVuZFRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKSA8PCAiKCIKLSAgICAgPDwgcmFuZ2UuR2V0QnVmZmVyZWRFbmRUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIildIjsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi0vLyBIZWxwZXIgbWV0aG9kIGZvciBsb2dnaW5nLCBjb252ZXJ0cyBhIHNldCBvZiByYW5nZXMgaW50byBhIHJlYWRhYmxlIHN0cmluZy4KLXN0ZDo6c3RyaW5nIFJhbmdlc1RvU3RyaW5nKGNvbnN0IFNvdXJjZUJ1ZmZlclN0cmVhbTo6UmFuZ2VMaXN0JiByYW5nZXMpIHsKLSAgaWYgKHJhbmdlcy5lbXB0eSgpKSByZXR1cm4gIjxFTVBUWT4iOwotCi0gIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICBmb3IgKFNvdXJjZUJ1ZmZlclN0cmVhbTo6UmFuZ2VMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcmFuZ2VzLmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSByYW5nZXMuZW5kKCk7ICsraXRlcikgewotICAgIGlmIChpdGVyICE9IHJhbmdlcy5iZWdpbigpKSBzcyA8PCAiICI7Ci0gICAgc3MgPDwgUmFuZ2VUb1N0cmluZygqKml0ZXIpOwotICB9Ci0gIHJldHVybiBzcy5zdHIoKTsKLX0KLQotc3RkOjpzdHJpbmcgQnVmZmVyUXVldWVUb0xvZ1N0cmluZygKLSAgICBjb25zdCBTb3VyY2VCdWZmZXJTdHJlYW06OkJ1ZmZlclF1ZXVlJiBidWZmZXJzKSB7Ci0gIHN0ZDo6c3RyaW5nc3RyZWFtIHJlc3VsdDsKLSAgaWYgKGJ1ZmZlcnMuZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSA9PQotICAgICAgICAgIGJ1ZmZlcnMuZnJvbnQoKS0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSAmJgotICAgICAgYnVmZmVycy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkgPT0KLSAgICAgICAgICBidWZmZXJzLmJhY2soKS0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSkgewotICAgIHJlc3VsdCA8PCAiZHRzL3B0cz1bIiA8PCBidWZmZXJzLmZyb250KCktPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKSA8PCAiOyIKLSAgICAgICAgICAgPDwgYnVmZmVycy5iYWNrKCktPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKQotICAgICAgICAgICA8PCAiKGxhc3QgZnJhbWUgZHVyPSIgPDwgYnVmZmVycy5iYWNrKCktPmR1cmF0aW9uKCkuSW5TZWNvbmRzRigpCi0gICAgICAgICAgIDw8ICIpXSI7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0IDw8ICJkdHM9WyIgPDwgYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIjsiIDw8IGJ1ZmZlcnMuYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIl0gcHRzPVsiIDw8IGJ1ZmZlcnMuZnJvbnQoKS0+dGltZXN0YW1wKCkuSW5TZWNvbmRzRigpIDw8ICI7IgotICAgICAgICAgICA8PCBidWZmZXJzLmJhY2soKS0+dGltZXN0YW1wKCkuSW5TZWNvbmRzRigpCi0gICAgICAgICAgIDw8ICIobGFzdCBmcmFtZSBkdXI9IiA8PCBidWZmZXJzLmJhY2soKS0+ZHVyYXRpb24oKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIildIjsKLSAgfQotICByZXR1cm4gcmVzdWx0LnN0cigpOwotfQotCi1Tb3VyY2VCdWZmZXJSYW5nZTo6R2FwUG9saWN5IFR5cGVUb0dhcFBvbGljeShTb3VyY2VCdWZmZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a0F1ZGlvOgotICAgIGNhc2UgU291cmNlQnVmZmVyU3RyZWFtOjprVmlkZW86Ci0gICAgICByZXR1cm4gU291cmNlQnVmZmVyUmFuZ2U6Ok5PX0dBUFNfQUxMT1dFRDsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1RleHQ6Ci0gICAgICByZXR1cm4gU291cmNlQnVmZmVyUmFuZ2U6OkFMTE9XX0dBUFM7Ci0gIH0KLQotICBOT1RSRUFDSEVEKCk7Ci0gIHJldHVybiBTb3VyY2VCdWZmZXJSYW5nZTo6Tk9fR0FQU19BTExPV0VEOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotU291cmNlQnVmZmVyU3RyZWFtOjpTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzcGxpY2VfZnJhbWVzX2VuYWJsZWQpCi0gICAgOiBTb3VyY2VCdWZmZXJTdHJlYW1TdGF0ZShzcGxpY2VfZnJhbWVzX2VuYWJsZWQpLAotICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAotICAgICAgc2Vla19idWZmZXJfdGltZXN0YW1wXyhrTm9UaW1lc3RhbXApLAotICAgICAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyhyYW5nZXNfLmVuZCgpKSwKLSAgICAgIGxhc3Rfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXBfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKLSAgICAgIG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV8oa05vVGltZXN0YW1wKSwKLSAgICAgIG1lbW9yeV9saW1pdF8oU2JNZWRpYUdldEF1ZGlvQnVmZmVyQnVkZ2V0KCkpIHsKLQotICBEQ0hFQ0soYXVkaW9fY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0gIGF1ZGlvX2NvbmZpZ3NfLnB1c2hfYmFjayhhdWRpb19jb25maWcpOwotfQotCi1Tb3VyY2VCdWZmZXJTdHJlYW06OlNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCkKLSAgICA6IFNvdXJjZUJ1ZmZlclN0cmVhbVN0YXRlKHNwbGljZV9mcmFtZXNfZW5hYmxlZCksCi0gICAgICBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCi0gICAgICBzZWVrX2J1ZmZlcl90aW1lc3RhbXBfKGtOb1RpbWVzdGFtcCksCi0gICAgICBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lXyhrTm9EZWNvZGVUaW1lc3RhbXAoKSksCi0gICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfKHJhbmdlc18uZW5kKCkpLAotICAgICAgbGFzdF9vdXRwdXRfYnVmZmVyX3RpbWVzdGFtcF8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgbWF4X2ludGVyYnVmZmVyX2Rpc3RhbmNlXyhrTm9UaW1lc3RhbXApIHsKLSAgRENIRUNLKHZpZGVvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotICB2aWRlb19jb25maWdzXy5wdXNoX2JhY2sodmlkZW9fY29uZmlnKTsKLSAgLy8gVGhpcyBnZXRzIHVwZGF0ZWQgdmlhIHRha2luZyBhIG1heCBpbiBVcGRhdGVNZWRpYUJ1ZmZlck1lbWJlcnMuCi0gIG1lbW9yeV9saW1pdF8gPSAwOwotICBVcGRhdGVNZWRpYUJ1ZmZlck1lbWJlcnModmlkZW9fY29uZmlnKTsKLX0KLQotU291cmNlQnVmZmVyU3RyZWFtOjpTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3QgVGV4dFRyYWNrQ29uZmlnJiB0ZXh0X2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCkKLSAgICA6IFNvdXJjZUJ1ZmZlclN0cmVhbVN0YXRlKHNwbGljZV9mcmFtZXNfZW5hYmxlZCksCi0gICAgICBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCi0gICAgICB0ZXh0X3RyYWNrX2NvbmZpZ18odGV4dF9jb25maWcpLAotICAgICAgc2Vla19idWZmZXJfdGltZXN0YW1wXyhrTm9UaW1lc3RhbXApLAotICAgICAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyhyYW5nZXNfLmVuZCgpKSwKLSAgICAgIGxhc3Rfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXBfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKLSAgICAgIG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV8oa05vVGltZXN0YW1wKSwKLSAgICAgIG1lbW9yeV9saW1pdF8oU2JNZWRpYUdldEF1ZGlvQnVmZmVyQnVkZ2V0KCkpIHsKLX0KLQotU291cmNlQnVmZmVyU3RyZWFtOjp+U291cmNlQnVmZmVyU3RyZWFtKCkgewotICB3aGlsZSAoIXJhbmdlc18uZW1wdHkoKSkgewotICAgIGRlbGV0ZSByYW5nZXNfLmZyb250KCk7Ci0gICAgcmFuZ2VzXy5wb3BfZnJvbnQoKTsKLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6T25TdGFydE9mQ29kZWRGcmFtZUdyb3VwKAotICAgIERlY29kZVRpbWVzdGFtcCBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lKSB7Ci0gIERWTE9HKDEpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgKCIKLSAgICAgICAgICAgPDwgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZS5JblNlY29uZHNGKCkgPDwgIikiOwotICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW1fKTsKLSAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8gPSBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lOwotICBuZXdfY29kZWRfZnJhbWVfZ3JvdXBfID0gdHJ1ZTsKLQotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIGxhc3RfcmFuZ2UgPSByYW5nZV9mb3JfbmV4dF9hcHBlbmRfOwotICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfID0gRmluZEV4aXN0aW5nUmFuZ2VGb3IoY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZSk7Ci0KLSAgLy8gT25seSByZXNldCB8bGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wX3wgaWYgdGhpcyBuZXcgY29kZWQgZnJhbWUgZ3JvdXAKLSAgLy8gaXMgbm90IGFkamFjZW50IHRvIHRoZSBwcmV2aW91cyBjb2RlZCBmcmFtZSBncm91cCBhcHBlbmRlZCB0byB0aGUgc3RyZWFtLgotICBpZiAocmFuZ2VfZm9yX25leHRfYXBwZW5kXyA9PSByYW5nZXNfLmVuZCgpIHx8Ci0gICAgICAhQXJlQWRqYWNlbnRJblNlcXVlbmNlKGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWUpKSB7Ci0gICAgUmVzZXRMYXN0QXBwZW5kZWRTdGF0ZSgpOwotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgbmV4dCBhcHBlbmRlZCBidWZmZXJzIHdpbGwgIgotICAgICAgICAgICAgIDw8IChyYW5nZV9mb3JfbmV4dF9hcHBlbmRfID09IHJhbmdlc18uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgID8gImJlIGluIGEgbmV3IHJhbmdlIgotICAgICAgICAgICAgICAgICAgICAgOiAib3ZlcmxhcCBhbiBleGlzdGluZyByYW5nZSIpOwotICB9IGVsc2UgaWYgKGxhc3RfcmFuZ2UgIT0gcmFuZ2VzXy5lbmQoKSkgewotICAgIERDSEVDSyhsYXN0X3JhbmdlID09IHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8pOwotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgbmV4dCBhcHBlbmRlZCBidWZmZXJzIHdpbGwgY29udGludWUgcmFuZ2UgdW5sZXNzICIKLSAgICAgICAgICAgICA8PCAiaW50ZXJ2ZW5pbmcgcmVtb3ZlIG1ha2VzIGRpc2NvbnRpbnVpdHkiOwotICB9Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyU3RyZWFtOjpBcHBlbmQoY29uc3QgQnVmZmVyUXVldWUmIGJ1ZmZlcnMpIHsKLSAgVFJBQ0VfRVZFTlQyKCJtZWRpYSIsICJTb3VyY2VCdWZmZXJTdHJlYW06OkFwcGVuZCIsICJzdHJlYW0gdHlwZSIsCi0gICAgICAgICAgICAgICBHZXRTdHJlYW1UeXBlTmFtZSgpLCAiYnVmZmVycyB0byBhcHBlbmQiLCBidWZmZXJzLnNpemUoKSk7Ci0KLSAgRENIRUNLKCFidWZmZXJzLmVtcHR5KCkpOwotICBEQ0hFQ0soY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8gIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpOwotICBEQ0hFQ0soY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8gPD0KLSAgICAgICAgIGJ1ZmZlcnMuZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkpOwotICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW1fKTsKLQotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiOiBidWZmZXJzICIKLSAgICAgICAgICAgPDwgQnVmZmVyUXVldWVUb0xvZ1N0cmluZyhidWZmZXJzKTsKLQotICAvLyBOZXcgY29kZWQgZnJhbWUgZ3JvdXBzIGVtaXR0ZWQgYnkgdGhlIGNvZGVkIGZyYW1lIHByb2Nlc3NvciBtdXN0IGJlZ2luIHdpdGgKLSAgLy8gYSBrZXlmcmFtZS4gVE9ETyh3b2xlbmV0eik6IENoYW5nZSB0aGlzIHRvIFtEQ0hFQ0sgKyBNRURJQV9MT0coRVJST1IuLi4pICsKLSAgLy8gcmV0dXJuIGZhbHNlXSBvbmNlIHRoZSBDSEVDSyBoYXMgYmFrZWQgaW4gYSBzdGFibGUgcmVsZWFzZS4gU2VlCi0gIC8vIGh0dHBzOi8vY3JidWcuY29tLzU4MDYyMS4KLSAgQ0hFQ0soIW5ld19jb2RlZF9mcmFtZV9ncm91cF8gfHwgYnVmZmVycy5mcm9udCgpLT5pc19rZXlfZnJhbWUoKSk7Ci0KLSAgLy8gQnVmZmVycyB3aXRoaW4gYSBjb2RlZCBmcmFtZSBncm91cCBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLgotICBpZiAoIUlzTW9ub3RvbmljYWxseUluY3JlYXNpbmcoYnVmZmVycykpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8gPCBEZWNvZGVUaW1lc3RhbXAoKSB8fAotICAgICAgYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKSA8IERlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICA8PCAiQ2Fubm90IGFwcGVuZCBhIGNvZGVkIGZyYW1lIGdyb3VwIHdpdGggbmVnYXRpdmUgdGltZXN0YW1wcy4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFVwZGF0ZU1heEludGVyYnVmZmVyRGlzdGFuY2UoYnVmZmVycyk7Ci0gIFNldENvbmZpZ0lkcyhidWZmZXJzKTsKLQotICAvLyBTYXZlIGEgc25hcHNob3Qgb2Ygc3RyZWFtIHN0YXRlIGJlZm9yZSByYW5nZSBtb2RpZmljYXRpb25zIGFyZSBtYWRlLgotICBEZWNvZGVUaW1lc3RhbXAgbmV4dF9idWZmZXJfdGltZXN0YW1wID0gR2V0TmV4dEJ1ZmZlclRpbWVzdGFtcCgpOwotICBCdWZmZXJRdWV1ZSBkZWxldGVkX2J1ZmZlcnM7Ci0KLSAgUHJlcGFyZVJhbmdlc0Zvck5leHRBcHBlbmQoYnVmZmVycywgJmRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgLy8gSWYgdGhlcmUncyBhIHJhbmdlIGZvciB8YnVmZmVyc3wsIGluc2VydCB8YnVmZmVyc3wgYWNjb3JkaW5nbHkuIE90aGVyd2lzZSwKLSAgLy8gY3JlYXRlIGEgbmV3IHJhbmdlIHdpdGggfGJ1ZmZlcnN8LgotICBpZiAocmFuZ2VfZm9yX25leHRfYXBwZW5kXyAhPSByYW5nZXNfLmVuZCgpKSB7Ci0gICAgaWYgKG5ld19jb2RlZF9mcmFtZV9ncm91cF8gJiYgKCFzcGxpY2VfZnJhbWVzX2VuYWJsZWRfIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMuZnJvbnQoKS0+c3BsaWNlX2J1ZmZlcnMoKS5lbXB0eSgpKSkgewotICAgICAgLy8gSWYgdGhlIGZpcnN0IGFwcGVuZCB0byB0aGlzIHN0cmVhbSBpbiBhIG5ldyBjb2RlZCBmcmFtZSBncm91cCBjb250aW51ZXMKLSAgICAgIC8vIGEgcHJldmlvdXMgcmFuZ2UsIHVzZSB0aGUgbmV3IGdyb3VwJ3Mgc3RhcnQgdGltZSBpbnN0ZWFkIG9mIHRoZSBmaXJzdAotICAgICAgLy8gbmV3IGJ1ZmZlcidzIHRpbWVzdGFtcCBhcyB0aGUgcHJvb2Ygb2YgYWRqYWNlbmN5IHRvIHRoZSBleGlzdGluZyByYW5nZS4KLSAgICAgIC8vIEEgbGFyZ2UgZ2FwIChsYXJnZXIgdGhhbiBvdXIgbm9ybWFsIGJ1ZmZlciBhZGphY2VuY3kgdGVzdCkgY2FuIG9jY3VyIGluCi0gICAgICAvLyBhIG11eGVkIHNldCBvZiBzdHJlYW1zICh3aGljaCBzaGFyZSBhIGNvbW1vbiBjb2RlZCBmcmFtZSBncm91cCBzdGFydAotICAgICAgLy8gdGltZSkgd2l0aCBhIHNpZ25pZmljYW50bHkgamFnZ2VkIHN0YXJ0IGFjcm9zcyB0aGUgc3RyZWFtcy4KLSAgICAgIC8vIERvbid0IGRvIHRoaXMgbG9naWMgaWYgdGhlcmUgd2FzIGEgc3BsaWNlIGZyYW1lIGdlbmVyYXRlZCBmb3IgdGhlIGZpcnN0Ci0gICAgICAvLyBuZXcgYnVmZmVyLCBzaW5jZSBzcGxpY2VzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGluIHRoZSBzYW1lIHJhbmdlIGFuZAotICAgICAgLy8gYWRqYWNlbnQsIGFuZCBzaW5jZSB0aGUgc3BsaWNlIGZyYW1lJ3MgdGltZXN0YW1wIGNhbiBiZSBsZXNzIHRoYW4KLSAgICAgIC8vIHxjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lX3wgZHVlIHRvIHRoZSBzcGxpY2luZy4KLSAgICAgICgqcmFuZ2VfZm9yX25leHRfYXBwZW5kXykKLSAgICAgICAgICAtPkFwcGVuZEJ1ZmZlcnNUb0VuZChidWZmZXJzLCBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lXyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBmaXJzdCBuZXcgYnVmZmVyJ3MgdGltZXN0YW1wIGFzIHRoZSBwcm9vZiBvZgotICAgICAgLy8gYWRqYWNlbmN5LgotICAgICAgKCpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfKQotICAgICAgICAgIC0+QXBwZW5kQnVmZmVyc1RvRW5kKGJ1ZmZlcnMsIGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLSAgICB9Ci0KLSAgICBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfID0gYnVmZmVycy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotICAgIGxhc3RfYXBwZW5kZWRfYnVmZmVyX2R1cmF0aW9uXyA9IGJ1ZmZlcnMuYmFjaygpLT5kdXJhdGlvbigpOwotICAgIGxhc3RfYXBwZW5kZWRfYnVmZmVyX2lzX2tleWZyYW1lXyA9IGJ1ZmZlcnMuYmFjaygpLT5pc19rZXlfZnJhbWUoKTsKLSAgfSBlbHNlIHsKLSAgICBEZWNvZGVUaW1lc3RhbXAgbmV3X3JhbmdlX3N0YXJ0X3RpbWUgPSBzdGQ6Om1pbigKLSAgICAgICAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV8sIGJ1ZmZlcnMuZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkpOwotICAgIGNvbnN0IEJ1ZmZlclF1ZXVlKiBidWZmZXJzX2Zvcl9uZXdfcmFuZ2UgPSAmYnVmZmVyczsKLSAgICBCdWZmZXJRdWV1ZSB0cmltbWVkX2J1ZmZlcnM7Ci0KLSAgICAvLyBJZiB0aGUgbmV3IHJhbmdlIGlzIG5vdCBiZWluZyBjcmVhdGVkIGJlY2F1c2Ugb2YgYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAsCi0gICAgLy8gdGhlbiB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHdlIHN0YXJ0IHdpdGggYSBrZXkgZnJhbWUuICBUaGlzIGNhbiBoYXBwZW4KLSAgICAvLyBpZiB0aGUgR09QIGluIHRoZSBwcmV2aW91cyBhcHBlbmQgZ2V0cyBkZXN0cm95ZWQgYnkgYSBSZW1vdmUoKSBjYWxsLgotICAgIGlmICghbmV3X2NvZGVkX2ZyYW1lX2dyb3VwXykgewotICAgICAgQnVmZmVyUXVldWU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IGJ1ZmZlcnMuYmVnaW4oKTsKLQotICAgICAgLy8gU2NhbiBwYXN0IGFsbCB0aGUgbm9uLWtleS1mcmFtZXMuCi0gICAgICB3aGlsZSAoaXRyICE9IGJ1ZmZlcnMuZW5kKCkgJiYgISgqaXRyKS0+aXNfa2V5X2ZyYW1lKCkpIHsKLSAgICAgICAgKytpdHI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEga2V5IGZyYW1lLCB0aGVuIHVwZGF0ZSB0aGUgbGFzdCBhcHBlbmRlZAotICAgICAgLy8gYnVmZmVyIHN0YXRlIGFuZCByZXR1cm4uCi0gICAgICBpZiAoaXRyID09IGJ1ZmZlcnMuZW5kKCkpIHsKLSAgICAgICAgbGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXyA9IGJ1ZmZlcnMuYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICAgICAgbGFzdF9hcHBlbmRlZF9idWZmZXJfZHVyYXRpb25fID0gYnVmZmVycy5iYWNrKCktPmR1cmF0aW9uKCk7Ci0gICAgICAgIGxhc3RfYXBwZW5kZWRfYnVmZmVyX2lzX2tleWZyYW1lXyA9IGJ1ZmZlcnMuYmFjaygpLT5pc19rZXlfZnJhbWUoKTsKLSAgICAgICAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiAiIDw8IEdldFN0cmVhbVR5cGVOYW1lKCkKLSAgICAgICAgICAgICAgICAgPDwgIjogbmV3IGJ1ZmZlcnMgaW4gdGhlIG1pZGRsZSBvZiBjb2RlZCBmcmFtZSBncm91cCBkZXBlbmQgb24iCi0gICAgICAgICAgICAgICAgICAgICJrZXlmcmFtZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBjb250YWluIG5vIGtleWZyYW1lcy4iCi0gICAgICAgICAgICAgICAgICAgICJTa2lwcGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuIjsKLSAgICAgICAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiAiIDw8IEdldFN0cmVhbVR5cGVOYW1lKCkKLSAgICAgICAgICAgICAgICAgPDwgIjogZG9uZS4gcmFuZ2VzXz0iIDw8IFJhbmdlc1RvU3RyaW5nKHJhbmdlc18pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoaXRyICE9IGJ1ZmZlcnMuYmVnaW4oKSkgewotICAgICAgICAvLyBDb3B5IHRoZSBmaXJzdCBrZXkgZnJhbWUgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXQgaW50bwotICAgICAgICAvLyB8dHJpbW1lZF9idWZmZXJzfC4KLSAgICAgICAgdHJpbW1lZF9idWZmZXJzLmFzc2lnbihpdHIsIGJ1ZmZlcnMuZW5kKCkpOwotICAgICAgICBidWZmZXJzX2Zvcl9uZXdfcmFuZ2UgPSAmdHJpbW1lZF9idWZmZXJzOwotICAgICAgfQotCi0gICAgICBuZXdfcmFuZ2Vfc3RhcnRfdGltZSA9Ci0gICAgICAgICAgYnVmZmVyc19mb3JfbmV3X3JhbmdlLT5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICB9Ci0KLSAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfID0gQWRkVG9SYW5nZXMobmV3IFNvdXJjZUJ1ZmZlclJhbmdlKAotICAgICAgICBUeXBlVG9HYXBQb2xpY3koR2V0VHlwZSgpKSwgKmJ1ZmZlcnNfZm9yX25ld19yYW5nZSwKLSAgICAgICAgbmV3X3JhbmdlX3N0YXJ0X3RpbWUsCi0gICAgICAgIGJhc2U6OkJpbmQoJlNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0TWF4SW50ZXJidWZmZXJEaXN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpOwotICAgIGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF8gPQotICAgICAgICBidWZmZXJzX2Zvcl9uZXdfcmFuZ2UtPmJhY2soKS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0gICAgbGFzdF9hcHBlbmRlZF9idWZmZXJfZHVyYXRpb25fID0gYnVmZmVyc19mb3JfbmV3X3JhbmdlLT5iYWNrKCktPmR1cmF0aW9uKCk7Ci0gICAgbGFzdF9hcHBlbmRlZF9idWZmZXJfaXNfa2V5ZnJhbWVfID0KLSAgICAgICAgYnVmZmVyc19mb3JfbmV3X3JhbmdlLT5iYWNrKCktPmlzX2tleV9mcmFtZSgpOwotICB9Ci0KLSAgbmV3X2NvZGVkX2ZyYW1lX2dyb3VwXyA9IGZhbHNlOwotCi0gIE1lcmdlV2l0aEFkamFjZW50UmFuZ2VJZk5lY2Vzc2FyeShyYW5nZV9mb3JfbmV4dF9hcHBlbmRfKTsKLQotICAvLyBTZWVrIHRvIHRyeSB0byBmdWxmaWxsIGEgcHJldmlvdXMgY2FsbCB0byBTZWVrKCkuCi0gIGlmIChzZWVrX3BlbmRpbmdfKSB7Ci0gICAgRENIRUNLKCFzZWxlY3RlZF9yYW5nZV8pOwotICAgIERDSEVDSyhkZWxldGVkX2J1ZmZlcnMuZW1wdHkoKSk7Ci0gICAgU2VlayhzZWVrX2J1ZmZlcl90aW1lc3RhbXBfKTsKLSAgfQotCi0gIGlmICghZGVsZXRlZF9idWZmZXJzLmVtcHR5KCkpIHsKLSAgICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfb2ZfZGVsZXRlZCA9Ci0gICAgICAgIGRlbGV0ZWRfYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLQotICAgIERDSEVDSyh0cmFja19idWZmZXJfLmVtcHR5KCkgfHwKLSAgICAgICAgICAgdHJhY2tfYnVmZmVyXy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpIDwgc3RhcnRfb2ZfZGVsZXRlZCkKLSAgICAgICAgPDwgImRlY29kZSB0aW1lc3RhbXAgIgotICAgICAgICA8PCB0cmFja19idWZmZXJfLmJhY2soKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkuSW5TZWNvbmRzRigpIDw8ICIgc2VjIgotICAgICAgICA8PCAiLCBzdGFydF9vZl9kZWxldGVkICIgPDwgc3RhcnRfb2ZfZGVsZXRlZC5JblNlY29uZHNGKCkgPDwgIiBzZWMiOwotCi0gICAgdHJhY2tfYnVmZmVyXy5pbnNlcnQodHJhY2tfYnVmZmVyXy5lbmQoKSwgZGVsZXRlZF9idWZmZXJzLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZF9idWZmZXJzLmVuZCgpKTsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiIEFkZGVkICIKLSAgICAgICAgICAgICA8PCBkZWxldGVkX2J1ZmZlcnMuc2l6ZSgpCi0gICAgICAgICAgICAgPDwgIiBidWZmZXJzIHRvIHRyYWNrIGJ1ZmZlci4gVEIgc2l6ZSBpcyBub3cgIgotICAgICAgICAgICAgIDw8IHRyYWNrX2J1ZmZlcl8uc2l6ZSgpOwotICB9IGVsc2UgewotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgICAgPDwgIiBObyBkZWxldGVkIGJ1ZmZlcnMgZm9yIHRyYWNrIGJ1ZmZlciI7Ci0gIH0KLQotICAvLyBQcnVuZSBhbnkgZXh0cmEgYnVmZmVycyBpbiB8dHJhY2tfYnVmZmVyX3wgaWYgbmV3IGtleWZyYW1lcwotICAvLyBhcmUgYXBwZW5kZWQgdG8gdGhlIHJhbmdlIGNvdmVyZWQgYnkgfHRyYWNrX2J1ZmZlcl98LgotICBpZiAoIXRyYWNrX2J1ZmZlcl8uZW1wdHkoKSkgewotICAgIERlY29kZVRpbWVzdGFtcCBrZXlmcmFtZV90aW1lc3RhbXAgPQotICAgICAgICBGaW5kS2V5ZnJhbWVBZnRlclRpbWVzdGFtcCh0cmFja19idWZmZXJfLmZyb250KCktPkdldERlY29kZVRpbWVzdGFtcCgpKTsKLSAgICBpZiAoa2V5ZnJhbWVfdGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKQotICAgICAgUHJ1bmVUcmFja0J1ZmZlcihrZXlmcmFtZV90aW1lc3RhbXApOwotICB9Ci0KLSAgU2V0U2VsZWN0ZWRSYW5nZUlmTmVlZGVkKG5leHRfYnVmZmVyX3RpbWVzdGFtcCk7Ci0KLSAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiAiIDw8IEdldFN0cmVhbVR5cGVOYW1lKCkKLSAgICAgICAgICAgPDwgIjogZG9uZS4gcmFuZ2VzXz0iIDw8IFJhbmdlc1RvU3RyaW5nKHJhbmdlc18pOwotICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB0aGUgZm9sbG93aW5nIERDSEVDSyBzaG91bGQgYmUgcmVzdG9yZWQuCi0gIC8vIERDSEVDSyhJc1JhbmdlTGlzdFNvcnRlZChyYW5nZXNfKSk7Ci0gIERDSEVDSyhPbmx5U2VsZWN0ZWRSYW5nZUlzU2Vla2VkKCkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdHJlYW06OlJlbW92ZShiYXNlOjpUaW1lRGVsdGEgc3RhcnQsIGJhc2U6OlRpbWVEZWx0YSBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgewotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiICgiCi0gICAgICAgICAgIDw8IHN0YXJ0LkluU2Vjb25kc0YoKSA8PCAiLCAiIDw8IGVuZC5JblNlY29uZHNGKCkgPDwgIiwgIgotICAgICAgICAgICA8PCBkdXJhdGlvbi5JblNlY29uZHNGKCkgPDwgIikiOwotICBEQ0hFQ0soc3RhcnQgPj0gYmFzZTo6VGltZURlbHRhKCkpIDw8IHN0YXJ0LkluU2Vjb25kc0YoKTsKLSAgRENIRUNLKHN0YXJ0IDwgZW5kKSA8PCAic3RhcnQgIiA8PCBzdGFydC5JblNlY29uZHNGKCkgPDwgIiBlbmQgIgotICAgICAgICAgICAgICAgICAgICAgIDw8IGVuZC5JblNlY29uZHNGKCk7Ci0gIERDSEVDSyhkdXJhdGlvbiAhPSBrTm9UaW1lc3RhbXApOwotCi0gIERlY29kZVRpbWVzdGFtcCBzdGFydF9kdHMgPSBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKHN0YXJ0KTsKLSAgRGVjb2RlVGltZXN0YW1wIGVuZF9kdHMgPSBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGVuZCk7Ci0gIERlY29kZVRpbWVzdGFtcCByZW1vdmVfZW5kX3RpbWVzdGFtcCA9Ci0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGR1cmF0aW9uKTsKLSAgRGVjb2RlVGltZXN0YW1wIGtleWZyYW1lX3RpbWVzdGFtcCA9IEZpbmRLZXlmcmFtZUFmdGVyVGltZXN0YW1wKGVuZF9kdHMpOwotICBpZiAoa2V5ZnJhbWVfdGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgcmVtb3ZlX2VuZF90aW1lc3RhbXAgPSBrZXlmcmFtZV90aW1lc3RhbXA7Ci0gIH0gZWxzZSBpZiAoZW5kX2R0cyA8IHJlbW92ZV9lbmRfdGltZXN0YW1wKSB7Ci0gICAgcmVtb3ZlX2VuZF90aW1lc3RhbXAgPSBlbmRfZHRzOwotICB9Ci0KLSAgQnVmZmVyUXVldWUgZGVsZXRlZF9idWZmZXJzOwotICBSZW1vdmVJbnRlcm5hbChzdGFydF9kdHMsIHJlbW92ZV9lbmRfdGltZXN0YW1wLCBmYWxzZSwgJmRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgaWYgKCFkZWxldGVkX2J1ZmZlcnMuZW1wdHkoKSkgewotICAgIC8vIEJ1ZmZlcnMgZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uIGhhdmUgYmVlbiByZW1vdmVkLgotICAgIFNldFNlbGVjdGVkUmFuZ2VJZk5lZWRlZChkZWxldGVkX2J1ZmZlcnMuZnJvbnQoKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkpOwotICAgIGlmIChsYXN0X291dHB1dF9idWZmZXJfdGltZXN0YW1wXyA9PSBrTm9EZWNvZGVUaW1lc3RhbXAoKSkgewotICAgICAgLy8gV2UganVzdCByZW1vdmVkIGJ1ZmZlcnMgZm9yIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIGZvciB0aGlzCi0gICAgICAvLyBzdHJlYW0sIHlldCB3ZSBhbHNvIGhhZCBvdXRwdXQgbm8gYnVmZmVyIHNpbmNlIHRoZSBsYXN0IFNlZWsuCi0gICAgICAvLyBSZS1zZWVrIHRvIHByZXZlbnQgc3RhbGwuCi0gICAgICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiOiByZS1zZWVraW5nIHRvICIKLSAgICAgICAgICAgICAgIDw8IHNlZWtfYnVmZmVyX3RpbWVzdGFtcF8KLSAgICAgICAgICAgICAgIDw8ICIgdG8gcHJldmVudCBzdGFsbCBpZiB0aGlzIHRpbWUgYmVjb21lcyBidWZmZXJlZCBhZ2FpbiI7Ci0gICAgICBTZWVrKHNlZWtfYnVmZmVyX3RpbWVzdGFtcF8pOwotICAgIH0KLSAgfQotfQotCi1EZWNvZGVUaW1lc3RhbXAgU291cmNlQnVmZmVyU3RyZWFtOjpQb3RlbnRpYWxOZXh0QXBwZW5kVGltZXN0YW1wKCkgY29uc3QgewotICAvLyBUaGUgbmV4dCBwb3RlbnRpYWwgYXBwZW5kIHdpbGwgZWl0aGVyIGJlIGp1c3QgYXQgb3IgYWZ0ZXIKLSAgLy8gfGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF98IChpZiBrbm93biksIG9yIGlmIHVua25vd24gYW5kIHdlIGFyZQotICAvLyBzdGlsbCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGNvZGVkIGZyYW1lIGdyb3VwLCB0aGVuIHdpbGwgYmUgaW50byB0aGUKLSAgLy8gcmFuZ2UgKGlmIGFueSkgdG8gd2hpY2ggfGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWVffCBiZWxvbmdzLgotICBpZiAobGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXyAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSkgewotICAgIC8vIFRPRE8od29sZW5ldHopOiBEZXRlcm1pbmUgaWYgdGhpcyArMXVzIGlzIHN0aWxsIG5lY2Vzc2FyeS4gU2VlCi0gICAgLy8gaHR0cHM6Ly9jcmJ1Zy5jb20vNTg5Mjk1LgotICAgIHJldHVybiBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfICsKLSAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZSgxKTsKLSAgfQotCi0gIGlmIChuZXdfY29kZWRfZnJhbWVfZ3JvdXBfKSByZXR1cm4gY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV87Ci0KLSAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3Qga25vdyBhIHBvdGVudGlhbCBuZXh0IGFwcGVuZCB0aW1lc3RhbXAsIHRoZW4gd2UgaGF2ZQotICAvLyByZW1vdmVkIHRoZSByYW5nZWQgdG8gd2hpY2ggaXQgcHJldmlvdXNseSBiZWxvbmdlZCBhbmQgaGF2ZSBub3QgY29tcGxldGVkIGEKLSAgLy8gc3Vic2VxdWVudCBhcHBlbmQgb3IgcmVjZWl2ZWQgYSBzdWJzZXF1ZW50IE9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cCgpCi0gIC8vIHNpZ25hbC4KLSAgcmV0dXJuIGtOb0RlY29kZVRpbWVzdGFtcCgpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6VXBkYXRlTGFzdEFwcGVuZFN0YXRlRm9yUmVtb3ZlKAotICAgIERlY29kZVRpbWVzdGFtcCByZW1vdmVfc3RhcnQsIERlY29kZVRpbWVzdGFtcCByZW1vdmVfZW5kLAotICAgIGJvb2wgZXhjbHVkZV9zdGFydCkgewotICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IGNoYW5nZSBleGNsdWRlX3N0YXJ0IHRvIGluY2x1ZGVfc3RhcnQgaW4gdGhpcyBjbGFzcyBhbmQKLSAgLy8gU291cmNlQnVmZmVyUmFuZ2UuIE5lZ2F0aXZlcyBhcmUgaGFyZCB0byByZWFzb24gYWJvdXQuCi0gIGJvb2wgaW5jbHVkZV9zdGFydCA9ICFleGNsdWRlX3N0YXJ0OwotCi0gIC8vIE5vIG5lZWQgdG8gY2hlY2sgcHJldmlvdXMgYXBwZW5kJ3MgR09QIGlmIHN0YXJ0aW5nIGEgbmV3IENGRy4gTmV3IENGRyBpcwotICAvLyBhbHJlYWR5IHJlcXVpcmVkIHRvIGJlZ2luIHdpdGggYSBrZXkgZnJhbWUuCi0gIGlmIChuZXdfY29kZWRfZnJhbWVfZ3JvdXBfKSByZXR1cm47Ci0KLSAgaWYgKHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gIT0gcmFuZ2VzXy5lbmQoKSkgewotICAgIGlmIChsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgICBEQ0hFQ0soKCpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfKQotICAgICAgICAgICAgICAgICAtPkJlbG9uZ3NUb1JhbmdlKGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF8pKTsKLQotICAgICAgLy8gTm90ZSBzdGFydCBhbmQgZW5kIG9mIGxhc3QgYXBwZW5kZWQgR09QLgotICAgICAgRGVjb2RlVGltZXN0YW1wIGdvcF9lbmQgPSBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfOwotICAgICAgRGVjb2RlVGltZXN0YW1wIGdvcF9zdGFydCA9Ci0gICAgICAgICAgKCpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfKS0+S2V5ZnJhbWVCZWZvcmVUaW1lc3RhbXAoZ29wX2VuZCk7Ci0KLSAgICAgIC8vIElmIGxhc3QgYXBwZW5kIGlzIGFib3V0IHRvIGJlIGRpc3J1cHRlZCwgcmVzZXQgYXNzb2NpYXRlZCBzdGF0ZSBzbyB3ZQotICAgICAgLy8ga25vdyB0byBjcmVhdGUgYSBuZXcgcmFuZ2UgZm9yIGZ1dHVyZSBhcHBlbmRzIGFuZCByZXF1aXJlIGFuIGluaXRpYWwKLSAgICAgIC8vIGtleSBmcmFtZS4KLSAgICAgIGlmICgoKGluY2x1ZGVfc3RhcnQgJiYgcmVtb3ZlX3N0YXJ0ID09IGdvcF9lbmQpIHx8Ci0gICAgICAgICAgIHJlbW92ZV9zdGFydCA8IGdvcF9lbmQpICYmCi0gICAgICAgICAgcmVtb3ZlX2VuZCA+IGdvcF9zdGFydCkgewotICAgICAgICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICAgICAgICA8PCAiIFJlc2V0dGluZyBuZXh0IGFwcGVuZCBzdGF0ZSBmb3IgcmVtb3ZlICgiCi0gICAgICAgICAgICAgICAgIDw8IHJlbW92ZV9zdGFydC5JblNlY29uZHNGKCkgPDwgIiwgIiA8PCByZW1vdmVfZW5kLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgICAgICA8PCAiLCAiIDw8IGV4Y2x1ZGVfc3RhcnQgPDwgIikiOwotICAgICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfID0gcmFuZ2VzXy5lbmQoKTsKLSAgICAgICAgUmVzZXRMYXN0QXBwZW5kZWRTdGF0ZSgpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBOT1RSRUFDSEVEKCkgPDwgX19mdW5jX18gPDwgIiAiIDw8IEdldFN0cmVhbVR5cGVOYW1lKCkKLSAgICAgICAgICAgICAgICAgICA8PCAiIHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gc2V0LCBidXQgbm90IHRyYWNraW5nIGxhc3QiCi0gICAgICAgICAgICAgICAgICAgPDwgIiBhcHBlbmQgbm9yIG5ldyBjb2RlZCBmcmFtZSBncm91cC4iOwotICAgIH0KLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6UmVtb3ZlSW50ZXJuYWwoRGVjb2RlVGltZXN0YW1wIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcCBlbmQsIGJvb2wgZXhjbHVkZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzKSB7Ci0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgKCIKLSAgICAgICAgICAgPDwgc3RhcnQuSW5TZWNvbmRzRigpIDw8ICIsICIgPDwgZW5kLkluU2Vjb25kc0YoKSA8PCAiLCAiCi0gICAgICAgICAgIDw8IGV4Y2x1ZGVfc3RhcnQgPDwgIikiOwotICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiOiBiZWZvcmUgcmVtb3ZlIHJhbmdlc189IiA8PCBSYW5nZXNUb1N0cmluZyhyYW5nZXNfKTsKLQotICBEQ0hFQ0soc3RhcnQgPj0gRGVjb2RlVGltZXN0YW1wKCkpOwotICBEQ0hFQ0soc3RhcnQgPCBlbmQpIDw8ICJzdGFydCAiIDw8IHN0YXJ0LkluU2Vjb25kc0YoKSA8PCAiIGVuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgZW5kLkluU2Vjb25kc0YoKTsKLSAgRENIRUNLKGRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgLy8gRG9pbmcgdGhpcyB1cGZyb250IHNpbXBsaWZpZXMgZGVjaXNpb25zIGFib3V0IHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gYmVsb3cuCi0gIFVwZGF0ZUxhc3RBcHBlbmRTdGF0ZUZvclJlbW92ZShzdGFydCwgZW5kLCBleGNsdWRlX3N0YXJ0KTsKLQotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIGl0ciA9IHJhbmdlc18uYmVnaW4oKTsKLSAgd2hpbGUgKGl0ciAhPSByYW5nZXNfLmVuZCgpKSB7Ci0gICAgU291cmNlQnVmZmVyUmFuZ2UqIHJhbmdlID0gKml0cjsKLSAgICBpZiAocmFuZ2UtPkdldFN0YXJ0VGltZXN0YW1wKCkgPj0gZW5kKSBicmVhazsKLQotICAgIC8vIFNwbGl0IG9mZiBhbnkgcmVtYWluaW5nIEdPUHMgc3RhcnRpbmcgYXQgb3IgYWZ0ZXIgfGVuZHwgYW5kIGFkZCBpdCB0bwotICAgIC8vIHxyYW5nZXNffC4KLSAgICBTb3VyY2VCdWZmZXJSYW5nZSogbmV3X3JhbmdlID0gcmFuZ2UtPlNwbGl0UmFuZ2UoZW5kKTsKLSAgICBpZiAobmV3X3JhbmdlKSB7Ci0gICAgICBpdHIgPSByYW5nZXNfLmluc2VydCgrK2l0ciwgbmV3X3JhbmdlKTsKLQotICAgICAgLy8gVXBkYXRlIHxyYW5nZV9mb3JfbmV4dF9hcHBlbmRffCBpZiBpdCB3YXMgcHJldmlvdXNseSB8cmFuZ2V8IGFuZCBzaG91bGQKLSAgICAgIC8vIGJlIHxuZXdfcmFuZ2V8IG5vdy4KLSAgICAgIGlmIChyYW5nZV9mb3JfbmV4dF9hcHBlbmRfICE9IHJhbmdlc18uZW5kKCkgJiYKLSAgICAgICAgICAqcmFuZ2VfZm9yX25leHRfYXBwZW5kXyA9PSByYW5nZSkgewotICAgICAgICBEZWNvZGVUaW1lc3RhbXAgcG90ZW50aWFsX25leHRfYXBwZW5kX3RpbWVzdGFtcCA9Ci0gICAgICAgICAgICBQb3RlbnRpYWxOZXh0QXBwZW5kVGltZXN0YW1wKCk7Ci0gICAgICAgIGlmIChwb3RlbnRpYWxfbmV4dF9hcHBlbmRfdGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpICYmCi0gICAgICAgICAgICBuZXdfcmFuZ2UtPkJlbG9uZ3NUb1JhbmdlKHBvdGVudGlhbF9uZXh0X2FwcGVuZF90aW1lc3RhbXApKSB7Ci0gICAgICAgICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyA9IGl0cjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAtLWl0cjsKLQotICAgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3RlZCByYW5nZSBpZiB0aGUgbmV4dCBidWZmZXIgcG9zaXRpb24gd2FzIHRyYW5zZmVycmVkCi0gICAgICAvLyB0byB8bmV3X3JhbmdlfC4KLSAgICAgIGlmIChuZXdfcmFuZ2UtPkhhc05leHRCdWZmZXJQb3NpdGlvbigpKSBTZXRTZWxlY3RlZFJhbmdlKG5ld19yYW5nZSk7Ci0gICAgfQotCi0gICAgLy8gVHJ1bmNhdGUgdGhlIGN1cnJlbnQgcmFuZ2Ugc28gdGhhdCBpdCBvbmx5IGNvbnRhaW5zIGRhdGEgYmVmb3JlCi0gICAgLy8gdGhlIHJlbW92YWwgcmFuZ2UuCi0gICAgQnVmZmVyUXVldWUgc2F2ZWRfYnVmZmVyczsKLSAgICBib29sIGRlbGV0ZV9yYW5nZSA9IHJhbmdlLT5UcnVuY2F0ZUF0KHN0YXJ0LCAmc2F2ZWRfYnVmZmVycywgZXhjbHVkZV9zdGFydCk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gd2FzIHJlbW92ZWQgYW5kCi0gICAgLy8gdXBkYXRlIHRoZSBzZWxlY3RlZCByYW5nZSBhcHByb3ByaWF0ZWx5LgotICAgIGlmICghc2F2ZWRfYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgICBEQ0hFQ0soIXJhbmdlLT5IYXNOZXh0QnVmZmVyUG9zaXRpb24oKSk7Ci0gICAgICBEQ0hFQ0soZGVsZXRlZF9idWZmZXJzLT5lbXB0eSgpKTsKLQotICAgICAgKmRlbGV0ZWRfYnVmZmVycyA9IHNhdmVkX2J1ZmZlcnM7Ci0gICAgfQotCi0gICAgaWYgKHJhbmdlID09IHNlbGVjdGVkX3JhbmdlXyAmJiAhcmFuZ2UtPkhhc05leHRCdWZmZXJQb3NpdGlvbigpKQotICAgICAgU2V0U2VsZWN0ZWRSYW5nZShOVUxMKTsKLQotICAgIC8vIElmIHRoZSBjdXJyZW50IHJhbmdlIG5vdyBpcyBjb21wbGV0ZWx5IGNvdmVyZWQgYnkgdGhlIHJlbW92YWwKLSAgICAvLyByYW5nZSB0aGVuIGRlbGV0ZSBpdCBhbmQgbW92ZSBvbi4KLSAgICBpZiAoZGVsZXRlX3JhbmdlKSB7Ci0gICAgICBEZWxldGVBbmRSZW1vdmVSYW5nZSgmaXRyKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIENsZWFyIHxyYW5nZV9mb3JfbmV4dF9hcHBlbmRffCBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB0aGUgcmVtb3ZhbAotICAgIC8vIG9wZXJhdGlvbiBtYWtlcyBpdCBpbXBvc3NpYmxlIGZvciB0aGUgbmV4dCBhcHBlbmQgdG8gYmUgYWRkZWQKLSAgICAvLyB0byB0aGUgY3VycmVudCByYW5nZS4KLSAgICBpZiAocmFuZ2VfZm9yX25leHRfYXBwZW5kXyAhPSByYW5nZXNfLmVuZCgpICYmCi0gICAgICAgICpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfID09IHJhbmdlKSB7Ci0gICAgICBEZWNvZGVUaW1lc3RhbXAgcG90ZW50aWFsX25leHRfYXBwZW5kX3RpbWVzdGFtcCA9Ci0gICAgICAgICAgUG90ZW50aWFsTmV4dEFwcGVuZFRpbWVzdGFtcCgpOwotCi0gICAgICBpZiAoIXJhbmdlLT5CZWxvbmdzVG9SYW5nZShwb3RlbnRpYWxfbmV4dF9hcHBlbmRfdGltZXN0YW1wKSkgewotICAgICAgICBEVkxPRygxKSA8PCAiUmVzZXR0aW5nIHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gc2luY2UgdGhlIG5leHQgYXBwZW5kIgotICAgICAgICAgICAgICAgICA8PCAiIGNhbid0IGFkZCB0byB0aGUgY3VycmVudCByYW5nZS4iOwotICAgICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfID0KLSAgICAgICAgICAgIEZpbmRFeGlzdGluZ1JhbmdlRm9yKHBvdGVudGlhbF9uZXh0X2FwcGVuZF90aW1lc3RhbXApOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgcmFuZ2UuCi0gICAgKytpdHI7Ci0gIH0KLQotICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiOiBhZnRlciByZW1vdmUgcmFuZ2VzXz0iIDw8IFJhbmdlc1RvU3RyaW5nKHJhbmdlc18pOwotCi0gIERDSEVDSyhJc1JhbmdlTGlzdFNvcnRlZChyYW5nZXNfKSk7Ci0gIERDSEVDSyhPbmx5U2VsZWN0ZWRSYW5nZUlzU2Vla2VkKCkpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6UmVzZXRTZWVrU3RhdGUoKSB7Ci0gIFNldFNlbGVjdGVkUmFuZ2UoTlVMTCk7Ci0gIHRyYWNrX2J1ZmZlcl8uY2xlYXIoKTsKLSAgY29uZmlnX2NoYW5nZV9wZW5kaW5nXyA9IGZhbHNlOwotICBsYXN0X291dHB1dF9idWZmZXJfdGltZXN0YW1wXyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotICBqdXN0X2V4aGF1c3RlZF90cmFja19idWZmZXJfID0gZmFsc2U7Ci0gIHNwbGljZV9idWZmZXJzX2luZGV4XyA9IDA7Ci0gIHBlbmRpbmdfYnVmZmVyXyA9IE5VTEw7Ci0gIHBlbmRpbmdfYnVmZmVyc19jb21wbGV0ZV8gPSBmYWxzZTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdHJlYW06OlJlc2V0TGFzdEFwcGVuZGVkU3RhdGUoKSB7Ci0gIGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF8gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgbGFzdF9hcHBlbmRlZF9idWZmZXJfZHVyYXRpb25fID0ga05vVGltZXN0YW1wOwotICBsYXN0X2FwcGVuZGVkX2J1ZmZlcl9pc19rZXlmcmFtZV8gPSBmYWxzZTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OlNob3VsZFNlZWtUb1N0YXJ0T2ZCdWZmZXJlZCgKLSAgICBiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lc3RhbXApIGNvbnN0IHsKLSAgaWYgKHJhbmdlc18uZW1wdHkoKSkgcmV0dXJuIGZhbHNlOwotICBiYXNlOjpUaW1lRGVsdGEgYmVnaW5uaW5nX29mX2J1ZmZlcmVkID0KLSAgICAgIHJhbmdlc18uZnJvbnQoKS0+R2V0U3RhcnRUaW1lc3RhbXAoKS5Ub1ByZXNlbnRhdGlvblRpbWUoKTsKLSAgcmV0dXJuIChzZWVrX3RpbWVzdGFtcCA8PSBiZWdpbm5pbmdfb2ZfYnVmZmVyZWQgJiYKLSAgICAgICAgICBiZWdpbm5pbmdfb2ZfYnVmZmVyZWQgPCBrU2Vla1RvU3RhcnRGdWRnZVJvb20oKSk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyU3RyZWFtOjpJc01vbm90b25pY2FsbHlJbmNyZWFzaW5nKGNvbnN0IEJ1ZmZlclF1ZXVlJiBidWZmZXJzKSB7Ci0gIERDSEVDSyghYnVmZmVycy5lbXB0eSgpKTsKLSAgRGVjb2RlVGltZXN0YW1wIHByZXZfdGltZXN0YW1wID0gbGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXzsKLSAgYm9vbCBwcmV2X2lzX2tleWZyYW1lID0gbGFzdF9hcHBlbmRlZF9idWZmZXJfaXNfa2V5ZnJhbWVfOwotICBmb3IgKEJ1ZmZlclF1ZXVlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBidWZmZXJzLmJlZ2luKCk7IGl0ciAhPSBidWZmZXJzLmVuZCgpOwotICAgICAgICsraXRyKSB7Ci0gICAgRGVjb2RlVGltZXN0YW1wIGN1cnJlbnRfdGltZXN0YW1wID0gKCppdHIpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBib29sIGN1cnJlbnRfaXNfa2V5ZnJhbWUgPSAoKml0ciktPmlzX2tleV9mcmFtZSgpOwotICAgIERDSEVDSyhjdXJyZW50X3RpbWVzdGFtcCAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci0gICAgRENIRUNLKCgqaXRyKS0+ZHVyYXRpb24oKSA+PSBiYXNlOjpUaW1lRGVsdGEoKSkKLSAgICAgICAgPDwgIlBhY2tldCB3aXRoIGludmFsaWQgZHVyYXRpb24uIgotICAgICAgICA8PCAiIHB0cyAiIDw8ICgqaXRyKS0+dGltZXN0YW1wKCkuSW5TZWNvbmRzRigpIDw8ICIgZHRzICIKLSAgICAgICAgPDwgKCppdHIpLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkgPDwgIiBkdXIgIgotICAgICAgICA8PCAoKml0ciktPmR1cmF0aW9uKCkuSW5TZWNvbmRzRigpOwotCi0gICAgaWYgKHByZXZfdGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgICBpZiAoY3VycmVudF90aW1lc3RhbXAgPCBwcmV2X3RpbWVzdGFtcCkgewotICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgICA8PCAiQnVmZmVycyBkaWQgbm90IG1vbm90b25pY2FsbHkgaW5jcmVhc2UuIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAoY3VycmVudF90aW1lc3RhbXAgPT0gcHJldl90aW1lc3RhbXAgJiYKLSAgICAgICAgICBTb3VyY2VCdWZmZXJSYW5nZTo6SXNVbmNvbW1vblNhbWVUaW1lc3RhbXBTZXF1ZW5jZSgKLSAgICAgICAgICAgICAgcHJldl9pc19rZXlmcmFtZSwgY3VycmVudF9pc19rZXlmcmFtZSkpIHsKLSAgICAgICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9zdHJhbmdlX3NhbWVfdGltZXN0YW1wc19sb2dzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAga01heFN0cmFuZ2VTYW1lVGltZXN0YW1wc0xvZ3MpCi0gICAgICAgICAgICA8PCAiRGV0ZWN0ZWQgYW4gYXBwZW5kIHNlcXVlbmNlIHdpdGgga2V5ZnJhbWUgZm9sbG93aW5nIGEgIgotICAgICAgICAgICAgICAgIm5vbi1rZXlmcmFtZSwgYm90aCB3aXRoIHRoZSBzYW1lIGRlY29kZSB0aW1lc3RhbXAgb2YgIgotICAgICAgICAgICAgPDwgY3VycmVudF90aW1lc3RhbXAuSW5TZWNvbmRzRigpOwotICAgICAgfQotICAgIH0KLQotICAgIHByZXZfdGltZXN0YW1wID0gY3VycmVudF90aW1lc3RhbXA7Ci0gICAgcHJldl9pc19rZXlmcmFtZSA9IGN1cnJlbnRfaXNfa2V5ZnJhbWU7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyU3RyZWFtOjpPbmx5U2VsZWN0ZWRSYW5nZUlzU2Vla2VkKCkgY29uc3QgewotICBmb3IgKFJhbmdlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRyID0gcmFuZ2VzXy5iZWdpbigpOyBpdHIgIT0gcmFuZ2VzXy5lbmQoKTsKLSAgICAgICArK2l0cikgewotICAgIGlmICgoKml0ciktPkhhc05leHRCdWZmZXJQb3NpdGlvbigpICYmICgqaXRyKSAhPSBzZWxlY3RlZF9yYW5nZV8pCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuICFzZWxlY3RlZF9yYW5nZV8gfHwgc2VsZWN0ZWRfcmFuZ2VfLT5IYXNOZXh0QnVmZmVyUG9zaXRpb24oKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdHJlYW06OlVwZGF0ZU1heEludGVyYnVmZmVyRGlzdGFuY2UoCi0gICAgY29uc3QgQnVmZmVyUXVldWUmIGJ1ZmZlcnMpIHsKLSAgRENIRUNLKCFidWZmZXJzLmVtcHR5KCkpOwotICBEZWNvZGVUaW1lc3RhbXAgcHJldl90aW1lc3RhbXAgPSBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfOwotICBmb3IgKEJ1ZmZlclF1ZXVlOjpjb25zdF9pdGVyYXRvciBpdHIgPSBidWZmZXJzLmJlZ2luKCk7IGl0ciAhPSBidWZmZXJzLmVuZCgpOwotICAgICAgICsraXRyKSB7Ci0gICAgRGVjb2RlVGltZXN0YW1wIGN1cnJlbnRfdGltZXN0YW1wID0gKCppdHIpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBEQ0hFQ0soY3VycmVudF90aW1lc3RhbXAgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpOwotCi0gICAgYmFzZTo6VGltZURlbHRhIGludGVyYnVmZmVyX2Rpc3RhbmNlID0gKCppdHIpLT5kdXJhdGlvbigpOwotICAgIERDSEVDSyhpbnRlcmJ1ZmZlcl9kaXN0YW5jZSA+PSBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0KLSAgICBpZiAocHJldl90aW1lc3RhbXAgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICAgIGludGVyYnVmZmVyX2Rpc3RhbmNlID0KLSAgICAgICAgICBzdGQ6Om1heChjdXJyZW50X3RpbWVzdGFtcCAtIHByZXZfdGltZXN0YW1wLCBpbnRlcmJ1ZmZlcl9kaXN0YW5jZSk7Ci0gICAgfQotCi0gICAgaWYgKGludGVyYnVmZmVyX2Rpc3RhbmNlID4gYmFzZTo6VGltZURlbHRhKCkpIHsKLSAgICAgIGlmIChtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2VfID09IGtOb1RpbWVzdGFtcCkgewotICAgICAgICBtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2VfID0gaW50ZXJidWZmZXJfZGlzdGFuY2U7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtYXhfaW50ZXJidWZmZXJfZGlzdGFuY2VfID0KLSAgICAgICAgICAgIHN0ZDo6bWF4KG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV8sIGludGVyYnVmZmVyX2Rpc3RhbmNlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcHJldl90aW1lc3RhbXAgPSBjdXJyZW50X3RpbWVzdGFtcDsKLSAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6U2V0Q29uZmlnSWRzKGNvbnN0IEJ1ZmZlclF1ZXVlJiBidWZmZXJzKSB7Ci0gIGZvciAoQnVmZmVyUXVldWU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IGJ1ZmZlcnMuYmVnaW4oKTsgaXRyICE9IGJ1ZmZlcnMuZW5kKCk7Ci0gICAgICAgKytpdHIpIHsKLSAgICAoKml0ciktPlNldENvbmZpZ0lkKGFwcGVuZF9jb25maWdfaW5kZXhfKTsKLSAgfQotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2FyYmFnZUNvbGxlY3RJZk5lZWRlZChEZWNvZGVUaW1lc3RhbXAgbWVkaWFfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdEYXRhU2l6ZSkgewotICBEQ0hFQ0sobWVkaWFfdGltZSAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci0gIC8vIEdhcmJhZ2UgY29sbGVjdGlvbiBzaG91bGQgb25seSBoYXBwZW4gYmVmb3JlL2R1cmluZyBhcHBlbmRpbmcgbmV3IGRhdGEsCi0gIC8vIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuIGluIGVuZC1vZi1zdHJlYW0gc3RhdGUuCi0gIERDSEVDSyghZW5kX29mX3N0cmVhbV8pOwotICAvLyBDb21wdXRlIHNpemUgb2YgfHJhbmdlc198LgotICBzaXplX3QgcmFuZ2VzX3NpemUgPSBHZXRCdWZmZXJlZFNpemUoKTsKLQotICAvLyBTYW5pdHkgYW5kIG92ZXJmbG93IGNoZWNrcwotICBpZiAoKG5ld0RhdGFTaXplID4gbWVtb3J5X2xpbWl0XykgfHwKLSAgICAgIChyYW5nZXNfc2l6ZSArIG5ld0RhdGFTaXplIDwgcmFuZ2VzX3NpemUpKSB7Ci0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9nYXJiYWdlX2NvbGxlY3RfYWxnb3JpdGhtX2xvZ3NfLAotICAgICAgICAgICAgICAgICAgICAgIGtNYXhHYXJiYWdlQ29sbGVjdEFsZ29yaXRobVdhcm5pbmdMb2dzKQotICAgICAgICA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgc3RyZWFtOiAiCi0gICAgICAgIDw8ICJuZXcgYXBwZW5kIG9mIG5ld0RhdGFTaXplPSIgPDwgbmV3RGF0YVNpemUKLSAgICAgICAgPDwgIiBieXRlcyBleGNlZWRzIG1lbW9yeV9saW1pdF89IiA8PCBtZW1vcnlfbGltaXRfCi0gICAgICAgIDw8ICIsIGN1cnJlbnRseSBidWZmZXJlZCByYW5nZXNfc2l6ZT0iIDw8IHJhbmdlc19zaXplOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbiA9IEdldEJ1ZmZlcmVkRHVyYXRpb25Gb3JHYXJiYWdlQ29sbGVjdGlvbigpOwotCi0gIHNpemVfdCBieXRlc190b19mcmVlID0gMDsKLQotICBpbnQ2NF90IGdhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGRfaW5fc2Vjb25kcyA9Ci0gICAgICBTYk1lZGlhR2V0QnVmZmVyR2FyYmFnZUNvbGxlY3Rpb25EdXJhdGlvblRocmVzaG9sZCgpIC8ga1NiVGltZVNlY29uZDsKLSAgLy8gQ2hlY2sgaWYgd2UncmUgdW5kZXIgb3IgYXQgdGhlIG1lbW9yeS9kdXJhdGlvbiBsaW1pdC4KLSAgY29uc3QgYXV0byBrR2NEdXJhdGlvblRocmVzaG9sZEluTWlsbGlzZWNvbmRzID0KLSAgICAgIGdhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGRfaW5fc2Vjb25kcyAqIDEwMDA7Ci0KLSAgaWYgKHJhbmdlc19zaXplICsgbmV3RGF0YVNpemUgPiBtZW1vcnlfbGltaXRfKSB7Ci0gICAgYnl0ZXNfdG9fZnJlZSA9IHJhbmdlc19zaXplICsgbmV3RGF0YVNpemUgLSBtZW1vcnlfbGltaXRfOwotICB9IGVsc2UgaWYgKGR1cmF0aW9uLkluTWlsbGlzZWNvbmRzKCkgPiBrR2NEdXJhdGlvblRocmVzaG9sZEluTWlsbGlzZWNvbmRzKSB7Ci0gICAgLy8gRXN0aW1hdGUgdGhlIHNpemUgdG8gZnJlZS4KLSAgICBhdXRvIGR1cmF0aW9uX3RvX2ZyZWUgPQotICAgICAgICBkdXJhdGlvbi5Jbk1pbGxpc2Vjb25kcygpIC0ga0djRHVyYXRpb25UaHJlc2hvbGRJbk1pbGxpc2Vjb25kczsKLSAgICBieXRlc190b19mcmVlID0gcmFuZ2VzX3NpemUgKiBkdXJhdGlvbl90b19mcmVlIC8gZHVyYXRpb24uSW5NaWxsaXNlY29uZHMoKTsKLSAgfQotCi0gIGlmIChieXRlc190b19mcmVlID09IDApIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIERDSEVDS19HVChieXRlc190b19mcmVlLCAwKTsKLQotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiOiBCZWZvcmUgR0MgbWVkaWFfdGltZT0iIDw8IG1lZGlhX3RpbWUuSW5TZWNvbmRzRigpCi0gICAgICAgICAgIDw8ICIgcmFuZ2VzXz0iIDw8IFJhbmdlc1RvU3RyaW5nKHJhbmdlc18pCi0gICAgICAgICAgIDw8ICIgc2Vla19wZW5kaW5nXz0iIDw8IHNlZWtfcGVuZGluZ18KLSAgICAgICAgICAgPDwgIiByYW5nZXNfc2l6ZT0iIDw8IHJhbmdlc19zaXplIDw8ICIgbmV3RGF0YVNpemU9IiA8PCBuZXdEYXRhU2l6ZQotICAgICAgICAgICA8PCAiIG1lbW9yeV9saW1pdF89IiA8PCBtZW1vcnlfbGltaXRfCi0gICAgICAgICAgIDw8ICIgbGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXz0iCi0gICAgICAgICAgIDw8IGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF8uSW5TZWNvbmRzRigpOwotCi0gIGlmIChzZWxlY3RlZF9yYW5nZV8gJiYgIXNlZWtfcGVuZGluZ18gJiYKLSAgICAgIG1lZGlhX3RpbWUgPiBzZWxlY3RlZF9yYW5nZV8tPkdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkpIHsKLSAgICAvLyBTdHJpY3RseSBzcGVha2luZyB8bWVkaWFfdGltZXwgKHRha2VuIGZyb20gSFRNTE1lZGlhRWxlbWVudDo6Y3VycmVudFRpbWUpCi0gICAgLy8gc2hvdWxkIGFsd2F5cyBiZSBpbiB0aGUgYnVmZmVyZWQgcmFuZ2VzLCBidXQgbWVkaWE6OlBpcGVsaW5lIHVzZXMgYXVkaW8KLSAgICAvLyBzdHJlYW0gYXMgdGhlIG1haW4gdGltZSBzb3VyY2UsIHdoZW4gYXVkaW8gaXMgcHJlc2VudC4KLSAgICAvLyBJbiBjYXNlcyB3aGVuIGF1ZGlvIGFuZCB2aWRlbyBzdHJlYW1zIGhhdmUgZGlmZmVyZW50IGJ1ZmZlcmVkIHJhbmdlcywgdGhlCi0gICAgLy8gfG1lZGlhX3RpbWV8IHZhbHVlIG1pZ2h0IGJlIHNsaWdodGx5IG91dHNpZGUgb2YgdGhlIHZpZGVvIHN0cmVhbSBidWZmZXJlZAotICAgIC8vIHJhbmdlLiBJbiB0aG9zZSBjYXNlcyB3ZSBuZWVkIHRvIGNsYW1wIHxtZWRpYV90aW1lfCB2YWx1ZSB0byB0aGUgY3VycmVudAotICAgIC8vIHN0cmVhbSBidWZmZXJlZCByYW5nZXMsIHRvIGVuc3VyZSB0aGUgTVNFIGdhcmJhZ2UgY29sbGVjdGlvbiBhbGdvcml0aG0KLSAgICAvLyB3b3JrcyBjb3JyZWN0bHkgKHNlZSBjcmJ1Zy5jb20vNTYzMjkyIGZvciBkZXRhaWxzKS4KLSAgICBEZWNvZGVUaW1lc3RhbXAgc2VsZWN0ZWRfYnVmZmVyZWRfZW5kID0KLSAgICAgICAgc2VsZWN0ZWRfcmFuZ2VfLT5HZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpOwotCi0gICAgRFZMT0coMikgPDwgX19mdW5jX18gPDwgIiBtZWRpYV90aW1lICIgPDwgbWVkaWFfdGltZS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgICA8PCAiIGlzIG91dHNpZGUgb2Ygc2VsZWN0ZWRfcmFuZ2VfPVsiCi0gICAgICAgICAgICAgPDwgc2VsZWN0ZWRfcmFuZ2VfLT5HZXRTdGFydFRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKSA8PCAiOyIKLSAgICAgICAgICAgICA8PCBzZWxlY3RlZF9idWZmZXJlZF9lbmQuSW5TZWNvbmRzRigpCi0gICAgICAgICAgICAgPDwgIl0gY2xhbXBpbmcgbWVkaWFfdGltZSB0byBiZSAiCi0gICAgICAgICAgICAgPDwgc2VsZWN0ZWRfYnVmZmVyZWRfZW5kLkluU2Vjb25kc0YoKTsKLSAgICBtZWRpYV90aW1lID0gc2VsZWN0ZWRfYnVmZmVyZWRfZW5kOwotICB9Ci0KLSAgc2l6ZV90IGJ5dGVzX2ZyZWVkID0gMDsKLQotICAvLyBJZiBsYXN0IGFwcGVuZGVkIGJ1ZmZlciBwb3NpdGlvbiB3YXMgZWFybGllciB0aGFuIHRoZSBjdXJyZW50IHBsYXliYWNrIHRpbWUKLSAgLy8gdGhlbiB0cnkgZGVsZXRpbmcgZGF0YSBiZXR3ZWVuIGxhc3QgYXBwZW5kIGFuZCBjdXJyZW50IG1lZGlhX3RpbWUuCi0gIGlmIChsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpICYmCi0gICAgICBsYXN0X2FwcGVuZGVkX2J1ZmZlcl9kdXJhdGlvbl8gIT0ga05vVGltZXN0YW1wICYmCi0gICAgICBtZWRpYV90aW1lID4KLSAgICAgICAgICBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfICsgbGFzdF9hcHBlbmRlZF9idWZmZXJfZHVyYXRpb25fKSB7Ci0gICAgc2l6ZV90IGJldHdlZW4gPSBGcmVlQnVmZmVyc0FmdGVyTGFzdEFwcGVuZGVkKGJ5dGVzX3RvX2ZyZWUsIG1lZGlhX3RpbWUpOwotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgRnJlZUJ1ZmZlcnNBZnRlckxhc3RBcHBlbmRlZCAiCi0gICAgICAgICAgICAgPDwgIiByZWxlYXNlZCAiIDw8IGJldHdlZW4gPDwgIiBieXRlcyIKLSAgICAgICAgICAgICA8PCAiIHJhbmdlc189IiA8PCBSYW5nZXNUb1N0cmluZyhyYW5nZXNfKTsKLSAgICBieXRlc19mcmVlZCArPSBiZXR3ZWVuOwotCi0gICAgLy8gU29tZSBwbGF5ZXJzIHN0YXJ0IGFwcGVuZGluZyBkYXRhIGF0IHRoZSBuZXcgc2VlayB0YXJnZXQgcG9zaXRpb24gYmVmb3JlCi0gICAgLy8gYWN0dWFsbHkgaW5pdGlhdGluZyB0aGUgc2VlayBvcGVyYXRpb24gKGkuZS4gdGhleSB0cnkgdG8gaW1wcm92ZSBzZWVrCi0gICAgLy8gcGVyZm9ybWFuY2UgYnkgcHJlYnVmZmVyaW5nIHNvbWUgZGF0YSBhdCB0aGUgc2VlayB0YXJnZXQgcG9zaXRpb24gYW5kCi0gICAgLy8gaW5pdGlhdGluZyBzZWVrIG9uY2UgZW5vdWdoIGRhdGEgaXMgcHJlLWJ1ZmZlcmVkLiBJbiB0aG9zZSBjYXNlcyB3ZSdsbAotICAgIC8vIHNlZSB0aGF0IGRhdGEgaXMgYmVpbmcgYXBwZW5kZWQgYXQgc29tZSBuZXcgcG9zaXRpb24sIGJ1dCB0aGVyZSBpcyBubwotICAgIC8vIHBlbmRpbmcgc2VlayByZXBvcnRlZCB5ZXQuIEluIHRoaXMgc2l0dWF0aW9uIHdlIG5lZWQgdG8gdHJ5IHByZXNlcnZpbmcKLSAgICAvLyB0aGUgbW9zdCByZWNlbnRseSBhcHBlbmRlZCBkYXRhLCBpLmUuIGRhdGEgYmVsb25naW5nIHRvIHRoZSBzYW1lIGJ1ZmZlcmVkCi0gICAgLy8gcmFuZ2UgYXMgdGhlIG1vc3QgcmVjZW50IGFwcGVuZC4KLSAgICBpZiAocmFuZ2VfZm9yX25leHRfYXBwZW5kXyAhPSByYW5nZXNfLmVuZCgpKSB7Ci0gICAgICBEQ0hFQ0soKCpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfKS0+R2V0U3RhcnRUaW1lc3RhbXAoKSA8PSBtZWRpYV90aW1lKTsKLSAgICAgIG1lZGlhX3RpbWUgPSAoKnJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8pLT5HZXRTdGFydFRpbWVzdGFtcCgpOwotICAgICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBtZWRpYV90aW1lIGFkanVzdGVkIHRvICIKLSAgICAgICAgICAgICAgIDw8IG1lZGlhX3RpbWUuSW5TZWNvbmRzRigpOwotICAgIH0KLSAgfQotCi0gIC8vIElmIHRoZXJlIGlzIGFuIHVuc2F0aXNmaWVkIHBlbmRpbmcgc2Vlaywgd2UgY2FuIHNhZmVseSByZW1vdmUgYWxsIGRhdGEgdGhhdAotICAvLyBpcyBlYXJsaWVyIHRoYW4gc2VlayB0YXJnZXQsIHRoZW4gcmVtb3ZlIGZyb20gdGhlIGJhY2sgdW50aWwgd2UgcmVhY2ggdGhlCi0gIC8vIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgR09QIGFuZCB0aGVuIHJlbW92ZSBmcm9tIHRoZSBmcm9udCBpZiB3ZSBzdGlsbCBkb24ndAotICAvLyBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHVwY29taW5nIGFwcGVuZC4KLSAgaWYgKGJ5dGVzX2ZyZWVkIDwgYnl0ZXNfdG9fZnJlZSAmJiBzZWVrX3BlbmRpbmdfKSB7Ci0gICAgRENIRUNLKCFyYW5nZXNfLmVtcHR5KCkpOwotICAgIC8vIEFsbCBkYXRhIGVhcmxpZXIgdGhhbiB0aGUgc2VlayB0YXJnZXQgfG1lZGlhX3RpbWV8IGNhbiBiZSByZW1vdmVkIHNhZmVseQotICAgIHNpemVfdCBmcm9udCA9IEZyZWVCdWZmZXJzKGJ5dGVzX3RvX2ZyZWUgLSBieXRlc19mcmVlZCwgbWVkaWFfdGltZSwgZmFsc2UpOwotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgUmVtb3ZlZCAiIDw8IGZyb250Ci0gICAgICAgICAgICAgPDwgIiBieXRlcyBmcm9tIHRoZSBmcm9udC4gcmFuZ2VzXz0iIDw8IFJhbmdlc1RvU3RyaW5nKHJhbmdlc18pOwotICAgIGJ5dGVzX2ZyZWVkICs9IGZyb250OwotCi0gICAgLy8gSWYgcmVtb3ZpbmcgZGF0YSBlYXJsaWVyIHRoYW4gfG1lZGlhX3RpbWV8IGRpZG4ndCBmcmVlIHVwIGVub3VnaCBzcGFjZSwKLSAgICAvLyB0aGVuIHRyeSBkZWxldGluZyBmcm9tIHRoZSBiYWNrIHVudGlsIHdlIHJlYWNoIG1vc3QgcmVjZW50bHkgYXBwZW5kZWQgR09QCi0gICAgaWYgKGJ5dGVzX2ZyZWVkIDwgYnl0ZXNfdG9fZnJlZSkgewotICAgICAgc2l6ZV90IGJhY2sgPSBGcmVlQnVmZmVycyhieXRlc190b19mcmVlIC0gYnl0ZXNfZnJlZWQsIG1lZGlhX3RpbWUsIHRydWUpOwotICAgICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBSZW1vdmVkICIgPDwgYmFjawotICAgICAgICAgICAgICAgPDwgIiBieXRlcyBmcm9tIHRoZSBiYWNrLiByYW5nZXNfPSIgPDwgUmFuZ2VzVG9TdHJpbmcocmFuZ2VzXyk7Ci0gICAgICBieXRlc19mcmVlZCArPSBiYWNrOwotICAgIH0KLQotICAgIC8vIElmIGV2ZW4gdGhhdCB3YXNuJ3QgZW5vdWdoLCB0aGVuIHRyeSBncmVlZGlseSBkZWxldGluZyBmcm9tIHRoZSBmcm9udCwKLSAgICAvLyB0aGF0IHNob3VsZCBhbGxvdyB1cyB0byByZW1vdmUgYXMgbXVjaCBkYXRhIGFzIG5lY2Vzc2FyeSB0byBzdWNjZWVkLgotICAgIGlmIChieXRlc19mcmVlZCA8IGJ5dGVzX3RvX2ZyZWUpIHsKLSAgICAgIHNpemVfdCBmcm9udDIgPSBGcmVlQnVmZmVycyhieXRlc190b19mcmVlIC0gYnl0ZXNfZnJlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzXy5iYWNrKCktPkdldEVuZFRpbWVzdGFtcCgpLCBmYWxzZSk7Ci0gICAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIFJlbW92ZWQgIiA8PCBmcm9udDIKLSAgICAgICAgICAgICAgIDw8ICIgYnl0ZXMgZnJvbSB0aGUgZnJvbnQuIHJhbmdlc189IiA8PCBSYW5nZXNUb1N0cmluZyhyYW5nZXNfKTsKLSAgICAgIGJ5dGVzX2ZyZWVkICs9IGZyb250MjsKLSAgICB9Ci0gICAgRENIRUNLKGJ5dGVzX2ZyZWVkID49IGJ5dGVzX3RvX2ZyZWUpOwotICB9Ci0KLSAgLy8gVHJ5IHJlbW92aW5nIGRhdGEgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIFNvdXJjZUJ1ZmZlciB1cCB0byB8bWVkaWFfdGltZXwKLSAgLy8gcG9zaXRpb24uCi0gIGlmIChieXRlc19mcmVlZCA8IGJ5dGVzX3RvX2ZyZWUpIHsKLSAgICBzaXplX3QgZnJvbnQgPSBGcmVlQnVmZmVycyhieXRlc190b19mcmVlIC0gYnl0ZXNfZnJlZWQsIG1lZGlhX3RpbWUsIGZhbHNlKTsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIFJlbW92ZWQgIiA8PCBmcm9udAotICAgICAgICAgICAgIDw8ICIgYnl0ZXMgZnJvbSB0aGUgZnJvbnQuIHJhbmdlc189IiA8PCBSYW5nZXNUb1N0cmluZyhyYW5nZXNfKTsKLSAgICBieXRlc19mcmVlZCArPSBmcm9udDsKLSAgfQotCi0gIC8vIFRyeSByZW1vdmluZyBkYXRhIGZyb20gdGhlIGJhY2sgb2YgdGhlIFNvdXJjZUJ1ZmZlciwgdW50aWwgd2UgcmVhY2ggdGhlCi0gIC8vIG1vc3QgcmVjZW50IGFwcGVuZCBwb3NpdGlvbi4KLSAgaWYgKGJ5dGVzX2ZyZWVkIDwgYnl0ZXNfdG9fZnJlZSkgewotICAgIHNpemVfdCBiYWNrID0gRnJlZUJ1ZmZlcnMoYnl0ZXNfdG9fZnJlZSAtIGJ5dGVzX2ZyZWVkLCBtZWRpYV90aW1lLCB0cnVlKTsKLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiIFJlbW92ZWQgIiA8PCBiYWNrCi0gICAgICAgICAgICAgPDwgIiBieXRlcyBmcm9tIHRoZSBiYWNrLiByYW5nZXNfPSIgPDwgUmFuZ2VzVG9TdHJpbmcocmFuZ2VzXyk7Ci0gICAgYnl0ZXNfZnJlZWQgKz0gYmFjazsKLSAgfQotCi0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgIDw8ICI6IEFmdGVyIEdDIGJ5dGVzX3RvX2ZyZWU9IiA8PCBieXRlc190b19mcmVlCi0gICAgICAgICAgIDw8ICIgYnl0ZXNfZnJlZWQ9IiA8PCBieXRlc19mcmVlZAotICAgICAgICAgICA8PCAiIHJhbmdlc189IiA8PCBSYW5nZXNUb1N0cmluZyhyYW5nZXNfKTsKLQotICByZXR1cm4gYnl0ZXNfZnJlZWQgPj0gYnl0ZXNfdG9fZnJlZTsKLX0KLQotc2l6ZV90IFNvdXJjZUJ1ZmZlclN0cmVhbTo6RnJlZUJ1ZmZlcnNBZnRlckxhc3RBcHBlbmRlZCgKLSAgICBzaXplX3QgdG90YWxfYnl0ZXNfdG9fZnJlZSwgRGVjb2RlVGltZXN0YW1wIG1lZGlhX3RpbWUpIHsKLSAgRFZMT0coNCkgPDwgX19mdW5jX18gPDwgIiBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfPSIKLSAgICAgICAgICAgPDwgbGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXy5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIiBtZWRpYV90aW1lPSIgPDwgbWVkaWFfdGltZS5JblNlY29uZHNGKCk7Ci0KLSAgRGVjb2RlVGltZXN0YW1wIHJlbW92ZV9yYW5nZV9zdGFydCA9IGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF87Ci0gIGlmIChsYXN0X2FwcGVuZGVkX2J1ZmZlcl9pc19rZXlmcmFtZV8pCi0gICAgcmVtb3ZlX3JhbmdlX3N0YXJ0ICs9IEdldE1heEludGVyYnVmZmVyRGlzdGFuY2UoKTsKLQotICBEZWNvZGVUaW1lc3RhbXAgcmVtb3ZlX3JhbmdlX3N0YXJ0X2tleWZyYW1lID0KLSAgICAgIEZpbmRLZXlmcmFtZUFmdGVyVGltZXN0YW1wKHJlbW92ZV9yYW5nZV9zdGFydCk7Ci0gIGlmIChyZW1vdmVfcmFuZ2Vfc3RhcnRfa2V5ZnJhbWUgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpCi0gICAgcmVtb3ZlX3JhbmdlX3N0YXJ0ID0gcmVtb3ZlX3JhbmdlX3N0YXJ0X2tleWZyYW1lOwotICBpZiAocmVtb3ZlX3JhbmdlX3N0YXJ0ID49IG1lZGlhX3RpbWUpIHJldHVybiAwOwotCi0gIERlY29kZVRpbWVzdGFtcCByZW1vdmVfcmFuZ2VfZW5kOwotICBzaXplX3QgYnl0ZXNfZnJlZWQgPSBHZXRSZW1vdmFsUmFuZ2UocmVtb3ZlX3JhbmdlX3N0YXJ0LCBtZWRpYV90aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfYnl0ZXNfdG9fZnJlZSwgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBpZiAoYnl0ZXNfZnJlZWQgPiAwKSB7Ci0gICAgRFZMT0coNCkgPDwgX19mdW5jX18gPDwgIiByZW1vdmluZyBbIgotICAgICAgICAgICAgIDw8IHJlbW92ZV9yYW5nZV9zdGFydC5Ub1ByZXNlbnRhdGlvblRpbWUoKS5JblNlY29uZHNGKCkgPDwgIjsiCi0gICAgICAgICAgICAgPDwgcmVtb3ZlX3JhbmdlX2VuZC5Ub1ByZXNlbnRhdGlvblRpbWUoKS5JblNlY29uZHNGKCkgPDwgIl0iOwotICAgIFJlbW92ZShyZW1vdmVfcmFuZ2Vfc3RhcnQuVG9QcmVzZW50YXRpb25UaW1lKCksCi0gICAgICAgICAgIHJlbW92ZV9yYW5nZV9lbmQuVG9QcmVzZW50YXRpb25UaW1lKCksCi0gICAgICAgICAgIG1lZGlhX3RpbWUuVG9QcmVzZW50YXRpb25UaW1lKCkpOwotICB9Ci0KLSAgcmV0dXJuIGJ5dGVzX2ZyZWVkOwotfQotCi1zaXplX3QgU291cmNlQnVmZmVyU3RyZWFtOjpHZXRSZW1vdmFsUmFuZ2UoCi0gICAgRGVjb2RlVGltZXN0YW1wIHN0YXJ0X3RpbWVzdGFtcCwgRGVjb2RlVGltZXN0YW1wIGVuZF90aW1lc3RhbXAsCi0gICAgc2l6ZV90IHRvdGFsX2J5dGVzX3RvX2ZyZWUsIERlY29kZVRpbWVzdGFtcCogcmVtb3ZhbF9lbmRfdGltZXN0YW1wKSB7Ci0gIERDSEVDSyhzdGFydF90aW1lc3RhbXAgPj0gRGVjb2RlVGltZXN0YW1wKCkpIDw8IHN0YXJ0X3RpbWVzdGFtcC5JblNlY29uZHNGKCk7Ci0gIERDSEVDSyhzdGFydF90aW1lc3RhbXAgPCBlbmRfdGltZXN0YW1wKQotICAgICAgPDwgInN0YXJ0ICIgPDwgc3RhcnRfdGltZXN0YW1wLkluU2Vjb25kc0YoKSA8PCAiLCBlbmQgIgotICAgICAgPDwgZW5kX3RpbWVzdGFtcC5JblNlY29uZHNGKCk7Ci0KLSAgc2l6ZV90IGJ5dGVzX2ZyZWVkID0gMDsKLQotICBmb3IgKFJhbmdlTGlzdDo6aXRlcmF0b3IgaXRyID0gcmFuZ2VzXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSByYW5nZXNfLmVuZCgpICYmIGJ5dGVzX2ZyZWVkIDwgdG90YWxfYnl0ZXNfdG9fZnJlZTsgKytpdHIpIHsKLSAgICBTb3VyY2VCdWZmZXJSYW5nZSogcmFuZ2UgPSAqaXRyOwotICAgIGlmIChyYW5nZS0+R2V0U3RhcnRUaW1lc3RhbXAoKSA+PSBlbmRfdGltZXN0YW1wKSBicmVhazsKLSAgICBpZiAocmFuZ2UtPkdldEVuZFRpbWVzdGFtcCgpIDwgc3RhcnRfdGltZXN0YW1wKSBjb250aW51ZTsKLQotICAgIHNpemVfdCBieXRlc190b19mcmVlID0gdG90YWxfYnl0ZXNfdG9fZnJlZSAtIGJ5dGVzX2ZyZWVkOwotICAgIHNpemVfdCBieXRlc19yZW1vdmVkID0gcmFuZ2UtPkdldFJlbW92YWxHT1AoCi0gICAgICAgIHN0YXJ0X3RpbWVzdGFtcCwgZW5kX3RpbWVzdGFtcCwgYnl0ZXNfdG9fZnJlZSwgcmVtb3ZhbF9lbmRfdGltZXN0YW1wKTsKLSAgICBieXRlc19mcmVlZCArPSBieXRlc19yZW1vdmVkOwotICB9Ci0gIHJldHVybiBieXRlc19mcmVlZDsKLX0KLQotc2l6ZV90IFNvdXJjZUJ1ZmZlclN0cmVhbTo6RnJlZUJ1ZmZlcnMoc2l6ZV90IHRvdGFsX2J5dGVzX3RvX2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVUaW1lc3RhbXAgbWVkaWFfdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV2ZXJzZV9kaXJlY3Rpb24pIHsKLSAgVFJBQ0VfRVZFTlQyKCJtZWRpYSIsICJTb3VyY2VCdWZmZXJTdHJlYW06OkZyZWVCdWZmZXJzIiwKLSAgICAgICAgICAgICAgICJ0b3RhbCBieXRlcyB0byBmcmVlIiwgdG90YWxfYnl0ZXNfdG9fZnJlZSwgInJldmVyc2UgZGlyZWN0aW9uIiwKLSAgICAgICAgICAgICAgIHJldmVyc2VfZGlyZWN0aW9uKTsKLQotICBEQ0hFQ0tfR1QodG90YWxfYnl0ZXNfdG9fZnJlZSwgMHUpOwotICBzaXplX3QgYnl0ZXNfZnJlZWQgPSAwOwotCi0gIC8vIFRoaXMgcmFuZ2Ugd2lsbCBzYXZlIHRoZSBsYXN0IEdPUCBhcHBlbmRlZCB0byB8cmFuZ2VfZm9yX25leHRfYXBwZW5kX3wKLSAgLy8gaWYgdGhlIGJ1ZmZlcnMgc3Vycm91bmRpbmcgaXQgZ2V0IGRlbGV0ZWQgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4KLSAgU291cmNlQnVmZmVyUmFuZ2UqIG5ld19yYW5nZV9mb3JfYXBwZW5kID0gTlVMTDsKLQotICB3aGlsZSAoIXJhbmdlc18uZW1wdHkoKSAmJiBieXRlc19mcmVlZCA8IHRvdGFsX2J5dGVzX3RvX2ZyZWUpIHsKLSAgICBTb3VyY2VCdWZmZXJSYW5nZSogY3VycmVudF9yYW5nZSA9IE5VTEw7Ci0gICAgQnVmZmVyUXVldWUgYnVmZmVyczsKLSAgICBzaXplX3QgYnl0ZXNfZGVsZXRlZCA9IDA7Ci0KLSAgICBpZiAocmV2ZXJzZV9kaXJlY3Rpb24pIHsKLSAgICAgIGN1cnJlbnRfcmFuZ2UgPSByYW5nZXNfLmJhY2soKTsKLSAgICAgIERWTE9HKDUpIDw8ICJjdXJyZW50X3JhbmdlPSIgPDwgUmFuZ2VUb1N0cmluZygqY3VycmVudF9yYW5nZSk7Ci0gICAgICBpZiAoY3VycmVudF9yYW5nZS0+TGFzdEdPUENvbnRhaW5zTmV4dEJ1ZmZlclBvc2l0aW9uKCkpIHsKLSAgICAgICAgRENIRUNLX0VRKGN1cnJlbnRfcmFuZ2UsIHNlbGVjdGVkX3JhbmdlXyk7Ci0gICAgICAgIERWTE9HKDUpIDw8ICJjdXJyZW50X3JhbmdlIGNvbnRhaW5zIG5leHQgcmVhZCBwb3NpdGlvbiwgc3RvcHBpbmcgR0MiOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIERWTE9HKDUpIDw8ICJEZWxldGluZyBHT1AgZnJvbSBiYWNrOiAiIDw8IFJhbmdlVG9TdHJpbmcoKmN1cnJlbnRfcmFuZ2UpOwotICAgICAgYnl0ZXNfZGVsZXRlZCA9IGN1cnJlbnRfcmFuZ2UtPkRlbGV0ZUdPUEZyb21CYWNrKCZidWZmZXJzKTsKLSAgICB9IGVsc2UgewotICAgICAgY3VycmVudF9yYW5nZSA9IHJhbmdlc18uZnJvbnQoKTsKLSAgICAgIERWTE9HKDUpIDw8ICJjdXJyZW50X3JhbmdlPSIgPDwgUmFuZ2VUb1N0cmluZygqY3VycmVudF9yYW5nZSk7Ci0KLSAgICAgIC8vIEZpcnN0R09QRWFybGllclRoYW5NZWRpYVRpbWUoKSBpcyB1c2VmdWwgaGVyZSBlc3BlY2lhbGx5IGlmCi0gICAgICAvLyB8c2Vla19wZW5kaW5nX3wgKHN1Y2ggdGhhdCBubyByYW5nZSBjb250YWlucyBuZXh0IGJ1ZmZlcgotICAgICAgLy8gcG9zaXRpb24pLgotICAgICAgLy8gRmlyc3RHT1BDb250YWluc05leHRCdWZmZXJQb3NpdGlvbigpIGlzIHVzZWZ1bCBoZXJlIGVzcGVjaWFsbHkgaWYKLSAgICAgIC8vIHwhc2Vla19wZW5kaW5nX3wgdG8gcHJvdGVjdCBhZ2FpbnN0IERlbGV0ZUdPUEZyb21Gcm9udCgpIGlmCi0gICAgICAvLyBGaXJzdEdPUEVhcmxpZXJUaGFuTWVkaWFUaW1lKCkgd2FzIGluc3VmZmljaWVudCBhbG9uZS4KLSAgICAgIGlmICghY3VycmVudF9yYW5nZS0+Rmlyc3RHT1BFYXJsaWVyVGhhbk1lZGlhVGltZShtZWRpYV90aW1lKSB8fAotICAgICAgICAgIGN1cnJlbnRfcmFuZ2UtPkZpcnN0R09QQ29udGFpbnNOZXh0QnVmZmVyUG9zaXRpb24oKSkgewotICAgICAgICAvLyBXZSBoYXZlIHJlbW92ZWQgYWxsIGRhdGEgdXAgdG8gdGhlIEdPUCB0aGF0IGNvbnRhaW5zIGN1cnJlbnQgcGxheWJhY2sKLSAgICAgICAgLy8gcG9zaXRpb24sIHdlIGNhbid0IGRlbGV0ZSBhbnkgZnVydGhlci4KLSAgICAgICAgRFZMT0coNSkgPDwgImN1cnJlbnRfcmFuZ2UgY29udGFpbnMgcGxheWJhY2sgcG9zaXRpb24sIHN0b3BwaW5nIEdDIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBEVkxPRyg0KSA8PCAiRGVsZXRpbmcgR09QIGZyb20gZnJvbnQ6ICIgPDwgUmFuZ2VUb1N0cmluZygqY3VycmVudF9yYW5nZSkKLSAgICAgICAgICAgICAgIDw8ICIsIG1lZGlhX3RpbWU6ICIgPDwgbWVkaWFfdGltZS5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgICAgICA8PCAiLCBjdXJyZW50X3JhbmdlLT5IYXNOZXh0QnVmZmVyUG9zaXRpb24oKTogIgotICAgICAgICAgICAgICAgPDwgY3VycmVudF9yYW5nZS0+SGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCk7Ci0gICAgICBieXRlc19kZWxldGVkID0gY3VycmVudF9yYW5nZS0+RGVsZXRlR09QRnJvbUZyb250KCZidWZmZXJzKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UndmUganVzdCBkZWxldGVkIHRoZSBHT1AgdGhhdCB3YXMgbGFzdCBhcHBlbmRlZC4KLSAgICBEZWNvZGVUaW1lc3RhbXAgZW5kX3RpbWVzdGFtcCA9IGJ1ZmZlcnMuYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBpZiAoZW5kX3RpbWVzdGFtcCA9PSBsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBfKSB7Ci0gICAgICBEQ0hFQ0sobGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXyAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci0gICAgICBEQ0hFQ0soIW5ld19yYW5nZV9mb3JfYXBwZW5kKTsKLQotICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJhbmdlIGNvbnRhaW5pbmcgdGhlc2UgYnVmZmVycy4KLSAgICAgIG5ld19yYW5nZV9mb3JfYXBwZW5kID0gbmV3IFNvdXJjZUJ1ZmZlclJhbmdlKAotICAgICAgICAgIFR5cGVUb0dhcFBvbGljeShHZXRUeXBlKCkpLCBidWZmZXJzLCBrTm9EZWNvZGVUaW1lc3RhbXAoKSwKLSAgICAgICAgICBiYXNlOjpCaW5kKCZTb3VyY2VCdWZmZXJTdHJlYW06OkdldE1heEludGVyYnVmZmVyRGlzdGFuY2UsCi0gICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfID0gcmFuZ2VzXy5lbmQoKTsKLSAgICB9IGVsc2UgewotICAgICAgYnl0ZXNfZnJlZWQgKz0gYnl0ZXNfZGVsZXRlZDsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudF9yYW5nZS0+c2l6ZV9pbl9ieXRlcygpID09IDApIHsKLSAgICAgIERDSEVDS19ORShjdXJyZW50X3JhbmdlLCBzZWxlY3RlZF9yYW5nZV8pOwotICAgICAgRENIRUNLKHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gPT0gcmFuZ2VzXy5lbmQoKSB8fAotICAgICAgICAgICAgICpyYW5nZV9mb3JfbmV4dF9hcHBlbmRfICE9IGN1cnJlbnRfcmFuZ2UpOwotICAgICAgZGVsZXRlIGN1cnJlbnRfcmFuZ2U7Ci0gICAgICByZXZlcnNlX2RpcmVjdGlvbiA/IHJhbmdlc18ucG9wX2JhY2soKSA6IHJhbmdlc18ucG9wX2Zyb250KCk7Ci0gICAgfQotCi0gICAgaWYgKHJldmVyc2VfZGlyZWN0aW9uICYmIG5ld19yYW5nZV9mb3JfYXBwZW5kKSB7Ci0gICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRlbGV0ZSBhbnkgZnVydGhlciwgb3Igd2UnbGwgYmUgY3JlYXRpbmcgZ2FwcwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gSW5zZXJ0IHxuZXdfcmFuZ2VfZm9yX2FwcGVuZHwgaW50byB8cmFuZ2VzX3wsIGlmIGFwcGxpY2FibGUuCi0gIGlmIChuZXdfcmFuZ2VfZm9yX2FwcGVuZCkgewotICAgIHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gPSBBZGRUb1JhbmdlcyhuZXdfcmFuZ2VfZm9yX2FwcGVuZCk7Ci0gICAgRENIRUNLKHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gIT0gcmFuZ2VzXy5lbmQoKSk7Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBtZXJnZSB8bmV3X3JhbmdlX2Zvcl9hcHBlbmR8IHdpdGggdGhlIHJhbmdlCi0gICAgLy8gYmVmb3JlIG9yIGFmdGVyIGl0LiB8bmV3X3JhbmdlX2Zvcl9hcHBlbmR8IGlzIGNyZWF0ZWQgd2hlbmV2ZXIgdGhlIGxhc3QKLSAgICAvLyBHT1AgYXBwZW5kZWQgaXMgZW5jb3VudGVyZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgYnVmZmVycyBhZnRlciBpdAotICAgIC8vIGFyZSB1bHRpbWF0ZWx5IGRlbGV0ZWQuIE1lcmdpbmcgaXMgbmVjZXNzYXJ5IGlmIHRoZXJlIHdlcmUgbm8gYnVmZmVycwotICAgIC8vIChvciB2ZXJ5IGZldyBidWZmZXJzKSBkZWxldGVkIGFmdGVyIGNyZWF0aW5nIHxuZXdfcmFuZ2VfZm9yX2FwcGVuZHwuCi0gICAgaWYgKHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8gIT0gcmFuZ2VzXy5iZWdpbigpKSB7Ci0gICAgICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIHJhbmdlX2JlZm9yZV9uZXh0ID0gcmFuZ2VfZm9yX25leHRfYXBwZW5kXzsKLSAgICAgIC0tcmFuZ2VfYmVmb3JlX25leHQ7Ci0gICAgICBNZXJnZVdpdGhBZGphY2VudFJhbmdlSWZOZWNlc3NhcnkocmFuZ2VfYmVmb3JlX25leHQpOwotICAgIH0KLSAgICBNZXJnZVdpdGhBZGphY2VudFJhbmdlSWZOZWNlc3NhcnkocmFuZ2VfZm9yX25leHRfYXBwZW5kXyk7Ci0gIH0KLSAgcmV0dXJuIGJ5dGVzX2ZyZWVkOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6UHJlcGFyZVJhbmdlc0Zvck5leHRBcHBlbmQoCi0gICAgY29uc3QgQnVmZmVyUXVldWUmIG5ld19idWZmZXJzLCBCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzKSB7Ci0gIERDSEVDSyhkZWxldGVkX2J1ZmZlcnMpOwotCi0gIC8vIEhhbmRsZSBzcGxpY2VzIGJldHdlZW4gdGhlIGV4aXN0aW5nIGJ1ZmZlcnMgYW5kIHRoZSBuZXcgYnVmZmVycy4gIElmIGEKLSAgLy8gc3BsaWNlIGlzIGdlbmVyYXRlZCB0aGUgdGltZXN0YW1wIGFuZCBkdXJhdGlvbiBvZiB0aGUgZmlyc3QgYnVmZmVyIGluCi0gIC8vIHxuZXdfYnVmZmVyc3wgd2lsbCBiZSBtb2RpZmllZC4KLSAgaWYgKHNwbGljZV9mcmFtZXNfZW5hYmxlZF8pIEdlbmVyYXRlU3BsaWNlRnJhbWUobmV3X2J1ZmZlcnMpOwotCi0gIERlY29kZVRpbWVzdGFtcCBwcmV2X3RpbWVzdGFtcCA9IGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF87Ci0gIERlY29kZVRpbWVzdGFtcCBuZXh0X3RpbWVzdGFtcCA9IG5ld19idWZmZXJzLmZyb250KCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotCi0gIGlmIChwcmV2X3RpbWVzdGFtcCAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSAmJgotICAgICAgcHJldl90aW1lc3RhbXAgIT0gbmV4dF90aW1lc3RhbXApIHsKLSAgICAvLyBDbGVhbiB1cCB0aGUgb2xkIGJ1ZmZlcnMgYmV0d2VlbiB0aGUgbGFzdCBhcHBlbmRlZCBidWZmZXIgYW5kIHRoZQotICAgIC8vIGJlZ2lubmluZyBvZiB8bmV3X2J1ZmZlcnN8LgotICAgIFJlbW92ZUludGVybmFsKHByZXZfdGltZXN0YW1wLCBuZXh0X3RpbWVzdGFtcCwgdHJ1ZSwgZGVsZXRlZF9idWZmZXJzKTsKLSAgfQotCi0gIC8vIEFsd2F5cyBtYWtlIHRoZSBzdGFydCBvZiB0aGUgZGVsZXRlIHJhbmdlIGV4Y2x1c2l2ZSBmb3Igc2FtZSB0aW1lc3RhbXAKLSAgLy8gYWNyb3NzIHRoZSBsYXN0IGJ1ZmZlciBpbiB0aGUgcHJldmlvdXMgYXBwZW5kIGFuZCB0aGUgZmlyc3QgYnVmZmVyIGluIHRoZQotICAvLyBjdXJyZW50IGFwcGVuZC4gTmV2ZXIgYmUgZXhjbHVzaXZlIGlmIGEgc3BsaWNlIGZyYW1lIHdhcyBnZW5lcmF0ZWQgYmVjYXVzZQotICAvLyB3ZSBkb24ndCBnZW5lcmF0ZSBzcGxpY2UgZnJhbWVzIGZvciBzYW1lIHRpbWVzdGFtcCBzaXR1YXRpb25zLgotICBEQ0hFQ0sobmV3X2J1ZmZlcnMuZnJvbnQoKS0+c3BsaWNlX3RpbWVzdGFtcCgpICE9Ci0gICAgICAgICBuZXdfYnVmZmVycy5mcm9udCgpLT50aW1lc3RhbXAoKSk7Ci0gIGNvbnN0IGJvb2wgZXhjbHVkZV9zdGFydCA9IG5ld19idWZmZXJzLmZyb250KCktPnNwbGljZV9idWZmZXJzKCkuZW1wdHkoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3RpbWVzdGFtcCA9PSBuZXh0X3RpbWVzdGFtcDsKLQotICAvLyBEZWxldGUgdGhlIGJ1ZmZlcnMgdGhhdCB8bmV3X2J1ZmZlcnN8IG92ZXJsYXBzLgotICBEZWNvZGVUaW1lc3RhbXAgc3RhcnQgPSBuZXdfYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgaWYgKG5ld19jb2RlZF9mcmFtZV9ncm91cF8pIHsKLSAgICAvLyBFeHRlbmQgdGhlIGRlbGV0aW9uIHJhbmdlIGVhcmxpZXIgdG8gdGhlIGNvZGVkIGZyYW1lIGdyb3VwIHN0YXJ0IHRpbWUgaWYKLSAgICAvLyB0aGlzIGlzIHRoZSBmaXJzdCBhcHBlbmQgaW4gYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAuIE5vdGUgdGhhdCB8c3RhcnR8Ci0gICAgLy8gY291bGQgYWxyZWFkeSBiZSBsZXNzIHRoYW4gfGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWVffCBpZiBhIHNwbGljZQotICAgIC8vIHdhcyBnZW5lcmF0ZWQuCi0gICAgRENIRUNLKGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWVfICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLSAgICBzdGFydCA9IHN0ZDo6bWluKGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWVfLCBzdGFydCk7Ci0gIH0KLSAgRGVjb2RlVGltZXN0YW1wIGVuZCA9IG5ld19idWZmZXJzLmJhY2soKS0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbiA9IG5ld19idWZmZXJzLmJhY2soKS0+ZHVyYXRpb24oKTsKLQotICAvLyBTZXQgZW5kIHRpbWUgZm9yIHJlbW92ZSB0byBpbmNsdWRlIHRoZSBkdXJhdGlvbiBvZiBsYXN0IGJ1ZmZlci4gSWYgdGhlCi0gIC8vIGR1cmF0aW9uIGlzIGVzdGltYXRlZCwgdXNlIDEgbWljcm9zZWNvbmQgaW5zdGVhZCB0byBlbnN1cmUgZnJhbWVzIGFyZSBub3QKLSAgLy8gYWNjaWRlbnRhbGx5IHJlbW92ZWQgZHVlIHRvIG92ZXItZXN0aW1hdGlvbi4KLSAgaWYgKGR1cmF0aW9uICE9IGtOb1RpbWVzdGFtcCAmJiBkdXJhdGlvbiA+IGJhc2U6OlRpbWVEZWx0YSgpICYmCi0gICAgICAhbmV3X2J1ZmZlcnMuYmFjaygpLT5pc19kdXJhdGlvbl9lc3RpbWF0ZWQoKSkgewotICAgIGVuZCArPSBkdXJhdGlvbjsKLSAgfSBlbHNlIHsKLSAgICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IEVtaXQgd2FybmluZyB3aGVuIDBtcyBkdXJhdGlvbnMgYXJlIG5vdCBleHBlY3RlZC4KLSAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMjgzNgotICAgIGVuZCArPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21JbnRlcm5hbFZhbHVlKDEpOwotICB9Ci0KLSAgUmVtb3ZlSW50ZXJuYWwoc3RhcnQsIGVuZCwgZXhjbHVkZV9zdGFydCwgZGVsZXRlZF9idWZmZXJzKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OkFyZUFkamFjZW50SW5TZXF1ZW5jZSgKLSAgICBEZWNvZGVUaW1lc3RhbXAgZmlyc3RfdGltZXN0YW1wLCBEZWNvZGVUaW1lc3RhbXAgc2Vjb25kX3RpbWVzdGFtcCkgY29uc3QgewotICByZXR1cm4gZmlyc3RfdGltZXN0YW1wIDwgc2Vjb25kX3RpbWVzdGFtcCAmJgotICAgICAgICAgc2Vjb25kX3RpbWVzdGFtcCA8PQotICAgICAgICAgICAgIGZpcnN0X3RpbWVzdGFtcCArIENvbXB1dGVGdWRnZVJvb20oR2V0TWF4SW50ZXJidWZmZXJEaXN0YW5jZSgpKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdHJlYW06OlBydW5lVHJhY2tCdWZmZXIoY29uc3QgRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgewotICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoZSBuZXh0IHRpbWVzdGFtcCwgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkZWxldGUuCi0gIGlmICh0aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHJldHVybjsKLQotICB3aGlsZSAoIXRyYWNrX2J1ZmZlcl8uZW1wdHkoKSAmJgotICAgICAgICAgdHJhY2tfYnVmZmVyXy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpID49IHRpbWVzdGFtcCkgewotICAgIHRyYWNrX2J1ZmZlcl8ucG9wX2JhY2soKTsKLSAgfQotICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiIFJlbW92ZWQgYWxsIGJ1ZmZlcnMgd2l0aCBEVFMgPj0gIiA8PCB0aW1lc3RhbXAuSW5TZWNvbmRzRigpCi0gICAgICAgICAgIDw8ICIuIE5ldyB0cmFjayBidWZmZXIgc2l6ZToiIDw8IHRyYWNrX2J1ZmZlcl8uc2l6ZSgpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6TWVyZ2VXaXRoQWRqYWNlbnRSYW5nZUlmTmVjZXNzYXJ5KAotICAgIGNvbnN0IFJhbmdlTGlzdDo6aXRlcmF0b3ImIHJhbmdlX3dpdGhfbmV3X2J1ZmZlcnNfaXRyKSB7Ci0gIERDSEVDSyhyYW5nZV93aXRoX25ld19idWZmZXJzX2l0ciAhPSByYW5nZXNfLmVuZCgpKTsKLQotICBTb3VyY2VCdWZmZXJSYW5nZSogcmFuZ2Vfd2l0aF9uZXdfYnVmZmVycyA9ICpyYW5nZV93aXRoX25ld19idWZmZXJzX2l0cjsKLSAgUmFuZ2VMaXN0OjppdGVyYXRvciBuZXh0X3JhbmdlX2l0ciA9IHJhbmdlX3dpdGhfbmV3X2J1ZmZlcnNfaXRyOwotICArK25leHRfcmFuZ2VfaXRyOwotCi0gIGlmIChuZXh0X3JhbmdlX2l0ciA9PSByYW5nZXNfLmVuZCgpIHx8Ci0gICAgICAhcmFuZ2Vfd2l0aF9uZXdfYnVmZmVycy0+Q2FuQXBwZW5kUmFuZ2VUb0VuZCgqKm5leHRfcmFuZ2VfaXRyKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIGJvb2wgdHJhbnNmZXJfY3VycmVudF9wb3NpdGlvbiA9IHNlbGVjdGVkX3JhbmdlXyA9PSAqbmV4dF9yYW5nZV9pdHI7Ci0gIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgbWVyZ2luZyAiCi0gICAgICAgICAgIDw8IFJhbmdlVG9TdHJpbmcoKnJhbmdlX3dpdGhfbmV3X2J1ZmZlcnMpIDw8ICIgaW50byAiCi0gICAgICAgICAgIDw8IFJhbmdlVG9TdHJpbmcoKipuZXh0X3JhbmdlX2l0cik7Ci0gIHJhbmdlX3dpdGhfbmV3X2J1ZmZlcnMtPkFwcGVuZFJhbmdlVG9FbmQoKipuZXh0X3JhbmdlX2l0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlcl9jdXJyZW50X3Bvc2l0aW9uKTsKLSAgLy8gVXBkYXRlIHxzZWxlY3RlZF9yYW5nZV98IHBvaW50ZXIgaWYgfHJhbmdlfCBoYXMgYmVjb21lIHNlbGVjdGVkIGFmdGVyCi0gIC8vIG1lcmdlcy4KLSAgaWYgKHRyYW5zZmVyX2N1cnJlbnRfcG9zaXRpb24pIFNldFNlbGVjdGVkUmFuZ2UocmFuZ2Vfd2l0aF9uZXdfYnVmZmVycyk7Ci0KLSAgaWYgKG5leHRfcmFuZ2VfaXRyID09IHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF8pCi0gICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyA9IHJhbmdlX3dpdGhfbmV3X2J1ZmZlcnNfaXRyOwotCi0gIERlbGV0ZUFuZFJlbW92ZVJhbmdlKCZuZXh0X3JhbmdlX2l0cik7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpTZWVrKGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIHsKLSAgRENIRUNLKHRpbWVzdGFtcCA+PSBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIERWTE9HKDEpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgKCIKLSAgICAgICAgICAgPDwgdGltZXN0YW1wLkluU2Vjb25kc0YoKSA8PCAiKSI7Ci0gIFJlc2V0U2Vla1N0YXRlKCk7Ci0KLSAgc2Vla19idWZmZXJfdGltZXN0YW1wXyA9IHRpbWVzdGFtcDsKLSAgc2Vla19wZW5kaW5nXyA9IHRydWU7Ci0KLSAgaWYgKFNob3VsZFNlZWtUb1N0YXJ0T2ZCdWZmZXJlZCh0aW1lc3RhbXApKSB7Ci0gICAgcmFuZ2VzXy5mcm9udCgpLT5TZWVrVG9TdGFydCgpOwotICAgIFNldFNlbGVjdGVkUmFuZ2UocmFuZ2VzXy5mcm9udCgpKTsKLSAgICBzZWVrX3BlbmRpbmdfID0gZmFsc2U7Ci0gICAgc2Vla19idWZmZXJfdGltZXN0YW1wXyA9IEdldE5leHRCdWZmZXJUaW1lc3RhbXAoKS5Ub1ByZXNlbnRhdGlvblRpbWUoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBEZWNvZGVUaW1lc3RhbXAgc2Vla19kdHMgPSBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKHRpbWVzdGFtcCk7Ci0KLSAgUmFuZ2VMaXN0OjppdGVyYXRvciBpdHIgPSByYW5nZXNfLmVuZCgpOwotICBmb3IgKGl0ciA9IHJhbmdlc18uYmVnaW4oKTsgaXRyICE9IHJhbmdlc18uZW5kKCk7ICsraXRyKSB7Ci0gICAgaWYgKCgqaXRyKS0+Q2FuU2Vla1RvKHNlZWtfZHRzKSkgYnJlYWs7Ci0gIH0KLQotICBpZiAoaXRyID09IHJhbmdlc18uZW5kKCkpIHJldHVybjsKLQotICBTZWVrQW5kU2V0U2VsZWN0ZWRSYW5nZSgqaXRyLCBzZWVrX2R0cyk7Ci0gIHNlZWtfcGVuZGluZ18gPSBmYWxzZTsKLSAgc2Vla19idWZmZXJfdGltZXN0YW1wXyA9IEdldE5leHRCdWZmZXJUaW1lc3RhbXAoKS5Ub1ByZXNlbnRhdGlvblRpbWUoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OklzU2Vla1BlbmRpbmcoKSBjb25zdCB7Ci0gIHJldHVybiBzZWVrX3BlbmRpbmdfICYmICFJc0VuZE9mU3RyZWFtUmVhY2hlZCgpOwotfQotCi1iYXNlOjpUaW1lRGVsdGEgU291cmNlQnVmZmVyU3RyZWFtOjpHZXRTZWVrS2V5ZnJhbWVUaW1lc3RhbXAoKSBjb25zdCB7Ci0gIERDSEVDSyghSXNTZWVrUGVuZGluZygpKTsKLSAgcmV0dXJuIHNlZWtfYnVmZmVyX3RpbWVzdGFtcF87Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpPblNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgewotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiICgiCi0gICAgICAgICAgIDw8IGR1cmF0aW9uLkluU2Vjb25kc0YoKSA8PCAiKSI7Ci0gIERDSEVDSyghZW5kX29mX3N0cmVhbV8pOwotCi0gIGlmIChyYW5nZXNfLmVtcHR5KCkpIHJldHVybjsKLQotICBEZWNvZGVUaW1lc3RhbXAgc3RhcnQgPSBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGR1cmF0aW9uKTsKLSAgRGVjb2RlVGltZXN0YW1wIGVuZCA9IHJhbmdlc18uYmFjaygpLT5HZXRCdWZmZXJlZEVuZFRpbWVzdGFtcCgpOwotCi0gIC8vIFRyaW0gdGhlIGVuZCBpZiBpdCBleGNlZWRzIHRoZSBuZXcgZHVyYXRpb24uCi0gIGlmIChzdGFydCA8IGVuZCkgewotICAgIEJ1ZmZlclF1ZXVlIGRlbGV0ZWRfYnVmZmVyczsKLSAgICBSZW1vdmVJbnRlcm5hbChzdGFydCwgZW5kLCBmYWxzZSwgJmRlbGV0ZWRfYnVmZmVycyk7Ci0KLSAgICBpZiAoIWRlbGV0ZWRfYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgICAvLyBUcnVuY2F0aW9uIHJlbW92ZWQgY3VycmVudCBwb3NpdGlvbi4gQ2xlYXIgc2VsZWN0ZWQgcmFuZ2UuCi0gICAgICBTZXRTZWxlY3RlZFJhbmdlKE5VTEwpOwotICAgIH0KLSAgfQotfQotCi1Tb3VyY2VCdWZmZXJTdHJlYW06OlN0YXR1cyBTb3VyY2VCdWZmZXJTdHJlYW06OkdldE5leHRCdWZmZXIoCi0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+KiBvdXRfYnVmZmVyKSB7Ci0gIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpOwotICBpZiAoIXBlbmRpbmdfYnVmZmVyXy5nZXQoKSkgewotICAgIGNvbnN0IFNvdXJjZUJ1ZmZlclN0cmVhbTo6U3RhdHVzIHN0YXR1cyA9IEdldE5leHRCdWZmZXJJbnRlcm5hbChvdXRfYnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3MgfHwKLSAgICAgICAgIVNldFBlbmRpbmdCdWZmZXIob3V0X2J1ZmZlcikpIHsKLSAgICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgICAgICA8PCAiOiBubyBwZW5kaW5nIGJ1ZmZlciwgcmV0dXJuaW5nIHN0YXR1cyAiIDw8IHN0YXR1czsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCFwZW5kaW5nX2J1ZmZlcl8tPnNwbGljZV9idWZmZXJzKCkuZW1wdHkoKSkgewotICAgIGNvbnN0IFNvdXJjZUJ1ZmZlclN0cmVhbTo6U3RhdHVzIHN0YXR1cyA9Ci0gICAgICAgIEhhbmRsZU5leHRCdWZmZXJXaXRoU3BsaWNlKG91dF9idWZmZXIpOwotICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgICAgPDwgIjogaGFuZGxlZCBuZXh0IGJ1ZmZlciB3aXRoIHNwbGljZSwgcmV0dXJuaW5nIHN0YXR1cyAiCi0gICAgICAgICAgICAgPDwgc3RhdHVzOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICBEQ0hFQ0socGVuZGluZ19idWZmZXJfLT5wcmVyb2xsX2J1ZmZlcigpLmdldCgpKTsKLQotICBjb25zdCBTb3VyY2VCdWZmZXJTdHJlYW06OlN0YXR1cyBzdGF0dXMgPQotICAgICAgSGFuZGxlTmV4dEJ1ZmZlcldpdGhQcmVyb2xsKG91dF9idWZmZXIpOwotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiOiBoYW5kbGVkIG5leHQgYnVmZmVyIHdpdGggcHJlcm9sbCwgcmV0dXJuaW5nIHN0YXR1cyAiIDw8IHN0YXR1czsKLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotU291cmNlQnVmZmVyU3RyZWFtOjpTdGF0dXMgU291cmNlQnVmZmVyU3RyZWFtOjpIYW5kbGVOZXh0QnVmZmVyV2l0aFNwbGljZSgKLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4qIG91dF9idWZmZXIpIHsKLSAgY29uc3QgQnVmZmVyUXVldWUmIHNwbGljZV9idWZmZXJzID0gcGVuZGluZ19idWZmZXJfLT5zcGxpY2VfYnVmZmVycygpOwotICBjb25zdCBzaXplX3QgbGFzdF9zcGxpY2VfYnVmZmVyX2luZGV4ID0gc3BsaWNlX2J1ZmZlcnMuc2l6ZSgpIC0gMTsKLQotICAvLyBBcmUgdGhlcmUgYW55IHNwbGljZSBidWZmZXJzIGxlZnQgdG8gaGFuZCBvdXQ/ICBUaGUgbGFzdCBidWZmZXIgc2hvdWxkIGJlCi0gIC8vIGhhbmRlZCBvdXQgc2VwYXJhdGVseSBzaW5jZSBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBwb3N0LXNwbGljZSBidWZmZXIuCi0gIGlmIChzcGxpY2VfYnVmZmVyc19pbmRleF8gPCBsYXN0X3NwbGljZV9idWZmZXJfaW5kZXgpIHsKLSAgICAvLyBBY2NvdW50IGZvciBjb25maWcgY2hhbmdlcyB3aGljaCBvY2N1ciBiZXR3ZWVuIGZhZGUgb3V0IGJ1ZmZlcnMuCi0gICAgaWYgKGN1cnJlbnRfY29uZmlnX2luZGV4XyAhPQotICAgICAgICBzcGxpY2VfYnVmZmVyc1tzcGxpY2VfYnVmZmVyc19pbmRleF9dLT5HZXRDb25maWdJZCgpKSB7Ci0gICAgICBjb25maWdfY2hhbmdlX3BlbmRpbmdfID0gdHJ1ZTsKLSAgICAgIERWTE9HKDEpIDw8ICJDb25maWcgY2hhbmdlIChzcGxpY2UgYnVmZmVyIGNvbmZpZyBJRCBkb2VzIG5vdCBtYXRjaCkuIjsKLSAgICAgIHJldHVybiBTb3VyY2VCdWZmZXJTdHJlYW06OmtDb25maWdDaGFuZ2U7Ci0gICAgfQotCi0gICAgLy8gRXZlcnkgcHJlIHNwbGljZSBidWZmZXIgbXVzdCBoYXZlIHRoZSBzYW1lIHNwbGljZV90aW1lc3RhbXAoKS4KLSAgICBEQ0hFQ0socGVuZGluZ19idWZmZXJfLT5zcGxpY2VfdGltZXN0YW1wKCkgPT0KLSAgICAgICAgICAgc3BsaWNlX2J1ZmZlcnNbc3BsaWNlX2J1ZmZlcnNfaW5kZXhfXS0+c3BsaWNlX3RpbWVzdGFtcCgpKTsKLQotICAgIC8vIE5vIHByZSBzcGxpY2UgYnVmZmVycyBzaG91bGQgaGF2ZSBwcmVyb2xsLgotICAgIERDSEVDSyghc3BsaWNlX2J1ZmZlcnNbc3BsaWNlX2J1ZmZlcnNfaW5kZXhfXS0+cHJlcm9sbF9idWZmZXIoKS5nZXQoKSk7Ci0KLSAgICAqb3V0X2J1ZmZlciA9IHNwbGljZV9idWZmZXJzW3NwbGljZV9idWZmZXJzX2luZGV4XysrXTsKLSAgICByZXR1cm4gU291cmNlQnVmZmVyU3RyZWFtOjprU3VjY2VzczsKLSAgfQotCi0gIC8vIERpZCB3ZSBoYW5kIG91dCB0aGUgbGFzdCBwcmUtc3BsaWNlIGJ1ZmZlciBvbiB0aGUgcHJldmlvdXMgY2FsbD8KLSAgaWYgKCFwZW5kaW5nX2J1ZmZlcnNfY29tcGxldGVfKSB7Ci0gICAgRENIRUNLX0VRKHNwbGljZV9idWZmZXJzX2luZGV4XywgbGFzdF9zcGxpY2VfYnVmZmVyX2luZGV4KTsKLSAgICBwZW5kaW5nX2J1ZmZlcnNfY29tcGxldGVfID0gdHJ1ZTsKLSAgICBjb25maWdfY2hhbmdlX3BlbmRpbmdfID0gdHJ1ZTsKLSAgICBEVkxPRygxKSA8PCAiQ29uZmlnIGNoYW5nZSAoZm9yY2VkIGZvciBmYWRlIGluIG9mIHNwbGljZSBmcmFtZSkuIjsKLSAgICByZXR1cm4gU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlOwotICB9Ci0KLSAgLy8gQWxsIHByZS1zcGxpY2UgYnVmZmVycyBoYXZlIGJlZW4gaGFuZGVkIG91dCBhbmQgYSBjb25maWcgY2hhbmdlIGNvbXBsZXRlZCwKLSAgLy8gc28gaGFuZCBvdXQgdGhlIGZpbmFsIGJ1ZmZlciBmb3IgZmFkZSBpbi4gIEJlY2F1c2UgYSBjb25maWcgY2hhbmdlIGlzCi0gIC8vIGFsd2F5cyBpc3N1ZWQgcHJpb3IgdG8gaGFuZGluZyBvdXQgdGhpcyBidWZmZXIsIGFueSBjaGFuZ2VzIGluIGNvbmZpZyBpZAotICAvLyBoYXZlIGJlZW4gaW5oZXJlbnRseSBoYW5kbGVkLgotICBEQ0hFQ0socGVuZGluZ19idWZmZXJzX2NvbXBsZXRlXyk7Ci0gIERDSEVDS19FUShzcGxpY2VfYnVmZmVyc19pbmRleF8sIHNwbGljZV9idWZmZXJzLnNpemUoKSAtIDEpOwotICBEQ0hFQ0soc3BsaWNlX2J1ZmZlcnMuYmFjaygpLT5zcGxpY2VfdGltZXN0YW1wKCkgPT0ga05vVGltZXN0YW1wKTsKLSAgKm91dF9idWZmZXIgPSBzcGxpY2VfYnVmZmVycy5iYWNrKCk7Ci0gIHBlbmRpbmdfYnVmZmVyXyA9IE5VTEw7Ci0KLSAgLy8gSWYgdGhlIGxhc3Qgc3BsaWNlIGJ1ZmZlciBoYXMgcHJlcm9sbCwgaGFuZCBvZmYgdG8gdGhlIHByZXJvbGwgaGFuZGxlci4KLSAgcmV0dXJuIFNldFBlbmRpbmdCdWZmZXIob3V0X2J1ZmZlcikgPyBIYW5kbGVOZXh0QnVmZmVyV2l0aFByZXJvbGwob3V0X2J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBTb3VyY2VCdWZmZXJTdHJlYW06OmtTdWNjZXNzOwotfQotCi1Tb3VyY2VCdWZmZXJTdHJlYW06OlN0YXR1cyBTb3VyY2VCdWZmZXJTdHJlYW06OkhhbmRsZU5leHRCdWZmZXJXaXRoUHJlcm9sbCgKLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4qIG91dF9idWZmZXIpIHsKLSAgLy8gQW55IGNvbmZpZyBjaGFuZ2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCi0gIERDSEVDS19FUShjdXJyZW50X2NvbmZpZ19pbmRleF8sIHBlbmRpbmdfYnVmZmVyXy0+R2V0Q29uZmlnSWQoKSk7Ci0KLSAgLy8gQ2hlY2sgaWYgdGhlIHByZXJvbGwgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGVkIG91dC4KLSAgaWYgKCFwZW5kaW5nX2J1ZmZlcnNfY29tcGxldGVfKSB7Ci0gICAgcGVuZGluZ19idWZmZXJzX2NvbXBsZXRlXyA9IHRydWU7Ci0gICAgKm91dF9idWZmZXIgPSBwZW5kaW5nX2J1ZmZlcl8tPnByZXJvbGxfYnVmZmVyKCk7Ci0gICAgcmV0dXJuIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3M7Ci0gIH0KLQotICAvLyBQcmVyb2xsIGNvbXBsZXRlLCBoYW5kIG91dCB0aGUgZmluYWwgYnVmZmVyLgotICAqb3V0X2J1ZmZlciA9IHBlbmRpbmdfYnVmZmVyXzsKLSAgcGVuZGluZ19idWZmZXJfID0gTlVMTDsKLSAgcmV0dXJuIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3M7Ci19Ci0KLVNvdXJjZUJ1ZmZlclN0cmVhbTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0TmV4dEJ1ZmZlckludGVybmFsKAotICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiogb3V0X2J1ZmZlcikgewotICBDSEVDSyghY29uZmlnX2NoYW5nZV9wZW5kaW5nXyk7Ci0KLSAgaWYgKCF0cmFja19idWZmZXJfLmVtcHR5KCkpIHsKLSAgICBEQ0hFQ0soIXNlbGVjdGVkX3JhbmdlXyk7Ci0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBuZXh0X2J1ZmZlciA9IHRyYWNrX2J1ZmZlcl8uZnJvbnQoKTsKLQotICAgIC8vIElmIHRoZSBuZXh0IGJ1ZmZlciBpcyBhbiBhdWRpbyBzcGxpY2UgZnJhbWUsIHRoZSBuZXh0IGVmZmVjdGl2ZSBjb25maWcgaWQKLSAgICAvLyBjb21lcyBmcm9tIHRoZSBmaXJzdCBzcGxpY2UgYnVmZmVyLgotICAgIGlmIChuZXh0X2J1ZmZlci0+R2V0U3BsaWNlQnVmZmVyQ29uZmlnSWQoMCkgIT0gY3VycmVudF9jb25maWdfaW5kZXhfKSB7Ci0gICAgICBjb25maWdfY2hhbmdlX3BlbmRpbmdfID0gdHJ1ZTsKLSAgICAgIERWTE9HKDEpIDw8ICJDb25maWcgY2hhbmdlICh0cmFjayBidWZmZXIgY29uZmlnIElEIGRvZXMgbm90IG1hdGNoKS4iOwotICAgICAgcmV0dXJuIGtDb25maWdDaGFuZ2U7Ci0gICAgfQotCi0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiBOZXh0IGJ1ZmZlciBjb21pbmcgZnJvbSB0cmFja19idWZmZXJfIjsKLSAgICAqb3V0X2J1ZmZlciA9IG5leHRfYnVmZmVyOwotICAgIHRyYWNrX2J1ZmZlcl8ucG9wX2Zyb250KCk7Ci0gICAgV2FybklmVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcHNGb3J3YXJkKCpvdXRfYnVmZmVyKTsKLSAgICBsYXN0X291dHB1dF9idWZmZXJfdGltZXN0YW1wXyA9ICgqb3V0X2J1ZmZlciktPkdldERlY29kZVRpbWVzdGFtcCgpOwotCi0gICAgLy8gSWYgdGhlIHRyYWNrIGJ1ZmZlciBiZWNvbWVzIGVtcHR5LCB0aGVuIHRyeSB0byBzZXQgdGhlIHNlbGVjdGVkIHJhbmdlCi0gICAgLy8gYmFzZWQgb24gdGhlIHRpbWVzdGFtcCBvZiB0aGlzIGJ1ZmZlciBiZWluZyByZXR1cm5lZC4KLSAgICBpZiAodHJhY2tfYnVmZmVyXy5lbXB0eSgpKSB7Ci0gICAgICBqdXN0X2V4aGF1c3RlZF90cmFja19idWZmZXJfID0gdHJ1ZTsKLSAgICAgIFNldFNlbGVjdGVkUmFuZ2VJZk5lZWRlZChsYXN0X291dHB1dF9idWZmZXJfdGltZXN0YW1wXyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGtTdWNjZXNzOwotICB9Ci0KLSAgRENIRUNLKHRyYWNrX2J1ZmZlcl8uZW1wdHkoKSk7Ci0gIGlmICghc2VsZWN0ZWRfcmFuZ2VfIHx8ICFzZWxlY3RlZF9yYW5nZV8tPkhhc05leHRCdWZmZXIoKSkgewotICAgIGlmIChJc0VuZE9mU3RyZWFtUmVhY2hlZCgpKSB7Ci0gICAgICByZXR1cm4ga0VuZE9mU3RyZWFtOwotICAgIH0KLSAgICBEVkxPRygzKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICAgIDw8ICI6IHJldHVybmluZyBrTmVlZEJ1ZmZlciAiCi0gICAgICAgICAgICAgPDwgKHNlbGVjdGVkX3JhbmdlXyA/ICIoc2VsZWN0ZWQgcmFuZ2UgaGFzIG5vIG5leHQgYnVmZmVyKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIihubyBzZWxlY3RlZCByYW5nZSkiKTsKLSAgICByZXR1cm4ga05lZWRCdWZmZXI7Ci0gIH0KLQotICBpZiAoc2VsZWN0ZWRfcmFuZ2VfLT5HZXROZXh0Q29uZmlnSWQoKSAhPSBjdXJyZW50X2NvbmZpZ19pbmRleF8pIHsKLSAgICBjb25maWdfY2hhbmdlX3BlbmRpbmdfID0gdHJ1ZTsKLSAgICBEVkxPRygxKSA8PCAiQ29uZmlnIGNoYW5nZSAoc2VsZWN0ZWQgcmFuZ2UgY29uZmlnIElEIGRvZXMgbm90IG1hdGNoKS4iOwotICAgIHJldHVybiBrQ29uZmlnQ2hhbmdlOwotICB9Ci0KLSAgQ0hFQ0soc2VsZWN0ZWRfcmFuZ2VfLT5HZXROZXh0QnVmZmVyKG91dF9idWZmZXIpKTsKLSAgV2FybklmVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcHNGb3J3YXJkKCpvdXRfYnVmZmVyKTsKLSAgbGFzdF9vdXRwdXRfYnVmZmVyX3RpbWVzdGFtcF8gPSAoKm91dF9idWZmZXIpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgcmV0dXJuIGtTdWNjZXNzOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6V2FybklmVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcHNGb3J3YXJkKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgbmV4dF9idWZmZXIpIHsKLSAgaWYgKCFqdXN0X2V4aGF1c3RlZF90cmFja19idWZmZXJfKSByZXR1cm47Ci0KLSAganVzdF9leGhhdXN0ZWRfdHJhY2tfYnVmZmVyXyA9IGZhbHNlOwotICBEQ0hFQ0sobmV4dF9idWZmZXItPmlzX2tleV9mcmFtZSgpKTsKLSAgRGVjb2RlVGltZXN0YW1wIG5leHRfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXAgPQotICAgICAgbmV4dF9idWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpOwotICBiYXNlOjpUaW1lRGVsdGEgZGVsdGEgPQotICAgICAgbmV4dF9vdXRwdXRfYnVmZmVyX3RpbWVzdGFtcCAtIGxhc3Rfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXBfOwotICBEQ0hFQ0tfR0UoZGVsdGEsIGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgaWYgKGRlbHRhID4gR2V0TWF4SW50ZXJidWZmZXJEaXN0YW5jZSgpKSB7Ci0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV90cmFja19idWZmZXJfZ2FwX3dhcm5pbmdfbG9nc18sCi0gICAgICAgICAgICAgICAgICAgICAga01heFRyYWNrQnVmZmVyR2FwV2FybmluZ0xvZ3MpCi0gICAgICAgIDw8ICJNZWRpYSBhcHBlbmQgdGhhdCBvdmVybGFwcGVkIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gY2F1c2VkIHRpbWUgIgotICAgICAgICAgICAiZ2FwIGluIHBsYXlpbmcgIgotICAgICAgICA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpIDw8ICIgc3RyZWFtIGJlY2F1c2UgdGhlIG5leHQga2V5ZnJhbWUgaXMgIgotICAgICAgICA8PCBkZWx0YS5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICAgIDw8ICJtcyBiZXlvbmQgbGFzdCBvdmVybGFwcGVkIGZyYW1lLiBNZWRpYSAiCi0gICAgICAgICAgICJtYXkgYXBwZWFyIHRlbXBvcmFyaWx5IGZyb3plbi4iOwotICB9Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBTb3VyY2VCdWZmZXJTdHJlYW06OkdldE5leHRCdWZmZXJUaW1lc3RhbXAoKSB7Ci0gIGlmICghdHJhY2tfYnVmZmVyXy5lbXB0eSgpKQotICAgIHJldHVybiB0cmFja19idWZmZXJfLmZyb250KCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotCi0gIGlmICghc2VsZWN0ZWRfcmFuZ2VfKSByZXR1cm4ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgRENIRUNLKHNlbGVjdGVkX3JhbmdlXy0+SGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkpOwotICByZXR1cm4gc2VsZWN0ZWRfcmFuZ2VfLT5HZXROZXh0VGltZXN0YW1wKCk7Ci19Ci0KLVNvdXJjZUJ1ZmZlclN0cmVhbTo6UmFuZ2VMaXN0OjppdGVyYXRvcgotU291cmNlQnVmZmVyU3RyZWFtOjpGaW5kRXhpc3RpbmdSYW5nZUZvcihEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wKSB7Ci0gIGZvciAoUmFuZ2VMaXN0OjppdGVyYXRvciBpdHIgPSByYW5nZXNfLmJlZ2luKCk7IGl0ciAhPSByYW5nZXNfLmVuZCgpOyArK2l0cikgewotICAgIGlmICgoKml0ciktPkJlbG9uZ3NUb1JhbmdlKHN0YXJ0X3RpbWVzdGFtcCkpIHJldHVybiBpdHI7Ci0gIH0KLSAgcmV0dXJuIHJhbmdlc18uZW5kKCk7Ci19Ci0KLVNvdXJjZUJ1ZmZlclN0cmVhbTo6UmFuZ2VMaXN0OjppdGVyYXRvciBTb3VyY2VCdWZmZXJTdHJlYW06OkFkZFRvUmFuZ2VzKAotICAgIFNvdXJjZUJ1ZmZlclJhbmdlKiBuZXdfcmFuZ2UpIHsKLSAgRGVjb2RlVGltZXN0YW1wIHN0YXJ0X3RpbWVzdGFtcCA9IG5ld19yYW5nZS0+R2V0U3RhcnRUaW1lc3RhbXAoKTsKLSAgUmFuZ2VMaXN0OjppdGVyYXRvciBpdHIgPSByYW5nZXNfLmVuZCgpOwotICBmb3IgKGl0ciA9IHJhbmdlc18uYmVnaW4oKTsgaXRyICE9IHJhbmdlc18uZW5kKCk7ICsraXRyKSB7Ci0gICAgaWYgKCgqaXRyKS0+R2V0U3RhcnRUaW1lc3RhbXAoKSA+IHN0YXJ0X3RpbWVzdGFtcCkgYnJlYWs7Ci0gIH0KLSAgcmV0dXJuIHJhbmdlc18uaW5zZXJ0KGl0ciwgbmV3X3JhbmdlKTsKLX0KLQotU291cmNlQnVmZmVyU3RyZWFtOjpSYW5nZUxpc3Q6Oml0ZXJhdG9yCi1Tb3VyY2VCdWZmZXJTdHJlYW06OkdldFNlbGVjdGVkUmFuZ2VJdHIoKSB7Ci0gIERDSEVDSyhzZWxlY3RlZF9yYW5nZV8pOwotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIGl0ciA9IHJhbmdlc18uZW5kKCk7Ci0gIGZvciAoaXRyID0gcmFuZ2VzXy5iZWdpbigpOyBpdHIgIT0gcmFuZ2VzXy5lbmQoKTsgKytpdHIpIHsKLSAgICBpZiAoKml0ciA9PSBzZWxlY3RlZF9yYW5nZV8pIGJyZWFrOwotICB9Ci0gIERDSEVDSyhpdHIgIT0gcmFuZ2VzXy5lbmQoKSk7Ci0gIHJldHVybiBpdHI7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpTZWVrQW5kU2V0U2VsZWN0ZWRSYW5nZSgKLSAgICBTb3VyY2VCdWZmZXJSYW5nZSogcmFuZ2UsIERlY29kZVRpbWVzdGFtcCBzZWVrX3RpbWVzdGFtcCkgewotICBpZiAocmFuZ2UpIHJhbmdlLT5TZWVrKHNlZWtfdGltZXN0YW1wKTsKLSAgU2V0U2VsZWN0ZWRSYW5nZShyYW5nZSk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpTZXRTZWxlY3RlZFJhbmdlKFNvdXJjZUJ1ZmZlclJhbmdlKiByYW5nZSkgewotICBEVkxPRygxKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiOiAiIDw8IHNlbGVjdGVkX3JhbmdlXwotICAgICAgICAgICA8PCAiICIgPDwgKHNlbGVjdGVkX3JhbmdlXyA/IFJhbmdlVG9TdHJpbmcoKnNlbGVjdGVkX3JhbmdlXykgOiAiIikKLSAgICAgICAgICAgPDwgIiAtPiAiIDw8IHJhbmdlIDw8ICIgIiA8PCAocmFuZ2UgPyBSYW5nZVRvU3RyaW5nKCpyYW5nZSkgOiAiIik7Ci0gIGlmIChzZWxlY3RlZF9yYW5nZV8pIHNlbGVjdGVkX3JhbmdlXy0+UmVzZXROZXh0QnVmZmVyUG9zaXRpb24oKTsKLSAgRENIRUNLKCFyYW5nZSB8fCByYW5nZS0+SGFzTmV4dEJ1ZmZlclBvc2l0aW9uKCkpOwotICBzZWxlY3RlZF9yYW5nZV8gPSByYW5nZTsKLX0KLQotUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gU291cmNlQnVmZmVyU3RyZWFtOjpHZXRCdWZmZXJlZFRpbWUoKSBjb25zdCB7Ci0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IHJhbmdlczsKLSAgZm9yIChSYW5nZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IHJhbmdlc18uYmVnaW4oKTsgaXRyICE9IHJhbmdlc18uZW5kKCk7Ci0gICAgICAgKytpdHIpIHsKLSAgICByYW5nZXMuQWRkKCgqaXRyKS0+R2V0U3RhcnRUaW1lc3RhbXAoKS5Ub1ByZXNlbnRhdGlvblRpbWUoKSwKLSAgICAgICAgICAgICAgICgqaXRyKS0+R2V0QnVmZmVyZWRFbmRUaW1lc3RhbXAoKS5Ub1ByZXNlbnRhdGlvblRpbWUoKSk7Ci0gIH0KLSAgcmV0dXJuIHJhbmdlczsKLX0KLQotYmFzZTo6VGltZURlbHRhIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpIGNvbnN0IHsKLSAgaWYgKHJhbmdlc18uZW1wdHkoKSkgcmV0dXJuIGJhc2U6OlRpbWVEZWx0YSgpOwotCi0gIC8vIFRPRE8od29sZW5ldHopOiBSZXBvcnQgYWN0dWFsIGhpZ2hlc3QgUFRTIGhlcmUsIG5vdCBEVFMgY2FzdCB0byBQVFMuIFNlZQotICAvLyBodHRwczovL2NyYnVnLmNvbS8zOTgxMzAuCi0gIHJldHVybiByYW5nZXNfLmJhY2soKS0+R2V0RW5kVGltZXN0YW1wKCkuVG9QcmVzZW50YXRpb25UaW1lKCk7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBTb3VyY2VCdWZmZXJTdHJlYW06OkdldEJ1ZmZlcmVkRHVyYXRpb24oKSBjb25zdCB7Ci0gIGlmIChyYW5nZXNfLmVtcHR5KCkpIHJldHVybiBiYXNlOjpUaW1lRGVsdGEoKTsKLQotICByZXR1cm4gcmFuZ2VzXy5iYWNrKCktPkdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkuVG9QcmVzZW50YXRpb25UaW1lKCk7Ci19Ci0KLXNpemVfdCBTb3VyY2VCdWZmZXJTdHJlYW06OkdldEJ1ZmZlcmVkU2l6ZSgpIGNvbnN0IHsKLSAgc2l6ZV90IHJhbmdlc19zaXplID0gMDsKLSAgZm9yIChSYW5nZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSByYW5nZXNfLmJlZ2luKCk7IGl0ZXIgIT0gcmFuZ2VzXy5lbmQoKTsKLSAgICAgICArK2l0ZXIpCi0gICAgcmFuZ2VzX3NpemUgKz0gKCppdGVyKS0+c2l6ZV9pbl9ieXRlcygpOwotICByZXR1cm4gcmFuZ2VzX3NpemU7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpNYXJrRW5kT2ZTdHJlYW0oKSB7Ci0gIERDSEVDSyghZW5kX29mX3N0cmVhbV8pOwotICBlbmRfb2Zfc3RyZWFtXyA9IHRydWU7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpVbm1hcmtFbmRPZlN0cmVhbSgpIHsKLSAgRENIRUNLKGVuZF9vZl9zdHJlYW1fKTsKLSAgZW5kX29mX3N0cmVhbV8gPSBmYWxzZTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OklzRW5kT2ZTdHJlYW1SZWFjaGVkKCkgY29uc3QgewotICBpZiAoIWVuZF9vZl9zdHJlYW1fIHx8ICF0cmFja19idWZmZXJfLmVtcHR5KCkpIHJldHVybiBmYWxzZTsKLQotICBpZiAocmFuZ2VzXy5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKLQotICBpZiAoc2Vla19wZW5kaW5nXykgewotICAgIGJhc2U6OlRpbWVEZWx0YSBsYXN0X3JhbmdlX2VuZF90aW1lID0KLSAgICAgICAgcmFuZ2VzXy5iYWNrKCktPkdldEJ1ZmZlcmVkRW5kVGltZXN0YW1wKCkuVG9QcmVzZW50YXRpb25UaW1lKCk7Ci0gICAgcmV0dXJuIHNlZWtfYnVmZmVyX3RpbWVzdGFtcF8gPj0gbGFzdF9yYW5nZV9lbmRfdGltZTsKLSAgfQotCi0gIGlmICghc2VsZWN0ZWRfcmFuZ2VfKSByZXR1cm4gdHJ1ZTsKLQotICByZXR1cm4gc2VsZWN0ZWRfcmFuZ2VfID09IHJhbmdlc18uYmFjaygpOwotfQotCi1jb25zdCBBdWRpb0RlY29kZXJDb25maWcmIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0Q3VycmVudEF1ZGlvRGVjb2RlckNvbmZpZygpIHsKLSAgaWYgKGNvbmZpZ19jaGFuZ2VfcGVuZGluZ18pIENvbXBsZXRlQ29uZmlnQ2hhbmdlKCk7Ci0gIHJldHVybiBhdWRpb19jb25maWdzX1tjdXJyZW50X2NvbmZpZ19pbmRleF9dOwotfQotCi1jb25zdCBWaWRlb0RlY29kZXJDb25maWcmIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0Q3VycmVudFZpZGVvRGVjb2RlckNvbmZpZygpIHsKLSAgaWYgKGNvbmZpZ19jaGFuZ2VfcGVuZGluZ18pIENvbXBsZXRlQ29uZmlnQ2hhbmdlKCk7Ci0gIHJldHVybiB2aWRlb19jb25maWdzX1tjdXJyZW50X2NvbmZpZ19pbmRleF9dOwotfQotCi1jb25zdCBUZXh0VHJhY2tDb25maWcmIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0Q3VycmVudFRleHRUcmFja0NvbmZpZygpIHsKLSAgcmV0dXJuIHRleHRfdHJhY2tfY29uZmlnXzsKLX0KLQotYmFzZTo6VGltZURlbHRhIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0TWF4SW50ZXJidWZmZXJEaXN0YW5jZSgpIGNvbnN0IHsKLSAgaWYgKG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV8gPT0ga05vVGltZXN0YW1wKQotICAgIHJldHVybiBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoa0RlZmF1bHRCdWZmZXJEdXJhdGlvbkluTXMpOwotICByZXR1cm4gbWF4X2ludGVyYnVmZmVyX2Rpc3RhbmNlXzsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OlVwZGF0ZUF1ZGlvQ29uZmlnKGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7Ci0gIERDSEVDSyghYXVkaW9fY29uZmlnc18uZW1wdHkoKSk7Ci0gIERDSEVDSyh2aWRlb19jb25maWdzXy5lbXB0eSgpKTsKLSAgRFZMT0coMykgPDwgIlVwZGF0ZUF1ZGlvQ29uZmlnLiI7Ci0KLSAgaWYgKGF1ZGlvX2NvbmZpZ3NfWzBdLmNvZGVjKCkgIT0gY29uZmlnLmNvZGVjKCkpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJBdWRpbyBjb2RlYyBjaGFuZ2VzIG5vdCBhbGxvd2VkLiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXcgY29uZmlnIG1hdGNoZXMgYW4gZXhpc3Rpbmcgb25lLgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvX2NvbmZpZ3NfLnNpemUoKTsgKytpKSB7Ci0gICAgaWYgKGNvbmZpZy5NYXRjaGVzKGF1ZGlvX2NvbmZpZ3NfW2ldKSkgewotICAgICAgYXBwZW5kX2NvbmZpZ19pbmRleF8gPSBpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLy8gTm8gbWF0Y2hlcyBmb3VuZCBzbyBsZXQncyBhZGQgdGhpcyBvbmUgdG8gdGhlIGxpc3QuCi0gIGFwcGVuZF9jb25maWdfaW5kZXhfID0gYXVkaW9fY29uZmlnc18uc2l6ZSgpOwotICBEVkxPRygyKSA8PCAiTmV3IGF1ZGlvIGNvbmZpZyAtIGluZGV4OiAiIDw8IGFwcGVuZF9jb25maWdfaW5kZXhfOwotICBhdWRpb19jb25maWdzXy5yZXNpemUoYXVkaW9fY29uZmlnc18uc2l6ZSgpICsgMSk7Ci0gIGF1ZGlvX2NvbmZpZ3NfW2FwcGVuZF9jb25maWdfaW5kZXhfXSA9IGNvbmZpZzsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpVcGRhdGVNZWRpYUJ1ZmZlck1lbWJlcnMoCi0gICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSAgRFZMT0coMykgPDwgIlVwZGF0ZU1lZGlhQnVmZmVyTWVtYmVycy4iOwotICByZXNvbHV0aW9uX3dpZHRoXyA9IGNvbmZpZy52aXNpYmxlX3JlY3QoKS5zaXplKCkud2lkdGgoKTsKLSAgcmVzb2x1dGlvbl9oZWlnaHRfID0gY29uZmlnLnZpc2libGVfcmVjdCgpLnNpemUoKS5oZWlnaHQoKTsKLSAgYml0c19wZXJfcGl4ZWxfID0gY29uZmlnLndlYm1fY29sb3JfbWV0YWRhdGEoKS5CaXRzUGVyQ2hhbm5lbDsKLSAgY29kZWNfID0gTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyhjb25maWcuY29kZWMoKSk7Ci0gIC8vIFRPRE86IFJlZHVjZSB0aGUgbWVtb3J5IGxpbWl0IHdoZW4gdGhlcmUgaXMgbm8gbW9yZSA0ayBzYW1wbGVzIGNhY2hlZC4KLSAgbWVtb3J5X2xpbWl0XyA9IHN0ZDo6bWF4KAotICAgICAgbWVtb3J5X2xpbWl0XywKLSAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KAotICAgICAgICAgIGNvZGVjXywgcmVzb2x1dGlvbl93aWR0aF8sIHJlc29sdXRpb25faGVpZ2h0XywgYml0c19wZXJfcGl4ZWxfKSkpOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclN0cmVhbTo6VXBkYXRlVmlkZW9Db25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSAgRENIRUNLKCF2aWRlb19jb25maWdzXy5lbXB0eSgpKTsKLSAgRENIRUNLKGF1ZGlvX2NvbmZpZ3NfLmVtcHR5KCkpOwotICBEVkxPRygzKSA8PCAiVXBkYXRlVmlkZW9Db25maWcuIjsKLQotICBpZiAodmlkZW9fY29uZmlnc19bMF0uY29kZWMoKSAhPSBjb25maWcuY29kZWMoKSkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIlZpZGVvIGNvZGVjIGNoYW5nZXMgbm90IGFsbG93ZWQuIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5ldyBjb25maWcgbWF0Y2hlcyBhbiBleGlzdGluZyBvbmUuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmlkZW9fY29uZmlnc18uc2l6ZSgpOyArK2kpIHsKLSAgICBpZiAoY29uZmlnLk1hdGNoZXModmlkZW9fY29uZmlnc19baV0pKSB7Ci0gICAgICBhcHBlbmRfY29uZmlnX2luZGV4XyA9IGk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBObyBtYXRjaGVzIGZvdW5kIHNvIGxldCdzIGFkZCB0aGlzIG9uZSB0byB0aGUgbGlzdC4KLSAgYXBwZW5kX2NvbmZpZ19pbmRleF8gPSB2aWRlb19jb25maWdzXy5zaXplKCk7Ci0gIERWTE9HKDIpIDw8ICJOZXcgdmlkZW8gY29uZmlnIC0gaW5kZXg6ICIgPDwgYXBwZW5kX2NvbmZpZ19pbmRleF87Ci0gIHZpZGVvX2NvbmZpZ3NfLnJlc2l6ZSh2aWRlb19jb25maWdzXy5zaXplKCkgKyAxKTsKLSAgdmlkZW9fY29uZmlnc19bYXBwZW5kX2NvbmZpZ19pbmRleF9dID0gY29uZmlnOwotCi0gIFVwZGF0ZU1lZGlhQnVmZmVyTWVtYmVycyhjb25maWcpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6Q29tcGxldGVDb25maWdDaGFuZ2UoKSB7Ci0gIGNvbmZpZ19jaGFuZ2VfcGVuZGluZ18gPSBmYWxzZTsKLQotICBpZiAocGVuZGluZ19idWZmZXJfLmdldCgpKSB7Ci0gICAgY3VycmVudF9jb25maWdfaW5kZXhfID0KLSAgICAgICAgcGVuZGluZ19idWZmZXJfLT5HZXRTcGxpY2VCdWZmZXJDb25maWdJZChzcGxpY2VfYnVmZmVyc19pbmRleF8pOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICghdHJhY2tfYnVmZmVyXy5lbXB0eSgpKSB7Ci0gICAgY3VycmVudF9jb25maWdfaW5kZXhfID0gdHJhY2tfYnVmZmVyXy5mcm9udCgpLT5HZXRTcGxpY2VCdWZmZXJDb25maWdJZCgwKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoc2VsZWN0ZWRfcmFuZ2VfICYmIHNlbGVjdGVkX3JhbmdlXy0+SGFzTmV4dEJ1ZmZlcigpKQotICAgIGN1cnJlbnRfY29uZmlnX2luZGV4XyA9IHNlbGVjdGVkX3JhbmdlXy0+R2V0TmV4dENvbmZpZ0lkKCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyU3RyZWFtOjpTZXRTZWxlY3RlZFJhbmdlSWZOZWVkZWQoCi0gICAgY29uc3QgRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgewotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKSA8PCAiKCIKLSAgICAgICAgICAgPDwgdGltZXN0YW1wLkluU2Vjb25kc0YoKSA8PCAiKSI7Ci0KLSAgaWYgKHNlbGVjdGVkX3JhbmdlXykgewotICAgIERDSEVDSyh0cmFja19idWZmZXJfLmVtcHR5KCkpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmICghdHJhY2tfYnVmZmVyXy5lbXB0eSgpKSB7Ci0gICAgRENIRUNLKCFzZWxlY3RlZF9yYW5nZV8pOwotICAgIHJldHVybjsKLSAgfQotCi0gIERlY29kZVRpbWVzdGFtcCBzdGFydF90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0KLSAgLy8gSWYgdGhlIG5leHQgYnVmZmVyIHRpbWVzdGFtcCBpcyBub3Qga25vd24gdGhlbiB1c2UgYSB0aW1lc3RhbXAganVzdCBhZnRlcgotICAvLyB0aGUgdGltZXN0YW1wIG9uIHRoZSBsYXN0IGJ1ZmZlciByZXR1cm5lZCBieSBHZXROZXh0QnVmZmVyKCkuCi0gIGlmIChzdGFydF90aW1lc3RhbXAgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICBpZiAobGFzdF9vdXRwdXRfYnVmZmVyX3RpbWVzdGFtcF8gPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHsKLSAgICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgICAgICA8PCAiIG5vIHByZXZpb3VzIG91dHB1dCB0aW1lc3RhbXAiOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXJ0X3RpbWVzdGFtcCA9Ci0gICAgICAgIGxhc3Rfb3V0cHV0X2J1ZmZlcl90aW1lc3RhbXBfICsgYmFzZTo6VGltZURlbHRhOjpGcm9tSW50ZXJuYWxWYWx1ZSgxKTsKLSAgfQotCi0gIERlY29kZVRpbWVzdGFtcCBzZWVrX3RpbWVzdGFtcCA9Ci0gICAgICBGaW5kTmV3U2VsZWN0ZWRSYW5nZVNlZWtUaW1lc3RhbXAoc3RhcnRfdGltZXN0YW1wKTsKLQotICAvLyBJZiB3ZSBkb24ndCBoYXZlIGJ1ZmZlcmVkIGRhdGEgdG8gc2VlayB0bywgdGhlbiByZXR1cm4uCi0gIGlmIChzZWVrX3RpbWVzdGFtcCA9PSBrTm9EZWNvZGVUaW1lc3RhbXAoKSkgewotICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgIiA8PCBHZXRTdHJlYW1UeXBlTmFtZSgpCi0gICAgICAgICAgICAgPDwgIiBjb3VsZG4ndCBmaW5kIG5ldyBzZWxlY3RlZCByYW5nZSBzZWVrIHRpbWVzdGFtcCI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgRENIRUNLKHRyYWNrX2J1ZmZlcl8uZW1wdHkoKSk7Ci0gIFNlZWtBbmRTZXRTZWxlY3RlZFJhbmdlKCpGaW5kRXhpc3RpbmdSYW5nZUZvcihzZWVrX3RpbWVzdGFtcCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWtfdGltZXN0YW1wKTsKLX0KLQotRGVjb2RlVGltZXN0YW1wIFNvdXJjZUJ1ZmZlclN0cmVhbTo6RmluZE5ld1NlbGVjdGVkUmFuZ2VTZWVrVGltZXN0YW1wKAotICAgIGNvbnN0IERlY29kZVRpbWVzdGFtcCBzdGFydF90aW1lc3RhbXApIHsKLSAgRENIRUNLKHN0YXJ0X3RpbWVzdGFtcCAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci0gIERDSEVDSyhzdGFydF90aW1lc3RhbXAgPj0gRGVjb2RlVGltZXN0YW1wKCkpOwotCi0gIFJhbmdlTGlzdDo6aXRlcmF0b3IgaXRyID0gcmFuZ2VzXy5iZWdpbigpOwotCi0gIC8vIFdoZW4gY2hlY2tpbmcgYSByYW5nZSB0byBzZWUgaWYgaXQgaGFzIG9yIGJlZ2lucyBzb29uIGVub3VnaCBhZnRlcgotICAvLyB8c3RhcnRfdGltZXN0YW1wfCwgdXNlIHRoZSBmdWRnZSByb29tIHRvIGRldGVybWluZSAic29vbiBlbm91Z2giLgotICBEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wX3BsdXNfZnVkZ2UgPQotICAgICAgc3RhcnRfdGltZXN0YW1wICsgQ29tcHV0ZUZ1ZGdlUm9vbShHZXRNYXhJbnRlcmJ1ZmZlckRpc3RhbmNlKCkpOwotCi0gIC8vIE11bHRpcGxlIHJhbmdlcyBjb3VsZCBiZSB3aXRoaW4gdGhlIGZ1ZGdlIHJvb20sIGJlY2F1c2UgdGhlIGZ1ZGdlIHJvb20gaXMKLSAgLy8gZHluYW1pYyBiYXNlZCBvbiBtYXggaW50ZXItYnVmZmVyIGRpc3RhbmNlIHNlZW4gc28gZmFyLiBPcHRpbWlzdGljYWxseQotICAvLyBjaGVjayB0aGUgZWFybGllc3Qgb25lcyBmaXJzdC4KLSAgZm9yICg7IGl0ciAhPSByYW5nZXNfLmVuZCgpOyArK2l0cikgewotICAgIERlY29kZVRpbWVzdGFtcCByYW5nZV9zdGFydCA9ICgqaXRyKS0+R2V0U3RhcnRUaW1lc3RhbXAoKTsKLSAgICBpZiAocmFuZ2Vfc3RhcnQgPj0gc3RhcnRfdGltZXN0YW1wX3BsdXNfZnVkZ2UpIGJyZWFrOwotICAgIGlmICgoKml0ciktPkdldEVuZFRpbWVzdGFtcCgpIDwgc3RhcnRfdGltZXN0YW1wKSBjb250aW51ZTsKLSAgICBEZWNvZGVUaW1lc3RhbXAgc2VhcmNoX3RpbWVzdGFtcCA9IHN0YXJ0X3RpbWVzdGFtcDsKLSAgICBpZiAoc3RhcnRfdGltZXN0YW1wIDwgcmFuZ2Vfc3RhcnQgJiYKLSAgICAgICAgc3RhcnRfdGltZXN0YW1wX3BsdXNfZnVkZ2UgPj0gcmFuZ2Vfc3RhcnQpIHsKLSAgICAgIHNlYXJjaF90aW1lc3RhbXAgPSByYW5nZV9zdGFydDsKLSAgICB9Ci0gICAgRGVjb2RlVGltZXN0YW1wIGtleWZyYW1lX3RpbWVzdGFtcCA9Ci0gICAgICAgICgqaXRyKS0+TmV4dEtleWZyYW1lVGltZXN0YW1wKHNlYXJjaF90aW1lc3RhbXApOwotICAgIGlmIChrZXlmcmFtZV90aW1lc3RhbXAgIT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIHJldHVybiBrZXlmcmFtZV90aW1lc3RhbXA7Ci0gIH0KLQotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiICIgPDwgR2V0U3RyZWFtVHlwZU5hbWUoKQotICAgICAgICAgICA8PCAiIG5vIGJ1ZmZlcmVkIGRhdGEgZm9yIGR0cz0iIDw8IHN0YXJ0X3RpbWVzdGFtcC5JblNlY29uZHNGKCk7Ci0gIHJldHVybiBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLX0KLQotRGVjb2RlVGltZXN0YW1wIFNvdXJjZUJ1ZmZlclN0cmVhbTo6RmluZEtleWZyYW1lQWZ0ZXJUaW1lc3RhbXAoCi0gICAgY29uc3QgRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCkgewotICBEQ0hFQ0sodGltZXN0YW1wICE9IGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLQotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIGl0ciA9IEZpbmRFeGlzdGluZ1JhbmdlRm9yKHRpbWVzdGFtcCk7Ci0KLSAgaWYgKGl0ciA9PSByYW5nZXNfLmVuZCgpKSByZXR1cm4ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgLy8gRmlyc3QgY2hlY2sgZm9yIGEga2V5ZnJhbWUgdGltZXN0YW1wID49IHx0aW1lc3RhbXB8Ci0gIC8vIGluIHRoZSBjdXJyZW50IHJhbmdlLgotICByZXR1cm4gKCppdHIpLT5OZXh0S2V5ZnJhbWVUaW1lc3RhbXAodGltZXN0YW1wKTsKLX0KLQotc3RkOjpzdHJpbmcgU291cmNlQnVmZmVyU3RyZWFtOjpHZXRTdHJlYW1UeXBlTmFtZSgpIGNvbnN0IHsKLSAgc3dpdGNoIChHZXRUeXBlKCkpIHsKLSAgICBjYXNlIGtBdWRpbzoKLSAgICAgIHJldHVybiAiQVVESU8iOwotICAgIGNhc2Uga1ZpZGVvOgotICAgICAgcmV0dXJuICJWSURFTyI7Ci0gICAgY2FzZSBrVGV4dDoKLSAgICAgIHJldHVybiAiVEVYVCI7Ci0gIH0KLSAgTk9UUkVBQ0hFRCgpOwotICByZXR1cm4gIiI7Ci19Ci0KLVNvdXJjZUJ1ZmZlclN0cmVhbTo6VHlwZSBTb3VyY2VCdWZmZXJTdHJlYW06OkdldFR5cGUoKSBjb25zdCB7Ci0gIGlmICghYXVkaW9fY29uZmlnc18uZW1wdHkoKSkgcmV0dXJuIGtBdWRpbzsKLSAgaWYgKCF2aWRlb19jb25maWdzXy5lbXB0eSgpKSByZXR1cm4ga1ZpZGVvOwotICBEQ0hFQ0tfTkUodGV4dF90cmFja19jb25maWdfLmtpbmQoKSwga1RleHROb25lKTsKLSAgcmV0dXJuIGtUZXh0OwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclN0cmVhbTo6RGVsZXRlQW5kUmVtb3ZlUmFuZ2UoUmFuZ2VMaXN0OjppdGVyYXRvciogaXRyKSB7Ci0gIERWTE9HKDEpIDw8IF9fZnVuY19fOwotCi0gIERDSEVDSygqaXRyICE9IHJhbmdlc18uZW5kKCkpOwotICBpZiAoKippdHIgPT0gc2VsZWN0ZWRfcmFuZ2VfKSB7Ci0gICAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiBkZWxldGluZyBzZWxlY3RlZCByYW5nZS4iOwotICAgIFNldFNlbGVjdGVkUmFuZ2UoTlVMTCk7Ci0gIH0KLQotICBpZiAoKml0ciA9PSByYW5nZV9mb3JfbmV4dF9hcHBlbmRfKSB7Ci0gICAgRFZMT0coMSkgPDwgX19mdW5jX18gPDwgIiBkZWxldGluZyByYW5nZV9mb3JfbmV4dF9hcHBlbmRfLiI7Ci0gICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyA9IHJhbmdlc18uZW5kKCk7Ci0gICAgUmVzZXRMYXN0QXBwZW5kZWRTdGF0ZSgpOwotICB9Ci0KLSAgZGVsZXRlICoqaXRyOwotICAqaXRyID0gcmFuZ2VzXy5lcmFzZSgqaXRyKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJTdHJlYW06OkdlbmVyYXRlU3BsaWNlRnJhbWUoY29uc3QgQnVmZmVyUXVldWUmIG5ld19idWZmZXJzKSB7Ci0gIERDSEVDSyghbmV3X2J1ZmZlcnMuZW1wdHkoKSk7Ci0KLSAgLy8gU3BsaWNlIGZyYW1lcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIGF1ZGlvLgotICBpZiAoR2V0VHlwZSgpICE9IGtBdWRpbykgcmV0dXJuOwotCi0gIC8vIEZpbmQgdGhlIG92ZXJsYXBwZWQgcmFuZ2UgKGlmIGFueSkuCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBzcGxpY2VfdGltZXN0YW1wID0gbmV3X2J1ZmZlcnMuZnJvbnQoKS0+dGltZXN0YW1wKCk7Ci0gIGNvbnN0IERlY29kZVRpbWVzdGFtcCBzcGxpY2VfZHRzID0KLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbVByZXNlbnRhdGlvblRpbWUoc3BsaWNlX3RpbWVzdGFtcCk7Ci0gIFJhbmdlTGlzdDo6aXRlcmF0b3IgcmFuZ2VfaXRyID0gRmluZEV4aXN0aW5nUmFuZ2VGb3Ioc3BsaWNlX2R0cyk7Ci0gIGlmIChyYW5nZV9pdHIgPT0gcmFuZ2VzXy5lbmQoKSkgcmV0dXJuOwotCi0gIGNvbnN0IERlY29kZVRpbWVzdGFtcCBtYXhfc3BsaWNlX2VuZF9kdHMgPQotICAgICAgc3BsaWNlX2R0cyArCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoa0Nyb3NzZmFkZUR1cmF0aW9uSW5NaWxsaXNlY29uZHMpOwotCi0gIC8vIEZpbmQgYWxsIGJ1ZmZlcnMgaW52b2x2ZWQgYmVmb3JlIHRoZSBzcGxpY2UgcG9pbnQuCi0gIEJ1ZmZlclF1ZXVlIHByZV9zcGxpY2VfYnVmZmVyczsKLSAgaWYgKCEoKnJhbmdlX2l0cikKLSAgICAgICAgICAgLT5HZXRCdWZmZXJzSW5SYW5nZShzcGxpY2VfZHRzLCBtYXhfc3BsaWNlX2VuZF9kdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZV9zcGxpY2VfYnVmZmVycykpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJZiB0aGVyZSBhcmUgZ2FwcyBpbiB0aGUgdGltZWxpbmUsIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGZpbmQgYnVmZmVycwotICAvLyBhZnRlciB0aGUgc3BsaWNlIHBvaW50IGJ1dCB3aXRoaW4gdGhlIHNwbGljZSByYW5nZS4gIEZvciBzaW1wbGljaXR5LCB3ZSBkbwotICAvLyBub3QgZ2VuZXJhdGUgc3BsaWNlIGZyYW1lcyBpbiB0aGlzIGNhc2UuCi0gIC8vCi0gIC8vIFdlIGFsc28gZG8gbm90IHdhbnQgdG8gZ2VuZXJhdGUgc3BsaWNlcyBpZiB0aGUgZmlyc3QgbmV3IGJ1ZmZlciByZXBsYWNlcyBhbgotICAvLyBleGlzdGluZyBidWZmZXIgZXhhY3RseS4KLSAgaWYgKHByZV9zcGxpY2VfYnVmZmVycy5mcm9udCgpLT50aW1lc3RhbXAoKSA+PSBzcGxpY2VfdGltZXN0YW1wKSB7Ci0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9zcGxpY2VfZ2VuZXJhdGlvbl93YXJuaW5nX2xvZ3NfLAotICAgICAgICAgICAgICAgICAgICAgIGtNYXhTcGxpY2VHZW5lcmF0aW9uV2FybmluZ0xvZ3MpCi0gICAgICAgIDw8ICJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogZmlyc3QgbmV3IGJ1ZmZlciBhdCAiCi0gICAgICAgIDw8IHNwbGljZV90aW1lc3RhbXAuSW5NaWNyb3NlY29uZHMoKQotICAgICAgICA8PCAidXMgYmVnaW5zIGF0IG9yIGJlZm9yZSBleGlzdGluZyBidWZmZXIgYXQgIgotICAgICAgICA8PCBwcmVfc3BsaWNlX2J1ZmZlcnMuZnJvbnQoKS0+dGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMuIjsKLSAgICBEVkxPRygxKSA8PCAiU2tpcHBpbmcgc3BsaWNlOiBvdmVybGFwcGVkIGJ1ZmZlcnMgYmVnaW4gYXQgb3IgYWZ0ZXIgdGhlICIKLSAgICAgICAgICAgICAgICAiZmlyc3QgbmV3IGJ1ZmZlci4iOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIElmIGFueSB8cHJlX3NwbGljZV9idWZmZXJzfCBhcmUgYWxyZWFkeSBzcGxpY2VzIG9yIHByZXJvbGwsIGRvIG5vdCBnZW5lcmF0ZQotICAvLyBhIHNwbGljZS4KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVfc3BsaWNlX2J1ZmZlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICBjb25zdCBCdWZmZXJRdWV1ZSYgb3JpZ2luYWxfc3BsaWNlX2J1ZmZlcnMgPQotICAgICAgICBwcmVfc3BsaWNlX2J1ZmZlcnNbaV0tPnNwbGljZV9idWZmZXJzKCk7Ci0gICAgaWYgKCFvcmlnaW5hbF9zcGxpY2VfYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX3NwbGljZV9nZW5lcmF0aW9uX3dhcm5pbmdfbG9nc18sCi0gICAgICAgICAgICAgICAgICAgICAgICBrTWF4U3BsaWNlR2VuZXJhdGlvbldhcm5pbmdMb2dzKQotICAgICAgICAgIDw8ICJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogb3ZlcmxhcHBlZCBidWZmZXJzIGF0ICIKLSAgICAgICAgICA8PCBwcmVfc3BsaWNlX2J1ZmZlcnNbaV0tPnRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkKLSAgICAgICAgICA8PCAidXMgYXJlIGluIGEgcHJldmlvdXNseSBidWZmZXJlZCBzcGxpY2UuIjsKLSAgICAgIERWTE9HKDEpIDw8ICJDYW4ndCBnZW5lcmF0ZSBzcGxpY2U6IG92ZXJsYXBwZWQgYnVmZmVycyBjb250YWluIGEgIgotICAgICAgICAgICAgICAgICAgInByZS1leGlzdGluZyBzcGxpY2UuIjsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocHJlX3NwbGljZV9idWZmZXJzW2ldLT5wcmVyb2xsX2J1ZmZlcigpLmdldCgpKSB7Ci0gICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX3NwbGljZV9nZW5lcmF0aW9uX3dhcm5pbmdfbG9nc18sCi0gICAgICAgICAgICAgICAgICAgICAgICBrTWF4U3BsaWNlR2VuZXJhdGlvbldhcm5pbmdMb2dzKQotICAgICAgICAgIDw8ICJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogb3ZlcmxhcHBlZCBidWZmZXJzIGF0ICIKLSAgICAgICAgICA8PCBwcmVfc3BsaWNlX2J1ZmZlcnNbaV0tPnRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkKLSAgICAgICAgICA8PCAidXMgY29udGFpbiBwcmVyb2xsLiI7Ci0gICAgICBEVkxPRygxKSA8PCAiQ2FuJ3QgZ2VuZXJhdGUgc3BsaWNlOiBvdmVybGFwcGVkIGJ1ZmZlcnMgY29udGFpbiBwcmVyb2xsLiI7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgLy8gRG9uJ3QgZ2VuZXJhdGUgc3BsaWNlIGZyYW1lcyB3aGljaCByZXByZXNlbnQgbGVzcyB0aGFuIGEgbWlsbGlzZWNvbmQgKHdoaWNoCi0gIC8vIGlzIGZyZXF1ZW50bHkgdGhlIGV4dGVudCBvZiB0aW1lc3RhbXAgcmVzb2x1dGlvbiBmb3IgcG9vcmx5IGVuY29kZWQgbWVkaWEpCi0gIC8vIG9yIGxlc3MgdGhhbiB0d28gc2FtcGxlcyAobmVlZCBhdCBsZWFzdCB0d28gdG8gY3Jvc3NmYWRlKS4KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIHNwbGljZV9kdXJhdGlvbiA9Ci0gICAgICBwcmVfc3BsaWNlX2J1ZmZlcnMuYmFjaygpLT50aW1lc3RhbXAoKSArCi0gICAgICBwcmVfc3BsaWNlX2J1ZmZlcnMuYmFjaygpLT5kdXJhdGlvbigpIC0gc3BsaWNlX3RpbWVzdGFtcDsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIG1pbmltdW1fc3BsaWNlX2R1cmF0aW9uID0gc3RkOjptYXgoCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMSksCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzRCgKLSAgICAgICAgICAyLjAgLyBhdWRpb19jb25maWdzX1thcHBlbmRfY29uZmlnX2luZGV4X10uc2FtcGxlc19wZXJfc2Vjb25kKCkpKTsKLSAgaWYgKHNwbGljZV9kdXJhdGlvbiA8IG1pbmltdW1fc3BsaWNlX2R1cmF0aW9uKSB7Ci0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9zcGxpY2VfZ2VuZXJhdGlvbl93YXJuaW5nX2xvZ3NfLAotICAgICAgICAgICAgICAgICAgICAgIGtNYXhTcGxpY2VHZW5lcmF0aW9uV2FybmluZ0xvZ3MpCi0gICAgICAgIDw8ICJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogbm90IGVub3VnaCBzYW1wbGVzIGZvciBzcGxpY2luZyAiCi0gICAgICAgICAgICJuZXcgYnVmZmVyIGF0ICIKLSAgICAgICAgPDwgc3BsaWNlX3RpbWVzdGFtcC5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cy4gSGF2ZSAiCi0gICAgICAgIDw8IHNwbGljZV9kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cywgYnV0IG5lZWQgIgotICAgICAgICA8PCBtaW5pbXVtX3NwbGljZV9kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cy4iOwotICAgIERWTE9HKDEpIDw8ICJDYW4ndCBnZW5lcmF0ZSBzcGxpY2U6IG5vdCBlbm91Z2ggc2FtcGxlcyBmb3IgY3Jvc3NmYWRlOyBoYXZlICIKLSAgICAgICAgICAgICA8PCBzcGxpY2VfZHVyYXRpb24uSW5NaWNyb3NlY29uZHMoKSA8PCAidXMsIGJ1dCBuZWVkICIKLSAgICAgICAgICAgICA8PCBtaW5pbXVtX3NwbGljZV9kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cy4iOwotICAgIHJldHVybjsKLSAgfQotCi0gIERWTE9HKDEpIDw8ICJHZW5lcmF0aW5nIHNwbGljZSBmcmFtZSBAICIgPDwgbmV3X2J1ZmZlcnMuZnJvbnQoKS0+dGltZXN0YW1wKCkKLSAgICAgICAgICAgPDwgIiwgc3BsaWNlIGR1cmF0aW9uOiAiIDw8IHNwbGljZV9kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgIDw8ICIgdXMiOwotICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX3NwbGljZV9nZW5lcmF0aW9uX3N1Y2Nlc3NfbG9nc18sCi0gICAgICAgICAgICAgICAgICAgIGtNYXhTcGxpY2VHZW5lcmF0aW9uU3VjY2Vzc0xvZ3MpCi0gICAgICA8PCAiR2VuZXJhdGVkIHNwbGljZSBvZiBvdmVybGFwIGR1cmF0aW9uICIKLSAgICAgIDw8IHNwbGljZV9kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cyBpbnRvIG5ldyBidWZmZXIgYXQgIgotICAgICAgPDwgc3BsaWNlX3RpbWVzdGFtcC5Jbk1pY3Jvc2Vjb25kcygpIDw8ICJ1cy4iOwotICBuZXdfYnVmZmVycy5mcm9udCgpLT5Db252ZXJ0VG9TcGxpY2VCdWZmZXIocHJlX3NwbGljZV9idWZmZXJzKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJTdHJlYW06OlNldFBlbmRpbmdCdWZmZXIoCi0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+KiBvdXRfYnVmZmVyKSB7Ci0gIERDSEVDSyhvdXRfYnVmZmVyLT5nZXQoKSk7Ci0gIERDSEVDSyghcGVuZGluZ19idWZmZXJfLmdldCgpKTsKLQotICBjb25zdCBib29sIGhhdmVfc3BsaWNlX2J1ZmZlcnMgPSAhKCpvdXRfYnVmZmVyKS0+c3BsaWNlX2J1ZmZlcnMoKS5lbXB0eSgpOwotICBjb25zdCBib29sIGhhdmVfcHJlcm9sbF9idWZmZXIgPSAhISgqb3V0X2J1ZmZlciktPnByZXJvbGxfYnVmZmVyKCkuZ2V0KCk7Ci0KLSAgaWYgKCFoYXZlX3NwbGljZV9idWZmZXJzICYmICFoYXZlX3ByZXJvbGxfYnVmZmVyKSByZXR1cm4gZmFsc2U7Ci0KLSAgRENIRUNLX05FKGhhdmVfc3BsaWNlX2J1ZmZlcnMsIGhhdmVfcHJlcm9sbF9idWZmZXIpOwotICBzcGxpY2VfYnVmZmVyc19pbmRleF8gPSAwOwotICBwZW5kaW5nX2J1ZmZlcl8uc3dhcCgqb3V0X2J1ZmZlcik7Ci0gIHBlbmRpbmdfYnVmZmVyc19jb21wbGV0ZV8gPSBmYWxzZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBTb3VyY2VCdWZmZXJTdHJlYW06OkdldEJ1ZmZlcmVkRHVyYXRpb25Gb3JHYXJiYWdlQ29sbGVjdGlvbigpCi0gICAgY29uc3QgewotICBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb247Ci0gIGZvciAoYXV0byByYW5nZSA6IHJhbmdlc18pIHsKLSAgICBkdXJhdGlvbiArPSByYW5nZS0+R2V0RW5kVGltZXN0YW1wKCkgLSByYW5nZS0+R2V0U3RhcnRUaW1lc3RhbXAoKTsKLSAgfQotICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWEyMDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUyMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBTb3VyY2VCdWZmZXJTdHJlYW0gaXMgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHN0b3JlcyBtZWRpYSBCdWZmZXJzIGluIHJhbmdlcy4KLS8vIEJ1ZmZlcnMgY2FuIGJlIGFwcGVuZGVkIG91dCBvZiBwcmVzZW50YXRpb24gb3JkZXIuIEJ1ZmZlcnMgYXJlIHJldHJpZXZlZCBieQotLy8gc2Vla2luZyB0byB0aGUgZGVzaXJlZCBzdGFydCBwb2ludCBhbmQgY2FsbGluZyBHZXROZXh0QnVmZmVyKCkuIEJ1ZmZlcnMgYXJlCi0vLyByZXR1cm5lZCBpbiBzZXF1ZW50aWFsIHByZXNlbnRhdGlvbiBvcmRlci4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19TT1VSQ0VfQlVGRkVSX1NUUkVBTV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19TT1VSQ0VfQlVGRkVSX1NUUkVBTV9IXwotCi0jaW5jbHVkZSA8ZGVxdWU+Ci0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgU291cmNlQnVmZmVyUmFuZ2U7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgaW50cm9kdWNlZCB0byBob2xkIGFuZCBpbml0aWFsaXplIHRoZSBtZW1iZXIgdmFyaWFibGVzIGZvcgotLy8gU291cmNlQnVmZmVyU3RyZWFtLiAgU291cmNlQnVmZmVyU3RyZWFtIGluaGVyaXRzIGZyb20gdGhpcyBjbGFzcyB0byBnYWluCi0vLyBhY2Nlc3MgdG8gdGhlc2UgbWVtYmVyIHZhcmlhYmxlcy4KLS8vIEluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHRoZXNlIG1lbWJlciB2YXJpYWJsZXMgYmVsb25nIHRvIFNvdXJjZUJ1ZmZlclN0cmVhbQotLy8gYW5kIGFyZSBpbml0aWFsaXplZCBpbnNpZGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9uLCB3aGljaCBpcyBhIEMrKzB4IGZlYXR1cmUuCi0vLyBUbyBtb3ZlIHRoZXNlIG1lbWJlciB2YXJpYWJsZXMgaW50byBhIHNlcGFyYXRlIGNsYXNzIGNhbiBlbnN1cmUgdGhlCi0vLyBpbml0aWFsaXphdGlvbiBzZW1hbnRpY3MgYXJlIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBjb2RlLgotY2xhc3MgU291cmNlQnVmZmVyU3RyZWFtU3RhdGUgewotIHByb3RlY3RlZDoKLSAgdHlwZWRlZiBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlIEJ1ZmZlclF1ZXVlOwotICB0eXBlZGVmIHN0ZDo6bGlzdDxTb3VyY2VCdWZmZXJSYW5nZSo+IFJhbmdlTGlzdDsKLQotICBleHBsaWNpdCBTb3VyY2VCdWZmZXJTdHJlYW1TdGF0ZShib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCkKLSAgICAgIDogc3BsaWNlX2ZyYW1lc19lbmFibGVkXyhzcGxpY2VfZnJhbWVzX2VuYWJsZWQpIHsKLSAgICBjdXJyZW50X2NvbmZpZ19pbmRleF8gPSAwOwotICAgIGFwcGVuZF9jb25maWdfaW5kZXhfID0gMDsKLSAgICBzZWVrX3BlbmRpbmdfID0gZmFsc2U7Ci0gICAgZW5kX29mX3N0cmVhbV8gPSBmYWxzZTsKLSAgICBzZWxlY3RlZF9yYW5nZV8gPSBOVUxMOwotICAgIGp1c3RfZXhoYXVzdGVkX3RyYWNrX2J1ZmZlcl8gPSBmYWxzZTsKLSAgICBuZXdfY29kZWRfZnJhbWVfZ3JvdXBfID0gZmFsc2U7Ci0gICAgbGFzdF9hcHBlbmRlZF9idWZmZXJfdGltZXN0YW1wXyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotICAgIGxhc3RfYXBwZW5kZWRfYnVmZmVyX2R1cmF0aW9uXyA9IGtOb1RpbWVzdGFtcDsKLSAgICBsYXN0X2FwcGVuZGVkX2J1ZmZlcl9pc19rZXlmcmFtZV8gPSBmYWxzZTsKLSAgICBjb25maWdfY2hhbmdlX3BlbmRpbmdfID0gZmFsc2U7Ci0gICAgc3BsaWNlX2J1ZmZlcnNfaW5kZXhfID0gMDsKLSAgICBwZW5kaW5nX2J1ZmZlcnNfY29tcGxldGVfID0gZmFsc2U7Ci0gICAgbnVtX3NwbGljZV9nZW5lcmF0aW9uX3dhcm5pbmdfbG9nc18gPSAwOwotICAgIG51bV9zcGxpY2VfZ2VuZXJhdGlvbl9zdWNjZXNzX2xvZ3NfID0gMDsKLSAgICBudW1fdHJhY2tfYnVmZmVyX2dhcF93YXJuaW5nX2xvZ3NfID0gMDsKLSAgICBudW1fZ2FyYmFnZV9jb2xsZWN0X2FsZ29yaXRobV9sb2dzXyA9IDA7Ci0gICAgbnVtX3N0cmFuZ2Vfc2FtZV90aW1lc3RhbXBzX2xvZ3NfID0gMDsKLSAgfQotCi0gIC8vIExpc3Qgb2YgZGlzam9pbnQgYnVmZmVyZWQgcmFuZ2VzLCBvcmRlcmVkIGJ5IHN0YXJ0IHRpbWUuCi0gIFJhbmdlTGlzdCByYW5nZXNfOwotCi0gIC8vIEluZGljYXRlcyB3aGljaCBkZWNvZGVyIGNvbmZpZyBpcyBiZWluZyB1c2VkIGJ5IHRoZSBkZWNvZGVyLgotICAvLyBHZXROZXh0QnVmZmVyKCkgaXMgb25seSBhbGxvd3MgdG8gcmV0dXJuIGJ1ZmZlcnMgdGhhdCBoYXZlIGEKLSAgLy8gY29uZmlnIElEIHRoYXQgbWF0Y2hlcyB0aGlzIGluZGV4LiBJZiB0aGVyZSBpcyBhIG1pc21hdGNoIHRoZW4KLSAgLy8gaXQgbXVzdCBzaWduYWwgdGhhdCBhIGNvbmZpZyBjaGFuZ2UgaXMgbmVlZGVkLgotICBpbnQgY3VycmVudF9jb25maWdfaW5kZXhfOwotCi0gIC8vIEluZGljYXRlcyB3aGljaCBkZWNvZGVyIGNvbmZpZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgYnVmZmVycwotICAvLyBiZWluZyBhcHBlbmRlZC4gRWFjaCBuZXcgYnVmZmVyIGFwcGVuZGVkIGhhcyBpdHMgY29uZmlnIElEIHNldAotICAvLyB0byB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZC4KLSAgaW50IGFwcGVuZF9jb25maWdfaW5kZXhfOwotCi0gIC8vIEhvbGRzIHRoZSBhdWRpby92aWRlbyBjb25maWdzIGZvciB0aGlzIHN0cmVhbS4gfGN1cnJlbnRfY29uZmlnX2luZGV4X3wKLSAgLy8gYW5kIHxhcHBlbmRfY29uZmlnX2luZGV4X3wgcmVwcmVzZW50IGluZGV4ZXMgaW50byBvbmUgb2YgdGhlc2UgdmVjdG9ycy4KLSAgc3RkOjp2ZWN0b3I8QXVkaW9EZWNvZGVyQ29uZmlnPiBhdWRpb19jb25maWdzXzsKLSAgc3RkOjp2ZWN0b3I8VmlkZW9EZWNvZGVyQ29uZmlnPiB2aWRlb19jb25maWdzXzsKLQotICAvLyBUcnVlIGlmIG1vcmUgZGF0YSBuZWVkcyB0byBiZSBhcHBlbmRlZCBiZWZvcmUgdGhlIFNlZWsoKSBjYW4gY29tcGxldGUsCi0gIC8vIGZhbHNlIGlmIG5vIFNlZWsoKSBoYXMgYmVlbiByZXF1ZXN0ZWQgb3IgdGhlIFNlZWsoKSBpcyBjb21wbGV0ZWQuCi0gIGJvb2wgc2Vla19wZW5kaW5nXzsKLQotICAvLyBUaGUgdGltZXN0YW1wIG9mIHRoZSBrZXlmcmFtZSByaWdodCBiZWZvcmUgdGhlIHNlZWsgdGltZXN0YW1wLgotICBiYXNlOjpUaW1lRGVsdGEgc2Vla19rZXlmcmFtZV90aW1lc3RhbXBfOwotCi0gIC8vIFRydWUgaWYgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGhhcyBiZWVuIHNpZ25hbGxlZC4KLSAgYm9vbCBlbmRfb2Zfc3RyZWFtXzsKLQotICAvLyBQb2ludGVyIHRvIHRoZSBzZWVrZWQtdG8gUmFuZ2UuIFRoaXMgaXMgdGhlIHJhbmdlIGZyb20gd2hpY2gKLSAgLy8gR2V0TmV4dEJ1ZmZlcigpIGNhbGxzIGFyZSBmdWxmaWxsZWQgYWZ0ZXIgdGhlIHx0cmFja19idWZmZXJffCBoYXMgYmVlbgotICAvLyBlbXB0aWVkLgotICBTb3VyY2VCdWZmZXJSYW5nZSogc2VsZWN0ZWRfcmFuZ2VfOwotCi0gIC8vIFF1ZXVlIG9mIHRoZSBuZXh0IGJ1ZmZlcnMgdG8gYmUgcmV0dXJuZWQgZnJvbSBjYWxscyB0byBHZXROZXh0QnVmZmVyKCkuIElmCi0gIC8vIHx0cmFja19idWZmZXJffCBpcyBlbXB0eSwgcmV0dXJuIGJ1ZmZlcnMgZnJvbSB8c2VsZWN0ZWRfcmFuZ2VffC4KLSAgQnVmZmVyUXVldWUgdHJhY2tfYnVmZmVyXzsKLQotICAvLyBJZiB0aGVyZSBoYXMgYmVlbiBubyBpbnRlcnZlbmluZyBTZWVrLCB0aGlzIHdpbGwgYmUgdHJ1ZSBpZiB0aGUgbGFzdAotICAvLyBlbWl0dGVkIGJ1ZmZlciBlbXB0aWVkIHx0cmFja19idWZmZXJffC4KLSAgYm9vbCBqdXN0X2V4aGF1c3RlZF90cmFja19idWZmZXJfOwotCi0gIC8vIFRydWUgd2hlbiB0aGUgbmV4dCBjYWxsIHRvIEFwcGVuZCgpIGJlZ2lucyBhIG5ldyBjb2RlZCBmcmFtZSBncm91cC4KLSAgLy8gVE9ETyh3b2xlbmV0eik6IFNpbXBsaWZ5IGJ5IHBhc3NpbmcgdGhpcyBmbGFnIGludG8gQXBwZW5kKCkuCi0gIGJvb2wgbmV3X2NvZGVkX2ZyYW1lX2dyb3VwXzsKLQotICAvLyBUaGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IGJ1ZmZlciBhcHBlbmRlZCB0byB0aGUgY29kZWQgZnJhbWUgZ3JvdXAsIHNldCB0bwotICAvLyBrTm9EZWNvZGVUaW1lc3RhbXAoKSBpZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBncm91cC4KLSAgRGVjb2RlVGltZXN0YW1wIGxhc3RfYXBwZW5kZWRfYnVmZmVyX3RpbWVzdGFtcF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBsYXN0X2FwcGVuZGVkX2J1ZmZlcl9kdXJhdGlvbl87Ci0gIGJvb2wgbGFzdF9hcHBlbmRlZF9idWZmZXJfaXNfa2V5ZnJhbWVfOwotCi0gIC8vIEluZGljYXRlcyB0aGF0IGEga0NvbmZpZ0NoYW5nZWQgc3RhdHVzIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IEdldE5leHRCdWZmZXIoKQotICAvLyBhbmQgR2V0Q3VycmVudFhYWERlY29kZXJDb25maWcoKSBtdXN0IGJlIGNhbGxlZCB0byB1cGRhdGUgdGhlIGN1cnJlbnQKLSAgLy8gY29uZmlnLiBHZXROZXh0QnVmZmVyKCkgbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIHVudGlsCi0gIC8vIEdldEN1cnJlbnRYWFhEZWNvZGVyQ29uZmlnKCkgaGFzIGJlZW4gY2FsbGVkLgotICBib29sIGNvbmZpZ19jaGFuZ2VfcGVuZGluZ187Ci0KLSAgLy8gVXNlZCBieSBIYW5kbGVOZXh0QnVmZmVyV2l0aFNwbGljZSgpIG9yIEhhbmRsZU5leHRCdWZmZXJXaXRoUHJlcm9sbCgpIHdoZW4KLSAgLy8gYSBzcGxpY2UgZnJhbWUgYnVmZmVyIG9yIGJ1ZmZlciB3aXRoIHByZXJvbGwgaXMgcmV0dXJuZWQgZnJvbQotICAvLyBHZXROZXh0QnVmZmVySW50ZXJuYWwoKS4KLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IHBlbmRpbmdfYnVmZmVyXzsKLQotICAvLyBJbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIHNwbGljZSBidWZmZXJzIGluIHxzcGxpY2VfYnVmZmVyX3wgc2hvdWxkIGJlCi0gIC8vIGhhbmRsZWQgb3V0IG5leHQuCi0gIHNpemVfdCBzcGxpY2VfYnVmZmVyc19pbmRleF87Ci0KLSAgLy8gSW5kaWNhdGVzIHRoYXQgYWxsIGJ1ZmZlcnMgYmVmb3JlIHxwZW5kaW5nX2J1ZmZlcl98IGhhdmUgYmVlbiBoYW5kZWQgb3V0LgotICBib29sIHBlbmRpbmdfYnVmZmVyc19jb21wbGV0ZV87Ci0KLSAgLy8gSW5kaWNhdGVzIHRoYXQgc3BsaWNlIGZyYW1lIGdlbmVyYXRpb24gaXMgZW5hYmxlZC4KLSAgY29uc3QgYm9vbCBzcGxpY2VfZnJhbWVzX2VuYWJsZWRfOwotCi0gIC8vIFRvIHByZXZlbnQgbG9nIHNwYW0sIGNvdW50IHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgYW5kIHN1Y2Nlc3NlcyBsb2dnZWQuCi0gIGludCBudW1fc3BsaWNlX2dlbmVyYXRpb25fd2FybmluZ19sb2dzXzsKLSAgaW50IG51bV9zcGxpY2VfZ2VuZXJhdGlvbl9zdWNjZXNzX2xvZ3NfOwotICBpbnQgbnVtX3RyYWNrX2J1ZmZlcl9nYXBfd2FybmluZ19sb2dzXzsKLSAgaW50IG51bV9nYXJiYWdlX2NvbGxlY3RfYWxnb3JpdGhtX2xvZ3NfOwotICBpbnQgbnVtX3N0cmFuZ2Vfc2FtZV90aW1lc3RhbXBzX2xvZ3NfOwotfTsKLQotLy8gU2VlIGZpbGUtbGV2ZWwgY29tbWVudCBmb3IgY29tcGxldGUgZGVzY3JpcHRpb24uCi1jbGFzcyBNRURJQV9FWFBPUlQgU291cmNlQnVmZmVyU3RyZWFtIDogcHJpdmF0ZSBTb3VyY2VCdWZmZXJTdHJlYW1TdGF0ZSB7Ci0gcHVibGljOgotICB1c2luZyBTb3VyY2VCdWZmZXJTdHJlYW1TdGF0ZTo6QnVmZmVyUXVldWU7Ci0gIHR5cGVkZWYgU291cmNlQnVmZmVyU3RyZWFtU3RhdGU6OlJhbmdlTGlzdCBSYW5nZUxpc3Q7Ci0KLSAgLy8gU3RhdHVzIHJldHVybmVkIGJ5IEdldE5leHRCdWZmZXIoKS4KLSAgLy8ga1N1Y2Nlc3M6IEluZGljYXRlcyB0aGF0IHRoZSBuZXh0IGJ1ZmZlciB3YXMgcmV0dXJuZWQuCi0gIC8vIGtOZWVkQnVmZmVyOiBJbmRpY2F0ZXMgdGhhdCB3ZSBuZWVkIG1vcmUgZGF0YSBiZWZvcmUgYSBidWZmZXIgY2FuIGJlCi0gIC8vICAgICAgICAgICAgICByZXR1cm5lZC4KLSAgLy8ga0NvbmZpZ0NoYW5nZTogSW5kaWNhdGVzIHRoYXQgdGhlIG5leHQgYnVmZmVyIHJlcXVpcmVzIGEgY29uZmlnIGNoYW5nZS4KLSAgZW51bSBTdGF0dXMgeyBrU3VjY2Vzcywga05lZWRCdWZmZXIsIGtDb25maWdDaGFuZ2UsIGtFbmRPZlN0cmVhbSB9OwotCi0gIGVudW0gVHlwZSB7IGtBdWRpbywga1ZpZGVvLCBrVGV4dCB9OwotCi0gIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCk7Ci0gIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICAgICAgICBib29sIHNwbGljZV9mcmFtZXNfZW5hYmxlZCk7Ci0gIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBUZXh0VHJhY2tDb25maWcmIHRleHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3BsaWNlX2ZyYW1lc19lbmFibGVkKTsKLQotICB+U291cmNlQnVmZmVyU3RyZWFtKCk7Ci0KLSAgLy8gU2lnbmFscyB0aGF0IHRoZSBuZXh0IGJ1ZmZlcnMgYXBwZW5kZWQgYXJlIHBhcnQgb2YgYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAKLSAgLy8gc3RhcnRpbmcgYXQgfGNvZGVkX2ZyYW1lX2dyb3VwX3N0YXJ0X3RpbWV8LgotICAvLyBUT0RPKGFjb2x3ZWxsL3dvbGVuZXR6KTogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHByZXNlbnRhdGlvbgotICAvLyB0aW1lc3RhbXAuIFNlZSBodHRwOi8vY3JidWcuY29tLzQwMjUwMgotICB2b2lkIE9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cChEZWNvZGVUaW1lc3RhbXAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZSk7Ci0KLSAgLy8gQWRkIHRoZSB8YnVmZmVyc3wgdG8gdGhlIFNvdXJjZUJ1ZmZlclN0cmVhbS4gQnVmZmVycyB3aXRoaW4gdGhlIHF1ZXVlIGFyZQotICAvLyBleHBlY3RlZCB0byBiZSBpbiBvcmRlciwgYnV0IG11bHRpcGxlIGNhbGxzIHRvIEFwcGVuZCgpIG1heSBhZGQgYnVmZmVycyBvdXQKLSAgLy8gb2Ygb3JkZXIgb3Igb3ZlcmxhcHBpbmcuIEFzc3VtZXMgYWxsIGJ1ZmZlcnMgd2l0aGluIHxidWZmZXJzfCBhcmUgaW4KLSAgLy8gcHJlc2VudGF0aW9uIG9yZGVyIGFuZCBhcmUgbm9uLW92ZXJsYXBwaW5nLgotICAvLyBSZXR1cm5zIHRydWUgaWYgQXBwZW5kKCkgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIHxidWZmZXJzfCBhcmUgbm90IGFkZGVkLgotICBib29sIEFwcGVuZChjb25zdCBCdWZmZXJRdWV1ZSYgYnVmZmVycyk7Ci0KLSAgLy8gUmVtb3ZlcyBidWZmZXJzIGJldHdlZW4gfHN0YXJ0fCBhbmQgfGVuZHwgYWNjb3JkaW5nIHRvIHRoZSBzdGVwcwotICAvLyBpbiB0aGUgIkNvZGVkIEZyYW1lIFJlbW92YWwgQWxnb3JpdGhtIiBpbiB0aGUgTWVkaWEgU291cmNlCi0gIC8vIEV4dGVuc2lvbnMgU3BlYy4KLSAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL2RlZmF1bHQvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1yZW1vdmFsCi0gIC8vCi0gIC8vIHxkdXJhdGlvbnwgaXMgdGhlIGN1cnJlbnQgZHVyYXRpb24gb2YgdGhlIHByZXNlbnRhdGlvbi4gSXQgaXMKLSAgLy8gcmVxdWlyZWQgYnkgdGhlIGNvbXB1dGF0aW9uIG91dGxpbmVkIGluIHRoZSBzcGVjLgotICB2b2lkIFJlbW92ZShiYXNlOjpUaW1lRGVsdGEgc3RhcnQsIGJhc2U6OlRpbWVEZWx0YSBlbmQsCi0gICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbik7Ci0KLSAgLy8gRnJlZXMgdXAgc3BhY2UgaWYgdGhlIFNvdXJjZUJ1ZmZlclN0cmVhbSBpcyB0YWtpbmcgdXAgdG9vIG11Y2ggbWVtb3J5LgotICAvLyB8bWVkaWFfdGltZXwgaXMgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbi4KLSAgYm9vbCBHYXJiYWdlQ29sbGVjdElmTmVlZGVkKERlY29kZVRpbWVzdGFtcCBtZWRpYV90aW1lLCBzaXplX3QgbmV3RGF0YVNpemUpOwotCi0gIC8vIENoYW5nZXMgdGhlIFNvdXJjZUJ1ZmZlclN0cmVhbSdzIHN0YXRlIHNvIHRoYXQgaXQgd2lsbCBzdGFydCByZXR1cm5pbmcKLSAgLy8gYnVmZmVycyBzdGFydGluZyBmcm9tIHRoZSBjbG9zZXN0IGtleWZyYW1lIGJlZm9yZSB8dGltZXN0YW1wfC4KLSAgdm9pZCBTZWVrKGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgU291cmNlQnVmZmVyU3RyZWFtIGhhcyBzZWVrZWQgdG8gYSB0aW1lIHdpdGhvdXQKLSAgLy8gYnVmZmVyZWQgZGF0YSBhbmQgaXMgd2FpdGluZyBmb3IgbW9yZSBkYXRhIHRvIGJlIGFwcGVuZGVkLgotICBib29sIElzU2Vla1BlbmRpbmcoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGtleWZyYW1lIGJlZm9yZSB0aGUgc2VlayB0aW1lc3RhbXAuICBOb3RlIHRoYXQKLSAgLy8gdGhpcyB2YWx1ZSBpcyBvbmx5IHZhbGlkICh0aHVzIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkKSB3aGVuCi0gIC8vIElzU2Vla1BlbmRpbmcoKSByZXR1cm5zIGZhbHNlLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0U2Vla0tleWZyYW1lVGltZXN0YW1wKCkgY29uc3Q7Ci0KLSAgLy8gTm90aWZpZXMgdGhlIFNvdXJjZUJ1ZmZlclN0cmVhbSB0aGF0IHRoZSBtZWRpYSBkdXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIHRvCi0gIC8vIHxkdXJhdGlvbnwgc28gaXQgc2hvdWxkIGRyb3AgYW55IGRhdGEgcGFzdCB0aGF0IHBvaW50LgotICB2b2lkIE9uU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKTsKLQotICAvLyBGaWxscyB8b3V0X2J1ZmZlcnwgd2l0aCBhIG5ldyBidWZmZXIuIEJ1ZmZlcnMgYXJlIHByZXNlbnRlZCBpbiBvcmRlciBmcm9tCi0gIC8vIHRoZSBsYXN0IGNhbGwgdG8gU2VlaygpLCBvciBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBidWZmZXIgYXBwZW5kZWQgaWYKLSAgLy8gU2VlaygpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LgotICAvLyB8b3V0X2J1ZmZlcnwncyB0aW1lc3RhbXAgbWF5IGJlIGVhcmxpZXIgdGhhbiB0aGUgfHRpbWVzdGFtcHwgcGFzc2VkIHRvCi0gIC8vIHRoZSBsYXN0IFNlZWsoKSBjYWxsLgotICAvLyBSZXR1cm5zIGtTdWNjZXNzIGlmIHxvdXRfYnVmZmVyfCBpcyBmaWxsZWQgd2l0aCBhIHZhbGlkIGJ1ZmZlciwga05lZWRCdWZmZXIKLSAgLy8gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBkYXRhIGJ1ZmZlcmVkIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QsIGFuZAotICAvLyBrQ29uZmlnQ2hhbmdlIGlmIHRoZSBuZXh0IGJ1ZmZlciByZXF1aXJlcyBhIGNvbmZpZyBjaGFuZ2UuCi0gIFN0YXR1cyBHZXROZXh0QnVmZmVyKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiogb3V0X2J1ZmZlcik7Ci0KLSAgLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGJ1ZmZlcmVkIHRpbWUgcmFuZ2VzLgotICBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiBHZXRCdWZmZXJlZFRpbWUoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBoaWdoZXN0IGJ1ZmZlcmVkIFBUUyBvciBiYXNlOjpUaW1lRGVsdGEoKSBpZiBub3RoaW5nIGlzCi0gIC8vIGJ1ZmZlcmVkLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXJlZCByYW5nZXMsIHdoaWNoIGlzIGVxdWl2YWxlbnQKLSAgLy8gdG8gdGhlIGVuZCB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgYnVmZmVyZWQgcmFuZ2UuIElmIG5vIGRhdGEgaXMgYnVmZmVyZWQKLSAgLy8gdGhlbiBiYXNlOjpUaW1lRGVsdGEoKSBpcyByZXR1cm5lZC4KLSAgYmFzZTo6VGltZURlbHRhIEdldEJ1ZmZlcmVkRHVyYXRpb24oKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXJlZCBkYXRhIGluIGJ5dGVzLgotICBzaXplX3QgR2V0QnVmZmVyZWRTaXplKCkgY29uc3Q7Ci0KLSAgLy8gTm90aWZpZXMgdGhpcyBvYmplY3QgdGhhdCBlbmQgb2Ygc3RyZWFtIGhhcyBiZWVuIHNpZ25hbGxlZC4KLSAgdm9pZCBNYXJrRW5kT2ZTdHJlYW0oKTsKLQotICAvLyBDbGVhciB0aGUgZW5kIG9mIHN0cmVhbSBzdGF0ZSBzZXQgYnkgTWFya0VuZE9mU3RyZWFtKCkuCi0gIHZvaWQgVW5tYXJrRW5kT2ZTdHJlYW0oKTsKLQotICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIEdldEN1cnJlbnRBdWRpb0RlY29kZXJDb25maWcoKTsKLSAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBHZXRDdXJyZW50VmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0gIGNvbnN0IFRleHRUcmFja0NvbmZpZyYgR2V0Q3VycmVudFRleHRUcmFja0NvbmZpZygpOwotCi0gIC8vIE5vdGlmaWVzIHRoaXMgb2JqZWN0IHRoYXQgdGhlIGF1ZGlvIGNvbmZpZyBoYXMgY2hhbmdlZCBhbmQgYnVmZmVycyBpbgotICAvLyBmdXR1cmUgQXBwZW5kKCkgY2FsbHMgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBjb25maWcuCi0gIGJvb2wgVXBkYXRlQXVkaW9Db25maWcoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpOwotCi0gIC8vIE5vdGlmaWVzIHRoaXMgb2JqZWN0IHRoYXQgdGhlIHZpZGVvIGNvbmZpZyBoYXMgY2hhbmdlZCBhbmQgYnVmZmVycyBpbgotICAvLyBmdXR1cmUgQXBwZW5kKCkgY2FsbHMgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5ldyBjb25maWcuCi0gIGJvb2wgVXBkYXRlVmlkZW9Db25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBjb25maWcpOwotCi0gIC8vIFJldHVybnMgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0d28gYWRqYWNlbnQgYnVmZmVycyBpbiB0aGlzIHN0cmVhbSwKLSAgLy8gb3IgYW4gZXN0aW1hdGUgaWYgbm8gdHdvIGFkamFjZW50IGJ1ZmZlcnMgaGF2ZSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBzdHJlYW0KLSAgLy8geWV0LgotICBiYXNlOjpUaW1lRGVsdGEgR2V0TWF4SW50ZXJidWZmZXJEaXN0YW5jZSgpIGNvbnN0OwotCi0gIHZvaWQgc2V0X21lbW9yeV9saW1pdChzaXplX3QgbWVtb3J5X2xpbWl0KSB7IG1lbW9yeV9saW1pdF8gPSBtZW1vcnlfbGltaXQ7IH0KLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBTb3VyY2VCdWZmZXJTdHJlYW1UZXN0OwotCi0gIC8vIEF0dGVtcHRzIHRvIGRlbGV0ZSBhcHByb3hpbWF0ZWx5IHx0b3RhbF9ieXRlc190b19mcmVlfCBhbW91bnQgb2YgZGF0YQotICAvLyB8cmFuZ2VzX3wsIHN0YXJ0aW5nIGF0IHRoZSBmcm9udCBvZiB8cmFuZ2VzX3wgYW5kIG1vdmluZyBsaW5lYXJseSBmb3J3YXJkCi0gIC8vIHRocm91Z2ggdGhlIGJ1ZmZlcnMuIERlbGV0ZXMgc3RhcnRpbmcgZnJvbSB0aGUgYmFjayBpZiB8cmV2ZXJzZV9kaXJlY3Rpb258Ci0gIC8vIGlzIHRydWUuIHxtZWRpYV90aW1lfCBpcyBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgotICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJlZWQuCi0gIHNpemVfdCBGcmVlQnVmZmVycyhzaXplX3QgdG90YWxfYnl0ZXNfdG9fZnJlZSwgRGVjb2RlVGltZXN0YW1wIG1lZGlhX3RpbWUsCi0gICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2VfZGlyZWN0aW9uKTsKLQotICAvLyBBdHRlbXB0cyB0byBkZWxldGUgYXBwcm94aW1hdGVseSB8dG90YWxfYnl0ZXNfdG9fZnJlZXwgYW1vdW50IG9mIGRhdGEgZnJvbQotICAvLyB8cmFuZ2VzX3wsIHN0YXJ0aW5nIGFmdGVyIHRoZSBsYXN0IGFwcGVuZGVkIGJ1ZmZlciBiZWZvcmUgdGhlIGN1cnJlbnQKLSAgLy8gcGxheWJhY2sgcG9zaXRpb24gfG1lZGlhX3RpbWV8LgotICBzaXplX3QgRnJlZUJ1ZmZlcnNBZnRlckxhc3RBcHBlbmRlZChzaXplX3QgdG90YWxfYnl0ZXNfdG9fZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIG1lZGlhX3RpbWUpOwotCi0gIC8vIEdldHMgdGhlIHJlbW92YWwgcmFuZ2UgdG8gc2VjdXJlIHxieXRlX3RvX2ZyZWV8IGZyb20KLSAgLy8gW3xzdGFydF90aW1lc3RhbXB8LCB8ZW5kX3RpbWVzdGFtcHwpLgotICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIGJ1ZmZlcnMgdG8gc2VjdXJlIGlmIGZ1dHVyZQotICAvLyBSZW1vdmUofHN0YXJ0X3RpbWVzdGFtcHwsIHxyZW1vdmFsX2VuZF90aW1lc3RhbXB8LCBkdXJhdGlvbikgaXMgY2FsbGVkLgotICAvLyBXaWxsIG5vdCB1cGRhdGUgfHJlbW92YWxfZW5kX3RpbWVzdGFtcHwgaWYgdGhlIHJldHVybmVkIHNpemUgaXMgMC4KLSAgc2l6ZV90IEdldFJlbW92YWxSYW5nZShEZWNvZGVUaW1lc3RhbXAgc3RhcnRfdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcCBlbmRfdGltZXN0YW1wLCBzaXplX3QgYnl0ZV90b19mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcCogcmVtb3ZhbF9lbmRfdGltZXN0YW1wKTsKLQotICAvLyBQcmVwYXJlcyB8cmFuZ2VfZm9yX25leHRfYXBwZW5kX3wgc28gfG5ld19idWZmZXJzfCBjYW4gYmUgYXBwZW5kZWQuCi0gIC8vIFRoaXMgaW52b2x2ZXMgcmVtb3ZpbmcgYnVmZmVycyBiZXR3ZWVuIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGFwcGVuZAotICAvLyBhbmQgYW55IGJ1ZmZlcnMgY292ZXJlZCBieSB0aGUgdGltZSByYW5nZSBpbiB8bmV3X2J1ZmZlcnN8LgotICAvLyB8ZGVsZXRlZF9idWZmZXJzfCBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyIGNvbnRhaW5pbmcgY2FuZGlkYXRlcyBmb3IKLSAgLy8gfHRyYWNrX2J1ZmZlcl98IGlmIHRoaXMgbWV0aG9kIGVuZHMgdXAgcmVtb3ZpbmcgdGhlIGN1cnJlbnQgcGxheWJhY2sKLSAgLy8gcG9zaXRpb24gZnJvbSB0aGUgcmFuZ2UuCi0gIHZvaWQgUHJlcGFyZVJhbmdlc0Zvck5leHRBcHBlbmQoY29uc3QgQnVmZmVyUXVldWUmIG5ld19idWZmZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclF1ZXVlKiBkZWxldGVkX2J1ZmZlcnMpOwotCi0gIC8vIFJlbW92ZXMgYnVmZmVycywgZnJvbSB0aGUgfHRyYWNrX2J1ZmZlcl98LCB0aGF0IGNvbWUgYWZ0ZXIgfHRpbWVzdGFtcHwuCi0gIHZvaWQgUHJ1bmVUcmFja0J1ZmZlcihjb25zdCBEZWNvZGVUaW1lc3RhbXAgdGltZXN0YW1wKTsKLQotICAvLyBDaGVja3MgdG8gc2VlIGlmIHxyYW5nZV93aXRoX25ld19idWZmZXJzX2l0cnwgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSByYW5nZQotICAvLyBuZXh0IHRvIGl0LCBhbmQgbWVyZ2VzIHRoZW0gaWYgc28uCi0gIHZvaWQgTWVyZ2VXaXRoQWRqYWNlbnRSYW5nZUlmTmVjZXNzYXJ5KAotICAgICAgY29uc3QgUmFuZ2VMaXN0OjppdGVyYXRvciYgcmFuZ2Vfd2l0aF9uZXdfYnVmZmVyc19pdHIpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8c2Vjb25kX3RpbWVzdGFtcHwgaXMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbmV4dCBidWZmZXIgaW4KLSAgLy8gc2VxdWVuY2UgYWZ0ZXIgfGZpcnN0X3RpbWVzdGFtcHwsIGZhbHNlIG90aGVyd2lzZS4KLSAgYm9vbCBBcmVBZGphY2VudEluU2VxdWVuY2UoRGVjb2RlVGltZXN0YW1wIGZpcnN0X3RpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIHNlY29uZF90aW1lc3RhbXApIGNvbnN0OwotCi0gIC8vIEhlbHBlciBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0aGF0Ci0gIC8vIHxzZWxlY3RlZF9yYW5nZV98IHdpbGwgcmV0dXJuIGZyb20gR2V0TmV4dEJ1ZmZlcigpIGNhbGwsIG9yIGtOb1RpbWVzdGFtcAotICAvLyBpZiBpbiBiZXR3ZWVuIHNlZWtpbmcgKGkuZS4gfHNlbGVjdGVkX3JhbmdlX3wgaXMgbnVsbCkuCi0gIERlY29kZVRpbWVzdGFtcCBHZXROZXh0QnVmZmVyVGltZXN0YW1wKCk7Ci0KLSAgLy8gRmluZHMgdGhlIHJhbmdlIHRoYXQgc2hvdWxkIGNvbnRhaW4gYSBjb2RlZCBmcmFtZSBncm91cCB0aGF0IGJlZ2lucyB3aXRoCi0gIC8vIHxzdGFydF90aW1lc3RhbXB8IGFuZCByZXR1cm5zIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byBpdC4gUmV0dXJucwotICAvLyB8cmFuZ2VzXy5lbmQoKXwgaWYgdGhlcmUncyBubyBzdWNoIGV4aXN0aW5nIHJhbmdlLgotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIEZpbmRFeGlzdGluZ1JhbmdlRm9yKERlY29kZVRpbWVzdGFtcCBzdGFydF90aW1lc3RhbXApOwotCi0gIC8vIEluc2VydHMgfG5ld19yYW5nZXwgaW50byB8cmFuZ2VzX3wgcHJlc2VydmluZyBzb3J0ZWQgb3JkZXIuIFJldHVybnMgYW4KLSAgLy8gaXRlcmF0b3IgaW4gfHJhbmdlc198IHRoYXQgcG9pbnRzIHRvIHxuZXdfcmFuZ2V8LgotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIEFkZFRvUmFuZ2VzKFNvdXJjZUJ1ZmZlclJhbmdlKiBuZXdfcmFuZ2UpOwotCi0gIC8vIFJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBwb2ludHMgdG8gdGhlIHBsYWNlIGluIHxyYW5nZXNffCB3aGVyZQotICAvLyB8c2VsZWN0ZWRfcmFuZ2VffCBsaXZlcy4KLSAgUmFuZ2VMaXN0OjppdGVyYXRvciBHZXRTZWxlY3RlZFJhbmdlSXRyKCk7Ci0KLSAgLy8gU2V0cyB0aGUgfHNlbGVjdGVkX3JhbmdlX3wgdG8gfHJhbmdlfCBhbmQgcmVzZXRzIHRoZSBuZXh0IGJ1ZmZlciBwb3NpdGlvbgotICAvLyBmb3IgdGhlIHByZXZpb3VzIHxzZWxlY3RlZF9yYW5nZV98LgotICB2b2lkIFNldFNlbGVjdGVkUmFuZ2UoU291cmNlQnVmZmVyUmFuZ2UqIHJhbmdlKTsKLQotICAvLyBTZWVrcyB8cmFuZ2V8IHRvIHxzZWVrX3RpbWVzdGFtcHwgYW5kIHRoZW4gY2FsbHMgU2V0U2VsZWN0ZWRSYW5nZSgpIHdpdGgKLSAgLy8gfHJhbmdlfC4KLSAgdm9pZCBTZWVrQW5kU2V0U2VsZWN0ZWRSYW5nZShTb3VyY2VCdWZmZXJSYW5nZSogcmFuZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIHNlZWtfdGltZXN0YW1wKTsKLQotICAvLyBSZXNldHMgdGhpcyBzdHJlYW0gYmFjayB0byBhbiB1bnNlZWtlZCBzdGF0ZS4KLSAgdm9pZCBSZXNldFNlZWtTdGF0ZSgpOwotCi0gIC8vIFJlc2V0IHN0YXRlIHRyYWNraW5nIHZhcmlvdXMgbWV0YWRhdGEgYWJvdXQgdGhlIGxhc3QgYXBwZW5kZWQgYnVmZmVyLgotICB2b2lkIFJlc2V0TGFzdEFwcGVuZGVkU3RhdGUoKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgfHNlZWtfdGltZXN0YW1wfCByZWZlcnMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcmFuZ2UKLSAgLy8gaW4gfHJhbmdlc198LCBmYWxzZSBvdGhlcndpc2Ugb3IgaWYgfHJhbmdlc198IGlzIGVtcHR5LgotICBib29sIFNob3VsZFNlZWtUb1N0YXJ0T2ZCdWZmZXJlZChiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lc3RhbXApIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZXN0YW1wcyBvZiB8YnVmZmVyc3wgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZwotICAvLyBzaW5jZSB0aGUgcHJldmlvdXMgYXBwZW5kIHRvIHRoZSBjb2RlZCBmcmFtZSBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLgotICBib29sIElzTW9ub3RvbmljYWxseUluY3JlYXNpbmcoY29uc3QgQnVmZmVyUXVldWUmIGJ1ZmZlcnMpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8c2VsZWN0ZWRfcmFuZ2VffCBpcyB0aGUgb25seSByYW5nZSBpbiB8cmFuZ2VzX3wgdGhhdAotICAvLyBIYXNOZXh0QnVmZmVyUG9zaXRpb24oKS4KLSAgYm9vbCBPbmx5U2VsZWN0ZWRSYW5nZUlzU2Vla2VkKCkgY29uc3Q7Ci0KLSAgLy8gTWVhc3VyZXMgdGhlIGRpc3RhbmNlcyBiZXR3ZWVuIGJ1ZmZlciB0aW1lc3RhbXBzIGFuZCB0cmFja3MgdGhlIG1heC4KLSAgdm9pZCBVcGRhdGVNYXhJbnRlcmJ1ZmZlckRpc3RhbmNlKGNvbnN0IEJ1ZmZlclF1ZXVlJiBidWZmZXJzKTsKLQotICAvLyBTZXRzIHRoZSBjb25maWcgSUQgZm9yIGVhY2ggYnVmZmVyIHRvIHxhcHBlbmRfY29uZmlnX2luZGV4X3wuCi0gIHZvaWQgU2V0Q29uZmlnSWRzKGNvbnN0IEJ1ZmZlclF1ZXVlJiBidWZmZXJzKTsKLQotICAvLyBDYWxsZWQgdG8gY29tcGxldGUgYSBjb25maWcgY2hhbmdlLiBVcGRhdGVzIHxjdXJyZW50X2NvbmZpZ19pbmRleF98IHRvCi0gIC8vIG1hdGNoIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBidWZmZXIuIENhbGxpbmcgdGhpcyBtZXRob2QgY2F1c2VzCi0gIC8vIEdldE5leHRCdWZmZXIoKSB0byBzdG9wIHJldHVybmluZyBrQ29uZmlnQ2hhbmdlIGFuZCBzdGFydCByZXR1cm5pbmcKLSAgLy8ga1N1Y2Nlc3MuCi0gIHZvaWQgQ29tcGxldGVDb25maWdDaGFuZ2UoKTsKLQotICAvLyBTZXRzIHxzZWxlY3RlZF9yYW5nZV98IGFuZCBzZWVrcyB0byB0aGUgbmVhcmVzdCBrZXlmcmFtZSBhZnRlcgotICAvLyB8dGltZXN0YW1wfCBpZiBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlLiBUaGlzIG1ldGhvZCBvbmx5IGF0dGVtcHRzIHRvCi0gIC8vIHNldCB8c2VsZWN0ZWRfcmFuZ2VffCBpZiB8c2VsZWN0ZWRfcmFuZ2VffCBpcyBudWxsIGFuZCB8dHJhY2tfYnVmZmVyX3wKLSAgLy8gaXMgZW1wdHkuCi0gIHZvaWQgU2V0U2VsZWN0ZWRSYW5nZUlmTmVlZGVkKGNvbnN0IERlY29kZVRpbWVzdGFtcCB0aW1lc3RhbXApOwotCi0gIC8vIEZpbmQgYSBrZXlmcmFtZSB0aW1lc3RhbXAgdGhhdCBpcyA+PSB8c3RhcnRfdGltZXN0YW1wfCBhbmQgY2FuIGJlIHVzZWQgdG8KLSAgLy8gZmluZCBhIG5ldyBzZWxlY3RlZCByYW5nZS4KLSAgLy8gUmV0dXJucyBrTm9UaW1lc3RhbXAgaWYgYW4gYXBwcm9wcmlhdGUga2V5ZnJhbWUgdGltZXN0YW1wIGNvdWxkIG5vdCBiZQotICAvLyBmb3VuZC4KLSAgRGVjb2RlVGltZXN0YW1wIEZpbmROZXdTZWxlY3RlZFJhbmdlU2Vla1RpbWVzdGFtcCgKLSAgICAgIGNvbnN0IERlY29kZVRpbWVzdGFtcCBzdGFydF90aW1lc3RhbXApOwotCi0gIC8vIFNlYXJjaGVzIHxyYW5nZXNffCBmb3IgdGhlIGZpcnN0IGtleWZyYW1lIHRpbWVzdGFtcCB0aGF0IGlzID49IHx0aW1lc3RhbXB8LgotICAvLyBJZiB8cmFuZ2VzX3wgZG9lc24ndCBjb250YWluIGEgR09QIHRoYXQgY292ZXJzIHx0aW1lc3RhbXB8IG9yIGRvZXNuJ3QKLSAgLy8gaGF2ZSBhIGtleWZyYW1lIGFmdGVyIHx0aW1lc3RhbXB8IHRoZW4ga05vVGltZXN0YW1wIGlzIHJldHVybmVkLgotICBEZWNvZGVUaW1lc3RhbXAgRmluZEtleWZyYW1lQWZ0ZXJUaW1lc3RhbXAoY29uc3QgRGVjb2RlVGltZXN0YW1wIHRpbWVzdGFtcCk7Ci0KLSAgLy8gUmV0dXJucyAiVklERU8iIGZvciBhIHZpZGVvIFNvdXJjZUJ1ZmZlclN0cmVhbSwgIkFVRElPIiBmb3IgYW4gYXVkaW8KLSAgLy8gc3RyZWFtLCBhbmQgIlRFWFQiIGZvciBhIHRleHQgc3RyZWFtLgotICBzdGQ6OnN0cmluZyBHZXRTdHJlYW1UeXBlTmFtZSgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBlbmQgb2Ygc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQsIGkuZS4gdGhlCi0gIC8vIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gIC8vIDEuIGVuZCBvZiBzdHJlYW0gaXMgbWFya2VkIGFuZCB0aGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmFja19idWZmZXIuCi0gIC8vIDIuIFdlIGRvbid0IGhhdmUgYW55IHJhbmdlcywgb3IgdGhlIGxhc3Qgb3Igbm8gcmFuZ2UgaXMgc2VsZWN0ZWQsCi0gIC8vICAgIG9yIHRoZXJlIGlzIGEgcGVuZGluZyBzZWVrIGJleW9uZCBhbnkgZXhpc3RpbmcgcmFuZ2VzLgotICBib29sIElzRW5kT2ZTdHJlYW1SZWFjaGVkKCkgY29uc3Q7Ci0KLSAgLy8gRGVsZXRlcyB0aGUgcmFuZ2UgcG9pbnRlZCB0byBieSB8Kml0cnwgYW5kIHJlbW92ZXMgaXQgZnJvbSB8cmFuZ2VzX3wuCi0gIC8vIElmIHwqaXRyfCBwb2ludHMgdG8gfHNlbGVjdGVkX3JhbmdlX3wsIHRoZW4gfHNlbGVjdGVkX3JhbmdlX3wgaXMgc2V0IHRvCi0gIC8vIE5VTEwuIEFmdGVyIHRoZSByYW5nZSBpcyByZW1vdmVkLCB8Kml0cnwgaXMgdG8gdGhlIHJhbmdlIGFmdGVyIHRoZSBvbmUgdGhhdAotICAvLyB3YXMgcmVtb3ZlZCBvciB0byB8cmFuZ2VzXy5lbmQoKXwgaWYgdGhlIGxhc3QgcmFuZ2Ugd2FzIHJlbW92ZWQuCi0gIHZvaWQgRGVsZXRlQW5kUmVtb3ZlUmFuZ2UoUmFuZ2VMaXN0OjppdGVyYXRvciogaXRyKTsKLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCB3aGVuIHVwZGF0aW5nIHxyYW5nZV9mb3JfbmV4dF9hcHBlbmRffC4KLSAgLy8gUmV0dXJucyBhIGd1ZXNzIG9mIHdoYXQgdGhlIG5leHQgYXBwZW5kIHRpbWVzdGFtcCB3aWxsIGJlIGJhc2VkIG9uCi0gIC8vIHxsYXN0X2FwcGVuZGVkX2J1ZmZlcl90aW1lc3RhbXBffCwgfG5ld19jb2RlZF9mcmFtZV9ncm91cF98IGFuZAotICAvLyB8Y29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV98LiBSZXR1cm5zIGtOb0RlY29kZVRpbWVzdGFtcCgpIGlmIHVuYWJsZSB0bwotICAvLyBndWVzcywgd2hpY2ggY2FuIG9jY3VyIHByaW9yIHRvIGZpcnN0IE9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cCgpLCBvcgotICAvLyB3aGVuIHRoZSBtb3N0IHJlY2VudCBHT1AgYXBwZW5kZWQgdG8gc2luY2UgdGhlIGxhc3QKLSAgLy8gT25TdGFydE9mQ29kZWRGcmFtZUdyb3VwKCkgaXMgcmVtb3ZlZC4KLSAgRGVjb2RlVGltZXN0YW1wIFBvdGVudGlhbE5leHRBcHBlbmRUaW1lc3RhbXAoKSBjb25zdDsKLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBSZW1vdmUoKSBhbmQgUHJlcGFyZVJhbmdlc0Zvck5leHRBcHBlbmQoKSB0bwotICAvLyByZW1vdmUgYnVmZmVycyBhbmQgcmFuZ2VzIGJldHdlZW4gfHN0YXJ0fCBhbmQgfGVuZHwuCi0gIC8vIHxleGNsdWRlX3N0YXJ0fCAtIElmIHNldCB0byB0cnVlLCBidWZmZXJzIHdpdGggdGltZXN0YW1wcyB0aGF0Ci0gIC8vIG1hdGNoIHxzdGFydHwgYXJlIG5vdCByZW1vdmVkLiBJZiBzZXQgdG8gZmFsc2UsIGJ1ZmZlcnMgd2l0aAotICAvLyB0aW1lc3RhbXBzIHRoYXQgbWF0Y2ggfHN0YXJ0fCB3aWxsIGJlIHJlbW92ZWQuCi0gIC8vIHwqZGVsZXRlZF9idWZmZXJzfCAtIEZpbGxlZCB3aXRoIGJ1ZmZlcnMgZm9yIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uCi0gIC8vIGlmIHRoZSByZW1vdmFsIHJhbmdlIGluY2x1ZGVkIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLiBUaGVzZSBidWZmZXJzCi0gIC8vIGNhbiBiZSB1c2VkIGFzIGNhbmRpZGF0ZXMgZm9yIHBsYWNpbmcgaW4gdGhlIHx0cmFja19idWZmZXJffC4KLSAgdm9pZCBSZW1vdmVJbnRlcm5hbChEZWNvZGVUaW1lc3RhbXAgc3RhcnQsIERlY29kZVRpbWVzdGFtcCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBleGNsdWRlX3N0YXJ0LCBCdWZmZXJRdWV1ZSogZGVsZXRlZF9idWZmZXJzKTsKLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBSZW1vdmVJbnRlcm5hbCgpIHRvIGV2YWx1YXRlIHdoZXRoZXIgcmVtb3ZlIHdpbGwKLSAgLy8gZGlzcnVwdCB0aGUgbGFzdCBhcHBlbmRlZCBHT1AuIElmIGRpc3J1cHRpb24gaXMgZXhwZWN0ZWQsIHJlc2V0IHN0YXRlCi0gIC8vIHRyYWNraW5nIHRoZSBsYXN0IGFwcGVuZC4gVGhpcyB3aWxsIHRyaWdnZXIgZnJhbWUgZmlsdGVyaW5nIGluIEFwcGVuZCgpCi0gIC8vIHVudGlsIGEgbmV3IGtleSBmcmFtZSBpcyBwcm92aWRlZC4KLSAgdm9pZCBVcGRhdGVMYXN0QXBwZW5kU3RhdGVGb3JSZW1vdmUoRGVjb2RlVGltZXN0YW1wIHJlbW92ZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIHJlbW92ZV9lbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhjbHVkZV9zdGFydCk7Ci0KLSAgVHlwZSBHZXRUeXBlKCkgY29uc3Q7Ci0KLSAgLy8gU2VlIEdldE5leHRCdWZmZXIoKSBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLiAgVGhpcyBtZXRob2QgaGFuZGxlcyBzcGxpY2UKLSAgLy8gZnJhbWUgcHJvY2Vzc2luZy4KLSAgU3RhdHVzIEhhbmRsZU5leHRCdWZmZXJXaXRoU3BsaWNlKAotICAgICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+KiBvdXRfYnVmZmVyKTsKLQotICAvLyBTZWUgR2V0TmV4dEJ1ZmZlcigpIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuICBUaGlzIG1ldGhvZCBoYW5kbGVzIHByZXJvbGwKLSAgLy8gZnJhbWUgcHJvY2Vzc2luZy4KLSAgU3RhdHVzIEhhbmRsZU5leHRCdWZmZXJXaXRoUHJlcm9sbCgKLSAgICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiogb3V0X2J1ZmZlcik7Ci0KLSAgLy8gU2VlIEdldE5leHRCdWZmZXIoKSBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLiAgVGhlIGludGVybmFsIG1ldGhvZCBoYW5kcyBvdXQKLSAgLy8gc2luZ2xlIGJ1ZmZlcnMgZnJvbSB0aGUgfHRyYWNrX2J1ZmZlcl98IGFuZCB8c2VsZWN0ZWRfcmFuZ2VffCB3aXRob3V0Ci0gIC8vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBmb3Igc3BsaWNlIGZyYW1lIG9yIHByZXJvbGwgYnVmZmVycy4KLSAgU3RhdHVzIEdldE5leHRCdWZmZXJJbnRlcm5hbChzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4qIG91dF9idWZmZXIpOwotCi0gIC8vIElmIHRoZSBuZXh0IGJ1ZmZlcidzIHRpbWVzdGFtcCBpcyBzaWduaWZpY2FudGx5IGJleW9uZCB0aGUgbGFzdCBvdXRwdXQKLSAgLy8gYnVmZmVyLCBhbmQgaWYgd2UganVzdCBleGhhdXN0ZWQgfHRyYWNrX2J1ZmZlcl98IG9uIHRoZSBwcmV2aW91cyByZWFkLCB0aGlzCi0gIC8vIG1ldGhvZCBsb2dzIGEgd2FybmluZyB0byB8bWVkaWFfbG9nX3wgdGhhdCB0aGVyZSBjb3VsZCBiZSBwZXJjZWl2YWJsZQotICAvLyBkZWxheS4gQXBwcyBjYW4gYXZvaWQgdGhpcyBiZWhhdmlvciBieSBub3Qgb3ZlcmxhcC1hcHBlbmRpbmcgYnVmZmVycyBuZWFyCi0gIC8vIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24uCi0gIHZvaWQgV2FybklmVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcHNGb3J3YXJkKAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBuZXh0X2J1ZmZlcik7Ci0KLSAgLy8gQ2FsbGVkIGJ5IFByZXBhcmVSYW5nZXNGb3JOZXh0QXBwZW5kKCkgYmVmb3JlIHBydW5pbmcgb3ZlcmxhcHBlZCBidWZmZXJzIHRvCi0gIC8vIGdlbmVyYXRlIGEgc3BsaWNlIGZyYW1lIHdpdGggYSBzbWFsbCBwb3J0aW9uIG9mIHRoZSBvdmVybGFwcGVkIGJ1ZmZlcnMuICBJZgotICAvLyBhIHNwbGljZSBmcmFtZSBpcyBnZW5lcmF0ZWQsIHRoZSBmaXJzdCBidWZmZXIgaW4gfG5ld19idWZmZXJzfCB3aWxsIGhhdmUKLSAgLy8gaXRzIHRpbWVzdGFtcHMsIGR1cmF0aW9uLCBhbmQgZmFkZSBvdXQgcHJlcm9sbCB1cGRhdGVkLgotICB2b2lkIEdlbmVyYXRlU3BsaWNlRnJhbWUoY29uc3QgQnVmZmVyUXVldWUmIG5ld19idWZmZXJzKTsKLQotICAvLyBJZiB8b3V0X2J1ZmZlcnwgaGFzIHNwbGljZSBidWZmZXJzIG9yIHByZXJvbGwsIHNldHMgfHBlbmRpbmdfYnVmZmVyX3wKLSAgLy8gYXBwcm9wcmlhdGVseSBhbmQgcmV0dXJucyB0cnVlLiAgT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCi0gIGJvb2wgU2V0UGVuZGluZ0J1ZmZlcihzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4qIG91dF9idWZmZXIpOwotCi0gIC8vIFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIGR1cmF0aW9uIG9mIGFsbCByYW5nZXMuICBUaGlzIGlzIHNvbGVseSB1c2VkIGJ5Ci0gIC8vIGdhcmJhZ2UgY29sbGVjdGlvbi4KLSAgYmFzZTo6VGltZURlbHRhIEdldEJ1ZmZlcmVkRHVyYXRpb25Gb3JHYXJiYWdlQ29sbGVjdGlvbigpIGNvbnN0OwotCi0gIC8vIFVwZGF0ZXMgTWVkaWEgQnVmZmVyIHJlbGF0ZWQgbWVtYmVyIHZhcmlhYmxlcyBiYXNlZCBvbiB0aGUgdmlkZW8gY29uZmlnLgotICB2b2lkIFVwZGF0ZU1lZGlhQnVmZmVyTWVtYmVycyhjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGNvbmZpZyk7Ci0KLSAgLy8gVXNlZCB0byByZXBvcnQgbG9nIG1lc3NhZ2VzIHRoYXQgY2FuIGhlbHAgdGhlIHdlYiBkZXZlbG9wZXIgZmlndXJlIG91dCB3aGF0Ci0gIC8vIGlzIHdyb25nIHdpdGggdGhlIGNvbnRlbnQuCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgLy8gSG9sZHMgdGhlIHRleHQgY29uZmlnIGZvciB0aGlzIHN0cmVhbS4KLSAgVGV4dFRyYWNrQ29uZmlnIHRleHRfdHJhY2tfY29uZmlnXzsKLQotICAvLyBUaW1lc3RhbXAgb2YgdGhlIGxhc3QgcmVxdWVzdCB0byBTZWVrKCkuCi0gIGJhc2U6OlRpbWVEZWx0YSBzZWVrX2J1ZmZlcl90aW1lc3RhbXBfOwotCi0gIC8vIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBjdXJyZW50IGNvZGVkIGZyYW1lIGdyb3VwIGJlaW5nIGFwcGVuZGVkLgotICBEZWNvZGVUaW1lc3RhbXAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZV87Ci0KLSAgLy8gUG9pbnRzIHRvIHRoZSByYW5nZSBjb250YWluaW5nIHRoZSBjdXJyZW50IGNvZGVkIGZyYW1lIGdyb3VwIGJlaW5nCi0gIC8vIGFwcGVuZGVkLgotICBSYW5nZUxpc3Q6Oml0ZXJhdG9yIHJhbmdlX2Zvcl9uZXh0X2FwcGVuZF87Ci0KLSAgLy8gVGhlIGRlY29kZSB0aW1lc3RhbXAgb24gdGhlIGxhc3QgYnVmZmVyIHJldHVybmVkIGJ5IHRoZSBtb3N0IHJlY2VudAotICAvLyBHZXROZXh0QnVmZmVyKCkgY2FsbC4gU2V0IHRvIGtOb0RlY29kZVRpbWVzdGFtcCgpIGlmIEdldE5leHRCdWZmZXIoKSBoYXNuJ3QKLSAgLy8gYmVlbiBjYWxsZWQgeWV0IG9yIGEgc2VlayBoYXMgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgR2V0TmV4dEJ1ZmZlcigpIGNhbGwuCi0gIERlY29kZVRpbWVzdGFtcCBsYXN0X291dHB1dF9idWZmZXJfdGltZXN0YW1wXzsKLQotICAvLyBTdG9yZXMgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0d28gYWRqYWNlbnQgYnVmZmVycyBpbiB0aGlzIHN0cmVhbS4KLSAgYmFzZTo6VGltZURlbHRhIG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZV87Ci0KLSAgYm9vbCB1c2luZ19tZW1vcnlfcG9vbF87Ci0gIGludCByZXNvbHV0aW9uX3dpZHRoXyA9IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZDsKLSAgaW50IHJlc29sdXRpb25faGVpZ2h0XyA9IGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZDsKLSAgaW50IGJpdHNfcGVyX3BpeGVsXyA9IGtTYk1lZGlhQml0c1BlclBpeGVsSW52YWxpZDsKLSAgU2JNZWRpYVZpZGVvQ29kZWMgY29kZWNfID0ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZTsKLQotICAvLyBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSBpbiBieXRlcyB0aGUgc3RyZWFtIHdpbGwga2VlcCBpbiBtZW1vcnkuCi0gIHNpemVfdCBtZW1vcnlfbGltaXRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTb3VyY2VCdWZmZXJTdHJlYW0pOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfU09VUkNFX0JVRkZFUl9TVFJFQU1fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW1fdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMWRhYzEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW1fdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0ODU0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfc3BsaXQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kYXRhX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfaGVscGVycy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3dlYnZ0dF91dGlsLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLXVzaW5nIDo6dGVzdGluZzo6SGFzU3Vic3RyOwotdXNpbmcgOjp0ZXN0aW5nOjpJblNlcXVlbmNlOwotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXR5cGVkZWYgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSBCdWZmZXJRdWV1ZTsKLQotc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdEZyYW1lc1BlclNlY29uZCA9IDMwOwotc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdEtleWZyYW1lc1BlclNlY29uZCA9IDY7Ci1zdGF0aWMgY29uc3QgdWludDhfdCBrRGF0YUEgPSAweDExOwotc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0RhdGFCID0gMHgzMzsKLXN0YXRpYyBjb25zdCBpbnQga0RhdGFTaXplID0gMTsKLQotLy8gTWF0Y2hlcnMgZm9yIHZlcmlmeWluZyBjb21tb24gbWVkaWEgbG9nIGVudHJ5IHN0cmluZ3MuCi1NQVRDSEVSKENvbnRhaW5zU2FtZVRpbWVzdGFtcEF0MzBNaWxsaXNlY29uZHNMb2csICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICJEZXRlY3RlZCBhbiBhcHBlbmQgc2VxdWVuY2Ugd2l0aCBrZXlmcmFtZSBmb2xsb3dpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJhIG5vbi1rZXlmcmFtZSwgYm90aCB3aXRoIHRoZSBzYW1lIGRlY29kZSB0aW1lc3RhbXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAwLjAzIik7Ci19Ci0KLU1BVENIRVJfUChDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2csIHNraXBfbWlsbGlzZWNvbmRzLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWVkaWEgYXBwZW5kIHRoYXQgb3ZlcmxhcHBlZCBjdXJyZW50IHBsYXliYWNrICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gY2F1c2VkIHRpbWUgZ2FwIGluIHBsYXlpbmcgVklERU8gc3RyZWFtICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYmVjYXVzZSB0aGUgbmV4dCBrZXlmcmFtZSBpcyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6SW50VG9TdHJpbmcoc2tpcF9taWxsaXNlY29uZHMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zIGJleW9uZCBsYXN0IG92ZXJsYXBwZWQgZnJhbWUuIE1lZGlhIG1heSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBlYXIgdGVtcG9yYXJpbHkgZnJvemVuLiIpOwotfQotCi1NQVRDSEVSX1AyKENvbnRhaW5zR2VuZXJhdGVkU3BsaWNlTG9nLCBkdXJhdGlvbl9taWNyb3NlY29uZHMsIHRpbWVfbWljcm9zZWNvbmRzLAotICAgICAgICAgICAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIkdlbmVyYXRlZCBzcGxpY2Ugb2Ygb3ZlcmxhcCBkdXJhdGlvbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpJbnRUb1N0cmluZyhkdXJhdGlvbl9taWNyb3NlY29uZHMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXMgaW50byBuZXcgYnVmZmVyIGF0ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkludFRvU3RyaW5nKHRpbWVfbWljcm9zZWNvbmRzKSArICJ1cy4iKTsKLX0KLQotY2xhc3MgU291cmNlQnVmZmVyU3RyZWFtVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QoKSA6IG1lZGlhX2xvZ18obmV3IFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPigpKSB7Ci0gICAgdmlkZW9fY29uZmlnXyA9IFRlc3RWaWRlb0NvbmZpZzo6Tm9ybWFsKCk7Ci0gICAgU2V0U3RyZWFtSW5mbyhrRGVmYXVsdEZyYW1lc1BlclNlY29uZCwga0RlZmF1bHRLZXlmcmFtZXNQZXJTZWNvbmQpOwotICAgIHN0cmVhbV8ucmVzZXQobmV3IFNvdXJjZUJ1ZmZlclN0cmVhbSh2aWRlb19jb25maWdfLCBtZWRpYV9sb2dfLCB0cnVlKSk7Ci0gIH0KLQotICB2b2lkIFNldE1lbW9yeUxpbWl0KHNpemVfdCBidWZmZXJzX29mX2RhdGEpIHsKLSAgICBzdHJlYW1fLT5zZXRfbWVtb3J5X2xpbWl0KGJ1ZmZlcnNfb2ZfZGF0YSAqIGtEYXRhU2l6ZSk7Ci0gIH0KLQotICB2b2lkIFNldFN0cmVhbUluZm8oaW50IGZyYW1lc19wZXJfc2Vjb25kLCBpbnQga2V5ZnJhbWVzX3Blcl9zZWNvbmQpIHsKLSAgICBmcmFtZXNfcGVyX3NlY29uZF8gPSBmcmFtZXNfcGVyX3NlY29uZDsKLSAgICBrZXlmcmFtZXNfcGVyX3NlY29uZF8gPSBrZXlmcmFtZXNfcGVyX3NlY29uZDsKLSAgICBmcmFtZV9kdXJhdGlvbl8gPSBDb252ZXJ0VG9GcmFtZUR1cmF0aW9uKGZyYW1lc19wZXJfc2Vjb25kKTsKLSAgfQotCi0gIHZvaWQgU2V0VGV4dFN0cmVhbSgpIHsKLSAgICB2aWRlb19jb25maWdfID0gVGVzdFZpZGVvQ29uZmlnOjpJbnZhbGlkKCk7Ci0gICAgVGV4dFRyYWNrQ29uZmlnIGNvbmZpZyhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCAiIik7Ci0gICAgc3RyZWFtXy5yZXNldChuZXcgU291cmNlQnVmZmVyU3RyZWFtKGNvbmZpZywgbWVkaWFfbG9nXywgdHJ1ZSkpOwotICAgIFNldFN0cmVhbUluZm8oMiwgMik7Ci0gIH0KLQotICB2b2lkIFNldEF1ZGlvU3RyZWFtKCkgewotICAgIHZpZGVvX2NvbmZpZ18gPSBUZXN0VmlkZW9Db25maWc6OkludmFsaWQoKTsKLSAgICBhdWRpb19jb25maWdfLkluaXRpYWxpemUoa0NvZGVjVm9yYmlzLCBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX0xBWU9VVF9TVEVSRU8sIDEwMDAsIEVtcHR5RXh0cmFEYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuZW5jcnlwdGVkKCksIGJhc2U6OlRpbWVEZWx0YSgpLCAwKTsKLSAgICBzdHJlYW1fLnJlc2V0KG5ldyBTb3VyY2VCdWZmZXJTdHJlYW0oYXVkaW9fY29uZmlnXywgbWVkaWFfbG9nXywgdHJ1ZSkpOwotCi0gICAgLy8gRXF1aXZhbGVudCB0byAybXMgcGVyIGZyYW1lLgotICAgIFNldFN0cmVhbUluZm8oNTAwLCA1MDApOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoaW50IHN0YXJ0aW5nX3Bvc2l0aW9uLCBpbnQgbnVtYmVyX29mX2J1ZmZlcnMpIHsKLSAgICBBcHBlbmRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBudW1iZXJfb2ZfYnVmZmVycywgdHJ1ZSwgYmFzZTo6VGltZURlbHRhKCksCi0gICAgICAgICAgICAgICAgICB0cnVlLCAma0RhdGFBLCBrRGF0YVNpemUpOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoaW50IHN0YXJ0aW5nX3Bvc2l0aW9uLCBpbnQgbnVtYmVyX29mX2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEpIHsKLSAgICBBcHBlbmRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBudW1iZXJfb2ZfYnVmZmVycywgdHJ1ZSwgYmFzZTo6VGltZURlbHRhKCksCi0gICAgICAgICAgICAgICAgICB0cnVlLCBkYXRhLCBrRGF0YVNpemUpOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRfT2Zmc2V0Rmlyc3RCdWZmZXIoCi0gICAgICBpbnQgc3RhcnRpbmdfcG9zaXRpb24sIGludCBudW1iZXJfb2ZfYnVmZmVycywKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBmaXJzdF9idWZmZXJfb2Zmc2V0KSB7Ci0gICAgQXBwZW5kQnVmZmVycyhzdGFydGluZ19wb3NpdGlvbiwgbnVtYmVyX29mX2J1ZmZlcnMsIHRydWUsCi0gICAgICAgICAgICAgICAgICBmaXJzdF9idWZmZXJfb2Zmc2V0LCB0cnVlLCAma0RhdGFBLCBrRGF0YVNpemUpOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRfRXhwZWN0RmFpbHVyZShpbnQgc3RhcnRpbmdfcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlcl9vZl9idWZmZXJzKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhzdGFydGluZ19wb3NpdGlvbiwgbnVtYmVyX29mX2J1ZmZlcnMsIHRydWUsIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgICAgICAgICAgZmFsc2UsICZrRGF0YUEsIGtEYXRhU2l6ZSk7Ci0gIH0KLQotICB2b2lkIEFwcGVuZEJ1ZmZlcnMoaW50IHN0YXJ0aW5nX3Bvc2l0aW9uLCBpbnQgbnVtYmVyX29mX2J1ZmZlcnMpIHsKLSAgICBBcHBlbmRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBudW1iZXJfb2ZfYnVmZmVycywgZmFsc2UsCi0gICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEoKSwgdHJ1ZSwgJmtEYXRhQSwga0RhdGFTaXplKTsKLSAgfQotCi0gIHZvaWQgQXBwZW5kQnVmZmVycyhpbnQgc3RhcnRpbmdfcG9zaXRpb24sIGludCBudW1iZXJfb2ZfYnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEpIHsKLSAgICBBcHBlbmRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBudW1iZXJfb2ZfYnVmZmVycywgZmFsc2UsCi0gICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEoKSwgdHJ1ZSwgZGF0YSwga0RhdGFTaXplKTsKLSAgfQotCi0gIHZvaWQgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBidWZmZXJzX3RvX2FwcGVuZCkgewotICAgIEFwcGVuZEJ1ZmZlcnMoYnVmZmVyc190b19hcHBlbmQsIHRydWUsIGtOb1RpbWVzdGFtcCwgZmFsc2UsIHRydWUpOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoYmFzZTo6VGltZURlbHRhIHN0YXJ0X3RpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJ1ZmZlcnNfdG9fYXBwZW5kKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhidWZmZXJzX3RvX2FwcGVuZCwgdHJ1ZSwgc3RhcnRfdGltZXN0YW1wLCBmYWxzZSwgdHJ1ZSk7Ci0gIH0KLQotICB2b2lkIEFwcGVuZEJ1ZmZlcnMoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1ZmZlcnNfdG9fYXBwZW5kKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhidWZmZXJzX3RvX2FwcGVuZCwgZmFsc2UsIGtOb1RpbWVzdGFtcCwgZmFsc2UsIHRydWUpOwotICB9Ci0KLSAgdm9pZCBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZShjb25zdCBzdGQ6OnN0cmluZyYgYnVmZmVyc190b19hcHBlbmQpIHsKLSAgICBBcHBlbmRCdWZmZXJzKGJ1ZmZlcnNfdG9fYXBwZW5kLCB0cnVlLCBrTm9UaW1lc3RhbXAsIHRydWUsIHRydWUpOwotICB9Ci0KLSAgdm9pZCBBcHBlbmRCdWZmZXJzT25lQnlPbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1ZmZlcnNfdG9fYXBwZW5kKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhidWZmZXJzX3RvX2FwcGVuZCwgZmFsc2UsIGtOb1RpbWVzdGFtcCwgdHJ1ZSwgdHJ1ZSk7Ci0gIH0KLQotICB2b2lkIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZF9FeHBlY3RGYWlsdXJlKAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGJ1ZmZlcnNfdG9fYXBwZW5kKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhidWZmZXJzX3RvX2FwcGVuZCwgdHJ1ZSwga05vVGltZXN0YW1wLCBmYWxzZSwgZmFsc2UpOwotICB9Ci0KLSAgdm9pZCBBcHBlbmRCdWZmZXJzX0V4cGVjdEZhaWx1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1ZmZlcnNfdG9fYXBwZW5kKSB7Ci0gICAgQXBwZW5kQnVmZmVycyhidWZmZXJzX3RvX2FwcGVuZCwgZmFsc2UsIGtOb1RpbWVzdGFtcCwgZmFsc2UsIGZhbHNlKTsKLSAgfQotCi0gIHZvaWQgU2VlayhpbnQgcG9zaXRpb24pIHsgc3RyZWFtXy0+U2Vlayhwb3NpdGlvbiAqIGZyYW1lX2R1cmF0aW9uXyk7IH0KLQotICB2b2lkIFNlZWtUb1RpbWVzdGFtcE1zKGludDY0X3QgdGltZXN0YW1wX21zKSB7Ci0gICAgc3RyZWFtXy0+U2VlayhiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHModGltZXN0YW1wX21zKSk7Ci0gIH0KLQotICBib29sIEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoaW50IHBvc2l0aW9uLCBpbnQgbmV3RGF0YUJ1ZmZlcnMpIHsKLSAgICByZXR1cm4gc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShwb3NpdGlvbiAqIGZyYW1lX2R1cmF0aW9uXyksCi0gICAgICAgIG5ld0RhdGFCdWZmZXJzICoga0RhdGFTaXplKTsKLSAgfQotCi0gIHZvaWQgUmVtb3ZlSW5NcyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBkdXJhdGlvbikgewotICAgIFJlbW92ZShiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoc3RhcnQpLAotICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoZW5kKSwKLSAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGR1cmF0aW9uKSk7Ci0gIH0KLQotICB2b2lkIFJlbW92ZShiYXNlOjpUaW1lRGVsdGEgc3RhcnQsIGJhc2U6OlRpbWVEZWx0YSBlbmQsCi0gICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgewotICAgIHN0cmVhbV8tPlJlbW92ZShzdGFydCwgZW5kLCBkdXJhdGlvbik7Ci0gIH0KLQotICB2b2lkIFNpZ25hbFN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoYmFzZTo6VGltZURlbHRhIHN0YXJ0X3RpbWVzdGFtcCkgewotICAgIHN0cmVhbV8tPk9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cCgKLSAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShzdGFydF90aW1lc3RhbXApKTsKLSAgfQotCi0gIGludCBHZXRSZW1vdmFsUmFuZ2VJbk1zKGludCBzdGFydCwgaW50IGVuZCwgaW50IGJ5dGVzX3RvX2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcmVtb3ZhbF9lbmQpIHsKLSAgICBEZWNvZGVUaW1lc3RhbXAgcmVtb3ZhbF9lbmRfdGltZXN0YW1wID0KLSAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKCpyZW1vdmFsX2VuZCk7Ci0gICAgaW50IGJ5dGVzX3JlbW92ZWQgPQotICAgICAgICBzdHJlYW1fLT5HZXRSZW1vdmFsUmFuZ2UoRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKHN0YXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyhlbmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdG9fZnJlZSwgJnJlbW92YWxfZW5kX3RpbWVzdGFtcCk7Ci0gICAgKnJlbW92YWxfZW5kID0gcmVtb3ZhbF9lbmRfdGltZXN0YW1wLkluTWlsbGlzZWNvbmRzKCk7Ci0gICAgcmV0dXJuIGJ5dGVzX3JlbW92ZWQ7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRSYW5nZXMoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gciA9IHN0cmVhbV8tPkdldEJ1ZmZlcmVkVGltZSgpOwotCi0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gICAgc3MgPDwgInsgIjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHIuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGludDY0X3Qgc3RhcnQgPSAoci5zdGFydChpKSAvIGZyYW1lX2R1cmF0aW9uXyk7Ci0gICAgICBpbnQ2NF90IGVuZCA9IChyLmVuZChpKSAvIGZyYW1lX2R1cmF0aW9uXykgLSAxOwotICAgICAgc3MgPDwgIlsiIDw8IHN0YXJ0IDw8ICIsIiA8PCBlbmQgPDwgIikgIjsKLSAgICB9Ci0gICAgc3MgPDwgIn0iOwotICAgIEVYUEVDVF9FUShleHBlY3RlZCwgc3Muc3RyKCkpOwotICB9Ci0KLSAgdm9pZCBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gciA9IHN0cmVhbV8tPkdldEJ1ZmZlcmVkVGltZSgpOwotCi0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gICAgc3MgPDwgInsgIjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHIuc2l6ZSgpOyArK2kpIHsKLSAgICAgIGludDY0X3Qgc3RhcnQgPSByLnN0YXJ0KGkpLkluTWlsbGlzZWNvbmRzKCk7Ci0gICAgICBpbnQ2NF90IGVuZCA9IHIuZW5kKGkpLkluTWlsbGlzZWNvbmRzKCk7Ci0gICAgICBzcyA8PCAiWyIgPDwgc3RhcnQgPDwgIiwiIDw8IGVuZCA8PCAiKSAiOwotICAgIH0KLSAgICBzcyA8PCAifSI7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBzcy5zdHIoKSk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGludCBzdGFydGluZ19wb3NpdGlvbiwgaW50IGVuZGluZ19wb3NpdGlvbikgewotICAgIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBlbmRpbmdfcG9zaXRpb24sIGZhbHNlLCBOVUxMLCAwKTsKLSAgfQotCi0gIHZvaWQgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoaW50IHN0YXJ0aW5nX3Bvc2l0aW9uLCBpbnQgZW5kaW5nX3Bvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZXhwZWN0X2tleWZyYW1lKSB7Ci0gICAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoc3RhcnRpbmdfcG9zaXRpb24sIGVuZGluZ19wb3NpdGlvbiwgZXhwZWN0X2tleWZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOwotICB9Ci0KLSAgdm9pZCBDaGVja0V4cGVjdGVkQnVmZmVycyhpbnQgc3RhcnRpbmdfcG9zaXRpb24sIGludCBlbmRpbmdfcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSkgewotICAgIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBlbmRpbmdfcG9zaXRpb24sIGZhbHNlLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgIGtEYXRhU2l6ZSk7Ci0gIH0KLQotICB2b2lkIENoZWNrRXhwZWN0ZWRCdWZmZXJzKGludCBzdGFydGluZ19wb3NpdGlvbiwgaW50IGVuZGluZ19wb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBib29sIGV4cGVjdF9rZXlmcmFtZSkgewotICAgIENoZWNrRXhwZWN0ZWRCdWZmZXJzKHN0YXJ0aW5nX3Bvc2l0aW9uLCBlbmRpbmdfcG9zaXRpb24sIGV4cGVjdF9rZXlmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCBrRGF0YVNpemUpOwotICB9Ci0KLSAgdm9pZCBDaGVja0V4cGVjdGVkQnVmZmVycyhpbnQgc3RhcnRpbmdfcG9zaXRpb24sIGludCBlbmRpbmdfcG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleHBlY3Rfa2V5ZnJhbWUsIGNvbnN0IHVpbnQ4X3QqIGV4cGVjdGVkX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkX3NpemUpIHsKLSAgICBpbnQgY3VycmVudF9wb3NpdGlvbiA9IHN0YXJ0aW5nX3Bvc2l0aW9uOwotICAgIGZvciAoOyBjdXJyZW50X3Bvc2l0aW9uIDw9IGVuZGluZ19wb3NpdGlvbjsgY3VycmVudF9wb3NpdGlvbisrKSB7Ci0gICAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyOwotICAgICAgU291cmNlQnVmZmVyU3RyZWFtOjpTdGF0dXMgc3RhdHVzID0gc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKTsKLQotICAgICAgRVhQRUNUX05FKHN0YXR1cywgU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlKTsKLSAgICAgIGlmIChzdGF0dXMgIT0gU291cmNlQnVmZmVyU3RyZWFtOjprU3VjY2VzcykgYnJlYWs7Ci0KLSAgICAgIGlmIChleHBlY3Rfa2V5ZnJhbWUgJiYgY3VycmVudF9wb3NpdGlvbiA9PSBzdGFydGluZ19wb3NpdGlvbikKLSAgICAgICAgRVhQRUNUX1RSVUUoYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0KLSAgICAgIGlmIChleHBlY3RlZF9kYXRhKSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFjdHVhbF9kYXRhID0gYnVmZmVyLT5kYXRhKCk7Ci0gICAgICAgIGNvbnN0IGludCBhY3R1YWxfc2l6ZSA9IGJ1ZmZlci0+ZGF0YV9zaXplKCk7Ci0gICAgICAgIEVYUEVDVF9FUShleHBlY3RlZF9zaXplLCBhY3R1YWxfc2l6ZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RkOjptaW4oYWN0dWFsX3NpemUsIGV4cGVjdGVkX3NpemUpOyBpKyspIHsKLSAgICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfZGF0YVtpXSwgYWN0dWFsX2RhdGFbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEVYUEVDVF9FUShidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpIC8gZnJhbWVfZHVyYXRpb25fLAotICAgICAgICAgICAgICAgIGN1cnJlbnRfcG9zaXRpb24pOwotICAgIH0KLQotICAgIEVYUEVDVF9FUShlbmRpbmdfcG9zaXRpb24gKyAxLCBjdXJyZW50X3Bvc2l0aW9uKTsKLSAgfQotCi0gIHZvaWQgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkKSB7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRpbWVzdGFtcHMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgICAgZXhwZWN0ZWQsICIgIiwgYmFzZTo6VFJJTV9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX0FMTCk7Ci0gICAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0gICAgY29uc3QgU291cmNlQnVmZmVyU3RyZWFtOjpUeXBlIHR5cGUgPSBzdHJlYW1fLT5HZXRUeXBlKCk7Ci0gICAgYmFzZTo6VGltZURlbHRhIGFjdGl2ZV9zcGxpY2VfdGltZXN0YW1wID0ga05vVGltZXN0YW1wOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGltZXN0YW1wcy5zaXplKCk7IGkrKykgewotICAgICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlcjsKLSAgICAgIFNvdXJjZUJ1ZmZlclN0cmVhbTo6U3RhdHVzIHN0YXR1cyA9IHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlcik7Ci0KLSAgICAgIGlmIChpID4gMCkgc3MgPDwgIiAiOwotCi0gICAgICBpZiAoc3RhdHVzID09IFNvdXJjZUJ1ZmZlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZSkgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICBjYXNlIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1ZpZGVvOgotICAgICAgICAgICAgc3RyZWFtXy0+R2V0Q3VycmVudFZpZGVvRGVjb2RlckNvbmZpZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTb3VyY2VCdWZmZXJTdHJlYW06OmtBdWRpbzoKLSAgICAgICAgICAgIHN0cmVhbV8tPkdldEN1cnJlbnRBdWRpb0RlY29kZXJDb25maWcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU291cmNlQnVmZmVyU3RyZWFtOjprVGV4dDoKLSAgICAgICAgICAgIHN0cmVhbV8tPkdldEN1cnJlbnRUZXh0VHJhY2tDb25maWcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgRVhQRUNUX0VRKCJDIiwgdGltZXN0YW1wc1tpXSk7Ci0KLSAgICAgICAgc3MgPDwgIkMiOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgRVhQRUNUX0VRKFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3MsIHN0YXR1cyk7Ci0gICAgICBpZiAoc3RhdHVzICE9IFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3MpIGJyZWFrOwotCi0gICAgICBzcyA8PCBidWZmZXItPnRpbWVzdGFtcCgpLkluTWlsbGlzZWNvbmRzKCk7Ci0KLSAgICAgIGlmIChidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpICE9Ci0gICAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShidWZmZXItPnRpbWVzdGFtcCgpKSkgewotICAgICAgICBzcyA8PCAifCIgPDwgYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBkdXJhdGlvbiBpZiBleHBlY3RlZCB0aW1lc3RhbXAgY29udGFpbnMgaXQuCi0gICAgICBpZiAodGltZXN0YW1wc1tpXS5maW5kKCdEJykgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgc3MgPDwgIkQiIDw8IGJ1ZmZlci0+ZHVyYXRpb24oKS5Jbk1pbGxpc2Vjb25kcygpOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBkdXJhdGlvbiBlc3RpbWF0aW9uIGlmIGV4cGVjdGVkIHRpbWVzdGFtcCBjb250YWlucyBpdC4KLSAgICAgIGlmICh0aW1lc3RhbXBzW2ldLmZpbmQoJ0UnKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJgotICAgICAgICAgIGJ1ZmZlci0+aXNfZHVyYXRpb25fZXN0aW1hdGVkKCkpIHsKLSAgICAgICAgc3MgPDwgIkUiOwotICAgICAgfQotCi0gICAgICAvLyBIYW5kbGUgcHJlcm9sbCBidWZmZXJzLgotICAgICAgaWYgKGJhc2U6OkVuZHNXaXRoKHRpbWVzdGFtcHNbaV0sICJQIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0gICAgICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBwcmVyb2xsX2J1ZmZlcjsKLSAgICAgICAgcHJlcm9sbF9idWZmZXIuc3dhcChidWZmZXIpOwotCi0gICAgICAgIC8vIFdoZW4gYSBwcmVyb2xsIGJ1ZmZlciBpcyBlbmNvdW50ZXJlZCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZXF1ZXN0IG9uZQotICAgICAgICAvLyBtb3JlIGJ1ZmZlci4gIFRoZSBmaXJzdCBidWZmZXIgc2hvdWxkIG1hdGNoIHRoZSB0aW1lc3RhbXAgYW5kIGNvbmZpZwotICAgICAgICAvLyBvZiB0aGUgc2Vjb25kIGJ1ZmZlciwgZXhjZXB0IHRoYXQgaXRzIGRpc2NhcmRfcGFkZGluZygpIHNob3VsZCBiZSBpdHMKLSAgICAgICAgLy8gZHVyYXRpb24uCi0gICAgICAgIEFTU0VSVF9FUShTb3VyY2VCdWZmZXJTdHJlYW06OmtTdWNjZXNzLAotICAgICAgICAgICAgICAgICAgc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKSk7Ci0gICAgICAgIEFTU0VSVF9FUShidWZmZXItPkdldENvbmZpZ0lkKCksIHByZXJvbGxfYnVmZmVyLT5HZXRDb25maWdJZCgpKTsKLSAgICAgICAgQVNTRVJUX0VRKGJ1ZmZlci0+dHJhY2tfaWQoKSwgcHJlcm9sbF9idWZmZXItPnRyYWNrX2lkKCkpOwotICAgICAgICBBU1NFUlRfRVEoYnVmZmVyLT50aW1lc3RhbXAoKSwgcHJlcm9sbF9idWZmZXItPnRpbWVzdGFtcCgpKTsKLSAgICAgICAgQVNTRVJUX0VRKGJ1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCksCi0gICAgICAgICAgICAgICAgICBwcmVyb2xsX2J1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCkpOwotICAgICAgICBBU1NFUlRfRVEoa0luZmluaXRlRHVyYXRpb24sIHByZXJvbGxfYnVmZmVyLT5kaXNjYXJkX3BhZGRpbmcoKS5maXJzdCk7Ci0gICAgICAgIEFTU0VSVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgcHJlcm9sbF9idWZmZXItPmRpc2NhcmRfcGFkZGluZygpLnNlY29uZCk7Ci0gICAgICAgIEFTU0VSVF9UUlVFKGJ1ZmZlci0+aXNfa2V5X2ZyYW1lKCkpOwotCi0gICAgICAgIHNzIDw8ICJQIjsKLSAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLT5pc19rZXlfZnJhbWUoKSkgewotICAgICAgICBzcyA8PCAiSyI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFVudGlsIHRoZSBsYXN0IHNwbGljZSBmcmFtZSBpcyBzZWVuLCBpbmRpY2F0ZWQgYnkgYSBtYXRjaGluZyB0aW1lc3RhbXAsCi0gICAgICAvLyBhbGwgYnVmZmVycyBtdXN0IGhhdmUgdGhlIHNhbWUgc3BsaWNlX3RpbWVzdGFtcCgpLgotICAgICAgaWYgKGJ1ZmZlci0+dGltZXN0YW1wKCkgPT0gYWN0aXZlX3NwbGljZV90aW1lc3RhbXApIHsKLSAgICAgICAgQVNTRVJUX0VRKGJ1ZmZlci0+c3BsaWNlX3RpbWVzdGFtcCgpLCBrTm9UaW1lc3RhbXApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoYWN0aXZlX3NwbGljZV90aW1lc3RhbXAgPT0ga05vVGltZXN0YW1wIHx8Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9zcGxpY2VfdGltZXN0YW1wID09IGJ1ZmZlci0+c3BsaWNlX3RpbWVzdGFtcCgpKTsKLSAgICAgIH0KLQotICAgICAgYWN0aXZlX3NwbGljZV90aW1lc3RhbXAgPSBidWZmZXItPnNwbGljZV90aW1lc3RhbXAoKTsKLSAgICB9Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBzcy5zdHIoKSk7Ci0gIH0KLQotICB2b2lkIENoZWNrTm9OZXh0QnVmZmVyKCkgewotICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXI7Ci0gICAgRVhQRUNUX0VRKFNvdXJjZUJ1ZmZlclN0cmVhbTo6a05lZWRCdWZmZXIsIHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlcikpOwotICB9Ci0KLSAgdm9pZCBDaGVja0VPU1JlYWNoZWQoKSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlcjsKLSAgICBFWFBFQ1RfRVEoU291cmNlQnVmZmVyU3RyZWFtOjprRW5kT2ZTdHJlYW0sCi0gICAgICAgICAgICAgIHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlcikpOwotICB9Ci0KLSAgdm9pZCBDaGVja1ZpZGVvQ29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7Ci0gICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiBhY3R1YWwgPSBzdHJlYW1fLT5HZXRDdXJyZW50VmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0dWFsLk1hdGNoZXMoY29uZmlnKSkKLSAgICAgICAgPDwgIkV4cGVjdGVkOiAiIDw8IGNvbmZpZy5Bc0h1bWFuUmVhZGFibGVTdHJpbmcoKQotICAgICAgICA8PCAiXG5BY3R1YWw6ICIgPDwgYWN0dWFsLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwotICB9Ci0KLSAgdm9pZCBDaGVja0F1ZGlvQ29uZmlnKGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7Ci0gICAgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhY3R1YWwgPSBzdHJlYW1fLT5HZXRDdXJyZW50QXVkaW9EZWNvZGVyQ29uZmlnKCk7Ci0gICAgRVhQRUNUX1RSVUUoYWN0dWFsLk1hdGNoZXMoY29uZmlnKSkKLSAgICAgICAgPDwgIkV4cGVjdGVkOiAiIDw8IGNvbmZpZy5Bc0h1bWFuUmVhZGFibGVTdHJpbmcoKQotICAgICAgICA8PCAiXG5BY3R1YWw6ICIgPDwgYWN0dWFsLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwotICB9Ci0KLSAgYmFzZTo6VGltZURlbHRhIGZyYW1lX2R1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZnJhbWVfZHVyYXRpb25fOyB9Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclN0cmVhbT4gc3RyZWFtXzsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIHZpZGVvX2NvbmZpZ187Ci0gIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19jb25maWdfOwotICBzY29wZWRfcmVmcHRyPFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPj4gbWVkaWFfbG9nXzsKLQotIHByaXZhdGU6Ci0gIGJhc2U6OlRpbWVEZWx0YSBDb252ZXJ0VG9GcmFtZUR1cmF0aW9uKGludCBmcmFtZXNfcGVyX3NlY29uZCkgewotICAgIHJldHVybiBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoCi0gICAgICAgIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQgLyBmcmFtZXNfcGVyX3NlY29uZCk7Ci0gIH0KLQotICB2b2lkIEFwcGVuZEJ1ZmZlcnMoaW50IHN0YXJ0aW5nX3Bvc2l0aW9uLCBpbnQgbnVtYmVyX29mX2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGJlZ2luX2NvZGVkX2ZyYW1lX2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGZpcnN0X2J1ZmZlcl9vZmZzZXQsIGJvb2wgZXhwZWN0X3N1Y2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICAgIGlmIChiZWdpbl9jb2RlZF9mcmFtZV9ncm91cCkKLSAgICAgIHN0cmVhbV8tPk9uU3RhcnRPZkNvZGVkRnJhbWVHcm91cChEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKAotICAgICAgICAgIHN0YXJ0aW5nX3Bvc2l0aW9uICogZnJhbWVfZHVyYXRpb25fKSk7Ci0KLSAgICBpbnQga2V5ZnJhbWVfaW50ZXJ2YWwgPSBmcmFtZXNfcGVyX3NlY29uZF8gLyBrZXlmcmFtZXNfcGVyX3NlY29uZF87Ci0KLSAgICBCdWZmZXJRdWV1ZSBxdWV1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcl9vZl9idWZmZXJzOyBpKyspIHsKLSAgICAgIGludCBwb3NpdGlvbiA9IHN0YXJ0aW5nX3Bvc2l0aW9uICsgaTsKLSAgICAgIGJvb2wgaXNfa2V5ZnJhbWUgPSBwb3NpdGlvbiAlIGtleWZyYW1lX2ludGVydmFsID09IDA7Ci0gICAgICAvLyBCdWZmZXIgdHlwZSBhbmQgdHJhY2sgSUQgYXJlIG1lYW5pbmdsZXNzIHRvIHRoZXNlIHRlc3RzLgotICAgICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICAgICAgZGF0YSwgc2l6ZSwgaXNfa2V5ZnJhbWUsIERlbXV4ZXJTdHJlYW06OkFVRElPLCAwKTsKLSAgICAgIEFTU0VSVF9UUlVFKGJ1ZmZlcik7Ci0gICAgICBiYXNlOjpUaW1lRGVsdGEgdGltZXN0YW1wID0gZnJhbWVfZHVyYXRpb25fICogcG9zaXRpb247Ci0KLSAgICAgIGlmIChpID09IDApIHRpbWVzdGFtcCArPSBmaXJzdF9idWZmZXJfb2Zmc2V0OwotICAgICAgYnVmZmVyLT5TZXREZWNvZGVUaW1lc3RhbXAoCi0gICAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZSh0aW1lc3RhbXApKTsKLQotICAgICAgLy8gU2ltdWxhdGUgYW4gSUJCLi4uQkJQIHBhdHRlcm4gaW4gd2hpY2ggYWxsIEItZnJhbWVzIHJlZmVyZW5jZSBib3RoCi0gICAgICAvLyB0aGUgSS0gYW5kIFAtZnJhbWVzLiBGb3IgYSBHT1Agd2l0aCBwbGF5YmFjayBvcmRlciAxMjM0NSwgdGhpcyB3b3VsZAotICAgICAgLy8gcmVzdWx0IGluIGEgZGVjb2RlIHRpbWVzdGFtcCBvcmRlciBvZiAxNTIzNC4KLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBwcmVzZW50YXRpb25fdGltZXN0YW1wOwotICAgICAgaWYgKGlzX2tleWZyYW1lKSB7Ci0gICAgICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgICB9IGVsc2UgaWYgKChwb3NpdGlvbiAtIDEpICUga2V5ZnJhbWVfaW50ZXJ2YWwgPT0gMCkgewotICAgICAgICAvLyBUaGlzIGlzIHRoZSBQLWZyYW1lIChmaXJzdCBmcmFtZSBmb2xsb3dpbmcgdGhlIEktZnJhbWUpCi0gICAgICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgPQotICAgICAgICAgICAgKHRpbWVzdGFtcCArIGZyYW1lX2R1cmF0aW9uXyAqIChrZXlmcmFtZV9pbnRlcnZhbCAtIDIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXAgPSB0aW1lc3RhbXAgLSBmcmFtZV9kdXJhdGlvbl87Ci0gICAgICB9Ci0gICAgICBidWZmZXItPnNldF90aW1lc3RhbXAocHJlc2VudGF0aW9uX3RpbWVzdGFtcCk7Ci0gICAgICBidWZmZXItPnNldF9kdXJhdGlvbihmcmFtZV9kdXJhdGlvbl8pOwotCi0gICAgICBxdWV1ZS5wdXNoX2JhY2soYnVmZmVyKTsKLSAgICB9Ci0gICAgaWYgKCFxdWV1ZS5lbXB0eSgpKSBFWFBFQ1RfRVEoZXhwZWN0X3N1Y2Nlc3MsIHN0cmVhbV8tPkFwcGVuZChxdWV1ZSkpOwotICB9Ci0KLSAgdm9pZCBVcGRhdGVMYXN0QnVmZmVyRHVyYXRpb24oRGVjb2RlVGltZXN0YW1wIGN1cnJlbnRfZHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJRdWV1ZSogYnVmZmVycykgewotICAgIGlmIChidWZmZXJzLT5lbXB0eSgpIHx8IGJ1ZmZlcnMtPmJhY2soKS0+ZHVyYXRpb24oKSA+IGJhc2U6OlRpbWVEZWx0YSgpKQotICAgICAgcmV0dXJuOwotCi0gICAgRGVjb2RlVGltZXN0YW1wIGxhc3RfZHRzID0gYnVmZmVycy0+YmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBEQ0hFQ0soY3VycmVudF9kdHMgPj0gbGFzdF9kdHMpOwotICAgIGJ1ZmZlcnMtPmJhY2soKS0+c2V0X2R1cmF0aW9uKGN1cnJlbnRfZHRzIC0gbGFzdF9kdHMpOwotICB9Ci0KLSAgLy8gU3RyaW5nVG9CdWZmZXJRdWV1ZSgpIGFsbG93cyBmb3IgdGhlIGdlbmVyYXRpb24gb2YgU3RyZWFtUGFyc2VyQnVmZmVycyBmcm9tCi0gIC8vIGNvZGVkIHN0cmluZ3Mgb2YgdGltZXN0YW1wcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLgotICAvLwotICAvLyBTdXBwb3J0ZWQgc3ludGF4IChvcHRpb25zIG11c3QgYmUgaW4gdGhpcyBvcmRlcik6Ci0gIC8vIHBwW3xkZF1bRHp6XVtFXVtQXVtLXQotICAvLwotICAvLyBwcDoKLSAgLy8gR2VuZXJhdGVzIGEgU3RyZWFtUGFyc2VyQnVmZmVyIHdpdGggZGVjb2RlIGFuZCBwcmVzZW50YXRpb24gdGltZXN0YW1wIHh4LgotICAvLyBFLmcuLCAiMCAxIDIgMyIuCi0gIC8vCi0gIC8vIHBwfGRkOgotICAvLyBHZW5lcmF0ZXMgYSBTdHJlYW1QYXJzZXJCdWZmZXIgd2l0aCBwcmVzZW50YXRpb24gdGltZXN0YW1wIHBwIGFuZCBkZWNvZGUKLSAgLy8gdGltZXN0YW1wIGRkLiBFLmcuLCAiMHwwIDN8MSAxfDIgMnwzIi4KLSAgLy8KLSAgLy8gRHp6Ci0gIC8vIEV4cGxpY2l0bHkgZGVzY3JpYmUgdGhlIGR1cmF0aW9uIG9mIHRoZSBidWZmZXIuIHp6IHNwZWNpZmllcyB0aGUgZHVyYXRpb24KLSAgLy8gaW4gbWlsbGlzZWNvbmRzLiBJZiB0aGUgZHVyYXRpb24gaXNuJ3Qgc3BlY2lmaWVkIHdpdGggdGhpcyBzeW50YXgsIHRoZQotICAvLyBkdXJhdGlvbiBpcyBkZXJpdmVkIHVzaW5nIHRoZSB0aW1lc3RhbXAgZGVsdGEgYmV0d2VlbiB0aGlzIGJ1ZmZlciBhbmQgdGhlCi0gIC8vIG5leHQgYnVmZmVyLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZmluYWwgYnVmZmVyIHdpbGwgc2ltcGx5IGNvcHkgdGhlCi0gIC8vIGR1cmF0aW9uIG9mIHRoZSBwcmV2aW91cyBidWZmZXIuIElmIHRoZSBxdWV1ZSBvbmx5IGNvbnRhaW5zIDEgYnVmZmVyIHRoZW4KLSAgLy8gdGhlIGR1cmF0aW9uIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgd2l0aCB0aGlzIGZvcm1hdC4KLSAgLy8gRS5nLiAiMEQxMCAxMEQyMCIKLSAgLy8KLSAgLy8gRToKLSAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIGJ1ZmZlciBzaG91bGQgYmUgbWFya2VkIGFzIGNvbnRhaW5pbmcgYW4gKmVzdGltYXRlZCoKLSAgLy8gZHVyYXRpb24uIEUuZy4sICIwRDIwRSAyMCAyNUUgMzAiCi0gIC8vCi0gIC8vIFA6Ci0gIC8vIEluZGljYXRlcyB0aGUgYnVmZmVyIHdpdGggd2lsbCBhbHNvIGhhdmUgYSBwcmVyb2xsIGJ1ZmZlcgotICAvLyBhc3NvY2lhdGVkIHdpdGggaXQuIFRoZSBwcmVyb2xsIGJ1ZmZlciB3aWxsIGp1c3QgYmUgZHVtbXkgZGF0YS4KLSAgLy8gRS5nLiAiMFAgNSAxMCIKLSAgLy8KLSAgLy8gSzoKLSAgLy8gSW5kaWNhdGVzIHRoZSBidWZmZXIgaXMgYSBrZXlmcmFtZS4gRS5nLiwgIjBLIDF8MksgMnw0RDJLIDYgOCIuCi0gIC8vCi0gIC8vIFMoYSMgLi4uIHkjIHojKQotICAvLyBJbmRpY2F0ZXMgYSBzcGxpY2UgZnJhbWUgYnVmZmVyIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggdGltZXN0YW1wIHojLiAgVGhlCi0gIC8vIHByZWNlZGluZyB0aW1lc3RhbXBzIGEjIC4uLiB5IyB3aWxsIGJlIHRyZWF0ZWQgYXMgdGhlIGZhZGUgb3V0IHByZXJvbGwgZm9yCi0gIC8vIHRoZSBzcGxpY2UgZnJhbWUuICBJZiBhIHRpbWVzdGFtcCB3aXRoaW4gdGhlIHByZXJvbGwgZW5kcyB3aXRoIEMgdGhlIGNvbmZpZwotICAvLyBpZCB0byB1c2UgZm9yIHRoYXQgYW5kIHN1YnNlcXVlbnQgcHJlcm9sbCBhcHBlbmRzIGlzIGluY3JlbWVudGVkIGJ5IG9uZS4KLSAgLy8gVGhlIGNvbmZpZyBpZCBmb3Igbm9uLXNwbGljZSBmcmFtZSBhcHBlbmRzIHdpbGwgbm90IGJlIGFmZmVjdGVkLgotICBCdWZmZXJRdWV1ZSBTdHJpbmdUb0J1ZmZlclF1ZXVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBidWZmZXJzX3RvX2FwcGVuZCkgewotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0aW1lc3RhbXBzID0gYmFzZTo6U3BsaXRTdHJpbmcoCi0gICAgICAgIGJ1ZmZlcnNfdG9fYXBwZW5kLCAiICIsIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotCi0gICAgQ0hFQ0tfR1QodGltZXN0YW1wcy5zaXplKCksIDB1KTsKLQotICAgIGJvb2wgc3BsaWNlX2ZyYW1lID0gZmFsc2U7Ci0gICAgc2l6ZV90IHNwbGljZV9jb25maWdfaWQgPSBzdHJlYW1fLT5hcHBlbmRfY29uZmlnX2luZGV4XzsKLSAgICBCdWZmZXJRdWV1ZSBwcmVfc3BsaWNlX2J1ZmZlcnM7Ci0gICAgQnVmZmVyUXVldWUgYnVmZmVyczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbWVzdGFtcHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIGJvb2wgaXNfa2V5ZnJhbWUgPSBmYWxzZTsKLSAgICAgIGJvb2wgaGFzX3ByZXJvbGwgPSBmYWxzZTsKLSAgICAgIGJvb2wgbGFzdF9zcGxpY2VfZnJhbWUgPSBmYWxzZTsKLSAgICAgIGJvb2wgaXNfZHVyYXRpb25fZXN0aW1hdGVkID0gZmFsc2U7Ci0KLSAgICAgIC8vIEhhbmRsZSBzcGxpY2UgZnJhbWUgc3RhcnRzLgotICAgICAgaWYgKGJhc2U6OlN0YXJ0c1dpdGgodGltZXN0YW1wc1tpXSwgIlMoIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpIHsKLSAgICAgICAgQ0hFQ0soIXNwbGljZV9mcmFtZSk7Ci0gICAgICAgIHNwbGljZV9mcmFtZSA9IHRydWU7Ci0gICAgICAgIC8vIFJlbW92ZSB0aGUgIlMoIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMiwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoc3BsaWNlX2ZyYW1lICYmCi0gICAgICAgICAgYmFzZTo6RW5kc1dpdGgodGltZXN0YW1wc1tpXSwgIikiLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICBzcGxpY2VfZnJhbWUgPSBmYWxzZTsKLSAgICAgICAgbGFzdF9zcGxpY2VfZnJhbWUgPSB0cnVlOwotICAgICAgICAvLyBSZW1vdmUgdGhlICIpIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMCwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSAtIDEpOwotICAgICAgfQotICAgICAgLy8gSGFuZGxlIGNvbmZpZyBjaGFuZ2VzIHdpdGhpbiB0aGUgc3BsaWNlIGZyYW1lLgotICAgICAgaWYgKHNwbGljZV9mcmFtZSAmJgotICAgICAgICAgIGJhc2U6OkVuZHNXaXRoKHRpbWVzdGFtcHNbaV0sICJDIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpIHsKLSAgICAgICAgc3BsaWNlX2NvbmZpZ19pZCsrOwotICAgICAgICBDSEVDSyhzcGxpY2VfY29uZmlnX2lkIDwgc3RyZWFtXy0+YXVkaW9fY29uZmlnc18uc2l6ZSgpIHx8Ci0gICAgICAgICAgICAgIHNwbGljZV9jb25maWdfaWQgPCBzdHJlYW1fLT52aWRlb19jb25maWdzXy5zaXplKCkpOwotICAgICAgICAvLyBSZW1vdmUgdGhlICJDIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMCwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSAtIDEpOwotICAgICAgfQotICAgICAgaWYgKGJhc2U6OkVuZHNXaXRoKHRpbWVzdGFtcHNbaV0sICJLIiwgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpIHsKLSAgICAgICAgaXNfa2V5ZnJhbWUgPSB0cnVlOwotICAgICAgICAvLyBSZW1vdmUgdGhlICJLIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMCwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSAtIDEpOwotICAgICAgfQotICAgICAgLy8gSGFuZGxlIHByZXJvbGwgYnVmZmVycy4KLSAgICAgIGlmIChiYXNlOjpFbmRzV2l0aCh0aW1lc3RhbXBzW2ldLCAiUCIsIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKSB7Ci0gICAgICAgIGlzX2tleWZyYW1lID0gdHJ1ZTsKLSAgICAgICAgaGFzX3ByZXJvbGwgPSB0cnVlOwotICAgICAgICAvLyBSZW1vdmUgdGhlICJQIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMCwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSAtIDEpOwotICAgICAgfQotCi0gICAgICBpZiAoYmFzZTo6RW5kc1dpdGgodGltZXN0YW1wc1tpXSwgIkUiLCBiYXNlOjpDb21wYXJlQ2FzZTo6U0VOU0lUSVZFKSkgewotICAgICAgICBpc19kdXJhdGlvbl9lc3RpbWF0ZWQgPSB0cnVlOwotICAgICAgICAvLyBSZW1vdmUgdGhlICJFIiBvZmYgb2YgdGhlIHRva2VuLgotICAgICAgICB0aW1lc3RhbXBzW2ldID0gdGltZXN0YW1wc1tpXS5zdWJzdHIoMCwgdGltZXN0YW1wc1tpXS5sZW5ndGgoKSAtIDEpOwotICAgICAgfQotCi0gICAgICBpbnQgZHVyYXRpb25faW5fbXMgPSAwOwotICAgICAgc2l6ZV90IGR1cmF0aW9uX3BvcyA9IHRpbWVzdGFtcHNbaV0uZmluZCgnRCcpOwotICAgICAgaWYgKGR1cmF0aW9uX3BvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBDSEVDSyhiYXNlOjpTdHJpbmdUb0ludCh0aW1lc3RhbXBzW2ldLnN1YnN0cihkdXJhdGlvbl9wb3MgKyAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1cmF0aW9uX2luX21zKSk7Ci0gICAgICAgIHRpbWVzdGFtcHNbaV0gPSB0aW1lc3RhbXBzW2ldLnN1YnN0cigwLCBkdXJhdGlvbl9wb3MpOwotICAgICAgfQotCi0gICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYnVmZmVyX3RpbWVzdGFtcHMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgICAgICB0aW1lc3RhbXBzW2ldLCAifCIsIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOwotCi0gICAgICBpZiAoYnVmZmVyX3RpbWVzdGFtcHMuc2l6ZSgpID09IDEpCi0gICAgICAgIGJ1ZmZlcl90aW1lc3RhbXBzLnB1c2hfYmFjayhidWZmZXJfdGltZXN0YW1wc1swXSk7Ci0KLSAgICAgIENIRUNLX0VRKDJ1LCBidWZmZXJfdGltZXN0YW1wcy5zaXplKCkpOwotCi0gICAgICBpbnQgcHRzX2luX21zID0gMDsKLSAgICAgIGludCBkdHNfaW5fbXMgPSAwOwotICAgICAgQ0hFQ0soYmFzZTo6U3RyaW5nVG9JbnQoYnVmZmVyX3RpbWVzdGFtcHNbMF0sICZwdHNfaW5fbXMpKTsKLSAgICAgIENIRUNLKGJhc2U6OlN0cmluZ1RvSW50KGJ1ZmZlcl90aW1lc3RhbXBzWzFdLCAmZHRzX2luX21zKSk7Ci0KLSAgICAgIC8vIENyZWF0ZSBidWZmZXIuIEJ1ZmZlciB0eXBlIGFuZCB0cmFjayBJRCBhcmUgbWVhbmluZ2xlc3MgdG8gdGhlc2UgdGVzdHMuCi0gICAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyID0gU3RyZWFtUGFyc2VyQnVmZmVyOjpDb3B5RnJvbSgKLSAgICAgICAgICAma0RhdGFBLCBrRGF0YVNpemUsIGlzX2tleWZyYW1lLCBEZW11eGVyU3RyZWFtOjpBVURJTywgMCk7Ci0gICAgICBBU1NFUlRfVFJVRShidWZmZXIpOwotICAgICAgYnVmZmVyLT5zZXRfdGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhwdHNfaW5fbXMpKTsKLSAgICAgIGJ1ZmZlci0+c2V0X2lzX2R1cmF0aW9uX2VzdGltYXRlZChpc19kdXJhdGlvbl9lc3RpbWF0ZWQpOwotCi0gICAgICBpZiAoZHRzX2luX21zICE9IHB0c19pbl9tcykgewotICAgICAgICBidWZmZXItPlNldERlY29kZVRpbWVzdGFtcCgKLSAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyhkdHNfaW5fbXMpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGR1cmF0aW9uX2luX21zKQotICAgICAgICBidWZmZXItPnNldF9kdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoZHVyYXRpb25faW5fbXMpKTsKLQotICAgICAgLy8gU2ltdWxhdGUgcHJlcm9sbCBidWZmZXJzIGJ5IGp1c3QgZ2VuZXJhdGluZyBhbm90aGVyIGJ1ZmZlciBhbmQgc3RpY2tpbmcKLSAgICAgIC8vIGl0IGFzIHRoZSBwcmVyb2xsLgotICAgICAgaWYgKGhhc19wcmVyb2xsKSB7Ci0gICAgICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBwcmVyb2xsX2J1ZmZlciA9Ci0gICAgICAgICAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKCZrRGF0YUEsIGtEYXRhU2l6ZSwgaXNfa2V5ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbXV4ZXJTdHJlYW06OkFVRElPLCAwKTsKLSAgICAgICAgQVNTRVJUX1RSVUUocHJlcm9sbF9idWZmZXIpOwotICAgICAgICBwcmVyb2xsX2J1ZmZlci0+c2V0X2R1cmF0aW9uKGZyYW1lX2R1cmF0aW9uXyk7Ci0gICAgICAgIGJ1ZmZlci0+U2V0UHJlcm9sbEJ1ZmZlcihwcmVyb2xsX2J1ZmZlcik7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzcGxpY2VfZnJhbWUpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgc3BsaWNlIGZyYW1lcyBhcmVuJ3QgdXNlZCB3aXRoIGNvbnRlbnQgd2hlcmUgZGVjb2RlCi0gICAgICAgIC8vIGFuZCBwcmVzZW50YXRpb24gdGltZXN0YW1wcyBjYW4gZGlmZmVyLiAoaS5lLiwgQi1mcmFtZXMpCi0gICAgICAgIENIRUNLX0VRKGJ1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCkuSW5NaWNyb3NlY29uZHMoKSwKLSAgICAgICAgICAgICAgICAgYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpKTsKLSAgICAgICAgaWYgKCFwcmVfc3BsaWNlX2J1ZmZlcnMuZW1wdHkoKSkgewotICAgICAgICAgIC8vIEVuZm9yY2Ugc3RyaWN0bHkgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWVzdGFtcHMuCi0gICAgICAgICAgQ0hFQ0tfR1QoYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pY3Jvc2Vjb25kcygpLAotICAgICAgICAgICAgICAgICAgIHByZV9zcGxpY2VfYnVmZmVycy5iYWNrKCktPnRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkpOwotICAgICAgICAgIENIRUNLX0dUKAotICAgICAgICAgICAgICBidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCksCi0gICAgICAgICAgICAgIHByZV9zcGxpY2VfYnVmZmVycy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpLkluTWljcm9zZWNvbmRzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJ1ZmZlci0+U2V0Q29uZmlnSWQoc3BsaWNlX2NvbmZpZ19pZCk7Ci0gICAgICAgIFVwZGF0ZUxhc3RCdWZmZXJEdXJhdGlvbihidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZV9zcGxpY2VfYnVmZmVycyk7Ci0gICAgICAgIHByZV9zcGxpY2VfYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChsYXN0X3NwbGljZV9mcmFtZSkgewotICAgICAgICAvLyBSZXF1aXJlIGF0IGxlYXN0IG9uZSBhZGRpdGlvbmFsIGJ1ZmZlciBmb3IgYSBzcGxpY2UuCi0gICAgICAgIENIRUNLKCFwcmVfc3BsaWNlX2J1ZmZlcnMuZW1wdHkoKSk7Ci0gICAgICAgIGJ1ZmZlci0+U2V0Q29uZmlnSWQoc3BsaWNlX2NvbmZpZ19pZCk7Ci0gICAgICAgIGJ1ZmZlci0+Q29udmVydFRvU3BsaWNlQnVmZmVyKHByZV9zcGxpY2VfYnVmZmVycyk7Ci0gICAgICAgIHByZV9zcGxpY2VfYnVmZmVycy5jbGVhcigpOwotICAgICAgfQotCi0gICAgICBVcGRhdGVMYXN0QnVmZmVyRHVyYXRpb24oYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKSwgJmJ1ZmZlcnMpOwotICAgICAgYnVmZmVycy5wdXNoX2JhY2soYnVmZmVyKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgbGFzdCBidWZmZXIgZG9lc24ndCBoYXZlIGEgZHVyYXRpb24sIGFzc3VtZSBpdCBpcyB0aGUKLSAgICAvLyBzYW1lIGFzIHRoZSBzZWNvbmQgdG8gbGFzdCBidWZmZXIuCi0gICAgaWYgKGJ1ZmZlcnMuc2l6ZSgpID49IDIgJiYKLSAgICAgICAgYnVmZmVycy5iYWNrKCktPmR1cmF0aW9uKCkgPD0gYmFzZTo6VGltZURlbHRhKCkpIHsKLSAgICAgIGJ1ZmZlcnMuYmFjaygpLT5zZXRfZHVyYXRpb24oYnVmZmVyc1tidWZmZXJzLnNpemUoKSAtIDJdLT5kdXJhdGlvbigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVyczsKLSAgfQotCi0gIHZvaWQgQXBwZW5kQnVmZmVycyhjb25zdCBzdGQ6OnN0cmluZyYgYnVmZmVyc190b19hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0X25ld19jb2RlZF9mcmFtZV9ncm91cCwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF90aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICBib29sIG9uZV9ieV9vbmUsIGJvb2wgZXhwZWN0X3N1Y2Nlc3MpIHsKLSAgICBCdWZmZXJRdWV1ZSBidWZmZXJzID0gU3RyaW5nVG9CdWZmZXJRdWV1ZShidWZmZXJzX3RvX2FwcGVuZCk7Ci0KLSAgICBpZiAoc3RhcnRfbmV3X2NvZGVkX2ZyYW1lX2dyb3VwKSB7Ci0gICAgICBiYXNlOjpUaW1lRGVsdGEgc3RhcnRfdGltZXN0YW1wID0gY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfdGltZXN0YW1wOwotICAgICAgaWYgKHN0YXJ0X3RpbWVzdGFtcCA9PSBrTm9UaW1lc3RhbXApCi0gICAgICAgIHN0YXJ0X3RpbWVzdGFtcCA9IGJ1ZmZlcnNbMF0tPnRpbWVzdGFtcCgpOwotCi0gICAgICBBU1NFUlRfVFJVRShzdGFydF90aW1lc3RhbXAgPD0gYnVmZmVyc1swXS0+dGltZXN0YW1wKCkpOwotCi0gICAgICBzdHJlYW1fLT5PblN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoCi0gICAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShzdGFydF90aW1lc3RhbXApKTsKLSAgICB9Ci0KLSAgICBpZiAoIW9uZV9ieV9vbmUpIHsKLSAgICAgIEVYUEVDVF9FUShleHBlY3Rfc3VjY2Vzcywgc3RyZWFtXy0+QXBwZW5kKGJ1ZmZlcnMpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBcHBlbmQgZWFjaCBidWZmZXIgb25lIGJ5IG9uZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJ1ZmZlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgIEJ1ZmZlclF1ZXVlIHdyYXBwZXI7Ci0gICAgICB3cmFwcGVyLnB1c2hfYmFjayhidWZmZXJzW2ldKTsKLSAgICAgIEVYUEVDVF9UUlVFKHN0cmVhbV8tPkFwcGVuZCh3cmFwcGVyKSk7Ci0gICAgfQotICB9Ci0KLSAgaW50IGZyYW1lc19wZXJfc2Vjb25kXzsKLSAgaW50IGtleWZyYW1lc19wZXJfc2Vjb25kXzsKLSAgYmFzZTo6VGltZURlbHRhIGZyYW1lX2R1cmF0aW9uXzsKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QpOwotfTsKLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEFwcGVuZF9TaW5nbGVSYW5nZSkgewotICAvLyBBcHBlbmQgMTUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTUpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDE0KSB9Iik7Ci0gIC8vIENoZWNrIGJ1ZmZlcnMgaW4gcmFuZ2UuCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDE0KTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEFwcGVuZF9TaW5nbGVSYW5nZV9PbmVCdWZmZXJBdEFUaW1lKSB7Ci0gIC8vIEFwcGVuZCAxNSBidWZmZXJzIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIDAsIG9uZSBidWZmZXIgYXQgYSB0aW1lLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMSk7Ci0gIGZvciAoaW50IGkgPSAxOyBpIDwgMTU7IGkrKykgQXBwZW5kQnVmZmVycyhpLCAxKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxNCkgfSIpOwotICAvLyBDaGVjayBidWZmZXJzIGluIHJhbmdlLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxNCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBcHBlbmRfRGlzam9pbnRSYW5nZXMpIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA1KTsKLQotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAyNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAxMCk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQpIFsxNSwyNCkgfSIpOwotICAvLyBDaGVjayBidWZmZXJzIGluIHJhbmdlcy4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgNCk7Ci0gIFNlZWsoMTUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMjQpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQXBwZW5kX0FkamFjZW50UmFuZ2VzKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDEwKTsKLQotICAvLyBBcHBlbmQgMTEgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAyNS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAxMSk7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAxNCB0byBicmlkZ2UgdGhlIGdhcC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCA1KTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyNSkgfSIpOwotICAvLyBDaGVjayBidWZmZXJzIGluIHJhbmdlLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAyNSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBDb21wbGV0ZV9PdmVybGFwKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSk7Ci0KLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDE1KTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxNCkgfSIpOwotICAvLyBDaGVjayBidWZmZXJzIGluIHJhbmdlLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxNCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIENvbXBsZXRlX092ZXJsYXBfQWZ0ZXJHcm91cFRpbWVzdGFtcEFuZEJlZm9yZUZpcnN0QnVmZmVyVGltZXN0YW1wKSB7Ci0gIC8vIEFwcGVuZCBhIGNvZGVkIGZyYW1lIGdyb3VwIHdpdGggYSBzdGFydCB0aW1lc3RhbXAgb2YgMCwgYnV0IHRoZSBmaXJzdAotICAvLyBidWZmZXIgc3RhcnRzIGF0IDMwbXMuIFRoaXMgY2FuIGhhcHBlbiBpbiBtdXhlZCBjb250ZW50IHdoZXJlIHRoZQotICAvLyBhdWRpbyBzdGFydHMgYmVmb3JlIHRoZSBmaXJzdCBmcmFtZS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMEsgNjBLIDkwSyAxMjBLIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE1MCkgfSIpOwotCi0gIC8vIENvbXBsZXRlbHkgb3ZlcmxhcCB0aGUgb2xkIGJ1ZmZlcnMsIHdpdGggYSBjb2RlZCBmcmFtZSBncm91cCB0aGF0IHN0YXJ0cwotICAvLyBhZnRlciB0aGUgb2xkIGNvZGVkIGZyYW1lIGdyb3VwIHN0YXJ0IHRpbWVzdGFtcCwgYnV0IGJlZm9yZSB0aGUgdGltZXN0YW1wCi0gIC8vIG9mIHRoZSBmaXJzdCBidWZmZXIgaW4gdGhlIGNvZGVkIGZyYW1lIGdyb3VwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjIwSyA1MEsgODBLIDExMEQxMEsiKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgYnVmZmVyZWQgcmFuZ2VzIGFyZSB1cGRhdGVkIHByb3Blcmx5IGFuZCB3ZSBkb24ndCBjcmFzaC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsyMCwxNTApIH0iKTsKLQotICBTZWVrVG9UaW1lc3RhbXBNcygyMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIyMEsgNTBLIDgwSyAxMTBLIDEyMEsiKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIENvbXBsZXRlX092ZXJsYXBfRWRnZUNhc2UpIHsKLSAgLy8gTWFrZSBlYWNoIGZyYW1lIGEga2V5ZnJhbWUgc28gdGhhdCBpdCdzIG9rYXkgdG8gb3ZlcmxhcCBmcmFtZXMgYXQgYW55IHBvaW50Ci0gIC8vIChpbnN0ZWFkIG9mIG5lZWRpbmcgdG8gcmVzcGVjdCBrZXlmcmFtZSBib3VuZGFyaWVzKS4KLSAgU2V0U3RyZWFtSW5mbygzMCwgMzApOwotCi0gIC8vIEFwcGVuZCA2IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDYgdGhyb3VnaCAxMS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDYsIDYpOwotCi0gIC8vIEFwcGVuZCA4IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxMi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDgpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDEyKSB9Iik7Ci0gIC8vIENoZWNrIGJ1ZmZlcnMgaW4gcmFuZ2UuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDEyKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFN0YXJ0X092ZXJsYXApIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDUpOwotCi0gIC8vIEFwcGVuZCA2IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgNik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsMTUpIH0iKTsKLSAgLy8gQ2hlY2sgYnVmZmVycyBpbiByYW5nZS4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgMTUpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgRW5kX092ZXJsYXApIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMTApOwotCi0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxMCk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsMTkpIH0iKTsKLSAgLy8gQ2hlY2sgYnVmZmVycyBpbiByYW5nZS4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgMTkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgRW5kX092ZXJsYXBfU2V2ZXJhbCkgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAxOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAxMCk7Ci0KLSAgLy8gQXBwZW5kIDggYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDEyLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgOCk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzOiBzdHJlYW0gc2hvdWxkIG5vdCBoYXZlIGtlcHQgYnVmZmVycyAxMyBhbmQgMTQKLSAgLy8gYmVjYXVzZSB0aGUga2V5ZnJhbWUgb24gd2hpY2ggdGhleSBkZXBlbmRlZCB3YXMgb3ZlcndyaXR0ZW4uCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsMTIpIFsxNSwxOSkgfSIpOwotCi0gIC8vIENoZWNrIGJ1ZmZlcnMgaW4gcmFuZ2UuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDEyKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICBTZWVrKDE5KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTUsIDE5KTsKLX0KLQotLy8gVGVzdCBhbiBlbmQgb3ZlcmxhcCBlZGdlIGNhc2Ugd2hlcmUgYSBzaW5nbGUgYnVmZmVyIG92ZXJsYXBzIHRoZQotLy8gYmVnaW5uaW5nIG9mIGEgcmFuZ2UuCi0vLyBvbGQgIDogKjBLKiAgIDMwICAgNjAgICA5MCAgIDEyMEsgIDE1MAotLy8gbmV3ICA6ICowSyoKLS8vIGFmdGVyOiAqMEsqICAgICAgICAgICAgICAgICAqMTIwSyogMTUwSwotLy8gdHJhY2s6Ci1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgRW5kX092ZXJsYXBfU2luZ2xlQnVmZmVyKSB7Ci0gIC8vIFNlZWsgdG8gc3RhcnQgb2Ygc3RyZWFtLgotICBTZWVrVG9UaW1lc3RhbXBNcygwKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwIDEyMEsgMTUwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxODApIH0iKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBEMzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgWzEyMCwxODApIH0iKTsKLQotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIENvbXBsZXRlX092ZXJsYXBfU2V2ZXJhbCkgewotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggNi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDIpOwotCi0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMik7Ci0KLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAxNi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAyKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsNikgWzEwLDExKSBbMTUsMTYpIH0iKTsKLQotICAvLyBBcHBlbmQgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMjApOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDE5KSB9Iik7Ci0gIC8vIENoZWNrIGJ1ZmZlcnMgaW4gcmFuZ2UuCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDE5KTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIENvbXBsZXRlX092ZXJsYXBfU2V2ZXJhbF9UaGVuX01lcmdlKSB7Ci0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA2LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMik7Ci0KLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAxMS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAyKTsKLQotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyAxNSB0aHJvdWdoIDE2LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTUsIDIpOwotCi0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDIwIHRocm91Z2ggMjEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgyMCwgMik7Ci0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDIwKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMjEpIH0iKTsKLSAgLy8gQ2hlY2sgYnVmZmVycyBpbiByYW5nZS4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgMjEpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQ29tcGxldGVfT3ZlcmxhcF9TZWxlY3RlZCkgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gYnVmZmVyIGF0IHBvc2l0aW9uIDUuCi0gIFNlZWsoNSk7Ci0KLSAgLy8gUmVwbGFjZSBvbGQgZGF0YSB3aXRoIG5ldyBkYXRhLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHJhbmdlcyBhcmUgY29ycmVjdC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSwxNCkgfSIpOwotCi0gIC8vIENoZWNrIHRoYXQgZGF0YSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIG5ldyBkYXRhLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCAxNCwgJmtEYXRhQik7Ci19Ci0KLS8vIFRoaXMgdGVzdCBpcyB0ZXN0aW5nIHRoYXQgYSBjbGllbnQgY2FuIGFwcGVuZCBkYXRhIHRvIFNvdXJjZUJ1ZmZlclN0cmVhbSB0aGF0Ci0vLyBvdmVybGFwcyB0aGUgcmFuZ2UgZnJvbSB3aGljaCB0aGUgY2xpZW50IGlzIGN1cnJlbnRseSBncmFiYmluZyBidWZmZXJzLiBXZQotLy8gd291bGQgZXhwZWN0IHRoYXQgdGhlIFNvdXJjZUJ1ZmZlclN0cmVhbSB3b3VsZCByZXR1cm4gb2xkIGRhdGEgdW50aWwgaXQgaGl0cwotLy8gdGhlIGtleWZyYW1lIG9mIHRoZSBuZXcgZGF0YSwgYWZ0ZXIgd2hpY2ggaXQgd2lsbCByZXR1cm4gdGhlIG5ldyBkYXRhLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIENvbXBsZXRlX092ZXJsYXBfU2VsZWN0ZWRfVHJhY2tCdWZmZXIpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIGJ1ZmZlciBhdCBwb3NpdGlvbiA1IGFuZCBnZXQgbmV4dCBidWZmZXIuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDUsICZrRGF0YUEpOwotCi0gIC8vIERvIGEgY29tcGxldGUgb3ZlcmxhcCBieSBhcHBlbmRpbmcgMjAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMjAsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHJhbmdlIGlzIGNvcnJlY3QuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTkpIH0iKTsKLQotICAvLyBFeHBlY3Qgb2xkIGRhdGEgdXAgdW50aWwgbmV4dCBrZXlmcmFtZSBpbiBuZXcgZGF0YS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNiwgOSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMCwgJmtEYXRhQiwgdHJ1ZSk7Ci0KLSAgLy8gRXhwZWN0IHJlc3Qgb2YgZGF0YSB0byBiZSBuZXcuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDExLCAxOSwgJmtEYXRhQik7Ci0KLSAgLy8gU2VlayBiYWNrIHRvIGJlZ2lubmluZzsgYWxsIGRhdGEgc2hvdWxkIGJlIG5ldy4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgMTksICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHJhbmdlIGNvbnRpbnVlcyB0byBiZSBjb3JyZWN0LgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDE5KSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBDb21wbGV0ZV9PdmVybGFwX1NlbGVjdGVkX0VkZ2VDYXNlKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxMCwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gNSBhbmQgZ2V0IG5leHQgYnVmZmVyLgotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA1LCAma0RhdGFBKTsKLQotICAvLyBSZXBsYWNlIGV4aXN0aW5nIGRhdGEgd2l0aCBuZXcgZGF0YS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFCKTsKLQotICAvLyBDaGVjayByYW5nZXMgYXJlIGNvcnJlY3QuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsMTQpIH0iKTsKLQotICAvLyBFeHBlY3Qgb2xkIGRhdGEgdXAgdW50aWwgbmV4dCBrZXlmcmFtZSBpbiBuZXcgZGF0YS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNiwgOSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMCwgJmtEYXRhQiwgdHJ1ZSk7Ci0KLSAgLy8gRXhwZWN0IHJlc3Qgb2YgZGF0YSB0byBiZSBuZXcuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDExLCAxNCwgJmtEYXRhQik7Ci0KLSAgLy8gU2VlayBiYWNrIHRvIGJlZ2lubmluZzsgYWxsIGRhdGEgc2hvdWxkIGJlIG5ldy4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgMTQsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHJhbmdlIGNvbnRpbnVlcyB0byBiZSBjb3JyZWN0LgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDE0KSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBDb21wbGV0ZV9PdmVybGFwX1NlbGVjdGVkX011bHRpcGxlKSB7Ci0gIHN0YXRpYyBjb25zdCB1aW50OF90IGtEYXRhQyA9IDB4NTU7Ci0gIHN0YXRpYyBjb25zdCB1aW50OF90IGtEYXRhRCA9IDB4Nzc7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCA1LCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIGJ1ZmZlciBhdCBwb3NpdGlvbiA1IGFuZCBnZXQgbmV4dCBidWZmZXIuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDUsICZrRGF0YUEpOwotCi0gIC8vIFJlcGxhY2UgZXhpc3RpbmcgZGF0YSB3aXRoIG5ldyBkYXRhLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQik7Ci0KLSAgLy8gVGhlbiByZXBsYWNlIGl0IGFnYWluIHdpdGggZGlmZmVyZW50IGRhdGEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCA1LCAma0RhdGFDKTsKLQotICAvLyBOb3cgYXBwZW5kIDUgbmV3IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgNSwgJmtEYXRhQyk7Ci0KLSAgLy8gTm93IHJlcGxhY2UgYWxsIHRoZSBkYXRhIGVudGlyZWx5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUQpOwotCi0gIC8vIEV4cGVjdCBidWZmZXJzIDYgdGhyb3VnaCA5IHRvIGJlIERhdGFBLCBhbmQgdGhlIHJlbWFpbmluZwotICAvLyBidWZmZXJzIHRvIGJlIGtEYXRhRC4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNiwgOSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhRCk7Ci0KLSAgLy8gQXQgdGhpcyBwb2ludCB3ZSBjYW5ub3QgZnVsZmlsbCByZXF1ZXN0LgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIFNlZWsgYmFjayB0byBiZWdpbm5pbmc7IGFsbCBkYXRhIHNob3VsZCBiZSBuZXcuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDE0LCAma0RhdGFEKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFN0YXJ0X092ZXJsYXBfU2VsZWN0ZWQpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTAsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gNSwgdGhlbiBhZGQgYnVmZmVycyB0byBvdmVybGFwIGRhdGEgYXQgdGhhdCBwb3NpdGlvbi4KLSAgU2Vlayg1KTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFCKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxNCkgfSIpOwotCi0gIC8vIEJlY2F1c2Ugd2Ugc2Vla2VkIHRvIGEga2V5ZnJhbWUsIHRoZSBuZXh0IGJ1ZmZlcnMgc2hvdWxkIGFsbCBiZSBuZXcgZGF0YS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgMTQsICZrRGF0YUIpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgMTQsICZrRGF0YUIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU3RhcnRfT3ZlcmxhcF9TZWxlY3RlZF9UcmFja0J1ZmZlcikgewotICAvLyBBcHBlbmQgMTUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTUsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gMTAgYW5kIGdldCBidWZmZXIuCi0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTAsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgMTAgYnVmZmVycyBvZiBuZXcgZGF0YSBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAxOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAxMCwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTkpIH0iKTsKLQotICAvLyBUaGUgbmV4dCA0IGJ1ZmZlcnMgc2hvdWxkIGJlIGEgZnJvbSB0aGUgb2xkIGJ1ZmZlciwgZm9sbG93ZWQgYnkgYSBrZXlmcmFtZQotICAvLyBmcm9tIHRoZSBuZXcgZGF0YS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTEsIDE0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTUsIDE1LCAma0RhdGFCLCB0cnVlKTsKLQotICAvLyBUaGUgcmVzdCBvZiB0aGUgYnVmZmVycyBzaG91bGQgYmUgbmV3IGRhdGEuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDE2LCAxOSwgJmtEYXRhQik7Ci0KLSAgLy8gTm93IHNlZWsgdG8gdGhlIGJlZ2lubmluZzsgcG9zaXRpb25zIDAgdGhyb3VnaCA5IHNob3VsZCBiZSB0aGUgb3JpZ2luYWwKLSAgLy8gZGF0YSwgcG9zaXRpb25zIDEwIHRocm91Z2ggMTkgc2hvdWxkIGJlIHRoZSBuZXcgZGF0YS4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgOSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxOSwgJmtEYXRhQik7Ci0KLSAgLy8gTWFrZSBzdXJlIHJhbmdlIGlzIHN0aWxsIGNvcnJlY3QuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTkpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFN0YXJ0X092ZXJsYXBfU2VsZWN0ZWRfRWRnZUNhc2UpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFBKTsKLQotICBTZWVrKDEwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDEwLCAma0RhdGFBKTsKLQotICAvLyBOb3cgcmVwbGFjZSB0aGUgbGFzdCA1IGJ1ZmZlcnMgd2l0aCBuZXcgZGF0YS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCA1LCAma0RhdGFCKTsKLQotICAvLyBUaGUgbmV4dCA0IGJ1ZmZlcnMgc2hvdWxkIGJlIHRoZSBvcmlnaW5hbCBkYXRhLCBoZWxkIGluIHRoZSB0cmFjayBidWZmZXIuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDExLCAxNCwgJmtEYXRhQSk7Ci0KLSAgLy8gVGhlIG5leHQgYnVmZmVyIGlzIGF0IHBvc2l0aW9uIDE1LCBzbyB3ZSBzaG91bGQgZmFpbCB0byBmdWxmaWxsIHRoZQotICAvLyByZXF1ZXN0LgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIE5vdyBhcHBlbmQgZGF0YSBhdCAxNSB0aHJvdWdoIDE5IGFuZCBjaGVjayB0byBtYWtlIHN1cmUgaXQncyBjb3JyZWN0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTUsIDUsICZrRGF0YUIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTksICZrRGF0YUIpOwotCi0gIC8vIFNlZWsgdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlcmVkIHJhbmdlIGFuZCBjaGVjayBidWZmZXJzLgotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA5LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE5LCAma0RhdGFCKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSwxOSkgfSIpOwotfQotCi0vLyBUaGlzIHRlc3QgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG5ldyBidWZmZXJzIGVuZC1vdmVybGFwIGFuIGV4aXN0aW5nLCBzZWxlY3RlZAotLy8gcmFuZ2UsIGFuZCB0aGUgbmV4dCBidWZmZXIgaXMgYSBrZXlmcmFtZSB0aGF0J3MgYmVpbmcgb3ZlcmxhcHBlZCBieSBuZXcKLS8vIGJ1ZmZlcnMuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICAgICAgICAgICAqQSphIGEgYSBhIEEgYSBhIGEgYQotLy8gbmV3IMKgOiAgQiBiIGIgYiBiIEIgYiBiIGIgYgotLy8gYWZ0ZXI6ICBCIGIgYiBiIGIqQipiIGIgYiBiIEEgYSBhIGEgYQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxMCwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byBwb3NpdGlvbiA1LgotICBTZWVrKDUpOwotCi0gIC8vIE5vdyBhcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxMCwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTQpIH0iKTsKLQotICAvLyBCZWNhdXNlIHdlIHNlZWtlZCB0byBhIGtleWZyYW1lLCB0aGUgbmV4dCBidWZmZXJzIHNob3VsZCBiZSBuZXcuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDksICZrRGF0YUIpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA5LCAma0RhdGFCKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE0LCAma0RhdGFBKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBuZXcgYnVmZmVycyBlbmQtb3ZlcmxhcCBhbiBleGlzdGluZywgc2VsZWN0ZWQKLS8vIHJhbmdlLCBhbmQgdGhlIG5leHQgYnVmZmVyIGluIHRoZSByYW5nZSBpcyBhZnRlciB0aGUgbmV3bHkgYXBwZW5kZWQgYnVmZmVycy4KLS8vIEluIHRoaXMgcGFydGljdWxhciBjYXNlLCB0aGUgZW5kIG92ZXJsYXAgZG9lcyBub3QgcmVxdWlyZSBhIHNwbGl0LgotLy8KLS8vIGluZGV4OiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAKLS8vIG9sZCDCoDogICAgICAgICAgIHxBIGEgYSBhIGEgQSBhIGEqYSphfAotLy8gbmV3IMKgOiAgQiBiIGIgYiBiIEIgYiBiIGIgYgotLy8gYWZ0ZXI6IHxCIGIgYiBiIGIgQiBiIGIgYiBiIEEgYSBhKmEqYXwKLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBFbmRfT3ZlcmxhcF9TZWxlY3RlZF9BZnRlckVuZE9mTmV3XzEpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDEwLCB0aGVuIG1vdmUgdG8gcG9zaXRpb24gMTMuCi0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTIsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxMCwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTQpIH0iKTsKLQotICAvLyBNYWtlIHN1cmUgcmVzdCBvZiBkYXRhIGlzIGFzIGV4cGVjdGVkLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMywgMTQsICZrRGF0YUEpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA5LCAma0RhdGFCKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE0LCAma0RhdGFBKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBuZXcgYnVmZmVycyBlbmQtb3ZlcmxhcCBhbiBleGlzdGluZywgc2VsZWN0ZWQKLS8vIHJhbmdlLCBhbmQgdGhlIG5leHQgYnVmZmVyIGluIHRoZSByYW5nZSBpcyBhZnRlciB0aGUgbmV3bHkgYXBwZW5kZWQgYnVmZmVycy4KLS8vIEluIHRoaXMgcGFydGljdWxhciBjYXNlLCB0aGUgZW5kIG92ZXJsYXAgcmVxdWlyZXMgYSBzcGxpdCwgYW5kIHRoZSBuZXh0Ci0vLyBidWZmZXIgaXMgaW4gdGhlIHNwbGl0IHJhbmdlLgotLy8KLS8vIGluZGV4OiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAKLS8vIG9sZCDCoDogICAgICAgICAgIHxBIGEgYSBhIGEgQSBhIGEqYSphfAotLy8gbmV3IMKgOiAgQiBiIGIgYiBiIEIgYiBiCi0vLyBhZnRlcjogfEIgYiBiIGIgYiBCIGIgYnwgICB8QSBhIGEqYSphfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX0FmdGVyRW5kT2ZOZXdfMikgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gMTAsIHRoZW4gbW92ZSB0byBwb3NpdGlvbiAxMy4KLSAgU2VlaygxMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMiwgJmtEYXRhQSk7Ci0KLSAgLy8gTm93IGFwcGVuZCA4IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA3LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgOCwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDcpIFsxMCwxNCkgfSIpOwotCi0gIC8vIE1ha2Ugc3VyZSByZXN0IG9mIGRhdGEgaXMgYXMgZXhwZWN0ZWQuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEzLCAxNCwgJmtEYXRhQSk7Ci0KLSAgLy8gTWFrZSBzdXJlIGFsbCBkYXRhIGlzIGNvcnJlY3QuCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDcsICZrRGF0YUIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTQsICZrRGF0YUEpOwotfQotCi0vLyBUaGlzIHRlc3QgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG5ldyBidWZmZXJzIGVuZC1vdmVybGFwIGFuIGV4aXN0aW5nLCBzZWxlY3RlZAotLy8gcmFuZ2UsIGFuZCB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHJhbmdlIGlzIGFmdGVyIHRoZSBuZXdseSBhcHBlbmRlZCBidWZmZXJzLgotLy8gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBlbmQgb3ZlcmxhcCByZXF1aXJlcyBhIHNwbGl0LCBhbmQgdGhlIG5leHQKLS8vIGJ1ZmZlciB3YXMgaW4gYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBuZXcgZGF0YSBhbmQgdGhlIHNwbGl0IHJhbmdlLgotLy8KLS8vIGluZGV4OiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAKLS8vIG9sZCDCoDogICAgICAgICAgIHxBIGEgYSphKmEgQSBhIGEgYSBhfAotLy8gbmV3IMKgOiAgQiBiIGIgYiBiIEIgYiBiCi0vLyBhZnRlcjogfEIgYiBiIGIgYiBCIGIgYnwgICB8QSBhIGEgYSBhfAotLy8gdHJhY2s6ICAgICAgICAgICAgICAgICB8YSBhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX0FmdGVyRW5kT2ZOZXdfMykgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gNSwgdGhlbiBtb3ZlIHRvIHBvc2l0aW9uIDguCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDcsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgOCBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggNy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDgsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw3KSBbMTAsMTQpIH0iKTsKLQotICAvLyBDaGVjayBmb3IgZGF0YSBpbiB0aGUgdHJhY2sgYnVmZmVyLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg4LCA5LCAma0RhdGFBKTsKLSAgLy8gVGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciB0aGUgdHJhY2sgYnVmZmVyIHNob3VsZCBiZSBhIGtleWZyYW1lLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTAsICZrRGF0YUEsIHRydWUpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA3LCAma0RhdGFCKTsKLSAgU2VlaygxMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhQSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgbmV3IGJ1ZmZlcnMgZW5kLW92ZXJsYXAgYW4gZXhpc3RpbmcsIHNlbGVjdGVkCi0vLyByYW5nZSwgYW5kIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgcmFuZ2UgaXMgb3ZlcmxhcHBlZCBieSB0aGUgbmV3IGJ1ZmZlcnMuCi0vLyBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgdGhlIGVuZCBvdmVybGFwIGRvZXMgbm90IHJlcXVpcmUgYSBzcGxpdC4KLS8vCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICAgICAgICAgICB8QSBhIGEqYSphIEEgYSBhIGEgYXwKLS8vIG5ldyDCoDogIEIgYiBiIGIgYiBCIGIgYiBiIGIKLS8vIGFmdGVyOiB8QiBiIGIgYiBiIEIgYiBiIGIgYiBBIGEgYSBhIGF8Ci0vLyB0cmFjazogICAgICAgICAgICAgICAgIHxhIGF8Ci1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgRW5kX092ZXJsYXBfU2VsZWN0ZWRfT3ZlcmxhcHBlZEJ5TmV3XzEpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwLCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDUsIHRoZW4gbW92ZSB0byBwb3NpdGlvbiA4LgotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA3LCAma0RhdGFBKTsKLQotICAvLyBOb3cgYXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTAsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDE0KSB9Iik7Ci0KLSAgLy8gQ2hlY2sgZm9yIGRhdGEgaW4gdGhlIHRyYWNrIGJ1ZmZlci4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoOCwgOSwgJmtEYXRhQSk7Ci0gIC8vIFRoZSBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyYWNrIGJ1ZmZlciBzaG91bGQgYmUgYSBrZXlmcmFtZS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDEwLCAma0RhdGFBLCB0cnVlKTsKLQotICAvLyBNYWtlIHN1cmUgYWxsIGRhdGEgaXMgY29ycmVjdC4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgOSwgJmtEYXRhQik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhQSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgbmV3IGJ1ZmZlcnMgZW5kLW92ZXJsYXAgYW4gZXhpc3RpbmcsIHNlbGVjdGVkCi0vLyByYW5nZSwgYW5kIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgcmFuZ2UgaXMgb3ZlcmxhcHBlZCBieSB0aGUgbmV3IGJ1ZmZlcnMuCi0vLyBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgdGhlIGVuZCBvdmVybGFwIHJlcXVpcmVzIGEgc3BsaXQsIGFuZCB0aGUgbmV4dAotLy8ga2V5ZnJhbWUgYWZ0ZXIgdGhlIHRyYWNrIGJ1ZmZlciBpcyBpbiB0aGUgc3BsaXQgcmFuZ2UuCi0vLwotLy8gaW5kZXg6ICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMAotLy8gb2xkIMKgOiAgICAgICAgICAgfEEqYSphIGEgYSBBIGEgYSBhIGF8Ci0vLyBuZXcgwqA6ICBCIGIgYiBiIGIgQiBiCi0vLyBhZnRlcjogfEIgYiBiIGIgYiBCIGJ8ICAgICB8QSBhIGEgYSBhfAotLy8gdHJhY2s6ICAgICAgICAgICAgIHxhIGEgYSBhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX092ZXJsYXBwZWRCeU5ld18yKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxMCwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byBwb3NpdGlvbiA1LCB0aGVuIG1vdmUgdG8gcG9zaXRpb24gNi4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgNSwgJmtEYXRhQSk7Ci0KLSAgLy8gTm93IGFwcGVuZCA3IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA2LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNywgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDYpIFsxMCwxNCkgfSIpOwotCi0gIC8vIENoZWNrIGZvciBkYXRhIGluIHRoZSB0cmFjayBidWZmZXIuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDYsIDksICZrRGF0YUEpOwotICAvLyBUaGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0cmFjayBidWZmZXIgc2hvdWxkIGJlIGEga2V5ZnJhbWUuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMCwgJmtEYXRhQSwgdHJ1ZSk7Ci0KLSAgLy8gTWFrZSBzdXJlIGFsbCBkYXRhIGlzIGNvcnJlY3QuCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDYsICZrRGF0YUIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTQsICZrRGF0YUEpOwotfQotCi0vLyBUaGlzIHRlc3QgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG5ldyBidWZmZXJzIGVuZC1vdmVybGFwIGFuIGV4aXN0aW5nLCBzZWxlY3RlZAotLy8gcmFuZ2UsIGFuZCB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHJhbmdlIGlzIG92ZXJsYXBwZWQgYnkgdGhlIG5ldyBidWZmZXJzLgotLy8gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBlbmQgb3ZlcmxhcCByZXF1aXJlcyBhIHNwbGl0LCBhbmQgdGhlIG5leHQKLS8vIGtleWZyYW1lIGFmdGVyIHRoZSB0cmFjayBidWZmZXIgaXMgaW4gdGhlIHJhbmdlIHdpdGggdGhlIG5ldyBidWZmZXJzLgotLy8KLS8vIGluZGV4OiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAKLS8vIG9sZCDCoDogICAgICAgICAgIHxBKmEqYSBhIGEgQSBhIGEgYSBhIEEgYSBhIGEgYXwKLS8vIG5ldyDCoDogIEIgYiBiIGIgYiBCIGIgYiBiIGIgQiBiIGIKLS8vIGFmdGVyOiB8QiBiIGIgYiBiIEIgYiBiIGIgYiBCIGIgYnwgICB8QSBhIGEgYSBhfAotLy8gdHJhY2s6ICAgICAgICAgICAgIHxhIGEgYSBhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX092ZXJsYXBwZWRCeU5ld18zKSB7Ci0gIC8vIEFwcGVuZCAxNSBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxNSwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byBwb3NpdGlvbiA1LCB0aGVuIG1vdmUgdG8gcG9zaXRpb24gNi4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgNSwgJmtEYXRhQSk7Ci0KLSAgLy8gTm93IGFwcGVuZCAxMyBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggMTIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxMywgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDEyKSBbMTUsMTkpIH0iKTsKLQotICAvLyBDaGVjayBmb3IgZGF0YSBpbiB0aGUgdHJhY2sgYnVmZmVyLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg2LCA5LCAma0RhdGFBKTsKLSAgLy8gVGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciB0aGUgdHJhY2sgYnVmZmVyIHNob3VsZCBiZSBhIGtleWZyYW1lCi0gIC8vIGZyb20gdGhlIG5ldyBkYXRhLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTAsICZrRGF0YUIsIHRydWUpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxMiwgJmtEYXRhQik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgU2VlaygxNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDE1LCAxOSwgJmtEYXRhQSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgbmV3IGJ1ZmZlcnMgZW5kLW92ZXJsYXAgYW4gZXhpc3RpbmcsIHNlbGVjdGVkCi0vLyByYW5nZSwgYW5kIHRoZXJlIGlzIG5vIGtleWZyYW1lIGFmdGVyIHRoZSBlbmQgb2YgdGhlIG5ldyBidWZmZXJzLgotLy8gaW5kZXg6ICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMAotLy8gb2xkIMKgOiAgICAgICAgICAgfEEqYSphIGEgYXwKLS8vIG5ldyDCoDogIEIgYiBiIGIgYiBCCi0vLyBhZnRlcjogfEIgYiBiIGIgYiBCfAotLy8gdHJhY2s6ICAgICAgICAgICAgIHxhIGEgYSBhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX05vS2V5ZnJhbWVBZnRlck5ldykgewotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDUsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gNSwgdGhlbiBtb3ZlIHRvIHBvc2l0aW9uIDYuCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDUsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgNiBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggNS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDYsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDUpIH0iKTsKLQotICAvLyBDaGVjayBmb3IgZGF0YSBpbiB0aGUgdHJhY2sgYnVmZmVyLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg2LCA5LCAma0RhdGFBKTsKLQotICAvLyBOb3cgdGhlcmUncyBubyBkYXRhIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gTGV0J3MgZmlsbCBpbiB0aGUgZ2FwLCBidWZmZXJzIDYgdGhyb3VnaCAxMC4KLSAgQXBwZW5kQnVmZmVycyg2LCA1LCAma0RhdGFCKTsKLQotICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhlIG5leHQgYnVmZmVyLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTAsICZrRGF0YUIpOwotfQotCi0vLyBUaGlzIHRlc3QgY292ZXJzIHRoZSBjYXNlIHdoZXJlIG5ldyBidWZmZXJzIGVuZC1vdmVybGFwIGFuIGV4aXN0aW5nLCBzZWxlY3RlZAotLy8gcmFuZ2UsIGFuZCB0aGVyZSBpcyBubyBrZXlmcmFtZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBuZXcgYnVmZmVycywgdGhlbiB0aGUKLS8vIHJhbmdlIGdldHMgc3BsaXQuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICAgICAgICAgICAgICAgICAgICAgfEEgYSBhIGEgYSBBKmEqfAotLy8gbmV3IMKgOiAgICAgICAgICAgIEIgYiBiIGIgYiBCIGIgYiBiIGIgQgotLy8gYWZ0ZXI6ICAgICAgICAgICB8QiBiIGIgYiBiIEIgYiBiIGIgYiBCfAotLy8gbmV3IMKgOiAgQSBhIGEgYSBhIEEKLS8vIGFmdGVyOiB8QSBhIGEgYSBhIEF8ICAgICAgIHxCIGIgYiBiIGIgQnwKLS8vIHRyYWNrOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEVuZF9PdmVybGFwX1NlbGVjdGVkX05vS2V5ZnJhbWVBZnRlck5ldzIpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coMTMzKSk7Ci0KLSAgLy8gQXBwZW5kIDcgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAxNi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCA3LCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDE1LCB0aGVuIG1vdmUgdG8gcG9zaXRpb24gMTYuCi0gIFNlZWsoMTUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTUsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgMTEgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDE1LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTEsICZrRGF0YUIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDE1KSB9Iik7Ci0KLSAgLy8gTm93IGRvIGFub3RoZXIgZW5kLW92ZXJsYXAgdG8gc3BsaXQgdGhlIHJhbmdlIGludG8gdHdvIHBhcnRzLCB3aGVyZSB0aGUKLSAgLy8gMm5kIHJhbmdlIHNob3VsZCBoYXZlIHRoZSBuZXh0IGJ1ZmZlciBwb3NpdGlvbi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDYsICZrRGF0YUEpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDUpIFsxMCwxNSkgfSIpOwotCi0gIC8vIENoZWNrIGZvciBkYXRhIGluIHRoZSB0cmFjayBidWZmZXIuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDE2LCAxNiwgJmtEYXRhQSk7Ci0KLSAgLy8gTm93IHRoZXJlJ3Mgbm8gZGF0YSB0byBmdWxmaWxsIHRoZSByZXF1ZXN0LgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFkZCBkYXRhIHRvIHRoZSAybmQgcmFuZ2UsIHNob3VsZCBub3QgYmUgYWJsZSB0byBmdWxmaWxsIHRoZSBuZXh0IHJlYWQKLSAgLy8gdW50aWwgd2UndmUgYWRkZWQgYSBrZXlmcmFtZS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAxLCAma0RhdGFCKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgZm9yIChpbnQgaSA9IDE2OyBpIDw9IDE5OyBpKyspIHsKLSAgICBBcHBlbmRCdWZmZXJzKGksIDEsICZrRGF0YUIpOwotICAgIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0gIH0KLQotICAvLyBOb3cgYXBwZW5kIGEga2V5ZnJhbWUuCi0gIEFwcGVuZEJ1ZmZlcnMoMjAsIDEsICZrRGF0YUIpOwotCi0gIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGUgbmV4dCBidWZmZXIuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDIwLCAyMCwgJmtEYXRhQiwgdHJ1ZSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgbmV3IGJ1ZmZlcnMgZW5kLW92ZXJsYXAgYW4gZXhpc3RpbmcsIHNlbGVjdGVkCi0vLyByYW5nZSwgYW5kIHRoZSBuZXh0IGtleWZyYW1lIGluIGEgc2VwYXJhdGUgcmFuZ2UuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICAgICAgICAgICB8QSphKmEgYSBhfCAgICAgICAgICB8QSBhIGEgYSBhfAotLy8gbmV3IMKgOiAgQiBiIGIgYiBiIEIKLS8vIGFmdGVyOiB8QiBiIGIgYiBiIEJ8ICAgICAgICAgICAgICAgICAgfEEgYSBhIGEgYXwKLS8vIHRyYWNrOiAgICAgICAgICAgICB8YSBhIGEgYXwKLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBFbmRfT3ZlcmxhcF9TZWxlY3RlZF9Ob0tleWZyYW1lQWZ0ZXJOZXczKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQSk7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAxOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCA1LCAma0RhdGFBKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSw5KSBbMTUsMTkpIH0iKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDUsIHRoZW4gbW92ZSB0byBwb3NpdGlvbiA2LgotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA1LCAma0RhdGFBKTsKLQotICAvLyBOb3cgYXBwZW5kIDYgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA2LCAma0RhdGFCKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw1KSBbMTUsMTkpIH0iKTsKLQotICAvLyBDaGVjayBmb3IgZGF0YSBpbiB0aGUgdHJhY2sgYnVmZmVyLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg2LCA5LCAma0RhdGFBKTsKLQotICAvLyBOb3cgdGhlcmUncyBubyBkYXRhIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gTGV0J3MgZmlsbCBpbiB0aGUgZ2FwLCBidWZmZXJzIDYgdGhyb3VnaCAxNC4KLSAgQXBwZW5kQnVmZmVycyg2LCA5LCAma0RhdGFCKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxOSkgfSIpOwotCi0gIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGUgbmV4dCBidWZmZXIuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhQik7Ci0KLSAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZSBuZXh0IGJ1ZmZlci4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTUsIDE5LCAma0RhdGFBKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNvdmVycyB0aGUgY2FzZSB3aGVuIG5ldyBidWZmZXJzIG92ZXJsYXAgdGhlIG1pZGRsZSBvZiBhIHNlbGVjdGVkCi0vLyByYW5nZS4gVGhpcyB0ZXN0cyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIG5vIHNwbGl0IGFuZCB0aGUgbmV4dCBidWZmZXIgaXMgYQotLy8ga2V5ZnJhbWUuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICBBIGEgYSBhIGEqQSphIGEgYSBhIEEgYSBhIGEgYQotLy8gbmV3IMKgOiAgICAgICAgICAgIEIgYiBiIGIgYgotLy8gYWZ0ZXI6ICBBIGEgYSBhIGEqQipiIGIgYiBiIEEgYSBhIGEgYQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE1pZGRsZV9PdmVybGFwX1NlbGVjdGVkXzEpIHsKLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDE1LCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDUuCi0gIFNlZWsoNSk7Ci0KLSAgLy8gTm93IGFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTQpIH0iKTsKLQotICAvLyBDaGVjayBmb3IgbmV4dCBkYXRhOyBzaG91bGQgYmUgbmV3IGRhdGEuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDksICZrRGF0YUIpOwotCi0gIC8vIE1ha2Ugc3VyZSBhbGwgZGF0YSBpcyBjb3JyZWN0LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgOSwgJmtEYXRhQik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhQSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlbiBuZXcgYnVmZmVycyBvdmVybGFwIHRoZSBtaWRkbGUgb2YgYSBzZWxlY3RlZAotLy8gcmFuZ2UuIFRoaXMgdGVzdHMgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBzcGxpdCBhbmQgdGhlIG5leHQgYnVmZmVyIGlzCi0vLyBhZnRlciB0aGUgbmV3IGJ1ZmZlcnMuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICBBIGEgYSBhIGEgQSBhIGEgYSBhIEEqYSphIGEgYQotLy8gbmV3IMKgOiAgICAgICAgICAgIEIgYiBiIGIgYgotLy8gYWZ0ZXI6ICBBIGEgYSBhIGEgQiBiIGIgYiBiIEEqYSphIGEgYQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE1pZGRsZV9PdmVybGFwX1NlbGVjdGVkXzIpIHsKLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDE1LCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIDEwIHRoZW4gbW92ZSB0byBwb3NpdGlvbiAxMS4KLSAgU2VlaygxMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMCwgJmtEYXRhQSk7Ci0KLSAgLy8gTm93IGFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTQpIH0iKTsKLQotICAvLyBNYWtlIHN1cmUgZGF0YSBpcyBjb3JyZWN0LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMSwgMTQsICZrRGF0YUEpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgOSwgJmtEYXRhQik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgJmtEYXRhQSk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlbiBuZXcgYnVmZmVycyBvdmVybGFwIHRoZSBtaWRkbGUgb2YgYSBzZWxlY3RlZAotLy8gcmFuZ2UuIFRoaXMgdGVzdHMgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIHNwbGl0IGFuZCB0aGUgbmV4dCBidWZmZXIgaXMKLS8vIGJlZm9yZSB0aGUgbmV3IGJ1ZmZlcnMuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICBBIGEqYSphIGEgQSBhIGEgYSBhIEEgYSBhIGEgYQotLy8gbmV3IMKgOiAgICAgICAgICAgIEIgYiBiCi0vLyBhZnRlcjogIEEgYSphKmEgYSBCIGIgYnwgICB8QSBhIGEgYSBhCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgTWlkZGxlX092ZXJsYXBfU2VsZWN0ZWRfMykgewotICAvLyBBcHBlbmQgMTUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTUsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gYmVnaW5uaW5nIHRoZW4gbW92ZSB0byBwb3NpdGlvbiAyLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxLCAma0RhdGFBKTsKLQotICAvLyBOb3cgYXBwZW5kIDMgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDcuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAzLCAma0RhdGFCKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw3KSBbMTAsMTQpIH0iKTsKLQotICAvLyBNYWtlIHN1cmUgZGF0YSBpcyBjb3JyZWN0LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygyLCA0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgNywgJmtEYXRhQik7Ci0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTQsICZrRGF0YUEpOwotfQotCi0vLyBUaGlzIHRlc3QgY292ZXJzIHRoZSBjYXNlIHdoZW4gbmV3IGJ1ZmZlcnMgb3ZlcmxhcCB0aGUgbWlkZGxlIG9mIGEgc2VsZWN0ZWQKLS8vIHJhbmdlLiBUaGlzIHRlc3RzIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBzcGxpdCBhbmQgdGhlIG5leHQgYnVmZmVyIGlzIGFmdGVyCi0vLyB0aGUgbmV3IGJ1ZmZlcnMgYnV0IGJlZm9yZSB0aGUgc3BsaXQgcmFuZ2UuCi0vLyBpbmRleDogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwCi0vLyBvbGQgwqA6ICBBIGEgYSBhIGEgQSBhIGEqYSphIEEgYSBhIGEgYQotLy8gbmV3IMKgOiAgICAgICAgICAgIEIgYiBiCi0vLyBhZnRlcjogfEEgYSBhIGEgYSBCIGIgYnwgICB8QSBhIGEgYSBhfAotLy8gdHJhY2s6ICAgICAgICAgICAgICAgICB8YSBhfAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE1pZGRsZV9PdmVybGFwX1NlbGVjdGVkXzQpIHsKLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDE1LCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIDUgdGhlbiBtb3ZlIHRvIHBvc2l0aW9uIDguCi0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDcsICZrRGF0YUEpOwotCi0gIC8vIE5vdyBhcHBlbmQgMyBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggNy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDMsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDcpIFsxMCwxNCkgfSIpOwotCi0gIC8vIEJ1ZmZlcnMgOCBhbmQgOSBzaG91bGQgYmUgaW4gdGhlIHRyYWNrIGJ1ZmZlci4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoOCwgOSwgJmtEYXRhQSk7Ci0gIC8vIFRoZSBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyYWNrIGJ1ZmZlciBzaG91bGQgYmUgYSBrZXlmcmFtZS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDEwLCAma0RhdGFBLCB0cnVlKTsKLQotICAvLyBNYWtlIHN1cmUgYWxsIGRhdGEgaXMgY29ycmVjdC4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgNCwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDcsICZrRGF0YUIpOwotICBTZWVrKDEwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE0LCAma0RhdGFBKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE92ZXJsYXBfT25lQnlPbmUpIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBzdGFydGluZyBhdCAxMG1zLCAzMG1zIGFwYXJ0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMTBLIDQwIDcwIDEwMCAxMzAiKTsKLQotICAvLyBUaGUgcmFuZ2UgZW5kcyBhdCAxNjAsIGFjY291bnRpbmcgZm9yIHRoZSBsYXN0IGJ1ZmZlcidzIGR1cmF0aW9uLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwLDE2MCkgfSIpOwotCi0gIC8vIE92ZXJsYXAgd2l0aCAxMCBidWZmZXJzIHN0YXJ0aW5nIGF0IHRoZSBiZWdpbm5pbmcsIGFwcGVuZGVkIG9uZSBhdCBhCi0gIC8vIHRpbWUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxLCAma0RhdGFCKTsKLSAgZm9yIChpbnQgaSA9IDE7IGkgPCAxMDsgaSsrKSBBcHBlbmRCdWZmZXJzKGksIDEsICZrRGF0YUIpOwotCi0gIC8vIEFsbCBkYXRhIHNob3VsZCBiZSByZXBsYWNlZC4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw5KSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDksICZrRGF0YUIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgT3ZlcmxhcF9PbmVCeU9uZV9EZWxldGVHcm91cCkgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMTBLIDQwIDcwIDEwMCAxMzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byAxMzBtcy4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMTMwKTsKLQotICAvLyBPdmVybGFwIHdpdGggYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgZnJvbSAwIHRvIDEzMG1zLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMEsgMTIwRDEwIik7Ci0KLSAgLy8gTmV4dCBidWZmZXIgc2hvdWxkIHN0aWxsIGJlIDEzMG1zLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTMwSyIpOwotCi0gIC8vIENoZWNrIHRoZSBmaW5hbCBidWZmZXJzIGlzIGNvcnJlY3QuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMTIwIDEzMEsiKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE92ZXJsYXBfT25lQnlPbmVfQmV0d2VlbkNvZGVkRnJhbWVHcm91cHMpIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBzdGFydGluZyBhdCAxMTBtcywgMzBtcyBhcGFydC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjExMEsgMTQwIDE3MCAyMDAgMjMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTEwLDI2MCkgfSIpOwotCi0gIC8vIE5vdyBhcHBlbmQgMiBjb2RlZCBmcmFtZSBncm91cHMgZnJvbSAwbXMgdG8gMjEwbXMsIDMwbXMgYXBhcnQuIE5vdGUgdGhhdAotICAvLyB0aGUKLSAgLy8gb2xkIGtleWZyYW1lIDExMG1zIGZhbGxzIGluIGJldHdlZW4gdGhlc2UgdHdvIGdyb3Vwcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjBLIDMwIDYwIDkwIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIxMjBLIDE1MCAxODAgMjEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyNDApIH0iKTsKLQotICAvLyBDaGVjayB0aGUgZmluYWwgYnVmZmVycyBpcyBjb3JyZWN0OyB0aGUga2V5ZnJhbWUgYXQgMTEwbXMgc2hvdWxkIGJlCi0gIC8vIGRlbGV0ZWQuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgNjAgOTAgMTIwSyAxNTAgMTgwIDIxMCIpOwotfQotCi0vLyBvbGQgIDogICAxMEsgIDQwICAqNzAqICAxMDBLICAxMjUgIDEzMEsKLS8vIG5ldyAgOiAwSyAgIDMwICAgNjAgICA5MCAgIDEyMEsKLS8vIGFmdGVyOiAwSyAgIDMwICAgNjAgICA5MCAgKjEyMEsqICAgMTMwSwotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE92ZXJsYXBfT25lQnlPbmVfVHJhY2tCdWZmZXIpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coNTApKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMTBLIDQwIDcwIDEwMEsgMTI1IDEzMEQzMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIH0iKTsKLQotICAvLyBTZWVrIHRvIDcwbXMuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDcwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEwSyA0MCIpOwotCi0gIC8vIE92ZXJsYXAgd2l0aCBhIG5ldyBjb2RlZCBmcmFtZSBncm91cCBmcm9tIDAgdG8gMTMwbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIwSyAzMCA2MCA5MCAxMjBEMTBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNjApIH0iKTsKLQotICAvLyBTaG91bGQgcmV0dXJuIGZyYW1lIDcwbXMgZnJvbSB0aGUgdHJhY2sgYnVmZmVyLCB0aGVuIHN3aXRjaAotICAvLyB0byB0aGUgbmV3IGRhdGEgYXQgMTIwSywgdGhlbiBzd2l0Y2ggYmFjayB0byB0aGUgb2xkIGRhdGEgYXQgMTMwSy4gVGhlCi0gIC8vIGZyYW1lIGF0IDEyNW1zIHRoYXQgZGVwZW5kZWQgb24ga2V5ZnJhbWUgMTAwbXMgc2hvdWxkIGhhdmUgYmVlbiBkZWxldGVkLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygiNzAgMTIwSyAxMzBLIik7Ci0KLSAgLy8gQ2hlY2sgdGhlIGZpbmFsIHJlc3VsdDogc2hvdWxkIG5vdCBpbmNsdWRlIGRhdGEgZnJvbSB0aGUgdHJhY2sgYnVmZmVyLgotICBTZWVrVG9UaW1lc3RhbXBNcygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwIDEyMEsgMTMwSyIpOwotfQotCi0vLyBPdmVybGFwIHRoZSBuZXh0IGtleWZyYW1lIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHRyYWNrIGJ1ZmZlciB3aXRoIGEgbmV3Ci0vLyBrZXlmcmFtZS4KLS8vIG9sZCAgOiAgIDEwSyAgNDAgICo3MCogIDEwMEsgIDEyNSAgMTMwSwotLy8gbmV3ICA6IDBLICAgMzAgICA2MCAgIDkwICAgMTIwSwotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgIDkwICAqMTIwSyogICAxMzBLCi0vLyB0cmFjazogICAgICAgICAgICAgNzAKLS8vIG5ldyAgOiAgICAgICAgICAgICAgICAgICAgIDExMEsgICAgMTMwCi0vLyBhZnRlcjogMEsgICAzMCAgIDYwICAgOTAgICoxMTBLKiAgIDEzMAotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE92ZXJsYXBfT25lQnlPbmVfVHJhY2tCdWZmZXIyKSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29udGFpbnNUcmFja0J1ZmZlckV4aGF1c3Rpb25Ta2lwTG9nKDQwKSk7Ci0KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjEwSyA0MCA3MCAxMDBLIDEyNSAxMzBEMzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byA3MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcyg3MCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMEsgNDAiKTsKLQotICAvLyBPdmVybGFwIHdpdGggYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgZnJvbSAwIHRvIDEyMG1zOyA3MG1zIGFuZCAxMDBtcyBnbyBpbgotICAvLyB0cmFjawotICAvLyBidWZmZXIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIwSyAzMCA2MCA5MCAxMjBEMTBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNjApIH0iKTsKLQotICAvLyBOb3cgb3ZlcmxhcCB0aGUga2V5ZnJhbWUgYXQgMTIwbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIxMTBLIDEzMCIpOwotCi0gIC8vIFNob3VsZCByZXR1cm4gZnJhbWUgNzBtcyBmcm9tIHRoZSB0cmFjayBidWZmZXIuIFRoZW4gaXQgc2hvdWxkCi0gIC8vIHJldHVybiB0aGUga2V5ZnJhbWUgYWZ0ZXIgdGhlIHRyYWNrIGJ1ZmZlciwgd2hpY2ggaXMgYXQgMTEwbXMuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI3MCAxMTBLIDEzMCIpOwotfQotCi0vLyBPdmVybGFwIHRoZSBuZXh0IGtleWZyYW1lIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHRyYWNrIGJ1ZmZlciB3aXRob3V0IGEKLS8vIG5ldyBrZXlmcmFtZS4KLS8vIG9sZCAgOiAgIDEwSyAgNDAgICo3MCogIDEwMEsgIDEyNSAgMTMwSwotLy8gbmV3ICA6IDBLICAgMzAgICA2MCAgIDkwICAgMTIwSwotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgIDkwICAqMTIwSyogICAxMzBLCi0vLyB0cmFjazogICAgICAgICAgICAgNzAKLS8vIG5ldyAgOiAgICAgICAgNTBLICAgODAgICAxMTAgICAgICAgICAgMTQwCi0vLyBhZnRlcjogMEsgICAzMCAgIDUwSyAgIDgwICAgMTEwICAgMTQwICogKHdhaXRpbmcgZm9yIGtleWZyYW1lKQotLy8gdHJhY2s6ICAgICAgICAgICAgIDcwCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgT3ZlcmxhcF9PbmVCeU9uZV9UcmFja0J1ZmZlcjMpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coODApKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMTBLIDQwIDcwIDEwMEsgMTI1IDEzMEQzMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIH0iKTsKLQotICAvLyBTZWVrIHRvIDcwbXMuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDcwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEwSyA0MCIpOwotCi0gIC8vIE92ZXJsYXAgd2l0aCBhIG5ldyBjb2RlZCBmcmFtZSBncm91cCBmcm9tIDAgdG8gMTIwbXM7IDcwbXMgZ29lcyBpbiB0cmFjawotICAvLyBidWZmZXIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIwSyAzMCA2MCA5MCAxMjBEMTBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNjApIH0iKTsKLQotICAvLyBOb3cgb3ZlcmxhcCB0aGUga2V5ZnJhbWUgYXQgMTIwbXMgYW5kIDEzMG1zLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiNTBLIDgwIDExMCAxNDAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE3MCkgfSIpOwotCi0gIC8vIFNob3VsZCBoYXZlIGFsbCB0aGUgYnVmZmVycyBmcm9tIHRoZSB0cmFjayBidWZmZXIsIHRoZW4gc3RhbGwuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI3MCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZGluZyBhIGtleWZyYW1lIHNob3VsZCBmdWxmaWxsIHRoZSByZWFkLgotICBBcHBlbmRCdWZmZXJzT25lQnlPbmUoIjE1MEQzMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjE1MEsiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotLy8gT3ZlcmxhcCB0aGUgbmV4dCBrZXlmcmFtZSBhZnRlciB0aGUgZW5kIG9mIHRoZSB0cmFjayBidWZmZXIgd2l0aCBhIGtleWZyYW1lCi0vLyB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSB0cmFjayBidWZmZXIuCi0vLyBvbGQgIDogICAxMEsgIDQwICAqNzAqICAxMDBLICAxMjUgIDEzMEsKLS8vIG5ldyAgOiAwSyAgIDMwICAgNjAgICA5MCAgIDEyMEsKLS8vIGFmdGVyOiAwSyAgIDMwICAgNjAgICA5MCAgKjEyMEsqICAgMTMwSwotLy8gdHJhY2s6ICAgICAgICAgICAgIDcwCi0vLyBuZXcgIDogICAgICAgICAgICAgIDgwSyAgMTEwICAgICAgICAgIDE0MAotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgICo4MEsqICAxMTAgICAxNDAKLS8vIHRyYWNrOiAgICAgICAgICAgICAgIDcwCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgT3ZlcmxhcF9PbmVCeU9uZV9UcmFja0J1ZmZlcjQpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjEwSyA0MCA3MCAxMDBLIDEyNSAxMzBEMzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byA3MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcyg3MCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMEsgNDAiKTsKLQotICAvLyBPdmVybGFwIHdpdGggYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgZnJvbSAwIHRvIDEyMG1zOyA3MG1zIGFuZCAxMDBtcyBnbyBpbgotICAvLyB0cmFjawotICAvLyBidWZmZXIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIwSyAzMCA2MCA5MCAxMjBEMTBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNjApIH0iKTsKLQotICAvLyBOb3cgYXBwZW5kIGEga2V5ZnJhbWUgYXQgODBtcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjgwSyAxMTAgMTQwIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjcwIDgwSyAxMTAgMTQwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIE92ZXJsYXAgdGhlIG5leHQga2V5ZnJhbWUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgdHJhY2sgYnVmZmVyIHdpdGggYSBrZXlmcmFtZQotLy8gdGhhdCBjb21lcyBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgdHJhY2sgYnVmZmVyLCB3aGVuIHRoZSBzZWxlY3RlZCBzdHJlYW0gd2FzCi0vLyB3YWl0aW5nIGZvciB0aGUgbmV4dCBrZXlmcmFtZS4KLS8vIG9sZCAgOiAgIDEwSyAgNDAgICo3MCogIDEwMEsKLS8vIG5ldyAgOiAwSyAgIDMwICAgNjAgICA5MCAgIDEyMAotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgIDkwICAgMTIwICogKHdhaXRpbmcgZm9yIGtleWZyYW1lKQotLy8gdHJhY2s6ICAgICAgICAgICAgIDcwCi0vLyBuZXcgIDogICAgICAgICAgICAgIDgwSyAgMTEwICAgICAgICAgIDE0MAotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgICo4MEsqICAxMTAgICAxNDAKLS8vIHRyYWNrOiAgICAgICAgICAgICAgIDcwCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgT3ZlcmxhcF9PbmVCeU9uZV9UcmFja0J1ZmZlcjUpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjEwSyA0MCA3MCAxMDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTMwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byA3MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcyg3MCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMEsgNDAiKTsKLQotICAvLyBPdmVybGFwIHdpdGggYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgZnJvbSAwIHRvIDEyMG1zOyA3MG1zIGdvZXMgaW4gdHJhY2sKLSAgLy8gYnVmZmVyLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMEsgMzAgNjAgOTAgMTIwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNTApIH0iKTsKLQotICAvLyBOb3cgYXBwZW5kIGEga2V5ZnJhbWUgYXQgODBtcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjgwSyAxMTAgMTQwIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjcwIDgwSyAxMTAgMTQwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFRlc3QgdGhhdCBhcHBlbmRpbmcgdG8gYSBkaWZmZXJlbnQgcmFuZ2Ugd2hpbGUgdGhlcmUgaXMgZGF0YSBpbgotLy8gdGhlIHRyYWNrIGJ1ZmZlciBkb2Vzbid0IGFmZmVjdCB0aGUgc2VsZWN0ZWQgcmFuZ2Ugb3IgdHJhY2sgYnVmZmVyIHN0YXRlLgotLy8gb2xkICA6ICAgMTBLICA0MCAgKjcwKiAgMTAwSyAgMTI1ICAxMzBLIC4uLiAyMDBLIDIzMAotLy8gbmV3ICA6IDBLICAgMzAgICA2MCAgIDkwICAgMTIwSwotLy8gYWZ0ZXI6IDBLICAgMzAgICA2MCAgIDkwICAqMTIwSyogICAxMzBLIC4uLiAyMDBLIDIzMAotLy8gdHJhY2s6ICAgICAgICAgICAgIDcwCi0vLyBvbGQgIDogMEsgICAzMCAgIDYwICAgOTAgICoxMjBLKiAgIDEzMEsgLi4uIDIwMEsgMjMwCi0vLyBuZXcgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MEsgMjkwCi0vLyBhZnRlcjogMEsgICAzMCAgIDYwICAgOTAgICoxMjBLKiAgIDEzMEsgLi4uIDIwMEsgMjMwIDI2MEsgMjkwCi0vLyB0cmFjazogICAgICAgICAgICAgNzAKLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBPdmVybGFwX09uZUJ5T25lX1RyYWNrQnVmZmVyNikgewotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRhaW5zVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcExvZyg1MCkpOwotCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZE9uZUJ5T25lKCIxMEsgNDAgNzAgMTAwSyAxMjUgMTMwRDMwSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMjAwSyAyMzAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIFsyMDAsMjYwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byA3MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcyg3MCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMEsgNDAiKTsKLQotICAvLyBPdmVybGFwIHdpdGggYSBuZXcgY29kZWQgZnJhbWUgZ3JvdXAgZnJvbSAwIHRvIDEyMG1zLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmRPbmVCeU9uZSgiMEsgMzAgNjAgOTAgMTIwRDEwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTYwKSBbMjAwLDI2MCkgfSIpOwotCi0gIC8vIFZlcmlmeSB0aGF0IDcwIGdldHMgcmVhZCBvdXQgb2YgdGhlIHRyYWNrIGJ1ZmZlci4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjcwIik7Ci0KLSAgLy8gQXBwZW5kIG1vcmUgZGF0YSB0byB0aGUgdW5zZWxlY3RlZCByYW5nZS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kT25lQnlPbmUoIjI2MEsgMjkwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNjApIFsyMDAsMzIwKSB9Iik7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEyMEsgMTMwSyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIENoZWNrIHRoZSBmaW5hbCByZXN1bHQ6IHNob3VsZCBub3QgaW5jbHVkZSBkYXRhIGZyb20gdGhlIHRyYWNrIGJ1ZmZlci4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzMCA2MCA5MCAxMjBLIDEzMEsiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNlZWtfS2V5ZnJhbWUpIHsKLSAgLy8gQXBwZW5kIDYgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA2KTsKLQotICAvLyBTZWVrIHRvIGJlZ2lubmluZy4KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgNSwgdHJ1ZSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZWVrX05vbktleWZyYW1lKSB7Ci0gIC8vIEFwcGVuZCAxNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxNSk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gMTMuCi0gIFNlZWsoMTMpOwotCi0gIC8vIEV4cGVjdCBzZWVraW5nIGJhY2sgdG8gdGhlIG5lYXJlc3Qga2V5ZnJhbWUuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxNCwgdHJ1ZSk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gMy4KLSAgU2VlaygzKTsKLQotICAvLyBFeHBlY3Qgc2Vla2luZyBiYWNrIHRvIHRoZSBuZWFyZXN0IGtleWZyYW1lLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAzLCB0cnVlKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNlZWtfTm90QnVmZmVyZWQpIHsKLSAgLy8gU2VlayB0byBiZWdpbm5pbmcuCi0gIFNlZWsoMCk7Ci0KLSAgLy8gVHJ5IHRvIGdldCBidWZmZXI7IG5vdGhpbmcncyBhcHBlbmRlZC4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyAwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMik7Ci0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDEpOwotCi0gIC8vIFRyeSB0byBnZXQgYnVmZmVyIG91dCBvZiByYW5nZS4KLSAgU2VlaygyKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNlZWtfSW5CZXR3ZWVuVGltZXN0YW1wcykgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxMCk7Ci0KLSAgYmFzZTo6VGltZURlbHRhIGJ1bXAgPSBmcmFtZV9kdXJhdGlvbigpIC8gNDsKLSAgQ0hFQ0soYnVtcCA+IGJhc2U6OlRpbWVEZWx0YSgpKTsKLQotICAvLyBTZWVrIHRvIGJ1ZmZlciBhIGxpdHRsZSBhZnRlciBwb3NpdGlvbiA1LgotICBzdHJlYW1fLT5TZWVrKDUgKiBmcmFtZV9kdXJhdGlvbigpICsgYnVtcCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDUsIHRydWUpOwotCi0gIC8vIFNlZWsgdG8gYnVmZmVyIGEgbGl0dGxlIGJlZm9yZSBwb3NpdGlvbiA1LgotICBzdHJlYW1fLT5TZWVrKDUgKiBmcmFtZV9kdXJhdGlvbigpIC0gYnVtcCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDAsIHRydWUpOwotfQotCi0vLyBUaGlzIHRlc3Qgd2lsbCBkbyBhIGNvbXBsZXRlIG92ZXJsYXAgb2YgYW4gZXhpc3RpbmcgcmFuZ2UgaW4gb3JkZXIgdG8gYWRkCi0vLyBidWZmZXJzIHRvIHRoZSB0cmFjayBidWZmZXJzLiBUaGVuIHRoZSB0ZXN0IGRvZXMgYSBzZWVrIHRvIGFub3RoZXIgcGFydCBvZgotLy8gdGhlIHN0cmVhbS4gVGhlIFNvdXJjZUJ1ZmZlclN0cmVhbSBzaG91bGQgY2xlYXIgaXRzIGludGVybmFsIHRyYWNrIGJ1ZmZlciBpbgotLy8gcmVzcG9uc2UgdG8gdGhlIFNlZWsoKS4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZWVrX0FmdGVyX1RyYWNrQnVmZmVyX0ZpbGxlZCkgewotICAvLyBBcHBlbmQgMTAgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTAsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gYnVmZmVyIGF0IHBvc2l0aW9uIDUgYW5kIGdldCBuZXh0IGJ1ZmZlci4KLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgNSwgJmtEYXRhQSk7Ci0KLSAgLy8gRG8gYSBjb21wbGV0ZSBvdmVybGFwIGJ5IGFwcGVuZGluZyAyMCBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAyMCwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgcmFuZ2UgaXMgY29ycmVjdC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxOSkgfSIpOwotCi0gIC8vIFNlZWsgdG8gYmVnaW5uaW5nOyBhbGwgZGF0YSBzaG91bGQgYmUgbmV3LgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxOSwgJmtEYXRhQik7Ci0KLSAgLy8gQ2hlY2sgcmFuZ2UgY29udGludWVzIHRvIGJlIGNvcnJlY3QuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTkpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNlZWtfU3RhcnRPZkdyb3VwKSB7Ci0gIGJhc2U6OlRpbWVEZWx0YSBidW1wID0gZnJhbWVfZHVyYXRpb24oKSAvIDQ7Ci0gIENIRUNLKGJ1bXAgPiBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbiAoNSArIHxidW1wfCkgdGhyb3VnaCA5LCB3aGVyZSB0aGUgY29kZWQgZnJhbWUKLSAgLy8gZ3JvdXAgYmVnaW5zIGF0IHBvc2l0aW9uIDUuCi0gIFNlZWsoNSk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZF9PZmZzZXRGaXJzdEJ1ZmZlcig1LCA1LCBidW1wKTsKLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlcjsKLQotICAvLyBHZXROZXh0QnVmZmVyKCkgc2hvdWxkIHJldHVybiB0aGUgbmV4dCBidWZmZXIgYXQgcG9zaXRpb24gKDUgKyB8YnVtcHwpLgotICBFWFBFQ1RfRVEoc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKSwgU291cmNlQnVmZmVyU3RyZWFtOjprU3VjY2Vzcyk7Ci0gIEVYUEVDVF9FUShidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpLAotICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZSg1ICogZnJhbWVfZHVyYXRpb24oKSArIGJ1bXApKTsKLQotICAvLyBDaGVjayByZXN0IG9mIGJ1ZmZlcnMuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDYsIDkpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gMTUuCi0gIFNlZWsoMTUpOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zICgxNSArIHxidW1wfCkgdGhyb3VnaCAxOSwgd2hlcmUgdGhlIGNvZGVkCi0gIC8vIGZyYW1lIGdyb3VwIGJlZ2lucyBhdCAxNS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kX09mZnNldEZpcnN0QnVmZmVyKDE1LCA1LCBidW1wKTsKLQotICAvLyBHZXROZXh0QnVmZmVyKCkgc2hvdWxkIHJldHVybiB0aGUgbmV4dCBidWZmZXIgYXQgcG9zaXRpb24gKDE1ICsgfGJ1bXB8KS4KLSAgRVhQRUNUX0VRKHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlciksIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a1N1Y2Nlc3MpOwotICBFWFBFQ1RfRVEoYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKSwgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSAqIGZyYW1lX2R1cmF0aW9uKCkgKyBidW1wKSk7Ci0KLSAgLy8gQ2hlY2sgcmVzdCBvZiBidWZmZXJzLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNiwgMTkpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2Vla19CZWZvcmVTdGFydE9mR3JvdXApIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDEwKTsKLQotICAvLyBTZWVrIHRvIGEgdGltZSBiZWZvcmUgdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcmFuZ2UuCi0gIFNlZWsoMCk7Ci0KLSAgLy8gU2hvdWxkIHJldHVybiBidWZmZXJzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDE0KTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE9sZFNlZWtQb2ludF9Db21wbGV0ZU92ZXJsYXApIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA0KTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDE0LCBhbmQgc2VlayB0byB0aGUgYmVnaW5uaW5nIG9mCi0gIC8vIHRoaXMgcmFuZ2UuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgNSk7Ci0gIFNlZWsoMTApOwotCi0gIC8vIE5vdyBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHJhbmdlLgotICBTZWVrKDApOwotCi0gIC8vIENvbXBsZXRlbHkgb3ZlcmxhcCB0aGUgb2xkIHNlZWsgcG9pbnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxNSk7Ci0KLSAgLy8gVGhlIEdldE5leHRCdWZmZXIoKSBjYWxsIHNob3VsZCByZXNwZWN0IHRoZSAybmQgc2VlayBwb2ludC4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgMCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBPbGRTZWVrUG9pbnRfQ29tcGxldGVPdmVybGFwX1BlbmRpbmcpIHsKLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAyKTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAxNSB0aHJvdWdoIDE5IGFuZCBzZWVrIHRvIGJlZ2lubmluZyBvZiB0aGUKLSAgLy8gcmFuZ2UuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgNSk7Ci0gIFNlZWsoMTUpOwotCi0gIC8vIE5vdyBzZWVrIHBvc2l0aW9uIDUuCi0gIFNlZWsoNSk7Ci0KLSAgLy8gQ29tcGxldGVseSBvdmVybGFwIHRoZSBvbGQgc2VlayBwb2ludC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAxNSk7Ci0KLSAgLy8gVGhlIHNlZWsgYXQgcG9zaXRpb24gNSBzaG91bGQgc3RpbGwgYmUgcGVuZGluZy4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE9sZFNlZWtQb2ludF9NaWRkbGVPdmVybGFwKSB7Ci0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMik7Ci0KLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxOSBhbmQgc2VlayB0byBwb3NpdGlvbiAxNS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDE1KTsKLSAgU2VlaygxNSk7Ci0KLSAgLy8gTm93IHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgotICBTZWVrKDApOwotCi0gIC8vIE92ZXJsYXAgdGhlIG1pZGRsZSBvZiB0aGUgcmFuZ2Ugc3VjaCB0aGF0IHRoZXJlIGFyZSBub3cgdGhyZWUgcmFuZ2VzLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDMpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDEpIFs1LDEyKSBbMTUsMTkpIH0iKTsKLQotICAvLyBUaGUgR2V0TmV4dEJ1ZmZlcigpIGNhbGwgc2hvdWxkIHJlc3BlY3QgdGhlIDJuZCBzZWVrIHBvaW50LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAwKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE9sZFNlZWtQb2ludF9NaWRkbGVPdmVybGFwX1BlbmRpbmcpIHsKLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAyKTsKLQotICAvLyBBcHBlbmQgMTUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAyNCBhbmQgc2VlayB0byBwb3NpdGlvbiAyMC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAxNSk7Ci0gIFNlZWsoMjApOwotCi0gIC8vIE5vdyBzZWVrIHRvIHBvc2l0aW9uIDUuCi0gIFNlZWsoNSk7Ci0KLSAgLy8gT3ZlcmxhcCB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSBzdWNoIHRoYXQgaXQgaXMgbm93IHNwbGl0IGludG8gdHdvIHJhbmdlcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAzKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxKSBbMTAsMTcpIFsyMCwyNCkgfSIpOwotCi0gIC8vIFRoZSBzZWVrIGF0IHBvc2l0aW9uIDUgc2hvdWxkIHN0aWxsIGJlIHBlbmRpbmcuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBPbGRTZWVrUG9pbnRfU3RhcnRPdmVybGFwKSB7Ci0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMik7Ci0KLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCAxOSBhbmQgc2VlayB0byBwb3NpdGlvbiAxNS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDE1KTsKLSAgU2VlaygxNSk7Ci0KLSAgLy8gTm93IHNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgotICBTZWVrKDApOwotCi0gIC8vIFN0YXJ0IG92ZXJsYXAgdGhlIG9sZCBzZWVrIHBvaW50LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDEwKTsKLQotICAvLyBUaGUgR2V0TmV4dEJ1ZmZlcigpIGNhbGwgc2hvdWxkIHJlc3BlY3QgdGhlIDJuZCBzZWVrIHBvaW50LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAwKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE9sZFNlZWtQb2ludF9TdGFydE92ZXJsYXBfUGVuZGluZykgewotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggMS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDIpOwotCi0gIC8vIEFwcGVuZCAxNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDI0IGFuZCBzZWVrIHRvIHBvc2l0aW9uIDIwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDE1KTsKLSAgU2VlaygyMCk7Ci0KLSAgLy8gTm93IHNlZWsgdG8gcG9zaXRpb24gNS4KLSAgU2Vlayg1KTsKLQotICAvLyBTdGFydCBvdmVybGFwIHRoZSBvbGQgc2VlayBwb2ludC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAxMCk7Ci0KLSAgLy8gVGhlIHNlZWsgYXQgdGltZSAwIHNob3VsZCBzdGlsbCBiZSBwZW5kaW5nLgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgT2xkU2Vla1BvaW50X0VuZE92ZXJsYXApIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA0KTsKLQotICAvLyBBcHBlbmQgMTUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTAgdGhyb3VnaCAyNCBhbmQgc2VlayB0byBzdGFydCBvZiByYW5nZS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDEwLCAxNSk7Ci0gIFNlZWsoMTApOwotCi0gIC8vIE5vdyBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KLSAgU2VlaygwKTsKLQotICAvLyBFbmQgb3ZlcmxhcCB0aGUgb2xkIHNlZWsgcG9pbnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAxMCk7Ci0KLSAgLy8gVGhlIEdldE5leHRCdWZmZXIoKSBjYWxsIHNob3VsZCByZXNwZWN0IHRoZSAybmQgc2VlayBwb2ludC4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgMCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBPbGRTZWVrUG9pbnRfRW5kT3ZlcmxhcF9QZW5kaW5nKSB7Ci0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMik7Ci0KLSAgLy8gQXBwZW5kIDE1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDE1IHRocm91Z2ggMjkgYW5kIHNlZWsgdG8gc3RhcnQgb2YgcmFuZ2UuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgMTUpOwotICBTZWVrKDE1KTsKLQotICAvLyBOb3cgc2VlayB0byBwb3NpdGlvbiA1Ci0gIFNlZWsoNSk7Ci0KLSAgLy8gRW5kIG92ZXJsYXAgdGhlIG9sZCBzZWVrIHBvaW50LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDEwKTsKLQotICAvLyBUaGUgc2VlayBhdCB0aW1lIDAgc2hvdWxkIHN0aWxsIGJlIHBlbmRpbmcuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXROZXh0QnVmZmVyX0FmdGVyTWVyZ2VzKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgNSk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gMTIuCi0gIFNlZWsoMTIpOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSk7Ci0KLSAgLy8gTWFrZSBzdXJlIHJhbmdlcyBhcmUgbWVyZ2VkLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDE0KSB9Iik7Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSBuZXh0IGJ1ZmZlciBpcyBjb3JyZWN0LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTApOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDE1IHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgNSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsMTkpIH0iKTsKLQotICAvLyBNYWtlIHN1cmUgdGhlIHJlbWFpbmluZyBuZXh0IGJ1ZmZlcnMgYXJlIGNvcnJlY3QuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDExLCAxNCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXROZXh0QnVmZmVyX0V4aGF1c3RUaGVuQXBwZW5kKSB7Ci0gIC8vIEFwcGVuZCA0IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAzLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNCk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gMCBhbmQgZ2V0IGFsbCBidWZmZXJzLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAzKTsKLQotICAvLyBOZXh0IGJ1ZmZlciBpcyBhdCBwb3NpdGlvbiA0LCBzbyBzaG91bGQgbm90IGJlIGFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDQgdGhyb3VnaCA1LgotICBBcHBlbmRCdWZmZXJzKDQsIDIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg0LCA1KTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBuZXcgYnVmZmVycyBzdGFydC1vdmVybGFwIGEgcmFuZ2Ugd2hvc2UgbmV4dAotLy8gYnVmZmVyIGlzIG5vdCBidWZmZXJlZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXROZXh0QnVmZmVyX0V4aGF1c3RUaGVuU3RhcnRPdmVybGFwKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggOSBhbmQgZXhoYXVzdCB0aGUgYnVmZmVycy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDEwLCAma0RhdGFBKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMCwgOSwgJmtEYXRhQSk7Ci0KLSAgLy8gTmV4dCBidWZmZXIgaXMgYXQgcG9zaXRpb24gMTAsIHNvIHNob3VsZCBub3QgYmUgYWJsZSB0byBmdWxmaWxsIHJlcXVlc3QuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gQXBwZW5kIDYgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDEwLiBUaGlzIGlzIHRvIHRlc3QgdGhhdCBkb2luZyBhCi0gIC8vIHN0YXJ0LW92ZXJsYXAgc3VjY2Vzc2Z1bGx5IGZ1bGZpbGxzIHRoZSByZWFkIGF0IHBvc2l0aW9uIDEwLCBldmVuIHRob3VnaAotICAvLyBwb3NpdGlvbiAxMCB3YXMgdW5idWZmZXJlZC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDYsICZrRGF0YUIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTAsICZrRGF0YUIpOwotCi0gIC8vIFRoZW4gYWRkIDUgYnVmZmVycyBmcm9tIHBvc2l0aW9ucyAxMSB0aG91Z2ggMTUuCi0gIEFwcGVuZEJ1ZmZlcnMoMTEsIDUsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHRoZSBuZXh0IDQgYnVmZmVycyBhcmUgY29ycmVjdCwgd2hpY2ggYWxzbyBlZmZlY3RpdmVseSBzZWVrcyB0bwotICAvLyBwb3NpdGlvbiAxNS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTEsIDE0LCAma0RhdGFCKTsKLQotICAvLyBSZXBsYWNlIHRoZSBuZXh0IGJ1ZmZlciBhdCBwb3NpdGlvbiAxNSB3aXRoIGFub3RoZXIgc3RhcnQgb3ZlcmxhcC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAyLCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTUsIDE2LCAma0RhdGFBKTsKLX0KLQotLy8gVGVzdHMgYSBzdGFydCBvdmVybGFwIHRoYXQgb2NjdXJzIHJpZ2h0IGF0IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgb3V0cHV0Ci0vLyBidWZmZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgR2V0TmV4dEJ1ZmZlcigpLiBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdAotLy8gR2V0TmV4dEJ1ZmZlcigpIHNraXBzIHRvIHNlY29uZCBHT1AgaW4gdGhlIG5ld2x5IGFwcGVuZGVkIGRhdGEgaW5zdGVhZAotLy8gb2YgcmV0dXJuaW5nIHR3byBidWZmZXJzIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdldE5leHRCdWZmZXJfRXhoYXVzdFRoZW5TdGFydE92ZXJsYXAyKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAgOTAgMTIwIik7Ci0KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwIDEyMCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCBhIGtleWZyYW1lIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wIGFzIHRoZSBsYXN0IGJ1ZmZlciBvdXRwdXQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTIwRDMwSyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgY29kZWQgZnJhbWUgZ3JvdXAgYW5kIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlcnMgYXJlCi0gIC8vIHJldHVybmVkIGZyb20gdGhlIGZpcnN0IEdPUCBhZnRlciAxMjAuCi0gIEFwcGVuZEJ1ZmZlcnMoIjE1MCAxODAgMjEwSyAyNDAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjIxMEsgMjQwIik7Ci0KLSAgLy8gU2VlayB0byB0aGUgYmVnaW5uaW5nIGFuZCB2ZXJpZnkgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgYnVmZmVyLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgNjAgOTAgMTIwSyAxNTAgMTgwIDIxMEsgMjQwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgbmV3IGJ1ZmZlcnMgY29tcGxldGVseSBvdmVybGFwIGEgcmFuZ2UKLS8vIHdob3NlIG5leHQgYnVmZmVyIGlzIG5vdCBidWZmZXJlZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXROZXh0QnVmZmVyX0V4aGF1c3RUaGVuQ29tcGxldGVPdmVybGFwKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTQgYW5kIGV4aGF1c3QgdGhlIGJ1ZmZlcnMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgNSwgJmtEYXRhQSk7Ci0gIFNlZWsoMTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMTQsICZrRGF0YUEpOwotCi0gIC8vIE5leHQgYnVmZmVyIGlzIGF0IHBvc2l0aW9uIDE1LCBzbyBzaG91bGQgbm90IGJlIGFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIERvIGEgY29tcGxldGUgb3ZlcmxhcCBhbmQgdGVzdCB0aGF0IHRoaXMgc3VjY2Vzc2Z1bGx5IGZ1bGZpbGxzIHRoZSByZWFkCi0gIC8vIGF0IHBvc2l0aW9uIDE1LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgMTEsICZrRGF0YUIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTUsICZrRGF0YUIpOwotCi0gIC8vIFRoZW4gYWRkIDUgYnVmZmVycyBmcm9tIHBvc2l0aW9ucyAxNiB0aG91Z2ggMjAuCi0gIEFwcGVuZEJ1ZmZlcnMoMTYsIDUsICZrRGF0YUIpOwotCi0gIC8vIENoZWNrIHRoZSBuZXh0IDQgYnVmZmVycyBhcmUgY29ycmVjdCwgd2hpY2ggYWxzbyBlZmZlY3RpdmVseSBzZWVrcyB0bwotICAvLyBwb3NpdGlvbiAyMC4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTYsIDE5LCAma0RhdGFCKTsKLQotICAvLyBEbyBhIGNvbXBsZXRlIG92ZXJsYXAgYW5kIHJlcGxhY2UgdGhlIGJ1ZmZlciBhdCBwb3NpdGlvbiAyMC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDIxLCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMjAsIDIwLCAma0RhdGFBKTsKLX0KLQotLy8gVGhpcyB0ZXN0IGNvdmVycyB0aGUgY2FzZSB3aGVyZSBhIHJhbmdlIGlzIHN0YWxsZWQgd2FpdGluZyBmb3IgaXRzIG5leHQKLS8vIGJ1ZmZlciwgdGhlbiBhbiBlbmQtb3ZlcmxhcCBjYXVzZXMgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gYmUgZGVsZXRlZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXROZXh0QnVmZmVyX0V4aGF1c3RUaGVuRW5kT3ZlcmxhcCkgewotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDE0IGFuZCBleGhhdXN0IHRoZSBidWZmZXJzLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDUsICZrRGF0YUEpOwotICBTZWVrKDEwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE0LCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTAsMTQpIH0iKTsKLQotICAvLyBOZXh0IGJ1ZmZlciBpcyBhdCBwb3NpdGlvbiAxNSwgc28gc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdC4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBEbyBhbiBlbmQgb3ZlcmxhcCB0aGF0IGNhdXNlcyB0aGUgbGF0dGVyIGhhbGYgb2YgdGhlIHJhbmdlIHRvIGJlIGRlbGV0ZWQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCA2LCAma0RhdGFCKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSwxMCkgfSIpOwotCi0gIC8vIEZpbGwgaW4gdGhlIGdhcC4gR2V0dGluZyB0aGUgbmV4dCBidWZmZXIgc2hvdWxkIHN0aWxsIHN0YWxsIGF0IHBvc2l0aW9uIDE1LgotICBmb3IgKGludCBpID0gMTE7IGkgPD0gMTQ7IGkrKykgewotICAgIEFwcGVuZEJ1ZmZlcnMoaSwgMSwgJmtEYXRhQik7Ci0gICAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgfQotCi0gIC8vIEFwcGVuZCB0aGUgYnVmZmVyIGF0IHBvc2l0aW9uIDE1IGFuZCBjaGVjayB0byBtYWtlIHN1cmUgYWxsIGlzIGNvcnJlY3QuCi0gIEFwcGVuZEJ1ZmZlcnMoMTUsIDEpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTUpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDE1KSB9Iik7Ci19Ci0KLS8vIFRoaXMgdGVzdCBpcyB0ZXN0aW5nIHRoZSAibmV4dCBidWZmZXIiIGxvZ2ljIGFmdGVyIGEgY29tcGxldGUgb3ZlcmxhcC4gSW4KLS8vIHRoaXMgc2NlbmFyaW8sIHdoZW4gdGhlIHRyYWNrIGJ1ZmZlciBpcyBleGhhdXN0ZWQsIHRoZXJlIGlzIG5vIGJ1ZmZlcmVkIGRhdGEKLS8vIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIFRoZSBTb3VyY2VCdWZmZXJTdHJlYW0gc2hvdWxkIGJlIGFibGUgdG8gZnVsZmlsbCB0aGUKLS8vIHJlcXVlc3Qgd2hlbiB0aGUgZGF0YSBpcyBsYXRlciBhcHBlbmRlZCwgYW5kIHNob3VsZCBub3QgbG9zZSB0cmFjayBvZiB0aGUKLS8vICJuZXh0IGJ1ZmZlciIgcG9zaXRpb24uCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2V0TmV4dEJ1ZmZlcl9PdmVybGFwX1NlbGVjdGVkX0NvbXBsZXRlKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byBidWZmZXIgYXQgcG9zaXRpb24gNSBhbmQgZ2V0IG5leHQgYnVmZmVyLgotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA1LCAma0RhdGFBKTsKLQotICAvLyBSZXBsYWNlIGV4aXN0aW5nIGRhdGEgd2l0aCBuZXcgZGF0YS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDUsICZrRGF0YUIpOwotCi0gIC8vIEV4cGVjdCBvbGQgZGF0YSB1cCB1bnRpbCBuZXh0IGtleWZyYW1lIGluIG5ldyBkYXRhLgotICBDaGVja0V4cGVjdGVkQnVmZmVycyg2LCA5LCAma0RhdGFBKTsKLQotICAvLyBOZXh0IGJ1ZmZlciBpcyBhdCBwb3NpdGlvbiAxMCwgc28gc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZ1bGZpbGwgdGhlCi0gIC8vIHJlcXVlc3QuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gTm93IGFkZCA1IG5ldyBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDE0LgotICBBcHBlbmRCdWZmZXJzKDEwLCA1LCAma0RhdGFCKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDE0LCAma0RhdGFCKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFByZXNlbnRhdGlvblRpbWVzdGFtcEluZGVwZW5kZW5jZSkgewotICAvLyBBcHBlbmQgMjAgYnVmZmVycyBhdCBwb3NpdGlvbiAwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMjApOwotICBTZWVrKDApOwotCi0gIGludCBsYXN0X2tleWZyYW1lX2lkeCA9IC0xOwotICBiYXNlOjpUaW1lRGVsdGEgbGFzdF9rZXlmcmFtZV9wcmVzZW50YXRpb25fdGltZXN0YW1wOwotICBiYXNlOjpUaW1lRGVsdGEgbGFzdF9wX2ZyYW1lX3ByZXNlbnRhdGlvbl90aW1lc3RhbXA7Ci0KLSAgLy8gQ2hlY2sgZm9yIElCQi4uLkJCUCBwYXR0ZXJuLgotICBmb3IgKGludCBpID0gMDsgaSA8IDIwOyBpKyspIHsKLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyOwotICAgIEFTU0VSVF9FUShzdHJlYW1fLT5HZXROZXh0QnVmZmVyKCZidWZmZXIpLCBTb3VyY2VCdWZmZXJTdHJlYW06OmtTdWNjZXNzKTsKLQotICAgIGlmIChidWZmZXItPmlzX2tleV9mcmFtZSgpKSB7Ci0gICAgICBFWFBFQ1RfRVEoRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShidWZmZXItPnRpbWVzdGFtcCgpKSwKLSAgICAgICAgICAgICAgICBidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpKTsKLSAgICAgIGxhc3Rfa2V5ZnJhbWVfaWR4ID0gaTsKLSAgICAgIGxhc3Rfa2V5ZnJhbWVfcHJlc2VudGF0aW9uX3RpbWVzdGFtcCA9IGJ1ZmZlci0+dGltZXN0YW1wKCk7Ci0gICAgfSBlbHNlIGlmIChpID09IGxhc3Rfa2V5ZnJhbWVfaWR4ICsgMSkgewotICAgICAgQVNTRVJUX05FKGxhc3Rfa2V5ZnJhbWVfaWR4LCAtMSk7Ci0gICAgICBsYXN0X3BfZnJhbWVfcHJlc2VudGF0aW9uX3RpbWVzdGFtcCA9IGJ1ZmZlci0+dGltZXN0YW1wKCk7Ci0gICAgICBFWFBFQ1RfTFQobGFzdF9rZXlmcmFtZV9wcmVzZW50YXRpb25fdGltZXN0YW1wLAotICAgICAgICAgICAgICAgIGxhc3RfcF9mcmFtZV9wcmVzZW50YXRpb25fdGltZXN0YW1wKTsKLSAgICB9IGVsc2UgewotICAgICAgRVhQRUNUX0dUKGJ1ZmZlci0+dGltZXN0YW1wKCksIGxhc3Rfa2V5ZnJhbWVfcHJlc2VudGF0aW9uX3RpbWVzdGFtcCk7Ci0gICAgICBFWFBFQ1RfTFQoYnVmZmVyLT50aW1lc3RhbXAoKSwgbGFzdF9wX2ZyYW1lX3ByZXNlbnRhdGlvbl90aW1lc3RhbXApOwotICAgICAgRVhQRUNUX0xUKERlY29kZVRpbWVzdGFtcDo6RnJvbVByZXNlbnRhdGlvblRpbWUoYnVmZmVyLT50aW1lc3RhbXAoKSksCi0gICAgICAgICAgICAgICAgYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHYXJiYWdlQ29sbGVjdGlvbl9EZWxldGVGcm9udCkgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDIwIGJ1ZmZlcnMuCi0gIFNldE1lbW9yeUxpbWl0KDIwKTsKLQotICAvLyBBcHBlbmQgMjAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMSwgJmtEYXRhQSk7Ci0gIGZvciAoaW50IGkgPSAxOyBpIDwgMjA7IGkrKykgQXBwZW5kQnVmZmVycyhpLCAxLCAma0RhdGFBKTsKLQotICAvLyBHQyBzaG91bGQgYmUgYSBuby1vcCwgc2luY2Ugd2UgYXJlIGp1c3QgdW5kZXIgbWVtb3J5IGxpbWl0LgotICBFWFBFQ1RfVFJVRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDAsIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxOSkgfSIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCAxOSwgJmtEYXRhQSk7Ci0KLSAgLy8gU2VlayB0byB0aGUgbWlkZGxlIG9mIHRoZSBzdHJlYW0uCi0gIFNlZWsoMTApOwotCi0gIC8vIFdlIGFyZSBhYm91dCB0byBhcHBlbmQgNSBuZXcgYnVmZmVycyBhbmQgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyAxMCwKLSAgLy8gc28gdGhlIEdDIGFsZ29yaXRobSBzaG91bGQgYmUgYWJsZSB0byBkZWxldGUgc29tZSBvbGQgZGF0YSBmcm9tIHRoZSBmcm9udC4KLSAgRVhQRUNUX1RSVUUoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigxMCwgNSkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDE5KSB9Iik7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyB0byB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCi0gIEFwcGVuZEJ1ZmZlcnMoMjAsIDUsICZrRGF0YUEpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDI0KSB9Iik7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTAsIDI0LCAma0RhdGFBKTsKLSAgU2Vlayg1KTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgOSwgJmtEYXRhQSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZUZyb250X1ByZXNlcnZlU2Vla2VkR09QKSB7Ci0gIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gMTUgYnVmZmVycy4KLSAgU2V0TWVtb3J5TGltaXQoMTUpOwotCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMTAgMjAgMzAgNDAgNTBLIDYwIDcwIDgwIDkwIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTAwMEsgMTAxMCAxMDIwIDEwMzAgMTA0MCIpOwotCi0gIC8vIEdDIHNob3VsZCBiZSBhIG5vLW9wLCBzaW5jZSB3ZSBhcmUganVzdCB1bmRlciBtZW1vcnkgbGltaXQuCi0gIEVYUEVDVF9UUlVFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoRGVjb2RlVGltZXN0YW1wKCksIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDEwMCkgWzEwMDAsMTA1MCkgfSIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlyc3QgcmFuZ2UKLSAgU2Vla1RvVGltZXN0YW1wTXMoOTUpOwotCi0gIC8vIFdlIGFyZSBhYm91dCB0byBhcHBlbmQgNyBuZXcgYnVmZmVycyBhbmQgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdAotICAvLyB0aGUgZW5kIG9mIHRoZSBsYXN0IEdPUCBpbiB0aGUgZmlyc3QgcmFuZ2UsIHNvIHRoZSBHQyBhbGdvcml0aG0gc2hvdWxkIGJlCi0gIC8vIGFibGUgdG8gZGVsZXRlIHNvbWUgb2xkIGRhdGEgZnJvbSB0aGUgZnJvbnQsIGJ1dCBtdXN0IG5vdCBjb2xsZWN0IHRoZSBsYXN0Ci0gIC8vIEdPUCBpbiB0aGF0IGZpcnN0IHJhbmdlLiBOZWl0aGVyIGNhbiBpdCBjb2xsZWN0IHRoZSBsYXN0IGFwcGVuZGVkIEdPUAotICAvLyAod2hpY2ggaXMgdGhlIGVudGlyZSBzZWNvbmQgcmFuZ2UpLCBzbyBHQyBzaG91bGQgcmV0dXJuIGZhbHNlIHNpbmNlIGl0Ci0gIC8vIGNvdWxkbid0IGNvbGxlY3QgZW5vdWdoLgotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyg5NSksIDcpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs1MCwxMDApIFsxMDAwLDEwNTApIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZUZyb250R09Qc0F0QVRpbWUpIHsKLSAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAyMCBidWZmZXJzLgotICBTZXRNZW1vcnlMaW1pdCgyMCk7Ci0KLSAgLy8gQXBwZW5kIDIwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAxOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDIwLCAma0RhdGFBKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDEwLgotICBTZWVrKDEwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwxOSkgfSIpOwotCi0gIC8vIEFkZCBvbmUgYnVmZmVyIHRvIHB1dCB0aGUgbWVtb3J5IG92ZXIgdGhlIGNhcC4KLSAgRVhQRUNUX1RSVUUoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigxMCwgMSkpOwotICBBcHBlbmRCdWZmZXJzKDIwLCAxLCAma0RhdGFBKTsKLQotICAvLyBHQyBzaG91bGQgaGF2ZSBkZWxldGVkIHRoZSBmaXJzdCA1IGJ1ZmZlcnMgc28gdGhhdCB0aGUgcmFuZ2Ugc3RpbGwgYmVnaW5zCi0gIC8vIHdpdGggYSBrZXlmcmFtZS4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSwyMCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxMCwgMjAsICZrRGF0YUEpOwotICBTZWVrKDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycyg1LCA5LCAma0RhdGFBKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZUJhY2spIHsKLSAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byA1IGJ1ZmZlcnMuCi0gIFNldE1lbW9yeUxpbWl0KDUpOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDE1IHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgNSwgJmtEYXRhQSk7Ci0gIEVYUEVDVF9UUlVFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMCwgMCkpOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNCkgWzE1LDE5KSB9Iik7Ci0KLSAgLy8gU2VlayB0byBwb3NpdGlvbiAwLgotICBTZWVrKDApOwotICBFWFBFQ1RfVFJVRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDAsIDApKTsKLSAgLy8gU2hvdWxkIGxlYXZlIHRoZSBmaXJzdCA1IGJ1ZmZlcnMgZnJvbSAwIHRvIDQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA0LCAma0RhdGFBKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZUZyb250QW5kQmFjaykgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDMgYnVmZmVycy4KLSAgU2V0TWVtb3J5TGltaXQoMyk7Ci0KLSAgLy8gU2VlayB0byBwb3NpdGlvbiAxNS4KLSAgU2VlaygxNSk7Ci0KLSAgLy8gQXBwZW5kIDQwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCAzOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDQwLCAma0RhdGFBKTsKLSAgLy8gR0Mgd2lsbCB0cnkgdG8ga2VlcCBkYXRhIGJldHdlZW4gY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBhbmQgbGFzdCBhcHBlbmQKLSAgLy8gcG9zaXRpb24uIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUgbGFzdCBhcHBlbmQgcG9zaXRpb24gaXMgMTkgYW5kIHdpbGwKLSAgLy8gYWxsb3cgR0MgYWxnb3JpdGhtIHRvIGNvbGxlY3QgZGF0YSBvdXRzaWRlIG9mIHRoZSByYW5nZSBbMTUsMTkpCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgNSwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMzkpIH0iKTsKLQotICAvLyBTaG91bGQgbGVhdmUgdGhlIEdPUCBjb250YWluaW5nIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uIDE1IGFuZCB0aGUKLSAgLy8gbGFzdCBhcHBlbmQgcG9zaXRpb24gMTkuIEdDIHJldHVybnMgZmFsc2UsIHNpbmNlIHdlIGFyZSBzdGlsbCBhYm92ZSBsaW1pdC4KLSAgRVhQRUNUX0ZBTFNFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMTUsIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTUsMTkpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMTUsIDE5LCAma0RhdGFBKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZVNldmVyYWxSYW5nZXMpIHsKLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA1KTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDE0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDUpOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDIwIHRocm91Z2ggMjQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgyMCwgNSk7Ci0KLSAgLy8gQXBwZW5kIDUgYnVmZmVycyBhdCBwb3NpdGlvbnMgNDAgdGhyb3VnaCA0NC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDQwLCA1KTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQpIFsxMCwxNCkgWzIwLDI0KSBbNDAsNDQpIH0iKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDIwLgotICBTZWVrKDIwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMjAsIDIwKTsKLQotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDEgYnVmZmVyLgotICBTZXRNZW1vcnlMaW1pdCgxKTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAzMCB0aHJvdWdoIDM0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMzAsIDUpOwotCi0gIC8vIFdlIHdpbGwgaGF2ZSBtb3JlIHRoYW4gMSBidWZmZXIgbGVmdCwgR0Mgd2lsbCBmYWlsCi0gIEVYUEVDVF9GQUxTRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDIwLCAwKSk7Ci0KLSAgLy8gU2hvdWxkIGhhdmUgZGVsZXRlZCBhbGwgYnVmZmVyIHJhbmdlcyBiZWZvcmUgdGhlIGN1cnJlbnQgYnVmZmVyIGFuZCBhZnRlcgotICAvLyBsYXN0IEdPUAotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsyMCwyNCkgWzMwLDM0KSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDIxLCAyNCk7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nIGludG8gdGhlIGxhc3QgcmFuZ2UgdG8gbWFrZSBzdXJlIGl0IGRpZG4ndCBicmVhay4KLSAgQXBwZW5kQnVmZmVycygzNSwgMTApOwotICBFWFBFQ1RfRkFMU0UoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigyMCwgMCkpOwotICAvLyBTaG91bGQgc2F2ZSBldmVyeXRoaW5nIGJldHdlZW4gcmVhZCBoZWFkIGFuZCBsYXN0IGFwcGVuZGVkCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzIwLDI0KSBbMzAsNDQpIH0iKTsKLQotICAvLyBNYWtlIHN1cmUgYXBwZW5kaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJhbmdlcyBkaWRuJ3Qgc29tZWhvdyBicmVhay4KLSAgU2V0TWVtb3J5TGltaXQoMTAwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDEwKTsKLSAgRVhQRUNUX1RSVUUoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigyMCwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDkpIFsyMCwyNCkgWzMwLDQ0KSB9Iik7Ci0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDkpOwotCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg5MCwgMTApOwotICBFWFBFQ1RfVFJVRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDAsIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw5KSBbMjAsMjQpIFszMCw0NCkgWzkwLDk5KSB9Iik7Ci0gIFNlZWsoMzApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygzMCwgNDQpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBTZWVrKDkwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoOTAsIDk5KTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX0RlbGV0ZUFmdGVyTGFzdEFwcGVuZCkgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDEwIGJ1ZmZlcnMuCi0gIFNldE1lbW9yeUxpbWl0KDEwKTsKLQotICAvLyBBcHBlbmQgMSBHT1Agc3RhcnRpbmcgYXQgMzEwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMzEwSyAzNDAgMzcwIik7Ci0KLSAgLy8gQXBwZW5kIDIgR09QcyBzdGFydGluZyBhdCA0OTBtcywgMzBtcyBhcGFydC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI0OTBLIDUyMCA1NTAgNTgwSyA2MTAgNjQwIik7Ci0KLSAgRVhQRUNUX1RSVUUoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigwLCAwKSk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFszMTAsNDAwKSBbNDkwLDY3MCkgfSIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIEdPUCBhdCA1ODBtcy4KLSAgU2Vla1RvVGltZXN0YW1wTXMoNTgwKTsKLQotICAvLyBBcHBlbmQgMiBHT1BzIGJlZm9yZSB0aGUgZXhpc3RpbmcgcmFuZ2VzLgotICAvLyBTbyB0aGUgcmFuZ2VzIGJlZm9yZSBHQyBhcmUgInsgWzEwMCwyODApIFszMTAsNDAwKSBbNDkwLDY3MCkgfSIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTAwSyAxMzAgMTYwIDE5MEsgMjIwIDI1MEsiKTsKLQotICBFWFBFQ1RfVFJVRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDU4MCksIDApKTsKLQotICAvLyBTaG91bGQgc2F2ZSB0aGUgbmV3bHkgYXBwZW5kZWQgR09Qcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMDAsMjgwKSBbNTgwLDY3MCkgfSIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fRGVsZXRlQWZ0ZXJMYXN0QXBwZW5kTWVyZ2VkKSB7Ci0gIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gMTAgYnVmZmVycy4KLSAgU2V0TWVtb3J5TGltaXQoMTApOwotCi0gIC8vIEFwcGVuZCAzIEdPUHMgc3RhcnRpbmcgYXQgNDAwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNDAwSyA0MzAgNDYwIDQ5MEsgNTIwIDU1MCA1ODBLIDYxMCA2NDAiKTsKLQotICAvLyBTZWVrIHRvIHRoZSBHT1AgYXQgNTgwbXMuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDU4MCk7Ci0KLSAgLy8gQXBwZW5kIDIgR09QcyBzdGFydGluZyBhdCAyMjBtcywgYW5kIHRoZXkgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZXhpc3RpbmcKLSAgLy8gcmFuZ2UuICBTbyB0aGUgcmFuZ2UgYmVmb3JlIEdDIGlzICJ7IFsyMjAsNjcwKSB9Ii4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIyMjBLIDI1MCAyODAgMzEwSyAzNDAgMzcwIik7Ci0KLSAgRVhQRUNUX1RSVUUoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyg1ODApLCAwKSk7Ci0KLSAgLy8gU2hvdWxkIHNhdmUgdGhlIG5ld2x5IGFwcGVuZGVkIEdPUHMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMjIwLDQwMCkgWzU4MCw2NzApIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX05vU2VlaykgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDIwIGJ1ZmZlcnMuCi0gIFNldE1lbW9yeUxpbWl0KDIwKTsKLQotICAvLyBBcHBlbmQgMjUgYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDI0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMjUsICZrRGF0YUEpOwotCi0gIC8vIElmIHBsYXliYWNrIGlzIHN0aWxsIGluIHRoZSBmaXJzdCBHT1AgKHN0YXJ0aW5nIGF0IDApLCBHQyBzaG91bGQgZmFpbC4KLSAgRVhQRUNUX0ZBTFNFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMiwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDI0KSB9Iik7Ci0KLSAgLy8gQXMgc29vbiBhcyBwbGF5YmFjayBwb3NpdGlvbiBtb3ZlcyBwYXN0IHRoZSBmaXJzdCBHT1AsIGl0IHNob3VsZCBiZSByZW1vdmVkCi0gIC8vIGFuZCBhZnRlciByZW1vdmluZyB0aGUgZmlyc3QgR09QIHdlIGFyZSB1bmRlciBtZW1vcnkgbGltaXQuCi0gIEVYUEVDVF9UUlVFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoNSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDI0KSB9Iik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0gIFNlZWsoNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDI0LCAma0RhdGFBKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX1BlbmRpbmdTZWVrKSB7Ci0gIC8vIEFwcGVuZCAxMCBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggOS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDEwLCAma0RhdGFBKTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAyNSB0aHJvdWdoIDI5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMjUsIDUsICZrRGF0YUEpOwotCi0gIC8vIFNlZWsgdG8gcG9zaXRpb24gMTUuCi0gIFNlZWsoMTUpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDkpIFsyNSwyOSkgfSIpOwotCi0gIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gNSBidWZmZXJzLgotICBTZXRNZW1vcnlMaW1pdCg1KTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGFzIHBvc2l0aW9ucyAzMCB0byAzNCB0byB0cmlnZ2VyIEdDLgotICBBcHBlbmRCdWZmZXJzKDMwLCA1LCAma0RhdGFBKTsKLQotICBFWFBFQ1RfVFJVRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDMwLCAwKSk7Ci0KLSAgLy8gVGhlIGN1cnJlbnQgYWxnb3JpdGhtIHdpbGwgZGVsZXRlIGZyb20gdGhlIGJlZ2lubmluZyB1bnRpbCB0aGUgbWVtb3J5IGlzCi0gIC8vIHVuZGVyIGNhcC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMzAsMzQpIH0iKTsKLQotICAvLyBFeHBhbmQgbWVtb3J5IGxpbWl0IGFnYWluIHNvIHRoYXQgR0Mgd29uJ3QgYmUgdHJpZ2dlcmVkLgotICBTZXRNZW1vcnlMaW1pdCgxMDApOwotCi0gIC8vIEFwcGVuZCBkYXRhIHRvIGZ1bGZpbGwgc2Vlay4KLSAgRVhQRUNUX1RSVUUoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcigzMCwgNSkpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTUsIDUsICZrRGF0YUEpOwotCi0gIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSBhbGwgaXMgd2VsbC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTUsMTkpIFszMCwzNCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTksICZrRGF0YUEpOwotICBTZWVrKDMwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoMzAsIDM0LCAma0RhdGFBKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX05lZWRzTW9yZURhdGEpIHsKLSAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAxNSBidWZmZXJzLgotICBTZXRNZW1vcnlMaW1pdCgxNSk7Ci0KLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTAsICZrRGF0YUEpOwotCi0gIC8vIEFkdmFuY2UgbmV4dCBidWZmZXIgcG9zaXRpb24gdG8gMTAuCi0gIFNlZWsoMCk7Ci0gIEVYUEVDVF9UUlVFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMCwgMCkpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygwLCA5LCAma0RhdGFBKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgMjAgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAzNC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAyMCwgJmtEYXRhQSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsOSkgWzE1LDM0KSB9Iik7Ci0KLSAgLy8gR0Mgc2hvdWxkIHNhdmUgdGhlIGtleWZyYW1lIGJlZm9yZSB0aGUgbmV4dCBidWZmZXIgcG9zaXRpb24gYW5kIHRoZSBkYXRhCi0gIC8vIGNsb3Nlc3QgdG8gdGhlIG5leHQgYnVmZmVyIHBvc2l0aW9uLiBJdCB3aWxsIGFsc28gc2F2ZSBhbGwgYnVmZmVycyBmcm9tCi0gIC8vIG5leHQgYnVmZmVyIHRvIHRoZSBsYXN0IEdPUCBhcHBlbmRlZCwgd2hpY2ggb3ZlcmZsb3dzIGxpbWl0IGFuZCBsZWFkcyB0bwotICAvLyBmYWlsdXJlLgotICBFWFBFQ1RfRkFMU0UoR2FyYmFnZUNvbGxlY3RXaXRoUGxheWJhY2tBdEJ1ZmZlcig1LCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsOSkgWzE1LDM0KSB9Iik7Ci0KLSAgLy8gTm93IGZ1bGZpbGwgdGhlIHNlZWsgYXQgcG9zaXRpb24gMTAuIFRoaXMgd2lsbCBtYWtlIEdDIGRlbGV0ZSB0aGUgZGF0YQotICAvLyBiZWZvcmUgcG9zaXRpb24gMTAgdG8ga2VlcCBpdCB3aXRoaW4gY2FwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDUsICZrRGF0YUEpOwotICBFWFBFQ1RfVFJVRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDEwLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwLDI0KSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAyNCwgJmtEYXRhQSk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHYXJiYWdlQ29sbGVjdGlvbl9UcmFja0J1ZmZlcikgewotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRhaW5zVHJhY2tCdWZmZXJFeGhhdXN0aW9uU2tpcExvZyg5OSkpOwotCi0gIC8vIFNldCBtZW1vcnkgbGltaXQgdG8gMyBidWZmZXJzLgotICBTZXRNZW1vcnlMaW1pdCgzKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDE1LgotICBTZWVrKDE1KTsKLQotICAvLyBBcHBlbmQgMTggYnVmZmVycyBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDE3LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTgsICZrRGF0YUEpOwotCi0gIEVYUEVDVF9UUlVFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMTUsIDApKTsKLQotICAvLyBTaG91bGQgbGVhdmUgR09QIGNvbnRhaW5pbmcgc2VlayBwb3NpdGlvbi4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTUsMTcpIH0iKTsKLQotICAvLyBNb3ZlIG5leHQgYnVmZmVyIHBvc2l0aW9uIHRvIDE2LgotICBDaGVja0V4cGVjdGVkQnVmZmVycygxNSwgMTUsICZrRGF0YUEpOwotCi0gIC8vIENvbXBsZXRlbHkgb3ZlcmxhcCB0aGUgZXhpc3RpbmcgYnVmZmVycy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDIwLCAma0RhdGFCKTsKLQotICAvLyBGaW5hbCBHT1AgWzE1LDE5KSBjb250YWlucyA1IGJ1ZmZlcnMsIHdoaWNoIGlzIG1vcmUgdGhhbiBtZW1vcnkgbGltaXQgb2YKLSAgLy8gMyBidWZmZXJzIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXN0LCBzbyBHQyB3aWxsIGZhaWwuCi0gIEVYUEVDVF9GQUxTRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDE1LCAwKSk7Ci0KLSAgLy8gQmVjYXVzZSBidWZmZXJzIDE2IGFuZCAxNyBhcmUgbm90IGtleWZyYW1lcywgdGhleSBhcmUgbW92ZWQgdG8gdGhlIHRyYWNrCi0gIC8vIGJ1ZmZlciB1cG9uIG92ZXJsYXAuIFRoZSBzb3VyY2UgYnVmZmVyIChpLmUuIG5vdCB0aGUgdHJhY2sgYnVmZmVyKSBpcyBub3cKLSAgLy8gd2FpdGluZyBmb3IgdGhlIG5leHQga2V5ZnJhbWUuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzE1LDE5KSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDE2LCAxNywgJmtEYXRhQSk7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gTm93IGFkZCBhIGtleWZyYW1lIGF0IHBvc2l0aW9uIDIwLgotICBBcHBlbmRCdWZmZXJzKDIwLCA1LCAma0RhdGFCKTsKLQotICAvLyA1IGJ1ZmZlcnMgaW4gZmluYWwgR09QLCBHQyB3aWxsIGZhaWwKLSAgRVhQRUNUX0ZBTFNFKEdhcmJhZ2VDb2xsZWN0V2l0aFBsYXliYWNrQXRCdWZmZXIoMjAsIDApKTsKLQotICAvLyBTaG91bGQgZ2FyYmFnZSBjb2xsZWN0IHN1Y2ggdGhhdCB0aGVyZSBhcmUgNSBmcmFtZXMgcmVtYWluaW5nLCBzdGFydGluZyBhdAotICAvLyB0aGUga2V5ZnJhbWUuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzIwLDI0KSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDIwLCAyNCwgJmtEYXRhQik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFRlc3QgR0MgcHJlc2VydmVzIGRhdGEgc3RhcnRpbmcgYXQgZmlyc3QgR09QIGNvbnRhaW5pbmcgcGxheWJhY2sgcG9zaXRpb24uCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fU2F2ZURhdGFBdFBsYXliYWNrUG9zaXRpb24pIHsKLSAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAzMCBidWZmZXJzID0gMSBzZWNvbmQgb2YgZGF0YS4KLSAgU2V0TWVtb3J5TGltaXQoMzApOwotICAvLyBBbmQgYXBwZW5kIDMwMCBidWZmZXJzID0gMTAgc2Vjb25kcyBvZiBkYXRhLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMzAwLCAma0RhdGFBKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyOTkpIH0iKTsKLQotICAvLyBQbGF5YmFjayBwb3NpdGlvbiBhdCAwLCBhbGwgZGF0YSBtdXN0IGJlIHByZXNlcnZlZC4KLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZChEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoMCksIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwyOTkpIH0iKTsKLQotICAvLyBQbGF5YmFjayBwb3NpdGlvbiBhdCAxIHNlYywgdGhlIGZpcnN0IHNlY29uZCBvZiBkYXRhIFswLDI5KSBzaG91bGQgYmUKLSAgLy8gY29sbGVjdGVkLCBzaW5jZSB3ZSBhcmUgd2F5IG92ZXIgbWVtb3J5IGxpbWl0LgotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcygxMDAwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFszMCwyOTkpIH0iKTsKLQotICAvLyBQbGF5YmFjayBwb3NpdGlvbiBhdCAxLjEgc2VjLCBubyBuZXcgZGF0YSBjYW4gYmUgY29sbGVjdGVkLCBzaW5jZSB0aGUKLSAgLy8gcGxheWJhY2sgcG9zaXRpb24gaXMgc3RpbGwgaW4gdGhlIGZpcnN0IEdPUCBvZiBidWZmZXJlZCBkYXRhLgotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcygxMTAwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFszMCwyOTkpIH0iKTsKLQotICAvLyBQbGF5YmFjayBwb3NpdGlvbiBhdCA1LjE2NiBzZWMsIGp1c3QgYXQgdGhlIHZlcnkgZW5kIG9mIEdPUCBjb3JyZXNwb25kaW5nCi0gIC8vIHRvIGJ1ZmZlciByYW5nZSAxNTAtMTU1LCB3aGljaCBzaG91bGQgYmUgcHJlc2VydmVkLgotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyg1MTY2KSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsxNTAsMjk5KSB9Iik7Ci0KLSAgLy8gUGxheWJhY2sgcG9zaXRpb24gYXQgNS4xNjcgc2VjLCBqdXN0IHBhc3QgdGhlIGVuZCBvZiBHT1AgY29ycmVzcG9uZGluZyB0bwotICAvLyBidWZmZXIgcmFuZ2UgMTUwLTE1NSwgaXQgc2hvdWxkIGJlIGdhcmJhZ2UgY29sbGVjdGVkIG5vdy4KLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoNTE2NyksIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMTU1LDI5OSkgfSIpOwotCi0gIC8vIFBsYXliYWNrIGF0IDkuMCBzZWMsIHdlIGNhbiBub3cgc3VjY2Vzc2Z1bGx5IGNvbGxlY3QgYWxsIGRhdGEgZXhjZXB0IHRoZQotICAvLyBsYXN0IHNlY29uZCBhbmQgd2UgYXJlIGJhY2sgdW5kZXIgbWVtb3J5IGxpbWl0IG9mIDMwIGJ1ZmZlcnMsIHNvIEdDSWZOZWVkZWQKLSAgLy8gc2hvdWxkIHJldHVybiB0cnVlLgotICBFWFBFQ1RfVFJVRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDkwMDApLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzI3MCwyOTkpIH0iKTsKLQotICAvLyBQbGF5YmFjayBhdCA5Ljk5OSBzZWMsIEdDIHN1Y2NlZWRzLCBzaW5jZSB3ZSBhcmUgdW5kZXIgbWVtb3J5IGxpbWl0IGV2ZW4KLSAgLy8gd2l0aG91dCByZW1vdmluZyBhbnkgZGF0YS4KLSAgRVhQRUNUX1RSVUUoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcyg5OTk5KSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsyNzAsMjk5KSB9Iik7Ci0KLSAgLy8gUGxheWJhY2sgYXQgMTUgc2VjLCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gZHVyaW5nIHJlZ3VsYXIgcGxheWJhY2sgaW4KLSAgLy8gYnJvd3Nlciwgc2luY2UgdGhpcyBwb3NpdGlvbiBoYXMgbm8gZGF0YSBidWZmZXJlZCwgYnV0IGl0IHNob3VsZCBzdGlsbAotICAvLyBjYXVzZSBubyBwcm9ibGVtcyB0byBHQyBhbGdvcml0aG0sIHNvIHRlc3QgaXQganVzdCBpbiBjYXNlLgotICBFWFBFQ1RfVFJVRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDE1MDAwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsyNzAsMjk5KSB9Iik7Ci19Ci0KLS8vIFRlc3Qgc2F2aW5nIHRoZSBsYXN0IEdPUCBhcHBlbmRlZCB3aGVuIHRoaXMgR09QIGlzIHRoZSBvbmx5IEdPUCBpbiBpdHMgcmFuZ2UuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fU2F2ZUFwcGVuZEdPUCkgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDMgYW5kIG1ha2Ugc3VyZSB0aGUgNC1ieXRlIEdPUCBpcyBub3QgZ2FyYmFnZQotICAvLyBjb2xsZWN0ZWQuCi0gIFNldE1lbW9yeUxpbWl0KDMpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwIik7Ci0gIEVYUEVDVF9GQUxTRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDAsIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDEyMCkgfSIpOwotCi0gIC8vIE1ha2Ugc3VyZSB5b3UgY2FuIGNvbnRpbnVlIGFwcGVuZGluZyBkYXRhIHRvIHRoaXMgR09QOyBhZ2FpbiwgR0Mgc2hvdWxkIG5vdAotICAvLyB3aXBlIG91dCBhbnl0aGluZy4KLSAgQXBwZW5kQnVmZmVycygiMTIwRDMwIik7Ci0gIEVYUEVDVF9GQUxTRShHYXJiYWdlQ29sbGVjdFdpdGhQbGF5YmFja0F0QnVmZmVyKDAsIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE1MCkgfSIpOwotCi0gIC8vIEFwcGVuZCBhIDJuZCByYW5nZSBhZnRlciB0aGlzIHdpdGhvdXQgdHJpZ2dlcmluZyBHQy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIyMDBLIDIzMCAyNjAgMjkwSyAzMjAgMzUwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNTApIFsyMDAsMzgwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byAyOTBtcy4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMjkwKTsKLQotICAvLyBOb3cgYXBwZW5kIGEgR09QIGluIGEgc2VwYXJhdGUgcmFuZ2UgYWZ0ZXIgdGhlIHNlbGVjdGVkIHJhbmdlIGFuZCB0cmlnZ2VyCi0gIC8vIEdDLiBCZWNhdXNlIGl0IGlzIGFmdGVyIDI5MG1zLCB0aGlzIHRlc3RzIHRoYXQgdGhlIEdPUCBpcyBzYXZlZCB3aGVuCi0gIC8vIGRlbGV0aW5nIGZyb20gdGhlIGJhY2suCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNTAwSyA1MzAgNTYwIDU5MCIpOwotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcygyOTApLCAwKSk7Ci0KLSAgLy8gU2hvdWxkIHNhdmUgR09QcyBiZXR3ZWVuIDI5MG1zIGFuZCB0aGUgbGFzdCBHT1AgYXBwZW5kZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMjkwLDM4MCkgWzUwMCw2MjApIH0iKTsKLQotICAvLyBDb250aW51ZSBhcHBlbmRpbmcgdG8gdGhpcyBHT1AgYWZ0ZXIgR0MuCi0gIEFwcGVuZEJ1ZmZlcnMoIjYyMEQzMCIpOwotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZCgKLSAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbU1pbGxpc2Vjb25kcygyOTApLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMjkwLDM4MCkgWzUwMCw2NTApIH0iKTsKLX0KLQotLy8gVGVzdCBzYXZpbmcgdGhlIGxhc3QgR09QIGFwcGVuZGVkIHdoZW4gdGhpcyBHT1AgaXMgaW4gdGhlIG1pZGRsZSBvZiBhCi0vLyBub24tc2VsZWN0ZWQgcmFuZ2UuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fU2F2ZUFwcGVuZEdPUF9NaWRkbGUpIHsKLSAgLy8gQXBwZW5kIDMgR09QcyBzdGFydGluZyBhdCAwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAgOTBLIDEyMCAxNTAgMTgwSyAyMTAgMjQwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyNzApIH0iKTsKLQotICAvLyBOb3cgc2V0IHRoZSBtZW1vcnkgbGltaXQgdG8gMSBhbmQgb3ZlcmxhcCB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSB3aXRoIGEKLSAgLy8gbmV3IEdPUC4KLSAgU2V0TWVtb3J5TGltaXQoMSk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiODBLIDExMCAxNDAiKTsKLQotICAvLyBUaGlzIHdob2xlIEdPUCBzaG91bGQgYmUgc2F2ZWQgYWZ0ZXIgR0MsIHdoaWNoIHdpbGwgZmFpbCBkdWUgdG8gR09QIGJlaW5nCi0gIC8vIGxhcmdlciB0aGFuIDEgYnVmZmVyCi0gIEVYUEVDVF9GQUxTRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDgwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzgwLDE3MCkgfSIpOwotICAvLyBXZSBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhcHBlbmRpbmcgZGF0YSB0byBHT1AKLSAgQXBwZW5kQnVmZmVycygiMTcwRDMwIik7Ci0gIEVYUEVDVF9GQUxTRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDgwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzgwLDIwMCkgfSIpOwotCi0gIC8vIEFwcGVuZCBhIDJuZCByYW5nZSBhZnRlciB0aGlzIHJhbmdlLCB3aXRob3V0IHRyaWdnZXJpbmcgR0MuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNDAwSyA0MzAgNDYwIDQ5MEsgNTIwIDU1MCA1ODBLIDYxMCA2NDAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs4MCwyMDApIFs0MDAsNjcwKSB9Iik7Ci0KLSAgLy8gU2VlayB0byA4MG1zIHRvIG1ha2UgdGhlIGZpcnN0IHJhbmdlIHRoZSBzZWxlY3RlZCByYW5nZS4KLSAgU2Vla1RvVGltZXN0YW1wTXMoODApOwotCi0gIC8vIE5vdyBhcHBlbmQgYSBHT1AgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2Vjb25kIHJhbmdlIGFuZCB0cmlnZ2VyIEdDLiBCZWNhdXNlCi0gIC8vIGl0IGlzIGFmdGVyIHRoZSBzZWxlY3RlZCByYW5nZSwgdGhpcyB0ZXN0cyB0aGF0IHRoZSBHT1AgaXMgc2F2ZWQgd2hlbgotICAvLyBkZWxldGluZyBmcm9tIHRoZSBiYWNrLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjUwMEsgNTMwIDU2MCA1OTAiKTsKLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoODApLCAwKSk7Ci0KLSAgLy8gU2hvdWxkIHNhdmUgdGhlIEdPUHMgYmV0d2VlbiB0aGUgc2VlayBwb2ludCBhbmQgR09QIHRoYXQgd2FzIGxhc3QgYXBwZW5kZWQKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs4MCwyMDApIFs0MDAsNjIwKSB9Iik7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nIHRvIHRoaXMgR09QIGFmdGVyIEdDLgotICBBcHBlbmRCdWZmZXJzKCI2MjBEMzAiKTsKLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoODApLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbODAsMjAwKSBbNDAwLDY1MCkgfSIpOwotfQotCi0vLyBUZXN0IHNhdmluZyB0aGUgbGFzdCBHT1AgYXBwZW5kZWQgd2hlbiB0aGUgR09QIGNvbnRhaW5pbmcgdGhlIG5leHQgYnVmZmVyIGlzCi0vLyBhZGphY2VudCB0byB0aGUgbGFzdCBHT1AgYXBwZW5kZWQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fU2F2ZUFwcGVuZEdPUF9TZWxlY3RlZDEpIHsKLSAgLy8gQXBwZW5kIDMgR09QcyBhdCAwbXMsIDkwbXMsIGFuZCAxODBtcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MEsgMTIwIDE1MCAxODBLIDIxMCAyNDAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDI3MCkgfSIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIEdPUCBhdCA5MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcyg5MCk7Ci0KLSAgLy8gU2V0IHRoZSBtZW1vcnkgbGltaXQgdG8gMSwgdGhlbiBvdmVybGFwIHRoZSBHT1AgYXQgMC4KLSAgU2V0TWVtb3J5TGltaXQoMSk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAiKTsKLQotICAvLyBHQyBzaG91bGQgc2F2ZSB0aGUgR09QIGF0IDBtcyBhbmQgOTBtcywgYW5kIHdpbGwgZmFpbCBzaW5jZSBHT1AgbGFyZ2VyCi0gIC8vIHRoYW4gMSBidWZmZXIKLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoOTApLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxODApIH0iKTsKLQotICAvLyBTZWVrIHRvIDAgYW5kIGNoZWNrIGFsbCBidWZmZXJzLgotICBTZWVrVG9UaW1lc3RhbXBNcygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwSyAxMjAgMTUwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gTm93IHNlZWsgYmFjayB0byA5MG1zIGFuZCBhcHBlbmQgYSBHT1AgYXQgMTgwbXMuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDkwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxODBLIDIxMCAyNDAiKTsKLQotICAvLyBTaG91bGQgc2F2ZSB0aGUgR09QIGF0IDkwbXMgYW5kIHRoZSBHT1AgYXQgMTgwbXMuCi0gIEVYUEVDVF9GQUxTRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDkwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzkwLDI3MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiOTBLIDEyMCAxNTAgMTgwSyAyMTAgMjQwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFRlc3Qgc2F2aW5nIHRoZSBsYXN0IEdPUCBhcHBlbmRlZCB3aGVuIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZQotLy8gc2VsZWN0ZWQgcmFuZ2UuIFRoaXMgdGVzdHMgd2hlbiB0aGUgbGFzdCBHT1AgYXBwZW5kZWQgaXMgYmVmb3JlIG9yIGFmdGVyIHRoZQotLy8gR09QIGNvbnRhaW5pbmcgdGhlIG5leHQgYnVmZmVyLCBidXQgbm90IGRpcmVjdGx5IGFkamFjZW50IHRvIHRoaXMgR09QLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX1NhdmVBcHBlbmRHT1BfU2VsZWN0ZWQyKSB7Ci0gIC8vIEFwcGVuZCA0IEdPUHMgc3RhcnRpbmcgYXQgcG9zaXRpb25zIDBtcywgOTBtcywgMTgwbXMsIDI3MG1zLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwSyAxMjAgMTUwIDE4MEsgMjEwIDI0MCAyNzBLIDMwMCAzMzAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDM2MCkgfSIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIGxhc3QgR09QIGF0IDI3MG1zLgotICBTZWVrVG9UaW1lc3RhbXBNcygyNzApOwotCi0gIC8vIFNldCB0aGUgbWVtb3J5IGxpbWl0IHRvIDEsIHRoZW4gb3ZlcmxhcCB0aGUgR09QIGF0IDkwbXMuCi0gIFNldE1lbW9yeUxpbWl0KDEpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjkwSyAxMjAgMTUwIik7Ci0KLSAgLy8gR0Mgd2lsbCBzYXZlIGRhdGEgaW4gdGhlIHJhbmdlIHdoZXJlIHRoZSBtb3N0IHJlY2VudCBhcHBlbmQgaGFzIGhhcHBlbmVkCi0gIC8vIFswOyAxODApIGFuZCB0aGUgcmFuZ2Ugd2hlcmUgdGhlIG5leHQgcmVhZCBwb3NpdGlvbiBpcyBbMjcwOzM2MCkKLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoMjcwKSwgMCkpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTgwKSBbMjcwLDM2MCkgfSIpOwotCi0gIC8vIEFkZCAzIEdPUHMgdG8gdGhlIGVuZCBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgYXQgMzYwbXMsIDQ1MG1zLCBhbmQgNTQwbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMzYwSyAzOTAgNDIwIDQ1MEsgNDgwIDUxMCA1NDBLIDU3MCA2MDAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE4MCkgWzI3MCw2MzApIH0iKTsKLQotICAvLyBPdmVybGFwIHRoZSBHT1AgYXQgNDUwbXMgYW5kIGdhcmJhZ2UgY29sbGVjdCB0byB0ZXN0IGRlbGV0aW5nIGZyb20gdGhlCi0gIC8vIGJhY2suCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNDUwSyA0ODAgNTEwIik7Ci0gIEVYUEVDVF9GQUxTRShzdHJlYW1fLT5HYXJiYWdlQ29sbGVjdElmTmVlZGVkKAotICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDI3MCksIDApKTsKLQotICAvLyBTaG91bGQgc2F2ZSBHT1BzIGZyb20gR09QIGF0IDI3MG1zIHRvIEdPUCBhdCA0NTBtcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsyNzAsNTQwKSB9Iik7Ci19Ci0KLS8vIFRlc3Qgc2F2aW5nIHRoZSBsYXN0IEdPUCBhcHBlbmRlZCB3aGVuIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBHT1AgY29udGFpbmluZwotLy8gdGhlIG5leHQgYnVmZmVyLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEdhcmJhZ2VDb2xsZWN0aW9uX1NhdmVBcHBlbmRHT1BfU2VsZWN0ZWQzKSB7Ci0gIC8vIFNlZWsgdG8gc3RhcnQgb2Ygc3RyZWFtLgotICBTZWVrVG9UaW1lc3RhbXBNcygwKTsKLQotICAvLyBBcHBlbmQgMyBHT1BzIHN0YXJ0aW5nIGF0IDBtcywgOTBtcywgMTgwbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAgOTBLIDEyMCAxNTAgMTgwSyAyMTAgMjQwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyNzApIH0iKTsKLQotICAvLyBTZXQgdGhlIG1lbW9yeSBsaW1pdCB0byAxIHRoZW4gYmVnaW4gYXBwZW5kaW5nIHRoZSBzdGFydCBvZiBhIEdPUCBzdGFydGluZwotICAvLyBhdCAwbXMuCi0gIFNldE1lbW9yeUxpbWl0KDEpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIik7Ci0KLSAgLy8gR0Mgc2hvdWxkIHNhdmUgdGhlIG5ld2x5IGFwcGVuZGVkIEdPUCwgd2hpY2ggaXMgYWxzbyB0aGUgbmV4dCBHT1AgdGhhdAotICAvLyB3aWxsIGJlIHJldHVybmVkIGZyb20gdGhlIHNlZWsgcmVxdWVzdC4KLSAgRVhQRUNUX0ZBTFNFKAotICAgICAgc3RyZWFtXy0+R2FyYmFnZUNvbGxlY3RJZk5lZWRlZChEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoMCksIDApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDYwKSB9Iik7Ci0KLSAgLy8gQ2hlY2sgdGhlIGJ1ZmZlcnMgaW4gdGhlIHJhbmdlLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBDb250aW51ZSBhcHBlbmRpbmcgdG8gdGhpcyBidWZmZXIuCi0gIEFwcGVuZEJ1ZmZlcnMoIjYwIDkwIik7Ci0KLSAgLy8gR0Mgc2hvdWxkIHN0aWxsIHNhdmUgdGhlIHJlc3Qgb2YgdGhpcyBHT1AgYW5kIHNob3VsZCBiZSBhYmxlIHRvIGZ1bGZpbGwKLSAgLy8gdGhlIHJlYWQuCi0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoRGVjb2RlVGltZXN0YW1wOjpGcm9tTWlsbGlzZWNvbmRzKDApLCAwKSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjYwIDkwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFRlc3QgdGhlIHBlcmZvcm1hbmNlIG9mIGdhcmJhZ2UgY29sbGVjdGlvbi4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHYXJiYWdlQ29sbGVjdGlvbl9QZXJmb3JtYW5jZSkgewotICAvLyBGb3JjZSB8a2V5ZnJhbWVzX3Blcl9zZWNvbmRffCB0byBiZSBlcXVhbCB0byBrRGVmYXVsdEZyYW1lc1BlclNlY29uZC4KLSAgU2V0U3RyZWFtSW5mbyhrRGVmYXVsdEZyYW1lc1BlclNlY29uZCwga0RlZmF1bHRGcmFtZXNQZXJTZWNvbmQpOwotCi0gIGNvbnN0IGludCBrQnVmZmVyc1RvS2VlcCA9IDEwMDA7Ci0gIFNldE1lbW9yeUxpbWl0KGtCdWZmZXJzVG9LZWVwKTsKLQotICBpbnQgYnVmZmVyc19hcHBlbmRlZCA9IDA7Ci0KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIGtCdWZmZXJzVG9LZWVwKTsKLSAgYnVmZmVyc19hcHBlbmRlZCArPSBrQnVmZmVyc1RvS2VlcDsKLQotICBjb25zdCBpbnQga0J1ZmZlcnNUb0FwcGVuZCA9IDEwMDA7Ci0gIGNvbnN0IGludCBrR2FyYmFnZUNvbGxlY3Rpb25zID0gMzsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrR2FyYmFnZUNvbGxlY3Rpb25zOyArK2kpIHsKLSAgICBBcHBlbmRCdWZmZXJzKGJ1ZmZlcnNfYXBwZW5kZWQsIGtCdWZmZXJzVG9BcHBlbmQpOwotICAgIGJ1ZmZlcnNfYXBwZW5kZWQgKz0ga0J1ZmZlcnNUb0FwcGVuZDsKLSAgfQotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2FyYmFnZUNvbGxlY3Rpb25fTWVkaWFUaW1lQWZ0ZXJMYXN0QXBwZW5kVGltZSkgewotICAvLyBTZXQgbWVtb3J5IGxpbWl0IHRvIDEwIGJ1ZmZlcnMuCi0gIFNldE1lbW9yeUxpbWl0KDEwKTsKLQotICAvLyBBcHBlbmQgMTIgYnVmZmVycy4gVGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IGJ1ZmZlciBpcyAzMAotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwIDEyMEsgMTUwIDE4MCAyMTBLIDI0MCAyNzAgMzAwSyAzMzBEMzAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDM2MCkgfSIpOwotCi0gIC8vIERvIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHdpdGggdGhlIG1lZGlhIHRpbWUgaGlnaGVyIHRoYW4gdGhlIHRpbWVzdGFtcCBvZgotICAvLyB0aGUgbGFzdCBhcHBlbmRlZCBidWZmZXIgKDMzMCksIGJ1dCBzdGlsbCB3aXRoaW4gYnVmZmVyZWQgcmFuZ2VzLCB0YWtpbmcKLSAgLy8gaW50byBhY2NvdW50IHRoZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBmcmFtZSAodGltZXN0YW1wIG9mIHRoZSBsYXN0IGZyYW1lIGlzCi0gIC8vIDMzMCwgZHVyYXRpb24gaXMgMzAsIHNvIHRoZSBsYXRlc3QgdmFsaWQgYnVmZmVyZWQgcG9zaXRpb24gaXMgMzMwKzMwPTM2MCkuCi0gIEVYUEVDVF9UUlVFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoMzYwKSwgMCkpOwotCi0gIC8vIEdDIHNob3VsZCBjb2xsZWN0IG9uZSBHT1AgZnJvbSB0aGUgZnJvbnQgdG8gYnJpbmcgdXMgYmFjayB1bmRlciBtZW1vcnkKLSAgLy8gbGltaXQgb2YgMTAgYnVmZmVycy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMjAsMzYwKSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIEdhcmJhZ2VDb2xsZWN0aW9uX01lZGlhVGltZU91dHNpZGVPZlN0cmVhbUJ1ZmZlcmVkUmFuZ2UpIHsKLSAgLy8gU2V0IG1lbW9yeSBsaW1pdCB0byAxMCBidWZmZXJzLgotICBTZXRNZW1vcnlMaW1pdCgxMCk7Ci0KLSAgLy8gQXBwZW5kIDEyIGJ1ZmZlcnMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAgOTAgMTIwSyAxNTAgMTgwIDIxMEsgMjQwIDI3MCAzMDBLIDMzMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMzYwKSB9Iik7Ci0KLSAgLy8gU2VlayBpbiBvcmRlciB0byBzZXQgdGhlIHN0cmVhbSByZWFkIHBvc2l0aW9uIHRvIDMzMCBhbiBlbnN1cmUgdGhhdCB0aGUKLSAgLy8gc3RyZWFtIHNlbGVjdHMgdGhlIGJ1ZmZlcmVkIHJhbmdlLgotICBTZWVrVG9UaW1lc3RhbXBNcygzMzApOwotCi0gIC8vIERvIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHdpdGggdGhlIG1lZGlhIHRpbWUgb3V0c2lkZSB0aGUgYnVmZmVyZWQgcmFuZ2VzCi0gIC8vICh0aGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRoZXJlJ3MgYm90aCBhdWRpbyBhbmQgdmlkZW8gc3RyZWFtcywgYXVkaW8gc3RyZWFtCi0gIC8vIGJ1ZmZlcmVkIHJhbmdlIGlzIGxvbmdlciB0aGFuIHRoZSB2aWRlbyBzdHJlYW0gYnVmZmVyZWQgcmFuZ2UsIHNpbmNlCi0gIC8vIG1lZGlhOjpQaXBlbGluZSB1c2VzIGF1ZGlvIHN0cmVhbSBhcyBhIHRpbWUgc291cmNlIGluIHRoYXQgY2FzZSwgaXQgbWlnaHQKLSAgLy8gcmV0dXJuIGEgbWVkaWFfdGltZSB0aGF0IGlzIHNsaWdodGx5IG91dHNpZGUgb2YgdmlkZW8gYnVmZmVyZWQgcmFuZ2UpLiBJbgotICAvLyB0aG9zZSBjYXNlcyB0aGUgR0MgYWxnb3JpdGhtIHNob3VsZCBjbGFtcCB0aGUgbWVkaWFfdGltZSB2YWx1ZSB0byB0aGUKLSAgLy8gYnVmZmVyZWQgcmFuZ2VzIHRvIHdvcmsgY29ycmVjdGx5IChzZWUgY3JidWcuY29tLzU2MzI5MikuCi0gIEVYUEVDVF9UUlVFKHN0cmVhbV8tPkdhcmJhZ2VDb2xsZWN0SWZOZWVkZWQoCi0gICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21NaWxsaXNlY29uZHMoMzYxKSwgMCkpOwotCi0gIC8vIEdDIHNob3VsZCBjb2xsZWN0IG9uZSBHT1AgZnJvbSB0aGUgZnJvbnQgdG8gYnJpbmcgdXMgYmFjayB1bmRlciBtZW1vcnkKLSAgLy8gbGltaXQgb2YgMTAgYnVmZmVycy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMjAsMzYwKSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXRSZW1vdmFsUmFuZ2VfQnl0ZXNUb0ZyZWUpIHsKLSAgLy8gQXBwZW5kIDIgR09QcyBzdGFydGluZyBhdCAzMDBtcywgMzBtcyBhcGFydC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIzMDBLIDMzMCAzNjAgMzkwSyA0MjAgNDUwIik7Ci0KLSAgLy8gQXBwZW5kIDIgR09QcyBzdGFydGluZyBhdCA2MDBtcywgMzBtcyBhcGFydC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI2MDBLIDYzMCA2NjAgNjkwSyA3MjAgNzUwIik7Ci0KLSAgLy8gQXBwZW5kIDIgR09QcyBzdGFydGluZyBhdCA5MDBtcywgMzBtcyBhcGFydC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI5MDBLIDkzMCA5NjAgOTkwSyAxMDIwIDEwNTAiKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzMwMCw0ODApIFs2MDAsNzgwKSBbOTAwLDEwODApIH0iKTsKLQotICBpbnQgcmVtb3ZlX3JhbmdlX2VuZCA9IC0xOwotICBpbnQgYnl0ZXNfcmVtb3ZlZCA9IC0xOwotCi0gIC8vIFNpemUgMC4KLSAgYnl0ZXNfcmVtb3ZlZCA9IEdldFJlbW92YWxSYW5nZUluTXMoMzAwLCAxMDgwLCAwLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgtMSwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgwLCBieXRlc19yZW1vdmVkKTsKLQotICAvLyBTbWFsbGVyIHRoYW4gdGhlIHNpemUgb2YgR09QLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5NcygzMDAsIDEwODAsIDEsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDM5MCwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIC8vIFJlbW92ZSBhcyB0aGUgc2l6ZSBvZiBHT1AuCi0gIEVYUEVDVF9FUSgzLCBieXRlc19yZW1vdmVkKTsKLQotICAvLyBUaGUgc2FtZSBzaXplIHdpdGggYSBHT1AuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMwMCwgMTA4MCwgMywgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMzkwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDMsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIFRoZSBzYW1lIHNpemUgd2l0aCBhIHJhbmdlLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5NcygzMDAsIDEwODAsIDYsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDQ4MCwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSg2LCBieXRlc19yZW1vdmVkKTsKLQotICAvLyBBIGZyYW1lIGxhcmdlciB0aGFuIGEgcmFuZ2UuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMwMCwgMTA4MCwgNywgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoNjkwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDksIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIFRoZSBzYW1lIHNpemUgd2l0aCB0d28gcmFuZ2VzLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5NcygzMDAsIDEwODAsIDEyLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSg3ODAsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMTIsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIExhcmdlciB0aGFuIHR3byByYW5nZXMuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMwMCwgMTA4MCwgMTQsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDk5MCwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgxNSwgYnl0ZXNfcmVtb3ZlZCk7Ci0KLSAgLy8gVGhlIHNhbWUgc2l6ZSB3aXRoIHRoZSB3aG9sZSByYW5nZXMuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMwMCwgMTA4MCwgMTgsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDEwODAsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMTgsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIExhcmdlciB0aGFuIHRoZSB3aG9sZSByYW5nZXMuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMwMCwgMTA4MCwgMjAsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDEwODAsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMTgsIGJ5dGVzX3JlbW92ZWQpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgR2V0UmVtb3ZhbFJhbmdlX1JhbmdlKSB7Ci0gIC8vIEFwcGVuZCAyIEdPUHMgc3RhcnRpbmcgYXQgMzAwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMzAwSyAzMzAgMzYwIDM5MEsgNDIwIDQ1MCIpOwotCi0gIC8vIEFwcGVuZCAyIEdPUHMgc3RhcnRpbmcgYXQgNjAwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNjAwSyA2MzAgNjYwIDY5MEsgNzIwIDc1MCIpOwotCi0gIC8vIEFwcGVuZCAyIEdPUHMgc3RhcnRpbmcgYXQgOTAwbXMsIDMwbXMgYXBhcnQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiOTAwSyA5MzAgOTYwIDk5MEsgMTAyMCAxMDUwIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFszMDAsNDgwKSBbNjAwLDc4MCkgWzkwMCwxMDgwKSB9Iik7Ci0KLSAgaW50IHJlbW92ZV9yYW5nZV9lbmQgPSAtMTsKLSAgaW50IGJ5dGVzX3JlbW92ZWQgPSAtMTsKLQotICAvLyBXaXRoaW4gYSBHT1AgYW5kIG5vIGtleWZyYW1lLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5Ncyg2MzAsIDY2MCwgMjAsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKC0xLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDAsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIEFjcm9zcyBhIEdPUCBhbmQgbm8ga2V5ZnJhbWUuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDYzMCwgNzUwLCAyMCwgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoLTEsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMCwgYnl0ZXNfcmVtb3ZlZCk7Ci0KLSAgLy8gVGhlIHNhbWUgc2l6ZSB3aXRoIGEgcmFuZ2UuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDYwMCwgNzgwLCAyMCwgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoNzgwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDYsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIE9uZSBmcmFtZSBsYXJnZXIgdGhhbiBhIHJhbmdlLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5Ncyg1NzAsIDgxMCwgMjAsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDc4MCwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSg2LCBieXRlc19yZW1vdmVkKTsKLQotICAvLyBGYWNpbmcgdGhlIG90aGVyIHJhbmdlcy4KLSAgYnl0ZXNfcmVtb3ZlZCA9IEdldFJlbW92YWxSYW5nZUluTXMoNDgwLCA5MDAsIDIwLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSg3ODAsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoNiwgYnl0ZXNfcmVtb3ZlZCk7Ci0KLSAgLy8gSW4gdGhlIG1pZGxlIG9mIHRoZSBvdGhlciByYW5nZXMsIGJ1dCBub3QgaW5jbHVkaW5nIGFueSBHT1AuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDQyMCwgOTYwLCAyMCwgJnJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoNzgwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDYsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIEluIHRoZSBtaWRkbGUgb2YgdGhlIG90aGVyIHJhbmdlcy4KLSAgYnl0ZXNfcmVtb3ZlZCA9IEdldFJlbW92YWxSYW5nZUluTXMoMzkwLCA5OTAsIDIwLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSg5OTAsIHJlbW92ZV9yYW5nZV9lbmQpOwotICBFWFBFQ1RfRVEoMTIsIGJ5dGVzX3JlbW92ZWQpOwotCi0gIC8vIEEgZnJhbWUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSByYW5nZXMuCi0gIGJ5dGVzX3JlbW92ZWQgPSBHZXRSZW1vdmFsUmFuZ2VJbk1zKDMzMCwgMTA1MCwgMjAsICZyZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDk5MCwgcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgxMiwgYnl0ZXNfcmVtb3ZlZCk7Ci0KLSAgLy8gVGhlIHNhbWUgd2l0aCB0aGUgd2hvbGUgcmFuZ2VzLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5NcygzMDAsIDEwODAsIDIwLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgxMDgwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDE4LCBieXRlc19yZW1vdmVkKTsKLQotICAvLyBMYXJnZXIgdGhhbiB0aGUgd2hvbGUgcmFuZ2VzLgotICBieXRlc19yZW1vdmVkID0gR2V0UmVtb3ZhbFJhbmdlSW5NcygyNzAsIDExMTAsIDIwLCAmcmVtb3ZlX3JhbmdlX2VuZCk7Ci0gIEVYUEVDVF9FUSgxMDgwLCByZW1vdmVfcmFuZ2VfZW5kKTsKLSAgRVhQRUNUX0VRKDE4LCBieXRlc19yZW1vdmVkKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIENvbmZpZ0NoYW5nZV9CYXNpYykgewotICBWaWRlb0RlY29kZXJDb25maWcgbmV3X2NvbmZpZyA9IFRlc3RWaWRlb0NvbmZpZzo6TGFyZ2UoKTsKLSAgQVNTRVJUX0ZBTFNFKG5ld19jb25maWcuTWF0Y2hlcyh2aWRlb19jb25maWdfKSk7Ci0KLSAgU2VlaygwKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLQotICAvLyBBcHBlbmQgNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggNAotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNSwgJmtEYXRhQSk7Ci0KLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLQotICAvLyBTaWduYWwgYSBjb25maWcgY2hhbmdlLgotICBzdHJlYW1fLT5VcGRhdGVWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLQotICAvLyBNYWtlIHN1cmUgdXBkYXRpbmcgdGhlIGNvbmZpZyBkb2Vzbid0IGNoYW5nZSBhbnl0aGluZyBzaW5jZSBuZXdfY29uZmlnCi0gIC8vIHNob3VsZCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIgR2V0TmV4dEJ1ZmZlcigpIHdpbGwgcmV0dXJuLgotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDUgdGhyb3VnaCA5LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoNSwgNSwgJmtEYXRhQik7Ci0KLSAgLy8gQ29uc3VtZSB0aGUgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIGluaXRpYWwgY29uZmlnLgotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyOwotICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgIEVYUEVDVF9FUShzdHJlYW1fLT5HZXROZXh0QnVmZmVyKCZidWZmZXIpLCBTb3VyY2VCdWZmZXJTdHJlYW06OmtTdWNjZXNzKTsKLSAgICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICB9Ci0KLSAgLy8gVmVyaWZ5IHRoZSBuZXh0IGF0dGVtcHQgdG8gZ2V0IGEgYnVmZmVyIHdpbGwgc2lnbmFsIHRoYXQgYSBjb25maWcgY2hhbmdlCi0gIC8vIGhhcyBoYXBwZW5lZC4KLSAgRVhQRUNUX0VRKHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlciksIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZSk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIG5ldyBjb25maWcgaXMgbm93IHJldHVybmVkLgotICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotCi0gIC8vIENvbnN1bWUgdGhlIHJlbWFpbmluZyBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IGNvbmZpZy4KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotICAgIEVYUEVDVF9FUShzdHJlYW1fLT5HZXROZXh0QnVmZmVyKCZidWZmZXIpLCBTb3VyY2VCdWZmZXJTdHJlYW06OmtTdWNjZXNzKTsKLSAgfQotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQ29uZmlnQ2hhbmdlX1NlZWspIHsKLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlcjsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIG5ld19jb25maWcgPSBUZXN0VmlkZW9Db25maWc6OkxhcmdlKCk7Ci0KLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDUsICZrRGF0YUEpOwotICBzdHJlYW1fLT5VcGRhdGVWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDUsICZrRGF0YUIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXJzIHdpdGggdGhlIG5ldyBjb25maWcgYW5kIG1ha2Ugc3VyZSBhCi0gIC8vIGNvbmZpZyBjaGFuZ2UgaXMgc2lnbmFsbGVkLgotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICBTZWVrKDUpOwotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICBFWFBFQ1RfRVEoc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKSwgU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoNSwgOSwgJmtEYXRhQik7Ci0KLSAgLy8gU2VlayB0byB0aGUgc3RhcnQgd2hpY2ggaGFzIGEgZGlmZmVyZW50IGNvbmZpZy4gRG9uJ3QgZmV0Y2ggYW55IGJ1ZmZlcnMgYW5kCi0gIC8vIHNlZWsgYmFjayB0byBidWZmZXJzIHdpdGggdGhlIGN1cnJlbnQgY29uZmlnLiBNYWtlIHN1cmUgYSBjb25maWcgY2hhbmdlCi0gIC8vIGlzbid0IHNpZ25hbGxlZCBpbiB0aGlzIGNhc2UuCi0gIENoZWNrVmlkZW9Db25maWcobmV3X2NvbmZpZyk7Ci0gIFNlZWsoMCk7Ci0gIFNlZWsoNyk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDUsIDksICZrRGF0YUIpOwotCi0gIC8vIFNlZWsgdG8gdGhlIHN0YXJ0IGFuZCBtYWtlIHN1cmUgYSBjb25maWcgY2hhbmdlIGlzIHNpZ25hbGxlZC4KLSAgQ2hlY2tWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgRVhQRUNUX0VRKHN0cmVhbV8tPkdldE5leHRCdWZmZXIoJmJ1ZmZlciksIFNvdXJjZUJ1ZmZlclN0cmVhbTo6a0NvbmZpZ0NoYW5nZSk7Ci0gIENoZWNrVmlkZW9Db25maWcodmlkZW9fY29uZmlnXyk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDAsIDQsICZrRGF0YUEpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2V0RXhwbGljaXREdXJhdGlvbikgewotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyA1IHRocm91Z2ggNi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDUsIDIpOwotCi0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMik7Ci0KLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgMTUgdGhyb3VnaCAxNi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDE1LCAyKTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzUsNikgWzEwLDExKSBbMTUsMTYpIH0iKTsKLQotICAvLyBTZXQgZHVyYXRpb24gdG8gYmUgYmV0d2VlbiBidWZmZXJzIDYgYW5kIDEwLgotICBzdHJlYW1fLT5PblNldER1cmF0aW9uKGZyYW1lX2R1cmF0aW9uKCkgKiA4KTsKLQotICAvLyBTaG91bGQgdHJ1bmNhdGUgdGhlIGRhdGEgYWZ0ZXIgNi4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbNSw2KSB9Iik7Ci0KLSAgLy8gQWRkaW5nIGRhdGEgcGFzdCB0aGUgcHJldmlvdXMgZHVyYXRpb24gc2hvdWxkIHN0aWxsIHdvcmsuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAyMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsMTkpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNldEV4cGxpY2l0RHVyYXRpb25fRWRnZUNhc2UpIHsKLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMTApOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDI1IHRocm91Z2ggMjkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgyNSwgNSk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFsxMCwxOSkgWzI1LDI5KSB9Iik7Ci0KLSAgLy8gU2V0IGR1cmF0aW9uIHRvIGJlIHJpZ2h0IGJlZm9yZSBidWZmZXIgMjUuCi0gIHN0cmVhbV8tPk9uU2V0RHVyYXRpb24oZnJhbWVfZHVyYXRpb24oKSAqIDI1KTsKLQotICAvLyBTaG91bGQgdHJ1bmNhdGUgdGhlIGxhc3QgcmFuZ2UuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzEwLDE5KSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZXRFeHBsaWNpdER1cmF0aW9uX0VkZ2VDYXNlMikgewotICAvLyBUaGlzIHRlc3QgcmVxdWlyZXMgc3BlY2lmaWMgcmVsYXRpdmUgcHJvcG9ydGlvbnMgZm9yIGZ1ZGdlIHJvb20sIGFwcGVuZAotICAvLyBzaXplLCBhbmQgZHVyYXRpb24gdHJ1bmNhdGlvbiBhbW91bnRzLiBTZWUgZGV0YWlscyBhdDoKLSAgLy8gaHR0cHM6Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8yMzg1NDIzMDAyCi0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgd2l0aCBmaXJzdCBidWZmZXIgZXN0YWJsaXNoaW5nIG1heF9pbnRlcl9idWZmZXJfZGlzdGFuY2UKLSAgLy8gb2YgNSBtcy4gVGhpcyB0cmFuc2xhdGVzIHRvIGEgZnVkZ2Ugcm9vbSAoMiB4IG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZSkgb2YKLSAgLy8gMTAgbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNUsgOUQ0SyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTMpIH0iKTsKLQotICAvLyBUcmltIG9mZiBsYXN0IDIgYnVmZmVycywgdG90YWxpbmcgOCBtcy4gTm90YWJseSBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgZnVkZ2UKLSAgLy8gcm9vbSBvZiAxMCBtcy4KLSAgc3RyZWFtXy0+T25TZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNSkpOwotCi0gIC8vIFZlcmlmeSB0cnVuY2F0aW9uLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNSkgfSIpOwotCi0gIC8vIEFwcGVuZCBuZXcgYnVmZmVycyBqdXN0IGJleW9uZCB0aGUgZnVkZ2Utcm9vbSBhbGxvd2FuY2Ugb2YgMTBtcy4KLSAgQXBwZW5kQnVmZmVycygiMTFLIDE1SyIpOwotCi0gIC8vIFZlcmlmeSBuZXcgYXBwZW5kIGNyZWF0ZXMgYSBnYXAuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw1KSBbMTEsMTkpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZVdpdGhpbkZ1ZGdlUm9vbSkgewotICAvLyBUaGlzIHRlc3QgcmVxdWlyZXMgc3BlY2lmaWMgcmVsYXRpdmUgcHJvcG9ydGlvbnMgZm9yIGZ1ZGdlIHJvb20sIGFwcGVuZAotICAvLyBzaXplLCBhbmQgcmVtb3ZhbCBhbW91bnRzLiBTZWUgZGV0YWlscyBhdDoKLSAgLy8gaHR0cHM6Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy8yMzg1NDIzMDAyCi0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgd2l0aCBmaXJzdCBidWZmZXIgZXN0YWJsaXNoaW5nIG1heF9pbnRlcl9idWZmZXJfZGlzdGFuY2UKLSAgLy8gb2YgNSBtcy4gVGhpcyB0cmFuc2xhdGVzIHRvIGEgZnVkZ2Ugcm9vbSAoMiB4IG1heF9pbnRlcmJ1ZmZlcl9kaXN0YW5jZSkgb2YKLSAgLy8gMTAgbXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNUsgOUQ0SyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTMpIH0iKTsKLQotICAvLyBUcmltIG9mZiBsYXN0IDIgYnVmZmVycywgdG90YWxpbmcgOCBtcy4gTm90YWJseSBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgZnVkZ2UKLSAgLy8gcm9vbSBvZiAxMCBtcy4KLSAgUmVtb3ZlSW5Ncyg1LCAxMywgMTMpOwotCi0gIC8vIFZlcmlmeSByZW1vdmFsLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNSkgfSIpOwotCi0gIC8vIEFwcGVuZCBuZXcgYnVmZmVycyBqdXN0IGJleW9uZCB0aGUgZnVkZ2Utcm9vbSBhbGxvd2FuY2Ugb2YgMTBtcy4KLSAgQXBwZW5kQnVmZmVycygiMTFLIDE1SyIpOwotCi0gIC8vIFZlcmlmeSBuZXcgYXBwZW5kIGNyZWF0ZXMgYSBnYXAuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw1KSBbMTEsMTkpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNldEV4cGxpY2l0RHVyYXRpb25fRGVsZXRlUGFydGlhbFJhbmdlKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNSk7Ci0KLSAgLy8gQXBwZW5kIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMTkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMTApOwotCi0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDI1IHRocm91Z2ggMjkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgyNSwgNSk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDQpIFsxMCwxOSkgWzI1LDI5KSB9Iik7Ci0KLSAgLy8gU2V0IGR1cmF0aW9uIHRvIGJlIGJldHdlZW4gYnVmZmVycyAxMyBhbmQgMTQuCi0gIHN0cmVhbV8tPk9uU2V0RHVyYXRpb24oZnJhbWVfZHVyYXRpb24oKSAqIDE0KTsKLQotICAvLyBTaG91bGQgdHJ1bmNhdGUgdGhlIGRhdGEgYWZ0ZXIgMTMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNCkgWzEwLDEzKSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZXRFeHBsaWNpdER1cmF0aW9uX0RlbGV0ZVNlbGVjdGVkUmFuZ2UpIHsKLSAgLy8gQXBwZW5kIDIgYnVmZmVycyBhdCBwb3NpdGlvbnMgNSB0aHJvdWdoIDYuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCg1LCAyKTsKLQotICAvLyBBcHBlbmQgMiBidWZmZXJzIGF0IHBvc2l0aW9ucyAxMCB0aHJvdWdoIDExLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMTAsIDIpOwotCi0gIC8vIEFwcGVuZCAyIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDE1IHRocm91Z2ggMTYuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxNSwgMik7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFs1LDYpIFsxMCwxMSkgWzE1LDE2KSB9Iik7Ci0KLSAgLy8gU2VlayB0byAxMC4KLSAgU2VlaygxMCk7Ci0KLSAgLy8gU2V0IGR1cmF0aW9uIHRvIGJlIGFmdGVyIHBvc2l0aW9uIDMuCi0gIHN0cmVhbV8tPk9uU2V0RHVyYXRpb24oZnJhbWVfZHVyYXRpb24oKSAqIDQpOwotCi0gIC8vIEV4cGVjdCBldmVyeXRoaW5nIHRvIGJlIGRlbGV0ZWQsIGFuZCBzaG91bGQgbm90IGhhdmUgbmV4dCBidWZmZXIgYW55bW9yZS4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyB9Iik7Ci0KLSAgLy8gQXBwZW5kaW5nIGRhdGEgYXQgcG9zaXRpb24gMTAgc2hvdWxkIG5vdCBmdWxmaWxsIHRoZSBzZWVrLgotICAvLyAoSWYgdGhlIGR1cmF0aW9uIGlzIHNldCB0byBiZSBzb21ldGhpbmcgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IHNlZWsKLSAgLy8gcG9pbnQsIHRoZW4gdGhlIHNlZWsgcG9pbnQgaXMgcmVzZXQgYW5kIHRoZSBTb3VyY2VCdWZmZXJTdHJlYW0gd2FpdHMKLSAgLy8gZm9yIGEgbmV3IHNlZWsgcmVxdWVzdC4gVGhlcmVmb3JlIGV2ZW4gaWYgdGhlIGRhdGEgaXMgcmUtYXBwZW5kZWQsIGl0Ci0gIC8vIHNob3VsZCBub3QgZnVsZmlsbCB0aGUgb2xkIHNlZWsuKQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgMTUpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDE0KSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZXRFeHBsaWNpdER1cmF0aW9uX0RlbGV0ZVBhcnRpYWxTZWxlY3RlZFJhbmdlKSB7Ci0gIC8vIEFwcGVuZCA1IGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgNSk7Ci0KLSAgLy8gQXBwZW5kIDIwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDEwIHRocm91Z2ggMjkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgxMCwgMjApOwotCi0gIC8vIENoZWNrIGV4cGVjdGVkIHJhbmdlcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0KSBbMTAsMjkpIH0iKTsKLQotICAvLyBTZWVrIHRvIHBvc2l0aW9uIDEwLgotICBTZWVrKDEwKTsKLQotICAvLyBTZXQgZHVyYXRpb24gdG8gYmUgYmV0d2VlbiBidWZmZXJzIDI0IGFuZCAyNS4KLSAgc3RyZWFtXy0+T25TZXREdXJhdGlvbihmcmFtZV9kdXJhdGlvbigpICogMjUpOwotCi0gIC8vIFNob3VsZCB0cnVuY2F0ZSB0aGUgZGF0YSBhZnRlciAyNC4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCw0KSBbMTAsMjQpIH0iKTsKLQotICAvLyBUaGUgc2VlayBwb3NpdGlvbiBzaG91bGQgbm90IGJlIGxvc3QuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKDEwLCAxMCk7Ci0KLSAgLy8gTm93IHNldCB0aGUgZHVyYXRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgYnVmZmVyIDEwLgotICBzdHJlYW1fLT5PblNldER1cmF0aW9uKGZyYW1lX2R1cmF0aW9uKCkgKiAxMSk7Ci0KLSAgLy8gU2VlayBwb3NpdGlvbiBzaG91bGQgYmUgcmVzZXQuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsNCkgWzEwLDEwKSB9Iik7Ci19Ci0KLS8vIFRlc3QgdGhlIGNhc2Ugd2hlcmUgZHVyYXRpb24gaXMgc2V0IHdoaWxlIHRoZSBzdHJlYW0gcGFyc2VyIGJ1ZmZlcnMKLS8vIGFscmVhZHkgc3RhcnQgcGFzc2luZyB0aGUgZGF0YSB0byBkZWNvZGluZyBwaXBlbGluZS4gU2VsZWN0ZWQgcmFuZ2UsCi0vLyB3aGVuIGludmFsaWRhdGVkIGJ5IGdldHRpbmcgdHJ1bmNhdGVkLCBzaG91bGQgYmUgdXBkYXRlZCB0byBOVUxMCi0vLyBhY2NvcmRpbmdseSBzbyB0aGF0IHN1Y2Nlc3NpdmUgYXBwZW5kIG9wZXJhdGlvbnMga2VlcCB3b3JraW5nLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNldEV4cGxpY2l0RHVyYXRpb25fVXBkYXRlU2VsZWN0ZWRSYW5nZSkgewotICAvLyBTZWVrIHRvIHN0YXJ0IG9mIHN0cmVhbS4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMCk7Ci0KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MCIpOwotCi0gIC8vIFJlYWQgb3V0IHRoZSBmaXJzdCBmZXcgYnVmZmVycy4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIik7Ci0KLSAgLy8gU2V0IGR1cmF0aW9uIHRvIGJlIHJpZ2h0IGJlZm9yZSBidWZmZXIgMS4KLSAgc3RyZWFtXy0+T25TZXREdXJhdGlvbihiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNjApKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBubyBuZXh0IGJ1ZmZlci4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBhcHBlbmQgbmV3IGJ1ZmZlcnMgYXQgdGhpcyBwb2ludC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMjBLIDE1MCIpOwotCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw2MCkgWzEyMCwxODApIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU2V0RXhwbGljaXREdXJhdGlvbl9BZnRlckdyb3VwVGltZXN0YW1wQW5kQmVmb3JlRmlyc3RCdWZmZXJUaW1lc3RhbXApIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMEsgNjBLIik7Ci0KLSAgLy8gQXBwZW5kIGEgY29kZWQgZnJhbWUgZ3JvdXAgd2l0aCBhIHN0YXJ0IHRpbWVzdGFtcCBvZiAyMDAsIGJ1dCB0aGUgZmlyc3QKLSAgLy8gYnVmZmVyIHN0YXJ0cyBhdCAyMzBtcy4gVGhpcyBjYW4gaGFwcGVuIGluIG11eGVkIGNvbnRlbnQgd2hlcmUgdGhlCi0gIC8vIGF1ZGlvIHN0YXJ0cyBiZWZvcmUgdGhlIGZpcnN0IGZyYW1lLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDIwMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiMjMwSyAyNjBLIDI5MEsgMzIwSyIpOwotCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNDAwSyA0MzBLIDQ2MEsiKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsOTApIFsyMDAsMzUwKSBbNDAwLDQ5MCkgfSIpOwotCi0gIHN0cmVhbV8tPk9uU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEyMCkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBidWZmZXJlZCByYW5nZXMgYXJlIHVwZGF0ZWQgcHJvcGVybHkgYW5kIHdlIGRvbid0IGNyYXNoLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsOTApIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNldEV4cGxpY2l0RHVyYXRpb25fTWFya0VPUykgewotICAvLyBBcHBlbmQgMSBidWZmZXIgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA4LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoMCwgOSk7Ci0KLSAgLy8gQ2hlY2sgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDgpIH0iKTsKLQotICAvLyBTZWVrIHRvIDUuCi0gIFNlZWsoNSk7Ci0KLSAgLy8gU2V0IGR1cmF0aW9uIHRvIGJlIGJlZm9yZSB0aGUgc2Vla2VkIHRvIHBvc2l0aW9uLgotICAvLyBUaGlzIHdpbGwgcmVzdWx0IGluIHRydW5jYXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGFuZCBhIHJlc2V0Ci0gIC8vIG9mIE5leHRCdWZmZXJQb3NpdGlvbi4KLSAgc3RyZWFtXy0+T25TZXREdXJhdGlvbihmcmFtZV9kdXJhdGlvbigpICogNCk7Ci0KLSAgLy8gQ2hlY2sgdGhlIGV4cGVjdGVkIHJhbmdlcy4KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlcygieyBbMCwzKSB9Iik7Ci0KLSAgLy8gTWFyayBFT1MgcmVhY2hlZC4KLSAgc3RyZWFtXy0+TWFya0VuZE9mU3RyZWFtKCk7Ci0KLSAgLy8gRXhwZWN0IEVPUyB0byBiZSByZWFjaGVkLgotICBDaGVja0VPU1JlYWNoZWQoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNldEV4cGxpY2l0RHVyYXRpb25fTWFya0VPU19Jc1NlZWtQZW5kaW5nKSB7Ci0gIC8vIEFwcGVuZCAxIGJ1ZmZlciBhdCBwb3NpdGlvbnMgMCB0aHJvdWdoIDguCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCA5KTsKLQotICAvLyBDaGVjayBleHBlY3RlZCByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXMoInsgWzAsOCkgfSIpOwotCi0gIC8vIFNlZWsgdG8gOSB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHBlbmRpbmcgc2Vlay4KLSAgU2Vlayg5KTsKLQotICAvLyBTZXQgZHVyYXRpb24gdG8gYmUgYmVmb3JlIHRoZSBzZWVrZWQgdG8gcG9zaXRpb24uCi0gIC8vIFRoaXMgd2lsbCByZXN1bHQgaW4gdHJ1bmNhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgYW5kIGEgcmVzZXQKLSAgLy8gb2YgTmV4dEJ1ZmZlclBvc2l0aW9uLgotICBzdHJlYW1fLT5PblNldER1cmF0aW9uKGZyYW1lX2R1cmF0aW9uKCkgKiA0KTsKLQotICAvLyBDaGVjayB0aGUgZXhwZWN0ZWQgcmFuZ2VzLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzKCJ7IFswLDMpIH0iKTsKLQotICBFWFBFQ1RfVFJVRShzdHJlYW1fLT5Jc1NlZWtQZW5kaW5nKCkpOwotICAvLyBNYXJrIEVPUyByZWFjaGVkLgotICBzdHJlYW1fLT5NYXJrRW5kT2ZTdHJlYW0oKTsKLSAgRVhQRUNUX0ZBTFNFKHN0cmVhbV8tPklzU2Vla1BlbmRpbmcoKSk7Ci19Ci0KLS8vIFRlc3QgdGhlIGNhc2Ugd2VyZSB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIHRoZQotLy8gYnVmZmVyZWQgZGF0YSBhbmQgc2V2ZXJhbCBvdmVybGFwcyBvY2N1ciB0aGF0IGNhdXNlcyB0aGUgc2VsZWN0ZWQKLS8vIHJhbmdlIHRvIGdldCBzcGxpdCBhbmQgdGhlbiBtZXJnZWQgYmFjayBpbnRvIGEgc2luZ2xlIHJhbmdlLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIE92ZXJsYXBTcGxpdEFuZE1lcmdlV2hpbGVXYWl0aW5nRm9yTW9yZURhdGEpIHsKLSAgLy8gU2VlayB0byBzdGFydCBvZiBzdHJlYW0uCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDApOwotCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAgOTAgMTIwSyAxNTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE4MCkgfSIpOwotCi0gIC8vIFJlYWQgYWxsIHRoZSBidWZmZXJlZCBkYXRhLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgNjAgOTAgMTIwSyAxNTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgZGF0YSBvdmVyIHRoZSBjdXJyZW50IEdPUCBzbyB0aGF0IGEga2V5ZnJhbWUgaXMgbmVlZGVkIGJlZm9yZQotICAvLyBwbGF5YmFjayBjYW4gY29udGludWUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMjBLIDE1MCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTgwKSB9Iik7Ci0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgdGhhdCBjYXVzZSB0aGUgcmFuZ2UgdG8gZ2V0IHNwbGl0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw2MCkgWzEyMCwxODApIH0iKTsKLQotICAvLyBBcHBlbmQgYnVmZmVycyB0aGF0IGNhdXNlIHRoZSByYW5nZXMgdG8gZ2V0IG1lcmdlZC4KLSAgQXBwZW5kQnVmZmVycygiNjAgOTAiKTsKLQotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTgwKSB9Iik7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIG5leHQgYnVmZmVyLgotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFkZCBtb3JlIGRhdGEgdG8gdGhlIGVuZCBhbmQgdmVyaWZ5IHRoYXQgdGhpcyBuZXcgZGF0YSBpcyByZWFkIGNvcnJlY3RseS4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxODBLIDIxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMjQwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxODBLIDIxMCIpOwotfQotCi0vLyBWZXJpZnkgdGhhdCBhIHNpbmdsZSBjb2RlZCBmcmFtZSBhdCB0aGUgY3VycmVudCByZWFkIHBvc2l0aW9uIHVuYmxvY2tzIHRoZQotLy8gcmVhZCBldmVuIGlmIHRoZSBmcmFtZSBpcyBidWZmZXJlZCBhZnRlciB0aGUgcHJldmlvdXNseSByZWFkIHBvc2l0aW9uIGlzCi0vLyByZW1vdmVkLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEFmdGVyUmVtb3ZlX1NpbmdsZUZyYW1lUmFuZ2VfVW5ibG9ja3NfUmVhZCkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwRDMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgUmVtb3ZlSW5NcygwLCAxMjAsIDEyMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTIwRDMwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEyMCwxNTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEyMEsiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgbXVsdGlwbGUgc2hvcnQgKHJlbGF0aXZlIHRvIG1heC1pbnRlci1idWZmZXItZGlzdGFuY2UgKiAyKSBjb2RlZAotLy8gZnJhbWVzIGF0IHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gdW5ibG9jayB0aGUgcmVhZCBldmVuIGlmIHRoZSBmcmFtZXMgYXJlCi0vLyBidWZmZXJlZCBhZnRlciB0aGUgcHJldmlvdXNseSByZWFkIHBvc2l0aW9uIGlzIHJlbW92ZWQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQWZ0ZXJSZW1vdmVfVGlueUZyYW1lc19VbmJsb2NrX1JlYWRfMSkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwRDMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgUmVtb3ZlSW5NcygwLCAxMjAsIDEyMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTIwRDFLIDEyMUQxIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTIwLDEyMikgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTIwSyAxMjEiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgbXVsdGlwbGUgc2hvcnQgKHJlbGF0aXZlIHRvIG1heC1pbnRlci1idWZmZXItZGlzdGFuY2UgKiAyKSBjb2RlZAotLy8gZnJhbWVzIHN0YXJ0aW5nIGF0IHRoZSBmdWRnZSByb29tIGJvdW5kYXJ5IHVuYmxvY2sgdGhlIHJlYWQgZXZlbiBpZiB0aGUKLS8vIGZyYW1lcyBhcmUgYnVmZmVyZWQgYWZ0ZXIgdGhlIHByZXZpb3VzbHkgcmVhZCBwb3NpdGlvbiBpcyByZW1vdmVkLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEFmdGVyUmVtb3ZlX1RpbnlGcmFtZXNfVW5ibG9ja19SZWFkXzIpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MEQzMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTIwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzMCA2MCA5MCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIFJlbW92ZUluTXMoMCwgMTIwLCAxMjApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjE1MEQxSyAxNTFEMSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzE1MCwxNTIpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjE1MEsgMTUxIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGNvZGVkIGZyYW1lcyBzdGFydGluZyBhZnRlciB0aGUgZnVkZ2Ugcm9vbSBib3VuZGFyeSBkbyBub3QKLS8vIHVuYmxvY2sgdGhlIHJlYWQgd2hlbiBidWZmZXJlZCBhZnRlciB0aGUgcHJldmlvdXNseSByZWFkIHBvc2l0aW9uIGlzIHJlbW92ZWQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQWZ0ZXJSZW1vdmVfQmV5b25kRnVkZ2VfU3RhbGxlZCkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwRDMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgUmVtb3ZlSW5NcygwLCAxMjAsIDEyMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTUxRDFLIDE1MkQxIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTUxLDE1MykgfSIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi0vLyBWZXJpZnkgdGhhdCBub24ta2V5ZnJhbWVzIHdpdGggdGhlIHNhbWUgdGltZXN0YW1wIGluIHRoZSBzYW1lCi0vLyBhcHBlbmQgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNhbWVUaW1lc3RhbXBfVmlkZW9fU2luZ2xlQXBwZW5kKSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgMzAgNjAgOTAgMTIwSyAxNTAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDMwIDYwIDkwIDEyMEsgMTUwIik7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IG5vbi1rZXlmcmFtZXMgd2l0aCB0aGUgc2FtZSB0aW1lc3RhbXAgY2FuIG9jY3VyCi0vLyBpbiBkaWZmZXJlbnQgYXBwZW5kcy4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTYW1lVGltZXN0YW1wX1ZpZGVvX1R3b0FwcGVuZHMpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCIpOwotICBBcHBlbmRCdWZmZXJzKCIzMCA2MCA5MCAxMjBLIDE1MCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgMzAgNjAgOTAgMTIwSyAxNTAiKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgYSBub24ta2V5ZnJhbWUgZm9sbG93ZWQgYnkgYSBrZXlmcmFtZSB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcAotLy8gaXMgYWxsb3dlZCwgYnV0IGFsc28gcmVzdWx0cyBpbiBhIE1lZGlhTG9nLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNhbWVUaW1lc3RhbXBfVmlkZW9fU2luZ2xlQXBwZW5kX1dhcm5pbmcpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1NhbWVUaW1lc3RhbXBBdDMwTWlsbGlzZWNvbmRzTG9nKCkpOwotCi0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgMzBLIDYwIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzMCAzMEsgNjAiKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNhbWVUaW1lc3RhbXBfVmlkZW9fVHdvQXBwZW5kc19XYXJuaW5nKSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29udGFpbnNTYW1lVGltZXN0YW1wQXQzME1pbGxpc2Vjb25kc0xvZygpKTsKLQotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIik7Ci0gIEFwcGVuZEJ1ZmZlcnMoIjMwSyA2MCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgMzBLIDYwIik7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGEga2V5ZnJhbWUgZm9sbG93ZWQgYnkgYSBub24ta2V5ZnJhbWUgd2l0aCB0aGUgc2FtZSB0aW1lc3RhbXAKLS8vIGlzIGFsbG93ZWQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2FtZVRpbWVzdGFtcF9WaWRlb0tleUZyYW1lX1R3b0FwcGVuZHMpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMEsiKTsKLSAgQXBwZW5kQnVmZmVycygiMzAgNjAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwSyAzMCA2MCIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2FtZVRpbWVzdGFtcF9WaWRlb0tleUZyYW1lX1NpbmdsZUFwcGVuZCkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwSyAzMCA2MCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzBLIDMwIDYwIik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTYW1lVGltZXN0YW1wX1ZpZGVvX092ZXJsYXBfMSkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDYwIDkwIDEyMEsgMTUwIik7Ci0KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI2MEsgOTEgMTIxSyAxNTEiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwSyA5MSAxMjFLIDE1MSIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2FtZVRpbWVzdGFtcF9WaWRlb19PdmVybGFwXzIpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA2MCA5MCAxMjBLIDE1MCIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYxIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzMCA2MSAxMjBLIDE1MCIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2FtZVRpbWVzdGFtcF9WaWRlb19PdmVybGFwXzMpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAyMCA0MCA2MCA4MCAxMDBLIDEwMSAxMDIgMTAzSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDIwIDQwIDYwIDgwIDkwIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAyMCA0MCA2MCA4MCA5MCAxMDBLIDEwMSAxMDIgMTAzSyIpOwotICBBcHBlbmRCdWZmZXJzKCI5MCAxMTBLIDE1MCIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMjAgNDAgNjAgODAgOTAgOTAgMTEwSyAxNTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE5MCkgfSIpOwotfQotCi0vLyBUZXN0IGFsbCB0aGUgdmFsaWQgc2FtZSB0aW1lc3RhbXAgY2FzZXMgZm9yIGF1ZGlvLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNhbWVUaW1lc3RhbXBfQXVkaW8pIHsKLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGNvbmZpZyhrQ29kZWNNUDMsIGtTYW1wbGVGb3JtYXRGMzIsIENIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMCwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gIHN0cmVhbV8ucmVzZXQobmV3IFNvdXJjZUJ1ZmZlclN0cmVhbShjb25maWcsIG1lZGlhX2xvZ18sIHRydWUpKTsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAwSyAzMEsgMzAgNjAgNjAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDBLIDMwSyAzMCA2MCA2MCIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2FtZVRpbWVzdGFtcF9BdWRpb19TaW5nbGVBcHBlbmRfV2FybmluZykgewotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRhaW5zU2FtZVRpbWVzdGFtcEF0MzBNaWxsaXNlY29uZHNMb2coKSk7Ci0KLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGNvbmZpZyhrQ29kZWNNUDMsIGtTYW1wbGVGb3JtYXRGMzIsIENIQU5ORUxfTEFZT1VUX1NURVJFTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMCwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci0gIHN0cmVhbV8ucmVzZXQobmV3IFNvdXJjZUJ1ZmZlclN0cmVhbShjb25maWcsIG1lZGlhX2xvZ18sIHRydWUpKTsKLSAgU2VlaygwKTsKLQotICAvLyBOb3RlLCBpbiByZWFsaXR5LCBhIG5vbi1rZXlmcmFtZSBhdWRpbyBmcmFtZSBpcyByYXJlIG9yIHBlcmhhcHMgbm90Ci0gIC8vIHBvc3NpYmxlLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDMwSyA2MCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgMzBLIDYwIik7Ci19Ci0KLS8vIElmIHNlZWtpbmcgcGFzdCBhbnkgZXhpc3RpbmcgcmFuZ2UgYW5kIHRoZSBzZWVrIGlzIHBlbmRpbmcKLS8vIGJlY2F1c2Ugbm8gZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBmb3IgdGhhdCBwb3NpdGlvbiwKLS8vIHRoZSBzdHJlYW0gcG9zaXRpb24gY2FuIGJlIGNvbnNpZGVyZWQgYXMgdGhlIGVuZCBvZiBzdHJlYW0uCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgRW5kU2VsZWN0ZWRfRHVyaW5nX1BlbmRpbmdTZWVrKSB7Ci0gIC8vIEFwcGVuZCAxNSBidWZmZXJzIGF0IHBvc2l0aW9ucyAwIHRocm91Z2ggMTQuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgwLCAxNSk7Ci0KLSAgU2VlaygyMCk7Ci0gIEVYUEVDVF9UUlVFKHN0cmVhbV8tPklzU2Vla1BlbmRpbmcoKSk7Ci0gIHN0cmVhbV8tPk1hcmtFbmRPZlN0cmVhbSgpOwotICBFWFBFQ1RfRkFMU0Uoc3RyZWFtXy0+SXNTZWVrUGVuZGluZygpKTsKLX0KLQotLy8gSWYgdGhlcmUgaXMgYSBwZW5kaW5nIHNlZWsgYmV0d2VlbiAyIGV4aXN0aW5nIHJhbmdlcywKLS8vIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBoYXMgbm90IGJlZW4gcmVhY2hlZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBFbmROb3RTZWxlY3RlZF9EdXJpbmdfUGVuZGluZ1NlZWspIHsKLSAgLy8gQXBwZW5kOgotICAvLyAtIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDAgdGhyb3VnaCA5LgotICAvLyAtIDEwIGJ1ZmZlcnMgYXQgcG9zaXRpb25zIDMwIHRocm91Z2ggMzkKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDEwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDMwLCAxMCk7Ci0KLSAgU2VlaygyMCk7Ci0gIEVYUEVDVF9UUlVFKHN0cmVhbV8tPklzU2Vla1BlbmRpbmcoKSk7Ci0gIHN0cmVhbV8tPk1hcmtFbmRPZlN0cmVhbSgpOwotICBFWFBFQ1RfVFJVRShzdHJlYW1fLT5Jc1NlZWtQZW5kaW5nKCkpOwotfQotCi0vLyBSZW1vdmluZyBleGFjdCBzdGFydCAmIGVuZCBvZiBhIHJhbmdlLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZV9XaG9sZVJhbmdlMSkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwSyA0MCA3MEsgMTAwIDEzMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIH0iKTsKLSAgUmVtb3ZlSW5NcygxMCwgMTYwLCAxNjApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotfQotCi0vLyBSZW1vdmFsIHJhbmdlIHN0YXJ0cyBiZWZvcmUgcmFuZ2UgYW5kIGVuZHMgZXhhY3RseSBhdCBlbmQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgUmVtb3ZlX1dob2xlUmFuZ2UyKSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBLIDQwIDcwSyAxMDAgMTMwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwLDE2MCkgfSIpOwotICBSZW1vdmVJbk1zKDAsIDE2MCwgMTYwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IH0iKTsKLX0KLQotLy8gUmVtb3ZhbCByYW5nZSBzdGFydHMgYXQgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UgYW5kIGVuZHMgYmV5b25kIHRoZQotLy8gcmFuZ2UgZW5kLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZV9XaG9sZVJhbmdlMykgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwSyA0MCA3MEsgMTAwIDEzMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIH0iKTsKLSAgUmVtb3ZlSW5NcygxMCwgMjAwLCAyMDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotfQotCi0vLyBSZW1vdmFsIHJhbmdlIHN0YXJ0cyBiZWZvcmUgcmFuZ2Ugc3RhcnQgYW5kIGVuZHMgYWZ0ZXIgdGhlIHJhbmdlIGVuZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfV2hvbGVSYW5nZTQpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMEsgNDAgNzBLIDEwMCAxMzBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSB9Iik7Ci0gIFJlbW92ZUluTXMoMCwgMjAwLCAyMDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotfQotCi0vLyBSZW1vdmVzIG11bHRpcGxlIHJhbmdlcy4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfV2hvbGVSYW5nZTUpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMEsgNDAgNzBLIDEwMCAxMzBLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTAwMEsgMTAzMCAxMDYwSyAxMDkwIDExMjBLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMjAwMEsgMjAzMCAyMDYwSyAyMDkwIDIxMjBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSBbMTAwMCwxMTUwKSBbMjAwMCwyMTUwKSB9Iik7Ci0gIFJlbW92ZUluTXMoMTAsIDMwMDAsIDMwMDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotfQotCi0vLyBWZXJpZmllcyBhIFswLWluZmluaXR5KSByYW5nZSByZW1vdmVzIGV2ZXJ5dGhpbmcuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgUmVtb3ZlX1plcm9Ub0luZmluaXR5KSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBLIDQwIDcwSyAxMDAgMTMwSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwMDBLIDEwMzAgMTA2MEsgMTA5MCAxMTIwSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjIwMDBLIDIwMzAgMjA2MEsgMjA5MCAyMTIwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwLDE2MCkgWzEwMDAsMTE1MCkgWzIwMDAsMjE1MCkgfSIpOwotICBSZW1vdmUoYmFzZTo6VGltZURlbHRhKCksIGtJbmZpbml0ZUR1cmF0aW9uLCBrSW5maW5pdGVEdXJhdGlvbik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci19Ci0KLS8vIFJlbW92YWwgcmFuZ2Ugc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIGFuZCBlbmRzIGluIHRoZQotLy8gbWlkZGxlIG9mIHRoZSByYW5nZS4gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgZnVsbCBHT1BzIGFyZSByZW1vdmVkLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZV9QYXJ0aWFsMSkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwSyA0MCA3MEsgMTAwIDEzMEsiKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMDAwSyAxMDMwIDEwNjBLIDEwOTAgMTEyMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIFsxMDAwLDExNTApIH0iKTsKLSAgUmVtb3ZlSW5NcygwLCA4MCwgMjIwMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTMwLDE2MCkgWzEwMDAsMTE1MCkgfSIpOwotfQotCi0vLyBSZW1vdmFsIHJhbmdlIHN0YXJ0cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmFuZ2UgYW5kIGVuZHMgYXQgdGhlIGV4YWN0Ci0vLyBlbmQgb2YgdGhlIHJhbmdlLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZV9QYXJ0aWFsMikgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwSyA0MCA3MEsgMTAwIDEzMEsiKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMDAwSyAxMDMwIDEwNjBLIDEwOTAgMTEyMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwxNjApIFsxMDAwLDExNTApIH0iKTsKLSAgUmVtb3ZlSW5Ncyg0MCwgMTYwLCAyMjAwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCw0MCkgWzEwMDAsMTE1MCkgfSIpOwotfQotCi0vLyBSZW1vdmFsIHJhbmdlIHN0YXJ0cyBhbmQgZW5kcyB3aXRoaW4gYSByYW5nZS4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfUGFydGlhbDMpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMEsgNDAgNzBLIDEwMCAxMzBLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTAwMEsgMTAzMCAxMDYwSyAxMDkwIDExMjBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYwKSBbMTAwMCwxMTUwKSB9Iik7Ci0gIFJlbW92ZUluTXMoNDAsIDEyMCwgMjIwMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsNDApIFsxMzAsMTYwKSBbMTAwMCwxMTUwKSB9Iik7Ci19Ci0KLS8vIFJlbW92YWwgcmFuZ2Ugc3RhcnRzIGluIHRoZSBtaWRkbGUgb2Ygb25lIHJhbmdlIGFuZCBlbmRzIGluIHRoZQotLy8gbWlkZGxlIG9mIGFub3RoZXIgcmFuZ2UuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgUmVtb3ZlX1BhcnRpYWw0KSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBLIDQwIDcwSyAxMDAgMTMwSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwMDBLIDEwMzAgMTA2MEsgMTA5MCAxMTIwSyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjIwMDBLIDIwMzAgMjA2MEsgMjA5MCAyMTIwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwLDE2MCkgWzEwMDAsMTE1MCkgWzIwMDAsMjE1MCkgfSIpOwotICBSZW1vdmVJbk1zKDQwLCAyMDMwLCAyMjAwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCw0MCkgWzIwNjAsMjE1MCkgfSIpOwotfQotCi0vLyBUZXN0IGJlaGF2aW9yIHdoZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgcmVtb3ZlZCBhbmQgbmV3IGJ1ZmZlcnMKLS8vIGFyZSBhcHBlbmRlZCBvdmVyIHRoZSByZW1vdmFsIHJhbmdlLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlbW92ZV9DdXJyZW50UG9zaXRpb24pIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MEsgMTIwIDE1MCAxODBLIDIxMCAyNDAgMjcwSyAzMDAgMzMwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzNjApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDMwIDYwIDkwSyAxMjAiKTsKLQotICAvLyBSZW1vdmUgYSByYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBuZXh0IGJ1ZmZlciAoaS5lLiwgMTUwKS4KLSAgUmVtb3ZlSW5NcygxNTAsIDIxMCwgMzYwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE1MCkgWzI3MCwzNjApIH0iKTsKLQotICAvLyBWZXJpZnkgdGhhdCBubyBuZXh0IGJ1ZmZlciBpcyByZXR1cm5lZC4KLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgc29tZSBidWZmZXJzIHRvIGZpbGwgdGhlIGdhcCB0aGF0IHdhcyBjcmVhdGVkLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEyMEsgMTUwIDE4MCAyMTBLIDI0MCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMzYwKSB9Iik7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgYnVmZmVycyByZXN1bWUgYXQgdGhlIG5leHQga2V5ZnJhbWUgYWZ0ZXIgdGhlCi0gIC8vIGN1cnJlbnQgcG9zaXRpb24uCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIyMTBLIDI0MCAyNzBLIDMwMCAzMzAiKTsKLX0KLQotLy8gVGVzdCBiZWhhdmlvciB3aGVuIGJ1ZmZlcnMgaW4gdGhlIHNlbGVjdGVkIHJhbmdlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbgotLy8gYXJlIHJlbW92ZWQuCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgUmVtb3ZlX0JlZm9yZUN1cnJlbnRQb3NpdGlvbikgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIDYwIDkwSyAxMjAgMTUwIDE4MEsgMjEwIDI0MCAyNzBLIDMwMCAzMzAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDM2MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMzAgNjAgOTBLIDEyMCIpOwotCi0gIC8vIFJlbW92ZSBhIHJhbmdlIHRoYXQgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHBsYXliYWNrIHBvc2l0aW9uLgotICBSZW1vdmVJbk1zKDAsIDkwLCAzNjApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzkwLDM2MCkgfSIpOwotCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxNTAgMTgwSyAyMTAgMjQwIDI3MEsgMzAwIDMzMCIpOwotfQotCi0vLyBUZXN0IHJlbW92aW5nIHRoZSBlbnRpcmUgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IGNvZGVkIGZyYW1lIGdyb3VwCi0vLyBiZWluZyBhcHBlbmRlZC4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfTWlkR3JvdXApIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MCAxMjBLIDE1MCAxODAgMjEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyNDApIH0iKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDMwIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDYwKSBbMTIwLDI0MCkgfSIpOwotCi0gIC8vIFJlbW92ZSB0aGUgZW50aXJlIHJhbmdlIHRoYXQgaXMgYmVpbmcgYXBwZW5kZWQgdG8uCi0gIFJlbW92ZUluTXMoMCwgNjAsIDI0MCk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgbm8gbmV4dCBidWZmZXIgc2luY2UgaXQgd2FzIHJlbW92ZWQuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMjAsMjQwKSB9Iik7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nIGZyYW1lcyBmb3IgdGhlIGN1cnJlbnQgR09QLgotICBBcHBlbmRCdWZmZXJzKCI2MCA5MCIpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBub24ta2V5ZnJhbWVzIGFyZSBub3QgYWRkZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTIwLDI0MCkgfSIpOwotCi0gIC8vIEZpbmlzaCB0aGUgcHJldmlvdXMgR09QIGFuZCBzdGFydCB0aGUgbmV4dCBvbmUuCi0gIEFwcGVuZEJ1ZmZlcnMoIjEyMCAxNTBLIDE4MCIpOwotCi0gIC8vIFZlcmlmeSB0aGF0IG5ldyBHT1AgcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHJhbmdlLgotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzE1MCwyMTApIH0iKTsKLQotICBTZWVrVG9UaW1lc3RhbXBNcygxNTApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTUwSyAxODAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotLy8gVGVzdCByZW1vdmluZyB0aGUgY3VycmVudCBHT1AgYmVpbmcgYXBwZW5kZWQsIHdoaWxlIG5vdCByZW1vdmluZwotLy8gdGhlIGVudGlyZSByYW5nZSB0aGUgR09QIGJlbG9uZ3MgdG8uCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgUmVtb3ZlX0dPUEJlaW5nQXBwZW5kZWQpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAzMCA2MCA5MCAxMjBLIDE1MCAxODAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDIxMCkgfSIpOwotCi0gIC8vIFJlbW92ZSB0aGUgY3VycmVudCBHT1AgYmVpbmcgYXBwZW5kZWQuCi0gIFJlbW92ZUluTXMoMTIwLCAxNTAsIDI0MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIH0iKTsKLQotICAvLyBDb250aW51ZSBhcHBlbmRpbmcgdGhlIGN1cnJlbnQgR09QIGFuZCB0aGUgbmV4dCBvbmUuCi0gIEFwcGVuZEJ1ZmZlcnMoIjIxMCAyNDBLIDI3MCAzMDAiKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgbm9uLWtleWZyYW1lIGluIHRoZSBwcmV2aW91cyBHT1AgZG9lcwotICAvLyBub3QgZWZmZWN0IGFueSBleGlzdGluZyByYW5nZXMgYW5kIGEgbmV3IHJhbmdlIGlzIHN0YXJ0ZWQgYXQgdGhlCi0gIC8vIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBHT1AuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMjApIFsyNDAsMzMwKSB9Iik7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBidWZmZXJzIGluIHRoZSByYW5nZXMuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzMCA2MCA5MCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBTZWVrVG9UaW1lc3RhbXBNcygyNDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMjQwSyAyNzAgMzAwIik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfV2hvbGVHT1BCZWluZ0FwcGVuZGVkKSB7Ci0gIFNlZWtUb1RpbWVzdGFtcE1zKDEwMDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwMDBLIDEwMzAgMTA2MCAxMDkwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAwMCwxMTIwKSB9Iik7Ci0KLSAgLy8gUmVtb3ZlIHRoZSBrZXlmcmFtZSBvZiB0aGUgY3VycmVudCBHT1AgYmVpbmcgYXBwZW5kZWQuCi0gIFJlbW92ZUluTXMoMTAwMCwgMTAzMCwgMTEyMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nIHRoZSBjdXJyZW50IEdPUC4KLSAgQXBwZW5kQnVmZmVycygiMTIxMCAxMjQwIik7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IH0iKTsKLQotICAvLyBBcHBlbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBHT1AuCi0gIEFwcGVuZEJ1ZmZlcnMoIjEyNzBLIDEzMDAiKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgbmV3IHJhbmdlIGlzIHN0YXJ0ZWQgYXQgdGhlCi0gIC8vIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBHT1AuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTI3MCwxMzMwKSB9Iik7Ci0KLSAgLy8gVmVyaWZ5IHRoZSBidWZmZXJzIGluIHRoZSByYW5nZXMuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0gIFNlZWtUb1RpbWVzdGFtcE1zKDEyNzApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTI3MEsgMTMwMCIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwKLSAgICAgICBSZW1vdmVfUHJldmlvdXNBcHBlbmREZXN0cm95ZWRBbmRPdmVyd3JpdGVFeGlzdGluZ1JhbmdlKSB7Ci0gIFNlZWtUb1RpbWVzdGFtcE1zKDkwKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjkwSyAxMjAgMTUwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbOTAsMTgwKSB9Iik7Ci0KLSAgLy8gQXBwZW5kIGEgY29kZWQgZnJhbWUgZ3JvdXAgYmVmb3JlIHRoZSBwcmV2aW91c2x5IGFwcGVuZGVkIGRhdGEuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMzAgNjAiKTsKLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgcmFuZ2VzIGdldCBtZXJnZWQuCi0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxODApIH0iKTsKLQotICAvLyBSZW1vdmUgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdCBhcHBlbmQuCi0gIFJlbW92ZUluTXMoMCwgOTAsIDM2MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbOTAsMTgwKSB9Iik7Ci0KLSAgLy8gQXBwZW5kIGEgbmV3IGNvZGVkIGZyYW1lIGdyb3VwIHRoYXQgZm9sbG93cyB0aGUgcmVtb3ZlZCBncm91cCBhbmQKLSAgLy8gc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIGxlZnQgb3ZlciBmcm9tIHRoZQotICAvLyByZW1vdmUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiOTBLIDEyMSAxNTEiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjkwSyAxMjEgMTUxIik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVfR2FwQXRCZWdpbm5pbmdPZkdyb3VwKSB7Ci0gIFNlZWsoMCk7Ci0KLSAgLy8gQXBwZW5kIGEgY29kZWQgZnJhbWUgZ3JvdXAgdGhhdCBoYXMgYSBnYXAgYXQgdGhlIGJlZ2lubmluZyBvZiBpdC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIzMEsgNjAgOTAgMTIwSyAxNTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE4MCkgfSIpOwotCi0gIC8vIFJlbW92ZSB0aGUgZ2FwIHRoYXQgZG9lc24ndCBjb250YWluIGFueSBidWZmZXJzLgotICBSZW1vdmVJbk1zKDAsIDEwLCAxODApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwLDE4MCkgfSIpOwotCi0gIC8vIFZlcmlmeSB3ZSBzdGlsbCBnZXQgdGhlIGZpcnN0IGJ1ZmZlciBzdGlsbCBzaW5jZSBvbmx5IHBhcnQgb2YKLSAgLy8gdGhlIGdhcCB3YXMgcmVtb3ZlZC4KLSAgLy8gVE9ETyhhY29sd2VsbC93b2xlbmV0eik6IENvbnNpZGVyIG5vdCByZXR1cm5pbmcgYSBidWZmZXIgYXQgdGhpcwotICAvLyBwb2ludCBzaW5jZSB0aGUgY3VycmVudCBzZWVrIHBvc2l0aW9uIGhhcyBiZWVuIGV4cGxpY2l0bHkKLSAgLy8gcmVtb3ZlZCBidXQgZGlkbid0IGhhcHBlbiB0byByZW1vdmUgYW55IGJ1ZmZlcnMuCi0gIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMzg0MDE2Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIzMEsiKTsKLQotICAvLyBSZW1vdmUgYSByYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBmaXJzdCBHT1AuCi0gIFJlbW92ZUluTXMoMCwgNjAsIDE4MCk7Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgbm8gYnVmZmVyIGlzIHJldHVybmVkIGJlY2F1c2UgdGhlIGN1cnJlbnQgYnVmZmVyCi0gIC8vIHBvc2l0aW9uIGhhcyBiZWVuIHJlbW92ZWQuCi0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMjAsMTgwKSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBUZXh0X0FwcGVuZF9TaW5nbGVSYW5nZSkgewotICBTZXRUZXh0U3RyZWFtKCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNTAwSyAxMDAwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTUwMCkgfSIpOwotCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyA1MDBLIDEwMDBLIik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBUZXh0X0FwcGVuZF9EaXNqb2ludEFmdGVyKSB7Ci0gIFNldFRleHRTdHJlYW0oKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyA1MDBLIDEwMDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNTAwKSB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMzAwMEsgMzUwMEsgNDAwMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDQ1MDApIH0iKTsKLQotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgNTAwSyAxMDAwSyAzMDAwSyAzNTAwSyA0MDAwSyIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgVGV4dF9BcHBlbmRfRGlzam9pbnRCZWZvcmUpIHsKLSAgU2V0VGV4dFN0cmVhbSgpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjMwMDBLIDM1MDBLIDQwMDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMzAwMCw0NTAwKSB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNTAwSyAxMDAwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNDUwMCkgfSIpOwotCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyA1MDBLIDEwMDBLIDMwMDBLIDM1MDBLIDQwMDBLIik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBUZXh0X0NvbXBsZXRlT3ZlcmxhcCkgewotICBTZXRUZXh0U3RyZWFtKCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMzAwMEsgMzUwMEsgNDAwMEsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFszMDAwLDQ1MDApIH0iKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKAotICAgICAgIjBLIDUwMUsgMTAwMUsgMTUwMUsgMjAwMUsgMjUwMUsgIgotICAgICAgIjMwMDFLIDM1MDFLIDQwMDFLIDQ1MDFLIDUwMDFLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw1NTAxKSB9Iik7Ci0KLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoCi0gICAgICAiMEsgNTAxSyAxMDAxSyAxNTAxSyAyMDAxSyAyNTAxSyAiCi0gICAgICAiMzAwMUsgMzUwMUsgNDAwMUsgNDUwMUsgNTAwMUsiKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFRleHRfT3ZlcmxhcEFmdGVyKSB7Ci0gIFNldFRleHRTdHJlYW0oKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyA1MDBLIDEwMDBLIDE1MDBLIDIwMDBLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyNTAwKSB9Iik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTQ5OUsgMjAwMUsgMjUwMUsgMzAwMUsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDM1MDEpIH0iKTsKLQotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgNTAwSyAxMDAwSyAxNDk5SyAyMDAxSyAyNTAxSyAzMDAxSyIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgVGV4dF9PdmVybGFwQmVmb3JlKSB7Ci0gIFNldFRleHRTdHJlYW0oKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxNTAwSyAyMDAwSyAyNTAwSyAzMDAwSyAzNTAwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzE1MDAsNDAwMCkgfSIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDUwMUsgMTAwMUsgMTUwMUsgMjAwMUsiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDQwMDApIH0iKTsKLQotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgNTAxSyAxMDAxSyAxNTAxSyAyMDAxSyAzMDAwSyAzNTAwSyIpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU3BsaWNlRnJhbWVfQmFzaWMpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyBTKDNLIDYgOUQzIDEwRDUpIDE1IDIwIFMoMjVLIDMwRDUgMzVENSkgNDAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDNLIDYgOSBDIDEwIDE1IDIwIDI1SyAzMCBDIDM1IDQwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTcGxpY2VGcmFtZV9TZWVrQ2xlYXJzU3BsaWNlKSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgUygzSyA2IDlEMyAxMEQ1KSAxNUsgMjAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDNLIDYiKTsKLQotICBTZWVrVG9UaW1lc3RhbXBNcygxNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxNUsgMjAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNwbGljZUZyYW1lX1NlZWtDbGVhcnNTcGxpY2VGcm9tVHJhY2tCdWZmZXIpIHsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAySyBTKDNLIDYgOUQzIDEwRDUpIDE1SyAyMCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMksiKTsKLQotICAvLyBPdmVybGFwIHRoZSBleGlzdGluZyBjb2RlZCBmcmFtZSBncm91cC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI1SyAxNUsgMjAiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjNLIDYiKTsKLQotICBTZWVrVG9UaW1lc3RhbXBNcygxNSk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxNUsgMjAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNwbGljZUZyYW1lX0NvbmZpZ0NoYW5nZVdpdGhpblNwbGljZSkgewotICBWaWRlb0RlY29kZXJDb25maWcgbmV3X2NvbmZpZyA9IFRlc3RWaWRlb0NvbmZpZzo6TGFyZ2UoKTsKLSAgQVNTRVJUX0ZBTFNFKG5ld19jb25maWcuTWF0Y2hlcyh2aWRlb19jb25maWdfKSk7Ci0KLSAgLy8gQWRkIGEgbmV3IHZpZGVvIGNvbmZpZywgdGhlbiByZXNldCB0aGUgY29uZmlnIGluZGV4IGJhY2sgdG8gdGhlIG9yaWdpbmFsLgotICBzdHJlYW1fLT5VcGRhdGVWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgc3RyZWFtXy0+VXBkYXRlVmlkZW9Db25maWcodmlkZW9fY29uZmlnXyk7Ci0KLSAgU2VlaygwKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyBTKDNLIDZDIDlEMyAxMEQ1KSAxNSIpOwotCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzSyBDIik7Ci0gIENoZWNrVmlkZW9Db25maWcobmV3X2NvbmZpZyk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI2IDkgQyIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTAgQyIpOwotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTUiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFNwbGljZUZyYW1lX0Jhc2ljRnJvbVRyYWNrQnVmZmVyKSB7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNUsgUyg4SyA5RDEgMTBEMTApIDIwIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyA1SyIpOwotCi0gIC8vIE92ZXJsYXAgdGhlIGV4aXN0aW5nIGNvZGVkIGZyYW1lIGdyb3VwLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjVLIDIwIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI4SyA5IEMgMTAgMjAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3BsaWNlRnJhbWVfQ29uZmlnQ2hhbmdlV2l0aGluU3BsaWNlRnJvbVRyYWNrQnVmZmVyKSB7Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyBuZXdfY29uZmlnID0gVGVzdFZpZGVvQ29uZmlnOjpMYXJnZSgpOwotICBBU1NFUlRfRkFMU0UobmV3X2NvbmZpZy5NYXRjaGVzKHZpZGVvX2NvbmZpZ18pKTsKLQotICAvLyBBZGQgYSBuZXcgdmlkZW8gY29uZmlnLCB0aGVuIHJlc2V0IHRoZSBjb25maWcgaW5kZXggYmFjayB0byB0aGUgb3JpZ2luYWwuCi0gIHN0cmVhbV8tPlVwZGF0ZVZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotICBzdHJlYW1fLT5VcGRhdGVWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLQotICBTZWVrKDApOwotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDVLIFMoN0sgOEMgOUQxIDEwRDEwKSAyMCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgNUsiKTsKLQotICAvLyBPdmVybGFwIHRoZSBleGlzdGluZyBjb2RlZCBmcmFtZSBncm91cC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI1SyAyMCIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiN0sgQyIpOwotICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiOCA5IEMiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEwIEMiKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjIwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9CYXNpYykgewotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRhaW5zR2VuZXJhdGVkU3BsaWNlTG9nKDMwMDAsIDExMDAwKSk7Ci0KLSAgU2V0QXVkaW9TdHJlYW0oKTsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAySyA0SyA2SyA4SyAxMEsgMTJLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTFLIDEzSyAxNUsgMTdLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAySyA0SyA2SyA4SyAxMEsgMTJLIEMgMTFLIDEzSyAxNUsgMTdLIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9Ob0V4YWN0U3BsaWNlcykgewotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgSGFzU3Vic3RyKCJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogZmlyc3QgbmV3IGJ1ZmZlciBhdCAxMDAwMHVzICIKLSAgICAgICAgICAgICAgICAiYmVnaW5zIGF0IG9yIGJlZm9yZSBleGlzdGluZyBidWZmZXIgYXQgMTAwMDB1cy4iKSk7Ci0KLSAgU2V0QXVkaW9TdHJlYW0oKTsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAySyA0SyA2SyA4SyAxMEsgMTJLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBLIDE0SyIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMksgNEsgNksgOEsgMTBLIDE0SyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi0vLyBEbyBub3QgYWxsb3cgc3BsaWNlcyBvbiB0b3Agb2Ygc3BsaWNlcy4KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9Ob0RvdWJsZVNwbGljZSkgewotICBJblNlcXVlbmNlIHM7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29udGFpbnNHZW5lcmF0ZWRTcGxpY2VMb2coMzAwMCwgMTEwMDApKTsKLSAgRVhQRUNUX01FRElBX0xPRygKLSAgICAgIEhhc1N1YnN0cigiU2tpcHBpbmcgc3BsaWNlIGZyYW1lIGdlbmVyYXRpb246IG92ZXJsYXBwZWQgYnVmZmVycyBhdCAiCi0gICAgICAgICAgICAgICAgIjEwMDAwdXMgYXJlIGluIGEgcHJldmlvdXNseSBidWZmZXJlZCBzcGxpY2UuIikpOwotCi0gIFNldEF1ZGlvU3RyZWFtKCk7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMksgNEsgNksgOEsgMTBLIDEySyIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjExSyAxM0sgMTVLIDE3SyIpOwotCi0gIC8vIFZlcmlmeSB0aGUgc3BsaWNlIHdhcyBjcmVhdGVkLgotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMksgNEsgNksgOEsgMTBLIDEySyBDIDExSyAxM0sgMTVLIDE3SyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBTZWVrKDApOwotCi0gIC8vIENyZWF0ZSBhIHNwbGljZSBiZWZvcmUgdGhlIGZpcnN0IHNwbGljZSB3aGljaCB3b3VsZCBpbmNsdWRlIGl0LgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjlEMksiKTsKLQotICAvLyBBIHNwbGljZSBvbiB0b3Agb2YgYSBzcGxpY2Ugc2hvdWxkIHJlc3VsdCBpbiBhIGRpc2NhcmQgb2YgdGhlIG9yaWdpbmFsCi0gIC8vIHNwbGljZSBhbmQgbm8gbmV3IHNwbGljZSBmcmFtZSBiZWluZyBnZW5lcmF0ZWQuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAySyA0SyA2SyA4SyA5SyAxM0sgMTVLIDE3SyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi0vLyBUZXN0IHRoYXQgYSBzcGxpY2UgaXMgbm90IGNyZWF0ZWQgaWYgYW4gZW5kIHRpbWVzdGFtcCBhbmQgc3RhcnQgdGltZXN0YW1wCi0vLyBvdmVybGFwLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEF1ZGlvX1NwbGljZUZyYW1lX05vU3BsaWNlKSB7Ci0gIFNldEF1ZGlvU3RyZWFtKCk7Ci0gIFNlZWsoMCk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMksgNEsgNksgOEsgMTBLIik7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTJLIDE0SyAxNksgMThLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAySyA0SyA2SyA4SyAxMEsgMTJLIDE0SyAxNksgMThLIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9Db3JyZWN0R3JvdXBTdGFydFRpbWUpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc0dlbmVyYXRlZFNwbGljZUxvZyg1MDAwLCAxMDAwKSk7Ci0KLSAgU2V0QXVkaW9TdHJlYW0oKTsKLSAgU2VlaygwKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAySyA0SyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNikgfSIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjZLIDhLIDEwSyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTIpIH0iKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxSyA0RDJLIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxMikgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMksgNEsgQyAxSyA0SyA2SyA4SyAxMEsiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEF1ZGlvX1NwbGljZUZyYW1lX0NvbmZpZ0NoYW5nZSkgewotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRhaW5zR2VuZXJhdGVkU3BsaWNlTG9nKDMwMDAsIDUwMDApKTsKLQotICBTZXRBdWRpb1N0cmVhbSgpOwotCi0gIEF1ZGlvRGVjb2RlckNvbmZpZyBuZXdfY29uZmlnKGtDb2RlY1ZvcmJpcywga1NhbXBsZUZvcm1hdFBsYW5hckYzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBTk5FTF9MQVlPVVRfTU9OTywgMTAwMCwgRW1wdHlFeHRyYURhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5lbmNyeXB0ZWQoKSk7Ci0gIEFTU0VSVF9ORShuZXdfY29uZmlnLmNoYW5uZWxfbGF5b3V0KCksIGF1ZGlvX2NvbmZpZ18uY2hhbm5lbF9sYXlvdXQoKSk7Ci0KLSAgU2VlaygwKTsKLSAgQ2hlY2tBdWRpb0NvbmZpZyhhdWRpb19jb25maWdfKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAySyA0SyA2SyIpOwotICBzdHJlYW1fLT5VcGRhdGVBdWRpb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI1SyA4SyAxMksiKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDJLIDRLIDZLIEMgNUsgOEsgMTJLIik7Ci0gIENoZWNrQXVkaW9Db25maWcobmV3X2NvbmZpZyk7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLS8vIEVuc3VyZSBzcGxpY2VzIGFyZSBub3QgY3JlYXRlZCBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBmcmFtZXMgdG8gY3Jvc3NmYWRlLgotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEF1ZGlvX1NwbGljZUZyYW1lX05vVGlueVNwbGljZXMpIHsKLSAgRVhQRUNUX01FRElBX0xPRyhIYXNTdWJzdHIoCi0gICAgICAiU2tpcHBpbmcgc3BsaWNlIGZyYW1lIGdlbmVyYXRpb246IG5vdCBlbm91Z2ggc2FtcGxlcyBmb3Igc3BsaWNpbmcgbmV3ICIKLSAgICAgICJidWZmZXIgYXQgMTAwMHVzLiBIYXZlIDEwMDB1cywgYnV0IG5lZWQgMjAwMHVzLiIpKTsKLQotICBTZXRBdWRpb1N0cmVhbSgpOwotICBTZWVrKDApOwotCi0gIC8vIE92ZXJsYXAgdGhlIHJhbmdlIFswLCAyKSB3aXRoIFsxLCAzKS4gIFNpbmNlIGVhY2ggZnJhbWUgaGFzIGEgZHVyYXRpb24gb2YKLSAgLy8gMm1zIHRoaXMgcmVzdWx0cyBpbiBhbiBvdmVybGFwIG9mIDFtcyBiZXR3ZWVuIHRoZSByYW5nZXMuICBBIHNwbGljZSBmcmFtZQotICAvLyBzaG91bGQgbm90IGJlIGdlbmVyYXRlZCBzaW5jZSBpdCByZXF1aXJlcyBhdCBsZWFzdCAyIGZyYW1lcywgb3IgMm1zIGluIHRoaXMKLSAgLy8gY2FzZSwgb2YgZGF0YSB0byBjcm9zc2ZhZGUuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEQySyIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMikgfSIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjFEMksiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDMpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDFLIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9Ob01pbGxpc2Vjb25kU3BsaWNlcykgewotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgSGFzU3Vic3RyKCJTa2lwcGluZyBzcGxpY2UgZnJhbWUgZ2VuZXJhdGlvbjogbm90IGVub3VnaCBzYW1wbGVzIGZvciAiCi0gICAgICAgICAgICAgICAgInNwbGljaW5nIG5ldyBidWZmZXIgYXQgMTI1MHVzLiBIYXZlIDc1MHVzLCBidXQgbmVlZCAxMDAwdXMuIikpOwotCi0gIHZpZGVvX2NvbmZpZ18gPSBUZXN0VmlkZW9Db25maWc6OkludmFsaWQoKTsKLSAgYXVkaW9fY29uZmlnXy5Jbml0aWFsaXplKGtDb2RlY1ZvcmJpcywga1NhbXBsZUZvcm1hdFBsYW5hckYzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQU5ORUxfTEFZT1VUX1NURVJFTywgNDAwMCwgRW1wdHlFeHRyYURhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuZW5jcnlwdGVkKCksIGJhc2U6OlRpbWVEZWx0YSgpLCAwKTsKLSAgc3RyZWFtXy5yZXNldChuZXcgU291cmNlQnVmZmVyU3RyZWFtKGF1ZGlvX2NvbmZpZ18sIG1lZGlhX2xvZ18sIHRydWUpKTsKLSAgLy8gRXF1aXZhbGVudCB0byAwLjVtcyBwZXIgZnJhbWUuCi0gIFNldFN0cmVhbUluZm8oMjAwMCwgMjAwMCk7Ci0gIFNlZWsoMCk7Ci0KLSAgLy8gQXBwZW5kIGZvdXIgYnVmZmVycyB3aXRoIGEgMC41bXMgZHVyYXRpb24gZWFjaC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKDAsIDQpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMikgfSIpOwotCi0gIC8vIE92ZXJsYXAgdGhlIHJhbmdlIFswLCAyKSB3aXRoIFsxLjI1LCAyKTsgdGhpcyByZXN1bHRzIGluIGFuIG92ZXJsYXAgb2YKLSAgLy8gMC43NW1zIGJldHdlZW4gdGhlIHJhbmdlcy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kX09mZnNldEZpcnN0QnVmZmVyKAotICAgICAgMiwgMiwgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzRCgwLjI1KSk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyKSB9Iik7Ci0KLSAgLy8gQSBzcGxpY2UgZnJhbWUgc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgKGluZGljYXRlZCBieSB0aGUgbGFjayBvZiBhIGNvbmZpZwotICAvLyBjaGFuZ2UgaW4gdGhlIGV4cGVjdGVkIGJ1ZmZlciBzdHJpbmcpIHNpbmNlIGl0IHJlcXVpcmVzIGF0IGxlYXN0IDFtcyBvZgotICAvLyBkYXRhIHRvIGNyb3NzZmFkZS4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDBLIDFLIDFLIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBBdWRpb19TcGxpY2VGcmFtZV9QcmVyb2xsKSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coQ29udGFpbnNHZW5lcmF0ZWRTcGxpY2VMb2coMzAwMCwgMTEwMDApKTsKLQotICBTZXRBdWRpb1N0cmVhbSgpOwotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDJLIDRLIDZLIDhLIDEwSyAxMksiKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMVAgMTNLIDE1SyAxN0siKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDJLIDRLIDZLIDhLIDEwSyAxMksgQyAxMVAgMTNLIDE1SyAxN0siKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIEF1ZGlvX1ByZXJvbGxGcmFtZSkgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDNQIDZLIik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAzUCA2SyIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgQkZyYW1lcykgewotICBTZWVrKDApOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEyMHwzMCAzMHw2MCA2MHw5MCA5MHwxMjAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE1MCkgfSIpOwotCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAxMjB8MzAgMzB8NjAgNjB8OTAgOTB8MTIwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZW1vdmVTaG91bGRBbHdheXNFeGNsdWRlRW5kKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBEMksgMTJEMiAxNEQyIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAsMTYpIH0iKTsKLQotICAvLyBTdGFydCBuZXcgY29kZWQgZnJhbWUgZ3JvdXAsIGFwcGVuZGluZyBLRiB0byBhYnV0IHRoZSBzdGFydCBvZiBwcmV2aW91cwotICAvLyBncm91cC4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwRDEwSyIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTYpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDEwSyAxMiAxNCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCBhbm90aGVyIGJ1ZmZlciB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcCBhcyB0aGUgbGFzdCBLRi4gVGhpcyB0cmlnZ2VycwotICAvLyBzcGVjaWFsIGxvZ2ljIHRoYXQgYWxsb3dzIHR3byBidWZmZXJzIHRvIGhhdmUgdGhlIHNhbWUgdGltZXN0YW1wLiBXaGVuCi0gIC8vIHByZXBhcmluZyBmb3IgdGhpcyBuZXcgYXBwZW5kLCB0aGVyZSBpcyBubyByZWFzb24gdG8gcmVtb3ZlIHRoZSBsYXRlciBHT1AKLSAgLy8gc3RhcnRpbmcgYXQgdGltZXN0YW1wIDEwLiBUaGlzIHZlcmlmaWVzIHRoZSBmaXggZm9yIGh0dHA6Ly9jcmJ1Zy5jb20vNDY5MzI1Ci0gIC8vIHdoZXJlIHRoZSBkZWNpc2lvbiAqbm90KiB0byByZW1vdmUgdGhlIHN0YXJ0IG9mIHRoZSBvdmVybGFwcGVkIHJhbmdlIHdhcwotICAvLyBlcnJvbmVvdXNseSB0cmlnZ2VyaW5nIGJ1ZmZlcnMgd2l0aCBhIHRpbWVzdGFtcCBtYXRjaGluZyB0aGUgZW5kCi0gIC8vIG9mIHRoZSBhcHBlbmQgKGFuZCBhbnkgbGF0ZXIgZGVwZW5kZW50IGZyYW1lcykgdG8gYmUgcmVtb3ZlZC4KLSAgQXBwZW5kQnVmZmVycygiMEQxMCIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTYpIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDAgMTBLIDEyIDE0Iik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBSZWZpbmVkRHVyYXRpb25Fc3RpbWF0ZXNfQmFja092ZXJsYXApIHsKLSAgLy8gQXBwZW5kIGEgZmV3IGJ1ZmZlcnMsIHRoZSBsYXN0IG9uZSBoYXZpbmcgZXN0aW1hdGVkIGR1cmF0aW9uLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDUgMTAgMjBEMTBFIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgfSIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgNSAxMCAyMEQxMEUiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgYSBidWZmZXIgdG8gdGhlIGVuZCB0aGF0IG92ZXJsYXBzIHRoZSAqYmFjayogb2YgdGhlIGV4aXN0aW5nIHJhbmdlLgotICAvLyBUaGlzIHNob3VsZCB0cmlnZ2VyIHRoZSBlc3RpbWF0ZWQgZHVyYXRpb24gdG8gYmUgcmVjb21wdXRlZCBhcyBhIHRpbWVzdGFtcAotICAvLyBkZWx0YS4KLSAgQXBwZW5kQnVmZmVycygiMjVEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDM1KSB9Iik7Ci0gIFNlZWsoMCk7Ci0gIC8vIFRoZSBkdXJhdGlvbiBvZiB0aGUgYnVmZmVyIGF0IHRpbWUgMjAgaGFzIGNoYW5nZWQgZnJvbSAxMG1zIHRvIDVtcy4KLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDUgMTAgMjBENUUgMjUiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBJZiB0aGUgbGFzdCBidWZmZXIgaXMgcmVtb3ZlZCwgdGhlIGFkanVzdGVkIGR1cmF0aW9uIHNob3VsZCByZW1haW4gYXQgNW1zLgotICBSZW1vdmVJbk1zKDI1LCAzNSwgMzUpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMjUpIH0iKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDUgMTAgMjBENUUiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlZmluZWREdXJhdGlvbkVzdGltYXRlc19Gcm9udE92ZXJsYXApIHsKLSAgLy8gQXBwZW5kIGEgZmV3IGJ1ZmZlcnMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTBLIDE1IDIwRDUiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsxMCwyNSkgfSIpOwotICBTZWVrVG9UaW1lc3RhbXBNcygxMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMEsgMTUgMjAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgbmV3IGJ1ZmZlcnMsIHdoZXJlIHRoZSBsYXN0IGhhcyBlc3RpbWF0ZWQgZHVyYXRpb24gdGhhdCBvdmVybGFwcyB0aGUKLSAgLy8gKmZyb250KiBvZiB0aGUgZXhpc3RpbmcgcmFuZ2UuIFRoZSBvdmVybGFwIHNob3VsZCB0cmlnZ2VyIHJlZmluZW1lbnQgb2YgdGhlCi0gIC8vIGVzdGltYXRlZCBkdXJhdGlvbiBmcm9tIDdtcyB0byA1bXMuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgNUQ3RSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMjUpIH0iKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDVENUUgMTBLIDE1IDIwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gSWYgdGhlIG92ZXJsYXBwZWQgYnVmZmVyIGF0IHRpbWVzdGFtcCAxMCBpcyByZW1vdmVkLCB0aGUgYWRqdXN0ZWQgZHVyYXRpb24KLSAgLy8gc2hvdWxkIHJlbWFpbiBhZGp1c3RlZC4KLSAgUmVtb3ZlSW5NcygxMCwgMjAsIDI1KTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDEwKSB9Iik7Ci0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyA1RDVFIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBTZWVrVG9TdGFydFNhdGlzZmllZFVwVG9UaHJlc2hvbGQpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI5OTlLIDEwMTAgMTAyMEQxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzk5OSwxMDMwKSB9Iik7Ci0KLSAgU2Vla1RvVGltZXN0YW1wTXMoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI5OTlLIDEwMTAgMTAyMEQxMCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgU2Vla1RvU3RhcnRVbnNhdGlzZmllZEJleW9uZFRocmVzaG9sZCkgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwMDBLIDEwMTAgMTAyMEQxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwMDAsMTAzMCkgfSIpOwotCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDApOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwKLSAgICAgICBSZVNlZWtUb1N0YXJ0U2F0aXNmaWVkVXBUb1RocmVzaG9sZF9TYW1lVGltZXN0YW1wcykgewotICAvLyBBcHBlbmQgYSBmZXcgYnVmZmVycy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI5OTlLIDEwMTAgMTAyMEQxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzk5OSwxMDMwKSB9Iik7Ci0KLSAgLy8gRG9uJ3QgcmVhZCBhbnkgYnVmZmVycyBiZXR3ZWVuIFNlZWsgYW5kIFJlbW92ZS4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMCk7Ci0gIFJlbW92ZUluTXMoOTk5LCAxMDMwLCAxMDMwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IH0iKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgYnVmZmVycyBhdCB0aGUgb3JpZ2luYWwgdGltZXN0YW1wcyBhbmQgdmVyaWZ5IG5vIHN0YWxsLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjk5OUsgMTAxMCAxMDIwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbOTk5LDEwMzApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjk5OUsgMTAxMCAxMDIwRDEwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIFJlU2Vla1RvU3RhcnRTYXRpc2ZpZWRVcFRvVGhyZXNob2xkX0VhcmxpZXJUaW1lc3RhbXBzKSB7Ci0gIC8vIEFwcGVuZCBhIGZldyBidWZmZXJzLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjk5OUsgMTAxMCAxMDIwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbOTk5LDEwMzApIH0iKTsKLQotICAvLyBEb24ndCByZWFkIGFueSBidWZmZXJzIGJldHdlZW4gU2VlayBhbmQgUmVtb3ZlLgotICBTZWVrVG9UaW1lc3RhbXBNcygwKTsKLSAgUmVtb3ZlSW5Ncyg5OTksIDEwMzAsIDEwMzApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCBidWZmZXJzIGJlZm9yZSB0aGUgb3JpZ2luYWwgdGltZXN0YW1wcyBhbmQgdmVyaWZ5IG5vIHN0YWxsICh0aGUKLSAgLy8gcmUtc2VlayB0byB0aW1lIDAgc2hvdWxkIHN0aWxsIGJlIHNhdGlzZmllZCB3aXRoIHRoZSBuZXcgYnVmZmVycykuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNTAwSyA1MTAgNTIwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbNTAwLDUzMCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiNTAwSyA1MTAgNTIwRDEwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIFJlU2Vla1RvU3RhcnRTYXRpc2ZpZWRVcFRvVGhyZXNob2xkX0xhdGVyVGltZXN0YW1wcykgewotICAvLyBBcHBlbmQgYSBmZXcgYnVmZmVycy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCI1MDBLIDUxMCA1MjBEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs1MDAsNTMwKSB9Iik7Ci0KLSAgLy8gRG9uJ3QgcmVhZCBhbnkgYnVmZmVycyBiZXR3ZWVuIFNlZWsgYW5kIFJlbW92ZS4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMCk7Ci0gIFJlbW92ZUluTXMoNTAwLCA1MzAsIDUzMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyB9Iik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgYmVnaW5uaW5nIGFmdGVyIG9yaWdpbmFsIHRpbWVzdGFtcHMsIGJ1dCBzdGlsbCBiZWxvdyB0aGUKLSAgLy8gc3RhcnQgdGhyZXNob2xkLCBhbmQgdmVyaWZ5IG5vIHN0YWxsICh0aGUgcmUtc2VlayB0byB0aW1lIDAgc2hvdWxkIHN0aWxsIGJlCi0gIC8vIHNhdGlzZmllZCB3aXRoIHRoZSBuZXcgYnVmZmVycykuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiOTk5SyAxMDEwIDEwMjBEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs5OTksMTAzMCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiOTk5SyAxMDEwIDEwMjBEMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlU2Vla0JleW9uZFN0YXJ0VGhyZXNob2xkX1NhbWVUaW1lc3RhbXBzKSB7Ci0gIC8vIEFwcGVuZCBhIGZldyBidWZmZXJzLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwMDBLIDEwMTAgMTAyMEQxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwMDAsMTAzMCkgfSIpOwotCi0gIC8vIERvbid0IHJlYWQgYW55IGJ1ZmZlcnMgYmV0d2VlbiBTZWVrIGFuZCBSZW1vdmUuCi0gIFNlZWtUb1RpbWVzdGFtcE1zKDEwMDApOwotICBSZW1vdmVJbk1zKDEwMDAsIDEwMzAsIDEwMzApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgfSIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotCi0gIC8vIEFwcGVuZCBidWZmZXJzIGF0IHRoZSBvcmlnaW5hbCB0aW1lc3RhbXBzIGFuZCB2ZXJpZnkgbm8gc3RhbGwuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMTAwMEsgMTAxMCAxMDIwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMTAwMCwxMDMwKSB9Iik7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIxMDAwSyAxMDEwIDEwMjBEMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsIFJlU2Vla0JleW9uZFRocmVzaG9sZF9FYXJsaWVyVGltZXN0YW1wcykgewotICAvLyBBcHBlbmQgYSBmZXcgYnVmZmVycy4KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIyMDAwSyAyMDEwIDIwMjBEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFsyMDAwLDIwMzApIH0iKTsKLQotICAvLyBEb24ndCByZWFkIGFueSBidWZmZXJzIGJldHdlZW4gU2VlayBhbmQgUmVtb3ZlLgotICBTZWVrVG9UaW1lc3RhbXBNcygyMDAwKTsKLSAgUmVtb3ZlSW5NcygyMDAwLCAyMDMwLCAyMDMwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IH0iKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLQotICAvLyBBcHBlbmQgYnVmZmVycyBiZWZvcmUgdGhlIG9yaWdpbmFsIHRpbWVzdGFtcHMgYW5kIHZlcmlmeSBubyBzdGFsbCAodGhlCi0gIC8vIHJlLXNlZWsgdG8gdGltZSAyIHNlY29uZHMgc2hvdWxkIHN0aWxsIGJlIHNhdGlzZmllZCB3aXRoIHRoZSBuZXcgYnVmZmVycwotICAvLyBhbmQgc2hvdWxkIGVtaXQgcHJlcm9sbCBmcm9tIGxhc3Qga2V5ZnJhbWUpLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjEwODBLIDEwOTAgMjAwMEQxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzEwODAsMjAxMCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTA4MEsgMTA5MCAyMDAwRDEwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBDb25maWdDaGFuZ2VfUmVTZWVrKSB7Ci0gIC8vIEFwcGVuZCBhIGZldyBidWZmZXJzLCB3aXRoIGEgY29uZmlnIGNoYW5nZSBpbiB0aGUgbWlkZGxlLgotICBWaWRlb0RlY29kZXJDb25maWcgbmV3X2NvbmZpZyA9IFRlc3RWaWRlb0NvbmZpZzo6TGFyZ2UoKTsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIyMDAwSyAyMDEwIDIwMjBEMTAiKTsKLSAgc3RyZWFtXy0+VXBkYXRlVmlkZW9Db25maWcobmV3X2NvbmZpZyk7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMjAzMEsgMjA0MCAyMDUwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMjAwMCwyMDYwKSB9Iik7Ci0KLSAgLy8gUmVhZCB0aGUgY29uZmlnIGNoYW5nZSwgYnV0IGRvbid0IHJlYWQgYW55IG5vbi1jb25maWctY2hhbmdlIGJ1ZmZlciBiZXR3ZWVuCi0gIC8vIFNlZWsgYW5kIFJlbW92ZS4KLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlcjsKLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLSAgU2Vla1RvVGltZXN0YW1wTXMoMjAzMCk7Ci0gIENoZWNrVmlkZW9Db25maWcodmlkZW9fY29uZmlnXyk7Ci0gIEVYUEVDVF9FUShzdHJlYW1fLT5HZXROZXh0QnVmZmVyKCZidWZmZXIpLCBTb3VyY2VCdWZmZXJTdHJlYW06OmtDb25maWdDaGFuZ2UpOwotICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotCi0gIC8vIFRyaWdnZXIgdGhlIHJlLXNlZWsuCi0gIFJlbW92ZUluTXMoMjAzMCwgMjA2MCwgMjA2MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMjAwMCwyMDMwKSB9Iik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0KLSAgLy8gQXBwZW5kIGJ1ZmZlcnMgYXQgdGhlIG9yaWdpbmFsIHRpbWVzdGFtcHMgYW5kIHZlcmlmeSBubyBzdGFsbCBvciByZWR1bmRhbnQKLSAgLy8gc2lnbmFsbGluZyBvZiBjb25maWcgY2hhbmdlLgotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjIwMzBLIDIwNDAgMjA1MEQxMCIpOwotICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzIwMDAsMjA2MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMjAzMEsgMjA0MCAyMDUwRDEwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci0gIENoZWNrVmlkZW9Db25maWcobmV3X2NvbmZpZyk7Ci0KLSAgLy8gU2VlayB0byB0aGUgc3RhcnQgb2YgYnVmZmVyZWQgYW5kIHZlcmlmeSBjb25maWcgY2hhbmdlcyBhbmQgYnVmZmVycy4KLSAgU2Vla1RvVGltZXN0YW1wTXMoMjAwMCk7Ci0gIENoZWNrVmlkZW9Db25maWcobmV3X2NvbmZpZyk7Ci0gIEFTU0VSVF9GQUxTRShuZXdfY29uZmlnLk1hdGNoZXModmlkZW9fY29uZmlnXykpOwotICBFWFBFQ1RfRVEoc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKSwgU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyh2aWRlb19jb25maWdfKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjIwMDBLIDIwMTAgMjAyMEQxMCIpOwotICBDaGVja1ZpZGVvQ29uZmlnKHZpZGVvX2NvbmZpZ18pOwotICBFWFBFQ1RfRVEoc3RyZWFtXy0+R2V0TmV4dEJ1ZmZlcigmYnVmZmVyKSwgU291cmNlQnVmZmVyU3RyZWFtOjprQ29uZmlnQ2hhbmdlKTsKLSAgQ2hlY2tWaWRlb0NvbmZpZyhuZXdfY29uZmlnKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjIwMzBLIDIwNDAgMjA1MEQxMCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBDaGVja1ZpZGVvQ29uZmlnKG5ld19jb25maWcpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwgVHJhY2tCdWZmZXJfRXhoYXVzdGlvbldpdGhTa2lwRm9yd2FyZCkgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwIDIwIDMwIDQwIik7Ci0KLSAgLy8gUmVhZCB0aGUgZmlyc3QgNCBidWZmZXJzLCBzbyBuZXh0IGJ1ZmZlciBpcyBhdCB0aW1lIDQwLgotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNTApIH0iKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDEwIDIwIDMwIik7Ci0KLSAgLy8gT3ZlcmxhcC1hcHBlbmQsIHBvcHVsYXRpbmcgdHJhY2sgYnVmZmVyIHdpdGggdGltZXN0YW1wIDQwIGZyb20gb3JpZ2luYWwKLSAgLy8gYXBwZW5kLiBDb25maXJtIHRoZXJlIGNvdWxkIGJlIGEgbGFyZ2UganVtcCBpbiB0aW1lIHVudGlsIHRoZSBuZXh0IGtleQotICAvLyBmcmFtZSBhZnRlciBleGhhdXN0aW5nIHRoZSB0cmFjayBidWZmZXIuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgKLSAgICAgICIzMUsgNDEgNTEgNjEgNzEgODEgOTEgMTAxIDExMSAxMjEgIgotICAgICAgIjEzMUsgMTQxIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwxNTEpIH0iKTsKLQotICAvLyBDb25maXJtIHRoZSBsYXJnZSBqdW1wIG9jY3VycyBhbmQgd2FybmluZyBsb2cgaXMgZ2VuZXJhdGVkLgotICAvLyBJZiB0aGlzIHRlc3QgaXMgY2hhbmdlZCwgdXBkYXRlCi0gIC8vIFRyYWNrQnVmZmVyRXhoYXVzdGlvbl9JbW1lZGlhdGVOZXdUcmFja0J1ZmZlciBhY2NvcmRpbmdseS4KLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coOTEpKTsKLQotICBDaGVja0V4cGVjdGVkQnVmZmVycygiNDAgMTMxSyAxNDEiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgVHJhY2tCdWZmZXJfRXhoYXVzdGlvbkFuZEltbWVkaWF0ZU5ld1RyYWNrQnVmZmVyKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMTAgMjAgMzAgNDAiKTsKLQotICAvLyBSZWFkIHRoZSBmaXJzdCA0IGJ1ZmZlcnMsIHNvIG5leHQgYnVmZmVyIGlzIGF0IHRpbWUgNDAuCi0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw1MCkgfSIpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMTAgMjAgMzAiKTsKLQotICAvLyBPdmVybGFwLWFwcGVuZAotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoCi0gICAgICAiMzFLIDQxIDUxIDYxIDcxIDgxIDkxIDEwMSAxMTEgMTIxICIKLSAgICAgICIxMzFLIDE0MSIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMTUxKSB9Iik7Ci0KLSAgLy8gRXhoYXVzdCB0aGUgdHJhY2sgYnVmZmVyLCBidXQgZG9uJ3QgcmVhZCBhbnkgb2YgdGhlIG92ZXJsYXBwaW5nIGFwcGVuZCB5ZXQuCi0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCI0MCIpOwotCi0gIC8vIFNlbGVjdGVkIHJhbmdlJ3MgbmV4dCBidWZmZXIgaXMgbm93IHRoZSAxMzFLIGJ1ZmZlciBmcm9tIHRoZSBvdmVybGFwcGluZwotICAvLyBhcHBlbmQuIChTZWUgVHJhY2tCdWZmZXJfRXhoYXVzdGlvbldpdGhTa2lwRm9yd2FyZCBmb3IgdGhhdCB2ZXJpZmljYXRpb24uKQotICAvLyBEbyBhbm90aGVyIG92ZXJsYXAtYXBwZW5kIHRvIGltbWVkaWF0ZWx5IGNyZWF0ZSBhbm90aGVyIHRyYWNrIGJ1ZmZlciBhbmQKLSAgLy8gdmVyaWZ5IGJvdGggdHJhY2sgYnVmZmVyIGV4aGF1c3Rpb25zIHNraXAgZm9yd2FyZCBhbmQgZW1pdCBsb2cgd2FybmluZ3MuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgKLSAgICAgICIyMksgMzIgNDIgNTIgNjIgNzIgODIgOTIgMTAyIDExMiAxMjJLIDEzMiAxNDIgMTUySyAxNjIiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDE3MikgfSIpOwotCi0gIEluU2VxdWVuY2UgczsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coOTEpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhDb250YWluc1RyYWNrQnVmZmVyRXhoYXVzdGlvblNraXBMb2coMTEpKTsKLQotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMTMxSyAxNDEgMTUySyAxNjIiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKAotICAgIFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgQWRqYWNlbnRDb2RlZEZyYW1lR3JvdXBDb250aW51YXRpb25fTm9HYXBDcmVhdGVkQnlUaW55R2FwSW5Hcm91cENvbnRpbnVhdGlvbikgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwIDIwSyAzMCA0MEsgNTBEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDYwKSB9Iik7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nIHRvIHRoZSBwcmV2aW91c2x5IHN0YXJ0ZWQgY29kZWQgZnJhbWUgZ3JvdXAsIGFsYmVpdCB3aXRoCi0gIC8vIGEgdGlueSAoMW1zKSBnYXAuIFRoaXMgZ2FwIHNob3VsZCAqTk9UKiBwcm9kdWNlIGEgYnVmZmVyZWQgcmFuZ2UgZ2FwLgotICBBcHBlbmRCdWZmZXJzKCI2MUsgNzFEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDgxKSB9Iik7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LAotICAgICAgIEFkamFjZW50Q29kZWRGcmFtZUdyb3VwQ29udGludWF0aW9uX05vR2FwQ3JlYXRlZFByZWZpeFJlbW92ZWQpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAxMCAyMEsgMzAgNDBLIDUwRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw2MCkgfSIpOwotCi0gIFJlbW92ZUluTXMoMCwgMzUsIDYwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFs0MCw2MCkgfSIpOwotCi0gIC8vIENvbnRpbnVlIGFwcGVuZGluZyB0byB0aGUgcHJldmlvdXNseSBzdGFydGVkIGNvZGVkIGZyYW1lIGdyb3VwLCBhbGJlaXQgd2l0aAotICAvLyBhIHRpbnkgKDFtcykgZ2FwLiBUaGlzIGdhcCBzaG91bGQgKk5PVCogcHJvZHVjZSBhIGJ1ZmZlcmVkIHJhbmdlIGdhcC4KLSAgQXBwZW5kQnVmZmVycygiNjFLIDcxRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbNDAsODEpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgQWRqYWNlbnROZXdDb2RlZEZyYW1lR3JvdXBDb250aW51YXRpb25fTm9HYXBDcmVhdGVkUHJlZml4UmVtb3ZlZCkgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwIDIwSyAzMCA0MEsgNTBEMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDYwKSB9Iik7Ci0KLSAgUmVtb3ZlSW5NcygwLCAzNSwgNjApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzQwLDYwKSB9Iik7Ci0KLSAgLy8gQ29udGludWUgYXBwZW5kaW5nLCB3aXRoIGEgbmV3IGNvZGVkIGZyYW1lIGdyb3VwLCBhbGJlaXQgd2l0aAotICAvLyBhIHRpbnkgKDFtcykgZ2FwLiBUaGlzIGdhcCBzaG91bGQgKk5PVCogcHJvZHVjZSBhIGJ1ZmZlcmVkIHJhbmdlIGdhcC4KLSAgLy8gVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgInByZS1yZWxheGF0aW9uIiBiZWhhdmlvciwgd2hlcmUgYSBuZXcgIm1lZGlhCi0gIC8vIHNlZ21lbnQiIChub3cgYSBuZXcgImNvZGVkIGZyYW1lIGdyb3VwIikgd2FzIHNpZ25hbGVkIGF0IGV2ZXJ5IG1lZGlhCi0gIC8vIHNlZ21lbnQgYm91bmRhcnkuCi0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiNjFLIDcxRDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbNDAsODEpIH0iKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3RhcnRDb2RlZEZyYW1lR3JvdXBfUmVtb3ZlVGhlbkFwcGVuZE1vcmVNdWNoTGF0ZXIpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIxMDAwSyAxMDEwIDEwMjAgMTAzMEsgMTA0MCAxMDUwIDEwNjBLIDEwNzAgMTA4MCIpOwotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwIDIwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgWzEwMDAsMTA5MCkgfSIpOwotCi0gIFNpZ25hbFN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwNzApKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDMwKSBbMTAwMCwxMDkwKSB9Iik7Ci0KLSAgUmVtb3ZlSW5NcygxMDMwLCAxMDUwLCAxMDkwKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDMwKSBbMTAwMCwxMDMwKSBbMTA2MCwxMDkwKSB9Iik7Ci0KLSAgLy8gV2UndmUgc2lnbmFsbGVkIHRoYXQgd2UncmUgYWJvdXQgdG8gZG8gc29tZSBhcHBlbmRzIHRvIGEgY29kZWQgZnJhbWUgZ3JvdXAKLSAgLy8gd2hpY2ggc3RhcnRzIGF0IHRpbWUgMTA3MG1zLiBOb3RlIHRoYXQgdGhlIGZpcnN0IGZyYW1lLCBpZiBhbnkgZXZlciwKLSAgLy8gYXBwZW5kZWQgdG8gdGhpcyBTb3VyY2VCdWZmZXJTdHJlYW0gZm9yIHRoYXQgY29kZWQgZnJhbWUgZ3JvdXAgbXVzdCBoYXZlIGEKLSAgLy8gZGVjb2RlIHRpbWVzdGFtcCA+PSAxMDcwbXMgKGl0IGNhbiBiZSBzaWduaWZpY2FudGx5IGluIHRoZSBmdXR1cmUpLgotICAvLyBSZWdhcmRsZXNzLCB0aGF0IGFwcGVuZGVkIGZyYW1lIG11c3QgYmUgYnVmZmVyZWQgaW50byB0aGUgc2FtZSBleGlzdGluZwotICAvLyByYW5nZSBhcyBjdXJyZW50IFsxMDYwLDEwOTApLCBzaW5jZSB0aGUgbmV3IGNvZGVkIGZyYW1lIGdyb3VwJ3Mgc3RhcnQgb2YKLSAgLy8gMTA3MG1zIGlzIHdpdGhpbiB0aGF0IHJhbmdlLgotICBBcHBlbmRCdWZmZXJzKCIyMDAwSyAyMDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgWzEwMDAsMTAzMCkgWzEwNjAsMjAyMCkgfSIpOwotICBTZWVrVG9UaW1lc3RhbXBNcygxMDYwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjEwNjBLIDIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3RhcnRDb2RlZEZyYW1lR3JvdXBfSW5FeGlzdGluZ19BcHBlbmRNdWNoTGF0ZXIpIHsKLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAxMCAyMCAzMEsgNDAgNTAiKTsKLSAgU2lnbmFsU3RhcnRPZkNvZGVkRnJhbWVHcm91cChiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoNDUpKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDYwKSB9Iik7Ci0KLSAgQXBwZW5kQnVmZmVycygiMjAwMEsgMjAxMCIpOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsMjAyMCkgfSIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMTAgMjAgMzBLIDQwIDIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3RhcnRDb2RlZEZyYW1lR3JvdXBfSW5FeGlzdGluZ19SZW1vdmVHT1BfVGhlbkFwcGVuZF8xKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMTAgMjAgMzBLIDQwIDUwIik7Ci0gIFNpZ25hbFN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDMwKSk7Ci0gIFJlbW92ZUluTXMoMzAsIDYwLCA2MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgfSIpOwotCi0gIEFwcGVuZEJ1ZmZlcnMoIjIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDIwMjApIH0iKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDEwIDIwIDIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3RhcnRDb2RlZEZyYW1lR3JvdXBfSW5FeGlzdGluZ19SZW1vdmVHT1BfVGhlbkFwcGVuZF8yKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMTAgMjAgMzBLIDQwIDUwIik7Ci0gIFNpZ25hbFN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDQ1KSk7Ci0gIFJlbW92ZUluTXMoMzAsIDYwLCA2MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwzMCkgfSIpOwotCi0gIEFwcGVuZEJ1ZmZlcnMoIjIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDMwKSBbNDUsMjAyMCkgfSIpOwotICBTZWVrKDApOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMEsgMTAgMjAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLSAgU2Vla1RvVGltZXN0YW1wTXMoNDUpOwotICBDaGVja0V4cGVjdGVkQnVmZmVycygiMjAwMEsgMjAxMCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotICBTZWVrVG9UaW1lc3RhbXBNcygxMDAwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tOb05leHRCdWZmZXIoKTsKLX0KLQotVEVTVF9GKFNvdXJjZUJ1ZmZlclN0cmVhbVRlc3QsCi0gICAgICAgU3RhcnRDb2RlZEZyYW1lR3JvdXBfSW5FeGlzdGluZ19SZW1vdmVNb3N0UmVjZW50QXBwZW5kX1RoZW5BcHBlbmRfMSkgewotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwIDIwIDMwSyA0MCA1MCIpOwotICBTaWduYWxTdGFydE9mQ29kZWRGcmFtZUdyb3VwKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg0NSkpOwotICBSZW1vdmVJbk1zKDUwLCA2MCwgNjApOwotICBDaGVja0V4cGVjdGVkUmFuZ2VzQnlUaW1lc3RhbXAoInsgWzAsNTApIH0iKTsKLQotICBBcHBlbmRCdWZmZXJzKCIyMDAwSyAyMDEwIik7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCwyMDIwKSB9Iik7Ci0gIFNlZWsoMCk7Ci0gIENoZWNrRXhwZWN0ZWRCdWZmZXJzKCIwSyAxMCAyMCAzMEsgNDAgMjAwMEsgMjAxMCIpOwotICBDaGVja05vTmV4dEJ1ZmZlcigpOwotfQotCi1URVNUX0YoU291cmNlQnVmZmVyU3RyZWFtVGVzdCwKLSAgICAgICBTdGFydENvZGVkRnJhbWVHcm91cF9JbkV4aXN0aW5nX1JlbW92ZU1vc3RSZWNlbnRBcHBlbmRfVGhlbkFwcGVuZF8yKSB7Ci0gIE5ld0NvZGVkRnJhbWVHcm91cEFwcGVuZCgiMEsgMTAgMjAgMzBLIDQwIDUwIik7Ci0gIFNpZ25hbFN0YXJ0T2ZDb2RlZEZyYW1lR3JvdXAoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDUwKSk7Ci0gIFJlbW92ZUluTXMoNTAsIDYwLCA2MCk7Ci0gIENoZWNrRXhwZWN0ZWRSYW5nZXNCeVRpbWVzdGFtcCgieyBbMCw1MCkgfSIpOwotCi0gIEFwcGVuZEJ1ZmZlcnMoIjIwMDBLIDIwMTAiKTsKLSAgQ2hlY2tFeHBlY3RlZFJhbmdlc0J5VGltZXN0YW1wKCJ7IFswLDIwMjApIH0iKTsKLSAgU2VlaygwKTsKLSAgQ2hlY2tFeHBlY3RlZEJ1ZmZlcnMoIjBLIDEwIDIwIDMwSyA0MCAyMDAwSyAyMDEwIik7Ci0gIENoZWNrTm9OZXh0QnVmZmVyKCk7Ci19Ci0KLVRFU1RfRihTb3VyY2VCdWZmZXJTdHJlYW1UZXN0LCBHZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKSB7Ci0gIC8vIFRPRE8od29sZW5ldHopOiBBZGQgY292ZXJhZ2UgZm9yIHdoZW4gRFRTICE9IFBUUyBvbmNlCi0gIC8vIGh0dHBzOi8vY3JidWcuY29tLzM5ODEzMCBpcyBmaXhlZC4KLQotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhKCksIHN0cmVhbV8tPkdldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAoKSk7Ci0KLSAgTmV3Q29kZWRGcmFtZUdyb3VwQXBwZW5kKCIwSyAxMEsiKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMCksCi0gICAgICAgICAgICBzdHJlYW1fLT5HZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkpOwotCi0gIFJlbW92ZUluTXMoMCwgMTAsIDIwKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMCksCi0gICAgICAgICAgICBzdHJlYW1fLT5HZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkpOwotCi0gIFJlbW92ZUluTXMoMTAsIDIwLCAyMCk7Ci0gIEVYUEVDVF9FUShiYXNlOjpUaW1lRGVsdGEoKSwgc3RyZWFtXy0+R2V0SGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCgpKTsKLQotICBOZXdDb2RlZEZyYW1lR3JvdXBBcHBlbmQoIjBLIDEwSyIpOwotICBFWFBFQ1RfRVEoYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKDEwKSwKLSAgICAgICAgICAgIHN0cmVhbV8tPkdldEhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAoKSk7Ci0KLSAgUmVtb3ZlSW5NcygxMCwgMjAsIDIwKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YSgpLCBzdHJlYW1fLT5HZXRIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKCkpOwotfQotCi0vLyBUT0RPKHZyayk6IEFkZCB1bml0IHRlc3RzIHdoZXJlIGtleWZyYW1lcyBhcmUgdW5hbGlnbmVkIGJldHdlZW4gc3RyZWFtcy4KLS8vIChjcmJ1Zy5jb20vMTMzNTU3KQotCi0vLyBUT0RPKHZyayk6IEFkZCB1bml0IHRlc3RzIHdpdGggZW5kIG9mIHN0cmVhbSBiZWluZyBjYWxsZWQgYXQgaW50ZXJlc3RpbmcKLS8vIHRpbWVzLgotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRiZWNlMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zdHJlYW1fcGFyc2VyX2ZhY3RvcnkuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNldD4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY29tbWFuZF9saW5lLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXRyaWNzL2hpc3RvZ3JhbS5oIgotI2luY2x1ZGUgImJhc2UvbWV0cmljcy9oaXN0b2dyYW1fbWFjcm9zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3BhdHRlcm4uaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfc3BsaXQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJidWlsZC9idWlsZF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaCIKLQotI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hbmRyb2lkL21lZGlhX2NvZGVjX3V0aWwuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2VzX2Rlc2NyaXB0b3IuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi10eXBlZGVmIGJvb2wgKCpDb2RlY0lEVmFsaWRhdG9yRnVuY3Rpb24pKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY3NfaWQsIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotCi1zdHJ1Y3QgQ29kZWNJbmZvIHsKLSAgZW51bSBUeXBlIHsgVU5LTk9XTiwgQVVESU8sIFZJREVPIH07Ci0KLSAgLy8gVXBkYXRlIHRvb2xzL21ldHJpY3MvaGlzdG9ncmFtcy9oaXN0b2dyYW1zLnhtbCBpZiBuZXcgdmFsdWVzIGFyZSBhZGRlZC4KLSAgZW51bSBIaXN0b2dyYW1UYWcgewotICAgIEhJU1RPR1JBTV9VTktOT1dOLAotICAgIEhJU1RPR1JBTV9WUDgsCi0gICAgSElTVE9HUkFNX1ZQOSwKLSAgICBISVNUT0dSQU1fVk9SQklTLAotICAgIEhJU1RPR1JBTV9IMjY0LAotICAgIEhJU1RPR1JBTV9NUEVHMkFBQywKLSAgICBISVNUT0dSQU1fTVBFRzRBQUMsCi0gICAgSElTVE9HUkFNX0VBQzMsCi0gICAgSElTVE9HUkFNX01QMywKLSAgICBISVNUT0dSQU1fT1BVUywKLSAgICBISVNUT0dSQU1fSEVWQywKLSAgICBISVNUT0dSQU1fQUMzLAotICAgIEhJU1RPR1JBTV9BVjEsCi0gICAgSElTVE9HUkFNX01BWCA9IEhJU1RPR1JBTV9BVjEgIC8vIE11c3QgYmUgZXF1YWwgdG8gbGFyZ2VzdCBsb2dnZWQgZW50cnkuCi0gIH07Ci0KLSAgY29uc3QgY2hhciogcGF0dGVybjsKLSAgVHlwZSB0eXBlOwotICBDb2RlY0lEVmFsaWRhdG9yRnVuY3Rpb24gdmFsaWRhdG9yOwotICBIaXN0b2dyYW1UYWcgdGFnOwotfTsKLQotdHlwZWRlZiBTdHJlYW1QYXJzZXIqICgqUGFyc2VyRmFjdG9yeUZ1bmN0aW9uKSgKLSAgICBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7Ci0KLXN0cnVjdCBTdXBwb3J0ZWRUeXBlSW5mbyB7Ci0gIGNvbnN0IGNoYXIqIHR5cGU7Ci0gIGNvbnN0IFBhcnNlckZhY3RvcnlGdW5jdGlvbiBmYWN0b3J5X2Z1bmN0aW9uOwotICBjb25zdCBDb2RlY0luZm8qKiBjb2RlY3M7Ci19OwotCi1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtWUDA5Q29kZWNJbmZvID0geyJ2cDA5LioiLCBDb2RlY0luZm86OlZJREVPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9WUDl9Owotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrVlA4Q29kZWNJbmZvID0geyJ2cDgiLCBDb2RlY0luZm86OlZJREVPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX1ZQOH07Ci1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtWUDlDb2RlY0luZm8gPSB7InZwOSoiLCBDb2RlY0luZm86OlZJREVPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX1ZQOX07Ci1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtWb3JiaXNDb2RlY0luZm8gPSB7InZvcmJpcyIsIENvZGVjSW5mbzo6QVVESU8sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWNJbmZvOjpISVNUT0dSQU1fVk9SQklTfTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga09wdXNDb2RlY0luZm8gPSB7Im9wdXMiLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9PUFVTfTsKLS8vIE5vdGU6IFZhbGlkYXRpb24gb2YgdGhlIGNvZGVjIHN0cmluZyBpcyBoYW5kbGVkIGJ5IHRoZSBjYWxsZXIuCi1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtBVjFDb2RlY0luZm8gPSB7ImF2MDEuKiIsIENvZGVjSW5mbzo6VklERU8sIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWNJbmZvOjpISVNUT0dSQU1fQVYxfTsKLQotc3RhdGljIGNvbnN0IENvZGVjSW5mbyoga1ZpZGVvV2ViTUNvZGVjc1tdID0geyZrVlAwOUNvZGVjSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma1ZQOENvZGVjSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma1ZQOUNvZGVjSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma1ZvcmJpc0NvZGVjSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma09wdXNDb2RlY0luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtBVjFDb2RlY0luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTH07Ci0KLXN0YXRpYyBjb25zdCBDb2RlY0luZm8qIGtBdWRpb1dlYk1Db2RlY3NbXSA9IHsma1ZvcmJpc0NvZGVjSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma09wdXNDb2RlY0luZm8sIE5VTEx9OwotCi1zdGF0aWMgU3RyZWFtUGFyc2VyKiBCdWlsZFdlYk1QYXJzZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgcmV0dXJuIG5ldyBXZWJNU3RyZWFtUGFyc2VyKGJ1ZmZlcl9hbGxvY2F0b3IpOwotfQotCi0vLyBBQUMgT2JqZWN0IFR5cGUgSURzIHRoYXQgQ2hyb21lIHN1cHBvcnRzLgotc3RhdGljIGNvbnN0IGludCBrQUFDTENPYmplY3RUeXBlID0gMjsKLXN0YXRpYyBjb25zdCBpbnQga0FBQ1NCUk9iamVjdFR5cGUgPSA1Owotc3RhdGljIGNvbnN0IGludCBrQUFDUFNPYmplY3RUeXBlID0gMjk7Ci0KLXN0YXRpYyBpbnQgR2V0TVA0QXVkaW9PYmplY3RUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgLy8gRnJvbSBSRkMgNjM4MSBzZWN0aW9uIDMuMyAoSVNPIEJhc2UgTWVkaWEgRmlsZSBGb3JtYXQgTmFtZSBTcGFjZSk6Ci0gIC8vIFdoZW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBbJ2NvZGVjcycgcGFyYW1ldGVyIHZhbHVlXSBpcyAnbXA0YScgLi4uLAotICAvLyB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgYSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgTVA0IFJlZ2lzdHJhdGlvbgotICAvLyBBdXRob3JpdHkgT2JqZWN0VHlwZUluZGljYXRpb24gKE9USSkuIE5vdGUgdGhhdCBNUDRSQSB1c2VzIGEgbGVhZGluZyAiMHgiCi0gIC8vIHdpdGggdGhlc2UgdmFsdWVzLCB3aGljaCBpcyBvbWl0dGVkIGhlcmUgYW5kIGhlbmNlIGltcGxpZWQuCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnMgPSBiYXNlOjpTcGxpdFN0cmluZygKLSAgICAgIGNvZGVjX2lkLCBzdGQ6OnN0cmluZygiLiIpLCBiYXNlOjpUUklNX1dISVRFU1BBQ0UsIGJhc2U6OlNQTElUX1dBTlRfQUxMKTsKLSAgaWYgKHRva2Vucy5zaXplKCkgPT0gMyAmJiB0b2tlbnNbMF0gPT0gIm1wNGEiICYmIHRva2Vuc1sxXSA9PSAiNDAiKSB7Ci0gICAgLy8gRnJvbSBSRkMgNjM4MSBzZWN0aW9uIDMuMzoKLSAgICAvLyBPbmUgb2YgdGhlIE9USSB2YWx1ZXMgZm9yICdtcDRhJyBpcyA0MCAoaWRlbnRpZnlpbmcgTVBFRy00IGF1ZGlvKS4gRm9yCi0gICAgLy8gdGhpcyB2YWx1ZSwgdGhlIHRoaXJkIGVsZW1lbnQgaWRlbnRpZmllcyB0aGUgYXVkaW8gT2JqZWN0VHlwZUluZGljYXRpb24KLSAgICAvLyAoT1RJKSAuLi4gZXhwcmVzc2VkIGFzIGEgZGVjaW1hbCBudW1iZXIuCi0gICAgaW50IGF1ZGlvX29iamVjdF90eXBlOwotICAgIGlmIChiYXNlOjpTdHJpbmdUb0ludCh0b2tlbnNbMl0sICZhdWRpb19vYmplY3RfdHlwZSkpCi0gICAgICByZXR1cm4gYXVkaW9fb2JqZWN0X3R5cGU7Ci0gIH0KLQotICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZykKLSAgICAgIDw8ICJNYWxmb3JtZWQgbWltZXR5cGUgY29kZWMgJyIgPDwgY29kZWNfaWQgPDwgIiciOwotICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgVmFsaWRhdGVNUDRBQ29kZWNJRChjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBpbnQgYXVkaW9fb2JqZWN0X3R5cGUgPSBHZXRNUDRBdWRpb09iamVjdFR5cGUoY29kZWNfaWQsIG1lZGlhX2xvZyk7Ci0gIGlmIChhdWRpb19vYmplY3RfdHlwZSA9PSBrQUFDTENPYmplY3RUeXBlIHx8Ci0gICAgICBhdWRpb19vYmplY3RfdHlwZSA9PSBrQUFDU0JST2JqZWN0VHlwZSB8fAotICAgICAgYXVkaW9fb2JqZWN0X3R5cGUgPT0ga0FBQ1BTT2JqZWN0VHlwZSkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgTUVESUFfTE9HKERFQlVHLCBtZWRpYV9sb2cpCi0gICAgICA8PCAiVW5zdXBwb3J0ZWQgYXVkaW8gb2JqZWN0IHR5cGUgIiA8PCBhdWRpb19vYmplY3RfdHlwZSA8PCAiIGluIGNvZGVjICciCi0gICAgICA8PCBjb2RlY19pZCA8PCAiJyI7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrSDI2NEFWQzFDb2RlY0luZm8gPSB7ImF2YzEuKiIsIENvZGVjSW5mbzo6VklERU8sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9IMjY0fTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga0gyNjRBVkMzQ29kZWNJbmZvID0geyJhdmMzLioiLCBDb2RlY0luZm86OlZJREVPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWNJbmZvOjpISVNUT0dSQU1fSDI2NH07Ci1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtIRVZDSEVWMUNvZGVjSW5mbyA9IHsiaGV2MS4qIiwgQ29kZWNJbmZvOjpWSURFTywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX0hFVkN9Owotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrSEVWQ0hWQzFDb2RlY0luZm8gPSB7Imh2YzEuKiIsIENvZGVjSW5mbzo6VklERU8sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9IRVZDfTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga01QRUc0VlAwOUNvZGVjSW5mbyA9IHsidnAwOS4qIiwgQ29kZWNJbmZvOjpWSURFTywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9WUDl9Owotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrTVBFRzRBQUNDb2RlY0luZm8gPSB7Im1wNGEuNDAuKiIsIENvZGVjSW5mbzo6QVVESU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVmFsaWRhdGVNUDRBQ29kZWNJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX01QRUc0QUFDfTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga01QRUcyQUFDTENDb2RlY0luZm8gPSB7Ci0gICAgIm1wNGEuNjciLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLCBDb2RlY0luZm86OkhJU1RPR1JBTV9NUEVHMkFBQ307Ci0vLyBUaGUgJ2FjLTMnIGFuZCAnZWMtMycgYXJlIG1pbWUgY29kZWMgaWRzIGZvciBBQzMgYW5kIEVBQzMgYWNjb3JkaW5nIHRvCi0vLyBodHRwOi8vd3d3Lm1wNHJhLm9yZy9jb2RlY3MuaHRtbAotLy8gVGhlIG9iamVjdCB0eXBlcyBmb3IgQUMzIGFuZCBFQUMzIGluIE1QNCBjb250YWluZXIgYXJlIDB4YTUgYW5kIDB4YTYsIHNvCi0vLyBhY2NvcmRpbmcgdG8gUkZDIDYzODEgdGhpcyBjb3JyZXNwb25kcyB0byBjb2RlYyBpZHMgJ21wNGEuQTUnIGFuZCAnbXA0YS5BNicuCi0vLyBDb2RlYyBpZHMgd2l0aCBsb3dlciBjYXNlIG90aSAobXA0YS5hNSBhbmQgbXA0YS5hNikgYXJlIHN1cHBvcnRlZCBmb3IKLS8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtBQzNDb2RlY0luZm8xID0geyJhYy0zIiwgQ29kZWNJbmZvOjpBVURJTywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWNJbmZvOjpISVNUT0dSQU1fQUMzfTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga0FDM0NvZGVjSW5mbzIgPSB7Im1wNGEuYTUiLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9BQzN9Owotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrQUMzQ29kZWNJbmZvMyA9IHsibXA0YS5BNSIsIENvZGVjSW5mbzo6QVVESU8sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX0FDM307Ci1zdGF0aWMgY29uc3QgQ29kZWNJbmZvIGtFQUMzQ29kZWNJbmZvMSA9IHsiZWMtMyIsIENvZGVjSW5mbzo6QVVESU8sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9FQUMzfTsKLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga0VBQzNDb2RlY0luZm8yID0geyJtcDRhLmE2IiwgQ29kZWNJbmZvOjpBVURJTywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX0VBQzN9Owotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrRUFDM0NvZGVjSW5mbzMgPSB7Im1wNGEuQTYiLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWNJbmZvOjpISVNUT0dSQU1fRUFDM307Ci0KLXN0YXRpYyBjb25zdCBDb2RlY0luZm8qIGtWaWRlb01QNENvZGVjc1tdID0gewotICAgICZrSDI2NEFWQzFDb2RlY0luZm8sICAgJmtIMjY0QVZDM0NvZGVjSW5mbywgICZrSEVWQ0hFVjFDb2RlY0luZm8sCi0gICAgJmtIRVZDSFZDMUNvZGVjSW5mbywgICAma01QRUc0VlAwOUNvZGVjSW5mbywgJmtNUEVHNEFBQ0NvZGVjSW5mbywKLSAgICAma01QRUcyQUFDTENDb2RlY0luZm8sICZrQVYxQ29kZWNJbmZvLCAgICAgICBOVUxMfTsKLQotc3RhdGljIGNvbnN0IENvZGVjSW5mbyoga0F1ZGlvTVA0Q29kZWNzW10gPSB7Ci0gICAgJmtNUEVHNEFBQ0NvZGVjSW5mbywgJmtNUEVHMkFBQ0xDQ29kZWNJbmZvLCAma0FDM0NvZGVjSW5mbzEsCi0gICAgJmtBQzNDb2RlY0luZm8yLCAgICAgJmtBQzNDb2RlY0luZm8zLCAgICAgICAma0VBQzNDb2RlY0luZm8xLAotICAgICZrRUFDM0NvZGVjSW5mbzIsICAgICZrRUFDM0NvZGVjSW5mbzMsICAgICAgTlVMTH07Ci0KLXN0YXRpYyBTdHJlYW1QYXJzZXIqIEJ1aWxkTVA0UGFyc2VyKERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBzdGQ6OnNldDxpbnQ+IGF1ZGlvX29iamVjdF90eXBlczsKLQotICBib29sIGhhc19zYnIgPSBmYWxzZTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlY3Muc2l6ZSgpOyArK2kpIHsKLSAgICBzdGQ6OnN0cmluZyBjb2RlY19pZCA9IGNvZGVjc1tpXTsKLSAgICBpZiAoYmFzZTo6TWF0Y2hQYXR0ZXJuKGNvZGVjX2lkLCBrTVBFRzJBQUNMQ0NvZGVjSW5mby5wYXR0ZXJuKSkgewotICAgICAgYXVkaW9fb2JqZWN0X3R5cGVzLmluc2VydChtcDQ6OmtJU09fMTM4MThfN19BQUNfTEMpOwotICAgIH0gZWxzZSBpZiAoYmFzZTo6TWF0Y2hQYXR0ZXJuKGNvZGVjX2lkLCBrTVBFRzRBQUNDb2RlY0luZm8ucGF0dGVybikpIHsKLSAgICAgIGludCBhdWRpb19vYmplY3RfdHlwZSA9IEdldE1QNEF1ZGlvT2JqZWN0VHlwZShjb2RlY19pZCwgbWVkaWFfbG9nKTsKLSAgICAgIERDSEVDS19HVChhdWRpb19vYmplY3RfdHlwZSwgMCk7Ci0KLSAgICAgIGF1ZGlvX29iamVjdF90eXBlcy5pbnNlcnQobXA0OjprSVNPXzE0NDk2XzMpOwotCi0gICAgICBpZiAoYXVkaW9fb2JqZWN0X3R5cGUgPT0ga0FBQ1NCUk9iamVjdFR5cGUgfHwKLSAgICAgICAgICBhdWRpb19vYmplY3RfdHlwZSA9PSBrQUFDUFNPYmplY3RUeXBlKSB7Ci0gICAgICAgIGhhc19zYnIgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGJhc2U6Ok1hdGNoUGF0dGVybihjb2RlY19pZCwga0FDM0NvZGVjSW5mbzEucGF0dGVybikgfHwKLSAgICAgICAgICAgICAgIGJhc2U6Ok1hdGNoUGF0dGVybihjb2RlY19pZCwga0FDM0NvZGVjSW5mbzIucGF0dGVybikgfHwKLSAgICAgICAgICAgICAgIGJhc2U6Ok1hdGNoUGF0dGVybihjb2RlY19pZCwga0FDM0NvZGVjSW5mbzMucGF0dGVybikpIHsKLSAgICAgIGF1ZGlvX29iamVjdF90eXBlcy5pbnNlcnQobXA0OjprQUMzKTsKLSAgICB9IGVsc2UgaWYgKGJhc2U6Ok1hdGNoUGF0dGVybihjb2RlY19pZCwga0VBQzNDb2RlY0luZm8xLnBhdHRlcm4pIHx8Ci0gICAgICAgICAgICAgICBiYXNlOjpNYXRjaFBhdHRlcm4oY29kZWNfaWQsIGtFQUMzQ29kZWNJbmZvMi5wYXR0ZXJuKSB8fAotICAgICAgICAgICAgICAgYmFzZTo6TWF0Y2hQYXR0ZXJuKGNvZGVjX2lkLCBrRUFDM0NvZGVjSW5mbzMucGF0dGVybikpIHsKLSAgICAgIGF1ZGlvX29iamVjdF90eXBlcy5pbnNlcnQobXA0OjprRUFDMyk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG5ldyBtcDQ6Ok1QNFN0cmVhbVBhcnNlcihidWZmZXJfYWxsb2NhdG9yLCBhdWRpb19vYmplY3RfdHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX3Nicik7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2RlY0luZm8ga01QM0NvZGVjSW5mbyA9IHtOVUxMLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVjSW5mbzo6SElTVE9HUkFNX01QM307Ci0KLXN0YXRpYyBjb25zdCBDb2RlY0luZm8qIGtBdWRpb01QM0NvZGVjc1tdID0geyZrTVAzQ29kZWNJbmZvLCBOVUxMfTsKLQotc3RhdGljIFN0cmVhbVBhcnNlciogQnVpbGRNUDNQYXJzZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIHJldHVybiBuZXcgTVBFRzFBdWRpb1N0cmVhbVBhcnNlcihidWZmZXJfYWxsb2NhdG9yKTsKLX0KLQotc3RhdGljIGNvbnN0IENvZGVjSW5mbyBrQURUU0NvZGVjSW5mbyA9IHtOVUxMLCBDb2RlY0luZm86OkFVRElPLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9NUEVHNEFBQ307Ci1zdGF0aWMgY29uc3QgQ29kZWNJbmZvKiBrQXVkaW9BRFRTQ29kZWNzW10gPSB7JmtBRFRTQ29kZWNJbmZvLCBOVUxMfTsKLQotc3RhdGljIFN0cmVhbVBhcnNlciogQnVpbGRBRFRTUGFyc2VyKERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIHJldHVybiBuZXcgQURUU1N0cmVhbVBhcnNlcihidWZmZXJfYWxsb2NhdG9yKTsKLX0KLQotc3RhdGljIGNvbnN0IFN1cHBvcnRlZFR5cGVJbmZvIGtTdXBwb3J0ZWRUeXBlSW5mb1tdID0gewotICAgIHsidmlkZW8vd2VibSIsICZCdWlsZFdlYk1QYXJzZXIsIGtWaWRlb1dlYk1Db2RlY3N9LAotICAgIHsiYXVkaW8vd2VibSIsICZCdWlsZFdlYk1QYXJzZXIsIGtBdWRpb1dlYk1Db2RlY3N9LAotICAgIHsiYXVkaW8vYWFjIiwgJkJ1aWxkQURUU1BhcnNlciwga0F1ZGlvQURUU0NvZGVjc30sCi0gICAgeyJhdWRpby9tcGVnIiwgJkJ1aWxkTVAzUGFyc2VyLCBrQXVkaW9NUDNDb2RlY3N9LAotICAgIHsidmlkZW8vbXA0IiwgJkJ1aWxkTVA0UGFyc2VyLCBrVmlkZW9NUDRDb2RlY3N9LAotICAgIHsiYXVkaW8vbXA0IiwgJkJ1aWxkTVA0UGFyc2VyLCBrQXVkaW9NUDRDb2RlY3N9LAotfTsKLQotLy8gVmVyaWZ5IHRoYXQgfGNvZGVjX2luZm98IGlzIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB8Y29kZWNfaW5mb3wgaXMgYSB2YWxpZCBhdWRpby92aWRlbyBjb2RlYyBhbmQgaXMgYWxsb3dlZC4KLS8vIHxhdWRpb19jb2RlY3N8IGhhcyB8Y29kZWNfaW5mb3wudGFnIGFkZGVkIHRvIGl0cyBsaXN0IGlmIHxjb2RlY19pbmZvfCBpcyBhbgotLy8gYXVkaW8gY29kZWMuIHxhdWRpb19jb2RlY3N8IG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIG5vdCB1cGRhdGVkLgotLy8gfHZpZGVvX2NvZGVjc3wgaGFzIHxjb2RlY19pbmZvfC50YWcgYWRkZWQgdG8gaXRzIGxpc3QgaWYgfGNvZGVjX2luZm98IGlzIGEKLS8vIHZpZGVvIGNvZGVjLiB8dmlkZW9fY29kZWNzfCBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBub3QgdXBkYXRlZC4KLS8vCi0vLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZSwgYW5kIHxhdWRpb19jb2RlY3N8IGFuZCB8dmlkZW9fY29kZWNzfCBub3QgdG91Y2hlZC4KLXN0YXRpYyBib29sIFZlcmlmeUNvZGVjKGNvbnN0IENvZGVjSW5mbyogY29kZWNfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPENvZGVjSW5mbzo6SGlzdG9ncmFtVGFnPiogYXVkaW9fY29kZWNzLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Q29kZWNJbmZvOjpIaXN0b2dyYW1UYWc+KiB2aWRlb19jb2RlY3MpIHsKLSAgc3dpdGNoIChjb2RlY19pbmZvLT50eXBlKSB7Ci0gICAgY2FzZSBDb2RlY0luZm86OkFVRElPOgotICAgICAgaWYgKGF1ZGlvX2NvZGVjcykgYXVkaW9fY29kZWNzLT5wdXNoX2JhY2soY29kZWNfaW5mby0+dGFnKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ29kZWNJbmZvOjpWSURFTzoKLSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCi0gICAgICAvLyBUT0RPKHdvbGVuZXR6LCBkYWxlY3VydGlzKTogVGhpcyBzaG91bGQgaW5zdGVhZCB1c2UgTWltZVV0aWwoKSB0byBhdm9pZAotICAgICAgLy8gZHVwbGljYXRpb24gb2Ygc3VidGxlIEFuZHJvaWQgYmVoYXZpb3IuICBodHRwOi8vY3JidWcuY29tLzU4NzMwMy4KLSAgICAgIGlmIChjb2RlY19pbmZvLT50YWcgPT0gQ29kZWNJbmZvOjpISVNUT0dSQU1fSDI2NCAmJgotICAgICAgICAgICFtZWRpYTo6SGFzUGxhdGZvcm1EZWNvZGVyU3VwcG9ydCgpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSNlbmRpZgotICAgICAgaWYgKHZpZGVvX2NvZGVjcykgdmlkZW9fY29kZWNzLT5wdXNoX2JhY2soY29kZWNfaW5mby0+dGFnKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ29kZWNJbmZvOjpVTktOT1dOOgotICAgICAgYnJlYWs7Ci0gIH0KLSAgLy8gTm90IGF1ZGlvIG9yIHZpZGVvLCBzbyBza2lwIGl0LgotICBEVkxPRygxKSA8PCAiQ29kZWNJbmZvIHR5cGUgb2YgIiA8PCBjb2RlY19pbmZvLT50eXBlCi0gICAgICAgICAgIDw8ICIgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4gYSBTdXBwb3J0ZWRUeXBlcyBsaXN0IjsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBDaGVja3MgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgfHR5cGV8IGFuZCB8Y29kZWNzfCBsaXN0IGFyZSBzdXBwb3J0ZWQuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlmIHx0eXBlfCBhbmQgYWxsIGNvZGVjcyBsaXN0ZWQgaW4gfGNvZGVjc3wgYXJlIHN1cHBvcnRlZC4KLS8vIHxmYWN0b3J5X2Z1bmN0aW9ufCBjb250YWlucyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJ1aWxkIGEgU3RyZWFtUGFyc2VyIGZvciB0aGlzCi0vLyB0eXBlLiBWYWx1ZSBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBub3QgdG91Y2hlZC4KLS8vIHxhdWRpb19jb2RlY3N8IGlzIHVwZGF0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSGlzdG9ncmFtVGFncyBmb3IgbWF0Y2hpbmcKLS8vIGF1ZGlvIGNvZGVjcyBzcGVjaWZpZWQgaW4gfGNvZGVjc3wuIFZhbHVlIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzCi0vLyBub3QgdG91Y2hlZC4KLS8vIHx2aWRlb19jb2RlY3N8IGlzIHVwZGF0ZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgSGlzdG9ncmFtVGFncyBmb3IgbWF0Y2hpbmcKLS8vIHZpZGVvIGNvZGVjcyBzcGVjaWZpZWQgaW4gfGNvZGVjc3wuIFZhbHVlIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzCi0vLyBub3QgdG91Y2hlZC4KLS8vCi0vLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4gVGhlIHZhbHVlcyBvZiB8ZmFjdG9yeV9mdW5jdGlvbnwsIHxhdWRpb19jb2RlY3N8LAotLy8gYW5kIHx2aWRlb19jb2RlY3N8IGFyZSB1bmRlZmluZWQuCi1zdGF0aWMgYm9vbCBDaGVja1R5cGVBbmRDb2RlY3MoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgY29kZWNzLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgUGFyc2VyRmFjdG9yeUZ1bmN0aW9uKiBmYWN0b3J5X2Z1bmN0aW9uLAotICAgIHN0ZDo6dmVjdG9yPENvZGVjSW5mbzo6SGlzdG9ncmFtVGFnPiogYXVkaW9fY29kZWNzLAotICAgIHN0ZDo6dmVjdG9yPENvZGVjSW5mbzo6SGlzdG9ncmFtVGFnPiogdmlkZW9fY29kZWNzKSB7Ci0gIC8vIFNlYXJjaCBmb3IgdGhlIFN1cHBvcnRlZFR5cGVJbmZvIGZvciB8dHlwZXwuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGtTdXBwb3J0ZWRUeXBlSW5mbyk7ICsraSkgewotICAgIGNvbnN0IFN1cHBvcnRlZFR5cGVJbmZvJiB0eXBlX2luZm8gPSBrU3VwcG9ydGVkVHlwZUluZm9baV07Ci0gICAgaWYgKHR5cGUgPT0gdHlwZV9pbmZvLnR5cGUpIHsKLSAgICAgIGlmIChjb2RlY3MuZW1wdHkoKSkgewotICAgICAgICBjb25zdCBDb2RlY0luZm8qIGNvZGVjX2luZm8gPSB0eXBlX2luZm8uY29kZWNzWzBdOwotICAgICAgICBpZiAoY29kZWNfaW5mbyAmJiAhY29kZWNfaW5mby0+cGF0dGVybiAmJgotICAgICAgICAgICAgVmVyaWZ5Q29kZWMoY29kZWNfaW5mbywgYXVkaW9fY29kZWNzLCB2aWRlb19jb2RlY3MpKSB7Ci0gICAgICAgICAgaWYgKGZhY3RvcnlfZnVuY3Rpb24pICpmYWN0b3J5X2Z1bmN0aW9uID0gdHlwZV9pbmZvLmZhY3RvcnlfZnVuY3Rpb247Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZykKLSAgICAgICAgICAgIDw8ICJBIGNvZGVjcyBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgJyIgPDwgdHlwZSA8PCAiJyI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLy8gTWFrZSBzdXJlIGFsbCB0aGUgY29kZWNzIHNwZWNpZmllZCBpbiB8Y29kZWNzfCBhcmUKLSAgICAgIC8vIGluIHRoZSBzdXBwb3J0ZWQgdHlwZSBpbmZvLgotICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjb2RlY3Muc2l6ZSgpOyArK2opIHsKLSAgICAgICAgLy8gU2VhcmNoIHRoZSB0eXBlIGluZm8gZm9yIGEgbWF0Y2guCi0gICAgICAgIGJvb2wgZm91bmRfY29kZWMgPSBmYWxzZTsKLSAgICAgICAgc3RkOjpzdHJpbmcgY29kZWNfaWQgPSBjb2RlY3Nbal07Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyB0eXBlX2luZm8uY29kZWNzW2tdOyArK2spIHsKLSAgICAgICAgICBpZiAoYmFzZTo6TWF0Y2hQYXR0ZXJuKGNvZGVjX2lkLCB0eXBlX2luZm8uY29kZWNzW2tdLT5wYXR0ZXJuKSAmJgotICAgICAgICAgICAgICAoIXR5cGVfaW5mby5jb2RlY3Nba10tPnZhbGlkYXRvciB8fAotICAgICAgICAgICAgICAgdHlwZV9pbmZvLmNvZGVjc1trXS0+dmFsaWRhdG9yKGNvZGVjX2lkLCBtZWRpYV9sb2cpKSkgewotICAgICAgICAgICAgZm91bmRfY29kZWMgPQotICAgICAgICAgICAgICAgIFZlcmlmeUNvZGVjKHR5cGVfaW5mby5jb2RlY3Nba10sIGF1ZGlvX2NvZGVjcywgdmlkZW9fY29kZWNzKTsKLSAgICAgICAgICAgIGJyZWFrOyAgLy8gU2luY2Ugb25seSAxIHBhdHRlcm4gd2lsbCBtYXRjaCwgbm8gbmVlZCB0byBjaGVjayBvdGhlcnMuCi0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZF9jb2RlYykgewotICAgICAgICAgIE1FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nKQotICAgICAgICAgICAgICA8PCAiQ29kZWMgJyIgPDwgY29kZWNfaWQgPDwgIicgaXMgbm90IHN1cHBvcnRlZCBmb3IgJyIgPDwgdHlwZQotICAgICAgICAgICAgICA8PCAiJyI7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmYWN0b3J5X2Z1bmN0aW9uKSAqZmFjdG9yeV9mdW5jdGlvbiA9IHR5cGVfaW5mby5mYWN0b3J5X2Z1bmN0aW9uOwotCi0gICAgICAvLyBBbGwgY29kZWNzIHdlcmUgc3VwcG9ydGVkIGJ5IHRoaXMgfHR5cGV8LgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLy8gfHR5cGV8IGRpZG4ndCBtYXRjaCBhbnkgb2YgdGhlIHN1cHBvcnRlZCB0eXBlcy4KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFN0cmVhbVBhcnNlckZhY3Rvcnk6OklzVHlwZVN1cHBvcnRlZCgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MpIHsKLSAgcmV0dXJuIENoZWNrVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MsIG5ldyBNZWRpYUxvZygpLCBOVUxMLCBOVUxMLCBOVUxMKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFN0cmVhbVBhcnNlcj4gU3RyZWFtUGFyc2VyRmFjdG9yeTo6Q3JlYXRlKAotICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBjb2RlY3MsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBEQ0hFQ0soYnVmZmVyX2FsbG9jYXRvcik7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFN0cmVhbVBhcnNlcj4gc3RyZWFtX3BhcnNlcjsKLSAgUGFyc2VyRmFjdG9yeUZ1bmN0aW9uIGZhY3RvcnlfZnVuY3Rpb247Ci0gIHN0ZDo6dmVjdG9yPENvZGVjSW5mbzo6SGlzdG9ncmFtVGFnPiBhdWRpb19jb2RlY3M7Ci0gIHN0ZDo6dmVjdG9yPENvZGVjSW5mbzo6SGlzdG9ncmFtVGFnPiB2aWRlb19jb2RlY3M7Ci0KLSAgaWYgKENoZWNrVHlwZUFuZENvZGVjcyh0eXBlLCBjb2RlY3MsIG1lZGlhX2xvZywgJmZhY3RvcnlfZnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmF1ZGlvX2NvZGVjcywgJnZpZGVvX2NvZGVjcykpIHsKLSAgICAvLyBMb2cgdGhlIG51bWJlciBvZiBjb2RlY3Mgc3BlY2lmaWVkLCBhcyB3ZWxsIGFzIHRoZSBkZXRhaWxzIG9uIGVhY2ggb25lLgotICAgIFVNQV9ISVNUT0dSQU1fQ09VTlRTXzEwMCgiTWVkaWEuTVNFLk51bWJlck9mVHJhY2tzIiwgY29kZWNzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb19jb2RlY3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgIFVNQV9ISVNUT0dSQU1fRU5VTUVSQVRJT04oIk1lZGlhLk1TRS5BdWRpb0NvZGVjIiwgYXVkaW9fY29kZWNzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9NQVggKyAxKTsKLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2aWRlb19jb2RlY3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgIFVNQV9ISVNUT0dSQU1fRU5VTUVSQVRJT04oIk1lZGlhLk1TRS5WaWRlb0NvZGVjIiwgdmlkZW9fY29kZWNzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlY0luZm86OkhJU1RPR1JBTV9NQVggKyAxKTsKLSAgICB9Ci0KLSAgICBzdHJlYW1fcGFyc2VyLnJlc2V0KGZhY3RvcnlfZnVuY3Rpb24oYnVmZmVyX2FsbG9jYXRvciwgY29kZWNzLCBtZWRpYV9sb2cpKTsKLSAgfQotCi0gIHJldHVybiBzdGQ6Om1vdmUoc3RyZWFtX3BhcnNlcik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvc3RyZWFtX3BhcnNlcl9mYWN0b3J5LmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy9zdHJlYW1fcGFyc2VyX2ZhY3RvcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg5NDg5Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy9zdHJlYW1fcGFyc2VyX2ZhY3RvcnkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfU1RSRUFNX1BBUlNFUl9GQUNUT1JZX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX1NUUkVBTV9QQVJTRVJfRkFDVE9SWV9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFN0cmVhbVBhcnNlcjsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFN0cmVhbVBhcnNlckZhY3RvcnkgewotIHB1YmxpYzoKLSAgLy8gQ2hlY2tzIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWVkIHx0eXBlfCBhbmQgfGNvZGVjc3wgbGlzdCBhcmUgc3VwcG9ydGVkLgotICAvLyBSZXR1cm5zIHRydWUgaWYgfHR5cGV8IGFuZCBhbGwgY29kZWNzIGxpc3RlZCBpbiB8Y29kZWNzfCBhcmUgc3VwcG9ydGVkLgotICBzdGF0aWMgYm9vbCBJc1R5cGVTdXBwb3J0ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcyk7Ci0KLSAgLy8gQ3JlYXRlcyBhIG5ldyBTdHJlYW1QYXJzZXIgb2JqZWN0IGlmIHRoZSBzcGVjaWZpZWQgfHR5cGV8IGFuZCB8Y29kZWNzfCBsaXN0Ci0gIC8vIGFyZSBzdXBwb3J0ZWQuIHxtZWRpYV9sb2d8IGNhbiBiZSB1c2VkIHRvIHJlcG9ydCBlcnJvcnMgaWYgdGhlcmUgaXMKLSAgLy8gc29tZXRoaW5nIHdyb25nIHdpdGggfHR5cGV8IG9yIHRoZSBjb2RlYyBJRHMgaW4gfGNvZGVjc3wuCi0gIC8vIFJldHVybnMgYSBuZXcgU3RyZWFtUGFyc2VyIG9iamVjdCBpZiB8dHlwZXwgYW5kIGFsbCBjb2RlY3MgbGlzdGVkIGluCi0gIC8vICAgfGNvZGVjc3wgYXJlIHN1cHBvcnRlZC4KLSAgLy8gUmV0dXJucyBOVUxMIG90aGVyd2lzZS4KLSAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTdHJlYW1QYXJzZXI+IENyZWF0ZSgKLSAgICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGNvZGVjcywKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfU1RSRUFNX1BBUlNFUl9GQUNUT1JZX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92aWRlb19jYWRlbmNlX2VzdGltYXRvci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTM3NDVmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjU4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvbWV0cmljcy9oaXN0b2dyYW0uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUbyBwcmV2ZW50IG9zY2lsbGF0aW9uIGluIGFuZCBvdXQgb2YgY2FkZW5jZSBvciBiZXR3ZWVuIGNhZGVuY2UgdmFsdWVzLCB3ZQotLy8gcmVxdWlyZSBzb21lIHRpbWUgdG8gZWxhcHNlIGJlZm9yZSBhIGNhZGVuY2Ugc3dpdGNoIGlzIGFjY2VwdGVkLgotY29uc3QgaW50IGtNaW5pbXVtQ2FkZW5jZUR1cmF0aW9uTXMgPSAxMDA7Ci0KLS8vIFRoZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBjdXJyZW50IHZpZGVvIGlzIHZhcmlhYmxlIEZQUyBvcgotLy8gY29uc3RhbnQgRlBTLiBJZiByYXRpbyBvZiB0aGUgc2FtcGxlIGRldmlhdGlvbiBhbmQgdGhlIHJlbmRlciBsZW5ndGggaXMKLS8vIGFib3ZlIHxrVmFyaWFibGVGUFNGYWN0b3J8LCB0aGVuIGl0IGlzIHJlY29nbml6ZWQgYXMgYSB2YXJpYWJsZSBGUFMsIGFuZCBpZgotLy8gdGhlIHJhdGlvIGlzIGJlbG93IHxrQ29uc3RhbnRGUFNGYWN0b3J8LCB0aGVuIGl0IGlzIHJlY29nbml6ZWQgYXMgYSBjb25zdGFudAotLy8gRlBTLCBhbmQgaWYgdGhlIHJhdGlvIGlzIGluIGJldHdlZW4gdGhlIHR3byBmYWN0b3JzLCB0aGVuIHdlIGRvIG5vdCBjaGFuZ2UKLS8vIHByZXZpb3VzIHJlY29nbml0aW9uLgotY29uc3QgZG91YmxlIGtWYXJpYWJsZUZQU0ZhY3RvciA9IDAuNTU7Ci1jb25zdCBkb3VibGUga0NvbnN0YW50RlBTRmFjdG9yID0gMC40NTsKLQotLy8gUmVjb3JkcyB0aGUgbnVtYmVyIG9mIGNhZGVuY2UgY2hhbmdlcyB0byBVTUEuCi1zdGF0aWMgdm9pZCBIaXN0b2dyYW1DYWRlbmNlQ2hhbmdlQ291bnQoaW50IGNhZGVuY2VfY2hhbmdlcykgewotICBjb25zdCBpbnQga0NhZGVuY2VDaGFuZ2VNYXggPSAxMDsKLSAgVU1BX0hJU1RPR1JBTV9DVVNUT01fQ09VTlRTKCJNZWRpYS5WaWRlb1JlbmRlcmVyLkNhZGVuY2VDaGFuZ2VzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGVuY2VfY2hhbmdlcywgMSwga0NhZGVuY2VDaGFuZ2VNYXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ2FkZW5jZUNoYW5nZU1heCk7Ci19Ci0KLS8vIENvbnN0cnVjdCBhIENhZGVuY2UgdmVjdG9yLCBhIHZlY3RvciBvZiBpbnRlZ2VycyBzYXRpc2Z5aW5nIHRoZSBmb2xsb3dpbmcKLS8vIGNvbmRpdGlvbnM6Ci0vLyAxLiBTaXplIGlzIHxufC4KLS8vIDIuIFN1bSBvZiBlbnRyaWVzIGlzIHxrfC4KLS8vIDMuIEVhY2ggZW50cnkgaXMgaW4ge3xrfC98bnwsIHxrfC98bnwgKyAxfS4KLS8vIDQuIERpc3RyaWJ1dGlvbiBvZiB8a3wvfG58IGFuZCB8a3wvfG58ICsgMSBpcyBhcyBldmVuIGFzIHBvc3NpYmxlLgotVmlkZW9DYWRlbmNlRXN0aW1hdG9yOjpDYWRlbmNlIENvbnN0cnVjdENhZGVuY2UoaW50IGssIGludCBuKSB7Ci0gIGNvbnN0IGludCBxdW90aWVudCA9IGsgLyBuOwotICBzdGQ6OnZlY3RvcjxpbnQ+IG91dHB1dChuLCAwKTsKLQotICAvLyBGaWxsIHRoZSB2ZWN0b3IgZW50cmllcyB3aXRoIHxxdW90aWVudHwgb3IgfHF1b3RpZW50ICsgMXwsIGFuZCBtYWtlIHN1cmUKLSAgLy8gdGhlIHR3byB2YWx1ZXMgYXJlIGRpc3RyaWJ1dGVkIGFzIGV2ZW5seSBhcyBwb3NzaWJsZS4KLSAgaW50IHRhcmdldF9hY2N1bXVsYXRlID0gMDsKLSAgaW50IGFjdHVhbF9hY2N1bXVsYXRlID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAvLyBBZnRlciBlYWNoIGxvb3AKLSAgICAvLyB0YXJnZXRfYWNjdW11bGF0ZSA9IChpICsgMSkgKiBrCi0gICAgLy8gYWN0dWFsX2FjY3VtdWxhdGUgPSBcc3VtX3tqID0gMH1eaSB7biAqIFZbal19IHdoZXJlIFYgaXMgb3V0cHV0IHZlY3RvcgotICAgIC8vIFdlIHdhbnQgdG8gbWFrZSBhY3R1YWxfYWNjdW11bGF0ZSBhcyBjbG9zZSB0byB0YXJnZXRfYWNjdW11bGF0ZSBhcwotICAgIC8vIHBvc3NpYmxlLgotICAgIC8vIE9uZSBleGNlcHRpb24gaXMgdGhhdCBpbiBjYXNlIGsgPCBuLCB3ZSBhbHdheXMgd2FudCB0aGUgdmVjdG9yIHRvIHN0YXJ0Ci0gICAgLy8gd2l0aCAxIHRvIG1ha2Ugc3VyZSB0aGUgZmlyc3QgZnJhbWUgaXMgYWx3YXlzIHJlbmRlcmVkLgotICAgIC8vIChUbyBhdm9pZCBmbG9hdCBjYWxjdWxhdGlvbiwgd2UgdXNlIHNjYWxlZCB2ZXJzaW9uIG9mIGFjY3VtdWxhdGVkIGNvdW50KQotICAgIHRhcmdldF9hY2N1bXVsYXRlICs9IGs7Ci0gICAgY29uc3QgaW50IHRhcmdldF9jdXJyZW50ID0gdGFyZ2V0X2FjY3VtdWxhdGUgLSBhY3R1YWxfYWNjdW11bGF0ZTsKLSAgICBpZiAoKGkgPT0gMCAmJiBrIDwgbikgfHwgdGFyZ2V0X2N1cnJlbnQgKiAyID49IG4gKiAocXVvdGllbnQgKiAyICsgMSkpIHsKLSAgICAgIG91dHB1dFtpXSA9IHF1b3RpZW50ICsgMTsKLSAgICB9IGVsc2UgewotICAgICAgb3V0cHV0W2ldID0gcXVvdGllbnQ7Ci0gICAgfQotICAgIGFjdHVhbF9hY2N1bXVsYXRlICs9IG91dHB1dFtpXSAqIG47Ci0gIH0KLQotICByZXR1cm4gb3V0cHV0OwotfQotCi1WaWRlb0NhZGVuY2VFc3RpbWF0b3I6OlZpZGVvQ2FkZW5jZUVzdGltYXRvcigKLSAgICBiYXNlOjpUaW1lRGVsdGEgbWluaW11bV90aW1lX3VudGlsX21heF9kcmlmdCkKLSAgICA6IGNhZGVuY2VfaHlzdGVyZXNpc190aHJlc2hvbGRfKAotICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhrTWluaW11bUNhZGVuY2VEdXJhdGlvbk1zKSksCi0gICAgICBtaW5pbXVtX3RpbWVfdW50aWxfbWF4X2RyaWZ0XyhtaW5pbXVtX3RpbWVfdW50aWxfbWF4X2RyaWZ0KSwKLSAgICAgIGlzX3ZhcmlhYmxlX2ZyYW1lX3JhdGVfKGZhbHNlKSB7Ci0gIFJlc2V0KCk7Ci19Ci0KLVZpZGVvQ2FkZW5jZUVzdGltYXRvcjo6flZpZGVvQ2FkZW5jZUVzdGltYXRvcigpIHt9Ci0KLXZvaWQgVmlkZW9DYWRlbmNlRXN0aW1hdG9yOjpSZXNldCgpIHsKLSAgY2FkZW5jZV8uY2xlYXIoKTsKLSAgcGVuZGluZ19jYWRlbmNlXy5jbGVhcigpOwotICBjYWRlbmNlX2NoYW5nZXNfID0gcmVuZGVyX2ludGVydmFsc19jYWRlbmNlX2hlbGRfID0gMDsKLSAgZmlyc3RfdXBkYXRlX2NhbGxfID0gdHJ1ZTsKLX0KLQotYm9vbCBWaWRlb0NhZGVuY2VFc3RpbWF0b3I6OlVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgKLSAgICBiYXNlOjpUaW1lRGVsdGEgcmVuZGVyX2ludGVydmFsLCBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZHVyYXRpb24sCi0gICAgYmFzZTo6VGltZURlbHRhIGZyYW1lX2R1cmF0aW9uX2RldmlhdGlvbiwKLSAgICBiYXNlOjpUaW1lRGVsdGEgbWF4X2FjY2VwdGFibGVfZHJpZnQpIHsKLSAgRENIRUNLX0dUKHJlbmRlcl9pbnRlcnZhbCwgYmFzZTo6VGltZURlbHRhKCkpOwotICBEQ0hFQ0tfR1QoZnJhbWVfZHVyYXRpb24sIGJhc2U6OlRpbWVEZWx0YSgpKTsKLQotICBpZiAoZnJhbWVfZHVyYXRpb25fZGV2aWF0aW9uID4ga1ZhcmlhYmxlRlBTRmFjdG9yICogcmVuZGVyX2ludGVydmFsKSB7Ci0gICAgaXNfdmFyaWFibGVfZnJhbWVfcmF0ZV8gPSB0cnVlOwotICB9IGVsc2UgaWYgKGZyYW1lX2R1cmF0aW9uX2RldmlhdGlvbiA8IGtDb25zdGFudEZQU0ZhY3RvciAqIHJlbmRlcl9pbnRlcnZhbCkgewotICAgIGlzX3ZhcmlhYmxlX2ZyYW1lX3JhdGVfID0gZmFsc2U7Ci0gIH0KLQotICAvLyBWYXJpYWJsZSBGUFMgZGV0ZWN0ZWQsIHR1cm4gb2ZmIENhZGVuY2UgYnkgZm9yY2UuCi0gIGlmIChpc192YXJpYWJsZV9mcmFtZV9yYXRlXykgewotICAgIHJlbmRlcl9pbnRlcnZhbHNfY2FkZW5jZV9oZWxkXyA9IDA7Ci0gICAgaWYgKCFjYWRlbmNlXy5lbXB0eSgpKSB7Ci0gICAgICBjYWRlbmNlXy5jbGVhcigpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJhc2U6OlRpbWVEZWx0YSB0aW1lX3VudGlsX21heF9kcmlmdDsKLQotICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjYWRlbmNlIHdoaWNoIGZpdHMgdGhlIGRhdGEuCi0gIENhZGVuY2UgbmV3X2NhZGVuY2UgPQotICAgICAgQ2FsY3VsYXRlQ2FkZW5jZShyZW5kZXJfaW50ZXJ2YWwsIGZyYW1lX2R1cmF0aW9uLCBtYXhfYWNjZXB0YWJsZV9kcmlmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVfdW50aWxfbWF4X2RyaWZ0KTsKLQotICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgpIGhhcyBiZWVuIGNhbGxlZCwKLSAgLy8gaW5pdGlhbGl6ZSB0aGUgaGlzdG9ncmFtIHdpdGggYSB6ZXJvIGNvdW50IGZvciBjYWRlbmNlIGNoYW5nZXM7IHRoaXMKLSAgLy8gYWxsb3dzIHVzIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YgcGxheWJhY2tzIHdoaWNoIGhhdmUgY2FkZW5jZSBhdCBhbGwuCi0gIGlmIChmaXJzdF91cGRhdGVfY2FsbF8pIHsKLSAgICBEQ0hFQ0tfRVEoY2FkZW5jZV9jaGFuZ2VzXywgMCk7Ci0gICAgZmlyc3RfdXBkYXRlX2NhbGxfID0gZmFsc2U7Ci0gICAgSGlzdG9ncmFtQ2FkZW5jZUNoYW5nZUNvdW50KDApOwotICB9Ci0KLSAgLy8gSWYgbm90aGluZyBjaGFuZ2VkLCBkbyBub3RoaW5nLgotICBpZiAobmV3X2NhZGVuY2UgPT0gY2FkZW5jZV8pIHsKLSAgICAvLyBDbGVhciBjYWRlbmNlIGhvbGQgdG8gcGVuZGluZyB2YWx1ZXMgZnJvbSBhY2N1bXVsYXRpbmcgaW5jb3JyZWN0bHkuCi0gICAgcmVuZGVyX2ludGVydmFsc19jYWRlbmNlX2hlbGRfID0gMDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBXYWl0IHVudGlsIGVub3VnaCByZW5kZXIgaW50ZXJ2YWxzIGhhdmUgZWxhcHNlZCBiZWZvcmUgYWNjZXB0aW5nIHRoZQotICAvLyBjYWRlbmNlIGNoYW5nZS4gIFByZXZlbnRzIG9zY2lsbGF0aW9uIG9mIHRoZSBjYWRlbmNlIHNlbGVjdGlvbi4KLSAgYm9vbCB1cGRhdGVfcGVuZGluZ19jYWRlbmNlID0gdHJ1ZTsKLSAgaWYgKG5ld19jYWRlbmNlID09IHBlbmRpbmdfY2FkZW5jZV8gfHwKLSAgICAgIGNhZGVuY2VfaHlzdGVyZXNpc190aHJlc2hvbGRfIDw9IHJlbmRlcl9pbnRlcnZhbCkgewotICAgIGlmICgrK3JlbmRlcl9pbnRlcnZhbHNfY2FkZW5jZV9oZWxkXyAqIHJlbmRlcl9pbnRlcnZhbCA+PQotICAgICAgICBjYWRlbmNlX2h5c3RlcmVzaXNfdGhyZXNob2xkXykgewotICAgICAgRFZMT0coMSkgPDwgIkNhZGVuY2Ugc3dpdGNoOiAiIDw8IENhZGVuY2VUb1N0cmluZyhjYWRlbmNlXykgPDwgIiAtPiAiCi0gICAgICAgICAgICAgICA8PCBDYWRlbmNlVG9TdHJpbmcobmV3X2NhZGVuY2UpCi0gICAgICAgICAgICAgICA8PCAiIDo6IFRpbWUgdW50aWwgZHJpZnQgZXhjZWVkZWQ6ICIgPDwgdGltZV91bnRpbF9tYXhfZHJpZnQ7Ci0gICAgICBjYWRlbmNlXy5zd2FwKG5ld19jYWRlbmNlKTsKLQotICAgICAgLy8gTm90ZTogQmVjYXVzZSB0aGlzIGNsYXNzIGlzIHRyYW5zaXRpdmVseSBvd25lZCBieSBhIGdhcmJhZ2UgY29sbGVjdGVkCi0gICAgICAvLyBvYmplY3QsIFdlYk1lZGlhUGxheWVyLCB3ZSBsb2cgY2FkZW5jZSBjaGFuZ2VzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkLgotICAgICAgSGlzdG9ncmFtQ2FkZW5jZUNoYW5nZUNvdW50KCsrY2FkZW5jZV9jaGFuZ2VzXyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1cGRhdGVfcGVuZGluZ19jYWRlbmNlID0gZmFsc2U7Ci0gIH0KLQotICBEVkxPRygyKSA8PCAiSHlzdGVyZXNpcyBwcmV2ZW50ZWQgY2FkZW5jZSBzd2l0Y2g6ICIKLSAgICAgICAgICAgPDwgQ2FkZW5jZVRvU3RyaW5nKGNhZGVuY2VfKSA8PCAiIC0+ICIKLSAgICAgICAgICAgPDwgQ2FkZW5jZVRvU3RyaW5nKG5ld19jYWRlbmNlKTsKLQotICBpZiAodXBkYXRlX3BlbmRpbmdfY2FkZW5jZSkgewotICAgIHBlbmRpbmdfY2FkZW5jZV8uc3dhcChuZXdfY2FkZW5jZSk7Ci0gICAgcmVuZGVyX2ludGVydmFsc19jYWRlbmNlX2hlbGRfID0gMTsKLSAgfQotCi0gIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFZpZGVvQ2FkZW5jZUVzdGltYXRvcjo6R2V0Q2FkZW5jZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lX251bWJlcikgY29uc3QgewotICBEQ0hFQ0soaGFzX2NhZGVuY2UoKSk7Ci0gIHJldHVybiBjYWRlbmNlX1tmcmFtZV9udW1iZXIgJSBjYWRlbmNlXy5zaXplKCldOwotfQotCi1WaWRlb0NhZGVuY2VFc3RpbWF0b3I6OkNhZGVuY2UgVmlkZW9DYWRlbmNlRXN0aW1hdG9yOjpDYWxjdWxhdGVDYWRlbmNlKAotICAgIGJhc2U6OlRpbWVEZWx0YSByZW5kZXJfaW50ZXJ2YWwsIGJhc2U6OlRpbWVEZWx0YSBmcmFtZV9kdXJhdGlvbiwKLSAgICBiYXNlOjpUaW1lRGVsdGEgbWF4X2FjY2VwdGFibGVfZHJpZnQsCi0gICAgYmFzZTo6VGltZURlbHRhKiB0aW1lX3VudGlsX21heF9kcmlmdCkgY29uc3QgewotICAvLyBUaGUgcGVyZmVjdCBjYWRlbmNlIGlzIHRoZSBudW1iZXIgb2YgcmVuZGVyIGludGVydmFscyBwZXIgZnJhbWUuCi0gIGNvbnN0IGRvdWJsZSBwZXJmZWN0X2NhZGVuY2UgPQotICAgICAgZnJhbWVfZHVyYXRpb24uSW5TZWNvbmRzRigpIC8gcmVuZGVyX2ludGVydmFsLkluU2Vjb25kc0YoKTsKLQotICAvLyBUaGlzIGNhc2UgaXMgdmVyeSBzaW1wbGUsIGp1c3QgcmV0dXJuIGEgc2luZ2xlIGZyYW1lIGNhZGVuY2UsIGJlY2F1c2UgaXQKLSAgLy8gaXMgaW1wb3NzaWJsZSBmb3IgdXMgdG8gYWNjdW11bGF0ZSBkcmlmdCBhcyBsYXJnZSBhcyBtYXhfYWNjZXB0YWJsZV9kcmlmdAotICAvLyB3aXRoaW4gbWluaW11bV90aW1lX3VudGlsX21heF9kcmlmdC4KLSAgaWYgKG1heF9hY2NlcHRhYmxlX2RyaWZ0ID49IG1pbmltdW1fdGltZV91bnRpbF9tYXhfZHJpZnRfKSB7Ci0gICAgaW50IGNhZGVuY2VfdmFsdWUgPSByb3VuZChwZXJmZWN0X2NhZGVuY2UpOwotICAgIGlmIChjYWRlbmNlX3ZhbHVlID09IDApIGNhZGVuY2VfdmFsdWUgPSAxOwotICAgIENhZGVuY2UgcmVzdWx0ID0gQ29uc3RydWN0Q2FkZW5jZShjYWRlbmNlX3ZhbHVlLCAxKTsKLSAgICBjb25zdCBkb3VibGUgZXJyb3IgPSBzdGQ6OmZhYnMoMS4wIC0gcGVyZmVjdF9jYWRlbmNlIC8gY2FkZW5jZV92YWx1ZSk7Ci0gICAgKnRpbWVfdW50aWxfbWF4X2RyaWZ0ID0gbWF4X2FjY2VwdGFibGVfZHJpZnQgLyBlcnJvcjsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8gV2Ugd2FudCB0byBjb25zdHJ1Y3QgYSBjYWRlbmNlIHBhdHRlcm4gdG8gYXBwcm94aW1hdGUgdGhlIHBlcmZlY3QgY2FkZW5jZQotICAvLyB3aGlsZSBlbnN1cmluZyBlcnJvciBkb2Vzbid0IGFjY3VtdWxhdGUgdG9vIHF1aWNrbHkuCi0gIGNvbnN0IGRvdWJsZSBkcmlmdF9yYXRpbyA9IG1heF9hY2NlcHRhYmxlX2RyaWZ0LkluU2Vjb25kc0YoKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1fdGltZV91bnRpbF9tYXhfZHJpZnRfLkluU2Vjb25kc0YoKTsKLSAgY29uc3QgZG91YmxlIG1pbmltdW1fYWNjZXB0YWJsZV9jYWRlbmNlID0KLSAgICAgIHBlcmZlY3RfY2FkZW5jZSAvICgxLjAgKyBkcmlmdF9yYXRpbyk7Ci0gIGNvbnN0IGRvdWJsZSBtYXhpbXVtX2FjY2VwdGFibGVfY2FkZW5jZSA9Ci0gICAgICBwZXJmZWN0X2NhZGVuY2UgLyAoMS4wIC0gZHJpZnRfcmF0aW8pOwotCi0gIC8vIFdlJ3ZlIGFyYml0cmFyaWx5IGNob3NlbiB0aGUgbWF4aW11bSBhbGxvd2FibGUgY2FkZW5jZSBsZW5ndGggYXMgNS4gSXQncwotICAvLyBwcm92ZW4gc3VmZmljaWVudCB0byBzdXBwb3J0IG1vc3Qgc3RhbmRhcmQgZnJhbWUgYW5kIHJlbmRlciByYXRlcywgd2hpbGUKLSAgLy8gYmVpbmcgc21hbGwgZW5vdWdoIHRoYXQgc21hbGwgZnJhbWUgYW5kIHJlbmRlciB0aW1pbmcgZXJyb3JzIGRvbid0IHJlbmRlcgotICAvLyBpdCB1c2VsZXNzLgotICBjb25zdCBpbnQga01heENhZGVuY2VTaXplID0gNTsKLQotICBkb3VibGUgYmVzdF9lcnJvciA9IDA7Ci0gIGludCBiZXN0X24gPSAwOwotICBpbnQgYmVzdF9rID0gMDsKLSAgZm9yIChpbnQgbiA9IDE7IG4gPD0ga01heENhZGVuY2VTaXplOyArK24pIHsKLSAgICAvLyBBIGNhZGVuY2UgcGF0dGVybiBvbmx5IGV4aXN0cyBpZiB0aGVyZSBleGlzdHMgYW4gaW50ZWdlciBLIHN1Y2ggdGhhdCBLL04KLSAgICAvLyBpcyBiZXR3ZWVuIHxtaW5pbXVtX2FjY2VwdGFibGVfY2FkZW5jZXwgYW5kIHxtYXhpbXVtX2FjY2VwdGFibGVfY2FkZW5jZXwuCi0gICAgLy8gVGhlIGJlc3QgcGF0dGVybiBpcyB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXN0IGVycm9yIG92ZXIgdGltZSByZWxhdGl2ZSB0bwotICAgIC8vIHRoZSB8cGVyZmVjdF9jYWRlbmNlfC4KLSAgICBpZiAoc3RkOjpmbG9vcihtaW5pbXVtX2FjY2VwdGFibGVfY2FkZW5jZSAqIG4pIDwKLSAgICAgICAgc3RkOjpmbG9vcihtYXhpbXVtX2FjY2VwdGFibGVfY2FkZW5jZSAqIG4pKSB7Ci0gICAgICBjb25zdCBpbnQgayA9IHJvdW5kKHBlcmZlY3RfY2FkZW5jZSAqIG4pOwotCi0gICAgICBjb25zdCBkb3VibGUgZXJyb3IgPSBzdGQ6OmZhYnMoMS4wIC0gcGVyZmVjdF9jYWRlbmNlICogbiAvIGspOwotCi0gICAgICAvLyBQcmVmZXIgdGhlIHNob3J0ZXIgY2FkZW5jZSBwYXR0ZXJuIHVubGVzcyBhIGxvbmdlciBvbmUgInNpZ25pZmljYW50bHkiCi0gICAgICAvLyByZWR1Y2VzIHRoZSBlcnJvci4KLSAgICAgIGlmICghYmVzdF9uIHx8IGVycm9yIDwgYmVzdF9lcnJvciAqIDAuOTkpIHsKLSAgICAgICAgYmVzdF9lcnJvciA9IGVycm9yOwotICAgICAgICBiZXN0X2sgPSBrOwotICAgICAgICBiZXN0X24gPSBuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICghYmVzdF9uKSByZXR1cm4gQ2FkZW5jZSgpOwotCi0gIC8vIElmIHdlJ3ZlIGZvdW5kIGEgc29sdXRpb24uCi0gIENhZGVuY2UgYmVzdF9yZXN1bHQgPSBDb25zdHJ1Y3RDYWRlbmNlKGJlc3RfaywgYmVzdF9uKTsKLSAgKnRpbWVfdW50aWxfbWF4X2RyaWZ0ID0gbWF4X2FjY2VwdGFibGVfZHJpZnQgLyBiZXN0X2Vycm9yOwotCi0gIHJldHVybiBiZXN0X3Jlc3VsdDsKLX0KLQotc3RkOjpzdHJpbmcgVmlkZW9DYWRlbmNlRXN0aW1hdG9yOjpDYWRlbmNlVG9TdHJpbmcoCi0gICAgY29uc3QgQ2FkZW5jZSYgY2FkZW5jZSkgY29uc3QgewotICBpZiAoY2FkZW5jZS5lbXB0eSgpKSByZXR1cm4gc3RkOjpzdHJpbmcoIltdIik7Ci0KLSAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zOwotICBvcyA8PCAiWyI7Ci0gIHN0ZDo6Y29weShjYWRlbmNlLmJlZ2luKCksIGNhZGVuY2UuZW5kKCkgLSAxLAotICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4ob3MsICI6IikpOwotICBvcyA8PCBjYWRlbmNlLmJhY2soKSA8PCAiXSI7Ci0gIHJldHVybiBvcy5zdHIoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92aWRlb19jYWRlbmNlX2VzdGltYXRvci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvdmlkZW9fY2FkZW5jZV9lc3RpbWF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDExNjVmMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92aWRlb19jYWRlbmNlX2VzdGltYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19WSURFT19DQURFTkNFX0VTVElNQVRPUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19WSURFT19DQURFTkNFX0VTVElNQVRPUl9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gRXN0aW1hdGVzIHdoZXRoZXIgYSBnaXZlbiBmcmFtZSBkdXJhdGlvbiBhbmQgcmVuZGVyIGludGVydmFsIGxlbmd0aCBoYXZlIGEKLS8vIHJlbmRlciBjYWRlbmNlIHdoaWNoIHdvdWxkIGFsbG93IGZvciBvcHRpbWFsIHVuaWZvcm1pdHkgb2YgZGlzcGxheWVkIGZyYW1lCi0vLyBkdXJhdGlvbnMgb3ZlciB0aW1lLgotLy8KLS8vIENhZGVuY2UgaXMgdGhlIGlkZWFsIHJlcGVhdGluZyBmcmFtZSBwYXR0ZXJuIGZvciBhIGdyb3VwIG9mIGZyYW1lczsgY3VycmVudGx5Ci0vLyBWaWRlb0NhZGVuY2VFc3RpbWF0b3Igc3VwcG9ydHMgTi1mcmFtZSAoW2ExOmEyOi4uOmFOXSkgY2FkZW5jZXMgd2hlcmUgTiA8PSA1LgotLy8gRGV0YWlscyBvbiB3aGF0IHRoaXMgbWVhbnMgYXJlIGJlbG93LgotLy8KLS8vIFRoZSBwZXJmZWN0IGNhZGVuY2Ugb2YgYSBzZXQgb2YgZnJhbWVzIGlzIHRoZSByYXRpbyBvZiB0aGUgZnJhbWUgZHVyYXRpb24gdG8KLS8vIHJlbmRlciBpbnRlcnZhbCBsZW5ndGguICBJLmUuIGZvciAzMGZwcyBpbiA2MEh6IHRoZSBjYWRlbmNlIHdvdWxkIGJlICgxLzMwKSAvCi0vLyAoMS82MCkgPSA2MCAvIDMwID0gMi4gIEl0J3MgY29tbW9uIHRoYXQgdGhpcyBpcyBub3QgYW4gZXhhY3QgaW50ZWdlciwgZS5nLiwKLS8vIDI5Ljk3NGZwcyBpbiA2MEh6IHdoaWNoIHdvdWxkIGhhdmUgYSBjYWRlbmNlIG9mICgxLzI5Ljk3NCkgLyAoMS82MCkgPQotLy8gfjIuMDAyOS4KLS8vCi0vLyBUaGUgcGVyZmVjdCBjYWRlbmNlIGlzIGFsd2F5cyBhIHJlYWwgbnVtYmVyLiAgQWxsIE4tY2FkZW5jZXMgW2ExOmEyOi4uOmFOXQotLy8gd2hlcmUgYUsgaXMgYW4gaW50ZWdlciBhcmUgYW4gYXBwcm94aW1hdGlvbiBvZiB0aGUgcGVyZmVjdCBjYWRlbmNlOyBpLmUuIHRoZQotLy8gYXZlcmFnZSBvZiBbYTE6Li46YU5dIHdpbGwgYXBwcm94aW1hdGVseSBlcXVhbCB0aGUgcGVyZmVjdCBjYWRlbmNlLiAgV2hlbiBOPTEKLS8vIHdlIGhhdmUgYSAxLWZyYW1lIGNhZGVuY2UsIHdoZW4gTj0yLCB3ZSBoYXZlIGEgMi1mcmFtZSBjYWRlbmNlLCBldGMuCi0vLwotLy8gRm9yIHNpbmdsZSBmcmFtZSBjYWRlbmNlIHdlIGp1c3Qgcm91bmQgdGhlIHBlcmZlY3QgY2FkZW5jZSAofjIuMDAyOSBpbiB0aGUKLS8vIHByZXZpb3VzIGV4YW1wbGUpIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUgKDIgaW4gdGhpcyBjYXNlOyB3aGljaCBpcwotLy8gZGVub3RlZCBhcyBhIGNhZGVuY2Ugb2YgWzJdKS4gIElmIHRoZSBkZWx0YSBiZXR3ZWVuIHRob3NlIHZhbHVlcyBpcyBzbWFsbCB3ZQotLy8gY2FuIGNob29zZSB0byByZW5kZXIgZnJhbWVzIGZvciB0aGUgaW50ZWdlciBudW1iZXIgb2YgcmVuZGVyIGludGVydmFsczsKLS8vIHNob3J0ZW5pbmcgb3IgbGVuZ3RoZW5pbmcgdGhlIGFjdHVhbCByZW5kZXJlZCBmcmFtZSBkdXJhdGlvbi4gIERvaW5nIHNvCi0vLyBlbnN1cmVzIGVhY2ggZnJhbWUgZ2V0cyBhbiBvcHRpbWFsIGFtb3VudCBvZiBkaXNwbGF5IHRpbWUuCi0vLwotLy8gRm9yIE4tZnJhbWUgY2FkZW5jZSwgdGhlIGlkZWEgaXMgc2ltaWxhciwgd2UganVzdCByb3VuZCB0aGUgcGVyZmVjdCBjYWRlbmNlCi0vLyB0byBzb21lIEsvTiwgd2hlcmUgSyBpcyBhbiBpbnRlZ2VyLCBhbmQgZGlzdHJpYnV0ZSBbZmxvb3IoSy9OKSwgZmxvb3IoSy9OKSsxXQotLy8gaW50byB0aGUgY2FkZW5jZSB2ZWN0b3IgYXMgZXZlbmx5IGFzIHBvc3NpYmxlLiAgRm9yIGV4YW1wbGUsIDIzLjk3ZnBzIGluCi0vLyA2MEh6LCB0aGUgcGVyZmVjdCBjYWRlbmNlIGlzIDIuNTAzMTMsIHdlIGNhbiByb3VuZCBpdCB0byAyLjUgPSA1LzIsIGFuZCB3ZQotLy8gY2FuIHRoZW4gY29uc3RydWN0IHRoZSBjYWRlbmNlIHZlY3RvciBhcyBbMjozXS4KLS8vCi0vLyBUaGUgZGVsdGEgYmV0d2VlbiB0aGUgcGVyZmVjdCBjYWRlbmNlIGFuZCB0aGUgcm91bmRlZCBjYWRlbmNlIGxlYWRzIHRvIGRyaWZ0Ci0vLyBvdmVyIHRpbWUgb2YgdGhlIGFjdHVhbCBWaWRlb0ZyYW1lIHRpbWVzdGFtcCByZWxhdGl2ZSB0byBpdHMgcmVuZGVyZWQgdGltZSwKLS8vIHNvIHdlIHBlcmZvcm0gc29tZSBjYWxjdWxhdGlvbnMgdG8gZW5zdXJlIHdlIG9ubHkgdXNlIGEgY2FkZW5jZSB3aGVuIGl0IHdpbGwKLS8vIHRha2Ugc29tZSB0aW1lIHRvIGRyaWZ0IGFuIHVuZGVzaXJhYmxlIGFtb3VudDsgc2VlIENhbGN1bGF0ZUNhZGVuY2UoKSBmb3IKLS8vIGRldGFpbHMgb24gaG93IHRoaXMgY2FsY3VsYXRpb24gaXMgbWFkZS4KLS8vCi0vLyBJbiBwcmFjdGljZSB0aGlzIHdvcmtzIG91dCB0byB0aGUgZm9sbG93aW5nIGZvciBjb21tb24gc2V0dXBzIGlmIHdlIHVzZQotLy8gY2FkZW5jZSBiYXNlZCBzZWxlY3Rpb246Ci0vLwotLy8gICAgMjkuNWZwcyBpbiA2MEh6LCAgICB+MTdtcyBtYXggZHJpZnQgPT4gZXhoYXVzdGVkIGluIH4xIHNlY29uZC4KLS8vICAgIDI5LjlmcHMgaW4gNjBIeiwgICAgfjE3bXMgbWF4IGRyaWZ0ID0+IGV4aGF1c3RlZCBpbiB+MTYuNCBzZWNvbmRzLgotLy8gICAgMjRmcHMgICBpbiA1OS45SHosICB+MjFtcyBtYXggZHJpZnQgPT4gZXhoYXVzdGVkIGluIH4xMi42IHNlY29uZHMuCi0vLyAgICAyNC45ZnBzIGluIDYwSHosICAgIH4yMG1zIG1heCBkcmlmdCA9PiBleGhhdXN0ZWQgaW4gfjQuMCBzZWNvbmRzLgotLy8gICAgNTkuOWZwcyBpbiA2MEh6LCAgICB+OC4zbXMgbWF4IGRyaWZ0ID0+IGV4aGF1c3RlZCBpbiB+OC4yIHNlY29uZHMuCi0vLyAgICAyNC45ZnBzIGluIDUwSHosICAgIH4yMG1zIG1heCBkcmlmdCA9PiBleGhhdXN0ZWQgaW4gfjIwLjUgc2Vjb25kcy4KLS8vICAgIDEyMGZwcyAgaW4gNTkuOUh6LCAgfjguM21zIG1heCBkcmlmdCA9PiBleGhhdXN0ZWQgaW4gfjguMiBzZWNvbmRzLgotLy8KLWNsYXNzIE1FRElBX0VYUE9SVCBWaWRlb0NhZGVuY2VFc3RpbWF0b3IgewotIHB1YmxpYzoKLSAgdXNpbmcgQ2FkZW5jZSA9IHN0ZDo6dmVjdG9yPGludD47Ci0KLSAgLy8gQXMgbWVudGlvbmVkIGluIHRoZSBpbnRyb2R1Y3Rpb24sIHRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgdG8gY2xhbXAgdG8KLSAgLy8gYSBnaXZlbiBjYWRlbmNlIGlzIGJhc2VkIG9uIGhvdyBsb25nIGl0IHRha2VzIGJlZm9yZSBhIGZyYW1lIHdvdWxkIGhhdmUgdG8KLSAgLy8gYmUgZHJvcHBlZCBvciByZXBlYXRlZCB0byBjb21wZW5zYXRlIGZvciByZWFjaGluZyB0aGUgbWF4aW11bSBhY2NlcHRhYmxlCi0gIC8vIGRyaWZ0OyB0aGlzIHRpbWUgbGVuZ3RoIGlzIGNvbnRyb2xsZWQgYnkgfG1pbmltdW1fdGltZV91bnRpbF9tYXhfZHJpZnR8LgotICBleHBsaWNpdCBWaWRlb0NhZGVuY2VFc3RpbWF0b3IoYmFzZTo6VGltZURlbHRhIG1pbmltdW1fdGltZV91bnRpbF9tYXhfZHJpZnQpOwotICB+VmlkZW9DYWRlbmNlRXN0aW1hdG9yKCk7Ci0KLSAgLy8gQ2xlYXJzIHN0b3JlZCBjYWRlbmNlIGluZm9ybWF0aW9uLgotICB2b2lkIFJlc2V0KCk7Ci0KLSAgLy8gVXBkYXRlcyB0aGUgZXN0aW1hdGVzIGZvciB8Y2FkZW5jZV98IGJhc2VkIG9uIHRoZSBnaXZlbiB2YWx1ZXMgYXMgZGVzY3JpYmVkCi0gIC8vIGluIHRoZSBpbnRyb2R1Y3Rpb24gYWJvdmUuCi0gIC8vCi0gIC8vIENsaWVudHMgc2hvdWxkIGNhbGwgdGhpcyBhbmQgdGhlbiB1cGRhdGUgdGhlIGNhZGVuY2UgZm9yIGFsbCBmcmFtZXMgdmlhIHRoZQotICAvLyBHZXRDYWRlbmNlRm9yRnJhbWUoKSBtZXRob2QgaWYgdGhlIGNhZGVuY2UgY2hhbmdlcy4KLSAgLy8KLSAgLy8gQ2FkZW5jZSBjaGFuZ2VzIHdpbGwgbm90IHRha2UgYWZmZWN0IHVudGlsIGVub3VnaCByZW5kZXIgaW50ZXJ2YWxzIGhhdmUKLSAgLy8gZWxhcHNlZC4gIEZvciB0aGUgcHVycG9zZXMgb2YgaHlzdGVyZXNpcywgZWFjaCBVcGRhdGVDYWRlbmNlRXN0aW1hdGUoKSBjYWxsCi0gIC8vIGlzIGFzc3VtZWQgdG8gZWxhcHNlIG9uZSB8cmVuZGVyX2ludGVydmFsfCB3b3J0aCBvZiB0aW1lLgotICAvLwotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNhZGVuY2UgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbC4KLSAgYm9vbCBVcGRhdGVDYWRlbmNlRXN0aW1hdGUoYmFzZTo6VGltZURlbHRhIHJlbmRlcl9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGZyYW1lX2R1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZHVyYXRpb25fZGV2aWF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgbWF4X2FjY2VwdGFibGVfZHJpZnQpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHVzZWZ1bCBjYWRlbmNlIHdhcyBmb3VuZC4KLSAgYm9vbCBoYXNfY2FkZW5jZSgpIGNvbnN0IHsgcmV0dXJuICFjYWRlbmNlXy5lbXB0eSgpOyB9Ci0KLSAgLy8gR2l2ZW4gYSB8ZnJhbWVfbnVtYmVyfCwgd2hlcmUgemVybyBpcyB0aGUgbW9zdCByZWNlbnRseSByZW5kZXJlZCBmcmFtZSwKLSAgLy8gcmV0dXJucyB0aGUgaWRlYWwgY2FkZW5jZSBmb3IgdGhhdCBmcmFtZS4KLSAgLy8KLSAgLy8gTm90ZTogQ2FsbGVycyBtdXN0IHRyYWNrIHRoZSBiYXNlIHxmcmFtZV9udW1iZXJ8IHJlbGF0aXZlIHRvIGFsbCBmcmFtZXMKLSAgLy8gcmVuZGVyZWQgb3IgcmVtb3ZlZCBhZnRlciB0aGUgZmlyc3QgZnJhbWUgZm9yIHdoaWNoIGNhZGVuY2UgaXMgZGV0ZWN0ZWQuCi0gIC8vIFRoZSBmaXJzdCBmcmFtZSBhZnRlciBjYWRlbmNlIGlzIGRldGVjdGVkIGhhcyBhIHxmcmFtZV9udW1iZXJ8IG9mIDAuCi0gIC8vCi0gIC8vIEZyYW1lcyB3aGljaCBjb21lIGluIGJlZm9yZSB0aGUgbGFzdCByZW5kZXJlZCBmcmFtZSBzaG91bGQgYmUgaWdub3JlZCBpbgotICAvLyB0ZXJtcyBvZiBpbXBhY3QgdG8gdGhlIGJhc2UgfGZyYW1lX251bWJlcnwuCi0gIGludCBHZXRDYWRlbmNlRm9yRnJhbWUodWludDY0X3QgZnJhbWVfbnVtYmVyKSBjb25zdDsKLQotICB2b2lkIHNldF9jYWRlbmNlX2h5c3RlcmVzaXNfdGhyZXNob2xkX2Zvcl90ZXN0aW5nKGJhc2U6OlRpbWVEZWx0YSB0aHJlc2hvbGQpIHsKLSAgICBjYWRlbmNlX2h5c3RlcmVzaXNfdGhyZXNob2xkXyA9IHRocmVzaG9sZDsKLSAgfQotCi0gIHNpemVfdCBjYWRlbmNlX3NpemVfZm9yX3Rlc3RpbmcoKSBjb25zdCB7IHJldHVybiBjYWRlbmNlXy5zaXplKCk7IH0KLSAgc3RkOjpzdHJpbmcgR2V0Q2FkZW5jZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBDYWRlbmNlVG9TdHJpbmcoY2FkZW5jZV8pOyB9Ci0KLSBwcml2YXRlOgotICAvLyBBdHRlbXB0cyB0byBmaW5kIGFuIE4tZnJhbWUgY2FkZW5jZS4gIFJldHVybnMgdGhlIGNhZGVuY2UgdmVjdG9yIGlmIGNhZGVuY2UKLSAgLy8gaXMgZm91bmQgYW5kIHNldHMgfHRpbWVfdW50aWxfbWF4X2RyaWZ0fCBmb3IgdGhlIGNvbXB1dGVkIGNhZGVuY2UuIElmCi0gIC8vIG11bHRpcGxlIGNhZGVuY2VzIHNhdGlzZnlpbmcgdGhlIG1heCBkcmlmdCBjb25zdHJhaW50IGV4aXN0LCB3ZSBhcmUgZ29pbmcKLSAgLy8gdG8gcmV0dXJuIHRoZSBvbmUgd2l0aCBsYXJnZXN0IHx0aW1lX3VudGlsX21heF9kcmlmdHwuCi0gIC8vIEZvciBkZXRhaWxzIG9uIHRoZSBtYXRoIGFuZCBhbGdvcml0aG0sIHNlZSBodHRwczovL2dvby5nbC9RSzB2YnoKLSAgQ2FkZW5jZSBDYWxjdWxhdGVDYWRlbmNlKGJhc2U6OlRpbWVEZWx0YSByZW5kZXJfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgbWF4X2FjY2VwdGFibGVfZHJpZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEqIHRpbWVfdW50aWxfbWF4X2RyaWZ0KSBjb25zdDsKLQotICAvLyBDb252ZXJ0cyBhIGNhZGVuY2UgdmVjdG9yIGludG8gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgb2YgdGhlIGZvcm0KLSAgLy8gIlthOiBiOiAuLi46IHpdIi4KLSAgc3RkOjpzdHJpbmcgQ2FkZW5jZVRvU3RyaW5nKGNvbnN0IENhZGVuY2UmIGNhZGVuY2UpIGNvbnN0OwotCi0gIC8vIFRoZSBhcHByb3hpbWF0ZSBiZXN0IE4tZnJhbWUgY2FkZW5jZSBmb3IgYWxsIGZyYW1lcyBzZWVuIHRodXMgZmFyOyB1cGRhdGVkCi0gIC8vIGJ5IFVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgpLiAgRW1wdHkgd2hlbiBubyBjYWRlbmNlIGhhcyBiZWVuIGRldGVjdGVkLgotICBDYWRlbmNlIGNhZGVuY2VfOwotCi0gIC8vIFVzZWQgYXMgaHlzdGVyZXNpcyB0byBwcmV2ZW50IG9zY2lsbGF0aW9uIGJldHdlZW4gY2FkZW5jZSBhcHByb3hpbWF0aW9ucwotICAvLyBmb3Igc3B1cmlvdXMgYmxpcHMgaW4gdGhlIHJlbmRlciBpbnRlcnZhbCBvciBmcmFtZSBkdXJhdGlvbi4KLSAgLy8KLSAgLy8gT25jZSBhIG5ldyBjYWRlbmNlIGlzIGRldGVjdGVkLCB8cmVuZGVyX2ludGVydmFsc19jYWRlbmNlX2hlbGRffCBpcwotICAvLyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBVcGRhdGVDYWRlbmNlRXN0aW1hdGUoKSBjYWxsIHdoZXJlIHxjYWRlbmNlX3wgbWF0Y2hlcwotICAvLyB8cGVuZGluZ19jYWRlbmNlX3wuICB8cmVuZGVyX2ludGVydmFsc19jYWRlbmNlX2hlbGRffCBpcyBjbGVhcmVkIHdoZW4gYQotICAvLyAibmV3IiBjYWRlbmNlIG1hdGNoZXMgfGNhZGVuY2VffCBvciB8cGVuZGluZ19jYWRlbmNlX3wuCi0gIC8vCi0gIC8vIE9uY2UgfGtNaW5pbXVtQ2FkZW5jZUR1cmF0aW9uTXN8IGlzIGV4Y2VlZGVkIGluIHJlbmRlciBpbnRlcnZhbHMsIHRoZQotICAvLyBkZXRlY3RlZCBjYWRlbmNlIGlzIHNldCBpbiB8Y2FkZW5jZV98LgotICBDYWRlbmNlIHBlbmRpbmdfY2FkZW5jZV87Ci0gIGludCByZW5kZXJfaW50ZXJ2YWxzX2NhZGVuY2VfaGVsZF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBjYWRlbmNlX2h5c3RlcmVzaXNfdGhyZXNob2xkXzsKLQotICAvLyBUcmFja3MgaG93IG1hbnkgdGltZXMgY2FkZW5jZSBoYXMgc3dpdGNoZWQgZHVyaW5nIGEgZ2l2ZW4gcGxheWJhY2ssIHVzZWQgdG8KLSAgLy8gaGlzdG9ncmFtIHRoZSBudW1iZXIgb2YgY2FkZW5jZSBjaGFuZ2VzIGluIGEgcGxheWJhY2suCi0gIGJvb2wgZmlyc3RfdXBkYXRlX2NhbGxfOwotICBpbnQgY2FkZW5jZV9jaGFuZ2VzXzsKLQotICAvLyBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBhbGxvd2VkIGJlZm9yZSBhIGdsaXRjaCBvY2N1cnMgYmVmb3JlIGNvbmZpcm1pbmcKLSAgLy8gY2FkZW5jZSBmb3IgYSBnaXZlbiByZW5kZXIgaW50ZXJ2YWwgYW5kIGZyYW1lIGR1cmF0aW9uLgotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgbWluaW11bV90aW1lX3VudGlsX21heF9kcmlmdF87Ci0KLSAgYm9vbCBpc192YXJpYWJsZV9mcmFtZV9yYXRlXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmlkZW9DYWRlbmNlRXN0aW1hdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX1ZJREVPX0NBREVOQ0VfRVNUSU1BVE9SX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92aWRlb19jYWRlbmNlX2VzdGltYXRvcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjhlYWZmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjg4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2NhZGVuY2VfZXN0aW1hdG9yLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19zcGxpdC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBTZWUgVmlkZW9DYWRlbmNlRXN0aW1hdG9yIGhlYWRlciBmb3IgbW9yZSBkZXRhaWxzLgotY29uc3QgaW50IGtNaW5pbXVtQWNjZXB0YWJsZVRpbWVCZXR3ZWVuR2xpdGNoZXNTZWNzID0gODsKLQotLy8gU2xvd3MgZG93biB0aGUgZ2l2ZW4gfGZwc3wgYWNjb3JkaW5nIHRvIE5UU0MgZmllbGQgcmVkdWN0aW9uIHN0YW5kYXJkczsgc2VlCi0vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZyYW1lX3JhdGUjRGlnaXRhbF92aWRlb19hbmRfdGVsZXZpc2lvbgotc3RhdGljIGRvdWJsZSBOVFNDKGRvdWJsZSBmcHMpIHsgcmV0dXJuIGZwcyAvIDEuMDAxOyB9Ci0KLXN0YXRpYyBiYXNlOjpUaW1lRGVsdGEgSW50ZXJ2YWwoZG91YmxlIGhlcnR6KSB7Ci0gIHJldHVybiBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzRCgxLjAgLyBoZXJ0eik7Ci19Ci0KLXN0ZDo6dmVjdG9yPGludD4gQ3JlYXRlQ2FkZW5jZUZyb21TdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIGNhZGVuY2UpIHsKLSAgQ0hFQ0tfRVEoJ1snLCBjYWRlbmNlLmZyb250KCkpOwotICBDSEVDS19FUSgnXScsIGNhZGVuY2UuYmFjaygpKTsKLQotICBzdGQ6OnZlY3RvcjxpbnQ+IHJlc3VsdDsKLSAgZm9yIChjb25zdCBzdGQ6OnN0cmluZyYgdG9rZW4gOgotICAgICAgIGJhc2U6OlNwbGl0U3RyaW5nKGNhZGVuY2Uuc3Vic3RyKDEsIGNhZGVuY2UubGVuZ3RoKCkgLSAyKSwgIjoiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpKSB7Ci0gICAgaW50IGNhZGVuY2VfdmFsdWUgPSAwOwotICAgIENIRUNLKGJhc2U6OlN0cmluZ1RvSW50KHRva2VuLCAmY2FkZW5jZV92YWx1ZSkpIDw8IHRva2VuOwotICAgIHJlc3VsdC5wdXNoX2JhY2soY2FkZW5jZV92YWx1ZSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURldmlhdGlvbkFuZERyaWZ0KAotICAgIFZpZGVvQ2FkZW5jZUVzdGltYXRvciogZXN0aW1hdG9yLCBkb3VibGUgZnJhbWVfaGVydHosIGRvdWJsZSByZW5kZXJfaGVydHosCi0gICAgYmFzZTo6VGltZURlbHRhIGRldmlhdGlvbiwgYmFzZTo6VGltZURlbHRhIGFjY2VwdGFibGVfZHJpZnQsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkX2NhZGVuY2UpIHsKLSAgU0NPUEVEX1RSQUNFKGJhc2U6OlN0cmluZ1ByaW50ZigiQ2hlY2tpbmcgJS4wM2YgZnBzIGludG8gJTAuMDNmIiwgZnJhbWVfaGVydHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX2hlcnR6KSk7Ci0KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiBleHBlY3RlZF9jYWRlbmNlX3ZlY3RvciA9Ci0gICAgICBDcmVhdGVDYWRlbmNlRnJvbVN0cmluZyhleHBlY3RlZF9jYWRlbmNlKTsKLQotICBlc3RpbWF0b3ItPlJlc2V0KCk7Ci0gIGNvbnN0IGJvb2wgY2FkZW5jZV9jaGFuZ2VkID0gZXN0aW1hdG9yLT5VcGRhdGVDYWRlbmNlRXN0aW1hdGUoCi0gICAgICBJbnRlcnZhbChyZW5kZXJfaGVydHopLCBJbnRlcnZhbChmcmFtZV9oZXJ0eiksIGRldmlhdGlvbiwKLSAgICAgIGFjY2VwdGFibGVfZHJpZnQpOwotICBFWFBFQ1RfRVEoY2FkZW5jZV9jaGFuZ2VkLCBlc3RpbWF0b3ItPmhhc19jYWRlbmNlKCkpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfY2FkZW5jZV92ZWN0b3IuZW1wdHkoKSwgIWVzdGltYXRvci0+aGFzX2NhZGVuY2UoKSk7Ci0KLSAgLy8gTm90aGluZyBmdXJ0aGVyIHRvIHRlc3QuCi0gIGlmIChleHBlY3RlZF9jYWRlbmNlX3ZlY3Rvci5lbXB0eSgpIHx8ICFlc3RpbWF0b3ItPmhhc19jYWRlbmNlKCkpIHJldHVybjsKLQotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfY2FkZW5jZV92ZWN0b3Iuc2l6ZSgpLAotICAgICAgICAgICAgZXN0aW1hdG9yLT5jYWRlbmNlX3NpemVfZm9yX3Rlc3RpbmcoKSk7Ci0KLSAgLy8gU3BvdCB0d28gY3ljbGVzIG9mIHRoZSBjYWRlbmNlLgotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4cGVjdGVkX2NhZGVuY2VfdmVjdG9yLnNpemUoKSAqIDI7ICsraSkgewotICAgIEFTU0VSVF9FUShleHBlY3RlZF9jYWRlbmNlX3ZlY3RvcltpICUgZXhwZWN0ZWRfY2FkZW5jZV92ZWN0b3Iuc2l6ZSgpXSwKLSAgICAgICAgICAgICAgZXN0aW1hdG9yLT5HZXRDYWRlbmNlRm9yRnJhbWUoaSkpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRHJpZnQoCi0gICAgVmlkZW9DYWRlbmNlRXN0aW1hdG9yKiBlc3RpbWF0b3IsIGRvdWJsZSBmcmFtZV9oZXJ0eiwgZG91YmxlIHJlbmRlcl9oZXJ0eiwKLSAgICBiYXNlOjpUaW1lRGVsdGEgYWNjZXB0YWJsZV9kcmlmdCwgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkX2NhZGVuY2UpIHsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EZXZpYXRpb25BbmREcmlmdCgKLSAgICAgIGVzdGltYXRvciwgZnJhbWVfaGVydHosIHJlbmRlcl9oZXJ0eiwgYmFzZTo6VGltZURlbHRhKCksIGFjY2VwdGFibGVfZHJpZnQsCi0gICAgICBleHBlY3RlZF9jYWRlbmNlKTsKLX0KLQotc3RhdGljIHZvaWQgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EZXZpYXRpb24oCi0gICAgVmlkZW9DYWRlbmNlRXN0aW1hdG9yKiBlc3RpbWF0b3IsIGRvdWJsZSBmcmFtZV9oZXJ0eiwgZG91YmxlIHJlbmRlcl9oZXJ0eiwKLSAgICBiYXNlOjpUaW1lRGVsdGEgZGV2aWF0aW9uLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhwZWN0ZWRfY2FkZW5jZSkgewotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgYWNjZXB0YWJsZV9kcmlmdCA9Ci0gICAgICBzdGQ6Om1heChJbnRlcnZhbChmcmFtZV9oZXJ0eikgLyAyLCBJbnRlcnZhbChyZW5kZXJfaGVydHopKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EZXZpYXRpb25BbmREcmlmdCgKLSAgICAgIGVzdGltYXRvciwgZnJhbWVfaGVydHosIHJlbmRlcl9oZXJ0eiwgZGV2aWF0aW9uLCBhY2NlcHRhYmxlX2RyaWZ0LAotICAgICAgZXhwZWN0ZWRfY2FkZW5jZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFZlcmlmeUNhZGVuY2VWZWN0b3IoVmlkZW9DYWRlbmNlRXN0aW1hdG9yKiBlc3RpbWF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmcmFtZV9oZXJ0eiwgZG91YmxlIHJlbmRlcl9oZXJ0eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGV4cGVjdGVkX2NhZGVuY2UpIHsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGFjY2VwdGFibGVfZHJpZnQgPQotICAgICAgc3RkOjptYXgoSW50ZXJ2YWwoZnJhbWVfaGVydHopIC8gMiwgSW50ZXJ2YWwocmVuZGVyX2hlcnR6KSk7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRGV2aWF0aW9uQW5kRHJpZnQoCi0gICAgICBlc3RpbWF0b3IsIGZyYW1lX2hlcnR6LCByZW5kZXJfaGVydHosIGJhc2U6OlRpbWVEZWx0YSgpLCBhY2NlcHRhYmxlX2RyaWZ0LAotICAgICAgZXhwZWN0ZWRfY2FkZW5jZSk7Ci19Ci0KLS8vIFNwb3QgY2hlY2sgY29tbW9uIGRpc3BsYXkgYW5kIGZyYW1lIHJhdGUgcGFpcnMgZm9yIGNvcnJlY3RuZXNzLgotVEVTVChWaWRlb0NhZGVuY2VFc3RpbWF0b3JUZXN0LCBDYWRlbmNlQ2FsY3VsYXRpb25zKSB7Ci0gIFZpZGVvQ2FkZW5jZUVzdGltYXRvciBlc3RpbWF0b3IoCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKGtNaW5pbXVtQWNjZXB0YWJsZVRpbWVCZXR3ZWVuR2xpdGNoZXNTZWNzKSk7Ci0gIGVzdGltYXRvci5zZXRfY2FkZW5jZV9oeXN0ZXJlc2lzX3RocmVzaG9sZF9mb3JfdGVzdGluZyhiYXNlOjpUaW1lRGVsdGEoKSk7Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcga0VtcHR5Q2FkZW5jZSA9ICJbXSI7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgMSwgTlRTQyg2MCksICJbNjBdIik7Ci0KLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCAyNCwgNjAsICJbMzoyXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIE5UU0MoMjQpLCA2MCwgIlszOjJdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgMjQsIE5UU0MoNjApLCAiWzM6Ml0iKTsKLQotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDI1LCA2MCwgIlsyOjM6MjozOjJdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgTlRTQygyNSksIDYwLCAiWzI6MzoyOjM6Ml0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCAyNSwgTlRTQyg2MCksICJbMjozOjI6MzoyXSIpOwotCi0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgMzAsIDYwLCAiWzJdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgTlRTQygzMCksIDYwLCAiWzJdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgMjkuNSwgNjAsIGtFbXB0eUNhZGVuY2UpOwotCi0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgNTAsIDYwLCAiWzE6MToyOjE6MV0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCBOVFNDKDUwKSwgNjAsICJbMToxOjI6MToxXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDUwLCBOVFNDKDYwKSwgIlsxOjE6MjoxOjFdIik7Ci0KLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCBOVFNDKDYwKSwgNjAsICJbMV0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCA2MCwgTlRTQyg2MCksICJbMV0iKTsKLQotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDEyMCwgNjAsICJbMTowXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIE5UU0MoMTIwKSwgNjAsICJbMTowXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDEyMCwgTlRTQyg2MCksICJbMTowXSIpOwotCi0gIC8vIFRlc3QgY2FzZXMgZm9yIGNhZGVuY2UgYmVsb3cgMS4KLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCAxMjAsIDI0LCAiWzE6MDowOjA6MF0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCAxMjAsIDQ4LCAiWzE6MDowOjE6MF0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCAxMjAsIDcyLCAiWzE6MDoxOjA6MV0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcigmZXN0aW1hdG9yLCA5MCwgNjAsICJbMTowOjFdIik7Ci0KLSAgLy8gNTBIeiBpcyBjb21tb24gaW4gdGhlIEVVLgotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIE5UU0MoMjQpLCA1MCwga0VtcHR5Q2FkZW5jZSk7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgMjQsIDUwLCBrRW1wdHlDYWRlbmNlKTsKLQotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIE5UU0MoMjUpLCA1MCwgIlsyXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDI1LCA1MCwgIlsyXSIpOwotCi0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgTlRTQygzMCksIDUwLCAiWzI6MToyXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIDMwLCA1MCwgIlsyOjE6Ml0iKTsKLQotICBWZXJpZnlDYWRlbmNlVmVjdG9yKCZlc3RpbWF0b3IsIE5UU0MoNjApLCA1MCwga0VtcHR5Q2FkZW5jZSk7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3IoJmVzdGltYXRvciwgNjAsIDUwLCBrRW1wdHlDYWRlbmNlKTsKLX0KLQotLy8gQ2hlY2sgdGhlIGV4dHJlbWUgY2FzZSB0aGF0IG1heF9hY2NlcHRhYmxlX2RyaWZ0IGlzIGxhcmdlciB0aGFuCi0vLyBtaW5pbXVtX3RpbWVfdW50aWxfbWF4X2RyaWZ0LgotVEVTVChWaWRlb0NhZGVuY2VFc3RpbWF0b3JUZXN0LCBDYWRlbmNlQ2FsY3VsYXRpb25XaXRoTGFyZ2VEcmlmdCkgewotICBWaWRlb0NhZGVuY2VFc3RpbWF0b3IgZXN0aW1hdG9yKAotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyhrTWluaW11bUFjY2VwdGFibGVUaW1lQmV0d2VlbkdsaXRjaGVzU2VjcykpOwotICBlc3RpbWF0b3Iuc2V0X2NhZGVuY2VfaHlzdGVyZXNpc190aHJlc2hvbGRfZm9yX3Rlc3RpbmcoYmFzZTo6VGltZURlbHRhKCkpOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBkcmlmdCA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbUhvdXJzKDEpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURyaWZ0KCZlc3RpbWF0b3IsIDEsIE5UU0MoNjApLCBkcmlmdCwgIls2MF0iKTsKLQotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURyaWZ0KCZlc3RpbWF0b3IsIDMwLCA2MCwgZHJpZnQsICJbMl0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EcmlmdCgmZXN0aW1hdG9yLCBOVFNDKDMwKSwgNjAsIGRyaWZ0LCAiWzJdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRHJpZnQoJmVzdGltYXRvciwgMzAsIE5UU0MoNjApLCBkcmlmdCwgIlsyXSIpOwotCi0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRHJpZnQoJmVzdGltYXRvciwgMjUsIDYwLCBkcmlmdCwgIlsyXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURyaWZ0KCZlc3RpbWF0b3IsIE5UU0MoMjUpLCA2MCwgZHJpZnQsICJbMl0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EcmlmdCgmZXN0aW1hdG9yLCAyNSwgTlRTQyg2MCksIGRyaWZ0LCAiWzJdIik7Ci0KLSAgLy8gVGVzdCBjYXNlcyBmb3IgY2FkZW5jZSBiZWxvdyAxLgotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURyaWZ0KCZlc3RpbWF0b3IsIDEyMCwgMjQsIGRyaWZ0LCAiWzFdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRHJpZnQoJmVzdGltYXRvciwgMTIwLCA0OCwgZHJpZnQsICJbMV0iKTsKLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EcmlmdCgmZXN0aW1hdG9yLCAxMjAsIDcyLCBkcmlmdCwgIlsxXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURyaWZ0KCZlc3RpbWF0b3IsIDkwLCA2MCwgZHJpZnQsICJbMV0iKTsKLX0KLQotLy8gQ2hlY2sgdGhlIGNhc2UgdGhhdCB0aGUgZXN0aW1hdG9yIGV4Y2x1ZGVzIHZhcmlhYmxlIEZQUyBjYXNlIGZyb20gQ2FkZW5jZS4KLVRFU1QoVmlkZW9DYWRlbmNlRXN0aW1hdG9yVGVzdCwgQ2FkZW5jZUNhbGN1bGF0aW9uV2l0aExhcmdlRGV2aWF0aW9uKSB7Ci0gIFZpZGVvQ2FkZW5jZUVzdGltYXRvciBlc3RpbWF0b3IoCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKGtNaW5pbXVtQWNjZXB0YWJsZVRpbWVCZXR3ZWVuR2xpdGNoZXNTZWNzKSk7Ci0gIGVzdGltYXRvci5zZXRfY2FkZW5jZV9oeXN0ZXJlc2lzX3RocmVzaG9sZF9mb3JfdGVzdGluZyhiYXNlOjpUaW1lRGVsdGEoKSk7Ci0KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGRldmlhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygzMCk7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRGV2aWF0aW9uKCZlc3RpbWF0b3IsIDEsIDYwLCBkZXZpYXRpb24sICJbXSIpOwotICBWZXJpZnlDYWRlbmNlVmVjdG9yV2l0aEN1c3RvbURldmlhdGlvbigmZXN0aW1hdG9yLCAzMCwgNjAsIGRldmlhdGlvbiwgIltdIik7Ci0gIFZlcmlmeUNhZGVuY2VWZWN0b3JXaXRoQ3VzdG9tRGV2aWF0aW9uKCZlc3RpbWF0b3IsIDI1LCA2MCwgZGV2aWF0aW9uLCAiW10iKTsKLQotICAvLyBUZXN0IGNhc2VzIGZvciBjYWRlbmNlIHdpdGggbG93IHJlZnJlc2ggcmF0ZS4KLSAgVmVyaWZ5Q2FkZW5jZVZlY3RvcldpdGhDdXN0b21EZXZpYXRpb24oJmVzdGltYXRvciwgNjAsIDEyLCBkZXZpYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbMTowOjA6MDowXSIpOwotfQotCi1URVNUKFZpZGVvQ2FkZW5jZUVzdGltYXRvclRlc3QsIENhZGVuY2VWYXJpZXNXaXRoQWNjZXB0YWJsZURyaWZ0KSB7Ci0gIFZpZGVvQ2FkZW5jZUVzdGltYXRvciBlc3RpbWF0b3IoCi0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKGtNaW5pbXVtQWNjZXB0YWJsZVRpbWVCZXR3ZWVuR2xpdGNoZXNTZWNzKSk7Ci0gIGVzdGltYXRvci5zZXRfY2FkZW5jZV9oeXN0ZXJlc2lzX3RocmVzaG9sZF9mb3JfdGVzdGluZyhiYXNlOjpUaW1lRGVsdGEoKSk7Ci0KLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIHJlbmRlcl9pbnRlcnZhbCA9IEludGVydmFsKE5UU0MoNjApKTsKLSAgY29uc3QgYmFzZTo6VGltZURlbHRhIGZyYW1lX2ludGVydmFsID0gSW50ZXJ2YWwoMTIwKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgYWNjZXB0YWJsZV9kcmlmdCA9IGZyYW1lX2ludGVydmFsIC8gMjsKLSAgRVhQRUNUX0ZBTFNFKGVzdGltYXRvci5VcGRhdGVDYWRlbmNlRXN0aW1hdGUoCi0gICAgICByZW5kZXJfaW50ZXJ2YWwsIGZyYW1lX2ludGVydmFsLCBiYXNlOjpUaW1lRGVsdGEoKSwgYWNjZXB0YWJsZV9kcmlmdCkpOwotICBFWFBFQ1RfRkFMU0UoZXN0aW1hdG9yLmhhc19jYWRlbmNlKCkpOwotCi0gIC8vIEluY3JlYXNpbmcgdGhlIGFjY2VwdGFibGUgZHJpZnQgc2hvdWxkIGJlIHJlc3VsdCBpbiBtb3JlIHBlcm1pc3NpdmUKLSAgLy8gZGV0ZWN0aW9uIG9mIGNhZGVuY2UuCi0gIGFjY2VwdGFibGVfZHJpZnQgPSByZW5kZXJfaW50ZXJ2YWw7Ci0gIEVYUEVDVF9UUlVFKGVzdGltYXRvci5VcGRhdGVDYWRlbmNlRXN0aW1hdGUoCi0gICAgICByZW5kZXJfaW50ZXJ2YWwsIGZyYW1lX2ludGVydmFsLCBiYXNlOjpUaW1lRGVsdGEoKSwgYWNjZXB0YWJsZV9kcmlmdCkpOwotICBFWFBFQ1RfVFJVRShlc3RpbWF0b3IuaGFzX2NhZGVuY2UoKSk7Ci0gIEVYUEVDVF9FUSgiWzE6MF0iLCBlc3RpbWF0b3IuR2V0Q2FkZW5jZUZvclRlc3RpbmcoKSk7Ci19Ci0KLVRFU1QoVmlkZW9DYWRlbmNlRXN0aW1hdG9yVGVzdCwgQ2FkZW5jZVZhcmllc1dpdGhBY2NlcHRhYmxlR2xpdGNoVGltZSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9DYWRlbmNlRXN0aW1hdG9yPiBlc3RpbWF0b3IobmV3IFZpZGVvQ2FkZW5jZUVzdGltYXRvcigKLSAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoa01pbmltdW1BY2NlcHRhYmxlVGltZUJldHdlZW5HbGl0Y2hlc1NlY3MpKSk7Ci0gIGVzdGltYXRvci0+c2V0X2NhZGVuY2VfaHlzdGVyZXNpc190aHJlc2hvbGRfZm9yX3Rlc3RpbmcoYmFzZTo6VGltZURlbHRhKCkpOwotCi0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSByZW5kZXJfaW50ZXJ2YWwgPSBJbnRlcnZhbChOVFNDKDYwKSk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBmcmFtZV9pbnRlcnZhbCA9IEludGVydmFsKDEyMCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBhY2NlcHRhYmxlX2RyaWZ0ID0gZnJhbWVfaW50ZXJ2YWwgLyAyOwotCi0gIEVYUEVDVF9GQUxTRShlc3RpbWF0b3ItPlVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgKLSAgICAgIHJlbmRlcl9pbnRlcnZhbCwgZnJhbWVfaW50ZXJ2YWwsIGJhc2U6OlRpbWVEZWx0YSgpLCBhY2NlcHRhYmxlX2RyaWZ0KSk7Ci0gIEVYUEVDVF9GQUxTRShlc3RpbWF0b3ItPmhhc19jYWRlbmNlKCkpOwotCi0gIC8vIERlY3JlYXNpbmcgdGhlIGFjY2VwdGFibGUgZ2xpdGNoIHRpbWUgc2hvdWxkIGJlIHJlc3VsdCBpbiBtb3JlIHBlcm1pc3NpdmUKLSAgLy8gZGV0ZWN0aW9uIG9mIGNhZGVuY2UuCi0gIGVzdGltYXRvci5yZXNldChuZXcgVmlkZW9DYWRlbmNlRXN0aW1hdG9yKGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoCi0gICAgICBrTWluaW11bUFjY2VwdGFibGVUaW1lQmV0d2VlbkdsaXRjaGVzU2VjcyAvIDIpKSk7Ci0gIGVzdGltYXRvci0+c2V0X2NhZGVuY2VfaHlzdGVyZXNpc190aHJlc2hvbGRfZm9yX3Rlc3RpbmcoYmFzZTo6VGltZURlbHRhKCkpOwotICBFWFBFQ1RfVFJVRShlc3RpbWF0b3ItPlVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgKLSAgICAgIHJlbmRlcl9pbnRlcnZhbCwgZnJhbWVfaW50ZXJ2YWwsIGJhc2U6OlRpbWVEZWx0YSgpLCBhY2NlcHRhYmxlX2RyaWZ0KSk7Ci0gIEVYUEVDVF9UUlVFKGVzdGltYXRvci0+aGFzX2NhZGVuY2UoKSk7Ci0gIEVYUEVDVF9FUSgiWzE6MF0iLCBlc3RpbWF0b3ItPkdldENhZGVuY2VGb3JUZXN0aW5nKCkpOwotfQotCi1URVNUKFZpZGVvQ2FkZW5jZUVzdGltYXRvclRlc3QsIENhZGVuY2VIeXN0ZXJzaXNQcmV2ZW50c09zY2lsbGF0aW9uKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0NhZGVuY2VFc3RpbWF0b3I+IGVzdGltYXRvcihuZXcgVmlkZW9DYWRlbmNlRXN0aW1hdG9yKAotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcyhrTWluaW11bUFjY2VwdGFibGVUaW1lQmV0d2VlbkdsaXRjaGVzU2VjcykpKTsKLQotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgcmVuZGVyX2ludGVydmFsID0gSW50ZXJ2YWwoMzApOwotICBjb25zdCBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfaW50ZXJ2YWwgPSBJbnRlcnZhbCg2MCk7Ci0gIGNvbnN0IGJhc2U6OlRpbWVEZWx0YSBhY2NlcHRhYmxlX2RyaWZ0ID0gZnJhbWVfaW50ZXJ2YWwgLyAyOwotICBlc3RpbWF0b3ItPnNldF9jYWRlbmNlX2h5c3RlcmVzaXNfdGhyZXNob2xkX2Zvcl90ZXN0aW5nKHJlbmRlcl9pbnRlcnZhbCAqIDIpOwotCi0gIC8vIENhZGVuY2UgaHlzdGVyZXNpcyBzaG91bGQgcHJldmVudCB0aGUgY2FkZW5jZSBmcm9tIHRha2luZyBlZmZlY3QgeWV0LgotICBFWFBFQ1RfRkFMU0UoZXN0aW1hdG9yLT5VcGRhdGVDYWRlbmNlRXN0aW1hdGUoCi0gICAgICByZW5kZXJfaW50ZXJ2YWwsIGZyYW1lX2ludGVydmFsLCBiYXNlOjpUaW1lRGVsdGEoKSwgYWNjZXB0YWJsZV9kcmlmdCkpOwotICBFWFBFQ1RfRkFMU0UoZXN0aW1hdG9yLT5oYXNfY2FkZW5jZSgpKTsKLQotICAvLyBBIHNlY29uZCBjYWxsIHNob3VsZCBleGNlZWQgY2FkZW5jZSBoeXN0ZXJlc2lzIGFuZCB0YWtlIGludG8gZWZmZWN0LgotICBFWFBFQ1RfVFJVRShlc3RpbWF0b3ItPlVwZGF0ZUNhZGVuY2VFc3RpbWF0ZSgKLSAgICAgIHJlbmRlcl9pbnRlcnZhbCwgZnJhbWVfaW50ZXJ2YWwsIGJhc2U6OlRpbWVEZWx0YSgpLCBhY2NlcHRhYmxlX2RyaWZ0KSk7Ci0gIEVYUEVDVF9UUlVFKGVzdGltYXRvci0+aGFzX2NhZGVuY2UoKSk7Ci0KLSAgLy8gT25lIGJhZCBpbnRlcnZhbCBzaG91bGRuJ3QgY2F1c2UgY2FkZW5jZSB0byBkcm9wCi0gIEVYUEVDVF9GQUxTRSgKLSAgICAgIGVzdGltYXRvci0+VXBkYXRlQ2FkZW5jZUVzdGltYXRlKHJlbmRlcl9pbnRlcnZhbCwgZnJhbWVfaW50ZXJ2YWwgKiAwLjc1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKCksIGFjY2VwdGFibGVfZHJpZnQpKTsKLSAgRVhQRUNUX1RSVUUoZXN0aW1hdG9yLT5oYXNfY2FkZW5jZSgpKTsKLQotICAvLyBSZXN1bXB0aW9uIG9mIGNhZGVuY2Ugc2hvdWxkIGNsZWFyIGJhZCBpbnRlcnZhbCBjb3VudC4KLSAgRVhQRUNUX0ZBTFNFKGVzdGltYXRvci0+VXBkYXRlQ2FkZW5jZUVzdGltYXRlKAotICAgICAgcmVuZGVyX2ludGVydmFsLCBmcmFtZV9pbnRlcnZhbCwgYmFzZTo6VGltZURlbHRhKCksIGFjY2VwdGFibGVfZHJpZnQpKTsKLSAgRVhQRUNUX1RSVUUoZXN0aW1hdG9yLT5oYXNfY2FkZW5jZSgpKTsKLQotICAvLyBTbyBvbmUgbW9yZSBiYWQgaW50ZXJ2YWwgc2hvdWxkbid0IGNhdXNlIGNhZGVuY2UgdG8gZHJvcAotICBFWFBFQ1RfRkFMU0UoCi0gICAgICBlc3RpbWF0b3ItPlVwZGF0ZUNhZGVuY2VFc3RpbWF0ZShyZW5kZXJfaW50ZXJ2YWwsIGZyYW1lX2ludGVydmFsICogMC43NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSgpLCBhY2NlcHRhYmxlX2RyaWZ0KSk7Ci0gIEVYUEVDVF9UUlVFKGVzdGltYXRvci0+aGFzX2NhZGVuY2UoKSk7Ci0KLSAgLy8gVHdvIGJhZCBpbnRlcnZhbHMgc2hvdWxkLgotICBFWFBFQ1RfVFJVRSgKLSAgICAgIGVzdGltYXRvci0+VXBkYXRlQ2FkZW5jZUVzdGltYXRlKHJlbmRlcl9pbnRlcnZhbCwgZnJhbWVfaW50ZXJ2YWwgKiAwLjc1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKCksIGFjY2VwdGFibGVfZHJpZnQpKTsKLSAgRVhQRUNUX0ZBTFNFKGVzdGltYXRvci0+aGFzX2NhZGVuY2UoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdmlkZW9fZGVjb2Rlcl9zZWxlY3Rvcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZpZGVvX2RlY29kZXJfc2VsZWN0b3JfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTE2ODIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdmlkZW9fZGVjb2Rlcl9zZWxlY3Rvcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCi0jaW5jbHVkZSAiYmFzZS9ydW5fbG9vcC5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2dtb2NrX2NhbGxiYWNrX3N1cHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX2ZpbHRlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2hlbHBlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9kZWNvZGVyX3NlbGVjdG9yLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvZGVjcnlwdGluZ19kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6Ol87Ci11c2luZyA6OnRlc3Rpbmc6OklzTnVsbDsKLXVzaW5nIDo6dGVzdGluZzo6TmljZU1vY2s7Ci11c2luZyA6OnRlc3Rpbmc6Ok5vdE51bGw7Ci11c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKLXVzaW5nIDo6dGVzdGluZzo6U3RyaWN0TW9jazsKLQotLy8gVXNlIGFub255bW91cyBuYW1lc3BhY2UgaGVyZSB0byBwcmV2ZW50IHRoZSBhY3Rpb25zIHRvIGJlIGRlZmluZWQgbXVsdGlwbGUKLS8vIHRpbWVzIGFjcm9zcyBtdWx0aXBsZSB0ZXN0IGZpbGVzLiBTYWRseSB3ZSBjYW4ndCB1c2Ugc3RhdGljIGZvciB0aGVtLgotbmFtZXNwYWNlIHsKLQotTUFUQ0hFUihFbmNyeXB0ZWRDb25maWcsICIiKSB7IHJldHVybiBhcmcuaXNfZW5jcnlwdGVkKCk7IH0KLU1BVENIRVIoQ2xlYXJDb25maWcsICIiKSB7IHJldHVybiAhYXJnLmlzX2VuY3J5cHRlZCgpOyB9Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgZW51bSBEZWNyeXB0b3JDYXBhYmlsaXR5IHsKLSAgICBrTm9DZG0sICAgICAgICAvLyBObyBDRE0uIE9ubHkgcG9zc2libGUgZm9yIGNsZWFyIHN0cmVhbS4KLSAgICBrTm9EZWNyeXB0b3IsICAvLyBDRE0gaXMgYXZhaWxhYmxlIGJ1dCBEZWNyeXB0b3IgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBrRGVjcnlwdE9ubHksCi0gICAga0RlY3J5cHRBbmREZWNvZGUKLSAgfTsKLQotICBWaWRlb0RlY29kZXJTZWxlY3RvclRlc3QoKQotICAgICAgOiBtZWRpYV9sb2dfKG5ldyBNZWRpYUxvZygpKSwKLSAgICAgICAgdHJhaXRzXyhtZWRpYV9sb2dfKSwKLSAgICAgICAgZGVtdXhlcl9zdHJlYW1fKAotICAgICAgICAgICAgbmV3IFN0cmljdE1vY2s8TW9ja0RlbXV4ZXJTdHJlYW0+KERlbXV4ZXJTdHJlYW06OlZJREVPKSksCi0gICAgICAgIGRlY29kZXJfMV8obmV3IFN0cmljdE1vY2s8TW9ja1ZpZGVvRGVjb2Rlcj4oKSksCi0gICAgICAgIGRlY29kZXJfMl8obmV3IFN0cmljdE1vY2s8TW9ja1ZpZGVvRGVjb2Rlcj4oKSkgewotICAgIGFsbF9kZWNvZGVyc18ucHVzaF9iYWNrKGRlY29kZXJfMV8pOwotICAgIGFsbF9kZWNvZGVyc18ucHVzaF9iYWNrKGRlY29kZXJfMl8pOwotICAgIC8vIHxjZG1fY29udGV4dF98IGFuZCB8ZGVjcnlwdG9yX3wgYXJlIGNvbmRpdGlvbmFsbHkgY3JlYXRlZCBpbgotICAgIC8vIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3IoKS4KLSAgfQotCi0gIH5WaWRlb0RlY29kZXJTZWxlY3RvclRlc3QoKSB7IGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsgfQotCi0gIE1PQ0tfTUVUSE9EMihPbkRlY29kZXJTZWxlY3RlZCwKLSAgICAgICAgICAgICAgIHZvaWQoVmlkZW9EZWNvZGVyKiwgRGVjcnlwdGluZ0RlbXV4ZXJTdHJlYW0qKSk7Ci0KLSAgdm9pZCBNb2NrT25EZWNvZGVyU2VsZWN0ZWQoc3RkOjp1bmlxdWVfcHRyPFZpZGVvRGVjb2Rlcj4gZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERlY3J5cHRpbmdEZW11eGVyU3RyZWFtPiBzdHJlYW0pIHsKLSAgICBPbkRlY29kZXJTZWxlY3RlZChkZWNvZGVyLmdldCgpLCBzdHJlYW0uZ2V0KCkpOwotICAgIHNlbGVjdGVkX2RlY29kZXJfID0gc3RkOjptb3ZlKGRlY29kZXIpOwotICB9Ci0KLSAgdm9pZCBVc2VDbGVhclN0cmVhbSgpIHsKLSAgICBkZW11eGVyX3N0cmVhbV8tPnNldF92aWRlb19kZWNvZGVyX2NvbmZpZyhUZXN0VmlkZW9Db25maWc6Ok5vcm1hbCgpKTsKLSAgfQotCi0gIHZvaWQgVXNlRW5jcnlwdGVkU3RyZWFtKCkgewotICAgIGRlbXV4ZXJfc3RyZWFtXy0+c2V0X3ZpZGVvX2RlY29kZXJfY29uZmlnKAotICAgICAgICBUZXN0VmlkZW9Db25maWc6Ok5vcm1hbEVuY3J5cHRlZCgpKTsKLSAgfQotCi0gIHZvaWQgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihEZWNyeXB0b3JDYXBhYmlsaXR5IGRlY3J5cHRvcl9jYXBhYmlsaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9kZWNvZGVycykgewotICAgIGlmIChkZWNyeXB0b3JfY2FwYWJpbGl0eSAhPSBrTm9DZG0pIHsKLSAgICAgIGNkbV9jb250ZXh0Xy5yZXNldChuZXcgU3RyaWN0TW9jazxNb2NrQ2RtQ29udGV4dD4oKSk7Ci0KLSAgICAgIGlmIChkZWNyeXB0b3JfY2FwYWJpbGl0eSA9PSBrTm9EZWNyeXB0b3IpIHsKLSAgICAgICAgRVhQRUNUX0NBTEwoKmNkbV9jb250ZXh0XywgR2V0RGVjcnlwdG9yKCkpLldpbGxSZXBlYXRlZGx5KFJldHVybihOVUxMKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkZWNyeXB0b3JfLnJlc2V0KG5ldyBOaWNlTW9jazxNb2NrRGVjcnlwdG9yPigpKTsKLSAgICAgICAgRVhQRUNUX0NBTEwoKmNkbV9jb250ZXh0XywgR2V0RGVjcnlwdG9yKCkpCi0gICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoUmV0dXJuKGRlY3J5cHRvcl8uZ2V0KCkpKTsKLSAgICAgICAgRVhQRUNUX0NBTEwoKmRlY3J5cHRvcl8sIEluaXRpYWxpemVWaWRlb0RlY29kZXIoXywgXykpCi0gICAgICAgICAgICAuV2lsbFJlcGVhdGVkbHkoCi0gICAgICAgICAgICAgICAgUnVuQ2FsbGJhY2s8MT4oZGVjcnlwdG9yX2NhcGFiaWxpdHkgPT0ga0RlY3J5cHRBbmREZWNvZGUpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBEQ0hFQ0tfR0UoYWxsX2RlY29kZXJzXy5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4obnVtX2RlY29kZXJzKSk7Ci0gICAgYWxsX2RlY29kZXJzXy5lcmFzZShhbGxfZGVjb2RlcnNfLmJlZ2luKCkgKyBudW1fZGVjb2RlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxfZGVjb2RlcnNfLmVuZCgpKTsKLQotICAgIGRlY29kZXJfc2VsZWN0b3JfLnJlc2V0KG5ldyBWaWRlb0RlY29kZXJTZWxlY3RvcigKLSAgICAgICAgbWVzc2FnZV9sb29wXy50YXNrX3J1bm5lcigpLCBzdGQ6Om1vdmUoYWxsX2RlY29kZXJzXyksIG1lZGlhX2xvZ18pKTsKLSAgfQotCi0gIHZvaWQgU2VsZWN0RGVjb2RlcigpIHsKLSAgICBkZWNvZGVyX3NlbGVjdG9yXy0+U2VsZWN0RGVjb2RlcigKLSAgICAgICAgJnRyYWl0c18sIGRlbXV4ZXJfc3RyZWFtXy5nZXQoKSwgY2RtX2NvbnRleHRfLmdldCgpLAotICAgICAgICBiYXNlOjpCaW5kKCZWaWRlb0RlY29kZXJTZWxlY3RvclRlc3Q6Ok1vY2tPbkRlY29kZXJTZWxlY3RlZCwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgYmFzZTo6QmluZCgmVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0OjpGcmFtZVJlYWR5LAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgICBiYXNlOjpCaW5kKCZWaWRlb0RlY29kZXJTZWxlY3RvclRlc3Q6Ok9uV2FpdGluZ0ZvckRlY3J5cHRpb25LZXksCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOwotICAgIGJhc2U6OlJ1bkxvb3AoKS5SdW5VbnRpbElkbGUoKTsKLSAgfQotCi0gIHZvaWQgU2VsZWN0RGVjb2RlckFuZERlc3Ryb3koKSB7Ci0gICAgU2VsZWN0RGVjb2RlcigpOwotCi0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKElzTnVsbCgpLCBJc051bGwoKSkpOwotICAgIGRlY29kZXJfc2VsZWN0b3JfLnJlc2V0KCk7Ci0gICAgYmFzZTo6UnVuTG9vcCgpLlJ1blVudGlsSWRsZSgpOwotICB9Ci0KLSAgdm9pZCBGcmFtZVJlYWR5KGNvbnN0IHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4mIGZyYW1lKSB7IE5PVFJFQUNIRUQoKTsgfQotCi0gIHZvaWQgT25XYWl0aW5nRm9yRGVjcnlwdGlvbktleSgpIHsgTk9UUkVBQ0hFRCgpOyB9Ci0KLSAgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4gbWVkaWFfbG9nXzsKLQotICAvLyBTdHJlYW0gdHJhaXRzIHNwZWNpZmljIHRvIHZpZGVvIGRlY29kaW5nLgotICBEZWNvZGVyU3RyZWFtVHJhaXRzPERlbXV4ZXJTdHJlYW06OlZJREVPPiB0cmFpdHNfOwotCi0gIC8vIERlY2xhcmUgfGRlY29kZXJfc2VsZWN0b3JffCBhZnRlciB8ZGVtdXhlcl9zdHJlYW1ffCBhbmQgfGRlY3J5cHRvcl98IHNpbmNlCi0gIC8vIHxkZW11eGVyX3N0cmVhbV98IGFuZCB8ZGVjcnlwdG9yX3wgc2hvdWxkIG91dGxpdmUgfGRlY29kZXJfc2VsZWN0b3JffC4KLSAgc3RkOjp1bmlxdWVfcHRyPFN0cmljdE1vY2s8TW9ja0RlbXV4ZXJTdHJlYW0+PiBkZW11eGVyX3N0cmVhbV87Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFN0cmljdE1vY2s8TW9ja0NkbUNvbnRleHQ+PiBjZG1fY29udGV4dF87Ci0KLSAgLy8gVXNlIE5pY2VNb2NrIHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgbW9zdCBvZiBjYWxscyBvbiB0aGUgZGVjcnlwdG9yLCBlLmcuCi0gIC8vIFJlZ2lzdGVyTmV3S2V5Q0IoKS4KLSAgc3RkOjp1bmlxdWVfcHRyPE5pY2VNb2NrPE1vY2tEZWNyeXB0b3I+PiBkZWNyeXB0b3JfOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0RlY29kZXJTZWxlY3Rvcj4gZGVjb2Rlcl9zZWxlY3Rvcl87Ci0KLSAgU3RyaWN0TW9jazxNb2NrVmlkZW9EZWNvZGVyPiogZGVjb2Rlcl8xXzsKLSAgU3RyaWN0TW9jazxNb2NrVmlkZW9EZWNvZGVyPiogZGVjb2Rlcl8yXzsKLSAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZpZGVvRGVjb2Rlcj4+IGFsbF9kZWNvZGVyc187Ci0gIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb0RlY29kZXI+IHNlbGVjdGVkX2RlY29kZXJfOwotCi0gIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcF87Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0KTsKLX07Ci0KLS8vIFRPRE8oeGh3YW5nKTogQWRkIGtOb0NkbSB0ZXN0cyBmb3IgY2xlYXIgc3RyZWFtLgotCi0vLyBUaGUgc3RyZWFtIGlzIG5vdCBlbmNyeXB0ZWQgYnV0IHdlIGhhdmUgbm8gY2xlYXIgZGVjb2Rlci4gTm8gZGVjb2RlciBjYW4gYmUKLS8vIHNlbGVjdGVkLgotVEVTVF9GKFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCwgQ2xlYXJTdHJlYW1fTm9EZWNyeXB0b3JfTm9DbGVhckRlY29kZXIpIHsKLSAgVXNlQ2xlYXJTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrTm9EZWNyeXB0b3IsIDApOwotCi0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkRlY29kZXJTZWxlY3RlZChJc051bGwoKSwgSXNOdWxsKCkpKTsKLQotICBTZWxlY3REZWNvZGVyKCk7Ci19Ci0KLS8vIFRoZSBzdHJlYW0gaXMgbm90IGVuY3J5cHRlZCBhbmQgd2UgaGF2ZSBvbmUgY2xlYXIgZGVjb2Rlci4gVGhlIGRlY29kZXIKLS8vIHdpbGwgYmUgc2VsZWN0ZWQuCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LCBDbGVhclN0cmVhbV9Ob0RlY3J5cHRvcl9PbmVDbGVhckRlY29kZXIpIHsKLSAgVXNlQ2xlYXJTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrTm9EZWNyeXB0b3IsIDEpOwotCi0gIEVYUEVDVF9DQUxMKCpkZWNvZGVyXzFfLCBJbml0aWFsaXplKENsZWFyQ29uZmlnKCksIF8sIF8sIF8sIF8pKQotICAgICAgLldpbGxPbmNlKFJ1bkNhbGxiYWNrPDM+KHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKGRlY29kZXJfMV8sIElzTnVsbCgpKSk7Ci0KLSAgU2VsZWN0RGVjb2RlcigpOwotfQotCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LAotICAgICAgIERlc3Ryb3lfQ2xlYXJTdHJlYW1fTm9EZWNyeXB0b3JfT25lQ2xlYXJEZWNvZGVyKSB7Ci0gIFVzZUNsZWFyU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAxKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShDbGVhckNvbmZpZygpLCBfLCBfLCBfLCBfKSk7Ci0KLSAgU2VsZWN0RGVjb2RlckFuZERlc3Ryb3koKTsKLX0KLQotLy8gVGhlIHN0cmVhbSBpcyBub3QgZW5jcnlwdGVkIGFuZCB3ZSBoYXZlIG11bHRpcGxlIGNsZWFyIGRlY29kZXJzLiBUaGUgZmlyc3QKLS8vIGRlY29kZXIgdGhhdCBjYW4gZGVjb2RlIHRoZSBpbnB1dCBzdHJlYW0gd2lsbCBiZSBzZWxlY3RlZC4KLVRFU1RfRihWaWRlb0RlY29kZXJTZWxlY3RvclRlc3QsIENsZWFyU3RyZWFtX05vRGVjcnlwdG9yX011bHRpcGxlQ2xlYXJEZWNvZGVyKSB7Ci0gIFVzZUNsZWFyU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAyKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShDbGVhckNvbmZpZygpLCBfLCBfLCBfLCBfKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwzPihmYWxzZSkpOwotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8yXywgSW5pdGlhbGl6ZShDbGVhckNvbmZpZygpLCBfLCBfLCBfLCBfKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwzPih0cnVlKSk7Ci0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkRlY29kZXJTZWxlY3RlZChkZWNvZGVyXzJfLCBJc051bGwoKSkpOwotCi0gIFNlbGVjdERlY29kZXIoKTsKLX0KLQotVEVTVF9GKFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCwKLSAgICAgICBEZXN0cm95X0NsZWFyU3RyZWFtX05vRGVjcnlwdG9yX011bHRpcGxlQ2xlYXJEZWNvZGVyKSB7Ci0gIFVzZUNsZWFyU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAyKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShDbGVhckNvbmZpZygpLCBfLCBfLCBfLCBfKSkKLSAgICAgIC5XaWxsT25jZShSdW5DYWxsYmFjazwzPihmYWxzZSkpOwotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8yXywgSW5pdGlhbGl6ZShDbGVhckNvbmZpZygpLCBfLCBfLCBfLCBfKSk7Ci0KLSAgU2VsZWN0RGVjb2RlckFuZERlc3Ryb3koKTsKLX0KLQotLy8gVGhlcmUgaXMgYSBkZWNyeXB0b3IgYnV0IHRoZSBzdHJlYW0gaXMgbm90IGVuY3J5cHRlZC4gVGhlIGRlY29kZXIgd2lsbCBiZQotLy8gc2VsZWN0ZWQuCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LCBDbGVhclN0cmVhbV9IYXNEZWNyeXB0b3IpIHsKLSAgVXNlQ2xlYXJTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrRGVjcnlwdE9ubHksIDEpOwotCi0gIEVYUEVDVF9DQUxMKCpkZWNvZGVyXzFfLCBJbml0aWFsaXplKENsZWFyQ29uZmlnKCksIF8sIF8sIF8sIF8pKQotICAgICAgLldpbGxPbmNlKFJ1bkNhbGxiYWNrPDM+KHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKGRlY29kZXJfMV8sIElzTnVsbCgpKSk7Ci0KLSAgU2VsZWN0RGVjb2RlcigpOwotfQotCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LCBEZXN0cm95X0NsZWFyU3RyZWFtX0hhc0RlY3J5cHRvcikgewotICBVc2VDbGVhclN0cmVhbSgpOwotICBJbml0aWFsaXplRGVjb2RlclNlbGVjdG9yKGtEZWNyeXB0T25seSwgMSk7Ci0KLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMV8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpOwotCi0gIFNlbGVjdERlY29kZXJBbmREZXN0cm95KCk7Ci19Ci0KLS8vIFRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCB0aGVyZSdzIG5vIGRlY3J5cHRvci4gVGhlIGRlY29kZXIgb25seSBzdXBwb3J0cwotLy8gY2xlYXIgc3RyZWFtcyBzbyBubyBkZWNvZGVyIGNhbiBiZSBzZWxlY3RlZC4KLVRFU1RfRihWaWRlb0RlY29kZXJTZWxlY3RvclRlc3QsIEVuY3J5cHRlZFN0cmVhbV9Ob0RlY3J5cHRvcl9PbmVDbGVhckRlY29kZXIpIHsKLSAgVXNlRW5jcnlwdGVkU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAxKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShFbmNyeXB0ZWRDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4oZmFsc2UpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKElzTnVsbCgpLCBJc051bGwoKSkpOwotCi0gIFNlbGVjdERlY29kZXIoKTsKLX0KLQotVEVTVF9GKFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCwKLSAgICAgICBEZXN0cm95X0VuY3J5cHRlZFN0cmVhbV9Ob0RlY3J5cHRvcl9PbmVDbGVhckRlY29kZXIpIHsKLSAgVXNlRW5jcnlwdGVkU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAxKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShFbmNyeXB0ZWRDb25maWcoKSwgXywgXywgXywgXykpOwotCi0gIFNlbGVjdERlY29kZXJBbmREZXN0cm95KCk7Ci19Ci0KLS8vIFRoZSBzdHJlYW0gaXMgZW5jcnlwdGVkIGFuZCB0aGVyZSdzIG5vIGRlY3J5cHRvci4gVGhlcmUgYXJlIG11bHRpcGxlIGRlY29kZXJzCi0vLyBhbmQgdGhlIGZpcnN0IG9uZSB0aGF0IHN1cHBvcnRzIGVuY3J5cHRlZCBzdHJlYW1zIGlzIHNlbGVjdGVkLgotVEVTVF9GKFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCwgRW5jcnlwdGVkU3RyZWFtX05vRGVjcnlwdG9yX011bHRpcGxlRGVjb2RlcnMpIHsKLSAgVXNlRW5jcnlwdGVkU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAyKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShFbmNyeXB0ZWRDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4oZmFsc2UpKTsKLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMl8sIEluaXRpYWxpemUoRW5jcnlwdGVkQ29uZmlnKCksIF8sIF8sIF8sIF8pKQotICAgICAgLldpbGxPbmNlKFJ1bkNhbGxiYWNrPDM+KHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKGRlY29kZXJfMl8sIElzTnVsbCgpKSk7Ci0KLSAgU2VsZWN0RGVjb2RlcigpOwotfQotCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LAotICAgICAgIERlc3Ryb3lfRW5jcnlwdGVkU3RyZWFtX05vRGVjcnlwdG9yX011bHRpcGxlRGVjb2RlcnMpIHsKLSAgVXNlRW5jcnlwdGVkU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa05vRGVjcnlwdG9yLCAyKTsKLQotICBFWFBFQ1RfQ0FMTCgqZGVjb2Rlcl8xXywgSW5pdGlhbGl6ZShFbmNyeXB0ZWRDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4oZmFsc2UpKTsKLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMl8sIEluaXRpYWxpemUoRW5jcnlwdGVkQ29uZmlnKCksIF8sIF8sIF8sIF8pKTsKLQotICBTZWxlY3REZWNvZGVyQW5kRGVzdHJveSgpOwotfQotCi0vLyBEZWNyeXB0b3IgY2FuIG9ubHkgZG8gZGVjcnlwdGlvbiBhbmQgdGhlcmUncyBubyBkZWNvZGVyIGF2YWlsYWJsZS4gTm8gZGVjb2RlcgotLy8gY2FuIGJlIHNlbGVjdGVkLgotVEVTVF9GKFZpZGVvRGVjb2RlclNlbGVjdG9yVGVzdCwgRW5jcnlwdGVkU3RyZWFtX0RlY3J5cHRPbmx5X05vRGVjb2RlcikgewotICBVc2VFbmNyeXB0ZWRTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrRGVjcnlwdE9ubHksIDApOwotCi0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkRlY29kZXJTZWxlY3RlZChJc051bGwoKSwgSXNOdWxsKCkpKTsKLQotICBTZWxlY3REZWNvZGVyKCk7Ci19Ci0KLS8vIERlY3J5cHRvciBjYW4gZG8gZGVjcnlwdGlvbi1vbmx5IGFuZCB0aGVyZSdzIGEgZGVjb2RlciBhdmFpbGFibGUuIFRoZSBkZWNvZGVyCi0vLyB3aWxsIGJlIHNlbGVjdGVkIGFuZCBhIERlY3J5cHRpbmdEZW11eGVyU3RyZWFtIHdpbGwgYmUgY3JlYXRlZC4KLVRFU1RfRihWaWRlb0RlY29kZXJTZWxlY3RvclRlc3QsIEVuY3J5cHRlZFN0cmVhbV9EZWNyeXB0T25seV9PbmVDbGVhckRlY29kZXIpIHsKLSAgVXNlRW5jcnlwdGVkU3RyZWFtKCk7Ci0gIEluaXRpYWxpemVEZWNvZGVyU2VsZWN0b3Ioa0RlY3J5cHRPbmx5LCAxKTsKLQotICAvLyBTaW5jZSB3ZSB1c2UgRGVjcnlwdGluZ0RlbXV4ZXJTdHJlYW0sIHRoZSBkZWNvZGVyIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aAotICAvLyBhIGNsZWFyIGNvbmZpZy4KLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMV8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4odHJ1ZSkpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25EZWNvZGVyU2VsZWN0ZWQoZGVjb2Rlcl8xXywgTm90TnVsbCgpKSk7Ci0KLSAgU2VsZWN0RGVjb2RlcigpOwotfQotCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LAotICAgICAgIERlc3Ryb3lfRW5jcnlwdGVkU3RyZWFtX0RlY3J5cHRPbmx5X09uZUNsZWFyRGVjb2RlcikgewotICBVc2VFbmNyeXB0ZWRTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrRGVjcnlwdE9ubHksIDEpOwotCi0gIEVYUEVDVF9DQUxMKCpkZWNvZGVyXzFfLCBJbml0aWFsaXplKENsZWFyQ29uZmlnKCksIF8sIF8sIF8sIF8pKTsKLQotICBTZWxlY3REZWNvZGVyQW5kRGVzdHJveSgpOwotfQotCi0vLyBEZWNyeXB0b3IgY2FuIG9ubHkgZG8gZGVjcnlwdGlvbiBhbmQgdGhlcmUgYXJlIG11bHRpcGxlIGRlY29kZXJzIGF2YWlsYWJsZS4KLS8vIFRoZSBmaXJzdCBkZWNvZGVyIHRoYXQgY2FuIGRlY29kZSB0aGUgaW5wdXQgc3RyZWFtIHdpbGwgYmUgc2VsZWN0ZWQgYW5kCi0vLyBhIERlY3J5cHRpbmdEZW11eGVyU3RyZWFtIHdpbGwgYmUgY3JlYXRlZC4KLVRFU1RfRihWaWRlb0RlY29kZXJTZWxlY3RvclRlc3QsCi0gICAgICAgRW5jcnlwdGVkU3RyZWFtX0RlY3J5cHRPbmx5X011bHRpcGxlQ2xlYXJEZWNvZGVyKSB7Ci0gIFVzZUVuY3J5cHRlZFN0cmVhbSgpOwotICBJbml0aWFsaXplRGVjb2RlclNlbGVjdG9yKGtEZWNyeXB0T25seSwgMik7Ci0KLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMV8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4oZmFsc2UpKTsKLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMl8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4odHJ1ZSkpOwotICBFWFBFQ1RfQ0FMTCgqdGhpcywgT25EZWNvZGVyU2VsZWN0ZWQoZGVjb2Rlcl8yXywgTm90TnVsbCgpKSk7Ci0KLSAgU2VsZWN0RGVjb2RlcigpOwotfQotCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LAotICAgICAgIERlc3Ryb3lfRW5jcnlwdGVkU3RyZWFtX0RlY3J5cHRPbmx5X011bHRpcGxlQ2xlYXJEZWNvZGVyKSB7Ci0gIFVzZUVuY3J5cHRlZFN0cmVhbSgpOwotICBJbml0aWFsaXplRGVjb2RlclNlbGVjdG9yKGtEZWNyeXB0T25seSwgMik7Ci0KLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMV8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpCi0gICAgICAuV2lsbE9uY2UoUnVuQ2FsbGJhY2s8Mz4oZmFsc2UpKTsKLSAgRVhQRUNUX0NBTEwoKmRlY29kZXJfMl8sIEluaXRpYWxpemUoQ2xlYXJDb25maWcoKSwgXywgXywgXywgXykpOwotCi0gIFNlbGVjdERlY29kZXJBbmREZXN0cm95KCk7Ci19Ci0KLS8vIERlY3J5cHRvciBjYW4gZG8gZGVjcnlwdGlvbiBhbmQgZGVjb2RpbmcuCi1URVNUX0YoVmlkZW9EZWNvZGVyU2VsZWN0b3JUZXN0LCBFbmNyeXB0ZWRTdHJlYW1fRGVjcnlwdEFuZERlY29kZSkgewotICBVc2VFbmNyeXB0ZWRTdHJlYW0oKTsKLSAgSW5pdGlhbGl6ZURlY29kZXJTZWxlY3RvcihrRGVjcnlwdEFuZERlY29kZSwgMSk7Ci0KLSNpZiAhZGVmaW5lZChPU19BTkRST0lEKQotICAvLyBBIERlY3J5cHRpbmdWaWRlb0RlY29kZXIgd2lsbCBiZSBjcmVhdGVkIGFuZCBzZWxlY3RlZC4gVGhlIGNsZWFyIGRlY29kZXIKLSAgLy8gc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGF0IGFsbC4gTm8gRGVjcnlwdGluZ0RlbXV4ZXJTdHJlYW0gc2hvdWxkIGJlCi0gIC8vIGNyZWF0ZWQuCi0gIEVYUEVDVF9DQUxMKCp0aGlzLCBPbkRlY29kZXJTZWxlY3RlZChOb3ROdWxsKCksIElzTnVsbCgpKSk7Ci0jZWxzZQotICAvLyBBIERlY3J5cHRpbmdEZW11eGVyU3RyZWFtIHdpbGwgYmUgY3JlYXRlZC4gVGhlIGNsZWFyIGRlY29kZXIgd2lsbCBiZQotICAvLyBpbml0aWFsaXplZCBhbmQgcmV0dXJuZWQuCi0gIEVYUEVDVF9DQUxMKCpkZWNvZGVyXzFfLCBJbml0aWFsaXplKENsZWFyQ29uZmlnKCksIF8sIF8sIF8sIF8pKQotICAgICAgLldpbGxPbmNlKFJ1bkNhbGxiYWNrPDM+KHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoKnRoaXMsIE9uRGVjb2RlclNlbGVjdGVkKE5vdE51bGwoKSwgTm90TnVsbCgpKSk7Ci0jZW5kaWYKLQotICBTZWxlY3REZWNvZGVyKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9ib29sX2RlY29kZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzAyOWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBUaGUgV2ViTSBQcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgICBkaXN0cmlidXRpb24uCi0gKgotICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBub3IgdGhlIFdlYk0gUHJvamVjdCwgbm9yIHRoZSBuYW1lcwotICogICAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gKiAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGlzIGZpbGUgaXMgbW9kaWZpZWQgZnJvbSB0aGUgZGJvb2xodWZmLntjLGh9IGZyb20gdGhlIFdlYk0ncyBsaWJ2cHgKLS8vIHByb2plY3QuIChodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9jb2RlKQotLy8gSXQgaXMgdXNlZCB0byBkZWNvZGUgYml0cyBmcm9tIGEgdnA4IHN0cmVhbS4KLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAiYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLSNkZWZpbmUgVlA4X0JEX1ZBTFVFX0JJVCBcCi0gIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFZwOEJvb2xEZWNvZGVyOjp2YWx1ZV8pICogQ0hBUl9CSVQpCi0KLXN0YXRpYyBjb25zdCBpbnQga0RlZmF1bHRQcm9iYWJpbGl0eSA9IDB4ODA7ICAvLyAweDgwIC8gMjU2ID0gMC41Ci0KLS8vIFRoaXMgaXMgbWVhbnQgdG8gYmUgYSBsYXJnZSwgcG9zaXRpdmUgY29uc3RhbnQgdGhhdCBjYW4gc3RpbGwgYmUgZWZmaWNpZW50bHkKLS8vIGxvYWRlZCBhcyBhbiBpbW1lZGlhdGUgKG9uIHBsYXRmb3JtcyBsaWtlIEFSTSwgZm9yIGV4YW1wbGUpLiBFdmVuIHJlbGF0aXZlbHkKLS8vIG1vZGVzdCB2YWx1ZXMgbGlrZSAxMDAgd291bGQgd29yayBmaW5lLgotI2RlZmluZSBWUDhfTE9UU19PRl9CSVRTICgweDQwMDAwMDAwKQotCi0vLyBUaGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrVnA4Tm9ybVsyNTZdID0gewotICAgIDAsIDcsIDYsIDYsIDUsIDUsIDUsIDUsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCi0gICAgMywgMywgMywgMywgMywgMywgMywgMywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLX07Ci0KLVZwOEJvb2xEZWNvZGVyOjpWcDhCb29sRGVjb2RlcigpCi0gICAgOiB1c2VyX2J1ZmZlcl8oTlVMTCksCi0gICAgICB1c2VyX2J1ZmZlcl9lbmRfKE5VTEwpLAotICAgICAgdmFsdWVfKDApLAotICAgICAgY291bnRfKC04KSwKLSAgICAgIHJhbmdlXygyNTUpIHt9Ci0KLWJvb2wgVnA4Qm9vbERlY29kZXI6OkluaXRpYWxpemUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgaWYgKGRhdGEgPT0gTlVMTCB8fCBzaXplID09IDApIHJldHVybiBmYWxzZTsKLSAgdXNlcl9idWZmZXJfc3RhcnRfID0gZGF0YTsKLSAgdXNlcl9idWZmZXJfID0gZGF0YTsKLSAgdXNlcl9idWZmZXJfZW5kXyA9IGRhdGEgKyBzaXplOwotICB2YWx1ZV8gPSAwOwotICBjb3VudF8gPSAtODsKLSAgcmFuZ2VfID0gMjU1OwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBWcDhCb29sRGVjb2Rlcjo6RmlsbERlY29kZXIoKSB7Ci0gIERDSEVDSyh1c2VyX2J1ZmZlcl8gIT0gTlVMTCk7Ci0gIGludCBzaGlmdCA9IFZQOF9CRF9WQUxVRV9CSVQgLSBDSEFSX0JJVCAtIChjb3VudF8gKyBDSEFSX0JJVCk7Ci0gIHNpemVfdCBieXRlc19sZWZ0ID0gdXNlcl9idWZmZXJfZW5kXyAtIHVzZXJfYnVmZmVyXzsKLSAgc2l6ZV90IGJpdHNfbGVmdCA9IGJ5dGVzX2xlZnQgKiBDSEFSX0JJVDsKLSAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHNoaWZ0ICsgQ0hBUl9CSVQgLSBiaXRzX2xlZnQpOwotICBpbnQgbG9vcF9lbmQgPSAwOwotCi0gIGlmICh4ID49IDApIHsKLSAgICBjb3VudF8gKz0gVlA4X0xPVFNfT0ZfQklUUzsKLSAgICBsb29wX2VuZCA9IHg7Ci0gIH0KLQotICBpZiAoeCA8IDAgfHwgYml0c19sZWZ0KSB7Ci0gICAgd2hpbGUgKHNoaWZ0ID49IGxvb3BfZW5kKSB7Ci0gICAgICBjb3VudF8gKz0gQ0hBUl9CSVQ7Ci0gICAgICB2YWx1ZV8gfD0gc3RhdGljX2Nhc3Q8c2l6ZV90PigqdXNlcl9idWZmZXJfKSA8PCBzaGlmdDsKLSAgICAgICsrdXNlcl9idWZmZXJfOwotICAgICAgc2hpZnQgLT0gQ0hBUl9CSVQ7Ci0gICAgfQotICB9Ci19Ci0KLWludCBWcDhCb29sRGVjb2Rlcjo6UmVhZEJpdChpbnQgcHJvYmFiaWxpdHkpIHsKLSAgaW50IGJpdCA9IDA7Ci0gIHNpemVfdCBzcGxpdCA9IDEgKyAoKChyYW5nZV8gLSAxKSAqIHByb2JhYmlsaXR5KSA+PiA4KTsKLSAgaWYgKGNvdW50XyA8IDApIEZpbGxEZWNvZGVyKCk7Ci0gIHNpemVfdCBiaWdzcGxpdCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3BsaXQpIDw8IChWUDhfQkRfVkFMVUVfQklUIC0gOCk7Ci0KLSAgaWYgKHZhbHVlXyA+PSBiaWdzcGxpdCkgewotICAgIHJhbmdlXyAtPSBzcGxpdDsKLSAgICB2YWx1ZV8gLT0gYmlnc3BsaXQ7Ci0gICAgYml0ID0gMTsKLSAgfSBlbHNlIHsKLSAgICByYW5nZV8gPSBzcGxpdDsKLSAgfQotCi0gIHNpemVfdCBzaGlmdCA9IGtWcDhOb3JtW3JhbmdlX107Ci0gIHJhbmdlXyA8PD0gc2hpZnQ7Ci0gIHZhbHVlXyA8PD0gc2hpZnQ7Ci0gIGNvdW50XyAtPSBzaGlmdDsKLQotICBEQ0hFQ0tfRVEoMVUsIChyYW5nZV8gPj4gNykpOyAgLy8gSW4gdGhlIHJhbmdlIFsxMjgsIDI1NV0uCi0KLSAgcmV0dXJuIGJpdDsKLX0KLQotYm9vbCBWcDhCb29sRGVjb2Rlcjo6UmVhZExpdGVyYWwoc2l6ZV90IG51bV9iaXRzLCBpbnQqIG91dCkgewotICBEQ0hFQ0tfTEUobnVtX2JpdHMsIHNpemVvZihpbnQpICogQ0hBUl9CSVQpOwotICAqb3V0ID0gMDsKLSAgZm9yICg7IG51bV9iaXRzID4gMDsgLS1udW1fYml0cykKLSAgICAqb3V0ID0gKCpvdXQgPDwgMSkgfCBSZWFkQml0KGtEZWZhdWx0UHJvYmFiaWxpdHkpOwotICByZXR1cm4gIU91dE9mQnVmZmVyKCk7Ci19Ci0KLWJvb2wgVnA4Qm9vbERlY29kZXI6OlJlYWRCb29sKGJvb2wqIG91dCwgdWludDhfdCBwcm9iYWJpbGl0eSkgewotICAqb3V0ID0gISFSZWFkQml0KHByb2JhYmlsaXR5KTsKLSAgcmV0dXJuICFPdXRPZkJ1ZmZlcigpOwotfQotCi1ib29sIFZwOEJvb2xEZWNvZGVyOjpSZWFkQm9vbChib29sKiBvdXQpIHsKLSAgcmV0dXJuIFJlYWRCb29sKG91dCwga0RlZmF1bHRQcm9iYWJpbGl0eSk7Ci19Ci0KLWJvb2wgVnA4Qm9vbERlY29kZXI6OlJlYWRMaXRlcmFsV2l0aFNpZ24oc2l6ZV90IG51bV9iaXRzLCBpbnQqIG91dCkgewotICBSZWFkTGl0ZXJhbChudW1fYml0cywgb3V0KTsKLSAgLy8gUmVhZCBzaWduLgotICBpZiAoUmVhZEJpdChrRGVmYXVsdFByb2JhYmlsaXR5KSkgKm91dCA9IC0qb3V0OwotICByZXR1cm4gIU91dE9mQnVmZmVyKCk7Ci19Ci0KLXNpemVfdCBWcDhCb29sRGVjb2Rlcjo6Qml0T2Zmc2V0KCkgewotICBpbnQgYml0X2NvdW50ID0gY291bnRfICsgODsKLSAgaWYgKGJpdF9jb3VudCA+IFZQOF9CRF9WQUxVRV9CSVQpCi0gICAgLy8gQ2FwcGVkIGF0IDAgdG8gaWdub3JlIGJ1ZmZlciB1bmRlcnJ1bi4KLSAgICBiaXRfY291bnQgPSBzdGQ6Om1heCgwLCBiaXRfY291bnQgLSBWUDhfTE9UU19PRl9CSVRTKTsKLSAgcmV0dXJuICh1c2VyX2J1ZmZlcl8gLSB1c2VyX2J1ZmZlcl9zdGFydF8pICogOCAtIGJpdF9jb3VudDsKLX0KLQotdWludDhfdCBWcDhCb29sRGVjb2Rlcjo6R2V0UmFuZ2UoKSB7Ci0gIHJldHVybiBiYXNlOjpjaGVja2VkX2Nhc3Q8dWludDhfdD4ocmFuZ2VfKTsKLX0KLQotdWludDhfdCBWcDhCb29sRGVjb2Rlcjo6R2V0Qm90dG9tKCkgewotICBpZiAoY291bnRfIDwgMCkgRmlsbERlY29kZXIoKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlXyA+PiAoVlA4X0JEX1ZBTFVFX0JJVCAtIDgpKTsKLX0KLQotaW5saW5lIGJvb2wgVnA4Qm9vbERlY29kZXI6Ok91dE9mQnVmZmVyKCkgewotICAvLyBDaGVjayBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICAvLwotICAvLyBWYXJpYWJsZSB8Y291bnRffCBzdG9yZXMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB8dmFsdWVffCBidWZmZXIsIG1pbnVzCi0gIC8vIDguIFRoZSB0b3AgYnl0ZSBpcyBwYXJ0IG9mIHRoZSBhbGdvcml0aG0gYW5kIHRoZSByZW1haW5kZXIgaXMgYnVmZmVyZWQgdG8KLSAgLy8gYmUgc2hpZnRlZCBpbnRvIGl0LiBTbywgaWYgfGNvdW50X3wgPT0gOCwgdGhlIHRvcCAxNiBiaXRzIG9mIHx2YWx1ZV98IGFyZQotICAvLyBvY2N1cGllZCwgOCBmb3IgdGhlIGFsZ29yaXRobSBhbmQgOCBpbiB0aGUgYnVmZmVyLgotICAvLwotICAvLyBXaGVuIHJlYWRpbmcgYSBieXRlIGZyb20gdGhlIHVzZXIncyBidWZmZXIsIHxjb3VudF98IGlzIGZpbGxlZCB3aXRoIDggYW5kCi0gIC8vIG9uZSBieXRlIGlzIGZpbGxlZCBpbnRvIHRoZSB8dmFsdWVffCBidWZmZXIuIFdoZW4gd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUKLSAgLy8gZGF0YSwgfGNvdW50X3wgaXMgYWRkaXRpb25hbGx5IGZpbGxlZCB3aXRoIFZQOF9MT1RTX09GX0JJVFMuIFNvIHdoZW4KLSAgLy8gfGNvdW50X3wgPT0gVlA4X0xPVFNfT0ZfQklUUyAtIDEsIHRoZSB1c2VyJ3MgZGF0YSBoYXMgYmVlbiBleGhhdXN0ZWQuCi0gIHJldHVybiAoY291bnRfID4gVlA4X0JEX1ZBTFVFX0JJVCkgJiYgKGNvdW50XyA8IFZQOF9MT1RTX09GX0JJVFMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9ib29sX2RlY29kZXIuaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9ib29sX2RlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEzYmNlOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfYm9vbF9kZWNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIFdlYk0gUHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICAgZGlzdHJpYnV0aW9uLgotICoKLSAqICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgbm9yIHRoZSBXZWJNIFByb2plY3QsIG5vciB0aGUgbmFtZXMKLSAqICAgICBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgotICogICAgIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBmaWxlIGlzIG1vZGlmaWVkIGZyb20gdGhlIGRib29saHVmZi57YyxofSBmcm9tIHRoZSBXZWJNJ3MgbGlidnB4Ci0vLyBwcm9qZWN0LiAoaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvY29kZSkKLS8vIEl0IGlzIHVzZWQgdG8gZGVjb2RlIGJpdHMgZnJvbSBhIHZwOCBzdHJlYW0uCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA4X0JPT0xfREVDT0RFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19WUDhfQk9PTF9ERUNPREVSX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEEgY2xhc3MgdG8gZGVjb2RlIHRoZSBWUDgncyBib29sZWFuIGVudHJvcHkgY29kZWQgc3RyZWFtLiBJdCdzIGEgdmFyaWFudCBvZgotLy8gYXJpdGhtZXRpYyBjb2RpbmcuIFNlZSBSRkMgNjM4NiAtIENoYXB0ZXIgNy4gQm9vbGVhbiBFbnRyb3B5IERlY29kZXIuCi1jbGFzcyBNRURJQV9FWFBPUlQgVnA4Qm9vbERlY29kZXIgewotIHB1YmxpYzoKLSAgVnA4Qm9vbERlY29kZXIoKTsKLQotICAvLyBJbml0aWFsaXplcyB0aGUgZGVjb2RlciB0byBzdGFydCBkZWNvZGluZyB8ZGF0YXwsIHxzaXplfCBiZWluZyBzaXplCi0gIC8vIG9mIHxkYXRhfCBpbiBieXRlcy4gUmV0dXJucyBmYWxzZSBpZiB8ZGF0YXwgaXMgTlVMTCBvciBlbXB0eS4KLSAgYm9vbCBJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAvLyBSZWFkcyBhIGJvb2xlYW4gZnJvbSB0aGUgY29kZWQgc3RyZWFtLiBSZXR1cm5zIGZhbHNlIGlmIGl0IGhhcyByZWFjaGVkIHRoZQotICAvLyBlbmQgb2YgfGRhdGF8IGFuZCBmYWlsZWQgdG8gcmVhZCB0aGUgYm9vbGVhbi4gVGhlIHByb2JhYmlsaXR5IG9mIHxvdXR8IHRvCi0gIC8vIGJlIHRydWUgaXMgfHByb2JhYmlsaXR5fCAvIDI1NiwgZS5nLiwgd2hlbiB8cHJvYmFiaWxpdHl8IGlzIDB4ODAsIHRoZQotICAvLyBjaGFuY2UgaXMgMS8yIChpLmUuLCAweDgwIC8gMjU2KS4KLSAgYm9vbCBSZWFkQm9vbChib29sKiBvdXQsIHVpbnQ4X3QgcHJvYmFiaWxpdHkpOwotCi0gIC8vIFJlYWRzIGEgYm9vbGVhbiBmcm9tIHRoZSBjb2RlZCBzdHJlYW0gd2l0aCB0aGUgZGVmYXVsdCBwcm9iYWJpbGl0eSAxLzIuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB8ZGF0YXwgYW5kIGZhaWxlZCB0byByZWFkIHRoZQotICAvLyBib29sZWFuLgotICBib29sIFJlYWRCb29sKGJvb2wqIG91dCk7Ci0KLSAgLy8gUmVhZHMgYSAibGl0ZXJhbCIsIHRoYXQgaXMsIGEgIm51bV9iaXRzIi13aWRlIHVuc2lnbmVkIHZhbHVlIHdob3NlIGJpdHMKLSAgLy8gY29tZSBoaWdoLSB0byBsb3ctb3JkZXIsIHdpdGggZWFjaCBiaXQgZW5jb2RlZCBhdCBwcm9iYWJpbGl0eSAxLzIuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgaGFzIHJlYWNoZWQgdGhlIGVuZCBvZiB8ZGF0YXwgYW5kIGZhaWxlZCB0byByZWFkIHRoZQotICAvLyBsaXRlcmFsLgotICBib29sIFJlYWRMaXRlcmFsKHNpemVfdCBudW1fYml0cywgaW50KiBvdXQpOwotCi0gIC8vIFJlYWRzIGEgbGl0ZXJhbCB3aXRoIHNpZ24gZnJvbSB0aGUgY29kZWQgc3RyZWFtLiBUaGlzIGlzIHNpbWlsYXIgdG8KLSAgLy8gdGhlIFJlYWRMaXRlcmFsKCksIGl0IGZpcnN0IHJlYWQgYSAibnVtX2JpdHMiLXdpZGUgdW5zaWduZWQgdmFsdWUsIGFuZAotICAvLyB0aGVuIHJlYWQgYW4gZXh0cmEgYml0IGFzIHRoZSBzaWduIG9mIHRoZSBsaXRlcmFsLiBSZXR1cm5zIGZhbHNlIGlmIGl0IGhhcwotICAvLyByZWFjaGVkIHRoZSBlbmQgb2YgfGRhdGF8IGFuZCBmYWlsZWQgdG8gcmVhZCB0aGUgbGl0ZXJhbCBvciB0aGUgc2lnbi4KLSAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgInJlYWRfc2lnbmVkX2xpdGVyYWwoZCwgbikiIGRlZmluZWQgaW4gUkZDIDYzODYuCi0gIGJvb2wgUmVhZExpdGVyYWxXaXRoU2lnbihzaXplX3QgbnVtX2JpdHMsIGludCogb3V0KTsKLQotICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gZ2V0IHRoZSBpbnRlcm5hbCBzdGF0ZXMgb2YgdGhlIGRlY29kZXIuCi0KLSAgLy8gUmV0dXJucyB0aGUgYml0IG9mZnNldCB0byB0aGUgY3VycmVudCB0b3AgYml0IG9mIHRoZSBjb2RlZCBzdHJlYW0uIEl0IGlzCi0gIC8vIGFsc28gdGhlIG51bWJlciBvZiBiaXRzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4gaW4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgLy8gZW5jb2Rpbmcgc3RhdGUuIE1vcmUgc3BlY2lmaWNhbGx5LCB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludDoKLSAgLy8gICAgdyArIChib3R0b20gKiBTKSA8PSB2IDwgdyArIChib3R0b20gKyByYW5nZSkgKiBTLAotICAvLyB3aGVyZSAidyIgaXMgZm9yIHRoZSBiaXRzIGFscmVhZHkgd3JpdHRlbiwKLSAgLy8gICAgICAgInYiIGlzIGZvciB0aGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSBjb2RlZCBudW1iZXIuCi0gIC8vICAgICAgICJTIiBpcyB0aGUgc2NhbGUgZm9yIHRoZSBjdXJyZW50IGJpdCBwb3NpdGlvbiwKLSAgLy8gICAgICAgICAgIGkuZS4sIFMgPSBwb3coMiwgLShuICsgOCkpLCB3aGVyZSAibiIgaXMgdGhlIGJpdCBudW1iZXIgb2YgInciLgotICAvLyBCaXRPZmZzZXQoKSByZXR1cm5zIHRoZSBiaXQgY291bnQgb2YgInciLCBpLmUuLCAibiIuCi0gIHNpemVfdCBCaXRPZmZzZXQoKTsKLQotICAvLyBHZXRzIHRoZSAiYm90dG9tIiBvZiB0aGUgY3VycmVudCBjb2RlZCB2YWx1ZS4gU2VlIEJpdE9mZnNldCgpIGZvcgotICAvLyBtb3JlIGRldGFpbHMuCi0gIHVpbnQ4X3QgR2V0Qm90dG9tKCk7Ci0KLSAgLy8gR2V0cyB0aGUgInJhbmdlIiBvZiB0aGUgY3VycmVudCBjb2RlZCB2YWx1ZS4gU2VlIEJpdE9mZnNldCgpIGZvcgotICAvLyBtb3JlIGRldGFpbHMuCi0gIHVpbnQ4X3QgR2V0UmFuZ2UoKTsKLQotIHByaXZhdGU6Ci0gIC8vIFJlYWRzIHRoZSBuZXh0IGJpdCBmcm9tIHRoZSBjb2RlZCBzdHJlYW0uIFRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgYml0IHRvCi0gIC8vIGJlIG9uZSBpcyB8cHJvYmFiaWxpdHl8IC8gMjU2LgotICBpbnQgUmVhZEJpdChpbnQgcHJvYmFiaWxpdHkpOwotCi0gIC8vIEZpbGxzIG1vcmUgYml0cyBmcm9tIHx1c2VyX2J1ZmZlcl98IHRvIHx2YWx1ZV98LiBXZSBzaGFsbCBrZWVwIGF0IGxlYXN0IDgKLSAgLy8gYml0cyBvZiB0aGUgY3VycmVudCB8dXNlcl9idWZmZXJffCBpbiB8dmFsdWVffC4KLSAgdm9pZCBGaWxsRGVjb2RlcigpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgd2UgaGF2ZSByYW4gb3V0IG9mIGJpdHMuCi0gIGJvb2wgT3V0T2ZCdWZmZXIoKTsKLQotICBjb25zdCB1aW50OF90KiB1c2VyX2J1ZmZlcl87Ci0gIGNvbnN0IHVpbnQ4X3QqIHVzZXJfYnVmZmVyX3N0YXJ0XzsKLSAgY29uc3QgdWludDhfdCogdXNlcl9idWZmZXJfZW5kXzsKLSAgc2l6ZV90IHZhbHVlXzsKLSAgaW50IGNvdW50XzsKLSAgc2l6ZV90IHJhbmdlXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVnA4Qm9vbERlY29kZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA4X0JPT0xfREVDT0RFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9ib29sX2RlY29kZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1M2VhMDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfYm9vbF9kZWNvZGVyLmgiCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi1jb25zdCBzaXplX3QgTlVNX0JJVFNfVE9fVEVTVCA9IDEwMDsKLQotLy8gMTAwIHplcm9zIHdpdGggcHJvYmFiaWxpdHkgb2YgMHg4MC4KLWNvbnN0IHVpbnQ4X3Qga0RhdGFaZXJvc0FuZEV2ZW5Qcm9iYWJpbGl0aWVzW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0KLS8vIDEwMCBvbmVzIHdpdGggcHJvYmFiaWxpdHkgb2YgMHg4MC4KLWNvbnN0IHVpbnQ4X3Qga0RhdGFPbmVzQW5kRXZlblByb2JhYmlsaXRpZXNbXSA9IHsweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmMCwgMHgyMH07Ci0KLS8vIFswLCAxLCAwLCAxLCAuLi4sIDFdIHdpdGggcHJvYmFiaWxpdHkgWzAsIDEsIDIsIDMsIC4uLiwgOTldLgotY29uc3QgdWludDhfdCBrRGF0YVBhcml0aWVzQW5kSW5jcmVhc2luZ1Byb2JhYmlsaXRpZXNbXSA9IHsKLSAgICAweDAwLCAweDAyLCAweDA4LCAweDMxLCAweDhlLCAweGNhLCAweGFiLCAweGUyLCAweGM4LCAweDMxLCAweDEyLAotICAgIDB4YjMsIDB4MmMsIDB4MTksIDB4OTAsIDB4YzYsIDB4NmEsIDB4ZWIsIDB4MTcsIDB4NTIsIDB4MzB9OwotCi19ICAvLyBuYW1lc3BhY2UKLQotY2xhc3MgVnA4Qm9vbERlY29kZXJUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBWcDhCb29sRGVjb2RlclRlc3QoKSB7fQotCi0gcHJvdGVjdGVkOgotICAvLyBGaXh0dXJlIG1lbWJlciwgdGhlIGJvb2wgZGVjb2RlciB0byBiZSB0ZXN0ZWQuCi0gIFZwOEJvb2xEZWNvZGVyIGJkXzsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWcDhCb29sRGVjb2RlclRlc3QpOwotfTsKLQotI2RlZmluZSBJTklUSUFMSVpFKGRhdGEpIEFTU0VSVF9UUlVFKGJkXy5Jbml0aWFsaXplKGRhdGEsIHNpemVvZihkYXRhKSkpOwotCi1URVNUX0YoVnA4Qm9vbERlY29kZXJUZXN0LCBEZWNvZGVCb29sc1dpdGhaZXJvc0FuZEV2ZW5Qcm9iYWJpbGl0aWVzKSB7Ci0gIElOSVRJQUxJWkUoa0RhdGFaZXJvc0FuZEV2ZW5Qcm9iYWJpbGl0aWVzKTsKLSAgQVNTRVJUX0VRKDB1LCBiZF8uQml0T2Zmc2V0KCkpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5VTV9CSVRTX1RPX1RFU1Q7ICsraSkgewotICAgIGJvb2wgb3V0ID0gdHJ1ZTsKLSAgICBBU1NFUlRfVFJVRShiZF8uUmVhZEJvb2woJm91dCwgMHg4MCkpOwotICAgIEFTU0VSVF9GQUxTRShvdXQpOwotICAgIEFTU0VSVF9FUShpLCBiZF8uQml0T2Zmc2V0KCkpOwotICB9Ci19Ci0KLVRFU1RfRihWcDhCb29sRGVjb2RlclRlc3QsIERlY29kZUxpdGVyYWxzV2l0aFplcm9zQW5kRXZlblByb2JhYmlsaXRpZXMpIHsKLSAgSU5JVElBTElaRShrRGF0YVplcm9zQW5kRXZlblByb2JhYmlsaXRpZXMpOwotCi0gIGludCB2YWx1ZSA9IDE7Ci0gIEFTU0VSVF9UUlVFKGJkXy5SZWFkTGl0ZXJhbCgxLCAmdmFsdWUpKTsKLSAgQVNTRVJUX0VRKDAsIHZhbHVlKTsKLQotICB2YWx1ZSA9IDE7Ci0gIEFTU0VSVF9UUlVFKGJkXy5SZWFkTGl0ZXJhbCgzMiwgJnZhbHVlKSk7Ci0gIEFTU0VSVF9FUSgwLCB2YWx1ZSk7Ci0KLSAgdmFsdWUgPSAxOwotICBBU1NFUlRfVFJVRShiZF8uUmVhZExpdGVyYWxXaXRoU2lnbigxLCAmdmFsdWUpKTsKLSAgQVNTRVJUX0VRKDAsIHZhbHVlKTsKLQotICB2YWx1ZSA9IDE7Ci0gIEFTU0VSVF9UUlVFKGJkXy5SZWFkTGl0ZXJhbFdpdGhTaWduKDMxLCAmdmFsdWUpKTsKLSAgQVNTRVJUX0VRKDAsIHZhbHVlKTsKLX0KLQotVEVTVF9GKFZwOEJvb2xEZWNvZGVyVGVzdCwgRGVjb2RlQm9vbHNXaXRoT25lc0FuZEV2ZW5Qcm9iYWJpbGl0aWVzKSB7Ci0gIElOSVRJQUxJWkUoa0RhdGFPbmVzQW5kRXZlblByb2JhYmlsaXRpZXMpOwotCi0gIEFTU0VSVF9FUSgwdSwgYmRfLkJpdE9mZnNldCgpKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fQklUU19UT19URVNUOyArK2kpIHsKLSAgICBib29sIG91dCA9IGZhbHNlOwotICAgIEFTU0VSVF9UUlVFKGJkXy5SZWFkQm9vbCgmb3V0LCAweDgwKSk7Ci0gICAgQVNTRVJUX1RSVUUob3V0KTsKLSAgICBBU1NFUlRfRVEoaSArIDEsIGJkXy5CaXRPZmZzZXQoKSk7Ci0gIH0KLX0KLQotVEVTVF9GKFZwOEJvb2xEZWNvZGVyVGVzdCwgRGVjb2RlTGl0ZXJhbHNXaXRoT25lc0FuZEV2ZW5Qcm9iYWJpbGl0aWVzKSB7Ci0gIElOSVRJQUxJWkUoa0RhdGFPbmVzQW5kRXZlblByb2JhYmlsaXRpZXMpOwotCi0gIGludCB2YWx1ZSA9IDA7Ci0gIEFTU0VSVF9UUlVFKGJkXy5SZWFkTGl0ZXJhbCgxLCAmdmFsdWUpKTsKLSAgRVhQRUNUX0VRKDEsIHZhbHVlKTsKLQotICB2YWx1ZSA9IDA7Ci0gIEFTU0VSVF9UUlVFKGJkXy5SZWFkTGl0ZXJhbCgzMSwgJnZhbHVlKSk7Ci0gIEVYUEVDVF9FUSgweDdGRkZGRkZGLCB2YWx1ZSk7Ci0KLSAgdmFsdWUgPSAwOwotICBBU1NFUlRfVFJVRShiZF8uUmVhZExpdGVyYWxXaXRoU2lnbigxLCAmdmFsdWUpKTsKLSAgRVhQRUNUX0VRKC0xLCB2YWx1ZSk7Ci0KLSAgdmFsdWUgPSAwOwotICBBU1NFUlRfVFJVRShiZF8uUmVhZExpdGVyYWxXaXRoU2lnbigzMSwgJnZhbHVlKSk7Ci0gIEVYUEVDVF9FUSgtMHg3RkZGRkZGRiwgdmFsdWUpOwotfQotCi1URVNUX0YoVnA4Qm9vbERlY29kZXJUZXN0LCBEZWNvZGVCb29sc1dpdGhQYXJpdGllc0FuZEluY3JlYXNpbmdQcm9iYWJpbGl0aWVzKSB7Ci0gIElOSVRJQUxJWkUoa0RhdGFQYXJpdGllc0FuZEluY3JlYXNpbmdQcm9iYWJpbGl0aWVzKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5VTV9CSVRTX1RPX1RFU1Q7ICsraSkgewotICAgIGJvb2wgb3V0ID0gIShpICYgMSk7Ci0gICAgQVNTRVJUX0xFKGksIHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKLSAgICBBU1NFUlRfVFJVRShiZF8uUmVhZEJvb2woJm91dCwgc3RhdGljX2Nhc3Q8dWludDhfdD4oaSkpKTsKLSAgICBFWFBFQ1RfRVEob3V0LCAhIShpICYgMSkpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X3BhcnNlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NzdlMDUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDg0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgVlA4IHJhdyBzdHJlYW0gcGFyc2VyLAotLy8gYXMgZGVmaW5lZCBpbiBSRkMgNjM4Ni4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9wYXJzZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0jZGVmaW5lIEVSUk9SX1JFVFVSTih3aGF0KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERWTE9HKDEpIDw8ICJFcnJvciB3aGlsZSB0cnlpbmcgdG8gcmVhZCAiICN3aGF0OyBcCi0gICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKG91dCkgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIWJkXy5SZWFkQm9vbChvdXQpKSBFUlJPUl9SRVRVUk4ob3V0KTsgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJEX1JFQURfQk9PTF9XSVRIX1BST0JfT1JfUkVUVVJOKG91dCwgcHJvYikgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghYmRfLlJlYWRCb29sKG91dCwgcHJvYikpIEVSUk9SX1JFVFVSTihvdXQpOyBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4obnVtX2JpdHMsIG91dCkgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaW50IF9vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIWJkXy5SZWFkTGl0ZXJhbChudW1fYml0cywgJl9vdXQpKSBFUlJPUl9SRVRVUk4ob3V0KTsgXAotICAgICpvdXQgPSBfb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQkRfUkVBRF9TSUdORURfT1JfUkVUVVJOKG51bV9iaXRzLCBvdXQpICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGludCBfb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIWJkXy5SZWFkTGl0ZXJhbFdpdGhTaWduKG51bV9iaXRzLCAmX291dCkpIEVSUk9SX1JFVFVSTihvdXQpOyBcCi0gICAgKm91dCA9IF9vdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi1WcDhGcmFtZUhlYWRlcjo6VnA4RnJhbWVIZWFkZXIoKSB7IG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRoaXMpKTsgfQotCi1WcDhQYXJzZXI6OlZwOFBhcnNlcigpIDogc3RyZWFtXyhOVUxMKSwgYnl0ZXNfbGVmdF8oMCkge30KLQotVnA4UGFyc2VyOjp+VnA4UGFyc2VyKCkge30KLQotYm9vbCBWcDhQYXJzZXI6OlBhcnNlRnJhbWUoY29uc3QgdWludDhfdCogcHRyLCBzaXplX3QgZnJhbWVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZwOEZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIHN0cmVhbV8gPSBwdHI7Ci0gIGJ5dGVzX2xlZnRfID0gZnJhbWVfc2l6ZTsKLQotICBtZW1zZXQoZmhkciwgMCwgc2l6ZW9mKCpmaGRyKSk7Ci0gIGZoZHItPmRhdGEgPSBzdHJlYW1fOwotICBmaGRyLT5mcmFtZV9zaXplID0gYnl0ZXNfbGVmdF87Ci0KLSAgaWYgKCFQYXJzZUZyYW1lVGFnKGZoZHIpKSByZXR1cm4gZmFsc2U7Ci0KLSAgZmhkci0+Zmlyc3RfcGFydF9vZmZzZXQgPSBzdHJlYW1fIC0gZmhkci0+ZGF0YTsKLQotICBpZiAoIVBhcnNlRnJhbWVIZWFkZXIoZmhkcikpIHJldHVybiBmYWxzZTsKLQotICBpZiAoIVBhcnNlUGFydGl0aW9ucyhmaGRyKSkgcmV0dXJuIGZhbHNlOwotCi0gIERWTE9HKDQpIDw8ICJGcmFtZSBwYXJzZWQsIHN0YXJ0OiAiIDw8IHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihwdHIpCi0gICAgICAgICAgIDw8ICIsIHNpemU6ICIgPDwgZnJhbWVfc2l6ZQotICAgICAgICAgICA8PCAiLCBvZmZzZXRzOiB0byBmaXJzdF9wYXJ0PSIgPDwgZmhkci0+Zmlyc3RfcGFydF9vZmZzZXQKLSAgICAgICAgICAgPDwgIiwgdG8gbWFjcm9ibG9jayBkYXRhIChpbiBiaXRzKT0iIDw8IGZoZHItPm1hY3JvYmxvY2tfYml0X29mZnNldDsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCBHZXRCaXRzQXQodWludDMyX3QgZGF0YSwgc2l6ZV90IHNoaWZ0LCBzaXplX3QgbnVtX2JpdHMpIHsKLSAgcmV0dXJuICgoZGF0YSA+PiBzaGlmdCkgJiAoKDEgPDwgbnVtX2JpdHMpIC0gMSkpOwotfQotCi1ib29sIFZwOFBhcnNlcjo6UGFyc2VGcmFtZVRhZyhWcDhGcmFtZUhlYWRlciogZmhkcikgewotICBjb25zdCBzaXplX3Qga0ZyYW1lVGFnU2l6ZSA9IDM7Ci0gIGlmIChieXRlc19sZWZ0XyA8IGtGcmFtZVRhZ1NpemUpIHJldHVybiBmYWxzZTsKLQotICB1aW50MzJfdCBmcmFtZV90YWcgPSAoc3RyZWFtX1syXSA8PCAxNikgfCAoc3RyZWFtX1sxXSA8PCA4KSB8IHN0cmVhbV9bMF07Ci0gIGZoZHItPmtleV9mcmFtZSA9Ci0gICAgICBzdGF0aWNfY2FzdDxWcDhGcmFtZUhlYWRlcjo6RnJhbWVUeXBlPihHZXRCaXRzQXQoZnJhbWVfdGFnLCAwLCAxKSk7Ci0gIGZoZHItPnZlcnNpb24gPSBHZXRCaXRzQXQoZnJhbWVfdGFnLCAxLCAyKTsKLSAgZmhkci0+aXNfZXhwZXJpbWVudGFsID0gISFHZXRCaXRzQXQoZnJhbWVfdGFnLCAzLCAxKTsKLSAgZmhkci0+c2hvd19mcmFtZSA9ICEhR2V0Qml0c0F0KGZyYW1lX3RhZywgNCwgMSk7Ci0gIGZoZHItPmZpcnN0X3BhcnRfc2l6ZSA9IEdldEJpdHNBdChmcmFtZV90YWcsIDUsIDE5KTsKLQotICBzdHJlYW1fICs9IGtGcmFtZVRhZ1NpemU7Ci0gIGJ5dGVzX2xlZnRfIC09IGtGcmFtZVRhZ1NpemU7Ci0KLSAgaWYgKGZoZHItPklzS2V5ZnJhbWUoKSkgewotICAgIGNvbnN0IHNpemVfdCBrS2V5ZnJhbWVUYWdTaXplID0gNzsKLSAgICBpZiAoYnl0ZXNfbGVmdF8gPCBrS2V5ZnJhbWVUYWdTaXplKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBrVnA4U3RhcnRDb2RlW10gPSB7MHg5ZCwgMHgwMSwgMHgyYX07Ci0gICAgaWYgKG1lbWNtcChzdHJlYW1fLCBrVnA4U3RhcnRDb2RlLCBzaXplb2Yoa1ZwOFN0YXJ0Q29kZSkpICE9IDApCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdHJlYW1fICs9IHNpemVvZihrVnA4U3RhcnRDb2RlKTsKLSAgICBieXRlc19sZWZ0XyAtPSBzaXplb2Yoa1ZwOFN0YXJ0Q29kZSk7Ci0KLSAgICB1aW50MTZfdCBkYXRhID0gKHN0cmVhbV9bMV0gPDwgOCkgfCBzdHJlYW1fWzBdOwotICAgIGZoZHItPndpZHRoID0gZGF0YSAmIDB4M2ZmZjsKLSAgICBmaGRyLT5ob3Jpem9udGFsX3NjYWxlID0gZGF0YSA+PiAxNDsKLQotICAgIGRhdGEgPSAoc3RyZWFtX1szXSA8PCA4KSB8IHN0cmVhbV9bMl07Ci0gICAgZmhkci0+aGVpZ2h0ID0gZGF0YSAmIDB4M2ZmZjsKLSAgICBmaGRyLT52ZXJ0aWNhbF9zY2FsZSA9IGRhdGEgPj4gMTQ7Ci0KLSAgICBzdHJlYW1fICs9IDQ7Ci0gICAgYnl0ZXNfbGVmdF8gLT0gNDsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZwOFBhcnNlcjo6UGFyc2VGcmFtZUhlYWRlcihWcDhGcmFtZUhlYWRlciogZmhkcikgewotICBpZiAoIWJkXy5Jbml0aWFsaXplKHN0cmVhbV8sIGJ5dGVzX2xlZnRfKSkgcmV0dXJuIGZhbHNlOwotCi0gIGJvb2wga2V5ZnJhbWUgPSBmaGRyLT5Jc0tleWZyYW1lKCk7Ci0gIGlmIChrZXlmcmFtZSkgewotICAgIHVuc2lnbmVkIGludCBkYXRhOwotICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDEsICZkYXRhKTsgIC8vIGNvbG9yX3NwYWNlCi0gICAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oMSwgJmRhdGEpOyAgLy8gY2xhbXBpbmdfdHlwZQotICB9Ci0KLSAgaWYgKCFQYXJzZVNlZ21lbnRhdGlvbkhlYWRlcihrZXlmcmFtZSkpIHJldHVybiBmYWxzZTsKLQotICBmaGRyLT5zZWdtZW50YXRpb25faGRyID0gY3Vycl9zZWdtZW50YXRpb25faGRyXzsKLQotICBpZiAoIVBhcnNlTG9vcEZpbHRlckhlYWRlcihrZXlmcmFtZSkpIHJldHVybiBmYWxzZTsKLQotICBmaGRyLT5sb29wZmlsdGVyX2hkciA9IGN1cnJfbG9vcGZpbHRlcl9oZHJfOwotCi0gIGludCBsb2cyX25icl9vZl9kY3RfcGFydGl0aW9uczsKLSAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oMiwgJmxvZzJfbmJyX29mX2RjdF9wYXJ0aXRpb25zKTsKLSAgZmhkci0+bnVtX29mX2RjdF9wYXJ0aXRpb25zID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBsb2cyX25icl9vZl9kY3RfcGFydGl0aW9uczsKLQotICBpZiAoIVBhcnNlUXVhbnRpemF0aW9uSGVhZGVyKCZmaGRyLT5xdWFudGl6YXRpb25faGRyKSkgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChrZXlmcmFtZSkgewotICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmZoZHItPnJlZnJlc2hfZW50cm9weV9wcm9icyk7Ci0gIH0gZWxzZSB7Ci0gICAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmZmhkci0+cmVmcmVzaF9nb2xkZW5fZnJhbWUpOwotICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmZoZHItPnJlZnJlc2hfYWx0ZXJuYXRlX2ZyYW1lKTsKLQotICAgIGludCByZWZyZXNoX21vZGU7Ci0gICAgaWYgKCFmaGRyLT5yZWZyZXNoX2dvbGRlbl9mcmFtZSkgewotICAgICAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oMiwgJnJlZnJlc2hfbW9kZSk7Ci0gICAgICBmaGRyLT5jb3B5X2J1ZmZlcl90b19nb2xkZW4gPQotICAgICAgICAgIHN0YXRpY19jYXN0PFZwOEZyYW1lSGVhZGVyOjpHb2xkZW5SZWZyZXNoTW9kZT4ocmVmcmVzaF9tb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWZoZHItPnJlZnJlc2hfYWx0ZXJuYXRlX2ZyYW1lKSB7Ci0gICAgICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTigyLCAmcmVmcmVzaF9tb2RlKTsKLSAgICAgIGZoZHItPmNvcHlfYnVmZmVyX3RvX2FsdGVybmF0ZSA9Ci0gICAgICAgICAgc3RhdGljX2Nhc3Q8VnA4RnJhbWVIZWFkZXI6OkFsdFJlZnJlc2hNb2RlPihyZWZyZXNoX21vZGUpOwotICAgIH0KLQotICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDEsICZmaGRyLT5zaWduX2JpYXNfZ29sZGVuKTsKLSAgICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTigxLCAmZmhkci0+c2lnbl9iaWFzX2FsdGVybmF0ZSk7Ci0gICAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmZmhkci0+cmVmcmVzaF9lbnRyb3B5X3Byb2JzKTsKLSAgICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZmaGRyLT5yZWZyZXNoX2xhc3QpOwotICB9Ci0KLSAgaWYgKGtleWZyYW1lKSBSZXNldFByb2JzKCk7Ci0KLSAgZmhkci0+ZW50cm9weV9oZHIgPSBjdXJyX2VudHJvcHlfaGRyXzsKLQotICBpZiAoIVBhcnNlVG9rZW5Qcm9icygmZmhkci0+ZW50cm9weV9oZHIsIGZoZHItPnJlZnJlc2hfZW50cm9weV9wcm9icykpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmZoZHItPm1iX25vX3NraXBfY29lZmYpOwotICBpZiAoZmhkci0+bWJfbm9fc2tpcF9jb2VmZikKLSAgICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTig4LCAmZmhkci0+cHJvYl9za2lwX2ZhbHNlKTsKLQotICBpZiAoIWtleWZyYW1lKSB7Ci0gICAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oOCwgJmZoZHItPnByb2JfaW50cmEpOwotICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDgsICZmaGRyLT5wcm9iX2xhc3QpOwotICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDgsICZmaGRyLT5wcm9iX2dmKTsKLSAgfQotCi0gIGlmICghUGFyc2VJbnRyYVByb2JzKCZmaGRyLT5lbnRyb3B5X2hkciwgZmhkci0+cmVmcmVzaF9lbnRyb3B5X3Byb2JzLAotICAgICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZSkpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGlmICgha2V5ZnJhbWUpIHsKLSAgICBpZiAoIVBhcnNlTVZQcm9icygmZmhkci0+ZW50cm9weV9oZHIsIGZoZHItPnJlZnJlc2hfZW50cm9weV9wcm9icykpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBmaGRyLT5tYWNyb2Jsb2NrX2JpdF9vZmZzZXQgPSBiZF8uQml0T2Zmc2V0KCk7Ci0gIGZoZHItPmJvb2xfZGVjX3JhbmdlID0gYmRfLkdldFJhbmdlKCk7Ci0gIGZoZHItPmJvb2xfZGVjX3ZhbHVlID0gYmRfLkdldEJvdHRvbSgpOwotICBmaGRyLT5ib29sX2RlY19jb3VudCA9IDcgLSAoYmRfLkJpdE9mZnNldCgpICsgNykgJSA4OwotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZwOFBhcnNlcjo6UGFyc2VTZWdtZW50YXRpb25IZWFkZXIoYm9vbCBrZXlmcmFtZSkgewotICBWcDhTZWdtZW50YXRpb25IZWFkZXIqIHNoZHIgPSAmY3Vycl9zZWdtZW50YXRpb25faGRyXzsKLQotICBpZiAoa2V5ZnJhbWUpIG1lbXNldChzaGRyLCAwLCBzaXplb2YoKnNoZHIpKTsKLQotICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZzaGRyLT5zZWdtZW50YXRpb25fZW5hYmxlZCk7Ci0gIGlmICghc2hkci0+c2VnbWVudGF0aW9uX2VuYWJsZWQpIHJldHVybiB0cnVlOwotCi0gIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJnNoZHItPnVwZGF0ZV9tYl9zZWdtZW50YXRpb25fbWFwKTsKLSAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmc2hkci0+dXBkYXRlX3NlZ21lbnRfZmVhdHVyZV9kYXRhKTsKLSAgaWYgKHNoZHItPnVwZGF0ZV9zZWdtZW50X2ZlYXR1cmVfZGF0YSkgewotICAgIGludCBtb2RlOwotICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDEsICZtb2RlKTsKLSAgICBzaGRyLT5zZWdtZW50X2ZlYXR1cmVfbW9kZSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PFZwOFNlZ21lbnRhdGlvbkhlYWRlcjo6U2VnbWVudEZlYXR1cmVNb2RlPihtb2RlKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga01heE1CU2VnbWVudHM7ICsraSkgewotICAgICAgYm9vbCBxdWFudGl6ZXJfdXBkYXRlOwotICAgICAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmcXVhbnRpemVyX3VwZGF0ZSk7Ci0gICAgICBpZiAocXVhbnRpemVyX3VwZGF0ZSkKLSAgICAgICAgQkRfUkVBRF9TSUdORURfT1JfUkVUVVJOKDcsICZzaGRyLT5xdWFudGl6ZXJfdXBkYXRlX3ZhbHVlW2ldKTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2hkci0+cXVhbnRpemVyX3VwZGF0ZV92YWx1ZVtpXSA9IDA7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTWF4TUJTZWdtZW50czsgKytpKSB7Ci0gICAgICBib29sIGxvb3BfZmlsdGVyX3VwZGF0ZTsKLSAgICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmxvb3BfZmlsdGVyX3VwZGF0ZSk7Ci0gICAgICBpZiAobG9vcF9maWx0ZXJfdXBkYXRlKQotICAgICAgICBCRF9SRUFEX1NJR05FRF9PUl9SRVRVUk4oNiwgJnNoZHItPmxmX3VwZGF0ZV92YWx1ZVtpXSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHNoZHItPmxmX3VwZGF0ZV92YWx1ZVtpXSA9IDA7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHNoZHItPnVwZGF0ZV9tYl9zZWdtZW50YXRpb25fbWFwKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtTUJGZWF0dXJlVHJlZVByb2JzOyArK2kpIHsKLSAgICAgIGJvb2wgc2VnbWVudF9wcm9iX3VwZGF0ZTsKLSAgICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJnNlZ21lbnRfcHJvYl91cGRhdGUpOwotICAgICAgaWYgKHNlZ21lbnRfcHJvYl91cGRhdGUpCi0gICAgICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDgsICZzaGRyLT5zZWdtZW50X3Byb2JbaV0pOwotICAgICAgZWxzZQotICAgICAgICBzaGRyLT5zZWdtZW50X3Byb2JbaV0gPSBWcDhTZWdtZW50YXRpb25IZWFkZXI6OmtEZWZhdWx0U2VnbWVudFByb2I7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVnA4UGFyc2VyOjpQYXJzZUxvb3BGaWx0ZXJIZWFkZXIoYm9vbCBrZXlmcmFtZSkgewotICBWcDhMb29wRmlsdGVySGVhZGVyKiBsZmhkciA9ICZjdXJyX2xvb3BmaWx0ZXJfaGRyXzsKLQotICBpZiAoa2V5ZnJhbWUpIG1lbXNldChsZmhkciwgMCwgc2l6ZW9mKCpsZmhkcikpOwotCi0gIGludCB0eXBlOwotICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTigxLCAmdHlwZSk7Ci0gIGxmaGRyLT50eXBlID0gc3RhdGljX2Nhc3Q8VnA4TG9vcEZpbHRlckhlYWRlcjo6VHlwZT4odHlwZSk7Ci0gIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDYsICZsZmhkci0+bGV2ZWwpOwotICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTigzLCAmbGZoZHItPnNoYXJwbmVzc19sZXZlbCk7Ci0gIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmxmaGRyLT5sb29wX2ZpbHRlcl9hZGpfZW5hYmxlKTsKLQotICBpZiAobGZoZHItPmxvb3BfZmlsdGVyX2Fkal9lbmFibGUpIHsKLSAgICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZsZmhkci0+bW9kZV9yZWZfbGZfZGVsdGFfdXBkYXRlKTsKLSAgICBpZiAobGZoZHItPm1vZGVfcmVmX2xmX2RlbHRhX3VwZGF0ZSkgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtQmxvY2tDb250ZXh0czsgKytpKSB7Ci0gICAgICAgIGJvb2wgcmVmX2ZyYW1lX2RlbHRhX3VwZGF0ZV9mbGFnOwotICAgICAgICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZyZWZfZnJhbWVfZGVsdGFfdXBkYXRlX2ZsYWcpOwotICAgICAgICBpZiAocmVmX2ZyYW1lX2RlbHRhX3VwZGF0ZV9mbGFnKQotICAgICAgICAgIEJEX1JFQURfU0lHTkVEX09SX1JFVFVSTig2LCAmbGZoZHItPnJlZl9mcmFtZV9kZWx0YVtpXSk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUJsb2NrQ29udGV4dHM7ICsraSkgewotICAgICAgICBib29sIG1iX21vZGVfZGVsdGFfdXBkYXRlX2ZsYWc7Ci0gICAgICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJm1iX21vZGVfZGVsdGFfdXBkYXRlX2ZsYWcpOwotICAgICAgICBpZiAobWJfbW9kZV9kZWx0YV91cGRhdGVfZmxhZykKLSAgICAgICAgICBCRF9SRUFEX1NJR05FRF9PUl9SRVRVUk4oNiwgJmxmaGRyLT5tYl9tb2RlX2RlbHRhW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWcDhQYXJzZXI6OlBhcnNlUXVhbnRpemF0aW9uSGVhZGVyKFZwOFF1YW50aXphdGlvbkhlYWRlciogcWhkcikgewotICAvLyBJZiBhbnkgb2YgdGhlIGRlbHRhIHZhbHVlcyBpcyBub3QgcHJlc2VudCwgdGhlIGRlbHRhIHNob3VsZCBiZSB6ZXJvLgotICBtZW1zZXQocWhkciwgMCwgc2l6ZW9mKCpxaGRyKSk7Ci0KLSAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oNywgJnFoZHItPnlfYWNfcWkpOwotCi0gIGJvb2wgZGVsdGFfcHJlc2VudDsKLQotICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZkZWx0YV9wcmVzZW50KTsKLSAgaWYgKGRlbHRhX3ByZXNlbnQpIEJEX1JFQURfU0lHTkVEX09SX1JFVFVSTig0LCAmcWhkci0+eV9kY19kZWx0YSk7Ci0KLSAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmZGVsdGFfcHJlc2VudCk7Ci0gIGlmIChkZWx0YV9wcmVzZW50KSBCRF9SRUFEX1NJR05FRF9PUl9SRVRVUk4oNCwgJnFoZHItPnkyX2RjX2RlbHRhKTsKLQotICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZkZWx0YV9wcmVzZW50KTsKLSAgaWYgKGRlbHRhX3ByZXNlbnQpIEJEX1JFQURfU0lHTkVEX09SX1JFVFVSTig0LCAmcWhkci0+eTJfYWNfZGVsdGEpOwotCi0gIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmRlbHRhX3ByZXNlbnQpOwotICBpZiAoZGVsdGFfcHJlc2VudCkgQkRfUkVBRF9TSUdORURfT1JfUkVUVVJOKDQsICZxaGRyLT51dl9kY19kZWx0YSk7Ci0KLSAgQkRfUkVBRF9CT09MX09SX1JFVFVSTigmZGVsdGFfcHJlc2VudCk7Ci0gIGlmIChkZWx0YV9wcmVzZW50KSBCRF9SRUFEX1NJR05FRF9PUl9SRVRVUk4oNCwgJnFoZHItPnV2X2FjX2RlbHRhKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gU2VlIHNwZWMgZm9yIGRldGFpbHMgb24gdGhlc2UgdmFsdWVzLgotY29uc3QgdWludDhfdCBrQ29lZmZVcGRhdGVQcm9icwotICAgIFtrTnVtQmxvY2tUeXBlc11ba051bUNvZWZmQmFuZHNdW2tOdW1QcmV2Q29lZmZDb250ZXh0c11ba051bUVudHJvcHlOb2Rlc10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MTc2LCAyNDYsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjIzLCAyNDEsIDI1MiwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ5LCAyNTMsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNDQsIDI1MiwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjM0LCAyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUzLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNDYsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjM5LCAyNTMsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU0LCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNDgsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUxLCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTMsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUxLCAyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU0LCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTQsIDI1MywgMjU1LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUwLCAyNTUsIDI1NCwgMjU1LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezIxNywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezIyNSwgMjUyLCAyNDEsIDI1MywgMjU1LCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezIzNCwgMjUwLCAyNDEsIDI1MCwgMjUzLCAyNTUsIDI1MywgMjU0LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezIyMywgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezIzOCwgMjUzLCAyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjQ4LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI0OSwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjUzLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI0NywgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjUzLCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1MiwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU0LCAyNTMsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1MCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICAgICAgezI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsxODYsIDI1MSwgMjUwLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyMzQsIDI1MSwgMjQ0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTEsIDI1MSwgMjQzLCAyNTMsIDI1NCwgMjU1LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1MywgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyMzYsIDI1MywgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTEsIDI1MywgMjUzLCAyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NCwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTQsIDI1NCwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTQsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NX0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjQ4LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUwLCAyNTQsIDI1MiwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ4LCAyNTQsIDI0OSwgMjUzLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTMsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ2LCAyNTMsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUyLCAyNTQsIDI1MSwgMjU0LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTQsIDI1MiwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ4LCAyNTQsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUzLCAyNTUsIDI1NCwgMjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTEsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ1LCAyNTEsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUzLCAyNTMsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTEsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUyLCAyNTMsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTIsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjQ5LCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NCwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1MywgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjUwLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU0LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgICAgICB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTV9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotfTsKLQotY29uc3QgdWludDhfdCBrS2V5ZnJhbWVZTW9kZVByb2JzW2tOdW1ZTW9kZVByb2JzXSA9IHsxNDUsIDE1NiwgMTYzLCAxMjh9OwotY29uc3QgdWludDhfdCBrS2V5ZnJhbWVVVk1vZGVQcm9ic1trTnVtVVZNb2RlUHJvYnNdID0gezE0MiwgMTE0LCAxODN9OwotCi1jb25zdCB1aW50OF90IGtEZWZhdWx0WU1vZGVQcm9ic1trTnVtWU1vZGVQcm9ic10gPSB7MTEyLCA4NiwgMTQwLCAzN307Ci1jb25zdCB1aW50OF90IGtEZWZhdWx0VVZNb2RlUHJvYnNba051bVVWTW9kZVByb2JzXSA9IHsxNjIsIDEwMSwgMjA0fTsKLQotY29uc3QgdWludDhfdCBrRGVmYXVsdENvZWZmUHJvYnMKLSAgICBba051bUJsb2NrVHlwZXNdW2tOdW1Db2VmZkJhbmRzXVtrTnVtUHJldkNvZWZmQ29udGV4dHNdW2tOdW1FbnRyb3B5Tm9kZXNdID0KLSAgICAgICAgewotICAgICAgICAgICAge3sKLSAgICAgICAgICAgICAgICAgezEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezI1MywgMTM2LCAyNTQsIDI1NSwgMjI4LCAyMTksIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE4OSwgMTI5LCAyNDIsIDI1NSwgMjI3LCAyMTMsIDI1NSwgMjE5LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEwNiwgMTI2LCAyMjcsIDI1MiwgMjE0LCAyMDksIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDk4LCAyNDgsIDI1NSwgMjM2LCAyMjYsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE4MSwgMTMzLCAyMzgsIDI1NCwgMjIxLCAyMzQsIDI1NSwgMTU0LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezc4LCAxMzQsIDIwMiwgMjQ3LCAxOTgsIDE4MCwgMjU1LCAyMTksIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMTg1LCAyNDksIDI1NSwgMjQzLCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE4NCwgMTUwLCAyNDcsIDI1NSwgMjM2LCAyMjQsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezc3LCAxMTAsIDIxNiwgMjU1LCAyMzYsIDIzMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMTAxLCAyNTEsIDI1NSwgMjQxLCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE3MCwgMTM5LCAyNDEsIDI1MiwgMjM2LCAyMDksIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezM3LCAxMTYsIDE5NiwgMjQzLCAyMjgsIDI1NSwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMjA0LCAyNTQsIDI1NSwgMjQ1LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezIwNywgMTYwLCAyNTAsIDI1NSwgMjM4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEwMiwgMTAzLCAyMzEsIDI1NSwgMjExLCAxNzEsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDE1MiwgMjUyLCAyNTUsIDI0MCwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxNzcsIDEzNSwgMjQzLCAyNTUsIDIzNCwgMjI1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHs4MCwgMTI5LCAyMTEsIDI1NSwgMTk0LCAyMjQsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDEsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MjQ2LCAxLCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9fSwKLSAgICAgICAgICAgIHt7Ci0gICAgICAgICAgICAgICAgIHsxOTgsIDM1LCAyMzcsIDIyMywgMTkzLCAxODcsIDE2MiwgMTYwLCAxNDUsIDE1NSwgNjJ9LAotICAgICAgICAgICAgICAgICB7MTMxLCA0NSwgMTk4LCAyMjEsIDE3MiwgMTc2LCAyMjAsIDE1NywgMjUyLCAyMjEsIDF9LAotICAgICAgICAgICAgICAgICB7NjgsIDQ3LCAxNDYsIDIwOCwgMTQ5LCAxNjcsIDIyMSwgMTYyLCAyNTUsIDIyMywgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDE0OSwgMjQxLCAyNTUsIDIyMSwgMjI0LCAyNTUsIDI1NSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxODQsIDE0MSwgMjM0LCAyNTMsIDIyMiwgMjIwLCAyNTUsIDE5OSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHs4MSwgOTksIDE4MSwgMjQyLCAxNzYsIDE5MCwgMjQ5LCAyMDIsIDI1NSwgMjU1LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMTI5LCAyMzIsIDI1MywgMjE0LCAxOTcsIDI0MiwgMTk2LCAyNTUsIDI1NSwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezk5LCAxMjEsIDIxMCwgMjUwLCAyMDEsIDE5OCwgMjU1LCAyMDIsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MjMsIDkxLCAxNjMsIDI0MiwgMTcwLCAxODcsIDI0NywgMjEwLCAyNTUsIDI1NSwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDIwMCwgMjQ2LCAyNTUsIDIzNCwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxMDksIDE3OCwgMjQxLCAyNTUsIDIzMSwgMjQ1LCAyNTUsIDI1NSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHs0NCwgMTMwLCAyMDEsIDI1MywgMjA1LCAxOTIsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDEzMiwgMjM5LCAyNTEsIDIxOSwgMjA5LCAyNTUsIDE2NSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHs5NCwgMTM2LCAyMjUsIDI1MSwgMjE4LCAxOTAsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezIyLCAxMDAsIDE3NCwgMjQ1LCAxODYsIDE2MSwgMjU1LCAxOTksIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMTgyLCAyNDksIDI1NSwgMjMyLCAyMzUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEyNCwgMTQzLCAyNDEsIDI1NSwgMjI3LCAyMzQsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezM1LCA3NywgMTgxLCAyNTEsIDE5MywgMjExLCAyNTUsIDIwNSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHsxLCAxNTcsIDI0NywgMjU1LCAyMzYsIDIzMSwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MTIxLCAxNDEsIDIzNSwgMjU1LCAyMjUsIDIyNywgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7NDUsIDk5LCAxODgsIDI1MSwgMTk1LCAyMTcsIDI1NSwgMjI0LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDEsIDI1MSwgMjU1LCAyMTMsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MjAzLCAxLCAyNDgsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezEzNywgMSwgMTc3LCAyNTUsIDIyNCwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICB7ewotICAgICAgICAgICAgICAgICB7MjUzLCA5LCAyNDgsIDI1MSwgMjA3LCAyMDgsIDI1NSwgMTkyLCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE3NSwgMTMsIDIyNCwgMjQzLCAxOTMsIDE4NSwgMjQ5LCAxOTgsIDI1NSwgMjU1LCAxMjh9LAotICAgICAgICAgICAgICAgICB7NzMsIDE3LCAxNzEsIDIyMSwgMTYxLCAxNzksIDIzNiwgMTY3LCAyNTUsIDIzNCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDk1LCAyNDcsIDI1MywgMjEyLCAxODMsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezIzOSwgOTAsIDI0NCwgMjUwLCAyMTEsIDIwOSwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MTU1LCA3NywgMTk1LCAyNDgsIDE4OCwgMTk1LCAyNTUsIDI1NSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHsxLCAyNCwgMjM5LCAyNTEsIDIxOCwgMjE5LCAyNTUsIDIwNSwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsyMDEsIDUxLCAyMTksIDI1NSwgMTk2LCAxODYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezY5LCA0NiwgMTkwLCAyMzksIDIwMSwgMjE4LCAyNTUsIDIyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHsxLCAxOTEsIDI1MSwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MjIzLCAxNjUsIDI0OSwgMjU1LCAyMTMsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MTQxLCAxMjQsIDI0OCwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMTYsIDI0OCwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICB7MTkwLCAzNiwgMjMwLCAyNTUsIDIzNiwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxNDksIDEsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICB7MSwgMjI2LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezI0NywgMTkyLCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezI0MCwgMTI4LCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgezEsIDEzNCwgMjUyLCAyNTUsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsyMTMsIDYyLCAyNTAsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezU1LCA5MywgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIHsxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgIHsxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MjAyLCAyNCwgMjEzLCAyMzUsIDE4NiwgMTkxLCAyMjAsIDE2MCwgMjQwLCAxNzUsIDI1NX0sCi0gICAgICAgICAgICAgICAgICAgIHsxMjYsIDM4LCAxODIsIDIzMiwgMTY5LCAxODQsIDIyOCwgMTc0LCAyNTUsIDE4NywgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezYxLCA0NiwgMTM4LCAyMTksIDE1MSwgMTc4LCAyNDAsIDE3MCwgMjU1LCAyMTYsIDEyOH0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsxLCAxMTIsIDIzMCwgMjUwLCAxOTksIDE5MSwgMjQ3LCAxNTksIDI1NSwgMjU1LCAxMjh9LAotICAgICAgICAgICAgICAgICAgICB7MTY2LCAxMDksIDIyOCwgMjUyLCAyMTEsIDIxNSwgMjU1LCAxNzQsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICAgICB7MzksIDc3LCAxNjIsIDIzMiwgMTcyLCAxODAsIDI0NSwgMTc4LCAyNTUsIDI1NSwgMTI4fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezEsIDUyLCAyMjAsIDI0NiwgMTk4LCAxOTksIDI0OSwgMjIwLCAyNTUsIDI1NSwgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezEyNCwgNzQsIDE5MSwgMjQzLCAxODMsIDE5MywgMjUwLCAyMjEsIDI1NSwgMjU1LCAxMjh9LAotICAgICAgICAgICAgICAgICAgICB7MjQsIDcxLCAxMzAsIDIxOSwgMTU0LCAxNzAsIDI0MywgMTgyLCAyNTUsIDI1NSwgMTI4fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHt7MSwgMTgyLCAyMjUsIDI0OSwgMjE5LCAyNDAsIDI1NSwgMjI0LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezE0OSwgMTUwLCAyMjYsIDI1MiwgMjE2LCAyMDUsIDI1NSwgMTcxLCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgezI4LCAxMDgsIDE3MCwgMjQyLCAxODMsIDE5NCwgMjU0LCAyMjMsIDI1NSwgMjU1LCAxMjh9fSwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsxLCA4MSwgMjMwLCAyNTIsIDIwNCwgMjAzLCAyNTUsIDE5MiwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgICAgIHsxMjMsIDEwMiwgMjA5LCAyNDcsIDE4OCwgMTk2LCAyNTUsIDIzMywgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgICAgIHsyMCwgOTUsIDE1MywgMjQzLCAxNjQsIDE3MywgMjU1LCAyMDMsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MSwgMjIyLCAyNDgsIDI1NSwgMjE2LCAyMTMsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezE2OCwgMTc1LCAyNDYsIDI1MiwgMjM1LCAyMDUsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezQ3LCAxMTYsIDIxNSwgMjU1LCAyMTEsIDIxMiwgMjU1LCAyNTUsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB7MSwgMTIxLCAyMzYsIDI1MywgMjEyLCAyMTQsIDI1NSwgMjU1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezE0MSwgODQsIDIxMywgMjUyLCAyMDEsIDIwMiwgMjU1LCAyMTksIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICAgICB7NDIsIDgwLCAxNjAsIDI0MCwgMTYyLCAxODUsIDI1NSwgMjA1LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgezEsIDEsIDI1NSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjh9LAotICAgICAgICAgICAgICAgICAgICB7MjQ0LCAxLCAyNTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4fSwKLSAgICAgICAgICAgICAgICAgICAgezIzOCwgMSwgMjU1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOH0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0sCi19OwotCi1jb25zdCB1aW50OF90IGtNVlVwZGF0ZVByb2JzW2tOdW1NVkNvbnRleHRzXVtrTnVtTVZQcm9ic10gPSB7Ci0gICAgewotICAgICAgICAyMzcsIDI0NiwgMjUzLCAyNTMsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsCi0gICAgICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjUwLCAyNTAsIDI1MiwgMjU0LCAyNTQsCi0gICAgfSwKLSAgICB7Ci0gICAgICAgIDIzMSwgMjQzLCAyNDUsIDI1MywgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwKLSAgICAgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTEsIDI1MSwgMjU0LCAyNTQsIDI1NCwKLSAgICB9LAotfTsKLQotY29uc3QgdWludDhfdCBrRGVmYXVsdE1WUHJvYnNba051bU1WQ29udGV4dHNdW2tOdW1NVlByb2JzXSA9IHsKLSAgICB7Ci0gICAgICAgIDE2MiwgMTI4LCAyMjUsIDE0NiwgMTcyLCAxNDcsIDIxNCwgMzksICAxNTYsIDEyOCwKLSAgICAgICAgMTI5LCAxMzIsIDc1LCAgMTQ1LCAxNzgsIDIwNiwgMjM5LCAyNTQsIDI1NCwKLSAgICB9LAotICAgIHsKLSAgICAgICAgMTY0LCAxMjgsIDIwNCwgMTcwLCAxMTksIDIzNSwgMTQwLCAyMzAsIDIyOCwgMTI4LAotICAgICAgICAxMzAsIDEzMCwgNzQsICAxNDgsIDE4MCwgMjAzLCAyMzYsIDI1NCwgMjU0LAotICAgIH0sCi19OwotCi12b2lkIFZwOFBhcnNlcjo6UmVzZXRQcm9icygpIHsKLSAgc3RhdGljX2Fzc2VydCgKLSAgICAgIHNpemVvZihjdXJyX2VudHJvcHlfaGRyXy5jb2VmZl9wcm9icykgPT0gc2l6ZW9mKGtEZWZhdWx0Q29lZmZQcm9icyksCi0gICAgICAiY29lZmZfcHJvYnNfYXJyYXlzX211c3RfYmVfb2ZfY29ycmVjdF9zaXplIik7Ci0gIG1lbWNweShjdXJyX2VudHJvcHlfaGRyXy5jb2VmZl9wcm9icywga0RlZmF1bHRDb2VmZlByb2JzLAotICAgICAgICAgICAgICAgc2l6ZW9mKGN1cnJfZW50cm9weV9oZHJfLmNvZWZmX3Byb2JzKSk7Ci0KLSAgc3RhdGljX2Fzc2VydChzaXplb2YoY3Vycl9lbnRyb3B5X2hkcl8ubXZfcHJvYnMpID09IHNpemVvZihrRGVmYXVsdE1WUHJvYnMpLAotICAgICAgICAgICAgICAgICJtdl9wcm9ic19hcnJheXNfbXVzdF9iZV9vZl9jb3JyZWN0X3NpemUiKTsKLSAgbWVtY3B5KGN1cnJfZW50cm9weV9oZHJfLm12X3Byb2JzLCBrRGVmYXVsdE1WUHJvYnMsCi0gICAgICAgICAgICAgICBzaXplb2YoY3Vycl9lbnRyb3B5X2hkcl8ubXZfcHJvYnMpKTsKLQotICBzdGF0aWNfYXNzZXJ0KAotICAgICAgc2l6ZW9mKGN1cnJfZW50cm9weV9oZHJfLnlfbW9kZV9wcm9icykgPT0gc2l6ZW9mKGtEZWZhdWx0WU1vZGVQcm9icyksCi0gICAgICAieV9wcm9ic19hcnJheXNfbXVzdF9iZV9vZl9jb3JyZWN0X3NpemUiKTsKLSAgbWVtY3B5KGN1cnJfZW50cm9weV9oZHJfLnlfbW9kZV9wcm9icywga0RlZmF1bHRZTW9kZVByb2JzLAotICAgICAgICAgICAgICAgc2l6ZW9mKGN1cnJfZW50cm9weV9oZHJfLnlfbW9kZV9wcm9icykpOwotCi0gIHN0YXRpY19hc3NlcnQoCi0gICAgICBzaXplb2YoY3Vycl9lbnRyb3B5X2hkcl8udXZfbW9kZV9wcm9icykgPT0gc2l6ZW9mKGtEZWZhdWx0VVZNb2RlUHJvYnMpLAotICAgICAgInV2X3Byb2JzX2FycmF5c19tdXN0X2JlX29mX2NvcnJlY3Rfc2l6ZSIpOwotICBtZW1jcHkoY3Vycl9lbnRyb3B5X2hkcl8udXZfbW9kZV9wcm9icywga0RlZmF1bHRVVk1vZGVQcm9icywKLSAgICAgICAgICAgICAgIHNpemVvZihjdXJyX2VudHJvcHlfaGRyXy51dl9tb2RlX3Byb2JzKSk7Ci19Ci0KLWJvb2wgVnA4UGFyc2VyOjpQYXJzZVRva2VuUHJvYnMoVnA4RW50cm9weUhlYWRlciogZWhkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1cGRhdGVfY3Vycl9wcm9icykgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtOdW1CbG9ja1R5cGVzOyArK2kpIHsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtOdW1Db2VmZkJhbmRzOyArK2opIHsKLSAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwga051bVByZXZDb2VmZkNvbnRleHRzOyArK2spIHsKLSAgICAgICAgZm9yIChzaXplX3QgbCA9IDA7IGwgPCBrTnVtRW50cm9weU5vZGVzOyArK2wpIHsKLSAgICAgICAgICBib29sIGNvZWZmX3Byb2JfdXBkYXRlX2ZsYWc7Ci0gICAgICAgICAgQkRfUkVBRF9CT09MX1dJVEhfUFJPQl9PUl9SRVRVUk4oJmNvZWZmX3Byb2JfdXBkYXRlX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NvZWZmVXBkYXRlUHJvYnNbaV1bal1ba11bbF0pOwotICAgICAgICAgIGlmIChjb2VmZl9wcm9iX3VwZGF0ZV9mbGFnKQotICAgICAgICAgICAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oOCwgJmVoZHItPmNvZWZmX3Byb2JzW2ldW2pdW2tdW2xdKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICh1cGRhdGVfY3Vycl9wcm9icykgewotICAgIG1lbWNweShjdXJyX2VudHJvcHlfaGRyXy5jb2VmZl9wcm9icywgZWhkci0+Y29lZmZfcHJvYnMsCi0gICAgICAgICAgICAgICAgIHNpemVvZihjdXJyX2VudHJvcHlfaGRyXy5jb2VmZl9wcm9icykpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVnA4UGFyc2VyOjpQYXJzZUludHJhUHJvYnMoVnA4RW50cm9weUhlYWRlciogZWhkciwgYm9vbCB1cGRhdGVfY3Vycl9wcm9icywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBrZXlmcmFtZSkgewotICBpZiAoa2V5ZnJhbWUpIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihlaGRyLT55X21vZGVfcHJvYnMpID09IHNpemVvZihrS2V5ZnJhbWVZTW9kZVByb2JzKSwKLSAgICAgICAgICAgICAgICAgICJ5X3Byb2JzX2FycmF5c19tdXN0X2JlX29mX2NvcnJlY3Rfc2l6ZSIpOwotICAgIG1lbWNweShlaGRyLT55X21vZGVfcHJvYnMsIGtLZXlmcmFtZVlNb2RlUHJvYnMsCi0gICAgICAgICAgICAgICAgIHNpemVvZihlaGRyLT55X21vZGVfcHJvYnMpKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGVoZHItPnV2X21vZGVfcHJvYnMpID09IHNpemVvZihrS2V5ZnJhbWVVVk1vZGVQcm9icyksCi0gICAgICAgICAgICAgICAgICAidXZfcHJvYnNfYXJyYXlzX211c3RfYmVfb2ZfY29ycmVjdF9zaXplIik7Ci0gICAgbWVtY3B5KGVoZHItPnV2X21vZGVfcHJvYnMsIGtLZXlmcmFtZVVWTW9kZVByb2JzLAotICAgICAgICAgICAgICAgICBzaXplb2YoZWhkci0+dXZfbW9kZV9wcm9icykpOwotICB9IGVsc2UgewotICAgIGJvb2wgaW50cmFfMTZ4MTZfcHJvYl91cGRhdGVfZmxhZzsKLSAgICBCRF9SRUFEX0JPT0xfT1JfUkVUVVJOKCZpbnRyYV8xNngxNl9wcm9iX3VwZGF0ZV9mbGFnKTsKLSAgICBpZiAoaW50cmFfMTZ4MTZfcHJvYl91cGRhdGVfZmxhZykgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrTnVtWU1vZGVQcm9iczsgKytpKQotICAgICAgICBCRF9SRUFEX1VOU0lHTkVEX09SX1JFVFVSTig4LCAmZWhkci0+eV9tb2RlX3Byb2JzW2ldKTsKLQotICAgICAgaWYgKHVwZGF0ZV9jdXJyX3Byb2JzKSB7Ci0gICAgICAgIG1lbWNweShjdXJyX2VudHJvcHlfaGRyXy55X21vZGVfcHJvYnMsIGVoZHItPnlfbW9kZV9wcm9icywKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjdXJyX2VudHJvcHlfaGRyXy55X21vZGVfcHJvYnMpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGludHJhX2Nocm9tYV9wcm9iX3VwZGF0ZV9mbGFnOwotICAgIEJEX1JFQURfQk9PTF9PUl9SRVRVUk4oJmludHJhX2Nocm9tYV9wcm9iX3VwZGF0ZV9mbGFnKTsKLSAgICBpZiAoaW50cmFfY2hyb21hX3Byb2JfdXBkYXRlX2ZsYWcpIHsKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bVVWTW9kZVByb2JzOyArK2kpCi0gICAgICAgIEJEX1JFQURfVU5TSUdORURfT1JfUkVUVVJOKDgsICZlaGRyLT51dl9tb2RlX3Byb2JzW2ldKTsKLQotICAgICAgaWYgKHVwZGF0ZV9jdXJyX3Byb2JzKSB7Ci0gICAgICAgIG1lbWNweShjdXJyX2VudHJvcHlfaGRyXy51dl9tb2RlX3Byb2JzLCBlaGRyLT51dl9tb2RlX3Byb2JzLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN1cnJfZW50cm9weV9oZHJfLnV2X21vZGVfcHJvYnMpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWcDhQYXJzZXI6OlBhcnNlTVZQcm9icyhWcDhFbnRyb3B5SGVhZGVyKiBlaGRyLCBib29sIHVwZGF0ZV9jdXJyX3Byb2JzKSB7Ci0gIGZvciAoc2l6ZV90IG12X2N0eCA9IDA7IG12X2N0eCA8IGtOdW1NVkNvbnRleHRzOyArK212X2N0eCkgewotICAgIGZvciAoc2l6ZV90IHAgPSAwOyBwIDwga051bU1WUHJvYnM7ICsrcCkgewotICAgICAgYm9vbCBtdl9wcm9iX3VwZGF0ZV9mbGFnOwotICAgICAgQkRfUkVBRF9CT09MX1dJVEhfUFJPQl9PUl9SRVRVUk4oJm12X3Byb2JfdXBkYXRlX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTVZVcGRhdGVQcm9ic1ttdl9jdHhdW3BdKTsKLSAgICAgIGlmIChtdl9wcm9iX3VwZGF0ZV9mbGFnKSB7Ci0gICAgICAgIHVpbnQ4X3QgcHJvYjsKLSAgICAgICAgQkRfUkVBRF9VTlNJR05FRF9PUl9SRVRVUk4oNywgJnByb2IpOwotICAgICAgICBlaGRyLT5tdl9wcm9ic1ttdl9jdHhdW3BdID0gcHJvYiA/IChwcm9iIDw8IDEpIDogMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAodXBkYXRlX2N1cnJfcHJvYnMpIHsKLSAgICBtZW1jcHkoY3Vycl9lbnRyb3B5X2hkcl8ubXZfcHJvYnMsIGVoZHItPm12X3Byb2JzLAotICAgICAgICAgICAgICAgICBzaXplb2YoY3Vycl9lbnRyb3B5X2hkcl8ubXZfcHJvYnMpKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZwOFBhcnNlcjo6UGFyc2VQYXJ0aXRpb25zKFZwOEZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIENIRUNLX0dFKGZoZHItPm51bV9vZl9kY3RfcGFydGl0aW9ucywgMXUpOwotICBDSEVDS19MRShmaGRyLT5udW1fb2ZfZGN0X3BhcnRpdGlvbnMsIGtNYXhEQ1RQYXJ0aXRpb25zKTsKLQotICAvLyBEQ1QgcGFydGl0aW9ucyBzdGFydCBhZnRlciB0aGUgZmlyc3QgcGFydGl0aW9uIGFuZCBwYXJ0aXRpb24gc2l6ZSB2YWx1ZXMKLSAgLy8gdGhhdCBmb2xsb3cgaXQuIFRoZXJlIGFyZSBudW1fb2ZfZGN0X3BhcnRpdGlvbnMgLSAxIHNpemVzIHN0b3JlZCBpbiB0aGUKLSAgLy8gc3RyZWFtIGFmdGVyIHRoZSBmaXJzdCBwYXJ0aXRpb24sIGVhY2ggMyBieXRlcyBsb25nLiBUaGUgc2l6ZSBvZiBsYXN0Ci0gIC8vIERDVCBwYXJ0aXRpb24gaXMgbm90IHN0b3JlZCBpbiB0aGUgc3RyZWFtLCBidXQgaXMgaW5zdGVhZCBjYWxjdWxhdGVkIGJ5Ci0gIC8vIHRha2luZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBmcmFtZSBzaXplIGFmdGVyIHRoZSBwZW51bHRpbWF0ZSBEQ1QgcGFydGl0aW9uLgotICBzaXplX3QgZmlyc3RfZGN0X3BvcyA9IGZoZHItPmZpcnN0X3BhcnRfb2Zmc2V0ICsgZmhkci0+Zmlyc3RfcGFydF9zaXplICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZmhkci0+bnVtX29mX2RjdF9wYXJ0aXRpb25zIC0gMSkgKiAzOwotCi0gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZmlyc3QgcGFydGl0aW9uIGFuZCBwYXJ0aXRpb24gc2l6ZXMuCi0gIGlmIChmaGRyLT5mcmFtZV9zaXplIDwgZmlyc3RfZGN0X3BvcykgcmV0dXJuIGZhbHNlOwotCi0gIC8vIFRvdGFsIHNpemUgb2YgYWxsIERDVCBwYXJ0aXRpb25zLgotICBzaXplX3QgYnl0ZXNfbGVmdCA9IGZoZHItPmZyYW1lX3NpemUgLSBmaXJzdF9kY3RfcG9zOwotCi0gIC8vIFBvc2l0aW9uIG91cnNlbHZlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhcnRpdGlvbiBzaXplIHZhbHVlcy4KLSAgY29uc3QgdWludDhfdCogcHRyID0KLSAgICAgIGZoZHItPmRhdGEgKyBmaGRyLT5maXJzdF9wYXJ0X29mZnNldCArIGZoZHItPmZpcnN0X3BhcnRfc2l6ZTsKLQotICAvLyBSZWFkIHNpemVzIGZyb20gdGhlIHN0cmVhbSAoaWYgcHJlc2VudCkuCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmhkci0+bnVtX29mX2RjdF9wYXJ0aXRpb25zIC0gMTsgKytpKSB7Ci0gICAgZmhkci0+ZGN0X3BhcnRpdGlvbl9zaXplc1tpXSA9IChwdHJbMl0gPDwgMTYpIHwgKHB0clsxXSA8PCA4KSB8IHB0clswXTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBkYXRhIGluIHRoZSBzdHJlYW0gZm9yIGl0aCBwYXJ0aXRpb24gYW5kCi0gICAgLy8gc3VidHJhY3QgaXRzIHNpemUgZnJvbSB0b3RhbC4KLSAgICBpZiAoYnl0ZXNfbGVmdCA8IGZoZHItPmRjdF9wYXJ0aXRpb25fc2l6ZXNbaV0pIHJldHVybiBmYWxzZTsKLQotICAgIGJ5dGVzX2xlZnQgLT0gZmhkci0+ZGN0X3BhcnRpdGlvbl9zaXplc1tpXTsKLQotICAgIC8vIE1vdmUgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBuZXh0IHBhcnRpdGlvbiBzaXplIHZhbHVlLgotICAgIHB0ciArPSAzOwotICB9Ci0KLSAgLy8gVGhlIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBiZWxvbmdzIHRvIHRoZSBsYXN0IERDVCBwYXJ0aXRpb24uCi0gIGZoZHItPmRjdF9wYXJ0aXRpb25fc2l6ZXNbZmhkci0+bnVtX29mX2RjdF9wYXJ0aXRpb25zIC0gMV0gPSBieXRlc19sZWZ0OwotCi0gIERWTE9HKDQpIDw8ICJDb250cm9sIHBhcnQgc2l6ZTogIiA8PCBmaGRyLT5maXJzdF9wYXJ0X3NpemU7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmhkci0+bnVtX29mX2RjdF9wYXJ0aXRpb25zOyArK2kpCi0gICAgRFZMT0coNCkgPDwgIkRDVCBwYXJ0ICIgPDwgaSA8PCAiIHNpemU6ICIgPDwgZmhkci0+ZGN0X3BhcnRpdGlvbl9zaXplc1tpXTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZTJjNDQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBWUDggcmF3IHN0cmVhbSBwYXJzZXIsCi0vLyBhcyBkZWZpbmVkIGluIFJGQyA2Mzg2LgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOF9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA4X1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X2Jvb2xfZGVjb2Rlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFNlZSBzcGVjIGZvciBkZWZpbml0aW9ucyBvZiB2YWx1ZXMvZmllbGRzLgotY29uc3Qgc2l6ZV90IGtNYXhNQlNlZ21lbnRzID0gNDsKLWNvbnN0IHNpemVfdCBrTnVtTUJGZWF0dXJlVHJlZVByb2JzID0gMzsKLQotLy8gTWVtYmVyIG9mIFZwOEZyYW1lSGVhZGVyIGFuZCB3aWxsIGJlIDAtaW5pdGlhbGl6ZWQKLS8vIGluIFZwOEZyYW1lSGVhZGVyJ3MgY29uc3RydWN0b3IuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZwOFNlZ21lbnRhdGlvbkhlYWRlciB7Ci0gIGVudW0gU2VnbWVudEZlYXR1cmVNb2RlIHsgRkVBVFVSRV9NT0RFX0RFTFRBID0gMCwgRkVBVFVSRV9NT0RFX0FCU09MVVRFID0gMSB9OwotCi0gIGJvb2wgc2VnbWVudGF0aW9uX2VuYWJsZWQ7Ci0gIGJvb2wgdXBkYXRlX21iX3NlZ21lbnRhdGlvbl9tYXA7Ci0gIGJvb2wgdXBkYXRlX3NlZ21lbnRfZmVhdHVyZV9kYXRhOwotICBTZWdtZW50RmVhdHVyZU1vZGUgc2VnbWVudF9mZWF0dXJlX21vZGU7Ci0KLSAgaW50OF90IHF1YW50aXplcl91cGRhdGVfdmFsdWVba01heE1CU2VnbWVudHNdOwotICBpbnQ4X3QgbGZfdXBkYXRlX3ZhbHVlW2tNYXhNQlNlZ21lbnRzXTsKLSAgc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdFNlZ21lbnRQcm9iID0gMjU1OwotICB1aW50OF90IHNlZ21lbnRfcHJvYltrTnVtTUJGZWF0dXJlVHJlZVByb2JzXTsKLX07Ci0KLWNvbnN0IHNpemVfdCBrTnVtQmxvY2tDb250ZXh0cyA9IDQ7Ci0KLS8vIE1lbWJlciBvZiBWcDhGcmFtZUhlYWRlciBhbmQgd2lsbCBiZSAwLWluaXRpYWxpemVkCi0vLyBpbiBWcDhGcmFtZUhlYWRlcidzIGNvbnN0cnVjdG9yLgotc3RydWN0IE1FRElBX0VYUE9SVCBWcDhMb29wRmlsdGVySGVhZGVyIHsKLSAgZW51bSBUeXBlIHsgTE9PUF9GSUxURVJfVFlQRV9OT1JNQUwgPSAwLCBMT09QX0ZJTFRFUl9UWVBFX1NJTVBMRSA9IDEgfTsKLSAgVHlwZSB0eXBlOwotICB1aW50OF90IGxldmVsOwotICB1aW50OF90IHNoYXJwbmVzc19sZXZlbDsKLSAgYm9vbCBsb29wX2ZpbHRlcl9hZGpfZW5hYmxlOwotICBib29sIG1vZGVfcmVmX2xmX2RlbHRhX3VwZGF0ZTsKLQotICBpbnQ4X3QgcmVmX2ZyYW1lX2RlbHRhW2tOdW1CbG9ja0NvbnRleHRzXTsKLSAgaW50OF90IG1iX21vZGVfZGVsdGFba051bUJsb2NrQ29udGV4dHNdOwotfTsKLQotLy8gTWVtYmVyIG9mIFZwOEZyYW1lSGVhZGVyIGFuZCB3aWxsIGJlIDAtaW5pdGlhbGl6ZWQKLS8vIGluIFZwOEZyYW1lSGVhZGVyJ3MgY29uc3RydWN0b3IuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZwOFF1YW50aXphdGlvbkhlYWRlciB7Ci0gIHVpbnQ4X3QgeV9hY19xaTsKLSAgaW50OF90IHlfZGNfZGVsdGE7Ci0gIGludDhfdCB5Ml9kY19kZWx0YTsKLSAgaW50OF90IHkyX2FjX2RlbHRhOwotICBpbnQ4X3QgdXZfZGNfZGVsdGE7Ci0gIGludDhfdCB1dl9hY19kZWx0YTsKLX07Ci0KLWNvbnN0IHNpemVfdCBrTnVtQmxvY2tUeXBlcyA9IDQ7Ci1jb25zdCBzaXplX3Qga051bUNvZWZmQmFuZHMgPSA4OwotY29uc3Qgc2l6ZV90IGtOdW1QcmV2Q29lZmZDb250ZXh0cyA9IDM7Ci1jb25zdCBzaXplX3Qga051bUVudHJvcHlOb2RlcyA9IDExOwotCi1jb25zdCBzaXplX3Qga051bU1WQ29udGV4dHMgPSAyOwotY29uc3Qgc2l6ZV90IGtOdW1NVlByb2JzID0gMTk7Ci0KLWNvbnN0IHNpemVfdCBrTnVtWU1vZGVQcm9icyA9IDQ7Ci1jb25zdCBzaXplX3Qga051bVVWTW9kZVByb2JzID0gMzsKLQotLy8gTWVtYmVyIG9mIFZwOEZyYW1lSGVhZGVyIGFuZCB3aWxsIGJlIDAtaW5pdGlhbGl6ZWQKLS8vIGluIFZwOEZyYW1lSGVhZGVyJ3MgY29uc3RydWN0b3IuCi1zdHJ1Y3QgVnA4RW50cm9weUhlYWRlciB7Ci0gIHVpbnQ4X3QgY29lZmZfcHJvYnNba051bUJsb2NrVHlwZXNdW2tOdW1Db2VmZkJhbmRzXVtrTnVtUHJldkNvZWZmQ29udGV4dHNdCi0gICAgICAgICAgICAgICAgICAgICBba051bUVudHJvcHlOb2Rlc107Ci0KLSAgdWludDhfdCB5X21vZGVfcHJvYnNba051bVlNb2RlUHJvYnNdOwotICB1aW50OF90IHV2X21vZGVfcHJvYnNba051bVVWTW9kZVByb2JzXTsKLQotICB1aW50OF90IG12X3Byb2JzW2tOdW1NVkNvbnRleHRzXVtrTnVtTVZQcm9ic107Ci19OwotCi1jb25zdCBzaXplX3Qga01heERDVFBhcnRpdGlvbnMgPSA4OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZwOEZyYW1lSGVhZGVyIHsKLSAgVnA4RnJhbWVIZWFkZXIoKTsKLQotICBlbnVtIEZyYW1lVHlwZSB7IEtFWUZSQU1FID0gMCwgSU5URVJGUkFNRSA9IDEgfTsKLSAgYm9vbCBJc0tleWZyYW1lKCkgY29uc3QgeyByZXR1cm4ga2V5X2ZyYW1lID09IEtFWUZSQU1FOyB9Ci0KLSAgZW51bSBHb2xkZW5SZWZyZXNoTW9kZSB7Ci0gICAgQ09QWV9MQVNUX1RPX0dPTERFTiA9IDEsCi0gICAgQ09QWV9BTFRfVE9fR09MREVOID0gMiwKLSAgfTsKLQotICBlbnVtIEFsdFJlZnJlc2hNb2RlIHsKLSAgICBDT1BZX0xBU1RfVE9fQUxUID0gMSwKLSAgICBDT1BZX0dPTERFTl9UT19BTFQgPSAyLAotICB9OwotCi0gIEZyYW1lVHlwZSBrZXlfZnJhbWU7Ci0gIHVpbnQ4X3QgdmVyc2lvbjsKLSAgYm9vbCBpc19leHBlcmltZW50YWw7Ci0gIGJvb2wgc2hvd19mcmFtZTsKLSAgc2l6ZV90IGZpcnN0X3BhcnRfc2l6ZTsKLQotICB1aW50MTZfdCB3aWR0aDsKLSAgdWludDhfdCBob3Jpem9udGFsX3NjYWxlOwotICB1aW50MTZfdCBoZWlnaHQ7Ci0gIHVpbnQ4X3QgdmVydGljYWxfc2NhbGU7Ci0KLSAgVnA4U2VnbWVudGF0aW9uSGVhZGVyIHNlZ21lbnRhdGlvbl9oZHI7Ci0gIFZwOExvb3BGaWx0ZXJIZWFkZXIgbG9vcGZpbHRlcl9oZHI7Ci0gIFZwOFF1YW50aXphdGlvbkhlYWRlciBxdWFudGl6YXRpb25faGRyOwotCi0gIHNpemVfdCBudW1fb2ZfZGN0X3BhcnRpdGlvbnM7Ci0KLSAgVnA4RW50cm9weUhlYWRlciBlbnRyb3B5X2hkcjsKLQotICBib29sIHJlZnJlc2hfZW50cm9weV9wcm9iczsKLSAgYm9vbCByZWZyZXNoX2dvbGRlbl9mcmFtZTsKLSAgYm9vbCByZWZyZXNoX2FsdGVybmF0ZV9mcmFtZTsKLSAgR29sZGVuUmVmcmVzaE1vZGUgY29weV9idWZmZXJfdG9fZ29sZGVuOwotICBBbHRSZWZyZXNoTW9kZSBjb3B5X2J1ZmZlcl90b19hbHRlcm5hdGU7Ci0gIHVpbnQ4X3Qgc2lnbl9iaWFzX2dvbGRlbjsKLSAgdWludDhfdCBzaWduX2JpYXNfYWx0ZXJuYXRlOwotICBib29sIHJlZnJlc2hfbGFzdDsKLQotICBib29sIG1iX25vX3NraXBfY29lZmY7Ci0gIHVpbnQ4X3QgcHJvYl9za2lwX2ZhbHNlOwotICB1aW50OF90IHByb2JfaW50cmE7Ci0gIHVpbnQ4X3QgcHJvYl9sYXN0OwotICB1aW50OF90IHByb2JfZ2Y7Ci0KLSAgY29uc3QgdWludDhfdCogZGF0YTsKLSAgc2l6ZV90IGZyYW1lX3NpemU7Ci0KLSAgc2l6ZV90IGRjdF9wYXJ0aXRpb25fc2l6ZXNba01heERDVFBhcnRpdGlvbnNdOwotICAvLyBPZmZzZXQgaW4gYnl0ZXMgZnJvbSBkYXRhLgotICBvZmZfdCBmaXJzdF9wYXJ0X29mZnNldDsKLSAgLy8gT2Zmc2V0IGluIGJpdHMgZnJvbSBmaXJzdF9wYXJ0X29mZnNldC4KLSAgb2ZmX3QgbWFjcm9ibG9ja19iaXRfb2Zmc2V0OwotCi0gIC8vIEJvb2wgZGVjb2RlciBzdGF0ZQotICB1aW50OF90IGJvb2xfZGVjX3JhbmdlOwotICB1aW50OF90IGJvb2xfZGVjX3ZhbHVlOwotICB1aW50OF90IGJvb2xfZGVjX2NvdW50OwotfTsKLQotLy8gQSBwYXJzZXIgZm9yIHJhdyBWUDggc3RyZWFtcyBhcyBzcGVjaWZpZWQgaW4gUkZDIDYzODYuCi1jbGFzcyBNRURJQV9FWFBPUlQgVnA4UGFyc2VyIHsKLSBwdWJsaWM6Ci0gIFZwOFBhcnNlcigpOwotICB+VnA4UGFyc2VyKCk7Ci0KLSAgLy8gVHJ5IHRvIHBhcnNlIGV4YWN0bHkgb25lIFZQOCBmcmFtZSBzdGFydGluZyBhdCB8cHRyfCBhbmQgb2Ygc2l6ZSB8c2l6ZXwsCi0gIC8vIGZpbGxpbmcgdGhlIHBhcnNlZCBkYXRhIGluIHxmaGRyfC4gUmV0dXJuIHRydWUgb24gc3VjY2Vzcy4KLSAgLy8gU2l6ZSBoYXMgdG8gYmUgZXhhY3RseSB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgYW5kIGNvbWluZyBmcm9tIHRoZSBjYWxsZXIsCi0gIC8vIHdobyBuZWVkcyB0byBhY3F1aXJlIGl0IGZyb20gZWxzZXdoZXJlIChub3JtYWxseSBmcm9tIGEgY29udGFpbmVyKS4KLSAgYm9vbCBQYXJzZUZyYW1lKGNvbnN0IHVpbnQ4X3QqIHB0ciwgc2l6ZV90IHNpemUsIFZwOEZyYW1lSGVhZGVyKiBmaGRyKTsKLQotIHByaXZhdGU6Ci0gIGJvb2wgUGFyc2VGcmFtZVRhZyhWcDhGcmFtZUhlYWRlciogZmhkcik7Ci0gIGJvb2wgUGFyc2VGcmFtZUhlYWRlcihWcDhGcmFtZUhlYWRlciogZmhkcik7Ci0KLSAgYm9vbCBQYXJzZVNlZ21lbnRhdGlvbkhlYWRlcihib29sIGtleWZyYW1lKTsKLSAgYm9vbCBQYXJzZUxvb3BGaWx0ZXJIZWFkZXIoYm9vbCBrZXlmcmFtZSk7Ci0gIGJvb2wgUGFyc2VRdWFudGl6YXRpb25IZWFkZXIoVnA4UXVhbnRpemF0aW9uSGVhZGVyKiBxaGRyKTsKLSAgYm9vbCBQYXJzZVRva2VuUHJvYnMoVnA4RW50cm9weUhlYWRlciogZWhkciwgYm9vbCB1cGRhdGVfY3Vycl9wcm9icyk7Ci0gIGJvb2wgUGFyc2VJbnRyYVByb2JzKFZwOEVudHJvcHlIZWFkZXIqIGVoZHIsIGJvb2wgdXBkYXRlX2N1cnJfcHJvYnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wga2V5ZnJhbWUpOwotICBib29sIFBhcnNlTVZQcm9icyhWcDhFbnRyb3B5SGVhZGVyKiBlaGRyLCBib29sIHVwZGF0ZV9jdXJyX3Byb2JzKTsKLSAgYm9vbCBQYXJzZVBhcnRpdGlvbnMoVnA4RnJhbWVIZWFkZXIqIGZoZHIpOwotICB2b2lkIFJlc2V0UHJvYnMoKTsKLQotICAvLyBUaGVzZSBwZXJzaXN0IGFjcm9zcyBjYWxscyB0byBQYXJzZUZyYW1lKCkgYW5kIG1heSBiZSB1c2VkIGFuZC9vciB1cGRhdGVkCi0gIC8vIGZvciBzdWJzZXF1ZW50IGZyYW1lcyBpZiB0aGUgc3RyZWFtIGluc3RydWN0cyB1cyB0byBkbyBzby4KLSAgVnA4U2VnbWVudGF0aW9uSGVhZGVyIGN1cnJfc2VnbWVudGF0aW9uX2hkcl87Ci0gIFZwOExvb3BGaWx0ZXJIZWFkZXIgY3Vycl9sb29wZmlsdGVyX2hkcl87Ci0gIFZwOEVudHJvcHlIZWFkZXIgY3Vycl9lbnRyb3B5X2hkcl87Ci0KLSAgY29uc3QgdWludDhfdCogc3RyZWFtXzsKLSAgc2l6ZV90IGJ5dGVzX2xlZnRfOwotICBWcDhCb29sRGVjb2RlciBiZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZwOFBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19WUDhfUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyX2Z1enplcnRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyX2Z1enplcnRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YjgyZjUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA4X3BhcnNlcl9mdXp6ZXJ0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotLy8gRW50cnkgcG9pbnQgZm9yIExpYkZ1enplci4KLWV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgY29uc3QgdWludDhfdCogaXZmX3BheWxvYWQgPSBOVUxMOwotICBtZWRpYTo6SXZmUGFyc2VyIGl2Zl9wYXJzZXI7Ci0gIG1lZGlhOjpJdmZGaWxlSGVhZGVyIGl2Zl9maWxlX2hlYWRlcjsKLSAgbWVkaWE6Okl2ZkZyYW1lSGVhZGVyIGl2Zl9mcmFtZV9oZWFkZXI7Ci0KLSAgaWYgKCFpdmZfcGFyc2VyLkluaXRpYWxpemUoZGF0YSwgc2l6ZSwgJml2Zl9maWxlX2hlYWRlcikpIHJldHVybiAwOwotCi0gIC8vIFBhcnNlIHVudGlsIHRoZSBlbmQgb2Ygc3RyZWFtL3Vuc3VwcG9ydGVkIHN0cmVhbS9lcnJvciBpbiBzdHJlYW0gaXMgZm91bmQuCi0gIHdoaWxlIChpdmZfcGFyc2VyLlBhcnNlTmV4dEZyYW1lKCZpdmZfZnJhbWVfaGVhZGVyLCAmaXZmX3BheWxvYWQpKSB7Ci0gICAgbWVkaWE6OlZwOFBhcnNlciB2cDhfcGFyc2VyOwotICAgIG1lZGlhOjpWcDhGcmFtZUhlYWRlciB2cDhfZnJhbWVfaGVhZGVyOwotICAgIHZwOF9wYXJzZXIuUGFyc2VGcmFtZShpdmZfcGF5bG9hZCwgaXZmX2ZyYW1lX2hlYWRlci5mcmFtZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmdnA4X2ZyYW1lX2hlYWRlcik7Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGRlZjA1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOF9wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDhfcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2ZpbGVzL21lbW9yeV9tYXBwZWRfZmlsZS5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVRFU1QoVnA4UGFyc2VyVGVzdCwgU3RyZWFtRmlsZVBhcnNpbmcpIHsKLSAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoID0gR2V0VGVzdERhdGFGaWxlUGF0aCgidGVzdC0yNWZwcy52cDgiKTsKLSAgYmFzZTo6TWVtb3J5TWFwcGVkRmlsZSBzdHJlYW07Ci0gIEFTU0VSVF9UUlVFKHN0cmVhbS5Jbml0aWFsaXplKGZpbGVfcGF0aCkpCi0gICAgICA8PCAiQ291bGRuJ3Qgb3BlbiBzdHJlYW0gZmlsZTogIiA8PCBmaWxlX3BhdGguTWF5YmVBc0FTQ0lJKCk7Ci0KLSAgSXZmUGFyc2VyIGl2Zl9wYXJzZXI7Ci0gIEl2ZkZpbGVIZWFkZXIgaXZmX2ZpbGVfaGVhZGVyID0ge307Ci0gIEFTU0VSVF9UUlVFKAotICAgICAgaXZmX3BhcnNlci5Jbml0aWFsaXplKHN0cmVhbS5kYXRhKCksIHN0cmVhbS5sZW5ndGgoKSwgJml2Zl9maWxlX2hlYWRlcikpOwotICBBU1NFUlRfRVEoaXZmX2ZpbGVfaGVhZGVyLmZvdXJjYywgMHgzMDM4NTA1NnUpOyAgLy8gVlA4MAotCi0gIFZwOFBhcnNlciB2cDhfcGFyc2VyOwotICBJdmZGcmFtZUhlYWRlciBpdmZfZnJhbWVfaGVhZGVyID0ge307Ci0gIHNpemVfdCBudW1fcGFyc2VkX2ZyYW1lcyA9IDA7Ci0KLSAgLy8gUGFyc2UgdW50aWwgdGhlIGVuZCBvZiBzdHJlYW0vdW5zdXBwb3J0ZWQgc3RyZWFtL2Vycm9yIGluIHN0cmVhbSBpcyBmb3VuZC4KLSAgY29uc3QgdWludDhfdCogcGF5bG9hZCA9IE5VTEw7Ci0gIHdoaWxlIChpdmZfcGFyc2VyLlBhcnNlTmV4dEZyYW1lKCZpdmZfZnJhbWVfaGVhZGVyLCAmcGF5bG9hZCkpIHsKLSAgICBWcDhGcmFtZUhlYWRlciBmaGRyOwotCi0gICAgQVNTRVJUX1RSVUUoCi0gICAgICAgIHZwOF9wYXJzZXIuUGFyc2VGcmFtZShwYXlsb2FkLCBpdmZfZnJhbWVfaGVhZGVyLmZyYW1lX3NpemUsICZmaGRyKSk7Ci0KLSAgICArK251bV9wYXJzZWRfZnJhbWVzOwotICB9Ci0KLSAgRFZMT0coMSkgPDwgIk51bWJlciBvZiBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyYW1lcyBiZWZvcmUgRU9TOiAiCi0gICAgICAgICAgIDw8IG51bV9wYXJzZWRfZnJhbWVzOwotCi0gIEVYUEVDVF9FUShpdmZfZmlsZV9oZWFkZXIubnVtX2ZyYW1lcywgbnVtX3BhcnNlZF9mcmFtZXMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9ib29sX2RlY29kZXIuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfYm9vbF9kZWNvZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTZkZjAwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9ib29sX2RlY29kZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2Jvb2xfZGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGxvb2t1cCB0YWJsZSBmb3IgdGhlIGxvb3AgaW4gc3BlYyA5LjIuMi4KLS8vICAgICB3aGlsZSBCb29sUmFuZ2UgPD0gMTI4OgotLy8gICAgICAgcmVhZCAxIGJpdAotLy8gICAgICAgQm9vbFJhbmdlICo9IDIKLS8vIFRoaXMgdGFibGUgaW5kaWNhdGVzIGhvdyBtYW55IGl0ZXJhdGlvbnMgdG8gcnVuIGZvciBhIGdpdmVuIEJvb2xSYW5nZS4gU28KLS8vIHRoZSBsb29wIGNvdWxkIGJlIHJlZHVjZWQgdG8KLS8vICAgICByZWFkIChrQ291bnRUb1NoaWZ0VG8xMjhbQm9vbFJhbmdlXSkgYml0cwotY29uc3QgaW50IGtDb3VudFRvU2hpZnRUbzEyOFsyNTZdID0gewotICAgIDAsIDcsIDYsIDYsIDUsIDUsIDUsIDUsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsCi0gICAgMywgMywgMywgMywgMywgMywgMywgMywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotVnA5Qm9vbERlY29kZXI6OlZwOUJvb2xEZWNvZGVyKCkge30KLQotVnA5Qm9vbERlY29kZXI6On5WcDlCb29sRGVjb2RlcigpIHt9Ci0KLS8vIDkuMi4xIEluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIEJvb2xlYW4gZGVjb2RlcgotYm9vbCBWcDlCb29sRGVjb2Rlcjo6SW5pdGlhbGl6ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkgewotICBEQ0hFQ0soZGF0YSk7Ci0gIGlmIChzaXplIDwgMSkgewotICAgIERWTE9HKDEpIDw8ICJpbnB1dCBzaXplIG9mIGJvb2wgZGVjb2RlciBzaGFsbCBiZSBhdCBsZWFzdCAxIjsKLSAgICB2YWxpZF8gPSBmYWxzZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZWFkZXJfLnJlc2V0KG5ldyBCaXRSZWFkZXIoZGF0YSwgc2l6ZSkpOwotICB2YWxpZF8gPSB0cnVlOwotCi0gIGJvb2xfdmFsdWVfID0gMDsKLSAgY291bnRfdG9fZmlsbF8gPSA4OwotICBib29sX3JhbmdlXyA9IDI1NTsKLSAgaWYgKFJlYWRMaXRlcmFsKDEpICE9IDApIHsKLSAgICBEVkxPRygxKSA8PCAibWFya2VyIGJpdCBzaG91bGQgYmUgMCI7Ci0gICAgdmFsaWRfID0gZmFsc2U7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBGaWxsIGF0IGxlYXN0IHxjb3VudF90b19maWxsX3wgYml0cyBhbmQgcHJlZmlsbCByZW1haW4gYml0cyBvZiB8Ym9vbF92YWx1ZV98Ci0vLyBpZiBkYXRhIGlzIGVub3VnaC4KLWJvb2wgVnA5Qm9vbERlY29kZXI6OkZpbGwoKSB7Ci0gIERDSEVDS19HRShjb3VudF90b19maWxsXywgMCk7Ci0KLSAgaW50IGJpdHNfbGVmdCA9IHJlYWRlcl8tPmJpdHNfYXZhaWxhYmxlKCk7Ci0gIGlmIChiaXRzX2xlZnQgPCBjb3VudF90b19maWxsXykgewotICAgIHZhbGlkXyA9IGZhbHNlOwotICAgIERWTE9HKDEpIDw8ICJWcDlCb29sRGVjb2RlciByZWFkcyBiZXlvbmQgdGhlIGVuZCBvZiBzdHJlYW0iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIERDSEVDS19MRShjb3VudF90b19maWxsXywga0Jvb2xTaXplKTsKLSAgaW50IG1heF9iaXRzX3RvX3JlYWQgPSBrQmlnQm9vbEJpdFNpemUgLSBrQm9vbFNpemUgKyBjb3VudF90b19maWxsXzsKLSAgaW50IGJpdHNfdG9fcmVhZCA9IHN0ZDo6bWluKG1heF9iaXRzX3RvX3JlYWQsIGJpdHNfbGVmdCk7Ci0KLSAgQmlnQm9vbCBkYXRhOwotICByZWFkZXJfLT5SZWFkQml0cyhiaXRzX3RvX3JlYWQsICZkYXRhKTsKLSAgYm9vbF92YWx1ZV8gfD0gZGF0YSA8PCAobWF4X2JpdHNfdG9fcmVhZCAtIGJpdHNfdG9fcmVhZCk7Ci0gIGNvdW50X3RvX2ZpbGxfIC09IGJpdHNfdG9fcmVhZDsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gOS4yLjIgQm9vbGVhbiBkZWNvZGluZyBwcm9jZXNzCi1ib29sIFZwOUJvb2xEZWNvZGVyOjpSZWFkQm9vbChpbnQgcHJvYikgewotICBEQ0hFQ0socmVhZGVyXyk7Ci0KLSAgaWYgKGNvdW50X3RvX2ZpbGxfID4gMCkgewotICAgIGlmICghRmlsbCgpKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB1bnNpZ25lZCBpbnQgc3BsaXQgPSAoYm9vbF9yYW5nZV8gKiBwcm9iICsgKDI1NiAtIHByb2IpKSA+PiBrQm9vbFNpemU7Ci0gIEJpZ0Jvb2wgYmlnX3NwbGl0ID0gc3RhdGljX2Nhc3Q8QmlnQm9vbD4oc3BsaXQpCi0gICAgICAgICAgICAgICAgICAgICAgPDwgKGtCaWdCb29sQml0U2l6ZSAtIGtCb29sU2l6ZSk7Ci0KLSAgYm9vbCBiaXQ7Ci0gIGlmIChib29sX3ZhbHVlXyA8IGJpZ19zcGxpdCkgewotICAgIGJvb2xfcmFuZ2VfID0gc3BsaXQ7Ci0gICAgYml0ID0gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgYm9vbF9yYW5nZV8gLT0gc3BsaXQ7Ci0gICAgYm9vbF92YWx1ZV8gLT0gYmlnX3NwbGl0OwotICAgIGJpdCA9IHRydWU7Ci0gIH0KLQotICAvLyBOZWVkIHRvIGZpbGwgfGNvdW50fCBiaXRzIG5leHQgdGltZSBpbiBvcmRlciB0byBtYWtlIHxib29sX3JhbmdlX3wgPj0KLSAgLy8gMTI4LgotICBEQ0hFQ0tfTFQoYm9vbF9yYW5nZV8sIGFycmF5c2l6ZShrQ291bnRUb1NoaWZ0VG8xMjgpKTsKLSAgRENIRUNLX0dUKGJvb2xfcmFuZ2VfLCAwdSk7Ci0gIGludCBjb3VudCA9IGtDb3VudFRvU2hpZnRUbzEyOFtib29sX3JhbmdlX107Ci0gIGJvb2xfcmFuZ2VfIDw8PSBjb3VudDsKLSAgYm9vbF92YWx1ZV8gPDw9IGNvdW50OwotICBjb3VudF90b19maWxsXyArPSBjb3VudDsKLQotICByZXR1cm4gYml0OwotfQotCi0vLyA5LjIuNCBQYXJzaW5nIHByb2Nlc3MgZm9yIHJlYWRfbGl0ZXJhbAotdWludDhfdCBWcDlCb29sRGVjb2Rlcjo6UmVhZExpdGVyYWwoaW50IGJpdHMpIHsKLSAgRENIRUNLX0xUKHN0YXRpY19jYXN0PHNpemVfdD4oYml0cyksIHNpemVvZih1aW50OF90KSAqIDgpOwotICBEQ0hFQ0socmVhZGVyXyk7Ci0KLSAgdWludDhfdCB4ID0gMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaXRzOyBpKyspIHggPSAyICogeCArIFJlYWRCb29sKDEyOCk7Ci0KLSAgcmV0dXJuIHg7Ci19Ci0KLWJvb2wgVnA5Qm9vbERlY29kZXI6OkNvbnN1bWVQYWRkaW5nQml0cygpIHsKLSAgRENIRUNLKHJlYWRlcl8pOwotCi0gIGlmIChjb3VudF90b19maWxsXyA+IHJlYWRlcl8tPmJpdHNfYXZhaWxhYmxlKCkpIHsKLSAgICAvLyA5LjIuMiBCb29sZWFuIGRlY29kaW5nIHByb2Nlc3MKLSAgICAvLyBBbHRob3VnaCB3ZSBhY3R1YWxseSBkb24ndCB1c2VkIHRoZSB2YWx1ZSwgc3BlYyBzYXlzIHRoZSBiaXRzdHJlYW0KLSAgICAvLyBzaG91bGQgaGF2ZSBlbm91Z2ggYml0cyB0byBmaWxsIGJvb2wgcmFuZ2UsIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KLSAgICBEVkxPRygyKSA8PCAibm90IGVub3VnaCBiaXRzIGluIGJpdHN0cmVhbSB0byBmaWxsIGJvb2wgcmFuZ2UiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmIChib29sX3ZhbHVlXyAhPSAwKSB7Ci0gICAgRFZMT0coMSkgPDwgInByZWZpbGxlZCBwYWRkaW5nIGJpdHMgYXJlIG5vdCB6ZXJvIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgd2hpbGUgKHJlYWRlcl8tPmJpdHNfYXZhaWxhYmxlKCkgPiAwKSB7Ci0gICAgaW50IGRhdGE7Ci0gICAgaW50IHNpemVfdG9fcmVhZCA9Ci0gICAgICAgIHN0ZDo6bWluKHJlYWRlcl8tPmJpdHNfYXZhaWxhYmxlKCksIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKGRhdGEpICogOCkpOwotICAgIHJlYWRlcl8tPlJlYWRCaXRzKHNpemVfdG9fcmVhZCwgJmRhdGEpOwotICAgIGlmIChkYXRhICE9IDApIHsKLSAgICAgIERWTE9HKDEpIDw8ICJwYWRkaW5nIGJpdHMgYXJlIG5vdCB6ZXJvIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2Jvb2xfZGVjb2Rlci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2Jvb2xfZGVjb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDgyOGFmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9ib29sX2RlY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19WUDlfQk9PTF9ERUNPREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9CT09MX0RFQ09ERVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEJpdFJlYWRlcjsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFZwOUJvb2xEZWNvZGVyIHsKLSBwdWJsaWM6Ci0gIFZwOUJvb2xEZWNvZGVyKCk7Ci0gIH5WcDlCb29sRGVjb2RlcigpOwotCi0gIC8vIHxkYXRhfCBpcyB0aGUgaW5wdXQgYnVmZmVyIHdpdGggfHNpemV8IGJ5dGVzLgotICAvLyBSZXR1cm5zIHRydWUgaWYgcmVhZCBmaXJzdCBtYXJrZXIgYml0IHN1Y2Nlc3NmdWxseS4KLSAgYm9vbCBJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgcmVhZHMgc2luY2UgdGhlIGxhc3QgSW5pdGlhbGl6ZSgpIGNhbGwgaGFzCi0gIC8vIGdvbmUgYmV5b25kIHRoZSBlbmQgb2YgYXZhaWxhYmxlIGRhdGEuCi0gIGJvb2wgSXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHZhbGlkXzsgfQotCi0gIC8vIFJlYWRzIG9uZSBiaXQuIEIocCkuCi0gIC8vIElmIHRoZSByZWFkIGdvZXMgYmV5b25kIHRoZSBlbmQgb2YgYnVmZmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgYm9vbCBSZWFkQm9vbChpbnQgcHJvYik7Ci0KLSAgLy8gUmVhZHMgYSBsaXRlcmFsLiBMKG4pLgotICAvLyBJZiB0aGUgcmVhZCBnb2VzIGJleW9uZCB0aGUgZW5kIG9mIGJ1ZmZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCi0gIHVpbnQ4X3QgUmVhZExpdGVyYWwoaW50IGJpdHMpOwotCi0gIC8vIENvbnN1bWVzIHBhZGRpbmcgYml0cyB1cCB0byBlbmQgb2YgZGF0YS4gUmV0dXJucyB0cnVlIGlmIG5vCi0gIC8vIHBhZGRpbmcgYml0cyBvciB0aGV5IGFyZSBhbGwgemVyby4KLSAgYm9vbCBDb25zdW1lUGFkZGluZ0JpdHMoKTsKLQotIHByaXZhdGU6Ci0gIC8vIFRoZSBoaWdoZXN0IDggYml0cyBvZiBCaWdCb29sIGlzIGFjdHVhbCAiYm9vbCB2YWx1ZSIuIFRoZSByZW1haW4gYml0cwotICAvLyBhcmUgb3B0aW1pemF0aW9uIG9mIHByZWZpbGwgYnVmZmVyLgotICB1c2luZyBCaWdCb29sID0gc2l6ZV90OwotICAvLyBUaGUgc2l6ZSBvZiAiYm9vbCB2YWx1ZSIgdXNlZCBmb3IgYm9vbGVhbiBkZWNvZGluZyBkZWZpbmVkIGluIHNwZWMuCi0gIGNvbnN0IGludCBrQm9vbFNpemUgPSA4OwotICBjb25zdCBpbnQga0JpZ0Jvb2xCaXRTaXplID0gc2l6ZW9mKEJpZ0Jvb2wpICogODsKLQotICBib29sIEZpbGwoKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8Qml0UmVhZGVyPiByZWFkZXJfOwotCi0gIC8vIEluZGljYXRlcyBpZiBub25lIG9mIHRoZSByZWFkcyBzaW5jZSB0aGUgbGFzdCBJbml0aWFsaXplKCkgY2FsbCBoYXMgZ29uZQotICAvLyBiZXlvbmQgdGhlIGVuZCBvZiBhdmFpbGFibGUgZGF0YS4KLSAgYm9vbCB2YWxpZF8gPSB0cnVlOwotCi0gIEJpZ0Jvb2wgYm9vbF92YWx1ZV8gPSAwOwotCi0gIC8vIE5lZWQgdG8gZmlsbCBhdCBsZWFzdCB8Y291bnRfdG9fZmlsbF98IGJpdHMuIE5lZ2F0aXZlIHZhbHVlIG1lYW5zIGV4dHJhCi0gIC8vIGJpdHMgcHJlLWZpbGxlZC4KLSAgaW50IGNvdW50X3RvX2ZpbGxfID0gMDsKLSAgdW5zaWduZWQgaW50IGJvb2xfcmFuZ2VfID0gMDsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVnA5Qm9vbERlY29kZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA5X0JPT0xfREVDT0RFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2NvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9jb21wcmVzc2VkX2hlYWRlcl9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyOTYzZDQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2NvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfY29tcHJlc3NlZF9oZWFkZXJfcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotCi0vLyA2LjMuNiBJbnYgcmVjZW50ZXIgbm9uZWcgc3ludGF4LCBpbnZfcmVjZW50ZXJfbm9ubmVnKCkuCi1pbnQgSW52UmVjZW50ZXJOb25uZWcoaW50IHYsIGludCBtKSB7Ci0gIERDSEVDS19MRShtLCBrVnA5TWF4UHJvYiAvIDIpOwotICBpZiAodiA+IDIgKiBtKSByZXR1cm4gdjsKLQotICBpZiAodiAmIDEpIHJldHVybiBtIC0gKCh2ICsgMSkgPj4gMSk7Ci0gIHJldHVybiBtICsgKHYgPj4gMSk7Ci19Ci0KLS8vIDYuMy41IEludiByZW1hcCBwcm9iIHN5bnRheCwgaW52X3JlbWFwX3Byb2IoKS4KLVZwOVByb2IgSW52UmVtYXBQcm9iKHVpbnQ4X3QgZGVsdGFfcHJvYiwgdWludDhfdCBwcm9iKSB7Ci0gIHN0YXRpYyB1aW50OF90IGludl9tYXBfdGFibGVba1ZwOU1heFByb2JdID0gewotICAgICAgNywgICAyMCwgIDMzLCAgNDYsICA1OSwgIDcyLCAgODUsICA5OCwgIDExMSwgMTI0LCAxMzcsIDE1MCwgMTYzLCAxNzYsCi0gICAgICAxODksIDIwMiwgMjE1LCAyMjgsIDI0MSwgMjU0LCAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwgICA4LCAgIDksCi0gICAgICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDE3LCAgMTgsICAxOSwgIDIxLCAgMjIsICAyMywgIDI0LAotICAgICAgMjUsICAyNiwgIDI3LCAgMjgsICAyOSwgIDMwLCAgMzEsICAzMiwgIDM0LCAgMzUsICAzNiwgIDM3LCAgMzgsICAzOSwKLSAgICAgIDQwLCAgNDEsICA0MiwgIDQzLCAgNDQsICA0NSwgIDQ3LCAgNDgsICA0OSwgIDUwLCAgNTEsICA1MiwgIDUzLCAgNTQsCi0gICAgICA1NSwgIDU2LCAgNTcsICA1OCwgIDYwLCAgNjEsICA2MiwgIDYzLCAgNjQsICA2NSwgIDY2LCAgNjcsICA2OCwgIDY5LAotICAgICAgNzAsICA3MSwgIDczLCAgNzQsICA3NSwgIDc2LCAgNzcsICA3OCwgIDc5LCAgODAsICA4MSwgIDgyLCAgODMsICA4NCwKLSAgICAgIDg2LCAgODcsICA4OCwgIDg5LCAgOTAsICA5MSwgIDkyLCAgOTMsICA5NCwgIDk1LCAgOTYsICA5NywgIDk5LCAgMTAwLAotICAgICAgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTIsIDExMywgMTE0LCAxMTUsCi0gICAgICAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwKLSAgICAgIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LAotICAgICAgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsCi0gICAgICAxNjEsIDE2MiwgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwKLSAgICAgIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE5MCwgMTkxLAotICAgICAgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDMsIDIwNCwgMjA1LCAyMDYsCi0gICAgICAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwKLSAgICAgIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LAotICAgICAgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsCi0gICAgICAyNTIsIDI1MywgMjUzfTsKLSAgdWludDhfdCBtID0gcHJvYjsKLSAgdWludDhfdCB2ID0gZGVsdGFfcHJvYjsKLSAgRENIRUNLX0dFKG0sIDEpOwotICBEQ0hFQ0tfTEUobSwga1ZwOU1heFByb2IpOwotICBEQ0hFQ0tfTFQodiwgYXJyYXlzaXplKGludl9tYXBfdGFibGUpKTsKLSAgdiA9IGludl9tYXBfdGFibGVbdl07Ci0gIG0tLTsKLSAgaWYgKChtIDw8IDEpIDw9IGtWcDlNYXhQcm9iKSB7Ci0gICAgcmV0dXJuIDEgKyBJbnZSZWNlbnRlck5vbm5lZyh2LCBtKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4ga1ZwOU1heFByb2IgLSBJbnZSZWNlbnRlck5vbm5lZyh2LCBrVnA5TWF4UHJvYiAtIDEgLSBtKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6VnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcigpIHt9Ci0KLS8vIDYuMy4xIFR4IG1vZGUgc3ludGF4Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWRUeE1vZGUoVnA5RnJhbWVIZWFkZXIqIGZoZHIpIHsKLSAgaW50IHR4X21vZGU7Ci0gIGlmIChmaGRyLT5xdWFudF9wYXJhbXMuSXNMb3NzbGVzcygpKSB7Ci0gICAgdHhfbW9kZSA9IFZwOUNvbXByZXNzZWRIZWFkZXI6Ok9OTFlfNFg0OwotICB9IGVsc2UgewotICAgIHR4X21vZGUgPSByZWFkZXJfLlJlYWRMaXRlcmFsKDIpOwotICAgIGlmICh0eF9tb2RlID09IFZwOUNvbXByZXNzZWRIZWFkZXI6OkFMTE9XXzMyWDMyKQotICAgICAgdHhfbW9kZSArPSByZWFkZXJfLlJlYWRMaXRlcmFsKDEpOwotICB9Ci0gIGZoZHItPmNvbXByZXNzZWRfaGVhZGVyLnR4X21vZGUgPQotICAgICAgc3RhdGljX2Nhc3Q8VnA5Q29tcHJlc3NlZEhlYWRlcjo6VnA5VHhNb2RlPih0eF9tb2RlKTsKLX0KLQotLy8gNi4zLjQgRGVjb2RlIHRlcm0gc3ViZXhwIHN5bnRheAotdWludDhfdCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpEZWNvZGVUZXJtU3ViZXhwKCkgewotICBpZiAocmVhZGVyXy5SZWFkTGl0ZXJhbCgxKSA9PSAwKSByZXR1cm4gcmVhZGVyXy5SZWFkTGl0ZXJhbCg0KTsKLSAgaWYgKHJlYWRlcl8uUmVhZExpdGVyYWwoMSkgPT0gMCkgcmV0dXJuIHJlYWRlcl8uUmVhZExpdGVyYWwoNCkgKyAxNjsKLSAgaWYgKHJlYWRlcl8uUmVhZExpdGVyYWwoMSkgPT0gMCkgcmV0dXJuIHJlYWRlcl8uUmVhZExpdGVyYWwoNSkgKyAzMjsKLSAgdWludDhfdCB2ID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCg3KTsKLSAgaWYgKHYgPCA2NSkgcmV0dXJuIHYgKyA2NDsKLSAgcmV0dXJuICh2IDw8IDEpIC0gMSArIHJlYWRlcl8uUmVhZExpdGVyYWwoMSk7Ci19Ci0KLS8vIDYuMy4zIERpZmYgdXBkYXRlIHByb2Igc3ludGF4Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OkRpZmZVcGRhdGVQcm9iKFZwOVByb2IqIHByb2IpIHsKLSAgY29uc3QgVnA5UHJvYiBrVXBkYXRlUHJvYiA9IDI1MjsKLSAgaWYgKHJlYWRlcl8uUmVhZEJvb2woa1VwZGF0ZVByb2IpKSB7Ci0gICAgdWludDhfdCBkZWx0YV9wcm9iID0gRGVjb2RlVGVybVN1YmV4cCgpOwotICAgICpwcm9iID0gSW52UmVtYXBQcm9iKGRlbHRhX3Byb2IsICpwcm9iKTsKLSAgfQotfQotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gRGlmZlVwZGF0ZVByb2IgYW4gYXJyYXkgb2YgcHJvYnMuCi10ZW1wbGF0ZSA8aW50IE4+Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OkRpZmZVcGRhdGVQcm9iQXJyYXkoVnA5UHJvYiAoJnByb2JfYXJyYXkpW05dKSB7Ci0gIGZvciAoYXV0byYgeCA6IHByb2JfYXJyYXkpIHsKLSAgICBEaWZmVXBkYXRlUHJvYigmeCk7Ci0gIH0KLX0KLQotLy8gNi4zLjIgVHggbW9kZSBwcm9icyBzeW50YXgKLXZvaWQgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFR4TW9kZVByb2JzKAotICAgIFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCkgewotICBmb3IgKGF1dG8mIGEgOiBmcmFtZV9jb250ZXh0LT50eF9wcm9ic184eDgpIHsKLSAgICBEaWZmVXBkYXRlUHJvYkFycmF5KGEpOwotICB9Ci0gIGZvciAoYXV0byYgYSA6IGZyYW1lX2NvbnRleHQtPnR4X3Byb2JzXzE2eDE2KSB7Ci0gICAgRGlmZlVwZGF0ZVByb2JBcnJheShhKTsKLSAgfQotICBmb3IgKGF1dG8mIGEgOiBmcmFtZV9jb250ZXh0LT50eF9wcm9ic18zMngzMikgewotICAgIERpZmZVcGRhdGVQcm9iQXJyYXkoYSk7Ci0gIH0KLX0KLQotLy8gNi4zLjcgQ29lZiBwcm9icyBzeW50YXgKLXZvaWQgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZENvZWZQcm9icyhWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBjb25zdCBpbnQgdHhfbW9kZV90b19iaWdnZXN0X3R4X3NpemVbVnA5Q29tcHJlc3NlZEhlYWRlcjo6VFhfTU9ERVNdID0gewotICAgICAgMCwgMSwgMiwgMywgMywKLSAgfTsKLSAgY29uc3QgaW50IG1heF90eF9zaXplID0KLSAgICAgIHR4X21vZGVfdG9fYmlnZ2VzdF90eF9zaXplW2ZoZHItPmNvbXByZXNzZWRfaGVhZGVyLnR4X21vZGVdOwotICBmb3IgKGludCB0eF9zaXplID0gMDsgdHhfc2l6ZSA8PSBtYXhfdHhfc2l6ZTsgdHhfc2l6ZSsrKSB7Ci0gICAgaWYgKHJlYWRlcl8uUmVhZExpdGVyYWwoMSkgPT0gMCkgY29udGludWU7Ci0KLSAgICBmb3IgKGF1dG8mIGFpIDogZmhkci0+ZnJhbWVfY29udGV4dC5jb2VmX3Byb2JzW3R4X3NpemVdKSB7Ci0gICAgICBmb3IgKGF1dG8mIGFqIDogYWkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBhayA6IGFqKSB7Ci0gICAgICAgICAgaW50IG1heF9sID0gKGFrID09IGFqWzBdKSA/IDMgOiA2OwotICAgICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgbWF4X2w7IGwrKykgewotICAgICAgICAgICAgRGlmZlVwZGF0ZVByb2JBcnJheShha1tsXSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8vIDYuMy44IFNraXAgcHJvYnMgc3ludGF4Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWRTa2lwUHJvYihWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQpIHsKLSAgRGlmZlVwZGF0ZVByb2JBcnJheShmcmFtZV9jb250ZXh0LT5za2lwX3Byb2IpOwotfQotCi0vLyA2LjMuOSBJbnRlciBtb2RlIHByb2JzIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkSW50ZXJNb2RlUHJvYnMoCi0gICAgVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KSB7Ci0gIGZvciAoYXV0byYgYSA6IGZyYW1lX2NvbnRleHQtPmludGVyX21vZGVfcHJvYnMpIERpZmZVcGRhdGVQcm9iQXJyYXkoYSk7Ci19Ci0KLS8vIDYuMy4xMCBJbnRlcnAgZmlsdGVyIHByb2JzIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkSW50ZXJwRmlsdGVyUHJvYnMoCi0gICAgVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KSB7Ci0gIGZvciAoYXV0byYgYSA6IGZyYW1lX2NvbnRleHQtPmludGVycF9maWx0ZXJfcHJvYnMpIERpZmZVcGRhdGVQcm9iQXJyYXkoYSk7Ci19Ci0KLS8vIDYuMy4xMSBJbnRyYSBpbnRlciBwcm9icyBzeW50YXgKLXZvaWQgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZElzSW50ZXJQcm9icygKLSAgICBWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQpIHsKLSAgRGlmZlVwZGF0ZVByb2JBcnJheShmcmFtZV9jb250ZXh0LT5pc19pbnRlcl9wcm9iKTsKLX0KLQotLy8gNi4zLjEyIEZyYW1lIHJlZmVyZW5jZSBtb2RlIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkRnJhbWVSZWZlcmVuY2VNb2RlKFZwOUZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIGJvb2wgY29tcG91bmRfcmVmZXJlbmNlX2FsbG93ZWQgPSBmYWxzZTsKLSAgZm9yIChpbnQgaSA9IFZQOV9GUkFNRV9MQVNUICsgMTsgaSA8IFZQOV9GUkFNRV9NQVg7IGkrKykKLSAgICBpZiAoZmhkci0+cmVmX2ZyYW1lX3NpZ25fYmlhc1tpXSAhPSBmaGRyLT5yZWZfZnJhbWVfc2lnbl9iaWFzWzFdKQotICAgICAgY29tcG91bmRfcmVmZXJlbmNlX2FsbG93ZWQgPSB0cnVlOwotCi0gIGlmIChjb21wb3VuZF9yZWZlcmVuY2VfYWxsb3dlZCAmJiByZWFkZXJfLlJlYWRMaXRlcmFsKDEpKSB7Ci0gICAgZmhkci0+Y29tcHJlc3NlZF9oZWFkZXIucmVmZXJlbmNlX21vZGUgPQotICAgICAgICByZWFkZXJfLlJlYWRMaXRlcmFsKDEpID8gUkVGRVJFTkNFX01PREVfU0VMRUNUIDogQ09NUE9VTkRfUkVGRVJFTkNFOwotICB9IGVsc2UgewotICAgIGZoZHItPmNvbXByZXNzZWRfaGVhZGVyLnJlZmVyZW5jZV9tb2RlID0gU0lOR0xFX1JFRkVSRU5DRTsKLSAgfQotfQotCi0vLyA2LjMuMTMgRnJhbWUgcmVmZXJlbmNlIG1vZGUgcHJvYnMgc3ludGF4Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWRGcmFtZVJlZmVyZW5jZU1vZGVQcm9icygKLSAgICBWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQgPSAmZmhkci0+ZnJhbWVfY29udGV4dDsKLSAgaWYgKGZoZHItPmNvbXByZXNzZWRfaGVhZGVyLnJlZmVyZW5jZV9tb2RlID09IFJFRkVSRU5DRV9NT0RFX1NFTEVDVCkKLSAgICBEaWZmVXBkYXRlUHJvYkFycmF5KGZyYW1lX2NvbnRleHQtPmNvbXBfbW9kZV9wcm9iKTsKLQotICBpZiAoZmhkci0+Y29tcHJlc3NlZF9oZWFkZXIucmVmZXJlbmNlX21vZGUgIT0gQ09NUE9VTkRfUkVGRVJFTkNFKQotICAgIGZvciAoYXV0byYgYSA6IGZyYW1lX2NvbnRleHQtPnNpbmdsZV9yZWZfcHJvYikgRGlmZlVwZGF0ZVByb2JBcnJheShhKTsKLQotICBpZiAoZmhkci0+Y29tcHJlc3NlZF9oZWFkZXIucmVmZXJlbmNlX21vZGUgIT0gU0lOR0xFX1JFRkVSRU5DRSkKLSAgICBEaWZmVXBkYXRlUHJvYkFycmF5KGZyYW1lX2NvbnRleHQtPmNvbXBfcmVmX3Byb2IpOwotfQotCi0vLyA2LjMuMTQgWSBtb2RlIHByb2JzIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkWU1vZGVQcm9icyhWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQpIHsKLSAgZm9yIChhdXRvJiBhIDogZnJhbWVfY29udGV4dC0+eV9tb2RlX3Byb2JzKSBEaWZmVXBkYXRlUHJvYkFycmF5KGEpOwotfQotCi0vLyA2LjMuMTUgUGFydGl0aW9uIHByb2JzIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkUGFydGl0aW9uUHJvYnMoCi0gICAgVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KSB7Ci0gIGZvciAoYXV0byYgYSA6IGZyYW1lX2NvbnRleHQtPnBhcnRpdGlvbl9wcm9icykgRGlmZlVwZGF0ZVByb2JBcnJheShhKTsKLX0KLQotLy8gNi4zLjE2IE1WIHByb2JzIHN5bnRheAotdm9pZCBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkTXZQcm9icyhib29sIGFsbG93X2hpZ2hfcHJlY2lzaW9uX212LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQpIHsKLSAgVXBkYXRlTXZQcm9iQXJyYXkoZnJhbWVfY29udGV4dC0+bXZfam9pbnRfcHJvYnMpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgVXBkYXRlTXZQcm9iKCZmcmFtZV9jb250ZXh0LT5tdl9zaWduX3Byb2JbaV0pOwotICAgIFVwZGF0ZU12UHJvYkFycmF5KGZyYW1lX2NvbnRleHQtPm12X2NsYXNzX3Byb2JzW2ldKTsKLSAgICBVcGRhdGVNdlByb2IoJmZyYW1lX2NvbnRleHQtPm12X2NsYXNzMF9iaXRfcHJvYltpXSk7Ci0gICAgVXBkYXRlTXZQcm9iQXJyYXkoZnJhbWVfY29udGV4dC0+bXZfYml0c19wcm9iW2ldKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgZm9yIChhdXRvJiBhIDogZnJhbWVfY29udGV4dC0+bXZfY2xhc3MwX2ZyX3Byb2JzW2ldKSBVcGRhdGVNdlByb2JBcnJheShhKTsKLSAgICBVcGRhdGVNdlByb2JBcnJheShmcmFtZV9jb250ZXh0LT5tdl9mcl9wcm9ic1tpXSk7Ci0gIH0KLQotICBpZiAoYWxsb3dfaGlnaF9wcmVjaXNpb25fbXYpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgVXBkYXRlTXZQcm9iKCZmcmFtZV9jb250ZXh0LT5tdl9jbGFzczBfaHBfcHJvYltpXSk7Ci0gICAgICBVcGRhdGVNdlByb2IoJmZyYW1lX2NvbnRleHQtPm12X2hwX3Byb2JbaV0pOwotICAgIH0KLSAgfQotfQotCi0vLyA2LjMuMTcgVXBkYXRlIG12IHByb2Igc3ludGF4Ci12b2lkIFZwOUNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlVwZGF0ZU12UHJvYihWcDlQcm9iKiBwcm9iKSB7Ci0gIGlmIChyZWFkZXJfLlJlYWRCb29sKDI1MikpICpwcm9iID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCg3KSA8PCAxIHwgMTsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIFVwZGF0ZU12UHJvYiBhbiBhcnJheSBvZiBwcm9icy4KLXRlbXBsYXRlIDxpbnQgTj4KLXZvaWQgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6VXBkYXRlTXZQcm9iQXJyYXkoVnA5UHJvYiAoJnByb2JfYXJyYXkpW05dKSB7Ci0gIGZvciAoYXV0byYgeCA6IHByb2JfYXJyYXkpIHsKLSAgICBVcGRhdGVNdlByb2IoJngpOwotICB9Ci19Ci0KLS8vIDYuMyBDb21wcmVzc2VkIGhlYWRlciBzeW50YXgKLWJvb2wgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UGFyc2UoY29uc3QgdWludDhfdCogc3RyZWFtLCBvZmZfdCBmcmFtZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBEVkxPRygyKSA8PCAiVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UGFyc2UiOwotICBpZiAoIXJlYWRlcl8uSW5pdGlhbGl6ZShzdHJlYW0sIGZyYW1lX3NpemUpKSByZXR1cm4gZmFsc2U7Ci0KLSAgUmVhZFR4TW9kZShmaGRyKTsKLSAgaWYgKGZoZHItPmNvbXByZXNzZWRfaGVhZGVyLnR4X21vZGUgPT0gVnA5Q29tcHJlc3NlZEhlYWRlcjo6VFhfTU9ERV9TRUxFQ1QpCi0gICAgUmVhZFR4TW9kZVByb2JzKCZmaGRyLT5mcmFtZV9jb250ZXh0KTsKLQotICBSZWFkQ29lZlByb2JzKGZoZHIpOwotICBSZWFkU2tpcFByb2IoJmZoZHItPmZyYW1lX2NvbnRleHQpOwotCi0gIGlmICghZmhkci0+SXNJbnRyYSgpKSB7Ci0gICAgUmVhZEludGVyTW9kZVByb2JzKCZmaGRyLT5mcmFtZV9jb250ZXh0KTsKLSAgICBpZiAoZmhkci0+aW50ZXJwb2xhdGlvbl9maWx0ZXIgPT0gU1dJVENIQUJMRSkKLSAgICAgIFJlYWRJbnRlcnBGaWx0ZXJQcm9icygmZmhkci0+ZnJhbWVfY29udGV4dCk7Ci0gICAgUmVhZElzSW50ZXJQcm9icygmZmhkci0+ZnJhbWVfY29udGV4dCk7Ci0gICAgUmVhZEZyYW1lUmVmZXJlbmNlTW9kZShmaGRyKTsKLSAgICBSZWFkRnJhbWVSZWZlcmVuY2VNb2RlUHJvYnMoZmhkcik7Ci0gICAgUmVhZFlNb2RlUHJvYnMoJmZoZHItPmZyYW1lX2NvbnRleHQpOwotICAgIFJlYWRQYXJ0aXRpb25Qcm9icygmZmhkci0+ZnJhbWVfY29udGV4dCk7Ci0gICAgUmVhZE12UHJvYnMoZmhkci0+YWxsb3dfaGlnaF9wcmVjaXNpb25fbXYsICZmaGRyLT5mcmFtZV9jb250ZXh0KTsKLSAgfQotCi0gIGlmICghcmVhZGVyXy5Jc1ZhbGlkKCkpIHsKLSAgICBEVkxPRygxKSA8PCAicGFyc2VyIHJlYWRzIGJleW9uZCB0aGUgZW5kIG9mIGJ1ZmZlciI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmICghcmVhZGVyXy5Db25zdW1lUGFkZGluZ0JpdHMoKSkgewotICAgIERWTE9HKDEpIDw8ICJwYWRkaW5nIGJpdHMgYXJlIG5vdCB6ZXJvIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2NvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2NvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGQxMTc2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9jb21wcmVzc2VkX2hlYWRlcl9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19WUDlfQ09NUFJFU1NFRF9IRUFERVJfUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9DT01QUkVTU0VEX0hFQURFUl9QQVJTRVJfSF8KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9ib29sX2RlY29kZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlciB7Ci0gcHVibGljOgotICBWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyKCk7Ci0KLSAgLy8gUGFyc2VzIFZQOSBjb21wcmVzc2VkIGhlYWRlciBpbiB8c3RyZWFtfCB3aXRoIHxmcmFtZV9zaXplfCBpbnRvIHxmaGRyfC4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIG5vIGVycm9yLgotICBib29sIFBhcnNlKGNvbnN0IHVpbnQ4X3QqIHN0cmVhbSwgb2ZmX3QgZnJhbWVfc2l6ZSwgVnA5RnJhbWVIZWFkZXIqIGZoZHIpOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBSZWFkVHhNb2RlKFZwOUZyYW1lSGVhZGVyKiBmaGRyKTsKLSAgdWludDhfdCBEZWNvZGVUZXJtU3ViZXhwKCk7Ci0gIHZvaWQgRGlmZlVwZGF0ZVByb2IoVnA5UHJvYiogcHJvYik7Ci0gIHRlbXBsYXRlIDxpbnQgTj4KLSAgdm9pZCBEaWZmVXBkYXRlUHJvYkFycmF5KFZwOVByb2IgKCZwcm9iX2FycmF5KVtOXSk7Ci0gIHZvaWQgUmVhZFR4TW9kZVByb2JzKFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCk7Ci0gIHZvaWQgUmVhZENvZWZQcm9icyhWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0gIHZvaWQgUmVhZFNraXBQcm9iKFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCk7Ci0gIHZvaWQgUmVhZEludGVyTW9kZVByb2JzKFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCk7Ci0gIHZvaWQgUmVhZEludGVycEZpbHRlclByb2JzKFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCk7Ci0gIHZvaWQgUmVhZElzSW50ZXJQcm9icyhWcDlGcmFtZUNvbnRleHQqIGZyYW1lX2NvbnRleHQpOwotICB2b2lkIFJlYWRGcmFtZVJlZmVyZW5jZU1vZGUoVnA5RnJhbWVIZWFkZXIqIGZoZHIpOwotICB2b2lkIFJlYWRGcmFtZVJlZmVyZW5jZU1vZGVQcm9icyhWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0gIHZvaWQgUmVhZFlNb2RlUHJvYnMoVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KTsKLSAgdm9pZCBSZWFkUGFydGl0aW9uUHJvYnMoVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KTsKLSAgdm9pZCBSZWFkTXZQcm9icyhib29sIGFsbG93X2hpZ2hfcHJlY2lzaW9uX212LAotICAgICAgICAgICAgICAgICAgIFZwOUZyYW1lQ29udGV4dCogZnJhbWVfY29udGV4dCk7Ci0gIHZvaWQgVXBkYXRlTXZQcm9iKFZwOVByb2IqIHByb2IpOwotICB0ZW1wbGF0ZSA8aW50IE4+Ci0gIHZvaWQgVXBkYXRlTXZQcm9iQXJyYXkoVnA5UHJvYiAoJnByb2JfYXJyYXkpW05dKTsKLQotICAvLyBCb29sIGRlY29kZXIgZm9yIGNvbXByZXNzZWQgZnJhbWUgaGVhZGVyLgotICBWcDlCb29sRGVjb2RlciByZWFkZXJfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWcDlDb21wcmVzc2VkSGVhZGVyUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9DT01QUkVTU0VEX0hFQURFUl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmQzNWQ5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NDcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLS8vIFRoaXMgZmlsZSBjb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIFZQOSBiaXRzdHJlYW0gcGFyc2VyLgotLy8KLS8vIFZFUkJPU0UgbGV2ZWw6Ci0vLyAgMSBzb21ldGhpbmcgd3JvbmcgaW4gYml0c3RyZWFtCi0vLyAgMiBwYXJzaW5nIHN0ZXBzCi0vLyAgMyBwYXJzZWQgdmFsdWVzIChzZWxlY3RlZCkKLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X2NvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV91bmNvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1ib29sIFZwOUZyYW1lSGVhZGVyOjpJc0tleWZyYW1lKCkgY29uc3QgewotICAvLyBXaGVuIHNob3dfZXhpc3RpbmdfZnJhbWUgaXMgdHJ1ZSwgdGhlIGZyYW1lIGhlYWRlciBkb2VzIG5vdCBwcmVjZWRlIGFuCi0gIC8vIGFjdHVhbCBmcmFtZSB0byBiZSBkZWNvZGVkLCBzbyBmcmFtZV90eXBlIGRvZXMgbm90IGFwcGx5IChhbmQgaXMgbm90IHJlYWQKLSAgLy8gZnJvbSB0aGUgc3RyZWFtKS4KLSAgcmV0dXJuICFzaG93X2V4aXN0aW5nX2ZyYW1lICYmIGZyYW1lX3R5cGUgPT0gS0VZRlJBTUU7Ci19Ci0KLWJvb2wgVnA5RnJhbWVIZWFkZXI6OklzSW50cmEoKSBjb25zdCB7Ci0gIHJldHVybiAhc2hvd19leGlzdGluZ19mcmFtZSAmJiAoZnJhbWVfdHlwZSA9PSBLRVlGUkFNRSB8fCBpbnRyYV9vbmx5KTsKLX0KLQotVnA5UGFyc2VyOjpGcmFtZUluZm86OkZyYW1lSW5mbyhjb25zdCB1aW50OF90KiBwdHIsIG9mZl90IHNpemUpCi0gICAgOiBwdHIocHRyKSwgc2l6ZShzaXplKSB7fQotCi1ib29sIFZwOUZyYW1lQ29udGV4dDo6SXNWYWxpZCgpIGNvbnN0IHsKLSAgLy8gcHJvYnMgc2hvdWxkIGJlIGluIFsxLCAyNTVdIHJhbmdlLgotICBzdGF0aWNfYXNzZXJ0KHNpemVvZihWcDlQcm9iKSA9PSAxLAotICAgICAgICAgICAgICAgICJmb2xsb3dpbmcgY2hlY2tzIGFzc3VtaW5nIFZwOVByb2IgaXMgc2luZ2xlIGJ5dGUiKTsKLSAgaWYgKG1lbWNocih0eF9wcm9ic184eDgsIDAsIHNpemVvZih0eF9wcm9ic184eDgpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKHR4X3Byb2JzXzE2eDE2LCAwLCBzaXplb2YodHhfcHJvYnNfMTZ4MTYpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKHR4X3Byb2JzXzMyeDMyLCAwLCBzaXplb2YodHhfcHJvYnNfMzJ4MzIpKSkgcmV0dXJuIGZhbHNlOwotCi0gIGZvciAoYXV0byYgYSA6IGNvZWZfcHJvYnMpIHsKLSAgICBmb3IgKGF1dG8mIGFpIDogYSkgewotICAgICAgZm9yIChhdXRvJiBhaiA6IGFpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgYWsgOiBhaikgewotICAgICAgICAgIGludCBtYXhfbCA9IChhayA9PSBhalswXSkgPyAzIDogNjsKLSAgICAgICAgICBmb3IgKGludCBsID0gMDsgbCA8IG1heF9sOyBsKyspIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgeCA6IGFrW2xdKSB7Ci0gICAgICAgICAgICAgIGlmICh4ID09IDApIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKG1lbWNocihza2lwX3Byb2IsIDAsIHNpemVvZihza2lwX3Byb2IpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKGludGVyX21vZGVfcHJvYnMsIDAsIHNpemVvZihpbnRlcl9tb2RlX3Byb2JzKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihpbnRlcnBfZmlsdGVyX3Byb2JzLCAwLCBzaXplb2YoaW50ZXJwX2ZpbHRlcl9wcm9icykpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIoaXNfaW50ZXJfcHJvYiwgMCwgc2l6ZW9mKGlzX2ludGVyX3Byb2IpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKGNvbXBfbW9kZV9wcm9iLCAwLCBzaXplb2YoY29tcF9tb2RlX3Byb2IpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKHNpbmdsZV9yZWZfcHJvYiwgMCwgc2l6ZW9mKHNpbmdsZV9yZWZfcHJvYikpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIoY29tcF9yZWZfcHJvYiwgMCwgc2l6ZW9mKGNvbXBfcmVmX3Byb2IpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKHlfbW9kZV9wcm9icywgMCwgc2l6ZW9mKHlfbW9kZV9wcm9icykpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIodXZfbW9kZV9wcm9icywgMCwgc2l6ZW9mKHV2X21vZGVfcHJvYnMpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKHBhcnRpdGlvbl9wcm9icywgMCwgc2l6ZW9mKHBhcnRpdGlvbl9wcm9icykpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIobXZfam9pbnRfcHJvYnMsIDAsIHNpemVvZihtdl9qb2ludF9wcm9icykpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIobXZfc2lnbl9wcm9iLCAwLCBzaXplb2YobXZfc2lnbl9wcm9iKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihtdl9jbGFzc19wcm9icywgMCwgc2l6ZW9mKG12X2NsYXNzX3Byb2JzKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihtdl9jbGFzczBfYml0X3Byb2IsIDAsIHNpemVvZihtdl9jbGFzczBfYml0X3Byb2IpKSkgcmV0dXJuIGZhbHNlOwotICBpZiAobWVtY2hyKG12X2JpdHNfcHJvYiwgMCwgc2l6ZW9mKG12X2JpdHNfcHJvYikpKSByZXR1cm4gZmFsc2U7Ci0gIGlmIChtZW1jaHIobXZfY2xhc3MwX2ZyX3Byb2JzLCAwLCBzaXplb2YobXZfY2xhc3MwX2ZyX3Byb2JzKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihtdl9mcl9wcm9icywgMCwgc2l6ZW9mKG12X2ZyX3Byb2JzKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihtdl9jbGFzczBfaHBfcHJvYiwgMCwgc2l6ZW9mKG12X2NsYXNzMF9ocF9wcm9iKSkpIHJldHVybiBmYWxzZTsKLSAgaWYgKG1lbWNocihtdl9ocF9wcm9iLCAwLCBzaXplb2YobXZfaHBfcHJvYikpKSByZXR1cm4gZmFsc2U7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVZwOVBhcnNlcjo6Q29udGV4dDo6VnA5RnJhbWVDb250ZXh0TWFuYWdlcjo6VnA5RnJhbWVDb250ZXh0TWFuYWdlcigpCi0gICAgOiB3ZWFrX3B0cl9mYWN0b3J5Xyh0aGlzKSB7fQotCi1WcDlQYXJzZXI6OkNvbnRleHQ6OlZwOUZyYW1lQ29udGV4dE1hbmFnZXI6On5WcDlGcmFtZUNvbnRleHRNYW5hZ2VyKCkge30KLQotY29uc3QgVnA5RnJhbWVDb250ZXh0JgotVnA5UGFyc2VyOjpDb250ZXh0OjpWcDlGcmFtZUNvbnRleHRNYW5hZ2VyOjpmcmFtZV9jb250ZXh0KCkgY29uc3QgewotICBEQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKLSAgRENIRUNLKCFuZWVkc19jbGllbnRfdXBkYXRlXyk7Ci0gIHJldHVybiBmcmFtZV9jb250ZXh0XzsKLX0KLQotdm9pZCBWcDlQYXJzZXI6OkNvbnRleHQ6OlZwOUZyYW1lQ29udGV4dE1hbmFnZXI6OlJlc2V0KCkgewotICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgbmVlZHNfY2xpZW50X3VwZGF0ZV8gPSBmYWxzZTsKLSAgd2Vha19wdHJfZmFjdG9yeV8uSW52YWxpZGF0ZVdlYWtQdHJzKCk7Ci19Ci0KLXZvaWQgVnA5UGFyc2VyOjpDb250ZXh0OjpWcDlGcmFtZUNvbnRleHRNYW5hZ2VyOjpTZXROZWVkc0NsaWVudFVwZGF0ZSgpIHsKLSAgRENIRUNLKCFuZWVkc19jbGllbnRfdXBkYXRlXyk7Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIG5lZWRzX2NsaWVudF91cGRhdGVfID0gdHJ1ZTsKLX0KLQotVnA5UGFyc2VyOjpDb250ZXh0UmVmcmVzaENhbGxiYWNrCi1WcDlQYXJzZXI6OkNvbnRleHQ6OlZwOUZyYW1lQ29udGV4dE1hbmFnZXI6OkdldFVwZGF0ZUNiKCkgewotICBpZiAobmVlZHNfY2xpZW50X3VwZGF0ZV8pCi0gICAgcmV0dXJuIGJhc2U6OkJpbmQoJlZwOUZyYW1lQ29udGV4dE1hbmFnZXI6OlVwZGF0ZUZyb21DbGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgd2Vha19wdHJfZmFjdG9yeV8uR2V0V2Vha1B0cigpKTsKLSAgZWxzZQotICAgIHJldHVybiBWcDlQYXJzZXI6OkNvbnRleHRSZWZyZXNoQ2FsbGJhY2soKTsKLX0KLQotdm9pZCBWcDlQYXJzZXI6OkNvbnRleHQ6OlZwOUZyYW1lQ29udGV4dE1hbmFnZXI6OlVwZGF0ZSgKLSAgICBjb25zdCBWcDlGcmFtZUNvbnRleHQmIGZyYW1lX2NvbnRleHQpIHsKLSAgLy8gRENIRUNLIGJlY2F1c2Ugd2UgY2FuIHRydXN0IHZhbHVlcyBmcm9tIG91ciBwYXJzZXIuCi0gIERDSEVDSyhmcmFtZV9jb250ZXh0LklzVmFsaWQoKSk7Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIGZyYW1lX2NvbnRleHRfID0gZnJhbWVfY29udGV4dDsKLQotICAvLyBGb3IgZnJhbWUgY29udGV4dCB3ZSBhcmUgdXBkYXRpbmcsIGl0IG1heSBiZSBzdGlsbCBhd2FpdGluZyBwcmV2aW91cwotICAvLyBDb250ZXh0UmVmcmVzaENhbGxiYWNrLiBCZWNhdXNlIHdlIG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgY29udGV4dCBoZXJlIGFuZAotICAvLyBwcmV2aW91cyBDb250ZXh0UmVmcmVzaENhbGxiYWNrIG5vIGxvbmdlciBtYXR0ZXJzLCBpbnZhbGlkYXRlIHRoZSB3ZWFrIHB0cgotICAvLyB0byBwcmV2ZW50IHByZXZpb3VzIENvbnRleHRSZWZyZXNoQ2FsbGJhY2sgcnVuLgotICAvLyBXaXRoIHRoaXMgb3B0aW1pemF0aW9uLCB3ZSBtYXkgYmUgYWJsZSB0byBwYXJzZSBtb3JlIGZyYW1lcyB3aGlsZSBwcmV2aW91cwotICAvLyBhcmUgc3RpbGwgZGVjb2RpbmcuCi0gIHdlYWtfcHRyX2ZhY3RvcnlfLkludmFsaWRhdGVXZWFrUHRycygpOwotICBuZWVkc19jbGllbnRfdXBkYXRlXyA9IGZhbHNlOwotfQotCi12b2lkIFZwOVBhcnNlcjo6Q29udGV4dDo6VnA5RnJhbWVDb250ZXh0TWFuYWdlcjo6VXBkYXRlRnJvbUNsaWVudCgKLSAgICBjb25zdCBWcDlGcmFtZUNvbnRleHQmIGZyYW1lX2NvbnRleHQpIHsKLSAgRFZMT0coMikgPDwgIkdvdCBleHRlcm5hbCBmcmFtZV9jb250ZXh0IHVwZGF0ZSI7Ci0gIERDSEVDSyhuZWVkc19jbGllbnRfdXBkYXRlXyk7Ci0gIGlmICghZnJhbWVfY29udGV4dC5Jc1ZhbGlkKCkpIHsKLSAgICBETE9HKEVSUk9SKSA8PCAiSW52YWxpZCBwcm9iIHZhbHVlIGluIGZyYW1lX2NvbnRleHQiOwotICAgIHJldHVybjsKLSAgfQotICBuZWVkc19jbGllbnRfdXBkYXRlXyA9IGZhbHNlOwotICBpbml0aWFsaXplZF8gPSB0cnVlOwotICBmcmFtZV9jb250ZXh0XyA9IGZyYW1lX2NvbnRleHQ7Ci19Ci0KLXZvaWQgVnA5UGFyc2VyOjpDb250ZXh0OjpSZXNldCgpIHsKLSAgbWVtc2V0KCZzZWdtZW50YXRpb25fLCAwLCBzaXplb2Yoc2VnbWVudGF0aW9uXykpOwotICBtZW1zZXQoJmxvb3BfZmlsdGVyXywgMCwgc2l6ZW9mKGxvb3BfZmlsdGVyXykpOwotICBtZW1zZXQoJnJlZl9zbG90c18sIDAsIHNpemVvZihyZWZfc2xvdHNfKSk7Ci0gIGZvciAoYXV0byYgbWFuYWdlciA6IGZyYW1lX2NvbnRleHRfbWFuYWdlcnNfKSBtYW5hZ2VyLlJlc2V0KCk7Ci19Ci0KLXZvaWQgVnA5UGFyc2VyOjpDb250ZXh0OjpNYXJrRnJhbWVDb250ZXh0Rm9yVXBkYXRlKHNpemVfdCBmcmFtZV9jb250ZXh0X2lkeCkgewotICBEQ0hFQ0tfTFQoZnJhbWVfY29udGV4dF9pZHgsIGFycmF5c2l6ZShmcmFtZV9jb250ZXh0X21hbmFnZXJzXykpOwotICBmcmFtZV9jb250ZXh0X21hbmFnZXJzX1tmcmFtZV9jb250ZXh0X2lkeF0uU2V0TmVlZHNDbGllbnRVcGRhdGUoKTsKLX0KLQotdm9pZCBWcDlQYXJzZXI6OkNvbnRleHQ6OlVwZGF0ZUZyYW1lQ29udGV4dCgKLSAgICBzaXplX3QgZnJhbWVfY29udGV4dF9pZHgsIGNvbnN0IFZwOUZyYW1lQ29udGV4dCYgZnJhbWVfY29udGV4dCkgewotICBEQ0hFQ0tfTFQoZnJhbWVfY29udGV4dF9pZHgsIGFycmF5c2l6ZShmcmFtZV9jb250ZXh0X21hbmFnZXJzXykpOwotICBmcmFtZV9jb250ZXh0X21hbmFnZXJzX1tmcmFtZV9jb250ZXh0X2lkeF0uVXBkYXRlKGZyYW1lX2NvbnRleHQpOwotfQotCi1jb25zdCBWcDlQYXJzZXI6OlJlZmVyZW5jZVNsb3QmIFZwOVBhcnNlcjo6Q29udGV4dDo6R2V0UmVmU2xvdCgKLSAgICBzaXplX3QgcmVmX3R5cGUpIGNvbnN0IHsKLSAgRENIRUNLX0xUKHJlZl90eXBlLCBhcnJheXNpemUocmVmX3Nsb3RzXykpOwotICByZXR1cm4gcmVmX3Nsb3RzX1tyZWZfdHlwZV07Ci19Ci0KLXZvaWQgVnA5UGFyc2VyOjpDb250ZXh0OjpVcGRhdGVSZWZTbG90KAotICAgIHNpemVfdCByZWZfdHlwZSwgY29uc3QgVnA5UGFyc2VyOjpSZWZlcmVuY2VTbG90JiByZWZfc2xvdCkgewotICBEQ0hFQ0tfTFQocmVmX3R5cGUsIGFycmF5c2l6ZShyZWZfc2xvdHNfKSk7Ci0gIHJlZl9zbG90c19bcmVmX3R5cGVdID0gcmVmX3Nsb3Q7Ci19Ci0KLVZwOVBhcnNlcjo6VnA5UGFyc2VyKGJvb2wgcGFyc2luZ19jb21wcmVzc2VkX2hlYWRlcikKLSAgICA6IHBhcnNpbmdfY29tcHJlc3NlZF9oZWFkZXJfKHBhcnNpbmdfY29tcHJlc3NlZF9oZWFkZXIpIHsKLSAgUmVzZXQoKTsKLX0KLQotVnA5UGFyc2VyOjp+VnA5UGFyc2VyKCkge30KLQotdm9pZCBWcDlQYXJzZXI6OlNldFN0cmVhbShjb25zdCB1aW50OF90KiBzdHJlYW0sIG9mZl90IHN0cmVhbV9zaXplKSB7Ci0gIERDSEVDSyhzdHJlYW0pOwotICBzdHJlYW1fID0gc3RyZWFtOwotICBieXRlc19sZWZ0XyA9IHN0cmVhbV9zaXplOwotICBmcmFtZXNfLmNsZWFyKCk7Ci19Ci0KLXZvaWQgVnA5UGFyc2VyOjpSZXNldCgpIHsKLSAgc3RyZWFtXyA9IE5VTEw7Ci0gIGJ5dGVzX2xlZnRfID0gMDsKLSAgZnJhbWVzXy5jbGVhcigpOwotICBjdXJyX2ZyYW1lX2luZm9fLlJlc2V0KCk7Ci0KLSAgY29udGV4dF8uUmVzZXQoKTsKLX0KLQotVnA5UGFyc2VyOjpSZXN1bHQgVnA5UGFyc2VyOjpQYXJzZU5leHRGcmFtZShWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBEQ0hFQ0soZmhkcik7Ci0gIERWTE9HKDIpIDw8ICJQYXJzZU5leHRGcmFtZSI7Ci0KLSAgLy8gSWYgfGN1cnJfZnJhbWVfaW5mb198IGlzIHZhbGlkLCB1bmNvbXByZXNzZWQgaGVhZGVyIHdhcyBwYXJzZWQgaW50bwotICAvLyB8Y3Vycl9mcmFtZV9oZWFkZXJffCBhbmQgd2UgYXJlIGF3YWl0aW5nIGNvbnRleHQgdXBkYXRlIHRvIHByb2NlZWQgd2l0aAotICAvLyBjb21wcmVzc2VkIGhlYWRlciBwYXJzaW5nLgotICBpZiAoIWN1cnJfZnJhbWVfaW5mb18uSXNWYWxpZCgpKSB7Ci0gICAgaWYgKGZyYW1lc18uZW1wdHkoKSkgewotICAgICAgLy8gTm8gZnJhbWVzIHRvIGJlIGRlY29kZWQsIGlmIHRoZXJlIGlzIG5vIG1vcmUgc3RyZWFtLCByZXF1ZXN0IG1vcmUuCi0gICAgICBpZiAoIXN0cmVhbV8pIHJldHVybiBrRU9TdHJlYW07Ci0KLSAgICAgIC8vIE5ldyBzdHJlYW0gdG8gYmUgcGFyc2VkLCBwYXJzZSBpdCBhbmQgZmlsbCBmcmFtZXNfLgotICAgICAgZnJhbWVzXyA9IFBhcnNlU3VwZXJmcmFtZSgpOwotICAgICAgaWYgKGZyYW1lc18uZW1wdHkoKSkgewotICAgICAgICBEVkxPRygxKSA8PCAiRmFpbGVkIHBhcnNpbmcgc3VwZXJmcmFtZXMiOwotICAgICAgICByZXR1cm4ga0ludmFsaWRTdHJlYW07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY3Vycl9mcmFtZV9pbmZvXyA9IGZyYW1lc18uZnJvbnQoKTsKLSAgICBmcmFtZXNfLnBvcF9mcm9udCgpOwotCi0gICAgbWVtc2V0KCZjdXJyX2ZyYW1lX2hlYWRlcl8sIDAsIHNpemVvZihjdXJyX2ZyYW1lX2hlYWRlcl8pKTsKLQotICAgIFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlciB1bmNvbXByZXNzZWRfcGFyc2VyKCZjb250ZXh0Xyk7Ci0gICAgaWYgKCF1bmNvbXByZXNzZWRfcGFyc2VyLlBhcnNlKGN1cnJfZnJhbWVfaW5mb18ucHRyLCBjdXJyX2ZyYW1lX2luZm9fLnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJyX2ZyYW1lX2hlYWRlcl8pKQotICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOwotCi0gICAgaWYgKGN1cnJfZnJhbWVfaGVhZGVyXy5oZWFkZXJfc2l6ZV9pbl9ieXRlcyA9PSAwKSB7Ci0gICAgICAvLyBWZXJpZnkgcGFkZGluZyBiaXRzIGFyZSB6ZXJvLgotICAgICAgZm9yIChvZmZfdCBpID0gY3Vycl9mcmFtZV9oZWFkZXJfLnVuY29tcHJlc3NlZF9oZWFkZXJfc2l6ZTsKLSAgICAgICAgICAgaSA8IGN1cnJfZnJhbWVfaW5mb18uc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGlmIChjdXJyX2ZyYW1lX2luZm9fLnB0cltpXSAhPSAwKSB7Ci0gICAgICAgICAgRFZMT0coMSkgPDwgIlBhZGRpbmcgYml0cyBhcmUgbm90IHplcm9zLiI7Ci0gICAgICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAqZmhkciA9IGN1cnJfZnJhbWVfaGVhZGVyXzsKLSAgICAgIGN1cnJfZnJhbWVfaW5mb18uUmVzZXQoKTsKLSAgICAgIHJldHVybiBrT2s7Ci0gICAgfQotICAgIGlmIChjdXJyX2ZyYW1lX2hlYWRlcl8udW5jb21wcmVzc2VkX2hlYWRlcl9zaXplICsKLSAgICAgICAgICAgIGN1cnJfZnJhbWVfaGVhZGVyXy5oZWFkZXJfc2l6ZV9pbl9ieXRlcyA+Ci0gICAgICAgIGJhc2U6OmNoZWNrZWRfY2FzdDxzaXplX3Q+KGN1cnJfZnJhbWVfaW5mb18uc2l6ZSkpIHsKLSAgICAgIERWTE9HKDEpIDw8ICJoZWFkZXJfc2l6ZV9pbl9ieXRlcz0iCi0gICAgICAgICAgICAgICA8PCBjdXJyX2ZyYW1lX2hlYWRlcl8uaGVhZGVyX3NpemVfaW5fYnl0ZXMKLSAgICAgICAgICAgICAgIDw8ICIgaXMgbGFyZ2VyIHRoYW4gYnl0ZXMgbGVmdCBpbiBidWZmZXI6ICIKLSAgICAgICAgICAgICAgIDw8IGN1cnJfZnJhbWVfaW5mb18uc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgY3Vycl9mcmFtZV9oZWFkZXJfLnVuY29tcHJlc3NlZF9oZWFkZXJfc2l6ZTsKLSAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLSAgICB9Ci0gIH0KLQotICBpZiAocGFyc2luZ19jb21wcmVzc2VkX2hlYWRlcl8pIHsKLSAgICBzaXplX3QgZnJhbWVfY29udGV4dF9pZHggPSBjdXJyX2ZyYW1lX2hlYWRlcl8uZnJhbWVfY29udGV4dF9pZHg7Ci0gICAgY29uc3QgQ29udGV4dDo6VnA5RnJhbWVDb250ZXh0TWFuYWdlciYgY29udGV4dF90b19sb2FkID0KLSAgICAgICAgY29udGV4dF8uZnJhbWVfY29udGV4dF9tYW5hZ2Vyc19bZnJhbWVfY29udGV4dF9pZHhdOwotICAgIGlmICghY29udGV4dF90b19sb2FkLmluaXRpYWxpemVkKCkpIHsKLSAgICAgIC8vIDguMiBGcmFtZSBvcmRlciBjb25zdHJhaW50cwotICAgICAgLy8gbXVzdCBsb2FkIGFuIGluaXRpYWxpemVkIHNldCBvZiBwcm9iYWJpbGl0aWVzLgotICAgICAgRFZMT0coMSkgPDwgImxvYWRpbmcgdW5pbml0aWFsaXplZCBmcmFtZSBjb250ZXh0LCBpbmRleD0iCi0gICAgICAgICAgICAgICA8PCBmcmFtZV9jb250ZXh0X2lkeDsKLSAgICAgIHJldHVybiBrSW52YWxpZFN0cmVhbTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRfdG9fbG9hZC5uZWVkc19jbGllbnRfdXBkYXRlKCkpIHsKLSAgICAgIERWTE9HKDMpIDw8ICJ3YWl0aW5nIGZyYW1lX2NvbnRleHRfaWR4PSIgPDwgZnJhbWVfY29udGV4dF9pZHgKLSAgICAgICAgICAgICAgIDw8ICIgdG8gdXBkYXRlIjsKLSAgICAgIHJldHVybiBrQXdhaXRpbmdSZWZyZXNoOwotICAgIH0KLSAgICBjdXJyX2ZyYW1lX2hlYWRlcl8uaW5pdGlhbF9mcmFtZV9jb250ZXh0ID0KLSAgICAgICAgY3Vycl9mcmFtZV9oZWFkZXJfLmZyYW1lX2NvbnRleHQgPSBjb250ZXh0X3RvX2xvYWQuZnJhbWVfY29udGV4dCgpOwotCi0gICAgVnA5Q29tcHJlc3NlZEhlYWRlclBhcnNlciBjb21wcmVzc2VkX3BhcnNlcjsKLSAgICBpZiAoIWNvbXByZXNzZWRfcGFyc2VyLlBhcnNlKAotICAgICAgICAgICAgY3Vycl9mcmFtZV9pbmZvXy5wdHIgKyBjdXJyX2ZyYW1lX2hlYWRlcl8udW5jb21wcmVzc2VkX2hlYWRlcl9zaXplLAotICAgICAgICAgICAgY3Vycl9mcmFtZV9oZWFkZXJfLmhlYWRlcl9zaXplX2luX2J5dGVzLCAmY3Vycl9mcmFtZV9oZWFkZXJfKSkgewotICAgICAgcmV0dXJuIGtJbnZhbGlkU3RyZWFtOwotICAgIH0KLQotICAgIGlmIChjdXJyX2ZyYW1lX2hlYWRlcl8ucmVmcmVzaF9mcmFtZV9jb250ZXh0KSB7Ci0gICAgICAvLyBJbiBmcmFtZSBwYXJhbGxlbCBtb2RlLCB3ZSBjYW4gcmVmcmVzaCB0aGUgY29udGV4dCB3aXRob3V0IGRlY29kaW5nCi0gICAgICAvLyB0aWxlIGRhdGEuCi0gICAgICBpZiAoY3Vycl9mcmFtZV9oZWFkZXJfLmZyYW1lX3BhcmFsbGVsX2RlY29kaW5nX21vZGUpIHsKLSAgICAgICAgY29udGV4dF8uVXBkYXRlRnJhbWVDb250ZXh0KGZyYW1lX2NvbnRleHRfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9mcmFtZV9oZWFkZXJfLmZyYW1lX2NvbnRleHQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dF8uTWFya0ZyYW1lQ29udGV4dEZvclVwZGF0ZShmcmFtZV9jb250ZXh0X2lkeCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgU2V0dXBTZWdtZW50YXRpb25EZXF1YW50KCk7Ci0gIFNldHVwTG9vcEZpbHRlcigpOwotICBVcGRhdGVTbG90cygpOwotCi0gICpmaGRyID0gY3Vycl9mcmFtZV9oZWFkZXJfOwotICBjdXJyX2ZyYW1lX2luZm9fLlJlc2V0KCk7Ci0gIHJldHVybiBrT2s7Ci19Ci0KLVZwOVBhcnNlcjo6Q29udGV4dFJlZnJlc2hDYWxsYmFjayBWcDlQYXJzZXI6OkdldENvbnRleHRSZWZyZXNoQ2IoCi0gICAgc2l6ZV90IGZyYW1lX2NvbnRleHRfaWR4KSB7Ci0gIERDSEVDS19MVChmcmFtZV9jb250ZXh0X2lkeCwgYXJyYXlzaXplKGNvbnRleHRfLmZyYW1lX2NvbnRleHRfbWFuYWdlcnNfKSk7Ci0gIGF1dG8mIGZyYW1lX2NvbnRleHRfbWFuYWdlciA9Ci0gICAgICBjb250ZXh0Xy5mcmFtZV9jb250ZXh0X21hbmFnZXJzX1tmcmFtZV9jb250ZXh0X2lkeF07Ci0KLSAgcmV0dXJuIGZyYW1lX2NvbnRleHRfbWFuYWdlci5HZXRVcGRhdGVDYigpOwotfQotCi0vLyBBbm5leCBCIFN1cGVyZnJhbWVzCi1zdGQ6OmRlcXVlPFZwOVBhcnNlcjo6RnJhbWVJbmZvPiBWcDlQYXJzZXI6OlBhcnNlU3VwZXJmcmFtZSgpIHsKLSAgY29uc3QgdWludDhfdCogc3RyZWFtID0gc3RyZWFtXzsKLSAgb2ZmX3QgYnl0ZXNfbGVmdCA9IGJ5dGVzX2xlZnRfOwotCi0gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBwYXJzZSBzdHJlYW1fIG1vcmUgdGhhbiBvbmNlLgotICBzdHJlYW1fID0gTlVMTDsKLSAgYnl0ZXNfbGVmdF8gPSAwOwotCi0gIGlmIChieXRlc19sZWZ0IDwgMSkgcmV0dXJuIHN0ZDo6ZGVxdWU8RnJhbWVJbmZvPigpOwotCi0gIC8vIElmIHRoaXMgaXMgYSBzdXBlcmZyYW1lLCB0aGUgbGFzdCBieXRlIGluIHRoZSBzdHJlYW0gd2lsbCBjb250YWluIHRoZQotICAvLyBzdXBlcmZyYW1lIG1hcmtlci4gSWYgbm90LCB0aGUgd2hvbGUgYnVmZmVyIGNvbnRhaW5zIGEgc2luZ2xlIGZyYW1lLgotICB1aW50OF90IG1hcmtlciA9ICooc3RyZWFtICsgYnl0ZXNfbGVmdCAtIDEpOwotICBpZiAoKG1hcmtlciAmIDB4ZTApICE9IDB4YzApIHsKLSAgICByZXR1cm4ge0ZyYW1lSW5mbyhzdHJlYW0sIGJ5dGVzX2xlZnQpfTsKLSAgfQotCi0gIERWTE9HKDEpIDw8ICJQYXJzaW5nIGEgc3VwZXJmcmFtZSI7Ci0KLSAgLy8gVGhlIGJ5dGVzIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgc3VwZXJmcmFtZSBtYXJrZXIgY29uc3RpdHV0ZSBzdXBlcmZyYW1lCi0gIC8vIGluZGV4LCB3aGljaCBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgc2l6ZXMgb2YgZWFjaCBmcmFtZSBpbiBpdC4KLSAgLy8gQ2FsY3VsYXRlIGl0cyBzaXplIGFuZCBzZXQgaW5kZXhfcHRyIHRvIHRoZSBiZWdpbm5pbmcgb2YgaXQuCi0gIHNpemVfdCBudW1fZnJhbWVzID0gKG1hcmtlciAmIDB4NykgKyAxOwotICBzaXplX3QgbWFnID0gKChtYXJrZXIgPj4gMykgJiAweDMpICsgMTsKLSAgb2ZmX3QgaW5kZXhfc2l6ZSA9IDIgKyBtYWcgKiBudW1fZnJhbWVzOwotCi0gIGlmIChieXRlc19sZWZ0IDwgaW5kZXhfc2l6ZSkgcmV0dXJuIHN0ZDo6ZGVxdWU8RnJhbWVJbmZvPigpOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGluZGV4X3B0ciA9IHN0cmVhbSArIGJ5dGVzX2xlZnQgLSBpbmRleF9zaXplOwotICBpZiAobWFya2VyICE9ICppbmRleF9wdHIpIHJldHVybiBzdGQ6OmRlcXVlPEZyYW1lSW5mbz4oKTsKLQotICArK2luZGV4X3B0cjsKLSAgYnl0ZXNfbGVmdCAtPSBpbmRleF9zaXplOwotCi0gIC8vIFBhcnNlIGZyYW1lIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgaW5kZXggYW5kIGFkZCBhIHBvaW50ZXIgdG8gYW5kCi0gIC8vIHNpemUgb2YgZWFjaCBmcmFtZSB0byBmcmFtZXMuCi0gIHN0ZDo6ZGVxdWU8RnJhbWVJbmZvPiBmcmFtZXM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX2ZyYW1lczsgKytpKSB7Ci0gICAgdWludDMyX3Qgc2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtYWc7ICsraikgewotICAgICAgc2l6ZSB8PSAqaW5kZXhfcHRyIDw8IChqICogOCk7Ci0gICAgICArK2luZGV4X3B0cjsKLSAgICB9Ci0KLSAgICBpZiAoYmFzZTo6Y2hlY2tlZF9jYXN0PG9mZl90PihzaXplKSA+IGJ5dGVzX2xlZnQpIHsKLSAgICAgIERWTE9HKDEpIDw8ICJOb3QgZW5vdWdoIGRhdGEgaW4gdGhlIGJ1ZmZlciBmb3IgZnJhbWUgIiA8PCBpOwotICAgICAgcmV0dXJuIHN0ZDo6ZGVxdWU8RnJhbWVJbmZvPigpOwotICAgIH0KLQotICAgIGZyYW1lcy5wdXNoX2JhY2soRnJhbWVJbmZvKHN0cmVhbSwgc2l6ZSkpOwotICAgIHN0cmVhbSArPSBzaXplOwotICAgIGJ5dGVzX2xlZnQgLT0gc2l6ZTsKLQotICAgIERWTE9HKDEpIDw8ICJGcmFtZSAiIDw8IGkgPDwgIiwgc2l6ZTogIiA8PCBzaXplOwotICB9Ci0KLSAgcmV0dXJuIGZyYW1lczsKLX0KLQotLy8gOC42LjEKLWNvbnN0IHNpemVfdCBRSU5ERVhfUkFOR0UgPSAyNTY7Ci1jb25zdCBpbnQxNl90IGtEY1FMb29rdXBbUUlOREVYX1JBTkdFXSA9IHsKLSAgICA0LCAgIDgsICAgIDgsICAgIDksICAgIDEwLCAgIDExLCAgIDEyLCAgIDEyLCAgIDEzLCAgIDE0LCAgMTUsICAxNiwgIDE3LAotICAgIDE4LCAgMTksICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAyNiwgIDI3LCAgMjgsCi0gICAgMjksICAzMCwgICAzMSwgICAzMiwgICAzMiwgICAzMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgIDM4LCAgMzgsICAzOSwKLSAgICA0MCwgIDQxLCAgIDQyLCAgIDQzLCAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgNDgsICA0OSwgIDUwLAotICAgIDUxLCAgNTIsICAgNTMsICAgNTMsICAgNTQsICAgNTUsICAgNTYsICAgNTcsICAgNTcsICAgNTgsICA1OSwgIDYwLCAgNjEsCi0gICAgNjIsICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICA2NiwgICA2NywgICA2OCwgICA2OSwgIDcwLCAgNzAsICA3MSwKLSAgICA3MiwgIDczLCAgIDc0LCAgIDc0LCAgIDc1LCAgIDc2LCAgIDc3LCAgIDc4LCAgIDc4LCAgIDc5LCAgODAsICA4MSwgIDgxLAotICAgIDgyLCAgODMsICAgODQsICAgODUsICAgODUsICAgODcsICAgODgsICAgOTAsICAgOTIsICAgOTMsICA5NSwgIDk2LCAgOTgsCi0gICAgOTksICAxMDEsICAxMDIsICAxMDQsICAxMDUsICAxMDcsICAxMDgsICAxMTAsICAxMTEsICAxMTMsIDExNCwgMTE2LCAxMTcsCi0gICAgMTE4LCAxMjAsICAxMjEsICAxMjMsICAxMjUsICAxMjcsICAxMjksICAxMzEsICAxMzQsICAxMzYsIDEzOCwgMTQwLCAxNDIsCi0gICAgMTQ0LCAxNDYsICAxNDgsICAxNTAsICAxNTIsICAxNTQsICAxNTYsICAxNTgsICAxNjEsICAxNjQsIDE2NiwgMTY5LCAxNzIsCi0gICAgMTc0LCAxNzcsICAxODAsICAxODIsICAxODUsICAxODcsICAxOTAsICAxOTIsICAxOTUsICAxOTksIDIwMiwgMjA1LCAyMDgsCi0gICAgMjExLCAyMTQsICAyMTcsICAyMjAsICAyMjMsICAyMjYsICAyMzAsICAyMzMsICAyMzcsICAyNDAsIDI0MywgMjQ3LCAyNTAsCi0gICAgMjUzLCAyNTcsICAyNjEsICAyNjUsICAyNjksICAyNzIsICAyNzYsICAyODAsICAyODQsICAyODgsIDI5MiwgMjk2LCAzMDAsCi0gICAgMzA0LCAzMDksICAzMTMsICAzMTcsICAzMjIsICAzMjYsICAzMzAsICAzMzUsICAzNDAsICAzNDQsIDM0OSwgMzU0LCAzNTksCi0gICAgMzY0LCAzNjksICAzNzQsICAzNzksICAzODQsICAzODksICAzOTUsICA0MDAsICA0MDYsICA0MTEsIDQxNywgNDIzLCA0MjksCi0gICAgNDM1LCA0NDEsICA0NDcsICA0NTQsICA0NjEsICA0NjcsICA0NzUsICA0ODIsICA0ODksICA0OTcsIDUwNSwgNTEzLCA1MjIsCi0gICAgNTMwLCA1MzksICA1NDksICA1NTksICA1NjksICA1NzksICA1OTAsICA2MDIsICA2MTQsICA2MjYsIDY0MCwgNjU0LCA2NjgsCi0gICAgNjg0LCA3MDAsICA3MTcsICA3MzYsICA3NTUsICA3NzUsICA3OTYsICA4MTksICA4NDMsICA4NjksIDg5NiwgOTI1LCA5NTUsCi0gICAgOTg4LCAxMDIyLCAxMDU4LCAxMDk4LCAxMTM5LCAxMTg0LCAxMjMyLCAxMjgyLCAxMzM2LAotfTsKLQotY29uc3QgaW50MTZfdCBrQWNRTG9va3VwW1FJTkRFWF9SQU5HRV0gPSB7Ci0gICAgNCwgICAgOCwgICAgOSwgICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsICAgMTgsCi0gICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsCi0gICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0gICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgNTQsCi0gICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsCi0gICAgNjcsICAgNjgsICAgNjksICAgNzAsICAgNzEsICAgNzIsICAgNzMsICAgNzQsICAgNzUsICAgNzYsICAgNzcsICAgNzgsCi0gICAgNzksICAgODAsICAgODEsICAgODIsICAgODMsICAgODQsICAgODUsICAgODYsICAgODcsICAgODgsICAgODksICAgOTAsCi0gICAgOTEsICAgOTIsICAgOTMsICAgOTQsICAgOTUsICAgOTYsICAgOTcsICAgOTgsICAgOTksICAgMTAwLCAgMTAxLCAgMTAyLAotICAgIDEwNCwgIDEwNiwgIDEwOCwgIDExMCwgIDExMiwgIDExNCwgIDExNiwgIDExOCwgIDEyMCwgIDEyMiwgIDEyNCwgIDEyNiwKLSAgICAxMjgsICAxMzAsICAxMzIsICAxMzQsICAxMzYsICAxMzgsICAxNDAsICAxNDIsICAxNDQsICAxNDYsICAxNDgsICAxNTAsCi0gICAgMTUyLCAgMTU1LCAgMTU4LCAgMTYxLCAgMTY0LCAgMTY3LCAgMTcwLCAgMTczLCAgMTc2LCAgMTc5LCAgMTgyLCAgMTg1LAotICAgIDE4OCwgIDE5MSwgIDE5NCwgIDE5NywgIDIwMCwgIDIwMywgIDIwNywgIDIxMSwgIDIxNSwgIDIxOSwgIDIyMywgIDIyNywKLSAgICAyMzEsICAyMzUsICAyMzksICAyNDMsICAyNDcsICAyNTEsICAyNTUsICAyNjAsICAyNjUsICAyNzAsICAyNzUsICAyODAsCi0gICAgMjg1LCAgMjkwLCAgMjk1LCAgMzAwLCAgMzA1LCAgMzExLCAgMzE3LCAgMzIzLCAgMzI5LCAgMzM1LCAgMzQxLCAgMzQ3LAotICAgIDM1MywgIDM1OSwgIDM2NiwgIDM3MywgIDM4MCwgIDM4NywgIDM5NCwgIDQwMSwgIDQwOCwgIDQxNiwgIDQyNCwgIDQzMiwKLSAgICA0NDAsICA0NDgsICA0NTYsICA0NjUsICA0NzQsICA0ODMsICA0OTIsICA1MDEsICA1MTAsICA1MjAsICA1MzAsICA1NDAsCi0gICAgNTUwLCAgNTYwLCAgNTcxLCAgNTgyLCAgNTkzLCAgNjA0LCAgNjE1LCAgNjI3LCAgNjM5LCAgNjUxLCAgNjYzLCAgNjc2LAotICAgIDY4OSwgIDcwMiwgIDcxNSwgIDcyOSwgIDc0MywgIDc1NywgIDc3MSwgIDc4NiwgIDgwMSwgIDgxNiwgIDgzMiwgIDg0OCwKLSAgICA4NjQsICA4ODEsICA4OTgsICA5MTUsICA5MzMsICA5NTEsICA5NjksICA5ODgsICAxMDA3LCAxMDI2LCAxMDQ2LCAxMDY2LAotICAgIDEwODcsIDExMDgsIDExMjksIDExNTEsIDExNzMsIDExOTYsIDEyMTksIDEyNDMsIDEyNjcsIDEyOTIsIDEzMTcsIDEzNDMsCi0gICAgMTM2OSwgMTM5NiwgMTQyMywgMTQ1MSwgMTQ3OSwgMTUwOCwgMTUzNywgMTU2NywgMTU5NywgMTYyOCwgMTY2MCwgMTY5MiwKLSAgICAxNzI1LCAxNzU5LCAxNzkzLCAxODI4LAotfTsKLQotc3RhdGljX2Fzc2VydChhcnJheXNpemUoa0RjUUxvb2t1cCkgPT0gYXJyYXlzaXplKGtBY1FMb29rdXApLAotICAgICAgICAgICAgICAicXVhbnRpemVyIGxvb2t1cCBhcnJheXMgb2YgaW5jb3JyZWN0IHNpemUiKTsKLQotc3RhdGljIHNpemVfdCBDbGFtcFEoc2l6ZV90IHEpIHsKLSAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oMCksIHEpLAotICAgICAgICAgICAgICAgICAgYXJyYXlzaXplKGtEY1FMb29rdXApIC0gMSk7Ci19Ci0KLS8vIDguNi4xIERlcXVhbnRpemF0aW9uIGZ1bmN0aW9ucwotc2l6ZV90IFZwOVBhcnNlcjo6R2V0UUluZGV4KGNvbnN0IFZwOVF1YW50aXphdGlvblBhcmFtcyYgcXVhbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZ2lkKSBjb25zdCB7Ci0gIGNvbnN0IFZwOVNlZ21lbnRhdGlvblBhcmFtcyYgc2VnbWVudGF0aW9uID0gY29udGV4dF8uc2VnbWVudGF0aW9uKCk7Ci0KLSAgaWYgKHNlZ21lbnRhdGlvbi5GZWF0dXJlRW5hYmxlZChzZWdpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcDlTZWdtZW50YXRpb25QYXJhbXM6OlNFR19MVkxfQUxUX1EpKSB7Ci0gICAgaW50MTZfdCBmZWF0dXJlX2RhdGEgPQotICAgICAgICBzZWdtZW50YXRpb24uRmVhdHVyZURhdGEoc2VnaWQsIFZwOVNlZ21lbnRhdGlvblBhcmFtczo6U0VHX0xWTF9BTFRfUSk7Ci0gICAgc2l6ZV90IHFfaW5kZXggPSBzZWdtZW50YXRpb24uYWJzX29yX2RlbHRhX3VwZGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgID8gZmVhdHVyZV9kYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgOiBxdWFudC5iYXNlX3FfaWR4ICsgZmVhdHVyZV9kYXRhOwotICAgIHJldHVybiBDbGFtcFEocV9pbmRleCk7Ci0gIH0KLQotICByZXR1cm4gcXVhbnQuYmFzZV9xX2lkeDsKLX0KLQotLy8gOC42LjEgRGVxdWFudGl6YXRpb24gZnVuY3Rpb25zCi12b2lkIFZwOVBhcnNlcjo6U2V0dXBTZWdtZW50YXRpb25EZXF1YW50KCkgewotICBjb25zdCBWcDlRdWFudGl6YXRpb25QYXJhbXMmIHF1YW50ID0gY3Vycl9mcmFtZV9oZWFkZXJfLnF1YW50X3BhcmFtczsKLSAgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBzZWdtZW50YXRpb24gPSBjb250ZXh0Xy5zZWdtZW50YXRpb25fOwotCi0gIERMT0dfSUYoRVJST1IsIGN1cnJfZnJhbWVfaGVhZGVyXy5iaXRfZGVwdGggPiA4KQotICAgICAgPDwgImJpdF9kZXB0aCA+IDggaXMgbm90IHN1cHBvcnRlZCAiCi0gICAgICAgICAieWV0LCBrRGNRTG9va3VwIGFuZCBrQWNRTG9va3VwICIKLSAgICAgICAgICJuZWVkIGV4dGVuZGVkIjsKLSAgaWYgKHNlZ21lbnRhdGlvbi5lbmFibGVkKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWcDlTZWdtZW50YXRpb25QYXJhbXM6OmtOdW1TZWdtZW50czsgKytpKSB7Ci0gICAgICBjb25zdCBzaXplX3QgcV9pbmRleCA9IEdldFFJbmRleChxdWFudCwgaSk7Ci0gICAgICBzZWdtZW50YXRpb24ueV9kZXF1YW50W2ldWzBdID0KLSAgICAgICAgICBrRGNRTG9va3VwW0NsYW1wUShxX2luZGV4ICsgcXVhbnQuZGVsdGFfcV95X2RjKV07Ci0gICAgICBzZWdtZW50YXRpb24ueV9kZXF1YW50W2ldWzFdID0ga0FjUUxvb2t1cFtDbGFtcFEocV9pbmRleCldOwotICAgICAgc2VnbWVudGF0aW9uLnV2X2RlcXVhbnRbaV1bMF0gPQotICAgICAgICAgIGtEY1FMb29rdXBbQ2xhbXBRKHFfaW5kZXggKyBxdWFudC5kZWx0YV9xX3V2X2RjKV07Ci0gICAgICBzZWdtZW50YXRpb24udXZfZGVxdWFudFtpXVsxXSA9Ci0gICAgICAgICAga0FjUUxvb2t1cFtDbGFtcFEocV9pbmRleCArIHF1YW50LmRlbHRhX3FfdXZfYWMpXTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3Qgc2l6ZV90IHFfaW5kZXggPSBxdWFudC5iYXNlX3FfaWR4OwotICAgIHNlZ21lbnRhdGlvbi55X2RlcXVhbnRbMF1bMF0gPQotICAgICAgICBrRGNRTG9va3VwW0NsYW1wUShxX2luZGV4ICsgcXVhbnQuZGVsdGFfcV95X2RjKV07Ci0gICAgc2VnbWVudGF0aW9uLnlfZGVxdWFudFswXVsxXSA9IGtBY1FMb29rdXBbQ2xhbXBRKHFfaW5kZXgpXTsKLSAgICBzZWdtZW50YXRpb24udXZfZGVxdWFudFswXVswXSA9Ci0gICAgICAgIGtEY1FMb29rdXBbQ2xhbXBRKHFfaW5kZXggKyBxdWFudC5kZWx0YV9xX3V2X2RjKV07Ci0gICAgc2VnbWVudGF0aW9uLnV2X2RlcXVhbnRbMF1bMV0gPQotICAgICAgICBrQWNRTG9va3VwW0NsYW1wUShxX2luZGV4ICsgcXVhbnQuZGVsdGFfcV91dl9hYyldOwotICB9Ci19Ci0KLXN0YXRpYyBpbnQgQ2xhbXBMZihpbnQgbGYpIHsKLSAgY29uc3QgaW50IGtNYXhMb29wRmlsdGVyTGV2ZWwgPSA2MzsKLSAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KDAsIGxmKSwga01heExvb3BGaWx0ZXJMZXZlbCk7Ci19Ci0KLS8vIDguOC4xIExvb3AgZmlsdGVyIGZyYW1lIGluaXQgcHJvY2Vzcwotdm9pZCBWcDlQYXJzZXI6OlNldHVwTG9vcEZpbHRlcigpIHsKLSAgVnA5TG9vcEZpbHRlclBhcmFtcyYgbG9vcF9maWx0ZXIgPSBjb250ZXh0Xy5sb29wX2ZpbHRlcl87Ci0gIGlmICghbG9vcF9maWx0ZXIubGV2ZWwpIHJldHVybjsKLQotICBpbnQgc2NhbGUgPSBsb29wX2ZpbHRlci5sZXZlbCA8IDMyID8gMSA6IDI7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWcDlTZWdtZW50YXRpb25QYXJhbXM6OmtOdW1TZWdtZW50czsgKytpKSB7Ci0gICAgaW50IGxldmVsID0gbG9vcF9maWx0ZXIubGV2ZWw7Ci0gICAgY29uc3QgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBzZWdtZW50YXRpb24gPSBjb250ZXh0Xy5zZWdtZW50YXRpb24oKTsKLQotICAgIGlmIChzZWdtZW50YXRpb24uRmVhdHVyZUVuYWJsZWQoaSwgVnA5U2VnbWVudGF0aW9uUGFyYW1zOjpTRUdfTFZMX0FMVF9MRikpIHsKLSAgICAgIGludCBmZWF0dXJlX2RhdGEgPQotICAgICAgICAgIHNlZ21lbnRhdGlvbi5GZWF0dXJlRGF0YShpLCBWcDlTZWdtZW50YXRpb25QYXJhbXM6OlNFR19MVkxfQUxUX0xGKTsKLSAgICAgIGxldmVsID0gQ2xhbXBMZihzZWdtZW50YXRpb24uYWJzX29yX2RlbHRhX3VwZGF0ZSA/IGZlYXR1cmVfZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGV2ZWwgKyBmZWF0dXJlX2RhdGEpOwotICAgIH0KLQotICAgIGlmICghbG9vcF9maWx0ZXIuZGVsdGFfZW5hYmxlZCkgewotICAgICAgbWVtc2V0KGxvb3BfZmlsdGVyLmx2bFtpXSwgbGV2ZWwsIHNpemVvZihsb29wX2ZpbHRlci5sdmxbaV0pKTsKLSAgICB9IGVsc2UgewotICAgICAgbG9vcF9maWx0ZXIubHZsW2ldW1ZwOVJlZlR5cGU6OlZQOV9GUkFNRV9JTlRSQV1bMF0gPSBDbGFtcExmKAotICAgICAgICAgIGxldmVsICsgbG9vcF9maWx0ZXIucmVmX2RlbHRhc1tWcDlSZWZUeXBlOjpWUDlfRlJBTUVfSU5UUkFdICogc2NhbGUpOwotICAgICAgbG9vcF9maWx0ZXIubHZsW2ldW1ZwOVJlZlR5cGU6OlZQOV9GUkFNRV9JTlRSQV1bMV0gPSAwOwotCi0gICAgICBmb3IgKHNpemVfdCB0eXBlID0gVnA5UmVmVHlwZTo6VlA5X0ZSQU1FX0xBU1Q7Ci0gICAgICAgICAgIHR5cGUgPCBWcDlSZWZUeXBlOjpWUDlfRlJBTUVfTUFYOyArK3R5cGUpIHsKLSAgICAgICAgZm9yIChzaXplX3QgbW9kZSA9IDA7IG1vZGUgPCBWcDlMb29wRmlsdGVyUGFyYW1zOjprTnVtTW9kZURlbHRhczsKLSAgICAgICAgICAgICArK21vZGUpIHsKLSAgICAgICAgICBsb29wX2ZpbHRlci5sdmxbaV1bdHlwZV1bbW9kZV0gPQotICAgICAgICAgICAgICBDbGFtcExmKGxldmVsICsgbG9vcF9maWx0ZXIucmVmX2RlbHRhc1t0eXBlXSAqIHNjYWxlICsKLSAgICAgICAgICAgICAgICAgICAgICBsb29wX2ZpbHRlci5tb2RlX2RlbHRhc1ttb2RlXSAqIHNjYWxlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotCi12b2lkIFZwOVBhcnNlcjo6VXBkYXRlU2xvdHMoKSB7Ci0gIC8vIDguMTAgUmVmZXJlbmNlIGZyYW1lIHVwZGF0ZSBwcm9jZXNzCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga1ZwOU51bVJlZkZyYW1lczsgaSsrKSB7Ci0gICAgaWYgKGN1cnJfZnJhbWVfaGVhZGVyXy5SZWZyZXNoRmxhZyhpKSkgewotICAgICAgUmVmZXJlbmNlU2xvdCByZWZfc2xvdDsKLSAgICAgIHJlZl9zbG90LmluaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgICAgcmVmX3Nsb3QuZnJhbWVfd2lkdGggPSBjdXJyX2ZyYW1lX2hlYWRlcl8uZnJhbWVfd2lkdGg7Ci0gICAgICByZWZfc2xvdC5mcmFtZV9oZWlnaHQgPSBjdXJyX2ZyYW1lX2hlYWRlcl8uZnJhbWVfaGVpZ2h0OwotICAgICAgcmVmX3Nsb3Quc3Vic2FtcGxpbmdfeCA9IGN1cnJfZnJhbWVfaGVhZGVyXy5zdWJzYW1wbGluZ194OwotICAgICAgcmVmX3Nsb3Quc3Vic2FtcGxpbmdfeSA9IGN1cnJfZnJhbWVfaGVhZGVyXy5zdWJzYW1wbGluZ195OwotICAgICAgcmVmX3Nsb3QuYml0X2RlcHRoID0gY3Vycl9mcmFtZV9oZWFkZXJfLmJpdF9kZXB0aDsKLQotICAgICAgcmVmX3Nsb3QucHJvZmlsZSA9IGN1cnJfZnJhbWVfaGVhZGVyXy5wcm9maWxlOwotICAgICAgcmVmX3Nsb3QuY29sb3Jfc3BhY2UgPSBjdXJyX2ZyYW1lX2hlYWRlcl8uY29sb3Jfc3BhY2U7Ci0gICAgICBjb250ZXh0Xy5VcGRhdGVSZWZTbG90KGksIHJlZl9zbG90KTsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNGM1NTcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDM1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW1wbGVtZW50YXRpb24gb2YgYSBWUDkgYml0c3RyZWFtIHBhcnNlci4gVGhlIG1haW4KLS8vIHB1cnBvc2Ugb2YgdGhpcyBwYXJzZXIgaXMgdG8gc3VwcG9ydCBoYXJkd2FyZSBkZWNvZGUgYWNjZWxlcmF0aW9uLiBTb21lCi0vLyBhY2NlbGVyYXRvcnMsIGUuZy4gbGlidmEgd2hpY2ggaW1wbGVtZW50cyBWQS1BUEksIHJlcXVpcmUgdGhlIGNhbGxlcgotLy8gKGNocm9tZSkgdG8gZmVlZCB0aGVtIHBhcnNlZCBWUDkgZnJhbWUgaGVhZGVyLgotLy8KLS8vIFNlZSBtZWRpYTo6VlA5RGVjb2RlciBmb3IgZXhhbXBsZSB1c2FnZS4KLS8vCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA5X1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvd2Vha19wdHIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jb25zdCBpbnQga1ZwOU1heFByb2ZpbGUgPSA0OwotY29uc3QgaW50IGtWcDlOdW1SZWZGcmFtZXNMb2cyID0gMzsKLWNvbnN0IHNpemVfdCBrVnA5TnVtUmVmRnJhbWVzID0gMSA8PCBrVnA5TnVtUmVmRnJhbWVzTG9nMjsKLWNvbnN0IHVpbnQ4X3Qga1ZwOU1heFByb2IgPSAyNTU7Ci1jb25zdCBzaXplX3Qga1ZwOU51bVJlZnNQZXJGcmFtZSA9IDM7Ci1jb25zdCBzaXplX3Qga1ZwOU51bUZyYW1lQ29udGV4dHNMb2cyID0gMjsKLWNvbnN0IHNpemVfdCBrVnA5TnVtRnJhbWVDb250ZXh0cyA9IDEgPDwga1ZwOU51bUZyYW1lQ29udGV4dHNMb2cyOwotCi11c2luZyBWcDlQcm9iID0gdWludDhfdDsKLQotZW51bSBjbGFzcyBWcDlDb2xvclNwYWNlIHsKLSAgVU5LTk9XTiA9IDAsCi0gIEJUXzYwMSA9IDEsCi0gIEJUXzcwOSA9IDIsCi0gIFNNUFRFXzE3MCA9IDMsCi0gIFNNUFRFXzI0MCA9IDQsCi0gIEJUXzIwMjAgPSA1LAotICBSRVNFUlZFRCA9IDYsCi0gIFNSR0IgPSA3LAotfTsKLQotZW51bSBWcDlJbnRlcnBvbGF0aW9uRmlsdGVyIHsKLSAgRUlHSFRUQVAgPSAwLAotICBFSUdIVFRBUF9TTU9PVEggPSAxLAotICBFSUdIVFRBUF9TSEFSUCA9IDIsCi0gIEJJTElORUFSID0gMywKLSAgU1dJVENIQUJMRSA9IDQsCi19OwotCi1lbnVtIFZwOVJlZlR5cGUgewotICBWUDlfRlJBTUVfSU5UUkEgPSAwLAotICBWUDlfRlJBTUVfTEFTVCA9IDEsCi0gIFZQOV9GUkFNRV9HT0xERU4gPSAyLAotICBWUDlfRlJBTUVfQUxUUkVGID0gMywKLSAgVlA5X0ZSQU1FX01BWCA9IDQsCi19OwotCi1lbnVtIFZwOVJlZmVyZW5jZU1vZGUgewotICBTSU5HTEVfUkVGRVJFTkNFID0gMCwKLSAgQ09NUE9VTkRfUkVGRVJFTkNFID0gMSwKLSAgUkVGRVJFTkNFX01PREVfU0VMRUNUID0gMiwKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVnA5U2VnbWVudGF0aW9uUGFyYW1zIHsKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtU2VnbWVudHMgPSA4OwotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1UcmVlUHJvYnMgPSBrTnVtU2VnbWVudHMgLSAxOwotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1QcmVkaWN0aW9uUHJvYnMgPSAzOwotICBlbnVtIFNlZ21lbnRMZXZlbEZlYXR1cmUgewotICAgIFNFR19MVkxfQUxUX1EgPSAwLAotICAgIFNFR19MVkxfQUxUX0xGID0gMSwKLSAgICBTRUdfTFZMX1JFRl9GUkFNRSA9IDIsCi0gICAgU0VHX0xWTF9TS0lQID0gMywKLSAgICBTRUdfTFZMX01BWAotICB9OwotCi0gIGJvb2wgZW5hYmxlZDsKLQotICBib29sIHVwZGF0ZV9tYXA7Ci0gIHVpbnQ4X3QgdHJlZV9wcm9ic1trTnVtVHJlZVByb2JzXTsKLSAgYm9vbCB0ZW1wb3JhbF91cGRhdGU7Ci0gIHVpbnQ4X3QgcHJlZF9wcm9ic1trTnVtUHJlZGljdGlvblByb2JzXTsKLQotICBib29sIHVwZGF0ZV9kYXRhOwotICBib29sIGFic19vcl9kZWx0YV91cGRhdGU7Ci0gIGJvb2wgZmVhdHVyZV9lbmFibGVkW2tOdW1TZWdtZW50c11bU0VHX0xWTF9NQVhdOwotICBpbnQxNl90IGZlYXR1cmVfZGF0YVtrTnVtU2VnbWVudHNdW1NFR19MVkxfTUFYXTsKLQotICBpbnQxNl90IHlfZGVxdWFudFtrTnVtU2VnbWVudHNdWzJdOwotICBpbnQxNl90IHV2X2RlcXVhbnRba051bVNlZ21lbnRzXVsyXTsKLQotICBib29sIEZlYXR1cmVFbmFibGVkKHNpemVfdCBzZWdfaWQsIFNlZ21lbnRMZXZlbEZlYXR1cmUgZmVhdHVyZSkgY29uc3QgewotICAgIHJldHVybiBmZWF0dXJlX2VuYWJsZWRbc2VnX2lkXVtmZWF0dXJlXTsKLSAgfQotCi0gIGludDE2X3QgRmVhdHVyZURhdGEoc2l6ZV90IHNlZ19pZCwgU2VnbWVudExldmVsRmVhdHVyZSBmZWF0dXJlKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZlYXR1cmVfZGF0YVtzZWdfaWRdW2ZlYXR1cmVdOwotICB9Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZwOUxvb3BGaWx0ZXJQYXJhbXMgewotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1Nb2RlRGVsdGFzID0gMjsKLQotICB1aW50OF90IGxldmVsOwotICB1aW50OF90IHNoYXJwbmVzczsKLQotICBib29sIGRlbHRhX2VuYWJsZWQ7Ci0gIGJvb2wgZGVsdGFfdXBkYXRlOwotICBib29sIHVwZGF0ZV9yZWZfZGVsdGFzW1ZQOV9GUkFNRV9NQVhdOwotICBpbnQ4X3QgcmVmX2RlbHRhc1tWUDlfRlJBTUVfTUFYXTsKLSAgYm9vbCB1cGRhdGVfbW9kZV9kZWx0YXNba051bU1vZGVEZWx0YXNdOwotICBpbnQ4X3QgbW9kZV9kZWx0YXNba051bU1vZGVEZWx0YXNdOwotCi0gIC8vIENhbGN1bGF0ZWQgZnJvbSBhYm92ZSBmaWVsZHMuCi0gIHVpbnQ4X3QgbHZsW1ZwOVNlZ21lbnRhdGlvblBhcmFtczo6a051bVNlZ21lbnRzXVtWUDlfRlJBTUVfTUFYXQotICAgICAgICAgICAgIFtrTnVtTW9kZURlbHRhc107Ci19OwotCi0vLyBNZW1iZXJzIG9mIFZwOUZyYW1lSGVhZGVyIHdpbGwgYmUgMC1pbml0aWFsaXplZCBieSBWcDlQYXJzZXI6OlBhcnNlTmV4dEZyYW1lLgotc3RydWN0IE1FRElBX0VYUE9SVCBWcDlRdWFudGl6YXRpb25QYXJhbXMgewotICBib29sIElzTG9zc2xlc3MoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJhc2VfcV9pZHggPT0gMCAmJiBkZWx0YV9xX3lfZGMgPT0gMCAmJiBkZWx0YV9xX3V2X2RjID09IDAgJiYKLSAgICAgICAgICAgZGVsdGFfcV91dl9hYyA9PSAwOwotICB9Ci0KLSAgdWludDhfdCBiYXNlX3FfaWR4OwotICBpbnQ4X3QgZGVsdGFfcV95X2RjOwotICBpbnQ4X3QgZGVsdGFfcV91dl9kYzsKLSAgaW50OF90IGRlbHRhX3FfdXZfYWM7Ci19OwotCi0vLyBFbnRyb3B5IGNvbnRleHQgZm9yIGZyYW1lIHBhcnNpbmcKLXN0cnVjdCBNRURJQV9FWFBPUlQgVnA5RnJhbWVDb250ZXh0IHsKLSAgYm9vbCBJc1ZhbGlkKCkgY29uc3Q7Ci0KLSAgVnA5UHJvYiB0eF9wcm9ic184eDhbMl1bMV07Ci0gIFZwOVByb2IgdHhfcHJvYnNfMTZ4MTZbMl1bMl07Ci0gIFZwOVByb2IgdHhfcHJvYnNfMzJ4MzJbMl1bM107Ci0KLSAgVnA5UHJvYiBjb2VmX3Byb2JzWzRdWzJdWzJdWzZdWzZdWzNdOwotICBWcDlQcm9iIHNraXBfcHJvYlszXTsKLSAgVnA5UHJvYiBpbnRlcl9tb2RlX3Byb2JzWzddWzNdOwotICBWcDlQcm9iIGludGVycF9maWx0ZXJfcHJvYnNbNF1bMl07Ci0gIFZwOVByb2IgaXNfaW50ZXJfcHJvYls0XTsKLQotICBWcDlQcm9iIGNvbXBfbW9kZV9wcm9iWzVdOwotICBWcDlQcm9iIHNpbmdsZV9yZWZfcHJvYls1XVsyXTsKLSAgVnA5UHJvYiBjb21wX3JlZl9wcm9iWzVdOwotCi0gIFZwOVByb2IgeV9tb2RlX3Byb2JzWzRdWzldOwotICBWcDlQcm9iIHV2X21vZGVfcHJvYnNbMTBdWzldOwotICBWcDlQcm9iIHBhcnRpdGlvbl9wcm9ic1sxNl1bM107Ci0KLSAgVnA5UHJvYiBtdl9qb2ludF9wcm9ic1szXTsKLSAgVnA5UHJvYiBtdl9zaWduX3Byb2JbMl07Ci0gIFZwOVByb2IgbXZfY2xhc3NfcHJvYnNbMl1bMTBdOwotICBWcDlQcm9iIG12X2NsYXNzMF9iaXRfcHJvYlsyXTsKLSAgVnA5UHJvYiBtdl9iaXRzX3Byb2JbMl1bMTBdOwotICBWcDlQcm9iIG12X2NsYXNzMF9mcl9wcm9ic1syXVsyXVszXTsKLSAgVnA5UHJvYiBtdl9mcl9wcm9ic1syXVszXTsKLSAgVnA5UHJvYiBtdl9jbGFzczBfaHBfcHJvYlsyXTsKLSAgVnA5UHJvYiBtdl9ocF9wcm9iWzJdOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBWcDlDb21wcmVzc2VkSGVhZGVyIHsKLSAgZW51bSBWcDlUeE1vZGUgewotICAgIE9OTFlfNFg0ID0gMCwKLSAgICBBTExPV184WDggPSAxLAotICAgIEFMTE9XXzE2WDE2ID0gMiwKLSAgICBBTExPV18zMlgzMiA9IDMsCi0gICAgVFhfTU9ERV9TRUxFQ1QgPSA0LAotICAgIFRYX01PREVTID0gNSwKLSAgfTsKLQotICBWcDlUeE1vZGUgdHhfbW9kZTsKLSAgVnA5UmVmZXJlbmNlTW9kZSByZWZlcmVuY2VfbW9kZTsKLX07Ci0KLS8vIFZQOSBmcmFtZSBoZWFkZXIuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZwOUZyYW1lSGVhZGVyIHsKLSAgZW51bSBGcmFtZVR5cGUgewotICAgIEtFWUZSQU1FID0gMCwKLSAgICBJTlRFUkZSQU1FID0gMSwKLSAgfTsKLQotICBib29sIElzS2V5ZnJhbWUoKSBjb25zdDsKLSAgYm9vbCBJc0ludHJhKCkgY29uc3Q7Ci0gIGJvb2wgUmVmcmVzaEZsYWcoc2l6ZV90IGkpIGNvbnN0IHsKLSAgICByZXR1cm4gISEocmVmcmVzaF9mcmFtZV9mbGFncyAmICgxdSA8PCBpKSk7Ci0gIH0KLQotICB1aW50OF90IHByb2ZpbGU7Ci0KLSAgYm9vbCBzaG93X2V4aXN0aW5nX2ZyYW1lOwotICB1aW50OF90IGZyYW1lX3RvX3Nob3dfbWFwX2lkeDsKLQotICBGcmFtZVR5cGUgZnJhbWVfdHlwZTsKLQotICBib29sIHNob3dfZnJhbWU7Ci0gIGJvb2wgZXJyb3JfcmVzaWxpZW50X21vZGU7Ci0KLSAgdWludDhfdCBiaXRfZGVwdGg7Ci0gIFZwOUNvbG9yU3BhY2UgY29sb3Jfc3BhY2U7Ci0gIGJvb2wgY29sb3JfcmFuZ2U7Ci0gIHVpbnQ4X3Qgc3Vic2FtcGxpbmdfeDsKLSAgdWludDhfdCBzdWJzYW1wbGluZ195OwotCi0gIC8vIFRoZSByYW5nZSBvZiBmcmFtZV93aWR0aCBhbmQgZnJhbWVfaGVpZ2h0IGlzIDEuLjJeMTYuCi0gIHVpbnQzMl90IGZyYW1lX3dpZHRoOwotICB1aW50MzJfdCBmcmFtZV9oZWlnaHQ7Ci0gIHVpbnQzMl90IHJlbmRlcl93aWR0aDsKLSAgdWludDMyX3QgcmVuZGVyX2hlaWdodDsKLQotICBib29sIGludHJhX29ubHk7Ci0gIHVpbnQ4X3QgcmVzZXRfZnJhbWVfY29udGV4dDsKLSAgdWludDhfdCByZWZyZXNoX2ZyYW1lX2ZsYWdzOwotICB1aW50OF90IHJlZl9mcmFtZV9pZHhba1ZwOU51bVJlZnNQZXJGcmFtZV07Ci0gIGJvb2wgcmVmX2ZyYW1lX3NpZ25fYmlhc1tWcDlSZWZUeXBlOjpWUDlfRlJBTUVfTUFYXTsKLSAgYm9vbCBhbGxvd19oaWdoX3ByZWNpc2lvbl9tdjsKLSAgVnA5SW50ZXJwb2xhdGlvbkZpbHRlciBpbnRlcnBvbGF0aW9uX2ZpbHRlcjsKLQotICBib29sIHJlZnJlc2hfZnJhbWVfY29udGV4dDsKLSAgYm9vbCBmcmFtZV9wYXJhbGxlbF9kZWNvZGluZ19tb2RlOwotICB1aW50OF90IGZyYW1lX2NvbnRleHRfaWR4OwotICAvLyB8ZnJhbWVfY29udGV4dF9pZHhfdG9fc2F2ZV9wcm9ic3wgaXMgdG8gYmUgdXNlZCBieSBzYXZlX3Byb2JzKCkgb25seSwgYW5kCi0gIC8vIHxmcmFtZV9jb250ZXh0X2lkeHwgb3RoZXJ3aXNlLgotICB1aW50OF90IGZyYW1lX2NvbnRleHRfaWR4X3RvX3NhdmVfcHJvYnM7Ci0KLSAgVnA5UXVhbnRpemF0aW9uUGFyYW1zIHF1YW50X3BhcmFtczsKLQotICB1aW50OF90IHRpbGVfY29sc19sb2cyOwotICB1aW50OF90IHRpbGVfcm93c19sb2cyOwotCi0gIC8vIFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBmcmFtZSBkYXRhLiBJdCBpcyBhIHJlc3BvbnNpYmlsaXR5IG9mIHRoZQotICAvLyBjbGllbnQgb2YgdGhlIFZwOVBhcnNlciB0byBtYWludGFpbiB2YWxpZGl0eSBvZiB0aGlzIGRhdGEgd2hpbGUgaXQgaXMKLSAgLy8gYmVpbmcgdXNlZCBvdXRzaWRlIG9mIHRoYXQgY2xhc3MuCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGE7Ci0KLSAgLy8gU2l6ZSBvZiB8ZGF0YXwgaW4gYnl0ZXMuCi0gIHNpemVfdCBmcmFtZV9zaXplOwotCi0gIC8vIFNpemUgb2YgY29tcHJlc3NlZCBoZWFkZXIgaW4gYnl0ZXMuCi0gIHNpemVfdCBoZWFkZXJfc2l6ZV9pbl9ieXRlczsKLQotICAvLyBTaXplIG9mIHVuY29tcHJlc3NlZCBoZWFkZXIgaW4gYnl0ZXMuCi0gIHNpemVfdCB1bmNvbXByZXNzZWRfaGVhZGVyX3NpemU7Ci0KLSAgVnA5Q29tcHJlc3NlZEhlYWRlciBjb21wcmVzc2VkX2hlYWRlcjsKLSAgLy8gSW5pdGlhbCBmcmFtZSBlbnRyb3B5IGNvbnRleHQgYWZ0ZXIgbG9hZF9wcm9iczIoZnJhbWVfY29udGV4dF9pZHgpLgotICBWcDlGcmFtZUNvbnRleHQgaW5pdGlhbF9mcmFtZV9jb250ZXh0OwotICAvLyBDdXJyZW50IGZyYW1lIGVudHJvcHkgY29udGV4dCBhZnRlciBoZWFkZXIgcGFyc2luZy4KLSAgVnA5RnJhbWVDb250ZXh0IGZyYW1lX2NvbnRleHQ7Ci19OwotCi0vLyBBIHBhcnNlciBmb3IgVlA5IGJpdHN0cmVhbS4KLWNsYXNzIE1FRElBX0VYUE9SVCBWcDlQYXJzZXIgewotIHB1YmxpYzoKLSAgLy8gSWYgY29udGV4dCB1cGRhdGUgaXMgbmVlZGVkIGFmdGVyIGRlY29kaW5nIGEgZnJhbWUsIHRoZSBjbGllbnQgbXVzdAotICAvLyBleGVjdXRlIHRoaXMgY2FsbGJhY2ssIHBhc3NpbmcgdGhlIHVwZGF0ZWQgY29udGV4dCBzdGF0ZS4KLSAgdXNpbmcgQ29udGV4dFJlZnJlc2hDYWxsYmFjayA9IGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgVnA5RnJhbWVDb250ZXh0Jik+OwotCi0gIC8vIFBhcnNlTmV4dEZyYW1lKCkgcmV0dXJuIHZhbHVlcy4gU2VlIGRvY3VtZW50YXRpb24gZm9yIFBhcnNlTmV4dEZyYW1lKCkuCi0gIGVudW0gUmVzdWx0IHsKLSAgICBrT2ssCi0gICAga0ludmFsaWRTdHJlYW0sCi0gICAga0VPU3RyZWFtLAotICAgIGtBd2FpdGluZ1JlZnJlc2gsCi0gIH07Ci0KLSAgLy8gVGhlIHBhcnNpbmcgY29udGV4dCB0byBrZWVwIHRyYWNrIG9mIHJlZmVyZW5jZXMuCi0gIHN0cnVjdCBSZWZlcmVuY2VTbG90IHsKLSAgICBib29sIGluaXRpYWxpemVkOwotICAgIHVpbnQzMl90IGZyYW1lX3dpZHRoOwotICAgIHVpbnQzMl90IGZyYW1lX2hlaWdodDsKLSAgICB1aW50OF90IHN1YnNhbXBsaW5nX3g7Ci0gICAgdWludDhfdCBzdWJzYW1wbGluZ195OwotICAgIHVpbnQ4X3QgYml0X2RlcHRoOwotCi0gICAgLy8gTW9yZSBmaWVsZHMgZm9yIGNvbnNpc3RlbmN5IGNoZWNraW5nLgotICAgIHVpbnQ4X3QgcHJvZmlsZTsKLSAgICBWcDlDb2xvclNwYWNlIGNvbG9yX3NwYWNlOwotICB9OwotCi0gIC8vIFRoZSBwYXJzaW5nIGNvbnRleHQgdGhhdCBwZXJzaXN0cyBhY3Jvc3MgZnJhbWVzLgotICBjbGFzcyBDb250ZXh0IHsKLSAgIHB1YmxpYzoKLSAgICBjbGFzcyBWcDlGcmFtZUNvbnRleHRNYW5hZ2VyIHsKLSAgICAgcHVibGljOgotICAgICAgVnA5RnJhbWVDb250ZXh0TWFuYWdlcigpOwotICAgICAgflZwOUZyYW1lQ29udGV4dE1hbmFnZXIoKTsKLSAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBpbml0aWFsaXplZF87IH0KLSAgICAgIGJvb2wgbmVlZHNfY2xpZW50X3VwZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG5lZWRzX2NsaWVudF91cGRhdGVfOyB9Ci0gICAgICBjb25zdCBWcDlGcmFtZUNvbnRleHQmIGZyYW1lX2NvbnRleHQoKSBjb25zdDsKLQotICAgICAgLy8gUmVzZXRzIHRvIHVuaW5pdGlhbGl6ZWQgc3RhdGUuCi0gICAgICB2b2lkIFJlc2V0KCk7Ci0KLSAgICAgIC8vIE1hcmtzIHRoaXMgY29udGV4dCBhcyByZXF1aXJpbmcgYW4gdXBkYXRlIGZyb20gcGFyc2VyJ3MgY2xpZW50LgotICAgICAgdm9pZCBTZXROZWVkc0NsaWVudFVwZGF0ZSgpOwotCi0gICAgICAvLyBVcGRhdGVzIGZyYW1lIGNvbnRleHQuCi0gICAgICB2b2lkIFVwZGF0ZShjb25zdCBWcDlGcmFtZUNvbnRleHQmIGZyYW1lX2NvbnRleHQpOwotCi0gICAgICAvLyBSZXR1cm5zIGEgY2FsbGJhY2sgdG8gdXBkYXRlIGZyYW1lIGNvbnRleHQgYXQgYSBsYXRlciB0aW1lIHdpdGguCi0gICAgICBDb250ZXh0UmVmcmVzaENhbGxiYWNrIEdldFVwZGF0ZUNiKCk7Ci0KLSAgICAgcHJpdmF0ZToKLSAgICAgIC8vIFVwZGF0ZXMgZnJhbWUgY29udGV4dCBmcm9tIHBhcnNlcidzIGNsaWVudC4KLSAgICAgIHZvaWQgVXBkYXRlRnJvbUNsaWVudChjb25zdCBWcDlGcmFtZUNvbnRleHQmIGZyYW1lX2NvbnRleHQpOwotCi0gICAgICBib29sIGluaXRpYWxpemVkXyA9IGZhbHNlOwotICAgICAgYm9vbCBuZWVkc19jbGllbnRfdXBkYXRlXyA9IGZhbHNlOwotICAgICAgVnA5RnJhbWVDb250ZXh0IGZyYW1lX2NvbnRleHRfOwotCi0gICAgICBiYXNlOjpXZWFrUHRyRmFjdG9yeTxWcDlGcmFtZUNvbnRleHRNYW5hZ2VyPiB3ZWFrX3B0cl9mYWN0b3J5XzsKLSAgICB9OwotCi0gICAgdm9pZCBSZXNldCgpOwotCi0gICAgLy8gTWFyayB8ZnJhbWVfY29udGV4dF9pZHh8IGFzIHJlcXVpcmluZyB1cGRhdGUgZnJvbSB0aGUgY2xpZW50LgotICAgIHZvaWQgTWFya0ZyYW1lQ29udGV4dEZvclVwZGF0ZShzaXplX3QgZnJhbWVfY29udGV4dF9pZHgpOwotCi0gICAgLy8gVXBkYXRlIGZyYW1lIGNvbnRleHQgYXQgfGZyYW1lX2NvbnRleHRfaWR4fCB3aXRoIHRoZSBjb250ZW50cyBvZgotICAgIC8vIHxmcmFtZV9jb250ZXh0fC4KLSAgICB2b2lkIFVwZGF0ZUZyYW1lQ29udGV4dChzaXplX3QgZnJhbWVfY29udGV4dF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVnA5RnJhbWVDb250ZXh0JiBmcmFtZV9jb250ZXh0KTsKLQotICAgIC8vIFJldHVybiBSZWZlcmVuY2VTbG90IGZvciBmcmFtZSBhdCB8cmVmX2lkeHwuCi0gICAgY29uc3QgUmVmZXJlbmNlU2xvdCYgR2V0UmVmU2xvdChzaXplX3QgcmVmX2lkeCkgY29uc3Q7Ci0KLSAgICAvLyBVcGRhdGUgY29udGVudHMgb2YgUmVmZXJlbmNlU2xvdCBhdCB8cmVmX2lkeHwgd2l0aCB0aGUgY29udGVudHMgb2YKLSAgICAvLyB8cmVmX3Nsb3R8LgotICAgIHZvaWQgVXBkYXRlUmVmU2xvdChzaXplX3QgcmVmX2lkeCwgY29uc3QgUmVmZXJlbmNlU2xvdCYgcmVmX3Nsb3QpOwotCi0gICAgY29uc3QgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBzZWdtZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBzZWdtZW50YXRpb25fOyB9Ci0KLSAgICBjb25zdCBWcDlMb29wRmlsdGVyUGFyYW1zJiBsb29wX2ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGxvb3BfZmlsdGVyXzsgfQotCi0gICBwcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFZwOVBhcnNlcjsKLQotICAgIC8vIFNlZ21lbnRhdGlvbiBhbmQgbG9vcCBmaWx0ZXIgc3RhdGUuCi0gICAgVnA5U2VnbWVudGF0aW9uUGFyYW1zIHNlZ21lbnRhdGlvbl87Ci0gICAgVnA5TG9vcEZpbHRlclBhcmFtcyBsb29wX2ZpbHRlcl87Ci0KLSAgICAvLyBGcmFtZSByZWZlcmVuY2VzLgotICAgIFJlZmVyZW5jZVNsb3QgcmVmX3Nsb3RzX1trVnA5TnVtUmVmRnJhbWVzXTsKLQotICAgIFZwOUZyYW1lQ29udGV4dE1hbmFnZXIgZnJhbWVfY29udGV4dF9tYW5hZ2Vyc19ba1ZwOU51bUZyYW1lQ29udGV4dHNdOwotICB9OwotCi0gIC8vIFRoZSBjb25zdHJ1Y3Rvci4gU2VlIFBhcnNlTmV4dEZyYW1lKCkgZm9yIGNvbW1lbnRzIGZvcgotICAvLyB8cGFyc2luZ19jb21wcmVzc2VkX2hlYWRlcnwuCi0gIGV4cGxpY2l0IFZwOVBhcnNlcihib29sIHBhcnNpbmdfY29tcHJlc3NlZF9oZWFkZXIpOwotICB+VnA5UGFyc2VyKCk7Ci0KLSAgLy8gU2V0IGEgbmV3IHN0cmVhbSBidWZmZXIgdG8gcmVhZCBmcm9tLCBzdGFydGluZyBhdCB8c3RyZWFtfCBhbmQgb2Ygc2l6ZQotICAvLyB8c3RyZWFtX3NpemV8IGluIGJ5dGVzLiB8c3RyZWFtfCBtdXN0IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzaW5nbGUKLSAgLy8gZnJhbWUgb3IgYSBzaW5nbGUgc3VwZXJmcmFtZSwgaXMgb3duZWQgYnkgY2FsbGVyIGFuZCBtdXN0IHJlbWFpbiB2YWxpZAotICAvLyB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFNldFN0cmVhbSgpLgotICB2b2lkIFNldFN0cmVhbShjb25zdCB1aW50OF90KiBzdHJlYW0sIG9mZl90IHN0cmVhbV9zaXplKTsKLQotICAvLyBQYXJzZSB0aGUgbmV4dCBmcmFtZSBpbiB0aGUgY3VycmVudCBzdHJlYW0gYnVmZmVyLCBmaWxsaW5nIHxmaGRyfCB3aXRoCi0gIC8vIHRoZSBwYXJzZWQgZnJhbWUgaGVhZGVyIGFuZCB1cGRhdGluZyBjdXJyZW50IHNlZ21lbnRhdGlvbiBhbmQgbG9vcCBmaWx0ZXIKLSAgLy8gc3RhdGUuCi0gIC8vIFJldHVybiBrT2sgaWYgYSBmcmFtZSBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gcGFyc2VkLAotICAvLyAgICAgICAga0VPU3RyZWFtIGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSBpbiB0aGUgY3VycmVudCBzdHJlYW0gYnVmZmVyLAotICAvLyAgICAgICAga0F3YWl0aW5nUmVmcmVzaCBpZiB0aGlzIGZyYW1lIGF3YWl0aW5nIGZyYW1lIGNvbnRleHQgdXBkYXRlLCBvcgotICAvLyAgICAgICAga0ludmFsaWRTdHJlYW0gb24gZXJyb3IuCi0gIFJlc3VsdCBQYXJzZU5leHRGcmFtZShWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0KLSAgLy8gUmV0dXJuIGN1cnJlbnQgcGFyc2luZyBjb250ZXh0LgotICBjb25zdCBDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29udGV4dF87IH0KLQotICAvLyBSZXR1cm4gYSBDb250ZXh0UmVmcmVzaENhbGxiYWNrLCB3aGljaCwgaWYgbm90IG51bGwsIGhhcyB0byBiZSBjYWxsZWQgd2l0aAotICAvLyB0aGUgbmV3IGNvbnRleHQgc3RhdGUgYWZ0ZXIgdGhlIGZyYW1lIGFzc29jaWF0ZWQgd2l0aCB8ZnJhbWVfY29udGV4dF9pZHh8Ci0gIC8vIGlzIGRlY29kZWQuCi0gIENvbnRleHRSZWZyZXNoQ2FsbGJhY2sgR2V0Q29udGV4dFJlZnJlc2hDYihzaXplX3QgZnJhbWVfY29udGV4dF9pZHgpOwotCi0gIC8vIENsZWFyIHBhcnNlciBzdGF0ZSBhbmQgcmV0dXJuIHRvIGFuIGluaXRpYWxpemVkIHN0YXRlLgotICB2b2lkIFJlc2V0KCk7Ci0KLSBwcml2YXRlOgotICAvLyBTdG9yZXMgc3RhcnQgcG9pbnRlciBhbmQgc2l6ZSBvZiBlYWNoIGZyYW1lIHdpdGhpbiB0aGUgY3VycmVudCBzdXBlcmZyYW1lLgotICBzdHJ1Y3QgRnJhbWVJbmZvIHsKLSAgICBGcmFtZUluZm8oKSA9IGRlZmF1bHQ7Ci0gICAgRnJhbWVJbmZvKGNvbnN0IHVpbnQ4X3QqIHB0ciwgb2ZmX3Qgc2l6ZSk7Ci0gICAgYm9vbCBJc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gcHRyICE9IE5VTEw7IH0KLSAgICB2b2lkIFJlc2V0KCkgeyBwdHIgPSBOVUxMOyB9Ci0KLSAgICAvLyBTdGFydGluZyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KLSAgICBjb25zdCB1aW50OF90KiBwdHIgPSBOVUxMOwotCi0gICAgLy8gU2l6ZSBvZiB0aGUgZnJhbWUgaW4gYnl0ZXMuCi0gICAgb2ZmX3Qgc2l6ZSA9IDA7Ci0gIH07Ci0KLSAgc3RkOjpkZXF1ZTxGcmFtZUluZm8+IFBhcnNlU3VwZXJmcmFtZSgpOwotCi0gIHNpemVfdCBHZXRRSW5kZXgoY29uc3QgVnA5UXVhbnRpemF0aW9uUGFyYW1zJiBxdWFudCwgc2l6ZV90IHNlZ2lkKSBjb25zdDsKLSAgdm9pZCBTZXR1cFNlZ21lbnRhdGlvbkRlcXVhbnQoKTsKLSAgdm9pZCBTZXR1cExvb3BGaWx0ZXIoKTsKLSAgdm9pZCBVcGRhdGVTbG90cygpOwotCi0gIC8vIEN1cnJlbnQgYWRkcmVzcyBpbiB0aGUgYml0c3RyZWFtIGJ1ZmZlci4KLSAgY29uc3QgdWludDhfdCogc3RyZWFtXzsKLQotICAvLyBSZW1haW5pbmcgYnl0ZXMgaW4gc3RyZWFtXy4KLSAgb2ZmX3QgYnl0ZXNfbGVmdF87Ci0KLSAgYm9vbCBwYXJzaW5nX2NvbXByZXNzZWRfaGVhZGVyXzsKLQotICAvLyBGcmFtZUluZm8gZm9yIHRoZSByZW1haW5pbmcgZnJhbWVzIGluIHRoZSBjdXJyZW50IHN1cGVyZnJhbWUgdG8gYmUgcGFyc2VkLgotICBzdGQ6OmRlcXVlPEZyYW1lSW5mbz4gZnJhbWVzXzsKLQotICBDb250ZXh0IGNvbnRleHRfOwotCi0gIEZyYW1lSW5mbyBjdXJyX2ZyYW1lX2luZm9fOwotICBWcDlGcmFtZUhlYWRlciBjdXJyX2ZyYW1lX2hlYWRlcl87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZwOVBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19WUDlfUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyX2Z1enplcnRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyX2Z1enplcnRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYWY3N2QuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3BhcnNlcl9mdXp6ZXJ0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaXZmX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotLy8gRW50cnkgcG9pbnQgZm9yIExpYkZ1enplci4KLWV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpIHsKLSAgY29uc3QgdWludDhfdCogaXZmX3BheWxvYWQgPSBOVUxMOwotICBtZWRpYTo6SXZmUGFyc2VyIGl2Zl9wYXJzZXI7Ci0gIG1lZGlhOjpJdmZGaWxlSGVhZGVyIGl2Zl9maWxlX2hlYWRlcjsKLSAgbWVkaWE6Okl2ZkZyYW1lSGVhZGVyIGl2Zl9mcmFtZV9oZWFkZXI7Ci0KLSAgaWYgKCFpdmZfcGFyc2VyLkluaXRpYWxpemUoZGF0YSwgc2l6ZSwgJml2Zl9maWxlX2hlYWRlcikpIHJldHVybiAwOwotCi0gIC8vIFBhcnNlIHVudGlsIHRoZSBlbmQgb2Ygc3RyZWFtL3Vuc3VwcG9ydGVkIHN0cmVhbS9lcnJvciBpbiBzdHJlYW0gaXMgZm91bmQuCi0gIHdoaWxlIChpdmZfcGFyc2VyLlBhcnNlTmV4dEZyYW1lKCZpdmZfZnJhbWVfaGVhZGVyLCAmaXZmX3BheWxvYWQpKSB7Ci0gICAgLy8gVE9ETyhrY3d1KTogZnV6emluZyB3aXRoIHBhcnNpbmdfY29tcHJlc3NlZF9oZWFkZXI9dHJ1ZS4KLSAgICBtZWRpYTo6VnA5UGFyc2VyIHZwOV9wYXJzZXIoZmFsc2UpOwotICAgIG1lZGlhOjpWcDlGcmFtZUhlYWRlciB2cDlfZnJhbWVfaGVhZGVyOwotICAgIHZwOV9wYXJzZXIuU2V0U3RyZWFtKGl2Zl9wYXlsb2FkLCBpdmZfZnJhbWVfaGVhZGVyLmZyYW1lX3NpemUpOwotICAgIHdoaWxlICh2cDlfcGFyc2VyLlBhcnNlTmV4dEZyYW1lKCZ2cDlfZnJhbWVfaGVhZGVyKSA9PQotICAgICAgICAgICBtZWRpYTo6VnA5UGFyc2VyOjprT2spIHsKLSAgICAgIC8vIFJlcGVhdCB1bnRpbCBhbGwgZnJhbWVzIHByb2Nlc3NlZC4KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGY1ZjYxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBGb3IgZWFjaCBzYW1wbGUgdnA5IHRlc3QgdmlkZW8sICRmaWxlbmFtZSwgdGhlcmUgaXMgYSBmaWxlIG9mIGdvbGRlbiB2YWx1ZQotLy8gb2YgZnJhbWUgZW50cm9weSwgbmFtZWQgJGZpbGVuYW1lLmNvbnRleHQuIFRoZXNlIHZhbHVlcyBhcmUgZHVtcGVkIGZyb20KLS8vIGxpYnZweC4KLS8vCi0vLyBUaGUgc3ludGF4IG9mIHRoZXNlIGNvbnRleHQgZHVtcCBpcyBkZXNjcmliZWQgYXMgZm9sbG93cy4gIEZvciBldmVyeQotLy8gZnJhbWUsIHRoZXJlIGFyZSBjb3JyZXNwb25kaW5nIGRhdGEgaW4gY29udGV4dCBmaWxlLAotLy8gMS4gW2luaXRpYWxdIFtjdXJyZW50XSBbc2hvdWxkX3VwZGF0ZT0wXSwgb3IKLS8vIDIuIFtpbml0aWFsXSBbY3VycmVudF0gW3Nob3VsZF91cGRhdGU9MV0gW3VwZGF0ZV0KLS8vIFRoZSBmaXJzdCB0d28gYXJlIGV4cGVjdGVkIGZyYW1lIGVudHJvcHksIGZoZHItPmluaXRpYWxfZnJhbWVfY29udGV4dCBhbmQKLS8vIGZoZHItPmZyYW1lX2NvbnRleHQuCi0vLyBJZiB8c2hvdWxkX3VwZGF0ZXwgaXMgdHJ1ZSwgaXQgZm9sbG93cyBieSB0aGUgZnJhbWUgY29udGV4dCB0byB1cGRhdGUuCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9maWxlcy9tZW1vcnlfbWFwcGVkX2ZpbGUuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2l2Zl9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFZwOVBhcnNlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7Ci0gICAgc3RyZWFtXy5yZXNldCgpOwotICAgIHZwOV9wYXJzZXJfLnJlc2V0KCk7Ci0gICAgY29udGV4dF9maWxlXy5DbG9zZSgpOwotICB9Ci0KLSAgdm9pZCBJbml0aWFsaXplKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBwYXJzaW5nX2NvbXByZXNzZWRfaGVhZGVyKSB7Ci0gICAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoID0gR2V0VGVzdERhdGFGaWxlUGF0aChmaWxlbmFtZSk7Ci0KLSAgICBzdHJlYW1fLnJlc2V0KG5ldyBiYXNlOjpNZW1vcnlNYXBwZWRGaWxlKCkpOwotICAgIEFTU0VSVF9UUlVFKHN0cmVhbV8tPkluaXRpYWxpemUoZmlsZV9wYXRoKSkKLSAgICAgICAgPDwgIkNvdWxkbid0IG9wZW4gc3RyZWFtIGZpbGU6ICIgPDwgZmlsZV9wYXRoLk1heWJlQXNBU0NJSSgpOwotCi0gICAgSXZmRmlsZUhlYWRlciBpdmZfZmlsZV9oZWFkZXI7Ci0gICAgQVNTRVJUX1RSVUUoaXZmX3BhcnNlcl8uSW5pdGlhbGl6ZShzdHJlYW1fLT5kYXRhKCksIHN0cmVhbV8tPmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml2Zl9maWxlX2hlYWRlcikpOwotICAgIEFTU0VSVF9FUShpdmZfZmlsZV9oZWFkZXIuZm91cmNjLCAweDMwMzk1MDU2dSk7ICAvLyBWUDkwCi0KLSAgICB2cDlfcGFyc2VyXy5yZXNldChuZXcgVnA5UGFyc2VyKHBhcnNpbmdfY29tcHJlc3NlZF9oZWFkZXIpKTsKLQotICAgIGlmIChwYXJzaW5nX2NvbXByZXNzZWRfaGVhZGVyKSB7Ci0gICAgICBiYXNlOjpGaWxlUGF0aCBjb250ZXh0X3BhdGggPSBHZXRUZXN0RGF0YUZpbGVQYXRoKGZpbGVuYW1lICsgIi5jb250ZXh0Iik7Ci0gICAgICBjb250ZXh0X2ZpbGVfLkluaXRpYWxpemUoY29udGV4dF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkZpbGU6OkZMQUdfT1BFTiB8IGJhc2U6OkZpbGU6OkZMQUdfUkVBRCk7Ci0gICAgICBBU1NFUlRfVFJVRShjb250ZXh0X2ZpbGVfLklzVmFsaWQoKSk7Ci0gICAgfQotICB9Ci0KLSAgYm9vbCBSZWFkU2hvdWxkQ29udGV4dFVwZGF0ZSgpIHsKLSAgICBjaGFyIHNob3VsZF91cGRhdGU7Ci0gICAgaW50IHJlYWRfbnVtID0gY29udGV4dF9maWxlXy5SZWFkQXRDdXJyZW50UG9zKCZzaG91bGRfdXBkYXRlLCAxKTsKLSAgICBDSEVDS19FUSgxLCByZWFkX251bSk7Ci0gICAgcmV0dXJuIHNob3VsZF91cGRhdGUgIT0gMDsKLSAgfQotCi0gIHZvaWQgUmVhZENvbnRleHQoVnA5RnJhbWVDb250ZXh0KiBmcmFtZV9jb250ZXh0KSB7Ci0gICAgQVNTRVJUX0VRKAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZigqZnJhbWVfY29udGV4dCkpLAotICAgICAgICBjb250ZXh0X2ZpbGVfLlJlYWRBdEN1cnJlbnRQb3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZnJhbWVfY29udGV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmZyYW1lX2NvbnRleHQpKSk7Ci0gIH0KLQotICBWcDlQYXJzZXI6OlJlc3VsdCBQYXJzZU5leHRGcmFtZShzdHJ1Y3QgVnA5RnJhbWVIZWFkZXIqIGZyYW1lX2hkcik7Ci0KLSAgY29uc3QgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBHZXRTZWdtZW50YXRpb24oKSBjb25zdCB7Ci0gICAgcmV0dXJuIHZwOV9wYXJzZXJfLT5jb250ZXh0KCkuc2VnbWVudGF0aW9uKCk7Ci0gIH0KLQotICBjb25zdCBWcDlMb29wRmlsdGVyUGFyYW1zJiBHZXRMb29wRmlsdGVyKCkgY29uc3QgewotICAgIHJldHVybiB2cDlfcGFyc2VyXy0+Y29udGV4dCgpLmxvb3BfZmlsdGVyKCk7Ci0gIH0KLQotICBWcDlQYXJzZXI6OkNvbnRleHRSZWZyZXNoQ2FsbGJhY2sgR2V0Q29udGV4dFJlZnJlc2hDYigKLSAgICAgIGNvbnN0IFZwOUZyYW1lSGVhZGVyJiBmcmFtZV9oZHIpIGNvbnN0IHsKLSAgICByZXR1cm4gdnA5X3BhcnNlcl8tPkdldENvbnRleHRSZWZyZXNoQ2IoZnJhbWVfaGRyLmZyYW1lX2NvbnRleHRfaWR4KTsKLSAgfQotCi0gIEl2ZlBhcnNlciBpdmZfcGFyc2VyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPGJhc2U6Ok1lbW9yeU1hcHBlZEZpbGU+IHN0cmVhbV87Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFZwOVBhcnNlcj4gdnA5X3BhcnNlcl87Ci0gIGJhc2U6OkZpbGUgY29udGV4dF9maWxlXzsKLX07Ci0KLVZwOVBhcnNlcjo6UmVzdWx0IFZwOVBhcnNlclRlc3Q6OlBhcnNlTmV4dEZyYW1lKFZwOUZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIHdoaWxlICgxKSB7Ci0gICAgVnA5UGFyc2VyOjpSZXN1bHQgcmVzID0gdnA5X3BhcnNlcl8tPlBhcnNlTmV4dEZyYW1lKGZoZHIpOwotICAgIGlmIChyZXMgPT0gVnA5UGFyc2VyOjprRU9TdHJlYW0pIHsKLSAgICAgIEl2ZkZyYW1lSGVhZGVyIGl2Zl9mcmFtZV9oZWFkZXI7Ci0gICAgICBjb25zdCB1aW50OF90KiBpdmZfcGF5bG9hZDsKLQotICAgICAgaWYgKCFpdmZfcGFyc2VyXy5QYXJzZU5leHRGcmFtZSgmaXZmX2ZyYW1lX2hlYWRlciwgJml2Zl9wYXlsb2FkKSkKLSAgICAgICAgcmV0dXJuIFZwOVBhcnNlcjo6a0VPU3RyZWFtOwotCi0gICAgICB2cDlfcGFyc2VyXy0+U2V0U3RyZWFtKGl2Zl9wYXlsb2FkLCBpdmZfZnJhbWVfaGVhZGVyLmZyYW1lX3NpemUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKLSAgfQotfQotCi1URVNUX0YoVnA5UGFyc2VyVGVzdCwgU3RyZWFtRmlsZVBhcnNpbmdXaXRob3V0Q29tcHJlc3NlZEhlYWRlcikgewotICBJbml0aWFsaXplKCJ0ZXN0LTI1ZnBzLnZwOSIsIGZhbHNlKTsKLQotICAvLyBOdW1iZXIgb2YgZnJhbWVzIGluIHRoZSB0ZXN0IHN0cmVhbSB0byBiZSBwYXJzZWQuCi0gIGNvbnN0IGludCBudW1fZXhwZWN0ZWRfZnJhbWVzID0gMjY5OwotICBpbnQgbnVtX3BhcnNlZF9mcmFtZXMgPSAwOwotCi0gIC8vIEFsbG93IHRvIHBhcnNlIHR3aWNlIGFzIG1hbnkgZnJhbWVzIGluIG9yZGVyIHRvIGRldGVjdCBhbnkgZXh0cmEgZnJhbWVzCi0gIC8vIHBhcnNlZC4KLSAgd2hpbGUgKG51bV9wYXJzZWRfZnJhbWVzIDwgbnVtX2V4cGVjdGVkX2ZyYW1lcyAqIDIpIHsKLSAgICBWcDlGcmFtZUhlYWRlciBmaGRyOwotICAgIGlmIChQYXJzZU5leHRGcmFtZSgmZmhkcikgIT0gVnA5UGFyc2VyOjprT2spIGJyZWFrOwotCi0gICAgKytudW1fcGFyc2VkX2ZyYW1lczsKLSAgfQotCi0gIERWTE9HKDEpIDw8ICJOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcmFtZXMgYmVmb3JlIEVPUzogIgotICAgICAgICAgICA8PCBudW1fcGFyc2VkX2ZyYW1lczsKLQotICBFWFBFQ1RfRVEobnVtX2V4cGVjdGVkX2ZyYW1lcywgbnVtX3BhcnNlZF9mcmFtZXMpOwotfQotCi1URVNUX0YoVnA5UGFyc2VyVGVzdCwgU3RyZWFtRmlsZVBhcnNpbmdXaXRoQ29tcHJlc3NlZEhlYWRlcikgewotICBJbml0aWFsaXplKCJ0ZXN0LTI1ZnBzLnZwOSIsIHRydWUpOwotCi0gIC8vIE51bWJlciBvZiBmcmFtZXMgaW4gdGhlIHRlc3Qgc3RyZWFtIHRvIGJlIHBhcnNlZC4KLSAgY29uc3QgaW50IG51bV9leHBlY3RlZF9mcmFtZXMgPSAyNjk7Ci0gIGludCBudW1fcGFyc2VkX2ZyYW1lcyA9IDA7Ci0KLSAgLy8gQWxsb3cgdG8gcGFyc2UgdHdpY2UgYXMgbWFueSBmcmFtZXMgaW4gb3JkZXIgdG8gZGV0ZWN0IGFueSBleHRyYSBmcmFtZXMKLSAgLy8gcGFyc2VkLgotICB3aGlsZSAobnVtX3BhcnNlZF9mcmFtZXMgPCBudW1fZXhwZWN0ZWRfZnJhbWVzICogMikgewotICAgIFZwOUZyYW1lSGVhZGVyIGZoZHI7Ci0gICAgaWYgKFBhcnNlTmV4dEZyYW1lKCZmaGRyKSAhPSBWcDlQYXJzZXI6OmtPaykgYnJlYWs7Ci0KLSAgICBWcDlGcmFtZUNvbnRleHQgZnJhbWVfY29udGV4dDsKLSAgICBSZWFkQ29udGV4dCgmZnJhbWVfY29udGV4dCk7Ci0gICAgRVhQRUNUX1RSVUUobWVtY21wKCZmcmFtZV9jb250ZXh0LCAmZmhkci5pbml0aWFsX2ZyYW1lX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmcmFtZV9jb250ZXh0KSkgPT0gMCk7Ci0gICAgUmVhZENvbnRleHQoJmZyYW1lX2NvbnRleHQpOwotICAgIEVYUEVDVF9UUlVFKG1lbWNtcCgmZnJhbWVfY29udGV4dCwgJmZoZHIuZnJhbWVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZyYW1lX2NvbnRleHQpKSA9PSAwKTsKLQotICAgIC8vIHRlc3QtMjVmcHMudnA5IGRvZXNuJ3QgbmVlZCBmcmFtZSB1cGRhdGUgZnJvbSBkcml2ZXIuCi0gICAgYXV0byBjb250ZXh0X3JlZnJlc2hfY2IgPSBHZXRDb250ZXh0UmVmcmVzaENiKGZoZHIpOwotICAgIEVYUEVDVF9UUlVFKGNvbnRleHRfcmVmcmVzaF9jYi5pc19udWxsKCkpOwotICAgIEFTU0VSVF9GQUxTRShSZWFkU2hvdWxkQ29udGV4dFVwZGF0ZSgpKTsKLQotICAgICsrbnVtX3BhcnNlZF9mcmFtZXM7Ci0gIH0KLQotICBEVkxPRygxKSA8PCAiTnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBwYXJzZWQgZnJhbWVzIGJlZm9yZSBFT1M6ICIKLSAgICAgICAgICAgPDwgbnVtX3BhcnNlZF9mcmFtZXM7Ci0KLSAgRVhQRUNUX0VRKG51bV9leHBlY3RlZF9mcmFtZXMsIG51bV9wYXJzZWRfZnJhbWVzKTsKLX0KLQotVEVTVF9GKFZwOVBhcnNlclRlc3QsIFN0cmVhbUZpbGVQYXJzaW5nV2l0aENvbnRleHRVcGRhdGUpIHsKLSAgSW5pdGlhbGl6ZSgiYmVhci12cDkuaXZmIiwgdHJ1ZSk7Ci0KLSAgLy8gTnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgdGVzdCBzdHJlYW0gdG8gYmUgcGFyc2VkLgotICBjb25zdCBpbnQgbnVtX2V4cGVjdGVkX2ZyYW1lcyA9IDgyOwotICBpbnQgbnVtX3BhcnNlZF9mcmFtZXMgPSAwOwotCi0gIC8vIEFsbG93IHRvIHBhcnNlIHR3aWNlIGFzIG1hbnkgZnJhbWVzIGluIG9yZGVyIHRvIGRldGVjdCBhbnkgZXh0cmEgZnJhbWVzCi0gIC8vIHBhcnNlZC4KLSAgd2hpbGUgKG51bV9wYXJzZWRfZnJhbWVzIDwgbnVtX2V4cGVjdGVkX2ZyYW1lcyAqIDIpIHsKLSAgICBWcDlGcmFtZUhlYWRlciBmaGRyOwotICAgIGlmIChQYXJzZU5leHRGcmFtZSgmZmhkcikgIT0gVnA5UGFyc2VyOjprT2spIGJyZWFrOwotCi0gICAgVnA5RnJhbWVDb250ZXh0IGZyYW1lX2NvbnRleHQ7Ci0gICAgUmVhZENvbnRleHQoJmZyYW1lX2NvbnRleHQpOwotICAgIEVYUEVDVF9UUlVFKG1lbWNtcCgmZnJhbWVfY29udGV4dCwgJmZoZHIuaW5pdGlhbF9mcmFtZV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZnJhbWVfY29udGV4dCkpID09IDApOwotICAgIFJlYWRDb250ZXh0KCZmcmFtZV9jb250ZXh0KTsKLSAgICBFWFBFQ1RfVFJVRShtZW1jbXAoJmZyYW1lX2NvbnRleHQsICZmaGRyLmZyYW1lX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmcmFtZV9jb250ZXh0KSkgPT0gMCk7Ci0KLSAgICBib29sIHNob3VsZF91cGRhdGUgPSBSZWFkU2hvdWxkQ29udGV4dFVwZGF0ZSgpOwotICAgIGF1dG8gY29udGV4dF9yZWZyZXNoX2NiID0gR2V0Q29udGV4dFJlZnJlc2hDYihmaGRyKTsKLSAgICBpZiAoY29udGV4dF9yZWZyZXNoX2NiLmlzX251bGwoKSkgewotICAgICAgRVhQRUNUX0ZBTFNFKHNob3VsZF91cGRhdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBFWFBFQ1RfVFJVRShzaG91bGRfdXBkYXRlKTsKLSAgICAgIFJlYWRDb250ZXh0KCZmcmFtZV9jb250ZXh0KTsKLSAgICAgIGNvbnRleHRfcmVmcmVzaF9jYi5SdW4oZnJhbWVfY29udGV4dCk7Ci0gICAgfQotCi0gICAgKytudW1fcGFyc2VkX2ZyYW1lczsKLSAgfQotCi0gIERWTE9HKDEpIDw8ICJOdW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcmFtZXMgYmVmb3JlIEVPUzogIgotICAgICAgICAgICA8PCBudW1fcGFyc2VkX2ZyYW1lczsKLQotICBFWFBFQ1RfRVEobnVtX2V4cGVjdGVkX2ZyYW1lcywgbnVtX3BhcnNlZF9mcmFtZXMpOwotfQotCi1URVNUX0YoVnA5UGFyc2VyVGVzdCwgQXdhaXRpbmdDb250ZXh0VXBkYXRlKSB7Ci0gIEluaXRpYWxpemUoImJlYXItdnA5Lml2ZiIsIHRydWUpOwotCi0gIFZwOUZyYW1lSGVhZGVyIGZoZHI7Ci0gIEFTU0VSVF9FUShWcDlQYXJzZXI6OmtPaywgUGFyc2VOZXh0RnJhbWUoJmZoZHIpKTsKLQotICBWcDlGcmFtZUNvbnRleHQgZnJhbWVfY29udGV4dDsKLSAgUmVhZENvbnRleHQoJmZyYW1lX2NvbnRleHQpOwotICBSZWFkQ29udGV4dCgmZnJhbWVfY29udGV4dCk7Ci0gIGJvb2wgc2hvdWxkX3VwZGF0ZSA9IFJlYWRTaG91bGRDb250ZXh0VXBkYXRlKCk7Ci0gIEFTU0VSVF9UUlVFKHNob3VsZF91cGRhdGUpOwotICBSZWFkQ29udGV4dCgmZnJhbWVfY29udGV4dCk7Ci0KLSAgLy8gTm90IHVwZGF0ZSB5ZXQuIFNob3VsZCByZXR1cm4ga0F3YWl0aW5nUmVmcmVzaC4KLSAgRVhQRUNUX0VRKFZwOVBhcnNlcjo6a0F3YWl0aW5nUmVmcmVzaCwgUGFyc2VOZXh0RnJhbWUoJmZoZHIpKTsKLSAgRVhQRUNUX0VRKFZwOVBhcnNlcjo6a0F3YWl0aW5nUmVmcmVzaCwgUGFyc2VOZXh0RnJhbWUoJmZoZHIpKTsKLQotICAvLyBBZnRlciB1cGRhdGUsIHBhcnNlIHNob3VsZCBiZSBvay4KLSAgYXV0byBjb250ZXh0X3JlZnJlc2hfY2IgPSBHZXRDb250ZXh0UmVmcmVzaENiKGZoZHIpOwotICBFWFBFQ1RfRkFMU0UoY29udGV4dF9yZWZyZXNoX2NiLmlzX251bGwoKSk7Ci0gIGNvbnRleHRfcmVmcmVzaF9jYi5SdW4oZnJhbWVfY29udGV4dCk7Ci0gIEVYUEVDVF9FUShWcDlQYXJzZXI6OmtPaywgUGFyc2VOZXh0RnJhbWUoJmZoZHIpKTsKLQotICAvLyBNYWtlIHN1cmUgaXQgcGFyc2VkIHRoZSAybmQgZnJhbWUuCi0gIEVYUEVDVF9FUSg5dSwgZmhkci5oZWFkZXJfc2l6ZV9pbl9ieXRlcyk7Ci19Ci0KLVRFU1RfRihWcDlQYXJzZXJUZXN0LCBWZXJpZnlGaXJzdEZyYW1lKSB7Ci0gIEluaXRpYWxpemUoInRlc3QtMjVmcHMudnA5IiwgZmFsc2UpOwotICBWcDlGcmFtZUhlYWRlciBmaGRyOwotCi0gIEFTU0VSVF9FUShWcDlQYXJzZXI6OmtPaywgUGFyc2VOZXh0RnJhbWUoJmZoZHIpKTsKLQotICBFWFBFQ1RfRVEoMCwgZmhkci5wcm9maWxlKTsKLSAgRVhQRUNUX0ZBTFNFKGZoZHIuc2hvd19leGlzdGluZ19mcmFtZSk7Ci0gIEVYUEVDVF9FUShWcDlGcmFtZUhlYWRlcjo6S0VZRlJBTUUsIGZoZHIuZnJhbWVfdHlwZSk7Ci0gIEVYUEVDVF9UUlVFKGZoZHIuc2hvd19mcmFtZSk7Ci0gIEVYUEVDVF9GQUxTRShmaGRyLmVycm9yX3Jlc2lsaWVudF9tb2RlKTsKLQotICBFWFBFQ1RfRVEoOCwgZmhkci5iaXRfZGVwdGgpOwotICBFWFBFQ1RfRVEoVnA5Q29sb3JTcGFjZTo6VU5LTk9XTiwgZmhkci5jb2xvcl9zcGFjZSk7Ci0gIEVYUEVDVF9GQUxTRShmaGRyLmNvbG9yX3JhbmdlKTsKLSAgRVhQRUNUX0VRKDEsIGZoZHIuc3Vic2FtcGxpbmdfeCk7Ci0gIEVYUEVDVF9FUSgxLCBmaGRyLnN1YnNhbXBsaW5nX3kpOwotCi0gIEVYUEVDVF9FUSgzMjB1LCBmaGRyLmZyYW1lX3dpZHRoKTsKLSAgRVhQRUNUX0VRKDI0MHUsIGZoZHIuZnJhbWVfaGVpZ2h0KTsKLSAgRVhQRUNUX0VRKDMyMHUsIGZoZHIucmVuZGVyX3dpZHRoKTsKLSAgRVhQRUNUX0VRKDI0MHUsIGZoZHIucmVuZGVyX2hlaWdodCk7Ci0KLSAgRVhQRUNUX1RSVUUoZmhkci5yZWZyZXNoX2ZyYW1lX2NvbnRleHQpOwotICBFWFBFQ1RfVFJVRShmaGRyLmZyYW1lX3BhcmFsbGVsX2RlY29kaW5nX21vZGUpOwotICBFWFBFQ1RfRVEoMCwgZmhkci5mcmFtZV9jb250ZXh0X2lkeF90b19zYXZlX3Byb2JzKTsKLQotICBjb25zdCBWcDlMb29wRmlsdGVyUGFyYW1zJiBsZiA9IEdldExvb3BGaWx0ZXIoKTsKLSAgRVhQRUNUX0VRKDksIGxmLmxldmVsKTsKLSAgRVhQRUNUX0VRKDAsIGxmLnNoYXJwbmVzcyk7Ci0gIEVYUEVDVF9UUlVFKGxmLmRlbHRhX2VuYWJsZWQpOwotICBFWFBFQ1RfVFJVRShsZi5kZWx0YV91cGRhdGUpOwotICBFWFBFQ1RfVFJVRShsZi51cGRhdGVfcmVmX2RlbHRhc1swXSk7Ci0gIEVYUEVDVF9FUSgxLCBsZi5yZWZfZGVsdGFzWzBdKTsKLSAgRVhQRUNUX0VRKC0xLCBsZi5yZWZfZGVsdGFzWzJdKTsKLSAgRVhQRUNUX0VRKC0xLCBsZi5yZWZfZGVsdGFzWzNdKTsKLQotICBjb25zdCBWcDlRdWFudGl6YXRpb25QYXJhbXMmIHFwID0gZmhkci5xdWFudF9wYXJhbXM7Ci0gIEVYUEVDVF9FUSg2NSwgcXAuYmFzZV9xX2lkeCk7Ci0gIEVYUEVDVF9GQUxTRShxcC5kZWx0YV9xX3lfZGMpOwotICBFWFBFQ1RfRkFMU0UocXAuZGVsdGFfcV91dl9kYyk7Ci0gIEVYUEVDVF9GQUxTRShxcC5kZWx0YV9xX3V2X2FjKTsKLSAgRVhQRUNUX0ZBTFNFKHFwLklzTG9zc2xlc3MoKSk7Ci0KLSAgY29uc3QgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBzZWcgPSBHZXRTZWdtZW50YXRpb24oKTsKLSAgRVhQRUNUX0ZBTFNFKHNlZy5lbmFibGVkKTsKLQotICBFWFBFQ1RfRVEoMCwgZmhkci50aWxlX2NvbHNfbG9nMik7Ci0gIEVYUEVDVF9FUSgwLCBmaGRyLnRpbGVfcm93c19sb2cyKTsKLQotICBFWFBFQ1RfRVEoMTIwdSwgZmhkci5oZWFkZXJfc2l6ZV9pbl9ieXRlcyk7Ci0gIEVYUEVDVF9FUSgxOHUsIGZoZHIudW5jb21wcmVzc2VkX2hlYWRlcl9zaXplKTsKLX0KLQotVEVTVF9GKFZwOVBhcnNlclRlc3QsIFZlcmlmeUludGVyRnJhbWUpIHsKLSAgSW5pdGlhbGl6ZSgidGVzdC0yNWZwcy52cDkiLCBmYWxzZSk7Ci0gIFZwOUZyYW1lSGVhZGVyIGZoZHI7Ci0KLSAgLy8gVG8gdmVyaWZ5IHRoZSBzZWNvbmQgZnJhbWUuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSBBU1NFUlRfRVEoVnA5UGFyc2VyOjprT2ssIFBhcnNlTmV4dEZyYW1lKCZmaGRyKSk7Ci0KLSAgRVhQRUNUX0VRKFZwOUZyYW1lSGVhZGVyOjpJTlRFUkZSQU1FLCBmaGRyLmZyYW1lX3R5cGUpOwotICBFWFBFQ1RfRkFMU0UoZmhkci5zaG93X2ZyYW1lKTsKLSAgRVhQRUNUX0ZBTFNFKGZoZHIuaW50cmFfb25seSk7Ci0gIEVYUEVDVF9GQUxTRShmaGRyLnJlc2V0X2ZyYW1lX2NvbnRleHQpOwotICBFWFBFQ1RfVFJVRShmaGRyLlJlZnJlc2hGbGFnKDIpKTsKLSAgRVhQRUNUX0VRKDAsIGZoZHIucmVmX2ZyYW1lX2lkeFswXSk7Ci0gIEVYUEVDVF9FUSgxLCBmaGRyLnJlZl9mcmFtZV9pZHhbMV0pOwotICBFWFBFQ1RfRVEoMiwgZmhkci5yZWZfZnJhbWVfaWR4WzJdKTsKLSAgRVhQRUNUX1RSVUUoZmhkci5hbGxvd19oaWdoX3ByZWNpc2lvbl9tdik7Ci0gIEVYUEVDVF9FUShWcDlJbnRlcnBvbGF0aW9uRmlsdGVyOjpFSUdIVFRBUCwgZmhkci5pbnRlcnBvbGF0aW9uX2ZpbHRlcik7Ci0KLSAgRVhQRUNUX0VRKDQ4dSwgZmhkci5oZWFkZXJfc2l6ZV9pbl9ieXRlcyk7Ci0gIEVYUEVDVF9FUSgxMXUsIGZoZHIudW5jb21wcmVzc2VkX2hlYWRlcl9zaXplKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3Jhd19iaXRzX3JlYWRlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJkMDcxYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3Jhd19iaXRzX3JlYWRlci5oIgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVnA5UmF3Qml0c1JlYWRlcjo6VnA5UmF3Qml0c1JlYWRlcigpIDogdmFsaWRfKHRydWUpIHt9Ci0KLVZwOVJhd0JpdHNSZWFkZXI6On5WcDlSYXdCaXRzUmVhZGVyKCkge30KLQotdm9pZCBWcDlSYXdCaXRzUmVhZGVyOjpJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKSB7Ci0gIERDSEVDSyhkYXRhKTsKLSAgcmVhZGVyXy5yZXNldChuZXcgQml0UmVhZGVyKGRhdGEsIHNpemUpKTsKLSAgdmFsaWRfID0gdHJ1ZTsKLX0KLQotYm9vbCBWcDlSYXdCaXRzUmVhZGVyOjpSZWFkQm9vbCgpIHsKLSAgRENIRUNLKHJlYWRlcl8pOwotICBpZiAoIXZhbGlkXykgcmV0dXJuIGZhbHNlOwotCi0gIGludCB2YWx1ZSA9IDA7Ci0gIHZhbGlkXyA9IHJlYWRlcl8tPlJlYWRCaXRzKDEsICZ2YWx1ZSk7Ci0gIHJldHVybiB2YWxpZF8gPyB2YWx1ZSA9PSAxIDogZmFsc2U7Ci19Ci0KLWludCBWcDlSYXdCaXRzUmVhZGVyOjpSZWFkTGl0ZXJhbChpbnQgYml0cykgewotICBEQ0hFQ0socmVhZGVyXyk7Ci0gIGlmICghdmFsaWRfKSByZXR1cm4gMDsKLQotICBpbnQgdmFsdWUgPSAwOwotICBEQ0hFQ0tfTFQoc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXRzKSwgc2l6ZW9mKHZhbHVlKSAqIDgpOwotICB2YWxpZF8gPSByZWFkZXJfLT5SZWFkQml0cyhiaXRzLCAmdmFsdWUpOwotICByZXR1cm4gdmFsaWRfID8gdmFsdWUgOiAwOwotfQotCi1pbnQgVnA5UmF3Qml0c1JlYWRlcjo6UmVhZFNpZ25lZExpdGVyYWwoaW50IGJpdHMpIHsKLSAgaW50IHZhbHVlID0gUmVhZExpdGVyYWwoYml0cyk7Ci0gIHJldHVybiBSZWFkQm9vbCgpID8gLXZhbHVlIDogdmFsdWU7Ci19Ci0KLXNpemVfdCBWcDlSYXdCaXRzUmVhZGVyOjpHZXRCeXRlc1JlYWQoKSBjb25zdCB7Ci0gIERDSEVDSyhyZWFkZXJfKTsKLSAgcmV0dXJuIChyZWFkZXJfLT5iaXRzX3JlYWQoKSArIDcpIC8gODsKLX0KLQotYm9vbCBWcDlSYXdCaXRzUmVhZGVyOjpDb25zdW1lVHJhaWxpbmdCaXRzKCkgewotICBEQ0hFQ0socmVhZGVyXyk7Ci0gIGludCBiaXRzX2xlZnQgPSBHZXRCeXRlc1JlYWQoKSAqIDggLSByZWFkZXJfLT5iaXRzX3JlYWQoKTsKLSAgcmV0dXJuIFJlYWRMaXRlcmFsKGJpdHNfbGVmdCkgPT0gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0OGY4M2MuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3Jhd19iaXRzX3JlYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9SQVdfQklUU19SRUFERVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA5X1JBV19CSVRTX1JFQURFUl9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQml0UmVhZGVyOwotCi0vLyBBIGNsYXNzIHRvIHJlYWQgcmF3IGJpdHMgc3RyZWFtLiBTZWUgVlA5IHNwZWMsICJSQVctQklUUyBERUNPRElORyIgc2VjdGlvbgotLy8gZm9yIGRldGFpbC4KLWNsYXNzIE1FRElBX0VYUE9SVCBWcDlSYXdCaXRzUmVhZGVyIHsKLSBwdWJsaWM6Ci0gIFZwOVJhd0JpdHNSZWFkZXIoKTsKLSAgflZwOVJhd0JpdHNSZWFkZXIoKTsKLQotICAvLyB8ZGF0YXwgaXMgdGhlIGlucHV0IGJ1ZmZlciB3aXRoIHxzaXplfCBieXRlcy4KLSAgdm9pZCBJbml0aWFsaXplKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgcmVhZHMgc2luY2UgdGhlIGxhc3QgSW5pdGlhbGl6ZSgpIGNhbGwgaGFzCi0gIC8vIGdvbmUgYmV5b25kIHRoZSBlbmQgb2YgYXZhaWxhYmxlIGRhdGEuCi0gIGJvb2wgSXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHZhbGlkXzsgfQotCi0gIC8vIFJldHVybnMgaG93IG1hbnkgYnl0ZXMgd2VyZSByZWFkIHNpbmNlIHRoZSBsYXN0IEluaXRpYWxpemUoKSBjYWxsLgotICAvLyBQYXJ0aWFsIGJ5dGVzIHdpbGwgYmUgY291bnRlZCBhcyBvbmUgYnl0ZS4gRm9yIGV4YW1wbGUsIGl0IHdpbGwgcmV0dXJuIDEKLSAgLy8gaWYgMyBiaXRzIHdlcmUgcmVhZC4KLSAgc2l6ZV90IEdldEJ5dGVzUmVhZCgpIGNvbnN0OwotCi0gIC8vIFJlYWRzIG9uZSBiaXQuCi0gIC8vIElmIHRoZSByZWFkIGdvZXMgYmV5b25kIHRoZSBlbmQgb2YgYnVmZmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgYm9vbCBSZWFkQm9vbCgpOwotCi0gIC8vIFJlYWRzIGEgbGl0ZXJhbCB3aXRoIHxiaXRzfCBiaXRzLgotICAvLyBJZiB0aGUgcmVhZCBnb2VzIGJleW9uZCB0aGUgZW5kIG9mIGJ1ZmZlciwgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCi0gIGludCBSZWFkTGl0ZXJhbChpbnQgYml0cyk7Ci0KLSAgLy8gUmVhZHMgYSBzaWduZWQgbGl0ZXJhbCB3aXRoIHxiaXRzfCBiaXRzIChub3QgaW5jbHVkaW5nIHRoZSBzaWduIGJpdCkuCi0gIC8vIElmIHRoZSByZWFkIGdvZXMgYmV5b25kIHRoZSBlbmQgb2YgYnVmZmVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgaW50IFJlYWRTaWduZWRMaXRlcmFsKGludCBiaXRzKTsKLQotICAvLyBDb25zdW1lcyB0cmFpbGluZyBiaXRzIHVwIHRvIG5leHQgYnl0ZSBib3VuZGFyeS4gUmV0dXJucyB0cnVlIGlmIG5vCi0gIC8vIHRyYWlsaW5nIGJpdHMgb3IgdGhleSBhcmUgYWxsIHplcm8uCi0gIGJvb2wgQ29uc3VtZVRyYWlsaW5nQml0cygpOwotCi0gcHJpdmF0ZToKLSAgc3RkOjp1bmlxdWVfcHRyPEJpdFJlYWRlcj4gcmVhZGVyXzsKLQotICAvLyBJbmRpY2F0ZXMgaWYgbm9uZSBvZiB0aGUgcmVhZHMgc2luY2UgdGhlIGxhc3QgSW5pdGlhbGl6ZSgpIGNhbGwgaGFzIGdvbmUKLSAgLy8gYmV5b25kIHRoZSBlbmQgb2YgYXZhaWxhYmxlIGRhdGEuCi0gIGJvb2wgdmFsaWRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWcDlSYXdCaXRzUmVhZGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9SQVdfQklUU19SRUFERVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9yYXdfYml0c19yZWFkZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTk4MDg5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9yYXdfYml0c19yZWFkZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfcmF3X2JpdHNfcmVhZGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotVEVTVChWcDlSYXdCaXRzUmVhZGVyVGVzdCwgUmVhZEJvb2wpIHsKLSAgdWludDhfdCBkYXRhW10gPSB7MHhmMX07Ci0gIFZwOVJhd0JpdHNSZWFkZXIgcmVhZGVyOwotICByZWFkZXIuSW5pdGlhbGl6ZShkYXRhLCAxKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuSXNWYWxpZCgpKTsKLSAgRVhQRUNUX0VRKDB1LCByZWFkZXIuR2V0Qnl0ZXNSZWFkKCkpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJvb2woKSk7Ci0gIEVYUEVDVF9FUSgxdSwgcmVhZGVyLkdldEJ5dGVzUmVhZCgpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLlJlYWRCb29sKCkpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIuUmVhZEJvb2woKSk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci5SZWFkQm9vbCgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci5SZWFkQm9vbCgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci5SZWFkQm9vbCgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci5SZWFkQm9vbCgpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLlJlYWRCb29sKCkpOwotICBFWFBFQ1RfVFJVRShyZWFkZXIuSXNWYWxpZCgpKTsKLQotICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KLSAgaWdub3JlX3Jlc3VsdChyZWFkZXIuUmVhZEJvb2woKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIuSXNWYWxpZCgpKTsKLSAgRVhQRUNUX0VRKDF1LCByZWFkZXIuR2V0Qnl0ZXNSZWFkKCkpOwotfQotCi1URVNUKFZwOVJhd0JpdHNSZWFkZXIsIFJlYWRMaXRlcmFsKSB7Ci0gIHVpbnQ4X3QgZGF0YVtdID0gezB4M2QsIDB4NjcsIDB4OWF9OwotICBWcDlSYXdCaXRzUmVhZGVyIHJlYWRlcjsKLSAgcmVhZGVyLkluaXRpYWxpemUoZGF0YSwgMyk7Ci0KLSAgRVhQRUNUX1RSVUUocmVhZGVyLklzVmFsaWQoKSk7Ci0gIEVYUEVDVF9FUSgweDAzLCByZWFkZXIuUmVhZExpdGVyYWwoNCkpOwotICBFWFBFQ1RfRVEoMHhkNjc5LCByZWFkZXIuUmVhZExpdGVyYWwoMTYpKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLklzVmFsaWQoKSk7Ci0KLSAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCi0gIGlnbm9yZV9yZXN1bHQocmVhZGVyLlJlYWRMaXRlcmFsKDgpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci5Jc1ZhbGlkKCkpOwotICBFWFBFQ1RfRVEoM3UsIHJlYWRlci5HZXRCeXRlc1JlYWQoKSk7Ci19Ci0KLVRFU1QoVnA5UmF3Qml0c1JlYWRlciwgUmVhZFNpZ25lZExpdGVyYWwpIHsKLSAgdWludDhfdCBkYXRhW10gPSB7MHgzZCwgMHg2NywgMHg5YX07Ci0gIFZwOVJhd0JpdHNSZWFkZXIgcmVhZGVyOwotICByZWFkZXIuSW5pdGlhbGl6ZShkYXRhLCAzKTsKLQotICBFWFBFQ1RfVFJVRShyZWFkZXIuSXNWYWxpZCgpKTsKLSAgRVhQRUNUX0VRKC0weDAzLCByZWFkZXIuUmVhZFNpZ25lZExpdGVyYWwoNCkpOwotICBFWFBFQ1RfRVEoLTB4NTY3OSwgcmVhZGVyLlJlYWRTaWduZWRMaXRlcmFsKDE1KSk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci5Jc1ZhbGlkKCkpOwotCi0gIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLgotICBpZ25vcmVfcmVzdWx0KHJlYWRlci5SZWFkU2lnbmVkTGl0ZXJhbCg3KSk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXIuSXNWYWxpZCgpKTsKLSAgRVhQRUNUX0VRKDN1LCByZWFkZXIuR2V0Qnl0ZXNSZWFkKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV91bmNvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5jYyBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV91bmNvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FjNjVlZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy92cDlfdW5jb21wcmVzc2VkX2hlYWRlcl9wYXJzZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDg2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV91bmNvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIDEwLjUgRGVmYXVsdCBwcm9iYWJpbGl0eSB0YWJsZXMKLVZwOUZyYW1lQ29udGV4dCBrVnA5RGVmYXVsdEZyYW1lQ29udGV4dCA9IHsKLSAgICAvLyB0eF9wcm9ic184eDgKLSAgICB7ezEwMH0sIHs2Nn19LAotICAgIC8vIHR4X3Byb2JzXzE2eDE2Ci0gICAge3syMCwgMTUyfSwgezE1LCAxMDF9fSwKLSAgICAvLyB0eF9wcm9ic18zMngzMgotICAgIHt7MywgMTM2LCAzN30sIHs1LCA1MiwgMTN9fSwKLSAgICAvLyBjb2VmX3Byb2JzCi0gICAgey8vIDR4NAotICAgICB7e3t7ezE5NSwgMjksIDE4M30sIHs4NCwgNDksIDEzNn0sIHs4LCA0MiwgNzF9fSwKLSAgICAgICAge3szMSwgMTA3LCAxNjl9LAotICAgICAgICAgezM1LCA5OSwgMTU5fSwKLSAgICAgICAgIHsxNywgODIsIDE0MH0sCi0gICAgICAgICB7OCwgNjYsIDExNH0sCi0gICAgICAgICB7MiwgNDQsIDc2fSwKLSAgICAgICAgIHsxLCAxOSwgMzJ9fSwKLSAgICAgICAge3s0MCwgMTMyLCAyMDF9LAotICAgICAgICAgezI5LCAxMTQsIDE4N30sCi0gICAgICAgICB7MTMsIDkxLCAxNTd9LAotICAgICAgICAgezcsIDc1LCAxMjd9LAotICAgICAgICAgezMsIDU4LCA5NX0sCi0gICAgICAgICB7MSwgMjgsIDQ3fX0sCi0gICAgICAgIHt7NjksIDE0MiwgMjIxfSwKLSAgICAgICAgIHs0MiwgMTIyLCAyMDF9LAotICAgICAgICAgezE1LCA5MSwgMTU5fSwKLSAgICAgICAgIHs2LCA2NywgMTIxfSwKLSAgICAgICAgIHsxLCA0MiwgNzd9LAotICAgICAgICAgezEsIDE3LCAzMX19LAotICAgICAgICB7ezEwMiwgMTQ4LCAyMjh9LAotICAgICAgICAgezY3LCAxMTcsIDIwNH0sCi0gICAgICAgICB7MTcsIDgyLCAxNTR9LAotICAgICAgICAgezYsIDU5LCAxMTR9LAotICAgICAgICAgezIsIDM5LCA3NX0sCi0gICAgICAgICB7MSwgMTUsIDI5fX0sCi0gICAgICAgIHt7MTU2LCA1NywgMjMzfSwKLSAgICAgICAgIHsxMTksIDU3LCAyMTJ9LAotICAgICAgICAgezU4LCA0OCwgMTYzfSwKLSAgICAgICAgIHsyOSwgNDAsIDEyNH0sCi0gICAgICAgICB7MTIsIDMwLCA4MX0sCi0gICAgICAgICB7MywgMTIsIDMxfX19LAotICAgICAgIHt7ezE5MSwgMTA3LCAyMjZ9LCB7MTI0LCAxMTcsIDIwNH0sIHsyNSwgOTksIDE1NX19LAotICAgICAgICB7ezI5LCAxNDgsIDIxMH0sCi0gICAgICAgICB7MzcsIDEyNiwgMTk0fSwKLSAgICAgICAgIHs4LCA5MywgMTU3fSwKLSAgICAgICAgIHsyLCA2OCwgMTE4fSwKLSAgICAgICAgIHsxLCAzOSwgNjl9LAotICAgICAgICAgezEsIDE3LCAzM319LAotICAgICAgICB7ezQxLCAxNTEsIDIxM30sCi0gICAgICAgICB7MjcsIDEyMywgMTkzfSwKLSAgICAgICAgIHszLCA4MiwgMTQ0fSwKLSAgICAgICAgIHsxLCA1OCwgMTA1fSwKLSAgICAgICAgIHsxLCAzMiwgNjB9LAotICAgICAgICAgezEsIDEzLCAyNn19LAotICAgICAgICB7ezU5LCAxNTksIDIyMH0sCi0gICAgICAgICB7MjMsIDEyNiwgMTk4fSwKLSAgICAgICAgIHs0LCA4OCwgMTUxfSwKLSAgICAgICAgIHsxLCA2NiwgMTE0fSwKLSAgICAgICAgIHsxLCAzOCwgNzF9LAotICAgICAgICAgezEsIDE4LCAzNH19LAotICAgICAgICB7ezExNCwgMTM2LCAyMzJ9LAotICAgICAgICAgezUxLCAxMTQsIDIwN30sCi0gICAgICAgICB7MTEsIDgzLCAxNTV9LAotICAgICAgICAgezMsIDU2LCAxMDV9LAotICAgICAgICAgezEsIDMzLCA2NX0sCi0gICAgICAgICB7MSwgMTcsIDM0fX0sCi0gICAgICAgIHt7MTQ5LCA2NSwgMjM0fSwKLSAgICAgICAgIHsxMjEsIDU3LCAyMTV9LAotICAgICAgICAgezYxLCA0OSwgMTY2fSwKLSAgICAgICAgIHsyOCwgMzYsIDExNH0sCi0gICAgICAgICB7MTIsIDI1LCA3Nn0sCi0gICAgICAgICB7MywgMTYsIDQyfX19fSwKLSAgICAgIHt7e3syMTQsIDQ5LCAyMjB9LCB7MTMyLCA2MywgMTg4fSwgezQyLCA2NSwgMTM3fX0sCi0gICAgICAgIHt7ODUsIDEzNywgMjIxfSwKLSAgICAgICAgIHsxMDQsIDEzMSwgMjE2fSwKLSAgICAgICAgIHs0OSwgMTExLCAxOTJ9LAotICAgICAgICAgezIxLCA4NywgMTU1fSwKLSAgICAgICAgIHsyLCA0OSwgODd9LAotICAgICAgICAgezEsIDE2LCAyOH19LAotICAgICAgICB7ezg5LCAxNjMsIDIzMH0sCi0gICAgICAgICB7OTAsIDEzNywgMjIwfSwKLSAgICAgICAgIHsyOSwgMTAwLCAxODN9LAotICAgICAgICAgezEwLCA3MCwgMTM1fSwKLSAgICAgICAgIHsyLCA0MiwgODF9LAotICAgICAgICAgezEsIDE3LCAzM319LAotICAgICAgICB7ezEwOCwgMTY3LCAyMzd9LAotICAgICAgICAgezU1LCAxMzMsIDIyMn0sCi0gICAgICAgICB7MTUsIDk3LCAxNzl9LAotICAgICAgICAgezQsIDcyLCAxMzV9LAotICAgICAgICAgezEsIDQ1LCA4NX0sCi0gICAgICAgICB7MSwgMTksIDM4fX0sCi0gICAgICAgIHt7MTI0LCAxNDYsIDI0MH0sCi0gICAgICAgICB7NjYsIDEyNCwgMjI0fSwKLSAgICAgICAgIHsxNywgODgsIDE3NX0sCi0gICAgICAgICB7NCwgNTgsIDEyMn0sCi0gICAgICAgICB7MSwgMzYsIDc1fSwKLSAgICAgICAgIHsxLCAxOCwgMzd9fSwKLSAgICAgICAge3sxNDEsIDc5LCAyNDF9LAotICAgICAgICAgezEyNiwgNzAsIDIyN30sCi0gICAgICAgICB7NjYsIDU4LCAxODJ9LAotICAgICAgICAgezMwLCA0NCwgMTM2fSwKLSAgICAgICAgIHsxMiwgMzQsIDk2fSwKLSAgICAgICAgIHsyLCAyMCwgNDd9fX0sCi0gICAgICAge3t7MjI5LCA5OSwgMjQ5fSwgezE0MywgMTExLCAyMzV9LCB7NDYsIDEwOSwgMTkyfX0sCi0gICAgICAgIHt7ODIsIDE1OCwgMjM2fSwKLSAgICAgICAgIHs5NCwgMTQ2LCAyMjR9LAotICAgICAgICAgezI1LCAxMTcsIDE5MX0sCi0gICAgICAgICB7OSwgODcsIDE0OX0sCi0gICAgICAgICB7MywgNTYsIDk5fSwKLSAgICAgICAgIHsxLCAzMywgNTd9fSwKLSAgICAgICAge3s4MywgMTY3LCAyMzd9LAotICAgICAgICAgezY4LCAxNDUsIDIyMn0sCi0gICAgICAgICB7MTAsIDEwMywgMTc3fSwKLSAgICAgICAgIHsyLCA3MiwgMTMxfSwKLSAgICAgICAgIHsxLCA0MSwgNzl9LAotICAgICAgICAgezEsIDIwLCAzOX19LAotICAgICAgICB7ezk5LCAxNjcsIDIzOX0sCi0gICAgICAgICB7NDcsIDE0MSwgMjI0fSwKLSAgICAgICAgIHsxMCwgMTA0LCAxNzh9LAotICAgICAgICAgezIsIDczLCAxMzN9LAotICAgICAgICAgezEsIDQ0LCA4NX0sCi0gICAgICAgICB7MSwgMjIsIDQ3fX0sCi0gICAgICAgIHt7MTI3LCAxNDUsIDI0M30sCi0gICAgICAgICB7NzEsIDEyOSwgMjI4fSwKLSAgICAgICAgIHsxNywgOTMsIDE3N30sCi0gICAgICAgICB7MywgNjEsIDEyNH0sCi0gICAgICAgICB7MSwgNDEsIDg0fSwKLSAgICAgICAgIHsxLCAyMSwgNTJ9fSwKLSAgICAgICAge3sxNTcsIDc4LCAyNDR9LAotICAgICAgICAgezE0MCwgNzIsIDIzMX0sCi0gICAgICAgICB7NjksIDU4LCAxODR9LAotICAgICAgICAgezMxLCA0NCwgMTM3fSwKLSAgICAgICAgIHsxNCwgMzgsIDEwNX0sCi0gICAgICAgICB7OCwgMjMsIDYxfX19fX0sCi0gICAgIC8vIDh4OAotICAgICB7e3t7ezEyNSwgMzQsIDE4N30sIHs1MiwgNDEsIDEzM30sIHs2LCAzMSwgNTZ9fSwKLSAgICAgICAge3szNywgMTA5LCAxNTN9LAotICAgICAgICAgezUxLCAxMDIsIDE0N30sCi0gICAgICAgICB7MjMsIDg3LCAxMjh9LAotICAgICAgICAgezgsIDY3LCAxMDF9LAotICAgICAgICAgezEsIDQxLCA2M30sCi0gICAgICAgICB7MSwgMTksIDI5fX0sCi0gICAgICAgIHt7MzEsIDE1NCwgMTg1fSwKLSAgICAgICAgIHsxNywgMTI3LCAxNzV9LAotICAgICAgICAgezYsIDk2LCAxNDV9LAotICAgICAgICAgezIsIDczLCAxMTR9LAotICAgICAgICAgezEsIDUxLCA4Mn0sCi0gICAgICAgICB7MSwgMjgsIDQ1fX0sCi0gICAgICAgIHt7MjMsIDE2MywgMjAwfSwKLSAgICAgICAgIHsxMCwgMTMxLCAxODV9LAotICAgICAgICAgezIsIDkzLCAxNDh9LAotICAgICAgICAgezEsIDY3LCAxMTF9LAotICAgICAgICAgezEsIDQxLCA2OX0sCi0gICAgICAgICB7MSwgMTQsIDI0fX0sCi0gICAgICAgIHt7MjksIDE3NiwgMjE3fSwKLSAgICAgICAgIHsxMiwgMTQ1LCAyMDF9LAotICAgICAgICAgezMsIDEwMSwgMTU2fSwKLSAgICAgICAgIHsxLCA2OSwgMTExfSwKLSAgICAgICAgIHsxLCAzOSwgNjN9LAotICAgICAgICAgezEsIDE0LCAyM319LAotICAgICAgICB7ezU3LCAxOTIsIDIzM30sCi0gICAgICAgICB7MjUsIDE1NCwgMjE1fSwKLSAgICAgICAgIHs2LCAxMDksIDE2N30sCi0gICAgICAgICB7MywgNzgsIDExOH0sCi0gICAgICAgICB7MSwgNDgsIDY5fSwKLSAgICAgICAgIHsxLCAyMSwgMjl9fX0sCi0gICAgICAge3t7MjAyLCAxMDUsIDI0NX0sIHsxMDgsIDEwNiwgMjE2fSwgezE4LCA5MCwgMTQ0fX0sCi0gICAgICAgIHt7MzMsIDE3MiwgMjE5fSwKLSAgICAgICAgIHs2NCwgMTQ5LCAyMDZ9LAotICAgICAgICAgezE0LCAxMTcsIDE3N30sCi0gICAgICAgICB7NSwgOTAsIDE0MX0sCi0gICAgICAgICB7MiwgNjEsIDk1fSwKLSAgICAgICAgIHsxLCAzNywgNTd9fSwKLSAgICAgICAge3szMywgMTc5LCAyMjB9LAotICAgICAgICAgezExLCAxNDAsIDE5OH0sCi0gICAgICAgICB7MSwgODksIDE0OH0sCi0gICAgICAgICB7MSwgNjAsIDEwNH0sCi0gICAgICAgICB7MSwgMzMsIDU3fSwKLSAgICAgICAgIHsxLCAxMiwgMjF9fSwKLSAgICAgICAge3szMCwgMTgxLCAyMjF9LAotICAgICAgICAgezgsIDE0MSwgMTk4fSwKLSAgICAgICAgIHsxLCA4NywgMTQ1fSwKLSAgICAgICAgIHsxLCA1OCwgMTAwfSwKLSAgICAgICAgIHsxLCAzMSwgNTV9LAotICAgICAgICAgezEsIDEyLCAyMH19LAotICAgICAgICB7ezMyLCAxODYsIDIyNH0sCi0gICAgICAgICB7NywgMTQyLCAxOTh9LAotICAgICAgICAgezEsIDg2LCAxNDN9LAotICAgICAgICAgezEsIDU4LCAxMDB9LAotICAgICAgICAgezEsIDMxLCA1NX0sCi0gICAgICAgICB7MSwgMTIsIDIyfX0sCi0gICAgICAgIHt7NTcsIDE5MiwgMjI3fSwKLSAgICAgICAgIHsyMCwgMTQzLCAyMDR9LAotICAgICAgICAgezMsIDk2LCAxNTR9LAotICAgICAgICAgezEsIDY4LCAxMTJ9LAotICAgICAgICAgezEsIDQyLCA2OX0sCi0gICAgICAgICB7MSwgMTksIDMyfX19fSwKLSAgICAgIHt7e3syMTIsIDM1LCAyMTV9LCB7MTEzLCA0NywgMTY5fSwgezI5LCA0OCwgMTA1fX0sCi0gICAgICAgIHt7NzQsIDEyOSwgMjAzfSwKLSAgICAgICAgIHsxMDYsIDEyMCwgMjAzfSwKLSAgICAgICAgIHs0OSwgMTA3LCAxNzh9LAotICAgICAgICAgezE5LCA4NCwgMTQ0fSwKLSAgICAgICAgIHs0LCA1MCwgODR9LAotICAgICAgICAgezEsIDE1LCAyNX19LAotICAgICAgICB7ezcxLCAxNzIsIDIxN30sCi0gICAgICAgICB7NDQsIDE0MSwgMjA5fSwKLSAgICAgICAgIHsxNSwgMTAyLCAxNzN9LAotICAgICAgICAgezYsIDc2LCAxMzN9LAotICAgICAgICAgezIsIDUxLCA4OX0sCi0gICAgICAgICB7MSwgMjQsIDQyfX0sCi0gICAgICAgIHt7NjQsIDE4NSwgMjMxfSwKLSAgICAgICAgIHszMSwgMTQ4LCAyMTZ9LAotICAgICAgICAgezgsIDEwMywgMTc1fSwKLSAgICAgICAgIHszLCA3NCwgMTMxfSwKLSAgICAgICAgIHsxLCA0NiwgODF9LAotICAgICAgICAgezEsIDE4LCAzMH19LAotICAgICAgICB7ezY1LCAxOTYsIDIzNX0sCi0gICAgICAgICB7MjUsIDE1NywgMjIxfSwKLSAgICAgICAgIHs1LCAxMDUsIDE3NH0sCi0gICAgICAgICB7MSwgNjcsIDEyMH0sCi0gICAgICAgICB7MSwgMzgsIDY5fSwKLSAgICAgICAgIHsxLCAxNSwgMzB9fSwKLSAgICAgICAge3s2NSwgMjA0LCAyMzh9LAotICAgICAgICAgezMwLCAxNTYsIDIyNH0sCi0gICAgICAgICB7NywgMTA3LCAxNzd9LAotICAgICAgICAgezIsIDcwLCAxMjR9LAotICAgICAgICAgezEsIDQyLCA3M30sCi0gICAgICAgICB7MSwgMTgsIDM0fX19LAotICAgICAgIHt7ezIyNSwgODYsIDI1MX0sIHsxNDQsIDEwNCwgMjM1fSwgezQyLCA5OSwgMTgxfX0sCi0gICAgICAgIHt7ODUsIDE3NSwgMjM5fSwKLSAgICAgICAgIHsxMTIsIDE2NSwgMjI5fSwKLSAgICAgICAgIHsyOSwgMTM2LCAyMDB9LAotICAgICAgICAgezEyLCAxMDMsIDE2Mn0sCi0gICAgICAgICB7NiwgNzcsIDEyM30sCi0gICAgICAgICB7MiwgNTMsIDg0fX0sCi0gICAgICAgIHt7NzUsIDE4MywgMjM5fSwKLSAgICAgICAgIHszMCwgMTU1LCAyMjF9LAotICAgICAgICAgezMsIDEwNiwgMTcxfSwKLSAgICAgICAgIHsxLCA3NCwgMTI4fSwKLSAgICAgICAgIHsxLCA0NCwgNzZ9LAotICAgICAgICAgezEsIDE3LCAyOH19LAotICAgICAgICB7ezczLCAxODUsIDI0MH0sCi0gICAgICAgICB7MjcsIDE1OSwgMjIyfSwKLSAgICAgICAgIHsyLCAxMDcsIDE3Mn0sCi0gICAgICAgICB7MSwgNzUsIDEyN30sCi0gICAgICAgICB7MSwgNDIsIDczfSwKLSAgICAgICAgIHsxLCAxNywgMjl9fSwKLSAgICAgICAge3s2MiwgMTkwLCAyMzh9LAotICAgICAgICAgezIxLCAxNTksIDIyMn0sCi0gICAgICAgICB7MiwgMTA3LCAxNzJ9LAotICAgICAgICAgezEsIDcyLCAxMjJ9LAotICAgICAgICAgezEsIDQwLCA3MX0sCi0gICAgICAgICB7MSwgMTgsIDMyfX0sCi0gICAgICAgIHt7NjEsIDE5OSwgMjQwfSwKLSAgICAgICAgIHsyNywgMTYxLCAyMjZ9LAotICAgICAgICAgezQsIDExMywgMTgwfSwKLSAgICAgICAgIHsxLCA3NiwgMTI5fSwKLSAgICAgICAgIHsxLCA0NiwgODB9LAotICAgICAgICAgezEsIDIzLCA0MX19fX19LAotICAgICAvLyAxNngxNgotICAgICB7e3t7ezcsIDI3LCAxNTN9LCB7NSwgMzAsIDk1fSwgezEsIDE2LCAzMH19LAotICAgICAgICB7ezUwLCA3NSwgMTI3fSwKLSAgICAgICAgIHs1NywgNzUsIDEyNH0sCi0gICAgICAgICB7MjcsIDY3LCAxMDh9LAotICAgICAgICAgezEwLCA1NCwgODZ9LAotICAgICAgICAgezEsIDMzLCA1Mn0sCi0gICAgICAgICB7MSwgMTIsIDE4fX0sCi0gICAgICAgIHt7NDMsIDEyNSwgMTUxfSwKLSAgICAgICAgIHsyNiwgMTA4LCAxNDh9LAotICAgICAgICAgezcsIDgzLCAxMjJ9LAotICAgICAgICAgezIsIDU5LCA4OX0sCi0gICAgICAgICB7MSwgMzgsIDYwfSwKLSAgICAgICAgIHsxLCAxNywgMjd9fSwKLSAgICAgICAge3syMywgMTQ0LCAxNjN9LAotICAgICAgICAgezEzLCAxMTIsIDE1NH0sCi0gICAgICAgICB7MiwgNzUsIDExN30sCi0gICAgICAgICB7MSwgNTAsIDgxfSwKLSAgICAgICAgIHsxLCAzMSwgNTF9LAotICAgICAgICAgezEsIDE0LCAyM319LAotICAgICAgICB7ezE4LCAxNjIsIDE4NX0sCi0gICAgICAgICB7NiwgMTIzLCAxNzF9LAotICAgICAgICAgezEsIDc4LCAxMjV9LAotICAgICAgICAgezEsIDUxLCA4Nn0sCi0gICAgICAgICB7MSwgMzEsIDU0fSwKLSAgICAgICAgIHsxLCAxNCwgMjN9fSwKLSAgICAgICAge3sxNSwgMTk5LCAyMjd9LAotICAgICAgICAgezMsIDE1MCwgMjA0fSwKLSAgICAgICAgIHsxLCA5MSwgMTQ2fSwKLSAgICAgICAgIHsxLCA1NSwgOTV9LAotICAgICAgICAgezEsIDMwLCA1M30sCi0gICAgICAgICB7MSwgMTEsIDIwfX19LAotICAgICAgIHt7ezE5LCA1NSwgMjQwfSwgezE5LCA1OSwgMTk2fSwgezMsIDUyLCAxMDV9fSwKLSAgICAgICAge3s0MSwgMTY2LCAyMDd9LAotICAgICAgICAgezEwNCwgMTUzLCAxOTl9LAotICAgICAgICAgezMxLCAxMjMsIDE4MX0sCi0gICAgICAgICB7MTQsIDEwMSwgMTUyfSwKLSAgICAgICAgIHs1LCA3MiwgMTA2fSwKLSAgICAgICAgIHsxLCAzNiwgNTJ9fSwKLSAgICAgICAge3szNSwgMTc2LCAyMTF9LAotICAgICAgICAgezEyLCAxMzEsIDE5MH0sCi0gICAgICAgICB7MiwgODgsIDE0NH0sCi0gICAgICAgICB7MSwgNjAsIDEwMX0sCi0gICAgICAgICB7MSwgMzYsIDYwfSwKLSAgICAgICAgIHsxLCAxNiwgMjh9fSwKLSAgICAgICAge3syOCwgMTgzLCAyMTN9LAotICAgICAgICAgezgsIDEzNCwgMTkxfSwKLSAgICAgICAgIHsxLCA4NiwgMTQyfSwKLSAgICAgICAgIHsxLCA1NiwgOTZ9LAotICAgICAgICAgezEsIDMwLCA1M30sCi0gICAgICAgICB7MSwgMTIsIDIwfX0sCi0gICAgICAgIHt7MjAsIDE5MCwgMjE1fSwKLSAgICAgICAgIHs0LCAxMzUsIDE5Mn0sCi0gICAgICAgICB7MSwgODQsIDEzOX0sCi0gICAgICAgICB7MSwgNTMsIDkxfSwKLSAgICAgICAgIHsxLCAyOCwgNDl9LAotICAgICAgICAgezEsIDExLCAyMH19LAotICAgICAgICB7ezEzLCAxOTYsIDIxNn0sCi0gICAgICAgICB7MiwgMTM3LCAxOTJ9LAotICAgICAgICAgezEsIDg2LCAxNDN9LAotICAgICAgICAgezEsIDU3LCA5OX0sCi0gICAgICAgICB7MSwgMzIsIDU2fSwKLSAgICAgICAgIHsxLCAxMywgMjR9fX19LAotICAgICAge3t7ezIxMSwgMjksIDIxN30sIHs5NiwgNDcsIDE1Nn0sIHsyMiwgNDMsIDg3fX0sCi0gICAgICAgIHt7NzgsIDEyMCwgMTkzfSwKLSAgICAgICAgIHsxMTEsIDExNiwgMTg2fSwKLSAgICAgICAgIHs0NiwgMTAyLCAxNjR9LAotICAgICAgICAgezE1LCA4MCwgMTI4fSwKLSAgICAgICAgIHsyLCA0OSwgNzZ9LAotICAgICAgICAgezEsIDE4LCAyOH19LAotICAgICAgICB7ezcxLCAxNjEsIDIwM30sCi0gICAgICAgICB7NDIsIDEzMiwgMTkyfSwKLSAgICAgICAgIHsxMCwgOTgsIDE1MH0sCi0gICAgICAgICB7MywgNjksIDEwOX0sCi0gICAgICAgICB7MSwgNDQsIDcwfSwKLSAgICAgICAgIHsxLCAxOCwgMjl9fSwKLSAgICAgICAge3s1NywgMTg2LCAyMTF9LAotICAgICAgICAgezMwLCAxNDAsIDE5Nn0sCi0gICAgICAgICB7NCwgOTMsIDE0Nn0sCi0gICAgICAgICB7MSwgNjIsIDEwMn0sCi0gICAgICAgICB7MSwgMzgsIDY1fSwKLSAgICAgICAgIHsxLCAxNiwgMjd9fSwKLSAgICAgICAge3s0NywgMTk5LCAyMTd9LAotICAgICAgICAgezE0LCAxNDUsIDE5Nn0sCi0gICAgICAgICB7MSwgODgsIDE0Mn0sCi0gICAgICAgICB7MSwgNTcsIDk4fSwKLSAgICAgICAgIHsxLCAzNiwgNjJ9LAotICAgICAgICAgezEsIDE1LCAyNn19LAotICAgICAgICB7ezI2LCAyMTksIDIyOX0sCi0gICAgICAgICB7NSwgMTU1LCAyMDd9LAotICAgICAgICAgezEsIDk0LCAxNTF9LAotICAgICAgICAgezEsIDYwLCAxMDR9LAotICAgICAgICAgezEsIDM2LCA2Mn0sCi0gICAgICAgICB7MSwgMTYsIDI4fX19LAotICAgICAgIHt7ezIzMywgMjksIDI0OH0sIHsxNDYsIDQ3LCAyMjB9LCB7NDMsIDUyLCAxNDB9fSwKLSAgICAgICAge3sxMDAsIDE2MywgMjMyfSwKLSAgICAgICAgIHsxNzksIDE2MSwgMjIyfSwKLSAgICAgICAgIHs2MywgMTQyLCAyMDR9LAotICAgICAgICAgezM3LCAxMTMsIDE3NH0sCi0gICAgICAgICB7MjYsIDg5LCAxMzd9LAotICAgICAgICAgezE4LCA2OCwgOTd9fSwKLSAgICAgICAge3s4NSwgMTgxLCAyMzB9LAotICAgICAgICAgezMyLCAxNDYsIDIwOX0sCi0gICAgICAgICB7NywgMTAwLCAxNjR9LAotICAgICAgICAgezMsIDcxLCAxMjF9LAotICAgICAgICAgezEsIDQ1LCA3N30sCi0gICAgICAgICB7MSwgMTgsIDMwfX0sCi0gICAgICAgIHt7NjUsIDE4NywgMjMwfSwKLSAgICAgICAgIHsyMCwgMTQ4LCAyMDd9LAotICAgICAgICAgezIsIDk3LCAxNTl9LAotICAgICAgICAgezEsIDY4LCAxMTZ9LAotICAgICAgICAgezEsIDQwLCA3MH0sCi0gICAgICAgICB7MSwgMTQsIDI5fX0sCi0gICAgICAgIHt7NDAsIDE5NCwgMjI3fSwKLSAgICAgICAgIHs4LCAxNDcsIDIwNH0sCi0gICAgICAgICB7MSwgOTQsIDE1NX0sCi0gICAgICAgICB7MSwgNjUsIDExMn0sCi0gICAgICAgICB7MSwgMzksIDY2fSwKLSAgICAgICAgIHsxLCAxNCwgMjZ9fSwKLSAgICAgICAge3sxNiwgMjA4LCAyMjh9LAotICAgICAgICAgezMsIDE1MSwgMjA3fSwKLSAgICAgICAgIHsxLCA5OCwgMTYwfSwKLSAgICAgICAgIHsxLCA2NywgMTE3fSwKLSAgICAgICAgIHsxLCA0MSwgNzR9LAotICAgICAgICAgezEsIDE3LCAzMX19fX19LAotICAgICAvLyAzMngzMgotICAgICB7e3t7ezE3LCAzOCwgMTQwfSwgezcsIDM0LCA4MH0sIHsxLCAxNywgMjl9fSwKLSAgICAgICAge3szNywgNzUsIDEyOH0sCi0gICAgICAgICB7NDEsIDc2LCAxMjh9LAotICAgICAgICAgezI2LCA2NiwgMTE2fSwKLSAgICAgICAgIHsxMiwgNTIsIDk0fSwKLSAgICAgICAgIHsyLCAzMiwgNTV9LAotICAgICAgICAgezEsIDEwLCAxNn19LAotICAgICAgICB7ezUwLCAxMjcsIDE1NH0sCi0gICAgICAgICB7MzcsIDEwOSwgMTUyfSwKLSAgICAgICAgIHsxNiwgODIsIDEyMX0sCi0gICAgICAgICB7NSwgNTksIDg1fSwKLSAgICAgICAgIHsxLCAzNSwgNTR9LAotICAgICAgICAgezEsIDEzLCAyMH19LAotICAgICAgICB7ezQwLCAxNDIsIDE2N30sCi0gICAgICAgICB7MTcsIDExMCwgMTU3fSwKLSAgICAgICAgIHsyLCA3MSwgMTEyfSwKLSAgICAgICAgIHsxLCA0NCwgNzJ9LAotICAgICAgICAgezEsIDI3LCA0NX0sCi0gICAgICAgICB7MSwgMTEsIDE3fX0sCi0gICAgICAgIHt7MzAsIDE3NSwgMTg4fSwKLSAgICAgICAgIHs5LCAxMjQsIDE2OX0sCi0gICAgICAgICB7MSwgNzQsIDExNn0sCi0gICAgICAgICB7MSwgNDgsIDc4fSwKLSAgICAgICAgIHsxLCAzMCwgNDl9LAotICAgICAgICAgezEsIDExLCAxOH19LAotICAgICAgICB7ezEwLCAyMjIsIDIyM30sCi0gICAgICAgICB7MiwgMTUwLCAxOTR9LAotICAgICAgICAgezEsIDgzLCAxMjh9LAotICAgICAgICAgezEsIDQ4LCA3OX0sCi0gICAgICAgICB7MSwgMjcsIDQ1fSwKLSAgICAgICAgIHsxLCAxMSwgMTd9fX0sCi0gICAgICAge3t7MzYsIDQxLCAyMzV9LCB7MjksIDM2LCAxOTN9LCB7MTAsIDI3LCAxMTF9fSwKLSAgICAgICAge3s4NSwgMTY1LCAyMjJ9LAotICAgICAgICAgezE3NywgMTYyLCAyMTV9LAotICAgICAgICAgezExMCwgMTM1LCAxOTV9LAotICAgICAgICAgezU3LCAxMTMsIDE2OH0sCi0gICAgICAgICB7MjMsIDgzLCAxMjB9LAotICAgICAgICAgezEwLCA0OSwgNjF9fSwKLSAgICAgICAge3s4NSwgMTkwLCAyMjN9LAotICAgICAgICAgezM2LCAxMzksIDIwMH0sCi0gICAgICAgICB7NSwgOTAsIDE0Nn0sCi0gICAgICAgICB7MSwgNjAsIDEwM30sCi0gICAgICAgICB7MSwgMzgsIDY1fSwKLSAgICAgICAgIHsxLCAxOCwgMzB9fSwKLSAgICAgICAge3s3MiwgMjAyLCAyMjN9LAotICAgICAgICAgezIzLCAxNDEsIDE5OX0sCi0gICAgICAgICB7MiwgODYsIDE0MH0sCi0gICAgICAgICB7MSwgNTYsIDk3fSwKLSAgICAgICAgIHsxLCAzNiwgNjF9LAotICAgICAgICAgezEsIDE2LCAyN319LAotICAgICAgICB7ezU1LCAyMTgsIDIyNX0sCi0gICAgICAgICB7MTMsIDE0NSwgMjAwfSwKLSAgICAgICAgIHsxLCA4NiwgMTQxfSwKLSAgICAgICAgIHsxLCA1NywgOTl9LAotICAgICAgICAgezEsIDM1LCA2MX0sCi0gICAgICAgICB7MSwgMTMsIDIyfX0sCi0gICAgICAgIHt7MTUsIDIzNSwgMjEyfSwKLSAgICAgICAgIHsxLCAxMzIsIDE4NH0sCi0gICAgICAgICB7MSwgODQsIDEzOX0sCi0gICAgICAgICB7MSwgNTcsIDk3fSwKLSAgICAgICAgIHsxLCAzNCwgNTZ9LAotICAgICAgICAgezEsIDE0LCAyM319fX0sCi0gICAgICB7e3t7MTgxLCAyMSwgMjAxfSwgezYxLCAzNywgMTIzfSwgezEwLCAzOCwgNzF9fSwKLSAgICAgICAge3s0NywgMTA2LCAxNzJ9LAotICAgICAgICAgezk1LCAxMDQsIDE3M30sCi0gICAgICAgICB7NDIsIDkzLCAxNTl9LAotICAgICAgICAgezE4LCA3NywgMTMxfSwKLSAgICAgICAgIHs0LCA1MCwgODF9LAotICAgICAgICAgezEsIDE3LCAyM319LAotICAgICAgICB7ezYyLCAxNDcsIDE5OX0sCi0gICAgICAgICB7NDQsIDEzMCwgMTg5fSwKLSAgICAgICAgIHsyOCwgMTAyLCAxNTR9LAotICAgICAgICAgezE4LCA3NSwgMTE1fSwKLSAgICAgICAgIHsyLCA0NCwgNjV9LAotICAgICAgICAgezEsIDEyLCAxOX19LAotICAgICAgICB7ezU1LCAxNTMsIDIxMH0sCi0gICAgICAgICB7MjQsIDEzMCwgMTk0fSwKLSAgICAgICAgIHszLCA5MywgMTQ2fSwKLSAgICAgICAgIHsxLCA2MSwgOTd9LAotICAgICAgICAgezEsIDMxLCA1MH0sCi0gICAgICAgICB7MSwgMTAsIDE2fX0sCi0gICAgICAgIHt7NDksIDE4NiwgMjIzfSwKLSAgICAgICAgIHsxNywgMTQ4LCAyMDR9LAotICAgICAgICAgezEsIDk2LCAxNDJ9LAotICAgICAgICAgezEsIDUzLCA4M30sCi0gICAgICAgICB7MSwgMjYsIDQ0fSwKLSAgICAgICAgIHsxLCAxMSwgMTd9fSwKLSAgICAgICAge3sxMywgMjE3LCAyMTJ9LAotICAgICAgICAgezIsIDEzNiwgMTgwfSwKLSAgICAgICAgIHsxLCA3OCwgMTI0fSwKLSAgICAgICAgIHsxLCA1MCwgODN9LAotICAgICAgICAgezEsIDI5LCA0OX0sCi0gICAgICAgICB7MSwgMTQsIDIzfX19LAotICAgICAgIHt7ezE5NywgMTMsIDI0N30sIHs4MiwgMTcsIDIyMn0sIHsyNSwgMTcsIDE2Mn19LAotICAgICAgICB7ezEyNiwgMTg2LCAyNDd9LAotICAgICAgICAgezIzNCwgMTkxLCAyNDN9LAotICAgICAgICAgezE3NiwgMTc3LCAyMzR9LAotICAgICAgICAgezEwNCwgMTU4LCAyMjB9LAotICAgICAgICAgezY2LCAxMjgsIDE4Nn0sCi0gICAgICAgICB7NTUsIDkwLCAxMzd9fSwKLSAgICAgICAge3sxMTEsIDE5NywgMjQyfSwKLSAgICAgICAgIHs0NiwgMTU4LCAyMTl9LAotICAgICAgICAgezksIDEwNCwgMTcxfSwKLSAgICAgICAgIHsyLCA2NSwgMTI1fSwKLSAgICAgICAgIHsxLCA0NCwgODB9LAotICAgICAgICAgezEsIDE3LCA5MX19LAotICAgICAgICB7ezEwNCwgMjA4LCAyNDV9LAotICAgICAgICAgezM5LCAxNjgsIDIyNH0sCi0gICAgICAgICB7MywgMTA5LCAxNjJ9LAotICAgICAgICAgezEsIDc5LCAxMjR9LAotICAgICAgICAgezEsIDUwLCAxMDJ9LAotICAgICAgICAgezEsIDQzLCAxMDJ9fSwKLSAgICAgICAge3s4NCwgMjIwLCAyNDZ9LAotICAgICAgICAgezMxLCAxNzcsIDIzMX0sCi0gICAgICAgICB7MiwgMTE1LCAxODB9LAotICAgICAgICAgezEsIDc5LCAxMzR9LAotICAgICAgICAgezEsIDU1LCA3N30sCi0gICAgICAgICB7MSwgNjAsIDc5fX0sCi0gICAgICAgIHt7NDMsIDI0MywgMjQwfSwKLSAgICAgICAgIHs4LCAxODAsIDIxN30sCi0gICAgICAgICB7MSwgMTE1LCAxNjZ9LAotICAgICAgICAgezEsIDg0LCAxMjF9LAotICAgICAgICAgezEsIDUxLCA2N30sCi0gICAgICAgICB7MSwgMTYsIDZ9fX19fX0sCi0gICAgLy8gc2tpcF9wcm9iCi0gICAgezE5MiwgMTI4LCA2NH0sCi0gICAgLy8gaW50ZXJfbW9kZV9wcm9icwotICAgIHt7MiwgMTczLCAzNH0sCi0gICAgIHs3LCAxNDUsIDg1fSwKLSAgICAgezcsIDE2NiwgNjN9LAotICAgICB7NywgOTQsIDY2fSwKLSAgICAgezgsIDY0LCA0Nn0sCi0gICAgIHsxNywgODEsIDMxfSwKLSAgICAgezI1LCAyOSwgMzB9fSwKLSAgICAvLyBpbnRlcnBfZmlsdGVyX3Byb2JzCi0gICAge3syMzUsIDE2Mn0sIHszNiwgMjU1fSwgezM0LCAzfSwgezE0OSwgMTQ0fX0sCi0gICAgLy8gaXNfaW50ZXJfcHJvYgotICAgIHs5LCAxMDIsIDE4NywgMjI1fSwKLSAgICAvLyBjb21wX21vZGVfcHJvYgotICAgIHsyMzksIDE4MywgMTE5LCA5NiwgNDF9LAotICAgIC8vIHNpbmdsZV9yZWZfcHJvYgotICAgIHt7MzMsIDE2fSwgezc3LCA3NH0sIHsxNDIsIDE0Mn0sIHsxNzIsIDE3MH0sIHsyMzgsIDI0N319LAotICAgIC8vIGNvbXBfcmVmX3Byb2IKLSAgICB7NTAsIDEyNiwgMTIzLCAyMjEsIDIyNn0sCi0gICAgLy8geV9tb2RlX3Byb2JzCi0gICAge3s2NSwgMzIsIDE4LCAxNDQsIDE2MiwgMTk0LCA0MSwgNTEsIDk4fSwKLSAgICAgezEzMiwgNjgsIDE4LCAxNjUsIDIxNywgMTk2LCA0NSwgNDAsIDc4fSwKLSAgICAgezE3MywgODAsIDE5LCAxNzYsIDI0MCwgMTkzLCA2NCwgMzUsIDQ2fSwKLSAgICAgezIyMSwgMTM1LCAzOCwgMTk0LCAyNDgsIDEyMSwgOTYsIDg1LCAyOX19LAotICAgIC8vIHV2X21vZGVfcHJvYnMKLSAgICB7ezEyMCwgNywgNzYsIDE3NiwgMjA4LCAxMjYsIDI4LCA1NCwgMTAzfSwKLSAgICAgezQ4LCAxMiwgMTU0LCAxNTUsIDEzOSwgOTAsIDM0LCAxMTcsIDExOX0sCi0gICAgIHs2NywgNiwgMjUsIDIwNCwgMjQzLCAxNTgsIDEzLCAyMSwgOTZ9LAotICAgICB7OTcsIDUsIDQ0LCAxMzEsIDE3NiwgMTM5LCA0OCwgNjgsIDk3fSwKLSAgICAgezgzLCA1LCA0MiwgMTU2LCAxMTEsIDE1MiwgMjYsIDQ5LCAxNTJ9LAotICAgICB7ODAsIDUsIDU4LCAxNzgsIDc0LCA4MywgMzMsIDYyLCAxNDV9LAotICAgICB7ODYsIDUsIDMyLCAxNTQsIDE5MiwgMTY4LCAxNCwgMjIsIDE2M30sCi0gICAgIHs4NSwgNSwgMzIsIDE1NiwgMjE2LCAxNDgsIDE5LCAyOSwgNzN9LAotICAgICB7NzcsIDcsIDY0LCAxMTYsIDEzMiwgMTIyLCAzNywgMTI2LCAxMjB9LAotICAgICB7MTAxLCAyMSwgMTA3LCAxODEsIDE5MiwgMTAzLCAxOSwgNjcsIDEyNX19LAotICAgIC8vIHBhcnRpdGlvbl9wcm9icwotICAgIHt7MTk5LCAxMjIsIDE0MX0sCi0gICAgIHsxNDcsIDYzLCAxNTl9LAotICAgICB7MTQ4LCAxMzMsIDExOH0sCi0gICAgIHsxMjEsIDEwNCwgMTE0fSwKLSAgICAgezE3NCwgNzMsIDg3fSwKLSAgICAgezkyLCA0MSwgODN9LAotICAgICB7ODIsIDk5LCA1MH0sCi0gICAgIHs1MywgMzksIDM5fSwKLSAgICAgezE3NywgNTgsIDU5fSwKLSAgICAgezY4LCAyNiwgNjN9LAotICAgICB7NTIsIDc5LCAyNX0sCi0gICAgIHsxNywgMTQsIDEyfSwKLSAgICAgezIyMiwgMzQsIDMwfSwKLSAgICAgezcyLCAxNiwgNDR9LAotICAgICB7NTgsIDMyLCAxMn0sCi0gICAgIHsxMCwgNywgNn19LAotICAgIC8vIG12X2pvaW50X3Byb2JzCi0gICAgezMyLCA2NCwgOTZ9LAotICAgIC8vIG12X3NpZ25fcHJvYgotICAgIHsxMjgsIDEyOH0sCi0gICAgLy8gbXZfY2xhc3NfcHJvYnMKLSAgICB7ezIyNCwgMTQ0LCAxOTIsIDE2OCwgMTkyLCAxNzYsIDE5MiwgMTk4LCAxOTgsIDI0NX0sCi0gICAgIHsyMTYsIDEyOCwgMTc2LCAxNjAsIDE3NiwgMTc2LCAxOTIsIDE5OCwgMTk4LCAyMDh9fSwKLSAgICAvLyBtdl9jbGFzczBfYml0X3Byb2IKLSAgICB7MjE2LCAyMDh9LAotICAgIC8vIG12X2JpdHNfcHJvYgotICAgIHt7MTM2LCAxNDAsIDE0OCwgMTYwLCAxNzYsIDE5MiwgMjI0LCAyMzQsIDIzNCwgMjQwfSwKLSAgICAgezEzNiwgMTQwLCAxNDgsIDE2MCwgMTc2LCAxOTIsIDIyNCwgMjM0LCAyMzQsIDI0MH19LAotICAgIC8vIG12X2NsYXNzMF9mcl9wcm9icwotICAgIHt7ezEyOCwgMTI4LCA2NH0sIHs5NiwgMTEyLCA2NH19LCB7ezEyOCwgMTI4LCA2NH0sIHs5NiwgMTEyLCA2NH19fSwKLSAgICAvLyBtdl9mcl9wcm9icwotICAgIHt7NjQsIDk2LCA2NH0sIHs2NCwgOTYsIDY0fX0sCi0gICAgLy8gbXZfY2xhc3MwX2hwX3Byb2IKLSAgICB7MTYwLCAxNjB9LAotICAgIC8vIG12X2hwX3Byb2IKLSAgICB7MTI4LCAxMjh9LAotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBWcDlQYXJzZXI6OlJlYWRUaWxlSW5mby4gRGVmaW5lZCBhcwotLy8gY2FsY19taW5fbG9nMl90aWxlX2NvbHMgaW4gc3BlYyA2LjIuMTQgVGlsZSBzaXplIGNhbGN1bGF0aW9uLgotaW50IEdldE1pbkxvZzJUaWxlQ29scyhpbnQgc2I2NF9jb2xzKSB7Ci0gIGNvbnN0IGludCBrTWF4VGlsZVdpZHRoQjY0ID0gNjQ7Ci0gIGludCBtaW5fbG9nMiA9IDA7Ci0gIHdoaWxlICgoa01heFRpbGVXaWR0aEI2NCA8PCBtaW5fbG9nMikgPCBzYjY0X2NvbHMpIG1pbl9sb2cyKys7Ci0gIHJldHVybiBtaW5fbG9nMjsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBWcDlQYXJzZXI6OlJlYWRUaWxlSW5mby4gRGVmaW5lZCBhcwotLy8gY2FsY19tYXhfbG9nMl90aWxlX2NvbHMgaW4gc3BlYyA2LjIuMTQgVGlsZSBzaXplIGNhbGN1bGF0aW9uLgotaW50IEdldE1heExvZzJUaWxlQ29scyhpbnQgc2I2NF9jb2xzKSB7Ci0gIGNvbnN0IGludCBrTWluVGlsZVdpZHRoQjY0ID0gNDsKLSAgaW50IG1heF9sb2cyID0gMTsKLSAgd2hpbGUgKChzYjY0X2NvbHMgPj4gbWF4X2xvZzIpID49IGtNaW5UaWxlV2lkdGhCNjQpIG1heF9sb2cyKys7Ci0gIHJldHVybiBtYXhfbG9nMiAtIDE7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1WcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcigKLSAgICBWcDlQYXJzZXI6OkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBjb250ZXh0Xyhjb250ZXh0KSB7fQotCi11aW50OF90IFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFByb2ZpbGUoKSB7Ci0gIHVpbnQ4X3QgcHJvZmlsZSA9IDA7Ci0KLSAgLy8gTFNCIGZpcnN0LgotICBpZiAocmVhZGVyXy5SZWFkQm9vbCgpKSBwcm9maWxlIHw9IDE7Ci0gIGlmIChyZWFkZXJfLlJlYWRCb29sKCkpIHByb2ZpbGUgfD0gMjsKLSAgaWYgKHByb2ZpbGUgPiAyICYmIHJlYWRlcl8uUmVhZEJvb2woKSkgcHJvZmlsZSArPSAxOwotICByZXR1cm4gcHJvZmlsZTsKLX0KLQotLy8gNi4yLjEgRnJhbWUgc3luYyBzeW50YXgKLWJvb2wgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpWZXJpZnlTeW5jQ29kZSgpIHsKLSAgY29uc3QgaW50IGtTeW5jQ29kZSA9IDB4NDk4MzQyOwotICBpZiAocmVhZGVyXy5SZWFkTGl0ZXJhbCg4ICogMykgIT0ga1N5bmNDb2RlKSB7Ci0gICAgRFZMT0coMSkgPDwgIkludmFsaWQgZnJhbWUgc3luYyBjb2RlIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIDYuMi4yIENvbG9yIGNvbmZpZyBzeW50YXgKLWJvb2wgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkQ29sb3JDb25maWcoVnA5RnJhbWVIZWFkZXIqIGZoZHIpIHsKLSAgaWYgKGZoZHItPnByb2ZpbGUgPT0gMiB8fCBmaGRyLT5wcm9maWxlID09IDMpIHsKLSAgICBmaGRyLT5iaXRfZGVwdGggPSByZWFkZXJfLlJlYWRCb29sKCkgPyAxMiA6IDEwOwotICB9IGVsc2UgewotICAgIGZoZHItPmJpdF9kZXB0aCA9IDg7Ci0gIH0KLQotICBmaGRyLT5jb2xvcl9zcGFjZSA9IHN0YXRpY19jYXN0PFZwOUNvbG9yU3BhY2U+KHJlYWRlcl8uUmVhZExpdGVyYWwoMykpOwotICBpZiAoZmhkci0+Y29sb3Jfc3BhY2UgIT0gVnA5Q29sb3JTcGFjZTo6U1JHQikgewotICAgIGZoZHItPmNvbG9yX3JhbmdlID0gcmVhZGVyXy5SZWFkQm9vbCgpOwotICAgIGlmIChmaGRyLT5wcm9maWxlID09IDEgfHwgZmhkci0+cHJvZmlsZSA9PSAzKSB7Ci0gICAgICBmaGRyLT5zdWJzYW1wbGluZ194ID0gcmVhZGVyXy5SZWFkQm9vbCgpID8gMSA6IDA7Ci0gICAgICBmaGRyLT5zdWJzYW1wbGluZ195ID0gcmVhZGVyXy5SZWFkQm9vbCgpID8gMSA6IDA7Ci0gICAgICBpZiAoZmhkci0+c3Vic2FtcGxpbmdfeCA9PSAxICYmIGZoZHItPnN1YnNhbXBsaW5nX3kgPT0gMSkgewotICAgICAgICBEVkxPRygxKSA8PCAiNDoyOjAgY29sb3Igbm90IHN1cHBvcnRlZCBpbiBwcm9maWxlIDEgb3IgMyI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGJvb2wgcmVzZXJ2ZWQgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgICBpZiAocmVzZXJ2ZWQpIHsKLSAgICAgICAgRFZMT0coMSkgPDwgInJlc2VydmVkIGJpdCBzZXQiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZoZHItPnN1YnNhbXBsaW5nX3ggPSBmaGRyLT5zdWJzYW1wbGluZ195ID0gMTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZmhkci0+Y29sb3JfcmFuZ2UgPSB0cnVlOwotICAgIGlmIChmaGRyLT5wcm9maWxlID09IDEgfHwgZmhkci0+cHJvZmlsZSA9PSAzKSB7Ci0gICAgICBmaGRyLT5zdWJzYW1wbGluZ194ID0gZmhkci0+c3Vic2FtcGxpbmdfeSA9IDA7Ci0KLSAgICAgIGJvb2wgcmVzZXJ2ZWQgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgICBpZiAocmVzZXJ2ZWQpIHsKLSAgICAgICAgRFZMT0coMSkgPDwgInJlc2VydmVkIGJpdCBzZXQiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIERWTE9HKDEpIDw8ICI0OjQ6NCBjb2xvciBub3Qgc3VwcG9ydGVkIGluIHByb2ZpbGUgMCBvciAyIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gNi4yLjMgRnJhbWUgc2l6ZSBzeW50YXgKLXZvaWQgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkRnJhbWVTaXplKFZwOUZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIGZoZHItPmZyYW1lX3dpZHRoID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCgxNikgKyAxOwotICBmaGRyLT5mcmFtZV9oZWlnaHQgPSByZWFkZXJfLlJlYWRMaXRlcmFsKDE2KSArIDE7Ci19Ci0KLS8vIDYuMi40IFJlbmRlciBzaXplIHN5bnRheAotdm9pZCBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWRSZW5kZXJTaXplKFZwOUZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIGlmIChyZWFkZXJfLlJlYWRCb29sKCkpIHsKLSAgICBmaGRyLT5yZW5kZXJfd2lkdGggPSByZWFkZXJfLlJlYWRMaXRlcmFsKDE2KSArIDE7Ci0gICAgZmhkci0+cmVuZGVyX2hlaWdodCA9IHJlYWRlcl8uUmVhZExpdGVyYWwoMTYpICsgMTsKLSAgfSBlbHNlIHsKLSAgICBmaGRyLT5yZW5kZXJfd2lkdGggPSBmaGRyLT5mcmFtZV93aWR0aDsKLSAgICBmaGRyLT5yZW5kZXJfaGVpZ2h0ID0gZmhkci0+ZnJhbWVfaGVpZ2h0OwotICB9Ci19Ci0KLS8vIDYuMi41IEZyYW1lIHNpemUgd2l0aCByZWZzIHN5bnRheAotYm9vbCBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWRGcmFtZVNpemVGcm9tUmVmcyhWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBib29sIGZvdW5kX3JlZiA9IGZhbHNlOwotICBmb3IgKGNvbnN0IGF1dG8mIGlkeCA6IGZoZHItPnJlZl9mcmFtZV9pZHgpIHsKLSAgICBmb3VuZF9yZWYgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgaWYgKGZvdW5kX3JlZikgewotICAgICAgY29uc3QgVnA5UGFyc2VyOjpSZWZlcmVuY2VTbG90JiByZWYgPSBjb250ZXh0Xy0+R2V0UmVmU2xvdChpZHgpOwotICAgICAgRENIRUNLKHJlZi5pbml0aWFsaXplZCk7Ci0gICAgICBmaGRyLT5mcmFtZV93aWR0aCA9IHJlZi5mcmFtZV93aWR0aDsKLSAgICAgIGZoZHItPmZyYW1lX2hlaWdodCA9IHJlZi5mcmFtZV9oZWlnaHQ7Ci0KLSAgICAgIGNvbnN0IHVuc2lnbmVkIGtNYXhEaW1lbnNpb24gPSAxdSA8PCAxNjsKLSAgICAgIERDSEVDS19MRShmaGRyLT5mcmFtZV93aWR0aCwga01heERpbWVuc2lvbik7Ci0gICAgICBEQ0hFQ0tfTEUoZmhkci0+ZnJhbWVfaGVpZ2h0LCBrTWF4RGltZW5zaW9uKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIGlmICghZm91bmRfcmVmKSBSZWFkRnJhbWVTaXplKGZoZHIpOwotCi0gIC8vIDcuMi41IEZyYW1lIHNpemUgd2l0aCByZWZzIHNlbWFudGljcwotICBib29sIGhhc192YWxpZF9yZWZfZnJhbWUgPSBmYWxzZTsKLSAgZm9yIChjb25zdCBhdXRvJiBpZHggOiBmaGRyLT5yZWZfZnJhbWVfaWR4KSB7Ci0gICAgY29uc3QgVnA5UGFyc2VyOjpSZWZlcmVuY2VTbG90JiByZWYgPSBjb250ZXh0Xy0+R2V0UmVmU2xvdChpZHgpOwotICAgIGlmICgyICogZmhkci0+ZnJhbWVfd2lkdGggPj0gcmVmLmZyYW1lX3dpZHRoICYmCi0gICAgICAgIDIgKiBmaGRyLT5mcmFtZV9oZWlnaHQgPj0gcmVmLmZyYW1lX2hlaWdodCAmJgotICAgICAgICBmaGRyLT5mcmFtZV93aWR0aCA8PSAxNiAqIHJlZi5mcmFtZV93aWR0aCAmJgotICAgICAgICBmaGRyLT5mcmFtZV9oZWlnaHQgPD0gMTYgKiByZWYuZnJhbWVfaGVpZ2h0KSB7Ci0gICAgICBoYXNfdmFsaWRfcmVmX2ZyYW1lID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICBpZiAoIWhhc192YWxpZF9yZWZfZnJhbWUpIHsKLSAgICBEVkxPRygxKSA8PCAiVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSByZWZlcmVuY2UgZnJhbWUgbWVldGluZyAiCi0gICAgICAgICAgICAgPDwgInNpemUgY29uZGl0aW9ucy4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFJlYWRSZW5kZXJTaXplKGZoZHIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gNi4yLjcgSW50ZXJwb2xhdGlvbiBmaWx0ZXIgc3ludGF4Ci1WcDlJbnRlcnBvbGF0aW9uRmlsdGVyIFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZEludGVycG9sYXRpb25GaWx0ZXIoKSB7Ci0gIGlmIChyZWFkZXJfLlJlYWRCb29sKCkpIHJldHVybiBWcDlJbnRlcnBvbGF0aW9uRmlsdGVyOjpTV0lUQ0hBQkxFOwotCi0gIC8vIFRoZSBtYXBwaW5nIHRhYmxlIGZvciBuZXh0IHR3byBiaXRzLgotICBjb25zdCBWcDlJbnRlcnBvbGF0aW9uRmlsdGVyIHRhYmxlW10gPSB7Ci0gICAgICBWcDlJbnRlcnBvbGF0aW9uRmlsdGVyOjpFSUdIVFRBUF9TTU9PVEgsIFZwOUludGVycG9sYXRpb25GaWx0ZXI6OkVJR0hUVEFQLAotICAgICAgVnA5SW50ZXJwb2xhdGlvbkZpbHRlcjo6RUlHSFRUQVBfU0hBUlAsIFZwOUludGVycG9sYXRpb25GaWx0ZXI6OkJJTElORUFSLAotICB9OwotICByZXR1cm4gdGFibGVbcmVhZGVyXy5SZWFkTGl0ZXJhbCgyKV07Ci19Ci0KLXZvaWQgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpTZXR1cFBhc3RJbmRlcGVuZGVuY2UoVnA5RnJhbWVIZWFkZXIqIGZoZHIpIHsKLSAgbWVtc2V0KCZjb250ZXh0Xy0+c2VnbWVudGF0aW9uXywgMCwgc2l6ZW9mKGNvbnRleHRfLT5zZWdtZW50YXRpb25fKSk7Ci0gIFJlc2V0TG9vcGZpbHRlcigpOwotICBmaGRyLT5mcmFtZV9jb250ZXh0ID0ga1ZwOURlZmF1bHRGcmFtZUNvbnRleHQ7Ci0gIERDSEVDSyhmaGRyLT5mcmFtZV9jb250ZXh0LklzVmFsaWQoKSk7Ci19Ci0KLS8vIDYuMi44IExvb3AgZmlsdGVyIHBhcmFtcyBzeW50YXgKLXZvaWQgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZWFkTG9vcEZpbHRlclBhcmFtcygpIHsKLSAgVnA5TG9vcEZpbHRlclBhcmFtcyYgbG9vcF9maWx0ZXIgPSBjb250ZXh0Xy0+bG9vcF9maWx0ZXJfOwotCi0gIGxvb3BfZmlsdGVyLmxldmVsID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCg2KTsKLSAgbG9vcF9maWx0ZXIuc2hhcnBuZXNzID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCgzKTsKLSAgbG9vcF9maWx0ZXIuZGVsdGFfdXBkYXRlID0gZmFsc2U7Ci0KLSAgbG9vcF9maWx0ZXIuZGVsdGFfZW5hYmxlZCA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLSAgaWYgKGxvb3BfZmlsdGVyLmRlbHRhX2VuYWJsZWQpIHsKLSAgICBsb29wX2ZpbHRlci5kZWx0YV91cGRhdGUgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgaWYgKGxvb3BfZmlsdGVyLmRlbHRhX3VwZGF0ZSkgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWcDlSZWZUeXBlOjpWUDlfRlJBTUVfTUFYOyBpKyspIHsKLSAgICAgICAgbG9vcF9maWx0ZXIudXBkYXRlX3JlZl9kZWx0YXNbaV0gPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgICAgIGlmIChsb29wX2ZpbHRlci51cGRhdGVfcmVmX2RlbHRhc1tpXSkKLSAgICAgICAgICBsb29wX2ZpbHRlci5yZWZfZGVsdGFzW2ldID0gcmVhZGVyXy5SZWFkU2lnbmVkTGl0ZXJhbCg2KTsKLSAgICAgIH0KLQotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWcDlMb29wRmlsdGVyUGFyYW1zOjprTnVtTW9kZURlbHRhczsgaSsrKSB7Ci0gICAgICAgIGxvb3BfZmlsdGVyLnVwZGF0ZV9tb2RlX2RlbHRhc1tpXSA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLSAgICAgICAgaWYgKGxvb3BfZmlsdGVyLnVwZGF0ZV9tb2RlX2RlbHRhc1tpXSkKLSAgICAgICAgICBsb29wX2ZpbHRlci5tb2RlX2RlbHRhc1tpXSA9IHJlYWRlcl8uUmVhZExpdGVyYWwoNik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLS8vIDYuMi45IFF1YW50aXphdGlvbiBwYXJhbXMgc3ludGF4Ci12b2lkIFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFF1YW50aXphdGlvblBhcmFtcygKLSAgICBWcDlRdWFudGl6YXRpb25QYXJhbXMqIHF1YW50cykgewotICBxdWFudHMtPmJhc2VfcV9pZHggPSByZWFkZXJfLlJlYWRMaXRlcmFsKDgpOwotCi0gIHF1YW50cy0+ZGVsdGFfcV95X2RjID0gUmVhZERlbHRhUSgpOwotICBxdWFudHMtPmRlbHRhX3FfdXZfZGMgPSBSZWFkRGVsdGFRKCk7Ci0gIHF1YW50cy0+ZGVsdGFfcV91dl9hYyA9IFJlYWREZWx0YVEoKTsKLX0KLQotLy8gNi4yLjEwIERlbHRhIHF1YW50aXplciBzeW50YXgKLWludDhfdCBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlJlYWREZWx0YVEoKSB7Ci0gIGlmIChyZWFkZXJfLlJlYWRCb29sKCkpIHJldHVybiByZWFkZXJfLlJlYWRTaWduZWRMaXRlcmFsKDQpOwotICByZXR1cm4gMDsKLX0KLQotLy8gNi4yLjExIFNlZ21lbnRhdGlvbiBwYXJhbXMgc3ludGF4Ci1ib29sIFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFNlZ21lbnRhdGlvblBhcmFtcygpIHsKLSAgVnA5U2VnbWVudGF0aW9uUGFyYW1zJiBzZWdtZW50YXRpb24gPSBjb250ZXh0Xy0+c2VnbWVudGF0aW9uXzsKLSAgc2VnbWVudGF0aW9uLnVwZGF0ZV9tYXAgPSBmYWxzZTsKLSAgc2VnbWVudGF0aW9uLnVwZGF0ZV9kYXRhID0gZmFsc2U7Ci0KLSAgc2VnbWVudGF0aW9uLmVuYWJsZWQgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gIGlmICghc2VnbWVudGF0aW9uLmVuYWJsZWQpIHJldHVybiB0cnVlOwotCi0gIHNlZ21lbnRhdGlvbi51cGRhdGVfbWFwID0gcmVhZGVyXy5SZWFkQm9vbCgpOwotICBpZiAoc2VnbWVudGF0aW9uLnVwZGF0ZV9tYXApIHsKLSAgICBmb3IgKGF1dG8mIHRyZWVfcHJvYiA6IHNlZ21lbnRhdGlvbi50cmVlX3Byb2JzKSB7Ci0gICAgICB0cmVlX3Byb2IgPSBSZWFkUHJvYigpOwotICAgIH0KLQotICAgIHNlZ21lbnRhdGlvbi50ZW1wb3JhbF91cGRhdGUgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgZm9yIChhdXRvJiBwcmVkX3Byb2IgOiBzZWdtZW50YXRpb24ucHJlZF9wcm9icykgewotICAgICAgcHJlZF9wcm9iID0gc2VnbWVudGF0aW9uLnRlbXBvcmFsX3VwZGF0ZSA/IFJlYWRQcm9iKCkgOiBrVnA5TWF4UHJvYjsKLSAgICB9Ci0gIH0KLQotICBzZWdtZW50YXRpb24udXBkYXRlX2RhdGEgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gIGlmIChzZWdtZW50YXRpb24udXBkYXRlX2RhdGEpIHsKLSAgICBzZWdtZW50YXRpb24uYWJzX29yX2RlbHRhX3VwZGF0ZSA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLQotICAgIGNvbnN0IGludCBrRmVhdHVyZURhdGFCaXRzW10gPSB7OCwgNiwgMiwgMH07Ci0gICAgY29uc3QgYm9vbCBrRmVhdHVyZURhdGFTaWduZWRbXSA9IHt0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBWcDlTZWdtZW50YXRpb25QYXJhbXM6OmtOdW1TZWdtZW50czsgaSsrKSB7Ci0gICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFZwOVNlZ21lbnRhdGlvblBhcmFtczo6U0VHX0xWTF9NQVg7IGorKykgewotICAgICAgICBpbnQxNl90IGRhdGEgPSAwOwotICAgICAgICBzZWdtZW50YXRpb24uZmVhdHVyZV9lbmFibGVkW2ldW2pdID0gcmVhZGVyXy5SZWFkQm9vbCgpOwotICAgICAgICBpZiAoc2VnbWVudGF0aW9uLmZlYXR1cmVfZW5hYmxlZFtpXVtqXSkgewotICAgICAgICAgIGRhdGEgPSByZWFkZXJfLlJlYWRMaXRlcmFsKGtGZWF0dXJlRGF0YUJpdHNbal0pOwotICAgICAgICAgIGlmIChrRmVhdHVyZURhdGFTaWduZWRbal0pIHsKLSAgICAgICAgICAgIGlmIChyZWFkZXJfLlJlYWRCb29sKCkpIHsKLSAgICAgICAgICAgICAgLy8gNy4yLjkKLSAgICAgICAgICAgICAgaWYgKHNlZ21lbnRhdGlvbi5hYnNfb3JfZGVsdGFfdXBkYXRlKSB7Ci0gICAgICAgICAgICAgICAgRFZMT0coMSkgPDwgImZlYXR1cmVfc2lnbiBzaG91bGQgYmUgMCIKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGlmIGFic19vcl9kZWx0YV91cGRhdGUgaXMgMSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGRhdGEgPSAtZGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2VnbWVudGF0aW9uLmZlYXR1cmVfZGF0YVtpXVtqXSA9IGRhdGE7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyA2LjIuMTIgUHJvYmFiaWxpdHkgc3ludGF4Ci11aW50OF90IFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFByb2IoKSB7Ci0gIHJldHVybiByZWFkZXJfLlJlYWRCb29sKCkgPyByZWFkZXJfLlJlYWRMaXRlcmFsKDgpIDoga1ZwOU1heFByb2I7Ci19Ci0KLS8vIDYuMi4xMyBUaWxlIGluZm8gc3ludGF4Ci1ib29sIFZwOVVuY29tcHJlc3NlZEhlYWRlclBhcnNlcjo6UmVhZFRpbGVJbmZvKFZwOUZyYW1lSGVhZGVyKiBmaGRyKSB7Ci0gIGludCBzYjY0X2NvbHMgPSAoZmhkci0+ZnJhbWVfd2lkdGggKyA2MykgLyA2NDsKLQotICBpbnQgbWluX2xvZzJfdGlsZV9jb2xzID0gR2V0TWluTG9nMlRpbGVDb2xzKHNiNjRfY29scyk7Ci0gIGludCBtYXhfbG9nMl90aWxlX2NvbHMgPSBHZXRNYXhMb2cyVGlsZUNvbHMoc2I2NF9jb2xzKTsKLQotICBpbnQgbWF4X29uZXMgPSBtYXhfbG9nMl90aWxlX2NvbHMgLSBtaW5fbG9nMl90aWxlX2NvbHM7Ci0gIGZoZHItPnRpbGVfY29sc19sb2cyID0gbWluX2xvZzJfdGlsZV9jb2xzOwotICB3aGlsZSAobWF4X29uZXMtLSAmJiByZWFkZXJfLlJlYWRCb29sKCkpIGZoZHItPnRpbGVfY29sc19sb2cyKys7Ci0KLSAgZmhkci0+dGlsZV9yb3dzX2xvZzIgPSByZWFkZXJfLlJlYWRCb29sKCkgPyAxIDogMDsKLSAgaWYgKGZoZHItPnRpbGVfcm93c19sb2cyID4gMCAmJiByZWFkZXJfLlJlYWRCb29sKCkpIGZoZHItPnRpbGVfcm93c19sb2cyKys7Ci0KLSAgLy8gNy4yLjExIFRpbGUgaW5mbyBzZW1hbnRpY3MKLSAgaWYgKGZoZHItPnRpbGVfY29sc19sb2cyID4gNikgewotICAgIERWTE9HKDEpIDw8ICJ0aWxlX2NvbHNfbG9nMiBzaG91bGQgYmUgPD0gNiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpSZXNldExvb3BmaWx0ZXIoKSB7Ci0gIFZwOUxvb3BGaWx0ZXJQYXJhbXMmIGxvb3BfZmlsdGVyID0gY29udGV4dF8tPmxvb3BfZmlsdGVyXzsKLQotICBsb29wX2ZpbHRlci5kZWx0YV9lbmFibGVkID0gdHJ1ZTsKLSAgbG9vcF9maWx0ZXIuZGVsdGFfdXBkYXRlID0gdHJ1ZTsKLQotICBsb29wX2ZpbHRlci5yZWZfZGVsdGFzW1ZQOV9GUkFNRV9JTlRSQV0gPSAxOwotICBsb29wX2ZpbHRlci5yZWZfZGVsdGFzW1ZQOV9GUkFNRV9MQVNUXSA9IDA7Ci0gIGxvb3BfZmlsdGVyLnJlZl9kZWx0YXNbVlA5X0ZSQU1FX0dPTERFTl0gPSAtMTsKLSAgbG9vcF9maWx0ZXIucmVmX2RlbHRhc1tWUDlfRlJBTUVfQUxUUkVGXSA9IC0xOwotCi0gIG1lbXNldChsb29wX2ZpbHRlci5tb2RlX2RlbHRhcywgMCwgc2l6ZW9mKGxvb3BfZmlsdGVyLm1vZGVfZGVsdGFzKSk7Ci19Ci0KLS8vIDYuMiBVbmNvbXByZXNzZWQgaGVhZGVyIHN5bnRheAotYm9vbCBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXI6OlBhcnNlKGNvbnN0IHVpbnQ4X3QqIHN0cmVhbSwgb2ZmX3QgZnJhbWVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcDlGcmFtZUhlYWRlciogZmhkcikgewotICBEVkxPRygyKSA8PCAiVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyOjpQYXJzZSI7Ci0gIHJlYWRlcl8uSW5pdGlhbGl6ZShzdHJlYW0sIGZyYW1lX3NpemUpOwotCi0gIGZoZHItPmRhdGEgPSBzdHJlYW07Ci0gIGZoZHItPmZyYW1lX3NpemUgPSBmcmFtZV9zaXplOwotCi0gIC8vIGZyYW1lIG1hcmtlcgotICBpZiAocmVhZGVyXy5SZWFkTGl0ZXJhbCgyKSAhPSAweDIpIHsKLSAgICBEVkxPRygxKSA8PCAiZnJhbWUgbWFya2VyIHNoYWxsIGJlIGVxdWFsIHRvIDIiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGZoZHItPnByb2ZpbGUgPSBSZWFkUHJvZmlsZSgpOwotICBpZiAoZmhkci0+cHJvZmlsZSA+PSBrVnA5TWF4UHJvZmlsZSkgewotICAgIERWTE9HKDEpIDw8ICJVbnN1cHBvcnRlZCBiaXRzdHJlYW0gcHJvZmlsZSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgZmhkci0+c2hvd19leGlzdGluZ19mcmFtZSA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLSAgaWYgKGZoZHItPnNob3dfZXhpc3RpbmdfZnJhbWUpIHsKLSAgICBmaGRyLT5mcmFtZV90b19zaG93X21hcF9pZHggPSByZWFkZXJfLlJlYWRMaXRlcmFsKDMpOwotICAgIGZoZHItPnNob3dfZnJhbWUgPSB0cnVlOwotCi0gICAgaWYgKCFyZWFkZXJfLkNvbnN1bWVUcmFpbGluZ0JpdHMoKSkgewotICAgICAgRFZMT0coMSkgPDwgInRyYWlsaW5nIGJpdHMgYXJlIG5vdCB6ZXJvIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFyZWFkZXJfLklzVmFsaWQoKSkgewotICAgICAgRFZMT0coMSkgPDwgInBhcnNlciByZWFkcyBiZXlvbmQgdGhlIGVuZCBvZiBidWZmZXIiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmaGRyLT51bmNvbXByZXNzZWRfaGVhZGVyX3NpemUgPSByZWFkZXJfLkdldEJ5dGVzUmVhZCgpOwotICAgIGZoZHItPmhlYWRlcl9zaXplX2luX2J5dGVzID0gMDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZoZHItPmZyYW1lX3R5cGUgPSBzdGF0aWNfY2FzdDxWcDlGcmFtZUhlYWRlcjo6RnJhbWVUeXBlPihyZWFkZXJfLlJlYWRCb29sKCkpOwotICBmaGRyLT5zaG93X2ZyYW1lID0gcmVhZGVyXy5SZWFkQm9vbCgpOwotICBmaGRyLT5lcnJvcl9yZXNpbGllbnRfbW9kZSA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLQotICBpZiAoZmhkci0+SXNLZXlmcmFtZSgpKSB7Ci0gICAgaWYgKCFWZXJpZnlTeW5jQ29kZSgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIVJlYWRDb2xvckNvbmZpZyhmaGRyKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVhZEZyYW1lU2l6ZShmaGRyKTsKLSAgICBSZWFkUmVuZGVyU2l6ZShmaGRyKTsKLSAgICBmaGRyLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMHhmZjsKLSAgfSBlbHNlIHsKLSAgICBpZiAoIWZoZHItPnNob3dfZnJhbWUpIGZoZHItPmludHJhX29ubHkgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0KLSAgICBpZiAoIWZoZHItPmVycm9yX3Jlc2lsaWVudF9tb2RlKQotICAgICAgZmhkci0+cmVzZXRfZnJhbWVfY29udGV4dCA9IHJlYWRlcl8uUmVhZExpdGVyYWwoMik7Ci0KLSAgICBpZiAoZmhkci0+aW50cmFfb25seSkgewotICAgICAgaWYgKCFWZXJpZnlTeW5jQ29kZSgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgIGlmIChmaGRyLT5wcm9maWxlID4gMCkgewotICAgICAgICBpZiAoIVJlYWRDb2xvckNvbmZpZyhmaGRyKSkgcmV0dXJuIGZhbHNlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZmhkci0+Yml0X2RlcHRoID0gODsKLSAgICAgICAgZmhkci0+Y29sb3Jfc3BhY2UgPSBWcDlDb2xvclNwYWNlOjpCVF82MDE7Ci0gICAgICAgIGZoZHItPnN1YnNhbXBsaW5nX3ggPSBmaGRyLT5zdWJzYW1wbGluZ195ID0gMTsKLSAgICAgIH0KLQotICAgICAgZmhkci0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IHJlYWRlcl8uUmVhZExpdGVyYWwoOCk7Ci0KLSAgICAgIFJlYWRGcmFtZVNpemUoZmhkcik7Ci0gICAgICBSZWFkUmVuZGVyU2l6ZShmaGRyKTsKLSAgICB9IGVsc2UgewotICAgICAgZmhkci0+cmVmcmVzaF9mcmFtZV9mbGFncyA9IHJlYWRlcl8uUmVhZExpdGVyYWwoOCk7Ci0KLSAgICAgIHN0YXRpY19hc3NlcnQoYXJyYXlzaXplKGZoZHItPnJlZl9mcmFtZV9zaWduX2JpYXMpID49Ci0gICAgICAgICAgICAgICAgICAgICAgICBWcDlSZWZUeXBlOjpWUDlfRlJBTUVfTEFTVCArIGtWcDlOdW1SZWZzUGVyRnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICJyZWZfZnJhbWVfc2lnbl9iaWFzIGlzIG5vdCBiaWcgZW5vdWdoIik7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtWcDlOdW1SZWZzUGVyRnJhbWU7IGkrKykgewotICAgICAgICBmaGRyLT5yZWZfZnJhbWVfaWR4W2ldID0gcmVhZGVyXy5SZWFkTGl0ZXJhbChrVnA5TnVtUmVmRnJhbWVzTG9nMik7Ci0gICAgICAgIGZoZHItPnJlZl9mcmFtZV9zaWduX2JpYXNbVnA5UmVmVHlwZTo6VlA5X0ZSQU1FX0xBU1QgKyBpXSA9Ci0gICAgICAgICAgICByZWFkZXJfLlJlYWRCb29sKCk7Ci0KLSAgICAgICAgLy8gOC4yIEZyYW1lIG9yZGVyIGNvbnN0cmFpbnRzCi0gICAgICAgIC8vIHJlZl9mcmFtZV9pZHhbaV0gcmVmZXJzIHRvIGFuIGVhcmxpZXIgZGVjb2RlZCBmcmFtZS4KLSAgICAgICAgY29uc3QgVnA5UGFyc2VyOjpSZWZlcmVuY2VTbG90JiByZWYgPQotICAgICAgICAgICAgY29udGV4dF8tPkdldFJlZlNsb3QoZmhkci0+cmVmX2ZyYW1lX2lkeFtpXSk7Ci0gICAgICAgIGlmICghcmVmLmluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgRFZMT0coMSkgPDwgInJlZl9mcmFtZV9pZHhbIiA8PCBpCi0gICAgICAgICAgICAgICAgICAgPDwgIl09IiA8PCBzdGF0aWNfY2FzdDxpbnQ+KGZoZHItPnJlZl9mcmFtZV9pZHhbaV0pCi0gICAgICAgICAgICAgICAgICAgPDwgIiByZWZlcnMgdG8gdW51c2VkIGZyYW1lIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA3LjIgVW5jb21wcmVzc2VkIGhlYWRlciBzZW1hbnRpY3MKLSAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHJlZmVyZW5jZSBmcmFtZXMgbWF0Y2ggdGhlIGN1cnJlbnQgZnJhbWUgaW4gYml0IGRlcHRoLAotICAgICAgICAvLyBwcm9maWxlLCBjaHJvbWEgc3Vic2FtcGxpbmcsIGFuZCBjb2xvciBzcGFjZS4KLSAgICAgICAgaWYgKHJlZi5wcm9maWxlICE9IGZoZHItPnByb2ZpbGUpIHsKLSAgICAgICAgICBEVkxPRygxKSA8PCAicHJvZmlsZSBvZiByZWZlcmVuY2VkIGZyYW1lIG1pc21hdGNoIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPT0gMCkgewotICAgICAgICAgIC8vIEJlbG93IGZpZWxkcyBhcmUgbm90IHNwZWNpZmllZCBmb3IgaW50ZXItZnJhbWUgaW4gaGVhZGVyLCBzbyBjb3B5Ci0gICAgICAgICAgLy8gdGhlbSBmcm9tIHJlZmVyZW5jZWQgZnJhbWUuCi0gICAgICAgICAgZmhkci0+Yml0X2RlcHRoID0gcmVmLmJpdF9kZXB0aDsKLSAgICAgICAgICBmaGRyLT5jb2xvcl9zcGFjZSA9IHJlZi5jb2xvcl9zcGFjZTsKLSAgICAgICAgICBmaGRyLT5zdWJzYW1wbGluZ194ID0gcmVmLnN1YnNhbXBsaW5nX3g7Ci0gICAgICAgICAgZmhkci0+c3Vic2FtcGxpbmdfeSA9IHJlZi5zdWJzYW1wbGluZ195OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChmaGRyLT5iaXRfZGVwdGggIT0gcmVmLmJpdF9kZXB0aCkgewotICAgICAgICAgICAgRFZMT0coMSkgPDwgImJpdF9kZXB0aCBvZiByZWZlcmVuY2VkIGZyYW1lIG1pc21hdGNoIjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZoZHItPmNvbG9yX3NwYWNlICE9IHJlZi5jb2xvcl9zcGFjZSkgewotICAgICAgICAgICAgRFZMT0coMSkgPDwgImNvbG9yX3NwYWNlIG9mIHJlZmVyZW5jZWQgZnJhbWUgbWlzbWF0Y2giOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZmhkci0+c3Vic2FtcGxpbmdfeCAhPSByZWYuc3Vic2FtcGxpbmdfeCB8fAotICAgICAgICAgICAgICBmaGRyLT5zdWJzYW1wbGluZ195ICE9IHJlZi5zdWJzYW1wbGluZ195KSB7Ci0gICAgICAgICAgICBEVkxPRygxKSA8PCAiY2hyb21hIHN1YnNhbXBsaW5nIG9mIHJlZmVyZW5jZWQgZnJhbWUgbWlzbWF0Y2giOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIVJlYWRGcmFtZVNpemVGcm9tUmVmcyhmaGRyKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICBmaGRyLT5hbGxvd19oaWdoX3ByZWNpc2lvbl9tdiA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLSAgICAgIGZoZHItPmludGVycG9sYXRpb25fZmlsdGVyID0gUmVhZEludGVycG9sYXRpb25GaWx0ZXIoKTsKLSAgICB9Ci0gIH0KLQotICBpZiAoZmhkci0+ZXJyb3JfcmVzaWxpZW50X21vZGUpIHsKLSAgICBmaGRyLT5yZWZyZXNoX2ZyYW1lX2NvbnRleHQgPSBmYWxzZTsKLSAgICBmaGRyLT5mcmFtZV9wYXJhbGxlbF9kZWNvZGluZ19tb2RlID0gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBmaGRyLT5yZWZyZXNoX2ZyYW1lX2NvbnRleHQgPSByZWFkZXJfLlJlYWRCb29sKCk7Ci0gICAgZmhkci0+ZnJhbWVfcGFyYWxsZWxfZGVjb2RpbmdfbW9kZSA9IHJlYWRlcl8uUmVhZEJvb2woKTsKLSAgfQotCi0gIGZoZHItPmZyYW1lX2NvbnRleHRfaWR4X3RvX3NhdmVfcHJvYnMgPSBmaGRyLT5mcmFtZV9jb250ZXh0X2lkeCA9Ci0gICAgICByZWFkZXJfLlJlYWRMaXRlcmFsKGtWcDlOdW1GcmFtZUNvbnRleHRzTG9nMik7Ci0KLSAgaWYgKGZoZHItPklzSW50cmEoKSkgewotICAgIFNldHVwUGFzdEluZGVwZW5kZW5jZShmaGRyKTsKLSAgICBpZiAoZmhkci0+SXNLZXlmcmFtZSgpIHx8IGZoZHItPmVycm9yX3Jlc2lsaWVudF9tb2RlIHx8Ci0gICAgICAgIGZoZHItPnJlc2V0X2ZyYW1lX2NvbnRleHQgPT0gMykgewotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrVnA5TnVtRnJhbWVDb250ZXh0czsgKytpKQotICAgICAgICBjb250ZXh0Xy0+VXBkYXRlRnJhbWVDb250ZXh0KGksIGZoZHItPmZyYW1lX2NvbnRleHQpOwotICAgIH0gZWxzZSBpZiAoZmhkci0+cmVzZXRfZnJhbWVfY29udGV4dCA9PSAyKSB7Ci0gICAgICBjb250ZXh0Xy0+VXBkYXRlRnJhbWVDb250ZXh0KGZoZHItPmZyYW1lX2NvbnRleHRfaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaGRyLT5mcmFtZV9jb250ZXh0KTsKLSAgICB9Ci0gICAgZmhkci0+ZnJhbWVfY29udGV4dF9pZHggPSAwOwotICB9Ci0KLSAgUmVhZExvb3BGaWx0ZXJQYXJhbXMoKTsKLSAgUmVhZFF1YW50aXphdGlvblBhcmFtcygmZmhkci0+cXVhbnRfcGFyYW1zKTsKLSAgaWYgKCFSZWFkU2VnbWVudGF0aW9uUGFyYW1zKCkpIHJldHVybiBmYWxzZTsKLQotICBpZiAoIVJlYWRUaWxlSW5mbyhmaGRyKSkgcmV0dXJuIGZhbHNlOwotCi0gIGZoZHItPmhlYWRlcl9zaXplX2luX2J5dGVzID0gcmVhZGVyXy5SZWFkTGl0ZXJhbCgxNik7Ci0gIGlmIChmaGRyLT5oZWFkZXJfc2l6ZV9pbl9ieXRlcyA9PSAwKSB7Ci0gICAgRFZMT0coMSkgPDwgImludmFsaWQgaGVhZGVyIHNpemUiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmICghcmVhZGVyXy5Db25zdW1lVHJhaWxpbmdCaXRzKCkpIHsKLSAgICBEVkxPRygxKSA8PCAidHJhaWxpbmcgYml0cyBhcmUgbm90IHplcm8iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoIXJlYWRlcl8uSXNWYWxpZCgpKSB7Ci0gICAgRFZMT0coMSkgPDwgInBhcnNlciByZWFkcyBiZXlvbmQgdGhlIGVuZCBvZiBidWZmZXIiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBmaGRyLT51bmNvbXByZXNzZWRfaGVhZGVyX3NpemUgPSByZWFkZXJfLkdldEJ5dGVzUmVhZCgpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV91bmNvbXByZXNzZWRfaGVhZGVyX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3VuY29tcHJlc3NlZF9oZWFkZXJfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNWVhNmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3VuY29tcHJlc3NlZF9oZWFkZXJfcGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZJTFRFUlNfVlA5X1VOQ09NUFJFU1NFRF9IRUFERVJfUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9VTkNPTVBSRVNTRURfSEVBREVSX1BBUlNFUl9IXwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvdnA5X3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3ZwOV9yYXdfYml0c19yZWFkZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBWcDlVbmNvbXByZXNzZWRIZWFkZXJQYXJzZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyKFZwOVBhcnNlcjo6Q29udGV4dCogY29udGV4dCk7Ci0KLSAgLy8gUGFyc2VzIFZQOSB1bmNvbXByZXNzZWQgaGVhZGVyIGluIHxzdHJlYW18IHdpdGggfGZyYW1lX3NpemV8IGludG8gfGZoZHJ8LgotICAvLyBSZXR1cm5zIHRydWUgaWYgbm8gZXJyb3IuCi0gIGJvb2wgUGFyc2UoY29uc3QgdWludDhfdCogc3RyZWFtLCBvZmZfdCBmcmFtZV9zaXplLCBWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0KLSBwcml2YXRlOgotICB1aW50OF90IFJlYWRQcm9maWxlKCk7Ci0gIGJvb2wgVmVyaWZ5U3luY0NvZGUoKTsKLSAgYm9vbCBSZWFkQ29sb3JDb25maWcoVnA5RnJhbWVIZWFkZXIqIGZoZHIpOwotICB2b2lkIFJlYWRGcmFtZVNpemUoVnA5RnJhbWVIZWFkZXIqIGZoZHIpOwotICBib29sIFJlYWRGcmFtZVNpemVGcm9tUmVmcyhWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0gIHZvaWQgUmVhZFJlbmRlclNpemUoVnA5RnJhbWVIZWFkZXIqIGZoZHIpOwotICBWcDlJbnRlcnBvbGF0aW9uRmlsdGVyIFJlYWRJbnRlcnBvbGF0aW9uRmlsdGVyKCk7Ci0gIHZvaWQgUmVzZXRMb29wZmlsdGVyKCk7Ci0gIHZvaWQgU2V0dXBQYXN0SW5kZXBlbmRlbmNlKFZwOUZyYW1lSGVhZGVyKiBmaGRyKTsKLSAgdm9pZCBSZWFkTG9vcEZpbHRlclBhcmFtcygpOwotICB2b2lkIFJlYWRRdWFudGl6YXRpb25QYXJhbXMoVnA5UXVhbnRpemF0aW9uUGFyYW1zKiBxdWFudHMpOwotICBpbnQ4X3QgUmVhZERlbHRhUSgpOwotICB1aW50OF90IFJlYWRQcm9iKCk7Ci0gIGJvb2wgUmVhZFNlZ21lbnRhdGlvblBhcmFtcygpOwotICBib29sIFJlYWRUaWxlSW5mbyhWcDlGcmFtZUhlYWRlciogZmhkcik7Ci0KLSAgLy8gUmF3IGJpdHMgcmVhZGVyIGZvciB1bmNvbXByZXNzZWQgZnJhbWUgaGVhZGVyLgotICBWcDlSYXdCaXRzUmVhZGVyIHJlYWRlcl87Ci0KLSAgVnA5UGFyc2VyOjpDb250ZXh0KiBjb250ZXh0XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVnA5VW5jb21wcmVzc2VkSGVhZGVyUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX1ZQOV9VTkNPTVBSRVNTRURfSEVBREVSX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvd2VidnR0X3V0aWwuaCBiL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3dlYnZ0dF91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MmZjODcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvd2VidnR0X3V0aWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19XRUJWVFRfVVRJTF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRklMVEVSU19XRUJWVFRfVVRJTF9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgc2lkZSBkYXRhIGl0ZW0gZm9yIGRlY29kZXIgYnVmZmVyLgotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci12b2lkIE1ha2VTaWRlRGF0YShUIGlkX2JlZ2luLCBUIGlkX2VuZCwgVCBzZXR0aW5nc19iZWdpbiwgVCBzZXR0aW5nc19lbmQsCi0gICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90Piogc2lkZV9kYXRhKSB7Ci0gIC8vIFRoZSBEZWNvZGVyQnVmZmVyIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgc2lkZSBkYXRhIGl0ZW0uIEluIHRoZSBjYXNlIG9mCi0gIC8vIGEgV2ViVlRUIGN1ZSwgd2UgY2FuIGhhdmUgcG90ZW50aWFsbHkgdHdvIHNpZGUgZGF0YSBpdGVtcy4gSW4gb3JkZXIgdG8KLSAgLy8gYXZvaWQgZGlzcnVwdGluZyBEZWNvZGVyQnVmZmVyIGFueSBtb3JlIHRoYW4gd2UgbmVlZCB0bywgd2UgY29weSBib3RoCi0gIC8vIHNpZGUgZGF0YSBpdGVtcyBvbnRvIGEgc2luZ2xlIG9uZSwgYW5kIHRlcm1pbmF0ZSBlYWNoIHdpdGggYSBOVUwgbWFya2VyLgotICBzaWRlX2RhdGEtPmNsZWFyKCk7Ci0gIHNpZGVfZGF0YS0+aW5zZXJ0KHNpZGVfZGF0YS0+ZW5kKCksIGlkX2JlZ2luLCBpZF9lbmQpOwotICBzaWRlX2RhdGEtPnB1c2hfYmFjaygwKTsKLSAgc2lkZV9kYXRhLT5pbnNlcnQoc2lkZV9kYXRhLT5lbmQoKSwgc2V0dGluZ3NfYmVnaW4sIHNldHRpbmdzX2VuZCk7Ci0gIHNpZGVfZGF0YS0+cHVzaF9iYWNrKDApOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRklMVEVSU19XRUJWVFRfVVRJTF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvd3NvbGFfaW50ZXJuYWxzLmNjIGIvY29iYWx0L21lZGlhL2ZpbHRlcnMvd3NvbGFfaW50ZXJuYWxzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTM3MmU3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9maWx0ZXJzL3dzb2xhX2ludGVybmFscy5jYworKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIE1TVkMrKyByZXF1aXJlcyB0aGlzIHRvIGJlIHNldCBiZWZvcmUgYW55IG90aGVyIGluY2x1ZGVzIHRvIGdldCBNX1BJLgotI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvd3NvbGFfaW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2J1cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgaW50ZXJuYWwgewotCi1ib29sIEluSW50ZXJ2YWwoaW50IG4sIEludGVydmFsIHEpIHsgcmV0dXJuIG4gPj0gcS5maXJzdCAmJiBuIDw9IHEuc2Vjb25kOyB9Ci0KLWZsb2F0IE11bHRpQ2hhbm5lbFNpbWlsYXJpdHlNZWFzdXJlKGNvbnN0IGZsb2F0KiBkb3RfcHJvZF9hX2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZW5lcmd5X2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZW5lcmd5X2IsIGludCBjaGFubmVscykgewotICBjb25zdCBmbG9hdCBrRXBzaWxvbiA9IDFlLTEyZjsKLSAgZmxvYXQgc2ltaWxhcml0eV9tZWFzdXJlID0gMC4wZjsKLSAgZm9yIChpbnQgbiA9IDA7IG4gPCBjaGFubmVsczsgKytuKSB7Ci0gICAgc2ltaWxhcml0eV9tZWFzdXJlICs9Ci0gICAgICAgIGRvdF9wcm9kX2FfYltuXSAvIHNxcnQoZW5lcmd5X2Fbbl0gKiBlbmVyZ3lfYltuXSArIGtFcHNpbG9uKTsKLSAgfQotICByZXR1cm4gc2ltaWxhcml0eV9tZWFzdXJlOwotfQotCi12b2lkIE11bHRpQ2hhbm5lbERvdFByb2R1Y3QoY29uc3QgQXVkaW9CdXMqIGEsIGludCBmcmFtZV9vZmZzZXRfYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0J1cyogYiwgaW50IGZyYW1lX29mZnNldF9iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fZnJhbWVzLCBmbG9hdCogZG90X3Byb2R1Y3QpIHsKLSAgRENIRUNLX0VRKGEtPmNoYW5uZWxzKCksIGItPmNoYW5uZWxzKCkpOwotICBEQ0hFQ0tfR0UoZnJhbWVfb2Zmc2V0X2EsIDApOwotICBEQ0hFQ0tfR0UoZnJhbWVfb2Zmc2V0X2IsIDApOwotICBEQ0hFQ0tfTEUoZnJhbWVfb2Zmc2V0X2EgKyBudW1fZnJhbWVzLCBhLT5mcmFtZXMoKSk7Ci0gIERDSEVDS19MRShmcmFtZV9vZmZzZXRfYiArIG51bV9mcmFtZXMsIGItPmZyYW1lcygpKTsKLQotICBtZW1zZXQoZG90X3Byb2R1Y3QsIDAsIHNpemVvZigqZG90X3Byb2R1Y3QpICogYS0+Y2hhbm5lbHMoKSk7Ci0gIGZvciAoaW50IGsgPSAwOyBrIDwgYS0+Y2hhbm5lbHMoKTsgKytrKSB7Ci0gICAgY29uc3QgZmxvYXQqIGNoX2EgPSBhLT5jaGFubmVsKGspICsgZnJhbWVfb2Zmc2V0X2E7Ci0gICAgY29uc3QgZmxvYXQqIGNoX2IgPSBiLT5jaGFubmVsKGspICsgZnJhbWVfb2Zmc2V0X2I7Ci0gICAgZm9yIChpbnQgbiA9IDA7IG4gPCBudW1fZnJhbWVzOyArK24pIHsKLSAgICAgIGRvdF9wcm9kdWN0W2tdICs9ICpjaF9hKysgKiAqY2hfYisrOwotICAgIH0KLSAgfQotfQotCi12b2lkIE11bHRpQ2hhbm5lbE1vdmluZ0Jsb2NrRW5lcmdpZXMoY29uc3QgQXVkaW9CdXMqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmFtZXNfcGVyX2Jsb2NrLCBmbG9hdCogZW5lcmd5KSB7Ci0gIGludCBudW1fYmxvY2tzID0gaW5wdXQtPmZyYW1lcygpIC0gKGZyYW1lc19wZXJfYmxvY2sgLSAxKTsKLSAgaW50IGNoYW5uZWxzID0gaW5wdXQtPmNoYW5uZWxzKCk7Ci0KLSAgZm9yIChpbnQgayA9IDA7IGsgPCBpbnB1dC0+Y2hhbm5lbHMoKTsgKytrKSB7Ci0gICAgY29uc3QgZmxvYXQqIGlucHV0X2NoYW5uZWwgPSBpbnB1dC0+Y2hhbm5lbChrKTsKLQotICAgIGVuZXJneVtrXSA9IDA7Ci0KLSAgICAvLyBGaXJzdCBibG9jayBvZiBjaGFubmVsIHxrfC4KLSAgICBmb3IgKGludCBtID0gMDsgbSA8IGZyYW1lc19wZXJfYmxvY2s7ICsrbSkgewotICAgICAgZW5lcmd5W2tdICs9IGlucHV0X2NoYW5uZWxbbV0gKiBpbnB1dF9jaGFubmVsW21dOwotICAgIH0KLQotICAgIGNvbnN0IGZsb2F0KiBzbGlkZV9vdXQgPSBpbnB1dF9jaGFubmVsOwotICAgIGNvbnN0IGZsb2F0KiBzbGlkZV9pbiA9IGlucHV0X2NoYW5uZWwgKyBmcmFtZXNfcGVyX2Jsb2NrOwotICAgIGZvciAoaW50IG4gPSAxOyBuIDwgbnVtX2Jsb2NrczsgKytuLCArK3NsaWRlX2luLCArK3NsaWRlX291dCkgewotICAgICAgZW5lcmd5W2sgKyBuICogY2hhbm5lbHNdID0gZW5lcmd5W2sgKyAobiAtIDEpICogY2hhbm5lbHNdIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzbGlkZV9vdXQgKiAqc2xpZGVfb3V0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzbGlkZV9pbiAqICpzbGlkZV9pbjsKLSAgICB9Ci0gIH0KLX0KLQotLy8gRml0IHRoZSBjdXJ2ZSBmKHgpID0gYSAqIHheMiArIGIgKiB4ICsgYyBzdWNoIHRoYXQKLS8vICAgZigtMSkgPSB5WzBdCi0vLyAgIGYoMCkgPSB5WzFdCi0vLyAgIGYoMSkgPSB5WzJdCi0vLyBhbmQgcmV0dXJuIHRoZSBtYXhpbXVtLCBhc3N1bWluZyB0aGF0IHlbMF0gPD0geVsxXSA+PSB5WzJdLgotdm9pZCBRdWFkcmF0aWNJbnRlcnBvbGF0aW9uKGNvbnN0IGZsb2F0KiB5X3ZhbHVlcywgZmxvYXQqIGV4dHJlbXVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBleHRyZW11bV92YWx1ZSkgewotICBmbG9hdCBhID0gMC41ZiAqICh5X3ZhbHVlc1syXSArIHlfdmFsdWVzWzBdKSAtIHlfdmFsdWVzWzFdOwotICBmbG9hdCBiID0gMC41ZiAqICh5X3ZhbHVlc1syXSAtIHlfdmFsdWVzWzBdKTsKLSAgZmxvYXQgYyA9IHlfdmFsdWVzWzFdOwotCi0gIGlmIChhID09IDAuZikgewotICAgIC8vIFRoZSBjb29yZGluYXRlcyBhcmUgY29saW5lYXIgKHdpdGhpbiBmbG9hdGluZy1wb2ludCBlcnJvcikuCi0gICAgKmV4dHJlbXVtID0gMDsKLSAgICAqZXh0cmVtdW1fdmFsdWUgPSB5X3ZhbHVlc1sxXTsKLSAgfSBlbHNlIHsKLSAgICAqZXh0cmVtdW0gPSAtYiAvICgyLmYgKiBhKTsKLSAgICAqZXh0cmVtdW1fdmFsdWUgPSBhICogKCpleHRyZW11bSkgKiAoKmV4dHJlbXVtKSArIGIgKiAoKmV4dHJlbXVtKSArIGM7Ci0gIH0KLX0KLQotaW50IERlY2ltYXRlZFNlYXJjaChpbnQgZGVjaW1hdGlvbiwgSW50ZXJ2YWwgZXhjbHVkZV9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9CdXMqIHRhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9CdXMqIHNlYXJjaF9zZWdtZW50LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZW5lcmd5X3RhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGVuZXJneV9jYW5kaWRhdGVfYmxvY2tzKSB7Ci0gIGludCBjaGFubmVscyA9IHNlYXJjaF9zZWdtZW50LT5jaGFubmVscygpOwotICBpbnQgYmxvY2tfc2l6ZSA9IHRhcmdldF9ibG9jay0+ZnJhbWVzKCk7Ci0gIGludCBudW1fY2FuZGlkYXRlX2Jsb2NrcyA9IHNlYXJjaF9zZWdtZW50LT5mcmFtZXMoKSAtIChibG9ja19zaXplIC0gMSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxmbG9hdFtdPiBkb3RfcHJvZChuZXcgZmxvYXRbY2hhbm5lbHNdKTsKLSAgZmxvYXQgc2ltaWxhcml0eVszXTsgIC8vIFRocmVlIGVsZW1lbnRzIGZvciBjdWJpYyBpbnRlcnBvbGF0aW9uLgotCi0gIGludCBuID0gMDsKLSAgTXVsdGlDaGFubmVsRG90UHJvZHVjdCh0YXJnZXRfYmxvY2ssIDAsIHNlYXJjaF9zZWdtZW50LCBuLCBibG9ja19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRvdF9wcm9kLmdldCgpKTsKLSAgc2ltaWxhcml0eVswXSA9IE11bHRpQ2hhbm5lbFNpbWlsYXJpdHlNZWFzdXJlKAotICAgICAgZG90X3Byb2QuZ2V0KCksIGVuZXJneV90YXJnZXRfYmxvY2ssCi0gICAgICAmZW5lcmd5X2NhbmRpZGF0ZV9ibG9ja3NbbiAqIGNoYW5uZWxzXSwgY2hhbm5lbHMpOwotCi0gIC8vIFNldCB0aGUgc3RhcnRpbmcgcG9pbnQgYXMgb3B0aW1hbCBwb2ludC4KLSAgZmxvYXQgYmVzdF9zaW1pbGFyaXR5ID0gc2ltaWxhcml0eVswXTsKLSAgaW50IG9wdGltYWxfaW5kZXggPSAwOwotCi0gIG4gKz0gZGVjaW1hdGlvbjsKLSAgaWYgKG4gPj0gbnVtX2NhbmRpZGF0ZV9ibG9ja3MpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIE11bHRpQ2hhbm5lbERvdFByb2R1Y3QodGFyZ2V0X2Jsb2NrLCAwLCBzZWFyY2hfc2VnbWVudCwgbiwgYmxvY2tfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkb3RfcHJvZC5nZXQoKSk7Ci0gIHNpbWlsYXJpdHlbMV0gPSBNdWx0aUNoYW5uZWxTaW1pbGFyaXR5TWVhc3VyZSgKLSAgICAgIGRvdF9wcm9kLmdldCgpLCBlbmVyZ3lfdGFyZ2V0X2Jsb2NrLAotICAgICAgJmVuZXJneV9jYW5kaWRhdGVfYmxvY2tzW24gKiBjaGFubmVsc10sIGNoYW5uZWxzKTsKLQotICBuICs9IGRlY2ltYXRpb247Ci0gIGlmIChuID49IG51bV9jYW5kaWRhdGVfYmxvY2tzKSB7Ci0gICAgLy8gV2UgY2Fubm90IGRvIGFueSBtb3JlIHNhbXBsaW5nLiBDb21wYXJlIHRoZXNlIHR3byB2YWx1ZXMgYW5kIHJldHVybiB0aGUKLSAgICAvLyBvcHRpbWFsIGluZGV4LgotICAgIHJldHVybiBzaW1pbGFyaXR5WzFdID4gc2ltaWxhcml0eVswXSA/IGRlY2ltYXRpb24gOiAwOwotICB9Ci0KLSAgZm9yICg7IG4gPCBudW1fY2FuZGlkYXRlX2Jsb2NrczsgbiArPSBkZWNpbWF0aW9uKSB7Ci0gICAgTXVsdGlDaGFubmVsRG90UHJvZHVjdCh0YXJnZXRfYmxvY2ssIDAsIHNlYXJjaF9zZWdtZW50LCBuLCBibG9ja19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90X3Byb2QuZ2V0KCkpOwotCi0gICAgc2ltaWxhcml0eVsyXSA9IE11bHRpQ2hhbm5lbFNpbWlsYXJpdHlNZWFzdXJlKAotICAgICAgICBkb3RfcHJvZC5nZXQoKSwgZW5lcmd5X3RhcmdldF9ibG9jaywKLSAgICAgICAgJmVuZXJneV9jYW5kaWRhdGVfYmxvY2tzW24gKiBjaGFubmVsc10sIGNoYW5uZWxzKTsKLQotICAgIGlmICgoc2ltaWxhcml0eVsxXSA+IHNpbWlsYXJpdHlbMF0gJiYgc2ltaWxhcml0eVsxXSA+PSBzaW1pbGFyaXR5WzJdKSB8fAotICAgICAgICAoc2ltaWxhcml0eVsxXSA+PSBzaW1pbGFyaXR5WzBdICYmIHNpbWlsYXJpdHlbMV0gPiBzaW1pbGFyaXR5WzJdKSkgewotICAgICAgLy8gQSBsb2NhbCBtYXhpbXVtIGlzIGZvdW5kLiBEbyBhIGN1YmljIGludGVycG9sYXRpb24gZm9yIGEgYmV0dGVyCi0gICAgICAvLyBlc3RpbWF0ZSBvZiBjYW5kaWRhdGUgbWF4aW11bS4KLSAgICAgIGZsb2F0IG5vcm1hbGl6ZWRfY2FuZGlkYXRlX2luZGV4OwotICAgICAgZmxvYXQgY2FuZGlkYXRlX3NpbWlsYXJpdHk7Ci0gICAgICBRdWFkcmF0aWNJbnRlcnBvbGF0aW9uKHNpbWlsYXJpdHksICZub3JtYWxpemVkX2NhbmRpZGF0ZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbmRpZGF0ZV9zaW1pbGFyaXR5KTsKLQotICAgICAgaW50IGNhbmRpZGF0ZV9pbmRleCA9Ci0gICAgICAgICAgbiAtIGRlY2ltYXRpb24gKwotICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obm9ybWFsaXplZF9jYW5kaWRhdGVfaW5kZXggKiBkZWNpbWF0aW9uICsgMC41Zik7Ci0gICAgICBpZiAoY2FuZGlkYXRlX3NpbWlsYXJpdHkgPiBiZXN0X3NpbWlsYXJpdHkgJiYKLSAgICAgICAgICAhSW5JbnRlcnZhbChjYW5kaWRhdGVfaW5kZXgsIGV4Y2x1ZGVfaW50ZXJ2YWwpKSB7Ci0gICAgICAgIG9wdGltYWxfaW5kZXggPSBjYW5kaWRhdGVfaW5kZXg7Ci0gICAgICAgIGJlc3Rfc2ltaWxhcml0eSA9IGNhbmRpZGF0ZV9zaW1pbGFyaXR5OwotICAgICAgfQotICAgIH0gZWxzZSBpZiAobiArIGRlY2ltYXRpb24gPj0gbnVtX2NhbmRpZGF0ZV9ibG9ja3MgJiYKLSAgICAgICAgICAgICAgIHNpbWlsYXJpdHlbMl0gPiBiZXN0X3NpbWlsYXJpdHkgJiYKLSAgICAgICAgICAgICAgICFJbkludGVydmFsKG4sIGV4Y2x1ZGVfaW50ZXJ2YWwpKSB7Ci0gICAgICAvLyBJZiB0aGlzIGlzIHRoZSBlbmQtcG9pbnQgYW5kIGhhcyBhIGJldHRlciBzaW1pbGFyaXR5LW1lYXN1cmUgdGhhbgotICAgICAgLy8gb3B0aW1hbCwgdGhlbiB3ZSBhY2NlcHQgaXQgYXMgb3B0aW1hbCBwb2ludC4KLSAgICAgIG9wdGltYWxfaW5kZXggPSBuOwotICAgICAgYmVzdF9zaW1pbGFyaXR5ID0gc2ltaWxhcml0eVsyXTsKLSAgICB9Ci0gICAgbWVtbW92ZShzaW1pbGFyaXR5LCAmc2ltaWxhcml0eVsxXSwgMiAqIHNpemVvZigqc2ltaWxhcml0eSkpOwotICB9Ci0gIHJldHVybiBvcHRpbWFsX2luZGV4OwotfQotCi1pbnQgRnVsbFNlYXJjaChpbnQgbG93X2xpbWl0LCBpbnQgaGlnaF9saW1pdCwgSW50ZXJ2YWwgZXhjbHVkZV9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgIGNvbnN0IEF1ZGlvQnVzKiB0YXJnZXRfYmxvY2ssIGNvbnN0IEF1ZGlvQnVzKiBzZWFyY2hfYmxvY2ssCi0gICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZW5lcmd5X3RhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBlbmVyZ3lfY2FuZGlkYXRlX2Jsb2NrcykgewotICBpbnQgY2hhbm5lbHMgPSBzZWFyY2hfYmxvY2stPmNoYW5uZWxzKCk7Ci0gIGludCBibG9ja19zaXplID0gdGFyZ2V0X2Jsb2NrLT5mcmFtZXMoKTsKLSAgc3RkOjp1bmlxdWVfcHRyPGZsb2F0W10+IGRvdF9wcm9kKG5ldyBmbG9hdFtjaGFubmVsc10pOwotCi0gIGZsb2F0IGJlc3Rfc2ltaWxhcml0eSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptaW4oKTsKLSAgaW50IG9wdGltYWxfaW5kZXggPSAwOwotCi0gIGZvciAoaW50IG4gPSBsb3dfbGltaXQ7IG4gPD0gaGlnaF9saW1pdDsgKytuKSB7Ci0gICAgaWYgKEluSW50ZXJ2YWwobiwgZXhjbHVkZV9pbnRlcnZhbCkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBNdWx0aUNoYW5uZWxEb3RQcm9kdWN0KHRhcmdldF9ibG9jaywgMCwgc2VhcmNoX2Jsb2NrLCBuLCBibG9ja19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90X3Byb2QuZ2V0KCkpOwotCi0gICAgZmxvYXQgc2ltaWxhcml0eSA9IE11bHRpQ2hhbm5lbFNpbWlsYXJpdHlNZWFzdXJlKAotICAgICAgICBkb3RfcHJvZC5nZXQoKSwgZW5lcmd5X3RhcmdldF9ibG9jaywKLSAgICAgICAgJmVuZXJneV9jYW5kaWRhdGVfYmxvY2tzW24gKiBjaGFubmVsc10sIGNoYW5uZWxzKTsKLQotICAgIGlmIChzaW1pbGFyaXR5ID4gYmVzdF9zaW1pbGFyaXR5KSB7Ci0gICAgICBiZXN0X3NpbWlsYXJpdHkgPSBzaW1pbGFyaXR5OwotICAgICAgb3B0aW1hbF9pbmRleCA9IG47Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG9wdGltYWxfaW5kZXg7Ci19Ci0KLWludCBPcHRpbWFsSW5kZXgoY29uc3QgQXVkaW9CdXMqIHNlYXJjaF9ibG9jaywgY29uc3QgQXVkaW9CdXMqIHRhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgSW50ZXJ2YWwgZXhjbHVkZV9pbnRlcnZhbCkgewotICBpbnQgY2hhbm5lbHMgPSBzZWFyY2hfYmxvY2stPmNoYW5uZWxzKCk7Ci0gIERDSEVDS19FUShjaGFubmVscywgdGFyZ2V0X2Jsb2NrLT5jaGFubmVscygpKTsKLSAgaW50IHRhcmdldF9zaXplID0gdGFyZ2V0X2Jsb2NrLT5mcmFtZXMoKTsKLSAgaW50IG51bV9jYW5kaWRhdGVfYmxvY2tzID0gc2VhcmNoX2Jsb2NrLT5mcmFtZXMoKSAtICh0YXJnZXRfc2l6ZSAtIDEpOwotCi0gIC8vIFRoaXMgaXMgYSBjb21wcm9taXNlIGJldHdlZW4gY29tcGxleGl0eSByZWR1Y3Rpb24gYW5kIHNlYXJjaCBhY2N1cmFjeS4gSQotICAvLyBkb24ndCBoYXZlIGEgcHJvb2YgdGhhdCBkb3duIHNhbXBsZSBvZiBvcmRlciA1IGlzIG9wdGltYWwuIE9uZSBjYW4gY29tcHV0ZQotICAvLyBhIGRlY2ltYXRpb24gZmFjdG9yIHRoYXQgbWluaW1pemVzIGNvbXBsZXhpdHkgZ2l2ZW4gdGhlIHNpemUgb2YKLSAgLy8gfHNlYXJjaF9ibG9ja3wgYW5kIHx0YXJnZXRfYmxvY2t8LiBIb3dldmVyLCBteSBleHBlcmltZW50cyBzaG93IHRoZSByYXRlIG9mCi0gIC8vIG1pc3NpbmcgdGhlIG9wdGltYWwgaW5kZXggaXMgc2lnbmlmaWNhbnQuIFRoaXMgdmFsdWUgaXMgY2hvc2VuCi0gIC8vIGhldXJpc3RpY2FsbHkgYmFzZWQgb24gZXhwZXJpbWVudHMuCi0gIGNvbnN0IGludCBrU2VhcmNoRGVjaW1hdGlvbiA9IDU7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPGZsb2F0W10+IGVuZXJneV90YXJnZXRfYmxvY2sobmV3IGZsb2F0W2NoYW5uZWxzXSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxmbG9hdFtdPiBlbmVyZ3lfY2FuZGlkYXRlX2Jsb2NrcygKLSAgICAgIG5ldyBmbG9hdFtjaGFubmVscyAqIG51bV9jYW5kaWRhdGVfYmxvY2tzXSk7Ci0KLSAgLy8gRW5lcmd5IG9mIGFsbCBjYW5kaWQgZnJhbWVzLgotICBNdWx0aUNoYW5uZWxNb3ZpbmdCbG9ja0VuZXJnaWVzKHNlYXJjaF9ibG9jaywgdGFyZ2V0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5lcmd5X2NhbmRpZGF0ZV9ibG9ja3MuZ2V0KCkpOwotCi0gIC8vIEVuZXJneSBvZiB0YXJnZXQgZnJhbWUuCi0gIE11bHRpQ2hhbm5lbERvdFByb2R1Y3QodGFyZ2V0X2Jsb2NrLCAwLCB0YXJnZXRfYmxvY2ssIDAsIHRhcmdldF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgIGVuZXJneV90YXJnZXRfYmxvY2suZ2V0KCkpOwotCi0gIGludCBvcHRpbWFsX2luZGV4ID0gRGVjaW1hdGVkU2VhcmNoKAotICAgICAga1NlYXJjaERlY2ltYXRpb24sIGV4Y2x1ZGVfaW50ZXJ2YWwsIHRhcmdldF9ibG9jaywgc2VhcmNoX2Jsb2NrLAotICAgICAgZW5lcmd5X3RhcmdldF9ibG9jay5nZXQoKSwgZW5lcmd5X2NhbmRpZGF0ZV9ibG9ja3MuZ2V0KCkpOwotCi0gIGludCBsaW1fbG93ID0gc3RkOjptYXgoMCwgb3B0aW1hbF9pbmRleCAtIGtTZWFyY2hEZWNpbWF0aW9uKTsKLSAgaW50IGxpbV9oaWdoID0KLSAgICAgIHN0ZDo6bWluKG51bV9jYW5kaWRhdGVfYmxvY2tzIC0gMSwgb3B0aW1hbF9pbmRleCArIGtTZWFyY2hEZWNpbWF0aW9uKTsKLSAgcmV0dXJuIEZ1bGxTZWFyY2gobGltX2xvdywgbGltX2hpZ2gsIGV4Y2x1ZGVfaW50ZXJ2YWwsIHRhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2Jsb2NrLCBlbmVyZ3lfdGFyZ2V0X2Jsb2NrLmdldCgpLAotICAgICAgICAgICAgICAgICAgICBlbmVyZ3lfY2FuZGlkYXRlX2Jsb2Nrcy5nZXQoKSk7Ci19Ci0KLXZvaWQgR2V0U3ltbWV0cmljSGFubmluZ1dpbmRvdyhpbnQgd2luZG93X2xlbmd0aCwgZmxvYXQqIHdpbmRvdykgewotICBjb25zdCBmbG9hdCBzY2FsZSA9IDIuMGYgKiBNX1BJIC8gd2luZG93X2xlbmd0aDsKLSAgZm9yIChpbnQgbiA9IDA7IG4gPCB3aW5kb3dfbGVuZ3RoOyArK24pCi0gICAgd2luZG93W25dID0gMC41ZiAqICgxLjBmIC0gY29zZihuICogc2NhbGUpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2ZpbHRlcnMvd3NvbGFfaW50ZXJuYWxzLmggYi9jb2JhbHQvbWVkaWEvZmlsdGVycy93c29sYV9pbnRlcm5hbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThhZDhkYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZmlsdGVycy93c29sYV9pbnRlcm5hbHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gQSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgdG8gcGVyZm9ybSBXU09MQS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRklMVEVSU19XU09MQV9JTlRFUk5BTFNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZJTFRFUlNfV1NPTEFfSU5URVJOQUxTX0hfCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQXVkaW9CdXM7Ci0KLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLXR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBJbnRlcnZhbDsKLQotLy8gRG90LXByb2R1Y3Qgb2YgY2hhbm5lbHMgb2YgdHdvIEF1ZGlvQnVzLiBGb3IgZWFjaCBBdWRpb0J1cyBhbiBvZmZzZXQgaXMKLS8vIGdpdmVuLiB8ZG90X3Byb2R1Y3Rba118IGlzIHRoZSBkb3QtcHJvZHVjdCBvZiBjaGFubmVsIHxrfC4gVGhlIGNhbGxlciBzaG91bGQKLS8vIGFsbG9jYXRlIHN1ZmZpY2llbnQgc3BhY2UgZm9yIHxkb3RfcHJvZHVjdHwuCi1NRURJQV9FWFBPUlQgdm9pZCBNdWx0aUNoYW5uZWxEb3RQcm9kdWN0KGNvbnN0IEF1ZGlvQnVzKiBhLCBpbnQgZnJhbWVfb2Zmc2V0X2EsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1ZGlvQnVzKiBiLCBpbnQgZnJhbWVfb2Zmc2V0X2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fZnJhbWVzLCBmbG9hdCogZG90X3Byb2R1Y3QpOwotCi0vLyBFbmVyZ2llcyBvZiBzbGlkaW5nIHdpbmRvd3Mgb2YgY2hhbm5lbHMgYXJlIGludGVybGVhdmVkLgotLy8gVGhlIG51bWJlciB3aW5kb3dzIGlzIHxpbnB1dC0+ZnJhbWVzKCl8IC0gKHxmcmFtZXNfcGVyX3dpbmRvd3wgLSAxKSwgaGVuY2UsCi0vLyB0aGUgbWV0aG9kIGFzc3VtZXMgfGVuZXJneXwgbXVzdCBiZSwgYXQgbGVhc3QsIG9mIHNpemUKLS8vICh8aW5wdXQtPmZyYW1lcygpfCAtICh8ZnJhbWVzX3Blcl93aW5kb3d8IC0gMSkpICogfGlucHV0LT5jaGFubmVscygpfC4KLU1FRElBX0VYUE9SVCB2b2lkIE11bHRpQ2hhbm5lbE1vdmluZ0Jsb2NrRW5lcmdpZXMoY29uc3QgQXVkaW9CdXMqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVzX3Blcl93aW5kb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBlbmVyZ3kpOwotCi0vLyBGaXQgdGhlIGN1cnZlIGYoeCkgPSBhICogeF4yICsgYiAqIHggKyBjIHN1Y2ggdGhhdAotLy8gICBmKC0xKSA9IHlbMF0KLS8vICAgZigwKSA9IHlbMV0KLS8vICAgZigxKSA9IHlbMl0KLS8vIGFuZCByZXR1cm4gdGhlIG1heGltdW0sIGFzc3VtaW5nIHRoYXQgeVswXSA8PSB5WzFdID49IHlbMl0uCi1NRURJQV9FWFBPUlQgdm9pZCBRdWFkcmF0aWNJbnRlcnBvbGF0aW9uKGNvbnN0IGZsb2F0KiB5X3ZhbHVlcywgZmxvYXQqIGV4dHJlbXVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogZXh0cmVtdW1fdmFsdWUpOwotCi0vLyBTZWFyY2ggYSBzdWJzZXQgb2YgYWxsIGNhbmRpZCBibG9ja3MuIFRoZSBzZWFyY2ggaXMgcGVyZm9ybWVkIGV2ZXJ5Ci0vLyB8ZGVjaW1hdGlvbnwgZnJhbWVzLiBUaGlzIHJlZHVjZXMgY29tcGxleGl0eSBieSBhIGZhY3RvciBvZiBhYm91dAotLy8gMSAvIHxkZWNpbWF0aW9ufC4gQSBjdWJpYyBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgdG8gaGF2ZSBhIGJldHRlciBlc3RpbWF0ZSBvZgotLy8gdGhlIGJlc3QgbWF0Y2guCi1NRURJQV9FWFBPUlQgaW50IERlY2ltYXRlZFNlYXJjaChpbnQgZGVjaW1hdGlvbiwgSW50ZXJ2YWwgZXhjbHVkZV9pbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1ZGlvQnVzKiB0YXJnZXRfYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0J1cyogc2VhcmNoX3NlZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZW5lcmd5X3RhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBlbmVyZ3lfY2FuZGlkX2Jsb2Nrcyk7Ci0KLS8vIFNlYXJjaCBbfGxvd19saW1pdHwsIHxoaWdoX2xpbWl0fF0gb2YgfHNlYXJjaF9zZWdtZW50fCB0byBmaW5kIGEgYmxvY2sgdGhhdAotLy8gaXMgbW9zdCBzaW1pbGFyIHRvIHx0YXJnZXRfYmxvY2t8LiB8ZW5lcmd5X3RhcmdldF9ibG9ja3wgaXMgdGhlIGVuZXJneSBvZiB0aGUKLS8vIHx0YXJnZXRfYmxvY2t8LiB8ZW5lcmd5X2NhbmRpZGF0ZV9ibG9ja3N8IGlzIHRoZSBlbmVyZ3kgb2YgYWxsIGJsb2NrcyB3aXRoaW4KLS8vIHxzZWFyY2hfYmxvY2t8LgotTUVESUFfRVhQT1JUIGludCBGdWxsU2VhcmNoKGludCBsb3dfbGltaXQsIGludCBoaWdoX2xpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsIGV4Y2x1ZGVfaW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9CdXMqIHRhcmdldF9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0J1cyogc2VhcmNoX2Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBlbmVyZ3lfdGFyZ2V0X2Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBlbmVyZ3lfY2FuZGlkYXRlX2Jsb2Nrcyk7Ci0KLS8vIEZpbmQgdGhlIGluZGV4IG9mIHRoZSBibG9jaywgd2l0aGluIHxzZWFyY2hfYmxvY2t8LCB0aGF0IGlzIG1vc3Qgc2ltaWxhcgotLy8gdG8gfHRhcmdldF9ibG9ja3wuIE9idmlvdXNseSwgdGhlIHJldHVybmVkIGluZGV4IGlzIHcuci50LiB8c2VhcmNoX2Jsb2NrfC4KLS8vIHxleGNsdWRlX2ludGVydmFsfCBpcyBhbiBpbnRlcnZhbCB0aGF0IGlzIGV4Y2x1ZGVkIGZyb20gdGhlIHNlYXJjaC4KLU1FRElBX0VYUE9SVCBpbnQgT3B0aW1hbEluZGV4KGNvbnN0IEF1ZGlvQnVzKiBzZWFyY2hfYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0J1cyogdGFyZ2V0X2Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJ2YWwgZXhjbHVkZV9pbnRlcnZhbCk7Ci0KLS8vIFJldHVybiBhICJwZXJpb2RpYyIgSGFubiB3aW5kb3cuIFRoaXMgaXMgdGhlIGZpcnN0IEwgc2FtcGxlcyBvZiBhbiBMKzEKLS8vIEhhbm4gd2luZG93LiBJdCBpcyBwZXJmZWN0IHJlY29uc3RydWN0aW9uIGZvciBvdmVybGFwLWFuZC1hZGQuCi1NRURJQV9FWFBPUlQgdm9pZCBHZXRTeW1tZXRyaWNIYW5uaW5nV2luZG93KGludCB3aW5kb3dfbGVuZ3RoLCBmbG9hdCogd2luZG93KTsKLQotfSAgLy8gbmFtZXNwYWNlIGludGVybmFsCi0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GSUxURVJTX1dTT0xBX0lOVEVSTkFMU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDkyNWQ2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotT2Zmc2V0Qnl0ZVF1ZXVlOjpPZmZzZXRCeXRlUXVldWUoKSA6IGJ1Zl8oTlVMTCksIHNpemVfKDApLCBoZWFkXygwKSB7fQotT2Zmc2V0Qnl0ZVF1ZXVlOjp+T2Zmc2V0Qnl0ZVF1ZXVlKCkge30KLQotdm9pZCBPZmZzZXRCeXRlUXVldWU6OlJlc2V0KCkgewotICBxdWV1ZV8uUmVzZXQoKTsKLSAgYnVmXyA9IE5VTEw7Ci0gIHNpemVfID0gMDsKLSAgaGVhZF8gPSAwOwotfQotCi12b2lkIE9mZnNldEJ5dGVRdWV1ZTo6UHVzaChjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSB7Ci0gIHF1ZXVlXy5QdXNoKGJ1Ziwgc2l6ZSk7Ci0gIFN5bmMoKTsKLSAgRFZMT0coNCkgPDwgIkJ1ZmZlciBwdXNoZWQuIGhlYWQ9IiA8PCBoZWFkKCkgPDwgIiB0YWlsPSIgPDwgdGFpbCgpOwotfQotCi12b2lkIE9mZnNldEJ5dGVRdWV1ZTo6UGVlayhjb25zdCB1aW50OF90KiogYnVmLCBpbnQqIHNpemUpIHsKLSAgKmJ1ZiA9IHNpemVfID4gMCA/IGJ1Zl8gOiBOVUxMOwotICAqc2l6ZSA9IHNpemVfOwotfQotCi12b2lkIE9mZnNldEJ5dGVRdWV1ZTo6UG9wKGludCBjb3VudCkgewotICBxdWV1ZV8uUG9wKGNvdW50KTsKLSAgaGVhZF8gKz0gY291bnQ7Ci0gIFN5bmMoKTsKLX0KLQotdm9pZCBPZmZzZXRCeXRlUXVldWU6OlBlZWtBdChpbnQ2NF90IG9mZnNldCwgY29uc3QgdWludDhfdCoqIGJ1ZiwgaW50KiBzaXplKSB7Ci0gIERDSEVDSyhvZmZzZXQgPj0gaGVhZCgpKTsKLSAgaWYgKG9mZnNldCA8IGhlYWQoKSB8fCBvZmZzZXQgPj0gdGFpbCgpKSB7Ci0gICAgKmJ1ZiA9IE5VTEw7Ci0gICAgKnNpemUgPSAwOwotICAgIHJldHVybjsKLSAgfQotICAqYnVmID0gJmJ1Zl9bb2Zmc2V0IC0gaGVhZCgpXTsKLSAgKnNpemUgPSB0YWlsKCkgLSBvZmZzZXQ7Ci19Ci0KLWJvb2wgT2Zmc2V0Qnl0ZVF1ZXVlOjpUcmltKGludDY0X3QgbWF4X29mZnNldCkgewotICBpZiAobWF4X29mZnNldCA8IGhlYWRfKSByZXR1cm4gdHJ1ZTsKLSAgaWYgKG1heF9vZmZzZXQgPiB0YWlsKCkpIHsKLSAgICBQb3Aoc2l6ZV8pOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBQb3AobWF4X29mZnNldCAtIGhlYWRfKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT2Zmc2V0Qnl0ZVF1ZXVlOjpTeW5jKCkgeyBxdWV1ZV8uUGVlaygmYnVmXywgJnNpemVfKTsgfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMWJmOGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfQ09NTU9OX09GRlNFVF9CWVRFX1FVRVVFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX0NPTU1PTl9PRkZTRVRfQllURV9RVUVVRV9IXwotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIEEgd3JhcHBlciBhcm91bmQgYSBCeXRlUXVldWUgd2hpY2ggbWFpbnRhaW5zIGEgbm90aW9uIG9mIGEKLS8vIG1vbm90b25pY2FsbHktaW5jcmVhc2luZyBvZmZzZXQuIEFsbCBidWZmZXIgYWNjZXNzIGlzIGRvbmUgYnkgcGFzc2luZyB0aGVzZQotLy8gb2Zmc2V0cyBpbnRvIHRoaXMgY2xhc3MsIGdvaW5nIHNvbWUgd2F5IHRvd2FyZHMgcHJldmVudGluZyB0aGUgcHJvbGlmZXJhdGlvbgotLy8gb2YgbWFueSBkaWZmZXJlbnQgbWVhbmluZ3Mgb2YgIm9mZnNldCIsICJoZWFkIiwgZXRjLgotY2xhc3MgTUVESUFfRVhQT1JUIE9mZnNldEJ5dGVRdWV1ZSB7Ci0gcHVibGljOgotICBPZmZzZXRCeXRlUXVldWUoKTsKLSAgfk9mZnNldEJ5dGVRdWV1ZSgpOwotCi0gIC8vIFRoZXNlIHdvcmsgbGlrZSB0aGVpciB1bmRlcmx5aW5nIEJ5dGVRdWV1ZSBjb3VudGVycGFydHMuCi0gIHZvaWQgUmVzZXQoKTsKLSAgdm9pZCBQdXNoKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpOwotICB2b2lkIFBlZWsoY29uc3QgdWludDhfdCoqIGJ1ZiwgaW50KiBzaXplKTsKLSAgdm9pZCBQb3AoaW50IGNvdW50KTsKLQotICAvLyBTZXRzIHxidWZ8IHRvIHBvaW50IGF0IHRoZSBmaXJzdCBidWZmZXJlZCBieXRlIGNvcnJlc3BvbmRpbmcgdG8gfG9mZnNldHwsCi0gIC8vIGFuZCB8c2l6ZXwgdG8gdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgc3RhcnRpbmcgZnJvbSB0aGF0IG9mZnNldC4KLSAgLy8KLSAgLy8gSXQgaXMgYW4gZXJyb3IgaWYgdGhlIG9mZnNldCBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgaGVhZC4gSXQncyBub3QgYW4gZXJyb3IKLSAgLy8gaWYgdGhlIGN1cnJlbnQgb2Zmc2V0IGlzIGJleW9uZCB0YWlsKCksIGJ1dCB5b3Ugd2lsbCBvZiBjb3Vyc2UgZ2V0IGJhY2sKLSAgLy8gYSBudWxsIHxidWZ8IGFuZCBhIHxzaXplfCBvZiB6ZXJvLgotICB2b2lkIFBlZWtBdChpbnQ2NF90IG9mZnNldCwgY29uc3QgdWludDhfdCoqIGJ1ZiwgaW50KiBzaXplKTsKLQotICAvLyBNYXJrcyB0aGUgYnl0ZXMgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB8bWF4X29mZnNldHwgYXMgcmVhZHkgZm9yCi0gIC8vIGRlbGV0aW9uLiBUaGlzIGlzIHJlbGF0aXZlbHkgaW5leHBlbnNpdmUsIGJ1dCB3aWxsIG5vdCBuZWNlc3NhcmlseSByZWR1Y2UKLSAgLy8gdGhlIHJlc2lkZW50IGJ1ZmZlciBzaXplIHJpZ2h0IGF3YXkgKG9yIGV2ZXIpLgotICAvLwotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZ1bGwgcmFuZ2Ugb2YgYnl0ZXMgd2VyZSBzdWNjZXNzZnVsbHkgdHJpbW1lZCwKLSAgLy8gaW5jbHVkaW5nIHRoZSBjYXNlIHdoZXJlIHxtYXhfb2Zmc2V0fCBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgaGVhZC4KLSAgLy8gUmV0dXJucyBmYWxzZSBpZiB8bWF4X29mZnNldHwgPiB0YWlsKCkgKGFsdGhvdWdoIGFsbCBieXRlcyBjdXJyZW50bHkKLSAgLy8gYnVmZmVyZWQgYXJlIHN0aWxsIGNsZWFyZWQpLgotICBib29sIFRyaW0oaW50NjRfdCBtYXhfb2Zmc2V0KTsKLQotICAvLyBUaGUgaGVhZCBhbmQgdGFpbCBwb3NpdGlvbnMsIGluIHRlcm1zIG9mIHRoZSBmaWxlJ3MgYWJzb2x1dGUgb2Zmc2V0cy4KLSAgLy8gdGFpbCgpIGlzIGFuIGV4Y2x1c2l2ZSBib3VuZC4KLSAgaW50NjRfdCBoZWFkKCkgeyByZXR1cm4gaGVhZF87IH0KLSAgaW50NjRfdCB0YWlsKCkgeyByZXR1cm4gaGVhZF8gKyBzaXplXzsgfQotCi0gcHJpdmF0ZToKLSAgLy8gU3luY2hyb25pemUgfGJ1Zl98IGFuZCB8c2l6ZV98IHdpdGggfHF1ZXVlX3wuCi0gIHZvaWQgU3luYygpOwotCi0gIEJ5dGVRdWV1ZSBxdWV1ZV87Ci0gIGNvbnN0IHVpbnQ4X3QqIGJ1Zl87Ci0gIGludCBzaXplXzsKLSAgaW50NjRfdCBoZWFkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oT2Zmc2V0Qnl0ZVF1ZXVlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX0NPTU1PTl9PRkZTRVRfQllURV9RVUVVRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjAwY2U2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZV91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBPZmZzZXRCeXRlUXVldWVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKLSAgICB1aW50OF90IGJ1ZlsyNTZdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgIGJ1ZltpXSA9IGk7Ci0gICAgfQotICAgIHF1ZXVlXy5yZXNldChuZXcgT2Zmc2V0Qnl0ZVF1ZXVlKTsKLSAgICBxdWV1ZV8tPlB1c2goYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgcXVldWVfLT5QdXNoKGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgIHF1ZXVlXy0+UG9wKDM4NCk7Ci0KLSAgICAvLyBRdWV1ZSB3aWxsIHN0YXJ0IHdpdGggMTI4IGJ5dGVzIG9mIGRhdGEgYW5kIGFuIG9mZnNldCBvZiAzODQgYnl0ZXMuCi0gICAgLy8gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRocm91Z2hvdXQgdGhlIHRlc3QuCi0gIH0KLQotIHByb3RlY3RlZDoKLSAgc3RkOjp1bmlxdWVfcHRyPE9mZnNldEJ5dGVRdWV1ZT4gcXVldWVfOwotfTsKLQotVEVTVF9GKE9mZnNldEJ5dGVRdWV1ZVRlc3QsIFNldFVwKSB7Ci0gIEVYUEVDVF9FUSgzODQsIHF1ZXVlXy0+aGVhZCgpKTsKLSAgRVhQRUNUX0VRKDUxMiwgcXVldWVfLT50YWlsKCkpOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGJ1ZjsKLSAgaW50IHNpemU7Ci0KLSAgcXVldWVfLT5QZWVrKCZidWYsICZzaXplKTsKLSAgRVhQRUNUX0VRKDEyOCwgc2l6ZSk7Ci0gIEVYUEVDVF9FUSgxMjgsIGJ1ZlswXSk7Ci0gIEVYUEVDVF9FUSgyNTUsIGJ1ZltzaXplIC0gMV0pOwotfQotCi1URVNUX0YoT2Zmc2V0Qnl0ZVF1ZXVlVGVzdCwgUGVla0F0KSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIGJ1ZjsKLSAgaW50IHNpemU7Ci0KLSAgcXVldWVfLT5QZWVrQXQoNDAwLCAmYnVmLCAmc2l6ZSk7Ci0gIEVYUEVDVF9FUShxdWV1ZV8tPnRhaWwoKSAtIDQwMCwgc2l6ZSk7Ci0gIEVYUEVDVF9FUSg0MDAgLSAyNTYsIGJ1ZlswXSk7Ci0KLSAgcXVldWVfLT5QZWVrQXQoNTEyLCAmYnVmLCAmc2l6ZSk7Ci0gIEVYUEVDVF9FUShOVUxMLCBidWYpOwotICBFWFBFQ1RfRVEoMCwgc2l6ZSk7Ci19Ci0KLVRFU1RfRihPZmZzZXRCeXRlUXVldWVUZXN0LCBUcmltKSB7Ci0gIEVYUEVDVF9UUlVFKHF1ZXVlXy0+VHJpbSgxMjgpKTsKLSAgRVhQRUNUX1RSVUUocXVldWVfLT5UcmltKDM4NCkpOwotICBFWFBFQ1RfRVEoMzg0LCBxdWV1ZV8tPmhlYWQoKSk7Ci0gIEVYUEVDVF9FUSg1MTIsIHF1ZXVlXy0+dGFpbCgpKTsKLQotICBFWFBFQ1RfVFJVRShxdWV1ZV8tPlRyaW0oNDAwKSk7Ci0gIEVYUEVDVF9FUSg0MDAsIHF1ZXVlXy0+aGVhZCgpKTsKLSAgRVhQRUNUX0VRKDUxMiwgcXVldWVfLT50YWlsKCkpOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGJ1ZjsKLSAgaW50IHNpemU7Ci0gIHF1ZXVlXy0+UGVla0F0KDQwMCwgJmJ1ZiwgJnNpemUpOwotICBFWFBFQ1RfRVEocXVldWVfLT50YWlsKCkgLSA0MDAsIHNpemUpOwotICBFWFBFQ1RfRVEoNDAwIC0gMjU2LCBidWZbMF0pOwotCi0gIC8vIFRyaW1taW5nIHRvIHRoZSBleGFjdCBlbmQgb2YgdGhlIGJ1ZmZlciBzaG91bGQgcmV0dXJuICd0cnVlJy4gVGhpcwotICAvLyBhY2NvbW1vZGF0ZXMgRU9TIGNhc2VzLgotICBFWFBFQ1RfVFJVRShxdWV1ZV8tPlRyaW0oNTEyKSk7Ci0gIEVYUEVDVF9FUSg1MTIsIHF1ZXVlXy0+aGVhZCgpKTsKLSAgcXVldWVfLT5QZWVrKCZidWYsICZzaXplKTsKLSAgRVhQRUNUX0VRKE5VTEwsIGJ1Zik7Ci0KLSAgLy8gVHJpbW1pbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgc2hvdWxkIHJldHVybiAnZmFsc2UnOyB3ZSBoYXZlbid0IHNlZW4KLSAgLy8gdGhlIHByZWNlZWRpbmcgYnl0ZXMuCi0gIEVYUEVDVF9GQUxTRShxdWV1ZV8tPlRyaW0oNTEzKSk7Ci0KLSAgLy8gSG93ZXZlciwgZG9pbmcgdGhhdCBzaG91bGRuJ3QgYWZmZWN0IHRoZSBFT1MgY2FzZS4gT25seSBhZGRpbmcgbmV3IGRhdGEKLSAgLy8gc2hvdWxkIGFsdGVyIHRoaXMgYmVoYXZpb3IuCi0gIEVYUEVDVF9UUlVFKHF1ZXVlXy0+VHJpbSg1MTIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vc3RyZWFtX3BhcnNlcl90ZXN0X2Jhc2UuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vc3RyZWFtX3BhcnNlcl90ZXN0X2Jhc2UuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmOTYxZDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL3N0cmVhbV9wYXJzZXJfdGVzdF9iYXNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9zdHJlYW1fcGFyc2VyX3Rlc3RfYmFzZS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBCdWZmZXJRdWV1ZVRvU3RyaW5nKAotICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUmIGJ1ZmZlcnMpIHsKLSAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0KLSAgc3MgPDwgInsiOwotICBmb3IgKFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWU6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IGJ1ZmZlcnMuYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gYnVmZmVycy5lbmQoKTsgKytpdHIpIHsKLSAgICBzcyA8PCAiICIgPDwgKCppdHIpLT50aW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpOwotICAgIGlmICgoKml0ciktPmlzX2tleV9mcmFtZSgpKSBzcyA8PCAiSyI7Ci0gIH0KLSAgc3MgPDwgIiB9IjsKLQotICByZXR1cm4gc3Muc3RyKCk7Ci19Ci0KLVN0cmVhbVBhcnNlclRlc3RCYXNlOjpTdHJlYW1QYXJzZXJUZXN0QmFzZSgKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RyZWFtUGFyc2VyPiBzdHJlYW1fcGFyc2VyKQotICAgIDogcGFyc2VyXyhzdGQ6Om1vdmUoc3RyZWFtX3BhcnNlcikpIHsKLSAgcGFyc2VyXy0+SW5pdCgKLSAgICAgIGJhc2U6OkJpbmQoJlN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbkluaXREb25lLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIGJhc2U6OkJpbmQoJlN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbk5ld0NvbmZpZywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZTdHJlYW1QYXJzZXJUZXN0QmFzZTo6T25OZXdCdWZmZXJzLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIHRydWUsCi0gICAgICBiYXNlOjpCaW5kKCZTdHJlYW1QYXJzZXJUZXN0QmFzZTo6T25LZXlOZWVkZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgYmFzZTo6QmluZCgmU3RyZWFtUGFyc2VyVGVzdEJhc2U6Ok9uTmV3U2VnbWVudCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZTdHJlYW1QYXJzZXJUZXN0QmFzZTo6T25FbmRPZlNlZ21lbnQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgbmV3IE1lZGlhTG9nKCkpOwotfQotCi1TdHJlYW1QYXJzZXJUZXN0QmFzZTo6flN0cmVhbVBhcnNlclRlc3RCYXNlKCkge30KLQotc3RkOjpzdHJpbmcgU3RyZWFtUGFyc2VyVGVzdEJhc2U6OlBhcnNlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBlbmRfYnl0ZXMpIHsKLSAgcmVzdWx0c19zdHJlYW1fLmNsZWFyKCk7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gUmVhZFRlc3REYXRhRmlsZShmaWxlbmFtZSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCBhcHBlbmRfYnl0ZXMpKTsKLSAgcmV0dXJuIHJlc3VsdHNfc3RyZWFtXy5zdHIoKTsKLX0KLQotc3RkOjpzdHJpbmcgU3RyZWFtUGFyc2VyVGVzdEJhc2U6OlBhcnNlRGF0YShjb25zdCB1aW50OF90KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKSB7Ci0gIHJlc3VsdHNfc3RyZWFtXy5jbGVhcigpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoZGF0YSwgbGVuZ3RoLCBsZW5ndGgpKTsKLSAgcmV0dXJuIHJlc3VsdHNfc3RyZWFtXy5zdHIoKTsKLX0KLQotYm9vbCBTdHJlYW1QYXJzZXJUZXN0QmFzZTo6QXBwZW5kRGF0YUluUGllY2VzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGllY2Vfc2l6ZSkgewotICBjb25zdCB1aW50OF90KiBzdGFydCA9IGRhdGE7Ci0gIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEgKyBsZW5ndGg7Ci0gIHdoaWxlIChzdGFydCA8IGVuZCkgewotICAgIHNpemVfdCBhcHBlbmRfc2l6ZSA9IHN0ZDo6bWluKHBpZWNlX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gc3RhcnQpKTsKLSAgICBpZiAoIXBhcnNlcl8tPlBhcnNlKHN0YXJ0LCBhcHBlbmRfc2l6ZSkpIHJldHVybiBmYWxzZTsKLSAgICBzdGFydCArPSBhcHBlbmRfc2l6ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHJlYW1QYXJzZXJUZXN0QmFzZTo6T25Jbml0RG9uZSgKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBwYXJhbXMpIHsKLSAgRVhQRUNUX1RSVUUocGFyYW1zLmF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXQpOwotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHBhcmFtcy5kdXJhdGlvbi5Jbk1pbGxpc2Vjb25kcygpIDw8ICIsICIKLSAgICAgICAgICAgPDwgcGFyYW1zLmF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXQgPDwgIikiOwotfQotCi1ib29sIFN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbk5ld0NvbmZpZygKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcywKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcCYgdGV4dF9jb25maWcpIHsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fIDw8ICI6IGdvdCAiIDw8IHRyYWNrcy0+dHJhY2tzKCkuc2l6ZSgpIDw8ICIgdHJhY2tzIjsKLSAgRVhQRUNUX0VRKHRyYWNrcy0+dHJhY2tzKCkuc2l6ZSgpLCAxdSk7Ci0gIGNvbnN0IGF1dG8mIHRyYWNrID0gdHJhY2tzLT50cmFja3MoKVswXTsKLSAgRVhQRUNUX0VRKHRyYWNrLT50eXBlKCksIE1lZGlhVHJhY2s6OkF1ZGlvKTsKLSAgYXVkaW9fdHJhY2tfaWRfID0gdHJhY2stPmJ5dGVzdHJlYW1fdHJhY2tfaWQoKTsKLSAgbGFzdF9hdWRpb19jb25maWdfID0gdHJhY2tzLT5nZXRBdWRpb0NvbmZpZyh0cmFjay0+Ynl0ZXN0cmVhbV90cmFja19pZCgpKTsKLSAgRVhQRUNUX1RSVUUobGFzdF9hdWRpb19jb25maWdfLklzVmFsaWRDb25maWcoKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbk5ld0J1ZmZlcnMoCi0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCkgewotICBFWFBFQ1RfRVEoMXUsIGJ1ZmZlcl9xdWV1ZV9tYXAuc2l6ZSgpKTsKLSAgY29uc3QgYXV0byYgaXRyX2F1ZGlvID0gYnVmZmVyX3F1ZXVlX21hcC5maW5kKGF1ZGlvX3RyYWNrX2lkXyk7Ci0gIEVYUEVDVF9ORShidWZmZXJfcXVldWVfbWFwLmVuZCgpLCBpdHJfYXVkaW8pOwotICBjb25zdCBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlJiBhdWRpb19idWZmZXJzID0gaXRyX2F1ZGlvLT5zZWNvbmQ7Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19idWZmZXJzLmVtcHR5KCkpOwotCi0gIC8vIEVuc3VyZSB0aGF0IHRyYWNrIGlkcyBhcmUgcHJvcGVybHkgYXNzaWduZWQgb24gYWxsIGVtaXR0ZWQgYnVmZmVycy4KLSAgZm9yIChjb25zdCBhdXRvJiBidWYgOiBhdWRpb19idWZmZXJzKSB7Ci0gICAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrX2lkXywgYnVmLT50cmFja19pZCgpKTsKLSAgfQotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIGJ1ZmZlcnNfc3RyID0gQnVmZmVyUXVldWVUb1N0cmluZyhhdWRpb19idWZmZXJzKTsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fIDw8ICIgOiAiIDw8IGJ1ZmZlcnNfc3RyOwotICByZXN1bHRzX3N0cmVhbV8gPDwgYnVmZmVyc19zdHI7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbktleU5lZWRlZChFbWVJbml0RGF0YVR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpIHsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fIDw8ICIoIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpIDw8ICIsICIKLSAgICAgICAgICAgPDwgaW5pdF9kYXRhLnNpemUoKSA8PCAiKSI7Ci19Ci0KLXZvaWQgU3RyZWFtUGFyc2VyVGVzdEJhc2U6Ok9uTmV3U2VnbWVudCgpIHsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fOwotICByZXN1bHRzX3N0cmVhbV8gPDwgIk5ld1NlZ21lbnQiOwotfQotCi12b2lkIFN0cmVhbVBhcnNlclRlc3RCYXNlOjpPbkVuZE9mU2VnbWVudCgpIHsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fOwotICByZXN1bHRzX3N0cmVhbV8gPDwgIkVuZE9mU2VnbWVudCI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL3N0cmVhbV9wYXJzZXJfdGVzdF9iYXNlLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vc3RyZWFtX3BhcnNlcl90ZXN0X2Jhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBlN2UyNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vc3RyZWFtX3BhcnNlcl90ZXN0X2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19DT01NT05fU1RSRUFNX1BBUlNFUl9URVNUX0JBU0VfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfQ09NTU9OX1NUUkVBTV9QQVJTRVJfVEVTVF9CQVNFX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGV4dF90cmFja19jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFRlc3QgaGVscGVyIGZvciB2ZXJpZnlpbmcgU3RyZWFtUGFyc2VyIGJlaGF2aW9yLgotY2xhc3MgU3RyZWFtUGFyc2VyVGVzdEJhc2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU3RyZWFtUGFyc2VyVGVzdEJhc2Uoc3RkOjp1bmlxdWVfcHRyPFN0cmVhbVBhcnNlcj4gc3RyZWFtX3BhcnNlcik7Ci0gIHZpcnR1YWwgflN0cmVhbVBhcnNlclRlc3RCYXNlKCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIC8vIENodW5rcyBhIGdpdmVuIHBhcnNlciBhcHByb3ByaWF0ZSBmaWxlLiAgQXBwZW5kcyB8YXBwZW5kX2J5dGVzfCBhdCBhIHRpbWUKLSAgLy8gdW50aWwgdGhlIGZpbGUgaXMgZXhoYXVzdGVkLiAgUmV0dXJucyBhIGNvZGVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlCi0gIC8vIHNlZ21lbnRzIGFuZCB0aW1lc3RhbXBzIG9mIHRoZSBleHRyYWN0ZWQgZnJhbWVzLgotICAvLwotICAvLyBUaGUgc3RhcnQgb2YgZWFjaCBtZWRpYSBzZWdtZW50IGlzIGRlc2lnbmF0ZWQgYnkgIk5ld1NlZ21lbnQiLCBzaW1pbGFybHkKLSAgLy8gdGhlIGVuZCBvZiBlYWNoIHNlZ21lbnQgYnkgIkVuZE9mU2VnbWVudCIuICBTZWdtZW50cyBlbmQgd2hlbiBvbmUgb3IgbW9yZQotICAvLyBmcmFtZXMgYXJlIHBhcnNlZCBmcm9tIGFuIGFwcGVuZC4gIElmIHRoZSBhcHBlbmQgY29udGFpbnMgYSBwYXJ0aWFsIGZyYW1lCi0gIC8vIHRoZSBzZWdtZW50IHdpbGwgY29udGludWUgaW50byB0aGUgbmV4dCBhcHBlbmQuCi0gIC8vCi0gIC8vIFBhcnNlZCBmcmFtZShzKSBhcmUgcmVwcmVzZW50ZWQgYXMgInsgeHhLIHl5SyB6eksgfSIgIFdoZXJlIHh4LCB5eSwgYW5kIHp6Ci0gIC8vIGFyZSB0aGUgdGltZXN0YW1wcyBpbiBtaWxsaXNlY29uZHMgb2YgZWFjaCBwYXJzZWQgZnJhbWUuICBGb3IgZXhhbXBsZToKLSAgLy8KLSAgLy8gICAgICJOZXdTZWdtZW50eyAwSyAyM0sgNDZLIH1FbmRPZlNlZ21lbnQiCi0gIC8vICAgICAiTmV3U2VnbWVudHsgMEsgfXsgMjNLIH17IDQ2SyB9RW5kT2ZTZWdtZW50IgotICAvLyAgICAgIk5ld1NlZ21lbnR7IDBLIH17IDIzSyB9RW5kT2ZTZWdtZW50TmV3U2VnbWVudHsgNDZLIH1FbmRPZlNlZ21lbnQiCi0gIC8vCi0gIHN0ZDo6c3RyaW5nIFBhcnNlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGludCBhcHBlbmRfYnl0ZXMpOwotCi0gIC8vIFNpbWlsYXIgdG8gUGFyc2VGaWxlKCkgZXhjZXB0IHBhcnNlcyB0aGUgZ2l2ZW4gfGRhdGF8IGluIGEgc2luZ2xlIGFwcGVuZCBvZgotICAvLyBzaXplIHxsZW5ndGh8LgotICBzdGQ6OnN0cmluZyBQYXJzZURhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0KLSAgLy8gVGhlIGxhc3QgQXVkaW9EZWNvZGVyQ29uZmlnIGhhbmRlZCB0byBPbk5ld0NvbmZpZygpLgotICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGxhc3RfYXVkaW9fY29uZmlnKCkgY29uc3QgewotICAgIHJldHVybiBsYXN0X2F1ZGlvX2NvbmZpZ187Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGJvb2wgQXBwZW5kRGF0YUluUGllY2VzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwaWVjZV9zaXplKTsKLSAgdm9pZCBPbkluaXREb25lKGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMmIHBhcmFtcyk7Ci0gIGJvb2wgT25OZXdDb25maWcoc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiB0cmFja3MsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgU3RyZWFtUGFyc2VyOjpUZXh0VHJhY2tDb25maWdNYXAmIHRleHRfY29uZmlnKTsKLSAgYm9vbCBPbk5ld0J1ZmZlcnMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCk7Ci0gIHZvaWQgT25LZXlOZWVkZWQoRW1lSW5pdERhdGFUeXBlIHR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpOwotICB2b2lkIE9uTmV3U2VnbWVudCgpOwotICB2b2lkIE9uRW5kT2ZTZWdtZW50KCk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFN0cmVhbVBhcnNlcj4gcGFyc2VyXzsKLSAgc3RkOjpzdHJpbmdzdHJlYW0gcmVzdWx0c19zdHJlYW1fOwotICBBdWRpb0RlY29kZXJDb25maWcgbGFzdF9hdWRpb19jb25maWdfOwotICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYXVkaW9fdHJhY2tfaWRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdHJlYW1QYXJzZXJUZXN0QmFzZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19DT01NT05fU1RSRUFNX1BBUlNFUl9URVNUX0JBU0VfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfYWRhcHRlcl92aWRlby5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfYWRhcHRlcl92aWRlby5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJhNzJmMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX2FkYXB0ZXJfdmlkZW8uY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19hZGFwdGVyX3ZpZGVvLmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfY29tbW9uLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDJ0IHsKLQotLy8gQXJiaXRyYXJ5IGRlY2lzaW9uIGFib3V0IHRoZSBmcmFtZSBkdXJhdGlvbiB3aGVuIHRoZXJlIGlzIG5vIHByZXZpb3VzCi0vLyBoaW50IGFib3V0IHdoYXQgY291bGQgYmUgdGhlIGZyYW1lIGR1cmF0aW9uLgotc3RhdGljIGNvbnN0IGludCBrRGVmYXVsdEZyYW1lRHVyYXRpb25NcyA9IDQwOwotCi0vLyBUbyBjYWxjdWxhdGUgdGhlIGZyYW1lIGR1cmF0aW9uLCB3ZSBtYWtlIGFuIGFzc3VtcHRpb24KLS8vIHRoYXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbmV4dCBmcmFtZSBpbiBwcmVzZW50YXRpb24gb3JkZXIKLS8vIGlzIG5vIGZ1cnRoZXIgdGhhbiA1IGZyYW1lcyBhd2F5IGluIGRlY29kZSBvcmRlci4KLS8vIFRPRE8oZGFtaWVudik6IHRoZSBwcmV2aW91cyBhc3N1bXB0aW9uIHNob3VsZCBjb3ZlciBtb3N0IG9mIHRoZSBwcmFjdGljYWwKLS8vIGNhc2VzLiBIb3dldmVyLCB0aGUgcmlnaHQgd2F5IHRvIGNhbGN1bGF0ZSB0aGUgZnJhbWUgZHVyYXRpb24gd291bGQgYmUKLS8vIHRvIGVtdWxhdGUgdGhlIEgyNjQgZHBiIGJ1bXBpbmcgcHJvY2Vzcy4KLXN0YXRpYyBjb25zdCBzaXplX3Qga0hpc3RvcnlTaXplID0gNTsKLQotRXNBZGFwdGVyVmlkZW86OkVzQWRhcHRlclZpZGVvKGNvbnN0IE5ld1ZpZGVvQ29uZmlnQ0ImIG5ld192aWRlb19jb25maWdfY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdEJ1ZmZlckNCJiBlbWl0X2J1ZmZlcl9jYikKLSAgICA6IG5ld192aWRlb19jb25maWdfY2JfKG5ld192aWRlb19jb25maWdfY2IpLAotICAgICAgZW1pdF9idWZmZXJfY2JfKGVtaXRfYnVmZmVyX2NiKSwKLSAgICAgIGhhc192YWxpZF9jb25maWdfKGZhbHNlKSwKLSAgICAgIGhhc192YWxpZF9mcmFtZV8oZmFsc2UpLAotICAgICAgbGFzdF9mcmFtZV9kdXJhdGlvbl8oCi0gICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtEZWZhdWx0RnJhbWVEdXJhdGlvbk1zKSksCi0gICAgICBidWZmZXJfaW5kZXhfKDApLAotICAgICAgaGFzX3ZhbGlkX2luaXRpYWxfdGltZXN0YW1wXyhmYWxzZSksCi0gICAgICBkaXNjYXJkZWRfZnJhbWVfY291bnRfKDApIHt9Ci0KLUVzQWRhcHRlclZpZGVvOjp+RXNBZGFwdGVyVmlkZW8oKSB7fQotCi12b2lkIEVzQWRhcHRlclZpZGVvOjpGbHVzaCgpIHsgUHJvY2Vzc1BlbmRpbmdCdWZmZXJzKHRydWUpOyB9Ci0KLXZvaWQgRXNBZGFwdGVyVmlkZW86OlJlc2V0KCkgewotICBoYXNfdmFsaWRfY29uZmlnXyA9IGZhbHNlOwotICBoYXNfdmFsaWRfZnJhbWVfID0gZmFsc2U7Ci0KLSAgbGFzdF9mcmFtZV9kdXJhdGlvbl8gPQotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtEZWZhdWx0RnJhbWVEdXJhdGlvbk1zKTsKLQotICBjb25maWdfbGlzdF8uY2xlYXIoKTsKLSAgYnVmZmVyX2luZGV4XyA9IDA7Ci0gIGJ1ZmZlcl9saXN0Xy5jbGVhcigpOwotICBlbWl0dGVkX3B0c18uY2xlYXIoKTsKLQotICBoYXNfdmFsaWRfaW5pdGlhbF90aW1lc3RhbXBfID0gZmFsc2U7Ci0gIG1pbl9wdHNfID0gYmFzZTo6VGltZURlbHRhKCk7Ci0gIG1pbl9kdHNfID0gRGVjb2RlVGltZXN0YW1wKCk7Ci0KLSAgZGlzY2FyZGVkX2ZyYW1lX2NvdW50XyA9IDA7Ci19Ci0KLXZvaWQgRXNBZGFwdGVyVmlkZW86Ok9uQ29uZmlnQ2hhbmdlZCgKLSAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2RlY29kZXJfY29uZmlnKSB7Ci0gIGNvbmZpZ19saXN0Xy5wdXNoX2JhY2soCi0gICAgICBDb25maWdFbnRyeShidWZmZXJfaW5kZXhfICsgYnVmZmVyX2xpc3RfLnNpemUoKSwgdmlkZW9fZGVjb2Rlcl9jb25maWcpKTsKLSAgaGFzX3ZhbGlkX2NvbmZpZ18gPSB0cnVlOwotICBQcm9jZXNzUGVuZGluZ0J1ZmZlcnMoZmFsc2UpOwotfQotCi1ib29sIEVzQWRhcHRlclZpZGVvOjpPbk5ld0J1ZmZlcigKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIHN0cmVhbV9wYXJzZXJfYnVmZmVyKSB7Ci0gIGlmIChzdHJlYW1fcGFyc2VyX2J1ZmZlci0+dGltZXN0YW1wKCkgPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgaWYgKGhhc192YWxpZF9mcmFtZV8pIHsKLSAgICAgIC8vIFRoZXJlIGlzIGN1cnJlbnRseSBubyBlcnJvciBjb25jZWFsbWVudCBmb3IgYSBtaXNzaW5nIHRpbWVzdGFtcAotICAgICAgLy8gaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyZWFtLgotICAgICAgRFZMT0coMSkgPDwgIk1pc3NpbmcgdGltZXN0YW1wIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0cmVhbSI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFoYXNfdmFsaWRfaW5pdGlhbF90aW1lc3RhbXBfKSB7Ci0gICAgICAvLyBNUEVHLTIgVFMgcmVxdWlyZXMgdGhlIGZpcnN0IGFjY2VzcyB1bml0IHRvIGJlIGdpdmVuIGEgdGltZXN0YW1wLgotICAgICAgLy8gSG93ZXZlciwgc29tZSBzdHJlYW1zIGRvIG5vdCBjb21wbHkgd2l0aCB0aGlzIHJlcXVpcmVtZW50LgotICAgICAgLy8gU28gc2ltcGx5IGRyb3AgdGhlIGZyYW1lIGlmIGl0IGlzIGEgbGVhZGluZyBmcmFtZSB3aXRoIG5vIHRpbWVzdGFtcC4KLSAgICAgIERWTE9HKDEpCi0gICAgICAgICAgPDwgIlN0cmVhbSBub3QgY29tcGxpYW50OiBpZ25vcmluZyBsZWFkaW5nIGZyYW1lIHdpdGggbm8gdGltZXN0YW1wIjsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEluIGFsbCB0aGUgb3RoZXIgY2FzZXMsIHRoaXMgZnJhbWUgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nCi0gICAgLy8gdmFsaWQga2V5IGZyYW1lLCB1c2luZyB0aW1lc3RhbXAgaW50ZXJwb2xhdGlvbi4KLSAgICBEQ0hFQ0soaGFzX3ZhbGlkX2luaXRpYWxfdGltZXN0YW1wXyk7Ci0gICAgRENIRUNLX0dFKGRpc2NhcmRlZF9mcmFtZV9jb3VudF8sIDEpOwotICAgIGRpc2NhcmRlZF9mcmFtZV9jb3VudF8rKzsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEF0IHRoaXMgcG9pbnQsIHRpbWVzdGFtcHMgb2YgdGhlIGluY29taW5nIGZyYW1lIGFyZSB2YWxpZC4KLSAgaWYgKCFoYXNfdmFsaWRfaW5pdGlhbF90aW1lc3RhbXBfKSB7Ci0gICAgbWluX3B0c18gPSBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+dGltZXN0YW1wKCk7Ci0gICAgbWluX2R0c18gPSBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCk7Ci0gICAgaGFzX3ZhbGlkX2luaXRpYWxfdGltZXN0YW1wXyA9IHRydWU7Ci0gIH0KLSAgaWYgKHN0cmVhbV9wYXJzZXJfYnVmZmVyLT50aW1lc3RhbXAoKSA8IG1pbl9wdHNfKQotICAgIG1pbl9wdHNfID0gc3RyZWFtX3BhcnNlcl9idWZmZXItPnRpbWVzdGFtcCgpOwotCi0gIC8vIERpc2NhcmQgdGhlIGluY29taW5nIGZyYW1lOgotICAvLyAtIGlmIGl0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGNvbmZpZywKLSAgLy8gLSBvciBpZiBubyB2YWxpZCBrZXkgZnJhbWUgaGFzIGJlZW4gZm91bmQgc28gZmFyLgotICBpZiAoIWhhc192YWxpZF9jb25maWdfIHx8Ci0gICAgICAoIWhhc192YWxpZF9mcmFtZV8gJiYgIXN0cmVhbV9wYXJzZXJfYnVmZmVyLT5pc19rZXlfZnJhbWUoKSkpIHsKLSAgICBkaXNjYXJkZWRfZnJhbWVfY291bnRfKys7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBoYXNfdmFsaWRfZnJhbWVfID0gdHJ1ZTsKLQotICBpZiAoZGlzY2FyZGVkX2ZyYW1lX2NvdW50XyA+IDApIHsKLSAgICBpZiAoIVJlcGxhY2VEaXNjYXJkZWRGcmFtZXMoc3RyZWFtX3BhcnNlcl9idWZmZXIpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgYnVmZmVyX2xpc3RfLnB1c2hfYmFjayhzdHJlYW1fcGFyc2VyX2J1ZmZlcik7Ci0gIFByb2Nlc3NQZW5kaW5nQnVmZmVycyhmYWxzZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVzQWRhcHRlclZpZGVvOjpQcm9jZXNzUGVuZGluZ0J1ZmZlcnMoYm9vbCBmbHVzaCkgewotICBEQ0hFQ0soaGFzX3ZhbGlkX2NvbmZpZ18pOwotCi0gIHdoaWxlICghYnVmZmVyX2xpc3RfLmVtcHR5KCkgJiYKLSAgICAgICAgIChmbHVzaCB8fCBidWZmZXJfbGlzdF8uc2l6ZSgpID4ga0hpc3RvcnlTaXplKSkgewotICAgIC8vIFNpZ25hbCBhIGNvbmZpZyBjaGFuZ2UsIGp1c3QgYmVmb3JlIGVtaXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGZyYW1lLgotICAgIGlmICghY29uZmlnX2xpc3RfLmVtcHR5KCkgJiYgY29uZmlnX2xpc3RfLmZyb250KCkuZmlyc3QgPT0gYnVmZmVyX2luZGV4XykgewotICAgICAgbmV3X3ZpZGVvX2NvbmZpZ19jYl8uUnVuKGNvbmZpZ19saXN0Xy5mcm9udCgpLnNlY29uZCk7Ci0gICAgICBjb25maWdfbGlzdF8ucG9wX2Zyb250KCk7Ci0gICAgfQotCi0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9IGJ1ZmZlcl9saXN0Xy5mcm9udCgpOwotICAgIGJ1ZmZlcl9saXN0Xy5wb3BfZnJvbnQoKTsKLSAgICBidWZmZXJfaW5kZXhfKys7Ci0KLSAgICBpZiAoYnVmZmVyLT5kdXJhdGlvbigpID09IGtOb1RpbWVzdGFtcCkgewotICAgICAgYmFzZTo6VGltZURlbHRhIG5leHRfZnJhbWVfcHRzID0gR2V0TmV4dEZyYW1lUHRzKGJ1ZmZlci0+dGltZXN0YW1wKCkpOwotICAgICAgaWYgKG5leHRfZnJhbWVfcHRzID09IGtOb1RpbWVzdGFtcCkgewotICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBlbWl0dGluZyB0aGUgdmVyeSBsYXN0IGJ1ZmZlcgotICAgICAgICAvLyBvciBpZiB0aGUgc3RyZWFtIGRvIG5vdCBtZWV0IHRoZSBhc3N1bXB0aW9uIGJlaGluZCB8a0hpc3RvcnlTaXplfC4KLSAgICAgICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiVXNpbmcgbGFzdCBmcmFtZSBkdXJhdGlvbjogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGxhc3RfZnJhbWVfZHVyYXRpb25fLkluTWlsbGlzZWNvbmRzKCk7Ci0gICAgICAgIGJ1ZmZlci0+c2V0X2R1cmF0aW9uKGxhc3RfZnJhbWVfZHVyYXRpb25fKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbiA9IG5leHRfZnJhbWVfcHRzIC0gYnVmZmVyLT50aW1lc3RhbXAoKTsKLSAgICAgICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiRnJhbWUgZHVyYXRpb246ICIgPDwgZHVyYXRpb24uSW5NaWxsaXNlY29uZHMoKTsKLSAgICAgICAgYnVmZmVyLT5zZXRfZHVyYXRpb24oZHVyYXRpb24pOwotICAgICAgfQotICAgIH0KLQotICAgIGVtaXR0ZWRfcHRzXy5wdXNoX2JhY2soYnVmZmVyLT50aW1lc3RhbXAoKSk7Ci0gICAgaWYgKGVtaXR0ZWRfcHRzXy5zaXplKCkgPiBrSGlzdG9yeVNpemUpIGVtaXR0ZWRfcHRzXy5wb3BfZnJvbnQoKTsKLQotICAgIGxhc3RfZnJhbWVfZHVyYXRpb25fID0gYnVmZmVyLT5kdXJhdGlvbigpOwotICAgIGVtaXRfYnVmZmVyX2NiXy5SdW4oYnVmZmVyKTsKLSAgfQotfQotCi1iYXNlOjpUaW1lRGVsdGEgRXNBZGFwdGVyVmlkZW86OkdldE5leHRGcmFtZVB0cyhiYXNlOjpUaW1lRGVsdGEgY3VycmVudF9wdHMpIHsKLSAgYmFzZTo6VGltZURlbHRhIG5leHRfcHRzID0ga05vVGltZXN0YW1wOwotCi0gIC8vIENvbnNpZGVyIHRoZSB0aW1lc3RhbXBzIG9mIGZ1dHVyZSBmcmFtZXMgKGluIGRlY29kZSBvcmRlcikuCi0gIC8vIE5vdGU6IHRoZSBuZXh0IGZyYW1lIGlzIG5vdCBlbm91Z2ggd2hlbiB0aGUgR09QIGluY2x1ZGVzIHNvbWUgQiBmcmFtZXMuCi0gIGZvciAoQnVmZmVyUXVldWU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYnVmZmVyX2xpc3RfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYnVmZmVyX2xpc3RfLmVuZCgpOyArK2l0KSB7Ci0gICAgaWYgKCgqaXQpLT50aW1lc3RhbXAoKSA8IGN1cnJlbnRfcHRzKSBjb250aW51ZTsKLSAgICBpZiAobmV4dF9wdHMgPT0ga05vVGltZXN0YW1wIHx8IG5leHRfcHRzID4gKCppdCktPnRpbWVzdGFtcCgpKQotICAgICAgbmV4dF9wdHMgPSAoKml0KS0+dGltZXN0YW1wKCk7Ci0gIH0KLQotICAvLyBDb25zaWRlciB0aGUgdGltZXN0YW1wcyBvZiBwcmV2aW91cyBmcmFtZXMgKGluIGRlY29kZSBvcmRlcikuCi0gIC8vIEluIGEgc2ltcGxlIEdPUCBzdHJ1Y3R1cmUgd2l0aCBCIGZyYW1lcywgdGhlIGZyYW1lIG5leHQgdG8gdGhlIGxhc3QgQgotICAvLyBmcmFtZSAoaW4gcHJlc2VudGF0aW9uIG9yZGVyKSBpcyBsb2NhdGVkIGJlZm9yZSBpbiBkZWNvZGUgb3JkZXIuCi0gIGZvciAoc3RkOjpsaXN0PGJhc2U6OlRpbWVEZWx0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZW1pdHRlZF9wdHNfLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gZW1pdHRlZF9wdHNfLmVuZCgpOyArK2l0KSB7Ci0gICAgaWYgKCppdCA8IGN1cnJlbnRfcHRzKSBjb250aW51ZTsKLSAgICBpZiAobmV4dF9wdHMgPT0ga05vVGltZXN0YW1wIHx8IG5leHRfcHRzID4gKml0KSBuZXh0X3B0cyA9ICppdDsKLSAgfQotCi0gIHJldHVybiBuZXh0X3B0czsKLX0KLQotdm9pZCBFc0FkYXB0ZXJWaWRlbzo6UmVwbGFjZURpc2NhcmRlZEZyYW1lcygKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIHN0cmVhbV9wYXJzZXJfYnVmZmVyKSB7Ci0gIERDSEVDS19HVChkaXNjYXJkZWRfZnJhbWVfY291bnRfLCAwKTsKLSAgRENIRUNLKHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0KLSAgLy8gUFRTL0RUUyBhcmUgaW50ZXJwb2xhdGVkIGJldHdlZW4gdGhlIG1pbiBQVFMvRFRTIG9mIGRpc2NhcmRlZCBmcmFtZXMKLSAgLy8gYW5kIHRoZSBQVFMvRFRTIG9mIHRoZSBmaXJzdCB2YWxpZCBidWZmZXIuCi0gIC8vIE5vdGU6IHxwdHNfZGVsdGF8IGFuZCB8ZHRzX2RlbHRhfCBhcmUgY2FsY3VsYXRlZCB1c2luZyBpbnRlZ2VyIGRpdmlzaW9uLgotICAvLyBJbnRlcnBvbGF0aW9uIHRodXMgYWNjdW11bGF0ZXMgc21hbGwgZXJyb3JzLiBIb3dldmVyLCBzaW5jZSB0aW1lc3RhbXBzCi0gIC8vIGFyZSBnaXZlbiBpbiBtaWNyb3NlY29uZHMsIG9ubHkgYSBoaWdoIG51bWJlciBvZiBkaXNjYXJkZWQgZnJhbWVzCi0gIC8vIChpbiB0aGUgb3JkZXIgb2YgMTAwMDBzKSBjb3VsZCBoYXZlIGFuIGltcGFjdCBhbmQgY3JlYXRlIGEgZ2FwIChmcm9tIE1TRQotICAvLyBwb2ludCBvZiB2aWV3KSBiZXR3ZWVuIHRoZSBsYXN0IGludGVycG9sYXRlZCBmcmFtZSBhbmQKLSAgLy8gfHN0cmVhbV9wYXJzZXJfYnVmZmVyfC4KLSAgYmFzZTo6VGltZURlbHRhIHB0cyA9IG1pbl9wdHNfOwotICBiYXNlOjpUaW1lRGVsdGEgcHRzX2RlbHRhID0KLSAgICAgIChzdHJlYW1fcGFyc2VyX2J1ZmZlci0+dGltZXN0YW1wKCkgLSBwdHMpIC8gZGlzY2FyZGVkX2ZyYW1lX2NvdW50XzsKLSAgRGVjb2RlVGltZXN0YW1wIGR0cyA9IG1pbl9kdHNfOwotICBiYXNlOjpUaW1lRGVsdGEgZHRzX2RlbHRhID0KLSAgICAgIChzdHJlYW1fcGFyc2VyX2J1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCkgLSBkdHMpIC8KLSAgICAgIGRpc2NhcmRlZF9mcmFtZV9jb3VudF87Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXNjYXJkZWRfZnJhbWVfY291bnRfOyBpKyspIHsKLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gZnJhbWUgPSBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKAotICAgICAgICBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+ZGF0YSgpLCBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+ZGF0YV9zaXplKCksCi0gICAgICAgIHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5pc19rZXlfZnJhbWUoKSwgc3RyZWFtX3BhcnNlcl9idWZmZXItPnR5cGUoKSwKLSAgICAgICAgc3RyZWFtX3BhcnNlcl9idWZmZXItPnRyYWNrX2lkKCkpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZnJhbWUtPlNldERlY29kZVRpbWVzdGFtcChkdHMpOwotICAgIGZyYW1lLT5zZXRfdGltZXN0YW1wKHB0cyk7Ci0gICAgZnJhbWUtPnNldF9kdXJhdGlvbihwdHNfZGVsdGEpOwotICAgIGJ1ZmZlcl9saXN0Xy5wdXNoX2JhY2soZnJhbWUpOwotICAgIHB0cyArPSBwdHNfZGVsdGE7Ci0gICAgZHRzICs9IGR0c19kZWx0YTsKLSAgfQotICBkaXNjYXJkZWRfZnJhbWVfY291bnRfID0gMDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfYWRhcHRlcl92aWRlby5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19hZGFwdGVyX3ZpZGVvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTVkZGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19hZGFwdGVyX3ZpZGVvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfRVNfQURBUFRFUl9WSURFT19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX0FEQVBURVJfVklERU9fSF8KLQotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFZpZGVvRGVjb2RlckNvbmZpZzsKLQotbmFtZXNwYWNlIG1wMnQgewotCi0vLyBTb21lIGNvbnN0cmFpbnRzIG9mIHRoZSBNU0Ugc3BlYyBhcmUgbm90IG5lY2Vzc2FyaWx5IG1ldCBieSB2aWRlbyBzdHJlYW1zCi0vLyBpbnNpZGUgYW4gTXBlZzIgVFMgc3RyZWFtLgotLy8gVGhlIGdvYWwgb2YgdGhlIEVTIGFkYXB0ZXIgaXMgdG8gbW9kaWZ5IHRoZSBpbmNvbWluZyBidWZmZXJzIHRvIG1lZXQgdGhlc2UKLS8vIGNvbnN0cmFpbnRzLCBlLmcuCi0vLyAtIGdldCB0aGUgZnJhbWUgZHVyYXRpb24sCi0vLyAtIHJlcGxhY2UgdGhlIGxlYWRpbmcgbm9uLWtleSBmcmFtZXMgYnkgdGhlIGZpcnN0IGtleSBmcmFtZSB0byBhdm9pZAotLy8gICBjcmVhdGluZyBhIGhvbGUgaW4gdGhlIHZpZGVvIHRpbWVsaW5lLgotY2xhc3MgTUVESUFfRVhQT1JUIEVzQWRhcHRlclZpZGVvIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBWaWRlb0RlY29kZXJDb25maWcmKT4gTmV3VmlkZW9Db25maWdDQjsKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPik+IEVtaXRCdWZmZXJDQjsKLQotICBFc0FkYXB0ZXJWaWRlbyhjb25zdCBOZXdWaWRlb0NvbmZpZ0NCJiBuZXdfdmlkZW9fY29uZmlnX2NiLAotICAgICAgICAgICAgICAgICBjb25zdCBFbWl0QnVmZmVyQ0ImIGVtaXRfYnVmZmVyX2NiKTsKLSAgfkVzQWRhcHRlclZpZGVvKCk7Ci0KLSAgLy8gRm9yY2UgdGhlIGVtaXNzaW9uIG9mIHRoZSBwZW5kaW5nIHZpZGVvIGJ1ZmZlcnMuCi0gIHZvaWQgRmx1c2goKTsKLQotICAvLyBSZXNldCB0aGUgRVMgYWRhcHRlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIFByb3ZpZGUgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBhcHBsaWVzIHRvIHRoZSB1cGNvbWluZyB2aWRlbyBidWZmZXJzLgotICB2b2lkIE9uQ29uZmlnQ2hhbmdlZChjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2RlY29kZXJfY29uZmlnKTsKLQotICAvLyBQcm92aWRlIGEgbmV3IHZpZGVvIGJ1ZmZlci4KLSAgLy8gUmV0dXJucyB0cnVlIHdoZW4gc3VjY2Vzc2Z1bC4KLSAgYm9vbCBPbk5ld0J1ZmZlcigKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgc3RyZWFtX3BhcnNlcl9idWZmZXIpOwotCi0gcHJpdmF0ZToKLSAgdHlwZWRlZiBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiA+IEJ1ZmZlclF1ZXVlOwotICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQ2NF90LCBWaWRlb0RlY29kZXJDb25maWc+IENvbmZpZ0VudHJ5OwotCi0gIHZvaWQgUHJvY2Vzc1BlbmRpbmdCdWZmZXJzKGJvb2wgZmx1c2gpOwotCi0gIC8vIFJldHVybiB0aGUgUFRTIG9mIHRoZSBmcmFtZSB0aGF0IGNvbWVzIGp1c3QgYWZ0ZXIgfGN1cnJlbnRfcHRzfCBpbgotICAvLyBwcmVzZW50YXRpb24gb3JkZXIuIFJldHVybiBrTm9UaW1lc3RhbXAgaWYgbm90IGZvdW5kLgotICBiYXNlOjpUaW1lRGVsdGEgR2V0TmV4dEZyYW1lUHRzKGJhc2U6OlRpbWVEZWx0YSBjdXJyZW50X3B0cyk7Ci0KLSAgLy8gUmVwbGFjZSB0aGUgbGVhZGluZyBub24ga2V5IGZyYW1lcyBieSB8c3RyZWFtX3BhcnNlcl9idWZmZXJ8Ci0gIC8vICh0aGlzIG9uZSBtdXN0IGJlIGEga2V5IGZyYW1lKS4KLSAgdm9pZCBSZXBsYWNlRGlzY2FyZGVkRnJhbWVzKAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBzdHJlYW1fcGFyc2VyX2J1ZmZlcik7Ci0KLSAgTmV3VmlkZW9Db25maWdDQiBuZXdfdmlkZW9fY29uZmlnX2NiXzsKLSAgRW1pdEJ1ZmZlckNCIGVtaXRfYnVmZmVyX2NiXzsKLQotICBib29sIGhhc192YWxpZF9jb25maWdfOwotICBib29sIGhhc192YWxpZF9mcmFtZV87Ci0KLSAgLy8gRHVyYXRpb24gb2YgdGhlIGxhc3QgdmlkZW8gZnJhbWUuCi0gIGJhc2U6OlRpbWVEZWx0YSBsYXN0X2ZyYW1lX2R1cmF0aW9uXzsKLQotICAvLyBBc3NvY2lhdGlvbiBiZXR3ZWVuIGEgdmlkZW8gY29uZmlnIGFuZCBhIGJ1ZmZlciBpbmRleC4KLSAgc3RkOjpsaXN0PENvbmZpZ0VudHJ5PiBjb25maWdfbGlzdF87Ci0KLSAgLy8gR2xvYmFsIGluZGV4IG9mIHRoZSBmaXJzdCBidWZmZXIgaW4gfGJ1ZmZlcl9saXN0X3wuCi0gIGludDY0X3QgYnVmZmVyX2luZGV4XzsKLQotICAvLyBMaXN0IG9mIGJ1ZmZlciB0byBiZSBlbWl0dGVkIGFuZCBQVFMgb2YgZnJhbWVzIGFscmVhZHkgZW1pdHRlZC4KLSAgQnVmZmVyUXVldWUgYnVmZmVyX2xpc3RfOwotICBzdGQ6Omxpc3Q8YmFzZTo6VGltZURlbHRhPiBlbWl0dGVkX3B0c187Ci0KLSAgLy8gTWluaW11bSBQVFMvRFRTIHNpbmNlIHRoZSBsYXN0IFJlc2V0LgotICBib29sIGhhc192YWxpZF9pbml0aWFsX3RpbWVzdGFtcF87Ci0gIGJhc2U6OlRpbWVEZWx0YSBtaW5fcHRzXzsKLSAgRGVjb2RlVGltZXN0YW1wIG1pbl9kdHNfOwotCi0gIC8vIE51bWJlciBvZiBmcmFtZXMgdG8gcmVwbGFjZSB3aXRoIHRoZSBmaXJzdCB2YWxpZCBrZXkgZnJhbWUuCi0gIGludCBkaXNjYXJkZWRfZnJhbWVfY291bnRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFc0FkYXB0ZXJWaWRlbyk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19BREFQVEVSX1ZJREVPX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX2FkYXB0ZXJfdmlkZW9fdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX2FkYXB0ZXJfdmlkZW9fdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZTU4ODIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19hZGFwdGVyX3ZpZGVvX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbWFjcm9zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX2FkYXB0ZXJfdmlkZW8uaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1uYW1lc3BhY2UgewotCi1WaWRlb0RlY29kZXJDb25maWcgQ3JlYXRlRmFrZVZpZGVvQ29uZmlnKCkgewotICBtYXRoOjpTaXplIGNvZGVkX3NpemUoMzIwLCAyNDApOwotICBtYXRoOjpSZWN0IHZpc2libGVfcmVjdCgwLCAwLCAzMjAsIDI0MCk7Ci0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplKDMyMCwgMjQwKTsKLSAgcmV0dXJuIFZpZGVvRGVjb2RlckNvbmZpZyhrQ29kZWNIMjY0LCBIMjY0UFJPRklMRV9NQUlOLCBQSVhFTF9GT1JNQVRfSTQyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0xPUl9TUEFDRV9VTlNQRUNJRklFRCwgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxfc2l6ZSwgRW1wdHlFeHRyYURhdGEoKSwgVW5lbmNyeXB0ZWQoKSk7Ci19Ci0KLVN0cmVhbVBhcnNlckJ1ZmZlcjo6QnVmZmVyUXVldWUgR2VuZXJhdGVGYWtlQnVmZmVycyhjb25zdCBpbnQqIGZyYW1lX3B0c19tcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sKiBpc19rZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lX2NvdW50KSB7Ci0gIHVpbnQ4X3QgZHVtbXlfYnVmZmVyW10gPSB7MCwgMCwgMCwgMH07Ci0KLSAgU3RyZWFtUGFyc2VyQnVmZmVyOjpCdWZmZXJRdWV1ZSBidWZmZXJzKGZyYW1lX2NvdW50KTsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmcmFtZV9jb3VudDsgaysrKSB7Ci0gICAgYnVmZmVyc1trXSA9Ci0gICAgICAgIFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oZHVtbXlfYnVmZmVyLCBhcnJheXNpemUoZHVtbXlfYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19rZXlfZnJhbWVba10sIERlbXV4ZXJTdHJlYW06OlZJREVPLCAwKTsKLSAgICBBU1NFUlRfVFJVRShidWZmZXJzW2tdKTsKLSAgICBpZiAoZnJhbWVfcHRzX21zW2tdIDwgMCkgewotICAgICAgYnVmZmVyc1trXS0+c2V0X3RpbWVzdGFtcChrTm9UaW1lc3RhbXApOwotICAgIH0gZWxzZSB7Ci0gICAgICBidWZmZXJzW2tdLT5zZXRfdGltZXN0YW1wKAotICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhmcmFtZV9wdHNfbXNba10pKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGJ1ZmZlcnM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBFc0FkYXB0ZXJWaWRlb1Rlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBFc0FkYXB0ZXJWaWRlb1Rlc3QoKTsKLQotIHByb3RlY3RlZDoKLSAgLy8gRmVlZCB0aGUgRVMgYWRhcHRlciB3aXRoIHRoZSBidWZmZXJzIGZyb20gfGJ1ZmZlcl9xdWV1ZXwuCi0gIC8vIFJldHVybiB0aGUgZHVyYXRpb25zIGNvbXB1dGVkIGJ5IHRoZSBFUyBhZGFwdGVyIGFzIHdlbGwgYXMKLSAgLy8gd2hldGhlciBlYWNoIGZyYW1lIGVtaXR0ZWQgYnkgdGhlIGFkYXB0ZXIgaXMgYSBrZXkgZnJhbWUuCi0gIHN0ZDo6c3RyaW5nIFJ1bkFkYXB0ZXJUZXN0KGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUmIGJ1ZmZlcl9xdWV1ZSk7Ci0KLSBwcml2YXRlOgotICB2b2lkIE9uTmV3Q29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnKTsKLSAgdm9pZCBPbk5ld0J1ZmZlcihzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyKTsKLQotICBFc0FkYXB0ZXJWaWRlbyBlc19hZGFwdGVyXzsKLQotICBzdGQ6OnN0cmluZ3N0cmVhbSBidWZmZXJfZGVzY3JpcHRvcnNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFc0FkYXB0ZXJWaWRlb1Rlc3QpOwotfTsKLQotRXNBZGFwdGVyVmlkZW9UZXN0OjpFc0FkYXB0ZXJWaWRlb1Rlc3QoKQotICAgIDogZXNfYWRhcHRlcl8oCi0gICAgICAgICAgYmFzZTo6QmluZCgmRXNBZGFwdGVyVmlkZW9UZXN0OjpPbk5ld0NvbmZpZywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgICAgYmFzZTo6QmluZCgmRXNBZGFwdGVyVmlkZW9UZXN0OjpPbk5ld0J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpKSB7fQotCi12b2lkIEVzQWRhcHRlclZpZGVvVGVzdDo6T25OZXdDb25maWcoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcpIHt9Ci0KLXZvaWQgRXNBZGFwdGVyVmlkZW9UZXN0OjpPbk5ld0J1ZmZlcihzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyKSB7Ci0gIGJ1ZmZlcl9kZXNjcmlwdG9yc18gPDwgIigiIDw8IGJ1ZmZlci0+ZHVyYXRpb24oKS5Jbk1pbGxpc2Vjb25kcygpIDw8ICIsIgotICAgICAgICAgICAgICAgICAgICAgIDw8IChidWZmZXItPmlzX2tleV9mcmFtZSgpID8gIlkiIDogIk4iKSA8PCAiKSAiOwotfQotCi1zdGQ6OnN0cmluZyBFc0FkYXB0ZXJWaWRlb1Rlc3Q6OlJ1bkFkYXB0ZXJUZXN0KAotICAgIGNvbnN0IFN0cmVhbVBhcnNlckJ1ZmZlcjo6QnVmZmVyUXVldWUmIGJ1ZmZlcl9xdWV1ZSkgewotICBidWZmZXJfZGVzY3JpcHRvcnNfLmNsZWFyKCk7Ci0KLSAgZXNfYWRhcHRlcl8uT25Db25maWdDaGFuZ2VkKENyZWF0ZUZha2VWaWRlb0NvbmZpZygpKTsKLSAgZm9yIChTdHJlYW1QYXJzZXJCdWZmZXI6OkJ1ZmZlclF1ZXVlOjpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICAgICAgIGJ1ZmZlcl9xdWV1ZS5iZWdpbigpOwotICAgICAgIGl0ICE9IGJ1ZmZlcl9xdWV1ZS5lbmQoKTsgKytpdCkgewotICAgIGVzX2FkYXB0ZXJfLk9uTmV3QnVmZmVyKCppdCk7Ci0gIH0KLSAgZXNfYWRhcHRlcl8uRmx1c2goKTsKLQotICBzdGQ6OnN0cmluZyBzID0gYnVmZmVyX2Rlc2NyaXB0b3JzXy5zdHIoKTsKLSAgYmFzZTo6VHJpbVdoaXRlc3BhY2VBU0NJSShzLCBiYXNlOjpUUklNX0FMTCwgJnMpOwotICByZXR1cm4gczsKLX0KLQotVEVTVF9GKEVzQWRhcHRlclZpZGVvVGVzdCwgRnJhbWVEdXJhdGlvblNpbXBsZUdvcCkgewotICAvLyBQVFMgZm9yIGEgR09QIHdpdGhvdXQgQiBmcmFtZXMgLSBzdHJpY3RseSBpbmNyZWFzaW5nLgotICBpbnQgcHRzX21zW10gPSB7MzAsIDMxLCAzMywgMzYsIDQwLCA0NSwgNTEsIDU4fTsKLSAgYm9vbCBpc19rZXlfZnJhbWVbXSA9IHt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07Ci0gIFN0cmVhbVBhcnNlckJ1ZmZlcjo6QnVmZmVyUXVldWUgYnVmZmVyX3F1ZXVlID0KLSAgICAgIEdlbmVyYXRlRmFrZUJ1ZmZlcnMocHRzX21zLCBpc19rZXlfZnJhbWUsIGFycmF5c2l6ZShwdHNfbXMpKTsKLQotICBFWFBFQ1RfRVEoIigxLFkpICgyLE4pICgzLE4pICg0LE4pICg1LE4pICg2LE4pICg3LE4pICg3LE4pIiwKLSAgICAgICAgICAgIFJ1bkFkYXB0ZXJUZXN0KGJ1ZmZlcl9xdWV1ZSkpOwotfQotCi1URVNUX0YoRXNBZGFwdGVyVmlkZW9UZXN0LCBGcmFtZUR1cmF0aW9uQ29tcGxleEdvcCkgewotICAvLyBQVFMgZm9yIGEgR09QIHdpdGggQiBmcmFtZXMuCi0gIGludCBwdHNfbXNbXSA9IHszMCwgMTIwLCA2MCwgOTAsIDIxMCwgMTUwLCAxODAsIDMwMCwgMjQwLCAyNzB9OwotICBib29sIGlzX2tleV9mcmFtZVtdID0ge3RydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwotICBTdHJlYW1QYXJzZXJCdWZmZXI6OkJ1ZmZlclF1ZXVlIGJ1ZmZlcl9xdWV1ZSA9Ci0gICAgICBHZW5lcmF0ZUZha2VCdWZmZXJzKHB0c19tcywgaXNfa2V5X2ZyYW1lLCBhcnJheXNpemUocHRzX21zKSk7Ci0KLSAgRVhQRUNUX0VRKAotICAgICAgIigzMCxZKSAoMzAsTikgKDMwLE4pICgzMCxOKSAoMzAsTikgIgotICAgICAgIigzMCxOKSAoMzAsTikgKDMwLE4pICgzMCxOKSAoMzAsTikiLAotICAgICAgUnVuQWRhcHRlclRlc3QoYnVmZmVyX3F1ZXVlKSk7Ci19Ci0KLVRFU1RfRihFc0FkYXB0ZXJWaWRlb1Rlc3QsIExlYWRpbmdOb25LZXlGcmFtZXMpIHsKLSAgaW50IHB0c19tc1tdID0gezMwLCA0MCwgNTAsIDEyMCwgMTUwLCAxODB9OwotICBib29sIGlzX2tleV9mcmFtZVtdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZX07Ci0gIFN0cmVhbVBhcnNlckJ1ZmZlcjo6QnVmZmVyUXVldWUgYnVmZmVyX3F1ZXVlID0KLSAgICAgIEdlbmVyYXRlRmFrZUJ1ZmZlcnMocHRzX21zLCBpc19rZXlfZnJhbWUsIGFycmF5c2l6ZShwdHNfbXMpKTsKLQotICBFWFBFQ1RfRVEoIigzMCxZKSAoMzAsWSkgKDMwLFkpICgzMCxZKSAoMzAsTikgKDMwLE4pIiwKLSAgICAgICAgICAgIFJ1bkFkYXB0ZXJUZXN0KGJ1ZmZlcl9xdWV1ZSkpOwotfQotCi1URVNUX0YoRXNBZGFwdGVyVmlkZW9UZXN0LCBMZWFkaW5nS2V5RnJhbWVXaXRoTm9UaW1lc3RhbXApIHsKLSAgaW50IHB0c19tc1tdID0gey0xLCA0MCwgNTAsIDEyMCwgMTUwLCAxODB9OwotICBib29sIGlzX2tleV9mcmFtZVtdID0ge3RydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlfTsKLSAgU3RyZWFtUGFyc2VyQnVmZmVyOjpCdWZmZXJRdWV1ZSBidWZmZXJfcXVldWUgPQotICAgICAgR2VuZXJhdGVGYWtlQnVmZmVycyhwdHNfbXMsIGlzX2tleV9mcmFtZSwgYXJyYXlzaXplKHB0c19tcykpOwotCi0gIEVYUEVDVF9FUSgiKDQwLFkpICg0MCxZKSAoMzAsWSkgKDMwLE4pICgzMCxOKSIsIFJ1bkFkYXB0ZXJUZXN0KGJ1ZmZlcl9xdWV1ZSkpOwotfQotCi1URVNUX0YoRXNBZGFwdGVyVmlkZW9UZXN0LCBMZWFkaW5nRnJhbWVzV2l0aE5vVGltZXN0YW1wKSB7Ci0gIGludCBwdHNfbXNbXSA9IHstMSwgLTEsIDUwLCAxMjAsIDE1MCwgMTgwfTsKLSAgYm9vbCBpc19rZXlfZnJhbWVbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2V9OwotICBTdHJlYW1QYXJzZXJCdWZmZXI6OkJ1ZmZlclF1ZXVlIGJ1ZmZlcl9xdWV1ZSA9Ci0gICAgICBHZW5lcmF0ZUZha2VCdWZmZXJzKHB0c19tcywgaXNfa2V5X2ZyYW1lLCBhcnJheXNpemUocHRzX21zKSk7Ci0KLSAgRVhQRUNUX0VRKCIoNzAsWSkgKDMwLFkpICgzMCxOKSAoMzAsTikiLCBSdW5BZGFwdGVyVGVzdChidWZmZXJfcXVldWUpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIwYzYzNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDJ0IHsKLQotRXNQYXJzZXI6OlRpbWluZ0Rlc2M6OlRpbWluZ0Rlc2MoKQotICAgIDogZHRzKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwgcHRzKGtOb1RpbWVzdGFtcCkge30KLQotRXNQYXJzZXI6OlRpbWluZ0Rlc2M6OlRpbWluZ0Rlc2MoRGVjb2RlVGltZXN0YW1wIGR0c19pbiwgYmFzZTo6VGltZURlbHRhIHB0c19pbikKLSAgICA6IGR0cyhkdHNfaW4pLCBwdHMocHRzX2luKSB7fQotCi1Fc1BhcnNlcjo6RXNQYXJzZXIoKSA6IGVzX3F1ZXVlXyhuZXcgbWVkaWE6Ok9mZnNldEJ5dGVRdWV1ZSgpKSB7fQotCi1Fc1BhcnNlcjo6fkVzUGFyc2VyKCkge30KLQotYm9vbCBFc1BhcnNlcjo6UGFyc2UoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwgYmFzZTo6VGltZURlbHRhIHB0cywKLSAgICAgICAgICAgICAgICAgICAgIERlY29kZVRpbWVzdGFtcCBkdHMpIHsKLSAgRENIRUNLKGJ1Zik7Ci0gIERDSEVDS19HVChzaXplLCAwKTsKLQotICBpZiAocHRzICE9IGtOb1RpbWVzdGFtcCkgewotICAgIC8vIExpbmsgdGhlIGVuZCBvZiB0aGUgYnl0ZSBxdWV1ZSB3aXRoIHRoZSBpbmNvbWluZyB0aW1pbmcgZGVzY3JpcHRvci4KLSAgICBUaW1pbmdEZXNjIHRpbWluZ19kZXNjKGR0cywgcHRzKTsKLSAgICB0aW1pbmdfZGVzY19saXN0Xy5wdXNoX2JhY2soCi0gICAgICAgIHN0ZDo6cGFpcjxpbnQ2NF90LCBUaW1pbmdEZXNjPihlc19xdWV1ZV8tPnRhaWwoKSwgdGltaW5nX2Rlc2MpKTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgaW5jb21pbmcgYnl0ZXMgdG8gdGhlIEVTIHF1ZXVlLgotICBlc19xdWV1ZV8tPlB1c2goYnVmLCBzaXplKTsKLSAgcmV0dXJuIFBhcnNlRnJvbUVzUXVldWUoKTsKLX0KLQotdm9pZCBFc1BhcnNlcjo6UmVzZXQoKSB7Ci0gIGVzX3F1ZXVlXy5yZXNldChuZXcgbWVkaWE6Ok9mZnNldEJ5dGVRdWV1ZSgpKTsKLSAgdGltaW5nX2Rlc2NfbGlzdF8uY2xlYXIoKTsKLSAgUmVzZXRJbnRlcm5hbCgpOwotfQotCi1Fc1BhcnNlcjo6VGltaW5nRGVzYyBFc1BhcnNlcjo6R2V0VGltaW5nRGVzY3JpcHRvcihpbnQ2NF90IGVzX2J5dGVfY291bnQpIHsKLSAgVGltaW5nRGVzYyB0aW1pbmdfZGVzYzsKLSAgd2hpbGUgKCF0aW1pbmdfZGVzY19saXN0Xy5lbXB0eSgpICYmCi0gICAgICAgICB0aW1pbmdfZGVzY19saXN0Xy5mcm9udCgpLmZpcnN0IDw9IGVzX2J5dGVfY291bnQpIHsKLSAgICB0aW1pbmdfZGVzYyA9IHRpbWluZ19kZXNjX2xpc3RfLmZyb250KCkuc2Vjb25kOwotICAgIHRpbWluZ19kZXNjX2xpc3RfLnBvcF9mcm9udCgpOwotICB9Ci0gIHJldHVybiB0aW1pbmdfZGVzYzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXIuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMmE5ODkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE9mZnNldEJ5dGVRdWV1ZTsKLWNsYXNzIFN0cmVhbVBhcnNlckJ1ZmZlcjsKLQotbmFtZXNwYWNlIG1wMnQgewotCi1jbGFzcyBNRURJQV9FWFBPUlQgRXNQYXJzZXIgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPik+IEVtaXRCdWZmZXJDQjsKLQotICBFc1BhcnNlcigpOwotICB2aXJ0dWFsIH5Fc1BhcnNlcigpOwotCi0gIC8vIEVTIHBhcnNpbmcuCi0gIC8vIFNob3VsZCB1c2Uga05vVGltZXN0YW1wIHdoZW4gYSB0aW1lc3RhbXAgaXMgbm90IHZhbGlkLgotICBib29sIFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUsIGJhc2U6OlRpbWVEZWx0YSBwdHMsCi0gICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wIGR0cyk7Ci0KLSAgLy8gRmx1c2ggYW55IHBlbmRpbmcgYnVmZmVyLgotICB2aXJ0dWFsIHZvaWQgRmx1c2goKSA9IDA7Ci0KLSAgLy8gUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBFUyBwYXJzZXIuCi0gIHZvaWQgUmVzZXQoKTsKLQotIHByb3RlY3RlZDoKLSAgc3RydWN0IFRpbWluZ0Rlc2MgewotICAgIFRpbWluZ0Rlc2MoKTsKLSAgICBUaW1pbmdEZXNjKERlY29kZVRpbWVzdGFtcCBkdHMsIGJhc2U6OlRpbWVEZWx0YSBwdHMpOwotCi0gICAgRGVjb2RlVGltZXN0YW1wIGR0czsKLSAgICBiYXNlOjpUaW1lRGVsdGEgcHRzOwotICB9OwotCi0gIC8vIFBhcnNlIEVTIGRhdGEgZnJvbSB8ZXNfcXVldWVffC4KLSAgLy8gUmV0dXJuIHRydWUgd2hlbiBzdWNjZXNzZnVsLgotICB2aXJ0dWFsIGJvb2wgUGFyc2VGcm9tRXNRdWV1ZSgpID0gMDsKLQotICAvLyBSZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIEVTIHBhcnNlci4KLSAgdmlydHVhbCB2b2lkIFJlc2V0SW50ZXJuYWwoKSA9IDA7Ci0KLSAgLy8gR2V0IHRoZSB0aW1pbmcgZGVzY3JpcHRvciB3aXRoIHRoZSBsYXJnZXN0IGJ5dGUgY291bnQgdGhhdCBpcyBsZXNzIG9yCi0gIC8vIGVxdWFsIHRvIHxlc19ieXRlX2NvdW50fC4KLSAgLy8gVGhpcyB0aW1pbmcgZGVzY3JpcHRvciBhbmQgYWxsIHRoZSBvbmVzIHRoYXQgY29tZSBiZWZvcmUgKGluIHN0cmVhbSBvcmRlcikKLSAgLy8gYXJlIHJlbW92ZWQgZnJvbSBsaXN0IHx0aW1pbmdfZGVzY19saXN0X3wuCi0gIC8vIElmIG5vIHRpbWluZyBkZXNjcmlwdG9yIGlzIGZvdW5kLCB0aGVuIHRoZSBkZWZhdWx0IFRpbWluZ0Rlc2MgaXMgcmV0dXJuZWQuCi0gIFRpbWluZ0Rlc2MgR2V0VGltaW5nRGVzY3JpcHRvcihpbnQ2NF90IGVzX2J5dGVfY291bnQpOwotCi0gIC8vIEJ5dGVzIG9mIHRoZSBFUyBzdHJlYW0gdGhhdCBoYXZlIG5vdCBiZWVuIGVtaXR0ZWQgeWV0LgotICBzdGQ6OnVuaXF1ZV9wdHI8bWVkaWE6Ok9mZnNldEJ5dGVRdWV1ZT4gZXNfcXVldWVfOwotCi0gcHJpdmF0ZToKLSAgLy8gQW5jaG9yIHNvbWUgdGltaW5nIGluZm9ybWF0aW9uIGludG8gdGhlIEVTIHF1ZXVlLgotICAvLyBIZXJlIGFyZSB0d28gZXhhbXBsZXMgaG93IHRoaXMgdGltaW5nIGluZm8gaXMgYXBwbGllZCBhY2NvcmRpbmcgdG8KLSAgLy8gdGhlIE1QRUctMiBUUyBzcGVjIC0gSVNPL0lFQyAxMzgxODoKLSAgLy8gLSAiSW4gdGhlIGNhc2Ugb2YgYXVkaW8sIGlmIGEgUFRTIGlzIHByZXNlbnQgaW4gUEVTIHBhY2tldCBoZWFkZXIgaXQgc2hhbGwKLSAgLy8gcmVmZXIgdG8gdGhlIGZpcnN0IGFjY2VzcyB1bml0IGNvbW1lbmNpbmcgaW4gdGhlIFBFUyBwYWNrZXQuIEFuIGF1ZGlvCi0gIC8vIGFjY2VzcyB1bml0IGNvbW1lbmNlcyBpbiBhIFBFUyBwYWNrZXQgaWYgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGF1ZGlvCi0gIC8vIGFjY2VzcyB1bml0IGlzIHByZXNlbnQgaW4gdGhlIFBFUyBwYWNrZXQuIgotICAvLyAtICJGb3IgQVZDIHZpZGVvIHN0cmVhbXMgY29uZm9ybWluZyB0byBvbmUgb3IgbW9yZSBwcm9maWxlcyBkZWZpbmVkCi0gIC8vIGluIEFubmV4IEEgb2YgUmVjLiBJVFUtVCBILjI2NCB8IElTTy9JRUMgMTQ0OTYtMTAgdmlkZW8sIGlmIGEgUFRTIGlzCi0gIC8vIHByZXNlbnQgaW4gdGhlIFBFUyBwYWNrZXQgaGVhZGVyLCBpdCBzaGFsbCByZWZlciB0byB0aGUgZmlyc3QgQVZDIGFjY2VzcwotICAvLyB1bml0IHRoYXQgY29tbWVuY2VzIGluIHRoaXMgUEVTIHBhY2tldC4KLSAgc3RkOjpsaXN0PHN0ZDo6cGFpcjxpbnQ2NF90LCBUaW1pbmdEZXNjPj4gdGltaW5nX2Rlc2NfbGlzdF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEVzUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0cy5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2FkdHMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzM2MTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0cy5jYworKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9hZHRzLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIGludCBFeHRyYWN0QWR0c0ZyYW1lU2l6ZShjb25zdCB1aW50OF90KiBhZHRzX2hlYWRlcikgewotICByZXR1cm4gKChzdGF0aWNfY2FzdDxpbnQ+KGFkdHNfaGVhZGVyWzVdKSA+PiA1KSB8Ci0gICAgICAgICAgKHN0YXRpY19jYXN0PGludD4oYWR0c19oZWFkZXJbNF0pIDw8IDMpIHwKLSAgICAgICAgICAoKHN0YXRpY19jYXN0PGludD4oYWR0c19oZWFkZXJbM10pICYgMHgzKSA8PCAxMSkpOwotfQotCi0vLyBSZXR1cm4gdHJ1ZSBpZiBidWYgY29ycmVzcG9uZHMgdG8gYW4gQURUUyBzeW5jd29yZC4KLS8vIHxidWZ8IHNpemUgbXVzdCBiZSBhdCBsZWFzdCAyLgotc3RhdGljIGJvb2wgaXNBZHRzU3luY1dvcmQoY29uc3QgdWludDhfdCogYnVmKSB7Ci0gIC8vIFRoZSBmaXJzdCAxMiBiaXRzIG11c3QgYmUgMS4KLSAgLy8gVGhlIGxheWVyIGZpZWxkICgyIGJpdHMpIG11c3QgYmUgc2V0IHRvIDAuCi0gIHJldHVybiAoYnVmWzBdID09IDB4ZmYpICYmICgoYnVmWzFdICYgMHhmNikgPT0gMHhmMCk7Ci19Ci0KLW5hbWVzcGFjZSBtcDJ0IHsKLQotc3RydWN0IEVzUGFyc2VyQWR0czo6QWR0c0ZyYW1lIHsKLSAgLy8gUG9pbnRlciB0byB0aGUgRVMgZGF0YS4KLSAgY29uc3QgdWludDhfdCogZGF0YTsKLQotICAvLyBGcmFtZSBzaXplOwotICBpbnQgc2l6ZTsKLQotICAvLyBGcmFtZSBvZmZzZXQgaW4gdGhlIEVTIHF1ZXVlLgotICBpbnQ2NF90IHF1ZXVlX29mZnNldDsKLX07Ci0KLWJvb2wgRXNQYXJzZXJBZHRzOjpMb29rRm9yQWR0c0ZyYW1lKEFkdHNGcmFtZSogYWR0c19mcmFtZSkgewotICBpbnQgZXNfc2l6ZTsKLSAgY29uc3QgdWludDhfdCogZXM7Ci0gIGVzX3F1ZXVlXy0+UGVlaygmZXMsICZlc19zaXplKTsKLQotICBpbnQgbWF4X29mZnNldCA9IGVzX3NpemUgLSBrQURUU0hlYWRlck1pblNpemU7Ci0gIGlmIChtYXhfb2Zmc2V0IDw9IDApIHJldHVybiBmYWxzZTsKLQotICBmb3IgKGludCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBtYXhfb2Zmc2V0OyBvZmZzZXQrKykgewotICAgIGNvbnN0IHVpbnQ4X3QqIGN1cl9idWYgPSAmZXNbb2Zmc2V0XTsKLSAgICBpZiAoIWlzQWR0c1N5bmNXb3JkKGN1cl9idWYpKSBjb250aW51ZTsKLQotICAgIGludCBmcmFtZV9zaXplID0gRXh0cmFjdEFkdHNGcmFtZVNpemUoY3VyX2J1Zik7Ci0gICAgaWYgKGZyYW1lX3NpemUgPCBrQURUU0hlYWRlck1pblNpemUpIHsKLSAgICAgIC8vIFRvbyBzaG9ydCB0byBiZSBhbiBBRFRTIGZyYW1lLgotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaW50IHJlbWFpbmluZ19zaXplID0gZXNfc2l6ZSAtIG9mZnNldDsKLSAgICBpZiAocmVtYWluaW5nX3NpemUgPCBmcmFtZV9zaXplKSB7Ci0gICAgICAvLyBOb3QgYSBmdWxsIGZyYW1lOiB3aWxsIHJlc3VtZSB3aGVuIHdlIGhhdmUgbW9yZSBkYXRhLgotICAgICAgZXNfcXVldWVfLT5Qb3Aob2Zmc2V0KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFub3RoZXIgZnJhbWUKLSAgICAvLyB8c2l6ZXwgYXBhcnQgZnJvbSB0aGUgY3VycmVudCBvbmUuCi0gICAgaWYgKHJlbWFpbmluZ19zaXplID49IGZyYW1lX3NpemUgKyAyICYmCi0gICAgICAgICFpc0FkdHNTeW5jV29yZCgmY3VyX2J1ZltmcmFtZV9zaXplXSkpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGVzX3F1ZXVlXy0+UG9wKG9mZnNldCk7Ci0gICAgZXNfcXVldWVfLT5QZWVrKCZhZHRzX2ZyYW1lLT5kYXRhLCAmZXNfc2l6ZSk7Ci0gICAgYWR0c19mcmFtZS0+cXVldWVfb2Zmc2V0ID0gZXNfcXVldWVfLT5oZWFkKCk7Ci0gICAgYWR0c19mcmFtZS0+c2l6ZSA9IGZyYW1lX3NpemU7Ci0gICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiQURUUyBzeW5jd29yZCBAIHBvcz0iIDw8IGFkdHNfZnJhbWUtPnF1ZXVlX29mZnNldAotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBmcmFtZV9zaXplPSIgPDwgYWR0c19mcmFtZS0+c2l6ZTsKLSAgICBEVkxPRyhMT0dfTEVWRUxfRVMpIDw8ICJBRFRTIGhlYWRlcjogIgotICAgICAgICAgICAgICAgICAgICAgICAgPDwgYmFzZTo6SGV4RW5jb2RlKGFkdHNfZnJhbWUtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0FEVFNIZWFkZXJNaW5TaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGVzX3F1ZXVlXy0+UG9wKG1heF9vZmZzZXQpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXNQYXJzZXJBZHRzOjpTa2lwQWR0c0ZyYW1lKGNvbnN0IEFkdHNGcmFtZSYgYWR0c19mcmFtZSkgewotICBEQ0hFQ0tfRVEoYWR0c19mcmFtZS5xdWV1ZV9vZmZzZXQsIGVzX3F1ZXVlXy0+aGVhZCgpKTsKLSAgZXNfcXVldWVfLT5Qb3AoYWR0c19mcmFtZS5zaXplKTsKLX0KLQotRXNQYXJzZXJBZHRzOjpFc1BhcnNlckFkdHMoY29uc3QgTmV3QXVkaW9Db25maWdDQiYgbmV3X2F1ZGlvX2NvbmZpZ19jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRCdWZmZXJDQiYgZW1pdF9idWZmZXJfY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNicl9pbl9taW1ldHlwZSkKLSAgICA6IG5ld19hdWRpb19jb25maWdfY2JfKG5ld19hdWRpb19jb25maWdfY2IpLAotICAgICAgZW1pdF9idWZmZXJfY2JfKGVtaXRfYnVmZmVyX2NiKSwKLSAgICAgIHNicl9pbl9taW1ldHlwZV8oc2JyX2luX21pbWV0eXBlKSB7fQotCi1Fc1BhcnNlckFkdHM6On5Fc1BhcnNlckFkdHMoKSB7fQotCi1ib29sIEVzUGFyc2VyQWR0czo6UGFyc2VGcm9tRXNRdWV1ZSgpIHsKLSAgLy8gTG9vayBmb3IgZXZlcnkgQURUUyBmcmFtZSBpbiB0aGUgRVMgYnVmZmVyLgotICBBZHRzRnJhbWUgYWR0c19mcmFtZTsKLSAgd2hpbGUgKExvb2tGb3JBZHRzRnJhbWUoJmFkdHNfZnJhbWUpKSB7Ci0gICAgLy8gVXBkYXRlIHRoZSBhdWRpbyBjb25maWd1cmF0aW9uIGlmIG5lZWRlZC4KLSAgICBEQ0hFQ0tfR0UoYWR0c19mcmFtZS5zaXplLCBrQURUU0hlYWRlck1pblNpemUpOwotICAgIGlmICghVXBkYXRlQXVkaW9Db25maWd1cmF0aW9uKGFkdHNfZnJhbWUuZGF0YSwgYWR0c19mcmFtZS5zaXplKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEdldCB0aGUgUFRTICYgdGhlIGR1cmF0aW9uIG9mIHRoaXMgYWNjZXNzIHVuaXQuCi0gICAgVGltaW5nRGVzYyBjdXJyZW50X3RpbWluZ19kZXNjID0KLSAgICAgICAgR2V0VGltaW5nRGVzY3JpcHRvcihhZHRzX2ZyYW1lLnF1ZXVlX29mZnNldCk7Ci0gICAgaWYgKGN1cnJlbnRfdGltaW5nX2Rlc2MucHRzICE9IGtOb1RpbWVzdGFtcCkKLSAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5TZXRCYXNlVGltZXN0YW1wKGN1cnJlbnRfdGltaW5nX2Rlc2MucHRzKTsKLQotICAgIGlmIChhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+YmFzZV90aW1lc3RhbXAoKSA9PSBrTm9UaW1lc3RhbXApIHsKLSAgICAgIERWTE9HKDEpIDw8ICJTa2lwcGluZyBhdWRpbyBmcmFtZSB3aXRoIHVua25vd24gdGltZXN0YW1wIjsKLSAgICAgIFNraXBBZHRzRnJhbWUoYWR0c19mcmFtZSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgYmFzZTo6VGltZURlbHRhIGN1cnJlbnRfcHRzID0gYXVkaW9fdGltZXN0YW1wX2hlbHBlcl8tPkdldFRpbWVzdGFtcCgpOwotICAgIGJhc2U6OlRpbWVEZWx0YSBmcmFtZV9kdXJhdGlvbiA9Ci0gICAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5HZXRGcmFtZUR1cmF0aW9uKGtTYW1wbGVzUGVyQUFDRnJhbWUpOwotCi0gICAgLy8gRW1pdCBhbiBhdWRpbyBmcmFtZS4KLSAgICBib29sIGlzX2tleV9mcmFtZSA9IHRydWU7Ci0KLSAgICAvLyBUT0RPKHdvbGVuZXR6L2Fjb2x3ZWxsKTogVmFsaWRhdGUgYW5kIHVzZSBhIGNvbW1vbiBjcm9zcy1wYXJzZXIgVHJhY2tJZAotICAgIC8vIHR5cGUgYW5kIGFsbG93IG11bHRpcGxlIGF1ZGlvIHRyYWNrcy4gU2VlIGh0dHBzOi8vY3JidWcuY29tLzM0MTU4MS4KLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gc3RyZWFtX3BhcnNlcl9idWZmZXIgPQotICAgICAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKGFkdHNfZnJhbWUuZGF0YSwgYWR0c19mcmFtZS5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2tleV9mcmFtZSwgRGVtdXhlclN0cmVhbTo6QVVESU8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01wMnRBdWRpb1RyYWNrSWQpOwotICAgIGlmICghc3RyZWFtX3BhcnNlcl9idWZmZXIpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3RyZWFtX3BhcnNlcl9idWZmZXItPnNldF90aW1lc3RhbXAoY3VycmVudF9wdHMpOwotICAgIHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5TZXREZWNvZGVUaW1lc3RhbXAoCi0gICAgICAgIERlY29kZVRpbWVzdGFtcDo6RnJvbVByZXNlbnRhdGlvblRpbWUoY3VycmVudF9wdHMpKTsKLSAgICBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+c2V0X2R1cmF0aW9uKGZyYW1lX2R1cmF0aW9uKTsKLSAgICBlbWl0X2J1ZmZlcl9jYl8uUnVuKHN0cmVhbV9wYXJzZXJfYnVmZmVyKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgUFRTIG9mIHRoZSBuZXh0IGZyYW1lLgotICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5BZGRGcmFtZXMoa1NhbXBsZXNQZXJBQUNGcmFtZSk7Ci0KLSAgICAvLyBTa2lwIHRoZSBjdXJyZW50IGZyYW1lLgotICAgIFNraXBBZHRzRnJhbWUoYWR0c19mcmFtZSk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFc1BhcnNlckFkdHM6OkZsdXNoKCkge30KLQotdm9pZCBFc1BhcnNlckFkdHM6OlJlc2V0SW50ZXJuYWwoKSB7Ci0gIGxhc3RfYXVkaW9fZGVjb2Rlcl9jb25maWdfID0gQXVkaW9EZWNvZGVyQ29uZmlnKCk7Ci19Ci0KLWJvb2wgRXNQYXJzZXJBZHRzOjpVcGRhdGVBdWRpb0NvbmZpZ3VyYXRpb24oY29uc3QgdWludDhfdCogYWR0c19oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKSB7Ci0gIGludCBvcmlnX3NhbXBsZV9yYXRlOwotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBleHRyYV9kYXRhOwotICBpZiAoYWR0c19wYXJzZXJfLlBhcnNlRnJhbWVIZWFkZXIoYWR0c19oZWFkZXIsIHNpemUsIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3JpZ19zYW1wbGVfcmF0ZSwgJmNoYW5uZWxfbGF5b3V0LCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgJmV4dHJhX2RhdGEpIDw9IDApIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgd3JpdHRlbiBhY2NvcmRpbmcgdG8gSVNPIDE0NDk2IFBhcnQgMyBUYWJsZSAxLjExIGFuZAotICAvLyBUYWJsZSAxLjIyLiAoVGFibGUgMS4xMSByZWZlcnMgdG8gdGhlIGNhcHBpbmcgdG8gNDgwMDAsIFRhYmxlIDEuMjIgcmVmZXJzCi0gIC8vIHRvIFNCUiBkb3VibGluZyB0aGUgQUFDIHNhbXBsZSByYXRlLikKLSAgLy8gVE9ETyhkYW1pZW52KSA6IEV4dGVuZCBzYW1wbGUgcmF0ZSBjYXAgdG8gOTZrSHogZm9yIExldmVsIDUgY29udGVudC4KLSAgY29uc3QgaW50IGV4dGVuZGVkX3NhbXBsZXNfcGVyX3NlY29uZCA9Ci0gICAgICBzYnJfaW5fbWltZXR5cGVfID8gc3RkOjptaW4oMiAqIG9yaWdfc2FtcGxlX3JhdGUsIDQ4MDAwKQotICAgICAgICAgICAgICAgICAgICAgICA6IG9yaWdfc2FtcGxlX3JhdGU7Ci0KLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2RlY29kZXJfY29uZmlnKAotICAgICAga0NvZGVjQUFDLCBrU2FtcGxlRm9ybWF0UzE2LCBjaGFubmVsX2xheW91dCwgZXh0ZW5kZWRfc2FtcGxlc19wZXJfc2Vjb25kLAotICAgICAgZXh0cmFfZGF0YSwgVW5lbmNyeXB0ZWQoKSk7Ci0KLSAgaWYgKCFhdWRpb19kZWNvZGVyX2NvbmZpZy5NYXRjaGVzKGxhc3RfYXVkaW9fZGVjb2Rlcl9jb25maWdfKSkgewotICAgIERWTE9HKDEpIDw8ICJTYW1wbGluZyBmcmVxdWVuY3k6ICIKLSAgICAgICAgICAgICA8PCBhdWRpb19kZWNvZGVyX2NvbmZpZy5zYW1wbGVzX3Blcl9zZWNvbmQoKQotICAgICAgICAgICAgIDw8ICIgU0JSPSIgPDwgc2JyX2luX21pbWV0eXBlXzsKLSAgICBEVkxPRygxKSA8PCAiQ2hhbm5lbCBsYXlvdXQ6ICIKLSAgICAgICAgICAgICA8PCBDaGFubmVsTGF5b3V0VG9TdHJpbmcoYXVkaW9fZGVjb2Rlcl9jb25maWcuY2hhbm5lbF9sYXlvdXQoKSk7Ci0KLSAgICAvLyBGb3IgQUFDIGF1ZGlvIHdpdGggU0JSIChTcGVjdHJhbCBCYW5kIFJlcGxpY2F0aW9uKSB0aGUgc2FtcGxpbmcgcmF0ZSBpcwotICAgIC8vIGRvdWJsZWQgYWJvdmUsIGJ1dCBBdWRpb1RpbWVzdGFtcEhlbHBlciBzaG91bGQgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbAotICAgIC8vIHNhbXBsZSByYXRlIHRvIGNvbXB1dGUgYXVkaW8gdGltZXN0YW1wcyBhbmQgZHVyYXRpb25zIGNvcnJlY3RseS4KLQotICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgaGVscGVyIHRvIHVzZSBhIG5ldyB0aW1lIHNjYWxlLgotICAgIGlmIChhdWRpb190aW1lc3RhbXBfaGVscGVyXyAmJgotICAgICAgICBhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+YmFzZV90aW1lc3RhbXAoKSAhPSBrTm9UaW1lc3RhbXApIHsKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBiYXNlX3RpbWVzdGFtcCA9IGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5HZXRUaW1lc3RhbXAoKTsKLSAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLnJlc2V0KG5ldyBBdWRpb1RpbWVzdGFtcEhlbHBlcihvcmlnX3NhbXBsZV9yYXRlKSk7Ci0gICAgICBhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+U2V0QmFzZVRpbWVzdGFtcChiYXNlX3RpbWVzdGFtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLnJlc2V0KG5ldyBBdWRpb1RpbWVzdGFtcEhlbHBlcihvcmlnX3NhbXBsZV9yYXRlKSk7Ci0gICAgfQotICAgIC8vIEF1ZGlvIGNvbmZpZyBub3RpZmljYXRpb24uCi0gICAgbGFzdF9hdWRpb19kZWNvZGVyX2NvbmZpZ18gPSBhdWRpb19kZWNvZGVyX2NvbmZpZzsKLSAgICBuZXdfYXVkaW9fY29uZmlnX2NiXy5SdW4oYXVkaW9fZGVjb2Rlcl9jb25maWcpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2FkdHMuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2FkdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYzMGZmNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9hZHRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfQURUU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9BRFRTX0hfCi0KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLWNsYXNzIEF1ZGlvVGltZXN0YW1wSGVscGVyOwotY2xhc3MgQml0UmVhZGVyOwotY2xhc3MgT2Zmc2V0Qnl0ZVF1ZXVlOwotY2xhc3MgU3RyZWFtUGFyc2VyQnVmZmVyOwotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDJ0IHsKLQotY2xhc3MgTUVESUFfRVhQT1JUIEVzUGFyc2VyQWR0cyA6IHB1YmxpYyBFc1BhcnNlciB7Ci0gcHVibGljOgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJik+IE5ld0F1ZGlvQ29uZmlnQ0I7Ci0KLSAgRXNQYXJzZXJBZHRzKGNvbnN0IE5ld0F1ZGlvQ29uZmlnQ0ImIG5ld19hdWRpb19jb25maWdfY2IsCi0gICAgICAgICAgICAgICBjb25zdCBFbWl0QnVmZmVyQ0ImIGVtaXRfYnVmZmVyX2NiLCBib29sIHNicl9pbl9taW1ldHlwZSk7Ci0gIH5Fc1BhcnNlckFkdHMoKSBvdmVycmlkZTsKLQotICAvLyBFc1BhcnNlciBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBGbHVzaCgpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgc3RydWN0IEFkdHNGcmFtZTsKLQotICAvLyBFc1BhcnNlciBpbXBsZW1lbnRhdGlvbi4KLSAgYm9vbCBQYXJzZUZyb21Fc1F1ZXVlKCkgb3ZlcnJpZGU7Ci0gIHZvaWQgUmVzZXRJbnRlcm5hbCgpIG92ZXJyaWRlOwotCi0gIC8vIFN5bmNocm9uaXplIHRoZSBzdHJlYW0gb24gYW4gQURUUyBzeW5jd29yZCAoY29uc3VtaW5nIGJ5dGVzIGZyb20KLSAgLy8gfGVzX3F1ZXVlX3wgaWYgbmVlZGVkKS4KLSAgLy8gUmV0dXJucyB0cnVlIHdoZW4gYSBmdWxsIEFEVFMgZnJhbWUgaGFzIGJlZW4gZm91bmQ6IGluIHRoYXQgY2FzZQotICAvLyB8YWR0c19mcmFtZXwgc3RydWN0dXJlIGlzIGZpbGxlZCB1cCBhY2NvcmRpbmdseS4KLSAgLy8gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UgKG5vIEFEVFMgc3luY3dvcmQgZm91bmQgb3IgcGFydGlhbCBBRFRTIGZyYW1lKS4KLSAgYm9vbCBMb29rRm9yQWR0c0ZyYW1lKEFkdHNGcmFtZSogYWR0c19mcmFtZSk7Ci0KLSAgLy8gU2tpcCBhbiBBRFRTIGZyYW1lIGluIHRoZSBFUyBxdWV1ZS4KLSAgdm9pZCBTa2lwQWR0c0ZyYW1lKGNvbnN0IEFkdHNGcmFtZSYgYWR0c19mcmFtZSk7Ci0KLSAgLy8gU2lnbmFsIGFueSBhdWRpbyBjb25maWd1cmF0aW9uIGNoYW5nZSAoaWYgYW55KS4KLSAgLy8gUmV0dXJuIGZhbHNlIGlmIHRoZSBjdXJyZW50IGF1ZGlvIGNvbmZpZyBpcyBub3QKLSAgLy8gYSBzdXBwb3J0ZWQgQURUUyBhdWRpbyBjb25maWcuCi0gIGJvb2wgVXBkYXRlQXVkaW9Db25maWd1cmF0aW9uKGNvbnN0IHVpbnQ4X3QqIGFkdHNfaGVhZGVyLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gQ2FsbGJhY2tzOgotICAvLyAtIHRvIHNpZ25hbCBhIG5ldyBhdWRpbyBjb25maWd1cmF0aW9uLAotICAvLyAtIHRvIHNlbmQgRVMgYnVmZmVycy4KLSAgTmV3QXVkaW9Db25maWdDQiBuZXdfYXVkaW9fY29uZmlnX2NiXzsKLSAgRW1pdEJ1ZmZlckNCIGVtaXRfYnVmZmVyX2NiXzsKLQotICAvLyBUcnVlIHdoZW4gQUFDIFNCUiBleHRlbnNpb24gaXMgc2lnbmFsbGVkIGluIHRoZSBtaW1ldHlwZQotICAvLyAobXA0YS40MC41IGluIHRoZSBjb2RlY3MgcGFyYW1ldGVyKS4KLSAgYm9vbCBzYnJfaW5fbWltZXR5cGVfOwotCi0gIC8vIEludGVycG9sYXRlZCBQVFMgZm9yIGZyYW1lcyB0aGF0IGRvbid0IGhhdmUgb25lLgotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9UaW1lc3RhbXBIZWxwZXI+IGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfOwotCi0gIC8vIExhc3QgYXVkaW8gY29uZmlnLgotICBBdWRpb0RlY29kZXJDb25maWcgbGFzdF9hdWRpb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgQURUU1N0cmVhbVBhcnNlciBhZHRzX3BhcnNlcl87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEVzUGFyc2VyQWR0cyk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfQURUU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0c191bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2FkdHNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYjYzZmMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0c191bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2UvbWFjcm9zLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2FkdHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl90ZXN0X2Jhc2UuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotY2xhc3MgQXVkaW9EZWNvZGVyQ29uZmlnOwotCi1uYW1lc3BhY2UgbXAydCB7Ci1uYW1lc3BhY2UgewotY29uc3QgY2hhciBrQWFjNDQxMDBQYWNrZXRUaW1lc3RhbXBbXSA9ICIoMCkgKDIzKSAoNDYpICg2OSkiOwotfQotCi1jbGFzcyBFc1BhcnNlckFkdHNUZXN0IDogcHVibGljIEVzUGFyc2VyVGVzdEJhc2UsIHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIEVzUGFyc2VyQWR0c1Rlc3QoKTsKLQotIHByb3RlY3RlZDoKLSAgYm9vbCBQcm9jZXNzKGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLCBib29sIHNicl9pbl9taW1ldHlwZSk7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXNQYXJzZXJBZHRzVGVzdCk7Ci19OwotCi1Fc1BhcnNlckFkdHNUZXN0OjpFc1BhcnNlckFkdHNUZXN0KCkge30KLQotYm9vbCBFc1BhcnNlckFkdHNUZXN0OjpQcm9jZXNzKGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2JyX2luX21pbWV0eXBlKSB7Ci0gIEVzUGFyc2VyQWR0cyBlc19wYXJzZXIoCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlckFkdHNUZXN0OjpOZXdBdWRpb0NvbmZpZywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlckFkdHNUZXN0OjpFbWl0QnVmZmVyLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIHNicl9pbl9taW1ldHlwZSk7Ci0gIHJldHVybiBQcm9jZXNzUGVzUGFja2V0cygmZXNfcGFyc2VyLCBwZXNfcGFja2V0cywgZmFsc2UgLyogZm9yY2VfdGltaW5nICovKTsKLX0KLQotVEVTVF9GKEVzUGFyc2VyQWR0c1Rlc3QsIE5vSW5pdGlhbFB0cykgewotICBMb2FkU3RyZWFtKCJiZWFyLmFkdHMiKTsKLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0cyA9IEdlbmVyYXRlRml4ZWRTaXplUGVzUGFja2V0KDUxMik7Ci0gIC8vIFByb2Nlc3Mgc2hvdWxkIHN1Y2NlZWQgZXZlbiB3aXRob3V0IHRpbWluZyBpbmZvLCB3ZSBzaG91bGQganVzdCBza2lwIHRoZQotICAvLyBhdWRpbyBmcmFtZXMgd2l0aG91dCB0aW1pbmcgaW5mbywgYnV0IHN0aWxsIHNob3VsZCBiZSBhYmxlIHRvIHBhcnNlIGFuZAotICAvLyBwbGF5IHRoZSBzdHJlYW0gYWZ0ZXIgdGhhdC4KLSAgRVhQRUNUX1RSVUUoUHJvY2VzcyhwZXNfcGFja2V0cywgZmFsc2UgLyogc2JyX2luX21pbWV0eXBlICovKSk7Ci0gIEVYUEVDVF9FUSgxdSwgY29uZmlnX2NvdW50Xyk7Ci0gIEVYUEVDVF9FUSgwdSwgYnVmZmVyX2NvdW50Xyk7Ci19Ci0KLVRFU1RfRihFc1BhcnNlckFkdHNUZXN0LCBTaW5nbGVQdHMpIHsKLSAgTG9hZFN0cmVhbSgiYmVhci5hZHRzIik7Ci0KLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0cyA9IEdlbmVyYXRlRml4ZWRTaXplUGVzUGFja2V0KDUxMik7Ci0gIHBlc19wYWNrZXRzLmZyb250KCkucHRzID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygxMCk7Ci0KLSAgRVhQRUNUX1RSVUUoUHJvY2VzcyhwZXNfcGFja2V0cywgZmFsc2UgLyogc2JyX2luX21pbWV0eXBlICovKSk7Ci0gIEVYUEVDVF9FUSgxdSwgY29uZmlnX2NvdW50Xyk7Ci0gIEVYUEVDVF9FUSg0NXUsIGJ1ZmZlcl9jb3VudF8pOwotfQotCi1URVNUX0YoRXNQYXJzZXJBZHRzVGVzdCwgQWFjTGNBZHRzKSB7Ci0gIExvYWRTdHJlYW0oInNmeC5hZHRzIik7Ci0gIHN0ZDo6dmVjdG9yPFBhY2tldD4gcGVzX3BhY2tldHMgPSBHZW5lcmF0ZUZpeGVkU2l6ZVBlc1BhY2tldCg1MTIpOwotICBwZXNfcGFja2V0cy5mcm9udCgpLnB0cyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbVNlY29uZHMoMSk7Ci0gIEVYUEVDVF9UUlVFKFByb2Nlc3MocGVzX3BhY2tldHMsIGZhbHNlIC8qIHNicl9pbl9taW1ldHlwZSAqLykpOwotICBFWFBFQ1RfRVEoMXUsIGNvbmZpZ19jb3VudF8pOwotICBFWFBFQ1RfRVEoMTR1LCBidWZmZXJfY291bnRfKTsKLX0KLQotVEVTVF9GKEVzUGFyc2VyQWR0c1Rlc3QsIEFhY1NhbXBsZVJhdGUpIHsKLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0cyA9Ci0gICAgICBMb2FkUGFja2V0c0Zyb21GaWxlcygiYWFjLTQ0MTAwLXBhY2tldC0lZCIsIDQpOwotCi0gIHBlc19wYWNrZXRzLmZyb250KCkucHRzID0gYmFzZTo6VGltZURlbHRhOjpGcm9tU2Vjb25kcygwKTsKLSAgRVhQRUNUX1RSVUUoUHJvY2VzcyhwZXNfcGFja2V0cywgdHJ1ZSAvKiBzYnJfaW5fbWltZXR5cGUgKi8pKTsKLSAgRVhQRUNUX0VRKDR1LCBidWZmZXJfY291bnRfKTsKLSAgRVhQRUNUX0VRKGtBYWM0NDEwMFBhY2tldFRpbWVzdGFtcCwgYnVmZmVyX3RpbWVzdGFtcHNfKTsKLX0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjQuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9oMjY0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWU1MzRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyODkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfaDI2NC5oIgotCi0jaW5jbHVkZSA8bGltaXRzPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9udW1lcmljcy9zYWZlX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL2dlb21ldHJ5L3JlY3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9nZW9tZXRyeS9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi0vLyBBbiBBVUQgTkFMVSBpcyBhdCBsZWFzdCA0IGJ5dGVzOgotLy8gMyBieXRlcyBmb3IgdGhlIHN0YXJ0IGNvZGUgKyAxIGJ5dGUgZm9yIHRoZSBOQUxVIHR5cGUuCi1jb25zdCBpbnQga01pbkFVRFNpemUgPSA0OwotCi1Fc1BhcnNlckgyNjQ6OkVzUGFyc2VySDI2NChjb25zdCBOZXdWaWRlb0NvbmZpZ0NCJiBuZXdfdmlkZW9fY29uZmlnX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdEJ1ZmZlckNCJiBlbWl0X2J1ZmZlcl9jYikKLSAgICA6IGVzX2FkYXB0ZXJfKG5ld192aWRlb19jb25maWdfY2IsIGVtaXRfYnVmZmVyX2NiKSwKLSAgICAgIGgyNjRfcGFyc2VyXyhuZXcgSDI2NFBhcnNlcigpKSwKLSAgICAgIGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXygwKSwKLSAgICAgIG5leHRfYWNjZXNzX3VuaXRfcG9zXygwKSB7fQotCi1Fc1BhcnNlckgyNjQ6On5Fc1BhcnNlckgyNjQoKSB7fQotCi12b2lkIEVzUGFyc2VySDI2NDo6Rmx1c2goKSB7Ci0gIERWTE9HKDEpIDw8IF9fRlVOQ1RJT05fXzsKLSAgaWYgKCFGaW5kQVVEKCZjdXJyZW50X2FjY2Vzc191bml0X3Bvc18pKSByZXR1cm47Ci0KLSAgLy8gU2ltdWxhdGUgYW4gYWRkaXRpb25hbCBBVUQgdG8gZm9yY2UgZW1pdHRpbmcgdGhlIGxhc3QgYWNjZXNzIHVuaXQKLSAgLy8gd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBjb21wbGV0ZSBhdCB0aGlzIHBvaW50LgotICB1aW50OF90IGF1ZFtdID0gezB4MDAsIDB4MDAsIDB4MDEsIDB4MDl9OwotICBlc19xdWV1ZV8tPlB1c2goYXVkLCBzaXplb2YoYXVkKSk7Ci0gIFBhcnNlRnJvbUVzUXVldWUoKTsKLQotICBlc19hZGFwdGVyXy5GbHVzaCgpOwotfQotCi12b2lkIEVzUGFyc2VySDI2NDo6UmVzZXRJbnRlcm5hbCgpIHsKLSAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fOwotICBoMjY0X3BhcnNlcl8ucmVzZXQobmV3IEgyNjRQYXJzZXIoKSk7Ci0gIGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXyA9IDA7Ci0gIG5leHRfYWNjZXNzX3VuaXRfcG9zXyA9IDA7Ci0gIGxhc3RfdmlkZW9fZGVjb2Rlcl9jb25maWdfID0gVmlkZW9EZWNvZGVyQ29uZmlnKCk7Ci0gIGVzX2FkYXB0ZXJfLlJlc2V0KCk7Ci19Ci0KLWJvb2wgRXNQYXJzZXJIMjY0OjpGaW5kQVVEKGludDY0X3QqIHN0cmVhbV9wb3MpIHsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICBjb25zdCB1aW50OF90KiBlczsKLSAgICBpbnQgc2l6ZTsKLSAgICBlc19xdWV1ZV8tPlBlZWtBdCgqc3RyZWFtX3BvcywgJmVzLCAmc2l6ZSk7Ci0KLSAgICAvLyBGaW5kIGEgc3RhcnQgY29kZSBhbmQgbW92ZSB0aGUgc3RyZWFtIHRvIHRoZSBzdGFydCBjb2RlIHBhcnNlciBwb3NpdGlvbi4KLSAgICBvZmZfdCBzdGFydF9jb2RlX29mZnNldDsKLSAgICBvZmZfdCBzdGFydF9jb2RlX3NpemU7Ci0gICAgYm9vbCBzdGFydF9jb2RlX2ZvdW5kID0gSDI2NFBhcnNlcjo6RmluZFN0YXJ0Q29kZSgKLSAgICAgICAgZXMsIHNpemUsICZzdGFydF9jb2RlX29mZnNldCwgJnN0YXJ0X2NvZGVfc2l6ZSk7Ci0gICAgKnN0cmVhbV9wb3MgKz0gc3RhcnRfY29kZV9vZmZzZXQ7Ci0KLSAgICAvLyBObyBIMjY0IHN0YXJ0IGNvZGUgZm91bmQgb3IgTkFMVSB0eXBlIG5vdCBhdmFpbGFibGUgeWV0LgotICAgIGlmICghc3RhcnRfY29kZV9mb3VuZCB8fCBzdGFydF9jb2RlX29mZnNldCArIHN0YXJ0X2NvZGVfc2l6ZSA+PSBzaXplKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRXhpdCB0aGUgcGFyc2VyIGxvb3Agd2hlbiBhbiBBVUQgaXMgZm91bmQuCi0gICAgLy8gTm90ZTogTkFMVSBoZWFkZXIgZm9yIGFuIEFVRDoKLSAgICAvLyAtIG5hbF9yZWZfaWRjIG11c3QgYmUgMAotICAgIC8vIC0gbmFsX3VuaXRfdHlwZSBtdXN0IGJlIEgyNjROQUxVOjprQVVECi0gICAgaWYgKGVzW3N0YXJ0X2NvZGVfb2Zmc2V0ICsgc3RhcnRfY29kZV9zaXplXSA9PSBIMjY0TkFMVTo6a0FVRCkgYnJlYWs7Ci0KLSAgICAvLyBUaGUgY3VycmVudCBOQUxVIGlzIG5vdCBhbiBBVUQsIHNraXAgdGhlIHN0YXJ0IGNvZGUKLSAgICAvLyBhbmQgY29udGludWUgcGFyc2luZyB0aGUgc3RyZWFtLgotICAgICpzdHJlYW1fcG9zICs9IHN0YXJ0X2NvZGVfc2l6ZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVzUGFyc2VySDI2NDo6UGFyc2VGcm9tRXNRdWV1ZSgpIHsKLSAgRENIRUNLX0xFKGVzX3F1ZXVlXy0+aGVhZCgpLCBjdXJyZW50X2FjY2Vzc191bml0X3Bvc18pOwotICBEQ0hFQ0tfTEUoY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfLCBuZXh0X2FjY2Vzc191bml0X3Bvc18pOwotICBEQ0hFQ0tfTEUobmV4dF9hY2Nlc3NfdW5pdF9wb3NfLCBlc19xdWV1ZV8tPnRhaWwoKSk7Ci0KLSAgLy8gRmluZCB0aGUgbmV4dCBBVUQgbG9jYXRlZCBhdCBvciBhZnRlciB8Y3VycmVudF9hY2Nlc3NfdW5pdF9wb3NffC4gVGhpcyBpcwotICAvLyBuZWVkZWQgc2luY2UgaW5pdGlhbGx5IHxjdXJyZW50X2FjY2Vzc191bml0X3Bvc198IG1pZ2h0IG5vdCBwb2ludCB0bwotICAvLyBhbiBBVUQuCi0gIC8vIERpc2NhcmQgYWxsIHRoZSBkYXRhIGJlZm9yZSB0aGUgdXBkYXRlZCB8Y3VycmVudF9hY2Nlc3NfdW5pdF9wb3NffAotICAvLyBzaW5jZSBpdCB3b24ndCBiZSB1c2VkIGFnYWluLgotICBib29sIGF1ZF9mb3VuZCA9IEZpbmRBVUQoJmN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXyk7Ci0gIGVzX3F1ZXVlXy0+VHJpbShjdXJyZW50X2FjY2Vzc191bml0X3Bvc18pOwotICBpZiAobmV4dF9hY2Nlc3NfdW5pdF9wb3NfIDwgY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfKQotICAgIG5leHRfYWNjZXNzX3VuaXRfcG9zXyA9IGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXzsKLQotICAvLyBSZXN1bWUgcGFyc2luZyBsYXRlciBpZiBubyBBVUQgd2FzIGZvdW5kLgotICBpZiAoIWF1ZF9mb3VuZCkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gRmluZCB0aGUgbmV4dCBBVUQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjb21wbGV0ZSBhY2Nlc3MgdW5pdC4KLSAgaWYgKG5leHRfYWNjZXNzX3VuaXRfcG9zXyA8IGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXyArIGtNaW5BVURTaXplKSB7Ci0gICAgbmV4dF9hY2Nlc3NfdW5pdF9wb3NfID0gY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfICsga01pbkFVRFNpemU7Ci0gICAgRENIRUNLX0xFKG5leHRfYWNjZXNzX3VuaXRfcG9zXywgZXNfcXVldWVfLT50YWlsKCkpOwotICB9Ci0gIGlmICghRmluZEFVRCgmbmV4dF9hY2Nlc3NfdW5pdF9wb3NfKSkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gQXQgdGhpcyBwb2ludCwgd2Uga25vdyB3ZSBoYXZlIGEgZnVsbCBhY2Nlc3MgdW5pdC4KLSAgYm9vbCBpc19rZXlfZnJhbWUgPSBmYWxzZTsKLSAgaW50IHBwc19pZF9mb3JfYWNjZXNzX3VuaXQgPSAtMTsKLQotICBjb25zdCB1aW50OF90KiBlczsKLSAgaW50IHNpemU7Ci0gIGVzX3F1ZXVlXy0+UGVla0F0KGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXywgJmVzLCAmc2l6ZSk7Ci0gIGludCBhY2Nlc3NfdW5pdF9zaXplID0gYmFzZTo6Y2hlY2tlZF9jYXN0PGludCwgaW50NjRfdD4oCi0gICAgICBuZXh0X2FjY2Vzc191bml0X3Bvc18gLSBjdXJyZW50X2FjY2Vzc191bml0X3Bvc18pOwotICBEQ0hFQ0tfTEUoYWNjZXNzX3VuaXRfc2l6ZSwgc2l6ZSk7Ci0gIGgyNjRfcGFyc2VyXy0+U2V0U3RyZWFtKGVzLCBhY2Nlc3NfdW5pdF9zaXplKTsKLQotICB3aGlsZSAodHJ1ZSkgewotICAgIGJvb2wgaXNfZW9zID0gZmFsc2U7Ci0gICAgSDI2NE5BTFUgbmFsdTsKLSAgICBzd2l0Y2ggKGgyNjRfcGFyc2VyXy0+QWR2YW5jZVRvTmV4dE5BTFUoJm5hbHUpKSB7Ci0gICAgICBjYXNlIEgyNjRQYXJzZXI6OmtPazoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEgyNjRQYXJzZXI6OmtJbnZhbGlkU3RyZWFtOgotICAgICAgY2FzZSBIMjY0UGFyc2VyOjprVW5zdXBwb3J0ZWRTdHJlYW06Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgSDI2NFBhcnNlcjo6a0VPU3RyZWFtOgotICAgICAgICBpc19lb3MgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGlzX2VvcykgYnJlYWs7Ci0KLSAgICBzd2l0Y2ggKG5hbHUubmFsX3VuaXRfdHlwZSkgewotICAgICAgY2FzZSBIMjY0TkFMVTo6a0FVRDogewotICAgICAgICBEVkxPRyhMT0dfTEVWRUxfRVMpIDw8ICJOQUxVOiBBVUQiOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgSDI2NE5BTFU6OmtTUFM6IHsKLSAgICAgICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiTkFMVTogU1BTIjsKLSAgICAgICAgaW50IHNwc19pZDsKLSAgICAgICAgaWYgKGgyNjRfcGFyc2VyXy0+UGFyc2VTUFMoJnNwc19pZCkgIT0gSDI2NFBhcnNlcjo6a09rKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBIMjY0TkFMVTo6a1BQUzogewotICAgICAgICBEVkxPRyhMT0dfTEVWRUxfRVMpIDw8ICJOQUxVOiBQUFMiOwotICAgICAgICBpbnQgcHBzX2lkOwotICAgICAgICBpZiAoaDI2NF9wYXJzZXJfLT5QYXJzZVBQUygmcHBzX2lkKSAhPSBIMjY0UGFyc2VyOjprT2spIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlIEgyNjROQUxVOjprSURSU2xpY2U6Ci0gICAgICBjYXNlIEgyNjROQUxVOjprTm9uSURSU2xpY2U6IHsKLSAgICAgICAgaXNfa2V5X2ZyYW1lID0gKG5hbHUubmFsX3VuaXRfdHlwZSA9PSBIMjY0TkFMVTo6a0lEUlNsaWNlKTsKLSAgICAgICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiTkFMVTogc2xpY2UgSURSPSIgPDwgaXNfa2V5X2ZyYW1lOwotICAgICAgICBIMjY0U2xpY2VIZWFkZXIgc2hkcjsKLSAgICAgICAgaWYgKGgyNjRfcGFyc2VyXy0+UGFyc2VTbGljZUhlYWRlcihuYWx1LCAmc2hkcikgIT0gSDI2NFBhcnNlcjo6a09rKSB7Ci0gICAgICAgICAgLy8gT25seSBhY2NlcHQgYW4gaW52YWxpZCBTUFMvUFBTIGF0IHRoZSBiZWdpbm5pbmcgd2hlbiB0aGUgc3RyZWFtCi0gICAgICAgICAgLy8gZG9lcyBub3QgbmVjZXNzYXJpbHkgc3RhcnQgd2l0aCBhbiBTUFMvUFBTL0lEUi4KLSAgICAgICAgICAvLyBUT0RPKGRhbWllbnYpOiBTaG91bGQgYmUgYWJsZSB0byBkaWZmZXJlbnRpYXRlIGEgbWlzc2luZyBTUFMvUFBTCi0gICAgICAgICAgLy8gZnJvbSBhIHNsaWNlIGhlYWRlciBwYXJzaW5nIGVycm9yLgotICAgICAgICAgIGlmIChsYXN0X3ZpZGVvX2RlY29kZXJfY29uZmlnXy5Jc1ZhbGlkQ29uZmlnKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwcHNfaWRfZm9yX2FjY2Vzc191bml0ID0gc2hkci5waWNfcGFyYW1ldGVyX3NldF9pZDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGRlZmF1bHQ6IHsgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiTkFMVTogIiA8PCBuYWx1Lm5hbF91bml0X3R5cGU7IH0KLSAgICB9Ci0gIH0KLQotICAvLyBFbWl0IGEgZnJhbWUgYW5kIG1vdmUgdGhlIHN0cmVhbSB0byB0aGUgbmV4dCBBVUQgcG9zaXRpb24uCi0gIFJDSEVDSyhFbWl0RnJhbWUoY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfLCBhY2Nlc3NfdW5pdF9zaXplLCBpc19rZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgcHBzX2lkX2Zvcl9hY2Nlc3NfdW5pdCkpOwotICBjdXJyZW50X2FjY2Vzc191bml0X3Bvc18gPSBuZXh0X2FjY2Vzc191bml0X3Bvc187Ci0gIGVzX3F1ZXVlXy0+VHJpbShjdXJyZW50X2FjY2Vzc191bml0X3Bvc18pOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEVzUGFyc2VySDI2NDo6RW1pdEZyYW1lKGludDY0X3QgYWNjZXNzX3VuaXRfcG9zLCBpbnQgYWNjZXNzX3VuaXRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19rZXlfZnJhbWUsIGludCBwcHNfaWQpIHsKLSAgLy8gR2V0IHRoZSBhY2Nlc3MgdW5pdCB0aW1pbmcgaW5mby4KLSAgLy8gTm90ZTogfGN1cnJlbnRfdGltaW5nX2Rlc2MucHRzfCBtaWdodCBiZSB8a05vVGltZXN0YW1wfCBhdCB0aGlzIHBvaW50Ci0gIC8vIGlmOgotICAvLyAtIHRoZSBzdHJlYW0gaXMgbm90IGZ1bGx5IE1QRUctMiBjb21wbGlhbnQuCi0gIC8vIC0gb3IgaWYgdGhlIHN0cmVhbSByZWxpZXMgb24gSDI2NCBWVUkgcGFyYW1ldGVycyB0byBjb21wdXRlIHRoZSB0aW1lc3RhbXBzLgotICAvLyAgIFNlZSBILjIyMiBzcGVjOiBzZWN0aW9uIDIuNy41ICJDb25kaXRpb25hbCBjb2Rpbmcgb2YgdGltZXN0YW1wcyIuCi0gIC8vICAgVGhpcyBwYXJ0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gRXNQYXJzZXJIMjY0LgotICAvLyB8ZXNfYWRhcHRlcl98IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSBtaXNzaW5nIHRpbWVzdGFtcHMuCi0gIFRpbWluZ0Rlc2MgY3VycmVudF90aW1pbmdfZGVzYyA9IEdldFRpbWluZ0Rlc2NyaXB0b3IoYWNjZXNzX3VuaXRfcG9zKTsKLSAgRFZMT0dfSUYoMSwgY3VycmVudF90aW1pbmdfZGVzYy5wdHMgPT0ga05vVGltZXN0YW1wKSA8PCAiTWlzc2luZyB0aW1lc3RhbXAiOwotCi0gIC8vIElmIG9ubHkgdGhlIFBUUyBpcyBwcm92aWRlZCwgY29weSB0aGUgUFRTIGludG8gdGhlIERUUy4KLSAgaWYgKGN1cnJlbnRfdGltaW5nX2Rlc2MuZHRzID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgY3VycmVudF90aW1pbmdfZGVzYy5kdHMgPQotICAgICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGN1cnJlbnRfdGltaW5nX2Rlc2MucHRzKTsKLSAgfQotCi0gIC8vIFVwZGF0ZSB0aGUgdmlkZW8gZGVjb2RlciBjb25maWd1cmF0aW9uIGlmIG5lZWRlZC4KLSAgY29uc3QgSDI2NFBQUyogcHBzID0gaDI2NF9wYXJzZXJfLT5HZXRQUFMocHBzX2lkKTsKLSAgaWYgKCFwcHMpIHsKLSAgICAvLyBPbmx5IGFjY2VwdCBhbiBpbnZhbGlkIFBQUyBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlIHN0cmVhbQotICAgIC8vIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IHdpdGggYW4gU1BTL1BQUy9JRFIuCi0gICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgaW5pdGlhbCBmcmFtZXMgYXJlIGNvbnZleWVkIHRvIHRoZSB1cHBlciBsYXllciB3aXRoCi0gICAgLy8gYW4gaW52YWxpZCBWaWRlb0RlY29kZXJDb25maWcgYW5kIGl0J3MgdXAgdG8gdGhlIHVwcGVyIGxheWVyCi0gICAgLy8gdG8gcHJvY2VzcyB0aGlzIGtpbmQgb2YgZnJhbWUgYWNjb3JkaW5nbHkuCi0gICAgaWYgKGxhc3RfdmlkZW9fZGVjb2Rlcl9jb25maWdfLklzVmFsaWRDb25maWcoKSkgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgewotICAgIGNvbnN0IEgyNjRTUFMqIHNwcyA9IGgyNjRfcGFyc2VyXy0+R2V0U1BTKHBwcy0+c2VxX3BhcmFtZXRlcl9zZXRfaWQpOwotICAgIGlmICghc3BzKSByZXR1cm4gZmFsc2U7Ci0gICAgUkNIRUNLKFVwZGF0ZVZpZGVvRGVjb2RlckNvbmZpZyhzcHMsIFVuZW5jcnlwdGVkKCkpKTsKLSAgfQotCi0gIC8vIEVtaXQgYSBmcmFtZS4KLSAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiRW1pdCBmcmFtZTogc3RyZWFtX3Bvcz0iIDw8IGN1cnJlbnRfYWNjZXNzX3VuaXRfcG9zXwotICAgICAgICAgICAgICAgICAgICAgIDw8ICIgc2l6ZT0iIDw8IGFjY2Vzc191bml0X3NpemU7Ci0gIGludCBlc19zaXplOwotICBjb25zdCB1aW50OF90KiBlczsKLSAgZXNfcXVldWVfLT5QZWVrQXQoY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfLCAmZXMsICZlc19zaXplKTsKLSAgQ0hFQ0tfR0UoZXNfc2l6ZSwgYWNjZXNzX3VuaXRfc2l6ZSk7Ci0KLSAgLy8gVE9ETyh3b2xlbmV0ei9hY29sd2VsbCk6IFZhbGlkYXRlIGFuZCB1c2UgYSBjb21tb24gY3Jvc3MtcGFyc2VyIFRyYWNrSWQKLSAgLy8gdHlwZSBhbmQgYWxsb3cgbXVsdGlwbGUgdmlkZW8gdHJhY2tzLiBTZWUgaHR0cHM6Ly9jcmJ1Zy5jb20vMzQxNTgxLgotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gc3RyZWFtX3BhcnNlcl9idWZmZXIgPQotICAgICAgU3RyZWFtUGFyc2VyQnVmZmVyOjpDb3B5RnJvbShlcywgYWNjZXNzX3VuaXRfc2l6ZSwgaXNfa2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpWSURFTywga01wMnRWaWRlb1RyYWNrSWQpOwotICBpZiAoIXN0cmVhbV9wYXJzZXJfYnVmZmVyKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5TZXREZWNvZGVUaW1lc3RhbXAoY3VycmVudF90aW1pbmdfZGVzYy5kdHMpOwotICBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+c2V0X3RpbWVzdGFtcChjdXJyZW50X3RpbWluZ19kZXNjLnB0cyk7Ci0gIHJldHVybiBlc19hZGFwdGVyXy5Pbk5ld0J1ZmZlcihzdHJlYW1fcGFyc2VyX2J1ZmZlcik7Ci19Ci0KLWJvb2wgRXNQYXJzZXJIMjY0OjpVcGRhdGVWaWRlb0RlY29kZXJDb25maWcoY29uc3QgSDI2NFNQUyogc3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFbmNyeXB0aW9uU2NoZW1lJiBzY2hlbWUpIHsKLSAgLy8gU2V0IHRoZSBTQVIgdG8gMSB3aGVuIG5vdCBzcGVjaWZpZWQgaW4gdGhlIEgyNjQgc3RyZWFtLgotICBpbnQgc2FyX3dpZHRoID0gKHNwcy0+c2FyX3dpZHRoID09IDApID8gMSA6IHNwcy0+c2FyX3dpZHRoOwotICBpbnQgc2FyX2hlaWdodCA9IChzcHMtPnNhcl9oZWlnaHQgPT0gMCkgPyAxIDogc3BzLT5zYXJfaGVpZ2h0OwotCi0gIGJhc2U6Ok9wdGlvbmFsPG1hdGg6OlNpemU+IGNvZGVkX3NpemUgPSBzcHMtPkdldENvZGVkU2l6ZSgpOwotICBpZiAoIWNvZGVkX3NpemUpIHJldHVybiBmYWxzZTsKLQotICBiYXNlOjpPcHRpb25hbDxtYXRoOjpSZWN0PiB2aXNpYmxlX3JlY3QgPSBzcHMtPkdldFZpc2libGVSZWN0KCk7Ci0gIGlmICghdmlzaWJsZV9yZWN0KSByZXR1cm4gZmFsc2U7Ci0KLSAgaWYgKHZpc2libGVfcmVjdC0+d2lkdGgoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLyBzYXJfd2lkdGgpIHsKLSAgICBEVkxPRygxKSA8PCAiSW50ZWdlciBvdmVyZmxvdyBkZXRlY3RlZDogdmlzaWJsZV9yZWN0LndpZHRoKCk9IgotICAgICAgICAgICAgIDw8IHZpc2libGVfcmVjdC0+d2lkdGgoKSA8PCAiIHNhcl93aWR0aD0iIDw8IHNhcl93aWR0aDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgbWF0aDo6U2l6ZSBuYXR1cmFsX3NpemUoKHZpc2libGVfcmVjdC0+d2lkdGgoKSAqIHNhcl93aWR0aCkgLyBzYXJfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlX3JlY3QtPmhlaWdodCgpKTsKLSAgaWYgKG5hdHVyYWxfc2l6ZS53aWR0aCgpID09IDApIHJldHVybiBmYWxzZTsKLQotICBWaWRlb0RlY29kZXJDb25maWcgdmlkZW9fZGVjb2Rlcl9jb25maWcoCi0gICAgICBrQ29kZWNIMjY0LCBIMjY0UGFyc2VyOjpQcm9maWxlSURDVG9WaWRlb0NvZGVjUHJvZmlsZShzcHMtPnByb2ZpbGVfaWRjKSwKLSAgICAgIFBJWEVMX0ZPUk1BVF9ZVjEyLCBDT0xPUl9TUEFDRV9IRF9SRUM3MDksIGNvZGVkX3NpemUudmFsdWUoKSwKLSAgICAgIHZpc2libGVfcmVjdC52YWx1ZSgpLCBuYXR1cmFsX3NpemUsIEVtcHR5RXh0cmFEYXRhKCksIHNjaGVtZSk7Ci0KLSAgaWYgKCF2aWRlb19kZWNvZGVyX2NvbmZpZy5NYXRjaGVzKGxhc3RfdmlkZW9fZGVjb2Rlcl9jb25maWdfKSkgewotICAgIERWTE9HKDEpIDw8ICJQcm9maWxlIElEQzogIiA8PCBzcHMtPnByb2ZpbGVfaWRjOwotICAgIERWTE9HKDEpIDw8ICJMZXZlbCBJREM6ICIgPDwgc3BzLT5sZXZlbF9pZGM7Ci0gICAgRFZMT0coMSkgPDwgIlBpYyB3aWR0aDogIiA8PCBjb2RlZF9zaXplLT53aWR0aCgpOwotICAgIERWTE9HKDEpIDw8ICJQaWMgaGVpZ2h0OiAiIDw8IGNvZGVkX3NpemUtPmhlaWdodCgpOwotICAgIERWTE9HKDEpIDw8ICJsb2cyX21heF9mcmFtZV9udW1fbWludXM0OiAiIDw8IHNwcy0+bG9nMl9tYXhfZnJhbWVfbnVtX21pbnVzNDsKLSAgICBEVkxPRygxKSA8PCAiU0FSOiB3aWR0aD0iIDw8IHNwcy0+c2FyX3dpZHRoCi0gICAgICAgICAgICAgPDwgIiBoZWlnaHQ9IiA8PCBzcHMtPnNhcl9oZWlnaHQ7Ci0gICAgbGFzdF92aWRlb19kZWNvZGVyX2NvbmZpZ18gPSB2aWRlb19kZWNvZGVyX2NvbmZpZzsKLSAgICBlc19hZGFwdGVyXy5PbkNvbmZpZ0NoYW5nZWQodmlkZW9fZGVjb2Rlcl9jb25maWcpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjQuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhMjI2Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9oMjY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfSDI2NF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9IMjY0X0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCi0jaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19hZGFwdGVyX3ZpZGVvLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotY2xhc3MgRW5jcnlwdGlvblNjaGVtZTsKLWNsYXNzIEgyNjRQYXJzZXI7Ci1zdHJ1Y3QgSDI2NFNQUzsKLWNsYXNzIE9mZnNldEJ5dGVRdWV1ZTsKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLS8vIEEgZmV3IHJlbWFya3M6Ci0vLyAtIEluIHRoaXMgaDI2NCBwYXJzZXIsIGZyYW1lIHNwbGl0dGluZyBpcyBiYXNlZCBvbiBBVUQgbmFscy4KLS8vIE1wZWcyIFRTIHNwZWM6ICIyLjE0IENhcnJpYWdlIG9mIFJlYy4gSVRVLVQgSC4yNjQgfCBJU08vSUVDIDE0NDk2LTEwIHZpZGVvIgotLy8gIkVhY2ggQVZDIGFjY2VzcyB1bml0IHNoYWxsIGNvbnRhaW4gYW4gYWNjZXNzIHVuaXQgZGVsaW1pdGVyIE5BTCBVbml0OyIKLS8vIC0gUEVTIHBhY2tldHMgZG8gbm90IG5lY2Vzc2FyaWx5IG1hcCB0byBhbiBIMjY0IGFjY2VzcyB1bml0IGFsdGhvdWdoIHRoZSBITFMKLS8vIHJlY29tbWVuZGF0aW9uIGlzIHRvIHVzZSBvbmUgUEVTIGZvciBlYWNoIGFjY2VzcyB1bml0LiBJbiB0aGlzIHBhcnNlciwKLS8vIHdlIGhhbmRsZSB0aGUgZ2VuZXJhbCBjYXNlIGFuZCBkbyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbiBhYm91dCB0aGUgYWNjZXNzCi0vLyB1bml0IG9yZ2FuaXphdGlvbiB3aXRoaW4gUEVTIHBhY2tldHMuCi0vLwotY2xhc3MgTUVESUFfRVhQT1JUIEVzUGFyc2VySDI2NCA6IHB1YmxpYyBFc1BhcnNlciB7Ci0gcHVibGljOgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJik+IE5ld1ZpZGVvQ29uZmlnQ0I7Ci0KLSAgRXNQYXJzZXJIMjY0KGNvbnN0IE5ld1ZpZGVvQ29uZmlnQ0ImIG5ld192aWRlb19jb25maWdfY2IsCi0gICAgICAgICAgICAgICBjb25zdCBFbWl0QnVmZmVyQ0ImIGVtaXRfYnVmZmVyX2NiKTsKLSAgfkVzUGFyc2VySDI2NCgpIG92ZXJyaWRlOwotCi0gIC8vIEVzUGFyc2VyIGltcGxlbWVudGF0aW9uLgotICB2b2lkIEZsdXNoKCkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBFc1BhcnNlciBpbXBsZW1lbnRhdGlvbi4KLSAgYm9vbCBQYXJzZUZyb21Fc1F1ZXVlKCkgb3ZlcnJpZGU7Ci0gIHZvaWQgUmVzZXRJbnRlcm5hbCgpIG92ZXJyaWRlOwotCi0gIC8vIEZpbmQgdGhlIEFVRCBsb2NhdGVkIGF0IG9yIGFmdGVyIHwqc3RyZWFtX3Bvc3wuCi0gIC8vIFJldHVybiB0cnVlIGlmIGFuIEFVRCBpcyBmb3VuZC4KLSAgLy8gSWYgZm91bmQsIHwqc3RyZWFtX3Bvc3wgY29ycmVzcG9uZHMgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBBVUQgc3RhcnQgY29kZQotICAvLyBpbiB0aGUgc3RyZWFtLiBPdGhlcndpc2UsIHwqc3RyZWFtX3Bvc3wgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3QgcG9zaXRpb24KLSAgLy8gb2YgdGhlIHN0YXJ0IGNvZGUgcGFyc2VyLgotICBib29sIEZpbmRBVUQoaW50NjRfdCogc3RyZWFtX3Bvcyk7Ci0KLSAgLy8gRW1pdCBhIGZyYW1lIHdob3NlIHBvc2l0aW9uIGluIHRoZSBFUyBxdWV1ZSBzdGFydHMgYXQgfGFjY2Vzc191bml0X3Bvc3wuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiBubyBQVFMgaXMgYXZhaWxhYmxlIGZvciB0aGUgZnJhbWUuCi0gIGJvb2wgRW1pdEZyYW1lKGludDY0X3QgYWNjZXNzX3VuaXRfcG9zLCBpbnQgYWNjZXNzX3VuaXRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgYm9vbCBpc19rZXlfZnJhbWUsIGludCBwcHNfaWQpOwotCi0gIC8vIFVwZGF0ZSB0aGUgdmlkZW8gZGVjb2RlciBjb25maWcgYmFzZWQgb24gYW4gSDI2NCBTUFMuCi0gIC8vIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuCi0gIGJvb2wgVXBkYXRlVmlkZW9EZWNvZGVyQ29uZmlnKGNvbnN0IEgyNjRTUFMqIHNwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgc2NoZW1lKTsKLQotICBFc0FkYXB0ZXJWaWRlbyBlc19hZGFwdGVyXzsKLQotICAvLyBIMjY0IHBhcnNlciBzdGF0ZS4KLSAgLy8gLSB8Y3VycmVudF9hY2Nlc3NfdW5pdF9wb3NffCBpcyBwb2ludGluZyB0byBhbiBhbm5leEIgc3luY3dvcmQKLSAgLy8gcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBOQUxVIG9mIGFuIEgyNjQgYWNjZXNzIHVuaXQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxIMjY0UGFyc2VyPiBoMjY0X3BhcnNlcl87Ci0gIGludDY0X3QgY3VycmVudF9hY2Nlc3NfdW5pdF9wb3NfOwotICBpbnQ2NF90IG5leHRfYWNjZXNzX3VuaXRfcG9zXzsKLQotICAvLyBMYXN0IHZpZGVvIGRlY29kZXIgY29uZmlnLgotICBWaWRlb0RlY29kZXJDb25maWcgbGFzdF92aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEVzUGFyc2VySDI2NCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfSDI2NF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfaDI2NF91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjRfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMjM3ZjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfaDI2NF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvaDI2NF9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9oMjY0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfdGVzdF9iYXNlLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1jbGFzcyBWaWRlb0RlY29kZXJDb25maWc7Ci0KLW5hbWVzcGFjZSBtcDJ0IHsKLQotY2xhc3MgRXNQYXJzZXJIMjY0VGVzdCA6IHB1YmxpYyBFc1BhcnNlclRlc3RCYXNlLCBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBFc1BhcnNlckgyNjRUZXN0KCkge30KLQotIHByb3RlY3RlZDoKLSAgdm9pZCBMb2FkSDI2NFN0cmVhbShjb25zdCBjaGFyKiBmaWxlbmFtZSk7Ci0gIHZvaWQgR2V0UGVzVGltZXN0YW1wcyhzdGQ6OnZlY3RvcjxQYWNrZXQ+KiBwZXNfcGFja2V0cyk7Ci0gIGJvb2wgUHJvY2Vzcyhjb25zdCBzdGQ6OnZlY3RvcjxQYWNrZXQ+JiBwZXNfcGFja2V0cywgYm9vbCBmb3JjZV90aW1pbmcpOwotICB2b2lkIENoZWNrQWNjZXNzVW5pdHMoKTsKLQotICAvLyBBY2Nlc3MgdW5pdHMgb2YgdGhlIHN0cmVhbSB3aXRoIEFVRCBOQUxVcy4KLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBhY2Nlc3NfdW5pdHNfOwotCi0gcHJpdmF0ZToKLSAgLy8gR2V0IHRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIGVhY2ggYWNjZXNzIHVuaXQgb2YgfHN0cmVhbV98LgotICAvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlcmUgaXMgb25seSBvbmUgc2xpY2UgcGVyIGFjY2VzcyB1bml0LgotICAvLyBUaGlzIGlzIGEgdmVyeSBzaW1wbGlmaWVkIGFjY2VzcyB1bml0IHNlZ21lbnRlciB0aGF0IGlzIGdvb2QKLSAgLy8gZW5vdWdoIGZvciB1bml0IHRlc3RzLgotICB2b2lkIEdldEFjY2Vzc1VuaXRzKCk7Ci0KLSAgLy8gSW5zZXJ0IGFuIEFVRCBiZWZvcmUgZWFjaCBhY2Nlc3MgdW5pdC4KLSAgLy8gVXBkYXRlIHxzdHJlYW1ffCBhbmQgfGFjY2Vzc191bml0c198IGFjY29yZGluZ2x5LgotICB2b2lkIEluc2VydEFVRCgpOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFc1BhcnNlckgyNjRUZXN0KTsKLX07Ci0KLXZvaWQgRXNQYXJzZXJIMjY0VGVzdDo6TG9hZEgyNjRTdHJlYW0oY29uc3QgY2hhciogZmlsZW5hbWUpIHsKLSAgLy8gTG9hZCB0aGUgaW5wdXQgSDI2NCBmaWxlIGFuZCBzZWdtZW50IGl0IGludG8gYWNjZXNzIHVuaXRzLgotICBMb2FkU3RyZWFtKGZpbGVuYW1lKTsKLSAgR2V0QWNjZXNzVW5pdHMoKTsKLSAgQVNTRVJUX0dUKGFjY2Vzc191bml0c18uc2l6ZSgpLCAwdSk7Ci0KLSAgLy8gSW5zZXJ0IEFVRHMgaW50byB0aGUgc3RyZWFtLgotICBJbnNlcnRBVUQoKTsKLQotICAvLyBHZW5lcmF0ZSBzb21lIHRpbWVzdGFtcHMgYmFzZWQgb24gYSAyNWZwcyBzdHJlYW0uCi0gIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgYWNjZXNzX3VuaXRzXy5zaXplKCk7IGsrKykKLSAgICBhY2Nlc3NfdW5pdHNfW2tdLnB0cyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyhrICogNDB1KTsKLX0KLQotdm9pZCBFc1BhcnNlckgyNjRUZXN0OjpHZXRBY2Nlc3NVbml0cygpIHsKLSAgYWNjZXNzX3VuaXRzXy5yZXNpemUoMCk7Ci0gIGJvb2wgc3RhcnRfYWNjZXNzX3VuaXQgPSB0cnVlOwotCi0gIC8vIEluIGEgZmlyc3QgcGFzcywgcmV0cmlldmUgdGhlIG9mZnNldHMgb2YgYWxsIGFjY2VzcyB1bml0cy4KLSAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgLy8gRmluZCB0aGUgbmV4dCBzdGFydCBjb2RlLgotICAgIG9mZl90IHJlbGF0aXZlX29mZnNldCA9IDA7Ci0gICAgb2ZmX3Qgc3RhcnRfY29kZV9zaXplID0gMDsKLSAgICBib29sIHN1Y2Nlc3MgPQotICAgICAgICBIMjY0UGFyc2VyOjpGaW5kU3RhcnRDb2RlKCZzdHJlYW1fW29mZnNldF0sIHN0cmVhbV8uc2l6ZSgpIC0gb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWxhdGl2ZV9vZmZzZXQsICZzdGFydF9jb2RlX3NpemUpOwotICAgIGlmICghc3VjY2VzcykgYnJlYWs7Ci0gICAgb2Zmc2V0ICs9IHJlbGF0aXZlX29mZnNldDsKLQotICAgIGlmIChzdGFydF9hY2Nlc3NfdW5pdCkgewotICAgICAgUGFja2V0IGN1cl9hY2Nlc3NfdW5pdDsKLSAgICAgIGN1cl9hY2Nlc3NfdW5pdC5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICBhY2Nlc3NfdW5pdHNfLnB1c2hfYmFjayhjdXJfYWNjZXNzX3VuaXQpOwotICAgICAgc3RhcnRfYWNjZXNzX3VuaXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhlIE5BTFUgdHlwZS4KLSAgICBvZmZzZXQgKz0gc3RhcnRfY29kZV9zaXplOwotICAgIGlmIChvZmZzZXQgPj0gc3RyZWFtXy5zaXplKCkpIGJyZWFrOwotICAgIGludCBuYWxfdW5pdF90eXBlID0gc3RyZWFtX1tvZmZzZXRdICYgMHgxZjsKLQotICAgIC8vIFdlIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9uZSBzbGljZSBwZXIgYWNjZXNzIHVuaXQuCi0gICAgaWYgKG5hbF91bml0X3R5cGUgPT0gSDI2NE5BTFU6OmtJRFJTbGljZSB8fAotICAgICAgICBuYWxfdW5pdF90eXBlID09IEgyNjROQUxVOjprTm9uSURSU2xpY2UpIHsKLSAgICAgIHN0YXJ0X2FjY2Vzc191bml0ID0gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBDb21wdXRlUGFja2V0U2l6ZSgmYWNjZXNzX3VuaXRzXyk7Ci19Ci0KLXZvaWQgRXNQYXJzZXJIMjY0VGVzdDo6SW5zZXJ0QVVEKCkgewotICB1aW50OF90IGF1ZFtdID0gezB4MDAsIDB4MDAsIDB4MDEsIDB4MDl9OwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHN0cmVhbV93aXRoX2F1ZChzdHJlYW1fLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdW5pdHNfLnNpemUoKSAqIHNpemVvZihhdWQpKTsKLSAgc3RkOjp2ZWN0b3I8RXNQYXJzZXJUZXN0QmFzZTo6UGFja2V0PiBhY2Nlc3NfdW5pdHNfd2l0aF9hdWQoCi0gICAgICBhY2Nlc3NfdW5pdHNfLnNpemUoKSk7Ci0KLSAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgYWNjZXNzX3VuaXRzXy5zaXplKCk7IGsrKykgewotICAgIGFjY2Vzc191bml0c193aXRoX2F1ZFtrXS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgYWNjZXNzX3VuaXRzX3dpdGhfYXVkW2tdLnNpemUgPSBhY2Nlc3NfdW5pdHNfW2tdLnNpemUgKyBzaXplb2YoYXVkKTsKLQotICAgIG1lbWNweSgmc3RyZWFtX3dpdGhfYXVkW29mZnNldF0sIGF1ZCwgc2l6ZW9mKGF1ZCkpOwotICAgIG9mZnNldCArPSBzaXplb2YoYXVkKTsKLQotICAgIG1lbWNweSgmc3RyZWFtX3dpdGhfYXVkW29mZnNldF0sICZzdHJlYW1fW2FjY2Vzc191bml0c19ba10ub2Zmc2V0XSwKLSAgICAgICAgICAgYWNjZXNzX3VuaXRzX1trXS5zaXplKTsKLSAgICBvZmZzZXQgKz0gYWNjZXNzX3VuaXRzX1trXS5zaXplOwotICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBzdHJlYW0gYW5kIGFjY2VzcyB1bml0cyB1c2VkIGZvciB0aGUgdGVzdC4KLSAgc3RyZWFtXyA9IHN0cmVhbV93aXRoX2F1ZDsKLSAgYWNjZXNzX3VuaXRzXyA9IGFjY2Vzc191bml0c193aXRoX2F1ZDsKLX0KLQotdm9pZCBFc1BhcnNlckgyNjRUZXN0OjpHZXRQZXNUaW1lc3RhbXBzKHN0ZDo6dmVjdG9yPFBhY2tldD4qIHBlc19wYWNrZXRzX3B0cikgewotICBEQ0hFQ0socGVzX3BhY2tldHNfcHRyKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8UGFja2V0PiYgcGVzX3BhY2tldHMgPSAqcGVzX3BhY2tldHNfcHRyOwotCi0gIC8vIERlZmF1bHQ6IHNldCB0byBhIG5lZ2F0aXZlIHRpbWVzdGFtcCB0byBiZSBhYmxlIHRvIGRpZmZlcmVudGlhdGUgZnJvbQotICAvLyByZWFsIHRpbWVzdGFtcHMuCi0gIC8vIE5vdGU6IHdlIGRvbid0IHVzZSBrTm9UaW1lc3RhbXAgaGVyZSBzaW5jZSB0aGlzIG9uZSBoYXMgYWxyZWFkeQotICAvLyBhIHNwZWNpYWwgbWVhbmluZyBpbiBFc1BhcnNlckgyNjQuIFRoZSBuZWdhdGl2ZSB0aW1lc3RhbXBzIHNob3VsZCBiZQotICAvLyB1bHRpbWF0ZWx5IGRpc2NhcmRlZCBieSB0aGUgSDI2NCBwYXJzZXIgc2luY2Ugbm90IHJlbGV2YW50LgotICBmb3IgKHNpemVfdCBrID0gMDsgayA8IHBlc19wYWNrZXRzLnNpemUoKTsgaysrKSB7Ci0gICAgKCpwZXNfcGFja2V0c19wdHIpW2tdLnB0cyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygtMSk7Ci0gIH0KLQotICAvLyBTZXQgYSB2YWxpZCB0aW1lc3RhbXAgZm9yIFBFUyBwYWNrZXRzIHdoaWNoIGluY2x1ZGUgdGhlIHN0YXJ0Ci0gIC8vIG9mIGFuIEgyNjQgYWNjZXNzIHVuaXQuCi0gIHNpemVfdCBwZXNfaWR4ID0gMDsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBhY2Nlc3NfdW5pdHNfLnNpemUoKTsgaysrKSB7Ci0gICAgZm9yICg7IHBlc19pZHggPCBwZXNfcGFja2V0cy5zaXplKCk7IHBlc19pZHgrKykgewotICAgICAgc2l6ZV90IHBlc19zdGFydCA9IHBlc19wYWNrZXRzW3Blc19pZHhdLm9mZnNldDsKLSAgICAgIHNpemVfdCBwZXNfZW5kID0gcGVzX3BhY2tldHNbcGVzX2lkeF0ub2Zmc2V0ICsgcGVzX3BhY2tldHNbcGVzX2lkeF0uc2l6ZTsKLSAgICAgIGlmIChwZXNfc3RhcnQgPD0gYWNjZXNzX3VuaXRzX1trXS5vZmZzZXQgJiYKLSAgICAgICAgICBwZXNfZW5kID4gYWNjZXNzX3VuaXRzX1trXS5vZmZzZXQpIHsKLSAgICAgICAgKCpwZXNfcGFja2V0c19wdHIpW3Blc19pZHhdLnB0cyA9IGFjY2Vzc191bml0c19ba10ucHRzOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotYm9vbCBFc1BhcnNlckgyNjRUZXN0OjpQcm9jZXNzKGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfdGltaW5nKSB7Ci0gIEVzUGFyc2VySDI2NCBlc19wYXJzZXIoCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlckgyNjRUZXN0OjpOZXdWaWRlb0NvbmZpZywgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlckgyNjRUZXN0OjpFbWl0QnVmZmVyLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSk7Ci0gIHJldHVybiBQcm9jZXNzUGVzUGFja2V0cygmZXNfcGFyc2VyLCBwZXNfcGFja2V0cywgZm9yY2VfdGltaW5nKTsKLX0KLQotdm9pZCBFc1BhcnNlckgyNjRUZXN0OjpDaGVja0FjY2Vzc1VuaXRzKCkgewotICBFWFBFQ1RfRVEoYnVmZmVyX2NvdW50XywgYWNjZXNzX3VuaXRzXy5zaXplKCkpOwotCi0gIHN0ZDo6c3RyaW5nc3RyZWFtIGJ1ZmZlcl90aW1lc3RhbXBzX3N0cmVhbTsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBhY2Nlc3NfdW5pdHNfLnNpemUoKTsgaysrKSB7Ci0gICAgYnVmZmVyX3RpbWVzdGFtcHNfc3RyZWFtIDw8ICIoIiA8PCBhY2Nlc3NfdW5pdHNfW2tdLnB0cy5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIpICI7Ci0gIH0KLSAgc3RkOjpzdHJpbmcgYnVmZmVyX3RpbWVzdGFtcHMgPSBidWZmZXJfdGltZXN0YW1wc19zdHJlYW0uc3RyKCk7Ci0gIGJhc2U6OlRyaW1XaGl0ZXNwYWNlQVNDSUkoYnVmZmVyX3RpbWVzdGFtcHMsIGJhc2U6OlRSSU1fQUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXJfdGltZXN0YW1wcyk7Ci0gIEVYUEVDVF9FUShidWZmZXJfdGltZXN0YW1wc18sIGJ1ZmZlcl90aW1lc3RhbXBzKTsKLX0KLQotVEVTVF9GKEVzUGFyc2VySDI2NFRlc3QsIE9uZUFjY2Vzc1VuaXRQZXJQZXMpIHsKLSAgTG9hZEgyNjRTdHJlYW0oImJlYXIuaDI2NCIpOwotCi0gIC8vIE9uZSB0byBvbmUgZXF1aXZhbGVuY2UgYmV0d2VlbiBQRVMgcGFja2V0cyBhbmQgYWNjZXNzIHVuaXRzLgotICBzdGQ6OnZlY3RvcjxQYWNrZXQ+IHBlc19wYWNrZXRzKGFjY2Vzc191bml0c18pOwotICBHZXRQZXNUaW1lc3RhbXBzKCZwZXNfcGFja2V0cyk7Ci0KLSAgLy8gUHJvY2VzcyBlYWNoIFBFUyBwYWNrZXQuCi0gIEVYUEVDVF9UUlVFKFByb2Nlc3MocGVzX3BhY2tldHMsIGZhbHNlKSk7Ci0gIENoZWNrQWNjZXNzVW5pdHMoKTsKLX0KLQotVEVTVF9GKEVzUGFyc2VySDI2NFRlc3QsIE5vbkFsaWduZWRQZXNQYWNrZXQpIHsKLSAgTG9hZEgyNjRTdHJlYW0oImJlYXIuaDI2NCIpOwotCi0gIC8vIEdlbmVyYXRlIHRoZSBQRVMgcGFja2V0cy4KLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0czsKLSAgUGFja2V0IGN1cl9wZXNfcGFja2V0OwotICBjdXJfcGVzX3BhY2tldC5vZmZzZXQgPSAwOwotICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGFjY2Vzc191bml0c18uc2l6ZSgpOyBrKyspIHsKLSAgICBwZXNfcGFja2V0cy5wdXNoX2JhY2soY3VyX3Blc19wYWNrZXQpOwotCi0gICAgLy8gVGhlIGN1cnJlbnQgUEVTIHBhY2tldCBpbmNsdWRlcyB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIHRoZSBwcmV2aW91cwotICAgIC8vIGFjY2VzcyB1bml0IGFuZCBzb21lIGJ5dGVzIG9mIHRoZSBjdXJyZW50IGFjY2VzcyB1bml0Ci0gICAgLy8gKDQ4NyBieXRlcyBpbiB0aGlzIHVuaXQgdGVzdCBidXQgbm8gbW9yZSB0aGFuIHRoZSBjdXJyZW50IGFjY2VzcyB1bml0Ci0gICAgLy8gc2l6ZSkuCi0gICAgY3VyX3Blc19wYWNrZXQub2Zmc2V0ID0KLSAgICAgICAgYWNjZXNzX3VuaXRzX1trXS5vZmZzZXQgKyBzdGQ6Om1pbjxzaXplX3Q+KDQ4N3UsIGFjY2Vzc191bml0c19ba10uc2l6ZSk7Ci0gIH0KLSAgQ29tcHV0ZVBhY2tldFNpemUoJnBlc19wYWNrZXRzKTsKLSAgR2V0UGVzVGltZXN0YW1wcygmcGVzX3BhY2tldHMpOwotCi0gIC8vIFByb2Nlc3MgZWFjaCBQRVMgcGFja2V0LgotICBFWFBFQ1RfVFJVRShQcm9jZXNzKHBlc19wYWNrZXRzLCBmYWxzZSkpOwotICBDaGVja0FjY2Vzc1VuaXRzKCk7Ci19Ci0KLVRFU1RfRihFc1BhcnNlckgyNjRUZXN0LCBTZXZlcmFsUGVzUGVyQWNjZXNzVW5pdCkgewotICBMb2FkSDI2NFN0cmVhbSgiYmVhci5oMjY0Iik7Ci0KLSAgLy8gR2V0IHRoZSBtaW5pbXVtIHNpemUgb2YgYW4gYWNjZXNzIHVuaXQuCi0gIHNpemVfdCBtaW5fYWNjZXNzX3VuaXRfc2l6ZSA9IHN0cmVhbV8uc2l6ZSgpOwotICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGFjY2Vzc191bml0c18uc2l6ZSgpOyBrKyspIHsKLSAgICBpZiAobWluX2FjY2Vzc191bml0X3NpemUgPj0gYWNjZXNzX3VuaXRzX1trXS5zaXplKQotICAgICAgbWluX2FjY2Vzc191bml0X3NpemUgPSBhY2Nlc3NfdW5pdHNfW2tdLnNpemU7Ci0gIH0KLQotICAvLyBVc2UgYSBzbWFsbCBQRVMgcGFja2V0IHNpemUgb3IgdGhlIG1pbmltdW0gYWNjZXNzIHVuaXQgc2l6ZQotICAvLyBpZiBpdCBpcyBldmVuIHNtYWxsZXIuCi0gIHNpemVfdCBwZXNfc2l6ZSA9IDUxMjsKLSAgaWYgKG1pbl9hY2Nlc3NfdW5pdF9zaXplIDwgcGVzX3NpemUpIHBlc19zaXplID0gbWluX2FjY2Vzc191bml0X3NpemU7Ci0KLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0czsKLSAgUGFja2V0IGN1cl9wZXNfcGFja2V0OwotICBjdXJfcGVzX3BhY2tldC5vZmZzZXQgPSAwOwotICB3aGlsZSAoY3VyX3Blc19wYWNrZXQub2Zmc2V0IDwgc3RyZWFtXy5zaXplKCkpIHsKLSAgICBwZXNfcGFja2V0cy5wdXNoX2JhY2soY3VyX3Blc19wYWNrZXQpOwotICAgIGN1cl9wZXNfcGFja2V0Lm9mZnNldCArPSBwZXNfc2l6ZTsKLSAgfQotICBDb21wdXRlUGFja2V0U2l6ZSgmcGVzX3BhY2tldHMpOwotICBHZXRQZXNUaW1lc3RhbXBzKCZwZXNfcGFja2V0cyk7Ci0KLSAgLy8gUHJvY2VzcyBlYWNoIFBFUyBwYWNrZXQuCi0gIEVYUEVDVF9UUlVFKFByb2Nlc3MocGVzX3BhY2tldHMsIGZhbHNlKSk7Ci0gIENoZWNrQWNjZXNzVW5pdHMoKTsKLQotICAvLyBQcm9jZXNzIFBFUyBwYWNrZXRzIGZvcmNpbmcgdGltaW5ncyBmb3IgZWFjaCBQRVMgcGFja2V0LgotICBFWFBFQ1RfVFJVRShQcm9jZXNzKHBlc19wYWNrZXRzLCB0cnVlKSk7Ci0gIENoZWNrQWNjZXNzVW5pdHMoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfbXBlZzFhdWRpby5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX21wZWcxYXVkaW8uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNDdhYTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfbXBlZzFhdWRpby5jYworKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvLmgiCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvY2hhbm5lbF9sYXlvdXQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X2NvbW1vbi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLXN0cnVjdCBFc1BhcnNlck1wZWcxQXVkaW86Ok1wZWcxQXVkaW9GcmFtZSB7Ci0gIC8vIFBvaW50ZXIgdG8gdGhlIEVTIGRhdGEuCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGE7Ci0KLSAgLy8gRnJhbWUgc2l6ZS4KLSAgaW50IHNpemU7Ci0KLSAgLy8gTnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhlIGZyYW1lLgotICBpbnQgc2FtcGxlX2NvdW50OwotCi0gIC8vIEZyYW1lIG9mZnNldCBpbiB0aGUgRVMgcXVldWUuCi0gIGludDY0X3QgcXVldWVfb2Zmc2V0OwotfTsKLQotRXNQYXJzZXJNcGVnMUF1ZGlvOjpFc1BhcnNlck1wZWcxQXVkaW8oCi0gICAgY29uc3QgTmV3QXVkaW9Db25maWdDQiYgbmV3X2F1ZGlvX2NvbmZpZ19jYiwKLSAgICBjb25zdCBFbWl0QnVmZmVyQ0ImIGVtaXRfYnVmZmVyX2NiLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpCi0gICAgOiBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCi0gICAgICBuZXdfYXVkaW9fY29uZmlnX2NiXyhuZXdfYXVkaW9fY29uZmlnX2NiKSwKLSAgICAgIGVtaXRfYnVmZmVyX2NiXyhlbWl0X2J1ZmZlcl9jYikge30KLQotRXNQYXJzZXJNcGVnMUF1ZGlvOjp+RXNQYXJzZXJNcGVnMUF1ZGlvKCkge30KLQotYm9vbCBFc1BhcnNlck1wZWcxQXVkaW86OlBhcnNlRnJvbUVzUXVldWUoKSB7Ci0gIC8vIExvb2sgZm9yIGV2ZXJ5IE1QRUcxIGF1ZGlvIGZyYW1lIGluIHRoZSBFUyBidWZmZXIuCi0gIE1wZWcxQXVkaW9GcmFtZSBtcGVnMWF1ZGlvX2ZyYW1lOwotICB3aGlsZSAoTG9va0Zvck1wZWcxQXVkaW9GcmFtZSgmbXBlZzFhdWRpb19mcmFtZSkpIHsKLSAgICAvLyBVcGRhdGUgdGhlIGF1ZGlvIGNvbmZpZ3VyYXRpb24gaWYgbmVlZGVkLgotICAgIERDSEVDS19HRShtcGVnMWF1ZGlvX2ZyYW1lLnNpemUsIE1QRUcxQXVkaW9TdHJlYW1QYXJzZXI6OmtIZWFkZXJTaXplKTsKLSAgICBpZiAoIVVwZGF0ZUF1ZGlvQ29uZmlndXJhdGlvbihtcGVnMWF1ZGlvX2ZyYW1lLmRhdGEpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBHZXQgdGhlIFBUUyAmIHRoZSBkdXJhdGlvbiBvZiB0aGlzIGFjY2VzcyB1bml0LgotICAgIFRpbWluZ0Rlc2MgY3VycmVudF90aW1pbmdfZGVzYyA9Ci0gICAgICAgIEdldFRpbWluZ0Rlc2NyaXB0b3IobXBlZzFhdWRpb19mcmFtZS5xdWV1ZV9vZmZzZXQpOwotICAgIGlmIChjdXJyZW50X3RpbWluZ19kZXNjLnB0cyAhPSBrTm9UaW1lc3RhbXApCi0gICAgICBhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+U2V0QmFzZVRpbWVzdGFtcChjdXJyZW50X3RpbWluZ19kZXNjLnB0cyk7Ci0KLSAgICBpZiAoYXVkaW9fdGltZXN0YW1wX2hlbHBlcl8tPmJhc2VfdGltZXN0YW1wKCkgPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiU2tpcHBpbmcgYXVkaW8gZnJhbWUgd2l0aCB1bmtub3duIHRpbWVzdGFtcCI7Ci0gICAgICBTa2lwTXBlZzFBdWRpb0ZyYW1lKG1wZWcxYXVkaW9fZnJhbWUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyZW50X3B0cyA9IGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5HZXRUaW1lc3RhbXAoKTsKLSAgICBiYXNlOjpUaW1lRGVsdGEgZnJhbWVfZHVyYXRpb24gPSBhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+R2V0RnJhbWVEdXJhdGlvbigKLSAgICAgICAgbXBlZzFhdWRpb19mcmFtZS5zYW1wbGVfY291bnQpOwotCi0gICAgLy8gRW1pdCBhbiBhdWRpbyBmcmFtZS4KLSAgICBib29sIGlzX2tleV9mcmFtZSA9IHRydWU7Ci0KLSAgICAvLyBUT0RPKHdvbGVuZXR6L2Fjb2x3ZWxsKTogVmFsaWRhdGUgYW5kIHVzZSBhIGNvbW1vbiBjcm9zcy1wYXJzZXIgVHJhY2tJZAotICAgIC8vIHR5cGUgYW5kIGFsbG93IG11bHRpcGxlIGF1ZGlvIHRyYWNrcy4gU2VlIGh0dHBzOi8vY3JidWcuY29tLzM0MTU4MS4KLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gc3RyZWFtX3BhcnNlcl9idWZmZXIgPQotICAgICAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKG1wZWcxYXVkaW9fZnJhbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGVnMWF1ZGlvX2ZyYW1lLnNpemUsIGlzX2tleV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpBVURJTywga01wMnRBdWRpb1RyYWNrSWQpOwotICAgIGlmICghc3RyZWFtX3BhcnNlcl9idWZmZXIpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3RyZWFtX3BhcnNlcl9idWZmZXItPnNldF90aW1lc3RhbXAoY3VycmVudF9wdHMpOwotICAgIHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5zZXRfZHVyYXRpb24oZnJhbWVfZHVyYXRpb24pOwotICAgIGVtaXRfYnVmZmVyX2NiXy5SdW4oc3RyZWFtX3BhcnNlcl9idWZmZXIpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBQVFMgb2YgdGhlIG5leHQgZnJhbWUuCi0gICAgYXVkaW9fdGltZXN0YW1wX2hlbHBlcl8tPkFkZEZyYW1lcyhtcGVnMWF1ZGlvX2ZyYW1lLnNhbXBsZV9jb3VudCk7Ci0KLSAgICAvLyBTa2lwIHRoZSBjdXJyZW50IGZyYW1lLgotICAgIFNraXBNcGVnMUF1ZGlvRnJhbWUobXBlZzFhdWRpb19mcmFtZSk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBFc1BhcnNlck1wZWcxQXVkaW86OkZsdXNoKCkge30KLQotdm9pZCBFc1BhcnNlck1wZWcxQXVkaW86OlJlc2V0SW50ZXJuYWwoKSB7Ci0gIGxhc3RfYXVkaW9fZGVjb2Rlcl9jb25maWdfID0gQXVkaW9EZWNvZGVyQ29uZmlnKCk7Ci19Ci0KLWJvb2wgRXNQYXJzZXJNcGVnMUF1ZGlvOjpMb29rRm9yTXBlZzFBdWRpb0ZyYW1lKAotICAgIE1wZWcxQXVkaW9GcmFtZSogbXBlZzFhdWRpb19mcmFtZSkgewotICBpbnQgZXNfc2l6ZTsKLSAgY29uc3QgdWludDhfdCogZXM7Ci0gIGVzX3F1ZXVlXy0+UGVlaygmZXMsICZlc19zaXplKTsKLQotICBpbnQgbWF4X29mZnNldCA9IGVzX3NpemUgLSBNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyOjprSGVhZGVyU2l6ZTsKLSAgaWYgKG1heF9vZmZzZXQgPD0gMCkgcmV0dXJuIGZhbHNlOwotCi0gIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNldCA8IG1heF9vZmZzZXQ7IG9mZnNldCsrKSB7Ci0gICAgY29uc3QgdWludDhfdCogY3VyX2J1ZiA9ICZlc1tvZmZzZXRdOwotICAgIGlmIChjdXJfYnVmWzBdICE9IDB4ZmYpIGNvbnRpbnVlOwotCi0gICAgaW50IHJlbWFpbmluZ19zaXplID0gZXNfc2l6ZSAtIG9mZnNldDsKLSAgICBEQ0hFQ0tfR0UocmVtYWluaW5nX3NpemUsIE1QRUcxQXVkaW9TdHJlYW1QYXJzZXI6OmtIZWFkZXJTaXplKTsKLSAgICBNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyOjpIZWFkZXIgaGVhZGVyOwotICAgIGlmICghTVBFRzFBdWRpb1N0cmVhbVBhcnNlcjo6UGFyc2VIZWFkZXIobWVkaWFfbG9nXywgY3VyX2J1ZiwgJmhlYWRlcikpCi0gICAgICBjb250aW51ZTsKLQotICAgIGlmIChyZW1haW5pbmdfc2l6ZSA8IGhlYWRlci5mcmFtZV9zaXplKSB7Ci0gICAgICAvLyBOb3QgYSBmdWxsIGZyYW1lOiB3aWxsIHJlc3VtZSB3aGVuIHdlIGhhdmUgbW9yZSBkYXRhLgotICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgYnl0ZXMgbG9jYXRlZCBiZWZvcmUgdGhlIGZyYW1lIGhlYWRlciwKLSAgICAgIC8vIHRoZXNlIGJ5dGVzIHdpbGwgbm90IGJlIHVzZWQgYW55bW9yZS4KLSAgICAgIGVzX3F1ZXVlXy0+UG9wKG9mZnNldCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbm90aGVyIGZyYW1lCi0gICAgLy8gfGZyYW1lX3NpemV8IGFwYXJ0IGZyb20gdGhlIGN1cnJlbnQgb25lLgotICAgIGlmIChyZW1haW5pbmdfc2l6ZSA+PSBoZWFkZXIuZnJhbWVfc2l6ZSArIDEgJiYKLSAgICAgICAgY3VyX2J1ZltoZWFkZXIuZnJhbWVfc2l6ZV0gIT0gMHhmZikgewotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgZXNfcXVldWVfLT5Qb3Aob2Zmc2V0KTsKLSAgICBlc19xdWV1ZV8tPlBlZWsoJm1wZWcxYXVkaW9fZnJhbWUtPmRhdGEsICZlc19zaXplKTsKLSAgICBtcGVnMWF1ZGlvX2ZyYW1lLT5xdWV1ZV9vZmZzZXQgPSBlc19xdWV1ZV8tPmhlYWQoKTsKLSAgICBtcGVnMWF1ZGlvX2ZyYW1lLT5zaXplID0gaGVhZGVyLmZyYW1lX3NpemU7Ci0gICAgbXBlZzFhdWRpb19mcmFtZS0+c2FtcGxlX2NvdW50ID0gaGVhZGVyLnNhbXBsZV9jb3VudDsKLSAgICBEVkxPRyhMT0dfTEVWRUxfRVMpIDw8ICJNUEVHMSBhdWRpbyBzeW5jd29yZCBAIHBvcz0iCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCBtcGVnMWF1ZGlvX2ZyYW1lLT5xdWV1ZV9vZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZnJhbWVfc2l6ZT0iIDw8IG1wZWcxYXVkaW9fZnJhbWUtPnNpemU7Ci0gICAgRFZMT0coTE9HX0xFVkVMX0VTKSA8PCAiTVBFRzEgYXVkaW8gaGVhZGVyOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCBiYXNlOjpIZXhFbmNvZGUobXBlZzFhdWRpb19mcmFtZS0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyOjprSGVhZGVyU2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBlc19xdWV1ZV8tPlBvcChtYXhfb2Zmc2V0KTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEVzUGFyc2VyTXBlZzFBdWRpbzo6VXBkYXRlQXVkaW9Db25maWd1cmF0aW9uKAotICAgIGNvbnN0IHVpbnQ4X3QqIG1wZWcxYXVkaW9faGVhZGVyKSB7Ci0gIE1QRUcxQXVkaW9TdHJlYW1QYXJzZXI6OkhlYWRlciBoZWFkZXI7Ci0gIGlmICghTVBFRzFBdWRpb1N0cmVhbVBhcnNlcjo6UGFyc2VIZWFkZXIobWVkaWFfbG9nXywgbXBlZzFhdWRpb19oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcikpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUT0RPKGRhbWllbnYpOiBWZXJpZnkgd2hldGhlciBBbmRyb2lkIHBsYXliYWNrIHJlcXVpcmVzIHRoZSBleHRyYSBkYXRhCi0gIC8vIGZpZWxkIGZvciBNcGVnMSBhdWRpby4gSWYgeWVzLCB3ZSBzaG91bGQgZ2VuZXJhdGUgdGhpcyBmaWVsZC4KLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2RlY29kZXJfY29uZmlnKAotICAgICAga0NvZGVjTVAzLCBrU2FtcGxlRm9ybWF0UzE2LCBoZWFkZXIuY2hhbm5lbF9sYXlvdXQsIGhlYWRlci5zYW1wbGVfcmF0ZSwKLSAgICAgIEVtcHR5RXh0cmFEYXRhKCksIFVuZW5jcnlwdGVkKCkpOwotCi0gIGlmICghYXVkaW9fZGVjb2Rlcl9jb25maWcuTWF0Y2hlcyhsYXN0X2F1ZGlvX2RlY29kZXJfY29uZmlnXykpIHsKLSAgICBEVkxPRygxKSA8PCAiU2FtcGxpbmcgZnJlcXVlbmN5OiAiIDw8IGhlYWRlci5zYW1wbGVfcmF0ZTsKLSAgICBEVkxPRygxKSA8PCAiQ2hhbm5lbCBsYXlvdXQ6ICIgPDwgaGVhZGVyLmNoYW5uZWxfbGF5b3V0OwotICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgaGVscGVyIHRvIHVzZSBhIG5ldyB0aW1lIHNjYWxlLgotICAgIGlmIChhdWRpb190aW1lc3RhbXBfaGVscGVyXyAmJgotICAgICAgICBhdWRpb190aW1lc3RhbXBfaGVscGVyXy0+YmFzZV90aW1lc3RhbXAoKSAhPSBrTm9UaW1lc3RhbXApIHsKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBiYXNlX3RpbWVzdGFtcCA9IGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5HZXRUaW1lc3RhbXAoKTsKLSAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLnJlc2V0KAotICAgICAgICAgIG5ldyBBdWRpb1RpbWVzdGFtcEhlbHBlcihoZWFkZXIuc2FtcGxlX3JhdGUpKTsKLSAgICAgIGF1ZGlvX3RpbWVzdGFtcF9oZWxwZXJfLT5TZXRCYXNlVGltZXN0YW1wKGJhc2VfdGltZXN0YW1wKTsKLSAgICB9IGVsc2UgewotICAgICAgYXVkaW9fdGltZXN0YW1wX2hlbHBlcl8ucmVzZXQoCi0gICAgICAgICAgbmV3IEF1ZGlvVGltZXN0YW1wSGVscGVyKGhlYWRlci5zYW1wbGVfcmF0ZSkpOwotICAgIH0KLSAgICAvLyBBdWRpbyBjb25maWcgbm90aWZpY2F0aW9uLgotICAgIGxhc3RfYXVkaW9fZGVjb2Rlcl9jb25maWdfID0gYXVkaW9fZGVjb2Rlcl9jb25maWc7Ci0gICAgbmV3X2F1ZGlvX2NvbmZpZ19jYl8uUnVuKGF1ZGlvX2RlY29kZXJfY29uZmlnKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVzUGFyc2VyTXBlZzFBdWRpbzo6U2tpcE1wZWcxQXVkaW9GcmFtZSgKLSAgICBjb25zdCBNcGVnMUF1ZGlvRnJhbWUmIG1wZWcxYXVkaW9fZnJhbWUpIHsKLSAgRENIRUNLX0VRKG1wZWcxYXVkaW9fZnJhbWUucXVldWVfb2Zmc2V0LCBlc19xdWV1ZV8tPmhlYWQoKSk7Ci0gIGVzX3F1ZXVlXy0+UG9wKG1wZWcxYXVkaW9fZnJhbWUuc2l6ZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX21wZWcxYXVkaW8uaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX21wZWcxYXVkaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjMDM0My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfTVBFRzFBVURJT19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9NUEVHMUFVRElPX0hfCi0KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1jbGFzcyBBdWRpb1RpbWVzdGFtcEhlbHBlcjsKLWNsYXNzIEJpdFJlYWRlcjsKLWNsYXNzIE9mZnNldEJ5dGVRdWV1ZTsKLWNsYXNzIFN0cmVhbVBhcnNlckJ1ZmZlcjsKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBFc1BhcnNlck1wZWcxQXVkaW8gOiBwdWJsaWMgRXNQYXJzZXIgewotIHB1YmxpYzoKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYpPiBOZXdBdWRpb0NvbmZpZ0NCOwotCi0gIEVzUGFyc2VyTXBlZzFBdWRpbyhjb25zdCBOZXdBdWRpb0NvbmZpZ0NCJiBuZXdfYXVkaW9fY29uZmlnX2NiLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdEJ1ZmZlckNCJiBlbWl0X2J1ZmZlcl9jYiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotICB+RXNQYXJzZXJNcGVnMUF1ZGlvKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gRXNQYXJzZXIgaW1wbGVtZW50YXRpb24uCi0gIHZvaWQgRmx1c2goKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIC8vIFVzZWQgdG8gbGluayBhIFBUUyB3aXRoIGEgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgRVMgc3RyZWFtLgotICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQ2NF90LCBiYXNlOjpUaW1lRGVsdGE+IEVzUHRzOwotICB0eXBlZGVmIHN0ZDo6bGlzdDxFc1B0cz4gRXNQdHNMaXN0OwotCi0gIHN0cnVjdCBNcGVnMUF1ZGlvRnJhbWU7Ci0KLSAgLy8gRXNQYXJzZXIgaW1wbGVtZW50YXRpb24uCi0gIGJvb2wgUGFyc2VGcm9tRXNRdWV1ZSgpIG92ZXJyaWRlOwotICB2b2lkIFJlc2V0SW50ZXJuYWwoKSBvdmVycmlkZTsKLQotICAvLyBTeW5jaHJvbml6ZSB0aGUgc3RyZWFtIG9uIGEgTXBlZzEgYXVkaW8gc3luY3dvcmQgKGNvbnN1bWluZyBieXRlcyBmcm9tCi0gIC8vIHxlc19xdWV1ZV98IGlmIG5lZWRlZCkuCi0gIC8vIFJldHVybnMgdHJ1ZSB3aGVuIGEgZnVsbCBNcGVnMSBhdWRpbyBmcmFtZSBoYXMgYmVlbiBmb3VuZDogaW4gdGhhdCBjYXNlCi0gIC8vIHxtcGVnMWF1ZGlvX2ZyYW1lfCBzdHJ1Y3R1cmUgaXMgZmlsbGVkIHVwIGFjY29yZGluZ2x5LgotICAvLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZSAobm8gTXBlZzEgYXVkaW8gc3luY3dvcmQgZm91bmQgb3IgcGFydGlhbCBNcGVnMQotICAvLyBhdWRpbyBmcmFtZSkuCi0gIGJvb2wgTG9va0Zvck1wZWcxQXVkaW9GcmFtZShNcGVnMUF1ZGlvRnJhbWUqIG1wZWcxYXVkaW9fZnJhbWUpOwotCi0gIC8vIFNpZ25hbCBhbnkgYXVkaW8gY29uZmlndXJhdGlvbiBjaGFuZ2UgKGlmIGFueSkuCi0gIC8vIFJldHVybiBmYWxzZSBpZiB0aGUgY3VycmVudCBhdWRpbyBjb25maWcgaXMgbm90Ci0gIC8vIGEgc3VwcG9ydGVkIE1wZWcxIGF1ZGlvIGNvbmZpZy4KLSAgYm9vbCBVcGRhdGVBdWRpb0NvbmZpZ3VyYXRpb24oY29uc3QgdWludDhfdCogbXBlZzFhdWRpb19oZWFkZXIpOwotCi0gIHZvaWQgU2tpcE1wZWcxQXVkaW9GcmFtZShjb25zdCBNcGVnMUF1ZGlvRnJhbWUmIG1wZWcxYXVkaW9fZnJhbWUpOwotCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgLy8gQ2FsbGJhY2tzOgotICAvLyAtIHRvIHNpZ25hbCBhIG5ldyBhdWRpbyBjb25maWd1cmF0aW9uLAotICAvLyAtIHRvIHNlbmQgRVMgYnVmZmVycy4KLSAgTmV3QXVkaW9Db25maWdDQiBuZXdfYXVkaW9fY29uZmlnX2NiXzsKLSAgRW1pdEJ1ZmZlckNCIGVtaXRfYnVmZmVyX2NiXzsKLQotICAvLyBJbnRlcnBvbGF0ZWQgUFRTIGZvciBmcmFtZXMgdGhhdCBkb24ndCBoYXZlIG9uZS4KLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvVGltZXN0YW1wSGVscGVyPiBhdWRpb190aW1lc3RhbXBfaGVscGVyXzsKLQotICAvLyBMYXN0IGF1ZGlvIGNvbmZpZy4KLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGxhc3RfYXVkaW9fZGVjb2Rlcl9jb25maWdfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFc1BhcnNlck1wZWcxQXVkaW8pOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfRVNfUEFSU0VSX01QRUcxQVVESU9fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX21wZWcxYXVkaW9fdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTJjMzE4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX21wZWcxYXVkaW9fdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfdGVzdF9iYXNlLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLWNsYXNzIEF1ZGlvRGVjb2RlckNvbmZpZzsKLQotbmFtZXNwYWNlIG1wMnQgewotCi1jbGFzcyBFc1BhcnNlck1wZWcxQXVkaW9UZXN0IDogcHVibGljIEVzUGFyc2VyVGVzdEJhc2UsIHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIEVzUGFyc2VyTXBlZzFBdWRpb1Rlc3QoKTsKLQotIHByb3RlY3RlZDoKLSAgYm9vbCBQcm9jZXNzKGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLCBib29sIGZvcmNlX3RpbWluZyk7Ci0KLSBwcml2YXRlOgotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXNQYXJzZXJNcGVnMUF1ZGlvVGVzdCk7Ci19OwotCi1Fc1BhcnNlck1wZWcxQXVkaW9UZXN0OjpFc1BhcnNlck1wZWcxQXVkaW9UZXN0KCkge30KLQotYm9vbCBFc1BhcnNlck1wZWcxQXVkaW9UZXN0OjpQcm9jZXNzKGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfdGltaW5nKSB7Ci0gIEVzUGFyc2VyTXBlZzFBdWRpbyBlc19wYXJzZXIoCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlck1wZWcxQXVkaW9UZXN0OjpOZXdBdWRpb0NvbmZpZywKLSAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICBiYXNlOjpCaW5kKCZFc1BhcnNlck1wZWcxQXVkaW9UZXN0OjpFbWl0QnVmZmVyLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgIG5ldyBNZWRpYUxvZygpKTsKLSAgcmV0dXJuIFByb2Nlc3NQZXNQYWNrZXRzKCZlc19wYXJzZXIsIHBlc19wYWNrZXRzLCBmb3JjZV90aW1pbmcpOwotfQotCi1URVNUX0YoRXNQYXJzZXJNcGVnMUF1ZGlvVGVzdCwgU2luZ2xlUHRzKSB7Ci0gIExvYWRTdHJlYW0oInNmeC5tcDMiKTsKLQotICBzdGQ6OnZlY3RvcjxQYWNrZXQ+IHBlc19wYWNrZXRzID0gR2VuZXJhdGVGaXhlZFNpemVQZXNQYWNrZXQoNTEyKTsKLSAgcGVzX3BhY2tldHMuZnJvbnQoKS5wdHMgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21TZWNvbmRzKDEwKTsKLQotICAvLyBOb3RlOiB0aGVyZSBpcyBubyBwYXJzaW5nIG9mIG1ldGFkYXRhIGFzIHBhcnQgb2YgTXBlZzIgVFMsCi0gIC8vIHNvIHRoZSB0YWcgc3RhcnRpbmcgYXQgMHg4MGQgd2l0aCAweDU0IDB4NDEgMHg0NyAoYXNjaWkgZm9yICJUQUciKQotICAvLyBpcyBub3QgYSB2YWxpZCBNcGVnMSBhdWRpbyBmcmFtZSBoZWFkZXIuIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZyYW1lCi0gIC8vIGludmFsaWQgc2luY2UgdGhlcmUgaXMgbm8gc3RhcnQgY29kZSBmb2xsb3dpbmcgdGhlIHByZXZpb3VzIGZyYW1lLgotICAvLyBTbyBpbnN0ZWFkIG9mIHRoZSAxMyBNcGVnMSBhdWRpbyBmcmFtZXMsIG9ubHkgMTIgYXJlIGNvbnNpZGVyZWQgdmFsaWQuCi0gIC8vIE9mZnNldCBvZiBmcmFtZXMgaW4gdGhlIGZpbGU6Ci0gIC8vIHsweDIwLCAgMHgxYzEsIDB4Mjc3LCAweDJmOSwgMHgzZmQsIDB4NDdmLCAweDUwMSwgMHg1ODMsCi0gIC8vICAweDYwNSwgMHg2ODcsIDB4NzNkLCAweDdhNSwgMHg4MGR9Ci0gIC8vIFRPRE8oZGFtaWVudik6IGZpbmQgYSBmaWxlIHRoYXQgd291bGQgYmUgbW9yZSByZWxldmFudCBmb3IgTXBlZzEgYXVkaW8KLSAgLy8gYXMgcGFydCBvZiBNcGVnMiBUUy4KLSAgRVhQRUNUX1RSVUUoUHJvY2VzcyhwZXNfcGFja2V0cywgZmFsc2UpKTsKLSAgRVhQRUNUX0VRKDF1LCBjb25maWdfY291bnRfKTsKLSAgRVhQRUNUX0VRKDEydSwgYnVmZmVyX2NvdW50Xyk7Ci19Ci0KLVRFU1RfRihFc1BhcnNlck1wZWcxQXVkaW9UZXN0LCBOb1RpbWluZ0luZm8pIHsKLSAgTG9hZFN0cmVhbSgic2Z4Lm1wMyIpOwotICBzdGQ6OnZlY3RvcjxQYWNrZXQ+IHBlc19wYWNrZXRzID0gR2VuZXJhdGVGaXhlZFNpemVQZXNQYWNrZXQoNTEyKTsKLQotICAvLyBQcm9jZXNzIHNob3VsZCBzdWNjZWVkIGV2ZW4gd2l0aG91dCB0aW1pbmcgaW5mbywgd2Ugc2hvdWxkIGp1c3Qgc2tpcCB0aGUKLSAgLy8gYXVkaW8gZnJhbWVzIHdpdGhvdXQgdGltaW5nIGluZm8sIGJ1dCBzdGlsbCBzaG91bGQgYmUgYWJsZSB0byBwYXJzZSBhbmQKLSAgLy8gcGxheSB0aGUgc3RyZWFtIGFmdGVyIHRoYXQuCi0gIEVYUEVDVF9UUlVFKFByb2Nlc3MocGVzX3BhY2tldHMsIGZhbHNlKSk7Ci0gIEVYUEVDVF9FUSgxdSwgY29uZmlnX2NvdW50Xyk7Ci0gIEVYUEVDVF9FUSgwdSwgYnVmZmVyX2NvdW50Xyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX3Rlc3RfYmFzZS5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX3Rlc3RfYmFzZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU3M2JhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl90ZXN0X2Jhc2UuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfdGVzdF9iYXNlLmgiCi0KLSNpbmNsdWRlICJiYXNlL2ZpbGVzL21lbW9yeV9tYXBwZWRfZmlsZS5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfdXRpbC5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Rlc3RfZGF0YV91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLUVzUGFyc2VyVGVzdEJhc2U6OlBhY2tldDo6UGFja2V0KCkgOiBvZmZzZXQoMHUpLCBzaXplKDB1KSwgcHRzKGtOb1RpbWVzdGFtcCkge30KLQotRXNQYXJzZXJUZXN0QmFzZTo6RXNQYXJzZXJUZXN0QmFzZSgpIDogY29uZmlnX2NvdW50XygwdSksIGJ1ZmZlcl9jb3VudF8oMHUpIHt9Ci0KLUVzUGFyc2VyVGVzdEJhc2U6On5Fc1BhcnNlclRlc3RCYXNlKCkge30KLQotdm9pZCBFc1BhcnNlclRlc3RCYXNlOjpMb2FkU3RyZWFtKGNvbnN0IGNoYXIqIGZpbGVuYW1lKSB7Ci0gIGJhc2U6OkZpbGVQYXRoIGZpbGVfcGF0aCA9IEdldFRlc3REYXRhRmlsZVBhdGgoZmlsZW5hbWUpOwotCi0gIGJhc2U6Ok1lbW9yeU1hcHBlZEZpbGUgc3RyZWFtOwotICBBU1NFUlRfVFJVRShzdHJlYW0uSW5pdGlhbGl6ZShmaWxlX3BhdGgpKQotICAgICAgPDwgIkNvdWxkbid0IG9wZW4gc3RyZWFtIGZpbGU6ICIgPDwgZmlsZV9wYXRoLk1heWJlQXNBU0NJSSgpOwotCi0gIHN0cmVhbV8ucmVzaXplKHN0cmVhbS5sZW5ndGgoKSk7Ci0gIG1lbWNweSgmc3RyZWFtX1swXSwgc3RyZWFtLmRhdGEoKSwgc3RyZWFtXy5zaXplKCkpOwotfQotCi1zdGQ6OnZlY3RvcjxFc1BhcnNlclRlc3RCYXNlOjpQYWNrZXQ+IEVzUGFyc2VyVGVzdEJhc2U6OkxvYWRQYWNrZXRzRnJvbUZpbGVzKAotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lX3RlbXBsYXRlLCBzaXplX3QgZmlsZV9jb3VudCkgewotICBzdGQ6OnZlY3RvcjxQYWNrZXQ+IHBhY2tldHM7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZV9jb3VudDsgKytpKSB7Ci0gICAgYmFzZTo6RmlsZVBhdGggZmlsZV9wYXRoID0KLSAgICAgICAgR2V0VGVzdERhdGFGaWxlUGF0aChiYXNlOjpTdHJpbmdQcmludGYoZmlsZW5hbWVfdGVtcGxhdGUsIGkpKTsKLSAgICBiYXNlOjpNZW1vcnlNYXBwZWRGaWxlIHN0cmVhbTsKLSAgICBFWFBFQ1RfVFJVRShzdHJlYW0uSW5pdGlhbGl6ZShmaWxlX3BhdGgpKQotICAgICAgICA8PCAiQ291bGRuJ3Qgb3BlbiBzdHJlYW0gZmlsZTogIiA8PCBmaWxlX3BhdGguTWF5YmVBc0FTQ0lJKCk7Ci0KLSAgICBQYWNrZXQgcGFja2V0OwotICAgIHBhY2tldC5vZmZzZXQgPSBzdHJlYW1fLnNpemUoKTsKLSAgICBwYWNrZXQuc2l6ZSA9IHN0cmVhbS5sZW5ndGgoKTsKLSAgICBwYWNrZXQucHRzID0ga05vVGltZXN0YW1wOwotCi0gICAgc3RyZWFtXy5pbnNlcnQoc3RyZWFtXy5lbmQoKSwgc3RyZWFtLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICBzdHJlYW0uZGF0YSgpICsgc3RyZWFtLmxlbmd0aCgpKTsKLSAgICBwYWNrZXRzLnB1c2hfYmFjayhwYWNrZXQpOwotICB9Ci0KLSAgcmV0dXJuIHBhY2tldHM7Ci19Ci0KLXZvaWQgRXNQYXJzZXJUZXN0QmFzZTo6TmV3QXVkaW9Db25maWcoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpIHsKLSAgY29uZmlnX2NvdW50XysrOwotfQotCi12b2lkIEVzUGFyc2VyVGVzdEJhc2U6Ok5ld1ZpZGVvQ29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKSB7Ci0gIGNvbmZpZ19jb3VudF8rKzsKLX0KLQotdm9pZCBFc1BhcnNlclRlc3RCYXNlOjpFbWl0QnVmZmVyKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXIpIHsKLSAgYnVmZmVyX3RpbWVzdGFtcHNfc3RyZWFtXyA8PCAiKCIgPDwgYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIikgIjsKLSAgYnVmZmVyX2NvdW50XysrOwotfQotCi1ib29sIEVzUGFyc2VyVGVzdEJhc2U6OlByb2Nlc3NQZXNQYWNrZXRzKEVzUGFyc2VyKiBlc19wYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFBhY2tldD4mIHBlc19wYWNrZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlX3RpbWluZykgewotICBEQ0hFQ0soZXNfcGFyc2VyKTsKLQotICBidWZmZXJfY291bnRfID0gMDsKLSAgY29uZmlnX2NvdW50XyA9IDA7Ci0gIGJ1ZmZlcl90aW1lc3RhbXBzX3N0cmVhbV8uc3RyKHN0ZDo6c3RyaW5nKCkpOwotCi0gIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgcGVzX3BhY2tldHMuc2l6ZSgpOyBrKyspIHsKLSAgICBzaXplX3QgY3VyX3Blc19vZmZzZXQgPSBwZXNfcGFja2V0c1trXS5vZmZzZXQ7Ci0gICAgc2l6ZV90IGN1cl9wZXNfc2l6ZSA9IHBlc19wYWNrZXRzW2tdLnNpemU7Ci0KLSAgICBiYXNlOjpUaW1lRGVsdGEgcHRzID0ga05vVGltZXN0YW1wOwotICAgIERlY29kZVRpbWVzdGFtcCBkdHMgPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgICBpZiAocGVzX3BhY2tldHNba10ucHRzID49IGJhc2U6OlRpbWVEZWx0YSgpIHx8IGZvcmNlX3RpbWluZykKLSAgICAgIHB0cyA9IHBlc19wYWNrZXRzW2tdLnB0czsKLQotICAgIERDSEVDS19MVChjdXJfcGVzX29mZnNldCwgc3RyZWFtXy5zaXplKCkpOwotICAgIGlmICghZXNfcGFyc2VyLT5QYXJzZSgmc3RyZWFtX1tjdXJfcGVzX29mZnNldF0sIGN1cl9wZXNfc2l6ZSwgcHRzLCBkdHMpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGVzX3BhcnNlci0+Rmx1c2goKTsKLQotICBidWZmZXJfdGltZXN0YW1wc18gPSBidWZmZXJfdGltZXN0YW1wc19zdHJlYW1fLnN0cigpOwotICBiYXNlOjpUcmltV2hpdGVzcGFjZUFTQ0lJKGJ1ZmZlcl90aW1lc3RhbXBzXywgYmFzZTo6VFJJTV9BTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl90aW1lc3RhbXBzXyk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIEVzUGFyc2VyVGVzdEJhc2U6OkNvbXB1dGVQYWNrZXRTaXplKHN0ZDo6dmVjdG9yPFBhY2tldD4qIHBhY2tldHMpIHsKLSAgRENIRUNLKHBhY2tldHMpOwotICBpZiAocGFja2V0cy0+c2l6ZSgpID09IDB1KSByZXR1cm47Ci0KLSAgUGFja2V0KiBjdXIgPSAmKCpwYWNrZXRzKVswXTsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBwYWNrZXRzLT5zaXplKCkgLSAxOyBrKyspIHsKLSAgICBQYWNrZXQqIG5leHQgPSAmKCpwYWNrZXRzKVtrICsgMV07Ci0gICAgRENIRUNLX0dFKG5leHQtPm9mZnNldCwgY3VyLT5vZmZzZXQpOwotICAgIGN1ci0+c2l6ZSA9IG5leHQtPm9mZnNldCAtIGN1ci0+b2Zmc2V0OwotICAgIGN1ciA9IG5leHQ7Ci0gIH0KLSAgRENIRUNLX0dFKHN0cmVhbV8uc2l6ZSgpLCBjdXItPm9mZnNldCk7Ci0gIGN1ci0+c2l6ZSA9IHN0cmVhbV8uc2l6ZSgpIC0gY3VyLT5vZmZzZXQ7Ci19Ci0KLXN0ZDo6dmVjdG9yPEVzUGFyc2VyVGVzdEJhc2U6OlBhY2tldD4KLUVzUGFyc2VyVGVzdEJhc2U6OkdlbmVyYXRlRml4ZWRTaXplUGVzUGFja2V0KHNpemVfdCBwZXNfc2l6ZSkgewotICBEQ0hFQ0tfR1Qoc3RyZWFtXy5zaXplKCksIDB1KTsKLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBwZXNfcGFja2V0czsKLQotICBQYWNrZXQgY3VyX3Blc19wYWNrZXQ7Ci0gIGN1cl9wZXNfcGFja2V0Lm9mZnNldCA9IDA7Ci0gIGN1cl9wZXNfcGFja2V0LnB0cyA9IGtOb1RpbWVzdGFtcDsKLSAgd2hpbGUgKGN1cl9wZXNfcGFja2V0Lm9mZnNldCA8IHN0cmVhbV8uc2l6ZSgpKSB7Ci0gICAgcGVzX3BhY2tldHMucHVzaF9iYWNrKGN1cl9wZXNfcGFja2V0KTsKLSAgICBjdXJfcGVzX3BhY2tldC5vZmZzZXQgKz0gcGVzX3NpemU7Ci0gIH0KLSAgQ29tcHV0ZVBhY2tldFNpemUoJnBlc19wYWNrZXRzKTsKLQotICByZXR1cm4gcGVzX3BhY2tldHM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX3Rlc3RfYmFzZS5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfdGVzdF9iYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYjJiMWEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfdGVzdF9iYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9FU19QQVJTRVJfVEVTVF9CQVNFX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfRVNfUEFSU0VSX1RFU1RfQkFTRV9IXwotCi0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLWNsYXNzIEF1ZGlvRGVjb2RlckNvbmZpZzsKLWNsYXNzIFN0cmVhbVBhcnNlckJ1ZmZlcjsKLWNsYXNzIFZpZGVvRGVjb2RlckNvbmZpZzsKLQotbmFtZXNwYWNlIG1wMnQgewotY2xhc3MgRXNQYXJzZXI7Ci0KLWNsYXNzIEVzUGFyc2VyVGVzdEJhc2UgewotIHB1YmxpYzoKLSAgc3RydWN0IFBhY2tldCB7Ci0gICAgUGFja2V0KCk7Ci0KLSAgICAvLyBPZmZzZXQgaW4gdGhlIHN0cmVhbS4KLSAgICBzaXplX3Qgb2Zmc2V0OwotCi0gICAgLy8gU2l6ZSBvZiB0aGUgcGFja2V0LgotICAgIHNpemVfdCBzaXplOwotCi0gICAgLy8gVGltZXN0YW1wIG9mIHRoZSBwYWNrZXQuCi0gICAgYmFzZTo6VGltZURlbHRhIHB0czsKLSAgfTsKLQotICBFc1BhcnNlclRlc3RCYXNlKCk7Ci0gIHZpcnR1YWwgfkVzUGFyc2VyVGVzdEJhc2UoKTsKLQotIHByb3RlY3RlZDoKLSAgdm9pZCBMb2FkU3RyZWFtKGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBMb2FkUGFja2V0c0Zyb21GaWxlcyhjb25zdCBjaGFyKiBmaWxlX3RlbXAsIHNpemVfdCBudW0pOwotCi0gIC8vIEVTIHBhcnNlciBjYWxsYmFja3MuCi0gIHZvaWQgTmV3QXVkaW9Db25maWcoY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBjb25maWcpOwotICB2b2lkIE5ld1ZpZGVvQ29uZmlnKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgY29uZmlnKTsKLSAgdm9pZCBFbWl0QnVmZmVyKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXIpOwotCi0gIC8vIFByb2Nlc3MgdGhlIFBFUyBwYWNrZXRzIHVzaW5nIHRoZSBnaXZlbiBFUyBwYXJzZXIuCi0gIC8vIFdoZW4gfGZvcmNlX3RpbWluZ3wgaXMgdHJ1ZSwgZXZlbiB0aGUgaW52YWxpZCBuZWdhdGl2ZSB0aW1lc3RhbXBzIHdpbGwgYmUKLSAgLy8gZ2l2ZW4gdG8gdGhlIEVTIHBhcnNlci4KLSAgLy8gUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLgotICBib29sIFByb2Nlc3NQZXNQYWNrZXRzKEVzUGFyc2VyKiBlc19wYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGFja2V0PiYgcGVzX3BhY2tldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZV90aW1pbmcpOwotCi0gIC8vIEFzc3VtZSB0aGUgb2Zmc2V0cyBhcmUga25vd24sIGNvbXB1dGUgdGhlIHNpemUgb2YgZWFjaCBwYWNrZXQuCi0gIC8vIFRoZSBsYXN0IHBhY2tldCBpcyBhc3N1bWVkIHRvIGNvdmVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAgLy8gUGFja2V0cyBhcmUgYXNzdW1lZCB0byBiZSBpbiBzdHJlYW0gb3JkZXIuCi0gIHZvaWQgQ29tcHV0ZVBhY2tldFNpemUoc3RkOjp2ZWN0b3I8UGFja2V0PiogcGFja2V0cyk7Ci0KLSAgLy8gR2VuZXJhdGUgc29tZSBmaXhlZCBzaXplIFBFUyBwYWNrZXRzIG9mIHxzdHJlYW1ffC4KLSAgc3RkOjp2ZWN0b3I8UGFja2V0PiBHZW5lcmF0ZUZpeGVkU2l6ZVBlc1BhY2tldChzaXplX3QgcGVzX3NpemUpOwotCi0gIC8vIEVTIHN0cmVhbS4KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gc3RyZWFtXzsKLQotICAvLyBOdW1iZXIgb2YgZGVjb2RlciBjb25maWdzIHJlY2VpdmVkIGZyb20gdGhlIEVTIHBhcnNlci4KLSAgc2l6ZV90IGNvbmZpZ19jb3VudF87Ci0KLSAgLy8gTnVtYmVyIG9mIGJ1ZmZlcnMgZ2VuZXJhdGVkIHdoaWxlIHBhcnNpbmcgdGhlIEVTIHN0cmVhbS4KLSAgc2l6ZV90IGJ1ZmZlcl9jb3VudF87Ci0KLSAgLy8gVGltZXN0YW1wcyBvZiBidWZmZXJzIGdlbmVyYXRlZCB3aGlsZSBwYXJzaW5nIHRoZSBFUyBzdHJlYW0uCi0gIHN0ZDo6c3RyaW5nIGJ1ZmZlcl90aW1lc3RhbXBzXzsKLQotIHByaXZhdGU6Ci0gIC8vIFRpbWVzdGFtcHMgb2YgYnVmZmVycyBnZW5lcmF0ZWQgd2hpbGUgcGFyc2luZyB0aGUgRVMgc3RyZWFtLgotICBzdGQ6OnN0cmluZ3N0cmVhbSBidWZmZXJfdGltZXN0YW1wc19zdHJlYW1fOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFc1BhcnNlclRlc3RCYXNlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX0VTX1BBUlNFUl9URVNUX0JBU0VfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIyZDMyYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9NUDJUX0NPTU1PTl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX01QMlRfQ09NTU9OX0hfCi0KLSNkZWZpbmUgTE9HX0xFVkVMX1RTIDUKLSNkZWZpbmUgTE9HX0xFVkVMX1BFUyA0Ci0jZGVmaW5lIExPR19MRVZFTF9FUyAzCi0KLSNkZWZpbmUgUkNIRUNLKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghKHgpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIERMT0coV0FSTklORykgPDwgIkZhaWx1cmUgd2hpbGUgcGFyc2luZyBNcGVnMlRTOiAiIDw8ICN4OyBcCi0gICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotY29uc3QgaW50IGtNcDJ0QXVkaW9UcmFja0lkID0gMTsKLWNvbnN0IGludCBrTXAydFZpZGVvVHJhY2tJZCA9IDI7Ci19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9NUDJUX0NPTU1PTl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X3N0cmVhbV9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlmMGU0Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDYzNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X2NvbW1vbi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfcGFja2V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BhdC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcG10LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDJ0IHsKLQotZW51bSBTdHJlYW1UeXBlIHsKLSAgLy8gSVNPLTEzODE4LjEgLyBJVFUgSC4yMjIgVGFibGUgMi4zNCAiU3RyZWFtIHR5cGUgYXNzaWdubWVudHMiCi0gIGtTdHJlYW1UeXBlTXBlZzFBdWRpbyA9IDB4MywKLSAga1N0cmVhbVR5cGVBQUMgPSAweGYsCi0gIGtTdHJlYW1UeXBlQVZDID0gMHgxYiwKLX07Ci0KLWNsYXNzIFBpZFN0YXRlIHsKLSBwdWJsaWM6Ci0gIGVudW0gUGlkVHlwZSB7Ci0gICAga1BpZFBhdCwKLSAgICBrUGlkUG10LAotICAgIGtQaWRBdWRpb1BlcywKLSAgICBrUGlkVmlkZW9QZXMsCi0gIH07Ci0KLSAgUGlkU3RhdGUoaW50IHBpZCwgUGlkVHlwZSBwaWRfdHlwZSwKLSAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRzU2VjdGlvbj4gc2VjdGlvbl9wYXJzZXIpOwotCi0gIC8vIEV4dHJhY3QgdGhlIGNvbnRlbnQgb2YgdGhlIFRTIHBhY2tldCBhbmQgcGFyc2UgaXQuCi0gIC8vIFJldHVybiB0cnVlIGlmIHN1Y2Nlc3NmdWwuCi0gIGJvb2wgUHVzaFRzUGFja2V0KGNvbnN0IFRzUGFja2V0JiB0c19wYWNrZXQpOwotCi0gIC8vIEZsdXNoIHRoZSBQSUQgc3RhdGUgKHBvc3NpYmx5IGVtaXR0aW5nIHNvbWUgcGVuZGluZyBmcmFtZXMpCi0gIC8vIGFuZCByZXNldCBpdHMgc3RhdGUuCi0gIHZvaWQgRmx1c2goKTsKLQotICAvLyBFbmFibGUvZGlzYWJsZSB0aGUgUElELgotICAvLyBEaXNhYmxpbmcgYSBQSUQgd2lsbCByZXNldCBpdHMgc3RhdGUgYW5kIGlnbm9yZSBhbnkgZnVydGhlciBpbmNvbWluZyBUUwotICAvLyBwYWNrZXRzLgotICB2b2lkIEVuYWJsZSgpOwotICB2b2lkIERpc2FibGUoKTsKLSAgYm9vbCBJc0VuYWJsZWQoKSBjb25zdDsKLQotICBQaWRUeXBlIHBpZF90eXBlKCkgY29uc3QgeyByZXR1cm4gcGlkX3R5cGVfOyB9Ci0KLSBwcml2YXRlOgotICB2b2lkIFJlc2V0U3RhdGUoKTsKLQotICBpbnQgcGlkXzsKLSAgUGlkVHlwZSBwaWRfdHlwZV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxUc1NlY3Rpb24+IHNlY3Rpb25fcGFyc2VyXzsKLQotICBib29sIGVuYWJsZV87Ci0KLSAgaW50IGNvbnRpbnVpdHlfY291bnRlcl87Ci19OwotCi1QaWRTdGF0ZTo6UGlkU3RhdGUoaW50IHBpZCwgUGlkVHlwZSBwaWRfdHlwZSwKLSAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHNTZWN0aW9uPiBzZWN0aW9uX3BhcnNlcikKLSAgICA6IHBpZF8ocGlkKSwKLSAgICAgIHBpZF90eXBlXyhwaWRfdHlwZSksCi0gICAgICBzZWN0aW9uX3BhcnNlcl8oc3RkOjptb3ZlKHNlY3Rpb25fcGFyc2VyKSksCi0gICAgICBlbmFibGVfKGZhbHNlKSwKLSAgICAgIGNvbnRpbnVpdHlfY291bnRlcl8oLTEpIHsKLSAgRENIRUNLKHNlY3Rpb25fcGFyc2VyXyk7Ci19Ci0KLWJvb2wgUGlkU3RhdGU6OlB1c2hUc1BhY2tldChjb25zdCBUc1BhY2tldCYgdHNfcGFja2V0KSB7Ci0gIERDSEVDS19FUSh0c19wYWNrZXQucGlkKCksIHBpZF8pOwotCi0gIC8vIFRoZSBjdXJyZW50IFBJRCBpcyBub3QgcGFydCBvZiB0aGUgUElEIGZpbHRlciwKLSAgLy8ganVzdCBkaXNjYXJkIHRoZSBpbmNvbWluZyBUUyBwYWNrZXQuCi0gIGlmICghZW5hYmxlXykgcmV0dXJuIHRydWU7Ci0KLSAgaW50IGV4cGVjdGVkX2NvbnRpbnVpdHlfY291bnRlciA9IChjb250aW51aXR5X2NvdW50ZXJfICsgMSkgJSAxNjsKLSAgaWYgKGNvbnRpbnVpdHlfY291bnRlcl8gPj0gMCAmJgotICAgICAgdHNfcGFja2V0LmNvbnRpbnVpdHlfY291bnRlcigpICE9IGV4cGVjdGVkX2NvbnRpbnVpdHlfY291bnRlcikgewotICAgIERWTE9HKDEpIDw8ICJUUyBkaXNjb250aW51aXR5IGRldGVjdGVkIGZvciBwaWQ6ICIgPDwgcGlkXzsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBib29sIHN0YXR1cyA9Ci0gICAgICBzZWN0aW9uX3BhcnNlcl8tPlBhcnNlKHRzX3BhY2tldC5wYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzX3BhY2tldC5wYXlsb2FkKCksIHRzX3BhY2tldC5wYXlsb2FkX3NpemUoKSk7Ci0KLSAgLy8gQXQgdGhlIG1pbmltdW0sIHdoZW4gcGFyc2luZyBmYWlsZWQsIGF1dG8gcmVzZXQgdGhlIHNlY3Rpb24gcGFyc2VyLgotICAvLyBDb21wb25lbnRzIHRoYXQgdXNlIHRoZSBTdHJlYW1QYXJzZXIgY2FuIHRha2UgZnVydGhlciBhY3Rpb24gaWYgbmVlZGVkLgotICBpZiAoIXN0YXR1cykgewotICAgIERWTE9HKDEpIDw8ICJQYXJzaW5nIGZhaWxlZCBmb3IgcGlkID0gIiA8PCBwaWRfOwotICAgIFJlc2V0U3RhdGUoKTsKLSAgfQotCi0gIHJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgUGlkU3RhdGU6OkZsdXNoKCkgewotICBzZWN0aW9uX3BhcnNlcl8tPkZsdXNoKCk7Ci0gIFJlc2V0U3RhdGUoKTsKLX0KLQotdm9pZCBQaWRTdGF0ZTo6RW5hYmxlKCkgeyBlbmFibGVfID0gdHJ1ZTsgfQotCi12b2lkIFBpZFN0YXRlOjpEaXNhYmxlKCkgewotICBpZiAoIWVuYWJsZV8pIHJldHVybjsKLQotICBSZXNldFN0YXRlKCk7Ci0gIGVuYWJsZV8gPSBmYWxzZTsKLX0KLQotYm9vbCBQaWRTdGF0ZTo6SXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlXzsgfQotCi12b2lkIFBpZFN0YXRlOjpSZXNldFN0YXRlKCkgewotICBzZWN0aW9uX3BhcnNlcl8tPlJlc2V0KCk7Ci0gIGNvbnRpbnVpdHlfY291bnRlcl8gPSAtMTsKLX0KLQotTXAydFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVXaXRoQ29uZmlnOjpCdWZmZXJRdWV1ZVdpdGhDb25maWcoCi0gICAgYm9vbCBpc19jZmdfc2VudCwgY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19jZmcsCi0gICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jZmcpCi0gICAgOiBpc19jb25maWdfc2VudChpc19jZmdfc2VudCksCi0gICAgICBhdWRpb19jb25maWcoYXVkaW9fY2ZnKSwKLSAgICAgIHZpZGVvX2NvbmZpZyh2aWRlb19jZmcpIHt9Ci0KLU1wMnRTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlV2l0aENvbmZpZzo6QnVmZmVyUXVldWVXaXRoQ29uZmlnKAotICAgIGNvbnN0IEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyYgb3RoZXIpID0gZGVmYXVsdDsKLQotTXAydFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVXaXRoQ29uZmlnOjp+QnVmZmVyUXVldWVXaXRoQ29uZmlnKCkge30KLQotTXAydFN0cmVhbVBhcnNlcjo6TXAydFN0cmVhbVBhcnNlcihib29sIHNicl9pbl9taW1ldHlwZSkKLSAgICA6IHNicl9pbl9taW1ldHlwZV8oc2JyX2luX21pbWV0eXBlKSwKLSAgICAgIHNlbGVjdGVkX2F1ZGlvX3BpZF8oLTEpLAotICAgICAgc2VsZWN0ZWRfdmlkZW9fcGlkXygtMSksCi0gICAgICBpc19pbml0aWFsaXplZF8oZmFsc2UpLAotICAgICAgc2VnbWVudF9zdGFydGVkXyhmYWxzZSkge30KLQotTXAydFN0cmVhbVBhcnNlcjo6fk1wMnRTdHJlYW1QYXJzZXIoKSB7fQotCi12b2lkIE1wMnRTdHJlYW1QYXJzZXI6OkluaXQoCi0gICAgY29uc3QgSW5pdENCJiBpbml0X2NiLCBjb25zdCBOZXdDb25maWdDQiYgY29uZmlnX2NiLAotICAgIGNvbnN0IE5ld0J1ZmZlcnNDQiYgbmV3X2J1ZmZlcnNfY2IsIGJvb2wgLyogaWdub3JlX3RleHRfdHJhY2tzICovLAotICAgIGNvbnN0IEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQiYgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYiwKLSAgICBjb25zdCBOZXdNZWRpYVNlZ21lbnRDQiYgbmV3X3NlZ21lbnRfY2IsCi0gICAgY29uc3QgRW5kTWVkaWFTZWdtZW50Q0ImIGVuZF9vZl9zZWdtZW50X2NiLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgRENIRUNLKCFpc19pbml0aWFsaXplZF8pOwotICBEQ0hFQ0soaW5pdF9jYl8uaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFpbml0X2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghY29uZmlnX2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghbmV3X2J1ZmZlcnNfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghbmV3X3NlZ21lbnRfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFlbmRfb2Zfc2VnbWVudF9jYi5pc19udWxsKCkpOwotCi0gIGluaXRfY2JfID0gaW5pdF9jYjsKLSAgY29uZmlnX2NiXyA9IGNvbmZpZ19jYjsKLSAgbmV3X2J1ZmZlcnNfY2JfID0gbmV3X2J1ZmZlcnNfY2I7Ci0gIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfID0gZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYjsKLSAgbmV3X3NlZ21lbnRfY2JfID0gbmV3X3NlZ21lbnRfY2I7Ci0gIGVuZF9vZl9zZWdtZW50X2NiXyA9IGVuZF9vZl9zZWdtZW50X2NiOwotICBtZWRpYV9sb2dfID0gbWVkaWFfbG9nOwotfQotCi12b2lkIE1wMnRTdHJlYW1QYXJzZXI6OkZsdXNoKCkgewotICBEVkxPRygxKSA8PCAiTXAydFN0cmVhbVBhcnNlcjo6Rmx1c2giOwotCi0gIC8vIEZsdXNoIHRoZSBidWZmZXJzIGFuZCByZXNldCB0aGUgcGlkcy4KLSAgZm9yIChjb25zdCBhdXRvJiBwaWRfcGFpciA6IHBpZHNfKSB7Ci0gICAgRFZMT0coMSkgPDwgIkZsdXNoaW5nIFBJRDogIiA8PCBwaWRfcGFpci5maXJzdDsKLSAgICBwaWRfcGFpci5zZWNvbmQtPkZsdXNoKCk7Ci0gIH0KLSAgcGlkc18uY2xlYXIoKTsKLQotICAvLyBGbHVzaCBpcyBpbnZva2VkIGZyb20gU291cmNlQnVmZmVyLmFib3J0L1NvdXJjZVN0YXRlOjpSZXNldFBhcnNlclN0YXRlLCBhbmQKLSAgLy8gTVNFIHNwZWMgcHJvaGliaXRzIGVtaXR0aW5nIG5ldyBjb25maWdzIGluIFJlc2V0UGFyc2VyU3RhdGUgYWxnb3JpdGhtIChzZWUKLSAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL21lZGlhLXNvdXJjZS8jc291cmNlYnVmZmVyLXJlc2V0LXBhcnNlci1zdGF0ZSwKLSAgLy8gMy41LjIgUmVzZXQgUGFyc2VyIFN0YXRlIHN0YXRlcyB0aGF0IG5ldyBmcmFtZXMgbWlnaHQgYmUgcHJvY2Vzc2VkIG9ubHkgaW4KLSAgLy8gUEFSU0lOR19NRURJQV9TRUdNRU5UIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBhbGxvdyBlbWl0dGluZyBuZXcgY29uZmlncywKLSAgLy8gc2luY2UgdGhhdCBtaWdodCBuZWVkIHRvIHJ1biAiaW5pdCBzZWdtZW50IHJlY2VpdmVkIiBhbGdvcml0aG0pLgotICAvLyBTbyBiZWZvcmUgd2UgZW1pdCByZW1haW5pbmcgYnVmZmVycyBoZXJlLCB3ZSBuZWVkIHRvIHRyaW0gb3VyIGJ1ZmZlciBxdWV1ZQotICAvLyBzbyB0aGF0IHdlIGxlYXZlIG9ubHkgYnVmZmVycyB3aXRoIGNvbmZpZ3MgdGhhdCB3ZXJlIGFscmVhZHkgc2VudC4KLSAgZm9yIChhdXRvIGJ1ZmZlcl9xdWV1ZV9pdGVyID0gYnVmZmVyX3F1ZXVlX2NoYWluXy5iZWdpbigpOwotICAgICAgIGJ1ZmZlcl9xdWV1ZV9pdGVyICE9IGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uZW5kKCk7ICsrYnVmZmVyX3F1ZXVlX2l0ZXIpIHsKLSAgICBjb25zdCBCdWZmZXJRdWV1ZVdpdGhDb25maWcmIHF1ZXVlX3dpdGhfY29uZmlnID0gKmJ1ZmZlcl9xdWV1ZV9pdGVyOwotICAgIGlmICghcXVldWVfd2l0aF9jb25maWcuaXNfY29uZmlnX3NlbnQpIHsKLSAgICAgIERWTE9HKExPR19MRVZFTF9FUykgPDwgIkZsdXNoOiBkcm9wcGluZyBidWZmZXJzIHdpdGggdW5zZW50IG5ldyBjb25maWdzLiI7Ci0gICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmVyYXNlKGJ1ZmZlcl9xdWV1ZV9pdGVyLCBidWZmZXJfcXVldWVfY2hhaW5fLmVuZCgpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIEVtaXRSZW1haW5pbmdCdWZmZXJzKCk7Ci0gIGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uY2xlYXIoKTsKLQotICAvLyBFbmQgb2YgdGhlIHNlZ21lbnQuCi0gIC8vIE5vdGU6IGRvZXMgbm90IG5lZWQgdG8gaW52b2tlIHxlbmRfb2Zfc2VnbWVudF9jYl98IHNpbmNlIGZsdXNoaW5nIHRoZQotICAvLyBzdHJlYW0gcGFyc2VyIGFscmVhZHkgaW52b2x2ZXMgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZWdtZW50LgotICBzZWdtZW50X3N0YXJ0ZWRfID0gZmFsc2U7Ci0KLSAgLy8gUmVtb3ZlIGFueSBieXRlcyBsZWZ0IGluIHRoZSBUUyBidWZmZXIuCi0gIC8vIChpLmUuIGFueSBwYXJ0aWFsIFRTIHBhY2tldCA9PiBsZXNzIHRoYW4gMTg4IGJ5dGVzKS4KLSAgdHNfYnl0ZV9xdWV1ZV8uUmVzZXQoKTsKLQotICAvLyBSZXNldCB0aGUgc2VsZWN0ZWQgUElEcy4KLSAgc2VsZWN0ZWRfYXVkaW9fcGlkXyA9IC0xOwotICBzZWxlY3RlZF92aWRlb19waWRfID0gLTE7Ci0KLSAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB1bnJvbGxlci4KLSAgdGltZXN0YW1wX3Vucm9sbGVyXy5SZXNldCgpOwotfQotCi1ib29sIE1wMnRTdHJlYW1QYXJzZXI6OlBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgRFZMT0coMSkgPDwgIk1wMnRTdHJlYW1QYXJzZXI6OlBhcnNlIHNpemU9IiA8PCBzaXplOwotCi0gIC8vIEFkZCB0aGUgZGF0YSB0byB0aGUgcGFyc2VyIHN0YXRlLgotICB0c19ieXRlX3F1ZXVlXy5QdXNoKGJ1Ziwgc2l6ZSk7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBjb25zdCB1aW50OF90KiB0c19idWZmZXI7Ci0gICAgaW50IHRzX2J1ZmZlcl9zaXplOwotICAgIHRzX2J5dGVfcXVldWVfLlBlZWsoJnRzX2J1ZmZlciwgJnRzX2J1ZmZlcl9zaXplKTsKLSAgICBpZiAodHNfYnVmZmVyX3NpemUgPCBUc1BhY2tldDo6a1BhY2tldFNpemUpIGJyZWFrOwotCi0gICAgLy8gU3luY2hyb25pemF0aW9uLgotICAgIGludCBza2lwcGVkX2J5dGVzID0gVHNQYWNrZXQ6OlN5bmModHNfYnVmZmVyLCB0c19idWZmZXJfc2l6ZSk7Ci0gICAgaWYgKHNraXBwZWRfYnl0ZXMgPiAwKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiUGFja2V0IG5vdCBhbGlnbmVkIG9uIGEgVFMgc3luY3dvcmQ6IgotICAgICAgICAgICAgICAgPDwgIiBza2lwcGVkX2J5dGVzPSIgPDwgc2tpcHBlZF9ieXRlczsKLSAgICAgIHRzX2J5dGVfcXVldWVfLlBvcChza2lwcGVkX2J5dGVzKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIFBhcnNlIHRoZSBUUyBoZWFkZXIsIHNraXBwaW5nIDEgYnl0ZSBpZiB0aGUgaGVhZGVyIGlzIGludmFsaWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRzUGFja2V0PiB0c19wYWNrZXQoCi0gICAgICAgIFRzUGFja2V0OjpQYXJzZSh0c19idWZmZXIsIHRzX2J1ZmZlcl9zaXplKSk7Ci0gICAgaWYgKCF0c19wYWNrZXQpIHsKLSAgICAgIERWTE9HKDEpIDw8ICJFcnJvcjogaW52YWxpZCBUUyBwYWNrZXQiOwotICAgICAgdHNfYnl0ZV9xdWV1ZV8uUG9wKDEpOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIERWTE9HKExPR19MRVZFTF9UUykgPDwgIlByb2Nlc3NpbmcgUElEPSIgPDwgdHNfcGFja2V0LT5waWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBzdGFydF91bml0PSIKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IHRzX3BhY2tldC0+cGF5bG9hZF91bml0X3N0YXJ0X2luZGljYXRvcigpOwotCi0gICAgLy8gUGFyc2UgdGhlIHNlY3Rpb24uCi0gICAgYXV0byBpdCA9IHBpZHNfLmZpbmQodHNfcGFja2V0LT5waWQoKSk7Ci0gICAgaWYgKGl0ID09IHBpZHNfLmVuZCgpICYmIHRzX3BhY2tldC0+cGlkKCkgPT0gVHNTZWN0aW9uOjprUGlkUGF0KSB7Ci0gICAgICAvLyBDcmVhdGUgdGhlIFBBVCBzdGF0ZSBoZXJlIGlmIG5lZWRlZC4KLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUc1NlY3Rpb24+IHBhdF9zZWN0aW9uX3BhcnNlcihuZXcgVHNTZWN0aW9uUGF0KAotICAgICAgICAgIGJhc2U6OkJpbmQoJk1wMnRTdHJlYW1QYXJzZXI6OlJlZ2lzdGVyUG10LCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPFBpZFN0YXRlPiBwYXRfcGlkX3N0YXRlKG5ldyBQaWRTdGF0ZSgKLSAgICAgICAgICB0c19wYWNrZXQtPnBpZCgpLCBQaWRTdGF0ZTo6a1BpZFBhdCwgc3RkOjptb3ZlKHBhdF9zZWN0aW9uX3BhcnNlcikpKTsKLSAgICAgIHBhdF9waWRfc3RhdGUtPkVuYWJsZSgpOwotICAgICAgaXQgPSBwaWRzXwotICAgICAgICAgICAgICAgLmluc2VydCgKLSAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcih0c19wYWNrZXQtPnBpZCgpLCBzdGQ6Om1vdmUocGF0X3BpZF9zdGF0ZSkpKQotICAgICAgICAgICAgICAgLmZpcnN0OwotICAgIH0KLQotICAgIGlmIChpdCAhPSBwaWRzXy5lbmQoKSkgewotICAgICAgaWYgKCFpdC0+c2Vjb25kLT5QdXNoVHNQYWNrZXQoKnRzX3BhY2tldCkpIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgRFZMT0coTE9HX0xFVkVMX1RTKSA8PCAiSWdub3JpbmcgVFMgcGFja2V0IGZvciBwaWQ6ICIgPDwgdHNfcGFja2V0LT5waWQoKTsKLSAgICB9Ci0KLSAgICAvLyBHbyB0byB0aGUgbmV4dCBwYWNrZXQuCi0gICAgdHNfYnl0ZV9xdWV1ZV8uUG9wKFRzUGFja2V0OjprUGFja2V0U2l6ZSk7Ci0gIH0KLQotICBSQ0hFQ0soRmluaXNoSW5pdGlhbGl6YXRpb25JZk5lZWRlZCgpKTsKLQotICAvLyBFbWl0IHRoZSBBL1YgYnVmZmVycyB0aGF0IGtlcHQgYWNjdW11bGF0aW5nIGR1cmluZyBUUyBwYXJzaW5nLgotICByZXR1cm4gRW1pdFJlbWFpbmluZ0J1ZmZlcnMoKTsKLX0KLQotdm9pZCBNcDJ0U3RyZWFtUGFyc2VyOjpSZWdpc3RlclBtdChpbnQgcHJvZ3JhbV9udW1iZXIsIGludCBwbXRfcGlkKSB7Ci0gIERWTE9HKDEpIDw8ICJSZWdpc3RlclBtdDoiCi0gICAgICAgICAgIDw8ICIgcHJvZ3JhbV9udW1iZXI9IiA8PCBwcm9ncmFtX251bWJlciA8PCAiIHBtdF9waWQ9IiA8PCBwbXRfcGlkOwotCi0gIC8vIE9ubHkgb25lIFRTIHByb2dyYW0gaXMgYWxsb3dlZC4gSWdub3JlIHRoZSBpbmNvbWluZyBwcm9ncmFtIG1hcCB0YWJsZSwKLSAgLy8gaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgcmVnaXN0ZXJlZC4KLSAgZm9yIChjb25zdCBhdXRvJiBwaWRfcGFpciA6IHBpZHNfKSB7Ci0gICAgUGlkU3RhdGUqIHBpZF9zdGF0ZSA9IHBpZF9wYWlyLnNlY29uZC5nZXQoKTsKLSAgICBpZiAocGlkX3N0YXRlLT5waWRfdHlwZSgpID09IFBpZFN0YXRlOjprUGlkUG10KSB7Ci0gICAgICBEVkxPR19JRigxLCBwbXRfcGlkICE9IHBpZF9wYWlyLmZpcnN0KQotICAgICAgICAgIDw8ICJNb3JlIHRoYW4gb25lIHByb2dyYW0gaXMgZGVmaW5lZCI7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRlIHRoZSBQTVQgc3RhdGUgaGVyZSBpZiBuZWVkZWQuCi0gIERWTE9HKDEpIDw8ICJDcmVhdGUgYSBuZXcgUE1UIHBhcnNlciI7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxUc1NlY3Rpb24+IHBtdF9zZWN0aW9uX3BhcnNlcihuZXcgVHNTZWN0aW9uUG10KGJhc2U6OkJpbmQoCi0gICAgICAmTXAydFN0cmVhbVBhcnNlcjo6UmVnaXN0ZXJQZXMsIGJhc2U6OlVucmV0YWluZWQodGhpcyksIHBtdF9waWQpKSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxQaWRTdGF0ZT4gcG10X3BpZF9zdGF0ZSgKLSAgICAgIG5ldyBQaWRTdGF0ZShwbXRfcGlkLCBQaWRTdGF0ZTo6a1BpZFBtdCwgc3RkOjptb3ZlKHBtdF9zZWN0aW9uX3BhcnNlcikpKTsKLSAgcG10X3BpZF9zdGF0ZS0+RW5hYmxlKCk7Ci0gIHBpZHNfLmluc2VydChzdGQ6Om1ha2VfcGFpcihwbXRfcGlkLCBzdGQ6Om1vdmUocG10X3BpZF9zdGF0ZSkpKTsKLX0KLQotdm9pZCBNcDJ0U3RyZWFtUGFyc2VyOjpSZWdpc3RlclBlcyhpbnQgcG10X3BpZCwgaW50IHBlc19waWQsIGludCBzdHJlYW1fdHlwZSkgewotICAvLyBUT0RPKGRhbWllbnYpOiBjaGVjayB0aGVyZSBpcyBubyBtaXNtYXRjaCBpZiB0aGUgZW50cnkgYWxyZWFkeSBleGlzdHMuCi0gIERWTE9HKDEpIDw8ICJSZWdpc3RlclBlczoiCi0gICAgICAgICAgIDw8ICIgcGVzX3BpZD0iIDw8IHBlc19waWQgPDwgIiBzdHJlYW1fdHlwZT0iIDw8IHN0ZDo6aGV4Ci0gICAgICAgICAgIDw8IHN0cmVhbV90eXBlIDw8IHN0ZDo6ZGVjOwotICBhdXRvIGl0ID0gcGlkc18uZmluZChwZXNfcGlkKTsKLSAgaWYgKGl0ICE9IHBpZHNfLmVuZCgpKSByZXR1cm47Ci0KLSAgLy8gQ3JlYXRlIGEgc3RyZWFtIHBhcnNlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdHJlYW0gdHlwZS4KLSAgYm9vbCBpc19hdWRpbyA9IGZhbHNlOwotICBzdGQ6OnVuaXF1ZV9wdHI8RXNQYXJzZXI+IGVzX3BhcnNlcjsKLSAgaWYgKHN0cmVhbV90eXBlID09IGtTdHJlYW1UeXBlQVZDKSB7Ci0gICAgZXNfcGFyc2VyLnJlc2V0KAotICAgICAgICBuZXcgRXNQYXJzZXJIMjY0KGJhc2U6OkJpbmQoJk1wMnRTdHJlYW1QYXJzZXI6Ok9uVmlkZW9Db25maWdDaGFuZ2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgcGVzX3BpZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmTXAydFN0cmVhbVBhcnNlcjo6T25FbWl0VmlkZW9CdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBwZXNfcGlkKSkpOwotICB9IGVsc2UgaWYgKHN0cmVhbV90eXBlID09IGtTdHJlYW1UeXBlQUFDKSB7Ci0gICAgZXNfcGFyc2VyLnJlc2V0KAotICAgICAgICBuZXcgRXNQYXJzZXJBZHRzKGJhc2U6OkJpbmQoJk1wMnRTdHJlYW1QYXJzZXI6Ok9uQXVkaW9Db25maWdDaGFuZ2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgcGVzX3BpZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZCgmTXAydFN0cmVhbVBhcnNlcjo6T25FbWl0QXVkaW9CdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBwZXNfcGlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzYnJfaW5fbWltZXR5cGVfKSk7Ci0gICAgaXNfYXVkaW8gPSB0cnVlOwotICB9IGVsc2UgaWYgKHN0cmVhbV90eXBlID09IGtTdHJlYW1UeXBlTXBlZzFBdWRpbykgewotICAgIGVzX3BhcnNlci5yZXNldChuZXcgRXNQYXJzZXJNcGVnMUF1ZGlvKAotICAgICAgICBiYXNlOjpCaW5kKCZNcDJ0U3RyZWFtUGFyc2VyOjpPbkF1ZGlvQ29uZmlnQ2hhbmdlZCwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBwZXNfcGlkKSwKLSAgICAgICAgYmFzZTo6QmluZCgmTXAydFN0cmVhbVBhcnNlcjo6T25FbWl0QXVkaW9CdWZmZXIsIGJhc2U6OlVucmV0YWluZWQodGhpcyksCi0gICAgICAgICAgICAgICAgICAgcGVzX3BpZCksCi0gICAgICAgIG1lZGlhX2xvZ18pKTsKLSAgICBpc19hdWRpbyA9IHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLy8gQ3JlYXRlIHRoZSBQRVMgc3RhdGUgaGVyZS4KLSAgRFZMT0coMSkgPDwgIkNyZWF0ZSBhIG5ldyBQRVMgc3RhdGUiOwotICBzdGQ6OnVuaXF1ZV9wdHI8VHNTZWN0aW9uPiBwZXNfc2VjdGlvbl9wYXJzZXIoCi0gICAgICBuZXcgVHNTZWN0aW9uUGVzKHN0ZDo6bW92ZShlc19wYXJzZXIpLCAmdGltZXN0YW1wX3Vucm9sbGVyXykpOwotICBQaWRTdGF0ZTo6UGlkVHlwZSBwaWRfdHlwZSA9Ci0gICAgICBpc19hdWRpbyA/IFBpZFN0YXRlOjprUGlkQXVkaW9QZXMgOiBQaWRTdGF0ZTo6a1BpZFZpZGVvUGVzOwotICBzdGQ6OnVuaXF1ZV9wdHI8UGlkU3RhdGU+IHBlc19waWRfc3RhdGUoCi0gICAgICBuZXcgUGlkU3RhdGUocGVzX3BpZCwgcGlkX3R5cGUsIHN0ZDo6bW92ZShwZXNfc2VjdGlvbl9wYXJzZXIpKSk7Ci0gIHBpZHNfLmluc2VydChzdGQ6Om1ha2VfcGFpcihwZXNfcGlkLCBzdGQ6Om1vdmUocGVzX3BpZF9zdGF0ZSkpKTsKLQotICAvLyBBIG5ldyBQRVMgcGlkIGhhcyBiZWVuIGFkZGVkLCB0aGUgUElEIGZpbHRlciBtaWdodCBjaGFuZ2UuCi0gIFVwZGF0ZVBpZEZpbHRlcigpOwotfQotCi12b2lkIE1wMnRTdHJlYW1QYXJzZXI6OlVwZGF0ZVBpZEZpbHRlcigpIHsKLSAgLy8gQXBwbGllcyB0aGUgSExTIHJ1bGUgdG8gc2VsZWN0IHRoZSBkZWZhdWx0IGF1ZGlvL3ZpZGVvIFBJRHM6Ci0gIC8vIHNlbGVjdCB0aGUgYXVkaW8vdmlkZW8gc3RyZWFtcyB3aXRoIHRoZSBsb3dlc3QgUElELgotICAvLyBUT0RPKGRhbWllbnYpOiB0aGlzIGNhbiBiZSBjaGFuZ2VkIHdoZW4gdGhlIFN0cmVhbVBhcnNlciBpbnRlcmZhY2UKLSAgLy8gc3VwcG9ydHMgbXVsdGlwbGUgYXVkaW8vdmlkZW8gc3RyZWFtcy4KLSAgYXV0byBsb3dlc3RfYXVkaW9fcGlkID0gcGlkc18uZW5kKCk7Ci0gIGF1dG8gbG93ZXN0X3ZpZGVvX3BpZCA9IHBpZHNfLmVuZCgpOwotICBmb3IgKGF1dG8gaXQgPSBwaWRzXy5iZWdpbigpOyBpdCAhPSBwaWRzXy5lbmQoKTsgKytpdCkgewotICAgIGludCBwaWQgPSBpdC0+Zmlyc3Q7Ci0gICAgUGlkU3RhdGUqIHBpZF9zdGF0ZSA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgaWYgKHBpZF9zdGF0ZS0+cGlkX3R5cGUoKSA9PSBQaWRTdGF0ZTo6a1BpZEF1ZGlvUGVzICYmCi0gICAgICAgIChsb3dlc3RfYXVkaW9fcGlkID09IHBpZHNfLmVuZCgpIHx8IHBpZCA8IGxvd2VzdF9hdWRpb19waWQtPmZpcnN0KSkKLSAgICAgIGxvd2VzdF9hdWRpb19waWQgPSBpdDsKLSAgICBpZiAocGlkX3N0YXRlLT5waWRfdHlwZSgpID09IFBpZFN0YXRlOjprUGlkVmlkZW9QZXMgJiYKLSAgICAgICAgKGxvd2VzdF92aWRlb19waWQgPT0gcGlkc18uZW5kKCkgfHwgcGlkIDwgbG93ZXN0X3ZpZGVvX3BpZC0+Zmlyc3QpKQotICAgICAgbG93ZXN0X3ZpZGVvX3BpZCA9IGl0OwotICB9Ci0KLSAgLy8gRW5hYmxlIGJvdGggdGhlIGxvd2VzdCBhdWRpbyBhbmQgdmlkZW8gUElEcy4KLSAgaWYgKGxvd2VzdF9hdWRpb19waWQgIT0gcGlkc18uZW5kKCkpIHsKLSAgICBEVkxPRygxKSA8PCAiRW5hYmxlIGF1ZGlvIHBpZDogIiA8PCBsb3dlc3RfYXVkaW9fcGlkLT5maXJzdDsKLSAgICBsb3dlc3RfYXVkaW9fcGlkLT5zZWNvbmQtPkVuYWJsZSgpOwotICAgIHNlbGVjdGVkX2F1ZGlvX3BpZF8gPSBsb3dlc3RfYXVkaW9fcGlkLT5maXJzdDsKLSAgfQotICBpZiAobG93ZXN0X3ZpZGVvX3BpZCAhPSBwaWRzXy5lbmQoKSkgewotICAgIERWTE9HKDEpIDw8ICJFbmFibGUgdmlkZW8gcGlkOiAiIDw8IGxvd2VzdF92aWRlb19waWQtPmZpcnN0OwotICAgIGxvd2VzdF92aWRlb19waWQtPnNlY29uZC0+RW5hYmxlKCk7Ci0gICAgc2VsZWN0ZWRfdmlkZW9fcGlkXyA9IGxvd2VzdF92aWRlb19waWQtPmZpcnN0OwotICB9Ci0KLSAgLy8gRGlzYWJsZSBhbGwgdGhlIG90aGVyIGF1ZGlvIGFuZCB2aWRlbyBQSURzLgotICBmb3IgKGF1dG8gaXQgPSBwaWRzXy5iZWdpbigpOyBpdCAhPSBwaWRzXy5lbmQoKTsgKytpdCkgewotICAgIFBpZFN0YXRlKiBwaWRfc3RhdGUgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgIGlmIChpdCAhPSBsb3dlc3RfYXVkaW9fcGlkICYmIGl0ICE9IGxvd2VzdF92aWRlb19waWQgJiYKLSAgICAgICAgKHBpZF9zdGF0ZS0+cGlkX3R5cGUoKSA9PSBQaWRTdGF0ZTo6a1BpZEF1ZGlvUGVzIHx8Ci0gICAgICAgICBwaWRfc3RhdGUtPnBpZF90eXBlKCkgPT0gUGlkU3RhdGU6OmtQaWRWaWRlb1BlcykpCi0gICAgICBwaWRfc3RhdGUtPkRpc2FibGUoKTsKLSAgfQotfQotCi12b2lkIE1wMnRTdHJlYW1QYXJzZXI6Ok9uVmlkZW9Db25maWdDaGFuZ2VkKAotICAgIGludCBwZXNfcGlkLCBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2RlY29kZXJfY29uZmlnKSB7Ci0gIERWTE9HKDEpIDw8ICJPblZpZGVvQ29uZmlnQ2hhbmdlZCBmb3IgcGlkPSIgPDwgcGVzX3BpZDsKLSAgRENIRUNLX0VRKHBlc19waWQsIHNlbGVjdGVkX3ZpZGVvX3BpZF8pOwotICBEQ0hFQ0sodmlkZW9fZGVjb2Rlcl9jb25maWcuSXNWYWxpZENvbmZpZygpKTsKLQotICBpZiAoIWJ1ZmZlcl9xdWV1ZV9jaGFpbl8uZW1wdHkoKSAmJgotICAgICAgIWJ1ZmZlcl9xdWV1ZV9jaGFpbl8uYmFjaygpLnZpZGVvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpIHsKLSAgICAvLyBObyB2aWRlbyBoYXMgYmVlbiByZWNlaXZlZCBzbyBmYXIsIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdmlkZW8gcXVldWUuCi0gICAgRENIRUNLKGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uYmFjaygpLnZpZGVvX3F1ZXVlLmVtcHR5KCkpOwotICAgIGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uYmFjaygpLnZpZGVvX2NvbmZpZyA9IHZpZGVvX2RlY29kZXJfY29uZmlnOwotICB9IGVsc2UgewotICAgIC8vIENyZWF0ZSBhIG5ldyBlbnRyeSBpbiB8YnVmZmVyX3F1ZXVlX2NoYWluX3wgd2l0aCB0aGUgdXBkYXRlZCBjb25maWdzLgotICAgIEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyBidWZmZXJfcXVldWVfd2l0aF9jb25maWcoCi0gICAgICAgIGZhbHNlLAotICAgICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmVtcHR5KCkgPyBBdWRpb0RlY29kZXJDb25maWcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBidWZmZXJfcXVldWVfY2hhaW5fLmJhY2soKS5hdWRpb19jb25maWcsCi0gICAgICAgIHZpZGVvX2RlY29kZXJfY29uZmlnKTsKLSAgICBidWZmZXJfcXVldWVfY2hhaW5fLnB1c2hfYmFjayhidWZmZXJfcXVldWVfd2l0aF9jb25maWcpOwotICB9Ci0KLSAgLy8gUmVwbGFjZSBhbnkgbm9uIHZhbGlkIGNvbmZpZyB3aXRoIHRoZSAxc3QgdmFsaWQgZW50cnkuCi0gIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIHRoZXJlIHdhcyBubyBhdmFpbGFibGUgY29uZmlnIGJlZm9yZS4KLSAgZm9yIChzdGQ6Omxpc3Q8QnVmZmVyUXVldWVXaXRoQ29uZmlnPjo6aXRlcmF0b3IgaXQgPQotICAgICAgICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gYnVmZmVyX3F1ZXVlX2NoYWluXy5lbmQoKTsgKytpdCkgewotICAgIGlmIChpdC0+dmlkZW9fY29uZmlnLklzVmFsaWRDb25maWcoKSkgYnJlYWs7Ci0gICAgaXQtPnZpZGVvX2NvbmZpZyA9IHZpZGVvX2RlY29kZXJfY29uZmlnOwotICB9Ci19Ci0KLXZvaWQgTXAydFN0cmVhbVBhcnNlcjo6T25BdWRpb0NvbmZpZ0NoYW5nZWQoCi0gICAgaW50IHBlc19waWQsIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fZGVjb2Rlcl9jb25maWcpIHsKLSAgRFZMT0coMSkgPDwgIk9uQXVkaW9Db25maWdDaGFuZ2VkIGZvciBwaWQ9IiA8PCBwZXNfcGlkOwotICBEQ0hFQ0tfRVEocGVzX3BpZCwgc2VsZWN0ZWRfYXVkaW9fcGlkXyk7Ci0gIERDSEVDSyhhdWRpb19kZWNvZGVyX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpOwotCi0gIGlmICghYnVmZmVyX3F1ZXVlX2NoYWluXy5lbXB0eSgpICYmCi0gICAgICAhYnVmZmVyX3F1ZXVlX2NoYWluXy5iYWNrKCkuYXVkaW9fY29uZmlnLklzVmFsaWRDb25maWcoKSkgewotICAgIC8vIE5vIGF1ZGlvIGhhcyBiZWVuIHJlY2VpdmVkIHNvIGZhciwgY2FuIHJldXNlIHRoZSBleGlzdGluZyBhdWRpbyBxdWV1ZS4KLSAgICBEQ0hFQ0soYnVmZmVyX3F1ZXVlX2NoYWluXy5iYWNrKCkuYXVkaW9fcXVldWUuZW1wdHkoKSk7Ci0gICAgYnVmZmVyX3F1ZXVlX2NoYWluXy5iYWNrKCkuYXVkaW9fY29uZmlnID0gYXVkaW9fZGVjb2Rlcl9jb25maWc7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gQ3JlYXRlIGEgbmV3IGVudHJ5IGluIHxidWZmZXJfcXVldWVfY2hhaW5ffCB3aXRoIHRoZSB1cGRhdGVkIGNvbmZpZ3MuCi0gICAgQnVmZmVyUXVldWVXaXRoQ29uZmlnIGJ1ZmZlcl9xdWV1ZV93aXRoX2NvbmZpZygKLSAgICAgICAgZmFsc2UsIGF1ZGlvX2RlY29kZXJfY29uZmlnLAotICAgICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmVtcHR5KCkgPyBWaWRlb0RlY29kZXJDb25maWcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBidWZmZXJfcXVldWVfY2hhaW5fLmJhY2soKS52aWRlb19jb25maWcpOwotICAgIGJ1ZmZlcl9xdWV1ZV9jaGFpbl8ucHVzaF9iYWNrKGJ1ZmZlcl9xdWV1ZV93aXRoX2NvbmZpZyk7Ci0gIH0KLQotICAvLyBSZXBsYWNlIGFueSBub24gdmFsaWQgY29uZmlnIHdpdGggdGhlIDFzdCB2YWxpZCBlbnRyeS4KLSAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaWYgdGhlcmUgd2FzIG5vIGF2YWlsYWJsZSBjb25maWcgYmVmb3JlLgotICBmb3IgKHN0ZDo6bGlzdDxCdWZmZXJRdWV1ZVdpdGhDb25maWc+OjppdGVyYXRvciBpdCA9Ci0gICAgICAgICAgIGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uYmVnaW4oKTsKLSAgICAgICBpdCAhPSBidWZmZXJfcXVldWVfY2hhaW5fLmVuZCgpOyArK2l0KSB7Ci0gICAgaWYgKGl0LT5hdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKSBicmVhazsKLSAgICBpdC0+YXVkaW9fY29uZmlnID0gYXVkaW9fZGVjb2Rlcl9jb25maWc7Ci0gIH0KLX0KLQotc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiBHZW5lcmF0ZU1lZGlhVHJhY2tJbmZvKAotICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnLAotICAgIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gbWVkaWFfdHJhY2tzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgLy8gVE9ETyhzZXJ2b2xrKTogSW1wbGVtZW50IHByb3BlciBzb3VyY2luZyBvZiBtZWRpYSB0cmFjayBpbmZvIGFzIGRlc2NyaWJlZAotICAvLyBpbiBjcmJ1Zy5jb20vNTkwMDg1Ci0gIGlmIChhdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKSB7Ci0gICAgbWVkaWFfdHJhY2tzLT5BZGRBdWRpb1RyYWNrKGF1ZGlvX2NvbmZpZywga01wMnRBdWRpb1RyYWNrSWQsICJtYWluIiwgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKLSAgfQotICBpZiAodmlkZW9fY29uZmlnLklzVmFsaWRDb25maWcoKSkgewotICAgIG1lZGlhX3RyYWNrcy0+QWRkVmlkZW9UcmFjayh2aWRlb19jb25maWcsIGtNcDJ0VmlkZW9UcmFja0lkLCAibWFpbiIsICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIik7Ci0gIH0KLSAgcmV0dXJuIG1lZGlhX3RyYWNrczsKLX0KLQotYm9vbCBNcDJ0U3RyZWFtUGFyc2VyOjpGaW5pc2hJbml0aWFsaXphdGlvbklmTmVlZGVkKCkgewotICAvLyBOb3RoaW5nIHRvIGJlIGRvbmUgaWYgYWxyZWFkeSBpbml0aWFsaXplZC4KLSAgaWYgKGlzX2luaXRpYWxpemVkXykgcmV0dXJuIHRydWU7Ci0KLSAgLy8gV2FpdCBmb3IgbW9yZSBkYXRhIHRvIGNvbWUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uLgotICBpZiAoYnVmZmVyX3F1ZXVlX2NoYWluXy5lbXB0eSgpKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBXYWl0IGZvciBtb3JlIGRhdGEgdG8gY29tZSBpZiBvbmUgb2YgdGhlIGNvbmZpZyBpcyBub3QgYXZhaWxhYmxlLgotICBCdWZmZXJRdWV1ZVdpdGhDb25maWcmIHF1ZXVlX3dpdGhfY29uZmlnID0gYnVmZmVyX3F1ZXVlX2NoYWluXy5mcm9udCgpOwotICBpZiAoc2VsZWN0ZWRfYXVkaW9fcGlkXyA+IDAgJiYKLSAgICAgICFxdWV1ZV93aXRoX2NvbmZpZy5hdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKQotICAgIHJldHVybiB0cnVlOwotICBpZiAoc2VsZWN0ZWRfdmlkZW9fcGlkXyA+IDAgJiYKLSAgICAgICFxdWV1ZV93aXRoX2NvbmZpZy52aWRlb19jb25maWcuSXNWYWxpZENvbmZpZygpKQotICAgIHJldHVybiB0cnVlOwotCi0gIC8vIFBhc3MgdGhlIGNvbmZpZyBiZWZvcmUgaW52b2tpbmcgdGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLgotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IG1lZGlhX3RyYWNrcyA9IEdlbmVyYXRlTWVkaWFUcmFja0luZm8oCi0gICAgICBxdWV1ZV93aXRoX2NvbmZpZy5hdWRpb19jb25maWcsIHF1ZXVlX3dpdGhfY29uZmlnLnZpZGVvX2NvbmZpZyk7Ci0gIFJDSEVDSyhjb25maWdfY2JfLlJ1bihzdGQ6Om1vdmUobWVkaWFfdHJhY2tzKSwgVGV4dFRyYWNrQ29uZmlnTWFwKCkpKTsKLSAgcXVldWVfd2l0aF9jb25maWcuaXNfY29uZmlnX3NlbnQgPSB0cnVlOwotCi0gIC8vIEZvciBNcGVnMiBUUywgdGhlIGR1cmF0aW9uIGlzIG5vdCBrbm93bi4KLSAgRFZMT0coMSkgPDwgIk1wZWcyVFMgc3RyZWFtIHBhcnNlciBpbml0aWFsaXphdGlvbiBkb25lIjsKLQotICAvLyBUT0RPKHdvbGVuZXR6KTogSWYgcG9zc2libGUsIGRldGVjdCBhbmQgcmVwb3J0IHRyYWNrIGNvdW50cyBieSB0eXBlIG1vcmUKLSAgLy8gYWNjdXJhdGVseSBoZXJlLiBDdXJyZW50bHksIGNhcHBlZCBhdCBtYXggMSBlYWNoIGZvciBhdWRpbyBhbmQgdmlkZW8sIHdpdGgKLSAgLy8gYXNzdW1wdGlvbiBvZiAwIHRleHQgdHJhY2tzLgotICBJbml0UGFyYW1ldGVycyBwYXJhbXMoa0luZmluaXRlRHVyYXRpb24pOwotICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPQotICAgICAgcXVldWVfd2l0aF9jb25maWcuYXVkaW9fY29uZmlnLklzVmFsaWRDb25maWcoKSA/IDEgOiAwOwotICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPQotICAgICAgcXVldWVfd2l0aF9jb25maWcudmlkZW9fY29uZmlnLklzVmFsaWRDb25maWcoKSA/IDEgOiAwOwotICBiYXNlOjpSZXNldEFuZFJldHVybigmaW5pdF9jYl8pLlJ1bihwYXJhbXMpOwotICBpc19pbml0aWFsaXplZF8gPSB0cnVlOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE1wMnRTdHJlYW1QYXJzZXI6Ok9uRW1pdEF1ZGlvQnVmZmVyKAotICAgIGludCBwZXNfcGlkLCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gc3RyZWFtX3BhcnNlcl9idWZmZXIpIHsKLSAgRENIRUNLX0VRKHBlc19waWQsIHNlbGVjdGVkX2F1ZGlvX3BpZF8pOwotCi0gIERWTE9HKExPR19MRVZFTF9FUykKLSAgICAgIDw8ICJPbkVtaXRBdWRpb0J1ZmZlcjogIgotICAgICAgPDwgIiBzaXplPSIgPDwgc3RyZWFtX3BhcnNlcl9idWZmZXItPmRhdGFfc2l6ZSgpCi0gICAgICA8PCAiIGR0cz0iIDw8IHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICA8PCAiIHB0cz0iIDw8IHN0cmVhbV9wYXJzZXJfYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICA8PCAiIGR1cj0iIDw8IHN0cmVhbV9wYXJzZXJfYnVmZmVyLT5kdXJhdGlvbigpLkluTWlsbGlzZWNvbmRzKCk7Ci0KLSAgLy8gSWdub3JlIHRoZSBpbmNvbWluZyBidWZmZXIgaWYgaXQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29uZmlnLgotICBpZiAoYnVmZmVyX3F1ZXVlX2NoYWluXy5lbXB0eSgpKSB7Ci0gICAgTE9HKEVSUk9SKSA8PCAiQ2Fubm90IHByb3ZpZGUgYnVmZmVycyBiZWZvcmUgY29uZmlncyI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgYnVmZmVyX3F1ZXVlX2NoYWluXy5iYWNrKCkuYXVkaW9fcXVldWUucHVzaF9iYWNrKHN0cmVhbV9wYXJzZXJfYnVmZmVyKTsKLX0KLQotdm9pZCBNcDJ0U3RyZWFtUGFyc2VyOjpPbkVtaXRWaWRlb0J1ZmZlcigKLSAgICBpbnQgcGVzX3BpZCwgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IHN0cmVhbV9wYXJzZXJfYnVmZmVyKSB7Ci0gIERDSEVDS19FUShwZXNfcGlkLCBzZWxlY3RlZF92aWRlb19waWRfKTsKLQotICBEVkxPRyhMT0dfTEVWRUxfRVMpCi0gICAgICA8PCAiT25FbWl0VmlkZW9CdWZmZXIiCi0gICAgICA8PCAiIHNpemU9IiA8PCBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+ZGF0YV9zaXplKCkKLSAgICAgIDw8ICIgZHRzPSIgPDwgc3RyZWFtX3BhcnNlcl9idWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpLkluTWlsbGlzZWNvbmRzKCkKLSAgICAgIDw8ICIgcHRzPSIgPDwgc3RyZWFtX3BhcnNlcl9idWZmZXItPnRpbWVzdGFtcCgpLkluTWlsbGlzZWNvbmRzKCkKLSAgICAgIDw8ICIgZHVyPSIgPDwgc3RyZWFtX3BhcnNlcl9idWZmZXItPmR1cmF0aW9uKCkuSW5NaWxsaXNlY29uZHMoKQotICAgICAgPDwgIiBpc19rZXlfZnJhbWU9IiA8PCBzdHJlYW1fcGFyc2VyX2J1ZmZlci0+aXNfa2V5X2ZyYW1lKCk7Ci0KLSAgLy8gSWdub3JlIHRoZSBpbmNvbWluZyBidWZmZXIgaWYgaXQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgY29uZmlnLgotICBpZiAoYnVmZmVyX3F1ZXVlX2NoYWluXy5lbXB0eSgpKSB7Ci0gICAgTk9UUkVBQ0hFRCgpIDw8ICJDYW5ub3QgcHJvdmlkZSBidWZmZXJzIGJlZm9yZSBjb25maWdzIjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBidWZmZXJfcXVldWVfY2hhaW5fLmJhY2soKS52aWRlb19xdWV1ZS5wdXNoX2JhY2soc3RyZWFtX3BhcnNlcl9idWZmZXIpOwotfQotCi1ib29sIE1wMnRTdHJlYW1QYXJzZXI6OkVtaXRSZW1haW5pbmdCdWZmZXJzKCkgewotICBEVkxPRyhMT0dfTEVWRUxfRVMpIDw8ICJNcDJ0U3RyZWFtUGFyc2VyOjpFbWl0UmVtYWluaW5nQnVmZmVycyI7Ci0KLSAgLy8gTm8gYnVmZmVyIHNob3VsZCBiZSBzZW50IHVudGlsIGZ1bGx5IGluaXRpYWxpemVkLgotICBpZiAoIWlzX2luaXRpYWxpemVkXykgcmV0dXJuIHRydWU7Ci0KLSAgaWYgKGJ1ZmZlcl9xdWV1ZV9jaGFpbl8uZW1wdHkoKSkgcmV0dXJuIHRydWU7Ci0KLSAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbGFzdCBhdWRpbyBhbmQgdmlkZW8gY29uZmlnIHNlbnQuCi0gIEF1ZGlvRGVjb2RlckNvbmZpZyBsYXN0X2F1ZGlvX2NvbmZpZyA9Ci0gICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmJhY2soKS5hdWRpb19jb25maWc7Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyBsYXN0X3ZpZGVvX2NvbmZpZyA9Ci0gICAgICBidWZmZXJfcXVldWVfY2hhaW5fLmJhY2soKS52aWRlb19jb25maWc7Ci0KLSAgLy8gRG8gbm90IGhhdmUgYWxsIHRoZSBjb25maWdzLCBuZWVkIG1vcmUgZGF0YS4KLSAgaWYgKHNlbGVjdGVkX2F1ZGlvX3BpZF8gPj0gMCAmJiAhbGFzdF9hdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKQotICAgIHJldHVybiB0cnVlOwotICBpZiAoc2VsZWN0ZWRfdmlkZW9fcGlkXyA+PSAwICYmICFsYXN0X3ZpZGVvX2NvbmZpZy5Jc1ZhbGlkQ29uZmlnKCkpCi0gICAgcmV0dXJuIHRydWU7Ci0KLSAgLy8gQnVmZmVyIGVtaXNzaW9uLgotICB3aGlsZSAoIWJ1ZmZlcl9xdWV1ZV9jaGFpbl8uZW1wdHkoKSkgewotICAgIC8vIFN0YXJ0IGEgc2VnbWVudCBpZiBuZWVkZWQuCi0gICAgaWYgKCFzZWdtZW50X3N0YXJ0ZWRfKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiU3RhcnRpbmcgYSBuZXcgc2VnbWVudCI7Ci0gICAgICBzZWdtZW50X3N0YXJ0ZWRfID0gdHJ1ZTsKLSAgICAgIG5ld19zZWdtZW50X2NiXy5SdW4oKTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGF1ZGlvIGFuZCB2aWRlbyBjb25maWcgaWYgbmVlZGVkLgotICAgIEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyYgcXVldWVfd2l0aF9jb25maWcgPSBidWZmZXJfcXVldWVfY2hhaW5fLmZyb250KCk7Ci0gICAgaWYgKCFxdWV1ZV93aXRoX2NvbmZpZy5pc19jb25maWdfc2VudCkgewotICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiBtZWRpYV90cmFja3MgPSBHZW5lcmF0ZU1lZGlhVHJhY2tJbmZvKAotICAgICAgICAgIHF1ZXVlX3dpdGhfY29uZmlnLmF1ZGlvX2NvbmZpZywgcXVldWVfd2l0aF9jb25maWcudmlkZW9fY29uZmlnKTsKLSAgICAgIGlmICghY29uZmlnX2NiXy5SdW4oc3RkOjptb3ZlKG1lZGlhX3RyYWNrcyksIFRleHRUcmFja0NvbmZpZ01hcCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgcXVldWVfd2l0aF9jb25maWcuaXNfY29uZmlnX3NlbnQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIEFkZCBidWZmZXJzLgotICAgIEJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcl9xdWV1ZV9tYXA7Ci0gICAgaWYgKCFxdWV1ZV93aXRoX2NvbmZpZy5hdWRpb19xdWV1ZS5lbXB0eSgpKQotICAgICAgYnVmZmVyX3F1ZXVlX21hcC5pbnNlcnQoCi0gICAgICAgICAgc3RkOjptYWtlX3BhaXIoa01wMnRBdWRpb1RyYWNrSWQsIHF1ZXVlX3dpdGhfY29uZmlnLmF1ZGlvX3F1ZXVlKSk7Ci0gICAgaWYgKCFxdWV1ZV93aXRoX2NvbmZpZy52aWRlb19xdWV1ZS5lbXB0eSgpKQotICAgICAgYnVmZmVyX3F1ZXVlX21hcC5pbnNlcnQoCi0gICAgICAgICAgc3RkOjptYWtlX3BhaXIoa01wMnRWaWRlb1RyYWNrSWQsIHF1ZXVlX3dpdGhfY29uZmlnLnZpZGVvX3F1ZXVlKSk7Ci0KLSAgICBpZiAoIWJ1ZmZlcl9xdWV1ZV9tYXAuZW1wdHkoKSAmJiAhbmV3X2J1ZmZlcnNfY2JfLlJ1bihidWZmZXJfcXVldWVfbWFwKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJ1ZmZlcl9xdWV1ZV9jaGFpbl8ucG9wX2Zyb250KCk7Ci0gIH0KLQotICAvLyBQdXNoIGFuIGVtcHR5IHF1ZXVlIHdpdGggdGhlIGxhc3QgYXVkaW8vdmlkZW8gY29uZmlnCi0gIC8vIHNvIHRoYXQgYnVmZmVycyB3aXRoIHRoZSBzYW1lIGNvbmZpZyBjYW4gYmUgYWRkZWQgbGF0ZXIgb24uCi0gIEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyBxdWV1ZV93aXRoX2NvbmZpZyh0cnVlLCBsYXN0X2F1ZGlvX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdmlkZW9fY29uZmlnKTsKLSAgYnVmZmVyX3F1ZXVlX2NoYWluXy5wdXNoX2JhY2socXVldWVfd2l0aF9jb25maWcpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X3N0cmVhbV9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3YThhMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX01QMlRfU1RSRUFNX1BBUlNFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX01QMlRfU1RSRUFNX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdGltZXN0YW1wX3Vucm9sbGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgU3RyZWFtUGFyc2VyQnVmZmVyOwotCi1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIFBpZFN0YXRlOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgTXAydFN0cmVhbVBhcnNlciA6IHB1YmxpYyBTdHJlYW1QYXJzZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTXAydFN0cmVhbVBhcnNlcihib29sIHNicl9pbl9taW1ldHlwZSk7Ci0gIH5NcDJ0U3RyZWFtUGFyc2VyKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gU3RyZWFtUGFyc2VyIGltcGxlbWVudGF0aW9uLgotICB2b2lkIEluaXQoY29uc3QgSW5pdENCJiBpbml0X2NiLCBjb25zdCBOZXdDb25maWdDQiYgY29uZmlnX2NiLAotICAgICAgICAgICAgY29uc3QgTmV3QnVmZmVyc0NCJiBuZXdfYnVmZmVyc19jYiwgYm9vbCBpZ25vcmVfdGV4dF90cmFja3MsCi0gICAgICAgICAgICBjb25zdCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgICAgICAgICBjb25zdCBOZXdNZWRpYVNlZ21lbnRDQiYgbmV3X3NlZ21lbnRfY2IsCi0gICAgICAgICAgICBjb25zdCBFbmRNZWRpYVNlZ21lbnRDQiYgZW5kX29mX3NlZ21lbnRfY2IsCi0gICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSBvdmVycmlkZTsKLSAgdm9pZCBGbHVzaCgpIG92ZXJyaWRlOwotICBib29sIFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgc3RydWN0IEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyB7Ci0gICAgQnVmZmVyUXVldWVXaXRoQ29uZmlnKGJvb2wgaXNfY2ZnX3NlbnQsIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY2ZnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NmZyk7Ci0gICAgQnVmZmVyUXVldWVXaXRoQ29uZmlnKGNvbnN0IEJ1ZmZlclF1ZXVlV2l0aENvbmZpZyYgb3RoZXIpOwotICAgIH5CdWZmZXJRdWV1ZVdpdGhDb25maWcoKTsKLQotICAgIGJvb2wgaXNfY29uZmlnX3NlbnQ7Ci0gICAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2NvbmZpZzsKLSAgICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlIGF1ZGlvX3F1ZXVlOwotICAgIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19jb25maWc7Ci0gICAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSB2aWRlb19xdWV1ZTsKLSAgfTsKLQotICAvLyBDYWxsYmFjayBpbnZva2VkIHRvIHJlZ2lzdGVyIGEgUHJvZ3JhbSBNYXAgVGFibGUuCi0gIC8vIE5vdGU6IERvZXMgbm90aGluZyBpZiB0aGUgUElEIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4KLSAgdm9pZCBSZWdpc3RlclBtdChpbnQgcHJvZ3JhbV9udW1iZXIsIGludCBwbXRfcGlkKTsKLQotICAvLyBDYWxsYmFjayBpbnZva2VkIHRvIHJlZ2lzdGVyIGEgUEVTIHBpZC4KLSAgLy8gUG9zc2libGUgdmFsdWVzIGZvciB8c3RyZWFtX3R5cGV8IGFyZSBkZWZpbmVkIGluOgotICAvLyBJU08tMTM4MTguMSAvIElUVSBILjIyMiBUYWJsZSAyLjM0ICJTdHJlYW0gdHlwZSBhc3NpZ25tZW50cyIuCi0gIC8vIHxwZXNfcGlkfCBpcyBwYXJ0IG9mIHRoZSBQcm9ncmFtIE1hcCBUYWJsZSByZWZlcnJlZCBieSB8cG10X3BpZHwuCi0gIHZvaWQgUmVnaXN0ZXJQZXMoaW50IHBtdF9waWQsIGludCBwZXNfcGlkLCBpbnQgc3RyZWFtX3R5cGUpOwotCi0gIC8vIFNpbmNlIHRoZSBTdHJlYW1QYXJzZXIgaW50ZXJmYWNlIGFsbG93cyBvbmx5IG9uZSBhdWRpbyAmIHZpZGVvIHN0cmVhbXMsCi0gIC8vIGFuIGF1dG9tYXRpYyBQSUQgZmlsdGVyaW5nIHNob3VsZCBiZSBhcHBsaWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gJiB2aWRlbwotICAvLyBzdHJlYW1zLgotICB2b2lkIFVwZGF0ZVBpZEZpbHRlcigpOwotCi0gIC8vIENhbGxiYWNrIGludm9rZWQgZWFjaCB0aW1lIHRoZSBhdWRpby92aWRlbyBkZWNvZGVyIGNvbmZpZ3VyYXRpb24gaXMKLSAgLy8gY2hhbmdlZC4KLSAgdm9pZCBPblZpZGVvQ29uZmlnQ2hhbmdlZChpbnQgcGVzX3BpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2RlY29kZXJfY29uZmlnKTsKLSAgdm9pZCBPbkF1ZGlvQ29uZmlnQ2hhbmdlZChpbnQgcGVzX3BpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2RlY29kZXJfY29uZmlnKTsKLQotICAvLyBJbnZva2UgdGhlIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrIGlmIG5lZWRlZC4KLSAgYm9vbCBGaW5pc2hJbml0aWFsaXphdGlvbklmTmVlZGVkKCk7Ci0KLSAgLy8gQ2FsbGJhY2sgaW52b2tlZCBieSB0aGUgRVMgc3RyZWFtIHBhcnNlcgotICAvLyB0byBlbWl0IGEgbmV3IGF1ZGlvL3ZpZGVvIGFjY2VzcyB1bml0LgotICB2b2lkIE9uRW1pdEF1ZGlvQnVmZmVyKAotICAgICAgaW50IHBlc19waWQsIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBzdHJlYW1fcGFyc2VyX2J1ZmZlcik7Ci0gIHZvaWQgT25FbWl0VmlkZW9CdWZmZXIoCi0gICAgICBpbnQgcGVzX3BpZCwgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IHN0cmVhbV9wYXJzZXJfYnVmZmVyKTsKLSAgYm9vbCBFbWl0UmVtYWluaW5nQnVmZmVycygpOwotCi0gIC8vIExpc3Qgb2YgY2FsbGJhY2tzLgotICBJbml0Q0IgaW5pdF9jYl87Ci0gIE5ld0NvbmZpZ0NCIGNvbmZpZ19jYl87Ci0gIE5ld0J1ZmZlcnNDQiBuZXdfYnVmZmVyc19jYl87Ci0gIEVuY3J5cHRlZE1lZGlhSW5pdERhdGFDQiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiXzsKLSAgTmV3TWVkaWFTZWdtZW50Q0IgbmV3X3NlZ21lbnRfY2JfOwotICBFbmRNZWRpYVNlZ21lbnRDQiBlbmRfb2Zfc2VnbWVudF9jYl87Ci0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgLy8gVHJ1ZSB3aGVuIEFBQyBTQlIgZXh0ZW5zaW9uIGlzIHNpZ25hbGxlZCBpbiB0aGUgbWltZXR5cGUKLSAgLy8gKG1wNGEuNDAuNSBpbiB0aGUgY29kZWNzIHBhcmFtZXRlcikuCi0gIGJvb2wgc2JyX2luX21pbWV0eXBlXzsKLQotICAvLyBCeXRlcyBvZiB0aGUgVFMgc3RyZWFtLgotICBCeXRlUXVldWUgdHNfYnl0ZV9xdWV1ZV87Ci0KLSAgLy8gTGlzdCBvZiBQSURzIGFuZCB0aGVpciBzdGF0ZS4KLSAgc3RkOjptYXA8aW50LCBzdGQ6OnVuaXF1ZV9wdHI8UGlkU3RhdGU+PiBwaWRzXzsKLQotICAvLyBTZWxlY3RlZCBhdWRpbyBhbmQgdmlkZW8gUElEcy4KLSAgaW50IHNlbGVjdGVkX2F1ZGlvX3BpZF87Ci0gIGludCBzZWxlY3RlZF92aWRlb19waWRfOwotCi0gIC8vIFBlbmRpbmcgYXVkaW8gJiB2aWRlbyBidWZmZXJzLgotICBzdGQ6Omxpc3Q8QnVmZmVyUXVldWVXaXRoQ29uZmlnPiBidWZmZXJfcXVldWVfY2hhaW5fOwotCi0gIC8vIFdoZXRoZXIgfGluaXRfY2JffCBoYXMgYmVlbiBpbnZva2VkLgotICBib29sIGlzX2luaXRpYWxpemVkXzsKLQotICAvLyBJbmRpY2F0ZSB3aGV0aGVyIGEgc2VnbWVudCB3YXMgc3RhcnRlZC4KLSAgYm9vbCBzZWdtZW50X3N0YXJ0ZWRfOwotCi0gIC8vIFRpbWVzdGFtcCB1bnJvbGxlci4KLSAgLy8gVGltZXN0YW1wcyBpbiBQRVMgcGFja2V0cyBtdXN0IGJlIHVucm9sbGVkIHVzaW5nIHRoZSBzYW1lIG9mZnNldC4KLSAgLy8gU28gdGhlIHVucm9sbGVyIGlzIGdsb2JhbCBiZXR3ZWVuIFBFUyBwaWRzLgotICBUaW1lc3RhbXBVbnJvbGxlciB0aW1lc3RhbXBfdW5yb2xsZXJfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihNcDJ0U3RyZWFtUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX01QMlRfU1RSRUFNX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJmMzhhNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L21wMnRfc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1uYW1lc3BhY2UgewotCi1ib29sIElzTW9ub3RvbmljKGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUmIGJ1ZmZlcnMpIHsKLSAgaWYgKGJ1ZmZlcnMuZW1wdHkoKSkgcmV0dXJuIHRydWU7Ci0KLSAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3IgaXQxID0gYnVmZmVycy5iZWdpbigpOwotICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlOjpjb25zdF9pdGVyYXRvciBpdDIgPSArK2l0MTsKLSAgZm9yICg7IGl0MiAhPSBidWZmZXJzLmVuZCgpOyArK2l0MSwgKytpdDIpIHsKLSAgICBpZiAoKCppdDIpLT5HZXREZWNvZGVUaW1lc3RhbXAoKSA8ICgqaXQxKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSXNBbG1vc3RFcXVhbChEZWNvZGVUaW1lc3RhbXAgdDAsIERlY29kZVRpbWVzdGFtcCB0MSkgewotICBiYXNlOjpUaW1lRGVsdGEga01heERldmlhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg1KTsKLSAgYmFzZTo6VGltZURlbHRhIGRpZmYgPSB0MSAtIHQwOwotICByZXR1cm4gKGRpZmYgPj0gLWtNYXhEZXZpYXRpb24gJiYgZGlmZiA8PSBrTWF4RGV2aWF0aW9uKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLWNsYXNzIE1wMnRTdHJlYW1QYXJzZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgTXAydFN0cmVhbVBhcnNlclRlc3QoKQotICAgICAgOiBzZWdtZW50X2NvdW50XygwKSwKLSAgICAgICAgY29uZmlnX2NvdW50XygwKSwKLSAgICAgICAgYXVkaW9fZnJhbWVfY291bnRfKDApLAotICAgICAgICB2aWRlb19mcmFtZV9jb3VudF8oMCksCi0gICAgICAgIGhhc192aWRlb18odHJ1ZSksCi0gICAgICAgIGF1ZGlvX21pbl9kdHNfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKLSAgICAgICAgYXVkaW9fbWF4X2R0c18oa05vRGVjb2RlVGltZXN0YW1wKCkpLAotICAgICAgICB2aWRlb19taW5fZHRzXyhrTm9EZWNvZGVUaW1lc3RhbXAoKSksCi0gICAgICAgIHZpZGVvX21heF9kdHNfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSB7Ci0gICAgYm9vbCBoYXNfc2JyID0gZmFsc2U7Ci0gICAgcGFyc2VyXy5yZXNldChuZXcgTXAydFN0cmVhbVBhcnNlcihoYXNfc2JyKSk7Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgc3RkOjp1bmlxdWVfcHRyPE1wMnRTdHJlYW1QYXJzZXI+IHBhcnNlcl87Ci0gIGludCBzZWdtZW50X2NvdW50XzsKLSAgaW50IGNvbmZpZ19jb3VudF87Ci0gIGludCBhdWRpb19mcmFtZV9jb3VudF87Ci0gIGludCB2aWRlb19mcmFtZV9jb3VudF87Ci0gIGJvb2wgaGFzX3ZpZGVvXzsKLSAgRGVjb2RlVGltZXN0YW1wIGF1ZGlvX21pbl9kdHNfOwotICBEZWNvZGVUaW1lc3RhbXAgYXVkaW9fbWF4X2R0c187Ci0gIERlY29kZVRpbWVzdGFtcCB2aWRlb19taW5fZHRzXzsKLSAgRGVjb2RlVGltZXN0YW1wIHZpZGVvX21heF9kdHNfOwotICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgYXVkaW9fdHJhY2tfaWRfOwotICBTdHJlYW1QYXJzZXI6OlRyYWNrSWQgdmlkZW9fdHJhY2tfaWRfOwotCi0gIHZvaWQgUmVzZXRTdGF0cygpIHsKLSAgICBzZWdtZW50X2NvdW50XyA9IDA7Ci0gICAgY29uZmlnX2NvdW50XyA9IDA7Ci0gICAgYXVkaW9fZnJhbWVfY291bnRfID0gMDsKLSAgICB2aWRlb19mcmFtZV9jb3VudF8gPSAwOwotICAgIGF1ZGlvX21pbl9kdHNfID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0gICAgYXVkaW9fbWF4X2R0c18gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgICB2aWRlb19taW5fZHRzXyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotICAgIHZpZGVvX21heF9kdHNfID0ga05vRGVjb2RlVGltZXN0YW1wKCk7Ci0gIH0KLQotICBib29sIEFwcGVuZERhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgewotICAgIHJldHVybiBwYXJzZXJfLT5QYXJzZShkYXRhLCBsZW5ndGgpOwotICB9Ci0KLSAgYm9vbCBBcHBlbmREYXRhSW5QaWVjZXMoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBpZWNlX3NpemUpIHsKLSAgICBjb25zdCB1aW50OF90KiBzdGFydCA9IGRhdGE7Ci0gICAgY29uc3QgdWludDhfdCogZW5kID0gZGF0YSArIGxlbmd0aDsKLSAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgIHNpemVfdCBhcHBlbmRfc2l6ZSA9Ci0gICAgICAgICAgc3RkOjptaW4ocGllY2Vfc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBzdGFydCkpOwotICAgICAgaWYgKCFBcHBlbmREYXRhKHN0YXJ0LCBhcHBlbmRfc2l6ZSkpIHJldHVybiBmYWxzZTsKLSAgICAgIHN0YXJ0ICs9IGFwcGVuZF9zaXplOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgT25Jbml0KGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMmIHBhcmFtcykgewotICAgIERWTE9HKDEpIDw8ICJPbkluaXQ6IGR1cj0iIDw8IHBhcmFtcy5kdXJhdGlvbi5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICAgICAgICAgPDwgIiwgYXV0b1RpbWVzdGFtcE9mZnNldD0iIDw8IHBhcmFtcy5hdXRvX3VwZGF0ZV90aW1lc3RhbXBfb2Zmc2V0OwotICB9Ci0KLSAgYm9vbCBPbk5ld0NvbmZpZyhzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJlYW1QYXJzZXI6OlRleHRUcmFja0NvbmZpZ01hcCYgdGMpIHsKLSAgICBEVkxPRygxKSA8PCAiT25OZXdDb25maWc6IGdvdCAiIDw8IHRyYWNrcy0+dHJhY2tzKCkuc2l6ZSgpIDw8ICIgdHJhY2tzIjsKLSAgICBib29sIGZvdW5kX2F1ZGlvX3RyYWNrID0gZmFsc2U7Ci0gICAgYm9vbCBmb3VuZF92aWRlb190cmFjayA9IGZhbHNlOwotICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2sgOiB0cmFja3MtPnRyYWNrcygpKSB7Ci0gICAgICBjb25zdCBhdXRvJiB0cmFja19pZCA9IHRyYWNrLT5ieXRlc3RyZWFtX3RyYWNrX2lkKCk7Ci0gICAgICBpZiAodHJhY2stPnR5cGUoKSA9PSBNZWRpYVRyYWNrOjpBdWRpbykgewotICAgICAgICBhdWRpb190cmFja19pZF8gPSB0cmFja19pZDsKLSAgICAgICAgZm91bmRfYXVkaW9fdHJhY2sgPSB0cnVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh0cmFja3MtPmdldEF1ZGlvQ29uZmlnKHRyYWNrX2lkKS5Jc1ZhbGlkQ29uZmlnKCkpOwotICAgICAgfSBlbHNlIGlmICh0cmFjay0+dHlwZSgpID09IE1lZGlhVHJhY2s6OlZpZGVvKSB7Ci0gICAgICAgIHZpZGVvX3RyYWNrX2lkXyA9IHRyYWNrX2lkOwotICAgICAgICBmb3VuZF92aWRlb190cmFjayA9IHRydWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHRyYWNrcy0+Z2V0VmlkZW9Db25maWcodHJhY2tfaWQpLklzVmFsaWRDb25maWcoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBVbmV4cGVjdGVkIHRyYWNrIHR5cGUuCi0gICAgICAgIExPRyhFUlJPUikgPDwgIlVuZXhwZWN0ZWQgdHJhY2sgdHlwZSAiIDw8IHRyYWNrLT50eXBlKCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGZhbHNlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgRVhQRUNUX1RSVUUoZm91bmRfYXVkaW9fdHJhY2spOwotICAgIEVYUEVDVF9FUShoYXNfdmlkZW9fLCBmb3VuZF92aWRlb190cmFjayk7Ci0gICAgY29uZmlnX2NvdW50XysrOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgYm9vbCBPbk5ld0J1ZmZlcnMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCkgewotICAgIEVYUEVDVF9HVChjb25maWdfY291bnRfLCAwKTsKLSAgICAvLyBFbnN1cmUgdGhhdCB0cmFjayBpZHMgYXJlIHByb3Blcmx5IGFzc2lnbmVkIG9uIGFsbCBlbWl0dGVkIGJ1ZmZlcnMuCi0gICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGJ1ZmZlcl9xdWV1ZV9tYXApIHsKLSAgICAgIERWTE9HKDMpIDw8ICJCdWZmZXJzIGZvciB0cmFja19pZD0iIDw8IGl0LmZpcnN0OwotICAgICAgZm9yIChjb25zdCBhdXRvJiBidWYgOiBpdC5zZWNvbmQpIHsKLSAgICAgICAgRFZMT0coMykgPDwgIiAgdHJhY2tfaWQ9IiA8PCBidWYtPnRyYWNrX2lkKCkKLSAgICAgICAgICAgICAgICAgPDwgIiwgc2l6ZT0iIDw8IGJ1Zi0+ZGF0YV9zaXplKCkKLSAgICAgICAgICAgICAgICAgPDwgIiwgcHRzPSIgPDwgYnVmLT50aW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgICAgICAgPDwgIiwgZHRzPSIgPDwgYnVmLT5HZXREZWNvZGVUaW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgICAgICAgPDwgIiwgZHVyPSIgPDwgYnVmLT5kdXJhdGlvbigpLkluU2Vjb25kc0YoKTsKLSAgICAgICAgRVhQRUNUX0VRKGl0LmZpcnN0LCBidWYtPnRyYWNrX2lkKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWUgZW1wdHlfYnVmZmVyczsKLSAgICBjb25zdCBhdXRvJiBpdHJfYXVkaW8gPSBidWZmZXJfcXVldWVfbWFwLmZpbmQoYXVkaW9fdHJhY2tfaWRfKTsKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlJiBhdWRpb19idWZmZXJzID0KLSAgICAgICAgKGl0cl9hdWRpbyA9PSBidWZmZXJfcXVldWVfbWFwLmVuZCgpKSA/IGVtcHR5X2J1ZmZlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0cl9hdWRpby0+c2Vjb25kOwotCi0gICAgY29uc3QgYXV0byYgaXRyX3ZpZGVvID0gYnVmZmVyX3F1ZXVlX21hcC5maW5kKHZpZGVvX3RyYWNrX2lkXyk7Ci0gICAgY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSYgdmlkZW9fYnVmZmVycyA9Ci0gICAgICAgIChpdHJfdmlkZW8gPT0gYnVmZmVyX3F1ZXVlX21hcC5lbmQoKSkgPyBlbXB0eV9idWZmZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdHJfdmlkZW8tPnNlY29uZDsKLQotICAgIC8vIFZlcmlmeSBtb25vdG9uaWNpdHkuCi0gICAgaWYgKCFJc01vbm90b25pYyh2aWRlb19idWZmZXJzKSkgcmV0dXJuIGZhbHNlOwotICAgIGlmICghSXNNb25vdG9uaWMoYXVkaW9fYnVmZmVycykpIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmlkZW9fYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgICBEZWNvZGVUaW1lc3RhbXAgZmlyc3RfZHRzID0gdmlkZW9fYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICAgIERlY29kZVRpbWVzdGFtcCBsYXN0X2R0cyA9IHZpZGVvX2J1ZmZlcnMuYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICAgIGlmICh2aWRlb19tYXhfZHRzXyAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSAmJiBmaXJzdF9kdHMgPCB2aWRlb19tYXhfZHRzXykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKHZpZGVvX21pbl9kdHNfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKSB2aWRlb19taW5fZHRzXyA9IGZpcnN0X2R0czsKLSAgICAgIHZpZGVvX21heF9kdHNfID0gbGFzdF9kdHM7Ci0gICAgfQotICAgIGlmICghYXVkaW9fYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgICBEZWNvZGVUaW1lc3RhbXAgZmlyc3RfZHRzID0gYXVkaW9fYnVmZmVycy5mcm9udCgpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICAgIERlY29kZVRpbWVzdGFtcCBsYXN0X2R0cyA9IGF1ZGlvX2J1ZmZlcnMuYmFjaygpLT5HZXREZWNvZGVUaW1lc3RhbXAoKTsKLSAgICAgIGlmIChhdWRpb19tYXhfZHRzXyAhPSBrTm9EZWNvZGVUaW1lc3RhbXAoKSAmJiBmaXJzdF9kdHMgPCBhdWRpb19tYXhfZHRzXykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgaWYgKGF1ZGlvX21pbl9kdHNfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKSBhdWRpb19taW5fZHRzXyA9IGZpcnN0X2R0czsKLSAgICAgIGF1ZGlvX21heF9kdHNfID0gbGFzdF9kdHM7Ci0gICAgfQotCi0gICAgYXVkaW9fZnJhbWVfY291bnRfICs9IGF1ZGlvX2J1ZmZlcnMuc2l6ZSgpOwotICAgIHZpZGVvX2ZyYW1lX2NvdW50XyArPSB2aWRlb19idWZmZXJzLnNpemUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgT25LZXlOZWVkZWQoRW1lSW5pdERhdGFUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluaXRfZGF0YSkgewotICAgIExPRyhFUlJPUikgPDwgIk9uS2V5TmVlZGVkIG5vdCBleHBlY3RlZCBpbiB0aGUgTXBlZzIgVFMgcGFyc2VyIjsKLSAgICBFWFBFQ1RfVFJVRShmYWxzZSk7Ci0gIH0KLQotICB2b2lkIE9uTmV3U2VnbWVudCgpIHsKLSAgICBEVkxPRygxKSA8PCAiT25OZXdTZWdtZW50IjsKLSAgICBzZWdtZW50X2NvdW50XysrOwotICB9Ci0KLSAgdm9pZCBPbkVuZE9mU2VnbWVudCgpIHsKLSAgICBMT0coRVJST1IpIDw8ICJPbkVuZE9mU2VnbWVudCBub3QgZXhwZWN0ZWQgaW4gdGhlIE1wZWcyIFRTIHBhcnNlciI7Ci0gICAgRVhQRUNUX1RSVUUoZmFsc2UpOwotICB9Ci0KLSAgdm9pZCBJbml0aWFsaXplUGFyc2VyKCkgewotICAgIHBhcnNlcl8tPkluaXQoCi0gICAgICAgIGJhc2U6OkJpbmQoJk1wMnRTdHJlYW1QYXJzZXJUZXN0OjpPbkluaXQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgICBiYXNlOjpCaW5kKCZNcDJ0U3RyZWFtUGFyc2VyVGVzdDo6T25OZXdDb25maWcsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgICBiYXNlOjpCaW5kKCZNcDJ0U3RyZWFtUGFyc2VyVGVzdDo6T25OZXdCdWZmZXJzLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgdHJ1ZSwKLSAgICAgICAgYmFzZTo6QmluZCgmTXAydFN0cmVhbVBhcnNlclRlc3Q6Ok9uS2V5TmVlZGVkLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgYmFzZTo6QmluZCgmTXAydFN0cmVhbVBhcnNlclRlc3Q6Ok9uTmV3U2VnbWVudCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIGJhc2U6OkJpbmQoJk1wMnRTdHJlYW1QYXJzZXJUZXN0OjpPbkVuZE9mU2VnbWVudCwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgbmV3IE1lZGlhTG9nKCkpOwotICB9Ci0KLSAgYm9vbCBQYXJzZU1wZWcyVHNGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwgaW50IGFwcGVuZF9ieXRlcykgewotICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gUmVhZFRlc3REYXRhRmlsZShmaWxlbmFtZSk7Ci0gICAgRVhQRUNUX1RSVUUoCi0gICAgICAgIEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSwgYXBwZW5kX2J5dGVzKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX07Ci0KLVRFU1RfRihNcDJ0U3RyZWFtUGFyc2VyVGVzdCwgVW5hbGlnbmVkQXBwZW5kMTcpIHsKLSAgLy8gVGVzdCBzbWFsbCwgbm9uLXNlZ21lbnQtYWxpZ25lZCBhcHBlbmRzLgotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIFBhcnNlTXBlZzJUc0ZpbGUoImJlYXItMTI4MHg3MjAudHMiLCAxNyk7Ci0gIHBhcnNlcl8tPkZsdXNoKCk7Ci0gIEVYUEVDVF9FUSh2aWRlb19mcmFtZV9jb3VudF8sIDgyKTsKLSAgLy8gVGhpcyBzdHJlYW0gaGFzIG5vIG1pZC1zdHJlYW0gY29uZmlndXJhdGlvbiBjaGFuZ2UuCi0gIEVYUEVDVF9FUShjb25maWdfY291bnRfLCAxKTsKLSAgRVhQRUNUX0VRKHNlZ21lbnRfY291bnRfLCAxKTsKLX0KLQotVEVTVF9GKE1wMnRTdHJlYW1QYXJzZXJUZXN0LCBVbmFsaWduZWRBcHBlbmQ1MTIpIHsKLSAgLy8gVGVzdCBzbWFsbCwgbm9uLXNlZ21lbnQtYWxpZ25lZCBhcHBlbmRzLgotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIFBhcnNlTXBlZzJUc0ZpbGUoImJlYXItMTI4MHg3MjAudHMiLCA1MTIpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfRVEodmlkZW9fZnJhbWVfY291bnRfLCA4Mik7Ci0gIC8vIFRoaXMgc3RyZWFtIGhhcyBubyBtaWQtc3RyZWFtIGNvbmZpZ3VyYXRpb24gY2hhbmdlLgotICBFWFBFQ1RfRVEoY29uZmlnX2NvdW50XywgMSk7Ci0gIEVYUEVDVF9FUShzZWdtZW50X2NvdW50XywgMSk7Ci19Ci0KLVRFU1RfRihNcDJ0U3RyZWFtUGFyc2VyVGVzdCwgQXBwZW5kQWZ0ZXJGbHVzaDUxMikgewotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIFBhcnNlTXBlZzJUc0ZpbGUoImJlYXItMTI4MHg3MjAudHMiLCA1MTIpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfRVEodmlkZW9fZnJhbWVfY291bnRfLCA4Mik7Ci0gIEVYUEVDVF9FUShjb25maWdfY291bnRfLCAxKTsKLSAgRVhQRUNUX0VRKHNlZ21lbnRfY291bnRfLCAxKTsKLQotICBSZXNldFN0YXRzKCk7Ci0gIFBhcnNlTXBlZzJUc0ZpbGUoImJlYXItMTI4MHg3MjAudHMiLCA1MTIpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfRVEodmlkZW9fZnJhbWVfY291bnRfLCA4Mik7Ci0gIEVYUEVDVF9FUShjb25maWdfY291bnRfLCAxKTsKLSAgRVhQRUNUX0VRKHNlZ21lbnRfY291bnRfLCAxKTsKLX0KLQotVEVTVF9GKE1wMnRTdHJlYW1QYXJzZXJUZXN0LCBUaW1lc3RhbXBXcmFwQXJvdW5kKSB7Ci0gIC8vICJiZWFyLTEyODB4NzIwX3B0c3dyYXBhcm91bmQudHMiIGhhcyBiZWVuIHRyYW5zY29kZWQKLSAgLy8gZnJvbSBiZWFyLTEyODB4NzIwLm1wNCBieSBhcHBseWluZyBhIHRpbWUgb2Zmc2V0IG9mIDk1NDQycwotICAvLyAoY2xvc2UgdG8gMl4zMyAvIDkwMDAwKSB3aGljaCByZXN1bHRzIGluIHRpbWVzdGFtcHMgd3JhcCBhcm91bmQKLSAgLy8gaW4gdGhlIE1wZWcyIFRTIHN0cmVhbS4KLSAgSW5pdGlhbGl6ZVBhcnNlcigpOwotICBQYXJzZU1wZWcyVHNGaWxlKCJiZWFyLTEyODB4NzIwX3B0c3dyYXBhcm91bmQudHMiLCA1MTIpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfRVEodmlkZW9fZnJhbWVfY291bnRfLCA4Mik7Ci0KLSAgRVhQRUNUX1RSVUUoCi0gICAgICBJc0FsbW9zdEVxdWFsKHZpZGVvX21pbl9kdHNfLCBEZWNvZGVUaW1lc3RhbXA6OkZyb21TZWNvbmRzRCg5NTQ0My4zNzYpKSk7Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgSXNBbG1vc3RFcXVhbCh2aWRlb19tYXhfZHRzXywgRGVjb2RlVGltZXN0YW1wOjpGcm9tU2Vjb25kc0QoOTU0NDYuMDc5KSkpOwotCi0gIC8vIE5vdGU6IGZvciBhdWRpbywgQWR0c1N0cmVhbVBhcnNlciBjb25zaWRlcnMgb25seSB0aGUgUFRTICh3aGljaCBpcyB0aGVuCi0gIC8vIHVzZWQgYXMgdGhlIERUUykuCi0gIC8vIFRPRE8oZGFtaWVudik6IG1vc3Qgb2YgdGhlIHRpbWUsIGF1ZGlvIHN0cmVhbXMganVzdCBoYXZlIFBUUy4gSGVyZSwgb25seQotICAvLyB0aGUgZmlyc3QgUEVTIHBhY2tldCBoYXMgYSBEVFMsIGFsbCB0aGUgb3RoZXIgUEVTIHBhY2tldHMgaGF2ZSBQVFMgb25seS4KLSAgLy8gUmVjb25zaWRlciB0aGUgZXhwZWN0ZWQgdmFsdWUgZm9yIHxhdWRpb19taW5fZHRzX3wgaWYgRFRTIGFyZSB1c2VkIGFzIHBhcnQKLSAgLy8gb2YgdGhlIEFEVFMgc3RyZWFtIHBhcnNlci4KLSAgLy8KLSAgLy8gTm90ZTogdGhlIGxhc3QgcHRzIGZvciBhdWRpbyBpcyA5NTQ0NS45MzEgYnV0IHRoaXMgUEVTIHBhY2tldCBpbmNsdWRlcwotICAvLyA5IEFEVFMgZnJhbWVzIHdpdGggMSBBQUMgZnJhbWUgaW4gZWFjaCBBRFRTIGZyYW1lLgotICAvLyBTbyB0aGUgUFRTIG9mIHRoZSBsYXN0IEFBQyBmcmFtZSBpczoKLSAgLy8gOTU0NDUuOTMxICsgOCAqICgxMDI0IC8gNDQxMDApID0gOTU0NDYuMTE3Ci0gIEVYUEVDVF9UUlVFKAotICAgICAgSXNBbG1vc3RFcXVhbChhdWRpb19taW5fZHRzXywgRGVjb2RlVGltZXN0YW1wOjpGcm9tU2Vjb25kc0QoOTU0NDMuNDAwKSkpOwotICBFWFBFQ1RfVFJVRSgKLSAgICAgIElzQWxtb3N0RXF1YWwoYXVkaW9fbWF4X2R0c18sIERlY29kZVRpbWVzdGFtcDo6RnJvbVNlY29uZHNEKDk1NDQ2LjExNykpKTsKLX0KLQotVEVTVF9GKE1wMnRTdHJlYW1QYXJzZXJUZXN0LCBBdWRpb0luUHJpdmF0ZVN0cmVhbTEpIHsKLSAgLy8gVGVzdCBzbWFsbCwgbm9uLXNlZ21lbnQtYWxpZ25lZCBhcHBlbmRzLgotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIGhhc192aWRlb18gPSBmYWxzZTsKLSAgUGFyc2VNcGVnMlRzRmlsZSgiYmVhcl9hZHRzX2luX3ByaXZhdGVfc3RyZWFtXzEudHMiLCA1MTIpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfRVEoYXVkaW9fZnJhbWVfY291bnRfLCA0MCk7Ci0gIEVYUEVDVF9FUSh2aWRlb19mcmFtZV9jb3VudF8sIDApOwotICAvLyBUaGlzIHN0cmVhbSBoYXMgbm8gbWlkLXN0cmVhbSBjb25maWd1cmF0aW9uIGNoYW5nZS4KLSAgRVhQRUNUX0VRKGNvbmZpZ19jb3VudF8sIDEpOwotICBFWFBFQ1RfRVEoc2VnbWVudF9jb3VudF8sIDEpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RpbWVzdGFtcF91bnJvbGxlci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdGltZXN0YW1wX3Vucm9sbGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmYyMGY4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdGltZXN0YW1wX3Vucm9sbGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90aW1lc3RhbXBfdW5yb2xsZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLVRpbWVzdGFtcFVucm9sbGVyOjpUaW1lc3RhbXBVbnJvbGxlcigpCi0gICAgOiBpc19wcmV2aW91c190aW1lc3RhbXBfdmFsaWRfKGZhbHNlKSwgcHJldmlvdXNfdW5yb2xsZWRfdGltZXN0YW1wXygwKSB7fQotCi1UaW1lc3RhbXBVbnJvbGxlcjo6flRpbWVzdGFtcFVucm9sbGVyKCkge30KLQotaW50NjRfdCBUaW1lc3RhbXBVbnJvbGxlcjo6R2V0VW5yb2xsZWRUaW1lc3RhbXAoaW50NjRfdCB0aW1lc3RhbXApIHsKLSAgLy8gTXBlZzIgVFMgdGltZXN0YW1wcyBoYXZlIGFuIGFjY3VyYWN5IG9mIDMzIGJpdHMuCi0gIGNvbnN0IGludCBuYml0cyA9IDMzOwotCi0gIC8vIHx0aW1lc3RhbXB8IGhhcyBhIHByZWNpc2lvbiBvZiB8bmJpdHN8Ci0gIC8vIHNvIG1ha2Ugc3VyZSB0aGUgaGlnaGVzdCBiaXRzIGFyZSBzZXQgdG8gMC4KLSAgRENIRUNLX0VRKCh0aW1lc3RhbXAgPj4gbmJpdHMpLCAwKTsKLQotICBpZiAoIWlzX3ByZXZpb3VzX3RpbWVzdGFtcF92YWxpZF8pIHsKLSAgICBwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfID0gdGltZXN0YW1wOwotICAgIGlzX3ByZXZpb3VzX3RpbWVzdGFtcF92YWxpZF8gPSB0cnVlOwotICAgIHJldHVybiB0aW1lc3RhbXA7Ci0gIH0KLQotICAvLyB8dGltZXN0YW1wfCBpcyBrbm93biBtb2R1bG8gMl4zMywgc28gZXN0aW1hdGUgdGhlIGhpZ2hlc3QgYml0cwotICAvLyB0byBtaW5pbWl6ZSB0aGUgZGlzY29udGludWl0eSB3aXRoIHRoZSBwcmV2aW91cyB1bnJvbGxlZCB0aW1lc3RhbXAuCi0gIC8vIFRocmVlIHBvc3NpYmlsaXRpZXMgYXJlIGNvbnNpZGVyZWQgdG8gZXN0aW1hdGUgdGhlIG1pc3NpbmcgaGlnaCBiaXRzCi0gIC8vIG9mIHx0aW1lc3RhbXB8LiBJZiB0aGUgYml0cyBvZiB0aGUgcHJldmlvdXMgdW5yb2xsZWQgdGltZXN0YW1wIGFyZQotICAvLyB7YjYzLCBiNjIsIC4uLiwgYjB9IGFuZCBiaXRzIG9mIHx0aW1lc3RhbXB8IGFyZSB7MCwgLi4uLCAwLCBhMzIsIC4uLiwgYTB9Ci0gIC8vIHRoZW4gdGhlIDMgcG9zc2liaWxpdGllcyBhcmU6Ci0gIC8vIDEpIHQxID0ge2I2MywgLi4uLCBiMzMsIGEzMiwgLi4uLCBhMH0gKGFwcGx5IHRoZSBzYW1lIG9mZnNldCBtdWx0aXBsZQotICAvLyAgICBvZiAyXjMzIGFzIHRoZSBvbmUgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHRpbWVzdGFtcCkKLSAgLy8gMikgdDAgPSB0MSAtIDJeMzMKLSAgLy8gMykgdDIgPSB0MSArIDJeMzMKLSAgLy8KLSAgLy8gQSBmZXcgcmVtYXJrczoKLSAgLy8gLSB0aGUgcHVycG9zZSBvZiB0aGUgdGltZXN0YW1wIHVucm9sbGVyIGlzIG9ubHkgdG8gdW5yb2xsIHRpbWVzdGFtcHMKLSAgLy8gaW4gc3VjaCBhIHdheSB0aW1lc3RhbXAgY29udGludWl0eSBpcyBzYXRpc2ZpZWQuIEl0IGNhbiBnZW5lcmF0ZSBuZWdhdGl2ZQotICAvLyB2YWx1ZXMgZHVyaW5nIHRoYXQgcHJvY2Vzcy4KLSAgLy8gLSBwb3NzaWJsZSBvdmVyZmxvd3MgYXJlIG5vdCBjb25zaWRlcmVkIGhlcmUgc2luY2UgNjQgYml0cyBvbiBhIDkwa0h6Ci0gIC8vIHRpbWVzY2FsZSBpcyB3YXkgZW5vdWdoIHRvIHJlcHJlc2VudCBzZXZlcmFsIHllYXJzIG9mIHBsYXliYWNrLgotICBpbnQ2NF90IHByZXZpb3VzX3Vucm9sbGVkX3RpbWVfaGlnaCA9IChwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfID4+IG5iaXRzKTsKLSAgaW50NjRfdCB0aW1lMCA9ICgocHJldmlvdXNfdW5yb2xsZWRfdGltZV9oaWdoIC0gMSkgPDwgbmJpdHMpIHwgdGltZXN0YW1wOwotICBpbnQ2NF90IHRpbWUxID0gKChwcmV2aW91c191bnJvbGxlZF90aW1lX2hpZ2ggKyAwKSA8PCBuYml0cykgfCB0aW1lc3RhbXA7Ci0gIGludDY0X3QgdGltZTIgPSAoKHByZXZpb3VzX3Vucm9sbGVkX3RpbWVfaGlnaCArIDEpIDw8IG5iaXRzKSB8IHRpbWVzdGFtcDsKLQotICAvLyBTZWxlY3QgdGhlIG1pbiBhYnNvbHV0ZSBkaWZmZXJlbmNlIHdpdGggdGhlIGN1cnJlbnQgdGltZQotICAvLyBzbyBhcyB0byBlbnN1cmUgdGltZSBjb250aW51aXR5LgotICBpbnQ2NF90IGRpZmYwID0gdGltZTAgLSBwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfOwotICBpbnQ2NF90IGRpZmYxID0gdGltZTEgLSBwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfOwotICBpbnQ2NF90IGRpZmYyID0gdGltZTIgLSBwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfOwotICBpZiAoZGlmZjAgPCAwKSBkaWZmMCA9IC1kaWZmMDsKLSAgaWYgKGRpZmYxIDwgMCkgZGlmZjEgPSAtZGlmZjE7Ci0gIGlmIChkaWZmMiA8IDApIGRpZmYyID0gLWRpZmYyOwotCi0gIGludDY0X3QgdW5yb2xsZWRfdGltZTsKLSAgaW50NjRfdCBtaW5fZGlmZjsKLSAgaWYgKGRpZmYxIDwgZGlmZjApIHsKLSAgICB1bnJvbGxlZF90aW1lID0gdGltZTE7Ci0gICAgbWluX2RpZmYgPSBkaWZmMTsKLSAgfSBlbHNlIHsKLSAgICB1bnJvbGxlZF90aW1lID0gdGltZTA7Ci0gICAgbWluX2RpZmYgPSBkaWZmMDsKLSAgfQotICBpZiAoZGlmZjIgPCBtaW5fZGlmZikgdW5yb2xsZWRfdGltZSA9IHRpbWUyOwotCi0gIC8vIFVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIHRpbWVzdGFtcCB1bnJvbGxlci4KLSAgcHJldmlvdXNfdW5yb2xsZWRfdGltZXN0YW1wXyA9IHVucm9sbGVkX3RpbWU7Ci0KLSAgcmV0dXJuIHVucm9sbGVkX3RpbWU7Ci19Ci0KLXZvaWQgVGltZXN0YW1wVW5yb2xsZXI6OlJlc2V0KCkgewotICBpc19wcmV2aW91c190aW1lc3RhbXBfdmFsaWRfID0gZmFsc2U7Ci0gIHByZXZpb3VzX3Vucm9sbGVkX3RpbWVzdGFtcF8gPSAwOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RpbWVzdGFtcF91bnJvbGxlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90aW1lc3RhbXBfdW5yb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhlMTcxYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RpbWVzdGFtcF91bnJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVElNRVNUQU1QX1VOUk9MTEVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVElNRVNUQU1QX1VOUk9MTEVSX0hfCi0KLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBUaW1lc3RhbXBVbnJvbGxlciB7Ci0gcHVibGljOgotICBUaW1lc3RhbXBVbnJvbGxlcigpOwotICB+VGltZXN0YW1wVW5yb2xsZXIoKTsKLQotICAvLyBHaXZlbiB0aGF0IHx0aW1lc3RhbXB8IGlzIGNvZGVkIHVzaW5nIDMzIGJpdHMgKGFjY3VyYWN5IG9mIE1QRUctMiBUUwotICAvLyB0aW1lc3RhbXBzKSwgR2V0VW5yb2xsZWRUaW1lc3RhbXAgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB1bnJvbGxlZAotICAvLyB0aW1lc3RhbXAuCi0gIC8vIFRoZSB1bnJvbGxlZCB0aW1lc3RhbXAgaXMgZGVmaW5lZCBieToKLSAgLy8gfHRpbWVzdGFtcHwgKyBrICogKDIgXiAzMykKLSAgLy8gd2hlcmUgayBpcyBlc3RpbWF0ZWQgc28gdGhhdCB0aGUgdW5yb2xsZWQgdGltZXN0YW1wIGlzIGFzIGNsb3NlIGFzCi0gIC8vIHBvc3NpYmxlIHRvIHRoZSBwcmV2aW91cyB1bnJvbGxlZCB0aW1lc3RhbXAgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbgotICAvLyAoaWYgdGhpcyBmdW5jdGlvbiBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgaXQgd2lsbCByZXR1cm4gdGhlIHRpbWVzdGFtcAotICAvLyB1bm1vZGlmaWVkKS4KLSAgaW50NjRfdCBHZXRVbnJvbGxlZFRpbWVzdGFtcChpbnQ2NF90IHRpbWVzdGFtcCk7Ci0KLSAgLy8gUmVzZXQgdGhlIFRpbWVzdGFtcFVucm9sbGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLgotICB2b2lkIFJlc2V0KCk7Ci0KLSBwcml2YXRlOgotICAvLyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSB2YWx1ZSBvZiB8cHJldmlvdXNfdW5yb2xsZWRfdGltZXN0YW1wX3wgaXMgdmFsaWQuCi0gIGJvb2wgaXNfcHJldmlvdXNfdGltZXN0YW1wX3ZhbGlkXzsKLQotICAvLyBUaGlzIGlzIHRoZSBsYXN0IG91dHB1dCBvZiBHZXRVbnJvbGxlZFRpbWVzdGFtcC4KLSAgaW50NjRfdCBwcmV2aW91c191bnJvbGxlZF90aW1lc3RhbXBfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUaW1lc3RhbXBVbnJvbGxlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9USU1FU1RBTVBfVU5ST0xMRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdGltZXN0YW1wX3Vucm9sbGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90aW1lc3RhbXBfdW5yb2xsZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZTY4ZDUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90aW1lc3RhbXBfdW5yb2xsZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImJhc2UvdGVzdC9wZXJmX3Rlc3Rfc3VpdGUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RpbWVzdGFtcF91bnJvbGxlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLXN0YXRpYyBzdGQ6OnZlY3RvcjxpbnQ2NF90PiBUcnVuY2F0ZVRpbWVzdGFtcHMoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8aW50NjRfdD4mIHRpbWVzdGFtcHMpIHsKLSAgY29uc3QgaW50IG5iaXRzID0gMzM7Ci0gIGludDY0X3QgdHJ1bmNhdGVfbWFzayA9IChJTlQ2NF9DKDEpIDw8IG5iaXRzKSAtIDE7Ci0gIHN0ZDo6dmVjdG9yPGludDY0X3Q+IHRydW5jYXRlZF90aW1lc3RhbXBzKHRpbWVzdGFtcHMuc2l6ZSgpKTsKLSAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB0aW1lc3RhbXBzLnNpemUoKTsgaysrKQotICAgIHRydW5jYXRlZF90aW1lc3RhbXBzW2tdID0gdGltZXN0YW1wc1trXSAmIHRydW5jYXRlX21hc2s7Ci0gIHJldHVybiB0cnVuY2F0ZWRfdGltZXN0YW1wczsKLX0KLQotc3RhdGljIHZvaWQgUnVuVW5yb2xsVGVzdChjb25zdCBzdGQ6OnZlY3RvcjxpbnQ2NF90PiYgdGltZXN0YW1wcykgewotICBzdGQ6OnZlY3RvcjxpbnQ2NF90PiB0cnVuY2F0ZWRfdGltZXN0YW1wcyA9IFRydW5jYXRlVGltZXN0YW1wcyh0aW1lc3RhbXBzKTsKLQotICBUaW1lc3RhbXBVbnJvbGxlciB0aW1lc3RhbXBfdW5yb2xsZXI7Ci0gIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgdGltZXN0YW1wcy5zaXplKCk7IGsrKykgewotICAgIGludDY0X3QgdW5yb2xsZWRfdGltZXN0YW1wID0KLSAgICAgICAgdGltZXN0YW1wX3Vucm9sbGVyLkdldFVucm9sbGVkVGltZXN0YW1wKHRydW5jYXRlZF90aW1lc3RhbXBzW2tdKTsKLSAgICBFWFBFQ1RfRVEodGltZXN0YW1wc1trXSwgdW5yb2xsZWRfdGltZXN0YW1wKTsKLSAgfQotfQotCi1URVNUKFRpbWVzdGFtcFVucm9sbGVyVGVzdCwgU2luZ2xlU3RyZWFtKSB7Ci0gIC8vIEFycmF5IG9mIDY0IGJpdCB0aW1lc3RhbXBzLgotICAvLyBUaGlzIGlzIHRoZSBleHBlY3RlZCByZXN1bHQgZnJvbSB1bnJvbGxpbmcgdGhlc2UgdGltZXN0YW1wcwotICAvLyB0cnVuY2F0ZWQgdG8gMzMgYml0cy4KLSAgaW50NjRfdCB0aW1lc3RhbXBzW10gPSB7Ci0gICAgICBJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMDAwMCksCi0gICAgICBJTlQ2NF9DKC0xOTApLCAgICAgICAgICAgICAgICAvLyAtIDE5MAotICAgICAgSU5UNjRfQygweDAwMDAwMDAwYWFhYWE5ZWQpLCAgLy8gKyAweGFhYWFhYWFiCi0gICAgICBJTlQ2NF9DKDB4MDAwMDAwMDE1NTU1NTQ5OCksICAvLyArIDB4YWFhYWFhYWIKLSAgICAgIElOVDY0X0MoMHgwMDAwMDAwMWZmZmZmZjQzKSwgIC8vICsgMHhhYWFhYWFhYgotICAgICAgSU5UNjRfQygweDAwMDAwMDAyYWFhYWE5ZWUpLCAgLy8gKyAweGFhYWFhYWFiCi0gICAgICBJTlQ2NF9DKDB4MDAwMDAwMDM1NTU1NTQ5OSksICAvLyArIDB4YWFhYWFhYWIKLSAgICAgIElOVDY0X0MoMHgwMDAwMDAwM2ZmZmZmZjQ0KSwgIC8vICsgMHhhYWFhYWFhYgotICB9OwotCi0gIHN0ZDo6dmVjdG9yPGludDY0X3Q+IHRpbWVzdGFtcHNfdmVjdG9yKHRpbWVzdGFtcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHMgKyBhcnJheXNpemUodGltZXN0YW1wcykpOwotICBSdW5VbnJvbGxUZXN0KHRpbWVzdGFtcHNfdmVjdG9yKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19wYWNrZXQuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3BhY2tldC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRiZjNiMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3BhY2tldC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3BhY2tldC5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1zdGF0aWMgY29uc3QgdWludDhfdCBrVHNIZWFkZXJTeW5jd29yZCA9IDB4NDc7Ci0KLS8vIHN0YXRpYwotaW50IFRzUGFja2V0OjpTeW5jKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgaW50IGsgPSAwOwotICBmb3IgKDsgayA8IHNpemU7IGsrKykgewotICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgNCBzeW5jd29yZHMgaW4gYSByb3cgd2hlbiBwb3NzaWJsZSwKLSAgICAvLyB0aGlzIHNob3VsZCBpbXByb3ZlIHN5bmNocm9uaXphdGlvbiByb2J1c3RuZXNzLgotICAgIC8vIFRPRE86IENvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGdhcmJhZ2UgYmV0d2VlbiBUUyBwYWNrZXRzLgotICAgIGJvb2wgaXNfaGVhZGVyID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgaW50IGlkeCA9IGsgKyBpICoga1BhY2tldFNpemU7Ci0gICAgICBpZiAoaWR4ID49IHNpemUpIGJyZWFrOwotICAgICAgaWYgKGJ1ZltpZHhdICE9IGtUc0hlYWRlclN5bmN3b3JkKSB7Ci0gICAgICAgIERWTE9HKExPR19MRVZFTF9UUykgPDwgIkJ5dGVTeW5jIiA8PCBpZHggPDwgIjogIiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4oYnVmW2lkeF0pIDw8IHN0ZDo6ZGVjOwotICAgICAgICBpc19oZWFkZXIgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChpc19oZWFkZXIpIGJyZWFrOwotICB9Ci0KLSAgRFZMT0dfSUYoMSwgayAhPSAwKSA8PCAiU1lOQzogbmJ5dGVzX3NraXBwZWQ9IiA8PCBrOwotICByZXR1cm4gazsKLX0KLQotLy8gc3RhdGljCi1Uc1BhY2tldCogVHNQYWNrZXQ6OlBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgaWYgKHNpemUgPCBrUGFja2V0U2l6ZSkgewotICAgIERWTE9HKDEpIDw8ICJCdWZmZXIgZG9lcyBub3QgaG9sZCBvbmUgZnVsbCBUUyBwYWNrZXQ6IgotICAgICAgICAgICAgIDw8ICIgYnVmZmVyX3NpemU9IiA8PCBzaXplOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgRENIRUNLX0VRKGJ1ZlswXSwga1RzSGVhZGVyU3luY3dvcmQpOwotICBpZiAoYnVmWzBdICE9IGtUc0hlYWRlclN5bmN3b3JkKSB7Ci0gICAgRFZMT0coMSkgPDwgIk5vdCBvbiBhIFRTIHN5bmN3b3JkOiIKLSAgICAgICAgICAgICA8PCAiIGJ1ZlswXT0iIDw8IHN0ZDo6aGV4IDw8IHN0YXRpY19jYXN0PGludD4oYnVmWzBdKSA8PCBzdGQ6OmRlYzsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHN0ZDo6dW5pcXVlX3B0cjxUc1BhY2tldD4gdHNfcGFja2V0KG5ldyBUc1BhY2tldCgpKTsKLSAgYm9vbCBzdGF0dXMgPSB0c19wYWNrZXQtPlBhcnNlSGVhZGVyKGJ1Zik7Ci0gIGlmICghc3RhdHVzKSB7Ci0gICAgRFZMT0coMSkgPDwgIlBhcnNpbmcgaGVhZGVyIGZhaWxlZCI7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgcmV0dXJuIHRzX3BhY2tldC5yZWxlYXNlKCk7Ci19Ci0KLVRzUGFja2V0OjpUc1BhY2tldCgpIHt9Ci0KLVRzUGFja2V0Ojp+VHNQYWNrZXQoKSB7fQotCi1ib29sIFRzUGFja2V0OjpQYXJzZUhlYWRlcihjb25zdCB1aW50OF90KiBidWYpIHsKLSAgQml0UmVhZGVyIGJpdF9yZWFkZXIoYnVmLCBrUGFja2V0U2l6ZSk7Ci0gIHBheWxvYWRfID0gYnVmOwotICBwYXlsb2FkX3NpemVfID0ga1BhY2tldFNpemU7Ci0KLSAgLy8gUmVhZCB0aGUgVFMgaGVhZGVyOiA0IGJ5dGVzLgotICBpbnQgc3luY3dvcmQ7Ci0gIGludCB0cmFuc3BvcnRfZXJyb3JfaW5kaWNhdG9yOwotICBpbnQgcGF5bG9hZF91bml0X3N0YXJ0X2luZGljYXRvcjsKLSAgaW50IHRyYW5zcG9ydF9wcmlvcml0eTsKLSAgaW50IHRyYW5zcG9ydF9zY3JhbWJsaW5nX2NvbnRyb2w7Ci0gIGludCBhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2w7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDgsICZzeW5jd29yZCkpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmdHJhbnNwb3J0X2Vycm9yX2luZGljYXRvcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmcGF5bG9hZF91bml0X3N0YXJ0X2luZGljYXRvcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmdHJhbnNwb3J0X3ByaW9yaXR5KSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDEzLCAmcGlkXykpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygyLCAmdHJhbnNwb3J0X3NjcmFtYmxpbmdfY29udHJvbCkpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygyLCAmYWRhcHRhdGlvbl9maWVsZF9jb250cm9sKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDQsICZjb250aW51aXR5X2NvdW50ZXJfKSk7Ci0gIHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3JfID0gKHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3IgIT0gMCk7Ci0gIHBheWxvYWRfICs9IDQ7Ci0gIHBheWxvYWRfc2l6ZV8gLT0gNDsKLQotICAvLyBEZWZhdWx0IHZhbHVlcyB3aGVuIG5vIGFkYXB0YXRpb24gZmllbGQuCi0gIGRpc2NvbnRpbnVpdHlfaW5kaWNhdG9yXyA9IGZhbHNlOwotICByYW5kb21fYWNjZXNzX2luZGljYXRvcl8gPSBmYWxzZTsKLQotICAvLyBEb25lIHNpbmNlIG5vIGFkYXB0YXRpb24gZmllbGQuCi0gIGlmICgoYWRhcHRhdGlvbl9maWVsZF9jb250cm9sICYgMHgyKSA9PSAwKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBSZWFkIHRoZSBhZGFwdGF0aW9uIGZpZWxkIGlmIG5lZWRlZC4KLSAgaW50IGFkYXB0YXRpb25fZmllbGRfbGVuZ3RoOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cyg4LCAmYWRhcHRhdGlvbl9maWVsZF9sZW5ndGgpKTsKLSAgRFZMT0coTE9HX0xFVkVMX1RTKSA8PCAiYWRhcHRhdGlvbl9maWVsZF9sZW5ndGg9IiA8PCBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aDsKLSAgcGF5bG9hZF8gKz0gMTsKLSAgcGF5bG9hZF9zaXplXyAtPSAxOwotICBpZiAoKGFkYXB0YXRpb25fZmllbGRfY29udHJvbCAmIDB4MSkgPT0gMCAmJiBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aCAhPSAxODMpIHsKLSAgICBEVkxPRygxKSA8PCAiYWRhcHRhdGlvbl9maWVsZF9sZW5ndGg9IiA8PCBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKChhZGFwdGF0aW9uX2ZpZWxkX2NvbnRyb2wgJiAweDEpID09IDEgJiYgYWRhcHRhdGlvbl9maWVsZF9sZW5ndGggPiAxODIpIHsKLSAgICBEVkxPRygxKSA8PCAiYWRhcHRhdGlvbl9maWVsZF9sZW5ndGg9IiA8PCBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aDsKLSAgICAvLyBUaGlzIGlzIG5vdCBhbGxvd2VkIGJ5IHRoZSBzcGVjLgotICAgIC8vIEhvd2V2ZXIsIHNvbWUgYmFkbHkgZW5jb2RlZCBzdHJlYW1zIGFyZSB1c2luZwotICAgIC8vIGFkYXB0YXRpb25fZmllbGRfbGVuZ3RoID0gMTgzCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gYWRhcHRhdGlvbl9maWVsZF9sZW5ndGggPSAnMCcgaXMgdXNlZCB0byBpbnNlcnQgYSBzaW5nbGUgc3R1ZmZpbmcgYnl0ZQotICAvLyBpbiB0aGUgYWRhcHRhdGlvbiBmaWVsZCBvZiBhIHRyYW5zcG9ydCBzdHJlYW0gcGFja2V0LgotICBpZiAoYWRhcHRhdGlvbl9maWVsZF9sZW5ndGggPT0gMCkgcmV0dXJuIHRydWU7Ci0KLSAgYm9vbCBzdGF0dXMgPSBQYXJzZUFkYXB0YXRpb25GaWVsZCgmYml0X3JlYWRlciwgYWRhcHRhdGlvbl9maWVsZF9sZW5ndGgpOwotICBwYXlsb2FkXyArPSBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aDsKLSAgcGF5bG9hZF9zaXplXyAtPSBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aDsKLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9vbCBUc1BhY2tldDo6UGFyc2VBZGFwdGF0aW9uRmllbGQoQml0UmVhZGVyKiBiaXRfcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkYXB0YXRpb25fZmllbGRfbGVuZ3RoKSB7Ci0gIERDSEVDS19HVChhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aCwgMCk7Ci0gIGludCBhZGFwdGF0aW9uX2ZpZWxkX3N0YXJ0X21hcmtlciA9IGJpdF9yZWFkZXItPmJpdHNfYXZhaWxhYmxlKCkgLyA4OwotCi0gIGludCBkaXNjb250aW51aXR5X2luZGljYXRvcjsKLSAgaW50IHJhbmRvbV9hY2Nlc3NfaW5kaWNhdG9yOwotICBpbnQgZWxlbWVudGFyeV9zdHJlYW1fcHJpb3JpdHlfaW5kaWNhdG9yOwotICBpbnQgcGNyX2ZsYWc7Ci0gIGludCBvcGNyX2ZsYWc7Ci0gIGludCBzcGxpY2luZ19wb2ludF9mbGFnOwotICBpbnQgdHJhbnNwb3J0X3ByaXZhdGVfZGF0YV9mbGFnOwotICBpbnQgYWRhcHRhdGlvbl9maWVsZF9leHRlbnNpb25fZmxhZzsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZkaXNjb250aW51aXR5X2luZGljYXRvcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMSwgJnJhbmRvbV9hY2Nlc3NfaW5kaWNhdG9yKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmZWxlbWVudGFyeV9zdHJlYW1fcHJpb3JpdHlfaW5kaWNhdG9yKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmcGNyX2ZsYWcpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZvcGNyX2ZsYWcpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZzcGxpY2luZ19wb2ludF9mbGFnKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmdHJhbnNwb3J0X3ByaXZhdGVfZGF0YV9mbGFnKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmYWRhcHRhdGlvbl9maWVsZF9leHRlbnNpb25fZmxhZykpOwotICBkaXNjb250aW51aXR5X2luZGljYXRvcl8gPSAoZGlzY29udGludWl0eV9pbmRpY2F0b3IgIT0gMCk7Ci0gIHJhbmRvbV9hY2Nlc3NfaW5kaWNhdG9yXyA9IChyYW5kb21fYWNjZXNzX2luZGljYXRvciAhPSAwKTsKLQotICBpZiAocGNyX2ZsYWcpIHsKLSAgICBpbnQ2NF90IHByb2dyYW1fY2xvY2tfcmVmZXJlbmNlX2Jhc2U7Ci0gICAgaW50IHJlc2VydmVkOwotICAgIGludCBwcm9ncmFtX2Nsb2NrX3JlZmVyZW5jZV9leHRlbnNpb247Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDMzLCAmcHJvZ3JhbV9jbG9ja19yZWZlcmVuY2VfYmFzZSkpOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cyg2LCAmcmVzZXJ2ZWQpKTsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOSwgJnByb2dyYW1fY2xvY2tfcmVmZXJlbmNlX2V4dGVuc2lvbikpOwotICB9Ci0KLSAgaWYgKG9wY3JfZmxhZykgewotICAgIGludDY0X3Qgb3JpZ2luYWxfcHJvZ3JhbV9jbG9ja19yZWZlcmVuY2VfYmFzZTsKLSAgICBpbnQgcmVzZXJ2ZWQ7Ci0gICAgaW50IG9yaWdpbmFsX3Byb2dyYW1fY2xvY2tfcmVmZXJlbmNlX2V4dGVuc2lvbjsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMzMsICZvcmlnaW5hbF9wcm9ncmFtX2Nsb2NrX3JlZmVyZW5jZV9iYXNlKSk7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDYsICZyZXNlcnZlZCkpOwotICAgIFJDSEVDSygKLSAgICAgICAgYml0X3JlYWRlci0+UmVhZEJpdHMoOSwgJm9yaWdpbmFsX3Byb2dyYW1fY2xvY2tfcmVmZXJlbmNlX2V4dGVuc2lvbikpOwotICB9Ci0KLSAgaWYgKHNwbGljaW5nX3BvaW50X2ZsYWcpIHsKLSAgICBpbnQgc3BsaWNlX2NvdW50ZG93bjsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOCwgJnNwbGljZV9jb3VudGRvd24pKTsKLSAgfQotCi0gIGlmICh0cmFuc3BvcnRfcHJpdmF0ZV9kYXRhX2ZsYWcpIHsKLSAgICBpbnQgdHJhbnNwb3J0X3ByaXZhdGVfZGF0YV9sZW5ndGg7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDgsICZ0cmFuc3BvcnRfcHJpdmF0ZV9kYXRhX2xlbmd0aCkpOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5Ta2lwQml0cyg4ICogdHJhbnNwb3J0X3ByaXZhdGVfZGF0YV9sZW5ndGgpKTsKLSAgfQotCi0gIGlmIChhZGFwdGF0aW9uX2ZpZWxkX2V4dGVuc2lvbl9mbGFnKSB7Ci0gICAgaW50IGFkYXB0YXRpb25fZmllbGRfZXh0ZW5zaW9uX2xlbmd0aDsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOCwgJmFkYXB0YXRpb25fZmllbGRfZXh0ZW5zaW9uX2xlbmd0aCkpOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5Ta2lwQml0cyg4ICogYWRhcHRhdGlvbl9maWVsZF9leHRlbnNpb25fbGVuZ3RoKSk7Ci0gIH0KLQotICAvLyBUaGUgcmVzdCBvZiB0aGUgYWRhcHRhdGlvbiBmaWVsZCBzaG91bGQgYmUgc3R1ZmZpbmcgYnl0ZXMuCi0gIGludCBhZGFwdGF0aW9uX2ZpZWxkX3JlbWFpbmluZ19zaXplID0KLSAgICAgIGFkYXB0YXRpb25fZmllbGRfbGVuZ3RoIC0KLSAgICAgIChhZGFwdGF0aW9uX2ZpZWxkX3N0YXJ0X21hcmtlciAtIGJpdF9yZWFkZXItPmJpdHNfYXZhaWxhYmxlKCkgLyA4KTsKLSAgUkNIRUNLKGFkYXB0YXRpb25fZmllbGRfcmVtYWluaW5nX3NpemUgPj0gMCk7Ci0gIGZvciAoaW50IGsgPSAwOyBrIDwgYWRhcHRhdGlvbl9maWVsZF9yZW1haW5pbmdfc2l6ZTsgaysrKSB7Ci0gICAgaW50IHN0dWZmaW5nX2J5dGU7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDgsICZzdHVmZmluZ19ieXRlKSk7Ci0gICAgLy8gVW5mb3J0dW5hdGVseSwgYSBsb3Qgb2Ygc3RyZWFtcyBleGlzdCBpbiB0aGUgZmllbGQgdGhhdCBkbyBub3QgZmlsbAotICAgIC8vIHRoZSByZW1haW5pbmcgb2YgdGhlIGFkYXB0YXRpb24gZmllbGQgd2l0aCB0aGUgZXhwZWN0ZWQgc3R1ZmZpbmcgdmFsdWU6Ci0gICAgLy8gZG8gbm90IGZhaWwgaWYgdGhhdCdzIHRoZSBjYXNlLgotICAgIERWTE9HX0lGKDEsIHN0dWZmaW5nX2J5dGUgIT0gMHhmZikKLSAgICAgICAgPDwgIlN0cmVhbSBub3QgY29tcGxpYW50OiBpbnZhbGlkIHN0dWZmaW5nIGJ5dGUgIiA8PCBzdGQ6OmhleAotICAgICAgICA8PCBzdHVmZmluZ19ieXRlOwotICB9Ci0KLSAgRFZMT0coTE9HX0xFVkVMX1RTKSA8PCAicmFuZG9tX2FjY2Vzc19pbmRpY2F0b3I9IiA8PCByYW5kb21fYWNjZXNzX2luZGljYXRvcl87Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3BhY2tldC5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19wYWNrZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk5ZjhmNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3BhY2tldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVFNfUEFDS0VUX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVFNfUEFDS0VUX0hfCi0KLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEJpdFJlYWRlcjsKLQotbmFtZXNwYWNlIG1wMnQgewotCi1jbGFzcyBUc1BhY2tldCB7Ci0gcHVibGljOgotICBzdGF0aWMgY29uc3QgaW50IGtQYWNrZXRTaXplID0gMTg4OwotCi0gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGRpc2NhcmQKLSAgLy8gdG8gYmUgc3luY2hyb25pemVkIG9uIGEgVFMgc3luY3dvcmQuCi0gIHN0YXRpYyBpbnQgU3luYyhjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKTsKLQotICAvLyBQYXJzZSBhIFRTIHBhY2tldC4KLSAgLy8gUmV0dXJuIGEgVHNQYWNrZXQgb25seSB3aGVuIHBhcnNpbmcgd2FzIHN1Y2Nlc3NmdWwuCi0gIC8vIFJldHVybiBOVUxMIG90aGVyd2lzZS4KLSAgc3RhdGljIFRzUGFja2V0KiBQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKTsKLQotICB+VHNQYWNrZXQoKTsKLQotICAvLyBUUyBoZWFkZXIgYWNjZXNzb3JzLgotICBib29sIHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3IoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3JfOwotICB9Ci0gIGludCBwaWQoKSBjb25zdCB7IHJldHVybiBwaWRfOyB9Ci0gIGludCBjb250aW51aXR5X2NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBjb250aW51aXR5X2NvdW50ZXJfOyB9Ci0gIGJvb2wgZGlzY29udGludWl0eV9pbmRpY2F0b3IoKSBjb25zdCB7IHJldHVybiBkaXNjb250aW51aXR5X2luZGljYXRvcl87IH0KLSAgYm9vbCByYW5kb21fYWNjZXNzX2luZGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIHJhbmRvbV9hY2Nlc3NfaW5kaWNhdG9yXzsgfQotCi0gIC8vIFJldHVybiB0aGUgb2Zmc2V0IGFuZCB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZC4KLSAgY29uc3QgdWludDhfdCogcGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIHBheWxvYWRfOyB9Ci0gIGludCBwYXlsb2FkX3NpemUoKSBjb25zdCB7IHJldHVybiBwYXlsb2FkX3NpemVfOyB9Ci0KLSBwcml2YXRlOgotICBUc1BhY2tldCgpOwotCi0gIC8vIFBhcnNlIGFuIE1wZWcyIFRTIGhlYWRlci4KLSAgLy8gVGhlIGJ1ZmZlciBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCB8a1BhY2tldFNpemV8Ci0gIGJvb2wgUGFyc2VIZWFkZXIoY29uc3QgdWludDhfdCogYnVmKTsKLSAgYm9vbCBQYXJzZUFkYXB0YXRpb25GaWVsZChCaXRSZWFkZXIqIGJpdF9yZWFkZXIsIGludCBhZGFwdGF0aW9uX2ZpZWxkX2xlbmd0aCk7Ci0KLSAgLy8gU2l6ZSBvZiB0aGUgcGF5bG9hZC4KLSAgY29uc3QgdWludDhfdCogcGF5bG9hZF87Ci0gIGludCBwYXlsb2FkX3NpemVfOwotCi0gIC8vIFRTIGhlYWRlci4KLSAgYm9vbCBwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yXzsKLSAgaW50IHBpZF87Ci0gIGludCBjb250aW51aXR5X2NvdW50ZXJfOwotCi0gIC8vIFBhcmFtcyBmcm9tIHRoZSBhZGFwdGF0aW9uIGZpZWxkLgotICBib29sIGRpc2NvbnRpbnVpdHlfaW5kaWNhdG9yXzsKLSAgYm9vbCByYW5kb21fYWNjZXNzX2luZGljYXRvcl87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRzUGFja2V0KTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1BBQ0tFVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0MDg5My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9UU19TRUNUSU9OX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1jbGFzcyBUc1NlY3Rpb24gewotIHB1YmxpYzoKLSAgLy8gRnJvbSBJU08vSUVDIDEzODE4LTEgb3IgSVRVIEguMjIyIHNwZWM6IFRhYmxlIDItMyAtIFBJRCB0YWJsZS4KLSAgZW51bSBTcGVjaWFsUGlkIHsKLSAgICBrUGlkUGF0ID0gMHgwLAotICAgIGtQaWRDYXQgPSAweDEsCi0gICAga1BpZFRzZHQgPSAweDIsCi0gICAga1BpZE51bGxQYWNrZXQgPSAweDFmZmYsCi0gICAga1BpZE1heCA9IDB4MWZmZiwKLSAgfTsKLQotICB2aXJ0dWFsIH5Uc1NlY3Rpb24oKSB7fQotCi0gIC8vIFBhcnNlIHRoZSBkYXRhIGJ5dGVzIG9mIHRoZSBUUyBwYWNrZXQuCi0gIC8vIFJldHVybiB0cnVlIGlmIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bC4KLSAgdmlydHVhbCBib29sIFBhcnNlKGJvb2wgcGF5bG9hZF91bml0X3N0YXJ0X2luZGljYXRvciwgY29uc3QgdWludDhfdCogYnVmLAotICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpID0gMDsKLQotICAvLyBQcm9jZXNzIGJ5dGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBwcm9jZXNzZWQgeWV0IChwZW5kaW5nIGJ1ZmZlcnMgaW4gdGhlCi0gIC8vIHBpcGUpLiBGbHVzaCBtaWdodCB0aHVzIHJlc3VsdHMgaW4gZnJhbWUgZW1pc3Npb24sIGFzIGFuIGV4YW1wbGUuCi0gIHZpcnR1YWwgdm9pZCBGbHVzaCgpID0gMDsKLQotICAvLyBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIHBhcnNlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS4KLSAgdmlydHVhbCB2b2lkIFJlc2V0KCkgPSAwOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVFNfU0VDVElPTl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BhdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wYXQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTM0NDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BhdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcGF0LmgiCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X2NvbW1vbi5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLVRzU2VjdGlvblBhdDo6VHNTZWN0aW9uUGF0KGNvbnN0IFJlZ2lzdGVyUG10Q2ImIHJlZ2lzdGVyX3BtdF9jYikKLSAgICA6IHJlZ2lzdGVyX3BtdF9jYl8ocmVnaXN0ZXJfcG10X2NiKSwgdmVyc2lvbl9udW1iZXJfKC0xKSB7fQotCi1Uc1NlY3Rpb25QYXQ6On5Uc1NlY3Rpb25QYXQoKSB7fQotCi1ib29sIFRzU2VjdGlvblBhdDo6UGFyc2VQc2lTZWN0aW9uKEJpdFJlYWRlciogYml0X3JlYWRlcikgewotICAvLyBSZWFkIHRoZSBmaXhlZCBzZWN0aW9uIGxlbmd0aC4KLSAgaW50IHRhYmxlX2lkOwotICBpbnQgc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yOwotICBpbnQgZHVtbXlfemVybzsKLSAgaW50IHJlc2VydmVkOwotICBpbnQgc2VjdGlvbl9sZW5ndGg7Ci0gIGludCB0cmFuc3BvcnRfc3RyZWFtX2lkOwotICBpbnQgdmVyc2lvbl9udW1iZXI7Ci0gIGludCBjdXJyZW50X25leHRfaW5kaWNhdG9yOwotICBpbnQgc2VjdGlvbl9udW1iZXI7Ci0gIGludCBsYXN0X3NlY3Rpb25fbnVtYmVyOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOCwgJnRhYmxlX2lkKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmZHVtbXlfemVybykpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMiwgJnJlc2VydmVkKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxMiwgJnNlY3Rpb25fbGVuZ3RoKSk7Ci0gIFJDSEVDSyhzZWN0aW9uX2xlbmd0aCA+PSA1KTsKLSAgUkNIRUNLKHNlY3Rpb25fbGVuZ3RoIDw9IDEwMjEpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMTYsICZ0cmFuc3BvcnRfc3RyZWFtX2lkKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygyLCAmcmVzZXJ2ZWQpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDUsICZ2ZXJzaW9uX251bWJlcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMSwgJmN1cnJlbnRfbmV4dF9pbmRpY2F0b3IpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDgsICZzZWN0aW9uX251bWJlcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOCwgJmxhc3Rfc2VjdGlvbl9udW1iZXIpKTsKLSAgc2VjdGlvbl9sZW5ndGggLT0gNTsKLQotICAvLyBQZXJmb3JtIGEgZmV3IHZlcmlmaWNhdGlvbnM6Ci0gIC8vIC0gVGFibGUgSUQgc2hvdWxkIGJlIDAgZm9yIGEgUEFULgotICAvLyAtIHNlY3Rpb25fc3ludGF4X2luZGljYXRvciBzaG91bGQgYmUgb25lLgotICAvLyAtIHNlY3Rpb24gbGVuZ3RoIHNob3VsZCBub3QgZXhjZWVkIDEwMjEKLSAgUkNIRUNLKHRhYmxlX2lkID09IDB4MCk7Ci0gIFJDSEVDSyhzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IpOwotICBSQ0hFQ0soIWR1bW15X3plcm8pOwotCi0gIC8vIEJvdGggdGhlIHByb2dyYW0gdGFibGUgYW5kIHRoZSBDUkMgaGF2ZSBhIHNpemUgbXVsdGlwbGUgb2YgNC4KLSAgLy8gTm90ZSBmb3IgcG10X3BpZF9jb3VudDogbWludXMgNCB0byBhY2NvdW50IGZvciB0aGUgQ1JDLgotICBSQ0hFQ0soKHNlY3Rpb25fbGVuZ3RoICUgNCkgPT0gMCk7Ci0gIGludCBwbXRfcGlkX2NvdW50ID0gKHNlY3Rpb25fbGVuZ3RoIC0gNCkgLyA0OwotCi0gIC8vIFJlYWQgdGhlIHZhcmlhYmxlIGxlbmd0aCBzZWN0aW9uOiBwcm9ncmFtIHRhYmxlICYgY3JjLgotICBzdGQ6OnZlY3RvcjxpbnQ+IHByb2dyYW1fbnVtYmVyX2FycmF5KHBtdF9waWRfY291bnQpOwotICBzdGQ6OnZlY3RvcjxpbnQ+IHBtdF9waWRfYXJyYXkocG10X3BpZF9jb3VudCk7Ci0gIGZvciAoaW50IGsgPSAwOyBrIDwgcG10X3BpZF9jb3VudDsgaysrKSB7Ci0gICAgaW50IHJlc2VydmVkOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxNiwgJnByb2dyYW1fbnVtYmVyX2FycmF5W2tdKSk7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDMsICZyZXNlcnZlZCkpOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxMywgJnBtdF9waWRfYXJyYXlba10pKTsKLSAgfQotICBpbnQgY3JjMzI7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygzMiwgJmNyYzMyKSk7Ci0KLSAgLy8gSnVzdCBpZ25vcmUgdGhlIFBBVCBpZiBub3QgYXBwbGljYWJsZSB5ZXQuCi0gIGlmICghY3VycmVudF9uZXh0X2luZGljYXRvcikgewotICAgIERWTE9HKDEpIDw8ICJOb3Qgc3VwcG9ydGVkOiByZWNlaXZlZCBhIFBBVCBub3QgYXBwbGljYWJsZSB5ZXQiOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gSWdub3JlIHRoZSBwcm9ncmFtIHRhYmxlIGlmIGl0IGhhc24ndCBjaGFuZ2VkLgotICBpZiAodmVyc2lvbl9udW1iZXIgPT0gdmVyc2lvbl9udW1iZXJfKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBCb3RoIHRoZSBNU0UgYW5kIHRoZSBITFMgc3BlYyBzcGVjaWZpZXMgdGhhdCBUUyBzdHJlYW1zIHNob3VsZCBjb252ZXkKLSAgLy8gZXhhY3RseSBvbmUgcHJvZ3JhbS4KLSAgaWYgKHBtdF9waWRfY291bnQgPiAxKSB7Ci0gICAgRFZMT0coMSkgPDwgIk11bHRpcGxlIHByb2dyYW1zIGRldGVjdGVkIGluIHRoZSBNcGVnMiBUUyBzdHJlYW0iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0vLyBDYW4gbm93IHJlZ2lzdGVyIHRoZSBQTVQuCi0jaWYgIWRlZmluZWQoTkRFQlVHKQotICBpbnQgZXhwZWN0ZWRfdmVyc2lvbl9udW1iZXIgPSB2ZXJzaW9uX251bWJlcjsKLSAgaWYgKHZlcnNpb25fbnVtYmVyXyA+PSAwKQotICAgIGV4cGVjdGVkX3ZlcnNpb25fbnVtYmVyID0gKHZlcnNpb25fbnVtYmVyXyArIDEpICUgMzI7Ci0gIERWTE9HX0lGKDEsIHZlcnNpb25fbnVtYmVyICE9IGV4cGVjdGVkX3ZlcnNpb25fbnVtYmVyKQotICAgICAgPDwgIlVuZXhwZWN0ZWQgdmVyc2lvbiBudW1iZXI6ICIgPDwgdmVyc2lvbl9udW1iZXIgPDwgIiB2cyAiCi0gICAgICA8PCB2ZXJzaW9uX251bWJlcl87Ci0jZW5kaWYKLSAgZm9yIChpbnQgayA9IDA7IGsgPCBwbXRfcGlkX2NvdW50OyBrKyspIHsKLSAgICBpZiAocHJvZ3JhbV9udW1iZXJfYXJyYXlba10gIT0gMCkgewotICAgICAgLy8gUHJvZ3JhbSBudW1iZXJzIGRpZmZlcmVudCBmcm9tIDAgY29ycmVzcG9uZCB0byBQTVQuCi0gICAgICByZWdpc3Rlcl9wbXRfY2JfLlJ1bihwcm9ncmFtX251bWJlcl9hcnJheVtrXSwgcG10X3BpZF9hcnJheVtrXSk7Ci0gICAgICAvLyBFdmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBwcm9ncmFtcywgb25seSBvbmUgY2FuIGJlIHN1cHBvcnRlZCBub3cuCi0gICAgICAvLyBITFM6ICJUcmFuc3BvcnQgU3RyZWFtIHNlZ21lbnRzIE1VU1QgY29udGFpbiBhIHNpbmdsZSBNUEVHLTIgUHJvZ3JhbS4iCi0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLSAgdmVyc2lvbl9udW1iZXJfID0gdmVyc2lvbl9udW1iZXI7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVHNTZWN0aW9uUGF0OjpSZXNldFBzaVNlY3Rpb24oKSB7IHZlcnNpb25fbnVtYmVyXyA9IC0xOyB9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wYXQuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjY2EyNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9UU19TRUNUSU9OX1BBVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUEFUX0hfCi0KLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImJhc2UvbWFjcm9zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BzaS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIFRzU2VjdGlvblBhdCA6IHB1YmxpYyBUc1NlY3Rpb25Qc2kgewotIHB1YmxpYzoKLSAgLy8gUmVnaXN0ZXJQbXRDYjo6UnVuKGludCBwcm9ncmFtX251bWJlciwgaW50IHBtdF9waWQpOwotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoaW50LCBpbnQpPiBSZWdpc3RlclBtdENiOwotCi0gIGV4cGxpY2l0IFRzU2VjdGlvblBhdChjb25zdCBSZWdpc3RlclBtdENiJiByZWdpc3Rlcl9wbXRfY2IpOwotICB+VHNTZWN0aW9uUGF0KCkgb3ZlcnJpZGU7Ci0KLSAgLy8gVHNTZWN0aW9uUHNpIGltcGxlbWVudGF0aW9uLgotICBib29sIFBhcnNlUHNpU2VjdGlvbihCaXRSZWFkZXIqIGJpdF9yZWFkZXIpIG92ZXJyaWRlOwotICB2b2lkIFJlc2V0UHNpU2VjdGlvbigpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgUmVnaXN0ZXJQbXRDYiByZWdpc3Rlcl9wbXRfY2JfOwotCi0gIC8vIFBhcmFtZXRlcnMgZnJvbSB0aGUgUEFULgotICBpbnQgdmVyc2lvbl9udW1iZXJfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUc1NlY3Rpb25QYXQpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVFNfU0VDVElPTl9QQVRfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wZXMuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcGVzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzgxYTNiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wZXMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3Blcy5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvZXNfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X2NvbW1vbi5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdGltZXN0YW1wX3Vucm9sbGVyLmgiCi0KLXN0YXRpYyBjb25zdCBpbnQga1Blc1N0YXJ0Q29kZSA9IDB4MDAwMDAxOwotCi1zdGF0aWMgYm9vbCBJc1RpbWVzdGFtcFNlY3Rpb25WYWxpZChpbnQ2NF90IHRpbWVzdGFtcF9zZWN0aW9uKSB7Ci0gIC8vIHxwdHNfc2VjdGlvbnwgaGFzIDQwIGJpdHM6Ci0gIC8vIC0gc3RhcnRpbmcgd2l0aCBlaXRoZXIgJzAwMTAnIG9yICcwMDExJyBvciAnMDAwMScKLSAgLy8gLSBhbmQgZW5kaW5nIHdpdGggYSBtYXJrZXIgYml0LgotICAvLyBTZWUgSVRVIEguMjIyIHN0YW5kYXJkIC0gUEVTIHNlY3Rpb24uCi0KLSAgLy8gVmVyaWZ5IHRoYXQgYWxsIHRoZSBtYXJrZXIgYml0cyBhcmUgc2V0IHRvIG9uZS4KLSAgcmV0dXJuICgodGltZXN0YW1wX3NlY3Rpb24gJiAweDEpICE9IDApICYmCi0gICAgICAgICAoKHRpbWVzdGFtcF9zZWN0aW9uICYgMHgxMDAwMCkgIT0gMCkgJiYKLSAgICAgICAgICgodGltZXN0YW1wX3NlY3Rpb24gJiAweDEwMDAwMDAwMCkgIT0gMCk7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IENvbnZlcnRUaW1lc3RhbXBTZWN0aW9uVG9UaW1lc3RhbXAoaW50NjRfdCB0aW1lc3RhbXBfc2VjdGlvbikgewotICByZXR1cm4gKCgodGltZXN0YW1wX3NlY3Rpb24gPj4gMzMpICYgMHg3KSA8PCAzMCkgfAotICAgICAgICAgKCgodGltZXN0YW1wX3NlY3Rpb24gPj4gMTcpICYgMHg3ZmZmKSA8PCAxNSkgfAotICAgICAgICAgKCgodGltZXN0YW1wX3NlY3Rpb24gPj4gMSkgJiAweDdmZmYpIDw8IDApOwotfQotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLVRzU2VjdGlvblBlczo6VHNTZWN0aW9uUGVzKHN0ZDo6dW5pcXVlX3B0cjxFc1BhcnNlcj4gZXNfcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZXN0YW1wVW5yb2xsZXIqIHRpbWVzdGFtcF91bnJvbGxlcikKLSAgICA6IGVzX3BhcnNlcl8oZXNfcGFyc2VyLnJlbGVhc2UoKSksCi0gICAgICB3YWl0X2Zvcl9wdXNpXyh0cnVlKSwKLSAgICAgIHRpbWVzdGFtcF91bnJvbGxlcl8odGltZXN0YW1wX3Vucm9sbGVyKSB7Ci0gIERDSEVDSyhlc19wYXJzZXJfKTsKLSAgRENIRUNLKHRpbWVzdGFtcF91bnJvbGxlcl8pOwotfQotCi1Uc1NlY3Rpb25QZXM6On5Uc1NlY3Rpb25QZXMoKSB7fQotCi1ib29sIFRzU2VjdGlvblBlczo6UGFyc2UoYm9vbCBwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yLCBjb25zdCB1aW50OF90KiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpIHsKLSAgLy8gSWdub3JlIHBhcnRpYWwgUEVTLgotICBpZiAod2FpdF9mb3JfcHVzaV8gJiYgIXBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3IpIHJldHVybiB0cnVlOwotCi0gIGJvb2wgcGFyc2VfcmVzdWx0ID0gdHJ1ZTsKLSAgaWYgKHBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3IpIHsKLSAgICAvLyBUcnkgZW1pdHRpbmcgYSBwYWNrZXQgc2luY2Ugd2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgUEVTIHBhY2tldAotICAgIC8vIHdpdGggYW4gdW5kZWZpbmVkIHNpemUuCi0gICAgLy8gSW4gdGhpcyBjYXNlLCBhIHVuaXQgaXMgZW1pdHRlZCB3aGVuIHRoZSBuZXh0IHVuaXQgaXMgY29taW5nLgotICAgIGludCByYXdfcGVzX3NpemU7Ci0gICAgY29uc3QgdWludDhfdCogcmF3X3BlczsKLSAgICBwZXNfYnl0ZV9xdWV1ZV8uUGVlaygmcmF3X3BlcywgJnJhd19wZXNfc2l6ZSk7Ci0gICAgaWYgKHJhd19wZXNfc2l6ZSA+IDApIHBhcnNlX3Jlc3VsdCA9IEVtaXQodHJ1ZSk7Ci0KLSAgICAvLyBSZXNldCB0aGUgc3RhdGUuCi0gICAgUmVzZXRQZXNTdGF0ZSgpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBzdGF0ZS4KLSAgICB3YWl0X2Zvcl9wdXNpXyA9IGZhbHNlOwotICB9Ci0KLSAgLy8gQWRkIHRoZSBkYXRhIHRvIHRoZSBwYXJzZXIgc3RhdGUuCi0gIGlmIChzaXplID4gMCkgcGVzX2J5dGVfcXVldWVfLlB1c2goYnVmLCBzaXplKTsKLQotICAvLyBUcnkgZW1pdHRpbmcgdGhlIGN1cnJlbnQgUEVTIHBhY2tldC4KLSAgcmV0dXJuIChwYXJzZV9yZXN1bHQgJiYgRW1pdChmYWxzZSkpOwotfQotCi12b2lkIFRzU2VjdGlvblBlczo6Rmx1c2goKSB7Ci0gIC8vIFRyeSBlbWl0dGluZyBhIHBhY2tldCBzaW5jZSB3ZSBtaWdodCBoYXZlIGEgcGVuZGluZyBQRVMgcGFja2V0Ci0gIC8vIHdpdGggYW4gdW5kZWZpbmVkIHNpemUuCi0gIEVtaXQodHJ1ZSk7Ci0KLSAgLy8gRmx1c2ggdGhlIHVuZGVybHlpbmcgRVMgcGFyc2VyLgotICBlc19wYXJzZXJfLT5GbHVzaCgpOwotfQotCi12b2lkIFRzU2VjdGlvblBlczo6UmVzZXQoKSB7Ci0gIFJlc2V0UGVzU3RhdGUoKTsKLSAgZXNfcGFyc2VyXy0+UmVzZXQoKTsKLX0KLQotYm9vbCBUc1NlY3Rpb25QZXM6OkVtaXQoYm9vbCBlbWl0X2Zvcl91bmtub3duX3NpemUpIHsKLSAgaW50IHJhd19wZXNfc2l6ZTsKLSAgY29uc3QgdWludDhfdCogcmF3X3BlczsKLSAgcGVzX2J5dGVfcXVldWVfLlBlZWsoJnJhd19wZXMsICZyYXdfcGVzX3NpemUpOwotCi0gIC8vIEEgUEVTIHNob3VsZCBiZSBhdCBsZWFzdCA2IGJ5dGVzLgotICAvLyBXYWl0IGZvciBtb3JlIGRhdGEgdG8gY29tZSBpZiBub3QgZW5vdWdoIGJ5dGVzLgotICBpZiAocmF3X3Blc19zaXplIDwgNikgcmV0dXJuIHRydWU7Ci0KLSAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGVub3VnaCBkYXRhIHRvIHN0YXJ0IHBhcnNpbmcuCi0gIGludCBwZXNfcGFja2V0X2xlbmd0aCA9Ci0gICAgICAoc3RhdGljX2Nhc3Q8aW50PihyYXdfcGVzWzRdKSA8PCA4KSB8IChzdGF0aWNfY2FzdDxpbnQ+KHJhd19wZXNbNV0pKTsKLSAgaWYgKChwZXNfcGFja2V0X2xlbmd0aCA9PSAwICYmICFlbWl0X2Zvcl91bmtub3duX3NpemUpIHx8Ci0gICAgICAocGVzX3BhY2tldF9sZW5ndGggIT0gMCAmJiByYXdfcGVzX3NpemUgPCBwZXNfcGFja2V0X2xlbmd0aCArIDYpKSB7Ci0gICAgLy8gV2FpdCBmb3IgbW9yZSBkYXRhIHRvIGNvbWUgZWl0aGVyIGJlY2F1c2U6Ci0gICAgLy8gLSB0aGVyZSBhcmUgbm90IGVub3VnaCBieXRlcywKLSAgICAvLyAtIG9yIHRoZSBQRVMgc2l6ZSBpcyB1bmtub3duIGFuZCB0aGUgImZvcmNlIGVtaXQiIGZsYWcgaXMgbm90IHNldC4KLSAgICAvLyAgIChQRVMgc2l6ZSBtaWdodCBiZSB1bmtub3duIGZvciB2aWRlbyBQRVMgcGFja2V0KS4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBEVkxPRyhMT0dfTEVWRUxfUEVTKSA8PCAicGVzX3BhY2tldF9sZW5ndGg9IiA8PCBwZXNfcGFja2V0X2xlbmd0aDsKLQotICAvLyBQYXJzZSB0aGUgcGFja2V0LgotICBib29sIHBhcnNlX3Jlc3VsdCA9IFBhcnNlSW50ZXJuYWwocmF3X3BlcywgcmF3X3Blc19zaXplKTsKLQotICAvLyBSZXNldCB0aGUgc3RhdGUuCi0gIFJlc2V0UGVzU3RhdGUoKTsKLQotICByZXR1cm4gcGFyc2VfcmVzdWx0OwotfQotCi1ib29sIFRzU2VjdGlvblBlczo6UGFyc2VJbnRlcm5hbChjb25zdCB1aW50OF90KiByYXdfcGVzLCBpbnQgcmF3X3Blc19zaXplKSB7Ci0gIEJpdFJlYWRlciBiaXRfcmVhZGVyKHJhd19wZXMsIHJhd19wZXNfc2l6ZSk7Ci0KLSAgLy8gUmVhZCB1cCB0byB0aGUgcGVzX3BhY2tldF9sZW5ndGggKDYgYnl0ZXMpLgotICBpbnQgcGFja2V0X3N0YXJ0X2NvZGVfcHJlZml4OwotICBpbnQgc3RyZWFtX2lkOwotICBpbnQgcGVzX3BhY2tldF9sZW5ndGg7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDI0LCAmcGFja2V0X3N0YXJ0X2NvZGVfcHJlZml4KSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDgsICZzdHJlYW1faWQpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXIuUmVhZEJpdHMoMTYsICZwZXNfcGFja2V0X2xlbmd0aCkpOwotCi0gIFJDSEVDSyhwYWNrZXRfc3RhcnRfY29kZV9wcmVmaXggPT0ga1Blc1N0YXJ0Q29kZSk7Ci0gIERWTE9HKExPR19MRVZFTF9QRVMpIDw8ICJzdHJlYW1faWQ9IiA8PCBzdGQ6OmhleCA8PCBzdHJlYW1faWQgPDwgc3RkOjpkZWM7Ci0gIGlmIChwZXNfcGFja2V0X2xlbmd0aCA9PSAwKQotICAgIHBlc19wYWNrZXRfbGVuZ3RoID0gYml0X3JlYWRlci5iaXRzX2F2YWlsYWJsZSgpIC8gODsKLQotICAvLyBJZ25vcmUgdGhlIFBFUyBmb3IgdW5rbm93biBzdHJlYW0gSURzLgotICAvLyBTZWUgSVRVIEguMjIyIFRhYmxlIDItMjIgIlN0cmVhbV9pZCBhc3NpZ25tZW50cyIKLSAgYm9vbCBpc19hdWRpb19zdHJlYW1faWQgPSAoKHN0cmVhbV9pZCAmIDB4ZTApID09IDB4YzApOwotICBib29sIGlzX3ZpZGVvX3N0cmVhbV9pZCA9ICgoc3RyZWFtX2lkICYgMHhmMCkgPT0gMHhlMCk7Ci0gIC8vIEFjY29yZGluZyB0byBFVFNJIERWQiBzdGFuZGFyZCAoRVRTSSBUUyAxMDEgMTU0KSBzZWN0aW9uIDQuMS42LjEKLSAgLy8gQUMtMyBhbmQgRFRTIGF1ZGlvIHN0cmVhbXMgbWF5IGhhdmUgc3RyZWFtX2lkIDB4YmQuIFRoZXNlIHN0cmVhbXMKLSAgLy8gaGF2ZSB0aGUgc2FtZSBzeW50YXggYXMgcmVndWxhciBhdWRpbyBzdHJlYW1zLgotICBib29sIGlzX3ByaXZhdGVfc3RyZWFtXzEgPSAoc3RyZWFtX2lkID09IDB4YmQpOwotICBpZiAoIWlzX2F1ZGlvX3N0cmVhbV9pZCAmJiAhaXNfdmlkZW9fc3RyZWFtX2lkICYmICFpc19wcml2YXRlX3N0cmVhbV8xKSB7Ci0gICAgRFZMT0coTE9HX0xFVkVMX1BFUykgPDwgIkRyb3BwZWQgVHNQYWNrZXQgZm9yIHN0cmVhbV9pZD0weCIgPDwgc3RkOjpoZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdHJlYW1faWQgPDwgc3RkOjpkZWM7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBSZWFkIHVwIHRvICJwZXNfaGVhZGVyX2RhdGFfbGVuZ3RoIi4KLSAgaW50IGR1bW15XzI7Ci0gIGludCBQRVNfc2NyYW1ibGluZ19jb250cm9sOwotICBpbnQgUEVTX3ByaW9yaXR5OwotICBpbnQgZGF0YV9hbGlnbm1lbnRfaW5kaWNhdG9yOwotICBpbnQgY29weXJpZ2h0OwotICBpbnQgb3JpZ2luYWxfb3JfY29weTsKLSAgaW50IHB0c19kdHNfZmxhZ3M7Ci0gIGludCBlc2NyX2ZsYWc7Ci0gIGludCBlc19yYXRlX2ZsYWc7Ci0gIGludCBkc21fdHJpY2tfbW9kZV9mbGFnOwotICBpbnQgYWRkaXRpb25hbF9jb3B5X2luZm9fZmxhZzsKLSAgaW50IHBlc19jcmNfZmxhZzsKLSAgaW50IHBlc19leHRlbnNpb25fZmxhZzsKLSAgaW50IHBlc19oZWFkZXJfZGF0YV9sZW5ndGg7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDIsICZkdW1teV8yKSk7Ci0gIFJDSEVDSyhkdW1teV8yID09IDB4Mik7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDIsICZQRVNfc2NyYW1ibGluZ19jb250cm9sKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDEsICZQRVNfcHJpb3JpdHkpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXIuUmVhZEJpdHMoMSwgJmRhdGFfYWxpZ25tZW50X2luZGljYXRvcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmY29weXJpZ2h0KSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDEsICZvcmlnaW5hbF9vcl9jb3B5KSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDIsICZwdHNfZHRzX2ZsYWdzKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDEsICZlc2NyX2ZsYWcpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXIuUmVhZEJpdHMoMSwgJmVzX3JhdGVfZmxhZykpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmZHNtX3RyaWNrX21vZGVfZmxhZykpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmYWRkaXRpb25hbF9jb3B5X2luZm9fZmxhZykpOwotICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cygxLCAmcGVzX2NyY19mbGFnKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDEsICZwZXNfZXh0ZW5zaW9uX2ZsYWcpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXIuUmVhZEJpdHMoOCwgJnBlc19oZWFkZXJfZGF0YV9sZW5ndGgpKTsKLSAgaW50IHBlc19oZWFkZXJfc3RhcnRfc2l6ZSA9IGJpdF9yZWFkZXIuYml0c19hdmFpbGFibGUoKSAvIDg7Ci0KLSAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUgRVMgcGF5bG9hZC4KLSAgLy8gIjYiIGZvciB0aGUgNiBieXRlcyByZWFkIGJlZm9yZSBhbmQgaW5jbHVkaW5nIHxwZXNfcGFja2V0X2xlbmd0aHwuCi0gIC8vICIzIiBmb3IgdGhlIDMgYnl0ZXMgcmVhZCBiZWZvcmUgYW5kIGluY2x1ZGluZyB8cGVzX2hlYWRlcl9kYXRhX2xlbmd0aHwuCi0gIGludCBlc19zaXplID0gcGVzX3BhY2tldF9sZW5ndGggLSAzIC0gcGVzX2hlYWRlcl9kYXRhX2xlbmd0aDsKLSAgaW50IGVzX29mZnNldCA9IDYgKyAzICsgcGVzX2hlYWRlcl9kYXRhX2xlbmd0aDsKLSAgUkNIRUNLKGVzX3NpemUgPj0gMCk7Ci0gIFJDSEVDSyhlc19vZmZzZXQgKyBlc19zaXplIDw9IHJhd19wZXNfc2l6ZSk7Ci0KLSAgLy8gUmVhZCB0aGUgdGltaW5nIGluZm9ybWF0aW9uIHNlY3Rpb24uCi0gIGJvb2wgaXNfcHRzX3ZhbGlkID0gZmFsc2U7Ci0gIGJvb2wgaXNfZHRzX3ZhbGlkID0gZmFsc2U7Ci0gIGludDY0X3QgcHRzX3NlY3Rpb24gPSAwOwotICBpbnQ2NF90IGR0c19zZWN0aW9uID0gMDsKLSAgaWYgKHB0c19kdHNfZmxhZ3MgPT0gMHgyKSB7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXIuUmVhZEJpdHMoNDAsICZwdHNfc2VjdGlvbikpOwotICAgIFJDSEVDSygoKChwdHNfc2VjdGlvbiA+PiAzNikgJiAweGYpID09IDB4MikgJiYKLSAgICAgICAgICAgSXNUaW1lc3RhbXBTZWN0aW9uVmFsaWQocHRzX3NlY3Rpb24pKTsKLSAgICBpc19wdHNfdmFsaWQgPSB0cnVlOwotICB9Ci0gIGlmIChwdHNfZHRzX2ZsYWdzID09IDB4MykgewotICAgIFJDSEVDSyhiaXRfcmVhZGVyLlJlYWRCaXRzKDQwLCAmcHRzX3NlY3Rpb24pKTsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci5SZWFkQml0cyg0MCwgJmR0c19zZWN0aW9uKSk7Ci0gICAgUkNIRUNLKCgoKHB0c19zZWN0aW9uID4+IDM2KSAmIDB4ZikgPT0gMHgzKSAmJgotICAgICAgICAgICBJc1RpbWVzdGFtcFNlY3Rpb25WYWxpZChwdHNfc2VjdGlvbikpOwotICAgIFJDSEVDSygoKChkdHNfc2VjdGlvbiA+PiAzNikgJiAweGYpID09IDB4MSkgJiYKLSAgICAgICAgICAgSXNUaW1lc3RhbXBTZWN0aW9uVmFsaWQoZHRzX3NlY3Rpb24pKTsKLSAgICBpc19wdHNfdmFsaWQgPSB0cnVlOwotICAgIGlzX2R0c192YWxpZCA9IHRydWU7Ci0gIH0KLQotICAvLyBDb252ZXJ0IGFuZCB1bnJvbGwgdGhlIHRpbWVzdGFtcHMuCi0gIGJhc2U6OlRpbWVEZWx0YSBtZWRpYV9wdHMoa05vVGltZXN0YW1wKTsKLSAgRGVjb2RlVGltZXN0YW1wIG1lZGlhX2R0cyhrTm9EZWNvZGVUaW1lc3RhbXAoKSk7Ci0gIGlmIChpc19wdHNfdmFsaWQpIHsKLSAgICBpbnQ2NF90IHB0cyA9IHRpbWVzdGFtcF91bnJvbGxlcl8tPkdldFVucm9sbGVkVGltZXN0YW1wKAotICAgICAgICBDb252ZXJ0VGltZXN0YW1wU2VjdGlvblRvVGltZXN0YW1wKHB0c19zZWN0aW9uKSk7Ci0gICAgbWVkaWFfcHRzID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKCgxMDAwICogcHRzKSAvIDkwKTsKLSAgfQotICBpZiAoaXNfZHRzX3ZhbGlkKSB7Ci0gICAgaW50NjRfdCBkdHMgPSB0aW1lc3RhbXBfdW5yb2xsZXJfLT5HZXRVbnJvbGxlZFRpbWVzdGFtcCgKLSAgICAgICAgQ29udmVydFRpbWVzdGFtcFNlY3Rpb25Ub1RpbWVzdGFtcChkdHNfc2VjdGlvbikpOwotICAgIG1lZGlhX2R0cyA9IERlY29kZVRpbWVzdGFtcDo6RnJvbU1pY3Jvc2Vjb25kcygoMTAwMCAqIGR0cykgLyA5MCk7Ci0gIH0KLQotICAvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBQRVMgcGFja2V0IGhlYWRlci4KLSAgLy8gVE9ETyhkYW1pZW52KTogY2hlY2sgaWYgc29tZSBpbmZvIG9mIHRoZSBQRVMgcGFja2V0IGhlYWRlciBhcmUgdXNlZnVsLgotICBEQ0hFQ0tfRVEoYml0X3JlYWRlci5iaXRzX2F2YWlsYWJsZSgpICUgOCwgMCk7Ci0gIGludCBwZXNfaGVhZGVyX3JlbWFpbmluZ19zaXplID0KLSAgICAgIHBlc19oZWFkZXJfZGF0YV9sZW5ndGggLQotICAgICAgKHBlc19oZWFkZXJfc3RhcnRfc2l6ZSAtIGJpdF9yZWFkZXIuYml0c19hdmFpbGFibGUoKSAvIDgpOwotICBSQ0hFQ0socGVzX2hlYWRlcl9yZW1haW5pbmdfc2l6ZSA+PSAwKTsKLQotICAvLyBSZWFkIHRoZSBQRVMgcGFja2V0LgotICBEVkxPRyhMT0dfTEVWRUxfUEVTKSA8PCAiRW1pdCBhIHJlYXNzZW1ibGVkIFBFUzoiCi0gICAgICAgICAgICAgICAgICAgICAgIDw8ICIgc2l6ZT0iIDw8IGVzX3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBwdHM9IiA8PCBtZWRpYV9wdHMuSW5NaWxsaXNlY29uZHMoKQotICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGR0cz0iIDw8IG1lZGlhX2R0cy5Jbk1pbGxpc2Vjb25kcygpCi0gICAgICAgICAgICAgICAgICAgICAgIDw8ICIgZGF0YV9hbGlnbm1lbnRfaW5kaWNhdG9yPSIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgZGF0YV9hbGlnbm1lbnRfaW5kaWNhdG9yOwotICByZXR1cm4gZXNfcGFyc2VyXy0+UGFyc2UoJnJhd19wZXNbZXNfb2Zmc2V0XSwgZXNfc2l6ZSwgbWVkaWFfcHRzLCBtZWRpYV9kdHMpOwotfQotCi12b2lkIFRzU2VjdGlvblBlczo6UmVzZXRQZXNTdGF0ZSgpIHsKLSAgcGVzX2J5dGVfcXVldWVfLlJlc2V0KCk7Ci0gIHdhaXRfZm9yX3B1c2lfID0gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wMnQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3Blcy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3Blcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzVkNzc0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUEVTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QMlRfVFNfU0VDVElPTl9QRVNfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJiYXNlL21hY3Jvcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2J5dGVfcXVldWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb24uaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1jbGFzcyBFc1BhcnNlcjsKLWNsYXNzIFRpbWVzdGFtcFVucm9sbGVyOwotCi1jbGFzcyBUc1NlY3Rpb25QZXMgOiBwdWJsaWMgVHNTZWN0aW9uIHsKLSBwdWJsaWM6Ci0gIFRzU2VjdGlvblBlcyhzdGQ6OnVuaXF1ZV9wdHI8RXNQYXJzZXI+IGVzX3BhcnNlciwKLSAgICAgICAgICAgICAgIFRpbWVzdGFtcFVucm9sbGVyKiB0aW1lc3RhbXBfdW5yb2xsZXIpOwotICB+VHNTZWN0aW9uUGVzKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gVHNTZWN0aW9uIGltcGxlbWVudGF0aW9uLgotICBib29sIFBhcnNlKGJvb2wgcGF5bG9hZF91bml0X3N0YXJ0X2luZGljYXRvciwgY29uc3QgdWludDhfdCogYnVmLAotICAgICAgICAgICAgIGludCBzaXplKSBvdmVycmlkZTsKLSAgdm9pZCBGbHVzaCgpIG92ZXJyaWRlOwotICB2b2lkIFJlc2V0KCkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBFbWl0IGEgcmVhc3NlbWJsZWQgUEVTIHBhY2tldC4KLSAgLy8gUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4KLSAgLy8gfGVtaXRfZm9yX3Vua25vd25fc2l6ZXwgaXMgdXNlZCB0byBmb3JjZSBlbWlzc2lvbiBmb3IgUEVTIHBhY2tldHMKLSAgLy8gd2hvc2Ugc2l6ZSBpcyB1bmtub3duLgotICBib29sIEVtaXQoYm9vbCBlbWl0X2Zvcl91bmtub3duX3NpemUpOwotCi0gIC8vIFBhcnNlIGEgUEVTIHBhY2tldCwgcmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4KLSAgYm9vbCBQYXJzZUludGVybmFsKGNvbnN0IHVpbnQ4X3QqIHJhd19wZXMsIGludCByYXdfcGVzX3NpemUpOwotCi0gIHZvaWQgUmVzZXRQZXNTdGF0ZSgpOwotCi0gIC8vIEJ5dGVzIG9mIHRoZSBjdXJyZW50IFBFUy4KLSAgQnl0ZVF1ZXVlIHBlc19ieXRlX3F1ZXVlXzsKLQotICAvLyBFUyBwYXJzZXIuCi0gIHN0ZDo6dW5pcXVlX3B0cjxFc1BhcnNlcj4gZXNfcGFyc2VyXzsKLQotICAvLyBEbyBub3Qgc3RhcnQgcGFyc2luZyBiZWZvcmUgZ2V0dGluZyBhIHVuaXQgc3RhcnQgaW5kaWNhdG9yLgotICBib29sIHdhaXRfZm9yX3B1c2lfOwotCi0gIC8vIFVzZWQgdG8gdW5yb2xsIFBUUyBhbmQgRFRTLgotICBUaW1lc3RhbXBVbnJvbGxlciogY29uc3QgdGltZXN0YW1wX3Vucm9sbGVyXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHNTZWN0aW9uUGVzKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUEVTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcG10LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BtdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxYjdhNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcG10LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wbXQuaCIKLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYml0X3JlYWRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvbXAydF9jb21tb24uaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1Uc1NlY3Rpb25QbXQ6OlRzU2VjdGlvblBtdChjb25zdCBSZWdpc3RlclBlc0NiJiByZWdpc3Rlcl9wZXNfY2IpCi0gICAgOiByZWdpc3Rlcl9wZXNfY2JfKHJlZ2lzdGVyX3Blc19jYikge30KLQotVHNTZWN0aW9uUG10Ojp+VHNTZWN0aW9uUG10KCkge30KLQotYm9vbCBUc1NlY3Rpb25QbXQ6OlBhcnNlUHNpU2VjdGlvbihCaXRSZWFkZXIqIGJpdF9yZWFkZXIpIHsKLSAgLy8gUmVhZCB1cCB0byB8bGFzdF9zZWN0aW9uX251bWJlcnwuCi0gIGludCB0YWJsZV9pZDsKLSAgaW50IHNlY3Rpb25fc3ludGF4X2luZGljYXRvcjsKLSAgaW50IGR1bW15X3plcm87Ci0gIGludCByZXNlcnZlZDsKLSAgaW50IHNlY3Rpb25fbGVuZ3RoOwotICBpbnQgcHJvZ3JhbV9udW1iZXI7Ci0gIGludCB2ZXJzaW9uX251bWJlcjsKLSAgaW50IGN1cnJlbnRfbmV4dF9pbmRpY2F0b3I7Ci0gIGludCBzZWN0aW9uX251bWJlcjsKLSAgaW50IGxhc3Rfc2VjdGlvbl9udW1iZXI7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cyg4LCAmdGFibGVfaWQpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZkdW1teV96ZXJvKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygyLCAmcmVzZXJ2ZWQpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEyLCAmc2VjdGlvbl9sZW5ndGgpKTsKLSAgaW50IHNlY3Rpb25fc3RhcnRfbWFya2VyID0gYml0X3JlYWRlci0+Yml0c19hdmFpbGFibGUoKSAvIDg7Ci0KLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDE2LCAmcHJvZ3JhbV9udW1iZXIpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDIsICZyZXNlcnZlZCkpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoNSwgJnZlcnNpb25fbnVtYmVyKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmY3VycmVudF9uZXh0X2luZGljYXRvcikpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoOCwgJnNlY3Rpb25fbnVtYmVyKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cyg4LCAmbGFzdF9zZWN0aW9uX251bWJlcikpOwotCi0gIC8vIFBlcmZvcm0gYSBmZXcgdmVyaWZpY2F0aW9uczoKLSAgLy8gLSB0YWJsZSBJRCBzaG91bGQgYmUgMiBmb3IgYSBQTVQuCi0gIC8vIC0gc2VjdGlvbl9zeW50YXhfaW5kaWNhdG9yIHNob3VsZCBiZSBvbmUuCi0gIC8vIC0gc2VjdGlvbiBsZW5ndGggc2hvdWxkIG5vdCBleGNlZWQgMTAyMS4KLSAgUkNIRUNLKHRhYmxlX2lkID09IDB4Mik7Ci0gIFJDSEVDSyhzZWN0aW9uX3N5bnRheF9pbmRpY2F0b3IpOwotICBSQ0hFQ0soIWR1bW15X3plcm8pOwotICBSQ0hFQ0soc2VjdGlvbl9sZW5ndGggPD0gMTAyMSk7Ci0gIFJDSEVDSyhzZWN0aW9uX251bWJlciA9PSAwKTsKLSAgUkNIRUNLKGxhc3Rfc2VjdGlvbl9udW1iZXIgPT0gMCk7Ci0KLSAgLy8gVE9ETyhkYW1pZW52KToKLSAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgbm8gbWlzbWF0Y2ggYmV0d2VlbiB0aGUgcHJvZ3JhbSBudW1iZXIKLSAgLy8gYW5kIHRoZSBwcm9ncmFtIG51bWJlciB0aGF0IHdhcyBwcm92aWRlZCBpbiBhIFBBVCBmb3IgdGhlIGN1cnJlbnQgUE1ULgotCi0gIC8vIFJlYWQgdGhlIGVuZCBvZiB0aGUgZml4ZWQgbGVuZ3RoIHNlY3Rpb24uCi0gIGludCBwY3JfcGlkOwotICBpbnQgcHJvZ3JhbV9pbmZvX2xlbmd0aDsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDMsICZyZXNlcnZlZCkpOwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMTMsICZwY3JfcGlkKSk7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cyg0LCAmcmVzZXJ2ZWQpKTsKLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEyLCAmcHJvZ3JhbV9pbmZvX2xlbmd0aCkpOwotICBSQ0hFQ0socHJvZ3JhbV9pbmZvX2xlbmd0aCA8IDEwMjQpOwotCi0gIC8vIFJlYWQgdGhlIHByb2dyYW0gaW5mbyBkZXNjcmlwdG9yLgotICAvLyBUT0RPKGRhbWllbnYpOiBjaGVjayB3aGV0aGVyIGFueSBvZiB0aGUgZGVzY3JpcHRvcnMgY291bGQgYmUgdXNlZnVsLgotICAvLyBEZWZpbmVkIGluIHNlY3Rpb24gMi42IG9mIElTTy0xMzgxOC4KLSAgUkNIRUNLKGJpdF9yZWFkZXItPlNraXBCaXRzKDggKiBwcm9ncmFtX2luZm9fbGVuZ3RoKSk7Ci0KLSAgLy8gUmVhZCB0aGUgRVMgZGVzY3JpcHRpb24gdGFibGUuCi0gIC8vIFRoZSBlbmQgb2YgdGhlIFBJRCBtYXAgaWYgNCBieXRlcyBhd2F5IGZyb20gdGhlIGVuZCBvZiB0aGUgc2VjdGlvbgotICAvLyAoNCBieXRlcyA9IHNpemUgb2YgdGhlIENSQykuCi0gIGludCBwaWRfbWFwX2VuZF9tYXJrZXIgPSBzZWN0aW9uX3N0YXJ0X21hcmtlciAtIHNlY3Rpb25fbGVuZ3RoICsgNDsKLSAgc3RkOjptYXA8aW50LCBpbnQ+IHBpZF9tYXA7Ci0gIHdoaWxlIChiaXRfcmVhZGVyLT5iaXRzX2F2YWlsYWJsZSgpID4gOCAqIHBpZF9tYXBfZW5kX21hcmtlcikgewotICAgIGludCBzdHJlYW1fdHlwZTsKLSAgICBpbnQgcmVzZXJ2ZWQ7Ci0gICAgaW50IHBpZF9lczsKLSAgICBpbnQgZXNfaW5mb19sZW5ndGg7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDgsICZzdHJlYW1fdHlwZSkpOwotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygzLCAmcmVzZXJ2ZWQpKTsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMTMsICZwaWRfZXMpKTsKLSAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoNCwgJnJlc2VydmVkKSk7Ci0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEyLCAmZXNfaW5mb19sZW5ndGgpKTsKLQotICAgIC8vIERvIG5vdCByZWdpc3RlciB0aGUgUElEIHJpZ2h0IGF3YXkuCi0gICAgLy8gV2FpdCBmb3IgdGhlIGVuZCBvZiB0aGUgc2VjdGlvbiB0byBiZSBmdWxseSBwYXJzZWQKLSAgICAvLyB0byBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gZXJyb3IuCi0gICAgcGlkX21hcC5pbnNlcnQoc3RkOjpwYWlyPGludCwgaW50PihwaWRfZXMsIHN0cmVhbV90eXBlKSk7Ci0KLSAgICAvLyBSZWFkIHRoZSBFUyBpbmZvIGRlc2NyaXB0b3JzLgotICAgIC8vIFRPRE8oZGFtaWVudik6IGNoZWNrIHdoZXRoZXIgYW55IG9mIHRoZSBkZXNjcmlwdG9ycyBjb3VsZCBiZSB1c2VmdWwuCi0gICAgLy8gRGVmaW5lZCBpbiBzZWN0aW9uIDIuNiBvZiBJU08tMTM4MTguCi0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlNraXBCaXRzKDggKiBlc19pbmZvX2xlbmd0aCkpOwotICB9Ci0KLSAgLy8gUmVhZCB0aGUgQ1JDLgotICBpbnQgY3JjMzI7Ci0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygzMiwgJmNyYzMyKSk7Ci0KLSAgLy8gT25jZSB0aGUgUE1UIGhhcyBiZWVuIHByb3ZlZCB0byBiZSBjb3JyZWN0LCByZWdpc3RlciB0aGUgUElEcy4KLSAgZm9yIChzdGQ6Om1hcDxpbnQsIGludD46Oml0ZXJhdG9yIGl0ID0gcGlkX21hcC5iZWdpbigpOyBpdCAhPSBwaWRfbWFwLmVuZCgpOwotICAgICAgICsraXQpCi0gICAgcmVnaXN0ZXJfcGVzX2NiXy5SdW4oaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUc1NlY3Rpb25QbXQ6OlJlc2V0UHNpU2VjdGlvbigpIHt9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wbXQuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wbXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2MmRhNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcG10LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9UU19TRUNUSU9OX1BNVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUE1UX0hfCi0KLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImJhc2UvbWFjcm9zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BzaS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIFRzU2VjdGlvblBtdCA6IHB1YmxpYyBUc1NlY3Rpb25Qc2kgewotIHB1YmxpYzoKLSAgLy8gUmVnaXN0ZXJQZXNDYjo6UnVuKGludCBwZXNfcGlkLCBpbnQgc3RyZWFtX3R5cGUpOwotICAvLyBTdHJlYW0gdHlwZSBpcyBkZWZpbmVkIGluCi0gIC8vICJUYWJsZSAyLTM0IOKAkyBTdHJlYW0gdHlwZSBhc3NpZ25tZW50cyIgaW4gSC4yMjIKLSAgLy8gVE9ETyhkYW1pZW52KTogYWRkIHRoZSBwcm9ncmFtIG51bWJlci4KLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGludCwgaW50KT4gUmVnaXN0ZXJQZXNDYjsKLQotICBleHBsaWNpdCBUc1NlY3Rpb25QbXQoY29uc3QgUmVnaXN0ZXJQZXNDYiYgcmVnaXN0ZXJfcGVzX2NiKTsKLSAgflRzU2VjdGlvblBtdCgpIG92ZXJyaWRlOwotCi0gIC8vIE1wZWcyVHNQc2lQYXJzZXIgaW1wbGVtZW50YXRpb24uCi0gIGJvb2wgUGFyc2VQc2lTZWN0aW9uKEJpdFJlYWRlciogYml0X3JlYWRlcikgb3ZlcnJpZGU7Ci0gIHZvaWQgUmVzZXRQc2lTZWN0aW9uKCkgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICBSZWdpc3RlclBlc0NiIHJlZ2lzdGVyX3Blc19jYl87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRzU2VjdGlvblBtdCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXAydAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9UU19TRUNUSU9OX1BNVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BzaS5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wc2kuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmODA5YWUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uX3BzaS5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcHNpLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC9tcDJ0X2NvbW1vbi5oIgotCi1zdGF0aWMgYm9vbCBJc0NyY1ZhbGlkKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgdWludDMyX3QgY3JjID0gMHhmZmZmZmZmZnU7Ci0gIGNvbnN0IHVpbnQzMl90IGtDcmNQb2x5ID0gMHg0YzExZGI3OwotCi0gIGZvciAoaW50IGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7Ci0gICAgaW50IG5iaXRzID0gODsKLSAgICB1aW50MzJfdCBkYXRhX21zYl9hbGlnbmVkID0gYnVmW2tdOwotICAgIGRhdGFfbXNiX2FsaWduZWQgPDw9ICgzMiAtIG5iaXRzKTsKLQotICAgIHdoaWxlIChuYml0cyA+IDApIHsKLSAgICAgIGlmICgoZGF0YV9tc2JfYWxpZ25lZCBeIGNyYykgJiAweDgwMDAwMDAwKSB7Ci0gICAgICAgIGNyYyA8PD0gMTsKLSAgICAgICAgY3JjIF49IGtDcmNQb2x5OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY3JjIDw8PSAxOwotICAgICAgfQotCi0gICAgICBkYXRhX21zYl9hbGlnbmVkIDw8PSAxOwotICAgICAgbmJpdHMtLTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gKGNyYyA9PSAwKTsKLX0KLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wMnQgewotCi1Uc1NlY3Rpb25Qc2k6OlRzU2VjdGlvblBzaSgpCi0gICAgOiB3YWl0X2Zvcl9wdXNpXyh0cnVlKSwgbGVhZGluZ19ieXRlc190b19kaXNjYXJkXygwKSB7fQotCi1Uc1NlY3Rpb25Qc2k6On5Uc1NlY3Rpb25Qc2koKSB7fQotCi1ib29sIFRzU2VjdGlvblBzaTo6UGFyc2UoYm9vbCBwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yLCBjb25zdCB1aW50OF90KiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpIHsKLSAgLy8gSWdub3JlIHBhcnRpYWwgUFNJLgotICBpZiAod2FpdF9mb3JfcHVzaV8gJiYgIXBheWxvYWRfdW5pdF9zdGFydF9pbmRpY2F0b3IpIHJldHVybiB0cnVlOwotCi0gIGlmIChwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yKSB7Ci0gICAgLy8gUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBQU0kgc2VjdGlvbi4KLSAgICBSZXNldFBzaVN0YXRlKCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHN0YXRlLgotICAgIHdhaXRfZm9yX3B1c2lfID0gZmFsc2U7Ci0gICAgRENIRUNLX0dFKHNpemUsIDEpOwotICAgIGludCBwb2ludGVyX2ZpZWxkID0gYnVmWzBdOwotICAgIGxlYWRpbmdfYnl0ZXNfdG9fZGlzY2FyZF8gPSBwb2ludGVyX2ZpZWxkOwotICAgIGJ1ZisrOwotICAgIHNpemUtLTsKLSAgfQotCi0gIC8vIERpc2NhcmQgc29tZSBsZWFkaW5nIGJ5dGVzIGlmIG5lZWRlZC4KLSAgaWYgKGxlYWRpbmdfYnl0ZXNfdG9fZGlzY2FyZF8gPiAwKSB7Ci0gICAgaW50IG5ieXRlc190b19kaXNjYXJkID0gc3RkOjptaW4obGVhZGluZ19ieXRlc190b19kaXNjYXJkXywgc2l6ZSk7Ci0gICAgYnVmICs9IG5ieXRlc190b19kaXNjYXJkOwotICAgIHNpemUgLT0gbmJ5dGVzX3RvX2Rpc2NhcmQ7Ci0gICAgbGVhZGluZ19ieXRlc190b19kaXNjYXJkXyAtPSBuYnl0ZXNfdG9fZGlzY2FyZDsKLSAgfQotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdHJ1ZTsKLQotICAvLyBBZGQgdGhlIGRhdGEgdG8gdGhlIHBhcnNlciBzdGF0ZS4KLSAgcHNpX2J5dGVfcXVldWVfLlB1c2goYnVmLCBzaXplKTsKLSAgaW50IHJhd19wc2lfc2l6ZTsKLSAgY29uc3QgdWludDhfdCogcmF3X3BzaTsKLSAgcHNpX2J5dGVfcXVldWVfLlBlZWsoJnJhd19wc2ksICZyYXdfcHNpX3NpemUpOwotCi0gIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBzdGFydCBwYXJzaW5nLgotICBpZiAocmF3X3BzaV9zaXplIDwgMykgcmV0dXJuIHRydWU7Ci0gIGludCBzZWN0aW9uX2xlbmd0aCA9Ci0gICAgICAoKHN0YXRpY19jYXN0PGludD4ocmF3X3BzaVsxXSkgPDwgOCkgfCAoc3RhdGljX2Nhc3Q8aW50PihyYXdfcHNpWzJdKSkpICYKLSAgICAgIDB4ZmZmOwotICBpZiAoc2VjdGlvbl9sZW5ndGggPj0gMTAyMSkgcmV0dXJuIGZhbHNlOwotICBpbnQgcHNpX2xlbmd0aCA9IHNlY3Rpb25fbGVuZ3RoICsgMzsKLSAgaWYgKHJhd19wc2lfc2l6ZSA8IHBzaV9sZW5ndGgpIHsKLSAgICAvLyBEb24ndCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggZGF0YSwKLSAgICAvLyBqdXN0IHdhaXQgZm9yIG1vcmUgZGF0YSB0byBjb21lLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gVGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgdHJhaWxpbmcgYnl0ZXMgYWZ0ZXIgYSBQTVQuCi0gIC8vIEluc3RlYWQsIHRoZSBwb2ludGVyIGZpZWxkIHNob3VsZCBiZSB1c2VkIHRvIHN0dWZmIGJ5dGVzLgotICBEVkxPR19JRigxLCByYXdfcHNpX3NpemUgPiBwc2lfbGVuZ3RoKQotICAgICAgPDwgIlRyYWlsaW5nIGJ5dGVzIGFmdGVyIGEgUFNJIHNlY3Rpb246ICIgPDwgcHNpX2xlbmd0aCA8PCAiIHZzICIKLSAgICAgIDw8IHJhd19wc2lfc2l6ZTsKLQotICAvLyBWZXJpZnkgdGhlIENSQy4KLSAgUkNIRUNLKElzQ3JjVmFsaWQocmF3X3BzaSwgcHNpX2xlbmd0aCkpOwotCi0gIC8vIFBhcnNlIHRoZSBQU0kgc2VjdGlvbi4KLSAgQml0UmVhZGVyIGJpdF9yZWFkZXIocmF3X3BzaSwgcmF3X3BzaV9zaXplKTsKLSAgYm9vbCBzdGF0dXMgPSBQYXJzZVBzaVNlY3Rpb24oJmJpdF9yZWFkZXIpOwotICBpZiAoc3RhdHVzKSBSZXNldFBzaVN0YXRlKCk7Ci0KLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotdm9pZCBUc1NlY3Rpb25Qc2k6OkZsdXNoKCkge30KLQotdm9pZCBUc1NlY3Rpb25Qc2k6OlJlc2V0KCkgewotICBSZXNldFBzaVNlY3Rpb24oKTsKLSAgUmVzZXRQc2lTdGF0ZSgpOwotfQotCi12b2lkIFRzU2VjdGlvblBzaTo6UmVzZXRQc2lTdGF0ZSgpIHsKLSAgd2FpdF9mb3JfcHVzaV8gPSB0cnVlOwotICBwc2lfYnl0ZV9xdWV1ZV8uUmVzZXQoKTsKLSAgbGVhZGluZ19ieXRlc190b19kaXNjYXJkXyA9IDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wc2kuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wMnQvdHNfc2VjdGlvbl9wc2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg0MGRkMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDJ0L3RzX3NlY3Rpb25fcHNpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVAyVF9UU19TRUNUSU9OX1BTSV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUFNJX0hfCi0KLSNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCi0jaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9ieXRlX3F1ZXVlLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXAydC90c19zZWN0aW9uLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQml0UmVhZGVyOwotCi1uYW1lc3BhY2UgbXAydCB7Ci0KLWNsYXNzIFRzU2VjdGlvblBzaSA6IHB1YmxpYyBUc1NlY3Rpb24gewotIHB1YmxpYzoKLSAgVHNTZWN0aW9uUHNpKCk7Ci0gIH5Uc1NlY3Rpb25Qc2koKSBvdmVycmlkZTsKLQotICAvLyBUc1NlY3Rpb24gaW1wbGVtZW50YXRpb24uCi0gIGJvb2wgUGFyc2UoYm9vbCBwYXlsb2FkX3VuaXRfc3RhcnRfaW5kaWNhdG9yLCBjb25zdCB1aW50OF90KiBidWYsCi0gICAgICAgICAgICAgaW50IHNpemUpIG92ZXJyaWRlOwotICB2b2lkIEZsdXNoKCkgb3ZlcnJpZGU7Ci0gIHZvaWQgUmVzZXQoKSBvdmVycmlkZTsKLQotICAvLyBQYXJzZSB0aGUgY29udGVudCBvZiB0aGUgUFNJIHNlY3Rpb24uCi0gIHZpcnR1YWwgYm9vbCBQYXJzZVBzaVNlY3Rpb24oQml0UmVhZGVyKiBiaXRfcmVhZGVyKSA9IDA7Ci0KLSAgLy8gUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBQU0kgc2VjdGlvbi4KLSAgdmlydHVhbCB2b2lkIFJlc2V0UHNpU2VjdGlvbigpID0gMDsKLQotIHByaXZhdGU6Ci0gIHZvaWQgUmVzZXRQc2lTdGF0ZSgpOwotCi0gIC8vIEJ5dGVzIG9mIHRoZSBjdXJyZW50IFBTSS4KLSAgQnl0ZVF1ZXVlIHBzaV9ieXRlX3F1ZXVlXzsKLQotICAvLyBEbyBub3Qgc3RhcnQgcGFyc2luZyBiZWZvcmUgZ2V0dGluZyBhIHVuaXQgc3RhcnQgaW5kaWNhdG9yLgotICBib29sIHdhaXRfZm9yX3B1c2lfOwotCi0gIC8vIE51bWJlciBvZiBsZWFkaW5nIGJ5dGVzIHRvIGRpc2NhcmQgKHBvaW50ZXIgZmllbGQpLgotICBpbnQgbGVhZGluZ19ieXRlc190b19kaXNjYXJkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHNTZWN0aW9uUHNpKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDJ0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDJUX1RTX1NFQ1RJT05fUFNJX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYWFjLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhYy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwZGRiNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYWFjLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWMuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpdF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvcmNoZWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXA0IHsKLQotQUFDOjpBQUMoKQotICAgIDogcHJvZmlsZV8oMCksCi0gICAgICBmcmVxdWVuY3lfaW5kZXhfKDApLAotICAgICAgY2hhbm5lbF9jb25maWdfKDApLAotICAgICAgZnJlcXVlbmN5XygwKSwKLSAgICAgIGV4dGVuc2lvbl9mcmVxdWVuY3lfKDApLAotICAgICAgY2hhbm5lbF9sYXlvdXRfKENIQU5ORUxfTEFZT1VUX1VOU1VQUE9SVEVEKSB7fQotCi1BQUM6OkFBQyhjb25zdCBBQUMmIG90aGVyKSB7ICp0aGlzID0gb3RoZXI7IH0KLQotQUFDOjp+QUFDKCkge30KLQotYm9vbCBBQUM6OlBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBkYXRhLAotICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgY29kZWNfc3BlY2lmaWNfZGF0YV8gPSBkYXRhOwotCi0gIGlmIChkYXRhLmVtcHR5KCkpIHJldHVybiBmYWxzZTsKLQotICBCaXRSZWFkZXIgcmVhZGVyKCZkYXRhWzBdLCBkYXRhLnNpemUoKSk7Ci0gIHVpbnQ4X3QgZXh0ZW5zaW9uX3R5cGUgPSAwOwotICBib29sIHBzX3ByZXNlbnQgPSBmYWxzZTsKLSAgdWludDhfdCBleHRlbnNpb25fZnJlcXVlbmN5X2luZGV4ID0gMHhmZjsKLQotICBmcmVxdWVuY3lfID0gMDsKLSAgZXh0ZW5zaW9uX2ZyZXF1ZW5jeV8gPSAwOwotCi0gIC8vIFBhcnNpbmcgYmVsb3cgaXMgYSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIElTTyAxNDQ5Ni0zOjIwMDkgdGhhdCBjb3ZlcnMKLSAgLy8gcHJvZmlsZXMgaW4gcmFuZ2Ugb2YgWzEsIDRdIGFzIHdlbGwgYXMgU0JSICg1KSBhbmQgUFMgKDI5KSBleHRlbnNpb25zLgotCi0gIC8vIFJlYWQgYmFzZSBjb25maWd1cmF0aW9uCi0gIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoNSwgJnByb2ZpbGVfKSk7Ci0gIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoNCwgJmZyZXF1ZW5jeV9pbmRleF8pKTsKLSAgaWYgKGZyZXF1ZW5jeV9pbmRleF8gPT0gMHhmKSBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDI0LCAmZnJlcXVlbmN5XykpOwotICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDQsICZjaGFubmVsX2NvbmZpZ18pKTsKLQotICAvLyBSZWFkIGV4dGVuc2lvbiBjb25maWd1cmF0aW9uIGZvciBleHBsaWNpdGx5IHNpZ25hbGVkIEhFLUFBQyBwcm9maWxlcwotICAvLyA1ID0gSEV2MSAoU3BlY3RyYWwgQmFuZCBSZXBsaWNhdGlvbiksIDI5ID0gSEV2MiAoUGFyYW1ldHJpYyBTdGVyZW8pLgotICBpZiAocHJvZmlsZV8gPT0gNSB8fCBwcm9maWxlXyA9PSAyOSkgewotICAgIHBzX3ByZXNlbnQgPSAocHJvZmlsZV8gPT0gMjkpOwotICAgIGV4dGVuc2lvbl90eXBlID0gNTsKLSAgICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDQsICZleHRlbnNpb25fZnJlcXVlbmN5X2luZGV4KSk7Ci0gICAgaWYgKGV4dGVuc2lvbl9mcmVxdWVuY3lfaW5kZXggPT0gMHhmKQotICAgICAgUkNIRUNLKHJlYWRlci5SZWFkQml0cygyNCwgJmV4dGVuc2lvbl9mcmVxdWVuY3lfKSk7Ci0gICAgLy8gV2l0aCBIRSBleHRlbnNpb25zIG5vdyBrbm93biwgZGV0ZXJtaW5lIHVuZGVybHlpbmcgcHJvZmlsZS4KLSAgICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDUsICZwcm9maWxlXykpOwotICB9Ci0KLSAgLy8gUGFyc2luZyBub3QgaW1wbGVtZW50ZWQgZm9yIHByb2ZpbGVzIG91dHNpZGUgdGhpcyByYW5nZSwgc28gZXJyb3Igb3V0LiBOb3RlCi0gIC8vIHRoYXQgdmFsdWVzIG9mIDUgKEhFLUFBQ3YxKSBhbmQgMjkgKEhFLUFBQ3YyKSBhcmUgcGFyc2VkIGFib3ZlIGFuZCB0aGUKLSAgLy8gdmFsdWUgb2YgcHJvZmlsZV8gbXVzdCBub3cgcmVmbGVjdCB0aGUgdGhlIHVuZGVybHlpbmcgcHJvZmlsZSBiZWluZyB1c2VkCi0gIC8vIHdpdGggdGhvc2UgZXh0ZW5zaW9ucyAodGhlc2UgZXh0ZW5zaW9ucyBhcmUgc3VwcG9ydGVkKS4KLSAgLy8gMSA9IEFBQyBtYWluLCAyID0gQUFDIExDLCAzID0gQUFDIFNTUiwgNCA9IEFBQyBMVFAKLSAgaWYgKHByb2ZpbGVfIDwgMSB8fCBwcm9maWxlXyA+IDQpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZykKLSAgICAgICAgPDwgIkF1ZGlvIGNvZGVjKG1wNGEuNDAuIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHByb2ZpbGVfKQotICAgICAgICA8PCAiKSBpcyBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgUkNIRUNLKFNraXBEZWNvZGVyR0FTcGVjaWZpY0NvbmZpZygmcmVhZGVyKSk7Ci0KLSAgLy8gUmVhZCBleHRlbnNpb24gY29uZmlndXJhdGlvbiBhZ2FpbgotICAvLyBOb3RlOiBUaGUgY2hlY2sgZm9yIDE2IGF2YWlsYWJsZSBiaXRzIGNvbWVzIGZyb20gdGhlIEFBQyBzcGVjLgotICBpZiAoZXh0ZW5zaW9uX3R5cGUgIT0gNSAmJiByZWFkZXIuYml0c19hdmFpbGFibGUoKSA+PSAxNikgewotICAgIHVpbnQxNl90IHN5bmNfZXh0ZW5zaW9uX3R5cGU7Ci0gICAgdWludDhfdCBzYnJfcHJlc2VudF9mbGFnOwotICAgIHVpbnQ4X3QgcHNfcHJlc2VudF9mbGFnOwotCi0gICAgaWYgKHJlYWRlci5SZWFkQml0cygxMSwgJnN5bmNfZXh0ZW5zaW9uX3R5cGUpICYmCi0gICAgICAgIHN5bmNfZXh0ZW5zaW9uX3R5cGUgPT0gMHgyYjcpIHsKLSAgICAgIGlmIChyZWFkZXIuUmVhZEJpdHMoNSwgJmV4dGVuc2lvbl90eXBlKSAmJiBleHRlbnNpb25fdHlwZSA9PSA1KSB7Ci0gICAgICAgIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoMSwgJnNicl9wcmVzZW50X2ZsYWcpKTsKLQotICAgICAgICBpZiAoc2JyX3ByZXNlbnRfZmxhZykgewotICAgICAgICAgIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoNCwgJmV4dGVuc2lvbl9mcmVxdWVuY3lfaW5kZXgpKTsKLQotICAgICAgICAgIGlmIChleHRlbnNpb25fZnJlcXVlbmN5X2luZGV4ID09IDB4ZikKLSAgICAgICAgICAgIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoMjQsICZleHRlbnNpb25fZnJlcXVlbmN5XykpOwotCi0gICAgICAgICAgLy8gTm90ZTogVGhlIGNoZWNrIGZvciAxMiBhdmFpbGFibGUgYml0cyBjb21lcyBmcm9tIHRoZSBBQUMgc3BlYy4KLSAgICAgICAgICBpZiAocmVhZGVyLmJpdHNfYXZhaWxhYmxlKCkgPj0gMTIpIHsKLSAgICAgICAgICAgIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoMTEsICZzeW5jX2V4dGVuc2lvbl90eXBlKSk7Ci0gICAgICAgICAgICBpZiAoc3luY19leHRlbnNpb25fdHlwZSA9PSAweDU0OCkgewotICAgICAgICAgICAgICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDEsICZwc19wcmVzZW50X2ZsYWcpKTsKLSAgICAgICAgICAgICAgcHNfcHJlc2VudCA9IHBzX3ByZXNlbnRfZmxhZyAhPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChmcmVxdWVuY3lfID09IDApIHsKLSAgICBpZiAoZnJlcXVlbmN5X2luZGV4XyA+PSBrQURUU0ZyZXF1ZW5jeVRhYmxlU2l6ZSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2cpCi0gICAgICAgICAgPDwgIlNhbXBsaW5nIEZyZXF1ZW5jeSBJbmRleCgweCIgPDwgc3RkOjpoZXgKLSAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxpbnQ+KGZyZXF1ZW5jeV9pbmRleF8pCi0gICAgICAgICAgPDwgIikgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHNlZSBJU08gMTQ0OTYtMzoyMDA5IFRhYmxlIDEuMTggIgotICAgICAgICAgIDw8ICJmb3Igc3VwcG9ydGVkIFNhbXBsaW5nIEZyZXF1ZW5jaWVzLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZyZXF1ZW5jeV8gPSBrQURUU0ZyZXF1ZW5jeVRhYmxlW2ZyZXF1ZW5jeV9pbmRleF9dOwotICB9Ci0KLSAgaWYgKGV4dGVuc2lvbl9mcmVxdWVuY3lfID09IDAgJiYgZXh0ZW5zaW9uX2ZyZXF1ZW5jeV9pbmRleCAhPSAweGZmKSB7Ci0gICAgaWYgKGV4dGVuc2lvbl9mcmVxdWVuY3lfaW5kZXggPj0ga0FEVFNGcmVxdWVuY3lUYWJsZVNpemUpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nKQotICAgICAgICAgIDw8ICJFeHRlbnNpb24gU2FtcGxpbmcgRnJlcXVlbmN5IEluZGV4KDB4IiA8PCBzdGQ6OmhleAotICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4oZXh0ZW5zaW9uX2ZyZXF1ZW5jeV9pbmRleCkKLSAgICAgICAgICA8PCAiKSBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2Ugc2VlIElTTyAxNDQ5Ni0zOjIwMDkgVGFibGUgMS4xOCAiCi0gICAgICAgICAgPDwgImZvciBzdXBwb3J0ZWQgU2FtcGxpbmcgRnJlcXVlbmNpZXMuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZXh0ZW5zaW9uX2ZyZXF1ZW5jeV8gPSBrQURUU0ZyZXF1ZW5jeVRhYmxlW2V4dGVuc2lvbl9mcmVxdWVuY3lfaW5kZXhdOwotICB9Ci0KLSAgLy8gV2hlbiBQYXJhbWV0cmljIFN0ZXJlbyBpcyBvbiwgbW9ubyB3aWxsIGJlIHBsYXllZCBhcyBzdGVyZW8uCi0gIGlmIChwc19wcmVzZW50ICYmIGNoYW5uZWxfY29uZmlnXyA9PSAxKSB7Ci0gICAgY2hhbm5lbF9sYXlvdXRfID0gQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOwotICB9IGVsc2UgewotICAgIGlmIChjaGFubmVsX2NvbmZpZ18gPj0ga0FEVFNDaGFubmVsTGF5b3V0VGFibGVTaXplKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZykKLSAgICAgICAgICA8PCAiQ2hhbm5lbCBDb25maWd1cmF0aW9uKCIgPDwgc3RhdGljX2Nhc3Q8aW50PihjaGFubmVsX2NvbmZpZ18pCi0gICAgICAgICAgPDwgIikgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHNlZSBJU08gMTQ0OTYtMzoyMDA5IFRhYmxlIDEuMTkgIgotICAgICAgICAgIDw8ICJmb3Igc3VwcG9ydGVkIENoYW5uZWwgQ29uZmlndXJhdGlvbnMuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY2hhbm5lbF9sYXlvdXRfID0ga0FEVFNDaGFubmVsTGF5b3V0VGFibGVbY2hhbm5lbF9jb25maWdfXTsKLSAgfQotICBEQ0hFQ0soY2hhbm5lbF9sYXlvdXRfICE9IENIQU5ORUxfTEFZT1VUX05PTkUpOwotCi0gIE1FRElBX0xPRyhJTkZPLCBtZWRpYV9sb2cpCi0gICAgICA8PCAiQXVkaW8gY29kZWM6IG1wNGEuNDAuIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHByb2ZpbGVfKQotICAgICAgPDwgIi4gU2FtcGxpbmcgZnJlcXVlbmN5OiAiIDw8IGZyZXF1ZW5jeV8gPDwgIkh6IgotICAgICAgPDwgIi4gU2FtcGxpbmcgZnJlcXVlbmN5KEV4dGVuc2lvbik6ICIgPDwgZXh0ZW5zaW9uX2ZyZXF1ZW5jeV8gPDwgIkh6IgotICAgICAgPDwgIi4gQ2hhbm5lbCBsYXlvdXQ6ICIgPDwgY2hhbm5lbF9sYXlvdXRfIDw8ICIuIjsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEFBQzo6R2V0T3V0cHV0U2FtcGxlc1BlclNlY29uZChib29sIHNicl9pbl9taW1ldHlwZSkgY29uc3QgewotICBpZiAoZXh0ZW5zaW9uX2ZyZXF1ZW5jeV8gPiAwKSByZXR1cm4gZXh0ZW5zaW9uX2ZyZXF1ZW5jeV87Ci0KLSAgaWYgKCFzYnJfaW5fbWltZXR5cGUpIHJldHVybiBmcmVxdWVuY3lfOwotCi0gIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cml0dGVuIGFjY29yZGluZyB0byBJU08gMTQ0OTYtMzoyMDA5IFRhYmxlIDEuMTEgYW5kCi0gIC8vIFRhYmxlIDEuMjUuIChUYWJsZSAxLjExIHJlZmVycyB0byB0aGUgY2FwcGluZyB0byA0ODAwMCwgVGFibGUgMS4yNSByZWZlcnMKLSAgLy8gdG8gU0JSIGRvdWJsaW5nIHRoZSBBQUMgc2FtcGxlIHJhdGUuKQotICAvLyBUT0RPKGFjb2x3ZWxsKSA6IEV4dGVuZCBzYW1wbGUgcmF0ZSBjYXAgdG8gOTZrSHogZm9yIExldmVsIDUgY29udGVudC4KLSAgRENIRUNLX0dUKGZyZXF1ZW5jeV8sIDApOwotICByZXR1cm4gc3RkOjptaW4oMiAqIGZyZXF1ZW5jeV8sIDQ4MDAwKTsKLX0KLQotQ2hhbm5lbExheW91dCBBQUM6OkdldENoYW5uZWxMYXlvdXQoYm9vbCBzYnJfaW5fbWltZXR5cGUpIGNvbnN0IHsKLSAgLy8gQ2hlY2sgZm9yIGltcGxpY2l0IHNpZ25hbGxpbmcgb2YgSEUtQUFDIGFuZCBpbmRpY2F0ZSBzdGVyZW8gb3V0cHV0Ci0gIC8vIGlmIHRoZSBtb25vIGNoYW5uZWwgY29uZmlndXJhdGlvbiBpcyBzaWduYWxsZWQuCi0gIC8vIFNlZSBJU08gMTQ0OTYtMzoyMDA5IFNlY3Rpb24gMS42LjUuMyBmb3IgZGV0YWlscyBhYm91dCB0aGlzIHNwZWNpYWwgY2FzaW5nLgotICBpZiAoc2JyX2luX21pbWV0eXBlICYmIGNoYW5uZWxfY29uZmlnXyA9PSAxKSByZXR1cm4gQ0hBTk5FTF9MQVlPVVRfU1RFUkVPOwotCi0gIHJldHVybiBjaGFubmVsX2xheW91dF87Ci19Ci0KLWJvb2wgQUFDOjpDb252ZXJ0RXNkc1RvQURUUyhzdGQ6OnZlY3Rvcjx1aW50OF90PiogYnVmZmVyKSBjb25zdCB7Ci0gIHNpemVfdCBzaXplID0gYnVmZmVyLT5zaXplKCkgKyBrQURUU0hlYWRlck1pblNpemU7Ci0KLSAgRENIRUNLKHByb2ZpbGVfID49IDEgJiYgcHJvZmlsZV8gPD0gNCAmJiBmcmVxdWVuY3lfaW5kZXhfICE9IDB4ZiAmJgotICAgICAgICAgY2hhbm5lbF9jb25maWdfIDw9IDcpOwotCi0gIC8vIEFEVFMgaGVhZGVyIHVzZXMgMTMgYml0cyBmb3IgcGFja2V0IHNpemUuCi0gIGlmIChzaXplID49ICgxIDw8IDEzKSkgcmV0dXJuIGZhbHNlOwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBhZHRzID0gKmJ1ZmZlcjsKLQotICBhZHRzLmluc2VydChidWZmZXItPmJlZ2luKCksIGtBRFRTSGVhZGVyTWluU2l6ZSwgMCk7Ci0gIGFkdHNbMF0gPSAweGZmOwotICBhZHRzWzFdID0gMHhmMTsKLSAgYWR0c1syXSA9Ci0gICAgICAoKHByb2ZpbGVfIC0gMSkgPDwgNikgKyAoZnJlcXVlbmN5X2luZGV4XyA8PCAyKSArIChjaGFubmVsX2NvbmZpZ18gPj4gMik7Ci0gIGFkdHNbM10gPSBzdGF0aWNfY2FzdDx1aW50OF90PigoKGNoYW5uZWxfY29uZmlnXyAmIDB4MykgPDwgNikgKyAoc2l6ZSA+PiAxMSkpOwotICBhZHRzWzRdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oKHNpemUgJiAweDdmZikgPj4gMyk7Ci0gIGFkdHNbNV0gPSAoKHNpemUgJiA3KSA8PCA1KSArIDB4MWY7Ci0gIGFkdHNbNl0gPSAweGZjOwotCi0gIHJldHVybiB0cnVlOwotfQotCi0vLyBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnQgR0FTcGVjaWZpY0NvbmZpZyBkZWZpbmVkIGluCi0vLyBJU08gMTQ0OTYtMzoyMDA5IFRhYmxlIDQuMSAtIFN5bnRheCBvZiBHQVNwZWNpZmljQ29uZmlnKCkKLWJvb2wgQUFDOjpTa2lwRGVjb2RlckdBU3BlY2lmaWNDb25maWcoQml0UmVhZGVyKiBiaXRfcmVhZGVyKSBjb25zdCB7Ci0gIHN3aXRjaCAocHJvZmlsZV8pIHsKLSAgICBjYXNlIDE6Ci0gICAgY2FzZSAyOgotICAgIGNhc2UgMzoKLSAgICBjYXNlIDQ6Ci0gICAgY2FzZSA2OgotICAgIGNhc2UgNzoKLSAgICBjYXNlIDE3OgotICAgIGNhc2UgMTk6Ci0gICAgY2FzZSAyMDoKLSAgICBjYXNlIDIxOgotICAgIGNhc2UgMjI6Ci0gICAgY2FzZSAyMzoKLSAgICAgIHJldHVybiBTa2lwR0FTcGVjaWZpY0NvbmZpZyhiaXRfcmVhZGVyKTsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cml0dGVuIGFjY29yZGluZyB0byBJU08gMTQ0OTYtMzoyMDA5IFRhYmxlIDQuMSAtCi0vLyBHQVNwZWNpZmljQ29uZmlnLgotYm9vbCBBQUM6OlNraXBHQVNwZWNpZmljQ29uZmlnKEJpdFJlYWRlciogYml0X3JlYWRlcikgY29uc3QgewotICB1aW50OF90IGV4dGVuc2lvbl9mbGFnID0gMDsKLSAgdWludDhfdCBkZXBlbmRzX29uX2NvcmVfY29kZXI7Ci0gIHVpbnQxNl90IGR1bW15OwotCi0gIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygxLCAmZHVtbXkpKTsgIC8vIGZyYW1lTGVuZ3RoRmxhZwotICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMSwgJmRlcGVuZHNfb25fY29yZV9jb2RlcikpOwotICBpZiAoZGVwZW5kc19vbl9jb3JlX2NvZGVyID09IDEpCi0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDE0LCAmZHVtbXkpKTsgIC8vIGNvcmVDb2RlckRlbGF5Ci0KLSAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZleHRlbnNpb25fZmxhZykpOwotICBSQ0hFQ0soY2hhbm5lbF9jb25maWdfICE9IDApOwotCi0gIGlmIChwcm9maWxlXyA9PSA2IHx8IHByb2ZpbGVfID09IDIwKQotICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cygzLCAmZHVtbXkpKTsgIC8vIGxheWVyTnIKLQotICBpZiAoZXh0ZW5zaW9uX2ZsYWcpIHsKLSAgICBpZiAocHJvZmlsZV8gPT0gMjIpIHsKLSAgICAgIFJDSEVDSyhiaXRfcmVhZGVyLT5SZWFkQml0cyg1LCAmZHVtbXkpKTsgICAvLyBudW1PZlN1YkZyYW1lCi0gICAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMTEsICZkdW1teSkpOyAgLy8gbGF5ZXJfbGVuZ3RoCi0gICAgfQotCi0gICAgaWYgKHByb2ZpbGVfID09IDE3IHx8IHByb2ZpbGVfID09IDE5IHx8IHByb2ZpbGVfID09IDIwIHx8IHByb2ZpbGVfID09IDIzKSB7Ci0gICAgICBSQ0hFQ0soYml0X3JlYWRlci0+UmVhZEJpdHMoMywgJmR1bW15KSk7ICAvLyByZXNpbGllbmNlIGZsYWdzCi0gICAgfQotCi0gICAgUkNIRUNLKGJpdF9yZWFkZXItPlJlYWRCaXRzKDEsICZkdW1teSkpOyAgLy8gZXh0ZW5zaW9uRmxhZzMKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhYy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2FiYjQzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfQUFDX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9BQUNfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQml0UmVhZGVyOwotCi1uYW1lc3BhY2UgbXA0IHsKLQotLy8gVGhpcyBjbGFzcyBwYXJzZXMgdGhlIEFBQyBpbmZvcm1hdGlvbiBmcm9tIGRlY29kZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24KLS8vIGVtYmVkZGVkIGluIHRoZSBlc2RzIGJveCBpbiBhbiBJU08gQk1GRiBmaWxlLgotLy8gUGxlYXNlIHJlZmVyIHRvIElTTyAxNDQ5NiBQYXJ0IDMgVGFibGUgMS4xMyAtIFN5bnRheCBvZiBBdWRpb1NwZWNpZmljQ29uZmlnCi0vLyBmb3IgbW9yZSBkZXRhaWxzLgotY2xhc3MgTUVESUFfRVhQT1JUIEFBQyB7Ci0gcHVibGljOgotICBBQUMoKTsKLSAgQUFDKGNvbnN0IEFBQyYgb3RoZXIpOwotICB+QUFDKCk7Ci0KLSAgLy8gUGFyc2UgdGhlIEFBQyBjb25maWcgZnJvbSB0aGUgcmF3IGJpbmFyeSBkYXRhIGVtYmVkZGVkIGluIGVzZHMgYm94LgotICAvLyBUaGUgZnVuY3Rpb24gd2lsbCBwYXJzZSB0aGUgZGF0YSBhbmQgZ2V0IHRoZSBFbGVtZW50YXJ5U3RyZWFtRGVzY3JpcHRvciwKLSAgLy8gdGhlbiBpdCB3aWxsIHBhcnNlIHRoZSBFbGVtZW50YXJ5U3RyZWFtRGVzY3JpcHRvciB0byBnZXQgYXVkaW8gc3RyZWFtCi0gIC8vIGNvbmZpZ3VyYXRpb25zLgotICBib29sIFBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBkYXRhLAotICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotCi0gIC8vIEdldHMgdGhlIG91dHB1dCBzYW1wbGUgcmF0ZSBmb3IgdGhlIEFBQyBzdHJlYW0uCi0gIC8vIHxzYnJfaW5fbWltZXR5cGV8IHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgU0JSIG1vZGUgaXMKLSAgLy8gc2lnbmFsbGVkIGluIHRoZSBtaW1ldHlwZS4gKGllIG1wNGEuNDAuNSBpbiB0aGUgY29kZWNzIHBhcmFtZXRlcikuCi0gIC8vIFJldHVybnMgdGhlIHNhbXBsZXNfcGVyX3NlY29uZCB2YWx1ZSB0aGF0IHNob3VsZCB1c2VkIGluIGFuCi0gIC8vIEF1ZGlvRGVjb2RlckNvbmZpZy4KLSAgaW50IEdldE91dHB1dFNhbXBsZXNQZXJTZWNvbmQoYm9vbCBzYnJfaW5fbWltZXR5cGUpIGNvbnN0OwotCi0gIC8vIEdldHMgdGhlIGNoYW5uZWwgbGF5b3V0IGZvciB0aGUgQUFDIHN0cmVhbS4KLSAgLy8gfHNicl9pbl9taW1ldHlwZXwgc2hvdWxkIGJlIHNldCB0byB0cnVlIGlmIHRoZSBTQlIgbW9kZSBpcwotICAvLyBzaWduYWxsZWQgaW4gdGhlIG1pbWV0eXBlLiAoaWUgbXA0YS40MC41IGluIHRoZSBjb2RlY3MgcGFyYW1ldGVyKS4KLSAgLy8gUmV0dXJucyB0aGUgY2hhbm5lbF9sYXlvdXQgdmFsdWUgdGhhdCBzaG91bGQgdXNlZCBpbiBhbgotICAvLyBBdWRpb0RlY29kZXJDb25maWcuCi0gIENoYW5uZWxMYXlvdXQgR2V0Q2hhbm5lbExheW91dChib29sIHNicl9pbl9taW1ldHlwZSkgY29uc3Q7Ci0KLSAgLy8gVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBhIHJhdyBBQUMgZnJhbWUgaW50byBhbiBBQUMgZnJhbWUgd2l0aCBhbiBBRFRTCi0gIC8vIGhlYWRlci4gT24gc3VjY2VzcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBhbmQgc3RvcmVzIHRoZSBjb252ZXJ0ZWQgZGF0YQotICAvLyBpbiB0aGUgYnVmZmVyLiBUaGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlIGFuZCBsZWF2ZXMgdGhlIGJ1ZmZlcgotICAvLyB1bmNoYW5nZWQuCi0gIGJvb2wgQ29udmVydEVzZHNUb0FEVFMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZmZlcikgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY29kZWMgc3BlY2lmaWMgZGF0YSBuZWVkZWQgYnkgYW5kcm9pZCBNZWRpYUNvZGVjLgotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb2RlY19zcGVjaWZpY19kYXRhKCkgY29uc3QgewotICAgIHJldHVybiBjb2RlY19zcGVjaWZpY19kYXRhXzsKLSAgfQotCi0gcHJpdmF0ZToKLSAgYm9vbCBTa2lwRGVjb2RlckdBU3BlY2lmaWNDb25maWcoQml0UmVhZGVyKiBiaXRfcmVhZGVyKSBjb25zdDsKLSAgYm9vbCBTa2lwRXJyb3JTcGVjaWZpY0NvbmZpZygpIGNvbnN0OwotICBib29sIFNraXBHQVNwZWNpZmljQ29uZmlnKEJpdFJlYWRlciogYml0X3JlYWRlcikgY29uc3Q7Ci0KLSAgLy8gVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgc3RvcmUgdGhlIEFBQyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCi0gIC8vIHRoYXQgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEFEVFMgaGVhZGVyLgotICB1aW50OF90IHByb2ZpbGVfOwotICB1aW50OF90IGZyZXF1ZW5jeV9pbmRleF87Ci0gIHVpbnQ4X3QgY2hhbm5lbF9jb25maWdfOwotCi0gIC8vIFRoZSBjb2RlYyBzcGVjaWZpYyBkYXRhIG5lZWRlZCBieSB0aGUgYW5kcm9pZCBNZWRpYUNvZGVjLgotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb2RlY19zcGVjaWZpY19kYXRhXzsKLQotICAvLyBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBzdG9yZSBhdWRpbyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRoYXQKLSAgLy8gY2FuIGJlIHVzZWQgYnkgQ2hyb21pdW0uIFRoZXkgYXJlIGJhc2VkIG9uIHRoZSBBQUMgc3BlY2lmaWMKLSAgLy8gY29uZmlndXJhdGlvbiBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZXh0ZW5zaW9ucyBpbiBlbGVtZW50YXJ5Ci0gIC8vIHN0cmVhbSBkZXNjcmlwdG9yLgotICBpbnQgZnJlcXVlbmN5XzsKLSAgaW50IGV4dGVuc2lvbl9mcmVxdWVuY3lfOwotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0XzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0FBQ19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhY191bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjVhNTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhY191bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tb2NrX21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpBbGxPZjsKLXVzaW5nIDo6dGVzdGluZzo6SGFzU3Vic3RyOwotdXNpbmcgOjp0ZXN0aW5nOjpJblNlcXVlbmNlOwotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSBtcDQgewotCi1NQVRDSEVSX1AoQXVkaW9Qcm9maWxlTG9nLCBwcm9maWxlX3N0cmluZywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkF1ZGlvIGNvZGVjOiAiICsgc3RkOjpzdHJpbmcocHJvZmlsZV9zdHJpbmcpICsgIi4iKTsKLX0KLQotTUFUQ0hFUl9QKEF1ZGlvU2FtcGxpbmdGcmVxdWVuY3lMb2csIGZyZXF1ZW5jeV9zdHJpbmcsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJTYW1wbGluZyBmcmVxdWVuY3k6ICIgKyBzdGQ6OnN0cmluZyhmcmVxdWVuY3lfc3RyaW5nKSArICJIei4iKTsKLX0KLQotTUFUQ0hFUl9QKEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2csIGV4X3N0cmluZywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORygKLSAgICAgIGFyZywgIlNhbXBsaW5nIGZyZXF1ZW5jeShFeHRlbnNpb24pOiAiICsgc3RkOjpzdHJpbmcoZXhfc3RyaW5nKSArICJIei4iKTsKLX0KLQotTUFUQ0hFUl9QKEF1ZGlvQ2hhbm5lbExheW91dExvZywgbGF5b3V0X3N0cmluZywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkNoYW5uZWwgbGF5b3V0OiAiICsgc3RkOjpzdHJpbmcobGF5b3V0X3N0cmluZykgKyAiLiIpOwotfQotCi1NQVRDSEVSX1AoVW5zdXBwb3J0ZWRGcmVxdWVuY3lJbmRleExvZywgZnJlcXVlbmN5X2luZGV4LCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIlNhbXBsaW5nIEZyZXF1ZW5jeSBJbmRleCgweCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGZyZXF1ZW5jeV9pbmRleCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci19Ci0KLU1BVENIRVJfUChVbnN1cHBvcnRlZEV4dGVuc2lvbkZyZXF1ZW5jeUluZGV4TG9nLCBmcmVxdWVuY3lfaW5kZXgsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoYXJnLCAiRXh0ZW5zaW9uIFNhbXBsaW5nIEZyZXF1ZW5jeSBJbmRleCgweCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGZyZXF1ZW5jeV9pbmRleCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci19Ci0KLU1BVENIRVJfUChVbnN1cHBvcnRlZENoYW5uZWxDb25maWdMb2csIGNoYW5uZWxfaW5kZXgsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoYXJnLCAiQ2hhbm5lbCBDb25maWd1cmF0aW9uKCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGNoYW5uZWxfaW5kZXgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBub3Qgc3VwcG9ydGVkIik7Ci19Ci0KLU1BVENIRVJfUChVbnN1cHBvcnRlZEF1ZGlvUHJvZmlsZUxvZywgcHJvZmlsZV9zdHJpbmcsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJBdWRpbyBjb2RlYygiICsgc3RkOjpzdHJpbmcocHJvZmlsZV9zdHJpbmcpICsgIikgaXMgbm90IHN1cHBvcnRlZCIpOwotfQotCi1jbGFzcyBBQUNUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgQUFDVGVzdCgpIDogbWVkaWFfbG9nXyhuZXcgU3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpIHt9Ci0KLSAgYm9vbCBQYXJzZShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgZGF0YSkgewotICAgIHJldHVybiBhYWNfLlBhcnNlKGRhdGEsIG1lZGlhX2xvZ18pOwotICB9Ci0KLSAgc2NvcGVkX3JlZnB0cjxTdHJpY3RNb2NrPE1vY2tNZWRpYUxvZz4+IG1lZGlhX2xvZ187Ci0gIEFBQyBhYWNfOwotfTsKLQotVEVTVF9GKEFBQ1Rlc3QsIEJhc2ljUHJvZmlsZVRlc3QpIHsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDEyLCAweDEwfTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKEFsbE9mKAotICAgICAgQXVkaW9Qcm9maWxlTG9nKCJtcDRhLjQwLjIiKSwgQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiNDQxMDAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIzIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotICBFWFBFQ1RfRVEoYWFjXy5HZXRPdXRwdXRTYW1wbGVzUGVyU2Vjb25kKGZhbHNlKSwgNDQxMDApOwotICBFWFBFQ1RfRVEoYWFjXy5HZXRDaGFubmVsTGF5b3V0KGZhbHNlKSwgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPKTsKLX0KLQotVEVTVF9GKEFBQ1Rlc3QsIEV4dGVuc2lvblRlc3QpIHsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDEzLCAweDA4LCAweDU2LCAweGU1LCAweDlkLCAweDQ4LCAweDgwfTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKEFsbE9mKAotICAgICAgQXVkaW9Qcm9maWxlTG9nKCJtcDRhLjQwLjIiKSwgQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiMjQwMDAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjQ4MDAwIiksIEF1ZGlvQ2hhbm5lbExheW91dExvZygiMyIpKSk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKGRhdGEpKTsKLSAgRVhQRUNUX0VRKGFhY18uR2V0T3V0cHV0U2FtcGxlc1BlclNlY29uZChmYWxzZSksIDQ4MDAwKTsKLSAgRVhQRUNUX0VRKGFhY18uR2V0T3V0cHV0U2FtcGxlc1BlclNlY29uZCh0cnVlKSwgNDgwMDApOwotICBFWFBFQ1RfRVEoYWFjXy5HZXRDaGFubmVsTGF5b3V0KGZhbHNlKSwgQ0hBTk5FTF9MQVlPVVRfU1RFUkVPKTsKLX0KLQotLy8gVGVzdCBpbXBsaWNpdCBTQlIgd2l0aCBtb25vIGNoYW5uZWwgY29uZmlnLgotLy8gTW9ubyBjaGFubmVsIGxheW91dCBzaG91bGQgb25seSBiZSByZXBvcnRlZCBpZiBTQlIgaXMgbm90Ci0vLyBzcGVjaWZpZWQuIE90aGVyd2lzZSBzdGVyZW8gc2hvdWxkIGJlIHJlcG9ydGVkLgotLy8gU2VlIElTTyAxNDQ5Ni0zOjIwMDUgU2VjdGlvbiAxLjYuNS4zIGZvciBkZXRhaWxzIGFib3V0IHRoaXMgc3BlY2lhbCBjYXNpbmcuCi1URVNUX0YoQUFDVGVzdCwgSW1wbGljaXRTQlJfQ2hhbm5lbENvbmZpZzApIHsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDEzLCAweDA4fTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKEFsbE9mKAotICAgICAgQXVkaW9Qcm9maWxlTG9nKCJtcDRhLjQwLjIiKSwgQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiMjQwMDAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIyIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotCi0gIC8vIFRlc3Qgdy9vIGltcGxpY2l0IFNCUi4KLSAgRVhQRUNUX0VRKGFhY18uR2V0T3V0cHV0U2FtcGxlc1BlclNlY29uZChmYWxzZSksIDI0MDAwKTsKLSAgRVhQRUNUX0VRKGFhY18uR2V0Q2hhbm5lbExheW91dChmYWxzZSksIENIQU5ORUxfTEFZT1VUX01PTk8pOwotCi0gIC8vIFRlc3QgaW1wbGljaXQgU0JSLgotICBFWFBFQ1RfRVEoYWFjXy5HZXRPdXRwdXRTYW1wbGVzUGVyU2Vjb25kKHRydWUpLCA0ODAwMCk7Ci0gIEVYUEVDVF9FUShhYWNfLkdldENoYW5uZWxMYXlvdXQodHJ1ZSksIENIQU5ORUxfTEFZT1VUX1NURVJFTyk7Ci19Ci0KLS8vIFRlc3RzIGltcGxpY2l0IFNCUiB3aXRoIGEgc3RlcmVvIGNoYW5uZWwgY29uZmlnLgotVEVTVF9GKEFBQ1Rlc3QsIEltcGxpY2l0U0JSX0NoYW5uZWxDb25maWcxKSB7Ci0gIHVpbnQ4X3QgYnVmZmVyW10gPSB7MHgxMywgMHgxMH07Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0KLSAgZGF0YS5hc3NpZ24oYnVmZmVyLCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhBbGxPZigKLSAgICAgIEF1ZGlvUHJvZmlsZUxvZygibXA0YS40MC4yIiksIEF1ZGlvU2FtcGxpbmdGcmVxdWVuY3lMb2coIjI0MDAwIiksCi0gICAgICBBdWRpb0V4dGVuc2lvblNhbXBsaW5nRnJlcXVlbmN5TG9nKCIwIiksIEF1ZGlvQ2hhbm5lbExheW91dExvZygiMyIpKSk7Ci0gIEVYUEVDVF9UUlVFKFBhcnNlKGRhdGEpKTsKLQotICAvLyBUZXN0IHcvbyBpbXBsaWNpdCBTQlIuCi0gIEVYUEVDVF9FUShhYWNfLkdldE91dHB1dFNhbXBsZXNQZXJTZWNvbmQoZmFsc2UpLCAyNDAwMCk7Ci0gIEVYUEVDVF9FUShhYWNfLkdldENoYW5uZWxMYXlvdXQoZmFsc2UpLCBDSEFOTkVMX0xBWU9VVF9TVEVSRU8pOwotCi0gIC8vIFRlc3QgaW1wbGljaXQgU0JSLgotICBFWFBFQ1RfRVEoYWFjXy5HZXRPdXRwdXRTYW1wbGVzUGVyU2Vjb25kKHRydWUpLCA0ODAwMCk7Ci0gIEVYUEVDVF9FUShhYWNfLkdldENoYW5uZWxMYXlvdXQodHJ1ZSksIENIQU5ORUxfTEFZT1VUX1NURVJFTyk7Ci19Ci0KLVRFU1RfRihBQUNUZXN0LCBTaXhDaGFubmVsVGVzdCkgewotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MTEsIDB4YjB9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coQWxsT2YoCi0gICAgICBBdWRpb1Byb2ZpbGVMb2coIm1wNGEuNDAuMiIpLCBBdWRpb1NhbXBsaW5nRnJlcXVlbmN5TG9nKCI0ODAwMCIpLAotICAgICAgQXVkaW9FeHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiMCIpLCBBdWRpb0NoYW5uZWxMYXlvdXRMb2coIjEyIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotICBFWFBFQ1RfRVEoYWFjXy5HZXRPdXRwdXRTYW1wbGVzUGVyU2Vjb25kKGZhbHNlKSwgNDgwMDApOwotICBFWFBFQ1RfRVEoYWFjXy5HZXRDaGFubmVsTGF5b3V0KGZhbHNlKSwgQ0hBTk5FTF9MQVlPVVRfNV8xX0JBQ0spOwotfQotCi1URVNUX0YoQUFDVGVzdCwgRGF0YVRvb1Nob3J0VGVzdCkgewotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIEVYUEVDVF9GQUxTRShQYXJzZShkYXRhKSk7Ci0KLSAgZGF0YS5wdXNoX2JhY2soMHgxMik7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZShkYXRhKSk7Ci19Ci0KLVRFU1RfRihBQUNUZXN0LCBJbmNvcnJlY3RQcm9maWxlVGVzdCkgewotICBJblNlcXVlbmNlIHM7Ci0gIHVpbnQ4X3QgYnVmZmVyW10gPSB7MHgwLCAweDA4fTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhVbnN1cHBvcnRlZEF1ZGlvUHJvZmlsZUxvZygibXA0YS40MC4wIikpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2UoZGF0YSkpOwotCi0gIGRhdGFbMF0gPSAweDA4OwotICBFWFBFQ1RfTUVESUFfTE9HKEFsbE9mKAotICAgICAgQXVkaW9Qcm9maWxlTG9nKCJtcDRhLjQwLjEiKSwgQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiOTYwMDAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIyIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotCi0gIGRhdGFbMF0gPSAweDI4OwotICAvLyBObyBtZWRpYSBsb2cgZm9yIHRoaXMgcHJvZmlsZSA1LCBzaW5jZSBub3QgZW5vdWdoIGJpdHMgYXJlIGluIHxkYXRhfCB0bwotICAvLyBmaXJzdCBwYXJzZSBwcm9maWxlIDUncyBleHRlbnNpb24gZnJlcXVlbmN5IGluZGV4LgotICBFWFBFQ1RfRkFMU0UoUGFyc2UoZGF0YSkpOwotfQotCi1URVNUX0YoQUFDVGVzdCwgSW5jb3JyZWN0RnJlcXVlbmN5VGVzdCkgewotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MGYsIDB4ODh9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2UoZGF0YSkpOwotCi0gIGRhdGFbMF0gPSAweDBlOwotICBkYXRhWzFdID0gMHgwODsKLSAgRVhQRUNUX01FRElBX0xPRyhBbGxPZigKLSAgICAgIEF1ZGlvUHJvZmlsZUxvZygibXA0YS40MC4xIiksIEF1ZGlvU2FtcGxpbmdGcmVxdWVuY3lMb2coIjczNTAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIyIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotfQotCi1URVNUX0YoQUFDVGVzdCwgSW5jb3JyZWN0Q2hhbm5lbFRlc3QpIHsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDBlLCAweDAwfTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlKGRhdGEpKTsKLQotICBkYXRhWzFdID0gMHgwODsKLSAgRVhQRUNUX01FRElBX0xPRyhBbGxPZigKLSAgICAgIEF1ZGlvUHJvZmlsZUxvZygibXA0YS40MC4xIiksIEF1ZGlvU2FtcGxpbmdGcmVxdWVuY3lMb2coIjczNTAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIyIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotfQotCi1URVNUX0YoQUFDVGVzdCwgVW5zdXBwb3J0ZWRQcm9maWxlVGVzdCkgewotICBJblNlcXVlbmNlIHM7Ci0gIHVpbnQ4X3QgYnVmZmVyW10gPSB7MHgzYSwgMHgwOH07Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0KLSAgZGF0YS5hc3NpZ24oYnVmZmVyLCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coVW5zdXBwb3J0ZWRBdWRpb1Byb2ZpbGVMb2coIm1wNGEuNDAuNyIpKTsKLSAgRVhQRUNUX0ZBTFNFKFBhcnNlKGRhdGEpKTsKLQotICBkYXRhWzBdID0gMHgxMjsKLSAgZGF0YVsxXSA9IDB4MTg7Ci0gIEVYUEVDVF9NRURJQV9MT0coQWxsT2YoCi0gICAgICBBdWRpb1Byb2ZpbGVMb2coIm1wNGEuNDAuMiIpLCBBdWRpb1NhbXBsaW5nRnJlcXVlbmN5TG9nKCI0NDEwMCIpLAotICAgICAgQXVkaW9FeHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiMCIpLCBBdWRpb0NoYW5uZWxMYXlvdXRMb2coIjUiKSkpOwotICBFWFBFQ1RfVFJVRShQYXJzZShkYXRhKSk7Ci19Ci0KLVRFU1RfRihBQUNUZXN0LCBVbnN1cHBvcnRlZENoYW5uZWxMYXlvdXRUZXN0KSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDEyLCAweDc4fTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLQotICBkYXRhLmFzc2lnbihidWZmZXIsIGJ1ZmZlciArIHNpemVvZihidWZmZXIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhVbnN1cHBvcnRlZENoYW5uZWxDb25maWdMb2coIjE1IikpOwotICBFWFBFQ1RfRkFMU0UoUGFyc2UoZGF0YSkpOwotCi0gIGRhdGFbMV0gPSAweDE4OwotICBFWFBFQ1RfTUVESUFfTE9HKEFsbE9mKAotICAgICAgQXVkaW9Qcm9maWxlTG9nKCJtcDRhLjQwLjIiKSwgQXVkaW9TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiNDQxMDAiKSwKLSAgICAgIEF1ZGlvRXh0ZW5zaW9uU2FtcGxpbmdGcmVxdWVuY3lMb2coIjAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCI1IikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotfQotCi1URVNUX0YoQUFDVGVzdCwgVW5zdXBwb3J0ZWRGcmVxdWVuY3lJbmRleFRlc3QpIHsKLSAgSW5TZXF1ZW5jZSBzOwotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MTcsIDB4MTB9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotICBFWFBFQ1RfTUVESUFfTE9HKFVuc3VwcG9ydGVkRnJlcXVlbmN5SW5kZXhMb2coImUiKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZShkYXRhKSk7Ci0KLSAgZGF0YVswXSA9IDB4MTM7Ci0gIEVYUEVDVF9NRURJQV9MT0coQWxsT2YoCi0gICAgICBBdWRpb1Byb2ZpbGVMb2coIm1wNGEuNDAuMiIpLCBBdWRpb1NhbXBsaW5nRnJlcXVlbmN5TG9nKCIyNDAwMCIpLAotICAgICAgQXVkaW9FeHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiMCIpLCBBdWRpb0NoYW5uZWxMYXlvdXRMb2coIjMiKSkpOwotICBFWFBFQ1RfVFJVRShQYXJzZShkYXRhKSk7Ci19Ci0KLVRFU1RfRihBQUNUZXN0LCBVbnN1cHBvcnRlZEV4RnJlcXVlbmN5SW5kZXhUZXN0KSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDI5LCAweDE3LCAweDA4LCAweDB9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotICBFWFBFQ1RfTUVESUFfTE9HKFVuc3VwcG9ydGVkRXh0ZW5zaW9uRnJlcXVlbmN5SW5kZXhMb2coImUiKSk7Ci0gIEVYUEVDVF9GQUxTRShQYXJzZShkYXRhKSk7Ci0KLSAgZGF0YVsxXSA9IDB4MTE7Ci0gIEVYUEVDVF9NRURJQV9MT0coQWxsT2YoCi0gICAgICBBdWRpb1Byb2ZpbGVMb2coIm1wNGEuNDAuMiIpLCBBdWRpb1NhbXBsaW5nRnJlcXVlbmN5TG9nKCI2NDAwMCIpLAotICAgICAgQXVkaW9FeHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeUxvZygiNjQwMDAiKSwgQXVkaW9DaGFubmVsTGF5b3V0TG9nKCIzIikpKTsKLSAgRVhQRUNUX1RSVUUoUGFyc2UoZGF0YSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2F2Yy5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hdmMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YWQ2MTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2F2Yy5jYworKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYXZjLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfcmVhZGVyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDQgewotCi1zdGF0aWMgY29uc3QgdWludDhfdCBrQW5uZXhCU3RhcnRDb2RlW10gPSB7MCwgMCwgMCwgMX07Ci1zdGF0aWMgY29uc3QgaW50IGtBbm5leEJTdGFydENvZGVTaXplID0gNDsKLQotc3RhdGljIGJvb2wgQ29udmVydEFWQ1RvQW5uZXhCSW5QbGFjZUZvckxlbmd0aFNpemU0KHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWYpIHsKLSAgY29uc3QgaW50IGtMZW5ndGhTaXplID0gNDsKLSAgc2l6ZV90IHBvcyA9IDA7Ci0gIHdoaWxlIChwb3MgKyBrTGVuZ3RoU2l6ZSA8IGJ1Zi0+c2l6ZSgpKSB7Ci0gICAgdWludDMyX3QgbmFsX2xlbmd0aCA9ICgqYnVmKVtwb3NdOwotICAgIG5hbF9sZW5ndGggPSAobmFsX2xlbmd0aCA8PCA4KSArICgqYnVmKVtwb3MgKyAxXTsKLSAgICBuYWxfbGVuZ3RoID0gKG5hbF9sZW5ndGggPDwgOCkgKyAoKmJ1ZilbcG9zICsgMl07Ci0gICAgbmFsX2xlbmd0aCA9IChuYWxfbGVuZ3RoIDw8IDgpICsgKCpidWYpW3BvcyArIDNdOwotCi0gICAgaWYgKG5hbF9sZW5ndGggPT0gMCkgewotICAgICAgRFZMT0coMykgPDwgIm5hbF9sZW5ndGggaXMgMCI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RkOjpjb3B5KGtBbm5leEJTdGFydENvZGUsIGtBbm5leEJTdGFydENvZGUgKyBrQW5uZXhCU3RhcnRDb2RlU2l6ZSwKLSAgICAgICAgICAgICAgYnVmLT5iZWdpbigpICsgcG9zKTsKLSAgICBwb3MgKz0ga0xlbmd0aFNpemUgKyBuYWxfbGVuZ3RoOwotICB9Ci0gIHJldHVybiBwb3MgPT0gYnVmLT5zaXplKCk7Ci19Ci0KLS8vIHN0YXRpYwotaW50IEFWQzo6RmluZFN1YnNhbXBsZUluZGV4KGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0cikgewotICBEQ0hFQ0socHRyID49ICZidWZmZXJbMF0pOwotICBEQ0hFQ0socHRyIDw9ICZidWZmZXJbYnVmZmVyLnNpemUoKSAtIDFdKTsKLSAgaWYgKCFzdWJzYW1wbGVzIHx8IHN1YnNhbXBsZXMtPmVtcHR5KCkpIHJldHVybiAwOwotCi0gIGNvbnN0IHVpbnQ4X3QqIHAgPSAmYnVmZmVyWzBdOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YnNhbXBsZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgcCArPSAoKnN1YnNhbXBsZXMpW2ldLmNsZWFyX2J5dGVzICsgKCpzdWJzYW1wbGVzKVtpXS5jeXBoZXJfYnl0ZXM7Ci0gICAgaWYgKHAgPiBwdHIpIHJldHVybiBpOwotICB9Ci0gIE5PVFJFQUNIRUQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBBVkM6OkNvbnZlcnRGcmFtZVRvQW5uZXhCKGludCBsZW5ndGhfc2l6ZSwgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4qIHN1YnNhbXBsZXMpIHsKLSAgUkNIRUNLKGxlbmd0aF9zaXplID09IDEgfHwgbGVuZ3RoX3NpemUgPT0gMiB8fCBsZW5ndGhfc2l6ZSA9PSA0KTsKLSAgRFZMT0coNSkgPDwgX19GVU5DVElPTl9fIDw8ICIgbGVuZ3RoX3NpemU9IiA8PCBsZW5ndGhfc2l6ZQotICAgICAgICAgICA8PCAiIGJ1ZmZlci0+c2l6ZSgpPSIgPDwgYnVmZmVyLT5zaXplKCkKLSAgICAgICAgICAgPDwgIiBzdWJzYW1wbGVzPSIgPDwgKHN1YnNhbXBsZXMgPyBzdWJzYW1wbGVzLT5zaXplKCkgOiAwKTsKLQotICBpZiAobGVuZ3RoX3NpemUgPT0gNCkgcmV0dXJuIENvbnZlcnRBVkNUb0FubmV4QkluUGxhY2VGb3JMZW5ndGhTaXplNChidWZmZXIpOwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRlbXA7Ci0gIHRlbXAuc3dhcCgqYnVmZmVyKTsKLSAgYnVmZmVyLT5yZXNlcnZlKHRlbXAuc2l6ZSgpICsgMzIpOwotCi0gIHNpemVfdCBwb3MgPSAwOwotICB3aGlsZSAocG9zICsgbGVuZ3RoX3NpemUgPCB0ZW1wLnNpemUoKSkgewotICAgIGludCBuYWxfbGVuZ3RoID0gdGVtcFtwb3NdOwotICAgIGlmIChsZW5ndGhfc2l6ZSA9PSAyKSBuYWxfbGVuZ3RoID0gKG5hbF9sZW5ndGggPDwgOCkgKyB0ZW1wW3BvcyArIDFdOwotICAgIHBvcyArPSBsZW5ndGhfc2l6ZTsKLQotICAgIGlmIChuYWxfbGVuZ3RoID09IDApIHsKLSAgICAgIERWTE9HKDMpIDw8ICJuYWxfbGVuZ3RoIGlzIDAiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFJDSEVDSyhwb3MgKyBuYWxfbGVuZ3RoIDw9IHRlbXAuc2l6ZSgpKTsKLSAgICBidWZmZXItPmluc2VydChidWZmZXItPmVuZCgpLCBrQW5uZXhCU3RhcnRDb2RlLAotICAgICAgICAgICAgICAgICAgIGtBbm5leEJTdGFydENvZGUgKyBrQW5uZXhCU3RhcnRDb2RlU2l6ZSk7Ci0gICAgaWYgKHN1YnNhbXBsZXMgJiYgIXN1YnNhbXBsZXMtPmVtcHR5KCkpIHsKLSAgICAgIHVpbnQ4X3QqIGJ1ZmZlcl9wb3MgPSAmKCooYnVmZmVyLT5lbmQoKSAtIGtBbm5leEJTdGFydENvZGVTaXplKSk7Ci0gICAgICBpbnQgc3Vic2FtcGxlX2luZGV4ID0gRmluZFN1YnNhbXBsZUluZGV4KCpidWZmZXIsIHN1YnNhbXBsZXMsIGJ1ZmZlcl9wb3MpOwotICAgICAgLy8gV2UndmUgcmVwbGFjZWQgTkFMVSBzaXplIHZhbHVlIHdpdGggYW4gQW5uZXhCIHN0YXJ0IGNvZGUuCi0gICAgICBpbnQgc2l6ZV9hZGp1c3RtZW50ID0ga0FubmV4QlN0YXJ0Q29kZVNpemUgLSBsZW5ndGhfc2l6ZTsKLSAgICAgICgqc3Vic2FtcGxlcylbc3Vic2FtcGxlX2luZGV4XS5jbGVhcl9ieXRlcyArPSBzaXplX2FkanVzdG1lbnQ7Ci0gICAgfQotICAgIGJ1ZmZlci0+aW5zZXJ0KGJ1ZmZlci0+ZW5kKCksIHRlbXAuYmVnaW4oKSArIHBvcywKLSAgICAgICAgICAgICAgICAgICB0ZW1wLmJlZ2luKCkgKyBwb3MgKyBuYWxfbGVuZ3RoKTsKLSAgICBwb3MgKz0gbmFsX2xlbmd0aDsKLSAgfQotICByZXR1cm4gcG9zID09IHRlbXAuc2l6ZSgpOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgQVZDOjpJbnNlcnRQYXJhbVNldHNBbm5leEIoY29uc3QgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGF2Y19jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcykgewotICBEQ0hFQ0soQVZDOjpJc1ZhbGlkQW5uZXhCKCpidWZmZXIsICpzdWJzYW1wbGVzKSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEgyNjRQYXJzZXI+IHBhcnNlcihuZXcgSDI2NFBhcnNlcigpKTsKLSAgY29uc3QgdWludDhfdCogc3RhcnQgPSAmKCpidWZmZXIpWzBdOwotICBwYXJzZXItPlNldEVuY3J5cHRlZFN0cmVhbShzdGFydCwgYnVmZmVyLT5zaXplKCksICpzdWJzYW1wbGVzKTsKLQotICBIMjY0TkFMVSBuYWx1OwotICBpZiAocGFyc2VyLT5BZHZhbmNlVG9OZXh0TkFMVSgmbmFsdSkgIT0gSDI2NFBhcnNlcjo6a09rKSByZXR1cm4gZmFsc2U7Ci0KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD46Oml0ZXJhdG9yIGNvbmZpZ19pbnNlcnRfcG9pbnQgPSBidWZmZXItPmJlZ2luKCk7Ci0KLSAgaWYgKG5hbHUubmFsX3VuaXRfdHlwZSA9PSBIMjY0TkFMVTo6a0FVRCkgewotICAgIC8vIE1vdmUgaW5zZXJ0IHBvaW50IHRvIGp1c3QgYWZ0ZXIgdGhlIEFVRC4KLSAgICBjb25maWdfaW5zZXJ0X3BvaW50ICs9IChuYWx1LmRhdGEgKyBuYWx1LnNpemUpIC0gc3RhcnQ7Ci0gIH0KLQotICAvLyBDbGVhciB8cGFyc2VyfCBhbmQgfHN0YXJ0fCBzaW5jZSB0aGV5IGFyZW4ndCBuZWVkZWQgYW55bW9yZSBhbmQKLSAgLy8gd2lsbCBob2xkIHN0YWxlIHBvaW50ZXJzIG9uY2UgdGhlIGluc2VydCBoYXBwZW5zLgotICBwYXJzZXIucmVzZXQoKTsKLSAgc3RhcnQgPSBOVUxMOwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHBhcmFtX3NldHM7Ci0gIFJDSEVDSyhBVkM6OkNvbnZlcnRDb25maWdUb0FubmV4QihhdmNfY29uZmlnLCAmcGFyYW1fc2V0cykpOwotCi0gIGlmIChzdWJzYW1wbGVzICYmICFzdWJzYW1wbGVzLT5lbXB0eSgpKSB7Ci0gICAgaW50IHN1YnNhbXBsZV9pbmRleCA9Ci0gICAgICAgIEZpbmRTdWJzYW1wbGVJbmRleCgqYnVmZmVyLCBzdWJzYW1wbGVzLCAmKCpjb25maWdfaW5zZXJ0X3BvaW50KSk7Ci0gICAgLy8gVXBkYXRlIHRoZSBzaXplIG9mIHRoZSBzdWJzYW1wbGUgd2hlcmUgU1BTL1BQUyBpcyB0byBiZSBpbnNlcnRlZC4KLSAgICAoKnN1YnNhbXBsZXMpW3N1YnNhbXBsZV9pbmRleF0uY2xlYXJfYnl0ZXMgKz0gcGFyYW1fc2V0cy5zaXplKCk7Ci0gIH0KLQotICBidWZmZXItPmluc2VydChjb25maWdfaW5zZXJ0X3BvaW50LCBwYXJhbV9zZXRzLmJlZ2luKCksIHBhcmFtX3NldHMuZW5kKCkpOwotCi0gIERDSEVDSyhBVkM6OklzVmFsaWRBbm5leEIoKmJ1ZmZlciwgKnN1YnNhbXBsZXMpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBBVkM6OkNvbnZlcnRDb25maWdUb0FubmV4Qihjb25zdCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCYgYXZjX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZmZlcikgewotICBEQ0hFQ0soYnVmZmVyLT5lbXB0eSgpKTsKLSAgYnVmZmVyLT5jbGVhcigpOwotICBpbnQgdG90YWxfc2l6ZSA9IDA7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZjX2NvbmZpZy5zcHNfbGlzdC5zaXplKCk7IGkrKykKLSAgICB0b3RhbF9zaXplICs9IGF2Y19jb25maWcuc3BzX2xpc3RbaV0uc2l6ZSgpICsga0FubmV4QlN0YXJ0Q29kZVNpemU7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZjX2NvbmZpZy5wcHNfbGlzdC5zaXplKCk7IGkrKykKLSAgICB0b3RhbF9zaXplICs9IGF2Y19jb25maWcucHBzX2xpc3RbaV0uc2l6ZSgpICsga0FubmV4QlN0YXJ0Q29kZVNpemU7Ci0gIGJ1ZmZlci0+cmVzZXJ2ZSh0b3RhbF9zaXplKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2Y19jb25maWcuc3BzX2xpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICBidWZmZXItPmluc2VydChidWZmZXItPmVuZCgpLCBrQW5uZXhCU3RhcnRDb2RlLAotICAgICAgICAgICAgICAgICAgIGtBbm5leEJTdGFydENvZGUgKyBrQW5uZXhCU3RhcnRDb2RlU2l6ZSk7Ci0gICAgYnVmZmVyLT5pbnNlcnQoYnVmZmVyLT5lbmQoKSwgYXZjX2NvbmZpZy5zcHNfbGlzdFtpXS5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgIGF2Y19jb25maWcuc3BzX2xpc3RbaV0uZW5kKCkpOwotICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmNfY29uZmlnLnBwc19saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgYnVmZmVyLT5pbnNlcnQoYnVmZmVyLT5lbmQoKSwga0FubmV4QlN0YXJ0Q29kZSwKLSAgICAgICAgICAgICAgICAgICBrQW5uZXhCU3RhcnRDb2RlICsga0FubmV4QlN0YXJ0Q29kZVNpemUpOwotICAgIGJ1ZmZlci0+aW5zZXJ0KGJ1ZmZlci0+ZW5kKCksIGF2Y19jb25maWcucHBzX2xpc3RbaV0uYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICBhdmNfY29uZmlnLnBwc19saXN0W2ldLmVuZCgpKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVmVyaWZpZXMgQW5uZXhCIE5BTFUgb3JkZXIgYWNjb3JkaW5nIHRvIElTTy9JRUMgMTQ0OTYtMTAgU2VjdGlvbiA3LjQuMS4yLjMKLWJvb2wgQVZDOjpJc1ZhbGlkQW5uZXhCKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpIHsKLSAgcmV0dXJuIElzVmFsaWRBbm5leEIoJmJ1ZmZlclswXSwgYnVmZmVyLnNpemUoKSwgc3Vic2FtcGxlcyk7Ci19Ci0KLWJvb2wgQVZDOjpJc1ZhbGlkQW5uZXhCKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpIHsKLSAgRFZMT0coMykgPDwgX19GVU5DVElPTl9fOwotICBEQ0hFQ0soYnVmZmVyKTsKLQotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdHJ1ZTsKLQotICBIMjY0UGFyc2VyIHBhcnNlcjsKLSAgcGFyc2VyLlNldEVuY3J5cHRlZFN0cmVhbShidWZmZXIsIHNpemUsIHN1YnNhbXBsZXMpOwotCi0gIHR5cGVkZWYgZW51bSB7Ci0gICAga0FVREFsbG93ZWQsCi0gICAga0JlZm9yZUZpcnN0VkNMLCAgLy8gVkNMID09IG5hbF91bml0X3R5cGVzIDEtNQotICAgIGtBZnRlckZpcnN0VkNMLAotICAgIGtFT1N0cmVhbUFsbG93ZWQsCi0gICAga05vTW9yZURhdGFBbGxvd2VkLAotICB9IE5BTFVPcmRlclN0YXRlOwotCi0gIEgyNjROQUxVIG5hbHU7Ci0gIE5BTFVPcmRlclN0YXRlIG9yZGVyX3N0YXRlID0ga0FVREFsbG93ZWQ7Ci0gIGludCBsYXN0X25hbHVfdHlwZSA9IEgyNjROQUxVOjprVW5zcGVjaWZpZWQ7Ci0gIGJvb2wgZG9uZSA9IGZhbHNlOwotICB3aGlsZSAoIWRvbmUpIHsKLSAgICBzd2l0Y2ggKHBhcnNlci5BZHZhbmNlVG9OZXh0TkFMVSgmbmFsdSkpIHsKLSAgICAgIGNhc2UgSDI2NFBhcnNlcjo6a09rOgotICAgICAgICBEVkxPRygzKSA8PCAibmFsX3VuaXRfdHlwZSAiIDw8IG5hbHUubmFsX3VuaXRfdHlwZTsKLQotICAgICAgICBzd2l0Y2ggKG5hbHUubmFsX3VuaXRfdHlwZSkgewotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtBVUQ6Ci0gICAgICAgICAgICBpZiAob3JkZXJfc3RhdGUgPiBrQVVEQWxsb3dlZCkgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBBVUQgaW4gb3JkZXJfc3RhdGUgIiA8PCBvcmRlcl9zdGF0ZTsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3JkZXJfc3RhdGUgPSBrQmVmb3JlRmlyc3RWQ0w7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtTRUlNZXNzYWdlOgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE0OgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE1OgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE2OgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE3OgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE4OgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtQUFM6Ci0gICAgICAgICAgY2FzZSBIMjY0TkFMVTo6a1NQUzoKLSAgICAgICAgICAgIGlmIChvcmRlcl9zdGF0ZSA+IGtCZWZvcmVGaXJzdFZDTCkgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBOQUxVIHR5cGUgIiA8PCBuYWx1Lm5hbF91bml0X3R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBpbiBvcmRlcl9zdGF0ZSAiIDw8IG9yZGVyX3N0YXRlOwotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcmRlcl9zdGF0ZSA9IGtCZWZvcmVGaXJzdFZDTDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBIMjY0TkFMVTo6a1NQU0V4dDoKLSAgICAgICAgICAgIGlmIChsYXN0X25hbHVfdHlwZSAhPSBIMjY0TkFMVTo6a1NQUykgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiU1BTIGV4dGVuc2lvbiBkb2VzIG5vdCBmb2xsb3cgYW4gU1BTLiI7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBIMjY0TkFMVTo6a05vbklEUlNsaWNlOgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtTbGljZURhdGFBOgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtTbGljZURhdGFCOgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtTbGljZURhdGFDOgotICAgICAgICAgIGNhc2UgSDI2NE5BTFU6OmtJRFJTbGljZToKLSAgICAgICAgICAgIGlmIChvcmRlcl9zdGF0ZSA+IGtBZnRlckZpcnN0VkNMKSB7Ci0gICAgICAgICAgICAgIERWTE9HKDEpIDw8ICJVbmV4cGVjdGVkIFZDTCBpbiBvcmRlcl9zdGF0ZSAiIDw8IG9yZGVyX3N0YXRlOwotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcmRlcl9zdGF0ZSA9IGtBZnRlckZpcnN0VkNMOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEgyNjROQUxVOjprQ29kZWRTbGljZUF1eDoKLSAgICAgICAgICAgIGlmIChvcmRlcl9zdGF0ZSAhPSBrQWZ0ZXJGaXJzdFZDTCkgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBleHRlbnNpb24gaW4gb3JkZXJfc3RhdGUgIiA8PCBvcmRlcl9zdGF0ZTsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEgyNjROQUxVOjprRU9TZXE6Ci0gICAgICAgICAgICBpZiAob3JkZXJfc3RhdGUgIT0ga0FmdGVyRmlyc3RWQ0wpIHsKLSAgICAgICAgICAgICAgRFZMT0coMSkgPDwgIlVuZXhwZWN0ZWQgRU9TZXEgaW4gb3JkZXJfc3RhdGUgIiA8PCBvcmRlcl9zdGF0ZTsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3JkZXJfc3RhdGUgPSBrRU9TdHJlYW1BbGxvd2VkOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEgyNjROQUxVOjprRU9TdHJlYW06Ci0gICAgICAgICAgICBpZiAob3JkZXJfc3RhdGUgPCBrQWZ0ZXJGaXJzdFZDTCkgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBFT1N0cmVhbSBpbiBvcmRlcl9zdGF0ZSAiIDw8IG9yZGVyX3N0YXRlOwotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcmRlcl9zdGF0ZSA9IGtOb01vcmVEYXRhQWxsb3dlZDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBIMjY0TkFMVTo6a0ZpbGxlcjoKLSAgICAgICAgICBjYXNlIEgyNjROQUxVOjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgICAgICBpZiAoIShvcmRlcl9zdGF0ZSA+PSBrQWZ0ZXJGaXJzdFZDTCAmJgotICAgICAgICAgICAgICAgICAgb3JkZXJfc3RhdGUgPCBrRU9TdHJlYW1BbGxvd2VkKSkgewotICAgICAgICAgICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBOQUxVIHR5cGUgIiA8PCBuYWx1Lm5hbF91bml0X3R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBpbiBvcmRlcl9zdGF0ZSAiIDw8IG9yZGVyX3N0YXRlOwotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBEQ0hFQ0tfR0UobmFsdS5uYWxfdW5pdF90eXBlLCAyMCk7Ci0gICAgICAgICAgICBpZiAobmFsdS5uYWxfdW5pdF90eXBlID49IDIwICYmIG5hbHUubmFsX3VuaXRfdHlwZSA8PSAzMSAmJgotICAgICAgICAgICAgICAgIG9yZGVyX3N0YXRlICE9IGtBZnRlckZpcnN0VkNMKSB7Ci0gICAgICAgICAgICAgIERWTE9HKDEpIDw8ICJVbmV4cGVjdGVkIE5BTFUgdHlwZSAiIDw8IG5hbHUubmFsX3VuaXRfdHlwZQotICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGluIG9yZGVyX3N0YXRlICIgPDwgb3JkZXJfc3RhdGU7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBsYXN0X25hbHVfdHlwZSA9IG5hbHUubmFsX3VuaXRfdHlwZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgSDI2NFBhcnNlcjo6a0ludmFsaWRTdHJlYW06Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgY2FzZSBIMjY0UGFyc2VyOjprVW5zdXBwb3J0ZWRTdHJlYW06Ci0gICAgICAgIE5PVFJFQUNIRUQoKSA8PCAiQWR2YW5jZVRvTmV4dE5BTFUoKSByZXR1cm5lZCBrVW5zdXBwb3J0ZWRTdHJlYW0hIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBjYXNlIEgyNjRQYXJzZXI6OmtFT1N0cmVhbToKLSAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIG9yZGVyX3N0YXRlID49IGtBZnRlckZpcnN0VkNMOwotfQotCi1BVkNCaXRzdHJlYW1Db252ZXJ0ZXI6OkFWQ0JpdHN0cmVhbUNvbnZlcnRlcigKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ+IGF2Y19jb25maWcpCi0gICAgOiBhdmNfY29uZmlnXyhzdGQ6Om1vdmUoYXZjX2NvbmZpZykpIHsKLSAgRENIRUNLKGF2Y19jb25maWdfKTsKLX0KLQotQVZDQml0c3RyZWFtQ29udmVydGVyOjp+QVZDQml0c3RyZWFtQ29udmVydGVyKCkge30KLQotYm9vbCBBVkNCaXRzdHJlYW1Db252ZXJ0ZXI6OkNvbnZlcnRGcmFtZSgKLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogZnJhbWVfYnVmLCBib29sIGlzX2tleWZyYW1lLAotICAgIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcykgY29uc3QgewotICAvLyBDb252ZXJ0IHRoZSBBVkMgTkFMVSBsZW5ndGggZmllbGRzIHRvIEFubmV4IEIgaGVhZGVycywgYXMgZXhwZWN0ZWQgYnkKLSAgLy8gZGVjb2RpbmcgbGlicmFyaWVzLiBTaW5jZSB0aGlzIG1heSBlbmxhcmdlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIHdlIGFsc28KLSAgLy8gdXBkYXRlIHRoZSBjbGVhciBieXRlIGNvdW50IGZvciBlYWNoIHN1YnNhbXBsZSBpZiBlbmNyeXB0aW9uIGlzIHVzZWQgdG8KLSAgLy8gYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2UgaW4gc2l6ZSBiZXR3ZWVuIHRoZSBsZW5ndGggcHJlZml4IGFuZCBBbm5leCBCCi0gIC8vIHN0YXJ0IGNvZGUuCi0gIFJDSEVDSyhBVkM6OkNvbnZlcnRGcmFtZVRvQW5uZXhCKGF2Y19jb25maWdfLT5sZW5ndGhfc2l6ZSwgZnJhbWVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzYW1wbGVzKSk7Ci0KLSAgaWYgKGlzX2tleWZyYW1lKSB7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIGtleWZyYW1lLCB3ZSAocmUtKWluamVjdCBTUFMgYW5kIFBQUyBoZWFkZXJzIGF0IHRoZSBzdGFydCBvZgotICAgIC8vIGEgZnJhbWUuIElmIHN1YnNhbXBsZSBpbmZvIGlzIHByZXNlbnQsIHdlIGFsc28gdXBkYXRlIHRoZSBjbGVhciBieXRlCi0gICAgLy8gY291bnQgZm9yIHRoYXQgZmlyc3Qgc3Vic2FtcGxlLgotICAgIFJDSEVDSyhBVkM6Okluc2VydFBhcmFtU2V0c0FubmV4QigqYXZjX2NvbmZpZ18sIGZyYW1lX2J1Ziwgc3Vic2FtcGxlcykpOwotICB9Ci0KLSAgRENIRUNLKEFWQzo6SXNWYWxpZEFubmV4QigqZnJhbWVfYnVmLCAqc3Vic2FtcGxlcykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYXZjLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYXZjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjEyZTguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2F2Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9BVkNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0FWQ19IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9iaXRzdHJlYW1fY29udmVydGVyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RydWN0IFN1YnNhbXBsZUVudHJ5OwotCi1uYW1lc3BhY2UgbXA0IHsKLQotc3RydWN0IEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgQVZDIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBib29sIENvbnZlcnRGcmFtZVRvQW5uZXhCKGludCBsZW5ndGhfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKTsKLQotICAvLyBJbnNlcnRzIHRoZSBTUFMgJiBQUFMgZGF0YSBmcm9tIHxhdmNfY29uZmlnfCBpbnRvIHxidWZmZXJ8LgotICAvLyB8YnVmZmVyfCBpcyBleHBlY3RlZCB0byBjb250YWluIEFubmV4QiBjb25mb3JtYW50IGRhdGEuCi0gIC8vIHxzdWJzYW1wbGVzfCBjb250YWlucyB0aGUgU3Vic2FtcGxlRW50cnkgaW5mbyBpZiB8YnVmZmVyfCBjb250YWlucwotICAvLyBlbmNyeXB0ZWQgZGF0YS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJhbSBzZXRzIHdlcmUgc3VjY2Vzc2Z1bGx5IGluc2VydGVkLgotICBzdGF0aWMgYm9vbCBJbnNlcnRQYXJhbVNldHNBbm5leEIoCi0gICAgICBjb25zdCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCYgYXZjX2NvbmZpZywKLSAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWZmZXIsIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcyk7Ci0KLSAgc3RhdGljIGJvb2wgQ29udmVydENvbmZpZ1RvQW5uZXhCKAotICAgICAgY29uc3QgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGF2Y19jb25maWcsCi0gICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogYnVmZmVyKTsKLQotICAvLyBWZXJpZmllcyB0aGF0IHRoZSBjb250ZW50cyBvZiB8YnVmZmVyfCBjb25mb3JtIHRvCi0gIC8vIFNlY3Rpb24gNy40LjEuMi4zIG9mIElTTy9JRUMgMTQ0OTYtMTAuCi0gIC8vIHxzdWJzYW1wbGVzfCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBwYXJ0cyBvZiB0aGUgYnVmZmVyIGFyZQotICAvLyBlbmNyeXB0ZWQgYW5kIHdoaWNoIHBhcnRzIGFyZSBjbGVhci4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxidWZmZXJ8IGNvbnRhaW5zIGNvbmZvcm1hbnQgQW5uZXggQiBkYXRhCi0gIC8vIFRPRE8oYWNvbHdlbGwpOiBSZW1vdmUgdGhlIHN0ZDo6dmVjdG9yIHZlcnNpb24gd2hlbiB3ZSBjYW4gdXNlLAotICAvLyBDKysxMSdzIHN0ZDo6dmVjdG9yPFQ+OjpkYXRhKCkgbWV0aG9kLgotICBzdGF0aWMgYm9vbCBJc1ZhbGlkQW5uZXhCKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+JiBzdWJzYW1wbGVzKTsKLSAgc3RhdGljIGJvb2wgSXNWYWxpZEFubmV4Qihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcyk7Ci0KLSAgLy8gR2l2ZW4gYSB8YnVmZmVyfCBhbmQgfHN1YnNhbXBsZXN8IGluZm9ybWF0aW9uIGFuZCB8cHRzfCBwb2ludGVyIGludG8gdGhlCi0gIC8vIHxidWZmZXJ8IGZpbmRzIHRoZSBpbmRleCBvZiB0aGUgc3Vic2FtcGxlIHxwdHJ8IGlzIHBvaW50aW5nIGludG8uCi0gIHN0YXRpYyBpbnQgRmluZFN1YnNhbXBsZUluZGV4KGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogcHRyKTsKLX07Ci0KLS8vIEFWQ0JpdHN0cmVhbUNvbnZlcnRlciBjb252ZXJ0cyBBVkMvSC4yNjQgYml0c3RyZWFtIGZyb20gTVA0IGNvbnRhaW5lciBmb3JtYXQKLS8vIHdpdGggZW1iZWRkZWQgTkFMVSBsZW5ndGhzIGludG8gQW5uZXhCIGJpdHN0cmVhbSBmb3JtYXQgKGRlc2NyaWJlZCBpbiBJU08vSUVDCi0vLyAxNDQ5Ni0xMCkgd2l0aCA0LWJ5dGUgc3RhcnQgY29kZXMuIEl0IGFsc28ga25vd3MgaG93IHRvIGhhbmRsZSBDRU5DLWVuY3J5cHRlZAotLy8gc3RyZWFtcyBhbmQgYWRqdXN0cyBzdWJzYW1wbGUgZGF0YSBmb3IgdGhvc2Ugc3RyZWFtcyB3aGlsZSBjb252ZXJ0aW5nLgotY2xhc3MgQVZDQml0c3RyZWFtQ29udmVydGVyIDogcHVibGljIEJpdHN0cmVhbUNvbnZlcnRlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBBVkNCaXRzdHJlYW1Db252ZXJ0ZXIoCi0gICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ+IGF2Y19jb25maWcpOwotCi0gIC8vIEJpdHN0cmVhbUNvbnZlcnRlciBpbnRlcmZhY2UKLSAgYm9vbCBDb252ZXJ0RnJhbWUoc3RkOjp2ZWN0b3I8dWludDhfdD4qIGZyYW1lX2J1ZiwgYm9vbCBpc19rZXlmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKSBjb25zdCBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIH5BVkNCaXRzdHJlYW1Db252ZXJ0ZXIoKSBvdmVycmlkZTsKLSAgc3RkOjp1bmlxdWVfcHRyPEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkPiBhdmNfY29uZmlnXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9BVkNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hdmNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYXZjX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTM3YzY4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hdmNfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2gyNjRfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2F2Yy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDQgewotCi1zdGF0aWMgY29uc3QgdWludDhfdCBrTkFMVTFbXSA9IHsweDAxLCAweDAyLCAweDAzfTsKLXN0YXRpYyBjb25zdCB1aW50OF90IGtOQUxVMltdID0gezB4MDQsIDB4MDUsIDB4MDYsIDB4MDd9Owotc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0V4cGVjdGVkW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDA0LCAweDA1LCAweDA2LCAweDA3fTsKLQotc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0V4cGVjdGVkUGFyYW1TZXRzW10gPSB7Ci0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLSAgICAweDY3LCAweDM0LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweDU2LCAweDc4fTsKLQotc3RhdGljIEgyNjROQUxVOjpUeXBlIFN0cmluZ1RvTkFMVVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKLSAgaWYgKG5hbWUgPT0gIlAiKSByZXR1cm4gSDI2NE5BTFU6OmtOb25JRFJTbGljZTsKLQotICBpZiAobmFtZSA9PSAiSSIpIHJldHVybiBIMjY0TkFMVTo6a0lEUlNsaWNlOwotCi0gIGlmIChuYW1lID09ICJTRUkiKSByZXR1cm4gSDI2NE5BTFU6OmtTRUlNZXNzYWdlOwotCi0gIGlmIChuYW1lID09ICJTUFMiKSByZXR1cm4gSDI2NE5BTFU6OmtTUFM7Ci0KLSAgaWYgKG5hbWUgPT0gIlNQU0V4dCIpIHJldHVybiBIMjY0TkFMVTo6a1NQU0V4dDsKLQotICBpZiAobmFtZSA9PSAiUFBTIikgcmV0dXJuIEgyNjROQUxVOjprUFBTOwotCi0gIGlmIChuYW1lID09ICJBVUQiKSByZXR1cm4gSDI2NE5BTFU6OmtBVUQ7Ci0KLSAgaWYgKG5hbWUgPT0gIkVPU2VxIikgcmV0dXJuIEgyNjROQUxVOjprRU9TZXE7Ci0KLSAgaWYgKG5hbWUgPT0gIkVPU3RyIikgcmV0dXJuIEgyNjROQUxVOjprRU9TdHJlYW07Ci0KLSAgaWYgKG5hbWUgPT0gIkZJTEwiKSByZXR1cm4gSDI2NE5BTFU6OmtGaWxsZXI7Ci0KLSAgaWYgKG5hbWUgPT0gIlIxNCIpIHJldHVybiBIMjY0TkFMVTo6a1Jlc2VydmVkMTQ7Ci0KLSAgQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIG5hbWU6ICIgPDwgbmFtZTsKLSAgcmV0dXJuIEgyNjROQUxVOjprVW5zcGVjaWZpZWQ7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBOQUxVVHlwZVRvU3RyaW5nKGludCB0eXBlKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgSDI2NE5BTFU6OmtOb25JRFJTbGljZToKLSAgICAgIHJldHVybiAiUCI7Ci0gICAgY2FzZSBIMjY0TkFMVTo6a1NsaWNlRGF0YUE6Ci0gICAgICByZXR1cm4gIlNEQSI7Ci0gICAgY2FzZSBIMjY0TkFMVTo6a1NsaWNlRGF0YUI6Ci0gICAgICByZXR1cm4gIlNEQiI7Ci0gICAgY2FzZSBIMjY0TkFMVTo6a1NsaWNlRGF0YUM6Ci0gICAgICByZXR1cm4gIlNEQyI7Ci0gICAgY2FzZSBIMjY0TkFMVTo6a0lEUlNsaWNlOgotICAgICAgcmV0dXJuICJJIjsKLSAgICBjYXNlIEgyNjROQUxVOjprU0VJTWVzc2FnZToKLSAgICAgIHJldHVybiAiU0VJIjsKLSAgICBjYXNlIEgyNjROQUxVOjprU1BTOgotICAgICAgcmV0dXJuICJTUFMiOwotICAgIGNhc2UgSDI2NE5BTFU6OmtTUFNFeHQ6Ci0gICAgICByZXR1cm4gIlNQU0V4dCI7Ci0gICAgY2FzZSBIMjY0TkFMVTo6a1BQUzoKLSAgICAgIHJldHVybiAiUFBTIjsKLSAgICBjYXNlIEgyNjROQUxVOjprQVVEOgotICAgICAgcmV0dXJuICJBVUQiOwotICAgIGNhc2UgSDI2NE5BTFU6OmtFT1NlcToKLSAgICAgIHJldHVybiAiRU9TZXEiOwotICAgIGNhc2UgSDI2NE5BTFU6OmtFT1N0cmVhbToKLSAgICAgIHJldHVybiAiRU9TdHIiOwotICAgIGNhc2UgSDI2NE5BTFU6OmtGaWxsZXI6Ci0gICAgICByZXR1cm4gIkZJTEwiOwotICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE0OgotICAgICAgcmV0dXJuICJSMTQiOwotCi0gICAgY2FzZSBIMjY0TkFMVTo6a1Vuc3BlY2lmaWVkOgotICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE1OgotICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE2OgotICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE3OgotICAgIGNhc2UgSDI2NE5BTFU6OmtSZXNlcnZlZDE4OgotICAgIGNhc2UgSDI2NE5BTFU6OmtDb2RlZFNsaWNlQXV4OgotICAgIGNhc2UgSDI2NE5BTFU6OmtDb2RlZFNsaWNlRXh0ZW5zaW9uOgotICAgICAgQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIHR5cGU6ICIgPDwgdHlwZTsKLSAgICAgIGJyZWFrOwotICB9OwotCi0gIHJldHVybiAiVW5zdXBwb3J0ZWRUeXBlIjsKLX0KLQotc3RhdGljIHZvaWQgV3JpdGVTdGFydENvZGVBbmROQUxVVHlwZShzdGQ6OnZlY3Rvcjx1aW50OF90PiogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFsX3VuaXRfdHlwZSkgewotICBidWZmZXItPnB1c2hfYmFjaygweDAwKTsKLSAgYnVmZmVyLT5wdXNoX2JhY2soMHgwMCk7Ci0gIGJ1ZmZlci0+cHVzaF9iYWNrKDB4MDApOwotICBidWZmZXItPnB1c2hfYmFjaygweDAxKTsKLSAgYnVmZmVyLT5wdXNoX2JhY2soU3RyaW5nVG9OQUxVVHlwZShuYWxfdW5pdF90eXBlKSk7Ci19Ci0KLS8vIElucHV0IHN0cmluZyBzaG91bGQgYmUgb25lIG9yIG1vcmUgTkFMVSB0eXBlcyBzZXBhcmF0ZWQgd2l0aCBzcGFjZXMgb3IKLS8vIGNvbW1hcy4gTkFMVSBncm91cGVkIHRvZ2V0aGVyIGFuZCBzZXBhcmF0ZWQgYnkgY29tbWFzIGFyZSBwbGFjZWQgaW50byB0aGUKLS8vIHNhbWUgc3Vic2FtcGxlLCBOQUxVIGdyb3VwcyBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFyZSBwbGFjZWQgaW50byBzZXBhcmF0ZQotLy8gc3Vic2FtcGxlcy4KLS8vIEZvciBleGFtcGxlOiBpbnB1dCBzdHJpbmcgIlNQUyBQUFMgSSIgcHJvZHVjZXMgQW5uZXggQiBidWZmZXIgY29udGFpbmluZwotLy8gU1BTLCBQUFMgYW5kIEkgTkFMVXMsIGVhY2ggaW4gYSBzZXBhcmF0ZSBzdWJzYW1wbGUuIFdoaWxlIGlucHV0IHN0cmluZwotLy8gIlNQUyxQUFMgSSIgcHJvZHVjZXMgQW5uZXggQiBidWZmZXIgd2hlcmUgdGhlIGZpcnN0IHN1YnNhbXBsZSBjb250YWlucyBTUFMKLS8vIGFuZCBQUFMgTkFMVXMgYW5kIHRoZSBzZWNvbmQgc3Vic2FtcGxlIGNvbnRhaW5zIHRoZSBJLXNsaWNlIE5BTFUuCi0vLyBUaGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGNvbnRhaW4gYSB2YWxpZC1sb29raW5nIEFubmV4IEIgKGl0J3MgdmFsaWQtbG9va2luZyBpbgotLy8gdGhlIHNlbnNlIHRoYXQgaXQgaGFzIHN0YXJ0IGNvZGVzIGFuZCBjb3JyZWN0IE5BTFUgdHlwZXMsIGJ1dCB0aGUgYWN0dWFsIE5BTFUKLS8vIHBheWxvYWQgaXMganVuaykuCi12b2lkIFN0cmluZ1RvQW5uZXhCKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIsIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcykgewotICBEQ0hFQ0soIXN0ci5lbXB0eSgpKTsKLQotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3Vic2FtcGxlX3NwZWNzID0gYmFzZTo6U3BsaXRTdHJpbmcoCi0gICAgICBzdHIsICIgIiwgYmFzZTo6S0VFUF9XSElURVNQQUNFLCBiYXNlOjpTUExJVF9XQU5UX05PTkVNUFRZKTsKLSAgRVhQRUNUX0dUKHN1YnNhbXBsZV9zcGVjcy5zaXplKCksIDB1KTsKLQotICBidWZmZXItPmNsZWFyKCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Vic2FtcGxlX3NwZWNzLnNpemUoKTsgKytpKSB7Ci0gICAgU3Vic2FtcGxlRW50cnkgZW50cnk7Ci0gICAgc2l6ZV90IHN0YXJ0ID0gYnVmZmVyLT5zaXplKCk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3Vic2FtcGxlX25hbHVzID0KLSAgICAgICAgYmFzZTo6U3BsaXRTdHJpbmcoc3Vic2FtcGxlX3NwZWNzW2ldLCAiLCIsIGJhc2U6OktFRVBfV0hJVEVTUEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6U1BMSVRfV0FOVF9OT05FTVBUWSk7Ci0gICAgRVhQRUNUX0dUKHN1YnNhbXBsZV9uYWx1cy5zaXplKCksIDB1KTsKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHN1YnNhbXBsZV9uYWx1cy5zaXplKCk7ICsraikgewotICAgICAgV3JpdGVTdGFydENvZGVBbmROQUxVVHlwZShidWZmZXIsIHN1YnNhbXBsZV9uYWx1c1tqXSk7Ci0KLSAgICAgIC8vIFdyaXRlIGp1bmsgZm9yIHRoZSBwYXlsb2FkIHNpbmNlIHRoZSBjdXJyZW50IGNvZGUgZG9lc24ndAotICAgICAgLy8gYWN0dWFsbHkgbG9vayBhdCBpdC4KLSAgICAgIGJ1ZmZlci0+cHVzaF9iYWNrKDB4MzIpOwotICAgICAgYnVmZmVyLT5wdXNoX2JhY2soMHgxMik7Ci0gICAgICBidWZmZXItPnB1c2hfYmFjaygweDY3KTsKLSAgICB9Ci0KLSAgICBlbnRyeS5jbGVhcl9ieXRlcyA9IGJ1ZmZlci0+c2l6ZSgpIC0gc3RhcnQ7Ci0KLSAgICBpZiAoc3Vic2FtcGxlcykgewotICAgICAgLy8gU2ltdWxhdGUgdGhlIGVuY3J5cHRlZCBiaXRzIGNvbnRhaW5pbmcgc29tZXRoaW5nIHRoYXQgbG9va3MKLSAgICAgIC8vIGxpa2UgYSBTUFMgTkFMVS4KLSAgICAgIFdyaXRlU3RhcnRDb2RlQW5kTkFMVVR5cGUoYnVmZmVyLCAiU1BTIik7Ci0gICAgfQotCi0gICAgZW50cnkuY3lwaGVyX2J5dGVzID0gYnVmZmVyLT5zaXplKCkgLSBzdGFydCAtIGVudHJ5LmNsZWFyX2J5dGVzOwotCi0gICAgaWYgKHN1YnNhbXBsZXMpIHsKLSAgICAgIHN1YnNhbXBsZXMtPnB1c2hfYmFjayhlbnRyeSk7Ci0gICAgfQotICB9Ci19Ci0KLXN0ZDo6c3RyaW5nIEFubmV4QlRvU3RyaW5nKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpIHsKLSAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7Ci0KLSAgSDI2NFBhcnNlciBwYXJzZXI7Ci0gIHBhcnNlci5TZXRFbmNyeXB0ZWRTdHJlYW0oJmJ1ZmZlclswXSwgYnVmZmVyLnNpemUoKSwgc3Vic2FtcGxlcyk7Ci0KLSAgSDI2NE5BTFUgbmFsdTsKLSAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gIHNpemVfdCBjdXJyZW50X3N1YnNhbXBsZV9pbmRleCA9IDA7Ci0gIHdoaWxlIChwYXJzZXIuQWR2YW5jZVRvTmV4dE5BTFUoJm5hbHUpID09IEgyNjRQYXJzZXI6OmtPaykgewotICAgIHNpemVfdCBzdWJzYW1wbGVfaW5kZXggPQotICAgICAgICBBVkM6OkZpbmRTdWJzYW1wbGVJbmRleChidWZmZXIsICZzdWJzYW1wbGVzLCBuYWx1LmRhdGEpOwotICAgIGlmICghZmlyc3QpIHsKLSAgICAgIHNzIDw8IChzdWJzYW1wbGVfaW5kZXggPT0gY3VycmVudF9zdWJzYW1wbGVfaW5kZXggPyAiLCIgOiAiICIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBEQ0hFQ0tfRVEoc3Vic2FtcGxlX2luZGV4LCBjdXJyZW50X3N1YnNhbXBsZV9pbmRleCk7Ci0gICAgICBmaXJzdCA9IGZhbHNlOwotICAgIH0KLQotICAgIHNzIDw8IE5BTFVUeXBlVG9TdHJpbmcobmFsdS5uYWxfdW5pdF90eXBlKTsKLSAgICBjdXJyZW50X3N1YnNhbXBsZV9pbmRleCA9IHN1YnNhbXBsZV9pbmRleDsKLSAgfQotICByZXR1cm4gc3Muc3RyKCk7Ci19Ci0KLWNsYXNzIEFWQ0NvbnZlcnNpb25UZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08aW50PiB7Ci0gcHJvdGVjdGVkOgotICB2b2lkIFdyaXRlTGVuZ3RoKGludCBsZW5ndGhfc2l6ZSwgaW50IGxlbmd0aCwgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZikgewotICAgIERDSEVDS19HRShsZW5ndGgsIDApOwotICAgIERDSEVDS19MRShsZW5ndGgsIDI1NSk7Ci0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aF9zaXplOyBpKyspIGJ1Zi0+cHVzaF9iYWNrKDApOwotICAgIGJ1Zi0+cHVzaF9iYWNrKGxlbmd0aCk7Ci0gIH0KLQotICB2b2lkIE1ha2VJbnB1dEZvckxlbmd0aChpbnQgbGVuZ3RoX3NpemUsIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWYpIHsKLSAgICBidWYtPmNsZWFyKCk7Ci0KLSAgICBXcml0ZUxlbmd0aChsZW5ndGhfc2l6ZSwgc2l6ZW9mKGtOQUxVMSksIGJ1Zik7Ci0gICAgYnVmLT5pbnNlcnQoYnVmLT5lbmQoKSwga05BTFUxLCBrTkFMVTEgKyBzaXplb2Yoa05BTFUxKSk7Ci0KLSAgICBXcml0ZUxlbmd0aChsZW5ndGhfc2l6ZSwgc2l6ZW9mKGtOQUxVMiksIGJ1Zik7Ci0gICAgYnVmLT5pbnNlcnQoYnVmLT5lbmQoKSwga05BTFUyLCBrTkFMVTIgKyBzaXplb2Yoa05BTFUyKSk7Ci0gIH0KLX07Ci0KLVRFU1RfUChBVkNDb252ZXJzaW9uVGVzdCwgUGFyc2VDb3JyZWN0bHkpIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmOwotICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlczsKLSAgTWFrZUlucHV0Rm9yTGVuZ3RoKEdldFBhcmFtKCksICZidWYpOwotICBFWFBFQ1RfVFJVRShBVkM6OkNvbnZlcnRGcmFtZVRvQW5uZXhCKEdldFBhcmFtKCksICZidWYsICZzdWJzYW1wbGVzKSk7Ci0gIEVYUEVDVF9UUlVFKEFWQzo6SXNWYWxpZEFubmV4QihidWYsIHN1YnNhbXBsZXMpKTsKLSAgRVhQRUNUX0VRKGJ1Zi5zaXplKCksIHNpemVvZihrRXhwZWN0ZWQpKTsKLSAgRVhQRUNUX0VRKDAsIG1lbWNtcChrRXhwZWN0ZWQsICZidWZbMF0sIHNpemVvZihrRXhwZWN0ZWQpKSk7Ci0gIEVYUEVDVF9FUSgiUCxTREMiLCBBbm5leEJUb1N0cmluZyhidWYsIHN1YnNhbXBsZXMpKTsKLX0KLQotLy8gSW50ZW50aW9uYWxseSB3cml0ZSBOQUxVIHNpemVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBidWZmZXIuCi1URVNUX1AoQVZDQ29udmVyc2lvblRlc3QsIE5BTFVTaXplVG9vTGFyZ2UpIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmOwotICBXcml0ZUxlbmd0aChHZXRQYXJhbSgpLCAxMCAqIHNpemVvZihrTkFMVTEpLCAmYnVmKTsKLSAgYnVmLmluc2VydChidWYuZW5kKCksIGtOQUxVMSwga05BTFUxICsgc2l6ZW9mKGtOQUxVMSkpOwotICBFWFBFQ1RfRkFMU0UoQVZDOjpDb252ZXJ0RnJhbWVUb0FubmV4QihHZXRQYXJhbSgpLCAmYnVmLCBOVUxMKSk7Ci19Ci0KLVRFU1RfUChBVkNDb252ZXJzaW9uVGVzdCwgTkFMVVNpemVJc1plcm8pIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmOwotICBXcml0ZUxlbmd0aChHZXRQYXJhbSgpLCAwLCAmYnVmKTsKLQotICBXcml0ZUxlbmd0aChHZXRQYXJhbSgpLCBzaXplb2Yoa05BTFUxKSwgJmJ1Zik7Ci0gIGJ1Zi5pbnNlcnQoYnVmLmVuZCgpLCBrTkFMVTEsIGtOQUxVMSArIHNpemVvZihrTkFMVTEpKTsKLQotICBXcml0ZUxlbmd0aChHZXRQYXJhbSgpLCAwLCAmYnVmKTsKLQotICBXcml0ZUxlbmd0aChHZXRQYXJhbSgpLCBzaXplb2Yoa05BTFUyKSwgJmJ1Zik7Ci0gIGJ1Zi5pbnNlcnQoYnVmLmVuZCgpLCBrTkFMVTIsIGtOQUxVMiArIHNpemVvZihrTkFMVTIpKTsKLQotICBFWFBFQ1RfRkFMU0UoQVZDOjpDb252ZXJ0RnJhbWVUb0FubmV4QihHZXRQYXJhbSgpLCAmYnVmLCBOVUxMKSk7Ci19Ci0KLVRFU1RfUChBVkNDb252ZXJzaW9uVGVzdCwgU3Vic2FtcGxlU2l6ZXNVcGRhdGVkQWZ0ZXJBbm5leEJDb252ZXJzaW9uKSB7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZjsKLSAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZXM7Ci0gIFN1YnNhbXBsZUVudHJ5IHN1YnNhbXBsZTsKLQotICAvLyBXcml0ZSB0aGUgZmlyc3Qgc3Vic2FtcGxlLCBjb25zaXN0aW5nIG9mIG9ubHkgb25lIE5BTFUKLSAgV3JpdGVMZW5ndGgoR2V0UGFyYW0oKSwgc2l6ZW9mKGtOQUxVMSksICZidWYpOwotICBidWYuaW5zZXJ0KGJ1Zi5lbmQoKSwga05BTFUxLCBrTkFMVTEgKyBzaXplb2Yoa05BTFUxKSk7Ci0KLSAgc3Vic2FtcGxlLmNsZWFyX2J5dGVzID0gR2V0UGFyYW0oKSArIHNpemVvZihrTkFMVTEpOwotICBzdWJzYW1wbGUuY3lwaGVyX2J5dGVzID0gMDsKLSAgc3Vic2FtcGxlcy5wdXNoX2JhY2soc3Vic2FtcGxlKTsKLQotICAvLyBXcml0ZSB0aGUgc2Vjb25kIHN1YnNhbXBsZSwgY29udGFpbmluZyB0d28gTkFMVXMKLSAgV3JpdGVMZW5ndGgoR2V0UGFyYW0oKSwgc2l6ZW9mKGtOQUxVMSksICZidWYpOwotICBidWYuaW5zZXJ0KGJ1Zi5lbmQoKSwga05BTFUxLCBrTkFMVTEgKyBzaXplb2Yoa05BTFUxKSk7Ci0gIFdyaXRlTGVuZ3RoKEdldFBhcmFtKCksIHNpemVvZihrTkFMVTIpLCAmYnVmKTsKLSAgYnVmLmluc2VydChidWYuZW5kKCksIGtOQUxVMiwga05BTFUyICsgc2l6ZW9mKGtOQUxVMikpOwotCi0gIHN1YnNhbXBsZS5jbGVhcl9ieXRlcyA9IDIgKiBHZXRQYXJhbSgpICsgc2l6ZW9mKGtOQUxVMSkgKyBzaXplb2Yoa05BTFUyKTsKLSAgc3Vic2FtcGxlLmN5cGhlcl9ieXRlcyA9IDA7Ci0gIHN1YnNhbXBsZXMucHVzaF9iYWNrKHN1YnNhbXBsZSk7Ci0KLSAgLy8gV3JpdGUgdGhlIHRoaXJkIHN1YnNhbXBsZSwgY29udGFpbmluZyBhIHNpbmdsZSBvbmUtYnl0ZSBOQUxVCi0gIFdyaXRlTGVuZ3RoKEdldFBhcmFtKCksIDEsICZidWYpOwotICBidWYucHVzaF9iYWNrKDApOwotICBzdWJzYW1wbGUuY2xlYXJfYnl0ZXMgPSBHZXRQYXJhbSgpICsgMTsKLSAgc3Vic2FtcGxlLmN5cGhlcl9ieXRlcyA9IDA7Ci0gIHN1YnNhbXBsZXMucHVzaF9iYWNrKHN1YnNhbXBsZSk7Ci0KLSAgRVhQRUNUX1RSVUUoQVZDOjpDb252ZXJ0RnJhbWVUb0FubmV4QihHZXRQYXJhbSgpLCAmYnVmLCAmc3Vic2FtcGxlcykpOwotICBFWFBFQ1RfRVEoc3Vic2FtcGxlcy5zaXplKCksIDN1KTsKLSAgRVhQRUNUX0VRKHN1YnNhbXBsZXNbMF0uY2xlYXJfYnl0ZXMsIDQgKyBzaXplb2Yoa05BTFUxKSk7Ci0gIEVYUEVDVF9FUShzdWJzYW1wbGVzWzBdLmN5cGhlcl9ieXRlcywgMHUpOwotICBFWFBFQ1RfRVEoc3Vic2FtcGxlc1sxXS5jbGVhcl9ieXRlcywgOCArIHNpemVvZihrTkFMVTEpICsgc2l6ZW9mKGtOQUxVMikpOwotICBFWFBFQ1RfRVEoc3Vic2FtcGxlc1sxXS5jeXBoZXJfYnl0ZXMsIDB1KTsKLSAgRVhQRUNUX0VRKHN1YnNhbXBsZXNbMl0uY2xlYXJfYnl0ZXMsIDQgKyAxdSk7Ci0gIEVYUEVDVF9FUShzdWJzYW1wbGVzWzJdLmN5cGhlcl9ieXRlcywgMHUpOwotfQotCi1URVNUX1AoQVZDQ29udmVyc2lvblRlc3QsIFBhcnNlUGFydGlhbCkgewotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWY7Ci0gIE1ha2VJbnB1dEZvckxlbmd0aChHZXRQYXJhbSgpLCAmYnVmKTsKLSAgYnVmLnBvcF9iYWNrKCk7Ci0gIEVYUEVDVF9GQUxTRShBVkM6OkNvbnZlcnRGcmFtZVRvQW5uZXhCKEdldFBhcmFtKCksICZidWYsIE5VTEwpKTsKLSAgLy8gVGhpcyB0ZXN0cyBhIGJ1ZmZlciBlbmRpbmcgaW4gdGhlIG1pZGRsZSBvZiBhIE5BTCBsZW5ndGguIEZvciBsZW5ndGggc2l6ZQotICAvLyBvZiBvbmUsIHRoaXMgY2FuJ3QgaGFwcGVuLCBzbyB3ZSBza2lwIHRoYXQgY2FzZS4KLSAgaWYgKEdldFBhcmFtKCkgIT0gMSkgewotICAgIE1ha2VJbnB1dEZvckxlbmd0aChHZXRQYXJhbSgpLCAmYnVmKTsKLSAgICBidWYuZXJhc2UoYnVmLmVuZCgpIC0gKHNpemVvZihrTkFMVTIpICsgMSksIGJ1Zi5lbmQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKEFWQzo6Q29udmVydEZyYW1lVG9Bbm5leEIoR2V0UGFyYW0oKSwgJmJ1ZiwgTlVMTCkpOwotICB9Ci19Ci0KLVRFU1RfUChBVkNDb252ZXJzaW9uVGVzdCwgUGFyc2VFbXB0eSkgewotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWY7Ci0gIEVYUEVDVF9UUlVFKEFWQzo6Q29udmVydEZyYW1lVG9Bbm5leEIoR2V0UGFyYW0oKSwgJmJ1ZiwgTlVMTCkpOwotICBFWFBFQ1RfRVEoMHUsIGJ1Zi5zaXplKCkpOwotfQotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUChBVkNDb252ZXJzaW9uVGVzdFZhbHVlcywgQVZDQ29udmVyc2lvblRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcygxLCAyLCA0KSk7Ci0KLVRFU1RfRihBVkNDb252ZXJzaW9uVGVzdCwgQ29udmVydENvbmZpZ1RvQW5uZXhCKSB7Ci0gIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIGF2Y19jb25maWc7Ci0gIGF2Y19jb25maWcuc3BzX2xpc3QucmVzaXplKDIpOwotICBhdmNfY29uZmlnLnNwc19saXN0WzBdLnB1c2hfYmFjaygweDY3KTsKLSAgYXZjX2NvbmZpZy5zcHNfbGlzdFswXS5wdXNoX2JhY2soMHgxMik7Ci0gIGF2Y19jb25maWcuc3BzX2xpc3RbMV0ucHVzaF9iYWNrKDB4NjcpOwotICBhdmNfY29uZmlnLnNwc19saXN0WzFdLnB1c2hfYmFjaygweDM0KTsKLSAgYXZjX2NvbmZpZy5wcHNfbGlzdC5yZXNpemUoMSk7Ci0gIGF2Y19jb25maWcucHBzX2xpc3RbMF0ucHVzaF9iYWNrKDB4NjgpOwotICBhdmNfY29uZmlnLnBwc19saXN0WzBdLnB1c2hfYmFjaygweDU2KTsKLSAgYXZjX2NvbmZpZy5wcHNfbGlzdFswXS5wdXNoX2JhY2soMHg3OCk7Ci0KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmOwotICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlczsKLSAgRVhQRUNUX1RSVUUoQVZDOjpDb252ZXJ0Q29uZmlnVG9Bbm5leEIoYXZjX2NvbmZpZywgJmJ1ZikpOwotICBFWFBFQ1RfRVEoMCwgbWVtY21wKGtFeHBlY3RlZFBhcmFtU2V0cywgJmJ1ZlswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0V4cGVjdGVkUGFyYW1TZXRzKSkpOwotICBFWFBFQ1RfRVEoIlNQUyxTUFMsUFBTIiwgQW5uZXhCVG9TdHJpbmcoYnVmLCBzdWJzYW1wbGVzKSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IHdlIGNhbiByb3VuZCB0cmlwIHN0cmluZyAtPiBBbm5leCBCIC0+IHN0cmluZy4KLVRFU1RfRihBVkNDb252ZXJzaW9uVGVzdCwgU3RyaW5nQ29udmVyc2lvbkZ1bmN0aW9ucykgewotICBzdGQ6OnN0cmluZyBzdHIgPSAiQVVEIFNQUyBTUFNFeHQgU1BTIFBQUyBTRUkgU0VJIFIxNCBJIFAgRklMTCBFT1NlcSBFT1N0ciI7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZjsKLSAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZXM7Ci0gIFN0cmluZ1RvQW5uZXhCKHN0ciwgJmJ1ZiwgJnN1YnNhbXBsZXMpOwotICBFWFBFQ1RfVFJVRShBVkM6OklzVmFsaWRBbm5leEIoYnVmLCBzdWJzYW1wbGVzKSk7Ci0KLSAgRVhQRUNUX0VRKHN0ciwgQW5uZXhCVG9TdHJpbmcoYnVmLCBzdWJzYW1wbGVzKSk7Ci19Ci0KLVRFU1RfRihBVkNDb252ZXJzaW9uVGVzdCwgVmFsaWRBbm5leEJDb25zdHJ1Y3RzKSB7Ci0gIGNvbnN0IGNoYXIqIHRlc3RfY2FzZXNbXSA9IHsiSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSSBJIEkgSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVVEIEkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFVRCBTUFMgUFBTIEkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkgRU9TZXEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkgRU9TZXEgRU9TdHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkgRU9TdHIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlAgUCBQIFAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFVRCBTUFMgUFBTIFAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNFSSBTRUkgSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VJIFNFSSBSMTQgSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1BTIFNQU0V4dCBTUFMgUFBTIEkgUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUjE0IFNFSSBJIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBVUQsSSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQVVELFNFSSBJIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBVUQsU0VJLFNQUyxQUFMsSSJ9OwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKHRlc3RfY2FzZXMpOyArK2kpIHsKLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWY7Ci0gICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZXM7Ci0gICAgU3RyaW5nVG9Bbm5leEIodGVzdF9jYXNlc1tpXSwgJmJ1ZiwgTlVMTCk7Ci0gICAgRVhQRUNUX1RSVUUoQVZDOjpJc1ZhbGlkQW5uZXhCKGJ1Ziwgc3Vic2FtcGxlcykpCi0gICAgICAgIDw8ICInIiA8PCB0ZXN0X2Nhc2VzW2ldIDw8ICInIGZhaWxlZCI7Ci0gIH0KLX0KLQotVEVTVF9GKEFWQ0NvbnZlcnNpb25UZXN0LCBJbnZhbGlkQW5uZXhCQ29uc3RydWN0cykgewotICBzdGF0aWMgY29uc3QgY2hhciogdGVzdF9jYXNlc1tdID0gewotICAgICAgIkFVRCIsICAgICAgICAgICAgICAgLy8gTm8gVkNMIHByZXNlbnQuCi0gICAgICAiQVVELFNFSSIsICAgICAgICAgICAvLyBObyBWQ0wgcHJlc2VudC4KLSAgICAgICJTUFMgUFBTIiwgICAgICAgICAgIC8vIE5vIFZDTCBwcmVzZW50LgotICAgICAgIlNQUyBQUFMgQVVEIEkiLCAgICAgLy8gUGFyYW1ldGVyIHNldHMgbXVzdCBjb21lIGFmdGVyIEFVRC4KLSAgICAgICJTUFNFeHQgU1BTIFAiLCAgICAgIC8vIFNQUyBtdXN0IGNvbWUgYmVmb3JlIFNQU0V4dC4KLSAgICAgICJTUFMgUFBTIFNQU0V4dCBQIiwgIC8vIFNQU0V4dCBtdXN0IGZvbGxvdyBhbiBTUFMuCi0gICAgICAiRU9TZXEiLCAgICAgICAgICAgICAvLyBFT1NlcSBtdXN0IGNvbWUgYWZ0ZXIgYSBWQ0wuCi0gICAgICAiRU9TdHIiLCAgICAgICAgICAgICAvLyBFT1N0ciBtdXN0IGNvbWUgYWZ0ZXIgYSBWQ0wuCi0gICAgICAiSSBFT1N0ciBFT1NlcSIsICAgICAvLyBFT1NlcSBtdXN0IGNvbWUgYmVmb3JlIEVPU3RyLgotICAgICAgIkkgUjE0IiwgICAgICAgICAgICAgLy8gUmVzZXJ2ZWQxNC0xOCBtdXN0IGNvbWUgYmVmb3JlIGZpcnN0IFZDTC4KLSAgICAgICJJIFNFSSIsICAgICAgICAgICAgIC8vIFNFSSBtdXN0IGNvbWUgYmVmb3JlIGZpcnN0IFZDTC4KLSAgICAgICJQIFNQUyBQIiwgIC8vIFNQUyBhZnRlciBmaXJzdCBWQ0wgd291bGQgaW5kaWNhdGUgYSBuZXcgYWNjZXNzIHVuaXQuCi0gIH07Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUodGVzdF9jYXNlcyk7ICsraSkgewotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZjsKLSAgICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4gc3Vic2FtcGxlczsKLSAgICBTdHJpbmdUb0FubmV4Qih0ZXN0X2Nhc2VzW2ldLCAmYnVmLCBOVUxMKTsKLSAgICBFWFBFQ1RfRkFMU0UoQVZDOjpJc1ZhbGlkQW5uZXhCKGJ1Ziwgc3Vic2FtcGxlcykpCi0gICAgICAgIDw8ICInIiA8PCB0ZXN0X2Nhc2VzW2ldIDw8ICInIGZhaWxlZCI7Ci0gIH0KLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICBjb25zdCBjaGFyKiBpbnB1dDsKLSAgY29uc3QgY2hhciogZXhwZWN0ZWQ7Ci19IEluc2VydFRlc3RDYXNlczsKLQotVEVTVF9GKEFWQ0NvbnZlcnNpb25UZXN0LCBJbnNlcnRQYXJhbVNldHNBbm5leEIpIHsKLSAgc3RhdGljIGNvbnN0IEluc2VydFRlc3RDYXNlcyB0ZXN0X2Nhc2VzW10gPSB7Ci0gICAgICB7IkkiLCAiU1BTLFNQUyxQUFMsSSJ9LAotICAgICAgeyJBVUQgSSIsICJBVUQgU1BTLFNQUyxQUFMsSSJ9LAotCi0gICAgICAvLyBDYXNlcyB3aGVyZSBwYXJhbSBzZXRzIGluIHxhdmNfY29uZmlnfCBhcmUgcGxhY2VkIGJlZm9yZQotICAgICAgLy8gdGhlIGV4aXN0aW5nIG9uZXMuCi0gICAgICB7IlNQUyxQUFMsSSIsICJTUFMsU1BTLFBQUyxTUFMsUFBTLEkifSwKLSAgICAgIHsiQVVELFNQUyxQUFMsSSIsICJBVUQsU1BTLFNQUyxQUFMsU1BTLFBQUyxJIn0sICAvLyBOb3RlOiBwYXJhbXMgcGxhY2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgQVVELgotCi0gICAgICAvLyBPbmUgb3IgbW9yZSBOQUxVcyBtaWdodCBmb2xsb3cgQVVEIGluIHRoZSBmaXJzdCBzdWJzYW1wbGUsIHdlIG5lZWQgdG8KLSAgICAgIC8vIGhhbmRsZSB0aGlzIGNvcnJlY3RseS4gUGFyYW1zIHNob3VsZCBiZSBpbnNlcnRlZCByaWdodCBhZnRlciBBVUQuCi0gICAgICB7IkFVRCxTRUkgSSIsICJBVUQsU1BTLFNQUyxQUFMsU0VJIEkifSwKLSAgfTsKLQotICBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCBhdmNfY29uZmlnOwotICBhdmNfY29uZmlnLnNwc19saXN0LnJlc2l6ZSgyKTsKLSAgYXZjX2NvbmZpZy5zcHNfbGlzdFswXS5wdXNoX2JhY2soMHg2Nyk7Ci0gIGF2Y19jb25maWcuc3BzX2xpc3RbMF0ucHVzaF9iYWNrKDB4MTIpOwotICBhdmNfY29uZmlnLnNwc19saXN0WzFdLnB1c2hfYmFjaygweDY3KTsKLSAgYXZjX2NvbmZpZy5zcHNfbGlzdFsxXS5wdXNoX2JhY2soMHgzNCk7Ci0gIGF2Y19jb25maWcucHBzX2xpc3QucmVzaXplKDEpOwotICBhdmNfY29uZmlnLnBwc19saXN0WzBdLnB1c2hfYmFjaygweDY4KTsKLSAgYXZjX2NvbmZpZy5wcHNfbGlzdFswXS5wdXNoX2JhY2soMHg1Nik7Ci0gIGF2Y19jb25maWcucHBzX2xpc3RbMF0ucHVzaF9iYWNrKDB4NzgpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKHRlc3RfY2FzZXMpOyArK2kpIHsKLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWY7Ci0gICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZXM7Ci0KLSAgICBTdHJpbmdUb0FubmV4Qih0ZXN0X2Nhc2VzW2ldLmlucHV0LCAmYnVmLCAmc3Vic2FtcGxlcyk7Ci0KLSAgICBFWFBFQ1RfVFJVRShBVkM6Okluc2VydFBhcmFtU2V0c0FubmV4QihhdmNfY29uZmlnLCAmYnVmLCAmc3Vic2FtcGxlcykpCi0gICAgICAgIDw8ICInIiA8PCB0ZXN0X2Nhc2VzW2ldLmlucHV0IDw8ICInIGluc2VydCBmYWlsZWQuIjsKLSAgICBFWFBFQ1RfVFJVRShBVkM6OklzVmFsaWRBbm5leEIoYnVmLCBzdWJzYW1wbGVzKSkKLSAgICAgICAgPDwgIiciIDw8IHRlc3RfY2FzZXNbaV0uaW5wdXQgPDwgIicgY3JlYXRlZCBpbnZhbGlkIEFubmV4Qi4iOwotICAgIEVYUEVDVF9FUSh0ZXN0X2Nhc2VzW2ldLmV4cGVjdGVkLCBBbm5leEJUb1N0cmluZyhidWYsIHN1YnNhbXBsZXMpKQotICAgICAgICA8PCAiJyIgPDwgdGVzdF9jYXNlc1tpXS5pbnB1dCA8PCAiJyBnZW5lcmF0ZWQgdW5leHBlY3RlZCBvdXRwdXQuIjsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9iaXRzdHJlYW1fY29udmVydGVyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YmEyNGEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYml0c3RyZWFtX2NvbnZlcnRlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXA0IHsKLQotQml0c3RyZWFtQ29udmVydGVyOjp+Qml0c3RyZWFtQ29udmVydGVyKCkge30KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYml0c3RyZWFtX2NvbnZlcnRlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjOWNjYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYml0c3RyZWFtX2NvbnZlcnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CSVRTVFJFQU1fQ09OVkVSVEVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CSVRTVFJFQU1fQ09OVkVSVEVSX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0cnVjdCBTdWJzYW1wbGVFbnRyeTsKLQotbmFtZXNwYWNlIG1wNCB7Ci0KLS8vIEJpdHN0cmVhbUNvbnZlcnRlciBwcm92aWRlcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBwZXJmb3JtaW5nIHNvbWUgY29tbW9uCi0vLyBiaXRzdHJlYW0gY29udmVyc2lvbnMgKGUuZy4gSC4yNjQgTVA0IGJpdHN0cmVhbSB0byBBbm5leCBCLCBhbmQgZWxlbWVudGFyeQotLy8gQUFDIHN0cmVhbSB0byBBRFRTKS4KLWNsYXNzIEJpdHN0cmVhbUNvbnZlcnRlcgotICAgIDogcHVibGljIGJhc2U6OlJlZkNvdW50ZWRUaHJlYWRTYWZlPEJpdHN0cmVhbUNvbnZlcnRlcj4gewotIHB1YmxpYzoKLSAgLy8gQ29udmVydHMgYSBzaW5nbGUgZnJhbWUvYnVmZmVyIHxmcmFtZV9idWZ8IGludG8gdGhlIG91dHB1dCBmb3JtYXQuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwuCi0gIC8vIHxmcmFtZV9idWZ8IGlzIGFuIGlucHV0L291dHB1dCBwYXJhbWV0ZXIsIGl0IGNvbnRhaW5zIGlucHV0IGZyYW1lIGRhdGEgYW5kCi0gIC8vIGNvbnRhaW5zIGNvbnZlcnRlZCBvdXRwdXQgZGF0YSBpZiBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLgotICAvLyB8aXNfa2V5ZnJhbWV8IGluZGljYXRlcyB3aGV0aGVyIGl0J3MgYSBrZXkgZnJhbWUgb3Igbm90LgotICAvLyB8c3Vic2FtcGxlc3wgaXMgYW4gaW5wdXQvb3V0cHV0IHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIENFTkMgc3Vic2FtcGxlCi0gIC8vIGluZm9ybWF0aW9uLiBUaGUgY29udmVyc2lvbiBjb2RlIHNob3VsZCB8c3Vic2FtcGxlc3wgdG8gZGV0ZXJtaW5lIGlmIHBhcnRzCi0gIC8vIG9mIGlucHV0IGZyYW1lIGFyZSBlbmNyeXB0ZWQgYW5kIHNob3VsZCB1cGRhdGUgfHN1YnNhbXBsZXN8IGlmIG5lY2Vzc2FyeSwKLSAgLy8gdG8gbWFrZSBzdXJlIGl0IGNvcnJlY3RseSBkZXNjcmliZXMgdGhlIGNvbnZlcnRlZCBvdXRwdXQgZnJhbWUuIFNlZQotICAvLyBTdWJzYW1wbGVFbnRyeSBkZWZpbml0aW9uIGluIG1lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCBmb3IgbW9yZSBpbmZvLgotICB2aXJ0dWFsIGJvb2wgQ29udmVydEZyYW1lKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBmcmFtZV9idWYsIGJvb2wgaXNfa2V5ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKSBjb25zdCA9IDA7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIGZyaWVuZCBjbGFzcyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxCaXRzdHJlYW1Db252ZXJ0ZXI+OwotICB2aXJ0dWFsIH5CaXRzdHJlYW1Db252ZXJ0ZXIoKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CSVRTVFJFQU1fQ09OVkVSVEVSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxYjcxMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTM3MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvY29tbWFuZF9saW5lLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY0X3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hdmMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9oZXZjLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IHNpemVfdCBrS2V5SWRTaXplID0gMTY7Ci0KLS8vIFJlYWQgY29sb3IgY29vcmRpbmF0ZSB2YWx1ZSBhcyBkZWZpbmVkIGluIHRoZSBNYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWUKLS8vICgnbWRjdicpIGJveC4gIEVhY2ggY29vcmRpbmF0ZSBpcyBhIGZsb2F0IGVuY29kZWQgaW4gdWludDE2X3QsIHdpdGggdXBwZXIKLS8vIGJvdW5kIHNldCB0byA1MDAwMC4KLWJvb2wgUmVhZE1kY3ZDb2xvckNvb3JkaW5hdGUoQm94UmVhZGVyKiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBub3JtYWxpemVkX3ZhbHVlX2luX2Zsb2F0KSB7Ci0gIGNvbnN0IGZsb2F0IGtDb2xvckNvb3JkaW5hdGVVcHBlckJvdW5kID0gNTAwMDAuOwotCi0gIHVpbnQxNl90IHZhbHVlX2luX3VpbnQxNjsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDIoJnZhbHVlX2luX3VpbnQxNikpOwotCi0gIGZsb2F0IHZhbHVlX2luX2Zsb2F0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlX2luX3VpbnQxNik7Ci0KLSAgaWYgKHZhbHVlX2luX2Zsb2F0ID49IGtDb2xvckNvb3JkaW5hdGVVcHBlckJvdW5kKSB7Ci0gICAgKm5vcm1hbGl6ZWRfdmFsdWVfaW5fZmxvYXQgPSAxLmY7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAqbm9ybWFsaXplZF92YWx1ZV9pbl9mbG9hdCA9IHZhbHVlX2luX2Zsb2F0IC8ga0NvbG9yQ29vcmRpbmF0ZVVwcGVyQm91bmQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotRmlsZVR5cGU6OkZpbGVUeXBlKCkge30KLUZpbGVUeXBlOjp+RmlsZVR5cGUoKSB7fQotRm91ckNDIEZpbGVUeXBlOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX0ZUWVA7IH0KLQotYm9vbCBGaWxlVHlwZTo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZvdXJDQygmbWFqb3JfYnJhbmQpICYmIHJlYWRlci0+UmVhZDQoJm1pbm9yX3ZlcnNpb24pKTsKLSAgc2l6ZV90IG51bV9icmFuZHMgPSAocmVhZGVyLT5zaXplKCkgLSByZWFkZXItPnBvcygpKSAvIHNpemVvZihGb3VyQ0MpOwotICByZXR1cm4gcmVhZGVyLT5Ta2lwQnl0ZXMoc2l6ZW9mKEZvdXJDQykgKiBudW1fYnJhbmRzKTsgIC8vIGNvbXBhdGlibGVfYnJhbmRzCi19Ci0KLVByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlcjo6UHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyKCkge30KLVByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlcjo6flByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlcigpIHt9Ci1Gb3VyQ0MgUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1BTU0g7IH0KLQotYm9vbCBQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIC8vIERvbid0IGJvdGhlciB2YWxpZGF0aW5nIHRoZSBib3gncyBjb250ZW50cy4KLSAgLy8gQ29weSB0aGUgZW50aXJlIGJveCwgaW5jbHVkaW5nIHRoZSBoZWFkZXIsIGZvciBwYXNzaW5nIHRvIEVNRSBhcyBpbml0RGF0YS4KLSAgRENIRUNLKHJhd19ib3guZW1wdHkoKSk7Ci0gIHJhd19ib3guYXNzaWduKHJlYWRlci0+ZGF0YSgpLCByZWFkZXItPmRhdGEoKSArIHJlYWRlci0+c2l6ZSgpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUZ1bGxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI6OkZ1bGxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXIoKSB7fQotRnVsbFByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlcjo6fkZ1bGxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXIoKSB7fQotRm91ckNDIEZ1bGxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI6OkJveFR5cGUoKSBjb25zdCB7Ci0gIHJldHVybiBGT1VSQ0NfUFNTSDsKLX0KLQotLy8gVGhlIGZvcm1hdCBvZiBhICdwc3NoJyBib3ggaXMgYXMgZm9sbG93czoKLS8vICAgdW5zaWduZWQgaW50KDMyKSBzaXplOwotLy8gICB1bnNpZ25lZCBpbnQoMzIpIHR5cGUgPSAicHNzaCI7Ci0vLyAgIGlmIChzaXplPT0xKSB7Ci0vLyAgICAgdW5zaWduZWQgaW50KDY0KSBsYXJnZXNpemU7Ci0vLyAgIH0gZWxzZSBpZiAoc2l6ZT09MCkgewotLy8gICAgIC0tIGJveCBleHRlbmRzIHRvIGVuZCBvZiBmaWxlCi0vLyAgIH0KLS8vICAgdW5zaWduZWQgaW50KDgpIHZlcnNpb247Ci0vLyAgIGJpdCgyNCkgZmxhZ3M7Ci0vLyAgIHVuc2lnbmVkIGludCg4KVsxNl0gU3lzdGVtSUQ7Ci0vLyAgIGlmICh2ZXJzaW9uID4gMCkKLS8vICAgewotLy8gICAgIHVuc2lnbmVkIGludCgzMikgS0lEX2NvdW50OwotLy8gICAgIHsKLS8vICAgICAgIHVuc2lnbmVkIGludCg4KVsxNl0gS0lEOwotLy8gICAgIH0gW0tJRF9jb3VudF0KLS8vICAgfQotLy8gICB1bnNpZ25lZCBpbnQoMzIpIERhdGFTaXplOwotLy8gICB1bnNpZ25lZCBpbnQoOClbRGF0YVNpemVdIERhdGE7Ci0KLWJvb2wgRnVsbFByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlcjo6UGFyc2UobXA0OjpCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT50eXBlKCkgPT0gQm94VHlwZSgpICYmIHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSk7Ci0KLSAgLy8gT25seSB2ZXJzaW9ucyAwIGFuZCAxIG9mIHRoZSAncHNzaCcgYm94ZXMgYXJlIHN1cHBvcnRlZC4gQW55IG90aGVyCi0gIC8vIHZlcnNpb25zIGFyZSBpZ25vcmVkLgotICBSQ0hFQ0socmVhZGVyLT52ZXJzaW9uKCkgPT0gMCB8fCByZWFkZXItPnZlcnNpb24oKSA9PSAxKTsKLSAgUkNIRUNLKHJlYWRlci0+ZmxhZ3MoKSA9PSAwKTsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZFZlYygmc3lzdGVtX2lkLCAxNikpOwotCi0gIGlmIChyZWFkZXItPnZlcnNpb24oKSA+IDApIHsKLSAgICB1aW50MzJfdCBraWRfY291bnQ7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmtpZF9jb3VudCkpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBraWRfY291bnQ7ICsraSkgewotICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4ga2lkOwotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZFZlYygma2lkLCAxNikpOwotICAgICAga2V5X2lkcy5wdXNoX2JhY2soa2lkKTsKLSAgICB9Ci0gIH0KLQotICB1aW50MzJfdCBkYXRhX3NpemU7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWQ0KCZkYXRhX3NpemUpKTsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZFZlYygmZGF0YSwgZGF0YV9zaXplKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1TYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvbk9mZnNldDo6U2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXQoKSB7fQotU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXQ6On5TYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvbk9mZnNldCgpIHt9Ci1Gb3VyQ0MgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXQ6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfU0FJTzsgfQotCi1ib29sIFNhbXBsZUF1eGlsaWFyeUluZm9ybWF0aW9uT2Zmc2V0OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5SZWFkRnVsbEJveEhlYWRlcigpKTsKLSAgaWYgKHJlYWRlci0+ZmxhZ3MoKSAmIDEpIFJDSEVDSyhyZWFkZXItPlNraXBCeXRlcyg4KSk7Ci0KLSAgdWludDMyX3QgY291bnQ7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWQ0KCZjb3VudCkgJiYKLSAgICAgICAgIHJlYWRlci0+SGFzQnl0ZXMoY291bnQgKiAocmVhZGVyLT52ZXJzaW9uKCkgPT0gMSA/IDggOiA0KSkpOwotICBvZmZzZXRzLnJlc2l6ZShjb3VudCk7Ci0KLSAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICBpZiAocmVhZGVyLT52ZXJzaW9uKCkgPT0gMSkgewotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZDgoJm9mZnNldHNbaV0pKTsKLSAgICB9IGVsc2UgewotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZDRJbnRvOCgmb2Zmc2V0c1tpXSkpOwotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25TaXplOjpTYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvblNpemUoKQotICAgIDogZGVmYXVsdF9zYW1wbGVfaW5mb19zaXplKDApLCBzYW1wbGVfY291bnQoMCkge30KLVNhbXBsZUF1eGlsaWFyeUluZm9ybWF0aW9uU2l6ZTo6flNhbXBsZUF1eGlsaWFyeUluZm9ybWF0aW9uU2l6ZSgpIHt9Ci1Gb3VyQ0MgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25TaXplOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1NBSVo7IH0KLQotYm9vbCBTYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvblNpemU6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkpOwotICBpZiAocmVhZGVyLT5mbGFncygpICYgMSkgUkNIRUNLKHJlYWRlci0+U2tpcEJ5dGVzKDgpKTsKLQotICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmZGVmYXVsdF9zYW1wbGVfaW5mb19zaXplKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkNCgmc2FtcGxlX2NvdW50KSk7Ci0gIGlmIChkZWZhdWx0X3NhbXBsZV9pbmZvX3NpemUgPT0gMCkKLSAgICByZXR1cm4gcmVhZGVyLT5SZWFkVmVjKCZzYW1wbGVfaW5mb19zaXplcywgc2FtcGxlX2NvdW50KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVNhbXBsZUVuY3J5cHRpb25FbnRyeTo6U2FtcGxlRW5jcnlwdGlvbkVudHJ5KCkge30KLVNhbXBsZUVuY3J5cHRpb25FbnRyeTo6flNhbXBsZUVuY3J5cHRpb25FbnRyeSgpIHt9Ci0KLWJvb2wgU2FtcGxlRW5jcnlwdGlvbkVudHJ5OjpQYXJzZShCdWZmZXJSZWFkZXIqIHJlYWRlciwgdWludDhfdCBpdl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX3N1YnNhbXBsZXMpIHsKLSAgLy8gQWNjb3JkaW5nIHRvIElTTy9JRUMgRkRJUyAyMzAwMS03OiBDRU5DIHNwZWMsIElWIHNob3VsZCBiZSBlaXRoZXIKLSAgLy8gNjQtYml0ICg4LWJ5dGUpIG9yIDEyOC1iaXQgKDE2LWJ5dGUpLiBUaGUgM3JkIEVkaXRpb24gYWxsb3dzIHxpdl9zaXplfAotICAvLyB0byBiZSAwLCBmb3IgdGhlIGNhc2Ugb2YgYSAiY29uc3RhbnQgSVYiLiBJbiB0aGlzIGNhc2UsIHRoZSBleGlzdGVuY2Ugb2YKLSAgLy8gdGhlIGNvbnN0YW50IElWIG11c3QgYmUgZW5zdXJlZCBieSB0aGUgY2FsbGVyLgotICBSQ0hFQ0soaXZfc2l6ZSA9PSAwIHx8IGl2X3NpemUgPT0gOCB8fCBpdl9zaXplID09IDE2KTsKLQotICBtZW1zZXQoaW5pdGlhbGl6YXRpb25fdmVjdG9yLCAwLCBzaXplb2YoaW5pdGlhbGl6YXRpb25fdmVjdG9yKSk7Ci0gIGZvciAodWludDhfdCBpID0gMDsgaSA8IGl2X3NpemU7IGkrKykKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMShpbml0aWFsaXphdGlvbl92ZWN0b3IgKyBpKSk7Ci0KLSAgaWYgKCFoYXNfc3Vic2FtcGxlcykgewotICAgIHN1YnNhbXBsZXMuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHVpbnQxNl90IHN1YnNhbXBsZV9jb3VudDsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDIoJnN1YnNhbXBsZV9jb3VudCkpOwotICBSQ0hFQ0soc3Vic2FtcGxlX2NvdW50ID4gMCk7Ci0gIHN1YnNhbXBsZXMucmVzaXplKHN1YnNhbXBsZV9jb3VudCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Vic2FtcGxlcy5zaXplKCk7ICsraSkgewotICAgIHVpbnQxNl90IGNsZWFyX2J5dGVzOwotICAgIHVpbnQzMl90IGN5cGhlcl9ieXRlczsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMigmY2xlYXJfYnl0ZXMpICYmIHJlYWRlci0+UmVhZDQoJmN5cGhlcl9ieXRlcykpOwotICAgIHN1YnNhbXBsZXNbaV0uY2xlYXJfYnl0ZXMgPSBjbGVhcl9ieXRlczsKLSAgICBzdWJzYW1wbGVzW2ldLmN5cGhlcl9ieXRlcyA9IGN5cGhlcl9ieXRlczsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBTYW1wbGVFbmNyeXB0aW9uRW50cnk6OkdldFRvdGFsU2l6ZU9mU3Vic2FtcGxlcyhzaXplX3QqIHRvdGFsX3NpemUpIGNvbnN0IHsKLSAgc2l6ZV90IHNpemUgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YnNhbXBsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICBzaXplICs9IHN1YnNhbXBsZXNbaV0uY2xlYXJfYnl0ZXM7Ci0gICAgUkNIRUNLKHNpemUgPj0gc3Vic2FtcGxlc1tpXS5jbGVhcl9ieXRlcyk7ICAvLyBvdmVyZmxvdwotICAgIHNpemUgKz0gc3Vic2FtcGxlc1tpXS5jeXBoZXJfYnl0ZXM7Ci0gICAgUkNIRUNLKHNpemUgPj0gc3Vic2FtcGxlc1tpXS5jeXBoZXJfYnl0ZXMpOyAgLy8gb3ZlcmZsb3cKLSAgfQotICAqdG90YWxfc2l6ZSA9IHNpemU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1TYW1wbGVFbmNyeXB0aW9uOjpTYW1wbGVFbmNyeXB0aW9uKCkgOiB1c2Vfc3Vic2FtcGxlX2VuY3J5cHRpb24oZmFsc2UpIHt9Ci1TYW1wbGVFbmNyeXB0aW9uOjp+U2FtcGxlRW5jcnlwdGlvbigpIHt9Ci1Gb3VyQ0MgU2FtcGxlRW5jcnlwdGlvbjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19TRU5DOyB9Ci0KLWJvb2wgU2FtcGxlRW5jcnlwdGlvbjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSk7Ci0gIHVzZV9zdWJzYW1wbGVfZW5jcnlwdGlvbiA9IChyZWFkZXItPmZsYWdzKCkgJiBrVXNlU3Vic2FtcGxlRW5jcnlwdGlvbikgIT0gMDsKLSAgc2FtcGxlX2VuY3J5cHRpb25fZGF0YS5hc3NpZ24ocmVhZGVyLT5kYXRhKCkgKyByZWFkZXItPnBvcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXItPmRhdGEoKSArIHJlYWRlci0+c2l6ZSgpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLU9yaWdpbmFsRm9ybWF0OjpPcmlnaW5hbEZvcm1hdCgpIDogZm9ybWF0KEZPVVJDQ19OVUxMKSB7fQotT3JpZ2luYWxGb3JtYXQ6On5PcmlnaW5hbEZvcm1hdCgpIHt9Ci1Gb3VyQ0MgT3JpZ2luYWxGb3JtYXQ6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfRlJNQTsgfQotCi1ib29sIE9yaWdpbmFsRm9ybWF0OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICByZXR1cm4gcmVhZGVyLT5SZWFkRm91ckNDKCZmb3JtYXQpOwotfQotCi1TY2hlbWVUeXBlOjpTY2hlbWVUeXBlKCkgOiB0eXBlKEZPVVJDQ19OVUxMKSwgdmVyc2lvbigwKSB7fQotU2NoZW1lVHlwZTo6flNjaGVtZVR5cGUoKSB7fQotRm91ckNDIFNjaGVtZVR5cGU6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfU0NITTsgfQotCi1ib29sIFNjaGVtZVR5cGU6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkgJiYgcmVhZGVyLT5SZWFkRm91ckNDKCZ0eXBlKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkNCgmdmVyc2lvbikpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotVHJhY2tFbmNyeXB0aW9uOjpUcmFja0VuY3J5cHRpb24oKQotICAgIDogaXNfZW5jcnlwdGVkKGZhbHNlKSwKLSAgICAgIGRlZmF1bHRfaXZfc2l6ZSgwKSwKLSAgICAgIGRlZmF1bHRfY3J5cHRfYnl0ZV9ibG9jaygwKSwKLSAgICAgIGRlZmF1bHRfc2tpcF9ieXRlX2Jsb2NrKDApLAotICAgICAgZGVmYXVsdF9jb25zdGFudF9pdl9zaXplKDApIHt9Ci1UcmFja0VuY3J5cHRpb246On5UcmFja0VuY3J5cHRpb24oKSB7fQotRm91ckNDIFRyYWNrRW5jcnlwdGlvbjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19URU5DOyB9Ci0KLWJvb2wgVHJhY2tFbmNyeXB0aW9uOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICB1aW50OF90IGZsYWc7Ci0gIHVpbnQ4X3QgcG9zc2libGVfcGF0dGVybl9pbmZvOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkRnVsbEJveEhlYWRlcigpICYmCi0gICAgICAgICByZWFkZXItPlNraXBCeXRlcygxKSAmJiAgLy8gc2tpcCByZXNlcnZlZCBieXRlCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZwb3NzaWJsZV9wYXR0ZXJuX2luZm8pICYmIHJlYWRlci0+UmVhZDEoJmZsYWcpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZkZWZhdWx0X2l2X3NpemUpICYmCi0gICAgICAgICByZWFkZXItPlJlYWRWZWMoJmRlZmF1bHRfa2lkLCBrS2V5SWRTaXplKSk7Ci0gIGlzX2VuY3J5cHRlZCA9IChmbGFnICE9IDApOwotICBpZiAoaXNfZW5jcnlwdGVkKSB7Ci0gICAgaWYgKHJlYWRlci0+dmVyc2lvbigpID4gMCkgewotICAgICAgZGVmYXVsdF9jcnlwdF9ieXRlX2Jsb2NrID0gKHBvc3NpYmxlX3BhdHRlcm5faW5mbyA+PiA0KSAmIDB4MGY7Ci0gICAgICBkZWZhdWx0X3NraXBfYnl0ZV9ibG9jayA9IHBvc3NpYmxlX3BhdHRlcm5faW5mbyAmIDB4MGY7Ci0gICAgfQotICAgIGlmIChkZWZhdWx0X2l2X3NpemUgPT0gMCkgewotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZDEoJmRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZSkpOwotICAgICAgUkNIRUNLKGRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZSA9PSA4IHx8IGRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZSA9PSAxNik7Ci0gICAgICBtZW1zZXQoZGVmYXVsdF9jb25zdGFudF9pdiwgMCwgc2l6ZW9mKGRlZmF1bHRfY29uc3RhbnRfaXYpKTsKLSAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZTsgaSsrKQotICAgICAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMShkZWZhdWx0X2NvbnN0YW50X2l2ICsgaSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBSQ0hFQ0soZGVmYXVsdF9pdl9zaXplID09IDggfHwgZGVmYXVsdF9pdl9zaXplID09IDE2KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgUkNIRUNLKGRlZmF1bHRfaXZfc2l6ZSA9PSAwKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotU2NoZW1lSW5mbzo6U2NoZW1lSW5mbygpIHt9Ci1TY2hlbWVJbmZvOjp+U2NoZW1lSW5mbygpIHt9Ci1Gb3VyQ0MgU2NoZW1lSW5mbzo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19TQ0hJOyB9Ci0KLWJvb2wgU2NoZW1lSW5mbzo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgcmV0dXJuIHJlYWRlci0+U2NhbkNoaWxkcmVuKCkgJiYgcmVhZGVyLT5SZWFkQ2hpbGQoJnRyYWNrX2VuY3J5cHRpb24pOwotfQotCi1Qcm90ZWN0aW9uU2NoZW1lSW5mbzo6UHJvdGVjdGlvblNjaGVtZUluZm8oKSB7fQotUHJvdGVjdGlvblNjaGVtZUluZm86On5Qcm90ZWN0aW9uU2NoZW1lSW5mbygpIHt9Ci1Gb3VyQ0MgUHJvdGVjdGlvblNjaGVtZUluZm86OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfU0lORjsgfQotCi1ib29sIFByb3RlY3Rpb25TY2hlbWVJbmZvOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZCgmZm9ybWF0KSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkQ2hpbGQoJnR5cGUpKTsKLSAgaWYgKEhhc1N1cHBvcnRlZFNjaGVtZSgpKSBSQ0hFQ0socmVhZGVyLT5SZWFkQ2hpbGQoJmluZm8pKTsKLSAgLy8gT3RoZXIgcHJvdGVjdGlvbiBzY2hlbWVzIGFyZSBzaWxlbnRseSBpZ25vcmVkLiBTaW5jZSB0aGUgcHJvdGVjdGlvbiBzY2hlbWUKLSAgLy8gdHlwZSBjYW4ndCBiZSBkZXRlcm1pbmVkIHVudGlsIHRoaXMgYm94IGlzIG9wZW5lZCwgd2UgcmV0dXJuICd0cnVlJyBmb3IKLSAgLy8gdW5zdXBwb3J0ZWQgcHJvdGVjdGlvbiBzY2hlbWVzLiBJdCBpcyB0aGUgcGFyZW50IGJveCdzIHJlc3BvbnNpYmlsaXR5IHRvCi0gIC8vIGVuc3VyZSB0aGF0IHRoaXMgc2NoZW1lIHR5cGUgaXMgYSBzdXBwb3J0ZWQgb25lLgotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm90ZWN0aW9uU2NoZW1lSW5mbzo6SGFzU3VwcG9ydGVkU2NoZW1lKCkgY29uc3QgewotICBGb3VyQ0MgZm91cl9jYyA9IHR5cGUudHlwZTsKLSAgaWYgKGZvdXJfY2MgPT0gRk9VUkNDX0NFTkMpIHJldHVybiB0cnVlOwotICBpZiAoZm91cl9jYyA9PSBGT1VSQ0NfQ0JDUykgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBQcm90ZWN0aW9uU2NoZW1lSW5mbzo6SXNDYmNzRW5jcnlwdGlvblNjaGVtZSgpIGNvbnN0IHsKLSAgRm91ckNDIGZvdXJfY2MgPSB0eXBlLnR5cGU7Ci0gIHJldHVybiAoZm91cl9jYyA9PSBGT1VSQ0NfQ0JDUyk7Ci19Ci0KLU1vdmllSGVhZGVyOjpNb3ZpZUhlYWRlcigpCi0gICAgOiB2ZXJzaW9uKDApLAotICAgICAgY3JlYXRpb25fdGltZSgwKSwKLSAgICAgIG1vZGlmaWNhdGlvbl90aW1lKDApLAotICAgICAgdGltZXNjYWxlKDApLAotICAgICAgZHVyYXRpb24oMCksCi0gICAgICByYXRlKC0xKSwKLSAgICAgIHZvbHVtZSgtMSksCi0gICAgICBuZXh0X3RyYWNrX2lkKDApIHt9Ci1Nb3ZpZUhlYWRlcjo6fk1vdmllSGVhZGVyKCkge30KLUZvdXJDQyBNb3ZpZUhlYWRlcjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19NVkhEOyB9Ci0KLWJvb2wgTW92aWVIZWFkZXI6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkpOwotICB2ZXJzaW9uID0gcmVhZGVyLT52ZXJzaW9uKCk7Ci0KLSAgaWYgKHZlcnNpb24gPT0gMSkgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ4KCZjcmVhdGlvbl90aW1lKSAmJiByZWFkZXItPlJlYWQ4KCZtb2RpZmljYXRpb25fdGltZSkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkNCgmdGltZXNjYWxlKSAmJiByZWFkZXItPlJlYWQ4KCZkdXJhdGlvbikpOwotICB9IGVsc2UgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ0SW50bzgoJmNyZWF0aW9uX3RpbWUpICYmCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDRJbnRvOCgmbW9kaWZpY2F0aW9uX3RpbWUpICYmCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDQoJnRpbWVzY2FsZSkgJiYgcmVhZGVyLT5SZWFkNEludG84KCZkdXJhdGlvbikpOwotICB9Ci0KLSAgUkNIRUNLKHJlYWRlci0+UmVhZDRzKCZyYXRlKSAmJiByZWFkZXItPlJlYWQycygmdm9sdW1lKSAmJgotICAgICAgICAgcmVhZGVyLT5Ta2lwQnl0ZXMoMTApICYmICAvLyByZXNlcnZlZAotICAgICAgICAgcmVhZGVyLT5Ta2lwQnl0ZXMoMzYpICYmICAvLyBtYXRyaXgKLSAgICAgICAgIHJlYWRlci0+U2tpcEJ5dGVzKDI0KSAmJiAgLy8gcHJlZGVmaW5lZCB6ZXJvCi0gICAgICAgICByZWFkZXItPlJlYWQ0KCZuZXh0X3RyYWNrX2lkKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1UcmFja0hlYWRlcjo6VHJhY2tIZWFkZXIoKQotICAgIDogY3JlYXRpb25fdGltZSgwKSwKLSAgICAgIG1vZGlmaWNhdGlvbl90aW1lKDApLAotICAgICAgdHJhY2tfaWQoMCksCi0gICAgICBkdXJhdGlvbigwKSwKLSAgICAgIGxheWVyKC0xKSwKLSAgICAgIGFsdGVybmF0ZV9ncm91cCgtMSksCi0gICAgICB2b2x1bWUoLTEpLAotICAgICAgd2lkdGgoMCksCi0gICAgICBoZWlnaHQoMCkge30KLVRyYWNrSGVhZGVyOjp+VHJhY2tIZWFkZXIoKSB7fQotRm91ckNDIFRyYWNrSGVhZGVyOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1RLSEQ7IH0KLQotYm9vbCBUcmFja0hlYWRlcjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSk7Ci0gIGlmIChyZWFkZXItPnZlcnNpb24oKSA9PSAxKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDgoJmNyZWF0aW9uX3RpbWUpICYmIHJlYWRlci0+UmVhZDgoJm1vZGlmaWNhdGlvbl90aW1lKSAmJgotICAgICAgICAgICByZWFkZXItPlJlYWQ0KCZ0cmFja19pZCkgJiYgcmVhZGVyLT5Ta2lwQnl0ZXMoNCkgJiYgIC8vIHJlc2VydmVkCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDgoJmR1cmF0aW9uKSk7Ci0gIH0gZWxzZSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDRJbnRvOCgmY3JlYXRpb25fdGltZSkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkNEludG84KCZtb2RpZmljYXRpb25fdGltZSkgJiYgcmVhZGVyLT5SZWFkNCgmdHJhY2tfaWQpICYmCi0gICAgICAgICAgIHJlYWRlci0+U2tpcEJ5dGVzKDQpICYmICAvLyByZXNlcnZlZAotICAgICAgICAgICByZWFkZXItPlJlYWQ0SW50bzgoJmR1cmF0aW9uKSk7Ci0gIH0KLQotICBSQ0hFQ0socmVhZGVyLT5Ta2lwQnl0ZXMoOCkgJiYgIC8vIHJlc2VydmVkCi0gICAgICAgICByZWFkZXItPlJlYWQycygmbGF5ZXIpICYmIHJlYWRlci0+UmVhZDJzKCZhbHRlcm5hdGVfZ3JvdXApICYmCi0gICAgICAgICByZWFkZXItPlJlYWQycygmdm9sdW1lKSAmJiByZWFkZXItPlNraXBCeXRlcygyKSAmJiAgLy8gcmVzZXJ2ZWQKLSAgICAgICAgIHJlYWRlci0+U2tpcEJ5dGVzKDM2KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRyaXgKLSAgICAgICAgIHJlYWRlci0+UmVhZDQoJndpZHRoKSAmJiByZWFkZXItPlJlYWQ0KCZoZWlnaHQpKTsKLQotICAvLyBSb3VuZCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBuZWFyZXN0IG51bWJlci4KLSAgLy8gTm90ZTogd2lkdGggYW5kIGhlaWdodCBhcmUgZml4ZWQtcG9pbnQgMTYuMTYgdmFsdWVzLiBUaGUgZm9sbG93aW5nIGNvZGUKLSAgLy8gcm91bmRzIGEuMXggdG8gYSArIDEsIGFuZCBhLjB4IHRvIGEuCi0gIHdpZHRoID4+PSAxNTsKLSAgd2lkdGggKz0gMTsKLSAgd2lkdGggPj49IDE7Ci0gIGhlaWdodCA+Pj0gMTU7Ci0gIGhlaWdodCArPSAxOwotICBoZWlnaHQgPj49IDE7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVNhbXBsZURlc2NyaXB0aW9uOjpTYW1wbGVEZXNjcmlwdGlvbigpIDogdHlwZShrSW52YWxpZCkge30KLVNhbXBsZURlc2NyaXB0aW9uOjp+U2FtcGxlRGVzY3JpcHRpb24oKSB7fQotRm91ckNDIFNhbXBsZURlc2NyaXB0aW9uOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1NUU0Q7IH0KLQotYm9vbCBTYW1wbGVEZXNjcmlwdGlvbjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgdWludDMyX3QgY291bnQ7Ci0gIFJDSEVDSyhyZWFkZXItPlNraXBCeXRlcyg0KSAmJiByZWFkZXItPlJlYWQ0KCZjb3VudCkpOwotICB2aWRlb19lbnRyaWVzLmNsZWFyKCk7Ci0gIGF1ZGlvX2VudHJpZXMuY2xlYXIoKTsKLQotICAvLyBOb3RlOiB0aGlzIHZhbHVlIGlzIHByZXNldCBiZWZvcmUgc2Nhbm5pbmcgYmVnaW5zLiBTZWUgY29tbWVudHMgaW4gdGhlCi0gIC8vIFBhcnNlKE1lZGlhKikgZnVuY3Rpb24uCi0gIGlmICh0eXBlID09IGtWaWRlbykgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWRBbGxDaGlsZHJlbigmdmlkZW9fZW50cmllcykpOwotICB9IGVsc2UgaWYgKHR5cGUgPT0ga0F1ZGlvKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZEFsbENoaWxkcmVuKCZhdWRpb19lbnRyaWVzKSk7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVNhbXBsZVRhYmxlOjpTYW1wbGVUYWJsZSgpIHt9Ci1TYW1wbGVUYWJsZTo6flNhbXBsZVRhYmxlKCkge30KLUZvdXJDQyBTYW1wbGVUYWJsZTo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19TVEJMOyB9Ci0KLWJvb2wgU2FtcGxlVGFibGU6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlNjYW5DaGlsZHJlbigpICYmIHJlYWRlci0+UmVhZENoaWxkKCZkZXNjcmlwdGlvbikpOwotICAvLyBUaGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBTYW1wbGVHcm91cERlc2NyaXB0aW9uIGJveGVzIHdpdGggZGlmZmVyZW50Ci0gIC8vIGdyb3VwaW5nIHR5cGVzLiBGb3IgY29tbW9uIGVuY3J5cHRpb24sIHRoZSByZWxldmFudCBncm91cGluZyB0eXBlIGlzCi0gIC8vICdzZWlnJy4gQ29udGludWUgcmVhZGluZyB1bnRpbCAnc2VpZycgaXMgZm91bmQsIG9yIHVudGlsIHJ1bm5pbmcgb3V0IG9mCi0gIC8vIGNoaWxkIGJveGVzLgotICB3aGlsZSAocmVhZGVyLT5IYXNDaGlsZCgmc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uKSkgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWRDaGlsZCgmc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uKSk7Ci0gICAgaWYgKHNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5ncm91cGluZ190eXBlID09IEZPVVJDQ19TRUlHKSBicmVhazsKLSAgICBzYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllcy5jbGVhcigpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1FZGl0TGlzdDo6RWRpdExpc3QoKSB7fQotRWRpdExpc3Q6On5FZGl0TGlzdCgpIHt9Ci1Gb3VyQ0MgRWRpdExpc3Q6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfRUxTVDsgfQotCi1ib29sIEVkaXRMaXN0OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICB1aW50MzJfdCBjb3VudDsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQ0KCZjb3VudCkpOwotCi0gIGlmIChyZWFkZXItPnZlcnNpb24oKSA9PSAxKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+SGFzQnl0ZXMoY291bnQgKiAyMCkpOwotICB9IGVsc2UgewotICAgIFJDSEVDSyhyZWFkZXItPkhhc0J5dGVzKGNvdW50ICogMTIpKTsKLSAgfQotICBlZGl0cy5yZXNpemUoY291bnQpOwotCi0gIGZvciAoc3RkOjp2ZWN0b3I8RWRpdExpc3RFbnRyeT46Oml0ZXJhdG9yIGVkaXQgPSBlZGl0cy5iZWdpbigpOwotICAgICAgIGVkaXQgIT0gZWRpdHMuZW5kKCk7ICsrZWRpdCkgewotICAgIGlmIChyZWFkZXItPnZlcnNpb24oKSA9PSAxKSB7Ci0gICAgICBSQ0hFQ0socmVhZGVyLT5SZWFkOCgmZWRpdC0+c2VnbWVudF9kdXJhdGlvbikgJiYKLSAgICAgICAgICAgICByZWFkZXItPlJlYWQ4cygmZWRpdC0+bWVkaWFfdGltZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBSQ0hFQ0socmVhZGVyLT5SZWFkNEludG84KCZlZGl0LT5zZWdtZW50X2R1cmF0aW9uKSAmJgotICAgICAgICAgICAgIHJlYWRlci0+UmVhZDRzSW50bzhzKCZlZGl0LT5tZWRpYV90aW1lKSk7Ci0gICAgfQotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQycygmZWRpdC0+bWVkaWFfcmF0ZV9pbnRlZ2VyKSAmJgotICAgICAgICAgICByZWFkZXItPlJlYWQycygmZWRpdC0+bWVkaWFfcmF0ZV9mcmFjdGlvbikpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1FZGl0OjpFZGl0KCkge30KLUVkaXQ6On5FZGl0KCkge30KLUZvdXJDQyBFZGl0OjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX0VEVFM7IH0KLQotYm9vbCBFZGl0OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICByZXR1cm4gcmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZCgmbGlzdCk7Ci19Ci0KLUhhbmRsZXJSZWZlcmVuY2U6OkhhbmRsZXJSZWZlcmVuY2UoKSA6IHR5cGUoa0ludmFsaWQpIHt9Ci1IYW5kbGVyUmVmZXJlbmNlOjp+SGFuZGxlclJlZmVyZW5jZSgpIHt9Ci1Gb3VyQ0MgSGFuZGxlclJlZmVyZW5jZTo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19IRExSOyB9Ci0KLWJvb2wgSGFuZGxlclJlZmVyZW5jZTo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgRm91ckNDIGhkbHJfdHlwZTsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlNraXBCeXRlcyg0KSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkRm91ckNDKCZoZGxyX3R5cGUpICYmIHJlYWRlci0+U2tpcEJ5dGVzKDEyKSk7Ci0KLSAgLy8gTm93IHdlIHNob3VsZCBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB8bmFtZXwgZmllbGQgb2YgSERMUiBib3guIFRoZQotICAvLyB8bmFtZXwgaXMgYSB6ZXJvLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIGluIElTTyBCTUZGLCBidXQgaXQgd2FzIGEKLSAgLy8gUGFzY2FsLXN0eWxlIGNvdW50ZWQgc3RyaW5nIGluIG9sZGVyIFFUL01vdiBmb3JtYXRzLiBTbyB3ZSdsbCByZWFkIHRoZQotICAvLyByZW1haW5pbmcgYm94IGJ5dGVzIGZpcnN0LCB0aGVuIGlmIHRoZSBsYXN0IG9uZSBpcyB6ZXJvLCB3ZSBzdHJpcCB0aGUgbGFzdAotICAvLyB6ZXJvIGJ5dGUsIG90aGVyd2lzZSB3ZSdsbCBzdHJpbmcgdGhlIGZpcnN0IGJ5dGUgKGNvbnRhaW5pbmcgdGhlIGxlbmd0aCBvZgotICAvLyB0aGUgUGFzY2FsLXN0eWxlIHN0cmluZykuCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IG5hbWVfYnl0ZXM7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRWZWMoJm5hbWVfYnl0ZXMsIHJlYWRlci0+c2l6ZSgpIC0gcmVhZGVyLT5wb3MoKSkpOwotICBpZiAobmFtZV9ieXRlcy5zaXplKCkgPT0gMCkgewotICAgIG5hbWUgPSAiIjsKLSAgfSBlbHNlIGlmIChuYW1lX2J5dGVzLmJhY2soKSA9PSAwKSB7Ci0gICAgLy8gVGhpcyBpcyBhIHplcm8tdGVybWluYXRlZCBDLXN0eWxlIHN0cmluZywgZXhjbHVkZSB0aGUgbGFzdCBieXRlLgotICAgIG5hbWUgPSBzdGQ6OnN0cmluZyhuYW1lX2J5dGVzLmJlZ2luKCksIG5hbWVfYnl0ZXMuZW5kKCkgLSAxKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIFBhc2NhbC1zdHlsZSBzdHJpbmcgaXMgY29ycmVjdC4KLSAgICBSQ0hFQ0sobmFtZV9ieXRlc1swXSA9PSAobmFtZV9ieXRlcy5zaXplKCkgLSAxKSk7Ci0gICAgLy8gU2tpcCB0aGUgZmlyc3QgYnl0ZSwgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBQYXNjYWwtc3RyaW5nLgotICAgIG5hbWUgPSBzdGQ6OnN0cmluZyhuYW1lX2J5dGVzLmJlZ2luKCkgKyAxLCBuYW1lX2J5dGVzLmVuZCgpKTsKLSAgfQotCi0gIGlmIChoZGxyX3R5cGUgPT0gRk9VUkNDX1ZJREUpIHsKLSAgICB0eXBlID0ga1ZpZGVvOwotICB9IGVsc2UgaWYgKGhkbHJfdHlwZSA9PSBGT1VSQ0NfU09VTikgewotICAgIHR5cGUgPSBrQXVkaW87Ci0gIH0gZWxzZSBpZiAoaGRscl90eXBlID09IEZPVVJDQ19NRVRBIHx8IGhkbHJfdHlwZSA9PSBGT1VSQ0NfU1VCVCB8fAotICAgICAgICAgICAgIGhkbHJfdHlwZSA9PSBGT1VSQ0NfVEVYVCB8fCBoZGxyX3R5cGUgPT0gRk9VUkNDX1NCVEwpIHsKLSAgICAvLyBGb3IgcHVycG9zZXMgb2YgZGV0ZWN0aW9uLCB3ZSBpbmNsdWRlICdzYnRsJyBoYW5kbGVyIGhlcmUuIE5vdGUsIHRob3VnaAotICAgIC8vIHRoYXQgSVNPLTE0NDk2LTEyIGFuZCBpdHMgMjAxMiBBbWVuZG1lbnQgMiwgYW5kIHRoZSBzcGVjIGZvciBzb3VyY2luZwotICAgIC8vIGluYmFuZCB0cmFja3MgYWxsIHJlZmVyZW5jZSBvbmx5ICd0ZXh0JyBvciAnc3VidCcsIGFuZCAxNDQ5Ni0zMAotICAgIC8vIHJlZmVyZW5jZXMgb25seSAnc3VidCcuIFlldCBmZm1wZWcgY2FuIGVuY29kZSBzdWJ0aXRsZXMgYXMgJ3NidGwnLgotICAgIHR5cGUgPSBrVGV4dDsKLSAgfSBlbHNlIHsKLSAgICB0eXBlID0ga0ludmFsaWQ7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCgpCi0gICAgOiB2ZXJzaW9uKDApLAotICAgICAgcHJvZmlsZV9pbmRpY2F0aW9uKDApLAotICAgICAgcHJvZmlsZV9jb21wYXRpYmlsaXR5KDApLAotICAgICAgYXZjX2xldmVsKDApLAotICAgICAgbGVuZ3RoX3NpemUoMCkge30KLUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjp+QVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQoKSB7fQotRm91ckNDIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX0FWQ0M7IH0KLQotYm9vbCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgcmV0dXJuIFBhcnNlSW50ZXJuYWwocmVhZGVyLCByZWFkZXItPm1lZGlhX2xvZygpKTsKLX0KLQotYm9vbCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6UGFyc2UoY29uc3QgdWludDhfdCogZGF0YSwgaW50IGRhdGFfc2l6ZSkgewotICBCdWZmZXJSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFfc2l6ZSk7Ci0gIHJldHVybiBQYXJzZUludGVybmFsKCZyZWFkZXIsIG5ldyBNZWRpYUxvZygpKTsKLX0KLQotYm9vbCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6UGFyc2VJbnRlcm5hbCgKLSAgICBCdWZmZXJSZWFkZXIqIHJlYWRlciwgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmdmVyc2lvbikgJiYgdmVyc2lvbiA9PSAxICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZwcm9maWxlX2luZGljYXRpb24pICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZwcm9maWxlX2NvbXBhdGliaWxpdHkpICYmIHJlYWRlci0+UmVhZDEoJmF2Y19sZXZlbCkpOwotCi0gIHVpbnQ4X3QgbGVuZ3RoX3NpemVfbWludXNfb25lOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmbGVuZ3RoX3NpemVfbWludXNfb25lKSk7Ci0gIGxlbmd0aF9zaXplID0gKGxlbmd0aF9zaXplX21pbnVzX29uZSAmIDB4MykgKyAxOwotCi0gIFJDSEVDSyhsZW5ndGhfc2l6ZSAhPSAzKTsgIC8vIE9ubHkgdmFsdWVzIG9mIDEsIDIsIGFuZCA0IGFyZSB2YWxpZC4KLQotICB1aW50OF90IG51bV9zcHM7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWQxKCZudW1fc3BzKSk7Ci0gIG51bV9zcHMgJj0gMHgxZjsKLQotICBzcHNfbGlzdC5yZXNpemUobnVtX3Nwcyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3NwczsgaSsrKSB7Ci0gICAgdWludDE2X3Qgc3BzX2xlbmd0aDsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMigmc3BzX2xlbmd0aCkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkVmVjKCZzcHNfbGlzdFtpXSwgc3BzX2xlbmd0aCkpOwotICAgIFJDSEVDSyhzcHNfbGlzdFtpXS5zaXplKCkgPiA0KTsKLQotICAgIGlmIChtZWRpYV9sb2cuZ2V0KCkpIHsKLSAgICAgIE1FRElBX0xPRyhJTkZPLCBtZWRpYV9sb2cpCi0gICAgICAgICAgPDwgIlZpZGVvIGNvZGVjOiBhdmMxLiIgPDwgYmFzZTo6SGV4RW5jb2RlKHNwc19saXN0W2ldLmRhdGEoKSArIDEsIDMpOwotICAgIH0KLSAgfQotCi0gIHVpbnQ4X3QgbnVtX3BwczsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDEoJm51bV9wcHMpKTsKLQotICBwcHNfbGlzdC5yZXNpemUobnVtX3Bwcyk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3BwczsgaSsrKSB7Ci0gICAgdWludDE2X3QgcHBzX2xlbmd0aDsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMigmcHBzX2xlbmd0aCkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkVmVjKCZwcHNfbGlzdFtpXSwgcHBzX2xlbmd0aCkpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkOjpWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpCi0gICAgOiBwcm9maWxlKFZJREVPX0NPREVDX1BST0ZJTEVfVU5LTk9XTikge30KLQotVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ6On5WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHt9Ci0KLUZvdXJDQyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZDo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19WUENDOyB9Ci0KLWJvb2wgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIHVpbnQ4X3QgcHJvZmlsZV9pbmRpY2F0aW9uID0gMDsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQxKCZwcm9maWxlX2luZGljYXRpb24pKTsKLSAgLy8gVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIG5vdCBwYXJzZWQgYXMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVtIGZvciBub3cuCi0KLSAgc3dpdGNoIChwcm9maWxlX2luZGljYXRpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICBwcm9maWxlID0gVlA5UFJPRklMRV9QUk9GSUxFMDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAgIHByb2ZpbGUgPSBWUDlQUk9GSUxFX1BST0ZJTEUxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcHJvZmlsZSA9IFZQOVBST0ZJTEVfUFJPRklMRTI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICBwcm9maWxlID0gVlA5UFJPRklMRV9QUk9GSUxFMzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBNRURJQV9MT0coRVJST1IsIHJlYWRlci0+bWVkaWFfbG9nKCkpCi0gICAgICAgICAgPDwgIlVuc3VwcG9ydGVkIFZQOSBwcm9maWxlOiAiIDw8IHByb2ZpbGVfaW5kaWNhdGlvbjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotQVYxQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkOjpBVjFDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoKQotICAgIDogcHJvZmlsZShWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04pIHt9Ci0KLUFWMUNvZGVjQ29uZmlndXJhdGlvblJlY29yZDo6fkFWMUNvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpID0gZGVmYXVsdDsKLQotRm91ckNDIEFWMUNvZGVjQ29uZmlndXJhdGlvblJlY29yZDo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19BVjFDOyB9Ci0KLS8vIFBhcnNlIHRoZSBBVjFDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQsIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLS8vIHVuc2lnbmVkIGludCAoMSkgbWFya2VyID0gMTsKLS8vIHVuc2lnbmVkIGludCAoNykgdmVyc2lvbiA9IDE7Ci0vLyB1bnNpZ25lZCBpbnQgKDMpIHNlcV9wcm9maWxlOwotLy8gdW5zaWduZWQgaW50ICg1KSBzZXFfbGV2ZWxfaWR4XzA7Ci0vLyB1bnNpZ25lZCBpbnQgKDEpIHNlcV90aWVyXzA7Ci0vLyB1bnNpZ25lZCBpbnQgKDEpIGhpZ2hfYml0ZGVwdGg7Ci0vLyB1bnNpZ25lZCBpbnQgKDEpIHR3ZWx2ZV9iaXQ7Ci0vLyB1bnNpZ25lZCBpbnQgKDEpIG1vbm9jaHJvbWU7Ci0vLyB1bnNpZ25lZCBpbnQgKDEpIGNocm9tYV9zdWJzYW1wbGluZ194OwotLy8gdW5zaWduZWQgaW50ICgxKSBjaHJvbWFfc3Vic2FtcGxpbmdfeTsKLS8vIHVuc2lnbmVkIGludCAoMikgY2hyb21hX3NhbXBsZV9wb3NpdGlvbjsKLS8vIHVuc2lnbmVkIGludCAoMykgcmVzZXJ2ZWQgPSAwOwotLy8KLS8vIHVuc2lnbmVkIGludCAoMSkgaW5pdGlhbF9wcmVzZW50YXRpb25fZGVsYXlfcHJlc2VudDsKLS8vIGlmIChpbml0aWFsX3ByZXNlbnRhdGlvbl9kZWxheV9wcmVzZW50KSB7Ci0vLyAgIHVuc2lnbmVkIGludCAoNCkgaW5pdGlhbF9wcmVzZW50YXRpb25fZGVsYXlfbWludXNfb25lOwotLy8gfSBlbHNlIHsKLS8vICAgdW5zaWduZWQgaW50ICg0KSByZXNlcnZlZCA9IDA7Ci0vLyB9Ci0vLwotLy8gdW5zaWduZWQgaW50ICg4KVtdIGNvbmZpZ09CVXM7Ci1ib29sIEFWMUNvZGVjQ29uZmlndXJhdGlvblJlY29yZDo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgdWludDhfdCBhdjFjX2J5dGUgPSAwOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmYXYxY19ieXRlKSk7Ci0gIGNvbnN0IHVpbnQ4X3QgYXYxY19tYXJrZXIgPSBhdjFjX2J5dGUgPj4gNzsKLSAgaWYgKCFhdjFjX21hcmtlcikgewotICAgIE1FRElBX0xPRyhFUlJPUiwgcmVhZGVyLT5tZWRpYV9sb2coKSkgPDwgIlVuc3VwcG9ydGVkIGF2MUM6IG1hcmtlciB1bnNldC4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGNvbnN0IHVpbnQ4X3QgYXYxY192ZXJzaW9uID0gYXYxY19ieXRlICYgMGIwMTExMTExMTsKLSAgaWYgKGF2MWNfdmVyc2lvbiAhPSAxKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCByZWFkZXItPm1lZGlhX2xvZygpKQotICAgICAgICA8PCAiVW5zdXBwb3J0ZWQgYXYxQzogdW5leHBlY3RlZCB2ZXJzaW9uIG51bWJlcjogIiA8PCBhdjFjX3ZlcnNpb247Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgUkNIRUNLKHJlYWRlci0+UmVhZDEoJmF2MWNfYnl0ZSkpOwotICBjb25zdCB1aW50OF90IHNlcV9wcm9maWxlID0gYXYxY19ieXRlID4+IDU7Ci0gIHN3aXRjaCAoc2VxX3Byb2ZpbGUpIHsKLSAgICBjYXNlIDA6Ci0gICAgICBwcm9maWxlID0gQVYxUFJPRklMRV9QUk9GSUxFX01BSU47Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICBwcm9maWxlID0gQVYxUFJPRklMRV9QUk9GSUxFX0hJR0g7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICBwcm9maWxlID0gQVYxUFJPRklMRV9QUk9GSUxFX1BSTzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBNRURJQV9MT0coRVJST1IsIHJlYWRlci0+bWVkaWFfbG9nKCkpCi0gICAgICAgICAgPDwgIlVuc3VwcG9ydGVkIGF2MUM6IHVua25vd24gcHJvZmlsZSAweCIgPDwgc3RkOjpoZXggPDwgc2VxX3Byb2ZpbGU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgaWdub3JlZCBzaW5jZSB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZW0geWV0LgotICByZXR1cm4gdHJ1ZTsKLX0KLQotUGl4ZWxBc3BlY3RSYXRpb0JveDo6UGl4ZWxBc3BlY3RSYXRpb0JveCgpIDogaF9zcGFjaW5nKDEpLCB2X3NwYWNpbmcoMSkge30KLVBpeGVsQXNwZWN0UmF0aW9Cb3g6On5QaXhlbEFzcGVjdFJhdGlvQm94KCkge30KLUZvdXJDQyBQaXhlbEFzcGVjdFJhdGlvQm94OjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1BBU1A7IH0KLQotYm9vbCBQaXhlbEFzcGVjdFJhdGlvQm94OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmaF9zcGFjaW5nKSAmJiByZWFkZXItPlJlYWQ0KCZ2X3NwYWNpbmcpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUNvbG9yUGFyYW1ldGVySW5mb3JtYXRpb246OkNvbG9yUGFyYW1ldGVySW5mb3JtYXRpb24oKSB7fQotQ29sb3JQYXJhbWV0ZXJJbmZvcm1hdGlvbjo6fkNvbG9yUGFyYW1ldGVySW5mb3JtYXRpb24oKSB7fQotRm91ckNDIENvbG9yUGFyYW1ldGVySW5mb3JtYXRpb246OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfQ09MUjsgfQotCi1ib29sIENvbG9yUGFyYW1ldGVySW5mb3JtYXRpb246OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIEZvdXJDQyB0eXBlOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkRm91ckNDKCZ0eXBlKSk7Ci0gIC8vIFRPRE86IFN1cHBvcnQgJ25jbGMnLCAncklDQycsIGFuZCAncHJvZicuCi0gIFJDSEVDSyh0eXBlID09IEZPVVJDQ19OQ0xYKTsKLQotICB1aW50OF90IGZ1bGxfcmFuZ2VfYnl0ZTsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDIoJmNvbG91cl9wcmltYXJpZXMpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQyKCZ0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQyKCZtYXRyaXhfY29lZmZpY2llbnRzKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkMSgmZnVsbF9yYW5nZV9ieXRlKSk7Ci0gIGZ1bGxfcmFuZ2UgPSBmdWxsX3JhbmdlX2J5dGUgJiAweDgwOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1NYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWU6Ok1hc3RlcmluZ0Rpc3BsYXlDb2xvclZvbHVtZSgpIHt9Ci1NYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWU6On5NYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWUoKSB7fQotRm91ckNDIE1hc3RlcmluZ0Rpc3BsYXlDb2xvclZvbHVtZTo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19NRENWOyB9Ci0KLWJvb2wgTWFzdGVyaW5nRGlzcGxheUNvbG9yVm9sdW1lOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICAvLyBUZWNobmljYWxseSB0aGUgY29sb3IgY29vcmRpbmF0ZXMgbWF5IGJlIGluIGFueSBvcmRlci4gIFRoZSBzcGVjIHJlY29tbWVuZHMKLSAgLy8gR0JSIGFuZCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGNvbG9yIGNvb3JkaW5hdGVzIGFyZSBpbiBzdWNoIG9yZGVyLgotICBSQ0hFQ0soUmVhZE1kY3ZDb2xvckNvb3JkaW5hdGUocmVhZGVyLCAmZGlzcGxheV9wcmltYXJpZXNfZ3gpICYmCi0gICAgICAgICBSZWFkTWRjdkNvbG9yQ29vcmRpbmF0ZShyZWFkZXIsICZkaXNwbGF5X3ByaW1hcmllc19neSkgJiYKLSAgICAgICAgIFJlYWRNZGN2Q29sb3JDb29yZGluYXRlKHJlYWRlciwgJmRpc3BsYXlfcHJpbWFyaWVzX2J4KSAmJgotICAgICAgICAgUmVhZE1kY3ZDb2xvckNvb3JkaW5hdGUocmVhZGVyLCAmZGlzcGxheV9wcmltYXJpZXNfYnkpICYmCi0gICAgICAgICBSZWFkTWRjdkNvbG9yQ29vcmRpbmF0ZShyZWFkZXIsICZkaXNwbGF5X3ByaW1hcmllc19yeCkgJiYKLSAgICAgICAgIFJlYWRNZGN2Q29sb3JDb29yZGluYXRlKHJlYWRlciwgJmRpc3BsYXlfcHJpbWFyaWVzX3J5KSAmJgotICAgICAgICAgUmVhZE1kY3ZDb2xvckNvb3JkaW5hdGUocmVhZGVyLCAmd2hpdGVfcG9pbnRfeCkgJiYKLSAgICAgICAgIFJlYWRNZGN2Q29sb3JDb29yZGluYXRlKHJlYWRlciwgJndoaXRlX3BvaW50X3kpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQ0KCZtYXhfZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkNCgmbWluX2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSkpOwotCi0gIGNvbnN0IHVpbnQzMl90IGtVbml0T2ZNYXN0ZXJpbmdMdW1pbmFuY2UgPSAxMDAwMDsKLSAgbWF4X2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSAvPSBrVW5pdE9mTWFzdGVyaW5nTHVtaW5hbmNlOwotICBtaW5fZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlIC89IGtVbml0T2ZNYXN0ZXJpbmdMdW1pbmFuY2U7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUNvbnRlbnRMaWdodExldmVsSW5mb3JtYXRpb246OkNvbnRlbnRMaWdodExldmVsSW5mb3JtYXRpb24oKSB7fQotQ29udGVudExpZ2h0TGV2ZWxJbmZvcm1hdGlvbjo6fkNvbnRlbnRMaWdodExldmVsSW5mb3JtYXRpb24oKSB7fQotRm91ckNDIENvbnRlbnRMaWdodExldmVsSW5mb3JtYXRpb246OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfQ0xMSTsgfQotCi1ib29sIENvbnRlbnRMaWdodExldmVsSW5mb3JtYXRpb246OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIHJldHVybiByZWFkZXItPlJlYWQyKCZtYXhfY29udGVudF9saWdodF9sZXZlbCkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDIoJm1heF9waWNfYXZlcmFnZV9saWdodF9sZXZlbCk7Ci19Ci0KLVZpZGVvU2FtcGxlRW50cnk6OlZpZGVvU2FtcGxlRW50cnkoKQotICAgIDogZm9ybWF0KEZPVVJDQ19OVUxMKSwKLSAgICAgIGRhdGFfcmVmZXJlbmNlX2luZGV4KDApLAotICAgICAgd2lkdGgoMCksCi0gICAgICBoZWlnaHQoMCksCi0gICAgICB2aWRlb19jb2RlYyhrVW5rbm93blZpZGVvQ29kZWMpLAotICAgICAgdmlkZW9fY29kZWNfcHJvZmlsZShWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV04pIHt9Ci0KLVZpZGVvU2FtcGxlRW50cnk6On5WaWRlb1NhbXBsZUVudHJ5KCkge30KLUZvdXJDQyBWaWRlb1NhbXBsZUVudHJ5OjpCb3hUeXBlKCkgY29uc3QgewotICBEQ0hFQ0soZmFsc2UpIDw8ICJWaWRlb1NhbXBsZUVudHJ5IHNob3VsZCBiZSBwYXJzZWQgYWNjb3JkaW5nIHRvIHRoZSAiCi0gICAgICAgICAgICAgICAgPDwgImhhbmRsZXIgdHlwZSByZWNvdmVyZWQgaW4gaXRzIE1lZGlhIGFuY2VzdG9yLiI7Ci0gIHJldHVybiBGT1VSQ0NfTlVMTDsKLX0KLQotYm9vbCBWaWRlb1NhbXBsZUVudHJ5OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBmb3JtYXQgPSByZWFkZXItPnR5cGUoKTsKLSAgUkNIRUNLKHJlYWRlci0+U2tpcEJ5dGVzKDYpICYmIHJlYWRlci0+UmVhZDIoJmRhdGFfcmVmZXJlbmNlX2luZGV4KSAmJgotICAgICAgICAgcmVhZGVyLT5Ta2lwQnl0ZXMoMTYpICYmIHJlYWRlci0+UmVhZDIoJndpZHRoKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkMigmaGVpZ2h0KSAmJiByZWFkZXItPlNraXBCeXRlcyg1MCkpOwotCi0gIFJDSEVDSyhyZWFkZXItPlNjYW5DaGlsZHJlbigpICYmIHJlYWRlci0+TWF5YmVSZWFkQ2hpbGQoJnBpeGVsX2FzcGVjdCkpOwotCi0gIGlmIChmb3JtYXQgPT0gRk9VUkNDX0VOQ1YpIHsKLSAgICAvLyBDb250aW51ZSBzY2FubmluZyB1bnRpbCBhIHJlY29nbml6ZWQgcHJvdGVjdGlvbiBzY2hlbWUgaXMgZm91bmQsIG9yIHVudGlsCi0gICAgLy8gd2UgcnVuIG91dCBvZiBwcm90ZWN0aW9uIHNjaGVtZXMuCi0gICAgd2hpbGUgKCFzaW5mLkhhc1N1cHBvcnRlZFNjaGVtZSgpKSB7Ci0gICAgICBpZiAoIXJlYWRlci0+UmVhZENoaWxkKCZzaW5mKSkgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGNvbnN0IEZvdXJDQyBhY3R1YWxfZm9ybWF0ID0KLSAgICAgIGZvcm1hdCA9PSBGT1VSQ0NfRU5DViA/IHNpbmYuZm9ybWF0LmZvcm1hdCA6IGZvcm1hdDsKLSAgc3dpdGNoIChhY3R1YWxfZm9ybWF0KSB7Ci0gICAgY2FzZSBGT1VSQ0NfQVZDMToKLSAgICBjYXNlIEZPVVJDQ19BVkMzOiB7Ci0gICAgICBEVkxPRygyKSA8PCBfX0ZVTkNUSU9OX18KLSAgICAgICAgICAgICAgIDw8ICIgcmVhZGluZyBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAoYXZjQykiOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkPiBhdmNDb25maWcoCi0gICAgICAgICAgbmV3IEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKCkpOwotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZENoaWxkKGF2Y0NvbmZpZy5nZXQoKSkpOwotICAgICAgdmlkZW9fY29kZWMgPSBrQ29kZWNIMjY0OwotICAgICAgdmlkZW9fY29kZWNfcHJvZmlsZSA9IEgyNjRQYXJzZXI6OlByb2ZpbGVJRENUb1ZpZGVvQ29kZWNQcm9maWxlKAotICAgICAgICAgIGF2Y0NvbmZpZy0+cHJvZmlsZV9pbmRpY2F0aW9uKTsKLSAgICAgIGZyYW1lX2JpdHN0cmVhbV9jb252ZXJ0ZXIgPQotICAgICAgICAgIGJhc2U6OldyYXBSZWZDb3VudGVkKG5ldyBBVkNCaXRzdHJlYW1Db252ZXJ0ZXIoc3RkOjptb3ZlKGF2Y0NvbmZpZykpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZPVVJDQ19IRVYxOgotICAgIGNhc2UgRk9VUkNDX0hWQzE6IHsKLSAgICAgIERWTE9HKDIpIDw8IF9fRlVOQ1RJT05fXwotICAgICAgICAgICAgICAgPDwgIiBwYXJzaW5nIEhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAoaHZjQykiOwotICAgICAgc3RkOjp1bmlxdWVfcHRyPEhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZD4gaGV2Y0NvbmZpZygKLSAgICAgICAgICBuZXcgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKCkpOwotICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZENoaWxkKGhldmNDb25maWcuZ2V0KCkpKTsKLSAgICAgIHZpZGVvX2NvZGVjID0ga0NvZGVjSEVWQzsKLSAgICAgIHZpZGVvX2NvZGVjX3Byb2ZpbGUgPSBoZXZjQ29uZmlnLT5HZXRWaWRlb1Byb2ZpbGUoKTsKLSAgICAgIGZyYW1lX2JpdHN0cmVhbV9jb252ZXJ0ZXIgPSBiYXNlOjpXcmFwUmVmQ291bnRlZCgKLSAgICAgICAgICBuZXcgSEVWQ0JpdHN0cmVhbUNvbnZlcnRlcihzdGQ6Om1vdmUoaGV2Y0NvbmZpZykpKTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZPVVJDQ19WUDA5OiB7Ci0gICAgICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiIHBhcnNpbmcgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgKHZwY0MpIjsKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZD4gdnBfY29uZmlnKAotICAgICAgICAgIG5ldyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpKTsKLSAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWRDaGlsZCh2cF9jb25maWcuZ2V0KCkpKTsKLSAgICAgIGZyYW1lX2JpdHN0cmVhbV9jb252ZXJ0ZXIgPSBudWxscHRyOwotICAgICAgdmlkZW9fY29kZWMgPSBrQ29kZWNWUDk7Ci0gICAgICB2aWRlb19jb2RlY19wcm9maWxlID0gdnBfY29uZmlnLT5wcm9maWxlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRk9VUkNDX0FWMDE6IHsKLSAgICAgIERWTE9HKDIpIDw8IF9fZnVuY19fIDw8ICIgcmVhZGluZyBBVjEgY29uZmlndXJhdGlvbi4iOwotICAgICAgQVYxQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIGF2MV9jb25maWc7Ci0gICAgICBSQ0hFQ0socmVhZGVyLT5SZWFkQ2hpbGQoJmF2MV9jb25maWcpKTsKLSAgICAgIGZyYW1lX2JpdHN0cmVhbV9jb252ZXJ0ZXIgPSBudWxscHRyOwotICAgICAgdmlkZW9fY29kZWMgPSBrQ29kZWNBVjE7Ci0gICAgICB2aWRlb19jb2RlY19wcm9maWxlID0gYXYxX2NvbmZpZy5wcm9maWxlOwotCi0gICAgICBDb2xvclBhcmFtZXRlckluZm9ybWF0aW9uIGNvbG9yX3BhcmFtZXRlcl9pbmZvcm1hdGlvbjsKLSAgICAgIGlmIChyZWFkZXItPkhhc0NoaWxkKCZjb2xvcl9wYXJhbWV0ZXJfaW5mb3JtYXRpb24pKSB7Ci0gICAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWRDaGlsZCgmY29sb3JfcGFyYW1ldGVyX2luZm9ybWF0aW9uKSk7Ci0gICAgICAgIHRoaXMtPmNvbG9yX3BhcmFtZXRlcl9pbmZvcm1hdGlvbiA9IGNvbG9yX3BhcmFtZXRlcl9pbmZvcm1hdGlvbjsKLSAgICAgIH0KLQotICAgICAgTWFzdGVyaW5nRGlzcGxheUNvbG9yVm9sdW1lIG1hc3RlcmluZ19kaXNwbGF5X2NvbG9yX3ZvbHVtZTsKLSAgICAgIGlmIChyZWFkZXItPkhhc0NoaWxkKCZtYXN0ZXJpbmdfZGlzcGxheV9jb2xvcl92b2x1bWUpKSB7Ci0gICAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWRDaGlsZCgmbWFzdGVyaW5nX2Rpc3BsYXlfY29sb3Jfdm9sdW1lKSk7Ci0gICAgICAgIHRoaXMtPm1hc3RlcmluZ19kaXNwbGF5X2NvbG9yX3ZvbHVtZSA9IG1hc3RlcmluZ19kaXNwbGF5X2NvbG9yX3ZvbHVtZTsKLSAgICAgIH0KLQotICAgICAgQ29udGVudExpZ2h0TGV2ZWxJbmZvcm1hdGlvbiBjb250ZW50X2xpZ2h0X2xldmVsX2luZm9ybWF0aW9uOwotICAgICAgaWYgKHJlYWRlci0+SGFzQ2hpbGQoJmNvbnRlbnRfbGlnaHRfbGV2ZWxfaW5mb3JtYXRpb24pKSB7Ci0gICAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWRDaGlsZCgmY29udGVudF9saWdodF9sZXZlbF9pbmZvcm1hdGlvbikpOwotICAgICAgICB0aGlzLT5jb250ZW50X2xpZ2h0X2xldmVsX2luZm9ybWF0aW9uID0gY29udGVudF9saWdodF9sZXZlbF9pbmZvcm1hdGlvbjsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgLy8gVW5rbm93bi91bnN1cHBvcnRlZCBmb3JtYXQKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgcmVhZGVyLT5tZWRpYV9sb2coKSkKLSAgICAgICAgICA8PCBfX0ZVTkNUSU9OX18gPDwgIiB1bnN1cHBvcnRlZCB2aWRlbyBmb3JtYXQgIgotICAgICAgICAgIDw8IEZvdXJDQ1RvU3RyaW5nKGFjdHVhbF9mb3JtYXQpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmlkZW9TYW1wbGVFbnRyeTo6SXNGb3JtYXRWYWxpZCgpIGNvbnN0IHsKLSAgY29uc3QgRm91ckNDIGFjdHVhbF9mb3JtYXQgPQotICAgICAgZm9ybWF0ID09IEZPVVJDQ19FTkNWID8gc2luZi5mb3JtYXQuZm9ybWF0IDogZm9ybWF0OwotICBzd2l0Y2ggKGFjdHVhbF9mb3JtYXQpIHsKLSAgICBjYXNlIEZPVVJDQ19BVkMxOgotICAgIGNhc2UgRk9VUkNDX0FWQzM6Ci0gICAgY2FzZSBGT1VSQ0NfSEVWMToKLSAgICBjYXNlIEZPVVJDQ19IVkMxOgotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBGT1VSQ0NfVlAwOToKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgRk9VUkNDX0FWMDE6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLUVsZW1lbnRhcnlTdHJlYW1EZXNjcmlwdG9yOjpFbGVtZW50YXJ5U3RyZWFtRGVzY3JpcHRvcigpCi0gICAgOiBvYmplY3RfdHlwZShrRm9yYmlkZGVuKSB7fQotCi1FbGVtZW50YXJ5U3RyZWFtRGVzY3JpcHRvcjo6fkVsZW1lbnRhcnlTdHJlYW1EZXNjcmlwdG9yKCkge30KLQotRm91ckNDIEVsZW1lbnRhcnlTdHJlYW1EZXNjcmlwdG9yOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX0VTRFM7IH0KLQotYm9vbCBFbGVtZW50YXJ5U3RyZWFtRGVzY3JpcHRvcjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgRVNEZXNjcmlwdG9yIGVzX2Rlc2M7Ci0KLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSk7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRWZWMoJmRhdGEsIHJlYWRlci0+c2l6ZSgpIC0gcmVhZGVyLT5wb3MoKSkpOwotICBSQ0hFQ0soZXNfZGVzYy5QYXJzZShkYXRhKSk7Ci0KLSAgb2JqZWN0X3R5cGUgPSBlc19kZXNjLm9iamVjdF90eXBlKCk7Ci0KLSAgaWYgKG9iamVjdF90eXBlICE9IDB4NDApIHsKLSAgICBNRURJQV9MT0coSU5GTywgcmVhZGVyLT5tZWRpYV9sb2coKSkKLSAgICAgICAgPDwgIkF1ZGlvIGNvZGVjOiBtcDRhLiIgPDwgc3RkOjpoZXggPDwgc3RhdGljX2Nhc3Q8aW50PihvYmplY3RfdHlwZSk7Ci0gIH0KLQotICBpZiAoZXNfZGVzYy5Jc0FBQyhvYmplY3RfdHlwZSkpCi0gICAgUkNIRUNLKGFhYy5QYXJzZShlc19kZXNjLmRlY29kZXJfc3BlY2lmaWNfaW5mbygpLCByZWFkZXItPm1lZGlhX2xvZygpKSk7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUF1ZGlvU2FtcGxlRW50cnk6OkF1ZGlvU2FtcGxlRW50cnkoKQotICAgIDogZm9ybWF0KEZPVVJDQ19OVUxMKSwKLSAgICAgIGRhdGFfcmVmZXJlbmNlX2luZGV4KDApLAotICAgICAgY2hhbm5lbGNvdW50KDApLAotICAgICAgc2FtcGxlc2l6ZSgwKSwKLSAgICAgIHNhbXBsZXJhdGUoMCkge30KLQotQXVkaW9TYW1wbGVFbnRyeTo6fkF1ZGlvU2FtcGxlRW50cnkoKSB7fQotCi1Gb3VyQ0MgQXVkaW9TYW1wbGVFbnRyeTo6Qm94VHlwZSgpIGNvbnN0IHsKLSAgRENIRUNLKGZhbHNlKSA8PCAiQXVkaW9TYW1wbGVFbnRyeSBzaG91bGQgYmUgcGFyc2VkIGFjY29yZGluZyB0byB0aGUgIgotICAgICAgICAgICAgICAgIDw8ICJoYW5kbGVyIHR5cGUgcmVjb3ZlcmVkIGluIGl0cyBNZWRpYSBhbmNlc3Rvci4iOwotICByZXR1cm4gRk9VUkNDX05VTEw7Ci19Ci0KLWJvb2wgQXVkaW9TYW1wbGVFbnRyeTo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgZm9ybWF0ID0gcmVhZGVyLT50eXBlKCk7Ci0gIFJDSEVDSyhyZWFkZXItPlNraXBCeXRlcyg2KSAmJiByZWFkZXItPlJlYWQyKCZkYXRhX3JlZmVyZW5jZV9pbmRleCkgJiYKLSAgICAgICAgIHJlYWRlci0+U2tpcEJ5dGVzKDgpICYmIHJlYWRlci0+UmVhZDIoJmNoYW5uZWxjb3VudCkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDIoJnNhbXBsZXNpemUpICYmIHJlYWRlci0+U2tpcEJ5dGVzKDQpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQ0KCZzYW1wbGVyYXRlKSk7Ci0gIC8vIENvbnZlcnQgZnJvbSAxNi4xNiBmaXhlZCBwb2ludCB0byBpbnRlZ2VyCi0gIHNhbXBsZXJhdGUgPj49IDE2OwotCi0gIFJDSEVDSyhyZWFkZXItPlNjYW5DaGlsZHJlbigpKTsKLSAgaWYgKGZvcm1hdCA9PSBGT1VSQ0NfRU5DQSkgewotICAgIC8vIENvbnRpbnVlIHNjYW5uaW5nIHVudGlsIGEgcmVjb2duaXplZCBwcm90ZWN0aW9uIHNjaGVtZSBpcyBmb3VuZCwgb3IgdW50aWwKLSAgICAvLyB3ZSBydW4gb3V0IG9mIHByb3RlY3Rpb24gc2NoZW1lcy4KLSAgICB3aGlsZSAoIXNpbmYuSGFzU3VwcG9ydGVkU2NoZW1lKCkpIHsKLSAgICAgIGlmICghcmVhZGVyLT5SZWFkQ2hpbGQoJnNpbmYpKSByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gRVNEUyBpcyBub3QgdmFsaWQgaW4gY2FzZSBvZiBFQUMzLgotICBSQ0hFQ0socmVhZGVyLT5NYXliZVJlYWRDaGlsZCgmZXNkcykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotTWVkaWFIZWFkZXI6Ok1lZGlhSGVhZGVyKCkKLSAgICA6IGNyZWF0aW9uX3RpbWUoMCksCi0gICAgICBtb2RpZmljYXRpb25fdGltZSgwKSwKLSAgICAgIHRpbWVzY2FsZSgwKSwKLSAgICAgIGR1cmF0aW9uKDApLAotICAgICAgbGFuZ3VhZ2VfY29kZSgwKSB7fQotTWVkaWFIZWFkZXI6On5NZWRpYUhlYWRlcigpIHt9Ci1Gb3VyQ0MgTWVkaWFIZWFkZXI6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfTURIRDsgfQotCi1ib29sIE1lZGlhSGVhZGVyOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5SZWFkRnVsbEJveEhlYWRlcigpKTsKLQotICBpZiAocmVhZGVyLT52ZXJzaW9uKCkgPT0gMSkgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ4KCZjcmVhdGlvbl90aW1lKSAmJiByZWFkZXItPlJlYWQ4KCZtb2RpZmljYXRpb25fdGltZSkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkNCgmdGltZXNjYWxlKSAmJiByZWFkZXItPlJlYWQ4KCZkdXJhdGlvbikgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkMigmbGFuZ3VhZ2VfY29kZSkpOwotICB9IGVsc2UgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ0SW50bzgoJmNyZWF0aW9uX3RpbWUpICYmCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDRJbnRvOCgmbW9kaWZpY2F0aW9uX3RpbWUpICYmCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDQoJnRpbWVzY2FsZSkgJiYgcmVhZGVyLT5SZWFkNEludG84KCZkdXJhdGlvbikgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkMigmbGFuZ3VhZ2VfY29kZSkpOwotICB9Ci0gIC8vIElTTyA2MzktMi9UIGxhbmd1YWdlIGNvZGUgb25seSB1c2VzIDE1IGxvd2VyIGJpdHMsIHNvIHJlc2V0IHRoZSAxNnRoIGJpdC4KLSAgbGFuZ3VhZ2VfY29kZSAmPSAweDdmZmY7Ci0gIC8vIFNraXAgcGxheWJhY2sgcXVhbGl0eSBpbmZvcm1hdGlvbgotICByZXR1cm4gcmVhZGVyLT5Ta2lwQnl0ZXMoMik7Ci19Ci0KLXN0ZDo6c3RyaW5nIE1lZGlhSGVhZGVyOjpsYW5ndWFnZSgpIGNvbnN0IHsKLSAgaWYgKGxhbmd1YWdlX2NvZGUgPT0gMHg3ZmZmIHx8IGxhbmd1YWdlX2NvZGUgPCAweDQwMCkgewotICAgIHJldHVybiAidW5kIjsKLSAgfQotICBjaGFyIGxhbmdfY2hhcnNbNF07Ci0gIGxhbmdfY2hhcnNbM10gPSAwOwotICBsYW5nX2NoYXJzWzJdID0gMHg2MCArIChsYW5ndWFnZV9jb2RlICYgMHgxZik7Ci0gIGxhbmdfY2hhcnNbMV0gPSAweDYwICsgKChsYW5ndWFnZV9jb2RlID4+IDUpICYgMHgxZik7Ci0gIGxhbmdfY2hhcnNbMF0gPSAweDYwICsgKChsYW5ndWFnZV9jb2RlID4+IDEwKSAmIDB4MWYpOwotCi0gIGlmIChsYW5nX2NoYXJzWzBdIDwgJ2EnIHx8IGxhbmdfY2hhcnNbMF0gPiAneicgfHwgbGFuZ19jaGFyc1sxXSA8ICdhJyB8fAotICAgICAgbGFuZ19jaGFyc1sxXSA+ICd6JyB8fCBsYW5nX2NoYXJzWzJdIDwgJ2EnIHx8IGxhbmdfY2hhcnNbMl0gPiAneicpIHsKLSAgICAvLyBHb3QgdW5leHBlY3RlZCBjaGFyYWN0ZXJzIGluIElTTyA2MzktMi9UIGxhbmd1YWdlIGNvZGUuIFNvbWV0aGluZyBtdXN0IGJlCi0gICAgLy8gd3Jvbmcgd2l0aCB0aGUgaW5wdXQgZmlsZSwgcmVwb3J0ICd1bmQnIGxhbmd1YWdlIHRvIGJlIHNhZmUuCi0gICAgRFZMT0coMikgPDwgIklnbm9yaW5nIE1ESEQgbGFuZ3VhZ2VfY29kZSAobm9uIElTTyA2MzktMiBjb21wbGlhbnQpOiAiCi0gICAgICAgICAgICAgPDwgbGFuZ19jaGFyczsKLSAgICBsYW5nX2NoYXJzWzBdID0gJ3UnOwotICAgIGxhbmdfY2hhcnNbMV0gPSAnbic7Ci0gICAgbGFuZ19jaGFyc1syXSA9ICdkJzsKLSAgfQotCi0gIHJldHVybiBsYW5nX2NoYXJzOwotfQotCi1NZWRpYUluZm9ybWF0aW9uOjpNZWRpYUluZm9ybWF0aW9uKCkge30KLU1lZGlhSW5mb3JtYXRpb246On5NZWRpYUluZm9ybWF0aW9uKCkge30KLUZvdXJDQyBNZWRpYUluZm9ybWF0aW9uOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX01JTkY7IH0KLQotYm9vbCBNZWRpYUluZm9ybWF0aW9uOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICByZXR1cm4gcmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZCgmc2FtcGxlX3RhYmxlKTsKLX0KLQotTWVkaWE6Ok1lZGlhKCkge30KLU1lZGlhOjp+TWVkaWEoKSB7fQotRm91ckNDIE1lZGlhOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX01ESUE7IH0KLQotYm9vbCBNZWRpYTo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+U2NhbkNoaWxkcmVuKCkgJiYgcmVhZGVyLT5SZWFkQ2hpbGQoJmhlYWRlcikgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZENoaWxkKCZoYW5kbGVyKSk7Ci0KLSAgLy8gTWFkZGVuaW5nbHksIHRoZSBIYW5kbGVyUmVmZXJlbmNlIGJveCBzcGVjaWZpZXMgaG93IHRvIHBhcnNlIHRoZQotICAvLyBTYW1wbGVEZXNjcmlwdGlvbiBib3gsIG1ha2luZyB0aGUgbGF0dGVyIHRoZSBvbmx5IGJveCAob2YgdGhvc2UgdGhhdCB3ZQotICAvLyBzdXBwb3J0KSB3aGljaCBjYW5ub3QgYmUgcGFyc2VkIGNvcnJlY3RseSBvbiBpdHMgb3duIChvciBldmVuIHdpdGgKLSAgLy8gaW5mb3JtYXRpb24gZnJvbSBpdHMgc3RyaWN0IGFuY2VzdG9yIHRyZWUpLiBXZSB0aHVzIGNvcHkgdGhlIGhhbmRsZXIgdHlwZQotICAvLyB0byB0aGUgc2FtcGxlIGRlc2NyaXB0aW9uIGJveCAqYmVmb3JlKiBwYXJzaW5nIGl0IHRvIHByb3ZpZGUgdGhpcwotICAvLyBpbmZvcm1hdGlvbiB3aGlsZSBwYXJzaW5nLgotICBpbmZvcm1hdGlvbi5zYW1wbGVfdGFibGUuZGVzY3JpcHRpb24udHlwZSA9IGhhbmRsZXIudHlwZTsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZENoaWxkKCZpbmZvcm1hdGlvbikpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotVHJhY2s6OlRyYWNrKCkge30KLVRyYWNrOjp+VHJhY2soKSB7fQotRm91ckNDIFRyYWNrOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1RSQUs7IH0KLQotYm9vbCBUcmFjazo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+U2NhbkNoaWxkcmVuKCkgJiYgcmVhZGVyLT5SZWFkQ2hpbGQoJmhlYWRlcikgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZENoaWxkKCZtZWRpYSkgJiYgcmVhZGVyLT5NYXliZVJlYWRDaGlsZCgmZWRpdCkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotTW92aWVFeHRlbmRzSGVhZGVyOjpNb3ZpZUV4dGVuZHNIZWFkZXIoKSA6IGZyYWdtZW50X2R1cmF0aW9uKDApIHt9Ci1Nb3ZpZUV4dGVuZHNIZWFkZXI6On5Nb3ZpZUV4dGVuZHNIZWFkZXIoKSB7fQotRm91ckNDIE1vdmllRXh0ZW5kc0hlYWRlcjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19NRUhEOyB9Ci0KLWJvb2wgTW92aWVFeHRlbmRzSGVhZGVyOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5SZWFkRnVsbEJveEhlYWRlcigpKTsKLSAgaWYgKHJlYWRlci0+dmVyc2lvbigpID09IDEpIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkOCgmZnJhZ21lbnRfZHVyYXRpb24pKTsKLSAgfSBlbHNlIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkNEludG84KCZmcmFnbWVudF9kdXJhdGlvbikpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1UcmFja0V4dGVuZHM6OlRyYWNrRXh0ZW5kcygpCi0gICAgOiB0cmFja19pZCgwKSwKLSAgICAgIGRlZmF1bHRfc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4KDApLAotICAgICAgZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24oMCksCi0gICAgICBkZWZhdWx0X3NhbXBsZV9zaXplKDApLAotICAgICAgZGVmYXVsdF9zYW1wbGVfZmxhZ3MoMCkge30KLVRyYWNrRXh0ZW5kczo6flRyYWNrRXh0ZW5kcygpIHt9Ci1Gb3VyQ0MgVHJhY2tFeHRlbmRzOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1RSRVg7IH0KLQotYm9vbCBUcmFja0V4dGVuZHM6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkgJiYgcmVhZGVyLT5SZWFkNCgmdHJhY2tfaWQpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQ0KCZkZWZhdWx0X3NhbXBsZV9kZXNjcmlwdGlvbl9pbmRleCkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDQoJmRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkNCgmZGVmYXVsdF9zYW1wbGVfc2l6ZSkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDQoJmRlZmF1bHRfc2FtcGxlX2ZsYWdzKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1Nb3ZpZUV4dGVuZHM6Ok1vdmllRXh0ZW5kcygpIHt9Ci1Nb3ZpZUV4dGVuZHM6On5Nb3ZpZUV4dGVuZHMoKSB7fQotRm91ckNDIE1vdmllRXh0ZW5kczo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19NVkVYOyB9Ci0KLWJvb2wgTW92aWVFeHRlbmRzOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBoZWFkZXIuZnJhZ21lbnRfZHVyYXRpb24gPSAwOwotICByZXR1cm4gcmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPk1heWJlUmVhZENoaWxkKCZoZWFkZXIpICYmCi0gICAgICAgICByZWFkZXItPlJlYWRDaGlsZHJlbigmdHJhY2tzKTsKLX0KLQotTW92aWU6Ok1vdmllKCkgOiBmcmFnbWVudGVkKGZhbHNlKSB7fQotTW92aWU6On5Nb3ZpZSgpIHt9Ci1Gb3VyQ0MgTW92aWU6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfTU9PVjsgfQotCi1ib29sIE1vdmllOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZCgmaGVhZGVyKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkQ2hpbGRyZW4oJnRyYWNrcykpOwotCi0gIFJDSEVDS19NRURJQV9MT0dHRUQocmVhZGVyLT5SZWFkQ2hpbGQoJmV4dGVuZHMpLCByZWFkZXItPm1lZGlhX2xvZygpLAotICAgICAgICAgICAgICAgICAgICAgICJEZXRlY3RlZCB1bmZyYWdtZW50ZWQgTVA0LiBNZWRpYSBTb3VyY2UgRXh0ZW5zaW9ucyAiCi0gICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmUgSVNPIEJNRkYgbW9vdiB0byBjb250YWluIG12ZXggdG8gaW5kaWNhdGUgdGhhdCAiCi0gICAgICAgICAgICAgICAgICAgICAgIk1vdmllIEZyYWdtZW50cyBhcmUgdG8gYmUgZXhwZWN0ZWQuIik7Ci0KLSAgcmV0dXJuIHJlYWRlci0+TWF5YmVSZWFkQ2hpbGRyZW4oJnBzc2gpOwotfQotCi1UcmFja0ZyYWdtZW50RGVjb2RlVGltZTo6VHJhY2tGcmFnbWVudERlY29kZVRpbWUoKSA6IGRlY29kZV90aW1lKDApIHt9Ci1UcmFja0ZyYWdtZW50RGVjb2RlVGltZTo6flRyYWNrRnJhZ21lbnREZWNvZGVUaW1lKCkge30KLUZvdXJDQyBUcmFja0ZyYWdtZW50RGVjb2RlVGltZTo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19URkRUOyB9Ci0KLWJvb2wgVHJhY2tGcmFnbWVudERlY29kZVRpbWU6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkpOwotICBpZiAocmVhZGVyLT52ZXJzaW9uKCkgPT0gMSkKLSAgICByZXR1cm4gcmVhZGVyLT5SZWFkOCgmZGVjb2RlX3RpbWUpOwotICBlbHNlCi0gICAgcmV0dXJuIHJlYWRlci0+UmVhZDRJbnRvOCgmZGVjb2RlX3RpbWUpOwotfQotCi1Nb3ZpZUZyYWdtZW50SGVhZGVyOjpNb3ZpZUZyYWdtZW50SGVhZGVyKCkgOiBzZXF1ZW5jZV9udW1iZXIoMCkge30KLU1vdmllRnJhZ21lbnRIZWFkZXI6On5Nb3ZpZUZyYWdtZW50SGVhZGVyKCkge30KLUZvdXJDQyBNb3ZpZUZyYWdtZW50SGVhZGVyOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX01GSEQ7IH0KLQotYm9vbCBNb3ZpZUZyYWdtZW50SGVhZGVyOjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICByZXR1cm4gcmVhZGVyLT5Ta2lwQnl0ZXMoNCkgJiYgcmVhZGVyLT5SZWFkNCgmc2VxdWVuY2VfbnVtYmVyKTsKLX0KLQotVHJhY2tGcmFnbWVudEhlYWRlcjo6VHJhY2tGcmFnbWVudEhlYWRlcigpCi0gICAgOiB0cmFja19pZCgwKSwKLSAgICAgIHNhbXBsZV9kZXNjcmlwdGlvbl9pbmRleCgwKSwKLSAgICAgIGRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uKDApLAotICAgICAgZGVmYXVsdF9zYW1wbGVfc2l6ZSgwKSwKLSAgICAgIGRlZmF1bHRfc2FtcGxlX2ZsYWdzKDApLAotICAgICAgaGFzX2RlZmF1bHRfc2FtcGxlX2ZsYWdzKGZhbHNlKSB7fQotCi1UcmFja0ZyYWdtZW50SGVhZGVyOjp+VHJhY2tGcmFnbWVudEhlYWRlcigpIHt9Ci1Gb3VyQ0MgVHJhY2tGcmFnbWVudEhlYWRlcjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19URkhEOyB9Ci0KLWJvb2wgVHJhY2tGcmFnbWVudEhlYWRlcjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQ0KCZ0cmFja19pZCkpOwotCi0gIC8vIE1lZGlhIFNvdXJjZSBzcGVjaWZpYzogcmVqZWN0IHRyYWNrcyB0aGF0IHNldCAnYmFzZS1kYXRhLW9mZnNldC1wcmVzZW50Jy4KLSAgLy8gQWx0aG91Z2ggdGhlIE1lZGlhIFNvdXJjZSByZXF1aXJlcyB0aGF0ICdkZWZhdWx0LWJhc2UtaXMtbW9vZicgKDE0NDk2LTEyCi0gIC8vIEFtZW5kbWVudCAyKSBiZSBzZXQsIHdlIG9taXQgdGhpcyBjaGVjayBhcyBtYW55IG90aGVyd2lzZS12YWxpZCBmaWxlcyBpbgotICAvLyB0aGUgd2lsZCBkb24ndCBzZXQgaXQuCi0gIC8vCi0gIC8vICBSQ0hFQ0soKGZsYWdzICYgMHgwMjAwMDApICYmICEoZmxhZ3MgJiAweDEpKTsKLSAgUkNIRUNLKCEocmVhZGVyLT5mbGFncygpICYgMHgxKSk7Ci0KLSAgaWYgKHJlYWRlci0+ZmxhZ3MoKSAmIDB4MikgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ0KCZzYW1wbGVfZGVzY3JpcHRpb25faW5kZXgpKTsKLSAgfSBlbHNlIHsKLSAgICBzYW1wbGVfZGVzY3JpcHRpb25faW5kZXggPSAwOwotICB9Ci0KLSAgaWYgKHJlYWRlci0+ZmxhZ3MoKSAmIDB4OCkgewotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ0KCZkZWZhdWx0X3NhbXBsZV9kdXJhdGlvbikpOwotICB9IGVsc2UgewotICAgIGRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uID0gMDsKLSAgfQotCi0gIGlmIChyZWFkZXItPmZsYWdzKCkgJiAweDEwKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmRlZmF1bHRfc2FtcGxlX3NpemUpKTsKLSAgfSBlbHNlIHsKLSAgICBkZWZhdWx0X3NhbXBsZV9zaXplID0gMDsKLSAgfQotCi0gIGlmIChyZWFkZXItPmZsYWdzKCkgJiAweDIwKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmRlZmF1bHRfc2FtcGxlX2ZsYWdzKSk7Ci0gICAgaGFzX2RlZmF1bHRfc2FtcGxlX2ZsYWdzID0gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAgICBoYXNfZGVmYXVsdF9zYW1wbGVfZmxhZ3MgPSBmYWxzZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1UcmFja0ZyYWdtZW50UnVuOjpUcmFja0ZyYWdtZW50UnVuKCkgOiBzYW1wbGVfY291bnQoMCksIGRhdGFfb2Zmc2V0KDApIHt9Ci1UcmFja0ZyYWdtZW50UnVuOjp+VHJhY2tGcmFnbWVudFJ1bigpIHt9Ci1Gb3VyQ0MgVHJhY2tGcmFnbWVudFJ1bjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19UUlVOOyB9Ci0KLWJvb2wgVHJhY2tGcmFnbWVudFJ1bjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQ0KCZzYW1wbGVfY291bnQpKTsKLSAgY29uc3QgdWludDMyX3QgZmxhZ3MgPSByZWFkZXItPmZsYWdzKCk7Ci0KLSAgYm9vbCBkYXRhX29mZnNldF9wcmVzZW50ID0gKGZsYWdzICYgMHgxKSAhPSAwOwotICBib29sIGZpcnN0X3NhbXBsZV9mbGFnc19wcmVzZW50ID0gKGZsYWdzICYgMHg0KSAhPSAwOwotICBib29sIHNhbXBsZV9kdXJhdGlvbl9wcmVzZW50ID0gKGZsYWdzICYgMHgxMDApICE9IDA7Ci0gIGJvb2wgc2FtcGxlX3NpemVfcHJlc2VudCA9IChmbGFncyAmIDB4MjAwKSAhPSAwOwotICBib29sIHNhbXBsZV9mbGFnc19wcmVzZW50ID0gKGZsYWdzICYgMHg0MDApICE9IDA7Ci0gIGJvb2wgc2FtcGxlX2NvbXBvc2l0aW9uX3RpbWVfb2Zmc2V0c19wcmVzZW50ID0gKGZsYWdzICYgMHg4MDApICE9IDA7Ci0KLSAgaWYgKGRhdGFfb2Zmc2V0X3ByZXNlbnQpIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmZGF0YV9vZmZzZXQpKTsKLSAgfSBlbHNlIHsKLSAgICBkYXRhX29mZnNldCA9IDA7Ci0gIH0KLQotICB1aW50MzJfdCBmaXJzdF9zYW1wbGVfZmxhZ3MgPSAwOwotICBpZiAoZmlyc3Rfc2FtcGxlX2ZsYWdzX3ByZXNlbnQpIFJDSEVDSyhyZWFkZXItPlJlYWQ0KCZmaXJzdF9zYW1wbGVfZmxhZ3MpKTsKLQotICBpbnQgZmllbGRzID0gc2FtcGxlX2R1cmF0aW9uX3ByZXNlbnQgKyBzYW1wbGVfc2l6ZV9wcmVzZW50ICsKLSAgICAgICAgICAgICAgIHNhbXBsZV9mbGFnc19wcmVzZW50ICsgc2FtcGxlX2NvbXBvc2l0aW9uX3RpbWVfb2Zmc2V0c19wcmVzZW50OwotICBSQ0hFQ0socmVhZGVyLT5IYXNCeXRlcyhmaWVsZHMgKiBzYW1wbGVfY291bnQpKTsKLQotICBpZiAoc2FtcGxlX2R1cmF0aW9uX3ByZXNlbnQpIHNhbXBsZV9kdXJhdGlvbnMucmVzaXplKHNhbXBsZV9jb3VudCk7Ci0gIGlmIChzYW1wbGVfc2l6ZV9wcmVzZW50KSBzYW1wbGVfc2l6ZXMucmVzaXplKHNhbXBsZV9jb3VudCk7Ci0gIGlmIChzYW1wbGVfZmxhZ3NfcHJlc2VudCkgc2FtcGxlX2ZsYWdzLnJlc2l6ZShzYW1wbGVfY291bnQpOwotICBpZiAoc2FtcGxlX2NvbXBvc2l0aW9uX3RpbWVfb2Zmc2V0c19wcmVzZW50KQotICAgIHNhbXBsZV9jb21wb3NpdGlvbl90aW1lX29mZnNldHMucmVzaXplKHNhbXBsZV9jb3VudCk7Ci0KLSAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNhbXBsZV9jb3VudDsgKytpKSB7Ci0gICAgaWYgKHNhbXBsZV9kdXJhdGlvbl9wcmVzZW50KSBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmc2FtcGxlX2R1cmF0aW9uc1tpXSkpOwotICAgIGlmIChzYW1wbGVfc2l6ZV9wcmVzZW50KSBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmc2FtcGxlX3NpemVzW2ldKSk7Ci0gICAgaWYgKHNhbXBsZV9mbGFnc19wcmVzZW50KSBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmc2FtcGxlX2ZsYWdzW2ldKSk7Ci0gICAgaWYgKHNhbXBsZV9jb21wb3NpdGlvbl90aW1lX29mZnNldHNfcHJlc2VudCkKLSAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWQ0cygmc2FtcGxlX2NvbXBvc2l0aW9uX3RpbWVfb2Zmc2V0c1tpXSkpOwotICB9Ci0KLSAgaWYgKGZpcnN0X3NhbXBsZV9mbGFnc19wcmVzZW50KSB7Ci0gICAgaWYgKHNhbXBsZV9mbGFncy5zaXplKCkgPT0gMCkgewotICAgICAgc2FtcGxlX2ZsYWdzLnB1c2hfYmFjayhmaXJzdF9zYW1wbGVfZmxhZ3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzYW1wbGVfZmxhZ3NbMF0gPSBmaXJzdF9zYW1wbGVfZmxhZ3M7Ci0gICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1TYW1wbGVUb0dyb3VwOjpTYW1wbGVUb0dyb3VwKCkgOiBncm91cGluZ190eXBlKDApLCBncm91cGluZ190eXBlX3BhcmFtZXRlcigwKSB7fQotU2FtcGxlVG9Hcm91cDo6flNhbXBsZVRvR3JvdXAoKSB7fQotRm91ckNDIFNhbXBsZVRvR3JvdXA6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfU0JHUDsgfQotCi1ib29sIFNhbXBsZVRvR3JvdXA6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkgJiYgcmVhZGVyLT5SZWFkNCgmZ3JvdXBpbmdfdHlwZSkpOwotCi0gIGlmIChyZWFkZXItPnZlcnNpb24oKSA9PSAxKSBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmZ3JvdXBpbmdfdHlwZV9wYXJhbWV0ZXIpKTsKLQotICBpZiAoZ3JvdXBpbmdfdHlwZSAhPSBGT1VSQ0NfU0VJRykgewotICAgIERMT0coV0FSTklORykgPDwgIlNhbXBsZVRvR3JvdXAgYm94IHdpdGggZ3JvdXBpbmdfdHlwZSAnIiA8PCBncm91cGluZ190eXBlCi0gICAgICAgICAgICAgICAgICA8PCAiJyBpcyBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB1aW50MzJfdCBjb3VudDsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmNvdW50KSk7Ci0gIGVudHJpZXMucmVzaXplKGNvdW50KTsKLSAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmZW50cmllc1tpXS5zYW1wbGVfY291bnQpICYmCi0gICAgICAgICAgIHJlYWRlci0+UmVhZDQoJmVudHJpZXNbaV0uZ3JvdXBfZGVzY3JpcHRpb25faW5kZXgpKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotQ2VuY1NhbXBsZUVuY3J5cHRpb25JbmZvRW50cnk6OkNlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KCkKLSAgICA6IGlzX2VuY3J5cHRlZChmYWxzZSksCi0gICAgICBpdl9zaXplKDApLAotICAgICAgY3J5cHRfYnl0ZV9ibG9jaygwKSwKLSAgICAgIHNraXBfYnl0ZV9ibG9jaygwKSwKLSAgICAgIGNvbnN0YW50X2l2X3NpemUoMCkge30KLUNlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5Ojp+Q2VuY1NhbXBsZUVuY3J5cHRpb25JbmZvRW50cnkoKSB7fQotCi1ib29sIENlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICB1aW50OF90IGZsYWc7Ci0gIHVpbnQ4X3QgcG9zc2libGVfcGF0dGVybl9pbmZvOwotICBSQ0hFQ0socmVhZGVyLT5Ta2lwQnl0ZXMoMSkgJiYgIC8vIHJlc2VydmVkLgotICAgICAgICAgcmVhZGVyLT5SZWFkMSgmcG9zc2libGVfcGF0dGVybl9pbmZvKSAmJiByZWFkZXItPlJlYWQxKCZmbGFnKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkMSgmaXZfc2l6ZSkgJiYgcmVhZGVyLT5SZWFkVmVjKCZrZXlfaWQsIGtLZXlJZFNpemUpKTsKLQotICBpc19lbmNyeXB0ZWQgPSAoZmxhZyAhPSAwKTsKLSAgaWYgKGlzX2VuY3J5cHRlZCkgewotICAgIGNyeXB0X2J5dGVfYmxvY2sgPSAocG9zc2libGVfcGF0dGVybl9pbmZvID4+IDQpICYgMHgwZjsKLSAgICBza2lwX2J5dGVfYmxvY2sgPSBwb3NzaWJsZV9wYXR0ZXJuX2luZm8gJiAweDBmOwotICAgIGlmIChpdl9zaXplID09IDApIHsKLSAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWQxKCZjb25zdGFudF9pdl9zaXplKSk7Ci0gICAgICBSQ0hFQ0soY29uc3RhbnRfaXZfc2l6ZSA9PSA4IHx8IGNvbnN0YW50X2l2X3NpemUgPT0gMTYpOwotICAgICAgbWVtc2V0KGNvbnN0YW50X2l2LCAwLCBzaXplb2YoY29uc3RhbnRfaXYpKTsKLSAgICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IGNvbnN0YW50X2l2X3NpemU7IGkrKykKLSAgICAgICAgUkNIRUNLKHJlYWRlci0+UmVhZDEoY29uc3RhbnRfaXYgKyBpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFJDSEVDSyhpdl9zaXplID09IDggfHwgaXZfc2l6ZSA9PSAxNik7Ci0gICAgfQotICB9IGVsc2UgewotICAgIFJDSEVDSyhpdl9zaXplID09IDApOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1TYW1wbGVHcm91cERlc2NyaXB0aW9uOjpTYW1wbGVHcm91cERlc2NyaXB0aW9uKCkgOiBncm91cGluZ190eXBlKDApIHt9Ci1TYW1wbGVHcm91cERlc2NyaXB0aW9uOjp+U2FtcGxlR3JvdXBEZXNjcmlwdGlvbigpIHt9Ci1Gb3VyQ0MgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbjo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19TR1BEOyB9Ci0KLWJvb2wgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbjo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQ0KCZncm91cGluZ190eXBlKSk7Ci0KLSAgaWYgKGdyb3VwaW5nX3R5cGUgIT0gRk9VUkNDX1NFSUcpIHsKLSAgICBETE9HKFdBUk5JTkcpIDw8ICJTYW1wbGVHcm91cERlc2NyaXB0aW9uIGJveCB3aXRoIGdyb3VwaW5nX3R5cGUgJyIKLSAgICAgICAgICAgICAgICAgIDw8IGdyb3VwaW5nX3R5cGUgPDwgIicgaXMgbm90IHN1cHBvcnRlZC4iOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgY29uc3QgdWludDhfdCB2ZXJzaW9uID0gcmVhZGVyLT52ZXJzaW9uKCk7Ci0KLSAgY29uc3Qgc2l6ZV90IGtFbnRyeVNpemUgPSBzaXplb2YodWludDMyX3QpICsga0tleUlkU2l6ZTsKLSAgdWludDMyX3QgZGVmYXVsdF9sZW5ndGggPSAwOwotICBpZiAodmVyc2lvbiA9PSAxKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmRlZmF1bHRfbGVuZ3RoKSk7Ci0gICAgUkNIRUNLKGRlZmF1bHRfbGVuZ3RoID09IDAgfHwgZGVmYXVsdF9sZW5ndGggPj0ga0VudHJ5U2l6ZSk7Ci0gIH0KLQotICB1aW50MzJfdCBjb3VudDsKLSAgUkNIRUNLKHJlYWRlci0+UmVhZDQoJmNvdW50KSk7Ci0gIGVudHJpZXMucmVzaXplKGNvdW50KTsKLSAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICBpZiAodmVyc2lvbiA9PSAxKSB7Ci0gICAgICBpZiAoZGVmYXVsdF9sZW5ndGggPT0gMCkgewotICAgICAgICB1aW50MzJfdCBkZXNjcmlwdGlvbl9sZW5ndGggPSAwOwotICAgICAgICBSQ0hFQ0socmVhZGVyLT5SZWFkNCgmZGVzY3JpcHRpb25fbGVuZ3RoKSk7Ci0gICAgICAgIFJDSEVDSyhkZXNjcmlwdGlvbl9sZW5ndGggPj0ga0VudHJ5U2l6ZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIFJDSEVDSyhlbnRyaWVzW2ldLlBhcnNlKHJlYWRlcikpOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1UcmFja0ZyYWdtZW50OjpUcmFja0ZyYWdtZW50KCkge30KLVRyYWNrRnJhZ21lbnQ6On5UcmFja0ZyYWdtZW50KCkge30KLUZvdXJDQyBUcmFja0ZyYWdtZW50OjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX1RSQUY7IH0KLQotYm9vbCBUcmFja0ZyYWdtZW50OjpQYXJzZShCb3hSZWFkZXIqIHJlYWRlcikgewotICBSQ0hFQ0socmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZCgmaGVhZGVyKSAmJgotICAgICAgICAgLy8gTWVkaWEgU291cmNlIHNwZWNpZmljOiAndGZkdCcgcmVxdWlyZWQKLSAgICAgICAgIHJlYWRlci0+UmVhZENoaWxkKCZkZWNvZGVfdGltZSkgJiYgcmVhZGVyLT5NYXliZVJlYWRDaGlsZHJlbigmcnVucykgJiYKLSAgICAgICAgIHJlYWRlci0+TWF5YmVSZWFkQ2hpbGQoJmF1eGlsaWFyeV9vZmZzZXQpICYmCi0gICAgICAgICByZWFkZXItPk1heWJlUmVhZENoaWxkKCZhdXhpbGlhcnlfc2l6ZSkgJiYKLSAgICAgICAgIHJlYWRlci0+TWF5YmVSZWFkQ2hpbGQoJnNkdHApICYmCi0gICAgICAgICByZWFkZXItPk1heWJlUmVhZENoaWxkKCZzYW1wbGVfZW5jcnlwdGlvbikpOwotCi0gIC8vIFRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIFNhbXBsZUdyb3VwRGVzY3JpcHRpb24gYW5kIFNhbXBsZVRvR3JvdXAgYm94ZXMgd2l0aAotICAvLyBkaWZmZXJlbnQgZ3JvdXBpbmcgdHlwZXMuIEZvciBjb21tb24gZW5jcnlwdGlvbiwgdGhlIHJlbGV2YW50IGdyb3VwaW5nIHR5cGUKLSAgLy8gaXMgJ3NlaWcnLiBDb250aW51ZSByZWFkaW5nIHVudGlsICdzZWlnJyBpcyBmb3VuZCwgb3IgdW50aWwgcnVubmluZyBvdXQgb2YKLSAgLy8gY2hpbGQgYm94ZXMuCi0gIHdoaWxlIChyZWFkZXItPkhhc0NoaWxkKCZzYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24pKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZENoaWxkKCZzYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24pKTsKLSAgICBpZiAoc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uLmdyb3VwaW5nX3R5cGUgPT0gRk9VUkNDX1NFSUcpIGJyZWFrOwotICAgIHNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzLmNsZWFyKCk7Ci0gIH0KLSAgd2hpbGUgKHJlYWRlci0+SGFzQ2hpbGQoJnNhbXBsZV90b19ncm91cCkpIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkQ2hpbGQoJnNhbXBsZV90b19ncm91cCkpOwotICAgIGlmIChzYW1wbGVfdG9fZ3JvdXAuZ3JvdXBpbmdfdHlwZSA9PSBGT1VSQ0NfU0VJRykgYnJlYWs7Ci0gICAgc2FtcGxlX3RvX2dyb3VwLmVudHJpZXMuY2xlYXIoKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotTW92aWVGcmFnbWVudDo6TW92aWVGcmFnbWVudCgpIHt9Ci1Nb3ZpZUZyYWdtZW50Ojp+TW92aWVGcmFnbWVudCgpIHt9Ci1Gb3VyQ0MgTW92aWVGcmFnbWVudDo6Qm94VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEZPVVJDQ19NT09GOyB9Ci0KLWJvb2wgTW92aWVGcmFnbWVudDo6UGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIHsKLSAgUkNIRUNLKHJlYWRlci0+U2NhbkNoaWxkcmVuKCkgJiYgcmVhZGVyLT5SZWFkQ2hpbGQoJmhlYWRlcikgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZENoaWxkcmVuKCZ0cmFja3MpICYmIHJlYWRlci0+TWF5YmVSZWFkQ2hpbGRyZW4oJnBzc2gpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUluZGVwZW5kZW50QW5kRGlzcG9zYWJsZVNhbXBsZXM6OkluZGVwZW5kZW50QW5kRGlzcG9zYWJsZVNhbXBsZXMoKSB7fQotSW5kZXBlbmRlbnRBbmREaXNwb3NhYmxlU2FtcGxlczo6fkluZGVwZW5kZW50QW5kRGlzcG9zYWJsZVNhbXBsZXMoKSB7fQotRm91ckNDIEluZGVwZW5kZW50QW5kRGlzcG9zYWJsZVNhbXBsZXM6OkJveFR5cGUoKSBjb25zdCB7IHJldHVybiBGT1VSQ0NfU0RUUDsgfQotCi1ib29sIEluZGVwZW5kZW50QW5kRGlzcG9zYWJsZVNhbXBsZXM6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRGdWxsQm94SGVhZGVyKCkpOwotICBSQ0hFQ0socmVhZGVyLT52ZXJzaW9uKCkgPT0gMCk7Ci0gIFJDSEVDSyhyZWFkZXItPmZsYWdzKCkgPT0gMCk7Ci0KLSAgaW50IHNhbXBsZV9jb3VudCA9IHJlYWRlci0+c2l6ZSgpIC0gcmVhZGVyLT5wb3MoKTsKLSAgc2FtcGxlX2RlcGVuZHNfb25fLnJlc2l6ZShzYW1wbGVfY291bnQpOwotICBmb3IgKGludCBpID0gMDsgaSA8IHNhbXBsZV9jb3VudDsgKytpKSB7Ci0gICAgdWludDhfdCBzYW1wbGVfaW5mbzsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmc2FtcGxlX2luZm8pKTsKLQotICAgIHNhbXBsZV9kZXBlbmRzX29uX1tpXSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PFNhbXBsZURlcGVuZHNPbj4oKHNhbXBsZV9pbmZvID4+IDQpICYgMHgzKTsKLQotICAgIFJDSEVDSyhzYW1wbGVfZGVwZW5kc19vbl9baV0gIT0ga1NhbXBsZURlcGVuZHNPblJlc2VydmVkKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1TYW1wbGVEZXBlbmRzT24gSW5kZXBlbmRlbnRBbmREaXNwb3NhYmxlU2FtcGxlczo6c2FtcGxlX2RlcGVuZHNfb24oCi0gICAgc2l6ZV90IGkpIGNvbnN0IHsKLSAgaWYgKGkgPj0gc2FtcGxlX2RlcGVuZHNfb25fLnNpemUoKSkgcmV0dXJuIGtTYW1wbGVEZXBlbmRzT25Vbmtub3duOwotCi0gIHJldHVybiBzYW1wbGVfZGVwZW5kc19vbl9baV07Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODg1ZGYyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0JPWF9ERUZJTklUSU9OU19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfQk9YX0RFRklOSVRJT05TX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImJhc2Uvb3B0aW9uYWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYXZjLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZm91cmNjcy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXA0IHsKLQotLy8gU2l6ZSBpbiBieXRlcyBuZWVkZWQgdG8gc3RvcmUgbGFyZ2VzdCBJVi4KLWNvbnN0IGludCBrSW5pdGlhbGl6YXRpb25WZWN0b3JTaXplID0gMTY7Ci0KLWVudW0gVHJhY2tUeXBlIHsga0ludmFsaWQgPSAwLCBrVmlkZW8sIGtBdWRpbywga1RleHQsIGtIaW50IH07Ci0KLWVudW0gU2FtcGxlRmxhZ3MgeyBrU2FtcGxlSXNOb25TeW5jU2FtcGxlID0gMHgxMDAwMCB9OwotCi0jZGVmaW5lIERFQ0xBUkVfQk9YX01FVEhPRFMoVCkgICAgICAgICAgICBcCi0gIFQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH5UKCkgb3ZlcnJpZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGJvb2wgUGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIG92ZXJyaWRlOyBcCi0gIEZvdXJDQyBCb3hUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgRmlsZVR5cGUgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKEZpbGVUeXBlKTsKLQotICBGb3VyQ0MgbWFqb3JfYnJhbmQ7Ci0gIHVpbnQzMl90IG1pbm9yX3ZlcnNpb247Ci19OwotCi0vLyBJZiBvbmx5IGNvcHlpbmcgdGhlICdwc3NoJyBib3hlcywgdXNlIFByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlci4KLS8vIElmIGFjY2VzcyB0byB0aGUgaW5kaXZpZHVhbCBmaWVsZHMgaXMgbmVlZGVkLCB1c2UKLS8vIEZ1bGxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXIuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFByb3RlY3Rpb25TeXN0ZW1TcGVjaWZpY0hlYWRlciA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyKTsKLQotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiByYXdfYm94OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBGdWxsUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhGdWxsUHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyKTsKLQotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBzeXN0ZW1faWQ7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+ID4ga2V5X2lkczsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGF0YTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFNhbXBsZUF1eGlsaWFyeUluZm9ybWF0aW9uT2Zmc2V0KTsKLQotICBzdGQ6OnZlY3Rvcjx1aW50NjRfdD4gb2Zmc2V0czsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25TaXplIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTYW1wbGVBdXhpbGlhcnlJbmZvcm1hdGlvblNpemUpOwotCi0gIHVpbnQ4X3QgZGVmYXVsdF9zYW1wbGVfaW5mb19zaXplOwotICB1aW50MzJfdCBzYW1wbGVfY291bnQ7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHNhbXBsZV9pbmZvX3NpemVzOwotfTsKLQotLy8gUmVwcmVzZW50IGFuIGVudHJ5IGluIFNhbXBsZUVuY3J5cHRpb24gYm94IG9yIENFTkMgYXV4aWxpYXJ5IGluZm8uCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFNhbXBsZUVuY3J5cHRpb25FbnRyeSB7Ci0gIFNhbXBsZUVuY3J5cHRpb25FbnRyeSgpOwotICB+U2FtcGxlRW5jcnlwdGlvbkVudHJ5KCk7Ci0KLSAgLy8gUGFyc2UgU2FtcGxlRW5jcnlwdGlvbkVudHJ5IGZyb20gfHJlYWRlcnwuCi0gIC8vIHxpdl9zaXplfCBzcGVjaWZpZXMgdGhlIHNpemUgb2YgaW5pdGlhbGl6YXRpb24gdmVjdG9yLiB8aGFzX3N1YnNhbXBsZXN8Ci0gIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgc2FtcGxlIGVuY3J5cHRpb24gZW50cnkgY29udGFpbnMgc3Vic2FtcGxlcy4KLSAgLy8gUmV0dXJucyBmYWxzZSBpZiBwYXJzaW5nIGZhaWxzLgotICBib29sIFBhcnNlKEJ1ZmZlclJlYWRlciogcmVhZGVyLCB1aW50OF90IGl2X3NpemUsIGJvb2wgaGFzX3N1YnNhbXBsZXMpOwotCi0gIC8vIEdldCBhY2N1bXVsYXRlZCBzaXplIG9mIHN1YnNhbXBsZXMuIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cKLSAgLy8gYW55d2hlcmUuCi0gIGJvb2wgR2V0VG90YWxTaXplT2ZTdWJzYW1wbGVzKHNpemVfdCogdG90YWxfc2l6ZSkgY29uc3Q7Ci0KLSAgdWludDhfdCBpbml0aWFsaXphdGlvbl92ZWN0b3Jba0luaXRpYWxpemF0aW9uVmVjdG9yU2l6ZV07Ci0gIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiBzdWJzYW1wbGVzOwotfTsKLQotLy8gSVNPL0lFQyAyMzAwMS03OjIwMTUgOC4xLjEuCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFNhbXBsZUVuY3J5cHRpb24gOiBCb3ggewotICBlbnVtIFNhbXBsZUVuY3J5cHRpb25GbGFncyB7Ci0gICAga1VzZVN1YnNhbXBsZUVuY3J5cHRpb24gPSAyLAotICB9OwotCi0gIERFQ0xBUkVfQk9YX01FVEhPRFMoU2FtcGxlRW5jcnlwdGlvbik7Ci0KLSAgYm9vbCB1c2Vfc3Vic2FtcGxlX2VuY3J5cHRpb247Ci0gIC8vIFdlIG1heSBub3Qga25vdyB8aXZfc2l6ZXwgYmVmb3JlIHJlYWRpbmcgdGhpcyBib3gsIHNvIHdlIHN0b3JlIHRoZSBib3gKLSAgLy8gZGF0YSBmb3IgcGFyc2luZyBsYXRlciB3aGVuIHxpdl9zaXplfCBpcyBrbm93bi4KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gc2FtcGxlX2VuY3J5cHRpb25fZGF0YTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgT3JpZ2luYWxGb3JtYXQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE9yaWdpbmFsRm9ybWF0KTsKLQotICBGb3VyQ0MgZm9ybWF0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBTY2hlbWVUeXBlIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTY2hlbWVUeXBlKTsKLQotICBGb3VyQ0MgdHlwZTsKLSAgdWludDMyX3QgdmVyc2lvbjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVHJhY2tFbmNyeXB0aW9uIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhUcmFja0VuY3J5cHRpb24pOwotCi0gIC8vIE5vdGU6IHRoaXMgZGVmaW5pdGlvbiBpcyBzcGVjaWZpYyB0byB0aGUgQ0VOQyBwcm90ZWN0aW9uIHR5cGUuCi0gIGJvb2wgaXNfZW5jcnlwdGVkOwotICB1aW50OF90IGRlZmF1bHRfaXZfc2l6ZTsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZGVmYXVsdF9raWQ7Ci0gIHVpbnQ4X3QgZGVmYXVsdF9jcnlwdF9ieXRlX2Jsb2NrOwotICB1aW50OF90IGRlZmF1bHRfc2tpcF9ieXRlX2Jsb2NrOwotICB1aW50OF90IGRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZTsKLSAgdWludDhfdCBkZWZhdWx0X2NvbnN0YW50X2l2W2tJbml0aWFsaXphdGlvblZlY3RvclNpemVdOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBTY2hlbWVJbmZvIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTY2hlbWVJbmZvKTsKLQotICBUcmFja0VuY3J5cHRpb24gdHJhY2tfZW5jcnlwdGlvbjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgUHJvdGVjdGlvblNjaGVtZUluZm8gOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFByb3RlY3Rpb25TY2hlbWVJbmZvKTsKLQotICBPcmlnaW5hbEZvcm1hdCBmb3JtYXQ7Ci0gIFNjaGVtZVR5cGUgdHlwZTsKLSAgU2NoZW1lSW5mbyBpbmZvOwotCi0gIGJvb2wgSGFzU3VwcG9ydGVkU2NoZW1lKCkgY29uc3Q7Ci0gIGJvb2wgSXNDYmNzRW5jcnlwdGlvblNjaGVtZSgpIGNvbnN0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBNb3ZpZUhlYWRlciA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoTW92aWVIZWFkZXIpOwotCi0gIHVpbnQ4X3QgdmVyc2lvbjsKLSAgdWludDY0X3QgY3JlYXRpb25fdGltZTsKLSAgdWludDY0X3QgbW9kaWZpY2F0aW9uX3RpbWU7Ci0gIHVpbnQzMl90IHRpbWVzY2FsZTsKLSAgdWludDY0X3QgZHVyYXRpb247Ci0gIGludDMyX3QgcmF0ZTsKLSAgaW50MTZfdCB2b2x1bWU7Ci0gIHVpbnQzMl90IG5leHRfdHJhY2tfaWQ7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFRyYWNrSGVhZGVyIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhUcmFja0hlYWRlcik7Ci0KLSAgdWludDY0X3QgY3JlYXRpb25fdGltZTsKLSAgdWludDY0X3QgbW9kaWZpY2F0aW9uX3RpbWU7Ci0gIHVpbnQzMl90IHRyYWNrX2lkOwotICB1aW50NjRfdCBkdXJhdGlvbjsKLSAgaW50MTZfdCBsYXllcjsKLSAgaW50MTZfdCBhbHRlcm5hdGVfZ3JvdXA7Ci0gIGludDE2X3Qgdm9sdW1lOwotICB1aW50MzJfdCB3aWR0aDsKLSAgdWludDMyX3QgaGVpZ2h0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBFZGl0TGlzdEVudHJ5IHsKLSAgdWludDY0X3Qgc2VnbWVudF9kdXJhdGlvbjsKLSAgaW50NjRfdCBtZWRpYV90aW1lOwotICBpbnQxNl90IG1lZGlhX3JhdGVfaW50ZWdlcjsKLSAgaW50MTZfdCBtZWRpYV9yYXRlX2ZyYWN0aW9uOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBFZGl0TGlzdCA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoRWRpdExpc3QpOwotCi0gIHN0ZDo6dmVjdG9yPEVkaXRMaXN0RW50cnk+IGVkaXRzOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBFZGl0IDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhFZGl0KTsKLQotICBFZGl0TGlzdCBsaXN0OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBIYW5kbGVyUmVmZXJlbmNlIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhIYW5kbGVyUmVmZXJlbmNlKTsKLQotICBUcmFja1R5cGUgdHlwZTsKLSAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKTsKLQotICAvLyBQYXJzZXMgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgZGF0YSBlbmNvZGVkIGluIHxkYXRhfC4KLSAgLy8gTm90ZTogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcGFyc2UgZGF0YSBvdXRzaWRlIHRoZSBNUDRTdHJlYW1QYXJzZXIKLSAgLy8gICAgICAgY29udGV4dCBhbmQgdGhlcmVmb3JlIHRoZSBib3ggaGVhZGVyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBwcmVzZW50Ci0gIC8vICAgICAgIGluIHxkYXRhfC4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxkYXRhfCB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAgYm9vbCBQYXJzZShjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplKTsKLQotICB1aW50OF90IHZlcnNpb247Ci0gIHVpbnQ4X3QgcHJvZmlsZV9pbmRpY2F0aW9uOwotICB1aW50OF90IHByb2ZpbGVfY29tcGF0aWJpbGl0eTsKLSAgdWludDhfdCBhdmNfbGV2ZWw7Ci0gIHVpbnQ4X3QgbGVuZ3RoX3NpemU7Ci0KLSAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjx1aW50OF90PiBTUFM7Ci0gIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dWludDhfdD4gUFBTOwotCi0gIHN0ZDo6dmVjdG9yPFNQUz4gc3BzX2xpc3Q7Ci0gIHN0ZDo6dmVjdG9yPFBQUz4gcHBzX2xpc3Q7Ci0KLSBwcml2YXRlOgotICBib29sIFBhcnNlSW50ZXJuYWwoQnVmZmVyUmVhZGVyKiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKTsKLQotICBWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBBVjFDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKEFWMUNvZGVjQ29uZmlndXJhdGlvblJlY29yZCk7Ci0KLSAgVmlkZW9Db2RlY1Byb2ZpbGUgcHJvZmlsZTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgUGl4ZWxBc3BlY3RSYXRpb0JveCA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoUGl4ZWxBc3BlY3RSYXRpb0JveCk7Ci0KLSAgdWludDMyX3QgaF9zcGFjaW5nOwotICB1aW50MzJfdCB2X3NwYWNpbmc7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIENvbG9yUGFyYW1ldGVySW5mb3JtYXRpb24gOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKENvbG9yUGFyYW1ldGVySW5mb3JtYXRpb24pOwotCi0gIHVpbnQxNiBjb2xvdXJfcHJpbWFyaWVzOwotICB1aW50MTYgdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzOwotICB1aW50MTYgbWF0cml4X2NvZWZmaWNpZW50czsKLSAgYm9vbCBmdWxsX3JhbmdlOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBNYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWUgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE1hc3RlcmluZ0Rpc3BsYXlDb2xvclZvbHVtZSk7Ci0KLSAgZmxvYXQgZGlzcGxheV9wcmltYXJpZXNfZ3g7Ci0gIGZsb2F0IGRpc3BsYXlfcHJpbWFyaWVzX2d5OwotICBmbG9hdCBkaXNwbGF5X3ByaW1hcmllc19ieDsKLSAgZmxvYXQgZGlzcGxheV9wcmltYXJpZXNfYnk7Ci0gIGZsb2F0IGRpc3BsYXlfcHJpbWFyaWVzX3J4OwotICBmbG9hdCBkaXNwbGF5X3ByaW1hcmllc19yeTsKLSAgZmxvYXQgd2hpdGVfcG9pbnRfeDsKLSAgZmxvYXQgd2hpdGVfcG9pbnRfeTsKLSAgdWludDMyIG1heF9kaXNwbGF5X21hc3RlcmluZ19sdW1pbmFuY2U7Ci0gIHVpbnQzMiBtaW5fZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBDb250ZW50TGlnaHRMZXZlbEluZm9ybWF0aW9uIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhDb250ZW50TGlnaHRMZXZlbEluZm9ybWF0aW9uKTsKLQotICB1aW50MTYgbWF4X2NvbnRlbnRfbGlnaHRfbGV2ZWw7Ci0gIHVpbnQxNiBtYXhfcGljX2F2ZXJhZ2VfbGlnaHRfbGV2ZWw7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFZpZGVvU2FtcGxlRW50cnkgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFZpZGVvU2FtcGxlRW50cnkpOwotCi0gIEZvdXJDQyBmb3JtYXQ7Ci0gIHVpbnQxNl90IGRhdGFfcmVmZXJlbmNlX2luZGV4OwotICB1aW50MTZfdCB3aWR0aDsKLSAgdWludDE2X3QgaGVpZ2h0OwotCi0gIFBpeGVsQXNwZWN0UmF0aW9Cb3ggcGl4ZWxfYXNwZWN0OwotICBQcm90ZWN0aW9uU2NoZW1lSW5mbyBzaW5mOwotCi0gIFZpZGVvQ29kZWMgdmlkZW9fY29kZWM7Ci0gIFZpZGVvQ29kZWNQcm9maWxlIHZpZGVvX2NvZGVjX3Byb2ZpbGU7Ci0KLSAgYmFzZTo6T3B0aW9uYWw8Q29sb3JQYXJhbWV0ZXJJbmZvcm1hdGlvbj4gY29sb3JfcGFyYW1ldGVyX2luZm9ybWF0aW9uOwotICBiYXNlOjpPcHRpb25hbDxNYXN0ZXJpbmdEaXNwbGF5Q29sb3JWb2x1bWU+IG1hc3RlcmluZ19kaXNwbGF5X2NvbG9yX3ZvbHVtZTsKLSAgYmFzZTo6T3B0aW9uYWw8Q29udGVudExpZ2h0TGV2ZWxJbmZvcm1hdGlvbj4gY29udGVudF9saWdodF9sZXZlbF9pbmZvcm1hdGlvbjsKLQotICBib29sIElzRm9ybWF0VmFsaWQoKSBjb25zdDsKLQotICBzY29wZWRfcmVmcHRyPEJpdHN0cmVhbUNvbnZlcnRlcj4gZnJhbWVfYml0c3RyZWFtX2NvbnZlcnRlcjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgRWxlbWVudGFyeVN0cmVhbURlc2NyaXB0b3IgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKEVsZW1lbnRhcnlTdHJlYW1EZXNjcmlwdG9yKTsKLQotICB1aW50OF90IG9iamVjdF90eXBlOwotICBBQUMgYWFjOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBBdWRpb1NhbXBsZUVudHJ5IDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhBdWRpb1NhbXBsZUVudHJ5KTsKLQotICBGb3VyQ0MgZm9ybWF0OwotICB1aW50MTZfdCBkYXRhX3JlZmVyZW5jZV9pbmRleDsKLSAgdWludDE2X3QgY2hhbm5lbGNvdW50OwotICB1aW50MTZfdCBzYW1wbGVzaXplOwotICB1aW50MzJfdCBzYW1wbGVyYXRlOwotCi0gIFByb3RlY3Rpb25TY2hlbWVJbmZvIHNpbmY7Ci0gIEVsZW1lbnRhcnlTdHJlYW1EZXNjcmlwdG9yIGVzZHM7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFNhbXBsZURlc2NyaXB0aW9uIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTYW1wbGVEZXNjcmlwdGlvbik7Ci0KLSAgVHJhY2tUeXBlIHR5cGU7Ci0gIHN0ZDo6dmVjdG9yPFZpZGVvU2FtcGxlRW50cnk+IHZpZGVvX2VudHJpZXM7Ci0gIHN0ZDo6dmVjdG9yPEF1ZGlvU2FtcGxlRW50cnk+IGF1ZGlvX2VudHJpZXM7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIENlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5IHsKLSAgQ2VuY1NhbXBsZUVuY3J5cHRpb25JbmZvRW50cnkoKTsKLSAgfkNlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KCk7Ci0gIGJvb2wgUGFyc2UoQm94UmVhZGVyKiByZWFkZXIpOwotCi0gIGJvb2wgaXNfZW5jcnlwdGVkOwotICB1aW50OF90IGl2X3NpemU7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGtleV9pZDsKLSAgdWludDhfdCBjcnlwdF9ieXRlX2Jsb2NrOwotICB1aW50OF90IHNraXBfYnl0ZV9ibG9jazsKLSAgdWludDhfdCBjb25zdGFudF9pdl9zaXplOwotICB1aW50OF90IGNvbnN0YW50X2l2W2tJbml0aWFsaXphdGlvblZlY3RvclNpemVdOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBTYW1wbGVHcm91cERlc2NyaXB0aW9uIDogQm94IHsgIC8vICdzZ3BkJy4KLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTYW1wbGVHcm91cERlc2NyaXB0aW9uKTsKLQotICB1aW50MzJfdCBncm91cGluZ190eXBlOwotICBzdGQ6OnZlY3RvcjxDZW5jU2FtcGxlRW5jcnlwdGlvbkluZm9FbnRyeT4gZW50cmllczsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgU2FtcGxlVGFibGUgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFNhbXBsZVRhYmxlKTsKLQotICAvLyBNZWRpYSBTb3VyY2Ugc3BlY2lmaWM6IHdlIGlnbm9yZSBtYW55IG9mIHRoZSBzdWItYm94ZXMgaW4gdGhpcyBib3gsCi0gIC8vIGluY2x1ZGluZyBzb21lIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgaW4gdGhlIEJNRkYgc3BlYy4gVGhpcwotICAvLyBpbmNsdWRlcyB0aGUgJ3N0dHMnLCAnc3RzYycsIGFuZCAnc3RjbycgYm94ZXMsIHdoaWNoIG11c3QgY29udGFpbiBubwotICAvLyBzYW1wbGVzIGluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCBmaWxlcy4KLSAgU2FtcGxlRGVzY3JpcHRpb24gZGVzY3JpcHRpb247Ci0gIFNhbXBsZUdyb3VwRGVzY3JpcHRpb24gc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBNZWRpYUhlYWRlciA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoTWVkaWFIZWFkZXIpOwotCi0gIHN0ZDo6c3RyaW5nIGxhbmd1YWdlKCkgY29uc3Q7Ci0KLSAgdWludDY0X3QgY3JlYXRpb25fdGltZTsKLSAgdWludDY0X3QgbW9kaWZpY2F0aW9uX3RpbWU7Ci0gIHVpbnQzMl90IHRpbWVzY2FsZTsKLSAgdWludDY0X3QgZHVyYXRpb247Ci0gIHVpbnQxNl90IGxhbmd1YWdlX2NvZGU7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIE1lZGlhSW5mb3JtYXRpb24gOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE1lZGlhSW5mb3JtYXRpb24pOwotCi0gIFNhbXBsZVRhYmxlIHNhbXBsZV90YWJsZTsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgTWVkaWEgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE1lZGlhKTsKLQotICBNZWRpYUhlYWRlciBoZWFkZXI7Ci0gIEhhbmRsZXJSZWZlcmVuY2UgaGFuZGxlcjsKLSAgTWVkaWFJbmZvcm1hdGlvbiBpbmZvcm1hdGlvbjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVHJhY2sgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFRyYWNrKTsKLQotICBUcmFja0hlYWRlciBoZWFkZXI7Ci0gIE1lZGlhIG1lZGlhOwotICBFZGl0IGVkaXQ7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIE1vdmllRXh0ZW5kc0hlYWRlciA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoTW92aWVFeHRlbmRzSGVhZGVyKTsKLQotICB1aW50NjRfdCBmcmFnbWVudF9kdXJhdGlvbjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVHJhY2tFeHRlbmRzIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhUcmFja0V4dGVuZHMpOwotCi0gIHVpbnQzMl90IHRyYWNrX2lkOwotICB1aW50MzJfdCBkZWZhdWx0X3NhbXBsZV9kZXNjcmlwdGlvbl9pbmRleDsKLSAgdWludDMyX3QgZGVmYXVsdF9zYW1wbGVfZHVyYXRpb247Ci0gIHVpbnQzMl90IGRlZmF1bHRfc2FtcGxlX3NpemU7Ci0gIHVpbnQzMl90IGRlZmF1bHRfc2FtcGxlX2ZsYWdzOwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBNb3ZpZUV4dGVuZHMgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE1vdmllRXh0ZW5kcyk7Ci0KLSAgTW92aWVFeHRlbmRzSGVhZGVyIGhlYWRlcjsKLSAgc3RkOjp2ZWN0b3I8VHJhY2tFeHRlbmRzPiB0cmFja3M7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIE1vdmllIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhNb3ZpZSk7Ci0KLSAgYm9vbCBmcmFnbWVudGVkOwotICBNb3ZpZUhlYWRlciBoZWFkZXI7Ci0gIE1vdmllRXh0ZW5kcyBleHRlbmRzOwotICBzdGQ6OnZlY3RvcjxUcmFjaz4gdHJhY2tzOwotICBzdGQ6OnZlY3RvcjxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI+IHBzc2g7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFRyYWNrRnJhZ21lbnREZWNvZGVUaW1lIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhUcmFja0ZyYWdtZW50RGVjb2RlVGltZSk7Ci0KLSAgdWludDY0X3QgZGVjb2RlX3RpbWU7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIE1vdmllRnJhZ21lbnRIZWFkZXIgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKE1vdmllRnJhZ21lbnRIZWFkZXIpOwotCi0gIHVpbnQzMl90IHNlcXVlbmNlX251bWJlcjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVHJhY2tGcmFnbWVudEhlYWRlciA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoVHJhY2tGcmFnbWVudEhlYWRlcik7Ci0KLSAgdWludDMyX3QgdHJhY2tfaWQ7Ci0KLSAgdWludDMyX3Qgc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4OwotICB1aW50MzJfdCBkZWZhdWx0X3NhbXBsZV9kdXJhdGlvbjsKLSAgdWludDMyX3QgZGVmYXVsdF9zYW1wbGVfc2l6ZTsKLSAgdWludDMyX3QgZGVmYXVsdF9zYW1wbGVfZmxhZ3M7Ci0KLSAgLy8gQXMgJ2ZsYWdzJyBtaWdodCBiZSBhbGwgemVybywgd2UgY2Fubm90IHVzZSB6ZXJvbmVzcyBhbG9uZSB0byBpZGVudGlmeQotICAvLyB3aGVuIGRlZmF1bHRfc2FtcGxlX2ZsYWdzIHdhc24ndCBzcGVjaWZpZWQsIHVubGlrZSB0aGUgb3RoZXIgdmFsdWVzLgotICBib29sIGhhc19kZWZhdWx0X3NhbXBsZV9mbGFnczsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgVHJhY2tGcmFnbWVudFJ1biA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoVHJhY2tGcmFnbWVudFJ1bik7Ci0KLSAgdWludDMyX3Qgc2FtcGxlX2NvdW50OwotICB1aW50MzJfdCBkYXRhX29mZnNldDsKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHNhbXBsZV9mbGFnczsKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHNhbXBsZV9zaXplczsKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHNhbXBsZV9kdXJhdGlvbnM7Ci0gIHN0ZDo6dmVjdG9yPGludDMyX3Q+IHNhbXBsZV9jb21wb3NpdGlvbl90aW1lX29mZnNldHM7Ci19OwotCi0vLyBzYW1wbGVfZGVwZW5kc19vbiB2YWx1ZXMgaW4gSVNPL0lFQyAxNDQ5Ni0xMiBTZWN0aW9uIDguNDAuMi4zLgotZW51bSBTYW1wbGVEZXBlbmRzT24gewotICBrU2FtcGxlRGVwZW5kc09uVW5rbm93biA9IDAsCi0gIGtTYW1wbGVEZXBlbmRzT25PdGhlcnMgPSAxLAotICBrU2FtcGxlRGVwZW5kc09uTm9PdGhlciA9IDIsCi0gIGtTYW1wbGVEZXBlbmRzT25SZXNlcnZlZCA9IDMsCi19OwotCi1jbGFzcyBNRURJQV9FWFBPUlQgSW5kZXBlbmRlbnRBbmREaXNwb3NhYmxlU2FtcGxlcyA6IHB1YmxpYyBCb3ggewotIHB1YmxpYzoKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhJbmRlcGVuZGVudEFuZERpc3Bvc2FibGVTYW1wbGVzKTsKLQotICAvLyBSZXR1cm5zIHRoZSBTYW1wbGVEZXBlbmRzT24gdmFsdWUgZm9yIHRoZSB8aXwndGggdmFsdWUKLSAgLy8gaW4gdGhlIHRyYWNrLiBJZiBubyBkYXRhIHdhcyBwYXJzZWQgZm9yIHRoZSB8aXwndGggc2FtcGxlLAotICAvLyB0aGVuIHxrU2FtcGxlRGVwZW5kc09uVW5rbm93bnwgaXMgcmV0dXJuZWQuCi0gIFNhbXBsZURlcGVuZHNPbiBzYW1wbGVfZGVwZW5kc19vbihzaXplX3QgaSkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBzdGQ6OnZlY3RvcjxTYW1wbGVEZXBlbmRzT24+IHNhbXBsZV9kZXBlbmRzX29uXzsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgU2FtcGxlVG9Hcm91cEVudHJ5IHsKLSAgZW51bSBHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlIHsKLSAgICBrVHJhY2tHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlID0gMCwKLSAgICBrRnJhZ21lbnRHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlID0gMHgxMDAwMCwKLSAgfTsKLQotICB1aW50MzJfdCBzYW1wbGVfY291bnQ7Ci0gIHVpbnQzMl90IGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4OwotfTsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBTYW1wbGVUb0dyb3VwIDogQm94IHsgIC8vICdzYmdwJy4KLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhTYW1wbGVUb0dyb3VwKTsKLQotICB1aW50MzJfdCBncm91cGluZ190eXBlOwotICB1aW50MzJfdCBncm91cGluZ190eXBlX3BhcmFtZXRlcjsgIC8vIFZlcnNpb24gMSBvbmx5LgotICBzdGQ6OnZlY3RvcjxTYW1wbGVUb0dyb3VwRW50cnk+IGVudHJpZXM7Ci19OwotCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFRyYWNrRnJhZ21lbnQgOiBCb3ggewotICBERUNMQVJFX0JPWF9NRVRIT0RTKFRyYWNrRnJhZ21lbnQpOwotCi0gIFRyYWNrRnJhZ21lbnRIZWFkZXIgaGVhZGVyOwotICBzdGQ6OnZlY3RvcjxUcmFja0ZyYWdtZW50UnVuPiBydW5zOwotICBUcmFja0ZyYWdtZW50RGVjb2RlVGltZSBkZWNvZGVfdGltZTsKLSAgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25PZmZzZXQgYXV4aWxpYXJ5X29mZnNldDsKLSAgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb25TaXplIGF1eGlsaWFyeV9zaXplOwotICBJbmRlcGVuZGVudEFuZERpc3Bvc2FibGVTYW1wbGVzIHNkdHA7Ci0gIFNhbXBsZUdyb3VwRGVzY3JpcHRpb24gc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uOwotICBTYW1wbGVUb0dyb3VwIHNhbXBsZV90b19ncm91cDsKLSAgU2FtcGxlRW5jcnlwdGlvbiBzYW1wbGVfZW5jcnlwdGlvbjsKLX07Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgTW92aWVGcmFnbWVudCA6IEJveCB7Ci0gIERFQ0xBUkVfQk9YX01FVEhPRFMoTW92aWVGcmFnbWVudCk7Ci0KLSAgTW92aWVGcmFnbWVudEhlYWRlciBoZWFkZXI7Ci0gIHN0ZDo6dmVjdG9yPFRyYWNrRnJhZ21lbnQ+IHRyYWNrczsKLSAgc3RkOjp2ZWN0b3I8UHJvdGVjdGlvblN5c3RlbVNwZWNpZmljSGVhZGVyPiBwc3NoOwotfTsKLQotI3VuZGVmIERFQ0xBUkVfQk9YCi0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CT1hfREVGSU5JVElPTlNfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfcmVhZGVyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkODNmZTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLUJveDo6fkJveCgpIHt9Ci0KLWJvb2wgQnVmZmVyUmVhZGVyOjpSZWFkMSh1aW50OF90KiB2KSB7Ci0gIFJDSEVDSyhIYXNCeXRlcygxKSk7Ci0gICp2ID0gYnVmX1twb3NfKytdOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgbXVsdGktYnl0ZSByZWFkcwotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ib29sIEJ1ZmZlclJlYWRlcjo6UmVhZChUKiB2KSB7Ci0gIFJDSEVDSyhIYXNCeXRlcyhzaXplb2YoVCkpKTsKLQotICBUIHRtcCA9IDA7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyBpKyspIHsKLSAgICB0bXAgPDw9IDg7Ci0gICAgdG1wICs9IGJ1Zl9bcG9zXysrXTsKLSAgfQotICAqdiA9IHRtcDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQnVmZmVyUmVhZGVyOjpSZWFkMih1aW50MTZfdCogdikgeyByZXR1cm4gUmVhZCh2KTsgfQotYm9vbCBCdWZmZXJSZWFkZXI6OlJlYWQycyhpbnQxNl90KiB2KSB7IHJldHVybiBSZWFkKHYpOyB9Ci1ib29sIEJ1ZmZlclJlYWRlcjo6UmVhZDQodWludDMyX3QqIHYpIHsgcmV0dXJuIFJlYWQodik7IH0KLWJvb2wgQnVmZmVyUmVhZGVyOjpSZWFkNHMoaW50MzJfdCogdikgeyByZXR1cm4gUmVhZCh2KTsgfQotYm9vbCBCdWZmZXJSZWFkZXI6OlJlYWQ4KHVpbnQ2NF90KiB2KSB7IHJldHVybiBSZWFkKHYpOyB9Ci1ib29sIEJ1ZmZlclJlYWRlcjo6UmVhZDhzKGludDY0X3QqIHYpIHsgcmV0dXJuIFJlYWQodik7IH0KLQotYm9vbCBCdWZmZXJSZWFkZXI6OlJlYWRGb3VyQ0MoRm91ckNDKiB2KSB7Ci0gIHJldHVybiBSZWFkNChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4odikpOwotfQotCi1ib29sIEJ1ZmZlclJlYWRlcjo6UmVhZFZlYyhzdGQ6OnZlY3Rvcjx1aW50OF90PiogdmVjLCB1aW50NjRfdCBjb3VudCkgewotICBSQ0hFQ0soSGFzQnl0ZXMoY291bnQpKTsKLSAgdmVjLT5jbGVhcigpOwotICB2ZWMtPmluc2VydCh2ZWMtPmVuZCgpLCBidWZfICsgcG9zXywgYnVmXyArIHBvc18gKyBjb3VudCk7Ci0gIHBvc18gKz0gY291bnQ7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJ1ZmZlclJlYWRlcjo6U2tpcEJ5dGVzKHVpbnQ2NF90IGJ5dGVzKSB7Ci0gIFJDSEVDSyhIYXNCeXRlcyhieXRlcykpOwotICBwb3NfICs9IGJ5dGVzOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCdWZmZXJSZWFkZXI6OlJlYWQ0SW50bzgodWludDY0X3QqIHYpIHsKLSAgdWludDMyX3QgdG1wOwotICBSQ0hFQ0soUmVhZDQoJnRtcCkpOwotICAqdiA9IHRtcDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQnVmZmVyUmVhZGVyOjpSZWFkNHNJbnRvOHMoaW50NjRfdCogdikgewotICAvLyBCZXdhcmUgb2YgdGhlIG5lZWQgZm9yIHNpZ24gZXh0ZW5zaW9uLgotICBpbnQzMl90IHRtcDsKLSAgUkNIRUNLKFJlYWQ0cygmdG1wKSk7Ci0gICp2ID0gdG1wOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotQm94UmVhZGVyOjpCb3hSZWFkZXIoY29uc3QgdWludDhfdCogYnVmLCBjb25zdCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csIGJvb2wgaXNfRU9TKQotICAgIDogQnVmZmVyUmVhZGVyKGJ1Ziwgc2l6ZSksCi0gICAgICBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCi0gICAgICB0eXBlXyhGT1VSQ0NfTlVMTCksCi0gICAgICB2ZXJzaW9uXygwKSwKLSAgICAgIGZsYWdzXygwKSwKLSAgICAgIHNjYW5uZWRfKGZhbHNlKSwKLSAgICAgIGlzX0VPU18oaXNfRU9TKSB7fQotCi1Cb3hSZWFkZXI6On5Cb3hSZWFkZXIoKSB7Ci0gIGlmIChzY2FubmVkXyAmJiAhY2hpbGRyZW5fLmVtcHR5KCkpIHsKLSAgICBmb3IgKENoaWxkTWFwOjppdGVyYXRvciBpdHIgPSBjaGlsZHJlbl8uYmVnaW4oKTsgaXRyICE9IGNoaWxkcmVuXy5lbmQoKTsKLSAgICAgICAgICsraXRyKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiU2tpcHBpbmcgdW5rbm93biBib3g6ICIgPDwgRm91ckNDVG9TdHJpbmcoaXRyLT5maXJzdCk7Ci0gICAgfQotICB9Ci19Ci0KLS8vIHN0YXRpYwotQm94UmVhZGVyKiBCb3hSZWFkZXI6OlJlYWRUb3BMZXZlbEJveChjb25zdCB1aW50OF90KiBidWYsIGNvbnN0IGludCBidWZfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogZXJyKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxCb3hSZWFkZXI+IHJlYWRlcigKLSAgICAgIG5ldyBCb3hSZWFkZXIoYnVmLCBidWZfc2l6ZSwgbWVkaWFfbG9nLCBmYWxzZSkpOwotICBpZiAoIXJlYWRlci0+UmVhZEhlYWRlcihlcnIpKSByZXR1cm4gTlVMTDsKLQotICBpZiAoIUlzVmFsaWRUb3BMZXZlbEJveChyZWFkZXItPnR5cGUoKSwgbWVkaWFfbG9nKSkgewotICAgICplcnIgPSB0cnVlOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAgaWYgKHJlYWRlci0+c2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihidWZfc2l6ZSkpCi0gICAgcmV0dXJuIHJlYWRlci5yZWxlYXNlKCk7Ci0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIHN0YXRpYwotYm9vbCBCb3hSZWFkZXI6OlN0YXJ0VG9wTGV2ZWxCb3goY29uc3QgdWludDhfdCogYnVmLCBjb25zdCBpbnQgYnVmX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm91ckNDKiB0eXBlLCBpbnQqIGJveF9zaXplLCBib29sKiBlcnIpIHsKLSAgQm94UmVhZGVyIHJlYWRlcihidWYsIGJ1Zl9zaXplLCBtZWRpYV9sb2csIGZhbHNlKTsKLSAgaWYgKCFyZWFkZXIuUmVhZEhlYWRlcihlcnIpKSByZXR1cm4gZmFsc2U7Ci0gIGlmICghSXNWYWxpZFRvcExldmVsQm94KHJlYWRlci50eXBlKCksIG1lZGlhX2xvZykpIHsKLSAgICAqZXJyID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgKnR5cGUgPSByZWFkZXIudHlwZSgpOwotICAqYm94X3NpemUgPSByZWFkZXIuc2l6ZSgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gc3RhdGljCi1Cb3hSZWFkZXIqIEJveFJlYWRlcjo6UmVhZENvbmNhdGVudGF0ZWRCb3hlcyhjb25zdCB1aW50OF90KiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYnVmX3NpemUpIHsKLSAgcmV0dXJuIG5ldyBCb3hSZWFkZXIoYnVmLCBidWZfc2l6ZSwgbmV3IE1lZGlhTG9nKCksIHRydWUpOwotfQotCi0vLyBzdGF0aWMKLWJvb2wgQm94UmVhZGVyOjpJc1ZhbGlkVG9wTGV2ZWxCb3goY29uc3QgRm91ckNDJiB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRk9VUkNDX0ZUWVA6Ci0gICAgY2FzZSBGT1VSQ0NfUERJTjoKLSAgICBjYXNlIEZPVVJDQ19CTE9DOgotICAgIGNhc2UgRk9VUkNDX01PT1Y6Ci0gICAgY2FzZSBGT1VSQ0NfTU9PRjoKLSAgICBjYXNlIEZPVVJDQ19NRlJBOgotICAgIGNhc2UgRk9VUkNDX01EQVQ6Ci0gICAgY2FzZSBGT1VSQ0NfRlJFRToKLSAgICBjYXNlIEZPVVJDQ19TS0lQOgotICAgIGNhc2UgRk9VUkNDX01FVEE6Ci0gICAgY2FzZSBGT1VSQ0NfTUVDTzoKLSAgICBjYXNlIEZPVVJDQ19TVFlQOgotICAgIGNhc2UgRk9VUkNDX1NJRFg6Ci0gICAgY2FzZSBGT1VSQ0NfU1NJWDoKLSAgICBjYXNlIEZPVVJDQ19QUkZUOgotICAgIGNhc2UgRk9VUkNDX1VVSUQ6Ci0gICAgY2FzZSBGT1VSQ0NfRU1TRzoKLSAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvLyBIZXggaXMgdXNlZCB0byBzaG93IG5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFuZCBhaWQgaW4gZGVidWdnaW5nCi0gICAgICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZykKLSAgICAgICAgICA8PCAiVW5yZWNvZ25pemVkIHRvcC1sZXZlbCBib3ggdHlwZSAiIDw8IEZvdXJDQ1RvU3RyaW5nKHR5cGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLWJvb2wgQm94UmVhZGVyOjpTY2FuQ2hpbGRyZW4oKSB7Ci0gIERDSEVDSyghc2Nhbm5lZF8pOwotICBzY2FubmVkXyA9IHRydWU7Ci0KLSAgYm9vbCBlcnIgPSBmYWxzZTsKLSAgd2hpbGUgKHBvc18gPCBzaXplXykgewotICAgIEJveFJlYWRlciBjaGlsZCgmYnVmX1twb3NfXSwgc2l6ZV8gLSBwb3NfLCBtZWRpYV9sb2dfLCBpc19FT1NfKTsKLSAgICBpZiAoIWNoaWxkLlJlYWRIZWFkZXIoJmVycikpIGJyZWFrOwotCi0gICAgY2hpbGRyZW5fLmluc2VydChzdGQ6OnBhaXI8Rm91ckNDLCBCb3hSZWFkZXI+KGNoaWxkLnR5cGUoKSwgY2hpbGQpKTsKLSAgICBwb3NfICs9IGNoaWxkLnNpemUoKTsKLSAgfQotCi0gIERDSEVDSyghZXJyKTsKLSAgcmV0dXJuICFlcnIgJiYgcG9zXyA9PSBzaXplXzsKLX0KLQotYm9vbCBCb3hSZWFkZXI6Okhhc0NoaWxkKEJveCogY2hpbGQpIHsKLSAgRENIRUNLKHNjYW5uZWRfKTsKLSAgRENIRUNLKGNoaWxkKTsKLSAgcmV0dXJuIGNoaWxkcmVuXy5jb3VudChjaGlsZC0+Qm94VHlwZSgpKSA+IDA7Ci19Ci0KLWJvb2wgQm94UmVhZGVyOjpSZWFkQ2hpbGQoQm94KiBjaGlsZCkgewotICBEQ0hFQ0soc2Nhbm5lZF8pOwotICBGb3VyQ0MgY2hpbGRfdHlwZSA9IGNoaWxkLT5Cb3hUeXBlKCk7Ci0KLSAgQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ciA9IGNoaWxkcmVuXy5maW5kKGNoaWxkX3R5cGUpOwotICBSQ0hFQ0soaXRyICE9IGNoaWxkcmVuXy5lbmQoKSk7Ci0gIERWTE9HKDIpIDw8ICJGb3VuZCBhICIgPDwgRm91ckNDVG9TdHJpbmcoY2hpbGRfdHlwZSkgPDwgIiBib3guIjsKLSAgUkNIRUNLKGNoaWxkLT5QYXJzZSgmaXRyLT5zZWNvbmQpKTsKLSAgY2hpbGRyZW5fLmVyYXNlKGl0cik7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJveFJlYWRlcjo6TWF5YmVSZWFkQ2hpbGQoQm94KiBjaGlsZCkgewotICBpZiAoIWNoaWxkcmVuXy5jb3VudChjaGlsZC0+Qm94VHlwZSgpKSkgcmV0dXJuIHRydWU7Ci0gIHJldHVybiBSZWFkQ2hpbGQoY2hpbGQpOwotfQotCi1ib29sIEJveFJlYWRlcjo6UmVhZEZ1bGxCb3hIZWFkZXIoKSB7Ci0gIHVpbnQzMl90IHZmbGFnczsKLSAgUkNIRUNLKFJlYWQ0KCZ2ZmxhZ3MpKTsKLSAgdmVyc2lvbl8gPSB2ZmxhZ3MgPj4gMjQ7Ci0gIGZsYWdzXyA9IHZmbGFncyAmIDB4ZmZmZmZmOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBCb3hSZWFkZXI6OlJlYWRIZWFkZXIoYm9vbCogZXJyKSB7Ci0gIHVpbnQ2NF90IHNpemUgPSAwOwotICAqZXJyID0gZmFsc2U7Ci0KLSAgaWYgKCFIYXNCeXRlcyg4KSkgewotICAgIC8vIElmIEVPUyBpcyBrbm93biwgdGhlbiB0aGlzIGlzIGFuIGVycm9yLiBJZiBub3QsIGFkZGl0aW9uYWwgZGF0YSBtYXkgYmUKLSAgICAvLyBhcHBlbmRlZCBsYXRlciwgc28gdGhpcyBpcyBhIHNvZnQgZXJyb3IuCi0gICAgKmVyciA9IGlzX0VPU187Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIENIRUNLKFJlYWQ0SW50bzgoJnNpemUpICYmIFJlYWRGb3VyQ0MoJnR5cGVfKSk7Ci0KLSAgaWYgKHNpemUgPT0gMCkgewotICAgIGlmIChpc19FT1NfKSB7Ci0gICAgICAvLyBBbGwgdGhlIGRhdGEgYnl0ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHByb3ZpZGVkLgotICAgICAgc2l6ZSA9IHNpemVfOwotICAgIH0gZWxzZSB7Ci0gICAgICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIklTTyBCTUZGIGJveGVzIHRoYXQgcnVuIHRvIEVPUyBhcmUgbm90IHN1cHBvcnRlZCI7Ci0gICAgICAqZXJyID0gdHJ1ZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgaWYgKCFIYXNCeXRlcyg4KSkgewotICAgICAgLy8gSWYgRU9TIGlzIGtub3duLCB0aGVuIHRoaXMgaXMgYW4gZXJyb3IuIElmIG5vdCwgaXQncyBhIHNvZnQgZXJyb3IuCi0gICAgICAqZXJyID0gaXNfRU9TXzsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgQ0hFQ0soUmVhZDgoJnNpemUpKTsKLSAgfQotCi0gIC8vIEltcGxlbWVudGF0aW9uLXNwZWNpZmljOiBzdXBwb3J0IGZvciBib3hlcyBsYXJnZXIgdGhhbiAyXjMxIGhhcyBiZWVuCi0gIC8vIHJlbW92ZWQuCi0gIGlmIChzaXplIDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHBvc18pIHx8Ci0gICAgICBzaXplID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewotICAgICplcnIgPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gIC8vIFNpbmNlIHRoZSBkYXRhIG1heSBiZSBhcHBlbmRlZCBpbiBwaWVjZXMsIHRoaXMgY2FuIG9ubHkgYmUgY2hlY2tlZCBpZiBFT1MuCi0gIGlmIChpc19FT1NfICYmIHNpemUgPiBzaXplXykgewotICAgICplcnIgPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCB0aGUgcG9zXyBoZWFkIGhhcyBhZHZhbmNlZCB0byB0aGUgYnl0ZSBpbW1lZGlhdGVseSBhZnRlciB0aGUKLSAgLy8gaGVhZGVyLCB3aGljaCBpcyB3aGVyZSB3ZSB3YW50IGl0LgotICBzaXplXyA9IHNpemU7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfcmVhZGVyLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X3JlYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmU3MTg2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfcmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CT1hfUkVBREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9CT1hfUkVBREVSX0hfCi0KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZm91cmNjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9yY2hlY2suaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLWNsYXNzIEJveFJlYWRlcjsKLQotc3RydWN0IE1FRElBX0VYUE9SVCBCb3ggewotICB2aXJ0dWFsIH5Cb3goKTsKLQotICAvLyBQYXJzZSBlcnJvcnMgbWF5IGJlIGxvZ2dlZCB1c2luZyB0aGUgQm94UmVhZGVyJ3MgbWVkaWEgbG9nLgotICB2aXJ0dWFsIGJvb2wgUGFyc2UoQm94UmVhZGVyKiByZWFkZXIpID0gMDsKLQotICB2aXJ0dWFsIEZvdXJDQyBCb3hUeXBlKCkgY29uc3QgPSAwOwotfTsKLQotY2xhc3MgTUVESUFfRVhQT1JUIEJ1ZmZlclJlYWRlciB7Ci0gcHVibGljOgotICBCdWZmZXJSZWFkZXIoY29uc3QgdWludDhfdCogYnVmLCBjb25zdCBpbnQgc2l6ZSkgOiBidWZfKGJ1ZiksIHBvc18oMCkgewotICAgIENIRUNLKGJ1Zik7Ci0gICAgQ0hFQ0tfR0Uoc2l6ZSwgMCk7Ci0gICAgc2l6ZV8gPSBzaXplOwotICB9Ci0KLSAgYm9vbCBIYXNCeXRlcyh1aW50NjRfdCBjb3VudCkgewotICAgIC8vIEFzIHRoZSBzaXplIG9mIGEgYm94IGlzIGltcGxlbWVudGF0aW9uIGxpbWl0ZWQgdG8gMl4zMSwgZmFpbCBpZgotICAgIC8vIGF0dGVtcHRpbmcgdG8gY2hlY2sgZm9yIHRvbyBtYW55IGJ5dGVzLgotICAgIHJldHVybiAocG9zXyA8PSBzaXplXyAmJgotICAgICAgICAgICAgY291bnQgPAotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkgJiYKLSAgICAgICAgICAgIHNpemVfIC0gcG9zXyA+PSBjb3VudCk7Ci0gIH0KLQotICAvLyBSZWFkIGEgdmFsdWUgZnJvbSB0aGUgc3RyZWFtLCBwZXJmb3JtaW5nIGVuZGlhbiBjb3JyZWN0aW9uLCBhbmQgYWR2YW5jZSB0aGUKLSAgLy8gc3RyZWFtIHBvaW50ZXIuCi0gIGJvb2wgUmVhZDEodWludDhfdCogdikgV0FSTl9VTlVTRURfUkVTVUxUOwotICBib29sIFJlYWQyKHVpbnQxNl90KiB2KSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0gIGJvb2wgUmVhZDJzKGludDE2X3QqIHYpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLSAgYm9vbCBSZWFkNCh1aW50MzJfdCogdikgV0FSTl9VTlVTRURfUkVTVUxUOwotICBib29sIFJlYWQ0cyhpbnQzMl90KiB2KSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0gIGJvb2wgUmVhZDgodWludDY0X3QqIHYpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLSAgYm9vbCBSZWFkOHMoaW50NjRfdCogdikgV0FSTl9VTlVTRURfUkVTVUxUOwotCi0gIGJvb2wgUmVhZEZvdXJDQyhGb3VyQ0MqIHYpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICBib29sIFJlYWRWZWMoc3RkOjp2ZWN0b3I8dWludDhfdD4qIHQsIHVpbnQ2NF90IGNvdW50KSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gVGhlc2UgdmFyaWFudHMgcmVhZCBhIDQtYnl0ZSBpbnRlZ2VyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNpZ25lZG5lc3MgYW5kCi0gIC8vIHN0b3JlIGl0IGluIHRoZSA4LWJ5dGUgcmV0dXJuIHR5cGUuCi0gIGJvb2wgUmVhZDRJbnRvOCh1aW50NjRfdCogdikgV0FSTl9VTlVTRURfUkVTVUxUOwotICBib29sIFJlYWQ0c0ludG84cyhpbnQ2NF90KiB2KSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gQWR2YW5jZSB0aGUgc3RyZWFtIGJ5IHRoaXMgbWFueSBieXRlcy4KLSAgYm9vbCBTa2lwQnl0ZXModWludDY0X3QgbmJ5dGVzKSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIGJ1Zl87IH0KLQotICAvLyBUaGlzIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJveCBhcyBzcGVjaWZpZWQgaW4gdGhlIGJveCBoZWFkZXIuIEluaXRpYWxseQotICAvLyBpdCBpcyB0aGUgYnVmZmVyIHNpemUgdW50aWwgdGhlIGhlYWRlciBpcyByZWFkLiBOb3RlIHRoYXQgdGhlIHNpemUKLSAgLy8gc3BlY2lmaWVkIGluIHRoZSBib3ggaGVhZGVyIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzCi0gIC8vIGFjdHVhbGx5IHByb3ZpZGVkLgotICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV87IH0KLSAgdWludDY0X3QgcG9zKCkgY29uc3QgeyByZXR1cm4gcG9zXzsgfQotCi0gcHJvdGVjdGVkOgotICBjb25zdCB1aW50OF90KiBidWZfOwotICB1aW50NjRfdCBzaXplXzsKLSAgdWludDY0X3QgcG9zXzsKLQotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgYm9vbCBSZWFkKFQqIHQpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLX07Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBCb3hSZWFkZXIgOiBwdWJsaWMgQnVmZmVyUmVhZGVyIHsKLSBwdWJsaWM6Ci0gIH5Cb3hSZWFkZXIoKTsKLQotICAvLyBDcmVhdGUgYSBCb3hSZWFkZXIgZnJvbSBhIGJ1ZmZlci4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOVUxMCi0gIC8vIGlmIGFuIGludGFjdCwgY29tcGxldGUgYm94IHdhcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIuIElmIHwqZXJyfCBpcwotICAvLyBzZXQsIHRoZXJlIHdhcyBhIHN0cmVhbS1sZXZlbCBlcnJvciB3aGVuIGNyZWF0aW5nIHRoZSBib3g7IG90aGVyd2lzZSwgTlVMTAotICAvLyB2YWx1ZXMgYXJlIG9ubHkgZXhwZWN0ZWQgd2hlbiBpbnN1ZmZpY2llbnQgZGF0YSBpcyBhdmFpbGFibGUuCi0gIC8vCi0gIC8vIHxidWZ8IGlzIHJldGFpbmVkIGJ1dCBub3Qgb3duZWQsIGFuZCBtdXN0IG91dGxpdmUgdGhlIEJveFJlYWRlciBpbnN0YW5jZS4KLSAgc3RhdGljIEJveFJlYWRlciogUmVhZFRvcExldmVsQm94KGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgY29uc3QgaW50IGJ1Zl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGVycik7Ci0KLSAgLy8gUmVhZCB0aGUgYm94IGhlYWRlciBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlci4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYKLSAgLy8gdGhlcmUgaXMgZW5vdWdoIGRhdGEgdG8gcmVhZCB0aGUgaGVhZGVyIGFuZCB0aGUgaGVhZGVyIGlzIHNhbmU7IHRoYXQgaXMsIGl0Ci0gIC8vIGRvZXMgbm90IGNoZWNrIHRvIGVuc3VyZSB0aGUgZW50aXJlIGJveCBpcyBpbiB0aGUgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcKLSAgLy8gdHJ1ZS4gVGhlIHNlbWFudGljcyBvZiB8KmVycnwgYXJlIHRoZSBzYW1lIGFzIGFib3ZlLgotICAvLwotICAvLyB8YnVmfCBpcyBub3QgcmV0YWluZWQuCi0gIHN0YXRpYyBib29sIFN0YXJ0VG9wTGV2ZWxCb3goY29uc3QgdWludDhfdCogYnVmLCBjb25zdCBpbnQgYnVmX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3VyQ0MqIHR5cGUsIGludCogYm94X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogZXJyKSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gQ3JlYXRlIGEgQm94UmVhZGVyIGZyb20gYSBidWZmZXIuIHxidWZ8IG11c3QgYmUgdGhlIGNvbXBsZXRlIGJ1ZmZlciwgYXMKLSAgLy8gZXJyb3JzIGFyZSByZXR1cm5lZCB3aGVuIHN1ZmZpY2llbnQgZGF0YSBpcyBub3QgYXZhaWxhYmxlLiB8YnVmfCBjYW4gc3RhcnQKLSAgLy8gd2l0aCBhbnkgdHlwZSBvZiBib3ggLS0gaXQgZG9lcyBub3QgaGF2ZSB0byBiZSBJc1ZhbGlkVG9wTGV2ZWxCb3goKS4KLSAgLy8KLSAgLy8gfGJ1ZnwgaXMgcmV0YWluZWQgYnV0IG5vdCBvd25lZCwgYW5kIG11c3Qgb3V0bGl2ZSB0aGUgQm94UmVhZGVyIGluc3RhbmNlLgotICBzdGF0aWMgQm94UmVhZGVyKiBSZWFkQ29uY2F0ZW50YXRlZEJveGVzKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYnVmX3NpemUpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB8dHlwZXwgaXMgcmVjb2duaXplZCB0byBiZSBhIHRvcC1sZXZlbCBib3gsIGZhbHNlCi0gIC8vIG90aGVyd2lzZS4gVGhpcyByZXR1cm5zIHRydWUgZm9yIHNvbWUgYm94ZXMgd2hpY2ggd2UgZG8gbm90IHBhcnNlLgotICAvLyBIZWxwZnVsIGluIGRlYnVnZ2luZyBtaXNhbGlnbmVkIGFwcGVuZHMuCi0gIHN0YXRpYyBib29sIElzVmFsaWRUb3BMZXZlbEJveChjb25zdCBGb3VyQ0MmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLQotICAvLyBTY2FuIHRocm91Z2ggYWxsIGJveGVzIHdpdGhpbiB0aGUgY3VycmVudCBib3gsIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50Ci0gIC8vIGJ1ZmZlciBwb3NpdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvZiB0aGUgKkNoaWxkIGZ1bmN0aW9ucyB3b3JrLgotICBib29sIFNjYW5DaGlsZHJlbigpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICAvLyBSZXR1cm4gdHJ1ZSBpZiBjaGlsZCB3aXRoIHR5cGUgfGNoaWxkLkJveFR5cGUoKXwgZXhpc3RzLgotICBib29sIEhhc0NoaWxkKEJveCogY2hpbGQpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICAvLyBSZWFkIGV4YWN0bHkgb25lIGNoaWxkIGJveCBmcm9tIHRoZSBzZXQgb2YgY2hpbGRyZW4uIFRoZSB0eXBlIG9mIHRoZSBjaGlsZAotICAvLyB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIEJveFR5cGUoKSBtZXRob2Qgb2YgfGNoaWxkfC4KLSAgYm9vbCBSZWFkQ2hpbGQoQm94KiBjaGlsZCkgV0FSTl9VTlVTRURfUkVTVUxUOwotCi0gIC8vIFJlYWQgb25lIGNoaWxkIGlmIGF2YWlsYWJsZS4gUmV0dXJucyBmYWxzZSBvbiBlcnJvciwgdHJ1ZSBvbiBzdWNjZXNzZnVsCi0gIC8vIHJlYWQgb3Igb24gY2hpbGQgYWJzZW50LgotICBib29sIE1heWJlUmVhZENoaWxkKEJveCogY2hpbGQpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICAvLyBSZWFkIGF0IGxlYXN0IG9uZSBjaGlsZC4gRmFsc2UgbWVhbnMgZXJyb3Igb3Igbm8gc3VjaCBjaGlsZCBwcmVzZW50LgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgYm9vbCBSZWFkQ2hpbGRyZW4oc3RkOjp2ZWN0b3I8VD4qIGNoaWxkcmVuKSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gUmVhZCBhbnkgbnVtYmVyIG9mIGNoaWxkcmVuLiBGYWxzZSBtZWFucyBlcnJvci4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIGJvb2wgTWF5YmVSZWFkQ2hpbGRyZW4oc3RkOjp2ZWN0b3I8VD4qIGNoaWxkcmVuKSBXQVJOX1VOVVNFRF9SRVNVTFQ7Ci0KLSAgLy8gUmVhZCBhbGwgY2hpbGRyZW4sIHJlZ2FyZGxlc3Mgb2YgRm91ckNDLiBUaGlzIGlzIHVzZWQgZnJvbSBleGFjdGx5IG9uZSBib3gsCi0gIC8vIGNvcnJlc3BvbmRpbmcgdG8gYSByYXRoZXIgc2lnbmlmaWNhbnQgaW5jb25zaXN0ZW5jeSBpbiB0aGUgQk1GRiBzcGVjLgotICAvLyBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggU2NhbkNoaWxkcmVuKCkgYW5kCi0gIC8vIFJlYWRBbGxDaGlsZHJlbkFuZENoZWNrRm91ckNDKCkuCi0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBib29sIFJlYWRBbGxDaGlsZHJlbihzdGQ6OnZlY3RvcjxUPiogY2hpbGRyZW4pIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICAvLyBSZWFkIGFsbCBjaGlsZHJlbiBhbmQgdmVyaWZ5IHRoYXQgdGhlIEZvdXJDQyBtYXRjaGVzIHdoYXQgaXMgZXhwZWN0ZWQuCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgY2hpbGRyZW4gYXJlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIGhhdmUgdGhlIGNvcnJlY3QKLSAgLy8gYm94IHR5cGUgZm9yIHxUfC4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoCi0gIC8vIFNjYW5DaGlsZHJlbigpIGFuZCBSZWFkQWxsQ2hpbGRyZW4oKS4KLSAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gIGJvb2wgUmVhZEFsbENoaWxkcmVuQW5kQ2hlY2tGb3VyQ0Moc3RkOjp2ZWN0b3I8VD4qIGNoaWxkcmVuKQotICAgICAgV0FSTl9VTlVTRURfUkVTVUxUOwotCi0gIC8vIFBvcHVsYXRlIHRoZSB2YWx1ZXMgb2YgJ3ZlcnNpb24oKScgYW5kICdmbGFncygpJyBmcm9tIGEgZnVsbCBib3ggaGVhZGVyLgotICAvLyBNYW55IGJveGVzLCBidXQgbm90IGFsbCwgdXNlIHRoZXNlIHZhbHVlcy4gVGhpcyBjYWxsIHNob3VsZCBoYXBwZW4gYWZ0ZXIKLSAgLy8gdGhlIGJveCBoYXMgYmVlbiBpbml0aWFsaXplZCwgYW5kIGRvZXMgbm90IHJlLXJlYWQgdGhlIG1haW4gYm94IGhlYWRlci4KLSAgYm9vbCBSZWFkRnVsbEJveEhlYWRlcigpIFdBUk5fVU5VU0VEX1JFU1VMVDsKLQotICBGb3VyQ0MgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Ci0gIHVpbnQ4X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHZlcnNpb25fOyB9Ci0gIHVpbnQzMl90IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gZmxhZ3NfOyB9Ci0KLSAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZygpIGNvbnN0IHsgcmV0dXJuIG1lZGlhX2xvZ187IH0KLQotIHByaXZhdGU6Ci0gIC8vIENyZWF0ZSBhIEJveFJlYWRlciBmcm9tIHxidWZ8LiB8aXNfRU9TfCBzaG91bGQgYmUgdHJ1ZSBpZiB8YnVmfCBpcwotICAvLyBjb21wbGV0ZSBzdHJlYW0gKGkuZS4gbm8gYWRkaXRpb25hbCBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIGFwcGVuZGVkKS4KLSAgQm94UmVhZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgY29uc3QgaW50IHNpemUsCi0gICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nLCBib29sIGlzX0VPUyk7Ci0KLSAgLy8gTXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdC4gSWYgdGhlIHJldHVybiBpcyBmYWxzZSwgdGhpcwotICAvLyBpbmRpY2F0ZXMgdGhhdCB0aGUgYm94IGhlYWRlciBhbmQgaXRzIGNvbnRlbnRzIHdlcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUKLSAgLy8gc3RyZWFtIG9yIHdlcmUgbm9uc2Vuc2ljYWwsIGFuZCB0aGF0IHRoZSBib3ggbXVzdCBub3QgYmUgdXNlZCBmdXJ0aGVyLiBJbgotICAvLyB0aGlzIGNhc2UsIGlmIHwqZXJyfCBpcyBmYWxzZSwgdGhlIHByb2JsZW0gd2FzIHNpbXBseSBhIGxhY2sgb2YgZGF0YSwgYW5kCi0gIC8vIHNob3VsZCBvbmx5IGJlIGFuIGVycm9yIGNvbmRpdGlvbiBpZiBzb21lIGhpZ2hlci1sZXZlbCBjb21wb25lbnQga25vd3MgdGhhdAotICAvLyBubyBtb3JlIGRhdGEgaXMgY29taW5nIChpLmUuIEVPUyBvciBlbmQgb2YgY29udGFpbmluZyBib3gpLiBJZiB8KmVycnwgaXMKLSAgLy8gdHJ1ZSwgdGhlIGVycm9yIGlzIHVucmVjb3ZlcmFibGUgYW5kIHRoZSBzdHJlYW0gc2hvdWxkIGJlIGFib3J0ZWQuCi0gIGJvb2wgUmVhZEhlYWRlcihib29sKiBlcnIpOwotCi0gIC8vIFJlYWQgYWxsIGNoaWxkcmVuLCBvcHRpb25hbGx5IGNoZWNraW5nIEZvdXJDQy4gUmV0dXJucyB0cnVlIGlmIGFsbAotICAvLyBjaGlsZHJlbiBhcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbmQsIGlmIHxjaGVja19ib3hfdHlwZXwsIGhhdmUgdGhlCi0gIC8vIGNvcnJlY3QgYm94IHR5cGUgZm9yIHxUfC4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZQotICAvLyB3aXRoIFNjYW5DaGlsZHJlbigpLgotICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgYm9vbCBSZWFkQWxsQ2hpbGRyZW5JbnRlcm5hbChzdGQ6OnZlY3RvcjxUPiogY2hpbGRyZW4sIGJvb2wgY2hlY2tfYm94X3R5cGUpOwotCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0gIEZvdXJDQyB0eXBlXzsKLSAgdWludDhfdCB2ZXJzaW9uXzsKLSAgdWludDMyX3QgZmxhZ3NfOwotCi0gIHR5cGVkZWYgc3RkOjptdWx0aW1hcDxGb3VyQ0MsIEJveFJlYWRlcj4gQ2hpbGRNYXA7Ci0KLSAgLy8gVGhlIHNldCBvZiBjaGlsZCBib3ggRm91ckNDcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBidWZmZXIgcmVhZGVycy4gT25seQotICAvLyB2YWxpZCBpZiBzY2FubmVkXyBpcyB0cnVlLgotICBDaGlsZE1hcCBjaGlsZHJlbl87Ci0gIGJvb2wgc2Nhbm5lZF87Ci0KLSAgLy8gVHJ1ZSBpZiB0aGUgYnVmZmVyIHByb3ZpZGVkIHRvIHRoZSByZWFkZXIgaXMgdGhlIGNvbXBsZXRlIHN0cmVhbS4KLSAgYm9vbCBpc19FT1NfOwotfTsKLQotLy8gVGVtcGxhdGUgZGVmaW5pdGlvbnMKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotYm9vbCBCb3hSZWFkZXI6OlJlYWRDaGlsZHJlbihzdGQ6OnZlY3RvcjxUPiogY2hpbGRyZW4pIHsKLSAgUkNIRUNLKE1heWJlUmVhZENoaWxkcmVuKGNoaWxkcmVuKSAmJiAhY2hpbGRyZW4tPmVtcHR5KCkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1ib29sIEJveFJlYWRlcjo6TWF5YmVSZWFkQ2hpbGRyZW4oc3RkOjp2ZWN0b3I8VD4qIGNoaWxkcmVuKSB7Ci0gIERDSEVDSyhzY2FubmVkXyk7Ci0gIERDSEVDSyhjaGlsZHJlbi0+ZW1wdHkoKSk7Ci0KLSAgY2hpbGRyZW4tPnJlc2l6ZSgxKTsKLSAgRm91ckNDIGNoaWxkX3R5cGUgPSAoKmNoaWxkcmVuKVswXS5Cb3hUeXBlKCk7Ci0KLSAgQ2hpbGRNYXA6Oml0ZXJhdG9yIHN0YXJ0X2l0ciA9IGNoaWxkcmVuXy5sb3dlcl9ib3VuZChjaGlsZF90eXBlKTsKLSAgQ2hpbGRNYXA6Oml0ZXJhdG9yIGVuZF9pdHIgPSBjaGlsZHJlbl8udXBwZXJfYm91bmQoY2hpbGRfdHlwZSk7Ci0gIGNoaWxkcmVuLT5yZXNpemUoc3RkOjpkaXN0YW5jZShzdGFydF9pdHIsIGVuZF9pdHIpKTsKLSAgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VD46Oml0ZXJhdG9yIGNoaWxkX2l0ciA9IGNoaWxkcmVuLT5iZWdpbigpOwotICBmb3IgKENoaWxkTWFwOjppdGVyYXRvciBpdHIgPSBzdGFydF9pdHI7IGl0ciAhPSBlbmRfaXRyOyArK2l0cikgewotICAgIFJDSEVDSyhjaGlsZF9pdHItPlBhcnNlKCZpdHItPnNlY29uZCkpOwotICAgICsrY2hpbGRfaXRyOwotICB9Ci0gIGNoaWxkcmVuXy5lcmFzZShzdGFydF9pdHIsIGVuZF9pdHIpOwotCi0gIERWTE9HKDIpIDw8ICJGb3VuZCAiIDw8IGNoaWxkcmVuLT5zaXplKCkgPDwgIiAiIDw8IEZvdXJDQ1RvU3RyaW5nKGNoaWxkX3R5cGUpCi0gICAgICAgICAgIDw8ICIgYm94ZXMuIjsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotYm9vbCBCb3hSZWFkZXI6OlJlYWRBbGxDaGlsZHJlbihzdGQ6OnZlY3RvcjxUPiogY2hpbGRyZW4pIHsKLSAgcmV0dXJuIFJlYWRBbGxDaGlsZHJlbkludGVybmFsKGNoaWxkcmVuLCBmYWxzZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotYm9vbCBCb3hSZWFkZXI6OlJlYWRBbGxDaGlsZHJlbkFuZENoZWNrRm91ckNDKHN0ZDo6dmVjdG9yPFQ+KiBjaGlsZHJlbikgewotICByZXR1cm4gUmVhZEFsbENoaWxkcmVuSW50ZXJuYWwoY2hpbGRyZW4sIHRydWUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWJvb2wgQm94UmVhZGVyOjpSZWFkQWxsQ2hpbGRyZW5JbnRlcm5hbChzdGQ6OnZlY3RvcjxUPiogY2hpbGRyZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja19ib3hfdHlwZSkgewotICBEQ0hFQ0soIXNjYW5uZWRfKTsKLSAgc2Nhbm5lZF8gPSB0cnVlOwotCi0gIGJvb2wgZXJyID0gZmFsc2U7Ci0gIHdoaWxlIChwb3NfIDwgc2l6ZV8pIHsKLSAgICBCb3hSZWFkZXIgY2hpbGRfcmVhZGVyKCZidWZfW3Bvc19dLCBzaXplXyAtIHBvc18sIG1lZGlhX2xvZ18sIGlzX0VPU18pOwotICAgIGlmICghY2hpbGRfcmVhZGVyLlJlYWRIZWFkZXIoJmVycikpIGJyZWFrOwotICAgIFQgY2hpbGQ7Ci0gICAgUkNIRUNLKCFjaGVja19ib3hfdHlwZSB8fCBjaGlsZF9yZWFkZXIudHlwZSgpID09IGNoaWxkLkJveFR5cGUoKSk7Ci0gICAgUkNIRUNLKGNoaWxkLlBhcnNlKCZjaGlsZF9yZWFkZXIpKTsKLSAgICBjaGlsZHJlbi0+cHVzaF9iYWNrKGNoaWxkKTsKLSAgICBwb3NfICs9IGNoaWxkX3JlYWRlci5zaXplKCk7Ci0gIH0KLQotICByZXR1cm4gIWVycjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0JPWF9SRUFERVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfcmVhZGVyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYzQzYzkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6Okhhc1N1YnN0cjsKLXVzaW5nIDo6dGVzdGluZzo6U3RyaWN0TW9jazsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtTa2lwQm94W10gPSB7Ci0gICAgLy8gVG9wLWxldmVsIHRlc3QgYm94IGNvbnRhaW5pbmcgdGhyZWUgY2hpbGRyZW4KLSAgICAweDAwLCAweDAwLCAweDAwLCAweDQwLCAncycsICdrJywgJ2knLCAncCcsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCi0gICAgMHgwNiwgMHgwNywgMHgwOCwgMHhmOSwgMHgwYSwgMHgwYiwgMHgwYywgMHhmZCwgMHgwZSwgMHgwZiwgMHgxMCwKLSAgICAvLyBPcmRpbmFyeSAoOC1ieXRlIGhlYWRlcikgY2hpbGQgYm94Ci0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgJ3AnLCAncycsICdzJywgJ2gnLCAweGRlLCAweGFkLCAweGJlLCAweGVmLAotICAgIC8vIEV4dGVuZGVkLXNpemUgaGVhZGVyIGNoaWxkIGJveAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsICdwJywgJ3MnLCAncycsICdoJywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDE0LCAweGZhLCAweGNlLCAweGNhLCAweGZlLAotICAgIC8vIEVtcHR5IGZyZWUgYm94Ci0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgJ2YnLCAncicsICdlJywgJ2UnLAotICAgIC8vIFRyYWlsaW5nIGdhcmJhZ2UKLSAgICAweDAwfTsKLQotc3RydWN0IEZyZWVCb3ggOiBCb3ggewotICBib29sIFBhcnNlKEJveFJlYWRlciogcmVhZGVyKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gIEZvdXJDQyBCb3hUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRk9VUkNDX0ZSRUU7IH0KLX07Ci0KLXN0cnVjdCBQc3NoQm94IDogQm94IHsKLSAgdWludDMyX3QgdmFsOwotCi0gIGJvb2wgUGFyc2UoQm94UmVhZGVyKiByZWFkZXIpIG92ZXJyaWRlIHsgcmV0dXJuIHJlYWRlci0+UmVhZDQoJnZhbCk7IH0KLSAgRm91ckNDIEJveFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGT1VSQ0NfUFNTSDsgfQotfTsKLQotc3RydWN0IFNraXBCb3ggOiBCb3ggewotICB1aW50OF90IGEsIGI7Ci0gIHVpbnQxNl90IGM7Ci0gIGludDMyX3QgZDsKLSAgaW50NjRfdCBlOwotCi0gIHN0ZDo6dmVjdG9yPFBzc2hCb3g+IGtpZHM7Ci0gIEZyZWVCb3ggbXB0eTsKLQotICBib29sIFBhcnNlKEJveFJlYWRlciogcmVhZGVyKSBvdmVycmlkZSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZEZ1bGxCb3hIZWFkZXIoKSAmJiByZWFkZXItPlJlYWQxKCZhKSAmJgotICAgICAgICAgICByZWFkZXItPlJlYWQxKCZiKSAmJiByZWFkZXItPlJlYWQyKCZjKSAmJiByZWFkZXItPlJlYWQ0cygmZCkgJiYKLSAgICAgICAgICAgcmVhZGVyLT5SZWFkNHNJbnRvOHMoJmUpKTsKLSAgICByZXR1cm4gcmVhZGVyLT5TY2FuQ2hpbGRyZW4oKSAmJiByZWFkZXItPlJlYWRDaGlsZHJlbigma2lkcykgJiYKLSAgICAgICAgICAgcmVhZGVyLT5NYXliZVJlYWRDaGlsZCgmbXB0eSk7Ci0gIH0KLSAgRm91ckNDIEJveFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGT1VSQ0NfU0tJUDsgfQotCi0gIFNraXBCb3goKTsKLSAgflNraXBCb3goKSBvdmVycmlkZTsKLX07Ci0KLVNraXBCb3g6OlNraXBCb3goKSB7fQotU2tpcEJveDo6flNraXBCb3goKSB7fQotCi1jbGFzcyBCb3hSZWFkZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgQm94UmVhZGVyVGVzdCgpIDogbWVkaWFfbG9nXyhuZXcgU3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IEdldEJ1ZigpIHsKLSAgICByZXR1cm4gc3RkOjp2ZWN0b3I8dWludDhfdD4oa1NraXBCb3gsIGtTa2lwQm94ICsgc2l6ZW9mKGtTa2lwQm94KSk7Ci0gIH0KLQotICB2b2lkIFRlc3RUb3BMZXZlbEJveChjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSwgdWludDMyX3QgZm91ckNDKSB7Ci0gICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmKGRhdGEsIGRhdGEgKyBzaXplKTsKLQotICAgIGJvb2wgZXJyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCb3hSZWFkZXI+IHJlYWRlcigKLSAgICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goJmJ1ZlswXSwgYnVmLnNpemUoKSwgbWVkaWFfbG9nXywgJmVycikpOwotCi0gICAgRVhQRUNUX0ZBTFNFKGVycik7Ci0gICAgRVhQRUNUX1RSVUUocmVhZGVyKTsKLSAgICBFWFBFQ1RfRVEoZm91ckNDLCByZWFkZXItPnR5cGUoKSk7Ci0gICAgRVhQRUNUX0VRKHJlYWRlci0+c2l6ZSgpLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSkpOwotICB9Ci0KLSAgc2NvcGVkX3JlZnB0cjxTdHJpY3RNb2NrPE1vY2tNZWRpYUxvZz4+IG1lZGlhX2xvZ187Ci19OwotCi1URVNUX0YoQm94UmVhZGVyVGVzdCwgRXhwZWN0ZWRPcGVyYXRpb25UZXN0KSB7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZiA9IEdldEJ1ZigpOwotICBib29sIGVycjsKLSAgc3RkOjp1bmlxdWVfcHRyPEJveFJlYWRlcj4gcmVhZGVyKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goJmJ1ZlswXSwgYnVmLnNpemUoKSwgbWVkaWFfbG9nXywgJmVycikpOwotICBFWFBFQ1RfRkFMU0UoZXJyKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLmdldCgpKTsKLQotICBTa2lwQm94IGJveDsKLSAgRVhQRUNUX1RSVUUoYm94LlBhcnNlKHJlYWRlci5nZXQoKSkpOwotICBFWFBFQ1RfRVEoMHgwMSwgcmVhZGVyLT52ZXJzaW9uKCkpOwotICBFWFBFQ1RfRVEoMHgwMjAzMDR1LCByZWFkZXItPmZsYWdzKCkpOwotICBFWFBFQ1RfRVEoMHgwNSwgYm94LmEpOwotICBFWFBFQ1RfRVEoMHgwNiwgYm94LmIpOwotICBFWFBFQ1RfRVEoMHgwNzA4LCBib3guYyk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQzMl90PigweGY5MGEwYjBjKSwgYm94LmQpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50MzJfdD4oMHhmZDBlMGYxMCksIGJveC5lKTsKLQotICBFWFBFQ1RfRVEoMnUsIGJveC5raWRzLnNpemUoKSk7Ci0gIEVYUEVDVF9FUSgweGRlYWRiZWVmLCBib3gua2lkc1swXS52YWwpOwotICBFWFBFQ1RfRVEoMHhmYWNlY2FmZSwgYm94LmtpZHNbMV0udmFsKTsKLQotICAvLyBBY2NvdW50aW5nIGZvciB0aGUgZXh0cmEgYnl0ZSBvdXRzaWRlIG9mIHRoZSBib3ggYWJvdmUKLSAgRVhQRUNUX0VRKGJ1Zi5zaXplKCksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZWFkZXItPnNpemUoKSArIDEpKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIE91dGVyVG9vU2hvcnRUZXN0KSB7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZiA9IEdldEJ1ZigpOwotICBib29sIGVycjsKLQotICAvLyBDcmVhdGUgYSBzb2Z0IGZhaWx1cmUgYnkgdHJ1bmNhdGluZyB0aGUgb3V0ZXIgYm94LgotICBzdGQ6OnVuaXF1ZV9wdHI8Qm94UmVhZGVyPiByKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goJmJ1ZlswXSwgYnVmLnNpemUoKSAtIDIsIG1lZGlhX2xvZ18sICZlcnIpKTsKLQotICBFWFBFQ1RfRkFMU0UoZXJyKTsKLSAgRVhQRUNUX0ZBTFNFKHIuZ2V0KCkpOwotfQotCi1URVNUX0YoQm94UmVhZGVyVGVzdCwgSW5uZXJUb29Mb25nVGVzdCkgewotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSBHZXRCdWYoKTsKLSAgYm9vbCBlcnI7Ci0KLSAgLy8gTWFrZSBhbiBpbm5lciBib3ggdG9vIGJpZyBmb3IgaXRzIG91dGVyIGJveC4KLSAgYnVmWzI1XSA9IDE7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxCb3hSZWFkZXI+IHJlYWRlcigKLSAgICAgIEJveFJlYWRlcjo6UmVhZFRvcExldmVsQm94KCZidWZbMF0sIGJ1Zi5zaXplKCksIG1lZGlhX2xvZ18sICZlcnIpKTsKLQotICBTa2lwQm94IGJveDsKLSAgRVhQRUNUX0ZBTFNFKGJveC5QYXJzZShyZWFkZXIuZ2V0KCkpKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFdyb25nRm91ckNDVGVzdCkgewotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSBHZXRCdWYoKTsKLSAgYm9vbCBlcnI7Ci0KLSAgLy8gU2V0IGFuIHVucmVjb2duaXplZCB0b3AtbGV2ZWwgRm91ckNDLgotICBidWZbNF0gPSAweDQ0OwotICBidWZbNV0gPSAweDQxOwotICBidWZbNl0gPSAweDRjOwotICBidWZbN10gPSAweDQ1OwotCi0gIEVYUEVDVF9NRURJQV9MT0coSGFzU3Vic3RyKCJVbnJlY29nbml6ZWQgdG9wLWxldmVsIGJveCB0eXBlIERBTEUiKSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEJveFJlYWRlcj4gcmVhZGVyKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goJmJ1ZlswXSwgYnVmLnNpemUoKSwgbWVkaWFfbG9nXywgJmVycikpOwotICBFWFBFQ1RfRkFMU0UocmVhZGVyLmdldCgpKTsKLSAgRVhQRUNUX1RSVUUoZXJyKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFNjYW5DaGlsZHJlblRlc3QpIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmID0gR2V0QnVmKCk7Ci0gIGJvb2wgZXJyOwotICBzdGQ6OnVuaXF1ZV9wdHI8Qm94UmVhZGVyPiByZWFkZXIoCi0gICAgICBCb3hSZWFkZXI6OlJlYWRUb3BMZXZlbEJveCgmYnVmWzBdLCBidWYuc2l6ZSgpLCBtZWRpYV9sb2dfLCAmZXJyKSk7Ci0KLSAgRVhQRUNUX1RSVUUocmVhZGVyLT5Ta2lwQnl0ZXMoMTYpICYmIHJlYWRlci0+U2NhbkNoaWxkcmVuKCkpOwotCi0gIEZyZWVCb3ggZnJlZTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyLT5SZWFkQ2hpbGQoJmZyZWUpKTsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci0+UmVhZENoaWxkKCZmcmVlKSk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci0+TWF5YmVSZWFkQ2hpbGQoJmZyZWUpKTsKLQotICBzdGQ6OnZlY3RvcjxQc3NoQm94PiBraWRzOwotCi0gIEVYUEVDVF9UUlVFKHJlYWRlci0+UmVhZENoaWxkcmVuKCZraWRzKSk7Ci0gIEVYUEVDVF9FUSgydSwga2lkcy5zaXplKCkpOwotICBraWRzLmNsZWFyKCk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXItPlJlYWRDaGlsZHJlbigma2lkcykpOwotICBFWFBFQ1RfVFJVRShyZWFkZXItPk1heWJlUmVhZENoaWxkcmVuKCZraWRzKSk7Ci19Ci0KLVRFU1RfRihCb3hSZWFkZXJUZXN0LCBSZWFkQWxsQ2hpbGRyZW5UZXN0KSB7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZiA9IEdldEJ1ZigpOwotICAvLyBNb2RpZnkgYnVmZmVyIHRvIGV4Y2x1ZGUgaXRzIGxhc3QgJ2ZyZWUnIGJveAotICBidWZbM10gPSAweDM4OwotICBib29sIGVycjsKLSAgc3RkOjp1bmlxdWVfcHRyPEJveFJlYWRlcj4gcmVhZGVyKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goJmJ1ZlswXSwgYnVmLnNpemUoKSwgbWVkaWFfbG9nXywgJmVycikpOwotCi0gIHN0ZDo6dmVjdG9yPFBzc2hCb3g+IGtpZHM7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci0+U2tpcEJ5dGVzKDE2KSAmJiByZWFkZXItPlJlYWRBbGxDaGlsZHJlbigma2lkcykpOwotICBFWFBFQ1RfRVEoMnUsIGtpZHMuc2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGtpZHNbMF0udmFsLCAweGRlYWRiZWVmKTsgIC8vIEVuc3VyZSBvcmRlciBpcyBwcmVzZXJ2ZWQKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFNraXBwaW5nQmxvYykgewotICBzdGF0aWMgY29uc3QgdWludDhfdCBrRGF0YVtdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDksICdiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcsICAnbycsICAnYycsICAweDAwfTsKLQotICBUZXN0VG9wTGV2ZWxCb3goa0RhdGEsIHNpemVvZihrRGF0YSksIEZPVVJDQ19CTE9DKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFNraXBwaW5nRW1zZykgewotICBzdGF0aWMgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgJ2UnLCAnbScsICdzJywgJ2cnLAotICAgICAgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gPSAwCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAgICAgICAgLy8gZmxhZ3MgPSAwCi0gICAgICAweDYxLCAweDAwLCAgICAgICAgICAgICAgLy8gc2NoZW1lX2lkX3VyaSA9ICJhIgotICAgICAgMHg2MSwgMHgwMCwgICAgICAgICAgICAgIC8vIHZhbHVlID0gImEiCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAgLy8gdGltZXNjYWxlID0gMQotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgIC8vIHByZXNlbnRhdGlvbl90aW1lX2RlbHRhID0gMgotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgIC8vIGV2ZW50X2R1cmF0aW9uID0gMwotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgIC8vIGlkID0gNAotICAgICAgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwgIC8vIG1lc3NhZ2VfZGF0YVs0XSA9IDB4MDUwNjA3MDgKLSAgfTsKLQotICBUZXN0VG9wTGV2ZWxCb3goa0RhdGEsIHNpemVvZihrRGF0YSksIEZPVVJDQ19FTVNHKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFNraXBwaW5nVXVpZCkgewotICBzdGF0aWMgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgJ3UnLCAgJ3UnLCAgJ2knLCAgJ2QnLAotICAgICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLSAgICAgIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsIDB4MTAsICAvLyB1c2VydHlwZQotICAgICAgMHgwMCwKLSAgfTsKLQotICBUZXN0VG9wTGV2ZWxCb3goa0RhdGEsIHNpemVvZihrRGF0YSksIEZPVVJDQ19VVUlEKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIE5lc3RlZEJveFdpdGhIdWdlU2l6ZSkgewotICAvLyBUaGlzIGRhdGEgaXMgbm90IGEgdmFsaWQgJ2Vtc2cnIGJveC4gSXQgaXMganVzdCB1c2VkIGFzIGEgdG9wLWxldmVsIGJveAotICAvLyBhcyBSZWFkVG9wTGV2ZWxCb3goKSBoYXMgYSByZXN0cmljdGVkIHNldCBvZiBib3hlcyBpdCBhbGxvd3MuIHxrRGF0YXwKLSAgLy8gY29udGFpbnMgYWxsIHRoZSBieXRlcyBhcyBzcGVjaWZpZWQgYnkgdGhlICdlbXNnJyBoZWFkZXIgc2l6ZS4KLSAgLy8gVGhlIG5lc3RlZCBib3ggKCdqdW5rJykgaGFzIGEgbGFyZ2Ugc2l6ZSB0aGF0IHdhcyBjaG9zZW4gdG8gY2F0Y2gKLSAgLy8gaW50ZWdlciBvdmVyZmxvd3MuIFRoZSBuZXN0ZWQgYm94IHNob3VsZCBub3Qgc3BlY2lmeSBtb3JlIHRoYW4gdGhlCi0gIC8vIG51bWJlciBvZiByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGVuY2xvc2luZyBib3guCi0gIHN0YXRpYyBjb25zdCB1aW50OF90IGtEYXRhW10gPSB7Ci0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDI0LCAnZScsICAnbScsICAncycsICAnZycsICAgLy8gb3V0ZXIgYm94Ci0gICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAnaicsICAndScsICAnbicsICAnaycsICAgLy8gbmVzdGVkIGJveAotICAgICAgMHgwMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgzYiwgMHgwMywgIC8vIHJhbmRvbSBkYXRhIGZvciByZXN0Ci0gICAgICAweDAwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAzLCAweDAwLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4fTsKLQotICBib29sIGVycjsKLSAgc3RkOjp1bmlxdWVfcHRyPEJveFJlYWRlcj4gcmVhZGVyKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goa0RhdGEsIHNpemVvZihrRGF0YSksIG1lZGlhX2xvZ18sICZlcnIpKTsKLQotICBFWFBFQ1RfRkFMU0UoZXJyKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyKTsKLSAgRVhQRUNUX0VRKEZPVVJDQ19FTVNHLCByZWFkZXItPnR5cGUoKSk7Ci0gIEVYUEVDVF9GQUxTRShyZWFkZXItPlNjYW5DaGlsZHJlbigpKTsKLX0KLQotVEVTVF9GKEJveFJlYWRlclRlc3QsIFNjYW5DaGlsZHJlbldpdGhJbnZhbGlkQ2hpbGQpIHsKLSAgLy8gVGhpcyBkYXRhIGlzIG5vdCBhIHZhbGlkICdlbXNnJyBib3guIEl0IGlzIGp1c3QgdXNlZCBhcyBhIHRvcC1sZXZlbCBib3gKLSAgLy8gYXMgUmVhZFRvcExldmVsQm94KCkgaGFzIGEgcmVzdHJpY3RlZCBzZXQgb2YgYm94ZXMgaXQgYWxsb3dzLgotICAvLyBUaGUgbmVzdGVkICdlbHN0JyBib3ggaXMgdXNlZCBhcyBpdCBpbmNsdWRlcyBhIGNvdW50IG9mIEVkaXRMaXN0RW50cnkncy4KLSAgLy8gVGhlIHNhbXBsZSBzcGVjaWZpZXMgYSBsYXJnZSBudW1iZXIgb2YgRWRpdExpc3RFbnRyeSdzLCBidXQgb25seSAxIGlzCi0gIC8vIGFjdHVhbGx5IGluY2x1ZGVkIGluIHRoZSBib3guIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IHRoZSBjb2RlIGNoZWNrcwotICAvLyBwcm9wZXJseSB0aGF0IHRoZSBidWZmZXIgY29udGFpbnMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgRWRpdExpc3RFbnRyeSdzCi0gIC8vIChkb2VzIG5vdCBjYXVzZSBhbiBpbnQzMl90IG92ZXJmbG93IHdoZW4gY2hlY2tpbmcgdGhhdCB0aGUgYnl0ZXMgYXJlCi0gIC8vIGF2YWlsYWJsZSwgYW5kIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIpLgotICBzdGF0aWMgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgJ2UnLCAgJ20nLCAgJ3MnLCAgJ2cnLCAgLy8gb3V0ZXIgYm94Ci0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDI0LCAnZScsICAnbCcsICAncycsICAndCcsICAvLyBuZXN0ZWQgYm94Ci0gICAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uID0gMSwgZmxhZ3MgPSAwCi0gICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAgLy8gY291bnQgPSBtYXgsIGJ1dCBvbmx5IDEgYWN0dWFsbHkgaW5jbHVkZWQKLSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQotICBib29sIGVycjsKLSAgc3RkOjp1bmlxdWVfcHRyPEJveFJlYWRlcj4gcmVhZGVyKAotICAgICAgQm94UmVhZGVyOjpSZWFkVG9wTGV2ZWxCb3goa0RhdGEsIHNpemVvZihrRGF0YSksIG1lZGlhX2xvZ18sICZlcnIpKTsKLQotICBFWFBFQ1RfRkFMU0UoZXJyKTsKLSAgRVhQRUNUX1RSVUUocmVhZGVyKTsKLSAgRVhQRUNUX0VRKEZPVVJDQ19FTVNHLCByZWFkZXItPnR5cGUoKSk7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlci0+U2NhbkNoaWxkcmVuKCkpOwotCi0gIC8vICdlbHN0JyBzcGVjaWZpZXMgbG90cyBvZiBFZGl0TGlzdEVudHJ5J3MgYnV0IG9ubHkgaW5jbHVkZXMgMS4gVGh1cwotICAvLyBwYXJzaW5nIGl0IHNob3VsZCBmYWlsLgotICBFZGl0TGlzdCBjaGlsZDsKLSAgRVhQRUNUX0ZBTFNFKHJlYWRlci0+UmVhZENoaWxkKCZjaGlsZCkpOwotfQotCi1URVNUX0YoQm94UmVhZGVyVGVzdCwgUmVhZEFsbENoaWxkcmVuV2l0aEludmFsaWRDaGlsZCkgewotICAvLyBUaGlzIGRhdGEgaXMgbm90IGEgdmFsaWQgJ2Vtc2cnIGJveC4gSXQgaXMganVzdCB1c2VkIGFzIGEgdG9wLWxldmVsIGJveAotICAvLyBhcyBSZWFkVG9wTGV2ZWxCb3goKSBoYXMgYSByZXN0cmljdGVkIHNldCBvZiBib3hlcyBpdCBhbGxvd3MuCi0gIC8vIFRoZSBuZXN0ZWQgJ3RydW4nIGJveCBpcyB1c2VkIGFzIGl0IGluY2x1ZGVzIGEgY291bnQgb2YgdGhlIG51bWJlcgotICAvLyBvZiBzYW1wbGVzLiBUaGUgZGF0YSBzcGVjaWZpZXMgYSBsYXJnZSBudW1iZXIgb2Ygc2FtcGxlcywgYnV0IG9ubHkgMQotICAvLyBpcyBhY3R1YWxseSBpbmNsdWRlZCBpbiB0aGUgYm94LiBWZXJpZnlpbmcgdGhhdCB0aGUgbGFyZ2UgY291bnQgZG9lcyBub3QKLSAgLy8gY2F1c2UgYW4gaW50MzJfdCBvdmVyZmxvdyB3aGljaCB3b3VsZCBhbGxvdyBwYXJzaW5nIG9mIFRyYWNrRnJhZ21lbnRSdW4KLSAgLy8gdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsKLSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsICdlJywgICdtJywgICdzJywgICdnJywgIC8vIG91dGVyIGJveAotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgJ3QnLCAgJ3InLCAgJ3UnLCAgJ24nLCAgLy8gbmVzdGVkIGJveAotICAgICAgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgIC8vIHZlcnNpb24gPSAwLCBmbGFncyA9IHNhbXBsZXMgcHJlc2VudAotICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgIC8vIGNvdW50ID0gbWF4LCBidXQgb25seSAxIGFjdHVhbGx5IGluY2x1ZGVkCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07Ci0KLSAgYm9vbCBlcnI7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxCb3hSZWFkZXI+IHJlYWRlcigKLSAgICAgIEJveFJlYWRlcjo6UmVhZFRvcExldmVsQm94KGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBtZWRpYV9sb2dfLCAmZXJyKSk7Ci0KLSAgRVhQRUNUX0ZBTFNFKGVycik7Ci0gIEVYUEVDVF9UUlVFKHJlYWRlcik7Ci0gIEVYUEVDVF9FUShGT1VSQ0NfRU1TRywgcmVhZGVyLT50eXBlKCkpOwotCi0gIC8vIFJlYWRpbmcgdGhlIGNoaWxkIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBzcGVjaWZpZWQKLSAgLy8gZG9lc24ndCBtYXRjaCB3aGF0IGlzIGluIHRoZSBib3guCi0gIHN0ZDo6dmVjdG9yPFRyYWNrRnJhZ21lbnRSdW4+IGNoaWxkcmVuOwotICBFWFBFQ1RfRkFMU0UocmVhZGVyLT5SZWFkQWxsQ2hpbGRyZW5BbmRDaGVja0ZvdXJDQygmY2hpbGRyZW4pKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODhlZWI4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoZSBlbGVtZW50YXJ5IHN0cmVhbSBzaXplIGlzIHNwZWNpZmljIGJ5IHVwIHRvIDQgYnl0ZXMuCi0vLyBUaGUgTVNCIG9mIGEgYnl0ZSBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIG1vcmUgYnl0ZXMgZm9yIHRoZSBzaXplLgotc3RhdGljIGJvb2wgUmVhZEVTU2l6ZShCaXRSZWFkZXIqIHJlYWRlciwgdWludDMyX3QqIHNpemUpIHsKLSAgdWludDhfdCBtc2I7Ci0gIHVpbnQ4X3QgYnl0ZTsKLQotICAqc2l6ZSA9IDA7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICBSQ0hFQ0socmVhZGVyLT5SZWFkQml0cygxLCAmbXNiKSk7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZEJpdHMoNywgJmJ5dGUpKTsKLSAgICAqc2l6ZSA9ICgqc2l6ZSA8PCA3KSArIGJ5dGU7Ci0KLSAgICBpZiAobXNiID09IDApIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1uYW1lc3BhY2UgbXA0IHsKLQotLy8gc3RhdGljCi1ib29sIEVTRGVzY3JpcHRvcjo6SXNBQUModWludDhfdCBvYmplY3RfdHlwZSkgewotICByZXR1cm4gb2JqZWN0X3R5cGUgPT0ga0lTT18xNDQ5Nl8zIHx8IG9iamVjdF90eXBlID09IGtJU09fMTM4MThfN19BQUNfTEM7Ci19Ci0KLUVTRGVzY3JpcHRvcjo6RVNEZXNjcmlwdG9yKCkgOiBvYmplY3RfdHlwZV8oa0ZvcmJpZGRlbikge30KLQotRVNEZXNjcmlwdG9yOjp+RVNEZXNjcmlwdG9yKCkge30KLQotYm9vbCBFU0Rlc2NyaXB0b3I6OlBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKSB7Ci0gIEJpdFJlYWRlciByZWFkZXIoJmRhdGFbMF0sIGRhdGEuc2l6ZSgpKTsKLSAgdWludDhfdCB0YWc7Ci0gIHVpbnQzMl90IHNpemU7Ci0gIHVpbnQ4X3Qgc3RyZWFtX2RlcGVuZGVuY3lfZmxhZzsKLSAgdWludDhfdCB1cmxfZmxhZzsKLSAgdWludDhfdCBvY3Jfc3RyZWFtX2ZsYWc7Ci0gIHVpbnQxNl90IGR1bW15OwotCi0gIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoOCwgJnRhZykpOwotICBSQ0hFQ0sodGFnID09IGtFU0Rlc2NyVGFnKTsKLSAgUkNIRUNLKFJlYWRFU1NpemUoJnJlYWRlciwgJnNpemUpKTsKLQotICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDE2LCAmZHVtbXkpKTsgIC8vIEVTX0lECi0gIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoMSwgJnN0cmVhbV9kZXBlbmRlbmN5X2ZsYWcpKTsKLSAgUkNIRUNLKHJlYWRlci5SZWFkQml0cygxLCAmdXJsX2ZsYWcpKTsKLSAgUkNIRUNLKCF1cmxfZmxhZyk7ICAvLyBXZSBkb24ndCBzdXBwb3J0IHVybCBmbGFnCi0gIFJDSEVDSyhyZWFkZXIuUmVhZEJpdHMoMSwgJm9jcl9zdHJlYW1fZmxhZykpOwotICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDUsICZkdW1teSkpOyAgLy8gc3RyZWFtUHJpb3JpdHkKLQotICBpZiAoc3RyZWFtX2RlcGVuZGVuY3lfZmxhZykKLSAgICBSQ0hFQ0socmVhZGVyLlJlYWRCaXRzKDE2LCAmZHVtbXkpKTsgICAgICAgICAgICAgICAgICAgICAvLyBkZXBlbmRzT25fRVNfSUQKLSAgaWYgKG9jcl9zdHJlYW1fZmxhZykgUkNIRUNLKHJlYWRlci5SZWFkQml0cygxNiwgJmR1bW15KSk7ICAvLyBPQ1JfRVNfSWQKLQotICBSQ0hFQ0soUGFyc2VEZWNvZGVyQ29uZmlnRGVzY3JpcHRvcigmcmVhZGVyKSk7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXVpbnQ4X3QgRVNEZXNjcmlwdG9yOjpvYmplY3RfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG9iamVjdF90eXBlXzsgfQotCi1jb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgRVNEZXNjcmlwdG9yOjpkZWNvZGVyX3NwZWNpZmljX2luZm8oKSBjb25zdCB7Ci0gIHJldHVybiBkZWNvZGVyX3NwZWNpZmljX2luZm9fOwotfQotCi1ib29sIEVTRGVzY3JpcHRvcjo6UGFyc2VEZWNvZGVyQ29uZmlnRGVzY3JpcHRvcihCaXRSZWFkZXIqIHJlYWRlcikgewotICB1aW50OF90IHRhZzsKLSAgdWludDMyX3Qgc2l6ZTsKLSAgdWludDY0X3QgZHVtbXk7Ci0KLSAgUkNIRUNLKHJlYWRlci0+UmVhZEJpdHMoOCwgJnRhZykpOwotICBSQ0hFQ0sodGFnID09IGtEZWNvZGVyQ29uZmlnRGVzY3JUYWcpOwotICBSQ0hFQ0soUmVhZEVTU2l6ZShyZWFkZXIsICZzaXplKSk7Ci0KLSAgUkNIRUNLKHJlYWRlci0+UmVhZEJpdHMoOCwgJm9iamVjdF90eXBlXykpOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkQml0cyg2NCwgJmR1bW15KSk7Ci0gIFJDSEVDSyhyZWFkZXItPlJlYWRCaXRzKDMyLCAmZHVtbXkpKTsKLSAgUkNIRUNLKFBhcnNlRGVjb2RlclNwZWNpZmljSW5mbyhyZWFkZXIpKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFU0Rlc2NyaXB0b3I6OlBhcnNlRGVjb2RlclNwZWNpZmljSW5mbyhCaXRSZWFkZXIqIHJlYWRlcikgewotICB1aW50OF90IHRhZzsKLSAgdWludDMyX3Qgc2l6ZTsKLQotICBSQ0hFQ0socmVhZGVyLT5SZWFkQml0cyg4LCAmdGFnKSk7Ci0gIFJDSEVDSyh0YWcgPT0ga0RlY29kZXJTcGVjaWZpY0luZm9UYWcpOwotICBSQ0hFQ0soUmVhZEVTU2l6ZShyZWFkZXIsICZzaXplKSk7Ci0KLSAgZGVjb2Rlcl9zcGVjaWZpY19pbmZvXy5yZXNpemUoc2l6ZSk7Ci0gIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgUkNIRUNLKHJlYWRlci0+UmVhZEJpdHMoOCwgJmRlY29kZXJfc3BlY2lmaWNfaW5mb19baV0pKTsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTcyNmFmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0VTX0RFU0NSSVBUT1JfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X0VTX0RFU0NSSVBUT1JfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIEJpdFJlYWRlcjsKLQotbmFtZXNwYWNlIG1wNCB7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBleHRyYWN0ZWQgZnJvbSBJU08gMTQ0OTYgUGFydCAxIFRhYmxlIDUgLQotLy8gb2JqZWN0VHlwZUluZGljYXRpb24gVmFsdWVzLiBPbmx5IHZhbHVlcyBjdXJyZW50bHkgaW4gdXNlIGFyZSBpbmNsdWRlZC4KLWVudW0gT2JqZWN0VHlwZSB7Ci0gIGtGb3JiaWRkZW4gPSAwLAotICBrSVNPXzE0NDk2XzMgPSAweDQwLCAgICAgICAgIC8vIE1QRUc0IEFBQwotICBrSVNPXzEzODE4XzdfQUFDX0xDID0gMHg2NywgIC8vIE1QRUcyIEFBQy1MQwotICBrQUMzID0gMHhhNSwgICAgICAgICAgICAgICAgIC8vIEFDMwotICBrRUFDMyA9IDB4YTYgICAgICAgICAgICAgICAgIC8vIEVBQzMgLyBEb2xieSBEaWdpdGFsIFBsdXMKLX07Ci0KLS8vIFRoaXMgY2xhc3MgcGFyc2Ugb2JqZWN0IHR5cGUgYW5kIGRlY29kZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSBhbgotLy8gZWxlbWVudGFyeSBzdHJlYW0gZGVzY3JpcHRvciwgd2hpY2ggaXMgdXN1YWxseSBjb250YWluZWQgaW4gYW4gZXNkcyBib3guCi0vLyBQbGVhc2UgcmVmZXIgdG8gSVNPIDE0NDk2IFBhcnQgMSA3LjIuNi41IGZvciBtb3JlIGRldGFpbHMuCi1jbGFzcyBNRURJQV9FWFBPUlQgRVNEZXNjcmlwdG9yIHsKLSBwdWJsaWM6Ci0gIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGdpdmVuIG9iamVjdCB0eXBlIGlzIEFBQy4KLSAgc3RhdGljIGJvb2wgSXNBQUModWludDhfdCBvYmplY3RfdHlwZSk7Ci0KLSAgRVNEZXNjcmlwdG9yKCk7Ci0gIH5FU0Rlc2NyaXB0b3IoKTsKLQotICBib29sIFBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQotICB1aW50OF90IG9iamVjdF90eXBlKCkgY29uc3Q7Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBkZWNvZGVyX3NwZWNpZmljX2luZm8oKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGVudW0gVGFnIHsKLSAgICBrRVNEZXNjclRhZyA9IDB4MDMsCi0gICAga0RlY29kZXJDb25maWdEZXNjclRhZyA9IDB4MDQsCi0gICAga0RlY29kZXJTcGVjaWZpY0luZm9UYWcgPSAweDA1Ci0gIH07Ci0KLSAgYm9vbCBQYXJzZURlY29kZXJDb25maWdEZXNjcmlwdG9yKEJpdFJlYWRlciogcmVhZGVyKTsKLSAgYm9vbCBQYXJzZURlY29kZXJTcGVjaWZpY0luZm8oQml0UmVhZGVyKiByZWFkZXIpOwotCi0gIHVpbnQ4X3Qgb2JqZWN0X3R5cGVfOwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkZWNvZGVyX3NwZWNpZmljX2luZm9fOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfRVNfREVTQ1JJUFRPUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2VzX2Rlc2NyaXB0b3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxN2RlOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgbXA0IHsKLQotVEVTVChFU0Rlc2NyaXB0b3JUZXN0LCBTaW5nbGVCeXRlTGVuZ3RoVGVzdCkgewotICBFU0Rlc2NyaXB0b3IgZXNfZGVzYzsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDAzLCAweDE5LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDExLCAweDQwLCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMiwgMHgxMCwgMHgwNiwgMHgwMSwgMHgwMn07Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0KLSAgZGF0YS5hc3NpZ24oYnVmZmVyLCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSk7Ci0KLSAgRVhQRUNUX0VRKGVzX2Rlc2Mub2JqZWN0X3R5cGUoKSwga0ZvcmJpZGRlbik7Ci0gIEVYUEVDVF9UUlVFKGVzX2Rlc2MuUGFyc2UoZGF0YSkpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5vYmplY3RfdHlwZSgpLCBrSVNPXzE0NDk2XzMpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKS5zaXplKCksIDJ1KTsKLSAgRVhQRUNUX0VRKGVzX2Rlc2MuZGVjb2Rlcl9zcGVjaWZpY19pbmZvKClbMF0sIDB4MTIpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKVsxXSwgMHgxMCk7Ci19Ci0KLVRFU1QoRVNEZXNjcmlwdG9yVGVzdCwgTm9uQUFDVGVzdCkgewotICBFU0Rlc2NyaXB0b3IgZXNfZGVzYzsKLSAgdWludDhfdCBidWZmZXJbXSA9IHsweDAzLCAweDE5LCAweDAwLCAweDAxLCAweDAwLCAweDA0LCAweDExLCAweDY2LCAweDE1LAotICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMiwgMHgxMiwgMHgxMCwgMHgwNiwgMHgwMSwgMHgwMn07Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0KLSAgZGF0YS5hc3NpZ24oYnVmZmVyLCBidWZmZXIgKyBzaXplb2YoYnVmZmVyKSk7Ci0KLSAgRVhQRUNUX1RSVUUoZXNfZGVzYy5QYXJzZShkYXRhKSk7Ci0gIEVYUEVDVF9ORShlc19kZXNjLm9iamVjdF90eXBlKCksIGtJU09fMTQ0OTZfMyk7Ci0gIEVYUEVDVF9FUShlc19kZXNjLmRlY29kZXJfc3BlY2lmaWNfaW5mbygpLnNpemUoKSwgMnUpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKVswXSwgMHgxMik7Ci0gIEVYUEVDVF9FUShlc19kZXNjLmRlY29kZXJfc3BlY2lmaWNfaW5mbygpWzFdLCAweDEwKTsKLX0KLQotVEVTVChFU0Rlc2NyaXB0b3JUZXN0LCBNdWx0aUJ5dGVMZW5ndGhUZXN0KSB7Ci0gIEVTRGVzY3JpcHRvciBlc19kZXNjOwotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MDMsIDB4ODAsIDB4MTksIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0MCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MTIsIDB4MTAsIDB4MDYsIDB4MDEsIDB4MDJ9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gIEVYUEVDVF9UUlVFKGVzX2Rlc2MuUGFyc2UoZGF0YSkpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5vYmplY3RfdHlwZSgpLCBrSVNPXzE0NDk2XzMpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKS5zaXplKCksIDJ1KTsKLSAgRVhQRUNUX0VRKGVzX2Rlc2MuZGVjb2Rlcl9zcGVjaWZpY19pbmZvKClbMF0sIDB4MTIpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKVsxXSwgMHgxMCk7Ci19Ci0KLVRFU1QoRVNEZXNjcmlwdG9yVGVzdCwgRml2ZUJ5dGVMZW5ndGhUZXN0KSB7Ci0gIEVTRGVzY3JpcHRvciBlc19kZXNjOwotICB1aW50OF90IGJ1ZmZlcltdID0gezB4MDMsIDB4ODAsIDB4MTksIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4ODAsCi0gICAgICAgICAgICAgICAgICAgICAgMHgxMSwgMHg0MCwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDgwLCAweDgwLCAweDgwLAotICAgICAgICAgICAgICAgICAgICAgIDB4ODAsIDB4MDIsIDB4MTIsIDB4MTAsIDB4MDYsIDB4MDEsIDB4MDJ9OwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOwotCi0gIGRhdGEuYXNzaWduKGJ1ZmZlciwgYnVmZmVyICsgc2l6ZW9mKGJ1ZmZlcikpOwotCi0gIEVYUEVDVF9UUlVFKGVzX2Rlc2MuUGFyc2UoZGF0YSkpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5vYmplY3RfdHlwZSgpLCBrSVNPXzE0NDk2XzMpOwotICBFWFBFQ1RfRVEoZXNfZGVzYy5kZWNvZGVyX3NwZWNpZmljX2luZm8oKS5zaXplKCksIDB1KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9mb3VyY2NzLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZm91cmNjcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTMzZjkxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9mb3VyY2NzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9GT1VSQ0NTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9GT1VSQ0NTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDQgewotCi1lbnVtIEZvdXJDQyB7Ci0gIEZPVVJDQ19OVUxMID0gMCwKLSAgRk9VUkNDX0FDMyA9IDB4NjE2MzJkMzMsICAgLy8gImFjLTMiCi0gIEZPVVJDQ19FQUMzID0gMHg2NTYzMmQzMywgIC8vICJlYy0zIgotICBGT1VSQ0NfQVYwMSA9IDB4NjE3NjMwMzEsICAvLyAiYXYwMSIKLSAgRk9VUkNDX0FWMUMgPSAweDYxNzYzMTQzLCAgLy8gImF2MUMiCi0gIEZPVVJDQ19BVkMxID0gMHg2MTc2NjMzMSwKLSAgRk9VUkNDX0FWQzMgPSAweDYxNzY2MzMzLAotICBGT1VSQ0NfQVZDQyA9IDB4NjE3NjYzNDMsCi0gIEZPVVJDQ19CTE9DID0gMHg2MjZDNkY2MywKLSAgRk9VUkNDX0NCQ1MgPSAweDYzNjI2MzczLAotICBGT1VSQ0NfQ0VOQyA9IDB4NjM2NTZlNjMsCi0gIEZPVVJDQ19DTExJID0gMHg2MzZjNmM2OSwKLSAgRk9VUkNDX0NPNjQgPSAweDYzNmYzNjM0LAotICBGT1VSQ0NfQ09MUiA9IDB4NjM2ZjZjNzIsCi0gIEZPVVJDQ19DVFRTID0gMHg2Mzc0NzQ3MywKLSAgRk9VUkNDX0RJTkYgPSAweDY0Njk2ZTY2LAotICBGT1VSQ0NfRURUUyA9IDB4NjU2NDc0NzMsCi0gIEZPVVJDQ19FTVNHID0gMHg2NTZkNzM2NywKLSAgRk9VUkNDX0VMU1QgPSAweDY1NmM3Mzc0LAotICBGT1VSQ0NfRU5DQSA9IDB4NjU2ZTYzNjEsCi0gIEZPVVJDQ19FTkNWID0gMHg2NTZlNjM3NiwKLSAgRk9VUkNDX0VTRFMgPSAweDY1NzM2NDczLAotICBGT1VSQ0NfRlJFRSA9IDB4NjY3MjY1NjUsCi0gIEZPVVJDQ19GUk1BID0gMHg2NjcyNmQ2MSwKLSAgRk9VUkNDX0ZUWVAgPSAweDY2NzQ3OTcwLAotICBGT1VSQ0NfSERMUiA9IDB4Njg2NDZjNzIsCi0gIEZPVVJDQ19ISU5UID0gMHg2ODY5NmU3NCwKLSAgRk9VUkNDX0hFVjEgPSAweDY4NjU3NjMxLAotICBGT1VSQ0NfSFZDMSA9IDB4Njg3NjYzMzEsCi0gIEZPVVJDQ19IVkNDID0gMHg2ODc2NjM0MywKLSAgRk9VUkNDX0lPRFMgPSAweDY5NmY2NDczLAotICBGT1VSQ0NfTURBVCA9IDB4NmQ2NDYxNzQsCi0gIEZPVVJDQ19NRENWID0gMHg2ZDY0NjM3NiwKLSAgRk9VUkNDX01ESEQgPSAweDZkNjQ2ODY0LAotICBGT1VSQ0NfTURJQSA9IDB4NmQ2NDY5NjEsCi0gIEZPVVJDQ19NRUNPID0gMHg2ZDY1NjM2ZiwKLSAgRk9VUkNDX01FSEQgPSAweDZkNjU2ODY0LAotICBGT1VSQ0NfTUVUQSA9IDB4NmQ2NTc0NjEsCi0gIEZPVVJDQ19NRkhEID0gMHg2ZDY2Njg2NCwKLSAgRk9VUkNDX01GUkEgPSAweDZkNjY3MjYxLAotICBGT1VSQ0NfTUlORiA9IDB4NmQ2OTZlNjYsCi0gIEZPVVJDQ19NT09GID0gMHg2ZDZmNmY2NiwKLSAgRk9VUkNDX01PT1YgPSAweDZkNmY2Zjc2LAotICBGT1VSQ0NfTVA0QSA9IDB4NmQ3MDM0NjEsCi0gIEZPVVJDQ19NUDRWID0gMHg2ZDcwMzQ3NiwKLSAgRk9VUkNDX01WRVggPSAweDZkNzY2NTc4LAotICBGT1VSQ0NfTVZIRCA9IDB4NmQ3NjY4NjQsCi0gIEZPVVJDQ19OQ0xYID0gMHg2ZTYzNmM3OCwKLSAgRk9VUkNDX1BBU1AgPSAweDcwNjE3MzcwLAotICBGT1VSQ0NfUERJTiA9IDB4NzA2NDY5NmUsCi0gIEZPVVJDQ19QUkZUID0gMHg3MDcyNjY3NCwKLSAgRk9VUkNDX1BTU0ggPSAweDcwNzM3MzY4LAotICBGT1VSQ0NfU0FJTyA9IDB4NzM2MTY5NmYsCi0gIEZPVVJDQ19TQUlaID0gMHg3MzYxNjk3YSwKLSAgRk9VUkNDX1NCR1AgPSAweDczNjI2NzcwLAotICBGT1VSQ0NfU0JUTCA9IDB4NzM2Mjc0NmMsCi0gIEZPVVJDQ19TQ0hJID0gMHg3MzYzNjg2OSwKLSAgRk9VUkNDX1NDSE0gPSAweDczNjM2ODZkLAotICBGT1VSQ0NfU0RUUCA9IDB4NzM2NDc0NzAsCi0gIEZPVVJDQ19TRUlHID0gMHg3MzY1Njk2NywKLSAgRk9VUkNDX1NFTkMgPSAweDczNjU2ZTYzLAotICBGT1VSQ0NfU0dQRCA9IDB4NzM2NzcwNjQsCi0gIEZPVVJDQ19TSURYID0gMHg3MzY5NjQ3OCwKLSAgRk9VUkNDX1NJTkYgPSAweDczNjk2ZTY2LAotICBGT1VSQ0NfU0tJUCA9IDB4NzM2YjY5NzAsCi0gIEZPVVJDQ19TTUhEID0gMHg3MzZkNjg2NCwKLSAgRk9VUkNDX1NPVU4gPSAweDczNmY3NTZlLAotICBGT1VSQ0NfU1NJWCA9IDB4NzM3MzY5NzgsCi0gIEZPVVJDQ19TVEJMID0gMHg3Mzc0NjI2YywKLSAgRk9VUkNDX1NUQ08gPSAweDczNzQ2MzZmLAotICBGT1VSQ0NfU1RTQyA9IDB4NzM3NDczNjMsCi0gIEZPVVJDQ19TVFNEID0gMHg3Mzc0NzM2NCwKLSAgRk9VUkNDX1NUU1MgPSAweDczNzQ3MzczLAotICBGT1VSQ0NfU1RTWiA9IDB4NzM3NDczN2EsCi0gIEZPVVJDQ19TVFRTID0gMHg3Mzc0NzQ3MywKLSAgRk9VUkNDX1NUWVAgPSAweDczNzQ3OTcwLAotICBGT1VSQ0NfU1VCVCA9IDB4NzM3NTYyNzQsCi0gIEZPVVJDQ19URU5DID0gMHg3NDY1NmU2MywKLSAgRk9VUkNDX1RFWFQgPSAweDc0NjU3ODc0LAotICBGT1VSQ0NfVEZEVCA9IDB4NzQ2NjY0NzQsCi0gIEZPVVJDQ19URkhEID0gMHg3NDY2Njg2NCwKLSAgRk9VUkNDX1RLSEQgPSAweDc0NmI2ODY0LAotICBGT1VSQ0NfVFJBRiA9IDB4NzQ3MjYxNjYsCi0gIEZPVVJDQ19UUkFLID0gMHg3NDcyNjE2YiwKLSAgRk9VUkNDX1RSRVggPSAweDc0NzI2NTc4LAotICBGT1VSQ0NfVFJVTiA9IDB4NzQ3Mjc1NmUsCi0gIEZPVVJDQ19VRFRBID0gMHg3NTY0NzQ2MSwKLSAgRk9VUkNDX1VVSUQgPSAweDc1NzU2OTY0LAotICBGT1VSQ0NfVklERSA9IDB4NzY2OTY0NjUsCi0gIEZPVVJDQ19WTUhEID0gMHg3NjZkNjg2NCwKLSAgRk9VUkNDX1ZQMDkgPSAweDc2NzAzMDM5LAotICBGT1VSQ0NfVlBDQyA9IDB4NzY3MDYzNDMsCi0gIEZPVVJDQ19XSURFID0gMHg3NzY5NjQ2NSwKLX07Ci0KLWNvbnN0IGlubGluZSBzdGQ6OnN0cmluZyBGb3VyQ0NUb1N0cmluZyhGb3VyQ0MgZm91cmNjKSB7Ci0gIGNoYXIgYnVmWzVdOwotICBidWZbMF0gPSAoZm91cmNjID4+IDI0KSAmIDB4ZmY7Ci0gIGJ1ZlsxXSA9IChmb3VyY2MgPj4gMTYpICYgMHhmZjsKLSAgYnVmWzJdID0gKGZvdXJjYyA+PiA4KSAmIDB4ZmY7Ci0gIGJ1ZlszXSA9IChmb3VyY2MpJjB4ZmY7Ci0gIGJ1Zls0XSA9IDA7Ci0KLSAgLy8gUmV0dXJuIGhleCBpdHNlbGYgaWYgY2hhcmFjdGVycyBjYW4gbm90IGJlIHByaW50ZWQuIEFueSBjaGFyYWN0ZXIgd2l0aGluCi0gIC8vIHRoZSAiQyIgbG9jYWxlIGlzIGNvbnNpZGVyZWQgcHJpbnRhYmxlLgotICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgIGlmICghKGJ1ZltpXSA+IDB4MWYgJiYgYnVmW2ldIDwgMHg3ZikpIHsKLSAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGhleF9zdHJpbmc7Ci0gICAgICBoZXhfc3RyaW5nIDw8ICIweCIgPDwgc3RkOjpoZXggPDwgZm91cmNjOwotICAgICAgcmV0dXJuIGhleF9zdHJpbmcuc3RyKCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9GT1VSQ0NTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvaGV2Yy5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9oZXZjLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDJjYTA4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9oZXZjLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjQ5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9oZXZjLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9oMjY1X3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hdmMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLUhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6SEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKCkKLSAgICA6IGNvbmZpZ3VyYXRpb25WZXJzaW9uKDApLAotICAgICAgZ2VuZXJhbF9wcm9maWxlX3NwYWNlKDApLAotICAgICAgZ2VuZXJhbF90aWVyX2ZsYWcoMCksCi0gICAgICBnZW5lcmFsX3Byb2ZpbGVfaWRjKDApLAotICAgICAgZ2VuZXJhbF9wcm9maWxlX2NvbXBhdGliaWxpdHlfZmxhZ3MoMCksCi0gICAgICBnZW5lcmFsX2NvbnN0cmFpbnRfaW5kaWNhdG9yX2ZsYWdzKDApLAotICAgICAgZ2VuZXJhbF9sZXZlbF9pZGMoMCksCi0gICAgICBtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjKDApLAotICAgICAgcGFyYWxsZWxpc21UeXBlKDApLAotICAgICAgY2hyb21hRm9ybWF0KDApLAotICAgICAgYml0RGVwdGhMdW1hTWludXM4KDApLAotICAgICAgYml0RGVwdGhDaHJvbWFNaW51czgoMCksCi0gICAgICBhdmdGcmFtZVJhdGUoMCksCi0gICAgICBjb25zdGFudEZyYW1lUmF0ZSgwKSwKLSAgICAgIG51bVRlbXBvcmFsTGF5ZXJzKDApLAotICAgICAgdGVtcG9yYWxJZE5lc3RlZCgwKSwKLSAgICAgIGxlbmd0aFNpemVNaW51c09uZSgwKSwKLSAgICAgIG51bU9mQXJyYXlzKDApIHt9Ci0KLUhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6fkhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCgpIHt9Ci1Gb3VyQ0MgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpCb3hUeXBlKCkgY29uc3QgeyByZXR1cm4gRk9VUkNDX0hWQ0M7IH0KLQotYm9vbCBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ6OlBhcnNlKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIHJldHVybiBQYXJzZUludGVybmFsKHJlYWRlciwgcmVhZGVyLT5tZWRpYV9sb2coKSk7Ci19Ci0KLWJvb2wgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpQYXJzZShjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplKSB7Ci0gIEJ1ZmZlclJlYWRlciByZWFkZXIoZGF0YSwgZGF0YV9zaXplKTsKLSAgcmV0dXJuIFBhcnNlSW50ZXJuYWwoJnJlYWRlciwgbmV3IE1lZGlhTG9nKCkpOwotfQotCi1IRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ6OkhWQ0NOQUxBcnJheTo6SFZDQ05BTEFycmF5KCkgOiBmaXJzdF9ieXRlKDApIHt9Ci0KLUhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDo6SFZDQ05BTEFycmF5OjpIVkNDTkFMQXJyYXkoCi0gICAgY29uc3QgSFZDQ05BTEFycmF5JiBvdGhlcikgewotICAqdGhpcyA9IG90aGVyOwotfQotCi1IRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ6OkhWQ0NOQUxBcnJheTo6fkhWQ0NOQUxBcnJheSgpIHt9Ci0KLWJvb2wgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpQYXJzZUludGVybmFsKAotICAgIEJ1ZmZlclJlYWRlciogcmVhZGVyLCBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIHVpbnQ4X3QgcHJvZmlsZV9pbmRpY2F0aW9uID0gMDsKLSAgdWludDMyX3QgZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnc19oaSA9IDA7Ci0gIHVpbnQxNl90IGdlbmVyYWxfY29uc3RyYWludF9pbmRpY2F0b3JfZmxhZ3NfbG8gPSAwOwotICB1aW50OF90IG1pc2MgPSAwOwotICBSQ0hFQ0socmVhZGVyLT5SZWFkMSgmY29uZmlndXJhdGlvblZlcnNpb24pICYmIGNvbmZpZ3VyYXRpb25WZXJzaW9uID09IDEgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDEoJnByb2ZpbGVfaW5kaWNhdGlvbikgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDQoJmdlbmVyYWxfcHJvZmlsZV9jb21wYXRpYmlsaXR5X2ZsYWdzKSAmJgotICAgICAgICAgcmVhZGVyLT5SZWFkNCgmZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnc19oaSkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDIoJmdlbmVyYWxfY29uc3RyYWludF9pbmRpY2F0b3JfZmxhZ3NfbG8pICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZnZW5lcmFsX2xldmVsX2lkYykgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDIoJm1pbl9zcGF0aWFsX3NlZ21lbnRhdGlvbl9pZGMpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZwYXJhbGxlbGlzbVR5cGUpICYmIHJlYWRlci0+UmVhZDEoJmNocm9tYUZvcm1hdCkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDEoJmJpdERlcHRoTHVtYU1pbnVzOCkgJiYKLSAgICAgICAgIHJlYWRlci0+UmVhZDEoJmJpdERlcHRoQ2hyb21hTWludXM4KSAmJiByZWFkZXItPlJlYWQyKCZhdmdGcmFtZVJhdGUpICYmCi0gICAgICAgICByZWFkZXItPlJlYWQxKCZtaXNjKSAmJiByZWFkZXItPlJlYWQxKCZudW1PZkFycmF5cykpOwotCi0gIGdlbmVyYWxfcHJvZmlsZV9zcGFjZSA9IHByb2ZpbGVfaW5kaWNhdGlvbiA+PiA2OwotICBnZW5lcmFsX3RpZXJfZmxhZyA9IChwcm9maWxlX2luZGljYXRpb24gPj4gNSkgJiAxOwotICBnZW5lcmFsX3Byb2ZpbGVfaWRjID0gcHJvZmlsZV9pbmRpY2F0aW9uICYgMHgxZjsKLQotICBnZW5lcmFsX2NvbnN0cmFpbnRfaW5kaWNhdG9yX2ZsYWdzID0gZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnc19oaTsKLSAgZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFncyA8PD0gMTY7Ci0gIGdlbmVyYWxfY29uc3RyYWludF9pbmRpY2F0b3JfZmxhZ3MgfD0gZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnc19sbzsKLQotICBtaW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjICY9IDB4ZmZmOwotICBwYXJhbGxlbGlzbVR5cGUgJj0gMzsKLSAgY2hyb21hRm9ybWF0ICY9IDM7Ci0gIGJpdERlcHRoTHVtYU1pbnVzOCAmPSA3OwotICBiaXREZXB0aENocm9tYU1pbnVzOCAmPSA3OwotCi0gIGNvbnN0YW50RnJhbWVSYXRlID0gbWlzYyA+PiA2OwotICBudW1UZW1wb3JhbExheWVycyA9IChtaXNjID4+IDMpICYgNzsKLSAgdGVtcG9yYWxJZE5lc3RlZCA9IChtaXNjID4+IDIpICYgMTsKLSAgbGVuZ3RoU2l6ZU1pbnVzT25lID0gbWlzYyAmIDM7Ci0KLSAgRFZMT0coMikgPDwgX19GVU5DVElPTl9fIDw8ICIgbnVtT2ZBcnJheXM9IiA8PCBzdGF0aWNfY2FzdDxpbnQ+KG51bU9mQXJyYXlzKTsKLSAgYXJyYXlzLnJlc2l6ZShudW1PZkFycmF5cyk7Ci0gIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1PZkFycmF5czsgaisrKSB7Ci0gICAgUkNIRUNLKHJlYWRlci0+UmVhZDEoJmFycmF5c1tqXS5maXJzdF9ieXRlKSk7Ci0gICAgdWludDE2X3QgbnVtTmFsdXMgPSAwOwotICAgIFJDSEVDSyhyZWFkZXItPlJlYWQyKCZudW1OYWx1cykpOwotICAgIGFycmF5c1tqXS51bml0cy5yZXNpemUobnVtTmFsdXMpOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1OYWx1czsgKytpKSB7Ci0gICAgICB1aW50MTZfdCBuYWx1TGVuZ3RoID0gMDsKLSAgICAgIFJDSEVDSyhyZWFkZXItPlJlYWQyKCZuYWx1TGVuZ3RoKSAmJgotICAgICAgICAgICAgIHJlYWRlci0+UmVhZFZlYygmYXJyYXlzW2pdLnVuaXRzW2ldLCBuYWx1TGVuZ3RoKSk7Ci0gICAgICBEVkxPRyg0KSA8PCBfX0ZVTkNUSU9OX18KLSAgICAgICAgICAgICAgIDw8ICIgbmFsdVR5cGU9IiA8PCBzdGF0aWNfY2FzdDxpbnQ+KGFycmF5c1tqXS5maXJzdF9ieXRlICYgMHgzZikKLSAgICAgICAgICAgICAgIDw8ICIgc2l6ZT0iIDw8IGFycmF5c1tqXS51bml0c1tpXS5zaXplKCk7Ci0gICAgfQotICB9Ci0KLSAgaWYgKG1lZGlhX2xvZy5nZXQoKSkgewotICAgIE1FRElBX0xPRyhJTkZPLCBtZWRpYV9sb2cpIDw8ICJWaWRlbyBjb2RlYzogaGV2YyI7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotVmlkZW9Db2RlY1Byb2ZpbGUgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOjpHZXRWaWRlb1Byb2ZpbGUoKSBjb25zdCB7Ci0gIC8vIFRoZSB2YWx1ZXMgb2YgZ2VuZXJhbF9wcm9maWxlX2lkYyBhcmUgdGFrZW4gZnJvbSB0aGUgSEVWQyBzdGFuZGFyZCwgc2VlCi0gIC8vIHRoZSBsYXRlc3QgaHR0cHM6Ly93d3cuaXR1LmludC9yZWMvVC1SRUMtSC4yNjUvZW4gc2VjdGlvbiBBLjMKLSAgc3dpdGNoIChnZW5lcmFsX3Byb2ZpbGVfaWRjKSB7Ci0gICAgY2FzZSAxOgotICAgICAgcmV0dXJuIEhFVkNQUk9GSUxFX01BSU47Ci0gICAgY2FzZSAyOgotICAgICAgcmV0dXJuIEhFVkNQUk9GSUxFX01BSU4xMDsKLSAgICBjYXNlIDM6Ci0gICAgICByZXR1cm4gSEVWQ1BST0ZJTEVfTUFJTl9TVElMTF9QSUNUVVJFOwotICB9Ci0gIHJldHVybiBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV047Ci19Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtBbm5leEJTdGFydENvZGVbXSA9IHswLCAwLCAwLCAxfTsKLXN0YXRpYyBjb25zdCBpbnQga0FubmV4QlN0YXJ0Q29kZVNpemUgPSA0OwotCi1ib29sIEhFVkM6Okluc2VydFBhcmFtU2V0c0FubmV4QigKLSAgICBjb25zdCBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGhldmNfY29uZmlnLAotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWZmZXIsIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcykgewotICBEQ0hFQ0soSEVWQzo6SXNWYWxpZEFubmV4QigqYnVmZmVyLCAqc3Vic2FtcGxlcykpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxIMjY1UGFyc2VyPiBwYXJzZXIobmV3IEgyNjVQYXJzZXIoKSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHN0YXJ0ID0gJigqYnVmZmVyKVswXTsKLSAgcGFyc2VyLT5TZXRFbmNyeXB0ZWRTdHJlYW0oc3RhcnQsIGJ1ZmZlci0+c2l6ZSgpLCAqc3Vic2FtcGxlcyk7Ci0KLSAgSDI2NU5BTFUgbmFsdTsKLSAgaWYgKHBhcnNlci0+QWR2YW5jZVRvTmV4dE5BTFUoJm5hbHUpICE9IEgyNjVQYXJzZXI6OmtPaykgcmV0dXJuIGZhbHNlOwotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+OjppdGVyYXRvciBjb25maWdfaW5zZXJ0X3BvaW50ID0gYnVmZmVyLT5iZWdpbigpOwotCi0gIGlmIChuYWx1Lm5hbF91bml0X3R5cGUgPT0gSDI2NU5BTFU6OkFVRF9OVVQpIHsKLSAgICAvLyBNb3ZlIGluc2VydCBwb2ludCB0byBqdXN0IGFmdGVyIHRoZSBBVUQuCi0gICAgY29uZmlnX2luc2VydF9wb2ludCArPSAobmFsdS5kYXRhICsgbmFsdS5zaXplKSAtIHN0YXJ0OwotICB9Ci0KLSAgLy8gQ2xlYXIgfHBhcnNlcnwgYW5kIHxzdGFydHwgc2luY2UgdGhleSBhcmVuJ3QgbmVlZGVkIGFueW1vcmUgYW5kCi0gIC8vIHdpbGwgaG9sZCBzdGFsZSBwb2ludGVycyBvbmNlIHRoZSBpbnNlcnQgaGFwcGVucy4KLSAgcGFyc2VyLnJlc2V0KCk7Ci0gIHN0YXJ0ID0gTlVMTDsKLQotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBwYXJhbV9zZXRzOwotICBSQ0hFQ0soSEVWQzo6Q29udmVydENvbmZpZ1RvQW5uZXhCKGhldmNfY29uZmlnLCAmcGFyYW1fc2V0cykpOwotICBEVkxPRyg0KSA8PCBfX0ZVTkNUSU9OX18gPDwgIiBjb252ZXJ0ZWQgaHZjQyB0byBBbm5leEIgIgotICAgICAgICAgICA8PCAiIHNpemU9IiA8PCBwYXJhbV9zZXRzLnNpemUoKSA8PCAiIGluc2VydGVkIGF0ICIKLSAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50Pihjb25maWdfaW5zZXJ0X3BvaW50IC0gYnVmZmVyLT5iZWdpbigpKTsKLQotICBpZiAoc3Vic2FtcGxlcyAmJiAhc3Vic2FtcGxlcy0+ZW1wdHkoKSkgewotICAgIGludCBzdWJzYW1wbGVfaW5kZXggPQotICAgICAgICBBVkM6OkZpbmRTdWJzYW1wbGVJbmRleCgqYnVmZmVyLCBzdWJzYW1wbGVzLCAmKCpjb25maWdfaW5zZXJ0X3BvaW50KSk7Ci0gICAgLy8gVXBkYXRlIHRoZSBzaXplIG9mIHRoZSBzdWJzYW1wbGUgd2hlcmUgU1BTL1BQUyBpcyB0byBiZSBpbnNlcnRlZC4KLSAgICAoKnN1YnNhbXBsZXMpW3N1YnNhbXBsZV9pbmRleF0uY2xlYXJfYnl0ZXMgKz0gcGFyYW1fc2V0cy5zaXplKCk7Ci0gIH0KLQotICBidWZmZXItPmluc2VydChjb25maWdfaW5zZXJ0X3BvaW50LCBwYXJhbV9zZXRzLmJlZ2luKCksIHBhcmFtX3NldHMuZW5kKCkpOwotCi0gIERDSEVDSyhIRVZDOjpJc1ZhbGlkQW5uZXhCKCpidWZmZXIsICpzdWJzYW1wbGVzKSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEhFVkM6OkNvbnZlcnRDb25maWdUb0FubmV4QigKLSAgICBjb25zdCBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGhldmNfY29uZmlnLAotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBidWZmZXIpIHsKLSAgRENIRUNLKGJ1ZmZlci0+ZW1wdHkoKSk7Ci0gIGJ1ZmZlci0+Y2xlYXIoKTsKLQotICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGhldmNfY29uZmlnLmFycmF5cy5zaXplKCk7IGorKykgewotICAgIHVpbnQ4X3QgbmFsdVR5cGUgPSBoZXZjX2NvbmZpZy5hcnJheXNbal0uZmlyc3RfYnl0ZSAmIDB4M2Y7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZXZjX2NvbmZpZy5hcnJheXNbal0udW5pdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgIERWTE9HKDMpIDw8IF9fRlVOQ1RJT05fXyA8PCAiIG5hbHVUeXBlPSIgPDwgc3RhdGljX2Nhc3Q8aW50PihuYWx1VHlwZSkKLSAgICAgICAgICAgICAgIDw8ICIgc2l6ZT0iIDw8IGhldmNfY29uZmlnLmFycmF5c1tqXS51bml0c1tpXS5zaXplKCk7Ci0gICAgICBidWZmZXItPmluc2VydChidWZmZXItPmVuZCgpLCBrQW5uZXhCU3RhcnRDb2RlLAotICAgICAgICAgICAgICAgICAgICAga0FubmV4QlN0YXJ0Q29kZSArIGtBbm5leEJTdGFydENvZGVTaXplKTsKLSAgICAgIGJ1ZmZlci0+aW5zZXJ0KGJ1ZmZlci0+ZW5kKCksIGhldmNfY29uZmlnLmFycmF5c1tqXS51bml0c1tpXS5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgaGV2Y19jb25maWcuYXJyYXlzW2pdLnVuaXRzW2ldLmVuZCgpKTsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVmVyaWZpZXMgQW5uZXhCIE5BTFUgb3JkZXIgYWNjb3JkaW5nIHRvIHNlY3Rpb24gNy40LjIuNC40IG9mIElTTy9JRUMgMjMwMDgtMi4KLWJvb2wgSEVWQzo6SXNWYWxpZEFubmV4Qihjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcykgewotICByZXR1cm4gSXNWYWxpZEFubmV4QigmYnVmZmVyWzBdLCBidWZmZXIuc2l6ZSgpLCBzdWJzYW1wbGVzKTsKLX0KLQotYm9vbCBIRVZDOjpJc1ZhbGlkQW5uZXhCKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+JiBzdWJzYW1wbGVzKSB7Ci0gIERDSEVDSyhidWZmZXIpOwotCi0gIGlmIChzaXplID09IDApIHJldHVybiB0cnVlOwotCi0gIC8vIFRPRE8oc2Vydm9sayk6IEltcGxlbWVudCB0aGlzLCBzZWUgY3JidWcuY29tLzUyNzU5NQotICByZXR1cm4gdHJ1ZTsKLX0KLQotSEVWQ0JpdHN0cmVhbUNvbnZlcnRlcjo6SEVWQ0JpdHN0cmVhbUNvbnZlcnRlcigKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkPiBoZXZjX2NvbmZpZykKLSAgICA6IGhldmNfY29uZmlnXyhzdGQ6Om1vdmUoaGV2Y19jb25maWcpKSB7Ci0gIERDSEVDSyhoZXZjX2NvbmZpZ18pOwotfQotCi1IRVZDQml0c3RyZWFtQ29udmVydGVyOjp+SEVWQ0JpdHN0cmVhbUNvbnZlcnRlcigpIHt9Ci0KLWJvb2wgSEVWQ0JpdHN0cmVhbUNvbnZlcnRlcjo6Q29udmVydEZyYW1lKAotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBmcmFtZV9idWYsIGJvb2wgaXNfa2V5ZnJhbWUsCi0gICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKSBjb25zdCB7Ci0gIFJDSEVDSyhBVkM6OkNvbnZlcnRGcmFtZVRvQW5uZXhCKGhldmNfY29uZmlnXy0+bGVuZ3RoU2l6ZU1pbnVzT25lICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfYnVmLCBzdWJzYW1wbGVzKSk7Ci0KLSAgaWYgKGlzX2tleWZyYW1lKSB7Ci0gICAgLy8gSWYgdGhpcyBpcyBhIGtleWZyYW1lLCB3ZSAocmUtKWluamVjdCBIRVZDIHBhcmFtcyBoZWFkZXJzIGF0IHRoZSBzdGFydCBvZgotICAgIC8vIGEgZnJhbWUuIElmIHN1YnNhbXBsZSBpbmZvIGlzIHByZXNlbnQsIHdlIGFsc28gdXBkYXRlIHRoZSBjbGVhciBieXRlCi0gICAgLy8gY291bnQgZm9yIHRoYXQgZmlyc3Qgc3Vic2FtcGxlLgotICAgIFJDSEVDSyhIRVZDOjpJbnNlcnRQYXJhbVNldHNBbm5leEIoKmhldmNfY29uZmlnXywgZnJhbWVfYnVmLCBzdWJzYW1wbGVzKSk7Ci0gIH0KLQotICBEQ0hFQ0soSEVWQzo6SXNWYWxpZEFubmV4QigqZnJhbWVfYnVmLCAqc3Vic2FtcGxlcykpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvaGV2Yy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2hldmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc0MGVkZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvaGV2Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfSEVWQ19IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfSEVWQ19IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9iaXRzdHJlYW1fY29udmVydGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0cnVjdCBTdWJzYW1wbGVFbnRyeTsKLQotbmFtZXNwYWNlIG1wNCB7Ci0KLXN0cnVjdCBNRURJQV9FWFBPUlQgSEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIDogQm94IHsKLSAgREVDTEFSRV9CT1hfTUVUSE9EUyhIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQpOwotCi0gIC8vIFBhcnNlcyBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgZGF0YSBlbmNvZGVkIGluIHxkYXRhfC4KLSAgLy8gTm90ZTogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcGFyc2UgZGF0YSBvdXRzaWRlIHRoZSBNUDRTdHJlYW1QYXJzZXIKLSAgLy8gICAgICAgY29udGV4dCBhbmQgdGhlcmVmb3JlIHRoZSBib3ggaGVhZGVyIGlzIG5vdCBleHBlY3RlZCB0byBiZSBwcmVzZW50Ci0gIC8vICAgICAgIGluIHxkYXRhfC4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxkYXRhfCB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KLSAgYm9vbCBQYXJzZShjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplKTsKLQotICB1aW50OF90IGNvbmZpZ3VyYXRpb25WZXJzaW9uOwotICB1aW50OF90IGdlbmVyYWxfcHJvZmlsZV9zcGFjZTsKLSAgdWludDhfdCBnZW5lcmFsX3RpZXJfZmxhZzsKLSAgdWludDhfdCBnZW5lcmFsX3Byb2ZpbGVfaWRjOwotICB1aW50MzJfdCBnZW5lcmFsX3Byb2ZpbGVfY29tcGF0aWJpbGl0eV9mbGFnczsKLSAgdWludDY0X3QgZ2VuZXJhbF9jb25zdHJhaW50X2luZGljYXRvcl9mbGFnczsKLSAgdWludDhfdCBnZW5lcmFsX2xldmVsX2lkYzsKLSAgdWludDE2X3QgbWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYzsKLSAgdWludDhfdCBwYXJhbGxlbGlzbVR5cGU7Ci0gIHVpbnQ4X3QgY2hyb21hRm9ybWF0OwotICB1aW50OF90IGJpdERlcHRoTHVtYU1pbnVzODsKLSAgdWludDhfdCBiaXREZXB0aENocm9tYU1pbnVzODsKLSAgdWludDE2X3QgYXZnRnJhbWVSYXRlOwotICB1aW50OF90IGNvbnN0YW50RnJhbWVSYXRlOwotICB1aW50OF90IG51bVRlbXBvcmFsTGF5ZXJzOwotICB1aW50OF90IHRlbXBvcmFsSWROZXN0ZWQ7Ci0gIHVpbnQ4X3QgbGVuZ3RoU2l6ZU1pbnVzT25lOwotICB1aW50OF90IG51bU9mQXJyYXlzOwotCi0gIHR5cGVkZWYgc3RkOjp2ZWN0b3I8dWludDhfdD4gSFZDQ05BTFVuaXQ7Ci0gIHN0cnVjdCBIVkNDTkFMQXJyYXkgewotICAgIEhWQ0NOQUxBcnJheSgpOwotICAgIEhWQ0NOQUxBcnJheShjb25zdCBIVkNDTkFMQXJyYXkmIG90aGVyKTsKLSAgICB+SFZDQ05BTEFycmF5KCk7Ci0gICAgdWludDhfdCBmaXJzdF9ieXRlOwotICAgIHN0ZDo6dmVjdG9yPEhWQ0NOQUxVbml0PiB1bml0czsKLSAgfTsKLSAgc3RkOjp2ZWN0b3I8SFZDQ05BTEFycmF5PiBhcnJheXM7Ci0KLSAgVmlkZW9Db2RlY1Byb2ZpbGUgR2V0VmlkZW9Qcm9maWxlKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBib29sIFBhcnNlSW50ZXJuYWwoQnVmZmVyUmVhZGVyKiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLX07Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBIRVZDIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBib29sIENvbnZlcnRDb25maWdUb0FubmV4QigKLSAgICAgIGNvbnN0IEhFVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCYgaGV2Y19jb25maWcsCi0gICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogYnVmZmVyKTsKLQotICBzdGF0aWMgYm9vbCBJbnNlcnRQYXJhbVNldHNBbm5leEIoCi0gICAgICBjb25zdCBIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQmIGhldmNfY29uZmlnLAotICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGJ1ZmZlciwgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKTsKLQotICAvLyBWZXJpZmllcyB0aGF0IHRoZSBjb250ZW50cyBvZiB8YnVmZmVyfCBjb25mb3JtIHRvCi0gIC8vIFNlY3Rpb24gNy40LjIuNC40IG9mIElTTy9JRUMgMjMwMDgtMi4KLSAgLy8gfHN1YnNhbXBsZXN8IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHBhcnRzIG9mIHRoZSBidWZmZXIgYXJlCi0gIC8vIGVuY3J5cHRlZCBhbmQgd2hpY2ggcGFydHMgYXJlIGNsZWFyLgotICAvLyBSZXR1cm5zIHRydWUgaWYgfGJ1ZmZlcnwgY29udGFpbnMgY29uZm9ybWFudCBBbm5leCBCIGRhdGEKLSAgLy8gVE9ETyhzZXJ2b2xrKTogUmVtb3ZlIHRoZSBzdGQ6OnZlY3RvciB2ZXJzaW9uIHdoZW4gd2UgY2FuIHVzZSwKLSAgLy8gQysrMTEncyBzdGQ6OnZlY3RvcjxUPjo6ZGF0YSgpIG1ldGhvZC4KLSAgc3RhdGljIGJvb2wgSXNWYWxpZEFubmV4Qihjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiYgc3Vic2FtcGxlcyk7Ci0gIHN0YXRpYyBib29sIElzVmFsaWRBbm5leEIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4mIHN1YnNhbXBsZXMpOwotfTsKLQotY2xhc3MgSEVWQ0JpdHN0cmVhbUNvbnZlcnRlciA6IHB1YmxpYyBCaXRzdHJlYW1Db252ZXJ0ZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSEVWQ0JpdHN0cmVhbUNvbnZlcnRlcigKLSAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIRVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ+IGhldmNfY29uZmlnKTsKLQotICAvLyBCaXRzdHJlYW1Db252ZXJ0ZXIgaW50ZXJmYWNlCi0gIGJvb2wgQ29udmVydEZyYW1lKHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBmcmFtZV9idWYsIGJvb2wgaXNfa2V5ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5Piogc3Vic2FtcGxlcykgY29uc3Qgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICB+SEVWQ0JpdHN0cmVhbUNvbnZlcnRlcigpIG92ZXJyaWRlOwotICBzdGQ6OnVuaXF1ZV9wdHI8SEVWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkPiBoZXZjX2NvbmZpZ187Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfSEVWQ19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzZhYzA1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9tcDRfc3RyZWFtX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDgxOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19oZWxwZXJzLmgiCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvY29sb3Jfc3BhY2UuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2hkcl9tZXRhZGF0YS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X3JlYWRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXVzaW5nIGdmeDo6Q29sb3JTcGFjZTsKLQotY29uc3QgaW50IGtNYXhFbXB0eVNhbXBsZUxvZ3MgPSAyMDsKLQotLy8gQ2FsbGVyIHNob3VsZCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgcmV0dXJuIG9mIFVuZW5jcnlwdGVkKCkgaW4gY2FzZSBvZgotLy8gdW5zdXBwb3J0ZWQgc2NoZW1lLgotRW5jcnlwdGlvblNjaGVtZSBHZXRFbmNyeXB0aW9uU2NoZW1lKGNvbnN0IFByb3RlY3Rpb25TY2hlbWVJbmZvJiBzaW5mKSB7Ci0gIGlmICghc2luZi5IYXNTdXBwb3J0ZWRTY2hlbWUoKSkgcmV0dXJuIFVuZW5jcnlwdGVkKCk7Ci0gIEZvdXJDQyBmb3VyY2MgPSBzaW5mLnR5cGUudHlwZTsKLSAgRW5jcnlwdGlvblNjaGVtZTo6Q2lwaGVyTW9kZSBtb2RlID0gRW5jcnlwdGlvblNjaGVtZTo6Q0lQSEVSX01PREVfVU5FTkNSWVBURUQ7Ci0gIEVuY3J5cHRpb25QYXR0ZXJuIHBhdHRlcm47Ci0gIGJvb2wgdXNlc19wYXR0ZXJuX2VuY3J5cHRpb24gPSBmYWxzZTsKLSAgc3dpdGNoIChmb3VyY2MpIHsKLSAgICBjYXNlIEZPVVJDQ19DRU5DOgotICAgICAgbW9kZSA9IEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DVFI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEZPVVJDQ19DQkNTOgotICAgICAgbW9kZSA9IEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DQkM7Ci0gICAgICB1c2VzX3BhdHRlcm5fZW5jcnlwdGlvbiA9IHRydWU7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgTk9UUkVBQ0hFRCgpOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKHVzZXNfcGF0dGVybl9lbmNyeXB0aW9uKSB7Ci0gICAgcGF0dGVybiA9IHtzaW5mLmluZm8udHJhY2tfZW5jcnlwdGlvbi5kZWZhdWx0X2NyeXB0X2J5dGVfYmxvY2ssCi0gICAgICAgICAgICAgICBzaW5mLmluZm8udHJhY2tfZW5jcnlwdGlvbi5kZWZhdWx0X3NraXBfYnl0ZV9ibG9ja307Ci0gIH0KLSAgcmV0dXJuIEVuY3J5cHRpb25TY2hlbWUobW9kZSwgcGF0dGVybik7Ci19Ci0KLWdmeDo6Q29sb3JTcGFjZSBDb252ZXJ0Q29sb3JQYXJhbWV0ZXJJbmZvcm1hdGlvblRvQ29sb3JTcGFjZSgKLSAgICBjb25zdCBDb2xvclBhcmFtZXRlckluZm9ybWF0aW9uJiBpbmZvKSB7Ci0gIGF1dG8gcHJpbWFyeV9pZCA9IHN0YXRpY19jYXN0PENvbG9yU3BhY2U6OlByaW1hcnlJRD4oaW5mby5jb2xvdXJfcHJpbWFyaWVzKTsKLSAgYXV0byB0cmFuc2Zlcl9pZCA9Ci0gICAgICBzdGF0aWNfY2FzdDxDb2xvclNwYWNlOjpUcmFuc2ZlcklEPihpbmZvLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyk7Ci0gIGF1dG8gbWF0cml4X2lkID0gc3RhdGljX2Nhc3Q8Q29sb3JTcGFjZTo6TWF0cml4SUQ+KGluZm8ubWF0cml4X2NvZWZmaWNpZW50cyk7Ci0KLSAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIHdoZXRoZXIgdGhlIGVtYmVkZGVkIGlkcyBhcmUgdmFsaWQuICBXZSByZWx5IG9uCi0gIC8vIHRoZSB1bmRlcmx5aW5nIHZpZGVvIGRlY29kZXIgdG8gcmVqZWN0IGFueSBpZHMgdGhhdCBpdCBkb2Vzbid0IHN1cHBvcnQuCi0gIHJldHVybiBnZng6OkNvbG9yU3BhY2UoCi0gICAgICBwcmltYXJ5X2lkLCB0cmFuc2Zlcl9pZCwgbWF0cml4X2lkLAotICAgICAgaW5mby5mdWxsX3JhbmdlID8gQ29sb3JTcGFjZTo6a1JhbmdlSWRGdWxsIDogQ29sb3JTcGFjZTo6a1JhbmdlSWRMaW1pdGVkKTsKLX0KLQotTWFzdGVyaW5nTWV0YWRhdGEgQ29udmVydE1kY3ZUb01hc3RlcmluZ01ldGFkYXRhKAotICAgIGNvbnN0IE1hc3RlcmluZ0Rpc3BsYXlDb2xvclZvbHVtZSYgbWRjdikgewotICBNYXN0ZXJpbmdNZXRhZGF0YSBtYXN0ZXJpbmdfbWV0YWRhdGE7Ci0KLSAgbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfcl9jaHJvbWF0aWNpdHlfeCA9IG1kY3YuZGlzcGxheV9wcmltYXJpZXNfcng7Ci0gIG1hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3kgPSBtZGN2LmRpc3BsYXlfcHJpbWFyaWVzX3J5OwotICBtYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9nX2Nocm9tYXRpY2l0eV94ID0gbWRjdi5kaXNwbGF5X3ByaW1hcmllc19neDsKLSAgbWFzdGVyaW5nX21ldGFkYXRhLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeSA9IG1kY3YuZGlzcGxheV9wcmltYXJpZXNfZ3k7Ci0gIG1hc3RlcmluZ19tZXRhZGF0YS5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3ggPSBtZGN2LmRpc3BsYXlfcHJpbWFyaWVzX2J4OwotICBtYXN0ZXJpbmdfbWV0YWRhdGEucHJpbWFyeV9iX2Nocm9tYXRpY2l0eV95ID0gbWRjdi5kaXNwbGF5X3ByaW1hcmllc19ieTsKLSAgbWFzdGVyaW5nX21ldGFkYXRhLndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94ID0gbWRjdi53aGl0ZV9wb2ludF94OwotICBtYXN0ZXJpbmdfbWV0YWRhdGEud2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3kgPSBtZGN2LndoaXRlX3BvaW50X3k7Ci0gIG1hc3RlcmluZ19tZXRhZGF0YS5sdW1pbmFuY2VfbWF4ID0KLSAgICAgIHN0YXRpY19jYXN0PGZsb2F0PihtZGN2Lm1heF9kaXNwbGF5X21hc3RlcmluZ19sdW1pbmFuY2UpOwotICBtYXN0ZXJpbmdfbWV0YWRhdGEubHVtaW5hbmNlX21pbiA9Ci0gICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obWRjdi5taW5fZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlKTsKLQotICByZXR1cm4gbWFzdGVyaW5nX21ldGFkYXRhOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotTVA0U3RyZWFtUGFyc2VyOjpNUDRTdHJlYW1QYXJzZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8aW50PiYgYXVkaW9fb2JqZWN0X3R5cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfc2JyKQotICAgIDogYnVmZmVyX2FsbG9jYXRvcl8oYnVmZmVyX2FsbG9jYXRvciksCi0gICAgICBzdGF0ZV8oa1dhaXRpbmdGb3JJbml0KSwKLSAgICAgIG1vb2ZfaGVhZF8oMCksCi0gICAgICBtZGF0X3RhaWxfKDApLAotICAgICAgaGlnaGVzdF9lbmRfb2Zmc2V0XygwKSwKLSAgICAgIGhhc19hdWRpb18oZmFsc2UpLAotICAgICAgaGFzX3ZpZGVvXyhmYWxzZSksCi0gICAgICBhdWRpb19vYmplY3RfdHlwZXNfKGF1ZGlvX29iamVjdF90eXBlcyksCi0gICAgICBoYXNfc2JyXyhoYXNfc2JyKSwKLSAgICAgIG51bV9lbXB0eV9zYW1wbGVzX3NraXBwZWRfKDApIHt9Ci0KLU1QNFN0cmVhbVBhcnNlcjo6fk1QNFN0cmVhbVBhcnNlcigpIHt9Ci0KLXZvaWQgTVA0U3RyZWFtUGFyc2VyOjpJbml0KAotICAgIGNvbnN0IEluaXRDQiYgaW5pdF9jYiwgY29uc3QgTmV3Q29uZmlnQ0ImIGNvbmZpZ19jYiwKLSAgICBjb25zdCBOZXdCdWZmZXJzQ0ImIG5ld19idWZmZXJzX2NiLCBib29sIGlnbm9yZV90ZXh0X3RyYWNrcywKLSAgICBjb25zdCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgY29uc3QgTmV3TWVkaWFTZWdtZW50Q0ImIG5ld19zZWdtZW50X2NiLAotICAgIGNvbnN0IEVuZE1lZGlhU2VnbWVudENCJiBlbmRfb2Zfc2VnbWVudF9jYiwKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSB7Ci0gIERDSEVDS19FUShzdGF0ZV8sIGtXYWl0aW5nRm9ySW5pdCk7Ci0gIERDSEVDSyhpbml0X2NiXy5pc19udWxsKCkpOwotICBEQ0hFQ0soIWluaXRfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFjb25maWdfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFuZXdfYnVmZmVyc19jYi5pc19udWxsKCkpOwotICBEQ0hFQ0soIWVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFuZXdfc2VnbWVudF9jYi5pc19udWxsKCkpOwotICBEQ0hFQ0soIWVuZF9vZl9zZWdtZW50X2NiLmlzX251bGwoKSk7Ci0KLSAgQ2hhbmdlU3RhdGUoa1BhcnNpbmdCb3hlcyk7Ci0gIGluaXRfY2JfID0gaW5pdF9jYjsKLSAgY29uZmlnX2NiXyA9IGNvbmZpZ19jYjsKLSAgbmV3X2J1ZmZlcnNfY2JfID0gbmV3X2J1ZmZlcnNfY2I7Ci0gIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfID0gZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYjsKLSAgbmV3X3NlZ21lbnRfY2JfID0gbmV3X3NlZ21lbnRfY2I7Ci0gIGVuZF9vZl9zZWdtZW50X2NiXyA9IGVuZF9vZl9zZWdtZW50X2NiOwotICBtZWRpYV9sb2dfID0gbWVkaWFfbG9nOwotfQotCi12b2lkIE1QNFN0cmVhbVBhcnNlcjo6UmVzZXQoKSB7Ci0gIHF1ZXVlXy5SZXNldCgpOwotICBydW5zXy5yZXNldCgpOwotICBtb29mX2hlYWRfID0gMDsKLSAgbWRhdF90YWlsXyA9IDA7Ci19Ci0KLXZvaWQgTVA0U3RyZWFtUGFyc2VyOjpGbHVzaCgpIHsKLSAgRENIRUNLX05FKHN0YXRlXywga1dhaXRpbmdGb3JJbml0KTsKLSAgUmVzZXQoKTsKLSAgQ2hhbmdlU3RhdGUoa1BhcnNpbmdCb3hlcyk7Ci19Ci0KLWJvb2wgTVA0U3RyZWFtUGFyc2VyOjpQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSB7Ci0gIERDSEVDS19ORShzdGF0ZV8sIGtXYWl0aW5nRm9ySW5pdCk7Ci0KLSAgaWYgKHN0YXRlXyA9PSBrRXJyb3IpIHJldHVybiBmYWxzZTsKLQotICBxdWV1ZV8uUHVzaChidWYsIHNpemUpOwotCi0gIEJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcnM7Ci0KLSAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgYm9vbCBlcnIgPSBmYWxzZTsKLQotICBkbyB7Ci0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2Uga1dhaXRpbmdGb3JJbml0OgotICAgICAgY2FzZSBrRXJyb3I6Ci0gICAgICAgIE5PVFJFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBjYXNlIGtQYXJzaW5nQm94ZXM6Ci0gICAgICAgIHJlc3VsdCA9IFBhcnNlQm94KCZlcnIpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBrV2FpdGluZ0ZvclNhbXBsZURhdGE6Ci0gICAgICAgIHJlc3VsdCA9IEhhdmVFbm91Z2hEYXRhVG9FbnF1ZXVlU2FtcGxlcygpOwotICAgICAgICBpZiAocmVzdWx0KSBDaGFuZ2VTdGF0ZShrRW1pdHRpbmdTYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Uga0VtaXR0aW5nU2FtcGxlczoKLSAgICAgICAgcmVzdWx0ID0gRW5xdWV1ZVNhbXBsZSgmYnVmZmVycywgJmVycik7Ci0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICBpbnQ2NF90IG1heF9jbGVhciA9IHJ1bnNfLT5HZXRNYXhDbGVhck9mZnNldCgpICsgbW9vZl9oZWFkXzsKLSAgICAgICAgICBlcnIgPSAhUmVhZEFuZERpc2NhcmRNREFUc1VudGlsKG1heF9jbGVhcik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9IHdoaWxlIChyZXN1bHQgJiYgIWVycik7Ci0KLSAgaWYgKCFlcnIpIGVyciA9ICFTZW5kQW5kRmx1c2hTYW1wbGVzKCZidWZmZXJzKTsKLQotICBpZiAoZXJyKSB7Ci0gICAgRExPRyhFUlJPUikgPDwgIkVycm9yIHdoaWxlIHBhcnNpbmcgTVA0IjsKLSAgICBtb292Xy5yZXNldCgpOwotICAgIFJlc2V0KCk7Ci0gICAgQ2hhbmdlU3RhdGUoa0Vycm9yKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNUDRTdHJlYW1QYXJzZXI6OlBhcnNlQm94KGJvb2wqIGVycikgewotICBjb25zdCB1aW50OF90KiBidWY7Ci0gIGludCBzaXplOwotICBxdWV1ZV8uUGVlaygmYnVmLCAmc2l6ZSk7Ci0gIGlmICghc2l6ZSkgcmV0dXJuIGZhbHNlOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxCb3hSZWFkZXI+IHJlYWRlcigKLSAgICAgIEJveFJlYWRlcjo6UmVhZFRvcExldmVsQm94KGJ1Ziwgc2l6ZSwgbWVkaWFfbG9nXywgZXJyKSk7Ci0gIGlmIChyZWFkZXIuZ2V0KCkgPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChyZWFkZXItPnR5cGUoKSA9PSBGT1VSQ0NfTU9PVikgewotICAgICplcnIgPSAhUGFyc2VNb292KHJlYWRlci5nZXQoKSk7Ci0gIH0gZWxzZSBpZiAocmVhZGVyLT50eXBlKCkgPT0gRk9VUkNDX01PT0YpIHsKLSAgICBtb29mX2hlYWRfID0gcXVldWVfLmhlYWQoKTsKLSAgICAqZXJyID0gIVBhcnNlTW9vZihyZWFkZXIuZ2V0KCkpOwotCi0gICAgLy8gU2V0IHVwIGZpcnN0IG1kYXQgb2Zmc2V0IGZvciBSZWFkTURBVHNVbnRpbCgpLgotICAgIG1kYXRfdGFpbF8gPSBxdWV1ZV8uaGVhZCgpICsgcmVhZGVyLT5zaXplKCk7Ci0KLSAgICAvLyBSZXR1cm4gZWFybHkgdG8gYXZvaWQgZXZpY3RpbmcgJ21vb2YnIGRhdGEgZnJvbSBxdWV1ZS4gQXV4aWxpYXJ5IGluZm8gbWF5Ci0gICAgLy8gYmUgbG9jYXRlZCBhbnl3aGVyZSBpbiB0aGUgZmlsZSwgaW5jbHVkaW5nIGluc2lkZSB0aGUgJ21vb2YnIGl0c2VsZi4KLSAgICAvLyAoU2luY2UgJ2RlZmF1bHQtYmFzZS1pcy1tb29mJyBpcyBtYW5kYXRlZCwgbm8gZGF0YSByZWZlcmVuY2VzIGNhbiBjb21lCi0gICAgLy8gYmVmb3JlIHRoZSBoZWFkIG9mIHRoZSAnbW9vZicsIHNvIGtlZXBpbmcgdGhpcyBib3ggYXJvdW5kIGlzIHN1ZmZpY2llbnQuKQotICAgIHJldHVybiAhKCplcnIpOwotICB9IGVsc2UgewotICAgIC8vIFRPRE8od29sZW5ldHosY2hjdW5uaW5naGFtKTogRW5mb3JjZSBtb3JlIHN0cmljdCBhZGhlcmVuY2UgdG8gTVNFIGJ5dGUKLSAgICAvLyBzdHJlYW0gc3BlYyBmb3IgZnR5cCBhbmQgc3R5cC4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNTA0NTE0LgotICAgIERWTE9HKDIpIDw8ICJTa2lwcGluZyB1bnJlY29nbml6ZWQgdG9wLWxldmVsIGJveDogIgotICAgICAgICAgICAgIDw8IEZvdXJDQ1RvU3RyaW5nKHJlYWRlci0+dHlwZSgpKTsKLSAgfQotCi0gIHF1ZXVlXy5Qb3AocmVhZGVyLT5zaXplKCkpOwotICByZXR1cm4gISgqZXJyKTsKLX0KLQotYm9vbCBNUDRTdHJlYW1QYXJzZXI6OlBhcnNlTW9vdihCb3hSZWFkZXIqIHJlYWRlcikgewotICBtb292Xy5yZXNldChuZXcgTW92aWUpOwotICBSQ0hFQ0sobW9vdl8tPlBhcnNlKHJlYWRlcikpOwotICBydW5zXy5yZXNldCgpOwotICBhdWRpb190cmFja19pZHNfLmNsZWFyKCk7Ci0gIHZpZGVvX3RyYWNrX2lkc18uY2xlYXIoKTsKLSAgaXNfdHJhY2tfZW5jcnlwdGVkXy5jbGVhcigpOwotCi0gIGhhc19hdWRpb18gPSBmYWxzZTsKLSAgaGFzX3ZpZGVvXyA9IGZhbHNlOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gbWVkaWFfdHJhY2tzKG5ldyBNZWRpYVRyYWNrcygpKTsKLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2NvbmZpZzsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIHZpZGVvX2NvbmZpZzsKLSAgaW50IGRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50ID0gMDsKLSAgaW50IGRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMDsKLSAgaW50IGRldGVjdGVkX3RleHRfdHJhY2tfY291bnQgPSAwOwotCi0gIGZvciAoc3RkOjp2ZWN0b3I8VHJhY2s+Ojpjb25zdF9pdGVyYXRvciB0cmFjayA9IG1vb3ZfLT50cmFja3MuYmVnaW4oKTsKLSAgICAgICB0cmFjayAhPSBtb292Xy0+dHJhY2tzLmVuZCgpOyArK3RyYWNrKSB7Ci0gICAgY29uc3QgU2FtcGxlRGVzY3JpcHRpb24mIHNhbXBfZGVzY3IgPQotICAgICAgICB0cmFjay0+bWVkaWEuaW5mb3JtYXRpb24uc2FtcGxlX3RhYmxlLmRlc2NyaXB0aW9uOwotCi0gICAgLy8gVE9ETzogV2hlbiBjb2RlYyByZWNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQsIGRldGVjdCBhbmQgc2VuZAotICAgIC8vIGEgY29kZWMgcmVjb25maWd1cmF0aW9uIGZvciBmcmFnbWVudHMgdXNpbmcgYSBzYW1wbGUgZGVzY3JpcHRpb24gaW5kZXgKLSAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgb25lCi0gICAgc2l6ZV90IGRlc2NfaWR4ID0gMDsKLSAgICBmb3IgKHNpemVfdCB0ID0gMDsgdCA8IG1vb3ZfLT5leHRlbmRzLnRyYWNrcy5zaXplKCk7IHQrKykgewotICAgICAgY29uc3QgVHJhY2tFeHRlbmRzJiB0cmV4ID0gbW9vdl8tPmV4dGVuZHMudHJhY2tzW3RdOwotICAgICAgaWYgKHRyZXgudHJhY2tfaWQgPT0gdHJhY2stPmhlYWRlci50cmFja19pZCkgewotICAgICAgICBkZXNjX2lkeCA9IHRyZXguZGVmYXVsdF9zYW1wbGVfZGVzY3JpcHRpb25faW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBSQ0hFQ0soZGVzY19pZHggPiAwKTsKLSAgICBkZXNjX2lkeCAtPSAxOyAgLy8gQk1GRiBkZXNjcmlwdG9yIGluZGV4IGlzIG9uZS1iYXNlZAotCi0gICAgaWYgKHRyYWNrLT5tZWRpYS5oYW5kbGVyLnR5cGUgPT0ga0F1ZGlvKSB7Ci0gICAgICBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudCsrOwotCi0gICAgICBSQ0hFQ0soIXNhbXBfZGVzY3IuYXVkaW9fZW50cmllcy5lbXB0eSgpKTsKLQotICAgICAgLy8gSXQgaXMgbm90IHVuY29tbW9uIHRvIGZpbmQgb3RoZXJ3aXNlLXZhbGlkIGZpbGVzIHdpdGggaW5jb3JyZWN0IHNhbXBsZQotICAgICAgLy8gZGVzY3JpcHRpb24gaW5kaWNlcywgc28gd2UgZmFpbCBncmFjZWZ1bGx5IGluIHRoYXQgY2FzZS4KLSAgICAgIGlmIChkZXNjX2lkeCA+PSBzYW1wX2Rlc2NyLmF1ZGlvX2VudHJpZXMuc2l6ZSgpKSBkZXNjX2lkeCA9IDA7Ci0gICAgICBjb25zdCBBdWRpb1NhbXBsZUVudHJ5JiBlbnRyeSA9IHNhbXBfZGVzY3IuYXVkaW9fZW50cmllc1tkZXNjX2lkeF07Ci0gICAgICBjb25zdCBBQUMmIGFhYyA9IGVudHJ5LmVzZHMuYWFjOwotCi0gICAgICAvLyBGb3IgZW5jcnlwdGVkIGF1ZGlvIHN0cmVhbXMgZW50cnkuZm9ybWF0IGlzIEZPVVJDQ19FTkNBIGFuZCBhY3R1YWwKLSAgICAgIC8vIGZvcm1hdCBpcyBpbiBlbnRyeS5zaW5mLmZvcm1hdC5mb3JtYXQuCi0gICAgICBGb3VyQ0MgYXVkaW9fZm9ybWF0ID0gKGVudHJ5LmZvcm1hdCA9PSBGT1VSQ0NfRU5DQSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbnRyeS5zaW5mLmZvcm1hdC5mb3JtYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlbnRyeS5mb3JtYXQ7Ci0KLSAgICAgIGlmIChhdWRpb19mb3JtYXQgIT0gRk9VUkNDX01QNEEgJiYgYXVkaW9fZm9ybWF0ICE9IEZPVVJDQ19BQzMgJiYKLSAgICAgICAgICBhdWRpb19mb3JtYXQgIT0gRk9VUkNDX0VBQzMpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgIlVuc3VwcG9ydGVkIGF1ZGlvIGZvcm1hdCAweCIgPDwgc3RkOjpoZXggPDwgZW50cnkuZm9ybWF0Ci0gICAgICAgICAgICA8PCAiIGluIHN0c2QgYm94LiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgdWludDhfdCBhdWRpb190eXBlID0gZW50cnkuZXNkcy5vYmplY3RfdHlwZTsKLSAgICAgIGlmIChhdWRpb190eXBlID09IGtGb3JiaWRkZW4pIHsKLSAgICAgICAgaWYgKGF1ZGlvX2Zvcm1hdCA9PSBGT1VSQ0NfQUMzKSBhdWRpb190eXBlID0ga0FDMzsKLSAgICAgICAgaWYgKGF1ZGlvX2Zvcm1hdCA9PSBGT1VSQ0NfRUFDMykgYXVkaW9fdHlwZSA9IGtFQUMzOwotICAgICAgfQotICAgICAgRFZMT0coMSkgPDwgImF1ZGlvX3R5cGUgMHgiIDw8IHN0ZDo6aGV4IDw8IHN0YXRpY19jYXN0PGludD4oYXVkaW9fdHlwZSk7Ci0gICAgICBpZiAoYXVkaW9fb2JqZWN0X3R5cGVzXy5maW5kKGF1ZGlvX3R5cGUpID09IGF1ZGlvX29iamVjdF90eXBlc18uZW5kKCkpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgImF1ZGlvIG9iamVjdCB0eXBlIDB4IiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50PihhdWRpb190eXBlKQotICAgICAgICAgICAgPDwgIiBkb2VzIG5vdCBtYXRjaCB3aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgbWltZXR5cGUuIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBBdWRpb0NvZGVjIGNvZGVjID0ga1Vua25vd25BdWRpb0NvZGVjOwotICAgICAgQ2hhbm5lbExheW91dCBjaGFubmVsX2xheW91dCA9IENIQU5ORUxfTEFZT1VUX05PTkU7Ci0gICAgICBpbnQgc2FtcGxlX3Blcl9zZWNvbmQgPSAwOwotICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZXh0cmFfZGF0YTsKLSAgICAgIC8vIENoZWNrIGlmIGl0IGlzIE1QRUc0IEFBQyBkZWZpbmVkIGluIElTTyAxNDQ5NiBQYXJ0IDMgb3IKLSAgICAgIC8vIHN1cHBvcnRlZCBNUEVHMiBBQUMgdmFyaWFudHMuCi0gICAgICBpZiAoRVNEZXNjcmlwdG9yOjpJc0FBQyhhdWRpb190eXBlKSkgewotICAgICAgICBjb2RlYyA9IGtDb2RlY0FBQzsKLSAgICAgICAgY2hhbm5lbF9sYXlvdXQgPSBhYWMuR2V0Q2hhbm5lbExheW91dChoYXNfc2JyXyk7Ci0gICAgICAgIHNhbXBsZV9wZXJfc2Vjb25kID0gYWFjLkdldE91dHB1dFNhbXBsZXNQZXJTZWNvbmQoaGFzX3Nicl8pOwotICAgICAgICBleHRyYV9kYXRhID0gYWFjLmNvZGVjX3NwZWNpZmljX2RhdGEoKTsKLSAgICAgIH0gZWxzZSBpZiAoYXVkaW9fdHlwZSA9PSBrQUMzKSB7Ci0gICAgICAgIGNvZGVjID0ga0NvZGVjQUMzOwotICAgICAgICBjaGFubmVsX2xheW91dCA9IEd1ZXNzQ2hhbm5lbExheW91dChlbnRyeS5jaGFubmVsY291bnQpOwotICAgICAgICBzYW1wbGVfcGVyX3NlY29uZCA9IGVudHJ5LnNhbXBsZXJhdGU7Ci0gICAgICB9IGVsc2UgaWYgKGF1ZGlvX3R5cGUgPT0ga0VBQzMpIHsKLSAgICAgICAgY29kZWMgPSBrQ29kZWNFQUMzOwotICAgICAgICBjaGFubmVsX2xheW91dCA9IEd1ZXNzQ2hhbm5lbExheW91dChlbnRyeS5jaGFubmVsY291bnQpOwotICAgICAgICBzYW1wbGVfcGVyX3NlY29uZCA9IGVudHJ5LnNhbXBsZXJhdGU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgICA8PCAiVW5zdXBwb3J0ZWQgYXVkaW8gb2JqZWN0IHR5cGUgMHgiIDw8IHN0ZDo6aGV4Ci0gICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxpbnQ+KGF1ZGlvX3R5cGUpIDw8ICIgaW4gZXNkcy4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIFNhbXBsZUZvcm1hdCBzYW1wbGVfZm9ybWF0OwotICAgICAgaWYgKGVudHJ5LnNhbXBsZXNpemUgPT0gOCkgewotICAgICAgICBzYW1wbGVfZm9ybWF0ID0ga1NhbXBsZUZvcm1hdFU4OwotICAgICAgfSBlbHNlIGlmIChlbnRyeS5zYW1wbGVzaXplID09IDE2KSB7Ci0gICAgICAgIHNhbXBsZV9mb3JtYXQgPSBrU2FtcGxlRm9ybWF0UzE2OwotICAgICAgfSBlbHNlIGlmIChlbnRyeS5zYW1wbGVzaXplID09IDI0KSB7Ci0gICAgICAgIHNhbXBsZV9mb3JtYXQgPSBrU2FtcGxlRm9ybWF0UzI0OwotICAgICAgfSBlbHNlIGlmIChlbnRyeS5zYW1wbGVzaXplID09IDMyKSB7Ci0gICAgICAgIHNhbXBsZV9mb3JtYXQgPSBrU2FtcGxlRm9ybWF0UzMyOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTE9HKEVSUk9SKSA8PCAiVW5zdXBwb3J0ZWQgc2FtcGxlIHNpemUuIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICB1aW50MzJfdCBhdWRpb190cmFja19pZCA9IHRyYWNrLT5oZWFkZXIudHJhY2tfaWQ7Ci0gICAgICBpZiAoYXVkaW9fdHJhY2tfaWRzXy5maW5kKGF1ZGlvX3RyYWNrX2lkKSAhPSBhdWRpb190cmFja19pZHNfLmVuZCgpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICAgIDw8ICJBdWRpbyB0cmFjayB3aXRoIHRyYWNrX2lkPSIgPDwgYXVkaW9fdHJhY2tfaWQKLSAgICAgICAgICAgIDw8ICIgYWxyZWFkeSBwcmVzZW50LiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGJvb2wgaXNfdHJhY2tfZW5jcnlwdGVkID0gZW50cnkuc2luZi5pbmZvLnRyYWNrX2VuY3J5cHRpb24uaXNfZW5jcnlwdGVkOwotICAgICAgaXNfdHJhY2tfZW5jcnlwdGVkX1thdWRpb190cmFja19pZF0gPSBpc190cmFja19lbmNyeXB0ZWQ7Ci0gICAgICBFbmNyeXB0aW9uU2NoZW1lIHNjaGVtZSA9IFVuZW5jcnlwdGVkKCk7Ci0gICAgICBpZiAoaXNfdHJhY2tfZW5jcnlwdGVkKSB7Ci0gICAgICAgIHNjaGVtZSA9IEdldEVuY3J5cHRpb25TY2hlbWUoZW50cnkuc2luZik7Ci0gICAgICAgIGlmICghc2NoZW1lLmlzX2VuY3J5cHRlZCgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBhdWRpb19jb25maWcuSW5pdGlhbGl6ZShjb2RlYywgc2FtcGxlX2Zvcm1hdCwgY2hhbm5lbF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfcGVyX3NlY29uZCwgZXh0cmFfZGF0YSwgc2NoZW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhKCksIDApOwotICAgICAgRFZMT0coMSkgPDwgImF1ZGlvX3RyYWNrX2lkPSIgPDwgYXVkaW9fdHJhY2tfaWQKLSAgICAgICAgICAgICAgIDw8ICIgY29uZmlnPSIgPDwgYXVkaW9fY29uZmlnLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwotICAgICAgaWYgKCFhdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkludmFsaWQgYXVkaW8gZGVjb2RlciBjb25maWc6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBhdWRpb19jb25maWcuQXNIdW1hblJlYWRhYmxlU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGhhc19hdWRpb18gPSB0cnVlOwotICAgICAgYXVkaW9fdHJhY2tfaWRzXy5pbnNlcnQoYXVkaW9fdHJhY2tfaWQpOwotICAgICAgY29uc3QgY2hhciogdHJhY2tfa2luZCA9IChhdWRpb190cmFja19pZHNfLnNpemUoKSA9PSAxID8gIm1haW4iIDogIiIpOwotICAgICAgbWVkaWFfdHJhY2tzLT5BZGRBdWRpb1RyYWNrKGF1ZGlvX2NvbmZpZywgYXVkaW9fdHJhY2tfaWQsIHRyYWNrX2tpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1lZGlhLmhhbmRsZXIubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+bWVkaWEuaGVhZGVyLmxhbmd1YWdlKCkpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKHRyYWNrLT5tZWRpYS5oYW5kbGVyLnR5cGUgPT0ga1ZpZGVvKSB7Ci0gICAgICBkZXRlY3RlZF92aWRlb190cmFja19jb3VudCsrOwotCi0gICAgICBSQ0hFQ0soIXNhbXBfZGVzY3IudmlkZW9fZW50cmllcy5lbXB0eSgpKTsKLSAgICAgIGlmIChkZXNjX2lkeCA+PSBzYW1wX2Rlc2NyLnZpZGVvX2VudHJpZXMuc2l6ZSgpKSBkZXNjX2lkeCA9IDA7Ci0gICAgICBjb25zdCBWaWRlb1NhbXBsZUVudHJ5JiBlbnRyeSA9IHNhbXBfZGVzY3IudmlkZW9fZW50cmllc1tkZXNjX2lkeF07Ci0KLSAgICAgIGlmICghZW50cnkuSXNGb3JtYXRWYWxpZCgpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICAgIDw8ICJVbnN1cHBvcnRlZCB2aWRlbyBmb3JtYXQgMHgiIDw8IHN0ZDo6aGV4IDw8IGVudHJ5LmZvcm1hdAotICAgICAgICAgICAgPDwgIiBpbiBzdHNkIGJveC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRPRE86IFJlY292ZXIgY29ycmVjdCBjcm9wIGJveAotICAgICAgbWF0aDo6U2l6ZSBjb2RlZF9zaXplKGVudHJ5LndpZHRoLCBlbnRyeS5oZWlnaHQpOwotICAgICAgbWF0aDo6UmVjdCB2aXNpYmxlX3JlY3QoY29kZWRfc2l6ZSk7Ci0KLSAgICAgIC8vIElmIFBBU1AgaXMgYXZhaWxhYmxlLCB1c2UgdGhlIGNvZGVkIHNpemUgYW5kIFBBU1AgdG8gY2FsY3VsYXRlIHRoZQotICAgICAgLy8gbmF0dXJhbCBzaXplLiBPdGhlcndpc2UsIHVzZSB0aGUgc2l6ZSBpbiB0cmFjayBoZWFkZXIgZm9yIG5hdHVyYWwgc2l6ZS4KLSAgICAgIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplKHZpc2libGVfcmVjdC5zaXplKCkpOwotICAgICAgaWYgKGVudHJ5LnBpeGVsX2FzcGVjdC5oX3NwYWNpbmcgIT0gMSB8fAotICAgICAgICAgIGVudHJ5LnBpeGVsX2FzcGVjdC52X3NwYWNpbmcgIT0gMSkgewotICAgICAgICBuYXR1cmFsX3NpemUgPQotICAgICAgICAgICAgR2V0TmF0dXJhbFNpemUodmlzaWJsZV9yZWN0LnNpemUoKSwgZW50cnkucGl4ZWxfYXNwZWN0Lmhfc3BhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnBpeGVsX2FzcGVjdC52X3NwYWNpbmcpOwotICAgICAgfSBlbHNlIGlmICh0cmFjay0+aGVhZGVyLndpZHRoICYmIHRyYWNrLT5oZWFkZXIuaGVpZ2h0KSB7Ci0gICAgICAgIG5hdHVyYWxfc2l6ZSA9IG1hdGg6OlNpemUodHJhY2stPmhlYWRlci53aWR0aCwgdHJhY2stPmhlYWRlci5oZWlnaHQpOwotICAgICAgfQotCi0gICAgICB1aW50MzJfdCB2aWRlb190cmFja19pZCA9IHRyYWNrLT5oZWFkZXIudHJhY2tfaWQ7Ci0gICAgICBpZiAodmlkZW9fdHJhY2tfaWRzXy5maW5kKHZpZGVvX3RyYWNrX2lkKSAhPSB2aWRlb190cmFja19pZHNfLmVuZCgpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgICAgIDw8ICJWaWRlbyB0cmFjayB3aXRoIHRyYWNrX2lkPSIgPDwgdmlkZW9fdHJhY2tfaWQKLSAgICAgICAgICAgIDw8ICIgYWxyZWFkeSBwcmVzZW50LiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGJvb2wgaXNfdHJhY2tfZW5jcnlwdGVkID0gZW50cnkuc2luZi5pbmZvLnRyYWNrX2VuY3J5cHRpb24uaXNfZW5jcnlwdGVkOwotICAgICAgaXNfdHJhY2tfZW5jcnlwdGVkX1t2aWRlb190cmFja19pZF0gPSBpc190cmFja19lbmNyeXB0ZWQ7Ci0gICAgICBFbmNyeXB0aW9uU2NoZW1lIHNjaGVtZSA9IFVuZW5jcnlwdGVkKCk7Ci0gICAgICBpZiAoaXNfdHJhY2tfZW5jcnlwdGVkKSB7Ci0gICAgICAgIHNjaGVtZSA9IEdldEVuY3J5cHRpb25TY2hlbWUoZW50cnkuc2luZik7Ci0gICAgICAgIGlmICghc2NoZW1lLmlzX2VuY3J5cHRlZCgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICB2aWRlb19jb25maWcuSW5pdGlhbGl6ZShlbnRyeS52aWRlb19jb2RlYywgZW50cnkudmlkZW9fY29kZWNfcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBJWEVMX0ZPUk1BVF9ZVjEyLCBDT0xPUl9TUEFDRV9IRF9SRUM3MDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlZF9zaXplLCB2aXNpYmxlX3JlY3QsIG5hdHVyYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRlY29kZXItc3BlY2lmaWMgYnVmZmVyIG5lZWRlZCBmb3IgQVZDOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1BTL1BQUyBhcmUgZW1iZWRkZWQgaW4gdGhlIHZpZGVvIHN0cmVhbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlFeHRyYURhdGEoKSwgc2NoZW1lKTsKLSAgICAgIGlmIChlbnRyeS5jb2xvcl9wYXJhbWV0ZXJfaW5mb3JtYXRpb24pIHsKLSAgICAgICAgV2ViTUNvbG9yTWV0YWRhdGEgY29sb3JfbWV0YWRhdGEgPSB7fTsKLQotICAgICAgICBjb2xvcl9tZXRhZGF0YS5jb2xvcl9zcGFjZSA9Ci0gICAgICAgICAgICBDb252ZXJ0Q29sb3JQYXJhbWV0ZXJJbmZvcm1hdGlvblRvQ29sb3JTcGFjZSgKLSAgICAgICAgICAgICAgICAqZW50cnkuY29sb3JfcGFyYW1ldGVyX2luZm9ybWF0aW9uKTsKLQotICAgICAgICBpZiAoZW50cnkubWFzdGVyaW5nX2Rpc3BsYXlfY29sb3Jfdm9sdW1lKSB7Ci0gICAgICAgICAgY29sb3JfbWV0YWRhdGEuaGRyX21ldGFkYXRhLm1hc3RlcmluZ19tZXRhZGF0YSA9Ci0gICAgICAgICAgICAgIENvbnZlcnRNZGN2VG9NYXN0ZXJpbmdNZXRhZGF0YSgKLSAgICAgICAgICAgICAgICAgICplbnRyeS5tYXN0ZXJpbmdfZGlzcGxheV9jb2xvcl92b2x1bWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVudHJ5LmNvbnRlbnRfbGlnaHRfbGV2ZWxfaW5mb3JtYXRpb24pIHsKLSAgICAgICAgICBjb2xvcl9tZXRhZGF0YS5oZHJfbWV0YWRhdGEubWF4X2NsbCA9Ci0gICAgICAgICAgICAgIGVudHJ5LmNvbnRlbnRfbGlnaHRfbGV2ZWxfaW5mb3JtYXRpb24tPm1heF9jb250ZW50X2xpZ2h0X2xldmVsOwotICAgICAgICAgIGNvbG9yX21ldGFkYXRhLmhkcl9tZXRhZGF0YS5tYXhfZmFsbCA9Ci0gICAgICAgICAgICAgIGVudHJ5LmNvbnRlbnRfbGlnaHRfbGV2ZWxfaW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICAgIC0+bWF4X3BpY19hdmVyYWdlX2xpZ2h0X2xldmVsOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlkZW9fY29uZmlnLnNldF93ZWJtX2NvbG9yX21ldGFkYXRhKGNvbG9yX21ldGFkYXRhKTsKLSAgICAgIH0KLQotICAgICAgRFZMT0coMSkgPDwgInZpZGVvX3RyYWNrX2lkPSIgPDwgdmlkZW9fdHJhY2tfaWQKLSAgICAgICAgICAgICAgIDw8ICIgY29uZmlnPSIgPDwgdmlkZW9fY29uZmlnLkFzSHVtYW5SZWFkYWJsZVN0cmluZygpOwotICAgICAgaWYgKCF2aWRlb19jb25maWcuSXNWYWxpZENvbmZpZygpKSB7Ci0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkludmFsaWQgdmlkZW8gZGVjb2RlciBjb25maWc6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2aWRlb19jb25maWcuQXNIdW1hblJlYWRhYmxlU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGhhc192aWRlb18gPSB0cnVlOwotICAgICAgdmlkZW9fdHJhY2tfaWRzXy5pbnNlcnQodmlkZW9fdHJhY2tfaWQpOwotICAgICAgY29uc3QgY2hhciogdHJhY2tfa2luZCA9ICh2aWRlb190cmFja19pZHNfLnNpemUoKSA9PSAxID8gIm1haW4iIDogIiIpOwotICAgICAgbWVkaWFfdHJhY2tzLT5BZGRWaWRlb1RyYWNrKHZpZGVvX2NvbmZpZywgdmlkZW9fdHJhY2tfaWQsIHRyYWNrX2tpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2stPm1lZGlhLmhhbmRsZXIubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay0+bWVkaWEuaGVhZGVyLmxhbmd1YWdlKCkpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLy8gVE9ETyh3b2xlbmV0eik6IEludmVzdGlnYXRlIHN1cHBvcnQgaW4gTVNFIGFuZCBDaHJvbWUgTVNFIGZvciBDRUEgNjA4LzcwOAotICAgIC8vIGVtYmVkZGVkIGNhcHRpb24gZGF0YSBpbiB2aWRlbyB0cmFjay4gQXQgdGltZSBvZiBpbml0IHNlZ21lbnQgcGFyc2luZywgd2UKLSAgICAvLyBkb24ndCBoYXZlIHRoaXMgZGF0YSAodW5sZXNzIG1heWJlIGJ5IFNvdXJjZUJ1ZmZlcidzIG1pbWV0eXBlKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9jcmJ1Zy5jb20vNTk3MDczCi0gICAgaWYgKHRyYWNrLT5tZWRpYS5oYW5kbGVyLnR5cGUgPT0ga1RleHQpIGRldGVjdGVkX3RleHRfdHJhY2tfY291bnQrKzsKLSAgfQotCi0gIGlmICghbW9vdl8tPnBzc2guZW1wdHkoKSkgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKG1vb3ZfLT5wc3NoKTsKLQotICBSQ0hFQ0soY29uZmlnX2NiXy5SdW4oc3RkOjptb3ZlKG1lZGlhX3RyYWNrcyksIFRleHRUcmFja0NvbmZpZ01hcCgpKSk7Ci0KLSAgU3RyZWFtUGFyc2VyOjpJbml0UGFyYW1ldGVycyBwYXJhbXMoa0luZmluaXRlRHVyYXRpb24pOwotICBpZiAobW9vdl8tPmV4dGVuZHMuaGVhZGVyLmZyYWdtZW50X2R1cmF0aW9uID4gMCkgewotICAgIHBhcmFtcy5kdXJhdGlvbiA9IFRpbWVEZWx0YUZyb21SYXRpb25hbCgKLSAgICAgICAgbW9vdl8tPmV4dGVuZHMuaGVhZGVyLmZyYWdtZW50X2R1cmF0aW9uLCBtb292Xy0+aGVhZGVyLnRpbWVzY2FsZSk7Ci0gICAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIH0gZWxzZSBpZiAobW9vdl8tPmhlYWRlci5kdXJhdGlvbiA+IDAgJiYKLSAgICAgICAgICAgICAoKG1vb3ZfLT5oZWFkZXIudmVyc2lvbiA9PSAwICYmCi0gICAgICAgICAgICAgICBtb292Xy0+aGVhZGVyLmR1cmF0aW9uICE9Ci0gICAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB8fAotICAgICAgICAgICAgICAobW9vdl8tPmhlYWRlci52ZXJzaW9uID09IDEgJiYKLSAgICAgICAgICAgICAgIG1vb3ZfLT5oZWFkZXIuZHVyYXRpb24gIT0KLSAgICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKSkgewotICAgIC8vIEluIElTTy9JRUMgMTQ0OTYtMTI6MjAxMiwgOC4yLjIuMzogIklmIHRoZSBkdXJhdGlvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZAotICAgIC8vIHRoZW4gZHVyYXRpb24gaXMgc2V0IHRvIGFsbCAxcy4iCi0gICAgLy8gVGhlIGR1cmF0aW9uIGZpZWxkIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbiB0aGUgdmVyc2lvbiBpbgotICAgIC8vIE1vdmllSGVhZGVyQm94LiBXZSBpbnRlcnByZXQgbm90IDAgYW5kIG5vdCBhbGwgMSdzIGhlcmUgYXMgImtub3duCi0gICAgLy8gZHVyYXRpb24iLgotICAgIHBhcmFtcy5kdXJhdGlvbiA9Ci0gICAgICAgIFRpbWVEZWx0YUZyb21SYXRpb25hbChtb292Xy0+aGVhZGVyLmR1cmF0aW9uLCBtb292Xy0+aGVhZGVyLnRpbWVzY2FsZSk7Ci0gICAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gSW4gSVNPL0lFQyAxNDQ5Ni0xMjoyMDA1KEUpLCA4LjMwLjI6ICIuLiBJZiBhbiBNUDQgZmlsZSBpcyBjcmVhdGVkIGluCi0gICAgLy8gcmVhbC10aW1lLCBzdWNoIGFzIHVzZWQgaW4gbGl2ZSBzdHJlYW1pbmcsIGl0IGlzIG5vdCBsaWtlbHkgdGhhdCB0aGUKLSAgICAvLyBmcmFnbWVudF9kdXJhdGlvbiBpcyBrbm93biBpbiBhZHZhbmNlIGFuZCB0aGlzIChtZWhkKSBib3ggbWF5IGJlCi0gICAgLy8gb21pdHRlZC4iCi0KLSAgICAvLyBXZSBoYXZlIGFuIHVua25vd24gZHVyYXRpb24gKG5laXRoZXIgYW55IG12ZXggZnJhZ21lbnRfZHVyYXRpb24gbm9yIG1vb3YKLSAgICAvLyBkdXJhdGlvbiB2YWx1ZSBpbmRpY2F0ZWQgYSBrbm93biBkdXJhdGlvbiwgYWJvdmUuKQotCi0gICAgLy8gVE9ETyh3b2xlbmV0eik6IEludmVzdGlnYXRlIGdhdGluZyBsaXZlbmVzcyBkZXRlY3Rpb24gb24gdGltZWxpbmVfb2Zmc2V0Ci0gICAgLy8gd2hlbiBpdCdzIHBvcHVsYXRlZC4gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzEyNjk5Ci0gICAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfTElWRTsKLSAgfQotCi0gIERWTE9HKDEpIDw8ICJsaXZlbmVzczogIiA8PCBwYXJhbXMubGl2ZW5lc3M7Ci0KLSAgaWYgKCFpbml0X2NiXy5pc19udWxsKCkpIHsKLSAgICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPSBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudDsKLSAgICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPSBkZXRlY3RlZF92aWRlb190cmFja19jb3VudDsKLSAgICBwYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCA9IGRldGVjdGVkX3RleHRfdHJhY2tfY291bnQ7Ci0gICAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJmluaXRfY2JfKS5SdW4ocGFyYW1zKTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1QNFN0cmVhbVBhcnNlcjo6UGFyc2VNb29mKEJveFJlYWRlciogcmVhZGVyKSB7Ci0gIFJDSEVDSyhtb292Xy5nZXQoKSk7ICAvLyBNdXN0IGFscmVhZHkgaGF2ZSBpbml0aWFsaXphdGlvbiBzZWdtZW50Ci0gIE1vdmllRnJhZ21lbnQgbW9vZjsKLSAgUkNIRUNLKG1vb2YuUGFyc2UocmVhZGVyKSk7Ci0gIGlmICghcnVuc18pIHJ1bnNfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKG1vb3ZfLmdldCgpLCBtZWRpYV9sb2dfKSk7Ci0gIFJDSEVDSyhydW5zXy0+SW5pdChtb29mKSk7Ci0gIFJDSEVDSyhDb21wdXRlSGlnaGVzdEVuZE9mZnNldChtb29mKSk7Ci0KLSAgaWYgKCFtb29mLnBzc2guZW1wdHkoKSkgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKG1vb2YucHNzaCk7Ci0KLSAgbmV3X3NlZ21lbnRfY2JfLlJ1bigpOwotICBDaGFuZ2VTdGF0ZShrV2FpdGluZ0ZvclNhbXBsZURhdGEpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBNUDRTdHJlYW1QYXJzZXI6Ok9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSgKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI+JiBoZWFkZXJzKSB7Ci0gIC8vIFRPRE86IGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBvZiBpbml0X2RhdGEgKGFsbCBQU1NIIGhlYWRlcnMKLSAgLy8gY29uY2F0ZW5hdGVkIGluIGFyYml0cmFyeSBvcmRlcikgbWF0Y2hlcyB0aGUgRU1FIHNwZWMuCi0gIC8vIFNlZSBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTE3NjczLgotICBzaXplX3QgdG90YWxfc2l6ZSA9IDA7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGVhZGVycy5zaXplKCk7IGkrKykKLSAgICB0b3RhbF9zaXplICs9IGhlYWRlcnNbaV0ucmF3X2JveC5zaXplKCk7Ci0KLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4gaW5pdF9kYXRhKHRvdGFsX3NpemUpOwotICBzaXplX3QgcG9zID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoZWFkZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgbWVtY3B5KCZpbml0X2RhdGFbcG9zXSwgJmhlYWRlcnNbaV0ucmF3X2JveFswXSwKLSAgICAgICAgICAgICAgICAgaGVhZGVyc1tpXS5yYXdfYm94LnNpemUoKSk7Ci0gICAgcG9zICs9IGhlYWRlcnNbaV0ucmF3X2JveC5zaXplKCk7Ci0gIH0KLSAgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYl8uUnVuKGtFbWVJbml0RGF0YVR5cGVDZW5jLCBpbml0X2RhdGEpOwotfQotCi1ib29sIE1QNFN0cmVhbVBhcnNlcjo6UHJlcGFyZUFBQ0J1ZmZlcigKLSAgICBjb25zdCBBQUMmIGFhY19jb25maWcsIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBmcmFtZV9idWYsCi0gICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKSBjb25zdCB7Ci0gIC8vIEFwcGVuZCBhbiBBRFRTIGhlYWRlciB0byBldmVyeSBhdWRpbyBzYW1wbGUuCi0gIFJDSEVDSyhhYWNfY29uZmlnLkNvbnZlcnRFc2RzVG9BRFRTKGZyYW1lX2J1ZikpOwotCi0gIC8vIEFzIGFib3ZlLCBhZGp1c3Qgc3Vic2FtcGxlIGluZm9ybWF0aW9uIHRvIGFjY291bnQgZm9yIHRoZSBoZWFkZXJzLiBBQUMgaXMKLSAgLy8gbm90IHJlcXVpcmVkIHRvIHVzZSBzdWJzYW1wbGUgZW5jcnlwdGlvbiwgc28gd2UgbWF5IG5lZWQgdG8gYWRkIGFuIGVudHJ5LgotICBpZiAoc3Vic2FtcGxlcy0+ZW1wdHkoKSkgewotICAgIHN1YnNhbXBsZXMtPnB1c2hfYmFjayhTdWJzYW1wbGVFbnRyeSgKLSAgICAgICAga0FEVFNIZWFkZXJNaW5TaXplLCBmcmFtZV9idWYtPnNpemUoKSAtIGtBRFRTSGVhZGVyTWluU2l6ZSkpOwotICB9IGVsc2UgewotICAgICgqc3Vic2FtcGxlcylbMF0uY2xlYXJfYnl0ZXMgKz0ga0FEVFNIZWFkZXJNaW5TaXplOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1QNFN0cmVhbVBhcnNlcjo6RW5xdWV1ZVNhbXBsZShCdWZmZXJRdWV1ZU1hcCogYnVmZmVycywgYm9vbCogZXJyKSB7Ci0gIERDSEVDS19FUShzdGF0ZV8sIGtFbWl0dGluZ1NhbXBsZXMpOwotCi0gIGlmICghcnVuc18tPklzUnVuVmFsaWQoKSkgewotICAgIC8vIEZsdXNoIGFueSBidWZmZXJzIHdlJ3ZlIGdvdHRlbiBpbiB0aGlzIGNodW5rIHNvIHRoYXQgYnVmZmVycyBkb24ndAotICAgIC8vIGNyb3NzIHxuZXdfc2VnbWVudF9jYl98IGNhbGxzCi0gICAgKmVyciA9ICFTZW5kQW5kRmx1c2hTYW1wbGVzKGJ1ZmZlcnMpOwotICAgIGlmICgqZXJyKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSZW1haW4gaW4ga0VtaXR0aW5nU2FtcGxlcyBzdGF0ZSwgZGlzY2FyZGluZyBkYXRhLCB1bnRpbCB0aGUgZW5kIG9mCi0gICAgLy8gdGhlIGN1cnJlbnQgJ21kYXQnIGJveCBoYXMgYmVlbiBhcHBlbmRlZCB0byB0aGUgcXVldWUuCi0gICAgaWYgKCFxdWV1ZV8uVHJpbShtZGF0X3RhaWxfKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgQ2hhbmdlU3RhdGUoa1BhcnNpbmdCb3hlcyk7Ci0gICAgZW5kX29mX3NlZ21lbnRfY2JfLlJ1bigpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKCFydW5zXy0+SXNTYW1wbGVWYWxpZCgpKSB7Ci0gICAgcnVuc18tPkFkdmFuY2VSdW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIERDSEVDSyghKCplcnIpKTsKLQotICBjb25zdCB1aW50OF90KiBidWY7Ci0gIGludCBidWZfc2l6ZTsKLSAgcXVldWVfLlBlZWsoJmJ1ZiwgJmJ1Zl9zaXplKTsKLSAgaWYgKCFidWZfc2l6ZSkgcmV0dXJuIGZhbHNlOwotCi0gIGJvb2wgYXVkaW8gPQotICAgICAgYXVkaW9fdHJhY2tfaWRzXy5maW5kKHJ1bnNfLT50cmFja19pZCgpKSAhPSBhdWRpb190cmFja19pZHNfLmVuZCgpOwotICBib29sIHZpZGVvID0KLSAgICAgIHZpZGVvX3RyYWNrX2lkc18uZmluZChydW5zXy0+dHJhY2tfaWQoKSkgIT0gdmlkZW9fdHJhY2tfaWRzXy5lbmQoKTsKLQotICAvLyBTa2lwIHRoaXMgZW50aXJlIHRyYWNrIGlmIGl0J3Mgbm90IG9uZSB3ZSdyZSBpbnRlcmVzdGVkIGluCi0gIGlmICghYXVkaW8gJiYgIXZpZGVvKSB7Ci0gICAgcnVuc18tPkFkdmFuY2VSdW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEF0dGVtcHQgdG8gY2FjaGUgdGhlIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBmaXJzdC4gQXV4IGluZm8gaXMgdXN1YWxseQotICAvLyBwbGFjZWQgaW4gYSBjb250aWd1b3VzIGJsb2NrIGJlZm9yZSB0aGUgc2FtcGxlIGRhdGEsIHJhdGhlciB0aGFuIGJlaW5nCi0gIC8vIGludGVybGVhdmVkLiBJZiB3ZSBkaWRuJ3QgY2FjaGUgaXQsIHRoaXMgd291bGQgcmVxdWlyZSB0aGF0IHdlIHJldGFpbiB0aGUKLSAgLy8gc3RhcnQgb2YgdGhlIHNlZ21lbnQgYnVmZmVyIHdoaWxlIHJlYWRpbmcgc2FtcGxlcy4gQXV4IGluZm8gaXMgdHlwaWNhbGx5Ci0gIC8vIHF1aXRlIHNtYWxsIGNvbXBhcmVkIHRvIHNhbXBsZSBkYXRhLCBzbyB0aGlzIHBhdHRlcm4gaXMgdXNlZnVsIG9uCi0gIC8vIG1lbW9yeS1jb25zdHJhaW5lZCBkZXZpY2VzIHdoZXJlIHRoZSBzb3VyY2UgYnVmZmVyIGNvbnN1bWVzIGEgc3Vic3RhbnRpYWwKLSAgLy8gcG9ydGlvbiBvZiB0aGUgdG90YWwgc3lzdGVtIG1lbW9yeS4KLSAgaWYgKHJ1bnNfLT5BdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkpIHsKLSAgICBxdWV1ZV8uUGVla0F0KHJ1bnNfLT5hdXhfaW5mb19vZmZzZXQoKSArIG1vb2ZfaGVhZF8sICZidWYsICZidWZfc2l6ZSk7Ci0gICAgaWYgKGJ1Zl9zaXplIDwgcnVuc18tPmF1eF9pbmZvX3NpemUoKSkgcmV0dXJuIGZhbHNlOwotICAgICplcnIgPSAhcnVuc18tPkNhY2hlQXV4SW5mbyhidWYsIGJ1Zl9zaXplKTsKLSAgICByZXR1cm4gISplcnI7Ci0gIH0KLQotICBxdWV1ZV8uUGVla0F0KHJ1bnNfLT5zYW1wbGVfb2Zmc2V0KCkgKyBtb29mX2hlYWRfLCAmYnVmLCAmYnVmX3NpemUpOwotICBpZiAoYnVmX3NpemUgPCBydW5zXy0+c2FtcGxlX3NpemUoKSkgcmV0dXJuIGZhbHNlOwotCi0gIGlmIChydW5zXy0+c2FtcGxlX3NpemUoKSA9PSAwKSB7Ci0gICAgLy8gR2VuZXJhbGx5IG5vdCBleHBlY3RlZCwgYnV0IHNwZWMgYWxsb3dzIGl0LiBDb2RlIGJlbG93IHRoaXMgYmxvY2sgYXNzdW1lcwotICAgIC8vIHRoZSBjdXJyZW50IHNhbXBsZSBpcyBub3QgZW1wdHkuCi0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9lbXB0eV9zYW1wbGVzX3NraXBwZWRfLAotICAgICAgICAgICAgICAgICAgICAgIGtNYXhFbXB0eVNhbXBsZUxvZ3MpCi0gICAgICAgIDw8ICIgU2tpcHBpbmcgJ3RydW4nIHNhbXBsZSB3aXRoIHNpemUgb2YgMC4iOwotICAgIHJ1bnNfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIHN0ZDo6dmVjdG9yPFN1YnNhbXBsZUVudHJ5PiBzdWJzYW1wbGVzOwotICBpZiAocnVuc18tPmlzX2VuY3J5cHRlZCgpKSB7Ci0gICAgZGVjcnlwdF9jb25maWcgPSBydW5zXy0+R2V0RGVjcnlwdENvbmZpZygpOwotICAgIGlmICghZGVjcnlwdF9jb25maWcpIHsKLSAgICAgICplcnIgPSB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzdWJzYW1wbGVzID0gZGVjcnlwdF9jb25maWctPnN1YnNhbXBsZXMoKTsKLSAgfQotCi0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGZyYW1lX2J1ZihidWYsIGJ1ZiArIHJ1bnNfLT5zYW1wbGVfc2l6ZSgpKTsKLSAgaWYgKHZpZGVvKSB7Ci0gICAgaWYgKHJ1bnNfLT52aWRlb19kZXNjcmlwdGlvbigpLnZpZGVvX2NvZGVjID09IGtDb2RlY0gyNjQgfHwKLSAgICAgICAgcnVuc18tPnZpZGVvX2Rlc2NyaXB0aW9uKCkudmlkZW9fY29kZWMgPT0ga0NvZGVjSEVWQykgewotICAgICAgRENIRUNLKHJ1bnNfLT52aWRlb19kZXNjcmlwdGlvbigpLmZyYW1lX2JpdHN0cmVhbV9jb252ZXJ0ZXIpOwotICAgICAgaWYgKCFydW5zXy0+dmlkZW9fZGVzY3JpcHRpb24oKS5mcmFtZV9iaXRzdHJlYW1fY29udmVydGVyLT5Db252ZXJ0RnJhbWUoCi0gICAgICAgICAgICAgICZmcmFtZV9idWYsIHJ1bnNfLT5pc19rZXlmcmFtZSgpLCAmc3Vic2FtcGxlcykpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgIkZhaWxlZCB0byBwcmVwYXJlIHZpZGVvIHNhbXBsZSBmb3IgZGVjb2RlIjsKLSAgICAgICAgKmVyciA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoYXVkaW8pIHsKLSAgICBpZiAoRVNEZXNjcmlwdG9yOjpJc0FBQyhydW5zXy0+YXVkaW9fZGVzY3JpcHRpb24oKS5lc2RzLm9iamVjdF90eXBlKSAmJgotICAgICAgICAhUHJlcGFyZUFBQ0J1ZmZlcihydW5zXy0+YXVkaW9fZGVzY3JpcHRpb24oKS5lc2RzLmFhYywgJmZyYW1lX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YnNhbXBsZXMpKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJGYWlsZWQgdG8gcHJlcGFyZSBBQUMgc2FtcGxlIGZvciBkZWNvZGUiOwotICAgICAgKmVyciA9IHRydWU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgaWYgKGRlY3J5cHRfY29uZmlnKSB7Ci0gICAgaWYgKCFzdWJzYW1wbGVzLmVtcHR5KCkpIHsKLSAgICAgIC8vIENyZWF0ZSBhIG5ldyBjb25maWcgd2l0aCB0aGUgdXBkYXRlZCBzdWJzYW1wbGVzLgotICAgICAgZGVjcnlwdF9jb25maWcucmVzZXQoCi0gICAgICAgICAgbmV3IERlY3J5cHRDb25maWcoZGVjcnlwdF9jb25maWctPmVuY3J5cHRpb25fbW9kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3J5cHRfY29uZmlnLT5rZXlfaWQoKSwgZGVjcnlwdF9jb25maWctPml2KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2FtcGxlcywgZGVjcnlwdF9jb25maWctPmVuY3J5cHRpb25fcGF0dGVybigpKSk7Ci0gICAgfQotICAgIC8vIGVsc2UsIHVzZSB0aGUgZXhpc3RpbmcgY29uZmlnLgotICB9Ci0KLSAgU3RyZWFtUGFyc2VyQnVmZmVyOjpUeXBlIGJ1ZmZlcl90eXBlID0KLSAgICAgIGF1ZGlvID8gRGVtdXhlclN0cmVhbTo6QVVESU8gOiBEZW11eGVyU3RyZWFtOjpWSURFTzsKLQotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gc3RyZWFtX2J1ZiA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICBidWZmZXJfYWxsb2NhdG9yXywgJmZyYW1lX2J1ZlswXSwgZnJhbWVfYnVmLnNpemUoKSwgcnVuc18tPmlzX2tleWZyYW1lKCksCi0gICAgICBidWZmZXJfdHlwZSwgcnVuc18tPnRyYWNrX2lkKCkpOwotCi0gIC8vIFRoaXMgY2F1c2VzIGluZmluaXRlIHNwaW5uZXIuCi0gIGlmICghc3RyZWFtX2J1ZikgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmIChkZWNyeXB0X2NvbmZpZykgc3RyZWFtX2J1Zi0+c2V0X2RlY3J5cHRfY29uZmlnKHN0ZDo6bW92ZShkZWNyeXB0X2NvbmZpZykpOwotCi0gIHN0cmVhbV9idWYtPnNldF9kdXJhdGlvbihydW5zXy0+ZHVyYXRpb24oKSk7Ci0gIHN0cmVhbV9idWYtPnNldF90aW1lc3RhbXAocnVuc18tPmN0cygpKTsKLSAgc3RyZWFtX2J1Zi0+U2V0RGVjb2RlVGltZXN0YW1wKHJ1bnNfLT5kdHMoKSk7Ci0KLSAgRFZMT0coMykgPDwgIkVtaXQgIiA8PCAoYXVkaW8gPyAiYXVkaW8iIDogInZpZGVvIikgPDwgIiBmcmFtZTogIgotICAgICAgICAgICA8PCAiIHRyYWNrX2lkPSIgPDwgcnVuc18tPnRyYWNrX2lkKCkKLSAgICAgICAgICAgPDwgIiwga2V5PSIgPDwgcnVuc18tPmlzX2tleWZyYW1lKCkKLSAgICAgICAgICAgPDwgIiwgZHVyPSIgPDwgcnVuc18tPmR1cmF0aW9uKCkuSW5NaWxsaXNlY29uZHMoKQotICAgICAgICAgICA8PCAiLCBkdHM9IiA8PCBydW5zXy0+ZHRzKCkuSW5NaWxsaXNlY29uZHMoKQotICAgICAgICAgICA8PCAiLCBjdHM9IiA8PCBydW5zXy0+Y3RzKCkuSW5NaWxsaXNlY29uZHMoKQotICAgICAgICAgICA8PCAiLCBzaXplPSIgPDwgcnVuc18tPnNhbXBsZV9zaXplKCk7Ci0KLSAgKCpidWZmZXJzKVtydW5zXy0+dHJhY2tfaWQoKV0ucHVzaF9iYWNrKHN0cmVhbV9idWYpOwotICBydW5zXy0+QWR2YW5jZVNhbXBsZSgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNUDRTdHJlYW1QYXJzZXI6OlNlbmRBbmRGbHVzaFNhbXBsZXMoQnVmZmVyUXVldWVNYXAqIGJ1ZmZlcnMpIHsKLSAgaWYgKGJ1ZmZlcnMtPmVtcHR5KCkpIHJldHVybiB0cnVlOwotICBib29sIHN1Y2Nlc3MgPSBuZXdfYnVmZmVyc19jYl8uUnVuKCpidWZmZXJzKTsKLSAgYnVmZmVycy0+Y2xlYXIoKTsKLSAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgTVA0U3RyZWFtUGFyc2VyOjpSZWFkQW5kRGlzY2FyZE1EQVRzVW50aWwoaW50NjRfdCBtYXhfY2xlYXJfb2Zmc2V0KSB7Ci0gIGJvb2wgZXJyID0gZmFsc2U7Ci0gIGludDY0X3QgdXBwZXJfYm91bmQgPSBzdGQ6Om1pbihtYXhfY2xlYXJfb2Zmc2V0LCBxdWV1ZV8udGFpbCgpKTsKLSAgd2hpbGUgKG1kYXRfdGFpbF8gPCB1cHBlcl9ib3VuZCkgewotICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZiA9IE5VTEw7Ci0gICAgaW50IHNpemUgPSAwOwotICAgIHF1ZXVlXy5QZWVrQXQobWRhdF90YWlsXywgJmJ1ZiwgJnNpemUpOwotCi0gICAgRm91ckNDIHR5cGU7Ci0gICAgaW50IGJveF9zejsKLSAgICBpZiAoIUJveFJlYWRlcjo6U3RhcnRUb3BMZXZlbEJveChidWYsIHNpemUsIG1lZGlhX2xvZ18sICZ0eXBlLCAmYm94X3N6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnIpKQotICAgICAgYnJlYWs7Ci0KLSAgICBpZiAodHlwZSAhPSBGT1VSQ0NfTURBVCkgewotICAgICAgTUVESUFfTE9HKERFQlVHLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIGJveCB0eXBlIHdoaWxlIHBhcnNpbmcgTURBVHM6ICIKLSAgICAgICAgICA8PCBGb3VyQ0NUb1N0cmluZyh0eXBlKTsKLSAgICB9Ci0gICAgbWRhdF90YWlsXyArPSBib3hfc3o7Ci0gIH0KLSAgcXVldWVfLlRyaW0oc3RkOjptaW4obWRhdF90YWlsXywgdXBwZXJfYm91bmQpKTsKLSAgcmV0dXJuICFlcnI7Ci19Ci0KLXZvaWQgTVA0U3RyZWFtUGFyc2VyOjpDaGFuZ2VTdGF0ZShTdGF0ZSBuZXdfc3RhdGUpIHsKLSAgRFZMT0coMikgPDwgIkNoYW5naW5nIHN0YXRlOiAiIDw8IG5ld19zdGF0ZTsKLSAgc3RhdGVfID0gbmV3X3N0YXRlOwotfQotCi1ib29sIE1QNFN0cmVhbVBhcnNlcjo6SGF2ZUVub3VnaERhdGFUb0VucXVldWVTYW1wbGVzKCkgewotICBEQ0hFQ0tfRVEoc3RhdGVfLCBrV2FpdGluZ0ZvclNhbXBsZURhdGEpOwotICAvLyBGb3IgbXV4ZWQgY29udGVudCwgbWFrZSBzdXJlIHdlIGhhdmUgZGF0YSB1cCB0byB8aGlnaGVzdF9lbmRfb2Zmc2V0X3wKLSAgLy8gc28gd2UgY2FuIGVuc3VyZSBwcm9wZXIgZW5xdWV1aW5nIGJlaGF2aW9yLiBPdGhlcndpc2UgYXNzdW1lIHdlIGhhdmUgZW5vdWdoCi0gIC8vIGRhdGEgYW5kIGFsbG93IHBlciBzYW1wbGUgb2Zmc2V0IGNoZWNrcyB0byBtZXRlciBzYW1wbGUgZW5xdWV1aW5nLgotICAvLyBUT0RPKGFjb2x3ZWxsKTogRml4IHRydW4gYm94IGhhbmRsaW5nIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbCBjYXNlCi0gIC8vIG11eGVkIGNvbnRlbnQuCi0gIHJldHVybiAhKGhhc19hdWRpb18gJiYgaGFzX3ZpZGVvXyAmJgotICAgICAgICAgICBxdWV1ZV8udGFpbCgpIDwgaGlnaGVzdF9lbmRfb2Zmc2V0XyArIG1vb2ZfaGVhZF8pOwotfQotCi1ib29sIE1QNFN0cmVhbVBhcnNlcjo6Q29tcHV0ZUhpZ2hlc3RFbmRPZmZzZXQoY29uc3QgTW92aWVGcmFnbWVudCYgbW9vZikgewotICBoaWdoZXN0X2VuZF9vZmZzZXRfID0gMDsKLQotICBUcmFja1J1bkl0ZXJhdG9yIHJ1bnMobW9vdl8uZ2V0KCksIG1lZGlhX2xvZ18pOwotICBSQ0hFQ0socnVucy5Jbml0KG1vb2YpKTsKLQotICB3aGlsZSAocnVucy5Jc1J1blZhbGlkKCkpIHsKLSAgICBpbnQ2NF90IGF1eF9pbmZvX2VuZF9vZmZzZXQgPSBydW5zLmF1eF9pbmZvX29mZnNldCgpICsgcnVucy5hdXhfaW5mb19zaXplKCk7Ci0gICAgaWYgKGF1eF9pbmZvX2VuZF9vZmZzZXQgPiBoaWdoZXN0X2VuZF9vZmZzZXRfKQotICAgICAgaGlnaGVzdF9lbmRfb2Zmc2V0XyA9IGF1eF9pbmZvX2VuZF9vZmZzZXQ7Ci0KLSAgICB3aGlsZSAocnVucy5Jc1NhbXBsZVZhbGlkKCkpIHsKLSAgICAgIGludDY0X3Qgc2FtcGxlX2VuZF9vZmZzZXQgPSBydW5zLnNhbXBsZV9vZmZzZXQoKSArIHJ1bnMuc2FtcGxlX3NpemUoKTsKLSAgICAgIGlmIChzYW1wbGVfZW5kX29mZnNldCA+IGhpZ2hlc3RfZW5kX29mZnNldF8pCi0gICAgICAgIGhpZ2hlc3RfZW5kX29mZnNldF8gPSBzYW1wbGVfZW5kX29mZnNldDsKLQotICAgICAgcnVucy5BZHZhbmNlU2FtcGxlKCk7Ci0gICAgfQotICAgIHJ1bnMuQWR2YW5jZVJ1bigpOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjNGJkZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X01QNF9TVFJFQU1fUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9NUDRfU1RSRUFNX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vb2Zmc2V0X2J5dGVfcXVldWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDQgewotCi1zdHJ1Y3QgTW92aWU7Ci1jbGFzcyBCb3hSZWFkZXI7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBNUDRTdHJlYW1QYXJzZXIgOiBwdWJsaWMgU3RyZWFtUGFyc2VyIHsKLSBwdWJsaWM6Ci0gIE1QNFN0cmVhbVBhcnNlcihEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxpbnQ+JiBhdWRpb19vYmplY3RfdHlwZXMsIGJvb2wgaGFzX3Nicik7Ci0gIH5NUDRTdHJlYW1QYXJzZXIoKSBvdmVycmlkZTsKLQotICB2b2lkIEluaXQoY29uc3QgSW5pdENCJiBpbml0X2NiLCBjb25zdCBOZXdDb25maWdDQiYgY29uZmlnX2NiLAotICAgICAgICAgICAgY29uc3QgTmV3QnVmZmVyc0NCJiBuZXdfYnVmZmVyc19jYiwgYm9vbCBpZ25vcmVfdGV4dF90cmFja3MsCi0gICAgICAgICAgICBjb25zdCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhQ0ImIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgICAgICAgICBjb25zdCBOZXdNZWRpYVNlZ21lbnRDQiYgbmV3X3NlZ21lbnRfY2IsCi0gICAgICAgICAgICBjb25zdCBFbmRNZWRpYVNlZ21lbnRDQiYgZW5kX29mX3NlZ21lbnRfY2IsCi0gICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKSBvdmVycmlkZTsKLSAgdm9pZCBGbHVzaCgpIG92ZXJyaWRlOwotICBib29sIFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgZW51bSBTdGF0ZSB7Ci0gICAga1dhaXRpbmdGb3JJbml0LAotICAgIGtQYXJzaW5nQm94ZXMsCi0gICAga1dhaXRpbmdGb3JTYW1wbGVEYXRhLAotICAgIGtFbWl0dGluZ1NhbXBsZXMsCi0gICAga0Vycm9yCi0gIH07Ci0KLSAgYm9vbCBQYXJzZUJveChib29sKiBlcnIpOwotICBib29sIFBhcnNlTW9vdihtcDQ6OkJveFJlYWRlciogcmVhZGVyKTsKLSAgYm9vbCBQYXJzZU1vb2YobXA0OjpCb3hSZWFkZXIqIHJlYWRlcik7Ci0KLSAgdm9pZCBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGEoCi0gICAgICBjb25zdCBzdGQ6OnZlY3RvcjxQcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNIZWFkZXI+JiBoZWFkZXJzKTsKLQotICAvLyBUbyByZXRhaW4gcHJvcGVyIGZyYW1pbmcsIGVhY2ggJ21kYXQnIGF0b20gbXVzdCBiZSByZWFkOyB0byBsaW1pdCBtZW1vcnkKLSAgLy8gdXNhZ2UsIHRoZSBhdG9tJ3MgZGF0YSBuZWVkcyB0byBiZSBkaXNjYXJkZWQgaW5jcmVtZW50YWxseSBhcyBmcmFtZXMgYXJlCi0gIC8vIGV4dHJhY3RlZCBmcm9tIHRoZSBzdHJlYW0uIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdXAKLSAgLy8gdG8gfG1heF9jbGVhcl9vZmZzZXR8LCB1cGRhdGluZyB0aGUgfG1kYXRfdGFpbF98IHZhbHVlIHNvIHRoYXQgZnJhbWluZyBjYW4KLSAgLy8gYmUgcmV0YWluZWQgYWZ0ZXIgYWxsICdtZGF0JyBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZWFkLiB8bWF4X2NsZWFyX29mZnNldHwKLSAgLy8gaXMgdGhlIHVwcGVyIGJvdW5kIG9uIHdoYXQgY2FuIGJlIHJlbW92ZWQgZnJvbSB8cXVldWVffC4gQW55dGhpbmcgYmVsb3cKLSAgLy8gdGhpcyBvZmZzZXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSB0aGUgcGFyc2VyLgotICAvLyBSZXR1cm5zICd0cnVlJyBvbiBzdWNjZXNzLCAnZmFsc2UnIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLSAgYm9vbCBSZWFkQW5kRGlzY2FyZE1EQVRzVW50aWwoaW50NjRfdCBtYXhfY2xlYXJfb2Zmc2V0KTsKLQotICB2b2lkIENoYW5nZVN0YXRlKFN0YXRlIG5ld19zdGF0ZSk7Ci0KLSAgYm9vbCBFbWl0Q29uZmlncygpOwotICBib29sIFByZXBhcmVBQUNCdWZmZXIoY29uc3QgQUFDJiBhYWNfY29uZmlnLCBzdGQ6OnZlY3Rvcjx1aW50OF90PiogZnJhbWVfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+KiBzdWJzYW1wbGVzKSBjb25zdDsKLSAgYm9vbCBFbnF1ZXVlU2FtcGxlKEJ1ZmZlclF1ZXVlTWFwKiBidWZmZXJzLCBib29sKiBlcnIpOwotICBib29sIFNlbmRBbmRGbHVzaFNhbXBsZXMoQnVmZmVyUXVldWVNYXAqIGJ1ZmZlcnMpOwotCi0gIHZvaWQgUmVzZXQoKTsKLQotICAvLyBDaGVja3MgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIGRhdGEgaW4gfHF1ZXVlX3wgdG8gdHJhbnNpdGlvbiB0bwotICAvLyBrRW1pdHRpbmdTYW1wbGVzIGFuZCBzdGFydCBlbnF1ZXVpbmcgc2FtcGxlcy4KLSAgYm9vbCBIYXZlRW5vdWdoRGF0YVRvRW5xdWV1ZVNhbXBsZXMoKTsKLQotICAvLyBTZXRzIHxoaWdoZXN0X2VuZF9vZmZzZXRffCBiYXNlZCBvbiB0aGUgZGF0YSBpbiB8bW9vdl98Ci0gIC8vIGFuZCB8bW9vZnwuIFJldHVybnMgdHJ1ZSBpZiB8aGlnaGVzdF9lbmRfb2Zmc2V0X3wgd2FzIHN1Y2Nlc3NmdWxseQotICAvLyBjb21wdXRlZC4KLSAgYm9vbCBDb21wdXRlSGlnaGVzdEVuZE9mZnNldChjb25zdCBNb3ZpZUZyYWdtZW50JiBtb29mKTsKLQotICBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3JfOwotICBTdGF0ZSBzdGF0ZV87Ci0gIEluaXRDQiBpbml0X2NiXzsKLSAgTmV3Q29uZmlnQ0IgY29uZmlnX2NiXzsKLSAgTmV3QnVmZmVyc0NCIG5ld19idWZmZXJzX2NiXzsKLSAgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfOwotICBOZXdNZWRpYVNlZ21lbnRDQiBuZXdfc2VnbWVudF9jYl87Ci0gIEVuZE1lZGlhU2VnbWVudENCIGVuZF9vZl9zZWdtZW50X2NiXzsKLSAgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4gbWVkaWFfbG9nXzsKLQotICBPZmZzZXRCeXRlUXVldWUgcXVldWVfOwotCi0gIC8vIFRoZXNlIHR3byBwYXJhbWV0ZXJzIGFyZSBvbmx5IHZhbGlkIGluIHRoZSB8a0VtaXR0aW5nU2VnbWVudHN8IHN0YXRlLgotICAvLwotICAvLyB8bW9vZl9oZWFkX3wgaXMgdGhlIG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIG1vc3QgcmVjZW50bHkgcGFyc2VkIG1vb2YKLSAgLy8gYmxvY2suIEFsbCBieXRlIG9mZnNldHMgaW4gc2FtcGxlIGluZm9ybWF0aW9uIGFyZSByZWxhdGl2ZSB0byB0aGlzIG9mZnNldCwKLSAgLy8gYXMgbWFuZGF0ZWQgYnkgdGhlIE1lZGlhIFNvdXJjZSBzcGVjLgotICBpbnQ2NF90IG1vb2ZfaGVhZF87Ci0gIC8vIHxtZGF0X3RhaWxffCBpcyB0aGUgc3RyZWFtIG9mZnNldCBvZiB0aGUgZW5kIG9mIHRoZSBjdXJyZW50ICdtZGF0JyBib3guCi0gIC8vIFZhbGlkIGlmZiBpdCBpcyBncmVhdGVyIHRoYW4gdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgotICBpbnQ2NF90IG1kYXRfdGFpbF87Ci0KLSAgLy8gVGhlIGhpZ2hlc3QgZW5kIG9mZnNldCBpbiB0aGUgY3VycmVudCBtb29mLiBUaGlzIG9mZnNldCBpcwotICAvLyByZWxhdGl2ZSB0byB8bW9vZl9oZWFkX3wuIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBjb2xsZWN0ZWQKLSAgLy8gZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIGFsbCBzYW1wbGVzIGFuZCBhdXhfaW5mbyBpbiB0aGUgY3VycmVudCBtb29mLgotICBpbnQ2NF90IGhpZ2hlc3RfZW5kX29mZnNldF87Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPG1wNDo6TW92aWU+IG1vb3ZfOwotICBzdGQ6OnVuaXF1ZV9wdHI8bXA0OjpUcmFja1J1bkl0ZXJhdG9yPiBydW5zXzsKLQotICBib29sIGhhc19hdWRpb187Ci0gIGJvb2wgaGFzX3ZpZGVvXzsKLSAgc3RkOjpzZXQ8dWludDMyX3Q+IGF1ZGlvX3RyYWNrX2lkc187Ci0gIHN0ZDo6c2V0PHVpbnQzMl90PiB2aWRlb190cmFja19pZHNfOwotICAvLyBUaGUgb2JqZWN0IHR5cGVzIGFsbG93ZWQgZm9yIGF1ZGlvIHRyYWNrcy4KLSAgc3RkOjpzZXQ8aW50PiBhdWRpb19vYmplY3RfdHlwZXNfOwotICBib29sIGhhc19zYnJfOwotICBzdGQ6Om1hcDx1aW50MzJfdCwgYm9vbD4gaXNfdHJhY2tfZW5jcnlwdGVkXzsKLQotICAvLyBUcmFja3MgdGhlIG51bWJlciBvZiBNRURJQV9MT0dTIGZvciBza2lwcGluZyBlbXB0eSB0cnVuIHNhbXBsZXMuCi0gIGludCBudW1fZW1wdHlfc2FtcGxlc19za2lwcGVkXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTVA0U3RyZWFtUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9NUDRfU1RSRUFNX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjEyN2FkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9tcDRfc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDU3OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXN0X2RhdGFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9mb3VyY2NzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL21lZGlhX2ZlYXR1cmVzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9nbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLXVzaW5nIDo6dGVzdGluZzo6SW5TZXF1ZW5jZTsKLXVzaW5nIDo6dGVzdGluZzo6U3RyaWN0TW9jazsKLXVzaW5nIGJhc2U6OlRpbWVEZWx0YTsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLS8vIE1hdGNoZXJzIGZvciB2ZXJpZnlpbmcgY29tbW9uIG1lZGlhIGxvZyBlbnRyeSBzdHJpbmdzLgotTUFUQ0hFUl9QKFZpZGVvQ29kZWNMb2csIGNvZGVjX3N0cmluZywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJWaWRlbyBjb2RlYzogIiArIHN0ZDo6c3RyaW5nKGNvZGVjX3N0cmluZykpOwotfQotCi1NQVRDSEVSX1AoQXVkaW9Db2RlY0xvZywgY29kZWNfc3RyaW5nLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIkF1ZGlvIGNvZGVjOiAiICsgc3RkOjpzdHJpbmcoY29kZWNfc3RyaW5nKSk7Ci19Ci0KLU1BVENIRVIoU2FtcGxlRW5jcnlwdGlvbkluZm9VbmF2YWlsYWJsZUxvZywgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJTYW1wbGUgZW5jcnlwdGlvbiBpbmZvIGlzIG5vdCBhdmFpbGFibGUuIik7Ci19Ci0KLU1BVENIRVJfUChFcnJvckxvZywgZXJyb3Jfc3RyaW5nLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgZXJyb3Jfc3RyaW5nKTsKLX0KLQotY2xhc3MgTVA0U3RyZWFtUGFyc2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIE1QNFN0cmVhbVBhcnNlclRlc3QoKQotICAgICAgOiBtZWRpYV9sb2dfKG5ldyBTdHJpY3RNb2NrPE1vY2tNZWRpYUxvZz4oKSksCi0gICAgICAgIGNvbmZpZ3NfcmVjZWl2ZWRfKGZhbHNlKSwKLSAgICAgICAgbG93ZXJfYm91bmRfKAotICAgICAgICAgICAgRGVjb2RlVGltZXN0YW1wOjpGcm9tUHJlc2VudGF0aW9uVGltZShiYXNlOjpUaW1lRGVsdGE6Ok1heCgpKSkgewotICAgIHN0ZDo6c2V0PGludD4gYXVkaW9fb2JqZWN0X3R5cGVzOwotICAgIGF1ZGlvX29iamVjdF90eXBlcy5pbnNlcnQoa0lTT18xNDQ5Nl8zKTsKLSAgICBwYXJzZXJfLnJlc2V0KG5ldyBNUDRTdHJlYW1QYXJzZXIoYXVkaW9fb2JqZWN0X3R5cGVzLCBmYWxzZSkpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHNjb3BlZF9yZWZwdHI8U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+PiBtZWRpYV9sb2dfOwotICBzdGQ6OnVuaXF1ZV9wdHI8TVA0U3RyZWFtUGFyc2VyPiBwYXJzZXJfOwotICBib29sIGNvbmZpZ3NfcmVjZWl2ZWRfOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IG1lZGlhX3RyYWNrc187Ci0gIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19kZWNvZGVyX2NvbmZpZ187Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0gIERlY29kZVRpbWVzdGFtcCBsb3dlcl9ib3VuZF87Ci0gIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBhdWRpb190cmFja19pZF87Ci0gIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCB2aWRlb190cmFja19pZF87Ci0KLSAgYm9vbCBBcHBlbmREYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpIHsKLSAgICByZXR1cm4gcGFyc2VyXy0+UGFyc2UoZGF0YSwgbGVuZ3RoKTsKLSAgfQotCi0gIGJvb2wgQXBwZW5kRGF0YUluUGllY2VzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwaWVjZV9zaXplKSB7Ci0gICAgY29uc3QgdWludDhfdCogc3RhcnQgPSBkYXRhOwotICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEgKyBsZW5ndGg7Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICBzaXplX3QgYXBwZW5kX3NpemUgPQotICAgICAgICAgIHN0ZDo6bWluKHBpZWNlX3NpemUsIHN0YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gc3RhcnQpKTsKLSAgICAgIGlmICghQXBwZW5kRGF0YShzdGFydCwgYXBwZW5kX3NpemUpKSByZXR1cm4gZmFsc2U7Ci0gICAgICBzdGFydCArPSBhcHBlbmRfc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB2b2lkIEluaXRGKGNvbnN0IFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMmIGV4cGVjdGVkX3BhcmFtcywKLSAgICAgICAgICAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBwYXJhbXMpIHsKLSAgICBEVkxPRygxKSA8PCAiSW5pdEY6IGR1cj0iIDw8IHBhcmFtcy5kdXJhdGlvbi5Jbk1pY3Jvc2Vjb25kcygpCi0gICAgICAgICAgICAgPDwgIiwgYXV0b1RpbWVzdGFtcE9mZnNldD0iIDw8IHBhcmFtcy5hdXRvX3VwZGF0ZV90aW1lc3RhbXBfb2Zmc2V0OwotICAgIEVYUEVDVF9FUShleHBlY3RlZF9wYXJhbXMuZHVyYXRpb24sIHBhcmFtcy5kdXJhdGlvbik7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkX3BhcmFtcy50aW1lbGluZV9vZmZzZXQsIHBhcmFtcy50aW1lbGluZV9vZmZzZXQpOwotICAgIEVYUEVDVF9FUShleHBlY3RlZF9wYXJhbXMuYXV0b191cGRhdGVfdGltZXN0YW1wX29mZnNldCwKLSAgICAgICAgICAgICAgcGFyYW1zLmF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXQpOwotICAgIEVYUEVDVF9FUShleHBlY3RlZF9wYXJhbXMubGl2ZW5lc3MsIHBhcmFtcy5saXZlbmVzcyk7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkX3BhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCwKLSAgICAgICAgICAgICAgcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50KTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50LAotICAgICAgICAgICAgICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQpOwotICAgIEVYUEVDVF9FUShleHBlY3RlZF9wYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCwKLSAgICAgICAgICAgICAgcGFyYW1zLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQpOwotICB9Ci0KLSAgYm9vbCBOZXdDb25maWdGKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzLAotICAgICAgICAgICAgICAgICAgY29uc3QgU3RyZWFtUGFyc2VyOjpUZXh0VHJhY2tDb25maWdNYXAmIHRjKSB7Ci0gICAgY29uZmlnc19yZWNlaXZlZF8gPSB0cnVlOwotICAgIENIRUNLKHRyYWNrcy5nZXQoKSk7Ci0gICAgRFZMT0coMSkgPDwgIk5ld0NvbmZpZ0Y6IGdvdCAiIDw8IHRyYWNrcy0+dHJhY2tzKCkuc2l6ZSgpIDw8ICIgdHJhY2tzIjsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrIDogdHJhY2tzLT50cmFja3MoKSkgewotICAgICAgY29uc3QgYXV0byYgdHJhY2tfaWQgPSB0cmFjay0+Ynl0ZXN0cmVhbV90cmFja19pZCgpOwotICAgICAgaWYgKHRyYWNrLT50eXBlKCkgPT0gTWVkaWFUcmFjazo6QXVkaW8pIHsKLSAgICAgICAgYXVkaW9fdHJhY2tfaWRfID0gdHJhY2tfaWQ7Ci0gICAgICAgIGF1ZGlvX2RlY29kZXJfY29uZmlnXyA9IHRyYWNrcy0+Z2V0QXVkaW9Db25maWcodHJhY2tfaWQpOwotICAgICAgICBEVkxPRygxKSA8PCAidHJhY2tfaWQ9IiA8PCB0cmFja19pZCA8PCAiIGF1ZGlvIGNvbmZpZz0iCi0gICAgICAgICAgICAgICAgIDw8IChhdWRpb19kZWNvZGVyX2NvbmZpZ18uSXNWYWxpZENvbmZpZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgPyBhdWRpb19kZWNvZGVyX2NvbmZpZ18uQXNIdW1hblJlYWRhYmxlU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlZBTElEIik7Ci0gICAgICB9IGVsc2UgaWYgKHRyYWNrLT50eXBlKCkgPT0gTWVkaWFUcmFjazo6VmlkZW8pIHsKLSAgICAgICAgdmlkZW9fdHJhY2tfaWRfID0gdHJhY2tfaWQ7Ci0gICAgICAgIHZpZGVvX2RlY29kZXJfY29uZmlnXyA9IHRyYWNrcy0+Z2V0VmlkZW9Db25maWcodHJhY2tfaWQpOwotICAgICAgICBEVkxPRygxKSA8PCAidHJhY2tfaWQ9IiA8PCB0cmFja19pZCA8PCAiIHZpZGVvIGNvbmZpZz0iCi0gICAgICAgICAgICAgICAgIDw8ICh2aWRlb19kZWNvZGVyX2NvbmZpZ18uSXNWYWxpZENvbmZpZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgPyB2aWRlb19kZWNvZGVyX2NvbmZpZ18uQXNIdW1hblJlYWRhYmxlU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlZBTElEIik7Ci0gICAgICB9Ci0gICAgfQotICAgIG1lZGlhX3RyYWNrc18gPSBzdGQ6Om1vdmUodHJhY2tzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGJvb2wgTmV3QnVmZmVyc0YoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCkgewotICAgIERlY29kZVRpbWVzdGFtcCBsb3dlc3RfZW5kX2R0cyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBidWZmZXJfcXVldWVfbWFwKSB7Ci0gICAgICBEVkxPRygzKSA8PCAiQnVmZmVycyBmb3IgdHJhY2tfaWQ9IiA8PCBpdC5maXJzdDsKLSAgICAgIERDSEVDSyghaXQuc2Vjb25kLmVtcHR5KCkpOwotCi0gICAgICBpZiAobG93ZXN0X2VuZF9kdHMgPT0ga05vRGVjb2RlVGltZXN0YW1wKCkgfHwKLSAgICAgICAgICBsb3dlc3RfZW5kX2R0cyA+IGl0LnNlY29uZC5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpKQotICAgICAgICBsb3dlc3RfZW5kX2R0cyA9IGl0LnNlY29uZC5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotCi0gICAgICBmb3IgKGNvbnN0IGF1dG8mIGJ1ZiA6IGl0LnNlY29uZCkgewotICAgICAgICBEVkxPRygzKSA8PCAiICB0cmFja19pZD0iIDw8IGJ1Zi0+dHJhY2tfaWQoKQotICAgICAgICAgICAgICAgICA8PCAiLCBzaXplPSIgPDwgYnVmLT5kYXRhX3NpemUoKQotICAgICAgICAgICAgICAgICA8PCAiLCBwdHM9IiA8PCBidWYtPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgICAgICA8PCAiLCBkdHM9IiA8PCBidWYtPkdldERlY29kZVRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgICAgICA8PCAiLCBkdXI9IiA8PCBidWYtPmR1cmF0aW9uKCkuSW5TZWNvbmRzRigpOwotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0cmFjayBpZHMgYXJlIHByb3Blcmx5IGFzc2lnbmVkIG9uIGFsbCBlbWl0dGVkIGJ1ZmZlcnMuCi0gICAgICAgIEVYUEVDVF9FUShpdC5maXJzdCwgYnVmLT50cmFja19pZCgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBFWFBFQ1RfTkUobG93ZXN0X2VuZF9kdHMsIGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLQotICAgIGlmIChsb3dlcl9ib3VuZF8gIT0ga05vRGVjb2RlVGltZXN0YW1wKCkgJiYgbG93ZXN0X2VuZF9kdHMgPCBsb3dlcl9ib3VuZF8pIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBsb3dlcl9ib3VuZF8gPSBsb3dlc3RfZW5kX2R0czsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHZvaWQgS2V5TmVlZGVkRihFbWVJbml0RGF0YVR5cGUgdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluaXRfZGF0YSkgewotICAgIERWTE9HKDEpIDw8ICJLZXlOZWVkZWRGOiAiIDw8IGluaXRfZGF0YS5zaXplKCk7Ci0gICAgRVhQRUNUX0VRKEVtZUluaXREYXRhVHlwZTo6Q0VOQywgdHlwZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGluaXRfZGF0YS5lbXB0eSgpKTsKLSAgfQotCi0gIHZvaWQgTmV3U2VnbWVudEYoKSB7Ci0gICAgRFZMT0coMSkgPDwgIk5ld1NlZ21lbnRGIjsKLSAgICBsb3dlcl9ib3VuZF8gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLSAgfQotCi0gIHZvaWQgRW5kT2ZTZWdtZW50RigpIHsKLSAgICBEVkxPRygxKSA8PCAiRW5kT2ZTZWdtZW50RigpIjsKLSAgICBsb3dlcl9ib3VuZF8gPQotICAgICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGJhc2U6OlRpbWVEZWx0YTo6TWF4KCkpOwotICB9Ci0KLSAgdm9pZCBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKAotICAgICAgU3RyZWFtUGFyc2VyOjpJbml0UGFyYW1ldGVycyBwYXJhbXMpIHsKLSAgICBwYXJzZXJfLT5Jbml0KAotICAgICAgICBiYXNlOjpCaW5kKCZNUDRTdHJlYW1QYXJzZXJUZXN0OjpJbml0RiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgcGFyYW1zKSwKLSAgICAgICAgYmFzZTo6QmluZCgmTVA0U3RyZWFtUGFyc2VyVGVzdDo6TmV3Q29uZmlnRiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIGJhc2U6OkJpbmQoJk1QNFN0cmVhbVBhcnNlclRlc3Q6Ok5ld0J1ZmZlcnNGLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgdHJ1ZSwKLSAgICAgICAgYmFzZTo6QmluZCgmTVA0U3RyZWFtUGFyc2VyVGVzdDo6S2V5TmVlZGVkRiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIGJhc2U6OkJpbmQoJk1QNFN0cmVhbVBhcnNlclRlc3Q6Ok5ld1NlZ21lbnRGLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgYmFzZTo6QmluZCgmTVA0U3RyZWFtUGFyc2VyVGVzdDo6RW5kT2ZTZWdtZW50RiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIG1lZGlhX2xvZ18pOwotICB9Ci0KLSAgU3RyZWFtUGFyc2VyOjpJbml0UGFyYW1ldGVycyBHZXREZWZhdWx0SW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMoKSB7Ci0gICAgLy8gTW9zdCB1bmVuY3J5cHRlZCB0ZXN0IG1wNCBmaWxlcyBoYXZlIHplcm8gZHVyYXRpb24gYW5kIGFyZSB0cmVhdGVkIGFzCi0gICAgLy8gbGl2ZSBzdHJlYW1zLgotICAgIFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMgcGFyYW1zKGtJbmZpbml0ZUR1cmF0aW9uKTsKLSAgICBwYXJhbXMubGl2ZW5lc3MgPSBEZW11eGVyU3RyZWFtOjpMSVZFTkVTU19MSVZFOwotICAgIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDE7Ci0gICAgcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMTsKLSAgICBwYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCA9IDA7Ci0gICAgcmV0dXJuIHBhcmFtczsKLSAgfQotCi0gIHZvaWQgSW5pdGlhbGl6ZVBhcnNlckFuZEV4cGVjdExpdmVuZXNzKERlbXV4ZXJTdHJlYW06OkxpdmVuZXNzIGxpdmVuZXNzKSB7Ci0gICAgYXV0byBwYXJhbXMgPSBHZXREZWZhdWx0SW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMoKTsKLSAgICBwYXJhbXMubGl2ZW5lc3MgPSBsaXZlbmVzczsKLSAgICBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKHBhcmFtcyk7Ci0gIH0KLQotICB2b2lkIEluaXRpYWxpemVQYXJzZXIoKSB7Ci0gICAgSW5pdGlhbGl6ZVBhcnNlcldpdGhJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygKLSAgICAgICAgR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCkpOwotICB9Ci0KLSAgYm9vbCBQYXJzZU1QNEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLCBpbnQgYXBwZW5kX2J5dGVzKSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPSBSZWFkVGVzdERhdGFGaWxlKGZpbGVuYW1lKTsKLSAgICBFWFBFQ1RfVFJVRSgKLSAgICAgICAgQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCBhcHBlbmRfYnl0ZXMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfTsKLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIFVuYWxpZ25lZEFwcGVuZCkgewotICAvLyBUZXN0IHNtYWxsLCBub24tc2VnbWVudC1hbGlnbmVkIGFwcGVuZHMgKHNtYWxsIGVub3VnaCB0byBleGVyY2lzZQotICAvLyBpbmNyZW1lbnRhbCBhcHBlbmQgc3lzdGVtKQotICBFWFBFQ1RfTUVESUFfTE9HKFZpZGVvQ29kZWNMb2coImF2YzEuNjQwMDFGIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEF1ZGlvQ29kZWNMb2coIm1wNGEuNDAuMiIpKTsKLSAgSW5pdGlhbGl6ZVBhcnNlcigpOwotICBQYXJzZU1QNEZpbGUoImJlYXItMTI4MHg3MjAtYXZfZnJhZy5tcDQiLCA1MTIpOwotfQotCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgQnl0ZXdpc2VBcHBlbmQpIHsKLSAgLy8gRW5zdXJlIG5vIGluY3JlbWVudGFsIGVycm9ycyBvY2N1ciB3aGVuIHBhcnNpbmcKLSAgRVhQRUNUX01FRElBX0xPRyhWaWRlb0NvZGVjTG9nKCJhdmMxLjY0MDAxRiIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhBdWRpb0NvZGVjTG9nKCJtcDRhLjQwLjIiKSk7Ci0gIEluaXRpYWxpemVQYXJzZXIoKTsKLSAgUGFyc2VNUDRGaWxlKCJiZWFyLTEyODB4NzIwLWF2X2ZyYWcubXA0IiwgMSk7Ci19Ci0KLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBNdWx0aUZyYWdtZW50QXBwZW5kKSB7Ci0gIC8vIExhcmdlIHNpemUgZW5zdXJlcyBtdWx0aXBsZSBmcmFnbWVudHMgYXJlIGFwcGVuZGVkIGluIG9uZSBjYWxsIChzaXplIGlzCi0gIC8vIGxhcmdlciB0aGFuIHRoaXMgcGFydGljdWxhciB0ZXN0IGZpbGUpCi0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS42NDAwMUYiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQXVkaW9Db2RlY0xvZygibXA0YS40MC4yIikpOwotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIFBhcnNlTVA0RmlsZSgiYmVhci0xMjgweDcyMC1hdl9mcmFnLm1wNCIsIDc2ODQzMik7Ci19Ci0KLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBGbHVzaCkgewotICAvLyBGbHVzaCB3aGlsZSByZWFkaW5nIHNhbXBsZSBkYXRhLCB0aGVuIHN0YXJ0IGEgbmV3IHN0cmVhbS4KLSAgRVhQRUNUX01FRElBX0xPRyhWaWRlb0NvZGVjTG9nKCJhdmMxLjY0MDAxRiIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhBdWRpb0NvZGVjTG9nKCJtcDRhLjQwLjIiKSkuVGltZXMoMik7Ci0gIEluaXRpYWxpemVQYXJzZXIoKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBSZWFkVGVzdERhdGFGaWxlKCJiZWFyLTEyODB4NzIwLWF2X2ZyYWcubXA0Iik7Ci0gIEVYUEVDVF9UUlVFKEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgNjU1MzYsIDUxMikpOwotICBwYXJzZXJfLT5GbHVzaCgpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YV9zaXplKCksIDUxMikpOwotfQotCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgUmVpbml0aWFsaXphdGlvbikgewotICBFWFBFQ1RfTUVESUFfTE9HKFZpZGVvQ29kZWNMb2coImF2YzEuNjQwMDFGIikpLlRpbWVzKDIpOwotICBFWFBFQ1RfTUVESUFfTE9HKEF1ZGlvQ29kZWNMb2coIm1wNGEuNDAuMiIpKS5UaW1lcygyKTsKLSAgSW5pdGlhbGl6ZVBhcnNlcigpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMTI4MHg3MjAtYXZfZnJhZy5tcDQiKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIFVua25vd25EdXJhdGlvbl9WMF9BbGxCaXRzU2V0KSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS42NDAwMUYiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQXVkaW9Db2RlY0xvZygibXA0YS40MC4yIikpOwotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIC8vIDMyIGJpdCBkdXJhdGlvbiBmaWVsZCBpbiBtdmhkIGJveCwgYWxsIGJpdHMgc2V0LgotICBQYXJzZU1QNEZpbGUoCi0gICAgICAiYmVhci0xMjgweDcyMC1hdl9mcmFnLWluaXRzZWdtZW50LW12aGRfdmVyc2lvbl8wLW12aGRfZHVyYXRpb25fYml0c19hbGxfIgotICAgICAgInNldC5tcDQiLAotICAgICAgNTEyKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIE1QRUcyX0FBQ19MQykgewotICBJblNlcXVlbmNlIHM7Ci0gIHN0ZDo6c2V0PGludD4gYXVkaW9fb2JqZWN0X3R5cGVzOwotICBhdWRpb19vYmplY3RfdHlwZXMuaW5zZXJ0KGtJU09fMTM4MThfN19BQUNfTEMpOwotICBwYXJzZXJfLnJlc2V0KG5ldyBNUDRTdHJlYW1QYXJzZXIoYXVkaW9fb2JqZWN0X3R5cGVzLCBmYWxzZSkpOwotICBFWFBFQ1RfTUVESUFfTE9HKEF1ZGlvQ29kZWNMb2coIm1wNGEuNjciKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQXVkaW9Db2RlY0xvZygibXA0YS40MC4yIikpOwotICBhdXRvIHBhcmFtcyA9IEdldERlZmF1bHRJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygpOwotICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPSAwOwotICBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKHBhcmFtcyk7Ci0gIFBhcnNlTVA0RmlsZSgiYmVhci1tcGVnMi1hYWMtb25seV9mcmFnLm1wNCIsIDUxMik7Ci19Ci0KLS8vIFRlc3QgdGhhdCBhIG1vb3YgYm94IGlzIG5vdCBhbHdheXMgcmVxdWlyZWQgYWZ0ZXIgRmx1c2goKSBpcyBjYWxsZWQuCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgTm9Nb292QWZ0ZXJGbHVzaCkgewotICBFWFBFQ1RfTUVESUFfTE9HKFZpZGVvQ29kZWNMb2coImF2YzEuNjQwMDFGIikpOwotICBFWFBFQ1RfTUVESUFfTE9HKEF1ZGlvQ29kZWNMb2coIm1wNGEuNDAuMiIpKTsKLSAgSW5pdGlhbGl6ZVBhcnNlcigpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMTI4MHg3MjAtYXZfZnJhZy5tcDQiKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLSAgcGFyc2VyXy0+Rmx1c2goKTsKLQotICBjb25zdCBpbnQga0ZpcnN0TW9vZk9mZnNldCA9IDEzMDc7Ci0gIEVYUEVDVF9UUlVFKEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSArIGtGaXJzdE1vb2ZPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPmRhdGFfc2l6ZSgpIC0ga0ZpcnN0TW9vZk9mZnNldCwgNTEyKSk7Ci19Ci0KLS8vIFRlc3QgYW4gaW52YWxpZCBmaWxlIHdoZXJlIHRoZXJlIGFyZSBlbmNyeXB0ZWQgc2FtcGxlcywgYnV0Ci0vLyBTYW1wbGVFbmNyeXB0aW9uQm94IChzZW5jKSBhbmQgU2FtcGxlQXV4aWxpYXJ5SW5mb3JtYXRpb257U2l6ZXN8T2Zmc2V0c31Cb3gKLS8vIChzYWl6fHNhaW8pIGFyZSBtaXNzaW5nLgotLy8gVGhlIHBhcnNlciBzaG91bGQgZmFpbCBpbnN0ZWFkIG9mIGNyYXNoLiBTZWUgaHR0cDovL2NyYnVnLmNvbS8zNjEzNDcKLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBNaXNzaW5nU2FtcGxlRW5jcnlwdGlvbkluZm8pIHsKLSAgSW5TZXF1ZW5jZSBzOwotCi0gIC8vIEVuY3J5cHRlZCB0ZXN0IG1wNCBmaWxlcyBoYXZlIG5vbi16ZXJvIGR1cmF0aW9uIGFuZCBhcmUgdHJlYXRlZCBhcwotICAvLyByZWNvcmRlZCBzdHJlYW1zLgotICBhdXRvIHBhcmFtcyA9IEdldERlZmF1bHRJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygpOwotICBwYXJhbXMuZHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMjMyMTkpOwotICBwYXJhbXMubGl2ZW5lc3MgPSBEZW11eGVyU3RyZWFtOjpMSVZFTkVTU19SRUNPUkRFRDsKLSAgcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMDsKLSAgSW5pdGlhbGl6ZVBhcnNlcldpdGhJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucyhwYXJhbXMpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMTI4MHg3MjAtYV9mcmFnLWNlbmNfbWlzc2luZy1zYWl6LXNhaW8ubXA0Iik7Ci0gIEVYUEVDVF9NRURJQV9MT0coQXVkaW9Db2RlY0xvZygibXA0YS40MC4yIikpLlRpbWVzKDIpOwotICBFWFBFQ1RfTUVESUFfTE9HKFNhbXBsZUVuY3J5cHRpb25JbmZvVW5hdmFpbGFibGVMb2coKSk7Ci0gIEVYUEVDVF9GQUxTRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YV9zaXplKCksIDUxMikpOwotfQotCi0vLyBUZXN0IGEgZmlsZSB3aGVyZSBhbGwgdmlkZW8gc2FtcGxlcyBzdGFydCB3aXRoIGFuIEFjY2VzcyBVbml0Ci0vLyBEZWxpbWl0ZXIgKEFVRCkgTkFMVS4KLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBWaWRlb1NhbXBsZXNTdGFydFdpdGhBVURzKSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS40RDQwMjgiKSk7Ci0gIGF1dG8gcGFyYW1zID0gR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCk7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDA7Ci0gIEluaXRpYWxpemVQYXJzZXJXaXRoSW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMocGFyYW1zKTsKLSAgUGFyc2VNUDRGaWxlKCJiZWFyLTEyODB4NzIwLWF2X3dpdGgtYXVkLW5hbHVzX2ZyYWcubXA0IiwgNTEyKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIEhFVkNfaW5fTVA0X2NvbnRhaW5lcikgewotI2lmIEJVSUxERkxBRyhFTkFCTEVfSEVWQ19ERU1VWElORykKLSAgYm9vbCBleHBlY3Rfc3VjY2VzcyA9IHRydWU7Ci0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiaGV2YyIpKTsKLSNlbHNlCi0gIGJvb2wgZXhwZWN0X3N1Y2Nlc3MgPSBmYWxzZTsKLSAgRVhQRUNUX01FRElBX0xPRyhFcnJvckxvZygiUGFyc2UgdW5zdXBwb3J0ZWQgdmlkZW8gZm9ybWF0IGhldjEiKSk7Ci0jZW5kaWYKLSAgYXV0byBwYXJhbXMgPSBHZXREZWZhdWx0SW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMoKTsKLSAgcGFyYW1zLmR1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEwMDIwMDApOwotICBwYXJhbXMubGl2ZW5lc3MgPSBEZW11eGVyU3RyZWFtOjpMSVZFTkVTU19SRUNPUkRFRDsKLSAgcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50ID0gMDsKLSAgSW5pdGlhbGl6ZVBhcnNlcldpdGhJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucyhwYXJhbXMpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gUmVhZFRlc3REYXRhRmlsZSgiYmVhci1oZXZjLWZyYWcubXA0Iik7Ci0gIEVYUEVDVF9FUShleHBlY3Rfc3VjY2VzcywKLSAgICAgICAgICAgIEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSwgNTEyKSk7Ci0jaWYgQlVJTERGTEFHKEVOQUJMRV9IRVZDX0RFTVVYSU5HKQotICBFWFBFQ1RfRVEoa0NvZGVjSEVWQywgdmlkZW9fZGVjb2Rlcl9jb25maWdfLmNvZGVjKCkpOwotICBFWFBFQ1RfRVEoSEVWQ1BST0ZJTEVfTUFJTiwgdmlkZW9fZGVjb2Rlcl9jb25maWdfLnByb2ZpbGUoKSk7Ci0jZW5kaWYKLX0KLQotLy8gU2FtcGxlIGVuY3J5cHRpb24gaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFzIENlbmNTYW1wbGVBdXhpbGlhcnlEYXRhRm9ybWF0Ci0vLyAoSVNPL0lFQyAyMzAwMS03OjIwMTUgOCkgaW5zaWRlICdtZGF0JyBib3guIE5vIFNhbXBsZUVuY3J5cHRpb24gKCdzZW5jJykgYm94LgotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIENlbmNXaXRoRW5jcnlwdGlvbkluZm9TdG9yZWRBc0F1eERhdGFJbk1kYXQpIHsKLSAgLy8gRW5jcnlwdGVkIHRlc3QgbXA0IGZpbGVzIGhhdmUgbm9uLXplcm8gZHVyYXRpb24gYW5kIGFyZSB0cmVhdGVkIGFzCi0gIC8vIHJlY29yZGVkIHN0cmVhbXMuCi0gIGF1dG8gcGFyYW1zID0gR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCk7Ci0gIHBhcmFtcy5kdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygyNzM2MDY2KTsKLSAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDA7Ci0gIEluaXRpYWxpemVQYXJzZXJXaXRoSW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMocGFyYW1zKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBSZWFkVGVzdERhdGFGaWxlKCJiZWFyLTEyODB4NzIwLXZfZnJhZy1jZW5jLm1wNCIpOwotICBFWFBFQ1RfTUVESUFfTE9HKFZpZGVvQ29kZWNMb2coImF2YzEuNjQwMDFGIikpOwotICBFWFBFQ1RfVFJVRShBcHBlbmREYXRhSW5QaWVjZXMoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YV9zaXplKCksIDUxMikpOwotfQotCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgQ2VuY1dpdGhTYW1wbGVFbmNyeXB0aW9uQm94KSB7Ci0gIC8vIEVuY3J5cHRlZCB0ZXN0IG1wNCBmaWxlcyBoYXZlIG5vbi16ZXJvIGR1cmF0aW9uIGFuZCBhcmUgdHJlYXRlZCBhcwotICAvLyByZWNvcmRlZCBzdHJlYW1zLgotICBhdXRvIHBhcmFtcyA9IEdldERlZmF1bHRJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygpOwotICBwYXJhbXMuZHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMjczNjA2Nik7Ci0gIHBhcmFtcy5saXZlbmVzcyA9IERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1JFQ09SREVEOwotICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPSAwOwotICBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKHBhcmFtcyk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPQotICAgICAgUmVhZFRlc3REYXRhRmlsZSgiYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLXNlbmMubXA0Iik7Ci0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS42NDAwMUUiKSk7Ci0gIEVYUEVDVF9UUlVFKEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSwgNTEyKSk7Ci19Ci0KLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBOYXR1cmFsU2l6ZVdpdGhvdXRQQVNQKSB7Ci0gIGF1dG8gcGFyYW1zID0gR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCk7Ci0gIHBhcmFtcy5kdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMDAwOTY2KTsKLSAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDA7Ci0gIEluaXRpYWxpemVQYXJzZXJXaXRoSW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMocGFyYW1zKTsKLQotICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBSZWFkVGVzdERhdGFGaWxlKCJiZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRob3V0X3Bhc3AubXA0Iik7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhWaWRlb0NvZGVjTG9nKCJhdmMxLjY0MDAxRSIpKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLSAgRVhQRUNUX0VRKG1hdGg6OlNpemUoNjM5LCAzNjApLCB2aWRlb19kZWNvZGVyX2NvbmZpZ18ubmF0dXJhbF9zaXplKCkpOwotfQotCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgTmF0dXJhbFNpemVXaXRoUEFTUCkgewotICBhdXRvIHBhcmFtcyA9IEdldERlZmF1bHRJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygpOwotICBwYXJhbXMuZHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMTAwMDk2Nik7Ci0gIHBhcmFtcy5saXZlbmVzcyA9IERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1JFQ09SREVEOwotICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPSAwOwotICBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKHBhcmFtcyk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPQotICAgICAgUmVhZFRlc3REYXRhRmlsZSgiYmVhci02NDB4MzYwLW5vbl9zcXVhcmVfcGl4ZWwtd2l0aF9wYXNwLm1wNCIpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS42NDAwMUUiKSk7Ci0gIEVYUEVDVF9UUlVFKEFwcGVuZERhdGFJblBpZWNlcyhidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRhX3NpemUoKSwgNTEyKSk7Ci0gIEVYUEVDVF9FUShtYXRoOjpTaXplKDYzOSwgMzYwKSwgdmlkZW9fZGVjb2Rlcl9jb25maWdfLm5hdHVyYWxfc2l6ZSgpKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIERlbXV4aW5nQUMzKSB7Ci0gIHN0ZDo6c2V0PGludD4gYXVkaW9fb2JqZWN0X3R5cGVzOwotICBhdWRpb19vYmplY3RfdHlwZXMuaW5zZXJ0KGtBQzMpOwotICBwYXJzZXJfLnJlc2V0KG5ldyBNUDRTdHJlYW1QYXJzZXIoYXVkaW9fb2JqZWN0X3R5cGVzLCBmYWxzZSkpOwotCi0jaWYgQlVJTERGTEFHKEVOQUJMRV9BQzNfRUFDM19BVURJT19ERU1VWElORykKLSAgYm9vbCBleHBlY3Rfc3VjY2VzcyA9IHRydWU7Ci0jZWxzZQotICBib29sIGV4cGVjdF9zdWNjZXNzID0gZmFsc2U7Ci0gIEVYUEVDVF9NRURJQV9MT0coRXJyb3JMb2coIlVuc3VwcG9ydGVkIGF1ZGlvIGZvcm1hdCAweDYxNjMyZDMzIGluIHN0c2QgYm94IikpOwotI2VuZGlmCi0KLSAgYXV0byBwYXJhbXMgPSBHZXREZWZhdWx0SW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMoKTsKLSAgcGFyYW1zLmR1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKDEwNDUwMDApOwotICBwYXJhbXMubGl2ZW5lc3MgPSBEZW11eGVyU3RyZWFtOjpMSVZFTkVTU19SRUNPUkRFRDsKLSAgcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMDsKLSAgSW5pdGlhbGl6ZVBhcnNlcldpdGhJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucyhwYXJhbXMpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItYWMzLW9ubHktZnJhZy5tcDQiKTsKLSAgRVhQRUNUX0VRKGV4cGVjdF9zdWNjZXNzLAotICAgICAgICAgICAgQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIERlbXV4aW5nRUFDMykgewotICBzdGQ6OnNldDxpbnQ+IGF1ZGlvX29iamVjdF90eXBlczsKLSAgYXVkaW9fb2JqZWN0X3R5cGVzLmluc2VydChrRUFDMyk7Ci0gIHBhcnNlcl8ucmVzZXQobmV3IE1QNFN0cmVhbVBhcnNlcihhdWRpb19vYmplY3RfdHlwZXMsIGZhbHNlKSk7Ci0KLSNpZiBCVUlMREZMQUcoRU5BQkxFX0FDM19FQUMzX0FVRElPX0RFTVVYSU5HKQotICBib29sIGV4cGVjdF9zdWNjZXNzID0gdHJ1ZTsKLSNlbHNlCi0gIGJvb2wgZXhwZWN0X3N1Y2Nlc3MgPSBmYWxzZTsKLSAgRVhQRUNUX01FRElBX0xPRyhFcnJvckxvZygiVW5zdXBwb3J0ZWQgYXVkaW8gZm9ybWF0IDB4NjU2MzJkMzMgaW4gc3RzZCBib3giKSk7Ci0jZW5kaWYKLQotICBhdXRvIHBhcmFtcyA9IEdldERlZmF1bHRJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucygpOwotICBwYXJhbXMuZHVyYXRpb24gPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoMTA0NTAwMCk7Ci0gIHBhcmFtcy5saXZlbmVzcyA9IERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1JFQ09SREVEOwotICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPSAwOwotICBJbml0aWFsaXplUGFyc2VyV2l0aEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKHBhcmFtcyk7Ci0KLSAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIgPQotICAgICAgUmVhZFRlc3REYXRhRmlsZSgiYmVhci1lYWMzLW9ubHktZnJhZy5tcDQiKTsKLSAgRVhQRUNUX0VRKGV4cGVjdF9zdWNjZXNzLAotICAgICAgICAgICAgQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIEZvdXJDQ1RvU3RyaW5nKSB7Ci0gIC8vIEEgcmVhbCBGT1VSQ0Mgc2hvdWxkIHByaW50LgotICBFWFBFQ1RfRVEoIm12ZXgiLCBGb3VyQ0NUb1N0cmluZyhGT1VSQ0NfTVZFWCkpOwotCi0gIC8vIEludmFsaWQgRk9VUkNDIHNob3VsZCBhbHNvIHByaW50IHdoZW5ldmVyIEFTQ0lJIHZhbHVlcyBhcmUgcHJpbnRhYmxlLgotICBFWFBFQ1RfRVEoImZha2UiLCBGb3VyQ0NUb1N0cmluZyhzdGF0aWNfY2FzdDxGb3VyQ0M+KDB4NjY2MTZiNjUpKSk7Ci0KLSAgLy8gSW52YWxpZCBGT1JDQyB3aXRoIG5vbi1wcmludGFibGUgdmFsdWVzIHNob3VsZCBub3QgZ2l2ZSBlcnJvciBtZXNzYWdlLgotICBFWFBFQ1RfRVEoIjB4NjY2MTZiMDAiLCBGb3VyQ0NUb1N0cmluZyhzdGF0aWNfY2FzdDxGb3VyQ0M+KDB4NjY2MTZiMDApKSk7Ci19Ci0KLVRFU1RfRihNUDRTdHJlYW1QYXJzZXJUZXN0LCBNZWRpYVRyYWNrSW5mb1NvdXJjaW5nKSB7Ci0gIEVYUEVDVF9NRURJQV9MT0coVmlkZW9Db2RlY0xvZygiYXZjMS42NDAwMUYiKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coQXVkaW9Db2RlY0xvZygibXA0YS40MC4yIikpOwotICBJbml0aWFsaXplUGFyc2VyKCk7Ci0gIFBhcnNlTVA0RmlsZSgiYmVhci0xMjgweDcyMC1hdl9mcmFnLm1wNCIsIDQwOTYpOwotCi0gIEVYUEVDVF9FUShtZWRpYV90cmFja3NfLT50cmFja3MoKS5zaXplKCksIDJ1KTsKLSAgY29uc3QgTWVkaWFUcmFjayYgdmlkZW9fdHJhY2sgPSAqKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpWzBdKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLnR5cGUoKSwgTWVkaWFUcmFjazo6VmlkZW8pOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2suYnl0ZXN0cmVhbV90cmFja19pZCgpLCAxKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmtpbmQoKSwgIm1haW4iKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmxhYmVsKCksICJWaWRlb0hhbmRsZXIiKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmxhbmd1YWdlKCksICJ1bmQiKTsKLQotICBjb25zdCBNZWRpYVRyYWNrJiBhdWRpb190cmFjayA9ICoobWVkaWFfdHJhY2tzXy0+dHJhY2tzKClbMV0pOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2sudHlwZSgpLCBNZWRpYVRyYWNrOjpBdWRpbyk7Ci0gIEVYUEVDVF9FUShhdWRpb190cmFjay5ieXRlc3RyZWFtX3RyYWNrX2lkKCksIDIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2sua2luZCgpLCAibWFpbiIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2subGFiZWwoKSwgIlNvdW5kSGFuZGxlciIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2subGFuZ3VhZ2UoKSwgInVuZCIpOwotfQotCi1URVNUX0YoTVA0U3RyZWFtUGFyc2VyVGVzdCwgVGV4dFRyYWNrRGV0ZWN0aW9uKSB7Ci0gIGF1dG8gcGFyYW1zID0gR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCk7Ci0gIHBhcmFtcy5kZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50ID0gMTsKLSAgSW5pdGlhbGl6ZVBhcnNlcldpdGhJbml0UGFyYW1ldGVyc0V4cGVjdGF0aW9ucyhwYXJhbXMpOwotCi0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0KLSAgICAgIFJlYWRUZXN0RGF0YUZpbGUoImJlYXItMTI4MHg3MjAtYXZ0X3N1YnRfZnJhZy5tcDQiKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKEF1ZGlvQ29kZWNMb2coIm1wNGEuNDAuMiIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhWaWRlb0NvZGVjTG9nKCJhdmMxLjY0MDAxRiIpKTsKLSAgRVhQRUNUX1RSVUUoQXBwZW5kRGF0YUluUGllY2VzKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpLCA1MTIpKTsKLX0KLQotVEVTVF9GKE1QNFN0cmVhbVBhcnNlclRlc3QsIE11bHRpVHJhY2tGaWxlKSB7Ci0gIGF1dG8gcGFyYW1zID0gR2V0RGVmYXVsdEluaXRQYXJhbWV0ZXJzRXhwZWN0YXRpb25zKCk7Ci0gIHBhcmFtcy5kdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcyg0MjQ4KTsKLSAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDI7Ci0gIHBhcmFtcy5kZXRlY3RlZF92aWRlb190cmFja19jb3VudCA9IDI7Ci0gIEluaXRpYWxpemVQYXJzZXJXaXRoSW5pdFBhcmFtZXRlcnNFeHBlY3RhdGlvbnMocGFyYW1zKTsKLSAgRVhQRUNUX01FRElBX0xPRyhWaWRlb0NvZGVjTG9nKCJhdmMxLjY0MDAwRCIpKS5UaW1lcygyKTsKLSAgRVhQRUNUX01FRElBX0xPRyhBdWRpb0NvZGVjTG9nKCJtcDRhLjQwLjIiKSkuVGltZXMoMik7Ci0gIFBhcnNlTVA0RmlsZSgiYmJiLTMyMHgyNDAtMnZpZGVvLTJhdWRpby5tcDQiLCA0MDk2KTsKLQotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKCkuc2l6ZSgpLCA0dSk7Ci0KLSAgY29uc3QgTWVkaWFUcmFjayYgdmlkZW9fdHJhY2sxID0gKihtZWRpYV90cmFja3NfLT50cmFja3MoKVswXSk7Ci0gIEVYUEVDVF9FUSh2aWRlb190cmFjazEudHlwZSgpLCBNZWRpYVRyYWNrOjpWaWRlbyk7Ci0gIEVYUEVDVF9FUSh2aWRlb190cmFjazEuYnl0ZXN0cmVhbV90cmFja19pZCgpLCAxKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrMS5raW5kKCksICJtYWluIik7Ci0gIEVYUEVDVF9FUSh2aWRlb190cmFjazEubGFiZWwoKSwgIlZpZGVvSGFuZGxlciIpOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2sxLmxhbmd1YWdlKCksICJ1bmQiKTsKLQotICBjb25zdCBNZWRpYVRyYWNrJiBhdWRpb190cmFjazEgPSAqKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpWzFdKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMS50eXBlKCksIE1lZGlhVHJhY2s6OkF1ZGlvKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMS5ieXRlc3RyZWFtX3RyYWNrX2lkKCksIDIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2sxLmtpbmQoKSwgIm1haW4iKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMS5sYWJlbCgpLCAiU291bmRIYW5kbGVyIik7Ci0gIEVYUEVDVF9FUShhdWRpb190cmFjazEubGFuZ3VhZ2UoKSwgInVuZCIpOwotCi0gIGNvbnN0IE1lZGlhVHJhY2smIHZpZGVvX3RyYWNrMiA9ICoobWVkaWFfdHJhY2tzXy0+dHJhY2tzKClbMl0pOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2syLnR5cGUoKSwgTWVkaWFUcmFjazo6VmlkZW8pOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2syLmJ5dGVzdHJlYW1fdHJhY2tfaWQoKSwgMyk7Ci0gIEVYUEVDVF9FUSh2aWRlb190cmFjazIua2luZCgpLCAiIik7Ci0gIEVYUEVDVF9FUSh2aWRlb190cmFjazIubGFiZWwoKSwgIlZpZGVvSGFuZGxlciIpOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2syLmxhbmd1YWdlKCksICJ1bmQiKTsKLQotICBjb25zdCBNZWRpYVRyYWNrJiBhdWRpb190cmFjazIgPSAqKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpWzNdKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMi50eXBlKCksIE1lZGlhVHJhY2s6OkF1ZGlvKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMi5ieXRlc3RyZWFtX3RyYWNrX2lkKCksIDQpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2syLmtpbmQoKSwgIiIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2syLmxhYmVsKCksICJTb3VuZEhhbmRsZXIiKTsKLSAgRVhQRUNUX0VRKGF1ZGlvX3RyYWNrMi5sYW5ndWFnZSgpLCAidW5kIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjAzMGQ0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9yY2hlY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfUkNIRUNLX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9SQ0hFQ0tfSF8KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotCi0jZGVmaW5lIFJDSEVDS19NRURJQV9MT0dHRUQoY29uZGl0aW9uLCBsb2dfY2IsIG1zZykgICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghKGNvbmRpdGlvbikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBETE9HKEVSUk9SKSA8PCAiRmFpbHVyZSB3aGlsZSBwYXJzaW5nIE1QNDogIiAjY29uZGl0aW9uOyAgICAgIFwKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbG9nX2NiKSA8PCAiRmFpbHVyZSBwYXJzaW5nIE1QNDogIiA8PCAobXNnKTsgXAotICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotLy8gVE9ETyh3b2xlbmV0eixjaGN1bm5pbmdoYW0pOiBXaGVyZSBhcHByb3ByaWF0ZSwgcmVwbGFjZSB1c2FnZSBvZiB0aGlzIG1hY3JvCi0vLyBpbiBmYXZvciBvZiBSQ0hFQ0tfTUVESUFfTE9HR0VELiBTZWUgaHR0cHM6Ly9jcmJ1Zy5jb20vNDg3NDEwLgotI2RlZmluZSBSQ0hFQ0soY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghKGNvbmRpdGlvbikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgRExPRyhFUlJPUikgPDwgIkZhaWx1cmUgd2hpbGUgcGFyc2luZyBNUDQ6ICIgI2NvbmRpdGlvbjsgXAotICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9SQ0hFQ0tfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9zYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3IuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc1NmE1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9zYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmgiCi0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLVNhbXBsZVRvR3JvdXBJdGVyYXRvcjo6U2FtcGxlVG9Hcm91cEl0ZXJhdG9yKAotICAgIGNvbnN0IFNhbXBsZVRvR3JvdXAmIHNhbXBsZV90b19ncm91cCkKLSAgICA6IHJlbWFpbmluZ19zYW1wbGVzXygwKSwKLSAgICAgIHNhbXBsZV90b19ncm91cF90YWJsZV8oc2FtcGxlX3RvX2dyb3VwLmVudHJpZXMpLAotICAgICAgaXRlcmF0b3JfKHNhbXBsZV90b19ncm91cF90YWJsZV8uYmVnaW4oKSkgewotICAvLyBIYW5kbGUgdGhlIGNhc2UgdGhhdCB0aGUgdGFibGUgY29udGFpbnMgYW4gZW50cnkgd2l0aCBzYW1wbGUgY291bnQgMC4KLSAgd2hpbGUgKGl0ZXJhdG9yXyAhPSBzYW1wbGVfdG9fZ3JvdXBfdGFibGVfLmVuZCgpKSB7Ci0gICAgcmVtYWluaW5nX3NhbXBsZXNfID0gaXRlcmF0b3JfLT5zYW1wbGVfY291bnQ7Ci0gICAgaWYgKHJlbWFpbmluZ19zYW1wbGVzXyA+IDApIGJyZWFrOwotICAgICsraXRlcmF0b3JfOwotICB9Ci19Ci0KLVNhbXBsZVRvR3JvdXBJdGVyYXRvcjo6flNhbXBsZVRvR3JvdXBJdGVyYXRvcigpIHt9Ci0KLWJvb2wgU2FtcGxlVG9Hcm91cEl0ZXJhdG9yOjpBZHZhbmNlKCkgewotICBEQ0hFQ0soSXNWYWxpZCgpKTsKLQotICAtLXJlbWFpbmluZ19zYW1wbGVzXzsKLSAgLy8gSGFuZGxlIHRoZSBjYXNlIHRoYXQgdGhlIHRhYmxlIGNvbnRhaW5zIGFuIGVudHJ5IHdpdGggc2FtcGxlIGNvdW50IDAuCi0gIHdoaWxlIChyZW1haW5pbmdfc2FtcGxlc18gPT0gMCkgewotICAgICsraXRlcmF0b3JfOwotICAgIGlmIChpdGVyYXRvcl8gPT0gc2FtcGxlX3RvX2dyb3VwX3RhYmxlXy5lbmQoKSkgcmV0dXJuIGZhbHNlOwotICAgIHJlbWFpbmluZ19zYW1wbGVzXyA9IGl0ZXJhdG9yXy0+c2FtcGxlX2NvdW50OwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNhbXBsZVRvR3JvdXBJdGVyYXRvcjo6SXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHJlbWFpbmluZ19zYW1wbGVzXyA+IDA7IH0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGI0ZDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3NhbXBsZV90b19ncm91cF9pdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9TQU1QTEVfVE9fR1JPVVBfSVRFUkFUT1JfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVA0X1NBTVBMRV9UT19HUk9VUF9JVEVSQVRPUl9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXA0IHsKLQotLy8gU2FtcGxlIFRvIEdyb3VwIEJveCAoJ3NiZ3AnKSBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBncm91cCB0aGF0IGEgc2FtcGxlCi0vLyBiZWxvbmdzIHRvIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXNjcmlwdGlvbiBvZiB0aGF0IHNhbXBsZSBncm91cC4gSXQgaXMKLS8vIGNvbXBhY3RseSBjb2RlZCB0aG91Z2guIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgaXRlcmF0b3IgdG8gaXRlcmF0ZQotLy8gdGhyb3VnaCB0aGUgY29tcHJlc3NlZCB0YWJsZSB0byBnZXQgdGhlIGFzc29jaWF0ZWQgc2FtcGxlIGdyb3VwIGRlc2NyaXB0aW9uCi0vLyBpbmRleC4KLWNsYXNzIE1FRElBX0VYUE9SVCBTYW1wbGVUb0dyb3VwSXRlcmF0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2FtcGxlVG9Hcm91cEl0ZXJhdG9yKGNvbnN0IFNhbXBsZVRvR3JvdXAmIHNhbXBsZV90b19ncm91cCk7Ci0gIH5TYW1wbGVUb0dyb3VwSXRlcmF0b3IoKTsKLQotICAvLyBBZHZhbmNlcyB0aGUgaXRlcmF0b3IgdG8gcmVmZXIgdG8gdGhlIG5leHQgc2FtcGxlLiBSZXR1cm4gc3RhdHVzCi0gIC8vIGluZGljYXRpbmcgd2hldGhlciB0aGUgc2FtcGxlIGlzIHN0aWxsIHZhbGlkLgotICBib29sIEFkdmFuY2UoKTsKLQotICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgc2FtcGxlIGlzIHZhbGlkLgotICBib29sIElzVmFsaWQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIGdyb3VwIGRlc2NyaXB0aW9uIGluZGV4IGZvciBjdXJyZW50IHNhbXBsZS4KLSAgdWludDMyX3QgZ3JvdXBfZGVzY3JpcHRpb25faW5kZXgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yXy0+Z3JvdXBfZGVzY3JpcHRpb25faW5kZXg7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIFRyYWNrIGhvdyBtYW55IHNhbXBsZXMgcmVtYWluaW5nIGZvciBjdXJyZW50IHRhYmxlIGVudHJ5LgotICB1aW50MzJfdCByZW1haW5pbmdfc2FtcGxlc187Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPFNhbXBsZVRvR3JvdXBFbnRyeT4mIHNhbXBsZV90b19ncm91cF90YWJsZV87Ci0gIHN0ZDo6dmVjdG9yPFNhbXBsZVRvR3JvdXBFbnRyeT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2FtcGxlVG9Hcm91cEl0ZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9TQU1QTEVfVE9fR1JPVVBfSVRFUkFUT1JfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9zYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWZkMzZjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9zYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIG1wNCB7Ci0KLW5hbWVzcGFjZSB7Ci1jb25zdCBTYW1wbGVUb0dyb3VwRW50cnkga0NvbXBhY3RTYW1wbGVUb0dyb3VwVGFibGVbXSA9IHsKLSAgICB7MTAsIDh9LCB7OSwgNX0sIHsyNSwgN30sIHs0OCwgNjN9LCB7OCwgMn19OwotfSAgLy8gbmFtZXNwYWNlCi0KLWNsYXNzIFNhbXBsZVRvR3JvdXBJdGVyYXRvclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBTYW1wbGVUb0dyb3VwSXRlcmF0b3JUZXN0KCkgewotICAgIC8vIEJ1aWxkIHNhbXBsZSBncm91cCBkZXNjcmlwdGlvbiBpbmRleCB0YWJsZSBmcm9tIGtTYW1wbGVUb0dyb3VwVGFibGUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoa0NvbXBhY3RTYW1wbGVUb0dyb3VwVGFibGUpOyArK2kpIHsKLSAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBrQ29tcGFjdFNhbXBsZVRvR3JvdXBUYWJsZVtpXS5zYW1wbGVfY291bnQ7Ci0gICAgICAgICAgICsraikgewotICAgICAgICBzYW1wbGVfdG9fZ3JvdXBfdGFibGVfLnB1c2hfYmFjaygKLSAgICAgICAgICAgIGtDb21wYWN0U2FtcGxlVG9Hcm91cFRhYmxlW2ldLmdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzYW1wbGVfdG9fZ3JvdXBfLmVudHJpZXMuYXNzaWduKAotICAgICAgICBrQ29tcGFjdFNhbXBsZVRvR3JvdXBUYWJsZSwKLSAgICAgICAga0NvbXBhY3RTYW1wbGVUb0dyb3VwVGFibGUgKyBhcnJheXNpemUoa0NvbXBhY3RTYW1wbGVUb0dyb3VwVGFibGUpKTsKLSAgICBzYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfLnJlc2V0KAotICAgICAgICBuZXcgU2FtcGxlVG9Hcm91cEl0ZXJhdG9yKHNhbXBsZV90b19ncm91cF8pKTsKLSAgfQotCi0gcHJvdGVjdGVkOgotICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gc2FtcGxlX3RvX2dyb3VwX3RhYmxlXzsKLSAgU2FtcGxlVG9Hcm91cCBzYW1wbGVfdG9fZ3JvdXBfOwotICBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlVG9Hcm91cEl0ZXJhdG9yPiBzYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNhbXBsZVRvR3JvdXBJdGVyYXRvclRlc3QpOwotfTsKLQotVEVTVF9GKFNhbXBsZVRvR3JvdXBJdGVyYXRvclRlc3QsIEVtcHR5VGFibGUpIHsKLSAgU2FtcGxlVG9Hcm91cCBzYW1wbGVfdG9fZ3JvdXA7Ci0gIFNhbXBsZVRvR3JvdXBJdGVyYXRvciBpdGVyYXRvcihzYW1wbGVfdG9fZ3JvdXApOwotICBFWFBFQ1RfRkFMU0UoaXRlcmF0b3IuSXNWYWxpZCgpKTsKLX0KLQotVEVTVF9GKFNhbXBsZVRvR3JvdXBJdGVyYXRvclRlc3QsIEFkdmFuY2UpIHsKLSAgQVNTRVJUX0VRKHNhbXBsZV90b19ncm91cF90YWJsZV9bMF0sCi0gICAgICAgICAgICBzYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfLT5ncm91cF9kZXNjcmlwdGlvbl9pbmRleCgpKTsKLSAgZm9yICh1aW50MzJfdCBzYW1wbGUgPSAxOyBzYW1wbGUgPCBzYW1wbGVfdG9fZ3JvdXBfdGFibGVfLnNpemUoKTsgKytzYW1wbGUpIHsKLSAgICBBU1NFUlRfVFJVRShzYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfLT5BZHZhbmNlKCkpOwotICAgIEFTU0VSVF9FUShzYW1wbGVfdG9fZ3JvdXBfdGFibGVfW3NhbXBsZV0sCi0gICAgICAgICAgICAgIHNhbXBsZV90b19ncm91cF9pdGVyYXRvcl8tPmdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4KCkpOwotICAgIEFTU0VSVF9UUlVFKHNhbXBsZV90b19ncm91cF9pdGVyYXRvcl8tPklzVmFsaWQoKSk7Ci0gIH0KLSAgQVNTRVJUX0ZBTFNFKHNhbXBsZV90b19ncm91cF9pdGVyYXRvcl8tPkFkdmFuY2UoKSk7Ci0gIEFTU0VSVF9GQUxTRShzYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3JfLT5Jc1ZhbGlkKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3IuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjRmODk1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3IuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw3NTIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3RyYWNrX3J1bl9pdGVyYXRvci5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGlvbWFuaXA+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvcmNoZWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3NhbXBsZV90b19ncm91cF9pdGVyYXRvci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1uYW1lc3BhY2UgbXA0IHsKLQotc3RydWN0IFNhbXBsZUluZm8gewotICBpbnQgc2l6ZTsKLSAgaW50IGR1cmF0aW9uOwotICBpbnQgY3RzX29mZnNldDsKLSAgYm9vbCBpc19rZXlmcmFtZTsKLSAgdWludDMyX3QgY2VuY19ncm91cF9kZXNjcmlwdGlvbl9pbmRleDsKLX07Ci0KLXN0cnVjdCBUcmFja1J1bkluZm8gewotICB1aW50MzJfdCB0cmFja19pZDsKLSAgc3RkOjp2ZWN0b3I8U2FtcGxlSW5mbz4gc2FtcGxlczsKLSAgaW50NjRfdCB0aW1lc2NhbGU7Ci0gIGludDY0X3Qgc3RhcnRfZHRzOwotICBpbnQ2NF90IHNhbXBsZV9zdGFydF9vZmZzZXQ7Ci0KLSAgYm9vbCBpc19hdWRpbzsKLSAgY29uc3QgQXVkaW9TYW1wbGVFbnRyeSogYXVkaW9fZGVzY3JpcHRpb247Ci0gIGNvbnN0IFZpZGVvU2FtcGxlRW50cnkqIHZpZGVvX2Rlc2NyaXB0aW9uOwotICBjb25zdCBTYW1wbGVHcm91cERlc2NyaXB0aW9uKiB0cmFja19zYW1wbGVfZW5jcnlwdGlvbl9ncm91cDsKLQotICAvLyBTdG9yZXMgc2FtcGxlIGVuY3J5cHRpb24gZW50cmllcywgd2hpY2ggaXMgcG9wdWxhdGVkIGZyb20gJ3NlbmMnIGJveCBpZiBpdAotICAvLyBpcyBhdmFpbGFibGUsIG90aGVyd2lzZSB3aWxsIHRyeSB0byBsb2FkIGZyb20gY2VuYyBhdXhpbGlhcnkgaW5mb3JtYXRpb24uCi0gIHN0ZDo6dmVjdG9yPFNhbXBsZUVuY3J5cHRpb25FbnRyeT4gc2FtcGxlX2VuY3J5cHRpb25fZW50cmllczsKLQotICAvLyBUaGVzZSB2YXJpYWJsZXMgYXJlIHVzZWZ1bCB0byBsb2FkIHxzYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzfCBmcm9tIGNlbmMKLSAgLy8gYXV4aWxpYXJ5IGluZm9ybWF0aW9uIHdoZW4gJ3NlbmMnIGJveCBpcyBub3QgYXZhaWxhYmxlLgotICBpbnQ2NF90IGF1eF9pbmZvX3N0YXJ0X29mZnNldDsgIC8vIE9ubHkgdmFsaWQgaWYgYXV4X2luZm9fdG90YWxfc2l6ZSA+IDAuCi0gIGludCBhdXhfaW5mb19kZWZhdWx0X3NpemU7Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGF1eF9pbmZvX3NpemVzOyAgLy8gUG9wdWxhdGVkIGlmIGRlZmF1bHRfc2l6ZSA9PSAwLgotICBpbnQgYXV4X2luZm9fdG90YWxfc2l6ZTsKLQotICBFbmNyeXB0aW9uU2NoZW1lIGVuY3J5cHRpb25fc2NoZW1lOwotCi0gIHN0ZDo6dmVjdG9yPENlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5PiBmcmFnbWVudF9zYW1wbGVfZW5jcnlwdGlvbl9pbmZvOwotCi0gIFRyYWNrUnVuSW5mbygpOwotICB+VHJhY2tSdW5JbmZvKCk7Ci19OwotCi1UcmFja1J1bkluZm86OlRyYWNrUnVuSW5mbygpCi0gICAgOiB0cmFja19pZCgwKSwKLSAgICAgIHRpbWVzY2FsZSgtMSksCi0gICAgICBzdGFydF9kdHMoLTEpLAotICAgICAgc2FtcGxlX3N0YXJ0X29mZnNldCgtMSksCi0gICAgICBpc19hdWRpbyhmYWxzZSksCi0gICAgICBhdXhfaW5mb19zdGFydF9vZmZzZXQoLTEpLAotICAgICAgYXV4X2luZm9fZGVmYXVsdF9zaXplKC0xKSwKLSAgICAgIGF1eF9pbmZvX3RvdGFsX3NpemUoLTEpIHt9Ci1UcmFja1J1bkluZm86On5UcmFja1J1bkluZm8oKSB7fQotCi1iYXNlOjpUaW1lRGVsdGEgVGltZURlbHRhRnJvbVJhdGlvbmFsKGludDY0X3QgbnVtZXIsIGludDY0X3QgZGVub20pIHsKLSAgLy8gVG8gYXZvaWQgb3ZlcmZsb3csIHNwbGl0IHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb246Ci0gIC8vIChudW1lciAqIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQpIC8gZGVub20KLSAgLy8gaW50bzoKLSAgLy8gIChudW1lciAvIGRlbm9tKSAqIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQgKwotICAvLyAoKG51bWVyICUgZGVub20pICogYmFzZTo6VGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCkgLyBkZW5vbQotICBpbnQ2NF90IGEgPSBudW1lciAvIGRlbm9tOwotICBEQ0hFQ0tfTEUoKGEgPiAwID8gYSA6IC1hKSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQpOwotICBpbnQ2NF90IHRpbWVhX2luX3VzID0gYSAqIGJhc2U6OlRpbWU6OmtNaWNyb3NlY29uZHNQZXJTZWNvbmQ7Ci0KLSAgaW50NjRfdCBiID0gbnVtZXIgJSBkZW5vbTsKLSAgRENIRUNLX0xFKChiID4gMCA/IGIgOiAtYiksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lOjprTWljcm9zZWNvbmRzUGVyU2Vjb25kKTsKLSAgaW50NjRfdCB0aW1lYl9pbl91cyA9IChiICogYmFzZTo6VGltZTo6a01pY3Jvc2Vjb25kc1BlclNlY29uZCkgLyBkZW5vbTsKLQotICBEQ0hFQ0soKHRpbWViX2luX3VzIDwgMCkgfHwKLSAgICAgICAgICh0aW1lYV9pbl91cyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSAtIHRpbWViX2luX3VzKSk7Ci0gIERDSEVDSygodGltZWJfaW5fdXMgPiAwKSB8fAotICAgICAgICAgKHRpbWVhX2luX3VzID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpIC0gdGltZWJfaW5fdXMpKTsKLSAgcmV0dXJuIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyh0aW1lYV9pbl91cyArIHRpbWViX2luX3VzKTsKLX0KLQotRGVjb2RlVGltZXN0YW1wIERlY29kZVRpbWVzdGFtcEZyb21SYXRpb25hbChpbnQ2NF90IG51bWVyLCBpbnQ2NF90IGRlbm9tKSB7Ci0gIHJldHVybiBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKAotICAgICAgVGltZURlbHRhRnJvbVJhdGlvbmFsKG51bWVyLCBkZW5vbSkpOwotfQotCi1UcmFja1J1bkl0ZXJhdG9yOjpUcmFja1J1bkl0ZXJhdG9yKGNvbnN0IE1vdmllKiBtb292LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQotICAgIDogbW9vdl8obW9vdiksIG1lZGlhX2xvZ18obWVkaWFfbG9nKSwgc2FtcGxlX29mZnNldF8oMCkgewotICBDSEVDSyhtb292KTsKLX0KLQotVHJhY2tSdW5JdGVyYXRvcjo6flRyYWNrUnVuSXRlcmF0b3IoKSB7fQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgSGV4RmxhZ3ModWludDMyX3QgZmxhZ3MpIHsKLSAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwotICBzdHJlYW0gPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KHNpemVvZihmbGFncykgKiAyKSA8PCBzdGQ6OmhleAotICAgICAgICAgPDwgZmxhZ3M7Ci0gIHJldHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLXN0YXRpYyBib29sIFBvcHVsYXRlU2FtcGxlSW5mbyhjb25zdCBUcmFja0V4dGVuZHMmIHRyZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJhY2tGcmFnbWVudEhlYWRlciYgdGZoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmFja0ZyYWdtZW50UnVuJiB0cnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3QgZWRpdF9saXN0X29mZnNldCwgY29uc3QgdWludDMyX3QgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYW1wbGVJbmZvKiBzYW1wbGVfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYW1wbGVEZXBlbmRzT24gc2R0cF9zYW1wbGVfZGVwZW5kc19vbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2F1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKLSAgaWYgKGkgPCB0cnVuLnNhbXBsZV9zaXplcy5zaXplKCkpIHsKLSAgICBzYW1wbGVfaW5mby0+c2l6ZSA9IHRydW4uc2FtcGxlX3NpemVzW2ldOwotICB9IGVsc2UgaWYgKHRmaGQuZGVmYXVsdF9zYW1wbGVfc2l6ZSA+IDApIHsKLSAgICBzYW1wbGVfaW5mby0+c2l6ZSA9IHRmaGQuZGVmYXVsdF9zYW1wbGVfc2l6ZTsKLSAgfSBlbHNlIHsKLSAgICBzYW1wbGVfaW5mby0+c2l6ZSA9IHRyZXguZGVmYXVsdF9zYW1wbGVfc2l6ZTsKLSAgfQotCi0gIGlmIChpIDwgdHJ1bi5zYW1wbGVfZHVyYXRpb25zLnNpemUoKSkgewotICAgIHNhbXBsZV9pbmZvLT5kdXJhdGlvbiA9IHRydW4uc2FtcGxlX2R1cmF0aW9uc1tpXTsKLSAgfSBlbHNlIGlmICh0ZmhkLmRlZmF1bHRfc2FtcGxlX2R1cmF0aW9uID4gMCkgewotICAgIHNhbXBsZV9pbmZvLT5kdXJhdGlvbiA9IHRmaGQuZGVmYXVsdF9zYW1wbGVfZHVyYXRpb247Ci0gIH0gZWxzZSB7Ci0gICAgc2FtcGxlX2luZm8tPmR1cmF0aW9uID0gdHJleC5kZWZhdWx0X3NhbXBsZV9kdXJhdGlvbjsKLSAgfQotCi0gIGlmIChpIDwgdHJ1bi5zYW1wbGVfY29tcG9zaXRpb25fdGltZV9vZmZzZXRzLnNpemUoKSkgewotICAgIHNhbXBsZV9pbmZvLT5jdHNfb2Zmc2V0ID0gdHJ1bi5zYW1wbGVfY29tcG9zaXRpb25fdGltZV9vZmZzZXRzW2ldOwotICB9IGVsc2UgewotICAgIHNhbXBsZV9pbmZvLT5jdHNfb2Zmc2V0ID0gMDsKLSAgfQotICBzYW1wbGVfaW5mby0+Y3RzX29mZnNldCArPSBlZGl0X2xpc3Rfb2Zmc2V0OwotCi0gIHVpbnQzMl90IGZsYWdzOwotICBpZiAoaSA8IHRydW4uc2FtcGxlX2ZsYWdzLnNpemUoKSkgewotICAgIGZsYWdzID0gdHJ1bi5zYW1wbGVfZmxhZ3NbaV07Ci0gICAgRFZMT0coNCkgPDwgX19GVU5DVElPTl9fIDw8ICIgdHJ1biBzYW1wbGUgZmxhZ3MgIiA8PCBIZXhGbGFncyhmbGFncyk7Ci0gIH0gZWxzZSBpZiAodGZoZC5oYXNfZGVmYXVsdF9zYW1wbGVfZmxhZ3MpIHsKLSAgICBmbGFncyA9IHRmaGQuZGVmYXVsdF9zYW1wbGVfZmxhZ3M7Ci0gICAgRFZMT0coNCkgPDwgX19GVU5DVElPTl9fIDw8ICIgdGZoZCBzYW1wbGUgZmxhZ3MgIiA8PCBIZXhGbGFncyhmbGFncyk7Ci0gIH0gZWxzZSB7Ci0gICAgZmxhZ3MgPSB0cmV4LmRlZmF1bHRfc2FtcGxlX2ZsYWdzOwotICAgIERWTE9HKDQpIDw8IF9fRlVOQ1RJT05fXyA8PCAiIHRyZXggc2FtcGxlIGZsYWdzICIgPDwgSGV4RmxhZ3MoZmxhZ3MpOwotICB9Ci0KLSAgU2FtcGxlRGVwZW5kc09uIHNhbXBsZV9kZXBlbmRzX29uID0KLSAgICAgIHN0YXRpY19jYXN0PFNhbXBsZURlcGVuZHNPbj4oKGZsYWdzID4+IDI0KSAmIDB4Myk7Ci0gIGlmIChzYW1wbGVfZGVwZW5kc19vbiA9PSBrU2FtcGxlRGVwZW5kc09uVW5rbm93bikgewotICAgIHNhbXBsZV9kZXBlbmRzX29uID0gc2R0cF9zYW1wbGVfZGVwZW5kc19vbjsKLSAgfQotICBEVkxPRyg0KSA8PCBfX0ZVTkNUSU9OX18gPDwgIiBzYW1wbGVfZGVwZW5kc19vbiAiIDw8IHNhbXBsZV9kZXBlbmRzX29uOwotICBpZiAoc2FtcGxlX2RlcGVuZHNfb24gPT0ga1NhbXBsZURlcGVuZHNPblJlc2VydmVkKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2cpIDw8ICJSZXNlcnZlZCB2YWx1ZSB1c2VkIGluIHNhbXBsZSBkZXBlbmRlbmN5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluZm8uIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBQZXIgc3BlYyAoSVNPIDE0NDk2LTEyOjIwMTIpLCB0aGUgZGVmaW5pdGlvbiBmb3IgYSAic3luYyBzYW1wbGUiIGlzCi0gIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGRvd25zdHJlYW0gY29kZSdzICJpcyBrZXlmcmFtZSIgY29uY2VwdC4gQnV0IG1lZGlhIGV4aXN0cwotICAvLyB0aGF0IG1hcmtzIG5vbi1rZXkgdmlkZW8gZnJhbWVzIGFzIHN5bmMgc2FtcGxlcyAoaHR0cDovL2NyYnVnLmNvbS81MDc5MTYKLSAgLy8gYW5kIGh0dHA6Ly9jcmJ1Zy5jb20vMzEwNzEyKS4gSGVuY2UsIGZvciB2aWRlbyB3ZSBhZGRpdGlvbmFsbHkgY2hlY2sgdGhhdAotICAvLyB0aGUgc2FtcGxlIGRvZXMgbm90IGRlcGVuZCBvbiBvdGhlcnMgKEZGbXBlZyBkb2VzIHRvbywgc2VlIG1vdl9yZWFkX3RydW4pLgotICAvLyBTYW1wbGUgZGVwZW5kZW5jeSBpcyBub3QgaWdub3JlZCBmb3IgYXVkaW8gYmVjYXVzZSBlbmNvZGVkIGF1ZGlvIHNhbXBsZXMKLSAgLy8gY2FuIGRlcGVuZCBvbiBvdGhlciBzYW1wbGVzIGFuZCBzdGlsbCBiZSB1c2VkIGZvciByYW5kb20gYWNjZXNzLiBHZW5lcmFsbHkKLSAgLy8gYWxsIGF1ZGlvIHNhbXBsZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHN5bmMgc2FtcGxlcywgYnV0IHdlICBwcmVmZXIgdG8gY2hlY2sKLSAgLy8gdGhlIGZsYWdzIHRvIGNhdGNoIGJhZGx5IG11eGVkIGF1ZGlvIChmb3Igbm93IGFueXdheSA7UCkuIEhpc3Rvcnkgb2YKLSAgLy8gYXR0ZW1wdHMgdG8gZ2V0IHRoaXMgcmlnaHQgZGlzY3Vzc2VkIGluIGh0dHA6Ly9jcnJldi5jb20vMTMxOTgxMzAwMgotICBib29sIHNhbXBsZV9pc19zeW5jX3NhbXBsZSA9ICEoZmxhZ3MgJiBrU2FtcGxlSXNOb25TeW5jU2FtcGxlKTsKLSAgYm9vbCBzYW1wbGVfZGVwZW5kc19vbl9vdGhlcnMgPSBzYW1wbGVfZGVwZW5kc19vbiA9PSBrU2FtcGxlRGVwZW5kc09uT3RoZXJzOwotICBzYW1wbGVfaW5mby0+aXNfa2V5ZnJhbWUgPQotICAgICAgc2FtcGxlX2lzX3N5bmNfc2FtcGxlICYmICghc2FtcGxlX2RlcGVuZHNfb25fb3RoZXJzIHx8IGlzX2F1ZGlvKTsKLQotICBEVkxPRyg0KSA8PCBfX0ZVTkNUSU9OX18gPDwgIiBpc19rZjoiIDw8IHNhbXBsZV9pbmZvLT5pc19rZXlmcmFtZQotICAgICAgICAgICA8PCAiIGlzX3N5bmM6IiA8PCBzYW1wbGVfaXNfc3luY19zYW1wbGUKLSAgICAgICAgICAgPDwgIiBkZXBzOiIgPDwgc2FtcGxlX2RlcGVuZHNfb25fb3RoZXJzIDw8ICIgYXVkaW86IiA8PCBpc19hdWRpbzsKLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNvbnN0IENlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KiBHZXRTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KAotICAgIGNvbnN0IFRyYWNrUnVuSW5mbyYgcnVuX2luZm8sIHVpbnQzMl90IGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4KSB7Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPENlbmNTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5PiogZW50cmllcyA9IE5VTEw7Ci0KLSAgLy8gSVNPLTE0NDk2LTEyIFNlY3Rpb24gOC45LjIuMyBhbmQgOC45LjQgOiBncm91cCBkZXNjcmlwdGlvbiBpbmRleAotICAvLyAoMSkgcmFuZ2VzIGZyb20gMSB0byB0aGUgbnVtYmVyIG9mIHNhbXBsZSBncm91cCBlbnRyaWVzIGluIHRoZSB0cmFjawotICAvLyBsZXZlbCBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveCwgb3IgKDIpIHRha2VzIHRoZSB2YWx1ZSAwIHRvCi0gIC8vIGluZGljYXRlIHRoYXQgdGhpcyBzYW1wbGUgaXMgYSBtZW1iZXIgb2Ygbm8gZ3JvdXAsIGluIHRoaXMgY2FzZSwgdGhlCi0gIC8vIHNhbXBsZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbgotICAvLyBUcmFja0VuY3J5cHRpb24gQm94LCBvciAoMykgc3RhcnRzIGF0IDB4MTAwMDEsIGkuZS4gdGhlIGluZGV4IHZhbHVlCi0gIC8vIDEsIHdpdGggdGhlIHZhbHVlIDEgaW4gdGhlIHRvcCAxNiBiaXRzLCB0byByZWZlcmVuY2UgZnJhZ21lbnQtbG9jYWwKLSAgLy8gU2FtcGxlR3JvdXBEZXNjcmlwdGlvbiBCb3guCi0gIC8vIENhc2UgKDIpIGlzIG5vdCBzdXBwb3J0ZWQgaGVyZS4gVGhlIGNhbGxlciBtdXN0IGhhbmRsZSBpdCBleHRlcm5hbGx5Ci0gIC8vIGJlZm9yZSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLgotICBEQ0hFQ0tfTkUoZ3JvdXBfZGVzY3JpcHRpb25faW5kZXgsIDB1KTsKLSAgaWYgKGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4ID4KLSAgICAgIFNhbXBsZVRvR3JvdXBFbnRyeTo6a0ZyYWdtZW50R3JvdXBEZXNjcmlwdGlvbkluZGV4QmFzZSkgewotICAgIGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4IC09Ci0gICAgICAgIFNhbXBsZVRvR3JvdXBFbnRyeTo6a0ZyYWdtZW50R3JvdXBEZXNjcmlwdGlvbkluZGV4QmFzZTsKLSAgICBlbnRyaWVzID0gJnJ1bl9pbmZvLmZyYWdtZW50X3NhbXBsZV9lbmNyeXB0aW9uX2luZm87Ci0gIH0gZWxzZSB7Ci0gICAgZW50cmllcyA9ICZydW5faW5mby50cmFja19zYW1wbGVfZW5jcnlwdGlvbl9ncm91cC0+ZW50cmllczsKLSAgfQotCi0gIC8vIHxncm91cF9kZXNjcmlwdGlvbl9pbmRleHwgaXMgMS1iYXNlZC4KLSAgRENIRUNLX0xFKGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4LCBlbnRyaWVzLT5zaXplKCkpOwotICByZXR1cm4gKGdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4ID4gZW50cmllcy0+c2l6ZSgpKQotICAgICAgICAgICAgID8gTlVMTAotICAgICAgICAgICAgIDogJigqZW50cmllcylbZ3JvdXBfZGVzY3JpcHRpb25faW5kZXggLSAxXTsKLX0KLQotLy8gSW4gd2VsbC1zdHJ1Y3R1cmVkIGVuY3J5cHRlZCBtZWRpYSwgZWFjaCB0cmFjayBydW4gd2lsbCBiZSBpbW1lZGlhdGVseQotLy8gcHJlY2VkZWQgYnkgaXRzIGF1eGlsaWFyeSBpbmZvcm1hdGlvbjsgdGhpcyBpcyB0aGUgb25seSBvcHRpbWFsIHN0b3JhZ2UKLS8vIHBhdHRlcm4gaW4gdGVybXMgb2YgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgZnJvbSBhIHNlcmlhbCBzdHJlYW0gbmVlZGVkIHRvCi0vLyBiZWdpbiBwbGF5YmFjay4gSXQgYWxzbyBhbGxvd3MgdXMgdG8gb3B0aW1pemUgY2FjaGluZyBvbiBtZW1vcnktY29uc3RyYWluZWQKLS8vIGFyY2hpdGVjdHVyZXMsIGJlY2F1c2Ugd2UgY2FuIGNhY2hlIHRoZSByZWxhdGl2ZWx5IHNtYWxsIGF1eGlsaWFyeQotLy8gaW5mb3JtYXRpb24gZm9yIGFuIGVudGlyZSBydW4gYW5kIHRoZW4gZGlzY2FyZCBkYXRhIGZyb20gdGhlIGlucHV0IHN0cmVhbSwKLS8vIGluc3RlYWQgb2YgcmV0YWluaW5nIHRoZSBlbnRpcmUgJ21kYXQnIGJveC4KLS8vCi0vLyBXZSBvcHRpbWl6ZSBmb3IgdGhpcyBzaXR1YXRpb24gKHdpdGggbm8gbG9zcyBvZiBnZW5lcmFsaXR5KSBieSBzb3J0aW5nIHRyYWNrCi0vLyBydW5zIGR1cmluZyBpdGVyYXRpb24gaW4gb3JkZXIgb2YgdGhlaXIgZmlyc3QgZGF0YSBvZmZzZXQgKGVpdGhlciBzYW1wbGUgZGF0YQotLy8gb3IgYXV4aWxpYXJ5IGRhdGEpLgotY2xhc3MgQ29tcGFyZU1pblRyYWNrUnVuRGF0YU9mZnNldCB7Ci0gcHVibGljOgotICBib29sIG9wZXJhdG9yKCkoY29uc3QgVHJhY2tSdW5JbmZvJiBhLCBjb25zdCBUcmFja1J1bkluZm8mIGIpIHsKLSAgICBpbnQ2NF90IGFfYXV4ID0gYS5hdXhfaW5mb190b3RhbF9zaXplID8gYS5hdXhfaW5mb19zdGFydF9vZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCk7Ci0gICAgaW50NjRfdCBiX2F1eCA9IGIuYXV4X2luZm9fdG90YWxfc2l6ZSA/IGIuYXV4X2luZm9fc3RhcnRfb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpOwotCi0gICAgaW50NjRfdCBhX2xlc3NlciA9IHN0ZDo6bWluKGFfYXV4LCBhLnNhbXBsZV9zdGFydF9vZmZzZXQpOwotICAgIGludDY0X3QgYV9ncmVhdGVyID0gc3RkOjptYXgoYV9hdXgsIGEuc2FtcGxlX3N0YXJ0X29mZnNldCk7Ci0gICAgaW50NjRfdCBiX2xlc3NlciA9IHN0ZDo6bWluKGJfYXV4LCBiLnNhbXBsZV9zdGFydF9vZmZzZXQpOwotICAgIGludDY0X3QgYl9ncmVhdGVyID0gc3RkOjptYXgoYl9hdXgsIGIuc2FtcGxlX3N0YXJ0X29mZnNldCk7Ci0KLSAgICBpZiAoYV9sZXNzZXIgPT0gYl9sZXNzZXIpIHJldHVybiBhX2dyZWF0ZXIgPCBiX2dyZWF0ZXI7Ci0gICAgcmV0dXJuIGFfbGVzc2VyIDwgYl9sZXNzZXI7Ci0gIH0KLX07Ci0KLWJvb2wgVHJhY2tSdW5JdGVyYXRvcjo6SW5pdChjb25zdCBNb3ZpZUZyYWdtZW50JiBtb29mKSB7Ci0gIHJ1bnNfLmNsZWFyKCk7Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtb29mLnRyYWNrcy5zaXplKCk7IGkrKykgewotICAgIGNvbnN0IFRyYWNrRnJhZ21lbnQmIHRyYWYgPSBtb29mLnRyYWNrc1tpXTsKLQotICAgIGNvbnN0IFRyYWNrKiB0cmFrID0gTlVMTDsKLSAgICBmb3IgKHNpemVfdCB0ID0gMDsgdCA8IG1vb3ZfLT50cmFja3Muc2l6ZSgpOyB0KyspIHsKLSAgICAgIGlmIChtb292Xy0+dHJhY2tzW3RdLmhlYWRlci50cmFja19pZCA9PSB0cmFmLmhlYWRlci50cmFja19pZCkKLSAgICAgICAgdHJhayA9ICZtb292Xy0+dHJhY2tzW3RdOwotICAgIH0KLSAgICBSQ0hFQ0sodHJhayk7Ci0KLSAgICBjb25zdCBUcmFja0V4dGVuZHMqIHRyZXggPSBOVUxMOwotICAgIGZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbW9vdl8tPmV4dGVuZHMudHJhY2tzLnNpemUoKTsgdCsrKSB7Ci0gICAgICBpZiAobW9vdl8tPmV4dGVuZHMudHJhY2tzW3RdLnRyYWNrX2lkID09IHRyYWYuaGVhZGVyLnRyYWNrX2lkKQotICAgICAgICB0cmV4ID0gJm1vb3ZfLT5leHRlbmRzLnRyYWNrc1t0XTsKLSAgICB9Ci0gICAgUkNIRUNLKHRyZXgpOwotCi0gICAgY29uc3QgU2FtcGxlRGVzY3JpcHRpb24mIHN0c2QgPQotICAgICAgICB0cmFrLT5tZWRpYS5pbmZvcm1hdGlvbi5zYW1wbGVfdGFibGUuZGVzY3JpcHRpb247Ci0gICAgaWYgKHN0c2QudHlwZSAhPSBrQXVkaW8gJiYgc3RzZC50eXBlICE9IGtWaWRlbykgewotICAgICAgRFZMT0coMSkgPDwgIlNraXBwaW5nIHVuaGFuZGxlZCB0cmFjayB0eXBlIjsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBzaXplX3QgZGVzY19pZHggPSB0cmFmLmhlYWRlci5zYW1wbGVfZGVzY3JpcHRpb25faW5kZXg7Ci0gICAgaWYgKCFkZXNjX2lkeCkgZGVzY19pZHggPSB0cmV4LT5kZWZhdWx0X3NhbXBsZV9kZXNjcmlwdGlvbl9pbmRleDsKLSAgICBSQ0hFQ0soZGVzY19pZHggPiAwKTsgIC8vIERlc2NyaXB0aW9ucyBhcmUgb25lLWluZGV4ZWQgaW4gdGhlIGZpbGUKLSAgICBkZXNjX2lkeCAtPSAxOwotCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHNhbXBsZV9lbmNyeXB0aW9uX2RhdGEgPQotICAgICAgICB0cmFmLnNhbXBsZV9lbmNyeXB0aW9uLnNhbXBsZV9lbmNyeXB0aW9uX2RhdGE7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJ1ZmZlclJlYWRlcj4gc2FtcGxlX2VuY3J5cHRpb25fcmVhZGVyOwotICAgIHVpbnQzMl90IHNhbXBsZV9lbmNyeXB0aW9uX2VudHJpZXNfY291bnQgPSAwOwotICAgIGlmICghc2FtcGxlX2VuY3J5cHRpb25fZGF0YS5lbXB0eSgpKSB7Ci0gICAgICBzYW1wbGVfZW5jcnlwdGlvbl9yZWFkZXIucmVzZXQobmV3IEJ1ZmZlclJlYWRlcigKLSAgICAgICAgICBzYW1wbGVfZW5jcnlwdGlvbl9kYXRhLmRhdGEoKSwgc2FtcGxlX2VuY3J5cHRpb25fZGF0YS5zaXplKCkpKTsKLSAgICAgIFJDSEVDSyhzYW1wbGVfZW5jcnlwdGlvbl9yZWFkZXItPlJlYWQ0KCZzYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzX2NvdW50KSk7Ci0gICAgfQotCi0gICAgLy8gUHJvY2VzcyBlZGl0IGxpc3QgdG8gcmVtb3ZlIENUUyBvZmZzZXQgaW50cm9kdWNlZCBpbiB0aGUgcHJlc2VuY2Ugb2YKLSAgICAvLyBCLWZyYW1lcyAodGhvc2UgdGhhdCBjb250YWluIGEgc2luZ2xlIGVkaXQgd2l0aCBhIG5vbm5lZ2F0aXZlIG1lZGlhCi0gICAgLy8gdGltZSkuIE90aGVyIHVzZXMgb2YgZWRpdCBsaXN0cyBhcmUgbm90IHN1cHBvcnRlZCwgYXMgdGhleSBhcmUKLSAgICAvLyBib3RoIHVuY29tbW9uIGFuZCBiZXR0ZXIgc2VydmVkIGJ5IGhpZ2hlci1sZXZlbCBwcm90b2NvbHMuCi0gICAgaW50NjRfdCBlZGl0X2xpc3Rfb2Zmc2V0ID0gMDsKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxFZGl0TGlzdEVudHJ5PiYgZWRpdHMgPSB0cmFrLT5lZGl0Lmxpc3QuZWRpdHM7Ci0gICAgaWYgKCFlZGl0cy5lbXB0eSgpKSB7Ci0gICAgICBpZiAoZWRpdHMuc2l6ZSgpID4gMSkKLSAgICAgICAgRFZMT0coMSkgPDwgIk11bHRpLWVudHJ5IGVkaXQgYm94IGRldGVjdGVkOyBzb21lIGNvbXBvbmVudHMgaWdub3JlZC4iOwotCi0gICAgICBpZiAoZWRpdHNbMF0ubWVkaWFfdGltZSA8IDApIHsKLSAgICAgICAgRFZMT0coMSkgPDwgIkVtcHR5IGVkaXQgbGlzdCBlbnRyeSBpZ25vcmVkLiI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlZGl0X2xpc3Rfb2Zmc2V0ID0gLWVkaXRzWzBdLm1lZGlhX3RpbWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU2FtcGxlVG9Hcm91cEl0ZXJhdG9yIHNhbXBsZV90b19ncm91cF9pdHIodHJhZi5zYW1wbGVfdG9fZ3JvdXApOwotICAgIGJvb2wgaXNfc2FtcGxlX3RvX2dyb3VwX3ZhbGlkID0gc2FtcGxlX3RvX2dyb3VwX2l0ci5Jc1ZhbGlkKCk7Ci0KLSAgICBpbnQ2NF90IHJ1bl9zdGFydF9kdHMgPSB0cmFmLmRlY29kZV90aW1lLmRlY29kZV90aW1lOwotICAgIHVpbnQ2NF90IHNhbXBsZV9jb3VudF9zdW0gPSAwOwotICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgdHJhZi5ydW5zLnNpemUoKTsgaisrKSB7Ci0gICAgICBjb25zdCBUcmFja0ZyYWdtZW50UnVuJiB0cnVuID0gdHJhZi5ydW5zW2pdOwotICAgICAgVHJhY2tSdW5JbmZvIHRyaTsKLSAgICAgIHRyaS50cmFja19pZCA9IHRyYWYuaGVhZGVyLnRyYWNrX2lkOwotICAgICAgdHJpLnRpbWVzY2FsZSA9IHRyYWstPm1lZGlhLmhlYWRlci50aW1lc2NhbGU7Ci0gICAgICB0cmkuc3RhcnRfZHRzID0gcnVuX3N0YXJ0X2R0czsKLSAgICAgIHRyaS5zYW1wbGVfc3RhcnRfb2Zmc2V0ID0gdHJ1bi5kYXRhX29mZnNldDsKLSAgICAgIHRyaS50cmFja19zYW1wbGVfZW5jcnlwdGlvbl9ncm91cCA9Ci0gICAgICAgICAgJnRyYWstPm1lZGlhLmluZm9ybWF0aW9uLnNhbXBsZV90YWJsZS5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb247Ci0gICAgICB0cmkuZnJhZ21lbnRfc2FtcGxlX2VuY3J5cHRpb25faW5mbyA9Ci0gICAgICAgICAgdHJhZi5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllczsKLQotICAgICAgY29uc3QgVHJhY2tFbmNyeXB0aW9uKiB0cmFja19lbmNyeXB0aW9uOwotICAgICAgY29uc3QgUHJvdGVjdGlvblNjaGVtZUluZm8qIHNpbmY7Ci0gICAgICB0cmkuaXNfYXVkaW8gPSAoc3RzZC50eXBlID09IGtBdWRpbyk7Ci0gICAgICBpZiAodHJpLmlzX2F1ZGlvKSB7Ci0gICAgICAgIFJDSEVDSyghc3RzZC5hdWRpb19lbnRyaWVzLmVtcHR5KCkpOwotICAgICAgICBpZiAoZGVzY19pZHggPiBzdHNkLmF1ZGlvX2VudHJpZXMuc2l6ZSgpKSBkZXNjX2lkeCA9IDA7Ci0gICAgICAgIHRyaS5hdWRpb19kZXNjcmlwdGlvbiA9ICZzdHNkLmF1ZGlvX2VudHJpZXNbZGVzY19pZHhdOwotICAgICAgICBzaW5mID0gJnRyaS5hdWRpb19kZXNjcmlwdGlvbi0+c2luZjsKLSAgICAgICAgdHJhY2tfZW5jcnlwdGlvbiA9ICZ0cmkuYXVkaW9fZGVzY3JpcHRpb24tPnNpbmYuaW5mby50cmFja19lbmNyeXB0aW9uOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgUkNIRUNLKCFzdHNkLnZpZGVvX2VudHJpZXMuZW1wdHkoKSk7Ci0gICAgICAgIGlmIChkZXNjX2lkeCA+IHN0c2QudmlkZW9fZW50cmllcy5zaXplKCkpIGRlc2NfaWR4ID0gMDsKLSAgICAgICAgdHJpLnZpZGVvX2Rlc2NyaXB0aW9uID0gJnN0c2QudmlkZW9fZW50cmllc1tkZXNjX2lkeF07Ci0gICAgICAgIHNpbmYgPSAmdHJpLnZpZGVvX2Rlc2NyaXB0aW9uLT5zaW5mOwotICAgICAgICB0cmFja19lbmNyeXB0aW9uID0gJnRyaS52aWRlb19kZXNjcmlwdGlvbi0+c2luZi5pbmZvLnRyYWNrX2VuY3J5cHRpb247Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc2luZi0+SGFzU3VwcG9ydGVkU2NoZW1lKCkpIHsKLSAgICAgICAgdHJpLmVuY3J5cHRpb25fc2NoZW1lID0gVW5lbmNyeXB0ZWQoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyaS5lbmNyeXB0aW9uX3NjaGVtZSA9IEVuY3J5cHRpb25TY2hlbWUoCi0gICAgICAgICAgICBzaW5mLT5Jc0NiY3NFbmNyeXB0aW9uU2NoZW1lKCkKLSAgICAgICAgICAgICAgICA/IEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DQkMKLSAgICAgICAgICAgICAgICA6IEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DVFIsCi0gICAgICAgICAgICBFbmNyeXB0aW9uUGF0dGVybih0cmFja19lbmNyeXB0aW9uLT5kZWZhdWx0X2NyeXB0X2J5dGVfYmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja19lbmNyeXB0aW9uLT5kZWZhdWx0X3NraXBfYnl0ZV9ibG9jaykpOwotICAgICAgfQotCi0gICAgICAvLyBJbml0aWFsaXplIGF1eF9pbmZvIHZhcmlhYmxlcyBvbmx5IGlmIG5vIHNhbXBsZSBlbmNyeXB0aW9uIGVudHJpZXMuCi0gICAgICBpZiAoc2FtcGxlX2VuY3J5cHRpb25fZW50cmllc19jb3VudCA9PSAwICYmCi0gICAgICAgICAgdHJhZi5hdXhpbGlhcnlfb2Zmc2V0Lm9mZnNldHMuc2l6ZSgpID4gaikgewotICAgICAgICAvLyBDb2xsZWN0IGluZm9ybWF0aW9uIGZyb20gdGhlIGF1eGlsaWFyeV9vZmZzZXQgZW50cnkgd2l0aCB0aGUgc2FtZQotICAgICAgICAvLyBpbmRleCBpbiB0aGUgJ3NhaXonIGNvbnRhaW5lciBhcyB0aGUgY3VycmVudCBydW4ncyBpbmRleCBpbiB0aGUKLSAgICAgICAgLy8gJ3RydW4nIGNvbnRhaW5lciwgaWYgaXQgaXMgcHJlc2VudC4KLSAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGFuIGF1eGlsaWFyeSBpbmZvIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBzYW1wbGUKLSAgICAgICAgLy8gaW4gdGhlIGF1eGlsaWFyeSBvZmZzZXQgZW50cnkncyBjb3JyZXNwb25kaW5nIHRyYWNrIHJ1bi4KLSAgICAgICAgUkNIRUNLKHRyYWYuYXV4aWxpYXJ5X3NpemUuc2FtcGxlX2NvdW50ID49Ci0gICAgICAgICAgICAgICBzYW1wbGVfY291bnRfc3VtICsgdHJ1bi5zYW1wbGVfY291bnQpOwotICAgICAgICB0cmkuYXV4X2luZm9fc3RhcnRfb2Zmc2V0ID0gdHJhZi5hdXhpbGlhcnlfb2Zmc2V0Lm9mZnNldHNbal07Ci0gICAgICAgIHRyaS5hdXhfaW5mb19kZWZhdWx0X3NpemUgPQotICAgICAgICAgICAgdHJhZi5hdXhpbGlhcnlfc2l6ZS5kZWZhdWx0X3NhbXBsZV9pbmZvX3NpemU7Ci0gICAgICAgIGlmICh0cmkuYXV4X2luZm9fZGVmYXVsdF9zaXplID09IDApIHsKLSAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgc2l6ZXMgPQotICAgICAgICAgICAgICB0cmFmLmF1eGlsaWFyeV9zaXplLnNhbXBsZV9pbmZvX3NpemVzOwotICAgICAgICAgIHRyaS5hdXhfaW5mb19zaXplcy5pbnNlcnQoCi0gICAgICAgICAgICAgIHRyaS5hdXhfaW5mb19zaXplcy5iZWdpbigpLCBzaXplcy5iZWdpbigpICsgc2FtcGxlX2NvdW50X3N1bSwKLSAgICAgICAgICAgICAgc2l6ZXMuYmVnaW4oKSArIHNhbXBsZV9jb3VudF9zdW0gKyB0cnVuLnNhbXBsZV9jb3VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGUgZGVmYXVsdCBpbmZvIHNpemUgaXMgcG9zaXRpdmUsIGZpbmQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGF1eAotICAgICAgICAvLyBpbmZvIGJsb2NrIGZyb20gaXQsIG90aGVyd2lzZSBzdW0gb3ZlciB0aGUgaW5kaXZpZHVhbCBzaXplcyBvZiBlYWNoCi0gICAgICAgIC8vIGF1eCBpbmZvIGVudHJ5IGluIHRoZSBhdXhfb2Zmc2V0IGVudHJ5LgotICAgICAgICBpZiAodHJpLmF1eF9pbmZvX2RlZmF1bHRfc2l6ZSkgewotICAgICAgICAgIHRyaS5hdXhfaW5mb190b3RhbF9zaXplID0KLSAgICAgICAgICAgICAgdHJpLmF1eF9pbmZvX2RlZmF1bHRfc2l6ZSAqIHRydW4uc2FtcGxlX2NvdW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRyaS5hdXhfaW5mb190b3RhbF9zaXplID0gMDsKLSAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IHRydW4uc2FtcGxlX2NvdW50OyBrKyspIHsKLSAgICAgICAgICAgIHRyaS5hdXhfaW5mb190b3RhbF9zaXplICs9IHRyaS5hdXhfaW5mb19zaXplc1trXTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyaS5hdXhfaW5mb19zdGFydF9vZmZzZXQgPSAtMTsKLSAgICAgICAgdHJpLmF1eF9pbmZvX3RvdGFsX3NpemUgPSAwOwotICAgICAgfQotCi0gICAgICB0cmkuc2FtcGxlcy5yZXNpemUodHJ1bi5zYW1wbGVfY291bnQpOwotICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB0cnVuLnNhbXBsZV9jb3VudDsgaysrKSB7Ci0gICAgICAgIGlmICghUG9wdWxhdGVTYW1wbGVJbmZvKCp0cmV4LCB0cmFmLmhlYWRlciwgdHJ1biwgZWRpdF9saXN0X29mZnNldCwgaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyaS5zYW1wbGVzW2tdLCB0cmFmLnNkdHAuc2FtcGxlX2RlcGVuZHNfb24oayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS5pc19hdWRpbywgbWVkaWFfbG9nXykpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBydW5fc3RhcnRfZHRzICs9IHRyaS5zYW1wbGVzW2tdLmR1cmF0aW9uOwotCi0gICAgICAgIGlmICghaXNfc2FtcGxlX3RvX2dyb3VwX3ZhbGlkKSB7Ci0gICAgICAgICAgLy8gU2V0IGdyb3VwIGRlc2NyaXB0aW9uIGluZGV4IHRvIDAgdG8gcmVhZCBlbmNyeXB0aW9uIGluZm9ybWF0aW9uCi0gICAgICAgICAgLy8gZnJvbSBUcmFja0VuY3J5cHRpb24gQm94LgotICAgICAgICAgIHRyaS5zYW1wbGVzW2tdLmNlbmNfZ3JvdXBfZGVzY3JpcHRpb25faW5kZXggPSAwOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QgaW5kZXggPSBzYW1wbGVfdG9fZ3JvdXBfaXRyLmdyb3VwX2Rlc2NyaXB0aW9uX2luZGV4KCk7Ci0gICAgICAgIHRyaS5zYW1wbGVzW2tdLmNlbmNfZ3JvdXBfZGVzY3JpcHRpb25faW5kZXggPSBpbmRleDsKLSAgICAgICAgaWYgKGluZGV4ICE9IDApIFJDSEVDSyhHZXRTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KHRyaSwgaW5kZXgpKTsKLSAgICAgICAgaXNfc2FtcGxlX3RvX2dyb3VwX3ZhbGlkID0gc2FtcGxlX3RvX2dyb3VwX2l0ci5BZHZhbmNlKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoc2FtcGxlX2VuY3J5cHRpb25fZW50cmllc19jb3VudCA+IDApIHsKLSAgICAgICAgUkNIRUNLKHNhbXBsZV9lbmNyeXB0aW9uX2VudHJpZXNfY291bnQgPj0KLSAgICAgICAgICAgICAgIHNhbXBsZV9jb3VudF9zdW0gKyB0cnVuLnNhbXBsZV9jb3VudCk7Ci0gICAgICAgIHRyaS5zYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzLnJlc2l6ZSh0cnVuLnNhbXBsZV9jb3VudCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgdHJ1bi5zYW1wbGVfY291bnQ7IGsrKykgewotICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gdHJpLnNhbXBsZXNba10uY2VuY19ncm91cF9kZXNjcmlwdGlvbl9pbmRleDsKLSAgICAgICAgICBjb25zdCBDZW5jU2FtcGxlRW5jcnlwdGlvbkluZm9FbnRyeSogaW5mb19lbnRyeSA9Ci0gICAgICAgICAgICAgIGluZGV4ID09IDAgPyBudWxscHRyIDogR2V0U2FtcGxlRW5jcnlwdGlvbkluZm9FbnRyeSh0cmksIGluZGV4KTsKLSAgICAgICAgICBjb25zdCB1aW50OF90IGl2X3NpemUgPSBpbmRleCA9PSAwID8gdHJhY2tfZW5jcnlwdGlvbi0+ZGVmYXVsdF9pdl9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGluZm9fZW50cnktPml2X3NpemU7Ci0gICAgICAgICAgU2FtcGxlRW5jcnlwdGlvbkVudHJ5JiBlbnRyeSA9IHRyaS5zYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzW2tdOwotICAgICAgICAgIFJDSEVDSyhlbnRyeS5QYXJzZShzYW1wbGVfZW5jcnlwdGlvbl9yZWFkZXIuZ2V0KCksIGl2X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWYuc2FtcGxlX2VuY3J5cHRpb24udXNlX3N1YnNhbXBsZV9lbmNyeXB0aW9uKSk7Ci0gICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHBlci1zYW1wbGUgSVYsIGdldCB0aGUgY29uc3RhbnQgSVYuCi0gICAgICAgICAgYm9vbCBpc19lbmNyeXB0ZWQgPSBpbmRleCA9PSAwID8gdHJhY2tfZW5jcnlwdGlvbi0+aXNfZW5jcnlwdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5mb19lbnRyeS0+aXNfZW5jcnlwdGVkOwotICAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBzZXR0aW5nIHRoZSBwYXR0ZXJuIHZhbHVlcyBpbiB0aGUgJ3RlbmMnIGJveCBmb3IKLSAgICAgICAgICAvLyB0aGUgdHJhY2sgKG5vdCB2YXJ5aW5nIG9uIHBlciBzYW1wbGUgZ3JvdXAgYmFzaXMpLgotICAgICAgICAgIC8vIFRodXMgd2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgc2V0dGluZ3MgaW4gdGhlIHNhbXBsZSBncm91cCBtYXRjaAotICAgICAgICAgIC8vIHRob3NlIGluIHRoZSAndGVuYycuCi0gICAgICAgICAgaWYgKGlzX2VuY3J5cHRlZCAmJiBpbmRleCAhPSAwKSB7Ci0gICAgICAgICAgICBSQ0hFQ0tfTUVESUFfTE9HR0VEKGluZm9fZW50cnktPmNyeXB0X2J5dGVfYmxvY2sgPT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrX2VuY3J5cHRpb24tPmRlZmF1bHRfY3J5cHRfYnl0ZV9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfbG9nXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhdHRlcm4gdmFsdWUgKGNyeXB0IGJ5dGUgYmxvY2spIGZvciB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2FtcGxlIGdyb3VwIGRvZXMgbm90IG1hdGNoIHRoYXQgaW4gdGhlIHRlbmMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYm94IC4gVGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iKTsKLSAgICAgICAgICAgIFJDSEVDS19NRURJQV9MT0dHRUQoaW5mb19lbnRyeS0+c2tpcF9ieXRlX2Jsb2NrID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja19lbmNyeXB0aW9uLT5kZWZhdWx0X3NraXBfYnl0ZV9ibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFfbG9nXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhdHRlcm4gdmFsdWUgKHNraXAgYnl0ZSBibG9jaykgZm9yIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGUgZ3JvdXAgZG9lcyBub3QgbWF0Y2ggdGhhdCBpbiB0aGUgdGVuYyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib3ggLiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNfZW5jcnlwdGVkICYmICFpdl9zaXplKSB7Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90IGNvbnN0YW50X2l2X3NpemUgPQotICAgICAgICAgICAgICAgIGluZGV4ID09IDAgPyB0cmFja19lbmNyeXB0aW9uLT5kZWZhdWx0X2NvbnN0YW50X2l2X3NpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5mb19lbnRyeS0+Y29uc3RhbnRfaXZfc2l6ZTsKLSAgICAgICAgICAgIFJDSEVDSyhjb25zdGFudF9pdl9zaXplICE9IDApOwotICAgICAgICAgICAgY29uc3QgdWludDhfdCogY29uc3RhbnRfaXYgPQotICAgICAgICAgICAgICAgIGluZGV4ID09IDAgPyB0cmFja19lbmNyeXB0aW9uLT5kZWZhdWx0X2NvbnN0YW50X2l2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA6IGluZm9fZW50cnktPmNvbnN0YW50X2l2OwotICAgICAgICAgICAgbWVtY3B5KGVudHJ5LmluaXRpYWxpemF0aW9uX3ZlY3RvciwgY29uc3RhbnRfaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRfaXZfc2l6ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBydW5zXy5wdXNoX2JhY2sodHJpKTsKLSAgICAgIHNhbXBsZV9jb3VudF9zdW0gKz0gdHJ1bi5zYW1wbGVfY291bnQ7Ci0gICAgfQotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgaXRlcmF0ZWQgdGhyb3VnaCBhbGwgc2FtcGxlcyBpbiBTYW1wbGVUb0dyb3VwIEJveC4KLSAgICBSQ0hFQ0soIXNhbXBsZV90b19ncm91cF9pdHIuSXNWYWxpZCgpKTsKLSAgfQotCi0gIHN0ZDo6c29ydChydW5zXy5iZWdpbigpLCBydW5zXy5lbmQoKSwgQ29tcGFyZU1pblRyYWNrUnVuRGF0YU9mZnNldCgpKTsKLSAgcnVuX2l0cl8gPSBydW5zXy5iZWdpbigpOwotICBSZXNldFJ1bigpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBUcmFja1J1bkl0ZXJhdG9yOjpBZHZhbmNlUnVuKCkgewotICArK3J1bl9pdHJfOwotICBSZXNldFJ1bigpOwotfQotCi12b2lkIFRyYWNrUnVuSXRlcmF0b3I6OlJlc2V0UnVuKCkgewotICBpZiAoIUlzUnVuVmFsaWQoKSkgcmV0dXJuOwotICBzYW1wbGVfZHRzXyA9IHJ1bl9pdHJfLT5zdGFydF9kdHM7Ci0gIHNhbXBsZV9vZmZzZXRfID0gcnVuX2l0cl8tPnNhbXBsZV9zdGFydF9vZmZzZXQ7Ci0gIHNhbXBsZV9pdHJfID0gcnVuX2l0cl8tPnNhbXBsZXMuYmVnaW4oKTsKLX0KLQotdm9pZCBUcmFja1J1bkl0ZXJhdG9yOjpBZHZhbmNlU2FtcGxlKCkgewotICBEQ0hFQ0soSXNTYW1wbGVWYWxpZCgpKTsKLSAgc2FtcGxlX2R0c18gKz0gc2FtcGxlX2l0cl8tPmR1cmF0aW9uOwotICBzYW1wbGVfb2Zmc2V0XyArPSBzYW1wbGVfaXRyXy0+c2l6ZTsKLSAgKytzYW1wbGVfaXRyXzsKLX0KLQotLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IGluZGljYXRlcyBhIG5lZWQgZm9yIGNhY2hpbmcgaWYgQ0VOQyBhdXhpbGlhcnkKLS8vIGluZm8gaXMgYXZhaWxhYmxlIGluIHRoZSBzdHJlYW0uCi1ib29sIFRyYWNrUnVuSXRlcmF0b3I6OkF1eEluZm9OZWVkc1RvQmVDYWNoZWQoKSB7Ci0gIERDSEVDSyhJc1J1blZhbGlkKCkpOwotICByZXR1cm4gaXNfZW5jcnlwdGVkKCkgJiYgYXV4X2luZm9fc2l6ZSgpID4gMCAmJgotICAgICAgICAgcnVuX2l0cl8tPnNhbXBsZV9lbmNyeXB0aW9uX2VudHJpZXMuc2l6ZSgpID09IDA7Ci19Ci0KLS8vIFRoaXMgaW1wbGVtZW50YXRpb24gY3VycmVudGx5IG9ubHkgY2FjaGVzIENFTkMgYXV4aWxpYXJ5IGluZm8uCi1ib29sIFRyYWNrUnVuSXRlcmF0b3I6OkNhY2hlQXV4SW5mbyhjb25zdCB1aW50OF90KiBidWYsIGludCBidWZfc2l6ZSkgewotICBSQ0hFQ0soQXV4SW5mb05lZWRzVG9CZUNhY2hlZCgpICYmIGJ1Zl9zaXplID49IGF1eF9pbmZvX3NpemUoKSk7Ci0KLSAgc3RkOjp2ZWN0b3I8U2FtcGxlRW5jcnlwdGlvbkVudHJ5PiYgc2FtcGxlX2VuY3J5cHRpb25fZW50cmllcyA9Ci0gICAgICBydW5zX1tydW5faXRyXyAtIHJ1bnNfLmJlZ2luKCldLnNhbXBsZV9lbmNyeXB0aW9uX2VudHJpZXM7Ci0gIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJpZXMucmVzaXplKHJ1bl9pdHJfLT5zYW1wbGVzLnNpemUoKSk7Ci0gIGludDY0X3QgcG9zID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBydW5faXRyXy0+c2FtcGxlcy5zaXplKCk7IGkrKykgewotICAgIGludCBpbmZvX3NpemUgPSBydW5faXRyXy0+YXV4X2luZm9fZGVmYXVsdF9zaXplOwotICAgIGlmICghaW5mb19zaXplKSBpbmZvX3NpemUgPSBydW5faXRyXy0+YXV4X2luZm9fc2l6ZXNbaV07Ci0KLSAgICBpZiAoSXNTYW1wbGVFbmNyeXB0ZWQoaSkpIHsKLSAgICAgIEJ1ZmZlclJlYWRlciByZWFkZXIoYnVmICsgcG9zLCBpbmZvX3NpemUpOwotICAgICAgY29uc3QgdWludDhfdCBpdl9zaXplID0gR2V0SXZTaXplKGkpOwotICAgICAgY29uc3QgYm9vbCBoYXNfc3Vic2FtcGxlcyA9IGluZm9fc2l6ZSA+IGl2X3NpemU7Ci0gICAgICBTYW1wbGVFbmNyeXB0aW9uRW50cnkmIGVudHJ5ID0gc2FtcGxlX2VuY3J5cHRpb25fZW50cmllc1tpXTsKLSAgICAgIFJDSEVDSyhlbnRyeS5QYXJzZSgmcmVhZGVyLCBpdl9zaXplLCBoYXNfc3Vic2FtcGxlcykpOwotICAgICAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHBlci1zYW1wbGUgSVYsIGdldCB0aGUgY29uc3RhbnQgSVYuCi0gICAgICBpZiAoIWl2X3NpemUpIHsKLSAgICAgICAgUkNIRUNLKEFwcGx5Q29uc3RhbnRJdihpLCAmZW50cnkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcG9zICs9IGluZm9fc2l6ZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFRyYWNrUnVuSXRlcmF0b3I6OklzUnVuVmFsaWQoKSBjb25zdCB7IHJldHVybiBydW5faXRyXyAhPSBydW5zXy5lbmQoKTsgfQotCi1ib29sIFRyYWNrUnVuSXRlcmF0b3I6OklzU2FtcGxlVmFsaWQoKSBjb25zdCB7Ci0gIHJldHVybiBJc1J1blZhbGlkKCkgJiYgKHNhbXBsZV9pdHJfICE9IHJ1bl9pdHJfLT5zYW1wbGVzLmVuZCgpKTsKLX0KLQotLy8gQmVjYXVzZSB0cmFja3MgYXJlIGluIHNvcnRlZCBvcmRlciBhbmQgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIGlzIGNhY2hlZCB3aGVuCi0vLyByZXR1cm5pbmcgc2FtcGxlcywgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vIGRhdGEgd2lsbCBiZSByZXF1aXJlZCBiZWZvcmUgdGhlCi0vLyBsZXNzZXIgb2YgdGhlIG1pbmltdW0gZGF0YSBvZmZzZXQgb2YgdGhpcyB0cmFjayBhbmQgdGhlIG5leHQgaW4gc2VxdWVuY2UuCi0vLyAoVGhlIHN0cm9uZ2VyIGNvbmRpdGlvbiAtIHRoYXQgbm8gZGF0YSBpcyByZXF1aXJlZCBiZWZvcmUgdGhlIG1pbmltdW0gZGF0YQotLy8gb2Zmc2V0IG9mIHRoaXMgdHJhY2sgYWxvbmUgLSBpcyBub3QgZ3VhcmFudGVlZCwgYmVjYXVzZSB0aGUgQk1GRiBzcGVjIGRvZXMKLS8vIG5vdCBoYXZlIGFueSBpbnRlci1ydW4gb3JkZXJpbmcgcmVzdHJpY3Rpb25zLikKLWludDY0X3QgVHJhY2tSdW5JdGVyYXRvcjo6R2V0TWF4Q2xlYXJPZmZzZXQoKSB7Ci0gIGludDY0X3Qgb2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCk7Ci0KLSAgaWYgKElzU2FtcGxlVmFsaWQoKSkgewotICAgIG9mZnNldCA9IHN0ZDo6bWluKG9mZnNldCwgc2FtcGxlX29mZnNldF8pOwotICAgIGlmIChBdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkpIG9mZnNldCA9IHN0ZDo6bWluKG9mZnNldCwgYXV4X2luZm9fb2Zmc2V0KCkpOwotICB9Ci0gIGlmIChydW5faXRyXyAhPSBydW5zXy5lbmQoKSkgewotICAgIHN0ZDo6dmVjdG9yPFRyYWNrUnVuSW5mbz46OmNvbnN0X2l0ZXJhdG9yIG5leHRfcnVuID0gcnVuX2l0cl8gKyAxOwotICAgIGlmIChuZXh0X3J1biAhPSBydW5zXy5lbmQoKSkgewotICAgICAgb2Zmc2V0ID0gc3RkOjptaW4ob2Zmc2V0LCBuZXh0X3J1bi0+c2FtcGxlX3N0YXJ0X29mZnNldCk7Ci0gICAgICBpZiAobmV4dF9ydW4tPmF1eF9pbmZvX3RvdGFsX3NpemUpCi0gICAgICAgIG9mZnNldCA9IHN0ZDo6bWluKG9mZnNldCwgbmV4dF9ydW4tPmF1eF9pbmZvX3N0YXJ0X29mZnNldCk7Ci0gICAgfQotICB9Ci0gIGlmIChvZmZzZXQgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpIHJldHVybiAwOwotICByZXR1cm4gb2Zmc2V0OwotfQotCi11aW50MzJfdCBUcmFja1J1bkl0ZXJhdG9yOjp0cmFja19pZCgpIGNvbnN0IHsKLSAgRENIRUNLKElzUnVuVmFsaWQoKSk7Ci0gIHJldHVybiBydW5faXRyXy0+dHJhY2tfaWQ7Ci19Ci0KLWJvb2wgVHJhY2tSdW5JdGVyYXRvcjo6aXNfZW5jcnlwdGVkKCkgY29uc3QgewotICBEQ0hFQ0soSXNTYW1wbGVWYWxpZCgpKTsKLSAgcmV0dXJuIElzU2FtcGxlRW5jcnlwdGVkKHNhbXBsZV9pdHJfIC0gcnVuX2l0cl8tPnNhbXBsZXMuYmVnaW4oKSk7Ci19Ci0KLWludDY0X3QgVHJhY2tSdW5JdGVyYXRvcjo6YXV4X2luZm9fb2Zmc2V0KCkgY29uc3QgewotICByZXR1cm4gcnVuX2l0cl8tPmF1eF9pbmZvX3N0YXJ0X29mZnNldDsKLX0KLQotaW50IFRyYWNrUnVuSXRlcmF0b3I6OmF1eF9pbmZvX3NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBydW5faXRyXy0+YXV4X2luZm9fdG90YWxfc2l6ZTsKLX0KLQotYm9vbCBUcmFja1J1bkl0ZXJhdG9yOjppc19hdWRpbygpIGNvbnN0IHsKLSAgRENIRUNLKElzUnVuVmFsaWQoKSk7Ci0gIHJldHVybiBydW5faXRyXy0+aXNfYXVkaW87Ci19Ci0KLWNvbnN0IEF1ZGlvU2FtcGxlRW50cnkmIFRyYWNrUnVuSXRlcmF0b3I6OmF1ZGlvX2Rlc2NyaXB0aW9uKCkgY29uc3QgewotICBEQ0hFQ0soaXNfYXVkaW8oKSk7Ci0gIERDSEVDSyhydW5faXRyXy0+YXVkaW9fZGVzY3JpcHRpb24pOwotICByZXR1cm4gKnJ1bl9pdHJfLT5hdWRpb19kZXNjcmlwdGlvbjsKLX0KLQotY29uc3QgVmlkZW9TYW1wbGVFbnRyeSYgVHJhY2tSdW5JdGVyYXRvcjo6dmlkZW9fZGVzY3JpcHRpb24oKSBjb25zdCB7Ci0gIERDSEVDSyghaXNfYXVkaW8oKSk7Ci0gIERDSEVDSyhydW5faXRyXy0+dmlkZW9fZGVzY3JpcHRpb24pOwotICByZXR1cm4gKnJ1bl9pdHJfLT52aWRlb19kZXNjcmlwdGlvbjsKLX0KLQotaW50NjRfdCBUcmFja1J1bkl0ZXJhdG9yOjpzYW1wbGVfb2Zmc2V0KCkgY29uc3QgewotICBEQ0hFQ0soSXNTYW1wbGVWYWxpZCgpKTsKLSAgcmV0dXJuIHNhbXBsZV9vZmZzZXRfOwotfQotCi1pbnQgVHJhY2tSdW5JdGVyYXRvcjo6c2FtcGxlX3NpemUoKSBjb25zdCB7Ci0gIERDSEVDSyhJc1NhbXBsZVZhbGlkKCkpOwotICByZXR1cm4gc2FtcGxlX2l0cl8tPnNpemU7Ci19Ci0KLURlY29kZVRpbWVzdGFtcCBUcmFja1J1bkl0ZXJhdG9yOjpkdHMoKSBjb25zdCB7Ci0gIERDSEVDSyhJc1NhbXBsZVZhbGlkKCkpOwotICByZXR1cm4gRGVjb2RlVGltZXN0YW1wRnJvbVJhdGlvbmFsKHNhbXBsZV9kdHNfLCBydW5faXRyXy0+dGltZXNjYWxlKTsKLX0KLQotYmFzZTo6VGltZURlbHRhIFRyYWNrUnVuSXRlcmF0b3I6OmN0cygpIGNvbnN0IHsKLSAgRENIRUNLKElzU2FtcGxlVmFsaWQoKSk7Ci0gIHJldHVybiBUaW1lRGVsdGFGcm9tUmF0aW9uYWwoc2FtcGxlX2R0c18gKyBzYW1wbGVfaXRyXy0+Y3RzX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5faXRyXy0+dGltZXNjYWxlKTsKLX0KLQotYmFzZTo6VGltZURlbHRhIFRyYWNrUnVuSXRlcmF0b3I6OmR1cmF0aW9uKCkgY29uc3QgewotICBEQ0hFQ0soSXNTYW1wbGVWYWxpZCgpKTsKLSAgcmV0dXJuIFRpbWVEZWx0YUZyb21SYXRpb25hbChzYW1wbGVfaXRyXy0+ZHVyYXRpb24sIHJ1bl9pdHJfLT50aW1lc2NhbGUpOwotfQotCi1ib29sIFRyYWNrUnVuSXRlcmF0b3I6OmlzX2tleWZyYW1lKCkgY29uc3QgewotICBEQ0hFQ0soSXNTYW1wbGVWYWxpZCgpKTsKLSAgcmV0dXJuIHNhbXBsZV9pdHJfLT5pc19rZXlmcmFtZTsKLX0KLQotY29uc3QgUHJvdGVjdGlvblNjaGVtZUluZm8mIFRyYWNrUnVuSXRlcmF0b3I6OnByb3RlY3Rpb25fc2NoZW1lX2luZm8oKSBjb25zdCB7Ci0gIGlmIChpc19hdWRpbygpKQotICAgIHJldHVybiBhdWRpb19kZXNjcmlwdGlvbigpLnNpbmY7Ci0gIHJldHVybiB2aWRlb19kZXNjcmlwdGlvbigpLnNpbmY7Ci19Ci0KLWNvbnN0IFRyYWNrRW5jcnlwdGlvbiYgVHJhY2tSdW5JdGVyYXRvcjo6dHJhY2tfZW5jcnlwdGlvbigpIGNvbnN0IHsKLSAgcmV0dXJuIHByb3RlY3Rpb25fc2NoZW1lX2luZm8oKS5pbmZvLnRyYWNrX2VuY3J5cHRpb247Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBUcmFja1J1bkl0ZXJhdG9yOjpHZXREZWNyeXB0Q29uZmlnKCkgewotICBEQ0hFQ0soaXNfZW5jcnlwdGVkKCkpOwotICBzaXplX3Qgc2FtcGxlX2lkeCA9IHNhbXBsZV9pdHJfIC0gcnVuX2l0cl8tPnNhbXBsZXMuYmVnaW4oKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGtpZCA9IEdldEtleUlkKHNhbXBsZV9pZHgpOwotICBzdGQ6OnN0cmluZyBrZXlfaWQoa2lkLmJlZ2luKCksIGtpZC5lbmQoKSk7Ci0KLSAgaWYgKHJ1bl9pdHJfLT5zYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzLmVtcHR5KCkpIHsKLSAgICBEQ0hFQ0tfRVEoMCwgYXV4X2luZm9fc2l6ZSgpKTsKLSAgICAvLyBUaGUgJ2NiY3MnIHNjaGVtZSBhbGxvd3MgZW1wdHkgYXV4IGluZm8gd2hlbiBhIGNvbnN0YW50IElWIGlzIGluIHVzZQotICAgIC8vIHdpdGggZnVsbCBzYW1wbGUgZW5jcnlwdGlvbi4gVGhhdCBjYXNlIHdpbGwgZmFsbCB0aHJvdWdoIHRvIGhlcmUuCi0gICAgU2FtcGxlRW5jcnlwdGlvbkVudHJ5IHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5OwotICAgIGlmIChBcHBseUNvbnN0YW50SXYoc2FtcGxlX2lkeCwgJnNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5KSkgewotICAgICAgc3RkOjpzdHJpbmcgaXYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2VuY3J5cHRpb25fZW50cnkuaW5pdGlhbGl6YXRpb25fdmVjdG9yKSwKLSAgICAgICAgICAgICAgICAgICAgIGFycmF5c2l6ZShzYW1wbGVfZW5jcnlwdGlvbl9lbnRyeS5pbml0aWFsaXphdGlvbl92ZWN0b3IpKTsKLSAgICAgIHN3aXRjaCAocnVuX2l0cl8tPmVuY3J5cHRpb25fc2NoZW1lLm1vZGUoKSkgewotICAgICAgICBjYXNlIEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX1VORU5DUllQVEVEOgotICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBjYXNlIEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DVFI6Ci0gICAgICAgICAgcmV0dXJuIERlY3J5cHRDb25maWc6OkNyZWF0ZUNlbmNDb25maWcoCi0gICAgICAgICAgICAgIGtleV9pZCwgaXYsIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5LnN1YnNhbXBsZXMpOwotICAgICAgICBjYXNlIEVuY3J5cHRpb25TY2hlbWU6OkNJUEhFUl9NT0RFX0FFU19DQkM6Ci0gICAgICAgICAgcmV0dXJuIERlY3J5cHRDb25maWc6OkNyZWF0ZUNiY3NDb25maWcoCi0gICAgICAgICAgICAgIGtleV9pZCwgaXYsIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5LnN1YnNhbXBsZXMsCi0gICAgICAgICAgICAgIHJ1bl9pdHJfLT5lbmNyeXB0aW9uX3NjaGVtZS5wYXR0ZXJuKCkpOwotICAgICAgfQotICAgIH0KLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJTYW1wbGUgZW5jcnlwdGlvbiBpbmZvIGlzIG5vdCBhdmFpbGFibGUuIjsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotCi0gIERDSEVDS19MVChzYW1wbGVfaWR4LCBydW5faXRyXy0+c2FtcGxlX2VuY3J5cHRpb25fZW50cmllcy5zaXplKCkpOwotICBjb25zdCBTYW1wbGVFbmNyeXB0aW9uRW50cnkmIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5ID0KLSAgICAgIHJ1bl9pdHJfLT5zYW1wbGVfZW5jcnlwdGlvbl9lbnRyaWVzW3NhbXBsZV9pZHhdOwotICBzdGQ6OnN0cmluZyBpdihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigKLSAgICAgICAgICAgICAgICAgICAgIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5LmluaXRpYWxpemF0aW9uX3ZlY3RvciksCi0gICAgICAgICAgICAgICAgIGFycmF5c2l6ZShzYW1wbGVfZW5jcnlwdGlvbl9lbnRyeS5pbml0aWFsaXphdGlvbl92ZWN0b3IpKTsKLQotICBzaXplX3QgdG90YWxfc2l6ZSA9IDA7Ci0gIGlmICghc2FtcGxlX2VuY3J5cHRpb25fZW50cnkuc3Vic2FtcGxlcy5lbXB0eSgpICYmCi0gICAgICAoIXNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5LkdldFRvdGFsU2l6ZU9mU3Vic2FtcGxlcygmdG90YWxfc2l6ZSkgfHwKLSAgICAgICB0b3RhbF9zaXplICE9IHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlX3NpemUoKSkpKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiSW5jb3JyZWN0IENFTkMgc3Vic2FtcGxlIHNpemUuIjsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotCi0gIGlmIChwcm90ZWN0aW9uX3NjaGVtZV9pbmZvKCkuSXNDYmNzRW5jcnlwdGlvblNjaGVtZSgpKSB7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHZXRHcm91cERlc2NyaXB0aW9uSW5kZXgoc2FtcGxlX2lkeCk7Ci0gICAgdWludDMyX3QgZW5jcnlwdF9ibG9ja3MgPQotICAgICAgICAoaW5kZXggPT0gMCkKLSAgICAgICAgICAgID8gdHJhY2tfZW5jcnlwdGlvbigpLmRlZmF1bHRfY3J5cHRfYnl0ZV9ibG9jawotICAgICAgICAgICAgOiBHZXRTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KCpydW5faXRyXywgaW5kZXgpLT5jcnlwdF9ieXRlX2Jsb2NrOwotICAgIHVpbnQzMl90IHNraXBfYmxvY2tzID0KLSAgICAgICAgKGluZGV4ID09IDApCi0gICAgICAgICAgICA/IHRyYWNrX2VuY3J5cHRpb24oKS5kZWZhdWx0X3NraXBfYnl0ZV9ibG9jawotICAgICAgICAgICAgOiBHZXRTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KCpydW5faXRyXywgaW5kZXgpLT5za2lwX2J5dGVfYmxvY2s7Ci0gICAgcmV0dXJuIERlY3J5cHRDb25maWc6OkNyZWF0ZUNiY3NDb25maWcoCi0gICAgICAgIGtleV9pZCwgaXYsIHNhbXBsZV9lbmNyeXB0aW9uX2VudHJ5LnN1YnNhbXBsZXMsCi0gICAgICAgIEVuY3J5cHRpb25QYXR0ZXJuKGVuY3J5cHRfYmxvY2tzLCBza2lwX2Jsb2NrcykpOwotICB9Ci0KLSAgcmV0dXJuIERlY3J5cHRDb25maWc6OkNyZWF0ZUNlbmNDb25maWcoa2V5X2lkLCBpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX2VuY3J5cHRpb25fZW50cnkuc3Vic2FtcGxlcyk7Ci19Ci0KLXVpbnQzMl90IFRyYWNrUnVuSXRlcmF0b3I6OkdldEdyb3VwRGVzY3JpcHRpb25JbmRleCgKLSAgICB1aW50MzJfdCBzYW1wbGVfaW5kZXgpIGNvbnN0IHsKLSAgRENIRUNLKElzUnVuVmFsaWQoKSk7Ci0gIERDSEVDS19MVChzYW1wbGVfaW5kZXgsIHJ1bl9pdHJfLT5zYW1wbGVzLnNpemUoKSk7Ci0gIHJldHVybiBydW5faXRyXy0+c2FtcGxlc1tzYW1wbGVfaW5kZXhdLmNlbmNfZ3JvdXBfZGVzY3JpcHRpb25faW5kZXg7Ci19Ci0KLWJvb2wgVHJhY2tSdW5JdGVyYXRvcjo6SXNTYW1wbGVFbmNyeXB0ZWQoc2l6ZV90IHNhbXBsZV9pbmRleCkgY29uc3QgewotICB1aW50MzJfdCBpbmRleCA9IEdldEdyb3VwRGVzY3JpcHRpb25JbmRleChzYW1wbGVfaW5kZXgpOwotICByZXR1cm4gKGluZGV4ID09IDApCi0gICAgICAgICAgICAgPyB0cmFja19lbmNyeXB0aW9uKCkuaXNfZW5jcnlwdGVkCi0gICAgICAgICAgICAgOiBHZXRTYW1wbGVFbmNyeXB0aW9uSW5mb0VudHJ5KCpydW5faXRyXywgaW5kZXgpLT5pc19lbmNyeXB0ZWQ7Ci19Ci0KLWNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBUcmFja1J1bkl0ZXJhdG9yOjpHZXRLZXlJZCgKLSAgICBzaXplX3Qgc2FtcGxlX2luZGV4KSBjb25zdCB7Ci0gIHVpbnQzMl90IGluZGV4ID0gR2V0R3JvdXBEZXNjcmlwdGlvbkluZGV4KHNhbXBsZV9pbmRleCk7Ci0gIHJldHVybiAoaW5kZXggPT0gMCkgPyB0cmFja19lbmNyeXB0aW9uKCkuZGVmYXVsdF9raWQKLSAgICAgICAgICAgICAgICAgICAgICA6IEdldFNhbXBsZUVuY3J5cHRpb25JbmZvRW50cnkoKnJ1bl9pdHJfLCBpbmRleCktPmtleV9pZDsKLX0KLQotdWludDhfdCBUcmFja1J1bkl0ZXJhdG9yOjpHZXRJdlNpemUoc2l6ZV90IHNhbXBsZV9pbmRleCkgY29uc3QgewotICB1aW50MzJfdCBpbmRleCA9IEdldEdyb3VwRGVzY3JpcHRpb25JbmRleChzYW1wbGVfaW5kZXgpOwotICByZXR1cm4gKGluZGV4ID09IDApID8gdHJhY2tfZW5jcnlwdGlvbigpLmRlZmF1bHRfaXZfc2l6ZQotICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2FtcGxlRW5jcnlwdGlvbkluZm9FbnRyeSgqcnVuX2l0cl8sIGluZGV4KS0+aXZfc2l6ZTsKLX0KLQotYm9vbCBUcmFja1J1bkl0ZXJhdG9yOjpBcHBseUNvbnN0YW50SXYoc2l6ZV90IHNhbXBsZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbXBsZUVuY3J5cHRpb25FbnRyeSogZW50cnkpIGNvbnN0IHsKLSAgRENIRUNLKElzU2FtcGxlRW5jcnlwdGVkKHNhbXBsZV9pbmRleCkpOwotICB1aW50MzJfdCBpbmRleCA9IEdldEdyb3VwRGVzY3JpcHRpb25JbmRleChzYW1wbGVfaW5kZXgpOwotICBjb25zdCB1aW50OF90IGNvbnN0YW50X2l2X3NpemUgPQotICAgICAgaW5kZXggPT0gMAotICAgICAgICAgID8gdHJhY2tfZW5jcnlwdGlvbigpLmRlZmF1bHRfY29uc3RhbnRfaXZfc2l6ZQotICAgICAgICAgIDogR2V0U2FtcGxlRW5jcnlwdGlvbkluZm9FbnRyeSgqcnVuX2l0cl8sIGluZGV4KS0+Y29uc3RhbnRfaXZfc2l6ZTsKLSAgUkNIRUNLKGNvbnN0YW50X2l2X3NpemUgIT0gMCk7Ci0gIGNvbnN0IHVpbnQ4X3QqIGNvbnN0YW50X2l2ID0KLSAgICAgIGluZGV4ID09IDAgPyB0cmFja19lbmNyeXB0aW9uKCkuZGVmYXVsdF9jb25zdGFudF9pdgotICAgICAgICAgICAgICAgICA6IEdldFNhbXBsZUVuY3J5cHRpb25JbmZvRW50cnkoKnJ1bl9pdHJfLCBpbmRleCktPmNvbnN0YW50X2l2OwotICBSQ0hFQ0soY29uc3RhbnRfaXYgIT0gbnVsbHB0cik7Ci0gIG1lbWNweShlbnRyeS0+aW5pdGlhbGl6YXRpb25fdmVjdG9yLCBjb25zdGFudF9pdiwKLSAgICAgICAgICAgICAgIGtJbml0aWFsaXphdGlvblZlY3RvclNpemUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1wNAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTZjYTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3RyYWNrX3J1bl9pdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUDRfVFJBQ0tfUlVOX0lURVJBVE9SX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9UUkFDS19SVU5fSVRFUkFUT1JfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIERlY3J5cHRDb25maWc7Ci0KLW5hbWVzcGFjZSBtcDQgewotCi1iYXNlOjpUaW1lRGVsdGEgTUVESUFfRVhQT1JUIFRpbWVEZWx0YUZyb21SYXRpb25hbChpbnQ2NF90IG51bWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBkZW5vbSk7Ci1EZWNvZGVUaW1lc3RhbXAgTUVESUFfRVhQT1JUIERlY29kZVRpbWVzdGFtcEZyb21SYXRpb25hbChpbnQ2NF90IG51bWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBkZW5vbSk7Ci0KLXN0cnVjdCBTYW1wbGVJbmZvOwotc3RydWN0IFRyYWNrUnVuSW5mbzsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFRyYWNrUnVuSXRlcmF0b3IgewotIHB1YmxpYzoKLSAgLy8gQ3JlYXRlIGEgbmV3IFRyYWNrUnVuSXRlcmF0b3IuIEEgcmVmZXJlbmNlIHRvIHxtb292fCB3aWxsIGJlIHJldGFpbmVkIGZvcgotICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhpcyBvYmplY3QuCi0gIFRyYWNrUnVuSXRlcmF0b3IoY29uc3QgTW92aWUqIG1vb3YsIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotICB+VHJhY2tSdW5JdGVyYXRvcigpOwotCi0gIC8vIFNldHMgdXAgdGhlIGl0ZXJhdG9yIHRvIGhhbmRsZSBhbGwgdGhlIHJ1bnMgZnJvbSB0aGUgY3VycmVudCBmcmFnbWVudC4KLSAgYm9vbCBJbml0KGNvbnN0IE1vdmllRnJhZ21lbnQmIG1vb2YpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBydW4gb3Igc2FtcGxlIGFyZSB2YWxpZC4KLSAgYm9vbCBJc1J1blZhbGlkKCkgY29uc3Q7Ci0gIGJvb2wgSXNTYW1wbGVWYWxpZCgpIGNvbnN0OwotCi0gIC8vIEFkdmFuY2UgdGhlIHByb3BlcnRpZXMgdG8gcmVmZXIgdG8gdGhlIG5leHQgcnVuIG9yIHNhbXBsZS4gUmVxdWlyZXMgdGhhdAotICAvLyB0aGUgY3VycmVudCBzYW1wbGUgYmUgdmFsaWQuCi0gIHZvaWQgQWR2YW5jZVJ1bigpOwotICB2b2lkIEFkdmFuY2VTYW1wbGUoKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB0cmFjayBydW4gaGFzIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBhbmQgaGFzIG5vdCB5ZXQKLSAgLy8gYmVlbiBjYWNoZWQuIE9ubHkgdmFsaWQgaWYgSXNSdW5WYWxpZCgpLgotICBib29sIEF1eEluZm9OZWVkc1RvQmVDYWNoZWQoKTsKLQotICAvLyBDYWNoZXMgdGhlIENFTkMgZGF0YSBmcm9tIHRoZSBnaXZlbiBidWZmZXIuIHxidWZ8IG11c3QgYmUgYSBidWZmZXIgc3RhcnRpbmcKLSAgLy8gYXQgdGhlIG9mZnNldCBnaXZlbiBieSBjZW5jX29mZnNldCgpLCB3aXRoIGEgfHNpemV8IG9mIGF0IGxlYXN0Ci0gIC8vIGNlbmNfc2l6ZSgpLiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IuCi0gIGJvb2wgQ2FjaGVBdXhJbmZvKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpOwotCi0gIC8vIFJldHVybnMgdGhlIG1heGltdW0gYnVmZmVyIGxvY2F0aW9uIGF0IHdoaWNoIG5vIGRhdGEgZWFybGllciBpbiB0aGUgc3RyZWFtCi0gIC8vIHdpbGwgYmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gcmVhZCB0aGUgY3VycmVudCBvciBhbnkgc3Vic2VxdWVudCBzYW1wbGUuIFlvdQotICAvLyBtYXkgY2xlYXIgYWxsIGRhdGEgdXAgdG8gdGhpcyBvZmZzZXQgYmVmb3JlIHJlYWRpbmcgdGhlIGN1cnJlbnQgc2FtcGxlCi0gIC8vIHNhZmVseS4gUmVzdWx0IGlzIGluIHRoZSBzYW1lIHVuaXRzIGFzIG9mZnNldCgpIChmb3IgTWVkaWEgU291cmNlIHRoaXMgaXMKLSAgLy8gaW4gYnl0ZXMgcGFzdCB0aGUgdGhlIGhlYWQgb2YgdGhlIE1PT0YgYm94KS4KLSAgaW50NjRfdCBHZXRNYXhDbGVhck9mZnNldCgpOwotCi0gIC8vIFByb3BlcnR5IG9mIHRoZSBjdXJyZW50IHJ1bi4gT25seSB2YWxpZCBpZiBJc1J1blZhbGlkKCkuCi0gIHVpbnQzMl90IHRyYWNrX2lkKCkgY29uc3Q7Ci0gIGludDY0X3QgYXV4X2luZm9fb2Zmc2V0KCkgY29uc3Q7Ci0gIGludCBhdXhfaW5mb19zaXplKCkgY29uc3Q7Ci0gIGJvb2wgaXNfZW5jcnlwdGVkKCkgY29uc3Q7Ci0gIGJvb2wgaXNfYXVkaW8oKSBjb25zdDsKLSAgLy8gT25seSBvbmUgaXMgdmFsaWQsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc19hdWRpbygpLgotICBjb25zdCBBdWRpb1NhbXBsZUVudHJ5JiBhdWRpb19kZXNjcmlwdGlvbigpIGNvbnN0OwotICBjb25zdCBWaWRlb1NhbXBsZUVudHJ5JiB2aWRlb19kZXNjcmlwdGlvbigpIGNvbnN0OwotCi0gIC8vIFByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgc2FtcGxlLiBPbmx5IHZhbGlkIGlmIElzU2FtcGxlVmFsaWQoKS4KLSAgaW50NjRfdCBzYW1wbGVfb2Zmc2V0KCkgY29uc3Q7Ci0gIGludCBzYW1wbGVfc2l6ZSgpIGNvbnN0OwotICBEZWNvZGVUaW1lc3RhbXAgZHRzKCkgY29uc3Q7Ci0gIGJhc2U6OlRpbWVEZWx0YSBjdHMoKSBjb25zdDsKLSAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKCkgY29uc3Q7Ci0gIGJvb2wgaXNfa2V5ZnJhbWUoKSBjb25zdDsKLQotICAvLyBPbmx5IGNhbGwgd2hlbiBpc19lbmNyeXB0ZWQoKSBpcyB0cnVlIGFuZCBBdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkgaXMKLSAgLy8gZmFsc2UuIFJlc3VsdCBpcyBvd25lZCBieSBjYWxsZXIuCi0gIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBHZXREZWNyeXB0Q29uZmlnKCk7Ci0KLSBwcml2YXRlOgotICB2b2lkIFJlc2V0UnVuKCk7Ci0gIGNvbnN0IFByb3RlY3Rpb25TY2hlbWVJbmZvJiBwcm90ZWN0aW9uX3NjaGVtZV9pbmZvKCkgY29uc3Q7Ci0gIGNvbnN0IFRyYWNrRW5jcnlwdGlvbiYgdHJhY2tfZW5jcnlwdGlvbigpIGNvbnN0OwotCi0gIHVpbnQzMl90IEdldEdyb3VwRGVzY3JpcHRpb25JbmRleCh1aW50MzJfdCBzYW1wbGVfaW5kZXgpIGNvbnN0OwotCi0gIC8vIFNhbXBsZSBlbmNyeXB0aW9uIGluZm9ybWF0aW9uLgotICBib29sIElzU2FtcGxlRW5jcnlwdGVkKHNpemVfdCBzYW1wbGVfaW5kZXgpIGNvbnN0OwotICB1aW50OF90IEdldEl2U2l6ZShzaXplX3Qgc2FtcGxlX2luZGV4KSBjb25zdDsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIEdldEtleUlkKHNpemVfdCBzYW1wbGVfaW5kZXgpIGNvbnN0OwotICBib29sIEFwcGx5Q29uc3RhbnRJdihzaXplX3Qgc2FtcGxlX2luZGV4LCBTYW1wbGVFbmNyeXB0aW9uRW50cnkqIGVudHJ5KSBjb25zdDsKLQotICBjb25zdCBNb3ZpZSogbW9vdl87Ci0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgc3RkOjp2ZWN0b3I8VHJhY2tSdW5JbmZvPiBydW5zXzsKLSAgc3RkOjp2ZWN0b3I8VHJhY2tSdW5JbmZvPjo6Y29uc3RfaXRlcmF0b3IgcnVuX2l0cl87Ci0gIHN0ZDo6dmVjdG9yPFNhbXBsZUluZm8+Ojpjb25zdF9pdGVyYXRvciBzYW1wbGVfaXRyXzsKLQotICBpbnQ2NF90IHNhbXBsZV9kdHNfOwotICBpbnQ2NF90IHNhbXBsZV9vZmZzZXRfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUcmFja1J1bkl0ZXJhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtcDQKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX01QNF9UUkFDS19SVU5fSVRFUkFUT1JfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3JfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjgzMmRkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3JfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDc4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC90cmFja19ydW5faXRlcmF0b3IuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcDQvYm94X2RlZmluaXRpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L3JjaGVjay5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotCi1uYW1lc3BhY2UgewotCi0vLyBUaGUgc3VtIG9mIHRoZSBlbGVtZW50cyBpbiBhIHZlY3RvciBpbml0aWFsaXplZCB3aXRoIFN1bUFzY2VuZGluZywKLS8vIGxlc3MgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGVsZW1lbnQuCi1jb25zdCBpbnQga1N1bUFzY2VuZGluZzEgPSA0NTsKLQotY29uc3QgaW50IGtBdWRpb1NjYWxlID0gNDgwMDA7Ci1jb25zdCBpbnQga1ZpZGVvU2NhbGUgPSAyNTsKLQotY29uc3QgdWludDhfdCBrQXV4SW5mb1tdID0gewotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzEsIDB4NDEsIDB4NTQsCi0gICAgMHg2NSwgMHg3MywgMHg3NCwgMHg0OSwgMHg3NiwgMHgzMiwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMSwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAotfTsKLQotLy8gU2FtcGxlIGVuY3J5cHRpb24gZGF0YSBmb3IgdHdvIHNhbXBsZXMsIG9uZSB3aXRoIDggYnl0ZSBJViwgb25lIHdpdGggMTYgYnl0ZQotLy8gSVYuIFRoaXMgZGF0YSBpcyBnZW5lcmF0ZWQgZm9yIHRlc3RpbmcuIEl0IHNob3VsZCBiZSB2ZXJ5IHVubGlrZWx5IHRvIHNlZQotLy8gSVYgb2YgbWl4ZWQgc2l6ZSBpbiBhY3R1YWwgbWVkaWEgZmlsZXMsIHRob3VnaCBpdCBpcyBwZXJtaXR0ZWQgYnkgc3BlYy4KLWNvbnN0IHVpbnQ4X3Qga1NhbXBsZUVuY3J5cHRpb25EYXRhV2l0aFN1YnNhbXBsZXNbXSA9IHsKLSAgICAvLyBTYW1wbGUgY291bnQuCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLSAgICAvLyBTYW1wbGUgMTogSVYgKDggQnl0ZXMpLgotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzEsCi0gICAgLy8gU2FtcGxlIDE6IFN1YnNhbXBsZSBjb3VudC4KLSAgICAweDAwLCAweDAxLAotICAgIC8vIFNhbXBsZSAxOiBTdWJzYW1wbGUgMS4KLSAgICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotICAgIC8vIFNhbXBsZSAyOiBJViAoMTYgYnl0ZXMpLgotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzIsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsCi0gICAgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKLSAgICAvLyBTYW1wbGUgMjogU3Vic2FtcGxlIGNvdW50LgotICAgIDB4MDAsIDB4MDIsCi0gICAgLy8gU2FtcGxlIDI6IFN1YnNhbXBsZSAxLgotICAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gICAgLy8gU2FtcGxlIDI6IFN1YnNhbXBsZSAyLgotICAgIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi19OwotCi1jb25zdCB1aW50OF90IGtTYW1wbGVFbmNyeXB0aW9uRGF0YVdpdGhvdXRTdWJzYW1wbGVzW10gPSB7Ci0gICAgLy8gU2FtcGxlIGNvdW50LgotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gICAgLy8gU2FtcGxlIDE6IElWLgotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzEsCi0gICAgLy8gU2FtcGxlIDI6IElWLgotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzIsCi19OwotCi0vLyBTaXplIG9mIHRoZXNlIHR3byBJVnMgYXJlIDggYnl0ZXMuIFRoZXkgYXJlIHBhZGRlZCB3aXRoIDAgdG8gMTYgYnl0ZXMuCi1jb25zdCBjaGFyIGtJdjFbXSA9IHsKLSAgICAweDQxLCAweDU0LCAweDY1LCAweDczLCAweDc0LCAweDQ5LCAweDc2LCAweDMxLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi19OwotY29uc3QgY2hhciBrSXYyW10gPSB7Ci0gICAgMHg0MSwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHg0OSwgMHg3NiwgMHgzMiwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotfTsKLS8vIFNpemUgb2YgdGhpcyBJViBpcyAxNiBieXRlcy4KLWNvbnN0IGNoYXIga0l2M1tdID0gewotICAgIDB4NDEsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NzYsIDB4MzIsCi0gICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKLX07Ci0KLWNvbnN0IHVpbnQ4X3Qga0tleUlkW10gPSB7Ci0gICAgMHg0MSwgMHg0NywgMHg2ZiwgMHg2ZiwgMHg2NywgMHg2YywgMHg2NSwgMHg1NCwKLSAgICAweDY1LCAweDczLCAweDc0LCAweDRiLCAweDY1LCAweDc5LCAweDQ5LCAweDQ0LAotfTsKLQotY29uc3QgdWludDhfdCBrVHJhY2tDZW5jU2FtcGxlR3JvdXBLZXlJZFtdID0gewotICAgIDB4NDYsIDB4NzIsIDB4NjEsIDB4NjcsIDB4NTMsIDB4NjEsIDB4NmQsIDB4NzAsCi0gICAgMHg2YywgMHg2NSwgMHg0NywgMHg3MiwgMHg2ZiwgMHg3NSwgMHg3MCwgMHg0YiwKLX07Ci0KLWNvbnN0IHVpbnQ4X3Qga0ZyYWdtZW50Q2VuY1NhbXBsZUdyb3VwS2V5SWRbXSA9IHsKLSAgICAweDZiLCAweDQ2LCAweDcyLCAweDYxLCAweDY3LCAweDZkLCAweDY1LCAweDZlLAotICAgIDB4NzQsIDB4NDMsIDB4NjUsIDB4NmUsIDB4NjMsIDB4NTMsIDB4NjEsIDB4NmQsCi19OwotCi0vLyBTYW1wbGUgZW5jcnlwdGlvbiBkYXRhIGZvciB0d28gc2FtcGxlcywgdXNpbmcgY29uc3RhbnQgSVYgKGRlZmluZWQgYnkgJ3RlbmMnCi0vLyBvciBzYW1wbGUgZ3JvdXAgZW50cnkpLgotY29uc3QgdWludDhfdCBrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRoU3Vic2FtcGxlc0FuZENvbnN0YW50SXZbXSA9IHsKLSAgICAvLyBTYW1wbGUgY291bnQuCi0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLSAgICAvLyBTYW1wbGUgMTogU3Vic2FtcGxlIGNvdW50LgotICAgIDB4MDAsIDB4MDEsCi0gICAgLy8gU2FtcGxlIDE6IFN1YnNhbXBsZSAxLgotICAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gICAgLy8gU2FtcGxlIDI6IFN1YnNhbXBsZSBjb3VudC4KLSAgICAweDAwLCAweDAyLAotICAgIC8vIFNhbXBsZSAyOiBTdWJzYW1wbGUgMS4KLSAgICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotICAgIC8vIFNhbXBsZSAyOiBTdWJzYW1wbGUgMi4KLSAgICAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA0LAotICAgIC8vIFNhbXBsZSAzOiBTdWJzYW1wbGUgY291bnQuCi0gICAgMHgwMCwgMHgwMSwKLSAgICAvLyBTYW1wbGUgMzogU3Vic2FtcGxlIDEuCi0gICAgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLSAgICAvLyBTYW1wbGUgNDogU3Vic2FtcGxlIGNvdW50LgotICAgIDB4MDAsIDB4MDEsCi0gICAgLy8gU2FtcGxlIDQ6IFN1YnNhbXBsZSAxLgotICAgIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gICAgLy8gU2FtcGxlIDU6IFN1YnNhbXBsZSBjb3VudC4KLSAgICAweDAwLCAweDAxLAotICAgIC8vIFNhbXBsZSA1OiBTdWJzYW1wbGUgMS4KLSAgICAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotfTsKLQotLy8gU2l6ZSBvZiB0aGVzZSBJVnMgYXJlIDE2IGJ5dGVzLgotY29uc3QgY2hhciBrSXY0W10gPSB7Ci0gICAgMHg0MSwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHg0OSwgMHg3NiwgMHgzNCwKLSAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAotfTsKLQotY29uc3QgY2hhciBrSXY1W10gPSB7Ci0gICAgMHg0MSwgMHg1NCwgMHg2NSwgMHg3MywgMHg3NCwgMHg0OSwgMHg3NiwgMHgzNSwKLSAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAotfTsKLQotfSAgLy8gbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBtcDQgewotCi1NQVRDSEVSKFJlc2VydmVkVmFsdWVJblNhbXBsZURlcGVuZGVuY3lJbmZvLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIlJlc2VydmVkIHZhbHVlIHVzZWQgaW4gc2FtcGxlIGRlcGVuZGVuY3kgaW5mby4iKTsKLX0KLQotY2xhc3MgVHJhY2tSdW5JdGVyYXRvclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBUcmFja1J1bkl0ZXJhdG9yVGVzdCgpIDogbWVkaWFfbG9nXyhuZXcgU3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpIHsKLSAgICBDcmVhdGVNb3ZpZSgpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIE1vdmllIG1vb3ZfOwotICBzY29wZWRfcmVmcHRyPFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPj4gbWVkaWFfbG9nXzsKLSAgc3RkOjp1bmlxdWVfcHRyPFRyYWNrUnVuSXRlcmF0b3I+IGl0ZXJfOwotCi0gIHZvaWQgQ3JlYXRlTW92aWUoKSB7Ci0gICAgbW9vdl8uaGVhZGVyLnRpbWVzY2FsZSA9IDEwMDA7Ci0gICAgbW9vdl8udHJhY2tzLnJlc2l6ZSgzKTsKLSAgICBtb292Xy5leHRlbmRzLnRyYWNrcy5yZXNpemUoMik7Ci0gICAgbW9vdl8udHJhY2tzWzBdLmhlYWRlci50cmFja19pZCA9IDE7Ci0gICAgbW9vdl8udHJhY2tzWzBdLm1lZGlhLmhlYWRlci50aW1lc2NhbGUgPSBrQXVkaW9TY2FsZTsKLSAgICBTYW1wbGVEZXNjcmlwdGlvbiYgZGVzYzEgPQotICAgICAgICBtb292Xy50cmFja3NbMF0ubWVkaWEuaW5mb3JtYXRpb24uc2FtcGxlX3RhYmxlLmRlc2NyaXB0aW9uOwotICAgIEF1ZGlvU2FtcGxlRW50cnkgYXVkX2Rlc2M7Ci0gICAgYXVkX2Rlc2MuZm9ybWF0ID0gRk9VUkNDX01QNEE7Ci0gICAgYXVkX2Rlc2Muc2luZi5pbmZvLnRyYWNrX2VuY3J5cHRpb24uaXNfZW5jcnlwdGVkID0gZmFsc2U7Ci0gICAgZGVzYzEudHlwZSA9IGtBdWRpbzsKLSAgICBkZXNjMS5hdWRpb19lbnRyaWVzLnB1c2hfYmFjayhhdWRfZGVzYyk7Ci0gICAgbW9vdl8uZXh0ZW5kcy50cmFja3NbMF0udHJhY2tfaWQgPSAxOwotICAgIG1vb3ZfLmV4dGVuZHMudHJhY2tzWzBdLmRlZmF1bHRfc2FtcGxlX2Rlc2NyaXB0aW9uX2luZGV4ID0gMTsKLSAgICBtb292Xy50cmFja3NbMV0uaGVhZGVyLnRyYWNrX2lkID0gMjsKLSAgICBtb292Xy50cmFja3NbMV0ubWVkaWEuaGVhZGVyLnRpbWVzY2FsZSA9IGtWaWRlb1NjYWxlOwotICAgIFNhbXBsZURlc2NyaXB0aW9uJiBkZXNjMiA9Ci0gICAgICAgIG1vb3ZfLnRyYWNrc1sxXS5tZWRpYS5pbmZvcm1hdGlvbi5zYW1wbGVfdGFibGUuZGVzY3JpcHRpb247Ci0gICAgVmlkZW9TYW1wbGVFbnRyeSB2aWRfZGVzYzsKLSAgICB2aWRfZGVzYy5mb3JtYXQgPSBGT1VSQ0NfQVZDMTsKLSAgICB2aWRfZGVzYy5zaW5mLmluZm8udHJhY2tfZW5jcnlwdGlvbi5pc19lbmNyeXB0ZWQgPSBmYWxzZTsKLSAgICBkZXNjMi50eXBlID0ga1ZpZGVvOwotICAgIGRlc2MyLnZpZGVvX2VudHJpZXMucHVzaF9iYWNrKHZpZF9kZXNjKTsKLSAgICBtb292Xy5leHRlbmRzLnRyYWNrc1sxXS50cmFja19pZCA9IDI7Ci0gICAgbW9vdl8uZXh0ZW5kcy50cmFja3NbMV0uZGVmYXVsdF9zYW1wbGVfZGVzY3JpcHRpb25faW5kZXggPSAxOwotCi0gICAgbW9vdl8udHJhY2tzWzJdLmhlYWRlci50cmFja19pZCA9IDM7Ci0gICAgbW9vdl8udHJhY2tzWzJdLm1lZGlhLmluZm9ybWF0aW9uLnNhbXBsZV90YWJsZS5kZXNjcmlwdGlvbi50eXBlID0ga0hpbnQ7Ci0gIH0KLQotICB1aW50MzJfdCBUb1NhbXBsZUZsYWdzKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgICBDSEVDS19FUShzdHIubGVuZ3RoKCksIDJ1KTsKLQotICAgIFNhbXBsZURlcGVuZHNPbiBzYW1wbGVfZGVwZW5kc19vbiA9IGtTYW1wbGVEZXBlbmRzT25SZXNlcnZlZDsKLSAgICBib29sIGlzX25vbl9zeW5jX3NhbXBsZSA9IGZhbHNlOwotICAgIHN3aXRjaCAoc3RyWzBdKSB7Ci0gICAgICBjYXNlICdVJzoKLSAgICAgICAgc2FtcGxlX2RlcGVuZHNfb24gPSBrU2FtcGxlRGVwZW5kc09uVW5rbm93bjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlICdPJzoKLSAgICAgICAgc2FtcGxlX2RlcGVuZHNfb24gPSBrU2FtcGxlRGVwZW5kc09uT3RoZXJzOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ04nOgotICAgICAgICBzYW1wbGVfZGVwZW5kc19vbiA9IGtTYW1wbGVEZXBlbmRzT25Ob090aGVyOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ1InOgotICAgICAgICBzYW1wbGVfZGVwZW5kc19vbiA9IGtTYW1wbGVEZXBlbmRzT25SZXNlcnZlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBDSEVDSyhmYWxzZSkgPDwgIkludmFsaWQgc2FtcGxlIGRlcGVuZGVuY3kgY2hhcmFjdGVyICciIDw8IHN0clswXQotICAgICAgICAgICAgICAgICAgICAgPDwgIiciOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHN0clsxXSkgewotICAgICAgY2FzZSAnUyc6Ci0gICAgICAgIGlzX25vbl9zeW5jX3NhbXBsZSA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgJ04nOgotICAgICAgICBpc19ub25fc3luY19zYW1wbGUgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIENIRUNLKGZhbHNlKSA8PCAiSW52YWxpZCBzeW5jIHNhbXBsZSBjaGFyYWN0ZXIgJyIgPDwgc3RyWzFdIDw8ICInIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHVpbnQzMl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNhbXBsZV9kZXBlbmRzX29uKSA8PCAyNDsKLSAgICBpZiAoaXNfbm9uX3N5bmNfc2FtcGxlKSBmbGFncyB8PSBrU2FtcGxlSXNOb25TeW5jU2FtcGxlOwotICAgIHJldHVybiBmbGFnczsKLSAgfQotCi0gIHZvaWQgU2V0RmxhZ3NPblNhbXBsZXMoY29uc3Qgc3RkOjpzdHJpbmcmIHNhbXBsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNrRnJhZ21lbnRSdW4qIHRydW4pIHsKLSAgICAvLyBVUyAtIFNhbXBsZURlcGVuZHNPblVua25vd24gJiBJc1N5bmNTYW1wbGUKLSAgICAvLyBVTiAtIFNhbXBsZURlcGVuZHNPblVua25vd24gJiBJc05vblN5bmNTYW1wbGUKLSAgICAvLyBPUyAtIFNhbXBsZURlcGVuZHNPbk90aGVycyAmIElzU3luY1NhbXBsZQotICAgIC8vIE9OIC0gU2FtcGxlRGVwZW5kc09uT3RoZXJzICYgSXNOb25TeW5jU2FtcGxlCi0gICAgLy8gTlMgLSBTYW1wbGVEZXBlbmRzT25Ob090aGVycyAmIElzU3luY1NhbXBsZQotICAgIC8vIE5OIC0gU2FtcGxlRGVwZW5kc09uTm9PdGhlcnMgJiBJc05vblN5bmNTYW1wbGUKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmxhZ3NfZGF0YSA9IGJhc2U6OlNwbGl0U3RyaW5nKAotICAgICAgICBzYW1wbGVfaW5mbywgIiAiLCBiYXNlOjpUUklNX1dISVRFU1BBQ0UsIGJhc2U6OlNQTElUX1dBTlRfQUxMKTsKLQotICAgIGlmIChmbGFnc19kYXRhLnNpemUoKSA9PSAxdSkgewotICAgICAgLy8gU2ltdWxhdGVzIHRoZSBmaXJzdF9zYW1wbGVfZmxhZ3NfcHJlc2VudCBzZXQgc2NlbmFyaW8sCi0gICAgICAvLyB3aGVyZSBvbmx5IG9uZSBzYW1wbGVfZmxhZyB2YWx1ZSBpcyBzZXQgYW5kIHRoZSBkZWZhdWx0Ci0gICAgICAvLyBmbGFncyBhcmUgdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlLgotICAgICAgQVNTRVJUX0dFKHRydW4tPnNhbXBsZV9jb3VudCwgZmxhZ3NfZGF0YS5zaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBBU1NFUlRfRVEodHJ1bi0+c2FtcGxlX2NvdW50LCBmbGFnc19kYXRhLnNpemUoKSk7Ci0gICAgfQotCi0gICAgdHJ1bi0+c2FtcGxlX2ZsYWdzLnJlc2l6ZShmbGFnc19kYXRhLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbGFnc19kYXRhLnNpemUoKTsgaSsrKQotICAgICAgdHJ1bi0+c2FtcGxlX2ZsYWdzW2ldID0gVG9TYW1wbGVGbGFncyhmbGFnc19kYXRhW2ldKTsKLSAgfQotCi0gIHN0ZDo6c3RyaW5nIEtleWZyYW1lQW5kUkFQSW5mbyhUcmFja1J1bkl0ZXJhdG9yKiBpdGVyKSB7Ci0gICAgQ0hFQ0soaXRlci0+SXNSdW5WYWxpZCgpKTsKLSAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKLSAgICBzcyA8PCBpdGVyLT50cmFja19pZCgpOwotCi0gICAgd2hpbGUgKGl0ZXItPklzU2FtcGxlVmFsaWQoKSkgewotICAgICAgc3MgPDwgIiAiIDw8IChpdGVyLT5pc19rZXlmcmFtZSgpID8gIksiIDogIlAiKTsKLSAgICAgIGl0ZXItPkFkdmFuY2VTYW1wbGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3Muc3RyKCk7Ci0gIH0KLQotICBNb3ZpZUZyYWdtZW50IENyZWF0ZUZyYWdtZW50KCkgewotICAgIE1vdmllRnJhZ21lbnQgbW9vZjsKLSAgICBtb29mLnRyYWNrcy5yZXNpemUoMik7Ci0gICAgbW9vZi50cmFja3NbMF0uZGVjb2RlX3RpbWUuZGVjb2RlX3RpbWUgPSAwOwotICAgIG1vb2YudHJhY2tzWzBdLmhlYWRlci50cmFja19pZCA9IDE7Ci0gICAgbW9vZi50cmFja3NbMF0uaGVhZGVyLmhhc19kZWZhdWx0X3NhbXBsZV9mbGFncyA9IHRydWU7Ci0gICAgbW9vZi50cmFja3NbMF0uaGVhZGVyLmRlZmF1bHRfc2FtcGxlX2ZsYWdzID0gVG9TYW1wbGVGbGFncygiVVMiKTsKLSAgICBtb29mLnRyYWNrc1swXS5oZWFkZXIuZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24gPSAxMDI0OwotICAgIG1vb2YudHJhY2tzWzBdLmhlYWRlci5kZWZhdWx0X3NhbXBsZV9zaXplID0gNDsKLSAgICBtb29mLnRyYWNrc1swXS5ydW5zLnJlc2l6ZSgyKTsKLSAgICBtb29mLnRyYWNrc1swXS5ydW5zWzBdLnNhbXBsZV9jb3VudCA9IDEwOwotICAgIG1vb2YudHJhY2tzWzBdLnJ1bnNbMF0uZGF0YV9vZmZzZXQgPSAxMDA7Ci0gICAgU2V0QXNjZW5kaW5nKCZtb29mLnRyYWNrc1swXS5ydW5zWzBdLnNhbXBsZV9zaXplcyk7Ci0KLSAgICBtb29mLnRyYWNrc1swXS5ydW5zWzFdLnNhbXBsZV9jb3VudCA9IDEwOwotICAgIG1vb2YudHJhY2tzWzBdLnJ1bnNbMV0uZGF0YV9vZmZzZXQgPSAxMDAwMDsKLQotICAgIG1vb2YudHJhY2tzWzFdLmhlYWRlci50cmFja19pZCA9IDI7Ci0gICAgbW9vZi50cmFja3NbMV0uaGVhZGVyLmhhc19kZWZhdWx0X3NhbXBsZV9mbGFncyA9IGZhbHNlOwotICAgIG1vb2YudHJhY2tzWzFdLmRlY29kZV90aW1lLmRlY29kZV90aW1lID0gMTA7Ci0gICAgbW9vZi50cmFja3NbMV0ucnVucy5yZXNpemUoMSk7Ci0gICAgbW9vZi50cmFja3NbMV0ucnVuc1swXS5zYW1wbGVfY291bnQgPSAxMDsKLSAgICBtb29mLnRyYWNrc1sxXS5ydW5zWzBdLmRhdGFfb2Zmc2V0ID0gMjAwOwotICAgIFNldEFzY2VuZGluZygmbW9vZi50cmFja3NbMV0ucnVuc1swXS5zYW1wbGVfc2l6ZXMpOwotICAgIFNldEFzY2VuZGluZygmbW9vZi50cmFja3NbMV0ucnVuc1swXS5zYW1wbGVfZHVyYXRpb25zKTsKLSAgICBTZXRGbGFnc09uU2FtcGxlcygiVVMgVU4gVU4gVU4gVU4gVU4gVU4gVU4gVU4gVU4iLCAmbW9vZi50cmFja3NbMV0ucnVuc1swXSk7Ci0KLSAgICByZXR1cm4gbW9vZjsKLSAgfQotCi0gIFByb3RlY3Rpb25TY2hlbWVJbmZvKiBHZXRQcm90ZWN0aW9uU2NoZW1lSW5mb0ZvclRyYWNrKFRyYWNrKiB0cmFjaykgewotICAgIFNhbXBsZURlc2NyaXB0aW9uKiBzdHNkID0KLSAgICAgICAgJnRyYWNrLT5tZWRpYS5pbmZvcm1hdGlvbi5zYW1wbGVfdGFibGUuZGVzY3JpcHRpb247Ci0gICAgUHJvdGVjdGlvblNjaGVtZUluZm8qIHNpbmY7Ci0gICAgaWYgKCFzdHNkLT52aWRlb19lbnRyaWVzLmVtcHR5KCkpIHsKLSAgICAgIHNpbmYgPSAmc3RzZC0+dmlkZW9fZW50cmllc1swXS5zaW5mOwotICAgIH0gZWxzZSB7Ci0gICAgICBzaW5mID0gJnN0c2QtPmF1ZGlvX2VudHJpZXNbMF0uc2luZjsKLSAgICB9Ci0gICAgcmV0dXJuIHNpbmY7Ci0gIH0KLQotICAvLyBVcGRhdGUgdGhlIGZpcnN0IHNhbXBsZSBkZXNjcmlwdGlvbiBvZiBhIFRyYWNrIHRvIGluZGljYXRlIENFTkMgZW5jcnlwdGlvbgotICB2b2lkIEFkZEVuY3J5cHRpb24oVHJhY2sqIHRyYWNrKSB7Ci0gICAgUHJvdGVjdGlvblNjaGVtZUluZm8qIHNpbmYgPSBHZXRQcm90ZWN0aW9uU2NoZW1lSW5mb0ZvclRyYWNrKHRyYWNrKTsKLSAgICBzaW5mLT50eXBlLnR5cGUgPSBGT1VSQ0NfQ0VOQzsKLSAgICBzaW5mLT5pbmZvLnRyYWNrX2VuY3J5cHRpb24uaXNfZW5jcnlwdGVkID0gdHJ1ZTsKLSAgICBzaW5mLT5pbmZvLnRyYWNrX2VuY3J5cHRpb24uZGVmYXVsdF9pdl9zaXplID0gODsKLSAgICBzaW5mLT5pbmZvLnRyYWNrX2VuY3J5cHRpb24uZGVmYXVsdF9raWQuYXNzaWduKGtLZXlJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtLZXlJZCArIGFycmF5c2l6ZShrS2V5SWQpKTsKLSAgfQotCi0gIC8vIEFkZCBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveCB0byB0cmFjayBsZXZlbCBzYW1wbGUgdGFibGUgYW5kIHRvCi0gIC8vIGZyYWdtZW50LiBQb3B1bGF0ZSBTYW1wbGVUb0dyb3VwIEJveCBmcm9tIGlucHV0IGFycmF5LgotICB2b2lkIEFkZENlbmNTYW1wbGVHcm91cChUcmFjayogdHJhY2ssIFRyYWNrRnJhZ21lbnQqIGZyYWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNhbXBsZVRvR3JvdXBFbnRyeSogc2FtcGxlX3RvX2dyb3VwX2VudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1fZW50cmllcykgewotICAgIGF1dG8mIHRyYWNrX2NlbmNfZ3JvdXAgPQotICAgICAgICB0cmFjay0+bWVkaWEuaW5mb3JtYXRpb24uc2FtcGxlX3RhYmxlLnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbjsKLSAgICB0cmFja19jZW5jX2dyb3VwLmdyb3VwaW5nX3R5cGUgPSBGT1VSQ0NfU0VJRzsKLSAgICB0cmFja19jZW5jX2dyb3VwLmVudHJpZXMucmVzaXplKDEpOwotICAgIHRyYWNrX2NlbmNfZ3JvdXAuZW50cmllc1swXS5pc19lbmNyeXB0ZWQgPSB0cnVlOwotICAgIHRyYWNrX2NlbmNfZ3JvdXAuZW50cmllc1swXS5pdl9zaXplID0gODsKLSAgICB0cmFja19jZW5jX2dyb3VwLmVudHJpZXNbMF0ua2V5X2lkLmFzc2lnbigKLSAgICAgICAga1RyYWNrQ2VuY1NhbXBsZUdyb3VwS2V5SWQsCi0gICAgICAgIGtUcmFja0NlbmNTYW1wbGVHcm91cEtleUlkICsgYXJyYXlzaXplKGtUcmFja0NlbmNTYW1wbGVHcm91cEtleUlkKSk7Ci0KLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZ3JvdXBpbmdfdHlwZSA9IEZPVVJDQ19TRUlHOwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzLnJlc2l6ZSgzKTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1swXS5pc19lbmNyeXB0ZWQgPSBmYWxzZTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1swXS5pdl9zaXplID0gMDsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1sxXS5pc19lbmNyeXB0ZWQgPSB0cnVlOwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzWzFdLml2X3NpemUgPSA4OwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzWzFdLmtleV9pZC5hc3NpZ24oCi0gICAgICAgIGtGcmFnbWVudENlbmNTYW1wbGVHcm91cEtleUlkLAotICAgICAgICBrRnJhZ21lbnRDZW5jU2FtcGxlR3JvdXBLZXlJZCArCi0gICAgICAgICAgICBhcnJheXNpemUoa0ZyYWdtZW50Q2VuY1NhbXBsZUdyb3VwS2V5SWQpKTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1syXS5pc19lbmNyeXB0ZWQgPSB0cnVlOwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzWzJdLml2X3NpemUgPSAxNjsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1syXS5rZXlfaWQuYXNzaWduKAotICAgICAgICBrS2V5SWQsIGtLZXlJZCArIGFycmF5c2l6ZShrS2V5SWQpKTsKLQotICAgIGZyYWctPnNhbXBsZV90b19ncm91cC5ncm91cGluZ190eXBlID0gRk9VUkNDX1NFSUc7Ci0gICAgZnJhZy0+c2FtcGxlX3RvX2dyb3VwLmVudHJpZXMuYXNzaWduKHNhbXBsZV90b19ncm91cF9lbnRyaWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfdG9fZ3JvdXBfZW50cmllcyArIG51bV9lbnRyaWVzKTsKLSAgfQotCi0gIC8vIEFkZCBhdXggaW5mbyBjb3ZlcmluZyB0aGUgZmlyc3QgdHJhY2sgcnVuIHRvIGEgVHJhY2tGcmFnbWVudCwgYW5kIHVwZGF0ZQotICAvLyB0aGUgcnVuIHRvIGVuc3VyZSBpdCBtYXRjaGVzIGxlbmd0aCBhbmQgc3Vic2FtcGxlIGluZm9ybWF0aW9uLgotICB2b2lkIEFkZEF1eEluZm9IZWFkZXJzKGludCBvZmZzZXQsIFRyYWNrRnJhZ21lbnQqIGZyYWcpIHsKLSAgICBmcmFnLT5hdXhpbGlhcnlfb2Zmc2V0Lm9mZnNldHMucHVzaF9iYWNrKG9mZnNldCk7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X3NpemUuc2FtcGxlX2NvdW50ID0gMjsKLSAgICBmcmFnLT5hdXhpbGlhcnlfc2l6ZS5zYW1wbGVfaW5mb19zaXplcy5wdXNoX2JhY2soOCk7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X3NpemUuc2FtcGxlX2luZm9fc2l6ZXMucHVzaF9iYWNrKDIyKTsKLSAgICBmcmFnLT5ydW5zWzBdLnNhbXBsZV9jb3VudCA9IDI7Ci0gICAgZnJhZy0+cnVuc1swXS5zYW1wbGVfc2l6ZXNbMV0gPSAxMDsKLSAgfQotCi0gIHZvaWQgQWRkU2FtcGxlRW5jcnlwdGlvbih1aW50OF90IHVzZV9zdWJzYW1wbGVfZmxhZywgVHJhY2tGcmFnbWVudCogZnJhZykgewotICAgIGZyYWctPnNhbXBsZV9lbmNyeXB0aW9uLnVzZV9zdWJzYW1wbGVfZW5jcnlwdGlvbiA9IHVzZV9zdWJzYW1wbGVfZmxhZzsKLSAgICBpZiAodXNlX3N1YnNhbXBsZV9mbGFnKSB7Ci0gICAgICBmcmFnLT5zYW1wbGVfZW5jcnlwdGlvbi5zYW1wbGVfZW5jcnlwdGlvbl9kYXRhLmFzc2lnbigKLSAgICAgICAgICBrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRoU3Vic2FtcGxlcywKLSAgICAgICAgICBrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRoU3Vic2FtcGxlcyArCi0gICAgICAgICAgICAgIGFycmF5c2l6ZShrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRoU3Vic2FtcGxlcykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmcmFnLT5zYW1wbGVfZW5jcnlwdGlvbi5zYW1wbGVfZW5jcnlwdGlvbl9kYXRhLmFzc2lnbigKLSAgICAgICAgICBrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRob3V0U3Vic2FtcGxlcywKLSAgICAgICAgICBrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRob3V0U3Vic2FtcGxlcyArCi0gICAgICAgICAgICAgIGFycmF5c2l6ZShrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRob3V0U3Vic2FtcGxlcykpOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBzYW1wbGUgc2l6ZXMgYW5kIGF1eCBpbmZvIGhlYWRlci4KLSAgICBmcmFnLT5ydW5zLnJlc2l6ZSgxKTsKLSAgICBmcmFnLT5ydW5zWzBdLnNhbXBsZV9jb3VudCA9IDI7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X29mZnNldC5vZmZzZXRzLnB1c2hfYmFjaygwKTsKLSAgICBmcmFnLT5hdXhpbGlhcnlfc2l6ZS5zYW1wbGVfY291bnQgPSAyOwotICAgIGlmICh1c2Vfc3Vic2FtcGxlX2ZsYWcpIHsKLSAgICAgIC8vIFVwZGF0ZSBzYW1wbGUgc2l6ZXMgdG8gbWF0Y2ggd2l0aCBzdWJzYW1wbGUgZW50cmllcyBhYm92ZS4KLSAgICAgIGZyYWctPnJ1bnNbMF0uc2FtcGxlX3NpemVzWzBdID0gMzsKLSAgICAgIGZyYWctPnJ1bnNbMF0uc2FtcGxlX3NpemVzWzFdID0gMTA7Ci0gICAgICAvLyBTZXQgYXV4IGluZm8gaGVhZGVyLgotICAgICAgZnJhZy0+YXV4aWxpYXJ5X3NpemUuc2FtcGxlX2luZm9fc2l6ZXMucHVzaF9iYWNrKDE2KTsKLSAgICAgIGZyYWctPmF1eGlsaWFyeV9zaXplLnNhbXBsZV9pbmZvX3NpemVzLnB1c2hfYmFjaygzMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZyYWctPmF1eGlsaWFyeV9zaXplLmRlZmF1bHRfc2FtcGxlX2luZm9fc2l6ZSA9IDg7Ci0gICAgfQotICB9Ci0KLSAgLy8gVXBkYXRlIHRoZSBmaXJzdCBzYW1wbGUgZGVzY3JpcHRpb24gb2YgYSBUcmFjayB0byBpbmRpY2F0ZSBDQkNTIGVuY3J5cHRpb24KLSAgLy8gd2l0aCBhIGNvbnN0YW50IElWIGFuZCBwYXR0ZXJuLgotICB2b2lkIEFkZEVuY3J5cHRpb25DYmNzKFRyYWNrKiB0cmFjaykgewotICAgIFByb3RlY3Rpb25TY2hlbWVJbmZvKiBzaW5mID0gR2V0UHJvdGVjdGlvblNjaGVtZUluZm9Gb3JUcmFjayh0cmFjayk7Ci0gICAgc2luZi0+dHlwZS50eXBlID0gRk9VUkNDX0NCQ1M7Ci0gICAgc2luZi0+aW5mby50cmFja19lbmNyeXB0aW9uLmlzX2VuY3J5cHRlZCA9IHRydWU7Ci0gICAgc2luZi0+aW5mby50cmFja19lbmNyeXB0aW9uLmRlZmF1bHRfaXZfc2l6ZSA9IDA7Ci0gICAgc2luZi0+aW5mby50cmFja19lbmNyeXB0aW9uLmRlZmF1bHRfY3J5cHRfYnl0ZV9ibG9jayA9IDE7Ci0gICAgc2luZi0+aW5mby50cmFja19lbmNyeXB0aW9uLmRlZmF1bHRfc2tpcF9ieXRlX2Jsb2NrID0gOTsKLSAgICBzaW5mLT5pbmZvLnRyYWNrX2VuY3J5cHRpb24uZGVmYXVsdF9jb25zdGFudF9pdl9zaXplID0gMTY7Ci0gICAgbWVtY3B5KHNpbmYtPmluZm8udHJhY2tfZW5jcnlwdGlvbi5kZWZhdWx0X2NvbnN0YW50X2l2LCBrSXYzLCAxNik7Ci0gICAgc2luZi0+aW5mby50cmFja19lbmNyeXB0aW9uLmRlZmF1bHRfa2lkLmFzc2lnbihrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrS2V5SWQgKyBhcnJheXNpemUoa0tleUlkKSk7Ci0gIH0KLQotICB2b2lkIEFkZENvbnN0YW50SXZzVG9DZW5jU2FtcGxlR3JvdXAoVHJhY2sqIHRyYWNrLCBUcmFja0ZyYWdtZW50KiBmcmFnKSB7Ci0gICAgYXV0byYgdHJhY2tfY2VuY19ncm91cCA9Ci0gICAgICAgIHRyYWNrLT5tZWRpYS5pbmZvcm1hdGlvbi5zYW1wbGVfdGFibGUuc2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uOwotICAgIHRyYWNrX2NlbmNfZ3JvdXAuZW50cmllc1swXS5pdl9zaXplID0gMDsKLSAgICB0cmFja19jZW5jX2dyb3VwLmVudHJpZXNbMF0uY3J5cHRfYnl0ZV9ibG9jayA9IDE7Ci0gICAgdHJhY2tfY2VuY19ncm91cC5lbnRyaWVzWzBdLnNraXBfYnl0ZV9ibG9jayA9IDk7Ci0gICAgdHJhY2tfY2VuY19ncm91cC5lbnRyaWVzWzBdLmNvbnN0YW50X2l2X3NpemUgPSAxNjsKLSAgICBtZW1jcHkodHJhY2tfY2VuY19ncm91cC5lbnRyaWVzWzBdLmNvbnN0YW50X2l2LCBrSXY0LCAxNik7Ci0KLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1sxXS5pdl9zaXplID0gMDsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1sxXS5jcnlwdF9ieXRlX2Jsb2NrID0gMTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1sxXS5za2lwX2J5dGVfYmxvY2sgPSA5OwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzWzFdLmNvbnN0YW50X2l2X3NpemUgPSAxNjsKLSAgICBtZW1jcHkoZnJhZy0+c2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uLmVudHJpZXNbMV0uY29uc3RhbnRfaXYsIGtJdjUsCi0gICAgICAgICAgICAgICAgIDE2KTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1syXS5pdl9zaXplID0gMDsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1syXS5jcnlwdF9ieXRlX2Jsb2NrID0gMTsKLSAgICBmcmFnLT5zYW1wbGVfZ3JvdXBfZGVzY3JpcHRpb24uZW50cmllc1syXS5za2lwX2J5dGVfYmxvY2sgPSA5OwotICAgIGZyYWctPnNhbXBsZV9ncm91cF9kZXNjcmlwdGlvbi5lbnRyaWVzWzJdLmNvbnN0YW50X2l2X3NpemUgPSAxNjsKLSAgICBtZW1jcHkoZnJhZy0+c2FtcGxlX2dyb3VwX2Rlc2NyaXB0aW9uLmVudHJpZXNbMl0uY29uc3RhbnRfaXYsIGtJdjUsCi0gICAgICAgICAgICAgICAgIDE2KTsKLSAgfQotCi0gIHZvaWQgQWRkU2FtcGxlRW5jcnlwdGlvbkNiY3MoVHJhY2tGcmFnbWVudCogZnJhZykgewotICAgIGZyYWctPnNhbXBsZV9lbmNyeXB0aW9uLnVzZV9zdWJzYW1wbGVfZW5jcnlwdGlvbiA9IHRydWU7Ci0gICAgZnJhZy0+c2FtcGxlX2VuY3J5cHRpb24uc2FtcGxlX2VuY3J5cHRpb25fZGF0YS5hc3NpZ24oCi0gICAgICAgIGtTYW1wbGVFbmNyeXB0aW9uRGF0YVdpdGhTdWJzYW1wbGVzQW5kQ29uc3RhbnRJdiwKLSAgICAgICAga1NhbXBsZUVuY3J5cHRpb25EYXRhV2l0aFN1YnNhbXBsZXNBbmRDb25zdGFudEl2ICsKLSAgICAgICAgICAgIGFycmF5c2l6ZShrU2FtcGxlRW5jcnlwdGlvbkRhdGFXaXRoU3Vic2FtcGxlc0FuZENvbnN0YW50SXYpKTsKLQotICAgIC8vIFVwZGF0ZSBzYW1wbGUgc2l6ZXMgYW5kIGF1eCBpbmZvIGhlYWRlci4KLSAgICBmcmFnLT5ydW5zLnJlc2l6ZSgxKTsKLSAgICBmcmFnLT5ydW5zWzBdLnNhbXBsZV9jb3VudCA9IDU7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X29mZnNldC5vZmZzZXRzLnB1c2hfYmFjaygwKTsKLSAgICBmcmFnLT5hdXhpbGlhcnlfc2l6ZS5zYW1wbGVfY291bnQgPSA1OwotICAgIC8vIFVwZGF0ZSBzYW1wbGUgc2l6ZXMgdG8gbWF0Y2ggd2l0aCBzdWJzYW1wbGUgZW50cmllcyBhYm92ZS4KLSAgICBmcmFnLT5ydW5zWzBdLnNhbXBsZV9zaXplc1swXSA9IDM7Ci0gICAgZnJhZy0+cnVuc1swXS5zYW1wbGVfc2l6ZXNbMV0gPSAxMDsKLSAgICBmcmFnLT5ydW5zWzBdLnNhbXBsZV9zaXplc1syXSA9IDM7Ci0gICAgZnJhZy0+cnVuc1swXS5zYW1wbGVfc2l6ZXNbM10gPSAzOwotICAgIGZyYWctPnJ1bnNbMF0uc2FtcGxlX3NpemVzWzRdID0gMzsKLSAgICAvLyBTZXQgYXV4IGluZm8gaGVhZGVyLgotICAgIGZyYWctPmF1eGlsaWFyeV9zaXplLnNhbXBsZV9pbmZvX3NpemVzLnB1c2hfYmFjaygxNik7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X3NpemUuc2FtcGxlX2luZm9fc2l6ZXMucHVzaF9iYWNrKDMwKTsKLSAgICBmcmFnLT5hdXhpbGlhcnlfc2l6ZS5zYW1wbGVfaW5mb19zaXplcy5wdXNoX2JhY2soMTYpOwotICAgIGZyYWctPmF1eGlsaWFyeV9zaXplLnNhbXBsZV9pbmZvX3NpemVzLnB1c2hfYmFjaygxNik7Ci0gICAgZnJhZy0+YXV4aWxpYXJ5X3NpemUuc2FtcGxlX2luZm9fc2l6ZXMucHVzaF9iYWNrKDE2KTsKLSAgfQotCi0gIGJvb2wgSW5pdE1vb2ZXaXRoQXJiaXRyYXJ5QXV4SW5mbyhNb3ZpZUZyYWdtZW50KiBtb29mKSB7Ci0gICAgLy8gQWRkIGF1eCBpbmZvIGhlYWRlciAoZXF1YWwgc2l6ZWQgYXV4IGluZm8gZm9yIGV2ZXJ5IHNhbXBsZSkuCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1vb2YtPnRyYWNrcy5zaXplKCk7ICsraSkgewotICAgICAgbW9vZi0+dHJhY2tzW2ldLmF1eGlsaWFyeV9vZmZzZXQub2Zmc2V0cy5wdXNoX2JhY2soNTApOwotICAgICAgbW9vZi0+dHJhY2tzW2ldLmF1eGlsaWFyeV9zaXplLnNhbXBsZV9jb3VudCA9IDEwOwotICAgICAgbW9vZi0+dHJhY2tzW2ldLmF1eGlsaWFyeV9zaXplLmRlZmF1bHRfc2FtcGxlX2luZm9fc2l6ZSA9IDg7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0dWFsIGRhdGEgaW4gYXV4LgotICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGF1eF9pbmZvKDEwMDApOwotICAgIHJldHVybiBpdGVyXy0+SW5pdCgqbW9vZikgJiYKLSAgICAgICAgICAgaXRlcl8tPkNhY2hlQXV4SW5mbygmYXV4X2luZm9bMF0sIGF1eF9pbmZvLnNpemUoKSk7Ci0gIH0KLQotICB2b2lkIFNldEFzY2VuZGluZyhzdGQ6OnZlY3Rvcjx1aW50MzJfdD4qIHZlYykgewotICAgIHZlYy0+cmVzaXplKDEwKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlYy0+c2l6ZSgpOyBpKyspICgqdmVjKVtpXSA9IGkgKyAxOwotICB9Ci19OwotCi1URVNUX0YoVHJhY2tSdW5JdGVyYXRvclRlc3QsIE5vUnVuc1Rlc3QpIHsKLSAgaXRlcl8ucmVzZXQobmV3IFRyYWNrUnVuSXRlcmF0b3IoJm1vb3ZfLCBtZWRpYV9sb2dfKSk7Ci0gIEFTU0VSVF9UUlVFKGl0ZXJfLT5Jbml0KE1vdmllRnJhZ21lbnQoKSkpOwotICBFWFBFQ1RfRkFMU0UoaXRlcl8tPklzUnVuVmFsaWQoKSk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+SXNTYW1wbGVWYWxpZCgpKTsKLX0KLQotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LCBCYXNpY09wZXJhdGlvblRlc3QpIHsKLSAgaXRlcl8ucmVzZXQobmV3IFRyYWNrUnVuSXRlcmF0b3IoJm1vb3ZfLCBtZWRpYV9sb2dfKSk7Ci0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0KLSAgLy8gVGVzdCB0aGF0IHJ1bnMgYXJlIHNvcnRlZCBjb3JyZWN0bHksIGFuZCB0aGF0IHByb3BlcnRpZXMgb2YgdGhlIGluaXRpYWwKLSAgLy8gc2FtcGxlIG9mIHRoZSBmaXJzdCBydW4gYXJlIGNvcnJlY3QKLSAgQVNTRVJUX1RSVUUoaXRlcl8tPkluaXQobW9vZikpOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+SXNSdW5WYWxpZCgpKTsKLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+dHJhY2tfaWQoKSwgMXUpOwotICBFWFBFQ1RfRVEoaXRlcl8tPnNhbXBsZV9vZmZzZXQoKSwgMTAwKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5zYW1wbGVfc2l6ZSgpLCAxKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5kdHMoKSwgRGVjb2RlVGltZXN0YW1wRnJvbVJhdGlvbmFsKDAsIGtBdWRpb1NjYWxlKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+Y3RzKCksIFRpbWVEZWx0YUZyb21SYXRpb25hbCgwLCBrQXVkaW9TY2FsZSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR1cmF0aW9uKCksIFRpbWVEZWx0YUZyb21SYXRpb25hbCgxMDI0LCBrQXVkaW9TY2FsZSkpOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+aXNfa2V5ZnJhbWUoKSk7Ci0KLSAgLy8gQWR2YW5jZSB0byB0aGUgbGFzdCBzYW1wbGUgaW4gdGhlIGN1cnJlbnQgcnVuLCBhbmQgdGVzdCBpdHMgcHJvcGVydGllcwotICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkrKykgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT50cmFja19pZCgpLCAxdSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAxMDAgKyBrU3VtQXNjZW5kaW5nMSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX3NpemUoKSwgMTApOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR0cygpLCBEZWNvZGVUaW1lc3RhbXBGcm9tUmF0aW9uYWwoMTAyNCAqIDksIGtBdWRpb1NjYWxlKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+ZHVyYXRpb24oKSwgVGltZURlbHRhRnJvbVJhdGlvbmFsKDEwMjQsIGtBdWRpb1NjYWxlKSk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19rZXlmcmFtZSgpKTsKLQotICAvLyBUZXN0IGVuZC1vZi1ydW4KLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5Jc1NhbXBsZVZhbGlkKCkpOwotCi0gIC8vIFRlc3QgbGFzdCBzYW1wbGUgb2YgbmV4dCBydW4KLSAgaXRlcl8tPkFkdmFuY2VSdW4oKTsKLSAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2tleWZyYW1lKCkpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkrKykgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT50cmFja19pZCgpLCAydSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAyMDAgKyBrU3VtQXNjZW5kaW5nMSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX3NpemUoKSwgMTApOwotICBpbnQ2NF90IGJhc2VfZHRzID0ga1N1bUFzY2VuZGluZzEgKyBtb29mLnRyYWNrc1sxXS5kZWNvZGVfdGltZS5kZWNvZGVfdGltZTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5kdHMoKSwgRGVjb2RlVGltZXN0YW1wRnJvbVJhdGlvbmFsKGJhc2VfZHRzLCBrVmlkZW9TY2FsZSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR1cmF0aW9uKCksIFRpbWVEZWx0YUZyb21SYXRpb25hbCgxMCwga1ZpZGVvU2NhbGUpKTsKLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5pc19rZXlmcmFtZSgpKTsKLQotICAvLyBUZXN0IGZpbmFsIHJ1bgotICBpdGVyXy0+QWR2YW5jZVJ1bigpOwotICBFWFBFQ1RfRVEoaXRlcl8tPnRyYWNrX2lkKCksIDF1KTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5kdHMoKSwgRGVjb2RlVGltZXN0YW1wRnJvbVJhdGlvbmFsKDEwMjQgKiAxMCwga0F1ZGlvU2NhbGUpKTsKLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0VRKG1vb2YudHJhY2tzWzBdLnJ1bnNbMV0uZGF0YV9vZmZzZXQgKwotICAgICAgICAgICAgICAgIG1vb2YudHJhY2tzWzBdLmhlYWRlci5kZWZhdWx0X3NhbXBsZV9zaXplLAotICAgICAgICAgICAgaXRlcl8tPnNhbXBsZV9vZmZzZXQoKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+SXNSdW5WYWxpZCgpKTsKLX0KLQotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LCBUcmFja0V4dGVuZHNEZWZhdWx0c1Rlc3QpIHsKLSAgbW9vdl8uZXh0ZW5kcy50cmFja3NbMF0uZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24gPSA1MDsKLSAgbW9vdl8uZXh0ZW5kcy50cmFja3NbMF0uZGVmYXVsdF9zYW1wbGVfc2l6ZSA9IDM7Ci0gIG1vb3ZfLmV4dGVuZHMudHJhY2tzWzBdLmRlZmF1bHRfc2FtcGxlX2ZsYWdzID0gVG9TYW1wbGVGbGFncygiVU4iKTsKLSAgaXRlcl8ucmVzZXQobmV3IFRyYWNrUnVuSXRlcmF0b3IoJm1vb3ZfLCBtZWRpYV9sb2dfKSk7Ci0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0gIG1vb2YudHJhY2tzWzBdLmhlYWRlci5oYXNfZGVmYXVsdF9zYW1wbGVfZmxhZ3MgPSBmYWxzZTsKLSAgbW9vZi50cmFja3NbMF0uaGVhZGVyLmRlZmF1bHRfc2FtcGxlX3NpemUgPSAwOwotICBtb29mLnRyYWNrc1swXS5oZWFkZXIuZGVmYXVsdF9zYW1wbGVfZHVyYXRpb24gPSAwOwotICBtb29mLnRyYWNrc1swXS5ydW5zWzBdLnNhbXBsZV9zaXplcy5jbGVhcigpOwotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+aXNfa2V5ZnJhbWUoKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX3NpemUoKSwgMyk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCBtb29mLnRyYWNrc1swXS5ydW5zWzBdLmRhdGFfb2Zmc2V0ICsgMyk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+ZHVyYXRpb24oKSwgVGltZURlbHRhRnJvbVJhdGlvbmFsKDUwLCBrQXVkaW9TY2FsZSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR0cygpLCBEZWNvZGVUaW1lc3RhbXBGcm9tUmF0aW9uYWwoNTAsIGtBdWRpb1NjYWxlKSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgRmlyc3RTYW1wbGVGbGFnVGVzdCkgewotICAvLyBFbnN1cmUgdGhhdCBrZXlmcmFtZXMgYXJlIGZsYWdnZWQgY29ycmVjdGx5IGluIHRoZSBmYWNlIG9mIEJNRkYgYm94ZXMgd2hpY2gKLSAgLy8gZXhwbGljaXRseSBzcGVjaWZ5IHRoZSBmbGFncyBmb3IgdGhlIGZpcnN0IHNhbXBsZSBpbiBhIHJ1biBhbmQgcmVseSBvbgotICAvLyBkZWZhdWx0cyBmb3IgYWxsIHN1YnNlcXVlbnQgc2FtcGxlcwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLSAgbW9vZi50cmFja3NbMV0uaGVhZGVyLmhhc19kZWZhdWx0X3NhbXBsZV9mbGFncyA9IHRydWU7Ci0gIG1vb2YudHJhY2tzWzFdLmhlYWRlci5kZWZhdWx0X3NhbXBsZV9mbGFncyA9IFRvU2FtcGxlRmxhZ3MoIlVOIik7Ci0gIFNldEZsYWdzT25TYW1wbGVzKCJVUyIsICZtb29mLnRyYWNrc1sxXS5ydW5zWzBdKTsKLQotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0gIEVYUEVDVF9FUSgiMSBLIEsgSyBLIEsgSyBLIEsgSyBLIiwgS2V5ZnJhbWVBbmRSQVBJbmZvKGl0ZXJfLmdldCgpKSk7Ci0KLSAgaXRlcl8tPkFkdmFuY2VSdW4oKTsKLSAgRVhQRUNUX0VRKCIyIEsgUCBQIFAgUCBQIFAgUCBQIFAiLCBLZXlmcmFtZUFuZFJBUEluZm8oaXRlcl8uZ2V0KCkpKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgcGFyc2luZyBmYWlscyBpZiBhIHJlc2VydmVkIHZhbHVlIGlzIGluIHRoZSBzYW1wbGUgZmxhZ3MuCi1URVNUX0YoVHJhY2tSdW5JdGVyYXRvclRlc3QsIFNhbXBsZUluZm9UZXN0X1Jlc2VydmVkSW5TYW1wbGVGbGFncykgewotICBFWFBFQ1RfTUVESUFfTE9HKFJlc2VydmVkVmFsdWVJblNhbXBsZURlcGVuZGVuY3lJbmZvKCkpOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLSAgLy8gQ2hhbmdlIHRoZSAiZGVwZW5kcyBvbiIgZmllbGQgb24gb25lIG9mIHRoZSBzYW1wbGVzIHRvIGEKLSAgLy8gcmVzZXJ2ZWQgdmFsdWUuCi0gIG1vb2YudHJhY2tzWzFdLnJ1bnNbMF0uc2FtcGxlX2ZsYWdzWzBdID0gVG9TYW1wbGVGbGFncygiUlMiKTsKLSAgQVNTRVJUX0ZBTFNFKGl0ZXJfLT5Jbml0KG1vb2YpKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgcGFyc2luZyBmYWlscyBpZiBhIHJlc2VydmVkIHZhbHVlIGlzIGluIHRoZSBkZWZhdWx0IHNhbXBsZSBmbGFncy4KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgU2FtcGxlSW5mb1Rlc3RfUmVzZXJ2ZWRJbkRlZmF1bHRTYW1wbGVGbGFncykgewotICBFWFBFQ1RfTUVESUFfTE9HKFJlc2VydmVkVmFsdWVJblNhbXBsZURlcGVuZGVuY3lJbmZvKCkpOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLSAgLy8gU2V0IHRoZSBkZWZhdWx0IGZsYWcgdG8gY29udGFpbiBhIHJlc2VydmVkICJkZXBlbmRzIG9uIiB2YWx1ZS4KLSAgbW9vZi50cmFja3NbMF0uaGVhZGVyLmRlZmF1bHRfc2FtcGxlX2ZsYWdzID0gVG9TYW1wbGVGbGFncygiUk4iKTsKLSAgQVNTRVJUX0ZBTFNFKGl0ZXJfLT5Jbml0KG1vb2YpKTsKLX0KLQotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LCBSZW9yZGVyaW5nVGVzdCkgewotICAvLyBUZXN0IGZyYW1lIHJlb3JkZXJpbmcgYW5kIGVkaXQgbGlzdCBzdXBwb3J0LiBUaGUgZnJhbWVzIGhhdmUgdGhlIGZvbGxvd2luZwotICAvLyBkZWNvZGUgdGltZXN0YW1wczoKLSAgLy8KLSAgLy8gICAwbXMgNDBtcyAgIDEyMG1zICAgICAyNDBtcwotICAvLyAgIHwgMCB8IDEgIC0gfCAyICAtICAtIHwKLSAgLy8KLSAgLy8gLi4uYW5kIHRoZXNlIGNvbXBvc2l0aW9uIHRpbWVzdGFtcHMsIGFmdGVyIGVkaXQgbGlzdCBhZGp1c3RtZW50OgotICAvLwotICAvLyAgIDBtcyA0MG1zICAgICAgIDE2MG1zICAyNDBtcwotICAvLyAgIHwgMCB8IDIgIC0gIC0gIHwgMSAtIHwKLQotICAvLyBDcmVhdGUgYW4gZWRpdCBsaXN0IHdpdGggb25lIGVudHJ5LCB3aXRoIGFuIGluaXRpYWwgc3RhcnQgdGltZSBvZiA4MG1zCi0gIC8vICh0aGF0IGlzLCAyIC8ga1ZpZGVvVGltZXNjYWxlKSBhbmQgYSBkdXJhdGlvbiBvZiB6ZXJvICh3aGljaCBpcyB0cmVhdGVkIGFzCi0gIC8vIGluZmluaXRlIGFjY29yZGluZyB0byAxNDQ5Ni0xMjoyMDEyKS4gVGhpcyB3aWxsIGNhdXNlIHRoZSBmaXJzdCA4MG1zIG9mIHRoZQotICAvLyBtZWRpYSB0aW1lbGluZSAtIHdoaWNoIHdpbGwgYmUgZW1wdHksIGR1ZSB0byBDVFMgYmlhc2luZyAtIHRvIGJlIGRpc2NhcmRlZC4KLSAgaXRlcl8ucmVzZXQobmV3IFRyYWNrUnVuSXRlcmF0b3IoJm1vb3ZfLCBtZWRpYV9sb2dfKSk7Ci0gIEVkaXRMaXN0RW50cnkgZW50cnk7Ci0gIGVudHJ5LnNlZ21lbnRfZHVyYXRpb24gPSAwOwotICBlbnRyeS5tZWRpYV90aW1lID0gMjsKLSAgZW50cnkubWVkaWFfcmF0ZV9pbnRlZ2VyID0gMTsKLSAgZW50cnkubWVkaWFfcmF0ZV9mcmFjdGlvbiA9IDA7Ci0gIG1vb3ZfLnRyYWNrc1sxXS5lZGl0Lmxpc3QuZWRpdHMucHVzaF9iYWNrKGVudHJ5KTsKLQotICAvLyBBZGQgQ1RTIG9mZnNldHMuIFdpdGhvdXQgYmlhcywgdGhlIENUUyBvZmZzZXRzIGZvciB0aGUgZmlyc3QgdGhyZWUgZnJhbWVzCi0gIC8vIHdvdWxkIHNpbXBseSBiZSBbMCwgMywgLTJdLiBTaW5jZSBDVFMgb2Zmc2V0cyBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGZvcgotICAvLyBtYXhpbXVtIGNvbXBhdGliaWxpdHksIHRoZXNlIHZhbHVlcyBhcmUgYmlhc2VkIHVwIHRvIFsyLCA1LCAwXSwgYW5kIHRoZQotICAvLyBleHRyYSA4MG1zIGlzIHJlbW92ZWQgdmlhIHRoZSBlZGl0IGxpc3QuCi0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0gIHN0ZDo6dmVjdG9yPGludDMyX3Q+JiBjdHNfb2Zmc2V0cyA9Ci0gICAgICBtb29mLnRyYWNrc1sxXS5ydW5zWzBdLnNhbXBsZV9jb21wb3NpdGlvbl90aW1lX29mZnNldHM7Ci0gIGN0c19vZmZzZXRzLnJlc2l6ZSgxMCk7Ci0gIGN0c19vZmZzZXRzWzBdID0gMjsKLSAgY3RzX29mZnNldHNbMV0gPSA1OwotICBjdHNfb2Zmc2V0c1syXSA9IDA7Ci0gIG1vb2YudHJhY2tzWzFdLmRlY29kZV90aW1lLmRlY29kZV90aW1lID0gMDsKLQotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+ZHRzKCksIERlY29kZVRpbWVzdGFtcEZyb21SYXRpb25hbCgwLCBrVmlkZW9TY2FsZSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmN0cygpLCBUaW1lRGVsdGFGcm9tUmF0aW9uYWwoMCwga1ZpZGVvU2NhbGUpKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5kdXJhdGlvbigpLCBUaW1lRGVsdGFGcm9tUmF0aW9uYWwoMSwga1ZpZGVvU2NhbGUpKTsKLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5kdHMoKSwgRGVjb2RlVGltZXN0YW1wRnJvbVJhdGlvbmFsKDEsIGtWaWRlb1NjYWxlKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+Y3RzKCksIFRpbWVEZWx0YUZyb21SYXRpb25hbCg0LCBrVmlkZW9TY2FsZSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR1cmF0aW9uKCksIFRpbWVEZWx0YUZyb21SYXRpb25hbCgyLCBrVmlkZW9TY2FsZSkpOwotICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmR0cygpLCBEZWNvZGVUaW1lc3RhbXBGcm9tUmF0aW9uYWwoMywga1ZpZGVvU2NhbGUpKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5jdHMoKSwgVGltZURlbHRhRnJvbVJhdGlvbmFsKDEsIGtWaWRlb1NjYWxlKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+ZHVyYXRpb24oKSwgVGltZURlbHRhRnJvbVJhdGlvbmFsKDMsIGtWaWRlb1NjYWxlKSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgSWdub3JlVW5rbm93bkF1eEluZm9UZXN0KSB7Ci0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotICBNb3ZpZUZyYWdtZW50IG1vb2YgPSBDcmVhdGVGcmFnbWVudCgpOwotICBtb29mLnRyYWNrc1sxXS5hdXhpbGlhcnlfb2Zmc2V0Lm9mZnNldHMucHVzaF9iYWNrKDUwKTsKLSAgbW9vZi50cmFja3NbMV0uYXV4aWxpYXJ5X3NpemUuZGVmYXVsdF9zYW1wbGVfaW5mb19zaXplID0gMjsKLSAgbW9vZi50cmFja3NbMV0uYXV4aWxpYXJ5X3NpemUuc2FtcGxlX2NvdW50ID0gMjsKLSAgbW9vZi50cmFja3NbMV0ucnVuc1swXS5zYW1wbGVfY291bnQgPSAyOwotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+QXV4SW5mb05lZWRzVG9CZUNhY2hlZCgpKTsKLX0KLQotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LAotICAgICAgIERlY3J5cHRDb25maWdUZXN0V2l0aFNhbXBsZUVuY3J5cHRpb25BbmROb1N1YnNhbXBsZSkgewotICBBZGRFbmNyeXB0aW9uKCZtb292Xy50cmFja3NbMV0pOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLQotICBNb3ZpZUZyYWdtZW50IG1vb2YgPSBDcmVhdGVGcmFnbWVudCgpOwotICBBZGRTYW1wbGVFbmNyeXB0aW9uKCFTYW1wbGVFbmNyeXB0aW9uOjprVXNlU3Vic2FtcGxlRW5jcnlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAmbW9vZi50cmFja3NbMV0pOwotCi0gIEFTU0VSVF9UUlVFKGl0ZXJfLT5Jbml0KG1vb2YpKTsKLSAgLy8gVGhlIHJ1biBmb3IgdHJhY2sgMiB3aWxsIGJlIHRoZSBzZWNvbmQsIHdoaWNoIGlzIHBhcnNlZCBhY2NvcmRpbmcgdG8KLSAgLy8gZGF0YV9vZmZzZXQuCi0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+dHJhY2tfaWQoKSwgMnUpOwotCi0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gIC8vIE5vIG5lZWQgdG8gY2FjaGUgYXV4IGluZm8gYXMgaXQgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gU2FtcGxlRW5jcnlwdGlvbi4KLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5BdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmF1eF9pbmZvX3NpemUoKSwgMCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAyMDApOwotICBFWFBFQ1RfRVEoaXRlcl8tPkdldE1heENsZWFyT2Zmc2V0KCksIG1vb2YudHJhY2tzWzFdLnJ1bnNbMF0uZGF0YV9vZmZzZXQpOwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gY29uZmlnID0gaXRlcl8tPkdldERlY3J5cHRDb25maWcoKTsKLSAgRVhQRUNUX0VRKAotICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oa0tleUlkKSwgYXJyYXlzaXplKGtLZXlJZCkpLAotICAgICAgY29uZmlnLT5rZXlfaWQoKSk7Ci0gIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihrSXYxKSwgYXJyYXlzaXplKGtJdjEpKSwKLSAgICAgICAgICAgIGNvbmZpZy0+aXYoKSk7Ci0gIEVYUEVDVF9FUShjb25maWctPnN1YnNhbXBsZXMoKS5zaXplKCksIDB1KTsKLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgY29uZmlnID0gaXRlcl8tPkdldERlY3J5cHRDb25maWcoKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGtJdjIpLCBhcnJheXNpemUoa0l2MikpLAotICAgICAgICAgICAgY29uZmlnLT5pdigpKTsKLSAgRVhQRUNUX0VRKGNvbmZpZy0+c3Vic2FtcGxlcygpLnNpemUoKSwgMHUpOwotfQotCi1URVNUX0YoVHJhY2tSdW5JdGVyYXRvclRlc3QsCi0gICAgICAgRGVjcnlwdENvbmZpZ1Rlc3RXaXRoU2FtcGxlRW5jcnlwdGlvbkFuZFN1YnNhbXBsZSkgewotICBBZGRFbmNyeXB0aW9uKCZtb292Xy50cmFja3NbMV0pOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLQotICBNb3ZpZUZyYWdtZW50IG1vb2YgPSBDcmVhdGVGcmFnbWVudCgpOwotICBBZGRTYW1wbGVFbmNyeXB0aW9uKFNhbXBsZUVuY3J5cHRpb246OmtVc2VTdWJzYW1wbGVFbmNyeXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICZtb29mLnRyYWNrc1sxXSk7Ci0gIGNvbnN0IFNhbXBsZVRvR3JvdXBFbnRyeSBrU2FtcGxlVG9Hcm91cFRhYmxlW10gPSB7Ci0gICAgICAvLyBBc3NvY2lhdGVkIHdpdGggdGhlIHNlY29uZCBlbnRyeSBpbiBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveC4KLSAgICAgIC8vIFdpdGggSXYgc2l6ZSA4IGJ5dGVzLgotICAgICAgezEsIFNhbXBsZVRvR3JvdXBFbnRyeTo6a0ZyYWdtZW50R3JvdXBEZXNjcmlwdGlvbkluZGV4QmFzZSArIDJ9LAotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSB0aGlyZCBlbnRyeSBpbiBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveC4KLSAgICAgIC8vIFdpdGggSXYgc2l6ZSAxNiBieXRlcy4KLSAgICAgIHsxLCBTYW1wbGVUb0dyb3VwRW50cnk6OmtGcmFnbWVudEdyb3VwRGVzY3JpcHRpb25JbmRleEJhc2UgKyAzfX07Ci0gIEFkZENlbmNTYW1wbGVHcm91cCgmbW9vdl8udHJhY2tzWzFdLCAmbW9vZi50cmFja3NbMV0sIGtTYW1wbGVUb0dyb3VwVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICBhcnJheXNpemUoa1NhbXBsZVRvR3JvdXBUYWJsZSkpOwotCi0gIEFTU0VSVF9UUlVFKGl0ZXJfLT5Jbml0KG1vb2YpKTsKLSAgLy8gVGhlIHJ1biBmb3IgdHJhY2sgMiB3aWxsIGJlIHRoZSBzZWNvbmQsIHdoaWNoIGlzIHBhcnNlZCBhY2NvcmRpbmcgdG8KLSAgLy8gZGF0YV9vZmZzZXQuCi0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+dHJhY2tfaWQoKSwgMnUpOwotCi0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gIC8vIE5vIG5lZWQgdG8gY2FjaGUgYXV4IGluZm8gYXMgaXQgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gU2FtcGxlRW5jcnlwdGlvbi4KLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5BdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmF1eF9pbmZvX3NpemUoKSwgMCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAyMDApOwotICBFWFBFQ1RfRVEoaXRlcl8tPkdldE1heENsZWFyT2Zmc2V0KCksIG1vb2YudHJhY2tzWzFdLnJ1bnNbMF0uZGF0YV9vZmZzZXQpOwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gY29uZmlnID0gaXRlcl8tPkdldERlY3J5cHRDb25maWcoKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGtJdjEpLCBhcnJheXNpemUoa0l2MSkpLAotICAgICAgICAgICAgY29uZmlnLT5pdigpKTsKLSAgRVhQRUNUX0VRKGNvbmZpZy0+c3Vic2FtcGxlcygpLnNpemUoKSwgMXUpOwotICBFWFBFQ1RfRVEoY29uZmlnLT5zdWJzYW1wbGVzKClbMF0uY2xlYXJfYnl0ZXMsIDF1KTsKLSAgRVhQRUNUX0VRKGNvbmZpZy0+c3Vic2FtcGxlcygpWzBdLmN5cGhlcl9ieXRlcywgMnUpOwotICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICBjb25maWcgPSBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpOwotICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oa0l2MyksIGFycmF5c2l6ZShrSXYzKSksCi0gICAgICAgICAgICBjb25maWctPml2KCkpOwotICBFWFBFQ1RfRVEoY29uZmlnLT5zdWJzYW1wbGVzKCkuc2l6ZSgpLCAydSk7Ci0gIEVYUEVDVF9FUShjb25maWctPnN1YnNhbXBsZXMoKVswXS5jbGVhcl9ieXRlcywgMXUpOwotICBFWFBFQ1RfRVEoY29uZmlnLT5zdWJzYW1wbGVzKClbMF0uY3lwaGVyX2J5dGVzLCAydSk7Ci0gIEVYUEVDVF9FUShjb25maWctPnN1YnNhbXBsZXMoKVsxXS5jbGVhcl9ieXRlcywgM3UpOwotICBFWFBFQ1RfRVEoY29uZmlnLT5zdWJzYW1wbGVzKClbMV0uY3lwaGVyX2J5dGVzLCA0dSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgRGVjcnlwdENvbmZpZ1Rlc3RXaXRoQXV4SW5mbykgewotICBBZGRFbmNyeXB0aW9uKCZtb292Xy50cmFja3NbMV0pOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLQotICBNb3ZpZUZyYWdtZW50IG1vb2YgPSBDcmVhdGVGcmFnbWVudCgpOwotICBBZGRBdXhJbmZvSGVhZGVycyg1MCwgJm1vb2YudHJhY2tzWzFdKTsKLQotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0KLSAgLy8gVGhlIHJ1biBmb3IgdHJhY2sgMiB3aWxsIGJlIGZpcnN0LCBzaW5jZSBpdHMgYXV4IGluZm8gb2Zmc2V0IGlzIHRoZSBmaXJzdAotICAvLyBlbGVtZW50IGluIHRoZSBmaWxlLgotICBFWFBFQ1RfRVEoaXRlcl8tPnRyYWNrX2lkKCksIDJ1KTsKLSAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgQVNTRVJUX1RSVUUoaXRlcl8tPkF1eEluZm9OZWVkc1RvQmVDYWNoZWQoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaXRlcl8tPmF1eF9pbmZvX3NpemUoKSksIGFycmF5c2l6ZShrQXV4SW5mbykpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmF1eF9pbmZvX29mZnNldCgpLCA1MCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgNTApOwotICBFWFBFQ1RfRkFMU0UoaXRlcl8tPkNhY2hlQXV4SW5mbyhOVUxMLCAwKSk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCAzKSk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5BdXhJbmZvTmVlZHNUb0JlQ2FjaGVkKCkpOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCBhcnJheXNpemUoa0F1eEluZm8pKSk7Ci0gIEVYUEVDVF9GQUxTRShpdGVyXy0+QXV4SW5mb05lZWRzVG9CZUNhY2hlZCgpKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5zYW1wbGVfb2Zmc2V0KCksIDIwMCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgbW9vZi50cmFja3NbMF0ucnVuc1swXS5kYXRhX29mZnNldCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBjb25maWcgPSBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpOwotICBFWFBFQ1RfRVEoCi0gICAgICBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihrS2V5SWQpLCBhcnJheXNpemUoa0tleUlkKSksCi0gICAgICBjb25maWctPmtleV9pZCgpKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGtJdjEpLCBhcnJheXNpemUoa0l2MSkpLAotICAgICAgICAgICAgY29uZmlnLT5pdigpKTsKLSAgRVhQRUNUX1RSVUUoY29uZmlnLT5zdWJzYW1wbGVzKCkuZW1wdHkoKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIGNvbmZpZyA9IGl0ZXJfLT5HZXREZWNyeXB0Q29uZmlnKCk7Ci0gIEVYUEVDVF9FUShjb25maWctPnN1YnNhbXBsZXMoKS5zaXplKCksIDJ1KTsKLSAgRVhQRUNUX0VRKGNvbmZpZy0+c3Vic2FtcGxlcygpWzBdLmNsZWFyX2J5dGVzLCAxdSk7Ci0gIEVYUEVDVF9FUShjb25maWctPnN1YnNhbXBsZXMoKVsxXS5jeXBoZXJfYnl0ZXMsIDR1KTsKLX0KLQotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LCBDZW5jU2FtcGxlR3JvdXBUZXN0KSB7Ci0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0KLSAgY29uc3QgU2FtcGxlVG9Hcm91cEVudHJ5IGtTYW1wbGVUb0dyb3VwVGFibGVbXSA9IHsKLSAgICAgIC8vIEFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kIGVudHJ5IGluIFNhbXBsZUdyb3VwRGVzY3JpcHRpb24gQm94LgotICAgICAgezEsIFNhbXBsZVRvR3JvdXBFbnRyeTo6a0ZyYWdtZW50R3JvdXBEZXNjcmlwdGlvbkluZGV4QmFzZSArIDJ9LAotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdCBlbnRyeSBpbiBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveC4KLSAgICAgIHsxLCBTYW1wbGVUb0dyb3VwRW50cnk6OmtGcmFnbWVudEdyb3VwRGVzY3JpcHRpb25JbmRleEJhc2UgKyAxfX07Ci0gIEFkZENlbmNTYW1wbGVHcm91cCgmbW9vdl8udHJhY2tzWzBdLCAmbW9vZi50cmFja3NbMF0sIGtTYW1wbGVUb0dyb3VwVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICBhcnJheXNpemUoa1NhbXBsZVRvR3JvdXBUYWJsZSkpOwotCi0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotICBBU1NFUlRfVFJVRShJbml0TW9vZldpdGhBcmJpdHJhcnlBdXhJbmZvKCZtb29mKSk7Ci0KLSAgc3RkOjpzdHJpbmcgY2VuY19zYW1wbGVfZ3JvdXBfa2V5X2lkKAotICAgICAga0ZyYWdtZW50Q2VuY1NhbXBsZUdyb3VwS2V5SWQsCi0gICAgICBrRnJhZ21lbnRDZW5jU2FtcGxlR3JvdXBLZXlJZCArIGFycmF5c2l6ZShrRnJhZ21lbnRDZW5jU2FtcGxlR3JvdXBLZXlJZCkpOwotICAvLyBUaGUgZmlyc3Qgc2FtcGxlIGlzIGVuY3J5cHRlZCBhbmQgdGhlIHNlY29uZCBzYW1wbGUgaXMgdW5lbmNyeXB0ZWQuCi0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9FUShjZW5jX3NhbXBsZV9ncm91cF9rZXlfaWQsIGl0ZXJfLT5HZXREZWNyeXB0Q29uZmlnKCktPmtleV9pZCgpKTsKLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0ZBTFNFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgQ2VuY1NhbXBsZUdyb3VwV2l0aFRyYWNrRW5jcnlwdGlvbkJveFRlc3QpIHsKLSAgLy8gQWRkIFRyYWNrRW5jcnlwdGlvbiBCb3guCi0gIEFkZEVuY3J5cHRpb24oJm1vb3ZfLnRyYWNrc1swXSk7Ci0KLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLQotICBjb25zdCBTYW1wbGVUb0dyb3VwRW50cnkga1NhbXBsZVRvR3JvdXBUYWJsZVtdID0gewotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSAybmQgZW50cnkgaW4gZnJhZ21lbnQgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbiBCb3guCi0gICAgICB7MiwgU2FtcGxlVG9Hcm91cEVudHJ5OjprRnJhZ21lbnRHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlICsgMn0sCi0gICAgICAvLyBBc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbiBUcmFja0VuY3J5cHRpb24gQm94LgotICAgICAgezEsIDB9LAotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSAxc3QgZW50cnkgaW4gZnJhZ21lbnQgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbiBCb3guCi0gICAgICB7MywgU2FtcGxlVG9Hcm91cEVudHJ5OjprRnJhZ21lbnRHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlICsgMX0sCi0gICAgICAvLyBBc3NvY2lhdGVkIHdpdGggdGhlIDFzdCBlbnRyeSBpbiB0cmFjayBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveC4KLSAgICAgIHsyLCAxfX07Ci0gIEFkZENlbmNTYW1wbGVHcm91cCgmbW9vdl8udHJhY2tzWzBdLCAmbW9vZi50cmFja3NbMF0sIGtTYW1wbGVUb0dyb3VwVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICBhcnJheXNpemUoa1NhbXBsZVRvR3JvdXBUYWJsZSkpOwotCi0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotICBBU1NFUlRfVFJVRShJbml0TW9vZldpdGhBcmJpdHJhcnlBdXhJbmZvKCZtb29mKSk7Ci0KLSAgc3RkOjpzdHJpbmcgdHJhY2tfZW5jcnlwdGlvbl9rZXlfaWQoa0tleUlkLCBrS2V5SWQgKyBhcnJheXNpemUoa0tleUlkKSk7Ci0gIHN0ZDo6c3RyaW5nIHRyYWNrX2NlbmNfc2FtcGxlX2dyb3VwX2tleV9pZCgKLSAgICAgIGtUcmFja0NlbmNTYW1wbGVHcm91cEtleUlkLAotICAgICAga1RyYWNrQ2VuY1NhbXBsZUdyb3VwS2V5SWQgKyBhcnJheXNpemUoa1RyYWNrQ2VuY1NhbXBsZUdyb3VwS2V5SWQpKTsKLSAgc3RkOjpzdHJpbmcgZnJhZ21lbnRfY2VuY19zYW1wbGVfZ3JvdXBfa2V5X2lkKAotICAgICAga0ZyYWdtZW50Q2VuY1NhbXBsZUdyb3VwS2V5SWQsCi0gICAgICBrRnJhZ21lbnRDZW5jU2FtcGxlR3JvdXBLZXlJZCArIGFycmF5c2l6ZShrRnJhZ21lbnRDZW5jU2FtcGxlR3JvdXBLZXlJZCkpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga1NhbXBsZVRvR3JvdXBUYWJsZVswXS5zYW1wbGVfY291bnQ7ICsraSkgewotICAgIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgRVhQRUNUX0VRKGZyYWdtZW50X2NlbmNfc2FtcGxlX2dyb3VwX2tleV9pZCwKLSAgICAgICAgICAgICAgaXRlcl8tPkdldERlY3J5cHRDb25maWcoKS0+a2V5X2lkKCkpOwotICAgIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIH0KLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtTYW1wbGVUb0dyb3VwVGFibGVbMV0uc2FtcGxlX2NvdW50OyArK2kpIHsKLSAgICBFWFBFQ1RfVFJVRShpdGVyXy0+aXNfZW5jcnlwdGVkKCkpOwotICAgIEVYUEVDVF9FUSh0cmFja19lbmNyeXB0aW9uX2tleV9pZCwgaXRlcl8tPkdldERlY3J5cHRDb25maWcoKS0+a2V5X2lkKCkpOwotICAgIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIH0KLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtTYW1wbGVUb0dyb3VwVGFibGVbMl0uc2FtcGxlX2NvdW50OyArK2kpIHsKLSAgICBFWFBFQ1RfRkFMU0UoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrU2FtcGxlVG9Hcm91cFRhYmxlWzNdLnNhbXBsZV9jb3VudDsgKytpKSB7Ci0gICAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgICBFWFBFQ1RfRVEodHJhY2tfY2VuY19zYW1wbGVfZ3JvdXBfa2V5X2lkLAotICAgICAgICAgICAgICBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpLT5rZXlfaWQoKSk7Ci0gICAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgfQotCi0gIC8vIFRoZSByZW1haW5pbmcgc2FtcGxlcyBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcwotICAvLyBzcGVjaWZpZWQgaW4gVHJhY2tFbmNyeXB0aW9uIEJveC4KLSAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgRVhQRUNUX0VRKHRyYWNrX2VuY3J5cHRpb25fa2V5X2lkLCBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpLT5rZXlfaWQoKSk7Ci19Ci0KLS8vIEl0IGlzIGxlZ2FsIGZvciBhdXggaW5mbyBibG9ja3MgdG8gYmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGZvcm1hdHMuCi1URVNUX0YoVHJhY2tSdW5JdGVyYXRvclRlc3QsIFNoYXJlZEF1eEluZm9UZXN0KSB7Ci0gIEFkZEVuY3J5cHRpb24oJm1vb3ZfLnRyYWNrc1swXSk7Ci0gIEFkZEVuY3J5cHRpb24oJm1vb3ZfLnRyYWNrc1sxXSk7Ci0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotCi0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0gIG1vb2YudHJhY2tzWzBdLnJ1bnMucmVzaXplKDEpOwotICBBZGRBdXhJbmZvSGVhZGVycyg1MCwgJm1vb2YudHJhY2tzWzBdKTsKLSAgQWRkQXV4SW5mb0hlYWRlcnMoNTAsICZtb29mLnRyYWNrc1sxXSk7Ci0gIG1vb2YudHJhY2tzWzBdLmF1eGlsaWFyeV9zaXplLmRlZmF1bHRfc2FtcGxlX2luZm9fc2l6ZSA9IDg7Ci0KLSAgQVNTRVJUX1RSVUUoaXRlcl8tPkluaXQobW9vZikpOwotICBFWFBFQ1RfRVEoaXRlcl8tPnRyYWNrX2lkKCksIDF1KTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5hdXhfaW5mb19vZmZzZXQoKSwgNTApOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCBhcnJheXNpemUoa0F1eEluZm8pKSk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBjb25maWcgPSBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpOwotICBBU1NFUlRfRVEoYXJyYXlzaXplKGtJdjEpLCBjb25maWctPml2KCkuc2l6ZSgpKTsKLSAgRVhQRUNUX1RSVUUoIW1lbWNtcChrSXYxLCBjb25maWctPml2KCkuZGF0YSgpLCBjb25maWctPml2KCkuc2l6ZSgpKSk7Ci0gIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgNTApOwotICBpdGVyXy0+QWR2YW5jZVJ1bigpOwotICBFWFBFQ1RfRVEoaXRlcl8tPkdldE1heENsZWFyT2Zmc2V0KCksIDUwKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5hdXhfaW5mb19vZmZzZXQoKSwgNTApOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCBhcnJheXNpemUoa0F1eEluZm8pKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgMjAwKTsKLSAgQVNTRVJUX0VRKGFycmF5c2l6ZShrSXYxKSwgY29uZmlnLT5pdigpLnNpemUoKSk7Ci0gIEVYUEVDVF9UUlVFKCFtZW1jbXAoa0l2MSwgY29uZmlnLT5pdigpLmRhdGEoKSwgY29uZmlnLT5pdigpLnNpemUoKSkpOwotICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICBFWFBFQ1RfRVEoaXRlcl8tPkdldE1heENsZWFyT2Zmc2V0KCksIDIwMSk7Ci19Ci0KLS8vIFNlbnNpYmxlIGZpbGVzIGFyZSBleHBlY3RlZCB0byBwbGFjZSBhdXhpbGlhcnkgaW5mb3JtYXRpb24gZm9yIGEgcnVuCi0vLyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIG1haW4gZGF0YSBmb3IgdGhhdCBydW4uIEFsdGVybmF0aXZlIHNjaGVtZXMgYXJlCi0vLyBwb3NzaWJsZSwgaG93ZXZlciwgaW5jbHVkaW5nIHRoZSBzb21ld2hhdCByZWFzb25hYmxlIGJlaGF2aW9yIG9mIHBsYWNpbmcgYWxsCi0vLyBhdXggaW5mbyBhdCB0aGUgaGVhZCBvZiB0aGUgJ21kYXQnIGJveCB0b2dldGhlciwgYW5kIHRoZSBjb21wbGV0ZWx5Ci0vLyB1bnJlYXNvbmFibGUgYmVoYXZpb3IgZGVtb25zdHJhdGVkIGhlcmU6Ci0vLyAgYnl0ZSA1MDogdHJhY2sgMiwgcnVuIDEgYXV4IGluZm8KLS8vICBieXRlIDEwMDogdHJhY2sgMSwgcnVuIDEgZGF0YQotLy8gIGJ5dGUgMjAwOiB0cmFjayAyLCBydW4gMSBkYXRhCi0vLyAgYnl0ZSAyMDE6IHRyYWNrIDEsIHJ1biAyIGF1eCBpbmZvICgqaW5zaWRlKiB0cmFjayAyLCBydW4gMSBkYXRhKQotLy8gIGJ5dGUgMTAwMDA6IHRyYWNrIDEsIHJ1biAyIGRhdGEKLS8vICBieXRlIDIwMDAwOiB0cmFjayAxLCBydW4gMSBhdXggaW5mbwotVEVTVF9GKFRyYWNrUnVuSXRlcmF0b3JUZXN0LCBVbmV4cGVjdGVkT3JkZXJpbmdUZXN0KSB7Ci0gIEFkZEVuY3J5cHRpb24oJm1vb3ZfLnRyYWNrc1swXSk7Ci0gIEFkZEVuY3J5cHRpb24oJm1vb3ZfLnRyYWNrc1sxXSk7Ci0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotCi0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0gIEFkZEF1eEluZm9IZWFkZXJzKDIwMDAwLCAmbW9vZi50cmFja3NbMF0pOwotICBtb29mLnRyYWNrc1swXS5hdXhpbGlhcnlfb2Zmc2V0Lm9mZnNldHMucHVzaF9iYWNrKDIwMSk7Ci0gIG1vb2YudHJhY2tzWzBdLmF1eGlsaWFyeV9zaXplLnNhbXBsZV9jb3VudCArPSAyOwotICBtb29mLnRyYWNrc1swXS5hdXhpbGlhcnlfc2l6ZS5kZWZhdWx0X3NhbXBsZV9pbmZvX3NpemUgPSA4OwotICBtb29mLnRyYWNrc1swXS5ydW5zWzFdLnNhbXBsZV9jb3VudCA9IDI7Ci0gIEFkZEF1eEluZm9IZWFkZXJzKDUwLCAmbW9vZi50cmFja3NbMV0pOwotICBtb29mLnRyYWNrc1sxXS5ydW5zWzBdLnNhbXBsZV9zaXplc1swXSA9IDU7Ci0KLSAgQVNTRVJUX1RSVUUoaXRlcl8tPkluaXQobW9vZikpOwotICBFWFBFQ1RfRVEoaXRlcl8tPnRyYWNrX2lkKCksIDJ1KTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5hdXhfaW5mb19vZmZzZXQoKSwgNTApOwotICBFWFBFQ1RfRVEoaXRlcl8tPnNhbXBsZV9vZmZzZXQoKSwgMjAwKTsKLSAgRVhQRUNUX1RSVUUoaXRlcl8tPkNhY2hlQXV4SW5mbyhrQXV4SW5mbywgYXJyYXlzaXplKGtBdXhJbmZvKSkpOwotICBFWFBFQ1RfRVEoaXRlcl8tPkdldE1heENsZWFyT2Zmc2V0KCksIDEwMCk7Ci0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+dHJhY2tfaWQoKSwgMXUpOwotICBFWFBFQ1RfRVEoaXRlcl8tPmF1eF9pbmZvX29mZnNldCgpLCAyMDAwMCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAxMDApOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCBhcnJheXNpemUoa0F1eEluZm8pKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgMTAwKTsKLSAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5HZXRNYXhDbGVhck9mZnNldCgpLCAxMDEpOwotICBpdGVyXy0+QWR2YW5jZVJ1bigpOwotICBFWFBFQ1RfRVEoaXRlcl8tPnRyYWNrX2lkKCksIDF1KTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5hdXhfaW5mb19vZmZzZXQoKSwgMjAxKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5zYW1wbGVfb2Zmc2V0KCksIDEwMDAwKTsKLSAgRVhQRUNUX0VRKGl0ZXJfLT5HZXRNYXhDbGVhck9mZnNldCgpLCAyMDEpOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+Q2FjaGVBdXhJbmZvKGtBdXhJbmZvLCBhcnJheXNpemUoa0F1eEluZm8pKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+R2V0TWF4Q2xlYXJPZmZzZXQoKSwgMTAwMDApOwotfQotCi1URVNUX0YoVHJhY2tSdW5JdGVyYXRvclRlc3QsIEtleUZyYW1lRmxhZ0NvbWJpbmF0aW9ucykgewotICAvLyBTZXR1cCBib3RoIGF1ZGlvIGFuZCB2aWRlbyB0cmFja3MgdG8gZWFjaCBoYXZlIDYgc2FtcGxlcyBjb3ZlcmluZyBhbGwgdGhlCi0gIC8vIGNvbWJpbmF0aW9ucyBvZiBtcDQgInN5bmMgc2FtcGxlIiBhbmQgImRlcGVuZHMgb24iIHJlbGF0aW9uc2hpcHMuCi0gIE1vdmllRnJhZ21lbnQgbW9vZiA9IENyZWF0ZUZyYWdtZW50KCk7Ci0gIG1vb2YudHJhY2tzWzBdLnJ1bnMucmVzaXplKDEpOwotICBtb29mLnRyYWNrc1sxXS5ydW5zLnJlc2l6ZSgxKTsKLSAgbW9vZi50cmFja3NbMF0ucnVuc1swXS5zYW1wbGVfY291bnQgPSA2OwotICBtb29mLnRyYWNrc1sxXS5ydW5zWzBdLnNhbXBsZV9jb3VudCA9IDY7Ci0gIFNldEZsYWdzT25TYW1wbGVzKCJVUyBVTiBPUyBPTiBOUyBOTiIsICZtb29mLnRyYWNrc1swXS5ydW5zWzBdKTsKLSAgU2V0RmxhZ3NPblNhbXBsZXMoIlVTIFVOIE9TIE9OIE5TIE5OIiwgJm1vb2YudHJhY2tzWzFdLnJ1bnNbMF0pOwotICBpdGVyXy5yZXNldChuZXcgVHJhY2tSdW5JdGVyYXRvcigmbW9vdl8sIG1lZGlhX2xvZ18pKTsKLQotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0gIEVYUEVDVF9UUlVFKGl0ZXJfLT5Jc1J1blZhbGlkKCkpOwotCi0gIC8vIEtleWZyYW1lcyBzaG91bGQgYmUgbWFya2VkIGFjY29yZGluZyB0byBkb3duc3RyZWFtJ3MgZXhwZWN0YXRpb25zIHRoYXQKLSAgLy8ga2V5ZnJhbWVzIHNlcnZlIGFzIHBvaW50cyBvZiByYW5kb20gYWNjZXNzIGZvciBzZWVraW5nLgotCi0gIC8vIEZvciBhdWRpbywgYW55IHN5bmMgc2FtcGxlIHNob3VsZCBiZSBtYXJrZWQgYXMgYSBrZXkgZnJhbWUuIFdoZXRoZXIgYQotICAvLyBzYW1wbGUgImRlcGVuZHMgb24iIG90aGVyIHNhbXBsZXMgaXMgbm90IGNvbnNpZGVyZWQuIFVubGlrZSB2aWRlbyBzYW1wbGVzLAotICAvLyBhdWRpbyBzYW1wbGVzIGFyZSBvZnRlbiBtYXJrZWQgYXMgZGVwZW5kaW5nIG9uIG90aGVyIHNhbXBsZXMgYnV0IGFyZSBzdGlsbAotICAvLyB3b3JrYWJsZSBmb3IgcmFuZG9tIGFjY2Vzcy4gV2hpbGUgd2UgYWxsb3cgZm9yIHBhcnNpbmcgb2YgYXVkaW8gc2FtcGxlcwotICAvLyB0aGF0IGFyZSBub24tc3luYyBzYW1wbGVzLCB3ZSBnZW5lcmFsbHkgZXhwZWN0IGFsbCBhdWRpbyBzYW1wbGVzIHRvIGJlIHN5bmMKLSAgLy8gc2FtcGxlcyBhbmQgZG93bnN0cmVhbSB3aWxsIGxvZyBhbmQgZGlzY2FyZCBhbnkgbm9uLXN5bmMgYXVkaW8gc2FtcGxlcy4KLSAgRVhQRUNUX0VRKCIxIEsgUCBLIFAgSyBQIiwgS2V5ZnJhbWVBbmRSQVBJbmZvKGl0ZXJfLmdldCgpKSk7Ci0KLSAgaXRlcl8tPkFkdmFuY2VSdW4oKTsKLQotICAvLyBGb3IgdmlkZW8sIGFueSBrZXkgZnJhbWUgc2hvdWxkIGJlIGJvdGggYSBzeW5jIHNhbXBsZSBhbmQgaGF2ZSBubyBrbm93bgotICAvLyBkZXBlbmRlbnRzLiBJZGVhbGx5LCBhIHZpZGVvIHN5bmMgc2FtcGxlIHNob3VsZCBhbHdheXMgYmUgbWFya2VkIGFzIGhhdmluZwotICAvLyBubyBkZXBlbmRlbnRzLCBidXQgd2Ugb2NjYXNpb25hbGx5IGVuY291bnRlciBtZWRpYSB3aGVyZSBhbGwgc2FtcGxlcyBhcmUKLSAgLy8gbWFya2VkICJzeW5jIiBhbmQgd2UgbXVzdCByZWx5IG9uIGNvbWJpbmluZyB0aGUgdHdvIGZsYWdzIHRvIHBpY2sgb3V0IHRoZQotICAvLyB0cnVlIGtleSBmcmFtZXMuIFNlZSBodHRwOi8vY3JidWcuY29tLzMxMDcxMiBhbmQgaHR0cDovL2NyYnVnLmNvbS81MDc5MTYuCi0gIC8vIFJlbGlhYmx5IGtub3dpbmcgdGhlIGtleWZyYW1lcyBmb3IgdmlkZW8gaXMgYWxzbyBjcml0aWNhbCB0byBTUFMgUFBTCi0gIC8vIGluc2VydGlvbi4KLSAgRVhQRUNUX0VRKCIyIEsgUCBQIFAgSyBQIiwgS2V5ZnJhbWVBbmRSQVBJbmZvKGl0ZXJfLmdldCgpKSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgRGVjcnlwdENvbmZpZ1Rlc3RXaXRoQ29uc3RhbnRJdk5vQXV4SW5mbykgewotICBBZGRFbmNyeXB0aW9uQ2JjcygmbW9vdl8udHJhY2tzWzFdKTsKLSAgaXRlcl8ucmVzZXQobmV3IFRyYWNrUnVuSXRlcmF0b3IoJm1vb3ZfLCBtZWRpYV9sb2dfKSk7Ci0KLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLQotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0KLSAgLy8gVGhlIHJ1biBmb3IgdHJhY2sgMiB3aWxsIGJlIHRoZSBzZWNvbmQuCi0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+dHJhY2tfaWQoKSwgMnUpOwotICBFWFBFQ1RfVFJVRShpdGVyXy0+aXNfZW5jcnlwdGVkKCkpOwotICBBU1NFUlRfRkFMU0UoaXRlcl8tPkF1eEluZm9OZWVkc1RvQmVDYWNoZWQoKSk7Ci0gIEVYUEVDVF9FUShpdGVyXy0+c2FtcGxlX29mZnNldCgpLCAyMDApOwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gY29uZmlnID0gaXRlcl8tPkdldERlY3J5cHRDb25maWcoKTsKLSAgRVhQRUNUX0VRKAotICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oa0tleUlkKSwgYXJyYXlzaXplKGtLZXlJZCkpLAotICAgICAgY29uZmlnLT5rZXlfaWQoKSk7Ci0gIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihrSXYzKSwgYXJyYXlzaXplKGtJdjMpKSwKLSAgICAgICAgICAgIGNvbmZpZy0+aXYoKSk7Ci0gIEVYUEVDVF9UUlVFKGNvbmZpZy0+c3Vic2FtcGxlcygpLmVtcHR5KCkpOwotICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICBjb25maWcgPSBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpOwotICBFWFBFQ1RfRVEoCi0gICAgICBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihrS2V5SWQpLCBhcnJheXNpemUoa0tleUlkKSksCi0gICAgICBjb25maWctPmtleV9pZCgpKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGtJdjMpLCBhcnJheXNpemUoa0l2MykpLAotICAgICAgICAgICAgY29uZmlnLT5pdigpKTsKLSAgRVhQRUNUX1RSVUUoY29uZmlnLT5zdWJzYW1wbGVzKCkuZW1wdHkoKSk7Ci19Ci0KLVRFU1RfRihUcmFja1J1bkl0ZXJhdG9yVGVzdCwgRGVjcnlwdENvbmZpZ1Rlc3RXaXRoU2FtcGxlR3JvdXBzQW5kQ29uc3RhbnRJdikgewotICAvLyBBZGQgVHJhY2tFbmNyeXB0aW9uIEJveC4KLSAgQWRkRW5jcnlwdGlvbkNiY3MoJm1vb3ZfLnRyYWNrc1sxXSk7Ci0KLSAgTW92aWVGcmFnbWVudCBtb29mID0gQ3JlYXRlRnJhZ21lbnQoKTsKLSAgQWRkU2FtcGxlRW5jcnlwdGlvbkNiY3MoJm1vb2YudHJhY2tzWzFdKTsKLQotICBjb25zdCBTYW1wbGVUb0dyb3VwRW50cnkga1NhbXBsZVRvR3JvdXBUYWJsZVtdID0gewotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSAybmQgZW50cnkgaW4gZnJhZ21lbnQgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbiBCb3guCi0gICAgICB7MSwgU2FtcGxlVG9Hcm91cEVudHJ5OjprRnJhZ21lbnRHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlICsgMn0sCi0gICAgICAvLyBBc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbiBUcmFja0VuY3J5cHRpb24gQm94LgotICAgICAgezEsIDB9LAotICAgICAgLy8gQXNzb2NpYXRlZCB3aXRoIHRoZSAxc3QgZW50cnkgaW4gZnJhZ21lbnQgU2FtcGxlR3JvdXBEZXNjcmlwdGlvbiBCb3guCi0gICAgICB7MSwgU2FtcGxlVG9Hcm91cEVudHJ5OjprRnJhZ21lbnRHcm91cERlc2NyaXB0aW9uSW5kZXhCYXNlICsgMX0sCi0gICAgICAvLyBBc3NvY2lhdGVkIHdpdGggdGhlIDFzdCBlbnRyeSBpbiB0cmFjayBTYW1wbGVHcm91cERlc2NyaXB0aW9uIEJveC4KLSAgICAgIHsxLCAxfX07Ci0gIEFkZENlbmNTYW1wbGVHcm91cCgmbW9vdl8udHJhY2tzWzFdLCAmbW9vZi50cmFja3NbMV0sIGtTYW1wbGVUb0dyb3VwVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICBhcnJheXNpemUoa1NhbXBsZVRvR3JvdXBUYWJsZSkpOwotICBBZGRDb25zdGFudEl2c1RvQ2VuY1NhbXBsZUdyb3VwKCZtb292Xy50cmFja3NbMV0sICZtb29mLnRyYWNrc1sxXSk7Ci0gIGl0ZXJfLnJlc2V0KG5ldyBUcmFja1J1bkl0ZXJhdG9yKCZtb292XywgbWVkaWFfbG9nXykpOwotICBBU1NFUlRfVFJVRShpdGVyXy0+SW5pdChtb29mKSk7Ci0KLSAgLy8gVGhlIHJ1biBmb3IgdHJhY2sgMiB3aWxsIGJlIHRoZSBzZWNvbmQuCi0gIGl0ZXJfLT5BZHZhbmNlUnVuKCk7Ci0KLSAgc3RkOjpzdHJpbmcgdHJhY2tfZW5jcnlwdGlvbl9pdihrSXYzLCBrSXYzICsgYXJyYXlzaXplKGtJdjMpKTsKLSAgc3RkOjpzdHJpbmcgdHJhY2tfY2VuY19zYW1wbGVfZ3JvdXBfaXYoa0l2NCwga0l2NCArIGFycmF5c2l6ZShrSXY0KSk7Ci0gIHN0ZDo6c3RyaW5nIGZyYWdtZW50X2NlbmNfc2FtcGxlX2dyb3VwX2l2KGtJdjUsIGtJdjUgKyBhcnJheXNpemUoa0l2NSkpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga1NhbXBsZVRvR3JvdXBUYWJsZVswXS5zYW1wbGVfY291bnQ7ICsraSkgewotICAgIEVYUEVDVF9UUlVFKGl0ZXJfLT5pc19lbmNyeXB0ZWQoKSk7Ci0gICAgRVhQRUNUX0VRKGZyYWdtZW50X2NlbmNfc2FtcGxlX2dyb3VwX2l2LCBpdGVyXy0+R2V0RGVjcnlwdENvbmZpZygpLT5pdigpKTsKLSAgICBpdGVyXy0+QWR2YW5jZVNhbXBsZSgpOwotICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrU2FtcGxlVG9Hcm91cFRhYmxlWzFdLnNhbXBsZV9jb3VudDsgKytpKSB7Ci0gICAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgICBFWFBFQ1RfRVEodHJhY2tfZW5jcnlwdGlvbl9pdiwgaXRlcl8tPkdldERlY3J5cHRDb25maWcoKS0+aXYoKSk7Ci0gICAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgfQotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga1NhbXBsZVRvR3JvdXBUYWJsZVsyXS5zYW1wbGVfY291bnQ7ICsraSkgewotICAgIEVYUEVDVF9GQUxTRShpdGVyXy0+aXNfZW5jcnlwdGVkKCkpOwotICAgIGl0ZXJfLT5BZHZhbmNlU2FtcGxlKCk7Ci0gIH0KLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtTYW1wbGVUb0dyb3VwVGFibGVbM10uc2FtcGxlX2NvdW50OyArK2kpIHsKLSAgICBFWFBFQ1RfVFJVRShpdGVyXy0+aXNfZW5jcnlwdGVkKCkpOwotICAgIEVYUEVDVF9FUSh0cmFja19jZW5jX3NhbXBsZV9ncm91cF9pdiwgaXRlcl8tPkdldERlY3J5cHRDb25maWcoKS0+aXYoKSk7Ci0gICAgaXRlcl8tPkFkdmFuY2VTYW1wbGUoKTsKLSAgfQotCi0gIC8vIFRoZSByZW1haW5pbmcgc2FtcGxlcyBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcwotICAvLyBzcGVjaWZpZWQgaW4gVHJhY2tFbmNyeXB0aW9uIEJveC4KLSAgRVhQRUNUX1RSVUUoaXRlcl8tPmlzX2VuY3J5cHRlZCgpKTsKLSAgRVhQRUNUX0VRKHRyYWNrX2VuY3J5cHRpb25faXYsIGl0ZXJfLT5HZXREZWNyeXB0Q29uZmlnKCktPml2KCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbXA0Ci19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfY29uc3RhbnRzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjRkYTIxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfY29uc3RhbnRzLmgiCi0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBUaGUgZm9sbG93aW5nIGNvbnZlcnNpb24gdGFibGUgaXMgZXh0cmFjdGVkIGZyb20gSVNPIDE0NDk2IFBhcnQgMyAtCi0vLyBUYWJsZSAxLjE2IC0gU2FtcGxpbmcgRnJlcXVlbmN5IEluZGV4LgotY29uc3QgaW50IGtBRFRTRnJlcXVlbmN5VGFibGVbXSA9IHs5NjAwMCwgODgyMDAsIDY0MDAwLCA0ODAwMCwgNDQxMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyMDAwLCAyNDAwMCwgMjIwNTAsIDE2MDAwLCAxMjAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEwMjUsIDgwMDAsICA3MzUwfTsKLWNvbnN0IHNpemVfdCBrQURUU0ZyZXF1ZW5jeVRhYmxlU2l6ZSA9IGFycmF5c2l6ZShrQURUU0ZyZXF1ZW5jeVRhYmxlKTsKLQotLy8gVGhlIGZvbGxvd2luZyBjb252ZXJzaW9uIHRhYmxlIGlzIGV4dHJhY3RlZCBmcm9tIElTTyAxNDQ5NiBQYXJ0IDMgLQotLy8gVGFibGUgMS4xNyAtIENoYW5uZWwgQ29uZmlndXJhdGlvbi4KLWNvbnN0IG1lZGlhOjpDaGFubmVsTGF5b3V0IGtBRFRTQ2hhbm5lbExheW91dFRhYmxlW10gPSB7Ci0gICAgbWVkaWE6OkNIQU5ORUxfTEFZT1VUX05PTkUsICAgICBtZWRpYTo6Q0hBTk5FTF9MQVlPVVRfTU9OTywKLSAgICBtZWRpYTo6Q0hBTk5FTF9MQVlPVVRfU1RFUkVPLCAgIG1lZGlhOjpDSEFOTkVMX0xBWU9VVF9TVVJST1VORCwKLSAgICBtZWRpYTo6Q0hBTk5FTF9MQVlPVVRfNF8wLCAgICAgIG1lZGlhOjpDSEFOTkVMX0xBWU9VVF81XzBfQkFDSywKLSAgICBtZWRpYTo6Q0hBTk5FTF9MQVlPVVRfNV8xX0JBQ0ssIG1lZGlhOjpDSEFOTkVMX0xBWU9VVF83XzF9OwotY29uc3Qgc2l6ZV90IGtBRFRTQ2hhbm5lbExheW91dFRhYmxlU2l6ZSA9IGFycmF5c2l6ZShrQURUU0NoYW5uZWxMYXlvdXRUYWJsZSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjAyYzI1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19NUEVHX0FEVFNfQ09OU1RBTlRTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QRUdfQURUU19DT05TVEFOVFNfSF8KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotZW51bSB7Ci0gIGtBRFRTSGVhZGVyTWluU2l6ZSA9IDcsCi0gIGtTYW1wbGVzUGVyQUFDRnJhbWUgPSAxMDI0LAotfTsKLQotTUVESUFfRVhQT1JUIGV4dGVybiBjb25zdCBpbnQga0FEVFNGcmVxdWVuY3lUYWJsZVtdOwotTUVESUFfRVhQT1JUIGV4dGVybiBjb25zdCBzaXplX3Qga0FEVFNGcmVxdWVuY3lUYWJsZVNpemU7Ci0KLU1FRElBX0VYUE9SVCBleHRlcm4gY29uc3QgbWVkaWE6OkNoYW5uZWxMYXlvdXQga0FEVFNDaGFubmVsTGF5b3V0VGFibGVbXTsKLU1FRElBX0VYUE9SVCBleHRlcm4gY29uc3Qgc2l6ZV90IGtBRFRTQ2hhbm5lbExheW91dFRhYmxlU2l6ZTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVBFR19BRFRTX0NPTlNUQU5UU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxM2YyZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2FhYy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qga0FEVFNTdGFydENvZGVNYXNrID0gMHhmZmYwMDAwMDsKLQotQURUU1N0cmVhbVBhcnNlcjo6QURUU1N0cmVhbVBhcnNlcihEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IpCi0gICAgOiBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlKGJ1ZmZlcl9hbGxvY2F0b3IsIGtBRFRTU3RhcnRDb2RlTWFzaywga0NvZGVjQUFDLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSB7fQotCi1BRFRTU3RyZWFtUGFyc2VyOjp+QURUU1N0cmVhbVBhcnNlcigpIHt9Ci0KLWludCBBRFRTU3RyZWFtUGFyc2VyOjpQYXJzZUZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmcmFtZV9zaXplLCBpbnQqIHNhbXBsZV9yYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbExheW91dCogY2hhbm5lbF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNhbXBsZV9jb3VudCwgYm9vbCogbWV0YWRhdGFfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogZXh0cmFfZGF0YSkgY29uc3QgewotICBEQ0hFQ0soZGF0YSk7Ci0gIERDSEVDS19HRShzaXplLCAwKTsKLQotICBpZiAoc2l6ZSA8IGtBRFRTSGVhZGVyTWluU2l6ZSkgcmV0dXJuIDA7Ci0KLSAgQml0UmVhZGVyIHJlYWRlcihkYXRhLCBzaXplKTsKLSAgaW50IHN5bmM7Ci0gIGludCB2ZXJzaW9uOwotICBpbnQgbGF5ZXI7Ci0gIGludCBwcm90ZWN0aW9uX2Fic2VudDsKLSAgaW50IHByb2ZpbGU7Ci0gIHNpemVfdCBzYW1wbGVfcmF0ZV9pbmRleDsKLSAgc2l6ZV90IGNoYW5uZWxfbGF5b3V0X2luZGV4OwotICBpbnQgZnJhbWVfbGVuZ3RoOwotICBzaXplX3QgbnVtX2RhdGFfYmxvY2tzOwotICBpbnQgdW51c2VkOwotCi0gIGlmICghcmVhZGVyLlJlYWRCaXRzKDEyLCAmc3luYykgfHwgIXJlYWRlci5SZWFkQml0cygxLCAmdmVyc2lvbikgfHwKLSAgICAgICFyZWFkZXIuUmVhZEJpdHMoMiwgJmxheWVyKSB8fCAhcmVhZGVyLlJlYWRCaXRzKDEsICZwcm90ZWN0aW9uX2Fic2VudCkgfHwKLSAgICAgICFyZWFkZXIuUmVhZEJpdHMoMiwgJnByb2ZpbGUpIHx8Ci0gICAgICAhcmVhZGVyLlJlYWRCaXRzKDQsICZzYW1wbGVfcmF0ZV9pbmRleCkgfHwgIXJlYWRlci5SZWFkQml0cygxLCAmdW51c2VkKSB8fAotICAgICAgIXJlYWRlci5SZWFkQml0cygzLCAmY2hhbm5lbF9sYXlvdXRfaW5kZXgpIHx8Ci0gICAgICAhcmVhZGVyLlJlYWRCaXRzKDQsICZ1bnVzZWQpIHx8ICFyZWFkZXIuUmVhZEJpdHMoMTMsICZmcmFtZV9sZW5ndGgpIHx8Ci0gICAgICAhcmVhZGVyLlJlYWRCaXRzKDExLCAmdW51c2VkKSB8fCAhcmVhZGVyLlJlYWRCaXRzKDIsICZudW1fZGF0YV9ibG9ja3MpIHx8Ci0gICAgICAoIXByb3RlY3Rpb25fYWJzZW50ICYmICFyZWFkZXIuUmVhZEJpdHMoMTYsICZ1bnVzZWQpKSkgewotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIERWTE9HKDIpIDw8ICJIZWFkZXIgZGF0YSA6IiA8PCBzdGQ6OmhleCA8PCAiIHN5bmMgMHgiIDw8IHN5bmMgPDwgIiB2ZXJzaW9uIDB4IgotICAgICAgICAgICA8PCB2ZXJzaW9uIDw8ICIgbGF5ZXIgMHgiIDw8IGxheWVyIDw8ICIgcHJvZmlsZSAweCIgPDwgcHJvZmlsZQotICAgICAgICAgICA8PCAiIHNhbXBsZV9yYXRlX2luZGV4IDB4IiA8PCBzYW1wbGVfcmF0ZV9pbmRleAotICAgICAgICAgICA8PCAiIGNoYW5uZWxfbGF5b3V0X2luZGV4IDB4IiA8PCBjaGFubmVsX2xheW91dF9pbmRleDsKLQotICBjb25zdCBpbnQgYnl0ZXNfcmVhZCA9IHJlYWRlci5iaXRzX3JlYWQoKSAvIDg7Ci0gIGlmIChzeW5jICE9IDB4ZmZmIHx8IGxheWVyICE9IDAgfHwgZnJhbWVfbGVuZ3RoIDwgYnl0ZXNfcmVhZCB8fAotICAgICAgc2FtcGxlX3JhdGVfaW5kZXggPj0ga0FEVFNGcmVxdWVuY3lUYWJsZVNpemUgfHwKLSAgICAgIGNoYW5uZWxfbGF5b3V0X2luZGV4ID49IGtBRFRTQ2hhbm5lbExheW91dFRhYmxlU2l6ZSkgewotICAgIGlmIChtZWRpYV9sb2coKSkgewotICAgICAgTUVESUFfTE9HKERFQlVHLCBtZWRpYV9sb2coKSkKLSAgICAgICAgICA8PCAiSW52YWxpZCBoZWFkZXIgZGF0YSA6IiA8PCBzdGQ6OmhleCA8PCAiIHN5bmMgMHgiIDw8IHN5bmMKLSAgICAgICAgICA8PCAiIHZlcnNpb24gMHgiIDw8IHZlcnNpb24gPDwgIiBsYXllciAweCIgPDwgbGF5ZXIKLSAgICAgICAgICA8PCAiIHNhbXBsZV9yYXRlX2luZGV4IDB4IiA8PCBzYW1wbGVfcmF0ZV9pbmRleAotICAgICAgICAgIDw8ICIgY2hhbm5lbF9sYXlvdXRfaW5kZXggMHgiIDw8IGNoYW5uZWxfbGF5b3V0X2luZGV4OwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZiAoc2FtcGxlX3JhdGUpICpzYW1wbGVfcmF0ZSA9IGtBRFRTRnJlcXVlbmN5VGFibGVbc2FtcGxlX3JhdGVfaW5kZXhdOwotCi0gIGlmIChmcmFtZV9zaXplKSAqZnJhbWVfc2l6ZSA9IGZyYW1lX2xlbmd0aDsKLQotICBpZiAoc2FtcGxlX2NvdW50KSAqc2FtcGxlX2NvdW50ID0gKG51bV9kYXRhX2Jsb2NrcyArIDEpICoga1NhbXBsZXNQZXJBQUNGcmFtZTsKLQotICBpZiAoY2hhbm5lbF9sYXlvdXQpCi0gICAgKmNoYW5uZWxfbGF5b3V0ID0ga0FEVFNDaGFubmVsTGF5b3V0VGFibGVbY2hhbm5lbF9sYXlvdXRfaW5kZXhdOwotCi0gIGlmIChtZXRhZGF0YV9mcmFtZSkgKm1ldGFkYXRhX2ZyYW1lID0gZmFsc2U7Ci0KLSAgaWYgKGV4dHJhX2RhdGEpIHsKLSAgICAvLyBTZWUgbXA0OjpBQUM6OlBhcnNlKCkgZm9yIGRldGFpbHMuIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgd3JpdGluZwotICAgIC8vIGV4dGVuc2lvbnMgc2luY2Ugd2UgY2FuJ3QgaGF2ZSBleHRlbmRlZCBBRFRTIGJ5IHRoaXMgcG9pbnQgKGl0J3MKLSAgICAvLyBleHBsaWNpdGx5IHJlamVjdGVkIGFzIGludmFsaWQgYWJvdmUpLgotICAgIERDSEVDS19ORShzYW1wbGVfcmF0ZV9pbmRleCwgMTV1KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cml0dGVuIGFjY29yZGluZyB0byBJU08gMTQ0OTYgUGFydCAzIFRhYmxlIDEuMTMgLQotICAgIC8vIFN5bnRheCBvZiBBdWRpb1NwZWNpZmljQ29uZmlnLgotICAgIGNvbnN0IHVpbnQxNl90IGVzZHMgPSAoKCgoKHByb2ZpbGUgKyAxKSA8PCA0KSArIHNhbXBsZV9yYXRlX2luZGV4KSA8PCA0KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX2xheW91dF9pbmRleCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgMzsKLSAgICBleHRyYV9kYXRhLT5wdXNoX2JhY2soZXNkcyA+PiA4KTsKLSAgICBleHRyYV9kYXRhLT5wdXNoX2JhY2soZXNkcyAmIDB4RkYpOwotICAgIGlmIChtZWRpYV9sb2coKSkgRENIRUNLKG1wNDo6QUFDKCkuUGFyc2UoKmV4dHJhX2RhdGEsIG1lZGlhX2xvZygpKSk7Ci0gIH0KLQotICByZXR1cm4gYnl0ZXNfcmVhZDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E3NDFhZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX01QRUdfQURUU19TVFJFQU1fUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QRUdfQURUU19TVFJFQU1fUEFSU0VSX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNRURJQV9FWFBPUlQgQURUU1N0cmVhbVBhcnNlciA6IHB1YmxpYyBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFEVFNTdHJlYW1QYXJzZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yKTsKLSAgfkFEVFNTdHJlYW1QYXJzZXIoKSBvdmVycmlkZTsKLQotICAvLyBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlIG92ZXJyaWRlcy4KLSAgaW50IFBhcnNlRnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUsIGludCogZnJhbWVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzYW1wbGVfcmF0ZSwgQ2hhbm5lbExheW91dCogY2hhbm5lbF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCogc2FtcGxlX2NvdW50LCBib29sKiBtZXRhZGF0YV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIGV4dHJhX2RhdGEpIGNvbnN0IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEFEVFNTdHJlYW1QYXJzZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfTVBFR19BRFRTX1NUUkVBTV9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvYWR0c19zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOWRlYzIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL2FkdHNfc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3B0cl91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvY29tbW9uL3N0cmVhbV9wYXJzZXJfdGVzdF9iYXNlLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQURUU1N0cmVhbVBhcnNlclRlc3QgOiBwdWJsaWMgU3RyZWFtUGFyc2VyVGVzdEJhc2UsIHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIEFEVFNTdHJlYW1QYXJzZXJUZXN0KCkKLSAgICAgIDogU3RyZWFtUGFyc2VyVGVzdEJhc2UoYmFzZTo6TWFrZVVuaXF1ZTxBRFRTU3RyZWFtUGFyc2VyPigpKSB7fQotfTsKLQotLy8gVGVzdCBwYXJzaW5nIHdpdGggc21hbGwgcHJpbWUgc2l6ZWQgY2h1bmtzIHRvIHNtb2tlIG91dCAicG93ZXIgb2YKLS8vIDIiIGZpZWxkIHNpemUgYXNzdW1wdGlvbnMuCi1URVNUX0YoQURUU1N0cmVhbVBhcnNlclRlc3QsIFVuYWxpZ25lZEFwcGVuZCkgewotICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAiTmV3U2VnbWVudCIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJFbmRPZlNlZ21lbnQiCi0gICAgICAiTmV3U2VnbWVudCIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgIkVuZE9mU2VnbWVudCI7Ci0gIEVYUEVDVF9FUShleHBlY3RlZCwgUGFyc2VGaWxlKCJzZnguYWR0cyIsIDE3KSk7Ci19Ci0KLS8vIFRlc3QgcGFyc2luZyB3aXRoIGEgbGFyZ2VyIHBpZWNlIHNpemUgdG8gdmVyaWZ5IHRoYXQgbXVsdGlwbGUgYnVmZmVycwotLy8gYXJlIHBhc3NlZCB0byB8bmV3X2J1ZmZlcl9jYl98LgotVEVTVF9GKEFEVFNTdHJlYW1QYXJzZXJUZXN0LCBVbmFsaWduZWRBcHBlbmQ1MTIpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgIk5ld1NlZ21lbnQiCi0gICAgICAieyAwSyAyM0sgNDZLIH0iCi0gICAgICAieyAwSyAyM0sgNDZLIDY5SyA5MksgfSIKLSAgICAgICJ7IDBLIDIzSyA0NksgNjlLIDkySyB9IgotICAgICAgIkVuZE9mU2VnbWVudCIKLSAgICAgICJOZXdTZWdtZW50IgotICAgICAgInsgMEsgfSIKLSAgICAgICJFbmRPZlNlZ21lbnQiOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIFBhcnNlRmlsZSgic2Z4LmFkdHMiLCA1MTIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWcxX2F1ZGlvX3N0cmVhbV9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWcxX2F1ZGlvX3N0cmVhbV9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzJiMTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNUEVHMVN0YXJ0Q29kZU1hc2sgPSAweGZmZTAwMDAwOwotCi0vLyBNYXAgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIGJpdHJhdGVfaW5kZXggJiBjaGFubmVsX21vZGUgY29tYmluYXRpb25zCi0vLyBhcmUgYWxsb3dlZC4KLS8vIERlcml2ZWQgZnJvbTogaHR0cDovL21wZ2VkaXQub3JnL21wZ2VkaXQvbXBlZ19mb3JtYXQvTVAzRm9ybWF0Lmh0bWwKLXN0YXRpYyBjb25zdCBib29sIGtJc0FsbG93ZWRbMTddWzRdID0gewotICAgIHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfSwgICAgIC8vIGZyZWUKLSAgICB7dHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX0sICAvLyAzMgotICAgIHt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfSwgIC8vIDQ4Ci0gICAge3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2V9LCAgLy8gNTYKLSAgICB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sICAgICAvLyA2NAotICAgIHt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfSwgIC8vIDgwCi0gICAge3RydWUsIHRydWUsIHRydWUsIHRydWV9LCAgICAgLy8gOTYKLSAgICB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sICAgICAvLyAxMTIKLSAgICB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sICAgICAvLyAxMjgKLSAgICB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sICAgICAvLyAxNjAKLSAgICB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX0sICAgICAvLyAxOTIKLSAgICB7ZmFsc2UsIHRydWUsIHRydWUsIHRydWV9LCAgICAvLyAyMjQKLSAgICB7ZmFsc2UsIHRydWUsIHRydWUsIHRydWV9LCAgICAvLyAyNTYKLSAgICB7ZmFsc2UsIHRydWUsIHRydWUsIHRydWV9LCAgICAvLyAzMjAKLSAgICB7ZmFsc2UsIHRydWUsIHRydWUsIHRydWV9LCAgICAvLyAzODQKLSAgICB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9ICAvLyBiYWQKLX07Ci0KLS8vIE1hcHMgdmVyc2lvbiBhbmQgbGF5ZXIgaW5mb3JtYXRpb24gaW4gdGhlIGZyYW1lIGhlYWRlcgotLy8gaW50byBhbiBpbmRleCBmb3IgdGhlIHxrQml0cmF0ZU1hcHwuCi0vLyBEZXJpdmVkIGZyb206IGh0dHA6Ly9tcGdlZGl0Lm9yZy9tcGdlZGl0L21wZWdfZm9ybWF0L01QM0Zvcm1hdC5odG1sCi1zdGF0aWMgY29uc3QgaW50IGtWZXJzaW9uTGF5ZXJNYXBbNF1bNF0gPSB7Ci0gICAgLy8geyByZXNlcnZlZCwgTDMsIEwyLCBMMSB9Ci0gICAgezUsIDQsIDQsIDN9LCAgLy8gTVBFRyAyLjUKLSAgICB7NSwgNSwgNSwgNX0sICAvLyByZXNlcnZlZAotICAgIHs1LCA0LCA0LCAzfSwgIC8vIE1QRUcgMgotICAgIHs1LCAyLCAxLCAwfSAgIC8vIE1QRUcgMQotfTsKLQotLy8gTWFwcyB0aGUgYml0cmF0ZSBpbmRleCBmaWVsZCBpbiB0aGUgaGVhZGVyIGFuZCBhbiBpbmRleAotLy8gZnJvbSB8a1ZlcnNpb25MYXllck1hcHwgdG8gYSBmcmFtZSBiaXRyYXRlLgotLy8gRGVyaXZlZCBmcm9tOiBodHRwOi8vbXBnZWRpdC5vcmcvbXBnZWRpdC9tcGVnX2Zvcm1hdC9NUDNGb3JtYXQuaHRtbAotc3RhdGljIGNvbnN0IGludCBrQml0cmF0ZU1hcFsxNl1bNl0gPSB7Ci0gICAgLy8geyBWMUwxLCBWMUwyLCBWMUwzLCBWMkwxLCBWMkwyICYgVjJMMywgcmVzZXJ2ZWQgfQotICAgIHswLCAwLCAwLCAwLCAwLCAwfSwgICAgICAgICAgIHszMiwgMzIsIDMyLCAzMiwgOCwgMH0sCi0gICAgezY0LCA0OCwgNDAsIDQ4LCAxNiwgMH0sICAgICAgezk2LCA1NiwgNDgsIDU2LCAyNCwgMH0sCi0gICAgezEyOCwgNjQsIDU2LCA2NCwgMzIsIDB9LCAgICAgezE2MCwgODAsIDY0LCA4MCwgNDAsIDB9LAotICAgIHsxOTIsIDk2LCA4MCwgOTYsIDQ4LCAwfSwgICAgIHsyMjQsIDExMiwgOTYsIDExMiwgNTYsIDB9LAotICAgIHsyNTYsIDEyOCwgMTEyLCAxMjgsIDY0LCAwfSwgIHsyODgsIDE2MCwgMTI4LCAxNDQsIDgwLCAwfSwKLSAgICB7MzIwLCAxOTIsIDE2MCwgMTYwLCA5NiwgMH0sICB7MzUyLCAyMjQsIDE5MiwgMTc2LCAxMTIsIDB9LAotICAgIHszODQsIDI1NiwgMjI0LCAxOTIsIDEyOCwgMH0sIHs0MTYsIDMyMCwgMjU2LCAyMjQsIDE0NCwgMH0sCi0gICAgezQ0OCwgMzg0LCAzMjAsIDI1NiwgMTYwLCAwfSwgezAsIDAsIDAsIDAsIDB9fTsKLQotLy8gTWFwcyB0aGUgc2FtcGxlIHJhdGUgaW5kZXggYW5kIHZlcnNpb24gZmllbGRzIGZyb20gdGhlIGZyYW1lIGhlYWRlcgotLy8gdG8gYSBzYW1wbGUgcmF0ZS4KLS8vIERlcml2ZWQgZnJvbTogaHR0cDovL21wZ2VkaXQub3JnL21wZ2VkaXQvbXBlZ19mb3JtYXQvTVAzRm9ybWF0Lmh0bWwKLXN0YXRpYyBjb25zdCBpbnQga1NhbXBsZVJhdGVNYXBbNF1bNF0gPSB7Ci0gICAgLy8geyBWMi41LCByZXNlcnZlZCwgVjIsIFYxIH0KLSAgICB7MTEwMjUsIDAsIDIyMDUwLCA0NDEwMH0sCi0gICAgezEyMDAwLCAwLCAyNDAwMCwgNDgwMDB9LAotICAgIHs4MDAwLCAwLCAxNjAwMCwgMzIwMDB9LAotICAgIHswLCAwLCAwLCAwfX07Ci0KLS8vIE9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBlbmQgb2YgdGhlIE1QMyBoZWFkZXIgdG8gIlhpbmciIG9yICJJbmZvIiB0YWdzIHdoaWNoCi0vLyBpbmRpY2F0ZSBhIGZyYW1lIGlzIHNpbGVudCBtZXRhZGF0YSBmcmFtZS4gIFZhbHVlcyB0YWtlbiBmcm9tIEZGbXBlZy4KLXN0YXRpYyBjb25zdCBpbnQga1hpbmdIZWFkZXJNYXBbMl1bMl0gPSB7ezMyLCAxN30sIHsxNywgOX19OwotCi0vLyBGcmFtZSBoZWFkZXIgZmllbGQgY29uc3RhbnRzLgotc3RhdGljIGNvbnN0IGludCBrQml0cmF0ZUZyZWUgPSAwOwotc3RhdGljIGNvbnN0IGludCBrQml0cmF0ZUJhZCA9IDB4ZjsKLXN0YXRpYyBjb25zdCBpbnQga1NhbXBsZVJhdGVSZXNlcnZlZCA9IDM7Ci1zdGF0aWMgY29uc3QgaW50IGtDb2RlY0RlbGF5ID0gNTI5OwotCi0vLyBzdGF0aWMKLWJvb2wgTVBFRzFBdWRpb1N0cmVhbVBhcnNlcjo6UGFyc2VIZWFkZXIoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZywgY29uc3QgdWludDhfdCogZGF0YSwKLSAgICBIZWFkZXIqIGhlYWRlcikgewotICBCaXRSZWFkZXIgcmVhZGVyKGRhdGEsIGtIZWFkZXJTaXplKTsKLSAgaW50IHN5bmM7Ci0gIGludCB2ZXJzaW9uOwotICBpbnQgbGF5ZXI7Ci0gIGludCBpc19wcm90ZWN0ZWQ7Ci0gIGludCBiaXRyYXRlX2luZGV4OwotICBpbnQgc2FtcGxlX3JhdGVfaW5kZXg7Ci0gIGludCBoYXNfcGFkZGluZzsKLSAgaW50IGlzX3ByaXZhdGU7Ci0gIGludCBjaGFubmVsX21vZGU7Ci0gIGludCBvdGhlcl9mbGFnczsKLQotICBpZiAoIXJlYWRlci5SZWFkQml0cygxMSwgJnN5bmMpIHx8ICFyZWFkZXIuUmVhZEJpdHMoMiwgJnZlcnNpb24pIHx8Ci0gICAgICAhcmVhZGVyLlJlYWRCaXRzKDIsICZsYXllcikgfHwgIXJlYWRlci5SZWFkQml0cygxLCAmaXNfcHJvdGVjdGVkKSB8fAotICAgICAgIXJlYWRlci5SZWFkQml0cyg0LCAmYml0cmF0ZV9pbmRleCkgfHwKLSAgICAgICFyZWFkZXIuUmVhZEJpdHMoMiwgJnNhbXBsZV9yYXRlX2luZGV4KSB8fAotICAgICAgIXJlYWRlci5SZWFkQml0cygxLCAmaGFzX3BhZGRpbmcpIHx8ICFyZWFkZXIuUmVhZEJpdHMoMSwgJmlzX3ByaXZhdGUpIHx8Ci0gICAgICAhcmVhZGVyLlJlYWRCaXRzKDIsICZjaGFubmVsX21vZGUpIHx8ICFyZWFkZXIuUmVhZEJpdHMoNiwgJm90aGVyX2ZsYWdzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIERWTE9HKDIpIDw8ICJIZWFkZXIgZGF0YSA6IiA8PCBzdGQ6OmhleCA8PCAiIHN5bmMgMHgiIDw8IHN5bmMgPDwgIiB2ZXJzaW9uIDB4IgotICAgICAgICAgICA8PCB2ZXJzaW9uIDw8ICIgbGF5ZXIgMHgiIDw8IGxheWVyIDw8ICIgYml0cmF0ZV9pbmRleCAweCIKLSAgICAgICAgICAgPDwgYml0cmF0ZV9pbmRleCA8PCAiIHNhbXBsZV9yYXRlX2luZGV4IDB4IiA8PCBzYW1wbGVfcmF0ZV9pbmRleAotICAgICAgICAgICA8PCAiIGNoYW5uZWxfbW9kZSAweCIgPDwgY2hhbm5lbF9tb2RlOwotCi0gIGlmIChzeW5jICE9IDB4N2ZmIHx8IHZlcnNpb24gPT0ga1ZlcnNpb25SZXNlcnZlZCB8fCBsYXllciA9PSBrTGF5ZXJSZXNlcnZlZCB8fAotICAgICAgYml0cmF0ZV9pbmRleCA9PSBrQml0cmF0ZUZyZWUgfHwgYml0cmF0ZV9pbmRleCA9PSBrQml0cmF0ZUJhZCB8fAotICAgICAgc2FtcGxlX3JhdGVfaW5kZXggPT0ga1NhbXBsZVJhdGVSZXNlcnZlZCkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nKQotICAgICAgICA8PCAiSW52YWxpZCBoZWFkZXIgZGF0YSA6IiA8PCBzdGQ6OmhleCA8PCAiIHN5bmMgMHgiIDw8IHN5bmMKLSAgICAgICAgPDwgIiB2ZXJzaW9uIDB4IiA8PCB2ZXJzaW9uIDw8ICIgbGF5ZXIgMHgiIDw8IGxheWVyCi0gICAgICAgIDw8ICIgYml0cmF0ZV9pbmRleCAweCIgPDwgYml0cmF0ZV9pbmRleCA8PCAiIHNhbXBsZV9yYXRlX2luZGV4IDB4IgotICAgICAgICA8PCBzYW1wbGVfcmF0ZV9pbmRleCA8PCAiIGNoYW5uZWxfbW9kZSAweCIgPDwgY2hhbm5lbF9tb2RlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGlmIChsYXllciA9PSBrTGF5ZXIyICYmIGtJc0FsbG93ZWRbYml0cmF0ZV9pbmRleF1bY2hhbm5lbF9tb2RlXSkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nKQotICAgICAgICA8PCAiSW52YWxpZCAoYml0cmF0ZV9pbmRleCwgY2hhbm5lbF9tb2RlKSIKLSAgICAgICAgPDwgIiBjb21iaW5hdGlvbiA6IiA8PCBzdGQ6OmhleCA8PCAiIGJpdHJhdGVfaW5kZXggIiA8PCBiaXRyYXRlX2luZGV4Ci0gICAgICAgIDw8ICIgY2hhbm5lbF9tb2RlICIgPDwgY2hhbm5lbF9tb2RlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGludCBiaXRyYXRlID0ga0JpdHJhdGVNYXBbYml0cmF0ZV9pbmRleF1ba1ZlcnNpb25MYXllck1hcFt2ZXJzaW9uXVtsYXllcl1dOwotCi0gIGlmIChiaXRyYXRlID09IDApIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZykKLSAgICAgICAgPDwgIkludmFsaWQgYml0cmF0ZSA6IiA8PCBzdGQ6OmhleCA8PCAiIHZlcnNpb24gIiA8PCB2ZXJzaW9uCi0gICAgICAgIDw8ICIgbGF5ZXIgIiA8PCBsYXllciA8PCAiIGJpdHJhdGVfaW5kZXggIiA8PCBiaXRyYXRlX2luZGV4OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIERWTE9HKDIpIDw8ICIgYml0cmF0ZSAiIDw8IGJpdHJhdGU7Ci0KLSAgaW50IGZyYW1lX3NhbXBsZV9yYXRlID0ga1NhbXBsZVJhdGVNYXBbc2FtcGxlX3JhdGVfaW5kZXhdW3ZlcnNpb25dOwotICBpZiAoZnJhbWVfc2FtcGxlX3JhdGUgPT0gMCkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nKQotICAgICAgICA8PCAiSW52YWxpZCBzYW1wbGUgcmF0ZSA6IiA8PCBzdGQ6OmhleCA8PCAiIHZlcnNpb24gIiA8PCB2ZXJzaW9uCi0gICAgICAgIDw8ICIgc2FtcGxlX3JhdGVfaW5kZXggIiA8PCBzYW1wbGVfcmF0ZV9pbmRleDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaGVhZGVyLT5zYW1wbGVfcmF0ZSA9IGZyYW1lX3NhbXBsZV9yYXRlOwotCi0gIC8vIGh0dHA6Ly90ZXNsYWJzLmNvbS9vcGVucGxheWVyL2RvY3MvZG9jcy9zcGVjcy9tcDNfc3RydWN0dXJlMi5wZGYKLSAgLy8gVGFibGUgMi4xLjUKLSAgaW50IHNhbXBsZXNfcGVyX2ZyYW1lOwotICBzd2l0Y2ggKGxheWVyKSB7Ci0gICAgY2FzZSBrTGF5ZXIxOgotICAgICAgc2FtcGxlc19wZXJfZnJhbWUgPSAzODQ7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2Uga0xheWVyMjoKLSAgICAgIHNhbXBsZXNfcGVyX2ZyYW1lID0gMTE1MjsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBrTGF5ZXIzOgotICAgICAgaWYgKHZlcnNpb24gPT0ga1ZlcnNpb24yIHx8IHZlcnNpb24gPT0ga1ZlcnNpb24yXzUpCi0gICAgICAgIHNhbXBsZXNfcGVyX2ZyYW1lID0gNTc2OwotICAgICAgZWxzZQotICAgICAgICBzYW1wbGVzX3Blcl9mcmFtZSA9IDExNTI7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaGVhZGVyLT5zYW1wbGVfY291bnQgPSBzYW1wbGVzX3Blcl9mcmFtZTsKLQotICAvLyBodHRwOi8vdGVzbGFicy5jb20vb3BlbnBsYXllci9kb2NzL2RvY3Mvc3BlY3MvbXAzX3N0cnVjdHVyZTIucGRmCi0gIC8vIFRleHQganVzdCBiZWxvdyBUYWJsZSAyLjEuNS4KLSAgaWYgKGxheWVyID09IGtMYXllcjEpIHsKLSAgICAvLyBUaGlzIGZvcm11bGF0aW9uIGlzIGEgc2xpZ2h0IHZhcmlhdGlvbiBvbiB0aGUgZXF1YXRpb24gYmVsb3csCi0gICAgLy8gYnV0IGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgdHJ1bmNhdGlvbiBjaGFyYWN0ZXJpc3RpY3MgdG8gZGVhbAotICAgIC8vIHdpdGggdGhlIGZhY3QgdGhhdCBMYXllciAxIGhhcyA0IGJ5dGUgInNsb3RzIiBpbnN0ZWFkIG9mIHNpbmdsZQotICAgIC8vIGJ5dGUgb25lcy4KLSAgICBoZWFkZXItPmZyYW1lX3NpemUgPSA0ICogKDEyICogYml0cmF0ZSAqIDEwMDAgLyBmcmFtZV9zYW1wbGVfcmF0ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgaGVhZGVyLT5mcmFtZV9zaXplID0KLSAgICAgICAgKChzYW1wbGVzX3Blcl9mcmFtZSAvIDgpICogYml0cmF0ZSAqIDEwMDApIC8gZnJhbWVfc2FtcGxlX3JhdGU7Ci0gIH0KLQotICBpZiAoaGFzX3BhZGRpbmcpIGhlYWRlci0+ZnJhbWVfc2l6ZSArPSAobGF5ZXIgPT0ga0xheWVyMSkgPyA0IDogMTsKLQotICAvLyBNYXAgU3RlcmVvKDApLCBKb2ludCBTdGVyZW8oMSksIGFuZCBEdWFsIENoYW5uZWwgKDIpIHRvCi0gIC8vIENIQU5ORUxfTEFZT1VUX1NURVJFTyBhbmQgU2luZ2xlIENoYW5uZWwgKDMpIHRvIENIQU5ORUxfTEFZT1VUX01PTk8uCi0gIGhlYWRlci0+Y2hhbm5lbF9sYXlvdXQgPQotICAgICAgKGNoYW5uZWxfbW9kZSA9PSAzKSA/IENIQU5ORUxfTEFZT1VUX01PTk8gOiBDSEFOTkVMX0xBWU9VVF9TVEVSRU87Ci0KLSAgaGVhZGVyLT52ZXJzaW9uID0gc3RhdGljX2Nhc3Q8VmVyc2lvbj4odmVyc2lvbik7Ci0gIGhlYWRlci0+bGF5ZXIgPSBzdGF0aWNfY2FzdDxMYXllcj4obGF5ZXIpOwotICBoZWFkZXItPmNoYW5uZWxfbW9kZSA9IGNoYW5uZWxfbW9kZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLU1QRUcxQXVkaW9TdHJlYW1QYXJzZXI6Ok1QRUcxQXVkaW9TdHJlYW1QYXJzZXIoCi0gICAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yKQotICAgIDogTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZShidWZmZXJfYWxsb2NhdG9yLCBrTVBFRzFTdGFydENvZGVNYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ29kZWNNUDMsIGtDb2RlY0RlbGF5KSB7fQotCi1NUEVHMUF1ZGlvU3RyZWFtUGFyc2VyOjp+TVBFRzFBdWRpb1N0cmVhbVBhcnNlcigpIHt9Ci0KLWludCBNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyOjpQYXJzZUZyYW1lSGVhZGVyKAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplLCBpbnQqIGZyYW1lX3NpemUsIGludCogc2FtcGxlX3JhdGUsCi0gICAgQ2hhbm5lbExheW91dCogY2hhbm5lbF9sYXlvdXQsIGludCogc2FtcGxlX2NvdW50LCBib29sKiBtZXRhZGF0YV9mcmFtZSwKLSAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogZXh0cmFfZGF0YSkgY29uc3QgewotICBEQ0hFQ0soZGF0YSk7Ci0gIERDSEVDS19HRShzaXplLCAwKTsKLSAgRENIRUNLKGZyYW1lX3NpemUpOwotCi0gIGlmIChzaXplIDwga0hlYWRlclNpemUpIHJldHVybiAwOwotCi0gIEhlYWRlciBoZWFkZXI7Ci0gIGlmICghUGFyc2VIZWFkZXIobWVkaWFfbG9nKCksIGRhdGEsICZoZWFkZXIpKSByZXR1cm4gLTE7Ci0KLSAgKmZyYW1lX3NpemUgPSBoZWFkZXIuZnJhbWVfc2l6ZTsKLSAgaWYgKHNhbXBsZV9yYXRlKSAqc2FtcGxlX3JhdGUgPSBoZWFkZXIuc2FtcGxlX3JhdGU7Ci0gIGlmIChzYW1wbGVfY291bnQpICpzYW1wbGVfY291bnQgPSBoZWFkZXIuc2FtcGxlX2NvdW50OwotICBpZiAoY2hhbm5lbF9sYXlvdXQpICpjaGFubmVsX2xheW91dCA9IGhlYWRlci5jaGFubmVsX2xheW91dDsKLSAgaWYgKG1ldGFkYXRhX2ZyYW1lKSAqbWV0YWRhdGFfZnJhbWUgPSBmYWxzZTsKLQotICBjb25zdCBpbnQgaGVhZGVyX2J5dGVzX3JlYWQgPSBrSGVhZGVyU2l6ZTsKLSAgaWYgKGhlYWRlci5sYXllciAhPSBrTGF5ZXIzKSByZXR1cm4gaGVhZGVyX2J5dGVzX3JlYWQ7Ci0KLSAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIFhJTkcgZnJhbWUgYW5kIHRlbGwgdGhlIGJhc2UgcGFyc2VyIHRvIHNraXAgaXQgaWYgc28uCi0gIGNvbnN0IGludCB4aW5nX2hlYWRlcl9pbmRleCA9Ci0gICAgICBrWGluZ0hlYWRlck1hcFtoZWFkZXIudmVyc2lvbiA9PSBrVmVyc2lvbjIgfHwKLSAgICAgICAgICAgICAgICAgICAgIGhlYWRlci52ZXJzaW9uID09IGtWZXJzaW9uMl81XVtoZWFkZXIuY2hhbm5lbF9tb2RlID09IDNdOwotICB1aW50MzJfdCB0YWcgPSAwOwotCi0gIC8vIEl0J3Mgbm90IGEgWElORyBmcmFtZSBpZiB0aGUgZnJhbWUgaXNuJ3QgYmlnIGVub3VnaCB0byBiZSBvbmUuCi0gIGlmICgqZnJhbWVfc2l6ZSA8Ci0gICAgICBoZWFkZXJfYnl0ZXNfcmVhZCArIHhpbmdfaGVhZGVyX2luZGV4ICsgc3RhdGljX2Nhc3Q8aW50PihzaXplb2YodGFnKSkpIHsKLSAgICByZXR1cm4gaGVhZGVyX2J5dGVzX3JlYWQ7Ci0gIH0KLQotICAvLyBJZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIGF2YWlsYWJsZSB0byBjaGVjaywgcmV0dXJuIDAgc28gZnJhbWUgcGFyc2luZwotICAvLyB3aWxsIGJlIHJldHJpZWQgb25jZSBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLgotICBCaXRSZWFkZXIgcmVhZGVyKGRhdGEgKyBoZWFkZXJfYnl0ZXNfcmVhZCwgc2l6ZSAtIGhlYWRlcl9ieXRlc19yZWFkKTsKLSAgaWYgKCFyZWFkZXIuU2tpcEJpdHMoeGluZ19oZWFkZXJfaW5kZXggKiA4KSB8fAotICAgICAgIXJlYWRlci5SZWFkQml0cyhzaXplb2YodGFnKSAqIDgsICZ0YWcpKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRhZyBjb250YWlucyAnWGluZycgb3IgJ0luZm8nCi0gIGlmICh0YWcgPT0gMHg0OTZlNjY2ZiB8fCB0YWcgPT0gMHg1ODY5NmU2NykgewotICAgIE1FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nKCkpIDw8ICJTa2lwcGluZyBYSU5HIGhlYWRlci4iOwotICAgIGlmIChtZXRhZGF0YV9mcmFtZSkgKm1ldGFkYXRhX2ZyYW1lID0gdHJ1ZTsKLSAgICByZXR1cm4gaGVhZGVyX2J5dGVzX3JlYWQgKyByZWFkZXIuYml0c19yZWFkKCkgLyA4OwotICB9Ci0KLSAgLy8gSWYgaXQgd2Fzbid0IGEgWElORyBmcmFtZSwganVzdCByZXR1cm4gdGhlIG51bWJlciBjb25zdW1lZCBieXRlcy4KLSAgcmV0dXJuIGhlYWRlcl9ieXRlc19yZWFkOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MjAxOTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVBFR19NUEVHMV9BVURJT19TVFJFQU1fUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX01QRUdfTVBFRzFfQVVESU9fU1RSRUFNX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWdfYXVkaW9fc3RyZWFtX3BhcnNlcl9iYXNlLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gTVBFRzFBdWRpb1N0cmVhbVBhcnNlciBoYW5kbGVzIE1QRUctMSBhdWRpbyBzdHJlYW1zIChJU08vSUVDIDExMTcyLTMpCi0vLyBhcyB3ZWxsIGFzIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczoKLS8vIC0gTVBFRy0yIGF1ZGlvIChJU08vSUVDIDEzODE4LTMpLAotLy8gLSBhbmQgTVBFRzIuNSAobm90IGFuIElTTyBzdGFuZGFyZCkuCi1jbGFzcyBNRURJQV9FWFBPUlQgTVBFRzFBdWRpb1N0cmVhbVBhcnNlciA6IHB1YmxpYyBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlIHsKLSBwdWJsaWM6Ci0gIC8vIFNpemUgb2YgYW4gTVBFRy0xIGZyYW1lIGhlYWRlciBpbiBieXRlcy4KLSAgZW51bSB7Ci0gICAga0hlYWRlclNpemUgPSA0LAotICB9OwotCi0gIC8vIFZlcnNpb25zIGFuZCBsYXllcnMgYXMgZGVmaW5lZCBpbiBJU08vSUVDIDExMTcyLTMuCi0gIGVudW0gVmVyc2lvbiB7Ci0gICAga1ZlcnNpb24xID0gMywKLSAgICBrVmVyc2lvbjIgPSAyLAotICAgIGtWZXJzaW9uUmVzZXJ2ZWQgPSAxLAotICAgIGtWZXJzaW9uMl81ID0gMCwKLSAgfTsKLQotICBlbnVtIExheWVyIHsKLSAgICBrTGF5ZXIxID0gMywKLSAgICBrTGF5ZXIyID0gMiwKLSAgICBrTGF5ZXIzID0gMSwKLSAgICBrTGF5ZXJSZXNlcnZlZCA9IDAsCi0gIH07Ci0KLSAgc3RydWN0IEhlYWRlciB7Ci0gICAgVmVyc2lvbiB2ZXJzaW9uOwotCi0gICAgLy8gTGF5ZXIgYXMgZGVmaW5lZCBpbiBJU08vSUVDIDExMTcyLTMgYml0c3RyZWFtIHNwZWNpZmljYXRpb24uCi0gICAgTGF5ZXIgbGF5ZXI7Ci0KLSAgICAvLyBGcmFtZSBzaXplIGluIGJ5dGVzLgotICAgIGludCBmcmFtZV9zaXplOwotCi0gICAgLy8gU2FtcGxlIGZyZXF1ZW5jeS4KLSAgICBpbnQgc2FtcGxlX3JhdGU7Ci0KLSAgICAvLyBDaGFubmVsIG1vZGUgYXMgZGVmaW5lZCBpbiBJU08vSUVDIDExMTcyLTMgYml0c3RyZWFtIHNwZWNpZmljYXRpb24uCi0gICAgaW50IGNoYW5uZWxfbW9kZTsKLQotICAgIC8vIENoYW5uZWwgbGF5b3V0LgotICAgIENoYW5uZWxMYXlvdXQgY2hhbm5lbF9sYXlvdXQ7Ci0KLSAgICAvLyBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgZnJhbWUuCi0gICAgaW50IHNhbXBsZV9jb3VudDsKLSAgfTsKLQotICAvLyBQYXJzZXMgdGhlIGhlYWRlciBzdGFydGluZyBhdCB8ZGF0YXwuCi0gIC8vIEFzc3VtcHRpb246IHNpemUgb2YgYXJyYXkgfGRhdGF8IHNob3VsZCBiZSBhdCBsZWFzdCB8a0hlYWRlclNpemV8LgotICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBoZWFkZXIgaXMgbm90IHZhbGlkLgotICBzdGF0aWMgYm9vbCBQYXJzZUhlYWRlcihjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBIZWFkZXIqIGhlYWRlcik7Ci0KLSAgZXhwbGljaXQgTVBFRzFBdWRpb1N0cmVhbVBhcnNlcihEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IpOwotICB+TVBFRzFBdWRpb1N0cmVhbVBhcnNlcigpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgLy8gTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZSBvdmVycmlkZXMuCi0gIGludCBQYXJzZUZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplLCBpbnQqIGZyYW1lX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCogc2FtcGxlX3JhdGUsIENoYW5uZWxMYXlvdXQqIGNoYW5uZWxfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNhbXBsZV9jb3VudCwgYm9vbCogbWV0YWRhdGFfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+KiBleHRyYV9kYXRhKSBjb25zdCBvdmVycmlkZTsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTVBFRzFBdWRpb1N0cmVhbVBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUEVHX01QRUcxX0FVRElPX1NUUkVBTV9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxNGRkMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWcxX2F1ZGlvX3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3B0cl91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9kYXRhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy9jb21tb24vc3RyZWFtX3BhcnNlcl90ZXN0X2Jhc2UuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyVGVzdCA6IHB1YmxpYyBTdHJlYW1QYXJzZXJUZXN0QmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgTVBFRzFBdWRpb1N0cmVhbVBhcnNlclRlc3QoKQotICAgICAgOiBTdHJlYW1QYXJzZXJUZXN0QmFzZShiYXNlOjpNYWtlVW5pcXVlPE1QRUcxQXVkaW9TdHJlYW1QYXJzZXI+KCkpIHt9Ci19OwotCi0vLyBUZXN0IHBhcnNpbmcgd2l0aCBzbWFsbCBwcmltZSBzaXplZCBjaHVua3MgdG8gc21va2Ugb3V0ICJwb3dlciBvZgotLy8gMiIgZmllbGQgc2l6ZSBhc3N1bXB0aW9ucy4KLVRFU1RfRihNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyVGVzdCwgVW5hbGlnbmVkQXBwZW5kKSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkID0KLSAgICAgICJOZXdTZWdtZW50IgotICAgICAgInsgMEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJFbmRPZlNlZ21lbnQiCi0gICAgICAiTmV3U2VnbWVudCIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgInsgMEsgfSIKLSAgICAgICJFbmRPZlNlZ21lbnQiCi0gICAgICAiTmV3U2VnbWVudCIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAieyAwSyB9IgotICAgICAgIkVuZE9mU2VnbWVudCI7Ci0gIEVYUEVDVF9FUShleHBlY3RlZCwgUGFyc2VGaWxlKCJzZngubXAzIiwgMTcpKTsKLSAgRVhQRUNUX0dUKGxhc3RfYXVkaW9fY29uZmlnKCkuY29kZWNfZGVsYXkoKSwgMCk7Ci19Ci0KLS8vIFRlc3QgcGFyc2luZyB3aXRoIGEgbGFyZ2VyIHBpZWNlIHNpemUgdG8gdmVyaWZ5IHRoYXQgbXVsdGlwbGUgYnVmZmVycwotLy8gYXJlIHBhc3NlZCB0byB8bmV3X2J1ZmZlcl9jYl98LgotVEVTVF9GKE1QRUcxQXVkaW9TdHJlYW1QYXJzZXJUZXN0LCBVbmFsaWduZWRBcHBlbmQ1MTIpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgIk5ld1NlZ21lbnQiCi0gICAgICAieyAwSyAyNksgNTJLIDc4SyB9IgotICAgICAgIkVuZE9mU2VnbWVudCIKLSAgICAgICJOZXdTZWdtZW50IgotICAgICAgInsgMEsgMjZLIDUySyB9IgotICAgICAgInsgMEsgMjZLIDUySyA3OEsgfSIKLSAgICAgICJ7IDBLIH0iCi0gICAgICAiRW5kT2ZTZWdtZW50IjsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkLCBQYXJzZUZpbGUoInNmeC5tcDMiLCA1MTIpKTsKLSAgRVhQRUNUX0dUKGxhc3RfYXVkaW9fY29uZmlnKCkuY29kZWNfZGVsYXkoKSwgMCk7Ci19Ci0KLVRFU1RfRihNUEVHMUF1ZGlvU3RyZWFtUGFyc2VyVGVzdCwgTWV0YWRhdGFQYXJzaW5nKSB7Ci0gIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyID0gUmVhZFRlc3REYXRhRmlsZSgic2Z4Lm1wMyIpOwotICBjb25zdCB1aW50OF90KiBidWZmZXJfcHRyID0gYnVmZmVyLT5kYXRhKCk7Ci0KLSAgLy8gVGhlIGZpcnN0IDMyIGJ5dGVzIG9mIHNmeC5tcDMgYXJlIGFuIElEMyB0YWcsIHNvIG5vIHNlZ21lbnRzIHNob3VsZCBiZQotICAvLyBleHRyYWN0ZWQgYWZ0ZXIgYXBwZW5kaW5nIHRob3NlIGJ5dGVzLgotICBjb25zdCBpbnQga0lkM1RhZ1NpemUgPSAzMjsKLSAgRVhQRUNUX0VRKCIiLCBQYXJzZURhdGEoYnVmZmVyX3B0ciwga0lkM1RhZ1NpemUpKTsKLSAgRVhQRUNUX0ZBTFNFKGxhc3RfYXVkaW9fY29uZmlnKCkuSXNWYWxpZENvbmZpZygpKTsKLSAgYnVmZmVyX3B0ciArPSBrSWQzVGFnU2l6ZTsKLQotICAvLyBUaGUgbmV4dCA0MTcgYnl0ZXMgYXJlIGEgWGluZyBmcmFtZTsgd2l0aCB0aGUgaWRlbnRpZmllciAyMSBieXRlcyBpbnRvCi0gIC8vIHRoZSBmcmFtZS4gIEFwcGVuZGluZyBsZXNzIHRoYW4gMjEgYnl0ZXMsIHNob3VsZCByZXN1bHQgaW4gbm8gc2VnbWVudHMKLSAgLy8gbm9yIGFuIEF1ZGlvRGVjb2RlckNvbmZpZyBiZWluZyBjcmVhdGVkLgotICBjb25zdCBpbnQga1hpbmdUYWdQb3NpdGlvbiA9IDIxOwotICBFWFBFQ1RfRVEoIiIsIFBhcnNlRGF0YShidWZmZXJfcHRyLCBrWGluZ1RhZ1Bvc2l0aW9uKSk7Ci0gIEVYUEVDVF9GQUxTRShsYXN0X2F1ZGlvX2NvbmZpZygpLklzVmFsaWRDb25maWcoKSk7Ci0gIGJ1ZmZlcl9wdHIgKz0ga1hpbmdUYWdQb3NpdGlvbjsKLQotICAvLyBBcHBlbmRpbmcgdGhlIHJlc3RzIG9mIHRoZSBYaW5nIGZyYW1lIHNob3VsZCByZXN1bHQgaW4gbm8gc2VnbWVudHMsIGJ1dAotICAvLyBzaG91bGQgZ2VuZXJhdGUgYSB2YWxpZCBBdWRpb0RlY29kZXJDb25maWcuCi0gIGNvbnN0IGludCBrWGluZ1JlbWFpbmluZ1NpemUgPSA0MTcgLSBrWGluZ1RhZ1Bvc2l0aW9uOwotICBFWFBFQ1RfRVEoIiIsIFBhcnNlRGF0YShidWZmZXJfcHRyLCBrWGluZ1JlbWFpbmluZ1NpemUpKTsKLSAgRVhQRUNUX1RSVUUobGFzdF9hdWRpb19jb25maWcoKS5Jc1ZhbGlkQ29uZmlnKCkpOwotICBidWZmZXJfcHRyICs9IGtYaW5nUmVtYWluaW5nU2l6ZTsKLQotICAvLyBBcHBlbmQgdGhlIGZpcnN0IHJlYWwgZnJhbWUgYW5kIGVuc3VyZSB3ZSBnZXQgYSBzZWdtZW50LgotICBjb25zdCBpbnQga0ZpcnN0UmVhbEZyYW1lU2l6ZSA9IDE4MjsKLSAgRVhQRUNUX0VRKCJOZXdTZWdtZW50eyAwSyB9RW5kT2ZTZWdtZW50IiwKLSAgICAgICAgICAgIFBhcnNlRGF0YShidWZmZXJfcHRyLCBrRmlyc3RSZWFsRnJhbWVTaXplKSk7Ci0gIEVYUEVDVF9UUlVFKGxhc3RfYXVkaW9fY29uZmlnKCkuSXNWYWxpZENvbmZpZygpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWdfYXVkaW9fc3RyZWFtX3BhcnNlcl9iYXNlLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQwYjkzYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy9tcGVnL21wZWdfYXVkaW9fc3RyZWFtX3BhcnNlcl9iYXNlLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuaCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2tfaGVscGVycy5oIgotI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RleHRfdHJhY2tfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQga01wZWdBdWRpb1RyYWNrSWQgPSAxOwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qga0lDWVN0YXJ0Q29kZSA9IDB4NDk0MzU5MjA7ICAvLyAnSUNZICcKLQotLy8gQXJiaXRyYXJ5IHVwcGVyIGJvdW5kIG9uIHRoZSBzaXplIG9mIGFuIEljZUNhc3QgaGVhZGVyIGJlZm9yZSBpdAotLy8gdHJpZ2dlcnMgYW4gZXJyb3IuCi1zdGF0aWMgY29uc3QgaW50IGtNYXhJY2VjYXN0SGVhZGVyU2l6ZSA9IDQwOTY7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrSUQzU3RhcnRDb2RlTWFzayA9IDB4ZmZmZmZmMDA7Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga0lEM3YxU3RhcnRDb2RlID0gMHg1NDQxNDcwMDsgIC8vICdUQUdcMCcKLXN0YXRpYyBjb25zdCBpbnQga0lEM3YxU2l6ZSA9IDEyODsKLXN0YXRpYyBjb25zdCBpbnQga0lEM3YxRXh0ZW5kZWRTaXplID0gMjI3Owotc3RhdGljIGNvbnN0IHVpbnQzMl90IGtJRDN2MlN0YXJ0Q29kZSA9IDB4NDk0NDMzMDA7ICAvLyAnSUQzXDAnCi0KLXN0YXRpYyBpbnQgTG9jYXRlRW5kT2ZIZWFkZXJzKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IGJ1Zl9sZW4sIGludCBpKSB7Ci0gIGJvb2wgd2FzX2xmID0gZmFsc2U7Ci0gIGNoYXIgbGFzdF9jID0gJ1wwJzsKLSAgZm9yICg7IGkgPCBidWZfbGVuOyArK2kpIHsKLSAgICBjaGFyIGMgPSBidWZbaV07Ci0gICAgaWYgKGMgPT0gJ1xuJykgewotICAgICAgaWYgKHdhc19sZikgcmV0dXJuIGkgKyAxOwotICAgICAgd2FzX2xmID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGMgIT0gJ1xyJyB8fCBsYXN0X2MgIT0gJ1xuJykgewotICAgICAgd2FzX2xmID0gZmFsc2U7Ci0gICAgfQotICAgIGxhc3RfYyA9IGM7Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi1NUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlOjpNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlKAotICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgdWludDMyX3Qgc3RhcnRfY29kZV9tYXNrLAotICAgIEF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsIGludCBjb2RlY19kZWxheSkKLSAgICA6IGJ1ZmZlcl9hbGxvY2F0b3JfKGJ1ZmZlcl9hbGxvY2F0b3IpLAotICAgICAgc3RhdGVfKFVOSU5JVElBTElaRUQpLAotICAgICAgaW5fbWVkaWFfc2VnbWVudF8oZmFsc2UpLAotICAgICAgc3RhcnRfY29kZV9tYXNrXyhzdGFydF9jb2RlX21hc2spLAotICAgICAgYXVkaW9fY29kZWNfKGF1ZGlvX2NvZGVjKSwKLSAgICAgIGNvZGVjX2RlbGF5Xyhjb2RlY19kZWxheSkgewotICBEQ0hFQ0soYnVmZmVyX2FsbG9jYXRvcl8pOwotfQotCi1NUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlOjp+TVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZSgpIHt9Ci0KLXZvaWQgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6SW5pdCgKLSAgICBjb25zdCBJbml0Q0ImIGluaXRfY2IsIGNvbnN0IE5ld0NvbmZpZ0NCJiBjb25maWdfY2IsCi0gICAgY29uc3QgTmV3QnVmZmVyc0NCJiBuZXdfYnVmZmVyc19jYiwgYm9vbCBpZ25vcmVfdGV4dF90cmFja3MsCi0gICAgY29uc3QgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCJiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgIGNvbnN0IE5ld01lZGlhU2VnbWVudENCJiBuZXdfc2VnbWVudF9jYiwKLSAgICBjb25zdCBFbmRNZWRpYVNlZ21lbnRDQiYgZW5kX29mX3NlZ21lbnRfY2IsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX187Ci0gIERDSEVDS19FUShzdGF0ZV8sIFVOSU5JVElBTElaRUQpOwotICBpbml0X2NiXyA9IGluaXRfY2I7Ci0gIGNvbmZpZ19jYl8gPSBjb25maWdfY2I7Ci0gIG5ld19idWZmZXJzX2NiXyA9IG5ld19idWZmZXJzX2NiOwotICBuZXdfc2VnbWVudF9jYl8gPSBuZXdfc2VnbWVudF9jYjsKLSAgZW5kX29mX3NlZ21lbnRfY2JfID0gZW5kX29mX3NlZ21lbnRfY2I7Ci0gIG1lZGlhX2xvZ18gPSBtZWRpYV9sb2c7Ci0KLSAgQ2hhbmdlU3RhdGUoSU5JVElBTElaRUQpOwotfQotCi12b2lkIE1QRUdBdWRpb1N0cmVhbVBhcnNlckJhc2U6OkZsdXNoKCkgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX187Ci0gIERDSEVDS19ORShzdGF0ZV8sIFVOSU5JVElBTElaRUQpOwotICBxdWV1ZV8uUmVzZXQoKTsKLSAgaWYgKHRpbWVzdGFtcF9oZWxwZXJfKSB0aW1lc3RhbXBfaGVscGVyXy0+U2V0QmFzZVRpbWVzdGFtcChiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gIGluX21lZGlhX3NlZ21lbnRfID0gZmFsc2U7Ci19Ci0KLWJvb2wgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6UGFyc2UoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSkgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHNpemUgPDwgIikiOwotICBEQ0hFQ0soYnVmKTsKLSAgRENIRUNLX0dUKHNpemUsIDApOwotICBEQ0hFQ0tfTkUoc3RhdGVfLCBVTklOSVRJQUxJWkVEKTsKLQotICBpZiAoc3RhdGVfID09IFBBUlNFX0VSUk9SKSByZXR1cm4gZmFsc2U7Ci0KLSAgRENIRUNLX0VRKHN0YXRlXywgSU5JVElBTElaRUQpOwotCi0gIHF1ZXVlXy5QdXNoKGJ1Ziwgc2l6ZSk7Ci0KLSAgYm9vbCBlbmRfb2Zfc2VnbWVudCA9IHRydWU7Ci0gIEJ1ZmZlclF1ZXVlIGJ1ZmZlcnM7Ci0gIGZvciAoOzspIHsKLSAgICBjb25zdCB1aW50OF90KiBkYXRhOwotICAgIGludCBkYXRhX3NpemU7Ci0gICAgcXVldWVfLlBlZWsoJmRhdGEsICZkYXRhX3NpemUpOwotCi0gICAgaWYgKGRhdGFfc2l6ZSA8IDQpIGJyZWFrOwotCi0gICAgdWludDMyX3Qgc3RhcnRfY29kZSA9Ci0gICAgICAgIGRhdGFbMF0gPDwgMjQgfCBkYXRhWzFdIDw8IDE2IHwgZGF0YVsyXSA8PCA4IHwgZGF0YVszXTsKLSAgICBpbnQgYnl0ZXNfcmVhZCA9IDA7Ci0gICAgYm9vbCBwYXJzZWRfbWV0YWRhdGEgPSB0cnVlOwotICAgIGlmICgoc3RhcnRfY29kZSAmIHN0YXJ0X2NvZGVfbWFza18pID09IHN0YXJ0X2NvZGVfbWFza18pIHsKLSAgICAgIGJ5dGVzX3JlYWQgPSBQYXJzZUZyYW1lKGRhdGEsIGRhdGFfc2l6ZSwgJmJ1ZmZlcnMpOwotCi0gICAgICAvLyBPbmx5IGFsbG93IHRoZSBjdXJyZW50IHNlZ21lbnQgdG8gZW5kIGlmIGEgZnVsbCBmcmFtZSBoYXMgYmVlbiBwYXJzZWQuCi0gICAgICBlbmRfb2Zfc2VnbWVudCA9IGJ5dGVzX3JlYWQgPiAwOwotICAgICAgcGFyc2VkX21ldGFkYXRhID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChzdGFydF9jb2RlID09IGtJQ1lTdGFydENvZGUpIHsKLSAgICAgIGJ5dGVzX3JlYWQgPSBQYXJzZUljZWNhc3RIZWFkZXIoZGF0YSwgZGF0YV9zaXplKTsKLSAgICB9IGVsc2UgaWYgKChzdGFydF9jb2RlICYga0lEM1N0YXJ0Q29kZU1hc2spID09IGtJRDN2MVN0YXJ0Q29kZSkgewotICAgICAgYnl0ZXNfcmVhZCA9IFBhcnNlSUQzdjEoZGF0YSwgZGF0YV9zaXplKTsKLSAgICB9IGVsc2UgaWYgKChzdGFydF9jb2RlICYga0lEM1N0YXJ0Q29kZU1hc2spID09IGtJRDN2MlN0YXJ0Q29kZSkgewotICAgICAgYnl0ZXNfcmVhZCA9IFBhcnNlSUQzdjIoZGF0YSwgZGF0YV9zaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgYnl0ZXNfcmVhZCA9IEZpbmROZXh0VmFsaWRTdGFydENvZGUoZGF0YSwgZGF0YV9zaXplKTsKLQotICAgICAgaWYgKGJ5dGVzX3JlYWQgPiAwKSB7Ci0gICAgICAgIERWTE9HKDEpIDw8ICJVbmV4cGVjdGVkIHN0YXJ0IGNvZGUgMHgiIDw8IHN0ZDo6aGV4IDw8IHN0YXJ0X2NvZGU7Ci0gICAgICAgIERWTE9HKDEpIDw8ICJTS0lQUElORyAiIDw8IGJ5dGVzX3JlYWQgPDwgIiBieXRlcyBvZiBnYXJiYWdlLiI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQ0hFQ0tfTEUoYnl0ZXNfcmVhZCwgZGF0YV9zaXplKTsKLQotICAgIGlmIChieXRlc19yZWFkIDwgMCkgewotICAgICAgQ2hhbmdlU3RhdGUoUEFSU0VfRVJST1IpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA9PSAwKSB7Ci0gICAgICAvLyBOZWVkIG1vcmUgZGF0YS4KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIFNlbmQgcGVuZGluZyBidWZmZXJzIGlmIHdlIGhhdmUgZW5jb3VudGVyZWQgbWV0YWRhdGEuCi0gICAgaWYgKHBhcnNlZF9tZXRhZGF0YSAmJiAhYnVmZmVycy5lbXB0eSgpICYmICFTZW5kQnVmZmVycygmYnVmZmVycywgdHJ1ZSkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBxdWV1ZV8uUG9wKGJ5dGVzX3JlYWQpOwotICAgIGVuZF9vZl9zZWdtZW50ID0gdHJ1ZTsKLSAgfQotCi0gIGlmIChidWZmZXJzLmVtcHR5KCkpIHJldHVybiB0cnVlOwotCi0gIC8vIFNlbmQgYnVmZmVycyBjb2xsZWN0ZWQgaW4gdGhpcyBhcHBlbmQgdGhhdCBoYXZlbid0IGJlZW4gc2VudCB5ZXQuCi0gIHJldHVybiBTZW5kQnVmZmVycygmYnVmZmVycywgZW5kX29mX3NlZ21lbnQpOwotfQotCi12b2lkIE1QRUdBdWRpb1N0cmVhbVBhcnNlckJhc2U6OkNoYW5nZVN0YXRlKFN0YXRlIHN0YXRlKSB7Ci0gIERWTE9HKDEpIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCkgOiAiIDw8IHN0YXRlXyA8PCAiIC0+ICIgPDwgc3RhdGU7Ci0gIHN0YXRlXyA9IHN0YXRlOwotfQotCi1pbnQgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6UGFyc2VGcmFtZShjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclF1ZXVlKiBidWZmZXJzKSB7Ci0gIERWTE9HKDIpIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIgPDwgc2l6ZSA8PCAiKSI7Ci0KLSAgaW50IHNhbXBsZV9yYXRlOwotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0OwotICBpbnQgZnJhbWVfc2l6ZTsKLSAgaW50IHNhbXBsZV9jb3VudDsKLSAgYm9vbCBtZXRhZGF0YV9mcmFtZSA9IGZhbHNlOwotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBleHRyYV9kYXRhOwotICBpbnQgYnl0ZXNfcmVhZCA9Ci0gICAgICBQYXJzZUZyYW1lSGVhZGVyKGRhdGEsIHNpemUsICZmcmFtZV9zaXplLCAmc2FtcGxlX3JhdGUsICZjaGFubmVsX2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgJnNhbXBsZV9jb3VudCwgJm1ldGFkYXRhX2ZyYW1lLCAmZXh0cmFfZGF0YSk7Ci0KLSAgaWYgKGJ5dGVzX3JlYWQgPD0gMCkgcmV0dXJuIGJ5dGVzX3JlYWQ7Ci0KLSAgLy8gTWFrZSBzdXJlIGRhdGEgY29udGFpbnMgdGhlIGVudGlyZSBmcmFtZS4KLSAgaWYgKHNpemUgPCBmcmFtZV9zaXplKSByZXR1cm4gMDsKLQotICBEVkxPRygyKSA8PCAiIHNhbXBsZV9yYXRlICIgPDwgc2FtcGxlX3JhdGUgPDwgIiBjaGFubmVsX2xheW91dCAiCi0gICAgICAgICAgIDw8IGNoYW5uZWxfbGF5b3V0IDw8ICIgZnJhbWVfc2l6ZSAiIDw8IGZyYW1lX3NpemUgPDwgIiBzYW1wbGVfY291bnQgIgotICAgICAgICAgICA8PCBzYW1wbGVfY291bnQ7Ci0KLSAgaWYgKGNvbmZpZ18uSXNWYWxpZENvbmZpZygpICYmIChjb25maWdfLnNhbXBsZXNfcGVyX3NlY29uZCgpICE9IHNhbXBsZV9yYXRlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnXy5jaGFubmVsX2xheW91dCgpICE9IGNoYW5uZWxfbGF5b3V0KSkgewotICAgIC8vIENsZWFyIGNvbmZpZyBkYXRhIHNvIHRoYXQgYSBjb25maWcgY2hhbmdlIGlzIGluaXRpYXRlZC4KLSAgICBjb25maWdfID0gQXVkaW9EZWNvZGVyQ29uZmlnKCk7Ci0KLSAgICAvLyBTZW5kIGFsbCBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJldmlvdXMgY29uZmlnLgotICAgIGlmICghYnVmZmVycy0+ZW1wdHkoKSAmJiAhU2VuZEJ1ZmZlcnMoYnVmZmVycywgdHJ1ZSkpIHJldHVybiAtMTsKLSAgfQotCi0gIGlmICghY29uZmlnXy5Jc1ZhbGlkQ29uZmlnKCkpIHsKLSAgICBjb25maWdfLkluaXRpYWxpemUoYXVkaW9fY29kZWNfLCBrU2FtcGxlRm9ybWF0RjMyLCBjaGFubmVsX2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGUsIGV4dHJhX2RhdGEsIFVuZW5jcnlwdGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSgpLCBjb2RlY19kZWxheV8pOwotCi0gICAgYmFzZTo6VGltZURlbHRhIGJhc2VfdGltZXN0YW1wOwotICAgIGlmICh0aW1lc3RhbXBfaGVscGVyXykgYmFzZV90aW1lc3RhbXAgPSB0aW1lc3RhbXBfaGVscGVyXy0+R2V0VGltZXN0YW1wKCk7Ci0KLSAgICB0aW1lc3RhbXBfaGVscGVyXy5yZXNldChuZXcgQXVkaW9UaW1lc3RhbXBIZWxwZXIoc2FtcGxlX3JhdGUpKTsKLSAgICB0aW1lc3RhbXBfaGVscGVyXy0+U2V0QmFzZVRpbWVzdGFtcChiYXNlX3RpbWVzdGFtcCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IG1lZGlhX3RyYWNrcyhuZXcgTWVkaWFUcmFja3MoKSk7Ci0gICAgaWYgKGNvbmZpZ18uSXNWYWxpZENvbmZpZygpKSB7Ci0gICAgICBtZWRpYV90cmFja3MtPkFkZEF1ZGlvVHJhY2soY29uZmlnXywga01wZWdBdWRpb1RyYWNrSWQsICJtYWluIiwgIiIsICIiKTsKLSAgICB9Ci0gICAgaWYgKCFjb25maWdfY2JfLlJ1bihzdGQ6Om1vdmUobWVkaWFfdHJhY2tzKSwgVGV4dFRyYWNrQ29uZmlnTWFwKCkpKQotICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKCFpbml0X2NiXy5pc19udWxsKCkpIHsKLSAgICAgIEluaXRQYXJhbWV0ZXJzIHBhcmFtcyhrSW5maW5pdGVEdXJhdGlvbik7Ci0gICAgICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPSAxOwotICAgICAgcGFyYW1zLmF1dG9fdXBkYXRlX3RpbWVzdGFtcF9vZmZzZXQgPSB0cnVlOwotICAgICAgYmFzZTo6UmVzZXRBbmRSZXR1cm4oJmluaXRfY2JfKS5SdW4ocGFyYW1zKTsKLSAgICB9Ci0gIH0KLQotICBpZiAobWV0YWRhdGFfZnJhbWUpIHJldHVybiBmcmFtZV9zaXplOwotCi0gIC8vIFRPRE8od29sZW5ldHovYWNvbHdlbGwpOiBWYWxpZGF0ZSBhbmQgdXNlIGEgY29tbW9uIGNyb3NzLXBhcnNlciBUcmFja0lkCi0gIC8vIHR5cGUgYW5kIGFsbG93IG11bHRpcGxlIGF1ZGlvIHRyYWNrcywgaWYgYXBwbGljYWJsZS4gU2VlCi0gIC8vIGh0dHBzOi8vY3JidWcuY29tLzM0MTU4MS4KLSAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9Ci0gICAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OkNvcHlGcm9tKGJ1ZmZlcl9hbGxvY2F0b3JfLCBkYXRhLCBmcmFtZV9zaXplLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZW11eGVyU3RyZWFtOjpBVURJTywga01wZWdBdWRpb1RyYWNrSWQpOwotICBpZiAoIWJ1ZmZlcikgewotICAgIHJldHVybiAtMTsKLSAgfQotICBidWZmZXItPnNldF90aW1lc3RhbXAodGltZXN0YW1wX2hlbHBlcl8tPkdldFRpbWVzdGFtcCgpKTsKLSAgYnVmZmVyLT5zZXRfZHVyYXRpb24odGltZXN0YW1wX2hlbHBlcl8tPkdldEZyYW1lRHVyYXRpb24oc2FtcGxlX2NvdW50KSk7Ci0gIGJ1ZmZlcnMtPnB1c2hfYmFjayhidWZmZXIpOwotCi0gIHRpbWVzdGFtcF9oZWxwZXJfLT5BZGRGcmFtZXMoc2FtcGxlX2NvdW50KTsKLQotICByZXR1cm4gZnJhbWVfc2l6ZTsKLX0KLQotaW50IE1QRUdBdWRpb1N0cmVhbVBhcnNlckJhc2U6OlBhcnNlSWNlY2FzdEhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSkgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHNpemUgPDwgIikiOwotCi0gIGlmIChzaXplIDwgNCkgcmV0dXJuIDA7Ci0KLSAgaWYgKG1lbWNtcCgiSUNZICIsIGRhdGEsIDQpKSByZXR1cm4gLTE7Ci0KLSAgaW50IGxvY2F0ZV9zaXplID0gc3RkOjptaW4oc2l6ZSwga01heEljZWNhc3RIZWFkZXJTaXplKTsKLSAgaW50IG9mZnNldCA9IExvY2F0ZUVuZE9mSGVhZGVycyhkYXRhLCBsb2NhdGVfc2l6ZSwgNCk7Ci0gIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgaWYgKGxvY2F0ZV9zaXplID09IGtNYXhJY2VjYXN0SGVhZGVyU2l6ZSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiSWNlY2FzdCBoZWFkZXIgaXMgdG9vIGxhcmdlLiI7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICByZXR1cm4gb2Zmc2V0OwotfQotCi1pbnQgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6UGFyc2VJRDN2MShjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHNpemUgPDwgIikiOwotCi0gIGlmIChzaXplIDwga0lEM3YxU2l6ZSkgcmV0dXJuIDA7Ci0KLSAgLy8gVE9ETyhhY29sd2VsbCk6IEFkZCBjb2RlIHRvIGFjdHVhbGx5IHZhbGlkYXRlIElEM3YxIGRhdGEgYW5kCi0gIC8vIGV4cG9zZSBpdCBhcyBhIG1ldGFkYXRhIHRleHQgdHJhY2suCi0gIHJldHVybiAhbWVtY21wKGRhdGEsICJUQUcrIiwgNCkgPyBrSUQzdjFFeHRlbmRlZFNpemUgOiBrSUQzdjFTaXplOwotfQotCi1pbnQgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6UGFyc2VJRDN2Mihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBEVkxPRygxKSA8PCBfX0ZVTkNUSU9OX18gPDwgIigiIDw8IHNpemUgPDwgIikiOwotCi0gIGlmIChzaXplIDwgMTApIHJldHVybiAwOwotCi0gIEJpdFJlYWRlciByZWFkZXIoZGF0YSwgc2l6ZSk7Ci0gIGludDMyX3QgaWQ7Ci0gIGludCB2ZXJzaW9uOwotICB1aW50OF90IGZsYWdzOwotICBpbnQzMl90IGlkM19zaXplOwotCi0gIGlmICghcmVhZGVyLlJlYWRCaXRzKDI0LCAmaWQpIHx8ICFyZWFkZXIuUmVhZEJpdHMoMTYsICZ2ZXJzaW9uKSB8fAotICAgICAgIXJlYWRlci5SZWFkQml0cyg4LCAmZmxhZ3MpIHx8ICFQYXJzZVN5bmNTYWZlSW50KCZyZWFkZXIsICZpZDNfc2l6ZSkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IGFjdHVhbF90YWdfc2l6ZSA9IDEwICsgaWQzX3NpemU7Ci0KLSAgLy8gSW5jcmVtZW50IHNpemUgaWYgJ0Zvb3RlciBwcmVzZW50JyBmbGFnIGlzIHNldC4KLSAgaWYgKGZsYWdzICYgMHgxMCkgYWN0dWFsX3RhZ19zaXplICs9IDEwOwotCi0gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBlbnRpcmUgdGFnLgotICBpZiAoc2l6ZSA8IGFjdHVhbF90YWdfc2l6ZSkgcmV0dXJuIDA7Ci0KLSAgLy8gVE9ETyhhY29sd2VsbCk6IEFkZCBjb2RlIHRvIGFjdHVhbGx5IHZhbGlkYXRlIElEM3YyIGRhdGEgYW5kCi0gIC8vIGV4cG9zZSBpdCBhcyBhIG1ldGFkYXRhIHRleHQgdHJhY2suCi0gIHJldHVybiBhY3R1YWxfdGFnX3NpemU7Ci19Ci0KLWJvb2wgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6UGFyc2VTeW5jU2FmZUludChCaXRSZWFkZXIqIHJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiB2YWx1ZSkgewotICAqdmFsdWUgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgIHVpbnQ4X3QgdG1wOwotICAgIGlmICghcmVhZGVyLT5SZWFkQml0cygxLCAmdG1wKSB8fCB0bXAgIT0gMCkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiSUQzIHN5bmNzYWZlIGludGVnZXIgYnl0ZSBNU2IgaXMgbm90IDAhIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlYWRlci0+UmVhZEJpdHMoNywgJnRtcCkpIHJldHVybiBmYWxzZTsKLQotICAgICp2YWx1ZSA8PD0gNzsKLSAgICAqdmFsdWUgKz0gdG1wOwotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlOjpGaW5kTmV4dFZhbGlkU3RhcnRDb2RlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSkgY29uc3QgewotICBjb25zdCB1aW50OF90KiBzdGFydCA9IGRhdGE7Ci0gIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IGRhdGEgKyBzaXplOwotCi0gIHdoaWxlIChzdGFydCA8IGVuZCkgewotICAgIGludCBieXRlc19sZWZ0ID0gZW5kIC0gc3RhcnQ7Ci0gICAgY29uc3QgdWludDhfdCogY2FuZGlkYXRlX3N0YXJ0X2NvZGUgPQotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obWVtY2hyKHN0YXJ0LCAweGZmLCBieXRlc19sZWZ0KSk7Ci0KLSAgICBpZiAoIWNhbmRpZGF0ZV9zdGFydF9jb2RlKSByZXR1cm4gMDsKLQotICAgIGJvb2wgcGFyc2VfaGVhZGVyX2ZhaWxlZCA9IGZhbHNlOwotICAgIGNvbnN0IHVpbnQ4X3QqIHN5bmMgPSBjYW5kaWRhdGVfc3RhcnRfY29kZTsKLSAgICAvLyBUcnkgdG8gZmluZCAzIHZhbGlkIGZyYW1lcyBpbiBhIHJvdy4gMyB3YXMgc2VsZWN0ZWQgdG8gZGVjcmVhc2UKLSAgICAvLyB0aGUgcHJvYmFiaWxpdHkgb2YgZmFsc2UgcG9zaXRpdmVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBpbnQgc3luY19zaXplID0gZW5kIC0gc3luYzsKLSAgICAgIGludCBmcmFtZV9zaXplOwotICAgICAgaW50IHN5bmNfYnl0ZXMgPSBQYXJzZUZyYW1lSGVhZGVyKHN5bmMsIHN5bmNfc2l6ZSwgJmZyYW1lX3NpemUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgIGlmIChzeW5jX2J5dGVzID09IDApIHJldHVybiAwOwotCi0gICAgICBpZiAoc3luY19ieXRlcyA+IDApIHsKLSAgICAgICAgRENIRUNLX0xUKHN5bmNfYnl0ZXMsIHN5bmNfc2l6ZSk7Ci0KLSAgICAgICAgLy8gU2tpcCBvdmVyIHRoaXMgZnJhbWUgc28gd2UgY2FuIGNoZWNrIHRoZSBuZXh0IG9uZS4KLSAgICAgICAgc3luYyArPSBmcmFtZV9zaXplOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV4dCBmcmFtZSBzdGFydHMgaW5zaWRlIHRoZSBidWZmZXIuCi0gICAgICAgIGlmIChzeW5jID49IGVuZCkgcmV0dXJuIDA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBEVkxPRygxKSA8PCAiUGFyc2VGcmFtZUhlYWRlcigpICIgPDwgaSA8PCAiIGZhaWxlZCBAIiA8PCAoc3luYyAtIGRhdGEpOwotICAgICAgICBwYXJzZV9oZWFkZXJfZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHBhcnNlX2hlYWRlcl9mYWlsZWQpIHsKLSAgICAgIC8vIE9uZSBvZiB0aGUgZnJhbWUgaGVhZGVyIHBhcnNlcyBmYWlsZWQgc28gfGNhbmRpZGF0ZV9zdGFydF9jb2RlfAotICAgICAgLy8gZGlkIG5vdCBwb2ludCB0byB0aGUgc3RhcnQgb2YgYSByZWFsIGZyYW1lLiBNb3ZlIHxzdGFydHwgZm9yd2FyZAotICAgICAgLy8gc28gd2UgY2FuIGZpbmQgdGhlIG5leHQgY2FuZGlkYXRlLgotICAgICAgc3RhcnQgPSBjYW5kaWRhdGVfc3RhcnRfY29kZSArIDE7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2FuZGlkYXRlX3N0YXJ0X2NvZGUgLSBkYXRhOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZTo6U2VuZEJ1ZmZlcnMoQnVmZmVyUXVldWUqIGJ1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5kX29mX3NlZ21lbnQpIHsKLSAgRENIRUNLKCFidWZmZXJzLT5lbXB0eSgpKTsKLQotICBpZiAoIWluX21lZGlhX3NlZ21lbnRfKSB7Ci0gICAgaW5fbWVkaWFfc2VnbWVudF8gPSB0cnVlOwotICAgIG5ld19zZWdtZW50X2NiXy5SdW4oKTsKLSAgfQotCi0gIEJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcl9xdWV1ZV9tYXA7Ci0gIGJ1ZmZlcl9xdWV1ZV9tYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtNcGVnQXVkaW9UcmFja0lkLCAqYnVmZmVycykpOwotICBpZiAoIW5ld19idWZmZXJzX2NiXy5SdW4oYnVmZmVyX3F1ZXVlX21hcCkpIHJldHVybiBmYWxzZTsKLSAgYnVmZmVycy0+Y2xlYXIoKTsKLQotICBpZiAoZW5kX29mX3NlZ21lbnQpIHsKLSAgICBpbl9tZWRpYV9zZWdtZW50XyA9IGZhbHNlOwotICAgIGVuZF9vZl9zZWdtZW50X2NiXy5SdW4oKTsKLSAgfQotCi0gIHRpbWVzdGFtcF9oZWxwZXJfLT5TZXRCYXNlVGltZXN0YW1wKGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGYzNTFhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfTVBFR19NUEVHX0FVRElPX1NUUkVBTV9QQVJTRVJfQkFTRV9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19NUEVHX01QRUdfQVVESU9fU1RSRUFNX1BBUlNFUl9CQVNFX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaXRfcmVhZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYnl0ZV9xdWV1ZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBNUEVHQXVkaW9TdHJlYW1QYXJzZXJCYXNlIDogcHVibGljIFN0cmVhbVBhcnNlciB7Ci0gcHVibGljOgotICAvLyB8c3RhcnRfY29kZV9tYXNrfCBpcyB1c2VkIHRvIGZpbmQgdGhlIHN0YXJ0IG9mIGVhY2ggZnJhbWUgaGVhZGVyLiAgQWxzbwotICAvLyByZWZlcnJlZCB0byBhcyB0aGUgc3luYyBjb2RlIGluIHRoZSBNUDMgYW5kIEFEVFMgaGVhZGVyIHNwZWNpZmljYXRpb25zLgotICAvLyB8Y29kZWNfZGVsYXl8IGlzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGUgZGVjb2RlciB3aWxsIG91dHB1dCBiZWZvcmUgdGhlCi0gIC8vIGZpcnN0IHJlYWwgZnJhbWUuCi0gIE1QRUdBdWRpb1N0cmVhbVBhcnNlckJhc2UoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YXJ0X2NvZGVfbWFzaywgQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29kZWNfZGVsYXkpOwotICB+TVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZSgpIG92ZXJyaWRlOwotCi0gIC8vIFN0cmVhbVBhcnNlciBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBJbml0KGNvbnN0IEluaXRDQiYgaW5pdF9jYiwgY29uc3QgTmV3Q29uZmlnQ0ImIGNvbmZpZ19jYiwKLSAgICAgICAgICAgIGNvbnN0IE5ld0J1ZmZlcnNDQiYgbmV3X2J1ZmZlcnNfY2IsIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzLAotICAgICAgICAgICAgY29uc3QgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCJiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgICAgICAgICAgY29uc3QgTmV3TWVkaWFTZWdtZW50Q0ImIG5ld19zZWdtZW50X2NiLAotICAgICAgICAgICAgY29uc3QgRW5kTWVkaWFTZWdtZW50Q0ImIGVuZF9vZl9zZWdtZW50X2NiLAotICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgb3ZlcnJpZGU7Ci0gIHZvaWQgRmx1c2goKSBvdmVycmlkZTsKLSAgYm9vbCBQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSBvdmVycmlkZTsKLQotIHByb3RlY3RlZDoKLSAgLy8gU3ViY2xhc3NlcyBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcGFyc2UgZm9ybWF0IHNwZWNpZmljIGZyYW1lIGhlYWRlcnMuCi0gIC8vIHxkYXRhfCAmIHxzaXplfCBkZXNjcmliZSB0aGUgZGF0YSBhdmFpbGFibGUgZm9yIHBhcnNpbmcuCi0gIC8vCi0gIC8vIEltcGxlbWVudGF0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gY29uc3VtZSBhbiBlbnRpcmUgZnJhbWUgaGVhZGVyLiAgSXQgc2hvdWxkCi0gIC8vIG9ubHkgcmV0dXJuIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAgd2hlbiB8ZGF0YXwgaGFzIGVub3VnaCBieXRlcyB0bwotICAvLyBzdWNjZXNzZnVsbHkgcGFyc2UgJiBjb25zdW1lIHRoZSBlbnRpcmUgZnJhbWUgaGVhZGVyLgotICAvLwotICAvLyB8ZnJhbWVfc2l6ZXwgLSBSZXF1aXJlZCBwYXJhbWV0ZXIgdGhhdCBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlIGZyYW1lLCBpbgotICAvLyBieXRlcywgaW5jbHVkaW5nIHRoZSBmcmFtZSBoZWFkZXIgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSA+IDAuCi0gIC8vIHxzYW1wbGVfcmF0ZXwgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBpcyBzZXQgdG8gdGhlIHNhbXBsZSByYXRlCi0gIC8vIG9mIHRoZSBmcmFtZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSA+IDAuCi0gIC8vIHxjaGFubmVsX2xheW91dHwgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBpcyBzZXQgdG8gdGhlIGNoYW5uZWxfbGF5b3V0Ci0gIC8vIG9mIHRoZSBmcmFtZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSA+IDAuCi0gIC8vIHxzYW1wbGVfY291bnR8IC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2Ygc2FtcGxlcwotICAvLyBpbiB0aGUgZnJhbWUgaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgPiAwLgotICAvLyB8bWV0YWRhdGFfZnJhbWV8IC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgaXMgc2V0IHRvIHRydWUgaWYgdGhlIGZyYW1lIGhhcwotICAvLyB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBhYm92ZSBwYXJhbWV0ZXJzLCBidXQgbm8gdXNhYmxlIGVuY29kZWQgZGF0YTsgb25seSBzZXQKLSAgLy8gdG8gdHJ1ZSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSA+IDAuCi0gIC8vCi0gIC8vIHxzYW1wbGVfcmF0ZXwsIHxjaGFubmVsX2xheW91dHwsIHxzYW1wbGVfY291bnR8LCB8bWV0YWRhdGFfZnJhbWV8IG1heSBiZQotICAvLyBOVUxMIGlmIHRoZSBjYWxsZXIgaXMgbm90IGludGVyZXN0ZWQgaW4gcmVjZWl2aW5nIHRoZXNlIHZhbHVlcyBmcm9tIHRoZQotICAvLyBmcmFtZSBoZWFkZXIuCi0gIC8vCi0gIC8vIElmIHxtZXRhZGF0YV9mcmFtZXwgaXMgdHJ1ZSwgdGhlIE1QRUdBdWRpb1N0cmVhbVBhcnNlckJhc2Ugd2lsbCBkaXNjYXJkIHRoZQotICAvLyBmcmFtZSBhZnRlciBjb25zdW1pbmcgdGhlIG1ldGFkYXRhIHZhbHVlcyBhYm92ZS4KLSAgLy8KLSAgLy8gUmV0dXJuczoKLSAgLy8gPiAwIDogVGhlIG51bWJlciBvZiBieXRlcyBwYXJzZWQuCi0gIC8vICAgMCA6IElmIG1vcmUgZGF0YSBpcyBuZWVkZWQgdG8gcGFyc2UgdGhlIGVudGlyZSBmcmFtZSBoZWFkZXIuCi0gIC8vIDwgMCA6IEFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4KLSAgdmlydHVhbCBpbnQgUGFyc2VGcmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSwgaW50KiBmcmFtZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2FtcGxlX3JhdGUsIENoYW5uZWxMYXlvdXQqIGNoYW5uZWxfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2FtcGxlX2NvdW50LCBib29sKiBtZXRhZGF0YV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiogZXh0cmFfZGF0YSkgY29uc3QgPSAwOwotCi0gIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2coKSBjb25zdCB7IHJldHVybiBtZWRpYV9sb2dfOyB9Ci0KLSBwcml2YXRlOgotICBlbnVtIFN0YXRlIHsgVU5JTklUSUFMSVpFRCwgSU5JVElBTElaRUQsIFBBUlNFX0VSUk9SIH07Ci0KLSAgdm9pZCBDaGFuZ2VTdGF0ZShTdGF0ZSBzdGF0ZSk7Ci0KLSAgLy8gUGFyc2luZyBmdW5jdGlvbnMgZm9yIHZhcmlvdXMgYnl0ZSBzdHJlYW0gZWxlbWVudHMuICB8ZGF0YXwgJiB8c2l6ZXwKLSAgLy8gZGVzY3JpYmUgdGhlIGRhdGEgYXZhaWxhYmxlIGZvciBwYXJzaW5nLgotICAvLwotICAvLyBSZXR1cm5zOgotICAvLyA+IDAgOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBhcnNlZC4KLSAgLy8gICAwIDogSWYgbW9yZSBkYXRhIGlzIG5lZWRlZCB0byBwYXJzZSB0aGUgZW50aXJlIGVsZW1lbnQuCi0gIC8vIDwgMCA6IEFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4KLSAgaW50IFBhcnNlRnJhbWUoY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUsIEJ1ZmZlclF1ZXVlKiBidWZmZXJzKTsKLSAgaW50IFBhcnNlSWNlY2FzdEhlYWRlcihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0gIGludCBQYXJzZUlEM3YxKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLSAgaW50IFBhcnNlSUQzdjIoY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpOwotCi0gIC8vIFBhcnNlcyBhbiBJRDN2MiAic3luYyBzYWZlIiBpbnRlZ2VyLgotICAvLyB8cmVhZGVyfCAtIEEgQml0UmVhZGVyIHRvIHJlYWQgZnJvbS4KLSAgLy8gfHZhbHVlfCAtIFNldCB0byB0aGUgaW50ZWdlciB2YWx1ZSByZWFkLCBpZiB0cnVlIGlzIHJldHVybmVkLgotICAvLwotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGludGVnZXIgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIHx2YWx1ZXwKLSAgLy8gd2FzIHNldC4KLSAgLy8gUmV0dXJucyBmYWxzZSBpZiBhbiBlcnJvciB3YXMgZW5jb3VudGVyZWQuIFRoZSBzdGF0ZSBvZiB8dmFsdWV8IGlzCi0gIC8vIHVuZGVmaW5lZCB3aGVuIGZhbHNlIGlzIHJldHVybmVkLgotICBib29sIFBhcnNlU3luY1NhZmVJbnQoQml0UmVhZGVyKiByZWFkZXIsIGludDMyX3QqIHZhbHVlKTsKLQotICAvLyBTY2FucyB8ZGF0YXwgZm9yIHRoZSBuZXh0IHZhbGlkIHN0YXJ0IGNvZGUuCi0gIC8vIFJldHVybnM6Ci0gIC8vID4gMCA6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUgc2tpcHBlZCB0byByZWFjaCB0aGUKLSAgLy8gICAgICAgbmV4dCBzdGFydCBjb2RlLi4KLSAgLy8gICAwIDogSWYgYSB2YWxpZCBzdGFydCBjb2RlIHdhcyBub3QgZm91bmQgYW5kIG1vcmUgZGF0YSBpcyBuZWVkZWQuCi0gIC8vIDwgMCA6IEFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgcGFyc2luZy4KLSAgaW50IEZpbmROZXh0VmFsaWRTdGFydENvZGUoY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpIGNvbnN0OwotCi0gIC8vIFNlbmRzIHRoZSBidWZmZXJzIGluIHxidWZmZXJzfCB0byB8bmV3X2J1ZmZlcnNfY2JffCBhbmQgdGhlbiBjbGVhcnMKLSAgLy8gfGJ1ZmZlcnN8LgotICAvLyBJZiB8ZW5kX29mX3NlZ21lbnR8IGlzIHNldCB0byB0cnVlLCB0aGVuIHxlbmRfb2Zfc2VnbWVudF9jYl98IGlzIGNhbGxlZAotICAvLyBhZnRlciB8bmV3X2J1ZmZlcnNfY2JffCB0byBzaWduYWwgdGhhdCB0aGVzZSBidWZmZXJzIHJlcHJlc2VudCB0aGUgZW5kIG9mIGEKLSAgLy8gbWVkaWEgc2VnbWVudC4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXJzIGFyZSBzZW50IHN1Y2Nlc3NmdWxseS4KLSAgYm9vbCBTZW5kQnVmZmVycyhCdWZmZXJRdWV1ZSogYnVmZmVycywgYm9vbCBlbmRfb2Zfc2VnbWVudCk7Ci0KLSAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yXzsKLQotICBTdGF0ZSBzdGF0ZV87Ci0KLSAgSW5pdENCIGluaXRfY2JfOwotICBOZXdDb25maWdDQiBjb25maWdfY2JfOwotICBOZXdCdWZmZXJzQ0IgbmV3X2J1ZmZlcnNfY2JfOwotICBOZXdNZWRpYVNlZ21lbnRDQiBuZXdfc2VnbWVudF9jYl87Ci0gIEVuZE1lZGlhU2VnbWVudENCIGVuZF9vZl9zZWdtZW50X2NiXzsKLSAgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4gbWVkaWFfbG9nXzsKLQotICBCeXRlUXVldWUgcXVldWVfOwotCi0gIEF1ZGlvRGVjb2RlckNvbmZpZyBjb25maWdfOwotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9UaW1lc3RhbXBIZWxwZXI+IHRpbWVzdGFtcF9oZWxwZXJfOwotICBib29sIGluX21lZGlhX3NlZ21lbnRfOwotICBjb25zdCB1aW50MzJfdCBzdGFydF9jb2RlX21hc2tfOwotICBjb25zdCBBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjXzsKLSAgY29uc3QgaW50IGNvZGVjX2RlbGF5XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTVBFR0F1ZGlvU3RyZWFtUGFyc2VyQmFzZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19NUEVHX01QRUdfQVVESU9fU1RSRUFNX1BBUlNFUl9CQVNFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL2NsdXN0ZXJfYnVpbGRlci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmU1YjljLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmgiCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RhdGFfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGF0aWMgY29uc3QgdWludDhfdCBrQ2x1c3RlckhlYWRlcltdID0gewotICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDTFVTVEVSIElECi0gICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgIC8vIGNsdXN0ZXIoc2l6ZSA9IDApCi0gICAgMHhFNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRpbWVjb2RlIElECi0gICAgMHg4OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpbWVjb2RlKHNpemU9OCkKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgLy8gdGltZWNvZGUgdmFsdWUKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtTaW1wbGVCbG9ja0hlYWRlcltdID0gewotICAgIDB4QTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbGVCbG9jayBJRAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBTaW1wbGVCbG9jayhzaXplID0gMCkKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtCbG9ja0dyb3VwSGVhZGVyW10gPSB7Ci0gICAgMHhBMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJsb2NrR3JvdXAgSUQKLSAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgLy8gQmxvY2tHcm91cChzaXplID0gMCkKLSAgICAweDlCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2tEdXJhdGlvbiBJRAotICAgIDB4ODgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbG9ja0R1cmF0aW9uKHNpemUgPSA4KQotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBkdXJhdGlvbgotICAgIDB4QTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbG9jayBJRAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBCbG9jayhzaXplID0gMCkKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtCbG9ja0dyb3VwSGVhZGVyV2l0aG91dEJsb2NrRHVyYXRpb25bXSA9IHsKLSAgICAweEEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2tHcm91cCBJRAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBCbG9ja0dyb3VwKHNpemUgPSAwKQotICAgIDB4QTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCbG9jayBJRAotICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBCbG9jayhzaXplID0gMCkKLX07Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGtCbG9ja0dyb3VwUmVmZXJlbmNlQmxvY2tbXSA9IHsKLSAgICAweEZCLCAgICAgICAgLy8gUmVmZXJlbmNlQmxvY2sgSUQKLSAgICAweDgxLCAweDAwLCAgLy8gUmVmZXJlbmNlQmxvY2sgKHNpemU9MSwgdmFsdWU9MCkKLX07Ci0KLWVudW0gewotICBrQ2x1c3RlclNpemVPZmZzZXQgPSA0LAotICBrQ2x1c3RlclRpbWVjb2RlT2Zmc2V0ID0gMTQsCi0KLSAga1NpbXBsZUJsb2NrU2l6ZU9mZnNldCA9IDEsCi0KLSAga0Jsb2NrR3JvdXBTaXplT2Zmc2V0ID0gMSwKLSAga0Jsb2NrR3JvdXBXaXRob3V0QmxvY2tEdXJhdGlvbkJsb2NrU2l6ZU9mZnNldCA9IDEwLAotICBrQmxvY2tHcm91cER1cmF0aW9uT2Zmc2V0ID0gMTEsCi0gIGtCbG9ja0dyb3VwQmxvY2tTaXplT2Zmc2V0ID0gMjAsCi0KLSAga0luaXRpYWxCdWZmZXJTaXplID0gMzI3NjgsCi19OwotCi1DbHVzdGVyOjpDbHVzdGVyKHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGRhdGEsIGludCBzaXplKQotICAgIDogZGF0YV8oc3RkOjptb3ZlKGRhdGEpKSwgc2l6ZV8oc2l6ZSkge30KLUNsdXN0ZXI6On5DbHVzdGVyKCkge30KLQotQ2x1c3RlckJ1aWxkZXI6OkNsdXN0ZXJCdWlsZGVyKCkgeyBSZXNldCgpOyB9Ci1DbHVzdGVyQnVpbGRlcjo6fkNsdXN0ZXJCdWlsZGVyKCkge30KLQotdm9pZCBDbHVzdGVyQnVpbGRlcjo6U2V0Q2x1c3RlclRpbWVjb2RlKGludDY0X3QgY2x1c3Rlcl90aW1lY29kZSkgewotICBEQ0hFQ0tfRVEoY2x1c3Rlcl90aW1lY29kZV8sIC0xKTsKLQotICBjbHVzdGVyX3RpbWVjb2RlXyA9IGNsdXN0ZXJfdGltZWNvZGU7Ci0KLSAgLy8gV3JpdGUgdGhlIHRpbWVjb2RlIGludG8gdGhlIGhlYWRlci4KLSAgdWludDhfdCogYnVmID0gYnVmZmVyXy5nZXQoKSArIGtDbHVzdGVyVGltZWNvZGVPZmZzZXQ7Ci0gIGZvciAoaW50IGkgPSA3OyBpID49IDA7IC0taSkgewotICAgIGJ1ZltpXSA9IGNsdXN0ZXJfdGltZWNvZGUgJiAweGZmOwotICAgIGNsdXN0ZXJfdGltZWNvZGUgPj49IDg7Ci0gIH0KLX0KLQotdm9pZCBDbHVzdGVyQnVpbGRlcjo6QWRkU2ltcGxlQmxvY2soaW50IHRyYWNrX251bSwgaW50NjRfdCB0aW1lY29kZSwgaW50IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpIHsKLSAgaW50IGJsb2NrX3NpemUgPSBzaXplICsgNDsKLSAgaW50IGJ5dGVzX25lZWRlZCA9IHNpemVvZihrU2ltcGxlQmxvY2tIZWFkZXIpICsgYmxvY2tfc2l6ZTsKLSAgaWYgKGJ5dGVzX25lZWRlZCA+IChidWZmZXJfc2l6ZV8gLSBieXRlc191c2VkXykpIEV4dGVuZEJ1ZmZlcihieXRlc19uZWVkZWQpOwotCi0gIHVpbnQ4X3QqIGJ1ZiA9IGJ1ZmZlcl8uZ2V0KCkgKyBieXRlc191c2VkXzsKLSAgaW50IGJsb2NrX29mZnNldCA9IGJ5dGVzX3VzZWRfOwotICBtZW1jcHkoYnVmLCBrU2ltcGxlQmxvY2tIZWFkZXIsIHNpemVvZihrU2ltcGxlQmxvY2tIZWFkZXIpKTsKLSAgVXBkYXRlVUludDY0KGJsb2NrX29mZnNldCArIGtTaW1wbGVCbG9ja1NpemVPZmZzZXQsIGJsb2NrX3NpemUpOwotICBidWYgKz0gc2l6ZW9mKGtTaW1wbGVCbG9ja0hlYWRlcik7Ci0KLSAgV3JpdGVCbG9jayhidWYsIHRyYWNrX251bSwgdGltZWNvZGUsIGZsYWdzLCBkYXRhLCBzaXplKTsKLQotICBieXRlc191c2VkXyArPSBieXRlc19uZWVkZWQ7Ci19Ci0KLXZvaWQgQ2x1c3RlckJ1aWxkZXI6OkFkZEJsb2NrR3JvdXAoaW50IHRyYWNrX251bSwgaW50NjRfdCB0aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR1cmF0aW9uLCBpbnQgZmxhZ3MsIGJvb2wgaXNfa2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBBZGRCbG9ja0dyb3VwSW50ZXJuYWwodHJhY2tfbnVtLCB0aW1lY29kZSwgdHJ1ZSwgZHVyYXRpb24sIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgaXNfa2V5X2ZyYW1lLCBkYXRhLCBzaXplKTsKLX0KLQotdm9pZCBDbHVzdGVyQnVpbGRlcjo6QWRkQmxvY2tHcm91cFdpdGhvdXRCbG9ja0R1cmF0aW9uKAotICAgIGludCB0cmFja19udW0sIGludDY0X3QgdGltZWNvZGUsIGludCBmbGFncywgYm9vbCBpc19rZXlfZnJhbWUsCi0gICAgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpIHsKLSAgQWRkQmxvY2tHcm91cEludGVybmFsKHRyYWNrX251bSwgdGltZWNvZGUsIGZhbHNlLCAwLCBmbGFncywgaXNfa2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgc2l6ZSk7Ci19Ci0KLXZvaWQgQ2x1c3RlckJ1aWxkZXI6OkFkZEJsb2NrR3JvdXBJbnRlcm5hbChpbnQgdHJhY2tfbnVtLCBpbnQ2NF90IHRpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZV9ibG9ja19kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHVyYXRpb24sIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2tleV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBpbnQgYmxvY2tfc2l6ZSA9IHNpemUgKyA0OwotICBpbnQgYnl0ZXNfbmVlZGVkID0gYmxvY2tfc2l6ZTsKLSAgaWYgKGluY2x1ZGVfYmxvY2tfZHVyYXRpb24pIHsKLSAgICBieXRlc19uZWVkZWQgKz0gc2l6ZW9mKGtCbG9ja0dyb3VwSGVhZGVyKTsKLSAgfSBlbHNlIHsKLSAgICBieXRlc19uZWVkZWQgKz0gc2l6ZW9mKGtCbG9ja0dyb3VwSGVhZGVyV2l0aG91dEJsb2NrRHVyYXRpb24pOwotICB9Ci0gIGlmICghaXNfa2V5X2ZyYW1lKSB7Ci0gICAgYnl0ZXNfbmVlZGVkICs9IHNpemVvZihrQmxvY2tHcm91cFJlZmVyZW5jZUJsb2NrKTsKLSAgfQotCi0gIGludCBibG9ja19ncm91cF9zaXplID0gYnl0ZXNfbmVlZGVkIC0gOTsKLQotICBpZiAoYnl0ZXNfbmVlZGVkID4gKGJ1ZmZlcl9zaXplXyAtIGJ5dGVzX3VzZWRfKSkgRXh0ZW5kQnVmZmVyKGJ5dGVzX25lZWRlZCk7Ci0KLSAgdWludDhfdCogYnVmID0gYnVmZmVyXy5nZXQoKSArIGJ5dGVzX3VzZWRfOwotICBpbnQgYmxvY2tfZ3JvdXBfb2Zmc2V0ID0gYnl0ZXNfdXNlZF87Ci0gIGlmIChpbmNsdWRlX2Jsb2NrX2R1cmF0aW9uKSB7Ci0gICAgbWVtY3B5KGJ1Ziwga0Jsb2NrR3JvdXBIZWFkZXIsIHNpemVvZihrQmxvY2tHcm91cEhlYWRlcikpOwotICAgIFVwZGF0ZVVJbnQ2NChibG9ja19ncm91cF9vZmZzZXQgKyBrQmxvY2tHcm91cER1cmF0aW9uT2Zmc2V0LCBkdXJhdGlvbik7Ci0gICAgVXBkYXRlVUludDY0KGJsb2NrX2dyb3VwX29mZnNldCArIGtCbG9ja0dyb3VwQmxvY2tTaXplT2Zmc2V0LCBibG9ja19zaXplKTsKLSAgICBidWYgKz0gc2l6ZW9mKGtCbG9ja0dyb3VwSGVhZGVyKTsKLSAgfSBlbHNlIHsKLSAgICBtZW1jcHkoYnVmLCBrQmxvY2tHcm91cEhlYWRlcldpdGhvdXRCbG9ja0R1cmF0aW9uLAotICAgICAgICAgICAgICAgICBzaXplb2Yoa0Jsb2NrR3JvdXBIZWFkZXJXaXRob3V0QmxvY2tEdXJhdGlvbikpOwotICAgIFVwZGF0ZVVJbnQ2NCgKLSAgICAgICAgYmxvY2tfZ3JvdXBfb2Zmc2V0ICsga0Jsb2NrR3JvdXBXaXRob3V0QmxvY2tEdXJhdGlvbkJsb2NrU2l6ZU9mZnNldCwKLSAgICAgICAgYmxvY2tfc2l6ZSk7Ci0gICAgYnVmICs9IHNpemVvZihrQmxvY2tHcm91cEhlYWRlcldpdGhvdXRCbG9ja0R1cmF0aW9uKTsKLSAgfQotCi0gIFVwZGF0ZVVJbnQ2NChibG9ja19ncm91cF9vZmZzZXQgKyBrQmxvY2tHcm91cFNpemVPZmZzZXQsIGJsb2NrX2dyb3VwX3NpemUpOwotCi0gIC8vIE1ha2Ugc3VyZSB0aGUgNCBtb3N0LXNpZ25pZmljYW50IGJpdHMgYXJlIDAuCi0gIC8vIGh0dHA6Ly93d3cubWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9pbmRleC5odG1sI2Jsb2NrX3N0cnVjdHVyZQotICBmbGFncyAmPSAweDBmOwotCi0gIFdyaXRlQmxvY2soYnVmLCB0cmFja19udW0sIHRpbWVjb2RlLCBmbGFncywgZGF0YSwgc2l6ZSk7Ci0gIGJ1ZiArPSBzaXplICsgNDsKLQotICBpZiAoIWlzX2tleV9mcmFtZSkgewotICAgIG1lbWNweShidWYsIGtCbG9ja0dyb3VwUmVmZXJlbmNlQmxvY2ssCi0gICAgICAgICAgICAgICAgIHNpemVvZihrQmxvY2tHcm91cFJlZmVyZW5jZUJsb2NrKSk7Ci0gIH0KLQotICBieXRlc191c2VkXyArPSBieXRlc19uZWVkZWQ7Ci19Ci0KLXZvaWQgQ2x1c3RlckJ1aWxkZXI6OldyaXRlQmxvY2sodWludDhfdCogYnVmLCBpbnQgdHJhY2tfbnVtLCBpbnQ2NF90IHRpbWVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIERDSEVDS19HRSh0cmFja19udW0sIDApOwotICBEQ0hFQ0tfTEUodHJhY2tfbnVtLCAxMjYpOwotICBEQ0hFQ0tfR0UoZmxhZ3MsIDApOwotICBEQ0hFQ0tfTEUoZmxhZ3MsIDB4ZmYpOwotICBEQ0hFQ0soZGF0YSk7Ci0gIERDSEVDS19HVChzaXplLCAwKTsKLSAgRENIRUNLX05FKGNsdXN0ZXJfdGltZWNvZGVfLCAtMSk7Ci0KLSAgaW50NjRfdCB0aW1lY29kZV9kZWx0YSA9IHRpbWVjb2RlIC0gY2x1c3Rlcl90aW1lY29kZV87Ci0gIERDSEVDS19HRSh0aW1lY29kZV9kZWx0YSwgLTMyNzY4KTsKLSAgRENIRUNLX0xFKHRpbWVjb2RlX2RlbHRhLCAzMjc2Nyk7Ci0KLSAgYnVmWzBdID0gMHg4MCB8ICh0cmFja19udW0gJiAweDdGKTsKLSAgYnVmWzFdID0gKHRpbWVjb2RlX2RlbHRhID4+IDgpICYgMHhmZjsKLSAgYnVmWzJdID0gdGltZWNvZGVfZGVsdGEgJiAweGZmOwotICBidWZbM10gPSBmbGFncyAmIDB4ZmY7Ci0gIG1lbWNweShidWYgKyA0LCBkYXRhLCBzaXplKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IENsdXN0ZXJCdWlsZGVyOjpGaW5pc2goKSB7Ci0gIERDSEVDS19ORShjbHVzdGVyX3RpbWVjb2RlXywgLTEpOwotCi0gIFVwZGF0ZVVJbnQ2NChrQ2x1c3RlclNpemVPZmZzZXQsIGJ5dGVzX3VzZWRfIC0gKGtDbHVzdGVyU2l6ZU9mZnNldCArIDgpKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gcmV0KG5ldyBDbHVzdGVyKHN0ZDo6bW92ZShidWZmZXJfKSwgYnl0ZXNfdXNlZF8pKTsKLSAgUmVzZXQoKTsKLSAgcmV0dXJuIHN0ZDo6bW92ZShyZXQpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gQ2x1c3RlckJ1aWxkZXI6OkZpbmlzaFdpdGhVbmtub3duU2l6ZSgpIHsKLSAgRENIRUNLX05FKGNsdXN0ZXJfdGltZWNvZGVfLCAtMSk7Ci0KLSAgVXBkYXRlVUludDY0KGtDbHVzdGVyU2l6ZU9mZnNldCwga1dlYk1Vbmtub3duU2l6ZSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IHJldChuZXcgQ2x1c3RlcihzdGQ6Om1vdmUoYnVmZmVyXyksIGJ5dGVzX3VzZWRfKSk7Ci0gIFJlc2V0KCk7Ci0gIHJldHVybiBzdGQ6Om1vdmUocmV0KTsKLX0KLQotdm9pZCBDbHVzdGVyQnVpbGRlcjo6UmVzZXQoKSB7Ci0gIGJ1ZmZlcl9zaXplXyA9IGtJbml0aWFsQnVmZmVyU2l6ZTsKLSAgYnVmZmVyXy5yZXNldChuZXcgdWludDhfdFtidWZmZXJfc2l6ZV9dKTsKLSAgbWVtY3B5KGJ1ZmZlcl8uZ2V0KCksIGtDbHVzdGVySGVhZGVyLCBzaXplb2Yoa0NsdXN0ZXJIZWFkZXIpKTsKLSAgYnl0ZXNfdXNlZF8gPSBzaXplb2Yoa0NsdXN0ZXJIZWFkZXIpOwotICBjbHVzdGVyX3RpbWVjb2RlXyA9IC0xOwotfQotCi12b2lkIENsdXN0ZXJCdWlsZGVyOjpFeHRlbmRCdWZmZXIoaW50IGJ5dGVzX25lZWRlZCkgewotICBpbnQgbmV3X2J1ZmZlcl9zaXplID0gMiAqIGJ1ZmZlcl9zaXplXzsKLQotICB3aGlsZSAoKG5ld19idWZmZXJfc2l6ZSAtIGJ5dGVzX3VzZWRfKSA8IGJ5dGVzX25lZWRlZCkgbmV3X2J1ZmZlcl9zaXplICo9IDI7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gbmV3X2J1ZmZlcihuZXcgdWludDhfdFtuZXdfYnVmZmVyX3NpemVdKTsKLQotICBtZW1jcHkobmV3X2J1ZmZlci5nZXQoKSwgYnVmZmVyXy5nZXQoKSwgYnl0ZXNfdXNlZF8pOwotICBidWZmZXJfID0gc3RkOjptb3ZlKG5ld19idWZmZXIpOwotICBidWZmZXJfc2l6ZV8gPSBuZXdfYnVmZmVyX3NpemU7Ci19Ci0KLXZvaWQgQ2x1c3RlckJ1aWxkZXI6OlVwZGF0ZVVJbnQ2NChpbnQgb2Zmc2V0LCBpbnQ2NF90IHZhbHVlKSB7Ci0gIERDSEVDS19MRShvZmZzZXQgKyA3LCBidWZmZXJfc2l6ZV8pOwotICB1aW50OF90KiBidWYgPSBidWZmZXJfLmdldCgpICsgb2Zmc2V0OwotCi0gIC8vIEZpbGwgdGhlIGxhc3QgNyBieXRlcyBvZiBzaXplIGZpZWxkIGluIGJpZy1lbmRpYW4gb3JkZXIuCi0gIGZvciAoaW50IGkgPSA3OyBpID4gMDsgaS0tKSB7Ci0gICAgYnVmW2ldID0gdmFsdWUgJiAweGZmOwotICAgIHZhbHVlID4+PSA4OwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9jbHVzdGVyX2J1aWxkZXIuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDU2OTIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9jbHVzdGVyX2J1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX0NMVVNURVJfQlVJTERFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX0NMVVNURVJfQlVJTERFUl9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgQ2x1c3RlciB7Ci0gcHVibGljOgotICBDbHVzdGVyKHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGRhdGEsIGludCBzaXplKTsKLSAgfkNsdXN0ZXIoKTsKLQotICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV8uZ2V0KCk7IH0KLSAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gcHJpdmF0ZToKLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZGF0YV87Ci0gIGludCBzaXplXzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoQ2x1c3Rlcik7Ci19OwotCi1jbGFzcyBDbHVzdGVyQnVpbGRlciB7Ci0gcHVibGljOgotICBDbHVzdGVyQnVpbGRlcigpOwotICB+Q2x1c3RlckJ1aWxkZXIoKTsKLQotICB2b2lkIFNldENsdXN0ZXJUaW1lY29kZShpbnQ2NF90IGNsdXN0ZXJfdGltZWNvZGUpOwotICB2b2lkIEFkZFNpbXBsZUJsb2NrKGludCB0cmFja19udW0sIGludDY0X3QgdGltZWNvZGUsIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0gIHZvaWQgQWRkQmxvY2tHcm91cChpbnQgdHJhY2tfbnVtLCBpbnQ2NF90IHRpbWVjb2RlLCBpbnQgZHVyYXRpb24sIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfa2V5X2ZyYW1lLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0gIHZvaWQgQWRkQmxvY2tHcm91cFdpdGhvdXRCbG9ja0R1cmF0aW9uKGludCB0cmFja19udW0sIGludDY0X3QgdGltZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywgYm9vbCBpc19rZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gRmluaXNoKCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBGaW5pc2hXaXRoVW5rbm93blNpemUoKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgQWRkQmxvY2tHcm91cEludGVybmFsKGludCB0cmFja19udW0sIGludDY0X3QgdGltZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZV9ibG9ja19kdXJhdGlvbiwgaW50IGR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIGJvb2wgaXNfa2V5X2ZyYW1lLCBjb25zdCB1aW50OF90KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSk7Ci0gIHZvaWQgUmVzZXQoKTsKLSAgdm9pZCBFeHRlbmRCdWZmZXIoaW50IGJ5dGVzX25lZWRlZCk7Ci0gIHZvaWQgVXBkYXRlVUludDY0KGludCBvZmZzZXQsIGludDY0X3QgdmFsdWUpOwotICB2b2lkIFdyaXRlQmxvY2sodWludDhfdCogYnVmLCBpbnQgdHJhY2tfbnVtLCBpbnQ2NF90IHRpbWVjb2RlLCBpbnQgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gYnVmZmVyXzsKLSAgaW50IGJ1ZmZlcl9zaXplXzsKLSAgaW50IGJ5dGVzX3VzZWRfOwotICBpbnQ2NF90IGNsdXN0ZXJfdGltZWNvZGVfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDbHVzdGVyQnVpbGRlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX0NMVVNURVJfQlVJTERFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQwODZlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vb3B1c19wYWNrZXRfYnVpbGRlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL29wdXNfcGFja2V0X2J1aWxkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1PcHVzUGFja2V0OjpPcHVzUGFja2V0KHVpbnQ4X3QgY29uZmlnLCB1aW50OF90IGZyYW1lX2NvdW50LCBib29sIGlzX1ZCUikgewotICBEQ0hFQ0tfR0UoY29uZmlnLCAwKTsKLSAgRENIRUNLX0xUKGNvbmZpZywga051bVBvc3NpYmxlT3B1c0NvbmZpZ3MpOwotICBEQ0hFQ0tfR0UoZnJhbWVfY291bnQsIGtNaW5PcHVzUGFja2V0RnJhbWVDb3VudCk7Ci0gIERDSEVDS19MRShmcmFtZV9jb3VudCwga01heE9wdXNQYWNrZXRGcmFtZUNvdW50KTsKLQotICBkdXJhdGlvbl9tc18gPSBmcmFtZV9jb3VudCAqCi0gICAgICAgICAgICAgICAgIFdlYk1DbHVzdGVyUGFyc2VyOjprT3B1c0ZyYW1lRHVyYXRpb25zTXVbY29uZmlnXSAvCi0gICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0PigxMDAwKTsKLQotICB1aW50OF90IGZyYW1lX2NvdW50X2NvZGU7Ci0gIHVpbnQ4X3QgZnJhbWVfY291bnRfYnl0ZTsKLQotICBpZiAoZnJhbWVfY291bnQgPT0gMSkgewotICAgIGZyYW1lX2NvdW50X2NvZGUgPSAwOwotICB9IGVsc2UgaWYgKGZyYW1lX2NvdW50ID09IDIpIHsKLSAgICBmcmFtZV9jb3VudF9jb2RlID0gaXNfVkJSID8gMiA6IDE7Ci0gIH0gZWxzZSB7Ci0gICAgZnJhbWVfY291bnRfY29kZSA9IDM7Ci0gICAgZnJhbWVfY291bnRfYnl0ZSA9IChpc19WQlIgPyAxIDw8IDcgOiAwKSB8IGZyYW1lX2NvdW50OwotICB9Ci0KLSAgLy8gQWxsIG9wdXMgcGFja2V0cyBtdXN0IGhhdmUgVE9DIGJ5dGUuCi0gIHVpbnQ4X3Qgb3B1c190b2NfYnl0ZSA9IChjb25maWcgPDwgMykgfCBmcmFtZV9jb3VudF9jb2RlOwotICBkYXRhXy5wdXNoX2JhY2sob3B1c190b2NfYnl0ZSk7Ci0KLSAgLy8gRm9yIGNvZGUgMyBwYWNrZXRzLCB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpcyBzaWduYWxlZCBpbiB0aGUgImZyYW1lCi0gIC8vIGNvdW50IGJ5dGUiLgotICBpZiAoZnJhbWVfY291bnRfY29kZSA9PSAzKSB7Ci0gICAgZGF0YV8ucHVzaF9iYWNrKGZyYW1lX2NvdW50X2J5dGUpOwotICB9Ci0KLSAgLy8gUGFja2V0IHdpbGwgb25seSBjb25mb3JtIHRvIGxheW91dCBzcGVjaWZpY2F0aW9uIGZvciB0aGUgVE9DIGJ5dGUKLSAgLy8gYW5kIG9wdGlvbmFsIGZyYW1lIGNvdW50IGJ5dGVzIGFwcGVuZGVkIGFib3ZlLiBUaGlzIGxhc3QgYnl0ZQotICAvLyBpcyBwdXJlbHkgZHVtbXkgcGFkZGluZyB3aGVyZSBmcmFtZSBzaXplIGRhdGEgb3IgZW5jb2RlZCBkYXRhIG1pZ2h0Ci0gIC8vIG90aGVyd2lzZSBzdGFydC4KLSAgZGF0YV8ucHVzaF9iYWNrKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KDApKTsKLX0KLQotT3B1c1BhY2tldDo6fk9wdXNQYWNrZXQoKSB7fQotCi1jb25zdCB1aW50OF90KiBPcHVzUGFja2V0OjpkYXRhKCkgY29uc3QgeyByZXR1cm4gJihkYXRhX1swXSk7IH0KLQotaW50IE9wdXNQYWNrZXQ6OnNpemUoKSBjb25zdCB7IHJldHVybiBkYXRhXy5zaXplKCk7IH0KLQotZG91YmxlIE9wdXNQYWNrZXQ6OmR1cmF0aW9uX21zKCkgY29uc3QgeyByZXR1cm4gZHVyYXRpb25fbXNfOyB9Ci0KLXN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxPcHVzUGFja2V0Pj4gQnVpbGRBbGxPcHVzUGFja2V0cygpIHsKLSAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE9wdXNQYWNrZXQ+PiBvcHVzX3BhY2tldHM7Ci0KLSAgZm9yIChpbnQgZnJhbWVfY291bnQgPSBrTWluT3B1c1BhY2tldEZyYW1lQ291bnQ7Ci0gICAgICAgZnJhbWVfY291bnQgPD0ga01heE9wdXNQYWNrZXRGcmFtZUNvdW50OyBmcmFtZV9jb3VudCsrKSB7Ci0gICAgZm9yIChpbnQgb3B1c19jb25maWdfbnVtID0gMDsgb3B1c19jb25maWdfbnVtIDwga051bVBvc3NpYmxlT3B1c0NvbmZpZ3M7Ci0gICAgICAgICBvcHVzX2NvbmZpZ19udW0rKykgewotICAgICAgYm9vbCBpc19WQlIgPSBmYWxzZTsKLSAgICAgIG9wdXNfcGFja2V0cy5wdXNoX2JhY2soc3RkOjp1bmlxdWVfcHRyPE9wdXNQYWNrZXQ+KAotICAgICAgICAgIG5ldyBPcHVzUGFja2V0KG9wdXNfY29uZmlnX251bSwgZnJhbWVfY291bnQsIGlzX1ZCUikpKTsKLQotICAgICAgaWYgKGZyYW1lX2NvdW50ID49IDIpIHsKLSAgICAgICAgLy8gQWRkIGFub3RoZXIgcGFja2V0IHdpdGggVkJSIGZsYWcgdG9nZ2xlZC4gRm9yIGZyYW1lIGNvdW50cyA+PSAyLAotICAgICAgICAvLyBWQlIgdHJpZ2dlcnMgY2hhbmdlcyB0byBwYWNrZXQgZnJhbWluZy4KLSAgICAgICAgaXNfVkJSID0gdHJ1ZTsKLSAgICAgICAgb3B1c19wYWNrZXRzLnB1c2hfYmFjayhzdGQ6OnVuaXF1ZV9wdHI8T3B1c1BhY2tldD4oCi0gICAgICAgICAgICBuZXcgT3B1c1BhY2tldChvcHVzX2NvbmZpZ19udW0sIGZyYW1lX2NvdW50LCBpc19WQlIpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHN0ZDo6bW92ZShvcHVzX3BhY2tldHMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vb3B1c19wYWNrZXRfYnVpbGRlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczN2VlZGEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fT1BVU19QQUNLRVRfQlVJTERFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX09QVVNfUEFDS0VUX0JVSUxERVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBGcm9tIE9wdXMgUkZDLiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3MTYjcGFnZS0xNAotZW51bSBPcHVzQ29uc3RhbnRzIHsKLSAga051bVBvc3NpYmxlT3B1c0NvbmZpZ3MgPSAzMiwKLSAga01pbk9wdXNQYWNrZXRGcmFtZUNvdW50ID0gMSwKLSAga01heE9wdXNQYWNrZXRGcmFtZUNvdW50ID0gNDgKLX07Ci0KLWNsYXNzIE9wdXNQYWNrZXQgewotIHB1YmxpYzoKLSAgT3B1c1BhY2tldCh1aW50OF90IGNvbmZpZywgdWludDhfdCBmcmFtZV9jb3VudCwgYm9vbCBpc19WQlIpOwotICB+T3B1c1BhY2tldCgpOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdDsKLSAgaW50IHNpemUoKSBjb25zdDsKLSAgZG91YmxlIGR1cmF0aW9uX21zKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhXzsKLSAgZG91YmxlIGR1cmF0aW9uX21zXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oT3B1c1BhY2tldCk7Ci19OwotCi0vLyBCdWlsZHMgYW4gZXhoYXVzdGl2ZSBjb2xsZWN0aW9uIG9mIE9wdXMgcGFja2V0IGNvbmZpZ3VyYXRpb25zLgotc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE9wdXNQYWNrZXQ+PiBCdWlsZEFsbE9wdXNQYWNrZXRzKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fT1BVU19QQUNLRVRfQlVJTERFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vdHJhY2tzX2J1aWxkZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyN2Q0M2EuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDM1MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3RyYWNrc19idWlsZGVyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFJldHVybnMgc2l6ZSBvZiBhbiBpbnRlZ2VyLCBmb3JtYXR0ZWQgdXNpbmcgTWF0cm9za2Egc2VyaWFsaXphdGlvbi4KLXN0YXRpYyBpbnQgR2V0VUludE1rdlNpemUodWludDY0X3QgdmFsdWUpIHsKLSAgaWYgKHZhbHVlIDwgMHgwN0ZVTEwpIHJldHVybiAxOwotICBpZiAodmFsdWUgPCAweDAzRkZGVUxMKSByZXR1cm4gMjsKLSAgaWYgKHZhbHVlIDwgMHgwMUZGRkZGVUxMKSByZXR1cm4gMzsKLSAgaWYgKHZhbHVlIDwgMHgwRkZGRkZGRlVMTCkgcmV0dXJuIDQ7Ci0gIGlmICh2YWx1ZSA8IDB4MDdGRkZGRkZGRlVMTCkgcmV0dXJuIDU7Ci0gIGlmICh2YWx1ZSA8IDB4MDNGRkZGRkZGRkZGVUxMKSByZXR1cm4gNjsKLSAgaWYgKHZhbHVlIDwgMHgwMUZGRkZGRkZGRkZGRlVMTCkgcmV0dXJuIDc7Ci0gIHJldHVybiA4OwotfQotCi0vLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgcmVxdWlyZWQgdG8gc2VyaWFsaXplIGFuIGludGVnZXIgdmFsdWUuCi1zdGF0aWMgaW50IEdldFVJbnRTaXplKHVpbnQ2NF90IHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA8IDB4MDEwMFVMTCkgcmV0dXJuIDE7Ci0gIGlmICh2YWx1ZSA8IDB4MDEwMDAwVUxMKSByZXR1cm4gMjsKLSAgaWYgKHZhbHVlIDwgMHgwMTAwMDAwMFVMTCkgcmV0dXJuIDM7Ci0gIGlmICh2YWx1ZSA8IDB4MDEwMDAwMDAwMFVMTCkgcmV0dXJuIDQ7Ci0gIGlmICh2YWx1ZSA8IDB4MDEwMDAwMDAwMDAwVUxMKSByZXR1cm4gNTsKLSAgaWYgKHZhbHVlIDwgMHgwMTAwMDAwMDAwMDAwMFVMTCkgcmV0dXJuIDY7Ci0gIGlmICh2YWx1ZSA8IDB4MDEwMDAwMDAwMDAwMDAwMFVMTCkgcmV0dXJuIDc7Ci0gIHJldHVybiA4OwotfQotCi1zdGF0aWMgaW50IE1hc3RlckVsZW1lbnRTaXplKGludCBlbGVtZW50X2lkLCBpbnQgcGF5bG9hZF9zaXplKSB7Ci0gIHJldHVybiBHZXRVSW50U2l6ZShlbGVtZW50X2lkKSArIEdldFVJbnRNa3ZTaXplKHBheWxvYWRfc2l6ZSkgKyBwYXlsb2FkX3NpemU7Ci19Ci0KLXN0YXRpYyBpbnQgVUludEVsZW1lbnRTaXplKGludCBlbGVtZW50X2lkLCB1aW50NjRfdCB2YWx1ZSkgewotICByZXR1cm4gR2V0VUludFNpemUoZWxlbWVudF9pZCkgKyAxICsgR2V0VUludFNpemUodmFsdWUpOwotfQotCi1zdGF0aWMgaW50IERvdWJsZUVsZW1lbnRTaXplKGludCBlbGVtZW50X2lkKSB7Ci0gIHJldHVybiBHZXRVSW50U2l6ZShlbGVtZW50X2lkKSArIDEgKyA4OwotfQotCi1zdGF0aWMgaW50IFN0cmluZ0VsZW1lbnRTaXplKGludCBlbGVtZW50X2lkLCBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpIHsKLSAgcmV0dXJuIEdldFVJbnRTaXplKGVsZW1lbnRfaWQpICsgR2V0VUludE1rdlNpemUodmFsdWUubGVuZ3RoKCkpICsKLSAgICAgICAgIHZhbHVlLmxlbmd0aCgpOwotfQotCi1zdGF0aWMgdm9pZCBTZXJpYWxpemVJbnQodWludDhfdCoqIGJ1Zl9wdHIsIGludCogYnVmX3NpemVfcHRyLCBpbnQ2NF90IHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKSB7Ci0gIHVpbnQ4X3QqJiBidWYgPSAqYnVmX3B0cjsKLSAgaW50JiBidWZfc2l6ZSA9ICpidWZfc2l6ZV9wdHI7Ci0KLSAgZm9yIChpbnQgaWR4ID0gMTsgaWR4IDw9IHNpemU7ICsraWR4KSB7Ci0gICAgKmJ1ZisrID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gKChzaXplIC0gaWR4KSAqIDgpKTsKLSAgICAtLWJ1Zl9zaXplOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIFNlcmlhbGl6ZURvdWJsZSh1aW50OF90KiogYnVmX3B0ciwgaW50KiBidWZfc2l6ZV9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlKSB7Ci0gIC8vIFVzZSBhIHVuaW9uIHRvIGNvbnZlcnQgfHZhbHVlfCB0byBuYXRpdmUgZW5kaWFuIGludGVnZXIgYml0IHBhdHRlcm4uCi0gIHVuaW9uIHsKLSAgICBkb3VibGUgc3JjOwotICAgIGludDY0X3QgZHN0OwotICB9IHRtcDsKLSAgdG1wLnNyYyA9IHZhbHVlOwotCi0gIC8vIFdyaXRlIHRoZSBieXRlcyBmcm9tIG5hdGl2ZSBlbmRpYW4gfHRtcC5kc3R8IHRvIGJpZy1lbmRpYW4gZm9ybSBpbiB8YnVmfC4KLSAgU2VyaWFsaXplSW50KGJ1Zl9wdHIsIGJ1Zl9zaXplX3B0ciwgdG1wLmRzdCwgOCk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlRWxlbWVudElkKHVpbnQ4X3QqKiBidWYsIGludCogYnVmX3NpemUsIGludCBlbGVtZW50X2lkKSB7Ci0gIFNlcmlhbGl6ZUludChidWYsIGJ1Zl9zaXplLCBlbGVtZW50X2lkLCBHZXRVSW50U2l6ZShlbGVtZW50X2lkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlVUludCh1aW50OF90KiogYnVmLCBpbnQqIGJ1Zl9zaXplLCB1aW50NjRfdCB2YWx1ZSkgewotICBjb25zdCBpbnQgc2l6ZSA9IEdldFVJbnRNa3ZTaXplKHZhbHVlKTsKLSAgdmFsdWUgfD0gKDFVTEwgPDwgKHNpemUgKiA3KSk7ICAvLyBNYXRyb3NrYSBmb3JtYXR0aW5nCi0gIFNlcmlhbGl6ZUludChidWYsIGJ1Zl9zaXplLCB2YWx1ZSwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlTWFzdGVyRWxlbWVudCh1aW50OF90KiogYnVmLCBpbnQqIGJ1Zl9zaXplLCBpbnQgZWxlbWVudF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF5bG9hZF9zaXplKSB7Ci0gIFdyaXRlRWxlbWVudElkKGJ1ZiwgYnVmX3NpemUsIGVsZW1lbnRfaWQpOwotICBXcml0ZVVJbnQoYnVmLCBidWZfc2l6ZSwgcGF5bG9hZF9zaXplKTsKLX0KLQotc3RhdGljIHZvaWQgV3JpdGVVSW50RWxlbWVudCh1aW50OF90KiogYnVmLCBpbnQqIGJ1Zl9zaXplLCBpbnQgZWxlbWVudF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsdWUpIHsKLSAgV3JpdGVFbGVtZW50SWQoYnVmLCBidWZfc2l6ZSwgZWxlbWVudF9pZCk7Ci0KLSAgY29uc3QgaW50IHNpemUgPSBHZXRVSW50U2l6ZSh2YWx1ZSk7Ci0gIFdyaXRlVUludChidWYsIGJ1Zl9zaXplLCBzaXplKTsKLQotICBTZXJpYWxpemVJbnQoYnVmLCBidWZfc2l6ZSwgdmFsdWUsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBXcml0ZURvdWJsZUVsZW1lbnQodWludDhfdCoqIGJ1ZiwgaW50KiBidWZfc2l6ZSwgaW50IGVsZW1lbnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlKSB7Ci0gIFdyaXRlRWxlbWVudElkKGJ1ZiwgYnVmX3NpemUsIGVsZW1lbnRfaWQpOwotICBXcml0ZVVJbnQoYnVmLCBidWZfc2l6ZSwgOCk7Ci0gIFNlcmlhbGl6ZURvdWJsZShidWYsIGJ1Zl9zaXplLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFdyaXRlU3RyaW5nRWxlbWVudCh1aW50OF90KiogYnVmX3B0ciwgaW50KiBidWZfc2l6ZV9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVsZW1lbnRfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgewotICB1aW50OF90KiYgYnVmID0gKmJ1Zl9wdHI7Ci0gIGludCYgYnVmX3NpemUgPSAqYnVmX3NpemVfcHRyOwotCi0gIFdyaXRlRWxlbWVudElkKCZidWYsICZidWZfc2l6ZSwgZWxlbWVudF9pZCk7Ci0KLSAgY29uc3QgdWludDY0X3Qgc2l6ZSA9IHZhbHVlLmxlbmd0aCgpOwotICBXcml0ZVVJbnQoJmJ1ZiwgJmJ1Zl9zaXplLCBzaXplKTsKLQotICBtZW1jcHkoYnVmLCB2YWx1ZS5kYXRhKCksIHNpemUpOwotICBidWYgKz0gc2l6ZTsKLSAgYnVmX3NpemUgLT0gc2l6ZTsKLX0KLQotVHJhY2tzQnVpbGRlcjo6VHJhY2tzQnVpbGRlcihib29sIGFsbG93X2ludmFsaWRfdmFsdWVzKQotICAgIDogYWxsb3dfaW52YWxpZF92YWx1ZXNfKGFsbG93X2ludmFsaWRfdmFsdWVzKSB7fQotVHJhY2tzQnVpbGRlcjo6VHJhY2tzQnVpbGRlcigpIDogYWxsb3dfaW52YWxpZF92YWx1ZXNfKGZhbHNlKSB7fQotVHJhY2tzQnVpbGRlcjo6flRyYWNrc0J1aWxkZXIoKSB7fQotCi12b2lkIFRyYWNrc0J1aWxkZXI6OkFkZFZpZGVvVHJhY2soaW50IHRyYWNrX251bSwgdWludDY0X3QgdHJhY2tfdWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlZmF1bHRfZHVyYXRpb24sIGludCB2aWRlb19waXhlbF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmlkZW9fcGl4ZWxfaGVpZ2h0KSB7Ci0gIEFkZFRyYWNrSW50ZXJuYWwodHJhY2tfbnVtLCBrV2ViTVRyYWNrVHlwZVZpZGVvLCB0cmFja191aWQsIGNvZGVjX2lkLCBuYW1lLAotICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCBkZWZhdWx0X2R1cmF0aW9uLCB2aWRlb19waXhlbF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICB2aWRlb19waXhlbF9oZWlnaHQsIC0xLCAtMSk7Ci19Ci0KLXZvaWQgVHJhY2tzQnVpbGRlcjo6QWRkQXVkaW9UcmFjayhpbnQgdHJhY2tfbnVtLCB1aW50NjRfdCB0cmFja191aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmYXVsdF9kdXJhdGlvbiwgaW50IGF1ZGlvX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhdWRpb19zYW1wbGluZ19mcmVxdWVuY3kpIHsKLSAgQWRkVHJhY2tJbnRlcm5hbCh0cmFja19udW0sIGtXZWJNVHJhY2tUeXBlQXVkaW8sIHRyYWNrX3VpZCwgY29kZWNfaWQsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UsIGRlZmF1bHRfZHVyYXRpb24sIC0xLCAtMSwgYXVkaW9fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5KTsKLX0KLQotdm9pZCBUcmFja3NCdWlsZGVyOjpBZGRUZXh0VHJhY2soaW50IHRyYWNrX251bSwgdWludDY0X3QgdHJhY2tfdWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIHsKLSAgQWRkVHJhY2tJbnRlcm5hbCh0cmFja19udW0sIGtXZWJNVHJhY2tUeXBlU3VidGl0bGVzT3JDYXB0aW9ucywgdHJhY2tfdWlkLAotICAgICAgICAgICAgICAgICAgIGNvZGVjX2lkLCBuYW1lLCBsYW5ndWFnZSwgLTEsIC0xLCAtMSwgLTEsIC0xKTsKLX0KLQotc3RkOjp2ZWN0b3I8dWludDhfdD4gVHJhY2tzQnVpbGRlcjo6RmluaXNoKCkgewotICAvLyBBbGxvY2F0ZSB0aGUgc3RvcmFnZQotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gIGJ1ZmZlci5yZXNpemUoR2V0VHJhY2tzU2l6ZSgpKTsKLQotICAvLyBQb3B1bGF0ZSB0aGUgc3RvcmFnZSB3aXRoIGEgdHJhY2tzIGhlYWRlcgotICBXcml0ZVRyYWNrcygmYnVmZmVyWzBdLCBidWZmZXIuc2l6ZSgpKTsKLQotICByZXR1cm4gYnVmZmVyOwotfQotCi12b2lkIFRyYWNrc0J1aWxkZXI6OkFkZFRyYWNrSW50ZXJuYWwoCi0gICAgaW50IHRyYWNrX251bSwgaW50IHRyYWNrX3R5cGUsIHVpbnQ2NF90IHRyYWNrX3VpZCwKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwgaW50IGRlZmF1bHRfZHVyYXRpb24sIGludCB2aWRlb19waXhlbF93aWR0aCwKLSAgICBpbnQgdmlkZW9fcGl4ZWxfaGVpZ2h0LCBpbnQgYXVkaW9fY2hhbm5lbHMsCi0gICAgZG91YmxlIGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeSkgewotICB0cmFja3NfLnB1c2hfYmFjayhUcmFjayh0cmFja19udW0sIHRyYWNrX3R5cGUsIHRyYWNrX3VpZCwgY29kZWNfaWQsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLCBkZWZhdWx0X2R1cmF0aW9uLCB2aWRlb19waXhlbF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9fcGl4ZWxfaGVpZ2h0LCBhdWRpb19jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5LCBhbGxvd19pbnZhbGlkX3ZhbHVlc18pKTsKLX0KLQotaW50IFRyYWNrc0J1aWxkZXI6OkdldFRyYWNrc1NpemUoKSBjb25zdCB7Ci0gIHJldHVybiBNYXN0ZXJFbGVtZW50U2l6ZShrV2ViTUlkVHJhY2tzLCBHZXRUcmFja3NQYXlsb2FkU2l6ZSgpKTsKLX0KLQotaW50IFRyYWNrc0J1aWxkZXI6OkdldFRyYWNrc1BheWxvYWRTaXplKCkgY29uc3QgewotICBpbnQgcGF5bG9hZF9zaXplID0gMDsKLQotICBmb3IgKFRyYWNrTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRyID0gdHJhY2tzXy5iZWdpbigpOyBpdHIgIT0gdHJhY2tzXy5lbmQoKTsKLSAgICAgICArK2l0cikgewotICAgIHBheWxvYWRfc2l6ZSArPSBpdHItPkdldFNpemUoKTsKLSAgfQotCi0gIHJldHVybiBwYXlsb2FkX3NpemU7Ci19Ci0KLXZvaWQgVHJhY2tzQnVpbGRlcjo6V3JpdGVUcmFja3ModWludDhfdCogYnVmLCBpbnQgYnVmX3NpemUpIGNvbnN0IHsKLSAgV3JpdGVNYXN0ZXJFbGVtZW50KCZidWYsICZidWZfc2l6ZSwga1dlYk1JZFRyYWNrcywgR2V0VHJhY2tzUGF5bG9hZFNpemUoKSk7Ci0KLSAgZm9yIChUcmFja0xpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IHRyYWNrc18uYmVnaW4oKTsgaXRyICE9IHRyYWNrc18uZW5kKCk7Ci0gICAgICAgKytpdHIpIHsKLSAgICBpdHItPldyaXRlKCZidWYsICZidWZfc2l6ZSk7Ci0gIH0KLX0KLQotVHJhY2tzQnVpbGRlcjo6VHJhY2s6OlRyYWNrKGludCB0cmFja19udW0sIGludCB0cmFja190eXBlLCB1aW50NjRfdCB0cmFja191aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwgaW50IGRlZmF1bHRfZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZpZGVvX3BpeGVsX3dpZHRoLCBpbnQgdmlkZW9fcGl4ZWxfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdWRpb19jaGFubmVscywgZG91YmxlIGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X2ludmFsaWRfdmFsdWVzKQotICAgIDogdHJhY2tfbnVtXyh0cmFja19udW0pLAotICAgICAgdHJhY2tfdHlwZV8odHJhY2tfdHlwZSksCi0gICAgICB0cmFja191aWRfKHRyYWNrX3VpZCksCi0gICAgICBjb2RlY19pZF8oY29kZWNfaWQpLAotICAgICAgbmFtZV8obmFtZSksCi0gICAgICBsYW5ndWFnZV8obGFuZ3VhZ2UpLAotICAgICAgZGVmYXVsdF9kdXJhdGlvbl8oZGVmYXVsdF9kdXJhdGlvbiksCi0gICAgICB2aWRlb19waXhlbF93aWR0aF8odmlkZW9fcGl4ZWxfd2lkdGgpLAotICAgICAgdmlkZW9fcGl4ZWxfaGVpZ2h0Xyh2aWRlb19waXhlbF9oZWlnaHQpLAotICAgICAgYXVkaW9fY2hhbm5lbHNfKGF1ZGlvX2NoYW5uZWxzKSwKLSAgICAgIGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeV8oYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5KSB7Ci0gIGlmICghYWxsb3dfaW52YWxpZF92YWx1ZXMpIHsKLSAgICBDSEVDS19HVCh0cmFja19udW1fLCAwKTsKLSAgICBDSEVDS19HVCh0cmFja190eXBlXywgMCk7Ci0gICAgQ0hFQ0tfTFQodHJhY2tfdHlwZV8sIDI1NSk7Ci0gICAgQ0hFQ0tfR1QodHJhY2tfdWlkXywgMCk7Ci0gICAgaWYgKHRyYWNrX3R5cGUgIT0ga1dlYk1UcmFja1R5cGVWaWRlbyAmJgotICAgICAgICB0cmFja190eXBlICE9IGtXZWJNVHJhY2tUeXBlQXVkaW8pIHsKLSAgICAgIENIRUNLX0VRKGRlZmF1bHRfZHVyYXRpb25fLCAtMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIENIRUNLKGRlZmF1bHRfZHVyYXRpb25fID09IC0xIHx8IGRlZmF1bHRfZHVyYXRpb25fID4gMCk7Ci0gICAgfQotCi0gICAgaWYgKHRyYWNrX3R5cGUgPT0ga1dlYk1UcmFja1R5cGVWaWRlbykgewotICAgICAgQ0hFQ0tfR1QodmlkZW9fcGl4ZWxfd2lkdGhfLCAwKTsKLSAgICAgIENIRUNLX0dUKHZpZGVvX3BpeGVsX2hlaWdodF8sIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICBDSEVDS19FUSh2aWRlb19waXhlbF93aWR0aF8sIC0xKTsKLSAgICAgIENIRUNLX0VRKHZpZGVvX3BpeGVsX2hlaWdodF8sIC0xKTsKLSAgICB9Ci0KLSAgICBpZiAodHJhY2tfdHlwZSA9PSBrV2ViTVRyYWNrVHlwZUF1ZGlvKSB7Ci0gICAgICBDSEVDS19HVChhdWRpb19jaGFubmVsc18sIDApOwotICAgICAgQ0hFQ0tfR1QoYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5XywgMC4wKTsKLSAgICB9IGVsc2UgewotICAgICAgQ0hFQ0tfRVEoYXVkaW9fY2hhbm5lbHNfLCAtMSk7Ci0gICAgICBDSEVDS19FUShhdWRpb19zYW1wbGluZ19mcmVxdWVuY3lfLCAtMS4wKTsKLSAgICB9Ci0gIH0KLX0KLQotaW50IFRyYWNrc0J1aWxkZXI6OlRyYWNrOjpHZXRTaXplKCkgY29uc3QgewotICByZXR1cm4gTWFzdGVyRWxlbWVudFNpemUoa1dlYk1JZFRyYWNrRW50cnksIEdldFBheWxvYWRTaXplKCkpOwotfQotCi1pbnQgVHJhY2tzQnVpbGRlcjo6VHJhY2s6OkdldFZpZGVvUGF5bG9hZFNpemUoKSBjb25zdCB7Ci0gIGludCBwYXlsb2FkX3NpemUgPSAwOwotCi0gIGlmICh2aWRlb19waXhlbF93aWR0aF8gPj0gMCkKLSAgICBwYXlsb2FkX3NpemUgKz0gVUludEVsZW1lbnRTaXplKGtXZWJNSWRQaXhlbFdpZHRoLCB2aWRlb19waXhlbF93aWR0aF8pOwotICBpZiAodmlkZW9fcGl4ZWxfaGVpZ2h0XyA+PSAwKQotICAgIHBheWxvYWRfc2l6ZSArPSBVSW50RWxlbWVudFNpemUoa1dlYk1JZFBpeGVsSGVpZ2h0LCB2aWRlb19waXhlbF9oZWlnaHRfKTsKLQotICByZXR1cm4gcGF5bG9hZF9zaXplOwotfQotCi1pbnQgVHJhY2tzQnVpbGRlcjo6VHJhY2s6OkdldEF1ZGlvUGF5bG9hZFNpemUoKSBjb25zdCB7Ci0gIGludCBwYXlsb2FkX3NpemUgPSAwOwotCi0gIGlmIChhdWRpb19jaGFubmVsc18gPj0gMCkKLSAgICBwYXlsb2FkX3NpemUgKz0gVUludEVsZW1lbnRTaXplKGtXZWJNSWRDaGFubmVscywgYXVkaW9fY2hhbm5lbHNfKTsKLSAgaWYgKGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeV8gPj0gMCkKLSAgICBwYXlsb2FkX3NpemUgKz0gRG91YmxlRWxlbWVudFNpemUoa1dlYk1JZFNhbXBsaW5nRnJlcXVlbmN5KTsKLQotICByZXR1cm4gcGF5bG9hZF9zaXplOwotfQotCi1pbnQgVHJhY2tzQnVpbGRlcjo6VHJhY2s6OkdldFBheWxvYWRTaXplKCkgY29uc3QgewotICBpbnQgc2l6ZSA9IDA7Ci0KLSAgc2l6ZSArPSBVSW50RWxlbWVudFNpemUoa1dlYk1JZFRyYWNrTnVtYmVyLCB0cmFja19udW1fKTsKLSAgc2l6ZSArPSBVSW50RWxlbWVudFNpemUoa1dlYk1JZFRyYWNrVHlwZSwgdHJhY2tfdHlwZV8pOwotICBzaXplICs9IFVJbnRFbGVtZW50U2l6ZShrV2ViTUlkVHJhY2tVSUQsIHRyYWNrX3VpZF8pOwotCi0gIGlmIChkZWZhdWx0X2R1cmF0aW9uXyA+PSAwKQotICAgIHNpemUgKz0gVUludEVsZW1lbnRTaXplKGtXZWJNSWREZWZhdWx0RHVyYXRpb24sIGRlZmF1bHRfZHVyYXRpb25fKTsKLQotICBpZiAoIWNvZGVjX2lkXy5lbXB0eSgpKSBzaXplICs9IFN0cmluZ0VsZW1lbnRTaXplKGtXZWJNSWRDb2RlY0lELCBjb2RlY19pZF8pOwotCi0gIGlmICghbmFtZV8uZW1wdHkoKSkgc2l6ZSArPSBTdHJpbmdFbGVtZW50U2l6ZShrV2ViTUlkTmFtZSwgbmFtZV8pOwotCi0gIGlmICghbGFuZ3VhZ2VfLmVtcHR5KCkpIHNpemUgKz0gU3RyaW5nRWxlbWVudFNpemUoa1dlYk1JZExhbmd1YWdlLCBsYW5ndWFnZV8pOwotCi0gIGlmIChHZXRWaWRlb1BheWxvYWRTaXplKCkgPiAwKSB7Ci0gICAgc2l6ZSArPSBNYXN0ZXJFbGVtZW50U2l6ZShrV2ViTUlkVmlkZW8sIEdldFZpZGVvUGF5bG9hZFNpemUoKSk7Ci0gIH0KLQotICBpZiAoR2V0QXVkaW9QYXlsb2FkU2l6ZSgpID4gMCkgewotICAgIHNpemUgKz0gTWFzdGVyRWxlbWVudFNpemUoa1dlYk1JZEF1ZGlvLCBHZXRBdWRpb1BheWxvYWRTaXplKCkpOwotICB9Ci0KLSAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgVHJhY2tzQnVpbGRlcjo6VHJhY2s6OldyaXRlKHVpbnQ4X3QqKiBidWYsIGludCogYnVmX3NpemUpIGNvbnN0IHsKLSAgV3JpdGVNYXN0ZXJFbGVtZW50KGJ1ZiwgYnVmX3NpemUsIGtXZWJNSWRUcmFja0VudHJ5LCBHZXRQYXlsb2FkU2l6ZSgpKTsKLQotICBXcml0ZVVJbnRFbGVtZW50KGJ1ZiwgYnVmX3NpemUsIGtXZWJNSWRUcmFja051bWJlciwgdHJhY2tfbnVtXyk7Ci0gIFdyaXRlVUludEVsZW1lbnQoYnVmLCBidWZfc2l6ZSwga1dlYk1JZFRyYWNrVHlwZSwgdHJhY2tfdHlwZV8pOwotICBXcml0ZVVJbnRFbGVtZW50KGJ1ZiwgYnVmX3NpemUsIGtXZWJNSWRUcmFja1VJRCwgdHJhY2tfdWlkXyk7Ci0KLSAgaWYgKGRlZmF1bHRfZHVyYXRpb25fID49IDApCi0gICAgV3JpdGVVSW50RWxlbWVudChidWYsIGJ1Zl9zaXplLCBrV2ViTUlkRGVmYXVsdER1cmF0aW9uLCBkZWZhdWx0X2R1cmF0aW9uXyk7Ci0KLSAgaWYgKCFjb2RlY19pZF8uZW1wdHkoKSkKLSAgICBXcml0ZVN0cmluZ0VsZW1lbnQoYnVmLCBidWZfc2l6ZSwga1dlYk1JZENvZGVjSUQsIGNvZGVjX2lkXyk7Ci0KLSAgaWYgKCFuYW1lXy5lbXB0eSgpKSBXcml0ZVN0cmluZ0VsZW1lbnQoYnVmLCBidWZfc2l6ZSwga1dlYk1JZE5hbWUsIG5hbWVfKTsKLQotICBpZiAoIWxhbmd1YWdlXy5lbXB0eSgpKQotICAgIFdyaXRlU3RyaW5nRWxlbWVudChidWYsIGJ1Zl9zaXplLCBrV2ViTUlkTGFuZ3VhZ2UsIGxhbmd1YWdlXyk7Ci0KLSAgaWYgKEdldFZpZGVvUGF5bG9hZFNpemUoKSA+IDApIHsKLSAgICBXcml0ZU1hc3RlckVsZW1lbnQoYnVmLCBidWZfc2l6ZSwga1dlYk1JZFZpZGVvLCBHZXRWaWRlb1BheWxvYWRTaXplKCkpOwotCi0gICAgaWYgKHZpZGVvX3BpeGVsX3dpZHRoXyA+PSAwKQotICAgICAgV3JpdGVVSW50RWxlbWVudChidWYsIGJ1Zl9zaXplLCBrV2ViTUlkUGl4ZWxXaWR0aCwgdmlkZW9fcGl4ZWxfd2lkdGhfKTsKLQotICAgIGlmICh2aWRlb19waXhlbF9oZWlnaHRfID49IDApCi0gICAgICBXcml0ZVVJbnRFbGVtZW50KGJ1ZiwgYnVmX3NpemUsIGtXZWJNSWRQaXhlbEhlaWdodCwgdmlkZW9fcGl4ZWxfaGVpZ2h0Xyk7Ci0gIH0KLQotICBpZiAoR2V0QXVkaW9QYXlsb2FkU2l6ZSgpID4gMCkgewotICAgIFdyaXRlTWFzdGVyRWxlbWVudChidWYsIGJ1Zl9zaXplLCBrV2ViTUlkQXVkaW8sIEdldEF1ZGlvUGF5bG9hZFNpemUoKSk7Ci0KLSAgICBpZiAoYXVkaW9fY2hhbm5lbHNfID49IDApCi0gICAgICBXcml0ZVVJbnRFbGVtZW50KGJ1ZiwgYnVmX3NpemUsIGtXZWJNSWRDaGFubmVscywgYXVkaW9fY2hhbm5lbHNfKTsKLQotICAgIGlmIChhdWRpb19zYW1wbGluZ19mcmVxdWVuY3lfID49IDApIHsKLSAgICAgIFdyaXRlRG91YmxlRWxlbWVudChidWYsIGJ1Zl9zaXplLCBrV2ViTUlkU2FtcGxpbmdGcmVxdWVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5Xyk7Ci0gICAgfQotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWIwNGUwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vdHJhY2tzX2J1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1RSQUNLU19CVUlMREVSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fVFJBQ0tTX0JVSUxERVJfSF8KLQotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFRyYWNrc0J1aWxkZXIgewotIHB1YmxpYzoKLSAgLy8gSWYgfGFsbG93X2ludmFsaWRfdmFsdWVzfCBpcyBmYWxzZSwgc29tZSBBZGRUcmFjaygpIHBhcmFtZXRlcnMgd2lsbCBiZQotICAvLyBiYXNpY2FsbHkgY2hlY2tlZCBhbmQgd2lsbCBhc3NlcnQgaWYgb3V0IG9mIHZhbGlkIHJhbmdlLiB8Y29kZWNfaWR8LAotICAvLyB8bmFtZXwsIHxsYW5ndWFnZXwgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgY29uc3RyYWludHMgYXJlIG5vdCBjaGVja2VkLgotICBleHBsaWNpdCBUcmFja3NCdWlsZGVyKGJvb2wgYWxsb3dfaW52YWxpZF92YWx1ZXMpOwotICBUcmFja3NCdWlsZGVyKCk7ICAvLyBTZXRzIHxhbGxvd19pbnZhbGlkX3ZhbHVlc3wgdG8gZmFsc2UuCi0gIH5UcmFja3NCdWlsZGVyKCk7Ci0KLSAgLy8gT25seSBhIG5vbi1uZWdhdGl2ZSB8ZGVmYXVsdF9kdXJhdGlvbnwgd2lsbCByZXN1bHQgaW4gYSBzZXJpYWxpemVkCi0gIC8vIGtXZWJNSWREZWZhdWx0RHVyYXRpb24gZWxlbWVudC4gTm90ZSwgMCBpcyBhbGxvd2VkIGhlcmUgZm9yIHRlc3Rpbmcgb25seQotICAvLyBpZiB8YWxsb3dfaW52YWxpZF92YWx1ZXNffCBpcyB0cnVlLCBzaW5jZSBpdCBpcyBhbiBpbGxlZ2FsIHZhbHVlIGZvcgotICAvLyBEZWZhdWx0RHVyYXRpb24uIFNpbWlsYXIgYXBwbGllcyB0byB8YXVkaW9fY2hhbm5lbHN8LAotICAvLyB8YXVkaW9fc2FtcGxpbmdfZnJlcXVlbmN5fCwgfHZpZGVvX3BpeGVsX3dpZHRofCBhbmQgfHZpZGVvX3BpeGVsX2hlaWdodHwuCi0gIHZvaWQgQWRkVmlkZW9UcmFjayhpbnQgdHJhY2tfbnVtLCB1aW50NjRfdCB0cmFja191aWQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLCBpbnQgZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIGludCB2aWRlb19waXhlbF93aWR0aCwgaW50IHZpZGVvX3BpeGVsX2hlaWdodCk7Ci0gIHZvaWQgQWRkQXVkaW9UcmFjayhpbnQgdHJhY2tfbnVtLCB1aW50NjRfdCB0cmFja191aWQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlLCBpbnQgZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBhdWRpb19jaGFubmVscywgZG91YmxlIGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeSk7Ci0gIHZvaWQgQWRkVGV4dFRyYWNrKGludCB0cmFja19udW0sIHVpbnQ2NF90IHRyYWNrX3VpZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGxhbmd1YWdlKTsKLQotICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBGaW5pc2goKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgQWRkVHJhY2tJbnRlcm5hbChpbnQgdHJhY2tfbnVtLCBpbnQgdHJhY2tfdHlwZSwgdWludDY0X3QgdHJhY2tfdWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBsYW5ndWFnZSwgaW50IGRlZmF1bHRfZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmlkZW9fcGl4ZWxfd2lkdGgsIGludCB2aWRlb19waXhlbF9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXVkaW9fY2hhbm5lbHMsIGRvdWJsZSBhdWRpb19zYW1wbGluZ19mcmVxdWVuY3kpOwotICBpbnQgR2V0VHJhY2tzU2l6ZSgpIGNvbnN0OwotICBpbnQgR2V0VHJhY2tzUGF5bG9hZFNpemUoKSBjb25zdDsKLSAgdm9pZCBXcml0ZVRyYWNrcyh1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3Q7Ci0KLSAgY2xhc3MgVHJhY2sgewotICAgcHVibGljOgotICAgIFRyYWNrKGludCB0cmFja19udW0sIGludCB0cmFja190eXBlLCB1aW50NjRfdCB0cmFja191aWQsCi0gICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UsIGludCBkZWZhdWx0X2R1cmF0aW9uLAotICAgICAgICAgIGludCB2aWRlb19waXhlbF93aWR0aCwgaW50IHZpZGVvX3BpeGVsX2hlaWdodCwgaW50IGF1ZGlvX2NoYW5uZWxzLAotICAgICAgICAgIGRvdWJsZSBhdWRpb19zYW1wbGluZ19mcmVxdWVuY3ksIGJvb2wgYWxsb3dfaW52YWxpZF92YWx1ZXMpOwotCi0gICAgaW50IEdldFNpemUoKSBjb25zdDsKLSAgICB2b2lkIFdyaXRlKHVpbnQ4X3QqKiBidWYsIGludCogYnVmX3NpemUpIGNvbnN0OwotCi0gICBwcml2YXRlOgotICAgIGludCBHZXRQYXlsb2FkU2l6ZSgpIGNvbnN0OwotICAgIGludCBHZXRWaWRlb1BheWxvYWRTaXplKCkgY29uc3Q7Ci0gICAgaW50IEdldEF1ZGlvUGF5bG9hZFNpemUoKSBjb25zdDsKLQotICAgIGludCB0cmFja19udW1fOwotICAgIGludCB0cmFja190eXBlXzsKLSAgICBpbnQgdHJhY2tfdWlkXzsKLSAgICBzdGQ6OnN0cmluZyBjb2RlY19pZF87Ci0gICAgc3RkOjpzdHJpbmcgbmFtZV87Ci0gICAgc3RkOjpzdHJpbmcgbGFuZ3VhZ2VfOwotICAgIGludCBkZWZhdWx0X2R1cmF0aW9uXzsKLSAgICBpbnQgdmlkZW9fcGl4ZWxfd2lkdGhfOwotICAgIGludCB2aWRlb19waXhlbF9oZWlnaHRfOwotICAgIGludCBhdWRpb19jaGFubmVsc187Ci0gICAgZG91YmxlIGF1ZGlvX3NhbXBsaW5nX2ZyZXF1ZW5jeV87Ci0gIH07Ci0KLSAgdHlwZWRlZiBzdGQ6Omxpc3Q8VHJhY2s+IFRyYWNrTGlzdDsKLSAgVHJhY2tMaXN0IHRyYWNrc187Ci0gIGJvb2wgYWxsb3dfaW52YWxpZF92YWx1ZXNfOwotCi0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUcmFja3NCdWlsZGVyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fVFJBQ0tTX0JVSUxERVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fYXVkaW9fY2xpZW50LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWNjY2ExLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2F1ZGlvX2NsaWVudC5oIgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9jaGFubmVsX2xheW91dC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1XZWJNQXVkaW9DbGllbnQ6OldlYk1BdWRpb0NsaWVudChjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQotICAgIDogbWVkaWFfbG9nXyhtZWRpYV9sb2cpIHsKLSAgUmVzZXQoKTsKLX0KLQotV2ViTUF1ZGlvQ2xpZW50Ojp+V2ViTUF1ZGlvQ2xpZW50KCkge30KLQotdm9pZCBXZWJNQXVkaW9DbGllbnQ6OlJlc2V0KCkgewotICBjaGFubmVsc18gPSAtMTsKLSAgc2FtcGxlc19wZXJfc2Vjb25kXyA9IC0xOwotICBvdXRwdXRfc2FtcGxlc19wZXJfc2Vjb25kXyA9IC0xOwotfQotCi1ib29sIFdlYk1BdWRpb0NsaWVudDo6SW5pdGlhbGl6ZUNvbmZpZygKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBjb2RlY19wcml2YXRlLAotICAgIGludDY0X3Qgc2Vla19wcmVyb2xsLCBpbnQ2NF90IGNvZGVjX2RlbGF5LAotICAgIGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIGVuY3J5cHRpb25fc2NoZW1lLCBBdWRpb0RlY29kZXJDb25maWcqIGNvbmZpZykgewotICBEQ0hFQ0soY29uZmlnKTsKLSAgU2FtcGxlRm9ybWF0IHNhbXBsZV9mb3JtYXQgPSBrU2FtcGxlRm9ybWF0UGxhbmFyRjMyOwotCi0gIEF1ZGlvQ29kZWMgYXVkaW9fY29kZWMgPSBrVW5rbm93bkF1ZGlvQ29kZWM7Ci0gIGlmIChjb2RlY19pZCA9PSAiQV9WT1JCSVMiKSB7Ci0gICAgYXVkaW9fY29kZWMgPSBrQ29kZWNWb3JiaXM7Ci0gIH0gZWxzZSBpZiAoY29kZWNfaWQgPT0gIkFfT1BVUyIpIHsKLSAgICBhdWRpb19jb2RlYyA9IGtDb2RlY09wdXM7Ci0gIH0gZWxzZSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiVW5zdXBwb3J0ZWQgYXVkaW8gY29kZWNfaWQgIiA8PCBjb2RlY19pZDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoc2FtcGxlc19wZXJfc2Vjb25kXyA8PSAwKSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gU2V0IGNoYW5uZWwgbGF5b3V0IGRlZmF1bHQgaWYgYSBDaGFubmVscyBlbGVtZW50IHdhcyBub3QgcHJlc2VudC4KLSAgaWYgKGNoYW5uZWxzXyA9PSAtMSkgY2hhbm5lbHNfID0gMTsKLQotICBDaGFubmVsTGF5b3V0IGNoYW5uZWxfbGF5b3V0ID0gR3Vlc3NDaGFubmVsTGF5b3V0KGNoYW5uZWxzXyk7Ci0KLSAgaWYgKGNoYW5uZWxfbGF5b3V0ID09IENIQU5ORUxfTEFZT1VUX1VOU1VQUE9SVEVEKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiVW5zdXBwb3J0ZWQgY2hhbm5lbCBjb3VudCAiIDw8IGNoYW5uZWxzXzsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpbnQgc2FtcGxlc19wZXJfc2Vjb25kID0gc2FtcGxlc19wZXJfc2Vjb25kXzsKLSAgaWYgKG91dHB1dF9zYW1wbGVzX3Blcl9zZWNvbmRfID4gMCkKLSAgICBzYW1wbGVzX3Blcl9zZWNvbmQgPSBvdXRwdXRfc2FtcGxlc19wZXJfc2Vjb25kXzsKLQotICAvLyBBbHdheXMgdXNlIDQ4a0h6IGZvciBPUFVTLiAgU2VlIHRoZSAiSW5wdXQgU2FtcGxlIFJhdGUiIHNlY3Rpb24gb2YgdGhlCi0gIC8vIHNwZWM6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LXRlcnJpYmVycnktb2dnb3B1cy0wMSNwYWdlLTExCi0gIGlmIChhdWRpb19jb2RlYyA9PSBrQ29kZWNPcHVzKSB7Ci0gICAgc2FtcGxlc19wZXJfc2Vjb25kID0gNDgwMDA7Ci0gICAgc2FtcGxlX2Zvcm1hdCA9IGtTYW1wbGVGb3JtYXRGMzI7Ci0gIH0KLQotICAvLyBDb252ZXJ0IHxjb2RlY19kZWxheXwgZnJvbSBuYW5vc2Vjb25kcyBpbnRvIGZyYW1lcy4KLSAgaW50IGNvZGVjX2RlbGF5X2luX2ZyYW1lcyA9IDA7Ci0gIGlmIChjb2RlY19kZWxheSAhPSAtMSkgewotICAgIGNvZGVjX2RlbGF5X2luX2ZyYW1lcyA9Ci0gICAgICAgIDAuNSArIHNhbXBsZXNfcGVyX3NlY29uZCAqIChzdGF0aWNfY2FzdDxkb3VibGU+KGNvZGVjX2RlbGF5KSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lOjprTmFub3NlY29uZHNQZXJTZWNvbmQpOwotICB9Ci0KLSAgY29uZmlnLT5Jbml0aWFsaXplKGF1ZGlvX2NvZGVjLCBzYW1wbGVfZm9ybWF0LCBjaGFubmVsX2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXNfcGVyX3NlY29uZCwgY29kZWNfcHJpdmF0ZSwgZW5jcnlwdGlvbl9zY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlZWtfcHJlcm9sbCAhPSAtMSA/IHNlZWtfcHJlcm9sbCA6IDApIC8gMTAwMCksCi0gICAgICAgICAgICAgICAgICAgICBjb2RlY19kZWxheV9pbl9mcmFtZXMpOwotICByZXR1cm4gY29uZmlnLT5Jc1ZhbGlkQ29uZmlnKCk7Ci19Ci0KLWJvb2wgV2ViTUF1ZGlvQ2xpZW50OjpPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgewotICBpZiAoaWQgPT0ga1dlYk1JZENoYW5uZWxzKSB7Ci0gICAgaWYgKGNoYW5uZWxzXyAhPSAtMSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJNdWx0aXBsZSB2YWx1ZXMgZm9yIGlkICIgPDwgc3RkOjpoZXggPDwgaWQgPDwgIiBzcGVjaWZpZWQuICgiCi0gICAgICAgICAgPDwgY2hhbm5lbHNfIDw8ICIgYW5kICIgPDwgdmFsIDw8ICIpIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjaGFubmVsc18gPSB2YWw7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViTUF1ZGlvQ2xpZW50OjpPbkZsb2F0KGludCBpZCwgZG91YmxlIHZhbCkgewotICBkb3VibGUqIGRzdCA9IE5VTEw7Ci0KLSAgc3dpdGNoIChpZCkgewotICAgIGNhc2Uga1dlYk1JZFNhbXBsaW5nRnJlcXVlbmN5OgotICAgICAgZHN0ID0gJnNhbXBsZXNfcGVyX3NlY29uZF87Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRPdXRwdXRTYW1wbGluZ0ZyZXF1ZW5jeToKLSAgICAgIGRzdCA9ICZvdXRwdXRfc2FtcGxlc19wZXJfc2Vjb25kXzsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlmICh2YWwgPD0gMCkgcmV0dXJuIGZhbHNlOwotCi0gIGlmICgqZHN0ICE9IC0xKSB7Ci0gICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICA8PCAiTXVsdGlwbGUgdmFsdWVzIGZvciBpZCAiIDw8IHN0ZDo6aGV4IDw8IGlkIDw8ICIgc3BlY2lmaWVkICgiIDw8ICpkc3QKLSAgICAgICAgPDwgIiBhbmQgIiA8PCB2YWwgPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpkc3QgPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk2YTQ3Ny4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fYXVkaW9fY2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0FVRElPX0NMSUVOVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fQVVESU9fQ0xJRU5UX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1jbGFzcyBBdWRpb0RlY29kZXJDb25maWc7Ci1jbGFzcyBFbmNyeXB0aW9uU2NoZW1lOwotCi0vLyBIZWxwZXIgY2xhc3MgdXNlZCB0byBwYXJzZSBhbiBBdWRpbyBlbGVtZW50IGluc2lkZSBhIFRyYWNrRW50cnkgZWxlbWVudC4KLWNsYXNzIFdlYk1BdWRpb0NsaWVudCA6IHB1YmxpYyBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFdlYk1BdWRpb0NsaWVudChjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLSAgfldlYk1BdWRpb0NsaWVudCgpIG92ZXJyaWRlOwotCi0gIC8vIFJlc2V0IHRoaXMgb2JqZWN0J3Mgc3RhdGUgc28gaXQgY2FuIHByb2Nlc3MgYSBuZXcgYXVkaW8gdHJhY2sgZWxlbWVudC4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIEluaXRpYWxpemUgfGNvbmZpZ3wgd2l0aCB0aGUgZGF0YSBpbiB8Y29kZWNfaWR8LCB8Y29kZWNfcHJpdmF0ZXwsCi0gIC8vIHxlbmNyeXB0aW9uX3NjaGVtZXwgYW5kIHRoZSBmaWVsZHMgcGFyc2VkIGZyb20gdGhlIGxhc3QgYXVkaW8gdHJhY2sgZWxlbWVudAotICAvLyB0aGlzIG9iamVjdCB3YXMgdXNlZCB0byBwYXJzZS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxjb25maWd8IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgd2FzIHVuZXhwZWN0ZWQgdmFsdWVzIGluIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzIG9yCi0gIC8vIGF1ZGlvIHRyYWNrIGVsZW1lbnQgZmllbGRzLgotICBib29sIEluaXRpYWxpemVDb25maWcoY29uc3Qgc3RkOjpzdHJpbmcmIGNvZGVjX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGNvZGVjX3ByaXZhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQ2NF90IHNlZWtfcHJlcm9sbCwgY29uc3QgaW50NjRfdCBjb2RlY19kZWxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIGVuY3J5cHRpb25fc2NoZW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9EZWNvZGVyQ29uZmlnKiBjb25maWcpOwotCi0gcHJpdmF0ZToKLSAgLy8gV2ViTVBhcnNlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgYm9vbCBPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25GbG9hdChpbnQgaWQsIGRvdWJsZSB2YWwpIG92ZXJyaWRlOwotCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0gIGludCBjaGFubmVsc187Ci0gIGRvdWJsZSBzYW1wbGVzX3Blcl9zZWNvbmRfOwotICBkb3VibGUgb3V0cHV0X3NhbXBsZXNfcGVyX3NlY29uZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1BdWRpb0NsaWVudCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fQVVESU9fQ0xJRU5UX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzUyNTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsODY1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3lzX2J5dGVvcmRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY3J5cHRfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL3dlYnZ0dF91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jcnlwdG9faGVscGVycy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV93ZWJ2dHRfcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNvbnN0IHVpbnQxNl90IFdlYk1DbHVzdGVyUGFyc2VyOjprT3B1c0ZyYW1lRHVyYXRpb25zTXVbXSA9IHsKLSAgICAxMDAwMCwgMjAwMDAsIDQwMDAwLCA2MDAwMCwgMTAwMDAsIDIwMDAwLCA0MDAwMCwgNjAwMDAsIDEwMDAwLCAyMDAwMCwgNDAwMDAsCi0gICAgNjAwMDAsIDEwMDAwLCAyMDAwMCwgMTAwMDAsIDIwMDAwLCAyNTAwLCAgNTAwMCwgIDEwMDAwLCAyMDAwMCwgMjUwMCwgIDUwMDAsCi0gICAgMTAwMDAsIDIwMDAwLCAyNTAwLCAgNTAwMCwgIDEwMDAwLCAyMDAwMCwgMjUwMCwgIDUwMDAsICAxMDAwMCwgMjAwMDB9OwotCi1lbnVtIHsKLSAgLy8gTGltaXRzIHRoZSBudW1iZXIgb2YgTUVESUFfTE9HKCkgY2FsbHMgaW4gdGhlIHBhdGggb2YgcmVhZGluZyBlbmNvZGVkCi0gIC8vIGR1cmF0aW9uIHRvIGF2b2lkIHNwYW1taW5nIGZvciBjb3JydXB0ZWQgZGF0YS4KLSAga01heER1cmF0aW9uRXJyb3JMb2dzID0gMTAsCi0gIC8vIExpbWl0cyB0aGUgbnVtYmVyIG9mIE1FRElBX0xPRygpIGNhbGxzIHdhcm5pbmcgdGhlIHVzZXIgdGhhdCBidWZmZXIKLSAgLy8gZHVyYXRpb25zIGhhdmUgYmVlbiBlc3RpbWF0ZWQuCi0gIGtNYXhEdXJhdGlvbkVzdGltYXRlTG9ncyA9IDEwLAotfTsKLQotV2ViTUNsdXN0ZXJQYXJzZXI6OldlYk1DbHVzdGVyUGFyc2VyKAotICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgaW50NjRfdCB0aW1lY29kZV9zY2FsZSwKLSAgICBpbnQgYXVkaW9fdHJhY2tfbnVtLCBiYXNlOjpUaW1lRGVsdGEgYXVkaW9fZGVmYXVsdF9kdXJhdGlvbiwKLSAgICBpbnQgdmlkZW9fdHJhY2tfbnVtLCBiYXNlOjpUaW1lRGVsdGEgdmlkZW9fZGVmYXVsdF9kdXJhdGlvbiwKLSAgICBjb25zdCBXZWJNVHJhY2tzUGFyc2VyOjpUZXh0VHJhY2tzJiB0ZXh0X3RyYWNrcywKLSAgICBjb25zdCBzdGQ6OnNldDxpbnQ2NF90PiYgaWdub3JlZF90cmFja3MsCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkLAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19lbmNyeXB0aW9uX2tleV9pZCwgY29uc3QgQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQotICAgIDogYnVmZmVyX2FsbG9jYXRvcl8oYnVmZmVyX2FsbG9jYXRvciksCi0gICAgICBudW1fZHVyYXRpb25fZXJyb3JzXygwKSwKLSAgICAgIHRpbWVjb2RlX211bHRpcGxpZXJfKHRpbWVjb2RlX3NjYWxlIC8gMTAwMC4wKSwKLSAgICAgIGlnbm9yZWRfdHJhY2tzXyhpZ25vcmVkX3RyYWNrcyksCi0gICAgICBhdWRpb19lbmNyeXB0aW9uX2tleV9pZF8oYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWQpLAotICAgICAgdmlkZW9fZW5jcnlwdGlvbl9rZXlfaWRfKHZpZGVvX2VuY3J5cHRpb25fa2V5X2lkKSwKLSAgICAgIGF1ZGlvX2NvZGVjXyhhdWRpb19jb2RlYyksCi0gICAgICBwYXJzZXJfKGtXZWJNSWRDbHVzdGVyLCB0aGlzKSwKLSAgICAgIGxhc3RfYmxvY2tfdGltZWNvZGVfKC0xKSwKLSAgICAgIGJsb2NrX2RhdGFfc2l6ZV8oLTEpLAotICAgICAgYmxvY2tfZHVyYXRpb25fKC0xKSwKLSAgICAgIGJsb2NrX2FkZF9pZF8oLTEpLAotICAgICAgYmxvY2tfYWRkaXRpb25hbF9kYXRhX3NpemVfKDApLAotICAgICAgZGlzY2FyZF9wYWRkaW5nXygtMSksCi0gICAgICBkaXNjYXJkX3BhZGRpbmdfc2V0XyhmYWxzZSksCi0gICAgICByZWZlcmVuY2VfYmxvY2tfc2V0XyhmYWxzZSksCi0gICAgICBjbHVzdGVyX3RpbWVjb2RlXygtMSksCi0gICAgICBjbHVzdGVyX3N0YXJ0X3RpbWVfKGtOb1RpbWVzdGFtcCksCi0gICAgICBjbHVzdGVyX2VuZGVkXyhmYWxzZSksCi0gICAgICBhdWRpb18oYXVkaW9fdHJhY2tfbnVtLCBmYWxzZSwgYXVkaW9fZGVmYXVsdF9kdXJhdGlvbiwgbWVkaWFfbG9nKSwKLSAgICAgIHZpZGVvXyh2aWRlb190cmFja19udW0sIHRydWUsIHZpZGVvX2RlZmF1bHRfZHVyYXRpb24sIG1lZGlhX2xvZyksCi0gICAgICByZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfKGtOb0RlY29kZVRpbWVzdGFtcCgpKSwKLSAgICAgIG1lZGlhX2xvZ18obWVkaWFfbG9nKSB7Ci0gIERDSEVDSyhidWZmZXJfYWxsb2NhdG9yXyk7Ci0gIGZvciAoV2ViTVRyYWNrc1BhcnNlcjo6VGV4dFRyYWNrczo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0ZXh0X3RyYWNrcy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfdHJhY2tzLmVuZCgpOyArK2l0KSB7Ci0gICAgdGV4dF90cmFja19tYXBfLmluc2VydChzdGQ6Om1ha2VfcGFpcigKLSAgICAgICAgaXQtPmZpcnN0LCBUcmFjayhpdC0+Zmlyc3QsIGZhbHNlLCBrTm9UaW1lc3RhbXAsIG1lZGlhX2xvZ18pKSk7Ci0gIH0KLX0KLQotV2ViTUNsdXN0ZXJQYXJzZXI6On5XZWJNQ2x1c3RlclBhcnNlcigpIHt9Ci0KLXZvaWQgV2ViTUNsdXN0ZXJQYXJzZXI6OlJlc2V0KCkgewotICBsYXN0X2Jsb2NrX3RpbWVjb2RlXyA9IC0xOwotICBjbHVzdGVyX3RpbWVjb2RlXyA9IC0xOwotICBjbHVzdGVyX3N0YXJ0X3RpbWVfID0ga05vVGltZXN0YW1wOwotICBjbHVzdGVyX2VuZGVkXyA9IGZhbHNlOwotICBwYXJzZXJfLlJlc2V0KCk7Ci0gIGF1ZGlvXy5SZXNldCgpOwotICB2aWRlb18uUmVzZXQoKTsKLSAgUmVzZXRUZXh0VHJhY2tzKCk7Ci0gIHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8gPSBrTm9EZWNvZGVUaW1lc3RhbXAoKTsKLX0KLQotaW50IFdlYk1DbHVzdGVyUGFyc2VyOjpQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSB7Ci0gIGF1ZGlvXy5DbGVhclJlYWR5QnVmZmVycygpOwotICB2aWRlb18uQ2xlYXJSZWFkeUJ1ZmZlcnMoKTsKLSAgQ2xlYXJUZXh0VHJhY2tSZWFkeUJ1ZmZlcnMoKTsKLSAgcmVhZHlfYnVmZmVyX3VwcGVyX2JvdW5kXyA9IGtOb0RlY29kZVRpbWVzdGFtcCgpOwotCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLlBhcnNlKGJ1Ziwgc2l6ZSk7Ci0KLSAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICBjbHVzdGVyX2VuZGVkXyA9IGZhbHNlOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBjbHVzdGVyX2VuZGVkXyA9IHBhcnNlcl8uSXNQYXJzaW5nQ29tcGxldGUoKTsKLSAgaWYgKGNsdXN0ZXJfZW5kZWRfKSB7Ci0gICAgLy8gSWYgdGhlcmUgd2VyZSBubyBidWZmZXJzIGluIHRoaXMgY2x1c3Rlciwgc2V0IHRoZSBjbHVzdGVyIHN0YXJ0IHRpbWUgdG8KLSAgICAvLyBiZSB0aGUgfGNsdXN0ZXJfdGltZWNvZGVffC4KLSAgICBpZiAoY2x1c3Rlcl9zdGFydF90aW1lXyA9PSBrTm9UaW1lc3RhbXApIHsKLSAgICAgIC8vIElmIHRoZSBjbHVzdGVyIGRpZCBub3QgZXZlbiBoYXZlIGEgfGNsdXN0ZXJfdGltZWNvZGVffCwgc2lnbmFsIHBhcnNlCi0gICAgICAvLyBlcnJvci4KLSAgICAgIGlmIChjbHVzdGVyX3RpbWVjb2RlXyA8IDApIHJldHVybiAtMTsKLQotICAgICAgY2x1c3Rlcl9zdGFydF90aW1lXyA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygKLSAgICAgICAgICBjbHVzdGVyX3RpbWVjb2RlXyAqIHRpbWVjb2RlX211bHRpcGxpZXJfKTsKLSAgICB9Ci0KLSAgICAvLyBSZXNldCB0aGUgcGFyc2VyIGlmIHdlJ3JlIGRvbmUgcGFyc2luZyBzbyB0aGF0Ci0gICAgLy8gaXQgaXMgcmVhZHkgdG8gYWNjZXB0IGFub3RoZXIgY2x1c3RlciBvbiB0aGUgbmV4dAotICAgIC8vIGNhbGwuCi0gICAgcGFyc2VyXy5SZXNldCgpOwotCi0gICAgbGFzdF9ibG9ja190aW1lY29kZV8gPSAtMTsKLSAgICBjbHVzdGVyX3RpbWVjb2RlXyA9IC0xOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3QgV2ViTUNsdXN0ZXJQYXJzZXI6OlRleHRCdWZmZXJRdWV1ZU1hcCYKLVdlYk1DbHVzdGVyUGFyc2VyOjpHZXRUZXh0QnVmZmVycygpIHsKLSAgaWYgKHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8gPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIFVwZGF0ZVJlYWR5QnVmZmVycygpOwotCi0gIC8vIFRyYW5zbGF0ZSBvdXIgfHRleHRfdHJhY2tfbWFwX3wgaW50byB8dGV4dF9idWZmZXJzX21hcF98LCBpbnNlcnRpbmcgcm93cyBpbgotICAvLyB0aGUgb3V0cHV0IG9ubHkgZm9yIG5vbi1lbXB0eSByZWFkeV9idWZmZXIoKSBxdWV1ZXMgaW4gfHRleHRfdHJhY2tfbWFwX3wuCi0gIHRleHRfYnVmZmVyc19tYXBfLmNsZWFyKCk7Ci0gIGZvciAoVGV4dFRyYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSB0ZXh0X3RyYWNrX21hcF8uYmVnaW4oKTsKLSAgICAgICBpdHIgIT0gdGV4dF90cmFja19tYXBfLmVuZCgpOyArK2l0cikgewotICAgIGNvbnN0IEJ1ZmZlclF1ZXVlJiB0ZXh0X2J1ZmZlcnMgPSBpdHItPnNlY29uZC5yZWFkeV9idWZmZXJzKCk7Ci0gICAgaWYgKCF0ZXh0X2J1ZmZlcnMuZW1wdHkoKSkKLSAgICAgIHRleHRfYnVmZmVyc19tYXBfLmluc2VydChzdGQ6Om1ha2VfcGFpcihpdHItPmZpcnN0LCB0ZXh0X2J1ZmZlcnMpKTsKLSAgfQotCi0gIHJldHVybiB0ZXh0X2J1ZmZlcnNfbWFwXzsKLX0KLQotdm9pZCBXZWJNQ2x1c3RlclBhcnNlcjo6R2V0QnVmZmVycyhTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwKiBidWZmZXJzKSB7Ci0gIERDSEVDSyhidWZmZXJzLT5lbXB0eSgpKTsKLSAgaWYgKHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8gPT0ga05vRGVjb2RlVGltZXN0YW1wKCkpIFVwZGF0ZVJlYWR5QnVmZmVycygpOwotICBjb25zdCBCdWZmZXJRdWV1ZSYgYXVkaW9fYnVmZmVycyA9IGF1ZGlvXy5yZWFkeV9idWZmZXJzKCk7Ci0gIGlmICghYXVkaW9fYnVmZmVycy5lbXB0eSgpKSB7Ci0gICAgYnVmZmVycy0+aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGF1ZGlvXy50cmFja19udW0oKSwgYXVkaW9fYnVmZmVycykpOwotICB9Ci0gIGNvbnN0IEJ1ZmZlclF1ZXVlJiB2aWRlb19idWZmZXJzID0gdmlkZW9fLnJlYWR5X2J1ZmZlcnMoKTsKLSAgaWYgKCF2aWRlb19idWZmZXJzLmVtcHR5KCkpIHsKLSAgICBidWZmZXJzLT5pbnNlcnQoc3RkOjptYWtlX3BhaXIodmlkZW9fLnRyYWNrX251bSgpLCB2aWRlb19idWZmZXJzKSk7Ci0gIH0KLSAgY29uc3QgV2ViTUNsdXN0ZXJQYXJzZXI6OlRleHRCdWZmZXJRdWV1ZU1hcCYgdGV4dF9idWZmZXJzID0gR2V0VGV4dEJ1ZmZlcnMoKTsKLSAgZm9yIChXZWJNQ2x1c3RlclBhcnNlcjo6VGV4dEJ1ZmZlclF1ZXVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9Ci0gICAgICAgICAgIHRleHRfYnVmZmVycy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfYnVmZmVycy5lbmQoKTsgKytpdCkgewotICAgIERDSEVDSyghaXQtPnNlY29uZC5lbXB0eSgpKTsKLSAgICBidWZmZXJzLT5pbnNlcnQoKml0KTsKLSAgfQotfQotCi1iYXNlOjpUaW1lRGVsdGEgV2ViTUNsdXN0ZXJQYXJzZXI6OlRyeUdldEVuY29kZWRBdWRpb0R1cmF0aW9uKAotICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIC8vIER1cmF0aW9uIGlzIGN1cnJlbnRseSByZWFkIGFzc3VtaW5nIHRoZSAqZW50aXJlKiBzdHJlYW0gaXMgdW5lbmNyeXB0ZWQuCi0gIC8vIFRoZSBzcGVjaWFsICJTaWduYWwgQnl0ZSIgcHJlcGVuZGVkIHRvIEJsb2NrcyBpbiBlbmNyeXB0ZWQgc3RyZWFtcyBpcwotICAvLyBhc3N1bWVkIHRvIG5vdCBiZSBwcmVzZW50LgotICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IENvbnNpZGVyIHBhcnNpbmcgIlNpZ25hbCBCeXRlIiBmb3IgZW5jcnlwdGVkIHN0cmVhbXMKLSAgLy8gdG8gcmV0dXJuIGR1cmF0aW9uIGZvciBhbnkgdW5lbmNyeXB0ZWQgYmxvY2tzLgotCi0gIGlmIChhdWRpb19jb2RlY18gPT0ga0NvZGVjT3B1cykgewotICAgIHJldHVybiBSZWFkT3B1c0R1cmF0aW9uKGRhdGEsIHNpemUpOwotICB9Ci0KLSAgLy8gVE9ETyh3b2xlbmV0ei9jaGN1bm5pbmdoYW0pOiBJbXBsZW1lbnQgZHVyYXRpb24gcmVhZGluZyBmb3IgVm9yYmlzLiBTZWUKLSAgLy8gbW90aXZhdGlvbnMgaW4gaHR0cDovL2NyYnVnLmNvbS8zOTY2MzQuCi0KLSAgcmV0dXJuIGtOb1RpbWVzdGFtcDsKLX0KLQotYmFzZTo6VGltZURlbHRhIFdlYk1DbHVzdGVyUGFyc2VyOjpSZWFkT3B1c0R1cmF0aW9uKGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpIHsKLSAgLy8gTWFza3MgYW5kIGNvbnN0YW50cyBmb3IgT3B1cyBwYWNrZXRzLiBTZWUKLSAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3MTYjcGFnZS0xNAotICBzdGF0aWMgY29uc3QgdWludDhfdCBrVG9jQ29uZmlnTWFzayA9IDB4Zjg7Ci0gIHN0YXRpYyBjb25zdCB1aW50OF90IGtUb2NGcmFtZUNvdW50Q29kZU1hc2sgPSAweDAzOwotICBzdGF0aWMgY29uc3QgdWludDhfdCBrRnJhbWVDb3VudE1hc2sgPSAweDNmOwotICBzdGF0aWMgY29uc3QgYmFzZTo6VGltZURlbHRhIGtQYWNrZXREdXJhdGlvbk1heCA9Ci0gICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTIwKTsKLQotICBpZiAoc2l6ZSA8IDEpIHsKLSAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX2R1cmF0aW9uX2Vycm9yc18sCi0gICAgICAgICAgICAgICAgICAgICAga01heER1cmF0aW9uRXJyb3JMb2dzKQotICAgICAgICA8PCAiSW52YWxpZCB6ZXJvLWJ5dGUgT3B1cyBwYWNrZXQ7IGRlbXV4ZWQgYmxvY2sgZHVyYXRpb24gbWF5IGJlICIKLSAgICAgICAgICAgImltcHJlY2lzZS4iOwotICAgIHJldHVybiBrTm9UaW1lc3RhbXA7Ci0gIH0KLQotICAvLyBGcmFtZSBjb3VudCB0eXBlIGRlc2NyaWJlZCBieSBsYXN0IDIgYml0cyBvZiBPcHVzIFRPQyBieXRlLgotICBpbnQgZnJhbWVfY291bnRfdHlwZSA9IGRhdGFbMF0gJiBrVG9jRnJhbWVDb3VudENvZGVNYXNrOwotCi0gIGludCBmcmFtZV9jb3VudCA9IDA7Ci0gIHN3aXRjaCAoZnJhbWVfY291bnRfdHlwZSkgewotICAgIGNhc2UgMDoKLSAgICAgIGZyYW1lX2NvdW50ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICBjYXNlIDI6Ci0gICAgICBmcmFtZV9jb3VudCA9IDI7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAvLyBUeXBlIDMgaW5kaWNhdGVzIGFuIGFyYml0cmFyeSBmcmFtZSBjb3VudCBkZXNjcmliZWQgaW4gdGhlIG5leHQgYnl0ZS4KLSAgICAgIGlmIChzaXplIDwgMikgewotICAgICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX2R1cmF0aW9uX2Vycm9yc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhEdXJhdGlvbkVycm9yTG9ncykKLSAgICAgICAgICAgIDw8ICJTZWNvbmQgYnl0ZSBtaXNzaW5nIGZyb20gJ0NvZGUgMycgT3B1cyBwYWNrZXQ7IGRlbXV4ZWQgYmxvY2sgIgotICAgICAgICAgICAgICAgImR1cmF0aW9uIG1heSBiZSBpbXByZWNpc2UuIjsKLSAgICAgICAgcmV0dXJuIGtOb1RpbWVzdGFtcDsKLSAgICAgIH0KLQotICAgICAgZnJhbWVfY291bnQgPSBkYXRhWzFdICYga0ZyYW1lQ291bnRNYXNrOwotCi0gICAgICBpZiAoZnJhbWVfY291bnQgPT0gMCkgewotICAgICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX2R1cmF0aW9uX2Vycm9yc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhEdXJhdGlvbkVycm9yTG9ncykKLSAgICAgICAgICAgIDw8ICJJbGxlZ2FsICdDb2RlIDMnIE9wdXMgcGFja2V0IHdpdGggZnJhbWUgY291bnQgemVybzsgZGVtdXhlZCAiCi0gICAgICAgICAgICAgICAiYmxvY2sgZHVyYXRpb24gbWF5IGJlIGltcHJlY2lzZS4iOwotICAgICAgICByZXR1cm4ga05vVGltZXN0YW1wOwotICAgICAgfQotCi0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9kdXJhdGlvbl9lcnJvcnNfLAotICAgICAgICAgICAgICAgICAgICAgICAga01heER1cmF0aW9uRXJyb3JMb2dzKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIE9wdXMgZnJhbWUgY291bnQgdHlwZTogIiA8PCBmcmFtZV9jb3VudF90eXBlIDw8ICI7ICIKLSAgICAgICAgICA8PCAiZGVtdXhlZCBibG9jayBkdXJhdGlvbiBtYXkgYmUgaW1wcmVjaXNlLiI7Ci0gICAgICByZXR1cm4ga05vVGltZXN0YW1wOwotICB9Ci0KLSAgaW50IG9wdXNDb25maWcgPSAoZGF0YVswXSAmIGtUb2NDb25maWdNYXNrKSA+PiAzOwotICBDSEVDS19HRShvcHVzQ29uZmlnLCAwKTsKLSAgQ0hFQ0tfTFQob3B1c0NvbmZpZywgc3RhdGljX2Nhc3Q8aW50PihhcnJheXNpemUoa09wdXNGcmFtZUR1cmF0aW9uc011KSkpOwotCi0gIERDSEVDS19HVChmcmFtZV9jb3VudCwgMCk7Ci0gIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbiA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygKLSAgICAgIGtPcHVzRnJhbWVEdXJhdGlvbnNNdVtvcHVzQ29uZmlnXSAqIGZyYW1lX2NvdW50KTsKLQotICBpZiAoZHVyYXRpb24gPiBrUGFja2V0RHVyYXRpb25NYXgpIHsKLSAgICAvLyBJbnRlbnRpb25hbGx5IGFsbG93aW5nIHBhY2tldCB0byBwYXNzIHRocm91Z2ggZm9yIG5vdy4gRGVjb2RlciBzaG91bGQKLSAgICAvLyBlaXRoZXIgaGFuZGxlIG9yIGZhaWwgZ3JhY2VmdWxseS4gTUVESUFfTE9HIGFzIGJyZWFkY3J1bWJzIGluIGNhc2UKLSAgICAvLyB0aGluZ3MgZ28gc2lkZXdheXMuCi0gICAgTElNSVRFRF9NRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18sIG51bV9kdXJhdGlvbl9lcnJvcnNfLAotICAgICAgICAgICAgICAgICAgICAgIGtNYXhEdXJhdGlvbkVycm9yTG9ncykKLSAgICAgICAgPDwgIldhcm5pbmcsIGRlbXV4ZWQgT3B1cyBwYWNrZXQgd2l0aCBlbmNvZGVkIGR1cmF0aW9uOiAiCi0gICAgICAgIDw8IGR1cmF0aW9uLkluTWlsbGlzZWNvbmRzKCkgPDwgIm1zLiBTaG91bGQgYmUgbm8gZ3JlYXRlciB0aGFuICIKLSAgICAgICAgPDwga1BhY2tldER1cmF0aW9uTWF4LkluTWlsbGlzZWNvbmRzKCkgPDwgIm1zLiI7Ci0gIH0KLQotICByZXR1cm4gZHVyYXRpb247Ci19Ci0KLVdlYk1QYXJzZXJDbGllbnQqIFdlYk1DbHVzdGVyUGFyc2VyOjpPbkxpc3RTdGFydChpbnQgaWQpIHsKLSAgaWYgKGlkID09IGtXZWJNSWRDbHVzdGVyKSB7Ci0gICAgY2x1c3Rlcl90aW1lY29kZV8gPSAtMTsKLSAgICBjbHVzdGVyX3N0YXJ0X3RpbWVfID0ga05vVGltZXN0YW1wOwotICB9IGVsc2UgaWYgKGlkID09IGtXZWJNSWRCbG9ja0dyb3VwKSB7Ci0gICAgYmxvY2tfZGF0YV8ucmVzZXQoKTsKLSAgICBibG9ja19kYXRhX3NpemVfID0gLTE7Ci0gICAgYmxvY2tfZHVyYXRpb25fID0gLTE7Ci0gICAgZGlzY2FyZF9wYWRkaW5nXyA9IC0xOwotICAgIGRpc2NhcmRfcGFkZGluZ19zZXRfID0gZmFsc2U7Ci0gICAgcmVmZXJlbmNlX2Jsb2NrX3NldF8gPSBmYWxzZTsKLSAgfSBlbHNlIGlmIChpZCA9PSBrV2ViTUlkQmxvY2tBZGRpdGlvbnMpIHsKLSAgICBibG9ja19hZGRfaWRfID0gLTE7Ci0gICAgYmxvY2tfYWRkaXRpb25hbF9kYXRhXy5yZXNldCgpOwotICAgIGJsb2NrX2FkZGl0aW9uYWxfZGF0YV9zaXplXyA9IDA7Ci0gIH0KLQotICByZXR1cm4gdGhpczsKLX0KLQotYm9vbCBXZWJNQ2x1c3RlclBhcnNlcjo6T25MaXN0RW5kKGludCBpZCkgewotICBpZiAoaWQgIT0ga1dlYk1JZEJsb2NrR3JvdXApIHJldHVybiB0cnVlOwotCi0gIC8vIE1ha2Ugc3VyZSB0aGUgQmxvY2tHcm91cCBhY3R1YWxseSBoYWQgYSBCbG9jay4KLSAgaWYgKGJsb2NrX2RhdGFfc2l6ZV8gPT0gLTEpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJCbG9jayBtaXNzaW5nIGZyb20gQmxvY2tHcm91cC4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgcmVzdWx0ID0gUGFyc2VCbG9jaygKLSAgICAgIGZhbHNlLCBibG9ja19kYXRhXy5nZXQoKSwgYmxvY2tfZGF0YV9zaXplXywgYmxvY2tfYWRkaXRpb25hbF9kYXRhXy5nZXQoKSwKLSAgICAgIGJsb2NrX2FkZGl0aW9uYWxfZGF0YV9zaXplXywgYmxvY2tfZHVyYXRpb25fLAotICAgICAgZGlzY2FyZF9wYWRkaW5nX3NldF8gPyBkaXNjYXJkX3BhZGRpbmdfIDogMCwgcmVmZXJlbmNlX2Jsb2NrX3NldF8pOwotICBibG9ja19kYXRhXy5yZXNldCgpOwotICBibG9ja19kYXRhX3NpemVfID0gLTE7Ci0gIGJsb2NrX2R1cmF0aW9uXyA9IC0xOwotICBibG9ja19hZGRfaWRfID0gLTE7Ci0gIGJsb2NrX2FkZGl0aW9uYWxfZGF0YV8ucmVzZXQoKTsKLSAgYmxvY2tfYWRkaXRpb25hbF9kYXRhX3NpemVfID0gMDsKLSAgZGlzY2FyZF9wYWRkaW5nXyA9IC0xOwotICBkaXNjYXJkX3BhZGRpbmdfc2V0XyA9IGZhbHNlOwotICByZWZlcmVuY2VfYmxvY2tfc2V0XyA9IGZhbHNlOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFdlYk1DbHVzdGVyUGFyc2VyOjpPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgewotICBpbnQ2NF90KiBkc3Q7Ci0gIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIGtXZWJNSWRUaW1lY29kZToKLSAgICAgIGRzdCA9ICZjbHVzdGVyX3RpbWVjb2RlXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZEJsb2NrRHVyYXRpb246Ci0gICAgICBkc3QgPSAmYmxvY2tfZHVyYXRpb25fOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkQmxvY2tBZGRJRDoKLSAgICAgIGRzdCA9ICZibG9ja19hZGRfaWRfOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0gIGlmICgqZHN0ICE9IC0xKSByZXR1cm4gZmFsc2U7Ci0gICpkc3QgPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1DbHVzdGVyUGFyc2VyOjpQYXJzZUJsb2NrKGJvb2wgaXNfc2ltcGxlX2Jsb2NrLCBjb25zdCB1aW50OF90KiBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBjb25zdCB1aW50OF90KiBhZGRpdGlvbmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRkaXRpb25hbF9zaXplLCBpbnQgZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGlzY2FyZF9wYWRkaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlZmVyZW5jZV9ibG9ja19zZXQpIHsKLSAgaWYgKHNpemUgPCA0KSByZXR1cm4gZmFsc2U7Ci0KLSAgLy8gUmV0dXJuIGFuIGVycm9yIGlmIHRoZSB0cmFja051bSA+IDEyNy4gV2UganVzdCBhcmVuJ3QKLSAgLy8gZ29pbmcgdG8gc3VwcG9ydCBsYXJnZSB0cmFjayBudW1iZXJzIHJpZ2h0IG5vdy4KLSAgaWYgKCEoYnVmWzBdICYgMHg4MCkpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJUcmFja051bWJlciBvdmVyIDEyNyBub3Qgc3VwcG9ydGVkIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpbnQgdHJhY2tfbnVtID0gYnVmWzBdICYgMHg3ZjsKLSAgaW50IHRpbWVjb2RlID0gYnVmWzFdIDw8IDggfCBidWZbMl07Ci0gIGludCBmbGFncyA9IGJ1ZlszXSAmIDB4ZmY7Ci0gIGludCBsYWNpbmcgPSAoZmxhZ3MgPj4gMSkgJiAweDM7Ci0KLSAgaWYgKGxhY2luZykgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgPDwgIkxhY2luZyAiIDw8IGxhY2luZyA8PCAiIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gU2lnbiBleHRlbmQgbmVnYXRpdmUgdGltZWNvZGUgb2Zmc2V0cy4KLSAgaWYgKHRpbWVjb2RlICYgMHg4MDAwKSB0aW1lY29kZSB8PSB+MHhmZmZmOwotCi0gIC8vIFRoZSBmaXJzdCBiaXQgb2YgdGhlIGZsYWdzIGlzIHNldCB3aGVuIGEgU2ltcGxlQmxvY2sgY29udGFpbnMgb25seQotICAvLyBrZXlmcmFtZXMuIElmIHRoaXMgaXMgYSBCbG9jaywgdGhlbiBrZXlmcmFtZSBpcyBpbmZlcnJlZCBieSB0aGUgYWJzZW5jZSBvZgotICAvLyB0aGUgUmVmZXJlbmNlQmxvY2sgRWxlbWVudC4KLSAgLy8gaHR0cDovL3d3dy5tYXRyb3NrYS5vcmcvdGVjaG5pY2FsL3NwZWNzL2luZGV4Lmh0bWwKLSAgYm9vbCBpc19rZXlmcmFtZSA9Ci0gICAgICBpc19zaW1wbGVfYmxvY2sgPyAoZmxhZ3MgJiAweDgwKSAhPSAwIDogIXJlZmVyZW5jZV9ibG9ja19zZXQ7Ci0KLSAgY29uc3QgdWludDhfdCogZnJhbWVfZGF0YSA9IGJ1ZiArIDQ7Ci0gIGludCBmcmFtZV9zaXplID0gc2l6ZSAtIChmcmFtZV9kYXRhIC0gYnVmKTsKLSAgcmV0dXJuIE9uQmxvY2soaXNfc2ltcGxlX2Jsb2NrLCB0cmFja19udW0sIHRpbWVjb2RlLCBkdXJhdGlvbiwgZnJhbWVfZGF0YSwKLSAgICAgICAgICAgICAgICAgZnJhbWVfc2l6ZSwgYWRkaXRpb25hbCwgYWRkaXRpb25hbF9zaXplLCBkaXNjYXJkX3BhZGRpbmcsCi0gICAgICAgICAgICAgICAgIGlzX2tleWZyYW1lKTsKLX0KLQotYm9vbCBXZWJNQ2x1c3RlclBhcnNlcjo6T25CaW5hcnkoaW50IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBrV2ViTUlkU2ltcGxlQmxvY2s6Ci0gICAgICByZXR1cm4gUGFyc2VCbG9jayh0cnVlLCBkYXRhLCBzaXplLCBOVUxMLCAwLCAtMSwgMCwgZmFsc2UpOwotCi0gICAgY2FzZSBrV2ViTUlkQmxvY2s6Ci0gICAgICBpZiAoYmxvY2tfZGF0YV8pIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgICAgPDwgIk1vcmUgdGhhbiAxIEJsb2NrIGluIGEgQmxvY2tHcm91cCBpcyBub3QgIgotICAgICAgICAgICAgICAgInN1cHBvcnRlZC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBibG9ja19kYXRhXy5yZXNldChuZXcgdWludDhfdFtzaXplXSk7Ci0gICAgICBtZW1jcHkoYmxvY2tfZGF0YV8uZ2V0KCksIGRhdGEsIHNpemUpOwotICAgICAgYmxvY2tfZGF0YV9zaXplXyA9IHNpemU7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2Uga1dlYk1JZEJsb2NrQWRkaXRpb25hbDogewotICAgICAgdWludDY0X3QgYmxvY2tfYWRkX2lkID0gYmFzZTo6SG9zdFRvTmV0NjQoYmxvY2tfYWRkX2lkXyk7Ci0gICAgICBpZiAoYmxvY2tfYWRkaXRpb25hbF9kYXRhXykgewotICAgICAgICAvLyBUT0RPKHZpZ25lc2h2KTogVGVjaG5pY2FsbHksIG1vcmUgdGhhbiAxIEJsb2NrQWRkaXRpb25hbCBpcyBhbGxvd2VkCi0gICAgICAgIC8vIGFzIHBlciBtYXRyb3NrYSBzcGVjLiBCdXQgZm9yIG5vdyB3ZSBkb24ndCBoYXZlIGEgdXNlIGNhc2UgdG8KLSAgICAgICAgLy8gc3VwcG9ydCBwYXJzaW5nIG9mIHN1Y2ggZmlsZXMuIFRha2UgYSBsb29rIGF0IHRoaXMgYWdhaW4gd2hlbiBzdWNoIGEKLSAgICAgICAgLy8gY2FzZSBhcmlzZXMuCi0gICAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIk1vcmUgdGhhbiAxIEJsb2NrQWRkaXRpb25hbCBpbiBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmxvY2tHcm91cCBpcyBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIC8vIEZpcnN0IDggYnl0ZXMgb2Ygc2lkZV9kYXRhIGluIERlY29kZXJCdWZmZXIgaXMgdGhlIEJsb2NrQWRkSUQKLSAgICAgIC8vIGVsZW1lbnQncyB2YWx1ZSBpbiBCaWcgRW5kaWFuIGZvcm1hdC4gVGhpcyBpcyBkb25lIHRvIG1pbWljIGZmbXBlZwotICAgICAgLy8gZGVtdXhlcidzIGJlaGF2aW9yLgotICAgICAgYmxvY2tfYWRkaXRpb25hbF9kYXRhX3NpemVfID0gc2l6ZSArIHNpemVvZihibG9ja19hZGRfaWQpOwotICAgICAgYmxvY2tfYWRkaXRpb25hbF9kYXRhXy5yZXNldChuZXcgdWludDhfdFtibG9ja19hZGRpdGlvbmFsX2RhdGFfc2l6ZV9dKTsKLSAgICAgIG1lbWNweShibG9ja19hZGRpdGlvbmFsX2RhdGFfLmdldCgpLCAmYmxvY2tfYWRkX2lkLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihibG9ja19hZGRfaWQpKTsKLSAgICAgIG1lbWNweShibG9ja19hZGRpdGlvbmFsX2RhdGFfLmdldCgpICsgOCwgZGF0YSwgc2l6ZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBrV2ViTUlkRGlzY2FyZFBhZGRpbmc6IHsKLSAgICAgIGlmIChkaXNjYXJkX3BhZGRpbmdfc2V0XyB8fCBzaXplIDw9IDAgfHwgc2l6ZSA+IDgpIHJldHVybiBmYWxzZTsKLSAgICAgIGRpc2NhcmRfcGFkZGluZ19zZXRfID0gdHJ1ZTsKLQotICAgICAgLy8gUmVhZCBpbiB0aGUgYmlnLWVuZGlhbiBpbnRlZ2VyLgotICAgICAgZGlzY2FyZF9wYWRkaW5nXyA9IHN0YXRpY19jYXN0PGludDhfdD4oZGF0YVswXSk7Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgZGlzY2FyZF9wYWRkaW5nXyA9IChkaXNjYXJkX3BhZGRpbmdfIDw8IDgpIHwgZGF0YVtpXTsKLQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2Uga1dlYk1JZFJlZmVyZW5jZUJsb2NrOiB7Ci0gICAgICAvLyBXZSB1c2UgUmVmZXJlbmNlQmxvY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgQmxvY2sgY29udGFpbnMgYQotICAgICAgLy8ga2V5ZnJhbWUgb3Igbm90LiBPdGhlciB0aGFuIHRoYXQsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIG9mIHRoZQotICAgICAgLy8gUmVmZXJlbmNlQmxvY2sgZWxlbWVudCBpdHNlbGYuCi0gICAgICByZWZlcmVuY2VfYmxvY2tfc2V0XyA9IHRydWU7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci19Ci0KLWJvb2wgV2ViTUNsdXN0ZXJQYXJzZXI6Ok9uQmxvY2soYm9vbCBpc19zaW1wbGVfYmxvY2ssIGludCB0cmFja19udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lY29kZSwgaW50IGJsb2NrX2R1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogYWRkaXRpb25hbCwgaW50IGFkZGl0aW9uYWxfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBkaXNjYXJkX3BhZGRpbmcsIGJvb2wgaXNfa2V5ZnJhbWUpIHsKLSAgRENIRUNLX0dFKHNpemUsIDApOwotICBpZiAoY2x1c3Rlcl90aW1lY29kZV8gPT0gLTEpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJHb3QgYSBibG9jayBiZWZvcmUgY2x1c3RlciB0aW1lY29kZS4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRPRE8oYWNvbHdlbGwpOiBTaG91bGQgcmVsYXRpdmUgbmVnYXRpdmUgdGltZWNvZGUgb2Zmc2V0cyBiZSByZWplY3RlZD8gIE9yCi0gIC8vIG9ubHkgd2hlbiB0aGUgYWJzb2x1dGUgdGltZWNvZGUgaXMgbmVnYXRpdmU/ICBTZWUgaHR0cDovL2NyYnVnLmNvbS8yNzE3OTQKLSAgaWYgKHRpbWVjb2RlIDwgMCkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgPDwgIkdvdCBhIGJsb2NrIHdpdGggbmVnYXRpdmUgdGltZWNvZGUgb2Zmc2V0ICIgPDwgdGltZWNvZGU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGxhc3RfYmxvY2tfdGltZWNvZGVfICE9IC0xICYmIHRpbWVjb2RlIDwgbGFzdF9ibG9ja190aW1lY29kZV8pIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJHb3QgYSBibG9jayB3aXRoIGEgdGltZWNvZGUgYmVmb3JlIHRoZSBwcmV2aW91cyBibG9jay4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIFRyYWNrKiB0cmFjayA9IE5VTEw7Ci0gIFN0cmVhbVBhcnNlckJ1ZmZlcjo6VHlwZSBidWZmZXJfdHlwZSA9IERlbXV4ZXJTdHJlYW06OkFVRElPOwotICBzdGQ6OnN0cmluZyBlbmNyeXB0aW9uX2tleV9pZDsKLSAgYmFzZTo6VGltZURlbHRhIGVuY29kZWRfZHVyYXRpb24gPSBrTm9UaW1lc3RhbXA7Ci0gIGlmICh0cmFja19udW0gPT0gYXVkaW9fLnRyYWNrX251bSgpKSB7Ci0gICAgdHJhY2sgPSAmYXVkaW9fOwotICAgIGVuY3J5cHRpb25fa2V5X2lkID0gYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWRfOwotICAgIGlmIChlbmNyeXB0aW9uX2tleV9pZC5lbXB0eSgpKSB7Ci0gICAgICBlbmNvZGVkX2R1cmF0aW9uID0gVHJ5R2V0RW5jb2RlZEF1ZGlvRHVyYXRpb24oZGF0YSwgc2l6ZSk7Ci0gICAgfQotICB9IGVsc2UgaWYgKHRyYWNrX251bSA9PSB2aWRlb18udHJhY2tfbnVtKCkpIHsKLSAgICB0cmFjayA9ICZ2aWRlb187Ci0gICAgZW5jcnlwdGlvbl9rZXlfaWQgPSB2aWRlb19lbmNyeXB0aW9uX2tleV9pZF87Ci0gICAgYnVmZmVyX3R5cGUgPSBEZW11eGVyU3RyZWFtOjpWSURFTzsKLSAgfSBlbHNlIGlmIChpZ25vcmVkX3RyYWNrc18uZmluZCh0cmFja19udW0pICE9IGlnbm9yZWRfdHJhY2tzXy5lbmQoKSkgewotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgaWYgKFRyYWNrKiBjb25zdCB0ZXh0X3RyYWNrID0gRmluZFRleHRUcmFjayh0cmFja19udW0pKSB7Ci0gICAgaWYgKGlzX3NpbXBsZV9ibG9jaykgIC8vIEJsb2NrR3JvdXAgaXMgcmVxdWlyZWQgZm9yIFdlYlZUVCBjdWVzCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGJsb2NrX2R1cmF0aW9uIDwgMCkgIC8vIG5vdCBzcGVjaWZpZWQKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0cmFjayA9IHRleHRfdHJhY2s7Ci0gICAgYnVmZmVyX3R5cGUgPSBEZW11eGVyU3RyZWFtOjpURVhUOwotICB9IGVsc2UgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIlVuZXhwZWN0ZWQgdHJhY2sgbnVtYmVyICIgPDwgdHJhY2tfbnVtOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGxhc3RfYmxvY2tfdGltZWNvZGVfID0gdGltZWNvZGU7Ci0KLSAgYmFzZTo6VGltZURlbHRhIHRpbWVzdGFtcCA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygKLSAgICAgIChjbHVzdGVyX3RpbWVjb2RlXyArIHRpbWVjb2RlKSAqIHRpbWVjb2RlX211bHRpcGxpZXJfKTsKLQotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyOwotICBpZiAoYnVmZmVyX3R5cGUgIT0gRGVtdXhlclN0cmVhbTo6VEVYVCkgewotICAgIC8vIEV2ZXJ5IGVuY3J5cHRlZCBCbG9jayBoYXMgYSBzaWduYWwgYnl0ZSBhbmQgSVYgcHJlcGVuZGVkIHRvIGl0LiBDdXJyZW50Ci0gICAgLy8gZW5jcnlwdGVkIFdlYk0gcmVxdWVzdCBmb3IgY29tbWVudHMgc3BlY2lmaWNhdGlvbiBpcyBoZXJlCi0gICAgLy8gaHR0cDovL3dpa2kud2VibXByb2plY3Qub3JnL2VuY3J5cHRpb24vd2VibS1lbmNyeXB0aW9uLXJmYwotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBkZWNyeXB0X2NvbmZpZzsKLSAgICBpbnQgZGF0YV9vZmZzZXQgPSAwOwotICAgIGlmICghZW5jcnlwdGlvbl9rZXlfaWQuZW1wdHkoKSAmJgotICAgICAgICAhV2ViTUNyZWF0ZURlY3J5cHRDb25maWcoCi0gICAgICAgICAgICBkYXRhLCBzaXplLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZW5jcnlwdGlvbl9rZXlfaWQuZGF0YSgpKSwKLSAgICAgICAgICAgIGVuY3J5cHRpb25fa2V5X2lkLnNpemUoKSwgJmRlY3J5cHRfY29uZmlnLCAmZGF0YV9vZmZzZXQpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVE9ETyh3b2xlbmV0ei9hY29sd2VsbCk6IFZhbGlkYXRlIGFuZCB1c2UgYSBjb21tb24gY3Jvc3MtcGFyc2VyIFRyYWNrSWQKLSAgICAvLyB0eXBlIHdpdGggcmVtYXBwZWQgYnl0ZXN0cmVhbSB0cmFjayBudW1iZXJzIGFuZCBhbGxvdyBtdWx0aXBsZSB0cmFja3MgYXMKLSAgICAvLyBhcHBsaWNhYmxlLiBTZWUgaHR0cHM6Ly9jcmJ1Zy5jb20vMzQxNTgxLgotICAgIGJ1ZmZlciA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICAgIGJ1ZmZlcl9hbGxvY2F0b3JfLCBkYXRhICsgZGF0YV9vZmZzZXQsIHNpemUgLSBkYXRhX29mZnNldCwgYWRkaXRpb25hbCwKLSAgICAgICAgYWRkaXRpb25hbF9zaXplLCBpc19rZXlmcmFtZSwgYnVmZmVyX3R5cGUsIHRyYWNrX251bSk7Ci0gICAgLy8gVGhpcyB3aWxsIGNhdXNlIGEgcGxheWJhY2sgZXJyb3IuCi0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkZhaWxlZCB0byBhbGxvY2F0ZSBTdHJlYW1QYXJzZXJCdWZmZXIiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoZGVjcnlwdF9jb25maWcpIGJ1ZmZlci0+c2V0X2RlY3J5cHRfY29uZmlnKHN0ZDo6bW92ZShkZWNyeXB0X2NvbmZpZykpOwotICB9IGVsc2UgewotICAgIHN0ZDo6c3RyaW5nIGlkLCBzZXR0aW5ncywgY29udGVudDsKLSAgICBXZWJNV2ViVlRUUGFyc2VyOjpQYXJzZShkYXRhLCBzaXplLCAmaWQsICZzZXR0aW5ncywgJmNvbnRlbnQpOwotCi0gICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gc2lkZV9kYXRhOwotICAgIE1ha2VTaWRlRGF0YShpZC5iZWdpbigpLCBpZC5lbmQoKSwgc2V0dGluZ3MuYmVnaW4oKSwgc2V0dGluZ3MuZW5kKCksCi0gICAgICAgICAgICAgICAgICZzaWRlX2RhdGEpOwotCi0gICAgLy8gVE9ETyh3b2xlbmV0ei9hY29sd2VsbCk6IFZhbGlkYXRlIGFuZCB1c2UgYSBjb21tb24gY3Jvc3MtcGFyc2VyIFRyYWNrSWQKLSAgICAvLyB0eXBlIHdpdGggcmVtYXBwZWQgYnl0ZXN0cmVhbSB0cmFjayBudW1iZXJzIGFuZCBhbGxvdyBtdWx0aXBsZSB0cmFja3MgYXMKLSAgICAvLyBhcHBsaWNhYmxlLiBTZWUgaHR0cHM6Ly9jcmJ1Zy5jb20vMzQxNTgxLgotICAgIGJ1ZmZlciA9IFN0cmVhbVBhcnNlckJ1ZmZlcjo6Q29weUZyb20oCi0gICAgICAgIGJ1ZmZlcl9hbGxvY2F0b3JfLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihjb250ZW50LmRhdGEoKSksCi0gICAgICAgIGNvbnRlbnQubGVuZ3RoKCksIHNpZGVfZGF0YS5kYXRhKCksIHNpZGVfZGF0YS5zaXplKCksIHRydWUsIGJ1ZmZlcl90eXBlLAotICAgICAgICB0cmFja19udW0pOwotICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBhIHBsYXliYWNrIGVycm9yLgotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJGYWlsZWQgdG8gYWxsb2NhdGUgU3RyZWFtUGFyc2VyQnVmZmVyIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBidWZmZXItPnNldF90aW1lc3RhbXAodGltZXN0YW1wKTsKLSAgaWYgKGNsdXN0ZXJfc3RhcnRfdGltZV8gPT0ga05vVGltZXN0YW1wKSBjbHVzdGVyX3N0YXJ0X3RpbWVfID0gdGltZXN0YW1wOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBibG9ja19kdXJhdGlvbl90aW1lX2RlbHRhID0ga05vVGltZXN0YW1wOwotICBpZiAoYmxvY2tfZHVyYXRpb24gPj0gMCkgewotICAgIGJsb2NrX2R1cmF0aW9uX3RpbWVfZGVsdGEgPSBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoCi0gICAgICAgIGJsb2NrX2R1cmF0aW9uICogdGltZWNvZGVfbXVsdGlwbGllcl8pOwotICB9Ci0KLSAgLy8gUHJlZmVyIGVuY29kZWQgZHVyYXRpb24gb3ZlciBCbG9ja0dyb3VwLT5CbG9ja0R1cmF0aW9uIG9yCi0gIC8vIFRyYWNrRW50cnktPkRlZmF1bHREdXJhdGlvbiB3aGVuIGF2YWlsYWJsZS4gVGhpcyBsYXllcmluZyB2aW9sYXRpb24gaXMgYQotICAvLyB3b3JrYXJvdW5kIGZvciBodHRwOi8vY3JidWcuY29tLzM5NjYzNCwgZGVjcmVhc2luZyB0aGUgbGlrZWxpaG9vZCBvZgotICAvLyBmYWxsLWJhY2sgdG8gcm91Z2ggZXN0aW1hdGlvbiB0ZWNobmlxdWVzIGZvciBCbG9ja3MgdGhhdCBsYWNrIGEKLSAgLy8gQmxvY2tEdXJhdGlvbiBhdCB0aGUgZW5kIG9mIGEgY2x1c3Rlci4gQ3Jvc3MgY2x1c3RlciBkdXJhdGlvbnMgYXJlIG5vdAotICAvLyBmZWFzaWJsZSBnaXZlbiBmbGV4aWJpbGl0eSBvZiBjbHVzdGVyIG9yZGVyaW5nIGFuZCBNU0UgQVBJcy4gRHVyYXRpb24KLSAgLy8gZXN0aW1hdGlvbiBtYXkgc3RpbGwgYXBwbHkgaW4gY2FzZXMgb2YgZW5jcnlwdGlvbiBhbmQgY29kZWNzIGZvciB3aGljaAotICAvLyB3ZSBkbyBub3QgZXh0cmFjdCBlbmNvZGVkIGR1cmF0aW9uLiBXaXRoaW4gYSBjbHVzdGVyLCBlc3RpbWF0ZXMgYXJlIGFwcGxpZWQKLSAgLy8gYXMgQmxvY2sgVGltZWNvZGUgZGVsdGFzLCBvciBvbmNlIHRoZSB3aG9sZSBjbHVzdGVyIGlzIHBhcnNlZCBpbiB0aGUgY2FzZQotICAvLyBvZiB0aGUgbGFzdCBCbG9jayBpbiB0aGUgY2x1c3Rlci4gU2VlIFRyYWNrOjpBZGRCdWZmZXIgYW5kCi0gIC8vIEFwcGx5RHVyYXRpb25Fc3RpbWF0ZUlmTmVlZGVkKCkuCi0gIGlmIChlbmNvZGVkX2R1cmF0aW9uICE9IGtOb1RpbWVzdGFtcCkgewotICAgIERDSEVDSyhlbmNvZGVkX2R1cmF0aW9uICE9IGtJbmZpbml0ZUR1cmF0aW9uKTsKLSAgICBEQ0hFQ0soZW5jb2RlZF9kdXJhdGlvbiA+IGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgICBidWZmZXItPnNldF9kdXJhdGlvbihlbmNvZGVkX2R1cmF0aW9uKTsKLQotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgOiAiCi0gICAgICAgICAgICAgPDwgIlVzaW5nIGVuY29kZWQgZHVyYXRpb24gIiA8PCBlbmNvZGVkX2R1cmF0aW9uLkluU2Vjb25kc0YoKTsKLQotICAgIGlmIChibG9ja19kdXJhdGlvbl90aW1lX2RlbHRhICE9IGtOb1RpbWVzdGFtcCkgewotICAgICAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uX2RpZmZlcmVuY2UgPQotICAgICAgICAgIGJsb2NrX2R1cmF0aW9uX3RpbWVfZGVsdGEgLSBlbmNvZGVkX2R1cmF0aW9uOwotCi0gICAgICBjb25zdCBiYXNlOjpUaW1lRGVsdGEga1dhcm5EdXJhdGlvbkRpZmYgPQotICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyh0aW1lY29kZV9tdWx0aXBsaWVyXyAqIDIpOwotICAgICAgaWYgKGR1cmF0aW9uX2RpZmZlcmVuY2UubWFnbml0dWRlKCkgPiBrV2FybkR1cmF0aW9uRGlmZikgewotICAgICAgICBMSU1JVEVEX01FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXywgbnVtX2R1cmF0aW9uX2Vycm9yc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhEdXJhdGlvbkVycm9yTG9ncykKLSAgICAgICAgICAgIDw8ICJCbG9ja0R1cmF0aW9uICgiIDw8IGJsb2NrX2R1cmF0aW9uX3RpbWVfZGVsdGEuSW5NaWxsaXNlY29uZHMoKQotICAgICAgICAgICAgPDwgIm1zKSBkaWZmZXJzIHNpZ25pZmljYW50bHkgZnJvbSBlbmNvZGVkIGR1cmF0aW9uICgiCi0gICAgICAgICAgICA8PCBlbmNvZGVkX2R1cmF0aW9uLkluTWlsbGlzZWNvbmRzKCkgPDwgIm1zKS4iOwotICAgICAgfQotICAgIH0KLSAgfSBlbHNlIGlmIChibG9ja19kdXJhdGlvbl90aW1lX2RlbHRhICE9IGtOb1RpbWVzdGFtcCkgewotICAgIGJ1ZmZlci0+c2V0X2R1cmF0aW9uKGJsb2NrX2R1cmF0aW9uX3RpbWVfZGVsdGEpOwotICB9IGVsc2UgewotICAgIERDSEVDS19ORShidWZmZXJfdHlwZSwgRGVtdXhlclN0cmVhbTo6VEVYVCk7Ci0gICAgYnVmZmVyLT5zZXRfZHVyYXRpb24odHJhY2stPmRlZmF1bHRfZHVyYXRpb24oKSk7Ci0gIH0KLQotICBpZiAoZGlzY2FyZF9wYWRkaW5nICE9IDApIHsKLSAgICBidWZmZXItPnNldF9kaXNjYXJkX3BhZGRpbmcoc3RkOjptYWtlX3BhaXIoCi0gICAgICAgIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWNyb3NlY29uZHMoZGlzY2FyZF9wYWRkaW5nIC8gMTAwMCkpKTsKLSAgfQotCi0gIHJldHVybiB0cmFjay0+QWRkQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLVdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6VHJhY2soaW50IHRyYWNrX251bSwgYm9vbCBpc192aWRlbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGRlZmF1bHRfZHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpCi0gICAgOiBudW1fZHVyYXRpb25fZXN0aW1hdGVzXygwKSwKLSAgICAgIHRyYWNrX251bV8odHJhY2tfbnVtKSwKLSAgICAgIGlzX3ZpZGVvXyhpc192aWRlbyksCi0gICAgICBkZWZhdWx0X2R1cmF0aW9uXyhkZWZhdWx0X2R1cmF0aW9uKSwKLSAgICAgIGVzdGltYXRlZF9uZXh0X2ZyYW1lX2R1cmF0aW9uXyhrTm9UaW1lc3RhbXApLAotICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpIHsKLSAgRENIRUNLKGRlZmF1bHRfZHVyYXRpb25fID09IGtOb1RpbWVzdGFtcCB8fAotICAgICAgICAgZGVmYXVsdF9kdXJhdGlvbl8gPiBiYXNlOjpUaW1lRGVsdGEoKSk7Ci19Ci0KLVdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6flRyYWNrKCkge30KLQotRGVjb2RlVGltZXN0YW1wIFdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6R2V0UmVhZHlVcHBlckJvdW5kKCkgewotICBEQ0hFQ0socmVhZHlfYnVmZmVyc18uZW1wdHkoKSk7Ci0gIGlmIChsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy5nZXQoKSkKLSAgICByZXR1cm4gbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8tPkdldERlY29kZVRpbWVzdGFtcCgpOwotCi0gIHJldHVybiBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGJhc2U6OlRpbWVEZWx0YTo6TWF4KCkpOwotfQotCi12b2lkIFdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6RXh0cmFjdFJlYWR5QnVmZmVycygKLSAgICBjb25zdCBEZWNvZGVUaW1lc3RhbXAgYmVmb3JlX3RpbWVzdGFtcCkgewotICBEQ0hFQ0socmVhZHlfYnVmZmVyc18uZW1wdHkoKSk7Ci0gIERDSEVDSyhEZWNvZGVUaW1lc3RhbXAoKSA8PSBiZWZvcmVfdGltZXN0YW1wKTsKLSAgRENIRUNLKGtOb0RlY29kZVRpbWVzdGFtcCgpICE9IGJlZm9yZV90aW1lc3RhbXApOwotCi0gIGlmIChidWZmZXJzXy5lbXB0eSgpKSByZXR1cm47Ci0KLSAgaWYgKGJ1ZmZlcnNfLmJhY2soKS0+R2V0RGVjb2RlVGltZXN0YW1wKCkgPCBiZWZvcmVfdGltZXN0YW1wKSB7Ci0gICAgLy8gQWxsIG9mIHxidWZmZXJzX3wgYXJlIHJlYWR5LgotICAgIHJlYWR5X2J1ZmZlcnNfLnN3YXAoYnVmZmVyc18pOwotICAgIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgOiAiIDw8IHRyYWNrX251bV8gPDwgIiBBbGwgIgotICAgICAgICAgICAgIDw8IHJlYWR5X2J1ZmZlcnNfLnNpemUoKSA8PCAiIGFyZSByZWFkeTogYmVmb3JlIHVwcGVyIGJvdW5kIHRzICIKLSAgICAgICAgICAgICA8PCBiZWZvcmVfdGltZXN0YW1wLkluU2Vjb25kc0YoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBOb3QgYWxsIG9mIHxidWZmZXJzX3wgYXJlIHJlYWR5IHlldC4gTW92ZSBhbnkgdGhhdCBhcmUgcmVhZHkgdG8KLSAgLy8gfHJlYWR5X2J1ZmZlcnNffC4KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGJ1ZmZlciA9IGJ1ZmZlcnNfLmZyb250KCk7Ci0gICAgaWYgKGJ1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCkgPj0gYmVmb3JlX3RpbWVzdGFtcCkgYnJlYWs7Ci0gICAgcmVhZHlfYnVmZmVyc18ucHVzaF9iYWNrKGJ1ZmZlcik7Ci0gICAgYnVmZmVyc18ucG9wX2Zyb250KCk7Ci0gICAgRENIRUNLKCFidWZmZXJzXy5lbXB0eSgpKTsKLSAgfQotCi0gIERWTE9HKDMpIDw8IF9fZnVuY19fIDw8ICIgOiAiIDw8IHRyYWNrX251bV8gPDwgIiBPbmx5ICIKLSAgICAgICAgICAgPDwgcmVhZHlfYnVmZmVyc18uc2l6ZSgpIDw8ICIgcmVhZHksICIgPDwgYnVmZmVyc18uc2l6ZSgpCi0gICAgICAgICAgIDw8ICIgYXQgb3IgYWZ0ZXIgdXBwZXIgYm91bmQgdHMgIiA8PCBiZWZvcmVfdGltZXN0YW1wLkluU2Vjb25kc0YoKTsKLX0KLQotYm9vbCBXZWJNQ2x1c3RlclBhcnNlcjo6VHJhY2s6OkFkZEJ1ZmZlcigKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICBEVkxPRygyKSA8PCAiQWRkQnVmZmVyKCkgOiAiIDw8IHRyYWNrX251bV8gPDwgIiB0cyAiCi0gICAgICAgICAgIDw8IGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5TZWNvbmRzRigpIDw8ICIgZHVyICIKLSAgICAgICAgICAgPDwgYnVmZmVyLT5kdXJhdGlvbigpLkluU2Vjb25kc0YoKSA8PCAiIGtmICIKLSAgICAgICAgICAgPDwgYnVmZmVyLT5pc19rZXlfZnJhbWUoKSA8PCAiIHNpemUgIiA8PCBidWZmZXItPmRhdGFfc2l6ZSgpOwotCi0gIGlmIChsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy5nZXQoKSkgewotICAgIGJhc2U6OlRpbWVEZWx0YSBkZXJpdmVkX2R1cmF0aW9uID0KLSAgICAgICAgYnVmZmVyLT50aW1lc3RhbXAoKSAtIGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fLT50aW1lc3RhbXAoKTsKLSAgICBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy0+c2V0X2R1cmF0aW9uKGRlcml2ZWRfZHVyYXRpb24pOwotCi0gICAgRFZMT0coMikgPDwgIkFkZEJ1ZmZlcigpIDogYXBwbGllZCBkZXJpdmVkIGR1cmF0aW9uIHRvIGhlbGQtYmFjayBidWZmZXIgOiAiCi0gICAgICAgICAgICAgPDwgIiB0cyAiCi0gICAgICAgICAgICAgPDwgbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8tPnRpbWVzdGFtcCgpLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgIDw8ICIgZHVyICIKLSAgICAgICAgICAgICA8PCBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy0+ZHVyYXRpb24oKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgICA8PCAiIGtmICIgPDwgbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8tPmlzX2tleV9mcmFtZSgpCi0gICAgICAgICAgICAgPDwgIiBzaXplICIgPDwgbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8tPmRhdGFfc2l6ZSgpOwotICAgIHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiB1cGRhdGVkX2J1ZmZlciA9Ci0gICAgICAgIGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fOwotICAgIGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fID0gTlVMTDsKLSAgICBpZiAoIVF1ZXVlQnVmZmVyKHVwZGF0ZWRfYnVmZmVyKSkgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgaWYgKGJ1ZmZlci0+ZHVyYXRpb24oKSA9PSBrTm9UaW1lc3RhbXApIHsKLSAgICBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXyA9IGJ1ZmZlcjsKLSAgICBEVkxPRygyKSA8PCAiQWRkQnVmZmVyKCkgOiBob2xkaW5nIGJhY2sgYnVmZmVyIHRoYXQgaXMgbWlzc2luZyBkdXJhdGlvbiI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gUXVldWVCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBXZWJNQ2x1c3RlclBhcnNlcjo6VHJhY2s6OkFwcGx5RHVyYXRpb25Fc3RpbWF0ZUlmTmVlZGVkKCkgewotICBpZiAoIWxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fLmdldCgpKSByZXR1cm47Ci0KLSAgYmFzZTo6VGltZURlbHRhIGVzdGltYXRlZF9kdXJhdGlvbiA9IEdldER1cmF0aW9uRXN0aW1hdGUoKTsKLSAgbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8tPnNldF9kdXJhdGlvbihlc3RpbWF0ZWRfZHVyYXRpb24pOwotCi0gIGlmIChpc192aWRlb18pIHsKLSAgICAvLyBFeHBvc2luZyBlc3RpbWF0aW9uIHNvIHNwbGljaW5nL292ZXJsYXAgZnJhbWUgcHJvY2Vzc2luZyBjYW4gbWFrZQotICAgIC8vIGluZm9ybWVkIGRlY2lzaW9ucyBkb3duc3RyZWFtLgotICAgIC8vIFRPRE8oY2hjdW5uaW5naGFtKTogU2V0IHRoaXMgZm9yIGF1ZGlvIGFzIHdlbGwgaW4gbGF0ZXIgY2hhbmdlIHdoZXJlCi0gICAgLy8gYXVkaW8gaXMgc3dpdGNoZWQgdG8gbWF4IGVzdGltYXRpb24gYW5kIHNwbGljaW5nIGlzIGRpc2FibGVkLgotICAgIGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fLT5zZXRfaXNfZHVyYXRpb25fZXN0aW1hdGVkKHRydWUpOwotICB9Ci0KLSAgTElNSVRFRF9NRURJQV9MT0coSU5GTywgbWVkaWFfbG9nXywgbnVtX2R1cmF0aW9uX2VzdGltYXRlc18sCi0gICAgICAgICAgICAgICAgICAgIGtNYXhEdXJhdGlvbkVzdGltYXRlTG9ncykKLSAgICAgIDw8ICJFc3RpbWF0aW5nIFdlYk0gYmxvY2sgZHVyYXRpb24gdG8gYmUgIgotICAgICAgPDwgZXN0aW1hdGVkX2R1cmF0aW9uLkluTWlsbGlzZWNvbmRzKCkKLSAgICAgIDw8ICJtcyBmb3IgdGhlIGxhc3QgKFNpbXBsZSlCbG9jayBpbiB0aGUgQ2x1c3RlciBmb3IgdGhpcyBUcmFjay4gVXNlICIKLSAgICAgICAgICJCbG9ja0dyb3VwcyB3aXRoIEJsb2NrRHVyYXRpb25zIGF0IHRoZSBlbmQgb2YgZWFjaCBUcmFjayBpbiBhICIKLSAgICAgICAgICJDbHVzdGVyIHRvIGF2b2lkIGVzdGltYXRpb24uIjsKLQotICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiIG5ldyBkdXIgOiB0cyAiCi0gICAgICAgICAgIDw8IGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fLT50aW1lc3RhbXAoKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIiBkdXIgIgotICAgICAgICAgICA8PCBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy0+ZHVyYXRpb24oKS5JblNlY29uZHNGKCkKLSAgICAgICAgICAgPDwgIiBrZiAiIDw8IGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fLT5pc19rZXlfZnJhbWUoKQotICAgICAgICAgICA8PCAiIHNpemUgIiA8PCBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXy0+ZGF0YV9zaXplKCk7Ci0KLSAgLy8gRG9uJ3QgdXNlIHRoZSBhcHBsaWVkIGR1cmF0aW9uIGFzIGEgZnV0dXJlIGVzdGltYXRpb24gKGRvbid0IHVzZQotICAvLyBRdWV1ZUJ1ZmZlcigpIGhlcmUuKQotICBidWZmZXJzXy5wdXNoX2JhY2sobGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8pOwotICBsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uXyA9IE5VTEw7Ci19Ci0KLXZvaWQgV2ViTUNsdXN0ZXJQYXJzZXI6OlRyYWNrOjpDbGVhclJlYWR5QnVmZmVycygpIHsKLSAgLy8gTm90ZSB0aGF0IHxidWZmZXJzX3wgYXJlIGtlcHQgYW5kIHxlc3RpbWF0ZWRfbmV4dF9mcmFtZV9kdXJhdGlvbl98IGlzIG5vdAotICAvLyByZXNldCBoZXJlLgotICByZWFkeV9idWZmZXJzXy5jbGVhcigpOwotfQotCi12b2lkIFdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6UmVzZXQoKSB7Ci0gIENsZWFyUmVhZHlCdWZmZXJzKCk7Ci0gIGJ1ZmZlcnNfLmNsZWFyKCk7Ci0gIGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fID0gTlVMTDsKLX0KLQotYm9vbCBXZWJNQ2x1c3RlclBhcnNlcjo6VHJhY2s6OlF1ZXVlQnVmZmVyKAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgYnVmZmVyKSB7Ci0gIERDSEVDSyghbGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl8uZ2V0KCkpOwotCi0gIC8vIFdlYk1DbHVzdGVyUGFyc2VyOjpPbkJsb2NrKCkgZ2l2ZXMgTUVESUFfTE9HIGFuZCBwYXJzZSBlcnJvciBvbiBkZWNyZWFzaW5nCi0gIC8vIGJsb2NrIHRpbWVjb2RlIGRldGVjdGlvbiB3aXRoaW4gYSBjbHVzdGVyLiBUaGVyZWZvcmUsIHdlIHNob3VsZCBub3Qgc2VlCi0gIC8vIHRob3NlIGhlcmUuCi0gIERlY29kZVRpbWVzdGFtcCBwcmV2aW91c19idWZmZXJzX3RpbWVzdGFtcCA9Ci0gICAgICBidWZmZXJzXy5lbXB0eSgpID8gRGVjb2RlVGltZXN0YW1wKCkKLSAgICAgICAgICAgICAgICAgICAgICAgOiBidWZmZXJzXy5iYWNrKCktPkdldERlY29kZVRpbWVzdGFtcCgpOwotICBDSEVDSyhwcmV2aW91c19idWZmZXJzX3RpbWVzdGFtcCA8PSBidWZmZXItPkdldERlY29kZVRpbWVzdGFtcCgpKTsKLQotICBiYXNlOjpUaW1lRGVsdGEgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0aW9uKCk7Ci0gIGlmIChkdXJhdGlvbiA8IGJhc2U6OlRpbWVEZWx0YSgpIHx8IGR1cmF0aW9uID09IGtOb1RpbWVzdGFtcCkgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykKLSAgICAgICAgPDwgIkludmFsaWQgYnVmZmVyIGR1cmF0aW9uOiAiIDw8IGR1cmF0aW9uLkluU2Vjb25kc0YoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBUaGUgZXN0aW1hdGVkIGZyYW1lIGR1cmF0aW9uIGlzIHRoZSBtaW5pbXVtIChmb3IgYXVkaW8pIG9yIHRoZSBtYXhpbXVtCi0gIC8vIChmb3IgdmlkZW8pIG5vbi16ZXJvIGR1cmF0aW9uIHNpbmNlIHRoZSBsYXN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQuIFRoZQotICAvLyBtaW5pbXVtIGlzIHVzZWQgZm9yIGF1ZGlvIHRvIGVuc3VyZSBmcmFtZSBkdXJhdGlvbnMgYXJlbid0IG92ZXJlc3RpbWF0ZWQsCi0gIC8vIHRyaWdnZXJpbmcgdW5uZWNlc3NhcnkgZnJhbWUgc3BsaWNpbmcuIEZvciB2aWRlbywgc3BsaWNpbmcgZG9lcyBub3QgYXBwbHksCi0gIC8vIHNvIG1heGltdW0gaXMgdXNlZCBhbmQgb3ZlcmxhcCBpcyBzaW1wbHkgcmVzb2x2ZWQgYnkgc2hvd2luZyB0aGUKLSAgLy8gbGF0ZXIgb2YgdGhlIG92ZXJsYXBwaW5nIGZyYW1lcyBhdCBpdHMgZ2l2ZW4gUFRTLCBlZmZlY3RpdmVseSB0cmltbWluZyBkb3duCi0gIC8vIHRoZSBvdmVyLWVzdGltYXRlZCBkdXJhdGlvbiBvZiB0aGUgcHJldmlvdXMgZnJhbWUuCi0gIC8vIFRPRE8oY2hjdW5uaW5naGFtKTogVXNlIG1heCBmb3IgYXVkaW8gYW5kIGRpc2FibGUgc3BsaWNpbmcgd2hlbmV2ZXIKLSAgLy8gZXN0aW1hdGVkIGJ1ZmZlcnMgYXJlIGVuY291bnRlcmVkLgotICBpZiAoZHVyYXRpb24gPiBiYXNlOjpUaW1lRGVsdGEoKSkgewotICAgIGJhc2U6OlRpbWVEZWx0YSBvcmlnX2R1cmF0aW9uX2VzdGltYXRlID0gZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fOwotICAgIGlmIChlc3RpbWF0ZWRfbmV4dF9mcmFtZV9kdXJhdGlvbl8gPT0ga05vVGltZXN0YW1wKSB7Ci0gICAgICBlc3RpbWF0ZWRfbmV4dF9mcmFtZV9kdXJhdGlvbl8gPSBkdXJhdGlvbjsKLSAgICB9IGVsc2UgaWYgKGlzX3ZpZGVvXykgewotICAgICAgZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fID0KLSAgICAgICAgICBzdGQ6Om1heChkdXJhdGlvbiwgZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fKTsKLSAgICB9IGVsc2UgewotICAgICAgZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fID0KLSAgICAgICAgICBzdGQ6Om1pbihkdXJhdGlvbiwgZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fKTsKLSAgICB9Ci0KLSAgICBpZiAob3JpZ19kdXJhdGlvbl9lc3RpbWF0ZSAhPSBlc3RpbWF0ZWRfbmV4dF9mcmFtZV9kdXJhdGlvbl8pIHsKLSAgICAgIERWTE9HKDMpIDw8ICJVcGRhdGVkIGR1cmF0aW9uIGVzdGltYXRlOiIKLSAgICAgICAgICAgICAgIDw8IG9yaWdfZHVyYXRpb25fZXN0aW1hdGUuSW5TZWNvbmRzRigpIDw8ICIgLT4gIgotICAgICAgICAgICAgICAgPDwgZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fLkluU2Vjb25kc0YoKQotICAgICAgICAgICAgICAgPDwgIiBhdCB0aW1lc3RhbXA6ICIKLSAgICAgICAgICAgICAgIDw8IGJ1ZmZlci0+R2V0RGVjb2RlVGltZXN0YW1wKCkuSW5TZWNvbmRzRigpOwotICAgIH0KLSAgfQotCi0gIGJ1ZmZlcnNfLnB1c2hfYmFjayhidWZmZXIpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYmFzZTo6VGltZURlbHRhIFdlYk1DbHVzdGVyUGFyc2VyOjpUcmFjazo6R2V0RHVyYXRpb25Fc3RpbWF0ZSgpIHsKLSAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uID0gZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25fOwotICBpZiAoZHVyYXRpb24gIT0ga05vVGltZXN0YW1wKSB7Ci0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiA6IHVzaW5nIGVzdGltYXRlZCBkdXJhdGlvbiI7Ci0gIH0gZWxzZSB7Ci0gICAgRFZMT0coMykgPDwgX19mdW5jX18gPDwgIiA6IHVzaW5nIGhhcmRjb2RlZCBkZWZhdWx0IGR1cmF0aW9uIjsKLSAgICBpZiAoaXNfdmlkZW9fKSB7Ci0gICAgICBkdXJhdGlvbiA9Ci0gICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtEZWZhdWx0VmlkZW9CdWZmZXJEdXJhdGlvbkluTXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBkdXJhdGlvbiA9Ci0gICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtEZWZhdWx0QXVkaW9CdWZmZXJEdXJhdGlvbkluTXMpOwotICAgIH0KLSAgfQotCi0gIERDSEVDSyhkdXJhdGlvbiA+IGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgRENIRUNLKGR1cmF0aW9uICE9IGtOb1RpbWVzdGFtcCk7Ci0gIHJldHVybiBkdXJhdGlvbjsKLX0KLQotdm9pZCBXZWJNQ2x1c3RlclBhcnNlcjo6Q2xlYXJUZXh0VHJhY2tSZWFkeUJ1ZmZlcnMoKSB7Ci0gIHRleHRfYnVmZmVyc19tYXBfLmNsZWFyKCk7Ci0gIGZvciAoVGV4dFRyYWNrTWFwOjppdGVyYXRvciBpdCA9IHRleHRfdHJhY2tfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfdHJhY2tfbWFwXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQuQ2xlYXJSZWFkeUJ1ZmZlcnMoKTsKLSAgfQotfQotCi12b2lkIFdlYk1DbHVzdGVyUGFyc2VyOjpSZXNldFRleHRUcmFja3MoKSB7Ci0gIENsZWFyVGV4dFRyYWNrUmVhZHlCdWZmZXJzKCk7Ci0gIGZvciAoVGV4dFRyYWNrTWFwOjppdGVyYXRvciBpdCA9IHRleHRfdHJhY2tfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ICE9IHRleHRfdHJhY2tfbWFwXy5lbmQoKTsgKytpdCkgewotICAgIGl0LT5zZWNvbmQuUmVzZXQoKTsKLSAgfQotfQotCi12b2lkIFdlYk1DbHVzdGVyUGFyc2VyOjpVcGRhdGVSZWFkeUJ1ZmZlcnMoKSB7Ci0gIERDSEVDSyhyZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfID09IGtOb0RlY29kZVRpbWVzdGFtcCgpKTsKLSAgRENIRUNLKHRleHRfYnVmZmVyc19tYXBfLmVtcHR5KCkpOwotCi0gIGlmIChjbHVzdGVyX2VuZGVkXykgewotICAgIGF1ZGlvXy5BcHBseUR1cmF0aW9uRXN0aW1hdGVJZk5lZWRlZCgpOwotICAgIHZpZGVvXy5BcHBseUR1cmF0aW9uRXN0aW1hdGVJZk5lZWRlZCgpOwotICAgIC8vIFBlciBPbkJsb2NrKCksIGFsbCB0ZXh0IGJ1ZmZlcnMgc2hvdWxkIGFscmVhZHkgaGF2ZSB2YWxpZCBkdXJhdGlvbnMsIHNvCi0gICAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIEFwcGx5RHVyYXRpb25Fc3RpbWF0ZUlmTmVlZGVkKCkgb24gdGV4dCB0cmFja3MKLSAgICAvLyBoZXJlLgotICAgIHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8gPQotICAgICAgICBEZWNvZGVUaW1lc3RhbXA6OkZyb21QcmVzZW50YXRpb25UaW1lKGJhc2U6OlRpbWVEZWx0YTo6TWF4KCkpOwotICAgIERDSEVDSyhyZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfID09IGF1ZGlvXy5HZXRSZWFkeVVwcGVyQm91bmQoKSk7Ci0gICAgRENIRUNLKHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8gPT0gdmlkZW9fLkdldFJlYWR5VXBwZXJCb3VuZCgpKTsKLSAgfSBlbHNlIHsKLSAgICByZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfID0KLSAgICAgICAgc3RkOjptaW4oYXVkaW9fLkdldFJlYWR5VXBwZXJCb3VuZCgpLCB2aWRlb18uR2V0UmVhZHlVcHBlckJvdW5kKCkpOwotICAgIERDSEVDSyhEZWNvZGVUaW1lc3RhbXAoKSA8PSByZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfKTsKLSAgICBEQ0hFQ0soa05vRGVjb2RlVGltZXN0YW1wKCkgIT0gcmVhZHlfYnVmZmVyX3VwcGVyX2JvdW5kXyk7Ci0gIH0KLQotICAvLyBQcmVwYXJlIGVhY2ggdHJhY2sncyByZWFkeSBidWZmZXJzIGZvciByZXRyaWV2YWwuCi0gIGF1ZGlvXy5FeHRyYWN0UmVhZHlCdWZmZXJzKHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF8pOwotICB2aWRlb18uRXh0cmFjdFJlYWR5QnVmZmVycyhyZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfKTsKLSAgZm9yIChUZXh0VHJhY2tNYXA6Oml0ZXJhdG9yIGl0ciA9IHRleHRfdHJhY2tfbWFwXy5iZWdpbigpOwotICAgICAgIGl0ciAhPSB0ZXh0X3RyYWNrX21hcF8uZW5kKCk7ICsraXRyKSB7Ci0gICAgaXRyLT5zZWNvbmQuRXh0cmFjdFJlYWR5QnVmZmVycyhyZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfKTsKLSAgfQotfQotCi1XZWJNQ2x1c3RlclBhcnNlcjo6VHJhY2sqIFdlYk1DbHVzdGVyUGFyc2VyOjpGaW5kVGV4dFRyYWNrKGludCB0cmFja19udW0pIHsKLSAgY29uc3QgVGV4dFRyYWNrTWFwOjppdGVyYXRvciBpdCA9IHRleHRfdHJhY2tfbWFwXy5maW5kKHRyYWNrX251bSk7Ci0KLSAgaWYgKGl0ID09IHRleHRfdHJhY2tfbWFwXy5lbmQoKSkgcmV0dXJuIE5VTEw7Ci0KLSAgcmV0dXJuICZpdC0+c2Vjb25kOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5OGJmZDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DTFVTVEVSX1BBUlNFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fQ0xVU1RFUl9QQVJTRVJfSF8KLQotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c2V0PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBNRURJQV9FWFBPUlQgV2ViTUNsdXN0ZXJQYXJzZXIgOiBwdWJsaWMgV2ViTVBhcnNlckNsaWVudCB7Ci0gcHVibGljOgotICB0eXBlZGVmIFN0cmVhbVBhcnNlcjo6VHJhY2tJZCBUcmFja0lkOwotICB0eXBlZGVmIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+ID4gQnVmZmVyUXVldWU7Ci0gIHR5cGVkZWYgc3RkOjptYXA8VHJhY2tJZCwgY29uc3QgQnVmZmVyUXVldWU+IFRleHRCdWZmZXJRdWV1ZU1hcDsKLQotICAvLyBOdW1iZXJzIGNob3NlbiB0byBlc3RpbWF0ZSB0aGUgZHVyYXRpb24gb2YgYSBidWZmZXIgaWYgbm9uZSBpcyBzZXQgYW5kCi0gIC8vIHRoZXJlIGlzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZ2V0IGEgYmV0dGVyIGVzdGltYXRlLgotICBlbnVtIHsKLSAgICAvLyBDb21tb24gMWsgc2FtcGxlcyBANDQuMWtIegotICAgIGtEZWZhdWx0QXVkaW9CdWZmZXJEdXJhdGlvbkluTXMgPSAyMywKLQotICAgIC8vIENob3NlbiB0byByZXByZXNlbnQgMTZmcHMgZHVyYXRpb24sIHdoaWNoIHdpbGwgcHJldmVudCBNU0Ugc3RhbGxzIGluCi0gICAgLy8gdmlkZW9zIHdpdGggZnJhbWUtcmF0ZXMgYXMgbG93IGFzIDhmcHMuCi0gICAga0RlZmF1bHRWaWRlb0J1ZmZlckR1cmF0aW9uSW5NcyA9IDYzCi0gIH07Ci0KLSAgLy8gT3B1cyBwYWNrZXRzIGVuY29kZSB0aGUgZHVyYXRpb24gYW5kIG90aGVyIHBhcmFtZXRlcnMgaW4gdGhlIDUgbW9zdAotICAvLyBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBmaXJzdCBieXRlLiBUaGUgaW5kZXggaW4gdGhpcyBhcnJheSBjb3JyZXNwb25kcwotICAvLyB0byB0aGUgZHVyYXRpb24gb2YgZWFjaCBmcmFtZSBvZiB0aGUgcGFja2V0IGluIG1pY3Jvc2Vjb25kcy4gU2VlCi0gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzE2I3BhZ2UtMTQKLSAgc3RhdGljIGNvbnN0IHVpbnQxNl90IGtPcHVzRnJhbWVEdXJhdGlvbnNNdVtdOwotCi0gcHJpdmF0ZToKLSAgLy8gSGVscGVyIGNsYXNzIHRoYXQgbWFuYWdlcyBwZXItdHJhY2sgc3RhdGUuCi0gIGNsYXNzIFRyYWNrIHsKLSAgIHB1YmxpYzoKLSAgICBUcmFjayhpbnQgdHJhY2tfbnVtLCBib29sIGlzX3ZpZGVvLCBiYXNlOjpUaW1lRGVsdGEgZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLSAgICB+VHJhY2soKTsKLQotICAgIGludCB0cmFja19udW0oKSBjb25zdCB7IHJldHVybiB0cmFja19udW1fOyB9Ci0KLSAgICAvLyBJZiBhIGJ1ZmZlciBpcyBjdXJyZW50bHkgaGVsZCBhc2lkZSBwZW5kaW5nIGR1cmF0aW9uIGNhbGN1bGF0aW9uLCByZXR1cm5zCi0gICAgLy8gaXRzIGRlY29kZSB0aW1lc3RhbXAuIE90aGVyd2lzZSwgcmV0dXJucyBrSW5maW5pdGVEdXJhdGlvbi4KLSAgICBEZWNvZGVUaW1lc3RhbXAgR2V0UmVhZHlVcHBlckJvdW5kKCk7Ci0KLSAgICAvLyBQcmVwYXJlcyB8cmVhZHlfYnVmZmVyc198IGZvciByZXRyaWV2YWwuIFByaW9yIHRvIGNhbGxpbmcsCi0gICAgLy8gfHJlYWR5X2J1ZmZlcnNffCBtdXN0IGJlIGVtcHR5LiBNb3ZlcyBhbGwgfGJ1ZmZlcnNffCB3aXRoIGRlY29kZQotICAgIC8vIHRpbWVzdGFtcCBiZWZvcmUgfGJlZm9yZV90aW1lc3RhbXB8IHRvIHxyZWFkeV9idWZmZXJzX3wsIHByZXNlcnZpbmcgdGhlaXIKLSAgICAvLyBvcmRlci4KLSAgICB2b2lkIEV4dHJhY3RSZWFkeUJ1ZmZlcnMoY29uc3QgRGVjb2RlVGltZXN0YW1wIGJlZm9yZV90aW1lc3RhbXApOwotCi0gICAgY29uc3QgQnVmZmVyUXVldWUmIHJlYWR5X2J1ZmZlcnMoKSBjb25zdCB7IHJldHVybiByZWFkeV9idWZmZXJzXzsgfQotCi0gICAgLy8gSWYgfGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25ffCBpcyBzZXQsIHVwZGF0ZXMgaXRzIGR1cmF0aW9uCi0gICAgLy8gcmVsYXRpdmUgdG8gfGJ1ZmZlcnwncyB0aW1lc3RhbXAsIGFuZCBhZGRzIGl0IHRvIHxidWZmZXJzX3wgYW5kIHVuc2V0cwotICAgIC8vIHxsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uX3wuIFRoZW4sIGlmIHxidWZmZXJ8IGlzIG1pc3NpbmcKLSAgICAvLyBkdXJhdGlvbiwgc2F2ZXMgfGJ1ZmZlcnwgaW50byB8bGFzdF9hZGRlZF9idWZmZXJfbWlzc2luZ19kdXJhdGlvbl98LCBvcgotICAgIC8vIG90aGVyd2lzZSBhZGRzIHxidWZmZXJ8IHRvIHxidWZmZXJzX3wuCi0gICAgYm9vbCBBZGRCdWZmZXIoY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+JiBidWZmZXIpOwotCi0gICAgLy8gSWYgfGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25ffCBpcyBzZXQsIHVwZGF0ZXMgaXRzIGR1cmF0aW9uIHRvCi0gICAgLy8gYmUgbm9uLWtOb1RpbWVzdGFtcCB2YWx1ZSBvZiB8ZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25ffCBvciBhCi0gICAgLy8gaGFyZC1jb2RlZCBkZWZhdWx0LCB0aGVuIGFkZHMgaXQgdG8gfGJ1ZmZlcnNffCBhbmQgdW5zZXRzCi0gICAgLy8gfGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25ffC4gKFRoaXMgbWV0aG9kIGhlbHBzIHN0cmVhbSBwYXJzZXIKLSAgICAvLyBlbWl0IGFsbCBidWZmZXJzIGluIGEgbWVkaWEgc2VnbWVudCBiZWZvcmUgc2lnbmFsaW5nIGVuZCBvZiBzZWdtZW50LikKLSAgICB2b2lkIEFwcGx5RHVyYXRpb25Fc3RpbWF0ZUlmTmVlZGVkKCk7Ci0KLSAgICAvLyBDbGVhcnMgfHJlYWR5X2J1ZmZlcnNffCAodXNlIEV4dHJhY3RSZWFkeUJ1ZmZlcnMoKSB0byBmaWxsIGl0IGFnYWluKS4KLSAgICAvLyBMZWF2ZXMgYXMtaXMgfGJ1ZmZlcnNffCBhbmQgYW55IHBvc3NpYmx5IGhlbGQtYXNpZGUgYnVmZmVyIHRoYXQgaXMKLSAgICAvLyBtaXNzaW5nIGR1cmF0aW9uLgotICAgIHZvaWQgQ2xlYXJSZWFkeUJ1ZmZlcnMoKTsKLQotICAgIC8vIENsZWFycyBhbGwgYnVmZmVyIHN0YXRlLCBpbmNsdWRpbmcgYW55IHBvc3NpYmx5IGhlbGQtYXNpZGUgYnVmZmVyIHRoYXQKLSAgICAvLyB3YXMgbWlzc2luZyBkdXJhdGlvbiwgYW5kIGFsbCBjb250ZW50cyBvZiB8YnVmZmVyc198IGFuZAotICAgIC8vIHxyZWFkeV9idWZmZXJzX3wuCi0gICAgdm9pZCBSZXNldCgpOwotCi0gICAgYmFzZTo6VGltZURlbHRhIGRlZmF1bHRfZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBkZWZhdWx0X2R1cmF0aW9uXzsgfQotCi0gICBwcml2YXRlOgotICAgIC8vIEhlbHBlciB0aGF0IHNhbml0eS1jaGVja3MgfGJ1ZmZlcnwgZHVyYXRpb24sIHVwZGF0ZXMKLSAgICAvLyB8ZXN0aW1hdGVkX25leHRfZnJhbWVfZHVyYXRpb25ffCwgYW5kIGFkZHMgfGJ1ZmZlcnwgdG8gfGJ1ZmZlcnNffC4KLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHxidWZmZXJ8IGZhaWxlZCBzYW5pdHkgY2hlY2sgYW5kIHRoZXJlZm9yZSB3YXMgbm90IGFkZGVkCi0gICAgLy8gdG8gfGJ1ZmZlcnNffC4gUmV0dXJucyB0cnVlIG90aGVyd2lzZS4KLSAgICBib29sIFF1ZXVlQnVmZmVyKGNvbnN0IHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiYgYnVmZmVyKTsKLQotICAgIC8vIEhlbHBlciB0aGF0IGNhbGN1bGF0ZXMgdGhlIGJ1ZmZlciBkdXJhdGlvbiB0byB1c2UgaW4KLSAgICAvLyBBcHBseUR1cmF0aW9uRXN0aW1hdGVJZk5lZWRlZCgpLgotICAgIGJhc2U6OlRpbWVEZWx0YSBHZXREdXJhdGlvbkVzdGltYXRlKCk7Ci0KLSAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiBlc3RpbWF0ZWQgZHVyYXRpb25zIHVzZWQgaW4gdGhpcyB0cmFjay4gVXNlZCB0bwotICAgIC8vIHByZXZlbnQgbG9nIHNwYW0gZm9yIE1FRElBX0xPRygpcyBhYm91dCBlc3RpbWF0ZWQgZHVyYXRpb24uCi0gICAgaW50IG51bV9kdXJhdGlvbl9lc3RpbWF0ZXNfOwotCi0gICAgaW50IHRyYWNrX251bV87Ci0gICAgYm9vbCBpc192aWRlb187Ci0KLSAgICAvLyBQYXJzZWQgdHJhY2sgYnVmZmVycywgZWFjaCB3aXRoIGR1cmF0aW9uIGFuZCBpbiAoZGVjb2RlKSB0aW1lc3RhbXAgb3JkZXIsCi0gICAgLy8gdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBleHRyYWN0ZWQgaW50byB8cmVhZHlfYnVmZmVyc198LiBOb3RlIHRoYXQgdXAgdG8KLSAgICAvLyBvbmUgYWRkaXRpb25hbCBidWZmZXIgbWlzc2luZyBkdXJhdGlvbiBtYXkgYmUgdHJhY2tlZCBieQotICAgIC8vIHxsYXN0X2FkZGVkX2J1ZmZlcl9taXNzaW5nX2R1cmF0aW9uX3wuCi0gICAgQnVmZmVyUXVldWUgYnVmZmVyc187Ci0gICAgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGxhc3RfYWRkZWRfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25fOwotCi0gICAgLy8gQnVmZmVycyBpbiAoZGVjb2RlKSB0aW1lc3RhbXAgb3JkZXIgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcGFyc2VkIGludG8gYW5kCi0gICAgLy8gZXh0cmFjdGVkIGZyb20gfGJ1ZmZlcnNffC4gQnVmZmVycyBhcmUgbW92ZWQgZnJvbSB8YnVmZmVyc198IHRvCi0gICAgLy8gfHJlYWR5X2J1ZmZlcnNffCBieSBFeHRyYWN0UmVhZHlCdWZmZXJzKCkgaWYgdGhleSBhcmUgYmVsb3cgYSBzcGVjaWZpZWQKLSAgICAvLyB1cHBlciBib3VuZCB0aW1lc3RhbXAuIFRyYWNrIHVzZXJzIGNhbiB0aGVyZWZvcmUgZXh0cmFjdCBvbmx5IHRob3NlCi0gICAgLy8gcGFyc2VkIGJ1ZmZlcnMgd2hpY2ggYXJlICJyZWFkeSIgZm9yIGVtaXNzaW9uIChhbGwgYmVmb3JlIHNvbWUgbWF4aW11bQotICAgIC8vIHRpbWVzdGFtcCkuCi0gICAgQnVmZmVyUXVldWUgcmVhZHlfYnVmZmVyc187Ci0KLSAgICAvLyBJZiBrTm9UaW1lc3RhbXAsIHRoZW4gfGVzdGltYXRlZF9uZXh0X2ZyYW1lX2R1cmF0aW9uX3wgd2lsbCBiZSB1c2VkLgotICAgIGJhc2U6OlRpbWVEZWx0YSBkZWZhdWx0X2R1cmF0aW9uXzsKLQotICAgIC8vIElmIGtOb1RpbWVzdGFtcCwgdGhlbiBhIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLiBUaGlzIGVzdGltYXRlIGlzCi0gICAgLy8gdGhlIG1heGltdW0gKGZvciB2aWRlbyksIG9yIG1pbmltdW0gKGZvciBhdWRpbykgZHVyYXRpb24gc2VlbiBzbyBmYXIgZm9yCi0gICAgLy8gdGhpcyB0cmFjaywgYW5kIGlzIHVzZWQgb25seSBpZiB8ZGVmYXVsdF9kdXJhdGlvbl98IGlzIGtOb1RpbWVzdGFtcC4KLSAgICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IFVzZSBtYXhpbXVtIGZvciBhdWRpbyB0b28sIGFkZGluZyBjaGVja3MgdG8gZGlzYWJsZQotICAgIC8vIHNwbGljaW5nIHdoZW4gdGhlc2UgZXN0aW1hdGVzIGFyZSBvYnNlcnZlZCBpbiBTb3VyY2VCdWZmZXJTdHJlYW0uCi0gICAgYmFzZTo6VGltZURlbHRhIGVzdGltYXRlZF9uZXh0X2ZyYW1lX2R1cmF0aW9uXzsKLQotICAgIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0gIH07Ci0KLSAgdHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRyYWNrPiBUZXh0VHJhY2tNYXA7Ci0KLSBwdWJsaWM6Ci0gIFdlYk1DbHVzdGVyUGFyc2VyKERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwKLSAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lY29kZV9zY2FsZSwgaW50IGF1ZGlvX3RyYWNrX251bSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhIGF1ZGlvX2RlZmF1bHRfZHVyYXRpb24sIGludCB2aWRlb190cmFja19udW0sCi0gICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSB2aWRlb19kZWZhdWx0X2R1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJNVHJhY2tzUGFyc2VyOjpUZXh0VHJhY2tzJiB0ZXh0X3RyYWNrcywKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8aW50NjRfdD4mIGlnbm9yZWRfdHJhY2tzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19lbmNyeXB0aW9uX2tleV9pZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7Ci0gIH5XZWJNQ2x1c3RlclBhcnNlcigpIG92ZXJyaWRlOwotCi0gIC8vIFJlc2V0cyB0aGUgcGFyc2VyIHN0YXRlIHNvIGl0IGNhbiBhY2NlcHQgYSBuZXcgY2x1c3Rlci4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIFBhcnNlcyBhIFdlYk0gY2x1c3RlciBlbGVtZW50IGluIHxidWZ8LgotICAvLwotICAvLyBSZXR1cm5zIC0xIGlmIHRoZSBwYXJzZSBmYWlscy4KLSAgLy8gUmV0dXJucyAwIGlmIG1vcmUgZGF0YSBpcyBuZWVkZWQuCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwYXJzZWQgb24gc3VjY2Vzcy4KLSAgaW50IFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpOwotCi0gIGJhc2U6OlRpbWVEZWx0YSBjbHVzdGVyX3N0YXJ0X3RpbWUoKSBjb25zdCB7IHJldHVybiBjbHVzdGVyX3N0YXJ0X3RpbWVfOyB9Ci0KLSAgLy8gR2V0IHRoZSBjdXJyZW50IHJlYWR5IGJ1ZmZlcnMgcmVzdWx0aW5nIGZyb20gUGFyc2UoKS4KLSAgLy8gSWYgdGhlIHBhcnNlIHJlYWNoZWQgdGhlIGVuZCBvZiBjbHVzdGVyIGFuZCB0aGUgbGFzdCBidWZmZXIgd2FzIGhlbGQgYXNpZGUKLSAgLy8gZHVlIHRvIG1pc3NpbmcgZHVyYXRpb24sIHRoZSBidWZmZXIgaXMgZ2l2ZW4gYW4gZXN0aW1hdGVkIGR1cmF0aW9uIGFuZAotICAvLyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LgotICAvLyBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBpcyBhIGJ1ZmZlciBoZWxkIGFzaWRlIGR1ZSB0byBtaXNzaW5nIGR1cmF0aW9uIGZvcgotICAvLyBhbnkgb2YgdGhlIHRyYWNrcywgbm8gYnVmZmVycyB3aXRoIHNhbWUgb3IgZ3JlYXRlciAoZGVjb2RlKSB0aW1lc3RhbXAgd2lsbAotICAvLyBiZSBpbmNsdWRlZCBpbiB0aGUgYnVmZmVycy4KLSAgLy8gVGhlIHJldHVybmVkIGRlcXVlcyBhcmUgY2xlYXJlZCBieSBQYXJzZSgpIG9yIFJlc2V0KCkgYW5kIHVwZGF0ZWQgYnkgdGhlCi0gIC8vIG5leHQgY2FsbHMgdG8gR2V0e0F1ZGlvLFZpZGVvfUJ1ZmZlcnMoKS4KLSAgLy8gSWYgbm8gUGFyc2UoKSBvciBSZXNldCgpIGhhcyBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIEdldHtBdWRpbywKLSAgLy8gVmlkZW8sVGV4dH1CdWZmZXJzKCksIHRoZW4gdGhlIHByZXZpb3VzIEJ1ZmZlclF1ZXVlJiBpcyByZXR1cm5lZCBhZ2FpbgotICAvLyB3aXRob3V0IGFueSByZWNhbGN1bGF0aW9uLgotICB2b2lkIEdldEJ1ZmZlcnMoU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCogYnVmZmVycyk7Ci0KLSAgLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyBhIHN1YnNldCBvZiB8dGV4dF90cmFja19tYXBffCBjb250YWluaW5nIG9ubHkKLSAgLy8gdHJhY2tzIHdpdGggbm9uLWVtcHR5IGJ1ZmZlciBxdWV1ZXMgcHJvZHVjZWQgYnkgdGhlIGxhc3QgUGFyc2UoKSBhbmQKLSAgLy8gZmlsdGVyZWQgdG8gZXhjbHVkZSBhbnkgYnVmZmVycyB0aGF0IGhhdmUgKGRlY29kZSkgdGltZXN0YW1wIHNhbWUgb3IKLSAgLy8gZ3JlYXRlciB0aGFuIHRoZSBsb3dlc3QgKGRlY29kZSkgdGltZXN0YW1wIGFjcm9zcyBhbGwgdHJhY2tzIG9mIGFueSBidWZmZXIKLSAgLy8gaGVsZCBhc2lkZSBkdWUgdG8gbWlzc2luZyBkdXJhdGlvbiAodW5sZXNzIHRoZSBlbmQgb2YgY2x1c3RlciBoYXMgYmVlbgotICAvLyByZWFjaGVkKS4KLSAgLy8gVGhlIHJldHVybmVkIG1hcCBpcyBjbGVhcmVkIGJ5IFBhcnNlKCkgb3IgUmVzZXQoKSBhbmQgdXBkYXRlZCBieSB0aGUgbmV4dAotICAvLyBjYWxsIHRvIEdldFRleHRCdWZmZXJzKCkuCi0gIC8vIElmIG5vIFBhcnNlKCkgb3IgUmVzZXQoKSBoYXMgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bwotICAvLyBHZXRUZXh0QnVmZmVycygpLCB0aGVuIHRoZSBwcmV2aW91cyBUZXh0QnVmZmVyUXVldWVNYXAmIGlzIHJldHVybmVkIGFnYWluCi0gIC8vIHdpdGhvdXQgYW55IHJlY2FsY3VsYXRpb24uCi0gIGNvbnN0IFRleHRCdWZmZXJRdWV1ZU1hcCYgR2V0VGV4dEJ1ZmZlcnMoKTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGxhc3QgUGFyc2UoKSBjYWxsIHN0b3BwZWQgYXQgdGhlIGVuZCBvZiBhIGNsdXN0ZXIuCi0gIGJvb2wgY2x1c3Rlcl9lbmRlZCgpIGNvbnN0IHsgcmV0dXJuIGNsdXN0ZXJfZW5kZWRfOyB9Ci0KLSBwcml2YXRlOgotICAvLyBXZWJNUGFyc2VyQ2xpZW50IG1ldGhvZHMuCi0gIFdlYk1QYXJzZXJDbGllbnQqIE9uTGlzdFN0YXJ0KGludCBpZCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25MaXN0RW5kKGludCBpZCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25VSW50KGludCBpZCwgaW50NjRfdCB2YWwpIG92ZXJyaWRlOwotICBib29sIE9uQmluYXJ5KGludCBpZCwgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpIG92ZXJyaWRlOwotCi0gIGJvb2wgUGFyc2VCbG9jayhib29sIGlzX3NpbXBsZV9ibG9jaywgY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGFkZGl0aW9uYWwsIGludCBhZGRpdGlvbmFsX3NpemUsIGludCBkdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgIGludDY0X3QgZGlzY2FyZF9wYWRkaW5nLCBib29sIHJlZmVyZW5jZV9ibG9ja19zZXQpOwotICBib29sIE9uQmxvY2soYm9vbCBpc19zaW1wbGVfYmxvY2ssIGludCB0cmFja19udW0sIGludCB0aW1lY29kZSwgaW50IGR1cmF0aW9uLAotICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUsIGNvbnN0IHVpbnQ4X3QqIGFkZGl0aW9uYWwsCi0gICAgICAgICAgICAgICBpbnQgYWRkaXRpb25hbF9zaXplLCBpbnQ2NF90IGRpc2NhcmRfcGFkZGluZywgYm9vbCBpc19rZXlmcmFtZSk7Ci0KLSAgLy8gUmVzZXRzIHRoZSBUcmFjayBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRleHQgdHJhY2suCi0gIHZvaWQgUmVzZXRUZXh0VHJhY2tzKCk7Ci0KLSAgLy8gQ2xlYXJzIHRoZSB0aGUgcmVhZHkgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggZWFjaCB0ZXh0IHRyYWNrLgotICB2b2lkIENsZWFyVGV4dFRyYWNrUmVhZHlCdWZmZXJzKCk7Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgR2V0e0F1ZGlvLFZpZGVvLFRleHR9QnVmZmVycygpIHRoYXQgcmVjb21wdXRlcwotICAvLyB8cmVhZHlfYnVmZmVyX3VwcGVyX2JvdW5kX3wgYW5kIGNhbGxzIEV4dHJhY3RSZWFkeUJ1ZmZlcnMoKSBvbiBlYWNoIHRyYWNrLgotICAvLyBJZiB8Y2x1c3Rlcl9lbmRlZF98IGlzIHRydWUsIGZpcnN0IGFwcGxpZXMgZHVyYXRpb24gZXN0aW1hdGUgaWYgbmVlZGVkIGZvcgotICAvLyB8YXVkaW9ffCBhbmQgfHZpZGVvX3wgYW5kIHNldHMgfHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF98IHRvCi0gIC8vIGtJbmZpbml0ZUR1cmF0aW9uLiBPdGhlcndpc2UsIHNldHMgfHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF98IHRvIHRoZQotICAvLyBtaW5pbXVtIHVwcGVyIGJvdW5kIGFjcm9zcyB8YXVkaW9ffCBhbmQgfHZpZGVvX3wuIChUZXh0IHRyYWNrcyBjYW4gaGF2ZSBubwotICAvLyBidWZmZXJzIG1pc3NpbmcgZHVyYXRpb24sIHNvIHRoZXkgYXJlIG5vdCBpbnZvbHZlZCBpbiBjYWxjdWxhdGluZyB0aGUgdXBwZXIKLSAgLy8gYm91bmQuKQotICAvLyBQYXJzZSgpIG9yIFJlc2V0KCkgbXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBjYWxscyB0byBVcGRhdGVSZWFkeUJ1ZmZlcnMoKSB0bwotICAvLyBjbGVhciBlYWNoIHRyYWNrJ3MgcmVhZHkgYnVmZmVycyBhbmQgdG8gcmVzZXQgfHJlYWR5X2J1ZmZlcl91cHBlcl9ib3VuZF98Ci0gIC8vIHRvIGtOb0RlY29kZVRpbWVzdGFtcCgpLgotICB2b2lkIFVwZGF0ZVJlYWR5QnVmZmVycygpOwotCi0gIC8vIFNlYXJjaCBmb3IgdGhlIGluZGljYXRlZCB0cmFja19udW0gYW1vbmcgdGhlIHRleHQgdHJhY2tzLiAgUmV0dXJucyBOVUxMCi0gIC8vIGlmIHRoYXQgdHJhY2sgbnVtIGlzIG5vdCBhIHRleHQgdHJhY2suCi0gIFRyYWNrKiBGaW5kVGV4dFRyYWNrKGludCB0cmFja19udW0pOwotCi0gIC8vIEF0dGVtcHRzIHRvIHJlYWQgdGhlIGR1cmF0aW9uIGZyb20gdGhlIGVuY29kZWQgYXVkaW8gZGF0YSwgcmV0dXJuaW5nIGFzCi0gIC8vIFRpbWVEZWx0YSBvciBrTm9UaW1lc3RhbXAgaWYgZHVyYXRpb24gY2Fubm90IGJlIHJldHJpZXZlZC4gVGhpcyBvYnZpb3VzbHkKLSAgLy8gdmlvbGF0ZXMgbGF5ZXJpbmcgcnVsZXMsIGJ1dCBpcyB1c2VmdWwgZm9yIE1TRSB0byBrbm93IGR1cmF0aW9uIGluIGNhc2VzCi0gIC8vIHdoZXJlIGl0IGlzbid0IGV4cGxpY2l0bHkgZ2l2ZW4gYW5kIGNhbm5vdCBiZSBjYWxjdWxhdGVkIGZvciBCbG9ja3MgYXQgdGhlCi0gIC8vIGVuZCBvZiBhIENsdXN0ZXIgKHRoZSBuZXh0IENsdXN0ZXIgaW4gcGxheWJhY2stb3JkZXIgbWF5IG5vdCBiZSB0aGUgbmV4dAotICAvLyBDbHVzdGVyIHdlIHBhcnNlLCBzbyB3ZSBjYW4ndCBzaW1wbHkgdXNlIHRoZSBkZWx0YSBvZiB0aGUgZmlyc3QgQmxvY2sgaW4KLSAgLy8gdGhlIG5leHQgQ2x1c3RlcikuIEF2b2lkIGNhbGxpbmcgaWYgZW5jcnlwdGVkOyBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkCi0gIC8vIG91dHB1dC4gU2VlIGltcGxlbWVudGF0aW9uIGZvciBzdXBwb3J0ZWQgY29kZWNzLgotICBiYXNlOjpUaW1lRGVsdGEgVHJ5R2V0RW5jb2RlZEF1ZGlvRHVyYXRpb24oY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpOwotCi0gIC8vIFJlYWRzIE9wdXMgcGFja2V0IGhlYWRlciB0byBkZXRlcm1pbmUgcGFja2V0IGR1cmF0aW9uLiBEdXJhdGlvbiByZXR1cm5lZAotICAvLyBhcyBUaW1lRGVsdGEgb3Iga05vVGltZXN0YW1wIHVwb24gZmFpbHVyZSB0byByZWFkIGR1cmF0aW9uIGZyb20gcGFja2V0LgotICBiYXNlOjpUaW1lRGVsdGEgUmVhZE9wdXNEdXJhdGlvbihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0KLSAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yXzsKLQotICAvLyBUcmFja3MgdGhlIG51bWJlciBvZiBNRURJQV9MT0dzIG1hZGUgaW4gcHJvY2VzcyBvZiByZWFkaW5nIGVuY29kZWQKLSAgLy8gZHVyYXRpb24uIFVzZWZ1bCB0byBwcmV2ZW50IGxvZyBzcGFtLgotICBpbnQgbnVtX2R1cmF0aW9uX2Vycm9yc187Ci0KLSAgZG91YmxlIHRpbWVjb2RlX211bHRpcGxpZXJfOyAgLy8gTXVsdGlwbGllciB1c2VkIHRvIGNvbnZlcnQgdGltZWNvZGVzIGludG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWljcm9zZWNvbmRzLgotICBzdGQ6OnNldDxpbnQ2NF90PiBpZ25vcmVkX3RyYWNrc187Ci0gIHN0ZDo6c3RyaW5nIGF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkXzsKLSAgc3RkOjpzdHJpbmcgdmlkZW9fZW5jcnlwdGlvbl9rZXlfaWRfOwotICBjb25zdCBBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjXzsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXJfOwotCi0gIGludDY0X3QgbGFzdF9ibG9ja190aW1lY29kZV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGJsb2NrX2RhdGFfOwotICBpbnQgYmxvY2tfZGF0YV9zaXplXzsKLSAgaW50NjRfdCBibG9ja19kdXJhdGlvbl87Ci0gIGludDY0X3QgYmxvY2tfYWRkX2lkXzsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBibG9ja19hZGRpdGlvbmFsX2RhdGFfOwotICAvLyBNdXN0IGJlIDAgaWYgfGJsb2NrX2FkZGl0aW9uYWxfZGF0YV98IGlzIG51bGwuIE11c3QgYmUgPiAwIGlmCi0gIC8vIHxibG9ja19hZGRpdGlvbmFsX2RhdGFffCBpcyBOT1QgbnVsbC4KLSAgaW50IGJsb2NrX2FkZGl0aW9uYWxfZGF0YV9zaXplXzsKLQotICBpbnQ2NF90IGRpc2NhcmRfcGFkZGluZ187Ci0gIGJvb2wgZGlzY2FyZF9wYWRkaW5nX3NldF87Ci0KLSAgYm9vbCByZWZlcmVuY2VfYmxvY2tfc2V0XzsKLQotICBpbnQ2NF90IGNsdXN0ZXJfdGltZWNvZGVfOwotICBiYXNlOjpUaW1lRGVsdGEgY2x1c3Rlcl9zdGFydF90aW1lXzsKLSAgYm9vbCBjbHVzdGVyX2VuZGVkXzsKLQotICBUcmFjayBhdWRpb187Ci0gIFRyYWNrIHZpZGVvXzsKLSAgVGV4dFRyYWNrTWFwIHRleHRfdHJhY2tfbWFwXzsKLQotICAvLyBTdWJzZXQgb2YgfHRleHRfdHJhY2tfbWFwX3wgbWFpbnRhaW5lZCBieSBHZXRUZXh0QnVmZmVycygpLCBhbmQgY2xlYXJlZCBieQotICAvLyBDbGVhclRleHRUcmFja1JlYWR5QnVmZmVycygpLiBDYWxsZXJzIG9mIEdldFRleHRCdWZmZXJzKCkgZ2V0IGEgY29uc3QtcmVmCi0gIC8vIHRvIHRoaXMgbWVtYmVyLgotICBUZXh0QnVmZmVyUXVldWVNYXAgdGV4dF9idWZmZXJzX21hcF87Ci0KLSAgLy8gTGltaXRzIHRoZSByYW5nZSBvZiBidWZmZXJzIHJldHVybmVkIGJ5IEdldHtBdWRpbyxWaWRlbyxUZXh0fUJ1ZmZlcnMoKSB0bwotICAvLyB0aGlzIGV4Y2x1c2l2ZSB1cHBlciBib3VuZC4gU2V0IHRvIGtOb0RlY29kZVRpbWVzdGFtcCgpLCBtZWFuaW5nIG5vdCB5ZXQKLSAgLy8gY2FsY3VsYXRlZCwgYnkgUmVzZXQoKSBhbmQgUGFyc2UoKS4gSWYga05vRGVjb2RlVGltZXN0YW1wKCksIHRoZW4KLSAgLy8gR2V0e0F1ZGlvLFZpZGVvLFRleHR9QnVmZmVycygpIHdpbGwgY2FsY3VsYXRlIGl0IHRvIGJlIHRoZSBtaW5pbXVtIChkZWNvZGUpCi0gIC8vIHRpbWVzdGFtcCBhY3Jvc3MgYWxsIHRyYWNrcycgfGxhc3RfYnVmZmVyX21pc3NpbmdfZHVyYXRpb25ffCwgb3IKLSAgLy8ga0luZmluaXRlRHVyYXRpb24gaWYgbm8gYnVmZmVycyBhcmUgY3VycmVudGx5IG1pc3NpbmcgZHVyYXRpb24uCi0gIERlY29kZVRpbWVzdGFtcCByZWFkeV9idWZmZXJfdXBwZXJfYm91bmRfOwotCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFdlYk1DbHVzdGVyUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DTFVTVEVSX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyX3VuaXR0ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTkxZWYzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDExNjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImJhc2UvYmluZC5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS9vcHVzX3BhY2tldF9idWlsZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6Okhhc1N1YnN0cjsKLXVzaW5nIDo6dGVzdGluZzo6SW5TZXF1ZW5jZTsKLXVzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotdXNpbmcgOjp0ZXN0aW5nOjpNb2NrOwotdXNpbmcgOjp0ZXN0aW5nOjpfOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLXR5cGVkZWYgV2ViTVRyYWNrc1BhcnNlcjo6VGV4dFRyYWNrcyBUZXh0VHJhY2tzOwotCi0vLyBNYXRjaGVycyBmb3IgdmVyaWZ5aW5nIGNvbW1vbiBtZWRpYSBsb2cgZW50cnkgc3RyaW5ncy4KLU1BVENIRVJfUChPcHVzUGFja2V0RHVyYXRpb25Ub29IaWdoLCBhY3R1YWxfZHVyYXRpb25fbXMsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJXYXJuaW5nLCBkZW11eGVkIE9wdXMgcGFja2V0IHdpdGggZW5jb2RlZCBkdXJhdGlvbjogIiArCi0gICAgICAgICAgICAgICBiYXNlOjpJbnRUb1N0cmluZyhhY3R1YWxfZHVyYXRpb25fbXMpICsKLSAgICAgICAgICAgICAgICJtcy4gU2hvdWxkIGJlIG5vIGdyZWF0ZXIgdGhhbiAxMjBtcy4iKTsKLX0KLQotTUFUQ0hFUl9QKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkLCBlc3RpbWF0ZWRfZHVyYXRpb25fbXMsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoYXJnLCAiRXN0aW1hdGluZyBXZWJNIGJsb2NrIGR1cmF0aW9uIHRvIGJlICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkludFRvU3RyaW5nKGVzdGltYXRlZF9kdXJhdGlvbl9tcykgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtcyBmb3IgdGhlIGxhc3QgKFNpbXBsZSlCbG9jayBpbiB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDbHVzdGVyIGZvciB0aGlzIFRyYWNrLiBVc2UgQmxvY2tHcm91cHMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIEJsb2NrRHVyYXRpb25zIGF0IHRoZSBlbmQgb2YgZWFjaCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYWNrIGluIGEgQ2x1c3RlciB0byBhdm9pZCBlc3RpbWF0aW9uLiIpOwotfQotCi1NQVRDSEVSX1AyKFdlYk1CbG9ja0R1cmF0aW9uTWlzbWF0Y2hlc09wdXNEdXJhdGlvbiwgYmxvY2tfZHVyYXRpb25fbXMsCi0gICAgICAgICAgIG9wdXNfZHVyYXRpb25fbXMsICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsICJCbG9ja0R1cmF0aW9uICgiICsgYmFzZTo6SW50VG9TdHJpbmcoYmxvY2tfZHVyYXRpb25fbXMpICsKLSAgICAgICAgICAgICAgICJtcykgZGlmZmVycyBzaWduaWZpY2FudGx5IGZyb20gZW5jb2RlZCBkdXJhdGlvbiAoIiArCi0gICAgICAgICAgICAgICBiYXNlOjpJbnRUb1N0cmluZyhvcHVzX2R1cmF0aW9uX21zKSArICJtcykuIik7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRpbWVjb2RlIHNjYWxlIGZvciBtaWxsaXNlY29uZCB0aW1lc3RhbXBzLgotY29uc3QgaW50IGtUaW1lY29kZVNjYWxlID0gMTAwMDAwMDsKLQotY29uc3QgaW50IGtBdWRpb1RyYWNrTnVtID0gMTsKLWNvbnN0IGludCBrVmlkZW9UcmFja051bSA9IDI7Ci1jb25zdCBpbnQga1RleHRUcmFja051bSA9IDM7Ci1jb25zdCBpbnQga1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcyA9IDEzOwotY29uc3QgaW50IGtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMgPSAxNzsKLQotLy8gVGVzdCBkdXJhdGlvbiBkZWZhdWx0cyBtdXN0IGRpZmZlciBmcm9tIHBhcnNlciBlc3RpbWF0aW9uIGRlZmF1bHRzIHRvIGtub3cKLS8vIHdoaWNoIGR1cmF0aW9ucyBwYXJzZXIgdXNlZCB3aGVuIGVtaXR0aW5nIGJ1ZmZlcnMuCi1zdGF0aWNfYXNzZXJ0KAotICAgIHN0YXRpY19jYXN0PGludD4oa1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcykgIT0KLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihXZWJNQ2x1c3RlclBhcnNlcjo6a0RlZmF1bHRBdWRpb0J1ZmZlckR1cmF0aW9uSW5NcyksCi0gICAgInRlc3QgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBlc3RpbWF0aW9uIGZhbGxiYWNrIGF1ZGlvIGR1cmF0aW9uIik7Ci1zdGF0aWNfYXNzZXJ0KAotICAgIHN0YXRpY19jYXN0PGludD4oa1Rlc3RWaWRlb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcykgIT0KLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihXZWJNQ2x1c3RlclBhcnNlcjo6a0RlZmF1bHRWaWRlb0J1ZmZlckR1cmF0aW9uSW5NcyksCi0gICAgInRlc3QgZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBlc3RpbWF0aW9uIGZhbGxiYWNrIHZpZGVvIGR1cmF0aW9uIik7Ci0KLXN0cnVjdCBCbG9ja0luZm8gewotICBpbnQgdHJhY2tfbnVtOwotICBpbnQgdGltZXN0YW1wOwotCi0gIC8vIE5lZ2F0aXZlIHZhbHVlIGlzIGFsbG93ZWQgb25seSBmb3IgYmxvY2sgZ3JvdXBzIChub3Qgc2ltcGxlIGJsb2NrcykgYW5kCi0gIC8vIGRpcmVjdHMgQ3JlYXRlQ2x1c3RlcigpIHRvIGV4Y2x1ZGUgQmxvY2tEdXJhdGlvbiBlbnRyeSBmcm9tIHRoZSBjbHVzdGVyIGZvcgotICAvLyB0aGlzIEJsb2NrR3JvdXAuIFRoZSBhYnNvbHV0ZSB2YWx1ZSBpcyB1c2VkIGZvciBwYXJzZXIgdmVyaWZpY2F0aW9uLgotICAvLyBGb3Igc2ltcGxlIGJsb2NrcywgdGhpcyB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSwgYW5kIGlzIHVzZWQgb25seSBmb3IKLSAgLy8gcGFyc2VyIHZlcmlmaWNhdGlvbi4KLSAgZG91YmxlIGR1cmF0aW9uOwotCi0gIGJvb2wgdXNlX3NpbXBsZV9ibG9jazsKLQotICAvLyBEZWZhdWx0IGRhdGEgd2lsbCBiZSB1c2VkIGlmIG5vIGRhdGEgZ2l2ZW4uCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGE7Ci0gIGludCBkYXRhX2xlbmd0aDsKLQotICBib29sIGlzX2tleV9mcmFtZTsKLX07Ci0KLWNvbnN0IEJsb2NrSW5mbyBrRGVmYXVsdEJsb2NrSW5mb1tdID0gewotICAgIHtrQXVkaW9UcmFja051bSwgMCwgMjMsIHRydWUsIE5VTEwsIDAsIHRydWV9LAotICAgIHtrQXVkaW9UcmFja051bSwgMjMsIDIzLCB0cnVlLCBOVUxMLCAwLCB0cnVlfSwKLSAgICAvLyBBc3N1bWVzIG5vdCB1c2luZyBEZWZhdWx0RHVyYXRpb24KLSAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzNCwgdHJ1ZSwgTlVMTCwgMCwgdHJ1ZX0sCi0gICAge2tBdWRpb1RyYWNrTnVtLCA0NiwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICB7a1ZpZGVvVHJhY2tOdW0sIDY3LCAzMywgZmFsc2UsIE5VTEwsIDAsIHRydWV9LAotICAgIHtrQXVkaW9UcmFja051bSwgNjksIDIzLCBmYWxzZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgIHtrVmlkZW9UcmFja051bSwgMTAwLCAzMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLX07Ci0KLWNvbnN0IHVpbnQ4X3Qga0VuY3J5cHRlZEZyYW1lW10gPSB7Ci0gICAgLy8gQmxvY2sgaXMgZW5jcnlwdGVkCi0gICAgMHgwMSwKLQotICAgIC8vIElWCi0gICAgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOH07Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBDcmVhdGVDbHVzdGVyKGludCB0aW1lY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJsb2NrSW5mbyogYmxvY2tfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19jb3VudCkgewotICBDbHVzdGVyQnVpbGRlciBjYjsKLSAgY2IuU2V0Q2x1c3RlclRpbWVjb2RlKDApOwotCi0gIHVpbnQ4X3Qga0RlZmF1bHRCbG9ja0RhdGFbXSA9IHsweDAwfTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrX2NvdW50OyBpKyspIHsKLSAgICBjb25zdCB1aW50OF90KiBkYXRhOwotICAgIGludCBkYXRhX2xlbmd0aDsKLSAgICBpZiAoYmxvY2tfaW5mb1tpXS5kYXRhICE9IE5VTEwpIHsKLSAgICAgIGRhdGEgPSBibG9ja19pbmZvW2ldLmRhdGE7Ci0gICAgICBkYXRhX2xlbmd0aCA9IGJsb2NrX2luZm9baV0uZGF0YV9sZW5ndGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRhdGEgPSBrRGVmYXVsdEJsb2NrRGF0YTsKLSAgICAgIGRhdGFfbGVuZ3RoID0gc2l6ZW9mKGtEZWZhdWx0QmxvY2tEYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tfaW5mb1tpXS51c2Vfc2ltcGxlX2Jsb2NrKSB7Ci0gICAgICBDSEVDS19HRShibG9ja19pbmZvW2ldLmR1cmF0aW9uLCAwKTsKLSAgICAgIGNiLkFkZFNpbXBsZUJsb2NrKGJsb2NrX2luZm9baV0udHJhY2tfbnVtLCBibG9ja19pbmZvW2ldLnRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2luZm9baV0uaXNfa2V5X2ZyYW1lID8gMHg4MCA6IDB4MDAsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tfaW5mb1tpXS5kdXJhdGlvbiA8IDApIHsKLSAgICAgIGNiLkFkZEJsb2NrR3JvdXBXaXRob3V0QmxvY2tEdXJhdGlvbigKLSAgICAgICAgICBibG9ja19pbmZvW2ldLnRyYWNrX251bSwgYmxvY2tfaW5mb1tpXS50aW1lc3RhbXAsIDAsCi0gICAgICAgICAgYmxvY2tfaW5mb1tpXS5pc19rZXlfZnJhbWUsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIGNiLkFkZEJsb2NrR3JvdXAoYmxvY2tfaW5mb1tpXS50cmFja19udW0sIGJsb2NrX2luZm9baV0udGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgICAgYmxvY2tfaW5mb1tpXS5kdXJhdGlvbiwgMCwgYmxvY2tfaW5mb1tpXS5pc19rZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICBkYXRhLCBkYXRhX2xlbmd0aCk7Ci0gIH0KLQotICByZXR1cm4gY2IuRmluaXNoKCk7Ci19Ci0KLS8vIENyZWF0ZXMgYSBDbHVzdGVyIHdpdGggb25lIGVuY3J5cHRlZCBCbG9jay4gfGJ5dGVzX3RvX3dyaXRlfCBpcyBudW1iZXIgb2YKLS8vIGJ5dGVzIG9mIHRoZSBlbmNyeXB0ZWQgZnJhbWUgdG8gd3JpdGUuCi1zdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gQ3JlYXRlRW5jcnlwdGVkQ2x1c3RlcihpbnQgYnl0ZXNfdG9fd3JpdGUpIHsKLSAgQ0hFQ0tfR1QoYnl0ZXNfdG9fd3JpdGUsIDApOwotICBDSEVDS19MRShieXRlc190b193cml0ZSwgc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yoa0VuY3J5cHRlZEZyYW1lKSkpOwotCi0gIENsdXN0ZXJCdWlsZGVyIGNiOwotICBjYi5TZXRDbHVzdGVyVGltZWNvZGUoMCk7Ci0gIGNiLkFkZFNpbXBsZUJsb2NrKGtWaWRlb1RyYWNrTnVtLCAwLCAwLCBrRW5jcnlwdGVkRnJhbWUsIGJ5dGVzX3RvX3dyaXRlKTsKLSAgcmV0dXJuIGNiLkZpbmlzaCgpOwotfQotCi1ib29sIFZlcmlmeUJ1ZmZlcnMoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYgYnVmZmVyX3F1ZXVlX21hcCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBCbG9ja0luZm8qIGJsb2NrX2luZm8sIGludCBibG9ja19jb3VudCkgewotICBpbnQgYnVmZmVyX2NvdW50ID0gMDsKLSAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGJ1ZmZlcl9xdWV1ZV9tYXApIGJ1ZmZlcl9jb3VudCArPSBpdC5zZWNvbmQuc2l6ZSgpOwotICBpZiAoYmxvY2tfY291bnQgIT0gYnVmZmVyX2NvdW50KSB7Ci0gICAgRFZMT0coMSkgPDwgX19GVU5DVElPTl9fIDw8ICIgOiBibG9ja19jb3VudCAoIiA8PCBibG9ja19jb3VudAotICAgICAgICAgICAgIDw8ICIpIG1pc21hdGNoZXMgYnVmZmVyX2NvdW50ICgiIDw8IGJ1ZmZlcl9jb3VudCA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgc2l6ZV90IGF1ZGlvX29mZnNldCA9IDA7Ci0gIHNpemVfdCB2aWRlb19vZmZzZXQgPSAwOwotICBzaXplX3QgdGV4dF9vZmZzZXQgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrX2NvdW50OyBpKyspIHsKLSAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlKiBidWZmZXJzID0gTlVMTDsKLSAgICBzaXplX3QqIG9mZnNldDsKLSAgICBTdHJlYW1QYXJzZXJCdWZmZXI6OlR5cGUgZXhwZWN0ZWRfdHlwZSA9IERlbXV4ZXJTdHJlYW06OlVOS05PV047Ci0KLSAgICBjb25zdCBhdXRvJiBpdCA9IGJ1ZmZlcl9xdWV1ZV9tYXAuZmluZChibG9ja19pbmZvW2ldLnRyYWNrX251bSk7Ci0gICAgRVhQRUNUX05FKGJ1ZmZlcl9xdWV1ZV9tYXAuZW5kKCksIGl0KTsKLSAgICBidWZmZXJzID0gJml0LT5zZWNvbmQ7Ci0gICAgaWYgKGJsb2NrX2luZm9baV0udHJhY2tfbnVtID09IGtBdWRpb1RyYWNrTnVtKSB7Ci0gICAgICBvZmZzZXQgPSAmYXVkaW9fb2Zmc2V0OwotICAgICAgZXhwZWN0ZWRfdHlwZSA9IERlbXV4ZXJTdHJlYW06OkFVRElPOwotICAgIH0gZWxzZSBpZiAoYmxvY2tfaW5mb1tpXS50cmFja19udW0gPT0ga1ZpZGVvVHJhY2tOdW0pIHsKLSAgICAgIG9mZnNldCA9ICZ2aWRlb19vZmZzZXQ7Ci0gICAgICBleHBlY3RlZF90eXBlID0gRGVtdXhlclN0cmVhbTo6VklERU87Ci0gICAgfSBlbHNlIGlmIChibG9ja19pbmZvW2ldLnRyYWNrX251bSA9PSBrVGV4dFRyYWNrTnVtKSB7Ci0gICAgICBvZmZzZXQgPSAmdGV4dF9vZmZzZXQ7Ci0gICAgICBleHBlY3RlZF90eXBlID0gRGVtdXhlclN0cmVhbTo6VEVYVDsKLSAgICB9IGVsc2UgewotICAgICAgTE9HKEVSUk9SKSA8PCAiVW5leHBlY3RlZCB0cmFjayBudW1iZXIgIiA8PCBibG9ja19pbmZvW2ldLnRyYWNrX251bTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoKm9mZnNldCA+PSBidWZmZXJzLT5zaXplKCkpIHsKLSAgICAgIERWTE9HKDEpIDw8IF9fRlVOQ1RJT05fXyA8PCAiIDogVG9vIGZldyBidWZmZXJzICgiIDw8IGJ1ZmZlcnMtPnNpemUoKQotICAgICAgICAgICAgICAgPDwgIikgZm9yIHRyYWNrX251bSAoIiA8PCBibG9ja19pbmZvW2ldLnRyYWNrX251bQotICAgICAgICAgICAgICAgPDwgIiksIGV4cGVjdGVkIGF0IGxlYXN0ICIgPDwgKm9mZnNldCArIDEgPDwgIiBidWZmZXJzIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyID0gKCpidWZmZXJzKVsoKm9mZnNldCkrK107Ci0KLSAgICBFWFBFQ1RfRVEoYmxvY2tfaW5mb1tpXS50aW1lc3RhbXAsIGJ1ZmZlci0+dGltZXN0YW1wKCkuSW5NaWxsaXNlY29uZHMoKSk7Ci0gICAgRVhQRUNUX0VRKHN0ZDo6YWJzKGJsb2NrX2luZm9baV0uZHVyYXRpb24pLAotICAgICAgICAgICAgICBidWZmZXItPmR1cmF0aW9uKCkuSW5NaWxsaXNlY29uZHNGKCkpOwotICAgIEVYUEVDVF9FUShleHBlY3RlZF90eXBlLCBidWZmZXItPnR5cGUoKSk7Ci0gICAgRVhQRUNUX0VRKGJsb2NrX2luZm9baV0udHJhY2tfbnVtLCBidWZmZXItPnRyYWNrX2lkKCkpOwotICAgIEVYUEVDVF9FUShibG9ja19pbmZvW2ldLmlzX2tleV9mcmFtZSwgYnVmZmVyLT5pc19rZXlfZnJhbWUoKSk7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWZXJpZnlCdWZmZXJzKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxXZWJNQ2x1c3RlclBhcnNlcj4mIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBCbG9ja0luZm8qIGJsb2NrX2luZm8sIGludCBibG9ja19jb3VudCkgewotICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcnM7Ci0gIHBhcnNlci0+R2V0QnVmZmVycygmYnVmZmVycyk7Ci0gIHJldHVybiBWZXJpZnlCdWZmZXJzKGJ1ZmZlcnMsIGJsb2NrX2luZm8sIGJsb2NrX2NvdW50KTsKLX0KLQotYm9vbCBWZXJpZnlUZXh0QnVmZmVycyhjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8V2ViTUNsdXN0ZXJQYXJzZXI+JiBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJsb2NrSW5mbyogYmxvY2tfaW5mb19wdHIsIGludCBibG9ja19jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHRleHRfdHJhY2tfbnVtLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJNQ2x1c3RlclBhcnNlcjo6QnVmZmVyUXVldWUmIHRleHRfYnVmZmVycykgewotICBjb25zdCBCbG9ja0luZm8qIGNvbnN0IGJsb2NrX2luZm9fZW5kID0gYmxvY2tfaW5mb19wdHIgKyBibG9ja19jb3VudDsKLQotICB0eXBlZGVmIFdlYk1DbHVzdGVyUGFyc2VyOjpCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3IgVGV4dEJ1ZmZlckl0ZXI7Ci0gIFRleHRCdWZmZXJJdGVyIGJ1ZmZlcl9pdGVyID0gdGV4dF9idWZmZXJzLmJlZ2luKCk7Ci0gIGNvbnN0IFRleHRCdWZmZXJJdGVyIGJ1ZmZlcl9lbmQgPSB0ZXh0X2J1ZmZlcnMuZW5kKCk7Ci0KLSAgd2hpbGUgKGJsb2NrX2luZm9fcHRyICE9IGJsb2NrX2luZm9fZW5kKSB7Ci0gICAgY29uc3QgQmxvY2tJbmZvJiBibG9ja19pbmZvID0gKmJsb2NrX2luZm9fcHRyKys7Ci0KLSAgICBpZiAoYmxvY2tfaW5mby50cmFja19udW0gIT0gdGV4dF90cmFja19udW0pIGNvbnRpbnVlOwotCi0gICAgRVhQRUNUX0ZBTFNFKGJsb2NrX2luZm8udXNlX3NpbXBsZV9ibG9jayk7Ci0gICAgRVhQRUNUX0ZBTFNFKGJ1ZmZlcl9pdGVyID09IGJ1ZmZlcl9lbmQpOwotCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+IGJ1ZmZlciA9ICpidWZmZXJfaXRlcisrOwotICAgIEVYUEVDVF9FUShibG9ja19pbmZvLnRpbWVzdGFtcCwgYnVmZmVyLT50aW1lc3RhbXAoKS5Jbk1pbGxpc2Vjb25kcygpKTsKLSAgICBFWFBFQ1RfRVEoc3RkOjphYnMoYmxvY2tfaW5mby5kdXJhdGlvbiksCi0gICAgICAgICAgICAgIGJ1ZmZlci0+ZHVyYXRpb24oKS5Jbk1pbGxpc2Vjb25kc0YoKSk7Ci0gICAgRVhQRUNUX0VRKERlbXV4ZXJTdHJlYW06OlRFWFQsIGJ1ZmZlci0+dHlwZSgpKTsKLSAgICBFWFBFQ1RfRVEodGV4dF90cmFja19udW0sIGJ1ZmZlci0+dHJhY2tfaWQoKSk7Ci0gIH0KLQotICBFWFBFQ1RfVFJVRShidWZmZXJfaXRlciA9PSBidWZmZXJfZW5kKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVmVyaWZ5RW5jcnlwdGVkQnVmZmVyKHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPiBidWZmZXIpIHsKLSAgRVhQRUNUX1RSVUUoYnVmZmVyLT5kZWNyeXB0X2NvbmZpZygpKTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oRGVjcnlwdENvbmZpZzo6a0RlY3J5cHRpb25LZXlTaXplKSwKLSAgICAgICAgICAgIGJ1ZmZlci0+ZGVjcnlwdF9jb25maWcoKS0+aXYoKS5sZW5ndGgoKSk7Ci19Ci0KLXZvaWQgQXBwZW5kVG9FbmQoY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZSYgc3JjLAotICAgICAgICAgICAgICAgICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlKiBkZXN0KSB7Ci0gIGZvciAoU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZTo6Y29uc3RfaXRlcmF0b3IgaXRyID0gc3JjLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHNyYy5lbmQoKTsgKytpdHIpIHsKLSAgICBkZXN0LT5wdXNoX2JhY2soKml0cik7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLWNsYXNzIFdlYk1DbHVzdGVyUGFyc2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIFdlYk1DbHVzdGVyUGFyc2VyVGVzdCgpCi0gICAgICA6IG1lZGlhX2xvZ18obmV3IFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPigpKSwKLSAgICAgICAgcGFyc2VyXyhDcmVhdGVEZWZhdWx0UGFyc2VyKCkpIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgUmVzZXRQYXJzZXJUb0hhdmVEZWZhdWx0RHVyYXRpb25zKCkgewotICAgIGJhc2U6OlRpbWVEZWx0YSBkZWZhdWx0X2F1ZGlvX2R1cmF0aW9uID0KLSAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMpOwotICAgIGJhc2U6OlRpbWVEZWx0YSBkZWZhdWx0X3ZpZGVvX2R1cmF0aW9uID0KLSAgICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMpOwotICAgIEFTU0VSVF9HRShkZWZhdWx0X2F1ZGlvX2R1cmF0aW9uLCBiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgQVNTRVJUX0dFKGRlZmF1bHRfdmlkZW9fZHVyYXRpb24sIGJhc2U6OlRpbWVEZWx0YSgpKTsKLSAgICBBU1NFUlRfTkUoa05vVGltZXN0YW1wLCBkZWZhdWx0X2F1ZGlvX2R1cmF0aW9uKTsKLSAgICBBU1NFUlRfTkUoa05vVGltZXN0YW1wLCBkZWZhdWx0X3ZpZGVvX2R1cmF0aW9uKTsKLQotICAgIHBhcnNlcl8ucmVzZXQoQ3JlYXRlUGFyc2VyV2l0aERlZmF1bHREdXJhdGlvbnNBbmRPcHRpb25hbFRleHRUcmFja3MoCi0gICAgICAgIGRlZmF1bHRfYXVkaW9fZHVyYXRpb24sIGRlZmF1bHRfdmlkZW9fZHVyYXRpb24pKTsKLSAgfQotCi0gIC8vIEhlbHBlciB0aGF0IGhhcmQtY29kZXMgc29tZSBub24tdmFyeWluZyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLgotICBXZWJNQ2x1c3RlclBhcnNlciogQ3JlYXRlUGFyc2VySGVscGVyKAotICAgICAgYmFzZTo6VGltZURlbHRhIGF1ZGlvX2RlZmF1bHRfZHVyYXRpb24sCi0gICAgICBiYXNlOjpUaW1lRGVsdGEgdmlkZW9fZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgIGNvbnN0IFdlYk1UcmFja3NQYXJzZXI6OlRleHRUcmFja3MmIHRleHRfdHJhY2tzLAotICAgICAgY29uc3Qgc3RkOjpzZXQ8aW50NjRfdD4mIGlnbm9yZWRfdHJhY2tzLAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkLAotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZpZGVvX2VuY3J5cHRpb25fa2V5X2lkLAotICAgICAgY29uc3QgQXVkaW9Db2RlYyBhdWRpb19jb2RlYykgewotICAgIHJldHVybiBuZXcgV2ViTUNsdXN0ZXJQYXJzZXIoCi0gICAgICAgIGtUaW1lY29kZVNjYWxlLCBrQXVkaW9UcmFja051bSwgYXVkaW9fZGVmYXVsdF9kdXJhdGlvbiwga1ZpZGVvVHJhY2tOdW0sCi0gICAgICAgIHZpZGVvX2RlZmF1bHRfZHVyYXRpb24sIHRleHRfdHJhY2tzLCBpZ25vcmVkX3RyYWNrcywKLSAgICAgICAgYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWQsIHZpZGVvX2VuY3J5cHRpb25fa2V5X2lkLCBhdWRpb19jb2RlYywKLSAgICAgICAgbWVkaWFfbG9nXyk7Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBkZWZhdWx0IHZlcnNpb24gb2YgdGhlIHBhcnNlciBmb3IgdGVzdC4KLSAgV2ViTUNsdXN0ZXJQYXJzZXIqIENyZWF0ZURlZmF1bHRQYXJzZXIoKSB7Ci0gICAgcmV0dXJuIENyZWF0ZVBhcnNlckhlbHBlcihrTm9UaW1lc3RhbXAsIGtOb1RpbWVzdGFtcCwgVGV4dFRyYWNrcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzZXQ8aW50NjRfdD4oKSwgc3RkOjpzdHJpbmcoKSwgc3RkOjpzdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVbmtub3duQXVkaW9Db2RlYyk7Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBwYXJzZXIgZm9yIHRlc3Qgd2l0aCBjdXN0b20gYXVkaW8gYW5kIHZpZGVvIGRlZmF1bHQgZHVyYXRpb25zLCBhbmQKLSAgLy8gb3B0aW9uYWxseSBjdXN0b20gdGV4dCB0cmFja3MuCi0gIFdlYk1DbHVzdGVyUGFyc2VyKiBDcmVhdGVQYXJzZXJXaXRoRGVmYXVsdER1cmF0aW9uc0FuZE9wdGlvbmFsVGV4dFRyYWNrcygKLSAgICAgIGJhc2U6OlRpbWVEZWx0YSBhdWRpb19kZWZhdWx0X2R1cmF0aW9uLAotICAgICAgYmFzZTo6VGltZURlbHRhIHZpZGVvX2RlZmF1bHRfZHVyYXRpb24sCi0gICAgICBjb25zdCBXZWJNVHJhY2tzUGFyc2VyOjpUZXh0VHJhY2tzJiB0ZXh0X3RyYWNrcyA9IFRleHRUcmFja3MoKSkgewotICAgIHJldHVybiBDcmVhdGVQYXJzZXJIZWxwZXIoYXVkaW9fZGVmYXVsdF9kdXJhdGlvbiwgdmlkZW9fZGVmYXVsdF9kdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfdHJhY2tzLCBzdGQ6OnNldDxpbnQ2NF90PigpLCBzdGQ6OnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoKSwga1Vua25vd25BdWRpb0NvZGVjKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBhIHBhcnNlciBmb3IgdGVzdCB3aXRoIGN1c3RvbSBpZ25vcmVkIHRyYWNrcy4KLSAgV2ViTUNsdXN0ZXJQYXJzZXIqIENyZWF0ZVBhcnNlcldpdGhJZ25vcmVkVHJhY2tzKAotICAgICAgc3RkOjpzZXQ8aW50NjRfdD4mIGlnbm9yZWRfdHJhY2tzKSB7Ci0gICAgcmV0dXJuIENyZWF0ZVBhcnNlckhlbHBlcihrTm9UaW1lc3RhbXAsIGtOb1RpbWVzdGFtcCwgVGV4dFRyYWNrcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZF90cmFja3MsIHN0ZDo6c3RyaW5nKCksIHN0ZDo6c3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVW5rbm93bkF1ZGlvQ29kZWMpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgcGFyc2VyIGZvciB0ZXN0IHdpdGggY3VzdG9tIGVuY3J5cHRpb24ga2V5IGlkcyBhbmQgYXVkaW8gY29kZWMuCi0gIFdlYk1DbHVzdGVyUGFyc2VyKiBDcmVhdGVQYXJzZXJXaXRoS2V5SWRzQW5kQXVkaW9Db2RlYygKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBhdWRpb19lbmNyeXB0aW9uX2tleV9pZCwKLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19lbmNyeXB0aW9uX2tleV9pZCwKLSAgICAgIGNvbnN0IEF1ZGlvQ29kZWMgYXVkaW9fY29kZWMpIHsKLSAgICByZXR1cm4gQ3JlYXRlUGFyc2VySGVscGVyKGtOb1RpbWVzdGFtcCwga05vVGltZXN0YW1wLCBUZXh0VHJhY2tzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNldDxpbnQ2NF90PigpLCBhdWRpb19lbmNyeXB0aW9uX2tleV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2VuY3J5cHRpb25fa2V5X2lkLCBhdWRpb19jb2RlYyk7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPj4gbWVkaWFfbG9nXzsKLSAgc3RkOjp1bmlxdWVfcHRyPFdlYk1DbHVzdGVyUGFyc2VyPiBwYXJzZXJfOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCk7Ci19OwotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBIZWxkQmFja0J1ZmZlckhvbGRzQmFja0FsbFRyYWNrcykgewotICAvLyBJZiBhIGJ1ZmZlciBpcyBtaXNzaW5nIGR1cmF0aW9uIGFuZCBpcyBiZWluZyBoZWxkIGJhY2ssIHRoZW4gYWxsIG90aGVyCi0gIC8vIHRyYWNrcycgYnVmZmVycyB0aGF0IGhhdmUgc2FtZSBvciBoaWdoZXIgKGRlY29kZSkgdGltZXN0YW1wIHNob3VsZCBiZSBoZWxkCi0gIC8vIGJhY2sgdG9vIHRvIGtlZXAgdGhlIHRpbWVzdGFtcHMgZW1pdHRlZCBmb3IgYSBjbHVzdGVyIG1vbm90b25pY2FsbHkKLSAgLy8gbm9uLWRlY3JlYXNpbmcgYW5kIGluIHNhbWUgb3JkZXIgYXMgcGFyc2VkLgotICBJblNlcXVlbmNlIHM7Ci0KLSAgLy8gUmVzZXQgdGhlIHBhcnNlciB0byBoYXZlIDMgdHJhY2tzOiB0ZXh0LCB2aWRlbyAobm8gZGVmYXVsdCBmcmFtZSBkdXJhdGlvbiksCi0gIC8vIGFuZCBhdWRpbyAod2l0aCBhIGRlZmF1bHQgZnJhbWUgZHVyYXRpb24pLgotICBUZXh0VHJhY2tzIHRleHRfdHJhY2tzOwotICB0ZXh0X3RyYWNrcy5pbnNlcnQoCi0gICAgICBzdGQ6Om1ha2VfcGFpcihUZXh0VHJhY2tzOjprZXlfdHlwZShrVGV4dFRyYWNrTnVtKSwKLSAgICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0NvbmZpZyhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCAiIikpKTsKLSAgYmFzZTo6VGltZURlbHRhIGRlZmF1bHRfYXVkaW9fZHVyYXRpb24gPQotICAgICAgYmFzZTo6VGltZURlbHRhOjpGcm9tTWlsbGlzZWNvbmRzKGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMpOwotICBBU1NFUlRfR0UoZGVmYXVsdF9hdWRpb19kdXJhdGlvbiwgYmFzZTo6VGltZURlbHRhKCkpOwotICBBU1NFUlRfTkUoa05vVGltZXN0YW1wLCBkZWZhdWx0X2F1ZGlvX2R1cmF0aW9uKTsKLSAgcGFyc2VyXy5yZXNldChDcmVhdGVQYXJzZXJXaXRoRGVmYXVsdER1cmF0aW9uc0FuZE9wdGlvbmFsVGV4dFRyYWNrcygKLSAgICAgIGRlZmF1bHRfYXVkaW9fZHVyYXRpb24sIGtOb1RpbWVzdGFtcCwgdGV4dF90cmFja3MpKTsKLQotICBjb25zdCBpbnQga0V4cGVjdGVkVmlkZW9Fc3RpbWF0aW9uSW5NcyA9IDMzOwotCi0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvW10gPSB7Ci0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDAsIDMzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIDIzLCBmYWxzZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tUZXh0VHJhY2tOdW0sIDEwLCA0MiwgZmFsc2UsIE5VTEwsIDAsIHRydWV9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCAyMywga1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgdHJ1ZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzMywgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCAzNiwga1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgdHJ1ZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDY2LCBrRXhwZWN0ZWRWaWRlb0VzdGltYXRpb25Jbk1zLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDcwLCBrVGVzdEF1ZGlvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCB0cnVlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgODMsIGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICB9OwotCi0gIGNvbnN0IGludCBrRXhwZWN0ZWRCdWZmZXJzT25QYXJ0aWFsQ2x1c3RlcltdID0gewotICAgICAgMCwgIC8vIFZpZGVvIHNpbXBsZSBibG9jayB3aXRob3V0IERlZmF1bHREdXJhdGlvbiBzaG91bGQgYmUgaGVsZCBiYWNrCi0gICAgICAwLCAgLy8gQXVkaW8gYnVmZmVyIHJlYWR5LCBidXQgbm90IGVtaXR0ZWQgYmVjYXVzZSBpdHMgVFMgPj0gaGVsZCBiYWNrCi0gICAgICAgICAgLy8gdmlkZW8KLSAgICAgIDAsICAvLyBUZXh0IGJ1ZmZlciByZWFkeSwgYnV0IG5vdCBlbWl0dGVkIGJlY2F1c2UgaXRzIFRTID49IGhlbGQgYmFjawotICAgICAgICAgIC8vIHZpZGVvCi0gICAgICAwLCAgLy8gMm5kIGF1ZGlvIGJ1ZmZlciByZWFkeSwgYWxzbyBub3QgZW1pdHRlZCBmb3Igc2FtZSByZWFzb24gYXMgZmlyc3QKLSAgICAgIDQsICAvLyBBbGwgcHJldmlvdXMgYnVmZmVycyBlbWl0dGVkLCAybmQgdmlkZW8gaGVsZCBiYWNrIHdpdGggbm8gZHVyYXRpb24KLSAgICAgIDQsICAvLyAybmQgdmlkZW8gc3RpbGwgaGFzIG5vIGR1cmF0aW9uLCAzcmQgYXVkaW8gcmVhZHkgYnV0IG5vdCBlbWl0dGVkCi0gICAgICA2LCAgLy8gQWxsIHByZXZpb3VzIGJ1ZmZlcnMgZW1pdHRlZCwgM3JkIHZpZGVvIGhlbGQgYmFjayB3aXRoIG5vIGR1cmF0aW9uCi0gICAgICA2LCAgLy8gM3JkIHZpZGVvIHN0aWxsIGhhcyBubyBkdXJhdGlvbiwgNHRoIGF1ZGlvIHJlYWR5IGJ1dCBub3QgZW1pdHRlZAotICAgICAgOSwgIC8vIENsdXN0ZXIgZW5kIGVtaXRzIGFsbCBidWZmZXJzIGFuZCAzcmQgdmlkZW8ncyBkdXJhdGlvbiBpcyBlc3RpbWF0ZWQKLSAgfTsKLQotICBBU1NFUlRfRVEoYXJyYXlzaXplKGtCbG9ja0luZm8pLCBhcnJheXNpemUoa0V4cGVjdGVkQnVmZmVyc09uUGFydGlhbENsdXN0ZXIpKTsKLSAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtCbG9ja0luZm8pOwotCi0gIC8vIEl0ZXJhdGl2ZWx5IGNyZWF0ZSBhIGNsdXN0ZXIgY29udGFpbmluZyB0aGUgZmlyc3QgTisxIGJsb2NrcyBhbmQgcGFyc2UgYWxsCi0gIC8vIGJ1dCB0aGUgbGFzdCBieXRlIG9mIHRoZSBjbHVzdGVyIChleGNlcHQgd2hlbiBOPT18YmxvY2tfY291bnR8LCBqdXN0IHBhcnNlCi0gIC8vIHRoZSB3aG9sZSBjbHVzdGVyKS4gVmVyaWZ5IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4KLSAgLy8gfGtFeHBlY3RlZEJ1ZmZlcnNPblBhcnRpYWxDbHVzdGVyfCBpZGVudGlmaWVzIHRoZSBleGFjdCBzdWJzZXQgb2YKLSAgLy8gfGtCbG9ja0luZm98IHJldHVybmVkIGJ5IHRoZSBwYXJzZXIuCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tfY291bnQ7ICsraSkgewotICAgIGlmIChpID4gMCkgcGFyc2VyXy0+UmVzZXQoKTsKLSAgICAvLyBTaW5jZSB3ZSBkb24ndCBrbm93IGV4YWN0bHkgdGhlIG9mZnNldHMgb2YgZWFjaCBibG9jayBpbiB0aGUgZnVsbAotICAgIC8vIGNsdXN0ZXIsIGJ1aWxkIGEgY2x1c3RlciB3aXRoIGV4YWN0bHkgb25lIGFkZGl0aW9uYWwgYmxvY2sgc28gdGhhdAotICAgIC8vIHBhcnNlIG9mIGFsbCBidXQgb25lIGJ5dGUgc2hvdWxkIGRldGVybWluaXN0aWNhbGx5IHBhcnNlIGFsbCBidXQgdGhlCi0gICAgLy8gbGFzdCBmdWxsIGJsb2NrLiBEb24ndCB8ZXhjZWVkIGJsb2NrX2NvdW50fCBibG9ja3MgdGhvdWdoLgotICAgIGludCBibG9ja3NfaW5fY2x1c3RlciA9IHN0ZDo6bWluKGkgKyAyLCBibG9ja19jb3VudCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICAgIENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbywgYmxvY2tzX2luX2NsdXN0ZXIpKTsKLSAgICAvLyBQYXJzZSBhbGwgYnV0IHRoZSBsYXN0IGJ5dGUgdW5sZXNzIHdlIG5lZWQgdG8gcGFyc2UgdGhlIGZ1bGwgY2x1c3Rlci4KLSAgICBib29sIHBhcnNlX2Z1bGxfY2x1c3RlciA9IGkgPT0gKGJsb2NrX2NvdW50IC0gMSk7Ci0KLSAgICBpZiAocGFyc2VfZnVsbF9jbHVzdGVyKSB7Ci0gICAgICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgICAgIFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKGtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMpKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBwYXJzZV9mdWxsX2NsdXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjbHVzdGVyLT5zaXplKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbHVzdGVyLT5zaXplKCkgLSAxKTsKLSAgICBpZiAocGFyc2VfZnVsbF9jbHVzdGVyKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiVmVyaWZ5aW5nIHBhcnNlIHJlc3VsdCBvZiBmdWxsIGNsdXN0ZXIgb2YgIgotICAgICAgICAgICAgICAgPDwgYmxvY2tzX2luX2NsdXN0ZXIgPDwgIiBibG9ja3MiOwotICAgICAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLSAgICB9IGVsc2UgewotICAgICAgRFZMT0coMSkgPDwgIlZlcmlmeWluZyBwYXJzZSByZXN1bHQgb2YgY2x1c3RlciBvZiAiIDw8IGJsb2Nrc19pbl9jbHVzdGVyCi0gICAgICAgICAgICAgICA8PCAiIGJsb2NrcyB3aXRoIGxhc3QgYmxvY2sgaW5jb21wbGV0ZSI7Ci0gICAgICBFWFBFQ1RfR1QoY2x1c3Rlci0+c2l6ZSgpLCByZXN1bHQpOwotICAgICAgRVhQRUNUX0xUKDAsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgRVhQRUNUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0V4cGVjdGVkQnVmZmVyc09uUGFydGlhbENsdXN0ZXJbaV0pKTsKLSAgfQotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBSZXNldCkgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtEZWZhdWx0QmxvY2tJbmZvKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICBDcmVhdGVDbHVzdGVyKDAsIGtEZWZhdWx0QmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotCi0gIC8vIFNlbmQgc2xpZ2h0bHkgbGVzcyB0aGFuIHRoZSBmdWxsIGNsdXN0ZXIgc28gYWxsIGJ1dCB0aGUgbGFzdCBibG9jayBpcwotICAvLyBwYXJzZWQuCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSAtIDEpOwotICBFWFBFQ1RfR1QocmVzdWx0LCAwKTsKLSAgRVhQRUNUX0xUKHJlc3VsdCwgY2x1c3Rlci0+c2l6ZSgpKTsKLQotICBBU1NFUlRfVFJVRShWZXJpZnlCdWZmZXJzKHBhcnNlcl8sIGtEZWZhdWx0QmxvY2tJbmZvLCBibG9ja19jb3VudCAtIDEpKTsKLSAgcGFyc2VyXy0+UmVzZXQoKTsKLQotICAvLyBOb3cgcGFyc2UgYSB3aG9sZSBjbHVzdGVyIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgYmxvY2tzIHdpbGwgZ2V0IHBhcnNlZC4KLSAgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfRVEoY2x1c3Rlci0+c2l6ZSgpLCByZXN1bHQpOwotICBBU1NFUlRfVFJVRShWZXJpZnlCdWZmZXJzKHBhcnNlcl8sIGtEZWZhdWx0QmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBQYXJzZUNsdXN0ZXJXaXRoU2luZ2xlQ2FsbCkgewotICBpbnQgYmxvY2tfY291bnQgPSBhcnJheXNpemUoa0RlZmF1bHRCbG9ja0luZm8pOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3RlcigKLSAgICAgIENyZWF0ZUNsdXN0ZXIoMCwga0RlZmF1bHRCbG9ja0luZm8sIGJsb2NrX2NvdW50KSk7Ci0KLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrRGVmYXVsdEJsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VDbHVzdGVyV2l0aE11bHRpcGxlQ2FsbHMpIHsKLSAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtEZWZhdWx0QmxvY2tJbmZvKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICBDcmVhdGVDbHVzdGVyKDAsIGtEZWZhdWx0QmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSBjbHVzdGVyLT5kYXRhKCk7Ci0gIGludCBzaXplID0gY2x1c3Rlci0+c2l6ZSgpOwotICBpbnQgZGVmYXVsdF9wYXJzZV9zaXplID0gMzsKLSAgaW50IHBhcnNlX3NpemUgPSBzdGQ6Om1pbihkZWZhdWx0X3BhcnNlX3NpemUsIHNpemUpOwotCi0gIFN0cmVhbVBhcnNlcjo6QnVmZmVyUXVldWVNYXAgYnVmZmVyczsKLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGRhdGEsIHBhcnNlX3NpemUpOwotICAgIEFTU0VSVF9HRShyZXN1bHQsIDApOwotICAgIEFTU0VSVF9MRShyZXN1bHQsIHBhcnNlX3NpemUpOwotCi0gICAgaWYgKHJlc3VsdCA9PSAwKSB7Ci0gICAgICAvLyBUaGUgcGFyc2VyIG5lZWRzIG1vcmUgZGF0YSBzbyBpbmNyZWFzZSB0aGUgcGFyc2Vfc2l6ZSBhIGxpdHRsZS4KLSAgICAgIHBhcnNlX3NpemUgKz0gZGVmYXVsdF9wYXJzZV9zaXplOwotICAgICAgcGFyc2Vfc2l6ZSA9IHN0ZDo6bWluKHBhcnNlX3NpemUsIHNpemUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCBicW07Ci0gICAgcGFyc2VyXy0+R2V0QnVmZmVycygmYnFtKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogYnFtKSB7Ci0gICAgICBBcHBlbmRUb0VuZChpdC5zZWNvbmQsICZidWZmZXJzW2l0LmZpcnN0XSk7Ci0gICAgfQotCi0gICAgcGFyc2Vfc2l6ZSA9IGRlZmF1bHRfcGFyc2Vfc2l6ZTsKLQotICAgIGRhdGEgKz0gcmVzdWx0OwotICAgIHNpemUgLT0gcmVzdWx0OwotICB9Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMoYnVmZmVycywga0RlZmF1bHRCbG9ja0luZm8sIGJsb2NrX2NvdW50KSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGJvdGggQmxvY2tHcm91cHMgd2l0aCB0aGUgQmxvY2tEdXJhdGlvbiBiZWZvcmUgdGhlIEJsb2NrCi0vLyBhbmQgQmxvY2tHcm91cHMgd2l0aCB0aGUgQmxvY2tEdXJhdGlvbiBhZnRlciB0aGUgQmxvY2sgYXJlIHN1cHBvcnRlZAotLy8gY29ycmVjdGx5LgotLy8gTm90ZTogUmF3IGJ5dGVzIGFyZSB1c2UgaGVyZSBiZWNhdXNlIENsdXN0ZXJCdWlsZGVyIG9ubHkgZ2VuZXJhdGVzCi0vLyBvbmUgb2YgdGhlc2Ugc2NlbmFyaW9zLgotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VCbG9ja0dyb3VwKSB7Ci0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvW10gPSB7Ci0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIDIzLCBmYWxzZSwgTlVMTCwgMCwgdHJ1ZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzNCwgZmFsc2UsIE5VTEwsIDAsIHRydWV9LAotICB9OwotICBpbnQgYmxvY2tfY291bnQgPSBhcnJheXNpemUoa0Jsb2NrSW5mbyk7Ci0KLSAgY29uc3QgdWludDhfdCBrQ2x1c3RlckRhdGFbXSA9IHsKLSAgICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsIDB4OUIsICAvLyBDbHVzdGVyKHNpemU9MjcpCi0gICAgICAweEU3LCAweDgxLCAweDAwLCAgICAgICAgICAgICAgLy8gVGltZWNvZGUoc2l6ZT0xLCB2YWx1ZT0wKQotICAgICAgLy8gQmxvY2tHcm91cCB3aXRoIEJsb2NrRHVyYXRpb24gYmVmb3JlIEJsb2NrLgotICAgICAgMHhBMCwgMHg4QSwgICAgICAgIC8vIEJsb2NrR3JvdXAoc2l6ZT0xMCkKLSAgICAgIDB4OUIsIDB4ODEsIDB4MTcsICAvLyBCbG9ja0R1cmF0aW9uKHNpemU9MSwgdmFsdWU9MjMpCi0gICAgICAweEExLCAweDg1LCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweGFhLCAgLy8gQmxvY2soc2l6ZT01LCB0cmFjaz0xLCB0cz0wKQotICAgICAgLy8gQmxvY2tHcm91cCB3aXRoIEJsb2NrRHVyYXRpb24gYWZ0ZXIgQmxvY2suCi0gICAgICAweEEwLCAweDhBLCAgLy8gQmxvY2tHcm91cChzaXplPTEwKQotICAgICAgMHhBMSwgMHg4NSwgMHg4MiwgMHgwMCwgMHgyMSwgMHgwMCwKLSAgICAgIDB4NTUsICAgICAgICAgICAgICAvLyBCbG9jayhzaXplPTUsIHRyYWNrPTIsIHRzPTMzKQotICAgICAgMHg5QiwgMHg4MSwgMHgyMiwgIC8vIEJsb2NrRHVyYXRpb24oc2l6ZT0xLCB2YWx1ZT0zNCkKLSAgfTsKLSAgY29uc3QgaW50IGtDbHVzdGVyU2l6ZSA9IHNpemVvZihrQ2x1c3RlckRhdGEpOwotCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShrQ2x1c3RlckRhdGEsIGtDbHVzdGVyU2l6ZSk7Ci0gIEVYUEVDVF9FUShrQ2x1c3RlclNpemUsIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VTaW1wbGVCbG9ja0FuZEJsb2NrR3JvdXBNaXh0dXJlKSB7Ci0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvW10gPSB7Ci0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDIzLCAyMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMzMsIDM0LCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDQ2LCAyMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgNjcsIDMzLCBmYWxzZSwgTlVMTCwgMCwgZmFsc2V9LAotICB9OwotICBpbnQgYmxvY2tfY291bnQgPSBhcnJheXNpemUoa0Jsb2NrSW5mbyk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLQotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfRVEoY2x1c3Rlci0+c2l6ZSgpLCByZXN1bHQpOwotICBBU1NFUlRfVFJVRShWZXJpZnlCdWZmZXJzKHBhcnNlcl8sIGtCbG9ja0luZm8sIGJsb2NrX2NvdW50KSk7Ci19Ci0KLVRFU1RfRihXZWJNQ2x1c3RlclBhcnNlclRlc3QsIElnbm9yZWRUcmFja3MpIHsKLSAgc3RkOjpzZXQ8aW50NjRfdD4gaWdub3JlZF90cmFja3M7Ci0gIGlnbm9yZWRfdHJhY2tzLmluc2VydChrVGV4dFRyYWNrTnVtKTsKLQotICBwYXJzZXJfLnJlc2V0KENyZWF0ZVBhcnNlcldpdGhJZ25vcmVkVHJhY2tzKGlnbm9yZWRfdHJhY2tzKSk7Ci0KLSAgY29uc3QgQmxvY2tJbmZvIGtJbnB1dEJsb2NrSW5mb1tdID0gewotICAgICAge2tBdWRpb1RyYWNrTnVtLCAwLCAyMywgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCAyMywgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMzMsIDM0LCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a1RleHRUcmFja051bSwgMzMsIDk5LCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDQ2LCAyMywgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCA2NywgMzQsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgfTsKLSAgaW50IGlucHV0X2Jsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtJbnB1dEJsb2NrSW5mbyk7Ci0KLSAgY29uc3QgQmxvY2tJbmZvIGtPdXRwdXRCbG9ja0luZm9bXSA9IHsKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMCwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMjMsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzNCwgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCA0NiwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgNjcsIDM0LCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gIH07Ci0gIGludCBvdXRwdXRfYmxvY2tfY291bnQgPSBhcnJheXNpemUoa091dHB1dEJsb2NrSW5mbyk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICBDcmVhdGVDbHVzdGVyKDAsIGtJbnB1dEJsb2NrSW5mbywgaW5wdXRfYmxvY2tfY291bnQpKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIzKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMzQpKTsKLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrT3V0cHV0QmxvY2tJbmZvLCBvdXRwdXRfYmxvY2tfY291bnQpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VUZXh0VHJhY2tzKSB7Ci0gIFRleHRUcmFja3MgdGV4dF90cmFja3M7Ci0KLSAgdGV4dF90cmFja3MuaW5zZXJ0KAotICAgICAgc3RkOjptYWtlX3BhaXIoVGV4dFRyYWNrczo6a2V5X3R5cGUoa1RleHRUcmFja051bSksCi0gICAgICAgICAgICAgICAgICAgICBUZXh0VHJhY2tDb25maWcoa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgIiIpKSk7Ci0KLSAgcGFyc2VyXy5yZXNldChDcmVhdGVQYXJzZXJXaXRoRGVmYXVsdER1cmF0aW9uc0FuZE9wdGlvbmFsVGV4dFRyYWNrcygKLSAgICAgIGtOb1RpbWVzdGFtcCwga05vVGltZXN0YW1wLCB0ZXh0X3RyYWNrcykpOwotCi0gIGNvbnN0IEJsb2NrSW5mbyBrSW5wdXRCbG9ja0luZm9bXSA9IHsKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMCwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMjMsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzNCwgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tUZXh0VHJhY2tOdW0sIDMzLCA0MiwgZmFsc2UsIE5VTEwsIDAsIHRydWV9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCA0NiwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVGV4dFRyYWNrTnVtLCA1NSwgNDQsIGZhbHNlLCBOVUxMLCAwLCB0cnVlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgNjcsIDM0LCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gIH07Ci0gIGludCBpbnB1dF9ibG9ja19jb3VudCA9IGFycmF5c2l6ZShrSW5wdXRCbG9ja0luZm8pOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKAotICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBrSW5wdXRCbG9ja0luZm8sIGlucHV0X2Jsb2NrX2NvdW50KSk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgyMykpOwotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDM0KSk7Ci0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSk7Ci0gIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0lucHV0QmxvY2tJbmZvLCBpbnB1dF9ibG9ja19jb3VudCkpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBUZXh0VHJhY2tzU2ltcGxlQmxvY2spIHsKLSAgVGV4dFRyYWNrcyB0ZXh0X3RyYWNrczsKLQotICB0ZXh0X3RyYWNrcy5pbnNlcnQoCi0gICAgICBzdGQ6Om1ha2VfcGFpcihUZXh0VHJhY2tzOjprZXlfdHlwZShrVGV4dFRyYWNrTnVtKSwKLSAgICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0NvbmZpZyhrVGV4dFN1YnRpdGxlcywgIiIsICIiLCAiIikpKTsKLQotICBwYXJzZXJfLnJlc2V0KENyZWF0ZVBhcnNlcldpdGhEZWZhdWx0RHVyYXRpb25zQW5kT3B0aW9uYWxUZXh0VHJhY2tzKAotICAgICAga05vVGltZXN0YW1wLCBrTm9UaW1lc3RhbXAsIHRleHRfdHJhY2tzKSk7Ci0KLSAgY29uc3QgQmxvY2tJbmZvIGtJbnB1dEJsb2NrSW5mb1tdID0gewotICAgICAge2tUZXh0VHJhY2tOdW0sIDMzLCA0MiwgdHJ1ZX0sCi0gIH07Ci0gIGludCBpbnB1dF9ibG9ja19jb3VudCA9IGFycmF5c2l6ZShrSW5wdXRCbG9ja0luZm8pOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKAotICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBrSW5wdXRCbG9ja0luZm8sIGlucHV0X2Jsb2NrX2NvdW50KSk7Ci0KLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0xUKHJlc3VsdCwgMCk7Ci19Ci0KLVRFU1RfRihXZWJNQ2x1c3RlclBhcnNlclRlc3QsIFBhcnNlTXVsdGlwbGVUZXh0VHJhY2tzKSB7Ci0gIFRleHRUcmFja3MgdGV4dF90cmFja3M7Ci0KLSAgY29uc3QgaW50IGtTdWJ0aXRsZVRleHRUcmFja051bSA9IGtUZXh0VHJhY2tOdW07Ci0gIGNvbnN0IGludCBrQ2FwdGlvblRleHRUcmFja051bSA9IGtUZXh0VHJhY2tOdW0gKyAxOwotCi0gIHRleHRfdHJhY2tzLmluc2VydCgKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKFRleHRUcmFja3M6OmtleV90eXBlKGtTdWJ0aXRsZVRleHRUcmFja051bSksCi0gICAgICAgICAgICAgICAgICAgICBUZXh0VHJhY2tDb25maWcoa1RleHRTdWJ0aXRsZXMsICIiLCAiIiwgIiIpKSk7Ci0KLSAgdGV4dF90cmFja3MuaW5zZXJ0KAotICAgICAgc3RkOjptYWtlX3BhaXIoVGV4dFRyYWNrczo6a2V5X3R5cGUoa0NhcHRpb25UZXh0VHJhY2tOdW0pLAotICAgICAgICAgICAgICAgICAgICAgVGV4dFRyYWNrQ29uZmlnKGtUZXh0Q2FwdGlvbnMsICIiLCAiIiwgIiIpKSk7Ci0KLSAgcGFyc2VyXy5yZXNldChDcmVhdGVQYXJzZXJXaXRoRGVmYXVsdER1cmF0aW9uc0FuZE9wdGlvbmFsVGV4dFRyYWNrcygKLSAgICAgIGtOb1RpbWVzdGFtcCwga05vVGltZXN0YW1wLCB0ZXh0X3RyYWNrcykpOwotCi0gIGNvbnN0IEJsb2NrSW5mbyBrSW5wdXRCbG9ja0luZm9bXSA9IHsKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMCwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMjMsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDMzLCAzNCwgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tTdWJ0aXRsZVRleHRUcmFja051bSwgMzMsIDQyLCBmYWxzZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCA0NiwgMjMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQ2FwdGlvblRleHRUcmFja051bSwgNTUsIDQ0LCBmYWxzZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCA2NywgMzQsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrU3VidGl0bGVUZXh0VHJhY2tOdW0sIDY3LCAzMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgfTsKLSAgaW50IGlucHV0X2Jsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtJbnB1dEJsb2NrSW5mbyk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICBDcmVhdGVDbHVzdGVyKDAsIGtJbnB1dEJsb2NrSW5mbywgaW5wdXRfYmxvY2tfY291bnQpKTsKLQotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKDIzKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoMzQpKTsKLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLQotICBjb25zdCBXZWJNQ2x1c3RlclBhcnNlcjo6VGV4dEJ1ZmZlclF1ZXVlTWFwJiB0ZXh0X21hcCA9Ci0gICAgICBwYXJzZXJfLT5HZXRUZXh0QnVmZmVycygpOwotICBmb3IgKFdlYk1DbHVzdGVyUGFyc2VyOjpUZXh0QnVmZmVyUXVldWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9Ci0gICAgICAgICAgIHRleHRfbWFwLmJlZ2luKCk7Ci0gICAgICAgaXRyICE9IHRleHRfbWFwLmVuZCgpOyArK2l0cikgewotICAgIGNvbnN0IFRleHRUcmFja3M6OmNvbnN0X2l0ZXJhdG9yIGZpbmRfcmVzdWx0ID0gdGV4dF90cmFja3MuZmluZChpdHItPmZpcnN0KTsKLSAgICBBU1NFUlRfVFJVRShmaW5kX3Jlc3VsdCAhPSB0ZXh0X3RyYWNrcy5lbmQoKSk7Ci0gICAgQVNTRVJUX1RSVUUoVmVyaWZ5VGV4dEJ1ZmZlcnMocGFyc2VyXywga0lucHV0QmxvY2tJbmZvLCBpbnB1dF9ibG9ja19jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdHItPmZpcnN0LCBpdHItPnNlY29uZCkpOwotICB9Ci19Ci0KLVRFU1RfRihXZWJNQ2x1c3RlclBhcnNlclRlc3QsIFBhcnNlRW5jcnlwdGVkQmxvY2spIHsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoCi0gICAgICBDcmVhdGVFbmNyeXB0ZWRDbHVzdGVyKHNpemVvZihrRW5jcnlwdGVkRnJhbWUpKSk7Ci0KLSAgcGFyc2VyXy5yZXNldChDcmVhdGVQYXJzZXJXaXRoS2V5SWRzQW5kQXVkaW9Db2RlYygKLSAgICAgIHN0ZDo6c3RyaW5nKCksICJ2aWRlb19rZXlfaWQiLCBrVW5rbm93bkF1ZGlvQ29kZWMpKTsKLQotICAvLyBUaGUgZW5jcnlwdGVkIGNsdXN0ZXIgY29udGFpbnMganVzdCBvbmUgYmxvY2ssIHZpZGVvLgotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKAotICAgICAgV2ViTUNsdXN0ZXJQYXJzZXI6OmtEZWZhdWx0VmlkZW9CdWZmZXJEdXJhdGlvbkluTXMpKTsKLQotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfRVEoY2x1c3Rlci0+c2l6ZSgpLCByZXN1bHQpOwotICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcnM7Ci0gIHBhcnNlcl8tPkdldEJ1ZmZlcnMoJmJ1ZmZlcnMpOwotICBFWFBFQ1RfRVEoMVVMLCBidWZmZXJzW2tWaWRlb1RyYWNrTnVtXS5zaXplKCkpOwotICBzY29wZWRfcmVmcHRyPFN0cmVhbVBhcnNlckJ1ZmZlcj4gYnVmZmVyID0gYnVmZmVyc1trVmlkZW9UcmFja051bV1bMF07Ci0gIFZlcmlmeUVuY3J5cHRlZEJ1ZmZlcihidWZmZXIpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBQYXJzZUJhZEVuY3J5cHRlZEJsb2NrKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKAotICAgICAgQ3JlYXRlRW5jcnlwdGVkQ2x1c3RlcihzaXplb2Yoa0VuY3J5cHRlZEZyYW1lKSAtIDEpKTsKLQotICBwYXJzZXJfLnJlc2V0KENyZWF0ZVBhcnNlcldpdGhLZXlJZHNBbmRBdWRpb0NvZGVjKAotICAgICAgc3RkOjpzdHJpbmcoKSwgInZpZGVvX2tleV9pZCIsIGtVbmtub3duQXVkaW9Db2RlYykpOwotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfRVEoLTEsIHJlc3VsdCk7Ci19Ci0KLVRFU1RfRihXZWJNQ2x1c3RlclBhcnNlclRlc3QsIFBhcnNlSW52YWxpZFplcm9TaXplZENsdXN0ZXIpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDFGLCAweDQzLCAweEI2LCAweDc1LCAweDgwLCAgLy8gQ0xVU1RFUiAoc2l6ZSA9IDApCi0gIH07Ci0KLSAgRVhQRUNUX0VRKC0xLCBwYXJzZXJfLT5QYXJzZShrQnVmZmVyLCBzaXplb2Yoa0J1ZmZlcikpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VJbnZhbGlkVW5rbm93bkJ1dEFjdHVhbGx5WmVyb1NpemVkQ2x1c3RlcikgewotICBjb25zdCB1aW50OF90IGtCdWZmZXJbXSA9IHsKLSAgICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsIDB4RkYsICAvLyBDTFVTVEVSIChzaXplID0gInVua25vd24iKQotICAgICAgMHgxRiwgMHg0MywgMHhCNiwgMHg3NSwgMHg4NSwgIC8vIENMVVNURVIgKHNpemUgPSA1KQotICB9OwotCi0gIEVYUEVDVF9FUSgtMSwgcGFyc2VyXy0+UGFyc2Uoa0J1ZmZlciwgc2l6ZW9mKGtCdWZmZXIpKSk7Ci19Ci0KLVRFU1RfRihXZWJNQ2x1c3RlclBhcnNlclRlc3QsIFBhcnNlSW52YWxpZFRleHRCbG9ja0dyb3VwV2l0aG91dER1cmF0aW9uKSB7Ci0gIC8vIFRleHQgdHJhY2sgZnJhbWVzIG11c3QgaGF2ZSBleHBsaWNpdGx5IHNwZWNpZmllZCBCbG9ja0dyb3VwIEJsb2NrRHVyYXRpb25zLgotICBUZXh0VHJhY2tzIHRleHRfdHJhY2tzOwotCi0gIHRleHRfdHJhY2tzLmluc2VydCgKLSAgICAgIHN0ZDo6bWFrZV9wYWlyKFRleHRUcmFja3M6OmtleV90eXBlKGtUZXh0VHJhY2tOdW0pLAotICAgICAgICAgICAgICAgICAgICAgVGV4dFRyYWNrQ29uZmlnKGtUZXh0U3VidGl0bGVzLCAiIiwgIiIsICIiKSkpOwotCi0gIHBhcnNlcl8ucmVzZXQoQ3JlYXRlUGFyc2VyV2l0aERlZmF1bHREdXJhdGlvbnNBbmRPcHRpb25hbFRleHRUcmFja3MoCi0gICAgICBrTm9UaW1lc3RhbXAsIGtOb1RpbWVzdGFtcCwgdGV4dF90cmFja3MpKTsKLQotICBjb25zdCBCbG9ja0luZm8ga0Jsb2NrSW5mb1tdID0gewotICAgICAge2tUZXh0VHJhY2tOdW0sIDMzLCAtNDIsIGZhbHNlLCBOVUxMLCAwLCBmYWxzZX0sCi0gIH07Ci0gIGludCBibG9ja19jb3VudCA9IGFycmF5c2l6ZShrQmxvY2tJbmZvKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfTFQocmVzdWx0LCAwKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VXaXRoRGVmYXVsdER1cmF0aW9uc1NpbXBsZUJsb2NrcykgewotICBJblNlcXVlbmNlIHM7Ci0gIFJlc2V0UGFyc2VyVG9IYXZlRGVmYXVsdER1cmF0aW9ucygpOwotCi0gIEVYUEVDVF9MVChrVGVzdEF1ZGlvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCAyMyk7Ci0gIEVYUEVDVF9MVChrVGVzdFZpZGVvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCAzMyk7Ci0KLSAgY29uc3QgQmxvY2tJbmZvIGtCbG9ja0luZm9bXSA9IHsKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMCwga1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgdHJ1ZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDIzLCBrVGVzdEF1ZGlvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCB0cnVlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMzMsIGtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCA0Niwga1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgdHJ1ZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDY3LCBrVGVzdFZpZGVvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCB0cnVlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgNjksIGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCAxMDAsIGtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICB9OwotCi0gIGludCBibG9ja19jb3VudCA9IGFycmF5c2l6ZShrQmxvY2tJbmZvKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotCi0gIC8vIFNlbmQgc2xpZ2h0bHkgbGVzcyB0aGFuIHRoZSBmdWxsIGNsdXN0ZXIgc28gYWxsIGJ1dCB0aGUgbGFzdCBibG9jayBpcwotICAvLyBwYXJzZWQuIFRob3VnaCBhbGwgdGhlIGJsb2NrcyBhcmUgc2ltcGxlIGJsb2Nrcywgbm9uZSBzaG91bGQgYmUgaGVsZCBhc2lkZQotICAvLyBmb3IgZHVyYXRpb24gZXN0aW1hdGlvbiBwcmlvciB0byBlbmQgb2YgY2x1c3RlciBkZXRlY3Rpb24gYmVjYXVzZSBhbGwgdGhlCi0gIC8vIHRyYWNrcyBoYXZlIERlZmF1bHREdXJhdGlvbnMuCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSAtIDEpOwotICBFWFBFQ1RfR1QocmVzdWx0LCAwKTsKLSAgRVhQRUNUX0xUKHJlc3VsdCwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCAtIDEpKTsKLQotICBwYXJzZXJfLT5SZXNldCgpOwotCi0gIC8vIE5vdyBwYXJzZSBhIHdob2xlIGNsdXN0ZXIgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSBibG9ja3Mgd2lsbCBnZXQgcGFyc2VkLgotICByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSk7Ci0gIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwgUGFyc2VXaXRob3V0QW55RHVyYXRpb25zU2ltcGxlQmxvY2tzKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICAvLyBBYnNlbnQgRGVmYXVsdER1cmF0aW9uIGluZm9ybWF0aW9uLCBTaW1wbGVCbG9jayBkdXJhdGlvbnMgYXJlIGRlcml2ZWQgZnJvbQotICAvLyBpbnRlci1idWZmZXIgdHJhY2sgdGltZXN0YW1wIGRlbHRhIGlmIHdpdGhpbiB0aGUgY2x1c3Rlci4gRHVyYXRpb24gZm9yIHRoZQotICAvLyBsYXN0IGJsb2NrIGluIGEgY2x1c3RlciBpcyBlc3RpbWF0ZWQgaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0cmFjayBpbiB0aGUKLSAgLy8gY2x1c3Rlci4gRm9yIHZpZGVvIHRyYWNrcyB3ZSB1c2UgdGhlIG1heGltdW0gc2VlbiBzbyBmYXIuIEZvciBhdWRpbyB3ZSB1c2UKLSAgLy8gdGhlIHRoZSBtaW5pbXVtLgotICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IE1vdmUgYXVkaW8gb3ZlciB0byB1c2UgdGhlIG1heGltdW0uCi0KLSAgY29uc3QgaW50IGtFeHBlY3RlZEF1ZGlvRXN0aW1hdGlvbkluTXMgPSAyMjsKLSAgY29uc3QgaW50IGtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMgPSAzNDsKLSAgY29uc3QgQmxvY2tJbmZvIGtCbG9ja0luZm8xW10gPSB7Ci0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDIzLCAyMiwgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCAzMywgMzMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgNDUsIDIzLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDY2LCAzNCwgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCA2OCwga0V4cGVjdGVkQXVkaW9Fc3RpbWF0aW9uSW5NcywgdHJ1ZSwgTlVMTCwgMCwgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCAxMDAsIGtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgfTsKLQotICBpbnQgYmxvY2tfY291bnQxID0gYXJyYXlzaXplKGtCbG9ja0luZm8xKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIxKAotICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvMSwgYmxvY2tfY291bnQxKSk7Ci0KLSAgLy8gU2VuZCBzbGlnaHRseSBsZXNzIHRoYW4gdGhlIGZpcnN0IGZ1bGwgY2x1c3RlciBzbyBhbGwgYnV0IHRoZSBsYXN0IHZpZGVvCi0gIC8vIGJsb2NrIGlzIHBhcnNlZC4gVmVyaWZ5IHRoZSBsYXN0IGZ1bGx5IHBhcnNlZCBhdWRpbyBhbmQgdmlkZW8gYnVmZmVyIGFyZQotICAvLyBib3RoIG1pc3NpbmcgZnJvbSB0aGUgcmVzdWx0IChwYXJzZXIgc2hvdWxkIGhvbGQgdGhlbSBhc2lkZSBmb3IgZHVyYXRpb24KLSAgLy8gZXN0aW1hdGlvbiBwcmlvciB0byBlbmQgb2YgY2x1c3RlciBkZXRlY3Rpb24gaW4gdGhlIGFic2VuY2Ugb2YKLSAgLy8gRGVmYXVsdER1cmF0aW9ucy4pCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyMS0+ZGF0YSgpLCBjbHVzdGVyMS0+c2l6ZSgpIC0gMSk7Ci0gIEVYUEVDVF9HVChyZXN1bHQsIDApOwotICBFWFBFQ1RfTFQocmVzdWx0LCBjbHVzdGVyMS0+c2l6ZSgpKTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvMSwgYmxvY2tfY291bnQxIC0gMykpOwotICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcnM7Ci0gIHBhcnNlcl8tPkdldEJ1ZmZlcnMoJmJ1ZmZlcnMpOwotICBFWFBFQ1RfRVEoM1VMLCBidWZmZXJzW2tBdWRpb1RyYWNrTnVtXS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMVVMLCBidWZmZXJzW2tWaWRlb1RyYWNrTnVtXS5zaXplKCkpOwotCi0gIHBhcnNlcl8tPlJlc2V0KCk7Ci0KLSAgLy8gTm93IHBhcnNlIHRoZSBmdWxsIGZpcnN0IGNsdXN0ZXIgYW5kIHZlcmlmeSBhbGwgdGhlIGJsb2NrcyBhcmUgcGFyc2VkLgotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkQXVkaW9Fc3RpbWF0aW9uSW5NcykpOwotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkVmlkZW9Fc3RpbWF0aW9uSW5NcykpOwotICByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyMS0+ZGF0YSgpLCBjbHVzdGVyMS0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXIxLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbzEsIGJsb2NrX2NvdW50MSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBlc3RpbWF0ZWQgZnJhbWUgZHVyYXRpb24gaXMgdHJhY2tlZCBhY3Jvc3MgY2x1c3RlcnMgZm9yCi0gIC8vIGVhY2ggdHJhY2suCi0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvMltdID0gewotICAgICAgLy8gRXN0aW1hdGUgY2FycmllcyBvdmVyIGFjcm9zcyBjbHVzdGVycwotICAgICAge2tBdWRpb1RyYWNrTnVtLCAyMDAsIGtFeHBlY3RlZEF1ZGlvRXN0aW1hdGlvbkluTXMsIHRydWUsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIC8vIEVzdGltYXRlIGNhcnJpZXMgb3ZlciBhY3Jvc3MgY2x1c3RlcnMKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMjAxLCBrRXhwZWN0ZWRWaWRlb0VzdGltYXRpb25Jbk1zLCB0cnVlLCBOVUxMLCAwLCBmYWxzZX0sCi0gIH07Ci0KLSAgaW50IGJsb2NrX2NvdW50MiA9IGFycmF5c2l6ZShrQmxvY2tJbmZvMik7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyMigKLSAgICAgIENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbzIsIGJsb2NrX2NvdW50MikpOwotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkQXVkaW9Fc3RpbWF0aW9uSW5NcykpOwotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkVmlkZW9Fc3RpbWF0aW9uSW5NcykpOwotICByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyMi0+ZGF0YSgpLCBjbHVzdGVyMi0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXIyLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbzIsIGJsb2NrX2NvdW50MikpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBQYXJzZVdpdGhvdXRBbnlEdXJhdGlvbnNCbG9ja0dyb3VwcykgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgLy8gQWJzZW50IERlZmF1bHREdXJhdGlvbiBhbmQgQmxvY2tEdXJhdGlvbiBpbmZvcm1hdGlvbiwgQmxvY2tHcm91cCBibG9jawotICAvLyBkdXJhdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSBpbnRlci1idWZmZXIgdHJhY2sgdGltZXN0YW1wIGRlbHRhIGlmIHdpdGhpbiB0aGUKLSAgLy8gY2x1c3Rlci4gRHVyYXRpb24gZm9yIHRoZSBsYXN0IGJsb2NrIGluIGEgY2x1c3RlciBpcyBlc3RpbWF0ZWQKLSAgLy8gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0cmFjayBpbiB0aGUgY2x1c3Rlci4gRm9yIHZpZGVvIHRyYWNrcyB3ZSB1c2UgdGhlCi0gIC8vIG1heGltdW0gc2VlbiBzbyBmYXIuIEZvciBhdWRpbyB3ZSB1c2UgdGhlIHRoZSBtaW5pbXVtLgotICAvLyBUT0RPKGNoY3VubmluZ2hhbSk6IE1vdmUgYXVkaW8gb3ZlciB0byB1c2UgdGhlIG1heGltdW0uCi0KLSAgY29uc3QgaW50IGtFeHBlY3RlZEF1ZGlvRXN0aW1hdGlvbkluTXMgPSAyMjsKLSAgY29uc3QgaW50IGtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMgPSAzNDsKLSAgY29uc3QgQmxvY2tJbmZvIGtCbG9ja0luZm8xW10gPSB7Ci0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIC0yMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMjMsIC0yMiwgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMzMsIC0zMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgNDUsIC0yMywgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgNjYsIC0zNCwgZmFsc2UsIE5VTEwsIDAsIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgNjgsIC1rRXhwZWN0ZWRBdWRpb0VzdGltYXRpb25Jbk1zLCBmYWxzZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDEwMCwgLWtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMsIGZhbHNlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgfTsKLQotICBpbnQgYmxvY2tfY291bnQxID0gYXJyYXlzaXplKGtCbG9ja0luZm8xKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIxKAotICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvMSwgYmxvY2tfY291bnQxKSk7Ci0KLSAgLy8gU2VuZCBzbGlnaHRseSBsZXNzIHRoYW4gdGhlIGZpcnN0IGZ1bGwgY2x1c3RlciBzbyBhbGwgYnV0IHRoZSBsYXN0IHZpZGVvCi0gIC8vIGJsb2NrIGlzIHBhcnNlZC4gVmVyaWZ5IHRoZSBsYXN0IGZ1bGx5IHBhcnNlZCBhdWRpbyBhbmQgdmlkZW8gYnVmZmVyIGFyZQotICAvLyBib3RoIG1pc3NpbmcgZnJvbSB0aGUgcmVzdWx0IChwYXJzZXIgc2hvdWxkIGhvbGQgdGhlbSBhc2lkZSBmb3IgZHVyYXRpb24KLSAgLy8gZXN0aW1hdGlvbiBwcmlvciB0byBlbmQgb2YgY2x1c3RlciBkZXRlY3Rpb24gaW4gdGhlIGFic2VuY2Ugb2YKLSAgLy8gRGVmYXVsdER1cmF0aW9ucy4pCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyMS0+ZGF0YSgpLCBjbHVzdGVyMS0+c2l6ZSgpIC0gMSk7Ci0gIEVYUEVDVF9HVChyZXN1bHQsIDApOwotICBFWFBFQ1RfTFQocmVzdWx0LCBjbHVzdGVyMS0+c2l6ZSgpKTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvMSwgYmxvY2tfY291bnQxIC0gMykpOwotICBTdHJlYW1QYXJzZXI6OkJ1ZmZlclF1ZXVlTWFwIGJ1ZmZlcnM7Ci0gIHBhcnNlcl8tPkdldEJ1ZmZlcnMoJmJ1ZmZlcnMpOwotICBFWFBFQ1RfRVEoM1VMLCBidWZmZXJzW2tBdWRpb1RyYWNrTnVtXS5zaXplKCkpOwotICBFWFBFQ1RfRVEoMVVMLCBidWZmZXJzW2tWaWRlb1RyYWNrTnVtXS5zaXplKCkpOwotCi0gIHBhcnNlcl8tPlJlc2V0KCk7Ci0KLSAgLy8gTm93IHBhcnNlIHRoZSBmdWxsIGZpcnN0IGNsdXN0ZXIgYW5kIHZlcmlmeSBhbGwgdGhlIGJsb2NrcyBhcmUgcGFyc2VkLgotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkQXVkaW9Fc3RpbWF0aW9uSW5NcykpOwotICBFWFBFQ1RfTUVESUFfTE9HKAotICAgICAgV2ViTVNpbXBsZUJsb2NrRHVyYXRpb25Fc3RpbWF0ZWQoa0V4cGVjdGVkVmlkZW9Fc3RpbWF0aW9uSW5NcykpOwotICByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyMS0+ZGF0YSgpLCBjbHVzdGVyMS0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXIxLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbzEsIGJsb2NrX2NvdW50MSkpOwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBlc3RpbWF0ZWQgZnJhbWUgZHVyYXRpb24gaXMgdHJhY2tlZCBhY3Jvc3MgY2x1c3RlcnMgZm9yCi0gIC8vIGVhY2ggdHJhY2suCi0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvMltdID0gewotICAgICAge2tBdWRpb1RyYWNrTnVtLCAyMDAsIC1rRXhwZWN0ZWRBdWRpb0VzdGltYXRpb25Jbk1zLCBmYWxzZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDIwMSwgLWtFeHBlY3RlZFZpZGVvRXN0aW1hdGlvbkluTXMsIGZhbHNlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgfTsKLQotICBpbnQgYmxvY2tfY291bnQyID0gYXJyYXlzaXplKGtCbG9ja0luZm8yKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIyKAotICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvMiwgYmxvY2tfY291bnQyKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coCi0gICAgICBXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZChrRXhwZWN0ZWRBdWRpb0VzdGltYXRpb25Jbk1zKSk7Ci0gIEVYUEVDVF9NRURJQV9MT0coCi0gICAgICBXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZChrRXhwZWN0ZWRWaWRlb0VzdGltYXRpb25Jbk1zKSk7Ci0gIHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXIyLT5kYXRhKCksIGNsdXN0ZXIyLT5zaXplKCkpOwotICBFWFBFQ1RfRVEoY2x1c3RlcjItPnNpemUoKSwgcmVzdWx0KTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvMiwgYmxvY2tfY291bnQyKSk7Ci19Ci0KLS8vIFRPRE8od29sZW5ldHopOiBJcyBwYXJzZXIgYmVoYXZpb3IgY29ycmVjdD8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzYzNDMzLgotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwKLSAgICAgICBQYXJzZVdpdGhEZWZhdWx0RHVyYXRpb25zQmxvY2tHcm91cHNXaXRob3V0RHVyYXRpb25zKSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgUmVzZXRQYXJzZXJUb0hhdmVEZWZhdWx0RHVyYXRpb25zKCk7Ci0KLSAgRVhQRUNUX0xUKGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIDIzKTsKLSAgRVhQRUNUX0xUKGtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIDMzKTsKLQotICBjb25zdCBCbG9ja0luZm8ga0Jsb2NrSW5mb1tdID0gewotICAgICAge2tBdWRpb1RyYWNrTnVtLCAwLCAta1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgZmFsc2UsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICAgICAge2tBdWRpb1RyYWNrTnVtLCAyMywgLWtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIGZhbHNlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgICAgIHtrVmlkZW9UcmFja051bSwgMzMsIC1rVGVzdFZpZGVvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCBmYWxzZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDQ2LCAta1Rlc3RBdWRpb0ZyYW1lRGVmYXVsdER1cmF0aW9uSW5NcywgZmFsc2UsIE5VTEwsIDAsCi0gICAgICAgZmFsc2V9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCA2NywgLWtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIGZhbHNlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgICAgIHtrQXVkaW9UcmFja051bSwgNjksIC1rVGVzdEF1ZGlvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCBmYWxzZSwgTlVMTCwgMCwKLSAgICAgICBmYWxzZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDEwMCwgLWtUZXN0VmlkZW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIGZhbHNlLCBOVUxMLCAwLAotICAgICAgIGZhbHNlfSwKLSAgfTsKLQotICBpbnQgYmxvY2tfY291bnQgPSBhcnJheXNpemUoa0Jsb2NrSW5mbyk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLQotICAvLyBTZW5kIHNsaWdodGx5IGxlc3MgdGhhbiB0aGUgZnVsbCBjbHVzdGVyIHNvIGFsbCBidXQgdGhlIGxhc3QgYmxvY2sgaXMKLSAgLy8gcGFyc2VkLiBOb25lIHNob3VsZCBiZSBoZWxkIGFzaWRlIGZvciBkdXJhdGlvbiBlc3RpbWF0aW9uIHByaW9yIHRvIGVuZCBvZgotICAvLyBjbHVzdGVyIGRldGVjdGlvbiBiZWNhdXNlIGFsbCB0aGUgdHJhY2tzIGhhdmUgRGVmYXVsdER1cmF0aW9ucy4KLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpIC0gMSk7Ci0gIEVYUEVDVF9HVChyZXN1bHQsIDApOwotICBFWFBFQ1RfTFQocmVzdWx0LCBjbHVzdGVyLT5zaXplKCkpOwotICBBU1NFUlRfVFJVRShWZXJpZnlCdWZmZXJzKHBhcnNlcl8sIGtCbG9ja0luZm8sIGJsb2NrX2NvdW50IC0gMSkpOwotCi0gIHBhcnNlcl8tPlJlc2V0KCk7Ci0KLSAgLy8gTm93IHBhcnNlIGEgd2hvbGUgY2x1c3RlciB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIGJsb2NrcyB3aWxsIGdldCBwYXJzZWQuCi0gIHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LAotICAgICAgIFBhcnNlRGVnZW5lcmF0ZUNsdXN0ZXJZaWVsZHNIYXJkY29kZWRFc3RpbWF0ZWREdXJhdGlvbnMpIHsKLSAgY29uc3QgQmxvY2tJbmZvIGtCbG9ja0luZm9bXSA9IHsKLSAgICAgIHtrQXVkaW9UcmFja051bSwgMCwgV2ViTUNsdXN0ZXJQYXJzZXI6OmtEZWZhdWx0QXVkaW9CdWZmZXJEdXJhdGlvbkluTXMsCi0gICAgICAgdHJ1ZX0sCi0gICAgICB7a1ZpZGVvVHJhY2tOdW0sIDAsIFdlYk1DbHVzdGVyUGFyc2VyOjprRGVmYXVsdFZpZGVvQnVmZmVyRHVyYXRpb25Jbk1zLAotICAgICAgIHRydWV9LAotICB9OwotCi0gIGludCBibG9ja19jb3VudCA9IGFycmF5c2l6ZShrQmxvY2tJbmZvKTsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoQ3JlYXRlQ2x1c3RlcigwLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotICBFWFBFQ1RfTUVESUFfTE9HKFdlYk1TaW1wbGVCbG9ja0R1cmF0aW9uRXN0aW1hdGVkKAotICAgICAgV2ViTUNsdXN0ZXJQYXJzZXI6OmtEZWZhdWx0QXVkaW9CdWZmZXJEdXJhdGlvbkluTXMpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhXZWJNU2ltcGxlQmxvY2tEdXJhdGlvbkVzdGltYXRlZCgKLSAgICAgIFdlYk1DbHVzdGVyUGFyc2VyOjprRGVmYXVsdFZpZGVvQnVmZmVyRHVyYXRpb25Jbk1zKSk7Ci0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSk7Ci0gIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLX0KLQotVEVTVF9GKFdlYk1DbHVzdGVyUGFyc2VyVGVzdCwKLSAgICAgICBQYXJzZURlZ2VuZXJhdGVDbHVzdGVyV2l0aERlZmF1bHREdXJhdGlvbnNZaWVsZHNEZWZhdWx0RHVyYXRpb25zKSB7Ci0gIFJlc2V0UGFyc2VyVG9IYXZlRGVmYXVsdER1cmF0aW9ucygpOwotCi0gIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvW10gPSB7Ci0gICAgICB7a0F1ZGlvVHJhY2tOdW0sIDAsIGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsIHRydWV9LAotICAgICAge2tWaWRlb1RyYWNrTnVtLCAwLCBrVGVzdFZpZGVvRnJhbWVEZWZhdWx0RHVyYXRpb25Jbk1zLCB0cnVlfSwKLSAgfTsKLQotICBpbnQgYmxvY2tfY291bnQgPSBhcnJheXNpemUoa0Jsb2NrSW5mbyk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcmVzdWx0KTsKLSAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBSZWFkT3B1c0R1cmF0aW9uc1NpbXBsZUJsb2NrQXRFbmRPZkNsdXN0ZXIpIHsKLSAgaW50IGxvb3BfY291bnQgPSAwOwotICBmb3IgKGNvbnN0IGF1dG8qIHBhY2tldF9wdHIgOiBCdWlsZEFsbE9wdXNQYWNrZXRzKCkpIHsKLSAgICBJblNlcXVlbmNlIHM7Ci0KLSAgICAvLyBHZXQgYSBuZXcgcGFyc2VyIGVhY2ggaXRlcmF0aW9uIHRvIHByZXZlbnQgZXhjZWVkaW5nIHRoZSBtZWRpYSBsb2cgY2FwLgotICAgIHBhcnNlcl8ucmVzZXQoQ3JlYXRlUGFyc2VyV2l0aEtleUlkc0FuZEF1ZGlvQ29kZWMoCi0gICAgICAgIHN0ZDo6c3RyaW5nKCksIHN0ZDo6c3RyaW5nKCksIGtDb2RlY09wdXMpKTsKLQotICAgIGNvbnN0IEJsb2NrSW5mbyBrQmxvY2tJbmZvW10gPSB7e2tBdWRpb1RyYWNrTnVtLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9wdHItPmR1cmF0aW9uX21zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIC8vIE1ha2UgaXQgYSBTaW1wbGVCbG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcHRyLT5kYXRhKCksIHBhY2tldF9wdHItPnNpemUoKX19OwotCi0gICAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtCbG9ja0luZm8pOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDbHVzdGVyPiBjbHVzdGVyKENyZWF0ZUNsdXN0ZXIoMCwga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLSAgICBpbnQgZHVyYXRpb25fbXMgPSBwYWNrZXRfcHRyLT5kdXJhdGlvbl9tcygpOyAgLy8gQ2FzdHMgZnJvbSBkb3VibGUuCi0gICAgaWYgKGR1cmF0aW9uX21zID4gMTIwKSB7Ci0gICAgICBFWFBFQ1RfTUVESUFfTE9HKE9wdXNQYWNrZXREdXJhdGlvblRvb0hpZ2goZHVyYXRpb25fbXMpKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0gICAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBrQmxvY2tJbmZvLCBibG9ja19jb3VudCkpOwotCi0gICAgLy8gRmFpbCBlYXJseSBpZiBhbnkgaXRlcmF0aW9uIGZhaWxzIHRvIG1lZXQgdGhlIGxvZ2dpbmcgZXhwZWN0YXRpb25zLgotICAgIEFTU0VSVF9UUlVFKE1vY2s6OlZlcmlmeUFuZENsZWFyRXhwZWN0YXRpb25zKG1lZGlhX2xvZ18uZ2V0KCkpKTsKLQotICAgIGxvb3BfY291bnQrKzsKLSAgfQotCi0gIC8vIFRlc3Qgc2hvdWxkIG1pbmltYWxseSBjb3ZlciBhbGwgdGhlIGNvbWJpbmF0aW9ucyBvZiBjb25maWcgYW5kIGZyYW1lIGNvdW50LgotICBBU1NFUlRfR0UobG9vcF9jb3VudCwga051bVBvc3NpYmxlT3B1c0NvbmZpZ3MgKiBrTWF4T3B1c1BhY2tldEZyYW1lQ291bnQpOwotfQotCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBQcmVmZXJPcHVzRHVyYXRpb25zT3ZlckJsb2NrRHVyYXRpb25zKSB7Ci0gIGludCBsb29wX2NvdW50ID0gMDsKLSAgZm9yIChjb25zdCBhdXRvKiBwYWNrZXRfcHRyIDogQnVpbGRBbGxPcHVzUGFja2V0cygpKSB7Ci0gICAgSW5TZXF1ZW5jZSBzOwotCi0gICAgLy8gR2V0IGEgbmV3IHBhcnNlciBlYWNoIGl0ZXJhdGlvbiB0byBwcmV2ZW50IGV4Y2VlZGluZyB0aGUgbWVkaWEgbG9nIGNhcC4KLSAgICBwYXJzZXJfLnJlc2V0KENyZWF0ZVBhcnNlcldpdGhLZXlJZHNBbmRBdWRpb0NvZGVjKAotICAgICAgICBzdGQ6OnN0cmluZygpLCBzdGQ6OnN0cmluZygpLCBrQ29kZWNPcHVzKSk7Ci0KLSAgICAvLyBTZXR0aW5nIEJsb2NrRHVyYXRpb24gIT0gT3B1cyBkdXJhdGlvbiB0byBzZWUgd2hpY2ggb25lIHRoZSBwYXJzZXIgdXNlcy4KLSAgICBpbnQgYmxvY2tfZHVyYXRpb25fbXMgPSBwYWNrZXRfcHRyLT5kdXJhdGlvbl9tcygpICsgMTA7Ci0gICAgaWYgKHBhY2tldF9wdHItPmR1cmF0aW9uX21zKCkgPiAxMjApIHsKLSAgICAgIEVYUEVDVF9NRURJQV9MT0coT3B1c1BhY2tldER1cmF0aW9uVG9vSGlnaChwYWNrZXRfcHRyLT5kdXJhdGlvbl9tcygpKSk7Ci0gICAgfQotCi0gICAgRVhQRUNUX01FRElBX0xPRyhXZWJNQmxvY2tEdXJhdGlvbk1pc21hdGNoZXNPcHVzRHVyYXRpb24oCi0gICAgICAgIGJsb2NrX2R1cmF0aW9uX21zLCBwYWNrZXRfcHRyLT5kdXJhdGlvbl9tcygpKSk7Ci0KLSAgICBCbG9ja0luZm8gYmxvY2tfaW5mb3NbXSA9IHt7a0F1ZGlvVHJhY2tOdW0sIDAsIGJsb2NrX2R1cmF0aW9uX21zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgIC8vIE5vdCBhIFNpbXBsZUJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcHRyLT5kYXRhKCksIHBhY2tldF9wdHItPnNpemUoKX19OwotCi0gICAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGJsb2NrX2luZm9zKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3RlcigKLSAgICAgICAgQ3JlYXRlQ2x1c3RlcigwLCBibG9ja19pbmZvcywgYmxvY2tfY291bnQpKTsKLSAgICBpbnQgcmVzdWx0ID0gcGFyc2VyXy0+UGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpOwotICAgIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0KLSAgICAvLyBCbG9ja0luZm8gZHVyYXRpb24gd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBidWZmZXIgZHVyYXRpb24sIHNvIGNoYW5naW5nCi0gICAgLy8gZHVyYXRpb24gdG8gYmUgdGhhdCBvZiB0aGUgT3B1cyBwYWNrZXQgdG8gdmVyaWZ5IGl0IHdhcyBwcmVmZXJyZWQuCi0gICAgYmxvY2tfaW5mb3NbMF0uZHVyYXRpb24gPSBwYWNrZXRfcHRyLT5kdXJhdGlvbl9tcygpOwotCi0gICAgQVNTRVJUX1RSVUUoVmVyaWZ5QnVmZmVycyhwYXJzZXJfLCBibG9ja19pbmZvcywgYmxvY2tfY291bnQpKTsKLQotICAgIC8vIEZhaWwgZWFybHkgaWYgYW55IGl0ZXJhdGlvbiBmYWlscyB0byBtZWV0IHRoZSBsb2dnaW5nIGV4cGVjdGF0aW9ucy4KLSAgICBBU1NFUlRfVFJVRShNb2NrOjpWZXJpZnlBbmRDbGVhckV4cGVjdGF0aW9ucyhtZWRpYV9sb2dfLmdldCgpKSk7Ci0KLSAgICBsb29wX2NvdW50Kys7Ci0gIH0KLQotICAvLyBUZXN0IHNob3VsZCBtaW5pbWFsbHkgY292ZXIgYWxsIHRoZSBjb21iaW5hdGlvbnMgb2YgY29uZmlnIGFuZCBmcmFtZSBjb3VudC4KLSAgQVNTRVJUX0dFKGxvb3BfY291bnQsIGtOdW1Qb3NzaWJsZU9wdXNDb25maWdzICoga01heE9wdXNQYWNrZXRGcmFtZUNvdW50KTsKLX0KLQotLy8gVGVzdHMgdGhhdCBCbG9ja0R1cmF0aW9uIGlzIHVzZWQgdG8gc2V0IGR1cmF0aW9uIG9uIGJ1ZmZlciByYXRoZXIgdGhhbgotLy8gZW5jb2RlZCBkdXJhdGlvbiBpbiBPcHVzIHBhY2tldCAob3IgaGFyZCBjb2RlZCBkdXJhdGlvbiBlc3RpbWF0ZXMpLiBFbmNvZGVkCi0vLyBPcHVzIGR1cmF0aW9uIGlzIHVzdWFsbHkgcHJlZmVycmVkIGJ1dCBjYW5ub3QgYmUga25vd24gd2hlbiBlbmNyeXB0ZWQuCi1URVNUX0YoV2ViTUNsdXN0ZXJQYXJzZXJUZXN0LCBEb250UmVhZEVuY29kZWREdXJhdGlvbldoZW5FbmNyeXB0ZWQpIHsKLSAgLy8gTm9uLWVtcHR5IGR1bW15IHZhbHVlIHNpZ25hbHMgZW5jcnlwdGlvbiBpcyBhY3RpdmUgZm9yIGF1ZGlvLgotICBzdGQ6OnN0cmluZyBhdWRpb19lbmNyeXB0aW9uX2lkKCJhdWRpb19rZXlfaWQiKTsKLQotICAvLyBSZXNldCBwYXJzZXIgdG8gZXhwZWN0IE9wdXMgY29kZWMgYXVkaW8gYW5kIHVzZSBhdWRpbyBlbmNyeXB0aW9uIGtleSBpZC4KLSAgcGFyc2VyXy5yZXNldChDcmVhdGVQYXJzZXJXaXRoS2V5SWRzQW5kQXVkaW9Db2RlYyhhdWRpb19lbmNyeXB0aW9uX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKCksIGtDb2RlY09wdXMpKTsKLQotICAvLyBTaW5nbGUgQmxvY2sgd2l0aCBCbG9ja0R1cmF0aW9uIGFuZCBlbmNyeXB0ZWQgZGF0YS4KLSAgY29uc3QgQmxvY2tJbmZvIGtCbG9ja0luZm9bXSA9IHt7a0F1ZGlvVHJhY2tOdW0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUZXN0QXVkaW9GcmFtZURlZmF1bHREdXJhdGlvbkluTXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIC8vIE5vdCBhIFNpbXBsZUJsb2NrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtFbmNyeXB0ZWRGcmFtZSwgIC8vIEVuY3J5cHRlZCBmcmFtZSBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5c2l6ZShrRW5jcnlwdGVkRnJhbWUpfX07Ci0KLSAgaW50IGJsb2NrX2NvdW50ID0gYXJyYXlzaXplKGtCbG9ja0luZm8pOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3RlcihDcmVhdGVDbHVzdGVyKDAsIGtCbG9ja0luZm8sIGJsb2NrX2NvdW50KSk7Ci0gIGludCByZXN1bHQgPSBwYXJzZXJfLT5QYXJzZShjbHVzdGVyLT5kYXRhKCksIGNsdXN0ZXItPnNpemUoKSk7Ci0gIEVYUEVDVF9FUShjbHVzdGVyLT5zaXplKCksIHJlc3VsdCk7Ci0KLSAgLy8gV2lsbCB2ZXJpZnkgdGhhdCBkdXJhdGlvbiBvZiBidWZmZXIgbWF0Y2hlcyB0aGF0IG9mIEJsb2NrRHVyYXRpb24uCi0gIEFTU0VSVF9UUlVFKFZlcmlmeUJ1ZmZlcnMocGFyc2VyXywga0Jsb2NrSW5mbywgYmxvY2tfY291bnQpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTViNmI4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmgiCi0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gVGhlIGRlZmluaXRpb25zIGJlbG93IGFyZSBjb3BpZWQgZnJvbSB0aGUgY3VycmVudCBsaWJ3ZWJtIHRvcC1vZi10cmVlLgotLy8gQ2hyb21pdW0ncyB0aGlyZF9wYXJ0eS9saWJ3ZWJtIGRvZXNuJ3QgaGF2ZSB0aGVzZSB5ZXQuIFdlIGNhbiBwcm9iYWJseSBqdXN0Ci0vLyBpbmNsdWRlIGxpYndlYm0gaGVhZGVyIGRpcmVjdGx5IGluIHRoZSBmdXR1cmUuCi0vLyAtLS0tIEJlZ2luIGNvcHkvcGFzdGUgZnJvbSBsaWJ3ZWJtL3dlYm1fcGFyc2VyL2luY2x1ZGUvd2VibS9kb21fdHlwZXMuaCAtLS0tCi0KLS8qKgotIEEgcGFyc2VkIFxXZWJNSUR7TWF0cml4Q29lZmZpY2llbnRzfSBlbGVtZW50LgotCi0gTWF0cm9za2EvV2ViTSBhZG9wdGVkIHRoZXNlIHZhbHVlcyBmcm9tIFRhYmxlIDQgb2YgSVNPL0lFQyAyMzAwMS04OjIwMTMvRENPUjEuCi0gU2VlIHRoYXQgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGV0YWlscy4KLSAqLwotZW51bSBNYXRyaXhDb2VmZmljaWVudCB7Ci0gIC8qKgotICAgVGhlIGlkZW50aXR5IG1hdHJpeC4KLQotICAgVHlwaWNhbGx5IHVzZWQgZm9yIEdCUiAob2Z0ZW4gcmVmZXJyZWQgdG8gYXMgUkdCKTsgaG93ZXZlciwgbWF5IGFsc28gYmUgdXNlZAotICAgZm9yIFlaWCAob2Z0ZW4gcmVmZXJyZWQgdG8gYXMgWFlaKS4KLSAgICovCi0gIGtNYXRyaXhDb2VmZmljaWVudFJnYiA9IDAsCi0KLSAgLyoqCi0gICBSZWMuwqBJVFUtUiBCVC43MDktNS4KLSAgICovCi0gIGtNYXRyaXhDb2VmZmljaWVudEJ0NzA5ID0gMSwKLQotICAvKioKLSAgIEltYWdlIGNoYXJhY3RlcmlzdGljcyBhcmUgdW5rbm93biBvciBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgYXBwbGljYXRpb24uCi0gICAqLwotICBrTWF0cml4Q29lZmZpY2llbnRVbnNwZWNpZmllZCA9IDIsCi0KLSAgLyoqCi0gICBVbml0ZWQgU3RhdGVzIEZlZGVyYWwgQ29tbXVuaWNhdGlvbnMgQ29tbWlzc2lvbiBUaXRsZSA0NyBDb2RlIG9mIEZlZGVyYWwKLSAgIFJlZ3VsYXRpb25zICgyMDAzKSA3My42ODIgKGEpICgyMCkuCi0gICAqLwotICBrTWF0cml4Q29lZmZpY2llbnRGY2MgPSA0LAotCi0gIC8qKgotICAgUmVjLsKgSVRVLVIgQlQuNDcw4oCRNiBTeXN0ZW0gQiwgRyAoaGlzdG9yaWNhbCkuCi0gICAqLwotICBrTWF0cml4Q29lZmZpY2llbnRCdDQ3MEJnID0gNSwKLQotICAvKioKLSAgIFNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzIDE3ME0gKDIwMDQpLgotICAgKi8KLSAga01hdHJpeENvZWZmaWNpZW50U21wdGUxNzBNID0gNiwKLQotICAvKioKLSAgIFNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzIDI0ME0gKDE5OTkpLgotICAgKi8KLSAga01hdHJpeENvZWZmaWNpZW50U21wdGUyNDBNID0gNywKLQotICAvKioKLSAgIFlDZ0NvLgotICAgKi8KLSAga01hdHJpeENvZWZmaWNpZW50WUNnQ28gPSA4LAotCi0gIC8qKgotICAgUmVjLsKgSVRVLVIgQlQuMjAyMCAobm9uLWNvbnN0YW50IGx1bWluYW5jZSkuCi0gICAqLwotICBrTWF0cml4Q29lZmZpY2llbnRCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSA9IDksCi0KLSAgLyoqCi0gICBSZWMuwqBJVFUtUiBCVC4yMDIwIChjb25zdGFudCBsdW1pbmFuY2UpLgotICAgKi8KLSAga01hdHJpeENvZWZmaWNpZW50QnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UgPSAxMCwKLX07Ci0KLS8qKgotIEEgcGFyc2VkIFxXZWJNSUR7UmFuZ2V9IGVsZW1lbnQuCi0gKi8KLWVudW0gUmFuZ2UgewotICAvKioKLSAgIFVuc3BlY2lmaWVkLgotICAgKi8KLSAga1JhbmdlVW5zcGVjaWZpZWQgPSAwLAotCi0gIC8qKgotICAgQnJvYWRjYXN0IHJhbmdlLgotICAgKi8KLSAga1JhbmdlQnJvYWRjYXN0ID0gMSwKLQotICAvKioKLSAgIEZ1bGwgcmFuZ2UgKG5vIGNsaXBwaW5nKS4KLSAgICovCi0gIGtSYW5nZUZ1bGwgPSAyLAotCi0gIC8qKgotICAgRGVmaW5lZCBieSBNYXRyaXhDb2VmZmljaWVudC9UcmFuc2ZlckNoYXJhY3RlcmlzdGljLgotICAgKi8KLSAga1JhbmdlRGVyaXZlZCA9IDMsCi19OwotCi0vKioKLSBBIHBhcnNlZCBcV2ViTUlEe1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWN9IGVsZW1lbnQuCi0KLSBNYXRyb3NrYS9XZWJNIGFkb3B0ZWQgdGhlc2UgdmFsdWVzIGZyb20gVGFibGUgMyBvZiBJU08vSUVDIDIzMDAxLTg6MjAxMy9EQ09SMS4KLSBTZWUgdGhhdCBkb2N1bWVudCBmb3IgZnVydGhlciBkZXRhaWxzLgotICovCi1lbnVtIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgewotICAvKioKLSAgIFJlYy4gSVRVLVIgQlQuNzA5LTYuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0J0NzA5ID0gMSwKLQotICAvKioKLSAgIEltYWdlIGNoYXJhY3RlcmlzdGljcyBhcmUgdW5rbm93biBvciBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgYXBwbGljYXRpb24uCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY1Vuc3BlY2lmaWVkID0gMiwKLQotICAvKioKLSAgIFJlYy4gSVRV4oCRUiBCVC40NzDigJE2IFN5c3RlbSBNIChoaXN0b3JpY2FsKSB3aXRoIGFzc3VtZWQgZGlzcGxheSBnYW1tYSAyLjIuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0dhbW1hMjJjdXJ2ZSA9IDQsCi0KLSAgLyoqCi0gICBSZWMuIElUVeKAkVIgQlQuNDcwLTYgU3lzdGVtIEIsIEcgKGhpc3RvcmljYWwpIHdpdGggYXNzdW1lZCBkaXNwbGF5IGdhbW1hIDIuOC4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljR2FtbWEyOGN1cnZlID0gNSwKLQotICAvKioKLSAgIFNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzIDE3ME0gKDIwMDQpLgotICAgKi8KLSAga1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNTbXB0ZTE3ME0gPSA2LAotCi0gIC8qKgotICAgU29jaWV0eSBvZiBNb3Rpb24gUGljdHVyZSBhbmQgVGVsZXZpc2lvbiBFbmdpbmVlcnMgMjQwTSAoMTk5OSkuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY1NtcHRlMjQwTSA9IDcsCi0KLSAgLyoqCi0gICBMaW5lYXIgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzLgotICAgKi8KLSAga1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNMaW5lYXIgPSA4LAotCi0gIC8qKgotICAgTG9nYXJpdGhtaWMgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgKDEwMDoxIHJhbmdlKS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljTG9nID0gOSwKLQotICAvKioKLSAgIExvZ2FyaXRobWljIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljICgxMDDCoCrCoFNxcnQoMTApwqA6wqAxIHJhbmdlKS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljTG9nU3FydCA9IDEwLAotCi0gIC8qKgotICAgSUVDIDYxOTY2LTItNC4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljSWVjNjE5NjYyNCA9IDExLAotCi0gIC8qKgotICAgUmVjLiBJVFXigJFSIEJULjEzNjEtMCBleHRlbmRlZCBjb2xvdXIgZ2FtdXQgc3lzdGVtIChoaXN0b3JpY2FsKS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljQnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCA9IDEyLAotCi0gIC8qKgotICAgSUVDIDYxOTY2LTItMSBzUkdCIG9yIHNZQ0MuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0llYzYxOTY2MjEgPSAxMywKLQotICAvKioKLSAgIFJlYy4gSVRVLVIgQlQuMjAyMC0yICgxMC1iaXQgc3lzdGVtKS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljMTBCaXRCdDIwMjAgPSAxNCwKLQotICAvKioKLSAgIFJlYy4gSVRVLVIgQlQuMjAyMC0yICgxMi1iaXQgc3lzdGVtKS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljMTJCaXRCdDIwMjAgPSAxNSwKLQotICAvKioKLSAgIFNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzIFNUIDIwODQuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY1NtcHRlU3QyMDg0ID0gMTYsCi0KLSAgLyoqCi0gICBTb2NpZXR5IG9mIE1vdGlvbiBQaWN0dXJlIGFuZCBUZWxldmlzaW9uIEVuZ2luZWVycyBTVCA0MjgtMS4KLSAgICovCi0gIGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljU21wdGVTdDQyODEgPSAxNywKLQotICAvKioKLSAgIEFzc29jaWF0aW9uIG9mIFJhZGlvIEluZHVzdHJpZXMgYW5kIEJ1c2luZXNzZXMgKEFSSUIpIFNURC1CNjcuCi0gICAqLwotICBrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0FyaWJTdGRCNjdIbGcgPSAxOCwKLX07Ci0KLS8qKgotIEEgcGFyc2VkIFxXZWJNSUR7UHJpbWFyaWVzfSBlbGVtZW50LgotCi0gTWF0cm9za2EvV2ViTSBhZG9wdGVkIHRoZXNlIHZhbHVlcyBmcm9tIFRhYmxlIDIgb2YgSVNPL0lFQyAyMzAwMS04OjIwMTMvRENPUjEuCi0gU2VlIHRoYXQgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGV0YWlscy4KLSAqLwotZW51bSBQcmltYXJ5IHsKLSAgLyoqCi0gICBSZWMuIElUVeKAkVIgQlQuNzA5LTYuCi0gICAqLwotICBrUHJpbWFyeUJ0NzA5ID0gMSwKLQotICAvKioKLSAgIEltYWdlIGNoYXJhY3RlcmlzdGljcyBhcmUgdW5rbm93biBvciBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgYXBwbGljYXRpb24uCi0gICAqLwotICBrUHJpbWFyeVVuc3BlY2lmaWVkID0gMiwKLQotICAvKioKLSAgIFJlYy4gSVRV4oCRUiBCVC40NzDigJE2IFN5c3RlbSBNIChoaXN0b3JpY2FsKS4KLSAgICovCi0gIGtQcmltYXJ5QnQ0NzBNID0gNCwKLQotICAvKioKLSAgIFJlYy4gSVRV4oCRUiBCVC40NzDigJE2IFN5c3RlbSBCLCBHIChoaXN0b3JpY2FsKS4KLSAgICovCi0gIGtQcmltYXJ5QnQ0NzBCZyA9IDUsCi0KLSAgLyoqCi0gICBTb2NpZXR5IG9mIE1vdGlvbiBQaWN0dXJlIGFuZCBUZWxldmlzaW9uIEVuZ2luZWVycyAxNzBNICgyMDA0KS4KLSAgICovCi0gIGtQcmltYXJ5U21wdGUxNzBNID0gNiwKLQotICAvKioKLSAgIFNvY2lldHkgb2YgTW90aW9uIFBpY3R1cmUgYW5kIFRlbGV2aXNpb24gRW5naW5lZXJzIDI0ME0gKDE5OTkpLgotICAgKi8KLSAga1ByaW1hcnlTbXB0ZTI0ME0gPSA3LAotCi0gIC8qKgotICAgR2VuZXJpYyBmaWxtLgotICAgKi8KLSAga1ByaW1hcnlGaWxtID0gOCwKLQotICAvKioKLSAgIFJlYy4gSVRVLVIgQlQuMjAyMC0yLgotICAgKi8KLSAga1ByaW1hcnlCdDIwMjAgPSA5LAotCi0gIC8qKgotICAgU29jaWV0eSBvZiBNb3Rpb24gUGljdHVyZSBhbmQgVGVsZXZpc2lvbiBFbmdpbmVlcnMgU1QgNDI4LTEuCi0gICAqLwotICBrUHJpbWFyeVNtcHRlU3Q0MjgxID0gMTAsCi0KLSAgLyoqCi0gICBKRURFQyBQMjIgcGhvc3Bob3JzL0VCVSBUZWNoLiAzMjEzLUUgKDE5NzUpLgotICAgKi8KLSAga1ByaW1hcnlKZWRlY1AyMlBob3NwaG9ycyA9IDIyLAotfTsKLQotLy8gLS0tLSBFbmQgY29weS9wYXN0ZSBmcm9tIGxpYndlYm0vd2VibV9wYXJzZXIvaW5jbHVkZS93ZWJtL2RvbV90eXBlcy5oIC0tLS0KLQotLy8gRW5zdXJlIHRoYXQgbGlid2VibSBlbnVtIHZhbHVlcyBtYXRjaCBlbnVtcyBpbiBnZng6OkNvbG9yU3BhY2UuCi0jZGVmaW5lIFNUQVRJQ19BU1NFUlRfRU5VTShhLCBiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIENPTVBJTEVfQVNTRVJUKHN0YXRpY19jYXN0PGludD4oYSkgPT0gc3RhdGljX2Nhc3Q8aW50PihnZng6OkNvbG9yU3BhY2U6OmIpLCBcCi0gICAgICAgICAgICAgICAgIG1pc21hdGNoaW5nX2VudW1zKQotCi1TVEFUSUNfQVNTRVJUX0VOVU0oa01hdHJpeENvZWZmaWNpZW50UmdiLCBrTWF0cml4SWRSZ2IpOwotU1RBVElDX0FTU0VSVF9FTlVNKGtNYXRyaXhDb2VmZmljaWVudEJ0NzA5LCBrTWF0cml4SWRCdDcwOSk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa01hdHJpeENvZWZmaWNpZW50VW5zcGVjaWZpZWQsIGtNYXRyaXhJZFVuc3BlY2lmaWVkKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrTWF0cml4Q29lZmZpY2llbnRGY2MsIGtNYXRyaXhJZEZjYyk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa01hdHJpeENvZWZmaWNpZW50QnQ0NzBCZywga01hdHJpeElkQnQ0NzBCZyk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa01hdHJpeENvZWZmaWNpZW50U21wdGUxNzBNLCBrTWF0cml4SWRTbXB0ZTE3ME0pOwotU1RBVElDX0FTU0VSVF9FTlVNKGtNYXRyaXhDb2VmZmljaWVudFNtcHRlMjQwTSwga01hdHJpeElkU21wdGUyNDBNKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrTWF0cml4Q29lZmZpY2llbnRZQ2dDbywga01hdHJpeElkWUNnQ28pOwotU1RBVElDX0FTU0VSVF9FTlVNKGtNYXRyaXhDb2VmZmljaWVudEJ0MjAyME5vbmNvbnN0YW50THVtaW5hbmNlLAotICAgICAgICAgICAgICAgICAgIGtNYXRyaXhJZEJ0MjAyME5vbmNvbnN0YW50THVtaW5hbmNlKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrTWF0cml4Q29lZmZpY2llbnRCdDIwMjBDb25zdGFudEx1bWluYW5jZSwKLSAgICAgICAgICAgICAgICAgICBrTWF0cml4SWRCdDIwMjBDb25zdGFudEx1bWluYW5jZSk7Ci0KLWdmeDo6Q29sb3JTcGFjZTo6TWF0cml4SUQgRnJvbVdlYk1NYXRyaXhDb2VmZmljaWVudChNYXRyaXhDb2VmZmljaWVudCBjKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxnZng6OkNvbG9yU3BhY2U6Ok1hdHJpeElEPihjKTsKLX0KLQotU1RBVElDX0FTU0VSVF9FTlVNKGtSYW5nZVVuc3BlY2lmaWVkLCBrUmFuZ2VJZFVuc3BlY2lmaWVkKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUmFuZ2VCcm9hZGNhc3QsIGtSYW5nZUlkTGltaXRlZCk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1JhbmdlRnVsbCwga1JhbmdlSWRGdWxsKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUmFuZ2VEZXJpdmVkLCBrUmFuZ2VJZERlcml2ZWQpOwotCi1nZng6OkNvbG9yU3BhY2U6OlJhbmdlSUQgRnJvbVdlYk1SYW5nZShSYW5nZSByYW5nZSkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEPihyYW5nZSk7Ci19Ci0KLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0J0NzA5LCBrVHJhbnNmZXJJZEJ0NzA5KTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY1Vuc3BlY2lmaWVkLCBrVHJhbnNmZXJJZFVuc3BlY2lmaWVkKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0dhbW1hMjJjdXJ2ZSwga1RyYW5zZmVySWRHYW1tYTIyKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0dhbW1hMjhjdXJ2ZSwga1RyYW5zZmVySWRHYW1tYTI4KTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY1NtcHRlMTcwTSwga1RyYW5zZmVySWRTbXB0ZTE3ME0pOwotU1RBVElDX0FTU0VSVF9FTlVNKGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljU21wdGUyNDBNLCBrVHJhbnNmZXJJZFNtcHRlMjQwTSk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNMaW5lYXIsIGtUcmFuc2ZlcklkTGluZWFyKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0xvZywga1RyYW5zZmVySWRMb2cpOwotU1RBVElDX0FTU0VSVF9FTlVNKGtUcmFuc2ZlckNoYXJhY3RlcmlzdGljTG9nU3FydCwga1RyYW5zZmVySWRMb2dTcXJ0KTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0llYzYxOTY2MjQsIGtUcmFuc2ZlcklkSWVjNjE5NjYyNCk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0LAotICAgICAgICAgICAgICAgICAgIGtUcmFuc2ZlcklkQnQxMzYxRWNnKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY0llYzYxOTY2MjEsIGtUcmFuc2ZlcklkSWVjNjE5NjYyMSk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWMxMEJpdEJ0MjAyMCwga1RyYW5zZmVySWQxMEJpdEJ0MjAyMCk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWMxMkJpdEJ0MjAyMCwga1RyYW5zZmVySWQxMkJpdEJ0MjAyMCk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNTbXB0ZVN0MjA4NCwga1RyYW5zZmVySWRTbXB0ZVN0MjA4NCk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNTbXB0ZVN0NDI4MSwga1RyYW5zZmVySWRTbXB0ZVN0NDI4MSk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNBcmliU3RkQjY3SGxnLCBrVHJhbnNmZXJJZEFyaWJTdGRCNjcpOwotCi1nZng6OkNvbG9yU3BhY2U6OlRyYW5zZmVySUQgRnJvbVdlYk1UcmFuc2ZlckNoYXJhY3RlcmlzdGljKAotICAgIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMgdGMpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGdmeDo6Q29sb3JTcGFjZTo6VHJhbnNmZXJJRD4odGMpOwotfQotCi1TVEFUSUNfQVNTRVJUX0VOVU0oa1ByaW1hcnlCdDcwOSwga1ByaW1hcnlJZEJ0NzA5KTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUHJpbWFyeVVuc3BlY2lmaWVkLCBrUHJpbWFyeUlkVW5zcGVjaWZpZWQpOwotU1RBVElDX0FTU0VSVF9FTlVNKGtQcmltYXJ5QnQ0NzBNLCBrUHJpbWFyeUlkQnQ0NzBNKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUHJpbWFyeUJ0NDcwQmcsIGtQcmltYXJ5SWRCdDQ3MEJnKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUHJpbWFyeVNtcHRlMTcwTSwga1ByaW1hcnlJZFNtcHRlMTcwTSk7Ci1TVEFUSUNfQVNTRVJUX0VOVU0oa1ByaW1hcnlTbXB0ZTI0ME0sIGtQcmltYXJ5SWRTbXB0ZTI0ME0pOwotU1RBVElDX0FTU0VSVF9FTlVNKGtQcmltYXJ5RmlsbSwga1ByaW1hcnlJZEZpbG0pOwotU1RBVElDX0FTU0VSVF9FTlVNKGtQcmltYXJ5QnQyMDIwLCBrUHJpbWFyeUlkQnQyMDIwKTsKLVNUQVRJQ19BU1NFUlRfRU5VTShrUHJpbWFyeVNtcHRlU3Q0MjgxLCBrUHJpbWFyeUlkU21wdGVTdDQyODEpOwotCi1nZng6OkNvbG9yU3BhY2U6OlByaW1hcnlJRCBGcm9tV2ViTVByaW1hcnkoUHJpbWFyeSBwcmltYXJ5KSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxnZng6OkNvbG9yU3BhY2U6OlByaW1hcnlJRD4ocHJpbWFyeSk7Ci19Ci0KLVdlYk1Db2xvck1ldGFkYXRhOjpXZWJNQ29sb3JNZXRhZGF0YSgpCi0gICAgOiBCaXRzUGVyQ2hhbm5lbCgwKSwKLSAgICAgIENocm9tYVN1YnNhbXBsaW5nSG9yeigwKSwKLSAgICAgIENocm9tYVN1YnNhbXBsaW5nVmVydCgwKSwKLSAgICAgIENiU3Vic2FtcGxpbmdIb3J6KDApLAotICAgICAgQ2JTdWJzYW1wbGluZ1ZlcnQoMCksCi0gICAgICBDaHJvbWFTaXRpbmdIb3J6KDApLAotICAgICAgQ2hyb21hU2l0aW5nVmVydCgwKSB7fQotCi1ib29sIFdlYk1Db2xvck1ldGFkYXRhOjpvcGVyYXRvcj09KGNvbnN0IFdlYk1Db2xvck1ldGFkYXRhJiByaHMpIGNvbnN0IHsKLSAgcmV0dXJuIChCaXRzUGVyQ2hhbm5lbCA9PSByaHMuQml0c1BlckNoYW5uZWwgJiYKLSAgICAgICAgICBDaHJvbWFTdWJzYW1wbGluZ0hvcnogPT0gcmhzLkNocm9tYVN1YnNhbXBsaW5nSG9yeiAmJgotICAgICAgICAgIENocm9tYVN1YnNhbXBsaW5nVmVydCA9PSByaHMuQ2hyb21hU3Vic2FtcGxpbmdWZXJ0ICYmCi0gICAgICAgICAgQ2JTdWJzYW1wbGluZ0hvcnogPT0gcmhzLkNiU3Vic2FtcGxpbmdIb3J6ICYmCi0gICAgICAgICAgQ2JTdWJzYW1wbGluZ1ZlcnQgPT0gcmhzLkNiU3Vic2FtcGxpbmdWZXJ0ICYmCi0gICAgICAgICAgQ2hyb21hU2l0aW5nSG9yeiA9PSByaHMuQ2hyb21hU2l0aW5nSG9yeiAmJgotICAgICAgICAgIENocm9tYVNpdGluZ1ZlcnQgPT0gcmhzLkNocm9tYVNpdGluZ1ZlcnQgJiYKLSAgICAgICAgICBjb2xvcl9zcGFjZSA9PSByaHMuY29sb3Jfc3BhY2UgJiYgaGRyX21ldGFkYXRhID09IHJocy5oZHJfbWV0YWRhdGEpOwotfQotCi1XZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXI6OldlYk1NYXN0ZXJpbmdNZXRhZGF0YVBhcnNlcigpIHt9Ci1XZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXI6On5XZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXIoKSB7fQotCi1ib29sIFdlYk1NYXN0ZXJpbmdNZXRhZGF0YVBhcnNlcjo6T25GbG9hdChpbnQgaWQsIGRvdWJsZSB2YWwpIHsKLSAgc3dpdGNoIChpZCkgewotICAgIGNhc2Uga1dlYk1JZFByaW1hcnlSQ2hyb21hdGljaXR5WDoKLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YV8ucHJpbWFyeV9yX2Nocm9tYXRpY2l0eV94ID0gdmFsOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkUHJpbWFyeVJDaHJvbWF0aWNpdHlZOgotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhXy5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3kgPSB2YWw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRQcmltYXJ5R0Nocm9tYXRpY2l0eVg6Ci0gICAgICBtYXN0ZXJpbmdfbWV0YWRhdGFfLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeCA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFByaW1hcnlHQ2hyb21hdGljaXR5WToKLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YV8ucHJpbWFyeV9nX2Nocm9tYXRpY2l0eV95ID0gdmFsOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkUHJpbWFyeUJDaHJvbWF0aWNpdHlYOgotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhXy5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3ggPSB2YWw7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRQcmltYXJ5QkNocm9tYXRpY2l0eVk6Ci0gICAgICBtYXN0ZXJpbmdfbWV0YWRhdGFfLnByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeSA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFdoaXRlUG9pbnRDaHJvbWF0aWNpdHlYOgotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhXy53aGl0ZV9wb2ludF9jaHJvbWF0aWNpdHlfeCA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFdoaXRlUG9pbnRDaHJvbWF0aWNpdHlZOgotICAgICAgbWFzdGVyaW5nX21ldGFkYXRhXy53aGl0ZV9wb2ludF9jaHJvbWF0aWNpdHlfeSA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZEx1bWluYW5jZU1heDoKLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YV8ubHVtaW5hbmNlX21heCA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZEx1bWluYW5jZU1pbjoKLSAgICAgIG1hc3RlcmluZ19tZXRhZGF0YV8ubHVtaW5hbmNlX21pbiA9IHZhbDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBpZCBpbiBNYXN0ZXJpbmdNZXRhZGF0YTogMHgiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1XZWJNQ29sb3VyUGFyc2VyOjpXZWJNQ29sb3VyUGFyc2VyKCkgOiBtYXN0ZXJpbmdfbWV0YWRhdGFfcGFyc2VkXyhmYWxzZSkgewotICBSZXNldCgpOwotfQotCi1XZWJNQ29sb3VyUGFyc2VyOjp+V2ViTUNvbG91clBhcnNlcigpIHt9Ci0KLXZvaWQgV2ViTUNvbG91clBhcnNlcjo6UmVzZXQoKSB7Ci0gIG1hdHJpeF9jb2VmZmljaWVudHNfID0gLTE7Ci0gIGJpdHNfcGVyX2NoYW5uZWxfID0gLTE7Ci0gIGNocm9tYV9zdWJzYW1wbGluZ19ob3J6XyA9IC0xOwotICBjaHJvbWFfc3Vic2FtcGxpbmdfdmVydF8gPSAtMTsKLSAgY2Jfc3Vic2FtcGxpbmdfaG9yel8gPSAtMTsKLSAgY2Jfc3Vic2FtcGxpbmdfdmVydF8gPSAtMTsKLSAgY2hyb21hX3NpdGluZ19ob3J6XyA9IC0xOwotICBjaHJvbWFfc2l0aW5nX3ZlcnRfID0gLTE7Ci0gIHJhbmdlXyA9IC0xOwotICB0cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3NfID0gLTE7Ci0gIHByaW1hcmllc18gPSAtMTsKLSAgbWF4X2NsbF8gPSAtMTsKLSAgbWF4X2ZhbGxfID0gLTE7Ci19Ci0KLVdlYk1QYXJzZXJDbGllbnQqIFdlYk1Db2xvdXJQYXJzZXI6Ok9uTGlzdFN0YXJ0KGludCBpZCkgewotICBpZiAoaWQgPT0ga1dlYk1JZE1hc3RlcmluZ01ldGFkYXRhKSB7Ci0gICAgbWFzdGVyaW5nX21ldGFkYXRhX3BhcnNlZF8gPSBmYWxzZTsKLSAgICByZXR1cm4gJm1hc3RlcmluZ19tZXRhZGF0YV9wYXJzZXJfOwotICB9Ci0KLSAgcmV0dXJuIHRoaXM7Ci19Ci0KLWJvb2wgV2ViTUNvbG91clBhcnNlcjo6T25MaXN0RW5kKGludCBpZCkgewotICBpZiAoaWQgPT0ga1dlYk1JZE1hc3RlcmluZ01ldGFkYXRhKSBtYXN0ZXJpbmdfbWV0YWRhdGFfcGFyc2VkXyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1Db2xvdXJQYXJzZXI6Ok9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKSB7Ci0gIGludDY0X3QqIGRzdCA9IE5VTEw7Ci0KLSAgc3dpdGNoIChpZCkgewotICAgIGNhc2Uga1dlYk1JZE1hdHJpeENvZWZmaWNpZW50czoKLSAgICAgIGRzdCA9ICZtYXRyaXhfY29lZmZpY2llbnRzXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZEJpdHNQZXJDaGFubmVsOgotICAgICAgZHN0ID0gJmJpdHNfcGVyX2NoYW5uZWxfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkQ2hyb21hU3Vic2FtcGxpbmdIb3J6OgotICAgICAgZHN0ID0gJmNocm9tYV9zdWJzYW1wbGluZ19ob3J6XzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZENocm9tYVN1YnNhbXBsaW5nVmVydDoKLSAgICAgIGRzdCA9ICZjaHJvbWFfc3Vic2FtcGxpbmdfdmVydF87Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRDYlN1YnNhbXBsaW5nSG9yejoKLSAgICAgIGRzdCA9ICZjYl9zdWJzYW1wbGluZ19ob3J6XzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZENiU3Vic2FtcGxpbmdWZXJ0OgotICAgICAgZHN0ID0gJmNiX3N1YnNhbXBsaW5nX3ZlcnRfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkQ2hyb21hU2l0aW5nSG9yejoKLSAgICAgIGRzdCA9ICZjaHJvbWFfc2l0aW5nX2hvcnpfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkQ2hyb21hU2l0aW5nVmVydDoKLSAgICAgIGRzdCA9ICZjaHJvbWFfc2l0aW5nX3ZlcnRfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkUmFuZ2U6Ci0gICAgICBkc3QgPSAmcmFuZ2VfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Ci0gICAgICBkc3QgPSAmdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFByaW1hcmllczoKLSAgICAgIGRzdCA9ICZwcmltYXJpZXNfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkTWF4Q0xMOgotICAgICAgZHN0ID0gJm1heF9jbGxfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkTWF4RkFMTDoKLSAgICAgIGRzdCA9ICZtYXhfZmFsbF87Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBEQ0hFQ0soZHN0KTsKLSAgaWYgKCpkc3QgIT0gLTEpIHsKLSAgICBMT0coRVJST1IpIDw8ICJNdWx0aXBsZSB2YWx1ZXMgZm9yIGlkICIgPDwgc3RkOjpoZXggPDwgaWQgPDwgIiBzcGVjaWZpZWQgKCIKLSAgICAgICAgICAgICAgIDw8ICpkc3QgPDwgIiBhbmQgIiA8PCB2YWwgPDwgIikiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpkc3QgPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi1XZWJNQ29sb3JNZXRhZGF0YSBXZWJNQ29sb3VyUGFyc2VyOjpHZXRXZWJNQ29sb3JNZXRhZGF0YSgpIGNvbnN0IHsKLSAgV2ViTUNvbG9yTWV0YWRhdGEgY29sb3JfbWV0YWRhdGE7Ci0KLSAgaWYgKGJpdHNfcGVyX2NoYW5uZWxfICE9IC0xKQotICAgIGNvbG9yX21ldGFkYXRhLkJpdHNQZXJDaGFubmVsID0gYml0c19wZXJfY2hhbm5lbF87Ci0KLSAgaWYgKGNocm9tYV9zdWJzYW1wbGluZ19ob3J6XyAhPSAtMSkKLSAgICBjb2xvcl9tZXRhZGF0YS5DaHJvbWFTdWJzYW1wbGluZ0hvcnogPSBjaHJvbWFfc3Vic2FtcGxpbmdfaG9yel87Ci0gIGlmIChjaHJvbWFfc3Vic2FtcGxpbmdfdmVydF8gIT0gLTEpCi0gICAgY29sb3JfbWV0YWRhdGEuQ2hyb21hU3Vic2FtcGxpbmdWZXJ0ID0gY2hyb21hX3N1YnNhbXBsaW5nX3ZlcnRfOwotICBpZiAoY2Jfc3Vic2FtcGxpbmdfaG9yel8gIT0gLTEpCi0gICAgY29sb3JfbWV0YWRhdGEuQ2JTdWJzYW1wbGluZ0hvcnogPSBjYl9zdWJzYW1wbGluZ19ob3J6XzsKLSAgaWYgKGNiX3N1YnNhbXBsaW5nX3ZlcnRfICE9IC0xKQotICAgIGNvbG9yX21ldGFkYXRhLkNiU3Vic2FtcGxpbmdWZXJ0ID0gY2Jfc3Vic2FtcGxpbmdfdmVydF87Ci0gIGlmIChjaHJvbWFfc2l0aW5nX2hvcnpfICE9IC0xKQotICAgIGNvbG9yX21ldGFkYXRhLkNocm9tYVNpdGluZ0hvcnogPSBjaHJvbWFfc2l0aW5nX2hvcnpfOwotICBpZiAoY2hyb21hX3NpdGluZ192ZXJ0XyAhPSAtMSkKLSAgICBjb2xvcl9tZXRhZGF0YS5DaHJvbWFTaXRpbmdWZXJ0ID0gY2hyb21hX3NpdGluZ192ZXJ0XzsKLQotICBnZng6OkNvbG9yU3BhY2U6Ok1hdHJpeElEIG1hdHJpeF9pZCA9IGdmeDo6Q29sb3JTcGFjZTo6a01hdHJpeElkVW5zcGVjaWZpZWQ7Ci0gIGlmIChtYXRyaXhfY29lZmZpY2llbnRzXyAhPSAtMSkKLSAgICBtYXRyaXhfaWQgPSBGcm9tV2ViTU1hdHJpeENvZWZmaWNpZW50KAotICAgICAgICBzdGF0aWNfY2FzdDxNYXRyaXhDb2VmZmljaWVudD4obWF0cml4X2NvZWZmaWNpZW50c18pKTsKLQotICBnZng6OkNvbG9yU3BhY2U6OlJhbmdlSUQgcmFuZ2VfaWQgPSBnZng6OkNvbG9yU3BhY2U6OmtSYW5nZUlkVW5zcGVjaWZpZWQ7Ci0gIGlmIChyYW5nZV8gIT0gLTEpIHJhbmdlX2lkID0gRnJvbVdlYk1SYW5nZShzdGF0aWNfY2FzdDxSYW5nZT4ocmFuZ2VfKSk7Ci0KLSAgZ2Z4OjpDb2xvclNwYWNlOjpUcmFuc2ZlcklEIHRyYW5zZmVyX2lkID0KLSAgICAgIGdmeDo6Q29sb3JTcGFjZTo6a1RyYW5zZmVySWRVbnNwZWNpZmllZDsKLSAgaWYgKHRyYW5zZmVyX2NoYXJhY3RlcmlzdGljc18gIT0gLTEpCi0gICAgdHJhbnNmZXJfaWQgPSBGcm9tV2ViTVRyYW5zZmVyQ2hhcmFjdGVyaXN0aWMoCi0gICAgICAgIHN0YXRpY19jYXN0PFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWM+KHRyYW5zZmVyX2NoYXJhY3RlcmlzdGljc18pKTsKLQotICBnZng6OkNvbG9yU3BhY2U6OlByaW1hcnlJRCBwcmltYXJ5X2lkID0KLSAgICAgIGdmeDo6Q29sb3JTcGFjZTo6a1ByaW1hcnlJZFVuc3BlY2lmaWVkOwotICBpZiAocHJpbWFyaWVzXyAhPSAtMSkKLSAgICBwcmltYXJ5X2lkID0gRnJvbVdlYk1QcmltYXJ5KHN0YXRpY19jYXN0PFByaW1hcnk+KHByaW1hcmllc18pKTsKLQotICBjb2xvcl9tZXRhZGF0YS5jb2xvcl9zcGFjZSA9Ci0gICAgICBnZng6OkNvbG9yU3BhY2UocHJpbWFyeV9pZCwgdHJhbnNmZXJfaWQsIG1hdHJpeF9pZCwgcmFuZ2VfaWQpOwotCi0gIGlmIChtYXhfY2xsXyAhPSAtMSkgY29sb3JfbWV0YWRhdGEuaGRyX21ldGFkYXRhLm1heF9jbGwgPSBtYXhfY2xsXzsKLQotICBpZiAobWF4X2ZhbGxfICE9IC0xKSBjb2xvcl9tZXRhZGF0YS5oZHJfbWV0YWRhdGEubWF4X2ZhbGwgPSBtYXhfZmFsbF87Ci0KLSAgaWYgKG1hc3RlcmluZ19tZXRhZGF0YV9wYXJzZWRfKQotICAgIGNvbG9yX21ldGFkYXRhLmhkcl9tZXRhZGF0YS5tYXN0ZXJpbmdfbWV0YWRhdGEgPQotICAgICAgICBtYXN0ZXJpbmdfbWV0YWRhdGFfcGFyc2VyXy5HZXRNYXN0ZXJpbmdNZXRhZGF0YSgpOwotCi0gIHJldHVybiBjb2xvcl9tZXRhZGF0YTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbG91cl9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxOGZkMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DT0xPVVJfUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DT0xPVVJfUEFSU0VSX0hfCi0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvY29sb3Jfc3BhY2UuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9oZHJfbWV0YWRhdGEuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gV2ViTSBjb2xvciBpbmZvcm1hdGlvbiwgY29udGFpbmluZyBIRFIgbWV0YWRhdGE6Ci0vLyBodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9kb2NzL2NvbnRhaW5lci8jQ29sb3VyCi1zdHJ1Y3QgTUVESUFfRVhQT1JUIFdlYk1Db2xvck1ldGFkYXRhIHsKLSAgdW5zaWduZWQgQml0c1BlckNoYW5uZWw7Ci0gIHVuc2lnbmVkIENocm9tYVN1YnNhbXBsaW5nSG9yejsKLSAgdW5zaWduZWQgQ2hyb21hU3Vic2FtcGxpbmdWZXJ0OwotICB1bnNpZ25lZCBDYlN1YnNhbXBsaW5nSG9yejsKLSAgdW5zaWduZWQgQ2JTdWJzYW1wbGluZ1ZlcnQ7Ci0gIHVuc2lnbmVkIENocm9tYVNpdGluZ0hvcno7Ci0gIHVuc2lnbmVkIENocm9tYVNpdGluZ1ZlcnQ7Ci0KLSAgZ2Z4OjpDb2xvclNwYWNlIGNvbG9yX3NwYWNlOwotCi0gIEhEUk1ldGFkYXRhIGhkcl9tZXRhZGF0YTsKLQotICBXZWJNQ29sb3JNZXRhZGF0YSgpOwotICBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViTUNvbG9yTWV0YWRhdGEmIHJocykgY29uc3Q7Ci19OwotCi0vLyBQYXJzZXIgZm9yIFdlYk0gTWFzdGVyaW5nTWV0YWRhdGEgd2l0aGluIENvbG91ciBlbGVtZW50OgotLy8gaHR0cDovL3d3dy53ZWJtcHJvamVjdC5vcmcvZG9jcy9jb250YWluZXIvI01hc3RlcmluZ01ldGFkYXRhCi1jbGFzcyBXZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXIgOiBwdWJsaWMgV2ViTVBhcnNlckNsaWVudCB7Ci0gcHVibGljOgotICBXZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXIoKTsKLSAgfldlYk1NYXN0ZXJpbmdNZXRhZGF0YVBhcnNlcigpIG92ZXJyaWRlOwotCi0gIE1hc3RlcmluZ01ldGFkYXRhIEdldE1hc3RlcmluZ01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbWFzdGVyaW5nX21ldGFkYXRhXzsgfQotCi0gcHJpdmF0ZToKLSAgLy8gV2ViTVBhcnNlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgYm9vbCBPbkZsb2F0KGludCBpZCwgZG91YmxlIHZhbCkgb3ZlcnJpZGU7Ci0KLSAgTWFzdGVyaW5nTWV0YWRhdGEgbWFzdGVyaW5nX21ldGFkYXRhXzsKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1NYXN0ZXJpbmdNZXRhZGF0YVBhcnNlcik7Ci19OwotCi0vLyBQYXJzZXIgZm9yIFdlYk0gQ29sb3VyIGVsZW1lbnQ6Ci0vLyBodHRwOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy9kb2NzL2NvbnRhaW5lci8jY29sb3VyCi1jbGFzcyBXZWJNQ29sb3VyUGFyc2VyIDogcHVibGljIFdlYk1QYXJzZXJDbGllbnQgewotIHB1YmxpYzoKLSAgV2ViTUNvbG91clBhcnNlcigpOwotICB+V2ViTUNvbG91clBhcnNlcigpIG92ZXJyaWRlOwotCi0gIHZvaWQgUmVzZXQoKTsKLQotICBXZWJNQ29sb3JNZXRhZGF0YSBHZXRXZWJNQ29sb3JNZXRhZGF0YSgpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gV2ViTVBhcnNlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgV2ViTVBhcnNlckNsaWVudCogT25MaXN0U3RhcnQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPbkxpc3RFbmQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgb3ZlcnJpZGU7Ci0KLSAgaW50NjRfdCBtYXRyaXhfY29lZmZpY2llbnRzXzsKLSAgaW50NjRfdCBiaXRzX3Blcl9jaGFubmVsXzsKLSAgaW50NjRfdCBjaHJvbWFfc3Vic2FtcGxpbmdfaG9yel87Ci0gIGludDY0X3QgY2hyb21hX3N1YnNhbXBsaW5nX3ZlcnRfOwotICBpbnQ2NF90IGNiX3N1YnNhbXBsaW5nX2hvcnpfOwotICBpbnQ2NF90IGNiX3N1YnNhbXBsaW5nX3ZlcnRfOwotICBpbnQ2NF90IGNocm9tYV9zaXRpbmdfaG9yel87Ci0gIGludDY0X3QgY2hyb21hX3NpdGluZ192ZXJ0XzsKLSAgaW50NjRfdCByYW5nZV87Ci0gIGludDY0X3QgdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzXzsKLSAgaW50NjRfdCBwcmltYXJpZXNfOwotICBpbnQ2NF90IG1heF9jbGxfOwotICBpbnQ2NF90IG1heF9mYWxsXzsKLQotICBXZWJNTWFzdGVyaW5nTWV0YWRhdGFQYXJzZXIgbWFzdGVyaW5nX21ldGFkYXRhX3BhcnNlcl87Ci0gIGJvb2wgbWFzdGVyaW5nX21ldGFkYXRhX3BhcnNlZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1Db2xvdXJQYXJzZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NPTE9VUl9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTA4MzUzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY29uc3QgY2hhciBrV2ViTUNvZGVjU3VidGl0bGVzW10gPSAiRF9XRUJWVFQvU1VCVElUTEVTIjsKLWNvbnN0IGNoYXIga1dlYk1Db2RlY0NhcHRpb25zW10gPSAiRF9XRUJWVFQvQ0FQVElPTlMiOwotY29uc3QgY2hhciBrV2ViTUNvZGVjRGVzY3JpcHRpb25zW10gPSAiRF9XRUJWVFQvREVTQ1JJUFRJT05TIjsKLWNvbnN0IGNoYXIga1dlYk1Db2RlY01ldGFkYXRhW10gPSAiRF9XRUJWVFQvTUVUQURBVEEiOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlZWI2Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DT05TVEFOVFNfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NPTlNUQU5UU19IXwotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gV2ViTSBlbGVtZW50IElEcy4KLS8vIFRoaXMgaXMgYSBzdWJzZXQgb2YgdGhlIElEcyBpbiB0aGUgTWF0cm9za2Egc3BlYy4KLS8vIGh0dHA6Ly93d3cubWF0cm9za2Eub3JnL3RlY2huaWNhbC9zcGVjcy9pbmRleC5odG1sCi1jb25zdCBpbnQga1dlYk1JZEFFU1NldHRpbmdzQ2lwaGVyTW9kZSA9IDB4NDdFODsKLWNvbnN0IGludCBrV2ViTUlkQWxwaGFNb2RlID0gMHg1M0MwOwotY29uc3QgaW50IGtXZWJNSWRBc3BlY3RSYXRpb1R5cGUgPSAweDU0QjM7Ci1jb25zdCBpbnQga1dlYk1JZEF0dGFjaGVkRmlsZSA9IDB4NjFBNzsKLWNvbnN0IGludCBrV2ViTUlkQXR0YWNobWVudExpbmsgPSAweDc0NDY7Ci1jb25zdCBpbnQga1dlYk1JZEF0dGFjaG1lbnRzID0gMHgxOTQxQTQ2OTsKLWNvbnN0IGludCBrV2ViTUlkQXVkaW8gPSAweEUxOwotY29uc3QgaW50IGtXZWJNSWRCaXREZXB0aCA9IDB4NjI2NDsKLWNvbnN0IGludCBrV2ViTUlkQml0c1BlckNoYW5uZWwgPSAweDU1QjI7Ci1jb25zdCBpbnQga1dlYk1JZEJsb2NrID0gMHhBMTsKLWNvbnN0IGludCBrV2ViTUlkQmxvY2tBZGRJRCA9IDB4RUU7Ci1jb25zdCBpbnQga1dlYk1JZEJsb2NrQWRkaXRpb25zID0gMHg3NUExOwotY29uc3QgaW50IGtXZWJNSWRCbG9ja0FkZGl0aW9uYWwgPSAweEE1OwotY29uc3QgaW50IGtXZWJNSWRCbG9ja0R1cmF0aW9uID0gMHg5QjsKLWNvbnN0IGludCBrV2ViTUlkQmxvY2tHcm91cCA9IDB4QTA7Ci1jb25zdCBpbnQga1dlYk1JZEJsb2NrTW9yZSA9IDB4QTY7Ci1jb25zdCBpbnQga1dlYk1JZENiU3Vic2FtcGxpbmdIb3J6ID0gMHg1NUI1OwotY29uc3QgaW50IGtXZWJNSWRDYlN1YnNhbXBsaW5nVmVydCA9IDB4NTVCNjsKLWNvbnN0IGludCBrV2ViTUlkQ2hhbm5lbHMgPSAweDlGOwotY29uc3QgaW50IGtXZWJNSWRDaGFwQ291bnRyeSA9IDB4NDM3RTsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcExhbmd1YWdlID0gMHg0MzdDOwotY29uc3QgaW50IGtXZWJNSWRDaGFwUHJvY2VzcyA9IDB4Njk0NDsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcFByb2Nlc3NDb2RlY0lEID0gMHg2OTU1OwotY29uc3QgaW50IGtXZWJNSWRDaGFwUHJvY2Vzc0NvbW1hbmQgPSAweDY5MTE7Ci1jb25zdCBpbnQga1dlYk1JZENoYXBQcm9jZXNzRGF0YSA9IDB4NjkzMzsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcFByb2Nlc3NQcml2YXRlID0gMHg0NTBEOwotY29uc3QgaW50IGtXZWJNSWRDaGFwUHJvY2Vzc1RpbWUgPSAweDY5MjI7Ci1jb25zdCBpbnQga1dlYk1JZENoYXBTdHJpbmcgPSAweDg1OwotY29uc3QgaW50IGtXZWJNSWRDaGFwdGVyQXRvbSA9IDB4QjY7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJEaXNwbGF5ID0gMHg4MDsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcHRlckZsYWdFbmFibGVkID0gMHg0NTk4OwotY29uc3QgaW50IGtXZWJNSWRDaGFwdGVyRmxhZ0hpZGRlbiA9IDB4OTg7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJQaHlzaWNhbEVxdWl2ID0gMHg2M0MzOwotY29uc3QgaW50IGtXZWJNSWRDaGFwdGVycyA9IDB4MTA0M0E3NzA7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJTZWdtZW50RWRpdGlvblVJRCA9IDB4NkVCQzsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcHRlclNlZ21lbnRVSUQgPSAweDZFNjc7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUaW1lRW5kID0gMHg5MjsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcHRlclRpbWVTdGFydCA9IDB4OTE7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUcmFjayA9IDB4OEY7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUcmFja051bWJlciA9IDB4ODk7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUcmFuc2xhdGUgPSAweDY5MjQ7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUcmFuc2xhdGVDb2RlYyA9IDB4NjlCRjsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcHRlclRyYW5zbGF0ZUVkaXRpb25VSUQgPSAweDY5RkM7Ci1jb25zdCBpbnQga1dlYk1JZENoYXB0ZXJUcmFuc2xhdGVJRCA9IDB4NjlBNTsKLWNvbnN0IGludCBrV2ViTUlkQ2hhcHRlclVJRCA9IDB4NzNDNDsKLWNvbnN0IGludCBrV2ViTUlkQ2hyb21hU2l0aW5nSG9yeiA9IDB4NTVCNzsKLWNvbnN0IGludCBrV2ViTUlkQ2hyb21hU2l0aW5nVmVydCA9IDB4NTVCODsKLWNvbnN0IGludCBrV2ViTUlkQ2hyb21hU3Vic2FtcGxpbmdIb3J6ID0gMHg1NUIzOwotY29uc3QgaW50IGtXZWJNSWRDaHJvbWFTdWJzYW1wbGluZ1ZlcnQgPSAweDU1QjQ7Ci1jb25zdCBpbnQga1dlYk1JZENsdXN0ZXIgPSAweDFGNDNCNjc1OwotY29uc3QgaW50IGtXZWJNSWRDb2RlY0RlY29kZUFsbCA9IDB4QUE7Ci1jb25zdCBpbnQga1dlYk1JZENvZGVjRGVsYXkgPSAweDU2QUE7Ci1jb25zdCBpbnQga1dlYk1JZENvZGVjSUQgPSAweDg2OwotY29uc3QgaW50IGtXZWJNSWRDb2RlY05hbWUgPSAweDI1ODY4ODsKLWNvbnN0IGludCBrV2ViTUlkQ29kZWNQcml2YXRlID0gMHg2M0EyOwotY29uc3QgaW50IGtXZWJNSWRDb2RlY1N0YXRlID0gMHhBNDsKLWNvbnN0IGludCBrV2ViTUlkQ29sb3JTcGFjZSA9IDB4MkVCNTI0OwotY29uc3QgaW50IGtXZWJNSWRDb2xvdXIgPSAweDU1QjA7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRDb21wQWxnbyA9IDB4NDI1NDsKLWNvbnN0IGludCBrV2ViTUlkQ29udGVudENvbXByZXNzaW9uID0gMHg1MDM0OwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50Q29tcFNldHRpbmdzID0gMHg0MjU1OwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50RW5jQUVTU2V0dGluZ3MgPSAweDQ3RTc7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRFbmNBbGdvID0gMHg0N0UxOwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50RW5jS2V5SUQgPSAweDQ3RTI7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRFbmNvZGluZyA9IDB4NjI0MDsKLWNvbnN0IGludCBrV2ViTUlkQ29udGVudEVuY29kaW5nT3JkZXIgPSAweDUwMzE7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRFbmNvZGluZ3MgPSAweDZEODA7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRFbmNvZGluZ1Njb3BlID0gMHg1MDMyOwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50RW5jb2RpbmdUeXBlID0gMHg1MDMzOwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50RW5jcnlwdGlvbiA9IDB4NTAzNTsKLWNvbnN0IGludCBrV2ViTUlkQ29udGVudFNpZ0FsZ28gPSAweDQ3RTU7Ci1jb25zdCBpbnQga1dlYk1JZENvbnRlbnRTaWdIYXNoQWxnbyA9IDB4NDdFNjsKLWNvbnN0IGludCBrV2ViTUlkQ29udGVudFNpZ0tleUlEID0gMHg0N0U0OwotY29uc3QgaW50IGtXZWJNSWRDb250ZW50U2lnbmF0dXJlID0gMHg0N0UzOwotY29uc3QgaW50IGtXZWJNSWRDUkMzMiA9IDB4QkY7Ci1jb25zdCBpbnQga1dlYk1JZEN1ZUJsb2NrTnVtYmVyID0gMHg1Mzc4OwotY29uc3QgaW50IGtXZWJNSWRDdWVDbHVzdGVyUG9zaXRpb24gPSAweEYxOwotY29uc3QgaW50IGtXZWJNSWRDdWVDb2RlY1N0YXRlID0gMHhFQTsKLWNvbnN0IGludCBrV2ViTUlkQ3VlUG9pbnQgPSAweEJCOwotY29uc3QgaW50IGtXZWJNSWRDdWVSZWZlcmVuY2UgPSAweERCOwotY29uc3QgaW50IGtXZWJNSWRDdWVSZWZUaW1lID0gMHg5NjsKLWNvbnN0IGludCBrV2ViTUlkQ3VlcyA9IDB4MUM1M0JCNkI7Ci1jb25zdCBpbnQga1dlYk1JZEN1ZVRpbWUgPSAweEIzOwotY29uc3QgaW50IGtXZWJNSWRDdWVUcmFjayA9IDB4Rjc7Ci1jb25zdCBpbnQga1dlYk1JZEN1ZVRyYWNrUG9zaXRpb25zID0gMHhCNzsKLWNvbnN0IGludCBrV2ViTUlkRGF0ZVVUQyA9IDB4NDQ2MTsKLWNvbnN0IGludCBrV2ViTUlkRGVmYXVsdER1cmF0aW9uID0gMHgyM0UzODM7Ci1jb25zdCBpbnQga1dlYk1JZERpc2NhcmRQYWRkaW5nID0gMHg3NUEyOwotY29uc3QgaW50IGtXZWJNSWREaXNwbGF5SGVpZ2h0ID0gMHg1NEJBOwotY29uc3QgaW50IGtXZWJNSWREaXNwbGF5VW5pdCA9IDB4NTRCMjsKLWNvbnN0IGludCBrV2ViTUlkRGlzcGxheVdpZHRoID0gMHg1NEIwOwotY29uc3QgaW50IGtXZWJNSWREb2NUeXBlID0gMHg0MjgyOwotY29uc3QgaW50IGtXZWJNSWREb2NUeXBlUmVhZFZlcnNpb24gPSAweDQyODU7Ci1jb25zdCBpbnQga1dlYk1JZERvY1R5cGVWZXJzaW9uID0gMHg0Mjg3OwotY29uc3QgaW50IGtXZWJNSWREdXJhdGlvbiA9IDB4NDQ4OTsKLWNvbnN0IGludCBrV2ViTUlkRUJNTEhlYWRlciA9IDB4MUE0NURGQTM7Ci1jb25zdCBpbnQga1dlYk1JZEVCTUxNYXhJRExlbmd0aCA9IDB4NDJGMjsKLWNvbnN0IGludCBrV2ViTUlkRUJNTE1heFNpemVMZW5ndGggPSAweDQyRjM7Ci1jb25zdCBpbnQga1dlYk1JZEVCTUxSZWFkVmVyc2lvbiA9IDB4NDJGNzsKLWNvbnN0IGludCBrV2ViTUlkRUJNTFZlcnNpb24gPSAweDQyODY7Ci1jb25zdCBpbnQga1dlYk1JZEVkaXRpb25FbnRyeSA9IDB4NDVCOTsKLWNvbnN0IGludCBrV2ViTUlkRWRpdGlvbkZsYWdEZWZhdWx0ID0gMHg0NURCOwotY29uc3QgaW50IGtXZWJNSWRFZGl0aW9uRmxhZ0hpZGRlbiA9IDB4NDVCRDsKLWNvbnN0IGludCBrV2ViTUlkRWRpdGlvbkZsYWdPcmRlcmVkID0gMHg0NUREOwotY29uc3QgaW50IGtXZWJNSWRFZGl0aW9uVUlEID0gMHg0NUJDOwotY29uc3QgaW50IGtXZWJNSWRGaWxlRGF0YSA9IDB4NDY1QzsKLWNvbnN0IGludCBrV2ViTUlkRmlsZURlc2NyaXB0aW9uID0gMHg0NjdFOwotY29uc3QgaW50IGtXZWJNSWRGaWxlTWltZVR5cGUgPSAweDQ2NjA7Ci1jb25zdCBpbnQga1dlYk1JZEZpbGVOYW1lID0gMHg0NjZFOwotY29uc3QgaW50IGtXZWJNSWRGaWxlVUlEID0gMHg0NkFFOwotY29uc3QgaW50IGtXZWJNSWRGbGFnRGVmYXVsdCA9IDB4ODg7Ci1jb25zdCBpbnQga1dlYk1JZEZsYWdFbmFibGVkID0gMHhCOTsKLWNvbnN0IGludCBrV2ViTUlkRmxhZ0ZvcmNlZCA9IDB4NTVBQTsKLWNvbnN0IGludCBrV2ViTUlkRmxhZ0ludGVybGFjZWQgPSAweDlBOwotY29uc3QgaW50IGtXZWJNSWRGbGFnTGFjaW5nID0gMHg5QzsKLWNvbnN0IGludCBrV2ViTUlkRnJhbWVSYXRlID0gMHgyMzgzRTM7Ci1jb25zdCBpbnQga1dlYk1JZEluZm8gPSAweDE1NDlBOTY2OwotY29uc3QgaW50IGtXZWJNSWRKb2luQmxvY2tzID0gMHhFOTsKLWNvbnN0IGludCBrV2ViTUlkTGFjZU51bWJlciA9IDB4Q0M7Ci1jb25zdCBpbnQga1dlYk1JZExhbmd1YWdlID0gMHgyMkI1OUM7Ci1jb25zdCBpbnQga1dlYk1JZEx1bWluYW5jZU1heCA9IDB4NTVEOTsKLWNvbnN0IGludCBrV2ViTUlkTHVtaW5hbmNlTWluID0gMHg1NURBOwotY29uc3QgaW50IGtXZWJNSWRNYXN0ZXJpbmdNZXRhZGF0YSA9IDB4NTVEMDsKLWNvbnN0IGludCBrV2ViTUlkTWF0cml4Q29lZmZpY2llbnRzID0gMHg1NUIxOwotY29uc3QgaW50IGtXZWJNSWRNYXhCbG9ja0FkZGl0aW9uSWQgPSAweDU1RUU7Ci1jb25zdCBpbnQga1dlYk1JZE1heENhY2hlID0gMHg2REY4OwotY29uc3QgaW50IGtXZWJNSWRNYXhDTEwgPSAweDU1QkM7Ci1jb25zdCBpbnQga1dlYk1JZE1heEZBTEwgPSAweDU1QkQ7Ci1jb25zdCBpbnQga1dlYk1JZE1pbkNhY2hlID0gMHg2REU3OwotY29uc3QgaW50IGtXZWJNSWRNdXhpbmdBcHAgPSAweDREODA7Ci1jb25zdCBpbnQga1dlYk1JZE5hbWUgPSAweDUzNkU7Ci1jb25zdCBpbnQga1dlYk1JZE5leHRGaWxlbmFtZSA9IDB4M0U4M0JCOwotY29uc3QgaW50IGtXZWJNSWROZXh0VUlEID0gMHgzRUI5MjM7Ci1jb25zdCBpbnQga1dlYk1JZE91dHB1dFNhbXBsaW5nRnJlcXVlbmN5ID0gMHg3OEI1OwotY29uc3QgaW50IGtXZWJNSWRQaXhlbENyb3BCb3R0b20gPSAweDU0QUE7Ci1jb25zdCBpbnQga1dlYk1JZFBpeGVsQ3JvcExlZnQgPSAweDU0Q0M7Ci1jb25zdCBpbnQga1dlYk1JZFBpeGVsQ3JvcFJpZ2h0ID0gMHg1NEREOwotY29uc3QgaW50IGtXZWJNSWRQaXhlbENyb3BUb3AgPSAweDU0QkI7Ci1jb25zdCBpbnQga1dlYk1JZFBpeGVsSGVpZ2h0ID0gMHhCQTsKLWNvbnN0IGludCBrV2ViTUlkUGl4ZWxXaWR0aCA9IDB4QjA7Ci1jb25zdCBpbnQga1dlYk1JZFBvc2l0aW9uID0gMHhBNzsKLWNvbnN0IGludCBrV2ViTUlkUHJldkZpbGVuYW1lID0gMHgzQzgzQUI7Ci1jb25zdCBpbnQga1dlYk1JZFByZXZTaXplID0gMHhBQjsKLWNvbnN0IGludCBrV2ViTUlkUHJldlVJRCA9IDB4M0NCOTIzOwotY29uc3QgaW50IGtXZWJNSWRQcmltYXJpZXMgPSAweDU1QkI7Ci1jb25zdCBpbnQga1dlYk1JZFByaW1hcnlCQ2hyb21hdGljaXR5WCA9IDB4NTVENTsKLWNvbnN0IGludCBrV2ViTUlkUHJpbWFyeUJDaHJvbWF0aWNpdHlZID0gMHg1NUQ2OwotY29uc3QgaW50IGtXZWJNSWRQcmltYXJ5R0Nocm9tYXRpY2l0eVggPSAweDU1RDM7Ci1jb25zdCBpbnQga1dlYk1JZFByaW1hcnlHQ2hyb21hdGljaXR5WSA9IDB4NTVENDsKLWNvbnN0IGludCBrV2ViTUlkUHJpbWFyeVJDaHJvbWF0aWNpdHlYID0gMHg1NUQxOwotY29uc3QgaW50IGtXZWJNSWRQcmltYXJ5UkNocm9tYXRpY2l0eVkgPSAweDU1RDI7Ci1jb25zdCBpbnQga1dlYk1JZFByb2plY3Rpb24gPSAweDc2NzA7Ci1jb25zdCBpbnQga1dlYk1JZFByb2plY3Rpb25Qb3NlUGl0Y2ggPSAweDc2NzQ7Ci1jb25zdCBpbnQga1dlYk1JZFByb2plY3Rpb25Qb3NlUm9sbCA9IDB4NzY3NTsKLWNvbnN0IGludCBrV2ViTUlkUHJvamVjdGlvblBvc2VZYXcgPSAweDc2NzM7Ci1jb25zdCBpbnQga1dlYk1JZFByb2plY3Rpb25Qcml2YXRlID0gMHg3NjcyOwotY29uc3QgaW50IGtXZWJNSWRQcm9qZWN0aW9uVHlwZSA9IDB4NzY3MTsKLWNvbnN0IGludCBrV2ViTUlkUmFuZ2UgPSAweDU1Qjk7Ci1jb25zdCBpbnQga1dlYk1JZFJlZmVyZW5jZUJsb2NrID0gMHhGQjsKLWNvbnN0IGludCBrV2ViTUlkUmVmZXJlbmNlUHJpb3JpdHkgPSAweEZBOwotY29uc3QgaW50IGtXZWJNSWRTYW1wbGluZ0ZyZXF1ZW5jeSA9IDB4QjU7Ci1jb25zdCBpbnQga1dlYk1JZFNlZWsgPSAweDREQkI7Ci1jb25zdCBpbnQga1dlYk1JZFNlZWtIZWFkID0gMHgxMTREOUI3NDsKLWNvbnN0IGludCBrV2ViTUlkU2Vla0lEID0gMHg1M0FCOwotY29uc3QgaW50IGtXZWJNSWRTZWVrUG9zaXRpb24gPSAweDUzQUM7Ci1jb25zdCBpbnQga1dlYk1JZFNlZWtQcmVSb2xsID0gMHg1NkJCOwotY29uc3QgaW50IGtXZWJNSWRTZWdtZW50ID0gMHgxODUzODA2NzsKLWNvbnN0IGludCBrV2ViTUlkU2VnbWVudEZhbWlseSA9IDB4NDQ0NDsKLWNvbnN0IGludCBrV2ViTUlkU2VnbWVudEZpbGVuYW1lID0gMHg3Mzg0OwotY29uc3QgaW50IGtXZWJNSWRTZWdtZW50VUlEID0gMHg3M0E0OwotY29uc3QgaW50IGtXZWJNSWRTaWxlbnRUcmFja051bWJlciA9IDB4NThENzsKLWNvbnN0IGludCBrV2ViTUlkU2lsZW50VHJhY2tzID0gMHg1ODU0OwotY29uc3QgaW50IGtXZWJNSWRTaW1wbGVCbG9jayA9IDB4QTM7Ci1jb25zdCBpbnQga1dlYk1JZFNpbXBsZVRhZyA9IDB4NjdDODsKLWNvbnN0IGludCBrV2ViTUlkU2xpY2VzID0gMHg4RTsKLWNvbnN0IGludCBrV2ViTUlkU3RlcmVvTW9kZSA9IDB4NTNCODsKLWNvbnN0IGludCBrV2ViTUlkVGFnID0gMHg3MzczOwotY29uc3QgaW50IGtXZWJNSWRUYWdBdHRhY2htZW50VUlEID0gMHg2M0M2OwotY29uc3QgaW50IGtXZWJNSWRUYWdCaW5hcnkgPSAweDQ0ODU7Ci1jb25zdCBpbnQga1dlYk1JZFRhZ0NoYXB0ZXJVSUQgPSAweDYzQzQ7Ci1jb25zdCBpbnQga1dlYk1JZFRhZ0RlZmF1bHQgPSAweDQ0ODQ7Ci1jb25zdCBpbnQga1dlYk1JZFRhZ0VkaXRpb25VSUQgPSAweDYzQzk7Ci1jb25zdCBpbnQga1dlYk1JZFRhZ0xhbmd1YWdlID0gMHg0NDdBOwotY29uc3QgaW50IGtXZWJNSWRUYWdOYW1lID0gMHg0NUEzOwotY29uc3QgaW50IGtXZWJNSWRUYWdzID0gMHgxMjU0QzM2NzsKLWNvbnN0IGludCBrV2ViTUlkVGFnU3RyaW5nID0gMHg0NDg3OwotY29uc3QgaW50IGtXZWJNSWRUYWdUcmFja1VJRCA9IDB4NjNDNTsKLWNvbnN0IGludCBrV2ViTUlkVGFyZ2V0cyA9IDB4NjNDMDsKLWNvbnN0IGludCBrV2ViTUlkVGFyZ2V0VHlwZSA9IDB4NjNDQTsKLWNvbnN0IGludCBrV2ViTUlkVGFyZ2V0VHlwZVZhbHVlID0gMHg2OENBOwotY29uc3QgaW50IGtXZWJNSWRUaW1lY29kZSA9IDB4RTc7Ci1jb25zdCBpbnQga1dlYk1JZFRpbWVjb2RlU2NhbGUgPSAweDJBRDdCMTsKLWNvbnN0IGludCBrV2ViTUlkVGltZVNsaWNlID0gMHhFODsKLWNvbnN0IGludCBrV2ViTUlkVGl0bGUgPSAweDdCQTk7Ci1jb25zdCBpbnQga1dlYk1JZFRyYWNrQ29tYmluZVBsYW5lcyA9IDB4RTM7Ci1jb25zdCBpbnQga1dlYk1JZFRyYWNrRW50cnkgPSAweEFFOwotY29uc3QgaW50IGtXZWJNSWRUcmFja0pvaW5VSUQgPSAweEVEOwotY29uc3QgaW50IGtXZWJNSWRUcmFja051bWJlciA9IDB4RDc7Ci1jb25zdCBpbnQga1dlYk1JZFRyYWNrT3BlcmF0aW9uID0gMHhFMjsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tPdmVybGF5ID0gMHg2RkFCOwotY29uc3QgaW50IGtXZWJNSWRUcmFja1BsYW5lID0gMHhFNDsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tQbGFuZVR5cGUgPSAweEU2OwotY29uc3QgaW50IGtXZWJNSWRUcmFja1BsYW5lVUlEID0gMHhFNTsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tzID0gMHgxNjU0QUU2QjsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tUaW1lY29kZVNjYWxlID0gMHgyMzMxNEY7Ci1jb25zdCBpbnQga1dlYk1JZFRyYWNrVHJhbnNsYXRlID0gMHg2NjI0OwotY29uc3QgaW50IGtXZWJNSWRUcmFja1RyYW5zbGF0ZUNvZGVjID0gMHg2NkJGOwotY29uc3QgaW50IGtXZWJNSWRUcmFja1RyYW5zbGF0ZUVkaXRpb25VSUQgPSAweDY2RkM7Ci1jb25zdCBpbnQga1dlYk1JZFRyYWNrVHJhbnNsYXRlVHJhY2tJRCA9IDB4NjZBNTsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tUeXBlID0gMHg4MzsKLWNvbnN0IGludCBrV2ViTUlkVHJhY2tVSUQgPSAweDczQzU7Ci1jb25zdCBpbnQga1dlYk1JZFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gMHg1NUJBOwotY29uc3QgaW50IGtXZWJNSWRWaWRlbyA9IDB4RTA7Ci1jb25zdCBpbnQga1dlYk1JZFZvaWQgPSAweEVDOwotY29uc3QgaW50IGtXZWJNSWRXaGl0ZVBvaW50Q2hyb21hdGljaXR5WCA9IDB4NTVENzsKLWNvbnN0IGludCBrV2ViTUlkV2hpdGVQb2ludENocm9tYXRpY2l0eVkgPSAweDU1RDg7Ci1jb25zdCBpbnQga1dlYk1JZFdyaXRpbmdBcHAgPSAweDU3NDE7Ci0KLWNvbnN0IGludDY0X3Qga1dlYk1SZXNlcnZlZElkID0gMHgxRkZGRkZGRjsKLWNvbnN0IGludDY0X3Qga1dlYk1Vbmtub3duU2l6ZSA9IDB4MDBGRkZGRkZGRkZGRkZGRkxMOwotCi1jb25zdCB1aW50OF90IGtXZWJNRmxhZ0tleWZyYW1lID0gMHg4MDsKLQotLy8gQ3VycmVudCBlbmNyeXB0ZWQgV2ViTSByZXF1ZXN0IGZvciBjb21tZW50cyBzcGVjaWZpY2F0aW9uIGlzIGhlcmUKLS8vIGh0dHA6Ly93aWtpLndlYm1wcm9qZWN0Lm9yZy9lbmNyeXB0aW9uL3dlYm0tZW5jcnlwdGlvbi1yZmMKLWNvbnN0IHVpbnQ4X3Qga1dlYk1GbGFnRW5jcnlwdGVkRnJhbWUgPSAweDE7Ci1jb25zdCB1aW50OF90IGtXZWJNRmxhZ0VuY3J5cHRlZEZyYW1lUGFydGl0aW9uZWQgPSAweDI7Ci1jb25zdCBpbnQga1dlYk1JdlNpemUgPSA4OwotY29uc3QgaW50IGtXZWJNU2lnbmFsQnl0ZVNpemUgPSAxOwotY29uc3QgaW50IGtXZWJNRW5jcnlwdGVkRnJhbWVOdW1QYXJ0aXRpb25zU2l6ZSA9IDE7Ci1jb25zdCBpbnQga1dlYk1FbmNyeXB0ZWRGcmFtZVBhcnRpdGlvbk9mZnNldFNpemUgPSA0OwotCi0vLyBDdXJyZW50IHNwZWNpZmljYXRpb24gZm9yIFdlYlZUVCBlbWJlZGRlZCBpbiBXZWJNCi0vLyBodHRwOi8vd2lraS53ZWJtcHJvamVjdC5vcmcvd2VibS1tZXRhZGF0YS90ZW1wb3JhbC1tZXRhZGF0YS93ZWJ2dHQtaW4td2VibQotCi1jb25zdCBpbnQga1dlYk1UcmFja1R5cGVWaWRlbyA9IDE7Ci1jb25zdCBpbnQga1dlYk1UcmFja1R5cGVBdWRpbyA9IDI7Ci1jb25zdCBpbnQga1dlYk1UcmFja1R5cGVTdWJ0aXRsZXNPckNhcHRpb25zID0gMHgxMTsKLWNvbnN0IGludCBrV2ViTVRyYWNrVHlwZURlc2NyaXB0aW9uc09yTWV0YWRhdGEgPSAweDIxOwotCi1NRURJQV9FWFBPUlQgZXh0ZXJuIGNvbnN0IGNoYXIga1dlYk1Db2RlY1N1YnRpdGxlc1tdOwotTUVESUFfRVhQT1JUIGV4dGVybiBjb25zdCBjaGFyIGtXZWJNQ29kZWNDYXB0aW9uc1tdOwotTUVESUFfRVhQT1JUIGV4dGVybiBjb25zdCBjaGFyIGtXZWJNQ29kZWNEZXNjcmlwdGlvbnNbXTsKLU1FRElBX0VYUE9SVCBleHRlcm4gY29uc3QgY2hhciBrV2ViTUNvZGVjTWV0YWRhdGFbXTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NPTlNUQU5UU19IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjRhZjQxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5oIgotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLUNvbnRlbnRFbmNvZGluZzo6Q29udGVudEVuY29kaW5nKCkKLSAgICA6IG9yZGVyXyhrT3JkZXJJbnZhbGlkKSwKLSAgICAgIHNjb3BlXyhrU2NvcGVJbnZhbGlkKSwKLSAgICAgIHR5cGVfKGtUeXBlSW52YWxpZCksCi0gICAgICBlbmNyeXB0aW9uX2FsZ29fKGtFbmNBbGdvSW52YWxpZCksCi0gICAgICBjaXBoZXJfbW9kZV8oa0NpcGhlck1vZGVJbnZhbGlkKSB7fQotCi1Db250ZW50RW5jb2Rpbmc6On5Db250ZW50RW5jb2RpbmcoKSB7fQotCi12b2lkIENvbnRlbnRFbmNvZGluZzo6U2V0RW5jcnlwdGlvbktleUlkKGNvbnN0IHVpbnQ4X3QqIGVuY3J5cHRpb25fa2V5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSkgewotICBEQ0hFQ0soZW5jcnlwdGlvbl9rZXlfaWQpOwotICBEQ0hFQ0tfR1Qoc2l6ZSwgMCk7Ci0gIGVuY3J5cHRpb25fa2V5X2lkXy5hc3NpZ24ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZW5jcnlwdGlvbl9rZXlfaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZTE2YzUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NPTlRFTlRfRU5DT0RJTkdTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DT05URU5UX0VOQ09ESU5HU19IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIE1FRElBX0VYUE9SVCBDb250ZW50RW5jb2RpbmcgewotIHB1YmxpYzoKLSAgLy8gVGhlIGZvbGxvd2luZyBlbnVtIGRlZmluaXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgQ29udGVudEVuY29kaW5nIGVsZW1lbnQKLSAgLy8gc3BlY2lmaWVkIGluIHRoZSBNYXRyb3NrYSBzcGVjLgotCi0gIHN0YXRpYyBjb25zdCBpbnQga09yZGVySW52YWxpZCA9IC0xOwotCi0gIGVudW0gU2NvcGUgewotICAgIGtTY29wZUludmFsaWQgPSAwLAotICAgIGtTY29wZUFsbEZyYW1lQ29udGVudHMgPSAxLAotICAgIGtTY29wZVRyYWNrUHJpdmF0ZURhdGEgPSAyLAotICAgIGtTY29wZU5leHRDb250ZW50RW5jb2RpbmdEYXRhID0gNCwKLSAgICBrU2NvcGVNYXggPSA3LAotICB9OwotCi0gIGVudW0gVHlwZSB7Ci0gICAga1R5cGVJbnZhbGlkID0gLTEsCi0gICAga1R5cGVDb21wcmVzc2lvbiA9IDAsCi0gICAga1R5cGVFbmNyeXB0aW9uID0gMSwKLSAgfTsKLQotICBlbnVtIEVuY3J5cHRpb25BbGdvIHsKLSAgICBrRW5jQWxnb0ludmFsaWQgPSAtMSwKLSAgICBrRW5jQWxnb05vdEVuY3J5cHRlZCA9IDAsCi0gICAga0VuY0FsZ29EZXMgPSAxLAotICAgIGtFbmNBbGdvM2RlcyA9IDIsCi0gICAga0VuY0FsZ29Ud29maXNoID0gMywKLSAgICBrRW5jQWxnb0Jsb3dmaXNoID0gNCwKLSAgICBrRW5jQWxnb0FlcyA9IDUsCi0gIH07Ci0KLSAgZW51bSBDaXBoZXJNb2RlIHsKLSAgICBrQ2lwaGVyTW9kZUludmFsaWQgPSAwLAotICAgIGtDaXBoZXJNb2RlQ3RyID0gMSwKLSAgfTsKLQotICBDb250ZW50RW5jb2RpbmcoKTsKLSAgfkNvbnRlbnRFbmNvZGluZygpOwotCi0gIGludDY0X3Qgb3JkZXIoKSBjb25zdCB7IHJldHVybiBvcmRlcl87IH0KLSAgdm9pZCBzZXRfb3JkZXIoaW50NjRfdCBvcmRlcikgeyBvcmRlcl8gPSBvcmRlcjsgfQotCi0gIFNjb3BlIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gc2NvcGVfOyB9Ci0gIHZvaWQgc2V0X3Njb3BlKFNjb3BlIHNjb3BlKSB7IHNjb3BlXyA9IHNjb3BlOyB9Ci0KLSAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZV87IH0KLSAgdm9pZCBzZXRfdHlwZShUeXBlIHR5cGUpIHsgdHlwZV8gPSB0eXBlOyB9Ci0KLSAgRW5jcnlwdGlvbkFsZ28gZW5jcnlwdGlvbl9hbGdvKCkgY29uc3QgeyByZXR1cm4gZW5jcnlwdGlvbl9hbGdvXzsgfQotICB2b2lkIHNldF9lbmNyeXB0aW9uX2FsZ28oRW5jcnlwdGlvbkFsZ28gZW5jcnlwdGlvbl9hbGdvKSB7Ci0gICAgZW5jcnlwdGlvbl9hbGdvXyA9IGVuY3J5cHRpb25fYWxnbzsKLSAgfQotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBlbmNyeXB0aW9uX2tleV9pZCgpIGNvbnN0IHsgcmV0dXJuIGVuY3J5cHRpb25fa2V5X2lkXzsgfQotICB2b2lkIFNldEVuY3J5cHRpb25LZXlJZChjb25zdCB1aW50OF90KiBlbmNyeXB0aW9uX2tleV9pZCwgaW50IHNpemUpOwotCi0gIENpcGhlck1vZGUgY2lwaGVyX21vZGUoKSBjb25zdCB7IHJldHVybiBjaXBoZXJfbW9kZV87IH0KLSAgdm9pZCBzZXRfY2lwaGVyX21vZGUoQ2lwaGVyTW9kZSBtb2RlKSB7IGNpcGhlcl9tb2RlXyA9IG1vZGU7IH0KLQotIHByaXZhdGU6Ci0gIGludDY0X3Qgb3JkZXJfOwotICBTY29wZSBzY29wZV87Ci0gIFR5cGUgdHlwZV87Ci0gIEVuY3J5cHRpb25BbGdvIGVuY3J5cHRpb25fYWxnb187Ci0gIHN0ZDo6c3RyaW5nIGVuY3J5cHRpb25fa2V5X2lkXzsKLSAgQ2lwaGVyTW9kZSBjaXBoZXJfbW9kZV87Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fQ09OVEVOVF9FTkNPRElOR1NfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTM4N2FkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5oIgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50OjpXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudCgKLSAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQotICAgIDogbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAotICAgICAgY29udGVudF9lbmNyeXB0aW9uX2VuY291bnRlcmVkXyhmYWxzZSksCi0gICAgICBjb250ZW50X2VuY29kaW5nc19yZWFkeV8oZmFsc2UpIHt9Ci0KLVdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50Ojp+V2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnQoKSB7fQotCi1jb25zdCBDb250ZW50RW5jb2RpbmdzJiBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudDo6Y29udGVudF9lbmNvZGluZ3MoKSBjb25zdCB7Ci0gIERDSEVDSyhjb250ZW50X2VuY29kaW5nc19yZWFkeV8pOwotICByZXR1cm4gY29udGVudF9lbmNvZGluZ3NfOwotfQotCi1XZWJNUGFyc2VyQ2xpZW50KiBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudDo6T25MaXN0U3RhcnQoaW50IGlkKSB7Ci0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY29kaW5ncykgewotICAgIERDSEVDSyghY3VyX2NvbnRlbnRfZW5jb2RpbmdfLmdldCgpKTsKLSAgICBEQ0hFQ0soIWNvbnRlbnRfZW5jcnlwdGlvbl9lbmNvdW50ZXJlZF8pOwotICAgIGNvbnRlbnRfZW5jb2RpbmdzXy5jbGVhcigpOwotICAgIGNvbnRlbnRfZW5jb2RpbmdzX3JlYWR5XyA9IGZhbHNlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jb2RpbmcpIHsKLSAgICBEQ0hFQ0soIWN1cl9jb250ZW50X2VuY29kaW5nXy5nZXQoKSk7Ci0gICAgRENIRUNLKCFjb250ZW50X2VuY3J5cHRpb25fZW5jb3VudGVyZWRfKTsKLSAgICBjdXJfY29udGVudF9lbmNvZGluZ18ucmVzZXQobmV3IENvbnRlbnRFbmNvZGluZygpKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY3J5cHRpb24pIHsKLSAgICBEQ0hFQ0soY3VyX2NvbnRlbnRfZW5jb2RpbmdfLmdldCgpKTsKLSAgICBpZiAoY29udGVudF9lbmNyeXB0aW9uX2VuY291bnRlcmVkXykgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiVW5leHBlY3RlZCBtdWx0aXBsZSBDb250ZW50RW5jcnlwdGlvbi4iOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNvbnRlbnRfZW5jcnlwdGlvbl9lbmNvdW50ZXJlZF8gPSB0cnVlOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jQUVTU2V0dGluZ3MpIHsKLSAgICBEQ0hFQ0soY3VyX2NvbnRlbnRfZW5jb2RpbmdfLmdldCgpKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaWYgV2ViTUxpc3RQYXJzZXIgaXMgd29ya2luZyBwcm9wZXJseS4KLSAgRENIRUNLKGZhbHNlKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8vIE1hbmRhdG9yeSBvY2N1cnJlbmNlIHJlc3RyaWN0aW9uIGlzIGNoZWNrZWQgaW4gdGhpcyBmdW5jdGlvbi4gTXVsdGlwbGUKLS8vIG9jY3VycmVuY2UgcmVzdHJpY3Rpb24gaXMgY2hlY2tlZCBpbiBPblVJbnQgYW5kIE9uQmluYXJ5LgotYm9vbCBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudDo6T25MaXN0RW5kKGludCBpZCkgewotICBpZiAoaWQgPT0ga1dlYk1JZENvbnRlbnRFbmNvZGluZ3MpIHsKLSAgICAvLyBDb250ZW50RW5jb2RpbmcgZWxlbWVudCBpcyBtYW5kYXRvcnkuIENoZWNrIHRoaXMhCi0gICAgaWYgKGNvbnRlbnRfZW5jb2RpbmdzXy5lbXB0eSgpKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJNaXNzaW5nIENvbnRlbnRFbmNvZGluZy4iOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBjb250ZW50X2VuY29kaW5nc19yZWFkeV8gPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jb2RpbmcpIHsKLSAgICBEQ0hFQ0soY3VyX2NvbnRlbnRfZW5jb2RpbmdfLmdldCgpKTsKLQotICAgIC8vCi0gICAgLy8gU3BlY2lmeSBkZWZhdWx0IHZhbHVlcyB0byBtaXNzaW5nIG1hbmRhdG9yeSBlbGVtZW50cy4KLSAgICAvLwotCi0gICAgaWYgKGN1cl9jb250ZW50X2VuY29kaW5nXy0+b3JkZXIoKSA9PSBDb250ZW50RW5jb2Rpbmc6OmtPcmRlckludmFsaWQpIHsKLSAgICAgIC8vIERlZmF1bHQgdmFsdWUgb2YgZW5jb2Rpbmcgb3JkZXIgaXMgMCwgd2hpY2ggc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiB0aGUKLSAgICAgIC8vIGZpcnN0IENvbnRlbnRFbmNvZGluZy4KLSAgICAgIGlmICghY29udGVudF9lbmNvZGluZ3NfLmVtcHR5KCkpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiTWlzc2luZyBDb250ZW50RW5jb2RpbmdPcmRlci4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF9vcmRlcigwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5zY29wZSgpID09IENvbnRlbnRFbmNvZGluZzo6a1Njb3BlSW52YWxpZCkKLSAgICAgIGN1cl9jb250ZW50X2VuY29kaW5nXy0+c2V0X3Njb3BlKENvbnRlbnRFbmNvZGluZzo6a1Njb3BlQWxsRnJhbWVDb250ZW50cyk7Ci0KLSAgICBpZiAoY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT50eXBlKCkgPT0gQ29udGVudEVuY29kaW5nOjprVHlwZUludmFsaWQpCi0gICAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF90eXBlKENvbnRlbnRFbmNvZGluZzo6a1R5cGVDb21wcmVzc2lvbik7Ci0KLSAgICAvLyBDaGVjayBmb3IgZWxlbWVudHMgdmFsaWQgaW4gc3BlYyBidXQgbm90IHN1cHBvcnRlZCBmb3Igbm93LgotICAgIGlmIChjdXJfY29udGVudF9lbmNvZGluZ18tPnR5cGUoKSA9PSBDb250ZW50RW5jb2Rpbmc6OmtUeXBlQ29tcHJlc3Npb24pIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIkNvbnRlbnRDb21wcmVzc2lvbiBub3Qgc3VwcG9ydGVkLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRW5mb3JjZSBtYW5kYXRvcnkgZWxlbWVudHMgd2l0aG91dCBkZWZhdWx0IHZhbHVlcy4KLSAgICBEQ0hFQ0soY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT50eXBlKCkgPT0gQ29udGVudEVuY29kaW5nOjprVHlwZUVuY3J5cHRpb24pOwotICAgIGlmICghY29udGVudF9lbmNyeXB0aW9uX2VuY291bnRlcmVkXykgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiQ29udGVudEVuY29kaW5nVHlwZSBpcyBlbmNyeXB0aW9uIGJ1dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBDb250ZW50RW5jcnlwdGlvbiBpcyBtaXNzaW5nLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29udGVudF9lbmNvZGluZ3NfLnB1c2hfYmFjaygqY3VyX2NvbnRlbnRfZW5jb2RpbmdfKTsKLSAgICBjb250ZW50X2VuY3J5cHRpb25fZW5jb3VudGVyZWRfID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAoaWQgPT0ga1dlYk1JZENvbnRlbnRFbmNyeXB0aW9uKSB7Ci0gICAgRENIRUNLKGN1cl9jb250ZW50X2VuY29kaW5nXy5nZXQoKSk7Ci0gICAgLy8gU3BlY2lmeSBkZWZhdWx0IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IGFyZSBub3QgcHJlc2VudC4KLSAgICBpZiAoY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5lbmNyeXB0aW9uX2FsZ28oKSA9PQotICAgICAgICBDb250ZW50RW5jb2Rpbmc6OmtFbmNBbGdvSW52YWxpZCkgewotICAgICAgY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5zZXRfZW5jcnlwdGlvbl9hbGdvKAotICAgICAgICAgIENvbnRlbnRFbmNvZGluZzo6a0VuY0FsZ29Ob3RFbmNyeXB0ZWQpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY0FFU1NldHRpbmdzKSB7Ci0gICAgaWYgKGN1cl9jb250ZW50X2VuY29kaW5nXy0+Y2lwaGVyX21vZGUoKSA9PQotICAgICAgICBDb250ZW50RW5jb2Rpbmc6OmtDaXBoZXJNb2RlSW52YWxpZCkKLSAgICAgIGN1cl9jb250ZW50X2VuY29kaW5nXy0+c2V0X2NpcGhlcl9tb2RlKENvbnRlbnRFbmNvZGluZzo6a0NpcGhlck1vZGVDdHIpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiBpZiBXZWJNTGlzdFBhcnNlciBpcyB3b3JraW5nIHByb3Blcmx5LgotICBEQ0hFQ0soZmFsc2UpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIE11bHRpcGxlIG9jY3VycmVuY2UgcmVzdHJpY3Rpb24gYW5kIHJhbmdlIGFyZSBjaGVja2VkIGluIHRoaXMgZnVuY3Rpb24uCi0vLyBNYW5kYXRvcnkgb2NjdXJyZW5jZSByZXN0cmljdGlvbiBpcyBjaGVja2VkIGluIE9uTGlzdEVuZC4KLWJvb2wgV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnQ6Ok9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKSB7Ci0gIERDSEVDSyhjdXJfY29udGVudF9lbmNvZGluZ18uZ2V0KCkpOwotCi0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY29kaW5nT3JkZXIpIHsKLSAgICBpZiAoY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5vcmRlcigpICE9IENvbnRlbnRFbmNvZGluZzo6a09yZGVySW52YWxpZCkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIG11bHRpcGxlIENvbnRlbnRFbmNvZGluZ09yZGVyLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbCAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb250ZW50X2VuY29kaW5nc18uc2l6ZSgpKSkgewotICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBlbmNvZGluZyBvcmRlciBzdGFydHMgd2l0aCAwIGFuZCBjb3VudHMgdXB3YXJkcy4KLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIlVuZXhwZWN0ZWQgQ29udGVudEVuY29kaW5nT3JkZXIuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF9vcmRlcih2YWwpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jb2RpbmdTY29wZSkgewotICAgIGlmIChjdXJfY29udGVudF9lbmNvZGluZ18tPnNjb3BlKCkgIT0gQ29udGVudEVuY29kaW5nOjprU2NvcGVJbnZhbGlkKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIlVuZXhwZWN0ZWQgbXVsdGlwbGUgQ29udGVudEVuY29kaW5nU2NvcGUuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsID09IENvbnRlbnRFbmNvZGluZzo6a1Njb3BlSW52YWxpZCB8fAotICAgICAgICB2YWwgPiBDb250ZW50RW5jb2Rpbmc6OmtTY29wZU1heCkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiVW5leHBlY3RlZCBDb250ZW50RW5jb2RpbmdTY29wZS4iOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICh2YWwgJiBDb250ZW50RW5jb2Rpbmc6OmtTY29wZU5leHRDb250ZW50RW5jb2RpbmdEYXRhKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJFbmNvZGVkIG5leHQgQ29udGVudEVuY29kaW5nIGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF9zY29wZShzdGF0aWNfY2FzdDxDb250ZW50RW5jb2Rpbmc6OlNjb3BlPih2YWwpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY29kaW5nVHlwZSkgewotICAgIGlmIChjdXJfY29udGVudF9lbmNvZGluZ18tPnR5cGUoKSAhPSBDb250ZW50RW5jb2Rpbmc6OmtUeXBlSW52YWxpZCkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIG11bHRpcGxlIENvbnRlbnRFbmNvZGluZ1R5cGUuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsID09IENvbnRlbnRFbmNvZGluZzo6a1R5cGVDb21wcmVzc2lvbikgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiQ29udGVudENvbXByZXNzaW9uIG5vdCBzdXBwb3J0ZWQuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodmFsICE9IENvbnRlbnRFbmNvZGluZzo6a1R5cGVFbmNyeXB0aW9uKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIlVuZXhwZWN0ZWQgQ29udGVudEVuY29kaW5nVHlwZSAiIDw8IHZhbCA8PCAiLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5zZXRfdHlwZShzdGF0aWNfY2FzdDxDb250ZW50RW5jb2Rpbmc6OlR5cGU+KHZhbCkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jQWxnbykgewotICAgIGlmIChjdXJfY29udGVudF9lbmNvZGluZ18tPmVuY3J5cHRpb25fYWxnbygpICE9Ci0gICAgICAgIENvbnRlbnRFbmNvZGluZzo6a0VuY0FsZ29JbnZhbGlkKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJVbmV4cGVjdGVkIG11bHRpcGxlIENvbnRlbnRFbmNBbGdvLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbCA8IENvbnRlbnRFbmNvZGluZzo6a0VuY0FsZ29Ob3RFbmNyeXB0ZWQgfHwKLSAgICAgICAgdmFsID4gQ29udGVudEVuY29kaW5nOjprRW5jQWxnb0FlcykgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIENvbnRlbnRFbmNBbGdvICIgPDwgdmFsIDw8ICIuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF9lbmNyeXB0aW9uX2FsZ28oCi0gICAgICAgIHN0YXRpY19jYXN0PENvbnRlbnRFbmNvZGluZzo6RW5jcnlwdGlvbkFsZ28+KHZhbCkpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRBRVNTZXR0aW5nc0NpcGhlck1vZGUpIHsKLSAgICBpZiAoY3VyX2NvbnRlbnRfZW5jb2RpbmdfLT5jaXBoZXJfbW9kZSgpICE9Ci0gICAgICAgIENvbnRlbnRFbmNvZGluZzo6a0NpcGhlck1vZGVJbnZhbGlkKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIlVuZXhwZWN0ZWQgbXVsdGlwbGUgQUVTU2V0dGluZ3NDaXBoZXJNb2RlLiI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHZhbCAhPSBDb250ZW50RW5jb2Rpbmc6OmtDaXBoZXJNb2RlQ3RyKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIlVuZXhwZWN0ZWQgQUVTU2V0dGluZ3NDaXBoZXJNb2RlICIgPDwgdmFsIDw8ICIuIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjdXJfY29udGVudF9lbmNvZGluZ18tPnNldF9jaXBoZXJfbW9kZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q29udGVudEVuY29kaW5nOjpDaXBoZXJNb2RlPih2YWwpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gaWYgV2ViTUxpc3RQYXJzZXIgaXMgd29ya2luZyBwcm9wZXJseS4KLSAgRENIRUNLKGZhbHNlKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBNdWx0aXBsZSBvY2N1cnJlbmNlIHJlc3RyaWN0aW9uIGlzIGNoZWNrZWQgaW4gdGhpcyBmdW5jdGlvbi4gIE1hbmRhdG9yeQotLy8gcmVzdHJpY3Rpb24gaXMgY2hlY2tlZCBpbiBPbkxpc3RFbmQuCi1ib29sIFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50OjpPbkJpbmFyeShpbnQgaWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSkgewotICBEQ0hFQ0soY3VyX2NvbnRlbnRfZW5jb2RpbmdfLmdldCgpKTsKLSAgRENIRUNLKGRhdGEpOwotICBEQ0hFQ0tfR1Qoc2l6ZSwgMCk7Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRDb250ZW50RW5jS2V5SUQpIHsKLSAgICBpZiAoIWN1cl9jb250ZW50X2VuY29kaW5nXy0+ZW5jcnlwdGlvbl9rZXlfaWQoKS5lbXB0eSgpKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJVbmV4cGVjdGVkIG11bHRpcGxlIENvbnRlbnRFbmNLZXlJRCI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGN1cl9jb250ZW50X2VuY29kaW5nXy0+U2V0RW5jcnlwdGlvbktleUlkKGRhdGEsIHNpemUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiBpZiBXZWJNTGlzdFBhcnNlciBpcyB3b3JraW5nIHByb3Blcmx5LgotICBEQ0hFQ0soZmFsc2UpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDQwMjhmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fQ09OVEVOVF9FTkNPRElOR1NfQ0xJRU5UX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DT05URU5UX0VOQ09ESU5HU19DTElFTlRfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi10eXBlZGVmIHN0ZDo6dmVjdG9yPENvbnRlbnRFbmNvZGluZz4gQ29udGVudEVuY29kaW5nczsKLQotLy8gUGFyc2VyIGZvciBXZWJNIENvbnRlbnRFbmNvZGluZ3MgZWxlbWVudC4KLWNsYXNzIE1FRElBX0VYUE9SVCBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudCA6IHB1YmxpYyBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50KGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOwotICB+V2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnQoKSBvdmVycmlkZTsKLQotICBjb25zdCBDb250ZW50RW5jb2RpbmdzJiBjb250ZW50X2VuY29kaW5ncygpIGNvbnN0OwotCi0gIC8vIFdlYk1QYXJzZXJDbGllbnQgbWV0aG9kcwotICBXZWJNUGFyc2VyQ2xpZW50KiBPbkxpc3RTdGFydChpbnQgaWQpIG92ZXJyaWRlOwotICBib29sIE9uTGlzdEVuZChpbnQgaWQpIG92ZXJyaWRlOwotICBib29sIE9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKSBvdmVycmlkZTsKLSAgYm9vbCBPbkJpbmFyeShpbnQgaWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50RW5jb2Rpbmc+IGN1cl9jb250ZW50X2VuY29kaW5nXzsKLSAgYm9vbCBjb250ZW50X2VuY3J5cHRpb25fZW5jb3VudGVyZWRfOwotICBDb250ZW50RW5jb2RpbmdzIGNvbnRlbnRfZW5jb2RpbmdzXzsKLQotICAvLyB8Y29udGVudF9lbmNvZGluZ3NffCBpcyByZWFkeS4gRm9yIGRlYnVnZ2luZyBwdXJwb3NlLgotICBib29sIGNvbnRlbnRfZW5jb2RpbmdzX3JlYWR5XzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnQpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NPTlRFTlRfRU5DT0RJTkdTX0NMSUVOVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF91bml0dGVzdC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnRfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZWQxNDUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50LmgiCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9wYXJzZXIuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpTdHJpY3RNb2NrOwotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIE1hdGNoZXJzIGZvciB2ZXJpZnlpbmcgY29tbW9uIG1lZGlhIGxvZyBlbnRyeSBzdHJpbmdzLgotTUFUQ0hFUihNaXNzaW5nQ29udGVudEVuY29kaW5nLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKGFyZywgIk1pc3NpbmcgQ29udGVudEVuY29kaW5nLiIpOwotfQotCi1NQVRDSEVSKFVuZXhwZWN0ZWRDb250ZW50RW5jb2RpbmdPcmRlciwgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJVbmV4cGVjdGVkIENvbnRlbnRFbmNvZGluZ09yZGVyLiIpOwotfQotCi1NQVRDSEVSKFVuZXhwZWN0ZWRDb250ZW50RW5jb2RpbmdTY29wZSwgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJVbmV4cGVjdGVkIENvbnRlbnRFbmNvZGluZ1Njb3BlLiIpOwotfQotCi1NQVRDSEVSKENvbnRlbnRDb21wcmVzc2lvbk5vdFN1cHBvcnRlZCwgIiIpIHsKLSAgcmV0dXJuIENPTlRBSU5TX1NUUklORyhhcmcsICJDb250ZW50Q29tcHJlc3Npb24gbm90IHN1cHBvcnRlZC4iKTsKLX0KLQotTUFUQ0hFUihNaXNzaW5nQ29udGVudEVuY3J5cHRpb24sICIiKSB7Ci0gIHJldHVybiBDT05UQUlOU19TVFJJTkcoCi0gICAgICBhcmcsCi0gICAgICAiQ29udGVudEVuY29kaW5nVHlwZSBpcyBlbmNyeXB0aW9uIGJ1dCBDb250ZW50RW5jcnlwdGlvbiBpcyBtaXNzaW5nLiIpOwotfQotCi1NQVRDSEVSX1AoVW5leHBlY3RlZENvbnRlbnRFbmNBbGdvLCBhbGdvLCAiIikgewotICByZXR1cm4gQ09OVEFJTlNfU1RSSU5HKAotICAgICAgYXJnLCAiVW5leHBlY3RlZCBDb250ZW50RW5jQWxnbyAiICsgYmFzZTo6SW50VG9TdHJpbmcoYWxnbykgKyAiLiIpOwotfQotCi1jbGFzcyBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudFRlc3QoKQotICAgICAgOiBtZWRpYV9sb2dfKG5ldyBTdHJpY3RNb2NrPE1vY2tNZWRpYUxvZz4oKSksCi0gICAgICAgIGNsaWVudF8obWVkaWFfbG9nXyksCi0gICAgICAgIHBhcnNlcl8oa1dlYk1JZENvbnRlbnRFbmNvZGluZ3MsICZjbGllbnRfKSB7fQotCi0gIHZvaWQgUGFyc2VBbmRFeHBlY3RUb0ZhaWwoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSkgewotICAgIGludCByZXN1bHQgPSBwYXJzZXJfLlBhcnNlKGJ1Ziwgc2l6ZSk7Ci0gICAgRVhQRUNUX0VRKC0xLCByZXN1bHQpOwotICB9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHNjb3BlZF9yZWZwdHI8U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+PiBtZWRpYV9sb2dfOwotICBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudCBjbGllbnRfOwotICBXZWJNTGlzdFBhcnNlciBwYXJzZXJfOwotfTsKLQotVEVTVF9GKFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50VGVzdCwgRW1wdHlDb250ZW50RW5jb2RpbmdzKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0NvbnRlbnRFbmNvZGluZ3NbXSA9IHsKLSAgICAgIDB4NkQsIDB4ODAsIDB4ODAsICAvLyBDb250ZW50RW5jb2RpbmdzIChzaXplID0gMCkKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0NvbnRlbnRFbmNvZGluZ3MpOwotICBFWFBFQ1RfTUVESUFfTE9HKE1pc3NpbmdDb250ZW50RW5jb2RpbmcoKSk7Ci0gIFBhcnNlQW5kRXhwZWN0VG9GYWlsKGtDb250ZW50RW5jb2RpbmdzLCBzaXplKTsKLX0KLQotVEVTVF9GKFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50VGVzdCwgRW1wdHlDb250ZW50RW5jb2RpbmcpIHsKLSAgY29uc3QgdWludDhfdCBrQ29udGVudEVuY29kaW5nc1tdID0gewotICAgICAgMHg2RCwgMHg4MCwgMHg4MywgIC8vIENvbnRlbnRFbmNvZGluZ3MgKHNpemUgPSAzKQotICAgICAgMHg2MywgMHg0MCwgMHg4MCwgIC8vICAgQ29udGVudEVuY29kaW5nIChzaXplID0gMCkKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0NvbnRlbnRFbmNvZGluZ3MpOwotICBQYXJzZUFuZEV4cGVjdFRvRmFpbChrQ29udGVudEVuY29kaW5ncywgc2l6ZSk7Ci19Ci0KLVRFU1RfRihXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudFRlc3QsIFNpbmdsZUNvbnRlbnRFbmNvZGluZykgewotICBjb25zdCB1aW50OF90IGtDb250ZW50RW5jb2RpbmdzW10gPSB7Ci0gICAgICAweDZELCAweDgwLCAweEExLCAgICAgICAgLy8gQ29udGVudEVuY29kaW5ncyAoc2l6ZSA9IDMzKQotICAgICAgMHg2MiwgMHg0MCwgMHg5ZSwgICAgICAgIC8vICAgQ29udGVudEVuY29kaW5nIChzaXplID0gMzApCi0gICAgICAweDUwLCAweDMxLCAweDgxLCAweDAwLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ09yZGVyIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzIsIDB4ODEsIDB4MDEsICAvLyAgICAgQ29udGVudEVuY29kaW5nU2NvcGUgKHNpemUgPSAxKQotICAgICAgMHg1MCwgMHgzMywgMHg4MSwgMHgwMSwgIC8vICAgICBDb250ZW50RW5jb2RpbmdUeXBlIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzUsIDB4OEYsICAgICAgICAvLyAgICAgQ29udGVudEVuY3J5cHRpb24gKHNpemUgPSAxNSkKLSAgICAgIDB4NDcsIDB4RTEsIDB4ODEsIDB4MDUsICAvLyAgICAgICBDb250ZW50RW5jQWxnbyAoc2l6ZSA9IDEpCi0gICAgICAweDQ3LCAweEUyLCAweDg4LCAgICAgICAgLy8gICAgICAgQ29udGVudEVuY0tleUlEIChzaXplID0gOCkKLSAgICAgIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtDb250ZW50RW5jb2RpbmdzKTsKLQotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy5QYXJzZShrQ29udGVudEVuY29kaW5ncywgc2l6ZSk7Ci0gIEFTU0VSVF9FUShzaXplLCByZXN1bHQpOwotICBjb25zdCBDb250ZW50RW5jb2RpbmdzJiBjb250ZW50X2VuY29kaW5ncyA9IGNsaWVudF8uY29udGVudF9lbmNvZGluZ3MoKTsKLQotICBBU1NFUlRfRVEoMXUsIGNvbnRlbnRfZW5jb2RpbmdzLnNpemUoKSk7Ci0gIEFTU0VSVF9UUlVFKGNvbnRlbnRfZW5jb2RpbmdzWzBdKTsKLSAgRVhQRUNUX0VRKDAsIGNvbnRlbnRfZW5jb2RpbmdzWzBdLT5vcmRlcigpKTsKLSAgRVhQRUNUX0VRKENvbnRlbnRFbmNvZGluZzo6a1Njb3BlQWxsRnJhbWVDb250ZW50cywKLSAgICAgICAgICAgIGNvbnRlbnRfZW5jb2RpbmdzWzBdLT5zY29wZSgpKTsKLSAgRVhQRUNUX0VRKENvbnRlbnRFbmNvZGluZzo6a1R5cGVFbmNyeXB0aW9uLCBjb250ZW50X2VuY29kaW5nc1swXS0+dHlwZSgpKTsKLSAgRVhQRUNUX0VRKENvbnRlbnRFbmNvZGluZzo6a0VuY0FsZ29BZXMsCi0gICAgICAgICAgICBjb250ZW50X2VuY29kaW5nc1swXS0+ZW5jcnlwdGlvbl9hbGdvKCkpOwotICBFWFBFQ1RfRVEoOHUsIGNvbnRlbnRfZW5jb2RpbmdzWzBdLT5lbmNyeXB0aW9uX2tleV9pZCgpLnNpemUoKSk7Ci19Ci0KLVRFU1RfRihXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudFRlc3QsIE11bHRpcGxlQ29udGVudEVuY29kaW5nKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0NvbnRlbnRFbmNvZGluZ3NbXSA9IHsKLSAgICAgIDB4NkQsIDB4ODAsIDB4QzIsICAgICAgICAvLyBDb250ZW50RW5jb2RpbmdzIChzaXplID0gNjYpCi0gICAgICAweDYyLCAweDQwLCAweDllLCAgICAgICAgLy8gICBDb250ZW50RW5jb2RpbmcgKHNpemUgPSAzMCkKLSAgICAgIDB4NTAsIDB4MzEsIDB4ODEsIDB4MDAsICAvLyAgICAgQ29udGVudEVuY29kaW5nT3JkZXIgKHNpemUgPSAxKQotICAgICAgMHg1MCwgMHgzMiwgMHg4MSwgMHgwMywgIC8vICAgICBDb250ZW50RW5jb2RpbmdTY29wZSAoc2l6ZSA9IDEpCi0gICAgICAweDUwLCAweDMzLCAweDgxLCAweDAxLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ1R5cGUgKHNpemUgPSAxKQotICAgICAgMHg1MCwgMHgzNSwgMHg4RiwgICAgICAgIC8vICAgICBDb250ZW50RW5jcnlwdGlvbiAoc2l6ZSA9IDE1KQotICAgICAgMHg0NywgMHhFMSwgMHg4MSwgMHgwNSwgIC8vICAgICAgIENvbnRlbnRFbmNBbGdvIChzaXplID0gMSkKLSAgICAgIDB4NDcsIDB4RTIsIDB4ODgsICAgICAgICAvLyAgICAgICBDb250ZW50RW5jS2V5SUQgKHNpemUgPSA4KQotICAgICAgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwgMHhBQSwKLSAgICAgIDB4NjIsIDB4NDAsIDB4OWUsICAgICAgICAvLyAgIENvbnRlbnRFbmNvZGluZyAoc2l6ZSA9IDMwKQotICAgICAgMHg1MCwgMHgzMSwgMHg4MSwgMHgwMSwgIC8vICAgICBDb250ZW50RW5jb2RpbmdPcmRlciAoc2l6ZSA9IDEpCi0gICAgICAweDUwLCAweDMyLCAweDgxLCAweDAzLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ1Njb3BlIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzMsIDB4ODEsIDB4MDEsICAvLyAgICAgQ29udGVudEVuY29kaW5nVHlwZSAoc2l6ZSA9IDEpCi0gICAgICAweDUwLCAweDM1LCAweDhGLCAgICAgICAgLy8gICAgIENvbnRlbnRFbmNyeXB0aW9uIChzaXplID0gMTUpCi0gICAgICAweDQ3LCAweEUxLCAweDgxLCAweDAxLCAgLy8gICAgICAgQ29udGVudEVuY0FsZ28gKHNpemUgPSAxKQotICAgICAgMHg0NywgMHhFMiwgMHg4OCwgICAgICAgIC8vICAgICAgIENvbnRlbnRFbmNLZXlJRCAoc2l6ZSA9IDgpCi0gICAgICAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLCAweEJCLAotICB9OwotICBpbnQgc2l6ZSA9IHNpemVvZihrQ29udGVudEVuY29kaW5ncyk7Ci0KLSAgaW50IHJlc3VsdCA9IHBhcnNlcl8uUGFyc2Uoa0NvbnRlbnRFbmNvZGluZ3MsIHNpemUpOwotICBBU1NFUlRfRVEoc2l6ZSwgcmVzdWx0KTsKLSAgY29uc3QgQ29udGVudEVuY29kaW5ncyYgY29udGVudF9lbmNvZGluZ3MgPSBjbGllbnRfLmNvbnRlbnRfZW5jb2RpbmdzKCk7Ci0gIEFTU0VSVF9FUSgydSwgY29udGVudF9lbmNvZGluZ3Muc2l6ZSgpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgIEFTU0VSVF9UUlVFKGNvbnRlbnRfZW5jb2RpbmdzW2ldKTsKLSAgICBFWFBFQ1RfRVEoaSwgY29udGVudF9lbmNvZGluZ3NbaV0tPm9yZGVyKCkpOwotICAgIEVYUEVDVF9FUShDb250ZW50RW5jb2Rpbmc6OmtTY29wZUFsbEZyYW1lQ29udGVudHMgfAotICAgICAgICAgICAgICAgICAgQ29udGVudEVuY29kaW5nOjprU2NvcGVUcmFja1ByaXZhdGVEYXRhLAotICAgICAgICAgICAgICBjb250ZW50X2VuY29kaW5nc1tpXS0+c2NvcGUoKSk7Ci0gICAgRVhQRUNUX0VRKENvbnRlbnRFbmNvZGluZzo6a1R5cGVFbmNyeXB0aW9uLCBjb250ZW50X2VuY29kaW5nc1tpXS0+dHlwZSgpKTsKLSAgICBFWFBFQ1RfRVEoIWkgPyBDb250ZW50RW5jb2Rpbmc6OmtFbmNBbGdvQWVzIDogQ29udGVudEVuY29kaW5nOjprRW5jQWxnb0RlcywKLSAgICAgICAgICAgICAgY29udGVudF9lbmNvZGluZ3NbaV0tPmVuY3J5cHRpb25fYWxnbygpKTsKLSAgICBFWFBFQ1RfRVEoOHUsIGNvbnRlbnRfZW5jb2RpbmdzW2ldLT5lbmNyeXB0aW9uX2tleV9pZCgpLnNpemUoKSk7Ci0gIH0KLX0KLQotVEVTVF9GKFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50VGVzdCwgRGVmYXVsdFZhbHVlcykgewotICBjb25zdCB1aW50OF90IGtDb250ZW50RW5jb2RpbmdzW10gPSB7Ci0gICAgICAweDZELCAweDgwLCAweDhBLCAgICAgICAgLy8gQ29udGVudEVuY29kaW5ncyAoc2l6ZSA9IDEwKQotICAgICAgMHg2MiwgMHg0MCwgMHg4NywgICAgICAgIC8vICAgQ29udGVudEVuY29kaW5nIChzaXplID0gNykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgQ29udGVudEVuY29kaW5nT3JkZXIgbWlzc2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBDb250ZW50RW5jb2RpbmdTY29wZSBtaXNzaW5nCi0gICAgICAweDUwLCAweDMzLCAweDgxLCAweDAxLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ1R5cGUgKHNpemUgPSAxKQotICAgICAgMHg1MCwgMHgzNSwgMHg4MCwgICAgICAgIC8vICAgICBDb250ZW50RW5jcnlwdGlvbiAoc2l6ZSA9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIENvbnRlbnRFbmNBbGdvIG1pc3NpbmcKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0NvbnRlbnRFbmNvZGluZ3MpOwotCi0gIGludCByZXN1bHQgPSBwYXJzZXJfLlBhcnNlKGtDb250ZW50RW5jb2RpbmdzLCBzaXplKTsKLSAgQVNTRVJUX0VRKHNpemUsIHJlc3VsdCk7Ci0gIGNvbnN0IENvbnRlbnRFbmNvZGluZ3MmIGNvbnRlbnRfZW5jb2RpbmdzID0gY2xpZW50Xy5jb250ZW50X2VuY29kaW5ncygpOwotCi0gIEFTU0VSVF9FUSgxdSwgY29udGVudF9lbmNvZGluZ3Muc2l6ZSgpKTsKLSAgQVNTRVJUX1RSVUUoY29udGVudF9lbmNvZGluZ3NbMF0pOwotICBFWFBFQ1RfRVEoMCwgY29udGVudF9lbmNvZGluZ3NbMF0tPm9yZGVyKCkpOwotICBFWFBFQ1RfRVEoQ29udGVudEVuY29kaW5nOjprU2NvcGVBbGxGcmFtZUNvbnRlbnRzLAotICAgICAgICAgICAgY29udGVudF9lbmNvZGluZ3NbMF0tPnNjb3BlKCkpOwotICBFWFBFQ1RfRVEoQ29udGVudEVuY29kaW5nOjprVHlwZUVuY3J5cHRpb24sIGNvbnRlbnRfZW5jb2RpbmdzWzBdLT50eXBlKCkpOwotICBFWFBFQ1RfRVEoQ29udGVudEVuY29kaW5nOjprRW5jQWxnb05vdEVuY3J5cHRlZCwKLSAgICAgICAgICAgIGNvbnRlbnRfZW5jb2RpbmdzWzBdLT5lbmNyeXB0aW9uX2FsZ28oKSk7Ci0gIEVYUEVDVF9UUlVFKGNvbnRlbnRfZW5jb2RpbmdzWzBdLT5lbmNyeXB0aW9uX2tleV9pZCgpLmVtcHR5KCkpOwotfQotCi1URVNUX0YoV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnRUZXN0LCBDb250ZW50RW5jb2RpbmdzQ2xpZW50UmV1c2UpIHsKLSAgY29uc3QgdWludDhfdCBrQ29udGVudEVuY29kaW5nc1tdID0gewotICAgICAgMHg2RCwgMHg4MCwgMHhBMSwgICAgICAgIC8vIENvbnRlbnRFbmNvZGluZ3MgKHNpemUgPSAzMykKLSAgICAgIDB4NjIsIDB4NDAsIDB4OWUsICAgICAgICAvLyAgIENvbnRlbnRFbmNvZGluZyAoc2l6ZSA9IDMwKQotICAgICAgMHg1MCwgMHgzMSwgMHg4MSwgMHgwMCwgIC8vICAgICBDb250ZW50RW5jb2RpbmdPcmRlciAoc2l6ZSA9IDEpCi0gICAgICAweDUwLCAweDMyLCAweDgxLCAweDAxLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ1Njb3BlIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzMsIDB4ODEsIDB4MDEsICAvLyAgICAgQ29udGVudEVuY29kaW5nVHlwZSAoc2l6ZSA9IDEpCi0gICAgICAweDUwLCAweDM1LCAweDhGLCAgICAgICAgLy8gICAgIENvbnRlbnRFbmNyeXB0aW9uIChzaXplID0gMTUpCi0gICAgICAweDQ3LCAweEUxLCAweDgxLCAweDA1LCAgLy8gICAgICAgQ29udGVudEVuY0FsZ28gKHNpemUgPSAxKQotICAgICAgMHg0NywgMHhFMiwgMHg4OCwgICAgICAgIC8vICAgICAgIENvbnRlbnRFbmNLZXlJRCAoc2l6ZSA9IDgpCi0gICAgICAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLCAweEFBLAotICB9OwotICBpbnQgc2l6ZSA9IHNpemVvZihrQ29udGVudEVuY29kaW5ncyk7Ci0KLSAgLy8gUGFyc2UgZm9yIHRoZSBmaXJzdCB0aW1lLgotICBpbnQgcmVzdWx0ID0gcGFyc2VyXy5QYXJzZShrQ29udGVudEVuY29kaW5ncywgc2l6ZSk7Ci0gIEFTU0VSVF9FUShzaXplLCByZXN1bHQpOwotCi0gIC8vIFBhcnNlIGFnYWluLgotICBwYXJzZXJfLlJlc2V0KCk7Ci0gIHJlc3VsdCA9IHBhcnNlcl8uUGFyc2Uoa0NvbnRlbnRFbmNvZGluZ3MsIHNpemUpOwotICBBU1NFUlRfRVEoc2l6ZSwgcmVzdWx0KTsKLSAgY29uc3QgQ29udGVudEVuY29kaW5ncyYgY29udGVudF9lbmNvZGluZ3MgPSBjbGllbnRfLmNvbnRlbnRfZW5jb2RpbmdzKCk7Ci0KLSAgQVNTRVJUX0VRKDF1LCBjb250ZW50X2VuY29kaW5ncy5zaXplKCkpOwotICBBU1NFUlRfVFJVRShjb250ZW50X2VuY29kaW5nc1swXSk7Ci0gIEVYUEVDVF9FUSgwLCBjb250ZW50X2VuY29kaW5nc1swXS0+b3JkZXIoKSk7Ci0gIEVYUEVDVF9FUShDb250ZW50RW5jb2Rpbmc6OmtTY29wZUFsbEZyYW1lQ29udGVudHMsCi0gICAgICAgICAgICBjb250ZW50X2VuY29kaW5nc1swXS0+c2NvcGUoKSk7Ci0gIEVYUEVDVF9FUShDb250ZW50RW5jb2Rpbmc6OmtUeXBlRW5jcnlwdGlvbiwgY29udGVudF9lbmNvZGluZ3NbMF0tPnR5cGUoKSk7Ci0gIEVYUEVDVF9FUShDb250ZW50RW5jb2Rpbmc6OmtFbmNBbGdvQWVzLAotICAgICAgICAgICAgY29udGVudF9lbmNvZGluZ3NbMF0tPmVuY3J5cHRpb25fYWxnbygpKTsKLSAgRVhQRUNUX0VRKDh1LCBjb250ZW50X2VuY29kaW5nc1swXS0+ZW5jcnlwdGlvbl9rZXlfaWQoKS5zaXplKCkpOwotfQotCi1URVNUX0YoV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnRUZXN0LCBJbnZhbGlkQ29udGVudEVuY29kaW5nT3JkZXIpIHsKLSAgY29uc3QgdWludDhfdCBrQ29udGVudEVuY29kaW5nc1tdID0gewotICAgICAgMHg2RCwgMHg4MCwgMHg4RSwgICAgICAgIC8vIENvbnRlbnRFbmNvZGluZ3MgKHNpemUgPSAxNCkKLSAgICAgIDB4NjIsIDB4NDAsIDB4OEIsICAgICAgICAvLyAgIENvbnRlbnRFbmNvZGluZyAoc2l6ZSA9IDExKQotICAgICAgMHg1MCwgMHgzMSwgMHg4MSwgMHhFRSwgIC8vICAgICBDb250ZW50RW5jb2RpbmdPcmRlciAoc2l6ZSA9IDEpLCBpbnZhbGlkCi0gICAgICAweDUwLCAweDMzLCAweDgxLCAweDAxLCAgLy8gICAgIENvbnRlbnRFbmNvZGluZ1R5cGUgKHNpemUgPSAxKQotICAgICAgMHg1MCwgMHgzNSwgMHg4MCwgICAgICAgIC8vICAgICBDb250ZW50RW5jcnlwdGlvbiAoc2l6ZSA9IDApCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtDb250ZW50RW5jb2RpbmdzKTsKLSAgRVhQRUNUX01FRElBX0xPRyhVbmV4cGVjdGVkQ29udGVudEVuY29kaW5nT3JkZXIoKSk7Ci0gIFBhcnNlQW5kRXhwZWN0VG9GYWlsKGtDb250ZW50RW5jb2RpbmdzLCBzaXplKTsKLX0KLQotVEVTVF9GKFdlYk1Db250ZW50RW5jb2RpbmdzQ2xpZW50VGVzdCwgSW52YWxpZENvbnRlbnRFbmNvZGluZ1Njb3BlKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0NvbnRlbnRFbmNvZGluZ3NbXSA9IHsKLSAgICAgIDB4NkQsIDB4ODAsIDB4OEUsICAgICAgICAvLyBDb250ZW50RW5jb2RpbmdzIChzaXplID0gMTQpCi0gICAgICAweDYyLCAweDQwLCAweDhCLCAgICAgICAgLy8gICBDb250ZW50RW5jb2RpbmcgKHNpemUgPSAxMSkKLSAgICAgIDB4NTAsIDB4MzIsIDB4ODEsIDB4RUUsICAvLyAgICAgQ29udGVudEVuY29kaW5nU2NvcGUgKHNpemUgPSAxKSwgaW52YWxpZAotICAgICAgMHg1MCwgMHgzMywgMHg4MSwgMHgwMSwgIC8vICAgICBDb250ZW50RW5jb2RpbmdUeXBlIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzUsIDB4ODAsICAgICAgICAvLyAgICAgQ29udGVudEVuY3J5cHRpb24gKHNpemUgPSAwKQotICB9OwotICBpbnQgc2l6ZSA9IHNpemVvZihrQ29udGVudEVuY29kaW5ncyk7Ci0gIEVYUEVDVF9NRURJQV9MT0coVW5leHBlY3RlZENvbnRlbnRFbmNvZGluZ1Njb3BlKCkpOwotICBQYXJzZUFuZEV4cGVjdFRvRmFpbChrQ29udGVudEVuY29kaW5ncywgc2l6ZSk7Ci19Ci0KLVRFU1RfRihXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudFRlc3QsIEludmFsaWRDb250ZW50RW5jb2RpbmdUeXBlKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0NvbnRlbnRFbmNvZGluZ3NbXSA9IHsKLSAgICAgIDB4NkQsIDB4ODAsIDB4OEUsICAgICAgICAvLyBDb250ZW50RW5jb2RpbmdzIChzaXplID0gMTQpCi0gICAgICAweDYyLCAweDQwLCAweDhCLCAgICAgICAgLy8gICBDb250ZW50RW5jb2RpbmcgKHNpemUgPSAxMSkKLSAgICAgIDB4NTAsIDB4MzMsIDB4ODEsIDB4MDAsICAvLyAgICAgQ29udGVudEVuY29kaW5nVHlwZSAoc2l6ZSA9IDEpLCBpbnZhbGlkCi0gICAgICAweDUwLCAweDM1LCAweDgwLCAgICAgICAgLy8gICAgIENvbnRlbnRFbmNyeXB0aW9uIChzaXplID0gMCkKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0NvbnRlbnRFbmNvZGluZ3MpOwotICBFWFBFQ1RfTUVESUFfTE9HKENvbnRlbnRDb21wcmVzc2lvbk5vdFN1cHBvcnRlZCgpKTsKLSAgUGFyc2VBbmRFeHBlY3RUb0ZhaWwoa0NvbnRlbnRFbmNvZGluZ3MsIHNpemUpOwotfQotCi0vLyBDb250ZW50RW5jb2RpbmdUeXBlIGlzIGVuY3J5cHRpb24gYnV0IG5vIENvbnRlbnRFbmNyeXB0aW9uIHByZXNlbnQuCi1URVNUX0YoV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnRUZXN0LCBNaXNzaW5nQ29udGVudEVuY3J5cHRpb24pIHsKLSAgY29uc3QgdWludDhfdCBrQ29udGVudEVuY29kaW5nc1tdID0gewotICAgICAgMHg2RCwgMHg4MCwgMHg4NywgICAgICAgIC8vIENvbnRlbnRFbmNvZGluZ3MgKHNpemUgPSA3KQotICAgICAgMHg2MiwgMHg0MCwgMHg4NCwgICAgICAgIC8vICAgQ29udGVudEVuY29kaW5nIChzaXplID0gNCkKLSAgICAgIDB4NTAsIDB4MzMsIDB4ODEsIDB4MDEsICAvLyAgICAgQ29udGVudEVuY29kaW5nVHlwZSAoc2l6ZSA9IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIENvbnRlbnRFbmNyeXB0aW9uIG1pc3NpbmcKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0NvbnRlbnRFbmNvZGluZ3MpOwotICBFWFBFQ1RfTUVESUFfTE9HKE1pc3NpbmdDb250ZW50RW5jcnlwdGlvbigpKTsKLSAgUGFyc2VBbmRFeHBlY3RUb0ZhaWwoa0NvbnRlbnRFbmNvZGluZ3MsIHNpemUpOwotfQotCi1URVNUX0YoV2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnRUZXN0LCBJbnZhbGlkQ29udGVudEVuY0FsZ28pIHsKLSAgY29uc3QgdWludDhfdCBrQ29udGVudEVuY29kaW5nc1tdID0gewotICAgICAgMHg2RCwgMHg4MCwgMHg5OSwgICAgICAgIC8vIENvbnRlbnRFbmNvZGluZ3MgKHNpemUgPSAyNSkKLSAgICAgIDB4NjIsIDB4NDAsIDB4OTYsICAgICAgICAvLyAgIENvbnRlbnRFbmNvZGluZyAoc2l6ZSA9IDIyKQotICAgICAgMHg1MCwgMHgzMywgMHg4MSwgMHgwMSwgIC8vICAgICBDb250ZW50RW5jb2RpbmdUeXBlIChzaXplID0gMSkKLSAgICAgIDB4NTAsIDB4MzUsIDB4OEYsICAgICAgICAvLyAgICAgQ29udGVudEVuY3J5cHRpb24gKHNpemUgPSAxNSkKLSAgICAgIDB4NDcsIDB4RTEsIDB4ODEsIDB4RUUsICAvLyAgICAgICBDb250ZW50RW5jQWxnbyAoc2l6ZSA9IDEpLCBpbnZhbGlkCi0gICAgICAweDQ3LCAweEUyLCAweDg4LCAgICAgICAgLy8gICAgICAgQ29udGVudEVuY0tleUlEIChzaXplID0gOCkKLSAgICAgIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsIDB4QUEsCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtDb250ZW50RW5jb2RpbmdzKTsKLSAgRVhQRUNUX01FRElBX0xPRyhVbmV4cGVjdGVkQ29udGVudEVuY0FsZ28oMHhFRSkpOwotICBQYXJzZUFuZEV4cGVjdFRvRmFpbChrQ29udGVudEVuY29kaW5ncywgc2l6ZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODVhZWM1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jcnlwdG9faGVscGVycy5jYworKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnMuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAiYmFzZS9zeXNfYnl0ZW9yZGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjcnlwdF9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSB7Ci0KLS8vIEdlbmVyYXRlcyBhIDE2IGJ5dGUgQ1RSIGNvdW50ZXIgYmxvY2suIFRoZSBDVFIgY291bnRlciBibG9jayBmb3JtYXQgaXMgYQotLy8gQ1RSIElWIGFwcGVuZGVkIHdpdGggYSBDVFIgYmxvY2sgY291bnRlci4gfGl2fCBpcyBhbiA4IGJ5dGUgQ1RSIElWLgotLy8gfGl2X3NpemV8IGlzIHRoZSBzaXplIG9mIHxpdnwgaW4gYnR5ZXMuIFJldHVybnMgYSBzdHJpbmcgb2YKLS8vIGtEZWNyeXB0aW9uS2V5U2l6ZSBieXRlcy4KLXN0ZDo6c3RyaW5nIEdlbmVyYXRlV2ViTUNvdW50ZXJCbG9jayhjb25zdCB1aW50OF90KiBpdiwgaW50IGl2X3NpemUpIHsKLSAgc3RkOjpzdHJpbmcgY291bnRlcl9ibG9jayhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpdiksIGl2X3NpemUpOwotICBjb3VudGVyX2Jsb2NrLmFwcGVuZChEZWNyeXB0Q29uZmlnOjprRGVjcnlwdGlvbktleVNpemUgLSBpdl9zaXplLCAwKTsKLSAgcmV0dXJuIGNvdW50ZXJfYmxvY2s7Ci19Ci0KLXVpbnQzMl90IFJlYWRJbnRlZ2VyKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgLy8gUmVhZCBpbiB0aGUgYmlnLWVuZGlhbiBpbnRlZ2VyLgotICB1aW50MzJfdCB2YWx1ZSA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSB8IGJ1ZltpXTsKLSAgcmV0dXJuIHZhbHVlOwotfQotCi1ib29sIEV4dHJhY3RTdWJzYW1wbGVzKGNvbnN0IHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IGZyYW1lX2RhdGFfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bV9wYXJ0aXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxTdWJzYW1wbGVFbnRyeT4qIHN1YnNhbXBsZV9lbnRyaWVzKSB7Ci0gIHN1YnNhbXBsZV9lbnRyaWVzLT5jbGVhcigpOwotICB1aW50MzJfdCBjbGVhcl9ieXRlcyA9IDA7Ci0gIC8vIFBhcnRpdGlvbiBpcyB0aGUgd2FsbCBiZXR3ZWVuIGFsdGVybmF0aW5nIHNlY3Rpb25zLiBQYXJ0aXRpb24gb2Zmc2V0cyBhcmUKLSAgLy8gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBhY3R1YWwgZnJhbWUgZGF0YS4KLSAgLy8gU2l6ZSBvZiBjbGVhci9jaXBoZXIgc2VjdGlvbnMgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi0gIC8vIGFkamFjZW50IHBhcnRpdGlvbiBvZmZzZXRzLgotICAvLyBIZXJlIGlzIGFuIGV4YW1wbGUgd2l0aCA0IHBhcnRpdGlvbnMgKDUgc2VjdGlvbnMpOgotICAvLyAgICJjbGVhciB8MSBjaXBoZXIgfDIgY2xlYXIgfDMgY2lwaGVyIHw0IGNsZWFyIgotICAvLyBXaXRoIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgaW1wbGljaXQgcGFydGl0aW9uIGluY2x1ZGVkOgotICAvLyAgICJ8MCBjbGVhciB8MSBjaXBoZXIgfDIgY2xlYXIgfDMgY2lwaGVyIHw0IGNsZWFyIHw1IgotICAvLyAgIHdoZXJlIHBhcnRpdGlvbl9vZmZzZXRfMCA9IDAsIHBhcnRpdGlvbl9vZmZzZXRfNSA9IGZyYW1lX2RhdGFfc2l6ZQotICAvLyBUaGVyZSBhcmUgdGhyZWUgc3Vic2FtcGxlcyBpbiB0aGUgYWJvdmUgZXhhbXBsZToKLSAgLy8gICBTdWJzYW1wbGUwLmNsZWFyX2J5dGVzID0gcGFydGl0aW9uX29mZnNldF8xIC0gcGFydGl0aW9uX29mZnNldF8wCi0gIC8vICAgU3Vic2FtcGxlMC5jaXBoZXJfYnl0ZXMgPSBwYXJ0aXRpb25fb2Zmc2V0XzIgLSBwYXJ0aXRpb25fb2Zmc2V0XzEKLSAgLy8gICAuLi4KLSAgLy8gICBTdWJzYW1wbGUyLmNsZWFyX2J5dGVzID0gcGFydGl0aW9uX29mZnNldF81IC0gcGFydGl0aW9uX29mZnNldF80Ci0gIC8vICAgU3Vic2FtcGxlMi5jaXBoZXJfYnl0ZXMgPSAwCi0gIHVpbnQzMl90IHBhcnRpdGlvbl9vZmZzZXQgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMCwgb2Zmc2V0ID0gMDsgaSA8PSBudW1fcGFydGl0aW9uczsgKytpKSB7Ci0gICAgY29uc3QgdWludDMyX3QgcHJldl9wYXJ0aXRpb25fb2Zmc2V0ID0gcGFydGl0aW9uX29mZnNldDsKLSAgICBwYXJ0aXRpb25fb2Zmc2V0ID0KLSAgICAgICAgKGkgPT0gbnVtX3BhcnRpdGlvbnMpCi0gICAgICAgICAgICA/IGZyYW1lX2RhdGFfc2l6ZQotICAgICAgICAgICAgOiBSZWFkSW50ZWdlcihidWYgKyBvZmZzZXQsIGtXZWJNRW5jcnlwdGVkRnJhbWVQYXJ0aXRpb25PZmZzZXRTaXplKTsKLSAgICBvZmZzZXQgKz0ga1dlYk1FbmNyeXB0ZWRGcmFtZVBhcnRpdGlvbk9mZnNldFNpemU7Ci0gICAgaWYgKHBhcnRpdGlvbl9vZmZzZXQgPCBwcmV2X3BhcnRpdGlvbl9vZmZzZXQpIHsKLSAgICAgIERWTE9HKDEpIDw8ICJQYXJ0aXRpb24gc2hvdWxkIG5vdCBiZSBkZWNyZWFzaW5nICIgPDwgcHJldl9wYXJ0aXRpb25fb2Zmc2V0Ci0gICAgICAgICAgICAgICA8PCAiICIgPDwgcGFydGl0aW9uX29mZnNldDsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBjaXBoZXJfYnl0ZXMgPSAwOwotICAgIGJvb2wgbmV3X3N1YnNhbXBsZV9lbnRyeSA9IGZhbHNlOwotICAgIC8vIEFsdGVybmF0aW5nIGNsZWFyIGFuZCBjaXBoZXIgc2VjdGlvbnMuCi0gICAgaWYgKChpICUgMikgPT0gMCkgewotICAgICAgY2xlYXJfYnl0ZXMgPSBwYXJ0aXRpb25fb2Zmc2V0IC0gcHJldl9wYXJ0aXRpb25fb2Zmc2V0OwotICAgICAgLy8gR2VuZXJhdGUgYSBuZXcgc3Vic2FtcGxlIHdoZW4gZmluaXNoaW5nIHJlYWRpbmcgcGFydGl0aW9uIG9mZnNldHMuCi0gICAgICBuZXdfc3Vic2FtcGxlX2VudHJ5ID0gaSA9PSBudW1fcGFydGl0aW9uczsKLSAgICB9IGVsc2UgewotICAgICAgY2lwaGVyX2J5dGVzID0gcGFydGl0aW9uX29mZnNldCAtIHByZXZfcGFydGl0aW9uX29mZnNldDsKLSAgICAgIC8vIEdlbmVyYXRlIGEgbmV3IHN1YnNhbXBsZSBhZnRlciBzZWVpbmcgYSBjaXBoZXIgc2VjdGlvbi4KLSAgICAgIG5ld19zdWJzYW1wbGVfZW50cnkgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChuZXdfc3Vic2FtcGxlX2VudHJ5KSB7Ci0gICAgICBpZiAoY2xlYXJfYnl0ZXMgPT0gMCAmJiBjaXBoZXJfYnl0ZXMgPT0gMCkgewotICAgICAgICBEVkxPRygxKSA8PCAiTm90IGV4cGVjdGluZyA+MiBwYXJ0aXRpb25zIHdpdGggdGhlIHNhbWUgb2Zmc2V0cy4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBzdWJzYW1wbGVfZW50cmllcy0+cHVzaF9iYWNrKFN1YnNhbXBsZUVudHJ5KGNsZWFyX2J5dGVzLCBjaXBoZXJfYnl0ZXMpKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1ib29sIFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleV9pZCwgaW50IGtleV9pZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4qIGRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRhdGFfb2Zmc2V0KSB7Ci0gIGlmIChkYXRhX3NpemUgPCBrV2ViTVNpZ25hbEJ5dGVTaXplKSB7Ci0gICAgRFZMT0coMSkgPDwgIkdvdCBhIGJsb2NrIGZyb20gYW4gZW5jcnlwdGVkIHN0cmVhbSB3aXRoIG5vIGRhdGEuIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBjb25zdCB1aW50OF90IHNpZ25hbF9ieXRlID0gZGF0YVswXTsKLSAgaW50IGZyYW1lX29mZnNldCA9IHNpemVvZihzaWduYWxfYnl0ZSk7Ci0KLSAgc3RkOjpzdHJpbmcgY291bnRlcl9ibG9jazsKLSAgc3RkOjp2ZWN0b3I8U3Vic2FtcGxlRW50cnk+IHN1YnNhbXBsZV9lbnRyaWVzOwotCi0gIGlmIChzaWduYWxfYnl0ZSAmIGtXZWJNRmxhZ0VuY3J5cHRlZEZyYW1lKSB7Ci0gICAgaWYgKGRhdGFfc2l6ZSA8IGtXZWJNU2lnbmFsQnl0ZVNpemUgKyBrV2ViTUl2U2l6ZSkgewotICAgICAgRFZMT0coMSkgPDwgIkdvdCBhbiBlbmNyeXB0ZWQgYmxvY2sgd2l0aCBub3QgZW5vdWdoIGRhdGEgIiA8PCBkYXRhX3NpemU7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvdW50ZXJfYmxvY2sgPSBHZW5lcmF0ZVdlYk1Db3VudGVyQmxvY2soZGF0YSArIGZyYW1lX29mZnNldCwga1dlYk1JdlNpemUpOwotICAgIGZyYW1lX29mZnNldCArPSBrV2ViTUl2U2l6ZTsKLQotICAgIGlmIChzaWduYWxfYnl0ZSAmIGtXZWJNRmxhZ0VuY3J5cHRlZEZyYW1lUGFydGl0aW9uZWQpIHsKLSAgICAgIGlmIChkYXRhX3NpemUgPCBmcmFtZV9vZmZzZXQgKyBrV2ViTUVuY3J5cHRlZEZyYW1lTnVtUGFydGl0aW9uc1NpemUpIHsKLSAgICAgICAgRFZMT0coMSkgPDwgIkdvdCBhIHBhcnRpdGlvbmVkIGVuY3J5cHRlZCBibG9jayB3aXRoIG5vdCBlbm91Z2ggZGF0YSAiCi0gICAgICAgICAgICAgICAgIDw8IGRhdGFfc2l6ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBjb25zdCBzaXplX3QgbnVtX3BhcnRpdGlvbnMgPSBkYXRhW2ZyYW1lX29mZnNldF07Ci0gICAgICBpZiAobnVtX3BhcnRpdGlvbnMgPT0gMCkgewotICAgICAgICBEVkxPRygxKSA8PCAiR290IGEgcGFydGl0aW9uZWQgZW5jcnlwdGVkIGJsb2NrIHdpdGggMCBwYXJ0aXRpb25zLiI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZyYW1lX29mZnNldCArPSBrV2ViTUVuY3J5cHRlZEZyYW1lTnVtUGFydGl0aW9uc1NpemU7Ci0gICAgICBjb25zdCB1aW50OF90KiBwYXJ0aXRpb25fZGF0YV9zdGFydCA9IGRhdGEgKyBmcmFtZV9vZmZzZXQ7Ci0gICAgICBmcmFtZV9vZmZzZXQgKz0ga1dlYk1FbmNyeXB0ZWRGcmFtZVBhcnRpdGlvbk9mZnNldFNpemUgKiBudW1fcGFydGl0aW9uczsKLSAgICAgIGlmIChkYXRhX3NpemUgPD0gZnJhbWVfb2Zmc2V0KSB7Ci0gICAgICAgIERWTE9HKDEpIDw8ICJHb3QgYSBwYXJ0aXRpb25lZCBlbmNyeXB0ZWQgYmxvY2sgd2l0aCAiIDw8IG51bV9wYXJ0aXRpb25zCi0gICAgICAgICAgICAgICAgIDw8ICIgcGFydGl0aW9ucyBidXQgbm90IGVub3VnaCBkYXRhICIgPDwgZGF0YV9zaXplOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBjb25zdCBzaXplX3QgZnJhbWVfZGF0YV9zaXplID0gZGF0YV9zaXplIC0gZnJhbWVfb2Zmc2V0OwotICAgICAgaWYgKCFFeHRyYWN0U3Vic2FtcGxlcyhwYXJ0aXRpb25fZGF0YV9zdGFydCwgZnJhbWVfZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcGFydGl0aW9ucywgJnN1YnNhbXBsZV9lbnRyaWVzKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKGNvdW50ZXJfYmxvY2suZW1wdHkoKSkgewotICAgIC8vIElmIHRoZSBmcmFtZSBpcyB1bmVuY3J5cHRlZCB0aGUgRGVjcnlwdENvbmZpZyBvYmplY3Qgc2hvdWxkIGJlIE5VTEwuCi0gICAgZGVjcnlwdF9jb25maWctPnJlc2V0KCk7Ci0gIH0gZWxzZSB7Ci0gICAgKmRlY3J5cHRfY29uZmlnID0gRGVjcnlwdENvbmZpZzo6Q3JlYXRlQ2VuY0NvbmZpZygKLSAgICAgICAgc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oa2V5X2lkKSwga2V5X2lkX3NpemUpLAotICAgICAgICBjb3VudGVyX2Jsb2NrLCBzdWJzYW1wbGVfZW50cmllcyk7Ci0gIH0KLSAgKmRhdGFfb2Zmc2V0ID0gZnJhbWVfb2Zmc2V0OwotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jcnlwdG9faGVscGVycy5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2YjRlZTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpZm5kZWYgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NSWVBUT19IRUxQRVJTX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9DUllQVE9fSEVMUEVSU19IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBGaWxscyB8ZGVjcnlwdF9jb25maWd8LCB3aGljaCBjYW4gYmUgc2VudCB0byB0aGUgRGVjcnlwdG9yIGlmIHRoZSBzdHJlYW0KLS8vIGhhcyBwb3RlbnRpYWxseSBlbmNyeXB0ZWQgZnJhbWVzLiBBbHNvIHNldHMgfGRhdGFfb2Zmc2V0fCB3aGljaCBpbmRpY2F0ZXMKLS8vIHdoZXJlIHRoZSBlbmNyeXB0ZWQgZGF0YSBzdGFydHMuIElmIHRoZSBmcmFtZSBpcyB1bmVuY3J5cHRlZAotLy8gfCpkZWNyeXB0X2NvbmZpZ3wgd2lsbCBiZSBudWxsLiBSZXR1cm5zIHRydWUgaWYgfGRhdGF8IGlzIHZhbGlkLCBmYWxzZQotLy8gb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHxkZWNyeXB0X2NvbmZpZ3wgYW5kIHxkYXRhX29mZnNldHwgd2lsbCBub3QgYmUKLS8vIGNoYW5nZWQuIEN1cnJlbnQgZW5jcnlwdGVkIFdlYk0gcmVxdWVzdCBmb3IgY29tbWVudHMgc3BlY2lmaWNhdGlvbiBpcyBoZXJlCi0vLyBodHRwOi8vd2lraS53ZWJtcHJvamVjdC5vcmcvZW5jcnlwdGlvbi93ZWJtLWVuY3J5cHRpb24tcmZjCi1ib29sIE1FRElBX0VYUE9SVCBXZWJNQ3JlYXRlRGVjcnlwdENvbmZpZygKLSAgICBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgZGF0YV9zaXplLCBjb25zdCB1aW50OF90KiBrZXlfaWQsIGludCBrZXlfaWRfc2l6ZSwKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4qIGRlY3J5cHRfY29uZmlnLCBpbnQqIGRhdGFfb2Zmc2V0KTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0NSWVBUT19IRUxQRVJTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnNfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnNfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjZiYTcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NyeXB0b19oZWxwZXJzX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jcnlwdG9faGVscGVycy5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6OkVsZW1lbnRzQXJlOwotCi1uYW1lc3BhY2UgewotCi1jb25zdCB1aW50OF90IGtLZXlJZFtdID0gezB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDh9OwotCi19ICAvLyBuYW1lc3BhY2UKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN1YnNhbXBsZUVudHJ5JiBsaHMsIGNvbnN0IFN1YnNhbXBsZUVudHJ5JiByaHMpIHsKLSAgcmV0dXJuIGxocy5jbGVhcl9ieXRlcyA9PSByaHMuY2xlYXJfYnl0ZXMgJiYKLSAgICAgICAgIGxocy5jeXBoZXJfYnl0ZXMgPT0gcmhzLmN5cGhlcl9ieXRlczsKLX0KLQotVEVTVChXZWJNQ3J5cHRvSGVscGVyc1Rlc3QsIEVtcHR5RGF0YSkgewotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX0ZBTFNFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKE5VTEwsIDAsIGtLZXlJZCwgc2l6ZW9mKGtLZXlJZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVjcnlwdF9jb25maWcsICZkYXRhX29mZnNldCkpOwotfQotCi1URVNUKFdlYk1DcnlwdG9IZWxwZXJzVGVzdCwgQ2xlYXJEYXRhKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsweDAwLCAweDBkLCAweDBhLCAweDBkLCAweDBhfTsKLSAgc3RkOjp1bmlxdWVfcHRyPERlY3J5cHRDb25maWc+IGRlY3J5cHRfY29uZmlnOwotICBpbnQgZGF0YV9vZmZzZXQ7Ci0gIEFTU0VSVF9UUlVFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrS2V5SWQpLCAmZGVjcnlwdF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCkpOwotICBFWFBFQ1RfRVEoMSwgZGF0YV9vZmZzZXQpOwotICBFWFBFQ1RfRkFMU0UoZGVjcnlwdF9jb25maWctPmlzX2VuY3J5cHRlZCgpKTsKLX0KLQotVEVTVChXZWJNQ3J5cHRvSGVscGVyc1Rlc3QsIEVuY3J5cHRlZEJ1dE5vdEVub3VnaEJ5dGVzKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsweDAxLCAweDBkLCAweDBhLCAweDBkLCAweDBhfTsKLSAgc3RkOjp1bmlxdWVfcHRyPERlY3J5cHRDb25maWc+IGRlY3J5cHRfY29uZmlnOwotICBpbnQgZGF0YV9vZmZzZXQ7Ci0gIEFTU0VSVF9GQUxTRShXZWJNQ3JlYXRlRGVjcnlwdENvbmZpZyhrRGF0YSwgc2l6ZW9mKGtEYXRhKSwga0tleUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtLZXlJZCksICZkZWNyeXB0X2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCkpOwotfQotCi1URVNUKFdlYk1DcnlwdG9IZWxwZXJzVGVzdCwgRW5jcnlwdGVkTm90UGFydGl0aW9uZWQpIHsKLSAgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgLy8gRW5jcnlwdGVkCi0gICAgICAweDAxLAotICAgICAgLy8gSVYKLSAgICAgIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsCi0gICAgICAvLyBEYXRhCi0gICAgICAweDAxLCAweDAyLAotICB9OwotICAvLyBFeHRyYWN0ZWQgZnJvbSBrRGF0YSBhbmQgemVybyBleHRlbmRlZCB0byAxNiBieXRlcy4KLSAgY29uc3QgdWludDhfdCBrRXhwZWN0ZWRJdltdID0gewotICAgICAgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwKLSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gIH07Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBkZWNyeXB0X2NvbmZpZzsKLSAgaW50IGRhdGFfb2Zmc2V0OwotICBBU1NFUlRfVFJVRShXZWJNQ3JlYXRlRGVjcnlwdENvbmZpZyhrRGF0YSwgc2l6ZW9mKGtEYXRhKSwga0tleUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0tleUlkKSwgJmRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vZmZzZXQpKTsKLSAgRVhQRUNUX1RSVUUoZGVjcnlwdF9jb25maWctPmlzX2VuY3J5cHRlZCgpKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKGtLZXlJZCwga0tleUlkICsgc2l6ZW9mKGtLZXlJZCkpLAotICAgICAgICAgICAgZGVjcnlwdF9jb25maWctPmtleV9pZCgpKTsKLSAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKGtFeHBlY3RlZEl2LCBrRXhwZWN0ZWRJdiArIHNpemVvZihrRXhwZWN0ZWRJdikpLAotICAgICAgICAgICAgZGVjcnlwdF9jb25maWctPml2KCkpOwotICBFWFBFQ1RfVFJVRShkZWNyeXB0X2NvbmZpZy0+c3Vic2FtcGxlcygpLmVtcHR5KCkpOwotfQotCi1URVNUKFdlYk1DcnlwdG9IZWxwZXJzVGVzdCwgRW5jcnlwdGVkUGFydGl0aW9uZWRNaXNzaW5nTnVtUGFydGl0aW9uRmllbGQpIHsKLSAgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgLy8gRW5jcnlwdGVkIGFuZCBQYXJ0aXRpb25lZAotICAgICAgMHgwMywKLSAgICAgIC8vIElWCi0gICAgICAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLAotICB9OwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX0ZBTFNFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0tleUlkKSwgJmRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KSk7Ci19Ci0KLVRFU1QoV2ViTUNyeXB0b0hlbHBlcnNUZXN0LCBFbmNyeXB0ZWRQYXJ0aXRpb25lZE5vdEVub3VnaEJ5dGVzRm9yT2Zmc2V0cykgewotICBjb25zdCB1aW50OF90IGtEYXRhW10gPSB7Ci0gICAgICAvLyBFbmNyeXB0ZWQgYW5kIFBhcnRpdGlvbmVkCi0gICAgICAweDAzLAotICAgICAgLy8gSVYKLSAgICAgIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsCi0gICAgICAvLyBOdW0gcGFydGl0aW9ucyA9IDIKLSAgICAgIDB4MDIsCi0gICAgICAvLyBQYXJ0aXRpb24gMCBAIG9mZnNldCAzCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAzLAotICB9OwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX0ZBTFNFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0tleUlkKSwgJmRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KSk7Ci19Ci0KLVRFU1QoV2ViTUNyeXB0b0hlbHBlcnNUZXN0LCBFbmNyeXB0ZWRQYXJ0aXRpb25lZE5vdEVub3VnaEJ5dGVzRm9yRGF0YSkgewotICBjb25zdCB1aW50OF90IGtEYXRhW10gPSB7Ci0gICAgICAvLyBFbmNyeXB0ZWQgYW5kIFBhcnRpdGlvbmVkCi0gICAgICAweDAzLAotICAgICAgLy8gSVYKLSAgICAgIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsCi0gICAgICAvLyBOdW0gcGFydGl0aW9ucyA9IDIKLSAgICAgIDB4MDIsCi0gICAgICAvLyBQYXJ0aXRpb24gMCBAIG9mZnNldCAzLCBwYXJ0aXRpb24gMiBAIG9mZnNldCA1Ci0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotICAgICAgLy8gU2hvdWxkIGhhdmUgbW9yZSB0aGFuIDUgYnl0ZXMgb2YgZGF0YQotICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKLSAgfTsKLSAgc3RkOjp1bmlxdWVfcHRyPERlY3J5cHRDb25maWc+IGRlY3J5cHRfY29uZmlnOwotICBpbnQgZGF0YV9vZmZzZXQ7Ci0gIEFTU0VSVF9GQUxTRShXZWJNQ3JlYXRlRGVjcnlwdENvbmZpZyhrRGF0YSwgc2l6ZW9mKGtEYXRhKSwga0tleUlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtLZXlJZCksICZkZWNyeXB0X2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCkpOwotfQotCi1URVNUKFdlYk1DcnlwdG9IZWxwZXJzVGVzdCwgRW5jcnlwdGVkUGFydGl0aW9uZWROb3RFbm91Z2hCeXRlc0ZvckRhdGEyKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsKLSAgICAgIC8vIEVuY3J5cHRlZCBhbmQgUGFydGl0aW9uZWQKLSAgICAgIDB4MDMsCi0gICAgICAvLyBJVgotICAgICAgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwKLSAgICAgIC8vIE51bSBwYXJ0aXRpb25zID0gMgotICAgICAgMHgwMiwKLSAgICAgIC8vIFBhcnRpdGlvbiAwIEAgb2Zmc2V0IDMsIHBhcnRpdGlvbiAxIEAgb2Zmc2V0IDUKLSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0gICAgICAvLyBTaG91bGQgaGF2ZSBtb3JlIHRoYW4gNSBieXRlcyBvZiBkYXRhCi0gICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LAotICB9OwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX0ZBTFNFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0tleUlkKSwgJmRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KSk7Ci19Ci0KLVRFU1QoV2ViTUNyeXB0b0hlbHBlcnNUZXN0LCBFbmNyeXB0ZWRQYXJ0aXRpb25lZERlY3JlYXNpbmdPZmZzZXRzKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsKLSAgICAgIC8vIEVuY3J5cHRlZCBhbmQgUGFydGl0aW9uZWQKLSAgICAgIDB4MDMsCi0gICAgICAvLyBJVgotICAgICAgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwKLSAgICAgIC8vIE51bSBwYXJ0aXRpb25zID0gMgotICAgICAgMHgwMiwKLSAgICAgIC8vIFBhcnRpdGlvbiAwIEAgb2Zmc2V0IDMsIHBhcnRpdGlvbiAxIEAgb2Zmc2V0IDIKLSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0gICAgICAvLyBTaG91bGQgaGF2ZSBtb3JlIHRoYW4gNSBieXRlcyBvZiBkYXRhCi0gICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LAotICB9OwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX0ZBTFNFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0tleUlkKSwgJmRlY3J5cHRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KSk7Ci19Ci0KLVRFU1QoV2ViTUNyeXB0b0hlbHBlcnNUZXN0LCBFbmNyeXB0ZWRQYXJ0aXRpb25lZEV2ZW5OdW1iZXJPZlBhcnRpdGlvbnMpIHsKLSAgY29uc3QgdWludDhfdCBrRGF0YVtdID0gewotICAgICAgLy8gRW5jcnlwdGVkIGFuZCBQYXJ0aXRpb25lZAotICAgICAgMHgwMywKLSAgICAgIC8vIElWCi0gICAgICAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLAotICAgICAgLy8gTnVtIHBhcnRpdGlvbnMgPSAyCi0gICAgICAweDAyLAotICAgICAgLy8gUGFydGl0aW9uIDAgQCBvZmZzZXQgMywgcGFydGl0aW9uIDEgQCBvZmZzZXQgNQotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLSAgICAgIC8vIFNob3VsZCBoYXZlIG1vcmUgdGhhbiA1IGJ5dGVzIG9mIGRhdGEKLSAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsCi0gIH07Ci0gIC8vIEV4dHJhY3RlZCBmcm9tIGtEYXRhIGFuZCB6ZXJvIGV4dGVuZGVkIHRvIDE2IGJ5dGVzLgotICBjb25zdCB1aW50OF90IGtFeHBlY3RlZEl2W10gPSB7Ci0gICAgICAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLCAweDBkLCAweDBhLAotICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgfTsKLSAgc3RkOjp1bmlxdWVfcHRyPERlY3J5cHRDb25maWc+IGRlY3J5cHRfY29uZmlnOwotICBpbnQgZGF0YV9vZmZzZXQ7Ci0gIEFTU0VSVF9UUlVFKFdlYk1DcmVhdGVEZWNyeXB0Q29uZmlnKGtEYXRhLCBzaXplb2Yoa0RhdGEpLCBrS2V5SWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrS2V5SWQpLCAmZGVjcnlwdF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29mZnNldCkpOwotICBFWFBFQ1RfVFJVRShkZWNyeXB0X2NvbmZpZy0+aXNfZW5jcnlwdGVkKCkpOwotICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoa0tleUlkLCBrS2V5SWQgKyBzaXplb2Yoa0tleUlkKSksCi0gICAgICAgICAgICBkZWNyeXB0X2NvbmZpZy0+a2V5X2lkKCkpOwotICBFWFBFQ1RfRVEoc3RkOjpzdHJpbmcoa0V4cGVjdGVkSXYsIGtFeHBlY3RlZEl2ICsgc2l6ZW9mKGtFeHBlY3RlZEl2KSksCi0gICAgICAgICAgICBkZWNyeXB0X2NvbmZpZy0+aXYoKSk7Ci0gIEVYUEVDVF9USEFUKGRlY3J5cHRfY29uZmlnLT5zdWJzYW1wbGVzKCksCi0gICAgICAgICAgICAgIEVsZW1lbnRzQXJlKFN1YnNhbXBsZUVudHJ5KDMsIDIpLCBTdWJzYW1wbGVFbnRyeSgxLCAwKSkpOwotICBFWFBFQ1RfRVEoMTgsIGRhdGFfb2Zmc2V0KTsKLX0KLQotVEVTVChXZWJNQ3J5cHRvSGVscGVyc1Rlc3QsIEVuY3J5cHRlZFBhcnRpdGlvbmVkT2RkTnVtYmVyT2ZQYXJ0aXRpb25zKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0RhdGFbXSA9IHsKLSAgICAgIC8vIEVuY3J5cHRlZCBhbmQgUGFydGl0aW9uZWQKLSAgICAgIDB4MDMsCi0gICAgICAvLyBJVgotICAgICAgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwgMHgwZCwgMHgwYSwKLSAgICAgIC8vIE51bSBwYXJ0aXRpb25zID0gMQotICAgICAgMHgwMSwKLSAgICAgIC8vIFBhcnRpdGlvbiAwIEAgb2Zmc2V0IDMsCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAzLAotICAgICAgLy8gU2hvdWxkIGhhdmUgbW9yZSB0aGFuIDMgYnl0ZXMgb2YgZGF0YQotICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKLSAgfTsKLSAgLy8gRXh0cmFjdGVkIGZyb20ga0RhdGEgYW5kIHplcm8gZXh0ZW5kZWQgdG8gMTYgYnl0ZXMuCi0gIGNvbnN0IHVpbnQ4X3Qga0V4cGVjdGVkSXZbXSA9IHsKLSAgICAgIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsIDB4MGQsIDB4MGEsCi0gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICB9OwotICBzdGQ6OnVuaXF1ZV9wdHI8RGVjcnlwdENvbmZpZz4gZGVjcnlwdF9jb25maWc7Ci0gIGludCBkYXRhX29mZnNldDsKLSAgQVNTRVJUX1RSVUUoV2ViTUNyZWF0ZURlY3J5cHRDb25maWcoa0RhdGEsIHNpemVvZihrRGF0YSksIGtLZXlJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtLZXlJZCksICZkZWNyeXB0X2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2Zmc2V0KSk7Ci0gIEVYUEVDVF9UUlVFKGRlY3J5cHRfY29uZmlnLT5pc19lbmNyeXB0ZWQoKSk7Ci0gIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhrS2V5SWQsIGtLZXlJZCArIHNpemVvZihrS2V5SWQpKSwKLSAgICAgICAgICAgIGRlY3J5cHRfY29uZmlnLT5rZXlfaWQoKSk7Ci0gIEVYUEVDVF9FUShzdGQ6OnN0cmluZyhrRXhwZWN0ZWRJdiwga0V4cGVjdGVkSXYgKyBzaXplb2Yoa0V4cGVjdGVkSXYpKSwKLSAgICAgICAgICAgIGRlY3J5cHRfY29uZmlnLT5pdigpKTsKLSAgRVhQRUNUX1RIQVQoZGVjcnlwdF9jb25maWctPnN1YnNhbXBsZXMoKSwgRWxlbWVudHNBcmUoU3Vic2FtcGxlRW50cnkoMywgMykpKTsKLSAgRVhQRUNUX0VRKDE0LCBkYXRhX29mZnNldCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2luZm9fcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2luZm9fcGFyc2VyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjk4MTk5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9pbmZvX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBEZWZhdWx0IHRpbWVjb2RlIHNjYWxlIGlmIHRoZSBUaW1lY29kZVNjYWxlIGVsZW1lbnQgaXMKLS8vIG5vdCBzcGVjaWZpZWQgaW4gdGhlIElORk8gZWxlbWVudC4KLXN0YXRpYyBjb25zdCBpbnQga1dlYk1EZWZhdWx0VGltZWNvZGVTY2FsZSA9IDEwMDAwMDA7Ci0KLVdlYk1JbmZvUGFyc2VyOjpXZWJNSW5mb1BhcnNlcigpIDogdGltZWNvZGVfc2NhbGVfKC0xKSwgZHVyYXRpb25fKC0xKSB7fQotCi1XZWJNSW5mb1BhcnNlcjo6fldlYk1JbmZvUGFyc2VyKCkge30KLQotaW50IFdlYk1JbmZvUGFyc2VyOjpQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSB7Ci0gIHRpbWVjb2RlX3NjYWxlXyA9IC0xOwotICBkdXJhdGlvbl8gPSAtMTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZEluZm8sIHRoaXMpOwotICBpbnQgcmVzdWx0ID0gcGFyc2VyLlBhcnNlKGJ1Ziwgc2l6ZSk7Ci0KLSAgaWYgKHJlc3VsdCA8PSAwKSByZXR1cm4gcmVzdWx0OwotCi0gIC8vIEZvciBub3cgd2UgZG8gYWxsIG9yIG5vdGhpbmcgcGFyc2luZy4KLSAgcmV0dXJuIHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpID8gcmVzdWx0IDogMDsKLX0KLQotV2ViTVBhcnNlckNsaWVudCogV2ViTUluZm9QYXJzZXI6Ok9uTGlzdFN0YXJ0KGludCBpZCkgeyByZXR1cm4gdGhpczsgfQotCi1ib29sIFdlYk1JbmZvUGFyc2VyOjpPbkxpc3RFbmQoaW50IGlkKSB7Ci0gIGlmIChpZCA9PSBrV2ViTUlkSW5mbyAmJiB0aW1lY29kZV9zY2FsZV8gPT0gLTEpIHsKLSAgICAvLyBTZXQgdGltZWNvZGUgc2NhbGUgdG8gZGVmYXVsdCB2YWx1ZSBpZiBpdCBpc24ndCBwcmVzZW50IGluCi0gICAgLy8gdGhlIEluZm8gZWxlbWVudC4KLSAgICB0aW1lY29kZV9zY2FsZV8gPSBrV2ViTURlZmF1bHRUaW1lY29kZVNjYWxlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1JbmZvUGFyc2VyOjpPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgewotICBpZiAoaWQgIT0ga1dlYk1JZFRpbWVjb2RlU2NhbGUpIHJldHVybiB0cnVlOwotCi0gIGlmICh0aW1lY29kZV9zY2FsZV8gIT0gLTEpIHsKLSAgICBEVkxPRygxKSA8PCAiTXVsdGlwbGUgdmFsdWVzIGZvciBpZCAiIDw8IHN0ZDo6aGV4IDw8IGlkIDw8ICIgc3BlY2lmaWVkIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB0aW1lY29kZV9zY2FsZV8gPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1JbmZvUGFyc2VyOjpPbkZsb2F0KGludCBpZCwgZG91YmxlIHZhbCkgewotICBpZiAoaWQgIT0ga1dlYk1JZER1cmF0aW9uKSB7Ci0gICAgRFZMT0coMSkgPDwgIlVuZXhwZWN0ZWQgZmxvYXQgZm9yIGlkIiA8PCBzdGQ6OmhleCA8PCBpZDsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpZiAoZHVyYXRpb25fICE9IC0xKSB7Ci0gICAgRFZMT0coMSkgPDwgIk11bHRpcGxlIHZhbHVlcyBmb3IgZHVyYXRpb24uIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBkdXJhdGlvbl8gPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1JbmZvUGFyc2VyOjpPbkJpbmFyeShpbnQgaWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIGlmIChpZCA9PSBrV2ViTUlkRGF0ZVVUQykgewotICAgIGlmIChzaXplICE9IDgpIHJldHVybiBmYWxzZTsKLQotICAgIGludDY0X3QgZGF0ZV9pbl9uYW5vc2Vjb25kcyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICBkYXRlX2luX25hbm9zZWNvbmRzID0gKGRhdGVfaW5fbmFub3NlY29uZHMgPDwgOCkgfCBkYXRhW2ldOwotCi0gICAgYmFzZTo6VGltZTo6RXhwbG9kZWQgZXhwbG9kZWRfZXBvY2g7Ci0gICAgZXhwbG9kZWRfZXBvY2gueWVhciA9IDIwMDE7Ci0gICAgZXhwbG9kZWRfZXBvY2gubW9udGggPSAxOwotICAgIGV4cGxvZGVkX2Vwb2NoLmRheV9vZl9tb250aCA9IDE7Ci0gICAgZXhwbG9kZWRfZXBvY2guaG91ciA9IDA7Ci0gICAgZXhwbG9kZWRfZXBvY2gubWludXRlID0gMDsKLSAgICBleHBsb2RlZF9lcG9jaC5zZWNvbmQgPSAwOwotICAgIGV4cGxvZGVkX2Vwb2NoLm1pbGxpc2Vjb25kID0gMDsKLQotICAgIGlmICghYmFzZTo6VGltZTo6RnJvbVVUQ0V4cGxvZGVkKGV4cGxvZGVkX2Vwb2NoLCAmZGF0ZV91dGNfKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkYXRlX3V0Y18gKz0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKGRhdGVfaW5fbmFub3NlY29uZHMgLyAxMDAwKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJNSW5mb1BhcnNlcjo6T25TdHJpbmcoaW50IGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSB7IHJldHVybiB0cnVlOyB9Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2luZm9fcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJjYmQ3NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fSU5GT19QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX0lORk9fUEFSU0VSX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCi0jaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotLy8gUGFyc2VyIGZvciBXZWJNIEluZm8gZWxlbWVudC4KLWNsYXNzIE1FRElBX0VYUE9SVCBXZWJNSW5mb1BhcnNlciA6IHB1YmxpYyBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIFdlYk1JbmZvUGFyc2VyKCk7Ci0gIH5XZWJNSW5mb1BhcnNlcigpIG92ZXJyaWRlOwotCi0gIC8vIFBhcnNlcyBhIFdlYk0gSW5mbyBlbGVtZW50IGluIHxidWZ8LgotICAvLwotICAvLyBSZXR1cm5zIC0xIGlmIHRoZSBwYXJzZSBmYWlscy4KLSAgLy8gUmV0dXJucyAwIGlmIG1vcmUgZGF0YSBpcyBuZWVkZWQuCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwYXJzZWQgb24gc3VjY2Vzcy4KLSAgaW50IFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpOwotCi0gIGludDY0X3QgdGltZWNvZGVfc2NhbGUoKSBjb25zdCB7IHJldHVybiB0aW1lY29kZV9zY2FsZV87IH0KLSAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZHVyYXRpb25fOyB9Ci0gIGJhc2U6OlRpbWUgZGF0ZV91dGMoKSBjb25zdCB7IHJldHVybiBkYXRlX3V0Y187IH0KLQotIHByaXZhdGU6Ci0gIC8vIFdlYk1QYXJzZXJDbGllbnQgbWV0aG9kcwotICBXZWJNUGFyc2VyQ2xpZW50KiBPbkxpc3RTdGFydChpbnQgaWQpIG92ZXJyaWRlOwotICBib29sIE9uTGlzdEVuZChpbnQgaWQpIG92ZXJyaWRlOwotICBib29sIE9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKSBvdmVycmlkZTsKLSAgYm9vbCBPbkZsb2F0KGludCBpZCwgZG91YmxlIHZhbCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25CaW5hcnkoaW50IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25TdHJpbmcoaW50IGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgc3RyKSBvdmVycmlkZTsKLQotICBpbnQ2NF90IHRpbWVjb2RlX3NjYWxlXzsKLSAgZG91YmxlIGR1cmF0aW9uXzsKLSAgYmFzZTo6VGltZSBkYXRlX3V0Y187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1JbmZvUGFyc2VyKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9JTkZPX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNTAyNTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiCi0KLS8vIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIHRvIHBhcnNlIFdlYk0gZmlsZSBlbGVtZW50cy4gSXQgd2FzIGNyZWF0ZWQKLS8vIGZyb20gaW5mb3JtYXRpb24gaW4gdGhlIE1hdHJvc2thIHNwZWMuCi0vLyBodHRwOi8vd3d3Lm1hdHJvc2thLm9yZy90ZWNobmljYWwvc3BlY3MvaW5kZXguaHRtbAotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIGVuY3J5cHRlZCBXZWJNLiBDdXJyZW50IFdlYk0KLS8vIGVuY3J5cHRlZCByZXF1ZXN0IGZvciBjb21tZW50cyBzcGVjaWZpY2F0aW9uIGlzIGhlcmUKLS8vIGh0dHA6Ly93aWtpLndlYm1wcm9qZWN0Lm9yZy9lbmNyeXB0aW9uL3dlYm0tZW5jcnlwdGlvbi1yZmMKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8aW9tYW5pcD4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotZW51bSBFbGVtZW50VHlwZSB7Ci0gIFVOS05PV04sCi0gIExJU1QsICAvLyBSZWZlcnJlZCB0byBhcyBNYXN0ZXIgRWxlbWVudCBpbiB0aGUgTWF0cm9za2Egc3BlYy4KLSAgVUlOVCwKLSAgRkxPQVQsCi0gIEJJTkFSWSwKLSAgU1RSSU5HLAotICBTS0lQLAotfTsKLQotc3RydWN0IEVsZW1lbnRJZEluZm8gewotICBFbGVtZW50VHlwZSB0eXBlXzsKLSAgaW50IGlkXzsKLX07Ci0KLXN0cnVjdCBMaXN0RWxlbWVudEluZm8gewotICBpbnQgaWRfOwotICBpbnQgbGV2ZWxfOwotICBjb25zdCBFbGVtZW50SWRJbmZvKiBpZF9pbmZvXzsKLSAgaW50IGlkX2luZm9fY291bnRfOwotfTsKLQotLy8gVGhlIGZvbGxvd2luZyBhcmUgdGFibGVzIGluZGljYXRpbmcgd2hhdCBJRHMgYXJlIHZhbGlkIHN1Yi1lbGVtZW50cwotLy8gb2YgcGFydGljdWxhciBlbGVtZW50cy4gSWYgYW4gZWxlbWVudCBpcyBlbmNvdW50ZXJlZCB0aGF0IGRvZXNuJ3QKLS8vIGFwcGVhciBpbiB0aGUgbGlzdCwgYSBwYXJzaW5nIGVycm9yIGlzIHNpZ25hbGxlZC4gU29tZSBlbGVtZW50cyBhcmUKLS8vIG1hcmtlZCBhcyBTS0lQIGJlY2F1c2UgdGhleSBhcmUgdmFsaWQsIGJ1dCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZW0KLS8vIHJpZ2h0IG5vdy4KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtFQk1MSGVhZGVySWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRFQk1MVmVyc2lvbn0sICAgICAgICB7VUlOVCwga1dlYk1JZEVCTUxSZWFkVmVyc2lvbn0sCi0gICAge1VJTlQsIGtXZWJNSWRFQk1MTWF4SURMZW5ndGh9LCAgICB7VUlOVCwga1dlYk1JZEVCTUxNYXhTaXplTGVuZ3RofSwKLSAgICB7U1RSSU5HLCBrV2ViTUlkRG9jVHlwZX0sICAgICAgICAgIHtVSU5ULCBrV2ViTUlkRG9jVHlwZVZlcnNpb259LAotICAgIHtVSU5ULCBrV2ViTUlkRG9jVHlwZVJlYWRWZXJzaW9ufSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtTZWdtZW50SWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRTZWVrSGVhZH0sIHtMSVNULCBrV2ViTUlkSW5mb30sIHtMSVNULCBrV2ViTUlkQ2x1c3Rlcn0sCi0gICAge0xJU1QsIGtXZWJNSWRUcmFja3N9LCAgIHtMSVNULCBrV2ViTUlkQ3Vlc30sIHtMSVNULCBrV2ViTUlkQXR0YWNobWVudHN9LAotICAgIHtMSVNULCBrV2ViTUlkQ2hhcHRlcnN9LCB7TElTVCwga1dlYk1JZFRhZ3N9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1NlZWtIZWFkSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRTZWVrfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtTZWVrSWRzW10gPSB7Ci0gICAge0JJTkFSWSwga1dlYk1JZFNlZWtJRH0sIHtVSU5ULCBrV2ViTUlkU2Vla1Bvc2l0aW9ufSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtJbmZvSWRzW10gPSB7Ci0gICAge0JJTkFSWSwga1dlYk1JZFNlZ21lbnRVSUR9LCAgICB7U1RSSU5HLCBrV2ViTUlkU2VnbWVudEZpbGVuYW1lfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkUHJldlVJRH0sICAgICAgIHtTVFJJTkcsIGtXZWJNSWRQcmV2RmlsZW5hbWV9LAotICAgIHtCSU5BUlksIGtXZWJNSWROZXh0VUlEfSwgICAgICAge1NUUklORywga1dlYk1JZE5leHRGaWxlbmFtZX0sCi0gICAge0JJTkFSWSwga1dlYk1JZFNlZ21lbnRGYW1pbHl9LCB7TElTVCwga1dlYk1JZENoYXB0ZXJUcmFuc2xhdGV9LAotICAgIHtVSU5ULCBrV2ViTUlkVGltZWNvZGVTY2FsZX0sICAge0ZMT0FULCBrV2ViTUlkRHVyYXRpb259LAotICAgIHtCSU5BUlksIGtXZWJNSWREYXRlVVRDfSwgICAgICAge1NUUklORywga1dlYk1JZFRpdGxlfSwKLSAgICB7U1RSSU5HLCBrV2ViTUlkTXV4aW5nQXBwfSwgICAgIHtTVFJJTkcsIGtXZWJNSWRXcml0aW5nQXBwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDaGFwdGVyVHJhbnNsYXRlSWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRDaGFwdGVyVHJhbnNsYXRlRWRpdGlvblVJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRDaGFwdGVyVHJhbnNsYXRlQ29kZWN9LAotICAgIHtCSU5BUlksIGtXZWJNSWRDaGFwdGVyVHJhbnNsYXRlSUR9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NsdXN0ZXJJZHNbXSA9IHsKLSAgICB7QklOQVJZLCBrV2ViTUlkU2ltcGxlQmxvY2t9LCB7VUlOVCwga1dlYk1JZFRpbWVjb2RlfSwKLSAgICB7TElTVCwga1dlYk1JZFNpbGVudFRyYWNrc30sICB7VUlOVCwga1dlYk1JZFBvc2l0aW9ufSwKLSAgICB7VUlOVCwga1dlYk1JZFByZXZTaXplfSwgICAgICB7TElTVCwga1dlYk1JZEJsb2NrR3JvdXB9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1NpbGVudFRyYWNrc0lkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkU2lsZW50VHJhY2tOdW1iZXJ9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0Jsb2NrR3JvdXBJZHNbXSA9IHsKLSAgICB7QklOQVJZLCBrV2ViTUlkQmxvY2t9LCAgICAgICAgICB7TElTVCwga1dlYk1JZEJsb2NrQWRkaXRpb25zfSwKLSAgICB7VUlOVCwga1dlYk1JZEJsb2NrRHVyYXRpb259LCAgICB7VUlOVCwga1dlYk1JZFJlZmVyZW5jZVByaW9yaXR5fSwKLSAgICB7QklOQVJZLCBrV2ViTUlkUmVmZXJlbmNlQmxvY2t9LCB7QklOQVJZLCBrV2ViTUlkQ29kZWNTdGF0ZX0sCi0gICAge0JJTkFSWSwga1dlYk1JZERpc2NhcmRQYWRkaW5nfSwge0xJU1QsIGtXZWJNSWRTbGljZXN9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0Jsb2NrQWRkaXRpb25zSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRCbG9ja01vcmV9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0Jsb2NrTW9yZUlkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkQmxvY2tBZGRJRH0sIHtCSU5BUlksIGtXZWJNSWRCbG9ja0FkZGl0aW9uYWx9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1NsaWNlc0lkc1tdID0gewotICAgIHtMSVNULCBrV2ViTUlkVGltZVNsaWNlfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtUaW1lU2xpY2VJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZExhY2VOdW1iZXJ9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1RyYWNrc0lkc1tdID0gewotICAgIHtMSVNULCBrV2ViTUlkVHJhY2tFbnRyeX0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrVHJhY2tFbnRyeUlkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkVHJhY2tOdW1iZXJ9LAotICAgIHtCSU5BUlksIGtXZWJNSWRUcmFja1VJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRUcmFja1R5cGV9LAotICAgIHtVSU5ULCBrV2ViTUlkRmxhZ0VuYWJsZWR9LAotICAgIHtVSU5ULCBrV2ViTUlkRmxhZ0RlZmF1bHR9LAotICAgIHtVSU5ULCBrV2ViTUlkRmxhZ0ZvcmNlZH0sCi0gICAge1VJTlQsIGtXZWJNSWRGbGFnTGFjaW5nfSwKLSAgICB7VUlOVCwga1dlYk1JZE1pbkNhY2hlfSwKLSAgICB7VUlOVCwga1dlYk1JZE1heENhY2hlfSwKLSAgICB7VUlOVCwga1dlYk1JZERlZmF1bHREdXJhdGlvbn0sCi0gICAge0ZMT0FULCBrV2ViTUlkVHJhY2tUaW1lY29kZVNjYWxlfSwKLSAgICB7VUlOVCwga1dlYk1JZE1heEJsb2NrQWRkaXRpb25JZH0sCi0gICAge1NUUklORywga1dlYk1JZE5hbWV9LAotICAgIHtTVFJJTkcsIGtXZWJNSWRMYW5ndWFnZX0sCi0gICAge1NUUklORywga1dlYk1JZENvZGVjSUR9LAotICAgIHtCSU5BUlksIGtXZWJNSWRDb2RlY1ByaXZhdGV9LAotICAgIHtTVFJJTkcsIGtXZWJNSWRDb2RlY05hbWV9LAotICAgIHtVSU5ULCBrV2ViTUlkQXR0YWNobWVudExpbmt9LAotICAgIHtVSU5ULCBrV2ViTUlkQ29kZWNEZWNvZGVBbGx9LAotICAgIHtVSU5ULCBrV2ViTUlkVHJhY2tPdmVybGF5fSwKLSAgICB7VUlOVCwga1dlYk1JZENvZGVjRGVsYXl9LAotICAgIHtVSU5ULCBrV2ViTUlkU2Vla1ByZVJvbGx9LAotICAgIHtMSVNULCBrV2ViTUlkVHJhY2tUcmFuc2xhdGV9LAotICAgIHtMSVNULCBrV2ViTUlkVmlkZW99LAotICAgIHtMSVNULCBrV2ViTUlkQXVkaW99LAotICAgIHtMSVNULCBrV2ViTUlkVHJhY2tPcGVyYXRpb259LAotICAgIHtMSVNULCBrV2ViTUlkQ29udGVudEVuY29kaW5nc30sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrVHJhY2tUcmFuc2xhdGVJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZFRyYWNrVHJhbnNsYXRlRWRpdGlvblVJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRUcmFja1RyYW5zbGF0ZUNvZGVjfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkVHJhY2tUcmFuc2xhdGVUcmFja0lEfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtWaWRlb0lkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkRmxhZ0ludGVybGFjZWR9LCAge1VJTlQsIGtXZWJNSWRTdGVyZW9Nb2RlfSwKLSAgICB7VUlOVCwga1dlYk1JZEFscGhhTW9kZX0sICAgICAgIHtMSVNULCBrV2ViTUlkUHJvamVjdGlvbn0sCi0gICAge1VJTlQsIGtXZWJNSWRQaXhlbFdpZHRofSwgICAgICB7VUlOVCwga1dlYk1JZFBpeGVsSGVpZ2h0fSwKLSAgICB7VUlOVCwga1dlYk1JZFBpeGVsQ3JvcEJvdHRvbX0sIHtVSU5ULCBrV2ViTUlkUGl4ZWxDcm9wVG9wfSwKLSAgICB7VUlOVCwga1dlYk1JZFBpeGVsQ3JvcExlZnR9LCAgIHtVSU5ULCBrV2ViTUlkUGl4ZWxDcm9wUmlnaHR9LAotICAgIHtVSU5ULCBrV2ViTUlkRGlzcGxheVdpZHRofSwgICAge1VJTlQsIGtXZWJNSWREaXNwbGF5SGVpZ2h0fSwKLSAgICB7VUlOVCwga1dlYk1JZERpc3BsYXlVbml0fSwgICAgIHtVSU5ULCBrV2ViTUlkQXNwZWN0UmF0aW9UeXBlfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkQ29sb3JTcGFjZX0sICAgIHtGTE9BVCwga1dlYk1JZEZyYW1lUmF0ZX0sCi0gICAge0xJU1QsIGtXZWJNSWRDb2xvdXJ9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NvbG91cklkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkTWF0cml4Q29lZmZpY2llbnRzfSwKLSAgICB7VUlOVCwga1dlYk1JZEJpdHNQZXJDaGFubmVsfSwKLSAgICB7VUlOVCwga1dlYk1JZENocm9tYVN1YnNhbXBsaW5nSG9yen0sCi0gICAge1VJTlQsIGtXZWJNSWRDaHJvbWFTdWJzYW1wbGluZ1ZlcnR9LAotICAgIHtVSU5ULCBrV2ViTUlkQ2JTdWJzYW1wbGluZ0hvcnp9LAotICAgIHtVSU5ULCBrV2ViTUlkQ2JTdWJzYW1wbGluZ1ZlcnR9LAotICAgIHtVSU5ULCBrV2ViTUlkQ2hyb21hU2l0aW5nSG9yen0sCi0gICAge1VJTlQsIGtXZWJNSWRDaHJvbWFTaXRpbmdWZXJ0fSwKLSAgICB7VUlOVCwga1dlYk1JZFJhbmdlfSwKLSAgICB7VUlOVCwga1dlYk1JZFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzfSwKLSAgICB7VUlOVCwga1dlYk1JZFByaW1hcmllc30sCi0gICAge1VJTlQsIGtXZWJNSWRNYXhDTEx9LAotICAgIHtVSU5ULCBrV2ViTUlkTWF4RkFMTH0sCi0gICAge0xJU1QsIGtXZWJNSWRNYXN0ZXJpbmdNZXRhZGF0YX0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrTWFzdGVyaW5nTWV0YWRhdGFJZHNbXSA9IHsKLSAgICB7RkxPQVQsIGtXZWJNSWRQcmltYXJ5UkNocm9tYXRpY2l0eVh9LAotICAgIHtGTE9BVCwga1dlYk1JZFByaW1hcnlSQ2hyb21hdGljaXR5WX0sCi0gICAge0ZMT0FULCBrV2ViTUlkUHJpbWFyeUdDaHJvbWF0aWNpdHlYfSwKLSAgICB7RkxPQVQsIGtXZWJNSWRQcmltYXJ5R0Nocm9tYXRpY2l0eVl9LAotICAgIHtGTE9BVCwga1dlYk1JZFByaW1hcnlCQ2hyb21hdGljaXR5WH0sCi0gICAge0ZMT0FULCBrV2ViTUlkUHJpbWFyeUJDaHJvbWF0aWNpdHlZfSwKLSAgICB7RkxPQVQsIGtXZWJNSWRXaGl0ZVBvaW50Q2hyb21hdGljaXR5WH0sCi0gICAge0ZMT0FULCBrV2ViTUlkV2hpdGVQb2ludENocm9tYXRpY2l0eVl9LAotICAgIHtGTE9BVCwga1dlYk1JZEx1bWluYW5jZU1heH0sCi0gICAge0ZMT0FULCBrV2ViTUlkTHVtaW5hbmNlTWlufSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtBdWRpb0lkc1tdID0gewotICAgIHtGTE9BVCwga1dlYk1JZFNhbXBsaW5nRnJlcXVlbmN5fSwKLSAgICB7RkxPQVQsIGtXZWJNSWRPdXRwdXRTYW1wbGluZ0ZyZXF1ZW5jeX0sCi0gICAge1VJTlQsIGtXZWJNSWRDaGFubmVsc30sCi0gICAge1VJTlQsIGtXZWJNSWRCaXREZXB0aH0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrVHJhY2tPcGVyYXRpb25JZHNbXSA9IHsKLSAgICB7TElTVCwga1dlYk1JZFRyYWNrQ29tYmluZVBsYW5lc30sIHtMSVNULCBrV2ViTUlkSm9pbkJsb2Nrc30sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrVHJhY2tDb21iaW5lUGxhbmVzSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRUcmFja1BsYW5lfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtUcmFja1BsYW5lSWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRUcmFja1BsYW5lVUlEfSwge1VJTlQsIGtXZWJNSWRUcmFja1BsYW5lVHlwZX0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrSm9pbkJsb2Nrc0lkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkVHJhY2tKb2luVUlEfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDb250ZW50RW5jb2RpbmdzSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRDb250ZW50RW5jb2Rpbmd9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NvbnRlbnRFbmNvZGluZ0lkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkQ29udGVudEVuY29kaW5nT3JkZXJ9LCB7VUlOVCwga1dlYk1JZENvbnRlbnRFbmNvZGluZ1Njb3BlfSwKLSAgICB7VUlOVCwga1dlYk1JZENvbnRlbnRFbmNvZGluZ1R5cGV9LCAge0xJU1QsIGtXZWJNSWRDb250ZW50Q29tcHJlc3Npb259LAotICAgIHtMSVNULCBrV2ViTUlkQ29udGVudEVuY3J5cHRpb259LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NvbnRlbnRDb21wcmVzc2lvbklkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkQ29udGVudENvbXBBbGdvfSwge0JJTkFSWSwga1dlYk1JZENvbnRlbnRDb21wU2V0dGluZ3N9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NvbnRlbnRFbmNyeXB0aW9uSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRDb250ZW50RW5jQUVTU2V0dGluZ3N9LCB7VUlOVCwga1dlYk1JZENvbnRlbnRFbmNBbGdvfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkQ29udGVudEVuY0tleUlEfSwgICAgIHtCSU5BUlksIGtXZWJNSWRDb250ZW50U2lnbmF0dXJlfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkQ29udGVudFNpZ0tleUlEfSwgICAgIHtVSU5ULCBrV2ViTUlkQ29udGVudFNpZ0FsZ299LAotICAgIHtVSU5ULCBrV2ViTUlkQ29udGVudFNpZ0hhc2hBbGdvfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDb250ZW50RW5jQUVTU2V0dGluZ3NJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZEFFU1NldHRpbmdzQ2lwaGVyTW9kZX0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrQ3Vlc0lkc1tdID0gewotICAgIHtMSVNULCBrV2ViTUlkQ3VlUG9pbnR9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0N1ZVBvaW50SWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRDdWVUaW1lfSwge0xJU1QsIGtXZWJNSWRDdWVUcmFja1Bvc2l0aW9uc30sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrQ3VlVHJhY2tQb3NpdGlvbnNJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZEN1ZVRyYWNrfSwgICAgICAge1VJTlQsIGtXZWJNSWRDdWVDbHVzdGVyUG9zaXRpb259LAotICAgIHtVSU5ULCBrV2ViTUlkQ3VlQmxvY2tOdW1iZXJ9LCB7VUlOVCwga1dlYk1JZEN1ZUNvZGVjU3RhdGV9LAotICAgIHtMSVNULCBrV2ViTUlkQ3VlUmVmZXJlbmNlfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDdWVSZWZlcmVuY2VJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZEN1ZVJlZlRpbWV9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0F0dGFjaG1lbnRzSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRBdHRhY2hlZEZpbGV9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0F0dGFjaGVkRmlsZUlkc1tdID0gewotICAgIHtTVFJJTkcsIGtXZWJNSWRGaWxlRGVzY3JpcHRpb259LCB7U1RSSU5HLCBrV2ViTUlkRmlsZU5hbWV9LAotICAgIHtTVFJJTkcsIGtXZWJNSWRGaWxlTWltZVR5cGV9LCAgICB7QklOQVJZLCBrV2ViTUlkRmlsZURhdGF9LAotICAgIHtVSU5ULCBrV2ViTUlkRmlsZVVJRH0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrQ2hhcHRlcnNJZHNbXSA9IHsKLSAgICB7TElTVCwga1dlYk1JZEVkaXRpb25FbnRyeX0sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrRWRpdGlvbkVudHJ5SWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRFZGl0aW9uVUlEfSwgICAgICAgICB7VUlOVCwga1dlYk1JZEVkaXRpb25GbGFnSGlkZGVufSwKLSAgICB7VUlOVCwga1dlYk1JZEVkaXRpb25GbGFnRGVmYXVsdH0sIHtVSU5ULCBrV2ViTUlkRWRpdGlvbkZsYWdPcmRlcmVkfSwKLSAgICB7TElTVCwga1dlYk1JZENoYXB0ZXJBdG9tfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDaGFwdGVyQXRvbUlkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkQ2hhcHRlclVJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRDaGFwdGVyVGltZVN0YXJ0fSwKLSAgICB7VUlOVCwga1dlYk1JZENoYXB0ZXJUaW1lRW5kfSwKLSAgICB7VUlOVCwga1dlYk1JZENoYXB0ZXJGbGFnSGlkZGVufSwKLSAgICB7VUlOVCwga1dlYk1JZENoYXB0ZXJGbGFnRW5hYmxlZH0sCi0gICAge0JJTkFSWSwga1dlYk1JZENoYXB0ZXJTZWdtZW50VUlEfSwKLSAgICB7VUlOVCwga1dlYk1JZENoYXB0ZXJTZWdtZW50RWRpdGlvblVJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRDaGFwdGVyUGh5c2ljYWxFcXVpdn0sCi0gICAge0xJU1QsIGtXZWJNSWRDaGFwdGVyVHJhY2t9LAotICAgIHtMSVNULCBrV2ViTUlkQ2hhcHRlckRpc3BsYXl9LAotICAgIHtMSVNULCBrV2ViTUlkQ2hhcFByb2Nlc3N9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NoYXB0ZXJUcmFja0lkc1tdID0gewotICAgIHtVSU5ULCBrV2ViTUlkQ2hhcHRlclRyYWNrTnVtYmVyfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDaGFwdGVyRGlzcGxheUlkc1tdID0gewotICAgIHtTVFJJTkcsIGtXZWJNSWRDaGFwU3RyaW5nfSwKLSAgICB7U1RSSU5HLCBrV2ViTUlkQ2hhcExhbmd1YWdlfSwKLSAgICB7U1RSSU5HLCBrV2ViTUlkQ2hhcENvdW50cnl9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga0NoYXBQcm9jZXNzSWRzW10gPSB7Ci0gICAge1VJTlQsIGtXZWJNSWRDaGFwUHJvY2Vzc0NvZGVjSUR9LAotICAgIHtCSU5BUlksIGtXZWJNSWRDaGFwUHJvY2Vzc1ByaXZhdGV9LAotICAgIHtMSVNULCBrV2ViTUlkQ2hhcFByb2Nlc3NDb21tYW5kfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtDaGFwUHJvY2Vzc0NvbW1hbmRJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZENoYXBQcm9jZXNzVGltZX0sIHtCSU5BUlksIGtXZWJNSWRDaGFwUHJvY2Vzc0RhdGF9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1RhZ3NJZHNbXSA9IHsKLSAgICB7TElTVCwga1dlYk1JZFRhZ30sCi19OwotCi1zdGF0aWMgY29uc3QgRWxlbWVudElkSW5mbyBrVGFnSWRzW10gPSB7Ci0gICAge0xJU1QsIGtXZWJNSWRUYXJnZXRzfSwge0xJU1QsIGtXZWJNSWRTaW1wbGVUYWd9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1RhcmdldHNJZHNbXSA9IHsKLSAgICB7VUlOVCwga1dlYk1JZFRhcmdldFR5cGVWYWx1ZX0sIHtTVFJJTkcsIGtXZWJNSWRUYXJnZXRUeXBlfSwKLSAgICB7VUlOVCwga1dlYk1JZFRhZ1RyYWNrVUlEfSwgICAgIHtVSU5ULCBrV2ViTUlkVGFnRWRpdGlvblVJRH0sCi0gICAge1VJTlQsIGtXZWJNSWRUYWdDaGFwdGVyVUlEfSwgICB7VUlOVCwga1dlYk1JZFRhZ0F0dGFjaG1lbnRVSUR9LAotfTsKLQotc3RhdGljIGNvbnN0IEVsZW1lbnRJZEluZm8ga1NpbXBsZVRhZ0lkc1tdID0gewotICAgIHtTVFJJTkcsIGtXZWJNSWRUYWdOYW1lfSwgICB7U1RSSU5HLCBrV2ViTUlkVGFnTGFuZ3VhZ2V9LAotICAgIHtVSU5ULCBrV2ViTUlkVGFnRGVmYXVsdH0sICB7U1RSSU5HLCBrV2ViTUlkVGFnU3RyaW5nfSwKLSAgICB7QklOQVJZLCBrV2ViTUlkVGFnQmluYXJ5fSwKLX07Ci0KLXN0YXRpYyBjb25zdCBFbGVtZW50SWRJbmZvIGtQcm9qZWN0aW9uSWRzW10gPSB7Ci0gICAge0ZMT0FULCBrV2ViTUlkUHJvamVjdGlvblBvc2VQaXRjaH0sIHtGTE9BVCwga1dlYk1JZFByb2plY3Rpb25Qb3NlUm9sbH0sCi0gICAge0ZMT0FULCBrV2ViTUlkUHJvamVjdGlvblBvc2VZYXd9LCAgIHtCSU5BUlksIGtXZWJNSWRQcm9qZWN0aW9uUHJpdmF0ZX0sCi0gICAge1VJTlQsIGtXZWJNSWRQcm9qZWN0aW9uVHlwZX0sCi19OwotCi0jZGVmaW5lIExJU1RfRUxFTUVOVF9JTkZPKGlkLCBsZXZlbCwgaWRfaW5mbykgXAotICB7IChpZCksIChsZXZlbCksIChpZF9pbmZvKSwgYXJyYXlzaXplKGlkX2luZm8pIH0KLQotc3RhdGljIGNvbnN0IExpc3RFbGVtZW50SW5mbyBrTGlzdEVsZW1lbnRJbmZvW10gPSB7Ci0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZENsdXN0ZXIsIDEsIGtDbHVzdGVySWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkRUJNTEhlYWRlciwgMCwga0VCTUxIZWFkZXJJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRTZWdtZW50LCAwLCBrU2VnbWVudElkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZFNlZWtIZWFkLCAxLCBrU2Vla0hlYWRJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRTZWVrLCAyLCBrU2Vla0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZEluZm8sIDEsIGtJbmZvSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ2hhcHRlclRyYW5zbGF0ZSwgMiwga0NoYXB0ZXJUcmFuc2xhdGVJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRTaWxlbnRUcmFja3MsIDIsIGtTaWxlbnRUcmFja3NJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRCbG9ja0dyb3VwLCAyLCBrQmxvY2tHcm91cElkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZEJsb2NrQWRkaXRpb25zLCAzLCBrQmxvY2tBZGRpdGlvbnNJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRCbG9ja01vcmUsIDQsIGtCbG9ja01vcmVJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRTbGljZXMsIDMsIGtTbGljZXNJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUaW1lU2xpY2UsIDQsIGtUaW1lU2xpY2VJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUcmFja3MsIDEsIGtUcmFja3NJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUcmFja0VudHJ5LCAyLCBrVHJhY2tFbnRyeUlkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZFRyYWNrVHJhbnNsYXRlLCAzLCBrVHJhY2tUcmFuc2xhdGVJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRWaWRlbywgMywga1ZpZGVvSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQXVkaW8sIDMsIGtBdWRpb0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZFRyYWNrT3BlcmF0aW9uLCAzLCBrVHJhY2tPcGVyYXRpb25JZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUcmFja0NvbWJpbmVQbGFuZXMsIDQsIGtUcmFja0NvbWJpbmVQbGFuZXNJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUcmFja1BsYW5lLCA1LCBrVHJhY2tQbGFuZUlkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZEpvaW5CbG9ja3MsIDQsIGtKb2luQmxvY2tzSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ29udGVudEVuY29kaW5ncywgMywga0NvbnRlbnRFbmNvZGluZ3NJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDb250ZW50RW5jb2RpbmcsIDQsIGtDb250ZW50RW5jb2RpbmdJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDb250ZW50Q29tcHJlc3Npb24sIDUsIGtDb250ZW50Q29tcHJlc3Npb25JZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDb250ZW50RW5jcnlwdGlvbiwgNSwga0NvbnRlbnRFbmNyeXB0aW9uSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ29udGVudEVuY0FFU1NldHRpbmdzLCA2LAotICAgICAgICAgICAgICAgICAgICAgIGtDb250ZW50RW5jQUVTU2V0dGluZ3NJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDdWVzLCAxLCBrQ3Vlc0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZEN1ZVBvaW50LCAyLCBrQ3VlUG9pbnRJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDdWVUcmFja1Bvc2l0aW9ucywgMywga0N1ZVRyYWNrUG9zaXRpb25zSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ3VlUmVmZXJlbmNlLCA0LCBrQ3VlUmVmZXJlbmNlSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQXR0YWNobWVudHMsIDEsIGtBdHRhY2htZW50c0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZEF0dGFjaGVkRmlsZSwgMiwga0F0dGFjaGVkRmlsZUlkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZENoYXB0ZXJzLCAxLCBrQ2hhcHRlcnNJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRFZGl0aW9uRW50cnksIDIsIGtFZGl0aW9uRW50cnlJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDaGFwdGVyQXRvbSwgMywga0NoYXB0ZXJBdG9tSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ2hhcHRlclRyYWNrLCA0LCBrQ2hhcHRlclRyYWNrSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkQ2hhcHRlckRpc3BsYXksIDQsIGtDaGFwdGVyRGlzcGxheUlkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZENoYXBQcm9jZXNzLCA0LCBrQ2hhcFByb2Nlc3NJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDaGFwUHJvY2Vzc0NvbW1hbmQsIDUsIGtDaGFwUHJvY2Vzc0NvbW1hbmRJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRUYWdzLCAxLCBrVGFnc0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZFRhZywgMiwga1RhZ0lkcyksCi0gICAgTElTVF9FTEVNRU5UX0lORk8oa1dlYk1JZFRhcmdldHMsIDMsIGtUYXJnZXRzSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkU2ltcGxlVGFnLCAzLCBrU2ltcGxlVGFnSWRzKSwKLSAgICBMSVNUX0VMRU1FTlRfSU5GTyhrV2ViTUlkUHJvamVjdGlvbiwgNCwga1Byb2plY3Rpb25JZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRDb2xvdXIsIDQsIGtDb2xvdXJJZHMpLAotICAgIExJU1RfRUxFTUVOVF9JTkZPKGtXZWJNSWRNYXN0ZXJpbmdNZXRhZGF0YSwgNSwga01hc3RlcmluZ01ldGFkYXRhSWRzKSwKLX07Ci0KLS8vIFBhcnNlcyBhbiBlbGVtZW50IGhlYWRlciBpZCBvciBzaXplIGZpZWxkLiBUaGVzZSBmaWVsZHMgYXJlIHZhcmlhYmxlIGxlbmd0aAotLy8gZW5jb2RlZC4gVGhlIGZpcnN0IGJ5dGUgaW5kaWNhdGVzIGhvdyBtYW55IGJ5dGVzIHRoZSBmaWVsZCBvY2N1cGllcy4KLS8vIHxidWZ8ICAtIFRoZSBidWZmZXIgdG8gcGFyc2UuCi0vLyB8c2l6ZXwgLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIHxidWZ8Ci0vLyB8bWF4X2J5dGVzfCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGUgZmllbGQgY2FuIGJlLiBJRCBmaWVsZHMKLS8vICAgICAgICAgICAgICAgc2V0IHRoaXMgdG8gNCAmIGVsZW1lbnQgc2l6ZSBmaWVsZHMgc2V0IHRoaXMgdG8gOC4gSWYgdGhlCi0vLyAgICAgICAgICAgICAgIGZpcnN0IGJ5dGUgaW5kaWNhdGVzIGEgbGFyZ2VyIGZpZWxkIHNpemUgdGhhbiB0aGlzIGl0IGlzIGEKLS8vICAgICAgICAgICAgICAgcGFyc2VyIGVycm9yLgotLy8gfG1hc2tfZmlyc3RfYnl0ZXwgLSBGb3IgZWxlbWVudCBzaXplIGZpZWxkcyB0aGUgZmllbGQgbGVuZ3RoIGVuY29kaW5nIGJpdHMKLS8vICAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBiZSBtYXNrZWQgb2ZmLiBUaGlzIHBhcmFtZXRlciBpcyB0cnVlIGZvcgotLy8gICAgICAgICAgICAgICAgICAgICBlbGVtZW50IHNpemUgZmllbGRzIGFuZCBpcyBmYWxzZSBmb3IgSUQgZmllbGQgdmFsdWVzLgotLy8KLS8vIFJldHVybnM6IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGFyc2VkIG9uIHN1Y2Nlc3MuIC0xIG9uIGVycm9yLgotc3RhdGljIGludCBQYXJzZVdlYk1FbGVtZW50SGVhZGVyRmllbGQoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfYnl0ZXMsIGJvb2wgbWFza19maXJzdF9ieXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCogbnVtKSB7Ci0gIERDSEVDSyhidWYpOwotICBEQ0hFQ0sobnVtKTsKLQotICBpZiAoc2l6ZSA8IDApIHJldHVybiAtMTsKLQotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gMDsKLQotICBpbnQgbWFzayA9IDB4ODA7Ci0gIHVpbnQ4X3QgY2ggPSBidWZbMF07Ci0gIGludCBleHRyYV9ieXRlcyA9IC0xOwotICBib29sIGFsbF9vbmVzID0gZmFsc2U7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4X2J5dGVzOyArK2kpIHsKLSAgICBpZiAoKGNoICYgbWFzaykgIT0gMCkgewotICAgICAgbWFzayA9IH5tYXNrICYgMHhmZjsKLSAgICAgICpudW0gPSBtYXNrX2ZpcnN0X2J5dGUgPyBjaCAmIG1hc2sgOiBjaDsKLSAgICAgIGFsbF9vbmVzID0gKGNoICYgbWFzaykgPT0gbWFzazsKLSAgICAgIGV4dHJhX2J5dGVzID0gaTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtYXNrID0gMHg4MCB8IG1hc2sgPj4gMTsKLSAgfQotCi0gIGlmIChleHRyYV9ieXRlcyA9PSAtMSkgcmV0dXJuIC0xOwotCi0gIC8vIFJldHVybiAwIGlmIHdlIG5lZWQgbW9yZSBkYXRhLgotICBpZiAoKDEgKyBleHRyYV9ieXRlcykgPiBzaXplKSByZXR1cm4gMDsKLQotICBpbnQgYnl0ZXNfdXNlZCA9IDE7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRyYV9ieXRlczsgKytpKSB7Ci0gICAgY2ggPSBidWZbYnl0ZXNfdXNlZCsrXTsKLSAgICBhbGxfb25lcyAmPSAoY2ggPT0gMHhmZik7Ci0gICAgKm51bSA9ICgqbnVtIDw8IDgpIHwgY2g7Ci0gIH0KLQotICBpZiAoYWxsX29uZXMpICpudW0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKTsKLQotICByZXR1cm4gYnl0ZXNfdXNlZDsKLX0KLQotaW50IFdlYk1QYXJzZUVsZW1lbnRIZWFkZXIoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwgaW50KiBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QqIGVsZW1lbnRfc2l6ZSkgewotICBEQ0hFQ0soYnVmKTsKLSAgRENIRUNLX0dFKHNpemUsIDApOwotICBEQ0hFQ0soaWQpOwotICBEQ0hFQ0soZWxlbWVudF9zaXplKTsKLQotICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gMDsKLQotICBpbnQ2NF90IHRtcCA9IDA7Ci0gIGludCBudW1faWRfYnl0ZXMgPSBQYXJzZVdlYk1FbGVtZW50SGVhZGVyRmllbGQoYnVmLCBzaXplLCA0LCBmYWxzZSwgJnRtcCk7Ci0KLSAgaWYgKG51bV9pZF9ieXRlcyA8PSAwKSByZXR1cm4gbnVtX2lkX2J5dGVzOwotCi0gIGlmICh0bXAgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpIHRtcCA9IGtXZWJNUmVzZXJ2ZWRJZDsKLQotICAqaWQgPSBzdGF0aWNfY2FzdDxpbnQ+KHRtcCk7Ci0KLSAgaW50IG51bV9zaXplX2J5dGVzID0gUGFyc2VXZWJNRWxlbWVudEhlYWRlckZpZWxkKAotICAgICAgYnVmICsgbnVtX2lkX2J5dGVzLCBzaXplIC0gbnVtX2lkX2J5dGVzLCA4LCB0cnVlLCAmdG1wKTsKLQotICBpZiAobnVtX3NpemVfYnl0ZXMgPD0gMCkgcmV0dXJuIG51bV9zaXplX2J5dGVzOwotCi0gIGlmICh0bXAgPT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpIHRtcCA9IGtXZWJNVW5rbm93blNpemU7Ci0KLSAgKmVsZW1lbnRfc2l6ZSA9IHRtcDsKLSAgRFZMT0coMykgPDwgIldlYk1QYXJzZUVsZW1lbnRIZWFkZXIoKSA6IGlkICIgPDwgc3RkOjpoZXggPDwgKmlkIDw8IHN0ZDo6ZGVjCi0gICAgICAgICAgIDw8ICIgc2l6ZSAiIDw8ICplbGVtZW50X3NpemU7Ci0gIHJldHVybiBudW1faWRfYnl0ZXMgKyBudW1fc2l6ZV9ieXRlczsKLX0KLQotLy8gRmluZHMgRWxlbWVudFR5cGUgZm9yIGEgc3BlY2lmaWMgSUQuCi1zdGF0aWMgRWxlbWVudFR5cGUgRmluZElkVHlwZShpbnQgaWQsIGNvbnN0IEVsZW1lbnRJZEluZm8qIGlkX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWRfaW5mb19jb3VudCkgewotICAvLyBDaGVjayBmb3IgZ2xvYmFsIGVsZW1lbnQgSURzIHRoYXQgY2FuIGJlIGFueXdoZXJlLgotICBpZiAoaWQgPT0ga1dlYk1JZFZvaWQgfHwgaWQgPT0ga1dlYk1JZENSQzMyKSByZXR1cm4gU0tJUDsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGlkX2luZm9fY291bnQ7ICsraSkgewotICAgIGlmIChpZCA9PSBpZF9pbmZvW2ldLmlkXykgcmV0dXJuIGlkX2luZm9baV0udHlwZV87Ci0gIH0KLQotICByZXR1cm4gVU5LTk9XTjsKLX0KLQotLy8gRmluZHMgTGlzdEVsZW1lbnRJbmZvIGZvciBhIHNwZWNpZmljIElELgotc3RhdGljIGNvbnN0IExpc3RFbGVtZW50SW5mbyogRmluZExpc3RJbmZvKGludCBpZCkgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShrTGlzdEVsZW1lbnRJbmZvKTsgKytpKSB7Ci0gICAgaWYgKGlkID09IGtMaXN0RWxlbWVudEluZm9baV0uaWRfKSByZXR1cm4gJmtMaXN0RWxlbWVudEluZm9baV07Ci0gIH0KLQotICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGludCBGaW5kTGlzdExldmVsKGludCBpZCkgewotICBjb25zdCBMaXN0RWxlbWVudEluZm8qIGxpc3RfaW5mbyA9IEZpbmRMaXN0SW5mbyhpZCk7Ci0gIGlmIChsaXN0X2luZm8pIHJldHVybiBsaXN0X2luZm8tPmxldmVsXzsKLQotICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgUGFyc2VVSW50KGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUsIGludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgIFdlYk1QYXJzZXJDbGllbnQqIGNsaWVudCkgewotICBpZiAoKHNpemUgPD0gMCkgfHwgKHNpemUgPiA4KSkgcmV0dXJuIC0xOwotCi0gIC8vIFJlYWQgaW4gdGhlIGJpZy1lbmRpYW4gaW50ZWdlci4KLSAgdWludDY0X3QgdmFsdWUgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgdmFsdWUgPSAodmFsdWUgPDwgOCkgfCBidWZbaV07Ci0KLSAgLy8gV2UgdXNlIGludDY0X3QgaW4gcGxhY2Ugb2YgdWludDY0X3QgZXZlcnl3aGVyZSBmb3IgY29udmVuaWVuY2UuICBTZWUgdGhpcwotICAvLyBidWcKLSAgLy8gZm9yIG1vcmUgZGV0YWlsczogaHR0cDovL2NyYnVnLmNvbS8zNjY3NTAjYzMKLSAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSA8IDApIHJldHVybiAtMTsKLQotICBpZiAoIWNsaWVudC0+T25VSW50KGlkLCB2YWx1ZSkpIHJldHVybiAtMTsKLQotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGludCBQYXJzZUZsb2F0KGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUsIGludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICBXZWJNUGFyc2VyQ2xpZW50KiBjbGllbnQpIHsKLSAgaWYgKChzaXplICE9IDQpICYmIChzaXplICE9IDgpKSByZXR1cm4gLTE7Ci0KLSAgZG91YmxlIHZhbHVlID0gLTE7Ci0KLSAgLy8gUmVhZCB0aGUgYnl0ZXMgZnJvbSBiaWctZW5kaWFuIGZvcm0gaW50byBhIG5hdGl2ZSBlbmRpYW4gaW50ZWdlci4KLSAgaW50NjRfdCB0bXAgPSAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgdG1wID0gKHRtcCA8PCA4KSB8IGJ1ZltpXTsKLQotICAvLyBVc2UgYSB1bmlvbiB0byBjb252ZXJ0IHRoZSBpbnRlZ2VyIGJpdCBwYXR0ZXJuIGludG8gYSBmbG9hdGluZyBwb2ludAotICAvLyBudW1iZXIuCi0gIGlmIChzaXplID09IDQpIHsKLSAgICB1bmlvbiB7Ci0gICAgICBpbnQzMl90IHNyYzsKLSAgICAgIGZsb2F0IGRzdDsKLSAgICB9IHRtcDI7Ci0gICAgdG1wMi5zcmMgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pih0bXApOwotICAgIHZhbHVlID0gdG1wMi5kc3Q7Ci0gIH0gZWxzZSBpZiAoc2l6ZSA9PSA4KSB7Ci0gICAgdW5pb24gewotICAgICAgaW50NjRfdCBzcmM7Ci0gICAgICBkb3VibGUgZHN0OwotICAgIH0gdG1wMjsKLSAgICB0bXAyLnNyYyA9IHRtcDsKLSAgICB2YWx1ZSA9IHRtcDIuZHN0OwotICB9IGVsc2UgewotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlmICghY2xpZW50LT5PbkZsb2F0KGlkLCB2YWx1ZSkpIHJldHVybiAtMTsKLQotICByZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIGludCBQYXJzZUJpbmFyeShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplLCBpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIFdlYk1QYXJzZXJDbGllbnQqIGNsaWVudCkgewotICByZXR1cm4gY2xpZW50LT5PbkJpbmFyeShpZCwgYnVmLCBzaXplKSA/IHNpemUgOiAtMTsKLX0KLQotc3RhdGljIGludCBQYXJzZVN0cmluZyhjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplLCBpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIFdlYk1QYXJzZXJDbGllbnQqIGNsaWVudCkgewotICBjb25zdCB1aW50OF90KiBlbmQgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4obWVtY2hyKGJ1ZiwgJ1wwJywgc2l6ZSkpOwotICBpbnQgbGVuZ3RoID0gKGVuZCAhPSBOVUxMKSA/IHN0YXRpY19jYXN0PGludD4oZW5kIC0gYnVmKSA6IHNpemU7Ci0gIHN0ZDo6c3RyaW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihidWYpLCBsZW5ndGgpOwotICByZXR1cm4gY2xpZW50LT5PblN0cmluZyhpZCwgc3RyKSA/IHNpemUgOiAtMTsKLX0KLQotc3RhdGljIGludCBQYXJzZU5vbkxpc3RFbGVtZW50KEVsZW1lbnRUeXBlIHR5cGUsIGludCBpZCwgaW50NjRfdCBlbGVtZW50X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJNUGFyc2VyQ2xpZW50KiBjbGllbnQpIHsKLSAgRENIRUNLX0dFKHNpemUsIGVsZW1lbnRfc2l6ZSk7Ci0KLSAgaW50IHJlc3VsdCA9IC0xOwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIExJU1Q6Ci0gICAgICBOT1RJTVBMRU1FTlRFRCgpOwotICAgICAgcmVzdWx0ID0gLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFVJTlQ6Ci0gICAgICByZXN1bHQgPSBQYXJzZVVJbnQoYnVmLCBlbGVtZW50X3NpemUsIGlkLCBjbGllbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGTE9BVDoKLSAgICAgIHJlc3VsdCA9IFBhcnNlRmxvYXQoYnVmLCBlbGVtZW50X3NpemUsIGlkLCBjbGllbnQpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCSU5BUlk6Ci0gICAgICByZXN1bHQgPSBQYXJzZUJpbmFyeShidWYsIGVsZW1lbnRfc2l6ZSwgaWQsIGNsaWVudCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIFNUUklORzoKLSAgICAgIHJlc3VsdCA9IFBhcnNlU3RyaW5nKGJ1ZiwgZWxlbWVudF9zaXplLCBpZCwgY2xpZW50KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgU0tJUDoKLSAgICAgIHJlc3VsdCA9IGVsZW1lbnRfc2l6ZTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgVU5LTk9XTjoKLSAgICAgIERWTE9HKDEpIDw8ICJVbmhhbmRsZWQgSUQgdHlwZSAiIDw8IHR5cGU7Ci0gICAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBEQ0hFQ0tfTEUocmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViTVBhcnNlckNsaWVudDo6V2ViTVBhcnNlckNsaWVudCgpIHt9Ci1XZWJNUGFyc2VyQ2xpZW50Ojp+V2ViTVBhcnNlckNsaWVudCgpIHt9Ci0KLVdlYk1QYXJzZXJDbGllbnQqIFdlYk1QYXJzZXJDbGllbnQ6Ok9uTGlzdFN0YXJ0KGludCBpZCkgewotICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBsaXN0IGVsZW1lbnQgc3RhcnQgd2l0aCBJRCAiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICByZXR1cm4gTlVMTDsKLX0KLQotYm9vbCBXZWJNUGFyc2VyQ2xpZW50OjpPbkxpc3RFbmQoaW50IGlkKSB7Ci0gIERWTE9HKDEpIDw8ICJVbmV4cGVjdGVkIGxpc3QgZWxlbWVudCBlbmQgd2l0aCBJRCAiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViTVBhcnNlckNsaWVudDo6T25VSW50KGludCBpZCwgaW50NjRfdCB2YWwpIHsKLSAgRFZMT0coMSkgPDwgIlVuZXhwZWN0ZWQgdW5zaWduZWQgaW50ZWdlciBlbGVtZW50IHdpdGggSUQgIiA8PCBzdGQ6OmhleCA8PCBpZDsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFdlYk1QYXJzZXJDbGllbnQ6Ok9uRmxvYXQoaW50IGlkLCBkb3VibGUgdmFsKSB7Ci0gIERWTE9HKDEpIDw8ICJVbmV4cGVjdGVkIGZsb2F0IGVsZW1lbnQgd2l0aCBJRCAiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViTVBhcnNlckNsaWVudDo6T25CaW5hcnkoaW50IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBEVkxPRygxKSA8PCAiVW5leHBlY3RlZCBiaW5hcnkgZWxlbWVudCB3aXRoIElEICIgPDwgc3RkOjpoZXggPDwgaWQ7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBXZWJNUGFyc2VyQ2xpZW50OjpPblN0cmluZyhpbnQgaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgRFZMT0coMSkgPDwgIlVuZXhwZWN0ZWQgc3RyaW5nIGVsZW1lbnQgd2l0aCBJRCAiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLVdlYk1MaXN0UGFyc2VyOjpXZWJNTGlzdFBhcnNlcihpbnQgaWQsIFdlYk1QYXJzZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IHN0YXRlXyhORUVEX0xJU1RfSEVBREVSKSwKLSAgICAgIHJvb3RfaWRfKGlkKSwKLSAgICAgIHJvb3RfbGV2ZWxfKEZpbmRMaXN0TGV2ZWwoaWQpKSwKLSAgICAgIHJvb3RfY2xpZW50XyhjbGllbnQpIHsKLSAgRENIRUNLX0dFKHJvb3RfbGV2ZWxfLCAwKTsKLSAgRENIRUNLKGNsaWVudCk7Ci19Ci0KLVdlYk1MaXN0UGFyc2VyOjp+V2ViTUxpc3RQYXJzZXIoKSB7fQotCi12b2lkIFdlYk1MaXN0UGFyc2VyOjpSZXNldCgpIHsKLSAgQ2hhbmdlU3RhdGUoTkVFRF9MSVNUX0hFQURFUik7Ci0gIGxpc3Rfc3RhdGVfc3RhY2tfLmNsZWFyKCk7Ci19Ci0KLWludCBXZWJNTGlzdFBhcnNlcjo6UGFyc2UoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSkgewotICBEQ0hFQ0soYnVmKTsKLQotICBpZiAoc2l6ZSA8IDAgfHwgc3RhdGVfID09IFBBUlNFX0VSUk9SIHx8IHN0YXRlXyA9PSBET05FX1BBUlNJTkdfTElTVCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIDA7Ci0KLSAgY29uc3QgdWludDhfdCogY3VyID0gYnVmOwotICBpbnQgY3VyX3NpemUgPSBzaXplOwotICBpbnQgYnl0ZXNfcGFyc2VkID0gMDsKLQotICB3aGlsZSAoY3VyX3NpemUgPiAwICYmIHN0YXRlXyAhPSBQQVJTRV9FUlJPUiAmJiBzdGF0ZV8gIT0gRE9ORV9QQVJTSU5HX0xJU1QpIHsKLSAgICBpbnQgZWxlbWVudF9pZCA9IDA7Ci0gICAgaW50NjRfdCBlbGVtZW50X3NpemUgPSAwOwotICAgIGludCByZXN1bHQgPQotICAgICAgICBXZWJNUGFyc2VFbGVtZW50SGVhZGVyKGN1ciwgY3VyX3NpemUsICZlbGVtZW50X2lkLCAmZWxlbWVudF9zaXplKTsKLQotICAgIGlmIChyZXN1bHQgPCAwKSByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKHJlc3VsdCA9PSAwKSByZXR1cm4gYnl0ZXNfcGFyc2VkOwotCi0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2UgTkVFRF9MSVNUX0hFQURFUjogewotICAgICAgICBpZiAoZWxlbWVudF9pZCAhPSByb290X2lkXykgewotICAgICAgICAgIENoYW5nZVN0YXRlKFBBUlNFX0VSUk9SKTsKLSAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IGFsbG93IFNlZ21lbnQgJiBDbHVzdGVyIHRvIGhhdmUgYW4gdW5rbm93biBzaXplLgotICAgICAgICBpZiAoZWxlbWVudF9zaXplID09IGtXZWJNVW5rbm93blNpemUgJiYKLSAgICAgICAgICAgIChlbGVtZW50X2lkICE9IGtXZWJNSWRTZWdtZW50KSAmJiAoZWxlbWVudF9pZCAhPSBrV2ViTUlkQ2x1c3RlcikpIHsKLSAgICAgICAgICBDaGFuZ2VTdGF0ZShQQVJTRV9FUlJPUik7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2hhbmdlU3RhdGUoSU5TSURFX0xJU1QpOwotICAgICAgICBpZiAoIU9uTGlzdFN0YXJ0KHJvb3RfaWRfLCBlbGVtZW50X3NpemUpKSByZXR1cm4gLTE7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGNhc2UgSU5TSURFX0xJU1Q6IHsKLSAgICAgICAgaW50IGhlYWRlcl9zaXplID0gcmVzdWx0OwotICAgICAgICBjb25zdCB1aW50OF90KiBlbGVtZW50X2RhdGEgPSBjdXIgKyBoZWFkZXJfc2l6ZTsKLSAgICAgICAgaW50IGVsZW1lbnRfZGF0YV9zaXplID0gY3VyX3NpemUgLSBoZWFkZXJfc2l6ZTsKLQotICAgICAgICBpZiAoZWxlbWVudF9zaXplIDwgZWxlbWVudF9kYXRhX3NpemUpIGVsZW1lbnRfZGF0YV9zaXplID0gZWxlbWVudF9zaXplOwotCi0gICAgICAgIHJlc3VsdCA9IFBhcnNlTGlzdEVsZW1lbnQoaGVhZGVyX3NpemUsIGVsZW1lbnRfaWQsIGVsZW1lbnRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50X2RhdGEsIGVsZW1lbnRfZGF0YV9zaXplKTsKLQotICAgICAgICBEQ0hFQ0tfTEUocmVzdWx0LCBoZWFkZXJfc2l6ZSArIGVsZW1lbnRfZGF0YV9zaXplKTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgICBDaGFuZ2VTdGF0ZShQQVJTRV9FUlJPUik7Ci0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSByZXR1cm4gYnl0ZXNfcGFyc2VkOwotCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSBET05FX1BBUlNJTkdfTElTVDoKLSAgICAgIGNhc2UgUEFSU0VfRVJST1I6Ci0gICAgICAgIC8vIFNob3VsZG4ndCBiZSBhYmxlIHRvIGdldCBoZXJlLgotICAgICAgICBOT1RJTVBMRU1FTlRFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjdXIgKz0gcmVzdWx0OwotICAgIGN1cl9zaXplIC09IHJlc3VsdDsKLSAgICBieXRlc19wYXJzZWQgKz0gcmVzdWx0OwotICB9Ci0KLSAgcmV0dXJuIChzdGF0ZV8gPT0gUEFSU0VfRVJST1IpID8gLTEgOiBieXRlc19wYXJzZWQ7Ci19Ci0KLWJvb2wgV2ViTUxpc3RQYXJzZXI6OklzUGFyc2luZ0NvbXBsZXRlKCkgY29uc3QgewotICByZXR1cm4gc3RhdGVfID09IERPTkVfUEFSU0lOR19MSVNUOwotfQotCi12b2lkIFdlYk1MaXN0UGFyc2VyOjpDaGFuZ2VTdGF0ZShTdGF0ZSBuZXdfc3RhdGUpIHsgc3RhdGVfID0gbmV3X3N0YXRlOyB9Ci0KLWludCBXZWJNTGlzdFBhcnNlcjo6UGFyc2VMaXN0RWxlbWVudChpbnQgaGVhZGVyX3NpemUsIGludCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGVsZW1lbnRfc2l6ZSwgY29uc3QgdWludDhfdCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSkgewotICBEQ0hFQ0tfR1QobGlzdF9zdGF0ZV9zdGFja18uc2l6ZSgpLCAwdSk7Ci0KLSAgTGlzdFN0YXRlJiBsaXN0X3N0YXRlID0gbGlzdF9zdGF0ZV9zdGFja18uYmFjaygpOwotICBEQ0hFQ0sobGlzdF9zdGF0ZS5lbGVtZW50X2luZm9fKTsKLQotICBjb25zdCBMaXN0RWxlbWVudEluZm8qIGVsZW1lbnRfaW5mbyA9IGxpc3Rfc3RhdGUuZWxlbWVudF9pbmZvXzsKLSAgRWxlbWVudFR5cGUgaWRfdHlwZSA9Ci0gICAgICBGaW5kSWRUeXBlKGlkLCBlbGVtZW50X2luZm8tPmlkX2luZm9fLCBlbGVtZW50X2luZm8tPmlkX2luZm9fY291bnRfKTsKLQotICAvLyBVbmV4cGVjdGVkIElELgotICBpZiAoaWRfdHlwZSA9PSBVTktOT1dOKSB7Ci0gICAgaWYgKGxpc3Rfc3RhdGUuc2l6ZV8gIT0ga1dlYk1Vbmtub3duU2l6ZSB8fAotICAgICAgICAhSXNTaWJsaW5nT3JBbmNlc3RvcihsaXN0X3N0YXRlLmlkXywgaWQpKSB7Ci0gICAgICBEVkxPRygxKSA8PCAiTm8gRWxlbWVudFR5cGUgaW5mbyBmb3IgSUQgMHgiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhIGxpc3Qgb2YgdW5rbm93biBzaXplLiBVcGRhdGUgdGhlIHNpemUgbm93IHRoYXQKLSAgICAvLyB3ZSBrbm93IGl0IGFuZCBkaXNwYXRjaCB0aGUgZW5kIG9mIGxpc3QgY2FsbHMuCi0gICAgbGlzdF9zdGF0ZS5zaXplXyA9IGxpc3Rfc3RhdGUuYnl0ZXNfcGFyc2VkXzsKLQotICAgIGlmICghT25MaXN0RW5kKCkpIHJldHVybiAtMTsKLQotICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbGwgb3BlbiBsaXN0cyBoYXZlIGVuZGVkLgotICAgIGlmIChsaXN0X3N0YXRlX3N0YWNrXy5zaXplKCkgPT0gMCkgcmV0dXJuIDA7Ci0KLSAgICBsaXN0X3N0YXRlID0gbGlzdF9zdGF0ZV9zdGFja18uYmFjaygpOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSB3aG9sZSBlbGVtZW50IGNhbiBmaXQgaW5zaWRlIHRoZSBjdXJyZW50IGxpc3QuCi0gIGludDY0X3QgdG90YWxfZWxlbWVudF9zaXplID0gaGVhZGVyX3NpemUgKyBlbGVtZW50X3NpemU7Ci0gIGlmIChsaXN0X3N0YXRlLnNpemVfICE9IGtXZWJNVW5rbm93blNpemUgJiYKLSAgICAgIGxpc3Rfc3RhdGUuc2l6ZV8gPCBsaXN0X3N0YXRlLmJ5dGVzX3BhcnNlZF8gKyB0b3RhbF9lbGVtZW50X3NpemUpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpZiAoaWRfdHlwZSA9PSBMSVNUKSB7Ci0gICAgbGlzdF9zdGF0ZS5ieXRlc19wYXJzZWRfICs9IGhlYWRlcl9zaXplOwotCi0gICAgaWYgKCFPbkxpc3RTdGFydChpZCwgZWxlbWVudF9zaXplKSkgcmV0dXJuIC0xOwotICAgIHJldHVybiBoZWFkZXJfc2l6ZTsKLSAgfQotCi0gIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBlbnRpcmUgZWxlbWVudCBiZWZvcmUgdHJ5aW5nIHRvIHBhcnNlIGEgbm9uLWxpc3QKLSAgLy8gZWxlbWVudC4KLSAgaWYgKHNpemUgPCBlbGVtZW50X3NpemUpIHJldHVybiAwOwotCi0gIGludCBieXRlc19wYXJzZWQgPSBQYXJzZU5vbkxpc3RFbGVtZW50KGlkX3R5cGUsIGlkLCBlbGVtZW50X3NpemUsIGRhdGEsIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfc3RhdGUuY2xpZW50Xyk7Ci0gIERDSEVDS19MRShieXRlc19wYXJzZWQsIHNpemUpOwotCi0gIC8vIFJldHVybiBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB3ZSBuZWVkIG1vcmUgZGF0YS4KLSAgLy8gTm90ZTogYnl0ZXNfcGFyc2VkIGlzIDAgZm9yIGEgc3VjY2Vzc2Z1bCBwYXJzZSBvZiBhIHNpemUgMCBlbGVtZW50LiBXZQotICAvLyBuZWVkIHRvIGNoZWNrIHRoZSBlbGVtZW50X3NpemUgdG8gZGlzYW1iaWd1YXRlIHRoZSAibmVlZCBtb3JlIGRhdGEiIGNhc2UKLSAgLy8gZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2UuCi0gIGlmIChieXRlc19wYXJzZWQgPCAwIHx8IChieXRlc19wYXJzZWQgPT0gMCAmJiBlbGVtZW50X3NpemUgIT0gMCkpCi0gICAgcmV0dXJuIGJ5dGVzX3BhcnNlZDsKLQotICBpbnQgcmVzdWx0ID0gaGVhZGVyX3NpemUgKyBieXRlc19wYXJzZWQ7Ci0gIGxpc3Rfc3RhdGUuYnl0ZXNfcGFyc2VkXyArPSByZXN1bHQ7Ci0KLSAgLy8gU2VlIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpc3QuCi0gIGlmIChsaXN0X3N0YXRlLmJ5dGVzX3BhcnNlZF8gPT0gbGlzdF9zdGF0ZS5zaXplXykgewotICAgIGlmICghT25MaXN0RW5kKCkpIHJldHVybiAtMTsKLSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgV2ViTUxpc3RQYXJzZXI6Ok9uTGlzdFN0YXJ0KGludCBpZCwgaW50NjRfdCBzaXplKSB7Ci0gIGNvbnN0IExpc3RFbGVtZW50SW5mbyogZWxlbWVudF9pbmZvID0gRmluZExpc3RJbmZvKGlkKTsKLSAgaWYgKCFlbGVtZW50X2luZm8pIHJldHVybiBmYWxzZTsKLQotICBpbnQgY3VycmVudF9sZXZlbCA9IHJvb3RfbGV2ZWxfICsgbGlzdF9zdGF0ZV9zdGFja18uc2l6ZSgpIC0gMTsKLSAgaWYgKGN1cnJlbnRfbGV2ZWwgKyAxICE9IGVsZW1lbnRfaW5mby0+bGV2ZWxfKSByZXR1cm4gZmFsc2U7Ci0KLSAgV2ViTVBhcnNlckNsaWVudCogY3VycmVudF9saXN0X2NsaWVudCA9IE5VTEw7Ci0gIGlmICghbGlzdF9zdGF0ZV9zdGFja18uZW1wdHkoKSkgewotICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV3IGxpc3QgZG9lc24ndCBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGlzdC4KLSAgICBMaXN0U3RhdGUgY3VycmVudF9saXN0X3N0YXRlID0gbGlzdF9zdGF0ZV9zdGFja18uYmFjaygpOwotICAgIGlmIChjdXJyZW50X2xpc3Rfc3RhdGUuc2l6ZV8gIT0ga1dlYk1Vbmtub3duU2l6ZSAmJgotICAgICAgICBjdXJyZW50X2xpc3Rfc3RhdGUuc2l6ZV8gPCBjdXJyZW50X2xpc3Rfc3RhdGUuYnl0ZXNfcGFyc2VkXyArIHNpemUpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY3VycmVudF9saXN0X2NsaWVudCA9IGN1cnJlbnRfbGlzdF9zdGF0ZS5jbGllbnRfOwotICB9IGVsc2UgewotICAgIGN1cnJlbnRfbGlzdF9jbGllbnQgPSByb290X2NsaWVudF87Ci0gIH0KLQotICBXZWJNUGFyc2VyQ2xpZW50KiBuZXdfbGlzdF9jbGllbnQgPSBjdXJyZW50X2xpc3RfY2xpZW50LT5Pbkxpc3RTdGFydChpZCk7Ci0gIGlmICghbmV3X2xpc3RfY2xpZW50KSByZXR1cm4gZmFsc2U7Ci0KLSAgTGlzdFN0YXRlIG5ld19saXN0X3N0YXRlID0ge2lkLCBzaXplLCAwLCBlbGVtZW50X2luZm8sIG5ld19saXN0X2NsaWVudH07Ci0gIGxpc3Rfc3RhdGVfc3RhY2tfLnB1c2hfYmFjayhuZXdfbGlzdF9zdGF0ZSk7Ci0KLSAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIE9uTGlzdEVuZCgpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1MaXN0UGFyc2VyOjpPbkxpc3RFbmQoKSB7Ci0gIGludCBsaXN0c19lbmRlZCA9IDA7Ci0gIGZvciAoOyAhbGlzdF9zdGF0ZV9zdGFja18uZW1wdHkoKTsgKytsaXN0c19lbmRlZCkgewotICAgIGNvbnN0IExpc3RTdGF0ZSYgbGlzdF9zdGF0ZSA9IGxpc3Rfc3RhdGVfc3RhY2tfLmJhY2soKTsKLSAgICBpbnQ2NF90IGJ5dGVzX3BhcnNlZCA9IGxpc3Rfc3RhdGUuYnl0ZXNfcGFyc2VkXzsKLSAgICBpbnQgaWQgPSBsaXN0X3N0YXRlLmlkXzsKLQotICAgIGlmIChieXRlc19wYXJzZWQgIT0gbGlzdF9zdGF0ZS5zaXplXykgYnJlYWs7Ci0KLSAgICBsaXN0X3N0YXRlX3N0YWNrXy5wb3BfYmFjaygpOwotCi0gICAgV2ViTVBhcnNlckNsaWVudCogY2xpZW50ID0gTlVMTDsKLSAgICBpZiAoIWxpc3Rfc3RhdGVfc3RhY2tfLmVtcHR5KCkpIHsKLSAgICAgIC8vIFVwZGF0ZSB0aGUgYnl0ZXNfcGFyc2VkXyBmb3IgdGhlIHBhcmVudCBlbGVtZW50LgotICAgICAgbGlzdF9zdGF0ZV9zdGFja18uYmFjaygpLmJ5dGVzX3BhcnNlZF8gKz0gYnl0ZXNfcGFyc2VkOwotICAgICAgY2xpZW50ID0gbGlzdF9zdGF0ZV9zdGFja18uYmFjaygpLmNsaWVudF87Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNsaWVudCA9IHJvb3RfY2xpZW50XzsKLSAgICB9Ci0KLSAgICBpZiAoIWNsaWVudC0+T25MaXN0RW5kKGlkKSkgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgRENIRUNLX0dFKGxpc3RzX2VuZGVkLCAxKTsKLQotICBpZiAobGlzdF9zdGF0ZV9zdGFja18uZW1wdHkoKSkgQ2hhbmdlU3RhdGUoRE9ORV9QQVJTSU5HX0xJU1QpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1MaXN0UGFyc2VyOjpJc1NpYmxpbmdPckFuY2VzdG9yKGludCBpZF9hLCBpbnQgaWRfYikgY29uc3QgewotICBEQ0hFQ0soKGlkX2EgPT0ga1dlYk1JZFNlZ21lbnQpIHx8IChpZF9hID09IGtXZWJNSWRDbHVzdGVyKSk7Ci0KLSAgaWYgKGlkX2EgPT0ga1dlYk1JZENsdXN0ZXIpIHsKLSAgICAvLyBrV2ViTUlkQ2x1c3RlciBzaWJsaW5ncy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShrU2VnbWVudElkcyk7IGkrKykgewotICAgICAgaWYgKGtTZWdtZW50SWRzW2ldLmlkXyA9PSBpZF9iKSByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBrV2ViTUlkU2VnbWVudCBzaWJsaW5ncy4KLSAgcmV0dXJuICgoaWRfYiA9PSBrV2ViTUlkU2VnbWVudCkgfHwgKGlkX2IgPT0ga1dlYk1JZEVCTUxIZWFkZXIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZjQ2NTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9QQVJTRVJfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi0vLyBJbnRlcmZhY2UgZm9yIHJlY2VpdmluZyBXZWJNIHBhcnNlciBldmVudHMuCi0vLwotLy8gRWFjaCBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgcGFyc2VkLgotLy8gVGhlIElEIG9mIHRoZSBlbGVtZW50IHRoYXQgd2FzIHBhcnNlZCBpcyBnaXZlbiBhbG9uZyB3aXRoIHRoZSB2YWx1ZQotLy8gc3RvcmVkIGluIHRoZSBlbGVtZW50LiBMaXN0IGVsZW1lbnRzIGdlbmVyYXRlIGNhbGxzIGF0IHRoZSBzdGFydCBhbmQKLS8vIGVuZCBvZiB0aGUgbGlzdC4gQW55IHBvaW50ZXJzIHBhc3NlZCB0byB0aGVzZSBtZXRob2RzIGFyZSBvbmx5IGd1YXJhbnRlZWQKLS8vIHRvIGJlIHZhbGlkIGZvciB0aGUgbGlmZSBvZiB0aGF0IGNhbGwuIEVhY2ggbWV0aG9kIChleGNlcHQgZm9yIE9uTGlzdFN0YXJ0KQotLy8gcmV0dXJucyBhIGJvb2wgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyc2VkIGRhdGEgaXMgdmFsaWQuIE9uTGlzdFN0YXJ0Ci0vLyByZXR1cm5zIGEgcG9pbnRlciB0byBhIFdlYk1QYXJzZXJDbGllbnQgb2JqZWN0LCB3aGljaCBzaG91bGQgYmUgdXNlZCB0bwotLy8gaGFuZGxlIGVsZW1lbnRzIHBhcnNlZCBvdXQgb2YgdGhlIGxpc3QgYmVpbmcgc3RhcnRlZC4gSWYgZmFsc2UgKG9yIE5VTEwgYnkKLS8vIE9uTGlzdFN0YXJ0KSBpcyByZXR1cm5lZCB0aGVuIHRoZSBwYXJzZSBpcyBpbW1lZGlhdGVseSB0ZXJtaW5hdGVkIGFuZCBhbgotLy8gZXJyb3IgaXMgcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci4KLWNsYXNzIE1FRElBX0VYUE9SVCBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgfldlYk1QYXJzZXJDbGllbnQoKTsKLQotICB2aXJ0dWFsIFdlYk1QYXJzZXJDbGllbnQqIE9uTGlzdFN0YXJ0KGludCBpZCk7Ci0gIHZpcnR1YWwgYm9vbCBPbkxpc3RFbmQoaW50IGlkKTsKLSAgdmlydHVhbCBib29sIE9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKTsKLSAgdmlydHVhbCBib29sIE9uRmxvYXQoaW50IGlkLCBkb3VibGUgdmFsKTsKLSAgdmlydHVhbCBib29sIE9uQmluYXJ5KGludCBpZCwgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpOwotICB2aXJ0dWFsIGJvb2wgT25TdHJpbmcoaW50IGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgc3RyKTsKLQotIHByb3RlY3RlZDoKLSAgV2ViTVBhcnNlckNsaWVudCgpOwotCi0gcHJpdmF0ZToKLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1QYXJzZXJDbGllbnQpOwotfTsKLQotc3RydWN0IExpc3RFbGVtZW50SW5mbzsKLQotLy8gUGFyc2VzIGEgV2ViTSBsaXN0IGVsZW1lbnQgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4uIFRoaXMKLS8vIGNsYXNzIHN1cHBvcnRzIGluY3JlbWVudGFsIHBhcnNpbmcgb2YgdGhlIGxpc3Qgc28gUGFyc2UoKQotLy8gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIHBpZWNlcyBvZiB0aGUgbGlzdC4KLS8vIElzUGFyc2luZ0NvbXBsZXRlKCkgd2lsbCByZXR1cm4gdHJ1ZSBvbmNlIHRoZSBlbnRpcmUgbGlzdCBoYXMKLS8vIGJlZW4gcGFyc2VkLgotY2xhc3MgTUVESUFfRVhQT1JUIFdlYk1MaXN0UGFyc2VyIHsKLSBwdWJsaWM6Ci0gIC8vIHxpZHwgLSBFbGVtZW50IElEIG9mIHRoZSBsaXN0IHdlIGludGVuZCB0byBwYXJzZS4KLSAgLy8gfGNsaWVudHwgLSBDYWxsZWQgYXMgZGlmZmVyZW50IGVsZW1lbnRzIGluIHRoZSBsaXN0IGFyZSBwYXJzZWQuCi0gIFdlYk1MaXN0UGFyc2VyKGludCBpZCwgV2ViTVBhcnNlckNsaWVudCogY2xpZW50KTsKLSAgfldlYk1MaXN0UGFyc2VyKCk7Ci0KLSAgLy8gUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgcGFyc2VyIHNvIGl0IGNhbiBzdGFydCBwYXJzaW5nIGEgbmV3IGxpc3QuCi0gIHZvaWQgUmVzZXQoKTsKLQotICAvLyBQYXJzZXMgbGlzdCBkYXRhIGNvbnRhaW5lZCBpbiB8YnVmfC4KLSAgLy8KLSAgLy8gUmV0dXJucyA8IDAgaWYgdGhlIHBhcnNlIGZhaWxzLgotICAvLyBSZXR1cm5zIDAgaWYgbW9yZSBkYXRhIGlzIG5lZWRlZC4KLSAgLy8gUmV0dXJuaW5nID4gMCBpbmRpY2F0ZXMgc3VjY2VzcyAmIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFyc2VkLgotICBpbnQgUGFyc2UoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRpcmUgbGlzdCBoYXMgYmVlbiBwYXJzZWQuCi0gIGJvb2wgSXNQYXJzaW5nQ29tcGxldGUoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGVudW0gU3RhdGUgewotICAgIE5FRURfTElTVF9IRUFERVIsCi0gICAgSU5TSURFX0xJU1QsCi0gICAgRE9ORV9QQVJTSU5HX0xJU1QsCi0gICAgUEFSU0VfRVJST1IsCi0gIH07Ci0KLSAgc3RydWN0IExpc3RTdGF0ZSB7Ci0gICAgaW50IGlkXzsKLSAgICBpbnQ2NF90IHNpemVfOwotICAgIGludDY0X3QgYnl0ZXNfcGFyc2VkXzsKLSAgICBjb25zdCBMaXN0RWxlbWVudEluZm8qIGVsZW1lbnRfaW5mb187Ci0gICAgV2ViTVBhcnNlckNsaWVudCogY2xpZW50XzsKLSAgfTsKLQotICB2b2lkIENoYW5nZVN0YXRlKFN0YXRlIG5ld19zdGF0ZSk7Ci0KLSAgLy8gUGFyc2VzIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgbGlzdC4KLSAgLy8KLSAgLy8gfGhlYWRlcl9zaXplfCAtIFRoZSBzaXplIG9mIHRoZSBlbGVtZW50IGhlYWRlcgotICAvLyB8aWR8IC0gVGhlIElEIG9mIHRoZSBlbGVtZW50IGJlaW5nIHBhcnNlZC4KLSAgLy8gfGVsZW1lbnRfc2l6ZXwgLSBUaGUgc2l6ZSBvZiB0aGUgZWxlbWVudCBib2R5LgotICAvLyB8ZGF0YXwgLSBQb2ludGVyIHRvIHRoZSBlbGVtZW50IGNvbnRlbnRzLgotICAvLyB8c2l6ZXwgLSBOdW1iZXIgb2YgYnl0ZXMgaW4gfGRhdGF8Ci0gIC8vIHxjbGllbnR8IC0gQ2xpZW50IHRvIHBhc3MgdGhlIHBhcnNlZCBkYXRhIHRvLgotICAvLwotICAvLyBSZXR1cm5zIDwgMCBpZiB0aGUgcGFyc2UgZmFpbHMuCi0gIC8vIFJldHVybnMgMCBpZiBtb3JlIGRhdGEgaXMgbmVlZGVkLgotICAvLyBSZXR1cm5pbmcgPiAwIGluZGljYXRlcyBzdWNjZXNzICYgdGhlIG51bWJlciBvZiBieXRlcyBwYXJzZWQuCi0gIGludCBQYXJzZUxpc3RFbGVtZW50KGludCBoZWFkZXJfc2l6ZSwgaW50IGlkLCBpbnQ2NF90IGVsZW1lbnRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpOwotCi0gIC8vIENhbGxlZCB3aGVuIHN0YXJ0aW5nIHRvIHBhcnNlIGEgbmV3IGxpc3QuCi0gIC8vCi0gIC8vIHxpZHwgLSBUaGUgSUQgb2YgdGhlIG5ldyBsaXN0LgotICAvLyB8c2l6ZXwgLSBUaGUgc2l6ZSBvZiB0aGUgbmV3IGxpc3QuCi0gIC8vIHxjbGllbnR8IC0gVGhlIGNsaWVudCBvYmplY3QgdG8gbm90aWZ5IHRoYXQgYSBuZXcgbGlzdCBpcyBiZWluZyBwYXJzZWQuCi0gIC8vCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxpc3QgY2FuIGJlIHN0YXJ0ZWQgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gRmFsc2UKLSAgLy8gaWYgc3RhcnRpbmcgdGhpcyBsaXN0IGNhdXNlcyBzb21lIHNvcnQgb2YgcGFyc2UgZXJyb3IuCi0gIGJvb2wgT25MaXN0U3RhcnQoaW50IGlkLCBpbnQ2NF90IHNpemUpOwotCi0gIC8vIENhbGxlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGlzdCBoYXMgYmVlbiByZWFjaGVkLiBUaGlzIG1heSBhbHNvCi0gIC8vIHNpZ25hbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpc3QncyBhbmNlc3RvcnMgaWYgdGhlIGN1cnJlbnQgbGlzdCBoYXBwZW5zCi0gIC8vIHRvIGJlIGF0IHRoZSBlbmQgb2YgaXRzIHBhcmVudC4KLSAgLy8KLSAgLy8gUmV0dXJucyB0cnVlIGlmIG5vIGVycm9ycyBvY2N1cnJlZCB3aGlsZSBlbmRpbmcgdGhpcyBsaXN0KHMpLgotICBib29sIE9uTGlzdEVuZCgpOwotCi0gIC8vIENoZWNrcyB0byBzZWUgaWYgfGlkX2J8IGlzIGEgc2libGluZyBvciBhbmNlc3RvciBvZiB8aWRfYXwuCi0gIGJvb2wgSXNTaWJsaW5nT3JBbmNlc3RvcihpbnQgaWRfYSwgaW50IGlkX2IpIGNvbnN0OwotCi0gIFN0YXRlIHN0YXRlXzsKLQotICAvLyBFbGVtZW50IElEIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCi0gIGNvbnN0IGludCByb290X2lkXzsKLQotICAvLyBFbGVtZW50IGxldmVsIGZvciB8cm9vdF9pZF98LiBVc2VkIHRvIHZlcmlmeSB0aGF0IGVsZW1lbnRzIGFwcGVhciBhdAotICAvLyB0aGUgY29ycmVjdCBsZXZlbC4KLSAgY29uc3QgaW50IHJvb3RfbGV2ZWxfOwotCi0gIC8vIFdlYk1QYXJzZXJDbGllbnQgdG8gaGFuZGxlIHRoZSByb290IGxpc3QuCi0gIFdlYk1QYXJzZXJDbGllbnQqIGNvbnN0IHJvb3RfY2xpZW50XzsKLQotICAvLyBTdGFjayBvZiBzdGF0ZSBmb3IgYWxsIHRoZSBsaXN0cyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkLiBMaXN0cyBhcmUKLSAgLy8gYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGlzIHN0YWNrIGFzIHRoZXkgYXJlIHBhcnNlZC4KLSAgc3RkOjp2ZWN0b3I8TGlzdFN0YXRlPiBsaXN0X3N0YXRlX3N0YWNrXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oV2ViTUxpc3RQYXJzZXIpOwotfTsKLQotLy8gUGFyc2VzIGFuIGVsZW1lbnQgaGVhZGVyICYgcmV0dXJucyB0aGUgSUQgYW5kIGVsZW1lbnQgc2l6ZS4KLS8vCi0vLyBSZXR1cm5zIDwgMCBpZiB0aGUgcGFyc2UgZmFpbHMuCi0vLyBSZXR1cm5zIDAgaWYgbW9yZSBkYXRhIGlzIG5lZWRlZC4KLS8vIFJldHVybmluZyA+IDAgaW5kaWNhdGVzIHN1Y2Nlc3MgJiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhcnNlZC4KLS8vIHwqaWR8IGNvbnRhaW5zIHRoZSBlbGVtZW50IElEIG9uIHN1Y2Nlc3MgYW5kIGlzIHVuZGVmaW5lZCBvdGhlcndpc2UuCi0vLyB8KmVsZW1lbnRfc2l6ZXwgY29udGFpbnMgdGhlIGVsZW1lbnQgc2l6ZSBvbiBzdWNjZXNzIGFuZCBpcyB1bmRlZmluZWQKLS8vICAgICAgICAgICAgICAgICBvdGhlcndpc2UuCi1pbnQgTUVESUFfRVhQT1JUIFdlYk1QYXJzZUVsZW1lbnRIZWFkZXIoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSwgaW50KiBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiBlbGVtZW50X3NpemUpOwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fUEFSU0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1Mjg0MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyX3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL2NsdXN0ZXJfYnVpbGRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpJblNlcXVlbmNlOwotdXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Ci11c2luZyA6OnRlc3Rpbmc6OlJldHVybk51bGw7Ci11c2luZyA6OnRlc3Rpbmc6OlN0cmljdE1vY2s7Ci11c2luZyA6OnRlc3Rpbmc6Ol87Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotZW51bSB7IGtCbG9ja0NvdW50ID0gNSB9OwotCi1jbGFzcyBNb2NrV2ViTVBhcnNlckNsaWVudCA6IHB1YmxpYyBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgfk1vY2tXZWJNUGFyc2VyQ2xpZW50KCkge30KLQotICAvLyBXZWJNUGFyc2VyQ2xpZW50IG1ldGhvZHMuCi0gIE1PQ0tfTUVUSE9EMShPbkxpc3RTdGFydCwgV2ViTVBhcnNlckNsaWVudCooaW50KSk7Ci0gIE1PQ0tfTUVUSE9EMShPbkxpc3RFbmQsIGJvb2woaW50KSk7Ci0gIE1PQ0tfTUVUSE9EMihPblVJbnQsIGJvb2woaW50LCBpbnQ2NF90KSk7Ci0gIE1PQ0tfTUVUSE9EMihPbkZsb2F0LCBib29sKGludCwgZG91YmxlKSk7Ci0gIE1PQ0tfTUVUSE9EMyhPbkJpbmFyeSwgYm9vbChpbnQsIGNvbnN0IHVpbnQ4X3QqLCBpbnQpKTsKLSAgTU9DS19NRVRIT0QyKE9uU3RyaW5nLCBib29sKGludCwgY29uc3Qgc3RkOjpzdHJpbmcmKSk7Ci19OwotCi1jbGFzcyBXZWJNUGFyc2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwcm90ZWN0ZWQ6Ci0gIFN0cmljdE1vY2s8TW9ja1dlYk1QYXJzZXJDbGllbnQ+IGNsaWVudF87Ci19OwotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IENyZWF0ZUNsdXN0ZXIoaW50IGJsb2NrX2NvdW50KSB7Ci0gIENsdXN0ZXJCdWlsZGVyIGNiOwotICBjYi5TZXRDbHVzdGVyVGltZWNvZGUoMCk7Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja19jb3VudDsgaSsrKSB7Ci0gICAgdWludDhfdCBkYXRhW10gPSB7MHgwMH07Ci0gICAgY2IuQWRkU2ltcGxlQmxvY2soMCwgaSwgMCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKLSAgfQotCi0gIHJldHVybiBjYi5GaW5pc2goKTsKLX0KLQotc3RhdGljIHZvaWQgQ3JlYXRlQ2x1c3RlckV4cGVjdGF0aW9ucyhpbnQgYmxvY2tfY291bnQsIGJvb2wgaXNfY29tcGxldGVfY2x1c3RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9ja1dlYk1QYXJzZXJDbGllbnQqIGNsaWVudCkgewotICBJblNlcXVlbmNlIHM7Ci0gIEVYUEVDVF9DQUxMKCpjbGllbnQsIE9uTGlzdFN0YXJ0KGtXZWJNSWRDbHVzdGVyKSkuV2lsbE9uY2UoUmV0dXJuKGNsaWVudCkpOwotICBFWFBFQ1RfQ0FMTCgqY2xpZW50LCBPblVJbnQoa1dlYk1JZFRpbWVjb2RlLCAwKSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IGJsb2NrX2NvdW50OyBpKyspIHsKLSAgICBFWFBFQ1RfQ0FMTCgqY2xpZW50LCBPbkJpbmFyeShrV2ViTUlkU2ltcGxlQmxvY2ssIF8sIF8pKQotICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLSAgfQotCi0gIGlmIChpc19jb21wbGV0ZV9jbHVzdGVyKQotICAgIEVYUEVDVF9DQUxMKCpjbGllbnQsIE9uTGlzdEVuZChrV2ViTUlkQ2x1c3RlcikpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci19Ci0KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgRW1wdHlDbHVzdGVyKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0VtcHR5Q2x1c3RlcltdID0gewotICAgICAgMHgxRiwgMHg0MywgMHhCNiwgMHg3NSwgMHg4MCAgLy8gQ0xVU1RFUiAoc2l6ZSA9IDApCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtFbXB0eUNsdXN0ZXIpOwotCi0gIEluU2VxdWVuY2UgczsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0U3RhcnQoa1dlYk1JZENsdXN0ZXIpKS5XaWxsT25jZShSZXR1cm4oJmNsaWVudF8pKTsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0RW5kKGtXZWJNSWRDbHVzdGVyKSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLSAgRVhQRUNUX0VRKHNpemUsIHBhcnNlci5QYXJzZShrRW1wdHlDbHVzdGVyLCBzaXplKSk7Ci0gIEVYUEVDVF9UUlVFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotVEVTVF9GKFdlYk1QYXJzZXJUZXN0LCBFbXB0eUNsdXN0ZXJJblNlZ21lbnQpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDE4LCAweDUzLCAweDgwLCAweDY3LCAweDg1LCAgLy8gU0VHTUVOVCAoc2l6ZSA9IDUpCi0gICAgICAweDFGLCAweDQzLCAweEI2LCAweDc1LCAweDgwLCAgLy8gQ0xVU1RFUiAoc2l6ZSA9IDApCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtCdWZmZXIpOwotCi0gIEluU2VxdWVuY2UgczsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0U3RhcnQoa1dlYk1JZFNlZ21lbnQpKS5XaWxsT25jZShSZXR1cm4oJmNsaWVudF8pKTsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0U3RhcnQoa1dlYk1JZENsdXN0ZXIpKS5XaWxsT25jZShSZXR1cm4oJmNsaWVudF8pKTsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0RW5kKGtXZWJNSWRDbHVzdGVyKSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0RW5kKGtXZWJNSWRTZWdtZW50KSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZFNlZ21lbnQsICZjbGllbnRfKTsKLSAgRVhQRUNUX0VRKHNpemUsIHBhcnNlci5QYXJzZShrQnVmZmVyLCBzaXplKSk7Ci0gIEVYUEVDVF9UUlVFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotLy8gVGVzdCB0aGUgY2FzZSB3aGVyZSBhIG5vbi1saXN0IGNoaWxkIGVsZW1lbnQgaGFzIGEgc2l6ZQotLy8gdGhhdCBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcGFyZW50LgotVEVTVF9GKFdlYk1QYXJzZXJUZXN0LCBDaGlsZE5vbkxpc3RMYXJnZXJUaGFuUGFyZW50KSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0J1ZmZlcltdID0gewotICAgICAgMHgxRiwgMHg0MywgMHhCNiwgMHg3NSwgMHg4MSwgIC8vIENMVVNURVIgKHNpemUgPSAxKQotICAgICAgMHhFNywgMHg4MSwgMHgwMSwgICAgICAgICAgICAgIC8vIFRpbWVjb2RlIChzaXplPTEsIHZhbHVlPTEpCi0gIH07Ci0KLSAgSW5TZXF1ZW5jZSBzOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkQ2x1c3RlcikpLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotCi0gIFdlYk1MaXN0UGFyc2VyIHBhcnNlcihrV2ViTUlkQ2x1c3RlciwgJmNsaWVudF8pOwotICBFWFBFQ1RfRVEoLTEsIHBhcnNlci5QYXJzZShrQnVmZmVyLCBzaXplb2Yoa0J1ZmZlcikpKTsKLSAgRVhQRUNUX0ZBTFNFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotLy8gVGVzdCB0aGUgY2FzZSB3aGVyZSBhIGxpc3QgY2hpbGQgZWxlbWVudCBoYXMgYSBzaXplCi0vLyB0aGF0IGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQuCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIENoaWxkTGlzdExhcmdlclRoYW5QYXJlbnQpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDE4LCAweDUzLCAweDgwLCAweDY3LCAweDg1LCAgLy8gU0VHTUVOVCAoc2l6ZSA9IDUpCi0gICAgICAweDFGLCAweDQzLCAweEI2LCAweDc1LCAweDgxLAotICAgICAgMHgxMSAgLy8gQ0xVU1RFUiAoc2l6ZSA9IDEpCi0gIH07Ci0KLSAgSW5TZXF1ZW5jZSBzOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkU2VnbWVudCkpLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotCi0gIFdlYk1MaXN0UGFyc2VyIHBhcnNlcihrV2ViTUlkU2VnbWVudCwgJmNsaWVudF8pOwotICBFWFBFQ1RfRVEoLTEsIHBhcnNlci5QYXJzZShrQnVmZmVyLCBzaXplb2Yoa0J1ZmZlcikpKTsKLSAgRVhQRUNUX0ZBTFNFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotLy8gRXhwZWN0aW5nIHRvIHBhcnNlIGEgQ2x1c3RlciwgYnV0IGdldCBhIFNlZ21lbnQuCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIExpc3RJZERvZXNOb3RNYXRjaCkgewotICBjb25zdCB1aW50OF90IGtCdWZmZXJbXSA9IHsKLSAgICAgIDB4MTgsIDB4NTMsIDB4ODAsIDB4NjcsIDB4ODAsICAvLyBTRUdNRU5UIChzaXplID0gMCkKLSAgfTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLSAgRVhQRUNUX0VRKC0xLCBwYXJzZXIuUGFyc2Uoa0J1ZmZlciwgc2l6ZW9mKGtCdWZmZXIpKSk7Ci0gIEVYUEVDVF9GQUxTRShwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci19Ci0KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgSW52YWxpZEVsZW1lbnRJbkxpc3QpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDE4LCAweDUzLCAweDgwLCAweDY3LCAweDgyLCAgLy8gU0VHTUVOVCAoc2l6ZSA9IDIpCi0gICAgICAweEFFLCAweDgwLCAgICAgICAgICAgICAgICAgICAgLy8gVHJhY2tFbnRyeSAoc2l6ZSA9IDApCi0gIH07Ci0KLSAgSW5TZXF1ZW5jZSBzOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkU2VnbWVudCkpLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotCi0gIFdlYk1MaXN0UGFyc2VyIHBhcnNlcihrV2ViTUlkU2VnbWVudCwgJmNsaWVudF8pOwotICBFWFBFQ1RfRVEoLTEsIHBhcnNlci5QYXJzZShrQnVmZmVyLCBzaXplb2Yoa0J1ZmZlcikpKTsKLSAgRVhQRUNUX0ZBTFNFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotLy8gVGVzdCBzcGVjaWZpYyBjYXNlIG9mIEludmFsaWRFbGVtZW50SW5MaXN0IHRvIHZlcmlmeSBFQk1MSEVBREVSIHdpdGhpbgotLy8ga25vd24tc2l6ZWQgY2x1c3RlciBjYXVzZXMgcGFyc2UgZXJyb3IuCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIEludmFsaWRFQk1MSGVhZGVySW5DbHVzdGVyKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0J1ZmZlcltdID0gewotICAgICAgMHgxRiwgMHg0MywgMHhCNiwgMHg3NSwgMHg4NSwgIC8vIENMVVNURVIgKHNpemUgPSA1KQotICAgICAgMHgxQSwgMHg0NSwgMHhERiwgMHhBMywgMHg4MCwgIC8vIEVCTUxIRUFERVIgKHNpemUgPSAwKQotICB9OwotCi0gIEluU2VxdWVuY2UgczsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0U3RhcnQoa1dlYk1JZENsdXN0ZXIpKS5XaWxsT25jZShSZXR1cm4oJmNsaWVudF8pKTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLSAgRVhQRUNUX0VRKC0xLCBwYXJzZXIuUGFyc2Uoa0J1ZmZlciwgc2l6ZW9mKGtCdWZmZXIpKSk7Ci0gIEVYUEVDVF9GQUxTRShwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IEVCTUxIRUFERVIgZW5kcyBhIHByZWNlZGluZyAidW5rbm93biItc2l6ZWQgQ0xVU1RFUi4KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgVW5rbm93blNpemVDbHVzdGVyRm9sbG93ZWRCeUVCTUxIZWFkZXIpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDFGLCAweDQzLCAweEI2LAotICAgICAgMHg3NSwgMHhGRiwgIC8vIENMVVNURVIgKHNpemUgPSB1bmtub3duOyByZWFsbHkgMCBkdWUgdG86KQotICAgICAgMHgxQSwgMHg0NSwgMHhERiwKLSAgICAgIDB4QTMsIDB4ODAsICAvLyBFQk1MSEVBREVSIChzaXplID0gMCkKLSAgfTsKLQotICBJblNlcXVlbmNlIHM7Ci0gIEVYUEVDVF9DQUxMKGNsaWVudF8sIE9uTGlzdFN0YXJ0KGtXZWJNSWRDbHVzdGVyKSkuV2lsbE9uY2UoUmV0dXJuKCZjbGllbnRfKSk7Ci0gIEVYUEVDVF9DQUxMKGNsaWVudF8sIE9uTGlzdEVuZChrV2ViTUlkQ2x1c3RlcikpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0KLSAgV2ViTUxpc3RQYXJzZXIgcGFyc2VyKGtXZWJNSWRDbHVzdGVyLCAmY2xpZW50Xyk7Ci0KLSAgLy8gTGlzdCBwYXJzZSBzaG91bGQgY29uc3VtZSB0aGUgQ0xVU1RFUiBidXQgbm90IHRoZSBFQk1MSEVBREVSLgotICBFWFBFQ1RfRVEoNSwgcGFyc2VyLlBhcnNlKGtCdWZmZXIsIHNpemVvZihrQnVmZmVyKSkpOwotICBFWFBFQ1RfVFJVRShwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci19Ci0KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgVm9pZEFuZENSQzMySW5MaXN0KSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0J1ZmZlcltdID0gewotICAgICAgMHgxOCwgMHg1MywgMHg4MCwgMHg2NywgMHg5OSwgIC8vIFNFR01FTlQgKHNpemUgPSAyNSkKLSAgICAgIDB4RUMsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBWb2lkIChzaXplID0gMykKLSAgICAgIDB4QkYsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDAsICAvLyBDUkMzMiAoc2l6ZSA9IDMpCi0gICAgICAweDFGLCAweDQzLCAweEI2LCAweDc1LCAweDhBLCAgLy8gQ0xVU1RFUiAoc2l6ZSA9IDEwKQotICAgICAgMHhFQywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgIC8vIFZvaWQgKHNpemUgPSAzKQotICAgICAgMHhCRiwgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgIC8vIENSQzMyIChzaXplID0gMykKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0J1ZmZlcik7Ci0KLSAgSW5TZXF1ZW5jZSBzOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkU2VnbWVudCkpLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkQ2x1c3RlcikpLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RFbmQoa1dlYk1JZENsdXN0ZXIpKS5XaWxsT25jZShSZXR1cm4odHJ1ZSkpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RFbmQoa1dlYk1JZFNlZ21lbnQpKS5XaWxsT25jZShSZXR1cm4odHJ1ZSkpOwotCi0gIFdlYk1MaXN0UGFyc2VyIHBhcnNlcihrV2ViTUlkU2VnbWVudCwgJmNsaWVudF8pOwotICBFWFBFQ1RfRVEoc2l6ZSwgcGFyc2VyLlBhcnNlKGtCdWZmZXIsIHNpemUpKTsKLSAgRVhQRUNUX1RSVUUocGFyc2VyLklzUGFyc2luZ0NvbXBsZXRlKCkpOwotfQotCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIFBhcnNlTGlzdEVsZW1lbnRXaXRoU2luZ2xlQ2FsbCkgewotICBzdGQ6OnVuaXF1ZV9wdHI8Q2x1c3Rlcj4gY2x1c3RlcihDcmVhdGVDbHVzdGVyKGtCbG9ja0NvdW50KSk7Ci0gIENyZWF0ZUNsdXN0ZXJFeHBlY3RhdGlvbnMoa0Jsb2NrQ291bnQsIHRydWUsICZjbGllbnRfKTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLSAgRVhQRUNUX0VRKGNsdXN0ZXItPnNpemUoKSwgcGFyc2VyLlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpKSk7Ci0gIEVYUEVDVF9UUlVFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLX0KLQotVEVTVF9GKFdlYk1QYXJzZXJUZXN0LCBQYXJzZUxpc3RFbGVtZW50V2l0aE11bHRpcGxlQ2FsbHMpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoQ3JlYXRlQ2x1c3RlcihrQmxvY2tDb3VudCkpOwotICBDcmVhdGVDbHVzdGVyRXhwZWN0YXRpb25zKGtCbG9ja0NvdW50LCB0cnVlLCAmY2xpZW50Xyk7Ci0KLSAgY29uc3QgdWludDhfdCogZGF0YSA9IGNsdXN0ZXItPmRhdGEoKTsKLSAgaW50IHNpemUgPSBjbHVzdGVyLT5zaXplKCk7Ci0gIGludCBkZWZhdWx0X3BhcnNlX3NpemUgPSAzOwotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLSAgaW50IHBhcnNlX3NpemUgPSBzdGQ6Om1pbihkZWZhdWx0X3BhcnNlX3NpemUsIHNpemUpOwotCi0gIHdoaWxlIChzaXplID4gMCkgewotICAgIGludCByZXN1bHQgPSBwYXJzZXIuUGFyc2UoZGF0YSwgcGFyc2Vfc2l6ZSk7Ci0gICAgQVNTRVJUX0dFKHJlc3VsdCwgMCk7Ci0gICAgQVNTRVJUX0xFKHJlc3VsdCwgcGFyc2Vfc2l6ZSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IDApIHsKLSAgICAgIC8vIFRoZSBwYXJzZXIgbmVlZHMgbW9yZSBkYXRhIHNvIGluY3JlYXNlIHRoZSBwYXJzZV9zaXplIGEgbGl0dGxlLgotICAgICAgRVhQRUNUX0ZBTFNFKHBhcnNlci5Jc1BhcnNpbmdDb21wbGV0ZSgpKTsKLSAgICAgIHBhcnNlX3NpemUgKz0gZGVmYXVsdF9wYXJzZV9zaXplOwotICAgICAgcGFyc2Vfc2l6ZSA9IHN0ZDo6bWluKHBhcnNlX3NpemUsIHNpemUpOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgcGFyc2Vfc2l6ZSA9IGRlZmF1bHRfcGFyc2Vfc2l6ZTsKLQotICAgIGRhdGEgKz0gcmVzdWx0OwotICAgIHNpemUgLT0gcmVzdWx0OwotCi0gICAgRVhQRUNUX0VRKChzaXplID09IDApLCBwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci0gIH0KLSAgRVhQRUNUX1RSVUUocGFyc2VyLklzUGFyc2luZ0NvbXBsZXRlKCkpOwotfQotCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIFJlc2V0KSB7Ci0gIEluU2VxdWVuY2UgczsKLSAgc3RkOjp1bmlxdWVfcHRyPENsdXN0ZXI+IGNsdXN0ZXIoQ3JlYXRlQ2x1c3RlcihrQmxvY2tDb3VudCkpOwotCi0gIC8vIEZpcnN0IGV4cGVjdCBhbGwgYnV0IHRoZSBsYXN0IGJsb2NrLgotICBDcmVhdGVDbHVzdGVyRXhwZWN0YXRpb25zKGtCbG9ja0NvdW50IC0gMSwgZmFsc2UsICZjbGllbnRfKTsKLQotICAvLyBOb3cgZXhwZWN0IGFsbCBibG9ja3MuCi0gIENyZWF0ZUNsdXN0ZXJFeHBlY3RhdGlvbnMoa0Jsb2NrQ291bnQsIHRydWUsICZjbGllbnRfKTsKLQotICBXZWJNTGlzdFBhcnNlciBwYXJzZXIoa1dlYk1JZENsdXN0ZXIsICZjbGllbnRfKTsKLQotICAvLyBTZW5kIHNsaWdodGx5IGxlc3MgdGhhbiB0aGUgZnVsbCBjbHVzdGVyIHNvIGFsbCBidXQgdGhlIGxhc3QgYmxvY2sgaXMKLSAgLy8gcGFyc2VkLgotICBpbnQgcmVzdWx0ID0gcGFyc2VyLlBhcnNlKGNsdXN0ZXItPmRhdGEoKSwgY2x1c3Rlci0+c2l6ZSgpIC0gMSk7Ci0gIEVYUEVDVF9HVChyZXN1bHQsIDApOwotICBFWFBFQ1RfTFQocmVzdWx0LCBjbHVzdGVyLT5zaXplKCkpOwotICBFWFBFQ1RfRkFMU0UocGFyc2VyLklzUGFyc2luZ0NvbXBsZXRlKCkpOwotCi0gIHBhcnNlci5SZXNldCgpOwotCi0gIC8vIE5vdyBwYXJzZSBhIHdob2xlIGNsdXN0ZXIgdG8gdmVyaWZ5IHRoYXQgYWxsIHRoZSBibG9ja3Mgd2lsbCBnZXQgcGFyc2VkLgotICBFWFBFQ1RfRVEoY2x1c3Rlci0+c2l6ZSgpLCBwYXJzZXIuUGFyc2UoY2x1c3Rlci0+ZGF0YSgpLCBjbHVzdGVyLT5zaXplKCkpKTsKLSAgRVhQRUNUX1RSVUUocGFyc2VyLklzUGFyc2luZ0NvbXBsZXRlKCkpOwotfQotCi0vLyBUZXN0IHRoZSBjYXNlIHdoZXJlIG11bHRpcGxlIGNsaWVudHMgYXJlIHVzZWQgZm9yIGRpZmZlcmVudCBsaXN0cy4KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgTXVsdGlwbGVDbGllbnRzKSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0J1ZmZlcltdID0gewotICAgICAgMHgxOCwgMHg1MywgMHg4MCwgMHg2NywgMHg5NCwgIC8vIFNFR01FTlQgKHNpemUgPSAyMCkKLSAgICAgIDB4MTYsIDB4NTQsIDB4QUUsIDB4NkIsIDB4ODUsICAvLyAgIFRSQUNLUyAoc2l6ZSA9IDUpCi0gICAgICAweEFFLCAweDgzLCAgICAgICAgICAgICAgICAgICAgLy8gICAgIFRSQUNLRU5UUlkgKHNpemUgPSAzKQotICAgICAgMHhENywgMHg4MSwgMHgwMSwgICAgICAgICAgICAgIC8vICAgICAgIFRSQUNLTlVNQkVSIChzaXplID0gMSkKLSAgICAgIDB4MUYsIDB4NDMsIDB4QjYsIDB4NzUsIDB4ODUsICAvLyAgIENMVVNURVIgKHNpemUgPSA1KQotICAgICAgMHhFQywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgIC8vICAgICBWb2lkIChzaXplID0gMykKLSAgfTsKLSAgaW50IHNpemUgPSBzaXplb2Yoa0J1ZmZlcik7Ci0KLSAgU3RyaWN0TW9jazxNb2NrV2ViTVBhcnNlckNsaWVudD4gYzFfOwotICBTdHJpY3RNb2NrPE1vY2tXZWJNUGFyc2VyQ2xpZW50PiBjMl87Ci0gIFN0cmljdE1vY2s8TW9ja1dlYk1QYXJzZXJDbGllbnQ+IGMzXzsKLQotICBJblNlcXVlbmNlIHM7Ci0gIEVYUEVDVF9DQUxMKGNsaWVudF8sIE9uTGlzdFN0YXJ0KGtXZWJNSWRTZWdtZW50KSkuV2lsbE9uY2UoUmV0dXJuKCZjMV8pKTsKLSAgRVhQRUNUX0NBTEwoYzFfLCBPbkxpc3RTdGFydChrV2ViTUlkVHJhY2tzKSkuV2lsbE9uY2UoUmV0dXJuKCZjMl8pKTsKLSAgRVhQRUNUX0NBTEwoYzJfLCBPbkxpc3RTdGFydChrV2ViTUlkVHJhY2tFbnRyeSkpLldpbGxPbmNlKFJldHVybigmYzNfKSk7Ci0gIEVYUEVDVF9DQUxMKGMzXywgT25VSW50KGtXZWJNSWRUcmFja051bWJlciwgMSkpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0gIEVYUEVDVF9DQUxMKGMyXywgT25MaXN0RW5kKGtXZWJNSWRUcmFja0VudHJ5KSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoYzFfLCBPbkxpc3RFbmQoa1dlYk1JZFRyYWNrcykpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0gIEVYUEVDVF9DQUxMKGMxXywgT25MaXN0U3RhcnQoa1dlYk1JZENsdXN0ZXIpKS5XaWxsT25jZShSZXR1cm4oJmMyXykpOwotICBFWFBFQ1RfQ0FMTChjMV8sIE9uTGlzdEVuZChrV2ViTUlkQ2x1c3RlcikpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0gIEVYUEVDVF9DQUxMKGNsaWVudF8sIE9uTGlzdEVuZChrV2ViTUlkU2VnbWVudCkpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0KLSAgV2ViTUxpc3RQYXJzZXIgcGFyc2VyKGtXZWJNSWRTZWdtZW50LCAmY2xpZW50Xyk7Ci0gIEVYUEVDVF9FUShzaXplLCBwYXJzZXIuUGFyc2Uoa0J1ZmZlciwgc2l6ZSkpOwotICBFWFBFQ1RfVFJVRShwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci19Ci0KLS8vIFRlc3QgdGhlIGNhc2Ugd2hlcmUgbXVsdGlwbGUgY2xpZW50cyBhcmUgdXNlZCBmb3IgZGlmZmVyZW50IGxpc3RzLgotVEVTVF9GKFdlYk1QYXJzZXJUZXN0LCBJbnZhbGlkQ2xpZW50KSB7Ci0gIGNvbnN0IHVpbnQ4X3Qga0J1ZmZlcltdID0gewotICAgICAgMHgxOCwgMHg1MywgMHg4MCwgMHg2NywgMHg4NSwgIC8vIFNFR01FTlQgKHNpemUgPSAyMCkKLSAgICAgIDB4MTYsIDB4NTQsIDB4QUUsIDB4NkIsIDB4ODAsICAvLyAgIFRSQUNLUyAoc2l6ZSA9IDUpCi0gIH07Ci0KLSAgSW5TZXF1ZW5jZSBzOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPbkxpc3RTdGFydChrV2ViTUlkU2VnbWVudCkpLldpbGxPbmNlKFJldHVybk51bGwoKSk7Ci0KLSAgV2ViTUxpc3RQYXJzZXIgcGFyc2VyKGtXZWJNSWRTZWdtZW50LCAmY2xpZW50Xyk7Ci0gIEVYUEVDVF9FUSgtMSwgcGFyc2VyLlBhcnNlKGtCdWZmZXIsIHNpemVvZihrQnVmZmVyKSkpOwotICBFWFBFQ1RfRkFMU0UocGFyc2VyLklzUGFyc2luZ0NvbXBsZXRlKCkpOwotfQotCi1URVNUX0YoV2ViTVBhcnNlclRlc3QsIFJlc2VydmVkSWRzKSB7Ci0gIGNvbnN0IHVpbnQ4X3QgazFCeXRlUmVzZXJ2ZWRJZFtdID0gezB4RkYsIDB4ODF9OwotICBjb25zdCB1aW50OF90IGsyQnl0ZVJlc2VydmVkSWRbXSA9IHsweDdGLCAweEZGLCAweDgxfTsKLSAgY29uc3QgdWludDhfdCBrM0J5dGVSZXNlcnZlZElkW10gPSB7MHgzRiwgMHhGRiwgMHhGRiwgMHg4MX07Ci0gIGNvbnN0IHVpbnQ4X3QgazRCeXRlUmVzZXJ2ZWRJZFtdID0gezB4MUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4ODF9OwotICBjb25zdCB1aW50OF90KiBrQnVmZmVyc1tdID0ge2sxQnl0ZVJlc2VydmVkSWQsIGsyQnl0ZVJlc2VydmVkSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazNCeXRlUmVzZXJ2ZWRJZCwgazRCeXRlUmVzZXJ2ZWRJZH07Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoa0J1ZmZlcnMpOyBpKyspIHsKLSAgICBpbnQgaWQ7Ci0gICAgaW50NjRfdCBlbGVtZW50X3NpemU7Ci0gICAgaW50IGJ1ZmZlcl9zaXplID0gMiArIGk7Ci0gICAgRVhQRUNUX0VRKGJ1ZmZlcl9zaXplLCBXZWJNUGFyc2VFbGVtZW50SGVhZGVyKGtCdWZmZXJzW2ldLCBidWZmZXJfc2l6ZSwgJmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZWxlbWVudF9zaXplKSk7Ci0gICAgRVhQRUNUX0VRKGlkLCBrV2ViTVJlc2VydmVkSWQpOwotICAgIEVYUEVDVF9FUShlbGVtZW50X3NpemUsIDEpOwotICB9Ci19Ci0KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgUmVzZXJ2ZWRTaXplcykgewotICBjb25zdCB1aW50OF90IGsxQnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4RkZ9OwotICBjb25zdCB1aW50OF90IGsyQnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4N0YsIDB4RkZ9OwotICBjb25zdCB1aW50OF90IGszQnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4M0YsIDB4RkYsIDB4RkZ9OwotICBjb25zdCB1aW50OF90IGs0Qnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4MUYsIDB4RkYsIDB4RkYsIDB4RkZ9OwotICBjb25zdCB1aW50OF90IGs1Qnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4MEYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9OwotICBjb25zdCB1aW50OF90IGs2Qnl0ZVJlc2VydmVkU2l6ZVtdID0gezB4QTMsIDB4MDcsIDB4RkYsIDB4RkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwgMHhGRiwgMHhGRn07Ci0gIGNvbnN0IHVpbnQ4X3QgazdCeXRlUmVzZXJ2ZWRTaXplW10gPSB7MHhBMywgMHgwMywgMHhGRiwgMHhGRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLCAweEZGLCAweEZGLCAweEZGfTsKLSAgY29uc3QgdWludDhfdCBrOEJ5dGVSZXNlcnZlZFNpemVbXSA9IHsweEEzLCAweDAxLCAweEZGLCAweEZGLCAweEZGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9OwotICBjb25zdCB1aW50OF90KiBrQnVmZmVyc1tdID0ge2sxQnl0ZVJlc2VydmVkU2l6ZSwgazJCeXRlUmVzZXJ2ZWRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGszQnl0ZVJlc2VydmVkU2l6ZSwgazRCeXRlUmVzZXJ2ZWRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs1Qnl0ZVJlc2VydmVkU2l6ZSwgazZCeXRlUmVzZXJ2ZWRTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs3Qnl0ZVJlc2VydmVkU2l6ZSwgazhCeXRlUmVzZXJ2ZWRTaXplfTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShrQnVmZmVycyk7IGkrKykgewotICAgIGludCBpZDsKLSAgICBpbnQ2NF90IGVsZW1lbnRfc2l6ZTsKLSAgICBpbnQgYnVmZmVyX3NpemUgPSAyICsgaTsKLSAgICBFWFBFQ1RfRVEoYnVmZmVyX3NpemUsIFdlYk1QYXJzZUVsZW1lbnRIZWFkZXIoa0J1ZmZlcnNbaV0sIGJ1ZmZlcl9zaXplLCAmaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbGVtZW50X3NpemUpKTsKLSAgICBFWFBFQ1RfRVEoaWQsIDB4QTMpOwotICAgIEVYUEVDVF9FUShlbGVtZW50X3NpemUsIGtXZWJNVW5rbm93blNpemUpOwotICB9Ci19Ci0KLVRFU1RfRihXZWJNUGFyc2VyVGVzdCwgWmVyb1BhZGRlZFN0cmluZ3MpIHsKLSAgY29uc3QgdWludDhfdCBrQnVmZmVyW10gPSB7Ci0gICAgICAweDFBLCAweDQ1LCAweERGLCAweEEzLCAweDkxLCAgLy8gRUJNTEhFQURFUiAoc2l6ZSA9IDE3KQotICAgICAgMHg0MiwgMHg4MiwgMHg4MCwgICAgICAgICAgICAgIC8vIERvY1R5cGUgKHNpemUgPSAwKQotICAgICAgMHg0MiwgMHg4MiwgMHg4MSwgMHgwMCwgICAgICAgIC8vIERvY1R5cGUgKHNpemUgPSAxKSAiIgotICAgICAgMHg0MiwgMHg4MiwgMHg4MSwgJ2EnLCAgICAgICAgIC8vIERvY1R5cGUgKHNpemUgPSAxKSAiYSIKLSAgICAgIDB4NDIsIDB4ODIsIDB4ODMsICdhJywgIDB4MDAsCi0gICAgICAweDAwICAvLyBEb2NUeXBlIChzaXplID0gMykgImEiCi0gIH07Ci0gIGludCBzaXplID0gc2l6ZW9mKGtCdWZmZXIpOwotCi0gIEluU2VxdWVuY2UgczsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25MaXN0U3RhcnQoa1dlYk1JZEVCTUxIZWFkZXIpKQotICAgICAgLldpbGxPbmNlKFJldHVybigmY2xpZW50XykpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPblN0cmluZyhrV2ViTUlkRG9jVHlwZSwgIiIpKS5XaWxsT25jZShSZXR1cm4odHJ1ZSkpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPblN0cmluZyhrV2ViTUlkRG9jVHlwZSwgIiIpKS5XaWxsT25jZShSZXR1cm4odHJ1ZSkpOwotICBFWFBFQ1RfQ0FMTChjbGllbnRfLCBPblN0cmluZyhrV2ViTUlkRG9jVHlwZSwgImEiKSkuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKLSAgRVhQRUNUX0NBTEwoY2xpZW50XywgT25TdHJpbmcoa1dlYk1JZERvY1R5cGUsICJhIikpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0gIEVYUEVDVF9DQUxMKGNsaWVudF8sIE9uTGlzdEVuZChrV2ViTUlkRUJNTEhlYWRlcikpLldpbGxPbmNlKFJldHVybih0cnVlKSk7Ci0KLSAgV2ViTUxpc3RQYXJzZXIgcGFyc2VyKGtXZWJNSWRFQk1MSGVhZGVyLCAmY2xpZW50Xyk7Ci0gIEVYUEVDVF9FUShzaXplLCBwYXJzZXIuUGFyc2Uoa0J1ZmZlciwgc2l6ZSkpOwotICBFWFBFQ1RfVFJVRShwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1MWM2Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdHJhY2tzX3BhcnNlci5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLVdlYk1TdHJlYW1QYXJzZXI6OldlYk1TdHJlYW1QYXJzZXIoRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yKQotICAgIDogYnVmZmVyX2FsbG9jYXRvcl8oYnVmZmVyX2FsbG9jYXRvciksCi0gICAgICBzdGF0ZV8oa1dhaXRpbmdGb3JJbml0KSwKLSAgICAgIHVua25vd25fc2VnbWVudF9zaXplXyhmYWxzZSkgewotICBEQ0hFQ0soYnVmZmVyX2FsbG9jYXRvcl8pOwotfQotCi1XZWJNU3RyZWFtUGFyc2VyOjp+V2ViTVN0cmVhbVBhcnNlcigpIHt9Ci0KLXZvaWQgV2ViTVN0cmVhbVBhcnNlcjo6SW5pdCgKLSAgICBjb25zdCBJbml0Q0ImIGluaXRfY2IsIGNvbnN0IE5ld0NvbmZpZ0NCJiBjb25maWdfY2IsCi0gICAgY29uc3QgTmV3QnVmZmVyc0NCJiBuZXdfYnVmZmVyc19jYiwgYm9vbCBpZ25vcmVfdGV4dF90cmFja3MsCi0gICAgY29uc3QgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCJiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgIGNvbnN0IE5ld01lZGlhU2VnbWVudENCJiBuZXdfc2VnbWVudF9jYiwKLSAgICBjb25zdCBFbmRNZWRpYVNlZ21lbnRDQiYgZW5kX29mX3NlZ21lbnRfY2IsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgewotICBEQ0hFQ0tfRVEoc3RhdGVfLCBrV2FpdGluZ0ZvckluaXQpOwotICBEQ0hFQ0soaW5pdF9jYl8uaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFpbml0X2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghY29uZmlnX2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghbmV3X2J1ZmZlcnNfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLmlzX251bGwoKSk7Ci0gIERDSEVDSyghbmV3X3NlZ21lbnRfY2IuaXNfbnVsbCgpKTsKLSAgRENIRUNLKCFlbmRfb2Zfc2VnbWVudF9jYi5pc19udWxsKCkpOwotCi0gIENoYW5nZVN0YXRlKGtQYXJzaW5nSGVhZGVycyk7Ci0gIGluaXRfY2JfID0gaW5pdF9jYjsKLSAgY29uZmlnX2NiXyA9IGNvbmZpZ19jYjsKLSAgbmV3X2J1ZmZlcnNfY2JfID0gbmV3X2J1ZmZlcnNfY2I7Ci0gIGlnbm9yZV90ZXh0X3RyYWNrc18gPSBpZ25vcmVfdGV4dF90cmFja3M7Ci0gIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfID0gZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYjsKLSAgbmV3X3NlZ21lbnRfY2JfID0gbmV3X3NlZ21lbnRfY2I7Ci0gIGVuZF9vZl9zZWdtZW50X2NiXyA9IGVuZF9vZl9zZWdtZW50X2NiOwotICBtZWRpYV9sb2dfID0gbWVkaWFfbG9nOwotfQotCi12b2lkIFdlYk1TdHJlYW1QYXJzZXI6OkZsdXNoKCkgewotICBEQ0hFQ0tfTkUoc3RhdGVfLCBrV2FpdGluZ0ZvckluaXQpOwotCi0gIGJ5dGVfcXVldWVfLlJlc2V0KCk7Ci0gIGlmIChjbHVzdGVyX3BhcnNlcl8pIGNsdXN0ZXJfcGFyc2VyXy0+UmVzZXQoKTsKLSAgaWYgKHN0YXRlXyA9PSBrUGFyc2luZ0NsdXN0ZXJzKSBDaGFuZ2VTdGF0ZShrUGFyc2luZ0hlYWRlcnMpOwotfQotCi1ib29sIFdlYk1TdHJlYW1QYXJzZXI6OlBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpIHsKLSAgRENIRUNLX05FKHN0YXRlXywga1dhaXRpbmdGb3JJbml0KTsKLQotICBpZiAoc3RhdGVfID09IGtFcnJvcikgcmV0dXJuIGZhbHNlOwotCi0gIGJ5dGVfcXVldWVfLlB1c2goYnVmLCBzaXplKTsKLQotICBpbnQgcmVzdWx0ID0gMDsKLSAgaW50IGJ5dGVzX3BhcnNlZCA9IDA7Ci0gIGNvbnN0IHVpbnQ4X3QqIGN1ciA9IE5VTEw7Ci0gIGludCBjdXJfc2l6ZSA9IDA7Ci0KLSAgYnl0ZV9xdWV1ZV8uUGVlaygmY3VyLCAmY3VyX3NpemUpOwotICB3aGlsZSAoY3VyX3NpemUgPiAwKSB7Ci0gICAgU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZV87Ci0gICAgc3dpdGNoIChzdGF0ZV8pIHsKLSAgICAgIGNhc2Uga1BhcnNpbmdIZWFkZXJzOgotICAgICAgICByZXN1bHQgPSBQYXJzZUluZm9BbmRUcmFja3MoY3VyLCBjdXJfc2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGtQYXJzaW5nQ2x1c3RlcnM6Ci0gICAgICAgIHJlc3VsdCA9IFBhcnNlQ2x1c3RlcihjdXIsIGN1cl9zaXplKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Uga1dhaXRpbmdGb3JJbml0OgotICAgICAgY2FzZSBrRXJyb3I6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgQ2hhbmdlU3RhdGUoa0Vycm9yKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdGVfID09IG9sZFN0YXRlICYmIHJlc3VsdCA9PSAwKSBicmVhazsKLQotICAgIERDSEVDS19HRShyZXN1bHQsIDApOwotICAgIGN1ciArPSByZXN1bHQ7Ci0gICAgY3VyX3NpemUgLT0gcmVzdWx0OwotICAgIGJ5dGVzX3BhcnNlZCArPSByZXN1bHQ7Ci0gIH0KLQotICBieXRlX3F1ZXVlXy5Qb3AoYnl0ZXNfcGFyc2VkKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViTVN0cmVhbVBhcnNlcjo6Q2hhbmdlU3RhdGUoU3RhdGUgbmV3X3N0YXRlKSB7Ci0gIERWTE9HKDEpIDw8ICJDaGFuZ2VTdGF0ZSgpIDogIiA8PCBzdGF0ZV8gPDwgIiAtPiAiIDw8IG5ld19zdGF0ZTsKLSAgc3RhdGVfID0gbmV3X3N0YXRlOwotfQotCi1pbnQgV2ViTVN0cmVhbVBhcnNlcjo6UGFyc2VJbmZvQW5kVHJhY2tzKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIERWTE9HKDIpIDw8ICJQYXJzZUluZm9BbmRUcmFja3MoKSI7Ci0gIERDSEVDSyhkYXRhKTsKLSAgRENIRUNLX0dUKHNpemUsIDApOwotCi0gIGNvbnN0IHVpbnQ4X3QqIGN1ciA9IGRhdGE7Ci0gIGludCBjdXJfc2l6ZSA9IHNpemU7Ci0gIGludCBieXRlc19wYXJzZWQgPSAwOwotCi0gIGludCBpZDsKLSAgaW50NjRfdCBlbGVtZW50X3NpemU7Ci0gIGludCByZXN1bHQgPSBXZWJNUGFyc2VFbGVtZW50SGVhZGVyKGN1ciwgY3VyX3NpemUsICZpZCwgJmVsZW1lbnRfc2l6ZSk7Ci0KLSAgaWYgKHJlc3VsdCA8PSAwKSByZXR1cm4gcmVzdWx0OwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIGtXZWJNSWRFQk1MSGVhZGVyOgotICAgIGNhc2Uga1dlYk1JZFNlZWtIZWFkOgotICAgIGNhc2Uga1dlYk1JZFZvaWQ6Ci0gICAgY2FzZSBrV2ViTUlkQ1JDMzI6Ci0gICAgY2FzZSBrV2ViTUlkQ3VlczoKLSAgICBjYXNlIGtXZWJNSWRDaGFwdGVyczoKLSAgICBjYXNlIGtXZWJNSWRUYWdzOgotICAgIGNhc2Uga1dlYk1JZEF0dGFjaG1lbnRzOgotICAgICAgLy8gVE9ETyhtYXR0aGV3amhlYW5leSk6IEltcGxlbWVudCBzdXBwb3J0IGZvciBjaGFwdGVycy4KLSAgICAgIGlmIChjdXJfc2l6ZSA8IChyZXN1bHQgKyBlbGVtZW50X3NpemUpKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdGhlIHdob2xlIGVsZW1lbnQgeWV0LiBTaWduYWwgd2UgbmVlZCBtb3JlIGRhdGEuCi0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgLy8gU2tpcCB0aGUgZWxlbWVudC4KLSAgICAgIHJldHVybiByZXN1bHQgKyBlbGVtZW50X3NpemU7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRDbHVzdGVyOgotICAgICAgaWYgKCFjbHVzdGVyX3BhcnNlcl8pIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiRm91bmQgQ2x1c3RlciBlbGVtZW50IGJlZm9yZSBJbmZvLiI7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIENoYW5nZVN0YXRlKGtQYXJzaW5nQ2x1c3RlcnMpOwotICAgICAgbmV3X3NlZ21lbnRfY2JfLlJ1bigpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRTZWdtZW50OgotICAgICAgLy8gU2VnbWVudCBvZiB1bmtub3duIHNpemUgaW5kaWNhdGVzIGxpdmUgc3RyZWFtLgotICAgICAgaWYgKGVsZW1lbnRfc2l6ZSA9PSBrV2ViTVVua25vd25TaXplKSB1bmtub3duX3NlZ21lbnRfc2l6ZV8gPSB0cnVlOwotICAgICAgLy8gSnVzdCBjb25zdW1lIHRoZSBzZWdtZW50IGhlYWRlci4KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRJbmZvOgotICAgICAgLy8gV2UndmUgZm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLgotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJVbmV4cGVjdGVkIGVsZW1lbnQgSUQgMHgiIDw8IHN0ZDo6aGV4IDw8IGlkOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIFdlYk1JbmZvUGFyc2VyIGluZm9fcGFyc2VyOwotICByZXN1bHQgPSBpbmZvX3BhcnNlci5QYXJzZShjdXIsIGN1cl9zaXplKTsKLQotICBpZiAocmVzdWx0IDw9IDApIHJldHVybiByZXN1bHQ7Ci0KLSAgY3VyICs9IHJlc3VsdDsKLSAgY3VyX3NpemUgLT0gcmVzdWx0OwotICBieXRlc19wYXJzZWQgKz0gcmVzdWx0OwotCi0gIFdlYk1UcmFja3NQYXJzZXIgdHJhY2tzX3BhcnNlcihtZWRpYV9sb2dfLCBpZ25vcmVfdGV4dF90cmFja3NfKTsKLSAgcmVzdWx0ID0gdHJhY2tzX3BhcnNlci5QYXJzZShjdXIsIGN1cl9zaXplKTsKLQotICBpZiAocmVzdWx0IDw9IDApIHJldHVybiByZXN1bHQ7Ci0KLSAgYnl0ZXNfcGFyc2VkICs9IHJlc3VsdDsKLQotICBkb3VibGUgdGltZWNvZGVfc2NhbGVfaW5fdXMgPSBpbmZvX3BhcnNlci50aW1lY29kZV9zY2FsZSgpIC8gMTAwMC4wOwotICBJbml0UGFyYW1ldGVycyBwYXJhbXMoa0luZmluaXRlRHVyYXRpb24pOwotCi0gIGlmIChpbmZvX3BhcnNlci5kdXJhdGlvbigpID4gMCkgewotICAgIGludDY0X3QgZHVyYXRpb25faW5fdXMgPSBpbmZvX3BhcnNlci5kdXJhdGlvbigpICogdGltZWNvZGVfc2NhbGVfaW5fdXM7Ci0gICAgcGFyYW1zLmR1cmF0aW9uID0gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKGR1cmF0aW9uX2luX3VzKTsKLSAgfQotCi0gIHBhcmFtcy50aW1lbGluZV9vZmZzZXQgPSBpbmZvX3BhcnNlci5kYXRlX3V0YygpOwotCi0gIGlmICh1bmtub3duX3NlZ21lbnRfc2l6ZV8gJiYgKGluZm9fcGFyc2VyLmR1cmF0aW9uKCkgPD0gMCkgJiYKLSAgICAgICFpbmZvX3BhcnNlci5kYXRlX3V0YygpLmlzX251bGwoKSkgewotICAgIHBhcmFtcy5saXZlbmVzcyA9IERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX0xJVkU7Ci0gIH0gZWxzZSBpZiAoaW5mb19wYXJzZXIuZHVyYXRpb24oKSA+PSAwKSB7Ci0gICAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfUkVDT1JERUQ7Ci0gIH0gZWxzZSB7Ci0gICAgcGFyYW1zLmxpdmVuZXNzID0gRGVtdXhlclN0cmVhbTo6TElWRU5FU1NfVU5LTk9XTjsKLSAgfQotCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnID0gdHJhY2tzX3BhcnNlci5hdWRpb19kZWNvZGVyX2NvbmZpZygpOwotICBpZiAoYXVkaW9fY29uZmlnLmlzX2VuY3J5cHRlZCgpKQotICAgIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSh0cmFja3NfcGFyc2VyLmF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkKCkpOwotCi0gIGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnID0gdHJhY2tzX3BhcnNlci52aWRlb19kZWNvZGVyX2NvbmZpZygpOwotICBpZiAodmlkZW9fY29uZmlnLmlzX2VuY3J5cHRlZCgpKQotICAgIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSh0cmFja3NfcGFyc2VyLnZpZGVvX2VuY3J5cHRpb25fa2V5X2lkKCkpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gbWVkaWFfdHJhY2tzID0gdHJhY2tzX3BhcnNlci5tZWRpYV90cmFja3MoKTsKLSAgQ0hFQ0sobWVkaWFfdHJhY2tzLmdldCgpKTsKLSAgaWYgKCFjb25maWdfY2JfLlJ1bihzdGQ6Om1vdmUobWVkaWFfdHJhY2tzKSwgdHJhY2tzX3BhcnNlci50ZXh0X3RyYWNrcygpKSkgewotICAgIERWTE9HKDEpIDw8ICJOZXcgY29uZmlnIGRhdGEgaXNuJ3QgYWxsb3dlZC4iOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGNsdXN0ZXJfcGFyc2VyXy5yZXNldChuZXcgV2ViTUNsdXN0ZXJQYXJzZXIoCi0gICAgICBidWZmZXJfYWxsb2NhdG9yXywgaW5mb19wYXJzZXIudGltZWNvZGVfc2NhbGUoKSwKLSAgICAgIHRyYWNrc19wYXJzZXIuYXVkaW9fdHJhY2tfbnVtKCksCi0gICAgICB0cmFja3NfcGFyc2VyLkdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKHRpbWVjb2RlX3NjYWxlX2luX3VzKSwKLSAgICAgIHRyYWNrc19wYXJzZXIudmlkZW9fdHJhY2tfbnVtKCksCi0gICAgICB0cmFja3NfcGFyc2VyLkdldFZpZGVvRGVmYXVsdER1cmF0aW9uKHRpbWVjb2RlX3NjYWxlX2luX3VzKSwKLSAgICAgIHRyYWNrc19wYXJzZXIudGV4dF90cmFja3MoKSwgdHJhY2tzX3BhcnNlci5pZ25vcmVkX3RyYWNrcygpLAotICAgICAgdHJhY2tzX3BhcnNlci5hdWRpb19lbmNyeXB0aW9uX2tleV9pZCgpLAotICAgICAgdHJhY2tzX3BhcnNlci52aWRlb19lbmNyeXB0aW9uX2tleV9pZCgpLCBhdWRpb19jb25maWcuY29kZWMoKSwKLSAgICAgIG1lZGlhX2xvZ18pKTsKLQotICBpZiAoIWluaXRfY2JfLmlzX251bGwoKSkgewotICAgIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9Ci0gICAgICAgIHRyYWNrc19wYXJzZXIuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQoKTsKLSAgICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPQotICAgICAgICB0cmFja3NfcGFyc2VyLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50KCk7Ci0gICAgcGFyYW1zLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQgPQotICAgICAgICB0cmFja3NfcGFyc2VyLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQoKTsKLSAgICBiYXNlOjpSZXNldEFuZFJldHVybigmaW5pdF9jYl8pLlJ1bihwYXJhbXMpOwotICB9Ci0KLSAgcmV0dXJuIGJ5dGVzX3BhcnNlZDsKLX0KLQotaW50IFdlYk1TdHJlYW1QYXJzZXI6OlBhcnNlQ2x1c3Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBpZiAoIWNsdXN0ZXJfcGFyc2VyXykgcmV0dXJuIC0xOwotCi0gIGludCBieXRlc19wYXJzZWQgPSBjbHVzdGVyX3BhcnNlcl8tPlBhcnNlKGRhdGEsIHNpemUpOwotICBpZiAoYnl0ZXNfcGFyc2VkIDwgMCkgcmV0dXJuIGJ5dGVzX3BhcnNlZDsKLQotICBCdWZmZXJRdWV1ZU1hcCBidWZmZXJfcXVldWVfbWFwOwotICBjbHVzdGVyX3BhcnNlcl8tPkdldEJ1ZmZlcnMoJmJ1ZmZlcl9xdWV1ZV9tYXApOwotCi0gIGJvb2wgY2x1c3Rlcl9lbmRlZCA9IGNsdXN0ZXJfcGFyc2VyXy0+Y2x1c3Rlcl9lbmRlZCgpOwotCi0gIGlmICghYnVmZmVyX3F1ZXVlX21hcC5lbXB0eSgpICYmICFuZXdfYnVmZmVyc19jYl8uUnVuKGJ1ZmZlcl9xdWV1ZV9tYXApKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKGNsdXN0ZXJfZW5kZWQpIHsKLSAgICBDaGFuZ2VTdGF0ZShrUGFyc2luZ0hlYWRlcnMpOwotICAgIGVuZF9vZl9zZWdtZW50X2NiXy5SdW4oKTsKLSAgfQotCi0gIHJldHVybiBieXRlc19wYXJzZWQ7Ci19Ci0KLXZvaWQgV2ViTVN0cmVhbVBhcnNlcjo6T25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXlfaWQpIHsKLSAgc3RkOjp2ZWN0b3I8dWludDhfdD4ga2V5X2lkX3ZlY3RvcihrZXlfaWQuYmVnaW4oKSwga2V5X2lkLmVuZCgpKTsKLSAgZW5jcnlwdGVkX21lZGlhX2luaXRfZGF0YV9jYl8uUnVuKGtFbWVJbml0RGF0YVR5cGVXZWJNLCBrZXlfaWRfdmVjdG9yKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM5ODJhYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9TVFJFQU1fUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9TVFJFQU1fUEFSU0VSX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFja19mb3J3YXJkLmgiCi0jaW5jbHVkZSAiYmFzZS9tZW1vcnkvcmVmX2NvdW50ZWQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2J5dGVfcXVldWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLWNsYXNzIFdlYk1DbHVzdGVyUGFyc2VyOwotCi1jbGFzcyBNRURJQV9FWFBPUlQgV2ViTVN0cmVhbVBhcnNlciA6IHB1YmxpYyBTdHJlYW1QYXJzZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgV2ViTVN0cmVhbVBhcnNlcihEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IpOwotICB+V2ViTVN0cmVhbVBhcnNlcigpIG92ZXJyaWRlOwotCi0gIC8vIFN0cmVhbVBhcnNlciBpbXBsZW1lbnRhdGlvbi4KLSAgdm9pZCBJbml0KGNvbnN0IEluaXRDQiYgaW5pdF9jYiwgY29uc3QgTmV3Q29uZmlnQ0ImIGNvbmZpZ19jYiwKLSAgICAgICAgICAgIGNvbnN0IE5ld0J1ZmZlcnNDQiYgbmV3X2J1ZmZlcnNfY2IsIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzLAotICAgICAgICAgICAgY29uc3QgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCJiBlbmNyeXB0ZWRfbWVkaWFfaW5pdF9kYXRhX2NiLAotICAgICAgICAgICAgY29uc3QgTmV3TWVkaWFTZWdtZW50Q0ImIG5ld19zZWdtZW50X2NiLAotICAgICAgICAgICAgY29uc3QgRW5kTWVkaWFTZWdtZW50Q0ImIGVuZF9vZl9zZWdtZW50X2NiLAotICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgb3ZlcnJpZGU7Ci0gIHZvaWQgRmx1c2goKSBvdmVycmlkZTsKLSAgYm9vbCBQYXJzZShjb25zdCB1aW50OF90KiBidWYsIGludCBzaXplKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIGVudW0gU3RhdGUgeyBrV2FpdGluZ0ZvckluaXQsIGtQYXJzaW5nSGVhZGVycywga1BhcnNpbmdDbHVzdGVycywga0Vycm9yIH07Ci0KLSAgdm9pZCBDaGFuZ2VTdGF0ZShTdGF0ZSBuZXdfc3RhdGUpOwotCi0gIC8vIFBhcnNlcyBXZWJNIEhlYWRlciwgSW5mbywgVHJhY2tzIGVsZW1lbnRzLiBJdCBhbHNvIHNraXBzIG90aGVyIGxldmVsIDEKLSAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbm90IHVzZWQgcmlnaHQgbm93LiBPbmNlIHRoZSBJbmZvICYgVHJhY2tzIGVsZW1lbnRzIGhhdmUKLSAgLy8gYmVlbiBwYXJzZWQsIHRoaXMgbWV0aG9kIHdpbGwgdHJhbnNpdGlvbiB0aGUgcGFyc2VyIGZyb20gUEFSU0lOR19IRUFERVJTIHRvCi0gIC8vIFBBUlNJTkdfQ0xVU1RFUlMuCi0gIC8vCi0gIC8vIFJldHVybnMgPCAwIGlmIHRoZSBwYXJzZSBmYWlscy4KLSAgLy8gUmV0dXJucyAwIGlmIG1vcmUgZGF0YSBpcyBuZWVkZWQuCi0gIC8vIFJldHVybmluZyA+IDAgaW5kaWNhdGVzIHN1Y2Nlc3MgJiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhcnNlZC4KLSAgaW50IFBhcnNlSW5mb0FuZFRyYWNrcyhjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSk7Ci0KLSAgLy8gSW5jcmVtZW50YWxseSBwYXJzZXMgV2ViTSBjbHVzdGVyIGVsZW1lbnRzLiBUaGlzIG1ldGhvZCBhbHNvIHNraXBzCi0gIC8vIENVRVMgZWxlbWVudHMgaWYgdGhleSBhcmUgZW5jb3VudGVyZWQgc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IHVzZSB0aGUKLSAgLy8gZGF0YSBpbiB0aGVzZSBlbGVtZW50cy4KLSAgLy8KLSAgLy8gUmV0dXJucyA8IDAgaWYgdGhlIHBhcnNlIGZhaWxzLgotICAvLyBSZXR1cm5zIDAgaWYgbW9yZSBkYXRhIGlzIG5lZWRlZC4KLSAgLy8gUmV0dXJuaW5nID4gMCBpbmRpY2F0ZXMgc3VjY2VzcyAmIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFyc2VkLgotICBpbnQgUGFyc2VDbHVzdGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKTsKLQotICAvLyBGaXJlIHRoZSBlbmNyeXB0ZWQgZXZlbnQgdGhyb3VnaCB0aGUgfGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JffC4KLSAgdm9pZCBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGEoY29uc3Qgc3RkOjpzdHJpbmcmIGtleV9pZCk7Ci0KLSAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yXzsKLSAgU3RhdGUgc3RhdGVfOwotICBJbml0Q0IgaW5pdF9jYl87Ci0gIE5ld0NvbmZpZ0NCIGNvbmZpZ19jYl87Ci0gIE5ld0J1ZmZlcnNDQiBuZXdfYnVmZmVyc19jYl87Ci0gIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzXzsKLSAgRW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2JfOwotCi0gIE5ld01lZGlhU2VnbWVudENCIG5ld19zZWdtZW50X2NiXzsKLSAgRW5kTWVkaWFTZWdtZW50Q0IgZW5kX29mX3NlZ21lbnRfY2JfOwotICBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOwotCi0gIGJvb2wgdW5rbm93bl9zZWdtZW50X3NpemVfOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxXZWJNQ2x1c3RlclBhcnNlcj4gY2x1c3Rlcl9wYXJzZXJfOwotICBCeXRlUXVldWUgYnl0ZV9xdWV1ZV87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1TdHJlYW1QYXJzZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX1NUUkVBTV9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZjg2N2QuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaCIKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGVzdF9kYXRhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyB0ZXN0aW5nOjpTYXZlQXJnOwotdXNpbmcgdGVzdGluZzo6XzsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1jbGFzcyBXZWJNU3RyZWFtUGFyc2VyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0gIFdlYk1TdHJlYW1QYXJzZXJUZXN0KCkKLSAgICAgIDogbWVkaWFfbG9nXyhuZXcgdGVzdGluZzo6U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgUGFyc2VXZWJNRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBleHBlY3RlZF9wYXJhbXMpIHsKLSAgICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IGJ1ZmZlciA9IFJlYWRUZXN0RGF0YUZpbGUoZmlsZW5hbWUpOwotICAgIHBhcnNlcl8ucmVzZXQobmV3IFdlYk1TdHJlYW1QYXJzZXIoKSk7Ci0gICAgRGVtdXhlcjo6RW5jcnlwdGVkTWVkaWFJbml0RGF0YUNCIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IgPQotICAgICAgICBiYXNlOjpCaW5kKCZXZWJNU3RyZWFtUGFyc2VyVGVzdDo6T25FbmNyeXB0ZWRNZWRpYUluaXREYXRhLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpOwotCi0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIEluaXRDQihfKSk7Ci0gICAgRVhQRUNUX0NBTEwoKnRoaXMsIE5ld01lZGlhU2VnbWVudENCKCkpLlRpbWVzKHRlc3Rpbmc6OkFueU51bWJlcigpKTsKLSAgICBFWFBFQ1RfQ0FMTCgqdGhpcywgRW5kTWVkaWFTZWdtZW50Q0IoKSkuVGltZXModGVzdGluZzo6QW55TnVtYmVyKCkpOwotICAgIEVYUEVDVF9DQUxMKCp0aGlzLCBOZXdCdWZmZXJzQ0IoXykpCi0gICAgICAgIC5UaW1lcyh0ZXN0aW5nOjpBbnlOdW1iZXIoKSkKLSAgICAgICAgLldpbGxSZXBlYXRlZGx5KHRlc3Rpbmc6OlJldHVybih0cnVlKSk7Ci0gICAgcGFyc2VyXy0+SW5pdCgKLSAgICAgICAgYmFzZTo6QmluZCgmV2ViTVN0cmVhbVBhcnNlclRlc3Q6OkluaXRGLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLAotICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BhcmFtcyksCi0gICAgICAgIGJhc2U6OkJpbmQoJldlYk1TdHJlYW1QYXJzZXJUZXN0OjpOZXdDb25maWdDQiwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgIGJhc2U6OkJpbmQoJldlYk1TdHJlYW1QYXJzZXJUZXN0OjpOZXdCdWZmZXJzQ0IsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgICBmYWxzZSwgIC8vIGRvbid0IGlnbm9yZV90ZXh0X3RyYWNrCi0gICAgICAgIGVuY3J5cHRlZF9tZWRpYV9pbml0X2RhdGFfY2IsCi0gICAgICAgIGJhc2U6OkJpbmQoJldlYk1TdHJlYW1QYXJzZXJUZXN0OjpOZXdNZWRpYVNlZ21lbnRDQiwKLSAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSwKLSAgICAgICAgYmFzZTo6QmluZCgmV2ViTVN0cmVhbVBhcnNlclRlc3Q6OkVuZE1lZGlhU2VnbWVudENCLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgICBtZWRpYV9sb2dfKTsKLSAgICBib29sIHJlc3VsdCA9IHBhcnNlcl8tPlBhcnNlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPmRhdGFfc2l6ZSgpKTsKLSAgICBFWFBFQ1RfVFJVRShyZXN1bHQpOwotICB9Ci0KLSAgLy8gVmVyaWZpZXMgb25seSB0aGUgZGV0ZWN0ZWQgdHJhY2sgY291bnRzIGJ5IHRyYWNrIHR5cGUsIHRoZW4gY2hhaW5zIHRvIHRoZQotICAvLyBJbml0Q0IgbW9jay4KLSAgdm9pZCBJbml0Rihjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBleHBlY3RlZF9wYXJhbXMsCi0gICAgICAgICAgICAgY29uc3QgU3RyZWFtUGFyc2VyOjpJbml0UGFyYW1ldGVycyYgcGFyYW1zKSB7Ci0gICAgRVhQRUNUX0VRKGV4cGVjdGVkX3BhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCwKLSAgICAgICAgICAgICAgcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50KTsKLSAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50LAotICAgICAgICAgICAgICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQpOwotICAgIEVYUEVDVF9FUShleHBlY3RlZF9wYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCwKLSAgICAgICAgICAgICAgcGFyYW1zLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQpOwotICAgIEluaXRDQihwYXJhbXMpOwotICB9Ci0KLSAgTU9DS19NRVRIT0QxKEluaXRDQiwgdm9pZChjb25zdCBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzJiBwYXJhbXMpKTsKLQotICBib29sIE5ld0NvbmZpZ0NCKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmVhbVBhcnNlcjo6VGV4dFRyYWNrQ29uZmlnTWFwJiB0ZXh0X3RyYWNrX21hcCkgewotICAgIERDSEVDSyh0cmFja3MuZ2V0KCkpOwotICAgIG1lZGlhX3RyYWNrc18gPSBzdGQ6Om1vdmUodHJhY2tzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIE1PQ0tfTUVUSE9EMShOZXdCdWZmZXJzQ0IsIGJvb2woY29uc3QgU3RyZWFtUGFyc2VyOjpCdWZmZXJRdWV1ZU1hcCYpKTsKLSAgTU9DS19NRVRIT0QyKE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSwKLSAgICAgICAgICAgICAgIHZvaWQoRW1lSW5pdERhdGFUeXBlIGluaXRfZGF0YV90eXBlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdF9kYXRhKSk7Ci0gIE1PQ0tfTUVUSE9EMChOZXdNZWRpYVNlZ21lbnRDQiwgdm9pZCgpKTsKLSAgTU9DS19NRVRIT0QwKEVuZE1lZGlhU2VnbWVudENCLCB2b2lkKCkpOwotCi0gIHNjb3BlZF9yZWZwdHI8dGVzdGluZzo6U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+PiBtZWRpYV9sb2dfOwotICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTVN0cmVhbVBhcnNlcj4gcGFyc2VyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhVHJhY2tzPiBtZWRpYV90cmFja3NfOwotfTsKLQotVEVTVF9GKFdlYk1TdHJlYW1QYXJzZXJUZXN0LCBWZXJpZnlNZWRpYVRyYWNrTWV0YWRhdGEpIHsKLSAgRVhQRUNUX01FRElBX0xPRyh0ZXN0aW5nOjpIYXNTdWJzdHIoIkVzdGltYXRpbmcgV2ViTSBibG9jayBkdXJhdGlvbiIpKQotICAgICAgLlRpbWVzKHRlc3Rpbmc6OkFueU51bWJlcigpKTsKLSAgU3RyZWFtUGFyc2VyOjpJbml0UGFyYW1ldGVycyBwYXJhbXMoa0luZmluaXRlRHVyYXRpb24pOwotICBwYXJhbXMuZGV0ZWN0ZWRfYXVkaW9fdHJhY2tfY291bnQgPSAxOwotICBwYXJhbXMuZGV0ZWN0ZWRfdmlkZW9fdHJhY2tfY291bnQgPSAxOwotICBwYXJhbXMuZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudCA9IDA7Ci0gIFBhcnNlV2ViTUZpbGUoImJlYXIud2VibSIsIHBhcmFtcyk7Ci0gIEVYUEVDVF9ORShtZWRpYV90cmFja3NfLmdldCgpLCBOVUxMKTsKLQotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKCkuc2l6ZSgpLCAydSk7Ci0KLSAgY29uc3QgTWVkaWFUcmFjayYgdmlkZW9fdHJhY2sgPSAqKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpWzBdKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLnR5cGUoKSwgTWVkaWFUcmFjazo6VmlkZW8pOwotICBFWFBFQ1RfRVEodmlkZW9fdHJhY2suYnl0ZXN0cmVhbV90cmFja19pZCgpLCAxKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmtpbmQoKSwgIm1haW4iKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmxhYmVsKCksICIiKTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLmxhbmd1YWdlKCksICJ1bmQiKTsKLQotICBjb25zdCBNZWRpYVRyYWNrJiBhdWRpb190cmFjayA9ICoobWVkaWFfdHJhY2tzXy0+dHJhY2tzKClbMV0pOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2sudHlwZSgpLCBNZWRpYVRyYWNrOjpBdWRpbyk7Ci0gIEVYUEVDVF9FUShhdWRpb190cmFjay5ieXRlc3RyZWFtX3RyYWNrX2lkKCksIDIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2sua2luZCgpLCAibWFpbiIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2subGFiZWwoKSwgIiIpOwotICBFWFBFQ1RfRVEoYXVkaW9fdHJhY2subGFuZ3VhZ2UoKSwgInVuZCIpOwotfQotCi1URVNUX0YoV2ViTVN0cmVhbVBhcnNlclRlc3QsIFZlcmlmeURldGVjdGVkVHJhY2tfQXVkaW9Pbmx5KSB7Ci0gIEVYUEVDVF9NRURJQV9MT0codGVzdGluZzo6SGFzU3Vic3RyKCJFc3RpbWF0aW5nIFdlYk0gYmxvY2sgZHVyYXRpb24iKSkKLSAgICAgIC5UaW1lcyh0ZXN0aW5nOjpBbnlOdW1iZXIoKSk7Ci0gIFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMgcGFyYW1zKGtJbmZpbml0ZUR1cmF0aW9uKTsKLSAgcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50ID0gMTsKLSAgcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMDsKLSAgcGFyYW1zLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQgPSAwOwotICBQYXJzZVdlYk1GaWxlKCJiZWFyLTMyMHgyNDAtYXVkaW8tb25seS53ZWJtIiwgcGFyYW1zKTsKLSAgRVhQRUNUX0VRKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpLnNpemUoKSwgMXUpOwotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKClbMF0tPnR5cGUoKSwgTWVkaWFUcmFjazo6QXVkaW8pOwotfQotCi1URVNUX0YoV2ViTVN0cmVhbVBhcnNlclRlc3QsIFZlcmlmeURldGVjdGVkVHJhY2tfVmlkZW9Pbmx5KSB7Ci0gIFN0cmVhbVBhcnNlcjo6SW5pdFBhcmFtZXRlcnMgcGFyYW1zKGtJbmZpbml0ZUR1cmF0aW9uKTsKLSAgcGFyYW1zLmRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50ID0gMDsKLSAgcGFyYW1zLmRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50ID0gMTsKLSAgcGFyYW1zLmRldGVjdGVkX3RleHRfdHJhY2tfY291bnQgPSAwOwotICBQYXJzZVdlYk1GaWxlKCJiZWFyLTMyMHgyNDAtdmlkZW8tb25seS53ZWJtIiwgcGFyYW1zKTsKLSAgRVhQRUNUX0VRKG1lZGlhX3RyYWNrc18tPnRyYWNrcygpLnNpemUoKSwgMXUpOwotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKClbMF0tPnR5cGUoKSwgTWVkaWFUcmFjazo6VmlkZW8pOwotfQotCi1URVNUX0YoV2ViTVN0cmVhbVBhcnNlclRlc3QsIFZlcmlmeURldGVjdGVkVHJhY2tzX0FWVGV4dCkgewotICBFWFBFQ1RfTUVESUFfTE9HKHRlc3Rpbmc6Okhhc1N1YnN0cigiRXN0aW1hdGluZyBXZWJNIGJsb2NrIGR1cmF0aW9uIikpCi0gICAgICAuVGltZXModGVzdGluZzo6QW55TnVtYmVyKCkpOwotICBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzIHBhcmFtcyhrSW5maW5pdGVEdXJhdGlvbik7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDE7Ci0gIHBhcmFtcy5kZXRlY3RlZF92aWRlb190cmFja19jb3VudCA9IDE7Ci0gIHBhcmFtcy5kZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50ID0gMTsKLSAgUGFyc2VXZWJNRmlsZSgiYmVhci12cDgtd2VidnR0LndlYm0iLCBwYXJhbXMpOwotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKCkuc2l6ZSgpLCAydSk7Ci0gIEVYUEVDVF9FUShtZWRpYV90cmFja3NfLT50cmFja3MoKVswXS0+dHlwZSgpLCBNZWRpYVRyYWNrOjpWaWRlbyk7Ci0gIEVYUEVDVF9FUShtZWRpYV90cmFja3NfLT50cmFja3MoKVsxXS0+dHlwZSgpLCBNZWRpYVRyYWNrOjpBdWRpbyk7Ci19Ci0KLVRFU1RfRihXZWJNU3RyZWFtUGFyc2VyVGVzdCwgQ29sb3VyRWxlbWVudCkgewotICBFWFBFQ1RfTUVESUFfTE9HKHRlc3Rpbmc6Okhhc1N1YnN0cigiRXN0aW1hdGluZyBXZWJNIGJsb2NrIGR1cmF0aW9uIikpCi0gICAgICAuVGltZXModGVzdGluZzo6QW55TnVtYmVyKCkpOwotICBTdHJlYW1QYXJzZXI6OkluaXRQYXJhbWV0ZXJzIHBhcmFtcyhrSW5maW5pdGVEdXJhdGlvbik7Ci0gIHBhcmFtcy5kZXRlY3RlZF9hdWRpb190cmFja19jb3VudCA9IDA7Ci0gIHBhcmFtcy5kZXRlY3RlZF92aWRlb190cmFja19jb3VudCA9IDE7Ci0gIHBhcmFtcy5kZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50ID0gMDsKLSAgUGFyc2VXZWJNRmlsZSgiY29sb3VyLndlYm0iLCBwYXJhbXMpOwotICBFWFBFQ1RfRVEobWVkaWFfdHJhY2tzXy0+dHJhY2tzKCkuc2l6ZSgpLCAxdSk7Ci0KLSAgY29uc3QgYXV0byYgdmlkZW9fdHJhY2sgPSBtZWRpYV90cmFja3NfLT50cmFja3MoKVswXTsKLSAgRVhQRUNUX0VRKHZpZGVvX3RyYWNrLT50eXBlKCksIE1lZGlhVHJhY2s6OlZpZGVvKTsKLQotICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZyA9Ci0gICAgICBtZWRpYV90cmFja3NfLT5nZXRWaWRlb0NvbmZpZyh2aWRlb190cmFjay0+Ynl0ZXN0cmVhbV90cmFja19pZCgpKTsKLQotICBnZng6OkNvbG9yU3BhY2UgZXhwZWN0ZWRfY29sb3Jfc3BhY2UoZ2Z4OjpDb2xvclNwYWNlOjpQcmltYXJ5SUQ6OlNNUFRFU1Q0MjhfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmeDo6Q29sb3JTcGFjZTo6VHJhbnNmZXJJRDo6TE9HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4OjpDb2xvclNwYWNlOjpNYXRyaXhJRDo6UkdCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4OjpDb2xvclNwYWNlOjpSYW5nZUlEOjpGVUxMKTsKLSAgRVhQRUNUX0VRKHZpZGVvX2NvbmZpZy5jb2xvcl9zcGFjZV9pbmZvKCksIGV4cGVjdGVkX2NvbG9yX3NwYWNlKTsKLQotICBiYXNlOjpPcHRpb25hbDxIRFJNZXRhZGF0YT4gaGRyX21ldGFkYXRhID0gdmlkZW9fY29uZmlnLmhkcl9tZXRhZGF0YSgpOwotICBFWFBFQ1RfVFJVRShoZHJfbWV0YWRhdGEuaGFzX3ZhbHVlKCkpOwotICBFWFBFQ1RfRVEoaGRyX21ldGFkYXRhLT5tYXhfY2xsLCAxMXUpOwotICBFWFBFQ1RfRVEoaGRyX21ldGFkYXRhLT5tYXhfZmFsbCwgMTJ1KTsKLQotICBjb25zdCBNYXN0ZXJpbmdNZXRhZGF0YSYgbW1kYXRhID0gaGRyX21ldGFkYXRhLT5tYXN0ZXJpbmdfbWV0YWRhdGE7Ci0gIEVYUEVDVF9GTE9BVF9FUShtbWRhdGEucHJpbWFyeV9yX2Nocm9tYXRpY2l0eV94LCAwLjFmKTsKLSAgRVhQRUNUX0ZMT0FUX0VRKG1tZGF0YS5wcmltYXJ5X3JfY2hyb21hdGljaXR5X3ksIDAuMmYpOwotICBFWFBFQ1RfRkxPQVRfRVEobW1kYXRhLnByaW1hcnlfZ19jaHJvbWF0aWNpdHlfeCwgMC4xZik7Ci0gIEVYUEVDVF9GTE9BVF9FUShtbWRhdGEucHJpbWFyeV9nX2Nocm9tYXRpY2l0eV95LCAwLjJmKTsKLSAgRVhQRUNUX0ZMT0FUX0VRKG1tZGF0YS5wcmltYXJ5X2JfY2hyb21hdGljaXR5X3gsIDAuMWYpOwotICBFWFBFQ1RfRkxPQVRfRVEobW1kYXRhLnByaW1hcnlfYl9jaHJvbWF0aWNpdHlfeSwgMC4yZik7Ci0gIEVYUEVDVF9GTE9BVF9FUShtbWRhdGEud2hpdGVfcG9pbnRfY2hyb21hdGljaXR5X3gsIDAuMWYpOwotICBFWFBFQ1RfRkxPQVRfRVEobW1kYXRhLndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV95LCAwLjJmKTsKLSAgRVhQRUNUX0VRKG1tZGF0YS5sdW1pbmFuY2VfbWF4LCA0MCk7Ci0gIEVYUEVDVF9FUShtbWRhdGEubHVtaW5hbmNlX21pbiwgMzApOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMGZmZmMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNjQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCi0jaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotc3RhdGljIFRleHRLaW5kIENvZGVjSWRUb1RleHRLaW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCkgewotICBpZiAoY29kZWNfaWQgPT0ga1dlYk1Db2RlY1N1YnRpdGxlcykgcmV0dXJuIGtUZXh0U3VidGl0bGVzOwotCi0gIGlmIChjb2RlY19pZCA9PSBrV2ViTUNvZGVjQ2FwdGlvbnMpIHJldHVybiBrVGV4dENhcHRpb25zOwotCi0gIGlmIChjb2RlY19pZCA9PSBrV2ViTUNvZGVjRGVzY3JpcHRpb25zKSByZXR1cm4ga1RleHREZXNjcmlwdGlvbnM7Ci0KLSAgaWYgKGNvZGVjX2lkID09IGtXZWJNQ29kZWNNZXRhZGF0YSkgcmV0dXJuIGtUZXh0TWV0YWRhdGE7Ci0KLSAgcmV0dXJuIGtUZXh0Tm9uZTsKLX0KLQotc3RhdGljIGJhc2U6OlRpbWVEZWx0YSBQcmVjaXNpb25DYXBwZWREZWZhdWx0RHVyYXRpb24oCi0gICAgY29uc3QgZG91YmxlIHRpbWVjb2RlX3NjYWxlX2luX3VzLCBjb25zdCBpbnQ2NF90IGR1cmF0aW9uX2luX25zKSB7Ci0gIGlmIChkdXJhdGlvbl9pbl9ucyA8PSAwKSByZXR1cm4ga05vVGltZXN0YW1wOwotCi0gIGludDY0X3QgbXVsdCA9IGR1cmF0aW9uX2luX25zIC8gMTAwMDsKLSAgbXVsdCAvPSB0aW1lY29kZV9zY2FsZV9pbl91czsKLSAgaWYgKG11bHQgPT0gMCkgcmV0dXJuIGtOb1RpbWVzdGFtcDsKLQotICBtdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtdWx0KSAqIHRpbWVjb2RlX3NjYWxlX2luX3VzOwotICByZXR1cm4gYmFzZTo6VGltZURlbHRhOjpGcm9tTWljcm9zZWNvbmRzKG11bHQpOwotfQotCi1XZWJNVHJhY2tzUGFyc2VyOjpXZWJNVHJhY2tzUGFyc2VyKGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzKQotICAgIDogaWdub3JlX3RleHRfdHJhY2tzXyhpZ25vcmVfdGV4dF90cmFja3MpLAotICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAotICAgICAgYXVkaW9fY2xpZW50XyhtZWRpYV9sb2cpLAotICAgICAgdmlkZW9fY2xpZW50XyhtZWRpYV9sb2cpIHsKLSAgUmVzZXQoKTsKLX0KLQotV2ViTVRyYWNrc1BhcnNlcjo6fldlYk1UcmFja3NQYXJzZXIoKSB7fQotCi12b2lkIFdlYk1UcmFja3NQYXJzZXI6OlJlc2V0KCkgewotICBSZXNldFRyYWNrRW50cnkoKTsKLSAgcmVzZXRfb25fbmV4dF9wYXJzZV8gPSBmYWxzZTsKLSAgYXVkaW9fdHJhY2tfbnVtXyA9IC0xOwotICBhdWRpb19kZWZhdWx0X2R1cmF0aW9uXyA9IC0xOwotICBhdWRpb19kZWNvZGVyX2NvbmZpZ18gPSBBdWRpb0RlY29kZXJDb25maWcoKTsKLSAgdmlkZW9fdHJhY2tfbnVtXyA9IC0xOwotICB2aWRlb19kZWZhdWx0X2R1cmF0aW9uXyA9IC0xOwotICB2aWRlb19kZWNvZGVyX2NvbmZpZ18gPSBWaWRlb0RlY29kZXJDb25maWcoKTsKLSAgdGV4dF90cmFja3NfLmNsZWFyKCk7Ci0gIGlnbm9yZWRfdHJhY2tzXy5jbGVhcigpOwotICBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudF8gPSAwOwotICBkZXRlY3RlZF92aWRlb190cmFja19jb3VudF8gPSAwOwotICBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50XyA9IDA7Ci0gIG1lZGlhX3RyYWNrc18ucmVzZXQobmV3IE1lZGlhVHJhY2tzKCkpOwotfQotCi12b2lkIFdlYk1UcmFja3NQYXJzZXI6OlJlc2V0VHJhY2tFbnRyeSgpIHsKLSAgdHJhY2tfdHlwZV8gPSAtMTsKLSAgdHJhY2tfbnVtXyA9IC0xOwotICB0cmFja19uYW1lXy5jbGVhcigpOwotICB0cmFja19sYW5ndWFnZV8uY2xlYXIoKTsKLSAgY29kZWNfaWRfID0gIiI7Ci0gIGNvZGVjX3ByaXZhdGVfLmNsZWFyKCk7Ci0gIHNlZWtfcHJlcm9sbF8gPSAtMTsKLSAgY29kZWNfZGVsYXlfID0gLTE7Ci0gIGRlZmF1bHRfZHVyYXRpb25fID0gLTE7Ci0gIGF1ZGlvX2NsaWVudF8uUmVzZXQoKTsKLSAgdmlkZW9fY2xpZW50Xy5SZXNldCgpOwotfQotCi1pbnQgV2ViTVRyYWNrc1BhcnNlcjo6UGFyc2UoY29uc3QgdWludDhfdCogYnVmLCBpbnQgc2l6ZSkgewotICBpZiAocmVzZXRfb25fbmV4dF9wYXJzZV8pIFJlc2V0KCk7Ci0KLSAgcmVzZXRfb25fbmV4dF9wYXJzZV8gPSB0cnVlOwotCi0gIFdlYk1MaXN0UGFyc2VyIHBhcnNlcihrV2ViTUlkVHJhY2tzLCB0aGlzKTsKLSAgaW50IHJlc3VsdCA9IHBhcnNlci5QYXJzZShidWYsIHNpemUpOwotCi0gIGlmIChyZXN1bHQgPD0gMCkgcmV0dXJuIHJlc3VsdDsKLQotICAvLyBGb3Igbm93IHdlIGRvIGFsbCBvciBub3RoaW5nIHBhcnNpbmcuCi0gIHJldHVybiBwYXJzZXIuSXNQYXJzaW5nQ29tcGxldGUoKSA/IHJlc3VsdCA6IDA7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBXZWJNVHJhY2tzUGFyc2VyOjpHZXRBdWRpb0RlZmF1bHREdXJhdGlvbigKLSAgICBjb25zdCBkb3VibGUgdGltZWNvZGVfc2NhbGVfaW5fdXMpIGNvbnN0IHsKLSAgcmV0dXJuIFByZWNpc2lvbkNhcHBlZERlZmF1bHREdXJhdGlvbih0aW1lY29kZV9zY2FsZV9pbl91cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19kZWZhdWx0X2R1cmF0aW9uXyk7Ci19Ci0KLWJhc2U6OlRpbWVEZWx0YSBXZWJNVHJhY2tzUGFyc2VyOjpHZXRWaWRlb0RlZmF1bHREdXJhdGlvbigKLSAgICBjb25zdCBkb3VibGUgdGltZWNvZGVfc2NhbGVfaW5fdXMpIGNvbnN0IHsKLSAgcmV0dXJuIFByZWNpc2lvbkNhcHBlZERlZmF1bHREdXJhdGlvbih0aW1lY29kZV9zY2FsZV9pbl91cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19kZWZhdWx0X2R1cmF0aW9uXyk7Ci19Ci0KLVdlYk1QYXJzZXJDbGllbnQqIFdlYk1UcmFja3NQYXJzZXI6Ok9uTGlzdFN0YXJ0KGludCBpZCkgewotICBpZiAoaWQgPT0ga1dlYk1JZENvbnRlbnRFbmNvZGluZ3MpIHsKLSAgICBEQ0hFQ0soIXRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8uZ2V0KCkpOwotICAgIHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8ucmVzZXQoCi0gICAgICAgIG5ldyBXZWJNQ29udGVudEVuY29kaW5nc0NsaWVudChtZWRpYV9sb2dfKSk7Ci0gICAgcmV0dXJuIHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8tPk9uTGlzdFN0YXJ0KGlkKTsKLSAgfQotCi0gIGlmIChpZCA9PSBrV2ViTUlkVHJhY2tFbnRyeSkgewotICAgIFJlc2V0VHJhY2tFbnRyeSgpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRBdWRpbykgcmV0dXJuICZhdWRpb19jbGllbnRfOwotCi0gIGlmIChpZCA9PSBrV2ViTUlkVmlkZW8pIHJldHVybiAmdmlkZW9fY2xpZW50XzsKLQotICByZXR1cm4gdGhpczsKLX0KLQotYm9vbCBXZWJNVHJhY2tzUGFyc2VyOjpPbkxpc3RFbmQoaW50IGlkKSB7Ci0gIGlmIChpZCA9PSBrV2ViTUlkQ29udGVudEVuY29kaW5ncykgewotICAgIERDSEVDSyh0cmFja19jb250ZW50X2VuY29kaW5nc19jbGllbnRfLmdldCgpKTsKLSAgICByZXR1cm4gdHJhY2tfY29udGVudF9lbmNvZGluZ3NfY2xpZW50Xy0+T25MaXN0RW5kKGlkKTsKLSAgfQotCi0gIGlmIChpZCA9PSBrV2ViTUlkVHJhY2tFbnRyeSkgewotICAgIGlmICh0cmFja190eXBlXyA9PSAtMSB8fCB0cmFja19udW1fID09IC0xKSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgICAgPDwgIk1pc3NpbmcgVHJhY2tFbnRyeSBkYXRhIGZvciAiCi0gICAgICAgICAgPDwgIiBUcmFja1R5cGUgIiA8PCB0cmFja190eXBlXyA8PCAiIFRyYWNrTnVtICIgPDwgdHJhY2tfbnVtXzsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAodHJhY2tfdHlwZV8gIT0ga1dlYk1UcmFja1R5cGVBdWRpbyAmJgotICAgICAgICB0cmFja190eXBlXyAhPSBrV2ViTVRyYWNrVHlwZVZpZGVvICYmCi0gICAgICAgIHRyYWNrX3R5cGVfICE9IGtXZWJNVHJhY2tUeXBlU3VidGl0bGVzT3JDYXB0aW9ucyAmJgotICAgICAgICB0cmFja190eXBlXyAhPSBrV2ViTVRyYWNrVHlwZURlc2NyaXB0aW9uc09yTWV0YWRhdGEpIHsKLSAgICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIlVuZXhwZWN0ZWQgVHJhY2tUeXBlICIgPDwgdHJhY2tfdHlwZV87Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVGV4dEtpbmQgdGV4dF90cmFja19raW5kID0ga1RleHROb25lOwotICAgIGlmICh0cmFja190eXBlXyA9PSBrV2ViTVRyYWNrVHlwZVN1YnRpdGxlc09yQ2FwdGlvbnMpIHsKLSAgICAgIHRleHRfdHJhY2tfa2luZCA9IENvZGVjSWRUb1RleHRLaW5kKGNvZGVjX2lkXyk7Ci0gICAgICBpZiAodGV4dF90cmFja19raW5kID09IGtUZXh0Tm9uZSkgewotICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJNaXNzaW5nIFRyYWNrRW50cnkgQ29kZWNJRCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIFRyYWNrTnVtICIgPDwgdHJhY2tfbnVtXzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAodGV4dF90cmFja19raW5kICE9IGtUZXh0U3VidGl0bGVzICYmCi0gICAgICAgICAgdGV4dF90cmFja19raW5kICE9IGtUZXh0Q2FwdGlvbnMpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiV3JvbmcgVHJhY2tFbnRyeSBDb2RlY0lEIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgVHJhY2tOdW0gIiA8PCB0cmFja19udW1fOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmICh0cmFja190eXBlXyA9PSBrV2ViTVRyYWNrVHlwZURlc2NyaXB0aW9uc09yTWV0YWRhdGEpIHsKLSAgICAgIHRleHRfdHJhY2tfa2luZCA9IENvZGVjSWRUb1RleHRLaW5kKGNvZGVjX2lkXyk7Ci0gICAgICBpZiAodGV4dF90cmFja19raW5kID09IGtUZXh0Tm9uZSkgewotICAgICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJNaXNzaW5nIFRyYWNrRW50cnkgQ29kZWNJRCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIFRyYWNrTnVtICIgPDwgdHJhY2tfbnVtXzsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAodGV4dF90cmFja19raW5kICE9IGtUZXh0RGVzY3JpcHRpb25zICYmCi0gICAgICAgICAgdGV4dF90cmFja19raW5kICE9IGtUZXh0TWV0YWRhdGEpIHsKLSAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiV3JvbmcgVHJhY2tFbnRyeSBDb2RlY0lEIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgVHJhY2tOdW0gIiA8PCB0cmFja19udW1fOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdHJpbmcgZW5jcnlwdGlvbl9rZXlfaWQ7Ci0gICAgaWYgKHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8pIHsKLSAgICAgIERDSEVDSyghdHJhY2tfY29udGVudF9lbmNvZGluZ3NfY2xpZW50Xy0+Y29udGVudF9lbmNvZGluZ3MoKS5lbXB0eSgpKTsKLSAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlwbGUgQ29udGVudEVuY29kaW5nIGluIG9uZSB0cmFjay4gQWx3YXlzIGNob29zZSB0aGUKLSAgICAgIC8vIGtleSBpZCBpbiB0aGUgZmlyc3QgQ29udGVudEVuY29kaW5nIGFzIHRoZSBrZXkgaWQgb2YgdGhlIHRyYWNrLgotICAgICAgZW5jcnlwdGlvbl9rZXlfaWQgPQotICAgICAgICAgIHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8tPmNvbnRlbnRfZW5jb2RpbmdzKClbMF0KLSAgICAgICAgICAgICAgLmVuY3J5cHRpb25fa2V5X2lkKCk7Ci0gICAgfQotCi0gICAgRW5jcnlwdGlvblNjaGVtZSBlbmNyeXB0aW9uX3NjaGVtZSA9Ci0gICAgICAgIGVuY3J5cHRpb25fa2V5X2lkLmVtcHR5KCkgPyBVbmVuY3J5cHRlZCgpIDogQWVzQ3RyRW5jcnlwdGlvblNjaGVtZSgpOwotCi0gICAgaWYgKHRyYWNrX3R5cGVfID09IGtXZWJNVHJhY2tUeXBlQXVkaW8pIHsKLSAgICAgIGRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50XysrOwotICAgICAgaWYgKGF1ZGlvX3RyYWNrX251bV8gPT0gLTEpIHsKLSAgICAgICAgYXVkaW9fdHJhY2tfbnVtXyA9IHRyYWNrX251bV87Ci0gICAgICAgIGF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkXyA9IGVuY3J5cHRpb25fa2V5X2lkOwotCi0gICAgICAgIGlmIChkZWZhdWx0X2R1cmF0aW9uXyA9PSAwKSB7Ci0gICAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiSWxsZWdhbCAwbnMgYXVkaW8gVHJhY2tFbnRyeSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVmYXVsdER1cmF0aW9uIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYXVkaW9fZGVmYXVsdF9kdXJhdGlvbl8gPSBkZWZhdWx0X2R1cmF0aW9uXzsKLQotICAgICAgICBEQ0hFQ0soIWF1ZGlvX2RlY29kZXJfY29uZmlnXy5Jc1ZhbGlkQ29uZmlnKCkpOwotICAgICAgICBpZiAoIWF1ZGlvX2NsaWVudF8uSW5pdGlhbGl6ZUNvbmZpZygKLSAgICAgICAgICAgICAgICBjb2RlY19pZF8sIGNvZGVjX3ByaXZhdGVfLCBzZWVrX3ByZXJvbGxfLCBjb2RlY19kZWxheV8sCi0gICAgICAgICAgICAgICAgZW5jcnlwdGlvbl9zY2hlbWUsICZhdWRpb19kZWNvZGVyX2NvbmZpZ18pKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1lZGlhX3RyYWNrc18tPkFkZEF1ZGlvVHJhY2soCi0gICAgICAgICAgICBhdWRpb19kZWNvZGVyX2NvbmZpZ18sCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHJlYW1QYXJzZXI6OlRyYWNrSWQ+KHRyYWNrX251bV8pLCAibWFpbiIsIHRyYWNrX25hbWVfLAotICAgICAgICAgICAgdHJhY2tfbGFuZ3VhZ2VfKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIE1FRElBX0xPRyhERUJVRywgbWVkaWFfbG9nXykgPDwgIklnbm9yaW5nIGF1ZGlvIHRyYWNrICIgPDwgdHJhY2tfbnVtXzsKLSAgICAgICAgaWdub3JlZF90cmFja3NfLmluc2VydCh0cmFja19udW1fKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRyYWNrX3R5cGVfID09IGtXZWJNVHJhY2tUeXBlVmlkZW8pIHsKLSAgICAgIGRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50XysrOwotICAgICAgaWYgKHZpZGVvX3RyYWNrX251bV8gPT0gLTEpIHsKLSAgICAgICAgdmlkZW9fdHJhY2tfbnVtXyA9IHRyYWNrX251bV87Ci0gICAgICAgIHZpZGVvX2VuY3J5cHRpb25fa2V5X2lkXyA9IGVuY3J5cHRpb25fa2V5X2lkOwotCi0gICAgICAgIGlmIChkZWZhdWx0X2R1cmF0aW9uXyA9PSAwKSB7Ci0gICAgICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiSWxsZWdhbCAwbnMgdmlkZW8gVHJhY2tFbnRyeSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVmYXVsdER1cmF0aW9uIjsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdmlkZW9fZGVmYXVsdF9kdXJhdGlvbl8gPSBkZWZhdWx0X2R1cmF0aW9uXzsKLQotICAgICAgICBEQ0hFQ0soIXZpZGVvX2RlY29kZXJfY29uZmlnXy5Jc1ZhbGlkQ29uZmlnKCkpOwotICAgICAgICBpZiAoIXZpZGVvX2NsaWVudF8uSW5pdGlhbGl6ZUNvbmZpZyhjb2RlY19pZF8sIGNvZGVjX3ByaXZhdGVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uX3NjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZGVvX2RlY29kZXJfY29uZmlnXykpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgbWVkaWFfdHJhY2tzXy0+QWRkVmlkZW9UcmFjaygKLSAgICAgICAgICAgIHZpZGVvX2RlY29kZXJfY29uZmlnXywKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFN0cmVhbVBhcnNlcjo6VHJhY2tJZD4odHJhY2tfbnVtXyksICJtYWluIiwgdHJhY2tfbmFtZV8sCi0gICAgICAgICAgICB0cmFja19sYW5ndWFnZV8pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTUVESUFfTE9HKERFQlVHLCBtZWRpYV9sb2dfKSA8PCAiSWdub3JpbmcgdmlkZW8gdHJhY2sgIiA8PCB0cmFja19udW1fOwotICAgICAgICBpZ25vcmVkX3RyYWNrc18uaW5zZXJ0KHRyYWNrX251bV8pOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAodHJhY2tfdHlwZV8gPT0ga1dlYk1UcmFja1R5cGVTdWJ0aXRsZXNPckNhcHRpb25zIHx8Ci0gICAgICAgICAgICAgICB0cmFja190eXBlXyA9PSBrV2ViTVRyYWNrVHlwZURlc2NyaXB0aW9uc09yTWV0YWRhdGEpIHsKLSAgICAgIGRldGVjdGVkX3RleHRfdHJhY2tfY291bnRfKys7Ci0gICAgICBpZiAoaWdub3JlX3RleHRfdHJhY2tzXykgewotICAgICAgICBNRURJQV9MT0coREVCVUcsIG1lZGlhX2xvZ18pIDw8ICJJZ25vcmluZyB0ZXh0IHRyYWNrICIgPDwgdHJhY2tfbnVtXzsKLSAgICAgICAgaWdub3JlZF90cmFja3NfLmluc2VydCh0cmFja19udW1fKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIHRyYWNrX251bSA9IGJhc2U6OkludDY0VG9TdHJpbmcodHJhY2tfbnVtXyk7Ci0gICAgICAgIHRleHRfdHJhY2tzX1t0cmFja19udW1fXSA9IFRleHRUcmFja0NvbmZpZyh0ZXh0X3RyYWNrX2tpbmQsIHRyYWNrX25hbWVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tfbGFuZ3VhZ2VfLCB0cmFja19udW0pOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pIDw8ICJVbmV4cGVjdGVkIFRyYWNrVHlwZSAiIDw8IHRyYWNrX3R5cGVfOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHRyYWNrX3R5cGVfID0gLTE7Ci0gICAgdHJhY2tfbnVtXyA9IC0xOwotICAgIGRlZmF1bHRfZHVyYXRpb25fID0gLTE7Ci0gICAgdHJhY2tfbmFtZV8uY2xlYXIoKTsKLSAgICB0cmFja19sYW5ndWFnZV8uY2xlYXIoKTsKLSAgICBjb2RlY19pZF8gPSAiIjsKLSAgICBjb2RlY19wcml2YXRlXy5jbGVhcigpOwotICAgIHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF8ucmVzZXQoKTsKLQotICAgIGF1ZGlvX2NsaWVudF8uUmVzZXQoKTsKLSAgICB2aWRlb19jbGllbnRfLlJlc2V0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJNVHJhY2tzUGFyc2VyOjpPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgewotICBpbnQ2NF90KiBkc3QgPSBOVUxMOwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIGtXZWJNSWRUcmFja051bWJlcjoKLSAgICAgIGRzdCA9ICZ0cmFja19udW1fOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkVHJhY2tUeXBlOgotICAgICAgZHN0ID0gJnRyYWNrX3R5cGVfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkU2Vla1ByZVJvbGw6Ci0gICAgICBkc3QgPSAmc2Vla19wcmVyb2xsXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZENvZGVjRGVsYXk6Ci0gICAgICBkc3QgPSAmY29kZWNfZGVsYXlfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkRGVmYXVsdER1cmF0aW9uOgotICAgICAgZHN0ID0gJmRlZmF1bHRfZHVyYXRpb25fOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKCpkc3QgIT0gLTEpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJNdWx0aXBsZSB2YWx1ZXMgZm9yIGlkICIgPDwgc3RkOjpoZXggPDwgaWQgPDwgIiBzcGVjaWZpZWQiOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gICpkc3QgPSB2YWw7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYk1UcmFja3NQYXJzZXI6Ok9uRmxvYXQoaW50IGlkLCBkb3VibGUgdmFsKSB7IHJldHVybiB0cnVlOyB9Ci0KLWJvb2wgV2ViTVRyYWNrc1BhcnNlcjo6T25CaW5hcnkoaW50IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgewotICBpZiAoaWQgPT0ga1dlYk1JZENvZGVjUHJpdmF0ZSkgewotICAgIGlmICghY29kZWNfcHJpdmF0ZV8uZW1wdHkoKSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKQotICAgICAgICAgIDw8ICJNdWx0aXBsZSBDb2RlY1ByaXZhdGUgZmllbGRzIGluIGEgdHJhY2suIjsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgY29kZWNfcHJpdmF0ZV8uYXNzaWduKGRhdGEsIGRhdGEgKyBzaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJNVHJhY2tzUGFyc2VyOjpPblN0cmluZyhpbnQgaWQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKLSAgaWYgKGlkID09IGtXZWJNSWRDb2RlY0lEKSB7Ci0gICAgaWYgKCFjb2RlY19pZF8uZW1wdHkoKSkgewotICAgICAgTUVESUFfTE9HKEVSUk9SLCBtZWRpYV9sb2dfKSA8PCAiTXVsdGlwbGUgQ29kZWNJRCBmaWVsZHMgaW4gYSB0cmFjayI7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY29kZWNfaWRfID0gc3RyOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWROYW1lKSB7Ci0gICAgdHJhY2tfbmFtZV8gPSBzdHI7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpZiAoaWQgPT0ga1dlYk1JZExhbmd1YWdlKSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgbGFuZ3VhZ2Ugc3RyaW5nIGlzIGluIElTTyA2MzktMiBmb3JtYXQgKDMgbGV0dGVyIGNvZGUgb2YgYQotICAgIC8vIGxhbmd1YWdlLCBhbGwgbG93ZXItY2FzZSBsZXR0ZXJzKS4KLSAgICBpZiAoc3RyLnNpemUoKSAhPSAzIHx8IHN0clswXSA8ICdhJyB8fCBzdHJbMF0gPiAneicgfHwgc3RyWzFdIDwgJ2EnIHx8Ci0gICAgICAgIHN0clsxXSA+ICd6JyB8fCBzdHJbMl0gPCAnYScgfHwgc3RyWzJdID4gJ3onKSB7Ci0gICAgICBWTE9HKDIpIDw8ICJJZ25vcmluZyBrV2ViTUlkTGFuZ3VhZ2UgKG5vdCBJU08gNjM5LTIgY29tcGxpYW50KTogIiA8PCBzdHI7Ci0gICAgICB0cmFja19sYW5ndWFnZV8gPSAidW5kIjsKLSAgICB9IGVsc2UgewotICAgICAgdHJhY2tfbGFuZ3VhZ2VfID0gc3RyOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdHJhY2tzX3BhcnNlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDJhNTRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9UUkFDS1NfUEFSU0VSX0hfCi0jZGVmaW5lIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9UUkFDS1NfUEFSU0VSX0hfCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgotI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV90cmFja3MuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2F1ZGlvX2NsaWVudC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci0KLS8vIFBhcnNlciBmb3IgV2ViTSBUcmFja3MgZWxlbWVudC4KLWNsYXNzIE1FRElBX0VYUE9SVCBXZWJNVHJhY2tzUGFyc2VyIDogcHVibGljIFdlYk1QYXJzZXJDbGllbnQgewotIHB1YmxpYzoKLSAgV2ViTVRyYWNrc1BhcnNlcihjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzKTsKLSAgfldlYk1UcmFja3NQYXJzZXIoKSBvdmVycmlkZTsKLQotICAvLyBQYXJzZXMgYSBXZWJNIFRyYWNrcyBlbGVtZW50IGluIHxidWZ8LgotICAvLwotICAvLyBSZXR1cm5zIC0xIGlmIHRoZSBwYXJzZSBmYWlscy4KLSAgLy8gUmV0dXJucyAwIGlmIG1vcmUgZGF0YSBpcyBuZWVkZWQuCi0gIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwYXJzZWQgb24gc3VjY2Vzcy4KLSAgaW50IFBhcnNlKGNvbnN0IHVpbnQ4X3QqIGJ1ZiwgaW50IHNpemUpOwotCi0gIGludDY0X3QgYXVkaW9fdHJhY2tfbnVtKCkgY29uc3QgeyByZXR1cm4gYXVkaW9fdHJhY2tfbnVtXzsgfQotICBpbnQ2NF90IHZpZGVvX3RyYWNrX251bSgpIGNvbnN0IHsgcmV0dXJuIHZpZGVvX3RyYWNrX251bV87IH0KLQotICAvLyBJZiBUcmFja0VudHJ5IERlZmF1bHREdXJhdGlvbiBmaWVsZCBleGlzdGVkIGZvciB0aGUgYXNzb2NpYXRlZCBhdWRpbyBvcgotICAvLyB2aWRlbyB0cmFjaywgcmV0dXJucyB0aGF0IHZhbHVlIGNvbnZlcnRlZCBmcm9tIG5zIHRvIGJhc2U6OlRpbWVEZWx0YSB3aXRoCi0gIC8vIHByZWNpc2lvbiBub3QgZ3JlYXRlciB0aGFuIHx0aW1lY29kZV9zY2FsZV9pbl91c3wuIERlZmF1bHRzIHRvCi0gIC8vIGtOb1RpbWVzdGFtcC4KLSAgYmFzZTo6VGltZURlbHRhIEdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKAotICAgICAgY29uc3QgZG91YmxlIHRpbWVjb2RlX3NjYWxlX2luX3VzKSBjb25zdDsKLSAgYmFzZTo6VGltZURlbHRhIEdldFZpZGVvRGVmYXVsdER1cmF0aW9uKAotICAgICAgY29uc3QgZG91YmxlIHRpbWVjb2RlX3NjYWxlX2luX3VzKSBjb25zdDsKLQotICBjb25zdCBzdGQ6OnNldDxpbnQ2NF90PiYgaWdub3JlZF90cmFja3MoKSBjb25zdCB7IHJldHVybiBpZ25vcmVkX3RyYWNrc187IH0KLQotICBjb25zdCBzdGQ6OnN0cmluZyYgYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF1ZGlvX2VuY3J5cHRpb25fa2V5X2lkXzsKLSAgfQotCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fZGVjb2Rlcl9jb25maWcoKSB7Ci0gICAgcmV0dXJuIGF1ZGlvX2RlY29kZXJfY29uZmlnXzsKLSAgfQotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiB2aWRlb19lbmNyeXB0aW9uX2tleV9pZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gdmlkZW9fZW5jcnlwdGlvbl9rZXlfaWRfOwotICB9Ci0KLSAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19kZWNvZGVyX2NvbmZpZygpIHsKLSAgICByZXR1cm4gdmlkZW9fZGVjb2Rlcl9jb25maWdfOwotICB9Ci0KLSAgdHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRleHRUcmFja0NvbmZpZz4gVGV4dFRyYWNrczsKLQotICBjb25zdCBUZXh0VHJhY2tzJiB0ZXh0X3RyYWNrcygpIGNvbnN0IHsgcmV0dXJuIHRleHRfdHJhY2tzXzsgfQotCi0gIGludCBkZXRlY3RlZF9hdWRpb190cmFja19jb3VudCgpIGNvbnN0IHsgcmV0dXJuIGRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50XzsgfQotCi0gIGludCBkZXRlY3RlZF92aWRlb190cmFja19jb3VudCgpIGNvbnN0IHsgcmV0dXJuIGRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50XzsgfQotCi0gIGludCBkZXRlY3RlZF90ZXh0X3RyYWNrX2NvdW50KCkgY29uc3QgeyByZXR1cm4gZGV0ZWN0ZWRfdGV4dF90cmFja19jb3VudF87IH0KLQotICAvLyBOb3RlOiBDYWxsaW5nIG1lZGlhX3RyYWNrcygpIG1ldGhvZCBwYXNzZXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgTWVkaWFUcmFja3MKLSAgLy8gb2JqZWN0IGZyb20gV2ViTVRyYWNrc1BhcnNlciB0byB0aGUgY2FsbGVyICh3aGljaCBpcyB0eXBpY2FsbHkKLSAgLy8gV2ViTVN0cmVhbVBhcnNlciBvYmplY3QpLiBTbyB0aGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbmx5IG9uY2UsIGFmdGVyCi0gIC8vIHRyYWNrIHBhcnNpbmcgaGFzIGJlZW4gY29tcGxldGVkLgotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IG1lZGlhX3RyYWNrcygpIHsKLSAgICBDSEVDSyhtZWRpYV90cmFja3NfLmdldCgpKTsKLSAgICByZXR1cm4gc3RkOjptb3ZlKG1lZGlhX3RyYWNrc18pOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIFJlc2V0KCk7Ci0gIHZvaWQgUmVzZXRUcmFja0VudHJ5KCk7Ci0KLSAgLy8gV2ViTVBhcnNlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgV2ViTVBhcnNlckNsaWVudCogT25MaXN0U3RhcnQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPbkxpc3RFbmQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25GbG9hdChpbnQgaWQsIGRvdWJsZSB2YWwpIG92ZXJyaWRlOwotICBib29sIE9uQmluYXJ5KGludCBpZCwgY29uc3QgdWludDhfdCogZGF0YSwgaW50IHNpemUpIG92ZXJyaWRlOwotICBib29sIE9uU3RyaW5nKGludCBpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgb3ZlcnJpZGU7Ci0KLSAgYm9vbCByZXNldF9vbl9uZXh0X3BhcnNlXzsKLSAgaW50NjRfdCB0cmFja190eXBlXzsKLSAgaW50NjRfdCB0cmFja19udW1fOwotICBzdGQ6OnN0cmluZyB0cmFja19uYW1lXzsKLSAgc3RkOjpzdHJpbmcgdHJhY2tfbGFuZ3VhZ2VfOwotICBzdGQ6OnN0cmluZyBjb2RlY19pZF87Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGNvZGVjX3ByaXZhdGVfOwotICBpbnQ2NF90IHNlZWtfcHJlcm9sbF87Ci0gIGludDY0X3QgY29kZWNfZGVsYXlfOwotICBpbnQ2NF90IGRlZmF1bHRfZHVyYXRpb25fOwotICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTUNvbnRlbnRFbmNvZGluZ3NDbGllbnQ+IHRyYWNrX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudF87Ci0KLSAgaW50NjRfdCBhdWRpb190cmFja19udW1fOwotICBpbnQ2NF90IGF1ZGlvX2RlZmF1bHRfZHVyYXRpb25fOwotICBpbnQ2NF90IHZpZGVvX3RyYWNrX251bV87Ci0gIGludDY0X3QgdmlkZW9fZGVmYXVsdF9kdXJhdGlvbl87Ci0gIGJvb2wgaWdub3JlX3RleHRfdHJhY2tzXzsKLSAgVGV4dFRyYWNrcyB0ZXh0X3RyYWNrc187Ci0gIHN0ZDo6c2V0PGludDY0X3Q+IGlnbm9yZWRfdHJhY2tzXzsKLSAgc3RkOjpzdHJpbmcgYXVkaW9fZW5jcnlwdGlvbl9rZXlfaWRfOwotICBzdGQ6OnN0cmluZyB2aWRlb19lbmNyeXB0aW9uX2tleV9pZF87Ci0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0KLSAgV2ViTUF1ZGlvQ2xpZW50IGF1ZGlvX2NsaWVudF87Ci0gIEF1ZGlvRGVjb2RlckNvbmZpZyBhdWRpb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgV2ViTVZpZGVvQ2xpZW50IHZpZGVvX2NsaWVudF87Ci0gIFZpZGVvRGVjb2RlckNvbmZpZyB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0KLSAgaW50IGRldGVjdGVkX2F1ZGlvX3RyYWNrX2NvdW50XzsKLSAgaW50IGRldGVjdGVkX3ZpZGVvX3RyYWNrX2NvdW50XzsKLSAgaW50IGRldGVjdGVkX3RleHRfdHJhY2tfY291bnRfOwotICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IG1lZGlhX3RyYWNrc187Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1UcmFja3NQYXJzZXIpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX1RSQUNLU19QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyX3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXJfdW5pdHRlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OTRkOGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXJfdW5pdHRlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuaCIKLQotI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2NoYW5uZWxfbGF5b3V0LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbW9ja19tZWRpYV9sb2cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2suaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotdXNpbmcgOjp0ZXN0aW5nOjpIYXNTdWJzdHI7Ci11c2luZyA6OnRlc3Rpbmc6OkluU2VxdWVuY2U7Ci11c2luZyA6OnRlc3Rpbmc6OlJldHVybjsKLXVzaW5nIDo6dGVzdGluZzo6U3RyaWN0TW9jazsKLXVzaW5nIDo6dGVzdGluZzo6XzsKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1zdGF0aWMgY29uc3QgZG91YmxlIGtEZWZhdWx0VGltZWNvZGVTY2FsZUluVXMgPSAxMDAwLjA7ICAvLyAxIG1zIHJlc29sdXRpb24KLQotY2xhc3MgV2ViTVRyYWNrc1BhcnNlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Ci0gcHVibGljOgotICBXZWJNVHJhY2tzUGFyc2VyVGVzdCgpIDogbWVkaWFfbG9nXyhuZXcgU3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+KCkpIHt9Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgVmVyaWZ5VGV4dFRyYWNrSW5mbyhjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRLaW5kIHRleHRfa2luZCwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbGFuZ3VhZ2UpIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTVRyYWNrc1BhcnNlcj4gcGFyc2VyKAotICAgICAgICBuZXcgV2ViTVRyYWNrc1BhcnNlcihtZWRpYV9sb2dfLCBmYWxzZSkpOwotCi0gICAgaW50IHJlc3VsdCA9IHBhcnNlci0+UGFyc2UoYnVmZmVyLCBidWZmZXJfc2l6ZSk7Ci0gICAgRVhQRUNUX0dUKHJlc3VsdCwgMCk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgYnVmZmVyX3NpemUpOwotCi0gICAgY29uc3QgV2ViTVRyYWNrc1BhcnNlcjo6VGV4dFRyYWNrcyYgdGV4dF90cmFja3MgPSBwYXJzZXItPnRleHRfdHJhY2tzKCk7Ci0gICAgRVhQRUNUX0VRKHRleHRfdHJhY2tzLnNpemUoKSwgV2ViTVRyYWNrc1BhcnNlcjo6VGV4dFRyYWNrczo6c2l6ZV90eXBlKDEpKTsKLQotICAgIGNvbnN0IFdlYk1UcmFja3NQYXJzZXI6OlRleHRUcmFja3M6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9Ci0gICAgICAgIHRleHRfdHJhY2tzLmJlZ2luKCk7Ci0gICAgRVhQRUNUX0VRKGl0ci0+Zmlyc3QsIDEpOyAgLy8gdHJhY2sgbnVtCi0KLSAgICBjb25zdCBUZXh0VHJhY2tDb25maWcmIGNvbmZpZyA9IGl0ci0+c2Vjb25kOwotICAgIEVYUEVDVF9FUShjb25maWcua2luZCgpLCB0ZXh0X2tpbmQpOwotICAgIEVYUEVDVF9UUlVFKGNvbmZpZy5sYWJlbCgpID09IG5hbWUpOwotICAgIEVYUEVDVF9UUlVFKGNvbmZpZy5sYW5ndWFnZSgpID09IGxhbmd1YWdlKTsKLSAgfQotCi0gIHNjb3BlZF9yZWZwdHI8U3RyaWN0TW9jazxNb2NrTWVkaWFMb2c+PiBtZWRpYV9sb2dfOwotfTsKLQotVEVTVF9GKFdlYk1UcmFja3NQYXJzZXJUZXN0LCBTdWJ0aXRsZU5vTmFtZU5vTGFuZykgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgVHJhY2tzQnVpbGRlciB0YjsKLSAgdGIuQWRkVGV4dFRyYWNrKDEsIDEsIGtXZWJNQ29kZWNTdWJ0aXRsZXMsICIiLCAiIik7Ci0KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmID0gdGIuRmluaXNoKCk7Ci0gIFZlcmlmeVRleHRUcmFja0luZm8oJmJ1ZlswXSwgYnVmLnNpemUoKSwga1RleHRTdWJ0aXRsZXMsICIiLCAiIik7Ci19Ci0KLVRFU1RfRihXZWJNVHJhY2tzUGFyc2VyVGVzdCwgU3VidGl0bGVZZXNOYW1lTm9MYW5nKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBUcmFja3NCdWlsZGVyIHRiOwotICB0Yi5BZGRUZXh0VHJhY2soMSwgMSwga1dlYk1Db2RlY1N1YnRpdGxlcywgIlNwb2NrIiwgIiIpOwotCi0gIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZiA9IHRiLkZpbmlzaCgpOwotICBWZXJpZnlUZXh0VHJhY2tJbmZvKCZidWZbMF0sIGJ1Zi5zaXplKCksIGtUZXh0U3VidGl0bGVzLCAiU3BvY2siLCAiIik7Ci19Ci0KLVRFU1RfRihXZWJNVHJhY2tzUGFyc2VyVGVzdCwgU3VidGl0bGVOb05hbWVZZXNMYW5nKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBUcmFja3NCdWlsZGVyIHRiOwotICB0Yi5BZGRUZXh0VHJhY2soMSwgMSwga1dlYk1Db2RlY1N1YnRpdGxlcywgIiIsICJlbmciKTsKLQotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSB0Yi5GaW5pc2goKTsKLSAgVmVyaWZ5VGV4dFRyYWNrSW5mbygmYnVmWzBdLCBidWYuc2l6ZSgpLCBrVGV4dFN1YnRpdGxlcywgIiIsICJlbmciKTsKLX0KLQotVEVTVF9GKFdlYk1UcmFja3NQYXJzZXJUZXN0LCBTdWJ0aXRsZVllc05hbWVZZXNMYW5nKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBUcmFja3NCdWlsZGVyIHRiOwotICB0Yi5BZGRUZXh0VHJhY2soMSwgMSwga1dlYk1Db2RlY1N1YnRpdGxlcywgIlBpY2FyZCIsICJmcmUiKTsKLQotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSB0Yi5GaW5pc2goKTsKLSAgVmVyaWZ5VGV4dFRyYWNrSW5mbygmYnVmWzBdLCBidWYuc2l6ZSgpLCBrVGV4dFN1YnRpdGxlcywgIlBpY2FyZCIsICJmcmUiKTsKLX0KLQotVEVTVF9GKFdlYk1UcmFja3NQYXJzZXJUZXN0LCBJZ25vcmluZ1RleHRUcmFja3MpIHsKLSAgSW5TZXF1ZW5jZSBzOwotCi0gIFRyYWNrc0J1aWxkZXIgdGI7Ci0gIHRiLkFkZFRleHRUcmFjaygxLCAxLCBrV2ViTUNvZGVjU3VidGl0bGVzLCAiU3VidGl0bGVzIiwgImZyZSIpOwotICB0Yi5BZGRUZXh0VHJhY2soMiwgMiwga1dlYk1Db2RlY1N1YnRpdGxlcywgIkNvbW1lbnRhcnkiLCAiZnJlIik7Ci0KLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmID0gdGIuRmluaXNoKCk7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXZWJNVHJhY2tzUGFyc2VyPiBwYXJzZXIoCi0gICAgICBuZXcgV2ViTVRyYWNrc1BhcnNlcihtZWRpYV9sb2dfLCB0cnVlKSk7Ci0KLSAgRVhQRUNUX01FRElBX0xPRyhIYXNTdWJzdHIoIklnbm9yaW5nIHRleHQgdHJhY2sgMSIpKTsKLSAgRVhQRUNUX01FRElBX0xPRyhIYXNTdWJzdHIoIklnbm9yaW5nIHRleHQgdHJhY2sgMiIpKTsKLQotICBpbnQgcmVzdWx0ID0gcGFyc2VyLT5QYXJzZSgmYnVmWzBdLCBidWYuc2l6ZSgpKTsKLSAgRVhQRUNUX0dUKHJlc3VsdCwgMCk7Ci0gIEVYUEVDVF9FUShyZXN1bHQsIHN0YXRpY19jYXN0PGludD4oYnVmLnNpemUoKSkpOwotCi0gIEVYUEVDVF9FUShwYXJzZXItPnRleHRfdHJhY2tzKCkuc2l6ZSgpLCAwdSk7Ci0KLSAgY29uc3Qgc3RkOjpzZXQ8aW50NjRfdD4mIGlnbm9yZWRfdHJhY2tzID0gcGFyc2VyLT5pZ25vcmVkX3RyYWNrcygpOwotICBFWFBFQ1RfVFJVRShpZ25vcmVkX3RyYWNrcy5maW5kKDEpICE9IGlnbm9yZWRfdHJhY2tzLmVuZCgpKTsKLSAgRVhQRUNUX1RSVUUoaWdub3JlZF90cmFja3MuZmluZCgyKSAhPSBpZ25vcmVkX3RyYWNrcy5lbmQoKSk7Ci0KLSAgLy8gVGVzdCBhZ2FpbiB3L28gaWdub3JpbmcgdGhlIHRlc3QgdHJhY2tzLgotICBwYXJzZXIucmVzZXQobmV3IFdlYk1UcmFja3NQYXJzZXIobWVkaWFfbG9nXywgZmFsc2UpKTsKLQotICByZXN1bHQgPSBwYXJzZXItPlBhcnNlKCZidWZbMF0sIGJ1Zi5zaXplKCkpOwotICBFWFBFQ1RfR1QocmVzdWx0LCAwKTsKLQotICBFWFBFQ1RfRVEocGFyc2VyLT5pZ25vcmVkX3RyYWNrcygpLnNpemUoKSwgMHUpOwotICBFWFBFQ1RfRVEocGFyc2VyLT50ZXh0X3RyYWNrcygpLnNpemUoKSwgMnUpOwotfQotCi1URVNUX0YoV2ViTVRyYWNrc1BhcnNlclRlc3QsIEF1ZGlvVmlkZW9EZWZhdWx0RHVyYXRpb25VbnNldCkgewotICAvLyBPdGhlciBhdWRpby92aWRlbyBkZWNvZGVyIGNvbmZpZyBmaWVsZHMgYXJlIG5lY2Vzc2FyeSBpbiB0aGUgdGVzdAotICAvLyBhdWRpby92aWRlbyBUcmFja0VudHJ5IGNvbmZpZ3VyYXRpb25zLiBUaGlzIG1ldGhvZCBkb2VzIG9ubHkgdmVyeSBtaW5pbWFsCi0gIC8vIHZlcmlmaWNhdGlvbiBvZiB0aGVpciBpbmNsdXNpb24gYW5kIHBhcnNpbmc7IHRoZSBnb2FsIGlzIHRvIGNvbmZpcm0KLSAgLy8gVHJhY2tFbnRyeSBEZWZhdWx0RHVyYXRpb24gZGVmYXVsdHMgdG8gLTEgaWYgbm90IGluY2x1ZGVkIGluIGF1ZGlvIG9yCi0gIC8vIHZpZGVvIFRyYWNrRW50cnkuCi0gIFRyYWNrc0J1aWxkZXIgdGI7Ci0gIHRiLkFkZEF1ZGlvVHJhY2soMSwgMSwgIkFfVk9SQklTIiwgImF1ZGlvIiwgIiIsIC0xLCAyLCA4MDAwKTsKLSAgdGIuQWRkVmlkZW9UcmFjaygyLCAyLCAiVl9WUDgiLCAidmlkZW8iLCAiIiwgLTEsIDMyMCwgMjQwKTsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gYnVmID0gdGIuRmluaXNoKCk7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFdlYk1UcmFja3NQYXJzZXI+IHBhcnNlcigKLSAgICAgIG5ldyBXZWJNVHJhY2tzUGFyc2VyKG1lZGlhX2xvZ18sIHRydWUpKTsKLSAgaW50IHJlc3VsdCA9IHBhcnNlci0+UGFyc2UoJmJ1ZlswXSwgYnVmLnNpemUoKSk7Ci0gIEVYUEVDVF9MRSgwLCByZXN1bHQpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PihidWYuc2l6ZSgpKSwgcmVzdWx0KTsKLQotICBFWFBFQ1RfRVEoa05vVGltZXN0YW1wLAotICAgICAgICAgICAgcGFyc2VyLT5HZXRBdWRpb0RlZmF1bHREdXJhdGlvbihrRGVmYXVsdFRpbWVjb2RlU2NhbGVJblVzKSk7Ci0gIEVYUEVDVF9FUShrTm9UaW1lc3RhbXAsCi0gICAgICAgICAgICBwYXJzZXItPkdldFZpZGVvRGVmYXVsdER1cmF0aW9uKGtEZWZhdWx0VGltZWNvZGVTY2FsZUluVXMpKTsKLQotICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2NvbmZpZyA9IHBhcnNlci0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgRVhQRUNUX1RSVUUodmlkZW9fY29uZmlnLklzVmFsaWRDb25maWcoKSk7Ci0gIEVYUEVDVF9FUSgzMjAsIHZpZGVvX2NvbmZpZy5jb2RlZF9zaXplKCkud2lkdGgoKSk7Ci0gIEVYUEVDVF9FUSgyNDAsIHZpZGVvX2NvbmZpZy5jb2RlZF9zaXplKCkuaGVpZ2h0KCkpOwotCi0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnID0gcGFyc2VyLT5hdWRpb19kZWNvZGVyX2NvbmZpZygpOwotICBFWFBFQ1RfVFJVRShhdWRpb19jb25maWcuSXNWYWxpZENvbmZpZygpKTsKLSAgRVhQRUNUX0VRKENIQU5ORUxfTEFZT1VUX1NURVJFTywgYXVkaW9fY29uZmlnLmNoYW5uZWxfbGF5b3V0KCkpOwotICBFWFBFQ1RfRVEoODAwMCwgYXVkaW9fY29uZmlnLnNhbXBsZXNfcGVyX3NlY29uZCgpKTsKLX0KLQotVEVTVF9GKFdlYk1UcmFja3NQYXJzZXJUZXN0LCBBdWRpb1ZpZGVvRGVmYXVsdER1cmF0aW9uU2V0KSB7Ci0gIC8vIENvbmZpcm0gYXVkaW8gb3IgdmlkZW8gVHJhY2tFbnRyeSBEZWZhdWx0RHVyYXRpb24gdmFsdWVzIGFyZSBwYXJzZWQsIGlmCi0gIC8vIHByZXNlbnQuCi0gIFRyYWNrc0J1aWxkZXIgdGI7Ci0gIHRiLkFkZEF1ZGlvVHJhY2soMSwgMSwgIkFfVk9SQklTIiwgImF1ZGlvIiwgIiIsIDEyMzQ1Njc4LCAyLCA4MDAwKTsKLSAgdGIuQWRkVmlkZW9UcmFjaygyLCAyLCAiVl9WUDgiLCAidmlkZW8iLCAiIiwgOTg3NjU0MzIxLCAzMjAsIDI0MCk7Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZiA9IHRiLkZpbmlzaCgpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxXZWJNVHJhY2tzUGFyc2VyPiBwYXJzZXIoCi0gICAgICBuZXcgV2ViTVRyYWNrc1BhcnNlcihtZWRpYV9sb2dfLCB0cnVlKSk7Ci0gIGludCByZXN1bHQgPSBwYXJzZXItPlBhcnNlKCZidWZbMF0sIGJ1Zi5zaXplKCkpOwotICBFWFBFQ1RfTEUoMCwgcmVzdWx0KTsKLSAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oYnVmLnNpemUoKSksIHJlc3VsdCk7Ci0KLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMjAwMCksCi0gICAgICAgICAgICBwYXJzZXItPkdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKGtEZWZhdWx0VGltZWNvZGVTY2FsZUluVXMpKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcyg5ODUwMDApLAotICAgICAgICAgICAgcGFyc2VyLT5HZXRWaWRlb0RlZmF1bHREdXJhdGlvbig1MDAwLjApKTsgIC8vIDUgbXMgcmVzb2x1dGlvbgotICBFWFBFQ1RfRVEoa05vVGltZXN0YW1wLCBwYXJzZXItPkdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKDEyMzQ2LjApKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMjM0NSksCi0gICAgICAgICAgICBwYXJzZXItPkdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKDEyMzQ1LjApKTsKLSAgRVhQRUNUX0VRKGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pY3Jvc2Vjb25kcygxMjAwMyksCi0gICAgICAgICAgICBwYXJzZXItPkdldEF1ZGlvRGVmYXVsdER1cmF0aW9uKDEwMDAuMykpOyAgLy8gMS4wMDAzIG1zIHJlc29sdXRpb24KLX0KLQotVEVTVF9GKFdlYk1UcmFja3NQYXJzZXJUZXN0LCBJbnZhbGlkWmVyb0RlZmF1bHREdXJhdGlvblNldCkgewotICAvLyBDb25maXJtIHBhcnNlIGVycm9yIGlmIFRyYWNrRW50cnkgRGVmYXVsdER1cmF0aW9uIGlzIHByZXNlbnQsIGJ1dCBpcyAwbnMuCi0gIFRyYWNrc0J1aWxkZXIgdGIodHJ1ZSk7Ci0gIHRiLkFkZEF1ZGlvVHJhY2soMSwgMSwgIkFfVk9SQklTIiwgImF1ZGlvIiwgIiIsIDAsIDIsIDgwMDApOwotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSB0Yi5GaW5pc2goKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTVRyYWNrc1BhcnNlcj4gcGFyc2VyKAotICAgICAgbmV3IFdlYk1UcmFja3NQYXJzZXIobWVkaWFfbG9nXywgdHJ1ZSkpOwotCi0gIEVYUEVDVF9NRURJQV9MT0coSGFzU3Vic3RyKCJJbGxlZ2FsIDBucyBhdWRpbyBUcmFja0VudHJ5IERlZmF1bHREdXJhdGlvbiIpKTsKLQotICBFWFBFQ1RfRVEoLTEsIHBhcnNlci0+UGFyc2UoJmJ1ZlswXSwgYnVmLnNpemUoKSkpOwotfQotCi1URVNUX0YoV2ViTVRyYWNrc1BhcnNlclRlc3QsIEhpZ2hUcmFja1VJRCkgewotICAvLyBDb25maXJtIG5vIHBhcnNlIGVycm9yIGlmIFRyYWNrRW50cnkgVHJhY2tVSUQgaGFzIE1TYiBzZXQKLSAgLy8gKGh0dHA6Ly9jcmJ1Zy5jb20vMzk3MDY3KS4KLSAgVHJhY2tzQnVpbGRlciB0Yih0cnVlKTsKLSAgdGIuQWRkQXVkaW9UcmFjaygxLCAxVUxMIDw8IDMxLCAiQV9WT1JCSVMiLCAiYXVkaW8iLCAiIiwgNDAsIDIsIDgwMDApOwotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBidWYgPSB0Yi5GaW5pc2goKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8V2ViTVRyYWNrc1BhcnNlcj4gcGFyc2VyKAotICAgICAgbmV3IFdlYk1UcmFja3NQYXJzZXIobWVkaWFfbG9nXywgdHJ1ZSkpOwotICBFWFBFQ1RfR1QocGFyc2VyLT5QYXJzZSgmYnVmWzBdLCBidWYuc2l6ZSgpKSwgMCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5jYyBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV92aWRlb19jbGllbnQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MmRlNjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50LmgiCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotCi1uYW1lc3BhY2UgewotLy8gVHJpZXMgdG8gcGFyc2UgfGRhdGF8IHRvIGV4dHJhY3QgdGhlIFZQOSBQcm9maWxlIElELCBvciByZXR1cm5zIFByb2ZpbGUgMC4KLW1lZGlhOjpWaWRlb0NvZGVjUHJvZmlsZSBHZXRWUDlDb2RlY1Byb2ZpbGUoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGRhdGEpIHsKLSAgLy8gVlA5IENvZGVjUHJpdmF0ZSAoaHR0cDovL3dpa2kud2VibXByb2plY3Qub3JnL3ZwOS1jb2RlY3ByaXZhdGUpIG1pZ2h0IGhhdmUKLSAgLy8gUHJvZmlsZSBpbmZvcm1hdGlvbiBpbiB0aGUgZmlyc3QgZmllbGQsIGlmIHByZXNlbnQuCi0gIGNvbnN0ZXhwciB1aW50OF90IGtWUDlQcm9maWxlRmllbGRJZCA9IDB4MDE7Ci0gIGNvbnN0ZXhwciB1aW50OF90IGtWUDlQcm9maWxlRmllbGRMZW5ndGggPSAxOwotICBpZiAoZGF0YS5zaXplKCkgPCAzIHx8IGRhdGFbMF0gIT0ga1ZQOVByb2ZpbGVGaWVsZElkIHx8Ci0gICAgICBkYXRhWzFdICE9IGtWUDlQcm9maWxlRmllbGRMZW5ndGggfHwgZGF0YVsyXSA+IDMpIHsKLSAgICByZXR1cm4gVlA5UFJPRklMRV9QUk9GSUxFMDsKLSAgfQotICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlkZW9Db2RlY1Byb2ZpbGU+KAotICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihWUDlQUk9GSUxFX1BST0ZJTEUwKSArIGRhdGFbMl0pOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLVdlYk1WaWRlb0NsaWVudDo6V2ViTVZpZGVvQ2xpZW50KGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpCi0gICAgOiBtZWRpYV9sb2dfKG1lZGlhX2xvZyksIGNvbG91cl9wYXJzZWRfKGZhbHNlKSB7Ci0gIFJlc2V0KCk7Ci19Ci0KLVdlYk1WaWRlb0NsaWVudDo6fldlYk1WaWRlb0NsaWVudCgpIHt9Ci0KLXZvaWQgV2ViTVZpZGVvQ2xpZW50OjpSZXNldCgpIHsKLSAgcGl4ZWxfd2lkdGhfID0gLTE7Ci0gIHBpeGVsX2hlaWdodF8gPSAtMTsKLSAgY3JvcF9ib3R0b21fID0gLTE7Ci0gIGNyb3BfdG9wXyA9IC0xOwotICBjcm9wX2xlZnRfID0gLTE7Ci0gIGNyb3BfcmlnaHRfID0gLTE7Ci0gIGRpc3BsYXlfd2lkdGhfID0gLTE7Ci0gIGRpc3BsYXlfaGVpZ2h0XyA9IC0xOwotICBkaXNwbGF5X3VuaXRfID0gLTE7Ci0gIGFscGhhX21vZGVfID0gLTE7Ci0gIGluc2lkZV9wcm9qZWN0aW9uX2xpc3RfID0gZmFsc2U7Ci0gIGNvbG91cl9wYXJzZWRfID0gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViTVZpZGVvQ2xpZW50OjpJbml0aWFsaXplQ29uZmlnKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb2RlY19pZCwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGNvZGVjX3ByaXZhdGUsCi0gICAgY29uc3QgRW5jcnlwdGlvblNjaGVtZSYgZW5jcnlwdGlvbl9zY2hlbWUsIFZpZGVvRGVjb2RlckNvbmZpZyogY29uZmlnKSB7Ci0gIERDSEVDSyhjb25maWcpOwotCi0gIFZpZGVvQ29kZWMgdmlkZW9fY29kZWMgPSBrVW5rbm93blZpZGVvQ29kZWM7Ci0gIFZpZGVvQ29kZWNQcm9maWxlIHByb2ZpbGUgPSBWSURFT19DT0RFQ19QUk9GSUxFX1VOS05PV047Ci0gIGlmIChjb2RlY19pZCA9PSAiVl9WUDgiKSB7Ci0gICAgdmlkZW9fY29kZWMgPSBrQ29kZWNWUDg7Ci0gICAgcHJvZmlsZSA9IFZQOFBST0ZJTEVfQU5ZOwotICB9IGVsc2UgaWYgKGNvZGVjX2lkID09ICJWX1ZQOSIpIHsKLSAgICB2aWRlb19jb2RlYyA9IGtDb2RlY1ZQOTsKLSAgICBwcm9maWxlID0gR2V0VlA5Q29kZWNQcm9maWxlKGNvZGVjX3ByaXZhdGUpOwotICB9IGVsc2UgewotICAgIE1FRElBX0xPRyhFUlJPUiwgbWVkaWFfbG9nXykgPDwgIlVuc3VwcG9ydGVkIHZpZGVvIGNvZGVjX2lkICIgPDwgY29kZWNfaWQ7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgVmlkZW9QaXhlbEZvcm1hdCBmb3JtYXQgPQotICAgICAgKGFscGhhX21vZGVfID09IDEpID8gUElYRUxfRk9STUFUX1lWMTJBIDogUElYRUxfRk9STUFUX1lWMTI7Ci0KLSAgaWYgKHBpeGVsX3dpZHRoXyA8PSAwIHx8IHBpeGVsX2hlaWdodF8gPD0gMCkgcmV0dXJuIGZhbHNlOwotCi0gIC8vIFNldCBjcm9wIGFuZCBkaXNwbGF5IHVuaXQgZGVmYXVsdHMgaWYgdGhlc2UgZWxlbWVudHMgYXJlIG5vdCBwcmVzZW50LgotICBpZiAoY3JvcF9ib3R0b21fID09IC0xKSBjcm9wX2JvdHRvbV8gPSAwOwotCi0gIGlmIChjcm9wX3RvcF8gPT0gLTEpIGNyb3BfdG9wXyA9IDA7Ci0KLSAgaWYgKGNyb3BfbGVmdF8gPT0gLTEpIGNyb3BfbGVmdF8gPSAwOwotCi0gIGlmIChjcm9wX3JpZ2h0XyA9PSAtMSkgY3JvcF9yaWdodF8gPSAwOwotCi0gIGlmIChkaXNwbGF5X3VuaXRfID09IC0xKSBkaXNwbGF5X3VuaXRfID0gMDsKLQotICBtYXRoOjpTaXplIGNvZGVkX3NpemUocGl4ZWxfd2lkdGhfLCBwaXhlbF9oZWlnaHRfKTsKLSAgbWF0aDo6UmVjdEYgdmlzaWJsZV9yZWN0X2Zsb2F0KGNyb3BfdG9wXywgY3JvcF9sZWZ0XywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dpZHRoXyAtIChjcm9wX2xlZnRfICsgY3JvcF9yaWdodF8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfaGVpZ2h0XyAtIChjcm9wX3RvcF8gKyBjcm9wX2JvdHRvbV8pKTsKLSAgbWF0aDo6UmVjdCB2aXNpYmxlX3JlY3QgPSBtYXRoOjpSZWN0OjpSb3VuZEZyb21SZWN0Rih2aXNpYmxlX3JlY3RfZmxvYXQpOwotICBpZiAoZGlzcGxheV91bml0XyA9PSAwKSB7Ci0gICAgaWYgKGRpc3BsYXlfd2lkdGhfIDw9IDApIGRpc3BsYXlfd2lkdGhfID0gdmlzaWJsZV9yZWN0LndpZHRoKCk7Ci0gICAgaWYgKGRpc3BsYXlfaGVpZ2h0XyA8PSAwKSBkaXNwbGF5X2hlaWdodF8gPSB2aXNpYmxlX3JlY3QuaGVpZ2h0KCk7Ci0gIH0gZWxzZSBpZiAoZGlzcGxheV91bml0XyA9PSAzKSB7Ci0gICAgaWYgKGRpc3BsYXlfd2lkdGhfIDw9IDAgfHwgZGlzcGxheV9oZWlnaHRfIDw9IDApIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJVbnN1cHBvcnRlZCBkaXNwbGF5IHVuaXQgdHlwZSAiIDw8IGRpc3BsYXlfdW5pdF87Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplID0gbWF0aDo6U2l6ZShkaXNwbGF5X3dpZHRoXywgZGlzcGxheV9oZWlnaHRfKTsKLQotICBjb25maWctPkluaXRpYWxpemUodmlkZW9fY29kZWMsIHByb2ZpbGUsIGZvcm1hdCwgQ09MT1JfU1BBQ0VfSERfUkVDNzA5LAotICAgICAgICAgICAgICAgICAgICAgY29kZWRfc2l6ZSwgdmlzaWJsZV9yZWN0LCBuYXR1cmFsX3NpemUsIGNvZGVjX3ByaXZhdGUsCi0gICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uX3NjaGVtZSk7Ci0gIGlmIChjb2xvdXJfcGFyc2VkXykgewotICAgIFdlYk1Db2xvck1ldGFkYXRhIGNvbG9yX21ldGFkYXRhID0gY29sb3VyX3BhcnNlcl8uR2V0V2ViTUNvbG9yTWV0YWRhdGEoKTsKLSAgICBjb25maWctPnNldF93ZWJtX2NvbG9yX21ldGFkYXRhKGNvbG9yX21ldGFkYXRhKTsKLSAgfQotICByZXR1cm4gY29uZmlnLT5Jc1ZhbGlkQ29uZmlnKCk7Ci19Ci0KLVdlYk1QYXJzZXJDbGllbnQqIFdlYk1WaWRlb0NsaWVudDo6T25MaXN0U3RhcnQoaW50IGlkKSB7Ci0gIGlmIChpZCA9PSBrV2ViTUlkQ29sb3VyKSB7Ci0gICAgY29sb3VyX3BhcnNlZF8gPSBmYWxzZTsKLSAgICByZXR1cm4gJmNvbG91cl9wYXJzZXJfOwotICB9Ci0KLSAgaWYgKGlkID09IGtXZWJNSWRQcm9qZWN0aW9uICYmICFpbnNpZGVfcHJvamVjdGlvbl9saXN0XykgewotICAgIGluc2lkZV9wcm9qZWN0aW9uX2xpc3RfID0gdHJ1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIHJldHVybiB0aGlzOwotfQotCi1ib29sIFdlYk1WaWRlb0NsaWVudDo6T25MaXN0RW5kKGludCBpZCkgewotICBpZiAoaWQgPT0ga1dlYk1JZENvbG91cikgY29sb3VyX3BhcnNlZF8gPSB0cnVlOwotCi0gIGlmIChpZCA9PSBrV2ViTUlkUHJvamVjdGlvbiAmJiBpbnNpZGVfcHJvamVjdGlvbl9saXN0XykgewotICAgIGluc2lkZV9wcm9qZWN0aW9uX2xpc3RfID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJNVmlkZW9DbGllbnQ6Ok9uVUludChpbnQgaWQsIGludDY0X3QgdmFsKSB7Ci0gIGlmIChpbnNpZGVfcHJvamVjdGlvbl9saXN0XykgewotICAgIC8vIEFjY2VwdCBhbmQgaWdub3JlIGFsbCBpbnRlZ2VyIGZpZWxkcyB1bmRlciBrV2ViTUlkUHJvamVjdGlvbiBsaXN0LiBUaGlzCi0gICAgLy8gY3VycmVudGx5IGluY2x1ZGVzIHRoZSBrV2ViTUlkUHJvamVjdGlvblR5cGUgZmllbGQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpbnQ2NF90KiBkc3QgPSBOVUxMOwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIGtXZWJNSWRQaXhlbFdpZHRoOgotICAgICAgZHN0ID0gJnBpeGVsX3dpZHRoXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFBpeGVsSGVpZ2h0OgotICAgICAgZHN0ID0gJnBpeGVsX2hlaWdodF87Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWRQaXhlbENyb3BUb3A6Ci0gICAgICBkc3QgPSAmY3JvcF90b3BfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkUGl4ZWxDcm9wQm90dG9tOgotICAgICAgZHN0ID0gJmNyb3BfYm90dG9tXzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFBpeGVsQ3JvcExlZnQ6Ci0gICAgICBkc3QgPSAmY3JvcF9sZWZ0XzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1dlYk1JZFBpeGVsQ3JvcFJpZ2h0OgotICAgICAgZHN0ID0gJmNyb3BfcmlnaHRfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkRGlzcGxheVdpZHRoOgotICAgICAgZHN0ID0gJmRpc3BsYXlfd2lkdGhfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkRGlzcGxheUhlaWdodDoKLSAgICAgIGRzdCA9ICZkaXNwbGF5X2hlaWdodF87Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtXZWJNSWREaXNwbGF5VW5pdDoKLSAgICAgIGRzdCA9ICZkaXNwbGF5X3VuaXRfOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrV2ViTUlkQWxwaGFNb2RlOgotICAgICAgZHN0ID0gJmFscGhhX21vZGVfOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaWYgKCpkc3QgIT0gLTEpIHsKLSAgICBNRURJQV9MT0coRVJST1IsIG1lZGlhX2xvZ18pCi0gICAgICAgIDw8ICJNdWx0aXBsZSB2YWx1ZXMgZm9yIGlkICIgPDwgc3RkOjpoZXggPDwgaWQgPDwgIiBzcGVjaWZpZWQgKCIgPDwgKmRzdAotICAgICAgICA8PCAiIGFuZCAiIDw8IHZhbCA8PCAiKSI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgKmRzdCA9IHZhbDsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViTVZpZGVvQ2xpZW50OjpPbkJpbmFyeShpbnQgaWQsIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIGludCBzaXplKSB7Ci0gIGlmIChpbnNpZGVfcHJvamVjdGlvbl9saXN0XykgewotICAgIC8vIEFjY2VwdCBhbmQgaWdub3JlIGFsbCBiaW5hcnkgZmllbGRzIHVuZGVyIGtXZWJNSWRQcm9qZWN0aW9uIGxpc3QuIFRoaXMKLSAgICAvLyBjdXJyZW50bHkgaW5jbHVkZXMgdGhlIGtXZWJNSWRQcm9qZWN0aW9uUHJpdmF0ZSBmaWVsZC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEFjY2VwdCBiaW5hcnkgZmllbGRzIHdlIGRvbid0IGNhcmUgYWJvdXQgZm9yIG5vdy4KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViTVZpZGVvQ2xpZW50OjpPbkZsb2F0KGludCBpZCwgZG91YmxlIHZhbCkgewotICBpZiAoaW5zaWRlX3Byb2plY3Rpb25fbGlzdF8pIHsKLSAgICAvLyBBY2NlcHQgYW5kIGlnbm9yZSBmbG9hdCBmaWVsZHMgdW5kZXIga1dlYk1JZFByb2plY3Rpb24gbGlzdC4gVGhpcwotICAgIC8vIGN1cnJlbnRseSBpbmNsdWRlcyB0aGUga1dlYk1JZFByb2plY3Rpb25Qb3NlUGl0Y2gsCi0gICAgLy8ga1dlYk1JZFByb2plY3Rpb25Qb3NlWWF3LCBrV2ViTUlkUHJvamVjdGlvblBvc2VSb2xsIGZpZWxkcy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEFjY2VwdCBmbG9hdCBmaWVsZHMgd2UgZG9uJ3QgY2FyZSBhYm91dCBmb3Igbm93LgotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50LmggYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDI2Y2EuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaWZuZGVmIENPQkFMVF9NRURJQV9GT1JNQVRTX1dFQk1fV0VCTV9WSURFT19DTElFTlRfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX0ZPUk1BVFNfV0VCTV9XRUJNX1ZJREVPX0NMSUVOVF9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgImJhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2V4cG9ydC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotCi1uYW1lc3BhY2UgY29iYWx0IHsKLW5hbWVzcGFjZSBtZWRpYSB7Ci1jbGFzcyBFbmNyeXB0aW9uU2NoZW1lOwotY2xhc3MgVmlkZW9EZWNvZGVyQ29uZmlnOwotCi0vLyBIZWxwZXIgY2xhc3MgdXNlZCB0byBwYXJzZSBhIFZpZGVvIGVsZW1lbnQgaW5zaWRlIGEgVHJhY2tFbnRyeSBlbGVtZW50LgotY2xhc3MgTUVESUFfRVhQT1JUIFdlYk1WaWRlb0NsaWVudCA6IHB1YmxpYyBXZWJNUGFyc2VyQ2xpZW50IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFdlYk1WaWRlb0NsaWVudChjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKLSAgfldlYk1WaWRlb0NsaWVudCgpIG92ZXJyaWRlOwotCi0gIC8vIFJlc2V0IHRoaXMgb2JqZWN0J3Mgc3RhdGUgc28gaXQgY2FuIHByb2Nlc3MgYSBuZXcgdmlkZW8gdHJhY2sgZWxlbWVudC4KLSAgdm9pZCBSZXNldCgpOwotCi0gIC8vIEluaXRpYWxpemUgfGNvbmZpZ3wgd2l0aCB0aGUgZGF0YSBpbiB8Y29kZWNfaWR8LCB8Y29kZWNfcHJpdmF0ZXwsCi0gIC8vIHxlbmNyeXB0aW9uX3NjaGVtZXwgYW5kIHRoZSBmaWVsZHMgcGFyc2VkIGZyb20gdGhlIGxhc3QgdmlkZW8gdHJhY2sgZWxlbWVudAotICAvLyB0aGlzIG9iamVjdCB3YXMgdXNlZCB0byBwYXJzZS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHxjb25maWd8IHdhcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuCi0gIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgd2FzIHVuZXhwZWN0ZWQgdmFsdWVzIGluIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzIG9yCi0gIC8vIHZpZGVvIHRyYWNrIGVsZW1lbnQgZmllbGRzLiBUaGUgY29udGVudHMgb2YgfGNvbmZpZ3wgYXJlIHVuZGVmaW5lZCBpbiB0aGlzCi0gIC8vIGNhc2UgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIHVwb24uCi0gIGJvb2wgSW5pdGlhbGl6ZUNvbmZpZyhjb25zdCBzdGQ6OnN0cmluZyYgY29kZWNfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgY29kZWNfcHJpdmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVuY3J5cHRpb25TY2hlbWUmIGVuY3J5cHRpb25fc2NoZW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9EZWNvZGVyQ29uZmlnKiBjb25maWcpOwotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIFdlYk1WaWRlb0NsaWVudFRlc3Q7Ci0KLSAgLy8gV2ViTVBhcnNlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgV2ViTVBhcnNlckNsaWVudCogT25MaXN0U3RhcnQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPbkxpc3RFbmQoaW50IGlkKSBvdmVycmlkZTsKLSAgYm9vbCBPblVJbnQoaW50IGlkLCBpbnQ2NF90IHZhbCkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25CaW5hcnkoaW50IGlkLCBjb25zdCB1aW50OF90KiBkYXRhLCBpbnQgc2l6ZSkgb3ZlcnJpZGU7Ci0gIGJvb2wgT25GbG9hdChpbnQgaWQsIGRvdWJsZSB2YWwpIG92ZXJyaWRlOwotCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187Ci0gIGludDY0X3QgcGl4ZWxfd2lkdGhfOwotICBpbnQ2NF90IHBpeGVsX2hlaWdodF87Ci0gIGludDY0X3QgY3JvcF9ib3R0b21fOwotICBpbnQ2NF90IGNyb3BfdG9wXzsKLSAgaW50NjRfdCBjcm9wX2xlZnRfOwotICBpbnQ2NF90IGNyb3BfcmlnaHRfOwotICBpbnQ2NF90IGRpc3BsYXlfd2lkdGhfOwotICBpbnQ2NF90IGRpc3BsYXlfaGVpZ2h0XzsKLSAgaW50NjRfdCBkaXNwbGF5X3VuaXRfOwotICBpbnQ2NF90IGFscGhhX21vZGVfOwotICBib29sIGluc2lkZV9wcm9qZWN0aW9uX2xpc3RfOwotCi0gIFdlYk1Db2xvdXJQYXJzZXIgY29sb3VyX3BhcnNlcl87Ci0gIGJvb2wgY29sb3VyX3BhcnNlZF87Ci0KLSAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFdlYk1WaWRlb0NsaWVudCk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fVklERU9fQ0xJRU5UX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50X3VuaXR0ZXN0LmNjIGIvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudF91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjY2Y4MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50X3VuaXR0ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTggVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5oIgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21vY2tfbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgiCi0KLXVzaW5nIHRlc3Rpbmc6OlN0cmljdE1vY2s7Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotbmFtZXNwYWNlIHsKLWNvbnN0IG1hdGg6OlNpemUga0NvZGVkU2l6ZSgzMjEsIDI0Myk7Ci0KLXN0cnVjdCBDb2RlY1Rlc3RQYXJhbXMgewotICBWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlOwotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb2RlY19wcml2YXRlOwotfTsKLX0gIC8vIG5hbWVzcGFjZQotCi1Db2RlY1Rlc3RQYXJhbXMga0NvZGVjVGVzdFBhcmFtc1tdID0gewotICAgIHtWUDlQUk9GSUxFX1BST0ZJTEUwLCB7fX0sCi0gICAge1ZQOVBST0ZJTEVfUFJPRklMRTIsCi0gICAgIC8vIFZhbGlkIFZQOSBQcm9maWxlIDIgZXhhbXBsZSwgZXh0cmFjdGVkIG91dCBvZiBhIHNhbXBsZSBmaWxlIGF0Ci0gICAgIC8vIGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbGV2ZWxzLyN0ZXN0LWJpdHN0cmVhbXMKLSAgICAgezB4MDEsIDB4MDEsIDB4MDIsIDB4MDIsIDB4MDEsIDB4MGEsIDB4MywgMHgxLCAweGEsIDB4NCwgMHgxLCAweDF9fSwKLSAgICAvLyBJbnZhbGlkIFZQOSBDb2RlY1ByaXZhdGU6IHRvbyBzaG9ydC4KLSAgICB7VlA5UFJPRklMRV9QUk9GSUxFMCwgezB4MDEsIDB4MDF9fSwKLSAgICAvLyBJbnZhbGlkIFZQOSBDb2RlY1ByaXZhdGU6IHdyb25nIGZpZWxkIGlkLgotICAgIHtWUDlQUk9GSUxFX1BST0ZJTEUwLCB7MHg3NywgMHgwMSwgMHgwMn19LAotICAgIC8vIEludmFsaWQgVlA5IENvZGVjUHJpdmF0ZTogd3JvbmcgZmllbGQgbGVuZ3RoLgotICAgIHtWUDlQUk9GSUxFX1BST0ZJTEUwLCB7MHgwMSwgMHg3NSwgMHgwMn19LAotICAgIC8vIEludmFsaWQgVlA5IENvZGVjUHJpdmF0ZTogd3JvbmcgUHJvZmlsZSAoY2FuJ3QgYmUgPiAzKS4KLSAgICB7VlA5UFJPRklMRV9QUk9GSUxFMCwgezB4MDEsIDB4MDEsIDB4MzR9fX07Ci0KLWNsYXNzIFdlYk1WaWRlb0NsaWVudFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdFdpdGhQYXJhbTxDb2RlY1Rlc3RQYXJhbXM+IHsKLSBwdWJsaWM6Ci0gIFdlYk1WaWRlb0NsaWVudFRlc3QoKQotICAgICAgOiBtZWRpYV9sb2dfKG5ldyBTdHJpY3RNb2NrPE1vY2tNZWRpYUxvZz4oKSksCi0gICAgICAgIHdlYm1fdmlkZW9fY2xpZW50XyhtZWRpYV9sb2dfKSB7Ci0gICAgLy8gU2ltdWxhdGUgY29uZmlndXJpbmcgd2lkdGggYW5kIGhlaWdodCBpbiB0aGUgfHdlYm1fdmlkZW9fY2xpZW50X3wuCi0gICAgd2VibV92aWRlb19jbGllbnRfLk9uVUludChrV2ViTUlkUGl4ZWxXaWR0aCwga0NvZGVkU2l6ZS53aWR0aCgpKTsKLSAgICB3ZWJtX3ZpZGVvX2NsaWVudF8uT25VSW50KGtXZWJNSWRQaXhlbEhlaWdodCwga0NvZGVkU2l6ZS5oZWlnaHQoKSk7Ci0gIH0KLQotICBzY29wZWRfcmVmcHRyPFN0cmljdE1vY2s8TW9ja01lZGlhTG9nPj4gbWVkaWFfbG9nXzsKLSAgV2ViTVZpZGVvQ2xpZW50IHdlYm1fdmlkZW9fY2xpZW50XzsKLQotIHByaXZhdGU6Ci0gIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXZWJNVmlkZW9DbGllbnRUZXN0KTsKLX07Ci0KLVRFU1RfUChXZWJNVmlkZW9DbGllbnRUZXN0LCBJbml0aWFsaXplQ29uZmlnVlA5UHJvZmlsZXMpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcga0NvZGVjSWQgPSAiVl9WUDkiOwotICBjb25zdCBWaWRlb0NvZGVjUHJvZmlsZSBwcm9maWxlID0gR2V0UGFyYW0oKS5wcm9maWxlOwotICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiBjb2RlY19wcml2YXRlID0gR2V0UGFyYW0oKS5jb2RlY19wcml2YXRlOwotCi0gIFZpZGVvRGVjb2RlckNvbmZpZyBjb25maWc7Ci0KLSAgRVhQRUNUX1RSVUUod2VibV92aWRlb19jbGllbnRfLkluaXRpYWxpemVDb25maWcoa0NvZGVjSWQsIGNvZGVjX3ByaXZhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuY3J5cHRpb25TY2hlbWUoKSwgJmNvbmZpZykpOwotCi0gIFZpZGVvRGVjb2RlckNvbmZpZyBleHBlY3RlZF9jb25maWcoCi0gICAgICBrQ29kZWNWUDksIHByb2ZpbGUsIFBJWEVMX0ZPUk1BVF9ZVjEyLCBDT0xPUl9TUEFDRV9IRF9SRUM3MDksIGtDb2RlZFNpemUsCi0gICAgICBtYXRoOjpSZWN0KGtDb2RlZFNpemUpLCBrQ29kZWRTaXplLCBjb2RlY19wcml2YXRlLCBVbmVuY3J5cHRlZCgpKTsKLQotICBFWFBFQ1RfVFJVRShjb25maWcuTWF0Y2hlcyhleHBlY3RlZF9jb25maWcpKQotICAgICAgPDwgIkNvbmZpZyAoIiA8PCBjb25maWcuQXNIdW1hblJlYWRhYmxlU3RyaW5nKCkKLSAgICAgIDw8ICIpIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkICgiCi0gICAgICA8PCBleHBlY3RlZF9jb25maWcuQXNIdW1hblJlYWRhYmxlU3RyaW5nKCkgPDwgIikiOwotfQotCi1JTlNUQU5USUFURV9URVNUX0NBU0VfUCgvKiBObyBwcmVmaXguICovLCBXZWJNVmlkZW9DbGllbnRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgOjp0ZXN0aW5nOjpWYWx1ZXNJbihrQ29kZWNUZXN0UGFyYW1zKSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2YTM2NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV93ZWJ2dHRfcGFyc2VyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdm9pZCBXZWJNV2ViVlRUUGFyc2VyOjpQYXJzZShjb25zdCB1aW50OF90KiBwYXlsb2FkLCBpbnQgcGF5bG9hZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogaWQsIHN0ZDo6c3RyaW5nKiBzZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGNvbnRlbnQpIHsKLSAgV2ViTVdlYlZUVFBhcnNlciBwYXJzZXIocGF5bG9hZCwgcGF5bG9hZF9zaXplKTsKLSAgcGFyc2VyLlBhcnNlKGlkLCBzZXR0aW5ncywgY29udGVudCk7Ci19Ci0KLVdlYk1XZWJWVFRQYXJzZXI6OldlYk1XZWJWVFRQYXJzZXIoY29uc3QgdWludDhfdCogcGF5bG9hZCwgaW50IHBheWxvYWRfc2l6ZSkKLSAgICA6IHB0cl8ocGF5bG9hZCksIHB0cl9lbmRfKHBheWxvYWQgKyBwYXlsb2FkX3NpemUpIHt9Ci0KLXZvaWQgV2ViTVdlYlZUVFBhcnNlcjo6UGFyc2Uoc3RkOjpzdHJpbmcqIGlkLCBzdGQ6OnN0cmluZyogc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBjb250ZW50KSB7Ci0gIFBhcnNlTGluZShpZCk7Ci0gIFBhcnNlTGluZShzZXR0aW5ncyk7Ci0gIGNvbnRlbnQtPmFzc2lnbihwdHJfLCBwdHJfZW5kXyk7Ci19Ci0KLWJvb2wgV2ViTVdlYlZUVFBhcnNlcjo6R2V0Qnl0ZSh1aW50OF90KiBieXRlKSB7Ci0gIGlmIChwdHJfID49IHB0cl9lbmRfKSByZXR1cm4gZmFsc2U7ICAvLyBpbmRpY2F0ZXMgZW5kLW9mLXN0cmVhbQotCi0gICpieXRlID0gKnB0cl8rKzsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViTVdlYlZUVFBhcnNlcjo6VW5nZXRCeXRlKCkgeyAtLXB0cl87IH0KLQotdm9pZCBXZWJNV2ViVlRUUGFyc2VyOjpQYXJzZUxpbmUoc3RkOjpzdHJpbmcqIGxpbmUpIHsKLSAgbGluZS0+Y2xlYXIoKTsKLQotICAvLyBDb25zdW1lIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RyZWFtLCB1bnRpbCB3ZSByZWFjaCBlbmQtb2YtbGluZS4KLQotICAvLyBUaGUgV2ViVlRUIHNwZWMgc3RhdGVzIHRoYXQgbGluZXMgbWF5IGJlIHRlcm1pbmF0ZWQgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcKLSAgLy8gdGhyZWUgd2F5czoKLSAgLy8gIExGCi0gIC8vICBDUgotICAvLyAgQ1IgTEYKLQotICAvLyBUaGUgc3BlYyBpcyBoZXJlOgotICAvLyAgaHR0cDovL3dpa2kud2VibXByb2plY3Qub3JnL3dlYm0tbWV0YWRhdGEvdGVtcG9yYWwtbWV0YWRhdGEvd2VidnR0LWluLXdlYm0KLQotICBlbnVtIHsga0xGID0gJ1x4MEEnLCBrQ1IgPSAnXHgwRCcgfTsKLQotICBmb3IgKDs7KSB7Ci0gICAgdWludDhfdCBieXRlOwotCi0gICAgaWYgKCFHZXRCeXRlKCZieXRlKSB8fCBieXRlID09IGtMRikgcmV0dXJuOwotCi0gICAgaWYgKGJ5dGUgPT0ga0NSKSB7Ci0gICAgICBpZiAoR2V0Qnl0ZSgmYnl0ZSkgJiYgYnl0ZSAhPSBrTEYpIFVuZ2V0Qnl0ZSgpOwotCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGluZS0+cHVzaF9iYWNrKGJ5dGUpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXIuaCBiL2NvYmFsdC9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV93ZWJ2dHRfcGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZDBhMjIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fV0VCVlRUX1BBUlNFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fV0VCVlRUX1BBUlNFUl9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotY2xhc3MgTUVESUFfRVhQT1JUIFdlYk1XZWJWVFRQYXJzZXIgewotIHB1YmxpYzoKLSAgLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBwYXJzZSB0aGUgV2ViVlRUIGN1ZSBmcm9tIGEgYnl0ZSBzdHJlYW0uCi0gIHN0YXRpYyB2b2lkIFBhcnNlKGNvbnN0IHVpbnQ4X3QqIHBheWxvYWQsIGludCBwYXlsb2FkX3NpemUsIHN0ZDo6c3RyaW5nKiBpZCwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIHNldHRpbmdzLCBzdGQ6OnN0cmluZyogY29udGVudCk7Ci0KLSBwcml2YXRlOgotICAvLyBUaGUgcGF5bG9hZCBpcyB0aGUgZW1iZWRkZWQgV2ViVlRUIGN1ZSwgc3RvcmVkIGluIGEgV2ViTSBibG9jay4KLSAgLy8gVGhlIHBhcnNlciB0cmVhdHMgdGhpcyBhcyBhIFVURi04IGJ5dGUgc3RyZWFtLgotICBXZWJNV2ViVlRUUGFyc2VyKGNvbnN0IHVpbnQ4X3QqIHBheWxvYWQsIGludCBwYXlsb2FkX3NpemUpOwotCi0gIC8vIFBhcnNlIHRoZSBjdWUgaWRlbnRpZmllciwgc2V0dGluZ3MsIGFuZCBjb250ZW50IGZyb20gdGhlIHN0cmVhbS4KLSAgdm9pZCBQYXJzZShzdGQ6OnN0cmluZyogaWQsIHN0ZDo6c3RyaW5nKiBzZXR0aW5ncywgc3RkOjpzdHJpbmcqIGNvbnRlbnQpOwotICAvLyBSZW1vdmUgYSBieXRlIGZyb20gdGhlIHN0cmVhbSwgYWR2YW5jaW5nIHRoZSBzdHJlYW0gcG9pbnRlci4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGEgY2hhcmFjdGVyIHdhcyByZXR1cm5lZDsgZmFsc2UgbWVhbnMgImVuZCBvZiBzdHJlYW0iLgotICBib29sIEdldEJ5dGUodWludDhfdCogYnl0ZSk7Ci0KLSAgLy8gQmFja3VwIHRoZSBzdHJlYW0gcG9pbnRlci4KLSAgdm9pZCBVbmdldEJ5dGUoKTsKLQotICAvLyBQYXJzZSBhIGxpbmUgb2YgdGV4dCBmcm9tIHRoZSBzdHJlYW0uCi0gIHZvaWQgUGFyc2VMaW5lKHN0ZDo6c3RyaW5nKiBsaW5lKTsKLQotICAvLyBSZXByZXNlbnRzIHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJlYW0gdGhhdCBoYXMgbm90IGJlZW4gY29uc3VtZWQgeWV0LgotICBjb25zdCB1aW50OF90KiBwdHJfOwotICBjb25zdCB1aW50OF90KiBjb25zdCBwdHJfZW5kXzsKLQotICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oV2ViTVdlYlZUVFBhcnNlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbWVkaWEKLX0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfRk9STUFUU19XRUJNX1dFQk1fV0VCVlRUX1BBUlNFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXJfdW5pdHRlc3QuY2MgYi9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlcl91bml0dGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxYWEwNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlcl91bml0dGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi11c2luZyA6OnRlc3Rpbmc6OkluU2VxdWVuY2U7Ci0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLQotdHlwZWRlZiBzdGQ6OnZlY3Rvcjx1aW50OF90PiBDdWU7Ci0KLXN0YXRpYyBDdWUgRW5jb2RlQ3VlKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnQpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgcmVzdWx0ID0gaWQgKyAnXG4nICsgc2V0dGluZ3MgKyAnXG4nICsgY29udGVudDsKLSAgY29uc3QgdWludDhfdCogY29uc3QgYnVmID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocmVzdWx0LmRhdGEoKSk7Ci0gIHJldHVybiBDdWUoYnVmLCBidWYgKyByZXN1bHQubGVuZ3RoKCkpOwotfQotCi1zdGF0aWMgdm9pZCBEZWNvZGVDdWUoY29uc3QgQ3VlJiBjdWUsIHN0ZDo6c3RyaW5nKiBpZCwgc3RkOjpzdHJpbmcqIHNldHRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBjb250ZW50KSB7Ci0gIFdlYk1XZWJWVFRQYXJzZXI6OlBhcnNlKCZjdWVbMF0sIHN0YXRpY19jYXN0PGludD4oY3VlLnNpemUoKSksIGlkLCBzZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCk7Ci19Ci0KLWNsYXNzIFdlYk1XZWJWVFRQYXJzZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotIHB1YmxpYzoKLSAgV2ViTVdlYlZUVFBhcnNlclRlc3QoKSB7fQotfTsKLQotVEVTVF9GKFdlYk1XZWJWVFRQYXJzZXJUZXN0LCBCbGFuaykgewotICBJblNlcXVlbmNlIHM7Ci0KLSAgY29uc3QgQ3VlIGN1ZSA9IEVuY29kZUN1ZSgiIiwgIiIsICJTdWJ0aXRsZSIpOwotICBzdGQ6OnN0cmluZyBpZCwgc2V0dGluZ3MsIGNvbnRlbnQ7Ci0KLSAgRGVjb2RlQ3VlKGN1ZSwgJmlkLCAmc2V0dGluZ3MsICZjb250ZW50KTsKLSAgRVhQRUNUX0VRKGlkLCAiIik7Ci0gIEVYUEVDVF9FUShzZXR0aW5ncywgIiIpOwotICBFWFBFQ1RfRVEoY29udGVudCwgIlN1YnRpdGxlIik7Ci19Ci0KLVRFU1RfRihXZWJNV2ViVlRUUGFyc2VyVGVzdCwgSWQpIHsKLSAgSW5TZXF1ZW5jZSBzOwotCi0gIGZvciAoaW50IGkgPSAxOyBpIDw9IDk7ICsraSkgewotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGlkc3JjKDEsICcwJyArIGkpOwotICAgIGNvbnN0IEN1ZSBjdWUgPSBFbmNvZGVDdWUoaWRzcmMsICIiLCAiU3VidGl0bGUiKTsKLSAgICBzdGQ6OnN0cmluZyBpZCwgc2V0dGluZ3MsIGNvbnRlbnQ7Ci0KLSAgICBEZWNvZGVDdWUoY3VlLCAmaWQsICZzZXR0aW5ncywgJmNvbnRlbnQpOwotICAgIEVYUEVDVF9FUShpZCwgaWRzcmMpOwotICAgIEVYUEVDVF9FUShzZXR0aW5ncywgIiIpOwotICAgIEVYUEVDVF9FUShjb250ZW50LCAiU3VidGl0bGUiKTsKLSAgfQotfQotCi1URVNUX0YoV2ViTVdlYlZUVFBhcnNlclRlc3QsIFNldHRpbmdzKSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBlbnVtIHsga1NldHRpbmdzQ291bnQgPSA0IH07Ci0gIGNvbnN0IGNoYXIqIGNvbnN0IHNldHRpbmdzX3N0cltrU2V0dGluZ3NDb3VudF0gPSB7Ci0gICAgICAidmVydGljYWw6bHIiLCAibGluZTo1MCUiLCAicG9zaXRpb246NDIlIiwKLSAgICAgICJ2ZXJ0aWNhbDpybCBsaW5lOjQyJSBwb3NpdGlvbjoxMDAlIn07Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrU2V0dGluZ3NDb3VudDsgKytpKSB7Ci0gICAgY29uc3QgQ3VlIGN1ZSA9IEVuY29kZUN1ZSgiIiwgc2V0dGluZ3Nfc3RyW2ldLCAiU3VidGl0bGUiKTsKLSAgICBzdGQ6OnN0cmluZyBpZCwgc2V0dGluZ3MsIGNvbnRlbnQ7Ci0KLSAgICBEZWNvZGVDdWUoY3VlLCAmaWQsICZzZXR0aW5ncywgJmNvbnRlbnQpOwotICAgIEVYUEVDVF9FUShpZCwgIiIpOwotICAgIEVYUEVDVF9FUShzZXR0aW5ncywgc2V0dGluZ3Nfc3RyW2ldKTsKLSAgICBFWFBFQ1RfRVEoY29udGVudCwgIlN1YnRpdGxlIik7Ci0gIH0KLX0KLQotVEVTVF9GKFdlYk1XZWJWVFRQYXJzZXJUZXN0LCBDb250ZW50KSB7Ci0gIEluU2VxdWVuY2UgczsKLQotICBlbnVtIHsga0NvbnRlbnRDb3VudCA9IDQgfTsKLSAgY29uc3QgY2hhciogY29uc3QgY29udGVudF9zdHJba0NvbnRlbnRDb3VudF0gPSB7Ci0gICAgICAiU3VidGl0bGUiLCAiQW5vdGhlciBTdWJ0aXRsZSIsICJZZXQgQW5vdGhlciBTdWJ0aXRsZSIsCi0gICAgICAiQW5vdGhlciBTdWJ0aXRsZVxuU3BsaXQgQWNyb3NzIFR3byBMaW5lcyJ9OwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwga0NvbnRlbnRDb3VudDsgKytpKSB7Ci0gICAgY29uc3QgQ3VlIGN1ZSA9IEVuY29kZUN1ZSgiIiwgIiIsIGNvbnRlbnRfc3RyW2ldKTsKLSAgICBzdGQ6OnN0cmluZyBpZCwgc2V0dGluZ3MsIGNvbnRlbnQ7Ci0KLSAgICBEZWNvZGVDdWUoY3VlLCAmaWQsICZzZXR0aW5ncywgJmNvbnRlbnQpOwotICAgIEVYUEVDVF9FUShpZCwgIiIpOwotICAgIEVYUEVDVF9FUShzZXR0aW5ncywgIiIpOwotICAgIEVYUEVDVF9FUShjb250ZW50LCBjb250ZW50X3N0cltpXSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwIGIvY29iYWx0L21lZGlhL21lZGlhLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1NjdmYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYScsCi0gICAgICAndHlwZSc6ICc8KGNvbXBvbmVudCknLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1Xbm8tY29udmVyc2lvbicsCi0gICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAnLVduby11bnVzZWQtdmFyaWFibGUnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnTUVESUFfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdkZWNvZGVyX2J1ZmZlcl9hbGxvY2F0b3IuY2MnLAotICAgICAgICAnZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yLmgnLAotICAgICAgICAnZGVjb2Rlcl9idWZmZXJfbWVtb3J5X2luZm8uaCcsCi0gICAgICAgICdmZXRjaGVyX2J1ZmZlcmVkX2RhdGFfc291cmNlLmNjJywKLSAgICAgICAgJ2ZldGNoZXJfYnVmZmVyZWRfZGF0YV9zb3VyY2UuaCcsCi0gICAgICAgICdtZWRpYV9tb2R1bGUuY2MnLAotICAgICAgICAnbWVkaWFfbW9kdWxlLmgnLAotCi0gICAgICAgICdiYXNlL2F1ZGlvX2J1cy5jYycsCi0gICAgICAgICdiYXNlL2F1ZGlvX2J1cy5oJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fY29kZWNzLmNjJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fY29kZWNzLmgnLAotICAgICAgICAnYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5jYycsCi0gICAgICAgICdiYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgnLAotICAgICAgICAnYmFzZS9hdWRpb190aW1lc3RhbXBfaGVscGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fdGltZXN0YW1wX2hlbHBlci5oJywKLSAgICAgICAgJ2Jhc2UvYml0X3JlYWRlci5jYycsCi0gICAgICAgICdiYXNlL2JpdF9yZWFkZXIuaCcsCi0gICAgICAgICdiYXNlL2JpdF9yZWFkZXJfY29yZS5jYycsCi0gICAgICAgICdiYXNlL2JpdF9yZWFkZXJfY29yZS5oJywKLSAgICAgICAgJ2Jhc2UvYnl0ZV9xdWV1ZS5jYycsCi0gICAgICAgICdiYXNlL2J5dGVfcXVldWUuaCcsCi0gICAgICAgICdiYXNlL2NoYW5uZWxfbGF5b3V0LmNjJywKLSAgICAgICAgJ2Jhc2UvY2hhbm5lbF9sYXlvdXQuaCcsCi0gICAgICAgICdiYXNlL2NvbG9yX3NwYWNlLmNjJywKLSAgICAgICAgJ2Jhc2UvY29sb3Jfc3BhY2UuaCcsCi0gICAgICAgICdiYXNlL2RhdGFfc291cmNlLmNjJywKLSAgICAgICAgJ2Jhc2UvZGF0YV9zb3VyY2UuaCcsCi0gICAgICAgICdiYXNlL2RlY29kZXJfYnVmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL2RlY29kZXJfYnVmZmVyX2NhY2hlLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXJfY2FjaGUuaCcsCi0gICAgICAgICdiYXNlL2RlY3J5cHRfY29uZmlnLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjcnlwdF9jb25maWcuaCcsCi0gICAgICAgICdiYXNlL2RlbXV4ZXIuY2MnLAotICAgICAgICAnYmFzZS9kZW11eGVyLmgnLAotICAgICAgICAnYmFzZS9kZW11eGVyX3N0cmVhbS5jYycsCi0gICAgICAgICdiYXNlL2RlbXV4ZXJfc3RyZWFtLmgnLAotICAgICAgICAnYmFzZS9kZW11eGVyX3N0cmVhbV9wcm92aWRlci5jYycsCi0gICAgICAgICdiYXNlL2RlbXV4ZXJfc3RyZWFtX3Byb3ZpZGVyLmgnLAotICAgICAgICAnYmFzZS9kcm1fc3lzdGVtLmNjJywKLSAgICAgICAgJ2Jhc2UvZHJtX3N5c3RlbS5oJywKLSAgICAgICAgImJhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmNjIiwKLSAgICAgICAgImJhc2UvZW5jcnlwdGlvbl9wYXR0ZXJuLmgiLAotICAgICAgICAnYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5jYycsCi0gICAgICAgICdiYXNlL2VuY3J5cHRpb25fc2NoZW1lLmgnLAotICAgICAgICAnYmFzZS9oZHJfbWV0YWRhdGEuY2MnLAotICAgICAgICAnYmFzZS9oZHJfbWV0YWRhdGEuaCcsCi0gICAgICAgICdiYXNlL2ludGVybGVhdmVkX3NpbmNfcmVzYW1wbGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvaW50ZXJsZWF2ZWRfc2luY19yZXNhbXBsZXIuaCcsCi0gICAgICAgICdiYXNlL21lZGlhX2xvZy5jYycsCi0gICAgICAgICdiYXNlL21lZGlhX2xvZy5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfdHJhY2suY2MnLAotICAgICAgICAnYmFzZS9tZWRpYV90cmFjay5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfdHJhY2tzLmNjJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfdHJhY2tzLmgnLAotICAgICAgICAnYmFzZS9tZWRpYV91dGlsLmNjJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvbWltZV91dGlsLmNjJywKLSAgICAgICAgJ2Jhc2UvbWltZV91dGlsLmgnLAotICAgICAgICAnYmFzZS9taW1lX3V0aWxfaW50ZXJuYWwuY2MnLAotICAgICAgICAnYmFzZS9taW1lX3V0aWxfaW50ZXJuYWwuaCcsCi0gICAgICAgICdiYXNlL3BsYXliYWNrX3N0YXRpc3RpY3MuY2MnLAotICAgICAgICAnYmFzZS9wbGF5YmFja19zdGF0aXN0aWNzLmgnLAotICAgICAgICAnYmFzZS9yYW5nZXMuY2MnLAotICAgICAgICAnYmFzZS9yYW5nZXMuaCcsCi0gICAgICAgICdiYXNlL3NhbXBsZV9mb3JtYXQuY2MnLAotICAgICAgICAnYmFzZS9zYW1wbGVfZm9ybWF0LmgnLAotICAgICAgICAnYmFzZS9zYnBsYXllcl9waXBlbGluZS5jYycsCi0gICAgICAgICdiYXNlL3NicGxheWVyX3NldF9ib3VuZHNfaGVscGVyLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2JwbGF5ZXJfc2V0X2JvdW5kc19oZWxwZXIuaCcsCi0gICAgICAgICdiYXNlL3N0YXJib2FyZF9wbGF5ZXIuY2MnLAotICAgICAgICAnYmFzZS9zdGFyYm9hcmRfcGxheWVyLmgnLAotICAgICAgICAnYmFzZS9zdGFyYm9hcmRfdXRpbHMuY2MnLAotICAgICAgICAnYmFzZS9zdGFyYm9hcmRfdXRpbHMuaCcsCi0gICAgICAgICdiYXNlL3N0cmVhbV9wYXJzZXIuY2MnLAotICAgICAgICAnYmFzZS9zdHJlYW1fcGFyc2VyLmgnLAotICAgICAgICAnYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5jYycsCi0gICAgICAgICdiYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgnLAotICAgICAgICAnYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5jYycsCi0gICAgICAgICdiYXNlL3RleHRfdHJhY2tfY29uZmlnLmgnLAotICAgICAgICAnYmFzZS92aWRlb19jb2RlY3MuY2MnLAotICAgICAgICAnYmFzZS92aWRlb19jb2RlY3MuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmNjJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX2ZyYW1lX3Byb3ZpZGVyLmgnLAotICAgICAgICAnYmFzZS92aWRlb191dGlsLmNjJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fdXRpbC5oJywKLSAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvaDI2NF9iaXRfcmVhZGVyLmgnLAotICAgICAgICAnZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2gyNjRfcGFyc2VyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvaDI2NF9wYXJzZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvaDI2NF90b19hbm5leF9iX2JpdHN0cmVhbV9jb252ZXJ0ZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2gyNjVfcGFyc2VyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvaDI2NV9wYXJzZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL3NvdXJjZV9idWZmZXJfcmFuZ2UuY2MnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmgnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZS5oJywKLSAgICAgICAgJ2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uY2MnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oJywKLSAgICAgICAgJ2ZpbHRlcnMvc3RyZWFtX3BhcnNlcl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvc3RyZWFtX3BhcnNlcl9mYWN0b3J5LmgnLAotICAgICAgICAnZm9ybWF0cy9jb21tb24vb2Zmc2V0X2J5dGVfcXVldWUuY2MnLAotICAgICAgICAnZm9ybWF0cy9jb21tb24vb2Zmc2V0X2J5dGVfcXVldWUuaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9hYWMuY2MnLAotICAgICAgICAnZm9ybWF0cy9tcDQvYWFjLmgnLAotICAgICAgICAnZm9ybWF0cy9tcDQvYXZjLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L2F2Yy5oJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MnLAotICAgICAgICAnZm9ybWF0cy9tcDQvYml0c3RyZWFtX2NvbnZlcnRlci5oJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5jYycsCi0gICAgICAgICdmb3JtYXRzL21wNC9ib3hfZGVmaW5pdGlvbnMuaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9ib3hfcmVhZGVyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L2VzX2Rlc2NyaXB0b3IuaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9mb3VyY2NzLmgnLAotICAgICAgICAnZm9ybWF0cy9tcDQvaGV2Yy5jYycsCi0gICAgICAgICdmb3JtYXRzL21wNC9oZXZjLmgnLAotICAgICAgICAnZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuY2MnLAotICAgICAgICAnZm9ybWF0cy9tcDQvbXA0X3N0cmVhbV9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9yY2hlY2suaCcsCi0gICAgICAgICdmb3JtYXRzL21wNC9zYW1wbGVfdG9fZ3JvdXBfaXRlcmF0b3IuY2MnLAotICAgICAgICAnZm9ybWF0cy9tcDQvc2FtcGxlX3RvX2dyb3VwX2l0ZXJhdG9yLmgnLAotICAgICAgICAnZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvbXA0L3RyYWNrX3J1bl9pdGVyYXRvci5oJywKLSAgICAgICAgJ2Zvcm1hdHMvbXBlZy9hZHRzX2NvbnN0YW50cy5jYycsCi0gICAgICAgICdmb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuaCcsCi0gICAgICAgICdmb3JtYXRzL21wZWcvYWR0c19zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5jYycsCi0gICAgICAgICdmb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgJ2Zvcm1hdHMvbXBlZy9tcGVnX2F1ZGlvX3N0cmVhbV9wYXJzZXJfYmFzZS5jYycsCi0gICAgICAgICdmb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vY2x1c3Rlcl9idWlsZGVyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS9jbHVzdGVyX2J1aWxkZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vb3B1c19wYWNrZXRfYnVpbGRlci5jYycsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vb3B1c19wYWNrZXRfYnVpbGRlci5oJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS90cmFja3NfYnVpbGRlci5jYycsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vdHJhY2tzX2J1aWxkZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fYXVkaW9fY2xpZW50LmgnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS93ZWJtX2NvbG91cl9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY29uc3RhbnRzLmgnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3MuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3MuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50LmgnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnMuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnMuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9pbmZvX3BhcnNlci5jYycsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9pbmZvX3BhcnNlci5oJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS93ZWJtX3BhcnNlci5jYycsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV9zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmNjJywKLSAgICAgICAgJ2Zvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuaCcsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV92aWRlb19jbGllbnQuY2MnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fdmlkZW9fY2xpZW50LmgnLAotICAgICAgICAnZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlci5jYycsCi0gICAgICAgICdmb3JtYXRzL3dlYm0vd2VibV93ZWJ2dHRfcGFyc2VyLmgnLAotICAgICAgICAncGxheWVyL2J1ZmZlcmVkX2RhdGFfc291cmNlLmgnLAotICAgICAgICAncGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfaW1wbC5jYycsCi0gICAgICAgICdwbGF5ZXIvd2ViX21lZGlhX3BsYXllcl9pbXBsLmgnLAotICAgICAgICAncGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfcHJveHkuY2MnLAotICAgICAgICAncGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfcHJveHkuaCcsCi0gICAgICAgICdwcm9ncmVzc2l2ZS9hdmNfYWNjZXNzX3VuaXQuY2MnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvYXZjX2FjY2Vzc191bml0LmgnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvYXZjX3BhcnNlci5jYycsCi0gICAgICAgICdwcm9ncmVzc2l2ZS9hdmNfcGFyc2VyLmgnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvZGF0YV9zb3VyY2VfcmVhZGVyLmNjJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL2RhdGFfc291cmNlX3JlYWRlci5oJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL21wNF9tYXAuY2MnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvbXA0X21hcC5oJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL21wNF9wYXJzZXIuY2MnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvbXA0X3BhcnNlci5oJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX2RlbXV4ZXIuY2MnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5oJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX3BhcnNlci5jYycsCi0gICAgICAgICdwcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuaCcsCi0gICAgICAgICdwcm9ncmVzc2l2ZS9yYnNwX3N0cmVhbS5jYycsCi0gICAgICAgICdwcm9ncmVzc2l2ZS9yYnNwX3N0cmVhbS5oJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnLi4nLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICAgICc8KERFUFRIKS9uYi9uYi5neXA6bmInLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbWVkaWEnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdwcm9ncmVzc2l2ZS9tb2NrX2RhdGFfc291cmNlX3JlYWRlci5oJywKLSAgICAgICAgJ3Byb2dyZXNzaXZlL21wNF9tYXBfdW5pdHRlc3QuY2MnLAotICAgICAgICAncHJvZ3Jlc3NpdmUvcmJzcF9zdHJlYW1fdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtZWRpYV90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ21lZGlhX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5jYyBiL2NvYmFsdC9tZWRpYS9tZWRpYV9tb2R1bGUuY2MKaW5kZXggOGQ0ZTE5NS4uODllMjUxYiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5jYworKysgYi9jb2JhbHQvbWVkaWEvbWVkaWFfbW9kdWxlLmNjCkBAIC0yNCw4ICsyNCw3IEBACiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19zcGxpdC5oIgogI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL3dhaXRhYmxlX2V2ZW50LmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWltZV91dGlsLmgiCisjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZm9ybWF0X3N1cHBvcnRfcXVlcnlfbWV0cmljcy5oIgogI2luY2x1ZGUgIm5iL21lbW9yeV9zY29wZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCkBAIC02MCw3ICs1OSw5IEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgaWYgKG5hbWVfYW5kX3ZhbHVlWzBdID09ICJjb2RlY3MiKSB7Ci0gICAgICBQYXJzZUNvZGVjU3RyaW5nKG5hbWVfYW5kX3ZhbHVlWzFdLCAmY29kZWNzLCAvKiBzdHJpcD0gKi8gZmFsc2UpOworICAgICAgLy8gVE9ETyhiLzIzMDg4ODU4MCk6IFJldml2ZSBQYXJzZUNvZGVjU3RyaW5nKCkgdG8gZW5hYmxlIHJldHVybmluZyBvZgorICAgICAgLy8gYGNvZGVjc2AuCisgICAgICAvLyAgIFBhcnNlQ29kZWNTdHJpbmcobmFtZV9hbmRfdmFsdWVbMV0sICZjb2RlY3MsIC8qIHN0cmlwPSAqLyBmYWxzZSk7CiAgICAgICByZXR1cm4gY29kZWNzOwogICAgIH0KICAgfQpAQCAtMTIwLDE4ICsxMjEsMjcgQEAKICAgICAvLyAgIHZpZGVvL3dlYm07IGNvZGVjcz0idnA5IgogICAgIC8vIFdlIGRvIGEgcm91Z2ggcHJlLWZpbHRlciB0byBlbnN1cmUgdGhhdCBvbmx5IHZpZGVvL21wNCBpcyBzdXBwb3J0ZWQgYXMKICAgICAvLyBwcm9ncmVzc2l2ZS4KKyAgICBTYk1lZGlhU3VwcG9ydFR5cGUgc3VwcG9ydF90eXBlOworICAgIG1lZGlhOjpGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzIG1ldHJpY3M7CiAgICAgaWYgKHN0cnN0cihtaW1lX3R5cGUuY19zdHIoKSwgInZpZGVvL21wNCIpID09IDAgJiYKICAgICAgICAgc3Ryc3RyKG1pbWVfdHlwZS5jX3N0cigpLCAiYXBwbGljYXRpb24veC1tcGVnVVJMIikgPT0gMCkgewotICAgICAgcmV0dXJuIGtTYk1lZGlhU3VwcG9ydFR5cGVOb3RTdXBwb3J0ZWQ7CisgICAgICBzdXBwb3J0X3R5cGUgPSBrU2JNZWRpYVN1cHBvcnRUeXBlTm90U3VwcG9ydGVkOworICAgIH0gZWxzZSB7CisgICAgICBzdXBwb3J0X3R5cGUgPSBDYW5QbGF5VHlwZShtaW1lX3R5cGUsICIiKTsKICAgICB9Ci0KLSAgICByZXR1cm4gQ2FuUGxheVR5cGUobWltZV90eXBlLCAiIik7CisgICAgbWV0cmljcy5SZWNvcmRRdWVyeSgiSFRNTE1lZGlhRWxlbWVudDo6Y2FuUGxheVR5cGUiLCBtaW1lX3R5cGUsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydF90eXBlKTsKKyAgICByZXR1cm4gc3VwcG9ydF90eXBlOwogICB9CiAKICAgU2JNZWRpYVN1cHBvcnRUeXBlIENhblBsYXlBZGFwdGl2ZSgKICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCiAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYga2V5X3N5c3RlbSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBDYW5QbGF5VHlwZShtaW1lX3R5cGUsIGtleV9zeXN0ZW0pOworICAgIG1lZGlhOjpGb3JtYXRTdXBwb3J0UXVlcnlNZXRyaWNzIG1ldHJpY3M7CisgICAgU2JNZWRpYVN1cHBvcnRUeXBlIHN1cHBvcnRfdHlwZSA9IENhblBsYXlUeXBlKG1pbWVfdHlwZSwga2V5X3N5c3RlbSk7CisgICAgbWV0cmljcy5SZWNvcmRRdWVyeSgiTWVkaWFTb3VyY2U6OklzVHlwZVN1cHBvcnRlZCIsIG1pbWVfdHlwZSwga2V5X3N5c3RlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRfdHlwZSk7CisgICAgcmV0dXJuIHN1cHBvcnRfdHlwZTsKICAgfQogCiAgcHJpdmF0ZToKQEAgLTE4Niw4ICsxOTYsNyBAQAogICAgICAgd2luZG93LAogICAgICAgYmFzZTo6QmluZCgmTWVkaWFNb2R1bGU6OkdldFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAotICAgICAgY2xpZW50LCB0aGlzLCAmZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yXywKLSAgICAgIG9wdGlvbnNfLmFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kLCBuZXcgbWVkaWE6Ok1lZGlhTG9nKSk7CisgICAgICBjbGllbnQsIHRoaXMsIG9wdGlvbnNfLmFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kLCAmbWVkaWFfbG9nXykpOwogfQogCiB2b2lkIE1lZGlhTW9kdWxlOjpTdXNwZW5kKCkgewpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5oIGIvY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5oCmluZGV4IGMyYzNkZjguLjk0Y2MxNDAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9tZWRpYV9tb2R1bGUuaAorKysgYi9jb2JhbHQvbWVkaWEvbWVkaWFfbW9kdWxlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvcmVzb3VyY2VfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTEwOSw2ICsxMTAsOCBAQAogICBzeXN0ZW1fd2luZG93OjpTeXN0ZW1XaW5kb3cqIHN5c3RlbV93aW5kb3dfOwogICBjb2JhbHQ6OnJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZV9wcm92aWRlcl87CiAKKyAgOjptZWRpYTo6TWVkaWFMb2cgbWVkaWFfbG9nXzsKKwogICAvLyBQcm90ZWN0IGFjY2VzcyB0byB0aGUgbGlzdCBvZiBwbGF5ZXJzLgogICBzdGFyYm9hcmQ6Ok11dGV4IHBsYXllcnNfbG9ja187CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9wbGF5ZXIvd2ViX21lZGlhX3BsYXllci5oIGIvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyLmgKaW5kZXggZWE2NmQwOS4uNTNhOTk5OSAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyLmgKKysrIGIvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyLmgKQEAgLTgsNiArOCw3IEBACiAvLyBUaGUgdGVtcG9yYXJ5IGhvbWUgZm9yIFdlYk1lZGlhUGxheWVyIGFuZCBXZWJNZWRpYVBsYXllckNsaWVudC4gVGhleSBhcmUgdGhlCiAvLyBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgSFRNTE1lZGlhRWxlbWVudCBhbmQgdGhlIG1lZGlhIHN0YWNrLgogCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTE4LDE0ICsxOSwxNyBAQAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCiAjaW5jbHVkZSAiYmFzZS9tZW1vcnkvd2Vha19wdHIuaCIKICNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tYXRoL3JlY3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcmFuZ2VzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWVfcHJvdmlkZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3BsYXllci9idWZmZXJlZF9kYXRhX3NvdXJjZS5oIgogI2luY2x1ZGUgInVybC9ndXJsLmgiCiAKK25hbWVzcGFjZSBtZWRpYSB7CisKK2NsYXNzIENodW5rRGVtdXhlcjsKK2NsYXNzIFRpbWVSYW5nZXM7CisKK30gIC8vIG5hbWVzcGFjZSBtZWRpYQorCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CiAKQEAgLTM1LDcgKzM5LDggQEAKICBwdWJsaWM6CiAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBwdW5jaCB0aHJvdWdoIGJveCBzaG91bGQgYmUgcmVuZGVyZWQuICBSZXR1cm4gZmFsc2UgaWYKICAgLy8gbm8gcHVuY2ggdGhyb3VnaCBib3ggc2hvdWxkIGJlIHJlbmRlcmVkLgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPGJvb2woY29uc3QgbWF0aDo6UmVjdCYpPiBTZXRCb3VuZHNDQjsKKyAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxib29sKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KT4gU2V0Qm91bmRzQ0I7CisgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2b2lkKGZsb2F0IHN0YXJ0LCBmbG9hdCBlbmQpPiBBZGRSYW5nZUNCOwogCiAgIGVudW0gTmV0d29ya1N0YXRlIHsKICAgICBrTmV0d29ya1N0YXRlRW1wdHksCkBAIC0xMTAsNyArMTE1LDcgQEAKICAgdmlydHVhbCB2b2lkIFNldFJhdGUoZmxvYXQgcmF0ZSkgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgPSAwOwogICB2aXJ0dWFsIHZvaWQgU2V0VmlzaWJsZShib29sIHZpc2libGUpID0gMDsKLSAgdmlydHVhbCBjb25zdCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgR2V0QnVmZmVyZWRUaW1lUmFuZ2VzKCkgPSAwOworICB2aXJ0dWFsIHZvaWQgVXBkYXRlQnVmZmVyZWRUaW1lUmFuZ2VzKGNvbnN0IEFkZFJhbmdlQ0ImIGFkZF9yYW5nZV9jYikgPSAwOwogICB2aXJ0dWFsIGZsb2F0IEdldE1heFRpbWVTZWVrYWJsZSgpIGNvbnN0ID0gMDsKIAogICAvLyBTdXNwZW5kL1Jlc3VtZQpAQCAtMTI0LDcgKzEyOSw4IEBACiAgIHZpcnR1YWwgYm9vbCBIYXNBdWRpbygpIGNvbnN0ID0gMDsKIAogICAvLyBEaW1lbnNpb24gb2YgdGhlIHZpZGVvLgotICB2aXJ0dWFsIG1hdGg6OlNpemUgR2V0TmF0dXJhbFNpemUoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgaW50IEdldE5hdHVyYWxXaWR0aCgpIGNvbnN0ID0gMDsKKyAgdmlydHVhbCBpbnQgR2V0TmF0dXJhbEhlaWdodCgpIGNvbnN0ID0gMDsKIAogICAvLyBHZXR0ZXJzIG9mIHBsYXliYWNrIHN0YXRlLgogICB2aXJ0dWFsIGJvb2wgSXNQYXVzZWQoKSBjb25zdCA9IDA7CkBAIC0xNjIsOSArMTY4LDYgQEAKICAgICByZXR1cm4ga0FkZElkU3RhdHVzTm90U3VwcG9ydGVkOwogICB9CiAgIHZpcnR1YWwgYm9vbCBTb3VyY2VSZW1vdmVJZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gIHZpcnR1YWwgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gU291cmNlQnVmZmVyZWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKSB7Ci0gICAgcmV0dXJuIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+KCk7Ci0gIH0KICAgdmlydHVhbCBib29sIFNvdXJjZUFwcGVuZChjb25zdCBzdGQ6OnN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE2LDcgKzIxOSw3IEBACiAgIHZpcnR1YWwgdm9pZCBTZXRPcGFxdWUoYm9vbCBvcGFxdWUpIHt9CiAgIHZpcnR1YWwgdm9pZCBTYXdVbnN1cHBvcnRlZFRyYWNrcygpID0gMDsKICAgdmlydHVhbCBmbG9hdCBWb2x1bWUoKSBjb25zdCA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBTb3VyY2VPcGVuZWQoQ2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyKSA9IDA7CisgIHZpcnR1YWwgdm9pZCBTb3VyY2VPcGVuZWQoOjptZWRpYTo6Q2h1bmtEZW11eGVyKiBjaHVua19kZW11eGVyKSA9IDA7CiAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgU291cmNlVVJMKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIE1heFZpZGVvQ2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOwogCkBAIC0yMjksNyArMjMyLDcgQEAKICAgLy8gTm90aWZpZXMgdGhlIGNsaWVudCB0aGF0IGEgdmlkZW8gaXMgZW5jcnlwdGVkLiBDbGllbnQgaXMgc3VwcG9zZWQgdG8gY2FsbAogICAvLyB8V2ViTWVkaWFQbGF5ZXI6OlNldERybVN5c3RlbXwgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBzdGFsbGluZwogICAvLyBwbGF5YmFjay4KLSAgdmlydHVhbCB2b2lkIEVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZChFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUsCisgIHZpcnR1YWwgdm9pZCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQoY29uc3QgY2hhciogaW5pdF9kYXRhX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogaW5pdF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluaXRfZGF0YV9sZW5ndGgpID0gMDsKICAgLy8gVE9ETzogUmV2aXNpdCB0aGUgbmVjZXNzaXR5IG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyX2ltcGwuY2MgYi9jb2JhbHQvbWVkaWEvcGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfaW1wbC5jYwppbmRleCBmNTNjZjkxLi5iYmEyOTYyIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfaW1wbC5jYworKysgYi9jb2JhbHQvbWVkaWEvcGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfaW1wbC5jYwpAQCAtMTksMTQgKzE5LDE2IEBACiAjaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vd2FpdGFibGVfZXZlbnQuaCIKICNpbmNsdWRlICJiYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvaW5zdGFuY2VfY291bnRlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZHJtX3N5c3RlbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2xpbWl0cy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfcHJveHkuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2xpbWl0cy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcmVjdC5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC05NCwxMCArOTYsMTAgQEAKIH0gIC8vIG5hbWVzcGFjZQogCiAjZGVmaW5lIEJJTkRfVE9fUkVOREVSX0xPT1AoZnVuY3Rpb24pIFwKLSAgQmluZFRvQ3VycmVudExvb3AoYmFzZTo6QmluZChmdW5jdGlvbiwgQXNXZWFrUHRyKCkpKQorICA6Om1lZGlhOjpCaW5kVG9DdXJyZW50TG9vcChiYXNlOjpCaW5kKGZ1bmN0aW9uLCBBc1dlYWtQdHIoKSkpCiAKICNkZWZpbmUgQklORF9UT19SRU5ERVJfTE9PUF8yKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKSBcCi0gIEJpbmRUb0N1cnJlbnRMb29wKGJhc2U6OkJpbmQoZnVuY3Rpb24sIEFzV2Vha1B0cigpLCBhcmcxLCBhcmcyKSkKKyAgOjptZWRpYTo6QmluZFRvQ3VycmVudExvb3AoYmFzZTo6QmluZChmdW5jdGlvbiwgQXNXZWFrUHRyKCksIGFyZzEsIGFyZzIpKQogCiAvLyBUT0RPKGFjb2x3ZWxsKTogSW52ZXN0aWdhdGUgd2hldGhlciB0aGUga2V5X3N5c3RlbSAmIHNlc3Npb25faWQgcGFyYW1ldGVycwogLy8gYXJlIHJlYWxseSBuZWNlc3NhcnkuCkBAIC0xMTAsMTUgKzExMiwxMyBAQAogICAgIGNvbnN0IFBpcGVsaW5lOjpHZXREZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlckZ1bmMmCiAgICAgICAgIGdldF9kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfZnVuYywKICAgICBXZWJNZWRpYVBsYXllckNsaWVudCogY2xpZW50LCBXZWJNZWRpYVBsYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwKLSAgICBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IqIGJ1ZmZlcl9hbGxvY2F0b3IsIGJvb2wgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmQsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykKKyAgICBib29sIGFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kLCA6Om1lZGlhOjpNZWRpYUxvZyogY29uc3QgbWVkaWFfbG9nKQogICAgIDogcGlwZWxpbmVfdGhyZWFkXygibWVkaWFfcGlwZWxpbmUiKSwKICAgICAgIG5ldHdvcmtfc3RhdGVfKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRW1wdHkpLAogICAgICAgcmVhZHlfc3RhdGVfKFdlYk1lZGlhUGxheWVyOjprUmVhZHlTdGF0ZUhhdmVOb3RoaW5nKSwKICAgICAgIG1haW5fbG9vcF8oYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSksCiAgICAgICBjbGllbnRfKGNsaWVudCksCiAgICAgICBkZWxlZ2F0ZV8oZGVsZWdhdGUpLAotICAgICAgYnVmZmVyX2FsbG9jYXRvcl8oYnVmZmVyX2FsbG9jYXRvciksCiAgICAgICBhbGxvd19yZXN1bWVfYWZ0ZXJfc3VzcGVuZF8oYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmQpLAogICAgICAgcHJveHlfKG5ldyBXZWJNZWRpYVBsYXllclByb3h5KG1haW5fbG9vcF8tPnRhc2tfcnVubmVyKCksIHRoaXMpKSwKICAgICAgIG1lZGlhX2xvZ18obWVkaWFfbG9nKSwKQEAgLTEzNCwxNCArMTM0LDEyIEBACiAKICAgdmlkZW9fZnJhbWVfcHJvdmlkZXJfID0gbmV3IFZpZGVvRnJhbWVQcm92aWRlcigpOwogCi0gIERDSEVDSyhidWZmZXJfYWxsb2NhdG9yXyk7Ci0gIG1lZGlhX2xvZ18tPkFkZEV2ZW50KAotICAgICAgbWVkaWFfbG9nXy0+Q3JlYXRlRXZlbnQoTWVkaWFMb2dFdmVudDo6V0VCTUVESUFQTEFZRVJfQ1JFQVRFRCkpOworICBtZWRpYV9sb2dfLT5BZGRFdmVudDw6Om1lZGlhOjpNZWRpYUxvZ0V2ZW50OjprV2ViTWVkaWFQbGF5ZXJDcmVhdGVkPigpOwogCiAgIHBpcGVsaW5lX3RocmVhZF8uU3RhcnQoKTsKICAgcGlwZWxpbmVfID0gUGlwZWxpbmU6OkNyZWF0ZSh3aW5kb3csIHBpcGVsaW5lX3RocmVhZF8udGFza19ydW5uZXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZGVjb2RlX3RhcmdldF9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmRfLCBtZWRpYV9sb2dfLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3Jlc3VtZV9hZnRlcl9zdXNwZW5kXywgbWVkaWFfbG9nXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19mcmFtZV9wcm92aWRlcl8uZ2V0KCkpOwogCiAgIC8vIEFsc28gd2Ugd2FudCB0byBiZSBub3RpZmllZCBvZiB8bWFpbl9sb29wX3wgZGVzdHJ1Y3Rpb24uCkBAIC0xNjcsOCArMTY1LDcgQEAKICAgcHJvZ3Jlc3NpdmVfZGVtdXhlcl8ucmVzZXQoKTsKICAgY2h1bmtfZGVtdXhlcl8ucmVzZXQoKTsKIAotICBtZWRpYV9sb2dfLT5BZGRFdmVudCgKLSAgICAgIG1lZGlhX2xvZ18tPkNyZWF0ZUV2ZW50KE1lZGlhTG9nRXZlbnQ6OldFQk1FRElBUExBWUVSX0RFU1RST1lFRCkpOworICBtZWRpYV9sb2dfLT5BZGRFdmVudDw6Om1lZGlhOjpNZWRpYUxvZ0V2ZW50OjprV2ViTWVkaWFQbGF5ZXJEZXN0cm95ZWQ+KCk7CiAKICAgLy8gRmluYWxseSB0ZWxsIHRoZSB8bWFpbl9sb29wX3wgd2UgZG9uJ3Qgd2FudCB0byBiZSBub3RpZmllZCBvZiBkZXN0cnVjdGlvbgogICAvLyBldmVudC4KQEAgLTIyNiw3ICsyMjMsNyBAQAogICAvLyBUT0RPOiBTZXQgbmV0d29ya1N0YXRlIHRvIFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlSWRsZSBvbiBzdG9wLgogICBTZXROZXR3b3JrU3RhdGUoV2ViTWVkaWFQbGF5ZXI6OmtOZXR3b3JrU3RhdGVMb2FkaW5nKTsKICAgU2V0UmVhZHlTdGF0ZShXZWJNZWRpYVBsYXllcjo6a1JlYWR5U3RhdGVIYXZlTm90aGluZyk7Ci0gIG1lZGlhX2xvZ18tPkFkZEV2ZW50KG1lZGlhX2xvZ18tPkNyZWF0ZUxvYWRFdmVudCh1cmwuc3BlYygpKSk7CisgIG1lZGlhX2xvZ18tPkFkZEV2ZW50PDo6bWVkaWE6Ok1lZGlhTG9nRXZlbnQ6OmtMb2FkPih1cmwuc3BlYygpKTsKIAogICBpc19sb2NhbF9zb3VyY2VfID0gIXVybC5TY2hlbWVJcygiaHR0cCIpICYmICF1cmwuU2NoZW1lSXMoImh0dHBzIik7CiAKQEAgLTI0NywxMiArMjQ0LDEzIEBACiAgIFNldFJlYWR5U3RhdGUoV2ViTWVkaWFQbGF5ZXI6OmtSZWFkeVN0YXRlSGF2ZU5vdGhpbmcpOwogCiAgIC8vIE1lZGlhIHNvdXJjZSBwaXBlbGluZXMgY2FuIHN0YXJ0IGltbWVkaWF0ZWx5LgotICBjaHVua19kZW11eGVyXy5yZXNldChuZXcgQ2h1bmtEZW11eGVyKAotICAgICAgYnVmZmVyX2FsbG9jYXRvcl8sCisgIGNodW5rX2RlbXV4ZXJfLnJlc2V0KG5ldyA6Om1lZGlhOjpDaHVua0RlbXV4ZXIoCiAgICAgICBCSU5EX1RPX1JFTkRFUl9MT09QKCZXZWJNZWRpYVBsYXllckltcGw6Ok9uRGVtdXhlck9wZW5lZCksCisgICAgICAvLyBUT0RPKGIvMjMwODc4ODUyKTogSGFuZGxlIHByb2dyZXNzIGNhbGxiYWNrLgorICAgICAgYmFzZTo6QmluZFJlcGVhdGluZyhbXSgpIHt9KSwKICAgICAgIEJJTkRfVE9fUkVOREVSX0xPT1AoCi0gICAgICAgICAgJldlYk1lZGlhUGxheWVySW1wbDo6T25FbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQpLAotICAgICAgbWVkaWFfbG9nXywgdHJ1ZSkpOworICAgICAgICAgICZXZWJNZWRpYVBsYXllckltcGw6Ok9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkV3JhcHBlciksCisgICAgICBtZWRpYV9sb2dfKSk7CiAKICAgc3VwcG9ydHNfc2F2ZV8gPSBmYWxzZTsKICAgc3RhdGVfLmlzX21lZGlhX3NvdXJjZSA9IHRydWU7CkBAIC0yNzIsNyArMjcwLDcgQEAKIAogICBTZXROZXR3b3JrU3RhdGUoV2ViTWVkaWFQbGF5ZXI6OmtOZXR3b3JrU3RhdGVMb2FkaW5nKTsKICAgU2V0UmVhZHlTdGF0ZShXZWJNZWRpYVBsYXllcjo6a1JlYWR5U3RhdGVIYXZlTm90aGluZyk7Ci0gIG1lZGlhX2xvZ18tPkFkZEV2ZW50KG1lZGlhX2xvZ18tPkNyZWF0ZUxvYWRFdmVudCh1cmwuc3BlYygpKSk7CisgIG1lZGlhX2xvZ18tPkFkZEV2ZW50PDo6bWVkaWE6Ok1lZGlhTG9nRXZlbnQ6OmtMb2FkPih1cmwuc3BlYygpKTsKIAogICBkYXRhX3NvdXJjZS0+U2V0RG93bmxvYWRpbmdTdGF0dXNDQigKICAgICAgIGJhc2U6OkJpbmQoJldlYk1lZGlhUGxheWVySW1wbDo6T25Eb3dubG9hZGluZ1N0YXR1c0NoYW5nZWQsIEFzV2Vha1B0cigpKSk7CkBAIC0yODAsOSArMjc4LDggQEAKIAogICBpc19sb2NhbF9zb3VyY2VfID0gIXVybC5TY2hlbWVJcygiaHR0cCIpICYmICF1cmwuU2NoZW1lSXMoImh0dHBzIik7CiAKLSAgcHJvZ3Jlc3NpdmVfZGVtdXhlcl8ucmVzZXQoCi0gICAgICBuZXcgUHJvZ3Jlc3NpdmVEZW11eGVyKHBpcGVsaW5lX3RocmVhZF8udGFza19ydW5uZXIoKSwgYnVmZmVyX2FsbG9jYXRvcl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5Xy0+ZGF0YV9zb3VyY2UoKSwgbWVkaWFfbG9nXykpOworICBwcm9ncmVzc2l2ZV9kZW11eGVyXy5yZXNldChuZXcgUHJvZ3Jlc3NpdmVEZW11eGVyKAorICAgICAgcGlwZWxpbmVfdGhyZWFkXy50YXNrX3J1bm5lcigpLCBwcm94eV8tPmRhdGFfc291cmNlKCksIG1lZGlhX2xvZ18pKTsKIAogICBzdGF0ZV8uaXNfcHJvZ3Jlc3NpdmUgPSB0cnVlOwogICBTdGFydFBpcGVsaW5lKHByb2dyZXNzaXZlX2RlbXV4ZXJfLmdldCgpKTsKQEAgLTMwMCw3ICsyOTcsNyBAQAogICBzdGF0ZV8ucGF1c2VkID0gZmFsc2U7CiAgIHBpcGVsaW5lXy0+U2V0UGxheWJhY2tSYXRlKHN0YXRlXy5wbGF5YmFja19yYXRlKTsKIAotICBtZWRpYV9sb2dfLT5BZGRFdmVudChtZWRpYV9sb2dfLT5DcmVhdGVFdmVudChNZWRpYUxvZ0V2ZW50OjpQTEFZKSk7CisgIG1lZGlhX2xvZ18tPkFkZEV2ZW50PDo6bWVkaWE6Ok1lZGlhTG9nRXZlbnQ6OmtQbGF5PigpOwogfQogCiB2b2lkIFdlYk1lZGlhUGxheWVySW1wbDo6UGF1c2UoKSB7CkBAIC0zMTAsNyArMzA3LDcgQEAKICAgcGlwZWxpbmVfLT5TZXRQbGF5YmFja1JhdGUoMC4wZik7CiAgIHN0YXRlXy5wYXVzZWRfdGltZSA9IHBpcGVsaW5lXy0+R2V0TWVkaWFUaW1lKCk7CiAKLSAgbWVkaWFfbG9nXy0+QWRkRXZlbnQobWVkaWFfbG9nXy0+Q3JlYXRlRXZlbnQoTWVkaWFMb2dFdmVudDo6UEFVU0UpKTsKKyAgbWVkaWFfbG9nXy0+QWRkRXZlbnQ8OjptZWRpYTo6TWVkaWFMb2dFdmVudDo6a1BhdXNlPigpOwogfQogCiBib29sIFdlYk1lZGlhUGxheWVySW1wbDo6U3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QgewpAQCAtMzQ1LDcgKzM0Miw3IEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgbWVkaWFfbG9nXy0+QWRkRXZlbnQobWVkaWFfbG9nXy0+Q3JlYXRlU2Vla0V2ZW50KHNlY29uZHMpKTsKKyAgbWVkaWFfbG9nXy0+QWRkRXZlbnQ8OjptZWRpYTo6TWVkaWFMb2dFdmVudDo6a1NlZWs+KHNlY29uZHMpOwogCiAgIGJhc2U6OlRpbWVEZWx0YSBzZWVrX3RpbWUgPSBDb252ZXJ0U2Vjb25kc1RvVGltZXN0YW1wKHNlY29uZHMpOwogCkBAIC00MTYsMTIgKzQxMywyMCBAQAogICByZXR1cm4gcGlwZWxpbmVfLT5IYXNBdWRpbygpOwogfQogCi1tYXRoOjpTaXplIFdlYk1lZGlhUGxheWVySW1wbDo6R2V0TmF0dXJhbFNpemUoKSBjb25zdCB7CitpbnQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpHZXROYXR1cmFsV2lkdGgoKSBjb25zdCB7CiAgIERDSEVDS19FUShtYWluX2xvb3BfLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKIAotICBtYXRoOjpTaXplIHNpemU7CisgIGdmeDo6U2l6ZSBzaXplOwogICBwaXBlbGluZV8tPkdldE5hdHVyYWxWaWRlb1NpemUoJnNpemUpOwotICByZXR1cm4gc2l6ZTsKKyAgcmV0dXJuIHNpemUud2lkdGgoKTsKK30KKworaW50IFdlYk1lZGlhUGxheWVySW1wbDo6R2V0TmF0dXJhbEhlaWdodCgpIGNvbnN0IHsKKyAgRENIRUNLX0VRKG1haW5fbG9vcF8sIGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCkpOworCisgIGdmeDo6U2l6ZSBzaXplOworICBwaXBlbGluZV8tPkdldE5hdHVyYWxWaWRlb1NpemUoJnNpemUpOworICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKIH0KIAogYm9vbCBXZWJNZWRpYVBsYXllckltcGw6OklzUGF1c2VkKCkgY29uc3QgewpAQCAtNDQ4LDcgKzQ1Myw3IEBACiAKICAgLy8gUmV0dXJuIHBvc2l0aXZlIGluZmluaXR5IGlmIHRoZSByZXNvdXJjZSBpcyB1bmJvdW5kZWQuCiAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3ZpZGVvLmh0bWwjZG9tLW1lZGlhLWR1cmF0aW9uCi0gIGlmIChkdXJhdGlvbiA9PSBrSW5maW5pdGVEdXJhdGlvbikKKyAgaWYgKGR1cmF0aW9uID09IDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uKQogICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKIAogICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGR1cmF0aW9uLkluU2Vjb25kc0YoKSk7CkBAIC00OTgsMTAgKzUwMywxNiBAQAogICByZXR1cm4gcmVhZHlfc3RhdGVfOwogfQogCi1jb25zdCBSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgV2ViTWVkaWFQbGF5ZXJJbXBsOjpHZXRCdWZmZXJlZFRpbWVSYW5nZXMoKSB7Cit2b2lkIFdlYk1lZGlhUGxheWVySW1wbDo6VXBkYXRlQnVmZmVyZWRUaW1lUmFuZ2VzKAorICAgIGNvbnN0IEFkZFJhbmdlQ0ImIGFkZF9yYW5nZV9jYikgewogICBEQ0hFQ0tfRVEobWFpbl9sb29wXywgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7Ci0gIGJ1ZmZlcmVkXyA9IHBpcGVsaW5lXy0+R2V0QnVmZmVyZWRUaW1lUmFuZ2VzKCk7Ci0gIHJldHVybiBidWZmZXJlZF87CisgIERDSEVDSyhhZGRfcmFuZ2VfY2IpOworCisgIGF1dG8gYnVmZmVyZWQgPSBwaXBlbGluZV8tPkdldEJ1ZmZlcmVkVGltZVJhbmdlcygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihidWZmZXJlZC5zaXplKCkpOyArK2kpIHsKKyAgICBhZGRfcmFuZ2VfY2IoYnVmZmVyZWQuc3RhcnQoaSkuSW5TZWNvbmRzRigpLCBidWZmZXJlZC5lbmQoaSkuSW5TZWNvbmRzRigpKTsKKyAgfQogfQogCiBmbG9hdCBXZWJNZWRpYVBsYXllckltcGw6OkdldE1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IHsKQEAgLTU0NSw3ICs1NTYsNyBAQAogICBEQ0hFQ0tfRVEobWFpbl9sb29wXywgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CiAKICAgUGxheWVyU3RhdGlzdGljcyBzdGF0aXN0aWNzOwotICBQaXBlbGluZVN0YXRpc3RpY3MgcGlwZWxpbmVfc3RhdHMgPSBwaXBlbGluZV8tPkdldFN0YXRpc3RpY3MoKTsKKyAgOjptZWRpYTo6UGlwZWxpbmVTdGF0aXN0aWNzIHBpcGVsaW5lX3N0YXRzID0gcGlwZWxpbmVfLT5HZXRTdGF0aXN0aWNzKCk7CiAgIHN0YXRpc3RpY3MuYXVkaW9fYnl0ZXNfZGVjb2RlZCA9IHBpcGVsaW5lX3N0YXRzLmF1ZGlvX2J5dGVzX2RlY29kZWQ7CiAgIHN0YXRpc3RpY3MudmlkZW9fYnl0ZXNfZGVjb2RlZCA9IHBpcGVsaW5lX3N0YXRzLnZpZGVvX2J5dGVzX2RlY29kZWQ7CiAgIHN0YXRpc3RpY3MudmlkZW9fZnJhbWVzX2RlY29kZWQgPSBwaXBlbGluZV9zdGF0cy52aWRlb19mcmFtZXNfZGVjb2RlZDsKQEAgLTU5NCw3ICs2MDUsNyBAQAogICB9CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpPblBpcGVsaW5lU2VlayhQaXBlbGluZVN0YXR1cyBzdGF0dXMsCit2b2lkIFdlYk1lZGlhUGxheWVySW1wbDo6T25QaXBlbGluZVNlZWsoOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfaW5pdGlhbF9wcmVyb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcl9tZXNzYWdlKSB7CiAgIERDSEVDS19FUShtYWluX2xvb3BfLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKQEAgLTYwNiw3ICs2MTcsNyBAQAogICAgIHJldHVybjsKICAgfQogCi0gIGlmIChzdGF0dXMgIT0gUElQRUxJTkVfT0spIHsKKyAgaWYgKHN0YXR1cyAhPSA6Om1lZGlhOjpQSVBFTElORV9PSykgewogICAgIE9uUGlwZWxpbmVFcnJvcihzdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgcGlwZWxpbmUgc2VlayB3aXRoIGVycm9yOiAiICsgZXJyb3JfbWVzc2FnZSArICIuIik7CiAgICAgcmV0dXJuOwpAQCAtNjIxLDkgKzYzMiw5IEBACiAgIH0KIH0KIAotdm9pZCBXZWJNZWRpYVBsYXllckltcGw6Ok9uUGlwZWxpbmVFbmRlZChQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHsKK3ZvaWQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpPblBpcGVsaW5lRW5kZWQoOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7CiAgIERDSEVDS19FUShtYWluX2xvb3BfLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKLSAgaWYgKHN0YXR1cyAhPSBQSVBFTElORV9PSykgeworICBpZiAoc3RhdHVzICE9IDo6bWVkaWE6OlBJUEVMSU5FX09LKSB7CiAgICAgT25QaXBlbGluZUVycm9yKHN0YXR1cywgIkZhaWxlZCBwaXBlbGluZSBlbmQuIik7CiAgICAgcmV0dXJuOwogICB9CkBAIC02MzIsMTMgKzY0MywxMyBAQAogICBHZXRDbGllbnQoKS0+VGltZUNoYW5nZWQoa0Vvc1BsYXllZCk7CiB9CiAKLXZvaWQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpPblBpcGVsaW5lRXJyb3IoUGlwZWxpbmVTdGF0dXMgZXJyb3IsCit2b2lkIFdlYk1lZGlhUGxheWVySW1wbDo6T25QaXBlbGluZUVycm9yKDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIGVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgewogICBEQ0hFQ0tfRVEobWFpbl9sb29wXywgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CiAKICAgaWYgKHN1cHByZXNzX2Rlc3RydWN0aW9uX2Vycm9yc18pIHJldHVybjsKIAotICBtZWRpYV9sb2dfLT5BZGRFdmVudChtZWRpYV9sb2dfLT5DcmVhdGVQaXBlbGluZUVycm9yRXZlbnQoZXJyb3IpKTsKKyAgbWVkaWFfbG9nXy0+Tm90aWZ5RXJyb3IoZXJyb3IpOwogCiAgIGlmIChyZWFkeV9zdGF0ZV8gPT0gV2ViTWVkaWFQbGF5ZXI6OmtSZWFkeVN0YXRlSGF2ZU5vdGhpbmcpIHsKICAgICAvLyBBbnkgZXJyb3IgdGhhdCBvY2N1cnMgYmVmb3JlIHJlYWNoaW5nIFJlYWR5U3RhdGVIYXZlTWV0YWRhdGEgc2hvdWxkCkBAIC02NTEsMTkgKzY2MiwxOSBAQAogCiAgIHN0ZDo6c3RyaW5nIGRlZmF1bHRfbWVzc2FnZTsKICAgc3dpdGNoIChlcnJvcikgewotICAgIGNhc2UgUElQRUxJTkVfT0s6CisgICAgY2FzZSA6Om1lZGlhOjpQSVBFTElORV9PSzoKICAgICAgIE5PVFJFQUNIRUQoKSA8PCAiUElQRUxJTkVfT0sgaXNuJ3QgYW4gZXJyb3IhIjsKICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBQSVBFTElORV9FUlJPUl9ORVRXT1JLOgorICAgIGNhc2UgOjptZWRpYTo6UElQRUxJTkVfRVJST1JfTkVUV09SSzoKICAgICAgIFNldE5ldHdvcmtFcnJvcihXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZU5ldHdvcmtFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVtcHR5KCkgPyAiUGlwZWxpbmUgbmV0d29yayBlcnJvci4iIDogbWVzc2FnZSk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX1JFQUQ6CisgICAgY2FzZSA6Om1lZGlhOjpQSVBFTElORV9FUlJPUl9SRUFEOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlTmV0d29ya0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJQaXBlbGluZSByZWFkIGVycm9yLiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX05FVFdPUktfRVJST1I6CisgICAgY2FzZSA6Om1lZGlhOjpDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfTkVUV09SS19FUlJPUjoKICAgICAgIFNldE5ldHdvcmtFcnJvcigKICAgICAgICAgICBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZU5ldHdvcmtFcnJvciwKICAgICAgICAgICBtZXNzYWdlLmVtcHR5KCkgPyAiQ2h1bmsgZGVtdXhlciBlb3MgbmV0d29yayBlcnJvci4iIDogbWVzc2FnZSk7CkBAIC02NzIsNzMgKzY4Myw3MiBAQAogICAgIC8vIFRPRE8odnJrKTogQmVjYXVzZSBPblBpcGVsaW5lSW5pdGlhbGl6ZSgpIGRpcmVjdGx5IHJlcG9ydHMgdGhlCiAgICAgLy8gTmV0d29ya1N0YXRlRm9ybWF0RXJyb3IgaW5zdGVhZCBvZiBjYWxsaW5nIE9uUGlwZWxpbmVFcnJvcigpLCBJIGJlbGlldmUKICAgICAvLyB0aGlzIGJsb2NrIGNhbiBiZSBkZWxldGVkLiBTaG91bGQgbG9vayBpbnRvIGl0ISAoY3JidWcuY29tLzEyNjA3MCkKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRDoKKyAgICBjYXNlIDo6bWVkaWE6OlBJUEVMSU5FX0VSUk9SX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRDoKICAgICAgIFNldE5ldHdvcmtFcnJvcigKICAgICAgICAgICBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZUZvcm1hdEVycm9yLAogICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJQaXBlbGluZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQSVBFTElORV9FUlJPUl9DT1VMRF9OT1RfUkVOREVSOgorICAgIGNhc2UgOjptZWRpYTo6UElQRUxJTkVfRVJST1JfQ09VTERfTk9UX1JFTkRFUjoKICAgICAgIFNldE5ldHdvcmtFcnJvcihXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZUZvcm1hdEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJQaXBlbGluZSBjb3VsZCBub3QgcmVuZGVyLiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgUElQRUxJTkVfRVJST1JfRVhURVJOQUxfUkVOREVSRVJfRkFJTEVEOgorICAgIGNhc2UgOjptZWRpYTo6UElQRUxJTkVfRVJST1JfRVhURVJOQUxfUkVOREVSRVJfRkFJTEVEOgogICAgICAgU2V0TmV0d29ya0Vycm9yKAogICAgICAgICAgIFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRm9ybWF0RXJyb3IsCiAgICAgICAgICAgbWVzc2FnZS5lbXB0eSgpID8gIlBpcGVsaW5lIGV4dGVybmFsIHJlbmRlcmVyIGZhaWxlZC4iIDogbWVzc2FnZSk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIERFTVVYRVJfRVJST1JfQ09VTERfTk9UX09QRU46CisgICAgY2FzZSA6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9PUEVOOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRm9ybWF0RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbXB0eSgpID8gIkRlbXV4ZXIgY291bGQgbm90IG9wZW4uIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRToKKyAgICBjYXNlIDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRm9ybWF0RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbXB0eSgpID8gIkRlbXV4ZXIgY291bGQgbm90IHBhcnNlLiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgREVNVVhFUl9FUlJPUl9OT19TVVBQT1JURURfU1RSRUFNUzoKKyAgICBjYXNlIDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfTk9fU1VQUE9SVEVEX1NUUkVBTVM6CiAgICAgICBTZXROZXR3b3JrRXJyb3IoCiAgICAgICAgICAgV2ViTWVkaWFQbGF5ZXI6OmtOZXR3b3JrU3RhdGVGb3JtYXRFcnJvciwKICAgICAgICAgICBtZXNzYWdlLmVtcHR5KCkgPyAiRGVtdXhlciBubyBzdXBwb3J0ZWQgc3RyZWFtcy4iIDogbWVzc2FnZSk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIERFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRDoKKyAgICBjYXNlIDo6bWVkaWE6OkRFQ09ERVJfRVJST1JfTk9UX1NVUFBPUlRFRDoKICAgICAgIFNldE5ldHdvcmtFcnJvcihXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZUZvcm1hdEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJEZWNvZGVyIG5vdCBzdXBwb3J0ZWQuIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFBJUEVMSU5FX0VSUk9SX0RFQ09ERToKKyAgICBjYXNlIDo6bWVkaWE6OlBJUEVMSU5FX0VSUk9SX0RFQ09ERToKICAgICAgIFNldE5ldHdvcmtFcnJvcihXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZURlY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJQaXBlbGluZSBkZWNvZGUgZXJyb3IuIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQSVBFTElORV9FUlJPUl9BQk9SVDoKKyAgICBjYXNlIDo6bWVkaWE6OlBJUEVMSU5FX0VSUk9SX0FCT1JUOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRGVjb2RlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbXB0eSgpID8gIlBpcGVsaW5lIGFib3J0LiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgUElQRUxJTkVfRVJST1JfSU5WQUxJRF9TVEFURToKKyAgICBjYXNlIDo6bWVkaWE6OlBJUEVMSU5FX0VSUk9SX0lOVkFMSURfU1RBVEU6CiAgICAgICBTZXROZXR3b3JrRXJyb3IoV2ViTWVkaWFQbGF5ZXI6OmtOZXR3b3JrU3RhdGVEZWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVtcHR5KCkgPyAiUGlwZWxpbmUgaW52YWxpZCBzdGF0ZS4iIDogbWVzc2FnZSk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIENIVU5LX0RFTVVYRVJfRVJST1JfQVBQRU5EX0ZBSUxFRDoKKyAgICBjYXNlIDo6bWVkaWE6OkNIVU5LX0RFTVVYRVJfRVJST1JfQVBQRU5EX0ZBSUxFRDoKICAgICAgIFNldE5ldHdvcmtFcnJvcigKICAgICAgICAgICBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZURlY29kZUVycm9yLAogICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJDaHVuayBkZW11eGVyIGFwcGVuZCBmYWlsZWQuIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfREVDT0RFX0VSUk9SOgorICAgIGNhc2UgOjptZWRpYTo6Q0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX0RFQ09ERV9FUlJPUjoKICAgICAgIFNldE5ldHdvcmtFcnJvcigKICAgICAgICAgICBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZURlY29kZUVycm9yLAogICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJDaHVuayBkZW11eGVyIGVvcyBkZWNvZGUgZXJyb3IuIiA6IG1lc3NhZ2UpOwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVURJT19SRU5ERVJFUl9FUlJPUjoKKyAgICBjYXNlIDo6bWVkaWE6OkFVRElPX1JFTkRFUkVSX0VSUk9SOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlRGVjb2RlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5lbXB0eSgpID8gIkF1ZGlvIHJlbmRlcmVyIGVycm9yLiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVVESU9fUkVOREVSRVJfRVJST1JfU1BMSUNFX0ZBSUxFRDoKLSAgICAgIFNldE5ldHdvcmtFcnJvcigKLSAgICAgICAgICBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZURlY29kZUVycm9yLAotICAgICAgICAgIG1lc3NhZ2UuZW1wdHkoKSA/ICJBdWRpbyByZW5kZXJlciBzcGxpY2UgZmFpbGVkLiIgOiBtZXNzYWdlKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgUExBWUJBQ0tfQ0FQQUJJTElUWV9DSEFOR0VEOgorICAgIGNhc2UgOjptZWRpYTo6UExBWUJBQ0tfQ0FQQUJJTElUWV9DSEFOR0VEOgogICAgICAgU2V0TmV0d29ya0Vycm9yKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlQ2FwYWJpbGl0eUNoYW5nZWRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmVtcHR5KCkgPyAiQ2FwYWJpbGl0eSBjaGFuZ2VkLiIgOiBtZXNzYWdlKTsKICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAvLyBUT0RPKGIvMjMwODgxNTc2KTogSGFuZGxlIGFueSBuZXcgZW51bSB2YWx1ZXMgdGhhdCBub3QgaGFuZGxlZC4KKyAgICAgIE5PVFJFQUNIRUQoKTsKKyAgICAgIGJyZWFrOwogICB9CiB9CiAKQEAgLTc4Myw5ICs3OTMsNiBAQAogICBlbHNlIGlmIChpc19kb3dubG9hZGluZyAmJgogICAgICAgICAgICBuZXR3b3JrX3N0YXRlXyA9PSBXZWJNZWRpYVBsYXllcjo6a05ldHdvcmtTdGF0ZUlkbGUpCiAgICAgU2V0TmV0d29ya1N0YXRlKFdlYk1lZGlhUGxheWVyOjprTmV0d29ya1N0YXRlTG9hZGluZyk7Ci0gIG1lZGlhX2xvZ18tPkFkZEV2ZW50KAotICAgICAgbWVkaWFfbG9nXy0+Q3JlYXRlQm9vbGVhbkV2ZW50KE1lZGlhTG9nRXZlbnQ6Ok5FVFdPUktfQUNUSVZJVFlfU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc19kb3dubG9hZGluZ19kYXRhIiwgaXNfZG93bmxvYWRpbmcpKTsKIH0KIAogI2lmIFNCX0hBUyhQTEFZRVJfV0lUSF9VUkwpCkBAIC04MDgsNyArODE1LDggQEAKICAgICAgIEJJTkRfVE9fUkVOREVSX0xPT1AoJldlYk1lZGlhUGxheWVySW1wbDo6T25Db250ZW50U2l6ZUNoYW5nZWQpKTsKIH0KICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLXZvaWQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpTdGFydFBpcGVsaW5lKERlbXV4ZXIqIGRlbXV4ZXIpIHsKKwordm9pZCBXZWJNZWRpYVBsYXllckltcGw6OlN0YXJ0UGlwZWxpbmUoOjptZWRpYTo6RGVtdXhlciogZGVtdXhlcikgewogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6bWVkaWEiLCAiV2ViTWVkaWFQbGF5ZXJJbXBsOjpTdGFydFBpcGVsaW5lIik7CiAKICAgc3RhdGVfLnN0YXJ0aW5nID0gdHJ1ZTsKQEAgLTkxMCwxMyArOTE4LDQwIEBACiB9CiAKIHZvaWQgV2ViTWVkaWFQbGF5ZXJJbXBsOjpPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZCgKLSAgICBFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpIHsKKyAgICBjb25zdCBjaGFyKiBpbml0X2RhdGFfdHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluaXRfZGF0YSkgewogICBEQ0hFQ0tfRVEobWFpbl9sb29wXywgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CiAKICAgR2V0Q2xpZW50KCktPkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZChpbml0X2RhdGFfdHlwZSwgJmluaXRfZGF0YVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2RhdGEuc2l6ZSgpKTsKIH0KIAordm9pZCBXZWJNZWRpYVBsYXllckltcGw6Ok9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkV3JhcHBlcigKKyAgICA6Om1lZGlhOjpFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUsCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIGluaXRfZGF0YSkgeworICBEQ0hFQ0tfRVEobWFpbl9sb29wXywgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisKKyAgLy8gSW5pdGlhbGl6YXRpb24gZGF0YSB0eXBlcyBhcmUgZGVmaW5lZCBpbgorICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvZW1lLWluaXRkYXRhLXJlZ2lzdHJ5LyNyZWdpc3RyeS4KKyAgc3dpdGNoIChpbml0X2RhdGFfdHlwZSkgeworICAgIGNhc2UgOjptZWRpYTo6RW1lSW5pdERhdGFUeXBlOjpVTktOT1dOOgorICAgICAgTE9HKFdBUk5JTkcpIDw8ICJVbmtub3duIEVNRSBpbml0aWFsaXphdGlvbiBkYXRhIHR5cGUuIjsKKyAgICAgIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkKCIiLCBpbml0X2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA6Om1lZGlhOjpFbWVJbml0RGF0YVR5cGU6OldFQk06CisgICAgICBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZCgid2VibSIsIGluaXRfZGF0YSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDo6bWVkaWE6OkVtZUluaXREYXRhVHlwZTo6Q0VOQzoKKyAgICAgIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkKCJjZW5jIiwgaW5pdF9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgOjptZWRpYTo6RW1lSW5pdERhdGFUeXBlOjpLRVlJRFM6CisgICAgICBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZCgia2V5aWRzIiwgaW5pdF9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBOT1RSRUFDSEVEKCk7CisgICAgICBicmVhazsKKyAgfQorfQorCiBXZWJNZWRpYVBsYXllckNsaWVudCogV2ViTWVkaWFQbGF5ZXJJbXBsOjpHZXRDbGllbnQoKSB7CiAgIERDSEVDS19FUShtYWluX2xvb3BfLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKICAgRENIRUNLKGNsaWVudF8pOwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyX2ltcGwuaCBiL2NvYmFsdC9tZWRpYS9wbGF5ZXIvd2ViX21lZGlhX3BsYXllcl9pbXBsLmgKaW5kZXggODcwN2Q2NC4uMDlmZmE2YyAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyX2ltcGwuaAorKysgYi9jb2JhbHQvbWVkaWEvcGxheWVyL3dlYl9tZWRpYV9wbGF5ZXJfaW1wbC5oCkBAIC01OSwxNCArNTksMTMgQEAKICNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWQuaCIKICNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbWVfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvcGlwZWxpbmUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9yYW5nZXMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb19mcmFtZV9wcm92aWRlci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9wbGF5ZXIvd2ViX21lZGlhX3BsYXllci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9wbGF5ZXIvd2ViX21lZGlhX3BsYXllcl9kZWxlZ2F0ZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZW1lX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCiAjaW5jbHVkZSAidXJsL2d1cmwuaCIKIAogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQpAQCAtNzksOCArNzgsNiBAQAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewogCi1jbGFzcyBDaHVua0RlbXV4ZXI7Ci1jbGFzcyBNZWRpYUxvZzsKIGNsYXNzIFdlYk1lZGlhUGxheWVyUHJveHk7CiAKIGNsYXNzIFdlYk1lZGlhUGxheWVySW1wbCA6IHB1YmxpYyBXZWJNZWRpYVBsYXllciwKQEAgLTExMCw5ICsxMDcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfZnVuYywKICAgICAgICAgICAgICAgICAgICAgIFdlYk1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnQsCiAgICAgICAgICAgICAgICAgICAgICBXZWJNZWRpYVBsYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSwKLSAgICAgICAgICAgICAgICAgICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKTsKKyAgICAgICAgICAgICAgICAgICAgIDo6bWVkaWE6Ok1lZGlhTG9nKiBjb25zdCBtZWRpYV9sb2cpOwogICB+V2ViTWVkaWFQbGF5ZXJJbXBsKCkgb3ZlcnJpZGU7CiAKICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQpAQCAtMTM1LDcgKzEzMSw3IEBACiAgIHZvaWQgU2V0UmF0ZShmbG9hdCByYXRlKSBvdmVycmlkZTsKICAgdm9pZCBTZXRWb2x1bWUoZmxvYXQgdm9sdW1lKSBvdmVycmlkZTsKICAgdm9pZCBTZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkgb3ZlcnJpZGU7Ci0gIGNvbnN0IFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+JiBHZXRCdWZmZXJlZFRpbWVSYW5nZXMoKSBvdmVycmlkZTsKKyAgdm9pZCBVcGRhdGVCdWZmZXJlZFRpbWVSYW5nZXMoY29uc3QgQWRkUmFuZ2VDQiYgYWRkX3JhbmdlX2NiKSBvdmVycmlkZTsKICAgZmxvYXQgR2V0TWF4VGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgLy8gU3VzcGVuZC9SZXN1bWUKQEAgLTE0OSw3ICsxNDUsOCBAQAogICBib29sIEhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgLy8gRGltZW5zaW9ucyBvZiB0aGUgdmlkZW8uCi0gIG1hdGg6OlNpemUgR2V0TmF0dXJhbFNpemUoKSBjb25zdCBvdmVycmlkZTsKKyAgaW50IEdldE5hdHVyYWxXaWR0aCgpIGNvbnN0IG92ZXJyaWRlOworICBpbnQgR2V0TmF0dXJhbEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgIC8vIEdldHRlcnMgb2YgcGxheWJhY2sgc3RhdGUuCiAgIGJvb2wgSXNQYXVzZWQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE5NCwxMCArMTkxLDExIEBACiAgIHZvaWQgU2V0RHJtU3lzdGVtKGNvbnN0IHNjb3BlZF9yZWZwdHI8bWVkaWE6OkRybVN5c3RlbT4mIGRybV9zeXN0ZW0pIG92ZXJyaWRlOwogICB2b2lkIFNldERybVN5c3RlbVJlYWR5Q0IoY29uc3QgRHJtU3lzdGVtUmVhZHlDQiYgZHJtX3N5c3RlbV9yZWFkeV9jYik7CiAKLSAgdm9pZCBPblBpcGVsaW5lU2VlayhQaXBlbGluZVN0YXR1cyBzdGF0dXMsIGJvb2wgaXNfaW5pdGlhbF9wcmVyb2xsLAorICB2b2lkIE9uUGlwZWxpbmVTZWVrKDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIHN0YXR1cywgYm9vbCBpc19pbml0aWFsX3ByZXJvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yX21lc3NhZ2UpOwotICB2b2lkIE9uUGlwZWxpbmVFbmRlZChQaXBlbGluZVN0YXR1cyBzdGF0dXMpOwotICB2b2lkIE9uUGlwZWxpbmVFcnJvcihQaXBlbGluZVN0YXR1cyBlcnJvciwgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOworICB2b2lkIE9uUGlwZWxpbmVFbmRlZCg6Om1lZGlhOjpQaXBlbGluZVN0YXR1cyBzdGF0dXMpOworICB2b2lkIE9uUGlwZWxpbmVFcnJvcig6Om1lZGlhOjpQaXBlbGluZVN0YXR1cyBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOwogICB2b2lkIE9uUGlwZWxpbmVCdWZmZXJpbmdTdGF0ZShQaXBlbGluZTo6QnVmZmVyaW5nU3RhdGUgYnVmZmVyaW5nX3N0YXRlKTsKICAgdm9pZCBPbkRlbXV4ZXJPcGVuZWQoKTsKICAgdm9pZCBTZXRPcGFxdWUoYm9vbCk7CkBAIC0yMTAsNyArMjA4LDcgQEAKICNpZiBTQl9IQVMoUExBWUVSX1dJVEhfVVJMKQogICB2b2lkIFN0YXJ0UGlwZWxpbmUoY29uc3QgR1VSTCYgdXJsKTsKICNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9XSVRIX1VSTCkKLSAgdm9pZCBTdGFydFBpcGVsaW5lKERlbXV4ZXIqIGRlbXV4ZXIpOworICB2b2lkIFN0YXJ0UGlwZWxpbmUoOjptZWRpYTo6RGVtdXhlciogZGVtdXhlcik7CiAKICAgLy8gSGVscGVycyB0aGF0IHNldCB0aGUgbmV0d29yay9yZWFkeSBzdGF0ZSBhbmQgbm90aWZpZXMgdGhlIGNsaWVudCBpZgogICAvLyB0aGV5J3ZlIGNoYW5nZWQuCkBAIC0yMjMsMTEgKzIyMSwxMSBAQAogCiAgIHZvaWQgR2V0TWVkaWFUaW1lQW5kU2Vla2luZ1N0YXRlKGJhc2U6OlRpbWVEZWx0YSogbWVkaWFfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfc2Vla2luZykgY29uc3Q7Ci0gIHZvaWQgT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQoCi0gICAgICBFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpOwogICB2b2lkIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YUVuY291bnRlcmVkV3JhcHBlcigKLSAgICAgIGNvbnN0IGNoYXIqIGluaXRfZGF0YV90eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBpbml0X2RhdGEsCi0gICAgICB1bnNpZ25lZCBpbnQgaW5pdF9kYXRhX2xlbmd0aCk7CisgICAgICA6Om1lZGlhOjpFbWVJbml0RGF0YVR5cGUgaW5pdF9kYXRhX3R5cGUsCisgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdF9kYXRhKTsKKyAgdm9pZCBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGFFbmNvdW50ZXJlZCgKKyAgICAgIGNvbnN0IGNoYXIqIGluaXRfZGF0YV90eXBlLCBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgaW5pdF9kYXRhKTsKIAogICAvLyBHZXR0ZXIgbWV0aG9kIHRvIHxjbGllbnRffC4KICAgV2ViTWVkaWFQbGF5ZXJDbGllbnQqIEdldENsaWVudCgpOwpAQCAtMjQ0LDkgKzI0Miw2IEBACiAgIE5ldHdvcmtTdGF0ZSBuZXR3b3JrX3N0YXRlXzsKICAgUmVhZHlTdGF0ZSByZWFkeV9zdGF0ZV87CiAKLSAgLy8gS2VlcCBhIGxpc3Qgb2YgYnVmZmVyZWQgdGltZSByYW5nZXMuCi0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IGJ1ZmZlcmVkXzsKLQogICAvLyBNZXNzYWdlIGxvb3BzIGZvciBwb3N0aW5nIHRhc2tzIGJldHdlZW4gQ2hyb21lJ3MgbWFpbiB0aHJlYWQuIEFsc28gdXNlZAogICAvLyBmb3IgRENIRUNLcyBzbyBtZXRob2RzIGNhbGxzIHdvbid0IGV4ZWN1dGUgaW4gdGhlIHdyb25nIHRocmVhZC4KICAgYmFzZTo6TWVzc2FnZUxvb3AqIG1haW5fbG9vcF87CkBAIC0zMDAsMjEgKzI5NSwyMCBAQAogCiAgIFdlYk1lZGlhUGxheWVyQ2xpZW50KiBjbGllbnRfOwogICBXZWJNZWRpYVBsYXllckRlbGVnYXRlKiBkZWxlZ2F0ZV87Ci0gIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvcl87CiAgIGJvb2wgYWxsb3dfcmVzdW1lX2FmdGVyX3N1c3BlbmRfOwogICBzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWVQcm92aWRlcj4gdmlkZW9fZnJhbWVfcHJvdmlkZXJfOwogCiAgIHNjb3BlZF9yZWZwdHI8V2ViTWVkaWFQbGF5ZXJQcm94eT4gcHJveHlfOwogCi0gIHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+IG1lZGlhX2xvZ187CisgIDo6bWVkaWE6Ok1lZGlhTG9nKiBjb25zdCBtZWRpYV9sb2dfOwogCiAgIGJvb2wgaW5jcmVtZW50ZWRfZXh0ZXJuYWxseV9hbGxvY2F0ZWRfbWVtb3J5XzsKIAogICBib29sIGlzX2xvY2FsX3NvdXJjZV87CiAgIGJvb2wgc3VwcG9ydHNfc2F2ZV87CiAKLSAgc3RkOjp1bmlxdWVfcHRyPERlbXV4ZXI+IHByb2dyZXNzaXZlX2RlbXV4ZXJfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2h1bmtEZW11eGVyPiBjaHVua19kZW11eGVyXzsKKyAgc3RkOjp1bmlxdWVfcHRyPDo6bWVkaWE6OkRlbXV4ZXI+IHByb2dyZXNzaXZlX2RlbXV4ZXJfOworICBzdGQ6OnVuaXF1ZV9wdHI8OjptZWRpYTo6Q2h1bmtEZW11eGVyPiBjaHVua19kZW11eGVyXzsKIAogICAvLyBTdXBwcmVzc2VzIGNhbGxzIHRvIE9uUGlwZWxpbmVFcnJvcigpIGFmdGVyIGRlc3RydWN0aW9uIC8gc2h1dGRvd24gaGFzIGJlZW4KICAgLy8gc3RhcnRlZDsgcHJldmVudHMgdXMgZnJvbSBzcHVyaW91c2x5IGxvZ2dpbmcgZXJyb3JzIHRoYXQgYXJlIHRyYW5zaWVudCBvcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19hY2Nlc3NfdW5pdC5jYyBiL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9hdmNfYWNjZXNzX3VuaXQuY2MKaW5kZXggMjVhZDI0ZS4uNmU2NDY4YiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19hY2Nlc3NfdW5pdC5jYworKysgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX2FjY2Vzc191bml0LmNjCkBAIC0xNiwxNiArMTYsMTkgQEAKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZW5kaWFuX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX3BhcnNlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewogCiBuYW1lc3BhY2UgewogCit1c2luZyA6Om1lZGlhOjpEZWNvZGVyQnVmZmVyOwordXNpbmcgOjptZWRpYTo6RGVtdXhlclN0cmVhbTsKKwogYm9vbCBSZWFkQnl0ZXModWludDY0IG9mZnNldCwgc2l6ZV90IHNpemUsIHVpbnQ4KiBidWZmZXIsCiAgICAgICAgICAgICAgICBEYXRhU291cmNlUmVhZGVyKiByZWFkZXIpIHsKICAgaWYgKHJlYWRlci0+QmxvY2tpbmdSZWFkKG9mZnNldCwgc2l6ZSwgYnVmZmVyKSAhPSBzaXplKSB7CkBAIC0zNSw0NCArMzgsMTQgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVhZEJ5dGVzKHVpbnQ2NCBvZmZzZXQsIHNpemVfdCBzaXplLCBEZWNvZGVyQnVmZmVyKiBkZWNvZGVyX2J1ZmZlciwKLSAgICAgICAgICAgICAgIHVpbnQ2NCBkZWNvZGVyX2J1ZmZlcl9vZmZzZXQsIERhdGFTb3VyY2VSZWFkZXIqIHJlYWRlcikgewotICBzaXplX3QgYnVmZmVyX2luZGV4ID0gMDsKLSAgYXV0byYgYWxsb2NhdGlvbnMgPSBkZWNvZGVyX2J1ZmZlci0+YWxsb2NhdGlvbnMoKTsKLSAgd2hpbGUgKHNpemUgPiAwKSB7Ci0gICAgaWYgKGJ1ZmZlcl9pbmRleCA+PSBhbGxvY2F0aW9ucy5udW1iZXJfb2ZfYnVmZmVycygpKSB7Ci0gICAgICBOT1RSRUFDSEVEKCk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IGFsbG9jYXRpb25zLmJ1ZmZlcl9zaXplcygpW2J1ZmZlcl9pbmRleF07Ci0gICAgaWYgKGJ1ZmZlcl9zaXplIDw9IGRlY29kZXJfYnVmZmVyX29mZnNldCkgewotICAgICAgZGVjb2Rlcl9idWZmZXJfb2Zmc2V0IC09IGJ1ZmZlcl9zaXplOwotICAgIH0gZWxzZSB7Ci0gICAgICBzaXplX3QgYnl0ZXNfdG9fcmVhZCA9IHN0ZDo6bWluKAotICAgICAgICAgIHNpemUsIGJ1ZmZlcl9zaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90PihkZWNvZGVyX2J1ZmZlcl9vZmZzZXQpKTsKLSAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0KLSAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYWxsb2NhdGlvbnMuYnVmZmVycygpW2J1ZmZlcl9pbmRleF0pOwotICAgICAgaWYgKHJlYWRlci0+QmxvY2tpbmdSZWFkKG9mZnNldCwgYnl0ZXNfdG9fcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiArIGRlY29kZXJfYnVmZmVyX29mZnNldCkgIT0KLSAgICAgICAgICBieXRlc190b19yZWFkKSB7Ci0gICAgICAgIERMT0coRVJST1IpIDw8ICJ1bmFibGUgdG8gZG93bmxvYWQgQVUiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBkZWNvZGVyX2J1ZmZlcl9vZmZzZXQgPSAwOwotICAgICAgc2l6ZSAtPSBieXRlc190b19yZWFkOwotICAgIH0KLSAgICArK2J1ZmZlcl9pbmRleDsKLSAgfQotCi0gIHJldHVybiB0cnVlOwotfQotCiAvLyA9PT09IEVuZE9mU3RyZWFtQVUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogY2xhc3MgRW5kT2ZTdHJlYW1BVSA6IHB1YmxpYyBBdmNBY2Nlc3NVbml0IHsKICBwdWJsaWM6CiAgIEVuZE9mU3RyZWFtQVUoVHlwZSB0eXBlLCBUaW1lRGVsdGEgdGltZXN0YW1wKQotICAgICAgOiB0eXBlXyh0eXBlKSwgdGltZXN0YW1wXyh0aW1lc3RhbXApLCBkdXJhdGlvbl8oa0luZmluaXRlRHVyYXRpb24pIHt9CisgICAgICA6IHR5cGVfKHR5cGUpLAorICAgICAgICB0aW1lc3RhbXBfKHRpbWVzdGFtcCksCisgICAgICAgIGR1cmF0aW9uXyg6Om1lZGlhOjprSW5maW5pdGVEdXJhdGlvbikge30KIAogIHByaXZhdGU6CiAgIGJvb2wgSXNFbmRPZlN0cmVhbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KQEAgLTExMiw3ICs4NSw3IEBACiAgcHJpdmF0ZToKICAgYm9vbCBJc0VuZE9mU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBJc1ZhbGlkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBvZmZzZXRfICE9IDAgJiYgc2l6ZV8gIT0gMCAmJiB0aW1lc3RhbXBfICE9IGtOb1RpbWVzdGFtcDsKKyAgICByZXR1cm4gb2Zmc2V0XyAhPSAwICYmIHNpemVfICE9IDAgJiYgdGltZXN0YW1wXyAhPSA6Om1lZGlhOjprTm9UaW1lc3RhbXA7CiAgIH0KICAgYm9vbCBSZWFkKERhdGFTb3VyY2VSZWFkZXIqIHJlYWRlciwgRGVjb2RlckJ1ZmZlciogYnVmZmVyKSBvdmVycmlkZTsKICAgVHlwZSBHZXRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRGVtdXhlclN0cmVhbTo6QVVESU87IH0KQEAgLTE0Nyw3ICsxMjAsOSBAQAogCiBib29sIEF1ZGlvQVU6OlJlYWQoRGF0YVNvdXJjZVJlYWRlciogcmVhZGVyLCBEZWNvZGVyQnVmZmVyKiBidWZmZXIpIHsKICAgRENIRUNLX0xFKHNpemVfICsgcHJlcGVuZF9zaXplXywgYnVmZmVyLT5kYXRhX3NpemUoKSk7Ci0gIGlmICghUmVhZEJ5dGVzKG9mZnNldF8sIHNpemVfLCBidWZmZXIsIHByZXBlbmRfc2l6ZV8sIHJlYWRlcikpIHJldHVybiBmYWxzZTsKKyAgaWYgKCFSZWFkQnl0ZXMob2Zmc2V0Xywgc2l6ZV8sIGJ1ZmZlci0+d3JpdGFibGVfZGF0YSgpICsgcHJlcGVuZF9zaXplXywKKyAgICAgICAgICAgICAgICAgcmVhZGVyKSkKKyAgICByZXR1cm4gZmFsc2U7CiAKICAgaWYgKCFwYXJzZXJfLT5QcmVwZW5kKHRoaXMsIGJ1ZmZlcikpIHsKICAgICBETE9HKEVSUk9SKSA8PCAicHJlcGVuZCBmYWlsIjsKQEAgLTE2OCw3ICsxNDMsNyBAQAogIHByaXZhdGU6CiAgIGJvb2wgSXNFbmRPZlN0cmVhbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgSXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gb2Zmc2V0XyAhPSAwICYmIHNpemVfICE9IDAgJiYgdGltZXN0YW1wXyAhPSBrTm9UaW1lc3RhbXA7CisgICAgcmV0dXJuIG9mZnNldF8gIT0gMCAmJiBzaXplXyAhPSAwICYmIHRpbWVzdGFtcF8gIT0gOjptZWRpYTo6a05vVGltZXN0YW1wOwogICB9CiAgIGJvb2wgUmVhZChEYXRhU291cmNlUmVhZGVyKiByZWFkZXIsIERlY29kZXJCdWZmZXIqIGJ1ZmZlcikgb3ZlcnJpZGU7CiAgIFR5cGUgR2V0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIERlbXV4ZXJTdHJlYW06OlZJREVPOyB9CkBAIC0yMjYsOCArMjAxLDggQEAKICAgICB1aW50MzIgbmFsX3NpemU7CiAKICAgICAvLyBTdG9yZSBbc3RhcnQgY29kZV0KLSAgICBidWZmZXItPmFsbG9jYXRpb25zKCkuV3JpdGUoZGVjb2Rlcl9idWZmZXJfb2Zmc2V0LCBrQW5uZXhCU3RhcnRDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQW5uZXhCU3RhcnRDb2RlU2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+d3JpdGFibGVfZGF0YSgpICsgZGVjb2Rlcl9idWZmZXJfb2Zmc2V0LCBrQW5uZXhCU3RhcnRDb2RlLAorICAgICAgICAgICBrQW5uZXhCU3RhcnRDb2RlU2l6ZSk7CiAgICAgZGVjb2Rlcl9idWZmZXJfb2Zmc2V0ICs9IGtBbm5leEJTdGFydENvZGVTaXplOwogICAgIGJ1Zl9sZWZ0IC09IGtBbm5leEJTdGFydENvZGVTaXplOwogCkBAIC0yNTAsOCArMjI1LDggQEAKICAgICBpZiAoYXVfbGVmdCA8IG5hbF9zaXplIHx8IGJ1Zl9sZWZ0IDwgbmFsX3NpemUpIGJyZWFrOwogCiAgICAgLy8gUmVhZCB0aGUgW2RhdGFdIGZyb20gcmVhZGVyIGludG8gYnVmCi0gICAgaWYgKCFSZWFkQnl0ZXMoYXVfb2Zmc2V0LCBuYWxfc2l6ZSwgYnVmZmVyLCBkZWNvZGVyX2J1ZmZlcl9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgcmVhZGVyKSkgeworICAgIGlmICghUmVhZEJ5dGVzKGF1X29mZnNldCwgbmFsX3NpemUsCisgICAgICAgICAgICAgICAgICAgYnVmZmVyLT53cml0YWJsZV9kYXRhKCkgKyBkZWNvZGVyX2J1ZmZlcl9vZmZzZXQsIHJlYWRlcikpIHsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9hdmNfYWNjZXNzX3VuaXQuaCBiL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9hdmNfYWNjZXNzX3VuaXQuaAppbmRleCA3YzI4M2U5Li5mZDQ5NTI3IDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX2FjY2Vzc191bml0LmgKKysrIGIvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19hY2Nlc3NfdW5pdC5oCkBAIC0xMiwxMiArMTIsMTIgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaWZuZGVmIENPQkFMVF9NRURJQV9QUk9HUkVTU0lWRV9BQ0NFU1NfVU5JVF9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfQUNDRVNTX1VOSVRfSF8KKyNpZm5kZWYgQ09CQUxUX01FRElBX1BST0dSRVNTSVZFX0FWQ19BQ0NFU1NfVU5JVF9IXworI2RlZmluZSBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfQVZDX0FDQ0VTU19VTklUX0hfCiAKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2RhdGFfc291cmNlX3JlYWRlci5oIgorI2luY2x1ZGUgIm1lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewpAQCAtMzMsNyArMzMsNyBAQAogY2xhc3MgQXZjQWNjZXNzVW5pdCA6IHB1YmxpYyBiYXNlOjpSZWZDb3VudGVkVGhyZWFkU2FmZTxBdmNBY2Nlc3NVbml0PiB7CiAgcHVibGljOgogICB0eXBlZGVmIGJhc2U6OlRpbWVEZWx0YSBUaW1lRGVsdGE7Ci0gIHR5cGVkZWYgRGVtdXhlclN0cmVhbTo6VHlwZSBUeXBlOworICB0eXBlZGVmIDo6bWVkaWE6OkRlbXV4ZXJTdHJlYW06OlR5cGUgVHlwZTsKIAogICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxBdmNBY2Nlc3NVbml0PiBDcmVhdGVFbmRPZlN0cmVhbUFVKFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lRGVsdGEgdGltZXN0YW1wKTsKQEAgLTQ5LDcgKzQ5LDggQEAKICAgdmlydHVhbCBib29sIElzVmFsaWQoKSBjb25zdCA9IDA7CiAgIC8vIFJlYWQgYW4gQVUgZnJvbSByZWFkZXIgdG8gYnVmZmVyIGFuZCBhbHNvIGRvIGFsbCB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbnMKICAgLy8gbGlrZSBwcmVwZW5kaW5nIGhlYWQgdG8gbWFrZSBpdCByZWFkeSB0byBkZWNvZGUuCi0gIHZpcnR1YWwgYm9vbCBSZWFkKERhdGFTb3VyY2VSZWFkZXIqIHJlYWRlciwgRGVjb2RlckJ1ZmZlciogYnVmZmVyKSA9IDA7CisgIHZpcnR1YWwgYm9vbCBSZWFkKERhdGFTb3VyY2VSZWFkZXIqIHJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgOjptZWRpYTo6RGVjb2RlckJ1ZmZlciogYnVmZmVyKSA9IDA7CiAgIHZpcnR1YWwgVHlwZSBHZXRUeXBlKCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIGJvb2wgSXNLZXlmcmFtZSgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCBib29sIEFkZFByZXBlbmQoKSBjb25zdCA9IDA7CkBAIC03Miw0ICs3Myw0IEBACiB9ICAvLyBuYW1lc3BhY2UgbWVkaWEKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKIAotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfQUNDRVNTX1VOSVRfSF8KKyNlbmRpZiAgLy8gQ09CQUxUX01FRElBX1BST0dSRVNTSVZFX0FWQ19BQ0NFU1NfVU5JVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX3BhcnNlci5jYwppbmRleCBmNzgxODY2Li5mOWRjYzBiIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX3BhcnNlci5jYworKysgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX3BhcnNlci5jYwpAQCAtMTksMTQgKzE5LDE5IEBACiAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5ncHJpbnRmLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9lbmRpYW5fdXRpbC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9mb3JtYXRzL21wNC9hYWMuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX2FjY2Vzc191bml0LmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Jic3Bfc3RyZWFtLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYXVkaW9fY29kZWNzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX3V0aWwuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvdmlkZW9fY29sb3Jfc3BhY2UuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3ZpZGVvX3RyYW5zZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS92aWRlb190eXBlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Zvcm1hdHMvbXA0L2FhYy5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC0zNyw3ICs0Miw3IEBACiBzdGF0aWMgY29uc3QgdWludDgga1NQU05BTFR5cGUgPSA3OwogCiBBVkNQYXJzZXI6OkFWQ1BhcnNlcihzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpCisgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKQogICAgIDogUHJvZ3Jlc3NpdmVQYXJzZXIocmVhZGVyKSwKICAgICAgIG1lZGlhX2xvZ18obWVkaWFfbG9nKSwKICAgICAgIG5hbF9oZWFkZXJfc2l6ZV8oMCksCkBAIC02MCw3ICs2NSw3IEBACiAgICAgICAgIE5PVFJFQUNIRUQoKSA8PCAiZW1wdHkvdW5kZXJzaXplZCBidWZmZXIgdG8gUHJlcGVuZCgpIjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAgICAgYnVmZmVyLT5hbGxvY2F0aW9ucygpLldyaXRlKDAsIHZpZGVvX3ByZXBlbmRfLCB2aWRlb19wcmVwZW5kX3NpemVfKTsKKyAgICAgIG1lbWNweShidWZmZXItPndyaXRhYmxlX2RhdGEoKSwgdmlkZW9fcHJlcGVuZF8sIHZpZGVvX3ByZXBlbmRfc2l6ZV8pOwogICAgIH0KICAgfSBlbHNlIGlmIChhdS0+R2V0VHlwZSgpID09IERlbXV4ZXJTdHJlYW06OkFVRElPKSB7CiAgICAgaWYgKGF1ZGlvX3ByZXBlbmRfLnNpemUoKSA8IDYpIHsKQEAgLTg0LDcgKzg5LDcgQEAKICAgICBhdWRpb19wcmVwZW5kWzRdID0gKHVpbnQ4KSgoYnVmZmVyX3NpemUgJiAweDAwMDAwN2Y4KSA+PiAzKTsKICAgICAvLyBieXRlIDUgZ2V0cyBiaXRzIDItMCBvZiBzaXplCiAgICAgYXVkaW9fcHJlcGVuZFs1XSB8PSAodWludDgpKChidWZmZXJfc2l6ZSAmIDB4MDAwMDAwMDcpIDw8IDUpOwotICAgIGJ1ZmZlci0+YWxsb2NhdGlvbnMoKS5Xcml0ZSgwLCBhdWRpb19wcmVwZW5kLmRhdGEoKSwgYXVkaW9fcHJlcGVuZC5zaXplKCkpOworICAgIG1lbWNweShidWZmZXItPndyaXRhYmxlX2RhdGEoKSwgYXVkaW9fcHJlcGVuZC5kYXRhKCksIGF1ZGlvX3ByZXBlbmQuc2l6ZSgpKTsKICAgfSBlbHNlIHsKICAgICBOT1RSRUFDSEVEKCkgPDwgInVuc3VwcG9ydGVkIGRlbXV4ZXIgc3RyZWFtIHR5cGUuIjsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODUsMTAgKzI5MCwxMCBAQAogICAvLyBjaGVja3Mgb3V0LCB3cml0ZSBvdXRwdXQgc3RydWN0dXJlCiAgIGludCB2aXNpYmxlX3dpZHRoID0gd2lkdGggLSAoY3JvcF9sZWZ0ICsgY3JvcF9yaWdodCk7CiAgIGludCB2aXNpYmxlX2hlaWdodCA9IGhlaWdodCAtIChjcm9wX3RvcCArIGNyb3BfYm90dG9tKTsKLSAgcmVjb3JkX291dC0+Y29kZWRfc2l6ZSA9IG1hdGg6OlNpemUod2lkdGgsIGhlaWdodCksCisgIHJlY29yZF9vdXQtPmNvZGVkX3NpemUgPSBnZng6OlNpemUod2lkdGgsIGhlaWdodCksCiAgIHJlY29yZF9vdXQtPnZpc2libGVfcmVjdCA9Ci0gICAgICBtYXRoOjpSZWN0KGNyb3BfbGVmdCwgY3JvcF90b3AsIHZpc2libGVfd2lkdGgsIHZpc2libGVfaGVpZ2h0KSwKLSAgcmVjb3JkX291dC0+bmF0dXJhbF9zaXplID0gbWF0aDo6U2l6ZSh2aXNpYmxlX3dpZHRoLCB2aXNpYmxlX2hlaWdodCk7CisgICAgICBnZng6OlJlY3QoY3JvcF9sZWZ0LCBjcm9wX3RvcCwgdmlzaWJsZV93aWR0aCwgdmlzaWJsZV9oZWlnaHQpLAorICByZWNvcmRfb3V0LT5uYXR1cmFsX3NpemUgPSBnZng6OlNpemUodmlzaWJsZV93aWR0aCwgdmlzaWJsZV9oZWlnaHQpOwogICByZWNvcmRfb3V0LT5udW1fcmVmX2ZyYW1lcyA9IG51bV9yZWZfZnJhbWVzOwogICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5NywxMiArNDAyLDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIC8vIHdlIGNhbiBub3cgaW5pdGlhbGl6ZSBvdXIgdmlkZW8gZGVjb2RlciBjb25maWcKLSAgdmlkZW9fY29uZmlnXy5Jbml0aWFsaXplKGtDb2RlY0gyNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBIMjY0UFJPRklMRV9NQUlOLCAgLy8gcHJvZmlsZSBpcyBpZ25vcmVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUElYRUxfRk9STUFUX1lWMTIsIENPTE9SX1NQQUNFX0hEX1JFQzcwOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwc19yZWNvcmQuY29kZWRfc2l6ZSwgc3BzX3JlY29yZC52aXNpYmxlX3JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzcHNfcmVjb3JkLm5hdHVyYWxfc2l6ZSwgRW1wdHlFeHRyYURhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuZW5jcnlwdGVkKCkpOworICB2aWRlb19jb25maWdfLkluaXRpYWxpemUoCisgICAgICA6Om1lZGlhOjpWaWRlb0NvZGVjOjprSDI2NCwKKyAgICAgIC8vIHByb2ZpbGUgaXMgaWdub3JlZCBjdXJyZW50bHkKKyAgICAgIDo6bWVkaWE6OlZpZGVvQ29kZWNQcm9maWxlOjpIMjY0UFJPRklMRV9NQUlOLAorICAgICAgOjptZWRpYTo6VmlkZW9EZWNvZGVyQ29uZmlnOjpBbHBoYU1vZGU6OmtJc09wYXF1ZSwKKyAgICAgIDo6bWVkaWE6OlZpZGVvQ29sb3JTcGFjZTo6UkVDNzA5KCksIDo6bWVkaWE6OlZpZGVvVHJhbnNmb3JtYXRpb24oKSwKKyAgICAgIHNwc19yZWNvcmQuY29kZWRfc2l6ZSwgc3BzX3JlY29yZC52aXNpYmxlX3JlY3QsIHNwc19yZWNvcmQubmF0dXJhbF9zaXplLAorICAgICAgOjptZWRpYTo6RW1wdHlFeHRyYURhdGEoKSwgOjptZWRpYTo6RW5jcnlwdGlvblNjaGVtZTo6a1VuZW5jcnlwdGVkKTsKIAogICByZXR1cm4gQnVpbGRBbm5leEJQcmVwZW5kKGJ1ZmZlciArIHVzYWJsZV9zcHNfb2Zmc2V0LCB1c2FibGVfc3BzX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICsgdXNhYmxlX3Bwc19vZmZzZXQsIHVzYWJsZV9wcHNfc2l6ZSk7CkBAIC00MzIsNyArNDM5LDcgQEAKICAgaWYgKHBwc19zaXplID4gMCkgewogICAgIC8vIHBwcyBzdGFydCBjb2RlIGNvbWVzIG5leHQKICAgICBtZW1jcHkodmlkZW9fcHJlcGVuZF8gKyBwcmVwZW5kX29mZnNldCwga0FubmV4QlN0YXJ0Q29kZSwKLSAgICAgICAgICAgICAgICAga0FubmV4QlN0YXJ0Q29kZVNpemUpOworICAgICAgICAgICBrQW5uZXhCU3RhcnRDb2RlU2l6ZSk7CiAgICAgcHJlcGVuZF9vZmZzZXQgKz0ga0FubmV4QlN0YXJ0Q29kZVNpemU7CiAgICAgLy8gZm9sbG93ZWQgYnkgcHBzCiAgICAgbWVtY3B5KHZpZGVvX3ByZXBlbmRfICsgcHJlcGVuZF9vZmZzZXQsIHBwcywgcHBzX3NpemUpOwpAQCAtNDQ1LDcgKzQ1Miw3IEBACiB9CiAKIHZvaWQgQVZDUGFyc2VyOjpQYXJzZUF1ZGlvU3BlY2lmaWNDb25maWcodWludDggYjAsIHVpbnQ4IGIxKSB7Ci0gIG1lZGlhOjptcDQ6OkFBQyBhYWM7CisgIDo6bWVkaWE6Om1wNDo6QUFDIGFhYzsKICAgc3RkOjp2ZWN0b3I8dWludDg+IGFhY19jb25maWcoMik7CiAKICAgYWFjX2NvbmZpZ1swXSA9IGIwOwpAQCAtNDY2LDkgKzQ3MywxMCBAQAogCiAgIGNvbnN0IGJvb2wga1NickluTWltZXR5cGUgPSBmYWxzZTsKICAgYXVkaW9fY29uZmlnXy5Jbml0aWFsaXplKAotICAgICAga0NvZGVjQUFDLCBrU2FtcGxlRm9ybWF0UzE2LCBhYWMuR2V0Q2hhbm5lbExheW91dChrU2JySW5NaW1ldHlwZSksCisgICAgICA6Om1lZGlhOjpBdWRpb0NvZGVjOjprQUFDLCA6Om1lZGlhOjprU2FtcGxlRm9ybWF0UzE2LAorICAgICAgYWFjLkdldENoYW5uZWxMYXlvdXQoa1NickluTWltZXR5cGUpLAogICAgICAgYWFjLkdldE91dHB1dFNhbXBsZXNQZXJTZWNvbmQoa1NickluTWltZXR5cGUpLCBhYWMuY29kZWNfc3BlY2lmaWNfZGF0YSgpLAotICAgICAgVW5lbmNyeXB0ZWQoKSwgYmFzZTo6VGltZURlbHRhKCksIDApOworICAgICAgOjptZWRpYTo6RW5jcnlwdGlvblNjaGVtZTo6a1VuZW5jcnlwdGVkLCBiYXNlOjpUaW1lRGVsdGEoKSwgMCk7CiB9CiAKIHNpemVfdCBBVkNQYXJzZXI6OkNhbGN1bGF0ZVByZXBlbmRTaXplKERlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9hdmNfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX3BhcnNlci5oCmluZGV4IGUzODNiZGYuLmIyMDNkYzcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9hdmNfcGFyc2VyLmgKKysrIGIvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19wYXJzZXIuaApAQCAtMTcsOCArMTcsMTAgQEAKIAogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcmVjdC5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC0zMywxNCArMzUsMTggQEAKIC8vIFByb2dyZXNzaXZlUGFyc2VyIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3QgZm9yIGl0cyBjaGlsZHJlbi4KIGNsYXNzIEFWQ1BhcnNlciA6IHB1YmxpYyBQcm9ncmVzc2l2ZVBhcnNlciB7CiAgcHVibGljOgorICB0eXBlZGVmIDo6bWVkaWE6OkRlY29kZXJCdWZmZXIgRGVjb2RlckJ1ZmZlcjsKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZW11eGVyU3RyZWFtIERlbXV4ZXJTdHJlYW07CisgIHR5cGVkZWYgOjptZWRpYTo6TWVkaWFMb2cgTWVkaWFMb2c7CisKICAgZXhwbGljaXQgQVZDUGFyc2VyKHNjb3BlZF9yZWZwdHI8RGF0YVNvdXJjZVJlYWRlcj4gcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7CisgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKTsKICAgdmlydHVhbCB+QVZDUGFyc2VyKCk7CiAKICAgc3RydWN0IFNQU1JlY29yZCB7Ci0gICAgbWF0aDo6U2l6ZSBjb2RlZF9zaXplOwotICAgIG1hdGg6OlJlY3QgdmlzaWJsZV9yZWN0OwotICAgIG1hdGg6OlNpemUgbmF0dXJhbF9zaXplOworICAgIGdmeDo6U2l6ZSBjb2RlZF9zaXplOworICAgIGdmeDo6UmVjdCB2aXNpYmxlX3JlY3Q7CisgICAgZ2Z4OjpTaXplIG5hdHVyYWxfc2l6ZTsKICAgICB1aW50MzIgbnVtX3JlZl9mcmFtZXM7CiAgIH07CiAgIHN0YXRpYyBib29sIFBhcnNlU1BTKGNvbnN0IHVpbnQ4KiBzcHMsIHNpemVfdCBzcHNfc2l6ZSwKQEAgLTYyLDcgKzY4LDcgQEAKICAgdmlydHVhbCBzaXplX3QgQ2FsY3VsYXRlUHJlcGVuZFNpemUoRGVtdXhlclN0cmVhbTo6VHlwZSB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2tleWZyYW1lKTsKIAotICBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOworICBNZWRpYUxvZyogbWVkaWFfbG9nXzsKICAgdWludDggbmFsX2hlYWRlcl9zaXplXzsKICAgLy8gYXVkaW8gZnJhbWVzIGhhdmUgYSBmaXhlZC1zaXplIHNtYWxsIHByZXBlbmQgdGhhdCB3ZSBhdHRhY2ggdG8gZXZlcnkKICAgLy8gYXVkaW8gYnVmZmVyIGNyZWF0ZWQgYnkgRG93bmxvYWRCdWZmZXIoKQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL21wNF9wYXJzZXIuY2MgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvbXA0X3BhcnNlci5jYwppbmRleCA5NTczOTVkLi4xMjNhMGIxIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvbXA0X3BhcnNlci5jYworKysgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvbXA0X3BhcnNlci5jYwpAQCAtMjAsOCArMjAsOCBAQAogCiAjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ3ByaW50Zi5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2VuZGlhbl91dGlsLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Zvcm1hdHMvbXA0L2VzX2Rlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9mb3JtYXRzL21wNC9lc19kZXNjcmlwdG9yLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTY3LDEwICs2Nyw5IEBACiBzdGF0aWMgY29uc3QgaW50IGtNYXBUYWJsZUF0b21DYWNoZUVudHJpZXNfY3R0cyA9IDUxNTQzIC8ga0VudHJ5U2l6ZV9jdHRzOwogCiAvLyBzdGF0aWMKLVBpcGVsaW5lU3RhdHVzIE1QNFBhcnNlcjo6Q29uc3RydWN0KHNjb3BlZF9yZWZwdHI8RGF0YVNvdXJjZVJlYWRlcj4gcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDgqIGNvbnN0cnVjdGlvbl9oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPFByb2dyZXNzaXZlUGFyc2VyPiogcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykgeworOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgTVA0UGFyc2VyOjpDb25zdHJ1Y3QoCisgICAgc2NvcGVkX3JlZnB0cjxEYXRhU291cmNlUmVhZGVyPiByZWFkZXIsIGNvbnN0IHVpbnQ4KiBjb25zdHJ1Y3Rpb25faGVhZGVyLAorICAgIHNjb3BlZF9yZWZwdHI8UHJvZ3Jlc3NpdmVQYXJzZXI+KiBwYXJzZXIsIE1lZGlhTG9nKiBtZWRpYV9sb2cpIHsKICAgRENIRUNLKHBhcnNlcik7CiAgIERDSEVDSyhtZWRpYV9sb2cpOwogICAqcGFyc2VyID0gTlVMTDsKQEAgLTc5LDI0ICs3OCwyMyBAQAogICB1aW50MzIgZnR5cCA9IGVuZGlhbl91dGlsOjpsb2FkX3VpbnQzMl9iaWdfZW5kaWFuKGNvbnN0cnVjdGlvbl9oZWFkZXIgKyA0KTsKICAgaWYgKGZ0eXAgIT0ga0F0b21UeXBlX2Z0eXApIHsKICAgICAvLyBub3QgYW4gbXA0Ci0gICAgcmV0dXJuIERFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFOworICAgIHJldHVybiA6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRTsKICAgfQogCiAgIC8vIGZpcnN0IDQgYnl0ZXMgd2lsbCBiZSB0aGUgc2l6ZSBvZiB0aGUgZnR5cCBhdG9tCiAgIHVpbnQzMiBmdHlwX2F0b21fc2l6ZSA9CiAgICAgICBlbmRpYW5fdXRpbDo6bG9hZF91aW50MzJfYmlnX2VuZGlhbihjb25zdHJ1Y3Rpb25faGVhZGVyKTsKICAgaWYgKGZ0eXBfYXRvbV9zaXplIDwga0F0b21NaW5TaXplKSB7Ci0gICAgcmV0dXJuIERFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFOworICAgIHJldHVybiA6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRTsKICAgfQogCiAgIC8vIGNvbnN0cnVjdCBuZXcgbXA0IHBhcnNlcgogICAqcGFyc2VyID0gbmV3IE1QNFBhcnNlcihyZWFkZXIsIGZ0eXBfYXRvbV9zaXplLCBtZWRpYV9sb2cpOwotICByZXR1cm4gUElQRUxJTkVfT0s7CisgIHJldHVybiA6Om1lZGlhOjpQSVBFTElORV9PSzsKIH0KIAogTVA0UGFyc2VyOjpNUDRQYXJzZXIoc2NvcGVkX3JlZnB0cjxEYXRhU291cmNlUmVhZGVyPiByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICB1aW50MzIgZnR5cF9hdG9tX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiYgbWVkaWFfbG9nKQorICAgICAgICAgICAgICAgICAgICAgdWludDMyIGZ0eXBfYXRvbV9zaXplLCBNZWRpYUxvZyogbWVkaWFfbG9nKQogICAgIDogQVZDUGFyc2VyKHJlYWRlciwgbWVkaWFfbG9nKSwKICAgICAgIGF0b21fb2Zmc2V0XyhmdHlwX2F0b21fc2l6ZSksICAvLyBzdGFydCBhdCBuZXh0IGF0b20sIHNraXBwaW5nIG92ZXIgZnR5cAogICAgICAgY3VycmVudF90cmFrX2lzX3ZpZGVvXyhmYWxzZSksCkBAIC00ODUsNyArNDgzLDcgQEAKICAgICBETE9HKFdBUk5JTkcpIDw8ICJmYWlsZWQgdG8gZG93bmxvYWQgZXNkcyI7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0gIG1wNDo6RVNEZXNjcmlwdG9yIGVzX2Rlc2NyaXB0b3I7CisgIDo6bWVkaWE6Om1wNDo6RVNEZXNjcmlwdG9yIGVzX2Rlc2NyaXB0b3I7CiAgIHN0ZDo6dmVjdG9yPHVpbnQ4PiBkYXRhKGVzZHMsIGVzZHMgKyBlc2RzX3NpemUpOwogICBpZiAoZXNfZGVzY3JpcHRvci5QYXJzZShkYXRhKSkgewogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4PiYgZHNpID0gZXNfZGVzY3JpcHRvci5kZWNvZGVyX3NwZWNpZmljX2luZm8oKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9tcDRfcGFyc2VyLmggYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvbXA0X3BhcnNlci5oCmluZGV4IDZkMGQ2MTcuLjQ5ZDZiZDcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9tcDRfcGFyc2VyLmgKKysrIGIvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL21wNF9wYXJzZXIuaApAQCAtMTUsOSArMTUsOSBAQAogI2lmbmRlZiBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfTVA0X1BBUlNFUl9IXwogI2RlZmluZSBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfTVA0X1BBUlNFUl9IXwogCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2F2Y19wYXJzZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvbXA0X21hcC5oIgorI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTY1LDEyICs2NSwxMSBAQAogICAvLyBmbHYsIGFuZCBpZiBpdCBkb2VzIG1ha2Ugc2Vuc2UgcmV0dXJucyBQSVBFTElORV9PSyBhbmQgfCpwYXJzZXJ8IGNvbnRhaW5zIGEKICAgLy8gTVA0UGFyc2VyIGluaXRpYWxpemVkIHdpdGggc29tZSBiYXNpYyBzdGF0ZS4gIElmIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZQogICAvLyB0aGlzIHJldHVybnMgYW4gZXJyb3Igc3RhdHVzIGFuZCB8KnBhcnNlcnwgY29udGFpbnMgTlVMTC4KLSAgc3RhdGljIFBpcGVsaW5lU3RhdHVzIENvbnN0cnVjdChzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OCogY29uc3RydWN0aW9uX2hlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPFByb2dyZXNzaXZlUGFyc2VyPiogcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOworICBzdGF0aWMgOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgQ29uc3RydWN0KAorICAgICAgc2NvcGVkX3JlZnB0cjxEYXRhU291cmNlUmVhZGVyPiByZWFkZXIsIGNvbnN0IHVpbnQ4KiBjb25zdHJ1Y3Rpb25faGVhZGVyLAorICAgICAgc2NvcGVkX3JlZnB0cjxQcm9ncmVzc2l2ZVBhcnNlcj4qIHBhcnNlciwgTWVkaWFMb2cqIG1lZGlhX2xvZyk7CiAgIE1QNFBhcnNlcihzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlciwgdWludDMyIGZ0eXBfYXRvbV9zaXplLAotICAgICAgICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZyk7CisgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKTsKICAgfk1QNFBhcnNlcigpIG92ZXJyaWRlOwogCiAgIC8vID09PSBQcm9ncmVzc2l2ZVBhcnNlciBpbXBsZW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX2RlbXV4ZXIuY2MgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5jYwppbmRleCAyNzU4N2NhLi4zNjc2OWNhIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5jYworKysgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5jYwpAQCAtMTYsNiArMTYsOCBAQAogCiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KIAorI2luY2x1ZGUgPHV0aWxpdHk+CisKICNpbmNsdWRlICJiYXNlL2JpbmQuaCIKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiYmFzZS9jYWxsYmFja19oZWxwZXJzLmgiCkBAIC0yNCwxNCArMjYsMjEgQEAKICNpbmNsdWRlICJiYXNlL3Rhc2tfcnVubmVyX3V0aWwuaCIKICNpbmNsdWRlICJiYXNlL3RpbWUvdGltZS5oIgogI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RhdGFfc291cmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2Uvc3RhcmJvYXJkX3V0aWxzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdGltZXN0YW1wX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgeworbmFtZXNwYWNlIHsKKwordXNpbmcgOjptZWRpYTo6QXVkaW9EZWNvZGVyQ29uZmlnOwordXNpbmcgOjptZWRpYTo6a05vVGltZXN0YW1wOwordXNpbmcgOjptZWRpYTo6VmlkZW9EZWNvZGVyQ29uZmlnOworCit9ICAvLyBuYW1lc3BhY2UKIAogUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpQcm9ncmVzc2l2ZURlbXV4ZXJTdHJlYW0oUHJvZ3Jlc3NpdmVEZW11eGVyKiBkZW11eGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlKQpAQCAtNDEsNyArNTAsNyBAQAogICBEQ0hFQ0soZGVtdXhlcl8pOwogfQogCi12b2lkIFByb2dyZXNzaXZlRGVtdXhlclN0cmVhbTo6UmVhZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpIHsKK3ZvaWQgUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpSZWFkKFJlYWRDQiByZWFkX2NiKSB7CiAgIFRSQUNFX0VWRU5UMCgibWVkaWFfc3RhY2siLCAiUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpSZWFkKCkiKTsKICAgRENIRUNLKCFyZWFkX2NiLmlzX251bGwoKSk7CiAKQEAgLTUxLDggKzYwLDggQEAKICAgLy8gVGhlIGRlbXV4ZXJfIG1heSBoYXZlIGJlZW4gZGVzdHJveWVkIGluIHRoZSBwaXBlbGluZSB0aHJlYWQuCiAgIGlmIChzdG9wcGVkXykgewogICAgIFRSQUNFX0VWRU5UMCgibWVkaWFfc3RhY2siLCAiUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpSZWFkKCkgRU9TIHNlbnQuIik7Ci0gICAgcmVhZF9jYi5SdW4oRGVtdXhlclN0cmVhbTo6a09rLAotICAgICAgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4oRGVjb2RlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCkpKTsKKyAgICBzdGQ6Om1vdmUocmVhZF9jYikuUnVuKERlbXV4ZXJTdHJlYW06OmtPaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcigpKTsKICAgICByZXR1cm47CiAgIH0KIApAQCAtNzAsMTEgKzc5LDExIEBACiAgICAgICAtLXRvdGFsX2J1ZmZlcl9jb3VudF87CiAgICAgICBidWZmZXJfcXVldWVfLnBvcF9mcm9udCgpOwogICAgIH0KLSAgICByZWFkX2NiLlJ1bihEZW11eGVyU3RyZWFtOjprT2ssIGJ1ZmZlcik7CisgICAgc3RkOjptb3ZlKHJlYWRfY2IpLlJ1bihEZW11eGVyU3RyZWFtOjprT2ssIGJ1ZmZlcik7CiAgIH0gZWxzZSB7CiAgICAgVFJBQ0VfRVZFTlQwKCJtZWRpYV9zdGFjayIsCiAgICAgICAgICAgICAgICAgICJQcm9ncmVzc2l2ZURlbXV4ZXJTdHJlYW06OlJlYWQoKSByZXF1ZXN0IHF1ZXVlZC4iKTsKLSAgICByZWFkX3F1ZXVlXy5wdXNoX2JhY2socmVhZF9jYik7CisgICAgcmVhZF9xdWV1ZV8ucHVzaF9iYWNrKHN0ZDo6bW92ZShyZWFkX2NiKSk7CiAgIH0KIH0KIApAQCAtODYsMTIgKzk1LDE0IEBACiAgIHJldHVybiBkZW11eGVyXy0+VmlkZW9Db25maWcoKTsKIH0KIAotUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpHZXRCdWZmZXJlZFJhbmdlcygpIHsKKzo6bWVkaWE6OlJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IFByb2dyZXNzaXZlRGVtdXhlclN0cmVhbTo6R2V0QnVmZmVyZWRSYW5nZXMoKSB7CiAgIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7CiAgIHJldHVybiBidWZmZXJlZF9yYW5nZXNfOwogfQogCi1EZW11eGVyU3RyZWFtOjpUeXBlIFByb2dyZXNzaXZlRGVtdXhlclN0cmVhbTo6dHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfOyB9Cis6Om1lZGlhOjpEZW11eGVyU3RyZWFtOjpUeXBlIFByb2dyZXNzaXZlRGVtdXhlclN0cmVhbTo6dHlwZSgpIGNvbnN0IHsKKyAgcmV0dXJuIHR5cGVfOworfQogCiB2b2lkIFByb2dyZXNzaXZlRGVtdXhlclN0cmVhbTo6RW5hYmxlQml0c3RyZWFtQ29udmVydGVyKCkgeyBOT1RJTVBMRU1FTlRFRCgpOyB9CiAKQEAgLTEyNiw5ICsxMzcsOSBAQAogICBpZiAocmVhZF9xdWV1ZV8uc2l6ZSgpKSB7CiAgICAgLy8gYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYnVmZmVyIHF1ZXVlIGlzIGVtcHR5CiAgICAgRENIRUNLX0VRKGJ1ZmZlcl9xdWV1ZV8uc2l6ZSgpLCAwKTsKLSAgICBSZWFkQ0IgcmVhZF9jYihyZWFkX3F1ZXVlXy5mcm9udCgpKTsKKyAgICBSZWFkQ0IgcmVhZF9jYiA9IHN0ZDo6bW92ZShyZWFkX3F1ZXVlXy5mcm9udCgpKTsKICAgICByZWFkX3F1ZXVlXy5wb3BfZnJvbnQoKTsKLSAgICByZWFkX2NiLlJ1bihEZW11eGVyU3RyZWFtOjprT2ssIGJ1ZmZlcik7CisgICAgc3RkOjptb3ZlKHJlYWRfY2IpLlJ1bihEZW11eGVyU3RyZWFtOjprT2ssIGJ1ZmZlcik7CiAgIH0gZWxzZSB7CiAgICAgLy8gc2F2ZSB0aGUgYnVmZmVyIGZvciBuZXh0IHJlYWQgcmVxdWVzdAogICAgIGJ1ZmZlcl9xdWV1ZV8ucHVzaF9iYWNrKGJ1ZmZlcik7CkBAIC0xNzcsOCArMTg4LDkgQEAKICAgZm9yIChSZWFkUXVldWU6Oml0ZXJhdG9yIGl0ID0gcmVhZF9xdWV1ZV8uYmVnaW4oKTsgaXQgIT0gcmVhZF9xdWV1ZV8uZW5kKCk7CiAgICAgICAgKytpdCkgewogICAgIFRSQUNFX0VWRU5UMCgibWVkaWFfc3RhY2siLCAiUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtOjpTdG9wKCkgRU9TIHNlbnQuIik7Ci0gICAgaXQtPlJ1bihEZW11eGVyU3RyZWFtOjprT2ssCi0gICAgICAgICAgICBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+KERlY29kZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcigpKSk7CisgICAgc3RkOjptb3ZlKCppdCkuUnVuKAorICAgICAgICBEZW11eGVyU3RyZWFtOjprT2ssCisgICAgICAgIHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4oRGVjb2RlckJ1ZmZlcjo6Q3JlYXRlRU9TQnVmZmVyKCkpKTsKICAgfQogICByZWFkX3F1ZXVlXy5jbGVhcigpOwogICBzdG9wcGVkXyA9IHRydWU7CkBAIC0xODksMTAgKzIwMSw4IEBACiAvLwogUHJvZ3Jlc3NpdmVEZW11eGVyOjpQcm9ncmVzc2l2ZURlbXV4ZXIoCiAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVzc2FnZV9sb29wLAotICAgIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciwgRGF0YVNvdXJjZSogZGF0YV9zb3VyY2UsCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxNZWRpYUxvZz4mIG1lZGlhX2xvZykKKyAgICBEYXRhU291cmNlKiBkYXRhX3NvdXJjZSwgTWVkaWFMb2cqIGNvbnN0IG1lZGlhX2xvZykKICAgICA6IG1lc3NhZ2VfbG9vcF8obWVzc2FnZV9sb29wKSwKLSAgICAgIGJ1ZmZlcl9hbGxvY2F0b3JfKGJ1ZmZlcl9hbGxvY2F0b3IpLAogICAgICAgaG9zdF8oTlVMTCksCiAgICAgICBibG9ja2luZ190aHJlYWRfKCJQcm9nRGVtdXhlckJsayIpLAogICAgICAgZGF0YV9zb3VyY2VfKGRhdGFfc291cmNlKSwKQEAgLTIwMiw3ICsyMTIsNiBAQAogICAgICAgYXVkaW9fcmVhY2hlZF9lb3NfKGZhbHNlKSwKICAgICAgIHZpZGVvX3JlYWNoZWRfZW9zXyhmYWxzZSkgewogICBEQ0hFQ0sobWVzc2FnZV9sb29wXyk7Ci0gIERDSEVDSyhidWZmZXJfYWxsb2NhdG9yXyk7CiAgIERDSEVDSyhkYXRhX3NvdXJjZV8pOwogICBEQ0hFQ0sobWVkaWFfbG9nXyk7CiAgIHJlYWRlcl8gPSBuZXcgRGF0YVNvdXJjZVJlYWRlcigpOwpAQCAtMjE2LDEwICsyMjUsOCBAQAogfQogCiB2b2lkIFByb2dyZXNzaXZlRGVtdXhlcjo6SW5pdGlhbGl6ZShEZW11eGVySG9zdCogaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlX3RleHRfdHJhY2tzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0YXR1c0NhbGxiYWNrIHN0YXR1c19jYikgewogICBUUkFDRV9FVkVOVDAoIm1lZGlhX3N0YWNrIiwgIlByb2dyZXNzaXZlRGVtdXhlcjo6SW5pdGlhbGl6ZSgpIik7Ci0gIERDSEVDSyghZW5hYmxlX3RleHRfdHJhY2tzKTsKICAgRENIRUNLKE1lc3NhZ2VMb29wQmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKICAgRENIRUNLKHJlYWRlcl8pOwogICBEQ0hFQ0soIXBhcnNlcl8pOwpAQCAtMjM2LDE3ICsyNDMsMTYgQEAKIAogICAvLyBzdGFydCB0aGUgYmxvY2tpbmcgdGhyZWFkIGFuZCBoYXZlIGl0IGRvd25sb2FkIGFuZCBwYXJzZSB0aGUgbWVkaWEgY29uZmlnCiAgIGlmICghYmxvY2tpbmdfdGhyZWFkXy5TdGFydCgpKSB7Ci0gICAgc3RhdHVzX2NiLlJ1bihERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRSk7CisgICAgc3RkOjptb3ZlKHN0YXR1c19jYikuUnVuKDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFKTsKICAgICByZXR1cm47CiAgIH0KIAogICBibG9ja2luZ190aHJlYWRfLnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAotICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZQcm9ncmVzc2l2ZURlbXV4ZXI6OlBhcnNlQ29uZmlnQmxvY2tpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgc3RhdHVzX2NiKSk7CisgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmRPbmNlKCZQcm9ncmVzc2l2ZURlbXV4ZXI6OlBhcnNlQ29uZmlnQmxvY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcyksIHN0ZDo6bW92ZShzdGF0dXNfY2IpKSk7CiB9CiAKLXZvaWQgUHJvZ3Jlc3NpdmVEZW11eGVyOjpQYXJzZUNvbmZpZ0Jsb2NraW5nKAotICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYikgewordm9pZCBQcm9ncmVzc2l2ZURlbXV4ZXI6OlBhcnNlQ29uZmlnQmxvY2tpbmcoUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBzdGF0dXNfY2IpIHsKICAgRENIRUNLKGJsb2NraW5nX3RocmVhZF8udGFza19ydW5uZXIoKS0+QmVsb25nc1RvQ3VycmVudFRocmVhZCgpKTsKICAgRENIRUNLKCFwYXJzZXJfKTsKIApAQCAtMjU2LDMwICsyNjIsMzIgQEAKICAgLy8gaWYgd2UgY2FuJ3QgY29uc3RydWN0IGEgcGFyc2VyIGZvciB0aGlzIHN0cmVhbSBpdCdzIGEgZmF0YWwgZXJyb3IsIHJldHVybgogICAvLyBmYWxzZSBzbyBQYXJzZUNvbmZpZ0RvbmUgd2lsbCBub3RpZnkgdGhlIGNhbGxlciB0byBJbml0aWFsaXplKCkgdmlhCiAgIC8vIHN0YXR1c19jYi4KLSAgaWYgKCFwYXJzZXJfIHx8IHN0YXR1cyAhPSBQSVBFTElORV9PSykgeworICBpZiAoIXBhcnNlcl8gfHwgc3RhdHVzICE9IDo6bWVkaWE6OlBJUEVMSU5FX09LKSB7CiAgICAgRENIRUNLKCFwYXJzZXJfKTsKLSAgICBEQ0hFQ0tfTkUoc3RhdHVzLCBQSVBFTElORV9PSyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBQSVBFTElORV9PSykgewotICAgICAgc3RhdHVzID0gREVNVVhFUl9FUlJPUl9DT1VMRF9OT1RfUEFSU0U7CisgICAgRENIRUNLX05FKHN0YXR1cywgOjptZWRpYTo6UElQRUxJTkVfT0spOworICAgIGlmIChzdGF0dXMgPT0gOjptZWRpYTo6UElQRUxJTkVfT0spIHsKKyAgICAgIHN0YXR1cyA9IDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFOwogICAgIH0KLSAgICBQYXJzZUNvbmZpZ0RvbmUoc3RhdHVzX2NiLCBzdGF0dXMpOworICAgIFBhcnNlQ29uZmlnRG9uZShzdGQ6Om1vdmUoc3RhdHVzX2NiKSwgc3RhdHVzKTsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBpbnN0cnVjdCB0aGUgcGFyc2VyIHRvIGV4dHJhY3QgYXVkaW8gYW5kIHZpZGVvIGNvbmZpZyBmcm9tIHRoZSBmaWxlCiAgIGlmICghcGFyc2VyXy0+UGFyc2VDb25maWcoKSkgewotICAgIFBhcnNlQ29uZmlnRG9uZShzdGF0dXNfY2IsIERFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFKTsKKyAgICBQYXJzZUNvbmZpZ0RvbmUoc3RkOjptb3ZlKHN0YXR1c19jYiksCisgICAgICAgICAgICAgICAgICAgIDo6bWVkaWE6OkRFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFKTsKICAgICByZXR1cm47CiAgIH0KIAogICAvLyBtYWtlIHN1cmUgd2UgZ290IGEgdmFsaWQgYW5kIGNvbXBsZXRlIGNvbmZpZ3VyYXRpb24KICAgaWYgKCFwYXJzZXJfLT5Jc0NvbmZpZ0NvbXBsZXRlKCkpIHsKLSAgICBQYXJzZUNvbmZpZ0RvbmUoc3RhdHVzX2NiLCBERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRSk7CisgICAgUGFyc2VDb25maWdEb25lKHN0ZDo6bW92ZShzdGF0dXNfY2IpLAorICAgICAgICAgICAgICAgICAgICA6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRSk7CiAgICAgcmV0dXJuOwogICB9CiAKICAgLy8gSXNDb25maWdDb21wbGV0ZSgpIHNob3VsZCBndWFyYW50ZWUgd2Uga25vdyB0aGUgZHVyYXRpb24KLSAgRENIRUNLKHBhcnNlcl8tPkR1cmF0aW9uKCkgIT0ga0luZmluaXRlRHVyYXRpb24pOworICBEQ0hFQ0socGFyc2VyXy0+RHVyYXRpb24oKSAhPSA6Om1lZGlhOjprSW5maW5pdGVEdXJhdGlvbik7CiAgIGhvc3RfLT5TZXREdXJhdGlvbihwYXJzZXJfLT5EdXJhdGlvbigpKTsKICAgLy8gQml0cmF0ZSBtYXkgbm90IGJlIGtub3duLCBob3dldmVyCiAgIHVpbnQzMiBiaXRyYXRlID0gcGFyc2VyXy0+Qml0c1BlclNlY29uZCgpOwpAQCAtMjg4LDExICsyOTYsMTEgQEAKICAgfQogCiAgIC8vIHN1Y2Nlc3NmdWwgcGFyc2Ugb2YgY29uZmlnIGRhdGEsIGluZm9ybSB0aGUgbm9uYmxvY2tpbmcgZGVtdXhlciB0aHJlYWQKLSAgRENIRUNLX0VRKHN0YXR1cywgUElQRUxJTkVfT0spOwotICBQYXJzZUNvbmZpZ0RvbmUoc3RhdHVzX2NiLCBQSVBFTElORV9PSyk7CisgIERDSEVDS19FUShzdGF0dXMsIDo6bWVkaWE6OlBJUEVMSU5FX09LKTsKKyAgUGFyc2VDb25maWdEb25lKHN0ZDo6bW92ZShzdGF0dXNfY2IpLCA6Om1lZGlhOjpQSVBFTElORV9PSyk7CiB9CiAKLXZvaWQgUHJvZ3Jlc3NpdmVEZW11eGVyOjpQYXJzZUNvbmZpZ0RvbmUoY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgc3RhdHVzX2NiLAordm9pZCBQcm9ncmVzc2l2ZURlbXV4ZXI6OlBhcnNlQ29uZmlnRG9uZShQaXBlbGluZVN0YXR1c0NhbGxiYWNrIHN0YXR1c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7CiAgIERDSEVDSyhibG9ja2luZ190aHJlYWRfLnRhc2tfcnVubmVyKCktPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSk7CiAKQEAgLTMwMSwxNSArMzA5LDE1IEBACiAgIH0KIAogICAvLyBpZiB0aGUgYmxvY2tpbmcgcGFyc2VyIHRocmVhZCBjYW5ub3QgcGFyc2UgY29uZmlnIHdlJ3JlIGRvbmUuCi0gIGlmIChzdGF0dXMgIT0gUElQRUxJTkVfT0spIHsKLSAgICBzdGF0dXNfY2IuUnVuKHN0YXR1cyk7CisgIGlmIChzdGF0dXMgIT0gOjptZWRpYTo6UElQRUxJTkVfT0spIHsKKyAgICBzdGQ6Om1vdmUoc3RhdHVzX2NiKS5SdW4oc3RhdHVzKTsKICAgICByZXR1cm47CiAgIH0KICAgRENIRUNLKHBhcnNlcl8pOwogICAvLyBzdGFydCBkb3dubG9hZGluZyBkYXRhCiAgIFJlcXVlc3QoRGVtdXhlclN0cmVhbTo6QVVESU8pOwogCi0gIHN0YXR1c19jYi5SdW4oUElQRUxJTkVfT0spOworICBzdGQ6Om1vdmUoc3RhdHVzX2NiKS5SdW4oOjptZWRpYTo6UElQRUxJTkVfT0spOwogfQogCiB2b2lkIFByb2dyZXNzaXZlRGVtdXhlcjo6UmVxdWVzdChEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIHsKQEAgLTMyOCw3ICszMzYsNyBAQAogICBpZiAoIWF1IHx8ICFhdS0+SXNWYWxpZCgpKSB7CiAgICAgaWYgKCFIYXNTdG9wQ2FsbGVkKCkpIHsKICAgICAgIERMT0coRVJST1IpIDw8ICJnb3QgYmFjayBiYWQgQVUgZnJvbSBwYXJzZXIiOwotICAgICAgaG9zdF8tPk9uRGVtdXhlckVycm9yKERFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFKTsKKyAgICAgIGhvc3RfLT5PbkRlbXV4ZXJFcnJvcig6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRSk7CiAgICAgfQogICAgIHJldHVybjsKICAgfQpAQCAtMzc1LDExICszODMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb19kZW11eGVyX3N0cmVhbV8tPkdldFRvdGFsQnVmZmVyU2l6ZSgpOwogICAgIHNpemVfdCB0b3RhbF9idWZmZXJfY291bnQgPSBhdWRpb19kZW11eGVyX3N0cmVhbV8tPkdldFRvdGFsQnVmZmVyQ291bnQoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2RlbXV4ZXJfc3RyZWFtXy0+R2V0VG90YWxCdWZmZXJDb3VudCgpOworICAgIC8vIE9ubHkgc2RyIHZpZGVvIGlzIHN1cHBvcnRlZCBpbiBwcm9ncmVzc2l2ZSBtb2RlLgorICAgIGNvbnN0IGludCBrQml0RGVwdGggPSA4OwogICAgIGludCBwcm9ncmVzc2l2ZV9idWRnZXQgPSBTYk1lZGlhR2V0UHJvZ3Jlc3NpdmVCdWZmZXJCdWRnZXQoCiAgICAgICAgIE1lZGlhVmlkZW9Db2RlY1RvU2JNZWRpYVZpZGVvQ29kZWMoVmlkZW9Db25maWcoKS5jb2RlYygpKSwKICAgICAgICAgVmlkZW9Db25maWcoKS52aXNpYmxlX3JlY3QoKS5zaXplKCkud2lkdGgoKSwKLSAgICAgICAgVmlkZW9Db25maWcoKS52aXNpYmxlX3JlY3QoKS5zaXplKCkuaGVpZ2h0KCksCi0gICAgICAgIFZpZGVvQ29uZmlnKCkud2VibV9jb2xvcl9tZXRhZGF0YSgpLkJpdHNQZXJDaGFubmVsKTsKKyAgICAgICAgVmlkZW9Db25maWcoKS52aXNpYmxlX3JlY3QoKS5zaXplKCkuaGVpZ2h0KCksIGtCaXREZXB0aCk7CiAgICAgaW50IHByb2dyZXNzaXZlX2R1cmF0aW9uX2NhcF9pbl9zZWNvbmRzID0KICAgICAgICAgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQoKSAvIGtTYlRpbWVTZWNvbmQ7CiAgICAgY29uc3QgaW50IGtFc3RpbWF0ZWRCdWZmZXJDb3VudFBlclNlY29uZHMgPSA3MDsKQEAgLTM5NiwyNSArNDA1LDEyIEBACiAgICAgICAgICAga0RlbGF5KTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgLy8gTm90ZSB0aGF0ICJuZXcgRGVjb2RlckJ1ZmZlciIgbWF5IHJldHVybiBOVUxMIGlmIGl0IGlzIHVuYWJsZSB0byBhbGxvY2F0ZQotICAgIC8vIGFueSBEZWNvZGVyQnVmZmVyLgorCiAgICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBkZWNvZGVyX2J1ZmZlcigKLSAgICAgICAgRGVjb2RlckJ1ZmZlcjo6Q3JlYXRlKGJ1ZmZlcl9hbGxvY2F0b3JfLCByZXF1ZXN0ZWRfYXVfLT5HZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfYXVfLT5HZXRNYXhTaXplKCkpKTsKLSAgICBpZiAoZGVjb2Rlcl9idWZmZXIpIHsKLSAgICAgIGRlY29kZXJfYnVmZmVyLT5zZXRfaXNfa2V5X2ZyYW1lKHJlcXVlc3RlZF9hdV8tPklzS2V5ZnJhbWUoKSk7Ci0gICAgICBidWZmZXJfYWxsb2NhdG9yXy0+VXBkYXRlVmlkZW9Db25maWcoVmlkZW9Db25maWcoKSk7Ci0gICAgICBEb3dubG9hZChkZWNvZGVyX2J1ZmZlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEFzIHRoZSBidWZmZXIgaXMgZnVsbCBvZiBtZWRpYSBkYXRhLCBpdCBpcyBzYWZlIHRvIGRlbGF5IDEwMAotICAgICAgLy8gbWlsbGlzZWNvbmRzLgotICAgICAgY29uc3QgYmFzZTo6VGltZURlbHRhIGtEZWxheSA9IGJhc2U6OlRpbWVEZWx0YTo6RnJvbU1pbGxpc2Vjb25kcygxMDApOwotICAgICAgYmxvY2tpbmdfdGhyZWFkXy5tZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdERlbGF5ZWRUYXNrKAotICAgICAgICAgIEZST01fSEVSRSwKLSAgICAgICAgICBiYXNlOjpCaW5kKCZQcm9ncmVzc2l2ZURlbXV4ZXI6OkFsbG9jYXRlQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgICAga0RlbGF5KTsKLSAgICB9CisgICAgICAgIG5ldyBEZWNvZGVyQnVmZmVyKHJlcXVlc3RlZF9hdV8tPkdldE1heFNpemUoKSkpOworICAgIERDSEVDSyhkZWNvZGVyX2J1ZmZlcik7CisgICAgZGVjb2Rlcl9idWZmZXItPnNldF9pc19rZXlfZnJhbWUocmVxdWVzdGVkX2F1Xy0+SXNLZXlmcmFtZSgpKTsKKyAgICBEb3dubG9hZChkZWNvZGVyX2J1ZmZlcik7CiAgIH0KIH0KIApAQCAtNDQ3LDcgKzQ0Myw3IEBACiAKICAgaWYgKCFyZXF1ZXN0ZWRfYXVfLT5SZWFkKHJlYWRlcl8uZ2V0KCksIGJ1ZmZlci5nZXQoKSkpIHsKICAgICBETE9HKEVSUk9SKSA8PCAiYXUgcmVhZCBmYWlsZWQiOwotICAgIGhvc3RfLT5PbkRlbXV4ZXJFcnJvcihQSVBFTElORV9FUlJPUl9SRUFEKTsKKyAgICBob3N0Xy0+T25EZW11eGVyRXJyb3IoOjptZWRpYTo6UElQRUxJTkVfRVJST1JfUkVBRCk7CiAgICAgcmV0dXJuOwogICB9CiAKQEAgLTQ2OCw3ICs0NjQsNyBAQAogICByZXF1ZXN0ZWRfYXVfID0gTlVMTDsKIAogICAvLyBDYWxjdWxhdGUgdG90YWwgcmFuZ2Ugb2YgYnVmZmVyZWQgZGF0YSBmb3IgYm90aCBhdWRpbyBhbmQgdmlkZW8uCi0gIFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+IGJ1ZmZlcmVkKAorICA6Om1lZGlhOjpSYW5nZXM8YmFzZTo6VGltZURlbHRhPiBidWZmZXJlZCgKICAgICAgIGF1ZGlvX2RlbXV4ZXJfc3RyZWFtXy0+R2V0QnVmZmVyZWRSYW5nZXMoKS5JbnRlcnNlY3Rpb25XaXRoKAogICAgICAgICAgIHZpZGVvX2RlbXV4ZXJfc3RyZWFtXy0+R2V0QnVmZmVyZWRSYW5nZXMoKSkpOwogICAvLyBOb3RpZnkgaG9zdCBvZiBlYWNoIGRpc2pvaW50IHJhbmdlLgpAQCAtNTYyLDE3ICs1NTgsMTYgQEAKICAgcmV0dXJuIHN0b3BwZWRfOwogfQogCi12b2lkIFByb2dyZXNzaXZlRGVtdXhlcjo6U2VlayhiYXNlOjpUaW1lRGVsdGEgdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIGNiKSB7Cit2b2lkIFByb2dyZXNzaXZlRGVtdXhlcjo6U2VlayhiYXNlOjpUaW1lRGVsdGEgdGltZSwgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBjYikgewogICBibG9ja2luZ190aHJlYWRfLm1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKICAgICAgIEZST01fSEVSRSwKLSAgICAgIGJhc2U6OkJpbmQoJlByb2dyZXNzaXZlRGVtdXhlcjo6U2Vla1Rhc2ssIGJhc2U6OlVucmV0YWluZWQodGhpcyksIHRpbWUsCi0gICAgICAgICAgICAgICAgIEJpbmRUb0N1cnJlbnRMb29wKGNiKSkpOworICAgICAgYmFzZTo6QmluZE9uY2UoJlByb2dyZXNzaXZlRGVtdXhlcjo6U2Vla1Rhc2ssIGJhc2U6OlVucmV0YWluZWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgICB0aW1lLCA6Om1lZGlhOjpCaW5kVG9DdXJyZW50TG9vcChzdGQ6Om1vdmUoY2IpKSkpOwogfQogCiAvLyBydW5zIG9uIGJsb2NraW5nIHRocmVhZAogdm9pZCBQcm9ncmVzc2l2ZURlbXV4ZXI6OlNlZWtUYXNrKGJhc2U6OlRpbWVEZWx0YSB0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIGNiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBjYikgewogICBUUkFDRV9FVkVOVDEoIm1lZGlhX3N0YWNrIiwgIlByb2dyZXNzaXZlRGVtdXhlcjo6U2Vla1Rhc2soKSIsICJ0aW1lc3RhbXAiLAogICAgICAgICAgICAgICAgdGltZS5Jbk1pY3Jvc2Vjb25kcygpKTsKICAgRExPRyhJTkZPKSA8PCBiYXNlOjpTdHJpbmdQcmludGYoInNlZWsgdG86ICUiIFBSSWQ2NCAiIG1zIiwKQEAgLTU4Myw3ICs1NzgsNyBAQAogICAvLyBhZHZhbmNlIHBhcnNlciB0byBuZXcgdGltZXN0YW1wCiAgIGlmICghcGFyc2VyXy0+U2Vla1RvKHRpbWUpKSB7CiAgICAgRExPRyhFUlJPUikgPDwgInBhcnNlciBzZWVrIGZhaWxlZC4iOwotICAgIGNiLlJ1bihQSVBFTElORV9FUlJPUl9SRUFEKTsKKyAgICBzdGQ6Om1vdmUoY2IpLlJ1big6Om1lZGlhOjpQSVBFTElORV9FUlJPUl9SRUFEKTsKICAgICByZXR1cm47CiAgIH0KICAgLy8gaWYgYm90aCBzdHJlYW1zIGhhZCBmaW5pc2hlZCBkb3dubG9hZGluZywgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSByZXF1ZXN0CkBAIC01OTEsMjIgKzU4NiwxNiBAQAogICBhdWRpb19yZWFjaGVkX2Vvc18gPSBmYWxzZTsKICAgdmlkZW9fcmVhY2hlZF9lb3NfID0gZmFsc2U7CiAgIGZsdXNoaW5nXyA9IHRydWU7Ci0gIGNiLlJ1bihQSVBFTElORV9PSyk7CisgIHN0ZDo6bW92ZShjYikuUnVuKDo6bWVkaWE6OlBJUEVMSU5FX09LKTsKICAgaWYgKGlzc3VlX25ld19yZXF1ZXN0KSB7CiAgICAgRExPRyhJTkZPKSA8PCAicmVzdGFydGluZyBzdG9wcGVkIHJlcXVlc3QgbG9vcCI7CiAgICAgUmVxdWVzdChEZW11eGVyU3RyZWFtOjpBVURJTyk7CiAgIH0KIH0KIAotRGVtdXhlclN0cmVhbSogUHJvZ3Jlc3NpdmVEZW11eGVyOjpHZXRTdHJlYW0obWVkaWE6OkRlbXV4ZXJTdHJlYW06OlR5cGUgdHlwZSkgewotICBpZiAodHlwZSA9PSBEZW11eGVyU3RyZWFtOjpBVURJTykgewotICAgIHJldHVybiBhdWRpb19kZW11eGVyX3N0cmVhbV8uZ2V0KCk7Ci0gIH0gZWxzZSBpZiAodHlwZSA9PSBEZW11eGVyU3RyZWFtOjpWSURFTykgewotICAgIHJldHVybiB2aWRlb19kZW11eGVyX3N0cmVhbV8uZ2V0KCk7Ci0gIH0gZWxzZSB7Ci0gICAgRExPRyhXQVJOSU5HKSA8PCAidW5zdXBwb3J0ZWQgc3RyZWFtIHR5cGUgcmVxdWVzdGVkIjsKLSAgfQotICByZXR1cm4gTlVMTDsKK3N0ZDo6dmVjdG9yPDo6bWVkaWE6OkRlbXV4ZXJTdHJlYW0qPiBQcm9ncmVzc2l2ZURlbXV4ZXI6OkdldEFsbFN0cmVhbXMoKSB7CisgIHJldHVybiBzdGQ6OnZlY3RvcjxEZW11eGVyU3RyZWFtKj4oCisgICAgICB7YXVkaW9fZGVtdXhlcl9zdHJlYW1fLmdldCgpLCB2aWRlb19kZW11eGVyX3N0cmVhbV8uZ2V0KCl9KTsKIH0KIAogYmFzZTo6VGltZURlbHRhIFByb2dyZXNzaXZlRGVtdXhlcjo6R2V0U3RhcnRUaW1lKCkgY29uc3QgewpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX2RlbXV4ZXIuaCBiL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9kZW11eGVyLmgKaW5kZXggNmVjYjMyMy4uZjRlZjQ5YSAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX2RlbXV4ZXIuaAorKysgYi9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfZGVtdXhlci5oCkBAIC0yMyw0MSArMjMsNDAgQEAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJiYXNlL21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuaCIKICNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWQuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlbXV4ZXIuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3Jhbmdlcy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9yYW5nZXMuaCIKKworbmFtZXNwYWNlIG1lZGlhIHsKK2NsYXNzIERlY29kZXJCdWZmZXI7Cit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewogCi1jbGFzcyBEZWNvZGVyQnVmZmVyOwogY2xhc3MgUHJvZ3Jlc3NpdmVEZW11eGVyOwogCi1jbGFzcyBQcm9ncmVzc2l2ZURlbXV4ZXJTdHJlYW0gOiBwdWJsaWMgRGVtdXhlclN0cmVhbSB7CitjbGFzcyBQcm9ncmVzc2l2ZURlbXV4ZXJTdHJlYW0gOiBwdWJsaWMgOjptZWRpYTo6RGVtdXhlclN0cmVhbSB7CiAgcHVibGljOgorICB0eXBlZGVmIDo6bWVkaWE6OkF1ZGlvRGVjb2RlckNvbmZpZyBBdWRpb0RlY29kZXJDb25maWc7CisgIHR5cGVkZWYgOjptZWRpYTo6RGVjb2RlckJ1ZmZlciBEZWNvZGVyQnVmZmVyOworICB0eXBlZGVmIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZyBWaWRlb0RlY29kZXJDb25maWc7CisKICAgUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtKFByb2dyZXNzaXZlRGVtdXhlciogZGVtdXhlciwgVHlwZSB0eXBlKTsKIAogICAvLyBEZW11eGVyU3RyZWFtIGltcGxlbWVudGF0aW9uCi0gIHZvaWQgUmVhZChjb25zdCBSZWFkQ0ImIHJlYWRfY2IpIG92ZXJyaWRlOworICB2b2lkIFJlYWQoUmVhZENCIHJlYWRfY2IpIG92ZXJyaWRlOwogICBBdWRpb0RlY29kZXJDb25maWcgYXVkaW9fZGVjb2Rlcl9jb25maWcoKSBvdmVycmlkZTsKICAgVmlkZW9EZWNvZGVyQ29uZmlnIHZpZGVvX2RlY29kZXJfY29uZmlnKCkgb3ZlcnJpZGU7CiAgIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlOwogICB2b2lkIEVuYWJsZUJpdHN0cmVhbUNvbnZlcnRlcigpIG92ZXJyaWRlOwogICBib29sIFN1cHBvcnRzQ29uZmlnQ2hhbmdlcygpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gIFZpZGVvUm90YXRpb24gdmlkZW9fcm90YXRpb24oKSBvdmVycmlkZSB7IHJldHVybiBWSURFT19ST1RBVElPTl8wOyB9Ci0gIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgdm9pZCBzZXRfZW5hYmxlZChib29sIGVuYWJsZWQsIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXApIG92ZXJyaWRlIHsKLSAgICBEQ0hFQ0soZW5hYmxlZCk7Ci0gIH0KLSAgdm9pZCBTZXRTdHJlYW1TdGF0dXNDaGFuZ2VDQihjb25zdCBTdHJlYW1TdGF0dXNDaGFuZ2VDQiYgY2IpIG92ZXJyaWRlIHsKLSAgICBOT1RSRUFDSEVEKCk7Ci0gIH0KIAogICAvLyBGdW5jdGlvbnMgdXNlZCBieSBQcm9ncmVzc2l2ZURlbXV4ZXIKLSAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gR2V0QnVmZmVyZWRSYW5nZXMoKTsKKyAgOjptZWRpYTo6UmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gR2V0QnVmZmVyZWRSYW5nZXMoKTsKICAgdm9pZCBFbnF1ZXVlQnVmZmVyKHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4gYnVmZmVyKTsKICAgdm9pZCBGbHVzaEJ1ZmZlcnMoKTsKICAgdm9pZCBTdG9wKCk7CkBAIC04MCwxNSArNzksMTUgQEAKICAgLy8gS2VlcHMgdHJhY2sgb2YgYWxsIHRpbWUgcmFuZ2VzIHRoaXMgb2JqZWN0IGhhcyBzZWVuIHNpbmNlIGNyZWF0aW9uLgogICAvLyBUaGUgZGVtdXhlciB1c2VzIHRoZXNlIHJhbmdlcyB0byB1cGRhdGUgdGhlIHBpcGVsaW5lIGFib3V0IHdoYXQgZGF0YQogICAvLyBpdCBoYXMgZGVtdXhlZC4KLSAgUmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gYnVmZmVyZWRfcmFuZ2VzXzsKKyAgOjptZWRpYTo6UmFuZ2VzPGJhc2U6OlRpbWVEZWx0YT4gYnVmZmVyZWRfcmFuZ2VzXzsKICAgLy8gVGhlIGxhc3QgdGltZXN0YW1wIG9mIGJ1ZmZlciBlbnF1ZXVlZC4gVGhpcyBpcyB1c2VkIGluIHR3byBwbGFjZXM6CiAgIC8vICAgMS4gVXNlZCB3aXRoIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgZnJhbWUgdG8gY2FsY3VsYXRlIHRoZQogICAvLyAgICAgIGJ1ZmZlciByYW5nZS4KICAgLy8gICAyLiBVc2VkIGJ5IHRoZSBkZW11eGVyIHRvIGRldGVtaW5hdGUgd2hhdCB0eXBlIG9mIGZyYW1lIHRvIGdldCBuZXh0LgotICBiYXNlOjpUaW1lRGVsdGEgbGFzdF9idWZmZXJfdGltZXN0YW1wXyA9IGtOb1RpbWVzdGFtcDsKKyAgYmFzZTo6VGltZURlbHRhIGxhc3RfYnVmZmVyX3RpbWVzdGFtcF8gPSA6Om1lZGlhOjprTm9UaW1lc3RhbXA7CiAgIGJvb2wgc3RvcHBlZF8gPSBmYWxzZTsKIAotICB0eXBlZGVmIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiA+IEJ1ZmZlclF1ZXVlOworICB0eXBlZGVmIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPj4gQnVmZmVyUXVldWU7CiAgIEJ1ZmZlclF1ZXVlIGJ1ZmZlcl9xdWV1ZV87CiAKICAgdHlwZWRlZiBzdGQ6OmRlcXVlPFJlYWRDQj4gUmVhZFF1ZXVlOwpAQCAtMTAwLDM2ICs5OSw1MCBAQAogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3Jlc3NpdmVEZW11eGVyU3RyZWFtKTsKIH07CiAKLWNsYXNzIE1FRElBX0VYUE9SVCBQcm9ncmVzc2l2ZURlbXV4ZXIgOiBwdWJsaWMgRGVtdXhlciB7CitjbGFzcyBNRURJQV9FWFBPUlQgUHJvZ3Jlc3NpdmVEZW11eGVyIDogcHVibGljIDo6bWVkaWE6OkRlbXV4ZXIgewogIHB1YmxpYzoKKyAgdHlwZWRlZiA6Om1lZGlhOjpBdWRpb0RlY29kZXJDb25maWcgQXVkaW9EZWNvZGVyQ29uZmlnOworICB0eXBlZGVmIDo6bWVkaWE6OkRlY29kZXJCdWZmZXIgRGVjb2RlckJ1ZmZlcjsKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZW11eGVySG9zdCBEZW11eGVySG9zdDsKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZW11eGVyU3RyZWFtIERlbXV4ZXJTdHJlYW07CisgIHR5cGVkZWYgOjptZWRpYTo6TWVkaWFMb2cgTWVkaWFMb2c7CisgIHR5cGVkZWYgOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgUGlwZWxpbmVTdGF0dXM7CisgIHR5cGVkZWYgOjptZWRpYTo6UGlwZWxpbmVTdGF0dXNDYWxsYmFjayBQaXBlbGluZVN0YXR1c0NhbGxiYWNrOworICB0eXBlZGVmIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZyBWaWRlb0RlY29kZXJDb25maWc7CisKICAgUHJvZ3Jlc3NpdmVEZW11eGVyKAogICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVzc2FnZV9sb29wLAotICAgICAgRGVjb2RlckJ1ZmZlcjo6QWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yLCBEYXRhU291cmNlKiBkYXRhX3NvdXJjZSwKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOworICAgICAgRGF0YVNvdXJjZSogZGF0YV9zb3VyY2UsIE1lZGlhTG9nKiBjb25zdCBtZWRpYV9sb2cpOwogICB+UHJvZ3Jlc3NpdmVEZW11eGVyKCkgb3ZlcnJpZGU7CiAKICAgLy8gRGVtdXhlciBpbXBsZW1lbnRhdGlvbi4KICAgc3RkOjpzdHJpbmcgR2V0RGlzcGxheU5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiUHJvZ3Jlc3NpdmVEZW11eGVyIjsgfQotICB2b2lkIEluaXRpYWxpemUoRGVtdXhlckhvc3QqIGhvc3QsIGNvbnN0IFBpcGVsaW5lU3RhdHVzQ0ImIHN0YXR1c19jYiwKLSAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlX3RleHRfdHJhY2tzKSBvdmVycmlkZTsKKyAgdm9pZCBJbml0aWFsaXplKERlbXV4ZXJIb3N0KiBob3N0LCBQaXBlbGluZVN0YXR1c0NhbGxiYWNrIHN0YXR1c19jYikgb3ZlcnJpZGU7CiAgIHZvaWQgQWJvcnRQZW5kaW5nUmVhZHMoKSBvdmVycmlkZSB7fQogICB2b2lkIFN0YXJ0V2FpdGluZ0ZvclNlZWsoYmFzZTo6VGltZURlbHRhIHNlZWtfdGltZSkgb3ZlcnJpZGUge30KICAgdm9pZCBDYW5jZWxQZW5kaW5nU2VlayhiYXNlOjpUaW1lRGVsdGEgc2Vla190aW1lKSBvdmVycmlkZSB7fQogICB2b2lkIFN0b3AoKSBvdmVycmlkZTsKLSAgdm9pZCBTZWVrKGJhc2U6OlRpbWVEZWx0YSB0aW1lLCBjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBjYikgb3ZlcnJpZGU7Ci0gIERlbXV4ZXJTdHJlYW0qIEdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIG92ZXJyaWRlOworICB2b2lkIFNlZWsoYmFzZTo6VGltZURlbHRhIHRpbWUsIFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2sgY2IpIG92ZXJyaWRlOworICBzdGQ6OnZlY3RvcjxEZW11eGVyU3RyZWFtKj4gR2V0QWxsU3RyZWFtcygpIG92ZXJyaWRlOwogICBiYXNlOjpUaW1lRGVsdGEgR2V0U3RhcnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgIGJhc2U6OlRpbWUgR2V0VGltZWxpbmVPZmZzZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBiYXNlOjpUaW1lKCk7IH0KICAgaW50NjRfdCBHZXRNZW1vcnlVc2FnZSgpIGNvbnN0IG92ZXJyaWRlIHsKICAgICBOT1RSRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CiAgIH0KLSAgdm9pZCBPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQoY29uc3Qgc3RkOjp2ZWN0b3I8TWVkaWFUcmFjazo6SWQ+JiB0cmFja19pZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSkgb3ZlcnJpZGUgeworICBhYnNsOjpvcHRpb25hbDw6Om1lZGlhOjpjb250YWluZXJfbmFtZXM6Ok1lZGlhQ29udGFpbmVyTmFtZT4KKyAgR2V0Q29udGFpbmVyRm9yTWV0cmljcygpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICBOT1RSRUFDSEVEKCk7CisgICAgcmV0dXJuIGFic2w6Om51bGxvcHQ7CisgIH0KKyAgdm9pZCBPbkVuYWJsZWRBdWRpb1RyYWNrc0NoYW5nZWQoCisgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjw6Om1lZGlhOjpNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywKKyAgICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSwgVHJhY2tDaGFuZ2VDQiBjaGFuZ2VfY29tcGxldGVkX2NiKSBvdmVycmlkZSB7CiAgICAgTk9UUkVBQ0hFRCgpOwogICB9Ci0gIHZvaWQgT25TZWxlY3RlZFZpZGVvVHJhY2tDaGFuZ2VkKGNvbnN0IHN0ZDo6dmVjdG9yPE1lZGlhVHJhY2s6OklkPiYgdHJhY2tfaWRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgY3VyclRpbWUpIG92ZXJyaWRlIHsKKyAgdm9pZCBPblNlbGVjdGVkVmlkZW9UcmFja0NoYW5nZWQoCisgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjw6Om1lZGlhOjpNZWRpYVRyYWNrOjpJZD4mIHRyYWNrX2lkcywKKyAgICAgIGJhc2U6OlRpbWVEZWx0YSBjdXJyVGltZSwgVHJhY2tDaGFuZ2VDQiBjaGFuZ2VfY29tcGxldGVkX2NiKSBvdmVycmlkZSB7CiAgICAgTk9UUkVBQ0hFRCgpOwogICB9CiAKQEAgLTE0OSwyNyArMTYyLDI1IEBACiAgIGJvb2wgTWVzc2FnZUxvb3BCZWxvbmdzVG9DdXJyZW50VGhyZWFkKCkgY29uc3Q7CiAKICBwcml2YXRlOgotICB2b2lkIFBhcnNlQ29uZmlnRG9uZShjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBzdGF0dXNfY2IsCi0gICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RhdHVzIHN0YXR1cyk7CisgIHZvaWQgUGFyc2VDb25maWdEb25lKFBpcGVsaW5lU3RhdHVzQ2FsbGJhY2sgc3RhdHVzX2NiLCBQaXBlbGluZVN0YXR1cyBzdGF0dXMpOwogICB2b2lkIERhdGFTb3VyY2VTdG9wcGVkKGNvbnN0IGJhc2U6OkNsb3N1cmUmIGNhbGxiYWNrKTsKICAgYm9vbCBIYXNTdG9wQ2FsbGVkKCk7CiAKICAgLy8gbWV0aG9kcyB0aGF0IHBlcmZvcm0gYmxvY2tpbmcgSS9PLCBhbmQgYXJlIHRoZXJlZm9yZSBydW4gb24gdGhlCiAgIC8vIGJsb2NraW5nX3RocmVhZF8gZG93bmxvYWQgZW5vdWdoIG9mIHRoZSBzdHJlYW0gdG8gcGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24uCi0gIHZvaWQgUGFyc2VDb25maWdCbG9ja2luZyhjb25zdCBQaXBlbGluZVN0YXR1c0NCJiBzdGF0dXNfY2IpOworICB2b2lkIFBhcnNlQ29uZmlnQmxvY2tpbmcoUGlwZWxpbmVTdGF0dXNDYWxsYmFjayBzdGF0dXNfY2IpOwogICB2b2lkIEFsbG9jYXRlQnVmZmVyKCk7CiAgIHZvaWQgRG93bmxvYWQoc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXIpOwogICB2b2lkIElzc3VlTmV4dFJlcXVlc3QoKTsKLSAgdm9pZCBTZWVrVGFzayhiYXNlOjpUaW1lRGVsdGEgdGltZSwgY29uc3QgUGlwZWxpbmVTdGF0dXNDQiYgY2IpOworICB2b2lkIFNlZWtUYXNrKGJhc2U6OlRpbWVEZWx0YSB0aW1lLCBQaXBlbGluZVN0YXR1c0NhbGxiYWNrIGNiKTsKIAogICBzY29wZWRfcmVmcHRyPGJhc2U6OlNpbmdsZVRocmVhZFRhc2tSdW5uZXI+IG1lc3NhZ2VfbG9vcF87Ci0gIERlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvcl87CiAgIERlbXV4ZXJIb3N0KiBob3N0XzsKIAogICAvLyBUaHJlYWQgb24gd2hpY2ggYWxsIGJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIGV4ZWN1dGVkLgogICBiYXNlOjpUaHJlYWQgYmxvY2tpbmdfdGhyZWFkXzsKICAgRGF0YVNvdXJjZSogZGF0YV9zb3VyY2VfOwotICBzY29wZWRfcmVmcHRyPE1lZGlhTG9nPiBtZWRpYV9sb2dfOworICBNZWRpYUxvZyogbWVkaWFfbG9nXzsKICAgc2NvcGVkX3JlZnB0cjxEYXRhU291cmNlUmVhZGVyPiByZWFkZXJfOwogCiAgIGJhc2U6OkxvY2sgbG9ja19mb3Jfc3RvcHBlZF87CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfcGFyc2VyLmNjIGIvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX3BhcnNlci5jYwppbmRleCBmOWZmYjg0Li5mZTgxMGIxIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfcGFyc2VyLmNjCisrKyBiL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuY2MKQEAgLTE1LDggKzE1LDggQEAKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfcGFyc2VyLmgiCiAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL21wNF9wYXJzZXIuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewpAQCAtMjgsMTAgKzI4LDkgQEAKIGNvbnN0IGludCBQcm9ncmVzc2l2ZVBhcnNlcjo6a0luaXRpYWxIZWFkZXJTaXplID0gOTsKIAogLy8gc3RhdGljCi1QaXBlbGluZVN0YXR1cyBQcm9ncmVzc2l2ZVBhcnNlcjo6Q29uc3RydWN0KAorOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgUHJvZ3Jlc3NpdmVQYXJzZXI6OkNvbnN0cnVjdCgKICAgICBzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlciwKLSAgICBzY29wZWRfcmVmcHRyPFByb2dyZXNzaXZlUGFyc2VyPiogcGFyc2VyLAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpIHsKKyAgICBzY29wZWRfcmVmcHRyPFByb2dyZXNzaXZlUGFyc2VyPiogcGFyc2VyLCBNZWRpYUxvZyogbWVkaWFfbG9nKSB7CiAgIERDSEVDSyhwYXJzZXIpOwogICBEQ0hFQ0sobWVkaWFfbG9nKTsKICAgKnBhcnNlciA9IE5VTEw7CkBAIC00MSw3ICs0MCw3IEBACiAgIHVpbnQ4IGhlYWRlcltrSW5pdGlhbEhlYWRlclNpemVdOwogICBpbnQgYnl0ZXNfcmVhZCA9IHJlYWRlci0+QmxvY2tpbmdSZWFkKDAsIGtJbml0aWFsSGVhZGVyU2l6ZSwgaGVhZGVyKTsKICAgaWYgKGJ5dGVzX3JlYWQgIT0ga0luaXRpYWxIZWFkZXJTaXplKSB7Ci0gICAgcmV0dXJuIERFTVVYRVJfRVJST1JfQ09VTERfTk9UX1BBUlNFOworICAgIHJldHVybiA6Om1lZGlhOjpERU1VWEVSX0VSUk9SX0NPVUxEX05PVF9QQVJTRTsKICAgfQogCiAgIC8vIGF0dGVtcHQgdG8gY29uc3RydWN0IG1wNCBwYXJzZXIgZnJvbSB0aGlzIGhlYWRlcgpAQCAtNDksMTMgKzQ4LDE1IEBACiB9CiAKIFByb2dyZXNzaXZlUGFyc2VyOjpQcm9ncmVzc2l2ZVBhcnNlcihzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlcikKLSAgICA6IHJlYWRlcl8ocmVhZGVyKSwgZHVyYXRpb25fKGtJbmZpbml0ZUR1cmF0aW9uKSwgYml0c19wZXJfc2Vjb25kXygwKSB7fQorICAgIDogcmVhZGVyXyhyZWFkZXIpLAorICAgICAgZHVyYXRpb25fKDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uKSwKKyAgICAgIGJpdHNfcGVyX3NlY29uZF8oMCkge30KIAogUHJvZ3Jlc3NpdmVQYXJzZXI6On5Qcm9ncmVzc2l2ZVBhcnNlcigpIHt9CiAKIGJvb2wgUHJvZ3Jlc3NpdmVQYXJzZXI6OklzQ29uZmlnQ29tcGxldGUoKSB7CiAgIHJldHVybiB2aWRlb19jb25maWdfLklzVmFsaWRDb25maWcoKSAmJiBhdWRpb19jb25maWdfLklzVmFsaWRDb25maWcoKSAmJgotICAgICAgICAgZHVyYXRpb25fICE9IGtJbmZpbml0ZUR1cmF0aW9uOworICAgICAgICAgZHVyYXRpb25fICE9IDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgbWVkaWEKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuaCBiL2NvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9wYXJzZXIuaAppbmRleCAwZTkwM2Y1Li5mM2QzZTgyIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvcHJvZ3Jlc3NpdmVfcGFyc2VyLmgKKysrIGIvY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL3Byb2dyZXNzaXZlX3BhcnNlci5oCkBAIC0xMiwxNiArMTIsMTcgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaWZuZGVmIENPQkFMVF9NRURJQV9QUk9HUkVTU0lWRV9QQVJTRVJfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX1BST0dSRVNTSVZFX1BBUlNFUl9IXworI2lmbmRlZiBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfUFJPR1JFU1NJVkVfUEFSU0VSX0hfCisjZGVmaW5lIENPQkFMVF9NRURJQV9QUk9HUkVTU0lWRV9QUk9HUkVTU0lWRV9QQVJTRVJfSF8KKwogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX2xvZy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3BpcGVsaW5lLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvcHJvZ3Jlc3NpdmUvYXZjX2FjY2Vzc191bml0LmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3Byb2dyZXNzaXZlL2RhdGFfc291cmNlX3JlYWRlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTMwLDEyICszMSwxOSBAQAogLy8gUHJvZ3Jlc3NpdmVEZW11eGVyLgogY2xhc3MgUHJvZ3Jlc3NpdmVQYXJzZXIgOiBwdWJsaWMgYmFzZTo6UmVmQ291bnRlZFRocmVhZFNhZmU8UHJvZ3Jlc3NpdmVQYXJzZXI+IHsKICBwdWJsaWM6CisgIHR5cGVkZWYgOjptZWRpYTo6QXVkaW9EZWNvZGVyQ29uZmlnIEF1ZGlvRGVjb2RlckNvbmZpZzsKKyAgdHlwZWRlZiA6Om1lZGlhOjpEZWNvZGVyQnVmZmVyIERlY29kZXJCdWZmZXI7CisgIHR5cGVkZWYgOjptZWRpYTo6RGVtdXhlclN0cmVhbSBEZW11eGVyU3RyZWFtOworICB0eXBlZGVmIDo6bWVkaWE6Ok1lZGlhTG9nIE1lZGlhTG9nOworICB0eXBlZGVmIDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIFBpcGVsaW5lU3RhdHVzOworICB0eXBlZGVmIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZyBWaWRlb0RlY29kZXJDb25maWc7CisKICAgc3RhdGljIGNvbnN0IGludCBrSW5pdGlhbEhlYWRlclNpemU7CiAgIC8vIERldGVybWluZSBzdHJlYW0gdHlwZSwgY29uc3RydWN0IGFwcHJvcHJpYXRlIHBhcnNlciBvYmplY3QsIGFuZCByZXR1cm5zCiAgIC8vIFBJUEVMSU5FX09LIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgY29kZS4KICAgc3RhdGljIFBpcGVsaW5lU3RhdHVzIENvbnN0cnVjdChzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPFByb2dyZXNzaXZlUGFyc2VyPiogcGFyc2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8TWVkaWFMb2c+JiBtZWRpYV9sb2cpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTG9nKiBtZWRpYV9sb2cpOwogICBleHBsaWNpdCBQcm9ncmVzc2l2ZVBhcnNlcihzY29wZWRfcmVmcHRyPERhdGFTb3VyY2VSZWFkZXI+IHJlYWRlcik7CiAKICAgLy8gU2VlayB0aHJvdWdoIHRoZSBmaWxlIGxvb2tpbmcgZm9yIGF1ZGlvIGFuZCB2aWRlbyBjb25maWd1cmF0aW9uIGluZm8sCkBAIC04MCw0ICs4OCw0IEBACiB9ICAvLyBuYW1lc3BhY2UgbWVkaWEKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKIAotI2VuZGlmICAvLyBDT0JBTFRfTUVESUFfUFJPR1JFU1NJVkVfUEFSU0VSX0hfCisjZW5kaWYgIC8vIENPQkFMVF9NRURJQV9QUk9HUkVTU0lWRV9QUk9HUkVTU0lWRV9QQVJTRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L0JVSUxELmduIGIvY29iYWx0L21lZGlhL3NhbmRib3gvQlVJTEQuZ24KaW5kZXggOGZmOWIzNC4uMDBmODdhMiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvQlVJTEQuZ24KKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvQlVJTEQuZ24KQEAgLTIzLDkgKzIzLDggQEAKICAgICAiLy9jb2JhbHQvbWF0aCIsCiAgICAgIi8vY29iYWx0L21lZGlhIiwKICAgICAiLy9zdGFyYm9hcmQiLAorICAgICIvL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhIiwKICAgXQotCi0gIGNvbnRlbnRfZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiIF0KIH0KIAogdGFyZ2V0KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSwgIndlYl9tZWRpYV9wbGF5ZXJfc2FuZGJveCIpIHsKQEAgLTU1LDYgKzU0LDcgQEAKICAgICAiLy9jb2JhbHQvc3lzdGVtX3dpbmRvdyIsCiAgICAgIi8vY29iYWx0L3RyYWNlX2V2ZW50IiwKICAgICAiLy9zdGFyYm9hcmQiLAorICAgICIvL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhIiwKICAgICAiLy91cmwiLAogICBdCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L2RlbXV4ZXJfaGVscGVyLmNjIGIvY29iYWx0L21lZGlhL3NhbmRib3gvZGVtdXhlcl9oZWxwZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MjhkZTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvZGVtdXhlcl9oZWxwZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL3NhbmRib3gvZGVtdXhlcl9oZWxwZXIuaCIKLQotI2luY2x1ZGUgPHF1ZXVlPgotCi0jaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2JpbmRfdG9fbG9vcC5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZmV0Y2hlcl9idWZmZXJlZF9kYXRhX3NvdXJjZS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9wcm9ncmVzc2l2ZS9wcm9ncmVzc2l2ZV9kZW11eGVyLmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBzYW5kYm94IHsKLQotbmFtZXNwYWNlIHsKLQotdXNpbmcgOjptZWRpYTo6QXVkaW9EZWNvZGVyQ29uZmlnOwotdXNpbmcgOjptZWRpYTo6QmluZFRvQ3VycmVudExvb3A7Ci11c2luZyA6Om1lZGlhOjpEZWNvZGVyQnVmZmVyOwotdXNpbmcgOjptZWRpYTo6RGVtdXhlclN0cmVhbTsKLXVzaW5nIDo6bWVkaWE6OlZpZGVvRGVjb2RlckNvbmZpZzsKLQotLy8gQSBEZW11eGVyU3RyZWFtIHRoYXQgY2FjaGVzIG1lZGlhIGRhdGEgaW4gbWVtb3J5LiAgTm90ZSB0aGF0IGl0IGlzIG9ubHkgZm9yCi0vLyB0ZXN0IHB1cnBvc2UgYW5kIG5vIHN5bmNocm9uaXphdGlvbiBpcyBwcm92aWRlZC4KLWNsYXNzIERlbXV4ZXJTdHJlYW1DYWNoZSA6IHB1YmxpYyA6Om1lZGlhOjpEZW11eGVyU3RyZWFtIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IERlbXV4ZXJTdHJlYW1DYWNoZShjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2RlY29kZXJfY29uZmlnKQotICAgICAgOiB0eXBlXyhBVURJTykgewotICAgIGF1ZGlvX2RlY29kZXJfY29uZmlnXy5Db3B5RnJvbShhdWRpb19kZWNvZGVyX2NvbmZpZyk7Ci0gIH0KLSAgZXhwbGljaXQgRGVtdXhlclN0cmVhbUNhY2hlKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fZGVjb2Rlcl9jb25maWcpCi0gICAgICA6IHR5cGVfKFZJREVPKSB7Ci0gICAgdmlkZW9fZGVjb2Rlcl9jb25maWdfLkNvcHlGcm9tKHZpZGVvX2RlY29kZXJfY29uZmlnKTsKLSAgfQotCi0gIHZvaWQgQXBwZW5kKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVjb2RlckJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgIERDSEVDSyhidWZmZXIpOwotICAgIERDSEVDSyghYnVmZmVyLT5Jc0VuZE9mU3RyZWFtKCkpOwotICAgIGJ1ZmZlcnNfLnB1c2goYnVmZmVyKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gRGVtdXhlclN0cmVhbSBtZXRob2RzLgotICB2b2lkIFJlYWQoY29uc3QgUmVhZENCJiByZWFkX2NiKSBvdmVycmlkZSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBidWZmZXI7Ci0gICAgaWYgKGJ1ZmZlcnNfLmVtcHR5KCkpIHsKLSAgICAgIGJ1ZmZlciA9IERlY29kZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcihiYXNlOjpUaW1lRGVsdGEoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJ1ZmZlciA9IGJ1ZmZlcnNfLmZyb250KCk7Ci0gICAgICBidWZmZXJzXy5wb3AoKTsKLSAgICB9Ci0gICAgcmVhZF9jYi5SdW4oa09rLCBidWZmZXIpOwotICB9Ci0gIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fZGVjb2Rlcl9jb25maWcoKSBvdmVycmlkZSB7Ci0gICAgRENIRUNLX0VRKHR5cGVfLCBBVURJTyk7Ci0gICAgcmV0dXJuIGF1ZGlvX2RlY29kZXJfY29uZmlnXzsKLSAgfQotICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIHZpZGVvX2RlY29kZXJfY29uZmlnKCkgb3ZlcnJpZGUgewotICAgIERDSEVDS19FUSh0eXBlXywgVklERU8pOwotICAgIHJldHVybiB2aWRlb19kZWNvZGVyX2NvbmZpZ187Ci0gIH0KLSAgVHlwZSB0eXBlKCkgb3ZlcnJpZGUgeyByZXR1cm4gdHlwZV87IH0KLSAgdm9pZCBFbmFibGVCaXRzdHJlYW1Db252ZXJ0ZXIoKSBvdmVycmlkZSB7fQotICBib29sIFN0cmVhbVdhc0VuY3J5cHRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgVHlwZSB0eXBlXzsKLSAgQXVkaW9EZWNvZGVyQ29uZmlnIGF1ZGlvX2RlY29kZXJfY29uZmlnXzsKLSAgVmlkZW9EZWNvZGVyQ29uZmlnIHZpZGVvX2RlY29kZXJfY29uZmlnXzsKLSAgc3RkOjpxdWV1ZTxzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+ID4gYnVmZmVyc187Ci19OwotCi0vLyBBIERlbXV4ZXIgdGhhdCBjYWNoZXMgbWVkaWEgZGF0YSBpbiBtZW1vcnkuICBOb3RlIHRoYXQgaXQgaXMgb25seSBmb3IgdGVzdAotLy8gcHVycG9zZSBhbmQgbm8gc3luY2hyb25pemF0aW9uIGlzIHByb3ZpZGVkLgotY2xhc3MgRGVtdXhlckNhY2hlIDogcHVibGljIDo6bWVkaWE6OkRlbXV4ZXIgewotIHB1YmxpYzoKLSAgRGVtdXhlckNhY2hlKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVtdXhlcj4mIGRlbXV4ZXIsIHVpbnQ2NCBieXRlc190b19jYWNoZSwKLSAgICAgICAgICAgICAgIGNvbnN0IERlbXV4ZXJIZWxwZXI6OkRlbXV4ZXJSZWFkeUNCJiBkZW11eGVyX3JlYWR5X2NiKSB7Ci0gICAgaWYgKGRlbXV4ZXItPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTykpIHsKLSAgICAgIGF1ZGlvX3N0cmVhbV8gPSBuZXcgRGVtdXhlclN0cmVhbUNhY2hlKAotICAgICAgICAgIGRlbXV4ZXItPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpBVURJTyktPmF1ZGlvX2RlY29kZXJfY29uZmlnKCkpOwotICAgIH0KLSAgICBpZiAoZGVtdXhlci0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKSkgewotICAgICAgdmlkZW9fc3RyZWFtXyA9IG5ldyBEZW11eGVyU3RyZWFtQ2FjaGUoCi0gICAgICAgICAgZGVtdXhlci0+R2V0U3RyZWFtKERlbXV4ZXJTdHJlYW06OlZJREVPKS0+dmlkZW9fZGVjb2Rlcl9jb25maWcoKSk7Ci0gICAgfQotICAgIERDSEVDSyhhdWRpb19zdHJlYW1fIHx8IHZpZGVvX3N0cmVhbV8pOwotICAgIENhY2hlU3RhdGUgY2FjaGVfc3RhdGU7Ci0gICAgY2FjaGVfc3RhdGUuZGVtdXhlciA9IGRlbXV4ZXI7Ci0gICAgY2FjaGVfc3RhdGUuYnl0ZXNfdG9fY2FjaGUgPSBieXRlc190b19jYWNoZTsKLSAgICBjYWNoZV9zdGF0ZS5hdWRpb19lb3MgPSAhYXVkaW9fc3RyZWFtXzsKLSAgICBjYWNoZV9zdGF0ZS52aWRlb19lb3MgPSAhdmlkZW9fc3RyZWFtXzsKLSAgICBjYWNoZV9zdGF0ZS5kZW11eGVyX3JlYWR5X2NiID0gZGVtdXhlcl9yZWFkeV9jYjsKLQotICAgIGlmIChhdWRpb19zdHJlYW1fKSB7Ci0gICAgICBjYWNoZV9zdGF0ZS5sYXN0X3JlYWRfdHlwZSA9IERlbXV4ZXJTdHJlYW06OkFVRElPOwotICAgIH0gZWxzZSB7Ci0gICAgICBjYWNoZV9zdGF0ZS5sYXN0X3JlYWRfdHlwZSA9IERlbXV4ZXJTdHJlYW06OlZJREVPOwotICAgIH0KLSAgICBkZW11eGVyLT5HZXRTdHJlYW0oY2FjaGVfc3RhdGUubGFzdF9yZWFkX3R5cGUpCi0gICAgICAgIC0+UmVhZChCaW5kVG9DdXJyZW50TG9vcCgKLSAgICAgICAgICAgIGJhc2U6OkJpbmQoJkRlbXV4ZXJDYWNoZTo6Q2FjaGVCdWZmZXIsIHRoaXMsIGNhY2hlX3N0YXRlKSkpOwotICB9Ci0KLSBwcml2YXRlOgotICBzdHJ1Y3QgQ2FjaGVTdGF0ZSB7Ci0gICAgc2NvcGVkX3JlZnB0cjxEZW11eGVyPiBkZW11eGVyOwotICAgIHVpbnQ2NCBieXRlc190b19jYWNoZTsKLSAgICBiYXNlOjpUaW1lRGVsdGEgbGFzdF9hdWRpb19idWZmZXJfdGltZXN0YW1wOwotICAgIGJvb2wgYXVkaW9fZW9zOwotICAgIGJhc2U6OlRpbWVEZWx0YSBsYXN0X3ZpZGVvX2J1ZmZlcl90aW1lc3RhbXA7Ci0gICAgYm9vbCB2aWRlb19lb3M7Ci0gICAgRGVtdXhlckhlbHBlcjo6RGVtdXhlclJlYWR5Q0IgZGVtdXhlcl9yZWFkeV9jYjsKLSAgICBEZW11eGVyU3RyZWFtOjpUeXBlIGxhc3RfcmVhZF90eXBlOwotICB9OwotCi0gIHZvaWQgQ2FjaGVCdWZmZXIoQ2FjaGVTdGF0ZSBjYWNoZV9zdGF0ZSwgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBidWZmZXIpIHsKLSAgICBEQ0hFQ0tfRVEoc3RhdHVzLCBEZW11eGVyU3RyZWFtOjprT2spOwotICAgIERDSEVDSyhidWZmZXIpOwotCi0gICAgaWYgKGNhY2hlX3N0YXRlLmxhc3RfcmVhZF90eXBlID09IERlbXV4ZXJTdHJlYW06OkFVRElPKSB7Ci0gICAgICBpZiAoYnVmZmVyLT5Jc0VuZE9mU3RyZWFtKCkpIHsKLSAgICAgICAgY2FjaGVfc3RhdGUuYXVkaW9fZW9zID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhY2hlX3N0YXRlLmxhc3RfYXVkaW9fYnVmZmVyX3RpbWVzdGFtcCA9IGJ1ZmZlci0+R2V0VGltZXN0YW1wKCk7Ci0gICAgICAgIGlmIChjYWNoZV9zdGF0ZS5ieXRlc190b19jYWNoZSA+PSBidWZmZXItPkdldERhdGFTaXplKCkpIHsKLSAgICAgICAgICBjYWNoZV9zdGF0ZS5ieXRlc190b19jYWNoZSAtPSBidWZmZXItPkdldERhdGFTaXplKCk7Ci0gICAgICAgICAgYXVkaW9fc3RyZWFtXy0+QXBwZW5kKGJ1ZmZlcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2FjaGVfc3RhdGUuYnl0ZXNfdG9fY2FjaGUgPSAwOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIERDSEVDS19FUShjYWNoZV9zdGF0ZS5sYXN0X3JlYWRfdHlwZSwgRGVtdXhlclN0cmVhbTo6VklERU8pOwotICAgICAgaWYgKGJ1ZmZlci0+SXNFbmRPZlN0cmVhbSgpKSB7Ci0gICAgICAgIGNhY2hlX3N0YXRlLnZpZGVvX2VvcyA9IHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjYWNoZV9zdGF0ZS5sYXN0X3ZpZGVvX2J1ZmZlcl90aW1lc3RhbXAgPSBidWZmZXItPkdldFRpbWVzdGFtcCgpOwotICAgICAgICBpZiAoY2FjaGVfc3RhdGUuYnl0ZXNfdG9fY2FjaGUgPj0gYnVmZmVyLT5HZXREYXRhU2l6ZSgpKSB7Ci0gICAgICAgICAgY2FjaGVfc3RhdGUuYnl0ZXNfdG9fY2FjaGUgLT0gYnVmZmVyLT5HZXREYXRhU2l6ZSgpOwotICAgICAgICAgIHZpZGVvX3N0cmVhbV8tPkFwcGVuZChidWZmZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhY2hlX3N0YXRlLmJ5dGVzX3RvX2NhY2hlID0gMDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoKGNhY2hlX3N0YXRlLmF1ZGlvX2VvcyAmJiBjYWNoZV9zdGF0ZS52aWRlb19lb3MpIHx8Ci0gICAgICAgIGNhY2hlX3N0YXRlLmJ5dGVzX3RvX2NhY2hlID09IDApIHsKLSAgICAgIGNhY2hlX3N0YXRlLmRlbXV4ZXItPlN0b3AoYmFzZTo6QmluZChjYWNoZV9zdGF0ZS5kZW11eGVyX3JlYWR5X2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8RGVtdXhlcj4odGhpcykpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FjaGVfc3RhdGUubGFzdF9yZWFkX3R5cGUgPSBEZW11eGVyU3RyZWFtOjpBVURJTzsKLSAgICBpZiAoY2FjaGVfc3RhdGUuYXVkaW9fZW9zKSB7Ci0gICAgICBjYWNoZV9zdGF0ZS5sYXN0X3JlYWRfdHlwZSA9IERlbXV4ZXJTdHJlYW06OlZJREVPOwotICAgIH0gZWxzZSBpZiAoIWNhY2hlX3N0YXRlLnZpZGVvX2VvcykgewotICAgICAgaWYgKGNhY2hlX3N0YXRlLmxhc3RfdmlkZW9fYnVmZmVyX3RpbWVzdGFtcCA8Ci0gICAgICAgICAgY2FjaGVfc3RhdGUubGFzdF9hdWRpb19idWZmZXJfdGltZXN0YW1wKSB7Ci0gICAgICAgIGNhY2hlX3N0YXRlLmxhc3RfcmVhZF90eXBlID0gRGVtdXhlclN0cmVhbTo6VklERU87Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY2FjaGVfc3RhdGUuZGVtdXhlci0+R2V0U3RyZWFtKGNhY2hlX3N0YXRlLmxhc3RfcmVhZF90eXBlKQotICAgICAgICAtPlJlYWQoQmluZFRvQ3VycmVudExvb3AoCi0gICAgICAgICAgICBiYXNlOjpCaW5kKCZEZW11eGVyQ2FjaGU6OkNhY2hlQnVmZmVyLCB0aGlzLCBjYWNoZV9zdGF0ZSkpKTsKLSAgfQotCi0gIC8vIERlbXV4ZXIgbWV0aG9kcy4KLSAgdm9pZCBJbml0aWFsaXplKDo6bWVkaWE6OkRlbXV4ZXJIb3N0KiBob3N0LAotICAgICAgICAgICAgICAgICAgY29uc3QgOjptZWRpYTo6UGlwZWxpbmVTdGF0dXNDQiYgc3RhdHVzX2NiKSBvdmVycmlkZSB7Ci0gICAgTk9UUkVBQ0hFRCgpOwotICB9Ci0gIHZvaWQgU3RvcChjb25zdCBiYXNlOjpDbG9zdXJlJiBjYWxsYmFjaykgb3ZlcnJpZGUgewotICAgIERDSEVDSyghY2FsbGJhY2suaXNfbnVsbCgpKTsKLSAgICBjYWxsYmFjay5SdW4oKTsKLSAgfQotICBzY29wZWRfcmVmcHRyPERlbXV4ZXJTdHJlYW0+IEdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpUeXBlIHR5cGUpIG92ZXJyaWRlIHsKLSAgICBpZiAodHlwZSA9PSBEZW11eGVyU3RyZWFtOjpBVURJTykgewotICAgICAgcmV0dXJuIGF1ZGlvX3N0cmVhbV87Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IERlbXV4ZXJTdHJlYW06OlZJREVPKSB7Ci0gICAgICByZXR1cm4gdmlkZW9fc3RyZWFtXzsKLSAgICB9Ci0gICAgTk9UUkVBQ0hFRCgpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIGJhc2U6OlRpbWVEZWx0YSBHZXRTdGFydFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBiYXNlOjpUaW1lRGVsdGEoKTsgfQotCi0gIHNjb3BlZF9yZWZwdHI8RGVtdXhlclN0cmVhbUNhY2hlPiBhdWRpb19zdHJlYW1fOwotICBzY29wZWRfcmVmcHRyPERlbXV4ZXJTdHJlYW1DYWNoZT4gdmlkZW9fc3RyZWFtXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBEZW11eGVySGVscGVyOjpEZW11eGVySG9zdFN0dWIgOiBwdWJsaWMgOjptZWRpYTo6RGVtdXhlckhvc3QgewotIHByaXZhdGU6Ci0gIC8vIERhdGFTb3VyY2VIb3N0IG1ldGhvZHMKLSAgdm9pZCBTZXRUb3RhbEJ5dGVzKGludDY0IHRvdGFsX2J5dGVzKSBvdmVycmlkZSB7fQotICB2b2lkIEFkZEJ1ZmZlcmVkQnl0ZVJhbmdlKGludDY0IHN0YXJ0LCBpbnQ2NCBlbmQpIG92ZXJyaWRlIHt9Ci0gIHZvaWQgQWRkQnVmZmVyZWRUaW1lUmFuZ2UoYmFzZTo6VGltZURlbHRhIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSBlbmQpIG92ZXJyaWRlIHt9Ci0KLSAgLy8gRGVtdXhlckhvc3QgbWV0aG9kcwotICB2b2lkIFNldER1cmF0aW9uKGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbikgb3ZlcnJpZGUge30KLSAgdm9pZCBPbkRlbXV4ZXJFcnJvcig6Om1lZGlhOjpQaXBlbGluZVN0YXR1cyBlcnJvcikgb3ZlcnJpZGUge30KLX07Ci0KLURlbXV4ZXJIZWxwZXI6OkRlbXV4ZXJIZWxwZXIoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVkaWFfbWVzc2FnZV9sb29wLAotICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwgY29uc3QgR1VSTCYgdmlkZW9fdXJsLAotICAgIGNvbnN0IERlbXV4ZXJSZWFkeUNCJiBkZW11eGVyX3JlYWR5X2NiKQotICAgIDogaG9zdF8obmV3IERlbXV4ZXJIb3N0U3R1YikgewotICBDcmVhdGVEZW11eGVyKG1lZGlhX21lc3NhZ2VfbG9vcCwgZmV0Y2hlcl9mYWN0b3J5LCB2aWRlb191cmwsCi0gICAgICAgICAgICAgICAgZGVtdXhlcl9yZWFkeV9jYiwgMCk7Ci19Ci0KLURlbXV4ZXJIZWxwZXI6OkRlbXV4ZXJIZWxwZXIoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVkaWFfbWVzc2FnZV9sb29wLAotICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwgY29uc3QgR1VSTCYgdmlkZW9fdXJsLAotICAgIGNvbnN0IERlbXV4ZXJSZWFkeUNCJiBkZW11eGVyX3JlYWR5X2NiLCB1aW50NjQgYnl0ZXNfdG9fY2FjaGUpCi0gICAgOiBob3N0XyhuZXcgRGVtdXhlckhvc3RTdHViKSB7Ci0gIERDSEVDS19HRShieXRlc190b19jYWNoZSwgMCk7Ci0KLSAgQ3JlYXRlRGVtdXhlcihtZWRpYV9tZXNzYWdlX2xvb3AsIGZldGNoZXJfZmFjdG9yeSwgdmlkZW9fdXJsLAotICAgICAgICAgICAgICAgIGRlbXV4ZXJfcmVhZHlfY2IsIGJ5dGVzX3RvX2NhY2hlKTsKLX0KLQotRGVtdXhlckhlbHBlcjo6fkRlbXV4ZXJIZWxwZXIoKSB7IGRlbGV0ZSBob3N0XzsgfQotCi12b2lkIERlbXV4ZXJIZWxwZXI6OkNyZWF0ZURlbXV4ZXIoCi0gICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVkaWFfbWVzc2FnZV9sb29wLAotICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwgY29uc3QgR1VSTCYgdmlkZW9fdXJsLAotICAgIGNvbnN0IERlbXV4ZXJSZWFkeUNCJiBkZW11eGVyX3JlYWR5X2NiLCB1aW50NjQgYnl0ZXNfdG9fY2FjaGUpIHsKLSAgRENIRUNLKG1lZGlhX21lc3NhZ2VfbG9vcCk7Ci0gIERDSEVDSyhmZXRjaGVyX2ZhY3RvcnkpOwotICBEQ0hFQ0soIWRlbXV4ZXJfcmVhZHlfY2IuaXNfbnVsbCgpKTsKLQotICBzY29wZWRfcmVmcHRyPEZldGNoZXJCdWZmZXJlZERhdGFTb3VyY2U+IGRhdGFfc291cmNlKAotICAgICAgbmV3IEZldGNoZXJCdWZmZXJlZERhdGFTb3VyY2UobWVkaWFfbWVzc2FnZV9sb29wLCB2aWRlb191cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3A6OlNlY3VyaXR5Q2FsbGJhY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoZXJfZmFjdG9yeS0+bmV0d29ya19tb2R1bGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcjo6a05vQ09SU01vZGUsIGxvYWRlcjo6T3JpZ2luKCkpKTsKLSAgc2NvcGVkX3JlZnB0cjxEZW11eGVyPiBkZW11eGVyID0KLSAgICAgIG5ldyA6Om1lZGlhOjpQcm9ncmVzc2l2ZURlbXV4ZXIobWVkaWFfbWVzc2FnZV9sb29wLCBkYXRhX3NvdXJjZSk7Ci0gIGRlbXV4ZXItPkluaXRpYWxpemUoCi0gICAgICBob3N0XywgYmFzZTo6QmluZCgmRGVtdXhlckhlbHBlcjo6T25EZW11eGVyUmVhZHksIGJhc2U6OlVucmV0YWluZWQodGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICBkZW11eGVyLCBkZW11eGVyX3JlYWR5X2NiLCBieXRlc190b19jYWNoZSkpOwotfQotCi12b2lkIERlbXV4ZXJIZWxwZXI6Ok9uRGVtdXhlclJlYWR5KGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVtdXhlcj4mIGRlbXV4ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERlbXV4ZXJSZWFkeUNCJiBkZW11eGVyX3JlYWR5X2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgYnl0ZXNfdG9fY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIHN0YXR1cykgewotICBEQ0hFQ0tfRVEoc3RhdHVzLCA6Om1lZGlhOjpQSVBFTElORV9PSyk7Ci0KLSAgaWYgKGJ5dGVzX3RvX2NhY2hlID09IDApIHsKLSAgICBkZW11eGVyX3JlYWR5X2NiLlJ1bihkZW11eGVyKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBUaGUgbmV3bHkgY3JlYXRlZCBvYmplY3QgaXMgcmVmZXJlbmNlIGNvdW50ZWQgYW5kIHdpbGwgYmUgcGFzc2VkIGJhY2sKLSAgLy8gdGhyb3VnaCBkZW11eGVyX3JlYWR5X2NiLgotICBuZXcgRGVtdXhlckNhY2hlKGRlbXV4ZXIsIGJ5dGVzX3RvX2NhY2hlLCBkZW11eGVyX3JlYWR5X2NiKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHNhbmRib3gKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3NhbmRib3gvZGVtdXhlcl9oZWxwZXIuaCBiL2NvYmFsdC9tZWRpYS9zYW5kYm94L2RlbXV4ZXJfaGVscGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDUxZDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvZGVtdXhlcl9oZWxwZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfU0FOREJPWF9ERU1VWEVSX0hFTFBFUl9IXwotI2RlZmluZSBDT0JBTFRfTUVESUFfU0FOREJPWF9ERU1VWEVSX0hFTFBFUl9IXwotCi0jaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgotI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCi0jaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCi0jaW5jbHVkZSAiY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyLmgiCi0jaW5jbHVkZSAidXJsL2d1cmwuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIHNhbmRib3ggewotCi0vLyBUaGlzIGNsYXNzIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIERlbXV4ZXIgYW5kIHRoZW4gY2FsbCB0aGUgY2FsbGJhY2sKLS8vIHByb3ZpZGVkLiAgSXQgY2FuIGFsc28gY2FjaGUgbWVkaWEgZGF0YSBpbiBtZW1vcnkgdG8gYXZvaWQgYW55IEkvTyBkdXJpbmcKLS8vIHBsYXliYWNrLgotY2xhc3MgRGVtdXhlckhlbHBlciB7Ci0gcHVibGljOgotICB0eXBlZGVmIDo6bWVkaWE6OkRlbXV4ZXIgRGVtdXhlcjsKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IHNjb3BlZF9yZWZwdHI8RGVtdXhlcj4mKT4gRGVtdXhlclJlYWR5Q0I7Ci0KLSAgRGVtdXhlckhlbHBlcigKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIG1lZGlhX21lc3NhZ2VfbG9vcCwKLSAgICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwgY29uc3QgR1VSTCYgdmlkZW9fdXJsLAotICAgICAgY29uc3QgRGVtdXhlclJlYWR5Q0ImIGRlbXV4ZXJfcmVhZHlfY2IpOwotICAvLyBUaGlzIGN0b3Igd2lsbCBjcmVhdGUgYW4gRGVtdXhlciBpbnRlcm5hbGx5IHRoYXQgY2FjaGVzIHRoZSBtZWRpYSBkYXRhIGluCi0gIC8vIG1lbW9yeSBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2suICBUaGlzIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubyBJL08KLSAgLy8gaW5jdXJyZWQgZHVyaW5nIHBsYXliYWNrLgotICBEZW11eGVySGVscGVyKAotICAgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiYgbWVkaWFfbWVzc2FnZV9sb29wLAotICAgICAgbG9hZGVyOjpGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5LCBjb25zdCBHVVJMJiB2aWRlb191cmwsCi0gICAgICBjb25zdCBEZW11eGVyUmVhZHlDQiYgZGVtdXhlcl9yZWFkeV9jYiwgdWludDY0IGJ5dGVzX3RvX2NhY2hlKTsKLSAgfkRlbXV4ZXJIZWxwZXIoKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgQ3JlYXRlRGVtdXhlcigKLSAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4mIG1lZGlhX21lc3NhZ2VfbG9vcCwKLSAgICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwgY29uc3QgR1VSTCYgdmlkZW9fdXJsLAotICAgICAgY29uc3QgRGVtdXhlclJlYWR5Q0ImIGRlbXV4ZXJfcmVhZHlfY2IsIHVpbnQ2NCBieXRlc190b19jYWNoZSk7Ci0gIHZvaWQgT25EZW11eGVyUmVhZHkoY29uc3Qgc2NvcGVkX3JlZnB0cjxEZW11eGVyPiYgZGVtdXhlciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEZW11eGVyUmVhZHlDQiYgcmVhZHlfY2IsIHVpbnQ2NCBieXRlc190b19jYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICA6Om1lZGlhOjpQaXBlbGluZVN0YXR1cyBzdGF0dXMpOwotCi0gIGNsYXNzIERlbXV4ZXJIb3N0U3R1YjsKLSAgRGVtdXhlckhvc3RTdHViKiBob3N0XzsKLQotICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoRGVtdXhlckhlbHBlcik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugc2FuZGJveAotfSAgLy8gbmFtZXNwYWNlIG1lZGlhCi19ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gQ09CQUxUX01FRElBX1NBTkRCT1hfREVNVVhFUl9IRUxQRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L2Zvcm1hdF9ndWVzc3RpbWF0b3IuY2MgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9mb3JtYXRfZ3Vlc3N0aW1hdG9yLmNjCmluZGV4IGE2MTZkNTMuLmFiYWM5ZjYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L2Zvcm1hdF9ndWVzc3RpbWF0b3IuY2MKKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvZm9ybWF0X2d1ZXNzdGltYXRvci5jYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9zYW5kYm94L2Zvcm1hdF9ndWVzc3RpbWF0b3IuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCkBAIC0yMiwyMiArMjMsMjMgQEAKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX3NwbGl0LmgiCiAjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ191dGlsLmgiCiAjaW5jbHVkZSAiYmFzZS90aW1lL3RpbWUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fY29kZWNzLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL21lZGlhX3RyYWNrcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2NvZGVjcy5oIgotI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfaGVscGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcl90cmVlL2ltYWdlLmgiCisjaW5jbHVkZSAibWVkaWEvYmFzZS9hdWRpb19jb2RlY3MuaCIKKyNpbmNsdWRlICJtZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCisjaW5jbHVkZSAibWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oIgorI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfdHJhY2tzLmgiCisjaW5jbHVkZSAibWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCIKKyNpbmNsdWRlICJtZWRpYS9iYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiCisjaW5jbHVkZSAibWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgiCiAjaW5jbHVkZSAibmV0L2Jhc2UvZmlsZW5hbWVfdXRpbC5oIgogI2luY2x1ZGUgIm5ldC9iYXNlL3VybF91dGlsLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9maWxlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9zaXplLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTQ1LDYgKzQ3LDggQEAKIAogbmFtZXNwYWNlIHsKIAordXNpbmcgOjptZWRpYTo6Q2h1bmtEZW11eGVyOworCiAvLyBUaGUgcG9zc2libGUgbWltZSB0eXBlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBjb2JhbHQuCiBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga1N1cHBvcnRlZE1pbWVUeXBlcyA9IHsKICAgICAiYXVkaW8vbXA0OyBjb2RlY3M9XCJhYy0zXCIiLApAQCAtNzgsNiArODIsOCBAQAogICBpZiAoU2JGaWxlQ2FuT3BlbihyZXN1bHQudmFsdWUoKS5jX3N0cigpLCBrU2JGaWxlT3Blbk9ubHkgfCBrU2JGaWxlUmVhZCkpIHsKICAgICByZXR1cm4gcmVzdWx0OwogICB9CisgIExPRyhXQVJOSU5HKSA8PCAiRmFpbGVkIHRvIHJlc29sdmUgcGF0aCBcIiIgPDwgcGF0aCA8PCAiXCIgYXMgXCIiCisgICAgICAgICAgICAgICA8PCByZXN1bHQudmFsdWUoKSA8PCAnIic7CiAgIHJldHVybiBiYXNlOjpGaWxlUGF0aCgpOwogfQogCkBAIC05OSwxNCArMTA1LDEzIEBACiAgIHJldHVybiBidWZmZXI7CiB9CiAKLXZvaWQgT25Jbml0U2VnbWVudFJlY2VpdmVkKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKSB7Ci19Cit2b2lkIE9uSW5pdFNlZ21lbnRSZWNlaXZlZChzdGQ6OnVuaXF1ZV9wdHI8OjptZWRpYTo6TWVkaWFUcmFja3M+IHRyYWNrcykge30KIAogLy8gRXh0cmFjdCB0aGUgdmFsdWUgb2YgImNvZGVjcyIgcGFyYW1ldGVyIGZyb20gY29udGVudCB0eXBlLiBJdCB3aWxsIHJldHVybgogLy8gImF2YzEuNDJFMDFFIiBmb3IgInZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjQyRTAxRSIuCiAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyB2YWxpZCBhbmQgZG9lcwogLy8gbWluaW11bSB2YWxpZGF0aW9uLi4KLXN0ZDo6c3RyaW5nIEV4dHJhY3RDb2RlYyhjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudF90eXBlKSB7CitzdGQ6OnN0cmluZyBFeHRyYWN0Q29kZWNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50X3R5cGUpIHsKICAgc3RhdGljIGNvbnN0IGNoYXIga0NvZGVjc1tdID0gImNvZGVjcz0iOwogCiAgIC8vIFNwbGl0U3RyaW5nIHdpbGwgYWxzbyB0cmltIHRoZSByZXN1bHRzLgpAQCAtMTY3LDcgKzE3Miw3IEBACiAgICAgLy8gb2J0YWluIGEgaGFuZGxlIHRvIGEgbmV3IHxDaHVua0RlbXV4ZXJ8IHdpdGhvdXQgYW55IGFjY3VtdWxhdGVkIHN0YXRlIGFzCiAgICAgLy8gYSByZXN1bHQgb2YgcHJldmlvdXMgY2FsbHMgdG8gfEFkZElkfCBhbmQgfEFwcGVuZERhdGF8IG1ldGhvZHMuCiAgICAgV2ViTWVkaWFQbGF5ZXJIZWxwZXIgd2ViX21lZGlhX3BsYXllcl9oZWxwZXIobWVkaWFfbW9kdWxlLCBvcGVuX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlNpemUoMTkyMCwgMTA4MCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdmeDo6U2l6ZSgxOTIwLCAxMDgwKSk7CiAKICAgICAvLyB8Y2h1bmtfZGVtdXhlcnwgd2lsbCBiZSBzZXQgd2hlbiB8b3Blbl9jYnwgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5CiAgICAgLy8gZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIHx3ZWJfbWVkaWFfcGxheWVyX2hlbHBlcnwuIFdhaXQgdW50aWwgaXQgaXMgc2V0CkBAIC0xODMsMTEgKzE4OCwxNiBAQAogICAgIH0KIAogICAgIGNodW5rX2RlbXV4ZXItPlNldFRyYWNrc1dhdGNoZXIoaWQsIGJhc2U6OkJpbmQoT25Jbml0U2VnbWVudFJlY2VpdmVkKSk7CisgICAgY2h1bmtfZGVtdXhlci0+U2V0UGFyc2VXYXJuaW5nQ2FsbGJhY2soCisgICAgICAgIGlkLCBiYXNlOjpCaW5kUmVwZWF0aW5nKFtdKDo6bWVkaWE6OlNvdXJjZUJ1ZmZlclBhcnNlV2FybmluZyB3YXJuaW5nKSB7CisgICAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBTb3VyY2VCdWZmZXJQYXJzZVdhcm5pbmcgIgorICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxpbnQ+KHdhcm5pbmcpOworICAgICAgICB9KSk7CiAKICAgICBiYXNlOjpUaW1lRGVsdGEgdW51c2VkX3RpbWVzdGFtcDsKLSAgICBpZiAoIWNodW5rX2RlbXV4ZXItPkFwcGVuZERhdGEoaWQsIGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSgpLCBtZWRpYTo6a0luZmluaXRlRHVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bnVzZWRfdGltZXN0YW1wKSkgeworICAgIGlmICghY2h1bmtfZGVtdXhlci0+QXBwZW5kRGF0YSgKKyAgICAgICAgICAgIGlkLCBoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpLCBiYXNlOjpUaW1lRGVsdGEoKSwKKyAgICAgICAgICAgIDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uLCAmdW51c2VkX3RpbWVzdGFtcCkpIHsKICAgICAgIC8vIEZhaWxpbmcgdG8gfEFwcGVuZERhdGEoKXwgbWVhbnMgdGhlIGNob3NlbiBmb3JtYXQgaXMgbm90IHRoZSBmaWxlJ3MKICAgICAgIC8vIHRydWUgZm9ybWF0LgogICAgICAgY29udGludWU7CkBAIC0xOTcsMjQgKzIwNywyMyBAQAogICAgIC8vIGNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkZXRlcm1pbmVkIGJ5IHRoZQogICAgIC8vIENodW5rRGVtdXhlcikuIFRvIGNvbmZpcm0sIHdlIGNoZWNrIHRoZSBkZWNvZGVyIGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5lZAogICAgIC8vIGJ5IHRoZSBDaHVua0RlbXV4ZXIgYWdhaW5zdCB0aGUgY2hvc2VuIGZvcm1hdC4KLSAgICBpZiAoYXV0byBkZW11eGVyX3N0cmVhbSA9Ci0gICAgICAgICAgICBjaHVua19kZW11eGVyLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VHlwZTo6QVVESU8pKSB7Ci0gICAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGRlY29kZXJfY29uZmlnID0KLSAgICAgICAgICBkZW11eGVyX3N0cmVhbS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKLSAgICAgIGlmIChTdHJpbmdUb0F1ZGlvQ29kZWMoRXh0cmFjdENvZGVjKGV4cGVjdGVkX3N1cHBvcnRlZF9taW1lX3R5cGUpKSA9PQotICAgICAgICAgIGRlY29kZXJfY29uZmlnLmNvZGVjKCkpIHsKKyAgICBhdXRvIHN0cmVhbXMgPSBjaHVua19kZW11eGVyLT5HZXRBbGxTdHJlYW1zKCk7CisgICAgRENIRUNLX0VRKHN0cmVhbXMuc2l6ZSgpLCAxKTsKKworICAgIGlmIChzdHJlYW1zWzBdLT50eXBlKCkgPT0gOjptZWRpYTo6RGVtdXhlclN0cmVhbTo6QVVESU8pIHsKKyAgICAgIGNvbnN0IGF1dG8mIGRlY29kZXJfY29uZmlnID0gc3RyZWFtc1swXS0+YXVkaW9fZGVjb2Rlcl9jb25maWcoKTsKKyAgICAgIGlmICg6Om1lZGlhOjpTdHJpbmdUb0F1ZGlvQ29kZWMoRXh0cmFjdENvZGVjcygKKyAgICAgICAgICAgICAgZXhwZWN0ZWRfc3VwcG9ydGVkX21pbWVfdHlwZSkpID09IGRlY29kZXJfY29uZmlnLmNvZGVjKCkpIHsKICAgICAgICAgYWRhcHRpdmVfcGF0aF8gPSBwYXRoOwogICAgICAgICBtaW1lX3R5cGVfID0gZXhwZWN0ZWRfc3VwcG9ydGVkX21pbWVfdHlwZTsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgYXV0byBkZW11eGVyX3N0cmVhbSA9IGNodW5rX2RlbXV4ZXItPkdldFN0cmVhbShEZW11eGVyU3RyZWFtOjpUeXBlOjpWSURFTyk7Ci0gICAgRENIRUNLKGRlbXV4ZXJfc3RyZWFtKTsKLSAgICBjb25zdCBWaWRlb0RlY29kZXJDb25maWcmIGRlY29kZXJfY29uZmlnID0KLSAgICAgICAgZGVtdXhlcl9zdHJlYW0tPnZpZGVvX2RlY29kZXJfY29uZmlnKCk7Ci0gICAgaWYgKFN0cmluZ1RvVmlkZW9Db2RlYyhFeHRyYWN0Q29kZWMoZXhwZWN0ZWRfc3VwcG9ydGVkX21pbWVfdHlwZSkpID09Ci0gICAgICAgIGRlY29kZXJfY29uZmlnLmNvZGVjKCkpIHsKKyAgICBEQ0hFQ0tfRVEoc3RyZWFtc1swXS0+dHlwZSgpLCA6Om1lZGlhOjpEZW11eGVyU3RyZWFtOjpWSURFTyk7CisgICAgY29uc3QgYXV0byYgZGVjb2Rlcl9jb25maWcgPSBzdHJlYW1zWzBdLT52aWRlb19kZWNvZGVyX2NvbmZpZygpOworICAgIGlmICg6Om1lZGlhOjpTdHJpbmdUb1ZpZGVvQ29kZWMoRXh0cmFjdENvZGVjcygKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1cHBvcnRlZF9taW1lX3R5cGUpKSA9PSBkZWNvZGVyX2NvbmZpZy5jb2RlYygpKSB7CiAgICAgICBhZGFwdGl2ZV9wYXRoXyA9IHBhdGg7CiAgICAgICBtaW1lX3R5cGVfID0gZXhwZWN0ZWRfc3VwcG9ydGVkX21pbWVfdHlwZTsKICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3NhbmRib3gvZnV6emVyX2FwcC5jYyBiL2NvYmFsdC9tZWRpYS9zYW5kYm94L2Z1enplcl9hcHAuY2MKaW5kZXggOWI0ODUzZi4uNDllYTAyYiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvZnV6emVyX2FwcC5jYworKysgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9mdXp6ZXJfYXBwLmNjCkBAIC0xNCw2ICsxNCw4IEBACiAKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvc2FuZGJveC9mdXp6ZXJfYXBwLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiYmFzZS9maWxlcy9maWxlX3V0aWwuaCIKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgpAQCAtMTE0LDIxICsxMTYsMTIgQEAKICAgICByZXR1cm47CiAgIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHN0ZDo6dmVjdG9yPGNoYXI+IGVudHJ5KGtTYkZpbGVNYXhOYW1lKTsKIAogICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KGRpcmVjdG9yeSwgZW50cnkuZGF0YSgpLCBlbnRyeS5zaXplKCkpKSB7CiAgICAgc3RkOjpzdHJpbmcgZmlsZV9uYW1lID0gcGF0aF9uYW1lICsga1NiRmlsZVNlcFN0cmluZyArIGVudHJ5LmRhdGEoKTsKICAgICBBZGRGaWxlKGZpbGVfbmFtZSwgbWluX3JhdGlvLCBtYXhfcmF0aW8sIGluaXRpYWxfc2VlZCk7CiAgIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgU2JEaXJlY3RvcnlFbnRyeSBlbnRyeTsKLQotICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KGRpcmVjdG9yeSwgJmVudHJ5KSkgewotICAgIHN0ZDo6c3RyaW5nIGZpbGVfbmFtZSA9IHBhdGhfbmFtZSArIGtTYkZpbGVTZXBTdHJpbmcgKyBlbnRyeS5uYW1lOwotICAgIEFkZEZpbGUoZmlsZV9uYW1lLCBtaW5fcmF0aW8sIG1heF9yYXRpbywgaW5pdGlhbF9zZWVkKTsKLSAgfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgIFNiRGlyZWN0b3J5Q2xvc2UoZGlyZWN0b3J5KTsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L2luX21lbW9yeV9kYXRhX3NvdXJjZS5jYyBiL2NvYmFsdC9tZWRpYS9zYW5kYm94L2luX21lbW9yeV9kYXRhX3NvdXJjZS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzNDYwMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvc2FuZGJveC9pbl9tZW1vcnlfZGF0YV9zb3VyY2UuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvc2FuZGJveC9pbl9tZW1vcnlfZGF0YV9zb3VyY2UuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0KLW5hbWVzcGFjZSBjb2JhbHQgewotbmFtZXNwYWNlIG1lZGlhIHsKLW5hbWVzcGFjZSBzYW5kYm94IHsKLQotSW5NZW1vcnlEYXRhU291cmNlOjpJbk1lbW9yeURhdGFTb3VyY2UoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDg+JiBjb250ZW50KQotICAgIDogY29udGVudF8oY29udGVudCkge30KLQotdm9pZCBJbk1lbW9yeURhdGFTb3VyY2U6OlJlYWQoaW50NjQgcG9zaXRpb24sIGludCBzaXplLCB1aW50OCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlYWRDQiYgcmVhZF9jYikgewotICBEQ0hFQ0soZGF0YSk7Ci0KLSAgaWYgKHBvc2l0aW9uIDwgMCB8fCBzaXplIDwgMCkgewotICAgIHJlYWRfY2IuUnVuKGtJbnZhbGlkU2l6ZSk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgdWludDY0IHVpbnQ2NF9wb3NpdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ2ND4ocG9zaXRpb24pOwotCi0gIGlmICh1aW50NjRfcG9zaXRpb24gPiBjb250ZW50Xy5zaXplKCkgfHwKLSAgICAgIHVpbnQ2NF9wb3NpdGlvbiArIHNpemUgPiBjb250ZW50Xy5zaXplKCkpIHsKLSAgICByZWFkX2NiLlJ1bihrSW52YWxpZFNpemUpOwotICAgIHJldHVybjsKLSAgfQotCi0gIGlmIChzaXplID09IDApIHsKLSAgICByZWFkX2NiLlJ1bigwKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBtZW1jcHkoZGF0YSwgJmNvbnRlbnRfWzBdICsgcG9zaXRpb24sIHNpemUpOwotICByZWFkX2NiLlJ1bihzaXplKTsKLX0KLQotdm9pZCBJbk1lbW9yeURhdGFTb3VyY2U6OlN0b3AoKSB7fQotCi1ib29sIEluTWVtb3J5RGF0YVNvdXJjZTo6R2V0U2l6ZShpbnQ2NCogc2l6ZV9vdXQpIHsKLSAgRENIRUNLKHNpemVfb3V0KTsKLSAgKnNpemVfb3V0ID0gY29udGVudF8uc2l6ZSgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHNhbmRib3gKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3NhbmRib3gvaW5fbWVtb3J5X2RhdGFfc291cmNlLmggYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9pbl9tZW1vcnlfZGF0YV9zb3VyY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEyMmRiNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvc2FuZGJveC9pbl9tZW1vcnlfZGF0YV9zb3VyY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBDT0JBTFRfTUVESUFfU0FOREJPWF9JTl9NRU1PUllfREFUQV9TT1VSQ0VfSF8KLSNkZWZpbmUgQ09CQUxUX01FRElBX1NBTkRCT1hfSU5fTUVNT1JZX0RBVEFfU09VUkNFX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJiYXNlL2NvbXBpbGVyX3NwZWNpZmljLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvZGF0YV9zb3VyY2UuaCIKLQotbmFtZXNwYWNlIGNvYmFsdCB7Ci1uYW1lc3BhY2UgbWVkaWEgewotbmFtZXNwYWNlIHNhbmRib3ggewotCi0vLyBBIEJ1ZmZlcmVkRGF0YVNvdXJjZSB0aGF0IGtlZXBzIGFsbCBpdHMgZGF0YSBpbiBtZW1vcnkuICBUaGlzIGlzIHVzZWQgZm9yCi0vLyB0ZXN0aW5nIG9yIGZ1enppbmcgb25seS4KLWNsYXNzIEluTWVtb3J5RGF0YVNvdXJjZSA6IHB1YmxpYyA6Om1lZGlhOjpEYXRhU291cmNlIHsKLSBwdWJsaWM6Ci0gIHN0YXRpYyBjb25zdCBpbnQ2NCBrSW52YWxpZFNpemUgPSAtMTsKLQotICBleHBsaWNpdCBJbk1lbW9yeURhdGFTb3VyY2UoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDg+JiBjb250ZW50KTsKLQotICAvLyBEYXRhU291cmNlIG1ldGhvZHMuCi0gIHZvaWQgUmVhZChpbnQ2NCBwb3NpdGlvbiwgaW50IHNpemUsIHVpbnQ4KiBkYXRhLAotICAgICAgICAgICAgY29uc3QgUmVhZENCJiByZWFkX2NiKSBvdmVycmlkZTsKLSAgdm9pZCBTdG9wKCkgb3ZlcnJpZGU7Ci0gIGJvb2wgR2V0U2l6ZShpbnQ2NCogc2l6ZV9vdXQpIG92ZXJyaWRlOwotICBib29sIElzU3RyZWFtaW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgdm9pZCBTZXRCaXRyYXRlKGludCBiaXRyYXRlKSBvdmVycmlkZSB7fQotCi0gcHJpdmF0ZToKLSAgc3RkOjp2ZWN0b3I8dWludDg+IGNvbnRlbnRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHNhbmRib3gKLX0gIC8vIG5hbWVzcGFjZSBtZWRpYQotfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIENPQkFMVF9NRURJQV9TQU5EQk9YX0lOX01FTU9SWV9EQVRBX1NPVVJDRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3NhbmRib3gvbWVkaWEyX3NhbmRib3guY2MgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9tZWRpYTJfc2FuZGJveC5jYwppbmRleCA4ODE2ODM5Li5jYjg5YjIzIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvc2FuZGJveC9tZWRpYTJfc2FuZGJveC5jYworKysgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9tZWRpYTJfc2FuZGJveC5jYwpAQCAtMTksMTEgKzE5LDExIEBACiAjaW5jbHVkZSAiYmFzZS9wYXRoX3NlcnZpY2UuaCIKICNpbmNsdWRlICJiYXNlL3Rhc2svdGFza19zY2hlZHVsZXIvdGFza19zY2hlZHVsZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS93cmFwX21haW4uaCIKLSNpbmNsdWRlICJjb2JhbHQvbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V2ZW50LmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9sb2cuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewpAQCAtMzEsMjggKzMxLDI2IEBACiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIERlbXV4ZXJIb3N0U3R1YiA6IHB1YmxpYyBEZW11eGVySG9zdCB7Cit1c2luZyA6Om1lZGlhOjpDaHVua0RlbXV4ZXI7Cit1c2luZyA6Om1lZGlhOjpEZW11eGVyU3RyZWFtOworCitjbGFzcyBEZW11eGVySG9zdFN0dWIgOiBwdWJsaWMgOjptZWRpYTo6RGVtdXhlckhvc3QgewogICB2b2lkIE9uQnVmZmVyZWRUaW1lUmFuZ2VzQ2hhbmdlZCgKLSAgICAgIGNvbnN0IFJhbmdlczxiYXNlOjpUaW1lRGVsdGE+JiByYW5nZXMpIG92ZXJyaWRlIHt9CisgICAgICBjb25zdCA6Om1lZGlhOjpSYW5nZXM8YmFzZTo6VGltZURlbHRhPiYgcmFuZ2VzKSBvdmVycmlkZSB7fQogCiAgIHZvaWQgU2V0RHVyYXRpb24oYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uKSBvdmVycmlkZSB7fQogCi0gIHZvaWQgT25EZW11eGVyRXJyb3IoUGlwZWxpbmVTdGF0dXMgZXJyb3IpIG92ZXJyaWRlIHt9Ci0KLSAgdm9pZCBBZGRUZXh0U3RyZWFtKERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dFRyYWNrQ29uZmlnJiBjb25maWcpIG92ZXJyaWRlIHt9Ci0KLSAgdm9pZCBSZW1vdmVUZXh0U3RyZWFtKERlbXV4ZXJTdHJlYW0qIHRleHRfc3RyZWFtKSBvdmVycmlkZSB7fQorICB2b2lkIE9uRGVtdXhlckVycm9yKDo6bWVkaWE6OlBpcGVsaW5lU3RhdHVzIGVycm9yKSBvdmVycmlkZSB7fQogfTsKIAogdm9pZCBPbkRlbXV4ZXJPcGVuKCkge30KIAotdm9pZCBPbkVuY3J5cHRlZE1lZGlhSW5pdERhdGEoRW1lSW5pdERhdGFUeXBlIHR5cGUsCit2b2lkIE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSg6Om1lZGlhOjpFbWVJbml0RGF0YVR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiBpbml0X2RhdGEpIHt9CiAKLXZvaWQgT25Jbml0U2VnbWVudFJlY2VpdmVkKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVRyYWNrcz4gdHJhY2tzKSB7fQordm9pZCBPbkluaXRTZWdtZW50UmVjZWl2ZWQoc3RkOjp1bmlxdWVfcHRyPDo6bWVkaWE6Ok1lZGlhVHJhY2tzPiB0cmFja3MpIHt9CiAKLXZvaWQgT25EZW11eGVyU3RhdHVzKFBpcGVsaW5lU3RhdHVzIHN0YXR1cykgeyBzdGF0dXMgPSBQSVBFTElORV9PSzsgfQordm9pZCBPbkRlbXV4ZXJTdGF0dXMoOjptZWRpYTo6UGlwZWxpbmVTdGF0dXMgc3RhdHVzKSB7fQogCiBzdGQ6OnN0cmluZyBMb2FkRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZV9uYW1lKSB7CiAgIGJhc2U6OkZpbGVQYXRoIGZpbGVfcGF0aChmaWxlX25hbWUpOwpAQCAtNzksNyArNzcsNyBAQAogCiB2b2lkIE9uRGVtdXhlclN0cmVhbVJlYWQoRGVtdXhlclN0cmVhbSogZGVtdXhlcl9zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVtdXhlclN0cmVhbTo6U3RhdHVzIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+JiBkZWNvZGVyX2J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8OjptZWRpYTo6RGVjb2RlckJ1ZmZlcj4gZGVjb2Rlcl9idWZmZXIpIHsKICAgaWYgKCFkZWNvZGVyX2J1ZmZlci0+ZW5kX29mX3N0cmVhbSgpKSB7CiAgICAgTE9HKElORk8pIDw8ICJSZWFkaW5nICIgPDwgR2V0RGVtdXhlclN0cmVhbVR5cGUoZGVtdXhlcl9zdHJlYW0pCiAgICAgICAgICAgICAgIDw8ICIgYnVmZmVyIGF0ICIgPDwgZGVjb2Rlcl9idWZmZXItPnRpbWVzdGFtcCgpOwpAQCAtOTIsNyArOTAsNyBAQAogdm9pZCBSZWFkRGVtdXhlclN0cmVhbShEZW11eGVyU3RyZWFtKiBkZW11eGVyX3N0cmVhbSkgewogICBEQ0hFQ0soZGVtdXhlcl9zdHJlYW0pOwogICBkZW11eGVyX3N0cmVhbS0+UmVhZCgKLSAgICAgIGJhc2U6OkJpbmQoT25EZW11eGVyU3RyZWFtUmVhZCwgYmFzZTo6VW5yZXRhaW5lZChkZW11eGVyX3N0cmVhbSkpKTsKKyAgICAgIGJhc2U6OkJpbmRPbmNlKE9uRGVtdXhlclN0cmVhbVJlYWQsIGJhc2U6OlVucmV0YWluZWQoZGVtdXhlcl9zdHJlYW0pKSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZQpAQCAtMTA2LDI3ICsxMDQsMjggQEAKICAgfQogCiAgIERlY29kZXJCdWZmZXJBbGxvY2F0b3IgZGVjb2Rlcl9idWZmZXJfYWxsb2NhdG9yOworICA6Om1lZGlhOjpNZWRpYUxvZyBtZWRpYV9sb2c7CiAgIGJhc2U6Ok1lc3NhZ2VMb29wIG1lc3NhZ2VfbG9vcDsKICAgLy8gQSBvbmUtcGVyLXByb2Nlc3MgdGFzayBzY2hlZHVsZXIgaXMgbmVlZGVkIGZvciB1c2FnZSBvZiBBUElzIGluCiAgIC8vIGJhc2UvcG9zdF90YXNrLmggd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHNvbWUgbmV0IEFQSXMgbGlrZQogICAvLyBVUkxSZXF1ZXN0Q29udGV4dDsKICAgYmFzZTo6VGFza1NjaGVkdWxlcjo6Q3JlYXRlQW5kU3RhcnRXaXRoRGVmYXVsdFBhcmFtcygiQ29iYWx0IFRhc2tTY2hlZHVsZXIiKTsKICAgRGVtdXhlckhvc3RTdHViIGRlbXV4ZXJfaG9zdDsKLSAgc3RkOjp1bmlxdWVfcHRyPENodW5rRGVtdXhlcj4gZGVtdXhlcihuZXcgQ2h1bmtEZW11eGVyKAotICAgICAgJmRlY29kZXJfYnVmZmVyX2FsbG9jYXRvciwgYmFzZTo6QmluZChPbkRlbXV4ZXJPcGVuKSwKLSAgICAgIGJhc2U6OkJpbmQoT25FbmNyeXB0ZWRNZWRpYUluaXREYXRhKSwgbmV3IE1lZGlhTG9nLCBmYWxzZSkpOwotICBkZW11eGVyLT5Jbml0aWFsaXplKCZkZW11eGVyX2hvc3QsIGJhc2U6OkJpbmQoT25EZW11eGVyU3RhdHVzKSwgZmFsc2UpOworICBzdGQ6OnVuaXF1ZV9wdHI8Q2h1bmtEZW11eGVyPiBkZW11eGVyKAorICAgICAgbmV3IENodW5rRGVtdXhlcihiYXNlOjpCaW5kT25jZShPbkRlbXV4ZXJPcGVuKSwgYmFzZTo6Q2xvc3VyZSgpLAorICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKE9uRW5jcnlwdGVkTWVkaWFJbml0RGF0YSksICZtZWRpYV9sb2cpKTsKKyAgZGVtdXhlci0+SW5pdGlhbGl6ZSgmZGVtdXhlcl9ob3N0LCBiYXNlOjpCaW5kKE9uRGVtdXhlclN0YXR1cykpOwogCiAgIENodW5rRGVtdXhlcjo6U3RhdHVzIHN0YXR1cyA9Ci0gICAgICBkZW11eGVyLT5BZGRJZCgiYXVkaW8iLCAiYXVkaW8vbXA0OyBjb2RlY3M9XCJtcDRhLjQwLjJcIiIpOworICAgICAgZGVtdXhlci0+QWRkSWQoImF1ZGlvIiwgImF1ZGlvL21wNCIsICJtcDRhLjQwLjIiKTsKICAgRENIRUNLX0VRKHN0YXR1cywgQ2h1bmtEZW11eGVyOjprT2spOwogCiAgIGludCB2aWRlb191cmxfbGVuZ3RoID0gc3RybGVuKGFyZ3ZbMl0pOwogICBpZiAodmlkZW9fdXJsX2xlbmd0aCA+IDUgJiYKICAgICAgIHN0cm5jbXAoYXJndlsyXSArIHZpZGVvX3VybF9sZW5ndGggLSA1LCAiLndlYm0iLCA1KSA9PSAwKSB7Ci0gICAgc3RhdHVzID0gZGVtdXhlci0+QWRkSWQoInZpZGVvIiwgInZpZGVvL3dlYm07IGNvZGVjcz1cInZwOVwiIik7CisgICAgc3RhdHVzID0gZGVtdXhlci0+QWRkSWQoInZpZGVvIiwgInZpZGVvL3dlYm0iLCAidnA5Iik7CiAgIH0gZWxzZSB7Ci0gICAgc3RhdHVzID0gZGVtdXhlci0+QWRkSWQoInZpZGVvIiwgInZpZGVvL21wNDsgY29kZWNzPVwiYXZjMS42NDAwMjhcIiIpOworICAgIHN0YXR1cyA9IGRlbXV4ZXItPkFkZElkKCJ2aWRlbyIsICJ2aWRlby9tcDQiLCAiYXZjMS42NDAwMjgiKTsKICAgfQogICBEQ0hFQ0tfRVEoc3RhdHVzLCBDaHVua0RlbXV4ZXI6OmtPayk7CiAKQEAgLTEzOCwxNyArMTM3LDQzIEBACiAgIERDSEVDSyghdmlkZW9fY29udGVudC5lbXB0eSgpKTsKIAogICBkZW11eGVyLT5TZXRUcmFja3NXYXRjaGVyKCJhdWRpbyIsIGJhc2U6OkJpbmQoT25Jbml0U2VnbWVudFJlY2VpdmVkKSk7CisgIGRlbXV4ZXItPlNldFBhcnNlV2FybmluZ0NhbGxiYWNrKAorICAgICAgImF1ZGlvIiwKKyAgICAgIGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oOjptZWRpYTo6U291cmNlQnVmZmVyUGFyc2VXYXJuaW5nIHdhcm5pbmcpIHsKKyAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBTb3VyY2VCdWZmZXJQYXJzZVdhcm5pbmcgIgorICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50Pih3YXJuaW5nKTsKKyAgICAgIH0pKTsKICAgZGVtdXhlci0+U2V0VHJhY2tzV2F0Y2hlcigidmlkZW8iLCBiYXNlOjpCaW5kKE9uSW5pdFNlZ21lbnRSZWNlaXZlZCkpOwotICBkZW11eGVyLT5BcHBlbmREYXRhKCJhdWRpbyIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPigmYXVkaW9fY29udGVudFswXSksCi0gICAgICAgICAgICAgICAgICAgICAgYXVkaW9fY29udGVudC5zaXplKCksIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6TWF4KCksICZ0aW1lc3RhbXBfb2Zmc2V0KTsKLSAgZGVtdXhlci0+QXBwZW5kRGF0YSgidmlkZW8iLCByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oJnZpZGVvX2NvbnRlbnRbMF0pLAotICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2NvbnRlbnQuc2l6ZSgpLCBiYXNlOjpUaW1lRGVsdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGE6Ok1heCgpLCAmdGltZXN0YW1wX29mZnNldCk7Ci0gIGRlbXV4ZXItPk1hcmtFbmRPZlN0cmVhbShQSVBFTElORV9PSyk7CisgIGRlbXV4ZXItPlNldFBhcnNlV2FybmluZ0NhbGxiYWNrKAorICAgICAgInZpZGVvIiwKKyAgICAgIGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oOjptZWRpYTo6U291cmNlQnVmZmVyUGFyc2VXYXJuaW5nIHdhcm5pbmcpIHsKKyAgICAgICAgTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBTb3VyY2VCdWZmZXJQYXJzZVdhcm5pbmcgIgorICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50Pih3YXJuaW5nKTsKKyAgICAgIH0pKTsKKyAgYm9vbCByZXN1bHQgPQorICAgICAgZGVtdXhlci0+QXBwZW5kRGF0YSgiYXVkaW8iLCByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oJmF1ZGlvX2NvbnRlbnRbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19jb250ZW50LnNpemUoKSwgYmFzZTo6VGltZURlbHRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YTo6TWF4KCksICZ0aW1lc3RhbXBfb2Zmc2V0KTsKKyAgRENIRUNLKHJlc3VsdCk7CisgIHJlc3VsdCA9CisgICAgICBkZW11eGVyLT5BcHBlbmREYXRhKCJ2aWRlbyIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPigmdmlkZW9fY29udGVudFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2NvbnRlbnQuc2l6ZSgpLCBiYXNlOjpUaW1lRGVsdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZURlbHRhOjpNYXgoKSwgJnRpbWVzdGFtcF9vZmZzZXQpOworICBEQ0hFQ0socmVzdWx0KTsKKyAgZGVtdXhlci0+TWFya0VuZE9mU3RyZWFtKDo6bWVkaWE6OlBJUEVMSU5FX09LKTsKIAotICBEZW11eGVyU3RyZWFtKiBhdWRpb19zdHJlYW0gPSBkZW11eGVyLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6QVVESU8pOwotICBEZW11eGVyU3RyZWFtKiB2aWRlb19zdHJlYW0gPSBkZW11eGVyLT5HZXRTdHJlYW0oRGVtdXhlclN0cmVhbTo6VklERU8pOworICBhdXRvIHN0cmVhbXMgPSBkZW11eGVyLT5HZXRBbGxTdHJlYW1zKCk7CisgIERlbXV4ZXJTdHJlYW0qIGF1ZGlvX3N0cmVhbSA9IG51bGxwdHI7CisgIERlbXV4ZXJTdHJlYW0qIHZpZGVvX3N0cmVhbSA9IG51bGxwdHI7CisgIGZvciAoYXV0byYmIHN0cmVhbSA6IHN0cmVhbXMpIHsKKyAgICBpZiAoc3RyZWFtLT50eXBlKCkgPT0gRGVtdXhlclN0cmVhbTo6QVVESU8pIHsKKyAgICAgIERDSEVDSyghYXVkaW9fc3RyZWFtKTsKKyAgICAgIGF1ZGlvX3N0cmVhbSA9IHN0cmVhbTsKKyAgICB9IGVsc2UgaWYgKHN0cmVhbS0+dHlwZSgpID09IERlbXV4ZXJTdHJlYW06OlZJREVPKSB7CisgICAgICBEQ0hFQ0soIXZpZGVvX3N0cmVhbSk7CisgICAgICB2aWRlb19zdHJlYW0gPSBzdHJlYW07CisgICAgfQorICB9CiAKICAgUmVhZERlbXV4ZXJTdHJlYW0oYXVkaW9fc3RyZWFtKTsKICAgUmVhZERlbXV4ZXJTdHJlYW0odmlkZW9fc3RyZWFtKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L21lZGlhX3NhbmRib3guY2MgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC9tZWRpYV9zYW5kYm94LmNjCmluZGV4IGU3NDkzMjIuLmJiMmIwOWEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L21lZGlhX3NhbmRib3guY2MKKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvbWVkaWFfc2FuZGJveC5jYwpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgImJhc2Uvc3luY2hyb25pemF0aW9uL2xvY2suaCIKICNpbmNsdWRlICJiYXNlL3Rhc2svdGFza19zY2hlZHVsZXIvdGFza19zY2hlZHVsZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9ldmVudF9kaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiY29iYWx0L21hdGgvcmVjdC5oIgogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3NpemUuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplX2YuaCIKICNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9hbmltYXRpb25zL2FuaW1hdGVfbm9kZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9pbWFnZV9ub2RlLmgiCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiY29iYWx0L3N0b3JhZ2Uvc3RvcmFnZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5oIgogI2luY2x1ZGUgImNvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC01Myw4ICs1NCw4IEBACiAgIHJlbmRlcl90cmVlOjpSZXNvdXJjZVByb3ZpZGVyKiBHZXRSZXNvdXJjZVByb3ZpZGVyKCkgewogICAgIHJldHVybiByZW5kZXJlcl9tb2R1bGVfLT5waXBlbGluZSgpLT5HZXRSZXNvdXJjZVByb3ZpZGVyKCk7CiAgIH0KLSAgbWF0aDo6U2l6ZSBHZXRWaWV3cG9ydFNpemUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1hdGg6OlNpemUoa1ZpZXdwb3J0V2lkdGgsIGtWaWV3cG9ydEhlaWdodCk7CisgIGdmeDo6U2l6ZSBHZXRWaWV3cG9ydFNpemUoKSBjb25zdCB7CisgICAgcmV0dXJuIGdmeDo6U2l6ZShrVmlld3BvcnRXaWR0aCwga1ZpZXdwb3J0SGVpZ2h0KTsKICAgfQogCiAgcHJpdmF0ZToKQEAgLTg4LDkgKzg5LDEwIEBACiAKICAgbmV0d29ya19tb2R1bGVfLnJlc2V0KG5ldyBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKG5ldHdvcmtfb3B0aW9ucykpOwogICBmZXRjaGVyX2ZhY3RvcnlfLnJlc2V0KG5ldyBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KG5ldHdvcmtfbW9kdWxlXy5nZXQoKSkpOwotICBtYXRoOjpTaXplIHZpZXdfc2l6ZShrVmlld3BvcnRXaWR0aCwga1ZpZXdwb3J0SGVpZ2h0KTsKLSAgc3lzdGVtX3dpbmRvd18ucmVzZXQoCi0gICAgICBuZXcgc3lzdGVtX3dpbmRvdzo6U3lzdGVtV2luZG93KCZldmVudF9kaXNwYXRjaGVyXywgdmlld19zaXplKSk7CisgIGdmeDo6U2l6ZSB2aWV3X3NpemUoa1ZpZXdwb3J0V2lkdGgsIGtWaWV3cG9ydEhlaWdodCk7CisgIHN5c3RlbV93aW5kb3dfLnJlc2V0KG5ldyBzeXN0ZW1fd2luZG93OjpTeXN0ZW1XaW5kb3coCisgICAgICAmZXZlbnRfZGlzcGF0Y2hlcl8sCisgICAgICBjb2JhbHQ6Om1hdGg6OlNpemUodmlld19zaXplLndpZHRoKCksIHZpZXdfc2l6ZS5oZWlnaHQoKSkpKTsKIAogICByZW5kZXJlcjo6UmVuZGVyZXJNb2R1bGU6Ok9wdGlvbnMgcmVuZGVyZXJfb3B0aW9uczsKICAgcmVuZGVyZXJfbW9kdWxlXy5yZXNldCgKQEAgLTEwOSw3ICsxMTEsOSBAQAogdm9pZCBNZWRpYVNhbmRib3g6OkltcGw6OkFuaW1hdGVDQihyZW5kZXJfdHJlZTo6SW1hZ2VOb2RlOjpCdWlsZGVyKiBpbWFnZV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lRGVsdGEgdGltZSkgewogICBEQ0hFQ0soaW1hZ2Vfbm9kZSk7Ci0gIG1hdGg6OlNpemVGIG91dHB1dF9zaXplKHJlbmRlcmVyX21vZHVsZV8tPnJlbmRlcl90YXJnZXQoKS0+R2V0U2l6ZSgpKTsKKyAgY29uc3QgYXV0byByZW5kZXJfdGFyZ2V0X3NpemUgPSByZW5kZXJlcl9tb2R1bGVfLT5yZW5kZXJfdGFyZ2V0KCktPkdldFNpemUoKTsKKyAgbWF0aDo6U2l6ZUYgb3V0cHV0X3NpemUocmVuZGVyX3RhcmdldF9zaXplLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90YXJnZXRfc2l6ZS5oZWlnaHQoKSk7CiAgIGltYWdlX25vZGUtPmRlc3RpbmF0aW9uX3JlY3QgPSBtYXRoOjpSZWN0RihvdXRwdXRfc2l6ZSk7CiAgIGJhc2U6OkF1dG9Mb2NrIGF1dG9fbG9jayhsb2NrXyk7CiAgIGltYWdlX25vZGUtPnNvdXJjZSA9IGZyYW1lX2NiXy5pc19udWxsKCkgPyBOVUxMIDogZnJhbWVfY2JfLlJ1bih0aW1lKTsKQEAgLTE1OSw3ICsxNjMsNyBAQAogICByZXR1cm4gaW1wbF8tPkdldFJlc291cmNlUHJvdmlkZXIoKTsKIH0KIAotbWF0aDo6U2l6ZSBNZWRpYVNhbmRib3g6OkdldFZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsKK2dmeDo6U2l6ZSBNZWRpYVNhbmRib3g6OkdldFZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsKICAgRENIRUNLKGltcGxfKTsKICAgcmV0dXJuIGltcGxfLT5HZXRWaWV3cG9ydFNpemUoKTsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L21lZGlhX3NhbmRib3guaCBiL2NvYmFsdC9tZWRpYS9zYW5kYm94L21lZGlhX3NhbmRib3guaAppbmRleCAyMmUzZjdjLi44NThmYTc3IDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWEvc2FuZGJveC9tZWRpYV9zYW5kYm94LmgKKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvbWVkaWFfc2FuZGJveC5oCkBAIC0yMSwxMCArMjEsMTAgQEAKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgogI2luY2x1ZGUgImJhc2UvdGltZS90aW1lLmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL21lZGlhX21vZHVsZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9pbWFnZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJfdHJlZS9yZXNvdXJjZV9wcm92aWRlci5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYSB7CkBAIC00NSw3ICs0NSw3IEBACiAgIE1lZGlhTW9kdWxlKiBHZXRNZWRpYU1vZHVsZSgpOwogICBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBHZXRGZXRjaGVyRmFjdG9yeSgpOwogICByZW5kZXJfdHJlZTo6UmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIoKTsKLSAgbWF0aDo6U2l6ZSBHZXRWaWV3cG9ydFNpemUoKSBjb25zdDsKKyAgZ2Z4OjpTaXplIEdldFZpZXdwb3J0U2l6ZSgpIGNvbnN0OwogCiAgcHJpdmF0ZToKICAgY2xhc3MgSW1wbDsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L3NhbmRib3guZ3lwIGIvY29iYWx0L21lZGlhL3NhbmRib3gvc2FuZGJveC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOTExMjYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvc2FuZGJveC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGlzIGEgc2FtcGxlIHNhbmRib3ggYXBwbGljYXRpb24gZm9yIGV4cGVyaW1lbnRpbmcgd2l0aCB0aGUgQ29iYWx0Ci0jIG1lZGlhL3JlbmRlcmVyIGludGVyZmFjZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdoYXNfenp1Zic6ICc8IXB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZGlyX2V4aXN0cyAuLi8uLi8uLi90aGlyZF9wYXJ0eS96enVmKScsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgICMgVGhpcyB0YXJnZXQgd2lsbCBidWlsZCBhIHNhbmRib3ggYXBwbGljYXRpb24gdGhhdCBhbGxvd3MgZm9yIGVhc3kKLSAgICAjIGV4cGVyaW1lbnRhdGlvbiB3aXRoIHRoZSBtZWRpYSBpbnRlcmZhY2Ugb24gYW55IHBsYXRmb3JtLiAgVGhpcyBjYW4KLSAgICAjIGFsc28gYmUgdXNlZnVsIGZvciB2aXN1YWxseSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQgdGhhdCB0aGUgQ29iYWx0Ci0gICAgIyBtZWRpYSBzdGFjayBpcyBwcm9kdWNpbmcuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3NhbmRib3gnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbWVkaWEyX3NhbmRib3guY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tYXRoL21hdGguZ3lwOm1hdGgnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhL21lZGlhLmd5cDptZWRpYScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3NhbmRib3hfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21lZGlhX3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbWVkaWFfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3dlYl9tZWRpYV9wbGF5ZXJfc2FuZGJveCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmb3JtYXRfZ3Vlc3N0aW1hdG9yLmNjJywKLSAgICAgICAgJ2Zvcm1hdF9ndWVzc3RpbWF0b3IuaCcsCi0gICAgICAgICdtZWRpYV9zYW5kYm94LmNjJywKLSAgICAgICAgJ21lZGlhX3NhbmRib3guaCcsCi0gICAgICAgICd3ZWJfbWVkaWFfcGxheWVyX2hlbHBlci5jYycsCi0gICAgICAgICd3ZWJfbWVkaWFfcGxheWVyX2hlbHBlci5oJywKLSAgICAgICAgJ3dlYl9tZWRpYV9wbGF5ZXJfc2FuZGJveC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAjIFVzZSB0ZXN0IGRhdGEgZnJvbSBkZW1vcyB0byBhdm9pZCBrZWVwaW5nIHR3byBjb3BpZXMgb2YgdmlkZW8gZmlsZXMuCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZGVtb3MvZGVtb3MuZ3lwOmNvcHlfZGVtb3MnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOmxvYWRlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwOm1lZGlhJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9uZXR3b3JrL25ldHdvcmsuZ3lwOm5ldHdvcmsnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyLmd5cDpyZW5kZXJlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cDpzeXN0ZW1fd2luZG93JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC90cmFjZV9ldmVudC90cmFjZV9ldmVudC5neXA6dHJhY2VfZXZlbnQnLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gPT0gMCcsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2ViX21lZGlhX3BsYXllcl9zYW5kYm94X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd3ZWJfbWVkaWFfcGxheWVyX3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnd2ViX21lZGlhX3BsYXllcl9zYW5kYm94JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfaGVscGVyLmNjIGIvY29iYWx0L21lZGlhL3NhbmRib3gvd2ViX21lZGlhX3BsYXllcl9oZWxwZXIuY2MKaW5kZXggMDA5Y2MxOS4uYWQxZmE0ZiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvd2ViX21lZGlhX3BsYXllcl9oZWxwZXIuY2MKKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvd2ViX21lZGlhX3BsYXllcl9oZWxwZXIuY2MKQEAgLTEzLDExICsxMywxMiBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KIAogI2luY2x1ZGUgImNvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfaGVscGVyLmgiCiAKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9yZWN0LmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2ZldGNoZXJfYnVmZmVyZWRfZGF0YV9zb3VyY2UuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3QuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgbWVkaWEgewpAQCAtNDYsMTQgKzQ3LDE0IEBACiAgIHZvaWQgUGxheWJhY2tTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZSB7fQogICB2b2lkIFNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkgb3ZlcnJpZGUge30KICAgZmxvYXQgVm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMS5mOyB9Ci0gIHZvaWQgU291cmNlT3BlbmVkKENodW5rRGVtdXhlciogY2h1bmtfZGVtdXhlcikgb3ZlcnJpZGUgeworICB2b2lkIFNvdXJjZU9wZW5lZCg6Om1lZGlhOjpDaHVua0RlbXV4ZXIqIGNodW5rX2RlbXV4ZXIpIG92ZXJyaWRlIHsKICAgICBEQ0hFQ0soIWNodW5rX2RlbXV4ZXJfb3Blbl9jYl8uaXNfbnVsbCgpKTsKICAgICBjaHVua19kZW11eGVyX29wZW5fY2JfLlJ1bihjaHVua19kZW11eGVyKTsKICAgfQogICBzdGQ6OnN0cmluZyBTb3VyY2VVUkwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiIjsgfQogICBzdGQ6OnN0cmluZyBNYXhWaWRlb0NhcGFiaWxpdGllcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7IH07CiAKLSAgdm9pZCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQoRW1lSW5pdERhdGFUeXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwKKyAgdm9pZCBFbmNyeXB0ZWRNZWRpYUluaXREYXRhRW5jb3VudGVyZWQoY29uc3QgY2hhciosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCkgb3ZlcnJpZGUge30KIAogICBDaHVua0RlbXV4ZXJPcGVuQ0IgY2h1bmtfZGVtdXhlcl9vcGVuX2NiXzsKQEAgLTYxLDcgKzYyLDcgQEAKIAogV2ViTWVkaWFQbGF5ZXJIZWxwZXI6OldlYk1lZGlhUGxheWVySGVscGVyKE1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2h1bmtEZW11eGVyT3BlbkNCJiBvcGVuX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIHZpZXdwb3J0X3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2Z4OjpTaXplJiB2aWV3cG9ydF9zaXplKQogICAgIDogY2xpZW50XyhuZXcgV2ViTWVkaWFQbGF5ZXJDbGllbnRTdHViKG9wZW5fY2IpKSwKICAgICAgIHBsYXllcl8obWVkaWFfbW9kdWxlLT5DcmVhdGVXZWJNZWRpYVBsYXllcihjbGllbnRfKSkgewogICBwbGF5ZXJfLT5TZXRSYXRlKDEuMCk7CkBAIC03MCwxMyArNzEsMTMgQEAKIAogICBhdXRvIHNldF9ib3VuZHNfY2IgPSBwbGF5ZXJfLT5HZXRTZXRCb3VuZHNDQigpOwogICBpZiAoIXNldF9ib3VuZHNfY2IuaXNfbnVsbCgpKSB7Ci0gICAgc2V0X2JvdW5kc19jYi5SdW4obWF0aDo6UmVjdCh2aWV3cG9ydF9zaXplKSk7CisgICAgc2V0X2JvdW5kc19jYi5SdW4oMCwgMCwgdmlld3BvcnRfc2l6ZS53aWR0aCgpLCB2aWV3cG9ydF9zaXplLmhlaWdodCgpKTsKICAgfQogfQogCiBXZWJNZWRpYVBsYXllckhlbHBlcjo6V2ViTWVkaWFQbGF5ZXJIZWxwZXIoCiAgICAgTWVkaWFNb2R1bGUqIG1lZGlhX21vZHVsZSwgbG9hZGVyOjpGZXRjaGVyRmFjdG9yeSogZmV0Y2hlcl9mYWN0b3J5LAotICAgIGNvbnN0IEdVUkwmIHZpZGVvX3VybCwgY29uc3QgbWF0aDo6U2l6ZSYgdmlld3BvcnRfc2l6ZSkKKyAgICBjb25zdCBHVVJMJiB2aWRlb191cmwsIGNvbnN0IGdmeDo6U2l6ZSYgdmlld3BvcnRfc2l6ZSkKICAgICA6IGNsaWVudF8obmV3IFdlYk1lZGlhUGxheWVyQ2xpZW50U3R1YiksCiAgICAgICBwbGF5ZXJfKG1lZGlhX21vZHVsZS0+Q3JlYXRlV2ViTWVkaWFQbGF5ZXIoY2xpZW50XykpIHsKICAgcGxheWVyXy0+U2V0UmF0ZSgxLjApOwpAQCAtODksNyArOTAsNyBAQAogCiAgIGF1dG8gc2V0X2JvdW5kc19jYiA9IHBsYXllcl8tPkdldFNldEJvdW5kc0NCKCk7CiAgIGlmICghc2V0X2JvdW5kc19jYi5pc19udWxsKCkpIHsKLSAgICBzZXRfYm91bmRzX2NiLlJ1bihtYXRoOjpSZWN0KHZpZXdwb3J0X3NpemUpKTsKKyAgICBzZXRfYm91bmRzX2NiLlJ1bigwLCAwLCB2aWV3cG9ydF9zaXplLndpZHRoKCksIHZpZXdwb3J0X3NpemUuaGVpZ2h0KCkpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfaGVscGVyLmggYi9jb2JhbHQvbWVkaWEvc2FuZGJveC93ZWJfbWVkaWFfcGxheWVyX2hlbHBlci5oCmluZGV4IDYyYzk4YjQuLjkzOWYwYWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfaGVscGVyLmgKKysrIGIvY29iYWx0L21lZGlhL3NhbmRib3gvd2ViX21lZGlhX3BsYXllcl9oZWxwZXIuaApAQCAtMjAsMTAgKzIwLDEwIEBACiAKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9mZXRjaGVyX2ZhY3RvcnkuaCIKLSNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL2Jhc2UvdmlkZW9fZnJhbWVfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWEvbWVkaWFfbW9kdWxlLmgiCiAjaW5jbHVkZSAiY29iYWx0L21lZGlhL3BsYXllci93ZWJfbWVkaWFfcGxheWVyLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9zaXplLmgiCiAjaW5jbHVkZSAidXJsL2d1cmwuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC0zNSwxNyArMzUsMTcgQEAKIC8vIHNpbXBsaWZ5IHRoZSB1c2luZyBvZiBXZWJNZWRpYVBsYXllci4KIGNsYXNzIFdlYk1lZGlhUGxheWVySGVscGVyIHsKICBwdWJsaWM6Ci0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChDaHVua0RlbXV4ZXIqKT4gQ2h1bmtEZW11eGVyT3BlbkNCOworICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoOjptZWRpYTo6Q2h1bmtEZW11eGVyKik+IENodW5rRGVtdXhlck9wZW5DQjsKIAogICAvLyBDdG9yIHRvIGNyZWF0ZSBhbiBhZGFwdGl2ZSBwaXBlbGluZS4gIHxvcGVuX2NifCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZQogICAvLyBDaHVua0RlbXV4ZXIgaXMgcmVhZHkgdG8gYWRkIHNvdXJjZSBidWZmZXJzLgogICBXZWJNZWRpYVBsYXllckhlbHBlcihNZWRpYU1vZHVsZSogbWVkaWFfbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDaHVua0RlbXV4ZXJPcGVuQ0ImIGNodW5rX2RlbXV4ZXJfb3Blbl9jYiwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0aDo6U2l6ZSYgdmlld3BvcnRfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdmeDo6U2l6ZSYgdmlld3BvcnRfc2l6ZSk7CiAgIC8vIEN0b3IgdG8gY3JlYXRlIGEgcHJvZ3Jlc3NpdmUgcGlwZWxpbmUuCiAgIFdlYk1lZGlhUGxheWVySGVscGVyKE1lZGlhTW9kdWxlKiBtZWRpYV9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1VSTCYgdmlkZW9fdXJsLCBjb25zdCBtYXRoOjpTaXplJiB2aWV3cG9ydF9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1VSTCYgdmlkZW9fdXJsLCBjb25zdCBnZng6OlNpemUmIHZpZXdwb3J0X3NpemUpOwogICB+V2ViTWVkaWFQbGF5ZXJIZWxwZXIoKTsKIAogICBTYkRlY29kZVRhcmdldCBHZXRDdXJyZW50RGVjb2RlVGFyZ2V0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvc2FuZGJveC93ZWJfbWVkaWFfcGxheWVyX3NhbmRib3guY2MgYi9jb2JhbHQvbWVkaWEvc2FuZGJveC93ZWJfbWVkaWFfcGxheWVyX3NhbmRib3guY2MKaW5kZXggZjk3YTJiNi4uMWM5ZjRjNiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhL3NhbmRib3gvd2ViX21lZGlhX3BsYXllcl9zYW5kYm94LmNjCisrKyBiL2NvYmFsdC9tZWRpYS9zYW5kYm94L3dlYl9tZWRpYV9wbGF5ZXJfc2FuZGJveC5jYwpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9ldmVudC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIG1lZGlhIHsKQEAgLTQ4LDkgKzUwLDkgQEAKICAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZV9maWxlX25hbWUgPQogICAgICAgYmFzZTo6RmlsZVBhdGgoZXhlY3V0YWJsZV9wYXRoX25hbWUpLkJhc2VOYW1lKCkudmFsdWUoKTsKICAgY29uc3QgY2hhciBrRXhhbXBsZUFkYXB0aXZlQXVkaW9QYXRoTmFtZVtdID0KLSAgICAgICJjb2JhbHQvZGVtb3MvbWVkaWEtZWxlbWVudC1kZW1vL2Rhc2gtYXVkaW8ubXA0IjsKKyAgICAgICJkZW1vcy9tZWRpYS1lbGVtZW50LWRlbW8vcHVibGljL2Fzc2V0cy9kYXNoLWF1ZGlvLm1wNCI7CiAgIGNvbnN0IGNoYXIga0V4YW1wbGVBZGFwdGl2ZVZpZGVvUGF0aE5hbWVbXSA9Ci0gICAgICAiY29iYWx0L2RlbW9zL21lZGlhLWVsZW1lbnQtZGVtby9kYXNoLXZpZGVvLTEwODBwLm1wNCI7CisgICAgICAiZGVtb3MvbWVkaWEtZWxlbWVudC1kZW1vL3B1YmxpYy9hc3NldHMvZGFzaC12aWRlby0xMDgwcC5tcDQiOwogICBjb25zdCBjaGFyIGtFeGFtcGxlUHJvZ3Jlc3NpdmVVcmxbXSA9CiAgICAgICAiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3l0LWNvYmFsdC1tZWRpYS1lbGVtZW50LWRlbW8vIgogICAgICAgInByb2dyZXNzaXZlLm1wNCI7CkBAIC05MCw4ICs5Miw3IEBACiAgIFNiTG9nUmF3KHNzLnN0cigpLmNfc3RyKCkpOwogfQogCi12b2lkIE9uSW5pdFNlZ21lbnRSZWNlaXZlZChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFUcmFja3M+IHRyYWNrcykgewotfQordm9pZCBPbkluaXRTZWdtZW50UmVjZWl2ZWQoc3RkOjp1bmlxdWVfcHRyPDo6bWVkaWE6Ok1lZGlhVHJhY2tzPiB0cmFja3MpIHt9CiAKIGNsYXNzIEluaXRDb2JhbHRIZWxwZXIgewogIHB1YmxpYzoKQEAgLTE1MCw2ICsxNTEsOCBAQAogICB+QXBwbGljYXRpb24oKSB7IG1lZGlhX3NhbmRib3hfLlJlZ2lzdGVyRnJhbWVDQihNZWRpYVNhbmRib3g6OkZyYW1lQ0IoKSk7IH0KIAogIHByaXZhdGU6CisgIHR5cGVkZWYgOjptZWRpYTo6Q2h1bmtEZW11eGVyIENodW5rRGVtdXhlcjsKKwogICB2b2lkIEluaXRpYWxpemVBZGFwdGl2ZVBsYXliYWNrKGNvbnN0IEZvcm1hdEd1ZXNzdGltYXRvciYgZ3Vlc3N0aW1hdG9yKSB7CiAgICAgaXNfYWRhcHRpdmVfcGxheWJhY2tfID0gdHJ1ZTsKIApAQCAtMTgzLDYgKzE4NiwxMSBAQAogICAgIENIRUNLX0VRKHN0YXR1cywgQ2h1bmtEZW11eGVyOjprT2spOwogCiAgICAgY2h1bmtfZGVtdXhlcl8tPlNldFRyYWNrc1dhdGNoZXIoaWQsIGJhc2U6OkJpbmQoT25Jbml0U2VnbWVudFJlY2VpdmVkKSk7CisgICAgY2h1bmtfZGVtdXhlcl8tPlNldFBhcnNlV2FybmluZ0NhbGxiYWNrKAorICAgICAgICBpZCwgYmFzZTo6QmluZFJlcGVhdGluZyhbXSg6Om1lZGlhOjpTb3VyY2VCdWZmZXJQYXJzZVdhcm5pbmcgd2FybmluZykgeworICAgICAgICAgIExPRyhXQVJOSU5HKSA8PCAiRW5jb3VudGVyZWQgU291cmNlQnVmZmVyUGFyc2VXYXJuaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50Pih3YXJuaW5nKTsKKyAgICAgICAgfSkpOwogICAgIHBsYXllcl8gPSBwbGF5ZXJfaGVscGVyXy0+cGxheWVyKCk7CiAKICAgICBtZWRpYV9zYW5kYm94Xy5SZWdpc3RlckZyYW1lQ0IoCkBAIC0yMzksOCArMjQ3LDIwIEBACiAKICAgICBjaHVua19kZW11eGVyXy0+U2V0VHJhY2tzV2F0Y2hlcihrQXVkaW9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKE9uSW5pdFNlZ21lbnRSZWNlaXZlZCkpOworICAgIGNodW5rX2RlbXV4ZXJfLT5TZXRQYXJzZVdhcm5pbmdDYWxsYmFjaygKKyAgICAgICAga0F1ZGlvSWQsCisgICAgICAgIGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oOjptZWRpYTo6U291cmNlQnVmZmVyUGFyc2VXYXJuaW5nIHdhcm5pbmcpIHsKKyAgICAgICAgICBMT0coV0FSTklORykgPDwgIkVuY291bnRlcmVkIFNvdXJjZUJ1ZmZlclBhcnNlV2FybmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4od2FybmluZyk7CisgICAgICAgIH0pKTsKICAgICBjaHVua19kZW11eGVyXy0+U2V0VHJhY2tzV2F0Y2hlcihrVmlkZW9JZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKE9uSW5pdFNlZ21lbnRSZWNlaXZlZCkpOworICAgIGNodW5rX2RlbXV4ZXJfLT5TZXRQYXJzZVdhcm5pbmdDYWxsYmFjaygKKyAgICAgICAga1ZpZGVvSWQsCisgICAgICAgIGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oOjptZWRpYTo6U291cmNlQnVmZmVyUGFyc2VXYXJuaW5nIHdhcm5pbmcpIHsKKyAgICAgICAgICBMT0coV0FSTklORykgPDwgIkVuY291bnRlcmVkIFNvdXJjZUJ1ZmZlclBhcnNlV2FybmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PGludD4od2FybmluZyk7CisgICAgICAgIH0pKTsKICAgICBwbGF5ZXJfID0gcGxheWVyX2hlbHBlcl8tPnBsYXllcigpOwogCiAgICAgbWVkaWFfc2FuZGJveF8uUmVnaXN0ZXJGcmFtZUNCKApAQCAtMjkxLDcgKzMxMSw3IEBACiAgICAgICBib29sIGF1ZGlvX2VvcyA9ICFhdWRpb19maWxlXyB8fCBhdWRpb19vZmZzZXRfID09IGF1ZGlvX2ZpbGVfLT5HZXRTaXplKCk7CiAgICAgICBib29sIHZpZGVvX2VvcyA9ICF2aWRlb19maWxlXyB8fCB2aWRlb19vZmZzZXRfID09IHZpZGVvX2ZpbGVfLT5HZXRTaXplKCk7CiAgICAgICBpZiAoYXVkaW9fZW9zICYmIHZpZGVvX2VvcykgewotICAgICAgICBjaHVua19kZW11eGVyXy0+TWFya0VuZE9mU3RyZWFtKFBJUEVMSU5FX09LKTsKKyAgICAgICAgY2h1bmtfZGVtdXhlcl8tPk1hcmtFbmRPZlN0cmVhbSg6Om1lZGlhOjpQSVBFTElORV9PSyk7CiAgICAgICAgIGVvc19hcHBlbmRlZF8gPSB0cnVlOwogICAgICAgfQogICAgIH0KQEAgLTMxNCw3ICszMzQsNyBAQAogICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcihrTWF4Qnl0ZXNUb0FwcGVuZCk7CiAKICAgICB3aGlsZSAoKm9mZnNldCA8IGZpbGUtPkdldFNpemUoKSkgewotICAgICAgUmFuZ2VzPFRpbWVEZWx0YT4gcmFuZ2VzID0gY2h1bmtfZGVtdXhlcl8tPkdldEJ1ZmZlcmVkUmFuZ2VzKGlkKTsKKyAgICAgIDo6bWVkaWE6OlJhbmdlczxUaW1lRGVsdGE+IHJhbmdlcyA9IGNodW5rX2RlbXV4ZXJfLT5HZXRCdWZmZXJlZFJhbmdlcyhpZCk7CiAgICAgICBmbG9hdCBlbmRfb2ZfYnVmZmVyID0KICAgICAgICAgICByYW5nZXMuc2l6ZSgpID09IDAgPyAwLmYgOiByYW5nZXMuZW5kKHJhbmdlcy5zaXplKCkgLSAxKS5JblNlY29uZHNGKCk7CiAgICAgICBpZiAoZW5kX29mX2J1ZmZlciAtIHBsYXllcl8tPkdldEN1cnJlbnRUaW1lKCkgPiBrTG93V2F0ZXJNYXJrSW5TZWNvbmRzKSB7CkBAIC0zMzIsNyArMzUyLDcgQEAKICAgICAgIGJhc2U6OlRpbWVEZWx0YSB0aW1lc3RhbXBfb2Zmc2V0OwogICAgICAgYXV0byBhcHBlbmRlZCA9IGNodW5rX2RlbXV4ZXJfLT5BcHBlbmREYXRhKAogICAgICAgICAgIGlkLCBidWZmZXIuZGF0YSgpLCBieXRlc190b19hcHBlbmQsIGJhc2U6OlRpbWVEZWx0YSgpLAotICAgICAgICAgIG1lZGlhOjprSW5maW5pdGVEdXJhdGlvbiwgJnRpbWVzdGFtcF9vZmZzZXQpOworICAgICAgICAgIDo6bWVkaWE6OmtJbmZpbml0ZUR1cmF0aW9uLCAmdGltZXN0YW1wX29mZnNldCk7CiAgICAgICBTQl9EQ0hFQ0soYXBwZW5kZWQpOwogCiAgICAgICAqb2Zmc2V0ICs9IGJ5dGVzX3RvX2FwcGVuZDsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvNDhfYWFjX2luZmluaXRlX2xvb3AubTRhIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS80OF9hYWNfaW5maW5pdGVfbG9vcC5tNGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YTYxODQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS80OF9hYWNfaW5maW5pdGVfbG9vcC5tNGEKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhLzRjaC53YXYgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhLzRjaC53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZmZkNzUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS80Y2gud2F2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS85MHJvdGF0aW9uLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvOTByb3RhdGlvbi5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYmZlMjEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS85MHJvdGF0aW9uLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvOWNoLm9nZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvOWNoLm9nZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdhMWQxMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhLzljaC5vZ2cKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL0NPUFlJTkcgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNTQwNDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9DT1BZSU5HCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotbnBvdC12aWRlby5oMjY0LCByZWQtZ3JlZW4uaDI2NDoKLUNvcHlyaWdodCAoYykgMjAxMiBUaGUgS2hyb25vcyBHcm91cCBJbmMuCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi1jb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKLXdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKLWRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KLXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCi10aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi1pbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCi0KLVRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi1FWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCi1DTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAotVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLU1BVEVSSUFMUyBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRFUklBTFMuCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL1JFQURNRSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDc1MmJkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWJlYXItMzIweDI0MC53ZWJtIC0gV2ViTSBlbmNvZGUgb2YgYmVhci4xMjgweDcyMC5tcDQgcmVzaXplZCB0byAzMjB4MjQwLgotYmVhci0zMjB4MjQwLXZpZGVvLW9ubHkud2VibSAtIFRoZSB2aWRlbyB0cmFjayBvZiBiZWFyLTMyMHgyNDAud2VibS4KLWJlYXItMzIweDI0MC1hdWRpby1vbmx5LndlYm0gLSBUaGUgYXVkaW8gdHJhY2sgb2YgYmVhci0zMjB4MjQwLndlYm0uCi1iZWFyLXZwOS53ZWJtIC0gVlA5IHZpZGVvIG9ubHkgV2ViTSBmaWxlLgotYmVhci12cDktb3B1cy53ZWJtIC0gVlA5IFZpZGVvIHdpdGggT3B1cyBBdWRpby4KLWJlYXItdnA4LXdlYnZ0dC53ZWJtIC0gV2ViTSBWUDggdmlkZW8gd2l0aCBXZWJWVFQgc3VidGl0bGUgdHJhY2suCi1iZWFyLTEyODB4NzIwX2F2dF9zdWJ0X2ZyYWcubXA0IC0gRnJhZ21lbnRlZCBiZWFyXzEyODB4NzIwLm1wNCB3aXRoIHRleHQgdHJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHNydCBmcm9tIGJlYXItdnA4LXdlYnZ0dC53ZWJtIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAnc3VidCcgaGFuZGxlciB0eXBlLgotYmVhci0xMjgweDcyMF9hdl9mcmFnLm1wNCAtIEZyYWdtZW50ZWQgYmVhcl8xMjgweDcyMC5tcDQuCi1iZWFyLTEyODB4NzIwX2F2X2ZyYWctaW5pdHNlZ21lbnQtbXZoZF92ZXJzaW9uXzAtbXZoZF9kdXJhdGlvbl9iaXRzX2FsbF9zZXQubXA0OgotICBKdXN0IHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiBzZWdtZW50IG9mIGJlYXItMTI4MHg3MjBfYXZfZnJhZy5tcDQsIG1vZGlmaWVkIHRvCi0gIGhhdmUgdGhlIG12aGQgdmVyc2lvbiAwIDMyLWJpdCBkdXJhdGlvbiBmaWVsZCBzZXQgdG8gYWxsIDEncy4KLWJlYXItdnA4YS53ZWJtIC0gV2ViTSBWUDggdmlkZW8gd2l0aCBhbHBoYSBjaGFubmVsLgotYmVhci12cDhhLW9kZC1kaW1lbnNpb25zLndlYm0gLSBXZWJNIFZQOCB2aWRlbyB3aXRoIGFscGhhIGNoYW5uZWwgYW5kIG9kZCBkaW1lbnNpb25zLgotYmVhci1vcHVzLndlYm0gLSBPcHVzIEF1ZGlvIG9ubHkgV2ViTSBmaWxlLgotYmVhci1vcHVzLWVuZC10cmltbWluZy53ZWJtIC0gRmlsZSB0byB0ZXN0IGVuZCB0cmltbWluZy4gSXQgaGFzIG9uZSBieXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnRpZmljaWFsbHkgYWRkZWQgc28gdGhhdCB0aGVyZSBpcyBtYXhpbXVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIGF0IHRoZSBlbmQuIEl0IGlzIGFuIE9wdXMgQXVkaW8gb25seSBXZWJNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLgotbm9fc3RyZWFtcy53ZWJtIC0gSGVhZGVyLCBJbmZvLCAmIFRyYWNrcyBlbGVtZW50IGZyb20gYmVhci0zMjB4MjQwLndlYm0gc2xpZ2h0bHkgY29ycnVwdGVkIHNvIGl0IGxvb2tzCi0gICAgICAgICAgICAgICAgICBsaWtlIHRoZXJlIGFyZSBubyB0cmFja3MuCi1ub256ZXJvLXN0YXJ0LXRpbWUud2VibSAtIEhhcyB0aGUgc2FtZSBoZWFkZXJzIGFzIGJlYXItMzIweDI0MC53ZWJtIGJ1dCB0aGUgZmlyc3QgY2x1c3RlciBvZiB0aGlzIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIHNlY29uZCBjbHVzdGVyIG9mIGJlYXItMzIweDI0MC53ZWJtLiBUaGlzIGNyZWF0ZXMgdGhlIHNpdHVhdGlvbiB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWVkaWEgZGF0YSBkb2Vzbid0IHN0YXJ0IGF0IHRpbWUgMC4KLWJlYXItMzIweDI0MC1saXZlLndlYm0gLSBiZWFyLTMyMHgyNDAud2VibSByZW11eGVkIHcvbyBhIGR1cmF0aW9uIGFuZCB1c2luZyBjbHVzdGVycyB3aXRoIHVua25vd24gc2l6ZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmZtcGVnIC1pIGJlYXItMzIweDI0MC53ZWJtIC1hY29kZWMgY29weSAtdmNvZGVjIGNvcHkgLWYgd2VibSBwaXBlOjEgPiBiZWFyLTMyMHgyNDAtbGl2ZS53ZWJtCi12cDgtSS1mcmFtZS0xNjB4MjQwIC0gVGhlIGZpcnN0IEkgZnJhbWUgb2YgYSAxNjB4MjQwIHJlZW5jb2RlIG9mIGJlYXItMzIweDI0MC53ZWJtLgotdnA4LUktZnJhbWUtMzIweDEyMCAtIFRoZSBmaXJzdCBJIGZyYW1lIG9mIGEgMzIweDEyMCByZWVuY29kZSBvZiBiZWFyLTMyMHgyNDAud2VibS4KLXZwOC1JLWZyYW1lLTMyMHgyNDAgLSBUaGUgZmlyc3QgSSBmcmFtZSBvZiBiZWFyLTMyMHgyNDAud2VibS4KLXZwOC1JLWZyYW1lLTMyMHg0ODAgLSBUaGUgZmlyc3QgSSBmcmFtZSBvZiBhIDMyMHg0ODAgcmVlbmNvZGUgb2YgYmVhci0zMjB4MjQwLndlYm0uCi12cDgtSS1mcmFtZS02NDB4MjQwIC0gVGhlIGZpcnN0IEkgZnJhbWUgb2YgYSA2NDB4MjQwIHJlZW5jb2RlIG9mIGJlYXItMzIweDI0MC53ZWJtLgotdnA4LWNvcnJ1cHQtSS1mcmFtZSAtIEEgY29weSBvZiB2cDgtSS1mcmFtZS0zMjB4MjQwIHcvIGFsbCBieXRlcyBYT1JlZCB3LyAweEE1LgotCi1jb2xvdXIud2VibSAtIGEgV2ViTSBmaWxlIGNvbnRhaW5pbmcgY29sb3IgbWV0YWRhdGEgaW4gTUtWL1dlYk0gQ29sb3VyIGVsZW1lbnQKLSAgICBjb3BpZWQgZnJvbSBsaWJ3ZWJtL3Rlc3RpbmcvdGVzdGRhdGEvY29sb3VyLndlYm0KLQotQUFDIHRlc3QgZGF0YSBmcm9tIE1QRUctREFTSCBkZW1vcGxheWVyICg0NDEwMCBIeiwgc3RlcmVvKQotRHVyYXRpb24gb2YgZWFjaCBwYWNrZXQgaXMgKDEwMjQvNDQxMDAgSHopLCBhcHByb3hpbWF0ZWx5IDIzLjIyIG1zLgotYWFjLTQ0MTAwLXBhY2tldC0wICAtIHRpbWVzdGFtcDogMG1zCi1hYWMtNDQxMDAtcGFja2V0LTEgIC0gdGltZXN0YW1wOiAyMy4yMm1zCi1hYWMtNDQxMDAtcGFja2V0LTIgIC0gdGltZXN0YW1wOiA0Ni40NG1zCi1hYWMtNDQxMDAtcGFja2V0LTMgIC0gdGltZXN0YW1wOiA2OS42Nm1zCi0KLVZvcmJpcyB0ZXN0IGRhdGEgZnJvbSBiZWFyLm9ndiAoNDQxMDAgSHosIDE2IGJpdHMsIHN0ZXJlbykKLXZvcmJpcy1leHRyYWRhdGEgLSBWb3JiaXMgZXh0cmFkYXRhIHNlY3Rpb24KLXZvcmJpcy1wYWNrZXQtMCAgLSB0aW1lc3RhbXA6IDBtcywgZHVyYXRpb246IDBtcwotdm9yYmlzLXBhY2tldC0xICAtIHRpbWVzdGFtcDogMG1zLCBkdXJhdGlvbjogMG1zCi12b3JiaXMtcGFja2V0LTIgIC0gdGltZXN0YW1wOiAwbXMsIGR1cmF0aW9uOiAwbXMKLXZvcmJpcy1wYWNrZXQtMyAgLSB0aW1lc3RhbXA6IDI5MDJtcywgZHVyYXRpb246IDBtcwotCi0vLyAxMC1iaXQgdGVzdCBmaWxlKHMpCi1iZWFyLTMyMHgxODAtaGkxMHAubXA0Ci0KLS8vIEVuY3J5cHRlZCBGaWxlcwotYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuYy5tcDQgLSBBIGZyYWdtZW50ZWQgTVA0IHZlcnNpb24gb2YgdGhlIGF1ZGlvIHRyYWNrIG9mIGJlYXItMTI4MHg3MjAubXA0IGVuY3J5cHRlZCAoSVNPIENFTkMpIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleSBbMl0uCi1iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQgLSBBIGZyYWdtZW50ZWQgTVA0IHZlcnNpb24gb2YgdGhlIGF1ZGlvIHRyYWNrIG9mIGJlYXItMTI4MHg3MjAubXA0IGVuY3J5cHRlZCAoSVNPIENFTkMpIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleSBbMl0gd2l0aCBrZXkgcm90YXRpb24gWzNdLgotYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuY19jbGVhci1hbGwubXA0IC0gU2FtZSBhcyBiZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jLm1wNCBidXQgbm8gZnJhZ21lbnRzIGFyZSBlbmNyeXB0ZWQuCi1iZWFyLTEyODB4NzIwLXZfZnJhZy1jZW5jLm1wNCAtIEEgZnJhZ21lbnRlZCBNUDQgdmVyc2lvbiBvZiB0aGUgdmlkZW8gdHJhY2sgb2YgYmVhci0xMjgweDcyMC5tcDQgZW5jcnlwdGVkIChJU08gQ0VOQykgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXS4KLWJlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNCAtIEEgZnJhZ21lbnRlZCBNUDQgdmVyc2lvbiBvZiB0aGUgdmlkZW8gdHJhY2sgb2YgYmVhci0xMjgweDcyMC5tcDQgZW5jcnlwdGVkIChJU08gQ0VOQykgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXSB3aXRoIGtleSByb3RhdGlvbiBbM10uCi1iZWFyLTEyODB4NzIwLXZfZnJhZy1jZW5jX2NsZWFyLWFsbC5tcDQgLSBTYW1lIGFzIGJlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmMubXA0IGJ1dCBubyBmcmFnbWVudHMgYXJlIGVuY3J5cHRlZC4KLWJlYXItMTI4MHg3MjAtYV9mcmFnLWNlbmNfbWlzc2luZy1zYWl6LXNhaW8ubXA0IC0gQW4gaW52YWxpZCBmaWxlIHNpbWlsYXIgdG8gYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuYy5tcDQgYnV0IGhhcyBubyBzYWl6IGFuZCBzYWlvIGJveGVzLiBUbyBzYXZlIHNwYWNlLCBpdCBoYXMgb25seSBvbmUgZW5jcnlwdGVkIHNhbXBsZS4KLWJlYXItMzIweDI0MC12X2ZyYWctdnA5Lm1wNCAtIEJlYXIgdmlkZW8gd2l0aCBWUDkgY29kZWMgaW4gTVA0IGNvbnRhaW5lci4gR2VuZXJhdGVkIHdpdGggc2hha2EtcGFja2FnZXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvc2hha2EtcGFja2FnZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXIgaW49YmVhci12cDkud2VibSxzdHJlYW09dmlkZW8sb3V0PWJlYXItMzIweDI0MC12X2ZyYWctdnA5Lm1wNAotYmVhci0zMjB4MjQwLXZfZnJhZy12cDktY2VuYy5tcDQgLSBTYW1lIGFzIGFib3ZlLCB3aXRoIHZpZGVvIGVuY3J5cHRlZCB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdLiBHZW5lcmF0ZWQgd2l0aCBzaGFrYS1wYWNrYWdlciAoaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9zaGFrYS1wYWNrYWdlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VyIGluPWJlYXItdnA5LndlYm0sc3RyZWFtPXZpZGVvLG91dD1iZWFyLTMyMHgyNDAtdl9mcmFnLXZwOS1jZW5jLm1wNCAtLWVuYWJsZV9maXhlZF9rZXlfZW5jcnlwdGlvbiAtLWtleV9pZCAzMDMxMzIzMzM0MzUzNjM3MzgzOTMwMzEzMjMzMzQzNSAtLWtleSBlYmRkNjJmMTY4MTRkMjdiNjhlZjEyMmFmY2U0YWUzYwotYmVhci0zMjB4MjQwLTE2eDktYXNwZWN0LWF2X2VuYy1hdi53ZWJtIC0gYmVhci0zMjB4MjQwLTE2eDktYXNwZWN0LndlYm0gd2l0aCBhdWRpbyAmIHZpZGVvIGVuY3J5cHRlZCB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdCi1iZWFyLTMyMHgyNDAtYXZfZW5jLWF2LndlYm0gLSBiZWFyLTMyMHgyNDAud2VibSB3aXRoIGF1ZGlvICYgdmlkZW8gZW5jcnlwdGVkIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleSBbMl0uCi1iZWFyLTMyMHgyNDAtYXZfZW5jLWF2X2NsZWFyLTFzLndlYm0gLSBTYW1lIGFzIGJlYXItMzIweDI0MC1hdl9lbmMtYXYud2VibSBidXQgd2l0aCBubyBmcmFtZXMgaW4gdGhlIGZpcnN0IHNlY29uZCBlbmNyeXB0ZWQuCi1iZWFyLTMyMHgyNDAtYXZfZW5jLWF2X2NsZWFyLWFsbC53ZWJtIC0gU2FtZSBhcyBiZWFyLTMyMHgyNDAtYXZfZW5jLWF2LndlYm0gYnV0IHdpdGggbm8gZnJhbWVzIGVuY3J5cHRlZC4KLWJlYXItNjQweDM2MC1hdl9lbmMtYXYud2VibSAtIGJlYXItNjQweDM2MC53ZWJtIHdpdGggYXVkaW8gJiB2aWRlbyBlbmNyeXB0ZWQgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXS4KLWJlYXItMzIweDI0MC1hdl9lbmMtdi53ZWJtIC0gYmVhci0zMjB4MjQwLndlYm0gd2l0aCB2aWRlbyB0cmFjayBlbmNyeXB0ZWQgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXS4KLWJlYXItMzIweDI0MC1hdl9lbmMtYS53ZWJtIC0gYmVhci0zMjB4MjQwLndlYm0gd2l0aCBhdWRpbyB0cmFjayBlbmNyeXB0ZWQgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXS4KLWJlYXItMzIweDI0MC12X2VuYy12LndlYm0gLSBiZWFyLTMyMHgyNDAtdmlkZW8tb25seS53ZWJtIGVuY3J5cHRlZCB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdLgotYmVhci0zMjB4MjQwLXYtdnA5X2VuYy12LndlYm0gLSBiZWFyLXZwOS53ZWJtIFZQOSB2aWRlbyBvbmx5IGVuY3J5cHRlZCB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdLgotYmVhci0zMjB4MjQwLW9wdXMtYV9lbmMtYS53ZWJtIC0gYmVhci1vcHVzLndlYm0gZW5jcnlwdGVkIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleVsyXS4KLWJlYXItMzIweDI0MC1vcHVzLWF2X2VuYy1hdi53ZWJtIC0gYmVhci12cDktb3B1cy53ZWJtIHdpdGggYXVkaW8gJiB2aWRlbyBlbmNyeXB0ZWQgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5WzJdLgotYmVhci0zMjB4MjQwLW9wdXMtYXZfZW5jLXYud2VibSAtIGJlYXItdnA5LW9wdXMud2VibSB3aXRoIHZpZGVvIHRyYWNrIGVuY3J5cHRlZCB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXlbMl0uCi1iZWFyLTY0MHgzNjAtYV9mcmFnLWNlbmMubXA0IC0gQSBmcmFnbWVudGVkIE1QNCB2ZXJzaW9uIG9mIHRoZSBhdWRpbyB0cmFjayBvZiBiZWFyLTY0MHgzNjAubXA0IGVuY3J5cHRlZCAoSVNPIENFTkMpIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleSBbMl0uCi1iZWFyLTY0MHgzNjAtYV9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNCAtIEEgZnJhZ21lbnRlZCBNUDQgdmVyc2lvbiBvZiB0aGUgYXVkaW8gdHJhY2sgb2YgYmVhci02NDB4MzYwLm1wNCBlbmNyeXB0ZWQgKElTTyBDRU5DKSB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdIHdpdGgga2V5IHJvdGF0aW9uIFszXS4KLWJlYXItNjQweDM2MC12X2ZyYWctY2VuYy5tcDQgLSBBIGZyYWdtZW50ZWQgTVA0IHZlcnNpb24gb2YgdGhlIHZpZGVvIHRyYWNrIG9mIGJlYXItNjQweDM2MC5tcDQgZW5jcnlwdGVkIChJU08gQ0VOQykgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXSAgYW5kIHdpdGggc2FtcGxlIGVuY3J5cHRpb24gYXV4aWxpYXJ5IGluZm9ybWF0aW9uIGluIHRoZSBiZWdpbm5pbmcgb2YgbWRhdCBib3guCi1iZWFyLTY0MHgzNjAtdl9mcmFnLWNlbmMtc2VuYy5tcDQgLSBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBzYW1wbGUgZW5jcnlwdGlvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gU2FtcGxlRW5jcnlwdGlvbiAoJ3NlbmMnKSBib3guCi1iZWFyLTY0MHgzNjAtdl9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNCAtIEEgZnJhZ21lbnRlZCBNUDQgdmVyc2lvbiBvZiB0aGUgdmlkZW8gdHJhY2sgb2YgYmVhci02NDB4MzYwLm1wNCBlbmNyeXB0ZWQgKElTTyBDRU5DKSB1c2luZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdIHdpdGgga2V5IHJvdGF0aW9uIFszXS4KLWJlYXItYV9lbmMtYS53ZWJtIC0gYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHkud2VibSBlbmNyeXB0ZWQgdXNpbmcga2V5IElEIFsxXSBhbmQga2V5IFsyXS4KLWZyYW1lX3NpemVfY2hhbmdlLWF2X2VuYy12LndlYm0gLSB0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvbWVkaWEvcmVzb3VyY2VzL2ZyYW1lX3NpemVfY2hhbmdlLndlYm0gZW5jcnlwdGVkIHVzaW5nIGtleSBJRCBbMV0gYW5kIGtleSBbMl0uCi0KLQotWzFdIDMwMzEzMjMzMzQzNTM2MzczODM5MzAzMTMyMzMzNDM1Ci1bMl0gZWJkZDYyZjE2ODE0ZDI3YjY4ZWYxMjJhZmNlNGFlM2MKLVszXSBLZXlJZHMgYW5kIEtleXMgYXJlIGNyZWF0ZWQgYnkgbGVmdCByb3RhdGluZyBrZXkgSUQgWzFdIGFuZCBrZXkgWzJdIHVzaW5nCi0gICAgc3RkOjpyb3RhdGUgZm9yIGV2ZXJ5IG5ldyBjcnlwdG8gcGVyaW9kLiBUaGlzIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFRoZQotICAgIGFjdHVhbCBrZXkgcm90YXRpb24gYWxnb3JpdGhtIGlzIG9mdGVuIG11Y2ggbW9yZSBjb21wbGljYXRlZC4KLQotLy8gQ29udGFpbmVyIFRlc3RzIChhZGRpdGlvbmFsIGNvbnRhaW5lcnMgZGVyaXZlZCBmcm9tIGJlYXIub2d2KQotYmVhci5hYzMgICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIGFjMyAtYiAxOTJrIGJlYXIuYWMzIi4KLWJlYXIuYWR0cyAgIC0tIGNyZWF0ZWQgdXNpbmcgImF2Y29udiAtaSBiZWFyLm9ndiAtZiBhZHRzIC1zdHJpY3QgZXhwZXJpbWVudGFsIGJlYXIuYWR0cyIuCi1iZWFyLmFpZmYgICAtLSBjcmVhdGVkIHVzaW5nICJhdmNvbnYgLWkgYmVhci5vZ3YgLWYgYWlmZiBiZWFyLmFpZmYiLgotYmVhci5hc2YgICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIGFzZiBiZWFyLmFzZiIuCi1iZWFyLmF2aSAgICAtLSBjcmVhdGVkIHVzaW5nICJhdmNvbnYgLWkgYmVhci5vZ3YgLWYgYXZpIC1iIDE5MmsgYmVhci5hdmkiLgotYmVhci5lYWMzICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIGVhYzMgYmVhci5lYWMzIi4KLWJlYXIuZmxhYyAgIC0tIGNyZWF0ZWQgdXNpbmcgImF2Y29udiAtaSBiZWFyLm9ndiAtZiBmbGFjIGJlYXIuZmxhYyIuCi1iZWFyLmZsdiAgICAtLSBjcmVhdGVkIHVzaW5nICJhdmNvbnYgLWkgYmVhci5vZ3YgLWYgZmx2IGJlYXIuZmx2Ii4KLWJlYXIuaDI2MSAgIC0tIGNyZWF0ZWQgdXNpbmcgImF2Y29udiAtaSBiZWFyLm9ndiAtZiBoMjYxIC1zOjAgY2lmIGJlYXIuaDI2MSIuCi1iZWFyLmgyNjMgICAtLSBjcmVhdGVkIHVzaW5nICJhdmNvbnYgLWkgYmVhci5vZ3YgLWYgaDI2MyAtczowIGNpZiBiZWFyLmgyNjMiLgotYmVhci5tMnRzICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIG1wZWd0cyBiZWFyLm0ydHMiLgotYmVhci5tanBlZyAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIG1qcGVnIGJlYXIubWpwZWciLgotYmVhci5tcGVnICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIG1wZWcgYmVhci5tcGVnIi4KLWJlYXIucm0gICAgIC0tIGNyZWF0ZWQgdXNpbmcgImF2Y29udiAtaSBiZWFyLm9ndiAtZiBybSAtYiAxOTJrIGJlYXIucm0iLgotYmVhci5zd2YgICAgLS0gY3JlYXRlZCB1c2luZyAiYXZjb252IC1pIGJlYXIub2d2IC1mIHN3ZiAtYW4gYmVhci5zd2YiLgotCi0vLyBWREEgdGVzdCBmaWxlczogdGVzdC0yNWZwcwotdGVzdC0yNWZwcy5oMjY0OgotICBVc2luZyBmZm1wZWcgU1ZOLXIwLjUuOS00OjAuNS45LTB1YnVudHUwLjEwLjA0LjEgQCBXZWJLaXQgcjEyMjcxOCwgZ2VuZXJhdGVkCi0gIHdpdGg6Ci0gIGZmbXBlZyAtaSB0aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvbWVkaWEvY29udGVudC90ZXN0LTI1ZnBzLm1wNCBcCi0gICAgICAtdmNvZGVjIGNvcHkgLXZic2YgaDI2NF9tcDR0b2FubmV4YiAtYW4gdGVzdC0yNWZwcy5oMjY0Ci0KLXRlc3QtMjVmcHMuaDI2NC5tZDU6Ci0gIE1ENXMgb2YgUkdCIHRodW1ibmFpbCByZW5kZXJlZCB2ZXJzaW9uIG9mIHRlc3QtMjVmcHMuaDI2NCBkZWNvZGVkIHdpdGggSW50ZWwKLSAgVkFBUEkgYW5kIFY0TDJWREEgb24gdmFyaW91cyBwbGF0Zm9ybXMuCi0gIFdyaXR0ZW4gb3V0IGJ5IHZpZGVvX2RlY29kZV9hY2NlbGVyYXRvcl91bml0dGVzdC4KLSAgVGhlc2UgZGlmZmVyIGJldHdlZW4gaW1wbGVtZW50YXRpb25zIGJlY2F1c2UgY29sb3Igc3BhY2UtY29udmVydGVkIGZyYW1lcyBhcmUKLSAgbm90IHNwZWNpZmllZCB0byB0aGUgbGFzdCBiaXQgYW5kIEdMRVMgc2hhZGVyL3RleHR1cmUgZmlsdGVyaW5nCi0gIHByZWNpc2lvbiB2YXJpZXMuCi0KLXRlc3QtMjVmcHMudnA4OgotICBmZm1wZWcgZ2l0LTIwMTItMDctMTktYThkOGU4NiwgbGlidnB4IFRvVCA3LzE5LCBjaHJvbWl1bSByMTQ3MjQ3LAotICBta3ZleHRyYWN0IHY1LjAuMQotICBmZm1wZWcgLWkgdGVzdC0yNWZwcy5oMjY0IC12Y29kZWMgbGlidnB4IC1hbiB0ZXN0LTI1ZnBzLndlYm0gJiYgXAotICAgICAgbWt2ZXh0cmFjdCB0cmFja3MgdGVzdC0yNWZwcy53ZWJtIDE6dGVzdC0yNWZwcy52cDggJiYgcm0gdGVzdC0yNWZwcy53ZWJtCi0KLXRlc3QtMjVmcHMudnA4Lm1kNToKLSAgTUQ1IG9mIFJHQiB0aHVtYm5haWwgcmVuZGVyZWQgdmVyc2lvbiBvZiB0ZXN0LTI1ZnBzLnZwOC4gV3JpdHRlbiBvdXQgYnkKLSAgdmlkZW9fZGVjb2RlX2FjY2VsZXJhdG9yX3VuaXR0ZXN0LgotCi10ZXN0LTI1ZnBzLnZwOToKLSAgYXZjb252IDkuMTYtNjo5LjE2LTB1YnVudHUwLjE0LjA0LjEsIHZweGVuYyB2MS4zLjAKLSAgYXZjb252IC1pIHRlc3QtMjVmcHMuaDI2NCAtYzp2IHJhd3ZpZGVvIC1waXhfZm10IHl1djQyMHAgdGVzdC0yNWZwc19pNDIwLnl1dgotICB2cHhlbmMgdGVzdC0yNWZwc19pNDIwLnl1diAtbyB0ZXN0LTI1ZnBzLnZwOSAtLWNvZGVjPXZwOSAtdyAzMjAgLWggMjQwIC0taXZmIFwKLSAgICAgIC0tcHJvZmlsZT0wIC0ta2YtbWluLWRpc3Q9MCAtLWtmLW1heC1kaXN0PTE1MCAtLWxhZy1pbi1mcmFtZXM9MjQgXAotICAgICAgLS1kcm9wLWZyYW1lPTAgLS10YXJnZXQtYml0cmF0ZT0xNDAgLS1jcS1sZXZlbD0yMyAtLW1pbi1xPTQgLS1tYXgtcT01NiBcCi0gICAgICAtLXN0YXRpYy10aHJlc2g9MTAwMCAtLWFybnItbWF4ZnJhbWVzPTcgLS1hcm5yLXN0cmVuZ3RoPTUgLS1hcm5yLXR5cGU9MyBcCi0gICAgICAtLWNwdS11c2VkPTEgLS1nb29kIC0tdGlsZS1jb2x1bW5zPTEgLS1wYXNzZXM9MiAtLXRocmVhZHM9MSAtLWZwcz0yNS8xIFwKLSAgICAgIC0tZW5kLXVzYWdlPWNxIC0tYXV0by1hbHQtcmVmPTEgLS1iaWFzLXBjdD01MCAtLW1pbnNlY3Rpb24tcGN0PTAgXAotICAgICAgLS1tYXhzZWN0aW9uLXBjdD0yMDAwIC0tdW5kZXJzaG9vdC1wY3Q9MTAwCi0KLXRlc3QtMjVmcHMudnA5Lm1kNToKLSAgTUQ1IG9mIFJHQiB0aHVtYm5haWwgcmVuZGVyZWQgdmVyc2lvbiBvZiB0ZXN0LTI1ZnBzLnZwOS4gV3JpdHRlbiBvdXQgYnkKLSAgdmlkZW9fZGVjb2RlX2FjY2VsZXJhdG9yX3VuaXR0ZXN0LgotCi0vLyBWREEgdGVzdCBmaWxlczogYmVhcgotYmVhci5oMjY0OgotICBVc2luZyBmZm1wZWcgdmVyc2lvbiAwLjguNi00OjAuOC42LTB1YnVudHUwLjEyLjA0LjEsIGdlbmVyYXRlZCB3aXRoCi0gIGJlYXIubXA0IChodHRwczovL2Nocm9taXVtY29kZXJldmlldy5hcHBzcG90LmNvbS8xMDgwNTA4OSk6Ci0gIGZmbXBlZyAtaSBiZWFyLm1wNCAtdmNvZGVjIGNvcHkgLXZic2YgaDI2NF9tcDR0b2FubmV4YiBcCi0gICAgICAtYW4gYmVhci5oMjY0Ci0KLWJlYXIuaDI2NC5tZDU6Ci0gIE1ENXMgb2YgUkdCIHRodW1ibmFpbCByZW5kZXJlZCB2ZXJzaW9uIG9mIGJlYXIuaDI2NCBkZWNvZGVkIHdpdGggSW50ZWwKLSAgVkFBUEkgb24gSXZ5IEJyaWRnZSBhbmQgU2FuZHkgQnJpZGdlIGFuZCBWNEwyVkRBIG9uIEV4eW5vcy4KLSAgV3JpdHRlbiBvdXQgYnkgdmlkZW9fZGVjb2RlX2FjY2VsZXJhdG9yX3VuaXR0ZXN0LgotICBUaGVzZSBkaWZmZXIgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbnMgYmVjYXVzZSBjb2xvciBzcGFjZS1jb252ZXJ0ZWQgZnJhbWVzIGFyZQotICBub3Qgc3BlY2lmaWVkIHRvIHRoZSBsYXN0IGJpdCBhbmQgR0xFUyBzaGFkZXIvdGV4dHVyZSBmaWx0ZXJpbmcKLSAgcHJlY2lzaW9uIHZhcmllcy4KLQotLy8gVkRBIHRlc3QgZmlsZXM6IG5wb3QtdmlkZW8KLW5wb3QtdmlkZW8uaDI2NDoKLSAgVXNpbmcgZmZtcGVnIHZlcnNpb24gMC44LjYtNDowLjguNi0wdWJ1bnR1MC4xMi4wNC4xLCBnZW5lcmF0ZWQgd2l0aAotICBucG90LXZpZGVvLm1wNCAoaHR0cHM6Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy84MzQyMDIxKToKLSAgZmZtcGVnIC1pIG5wb3QtdmlkZW8ubXA0IC12Y29kZWMgY29weSAtdmJzZiBoMjY0X21wNHRvYW5uZXhiIFwKLSAgICAgIC1hbiBucG90LXZpZGVvLmgyNjQKLQotbnBvdC12aWRlby5oMjY0Lm1kNToKLSAgTUQ1cyBvZiBSR0IgdGh1bWJuYWlsIHJlbmRlcmVkIHZlcnNpb24gb2YgbnBvdC12aWRlby5oMjY0IGRlY29kZWQgd2l0aCBJbnRlbAotICBWQUFQSSBvbiBJdnkgQnJpZGdlIGFuZCBTYW5keSBCcmlkZ2UgYW5kIFY0TDJWREEgb24gRXh5bm9zLgotICBXcml0dGVuIG91dCBieSB2aWRlb19kZWNvZGVfYWNjZWxlcmF0b3JfdW5pdHRlc3QuCi0gIFRoZXNlIGRpZmZlciBiZXR3ZWVuIGltcGxlbWVudGF0aW9ucyBiZWNhdXNlIGNvbG9yIHNwYWNlLWNvbnZlcnRlZCBmcmFtZXMgYXJlCi0gIG5vdCBzcGVjaWZpZWQgdG8gdGhlIGxhc3QgYml0IGFuZCBHTEVTIHNoYWRlci90ZXh0dXJlIGZpbHRlcmluZwotICBwcmVjaXNpb24gdmFyaWVzLgotCi0vLyBWREEgdGVzdCBmaWxlczogcmVkLWdyZWVuCi1yZWQtZ3JlZW4uaDI2NDoKLSAgVXNpbmcgZmZtcGVnIHZlcnNpb24gMC44LjYtNDowLjguNi0wdWJ1bnR1MC4xMi4wNC4xLCBnZW5lcmF0ZWQgd2l0aAotICByZWQtZ3JlZW4ubXA0IChodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzgzNDIwMjEpOgotICBmZm1wZWcgLWkgcmVkLWdyZWVuLm1wNCAtdmNvZGVjIGNvcHkgLXZic2YgaDI2NF9tcDR0b2FubmV4YiBcCi0gICAgICAtYW4gcmVkLWdyZWVuLmgyNjQKLQotcmVkLWdyZWVuLmgyNjQubWQ1OgotICBNRDVzIG9mIFJHQiB0aHVtYm5haWwgcmVuZGVyZWQgdmVyc2lvbiBvZiByZWQtZ3JlZW4uaDI2NCBkZWNvZGVkIHdpdGggSW50ZWwKLSAgVkFBUEkgb24gSXZ5IEJyaWRnZSBhbmQgU2FuZHkgQnJpZGdlIGFuZCBWNEwyVkRBIG9uIEV4eW5vcy4KLSAgV3JpdHRlbiBvdXQgYnkgdmlkZW9fZGVjb2RlX2FjY2VsZXJhdG9yX3VuaXR0ZXN0LgotICBUaGVzZSBkaWZmZXIgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbnMgYmVjYXVzZSBjb2xvciBzcGFjZS1jb252ZXJ0ZWQgZnJhbWVzIGFyZQotICBub3Qgc3BlY2lmaWVkIHRvIHRoZSBsYXN0IGJpdCBhbmQgR0xFUyBzaGFkZXIvdGV4dHVyZSBmaWx0ZXJpbmcKLSAgcHJlY2lzaW9uIHZhcmllcy4KLQotLy8gVkVBIHRlc3QgZmlsZXM6Ci1iZWFyXzMyMHgxOTJfNDBmcmFtZXMueXV2Ci0gIEZpcnN0IDQwIHJhdyBpNDIwIGZyYW1lcyBvZiBiZWFyLTEyODB4NzIwLm1wNCBzY2FsZWQgZG93biB0byAzMjB4MTkyIGZvcgotICB2aWRlb19lbmNvZGVfYWNjZWxlcmF0b3JfdW5pdHRlc3QuCi0KLS8vIFZQOSBwYXJzZXIgdGVzdCBmaWxlczoKLWJlYXItdnA5Lml2ZgotICAtIENyZWF0ZWQgdXNpbmcgImF2Y29udiAtaSBiZWFyLXZwOS53ZWJtIC12Y29kZWMgY29weSAtYW4gLWYgaXZmIGJlYXItdnA5Lml2ZiIuCi1iZWFyLXZwOS5pdmYuY29udGV4dCAKLXRlc3QtMjVmcHMudnA5LmNvbnRleHQKLSAgLSBNYW51YWxseSBkdW1wZWQgZnJvbSBsaWJ2cHggd2l0aCBiZWFyLXZwOS5pdmYgYW5kIHRlc3QtMjVmcHMudnA5LiBTZWUKLSAgICB2cDlfcGFyc2VyX3VuaXR0ZXN0LmNjIGZvciBkZXNjcmlwdGlvbiBvZiB0aGVpciBmb3JtYXQuCi0KLS8vIFdlYk0gZmlsZXMgZm9yIHRlc3RpbmcgbXVsdGlwbGUgdHJhY2tzLgotZ3JlZW4tYTMwMGh6LndlYm0gLSBXZWJNIGZpbGUgY29udGFpbmluZyAxMiBzZWNvbmRzIG9mIHNvbGlkIGdyZWVuIHZpZGVvICsgMzAwSHogc2luZSB3YXZlIGF1ZGlvCi1yZWQtYTUwMGh6LndlYm0gLSBXZWJNIGZpbGUgY29udGFpbmluZyAxMCBzZWNvbmRzIG9mIHNvbGlkIHJlZCB2aWRlbyArIDUwMEh6IHNpbmUgd2F2ZSBhdWRpbwotICAtIENyZWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgotICAgIGZmbXBlZyAtZiBsYXZmaSAtaSBjb2xvcj1jPWdyZWVuOnNpemU9MTYweDEyMCAtdCAxMiAtYzp2IGxpYnZweCBncmVlbi53ZWJtCi0gICAgZmZtcGVnIC1mIGxhdmZpIC1pIGNvbG9yPWM9cmVkOnNpemU9MzIweDI0MCAtdCAxMCAtYzp2IGxpYnZweCByZWQud2VibQotICAgIGZmbXBlZyAtZiBsYXZmaSAtaSAic2luZT1mcmVxdWVuY3k9MzAwOnNhbXBsZV9yYXRlPTQ4MDAwIiAtdCAxMiAtYzp2IGxpYnZweCBhMzAwaHoud2VibQotICAgIGZmbXBlZyAtZiBsYXZmaSAtaSAic2luZT1mcmVxdWVuY3k9NTAwOnNhbXBsZV9yYXRlPTQ4MDAwIiAtdCAxMCAtYzp2IGxpYnZweCBhNTAwaHoud2VibQotICAgIGZmbXBlZyAtaSBncmVlbi53ZWJtIC1pIGEzMDBoei53ZWJtIC1tYXAgMCAtbWFwIDEgZ3JlZW4tYTMwMGh6LndlYm0KLSAgICBmZm1wZWcgLWkgcmVkLndlYm0gLWkgYTUwMGh6LndlYm0gLW1hcCAwIC1tYXAgMSByZWQtYTUwMGh6LndlYm0KLQotLy8gSlBFRyB0ZXN0IGZpbGVzOgotcGl4ZWwtMTI4MHg3MjAuanBnIC0gU2luZ2xlIE1KRVBHIGVuY29kZWQgZnJhbWUgb2YgMTI4MHg3MjAsIGNhcHR1cmVkIG9uIENocm9tZWJvb2sgUGl4ZWwuIFRoaXMgaW1hZ2UgZG9lcyBub3QgaGF2ZSBIdWZmbWFuIHRhYmxlLgotcGVhY2hfcGktMTI4MHg3MjAuanBnIC0gU2luZ2xlIE1KUEVHIGVuY29kZWQgZnJhbWUgb2YgMTI4MHg3MjAsIGNhcHR1cmVkIG9uIFNhbXN1bmcgQ2hyb21lYm9vayAyKDEzIikuIFRoaXMgaW1hZ2UgaGFzIEh1ZmZtYW4gdGFibGUuCi1ibGFuay0xeDEuanBnIC0gMXgxIHNtYWxsIHBpY3R1cmUgdG8gdGVzdCBzcGVjaWFsIGNhc2VzLgotCi0vLyBNUDQgZmlsZXMgd2l0aCBub24tc3F1YXJlIHBpeGVscy4KLW1lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRoX3Bhc3AubXA0Ci0gIFNpemUgaW4gVEtIRCBpcyAoNjM5LjJ4MzYwKSBhbmQgc2l6ZSBpbiBTVFNEIGlzICg0NzB4MzYwKS4gQSBQQVNQIGJveCBpcwotICBwcmVzZW50IHdpdGggaFNwYWNpbmc9MzQgYW5kIHZTcGFjaW5nPTI1LiBOb3RlIHRoYXQgNDcwLjAgKiAzNCAvIDI1ID0gNjM5LjIuCi0KLW1lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRob3V0X3Bhc3AubXA0Ci0gIFNpemUgaW4gVEtIRCBpcyAoNjM5LjJ4MzYwKSBhbmQgc2l6ZSBpbiBTVFNEIGlzICg0NzB4MzYwKS4gTm8gUEFTUCBib3ggaXMKLSAgcHJlc2VudC4KLQotLy8gTVA0IGZpbGVzIHdpdGggQUMzIGFuZCBFQUMzIGF1ZGlvCi1tZWRpYS90ZXN0L2RhdGEvYmVhci1hYzMtb25seS1mcmFnLm1wNAotICBBQzMgYXVkaW8gaW4gZnJhbWVudGVkIE1QNCwgZ2VuZXJhdGVkIHdpdGgKLSAgZmZtcGVnIC1pIGJlYXIuYWMzIC1hY29kZWMgY29weSAtbW92ZmxhZ3MgZnJhZ19rZXlmcmFtZSBiZWFyLWFjMy1vbmx5LWZyYWcubXA0Ci0KLW1lZGlhL3Rlc3QvZGF0YS9iZWFyLWVhYzMtb25seS1mcmFnLm1wNAotICBFQUMzIGF1ZGlvIGluIGZyYW1lbnRlZCBNUDQsIGdlbmVyYXRlZCB3aXRoCi0gIGZmbXBlZyAtaSBiZWFyLmVhYzMgLWFjb2RlYyBjb3B5IC1tb3ZmbGFncyBmcmFnX2tleWZyYW1lIGJlYXItZWFjMy1vbmx5LWZyYWcubXA0Ci0KLS8vIE1wZWcydHMgc3RyZWFtIHdpdGggQUFDIEhFIGF1ZGlvIHRoYXQgdXNlcyBTQlIKLW1lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFhY19oZS50cwotICBHZW5lcmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgotICBmZm1wZWcgLWkgYmVhci0xMjgweDcyMC5tcDQgLWM6diBsaWJ4MjY0IC1jOmEgbGliZmRrX2FhYyAtcHJvZmlsZTphIGFhY19oZSAgYmVhci0xMjgweDcyMC1hYWNfaGUudHMKLQotLy8gTVA0IGZpbGUgd2l0aCBIRVZDCi1tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXZfZnJhZy1oZXZjLm1wNAotICBIRVZDIHZpZGVvIHN0cmVhbSBpbiBmcmFnbWVudGVkIE1QNCBjb250YWluZXIsIGdlbmVyYXRlZCB3aXRoCi0gIGZmbXBlZyAtaSBiZWFyLTMyMHgyNDAud2VibSAtYzp2IGxpYngyNjUgLWFuIC1tb3ZmbGFncyBmYXN0c3RhcnQrZnJhZ19rZXlmcmFtZSBiZWFyLTMyMHgyNDAtdl9mcmFnLWhldmMubXA0Ci0KLS8vIE11bHRpLXRyYWNrIE1QNCBmaWxlCi0vLyAoYykgY29weXJpZ2h0IDIwMDgsIEJsZW5kZXIgRm91bmRhdGlvbiAvIHd3dy5iaWdidWNrYnVubnkub3JnCi1tZWRpYS90ZXN0L2RhdGEvYmJiLTMyMHgyNDAtMnZpZGVvLTJhdWRpby5tcDQKLSAgR2VuZXJhdGVkIHVzaW5nIGZvbGxvd2luZyBjb21tYW5kcwotICAvLyBEb3dubG9hZCB0aGUgc291cmNlIGZpbGUgd2l0aCAxIHZpZGVvIGFuZCAxIGF1ZGlvIHN0cmVhbS4KLSAgd2dldCBodHRwOi8vZGlzdHJpYnV0aW9uLmJiYjNkLnJlbmRlcmZhcm1pbmcubmV0L3ZpZGVvL21wNC9iYmJfc3VuZmxvd2VyXzEwODBwXzMwZnBzX25vcm1hbC5tcDQKLSAgLy8gR2VuZXJhdGUgYSBzY2FsZWQgZG93biB0byAzMjB4MjQwIHZpZGVvICsgMiBjaGFubmVsIEFBQyBMQyBhdWRpbyBmcm9tIHRoZSBzb3VyY2UgZmlsZS4KLSAgZmZtcGVnIC1pIGJiYl9zdW5mbG93ZXJfMTA4MHBfMzBmcHNfbm9ybWFsLm1wNCAtYzp2IGxpYngyNjQgLWNyZiAzNiAtdmYgIHNjYWxlPTMyMDoyNDAgLWM6YSBsaWJmZGtfYWFjIC1hYyAyIC10IDI0IGJiYjEubXA0Ci0gIC8vIEdlbmVyYXRlIGEgZmlsZSB3aXRoIHRoZSBvcmlnaW5hbCB2aWRlbyBzY2FsZWQgZG93biB0byAzMjB4MjQwIGFuZCBmbGlwcGVkIHVwc2lkZSBkb3duIGFuZCBzaW5lIHdhdmUgaW5zdGVhZCBvZiBhdWRpby4KLSAgZmZtcGVnIC1pIGJiYl9zdW5mbG93ZXJfMTA4MHBfMzBmcHNfbm9ybWFsLm1wNCAtZiBsYXZmaSAtaSAic2luZT1mcmVxdWVuY3k9NTAwOnNhbXBsZV9yYXRlPTQ4MDAwIiAtbWFwIDA6diAtbWFwIDE6YSAtYzp2IGxpYngyNjQgLWNyZiAzNiAtdmYgc2NhbGU9MzIwOjI0MCx2ZmxpcCAtYzphIGxpYmZka19hYWMgLWFjIDIgLXQgMjQgYmJiMi5tcDQKLSAgLy8gQ29tYmluZSB0aGUgdHdvIGZpbGVzIGdlbmVyYXRlZCBhYm92ZSBpbnRvIGEgc2luZ2xlIGZyYWdtZW50ZWQgLm1wNCBmaWxlIHdpdGggMiB2aWRlbyBhbmQgMiBhdWRpbyB0cmFja3MuCi0gIGZmbXBlZyAtaSBiYmIxLm1wNCAtaSBiYmIyLm1wNCAtbWFwIDA6MCAtbWFwIDA6MSAtbWFwIDE6MCAtbWFwIDE6MSAtYzp2IGNvcHkgLWM6YSBjb3B5IC1tb3ZmbGFncyBmcmFnX2tleWZyYW1lK29taXRfdGZoZF9vZmZzZXQrc2VwYXJhdGVfbW9vZiBiYmItMzIweDI0MC0ydmlkZW8tMmF1ZGlvLm1wNAotCi0vLyBNdWx0aS10cmFjayBXZWJNIGZpbGUKLW1lZGlhL3Rlc3QvZGF0YS9tdWx0aXRyYWNrLTN2aWRlby0yYXVkaW8ud2VibQotICAgIC8vR2VuZXJhdGVkIHVzaW5nIGZvbGxvd2luZyBjb21tYW5kczoKLSAgICBmZm1wZWcgLWYgbGF2ZmkgLWkgY29sb3I9Yz1yZWQ6c2l6ZT0zMjB4MjQwIC10IDUgLWM6diBsaWJ2cHggcmVkLndlYm0KLSAgICBmZm1wZWcgLWYgbGF2ZmkgLWkgY29sb3I9Yz1ncmVlbjpzaXplPTMyMHgyNDAgLXQgNSAtYzp2IGxpYnZweCBncmVlbi53ZWJtCi0gICAgZmZtcGVnIC1mIGxhdmZpIC1pIGNvbG9yPWM9Ymx1ZTpzaXplPTE2MHgxMjAgLXQgMTAgLWM6diBsaWJ2cHggYmx1ZS53ZWJtCi0gICAgZmZtcGVnIC1mIGxhdmZpIC1pICJzaW5lPWZyZXF1ZW5jeT0zMDA6c2FtcGxlX3JhdGU9NDgwMDAiIC10IDEwIC1jOnYgbGlidnB4IGEzMDBoei53ZWJtCi0gICAgZmZtcGVnIC1mIGxhdmZpIC1pICJzaW5lPWZyZXF1ZW5jeT01MDA6c2FtcGxlX3JhdGU9NDgwMDAiIC10IDUgLWM6diBsaWJ2cHggYTUwMGh6LndlYm0KLSAgICBmZm1wZWcgLWkgcmVkLndlYm0gLWkgZ3JlZW4ud2VibSAtaSBibHVlLndlYm0gLWkgYTMwMGh6LndlYm0gLWkgYTUwMGh6LndlYm0gLW1hcCAwIC1tYXAgMSAtbWFwIDIgLW1hcCAzIC1tYXAgNCAgbXVsdGl0cmFjay0zdmlkZW8tMmF1ZGlvLndlYm0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYWFjLTQ0MTAwLXBhY2tldC0wIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hYWMtNDQxMDAtcGFja2V0LTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTMyZDEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hYWMtNDQxMDAtcGFja2V0LTAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2FhYy00NDEwMC1wYWNrZXQtMSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYWFjLTQ0MTAwLXBhY2tldC0xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGQxYzY5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYWFjLTQ0MTAwLXBhY2tldC0xCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hYWMtNDQxMDAtcGFja2V0LTIgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2FhYy00NDEwMC1wYWNrZXQtMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAzMzg4Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2FhYy00NDEwMC1wYWNrZXQtMgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYWFjLTQ0MTAwLXBhY2tldC0zIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hYWMtNDQxMDAtcGFja2V0LTMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjNiNGYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hYWMtNDQxMDAtcGFja2V0LTMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2F1ZGlvLXN0YXJ0LXRpbWUtb25seS53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9hdWRpby1zdGFydC10aW1lLW9ubHkud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwODhjOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2F1ZGlvLXN0YXJ0LXRpbWUtb25seS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iYWxpXzY0MHgzNjBfUDQyMC55dXYgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JhbGlfNjQweDM2MF9QNDIwLnl1dgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkNDcxYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JhbGlfNjQweDM2MF9QNDIwLnl1dgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLURFSEtMTE1OTlBQUFBRU1FTUlJSU1NSUlFTUVFQT05NTEpLSkdHRkNBQT4+Ojs6Ozs4ODg4ODg5OTk4OTo6OTg4Ojk3Njc3NTU1NDQyMTExMDAuLi0tKyspJykpKCgpKSgoKCgnJygoKCgnKCkpKSkqKisrLCwqKisrLCwsLCwsLCwrKysrKikpKSkpKSkpKSkpKCgnJyYmJiYmJiYmJiYmJiYmJiYmJicnJiYmJiYmJiYmJicnJycnJycoKCkrLCwtLzAyMjQ1NTc3Nzg4OTk5OTk5OTk6Ojk5OTk6Ojg4NzY2Nzc6PkVKUVlhaGxxdXd4eHd1cW1qaGhnaGpsbm5vb29vcG9wb3FzdHd5fH5+fn58eHJsZFlOQTQuLCkrKysrLCorKysuNDpCT1plbnh+g4aFg4J9d21nWEg7LyklJCQjJCUlJyouMTc4PkNMU15lbXR7gIB8enVvaWFZU09SUVRUUVNMRD02MCclIyQkIiIjIiIiISEjISIhICMlJigrMDc9REtQV15jZ2xyd3h5eHd1dnZ1dXVva19XS0ZBPz9AQEBAQEA/Pz8/PT06OTk5NzU1NDMxMDAvMDM5PENOVl1mbHF0eXt8enp2cm1kXU9FOTIsKykoKCcnJycmKCgoKSkpKyotMDEyMzY3Nzg9Pj9DRkZKTlVcYmtwdHh6e31/f4GCgoKDg4GBgYGAgH59e3l6dnR0eHt/gIKDhoiHh4WDfnx6eHV0dHmAhIaFg4ODgHx4cGZYSj00Ly4tLDAzOD1ETlpia3N4fICCgYCBgYODgoJ/fn17eXZ3d3p6fIGEiIqLi4uKioqKiIeHh4iIiIaAeXBkWE9IRUE+PDtGSUlMTExNTk5QUFBQUVJRVFNSUlNTUlJSUlFRUE9OTUxKSkhISEVBQUA9PDs8PDo4Ojo6Ojo4OTk5OTo6Ojk4ODg4ODc2NjY1NTQ0MjExMTAwLi4tLSsrKigpKSgoKSkoKCgoJycoKCgoJygpKSkpKiorKywsLCwrKywsLCwsLCwsKysrKyopKSkpKSkpKSkpKSgoJycmJiYmJiYmJiYmJiYmJiYmJiYnJyYmJiYmJiYmJiYnJycnJycnKCgpKywtLzAxMTI0NTU3ODg4ODk5OTk5OTk5Ojo5OTk5Ojo5OTk4Nzg7PURLUVlfZ29zeXp8fHx6dHFsamtrbG1vb3Bwb29tbGtqampra29yd3p+gYB+fn53c2tgVUg8MisqKysrKysrLCwrLDE3P0pWYW13fYGFhoWEgXt0a15QPzMqJiQkJCUmKCwvMjU4PUFFSlJaY2pyfICBgH96dW5kWlNPTVRicGZWTkU9NikjJCMjIyIiIyIiIiEhIyIiISEiJCYrLTQ9Q0pQVlxiZWxxdXl6e3p3dXZ2dXV1c2thVktFQj8/QEBAQEBAPz8/Pz4+PDo6Ojc1NTQzMTAwMDExNjxDTVVdZmxxdHl7fHp6d3ZvZl5SRzszLispKCgnJycnJicoKCkpKSssLi4wMDM1Njg5Oz1BQkRHS09YXmRrcHR5fX6AgoKEhIaGh4eGhoSEgoB+fXx7d3NycnZ5en1/g4SFhYWFg399e3l5eHl+hYaGhYWCgn97dW1iUkQ5Mi8uLi4wMzg9Qk1YYmtzeHyAgoGAf4GBgYGAf3x6d3d0c3N2eHp/hIiLjYuLi4uLi4mIiIiJiYiGgXhuYldOSUZBPjw7SEhJS0xMTk9PT1BQUVFRUlFTUlJSUlJSUVBQUE5NTEtKSkhHRURBQEA+PTw7Ojg6OTg5OTg5OTo5OTk5Ojo5OTk5ODg3NzY2NTUzMzIxMDAvLy4uLSwsKysqKCgoKCgoKCgoKCgoKCgpKSkpKSkpKSoqLCwsLCwsLCwtLSwsLCwsLCwsLCwrKisrKiopKSkpKSkoKCcnJycnJycnJiYmJignJygnJScmJycmJiYmJiYnJyYmJycnJygoKCgpKSosLi4wMTMzNDU1NTg4ODg5OTk5ODg5OTk5OTk5OTk6OTk3Nzg7PkNHT1VeYmpxdnt9fX57eHZwbmxsa2xtbm9vbW1raWdlY2FeYWRqbXJ3e4CCgoJ/fHZxaV5RQjYuKisqKiorKysrKyswNT1FUV9qcnuAhYiGhoJ9eG5jVEU2LSYkJCUmJywvMTQ4PT5CREhMVV5lb3eAhISDf3pzaGBWUE5dZXV2b2BmeXNAJCEjIyMjIyMiIiIiISIiIiMjJCQqLjM5QUdNU1tgZWpwc3h7fXx4dnZ1dnZ2c29qYFRNREA/Pz8/QEA/Pz8/QD49PTw7Ojo3NTU0MjEvMC4uMjg7Qk1UXGhucnV4fH59fHt2cWljVko+NC4rKSkpKCgnJygoKCgpKSorLC0wMTEzNDU4OT0+QEFFSk1TWl9ma3J2e3+Cg4ODhYaHh4iGhYWEhoF/fXx6d3RycHBxdXZ5fX+Dg4WFhYF+fnt5enp7gYaHh4aChIF9eXJqXE4+NTEtLCwuMDM3PENNV2Bpcnh8f4GBgX+AgIB/f317eHd0cm9vcnV4f4SJioqMjI2NioqKioqKiYmJh4B3a15TTklGQT47OklKSktNTE5PT09QUFFRUVJTUlJSUVFQUFBQT09NTEtLSUlHRkRDQUA/Pjw7Ozo5OTc3OTk5Ojo6OTk4Ojo6OTk5OTg4Nzc2NjQzMzMyMTAwLi4uLi4uLSwrKikpKCgpKSgoKCgoKCgoKSkpKSkpKSkqKiwsLCwsLCwsLS0sLCwsLCwsLCwsKyorKyoqKikpKSkpKCgoJycnJycnJyYmJiYoKCgoJyYnJycmJiYmJiYmJycmJicnJycoKCgoKSkpKy0vMDEyMjM1NTU0Njg4OTk5OTg4OTk5OTk5OTk7Ojk5Nzc6Oj9ESlJZXmZsc3h8fn18eXZzbmxqamloaGlmZmVmZGBeWlhVVVhcYWVsdXqAgoKCgX58dm1iV0k7NCwqLCoqKioqKisrLjI4QU5YY295gIaIh4eDfn10altNPTApJCQkJSsuMTY4Oz9CRENGS09YZG11foOGhoJ9d25jV09XbGBpbHBrZHd/XkkrISQjIyMjIiIiIiEiIiIjIiUoLjM7QEZNUllfY2ducXV5fXx7eXZ2dnd3d3VwaGBUS0RCPz8/P0BAPz8/Pz49PT08Ozo6NzU1NDExLi8uLjI3O0JKVFxmbnJ1eHd6fn18d3NsY1pOPzgxKygpKSgoJycpKSgoKSkqKy0uMDEzMzM0Njc5Pj5ESU5TWV9haW10eH2Ag4SGhoeIiYiIiIWFg4GAfnx5dnRxb29vcHBzdXh/g4OEhIOBfn59e3x8foGGhoaFhIKAe3ZvZlhJOzMvLzAuLjAyNTpCTVVeZ3B3fH+Af39+fn9+fnx7eHZ0cW1sbG5ydnuBh4mKi4uMjIqKioqKiouLioWAd2pdUktHRUI/PDtISUpKTExNTk9PT09RUVJSUlFSUlFRUFBQT1BPTEpKSkhHR0VDQUA/Pj08Ozo5Ojo4ODg4ODk6Ojo6Ojo6Ojk5ODg4ODY1NTQ0MzIyMjEwMDAwLy8tLS0tLCspKSkoKCgoKCgoKCgoKCgpKSkpKSkpKioqKiwsLCwsLCwsLCwsLCwsLCwsLCwrKiorKyooKSkqKCkpKSkoKCcnJycnJycnJycnJycnJycnJycnJiYnJycnJycnJygoKCgoKCoqKistLS4xMTEyNDU1Njc4ODg4OTk5OTk5Ojo5ODk5OTk4NzY5OjtARUxTWWBmbXN2eXt5dndzcGtoZWRkX19eXl5eX11aV1RST05PU1hfZnB6gISDhISBfXhxbFxPQjgvKyoqKioqKysrLC0yOD9JV2Ftd4CHioqIh4N7dm1fUkI0KiUlJSguMjQ5PEBDREVERklOVV9pcXqChoeEgHlyaV1VXGlqcVlJUmlxY1JXRyEgISQjIyIiIiMiIiIiIiYoLTQ7P0VLU1ddYmRpbnR5enx8e3h3d3d3eHdzb2pfVEpEPz8/Pj4/Pz8/Pz8+Pj09PDo5OTc1NDMyMTEvLy8wNjpAS1NcZWtydnd5e317enp3cWdcT0I4MS0rKSkoKCcnKCgnKSgqKissLS8wMjMyNDc5Oj9ESE5SWWBkZ21ydnt/goWGiIiKiomJiIiGhYOAfn14dnRwbGtqamttb3R7f4KCg4OBf4B+fX19foKFhoaEg4KAf3pzbGJSQzgyLy4uLi4vMjY7Qk1XYWlxd3p+gH9/fn1/f317d3Vzcm1paWltcXZ8f4SKioqKi4uJiYmJi4uLioqFf3ZnWk5IR0VDQD48SkpLSkxMTk5PT1BQT09QUlJRUFBRUVBQUE9PTUxKSkpIR0VEQ0FAPz49PDs7Ojo6OTk4ODk6Ojo6Ojo6Ojo5OTg4ODg3NjU0MzMyMjEwMDAwMC8vLy8tLSwrKikpKCgoKCgpKSgoKCgoKCkpKSkrKyoqKyssLCwsLCwsLCwsLS0sLCwsLCwsKysrKyssKikpKSkpKSkpKCgnJycnKCgoKCcnJycnJycnJycnJycnKCgnJycnJycoKCgoKSkqKisrLS0uMDEwMzMzMzU2Nzg4ODk5OTk5OTo6OTg5OTg4Nzc3ODo7QEVKUFlhaW91dnZ2dHFvbGZjX1pZWVhYWlpYWFlZWFVPTUpHRUhQWWNqc3uBgoODgYB9dm1jV0k8Mi4tKioqKisrKywsMDc8RlNga3V+hYmKiIeEf3lyZFdHNi0pKSkuMTU4Oj9CREZFRkZMTlJZZG93foOFhYF7dGtgXGRqa2VXTFFpW09OVlxZVCYiIiQkJCMjJCIiIiQoLTQ6QEVLUVddXmJobHF2eXp8fHp6d3d3d3Z1dHBqYFNJQ0E9PT4+Pj4+Pj4+Pj49PDs6OTk3NTQzMjMxMS4uLzM4P0lSXGZtcHR3ent7fXx6dnFpX1JHOjIuKSkpKCgoJygoKikqKyssLC0uLzEzMzY5O0BGS1BVWl9kaG1xdnp9goSFh4eIioqKiomHhYOAf3p4dnRva2hnZWVnam1ze3+CgoKBgH5+foF/f4CDhoeGhIOEgH14cmleT0A3MS4tLi4vMjI2O0NNWGFpcXV6fX5+fn5+fXt6eXdzbW1rZ2dnam5xeH+Eh4qKioqKiYmIiIqLi4uIhX51aFtOSUdEQ0A/QEtLS01NTU1PT09QUFBQUlNRUVBQUFBPT1BPTU1LS0lJSEZFREJBPz49PTw7Ozs5OTg4OTk6Ojo6Ojo6Ojo6OTk4ODg4NzY1NTMyMTExMTExMTEwMC8uLS0sLCsrKioqKioqKSkqKigoKSkqKioqKiorKywsLS0tLS0tLSwsLC0tLCwtLSwsLCwtLSsrLCwqKisrKSkpKSgoKCgoKCgoKCgoKCcnJygoKCgoJyYmJicnKCcnJygoKCgoKCgpKiorKywsLC0vMDEyMzM0NjY3OTk4ODg4ODg6Ojg4OTg2NjU1Njc4Oj5CR05XX2dtcW9vbWtoZ2JeWFdUU1JVVVdXWFhWVlVQS0ZCPjxBR1FdZm93f4GFhYKBgHtzaV5QQjYwLCwqKysrKisrLC00OUJPW2h0fISJi4mHhoJ8dGpdTz4xKysvNDc5PD5CQ0VGRkdHSUxQWGBqcnuBhIWDfHVsYl5gU1tOVVRFT1NKRkRjamRaJSEkJCQkJCQjJCYpMDM4P0VMUVZbXmBlaW1xc3R3enp6eXd2dnd4eHVxa2BSSkM/PDw9PT4+Pj4+Pj09Ozs8Ojc3ODY0MzIyMTAuLy4zNz5IUVtjbHF0dnh6fX58enh0a2FSRz00MCwpKCgoKCgpKSsrKywsLC0uLi8xNDY6P0VJT1JXXGFmaW5zdXh+goWHh4eHiIuLiomIhYJ/fXt3c3Bua2loZGJjZ2ludHt/gIKCgICAf36BgICChYiIhoWEg4B9d3FlWUs9NjEtLi4tLjE0OD1GT1hgaXF2fH19fXx9fH15d3dzbmtqZ2ZjY2VqcXd+hIeKioqJiYmJiIiLi4yLiYN9dGVaUkpIR0RCQD9KSUxMTUxQTk9PUFBQUE9QUVFQUFBQT09PTU1NS0pKSEZEQ0JAPz49PT09PDs7Ojo4ODk5Ojo6Ojo6Ojo6Ojk5ODg4ODc2NTUzMjExMTExMTExMDAvLi0tLCwrKyoqKioqKikpKiopKSkpKioqKioqKystLS0tLS0tLS0sLS0tLS4uLS0tLCwsLS0rKywsKysrKykpKSkoKCgoKCgoKCgoKCgnJycoKCgoKCcmJSYnJygnJycoKCgoKCgoKSoqKyssLCwtLzExMTIzMzU1Njg4ODg4ODg4OTk4ODg3NTU0NTU2Njk9QUVLU15laGhmZmVkYl1aVVJTUlFSUlJWVldXVlNQTUdBPTg3OUFKV2Frc32AgoWCgoB8dm9lWUc6Mi4sKisrKyorKyssMTc/S1hkcXyDiIqIh4aCfHVtYlJBNC8vMjY5PT9CREdGR0dISEhLUFZbZW11foKEgnx4bmNgVU5HOkNANTk6PkBDS1RdUyMjJCUlJCQkJiYqLjU7P0dMUVhaXWBjZmdrb3FzdXl5enl2dXZ1dnZ1cGheUUhBPTw8PDw9PT09PT08PDs6OTg3Nzc1NDMyMjAvLy4uMjg9RlJaY2txdnV3e319fHx7dGxiV0s8NDEtKSgqKioqKikrKyssLCwuLy8yNTg9QkVLUFRZXmNobXBzdnx+goSHh4aHiIiKioqJhoOAfXl1cW9samdkYV9gY2dqbnR5fX+AgH+AgICAg4KChYiJiIaFhICBfXZuY1dKPDczLi8vLi8xNTg+Rk9bY2pwd3t9fn18fHt6eHVyb2pnZmNiYGBkaXB2foSHioqKiYmJiYiKiIuMi4iFfnRnWVFLSEdEQkFAS0tOTk1NT09PT1BQUFFRUVFPUFBQUE9PTExNTE1KSEZFQ0JBPz8/PT49PDw8PDs7Ozs6Ojo6Ojo7Ozs7Ojo6Ojg4Nzc3NDQ0MzIyMjExMjIyMjAwMDAuLi0sLCwqKikpKioqKioqKCopKSkqKiorKyoqLCwsLS0tLS0uLi4uLi4uLi4uLS0tLSwsLCsrKysrKyspKSkpKSgpKSgoKCgnJykpKCgoKCgoKCgoKCgoKCgnJygoKCgoKCgoKCkqKisrLCwrLC0tMDIxMTIyNDQ1Njc3ODg3Nzc3Nzc2NjU1NDQzNTY4Oj5DSlJZX2JkYmBgXlxaV1RSUFBRU1RUVVVWVlNQTUdDOzUxMjQ7RVBcaHF5foOCg4CAfXdwal5QQTYvKyoqKiooKiorKy83PEZUYG14gIaHiIeGg4F5cGVZSjs0MzY5Oz9ERkdHSEhJSUlISUxRVl9ncXp/gYF9dW1kYFRVV0Q7MkNaLy0wQVFFTUw4IiUlJSUkJCcqMDQ7QUZMUlZbXl9iZGVpampscXR2eHh4c3N1dHR0cm1pX1FIQDw7Ojs7Ozs6Ozs7Ozs6OTg4NzY1MzQyMjIxMDAuLzE5PUROWmFpcXV2eHp8fHx8eXRsY1pNQDgxLSspKSkqKCsrKywsLC0vLy8yNjo+REhOU1heY2lrb3N1fH1/g4SEhoaGiImJiYmJhoSBfHd0cGpoZmNhXl1fY2dpbW91e39/gH9/foGAgYSDhYeJioiGhoODgHx1bGFURjs3NDAvMC4wMjY9QkhSXGRpcHh8fX1+fXx7d3Vxb2xnZF9cXFxcYWlvdn2FiYmKiYiIh4eIiouLjYyJhHxzZ1xRSklGRUNBQExMTk5NTU9PT09QUFBRUVFSUVBQUFBPTUxMS0xKSEhGREJAQD8/Pj8+PTw8PDw7Ozs7Ojo6Ojo6Ozs7Ozo6Ojo4ODc3NzQ0NDMyMjIxMTIyMTEwMDAwLi4uLiwsKioqKioqKioqKigqKikpKioqKysqKiwsLCwtLS0tLi4uLi4uLi4uLi4uLS0sLCwrKysrKysrKioqKSkpKSkoKCgoKSkpKSgoKCgoKCgoKCgoKCgoJycoKCgoKCgoKCgpKiorKywsKywtLS4uMDAxMTI0NDU3Nzg4Nzc3NzY2NTU0NDMzMzM0Njk9QklOVVdWV1pbW1taWlZVU1NTU1RVVVdYVlVST0lDPTYwLS0yN0BLVmNtdn2CgIOBgH96c21jVkk7Mi0qKiorKikqKysuMjlEUV5ndH2Dh4iHhoOBfHNrX1FDOTc6PT9DRUVHR0dHSUlJSUlJSU5XYGpzeX+BdmhrcGRdXVtNRUJXWSgrNDw7Nz1ESyclJSUlJigqMDU6QEdMUldcXWBiZGRnZWVmaWxwc3Z2dnNzdXR1dXJtZlxQR0A8OTk5Ojs7Ojs7Ozs7Ojk6Ojc2NTM0MjIyMC8vLi8yNzxETlhiaXF1dnh6fHx8fHlzbmZbTkM4MissLCsrKikrKyssLS4uMDEzOT1DSE1RV1xgZmpucXZ6fH6AgIKEhIaGhoeIiIiHhoSBfXdza2dlYWBcXFxeYmVoa25wdHp+f35+fX6BgYOGhoeJiYmIhoWFgn98dWxhVEY9ODY0MjAwMjQ5PkZMVV1lbXN3fH18fXx6d3VybWplYl9bWVlYWmBqbXZ+hYiJiomIiIeHh4mMi4yMiIJ8c2ddUkxKRkVDQD5NTU5OTk5PT09PUFBQUVFRUVFRUU9PTk5NTUtISUdEQkFAQEA/Pz8/Pj08Ozw8PDw8PDs7Ozs6Ojo6Ozs6Ojk4OTk3NzY1NDMyMjMzMjIxMTEwLjAxMS8vLy8tLCwsLCwrKyoqKioqKisrKysqKioqKysrKywsLS0tLS8vLS4vLy4tLi4uLi0tLSwtLCsrKysqKioqKSgoKCkpKSkoKCgoKSkpKCgoKCgoKCgoKCgoKCgoKCgoKCkpKSkpKSkqKiosLCsrLCwtLS8vLzMzNDU0NTU2NjY2NjY0NDU1NDQzMjExMjU3Oz9FS09VVlVZW1tcW1pXV1VWVlZWV1dYV1ZTT0tGPTcxLCorLjM7RlBdZ3F4gYGDgH9+e3dwaV1QQTMuKiopKiopKSoqLDI5QEtXZG55gIeIh4aEgXx0bWVXSkI/PkBDRkdHSUlKSkpKSEhGRkVHTVdjbXd8fXNrZWlgZWRgVkE8QzoxKjIuLDA8QWIyJSUmJigtMDY6QEZMU1haXl9iY2RkZGJhY2RqbXJ0c3R0c3Nzc3NwbWVbUEQ9OTg4ODg5Ojs6Ojo6Ojk5ODg3NTU0MjIyMS8wMC8wMTY7RU1YYWlwdXZ4eXp7fHx5eHFoX1NEOjMuLS0rKywsLCwtLi4vMTM5PUFGTFBWW2Flam5ydnl8f4GBgYGChIWEhYeHh4eHhoSAfHtzamdiXVtZWl1fY2Voa21wc3Z6fH19fX1+gYOEiIaJioqKiIeFg4OBfHVrYFNGPjk4NTQxMTQ3PURKU1lhZm51en1+fHx7e3hzcGpnYV9aWFNSU1ZeaG13gIaJiomIiIaGh4eJiouLiYaCfXNoXFJNSEdEQ0FATU1OTlBQT09PT1BQUVJRUVFRTk5NTU1NTExKSEdFQkFAPz8/QEA+PT49Ozw8PDw8Ojk7Ozs7Ojo6Ojk5Ojo5ODc3Nzc2NTQzMjIzMzIyMTExMC4wMTExLy8vLSwsLCsrKiorKyoqKiorKysrKioqKisrKyssLC0tLi4tLS0uLy8uLS4uLi4tLS0tLSwrKysrKysqKikpKSkpKSkpKCgoKCkpKSgoKCgoKCgoKCgoKCgpKSgoKCgpKSkpKSkpKioqKiorKywsLS0vMDEwMDE0MzU1NjY2NjY2NDQ0NDMzMjEwMDE0Njo+RElOUVVWWltbXFxcWVlYWFhYV1daWFdUUk1HQTk0LiopKy0wN0BLV2FsdX2BgoF/fn15dG1kVUc6MCsqKioqKioqKiowNz1FU2Bqd36DhoaFhIF8d29oYFRKRUJERUdISElJSkpLS0hHQkJCQkVQW2d0dG9pZmxnZWdlWEpDQEc5MTIzLDk8RUljSyUlKCosMTg7QUdMUlZZXl9hYWNkZWBdXFxeZGhucXR1dHNzc3Nzb2pkWkxBPTs4ODc3ODk5ODg4ODg3NzY2NjU1NTMyMjEvMC8uLjI2O0ROWWJpcHV2eHl6e3x8fHhyaV9TSTw3MS8vLS0tLS4uLy8xMzc7QUZLT1VbX2VqbnJ1d3x+f4GBgYGBgoKEhYaFhYaGg4OBfnp1bWdgW1hZWlxfYmVoa2xvcXR3e3t9fXx+foGDhomJiYqKiIeHh4eEgnx1al9SRT86OTY1NTQ3O0FIUFZcY2pzeH1/f3x8fHp3c21oYFtYVVJQT09TXGZtd4GIiYmJiIeGhoeHiYqKiIeFgXtzaF5STUhGQ0JAP01NT09RUVFQT09PT1BQT09QUE9OTExLSUpJR0ZEQkFCQEA/Pz8/QEA9PT08PT09PTw8Ozs6Ojo6Ojo4ODg4OTg3NzY2NjU0NDMzMzMyMjIwMjIwMjIyMDAvLi4tLCwsLCwsKysqKiwsKyoqKioqKysrKywsLS0uLi4uLi4uLi4vLy8uLi4uLSwtLS0sLCwrKysrKioqKikpKSkpKSkpKCgpKSkpKSkpKSgoKCgoKCgoKCgoKCgoKSkpJykpKSoqKisrKysrLCwtLS0uLy8xMjMxNDU1NjY1NTQyNDMzMTIxLi8yNTY5PkRITFFVWFxeXl1eXVtZWVlZWFdZWFlUU09JQj02LisoKCkqLjQ7RlJeaHF5gIGBf359e3ZwaFxOQDQtKikqKikqKioqLjY6QlBcaHF8goWFhYN/fXt1bmRaUUtGRkZISElJSUpKSklHRD48Oz1ASlZjdGloaWdjZmRgXkIzTFNYPEBSU0Q8OkNIWGZVPCQsMDg9QkVLUVdbXWRmZWVlYFxcV1VWWV1kanF0dnRzc3RycGxpYldKQDs2NjY2Nzg4ODg3Nzc3NjY2NjU0MzMxLy8xMC8vLS8xNDpDTVZfZ290d3d5e3t7e3x5c2xhVko9NzQwLy8vLy8uLzAyNTpARUtRV1xgZWttcnR5e35+f35+foCAgYKDg4SDhISDhIOCgHp2cWhfWVZWWVxfY2Zpa21ub3F0d3t7e3t7fX+ChIiKi4yMi4mGhoeHg4F7dGpeUklBPDs6ODg4Oz5FTFNZYGZtdHp8fn19fHt3dG9sY11WU09NSUhMUVplbXiCh4qKiYiGhoeGiImJiYiHhH55cWpfVE5IRUNBPz5NTU9PUFBQT09PT09QUE9PTk5OTUxLS0pJR0ZEQkFAP0BAPz8/P0BAPz49PD09PT08PDs7Ojo6Ojo6Ojk5Ojg3Nzc2NjY1NDQ0NDMzMzIyMzIyMjIxMTAwMC8uLSwsLS0sLCsrKyssLCwrKioqKisrKyssLC0tLi4uLi4uLi4uLy8vLi4uLi0sLS0tLCwsKysrKyorKiopKSkpKSkpKSgoKCgpKSkpKSkoKCgoKCgoKCgoKCgoKCkpKScpKSkqKiorKysrKyssLC4uLS4vMDEwMTIyMjMzMzMyMjMyMTExMC4vMjU2OT9FSk5UWFpcX19gYF5cW1tbW1lYWVtYVlFMRT02LyopKSkpKSwwN0FMWGJudX2AgYB+fn15c21jVUk5MCopKSkoKSoqKiowNz5JV2Rud36DhISDf398d3FrYVhQSUdHSEhJSkpKSktKRUA8OTY5O0VTXnBvb2tpZWBdWVNNSUpMU2BgX19YS0E4KztSbm41KDc8QkZOWVlbYGxpVE1WYVtbYVJQUFVaYWlwdXV0c3RycG9uaGBVST84NTY2NTY3NzY2NjY2NjU1NDQzMzIyMjAvLy8uLi4vMDQ6Q01WX2dvdHd5d3l7e3t8eXNtY1lMQDo2MjExMTExMTM0OD1ESVBUXGBmaW1ydXl8f39+fX19fX+AgICBg4ODgoKCgoF/f3x5dGxkXVhXWVxeYmZpa21vb3Bydnl8ent7fHx/goSIi4uMjIuJh4eHh4OBe3RqXlBHQz8+PTs7PkBDSlFYXWVqcXZ7fn59fX17dnJtZmBZUk1KRUNDSFFcZXF8hIiHiImIhoaGh4iJiYmGhYJ+d3NpX1RNR0RCQEA+Tk5PT09PTk5PT09OUFBRUE5OTExKSklIR0ZDQUBAQEA/Pj8/Pz8/Pj8/Pj09PTw8PDw8PDo6Ozs6Ojs7Ojk4ODc3NzY1NjUyMzM0NDMzNDQzMzIyMjExMTAvLy0tLC4uLS0sLCwsLCsqKioqKiorKysrLCwtLS4uLi4uLi4uMDAvLy4uLi4sLS0tLCwsLCwsKiwrKikpKSkpKSkpKSkpKSkpKCgpKSgoKCgoKCgoKCgpKSgoKCgpKSoqKSkpKSopKioqKisrKysrLCwtLy8vLy8wMTExMTIyMTIyMTEwLy4wMTE0OTxAR0xSVlpeXl9gYWFgXl1dXVtZWVtaWFNOR0I6MysoKSkpKSkqLjM7RlNeaXR6f4GBf39+e3dvZ1tOPjMqKSkpKioqKioqLzU8RFNgbHZ8gYODg4B/fHh1b2dcUktISEhJS0tLS0pIRUE8ODIyMTZBUF9hbmlSaGRaVFJHUVFKUVlhYmFhYF1VPzQ8SVtycjo2PklMY21oY213Sk9LVFpbWVdKSUtOVmBpcXV3dXd0c3Nxa2heU0Y8NjQzMzQ0NTU0NDQ0NTU1NTUzMjIxMjAwLy4sLi4vLi80OkNMVV5nbnN3d3p4eXp7fHx0b2RaUUM7NjYzMjIyMzI3OkBGTVVZYGVrb3R3enyAgH9+f359fX9/fn+AgIKCgoGAgH99fXt4dHBoZFtZWlpdYWZpbG9vcXJydHZ5fH18fHx7f4OFiYqNjY2LiYeHhoaDgXtyalxQSURCQUE/QUFGSVFWXWJob3V5f31+fn17eHRwamNbU0xGQz89P0RPW2dzfoSIiIiJh4WFhoeIiYiHhIKBfXlza2FVTUVCQT8+Pk5OT09PT05OT09PT1BQT05MTEtLSkpIR0RCQEBAPj4+Pj4/Pz8/Pz4/Pz89PT08PDw8PDw6Ojs7Ojo5OTg4ODg3Nzc2NTY1NTY1MzM0NDU1MzMyMjIxMTEwLy8vLi0uLi4uLS0sLCwrKysqKioqKysrKywsLS0uLi4uLi4uLjAwLy8uLi4tLC0tLSwsLCwsLCwsLCopKSkpKSkpKSkpKSkpKSgoKSkoKCgoKCgoKCgoKSkoKCgoKSkqKikpKSkpKCkpKSkrKysrKissLS0tLi8vMDExMTExMTAxMTAwLy8uMDEyNjo9Q0dPVFlcXmBhYmNjYV9fX1xbW1paWlVOS0M9NS4qJygoKCgoKSwwN0FNWGRudn1/gH99fn15c2xhVEU3LSopKSkpKioqKi0zOUJNW2Zxe4CChIJ/gH16dXBpYFdQTUpKSUtLS0pJRkE9ODQvLSwxO1FpcnNtTV1hV1VPTlBNR0JOVmJgWFVYXVQ9OUJUXnFaTE9bbX53gGpoW1libXB3dGRcUEBBSlRfa3N1d3Z2dHNzcWtoXlNGPDY0MjIzMzIyMjIzMzMzMzM0MzIyMTAvLS4uLC0tLCwtMzhASFNcaG9zd3h4eXl6e3t7dG5pXVNHPjg3NjU1NTY6P0RKT1deZGlvdHh6gIGCgH9+fXx8fX1+fn+BgYGBgYF/fX1+enl3c3FuZ2JcWVldYWNnbG1wcnJyc3V4e319enp7fH+DiIqNj5COjIeHh4aGg4F7cmpcUk5IRkZGRUdJS09XXmNmbHJ4fH5+fn17e3l0bWZeWE9HQT05OjxGUlxod4KGiIiIiIeFhYeHiYmIh4WCgHt2cmthVU1FQUA+Pj5PT05OT09PT1BQT1BOTU5MS0pJSEZGRkRCQkBAPz8+Pj09Pj4/P0BAPj0+Pj09PT08PDw8Ozo8PDs7Ozs4ODg3Nzc2NjU1NTU1NTU1NTQ1NTQ0MzIyMjIyMTAwMDAuLzAuLS0sLC0sLCwsLCwrKioqKyssLC0tLS0tLS8vMDAwMS4uLi4tLC0tLi4tLS0sLCwsLCsrKioqKikpKCgoKCgoKCgoKCkpKiopKSgoKSkoKCkpKCgoKCkpKSkpKSkpKSkqKisrKysqKSkqLS0tLi4uLi8vMDExMTEwMC8vLzAuLzAxMzc9QUZMUFZaXmBiZGVkZGFiYWFfXFtaWVlUT0Y/OS8qKCcoJyYmJycqLjU8SFJdZ3F6fX+Af399enZwZllMPTMsKioqKikpKiosMTY9SVdjbXd+gIKCf398enZ1bGdeVU9LTU1NTk1KR0I+OjQxKyoqLjlQcYF+eGVgXEdZWVVRUk5MTUhRVllMTFxfS0dBKkZMXVRPW250b4BzbWhtbGVweoJxalxGPUtVYWxzd3d4eHZ0c3FuZ11QRDozMTAwMTExMTIyMTExMDAxMTEvMC8tLS0tLC0sKywsMDI4PkdSXGVucnZ3d3l7e3t6endya2BWSEA8OTY2ODk7QkdMU1thaG1ydX1/goODg4F+f3x9fXx9fn1/f4CBf39+fX16enl3dXJwbWdiXVxdX2JlaW5vcXJyc3R2eXx8fXp6e31/g4iLjpCRjYqIiIiGhoOBfHJoXVRQTUtMTEtMTlJYXmJla25zeH1+fH18fHl3cmxlXVFIQDo3Nzc+R1NibnmBh4mKiIeGhoaGhomIhYSDgX97d3NsYlZMRkE/Pjo5T09OTk9PT09PT01OTUxLSkpJSUhGQ0NBPz89PT09Pj4+Pj4+Pz9AQD49Pj49PT4+PT08PDw7PDw7Ozs7OTg4NzY2NjY1NTU1NTU1NTY1NTU0NDQ0NDQyMjExMTAwLzAvLi4tLS4sLSwsLCwsKyoqKisrLCwtLS0tLS4vLzAwMDAuLi4uLS0tLS4uLi0tLSwsLCwrKyoqKiopKSkpKCgoKCgoKCgpKSkpKSkoKCkpKCgpKSgoKCgpKSkpKSkpKSkpKiooKCgoKiopKiwsLS4uLi4vLzAwMDAwLy8vLy0tLzAxNDU5P0NJTlRaXmBjZWZmZmVkYWBgX1taWlpXUUxCPDMtKignKCcmJiYnKS0xOENNWWNtd3x+gH99fHx4cWxfU0Q2LSoqKCgpKSoqKi40OURSX2pye36Agn+Afnt5dXBqYVhRTUxMTExLR0M+OjUvKygnKy81VHN8fHtvX1ZIRlZWUVVbUktUXFtqUklaZGVaR0JGS09KWGZfbG1xb4B7bGdsX1twZmdLVUBIV2Ruc3d3eHh4d3ZzbmddUEQ6MjAvLzAwMDAwMC8vMDAwMDAwLy4uLSwsLCwrKyorLS4xNz5HUVtlbnR4eHh4eXp8enp3cWtiWE5FPz05ODxAREhPV15laXB0eX6Cg4WCgoCAf398e3t6e318fn5+gH58enl4dnZ1dHNycG5oY19fYGFkZ2pucHFyc3Z2eHp9fHt6ent9f4OIi46Qjo2Jh4iIiIaDgXtzal9YVFNQUFBRUlZaXGJmam9xdnp+fn18fHx5dm5oYFlORDw4NDQ3PklWZHB6goeIiIiHhYaGiImJh4SEgn99eXhxbGJWTEVAPj06OU9OT05PT05OTUxLTUxLSkhJSEVEQ0JAPzs7PDw6PDw8PT0+Pj4+P0A+Pj4+PT09PT8/PT08PDw8PDs7Ojo4Nzc3Nzc3NjY2Njc3NTQ1NzY2NTU1NTQ0NDMyMTExMDAxMDAvLi0sLS0tLS0sLCwrKysrKysrLCwtLS4vLy8vLy8uLi4uLS0tLi4uLi4tLCwtLCsrKioqKioqKiooKigoJycoKCgoKSkpKSgoKCgnKCgoKSkpKSkpKSkoKCgoKCgpKSkpKSkqKikpKSkpKisrLCwuLy8vMC8wMC4uLy8uLi4vMTY2PUFHTFJYXWBjZWZnaWpnZmNhX1taWlhXVlBGPTgvKignKCgnJiYmJycrLjU9SVReaXF5fH9+e3x8fXhwZVtKOzArKSgoKSkqKikrMjhCTFhkb3d9f4F/fHt7enZzbmVbVE5MSkxKR0RAOzUwKSgkIicrNllidHd4b2BTTEpaW1RVYV9TVFpcXl1TVF5sZFRKTV5OUWBpa3VyZmtvW0lHVFZdUlhTUVJNS1ZkbnR3d3d2d3d2c2toXFBDOTIuLS0tLS4tLi4vLy8vLi4uLi4tLi4sLCwsLCwqKy0vMTc+R1BaZW5xdXh4eHh5fHt7eHNuZ1xPR0I/PD1CSE1SV2FnbHJ3fICEg4OCg4GBf4B9fXp6eXl5ent7e3t8e3p3cnNzc3JzcnBuaWZiYGBkZWlsb3Fyc3V2d3p8fXx7enp7fYCEiYyOj4+NioiJiYeGg4F7c2xiXFhYV1VVVlhbXmFnbG9ydXl8fn59fHt7eXRuZl5TSkA4MzEzN0BMWGdzfYSHiYiIh4aFhoiIiIeDg4F9fHh1cmtiVkxDPzw6OTlPTk5OTU1NTUxLS0tKSUdGRkVFQ0E+Pj07Ozo6Ojs8PD09Pj4+Pj9APj4+Pj09PT0+Pj09PDw8PDw8Ozo6OTk5Nzc3NzY2NjY3Nzc3ODg2NjU1NTU0NDQzMjIyMTExMTAvLy4uLS0tLS0tLCwsKysrKysrKywsLS0uLi4vLy8vLy4uLi0tLS4uLi4uLSwsLSwrKyoqKioqKioqKSkoKCgoKCgoKCkpKSkoKCgoJycoKCkpKSkpKSkpKCgoKCgoKiopKSkpKiopKSkpKSorKywsKy0vLi8uLi4tLS8vLi8uMTM3O0JHTFJWXV9jZmdpa2tqZ2ZjYV9dW1tZV1JJQzs0LSgnJygmJygnJicoKCwxOUJOWGNtdnp8fnt8fHt3cmpgUEI1LCkoKCkpKiopKi81PEdVY2tzen59fn19e3t5dXBoX1ZRTUpJSUVBPDcwKiYjIiAkKjtfYWZrcW1lTEZVW1xWVFhbWU9YUlFaWF5gZ2liUkBWTkRlfnluZl9WXks6OD1RVkhQU0dGR0tWZG91d3h4d3l5d3VsaVxQQzkwLSsrKyssLS0tLi4uLi0tLS0tLC0tLCwsLCsrKiosLTE3PkdQWmRtcXV4eHh4d3p6end0b2heUkpFQENGS1BXXGFobXR4fYGEhYOCgoGBgH5+fX16enh4d3l6enp6enh3dXNxcXFxcnJwb2tmYmJjZGZpbG9xcnN2dnd6fX18e3p6e32BhYmMj5CQjYuJh4eHhoSCe3NsYl5aWVhYWFpbXWBna3Byc3h9fn5+fXx7e3l0bGVbUUU7NTIyMzlCUF9qdn+GiImIiIeGhoeIiIiHg4J/e3h4dnNsY1ZMQz87OTk5T09PTk1NTkxLS0pJSEdGRkRDQkA9PDw7Nzc5OTg6PDw+PT4+Pj4/Pz4+Pz8+Pj4+PT0+Pjw8Pj49Ozs7OTg4Nzc3Nzc2NjY2NTY3ODY2NjY0NjU1NTU1NDMyMjEwMjIyMC8uLy8sLSwtLS0tLS0rKywsKystLS0tLi4vMC4uLi4vLy8uLi4uLi0vLSwtLSwrKioqKikpKSkqKikpKSkqKigoKSkpKSkpKSkoKikpKCgpKSkpKSkpKSgoKCgoKCkpKSkpKSsrKysrKyoqKysrLC0tLS0uLi4uLi4vMDAwMjI3Oz9GTFFVXGBhY2dqam1taWdmY2FeW1taV1NPRz03MCsoKCgnJiYnJiYoKSkqLzQ8R1ReaHJ4e3x7e318eXRtZVdIOjApKSkpKSkqKSkuMjhCTlxob3d8fXx9fHx7enh0bWJZUkxJSUZCOzYzKyYjISAjIyg7TVVoZmNcWTJAWltXUl1RUFpWWlVQXltXXmBqZVc0T05Ob29yZGJnWFpXTTg9R0NRV0Q6Nj9NW2dwdnh4eXl4eHZ0bmlfT0I4MCorKywrKysrKyoqKy0sLCsqKiopKywsKiorKSsrLS0wNz5GUFpjbHF3d3h4eHh6e3t4dnBpYFZOR0ZITlJZXWRpcHV6f4OGhYSBgIGAgIB9fXt5dnZ1dHR1dXd2dnZ3dXJxcXBxcXJzcW9raGRjY2RnaWxvcXJzdnZ4enx9fXt6ent+gYaMj4+RkIuJiYiKiIeGgX12a2RhXlxbXFxfYWJlaW5zd3d7fX19fXx7e3p3cmxlWU5COTQyMjQ8RlRjbnqEh4qJiIeGhYaHiIiIhoOAfHl4eHZ0bmVYTUM/Ozk5Ok9PT01MTEtKS0tJSEdGRUVCPz47Ojo6OTc4OTk5Ozs7Oz0+Pj8/Pz8+Pj09Pj4+Pj09Pj49PT09Ozw7Ozo5ODg3Nzc3NjY2NjY2Nzc4OTY2Njc1NTU1NTQzMzMxMTIxMTAwMDEwLS0tLS0tLS0tLCwtLSwsLS0tLS4uLi4tLi4uLy8vLi4uLi4uLi0sLCwsKyoqKiopKSgoKSkqKikpKiopKSkpKSkpKSkpKSkpKSgoKSkpKSkpKSkoKCgoKCgpKSkpKSkrKysrLCwqKisrKysrKy0tLi4uLi4uLzAwMjM3O0BFS1FWWmFkZWlra2xsaWppZmNgXltZWFZQSUA5MS0qKSgoJyYmJyYnJiYoKS0yN0FOV2JudXp7fHt7fXt3cWleTj80KyooKSkpKSkpKjA1PUpYYWx0e3x9fn17e3x6dW9mX1VOSkZDPTcyLCcjISQiIiM+YF5SVl9eXFVSUlVaXF1UYFxMS1pfXmdTSltjYFxWRldLUmdfZGNnZWVlZFE0OkhFQ0I9LzlDUFtocXd4eHh4eHh2dG5qX1BBNzAqKioqKSorKiorKywqKiopKSkpKSkpKSgoKSoqKywuMjc9RVFbY2pydXd4eHh4eHt7eXVwamJYUU1MUlZcYGZsc3d9gYOEg4OCgYCAf39/fHp5d3RycG9wcnRzcnJ0dnV0cHBvcHFycnJtamViYmNkZ2lsb3Fyc3d3eHp9fHt7enp8fYGGjI+Pj46LiYmIh4iJh4N9dmtkYl9dW15eYWNmam9ydnl8fYB/fXt7e3t5dnBrYVVKPTczMTI4PktYZHN9hIeKioiHhoWGh4iIh4WBfnp5eHd2dG5lWExEPTo4OTpPT01NTU1LSUhHR0dFRERBPj07Ojk4ODc2Nzg6Ozs7Ozs8PT09PT49Pj4+Pj4+Pj48Pj09PT09PDw8Ozs6Ojk4Nzc3NzY2Nzc3Nzc3Nzc4ODg4NzY1NDU1NDMzMzIyMTEwMTEvLy4uLS0tLS0sLC0tLS0tLS0tLS0tLS4uLi0uLy4uLy4tLS0tLi4tLCsrLCsqKikpKCgpKSgmKCYpKCoqKSkpKSkpKSkpKSkpKSkoKCkpKCgoKCkpKCgoKCgoKCgpKSkqKiorKysrKysrKysrKystLS0tLi4uLjAwMjI4PEFHS1FVWl9kZmhrbWxubmxpamRhXl1aV1dTT0U8NS4qKikoKCcnJycnJygoJycsLzQ9SFNeanF3enl6fHx7eXJwZFVEOC8rKSgoKCgoKCkvMztHVGBncnh7fX9/fX19fHdza2BVT0VCPjk0KykkISEjISAvZWdbRkxkXVZTUVVVUkROX2lSQk5YVFdeVllbW1hVVVNQQkhXXWheZmNma148MkVDPURFNzE6Q1FcaHF2eHh4eHZ2dnRvaV5PQDYuKScnJycoKSkpKSgqKSoqKikoKCgoJSUnKCkqKistLTE2PkVOV2JrcXR2eHh4eXp7e3h2cm5jW1ZTVVheZGhtc3t+gYSDg4GBgIF/f35+fXl3d3Vybm1sbG1rbG1wc3RycW9ub3FycnFybGllY2BiZWZobG5vcnV3d3h6fXt7enp5e32Ch4yPkI+Oi4mIiYmIioiDfXZsZWJfXl5fYGNmaGxvdHZ5fH+AfX15enp5dnRtZ15PRDs2NDMzOkBPXWl2gIeJi4mIh4aHh4eIiIWDf3t3eXd2dnRvZ1lNQz05ODk+T09NTUxLSUhHRkVFQ0JCPzs6OTk4Nzg3Njc4Ojs7Ozs7PD09PT09Pj4+Pj4+Pj09PT08PD09Pj49PTw8Ojs6OTg4ODg3Nzc3Nzc3Nzc3ODg2Njc4NzY1NTU1NDMzMzMzMTExMC8vLi4tLSsrLCwtLS0tLS0tLS0tLS0uLi4uLy8uLi8uLS0tLS4uLSwrKywrKiopKSgoKSkoKSoqKSYpKSkpKSkqKSkpKSkpKSkpKCgpKSgoKCgpKSgoKCgoKCgoKSkpKioqKysrKysrKysrKysrLCwtLS4uLi8wMTU4PEJHTFFXWl5jZ2lsbXBxcHFta2djYF5dWldUT0hAOTMsKSopKCgnJycnJycoKCcnKS0xOEJOWGVudXh6e3t6enp2cWdaST0vKikoKCgoKCgoLTE3P01YZG93en1/f35+fXx6dW9mW1BHQTo0LykmIiEhISAhN1lnaFpgXWNfSE1XVFJPUV5sVDVASUtHU1teXFdPRkVFQkhLSlZgTl1gYGVbUUdEVEc5KCgzOkNRXGhxdnh4dnZ2dnVzb2leT0A2LiknJycnJycoKCgoKSkqKikoJycnJyUlJygpKiosLy8zOD5FUVdia3F0dnh3d3d5e3t7d3VuaWFdXF1gZ2xwc3d9goODhIGBf3+BgH59fHp5dXRwb2tqaWloamttcHN0cnFvbm9xcnJycGtoY2FgYmJkZ2psbW90d3d5e3x7enp6eX1+g4iMj5CPjouJiIiJioqIg312bGVkYmFhYWJlaGtvc3Z6e31+fn18eXp6eXZzbGVZTUU7NjQzNTxEU2FteYKIi4qJiIeGh4eHiIiFgn15d3Z2dnZ0bGRZTUM9ODk7QE5NTEtKR0lIR0ZEQkBCPT06OTg3NzY2NjY3ODg5Ozo6Ojo8PDw8PDw9PT4+Pj4+Pj09Pj49PT4+PDw9PT09Ozs6OTk5OTc4ODg4OTk5OTg4Njc4ODc2NjY2NTQ0MzMzMzMzMjEwMC4uLS0sLCwsLCwsLC0tLS0tLS4uLi4uLi4uLy8vLi4uLi0tLi0sLCwsKyspKSkpKSkpKSovMjgtJykpKSkpKiopKSkpKSkpKSgoKCgpKSkpKCgoKCgoKCgoKCkpKSorKissLCorKywsKysrKywsLC0vLzAwMTU5PkRJS1FXW19jZWlrbW9wcHBybWhlYV9cWlhXU0xDPDUvKSgnJycnJycnJicnJiYoJycqLzU8SVVhaXN4e3p6e3x7eHNrYVFAMysoKCgnJycnJysuNj1JVWFtdXl8f39/f399fXlyal1TRT42LywmIyAhISAhI09ojYFtaGNhYmBfU1BTWFxaZFRFQz1ETFBbYFZQVj9CRUJFRkhQUVBPWldcX1RJT1VcTywuNDlDUFxocXV2dnV1dXV2dG5oXU5ANCwoJyYoKCUlJycmJikpKCgpJiUlJSUmJiYnKCosLjExNDg/RlFXYWlvc3Z4dXV3eHl6enl2c21nZGNkaGxydnuBg4OCgYGAgIB/fX17enh1dXFvbWtnZGNmaGptb3J0dHJxbW9wcXJxcG1rZ2VhYWJiY2ZpaW1vcXV5eXp6enp6eXl8f4OIjI+Pjo2KiIeHiYqKiYV9dmtmZmRjY2Rmamttb3V3eXt9fX19fHp7e3p3cWtjWE1BOTUyMzc/SVZkb3uFi4uLiYeHhoeJiYiHhYB8eHV1dXd2dHBoW09CPDc6PUVNTEtKSkhHRkVDQ0JAPTk5NjY2NTU0NDQ2NjY2Nzg6Ojo5Ojw8PDw8PT0+Pj4+Pj4+Pj4+Pj4+Pj08PT09PTs7Ojo5OTk4ODg4ODk5OTk5OTg3Nzc3NzY2NjU1NDQzMzMzMzIxMDAvLS0tLCwtLSsrLCwsLCwsLS0uLi4uLi4uLi8vLy4uLi4tLS0tLCwsLCspKSkpKSkpKSkqNkNDNCcoKSkpKSoqKSkpKSkpKSkpKSgoKSkoKCcnKCgoKCgoKCgpKSorKysrLCwqKyssLCsrKyssLCwtLy8wMjU4PkNHTVJWW2BkZmlrbW9xcXBwb2tmY2BdW1hVVE9GPzgxLSooJycnJycnJyYnJyYmJycnKS0yOENSXGZwdXl8fHt8fHl1b2RWRjYsKCgoJycnJycpLDM7Q1FdanV5fH9/f3+BgX96dW1fUUY8My0qJSIhISEgITVXbZB5XF5iYV5ZWEpLUFpiW11ZTUJIRkdLWVdQUFlDNDpLT1JKSEhGSkxQUFBMTlxoVk8pLTU6RE9cZ3J2dHR1dXR2dXJtaV1OQDQrJyYlJSUlJSYmJiYoKSgoJyYlJSYmJiYoKSosLjAzNDU5P0ZRWGFqb3N2eHV1d3h5e3t6eHZybWppaW9yd3yAg4SCgoGBgYF+fX16eHd1c3BwbGllYWFiZmhrbnFydHRxcG5vcHFxcG9taWViYWFiY2NlZmhqbnJ1eXh6e3t7enl5fH+DiI6Pj46NiomJh4iJiYeDfXZrZmZkZGRkZmlsbnN1d3l7e3t6enl5ent5dnBqYldJPjg1MzQ4QE1caXV/h4uLi4mHh4aHiYmJiIR/eXZ0dHR1dnRvZ1xRRTw5PUNKT05MSUdGRkVEQT89PDk2NjY2NTQ0MzQ2NjU1NTc3ODg6Ojs8PDw9PT4+PT09PT4+Pz8+Pj4+Pz8+Pj09PDw8Ozo6Ojo6Ojo6OTk6Ojo6OTk4ODk5NzU3Nzc2NTU1NTU1MzMyMjAwLi4tLSsrKysqKysrKyssLC0tLS0tLS0tLi4vLi4vLy8vLi0tLSwsLCwrKiopKSkpKiopKTI6OS0pKCgoKCgoKCgoKSkpKSkpKCgoKCknKCgoKCgoKCgpKSgoKysrLCwrLC0sLCssLCwsLCwsLC4sLi4wMjM3PENHTVJXXF9laGptbnBwcnJwb25rZ2NeW1pXVFBKQzkzLCkpKScnJiYnJyYnJycnJignJyYrLzVATVhjbnR4enp7fHx7eHNqXEw8MCknJiYnJycoKS0yOUJOWWVud3x+f4CAgoGBfndxZ1ZIOzEtKiUkIyEhIyNcY191UT5USlhkVUE9T0BMVFNQTlE6O0hNS0hITkpVWVxeYmVoaGFKQktGREJNTkxZZlZXKywyOkVRXWdxc3NycnJzdHVzbmleT0E0LCglJSQkJCQkJCYmJicoKCcmJSUnJycoKSstLi8xMjQ3O0BGT1ZgaG9zdXd1d3h4e319fHl4dnNxcXJ3eX6BhIODgYCAgoB+fHt7eHd1cXBua2djX2FjZmhqbHBzc3RzcXBvb29vcG5ta2djYV9gYF9hY2VmaGxxdHh7e3t8end4eX2AhImOjpCNjYqIiImKiomIhXx0bGdmZWVlZWZqa25xcnR5ent7enl5eXh4eHNtZ2BVRz05NzY3O0RSYGx4f4aLi4uIh4eIiYqKiYiDf3h1c3N0dHR0cWddUUU9PkJHTkxLSkdHRkRDQkA+Ozk3NTUzMzMzMzIzNDU1NjY3OTg4Ojo5Ojs7PT0+Pj09Pj4/Pz8/Pz9APj8/Pj49PTw8PDw7Ojs7PDs6Ojo6Ojo6Ojk5ODg3Njc3ODg3NjY2NjY1NTMzMjIxMC4uLS0rKysrKisrKywsLCwtLS0tLS0tLS4uLy4uLy8vLy4tLS0sLCwrKyoqKSkpKSkpKSkqKisrKSgoKCgoKCgoKCkpKSkpKSkoJikoKSkpKCgoKCgoKSkpKSsrKywsKywtLCwrLC0tLS0sLCwuLy4vMDQ3OkBFSVBWW2BkZ2lsbnFycnJvcG5saGRhXVtZVlJMRTw2LysqKSkoJyYmJycmJycnJys1PC8mKC0yO0dUX2t0eXt7e3x8fHt1bmFRQjUrJyYmJycnKCktMTpBTllhbnR6fn+AgICBgn96c2laSjsvKCUmJSQhISI3dVlLQjw7S09WYVQ/MTI7QD9FQkdKQThGSUtFSUVOW15gYmRlZWNaPj1JQ0VCXk5DUFtcSigrMzxFUV1ncXNzcnJyc3R1c21oXk9ANiwpJSUmJiQkJCQlJSUmJiYmJiUlJCUnKSssLzAxMzQ2Oj5DSU9YYWlvc3Z4eHd2eHl7fX59e3p3d3d5fYCDhISDg4GBgH9+fHt6eHVzb29sZ2JfXl9hY2dqbG9yc3N1dHFwb29vb3Bub2tlYmFfXl1fYGBkZGdscXR3eHl7fHp3eHl+gYaKjo6OjIuIiIiIiIqKiIJ7cmxnZWVlZWZnZ2htcHFzdnh6enl4eXl4eHZzbGZfUUc9Ojk5Oj1GVGJteYOKi4uLiIiHiImKiomIg394dXNzdHR0dHFnXVFEPkFITFBMTElHRkVDQUA+PDk2NTQzMjIxMjIyMzM0NDU1Nzg4ODk5OTo7Ozw9Pj4+Pj8/Pz8/P0BAPz8/Pz8+Pz49PT09PDo7Ozw8Ojo6Ojo5Ojo5OTk5ODY3Nzc3NzU2ODc3NDQzMzIxMS8tLS0sLCsrKywsLCwtLS0tLS0tLS0tLi4uLi4uLi8vLy8uLS0sLCwrKioqKSkpKCgoKCgoKzVCPCwnJycoKCgoKCgoKCgoKCgpKCgoKCgoKCgoKCgoKCkpKysrKysrLCsrLCwsLCwtLS0tLS0uLy4uMDE1OT5ESE5SWV9iZWhrbG9wc3Nvb21ta2diX1xZWFNPSUA4MSwqKSkqJycoJycnJycnJyYrNC0nJycrLjdDT1pocHh6fHp6fHx+eXFmV0U3LCgnJicmJygsLzQ5QktVYWtzen1/gYF/gISBfXZsX087LSQkIyMjJCMlPGtMOzQ1Mz1MTGJiYVVCPSc3OTk6QkE9R0tKTFBUWF1fYGFkYmNeVDw1QENFRWptTUlDREgxMDU8RlJbZ3FzdHRzc3R0dHRtZ15QQTUtKSUlJSUkJCUlJCQlJSUlJSUmJScpKSosLjAyMzU3OTo/RUtRWWFob3N2eHd1dXd6fX1+fn+Af3+AgoKEhYWEgoKDgYKAfXt6d3Zxbm5rZWJgYGFiZGhqbHBwcnV1dHJycG9wcHBubG1qZmJfXl1dXVxeYGJnanBzdnt7e3t6eXZ6foKHio6OjoyKiIiIioqKiYZ/e3JqZmVlZGNiYWJmaWtvc3Z3eHd3d3h5d3d0cGpkXVBEPTo4ODxCSlhlcnyFi4uKioiJiYmKioqKhoJ8d3Rzc3N0dHNxaV9SR0NGSlBWS0lHRkdEQz88Ojk3NTQzMjExMDEwMDIyNDQ0NDQ3ODg4ODk6Ozs8PT4+Pj4/Pz8/Pz9AQD8/Pz9AQD8+PT09PTs8PDs7Ozs6Ojo6OTo6OTk5OTc2Nzk4ODc4Nzc3NzU0MzIyMTAuLS0tKysrKysrKysrLCwsLC0tLS0tLS4uLi4uLi4vLS0tLC0tLCwrKyoqKSkpKSgoKCgpKSc2MSoqJygoKCgoKCgoKCgoKCgoKCkoKCgoKCgoKCgoKSkpKisrKysrKysrKywsLCwsLS0tLS4uLy8vLzEzNzpBRk1TWFxgZGlqbW5wcnFxcG5sbGhkYF1bWFdRS0M7NS4rKSgoKSkpJyYnJycnJiYnJSQlJygnKi41P0xWY293enx7enp8fHp0bFxLPC8oJyYnJicqKzA2OkFKVGBqcnl9f4GBgYGDgoB5cWJSQDEoIyQkJCQkJ0JuWT42OzU4QVFiaW9xaFA9Rj40NkNHRlBOTU5WWVteYGFiYmBdWFRSNUVHR0JOYU1KVV1LLjE2PUZSXWlxc3R0c3N0dHR0bGhdT0E1LSklJSUlJCQlJSUkJSUlJSUlJSYnKisuMDAyNDU3Ojw8QUVLUVlhaG9zdXl4d3Z4e35/gYOEg4SEhIeHhoWFhIODgYCAfXx5dnNybWxpZmNhYWJiY2Zna29xcnR1dXRycG9vb29vbmxraGRgXl1cXFpaW1xhY2luc3Z7e318eXd5fICDiIuOjo6MioiIiImJiYiFgHxzaWVkZGFgX15gY2Zqb3N1dnZ1dXV1d3d3dHBrY1pORT48Ozs/RlFeaXaAiIuLiomIiIiJiouJioeAend0c3NzdHRzcWlhVUtGSlBWWktJR0VFQ0A7OTg2NTQyMjEwMC8vLy8xMTMzMzM1Njg5Nzg4OTs7PT49Pj8/Pz9AQEBAQUBAQEFBQEA/Pj09PT09PDw8Ojs8Ojs8Ozo6Ojk5Ojk3Nzg4ODg4ODc3Nzc1NTMzMjEwLi0tLCwrKysrKioqKiwsLCwsLC0tLS0uLi4uLC4vLi0tLSwtLSwsKioqKikpKSkoKCgoKionJigoKCgpKSgoKCgnJycnKCgoKCgoKScoKCcpKSkqKioqKiorKysrKysrKyssLCwtLS0tLi4uLjAwMDAzNjo+REpMVFtfYWVpam1vbm9vb25rampmYl5cW1hUT0c/NzArKikpKSoyLygoJycnJycnJiYmJSQmIygtMTtIVWFtdXl8fHp6fHt6dW5gUD8yKiclJigpKi8zOT1BSVNdZm92fX+BgoKDg4KBe3RpWkY2LCYkIyMlKChba1g8NjxCQUlZZW50d3RWS0hDQURMUE1HQ0xUWFpdYGBjYmFdWFRORj5CQUNES1pUUExMOTExNz5IUl5qcnR0dHVzdHRzcmxpX1FCNS0pJScnJyUlJiYlJSUlJiYlJicnKCwuLjAxMzU2Ojw+QENITVJcYmhvc3Z4eXh4eXt+gYSHiIiIiYmJiIeFhYSDhIGAfXx5dnRwbGlpZGJgYWFiY2VmaWxucXN0dXRycW9vb29wb25saWViX11bW1pbW11dXmJnbHJ2ent8fXp3en2BhomLjY6OjImHh4eIiIiFgn52bmhkY2JfYFxcYGVoa25zdXV1dXV1c3V1dXNvamBZT0Q/Pj4/RUtWYm12f4iMiomJiYeHiYqKi4iEf3l2c3JydHR2dXJsZVZPSk1UW19ISEZDQT88OTg2NTUyMjIxMDAvLy8vMDEyMTMzNTY3Nzc4ODk7Oz0+PT4/Pz8/QEBAQEFAQEBBQUFBPz4+Pj09PT08PDw7Ozs8PDs6Ojo5OTk5OTk5OTg4ODg3Nzc3NTU0NDMyMC4tLSwsKysrKysqKissLCwsLCwtLS0tLi4uLiwuLy4tLS4tLS0sLCoqKiopKSkpKCgoKCgoKSknJygoKCgnJygoJycnJycoKCgoKCknKCgnKSkpKioqKioqKysrKysrKysrLCwsLS0uLi8vLi4wMDAxMzY6QUZMU1dcYGNnaWttbmxsamppaWhoY19cW1tWU0xDOzQtKiopKSkqKikoKCcnJycnJyUmJiYkJiUoKy43Q1FdaHJ5fH17e3x8e3ZvZldEMyknJSYoKi4yNjo+Q0pSXGVsdXt/gIGCgYODgXx5cGFPPjAnIyMjJCUpREtGOD8/PT5KWmRvc3dyW1ROQT5BQk1LRVBUWVpbXmBgYV9cWFRNR0I6OE1CQEdVWlpWRSwyNDc+SlReanJ0dHR1c3Nzc3JsaV5QQjcvKygnJyclJSYmJiYlJSYmJicoKisrLjAzNDU3Ojs+QEJFS1FUXGJob3N2eHd3dnd9gISHioyNjY2Ni4mHhoWEg4KAf3x7dnNva2hmYl9gYmJhY2VlaGtscHFzdHV0cnFvb25ub21ubGllYl5cWllZWVhZWlxgZ2xydnp7fXt4d3p9gYaJi42OjIqJh4eHiIiIhYB6c2xnZGJgXl5cXGBlaWxvcXR0c3Nzc3N0dnNybmpgWE5HQ0A/QklPW2RweoOJi4qJiYmJiYqLi4uIhH95dXJyc3R0dXVzbWRbU09RWWBkSEVEQkA9OTg0NTUzMTAxMTAwLi4uLi8xMTEyMzU2NjY5OTo6Ozs9PT4+Pz8/P0BAQUFBQT9BQEBBQD8/Pz49PTw8PT09PT09PDw7Ojo6Ojo6Ojk5OTk3Nzk5Nzc2NjU1NTMxMC4uLSwrKysrKysqKisrKysrKy0tLS4tLSstLS8tLSwsLS0uLiwsKysqKikpKSkoKCgnJycoKCgoJycnJycnJycnJycnJycnJycnJycoKCgoKCgpKSoqKysrLCwsLCwsLC0tLC0tLS0uMDMwMC4uLzAwMDQ3PENJTlJXW19jZ2lrbGtpaWdnZ2ZlY2FdXFtZVVFJPzgwLCkpKSkoKCgoKCgnJicnJiYmJiYmJSUmJykwNT9PW2Vwd3p7enx8fHx4cmlbSzstJicpKS0xNTc7P0RLT1lia3J6foGBgIGCg4OBfXVoVkU2KyYiJCMkKEBOSj43OTk8SlVicXR3dGxOQ0I5Nz5GRlBSV1tdXl9hYF5bV1JMRkA4NTJUQztHUFlYXEAwMjY5QEtWYWtzdXV0dHN0dHRybGhfUUE2MCwpKCcnJyUnJyYmJiQmJicoKiwtLjAzNTc6Oz09QkRGSE9TWF5kam9zdnd5eXl7gYSGio2PkZGQj46MiYiHhYJ+gX15dHFuamhjX15gX2FlZWZnaGlsa29xcnR0dHNxb29ubW5tbGllYl5bW1lYWVhXV1lcYGZscXZ5fH17e3t6foGGiIuNjoyKiIaHh4mJhYJ9d3FqZmNfXl5cXV5hZmlucHJ0c3NzcnJzdHR0cm9nYFZOSEVDQ0ZLVV9ncnuFi4uLiomJiYmKi4mLiYV+enZ0c3R1dXV0cmtlX1dWWF5kaUdFQ0A9OTg2NDMzMjIwMDAwMC4uLi4vMTExMjM1NjY2OTk6Ojs7PT0+Pj8/Pz9AQEFBQUFBQkJCQUA/Pz8+PT08PD09PT09PTw8Ozs6Ojo6OTk5OTo6Nzc4ODc3NjY1NTMyMTAuLi0sKysrKysrKiorKysrKyssLC0uLS0tLi8tLS0tLS0tLS0sLCsrKiopKSkpKCgoJycnJycoKCcnJycnJycnJycnJycnJycnJycnKCgoKCgoKSkqKiwrKywsLCwsLCwtLSwtLS0uLi8wLi4uLi8xMTQ2OT9ES1BUWFtfY2doaWloZmZlZWRjYWBeXlxbWFNORT00LiopKSkpKSgoKCgoJyYnJyYmJiYmJiYmJicrLjI8SVZjbHd6e3p5eXt8enVrXk4/MiopKSsvMzc5PkBFS09XYWhweH6BgoGCgoODgX53bl9OPS8nIyMkJSZCdXdEJikzOkhUY3B2eHVuSzsuLzI3LjtWWVpdXmBhYV1bVlJMRkE5My4tNz9FUU9PTF9NOTU1OkFKVWJsdXd2dXV1dXR1dGxoX1FBNjAsKSgnJycnJycnJyYnJicoKiwtLjAzNTc5PD0/QURGSEpRVVpgZGpvc3V2eHp7gIWIjI6QkpOTkpGPjYmIh4SAfn55dnJsaWVhYF1eYF9hY2NmZ2hpbGxvcHFzdXNxcHBwbm1ubWtnZWFdWllXVldUU1RUWVxkanF3e3x8enl5en6BhoiLjY6MioiGh4iIiIWAenVwZmNgXl1cXV1eYWZqbHByc3JwcG9vcHJycnBtZV1UTUpHRkZKTlhibHaAiIuLiomJiYmLiouKioiEfXl2dHN0dXZ1dXNuamFbWVxgZmtGQ0E9Ojg2NzQzMTExLi8wLy8uLi4uLjAxMTM0NDU2ODo6OTk7Oz09Pj4/Pz8/QEJBQUBAQkJBQUBAPz8/Pz4+PT09PT09PT08PDs7Ozs5OTo5OTg5OTg4Nzc2NjY2NDQxMTEvLS0tLCsrKiorKysrKysrKysrKysrLS0tLS0sLi0tLS0tLS0tLCopKiopKikpKSgoKCcoKCgoJycmJiYmJycnJyYmJiYmJiYmJiYmJicnKCgnKCoqKyorKywsLCwsLC0tLS0tLi0tLi4tLS4uLi8vMDM2ODtASE5TVFlcX2JlaGVjYmFhYmJgYF9fYF5eW1dSS0E6MiwqKioqKikpKCgoKCcnJycnJyYmJiYmJiUlKS4zOkRSYGxzd3p6enl5e3p0bWNTQzQrKiotMjU3PD9DRkpOVV1nbnZ+gIGBgYGBg4J/eXNmVkMzJyUkIyMiNWlkLCMnLzpDU2JudHVza2A2JSUqKzdMWVpbX2BfYV9ZVVFLRT03MS8uMzM4SFBRT1VOUlc0NTpBTFljbXV3eXh1dXR3dHJva2BSQjkxLSoqKignJycnJycnJygpKy0vMDEyNDY4Oz0/QUNGSUtOU1dbYWZscHR2d3h6fYGHi5CSlZWXlpOSj42Kh4aEgHx5dG9sZ2RgXFxeYGBhY2VnZmZnaWttbnBydHVzcXFvb25vbWtpZmRhXVlWVVRTVFNUVVhcZGtwdXh7enh4eHp+goeJjI2NjIqIiIaIh4aEfnlzbGViYF5dXFtdXmJlam1wcXJybm5ub3Jzc3VxbWdfV09NSUdJTlVcZnB7goeLiomIiYmJioqJiYmGgn14dXN0dHZ2d3d1cWxkXV1fZGpvQ0E8Ojk4NjU0MzExMS4uLi8vLi4uLi4wMTExMjQ1Njg4ODk5Ozs9PT4+Pz8/QEBCQUFCQkJCQUFAQD8/Pz8/Pz09PT09PT09PDw7Ozs7Ozs6OTk4OTk4ODc3NjY2NjQ0MTExLy0tLSwrKyoqKysrKysrKysrKysrKywtLS0tLi0tLS0tLS0tLSwqKSoqKSopKSkoKCgnKCgoKCcnJiYmJicnJycmJiYmJiYmJiYmJiYnJygoJygqKisqKyssLCwsLCwtLS0tLS4uLi4vLi4vLy8wMDEyNjk+RElOU1dbXl5iZWRiYF9dW1xcXV1fYGBgXVtWT0Y+Ni4qKioqKiopKSkoKCgnJycnJycmJiYmJiYlJSgrMjhCT1xpcXZ5e3p4eHh6dm9nWEY4Ly0tLzM4Oz5AREdKTVRcZGx2fYCBgYGBgYKDgX12bF1KOCsmIyIiIDNMPSImLzQ4RFJhbnR3eFo9JDIxP01VWltbX2BhYF1ZVlFMRT84MCwtLzIwLj9NUVJUTUlJNjU6QU1aY211d3d3dnV3d3RzcGlgUkI5MS0qKikpKCgoKCgoKSkpLCwtMDEzNDY4Ojs/QUNFSk1PUldbX2NnbHF1dnd5e36Dio6TlpeYl5aTko+NioeFgX15dG5qZ2NgXFtcXmBgYWNmZmZnamtsbnBwc3Z1c3Fxb29vbGxqZmRgXVtXVlVTUlFQUVJTW2Fpb3V5fHl3eHh6foKHiYyNjYyKiYmIiYeGg312cGdhX15dXFpaXF9kaGptb3BwcG5ubm9yc3R0cWtmXlZQTkxLTVJYYmt0fYSIi4uJiImJiYqJiIeHhYF9eHZ0dXV2dnd3dXJuZ2FhYmdtckA9Ozo4ODY1NDMyMjAwLi4tLS4uLi4vMTExMjI1Njc3Ojo6Ojw8PT08Pj8/QUFBQUFBQUFCQkBAQEA/Pz8/Pz8+Pj4+PT09PTw7Ozs7Ozk5Ojk5ODg3ODg2NjY2NTU1NTQxMTAtLC0sKioqKisrKysrKywsKyssLCwsLCwtLSwsLCwsLCwsLCwsLCkpKCkpKSgoKCgnJyYnKCgoKCYmJiYmJiYmJSUmJiYmJiYnJycnJycoKCgpKiorKysrLCwsLCwsLS0tLS4vLy8wMC4uLy8vLzIwNDg7QUdLT1VXXF1fYmJhXlxcW1taW11dYGFhYF5ZVExEOzMsKioqKioqKSkpKCcmJycnJygoJycnJyYmJiYnKi81P05YZW92eHl7end4d3RvaVtNPjQxMTI2OT5AQUVHSk1TWmJoc3qAgYKBgoODhIR/eHJlUz8wKCMkLisxMCYkJjIyNkNRYG10eXxpSUpbW1lYWFlcX2BfX11ZVU5KRD03MC0tLC4tLS5eU1JPTk9SSTQ3PEFPWWRudnh3d3V1dnZ3dW9rYlJEOjItKiopKSoqKicoKCkqLC0uMDE0NTc5Ojw/QkVISUxQUVNaXGJlaW1wc3Z5e3+Ch46Tl5iZmJeVlJKMioqHhIB7dW5pZGFeXFpbXV1fX2JkZGVmZ2lrbG9wcXR0c3JxcG9vbm5raWZiXltZVlVUUVBQT09PU1lhaW92eHp6eXh5en6BhoqOjY2LiYmJiYmIh4F7dm1iXl5dW1tbWl1hZGlrbnFzcXBvb21vcnN0dHBrZF1WUVFPT1FWXWZvd3+GiomJioiJiYqJh4aFhIKAfHl2dXR2dnZ4eHZ1cWplY2VobHM9Ojo4NjU1NTQzMjIwMC4tLS0uLi4uLzExMTQzNTY3Nzk5OTo8PD09Pj8/P0FBQUFCQkFBQkJBQEBAPz8/Pz8/Pj4+Pj09PT07Ozs7Ozs6Ojo5OTg3ODg4ODc3NzU1NDM1MzIyLy4tLCoqKiorKysrKyssLCsrLS0sLCsrLCwsLCwsLCwsLCsrKyspKSkrKiooKCgoJycmJicnJycnJiYmJiYmJiUlJSUlJSUlJiYmJicnKCgoKioqKiorLC0tLCwsLC0tLS0uLy8vMDAvLzAwLzAzMzY6P0RJTVNWWlxdX2FhXlxaWllZWFpdX2JiYmBdWFJJPzYxLCoqKioqKikpKikpJygoKCcoKCcnJycmJiYmJyotMztIVF9tc3h5eXh3d3d1cmphUUQ3MzM3Ojw/QUNCRUhMT1ZgZ3B6f4GBgYGBgICDg310a1lGNSsmJj02JiUlISUrLzZDUWBtdHh6enhybWVdW1pcXl9gX1xZVFBKRD01LiwrLC0tLS03dVhRTkxKUz8vNjtEUVtjbXV3d3V2dnZ2d3Vwal9SRDozLisrKikqKisqKyssLC0tLzAyNDY4OTw+QERHSktOUlVXW19jZ2tuc3R2eHt+hImPlJmZmpeWlJORjIqIhoF9dW9pZF5bWVlaWlteX19hY2RlZmdpa25vcXF0dHJxcXBvb25uamhmYl1YV1RTUk9OTk1MTlFXYWhwd3p6enp6e3t/goeLjY2NjYmJiYmJiIWAenRsYl5bWllZWlpdYWZqam1xcHFvbm5tb3Fyc3NvbGRdWFNQUFNVWmFrc3uCiYqKiomJiYmJiIaFhIOAf3x5dnV1dXZ2d3d3dnFqaGdpa29zOzo4NzY2NDQzMjIwMDAuLS4uLi4uLi8xMjIzMzU2NjY5OTo7PDw9PT4+P0BCQkJCQkJCQkJCQEA/Pz8+Pj4/Pz09Pj49PTw8Ozo7Ojo6OTk5OTg4ODk4OTo6OTk6ODk5Nzk3NTUyMCsqKSoqKy0rLSwsLC0uLi0sLCwsKSsrLCssLCwsLCwsLCsqKSoqKSkoKCgoKCcnJiYmJiYmJiYlJSUlJSUlJSUlJSUlJSYmJiYoKCgoKSkqKioqKissLCwsLCwtLS4uLi8vLy8vLy8wMDEyMzU6PkNHS09VWFpbX2BfXl1aWVlZWVpeYWNjZGJgXFZQRTw2LysqKioqKiopKSoqKSkpKSgnKCgnJyYmJycnJycoKzA5Q1BdaXJ5enl3d3Z3eHZtZVdIPTY3OTs+QUNDREZKTU1TXmZsdXyAgIGBgICBgoOAem9eTTwwJyYjIiQlJCQkKi81QVFebXZ7fHx7dm5oY11aXl9gYV1ZVU9JRD02LSsqKy0uLi4uPGpmUFFOVF5YODc+RFBbZm91d3V2d3d2dnd1b2hgUUU6My4tLCsrLCwsLC0sKywtLjEyMzU2OTs+QERHSUtOUVRXW15iZWltbnJzdnh7f4SJkZeampiXk5GSjYuHhYJ/eXRtZF9aWFdXV1laWl1eX2FkZWZnam1vcHByc3NzcXBvcG9ubWhoZWFbVlRSUVBOTUxJS01PVl9ocHR5eHh3eHh6f4SIjY6NjI2MioqJiIiEgHlyaWFdWlhYWFlaXWFmaW1wcm9vbm5vbnF1dnRzb2pjXVhUUlNVWV1nbXV+hYmKiYmJiYmJiYaEg4KBfn58eXh1d3V2dnd3d3Ryb2lnaW5xdTo5ODc2NjU0MzIxMTExLi0uLi4uLi4vMTIyMzM1NjY2OTk6Ozw8PT0+Pj9AQkJCQkJCQkJCQkBAPz8/Pj4+Pz89PTw8PT09Ozo7Ozo6Ojk5OTk4ODk6PT5AQD8/QEFCQkJBPj48ODMuKyoqKi4vMDExMTIxMTEwLy4uLi0tKywrLCwsLCwsLCwrKikpKikpKCgoKCgnJyYmJiYmJiYmJSUlJSUlJSUlJSUlJSUmJiYmKCgoKCkpKioqKiorLCwsLCwtLS0uLi4vLy8vLy8vMDAxMzU4PEJGS09SV1hcXl5eX11aV1ZWVlZZXGFjY2RiYVxWTUM7NC0rKiorKyoqKSkqKikpKSkoJygoJycnJycnJycnJyktND5MWGdwdXh4d3Z1dnd0cWhaUEI6Ojs9P0FEQ0VGSkpMUFpianJ6foCBgICAgYKCgXpxZ1ZDNCgmIyMkMjUhIyktNUFOXmx1en1/e3hwbGZgXl9gX11ZUk5JQjo1LywrKissLS0uLjJRYlNTU09iZ0I3PEZTXmdwdXd2dXZ2dnZ2c3BpXVFFOjMuLi0sLCwsLCwsKywtLi8xNDY4ODo8PkFESEpNUFNWWVxfY2RobXFzdHd3e3+FipCWl5eVlJGQjoqHhoOAfHdtZ2BbV1VVVldZWlpcXV9hZGVnZ2ttb3BwcnNzc3Jwb3Bvbm1pZ2NeWVVSUE5NTEtLSUdJTVRdZm1zdnl4d3d6fICEiIyOjo2NjIqKioiIhH94b2ZeWllWV1dYWV1haGptbXFwb25vb3BxdXZ0c29qYlxaWFZVV11iaXF5gYaKiYmJiYmJiYmGg4J/fn19fHl4dXN1dnZ3d3d0cm9qaGlvcXU5ODc2NjU0NDMyMTExMC4tLi4uLi4vLzEyMzM0NTY3Nzo6Ojs9PT4+Pj5AQUJCQ0NDQ0JCQkFBQEBAPz4/Pz8/Pz88PT09PDw6OTk6Ojo5OTk4ODg5O0BERkhISEhJSUtKSkhJRkE6My4sLS8xNDU2Nzk6Ojo4ODU0MTEwLy0rKi0tLSwsLCwrKioqKSgoKCgoKCgoJiYmJiYmJSUmJiUlJSUlJSQkJSUlJSUlJSUmJigoJycpKSoqKioqKywsLCwtLS4uLS4uLi4uLy8wMDExMzY4Oj5FS09UV1hbW1xeX19cW1pYV1lYXGBjZGVmY15bVEtBOTIsKisrKysrKysrKyopKSkpKSkpKScnKCgoKCgoJiYpLDI6R1VibXR2eHh1dXV4dnNrYlNIPTs9P0FDREVFRkZKTVBXXWZud36BgoCAgIGBgoN+d21bSTcrIyMhIyotIyMnLjVAT1xpdHp9fnt5dW1mY2BfXVtXUUxJQjkyLSssKyssLC0vLzExNUZXUUtOV1Y8OD1HVF5ocnh3eHV3d3d3dnNuaF9QRjo0Mi4uLi0sLCwsKystLzEyMzM1Ojo8PkBDRklMT1JUVlteYWNna3Bydnd4eXyAhImPlJaVlJKPjIuIhIKBfHlya2RaVFVVVFRVVlhaWlteX2NlZ2hsbW5vb3Fzc3JxcG9xcHFtamVhW1hUUVBNS0hHRURFRktRWmZsc3d4eHl3eXyAg4eLjI6NjIuKioqJiIR+d25mXFhXV1ZXWFteYmdqbG1xcm9tbm5vcHJ0c3JvamJcWVlXV1tgZmx0fIKHiYmKiImIiImHg4B+fXx7fHx5dnN1d3Z2d3h3dnJvbWtscHN3ODc2NjU1MzMzMjExMC4uLS4uLi4uLy8xMjM0NTU2Nzc5Ojs8PT0+Pj8/QEFCQkNDQ0NCQkJBQEBAQD8+Pj49PT09PT09PTw7Ojs7Ojo5OTk4Nzk6PUFGSk1PT09QUlNTUlJTUk9JQzkzMTI1ODs+QEFERERFQ0I/PDo5NzMwLywtLSwsLCwsKyoqKioqKSkpKCgoKCYmJiYmJiUlJiYlJSUlJSUkJCUlJSUlJSUlJiYnJycnKSkqKioqKissLCwsLS0uLi4uLi4vLy8vLzAxMzU3PEBFS09TVltcXF1fXl1gXlxbWlpaXWBhY2RlZGNdWVBHPjcwKysrKysrKysrKysqKSkpKSkpKSkpJygoKCgoKCYmJyswN0JQXGlxdXd4dnR0dnZzbWdZTkI9P0BCRERFRkdGSEtPU1lhaHJ7gIGAf4CAgoODgHtzY1A/MCckIiEjIiIjJy0yQE1aaXR4fn57eXVuZ2JfXVtXUk1GQToyLSsqKiorLC0vMDAyNDJMV0tJSVtONjhASlVganR4eHd3d3d3d3d0b2peT0U8NTAuLi4uLSwsLC4uLS8xMjMzNTo7PT5BREhKTVBSVlhbXmJlaW1xdXZ4e3x9gYSJjpOTkZCPjYuIhoKAfHd0bmdgV1NVUlNTUlRWWVpbXl9hZGdqbG1vb3Byc3NycXBvcG9ta2diX1lVUU9NS0hGRENBQUNIT1ljbHJ3eHd3eHt9gYSIi4yNjIuKioqKiYiEfnduZl1ZWVhWV1lcX2Joa25wb29wbm9vcnN0dXRzcGliXFlZWVtdY2lwd3+FiImIiYiIiYmIhYB+fHt4e319eXd1dnd2d3d4eHd0cW1ra25zdzY2NjY1NTMzMzIxMTAvLSwuLi8vLy8wMjM0Njc2Nzc4Ojo6PDw8PT0+Pz9AQ0NDQ0NDQkJCQEA+Pj8/Pj09PT09PT09PT08PDs6Ojo5OTg5Ojo7PUBFSU5SVldXWFlbW1paWlxZVEtDPDo7PkFDSUtNUFNUUk9OSkpJRUA9ODEvLSwtKysrKiwqKikpKikpKCgnJycnJyYmJiUlJSUlJSUkJCQkJCQkJCUlJSUlJSUlJycnJygpKiorKysrLS0tLS0uLi8vLy8vLzEvMTEyMjQ4PD9ESVBSVlpbXV5hYmNjYF9eXFxcXWBiYWFkZWNhXVZNRDs0LisrKiorKysrKywrKyoqKiopKykpKCgnJycnJycmJigpLzU/TFhmb3J1dXV1dHZ3dHBrX1NIQUBCQ0VGRkZHR0dJTU1SW2Rtdn2BgYGBgYKEg4J9dGlYRTUoJCIkIyQjIyYsNEBNWmhzen18fHl1bGVjXlxXUUxGQToyLSoqKiorKywtLi8vLi4zWVRQSUpNVj06QUtWX2x3eXl4dXV2eHh2c25oXU9EPTYyLy8uLi4uLSwuLi0vMDIzNTY4Ojw/QUZJSk1RU1ZYXF9kZmpucnZ4e3x9foGFio6RkZCNjYqGhYN/fXhybmhhWldTUVBPUlJSU1laW1xfYWNoamxucHBzc3Nycm9vb3BvbGdkYVxXUk9OS0pHQ0E+PDw/RUxWX2lweHt5d3d5f4KFiYuNjIqJiYqKiYmHg4B5bmVdWFhYV1haXmBjaGttbnBwcHBvcHFydXV0cm5pYl1aWFpeYmdtdnyChomKiIiIhoiIh4J+fHp4eHh8fHp3dnV1d3h5eXl3dHFta21xdHY2NTY2NjU0MzMyMTEwMC4tMDAxMTExMzUzNDY3Nzc4OTo6Ojs8PD09Pj8/QEJCQkJBQUFBQUFAPz09Pz49PT09PT09PTw8Ozs6Ojo5OTk3OTo6PD1BR0tQU1haWltcXl5fX19hX1xVTUVDRElNUFZYW15fYGJfX11ZVlJOR0I9NjIvLi0sLCwrKyspKSopKSgnJycnJycnJyYlJSUlJSUlJCQkJCQkJCQlJSUlJSUlJScnJycnKCoqKysrKy0tLS0uLy8vLy8wLzAwMDExMjU4PUFESU5SV1tdXmFiZGdmZmRiX15eXl9hY2NkZGVjX1xSSkE5MSsrKyoqKysrKyssKysqKioqKioqKigoJycnJycnKCgoKSwyO0ZTYGtydXd1dXV1d3ZxbmdZTkdDQkRGR0ZHRkZGSElJTFReaHF5foKBgYGBgoOCgHhvYE08LicjJSMkJCQoLzlBTlxncnd6e3t4dGxlX1xVUUtDPzgyLCoqKioqKywsLS4vLy4uMkxkWEpMTFg9OUFLV2Jtdnl5eHd1dnh4dnNtZ11PQzw2MjIvMTEwLy4sLi4vMTAyMzU2ODo8QENGSUtOUlNWWV1fZGZrb3F1eXx/gIODiIuNj4+OiomHhoJ/fHh0cGljXVdTUU9PT1BQUlVWWVtcXmBjaGpsbnBwcXJycXFxcXFwb21pZV9aVE5NS0lGQ0A/Ozo6PEFKVV9ob3Z3d3V3eX6DhYmKjIuKiIiHh4iIh4N/eHFnYFpaWllcW19jZmhrb29wcG9vb3Fyc3VydHJtaGJdW1pbXmRqcXh/hIeJioiIiIiJiIeCfnp4dHR4e3t4eXZ3d3l5eXl4d3RxbWtucHJ1Nzc0NDU1NDMzMjExMTEwLi4xMjIxMTM0NTc3Nzc4OTk6Ojs7PT0/P0A+QEFCQENDRERCQkFAPz4+PT4+PT09PT4+Pj07Ozo6Ojk5OTg3ODg5Ojs9QkdLT1JWWlpbXF1eYWRiYWJgXVdQTk9TWFxfYWNlampoZ2ZmY19dWFZRSUE8NTItKystKysqKiopKCgoJycnJyYmJycmJSUlJCQkJCMjIyMkJCQkJCQlJSUlJSUlJicnJycpKSsrLCwtLS4uLy8vLy8wMDAvMDAxMjY5PUJGSk5UVlpdXWFjZWhqa2llZWNgX19gYWNlZmRjYVtXTUQ+Ny8rLCwrKywsLCwrKywsKysqKioqKyspKCkpKCgoKCgoJicqLzdEUV1pcnV1dXVzdHh3dHBrX1RKQ0RER0VHRkdHRkRGRUZNV2NueH6CgoKCgoKDg4F7c2RTQTEnJCQlJiYnLDU4RE5aZ3J2d3l5dXJtZV1XUUpFPzgwKykpKSsrKistLS4uLy8wMDFDZlZSTlBWOD1DTVhjbnV4enh4d3d4eHZ0bWddUEQ8NjIzMjIyMjIvLS4vMDIyMTM1Nzk6PUBDR0pNT1JVWFleYWNnbHBydnp+gISDhYmMjY2MioiHhIJ/fHh0cGtjXFdTUE9PT05QUVNUVldbXl9jZGVnbW9vb3BxcnFxcXFycG9taGNeWVNOS0hDQkA9Ozk3NzpAS1RfaXB1d3d1d3p9g4aJioyLioiHhoeHhoaDgXpyaWRdWlhaXVxfYWVobG9vcXFxcXByc3V1dHNwbGdiXFxcXl9mbXN6gYiJiomIiImKiomHgX15dnN0eHx6eHl4d3l4eHp6eHd1cm1rbXF0dTc3NTQzMzQzMjExMTExMC8vMDIyMzMzNTY4OTk3Nzg4Ojo7Ozo8Pz8/QEBBQUFBQUJCQkFAQT49Pj09PTw8PDw9PT08Ozs6Ojk5OTg3Nzg3Nzk8PkBESUxPUlVYV1hbXF9iYmRmZGNgW1daXl5jZWdnaWtrbWlra2lnZWNfWVVPSEA5Mi0sLCoqKSoqKSgoKCcnJycmJiUlJSUlJSQkJCQjIyQkJCQkJCQkJSUlJSUlJSYnJycnKSkrKywsLS0uLi8vLy8vLzAwMTEyNDg7P0RITFBUVl5fYmRlaWprbWxsaWZlY2FgYmJkZGVkZF5ZU0pBOTIuKywsKyssLCwsKyssLCsrKioqKisrKykpKSgoKCgoKCcmKS00QE1ZZG5zdnV1dHV3eHdzb2ZZT0hEREZGRkZHRkRBPz5CRlBdanR8goOCgoKCg4OBfHZqWkY2KyUlJiYpLjE3PkZOW2dydnd4eHVybWNYUktEPjgwKSkqKSkrKyssLS0uLi8vMDAwP2JhUUxPTEU8Qk5ZZW92eXp4eHd3eHh2dG1nXVBEPDg0MzIyMjIyMS0uLy8wMjEzNTc5Oj1AQ0dKTVBTVlhaXmFjZ2xwcnZ7f4KGhYiKjIyNi4iGhYJ/fHl0cWtjXldTUVBPT1BSU1VVV1laW15hYmRoam1vb29wcXRzcXFxcnBvbGljXFdQTEZDQD08OTg2NTY4PkpVYGlwdXd3dXh5gISGiYuLioiIh4WGh4aGg4B5cGZiXlxcXF1eX2JmaW5wcXJycXJydHV2dnZ0cWtlYV1cXV9iaG93foSJioqJiIiJioqJh4B8eHNxdnl7enp4d3d2eHh4eHh3dXJvbW1ucXM2NjU0NDQzMjEwMTIxMTIxMTEzMzM0NDQ2NTc3ODk5Ojk5Ojo8Oz0/Pz9AQUBBQUFAQD5AQEA/Pj08PT49PTw8PT08PDs6OTk5OTg4NzY2NjU2OTs/QkZKTVBTVVVUU1RYXWFjZWVnZWNgYGJjZmVnaWlpaWxsa2xpaWdkY2JgW1VMRT01LiwqKikqKikoKCgmJicnJiUlJSUlJSUkJCMjIyMjIyQkIyMjJCUlJSUlJSQlJycnJygpKissLC0tLi4vLy8vLy8vMDE1Njc8QEVJTVNXWVxfZGhqbW5wcHJxb2ppaGRjYWJjY2JjYWBbVE1DPDUvLiwsLCwrLCwsLCwtLCwrKysrKysrKyoqKiooKCkpKCgoKCotMjxIVWRtc3Z2dnZ2dnl5d3RpX1NJRURFR0dGRUVCPjs7PEBMWGRyeoKDg4KBgoKCgoB3cF9MOy4mJicpLTA1O0BJUFxncXZ3d3dzcGtfVU1GPzUuKygpKSoqKyssLCwtLi4vLzExMTROZVJLT1VeTT9RW2dxd3p6eHh3d3d3dXNtaFxPRT04NTQzMzIyMjAvLy8vLy8xMjQ3OTs+QUNIS0xOU1VXWl5iY2dtcXR4foKDhoeJiouLiomGhIOBfXl0cWtmX1hUUk9PT1JSVVhYWlpdXl9iY2Vnamttbm9wcXJ0c3NycnNwbm5pZF1WUUtEQT47Ojc2MjI0OD9KVmBrcXZ5eHZ4e3+Eh4qLi4iHh4aFhoeJh4R/eG9nYmBeXV9gYGNlaGpucXJycnNzdXZ1eHZ2c3JpY15dXF5iZmxzeYCHiYuLioqJioqLioZ/e3Z0cnR4fHx4eHh3d3h4eXl4d3RxbWttb3J0NjY1NDQ0MzIxMDEyMjIyMTExNDQ1NTU1NjU3Nzk4OTo6Ojs7PD0+Pz8/P0BBQEFBQEBBQD8/Pj49PDw9PDw9PTw8Ozs6Ojk5OTg5OTY2NjU0NTg5PD9CRkhLSkpJSkpJT1RYXV9laGhoZWRlZ2ZlZWRkZGNlZWZnZ2ZnaWhoaGViW1NMQTYwKikpKiopKSgoJyYnJyYlJSUlJSUlJCQjIyMjIyMjIyMjIyQlJSUlJSUlJicnJycoKSorLCwtLS4uLy8vLy8vLzA0Njk7QUdMUVJYWmBkZ2ltb3Fzc3d1cm9tamZlY2FjZGNiYmBbVU9GPDUxLy4sLCwsLCwsLCwsLSwsKyssLCwsKysrKyoqKCgpKSgoKCgpLDE5RFJfanF2dXR0dHZ5enp1bWJYTUdGRkdHRkVDPzs4Nzg8RlRibXaChIOCgYGCgoKBenNlVEIyKScpKzA0OT9FTVRdaHF3eHd3cm9pXFBIQDgvKykpKSkqKisrLCwsLS4uLy8xMTIyPWdoUlBJWmFKTVtoc3h6eXh3d3d3d3VzbWhcT0U9ODU0MzQzMjIwMDAwMDAwMDQ2Nzk7PkFDSEtNT1JUWFldXmNnbHB0eH6ChYiIiouMiYmIhYOCgH15dHBqZF1YVlRVU1VYWFpcXV9gYGJjZGhpaWttb29wcXBxc3JzcnJzcnBvbWZgWlRNQz06OTc1MzEwMjhAS1dha3J2d3h2eHt/hIeKi4uJiIeGh4iHiIiFf3hvZ2JgYF9fX2FkZmlsb3Fyc3N0dHZ2d3h2dnJwaWNeXFteYmdvd32EiIuMi4qKiYqKiomEfHhzcHBzeXt7eXh4eXl4eHl5eHd0cW9tbnBydDU1NTU0NDQyMjMyMjMzMzMzNDU1NTU2NjY2Njc5Ozs7Ozs8PDw+Pj4/Pz8/QUJAQEBAQD8+Pj09PT0+PTs7Ozs6Ojo6Ojo5OTg4Nzc1NTU1NDQ1NTc6OTw+PT4+Ojk5O0NJUVdfZGhpaGdmZWViYVxXVFRYXFxdXV1gYWRmaGprbWpgVkxBNC0qKSoqKCgpKCcmJiYmJiUlJSUlJSQkJCQjIiMjIyMiJCMjJCUmJiYmJicnJygoKioqKywuLS0tLS8vMDAwMTI0Nzw/REtQVFZZX2Jnam1vcXJ2dXl4d3RxbWllZGRkZGNjYl9ZVlFGQTkyLCwsLCwsLS0tLSwsLi4tLS0tLi4tLC0tLS0rKiooKSkpKSkpKSwyNz9OXWlxdHV1dHV2d3l5d3BnXFFJR0dIRUdFQz03NDQ0OUFPX2t5gISFg4GAgYOEg353a1pIOS4qLTA0Oj5DSlFYX2hxeHh5dnFvaFxPRDkwKikpKSkpKioqKissLS0uLi4vLzEwMztSZFRUR05OUlFaZ3R6fHp6eXZ2dnZ0cW5nXE9GPjo3NjY1NTUzMTEwMDAwMDEzNTY3Oj1BQ0dKTU9SU1ZYWWBiaGpuc3h9gYSGiouJiomIhIOCgX98eXZwaGNcWFZXV1ZZW11hYmNlZWdqa2xubnBxcnNzcXFyc3NycnJxdHJycW5qZV9YUUpCPDY1NTMyMDI3QEtWYWxzdnd3dnp9gYWIi4uLiomIiIiJioqGhYB5b2hkYmBfXl9iZ2ZqbnJxc3NzdHV4eHh6d3VybGZhXV1dYGVqcnl/hYmLjIuKiouKjIqIgnx3cW1wdXl7e3h3dnZ2eHh3d3l4dXRwb3Byc3U1NTU1NDQ0NDMzNDM0NDQ0NTU1NTU1NjY2NjY3OTs7Ozs8PDw9Pz4+Pz8/P0BBQEBAQD89PT09PTw7PDw6Ojs7Ojo6Ojo6OTk4Nzc2NjU1NDMzMzMxNDU2NjUzMzAwMDI5QEhRWV1iZWdlZmJfWVRPSEZGRkhLTFBRVFlcYWZrbXBubGVZTD4xLCsrKyopKSgoJyYmJiYlJSUlJSUkJCIiIiMjIyMjIiQkJCQlJiYmJiYnJygoKCoqKissLi0tLS0vLzAwMTI0OTxBRktQVVlcY2dpbm5ydHZ4ent8e3d0cm1qZ2ZkY2NiYF5ZVk9IQDgyLSwsLCwsLC0tLS0tLS4uLS0tLS4uLi4tLS4uLiwrKikpKSkpKSksLzU+S1llbnN1dXR1dnd5eXh0al9VTUhGR0ZFQ0A6NTEwMjQ9Slpndn6EhoSBgICBgoKAeXFhTj4zMDEzOT5CSE5TWl9ocXZ4eXhzbmhcTD40LSgpKikpKSoqKysrLC0tLi4uLy8wMTQ9VE5RT0tRTEJNXWp2fHx7eXh2dnZ2dHFuaF9SRj46NzY2NTUzMzExMTEwMDAwMjQ2Nzo9QEJFSEpNUFNVWVteYGVpbHJ4foKHiouLioeHhYOCgYB+e3d0cGpkXl1YWltbXWBiZGVpaWxsbnBxcXJydnZ2dnR0c3RzcnJydHV0dHVzb2tmXlhQRkA7ODY1MzIzOEBLVmFsc3Z3dnh7foKGiIuLi4qJiIiIiYqKh4R/eG9oZWNgX19gY2Vmam5yc3V0dHV2d3l5eXd1cWxlXl1dXmBmbnZ8goiLjIyKi4qKi4uJh4F8d3Bsb3N5e3t4eHd2dnh4d3d4eHV0cXBvcXN1NjY1NTQ0NDQ0NDQ0NTU1NTU1NTU2NjU1NjY4OTk6Ojo7Ozs9PT09PT8/Pz8/Pz8/Pz8+Pjw7PDw9Oz07Ozs6Ojo6Ojo5OTg4NzY1NDU0MzIxMS8uLjAxMTAtLS4sKywuNThBSlFZXF1hYWFcVU1DOjU1Njg3ODo7QUZLUVljamxydnRtY1VKOjEtLiwrKikpJyYmJiYmJiYlJSUkJCQjIyIiIyMjIyMjIyMkJSUlJiYnJycoKCgqKissLC0tLS0uLzAwMTM0OD9CSE5RWV1hY2ZqbXJzdnd6fHx5enp2cm5samVkZGJiYV1ZUk1JQTozLSssLCwsLS0tLS0tLi4uLi4uLi4vLy4vMDEyMjEwLS0qKSkpKSkpLC8zO0lXY21ydXR0dHZ2eHt3dW9lV01JR0ZFQ0A9NzItLC4yOEVVYnF8goWDgYGAgIKCf3t2allIOjc3OD5CR0tPU1pianF3e3l4dG5oXU0+MywpKSkpKioqKiwsKiwuLi4uMC8wMDIzT1JZXFJQUlRLQVtrdXp8enl3dnd3dnVybWdeUUY+OTc2NjU0MzIyMjExMDAxMTEzNDU6PT5BREdJTFBTVVdZXl9jZmpxd36Dh4mLi4qIhYSCgYCAfXt4dG9qZWFfX11eYWJkZWhpamtucHJ0dXZ3dnh4d3Z2dnR0cnJyc3R1dnZ3dXRybWlgXFNIQTo3NDMxMjZATFdibHR4d3Z4en+ChoqNjIuJiIiIiYqKioiDfndvaWJgX15gYmRnaGxwcnR0dXV3eXp6eXp3dG5pY15dXV9jaHF4f4SIjIyMioyLi4yLiYV/eXJta290eHp6d3Z1dnZ4eHh2eHl2dXJwcXV0dDY2NTU0NDQ0NDQ0NDU1NTU1NTU1NjY2Njg4OTk6Ojo6Ozs7PT09Pj4/Pz8/Pz8+Pj4+PT08Ozs7PDw8Ozo6Ojo6Ojo6OTk4ODY2NDQ0NDIyMTEvLi4uLi4sLCssKyssLjA0OkRJTlJWWVlYUkk+NDAuLi0sKywuMDI3P0dQWmNqcXV3c2thVUg8NzUxLyspKCYmJiYmJiYmJSUlJCQkIyMiIiMjIyMjIyMjJCUlJSUmJycnKCgpKiorLC0tLS0uLy8wMjM1OD1ES05TW15jZmhsbm90d3h6fHt9eXh3c3BsaWhlY2JgXVpYUktGPzkyLSsrLCwsLC0tLS0tLS4uLy8uLi4uLy8vMDEyNDQ0My4tLCsqKikpKSwtMjpGU2Frc3V0dHR1dXd5enhvZV1RS0dGREI+OjUwLCoqMDZBUl9teYGFhYKAgICChIJ+d29hU0M8Oz5CR0tOU1dcZGpxd3t6eXZxal5PPzMsKigpKSoqKiosLCwtLCwuLi4wMTEyMz9ib2NSSktIUFNhbHV6fHp5d3Z3d3Z1cm5oXlFGPjk3NjY1NDMyMjIxMTAwMTExMzQ1Nzo9PkNFR0tNUFNXV1tcX2RqcHh/g4iJioqIhoSCgX+Afn16eHRvaWVhYV9gYWFjZGZpaWttbW5xdHd2eHh6enl4eHh1dHJycnN1dnl5enp5dnNwaGJaUUpBOzg2NTM4QExZZG50d3l4enuAg4eLjo6MiomKiYqKiomIg353bmdiYmFgX2FkZ2ltcXR0dHV1d3l7e3l4dnJtZmFeXV1gY2p0fIGGi4yMi4qMjI2Mi4mFf3pxbGxvdHh6end2dXZ3eHh4dnh5eHVycHJ2dnU2NTU1NDQ0NDU1NTU1NTU1NTU1NTU1Nzc4ODo6Ojs7Ozw8PT0+PD0/Pz8+Pj4+Pj4+PT09Ozs7Ozo6Ozo6OTo6OTo7OTg4OTc2NTU0MzIxMTAwLy8uLi0sKysrKysrKiorLzU7QUdMTE9OSkM5My0qKSkqKioqKiorLjQ8Rk9aY21yd3VzamBSTUQ9OjUzLSooJiYmJicnJiYlJCMkJCMiIyIjIyMjIyQkJCQkJCQlJSYmJycoKSkpKywtLS4uLy8vMDI1ODxBSlBUW19jZ2ptcHJzdXd3enx8eXh3cW9ua2dkYGJeW1hTT0tEPTYxLi0sLCwsLS0tLS4tLi4vLy4vLi4uLi8vMDIyNDQ2NTQwLy0tLCwqKSkqLDA5QlBcZ3B0dHR0dHR2eHp5cWlfVkxHRkNAPDgzLisoKS41P0xaaXaBhYWDgIB/goOEgn10a1tMQ0FDR0pOUVNWXGNpcnd7enp3cWleUEE0LioqKioqKisrLCwuLi4uLy8uLjAwMjJNbmFBS0hKQU1VYG12fHx7eHZ2d3d2dnRvaF5RRz86ODU1NTU0NDExMjIwMDExMTMzNTU2Oz5BRUVISk1QVFZXXF1iaG93fYOGiImIhYOCgYB+fn17eXZybWhkYmJjYmFjZGRmZ2hrbG5vcXN2eHh5ent9eXl4dXNycnJzdXd7fnx8en18eHFrY1pSSUE6NjQ0OEFNWGRvc3Z6eXl+gYWIjY6OjIuKi4uLi4uKiIV/d21mYl5dXF1fY2ZpbnJzdHV1dXZ4eXl6d3RwbGRfXV5eY2dvd3yFioyNjIqKjIyNjYyJhH93cGtpcHV3eXl3d3d3eHd3eHZ4enl3c29wcnV1NjU1NTQ0MzM1NTU1NTU0NDQ0NjY2Njg4ODk6Ojo7Ozs8PDw8Pj0+Pz8/Pj49PT09PTw8PDo6Ojo8ODo6Ozk5OTg5OTk4ODc2NTU0NDIyMC8uLi4uLS0sKyoqKioqKikpKiotNDo9QENBQDo0LCsqKSoqKiopKSkpKSwuMjtHUFtlbHV2dHFpYVpST0pFQDozLCgnJyorKyooJiUkJCQjIiIjIyMjIyMkJCQkJCQkJSUmJicnKCkpKissLS0uLzAwMDE0ODtCR01UWmBkZWtucXF0d3d4eXt5dnRzcG1raGhkYl9dWFVSTUdCOzUxLS0tLCwsLC0tLS0uLi4uLy8vLjAwMDAvLzExMzU0NTY1MjAuLSwsLCoqLC0xOEJNWmVuc3V0dHR0dnh5d3JqX1ZMR0VCPjk1MS0pKCksMzpGVmRyfYGEg4B/f4CBhIR/e3FiVU1ISUtNT1FTWFxjZ3B0dnd3d3NtYlNFPjssKisrKiorKy0tLi4uLi4vLi4wMjQ2VmNKQkpHS0lIV2Btdnx8e3p3d3h4d3Z0b2hfUkhAOjg1NTU1NDQ0NDIyMDExMTEzMzM1Njg7PkFERklLTlFTVVhcYmhwd32DiIiIhoWCgYB/fn17fHl0cGxnY2JjY2NjYGNkZWZoaWptb3BxcnR3eXt8fHp6eHVzcnJyc3Z5e359foCBgXx5cmtkWlJIPzcyNDhBTVpmb3Z4eXl7f4GFiI6PjoyLiouLi4uLioiFf3duZ2JeXFtdX2Jlam9yc3Z2dXZ4enx7eHdzbmhhXlxcXmJocHeAhouNjYyLiouMi4qMiYN+dGxqam90d3l5d3d3dnd2dnd4ent5d3RzdHV2dzU1NjY3NzU1NTU1Njc2NjY3Nzc3Nzc4ODo6Ojo6Ozs7PT08PT09Pj4+Pj09PDw8PDw8Ozs7Ozs7OTk8Ozo6ODg4Nzc3NjU1NTU1MjIzLy8vLiwtLS0tKyspKSkpKikoKCkoKSwxNTY5ODQwLCooKCgqKioqKSkpKSkpKy0zOUVQW2VxdXZ1cmxnYl5ZUU1GPjgwLC0yMzMyMi0nJSQkIyMjIyMjIyMjIyQkJSUlJSUnJyYoKCkpKissLS0tLi8vMDE0Nzo/Rk1TWl5kZ2psbnBxcnZ3d3d1c3JvbWtpZmJfXFtYVFJOSEQ/NzMwLS0tLSwsLS0tLS4uLy0uMC8uLi8xMTExMjIyMjQ0Njc2NDEvLS0tLSsrKysuMTU+SlVkbHJ0dHNzc3Z3eHdzbGFXTEZCQTw4My8sKScnKjI4Q1Jhb3qAg4KCgH9/gISFgn13bF9VT05PTlFSVVhbYGZqcnd3d3d0bWJUSU5KLSkpKSoqKystLS0uLi4vLy8vMDE2UWxHNzw5P0lJSlZhbXd7fHt5eHd5eHd2dXFsYVJHQDw5NjY1NTQzMzMzMzExMTEzMzQ0MzY4OTw+QUVHSk1OUFJUW2BocXl+g4eIiIeGhIB/f318enl2cm5pZWJhYGFhYWFhYmBhYmRlZ2doam5yc3V4enp6eHZ0cnJycnR2d3l7en6ChISCfntxa2JaUUU8NTQ5RFBbZnB3eXl5en6ChomPkI+MjIuKioyMi4qKh4F5cGplXFtaWlxgZGpuc3V1dnZ4eXp7e3h2cWtkX1tZWVpgaHN7goiMjouLi4yLi42MjImDfXNraGpuc3h5eHd3dXV2d3h2eHt7endzdHV1dng2NjY2Nzc1NTY2NjY3NjY2Nzc3Nzc3ODg6Ojo6Ojs8PD09PD09PT4+Pj49PTw8PDw7Ozo6Ojo6Ojo5OTk5OTg4ODc3NzY1NTU1NDMyMTAvLi4sLCwsLCsrKikpKSkpKCgpKSgqLC0wMC0qKSkoKCkpKSkpKSgoKSkpKSorLTI4Q1BcaXB1d3V0cGxsZmFbVEtFPzo7P0BBPz83MSwlJCMjIyMjIyMjIyMkJCUlJSUlJycnKCgqKiorLC0uLi4vLzAzNzo+Q0pQV15jZmtsbW9wc3R0dHNycG5raWZkYV1cWlhTUE1JREA7NjIvLi0tLS0sLC0tLS0uLi4vMC8vLy8wMTExMTIyMjIzMzU2NTIvLy4uLS0sLCwsLTAzO0dTYGpydHNyc3N0dnd3c2xiWE5GQD85NTAsLCknJykuNj9MW2l1fYKCgoB/foGDhIOAfXNnXVVPT1BVVVdaXF5jZ2xydnZ2c2tfUlBHQi8qKioqKisrLS0tLS4uLy8vLy8yNWGGXTk4SVFPT0tVY2x4fX59eXh4eHh6eHVxbGJUR0A8OTY2NTU0MzMzMzMyMjQ2ODg3NzU1Njc5PD5BREZISkxOUFheZ292foOHiIiFhIKAfn59e3l3dnNtZ2RhYF5dXl1cWltaW1pcXWBjYmRmaW1xdXZ3d3RzcXFycnJ0dnZ4enh8foGDhIJ+enJqYVlPRTw5O0ZRXWhxeHp6en2AhIeKj5CPjIyLioqMjIuKiIWCenRsZl5YV1lbYmhtcnR0dHV2eHl6e3l1dG5oYFtaWVhbYmt0fIOIjIyLioqKiYuMjYuIgntybGlrbnN5eXh3dnd2dXR1dnh7e3p3dHN1dnV3Nzc3NTc3NTU3NzY2NzY1NTg4Njc4ODk5ODk6Ojk8PT07Pj4/PDw9PT09PDw9PTs7Ojk5OTk5OTk5OTk4ODg5ODk2NTU1NTMzMjMyMi8uLiwtLCwrKyoqKioqKSkoKCcoKCcmJygoKSknJygoJygpKSgnKSkoKCgoKCgoKCouND1HU15ocnd5dnV1c3BuaGJdVlFOT1BRU1NPSEE3LCUjISIiJCQjIyMkJSUlJSYmJycnJycoKSosLCwtLi4wMTEyNTg9QklPVlxhZmlrbW9wcnV0cnFuaWlmZmNdWllWVFBMSkdFQj44MjAuLi4tLS0tLS0tLS0tLS0tLjAwMTExMTMzNDQyMjIxMTM0NDIyMDAwMC4tLC4tLS0vMzlFUF9ncXRzc3JzdHZ2dXNuZFlORUE9ODQuKyspJycpLjM6R1dncHqCg4N/gH1+gYOEg4F6b2VcVlRTVVZYWllbXGNpb3N2dXRtYVhTNz43KywsKyssLCssLS0uLi8wMDAxMzZVd2dJSklUVFFPWWRweH19fHl5eHp5enl5c2xjVUdAPDk2NjQ0NDMyMjEzNDY5PTw9PDw7ODY1Nzk8PUBDREZJSlBVXWdyeX+Dh4eHhYOBgH59e3p4dnZwbGViXlxZWVVWVVRTU1NTUlRUVVhaXWFma25ucXFxcnJycnJycnNzc3V4eHp9f4KEgoB4cmliVktCPj9KU19qcXl7e3p+gIWJjJCQj46Mi4uLjIyMjIyIg313cGdgXVlcXmNqcHN1dHR1d3h6e3p3c3FqZF1ZV1dXXGRtd36Gi4yMi4uKioqLi4yLiIJ7cGtpa21zeXl4d3V1dnZ3d3Z3e3t7dnRzdnV0dDc3Njc3NzY2Nzc3NzY2NjY3Nzc3ODg5OTo5Ozs6Ozs7Ojs7PD4+PT09PTw8Ozs7Ozk5OTk5OTk5ODg4ODg4ODg3NzY2NDQyMjEyMC8uLi0rLCwrKysqKikqKikpKCgnKCgnJicoKCcnJycnJycoKSkoJykpKCgoKCcnKCgoKy42PUhSXWhydnl4eHd1dHFuaGZhYGFjZGZmZFtTSDorJCQiIiMjIyMjJCUlJSUmJicnJycoKSkqLCwsLS4vMTExNDc6QUZNU1lgZGdqbG5wcXNzb2xoZmNgXFxZVVJOS0hFRUE+PDc1MC8uLS4uLS0tLS0tLS0tLS0tLjAxMTExMjEzMzQ0NDMzMjI0NTIyMjExMTAvLS4uLi4tLzI4Q1BcZ29yc3NycnJ0dHRybWRZTkVAPDcyLispKCcnJysxN0FRYGx3gIODgH99foGDhIWDfnVoYFlXVldXV1dVV1heZm10dXVyaFpYTDdAOiwsLCsrLCwrLCwtLi4vMDAwMjI+WF9cVFdDQE5VVVhmcHh9fXx5eXh6e3p5eXNsY1VJQDo4NjY0NDQzMzMzODk8Q0ZFRkVEQj46Nzc3ODs8PUBDR0pQWWBpcnl/hYiHhoOBgIB+e3p6eHZ0bmljX1lUU1BOTUxKSUpLTExMTE1QUVRYXWVoa25xcHFxcXBycnJycnFxcXJ1dnp+gIKCfHhwZ1tUSUFCS1Rga3J3eXl7fYCFiYyQkI+OjIuLi4yMjIuLiYV/e3RtZWBeXmFma3BzdXR1d3h6eXp4dXJuZmBaVldVWF1lb3d/iIqMjYuLioqLjIyLioaBd29oZ2ptc3l5eHd2dXZ2dnZ3eXt7enZycnR0c3M3NzY4OTg4ODY5ODg3Nzc3NjY3ODc4Ojo6Ojs7Ozs8PDw8PDw8PDw9PDw8PDw8Ojo5OTg4OTk4ODg4ODg3Nzc3NTU1NTIxMTExMTEwLS0tLCsqKiopKSkpKSkoKCcnJycoJycnJycnJyYmJycnJygoKCgpKSkpJycnJygoJygsMjQ+R1FbY2pvc3Z2dXR0c3NvcG9xcnV2dnJqZVdJOSkiISEiIiQkJCUkJCUlJiYmJicoKSorLCwsLC0vMDEyMzY5PUNJT1ZcYWZpbG5vcHNxbGtmYlxaVlJQTEpIR0NBPTo5ODQyLy4uLi4tLS0tLS0uLi4uLS0tLTAwMDEyMjMzNTU1NTU1NDQ1NTQ0MzIyMjEwLy8vLy0uLjAyOEJNWGVvc3JxcXFxc3RzcW1lWk9FPjs2MCwnJygoJykrLjU/TFpmdHyDgoB9fn+Bg4WFhoB5bmZdWVhYV1VSUlBWXGJqcnZ1cmFYWUA2PDIsKywsLS0tLS0tLS4uLzAxMDAzO1tmXlpgWztIVFhWaHB6fX17eXh4eXl5eXp0bWNVSkA5NjU0NTU0MzI0Njs/RUpOUFBST0tEPjk2Nzc3OTw+QUZLUlpjbHN5f4WHhoaEgH9/fXx8enh1cW1nX1lTUE1HRkZFREVERERFRkdHSUpNUlleZGdqbG9xcnJzcnJyb25ra2xtbW9xdnx/gYB7dGxiW1BKRk5XYmxzeXt7fX+ChoqOkJCPjo2Mi4uMi4uLjIqFgn12cWpmZWVmbXBzdHV1d3h5eXl6d3NuaGJdV1JTU1hdZ295gomLjIuLi4uLi42MjImGgXdsZWZpb3V5eXd2dXV2dnZ2dXd6enp2dHJxcXFwODg4ODk5OTk3Ojg4OTk3NzY2ODg3ODo6Ojo7Ozs7PDw8PDw8PDw8PDw8PDw6Ojo6ODg4ODg4Nzc3Nzg3NTc3NDU1NTUxMTExMDAuLS0sLCwrKiopKSgoJygoJycmJiYmJyYnJycnJycmJicnJycoKCgoKCgnJycnJycoKCcoKiswNT1HTlRdY2ZpbG5xcnR1d3h6fH6BhYV/enNmVkY1KCEhIiIkJCQlJCQlJSYmJiYoKSopLC0tLS0vMDAyMzU4O0FGTFNZYGVoamxtbm9xbmhjXFlUUE5IREE/Pjw7ODc2NDIwMC8vLy4uLS0tLS0tLi4uLjAwMDAwMTExMjMzNDU1NTU1NTU1NjY0NDQzMjIwMDAvMC8tLy4wMjhATFZjb3JycXJvcHFycXFtZVpPRT04NC8rKCgpKCgpKy0zOkVWZHB6gIKAfXx9f4KGh4aAe3FpYFtYV1VRUU9MT1ReaXJ1dHZiUUs/ODgyLiwsLS0tLS0tLS0uLy8wMDAxMjVNa19XZFY4O1BXV2Rxen19e3l4eHl5eXt5dG1jVUpAOjc3NTU1NTQ0NTlAR01TWFtcW1lVTkI7ODU2Njc6PkBGT1ZdZm52fYKGh4aEg4B+fn58fHp4dXFrZV5UTEdDQUJCQUFCQUFBQUJDQ0RGS1BXXWBjam1xcHBxcXJ0dHBsaWVlYmJmaG50en+AfXlvZ19XUE9RWWJsdHp7e31/hIiJjpCQj46NjIuLjI2Mi4uJiIN+enVxa2tqa3BzdXV2dnh4eXp6eXVybGZeVVJQUlJXXWhyfISJjIyLi4uLi4uNjIyKhX53bWVjanB2eXl3dXV1dnZ2dnV2eHh4dnNycHFwbjk5OTk5OTk5OTk4ODg4Nzc4Nzc3ODk6Ojo6Ojo7PDw8PDw8PD09PDs8PDs6Ojo4ODc3NzY3Nzc3Nzc2Njc1NDY1NDUzMTEyMDAvLi0sKysrKiopKScnJycmJigoKCgpKSYlJSYnJycnJiYnJycnJycnJycnJycnJycnJignJycnKSs0O0JITlJYWl1iZGhudXd9gISGiIuIhoJ8cmVVRzUmIyEiJCQkJCQkJSUlJScoKioqKiwtLi4vMDExMzU4Oz1CR05WXGJlaWtsb29vbWlhXFROSEVBPz08OTY1MzQzMjEvLy8vLS0tLS4uLi4uLi4uLi4vLzAwMTEyMzMzNDU1NTY2Nzc1NTY2NTU0NDMzMjIwMDExLi4vMTM3PkpUYGtwcXJvb25wcXBwbWVbUEM7NTEtKicnKCkoKSosLzdCUF9sd3+CgX59fX+Dg4WFgX51bWNeWlVRTUlHR0hQW2pxdnRrUkJLTkY+NjAsLC0tLCwtLS0tLzAvLzEwLzI1SFtbW2lbNzZQVFZkcnp/fnp5eXl5enp4eHNtZFVKQDo3NTU2NDQ0NjtASFBYXmJnaGZiX1ZLQjk2NDM1OEBGS1NaZGtyeYCEh4iFhIKAf318fn16eHZyamJaTUdDPj8+PkA/QEBAPz8/QUBDQ0dOVFthZmltb3FycXFzc3FwamVdWVVWWl1ja3N3en17cmxkW1hVWV5nb3V6fX1+gYSHio6RkZCPjYyMjI6Ni4qHhYF8e3t4eHRwcXF0dXZ2dnd3eXt6eXd0b2ljW1RQT09QVVxncX6Fi4yNjIuLi4uMjY2MiYR+c2tmZmtxd3p5d3R1dnZ2dXV1dnd3d3Nxbm5ucG45OTk5OTk5OTk5ODg4ODc3ODg3Nzg5Ojo6Ojo6Ozw8PDw8PDw9PTw7Ojo6Ojk5Nzc2NjY2NjU2Njc2NTU1NTY1NTQzMTExMC8vLi4sLCoqKiopKCcnJycmJiYnJycnKCgmJSUmJycnJyYmJycnJycnJycnJycnJycnJygnJycmJiUoKjA1OTxDREhLT1RcZG52fICEh4mKiomFg3xvY1JBLiQiIyQkJCQkJCUlJiYnKCorKystLS4uLzAxMzQ2Nzs/REpRWF5kZ2psb25tbWhgWlBKQ0E9Ojg2NTQ0MzExMjAwLy8vLy0tLS0uLi4uLi4uLi4uLy8wMDEyMzM0NDU1NjY3Nzc3Nzc3NzY2NTUzMzMyMTAwMC8vLzEzNz1IU19qcHNzcG5tbm9yb2xnXFFFOjQvKykoJygpKCkqKy81PEpaZ3N8gYF+fHx8gIKEhIN+eHBnX1lUUEhFQ0NHUFpmcHRmTT5EXFxNPzYwLCwtLSwsLS0tLS4vLy8wMC4yPVJZXmNkVElRUU9WZ3F6fn56eXl5eXp6eXdzbWZYS0E6NzU1NDM0NDg9RU5VXmZscXJwbGVdUEU8NjUzODxCS1BWYGhvdX2BhYaHhoOBgH9+fX5+fHp2cmpiVk1GQT89Pj0/PD49PT48PT8+P0NHTlRbYWVpb3BwcXBxc3Fxb2ljW1FKSE1UWmNrcXV6eXZvaWFdXF1iZ292e3t7f4SGiIuPkY+Pjo2MjIyMi4iHhIF6eXp6e3t6eHZ4d3d3d3d4eXh7enl3c21mX1dQUE5MT1VeaXR+ho2NjYyLi4uLjI2NjImBenJpZmZqcXd6eHd1dXZ2dnV1dXZ3d3ZycG1ubWtqODg4ODk5OTk5OTg3ODg3Nzg4ODg5Ojo6Ojo6Ojs8PDw8PDw8PDw7Ojo6Ojo5ODc3NjY2NjU0NTU1NTY1NjY1NTUyMTEwMDAvLi0rKyoqKSopKSkoJyYmJSYlJSUmJiUlJiUlJicnJycmJiYmJycnJycnJycnJyYmJiYoJiUlJiUlJSUnKi8xMTIzOEBJUFljanN6gIKEhYWIhoaCeG9dTDgnIyMkJCQkJCQkJSgoKCopKSorLS0vLjAwMTM1Nzg9QUdPVVphZWhrbm9sbGpjXFRJQz05NjY1NDQ0NDMxMjIwMDAwMC8tLS0tLS4uLi8vLi4uLi8vMTExMjMzNDQ1NTY2Nzc3Nzc3Nzc2NjU1NDMzMzAyMTEwMC8vNDg7RVJeaXBycW5ta21ucnBtaF1RRTozLispKCYoKSkqKyouMjtGVmVxeoCCfnx6e36Bg4SDf3pyalxWUEtCPz09RE1YZnBoSTdCXmlgUUQ4MC0uLS0sLC4uLS0tLi8wLi8xM0FdXWJhVVNZWFNQWWRxe359e3l4eXp6enl3dG5lV0tBOzg0NDQ0NDY7QUpUXWZvdHl5enNqYFVHPTc0NztCSlBWX2Zvc3qAg4aGhYODf35+fX18fH17d3FoX1VKQj8+PDw8PTw+PTs7PD09P0BER05WW2Fnamxubm9xcXJycGxnX1dLQzw/R1FZYWhtdXV2cWtnZGJhZGpyeX1+fH+ChoiNj5GQj46NjIuLi4mHg4B9e3t9e319fXt7enp6eXl4eXp6fHt6dW9pYVpTTkxKTE9VX2t2gIeNjYyLi4uMjI2NjoyJgXpxaGRlanJ3enh2dXV1dnZ2dnV2d3d3c29vbGxqaDk5OTk5OTk5OTk4Nzg4Nzc4ODg4Ojo6Ojo6Ojo7PDw8PDw8PDw8Ozo6Ojk5ODc3NzY2NjY0NDU1NDQ1NTMzMzQ1MjExMDAuLS0tKisrKigpKSkoKCYmJycmJSUlJiYlJSYlJSYnJycnJiYmJicnJycnJycnJycmJiYmJyclJSYlJSUkJCYoKSkqKSowPENLVF1mbHJ2eXp8goOGhX50ZFM/KiEhJCQkJCQkJSYoKCgpKissLC0uLi8wMDEzNjg5PkRKUlhdYmdqbW5tbWpkXVVMQjk4NzQ0MzMzMzMzMTExMDAwMDAvLS0tLS0uLi4vLy4uLi4vMDExMjMzMzU1NTU3Nzg4Nzc3Nzc3NzY1NTU0MzIyMTEwMTEwMDQ4O0NOWmlvcXFubGxvbXBxb2deU0c7Mi0qKSgoKSkpKysqLDM5QlBfbHZ9f398enp7foGCgn97dmpbU0xFPzo5OkFLV2Jwa045TGpvY1JFOTAtLi4uLS0uLi4uLS4vMDAxMjNGYmliU01qYlJVU1dmcnt+fXt5eHh5eXl6d3RuZVdLQTo3NDQzMzQ2PEJNVmJsdXt/gH11bGJVSTw3NztCSE9WXWZsc3l/goWGhoOBgX99fX58fX59e3dxaF9USkM/PTw7Ozs8PDs7Ozw8PDw9QkdOVltgZmtrbXBxcHFyb21qZVxSSj83Nj1FUFhgZmxzd3JtaWlmZ2ltdHp9fn+BhIeJjY+RkI+OjYyLi4qIhIB7eXdzdXd8fX9/f357e3p6eHl6enx7eXRtZ11WTkhJSElPVWBtd4KKjY2NjIuLjIyNjYyLh394bWViaGxyd3h5d3Z2dnZ2dnZ1dnd3dnNvbWhoZ2U6Ojo6Ojo6OTk5ODc3Nzc3ODg4ODo5OTk5OTs7Ojo6Ojs7PDw8PDo7Ojs5OTg4Nzc2NTU1NTQ1NTU0NDQ0MzM0MzIwMS8tLS0rLCopKCgnJyYmJyYnJiUkJSUlJSUlJSUmJiUlJiYnJyYmJiYmJiYnJiYnJycnJycmJiUnJiYmJiQkJSUlJSUmJSYnKzA1P0ZOVFphZWlscHh+hYaEeWlYRC0iJCMjIyMkJSYnKCkpKisrLSwtLi4vMDEyNDY5PkFJUlZcYmZoa25ubm1nYFhQRjs3NDQ0NDQzMzMzMjEyMTAwMDAwLy4uLi4tLi0tLy8uLjAwMTExMTMzNDU1NTU3OTk5OTk5OTk4ODc3NjY1NTQ0MjIxMTExMTE0ODtATFdkbXBwb25rbW5ucW9sZFxOQTUtKSkqKSopKSoqKywxOD1LWmh0e35+fXp5eXx+gYCAfXdqX1JIQTw1NTc/SVRganFKP2F1cWdWRzw0Ly4sLC4uLi4tLS4vMDAwMDM7Wnp7ZUhOXFxISVJZZHF6f398eXh2eHh5eXh1b2VYSkA4NDMzMjEzNzxFUFpkcHl/hIN+dW1hVUk/PD5BSFBXX2Vtcnh9g4WHh4aCf35+fX1+fn5+f3x3cWpfU0lAOzw7Ojk5OTw8Ozs7Ozw5PUFHT1ZdY2lsbm9vb29ub25tZ2JbT0c6MzA0O0VOVmBmbnFzb2pqa2xvcnV7fX5/goWIio6PkI+PjoyKi4qKiIN8dnJuaWx0eH1+gH9/f3x7e3t7e3t9e3hxa2RcVExIRkZJTVdkcHyFi46Oi4uLi4yMjY2MiIR+dWtjYWdscnd5eXd1dXV1dXZ0dnd2dnVxbmtqaGViOjo6Ojs7Ojk5OTg3Nzc3Nzg4ODg5Ojk5Ojo7Ozs7Ojo7Ozs7Ozs6OTo4Nzc2Njc2NTU1NDQ0NTQ0NDQ0NDMyMjIxLzAvLiwsLCooKCgoJycnJicmJyYkJCUlJSUlJSUlJCQlJSYmJiYmJiYmJiYmJyYmJycnJycnJiYlJyYmJiYkJCUlJSUlJCUkJiYmKjA5QEVKTU5TWmJueYKGhHltXEQtJCMjIyMjJCUmJygpKSoqKiwtLS0vMC8xMzY5PEJHTFRZXmVnamxubm1nY1xVSkI7NzQ0NDQ0MzMzMzIxMjEwMDAwMC8uLi4uLS0tLS4uLi4wMDExMTIzMzQ1NTU2Nzk5OTk6Ojo6OTg4Nzc2NjU0NDIyMjIxMTEzNDg7QEtWYWxwcG9ubG5ubnBwbWdfUkM2LioqKikqKioqKikqLzY7SVhlcnl+f316eHh6fX+Bf3x3bF9SRj02MTQ4PUZSXmtkPUJndm9mWEo9NS4sKyssLi4uLS0uLy8uLi8wQ257dl5PTllUPk5ZY2Vye359e3l4dnh5enl4dW9kV0pAODQzMTEyNDhASFBcZ3N8goSDfnVsYFRIQUFGSU9XW2NqcHh9g4aJiYeEgn9+fn17fH5+fn57d3FoXlBIQDs6OTk5OTk6Ojk5OTk5Oj1BSFBZXmRpbG5vb29ubm9tamRhV09CNjEuLzM7RlFbY2pucXJvb25wcnR3e35+f4CDh4yOj5CPjo2KiouKiYaBenJrZWJlbXJ4fH6AgH98fHt7e3t7fXt2bmlhWE9JQ0RFR01YZnJ9h4yOjouLioyMjI2NjImDfHFqYmJnbHR5eXl3dXV1dXV1dXd3dnRzcG1raWZlYjs7Ozs7Ozs7Ojo5ODg3ODg4ODg4Ojg5OTk6Ojo6OTo6Ojk5OTs6ODg4ODc3NzY1NDU0NDQ1NDQ0MjM0NDQxMjIwLy8wLi0rKyoqKSgoKCgoJyYnJiUmJiUmJiUlJSUlJSQkJCUmJicnJycmJiUlJiclJSYmJiYmJiYmJiYmJiYmJSUlJSQkJSUkJCQkJCQnLDE1ODs9Q0tXaXaAhYR6bltDLCMjJCQkJCQlJicoKSkqLCwsLS0tLzAvMTM2Oj5ES1FYXGFmampqbm1pZGBYT0Y+OTY1NDU0NDQ0NDQzMzMzMjEwMDAvLy8uLS0tLS0uLi4wMDAxMTMzNDQ1NTY3Nzg5OTg4OTk5OTk4ODc3NjY1NDQzMzIyMzIyMTM2PUJJVF9pcXJwbmttb29wcnBrY1dJPDArKyspKSorKywrLS82O0dWYm53fX9+e3h4en1+gIB+eW9iU0Q4MjAzNjxFUV1qYURGb3dyaF1MQDUvLS0tLCwtLS4uLi4tLjAyPF9rbHJYR05OWlNRUmdqdHx+fnt5eHd3eXp4d3VvZ1lKQDg0MjExMjQ5PUdSX2p3f4OEg351a2BUTEdFSVBWWmBnbnZ8gYeKioiGgYF/fn58fHx8f39+e3dxaV5QRj85ODY4NTc3Nzc3ODc3Njg8QkdRWl9naW1ubW1ubW1uamdjW1JIPTYuKy0wNT1GU1xlbG9xcXFxdHV4enx+fYCDhYmKjo+Ojo2Mi4qLioiDfndsYVxZXmZrc3l+gH9+fXx8fH18fHx5c2xmXFNKRUJBQkZPW2h0f4mOjouLi4uLjIyNjIqGgHtwZmFjZmtzenl4d3V0dHZ2dnZ2dnVzcG5qaGdlYV47Ozs7Ojo7Ozo6OTg3ODg4ODg4ODk5OTk5Ojo7OTo7Ozk5OTk6ODc3NzU2NjY2NDM0NDY1NDQ0MzIzNDQ0MTExLy4tLi0sKysqKikoKCcoKCcmJiYlJiYlJiYlJSUlJSUkJCQlJiYnJycnJiYlJSYnJiYmJiYmJiYmJiYmJiYmJiUlJSUkJCQkIyMjIyIiIiQmJywuLzZCUWRzf4SDeWxYPikjIyQkJCQkJSYnKCkpKiwsLC0tLjAwMTM2OT9ESk5VW19mZmdrbm5saGNaU0pDPDY2NTU1NDQ0NDQ0MzMzMzIxMDAwMC8vLi0tLS0tLi4uMDAwMTEzMzM1NTU1Njc4OTk5OTk5OTk5ODc2NzY2NTU0MzMyMjIzMTI0NzxBSVJdZm5ycG5sbm9vcHJybGZbTT80LCwpKykqKysrKiwwNTxGVWFsdn1/fnt4eHl8fX9/fntyZVNCNzIwMzY6RE9bZ1tFUnV0b2pfTkE2Ly0rKyssLS0uLi4uLi4wM0tqanVsTEdGSE1MTlJvbnN7fX57eXh3d3d5eHd0bmdZSkA4NDIxMjIzOT5IVWJteYCEhYJ+dWtgVExITVNYWVxkbXR7gYWJiYqHhICAfn5+fHx9e39/fnt2cGdcUEQ9Ozc2NjY3Nzc3NzY3NzY3PkNKU1lfZmptb21ubW1ubWtmX1lQRToyLisrLTE4QUxWYWptdHR0dXh5e31+gYGAgoSIjI2NjY2MjIuKi4qHgXtzZ1tTUFhga3F2en5/fn19fX19fHx6d3JrY1pRR0I/P0NIUV1qd4KJjY2LjIuLi4yMjYyKhoB4bmZfYmdsdHh5eHZ0dHR1dXV1dXV1c3BuamhmZGFdOzs7Ojo6Ozs6OTk4Nzc4ODg4OTk5ODk5OTs7Ozo6Ojo5OTk4ODg3NzY1NTU1NDU1NTU0NDMzMzMyMzU1NDEwMC4uLi4sKysrKiopJycnJycmJiYlJiUlJCQlJSUkJCQkJCUmJSUmJyknJiYmJycnJycnJycmJicnJycmJiUlJSUjJSQkJCQjIyMjIiIjIiQkIyUmJyw0Pk5gcX2EgnlrVzwnIyMkJCQkJSYnKCkqKisrKywsLjEyMjQ5PUJGS1FUW2FkZ2hpbW5saWZgV05HPzg3NjY1NDQ0NDQ0NDIyMjIxMTAwMDAvLy8uLS0tLS0tLjAwMDExMjM0NTU1NTc3Nzk5OTk6Ojk5OTk4ODg4NjY1NTQ0MzMzMzI0NTg9QklRWmNrcHFvbW1vb3FydnFqYlFDNi4pKSsqKyoqLCsuMzo/R1NganN8gH99eXl4e3x+gIB7c2dXRjozMTQ5OkJOWWVUS156dHFrYFBDNzAsLCwrLCwsLS0tLS4wLzNScXp3X0ZFTD4+TFVVZWlxfH9+e3l4d3d4eHl4dW9mWUpAOTQxMjExNDtBSVdjb3qEh4eEf3htYFVRUVNWWFthZ3B3fYWIiYmIhYN/fn5+fXt7fX5/fn18dXBmW09CPDg2NDQ1Njc2NjU1NDQ1NztCS1NaYGdqbGxtbWxrbWxpY11WTUE4LywqKiwwNj9KVF5pbXN2d3d6e35+gICAgYKFiIuNjY2MjIyLi4qKh4B6cGVYS0pQXGRrcnd7fX5+fn19fXt7eHVvZ15YTUQ/PT1AR1NfbHuEi42Oi4uLioyMjI2LiYV/dWxkYGNobnR4eHd0c3Nzc3NzdXV0dHFwbmpmZWNgWzs7Ojs6Ojs7Ojk4Nzc3ODg4ODg4ODk5OTg5Ozs6Ojk5Ojo4OTg4NjY0NDU1NTQ0NDQ0MzMzMzIyMjIyMjIxLy8tLSwsKyoqKiopKCcnJycnJiUmJSYlJCQkJSUlJCQkJCQlJScoKystLSsoJygnJycnJycnJSUmJiYmJCQkJSUlJSQkJCQkIyMjIyIiIyIjIyMkJSYrMT5NX3B9hIJ5a1c+JyMjJSUkJCUmJygpKiorLCwtLi8wMjU5P0RITVFWW11kZWlqa2pqamljW1NKQTk3NTY2NTQ0NDQ0NDQyMjIyMjIxLzAwMC4tLS0tLS0tLS4wMDAxMTIzNDU2NjU3Nzc4OTk5Ojo5OTk5OTk3NzY2NTU0NDMzMzMzNDY6PkNJUVtka3Bxb25ub3FzdHZ0bmZaSjwwKioqKisqKywvMjY8QktUYGt0fICBfnp4eHt8foCAfHZsW0s9NTAyNTpCTVdkUFNndnVybWNTRDsyLSwsKywsLC0tLC0tLjA4bHp1dWJORUQ+RVFRVGZmcXx/fXt5eHd3eHh5eHRuZVhKQDk0MDEvMTU7Q01ZZnJ+hoeHhoJ8cGRZVlZYWlxdZGlyeH6FiImJh4OBf35+fnx8fH1+f358eXRvZltPQzo2NDQ0NDQ1NTU0NDQ0NTc8RE1VXGJoa2xsbW1sa2lpZmFbVElAMzArKSkrMDQ6RVBcZm1ydnl7fH+AgYKCgoODhYmLjo6NjIqJioqKiIZ/eG1jVUpKTldhaHB3en1+fn1+fn58e3l0bGVeUkhBPDo+QktXY298houMjYyLjIuMjY2MioiDfHVqYmBjaG50eHd1dHRzcnJyc3R0c3Fyb21qZmNgXVs7Ojo7Ozs7Ozk6ODc3Nzg4ODc3Nzg4ODg5Ojo6Ojo5ODk5ODc3NzY2NTU0MzMzMzM0NDMzMzMyMjExMDAvLy4tLCsqKisrKyooKCcnJycmJiYlJSYlJSUkJCQkJCMkJCQkJSYnLDAzNDQyLSspKCkpKSYmJiUlJCQkJCQkIyUkJCYkIyMjIyQjJCMjIiIjIiIhICQnKS86SlxteYGFemtYQSkiJCMkJSUmJygpKSkqKyosLi0wMjU5QUVKTlNWXV9jZGZoa2tra2pmX1ZNRD44NjU2NTU0NDQzMzMzMjIyMjExMC4uLzAuLS0tLS0tLi4uMDAwMTExMjM0NjY2Nzg4OTk4OTo6Ojo5OTk5Nzc2NjY1NTUzMzMzNTY3Oj9ESVFaY2pvcXBvbnFyc3R2dXFrYVFCNCoqKyssKy4wMzY7QUVNVmFsdX2BgoB+ent7fH+BgH55b2FPQTcxMTQ4QUxXZExManZ2cWxlVkY7Mi0rKyorLCwtLSwtLDAwSXpyVUteXVRQV0xNUVBpaXJ+f317enl3eXl5eXh0bmZYSj84NDExLzI3P0ZQW2h2f4WHi4mGf3JnXVhYWVxdYGVscnqAhIiJiYaDgH9+fX58fn59fn+AfHl1b2VZTUE5NTIyMjMyMjMzNDQzMzQ4PUVOVl1lamttbW1ubGxraWVeWlBFOjIrKSkqLC8zOEVPW2Nqcnd5fX6AgYKDhISEhIaJjI2NjIyKiYmJiYaFfnVqYFZLR01UXmlyeHt9f39+fX99e3p3cWxkW09EPTo6O0JMV2dzf4eLjIyLi4uLi4uLioqIgX1zZ2FeYmdvdHZ3dXJucXFycnNzc3NycW5samZhXltZOzo6Ozs7Ozs6OTg3Nzc4ODc4Nzc4ODg4OTo6Ojo5Nzc4ODc3Nzc2NTQ0MzMzMzMzMjIyMjExMTExMTAwLy8uLSwrKioqKiopKCgnJycnJiYmJSUmJSQlJCQkJCQjJCQkJSQmJyswNTo9OTcyMjEwMC4sKCYkJCMjJCQkJCMlJCQlIyMjIyMkIyMjIiMiIyIiIiEiJSgvOUdWanmBhHxuXUoxJCUjJCUlJicoKSkpKissLS4wMzY6QEZLT1NYXF9hY2Zqa2tramppY1xTSkI7NjQ2NTU1NDQ0MzMzMzMzMzMxMTAvLi8vLS0tLS0tLS4uLjAwMDExMTIzNDU2Nzc4ODk5ODk6Ojo6Ojk4ODg3NzY2NTU1MzM1NTY2ODxARUlRWGFpcHJycG9xcnN0dnZ0bmVXRjguLS4sKy4xNTc7QERKUVhganN9g4OBf3x7e3p9goKAe3JlVUQ4MjE0OEFJVGNLRml2dnJsZldIPTItLCwqKywsLS0tLS0xRHR3bVo4T09NU1dRUlJPY2pzfYB9e3p5eHd5eXl4dW5lVkk+ODQzMTI1O0FJU15seIKJiouKhn90aGBbW1xdXWJmbHJ2fIGFhoaEgn9/fn19fHx8fX5/fXp4dG5kWk5BOTUyMTExMjIxMTExMTE0OT5HUFlgZ2ptbW1tbWxsa2hjXVdNQjcvKikpKSsvMzpGT1tjaXB2e36Ag4aFhoOEhIaHioyNjYyMiomJiYmGhX12bGBTS0pNVF5ocHZ7fX9/fn19fHt6dnBqYlZLQz06OjtCTlppdYGJi4yLjIuLi4uLi4uJhoB4cGVgXmJobnR2dnRycHFxcXFycnJycXBtamdjYV5aWDs5Ozo6Ozs7Ojo4OTg3ODc4ODg3Nzg5OTk5OTg4ODg4Nzc2NjY2NTUyMjIyMTExMTIyMjIxMDAwMC8wMC8vLi4sKyoqKSkpKSkpJyYlJScnJSUmJiUlJSQkJCMjJSUkJCMjJCYrLjM3Ozs6Njc3Nzc2NS8qJSQkJCQkJCQjIyMjIiMjIyMjIiIiIiIiIiIhISEhIyQpLTZCUmNzfoJ+c2NQOCcmJCQnJycoKCgqKisrLC4vMjU9Q0hNUVRZXV9iZGhra2pta2hpZV5WTEQ/OTc2NjU1NjY1NTMzMzMzMzIyMTEvLy8uLi0tLS0tLS0uLi8xMDAxMTEyMzQ1NTY3ODg5OTg5OTk5OTk4Nzg5OTc2NDQzNDM0NTY3Njo+QEZLUFhgaXFzdHJwcHFzdXZ4dnBnXEs7Mi0tLS0xNjk9QkVKTVRbYWpzfISFhYB+e3p9fn+BgoB4a1tKOzMzNDc+SVNhSkpqdnRyb2ZYSTw0LSwsKissLC0tLS0tLkt4enFKN1VOTElNU01SV2NocnuAfnt6eXh4eXl5d3RtZVlLPTc1MjU0OD1FTFhjcHyGjI2NioZ9dGliXlxdXV9hZWpwdnl/g4WEhIN/fX19fX1+f31+f315eHVtY1lLPzczMjEwMDAwMDAwMDAvNjpAR1FZYWhtbG1tbW1sa2llYFpVSz81LSsrKyoqLjQ/SVNcY2pxdXt/gYSGhoSDhISGh4qMjYuLiomJiImJiIV+dmxfUkpLUVZhanF5fH5+fn98fHx7eHNuZVxRRz86ODk9RE9fbHmDiouLi4uLi4yMjIuKiYR9dmxjXl5iZ251dXRzcnFwcHBwcXFxcW9ta2dmY2BcV1Y7OTs6OTo7Ozk5OTk4Nzc3ODg4Nzc4ODg5OTk4ODg2Njc3NjY1NTQzMjIyMjExMTEyMTExMTAwLzAvLy8uLi0tKywqKikpKSkoJyUlJSUmJiUlJiYlJSUkJCQjIyMjIyMjIyQlKCouMTY2NDU2Njk5ODcyLSckJCQkJCQkIyMjIyIjIyMjIyIiIiIiIiIiISEgICEjJisyPE1db3uCgXZmVT0qJiUnKy0sKCkpKiorKy0vMjY8QklNU1VbXl9iZWZoampqaWlnY19YT0ZAOTY1NjY1NTY2NTUzMzMzMzMyMjExLy8vLi4tLS0tLS0tLi4vMTAwMTExMjM0NTU2Nzg4Nzc4OTk5OTk5ODc4OTk3NjY1MzU1NDU2ODo8QENHS1BVYGhvc3R0cXBwc3V2eHdzbGFQQDYvLi4xODw/QkVKUFJXXWNrc3uDhYSBf3+Adnt/gn+BeG9gTz41MzQ3PkdSXklIbHZ0c29mWEo9NC0sLCorLCwtLS0tLS07YHBqUThbV05MUFlVTVRjYGZ2fX59enl4eHl5eXd0b2ZYS0A5NjY4OT5FTFNdaHR+h4yOjYqEfHJoY2BfXl1dXmBkam92fYOEgoGBfn99fX1+f35+fX99eXZybWNZSz83MzEwMDAuLi4uLi4vMDQ6QktTWmNqbWxsbG1tbGtpY11XUEU8My0rKSwrLTA5QkxVXWNqcnZ7f4OFhoaEg4SEhoeKjI2KiomIiIaIh4eEfXZsX1JOTlNaYmtzeXx+fn1+fXx8e3dya2ZcUUc8ODg4PUZTY297hYqLi4uLi4uMjIyLiomFfHNpY15eYmlvdnZ0c3BvcHFxcXFxcXFvbWpnZGJeWldXOjo8PDo6Ojo7OTo6OTg4Nzg4ODg4ODg4OTk3Nzc2NTU1NTQ0NTU0MzIyMjIxMTIyMjIwMC8vLy8vLy4vLi0tLCsrKikoJycnJyclJSUlJSMjJSUlJCQkJCUlIyIjIyMjIyMkJCUnKCorKy0vLy8yNjY2MS4oJSMjIiIiIiMjIyMkJCMiIiIiIiIiIiEhISIiIiIiIyUpMDpKWmt4gIF3aVtGLyYlKi8yMywpKSkqKywtMjg7QUdLUVVaXmBjZGZoaWlpaWdmZGFZUEhBPDc2NDU1NTU1NTU1NDQzMzMyMjIwMC8vLi0uLS0tLS0tLS4uMDAxMTExMjMyNTY2Njc4ODg4ODg5OTg4OTg4ODg4Nzc3NTQ0NTU2Nzo8PUFFSk1RWF9nb3V1dXNycnR2dHZ3c25kVUc6MTAyNzxARUhNUFRYW19kaXF7gomGg35zXmp8gHl6gHxzZVREODMzNjxGUF9KR2t2c3FuZlhLPjUuLCwpKiwsLCwsLC0rMkxlbmFQbnxpUU9eXk5MYV5Wa4J/fHp5eXl5eXh4dm9mWUo/Ozs9QUNITFRaYm14gYaLjIyJg3puZ2FgX11aWFlcYmlwd32BhIJ/fnx9fXx9fn9+fn59e3p0cWtjV0k9NjMwLy4uLi0tLSwsLS81PENMVV1kam1rbGtsbG1qaGVdV09EOTEsKiosKy81QEhSWF5ja3J3fYCBhYaGhYODhIaHioyMioqIiIeHiIeHg3x2bGBTUVJVW2VsdHl9fn18fXx8fHt3cGliWE1BOTY4OD5GWGRxfoeKioqLi4yMjIyMjIuIgntxZmBcXmNqcnZ3dHNxcHFycnJzc3FvbGpsZ2VeXFpZWTo6PDw6Ojs7Ozk5OTg4ODc4ODg4ODg4ODg4Nzc3NjU1NDQzMzQ0MzMyMTExMTEyMjIyLy8vLy8uLy8vLi4tLSwrKykqKCcnJycnJycnJyUjIyUlJCQkJCQlJSMiIyMjIyMjJCQkJCQmJiYnKSoqKy8vLyspJiUjIyIiIiIjIyMjJCQjIiIiIiIiIiEgISEiIiIiIiMlKS84RVdmdH+Bem5hUDYpKS41OTszKikpKisuMTY7QEZMUVZaXGFkY2ZpaGhpaWhnY19ZUktCPDc2NTU1NTU1NTU1NTQ0MzMzMjIyMDAvLy4uLi0tLS4uLS0uLjAwMTExMTIzMjU2NjY2ODg4ODk5Nzc4OTk4ODg3Nzc3NjU2NTU2Njg6PUFESElMUVdfZW10d3Vzc3NydHR2dnRwaFlKPjg1OTxBRElOUlZZXF9kaGx1fIKIhoJ3bmt5fnxwe4J9dWpYSTozMzc9RU9eS0hhcnNybmZaSz41LiwsKywsLCwsLCwsLC00RlNra3V0ZWJgYVpOQlNma3qBfXt6eXl5eXl4eHNtZlxQRENBQ0dKTlJaYWpyfISJi4yJiH91aWNfXFpVUlNUWGBmbnd/g4OBf358fXt7fX5+fn5+fHl2dXFrYlZJPTYzLy4tLS0sLCwrKysvNDxDTVdfZ2ptbmxrbGxsaWViXVdPRDkxLCsrKy81P0dNVVxkaW90eH1+gYSGhoWDg4SGh4qMjIyJiYiHh4iIiIN8dmxhVVFTWmBnb3Z7fn59fHt9fXx7dXBpYVRJPTc2Njk/SlxqdYGJioqKi4uMjIyMjIyLhoF5bmRbW15jaXF2d3NycXFycnJyc3Nyb2tqaGZiXVxdXl46Ojo6Ozs7Ozo5OTg3Nzg3ODg3Nzg4Nzc4Nzc3NjY0MzMzMzMyMjIyMTExMTExMDAxMTAwMC8vLy4sLi4sLCwsKikpKSknJiYnJyYmJSUkJCUlJCQkJCQkJCQjIyMjIyMjIyMkJCQlJSYmJSUmJiclKConJyUkIiIiIiIiIiIiIiIiIyMhISIiIiIgICAgICAhISEiJCcrND5RYm95gHxzZ1dCLSkxOz9BNywqKiwtMTY5PUNKUVZYXmJmZWdnamhpaWhmYV1WT0xEPDk3NzU0NTQ1NTY2NDQ0NDQzMjIxMTAwLy8uLi4tLS0tLS0tLi4vMDExMTEyMzM0NTY2Njc3NjY4ODk5ODk4ODc3NjY2NjU2NjY2NzY6PUBDRUlKTVFXXGVtc3Z3dXNwc3Nzc3V1cWpfUEM8PD5BRUpOUlhbXmFlZ2twdnqAhoV4d3VqZnFmW2hzenlvXk09NDI0OUNQW1BPX3FzcmtlWks+Ni8sKisrKysrKywsLS0rKys4WXJsZ2RwZFdWVFNdaHV7f317e3p5enl4eHh2b2lfVU1KSkxNUFRZYWhvdn6GiouKh4J6cmVdWlZSTUpNT1NdZnJ8gIOBf39+fHx8fX5+fn59fnt4eHVwaWJUST41Mi4tLS0tLCsrKysqMDU+R09ZYWhrbmxta2trbGpnY1pVTEI4LysrKzA0PUdOVl1iaW5zd3l8f4KEh4eFgoOEhoqLjIuLiomHhoeIiIeDfHVsYVZSVVxiaXF4fH5+fn59fn59eHVtZV5SRTo2NjQ4QU1cbHmCiouLi4qKi4yMjI2LiIN+dmxgWVleZWxzdnd1c3FycXFycnJycm9saGdjYFxcXmBiOzs6Ojs7Ozs6OTg3Nzc4Nzg4Nzc3Nzc3ODc3NzU0MzMxMTExMTExMTAwMDAwMDExMDAuLS8vLy8tLS4rLCwsLCkoKScnJyYmJiYmJiUlJCQkJCQkJCQkJCQkIyMjIyMjIyMjIyQkJSUlJSQkJSUkIyMlJiUkIyIiIiIiIiIiIiIiIiIiISEgICEhICAgICAgICAhIiMkKS85S11sd39+dGtcSjMpLDQ8PzQpKSosLzM4PENHTlNYXGFkZmdoaGhqaWdkYVtWT0hEPjk1NTY1NTU0NTU0NDQ0NDQ0MzIyMTEwMC8vLi0uLS0tLS0tLS4uLzAxMTExMjMzNDQ1NjY3NzY2Nzc4ODc3ODg3NzY2NjY2NTU2ODg6PUBCRUVJTE1RVlpkbHN3d3Z0cnJycnRzc3FsYldORUJESk1RVVtfZGZpa3Bzdnp9gIOCdnV0fGRQRD9ARF5eWG9oSjgwNDk/S1pOTV5scnJtZVpLPjYvLCorKysrKyssLCwsLCwrNU1dY2hrY0RITUxTYGlye399e3l5d3h5eXl4dXFrY1xYUlFQVFZbYGZudXyCiIuLioaBeG1jWVNMSERCRU1VXml2fYKDgX9/fnx8fX1/f35+fXx7eHd0cGliVEk+NTItLS0tLCwrKysrLDE5QEhQW2JobG1rbGxra2tpZWFYU0pANS8qKy0zO0VQVV1jaW9yd3p8fH+ChIaGhYKDhIaKi4yLi4mIh4aHiIiHg3x1aV5XVVhfZm10eX1+fnx9fX18fHh1a2ZcUEI4NDQ1OURQX297hYqLi4uLi4uLjIyMioiDfXVoXllZXmVsc3d3dXNycnFxc3Nzc3JvbGhlYl5eXl9iZDw7Ozs6Ojo6OTg5ODg2Nzc4ODc3NjY3NzY1NjY0MjExMTExMTAwMDAvMTExMDAvLy8vMDAvLi0tLCwtLCwrLCwpKSgnJiYlJSYmJSUlJSUkIiMjIyMjIyMjIyQkIiIiIiMjIyMjIyQkJCQkJCQkJCIiIiQkJCMiIiIiIiIiIiIiIiIiIiEhICAgICAgICAgHx8gISIjIyctNUNWaHN9f3tyYVI+LisvNzUvKissLjA1Oz5ESlBXXGBjZmlpampqaWVjX1pUT0dCPDc2NTQ1NjU0NDU1NDQ0NTQ0MzIyMjExMC8uLi0tLSwtLSwsLS0uLi4wMTExMTIzMzM1NTU1NjY3Nzc3ODg4OTg4NjY2NjY2NjU2Nzk8PUBDRUZJTEtNT1RZY2x0dnd2dHJycnJycnNxb2heVExISk9TWV5iaGtuc3R2eXp9gIGDgG1ZWnFoVVtiaV5QeFZmYF9UPDo/WW5iS0dOX3BybGVaSz41Li0rLCwsLCwsLCwsKyssMjtQVldiZlFPXUlFTFZlcXp+fnx4d3h5ent7e3l2cGhjXltZV1peY2dtcnl/h4mLi4mDf3ZrX1FMRD04O0BNWWVxe3+EhIF/f35+fX+Af39+fXx7enh1dXBpYlRJPTMwLS0sLCsrKiorKy0zOkJKVFxkaGtqbGpqa2ppZ2NfWE9GPDMtKS0yO0ZPVl1kanBydnp7fX6ChIaGhISCg4SGiYuLi4uJiIeHh4iJh4N9dm1iV1NaYWlweHt9fn5+fX19fH13dWljV0o/NjIyMjlEVGJwfYaKi4uJi4yLi4uLioeGgXpxaF1XWF9mbXR2dHV0cXJzcnNzdHNxbmtmY2FfYF9hZGY8Ozs7Ojo6Ojk4ODg3Nzc2ODg3NzY2NjY1NTQ0MzExMTExMTEwMDAwMDAwMC8vMC8vLzAvLi0tLSwsLCsrKikpKSkoJyclJSUmJiUlJSUlJCIjIyMjIyMiIyMkJCIiIiIjIyMjIyMkJCQkJCQkJCIkIyIkJCMjIyIiIiIiIiIiIiIiIiIhISAgICAgICAgIB8fISEiIyMlKTRATmBten99dWZZSTUsKy0sKyorLTA0Nz5DR05VWl5iZGdpaWpqamZhXFZRSkRAOzc2NjU2NjMzNDQ1NTQ0NDU0NDIyMjIxMTAvLi4tLS0sLS0sLC0tLi4vMDExMTEyMzMzNTU0NTY3NjY3Nzg4Nzg4NzY2NjY2NjY3ODk9PT9CRUhJS0xNT1BTW2JrcHV6eXVzcXFxcXN1dHNuZVtUUFFVWl9lanF1eH9/f4CBg4eGhH92WEBQWlJQQFhgXmRsTkpBQEdLaJiTcklDTGNzcWtmW0s+NS4tKywsLCwsLCwsLS9Ibn2EhoR0Y2ZqVltKTlxYZXF6fH17eHd6enl7e3t6eHZvZ2FfXVtfY2htc3h9hIeKi4qHg3x1aVpMQDczMzlDUFxodn2DhoSBf39+fn+AgH9/fn16eXh4d3NwaWJUST0zMC0tLCwrKyoqKystMzlDS1RcZGpra2pqamloaGVhW1ZNQjgxLCswN0JLU11mam90eX1+fX1+gYSGh4WEgoOFhomLi4uLiIaGhoeIiYeDfXZqX1hXXWVtcXl7fX9/f35+fnx9eHJoXlVIOzMxMjI7Rlhnc4CJiouMi4uMi4uLiYiGg3x0a2NbV1hfZm10dnVycXFxcnJxcnJxcG1qZWNhYGFhZGVmOzs7Ojo6OTk5ODc3Nzc2NjU1NjY1NTU2NDIyMjIxMDAxMTAwLy8vLy4uLS0tLS0vLy4uLi0tKysrKyspKSkqKSgoJyYmJiYlJSUkJCQkJCQkJCQkJCMjIyMjIyMjIyMjJCQiIiMjIyMkJCIiIyMiIiMjIyMjIyMjIiIiIiIiIiIhISEhICAgIB8gICAfHx8gISEiIiIiJCguOEdXZ3N6fHhuYVI+LSooKCoqLC0wNTg+RUxSWVxgY2RoaWppaGRfWVROSEI+OTc2MzM1NDQ0NDU1NTUzMzQ0MzMyMjExMDAwLy4uLi4sLC0tLi0tLS4uLzAwMTIwMjM0NDU1NTU1NTU1NjY2Njg4NzY2NjQ0NzY3OTo8PkFCRkhKSkxOTE5RUVliaHB0ent2dHFxcHBydHZ2cWtkXVhXW11kanF3fIOHh4eHiIiIiouMfmpWUVpWWlxjZmliXEVETFFEQExod21ZR1p3c29sZVtLPTYvLS0sLCwsLCwrKy0vW36Adnh9eGlpd2tSSVZfWGRxfH5+fHl4d3d5e3t8e3p3b2plYmBiZGltcnl9gYaIiYuJhYJ7cWVWRjs0MDQ9SFVhbXiBhYWEgX9/f39/gIB/f318e3h4d3d2cmtiVko9My4sLC0tLSwsKyoqLzM6RE5YYWVpaWlpaWlqaWViXFdRSD41Li0vNT5IVFxka292e35/fXx9foGEhIaGhIKEgoWIi4yLioiHh4eHiImIhX51al5aXGBob3N5e31+fn9/f39+fHhwaFxTRTgwLSwwPEpcaXeEiIqLi4qKi4uKioqKhoB5dW1iWFRXYWhvc3Z1cnBycnNycXRzcm9saWVjY2NkZGVmaDw8Ozo6Ojk5ODg3Nzc3NjY1NTY2NTU1NDIyMjIxMDAvLy8xMC8vLy8uLi0tLS0vLi8uLS0tLSsrKysqKykpKSkoKCcmJiYmJSUlJCQkJCQkJCQkJCMjIyMjIyMjIyMjIyQkIiIjIyMjJCQiIiMjIiIjIyIiIiIiIiEhISEhISEhISEhISAgICAfICAgHx8fICEhISIiIiMmKjM/UF9tdnx6c2pbTTYsKyorLC8wNDY7QUhNVFldYWRnam1ramReWlJKRUE+OTU1NDQ1NDQ0NDQ1NTU1MzM0NDMzMjIxMTAwMC8uLi0tLC0tLS4uLS0uMC8wMDEyMDIzMzM1NTU1NTU1NTY2NjY3Nzc1NjU2Njc5Oz0+QEFCRUdJS0xNTU1PUFNWXmdudXp6eHVzcXNzc3V3d3RwamRfXmBkaW91foOJjY2NjY2Nj5CPkYxwVklJV19tcmtsbllHUUNGR0lJS1RiXk9bdG5taWNbTD42LywsLCwsLCwsKysrLC4+WWhwa2ZkX25rUE9eXlRkcHl+fnx5eHh4enp7fHt5dm9qZWNjZmltcXZ6fYGFh4iJiYWCe3FlVEQ4MjE4Qk1bZnJ9hISEgoF/f39/f4CAf399fHt4eHd3dnFsYlZJPDMuLCwtLS0sLCsqKi41PEdOWGFmaWlpaWlpaWhlYFxYT0U5Mi8wNDxET1liaW5zeX6Afn18fX6BhISGhoSCg4SFiIqMi4qIh4eHh4iJiIR+dWthXF9jaXB2ent9fn9/f39/f3x1cGhcT0A1LisrMz5PX2x5hImKi4qKiouLioqKiIWAeXJrXlZTWGFpcHV2c3JxcnJycnNzc3NvbGllZGRlZmZnaGc6Ojs7Ozs5OTg3Nzc2NjY1NjY1NTQ0NDIwMDExMTExMC8wLi8uLi8vLi4tLS0tLS0tLSwsLCwsKyoqKCopJyYmKCgoJyUlJiUmJiUlJCQjIyQkJCQkJCQkIyMjIyIiIiMjIyIiIyMiIiIiIiIjIyMiIiIhISEhISEhISEhISEhISEhISEgICAgICEgHx8fHx8gICEhICEjJCcuOEdXZnB6fHdvY1RDMiwtLTAxMzY6QEVLUlVZXWFlaWpqamhhWVNMR0I9OjY3NDQ0NTU1NTQ0NDU1NTQzMzMzMzMyMTEwMC8vLi4tLSwsLS0tLS4uLy8uLzExMTExMTEyNDQ1NTU1NTU0NDU1NTU1NDQ1NTY4PDw+QEFCRklJSkxNTU5PTk9TWFtja3J3eHh0c3JycXN2eHh4dW9qZmRlaGxxd4CHipCQkpGSkpGUlJWTil47QlhdV2dhZ31wVmRcS0RDR09VW1ZPVWlqbmxjWkw+NzAsLCwsLCwrKywsLCw2U0tOVldhUElXUU5YUltYZXB6fX17eHd4eXp6e3x7e3hzamZjZmZqb3R3en1/goSHiYeFgHpxZFNDNzI1PEVSXWp2f4KEgoGAgH9/f3+AgH9/fXx5dnZ4eHZxbGRXSTsyLSsrLCwuLSsrKSwvNj1HUlxiZmhpaGhpaWlnZWBaVE1DODEyNztES1ZeZWtydnx+f359e31/gYSFhoWCgoSFhomLi4qJiIeHh4iJiYiFfnVrYFlfZGtxd3x+fX5+f39/f397d29kWUw9NC0rLDVAUmFwf4eKi4qKioqKiomJiYeFgXlwaFpWU1dhaW9ydHNvb3FxcXJycnNybWtoZWZmZ2lpaGdlOjo7Ozs7OTk4Nzc3NjY2NTU1MjIxMTIxMC8xMjEyMjEyMjEvLi4vLy4uLS0tLS0tKyspKSsrKykqKiopKCkoKCcnJyYlJSUkJiYlJSQkIyMkJCMjIyMkJCMjIyMiIiIjIyMiIiMjIiIiIiIiIiIiIiIiISEhISEhISEhISEhISEhISEhICAgICAhIB8fHx8fICAhISAhIiMlKjI/T2BqdH19d2xcT0AyMjI1Njg6P0NHTVFXW19iZmhpamdiW1RNRkE9Ojc2NTQ0NDQ0NDQ0NDQ0NDQ1NDMzMzMzMjExMDAvLi4uLS0uLi0tLS0uLi8vLi8xMTExMTEzMzQ0NDQ1NTU1NDQ1NTU1NDU1Njg6PD1AQkNERkhKSktMTk5PT05PU1RZXmhudXh3dXNycnFzdnp6end1b2pmaWptdHuBiI6QkZGTlZWWl5eWlZF1XlZZUDNdc3+CfHdqXFRXUlNNTVlXUU5VXmZkYFlNQTcuLCwsLCwsKysrKyosMkFdYVBaW1FdVDpCRUpUXmVxen18e3h3eHl5eXt8e3t2b2pmZWhobHB1dXh7fH+ChYeHhYB6cWRTQzgzNz5JVmFveYGDhYKAf3+AgICAgH9+fn18eXZ2eHh2cWxkV0k7Mi0rKywsLSwrKystMjlBSlRcYmZoaWhoaWlpZ2RfWVFKQDcyNT1CSlNcYmhuc3d7fH17enp7f4GFhoaFg4OEhYaJi4uKiYiHh4eJiouKhX50aWFeYGhsc3l8fn1+fn9/f39/e3dvZFlKOzQtLC82Q1hkdICIi4uKioqKioqJiIaHhYB4bWVZVVJYYWpwdHJycXBxcXN0c3NycG1ramlqamhoaGZkXjw8Ozs6Ojk5ODc2NjY2NTUzMzMzMTAxMTAyMTE0NjY3NDMxMC8vLi4tLSwsLCssLCwsKysqKisrKSkpJygoKSkmJiUlJSUlIyUlJSUjIyMjIyMjIyMjIyMjIyMjIiIiIiQkIiIiIiIiIiIjIyMjIiIhISEhISEhISEhISEgICAgISEgICAgHx8fISAgHx8fHyEgICIhISIiIyYsOUVVY254fXpyZVlLOzY2OTs+PkNITFJUWF1hZGZoaWdjXVVQSkI9ODc2NjY1NDM0NDQ0NTU0NDU1NDQzMzMzMzIxMS8vLi4uLi4uLS0tLS0tLS4uLi4vMTEwMDEyNDMzMzQ0NTU1NTQ1NTU0NDM2ODg6PD5AQkRFR0dJSktMTU5OT09OUE9RU1lianF5dnR0c3Jxc3Z5fH15d3JtaWppbnV6f4WLjpCRkpiZmJiZmpiTjYiEf2tTeYGAgX95b2JdTEVWXllVUU9NT1BSWWFcUUM3MS0tLCwsLCwrLCwtKi01WmdXVGFWY1Q6R0xTWF5odXx9fXp6eXd3eHp7e3t4c2xnY2NjZmlsb3J1eXl9f4GFhYOAenJkVEU6NThBTltncnuBg4OCgH9/fn+AgYB/f357enl2dnd4d3NsY1ZIOzItKysrKyoqKiorLjQ7Rk5WXGNmZ2hnZ2hoaGhkX1dPRzw1OTxCSFBYX2RpbnJ2eXl3dnh5en+BhIWGhYSDg4WIi4yMioqJiImJioqLioR9dWpiYWJqcHV6fX19fn6AgIB/f3t2bmRXRzozLCowO0haaniCiIuLiouLioqJiIeEh4R/dmxiVVFSWWFqcXZ1cnNxcHBxcnNzcW9tbGxrbGpqaGRkYVo8Ozo6Ojo6ODg3NjY1NTY0MzMyMS8vMDAxLzE0NTg7PDo4NTMxMTAwLi4uLi0rLS0sLCsrKioqKikpKCcnKCgoJiYlJSUlJSQlJSUlJCQjIyMjJCQjIyMjIyMjIyIiIiIjIyIiIiIiIiIiIyMjIyIiISEhISEhISEgICAgICAgIB8fICAfHx8fICAfHx8fHx8gISEhISEiIiUlKTI8SVpocnt9dm1jV0c8Oz0/QkRJTVJWWF1eYmVlaGhmYFlTS0Y9OTc2NTU0NjY0NDQ0NDU1NjY1NTQ0MzMzMzMzMTEwLy8vLi4uLi0tLS0tLS0uLi4uLzExMDAxMjI0MzM0NDQ0NDQzNDQ0NTU3ODs8PD9BQ0RGRkhJSUpLTE1OTk9PT09QT1JWXWRsdXh2dHNycXN2d3p9e3lzbmpqbXFzdnuAhYqOkZKVl5qampiYlJGIhXx7fH+Af4GAe3NnXE5HVltYWlBMSk1PTExZXlZIPTQuKywsLCwsLCwsLCwtNUVdXEdbVldPRldWRz5QZG14fn16enl4d3l6enp4dW9qZGJiYmJna2tvc3V4en1/gYKCf3lwZVRFOTY6Q1BeanZ/hIWDgoB/f35/f39/fn59e3p5dnd5eHdzbGNWSDsxKyoqKioqKioqKjA2PUdPV19maGlnZ2doaGdmYl1XT0c/PEBESVFYXGJobGxydXZ2c3Jzd3p9goWHhoOEhISHiIuNjIuKioqLi4yMi4qEfnVrYGBmbHJ4enx9fX5+f3+Af356c2tiU0Q4MSwrMTtNX257hYqLjIuLi4qKiYiIh4aBfHNpXlNQUltianJ0dHJycnJycnN0dHNxb25sbGxsamhmYFtWOzs5OTk5OTg3NjY2NTM0MzIyMS8vLy4vLzIyNzg8PkJCQD05NTU0MjExLy4uLi4tLS0rKyopKSkpKSgoJycoJyYmJSUlJSQkJSUlJSYmJSUkJCUlJCQjIyMjIyMjIyMjIiIiIiIiIiIiIiIiIyMiIiIiISEhISEhICAgIB8fHx8fHx8fHx8fHx8fHx8fICAfICAhISEhIiIjJSYqM0JOXmh0fXpzamJVR0FCQ0hMUFRXWl1fYmRlZmdlYlxXT0dCOzg1NDU1NTU2NjU1NDQ1NTY2NTU1NTQ0NDQyMjAwMDAwLy4uLS0tLS4uLS0tLS8vLzAxMTAxMTIxMjIyMjIyMjQyMzQzNTY3ODw9PkFCREVFRUhJSElLTExNT09NTk9OTk1PUFVeZ3J2dnRzdHN0dHd5fH16dW9samxsbXBzen+Eio2QlJWWmJqZl5WRi4SAfHt7fX6BgHt0a15STlVPUFVWVk1HS09TU1RXUkc7NCsuLi0sLCwtLS0sLi4wNTo9UU5RRURPUEM+UGtnd3x7eHd3eXl5enl4dXRsaWJbXV5hZWlnbXBxdXd5e35/f313bGJSRjg5PUhUYm55goaEg4F/f39+f35/f359fHt5eHZ4eXh3c2xiVkc5MCspKSkpKiopKSsxOEBJUlphZmdpaGhoaGdnZWFaVU5GQkFFSlBZW19kaGttcHJxb21vcnZ6foCDhIWEhISEh4mMjo6LiouLjIyNjYyKhH5yZ2JiZ210eXp7fX5/f39/gH99eHJpXU5CNy4rLDM/T2Jyf4iLi4yLi4uLi4qJiIeGgXlxZ1tRUFJbY2xxdXZ0c3Jzc3R0dHRycnBwb2xra2tmY1xVUDs7Ojk5OTg4NzY1NTQzMzMyMjEvLy8uLy4xNjo7QENGSUZEQT48Ozg1NTQzMTEyMC4uLCwrKioqKSkoKCcnKCcmJiUlJSUkJCUlJSUmJiUlJCQkJCQkIyMjIyMjIyMjIyIiIiIiIiIiIiIiIiMjIiIiIiEhISEhISAgICAfHx8fHx8fHx8fHx8fHx8fHyAgHyAgISEiIyIiIiMlJy86R1Zjbnh8d3JqYVNISEtOUlZaXWBhYmRlZmVkY2BcVU5GPjk2NjY2NjY2NjY1NTU1NTU2NjY2NTU1NTQ0MzMxMDAwMC8uLi0tLS0uLi0tLS0vLy8wLy8wMTAxMTIzMzU0NTU1NTU1NTc4OTw9QUFDQ0VHSEhJSUlKTExNTk5OTUxNTEtISUpPV2Jsc3Z1c3FydHR3eXt8enVvbGloZmdnbHB5fIGHjZCTlZaWmJaSj4mCf3l6fH5/fn55cWpdVVVSUk5OTE5JREdPUE5KTVBKRDktLS0tLCwsLS0tLC0tLjM9UFdQTENJU1FDQU9taXd8enh3d3h5eXp4d3RzbGdfWVhaYGZrbm9sbm5vcnZ5fH17dWthUEQ4OUBKVmRxfIGDgoB/f39/fn9+f39+fXx5dnZ2eHl4d3NsYlZHOTArKSkpKSkpKSksMjlBSlNbYmZnaGloaGhnZmJfWVVNSURHSlJYXl9iZWpsbG1sa2lpbHB1eXx/g4SGhoSEhIeJjI6OjY2Li4uLjIyMioV+cmhjZmpwdXp7fH1+f39/f4B/fHdxaF1OQDYuKyo2Q1RkdIGHjIyMi4uLi4uKiYiHhH93bmRWT09UW2RsdHRzc3NycnJyc3R0c3NxcG9vbm1oY19XTkk8PDo6OTk4ODg1NTQ1NDQxMjEvLi4uLi8wMzY6PUFGSk1NS0hHRUI/Pzw8Ozg3NzY1NDExLiwpKSkpKCcnJiYmJSUlJSYmJSUmJiUlJSUlJSUlJCQjIyQkIyMjIyMjIyMiIiMjIyMjJCIiIyMkJCIiISEhISAgISEgICAgHx8fHx8fHx8fHx8fICAfHx8fHyAgICAhJCQjIyEhJCYrMj9NXGh0fnx2cmtkWVRSVlhcYGNjZWZmZmlmZGFfWFFLQzw2Njg3NjY3Nzc3Nzc2NjU2NjY4OTc2NTUzMzMzMTAwMDAwLy0uLy4uLi4tLy4vLS8wMTIyNDQ1NTU2Njg2Njc4NjY4ODs+Pz8/QUNERkZISElJSkpLS0tMSktLS01MS0pIRkNESVNeaXF0dnRzc3N1d3h5e3p1cWtmZGBfYmVocHd7hYyOkZKWlZWVk46HgX55eXh6e3hzbmhhXltZVlRNTUpJSkZDR0tHQ0hQTUxILykuLSwsKy0sLS0tLSwwNkZYUVFJUVVHQT0+Smt5fHt6d3Z1d3p6d3V1cmxkWldXWV5nbWNGQERja25xdXp+e3VqX1BDOT1ET11odX2CgoGAfn5+fn5+fn59fnt6d3d2dnd4eHZya2FTRjgwLCgoJycnKCgpLTQ7QktTXGNmZ2hoaWlpaWZjYFtYUkxLTFFWXF9jZWlpaWppaGRkZGludHh7f4KDhISEhYWHio2Pj46OjIyNjY6OjIiFf3RrZ2dtc3Z5e3x9fX99fn6BgH94b2ZYSz81LSsuOEZYaneEioyMjYyLi4uLi4qJh4R+dWxiV1BOU15nbXR0c3NxcXJydHR0dXV1dHNwb29sZmBaUUlIPDw7Ojk4ODc1NTU0MzMyMjEwLi4uLi4vMDM2Oj9ESExSUlBOTUtJSEZEREM/QEA+PDs5OTUyLSsqKSknJiYmJiUkJSUmJiUlJiYlJSUlJSUlJSUlJCQkJCMjIyMjIyMjIyIjIyMjIyUkJCMkJCQkIiEhISEgICAgICAgIB8fHx8fHx8fHx8eHh8fHx8fHx8gICAgICMiIyMiISQmJy44RlhlcHp9e3dybGVgXl5dYWRmZmlqaWlpZ2NfW1RNRj45OTk4ODY2Nzc3Nzc3Nzc4ODg6ODk5NzY2NDMzMDEwMDAwMDAvLzAvMC8vMDAuMTQ0NDU2NjY4Ojo8PT49PkBAQUJCRERGRkZGSElKSUlJS0tLS0xMTExLS0tLTEtMSkhHQ0JAP0NMWWRxdHZ0c3N0dHd5eXl4dnBpYlxYV1pcYGtyeICHio+RlZWWlJKOiIF8eXl3dnRuZWNhWllXVllXTUtMSkU+PENHR0dJUFNTXEwlLS4sLSwrLCwtLi0tLjRMTVdmW1NUQDw3Oklpenp7eHZ2dXd5eXNydXJqZFxYWltqaE09REA4XWllanN5enhzaF1MQDs/R1RgbXeAhIOAf35+fX19fX1/fn17eXd2dnZ3eHh2cWphU0Y4MSsoKCcnJygoKi40PUZOV15lZ2hnaGlpaWlmY2FeWlZQT1JXW15hZWdoaGlmYl9eX2NpbXR4e3+BgoKCgoSGiIyOjo6NjYyMjY2Ojo2KhXxzamlpb3R6fHt8fH1+f39/gYB9d29mWEg9NC0tMTtMXG59hIqNjI2Mi4uLi4uKiYeEfnRoXlJOUFRdZWxydXNzcnJzc3R0dHV1dXV0cXBtaGNbU01ISjs7Ojk4Nzc3NTQzMzMyMTAxLy0tLi4uLi4yNjs/RUlMUlNTUlFPT01LTEtKSUlKSUZEQkA9OTUxLiopKCcoJyYlJSUlJiYmJiYmJiYlJiYmJSUlJSUkJSUkIyMkJCQjIyMjIyMkJSQlJSUlJSUlJCMiIiEhICAgIB8fHx8gIB8fHx8eHh8fHh4eHh8fICAgISEgHx8gICEhISEkJigtNUBRYGx2fX98eHRwbGtoaGhra2tra2pqaWViXllSS0Q/Ozk5OTk3Nzc3ODg5ODg4ODk7PD4/Pz4+OjY0MjIxLzExMC8yMTEzMjEzNDU3Nzs8PDw/QkJDR0dJSkxMTU9PUFJSVFNSVFRTU1NTUlJTU1JUUlBQT05OTEpLS0lJSUZDQj47Ojk9SVVjb3R1c3Nzc3R3d3l6d3RwZVxTUE5QU1xjbXF5goiPkZGTk5KRjIZ/fHh3d3dwZl1ZVlJRTU5WUUZHRkM7Oz9DR0hLTU9NT1FdQCMqLC0sLSwsLC0sLS0wPDxXY2BeUz06M0FacHt+eXh3d3Z2dXNqaHBwamVgXFxhWlxVRUA3SmNhYWpzd3Z2cGhbTUA8QkpXZG96gYKCgH99fX19fX18fn58enh2dHV0dnd3dXFqYFRHODArKCgnJyYnKCgwNkBJT1phZWdoaGhoaGpoaGZiYFxYVlZWWl1gZGZlZWRiX1lYWFxiaG90eHp+gICBgYKFh4qOjo6OjY2NjY6OkI6NioV+d21rbHF0eXt8e3p8fn5/gIGAfHVwZVhJPTQuLjU+Tl9vfYmLjYyMi4uLi4uKiYeGhHtxZltRT1FZYGlxdHRxcXFxcnNzdHR1d3d1dHJvbGdgWE5IRUo6Ojg4Nzc3NzU0NDIyMjAvLi4tLS0tLS0vMjQ3PUJHS1FSUlJTUlBPTk1OUFBQUVJPUExHREE9OTQwKykoJycnJiYmJiYmJiYmJiYmJSYmJiUlJSUlJSUlJSUjJCQkJCMjIyQkJSUnJSUlJSUlJSQjIiIhISAgICAfHx8fICAfHx8fHh4fHx4eHyAfHyAgISEhISEhICAhISEiJScpLjQ+SlpmcXuBgHx5d3R1c3NxcG9vcHBvb2pnZF5VTkhBPDs5OTk5ODg4ODk5ODk7Oz1CRklKTU5LSUNAODUzMjIzMzMzNDY3Ojs9PD9AREZGSUtQUFBSVVdXWVtaXWFhYWNkZ2ZmZWVoZ2VlZWVlZGRiYV9dXFtYVFFOTEpIR0RCPzw6ODU1PERSXmp0dnRzc3N0dnd4d3d0bWNaTUdBRUxVXmlvdn6HjJGRk5GRkY2Dfnp4dnd4c2tjXVhTTUpNUlFKRkREQUFDQ0dMT1FOTE5KXmlMKiYtLSwtLCwtLC0vMDc+YGtfX0s6OTZNYXF5fXl3d3d1dndwX1ZfaGllYVxhUz1FSD9LWGBZV1tmcnl4dW5lWEw/QEVOXGl0fIGCgIB/fX19fX19fH59fHp5dXRycnN1dHFvaF5SRTgwKygoJycmJyksMTlDS1NbY2doaGhoaGhpaWhoZmVhXVtbW1xfYWNlY2BdWVdUUldeZWtxdHh6fn9/gYGChYiMjpCPj42NjY2Ojo6NjYqGgHhwbW50eHp7fHt8fX5+foCBgH13cWdaSz00Ly8zP1JjcoCIi4yLjIuLi4uLiomHhoF6b2RbUU5TWWBqcXNzc3NycHJzdHV1dnd3d3dzcG1lXlVMRURQODg4ODc3NzY2NDMxMTExLy4tLS0sLCwsLC4wNTk/Q0dMUFFRUVFRUFBPUVNUVFZWU1VTU1BLR0E8NTItKSgnKCcnJSUmJiYmJignJyUmJiYlJSYmJiYlJSUlJSUlJSYmJCQlJiYmJicmJSUlJCQkJCMjIiIgICAgHx8fHx8fHx4fHx8fHx8fHx8fHx8fHyAgISEhICEhIiIiJCQmKy80O0RRYGpzfIF+fHp6enh2eHZ2dXJ0cnJuaWRdVU5GPzs6Ozs6Ojk5OTk6Ojo6PUFHUFRZXF9gXltVTUE2NTQ1NDk7PUBDRUZJTU1PU1ZWWlpcXl9iZWRnaGlrbm1vcnNzdHR1dnV2dnd3dnZ0dXR0cnBvb2xpZ2RfW1ZPS0dEQD04NzQzNDxHUF1pcnR0c3NzdHZ4dnl2dG5kVkxBOj5HUltlbnV+hYyPkZORkY+KhX96eHZ1d3ZvbGZeWFJWV1RRS0hEQkFDQkRESUxOVFNMTUpEbFw5Ky0tLSwvMi8vLzFAXHJtX1tDOTg+WGZdcHx6eHZ2dnV2b11dYl5gW1haVVtJXkZARF1WTVFibHF1cnNwZ1lLQkJIU19sdn+BgYF/fn19fX19fX1+fXt4dnVycXFyc3JwbWhdUUU4MispKCgmJygpLTQ8RU5XXmRoaWloaGlpaGpqaWdmY15cXF1fYGJjZGNdVVJPTlBXX2dtcnV5e35/f3+BgoWIjI2Pjo6Ojo6Ojo+Rj42Kh4J6cnFxdnp8e3p6e31/fn1/gH98eHBmWkw+NTIyOURWZ3aCioyMi42Mi4uLi4qJiIZ/eG5iWVFOU1tia3FycnFxcXFxcnJ0dnd2dnd3dXFvZV1USkVIVTg4ODc3NzY1MzQzMTEvMDAuLS0tLCwsLCsrLjI2OT5CR0hKSkxMTUxOUFBSU1NXWVpYWFhWU1BMR0I6NC8rKSgnJyYlJiYmJiYoJycnKCgoJycmJicnJiYmJiUlJiYmJiYmJycmJicnJyYlJSQkJCQkJCQiISAgIB8fHx8fHx8eHx8fHx8fHx8fHx8fHx8gICEhISAhIiIiIyUlKCsvMjc+SldibHV9f358fHx8enx6enl3d3V1c21nXVVORT89PDs7PDw7Ozs6OTs7QEVNVl5la25wcnFvamBRQzs6PUBDSElNUVRWWFpbXWNkZ2lrbW5wcnJxdHR1d3l6eXh7fH59fn5/f39/f35+fXx9fX18enp6eXd0cGpmX1hQSkI9OTQzNDg+RlJeanN1dXNzc3R3eHd4eHRtY1BAMjI4Qk5YYWp1fYaMkJGSkZCPi4V/fHh2dnd4eHVxamhhXlhTUFBLR0ZGR0VFREZISU9ZU0RCQkpgaDYpKy0tLC4uMTE7T2hoVldPOTk5SmBlU117e3l1dXV0b2heY19WV1VQT0xPYlxdXUVPUl9nc210cH11cWRXSkFDSlZjb3iAg4F/fn18fH19fX19e3t6eXZycXFxcXJycG1oXVFENzAsKSgoKScoKy42PklRWGBmaGlpaGhpaWhqamppaGZhXV1dX2FhX11ZVFFNSkxQV2BobXJ3ent+f39/f4KFh4uOkI6Ojo6Ojo6PkI6PjIiFfnV0dHh7e3x6ent9fn5+gIB/fnlyaFtNQTgzMztHWGh4g4qMjIuLiouLi4uLioiGf3huYldSUldfZmtxcnJvb3BxcXJydHZ3enp5eHd0cGlgVEtHSlw5OTk3NjU1MzMzMS8vLy4uLi4sKysrLCwrKysuLzM3OT1BQkVHR0hJS05OTlBQVVdYWVpaV1dWU1FJQz44NC4rKicnJyYmJicoKCgnKCgoKCcnJycnJycnJyklJSYnJycoKSgnJyYnJycnJSUkJCQkJSUkJCIhICAgIB8fHh4fHh4eHx8eHh8fICAfHx8fISEhISEhIiIhIiQmKCosLzI2PEJOV2RtdHh8e319fX1+fn19e3t5eHZzbGRbUklCPz4+Pjw8PTw8Oz0+QUdRVl9pc3p9g4SDf3txY1VIRUhLT1NYW19jaGhsbW5xcnN0dXd3eXx6e3t7fH5+f3+AgYGCg4OBgoOEhYSEhIKBgoGBgYKCg4GBgH16dW9pYlpRTEZAPD5BQ0lSXmhxdXV0c3NzdnZ4eXl4eXt7fF4vLT9JU15qdHyFj5KSkpCQjoqFgHx5d3h2eHl6eHhyaWNXVlFSTk1JS0hGSEVGR0lNVkxDQURCP1VLJCovLC8vMTxgU0tRUFxTTjk7O1FfamtldHp6dHN3cWViXlpSUFNRSkpGRFJTZGFaSk5PV2JqaWhfV2xiVUlDRU9aaHB7gYGAf359fHx8fHx8fHt6eXd0cG9ubnFycW9sZ11QQzcwKykoKCgnKSsxOEJKVFtiZ2lpaWhoaWlpamppaWdkX19fXl5fXllXUExJR0dLUVhianB1dnp8fX9/f3+Bg4iLjo+Ojo+Pj4+Oj5CQj42IhX94dXV4e3x8ent9fX1+f4CAfnx4cWheUUQ7NDQ+S11tfIeLjIuKiouLi4qKiYmIhoB4bWFXVFRbYWdtcXNzcG9wcXJzcnN1d3p8e3p3dW9oYVVMSVBiODg3NjU0NDIwMC8vLy8uLi0tLCsrKysrKioqKystLzE0ODg6PT1AQ0NFRkhKSlBTVVdZWltYWVhYUk1JQjs2Mi4rKCcnJycpKSkoKCkpKSkoKCcnJycnJycpJycnJygoKSkpKSgnKCgnJyYlJCQkJCUlIyMiISAgICAfHx4eHh4dHh4fHh4fHyAgHx8fHyEhISEhISIiISIlJygqKy4yNTpARU5YZGpxc3V5e359f39/f35+fHt5eXVsZFxUTUZDPj49PDw8PTw/RElPWGBrdoCGio6Rj42HfXFmWVNWXGBkZ2xvcXN0dnd3eXt7fH19f358fX19e3uAgIGBgIGAgoKAgoKCgoSDg4OCgYOCg4WFhYeGh4WDgn98eHRtZmBZVlJPTk5QVl9pcnR0dHNzc3R2dneBkZygnqOgeigzRVBdZ3V/h5CUk5GPj42JhoB8enl3d3h5e3p2a2lhUVJYWVJSTktJSkpJSk9RVFFRQTZEQTw7V1QsKDEyMTxPZ29XYl5ZVE03PEFTXmRxdXd4d3Z0dnJkWU9SW1NOTU1KS1FfW1paSlNfXl9cSVthUV5sYVZIR0pSXGh1fYOBf358fHx8fHx8fHx7enh1cm9tbm1wcHBuamZcT0M3MCspKCgoJykuNDxHTVVgZmhoaWhoaGlpaWpqaWhlYV1dXVxcWVZRTElFQkJGTFNaYmpwdXZ6fH1/f39/goSIi4+Pjo6NjY+PkJGRkI+NiISBfHl5ent8fHp7fX19fn+AgH58enNoX1JGPTY2P09gcH6Gi4yKioqLi4uKiomJiIZ/d2xgVlVWXmRqcHJzc3BvcHFxcnR1dXd6ent6eHZybGVbUU5aaTc3NjUzMzMxMTAvLy4uLS0tLSsrKyopKSoqKSkqKigrLS0vMTMyNTo7PEBBREVITE9SVFZYWVlZWlhWUk5HQTs1MS4sKSgqKioqKSgpKSgoKSgoKCgoJycoKCkpKSkpKSoqKykpKScoKCgnJiYmJSUmJiQkIyIiIiAgHx8fHx4eHR4eHx8fHx8fHx8fHx8fICEhIiIiIiQlJSYoKS0uMDQ2O0BIT1dfZmltcHN3e3t9f4CAgH59fn17dXBpY1pTTUdCP0A+PT4/QkhPWGBrdH6JkJSXlZWUjYZ8cmVhY2drcHR1d3p8fX18fH19gIB+fn19fX17ent7e3t9foB/gYGBgYKAgoKBgYGBgICBgYGCg4SGh4eEhoeFhIB8enZzb2xnZF9cXF9ma3N1dnVxc3JzdHeDmqOhoqWrrqhoLD5PWml1gIqRlZORkI6MiISAfHt5d3d4enp6d25rY09EVGBYWVFMTUtMUVJVVVBKQk9GRTw9OkJjWEpWRjBeeXNyblc+UVVROjtKWV9WaXZycHZ4dnZyaVVSV11USEpKSkxSVE1UW0xbVVZcVUBgZ15fbmJSR0hLVmFsdn6BgH58e3t5eXt7e3t8e3p3c3Bvbmxsb29vbmplW09BODArKikoKCgpLjY+SFFYYmdpamlpaWlpaWpsaWdpZGFeWllXWFVPSEVBPT5DSVBXXWZrcXR4en1+f39+f4KFh4yPj4+Oj5GOj5CRkZGRjYuJhX98fXx8e3t7e3x8fn5/gH99e3tyaF5TRz04OUJTZHOAiIuLioqLi4uLi4uKiomHfXZqX1ZSV19lbnJ1dHNwb3BxcnF2dXZ4e31+fnx6d3FqY1lYYnI3NzY2NDMzMTEwLy8uLi0tLS0rKysqKSkqKikpKSknKikpKSwrLS4xMDI1ODw9QENFSU1RVVZXWFtaW1lYU0xEPzo2MS4tLCsrKyopKyspKSkpKSkpKCgoKCgpKSoqKiopKSoqKiooKSgoJyYmJiUlJiYkJCQjIiIiIB8fHx8eHh0eHh8fHx8fHx8fHx8fHyAhISIiIiIkJSUmJystLjA0Njk8QEhOVVpgZGRobnBzeHp8fH59gIKAgHx6dG5oYVtVTUdFQ0BARElOVmBocHyGj5SXmJaWl5GKgXdta25yc3V3fH5+fn5+fX19fX19fHx8fHx8enp6e3t7fX5+f4KCgoKCgoKCgYGBgYCAgYGBgoODhIaEhYaHh4eEg4F/f316d3d0cG5tcnR3d3dzcG5ueISXoZ+foaissLGukjQ4SVppdYKMkpWTkZCOjIiEgn58eXh4eHp6e3t5cmJOQ1BTU15YUVFJTVVWV1FOPjxNSkM6Ojs6RGNeUmxjXHBpZoNaPFBbVD09QEZMQliOlHtveHh6eHJiVmNiUklNS0pKTVJUXl1bVlNKRFtoZ2ReYHNcUUtKS1hjbnl+gYB9fHt7eXl7e3t7fHp5dXJvbW1sbG9vb25qZVtPQDcwKyopKCgpKzE4QktUXGRoaWppaGlpaGhoaWdlYmBbWFhYU05JREI+Ojs/RExTWmFnbXN2eXt9fn5+fn+ChYiNj4+Pj4+Pjo+QkZGRkI6MiIaAfX19fXt7e3t8fH19f4B9fHp3cmlfVUpAOjtFV2Z2gYmLi4qKi4uLi4uLioqJhX91aV5WUltiaG9zdHRzcG9wcXFzdnV3ent9foB/fnl1bmhgYm15Nzc1NTQzMTIwLy4uLS0sLCwsKysrKyoqKikpKScnJygpKSkpKiopKSotLi4wMzU5Oj9DR01TVllbXV9fXVpWUEpDPzo2MzEsLCwrKiorKywrKysrKyoqKiopKywqLCwsKysqKisrKSkqKignJiYmJycnJSUkJCMjIiEgICAgHh4fHx4fHh4fHx8fHx8fHx8gISEhISIiIyUkJSgoLC8wNDc5Oj5AREpQUVRXXGNnaW5xdnh7fn+AgYODgX16dm9oYVhWUUtGR0tSWGFncHqEio+Tl5eXl5eSjIF4c3N2d3l6ent9fX59fn17fHx7e3x8enp6enp4eXp6en19fn6CgoGCgoKCgYCCgIB/gIGBgoKCgYGDgoGDhYSEhIaGhYeHhIKCgIB9fX19fn98eHN2hZein5+anaarrq+uq5pBNUdZZnSCjZSVlJGQjo2JhoN/fHx6d3h3ent8e3NpYFNTUlxoYldUTE5XWFRSSzg1SUM9Ozo3Oj5UaGZeRCxgVVVvVlJRWkk8PktVSDtWfXpaVGFiZmRfXVphc2lHR0pKSUxMVFhYUE1JTlFkY2BTUl9jbm1OSVBeaHN7gH9+fHt6enl6e3t7e3t5d3Nxbmxsa2xvb29tamRbUEI3MCsqKSopKS80PEVNV19laWtraGdnaGdnZmRkYmBbWVdSUEtGQz04NzY8QkhQVVtgaG90d3p7fX59fX5/goWJjpCQkJCOjY6PkJGRkZCOjYmGgn99fXx7e3p7fH1+fn59fXp5dnBpYFVNQjs9SltqeYWKjIyLi4uLi4uLi4uKiYR+dGddV1ldZmxzdHV0c29ucHFwc3Z1d3p8f3+CgoF9eXRuam52gDU1NDQzMjExLi4tLSwsKysrKyoqKiopKSkoKCgoKCgnJycnJygoKSkpKCkpKiwuMTI1OD5DSE9VV1xeYF5eXFpVT0lEQD03MzEvLSsrLCssLCwsLCsrKysrKywsLC0tLSwsLCwsLCsqKiopJycnJycnJyUlJCQjIyIhICAgIB4eHx8eHx4eHx8fHx8fHx8fICEhISEiIiIjJCUoKCosLzI1Nzo+QkREREVITFNZXmJmaW1vdnl6gIKFiYeEgnx5dnBpZGBaVlVXWmFobnmBiYuPk5aWlJSTkIeBeXd3eHh5d3p7e3p7e3l4eXl5eHh1dXR0cnJyc3R1dnZ3d3p6fX19fn9/f35+fnx8fn9/f39/fn+AgYGBgoKAgIKDhoeIiIiJiIaFhYWFhYeFg4CBk56gnZueoaaqqqimpZ6WVDFIWGd1g4ySlZSRkI+Mi4iDf3x8eHl5enx+fXx4cmRfVldhZGJbUlBTUFJWUEs3LjM4Ozs4OD5DTGJxa0RWdmtZVFptX1BAPj9RSkFAQjo5PD08PDw9PUdPUWVcQkVKS0tLSE9QVVNQUVJWV1A9TU9UVGFiV0pWYWt2foF/fnp6enp5e3t7e3t7eXdzcG1sbGtsb29wbmpkW01BNjArKyopKywyN0FKUllhZ2pra2ppZ2ZmZmRiYl5aVlNPTEdCPTc3MzM3PEJIUFdeZWtvdXl8fX1+fX1+f4KFiY6QkJCQjo2Oj5CRkZGQjo2JhoOBf318e3t6e31+fn5+fXx6eHVvaGFZUEU/QUxdbHuGi4yMi4uLi4uLi4uKi4mEfnRnXllZYWhvdnZ0c3BvbnBxcXJ2dXd6e36ChIWEgX15dXR4f4c1NTU0MjAwLy4tLSwtLCsrKiooKCgoKSknJycnKCgoJycnKCgnJygnJygpKSoqKiosLi81OkFGTlVYXF5gYV9eW1hST0pFQTw7ODAtLSsrLS0tLSwrKywsLCwtLi4uLS0tLS4uLCwrKikpKSgnJycnJyclJSQkJCQiIR8fICAfHx8fHyAgIB8fHx8gHx8fHyAhISIiIyMjJCQlJycpKy4xMzY5PT4+Pz9AREdMUVdcYGNnaW1wdXp+gYaHhoeEgH15dXJvaWVkZGZrcHiCiIqLjo+UlJORj4uFfXh0dXd1dnZ1dXZ1dXd0cnJvbWtqamhnZ2dlZmZkZmlrbG1wcXJzdHV1dXV0dXV0dHV2dnd4eXx9fn+BgoGBgoCBgYWFhoiHh4mJiYmKioyLjIuJk5+bmZugo6Skop2cmpaUkXMzRFhndYOPlJSTk5COjYyIg399eXp5eXl6fH19d3NpY11bZGRlY1hYWFlWVlNDNjIvNz08Ojc+S1N4eF1IUGhwamdYVVFRQEE/PDc+QkRGR0dGRUdGRk1URj9CQkNNUE5LS0pJSU9WV1lTRUVPNjhGVVVHQ1hNWGRteH+Af316eXl5eXt6e3t7enh2c29ta2trbG1vbmxoYllLPzQwLCssLC4xOEBHTlVcZGpsampoaGhnZmZjX15aVVFMSEI+OjQvMTM2OkBESlFZYGhtc3d6fX5+fnx+f3+Ch4mOj4+Pj4+Pj5CQkJGRkY+Ni4iEgX9+fXt7ent9fX5+fX16eXZybmdiWlBHQkVQYW99houLi4qKi4uLi4uLi4qIhX1yaF9aW2Nrc3d3dnNwbW5xcXFydHZ3d3l+g4eIh4WCgXx8gYiNMzM0MjExLy8uLCwrKywrKyoqKCgoKCgoJycnJygoJycnJycnJiYnJycpKSkqKioqKiosLjE5P0RMT1ZaXV9hYV9aWFhVUUtHQj43MzAuLi0uLi4tLCwtLS0tLi4uLi4uLi4uLi0tLSwrKysqJycnJycnJiYlJSQkIyIgICAgHx8fHx8gICAgICAgHyAgIB8gISEiIiMjIyQkJScnKSotMDM3Nzs8PDw8P0NHS1BWWV1dYGRmam1yd3uAhIiIiIeFgX19eHVzcXBydHyCiImKjY6Pk5OSj42Kgnp1cnFzcnFycW9vbGxnZWVlYWFeXVlYV1VVVldXV1pcYGFiZGhoaWlqampqaWhoamppaGlrbm9ydHd6fH5/gIKEhISDg4SFhoeIiIqLjY2Mjo6Ol5qYlJieoqGclIiAfI+SjY2CQUZYZ3WDjJKUk5COjoyKh4N/fnx8fHp6e3p9fXt2X2FeVl9eZGRaV1ZeX1FXQzkzMjk7Ozk3OEBIRTU9SUtDQWxvaVVHPjpDQT1HREI9PDs7ODg1OTlAVE5GQD9FSkpMS0lGSE5ZYltVTUZKVVdORUtKRVdOVVxlcXqAf357eXl5eXh5ent7e3p4dHFtbWtra2xvcG5saGJYSj80Ly8vMDI1OT1ESlNaYGdra2pqaWdmZmZlYV9aVlJLREE7NjAuLC8yNTxBRk1UXGNpbnN3en1+gICAf3+BhIiMj5CQj4+Pj4+QkJCRkZGPjYuGhYOAfXx6enp7fX1+fn19enl3dG9oZFxTSkVIUmNygYeNi4uKiouLi4uLjIuKioV9cmVdXGFobXV4d3VzcG9wcHBycXJ0dXZ5foOHiYmIhYKBg4iMjjIyMDAwMC4uLCsrKikpKioqKigoJycnJycnJycnKCgoKCgnJycnJicpKSkpKioqKioqKiotMDY6QEdOU1pcXFteX11cW1hWU01JQzkzMS4uLjAuLy8uLi8vLy8vLy8vLy8uLy8tLS0sKysrKikpKCgoKCYmJiYlJSQjISEhIR8fHh4fICAgICAhIR8hIB4gICEhIiMkJCQlJSUmKCkqKy4vMzY5PD09PUFFR0xQVFZYWFlYW19jaG91en+FioyKiIaDgYB9fHp5e32EiYmLi4yOkZGRkZGOh35zcXBtbWpqaGRjYFxbWlhUUlBPTUpISEdFQ0RISElLTVJSVlhaW15gYGBdXlxbXVxeX1xbW11dYWVqbnJ1eHt+gYKChIWFhYaGhoaHiYuHfYSNlZeVk5acoaKZiXx5e3B4jIyLiVxMWGh2hIyRk5KPjY2LiYeDf31xYm96enl8gH2CfmlbV1haXmRoWUhKTks9S0c3Qzo6Ozk1NjY5O0Q7Nz9HQU1TU3ZkUD88Q0NKSD9GOEpyfXdzblZUPU1qUEpDRkpIR0VGQ0RHT1hWT05LRkRHR0VXSVFZU1NfbHR7f319enl4eXl6enl7e3p5dnRxbmpqa2xsbnFvbWdhVUhANjQ1Nzk8QEVITFJWXmRpbGxra2hmZ2RkYmFcV1JMRTw3Mi0pKSouMjc8Q0hPWF9nanB1d3p9fn9/gH+AgoeLjpCRkI+Pj4+Pj5CQkZGQj4yKh4SCgH17fHx6fH5+fn5+fXp5d3NvaWRdVk1IS1ZmdYOIjI2Ni4uMjIuKioqLi4iFfHNmXl1jaXJ3eHd1cXBxcXBwcXJycnJzdnyChomKioiHh4iLjpAxMTAwMTEvLCopKiooKCkpKSkoKCcnJycnJycnJycnJyYmJycnJyYnKSkpKSkpKioqKioqKiotMjg/RUpOU1dZWl1fYGFgYF9ZU0xEOjIwMC4vLzAwLy8vMDAwMDAwMDAwLzAwLi4uLSwsLCspKScnKCgmJiYmJSUkIyEhISEfHx8fHyAgICAgISEgISEiIyMjIyQlJCQkJSUlJigrLCsuMDU3Ozw9QEBFSUpNT1NUVFVUVVVXW15mbXV9goeMi4qIhISFgoF/fn+EiIqKi4yMjY+QkZGRjod6cmtoZmRiXVtYVVNQS0hGQj8+PTs4Nzc2Nzg5PkFDRUhLTFBTVVdZV1dWVVZUU1JRUVBQT09PT1FUWFthZWpvdnp9f4GEhYWEhIWFhYWHgXB/jI+PlJmdnZuXi4F9fn58bnyKjItzTFlndoSLkJORj42Ni4mHhYKBaWFtY3qBhYeIjYJ3amJcVlRhXEZDSFFSSFJiXUw6Ojs2NTY1NjQ5RUA2WGhfVU5UWU9GOz88QEFFST00Y397bldkak1LTEhKSUtNSkZDQkJBQUhMTU1LRT0/QEBLUEVXWFxfYmx1fH99fXp4d3d4eXl6enp5eHp6cmtraGdra2xvb2tmYFVKQDo6Oz9CREhOUlZZXWJna21taWloaGZmZGBdWFNOSD41LywpKSkqLjI3PENIT1lgZWtzdXd6fn9/f4B/gYOHi46QkZCPj4+Pj4+Pj5GRj46LiIaEgoB/fXx8fH1+fn5+fn17eHZybWllX1hPTE5YaHaEioyMjIuLjIyLiouLi4uIhHtxZ2BhZ291enp3dXJxcXFwcHFycnJycnR5foSIioqJi4uLjZCPMjExLzAwLysrKysqKSgoKCgoJycnJycnJiYmJiYlJiYlJicnJycoKCkpKCgpKSoqKioqKikpKywuNDpARUlOU1hZXmBhYmJkZV5VTEE2MTAvLjAwMDAwMTIyMTEyMzMxMTExMS8vLy8uLi0sKysqKSkpKCgnJiYmJSQiIiEhHx8gIB8gICAhISEgICEjJigpKCcmJSMkJSUnJCYpKissLzI1OTw/QkVHSUtOTVBSVVVXV1ZXV1hfY2pveoKHjYyKh4WFhoaGhYSEhYiJioqMjIyNj5GSkY+HfHFmXl1aVVJOSUM/PTo5NTIxMjIzMDIyMjU5PT9CRkhKTVBTVVVXV1dXVlZXU1BPTktIRD8+Ojo+QkVKUVNZX2RpcHd9gIOHhoWDgn+DhIeKjouOkJecnJSQjIqEd3N/g3tyfHt7glpaZ3WDiY+SkI+OjYuKiISGi3dwcXJvi5SUkYx4a29oXVhmY11bRkdPWmNtZjtNRzo3ODY3ODY1OUJERVpgVE9ISUpAQD0/Qk5aY0g8Mld6bV1NUFhSTkpNTkpHRkxNRkFBOzs/REdJSUZJSkxKT08/WFhSYmhveH5+fXx5d3Z2d3d2eXh6d3ZvaG96gn5zbGpvcmppZ1xTTEhDRUdKT1JUV1lbYGZoamtsa2tqaGdmZGFfW1ZRSkE4LysoKCkoKCwzODtCTFNaYWdtcnd6e3+Af4B/gIGEhoqPkZCPj4+Pj4+PkJCQjo+Oi4iFg4F/f319e319fn5+fn18e3h1cW1qZmFZU01RXGx6hIuNjIqLi4uLjIuLjIuKiIF8cmZjZ2lzeXt6dnZzc3Bvb29wcXJyb25xdXp/hYiKioyMkJGRjzEvLy4tLSsqKyoqKigoJycnJyYmJiYmJiUmJiYmJSYmJSYnJycnKCgpKSoqKysqKioqKioqKissLCwwNTk/RUlNU1leYmRmaWlmXlRIPDMxMDEvMDExMTEyMjExMDIyMjExMTEwMC8vLi4tLCsrKikpKSgoJyYmJiUkIiIhIR8fICAfICAgISEgICIkJywvMDAvLSsnJiUkJiYnKCorLzM1OT1AQ0ZJS09QUFFSUlRWWFpcXV1eYWVqcniAhoyOjIeFhYaIiIiHh4eHiIqKioqLjZGUk5OQiXxsXFFOTEY/Ozk1MzEuLzAuLi4uLS8yMzM2PD5CRUhLTVBSVFdXV1dYWFdWVFNSTkpGRD46NDEvLi4yOD1CSU9VW2BnbnZ6fn2AenZ5goqNkJCRmZuZlZGOkI6OjYl7bnNtbHmAjpuWdn52gI2OgnqDi42NjY2Rk490cH1/cHiQkpSCY2FnamNVXFtcUFBPSVpkWDkcTUs9ODg3ODs3Nj0/R2NUTjc8Njg9RkRBQUNLV11DRjxhXGJlW0A/SkROWlZQSEZGSEM9Pjs4PUFHSUlKTExOT1FYWlhZWFplcHl9fXx7eHd1dnR5eHNzdnBmSkxbcIaZf2BYXFNHS1teWVFMSEpMUVZYWlteY2ZrbW5tbmxqaWhnZWNiYFxUTUc9NC0qKCgpKCgsMjc9RUxTW2FobnR4eXx/gIB/f4CBhIaKj5GQj4+Pj4+Pj5CQkI6PjouIhYOBf3x7enp9fX5+fn59fXt4c29saWZhW1VSVV9tfYeLjY6Oi4uLi4yLi4yLioiBe3NpZmltdHp7end1c3NycG9vcHFwcG5rbXF2e4GGiIqMjpGRkY8wLy4uLS0rKSopKCgpKCcmJiYmJiUlJSUmJiYmJiYlJSYmJycoKCkpKSkpKSoqKioqKioqKyssLC0tLS4wNjxBRkxRWF5kZ2xta2VbTkI3MTEyMjIxMjIyMzMzMzMyMjIyMjIyMTAvLi0tLS0tLSsqKiooKCcmJiYlJCQiISAgICAgHyAhICEgHyImKy80PD4+Pjk2MCwpKCcpKSkqLjE2OT1CRkdKTE9QUlRUVFRWWlxgZGVlZWZpcXV7gIWMjY2Jh4WGiYqJiYiIh4iHhoiIioyPkpOSjIh6aFJFQT05NzMxMDAwLi4vLS0tLS4uMDQ4PD9CRklKTE9SUlZYWFpaWlpYWFdTU01LRkI7NjAtLS0rKywwMTc7QUhSWWBmbXB2dX+MkI+Sk5Wan52ZhG2RiZKSkZKQjYOhtLy9vr6+u7CekX15gYeBcXSCh4h6WXuDa3qLgm1jdXh3alxmamtoZWJgUlRVS0VPYlwrKD0+PDs5O0BFPDk4OkZDQEc/Ojk4N0xAQUNFSlVTRklfXVNaZVJSWDlCaHJoVUlGREFCQj86NztAQ0dISUtNUFJSVVhbW1hgZm96fn18end2d3V1eXRfYHdoYmtybm5hYEpHRklOTkVZYlxVUFBRVllbXWBkZWltb3BvbWtpamhoZ2VlYF1aVExEOzEqKSkpKCkpLTQ5P0ZOVVxjanB1d3t9f39+gYCAgISIjZCSkJCQkI+PkJCQkI6Ni4uLiIWDgH57eXl6fX19fn5+fXt5dnNwbGllYVxXVVhicH6IjI2LiouLi4uLi4yMjIuHgHtzbGttcnd7fHp4dHNzb29ubnBxcW5raGhscHZ+hIiIjZCRkpCPLy4uLi0rKikoKSgnKCgmJiYmJSUlJSUlJSUlJSUlJSUlJicnKCgpKSkpKSkqKioqKioqKisrLCwsLCwtLC4yOT5DS1FZYGhtcnFrY1VIOjMyMjIyMjIzMzQ0NDQ0MzMzMzMzMzIxLy4uLi4uLS0rKioqKCgnJiYmJSQiISEgICAgIB8gHyAgIiUqLzM5QEdLS0tHQz43MCspKiwtLzE1Nz1BRkpMT09SVFVWVlhYXGBlaGxtbm5ucHJ4fYGGi4yMiIaFhoiJioqKiYeHhoSGhoiLjpGUkIyHe2lRRDw3NzM1My8vLi4uLi0tLS0wMDM2Oj5CREhKTlFRUlZXWFlZWlpaWFdVVVJOSkZAOTUxLSwsLCsrLCwtMDU7RExUW2JldY6Ul5KUlZmen5h5a29tjpCSkZKSkqG2u7m7vb29vLu7tJaHg4h/dnBpaGprX11gdnd5e2tVVnKDblVaam1qbGxgXVRRVE5KU3Z1PDQxMzs8PDpAS0c4NDc/RkRMRTs8OTtKPEFDRUlVS0g9TWllWlZKVk87bm5uaVhMRUA+PT5BPDg6PEBDREdJSktMTlFWW1tYXWdxdXx9eHh0c3Z2bVVzbWxkXV5pbmZeQ0ROUFFKREhdbGVgWlVUV1pcXmFkZmlsb3Fxb21raWpoaGdlZWBbWFFKQjkwKSgpKSkqLDA4O0FJT1deZWpwdnh7fX9/f4CAf4KFioyQkpCQkJCPj5CQjo6MjIuLiYaDgX99e3l6e3t7fH19fXp5dnNxbmpnZGBcV1ddZXN/io2Ni4uLi4uLi4uMjIyLh4B7c3BucXV5fX17d3Nzc3Bvbm5ubm5raWhpam1xeoCFiI2QkZKQjy0tLCwrKygnKCcnJyYmJiUlJSUlJSUlJSUlJSUmJiYmJiYnJygoKSkpKSoqKioqKioqKiosKywsLS0uLi0tLjI3Oj9KUl1obXFzb2RYSz00MjIyMjEyMzQ0NDQ0MzMzMzQ0MzIxMjMxMS8wMC4uLCwrKykpKCcnJyYlJSMiISEhICAfICEiIyQoLzU9R01SVllbVlJKQzw2MC4vMDQ0OT1DRkpMT1JSVVVXWlpbXGBiZm1ydHNxcXN1eX6ChYqLiYaFhYaJi4uLioeFhIOBgYKGiYyQkpKOi4BvXVJMRDw4NDU0MS0tLy8tLS0uMjI2OD5CRUlKTE9QU1NWV1lZWltaWllXVVRQTEhCPTYxLisrLCwsLCwsLTE0OD9JTlRZbZGZlpaMjp2alJF9XTVjhYSJkJGUlJ+4vry7v7++vby+trO6pISIhomBfF9SZ2NzcGd3ent6bFdcZFhMW2NmYl1hZ1dIR05NTFptaEo6OUlEPjw4REE5NjczRVlTQTM5PDxJTUJERUNKVkVEOU13cGsyQkBBdXluZ2BSTkY/Pz0+Pjw7Oj5CRENERkdGSEpQU1dZW11ncXd4enl2dHNscm5tb3JmRzZAZGFIS0tMTEhGTFxrcGtoY11ZV1laX2FjaGlrb3BxcG5samhoaGdmZGNgWldPRz81LSknJycrLDA0OkFES1JaXmVtcnZ5e31/f39+f3+DhomMj5GQkJCQj4+Oj46OjIyLiYeFgoB+fHp5eHl7e3t8fX15dnNwbGloZmNgXFtZXmd1gYmMjY2Li4uLi4uLjIyLioeBe3VxcnV5e359enh0c3JwcG9vb29wbWpnZmZscHd9goiMj5GSj40tLSwsKyknJycnJiYmJSQkJCQkJCQkJCQkJCQkJSUmJiYmJycoKCkpKSkqKioqKioqKiwsLCwtLS0tLi4vMS8uMjQ7RExYYmpzdnFpWUw9NTMzMjMyMzQ0NDQ1NTY2NjY0NDQzMjMzMzEvMDAwLi0tLCwpKSkpKCcmJSUjIiEhISAgHyAhIiQoLTU+SFJXXmRlZ2ZhWVFHQTs1NDU3Oj9DR0pMTlFUVllZWltbXGBlam5ydnZ2dHR2eXl+goaIiIiEhIWGh4mKioeFgX56eXl6f4OKj5KRj42FeWxjXFdQSUQ6NzEuLy4uLS0tMDE2ODpAREhJTU5PUFNTVldZWVtbWlpYWFVSUEpFPzk0Ly0sLCssKywtLjAzNjxCSE5UVIWemZqdfmt5bl1weIqVmJWKe1xdhJW2vb69vL2+v765pmxzs7iwhpidoXdJWmh1gYF6fHt7e3NjUldiT1FRX1FBQUtYXlFOTElPTFFYPjhGRUE8NUNPUTk4NzxJYEpMUE5VT0NEQlJMSlRCRjxWeGtEPjw8cXl3cWVmWEhGRkRCQD06OTs9QENERkdISUpNUVJWWFdXaHV4d3t5eXZzbmBkbWpvamlfWV9PSktLSERTZWtsbm5ta2ZhXFpdXmJiZWdsbW1vb29ta2poaGhmZWNiXllVTUU9NCwpJycnKy8zODtCRUxUWmBobXJ2eXt9f39/foCAgoWKjY+RkJCOjo+Pjo2NjYyMi4mHhYKAfnx6eXh5e3t7e3l5d3Ryb2pnZ2VjYFxbWmFrdoGJjYyMjIuLi4uLi4uLi4qHgXt1cXR3e31/fXp2dXNycHBvb29vcG1qZ2ZmaW51e3+FjI+RkI2MLCwsKyooJycmJiYlJSUkJCQkJCQkJCQkJCQkJCQkJCQmJicnKCgpKSkpKioqKioqKystLS0tLS0tLS4uMTMxMTIzOD5HVGBqc3RxaltNPDU0NDMzMjQ1NTQ0NjY2NjQ0NTU1NDM0MzMxLzAxMS8uLS0tKikqKikpJyYkIiIiIiIgIB4fISMmKzM7R1BYYWhub3FxbGddVExGPzw6PUFESEpLUFFTVlhcW1xcXGBjaG5ydXZ2dnV2dnh7foKEh4eGhISGhISFhIKCfnl2dnNsb3V8h4ySkpCOioF3cW1pYVtWT0g/OTMvLS4tLzAzOD1AQkZJSkxOUFFTVFZXWVpbW1pYVlVUUk1JQjw3Mi8tLC0tLS0uLzAyOD1ARktPVHGcnJ2gpJNyWWdodYB3j5SMiYp2dm+du76+vrKwvL6/vbiTdqe6r4V/nZiDUTxIXm92fnh0d3pvVEFzZ1pZXF5IPT87PE1hUE1OTUtCS09EQEBBPThCSUQ4OTY4OT42T1ZPQEtDRkNeWUxRQUU6bnlNMD1CcHJ3eHRlaF5KR0dEQ0A6Nzg6PD5BQ0VGSEhKUFVVVVhRWG12enh4c0hac3BnWmFmZXFvX1RMSk5OTE9mbGtsbG1ubmtoZF9cXV1fYGNjZ2lpa21ra2pqaGdmZWRjYF1YUktDOjEsKScmKCwwNDs+QkdNVl5iaHB0d3p8fX5+fn1+f4OGipCRkI+Pjo6Ojo2NjY2Li4qIh4WBf317eXd4eXt7e3p5eHVybmpnZWZkY2BeXFxkbnmDio2Mi4uLi4uLi4uLi4uKh4F7dXN1eXx9fn15d3R0c3Bwb29wb29saWZjZWludHh+hIyQkY+NiysrKiopJycnJCUlJSQkJCMjIyMjIyMjIyQkJCQkJCQkJiYnJygoKSkpKSoqKiorKywsLS0tLS0tLS4uLjEzMTEyMzg+R1RganJ1c2laSj00MzQzMzM1NjY1NTY2NjY1NTU1NTQzNDMzMjExMDEwLi0tLSwrKyopKScmJSMjIyIiHx8eHyEjKC01QElUXmZvdXl6eHJsZl9VUU1HRUdKSUpOT1BUVVhbXl1fX19hZWtub3R2dnVzc3R1eXyAgoSFhIaGg4B+fn57d3NwbGdjXmFncX+HjpKRj4yIfnh4dXFua2ReVkxAOTEuLzE1ODw/QkRISktNTlFSU1RWV1hZWlpYVlVUUk5JRD85My8uLS0tLCwtLjE0ODo/REhLUF+WnJyhoqOah3uBiY6OeG1geXV7YWh8o7m+vbqemay3vb29rImTsKWHfJiKaU9UT256b1leZGxtbGVqgGVdWFRMPzo5PkVJVFJNS0tLVE1LRUFCPz48Q0U/PTs6O0E6O0tMSUFARUZKV1hQSkNCPnpWMTI/Yl9mdnZza15ZUUZGRkNCPjs5ODs9PkJER0hLTE9XXVtZWWRtdnl3dXE7UXNkPltva3Z3TkNTT0pFUWJpaGdqamxub29tZ2NfXFxcXF5cXF5hZGZoampqaWdnZmVjYmBcV1BJQTgwKygnKCsuMzg8P0FHTlZdZGtwdHd6fH1+fn59fn+ChYuPkY+Pj46Ojo6NjY2NjIyKiISCgX98enh3eHl7e3p5eHdyb2xoZmRlY2NgYF5faHB7hYqNjIuLi4uLi4uLi4uLioeBfHZ0dXt8fn17eXV0c3JwcG9vcG9ua2dmY2VpbnB3foSMkJGPjIopJykpJyYlJSUlJSUkJCMjIiIiIiMjIyMjIyMjJCQkJCYmJicoKCkpKSkpKisrLCwrKy0tLS0uLi4uLi4xNDEvMjM4PkdVX2p0eXJoW0g7MzMzNTY1NTY2NjY2NjY2NjY2NjY2NTU1NTQ0MzIxMTAuLC4tLCsqKyonJiUkIyMiISEfISEjJSoxOEJNV2Bocnl9e3lzb2ljXlpXVFNOTlBUU1NSVFdZW19gYGFhY2Zpa29ycnRzcnJydHZ5fX6ChISDgX9+e3h0cGxnY19YUU9SWWVxfIaOj46NiYB8fXx8eXh0bmliWU5COzY1Oj1AQERHSkxMTU5PUFJUVldYWlhWV1NST01JRD46NjMwLi4vLy4uMTM1ODw/Q0VLUlJ7nZqaop6ai2lqjaWYiIWEaFpUXmZ8n7adq7u8sZulr6SgsqOGfZWgmIafkn1eXnRxX1lMS1NoaV1pbmlxXlhSOjo7PT84SlBPRkxGRVNLRURISkxTQjg8Pzs6Oz1QTVNIR1BMQURAYV1SUUFEQEpoMjc7TVpdZ3R1cGpfVU5KRkJDQ0I+PDw+QEJFRklKT1BSVVteWVxibnZ4d3R0cXVzZFFkb3ZtSz9HS0pHV2xqaWhpa2xrbm5tamhiXlxaWldUUlNVWVxfZmhqamlnZ2ZlY2FeXFdORz81LigmJiosMDU5PEBESE9WX2ZtcXV6fHt8fX18fH5/g4aLkJGQjo6NjYyMjY2Ojo2MioeFg4F/e3l5eHh5eXl4eHZzcG1oZWJjZWNkYWBhZWx0gImMjIuKiouLi4uLi4qKiYeFgnt2d3h6fYJ/e3l2c3Jxb29vb3BvbGtnZWJkZ2xwdn2FipCRj4uJKikoKCcmJSUlJSUlJCMhISIiIiIiIyMjIyIiIiMjJCQmJiYnJygpKSkqKSorKywsKystLS0tLi4uLi4uLzMyMTIzOD5GU15pdHhzaFtKOzU0NDU2NTU2NjY2NjY2NjY2NjY2NjU1NTU0NDMyMTEwMTEwLSsrKiooJyYmJSQkIiEhISMjJCcqMTlDTVdianJ2eXh2cHFsaGVkXlxbWVdaXFpaWVtcX2FlZmZmZmhpamxwcXJzcnJxcXF0eX2BgYCAfn15dnJtaGRfW1lUR0FCRE1ZZ3aEjY+Oi4R9e31/f35+fXp2c2tkWU5DPz9AQ0RGSUtMTE1OT1BRVFZXWVhVUlNOTU1JRD86ODQyLy8vLy8xMjU4Oj5AQ0ZISk5elZqanp+XjHdXXImkp5aEdGJZYWRJWo++roadsrWprp1ucYuhmn1ljZmKmYtnYWdmXWNkWVRXZlxUZWlpY1xiUjs8PkQ9PEZSTkpSUUNJTk9RTU5SWkU8PkU9ODs6SFtmTEtQQ0NCR2BSVVhBRj1XPT5DR1BYS05xdXBnX1dOSkNBQ0NAPTw+QEFDRk1MTlZZV1paW11gaHJ4eXZ1cG9xcG5ucnlmSkJKSkNBSmJlZmhoaGhrbG1sa2llX1tZWFRPTUpMS1BZX2NnaWppZ2ZlZGJhXVpVTkc+NCsnJigrLjA1OT5ARUtSWGJnbnN3enx7fH19fHx+gISHjI+RkI6OjY2MjI2Njo6NjIqHhIKAfnt5eHd3eHh4eXl2c3BqZmJgYWRkZGFhYmdveIOJjIuLi4uLi4uLi4uKiomHhYB4dnV3e3+Bfnp3dXNycW9vb29wb2xrZmNiZGZrcHZ9hYyRkI2LiSkoJyclJCQkIyMiIiIiISEiIiIiIiIjIyIhISEhIiQkJiYmJycoKSkpKisrKyssLC0tLS0uLi4uLS0tLS8xMzMxMjg+SFReanV4cmhdTD01NjY2NTU3NjY2NjY2NjY2NjY2NjY2NjY2NTQ0NDIyMTAwMC8uLCsqKScmJyYlJCMiIiIiIiMmKzI6Q01XYGdub3Bvb21sampqaGdjYmBeXl9fYV9jZWZobGtqaWlqamxucXRzcnFvbnBxdnp+gH98enh2cWtlX1tXUk5KR0A+QEJGUGBxgYyOjYmBenV5e36BgYGAfn15dW9lWVBJSEdHR0pKSkpMTk5OUVNVVlZTUU5NSklHREA6NjQ0MDAxMjM1Nzo8PkBCRUdJSlBThJ6YnJ+YkoF2WVF4j5aYfndmh41fKCB9vbuphH2XrK6dd1tlgZiJPlqToJh6VVlcXXR3bV9cXVpTVm1oZ2hWSEU5PU1TRkA+VGRcYHVbRkxOTkdDVUE9QD1DQTc3OURXUz81Q0JEQztAT1xPPkQ/OzlASk1VU0xZam5xalpPTUhCQEJCPzw6PUFBQ0ZTVVNdYmJhYF9eYmpzeHh3c3BycGtIVHh2RkZNTkZMZ2pmZGZlZWdpamtra2xmYFxWVVFPR0NAQ0ROVl1kaGlpaGdmY2RjYV1aVU1FPDMsKCcpKy8yNTo/QUZMUltkaXB1eHt7fHx8fHt9fYGEiI2Pj46OjYuLjIyNjY6OjYyKh4OAfn17eXd4d3h4eHd2dHFsaGNfXl5jZGNiYWVqcXmCioyNjIuLi4uLi4yMi4qJhoN/eHN1d3t9fXx4dXRycnFubm9vcXBsamdjYmVnbHN4f4aMkY+Mi4koJiYmJSQkJCIiIiIiIiEhIiIiIiIiIiIiISEhISIkJCYmJicnKCkpKiorKysrLCwtLS4uLi4uLi0tLS0uMDIyMTI4PkRPW2VwdnRrYVBANzc3NjU1NTY2NjY2NjY2NjY2NjY2NjY2NjU0NDQyMjMyMDAvLiwrKiknJicmJSQjIiIiIiIjJisyO0FLVVxjZWRkY2FjZmlqampoZ2VjZGNlZmZoa2xtb3BubW1tbm5ucXN0c3JycHBxdnp8enp6d3Vwa2ZdV1FKSEREQUA+Pj0+QkpabH2JjIuGfHJna3F2e35/goKDgH17dGxlW1NOS0lJSUpKTU1OTlBSU1JPS0tJRkZEQ0A7ODYzMzIyNTc5Ozw+QUNERkpMTVFRZJ2fnKCckYOChWNRZoSDhoODgZ+bWiojeLy7tKWCXXycm4hiVmuOjXtscJakZkNcX2N6kpJ2bWRiXGhhVlxYPTk/REtXWUQ5QkJjXFdiWUtGQ0A6TFQzOD5JSjw0MzU+RkpIREFHQEU3QEdUPUA8PTpIXVhbXT9FT01eXl9aTz8/QEFCQkJAPT5BQUNGVFlXX2NlY2JhYmdsdHh3dHNsYFxybGZfVE1DTFtkc21oZWRjYmNlaGpra2toY11ZUk9KQzo3NjxETVZdZmhpaWhmZmNjYmBcWFNLQjgwLCgnKSsvMjU6P0JHTFJdZmxydXh7e3x8e3t7fX2BhIiNj4+Ojo2Li4yMjY2Ojo2MiYaDgH98enh2dnZ3eHh2dHRva2VgXl1dYGNiYmNmbXN7hIqNi4uLi4uLi4uLi4uKiYaCfnhzdXd7fX18eHVycXFwbm5vb3BvbGpmZGVlaW9yeoKJj5KPjIuJJiUmJiQkJCQkIyEhICAhISEhISEhISIiIiIjIyIhJCQnJyYnJygpKisrLCwtLS0tLS0uLi4uLS0uLi4uMC8wMTAxNjxETFhmbnN0bWJTSD02NTY2NTU3Nzg2NjY2NjY2NjY2Njc3Nzc1NTQ0NDQyMTExLy8tLCsqKCcnJiUlIyIiIiEiJSYrMjlBSFBVW1xYVFJWXGFmamxraWdnZmhoaGxsbG5wcnJycG9vcHBydHR3eHRycnNyc3h5eXZ2c29qZV9ZUkxEQD9AQD89PT07PUFIVmd5h4qHg3doWFphaXB3e4CDgoKEgoB7dW9mXFVRTkpJSkxMTk5PUFBOSEZEQkVEQkE+Ozc1NTc4Nzk8Pj9CREZIS0xNT1BRVIOjn6KfmYlwiIt1UFd8gXt2c3ugl0AqI2i6ubaypoVgZHaDg2lgfYd9cGOEi09EZnKOiI2Sin18Y2FjU1JYXFIzPktTXmtGLzA1TVNNUUpJRkRERFc7ODg9QDczMjU0OEREOz4/QkFTQEFGQD1CSlJIVmdRUVdARkAwT09NUEA7P0RGSEI/Pj9AQkJESFFZWl9mZ2RkZWZpbnV5eHVxcGNdamdKSFNOTVllc25pZWNjYmNjZWVpaWhnZF9aUkxHQDkyMTU6Q0xWXWRmaGhmZWVkY2FeW1hRSUI3LyooJyksMDQ2PEJDSE9XX2htcnd5enx8fHt7e3t9f4WKjY6NjI2Oi4uNjY6OjY2Mi4eEgH59fHl3dnd2d3d3dnVybWljXVlcW19hY2NkaHB4foiMjYuKi4uLi4uLioqKioeEgHl0cnN3e3x8e3h1cnBwbm5ubm9ubWxqaGdlZmlucX2GjZCQj4yLiiYlJCQjIyMhISAhISAgISEgICEhISEhISEhIiIjIyQkJycnJygpKSorKywsLS0tLS0tLi4uLi0tLi4uLi8vLzAwMDQ6QEtXYmpxcm9mWU5EPDc4NjU1NTU1NTY2NTU1NTU1NTU2NjY2NTU1NDQ0MzExMS8sLCsqKSgnJyYlJSQjIiIhIiMlKDA2PkNLUVNTT0pJT1RaYWVnaGdoaGdpamptbnBxcXFycnFxcXV1d3t7e3p3dHR1dnZ3dXRyb2xnYVtTS0RAPj4/Pj0+PDw7PD1BR1JjeIaKh4J1Y09KT1hia3J6f4GFhoeFg4B5dm9kW1NPS0tMTE1NTU1IRkNBQEFCQ0JBPTs8Ojk7PkFBQkNERkhKTE5PU1VRU2OaoZ2el5FxWX6HdF5NZH17dnF1kIIyKipNtbSxsKudiHJpam1vaHV8bWR0dmI+PliDoZmWlYyBdWZbVUtNWF9eR0tCRlpVRDMyOT41Ok5JSUM+O0ZTOjU4OTxGOzIyMjhATkY9PzdOWVFZSzlCQ1FBSFZVT1JON0AyMElLWUA2Oj5DRklGQT8/QUFDR0hVXFlaY2hjZWFnbXJ7d3NqXmdnXl5SR0Y6OktTX3JtaWVjYmFkZGRoZ2dnZmBdVU1EPTUtLC4zPEZOWF9kZmdmZWVjYWBgXltUT0g/Ny8qKCcpLDA2OTs/Q0hPWWFpb3V3eXp8fHx7e3t7foGFio2OjYyMjIuLjY2NjY2NjImFgn99fXp5d3V2d3h3d3V0cWxmYVtYV1pfYWJjZmxxeYKKjY2MiouLi4uLi4qKioqHhH52cXBydXh6fHl3dHJwcG5ubm5ubWtqamhnZWVobXF9ho2QkI2LiokmJCQkIyMjISAgICEgICAfHx8gICAgICAhISEiJCQlJScnKCkpKSkqKyssLC0tLi4uLi4uLS4vLy8vLi4uLi8vMDAyNzxGUVxma3BwaWJXTUM8OTc1NTYzNDU1NTU1NTU0NDQ0NTU0NjY2NTMzMjMzMTEvLSsrKigoKCcnJSUkJCIiIiMjJSkuMzo+REhLS0hHRklPVlteYGFkY2VnaWpqa21vcHFxc3JzdHZ3eHp7e3x8eXd2dnRycHBvbGllXlZMRD9APz0+PT09PTs7Ozs8P0ZQYXOCiYeCd2RNO0BFTlljbXh/hIiHiIeFgX55dWtfVlBNTE1MTUxGQz87Ojo9QUNDQ0NDQ0NERENERERHSktMTk9RT1FSVVVwo6GcmZSDSkxuj4NsUE9xeHd3cIJwMzEwNaOup6ikioB4amBUWVdmamNtbGhTOD9Ug6Wgk5eSkpR0STxeb2JbVE5MRkNDS1JEM0BEOTo6OD5HNDNCS0s/M0E+PzcxMzA1OURDPjxQZWBpXzs9PEFOUUlFT0hNTTs8Rj1DQD84MTc/QUBAQUFAQEFBSElKTU1MUmBoZ2ZaX3BlZGNUS0RFSkVPT0pAQk5DSWR1bWdkYWJkZGNlZmhoZmNeWFBGPDMrKSkvNT5JUVlgZWdnZWRkY2JgX1xYVVBHPjQtKSgoKiwwNTg6PUJJUlpianB2dnh5e3t8e3p6e31/homMjY2Mi4uMi4uMjIyNjYuIhIF/fXx6d3V0dXZ2dnV0cm9qZV9aVVdZXWBhZGhwdHqEjY+OjIyMjIyMioqLi4qJh4N9dHBwcHR2eHp4dXJxcW9ubm5tbW5sa2tpaWZnaG1zfoeNj46Mi4mJJCEjIyIhIB8gICAgICAgHx8fHx8fHyAgISIhIiQkJSUnJygpKSkpKisrLCwtLS4uLi4uLi0uLy8vLy4uLi4vLy8vMDI5QUtXYGVrcG5oYFVMRj47Ojg2NjQ0NDQ1NTU1NDQ0NDU1NDY2NjY1MzIzMzIxLy0sLCsqKCgoKCYlJSQiIiIjIyUmKzAzOT5AQ0JCQ0dJTlNXWVhbXFxdX2FhZGdpa21wcXRzdHV4eXl8fHx8fHl6eHVxbmxpZmNfWFBHQj8+Pj09Pjw9PDw6Ojk6Oz1DTV5wgIiJhnxqUzcxNT1IT15qdX2Eh4aHh4WCfnt2cGlbU09NTEtIQj87Ozs+QUVGR0dJSUpKSkpKSkpKTE1OT1FSUlJSU1dWdqOem5WMbjpJY4mIeFhOWXJ4eniEYDg1NC56pJ+ipJaJfm1kWE5CP0RdamhjSjxFUX6fnpiZop+UY0NOfH12bWRgU0pQWVhaUEc8OkZHOjs9RUE/QURVUEJBNzA1PTYsMDM2Oj9VYllWTjw7PUReWEhERkhRXVdMSk1LTUA+QDs8Pz46Oz5AQUA+Pz9DRkdISVRhaGtcRk5OYGtaT1RdVDQvQEhDQUZHR1RycmxoZWRkZWNjZGVpaGVgW1VLQDUtKCkpLzY+SVFbYmZoZ2VkY2JiYV9cWFRPRT0zLSkoKCosMDU4Oj1BSlNbYmpwdnZ4eXt7fHt6ent+gYaJjI2MjIuLiYmKi4yMjI2LiISBfnx7eXh2dHV2dnh3dnRuaWNcWFRUWFxgYWVqcXh+iI2Pjo2MjIyLi4uLi4uKiYWAeW9sbG5wdnd6eHVycW9ubm5ubW1tbW1rampqaGpvdoCKjo+OjIqJiSIhISEgICEgIB8eHx8fHh4fHx4eHh8hISEiISIiIyUlJycoKSkpKSorKywsLS0uLi8vLi4uLi4uMDAuLi4uLi4sLy8xNTtETlljaG9wa2ReVU5HQ0A9Ojg1MzMxNDQ0NDQ0NDQ1NTY2NjY2NTQ0MzMyLy8tLCsrKSgpJycmJiYkJCMjIiIkJictMTU7Ojw7PT9DRUpPUVRTU1FRUlRZXWBhZGdqbXBycnV3eXt9f4CAgH57eHRxbWlkYF9ZUkxFPjw8PDw8PDw7Ojo5OTk5OTk7PklZbX6IioaAcVw+KisvNz9LVmRudn2DhoeHhYSCf3lyaV1TTEtHREI9PDs+Q0dISk1OTlBSU1RTUE9PT09PUFFSU1JTVVZWVnyjnpiQi2o2VWF7jH1kUkxmdX2CiVY5Nzg4SZSYnqOUhX13bGBVTEZJXGNcWkdBRkpymZWSlJ6ekHpac4l5bGlcWlZdbHF5dmpiW1RVVlVVXGhQQz87Rk5JOzAxOUc3LS0vNDhLZmBVUlA9PkNKQT0+Sk1GRE1OST5BTFZWVlNXRjo9QT06PkFBQ0VHRUFNUlFeU09ZXElFUlpaZFlbVEM6PjlFRzwwPFJwd3Jvb2lobmNqaGJiZmVlYVtTSDwxKCgnKi82P0pTW2NlZmdmZGJhYWBfXllSTUQ7MiwqKikrLTE1Nzg8QElTXGRscXZ2eHp6e3t7enl6gIKHi4yMi4uJiYmJioqLi4uLioeDgH17eHh2dXZ2dnZ1dXNxbWhfWlZSU1dbX2JnbXV7gYmNjo2MjIyMi4uLi4uMioiDfXRuaWlscHV3eXZ1cnFvbm1tbWxubm5tbWxra2lpb3iDjI6OjoyJiooiISEhICAgHx4eHh4fHx4eHh4eHh0eICEhIiEiIyMlJScoKCkpKSkqKyssLC0uLi4vLy8uLi4uLi8vLi4uLi4uLC0uLjE1PUhRW2RobW1oZFxYUUxHRT88OTYzMzQ0NDQ0NDQ0NTU2NjY2NTQ0NDMzMTEvLSwrKykpKCcnJiYmJSQjIyMhIiUkKC0yNDM1Nzg6PkNITE1NS0tMTE1PUVdbYWRnam1wcnJ4eXp8f4GEgn57eHNva2ZeWldTTUY/Ojo7Ozs7Ozs6Ojk5ODg3Nzc3Oj1EUmV5hYmGgnloTDAqKSwwOUNNWmZxeX6ChISEgn+Af3ZtYlVLRkFAQ0NDRUhLTlFUVVVVVldYV1VUU1NRUVJQVFNRVVRVVFqLnpyXkI1zLDxYcYZ9aE1HTGZ1fHVKOjs8PDpnjpGWhndydG1lWVBQVFpVUVFJRkdHZo6Lh4uTl5WJfXxdTlFUTU9VTlJuiYxwc4VwYlpNRktYT05GO0dPQDIuMzc8OC8tLi4zPD9DP0tWSk1JOzc4Ozs6PD4+QT04Ojs8Q0hKTVBAQURBPj9BQUJEQ0NGSkpJTVJQSENQUUJFSklUU0A/QkBBS1Fma3R5eHVuZnR4d2RYXVReXmNmZWFdVUY7MSgoJykwN0BLVVxkZmdnZmRiYWFgX1xYUk1EOzIsKSkpKy0xNTc4PEFKVl9mbHF2eHl6ent7e3p5en6Ah4uMjIuKiYmJiYqKi4uLi4qHg4B9e3h2dXR1dXV1dnZ0cGxnX1hTT1FVW19laW92fIKJjY6Ni4uLi4qKi4uLjIiGgXpvaGRna3B1d3d1c3Fxb25tbW1sbm5ubm5tbWtrbXN8ho6PjoyLiYqKISEgICAgHx4fHx4eHh4dHR4eHR0eHiAgICEhIiMkJiYnKCgpKiorLCssLC4uLi8vLy8vLi4uLi4tLS0tLy8uLSwrLC0sMTc9R1FcZGlpaWZkX1pVUU5JREA6NjUzMzMzMzM0NDQ0NTU0NDQzMzMyMjEwLy4tLCwrKikoJyYmJiYkJCQjIiIjJCQoLTAxMzI2ODk+QURGSEhHSkxOUVVaW19jZmtucnJzd3t8gH6AfXx5d3FuZ2NdWFBNR0I9Ozo6Ojk6Ojk5OTk4ODc2NjY2Njc5PktfcoCJiIJ9blc7KSknKS00PUlTXWhveH+DhISCe3V2eHBhVElFREdJSk1SVVlbXV5dWVdYWl1aWFZWVVRTUlNUUlNTVl1ilZ2YmJWMfSs5TmB7eWNOS0RJUFJJQT0+Pj08OW6EioFubWpiX1dQUFNRSk1QSUpHRUp2iISCgIiSiX5bQUlPTUxKRT41P1than+NgXRlW05SV0hKTD0/OjUyODkyNTUwLSonKjE7Pz5UTD03NDc3NDM5NTM1ODs7Ojk4PT07OkJRREE/RU1HQ0E9Pz9CR0lSXlpdZFRWXlxKPVJaUTpATEdFUGFwdnNzd3Rzc21waWVKU0FIXWNlZ2VhW1NHOzErJicqMTlCS1RdZGZnZ2ZjYmFhX15bV1JKQzkyLSorKSwuMDQ2OD1DTFdgZ21ydnh6enp7ent7en1/g4iMi4uKiYmJiIiJiYqKioqJhoSAfnx4dnZ1dXV1dXZ1dW9qZV1WUU9RV15iZmtxeX2Ei46OjIqKioqJiYuLiomGgn52bWVlZWpuc3d3dHFvcXBvbm1tbm1ucHBwbm1ubHB1foeOj42LiomJiSEhISEgHx4eHh4eHh4eHR0eHh0dHh4gIB8gISIjJCYmJygoKSoqKywsLCwuLi4vLy8vLy4uLi4uLS0tLS0tLCwuLCwtLTA0N0BGUlteY2VmZWJgW1hVU01IRT02NDMyMjIzNDQ0NDU1NDQ0MzMzNDQxMDAvLSwrKyoqKCcoKCYmJSMlJCQjIyQkJCcrLC0zNzg5PT8/QENFRk1SVVteYGRnaWtsbnF1d3p6fXx8end2c29qZF1XUElDQT8+Ozs4ODg4OTk4ODg4Nzc2NTU1NTU0ODpGVWp7hYmGgnZkRy0oJigpKSw1PkhVXWdwdn18cGVfZnt4cGVaT05QVlpiaWxub29wbGZfWllbX15aVlZWVFRSUE9QUE9PWZmgl5aUjH8zMThWbnBTSlBIQTw7PUBBQUFAPjdFcn5zZWRhWFpSS05OSktNTEZHR0pMWXWHhXp7lI53RjpBQkNBQUA+OzYvMlaAjId2YmBVUVNJPUQ5ODg0OT89Mi4xLy4tKTxBOTg8ODYzNDc7PEFDOjQzNjYyPEJDRzw5OTs9RkZCPjg8P0BBPkFFQ0JJSVlRanVNUGlwcmFJQUBISUg9VGhucHFyalpwf2ZsXlVSQEBMVV1jaGVkYltTSDoxKycoLDI6Q0xVXWRmZ2dmYmJhYV9eXFhSSkI6MywrKyksLjAxNTg9RU5XYGlwdHZ4ent7e3p6enp9f4OGiouLiYmIiIiIiYmKioqKiYaDf3p4dnZ2dXV1dXV2dXVvamVdVlFPUVdeYmdscnqBh42OjoyKioqKiYmJiomJhoF6cmhhYGJnbnN2dnNxb29vb25vb25tbnBvb25tbm50eoOKjo6Ni4qJiYkhIyMjIR8dHR0dHh4dHR0dHR0eHh8fICAfICIjIyQlJSgpKCkrKyssLS0sLi4uLi8uLi8uLy8tLS0tLSwsLCwsLCwtLCwsLjE4QEhRVlpeYGFiYWFgXVpWUEpFQDo1MzMyMjMzMzM0NDMzNDMzMzMyMC8wMC4tKysrKignJycnJSYkJSMjJCQkIyMlJyosLzM3Oz5AP0BDSU1WWl1haWtubm9vcHN2eHd5d3Z3dXRxbmpjXlhRSkM8OTg7PDo6ODc2NTY3Nzc2NjY2NTQyMzMzMzU2PUxgc3+HiIV8cFc5JyUlJygoLC83QEtWYWpvamRvblNqgH10aF9dY2x2fYCBhIJ+fX11bmdoaGllX1lWU1JQTkxLTEpJR0yUoJqUj4iDRS42T2dcR0lSSkVCP0BAQD8+PTI2RlFxbmNdWldWUE9NSUhGS0xJSVBSV1pYaXh8hpWObUM7PDs4OTk6OTc2My87Zn6GhnNhU05JQ0VLSj0yNko7NCwzNC8rKjM/PURFOTUzNDk2PEJEPDc2NTU0MzQzMzQ1Nzc6Oj5KVkk2MCwzODo8RT87PUBGWlxRQ0xbZ2JdSEFISkU9WW1tbXBydFpDbHZ0hkZXYFdHSVBbZmdoZ2JbUkg6MSspKi80O0ROV2BkZmdnZmRiYWBfXlxZUklCOjAqKCkqLTExNDc5PkhTWmNrcXV4eXt8fHx6eXl5fICDiYuLi4mJh4eHh4iIioqKioiFg396eHd2dXV2dnZ2dXVzbWdjXFNPTlNZX2NnbXR8g4mNjo2LiYmJiYqKiouKiIWAeW1kXVxgZ290dXVzcW9ucG9ubm5ubm5ubW1ubnFxdn2Fjo+NjIuKiYmJISMlJSIfHR0dHR4eHR0dHR0dHh4fHyAgICEgISMkJSUoKSgpKysrLC0tLC4uLi4uLi4vLi8vLS0tLSwsLCwqKisrLCssLCwsMTY/RkxPU1hbXV5gX2BfXFdTTkhBOjUzMjIzMzMzNDQzMzQzMzMyMS8vLzAvLSwsLSspKScnJyYmJCQjJCUkJCUlJScrMDU5PUFERkpLT1VbXmNmam5ycnN0dnV3d3d0c3FvbWtpZmBcVlBLQjo3NTY4ODk6Ojk4Njc1NjY2NTU1NTQzMzExMTEyMzdCVmp5hIiFgnllRiwlJyUnKSowNjtEU2JtaGtdZHhxeHl4eXJzcnd/g4WFg4aCgoWFg399f4F+eHBnW1FPTExHR0VDQ0NBep6Vj4qEg1kuNUFgVkNITUpIRUJDQ0JBQD9ebl5CWGxnX1hTUk5PTUtHSE1NS01MVFZXVlhab5iVhG9VQjg7OjU3NjQyMS4tLURqfImMgGVUTkpEQUlKLyksLzMyPDosKjE5LCc0Pzk0MzQzNDEzNDAwMzM0MzMxMDAwMTQ5PDo9Q0xELykuMzc1Qk07P1VYUVNWYG1aQERQYl1LREBCW25qbnBtcHZ3ZUViqJJLZF1MQkpRYGhoaWdiXFNIOjErKSouMz1HT1lgZGZnZ2ZkYmFgX15aV1FKQjozMjIzMzc7Ozw8QEVNVFxlbXN3eXl7fHx9e3h4eHuAg4mLjIyJiYeHh4eIiIqKioqIhYJ+e3l3dnRzdnZ2dnV1c21oYlpRTk9TWWBkaXB3f4aLjY6MiomJiYmKiouLioiDe3JoXlpaXmVrcnZ1c3FvcG5vbm5ubm5tbW1tbm5ycnqDiY+PjYyLi4uKiiMkJiclIB0dHBwdHRwcHR0dHR0eHx8gICEiIyQlJSYnKCkpKSoqKiwuLi0uLS0uLi0uLy8vLiwsLS0sLCsrKysrKiwrLCoqKy0vNDs/RElNUVZZXF1fYGJeXVVOTEI+NzMxMjIzMzM0MzMzMzIyMTExMS8vLi4sLC0qKiknJyYmJiUkIyYlJSUlKSsvMzk7QEVITlFWV1hfZmptbnF1eHp6eXh3dXJwa2tnZWJeWVZRTUZBOzc0NDQ2NTc4Nzg4NjY1NTQ0NDQ0NDQzMjExMDAwMDIzO0xidYKIiYeBclk9KSUkJSUoLjE6R1NbXllhY2ZvcXFraW9wdX6ChIB+fHx4eX2HjI6PkZSVk46Kh3tsW0xBPj5CPjw5O1iYkYqHg4BxNC89WFtJS01LS1RGRENFQD46X5WNamdgZWNaU1BMUE9NR0hKTE1STU1bVktRVGSWj4NsXVFFOzIyNDc2NDEuLCotSGV8jYx6ZVZdV1FTT0Q6OjI0OT88MDA3OisoKzQ0NjQ0NDM4OkVPRD03NTQyLy0tMC4wMzg6Pz5FPjUvMTo/QD84NUVVUllXX21qW0xOTFptU11ldHVsc4CBdHd0eXZVY4FPRFNbVEFIV2ZnZ2hoY1tSRzkyLSssMjdASlNaYWVnZ2dmZWNiYV9eW1hUT0pEQD9CR0hNT1BQUFNTWF1jaXF2enp7e3t7enh5eXl9g4aKjIuKiYiHh4eHiYmKioqKh4SCfXl3d3V1dXd3dnZ2dnJsZ19YTkxPVFlgZWxzeICHi46PjIqJiYmJioqKiouGgXlwZFlSVVtjbHR3dHNwbm1vb25ubm5sa2tra25vb3R7hI2QkIyMjI2NjIwjJCYnJiIeHRwcHR0cHB0dHR0dHh8fICAhIiMkJiYnJygpKSkqKiosLi4tLS0tLS0tLi8vLy0sLC0tLCwpKSsrKSkqKisqKiorLC4zNjxAREdNUFZYXF9gYWBfWlJLRT01MTIyMzMzMzMzMzMyMjExMTEvLy4uLCwrKiopJycnJyYlJCUkJSgqKy80OT9ESExSVllcYGRlaXB0dnd4eXp5eXh0cG5pZ2RgW1dRTkpIQz44NDMxMTEyNDQ1NTc2NjU0MzMzMzMzMzMzMjExMS8vLS8wMTVDWGx+iIyKhnxqUTsmJSk0NS4wPEtOR0dHT05OUk1RVFdWVVpocnV5dnZ1d3uEjZKSk5aWl5WQiYqOi4ByW0g+ODg5NzU5fpaIgn+Af1E9P1FfUE1OTElKRkNEQkA+N1WakoJ2Z1ZaYFlQTVJOSEVFSkhLTk5OWVlTSEpTkJKIcV1JQzQzNzg5OTUyLSoqKjBKYHyVloFuYWRjc2tcWFNNRDczOERISUA3Ky8zNTUzMjZHTElLRjY3Ojg2NDpBPTgvKy03PkFNXUEyP0NIQkhHPUdNUVJVXmdkXVVWVWBlZ0lXb3JwbW+EfmhpYltcW1lNRElbYEg7Rk9mZmlqZmFdU0o8Mi0sLzM4QktTWmFlZ2dnZ2VjZGNkZGVlYl9eWVVYWFtgZWhpbGxubnBwc3R3enx8e3p6enh3eHh6foGEioyLiomIh4eHh4mJioqKioeEgX57eXd1dnZ3d3Z2dnZybGdfV01LTlRZYWZudXuCiIyOj4yKiYmJiYqKioqKh391a15TTVFZZG1zdnNycG5vcW9ubm5ubGtra2trbW5zfIWPkZCMjIyNjYyMISMmJyYjIB0cHBwcHBwcHBwcHR4fHyAgIiMkJSYnJygnKCorKioqLC0vLS0tLS4uLi4wMC4sLCwqKysqKSkqKikpKSoqKikrKysrLC4yNTk9QEVKUVZbXV9fYGFcVU5HOzUyMjIyMjIzMzIyMjEwMDAwLi4uLi0tLSsqKigoKCcnJiYnKS0vMzg7QkhNUVRbX2JmaWtwc3R3eXt7enl4dXJvbGlkYFtYUkxIRD47OTUyMTExMDAwMDAwMzMzMzMzMjIyMjI0MjIyMjIyMTAuLS0tLS40PExleoeNjIuEdWVPOSk2U1VKR1RcWlFQUVNUWV9QSkZFRkc/RklMVV5ncHuDjpKRl5iVkY1/eHl3go+SlY17YUg5MzQ2N0iCiYJ9gYFqS0dXY1VPU01FRkNCQkI8N0ZynpeGeW1aVFhaVlBJRkVGR0lHSEhJS09QSUZKUY6PiIBlQTUyPkM+OzcyMCkoKSoqNUxkgpSTiH13dHVyY2JYTEtMQjxNTkY+Nzs6NzU0Mjc8PDo+Pz87Ojc1OERFSzsuMTEyPkpPaXFPLz1STkxUUVJfc1pMUlpnUV1SOz1cZllPVGBcXlpZYl5WUFFJREBMSkBFTkE8SDoxXmtramhiXFRJOzEtLS81PEVNVFxkZ2lnaGZmaGpsbnFycXRzcHBwdHl6fYCBg4OBgIGAgIGBg4OEhIJ/fn18e3Z1eX2DiYyLi4qJiYeHiIiIiIqKi4qGg398enh3d3d3eHh3d3V0cmxlXlRNSkxTXGNpcXh9houPjo6Ni4qIiYmLi4uLiYZ+dmdXTUlPWWJsdHV0cnBubm5ubm5ubWtqaWVmaWtudX+Ij5KPi4yMjY2NiyAiJCUlIiAdHBwcHBwcHBwcHB0eHx8hISIjJSUmJicoKCkqKioqLC0uLiwtLS0uLi4uLy8uLCwsKisrKikpKiopKSkpKioqKisrKioqKy0yNTc9QkdLUllcX2JiYV1UTEY7NTIyMjEyMzMyMTAxMDAwMC4uLi4tLSwrKyooKCgoKCsrLjE0Oj5FSU5VWF1iaGptcHN0dnh6ent5eHV0cW9qZmFeWFJPSUM9OjYyMzIxMC8vLy8vMDAvMDIyMjIxMTIyMjIyNDMyMDAwMDAvLi0sLC0uMTZFWnCCjY6LiYB5aU86Q1hXUVJLXW1wYmVoXWVgWWRjUktFPkRERUZHRElcbX+OlZaWkYyDio+PhH+UmZyalY56WUE3PEdMaI+JgYGBfXJubmdYTE9NRERCP0E/PDtijJ+ZiX5zaV5YVVFNSERGSUpKSEdGSUxFRkVHTU1+iH95bUY8N0JHREA4MCgjIyUnKSo4UGB4jJOPhHVqdWlxeGRpa1lKV15RQzw5Nzg0MC8wMjU2Njg6ODlHT0c5Q0M3KiorMU5oa21kX0hCR0NUUE9TXG1jTF1mWk1HOUNOaltDY2llWElJQz8/RUxGNzc/TVlSTUdLUVs0T2draWpoYlxUSD41MTEzOUFIUFhfY2ZpamxucHFzdnp9gIOGh4WGhoaHiYqKi4uKioqKioqLi4qKioqKh4aBf397enyAgoeLi4uKioiHh4iIiImKiouJhYJ/fHp4d3d3d3h4d3d1dHFrZV5TS0lOU1xka3J5gIeOkI+NjIqJiYuLi4uLi4eEfHJjUUlHUFplb3R1dHJwbm5ubm5ubm1raWdiZGZobnaBi5CRj4uLi42NjYsfHyIkJCIfHRwcHBwcHBwcHR0eHh8gISEiIyQmJycnKCkqKSkrKy0tLS0tLS0tLi4uLi4tLSwsLCorKyoqKikpKCgpKSkqKioqKikpKiorKy8vNDg8QkdOVVthZGRkXVVNRTkzMzExMjIyMjAwMDExLy8uLi4uLS0tKisqKSgpKiwvNTg8QkdNUFRbX2RobXBydHd5eHh4d3Z0cnBta2diXllUT0pGPjs1MTEwMDAuLi8vLy8vLy8vLi8xMTExMTEyMjExMTMyMTExLy4uLi0sKyssLi8yPFBnfIiOi4yEeHJ3d3x+dWZRPz9QY3V5XE9XWF9ud3RhSUNDQ0RGQ0FDREdLXHF+fn2FjpGWlY6Lk5qfnJWWlYx5Y2BueYWWj4OBfoGMioJxWExNSUdDQT89RUxWf5efnY1/eG1iXV1aUklIR0hISUhGRUZIRTw9RVNZbIZ0bWlRQD5CRkRCPTMmISAhJCcqKz5RYHGDjY2EdG5pdX50dnBlYmNaXEc7PDs5NjEzNDUzNjk1ODVEOzs/Ozc7NjUtLzlecHFlVl1VVE9PRExTVl1XU05cS0VQSEJaTF5tXV9gVk0rLjk1MzY3ND1NUWNsX1VHRE9lY2loaWtrZ2NeVkk/ODM1NDtGS1RZYmducHJ2dnp9f4OHiY6PkI+NjIuLi4yLi4uLioqLi4yNjo6Pj46Ojo2LiYqEgH+Ag4SJjIuKiomIh4eHh4iJioqKiYWCf3x7eXh4d3d3d3d3dXRya2RcUklITVNcZWxyeoOIjpGOjoyKiImKiouLi4qHg3ltXk1FR1NdaHF0dXNycG5ubm5ubm9ta2hlY2NkaG94g4yQkI6NjIyOjo2MHh4gICAgHR0cHBwcHBwcHB0dHh4fICEhIiMkJicnJygpKikpKystLS0tLS0tLS4uLi4uLSwsLCwqKysqKiopKSkpKSkqKikpKiorKyoqKiorKy0wNDpAR09VW2JlaWZdVkpCODMyMjEyMjEwMDAxMS8vLi4uLi0tLCsrKikqLDE0OD9DR05UW1xiaGtvcnV3eXl4dnVzcXBsa2lnYl5ZVE9LRUE6NjIvLS0uLy0tLi0uLi4uLi8uLi4vMDAwMDAwMTEwMDAyMjExMTAuLiwtLCsrKystLzdFW3KDjIp/dHGCkpWRi4N+e3FYTVFkWmBRSlBlbGV+fFxRSEVEREdGQ0FFRkVHSVZff5KVmpKSkZSXnpyQjpSXkIiMkZGSlY+Ffnx+j4VYaFhKTEtHQ0BBPT1Db5Ohp5uMiH11a2dkY2FhTUhdZmBXSUZFRUM5MjlIXGh/eF9gWEdEQ0VCPz44LSIhIycqKywvOk1caneEh4J4d31+gnp1al5PVUg8REhPWFQ9OkA8NjdCNDI+P0NGWlU8PjMxNTQ3VWlkXFZcW1FAO0NhamheXFpVRkRMP0FNWEhWaF5cTkVLP0c7PzY/Q0hcZWh/eG9OTD1BZWZmaWpra2djXlZMQTo2Nzk/Rk9XYGhvdHd8f4KFiIuPkJKSkpCOjI2Li4qLi4uKiouLi4uKjIyMjY2NjY+Oj46Mi4mIhoiJjI2Mi4qIh4eHh4eIiYqKiomFgn98e3l4eHd3d3d3d3V0cGphWVBIR0xTXGVsdHuDiI2Qjo6MioqLioqLi4uKh4F4aVZJRUpUXmpydHVzcnBubm5ubm5vbWtoZWJiY2hxeYWNkI+NjYyMjo6NjB0dHh4eHh0dHBwcHBwcHBwdHh8eHyEhISIjJCUnJygpKCkqKiwsLC0uLiwuLi4uLi4uLi0sKyoqKisrKioqKSkpKSgoKCgoKCgpKCgpKSonKSkrKy0yOT9HTlVfZGdqZFxSS0I6NTU0MzEyMDAwMTAuLi8vLi0tLS4tLCwuMTY4P0ZKT1RbX2RpbG1wc3V3dnZ0cm9taWhlYWBdWVVQTEZCOzcxMC4tLS0tLi0tLS4tLS0tLS4tLi4vLy4vMDAwMC8vMDAxMjExMjIvLisrLCsqKikpKSwwOk5keIOEenyLkYqDhYqGg4KCfXpsWF1uYlZPZYSCd3xuYE9FQUZGRUhFRkhKTEpBP1Nuh5WTj5CTmJ2ajoqMjYhxio6Uj5SOhHt5e5GNcYVdSEpLRUE/Ozo6Sn2Xo6ecZWuDfnVubGtqaWmBlZaSjIN4XEY+NzEzS2Vrcm5lYV1NSEREQT8/PTIoJScpLCwsLC06TF1ncHZ7hpGVhIeBdW9hUWJWTldVWFVYPjVFQ0VCRDE2QTpGT0tGQzAuOzksNEpaU05QXFVGPUZLVExRSUxRVUdFR0pNVldISVhaTUBFT0lHOD9DODlEWG55fXlzUjQ9UWhnZ2dpamxoYl5XTkU9ODs8Q0xVX2dxeX2BhomNkZKSk5WUkpKPjouKh4eHh4eIioqKiomJiYqKiYiLjIyLjY6Pj46NjY2NjpKQjoyJiIeGhoeHiYqLi4qIhYJ/fHt6d3d3d3d3d3d1c29nYFlPR0ZMVF1mbXZ+hImMj46Ni4qJh4mJi4uLioaAd2hUSEVMV2BrcnV1cnJwb21tbm5ub21qZ2RhYWNocX2HjpKQjY2MjI6OjYwdHR0dHBwcHBwcHBwcHBwcHR4fHiEgISEkIyQlJycoKSgpKissLCwtLi4vLi4uLi4uLi4tLCsqKioqKiopKSkpKSkoKCgoKCgnJygoKSkpKCkpKysqKzA2PkVQWV9na2ljW1NNRUE9ODc2NTIxMDEwLy4vLy0tLS0rLS8xMzc8Q0lPVVxhZWptcHNzc3N0cnBvbWplYl5aV1NSTktFQTs2NDEsLCwsLC0tLC0sLCwtLS0tLS0rLS4uLi4tLi8vLy8vLy8vMDEwMDAwLy4rKysrKiopKSgpKjJAVGVvc3+Mj42Fgnl2doWFfoF+XFJrc25mXW+Hj3x1bWdbV1BFRUpSS0VEQ0VJS0dHSl6BlpGTlJidmYmIjIuGcneGiYKQjYB6eHmOk5SOY0dJSUVCQ09HOFGInaapo14sWHuBeXh2enqElZ+hmZOIeWRNPjYvOFNlbHNuZ2FeVUtBP0E/QD44MSouLy8vLSsqKzpQW2dqbH+ToZiWmI2Ge2tjZWViWFREVk08PkI/SUEwPTtBRj9HTjouP1ZELTVJVFtKQUo8PExMSFA1OjxARldWRkVFT05cZl9NODVHWUtTTDY3Ulk/REpmcF9qck9DV2NmZ2hoampsaGRfWE9GPjw+Qk1WX2lzfYKHjI6Rk5SUlJSUk5CPi4iEgX57eXl7foCCgYOGh4aHh4aHh4eHiYmMjI2NjpCQkpOTkZCMioiHhoaHh4mKi4uKiIWCf3x7enh3d3d3d3d3dXNvZ19VSkZFS1JbY2x3f4WKjI+OjYuKiYqLi4uLi4qGgHVmU0lKUltlbXJzc3FwcG9tbWxsb25tamdkYGBjaXN+iI+QkI2MjI2Ojo2MHBwcHBwcHBscHBsbHBwcHB4fHh8hISIiJCQlJiYnKSooKiosLCwsLSwtLi4uLi4uLi4sKysrKysqKikpKSkpKSkpJycoKCcnJycnJykpKCkpKCkpKSksMTlASVJcZGlraWJcV1FLR0M+PTs5NTMzMTAwLi4uLSwtLy80Nzo/R01UWmBjZ21wcnJ0c3FxbGpoZWFcWFRPTEhFQT05NTEwLi0uKyssKysrKysrKysrLCwtLSwsLCwtLS0tLS0uLi4uLi4uLi4vLy4vLy4uLCsqKikpKSkpKCorNUZaZnx+hoN/gXFicGhpb1dYZVhcZ2dkX19xg5KEdGxnYlpNREZKUEpFRUNER0lLTExPeJiSkZKXnpeKiI2OjoV1fYh5i4yBe3d2iZCOj3FETEtJSUM/Pjdaj5+lqqWKKzRNcoGCfXl7i5uhoJSOhnRdSDs0LzlNWWJnaGNbVlRPQT4/P0FCPjgxMzMxMC8tKyorNUxfaGRrgZiipKSkoph+YFZocWZVT2FWRTxIVz4yPDpET1JLPi8mNEdXRTI7R1VjVkNFRDU7RltTPDczNzpFREhCMTpBRmFiODxZX1hMW1BLU25oYGNgam5OVl9dYGZlZ2VmaWpra2hlYVhRSEJDSE5ZYmt1f4eLjZCRkpSUlJKTko6Lh4B4cmxmYmBgYmRna29yeHt8f36AhISFhYaHiImKiouOkZGUlJOSj4uJiIeHhoeJiouLioeFgn98e3p4d3h4d3d3d3VybWZcUEdEREpQWmNtd3+HjI2PjoyLioqLi4uMjIyLhoB1ZlZPUFdfZ29zdHJwbnBvbm5ubm5ubWpnZWFfZGp0gYuRkI+Ojo6Ojo2NjBwcHBwcHBwbGxsbGxwcHBweHx4fISEiIiQlJSYmJykqKygqKywsLC0sLC4uLi4uLi4uLCsrKysrKykpKSkpKSkpKSgnJygnJycnJycoKCgpKSgoKCgoKi4zOkJMVF5kaGpoY15YVlJOS0ZDPz06ODYzMi8uLi4vMDM2OT5DSFBWXWFnam1wdHJwbmxqZmJeW1VTTktGQT05MzExLSwsLS0sKysqKysrKysrKysrKywsLCwrKysrLCwsLCwsLS0uLi4uLi4uLy8uLi4tLSwrKiopKSkpKSkoKzVNcHp5dXFtaWleXHZzb313dGZaXWJUS1RidYGMhnVpbW1nVkRBSUhKR0RFRUZGSElMTXWWjouPl56Vi4yLjo2Oi4ySh46Jf3p2doSLi4t6S0dIRkZFQT41Y5Ohp6elmlcyPT9GST5BaoeamZKFgHVmWlM7MTE+TFhaXV5gWFRQTUM9PkJER0I/OTY2NDMxLi0pKis1UmJfXW6AipOdn5+bi3hpeHNoYFtXWktHVmA9OTQ7QUdGSDg5Pkg8RT45PEhRWU48O19DPUZaXkUxLjY2PEhFQD1FSEhUXmVua2dlaWVpbWxmUFVpYGZsYGVraWllY2ZnZ2dra2tqZmFaU0xLTlJaZG95gYmMjY6QkJGTkpKQjoqDe3JqYFhSSkZFRUdLTFJbX2dsbnN2en19fn6Ag4SFh4eIi4yOkJKQkI+MiomHh4aHiYqLi4qHhYJ/fHt6eHd4eHd3d3d1cm5lW09FQUFHUVtlb3mBh4yOj42Mi4qKi4uLjIyMi4aAd2hcUlRaY2xzdHRycXBwb25ubm5ubm1qZ2ViYWRsdoONkZCPjo6Ojo6NjYwcHBwcHBwcGxoaGRscHBwdHh8fICEhIiQlJiYnJicoKSoqKystLi0tLS0sLS4uLi4uLi4tLCwrKysoKiopKCgoKCgoKCcnKCgnJyYmJiYoKCgoJiYnKSoqLzQ7RE1XXGRoaGdkZGBbWVdSUU1JRUNBOjY1MjIyMzc6PkRITlRZX2Voa21ub25tamZhXlhVUExKRT47NzMwLy4tLCwrKywtKysqKisrKysrKysrKysrKysrKysrKysrLCwsLCwsLCwtLS0tLS0tLSwsLCwsKyoqKSkpKSgoKzBhfYFvZWl2b2RpXmZ7enltXWZgXnx1Y2RsdHyLjJOQjI2FeXVkVUtMTEdERURGRkpNTUpplI+MjJObiVtyhYmHjI+RlI2Rhnt5dXSKkZGQi1xESUhIQ0E8OnKao6ipppp0MDw7OTc0L1B+kI2HgnlxZVhQRzU6QkxSUlRWWFVPS0hEPDlBSktGREA7OTc2NTEuKy4xN0BWXltia3R+hIiIiImFg4J+dWlVUFVUVWRkTEI3NTIyOz48P0A0Nzc5PDs6PUE6NjAtOjs+N2daMy0wPk5BNjxKUFJMY3h3cnBua2ppa2lpYFZoc2BacXFtaWhmZWZmZ2hqbW1samlkYVxZWVxjanV+hoqNjY2PkJCQkI2KiYZ+dGlgVUtBPjs8Ozs6PD5CSk9XYWdvc3Z4enp7fYCAgIOFh4iIiY2Pj4+PjYyIh4eIiYqLi4qLiIaBfn17eXd3eHh3d3d2dnFrZFpRRkFCSFJcaHF5gYmNj46Mi4qJiouLi4yMi4qHgHZqXllaX2dudXZ0cnBwcG5ubm5ubm5tamZkYmFibnuGj5KQj46Oj4+OjYyLHBwcHBwcHBsaGhscHB0dHR8fHyAhIiIkJSYmJyYnKCkqKiwsLC0tLi0tLC0uLi4uLi4tLCsrKioqKioqKSgoKCgoKCgnJygoJycmJiYmKCgoKCYmJigqKisvMzxHTlZdYmRmZWRjY2BeWVdTU1BNSkVBOzk4OD09QUZLUVddYGJoamtpaGhlYVxZVFBKRj46NzMxLy8tKyssLCwsKystLCsrKiorKysrKysrKysrKysrKysrKysrKywsLCwsLCwsLCwtLS0tLS0sLCwsLCsrKikpKSkqLTNHgHpxend0d2lpa2dqdWBNS1tcZWdlYmRfZ3t9h4CTm6OjnZCKhnhVQ0hIRUdISElISUlHYJWQioyQmYgvOU9jcX+IjI6MjYR5d3V3kZqamJVoQEdGRUFAPUV5maKlqqadgTE5Ozs7OTQ5Znl7enZxZ19YUExHR0hJSk5QTlBSTkpJRj00QE5OS0VDQT86NzY0MjI0Nzo3Q1ddX2RscHFzdXN2d3JqaGpmVklNVVpRVlhOMTIsOUU/PElKMjk8ODgxLzlLRDAwNzk0PDk9USssMTY5MkhlbVJQSnF6dnJvbmtramprbm1xcXVdSm1ybmlnZmZmZmdoaWtrbG1tbGppamtwdnyEio2OjIyMi42Ni4mGgH12bWVdVk9HQT49Ozw8PD4/QkZNVl1mbXN2d3d2d3l8fH6AgYKFhoaGi4yMjY2Ni4iIiIiKi4uKioeGgX59e3l3eHh4d3d2dXRuamNbUEVAQ0hRXGhxe4OJjY+OjIuKiYqLi4uMjIuKh4B2al9bXWRrcXV3dXBwcG5ubm5ubm5ubWpmZGJhZXB+iJGSkI6Ojo+Pjo2NjBwcHBwbGxsaGxsbHBwdHR4fHx8hIyMkJCQmJSYoJygpKyssLCwsLC0uLi4uLi4uLi0tLSwsKyoqKiopKSkpKSkoKCgoJycoKCgoJyYoKCcnKCgnJycnKCopKzA1PUVMUlheYWNkY2VkYWFeXVtbWFRRTEhFRUNESU1QVltfYmRnaWhnZGFeW1NPSkVAOjYxLS0sLCsrKysrLCwsLCwsLCwsLCsrKioqKisrKioqKioqKioqKioqKiorKywsLCwtLSwsLS0tLSwsKysqKisrLCwpKyoqLjdRZHhkZn+ChYBwcGZmaWJPTUxOTVpnbV9UT0xeaHBqgImRpaihnZySeFVASUZISUdJSkhISFSOjYqLi5SMQDs7PElnfYePjot7dXZ3eJSenZ6aekJBRkpDPj5Wfpifo6amnn0uOT08PDo1NEpna2xqZl9WVFBOS0pLSkxOT05OTk5NS0dBNUFQUlBJRkZFPzw5Njo7Ozg3OTlMWF1gZWpqcHR2eHBaR0ZISklEREdRSkZIRz47QzI2PD88OTlFQz05OjtCPDw8MzU8MTc7P2BTSz88PEZbZWJTT1l7eHVybmtqamlpam1ucXJzbWt0cGtpZ2ZmZ2dnaWhrcHJ0dnV2eHp9gYaKjI2OjYuIiIWEgX57eHJtaGJcWVJNRT87Ojw9PT4/QUNJUlliaHB0d3Z2dnd5enp7fH6Bg4SEhIiJi4uLjIuLiYmJi4qKiomIhYF+fHp4eHh4eHZ2d3Zzb2pjWE5FP0JIUl1rdH2Dio6Pjo2MiomKiouMi4uKiYZ/d2hfX2JqcXZ3d3RycXBubm5vbm5vb21qZmVhY2ZygImRkI+OjY2Qjo6Njo0cHBwcGxsbGhoaGxwdHR0eHx8gISIjJCQkJicoKCcoKSssLCwsLCwtLi4uLi4uLi4tLS0sLCsqKioqKSkpKSkpKCgoKCcnKCgoKCgoKCgnJygoJycnJycnKCcqLDQ7QEdOUlZZXF5eX2FhYGFfX15cWlZTUVBQUFRXWl5fYWNnZmZiXltXU0xHQTs1MC0rKyoqKSsqKywrKywsLCwsLCwsLCwrKyoqKiorKyoqKioqKioqKioqKioqKyssLCwsLS0sLCwsLCwrKysrKioqKisrKSssKzBOc3lzbHmFiIqEfXx2c3l5ZFVQW1tLYGdkYl1bVmBjZH6cnq+zraukn5eCR0BGSUxNTUxJREJHgY+JhouRjkQ0Pj4/RVx5hoaEenR3eXuXnJucmYpOP0VHREA/aJObm52fo559LjY4Ozo4NjE3U19fXF1bVE1JSUhGSk5OTk1NTUxLTExMRkBKUlNWR0RISUZEQDw9QkZCQD4+RFRYWlpbX19laG5wbmVbVExCOzw8R1NQVl1dWjgtNDg1Nzs3QkM7PkIwMTtDU0w4QDc2OTxPWUlEOjhYdXRcUUxwe3hzb21raWlpaGlsbnFwbnB1dG9raWdmZmdnaWprcHR5fYGBgoaIi42Oj4+Pi4qHg316dXJubGlmY2BeXVdRS0NAPDs7PT4/QEBFS1ZeZGxzeXh5eXd4eXl5eXp7fYCCgoOEg4WGiYqMiYmJiYqKi4qJiIWBfnx6eHd3eHh2dnZ1c25pYVdNRD9BSFRfbHaAh4yOj46Mi4qJioqLjIuLiomEfXJnYGBobXV3eXh2cnFwbm5ub25ubm5saWhnZGVqdoKLkZCPjo2Nj4+OjY2OHBwcHBsbGxobGxscHR0dHh8fISIhIiMkJScmJygpKSoqKywsLCwsLS4uLi4uLi0tLi4tLCwrKioqKikpKCgoKCgoKCgnJygoKCgoKCgoJycnJycnJycoKCkpJycsMDc8Q0ZKTlFSVlldX15fYF9hYGBhXl1bW1xeX19hY2RlY2JeWlROSUQ8NTItKyoqKSkqKSsrKiorKyosLCwsLCwsLCwsLCwrKysrKysrKSoqKioqKioqKioqKisrLS0sLC0tLCwrKysrKysrKyopKioqKikrLS9Jfnh8fnh3f4R/d3Z6dnBrZmZvZ2hZRmNwV1dmY2RlZmt/ma2wrK+yrK6roXdDPEhLSkdKRUFBQm2Ph4OEjJJrLjo+QEBAU3KDgnVvd3h8k5iYl5aTYUNISEVBRHmVnZuXmKCbcS02ODk5Ojk3Mz5RVlVXVlJOSklJR0dKTU1OTE1OSkpISUtOXGVgVUVFRUdMTEpGRFNiU0NDQj1PV1VUUEtHSU9TWVtaXFhLOjpJTFJPS0lSWEs9Oi41Pzk6OD5COjg2LigqLDQ0KDk3NTc/SDxCPjs8aH2CVU1fhHx1cnBta2pnZ2hpaW50b292dHNwbWpoaGdoamtvc3h8gIWJjY+PkI+Qj46MioeEfnZwbGdmY19gYV9dXVpVT0hBPjw8PT0+P0BCRU9XXmhwdnt9fHt4eHp5eXl6fH5/gYOEg4KGh4iJiIyMi4mJjIyKiYeEgX57enh3d3h4dnZ2dXFtZ15VTEM/QUlVYW14gYiNj46Ni4qJiYmKi4yKioqIg3lvZWFjam91eHp4c3FxcG9ubm9vbW5ta2ppaGVmbXmGjJCRkI+OjY2Oj4+PjRwcHBwbGxsbGxsbHB0dHh8fICIjIiMjJCUnJicoKSkqKywsLSwsLC0uLi4uLi4tLS4uLSwsKyoqKiopKSgoKCgoKCgoJycoKCgoKCgoKCcnJycnJycnJycoKCcnKCkuMjY6QENHSUxNU1VXWFxfYWFkZWRjYWFhYGFkZWNhYF1ZUk1JQzsyLSopKCknKioqKisrKysrKywsLCwsLCwsLCwsLCwsKysrKysrKywrKyoqKioqKioqKiorLC0tLS0tLSwsKysrKysrKysqKSkpKSkpKyw/eYlqfHt8eYCKgHVyfH15cHZ5fnZqXFFYa2dTR2R3eXp5go+oraqzubS3ubGbaDdJSEdGRkNDQz1XjomBfYSLklM0QD89QEJOcIN0cXh6fo+UlJeXlnhISExGQkeBmJ2TjJafnGIsNjk5Ojo4NTIxPEtRUVNRTk1MR0dHSE1KTEtNTUlHRUVLU1dXVk1KRkdJTFFSUE1RXl1QTUM5SFZSTUQ9OTY2Njo5OTk1MTA6Rk5RQT1BREQ4Pz48SEk+OT9ERTk1NTM1LyQyPD1DQTY7Q0Q+Ojg3OEVOTUVNaG99fHh1cG5raGdnaGlvcnF1dXVzcG5sbGxub3BzdnuAg4eNkZKTlJKSkI6MiYR8dW5nY2BhX15eXl9eXFtZVE1HPzw6Ozw8PT5ARElRW2FqdnyBgH9+e3l5enp6e3t/gIOHhYOBgoWGhoiJioqKi4uLi4mHhIB9e3l4d3d4eHZ2dXNwbGZdVEpBPkJKVWNwe4KJjY+OjYqKiYmJiouMioqJh4J4bWNeYmlwdXh5dnNwcG9vbmxtbm5vbWtqaGdmZ3B9h42Qj46Ojo+Pj42Li4scHBwcGxsbGxwcHBwdHh8gICEhIyQkJCUlJicoKCkpKisrKywtLS4uLi4uLi8vLS0tLS0sLCsqKioqKSkoJycnKCgoKCcnKCgoKCgoKCgoKCgoJycnJyYmJignJygoKCktMDM2Oj1BQUdLTE9SVldcXmJiY2NjY2NhYWFfW1dRTUhBOzMuKScoKCkpKCgqKyorKyoqKyssLS0tLS0tLS0tLS0tLS0tLCsrKywsKioqKioqKiorKysrKywtLS0tLCwtLSsrKysrKyoqKigoKCkpKSo3a5FxWG93eoKGjYZ+gICEfG52c3B3cGhjVmN9b0c0WHZ8eoWPnKOut7q7u7u5rYpCQkVMSkRCQ0Q+Rn6Mgn1/hZGIPTg/Pj5FQ2GCd3N5f36FiIiTlpaJT05JRkFKg5qem5qbnZpeKzY3Nzk5OTczMC04R05PT01LS0lHR0ZLS01LTU1KSEZDRlNNS05SU0lJSUpRVldbYWlZTEpCOUVWU0pCPkBFSEA6Mi8vLS0wN0NFNzIyMzo7PkM+RE1LPz05Qkg5Njg2NDQ3OUFDOTQzPEE9Ozk6Oj08NzQ4PkBCSk9YY25tbGlnZ2lpbGlsdHZ1dHRxcnJ0dnZ4fICDiIqQkpSTlZSRj4yJhH51bWdiXltbXV1eXl5dXFxaWFJNSEA7Ojo6Oz09QEVJU1tmb3mAhYWCgH59e3l6ent7fX+DhYiGhYKCg4OGiIuLjIuKjIuJh4SAe3l3dnd3dnd2dXV1cGtlXFJHQD9DS1lnc32Eio6PjoyKiomJiYqKioqKiYd/dWldXWFqb3V4eHVzcXBwbm1sbW1vb25sbGppZ2pzfoiPkY+NjI6MjI2OjY6OHBwcHBsbGxscHBwcHR4fICAhISMkJCQlJSYnKCgpKSorKywsLS4uLi4uLi4vLy0tLS0tLCwrKioqKikpKCcnJygoKCgnJygoKCgoKCgoKSkoKCcnJycmJiYnJycnJycoKyosLjAxNTY7P0BDR0xQVFpdXl9gYGBgXVxaVlFMR0E6My4rKScoKSgoKCkpKisrKiorKywsLC0tLS0tLS0tLS0tLS0tLSwrKyssLCsrKioqKioqKysrKyssLS0tLSwsLS0sLCwsKysqKiooKSkpKSosR29oV1lxdXyJhoeDi4yDfYJ/gHtxdWxwbVhFZHNqUkddZnSCj5CYqLW7u7y7urWeXTc+QUVCQ0M/QENkkYh+foGKl2YxQEA+Q0hxgHh4en9+e3p/jJWXj1tARUdISoKbnZyempqUUTA3Ojk6OTg2My8uMDtFTU9OTUtJR0dHRUtNS0tKSEVGQ0RYUUxOU1RISUlLTVVfcndvZF1LQj1NW1JIR01RUlBIPzMwLzAwMDIyLy8wMzI1OztGOztFQjkzOD5BPTc5Nzk6Pj44MjM2M0JPPTY1ODk6PDs5PUNCOTpCRUhSXWFhZ2loam9vdHl6eXl4dnh6fH6Ag4eJjI6QkpOVk5OQjYiDe3NrY15dXFtYWlxcXF1dXFxcWVZSS0U9Ozo5Ojs8PD5FSlJfZ3F8goeHhYOAf3x7ent8fH+DhYmKiIaDgYGBg4aJi4yNjYyLiIaCfnp4dnZ3d3Z2dnV0dG9pZFtPRkA/RU1aZnR+hYuOj42KiYmJiYmKioqKioiEfHJlXFleZ25zd3ZycXBwcG5tbG1tb25ubWxqaWhtdoGMkJGPjYyLkJKTlJKQix0dHBwcHBwcHBwcHR4fHyAhIiIkJCUlJiYnJygqKioqKysqLS4uLi4uLi4uLi4uLi0tLSwsKyoqKSkpKSgoKCgoKCgoKCgoKCgoKCgnJycnJycoKCcnJiYnJycnJycmJigoKCgrKyotMTQ2OD5CR0xPUVVWVllZV1VSTktFQDgzKSknJygoJykoKiopKiosLCwrLS0sLS4uLi4uLi0tLS0tLS0tLS0sLCsrLCwsLCsqKysrKysrLCwtLS0tLS0tLSwtLCwuLjA2KykrKyoqKSosNVleY3d/Xmt+iIB4gYiLgXx8e3txbXZveHVcQVZwfXVjWV1ie4qRk6Ovury7u7q4p3AwNj1CQURFRERDToOQhn59gpKOSDE/Qkttfnx7gICGiYmHiY6UlY1lP0NDRVCBl5ycn5uZkkAzOzs6Ojo5ODYzLy4wPUpMTUxMTEpKR0lLTUlEQ0FFREVFWFtNT1RTQkhJS01OW21tbGdmST9EW15SUFZXV1ZLQDgyLiopLS4uLi8uLi8xNDc5ODQ4NTIuMTtBPjs7Njk6Ozw5ODE6OjE0NDcyOEJJRz43NT5DREZDPjk/UFhbWVxkbXF0dnl9fn19fX6Bg4SHioyMjI6OkJKUkpCMh4J7cGddV1hZW1xcXV1cXFxcXFxbW1dVUEpEPDo5OTo7PDxAR0tTXWt2f4WJiYmGg399fHp7fHuAhIaKi4qGg4GAgYWEh4yNjI2LjImFgn16d3V1dnZ2dnZ2dHJtZ2FZT0U/PUVRXmt2goaLjo6NiomJh4eIiYqKioqIgnhuX1ZVW2Jsc3Z2dHFwb25ta2tsbW9wcG9ta2pqb3qFjpGRjo2PkZCQj4+Ni4kdHRwcHBwcHBwcHB0fHx8gISIiJCQlJSYmJycoKSkqKisrKi0uLi4uLi4uLi4uLi4tLS0sLCsqKikpKSkoKCgoKCgoKCgoKCgoKCgoKCgnJycnKCgnJyYmJycnJycnJiYoKCgoKSkoKCssLjI1Nzo+QkRJSkpNTktIR0NAOjIsKSgoJycoKCcpKSorKioqLCwtLS0tLC0uLi4uLi4tLS0tLS0tLS0tLCwsLCwsLCwsKywsKysrKywsLS0tLS0tLS0tLS0tLi40U0AoKysqKikqMkhSboqHinFpbX6Nk4WFiIN7e4B/dnBybU0/VUJieH94fG5YX2qAjJifqLK7u7u6uqZ0NDc8Pz9DRUNDQ0ZjkI2BeXqDkIhELUNcg358fYKFhYiMjI6PkpKQeklGQUZMf5aampycmZVJNTw5Ojo6Ojk1NDIuKzRFTE9OTktJSkxMTUtHTFBSUEtEQUVdT05UUz9FSEpNTlFeYmBeXk1LUl1dWVxfXFdQRT04Ni0mJyorKy0tLS0tMDEyNUBBPjw8RkdIQkY/PDc5Nzc5MzQ1NjMxLzI2MTM3Ojk/PDo+PD9FS0pHQTc9TmlgSF14fHp9gYOEhYWGiImKi4qLjIyOjo+OjoyIgHhsY1ZOTFBUWFlbW1xcW1tbW1xcW1lXVVBKQzs6OTg5Ozw/QkVNV2Fqc3+Gi4uKiIN/fHt6e3t8gISIi4uKiYWBgIGCg4aMjI6OjIuIhH98eXZ0dHZ2dXV1dXRybWdgWEtBPD1FUV9seIOJjI6OjYqJiYmJiImKioqKh393bF1TU1pjbXR3dXNxcG9tbGtrbG1vcHFwb2xrbXR9iY+QjpCUkI2MiomJiIiIHBwcHBsbGxwdHR4fICAgISEiIiQkJSQlJygoKioqKiorKywuLi4uLi4uLy8tLS0tLS0sKywsKiopKCkpJycnJygoKCgoKCgoJycnJycnJycnJygoKCcnJycnJycnJycnKSkpKSkpKSkpKSosLzAzNTc6P0FBQUJBPTs2MiwpJyYnJygoKSkpKSkqKyssLSwrLCwtLC0uLi4uLi8vLy8vLy0tLS0tLS0tLS0sLCwsLCwsLCwsLCwsLC0tLS0tLS0tLS0tKyssLzEtKioqKiorLEFYX3uPeIN+UkpUZY2Gf4eHgoiAdHR3c3VwYlQ+TIF1dICHclhfb4OQnqWutLm7urmjaTE3Ojw+QUFAQEZDRG2Rhn17fYCKiTsyZ4OAfYCFh4eJio6Pj4+QjoNWS0RES32SlpibmpqTUDU5Ojs8Ozs6OTQxLiwvQEtQUExKSEhMTE1QUVFRUE1HOjAxYVZNUU00PUNGR0pWXWJhXl5iYmRkZGRjYFpSRTw5NzcuJycpKiorKyssLC4wMDE5PUFIS0ZGT09LRUI8RT5GT1JGPzk2MTQzMzQ1MzUzOENGPUBBOTpAR0tJRz83UWFWXnSDhoqLioyMjI2Mi4qJiIeJiYmHhoV/d25kVk1GRkxTVllZWVpaWltbW1tbW1paV1RPSUE6Ojk4OTs8PUFKWF5hbHeAhoqLi4mEgH16enl7fYGEh4qLi4iGgoGBgoGDh4mMjYyLhoR/fHh2dHR1dXV1dXV0cWxmXVVJQDo9RVFfbXqFi42OjoyKiIiHh4eIioqKiYV+d2lcUVNaZW51d3Z0cnFvbmxra2xtbm9wcG5ta211goiPkJKVko6LiYaHh4WIiBwcHBwcHBwdHh4eHyAgISEhIiIkJCUkJScoKCorKyoqKysuLi4uLi4uLi8vLS0tLS0tLCsrKyoqKSgpKScnJycoKCgoKCgoKCgoJycnJycnJycoKCgoJycnJycnJycnJygoKCgpKSkpKioqKSosLS4uMTM2Nzc3NjIvLCkoKCgoJycoKCkpKSkqKysrLS0sLC0tLi4vLy4uLzAvLy8vLy8tLS0tLS0tLS0tLSwsLCwsLCwsLCwsLCwtLS0tLS0uLi0tLS4tLC0sLCwqKisrLThPUXmHgFRiW09KTWmbmYmGjZGQjnx0eXx6gHlvSD9eeHh1hIZuU2NxgZimqaywt7q1mk4vOTo+Pj1AQT5BQkJLe4yDfXp4f4uBQHeDfXuBh4eChouOj5CRkZGSbU5MRUl8kJeWl5eWklU1OTs7PDs7OTc0My4tLDlJT1NWV1dXV1ZTUVlbWE9CMywoLF1eT1BKLC80OT9UW2BlX2BqbG1oaWlpamBURj86Ojk5MikoLCorKyoqKikqLS4uMj1JS01QTlhPSUxIQUZNUVZOQi8yNjQvLzE0NjAvOEtAOzg1TlRJQTk5QERHQTk9UVtUa4uRj46NjYuKiYaGhIB+fX19fHl4b2pgVkxGREdLUVRYWFdYWFhZWVlZWlpaWlZSTEZBOjo5ODk7PD9BTFRXYGx3goeKi4qIg399enl7e32BhIeLjIuJhoWCgIGAg4WIiYqMiYeDfnl3dnVzdXV1dXR0dHFrZVxUSUA7PkZSYW57houNjo6LiYiIh4eHiIqKiomFfXNmWFBTW2dxdnd1c3Jwb25sa2xtbW5wcXBwbm1xeYGMlJeUkI2Li4eGh4eIioodHR0dHR0dHR0dHx8gICEhISIjJCMkJSYoJygpKysrKywsLi4vLy8vLy8vLy0tLS0sLC0sKyoqKikpKSkoKCgoKCgoKCgoKCgnJycnJiYnJycnKCgoKCcnJycnJycnJycoKCgoKCgpKSkqKSkqKioqKiosLC0tLS0rKikoJyYmKCgoKCgpKSkqKissLCwtLi4uLi8vLi8wMDExMTEvLy8vLy0uLi8vLi4tLS0tLS0tLSwsLCwsLCwsLS0tLS4uLi4uLi4uLi4tLSsrKyssLTBKS1CFj2JNSEVKU2iQrqmhm5egmJCMhHZ2b3Brb086O0hihIqEfmlWXHmPn6Wnp6mzqXw3Mjk8PTw8P0FAQj4/QlGDioJ7e3aAjXeDfHd8g4aBfISKjIyRkpORkHtST0dJeI+Vk5SUk5BgNzw7Ozw9PTo4NDEvKy04WG12dW9qYV1ZVl9lYlxLNCYlJSdUY0xMSC0uLjBUYGZiYWV4cXBpZ2prbWxcSUI/PD09PTYvMTIyMTAuKSglJysuLi85QUxPSVZgUUpGP0dLTEVFSkYxIzA5My0uLzAsLz9NeH9fQzxFUFRTTD05Oj09QTg8TVhqkJOOjYqIhoWBfHdzcnJxc3Nxb2tlXFRKRkVITFJUWFhYWFlZWlpaWllZW1pWUU1HQTw5ODk6PD0+RElQWWJveYKGiYyKiIOAfXp4enp9g4WJjIuKiYiEg4GAgYKChYiLi4uGg314eHZzdHV1dXR0dHNwamRbU0c/PT5IVGNwf4eMjo2LiYiGhoaHiImKioqIg3txY1dRV2BqcnZ2dXJycG9ubW1tbW1ucXFxbW1vdH6OlpSOjImJioqMjI2MjIuKHR0dHR0dHR0eHh8gISEhISIjJCQkJSUmJygpKSkpKyssLC0tLi4vLy8vLi4tLS0tLCwsKyoqKiopKSkpKCgoKCgoKCgoKCgoKCgnJyYnKSgnJygoKCgnJycnJycnJycnKCgoKCgoKCgpKikpKiopKSkpKSkqKioqKikpKCgpKCgoKCgoKSkpKissLCwtLi8vLy8vLy4vMDAxMTExMS8wMC8vLi4vLy4uLS0tLS0tLS0sLC4uLi4uLi0tLi4uLi8vLi4uLi4uLS0sLCsrLS41VkloiYFLR0VYcoaXoaetraynopuAhot9b2ttc3JdPz84M0dtd4J+WV1wgJKepKGdn4pPNDs7Ojo6ODs6PD8+Qk1PZImFe3l3eYSOiXx4foWBgH6IjYiMkJKQi4mDU0lIT3CLkZSUkpGMajo8Oz08PTw4NTQwMC4uW4CEfXNvaVtXVVRaXV1YRSwmKSgqSGxVTEovLC9Ua2trZ2x7eW9qaGVna21lXFJKRUFAQj88OTc2ODYzMCojIyQoLC0uLzhBRlFbYFJLTFRRWmNfV1FJNSErPDwxLjAwLisqPHaRj5SHZUk/SlBQUU48N0JEQjpDV2iKkIqFgnx7dnFsaWlpa2xubm1oY1xTSkZGSU1RVVlZWFhZWVpaWlpZWVlYVlFLRUA6OTg6Ozw9QUZLVFxkcXqChomLiYeDgHx5enp7f4OFioyLioiHh4eEgYGBg4SFiIqJhoJ9eHd1dHVzc3R0dHRyb2pkXFJHPz5DTVllcn+HjI6Ni4mIh4eGh4iJioqKiIN6b2JWU1hganN5d3VycXBvbm1tbW1tbnBxcG9tbX2UmJONiYaIiYyMjo2Ni4uMjBwcHh4eHh8fICAhISIiIiIjJCUlJSYmJygoJykqKiorLCwsLC4uLi4vLy4tLS0tLSwrKikqKigoKSkpKSkpKSkpKSkpKCgoKCgoKSosKSYoJycoKCgoKCgnJycoJycnJygoKCgoKCgpKCkpKSkpKioqKikpKCkpKSkoKCopKSgoKSkoKCkpKissLi4uLi8vLi8vMTExMTExMTExMTIyMTExMS8vLy8vLi0tLS0tLS4uLS0tLSwtLi4uLS4uLi4uLi4uLi4uLi0tLS0tLS4vP11uf25uRz5hjpqfqKaho6Orqqqpjnd/gX94fIF6YltLSENESnF5fW9eaneIk5yZkopsRDo9Ojw9QUNDPz08PkJISlJtiH94dXZ8hYp6dnuBf4F5hY1/dH2Rk5GSkGhFSVFnhJCTjoiOi3U8OTo8PTs6OTQ0Ly4rS3t+enZycGVfWFFKSENER0I0MDAtLkFsWk1MMDFFam1yb3iCfHZuaWZjaGxvbWheWFRQT0lBPTw5PDk4NiwlIiMkJiouLi0uMkReZWhcUFZYZGxpbmxpZFpHODg0Ni8tLTQ8P0VZdnqFkZKHb1FETFRVUj45PURCOD1Xb4qHe3hzb2toZ2ZnaGpsbG1vaWNcU0tHRklNUlNYWFhYWFlaWlpaW1lbWFVQSkQ+Ojk4OTo7PEFHTFNcZ3N8goaJioiFgH96eXl3e3+ChoqMi4qIiIeGhoODgYKChIaGhoWDfXl2dHJzdHR0dHRzb21nY1tRRz9ARlBcaHV/iI6OjY2Lh4aGhoeIiYqKiYeCeG1gVVRcZG50d3R0cXBvbm1tbW1tbW5xcXBtcIaXl5KNiYaGh4mLjY2Mi4mLjpIeHh4eHh4fHyAgISEiIiIiISIlJSUmJicoKCkqKioqKywsLCwuLi4uLy8uLS0tLS0rKiopKiopKSkpKSkpKSkpKSkpKSgoKCgpKSkpLjkrJycnKCgoKCgoJycnJycnJycoKCgoKCgoKSgpKSkpKSoqKiopKSgpKSkpKSkpKSkoKSkpKSkqKistLCwvLy4vMDEwMDExMTExMTExMTEyMjIyMTEvLy8vLy4tLS0tLS0uLi0tLS0sLS4uLi4uLi4uLi4uLi4uLy8uLi0tLS0uL0V0emVDUkJYjailpKOmqKWjra+uq6KRkI2GhIWJd2xqYGVbZVdfd3t7ZWZye4aOjol0SkI6QT49PUJJSk9KREI/P0hRUnGJe3d1d3yHgnNxeXt3a26Hd2Jzj5iampV7RUNNXoaRjoR3jIx6QDY4Ozs5NjIxMTAsOHF9eXd1dWtgVlNUTUVBOjs7PDk2NDQ+aFpQUDM5ZmpxdIGIg316cm9xc2xjZnR4b2ZlX1hRSkVAPkA9PDcqJCQkJCYtLS4sKSxHZGVnXltbZHF5hYaCfXt+d2E8MDQuKzZGRkQ/Q0xMXmBcc3x9e1tGR0xGR0A3P0A9QVtzhnlwbmpoZ2dnZ2hqbG5tbWtmXVVOR0hLT1JVVlZYWFhYWVpaWlpaWlhVUEpEPjo5ODk6OzxCR05WX2p0fYKGiYqIhIB9eXh4eHyAhIiKi4qJiIeHh4WDgoCBg4OEg4SDhH95dnRzcnNzdHNzcm9tZmFZT0Q/QUdSXmp3gYmOjo6LioeGhoaHiImKiomHgHZqXVRUXGVudHd0c3Bwb2xsbm5tbW1ucHJtd4+XlI+LiYeGhYaIiouLi4uNj5GOHh4eHiAfHx8hISIiIyMjIyIjJCQlJycnKCgpKSoqKywsLS0tLi4uLi8vLi0tLSwsLCsqKioqKSkpKSkpKSkpKSkpKSkoKCgoKCgoKCcnJycnJygoKCgoKCgoKSkoKCcnKCgoKCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgpKSopKiorKywtLiwtLi4wMDExMTEyMjIyMjIxMjExMTExMTExMC8vLy8vLi4uLS4uLi4tLS0tLS4uLS4uLi4vLy8vLi4uLi4uLS0tLSwsLi9EbUxCQEVRhqitqqmgoKGhnqyvr6WdoKKbkZKTj3ZuYWVuaWhmZXCAgmxgbnZ9g4R5VC40PkQ+P0A/QEBJRURNPjpBRk9JeId9dnN5eoKDdXR0cFdhfXdte5CUlZiYjlVCRWSPmpeLcoWNfkE3Nzk5ODQzMi8wLkd7i3lwdHBvbWBwgXNbOkZAOjs7Ozo4PV1cUFNBXmpueImKg35/enp9fG5fX15pd3RtZWFZWFVRS0dEQj4yJyMiJCMqMS4uKyorS15fYVRcWWFgbXt1c3l6f3pyalQ1MDQ+Pz05Nzg+UWxrYl1dY3NpW05KRk9QST89QD5BW3iCcmxraWhnZmZoamxtbW5rY1xWTkxJS09TVFZWV1dYWFlZWVlaWllXVVBIQj06ODc6Ojo9Q0lQWGFrdn6ChoqKh4N/e3Z2d3l9gYWJi4uKiYeIiIaHhYWCgIGDgoODhIN/endzcnJzcnJycXBwbWVeWE5DP0NKVmFseYSLjo+OjImHhoaGh4iJioqKhn50Z1xUV15ncXZ2dHJvbWxtbW1tbW1tb21vgpOVkI6Mi4qKiYiIi4uLi46NjY+OjR4eHx8fICAgISEiIiMjIyMiIyUlJiYnKCgoKSkqKissLC0tLS4uLi4vLy4tLS0sLCwrKioqKikpKSkpKSkpKSkpKSkpKCgoKCgoKCgnJycnJycoKCgoKCgoKCkpKCgnJygoKCgpKSkpKSkpKSoqKSkpKSkpKSkpKSkpKSkoKSsrKiorKywsLi4tLy8vMDAxMTExMjIyMjIyMTI0MjIyMjIxMTAvLy8vLy4uLi4uLi4uLS0tLS0uLi4uLi4uLy8vLy4uLi4uLi4tLS0sLC4vPVRHQ0RUdJuzsqOmqKKkpaOqp6Wel5iioZWTkIpxZGNkaW1nZmt1eXR8YGt2fXp8ajwsMjk/Pj9APz8/QkZISkE8PkFKTUx5h311dnqBhoh4bFtWXHeAho+RjIuQk41jQ0NPjKChll6Cj4E/Nzg5Nzc3NDQ1NjZNlI+JfnGBn5eVhn9+gFA7REQ8Ozo8PDtTXE5XZXFzf4mIhICBg4OFeGdgX15gYmJfYWJdWFVTUk9NSEY8KSQjJSQlLjIvLisrMk5cX1dHUVtdXWFtenl3d3VyaGlqWkpGPi42OzUrKjRUgoqPi4l+Z11TTlBWTkxNPjg9PkVag35zaWdlZmhmaWprbW1tamZfWFBNS01RU1RWVlZWWFhZWVlZWlpYVlNOR0E9Ojo5Ojo7PkRKUVljbXd+hIiJiYeDfXl2dnd5fYGFiYuLiomHiIiGhoSFgYCBg3+Bg4KBf3t1dHNzdHRzc3JxcG1lXlZMQz9ES1hjbnuFjI6PjoyJh4aGhoeIiYqKiIR8cmZaU1lga3N3dnRwcG9ubG1ubmxsbW1yipaSjIyKiYiKi4mHh4eJjY6Pjo6NjYwfHyAgICAhIiIiIiIjIyQkJCQnJygnKCgoKioqKyssLC0tLi4uLi4uLS0uLiwsKyssKysrKiopKSkpKiopKSkpKSkpKSkpKCgoKCgoKCgoKCcmKCgoKCcnKCgoKCgoJycnKCgnKCgpKSkpKSkpKSkpKSkpKSoqKioqKikoKioqKiwtLC0tLi4vMDAvLjAwMjAxMTMzMzMyMjI0MzMzMzMzMTEwMDAwMC8uLi8vLi4tLS4tLS0tLi4tLi4uLi4uLi4uLi4uLi4uLi0tLSsvLz5GRkNOcYSmsrGYmq2usbK2t6+so5mSmJ2WkH52aVtvamRlaG52eoKCe2pmcnt7eF8xLDAxOkNEREE+PTw5Q0pIOjo9SE1DUoaEfHl8fIOOiWtIUVRrgJKdmJOPi4h+bUpDRHaZoKGMc5N2Pzo7Ozw+P0A+Q0IyVp2doKCHfZOXmIRvcGtVMjc/RD87PD08Sl9dZ3BvfYODhoaFipCJcmNiZGZjZWJeVU5UVFVSUlBQTktDLyUjJCQmKzQ0Mi8tNURQXlpHQ0lXXVxcYXJ+eXFoaW1pZXZoSDotMDA2NC4vNFKBi4qFYV5yfHZpWEtHQ0VHQkFAQW2EgXFqaGhmZ2lqbG1sb2xnYFlSTUxOUVNUVlZWVlZYWlpaW1paWldTTUZAPTs6Ojk7Pj5ETFFaZW95foSHh4aFgXx3dnZ4e32BhoqLi4qJh4iGhoWGhYKAgYCAgoOBgn98d3N0cnJyc3NzcHBtZF1USkNBRU5aZXJ9iI2PkI+MiomIh4eIiImLi4eDfHFjWFNaYmtzdXVzcG5ubW5sbW1rbWx2j5iSjYmKiouKi4iGhYaKjI+Pjo6Pj46MICAgICAgISIiIiIiIyMlJSUlJycoKCgoKCoqKisrLCwtLS4uLi4uLi0tLS0sLCsrLCsrKyoqKSkpKSoqKSkpKSkpKSkpKSgoKCgoKCgoKCgnJigoKCgoKCgpKCgoKCcnJygoJygoKSkpKSkpKSkpKSkpKSkqKioqKiorKioqKiotLS0tLi4vLzAwLzAwMTIzMjIzMzMzNTUzMzQ0MzMzMzExMDAwMDAvLy8vLy4uLi4uLi4tLi4uLS4uLi4uLi4uLi4uLi4uLi4tLS0rLjA5QUVPcIaQsLW1noyqr7O1ubizraCYkpWal5R7empiaWBhY3N0fICGkZB+UmJweHVYLCgrMTc8QEFCQD4+PDtBQTw9O0FLSDlaioZ9e3uAhouBRUlWX3iKk5mal5WJdHFRREVXiJmdlnaCSkJCQ0RGRENAPT05Mm6ppaKbkH6IhXx5Z1tJQTc1NDg/QDs8OkNhaGtxdoSFh4iMkpWAZWBnaGpqaGRkXk07PUxSUFBRUE1JPioiIiUnKjA1NjQyNUVRUFJGQEZIUFtcX1tibmhmY1hRUlljaUszMDEuLzIvLC04b4SAgYBydoGEhoaFeE09RkI/Q0VMYnN4bWpnaWdoamxubm9qZ2BZUk9NTlFUVVZWVlZWWFpaW1xcWllWU01GQDw6Ozs6PEBDSE1UXGdwen+Eh4eGg398d3d3eHt9gYaKi4uJiIeIhoaHhoWCgH+AgIGBgoKAfXh0c3NzcnR0c3FwbWRdU0dBQUdQXmp1gImOj5CPjIqJiYiHiIiJioqHg3puYFVWXGRtc3V1c3BubWxtbGxrbmd3kJeRj4yKiouLioqHhIeKjpCPj46Oj4+OiyIhIiIhISIiIyMjIyMjJCQkJCcnJycoKCgqKiorKywsLS0uLi4uLi4tLSwsLCwsLCwrKysqKSkpKSkqKikpKSkqKioqKSkpKSgoKCgoKCgoJyYnJycnKCgpKSgoKCgnJycnJycoKCkpKSkpKSkpKSkpKSkpKioqKioqKyorKywuLC0tLi4vLzAxMTExMTEyMzMyNDQzMzQ0NDQ0NDMzMzMyMjExMDAwMDAwLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi0tLS0sLCwvPERVdIWOpbO0t6F/nKGrpampp6ijm5KLkZKJfHhxZ2dlbW5xdH+Gi5qgm1NSanV0UicoKy44NjpJREE/PTw6OT06PTs/R01ERnuPh397eYCFi3xHT1h6ioyOkZOTkIF5YUZDRGmNmZiKX0RBPz0/QD05OjdSYEKFrqKViomKjnFoaVpRQzg2NDMyND5DPzxBV2tudHqChYuPmph/aWdmZmltcG1rZlxCMDA+TFJRUlNSSjcmIiInKywzNjU5OkBLUk9ENzxBSVBUV1ddYGNZXFxIPTcyOkdXTzYvLzIxLy4uSV9neHt5e3x+goB3a29iVD5DSEVFR0VQUFNeY2dnaGtsbG1vbGdhXVRPTU5SVVZWVlVXWVlZWlxdXFxaVVJMRkE+PT09PD5CR0xQV2BpcnqAhIeHhoN+eXZ4eHl8fYGGiYuLiIeGh4aGhoeFgYCAgH+BgYGBgX14dHFzcnN0dHJxbGpkXVFFP0JIVGBreIKKjY+PjouKiYiIiImJiImJhoJ4bV5WVV1mb3R1c3Fwbm5tamlramh+lpeRjYqLjIyJiYmJiYuOj4+Qj4+Pj4+PjIkiISEhIiIiIiMjIyMjIyQkJCQnJycnKCgoKioqKyssLC0tLi4uLi4uLS0sLCwsLCwsKysrKikpKSkpKiopKSkpKioqKikpKSkoKCgoKCgoKCcmJycnJycnJycoKCgoJycnJycnKCgpKSkpKSkpKSkpKSkpKSoqKioqKisqKyssLS0tLi4vLzAwMTExMTEyMzIzNDQ0NDQ0NDU1NDQzMzMzMjIxMTAwMDAwMC8vLi4uLi4uLi4uLi4uLi4uLi4uLi4tLS4uLS0tLS0tLCwsLz9Rb4aJmK6mpbKdcH6Ppp+apKypoJmOhY2Tioh6c2xqY2txdXR9hYyfqa1uSmVqaEwqKyYsLj5NS0pCQUE/PDs+Ozs9PkRIRkZ3f42Ifnt7fYONdUpSdoeFhIB/h5COeXJORkNLc42PckxFQD89Pj08Ojo1R2RYgambl4N+goBmW1BNTUM2NjQzMTI2PklIQkVgb3N4gIiNlpN/c3Fra2prbHBzcGpYOS4vM0JPUVJSUEEtJSQnKy0wOz9CQUJGR0hMQjg5PkhPUU5WWVlYT0MzLC4xMzM0Qk9POjc2MTg7Nk49PFNwdXl6f3ViXWtxcYVtPkxFPkhIS01OUVVWX2RpbG5ubmtnYl9WUU9PU1ZWVlZVV1lZWVpcXV1dWVdSTEZBQD8+P0BCRUpOUltia3R7gIKFhYSBfXl2d3d5fH+Dh4qKioiHhoeGhoeHhYSBgH9+gICBgH9+eXNzcnN0c3Nzcm5oYVpRRT9CS1hjbnmEio2Pj46LiYiIiIiJiomIiIWBd2xcU1dfaHB0dXNxcG5sa21qaWyClpaPjYuLjY2NiYmJiouQkY+PkI+Pj4+Pj4yJIiIjIyMjIiMlJSQkJCQkJSUlJycnJygoKCoqKisrLCwtLS0tLi4uLi0tLCwtLSwsLCsrKyopKSkqKioqKiopKSoqKSkpKSkoKCgoKCcnJycnJigoJycnJycoKCgoKCcnJyYnJygoKSkpKSkpKSkqKioqKioqKioqKisqKiosLS0tLi4vLzAwMTAwMTExMzI0NTU2NjU0NDQ2NjU0NDQzMzIyMjIxMTEwMDAvLy4uLi4uLi4uLi4uLS4tLS0uLi4uLi4tLSwsLCwtLS0tLDBDZYCOi6Gpmp2rl3BykaWurqysp56Yj4SHk46CgIN9cGlmbnJze4OEk6muikdfXl1HLi4zLi02Rzo+RkNCQDw+PTw8PD1CS0xIenJ6ioeAfHuAhYpsTWN7gHluZGt9jY2CX0VEQkxjcFRGRUE+PT09Ozo4MTRaaoGlk4+AeXZtZVdMQ0JBNzQzMzQ6Q0tTU1NFR09VWFxzhYd8gIB6cW1sb3B2d3FpUzQtMDA1SFJUUUg4LSorLC4yPklNTk9PTkdFRjo4Oj5CSk9PVFNJQC0rQWB6jZujpqWlo5R+a11XRjI9QDU/WW9zeXpqXGF5jI6HhkpDRzxFS0VVY1hWVVNXWl9la2ttbWdfWFRSUVVWVVZWVVZYWVlaXFtbW1hVT0xGQkFAQEBCREhMUlZcZG11fICChISCgHt3dnd2e3x/g4iKiYmHhoaHh4eHhoWDgoB+fn9+fn9/fnl1c3Nzc3RzcnFsZl9YT0U+RE1aZXF9hYuNjo+PjIqJiYeIiImJiIeEfnRnWlNXX2lydHVzcG9sbGtsamqEl5WRjoyNjY6MjImJiY2RkJGQkJCPj5CQkJCMiSMjIyMjIyMkJSUkJCUlJSYmJicnJycoKCgqKiorKywsLS0tLS0tLS0tLSwsLCwsLCwrKysqKSkpKioqKioqKSkpKSkpKSkpKCgoKCgnJycnJyYoKCcnJycnKCgoKCgnJyknJycoKCkpKSkpKSkpKioqKioqKioqKiorKioqLC0tLi4vLzAwMTExMTMzMzMzMzU1NjY2NjU1NjY1NDQ0MzMyMjIyMTExMDAwLy8vLy4uLy4uLi4uLi0uLSwsLS0tLS0tLCwrKywsLS0tLSwwSniRmZOPkpGZo5yIiJ2psraqjZidmI6EhJCKc3t4dHZzaXF3fISMjJepsKNSVVdWQCorQUMyMDAzN0RBQEA9Pzw9PTs7P0RKR3t2an+Ohn98en+GiGBSZm1jXl5ea4KNiX5IP0NBQUJHSERCPz0+Ozk1MjI1VGSCpZ+AfHZpX1VUTEQ/ODM0Oz9HUlZZW1hZWU1JR0lPVV1peoqMhnhpaHJ5fn96bUYuLDAzMTdJT0k8Ly4tLjEyR1lbWl1eWVRPRzw3NjxBRkpNTks9Mik3WHmPpra7u7u7uru6ta6qmWgvMTU0MD9Ya3V9gHt3goaCc3xtYkFKRUhNTm51aGJkW1ZWV11dZGRkYVtVVFNVVlVWVlRVWFlZWltdXFxYVVFMR0NCQUJCREZLT1RYX2ZvdnyBgoSDgH15dnV3eHt8gYWJi4mJh4aGh4eHhoaGhYOAf35+f35+fn96dXFxcnNzc3NwbGZeVk1DQEVRXWdzfoaLjY6PjouKiYiIiIiJiYmHg3xzZllUW2NrcnJ0cm9wbWtqa2uJmJSPi4uMjYyLi4iIiY2Rko+Oj5CPjo6QkJCQjIkkIyIjJSUkJSYmJSUlJSUmJycoKCgoKCgpKysrLCwsLC4uLi4uLi4tLCwsLCwrKysrKysrKioqKioqKioqKikpKioqKikpKSkoKCgoJycnJyYmJiYmJiYmJycnJycnJycmJigoKCgoKCkpKSkpKSkqKioqKisrKysrKywsLCwtLS8vLy8xMTIyMzM0MzM0NDQ0NTY2NjY2NjU2NjY1NTQ0MzMyMjEwMTAwMDAvLy4tLysuLS0uLS0tLS0sLCwsLCwsLCwsLCwsLC0tLS0rMFuGl5uek4mQjZOWmp2gp6ytqJGZn52RiYqPkHJ3dnd6e3J4fYGEioNwna6lWE5QSjUoKjdDLy0wMDA3Q0U9QT48Ozs5O0BFS0h8fnNqhIqDfXd6f4iDWl9kW1xdXGV3goeNbz9AQUA/QkZEQj49Ozk4NDAwO1VifJ2bfHBza1hVUEU5OTc8Q0pPVFZZWFtdXGBaSkRES1NcaXyNlo93YVp1hYiKinA2LTAyNjYyOERBMSwwMjIxPFdhYWhxbWBXUEY2MjdASUpMSDwzLDA+WnqOpLu+vr++vr6+vbq3tLCqfTkoMDI0P01kdHd/goOEfHyJiodMSEhPU1Baf3RramllYF1ZWVpdXl1ZV1VVVVVVVVVWV1dYWlpbXFxbWVVTTUlFRERFRUdKTlJWW2JocHV9gIOEgn97d3V2dnh7foKGi4yLioiHh4iGhoeHhoaEgX99e3t9fX57enZzc3R0c3Nxb2pkXlVLQ0JJVF9qd4KHjI+QkI2MiImHh4iIiIiIh4J7cmVXU1tia3J2dnFvbGtpaGuJl5ONi4qMjouKiYmGiIuRkZKRkIyNjY2Oj5CQkIyIJiQjJCUlJCUmJiUlJSYlJicnKCgoKCgpKSsrKywsLCwuLi4uLi4uLS0tLCwsLCsrKysrKyoqKioqKioqKiopKSoqKiopKSkpKCgoKCcnJycmJiYmJiYmJicnJycnJycnJiYoKCgoKCgpKSkpKSkpKioqKiorKysrKyssLCwsLS0vLy8vMTEyMjMzNDMzNDQ0NDU2NjY2NjY1NjY2NTU0NDMzMjIxMDEwMC8wLy8uLy44LywsLS0tLS0tLCwsLCwsLCwsLCwsLCwtLSwrKzJnhI+doJyZmZGRjJqjlZOmpKWho5KOk4yJi5SCeXl8f355d3R2fHthM3+biExQS0UvJygsLiwsKy4xNjtGQT9DPT88PDs8QUZFeYBzbW+NjIJ8e36EiHJTWlJVV1lmdoCAhoJVPz89QENDQ0M9PTg2NDEwMD1SX3mQjXtwbGpdSkpBNDU3QEpOU1RZWltcXl9iYk9FRkxSW2l7kJmae2JtjJiXmI5cLS0xMzc3NTM1MysrMTQ0OVRfZW14fHVlWUo+NjRATU9OSDYuLD1IV3aMprm+vr++vr6+vry6t7OwrqWEOC40MzQ4VWhnfn96fX6Ch4x7aEdETk5OT3l4a2hqaGdvamRfXVtcWVdYWVdVVlZVVlhZWltcXV1cWlhVUk5JR0dHSEhKTlJWWl5kbHJ3fYCEg4F9enV1dnh6fIGDh4uMi4qIh4eIh4eHh4aGhoKAfXx9fn59fXt3c3N0dHNzcW9qZF1US0NDSlZia3mDioyPjo6LiomHh4eIiIiIiIeCenBjWVRbZG10dXNwbm1raWqMmZKNiouLi4uLioiEhIiQk5ORkI+NjY2Njo+QkJCMiCgmJCUlJSUlJiYmJicnJycoKCkpKSkqKyoqKyssLCwsLCwsLC0tLSwrKywsLCwrKysrKioqKioqKioqKioqKSkpKSkpKCgpKSgoKCgnJycnJiYmJiYmJiYnJycnJycnJyYmKCgoKCgoKSkpKSkpKSoqKisrKyssLCwsLCwtLS0tLy8wMDAyMjIzMzMzMzQ0NDU1NTY1NTY2NjY1NTU1NTUzMzIyMTEwLy8uLi4uLi9NSzAtLS0tLCwsLCwsKysrKysrKysrKysrLCssKis1aHuMoKKhn5uam4mOoo+FoKemopyNiZKPjImOhHh2e318eXZva29qVztdZE5NUE5AKycpKy0vOzEuMDI3SkQ9PT5APj87Oz9ARGp/eHNudZCLgHx8f4KFXlhXVFRbanp9eHiHe00+QEFCQ0dIPTo4NDMxLjA8Ulx4kH90cW1kXUtIPTg3NT9NU1lbXGFhYGFiY11KS05TVFpkdY2bnoF3kaCjoJ2DQS8vMDI1ODo1MS0tLjA0OU1eZXB6hYl/cFlCOjk5RFFXUUIvLzVDTWOGpLm/vr6+vr6+vr27uri1sayooHIwMThHNT5YVm91e398goR7Y4ZuPkhHT1BvfnRtbGhkZWRiYl9bV1VWV1hYVlZWVVVXWFleYF1bWlpZWFNOSklISEpLTVFSVlxgZm11en+BhIF/e3Z0dXZ3eX2BhYmLjIqJh4aHh4eGh4aGhYWEg4B9fXt9fn16d3Vzc3Nzc3FuaWNaUElER09bY3F7hIqMjo6Ni4mJiIiIiIiHiIeGgHhtYlZWXWZudXdzcW9sbWyLl5OOi4mKioqKh4aEgn6Lk5ORkI+PjYyMjY6QkZCOi4cnJiQlJSUnJyYmJiYnJycnKCgpKSkqKysqKisrLCwsLCwsLCwtLS0sKyssLCwsKysrKyoqKioqKioqKioqKikpKSkpKSgoKSkoKCgoJycnJyYmJSUlJSUlJiYmJiYnJycmJigoKCgoKCkpKSkpKSkqKiorKysrLCwsLCwsLS0tLS8vMDAwMjIyMzMzMzM0NDQ1NTU2NTU2NjY2NTU2NjU1MzMyMjExMC8vLi4uLi4sKSwuLS0tLS0tLCwsLCsrKysrKysrKysrKywrKysrNmZ7kaOjm5mam5aRhaKZj5ynnpqalZCTkIuHjIN6dnV5eXhybWVcV1FKUE5OTVBLPCsnKiksMC4rLDM0NDQ1OT4+QEA/PTs9QT9fiXZubG6Fk4d+e32Di3BRUFVeZHF8eHNsfYlrQj9DQkNGRD06NzUyMS8wO01adHp+eHNoXFlTRj4/OjU7UFdZX2RmcXNsZl1YV1ZMTFFZYW+HmaCXm56enZuMYTEzMDE0NjY3NDQyMTAzNklcZW93fIqQjGw6Nzo7PDw+QD03MC83P0Vml7a+vb6+vr6+vr67u7q2s62nnpuWVTBMV0AwQ0JhWW2AfYB4Rk1+Wz9FS05WYF5VUkpJSUpMTVJRTUtKT1NXV1VWVFdZVlRbZGVlXllbX11WUEtJSklLTE9SVVleY2hvdnx/gYOBfnp0c3V2eHt9gYWJjIyKiYeGh4eHhoeGhoWGhYODgH5+fn99enh1dHNzc3NxbmljWlBGRkhQXGVzfYaMjI6PjouJiYiHh4iIh4eGhH92bF9WWF9ncHV2c3Jwa26IlpOOi4uJiouHhYSDfnR+ipGRkJCPjIyMjI2OkJGOjYqGJycmJicnJycnJycnKCgnJygoKCgpKioqKSorKywsLCwsLCwsLCwsLCsrKysqKiosKysqKioqKioqKioqKSkpKSkpKCgoKCkpKCgoKCcnJiYmJiYmJiYmJiUlJSUmJycnJiYnJygoKCgpKSkpKSkpKikpKiorKyssLCwsLC0tLS0uMC8xMDIyMjM0MzM0NDQ1NTU2NjU1NjY2NjU1NTU1NDMzMTExMTAvLy8uLS4uLS4uLS0tLSwsLCwsLCwrKyopKioqKioqKioqKikqKTZqhpefmpeNlZqSkYmdnZuXmZuYlouIjpOMjIuEeXp7fXdwYmdhUEVLUU9OT1FMSjwnJigpKy0qKSosKy8zMTYxOT4+QT49Pz4/UId1b25scoyPg3x+fISCVUFTZHB5enJlWWB4eVxDREI/REg+Ojc0MzEwLzpMYIOOjYVtYVZUU0ZCQj44PFNYW2FobnZ/hn95d3J2Z2JmZWdpeI+bmJqZl5SRhm5ENjY2Nzk4NjIzNDQ1M0VgZmx1fIOMkY1iMjc3NjU1Njc1MzAwNDdCday6vb6+v769v72+vLq4tbKroZeSkH5NS1VUMTlUalhefX5+gHp5g3dNRU5OZVdTVFJQVVlWWFdWUU9OTU9XVVRWWFtcW1RXWlxiXlpaYGRkZl1PTEtMTE1RVFhcYGZqcHZ9foCAf3x5dXR0d3h8f4OHi4yLiYiHhoeHhoaHhoaGhYaFgoJ9f35+fXx5dXZ0dHNxcG1nYVpQRkVJU15odn+GioyPjo2KiYeGhoeIiIiIh4N8dGpdV1lhaXJ2dnRxbG2HmJGRjouJiIiHg4KFfGpugIuRkI+Pj4yMjIyNjpCSko+KhScnJycnJycnJycnJygoKCgoKCkpKSoqKikqKyssLCwsKysrKysrKysrKysrKiwrKyoqKioqKisrKioqKikpKSkoKCgoJycoKCgoKCgnJyYmJiYmJiYmJiYlJSUlJSYnJyYmJycoKCgoKSkpKSkpKSkpKSoqKysrLCwtLCwtLS4uLzAwMDAyMjIzNDQ0NTU0NTU1NjY1NTY2NjY1NTU1NTQzMzExMTEwLy8vLi0tLS0uLi0tLS0sLCwsLCwsKysqKSoqKioqKioqKiorKy82a4yZmZaci4+Yko2CkpWYmZaXk4yDhIKKhoODiHp/enRuaWFqY0s5Q09PUU9QT0g4JygoKSoqKikqLCsuNTtKRzk6QEA9Pjw5O0J6gnd3dXeDkop/fn+AiHFYYWh2e3duXEc+SFplV0VDRUNAQDk3MzEvMC07SWCKm52MY0dTVFZIREdDQ0hSWF9oam6AkJGJg3dmXmVsZ21ydXR3goeMjomEfndwVj06OTg5ODU0MzI1ODpZdHR1eIGDh42JYjY3NTQ0MzAyMC4uMjY2RXGftLu7vb68vLi0trq6ubOupJmRjYyGWlJMVVIxNE1PPWiAf4CBfHx4blRLTExNTlBNT05MRExYVU1FQ0NFR1ZSUVtZU1lXY2VlbWtoaGZtb2heUU1MTk5PUlVYXGJobnN6foCCgn56dnRzdHd4fH+Dh4uMi4mIh4aHh4aGhoaGh4aHhoSCf39+fn59eXVzcnJwbm9tZ2FaUElITVdga3iBhoqNjo6NiomHhoaGh4eGhoSBe3NpXFdcY2tyd3dxcGyDlpKOi4qLiomHhIWBfGRkdIOPkZCPj4+MjIyMjY6QkpCMiYYoKCgoKCgoKCcnKCgoKCgoKSkpKSkqKioqKSosLCwsLCsqKysrKyoqKioqKSgrKikpKSoqKSkpKSkpKSkpKSkpKCgoKCcnJycnJycnJiYmJiUlJSUlJSUlJSUlJSYmJicmJiYnKCgnJykpKSkpKSkpKSkqKisrKyssLSwsLi4vLy4vMTAxMTExMjM0NDU1NDU1NTY2NjY2NjU1NTU1NTQzMjIxMTAwMC8uLi4tLS0tLS0tLS0sLCwsKysrKyoqKioqKioqKioqKioqKjBAPmiNmJOWmo+RlpCVjJebmpaLhoeJg4SBhYV/gYp9eXFxcG1sZ2NUSktLTU5RTkpINycoKCgpKSsoKi4sKyw3UD04Mzw6Pz89PDk7bI2Cgn+BiI+ShH5/goSCWWl0eHp4aldEOTc6S2FUQj9DQ0NBODQxLy4uPEtadpieiFJHR1dYTUhDQkxMVltcZXWFj5ack3tgU01ieYGDioyOhXRpdH98dnNtaGFTQDw7OTg3NjY2NTY6VXd/fnt/hIWIhmM6ODYzMjAwLy0uMDQ5PEpVb5GkrLO2saedlpqorrCvqJ6Si4mKh1hJSkdXSTA3RTRLdHl9gX93ZYFwPkxQXmNdX2BWUkhaaGhsa2VbU1VnUkdYX1pjaWFbZ21sY2BYa2xeU09PT1BQUlVWWl5iZ251en2BgoF9eXZ1c3Z4eHx/g4eKi4qJiIeHh4eGhoaGhoaHiIeFg4GAgH9+fXl1c3JycG9tamdfWVBJSlFbZXB5goeKjY6Ni4qJiIeHhoeHh4eEgHpxZlxYXmZudXZ3cnB+lpONi4qKi4mFhoODe2ReaXeDjZCQkI+NjY2Ojo2OkZGPjImIKCgoKCgoKCgnJygoKCgoKCkpKSkpKioqKikqLCwsLCwqKysrKysqKioqKikoKyopKSkpKSkpKSkpKSkpKSkpKSgoKCgnJycnJycnJyYmJiYlJSUlJSUlJSUlJSUmJiYmJiYmJygoJycoKCkpKCkpKSkpKiorKysrLC0sLSwsLS0uLzEwMTExMTIzMzM1NTU1NTU2NjY2NjY1NTU1NTUzMzIyMTEwMDAvLi4tLS0sLS0sLCwsLCwsLCsrKysqKioqKioqKioqKioqKiosLjBhhpKQlJaNjpWVlZebm5iWiIeAjo2Dg4uIgYKLhXd5d3ZybWVeVU5MSUtOTk5LSTopKCgoKSkqKistLS0sLzMrMFZEQj0/QD47PVyTjImGhouPl42AfYKBh3Fyd3d5dGdUQzg1NDhMWk9EQUZERD01MS8vLjxNZXqVmXM0QExOUExBPD9CU1hdZHCFmJ6dloF0dW1dUmJ4fIqfmpyUe25ydHJsZmNbWVBEQT49Ojk3Nzc5Ok12hICAhIeFf4BnPDc1NjMxLy4tLzM5O0NVX2Zrc3uLlZWKfXeAkZqbnZeQi4eHhn5aRERJS1FQPDxNbX13eH5+bF+JgkNNWWNjZWtoWVBcZmxtbW5sZ2FgWFBKTVtaXVpWT1ZiZVVIQV1kV1FRT1BQUFJWWFpeZGlvdnt+gYKBfXl2c3V3eHp9gYWHiouKiYiHh4eHhoaGhoaGh4eIh4OBgoJ/fnx4dXNxcXFvbWpnX1hPSUxTXWdwe4SIi42OjYuKiYiHhoWHiIeGhIB5cGZcXGJpcHd2dXF5lJSPi4mJiYeIhYSEemReYGp2hI2Oj4+Pjo2NjIyNjpGRj4yKjCgoKCgoKCgoKCgoKSkpKSkqKioqKioqKisrKysrKysrKysrKysrKioqKioqKSkoKCkpKSkpKSkpKSkpKSkpKSkoKCgnJiYmKCcnJiYmJiYmJSUlJSQkJSUlJSUlJSUlJSYmJicnJyYnJygnKCgoKSkpKSoqKyssLCwtLCwtLi4uMDAwMTEwMTExMjMzNDQ1NTU2NTY1NTY1NDY1NTU0NDQyMTIwLy8uLS0tLS0tLSwsLCwrKysrKysqKisrKioqKissKCopKSoqKiopKSksWn2LkJSQjouQj4ycnpyZnJWJioyRkouHioOCi46AfXh2dG1kXVJFPkJHTU1LSEg+LSgnKSooKCkqLS4sKygpLC46Q1A7Pz0+PD5KkJGKh4aMk5iViH5/goV/ZHV4dnBjTz43Nzc6RVZcTz8+Qj9AOjQwLi86S2eEkpdoLjZRZFRIQj4+QUVbYWR7kZ2dl4J2eHtwfpSWi4CapKKioJN+cm1oZ2RfWlpUT0lCQD49Ozk4OjRbiYh3e4GFgnx7akQ2NjQzLy4uLzE1Oj9QaH1+eXdtYV9iZWNkbHiAg4eIg398e25jWT9ANzw3RVpCQWJ2eHV8goBkTGBPTWlqZ2dgXltfaGptbG5ua2hhXl9fV1laWFVXXF1hamhCMDhXb1dRUVBRUVFTVllcYGRqcHd8gIKCgX15dHR2eHl8f4OIioyMi4mIh4eGhoeHh4aHh4eIiIeEgoKCgX99eHV0dHRxb21qZV5WTUlPVmBpdX6EiIyOjY+KiIeGhoeHh4eGhoN/eHBkXV1ka3N2dW91j5aOi4iHh4iHhoSDfmdfX2VueoSJioyMjo6Nj4+Njo6Rko6KiZEoKCgoKCgoKCgoKCkpKSkpKioqKioqKiorKysrKysrKysrKyoqKioqKioqKikpKCgpKSkpKSkpKSkpKSkpKSkpKCgoJyYmJiUlJSYmJiYmJiUlJSUkJCUlJSUlJSUlJSUmJiYnJycmJycnJygoKCkpKSkqKisrLCwsLS0tLS4vLzAwMTExMDExMTIzMzQ0NTU1NjU2NTU2NTU1NDQ0NDMyMjEwMC8uLS0tLS0tLS0sLCwsKioqKioqKSkqKikpKiovMikpKSkoKCkpKSkpLFBtfY6MjY2Oi4iJm5uanJiHh46NkI2JioeBg4mRg3h3d3RvZV9VREBDSk5JS0hGPS0oJykqJygoKCosKysuLTMrKS44PD4/PDo8QJCTjIqOkZWWl4p/gH+Fimlud3VwYExCODg8RFpmX1RNREJAPzs1MS8vO0hbfZKSWTJTcnhgTEVBP0BBT2Zud5WfloJzgqWrn6WmppuXrrCqpZ2Xh3tyaWVgXVpWUk5LRUE9PT4/Pz47WoWPfnN3foB7eG5RODc1MzMwMDE1OD9CVnaMjY+Oh31pWlZST01UW15gZGBdXFpidFlCPz1CND1BSzdLZWdueoKFaCZicVNaXWRrbGZoY2Job3BwcGtnZF9fXFpYWVlZWlRUXF5YNigxT2FVUlJQUVFSVFhaXGBma3J4fYCDg4F9enZzdXh5fH+Eh4yLi4qJiIeHhoaGhoeGh4eHiImIhoaEhIF/fXh0c3NzcG5saWVeVk1MUVhha3Z+hIiMj42NiYeGhoaHh4eHhoaDf3dvZF5gZ25zd3R0ipWRi4eFhoeIhoOFf2ljY2JmcX6JjI2NjY6OjY2Ojo6OkJGPiI6UKSkoKCgoKSkpKSkpKSkqKioqKSoqKioqKioqKisrLCwrKyoqKioqKisrKSkpKSgoKCgoKCgoKCgoKCgoJycnJyYmJycmJiYmJiYmJSUlJSUlJSQkJCQlJSQkJCQkJSUlJiUmJiYmJicnJycnKCgoKCkpKSopKywsLCwsLC0uLi4vLy8vMDEvMTEyMjI0NDU1NTU2NTQ0NDQ0MzMzMzMyMDEvLy8uLi0tLS0sLCwsKysqKisrKysqKioqKioqKioqKikpKScnJycnJycoKStJa36PhoSHiYWCi5iSi46MfYeLjImIiISBgICFkoFxdHlzbGhhU0xIR0Y8QElHRTwvKCgpKikoKCoqKywrLSwtLSosLzU0PTw3O0yWl5CNi5KWlZWThoCBg4eCcnV1bVtLPDg3RF9scmhdV09GQEI/ODEwLThEX3KMiFBOd4yDb1NKSEFBPk5VZXyFjYuSoK21srKyrKWgnK6zrqSfjn99c2xlY15ZV1hUTUhCQEBCQ0JAQ2KChoJ4d3x9eXZvW0A6Ozs8NzI1NzxARVt4ioyRkZGPgnFqY1xWU01HRkhITFhnc29MR0k+Rzg+RURHP0hXYXmBgDhFkpKASVhWUVZja2JdbG1xdHFtaGRgXVtaWVhYWVpXWl1cVkU/TFdZVVFQUVBSUlVZW19jaGx0eHyAgoKAfXp4d3Z6e32AhIeLi4qJiYiHh4aGhoaHhoaGh4iKiIeFg4OBfnp3c3Nzc29ubGdkXFRNTlNbY214gIWJjI6Ni4mJiIeHh4eGhoaGg353bWVgYmhvdnVxhpOQjYuJiIeIhoWIgWtlZWJiaHaCjJCPj4+NjY6MjY2OkJCQjI2VlSoqKikpKSkpKiopKSoqKioqKikqKioqKioqKioqKisrKSkqKiopKSkqKikpKSkoKCgoKCgoKCgoKCgoKCcnJycmJicnJiYmJiYmJiUlJSUlJSUkJCQkJSUlJSUlJSUlJSUkJCQmJiYmJycnJycnKCgpKSkpKSssLCwsLCwtLi4uLy8vLzAwMTAxMjIyMzM1NTU1NTQ0NDQ0MzMzMzMzMTAvLy8vLi4tLS0tLCwrKysrKSkqKioqKSkpKSkpKSkpKSopKSYnJycnJycnKCkrPHODi4qGi4J6fo6Wj4yQi3qCiYZ/fm52hoSDiJB9cXFxcW9jWVFPTUhGQEFKRUM+MCcoKSopKCcrKiorLCopKikrKy0uMTc6QEtrnJmRkJGWmJeHko6DgoSHiHVydG1bSUNDQ0pXZW9rYFVQUElBQUA6NS8yQ1txg3lOY4ePgnp6ZUc9RT5OVlBdeYqWpbGztbOwraukm5SqraahopaHf3RuamRhXGJwZ1xRSEVERERERFB8kpCDe3qBfnd1aV9cWV1cX1A0ODs+QUJXb4KFipGQjIF5d3VwY2NhXVxbXmFmbXBmQkE9QEJDO0xBSUc/Umd2gHBlipONhFBQV0tKVk9LV3FycnRxbmllYV5cW1tZWVtcXFxcXFhWWltYVVVTUVBQUlJVWFxfY2luc3d8gIKCf3x5dnd4e3x9gISHi4uKiYmIh4eGhoaGhoWGhoeIiIiGhoODg396d3NzcXFvbmtmYlpTTlBVXWVxfIKHiYyOjYmIiIeGhoaGhYWFhYN+d21kY2dpcndyfJKRjYmKioqHh4SHhXJoaWZiYmp4hY2QkI+Ojo6Ojo2NjpCRkIyRmJUpKSoqKiooKioqKigpKSsrKiopKSoqKioqKisrKioqKioqKSkpKSgoKCgoKCgoKCgoKCgoKCgoKCgoJycoKCcnJiYmJiYmJSUmJiclJSUlJSQkJCQkJCQkJCQkJCQlJSUmJSUmJiYmJiYmJycnJycnJycpKSgqLCwrKywsLS4uLi8vMDAxMTEwMTIyMjIyNDQ1NTU1NDQzMzIyMzMyMjAuLy4uLS0tLS0sKysrKiopKSkpKSkpKSgnKCgoKCkpKSkpKScnJycnJycnJigpLDJri42KjIqDeoSMjY6QlYp9fYaCc2dkfomGh4qOcV5fXmBnZFFRU1VNTE5OSkZFPzEnJykpKSkpKCsoKSwqKyorLC0sLDA0N1V6kZ2VkpSVl5abeoqWiISGhomDfH97dnFzc3V9iI+LgmpZW1pVTkdGR0E3Mj9OanhsXISVl4mEi5F0TEA+SlVMUm2Mnqixs7CsqKOjpKKfo5yVkpGPjIBzbWtobW1qc2pjWlNLSEhJQ0JOfZSYjoKBgH13cmlpb3R6enZlPTY4Oj5CTmF6gYaLhHp4e3t6c2ZkamdgXF9mZ2puWltbWDk2Oj5NS0NGRE9geXxbcoySjYRUR1JLNkdNZWxwcnRzcW9rZV9dW1taWlpcXFtcXVtaXFpXV1VTUVBQTlJSVVldX2NqbnJ2fICCgoB+enh4eXt8foGEiIuLiYiIh4eHhoaFhYWFhoaGh4iIh4aFg4B+eXZycXFxb25sZ2NcUlBUWV9ocnyDh4qNjY2KiYiHh4eHh4aGhYWEfndtZmVnbXV2e5CRjImJioqIh4aIhG9paWlkYmVveoiPkZKOjI2NjIyMjY2PkJCOlpaVKSkpKSkpKCoqKiorKysrKyoqKSkqKioqKioqKikpKiopKSkpKSkpKCgoKCgoKCgoKCgoKCgoKCgoKCcnJycnJyYmJiYmJiUlJiYlJSUlJSUkJCQkJCQkJCQkJCQkJSUlJSUlJSUlJSYmJicnJycnJycnKSkoKiwsKyssLC0uLi4vLzAwLy8xMDEyMjIyMjQ0NDQ0NDQ0MjIyMjMzMzEwLy8uLS0tLS0tKysrKyoqKSkoKCgoKCgnJyYmJiYnJygoJycnJycnJycnJyYoKS8zTomQjIiFgHyChouSjIuId2lubmZ0go2Lh4qLimFPT1BUVl9dT01PTktKS0hHRT8xJycpKSojKisqKicmKCsrKyorLCsrLkFukpqalJKTlZeWlXp/lY6Ig4aIiYeGkJKUlpWSlJeXkol1UlBSWFJNR0VKQzY0Sm2Id3uUmZuRkp+jn4VoaVpPQE1mkKuwsLKtpaCgnaGspI6PoKOkpKKek2lbZG+AdnFuZl9TSkhLS0dCQF2MmI6BgoB4dXh4cXaAiYR/c1A0Njs/P0RTaXl/fXFscXVzcW1nY2dmX1tfY2JnYlxgc2VCNzs9PkZKUUc7Tnh7ZHuLjYqCXElPPitAVF1kcXFyc3NvbGZhXVxcW1tbW1pbW1xcXFxaWFVVUVBQUE9QUlVZXV9jaGxydnl+gYKAfnx5eXt7fH6BhomLi4iIh4eHh4aGhYWFhYaGhoeIiIeGhYOAfnp2c3FxcW9ubGdiW1JQVFlgaXN+g4eLjo2NiYiHhoaGhoaGhoWFg313bWZnanF1e42RjYqLiouKh4aGh3RqbmxpZWNncX6Jj5KRkI6Ojo2NjY6OkJGNkpeUlCoqKSkpKSorKyoqKisrKysqKikpKioqKioqKSkpKSkpKSkpKSkpKCgnJygoKCgoKCgoKCgoKCgoKCgnJyYmJiYmJiYmJiYmJSUlJSUlJSUlJCQkJCQkJCQjJCQkJCUlJSUlJSUlJSYmJSUnJycnJycnJygoKSkqKikrLC0sLS0uMDAwMDExMTAxMjIyMjIzMzMzMzMzMzIyMTEyMzIyLy8vLi0tLS0tLCsrKioqKikpKCgnJycmJycnJycnJycmJicnJiYnJycnJycmKCwxO0Vrho2HhYSDhoOFi4iCg4SCh4Rxdo2NiYyOjoJbTkxUWFRHV2JbT05OS0pLRkM9LyUnKCosSW04IygsLCkpKywsLi8uLzJUgJigmJKSlZqWlo9+e5GViYSEiIuIeo2SlJiZl5aXl5eWhWBWWFhaXFVKRkdCOj5hjYmTlZeWmqSlpKCThpOahl9AT4ymrrCvraKcnp2goo+KpKWmpaCfnZRbPEpgeod+c2xlWkpGSExLR0FEb5OQdXqFhIWDf31+gYiGgndhNTU6PD1ASFVmbGtjZ2lmYGBgW1lcXVtaW19gX0pRXGdgSTpDPzdBQ0ZSR0hleH+EiIuFfVJKVD0tR0EwNWV1c3NxbmpmYV5dW1paWltbWltcW1tcW1pWU1JNTU5OT1JVWl1gY2VqcXV6foGCgH58enp8e31+gYaJiouIiIeHhoaFhYWFhYWGhoaHiIiIhoSCgH15dXNzcXBwbmxnYFhUUFdcY2x1foSIjI6NjIqJh4aGhoaGh4eGhIN8d21nZ250eoqTjouJi4yKh4SGhnZsbG1saWZmanWAi5CQj46OjY2MjI2Ojo+QkJaWlJIqKioqKioqKisqKioqKisrKiopKSsrKioqKikpKSkpKSkoKCgoKCgoJycoKCgoKCgoKCgoKCgoKCgoJycmJiYmJiYmJiYmJiUlJSUlJSUlJSQkJCQkJCQkIyQkJCQlJSUkJCUlJSUmJSUlJiYmJiYmJycoKCgpKSkpKywtLC0tLi8vLy8xMTEwMTIyMjIyMzMyMjMzMjIxMTExMTEwLy8vLy0tLS0tLSwrKyoqKSkpKScnJiYmJicnJiYmJiYmJiYnJyUlJycmJicnJykxOEVZcnV9hYKCiIN+e3qAfIaYoZ+fkpOUjIyNj4lwV09RXWNaWFVpaV9MRkxLSkdDOi0kJicpKTk9KCYnKCgpKCovMC0wLy09YX6bn5SSlJeXlJSIfH2Dlo2Dg4SIjIKBjZGVmZaYmZmZnZJyV1taXV9gWU1EREFAbo+SkpCXlpikqqaagXOFmqCljGBsm6qsrKmfmZmZnJR/m5+Wl5qamJSNWTxBSnKVkH1waWJUSkhGREVIQVB9kIWAh4uMjIiBgIGDfnt0Zz4yNTc8PEFGUlxdW15gXFZZWVRPU1RXWFpdV0VCTFVfbGE5OzYzMT1ZW2VXVnCAhoeGg4VjSUpFOD1AND1mdHR0cm5pZmFeXVtaWltbWVtbXF1bW1pZVVNQT09MT1FSVVpeYWRnanB0eH2Bg4KAfHt8fHx9gIOGiYmJiIiHh4aGhYWFhYWFhoaGh4aGh4WEgn98eHRzc3FwcG5pZmBYUlFXXGRudn+EiIyOjYyKiYeGhoaGhoeHhoSDfHdtaWltdYyWj4uLiYqLiIWFh3xsbW9ubWtoaG53g4yPkI+Ojo6OjY2Njo6OkJOXlJSSKioqKioqKioqKisrKysqKioqKiopKSoqKikqKikpKSkpKSgoJycnJycnJygoKCgoKCgnJygoJycnJiYmJiYlJSQkJSUlJSUlJSYlJSUlJSUlJSQkJCQjIyQkJCQkJCQkJSUlJSYmJiYkJCUlJiYmJycnJycoKCkpKSsrKywsLS4uLi4wMTExMTExMTMyMjExMjMyMTIyMzMwMDAwMDAuLi0tLS0sLCwrKisqKikpKSgnJyYlJiYmJiYmJSUmJiUlJSUmJicnKCYnKSorN0ZbdXt0ZG1xdHh1bGxrbHOAnKKkoZSVjoqMkI16XldZXWFiYV5mZ2xwX1tTTUhIQjcqJycnKCgmJycnJycmJygoKistLyw1TGR4kZyXk5SYlZSRg358fY2TioaChYmQf3yDiI6SlZeYl5eKcmRhY1xbX11WSkJAP16SlpGNkpKNmZ2SgWhbcZehpqiZfZCepamkmZaVlJeOjpuVlJSTlZaThVdBQ0phnJeJe3FqYlFHQkFGSERAYYGUkIiQk5CMhYCDgHh0b2hILy8yODs+QENKUlRXWFdVVFNQTlFTVFdZUDorPEhOT1NNQEc/OTRAV0pRT05bcHuEi4mEZUtDRUAzOEVecHR0c3FuaWVgXVxbW1xcW1paW1paW1paV1NQTk1OTk9QU1ZaXmBjaGpvcnd8gIGDg4B+fHt8foCChYiHhoiHhoaGhYSEhIWFhYeHh4eHhoeFhIKAfHh1c3JxcG9tamVfWFNSVl5lbniChYiLjY2LiomGhYaGhoaHh4aFgnx2bmtrb4WUkYyLi4mKiYWGioFubW5vbW9uaWxxeYSOkI6OjIyNjYuLi46PkJGWlZSRjioqKioqKioqKiorKysrKioqKioqKSkqKikpKSkpKSkpKSkoKCcnJycnJycoKCgoKCgoJycnKCcnJiYmJiYmJSUlJSUlJSUlJSUmJSUlJSUlJSUkJCQkIyMkJCQkJCQkJCUlJSUlJSUlJCQkJSYmJicnJycnKCgpKSkrKyssLC0uLi4uMDExMTExMTEzMjIzMzIxMTEwMDAwLy8vLy8vLS0tLSwsLCwrKikqKikpKSgoJiYlJSYmJiUlJSQkJSUkJCYmJSYmJSYoKiotNUVZbnFhYFtYXmNkXFNYW1xdc4+hmJSUkImMj46AYFVXZWlpZGZkZ2hyenFtaGVdS0EwJiYnJycnJicnJycnJicoKCorKywvOlZodJCWkJOXmJSSjn55eXmFlY2GhIGDiI6FiY2QkpWXloyIdWpnZmZkYF5cWlFGPTtbj5aRio6MiImCcGZhXGWNo5+cmI6NlZ+inZaWkpGJh5eSk5OSkZGQkYh7Z01OZqajlYt6b2VVSERVdImAaGp5jpeSkpSQiYJ/gHlya2lmUS8sLi81ODs9QklNUFFRUFBRT05QUlNRQzAwPj84Oz46P0NDPT49QUpHSVhbSl5rgYqGg3VYRklSRDxOWWx0dHNxbmlkX11cW1tbW1taWltcXFpYWVVST05NTk5OT1NWWVxgY2ZobXJ2e3+AgYGAfX1+fn+Bg4WIh4eHh4WFhYWEg4SEhYWHh4eHh4aHhYSCgH15cnJxcXBvbWlkXlhVVVheZ3B4goWIi42MioqJh4aGhoaGh4eGhYB6c25tbICTkYuKiYmKiYeFiIdxbnFwb3BvbWpsdHuIjo+PjoyMi4uKio2PkJKWlZSTj44rKysrKysqKioqKysrKyoqKioqKikpKSkpKSgoKCkoKCgoKCcmJicnJycnKCgoKCgoKCcnJycoKCYmJSUlJSUlJSUlJSUlJSUlJSUlJSUkJCQkJCQkJCMjJCQkJCQkJCQkJCQkJCQkJCQkJCUmJiYnJycnJygoKCgpKysrLCwtLi4uLS8xMTExMDAwMjExMjIxMC8xMC8wLi4uLy8uLS0tLCwsKysrKykpKSkpKCgnJiUlJSUkJCQkJCQkJCQkJCQlJSYmJScmJiouNEJacnpqYl5WV1lcWU9DS1FUWm2Hl4aHko2MkJGBZ1VSW2liZGpoY2RqdHB1bXBsd3hnRCUnJionKCcmJycoJyYpKCkoKisuN0VWZnSUkpGUlpSQj4uAf3x/hJSQh4KCgIaLi4OQlZKTk5OHhIOCg354eHZwYl1aUUg/P32bkIqKiIR8bVxfYF9jeJWZoqaeiHqTmpeSk4+Hc4aNiJGVk46LioqIgHxgVHmqo52Vh3ZrXUxES114i5KRfo+bnZiQjYmCfHh0bmZhXlY0LS4pKi4zODxCRkpNTU1OTU5PS0g/MywvN0JGNz9GRkBLT0xJPkJNSUBMUlRfYnSGhYF4S0FKWmFQWm9wcXNzcW5qZV9dW1paWlpaWlpaWlpaWFdUUE5NTExNTU5SVVhcYWNkZ2pxdXp+goODgH1/f39+goSIiIeHh4aFhIWFg4ODhIWFhoaHh4iHiIWDgX57dnNxcXBwbmxoZF1YU1ZcYGhyeYKGiYuMi4mKiYeGhoaGhoaGhYWAeXJua3eMkIyMioqKioiHi4l1bG5tbnBwcG1vdHyBio6NjY6NjIuNjY2PkJKUl5STko+NKysrKysrKioqKisrKysqKioqKiopKSkpKSgoKCgoKCgoKCgnJiYnJycnJygoKCgoKCgnJycnJycmJiUlJSUlJSUlJSUlJSUlJSUlJSUlJCQkJCQkJCQjIyQkJCQkJCQkJCQkJCQkJCQkJCQlJiYmJyUlJycnKCgoKSsrKywsLS4uLi8wMTExMTAwMDIxMTExMTAyMS8vLi0tLS4uLSwsLCwrKysrKiopKCgpKCgoJiYlJSUlJSUjIyMjIyMjIyMjJSUlJSUmJycsMUBWdXx1Zl5XWWZkV1FMRUlWVVxkeHt8io2Kjo6GbFpdYGtnaWtubGJob3Brb3BzaG1ygXxkPB8pLCwpKCkpKCcnJycoKCoqLTtOWmJ4k4yOlZGQjo+JfIWGhYaPlIuEgoB/hYyEfIuRj5KRlJqhnZecn5iPfmhdXFlQSD11nJWNioh/blpgcHBrbnCCkJWdpqGNiI+OjY6NfnN/gomPj4R/goaIhH5+cGiDpZyZlYl5b2NSRENIbo+QjnmPmp2bkYyJgXlza2ZeW1pWQCwrKCcpKSsvNDc5PD8/Pz88ODEsKisuMzVFVT42Oz9FSUs/QlFOSjxMTE5VVl9oeYKEcjw9RVJiW2BvcHFzc3FuamVfXFtaWlpaWlpaWltcWVdVUk9OSklJS0xOUlVZXWBiZGdpcHR5fYGDg4GAgICAgYOEiIqIh4eGhISEg4ODg4SFhYaGh4eIiIeFg4F+enZycXFwcG5saGRcWFVXWmFqcnmChomLjIyKiYeHhoaGhoaGhoaDfndxa3GJjIyKiYqJiIeGiIp7bXFxcnJ0dnZ3eH2EiouNjYyLi4yNjpCQkpKTlpSTkZGQjisrKysrKysrKysrKyoqKioqKioqKiopKSgoKCgoKCkpKCgpKScnKCcnJycnKCgoKCgoJycnJycnJiYlJSQkJCQmJiUlJSUlJSQkJCQkJCQkJCQkJCQkIyMkJCQkIyMkJCQkJCQlJSQkJCQkJSUmJiYmJicnJygpKSorKysrKy0uLi4wMDAwMTEwMTExMDAxMTExMC4tLS0tLSwtLi0sKysrKyoqKSsrKSgoJycmJicmJSQjIyQkJCQjIyMjIyMkJCUlJSUmJigrMT1Vcnp2c2dVUV1xdGNdXVFJSltiY3Nwg4qGh4yIcVNQV2x1bXBtcG5tbXNtb2pydG1mc3J+i4FgNyUoKyorKyooMTktKSgoKS47TVpjhY+IjI+MiYaLiYiHjYuIjZWRiIJ9fX2EiWxIWGJmd5OZnKWmrKqmmYp3YV5aU0xJapiYkI2EfXJbc4+JfHl6gIKAkaGjl4iKiIaHhnlvcHyHi4R+hJCZn52TgnZ1gpuVko2GenFqYFBDVH2Kh4BzhZGYmJCMhoB1bmhhWldRTkYwKSgoJygnJicpKikpKCgnJicpKysuMTY4PUVKTkQ+Oj08SFhVSEk6ME5NRUNSZGp9e2ROQkJDTVZgbnJyc3JxbWlkXlxbWlpaWlpaWlpZWVdVVFFPTUpKSUtMT1NWWVtgY2Vla25yeX6ChISCgYCAgIGEh4mKiIeHhYODg4OCgYOEhYaHiIiIiIeHhoOBfnl1cnBwcHBva2hkXVdVWl1ia3R8goaKjIyLiYiHhoaGhYWGhoaFgn13cW+GjYeIiIiKiYiEhYmCcXJ2enx8foCDhISJjI6Oi4qMjY2Nj5CRkpOTkZSSkJGQkI8sLCwsLCwsLCsrKysqKioqKioqKioqKSkoKCgoKCgoKCgoKCgnJycoJycnJygoKCgoKCcnJycnJyYmJSUkJCQkJSUlJSUlJSUkJCQkJCQkJCQkJCQkJCMjJCQkJCUlJCQlJSQkJCQkJCQkJCQlJSYmJiYnJycoKSkqKysrKystLi4uLy8uLzAwLzAxMTExMDAwMC8uLS0tLS0sLCwsLCsrKioqKiopKCkoKCcmJiYmJiQkIyMjIiMjIyMiIiIiIyMlJCQmJycoLTZObHp1cXhzbnZ3d3VpYlxHL0Bqb3N9boiNhomJfVhHTll1cXN/dW1rc4V2Z2dtdn52Zmx5doWNjH9hNyQoKysrKjA+MCcpKSktO05aaYyJhomLh4aEhoqGg4eLkY+Yl4uBe3p2en+IYDVPWWZxeJKlsLCxqaGYhm5jXlxQSWOTmZOViYR2XXWSlI2LjIiEiJScoJV6eH6CfXh0cYGSlIJtdIeYoqqmoZaBfoiPkIuDfHZxbGRYRWeFiYqFfH+Qk5SNhYB3bmdiXVVPSUM6LigmJyYmJiYmJygoKCgnKSoqKiosLjE2Oj1DRExIRzw1OU5HPDtARzozQUlIVGR3gnZlXFZraFFWXWZxcnNycW1pZF5bWlpaWlpaWlpaWVlXVVJPTktKSkpLTE9TVlleX2JiZGhscXh9gYODgoGAgIKDhIeKioeGhoWFhIOCgYGCg4WGh4iIiImIh4aEgX15dXJwcG9vbWpmYlxXVVlfZm11fIKIjIyLi4mHh4aGhoWFhoaGhIF7dnCCkIuHhYmIiIiIh4mKe3l/g4aHiYqLjI2Njo6OjY2NjI2MjI2OkJGRkZGRkJCQj5CQLCwrKysrKysrKysrKiorKyoqKiopKSkpJycnJycnJycnJycnJycnJycnJycoKCgoKCgpKSgoJycmJiYmJSQlJiUlJSUlJSUlJSUlJSQkJCQkJCMjJCQkJCQkJCQkJCQkJSUjIyQkJCQkJCQkJCQmJiYmJiYmKCkpKSosLCwsLS0uLi4uLi4vLy4vMDAwMC8vLy8uLi0sKyssLCwsLCwsKyopKSkpKCgoJycmJiUlJSQjIyIiIiIiIiIiIiIiIiMjJCQlJSUoKzVGZHl4c3d8fHp6e3Z0al9VRTxKZHJ5dXGJiIaGhGxNT11pcHN6eHdybXGAdHFqZ255en1qb3p1eoSBgnhaLisnKigoKSkpKysrLkBQWXCNh4aCgoKCfX6Bg4iKh4OQmp2ThHp3dXN5g4tcR0pSWmuHn62xrq+pn450ZGBaVE5hkJyTlYiBdF52k46MkpSOhYWNlJmNcGh0eGt0laSqqJ2CWlBZa4SXmZSQipKZk4qDenRxcG5lWEVngoWKi4d+jIuNhn93aFtTUE9KQjkuJyQmJCUlJCUmJSUnJygnKSgnJyktLi83OTIzNjc/RlJENTY0Sk9KWT4zKzE/UFtjYl5qalZXaXJkXFtgbHFzcXBtaWReW1paWllZWlpZWVlZVlRRTUtKSEhKS01QU1ZaXF5gYmRna3F2e4CDg4GBgYGDhIaJi4qIh4aFhISDg4GAg4WFhYeJiIiLhoeFhIB+eXNycXBvbmxpZWFcWFZcYGZtdHuBh4qMi4uJhoaGhoaFhYaHhYOAe3B+kI6LiIaGh4eGh4iMhYSIjI+Pj4+Pjo6Ojo6PjoyNjIyMi4uMjY6Pj4+Pjo+Pj4+PjywsKysrKysrKysrKyoqKioqKioqKSkpKScnJycnJycnJycnJycnJycnJycnKCgoKCgoKSkoKCcnJiYmJiYmJiYlJSUlJSUlJSUlJSUkJCQkJCQjIyQkJCQkJCUlIyMkJCUlJCMkJCQkJCQkJCQkJiYmJiYmJigpKSkqLCwsLC0tLi4uLi4uLy8uLzAwLy8vLy8vLi4tLCsrKysrKysrKyopKSkoKCgoJyYmJiUlJSQkIyMiIiMjISEhISEhISEiIiQkJSUlKjBEYnh3cXZ8fn98enh0cGhcUEhRYWp9fmp3ioKDgnpXUVdxeW1ye3FxcXV5dHd1gG9wfnl0b191cmJtioyNjnJOMygoKCkqKisrKzRHVF54ioWAgYF/e3B0eHx9gISEjpeZlYyAdnBtcXqBhFc6T11zh5+tsKyup4pdSU1OUU5OX42amJqQgGpQXIWJjI+OioiBhY6Te2prb3iAlaerp6OXe1NKSkdZg5iQhIqal5OIfXNvbm5vZlBBXYKOjo2Fe4KAhYB0Ykc6NDM0Mi4oJSUjJSUlJCQkJSQlJSUmJScoKiwvMDE1PzUzLyorLjI+XlI/QFFKPFFHLSs0QVpfUlRJT3RygH92blNRXWhwcnFwbWlkXltaWFhXV1hYWVlYWFVTUExKSEhISUtNUFNWWlxeYGFjZmpwdXp/g4OBgYGCg4SIiouKh4iGhYSDg4ODg4OEh4SHiYiIiYeHhYSCfHdzcnFwb25saWVhXFhYXGBob3Z9g4eKi4uJh4aGhoaGhYWGhoWCfnp8kI6KiomHhoeHiIqNjIuQkpSUkY+Pj46Ojo6NjY2MjIuLjIuLjIyMjY2NjYyMjIyMjY0sLCsrKysrKysrKioqKioqKiopKSkpKCgoKCcnJycnJycnJycnJycnKCgnJycoKCgpKSgoKCgnJyYmJiYmJicnJiYmJiYmJSUlJSUlJSUlJSMjIyMjJCQkJCQlJSMjIyQlJSUlJSUkJCQkJCQkJCYmJiUmJigoKSkoKiwsLCwtLS0tLS0uLi8vLy8uLi0tLS0tLS0tLSwrKyoqKysqKiopKSkpKCgoJiYmJiYkJCQjIyMjISEhISEhISEiIiIiIyMkJSUkKC8+V3N4cXR6fHx6e3p6cmpmW05JV2l2iH1wgIKAgn9pS05QY25uaGlrcHR1cWZ1eHlwb3N2a2VYYHBsV5CXkpFtZGc/MicpKSkoKjVBTFljf4iCfX1/fHZucHN0dnJ2fYSOkpCMhnt1cnBweoGFV1FgcoqarrKwqYFDPURFREtQUFuKm5qemn9UOj1kc3uChX97eHmCfGhfYWl4iJain5ybk35VRkhPa4uWlY2SmpSLdHJza2hrb2FIRlNseIB7cm55eX59Y0I0MC4sKigoJyYkIyQkJCUlJCUmJiUkJScnLC8xMDIyNDczLSgmJikqLkVfUFhZWllWSSwrLTlRUFRMXHl9fYKHelNRT1hjcHBxcG1oY11aWFdXV1dYVlhYV1dVUU9LSkdGRkhKTE9SVVlbXl9gYWVpbnR5f4KCgoKCg4OEiIuLioiIhoWEhIODg4OEhIeIiYmKiYmJh4aDgnx2c3Jxb25ta2hlX1tYWF5janJ5foOIi4qJiYeFhYWFhYWEhYWEgnx8kZGNiIiGhYaIiY2QkZCSkpOSkI+PjY2Mjo6Ojo6Ojo2NjY2NjY2NioyMjo6Li4uLiouLLCwrKysrKysrKyoqKioqKioqKSkpKSgoKCgnJycnJycnJycnJycnJygoJycoKCgoKSkpKSgoJycmJicnJiYnJyYmJiYmJiUlJSUlJSUlJSUkJCQkJCUlJSQkJSUjIyQlJSUlJSUlJCQkJCQkJCQmJiYlJiYoKCkpKissLCwsLS0tLS0tLi4vLy8vLi4tLS0tLS0tLS0sKysqKioqKSkpKCgoKCcnJycmJiYlJCQkIyIjIyEhISEhISEhISIiIiMjIyUnJyw4TGt0cnJ3e3x6enx5eHFsYlZOSlt2h4h4dYN9fYB5WUdHU2lub2tla2Zqc21obH5/cm9zb2hpZ0dqblRulIZxaGZ0P01EKSgsKikyPExZZoWHgXp5eXt1bGpubmpra25yf4eKiIeFenF0cm52g4hlYHaNm6qvqHdpUUI9PUBQWVpbh5SdnZyFVjhBU2d3e3ZycG9wc3BqbHN+iZabl5COjI19VD0+TnuPkJWVl5WMfmNTXGBiZWZVSEJGV3N3cWlganB1dVM0MDEvLCooKCclJCMkJCQlJSQlJSQmKCstLjEyNDYzMjIwLigmJSUnKSs8U1hOVlRcV0g/LzJASk9SWFJcbHN5f4F2bVlNV25ycXFtaGNdWlhXV1dXV1dYV1dXVFBOSUdGRUVHSUxPUlVZW11dX2FlaWtxd32CgoKCgoOFhoiLi4uJh4aFhISDg4ODhISGh4mJiYqKiIiGg4B7dnNycW9ubWtoY15bWFpgZWx0en6DiIuKiImHhYWFhYWFhIWFhIF9ipCNiYeHh4qMjpCRkpKQj5GQkI6QjpCNjY6PjY6Oj4+NjIyMjIyMjI2QkY+Pjo2NioyLiysrKysrKysrKioqKioqKiopKSkpKSgnJykpKCgoJycnKCgnJycnJycnJycoKCgpKSkpKCgoKCgoJycoKCcnJiYnJyYmJiYmJSYmJSUlJSUlJCQkJCQlJSUmJiYmJSUlJSUlJiYkJCUlJSUlJSUlJiYlJiYnKCkpKiorKystLS0tLi4uLi0tLy8tLS0tLS0tLS4sLCwsKyopKSkoKCkpKCgoKCcmJiYlJSQkJSQjIyIiIyMhISEhISEhISEiIiMiIiQlKCs1R2FzcXN2e3x5eXl7eHVzamBVSkpjf4+HdX2Bent8bk1FTF1oaWlqZWJkZ2ptbHV3hHJjgoJ4b2lHUHdfRYFrZGZbaGhudlo6KysrND9LV2CEhH52eXd2c2xqa2hjZGlmaW5xdXd4fIB1cW5ucniCgWx6ipWinndhd1E9N0BYbnBoYI6NlJCUjWA5QGFvhoFybWppa3Buamt3hp+knIyDfXt3ZEhBPU1yhIaLipCPhnlNLzNBUWFfUEpLVW96cmxiW2RwcGtKLC8wLysqKCgnJiYlJCUlJSYlKCcoKSswMjEyMTU3NC4rKiklJicpKykrN0FGUVFVTVZnQ0FASk1SU01YVl9dZmt7dG9hS1ZpcnJwbWdjXVlXV1dWVldXV1dXVlNPTUhGREJDRUhLTlJVWFpdXl5gZGhrcHZ8gICBgYKEhoeJi4uKiIaGhYWFg4OEhISDhoeKioqJiIqJhoN/enVycXFvbW1qaGRfWFpfYWdvdXyAhYmMioiIhoaFhYWFhYWFg4F/iJGNi4eHh4qMj5KSkpGQjo+Oj46Nj5CPkI6MjIuKjI+Pjo2Li4uKjI2QkpKRkI+NjI2NjIwrKysrKysrKyoqKioqKioqKSkpKSgoJycpKSgoKCcnJygoJycnJycnJycoKCgoKSopKSgoKCgoKCgoKCgnJycnJycnJiYmJiYmJiUlJSUlJSUlJCQjJSYmJiYmJiUlJSUlJSYmJSUmJiUlJSUlJSYmJSYmJygpKSoqKisrLS0tLS4uLi4tLS4uLS0tLS0tLS0sKysrKyopKSkpKCgpKSgoKCgnJiYmJSUkJCMjIiIiISIiISEhISEhISEhISIjJCQlJyozQ1tub292e3t3cnV3dnd1dGddVUpJaYGQiHOBfHp8fWJJR1BgYWNmamZmaGNVTlZZWGNnUV1ZV1FWRD5jb12BgIlkV2ddaGZZVkk5LzM+SlZafoR9enZ1dnJwb2xpZWNiYV5fYWdlY2J5fXFsbm1sdYJ9c4iQk1JTW1E+OkprhI6FcmOQkJCJe4JwTFFrdo+KeW5pZmJlamlveZemno56dnFxa009OjxLY3V/hYiXj4JwRC8sLz9jZ15ZW2iEiIFzZl1mbWpfRiotMC0rKignJiYmJSQlJSIjJSkpKiovNDU2OD5GQ0Q8KycoJiYmKCkpKTA3P0lZXVVdY1BARUxGTVdrXFNXU15reUtAXUxma2Zxb21nY11ZV1ZWVlZXV1dXVlVSUEtGRUJBQkRHS05SVVhaXF1eXmFmam91e4GBgoKDhIaHiouLioiHhYSFhYODhISFh4aIioqKiYuKhoWBfXl0cHJxb21tamhjXldZX2RpcXd9gIWLjIqIiIaGhYWFhYWFhYWChZCNi4mKioyPkI6QkJCOjY6OjY+RkZCPjoyJh4WFh4yPj42Mi4mJi4yPkpORkI+OjY2RkpCPKysrKysrKioqKioqKSkpKSkpKSgnJycnKCgnKCgoKCgoKCgoKCgoKCcoKCgoKCkpKSkoKCgoKCgoKCgnJiYoKCcnJycmJiYmJyclJSUlJiYmJiYmJiYmJiYmJiYlJSUlJSUlJSYmJSUlJSYmJiYmJiYnKCgoKSgpKiorKy0tLS0uLi0tLS0uLS0tLS0tLS0tLCsqKioqKikpKSgoKCgoKCgoJiYmJiUkIyMjIiIiISEgICAgICAgICEiISEiIiMkJCcwQlxubG1xe3t0cXJ2eHh5d29mXFJEQm6Fj3hrgHh4eXFWRkhRYmhqbWZiVVROREtISEVGSkU+ODg3O0JBRl5aSoiMcGF+dHBuYVRLSEE7PkpQVnmDfXl0cXFxc3NvaGVfW1pXWVphYVdISXF1cG9pZmt3gnV8h1tPVk4/PEx2jpqaj29fhouMinNOY2VlenqOhndtZ2JdYmZlaoKjoJKHeGxlaF5IQj07R1pndn+JjoV7YDwsLDNHaXZuWVhmgIuNg4VxbG1lVT4pKiwsKiooJyYlJSQjJCQjIiQmJSYsOkJFRURHR0I9NSkmJiYmJigpJyovMzpEREpXZGBaVkZAO0BMV1haXD5CW1QyOGZRTl1pcnBtaGJcWFZUVFVXV1dXV1VUUU5KRUFAQEFDRkpNUVRYWVpbXF1gY2htcnp8fn+Ag4WFiouLiIeIh4SFhISEhIODhIaGh4qKi4qKiIeEgX14c3FwcXBtbGpnYV1aW2BkanF4fYGGi4uLi4iGhoWFhYWFhYWFgo6Si4eLjY6Pj5COjo+PjY2Mi4+QkI6NjIiGg4GAgoiNjY2Mi4yJioqNkZSTj4+OjIyPkJGPjisrKysrKyoqKioqKikpKSkpKSkoJycnJygoJygoKCgoKCgoKCgoKCgoKCgoKCkpKSkpKSgoKCgoKCgoKCkpKCgoKCcnJiYmJicnJyUmJicnJycnJycnJycmJiYmJiYlJSUlJSUmJiUlJSUmJiYmJiYmJygoKCkoKSoqKyssLCwsLi4tLS0tLi0tLS0tLS0tLSwrKiopKSkpKSgnJycnJycnJyYmJSUkIyMjIiIiIiEgICAfHyAgICAhIiEhISIjJCUsPFZxcGhudHl0bW1wcnN3eHZuYlZNPTpohodycndyd3lrTkNIVWdpbHZkV0dER0FKUEtLSkpER0E+OztARj9PXTpre4WIh4R+dGNUTUlFQUBGSlFygnp2c3JvbnBybmllX1tZT05UYF5SRjJHam1uamhobnaAfGNAS05ORUhvkJ2inpBqXG+Fi4Z5NTFMd5OQiYB3a2ReW15jXGaZn5aHfG9cYWxcRkJARE1XYWtxd3Z1blU4Ky07Umh0fndkXmR4hoaEhHtpX1M0JiktLCopJycmJSUkJCQkIyIiIyQoLzpCREM/Ojg3NjAnJycmJygoJycqMTY6PThHUVhbWVZPSUtDTFlaUlBGNlFcTVZqWUpZcnNwbmhiXFhWVFRUU1ZWVVVUU1BMSkVBQD9AQkVKTVFUWFlYWlpcXmFlanF3fX5/gIOFhoiLi4qJh4aEhYSEhISDg4SGhoeKi4uKiYeHhIB8dnNxcXFwbWxqZ2FdWl1hZmtze4CDiYuLi4uIhoaFhYWFhYaGhoqPi4uKjI6OjY6PjY2NjYyMj46NjYuJhYKAfHl7foKJjY6OjIuKioqLj5OTko2OjYuNkpGRj44sLCsrKysrKioqKioqKikpKSkpKCcoKSgnJygoJycpKSkpKCgpKSgoKCgoKCkpKSkpKSoqKSgoKCgpKigoKCkpKSgnJycmJycnJycnJycoKCcnJycnJycnJycnJyYmJycmJiYmJiYmJiUlJSUlJScnJycoKCgoKSkqKysrKyssLC0tLS0tLS0tLS0tLSwsKysrKioqKSkpKSkoJycnJyYmJiYmJSMjJCMiIiIhIiIhISEhICAhISEhISEhISMjIyYpN09tcmlrcXZzbGlqa29xdnd0a2NWSz87apCLdHlycHh3YktIUGFnX2BoV0pGRElDSE5LTEtNRUNCQD4/PkVAQUpEOjx3jYeEfXJiVU1GRENDQkZMZ4R3dXNxbmxub25nYltYW1NOTkNMT0k5LEZqamZqaGpvd3pHPEJJSUdtk6Kjo6GNc2FdgY6Gh0MrPYCYjYR7d2hfXFlYWlN1oZiNgHBbUFlcTTs6QklSV1thZGZqa2FNNyw3SVxpbnZ+dmp5jJCFen99a1xKLCUoKioqKCcmJSQlJSQjIyMiIiIhJi83Ojw/Pj09OzgxKCcnJygoJygmKjE7PTc5QkdJW15bXEdGQURLS0lWYFJAWVJjbl5KXHN0cG1nYlxXVVRTVFRUVFRUU1JOS0dDQD8/QEFFSUxQVFdYWVpaWlxeYmdudHh9foCDhoiJi4uKiYeGhIWEhIODg4OEhYiIi4uLioqIh4SAfHZycXBwcG9samdhXVpcYGhudXuAhYiLi4qJhoaFhYWFhYWEhoqQjYyMjo6MjIuLjI2NjI2NjIqKiIaCfnx5eXh5fICFi46PjY2MioqMjpOTko+PjYuLj5CRj42OLCwsLCwsLCsqKioqKiopKSkpKSgnKCkoJycoKCgoKSkpKSgoKSkoKCgoKCkpKSkpKSkqKioqKSkoKSooKCgpKSknJycnJicnJycnJycnKCgnJygoKCgoKCcnJycmJicnJiYmJiYmJiYlJSUlJSUnJycnKCgoKCkpKisrKysrLCwtLS0tLS0tLS0tLS0sLCsrKyoqKikpKSkpKCcnJycmJiYmJiUjIyMjIiIhISEhISAhISEhISEhISEhISEjIiMpMEZmdG1rcHRzbWtoaWptcHN1cmtjVko+NmaXkn9+cXV4elxDSFFla19dX1BERklMR01RT01KSkRCQUBBP0BCRENDRkBuhImHg3prWU5LRUNCQkFER1+FeHZ0cW5qaWtqZ2FeWlZQRz42Mzs9ODY3Vm1nZ2ZmZ293cUY6NztfjKOmpKaeh3VgZXmMholLMUCEl4eDenNiWlhWVk5UiJuShHlqT05ZUDsxOUJLUVdZXF9jZmVcSjYwPVFjaWtrdXx+mZySgnp8d2RUPiomJykpKignJiUkJSUkIyMjIiIiIyozOj0/QT4+OzYzMCsmJycoKCgoJiktMjMxOTw6RFVbUldcRD9EUVRVXmldTGJ3eH5nRFhrdG9tZmJcV1VTUlNTVFRUVFNSTktFQ0A/P0BBRUlMUFRWV1hZWVlZXGBka3F4fX6Ag4aIiYuLiIeHhYSFhISDg4ODhIWIiYuLi4qKiISBf3t1cnFwcW9ua2hlYFxbXmNpbXZ9gYeJi4uKh4aGhYWFhYWFhYeNjo+Pjo6Mi4mJiYqKi42Ni4uIhH98eXh4d3d4e32BiI2Pjo2NjYuLjZCTko2NjIuLjZGSkI6MiyoqKioqKioqKioqKioqKSgpKSkpKCgoKCkpKSkpKSkpKSkpKSkpKSkpKSoqKioqKisrKiosLCwrKioqKikpKSkpKSgoKCgoKCcnJycpKSkpKSkpKSgoJycoKCcnJycoKCYmJycnJyYmJiYmJiYmJycnJykpKSoqKikqLCwsLCwsLCwsLC4uLS0sLCwsLCsqKikpKSkpKSgoKCcmJiYmJiYlJSUkIyMiIiIhISEgICAgISEgICAgISEhICIkIyQoL0JecW1qb3R0bGhmZGFkaW50c3NrYlVIODFVlJGEdm5zem1bSEtTZGFcXVpMREpPTk5PUlNSS0dHRUZJTEE8PkA/Q0VEV4eHhoByZ1VKR0NCQUJAPkBch3lzb3Bva2hoaGVhXVlUUEg5MTE1NTU1NjxpbGlnY2VobX1YMDJBc5iipaeklYVtXHZxf4KCYDc+d5GHfXNoVlJVVFRNcZuWhXluXk9aYVQ1NDtHTlRYXF5hYmNgWUY5P0taZGdmZ2xwaJOZj4J5c2leVD8sKCkpKCkpJyUlJCMjIyMjIiIhIyUwOTw9Pj9APDgzMS8qJycoKCgoJiYoLS4xMzQ3OjxKWlpKU09DPUBJSExQTFptd25pZEVXbXV1bmljW1hTUlFQUFNUU1NSUU9KRUI+PT5AQkZJTU5SVVZXWFhXV1hdYmhudXp8gYKFh4mJioiHh4WFhISDg4ODg4WGiImKi4uJiYeHhIB7dXJxcHBvbGpmY19cXV9jaXF4fYKHioyMiomHh4WFhYWFhYWNjo6Pj46Ni4mIiIaJioqJiYiDfXl2dnV2dnd5e3t/g4qOkI6OjY2Mi42SkpGOi4uLio+Sk5GOjIsqKioqKioqKioqKioqKikoKCgpKSgoKCgpKSkpKSkpKSkpKSkpKSkpKSkqKiorKiorKy0tLCwsKyoqKysqKSkpKSkoKCgoKCgoKCgoKSkpKSkpKSkoKCgoKCgoKCcnJycnJycnJycmJiYmJiYmJicnJycoKCoqKioqKywsLCwsLCwsLCwtLSwsLCssLCwrKiopKSkpKSkpKSgnJiYmJiYmJSUlJCQkIiIiISEhICAgICEhICAgICEhICIoNSUmLT9XcnRsbnR1bmllYl9cX2luc3dxamFURzYtSpCShHRycnZhT0pMT11ZU1JPQ0ZNT05LTFBZW1BISElGSExQTkJBQEBDREGAiIV9bl9RSUNBPjs9PDk7VIV9cW9wbmhmZ2VjX1xWVVBENTMzMTEzMzU2TXBsaGZlY2x0dD4sT36YoKOimIp9Y1p3YHZ/fHI6Nm+Qf3NrWE5PUlJRV4aWh3dtY1hUVlpVQj9ES1JXW11fYGNhWlJIRUxSXGJkZ2tweYCZjn1zbmdfWlVALConKCgpKSclJSQjIyMjISIiISMsNzw9Pj9APzw4NTMwKygnKCgoKCcnJisuMTM1NTU3O0NNT0JGVVo+QU9cVFZZXGJNU1xKUml2d3BsZV9XUlBQUVBRU1NTUlFOSERBPj0+QEFFSU1PU1VWV1dXVlZXW19mbXJ3fYGDhoeJiYqIh4aGhYSEg4ODg4OFhoeIioqLiYmHh4R/eXRycXBwb2xqZmNfXF1gZmtyeX6Ch4qLi4mHh4eFhYWFhIKLkpGRj4+OjIuJiIiGiIqJhoN9eHd0dXZ3d3d4ent7gIWKjpCOjo2Ni4yRkY+NjImKiouQlJOQjYyLKioqKisrKioqKioqKSkoJycoKSkpKCkpKSkpKSkpKSkoKCkpKiorKyorKysrKywsKyssLCwsLCwsLCwsKikpKSkpKCgpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKCcnJycnJycnJiYmJiYmJiYnJycnKCgoKSsrKiosLCwsLCwsLCwsLCwsLCwrLS0rKyopKSkpKSgoKCgnJiUlJSUlJSQkJCMlJSIiIiEgIB8fICAhISAgICAhISAgIiUoLD5Wb3VucXN2b2plYV1XVl1pcXZ2cmtgU0Y1OFuJj3xwcnNsXFFGR1BUTERBQ0RHTUtLSkxOXVxPRkRCQUBAUlZEPUE+RD4+aYeBdm1kW1REOzg4ODc3OUJ+fnJsbGpoZGNfWFZXVlJMPC4uMS8uLzAyNzVkcmphYGNnaXNfOV58j5mblIqBbk5SXkNhf3ZzRzdyjXhsYUdHR01OTmSDiHdoXk9SVFBMU1VQU1ZZXF5fX2JkYmBSSk5XXWBkbG9scI+ZjnxvaWViW1lTPSsoJicnKCYmJSUkIyMjJCIhISImMTs9PT9AQUA+Ozg2NC0mJCYmJyclJCYoLC8wMjU2Nzc3PElGRktQR0NGTk1VZGJaVFZWT0VJZXpxbGZeWFJQUFFPUVFRUVJRTEhDQD49PkBER0pNT1NVVlZWVVRVVlldY2pwdnyAgYeIioqJiIeGhYWEhYSDg4ODhYaIiIuKioqMioeDfnhycHFxcG5samViXl1dYWhudHp/hIiKiomIhoaGhoaEhISHkJKSkY+OjIuKiYmJhoiFgn16d3d2dXd3d3h5eXp7fICGi46Pjo6NjY2OkZCPjIqKiYuPkpWTj42NjCoqKiorKyoqKioqKikpKCcnKCkpKSkpKSkpKSkpKSkpKCgpKSoqKysrKysrKyssLCsrLCwsLCwsLCwsLCopKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkoKCcnJycnJyYmJiYmJiYmJycnJygoKCkqKikrLCwsLCwsLCwsLCwsLCwsKysrKysqKSkpKSkoKCgoJiYlJSUlJSUkJCQjJCQiIiIhICAfHyAgICAgICAgISEgIiInLTxWcHVubnN3cGlmYlxUUFBea3J4dm9nXVBENTZNd4Z0bXBzXkxURURMSEVBP0RFR0ZJSUlJUFZWT0VFRj8+PTs5RD8/Pj1BQEqBgHRsZ2RUQTs2NzY0NDY4Yn5zbWpnZWNfXFFMTk1JRTYqKi8uLC4vMDE4T29qZWRjYWJmcFtje4qQjIR6bVJGRkNCV351cFU6dop0a1xCRUdMS1JrdnVpXlRTVFZYQzxQWllbWl1gYmNkZmViVlBeZ2lnbHhsXXeTkHxuZ2FfXVZVUj8rKCgnKCcmJiUlJCMjJCMiISEhKTU8Pj4/QEFAPz08ODUrJCIjIyQkIyMlJiouMTAzNzk8Ozo5ODg5Q01MTFFbVVhfYVdFSV9kS09xdG1kXVhTUVBPUVFRUVFQT0xIQ0A+PT9BQ0ZJTk9TVFVWVlVUVFVXXGJrcHd8gIOHiYqKiYiHh4aFhISEg4ODg4WGiIiJi4qKi4qIgH13cnBxcXBubGpkYV5dXmJpcXV7gISIioqJiIaGhYWFhISFj5GQkpCPjouKiIiIiYiCf3x3d3Z2dXZ2d3d3eHh6e32Dh4yOj46OjY2Mj5GOjYqJiYqMkZOVk4+NjYwqKioqKioqKikpKikpKSknKCkpKSkpKSkpKSkpKioqKikpKiopKSoqKywqLCsrLCwsLC0tLS0uLiwsLC0rKisrKiorKyoqKiopKSoqKysqKioqKSkpKSkpKSkpKSkpKSknJycnJycnJycnJycnJygoKSkoKCkpKioqKysrKystLSwsLCwsLCwsKysqKSoqKikpKSgoKCcoKCYlJSUlJSUlJCQkIyIiIiIiIR8hHx8fHx8fICAgICEhICMnKTlUb3ZwbnN3c2tlYVpUTUpPXWlvdHNtZVtOQzc1SV2Ba2ZocVNFR0M9QkVHQ0JERUhGR0lJSUtRUU5GQEJCQ0VEPjtCPT0+P0A6bXtya2ZjTUBEPTQxMTIzNTtycmllZWViYFpRS05PS0U2LSoqLS0uLy8uN0BpbmlmYmBcYGppaXeEhn94bFQ+RkJBS1h9eGpiQnqGdGZXQEJISkxWZGdlXFRTVFZWRTQuOFZnYGBfY2VkZGdnZ1xfaW1scntyXmCCiHxsZV9dXFdRUE4+KyUmJycnJyYlJSUkJCQhIiEiJjE6PT9AQEBDQkA/Pjs0LCQiIiIkJCIiJCUnKi4vMTU6PT09NzEuKy42SFZYUFJZWWlpTEliYlpMbXVrY1xYWFpST1BQUFFRUU5KRkE+PT5AQ0NGSk1QUlNSVVdUU1NVV1tianB2fH+Ch4mLiYiIh4eGhYSFhYODg4SGh4qLjI2LiouJhYB7dHJwcHBwbmxqY2BdXV9laXB1fIOGiIqLiYiGhISFhYSEipGTkpGOjouJiYmIh4mEenl5d3d3d3Z3d3d3dnh5ent/hImNjpCPjY6NjZCOi4uJiYaJjpWWlJKOjI2LKSkqKioqKiopKSkpKSkpKCkpKSkpKSkpKSkpKSoqKioqKisrKiorKyssKysrKywtLS0tLS0tLS0sLC0sLCsrKysrKysrKyoqKiorKysrKysrKyoqKSkqKikpKSkpKSkpKCgoKCcnJycnJycnJycoKCkpKCgpKSkpKisrKywsLS0tLSwsLCwsLCsrKikpKSkpKiooKCgnJiYmJSUlJSUmJCQkIyMiIiIiIiEgIB8fICAfHyAgICAhISMlKzdWcHlvbHF2dm9nYVxVTURFT11nbnFza2JXSj40MjRgfmhnbW9KRkM+OkBDR0VEREVER0hISUlGS09RVFhkbm5xb2tjVVJVX1A3OVd4cWpnX09CQDkzMjEyMzEySHJqY2JhX15ZUUxJTU5NRzsuKi4xLy4vMjM3Sm9uaV9cW11ibXN3e3x1a1xBP0JETVNgcm5fX011hHNlU0FHSUpNWl1aWFZUU1VSQDAuNENfam1ua2dnZmdpaWVja29ydHpnW1dgentsY11ZWFlSUE1KOyomJSYoJycmJSUlJCMiIiIhIy05PD5BQUBAQkBAPz47NSgiIyMjIyQjIyQlJSUoKi4xMzc5ODYyLCsrLjxSYFpbX2FsZmFQSUZTSmZybmVcV19eXllPUFBQUE5LSERBPj0+QENGSUxOUVFRUVNUU1FRVFhcY2txeH6Ag4eKioqJiIeGhYWEhISDg4OEhoeKi4uMi4qKiYSAenRxcHBwcG5raWNgXV1gZmxzdnyDh4qMi4qIhoWFhYWDh4yOkpKPjouHh4eIiYeAfXl4eXh4d3d2d3d3eHh4enp7f4SIjY+Pjo6NjpCRjIqJiIeJjJOWlpOQjoyLiygoKSkpKSkpKCgoKCkpKSkpKSkpKSkpKSkpKSkqKioqKysrKysrKysrKyssLCwsLS0uLi4tLS0tLS0uLiwsLCwrKysrKysqKisrKysqKiwsLCwrKioqKysqKSoqKSkpKSgoKCgoKCcnJycnJycnKCgpKSoqKSkqKioqKyssLCwsLS0sLCwsLCwqKisqKiopKSkqKSkpJiUlJiUkJCMjJSUkIiEiIyMiIiEhIR8gICAgICAgICEhICEjJzVRbnhybnB1dXNsY11WTEE9RFBdZm9ycGleV0o8NDExZnxraG9rRUU/OTk9QkVGRkVFREZJRUNGQ0NMaYKQlZqQhnh2d2lVX3F5WTc/c25rZVtNPzYyMTExMC4vMTNYa2NgXl1cWFJNSklKTU5ORzkrKi0vLS8zNDNScm1hV1hZXGFtenZwamJNPEA/Ql1gZ2JZWlhSbYFtYE5ISk1MT1JSVFRVU1FNPTMwM0BTZ3F0eHp2b2tpbGxqbXJ5fXJaSVpQV2ZmY15bWFlUTUpIRDUnJCYmJykoJyUlJSQjIiMgIyk3PT49QEBAQEFBQEA/PDMmHyAjIyIjJSQkIyQkJScoKSwtLiorKisqKSstN1BcUlpjZGJhW1xpW0tbc29pX2NbQFZfU09PT01MSEdDQD09PkFCREdMT1FRUVJUUlFQUVNYXGNrc3l9gIOHioqJiIeFhISEg4KCgoKDg4WHiouLi4qKiomFfnlzcHBwcG9tamhjYV1eYmduc3l9g4iKjYuJiIaGhoSEhoyQk5GQjYuJh4WFiop/e3t4eHh4eXl4dnd3d3h4d3d6fIGGiY+Qj46OjZCSkYyKiYiIi46Tl5WSj46Mi4ooKCkpKSkpKSgoKCgpKSkpKSkpKSkpKSkpKSkpKioqKisrKysrKysrKyssLCwsLC4uLi4uLi4tLS0tLS0sLCwsKysrKysrKyssLCwsKyssLCsrKisrKysrKikqKikpKSkoKCgoKCgnJycnJycnJygoKSkqKikpKioqKisrLCwsLCwsLCwsLCwsKiopKSopKSkoKCgoKCYmJiYlJCQjIyUlJCQiIiMjIiIhISEfICAgICAgICAhISMkKDdMa3dtbXN1dnVxaWFaT0E6PURPXmhtbmxmXlVIPDQzPnR2aGduY0FDQDo5P0VDREVEQ0FFSEtGQkJIaI+jqqqhlYt8d3h7aFdngntUL2BvbGVbSz02MjIzMS8uLzEyPGRjX1tZWFZTUExLS0tLT01KQjYxLSstMzErL1pmXlhVXV1fZm93amFZQz08RmFjYmBdWlBUZGR7ZFVHSE1QUVJUVVVVUU9IPzQxMTtOXm13dHJ3eHVycXFxcHJzdHVdR1ZPRFFaXl9bWFVVUkxIRT8yJiQnJycnJyYlJSUkIyMiIygzPD0+P0BAQEBBQUBAPzwyJR8gIyMiIyYmIyMkJCYuKSkmJSYqKiorKisrLC4zRkpbX19YYGRaX1lMVnFyYlpFKTROTkxPT09NTEhFQj89PT5BQkZJTE9RUVJTUlFQUFFTWF9kbHN5fYGEh4qKiYiHhYSFhIOCgoKCg4OGiIqLi4uKiouIg356dHBwcHBvbWlnYmBdXmJobnR5foOHiYyKiYeFhYWFhoqQk5GSj42Li4yKh4uEeXd5enl4eHl4d3d3d3Z3d3d4enyDh42PkJCOjo6Rk46NjImIh4uRlJaSkY+OjIuKKSkqKikpKSkoKCkpKSkpKSkpKSkqKSkpKSkqKioqKiorKysrLCwrKyssLS0tLi0uLy8uLi4uLi4tLi0sLSwtLSwsLCwsLCwsLS0sLCsrLCwsLCsrKysrKysqKysqKioqKSkoKCgoJycoKCgoKSkqKioqKioqKCoqKioqKiwsLCwrLCwsLCwsLCopKCkpKSoqKCcmJiYlJSUlJSUlJSUmJyoqJSQjIiIhIiIhICAgICAiIyAgISElKDBJandtaG50eHRzbmZcU0M3Nj9IUV5ob3BsZ1xRRjo0NlB+cmFibF9BQkE6Nj9FQkJCQ0NAQ0hRSj9IXoqepa2llI6SlIqBgXFaYn2JdztGcmtlWk9ANjIyMjMzLy4xNTU+XmBXVlVUU1JOTE1NS0xMS0tIPC8pLC8tJic0X2JfW1hbXmRlcW5eUj07QF5fVVpaXFdQR1BRa2BQQ0pKTU5SWFxgXVpORTszMTNFWWZwdnVxcHJxbWpsb29ubmxwS09VR0ZRW11cWlZVVE5KRkI6LSMjJCUmJyclJSUlJCMjJCcyOTs8Pj8/QEFBQUFAQD86LyMhICEiIiIjJiMhIiUpKykpKysqKisrKyssKiwvLzFEVm1pZ2ZfZmpYUlZuZ2hgTisxRk9QTk5OTEtHREE+PT0+QUJER01PUFBSUlFQUFBPUllgZ291e36ChYiJiYmIh4WEhIKBgoKBgYOEhomKi4uLi4qJhYJ+eXNvb29vbmxoZGFgX2FkanB2fICEiImLiYeHhYSFhouQkZSSj46OjouMjYyFfHt5enh5eHh3d3h4eHh4eHh3eHt+hIuPkI+Pjo6PkpGNjIuKiomMlJeWk5GOjIyKiigoKSkoKCgoKCgpKSkpKSkpKSkpKikpKSkpKiorKyoqKysrKywsLCwrLC0tLS4uLy8vLi4uLi4uLS4sLC0sLS0sLC0tLS0sLCsrLCwrLCwsLCwsLCwsLCsrKisrKioqKikpKCgoKCcnKCgoKCkpKioqKioqKigqKioqKiosLCwsKywsLCwsLCwqKCkrKSkpKSgmJiYmJSUlJSUlJSUlJiowMCYjIiEiISIiISAgICAgISEhISMlJjFGZHlvZ2tyeHZ2cmphV0o4MDdBSlRgaXBybWVbT0Q4MTxhg3BlZm5aQERAOTY8Q0RBQUNDQkRFSEVLZIOZoKSsp52VmJyPfXZ0aoWPkYZlM3BqZVxSQzIuLCwqKiorLC8wLztWXFdTUFBPTk1MTUtNS0pJSEVANS4xLikkKTpaXmFiY2FdXmhoYUg6QlVaV1tgYVlSTElER05YTUZMUU9PUlVbYV9WTEA5MzA3Sl9rb3R2c25tbGdlaWpnZ19cWkdaTklIUl1eXFpWVVJKRkNANSokJCQkJycmJyYmJiUjIyYwODs7PD9AP0BBQUFBQEA/Oi8jIyUhISIiIiIjIyUnKCoqKisrKiorKysrKysuLzM4QFRiaG1vaWRlVU1XaWplXlxYVU9OTU5OTkxKRkRBPj09PkFCR0pNTlBQUlJQUE9PTlNaYGhwdXt+goWIiYmJiIeFhISCgYKCgYGChYeKiouLi4uKiYWBfXVxb29vb25saGRhYGBiZmxyeH6ChouMioqIh4WEhoqOkpKTkpCNjY6Njo6Nfnl7eXl4eHh4d3d3d3d3d3d3d3l8goeNkJCRkY6OkJWQjYyLioqLkJWXlZKQjoyMioooKCgoKSkoKCkpKSkpKioqKiopKSsqKysqKisrKyssLCwsKyssLCwsLCwuLi0tLy8uLi4uLi4uLi4uLS0uLi4uLCwuLi0tLS0tLSwsLCwsLCwsLCwsLCwsLCwrKyoqKysoKCgoKCgoKCkpKSkpKSkpKiorKyoqKysrKysrKysrLCwsLCwsLCwrKiopKSkpKCgnJiUlJSUlJSQkJCQkJCYmKSglIyIiISEiIiEhISEhISAgISIkKS1AYXVza2tydnh4dG9lXE0+MDE6RFBaYmpxcmljWExDNzFFdYJsZ2pxVkFGPjk5P0NEQ0JCQ0FDRURJYYGXo6aoqqyqoZyZlod2eXqSjo2OfEVkbGZgV09HR0ZFRUZFRkpMV1pUSExSU1JPTk1MS0tLS0tIR0RERD43My4qJyMlPllZV1tcXV1eXWJVSVJZUlRXVlVTTUpHQDQ7RUFESU1MTFFUV1xcVkk8NzAxPVBgbHB0dnRua2hnZmlpZ2VfW05VUkdITVphYV5bVVNNR0RAPTEoJCMjJSUlJiYmJiYkIiIrNTk6PD4+Pz9AQkJBQUBAPzovIyMkIyIiISMjIyIiJSgoKiorKysrKioqKywuMTQ4PUJER1RmZ2dtaU5MXmpqZGBaVExMTk1OTk5NS0dDQD49Pj9BREZJTU1QUFBQUFBOT09VWmJpcXh9f4OFiIiKiIeFg4OCgYCBgYGBg4aIioqKiomIiIiEf3p0cG9vb29ta2dlY2JiY2hudXp+goiMjIqIh4eGhoqQkpKRkI6Pj4+PkY6OgXl5eHl3eHh4eHd4eHd3d3d3d3h6fYSJkJKSkI6OjpOTjYyMi4mIi5GWl5WRj42Li4uKKCgoKCkpKCgpKSkpKisqKioqKiorKisrKyorKywsLCwsLCsrLCwtLS0tLi4tLi8vLi4uLi4uLi4uLi0tLi4uLiwtLCwsLC0tLS0sLCwsLS0uLSwsLCwsLCwsKysrKisrKigoKCgoKCgpKSkpKSkqKioqKysqKisrKysrKysrKywsLCwsLCwsKyoqKSkpKSgoJiYlJSUlJSUlIyQkJCQjIyUkIiMiIiEhIiIhISEhIiIhISMlKDE/W3Zza2txdnZ2dm9mXFFCNC81PkhVXmZucW5nX1VJPTY3VnuCbGZpcVQ/RT45OUJFRURDQ0NCQ0VIWXCLl5qkrKuqrqOhnpyUcoaHf4CIkoZpUWRfXV1cWVlWVFVUU1RUUldXWVtTTk1OS0xLTEtKSUlKSEVFQkE+OjczLSgmJyZDV1BQV1xZV1pgYlVVV1lVVFJQS0dCQj80Mz5IQ0VJSkxPUVVYV1FGPTcyMj5OXWhweHhxa2lpZmZmZ2hnWEQ4Rk1KSFJeYGFcWFVQSERBPTksJSMiIyQkJSYmJiYlIyMmMDg7PD5APz8/QEJCQUFAQD07LyMgICIiISEjIyMiIiUnKioqKioqKioqKisvMDY5Pzw9PD9ES1FfcW1JR1hZX2RlW1NWUU5OTk5OTUxIRT89PT4/QkZIS01NUFBQUE9PTk9RVlxiaXF6fn+DhYiJiYiHhYODgoGAf4GBgYOGiYuLi4qJiIiEgHx1cW5vb29vbGpnZWJjZWZqcXd7gISKjYyKiYiFhYmSk5SRkY+Pjo6Oj46Phnd5fHl5enh4d3d4eHh3d3Z2d3d4en6Fi5KTkpGPj5KVkY2Mi4qHioySlZWVkY+NjIyLiicnKCgoKCgoKSkpKSkpKysrKywsKysrKysqKyssLCwsLCwsLC0tLS0uLi0tLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLS0tLS4uLS0tLSwsLS0tLS0tKyssLCsrKiosLCsqKiopKSkpKiopKSkpKioqKioqKioqKisrKysrKysrLCwsLCsqKiopKSgoJycnJyYlJSUlJSQkJCQkJCQkJCQmJCMjIyMiISIiISEhISIiIyIlKTE9WHNxamxwcnJzcm1kWU5DNS8wN0JNVmJpb3BrZVtPQzc1QmV+f2xoZmxPQENAODdCR0VDQ0VGQ0BATmuBkJaWnqeqqqyio6Okoox9g4mLlJqKelJZWFdVVE9PUFBPT09PUFBSVltbVVBJSUZFRUZFRUZISEhIRUE/Pjo4NTMsJyYoLlBaVVNVVFNVWV1iV1JSTlBOS0ZBPT9BNy4zPUFBREZLTU5SV1lRRjo4MzQ+S1dlbHJzbGhoZ2ZmZmdoaWNONkBGRUlYXl5cWFVTS0VCPzs1KSMjIyMjIyQlJSQkIyMjKTI5PT4/QEA/P0BBQEBAPz8+Oi4jISEiIiEhIiIiIiIkJisrKykqKioqKiosMDQ2NjY2ODk8Q0ZFSFVURkdcUl1lZltXXFNNTk1OTk1LR0Q/PT0/QERHSEtNTU5OTk9QT09QUVZfY2tyd31/g4WIioiIhYSCgoCAgH6BgIGEh4qMjYuKiYiHhIB5dHBvcHBubmtpZ2VlY2dobHN4fYOHi42NjIqFhoeOkpOSkI+NjY6Oj46OjHpzenp4eXl5eXh4d3d3d3d4enl3d3uBh46Tk5KQkJCVlZCNjIuJiIqQk5eVlJCPjY2NjIknJygoKCgoKCkpKSkpKSsrKyssLCwsLCwsLC0tLS0tLSwsLS0tLS0tLi4uLi8vLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi0tLS0uLi0tLS0uLi0tLS0tLSwsLCwsLCsrLCwrKioqKSkpKSoqKSkpKSoqKioqKioqKiorKysrKysrKywsKysqKioqKSkoKCcnJyclJSUlJSUkJCQkJCQkJCQkJSQjIyMjIiEiIiEhISEhISIjJy03UG92amtucHJycWdgVkw/MiwuMjxHUltmbW9vaWBYSz8yMUlxfX9sZ2psTEBDQzo4QERFREVHR0M/Q159jJWYkpWao66wrrCuqauSdHaOo6GjloNgUVVTUlFRUVFRUlJRUVBQUVNUU1ZRTUtHRUNCQEFAP0NDQkJAPj46OTYzMColJyoyUl9YUFJVUlBUYVtESUNFRkVCPjw+PjUvLC06QEFFSkxNTk5QT0M5NzQzOkhVXmdsbWxpaGZmZmVfWFZMT1VMQ0ZPWl5cWlZTT0hDPjw5MyckIyMjIyMkJSUkJCMjIykzOj0+P0BAQD9AQEBAQD8/PjouIyEhIiIhISIiIiIhIiQoKiopKioqKioqLC8zNDQ0NTY5QEdJSUlNQ0BBVWhvbmZiY2dTTE1NTk1MSkZDQD8/QEFER0hLTU1OTk9QUlRUVFdZX2ZrdHp9f4OHiYqIiIWEgoKAgIB+gYCBhYiNj42MiomIhoN/eXRwb29vbm5samdlZGVoaW92e3+Dh4uNi4mJh4aLlJGSkZGOjo2Ojo2Oj4FzeHt7eXl5eHh4eHd3d3d3d3d4eHl8goiOkpOSkY6QlJGNjIqKiImMkpWXlZSQj42MjYuKJycoKCgoKCkpKSoqKysrKysrLCwsLCwsKy0tLS0tLS0tLS0tLi4uLi4uLy8vLzAwLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4tLS0tLS0sLCwsLCwsLCwsKyoqKikpKioqKioqKiorKyoqKiorKyoqKysrKysrKyssKyoqKioqKikpJycmJiYmJiYkJCQkJCQkJSQkJCMkJCQlIyIiIiMiIiIiISEhIyMlKCo3S2p5cGlsbXBwbWVcUUQ5MSsrLjhAS1ZhanBwbGVcUUc7MzVZe3l/bGdrblFARUM8Nz9ERUVGSEdCP05vhY+VmJCJj6Gvubq7uKqnknyQk5iinp+Nc01VWFhWV1ZTUlNTUlBSUlVVVVVXUE5KSEZGRUVDQkJBQUFBQD4+PDs6NjMuKSgrKjVUXVtYU1FPUlthSjs/P0NCPzs4ODczLy0tOURJS0xOUE9PUU8/NjUyLjVEUVdZXWRpaGtrZmdpXE9XOExZS0dOWV1cWlZTUUtEQDw6OTEmIyMjIyQiIyQkIyMjIyIpND0/Pz8/QEFAQUFAQEBAQD88LSMhICIiIiIiIiIiISIjJycpKisqKykpKystMTAyNDc5NjY5PUBFRD9DRkFLZmdgX1xaVU5NTk5NTEpGQ0E/P0FCRUhJSkxMTk5QUlZXWlpdYWFlbXR7foCEh4mKiYaEg4OCgYB/foGBgoeLjo+Pi4qJiIaBfHdyb25tbW5tamhnZGVmamxwd32Ag4iLjoyKh4eKkJORkJCOjY6NjY2Ni4h6dXh8fXp5eHh4eHd3d3d3dnV1eHh5foOKkJSTkY+Ok5aPjIuLiIiKjpKVlpSTjo2NjY2LiicnKCgoKCgpKSkqKisrKysrKywsLCwsLCwuLi4tLS0tLS0tLS4uLi4uLy8vLy8vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLS0uLi4tLCwsLCwsLCwsLCsqKioqKioqKioqKioqKysqKioqKioqKisrKysrKysrLCsqKioqKiopKCcnJiYmJiYmJSUkJCQkJCUkJCQjJCQkJCMiIiIjIiEhIiEiIiMjJy43RWZ5cmtrbm1sa2NYSz80LCkpLTM6R1BbZm1xcGtiWE1BNTE2Xnt5fm1laW5gP0NDPjg+RUVFRklIREhhd4mMkJSSg4uksbm7vLqyr6mqrK6doKCll39cWFhYVlRUVFBRUVFQUFFTVVhZWVRQTUZGRUVEREVEQ0NAQEFAPj49Ozs5NTAtKywuN1VVV1dSUVBUWlVCOzs+Pj07ODc1MS8vMj5ITE1NTlBQT1FVRygvMC4yPEVPU1ZeYmJlZ2loa2lkX1FRVE9PV1pbWFdUT0pEQD87OTUtJSIiJCMiIyMkJCMjIyMiKTY+QUBBQUFBQUJBQEBAQEBAPi8jISAiIiIiIiIiIiEiIyMkJCgpKCkqKisrLC8xMzU2NTM2Njg9Pz5DQ0M9SV9mZlxaVFVPTE5OTUxKRkNBP0BCQ0VISkxMTE9PUlVZWl9hZWdnbHB3e36AhIeJh4eGhIODgoGAf36BgYSIjY+PjoyKiYaDf3l0cG5ubW1ubWpoZmVmZ2ptdHl+goaJjo6MioeIjpORkY+OjYyNjYuLi4qAdXR6fHt7enh4eHh3d3d3d3Z2dnh4eX6FjJKUk5GPkJORjYuMioiIi5CUlZaUko+NjY2Ni4ooKCkpKiopKSkqKioqKiorKysrLS0tLS0tLS0tLi4uLi4uLS0vLi4uLi4uMC8vLy8uLi4vLi4uLi4uLi4uLi4uLy8vLy8vLy4vLy8vLy8vLy0uLy4uLi4uLSwsLCwsKyssLCwsKysrKysrKysqKioqKioqKiorLCwsLCsrKioqKysrKysqKikpKCcnJyYmJSUkJCUlJSUlJSUlJCQkJCQkJCQjIyMjIyMjIyIiIiMkJysxPVp4cmpqcXBwaF1USDgtKCUmKS01P0lUXmZub21lXVJGOzIwPmd3dn9rYmVsdks/REA6OkVEREZHRkxgdH+NiIaOkYSRo7G1trq7trm7uru6rqadop6KalpWUlJRU1NUUFBOTU1SVFJUVVVTUU5LSEZFRENEQ0NDQkJCQUBAPj09PTk4NDEuLi5BV1ZRUFFQT01VVjs1Ozw9Ojg0MzIwMTlHTU5NTk5OTk5RU1NHPSkoLzU7Q0pNVltfYmRmZ2ZjYWJVVlRLUFlbW1lVUU1FQTw7OjYwJyQkJCQkJCMjIiMiIiIiIycyPkFDQ0JAPz9AQkFBQUFAPz0zJSEgICIhISEhISEhISEhIiIiJikpKiorKyorLzEzMjQ0Njg7Ozo5PT1CR01SW2ZiYVxWUFRRTk5NSkZCQEBCQkNGSUtNTE1NUVVaXGBla29wcHB0d32Af4OHiYmIhoSEgoGBgICBgYSHio2Pj4yMi4eEf3t3cm9ubW1tbGtqZ2ZmZ2lscXd7gIKFio6OiomIjJKTk5KQjo6OjoyJh4uIeXd4e319enl4eHd3d3d3d3d3d3d3eHqAh4+Sk5KRj5OTjYuIi4qIiYyRk5WWk5CPj46Mi4uJKCgpKSoqKSkqKioqKysrKywtLS0tLi0tLS0tLS4uLi4uLi4uLy4uLi8vLi8vLy8vLi4vLS4uLi4uLi4uLi4uLi8vLy8vLy8uLi4uLi4uLi4tLi8uLi4uLi0sLCwsLCsrLCwsLCsrKysrKysrKioqKioqKioqKywsLCwrKyoqKysrKysrKiopKSgnJycmJiUlJCQlJSUlJSUlJSQkJCQkJCQkIyMjIyMjIyMiIiIiJSgtOE1yeHBtcXRyaV9TRjUpJyUlJikwOUNOV2JrcG1oYFlPQDIvMENteHiBbWNjbnpyPUE/OjhBQ0JFQUdfdoOAkI6HjpSTmaCkr66wuby8ubOwtbS1qamhj3dVVFllc3l5eXl1bV5OTExOTk9SUlBOS0hGRURFQ0NDQ0JCQUBAQD8+PT06OTg2My4uLEBTUE9OTktLTVFSOjY5Ojg2NTIyMDI9S1BPTk5OTk5OUFVVVFQ5Mjk6Oz1BRlJXWltfYmBhX1xfWVNOS09YWllYU1BKPzw5NzUwKiUkJCQkJCQjIyMjIyMiIiMmLztAQUNCQD9AQUFBQkJBQD88NSkhISEhISEhISEhISEhISIiIiQmKCoqKCgpKiwvMDEyNDU0Nzc1NTY5OTtCSlNibGJaUlBPU1BNTUpGQ0FDQ0NESEpMTUxOT1JVW2Fma3J2d3h4eHl9gICEh4mJh4aEgoCBgYCAgYKEh4qNjo2MioeEgXt5c29tbW1tbWxraWZnZ2dpbXJ4fIGFiIuNjYqIiZCSkpCPj42Ojo6Lh4eMf3l5e3x8fHp5eHh3d3d3d3d3d3d3d3h7goePk5SSkZGTkYyLi4qIiIuPk5WVlZKQj4+OjIuKiCkpKSkqKioqKiorKysrKywsLS0tLS4tLi4uLi4uLi4uLi4uLi8uLzAvLzAwLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLSwsLCwsLCwrKysrKysrKioqKiorKysrLCwsLCwsKysqKysrKysrKioqKiopJyYmJiYlJSQkJSUlJSUlJSUkJCQkJCQjIyMjIyMjIyMjIyIjJCcrNEdpdm5qcXZ2bmNWRjUnJCQkJSYpMTpFUFpkbHBrZl1SRzouLTRVc3h4f2xjYWh3flU6QDc2P0FDREFRdYaMhpKVk5aWk5eam6WmrLm+vLOzsrOxrKSoppSAXmJ0fn59fHt4eHV0a2BZWFdVUlJPTEpHREVGRkREREJDQUA/P0A+PTw7Ojk4NzU0Li0vP09MTUxKSUdJUEw2Njk2NTMxMC81Q01SUk5PTU1MTE1QU1dcVkY7OTw7PUBJUFZXWlpaWVtaWVVQTExTWFpWUk5MQzk4NDAsKCUkJCQkJCQkJCQkIyMjIiIjJCs4QEFCQ0JBQUFAQEFBPj8/PDcqISIiISEhISEiIiIiIiIjIyIiJCYrKikqKikqKioqLzIyNDQwMTAvNTc8QEVKW2ZqYVlUT1BQTkxLR0NBQkFFRklLTE1NTU5RVV1haXB4fH19e3p6fn+ChoaIiIeHhIOBgIGAgIGDhoiLjY6Mi4mGgn55dG9tbW1sbW1ramloZ2hoam50eX6BhoqNj4yKiY2SkZCPjouNjY2LiIaJiHl5eXx9e3t6eXh4dnZ3d3d3d3d2dnZ5fYOHkJOTkZCRk5CMjYqKiIiNkJSVk5WRkI+NjI2MiYgpKSkpKioqKisrKysrLCwsLS4uLi4uLi4uLi4uLi4uLi4uLi4uLzAwLy8wMC8vLy8vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4vLy4uLi4uLi4uLi4uLi4uLi4uLi0sLCwsLCwsKysrKysrKyoqKioqKysrKywsLCwsLCsrKysrKysrKyoqKioqKScmJiYmJSUkJCUlJSUlJSUlJCQkJCQkIyMjIyMjIyMjJCMiIyUoMD1eeXNpbnZ2cWdaTDYoJCMkJCUmKzM7RlFbZW5uamFaTUEzLS04XHh3c35wYWNodIB1QD06NTxAQUNMZoaPkJSWlpiZkoSMkZGaoKSytre0sa+srZ+ZlpaUjW50e3p2d3Z3dHNzc3Rxb21qaGRiXVlUUk5MRUREQkFCQUBBQUA/PT08Ozo5ODc1NDMwLS1ATUdHRkZGRktRRjY4NjUzMC8vOElRU1NRT01NS0tMTFBSWVdYTDs2OTw9Q0pNUlRWVFRUVVZRTU1TWFlWU09MSUI4MS8rJSMkJCQkJCQlJSQkJSMiJCIiIyMmMj0/QEFBQ0NBPz1AQkJAPz44LCIiIiIhISEhIiIiIiIiIyMiIiQkKykqKywqKCgoKzAvLzAtKioxNDAzODc5Pk9XYVdRWllRUE1LSUZDQEBDRUVITE1LTU1MT1RbY2pzen+BgoB+fn5/gYSGiImGhoODgYCBgICDhoeJio2Oi4uIhYJ7d3JubW1tbGxsa2poaGdoaGpvdXp9gYaKjYyLiYqPkpGPjo2Njo2LiIaGjIZ6eHp7fXt6enh3d3Z2dnZ3d3d3dnZ2eX2DiI+TkZCQk5OQjIyNiYeHjJKUlJWTkZCPj46Mi4mIKSkpKSoqKisrKyssLCwsLC0uLi4uLi4uLy8vLy4uLi4tLS8vMDAwMDAwLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLS0wMC8vLy8vLy8vLi4uLi8vLy4uLi4uLi4tLC0tLS0sLCsrKiwrKysrLCwsLCwsLCwsLCwsLCwrLCwsLCwrKysrKioqKSopJiYmJiUlJCQkJCQkJSUkJCQkJCQjIyMjIyMjIyMjJCQjIyUpLDZOc3dsanJ1cWtfTzoqJCEiIiMkJyszPUhSXmRramVdUkg9MSw1SGt9f32Ac2JjaHSAf2U1OTY4P0NCW3yQk5GZnpiUnJSHio+RmKSjqauvs7Spo52PkZCMho90Z3R1dXRycXJvb25ubmxsaWZiYF9fXlxcXFhVVFFNSkhFQT09Pj09PTw6OTg3NjUyMTAuLjxLSEVGQ0JCR1JBNjg3MjExMT1MVFdXU1FQT0tLS0tNUVJTTlRTRTw9P0BDSE9SVVRPTk5MUFBQUFJSUE5LSUQ+Ni8uKyYlJCQkJCQkJCQkJCQkJCQjIyMjJCs4PkBAQEBCQT4+Pz4/PTw7NSsiISEiIiEiIiIiIiIhISMjIyMkJCcoKCopKSgrLi8sKykqKSkqLTE3PD1DR05XW2FvdGJVT05NS0dEQkBBRUhISUtNTU1NTE9SWmJrdnyAgYOCgH58f4GFh4iGhoSDg4GAgICAhIeIioyNjIuIhoN/eXNvbWtra2xra2tpZ2ZnaGltcXZ7f4GGio2Ni4iNkJKOjY2LjY2MiYWEio2AfHl5e3x7e3l4eHd2dnV1dnZ2dnd3eHp+hIqOkpGPkJOSjo6OjomJio6TlZOUkpGPj42Mi4qIhykpKSkqKisqLCwsLCwsLS0tLi4uLi4vMC8vLy8vLy8vLi4vLzAwMDAwMC8vLy8vLy4uLi4vLy8vLi4uLi4uLi4vLy0tLy8vLy8vLy8vLy4uLi4vLy8uLi4uLi4uLSwtLSwsLCwsLCwsKysrKywsLCwsLCwsLCwsLCwsLCwsLCwsKysrKyoqKikoJyYmJiYlJSQkJCQkJCUlJCQkJCQkIyMkJCQkJCQkJCQkIyQoKzJFa3xva3B0dG5jVUItIyIiIiIjJCctNT1IUl1mampiWE1CNzA1R2l8fn12fXdiZGZwgIJ+SDc3Nj1BSGqKl5qWmKOkm56bkIuMjpiipq2srrGtppyTi4iLi4SIgGtvb3FxcG1ta2pramlpaGRiZWBfX1pZWFhYV1RRU1JTUlJQRz89PTs6Ojk4Nzc2NDIyLi4uPURCQUNCQkRJVD42NjQwMjRCT1NWV1NTUE9MSkpMTE1RU01OVFNMQj9AQkRJTU5NTUpEREVHSEZERENFRkNAOTEsKyknJiUlJCQlJSQkJCQlJSUlJSUlJSMlLDY8Pz8/QD8/P0A+PDo4MyojIiIhISIhIiIiIiIiIiIjIyMjJCQmJycnJiosMDk8MygoJyYnKTE9Q0VNUFFVVllfcIB5XlhOS0xJQUBCQkNGR0lLTU5OTk1OT1VeZ3J7gIGDgoB+f3+BhYeHhoWCgoOBgICCgoaJiouNjIuIh4OAe3dybmxra2tsa2traWdmZ2hpbXF2e3+BhoyLi4qKkZGQjY2MjI2Ni4eDhoyGfHp5enx8fHt5eHd2dnZ1dXZ2dnZ3d3h6foSKjpCPjpGVkI2OjYyIiYyRk5WTlJKRkI2Mi4qJh4YpKSkpKyssLCwsLC0tLS0tLi4uLi4uLzAvLy8vLy8vLzAwMDAwMDAwMDAvLzAwLy8uLi8vLy8uLi4uLi4uLi4uMDAvLy8vLy8vLy4uLi4vLy4uLi4uLi8vLy8uLi4tLS0sLCwsLCwtKysrKyssLCwsLCwsLC0tLCwsLSwsLCwsLCsrKysqKikpKCcnJyYmJSUlJSUlJCQkJCQkJCQkJCEjJCQkJCQkJCQjJCQkKC48YH90bHF2eXFoWk41JCEhIyMhIyUnLjU8R1FbZGllYVZKQTk2P12CiH56dnt7aGJibH6Eg3QxOTU8QE92kZuen6KhpKCcnZmNjI2TnqSlpKGgn56YkYp7dHh1e4ppa2tsbWpraWdnaGZmZGFbVltcWlhaWFRRUFBPTU1NTU5RU1JHQTw7OTo4OTg4NjU1MS8wLzJGR0VFQkRFSVJQNjMzMjE2R1FUVFVVUlJPTUtLS0tLTU1QT05PTEQ2Mjo/QUVGR0hGQkNDQ0I/Q0ZJSkhGQTwwKygnKScnJyYmJSUkJSQlJycmJiYkJCUlJSYqMDc7Pj89P0A/PDg0LSYjISIjISIiICIiIiIiIiIiIiIiIyYmJSYnJycoJyk0Oi8oJiUnJysxO0JFSk5RU1NXWFlqfl1eb1BIR0NAQEBCRUZJS0xMTk5NTk1RV2Ntdn2AgYF+fX1+goeJiYeFhIKCgYGBg4SIiouNjIuIh4aCfXd0cWxra2tra2tramhmZmZnaW1xdnt/goeLi4uLjpGQjo6NjY6MjImEgoqMgXx5eXx8fXt6eHd3dXV1dXV1dnV2dXV4en+FiY2Pj4+SlJCOjo6MiYqOkZSUlJWSj46NjYyKiYiHKSkpKSkqLCwsLS0tLS0uLi4uLi4uLi8xLy8vLy8vLy8wMDAwMDAwMDAwMC8wMDAvLi4vLy8vLi4uLi4uLi4uLi8vLy8vLy8vLy8uLi0vLy8uLi4uLi4vLy8vLi4uLS0tLCwsLCwsLSsrKysrLCwsLCwsLCwtLSwsLS0sLCwsLCwrKysrKiopKSgnJycmJiUlJSUlJSQkJCQkJCQkJCQkJCQkJCQkJCQkJSUkJikzT3l/cXB3fXpwZFRDLSMhIiIjIyQmKCszPEdSXGJmZGBVS0RDTGB7jIZ6d3Z6fGlhYGp8hIOIWisyNj5VepCbnaWmpaeimaCflI2Ojpedn6KfnZyUin91aWJhXG6Hdl9nZ2hoZmVjYmRlYl9fX11aWFpYVlFPTUlJSUtLS0xLS01OTUdDPzw6OTk4NzU1NTQxMTAuOUhFQkVERkZKT0YyMjQzN0hSVVRUU1NTUU9NS0pLTEtLTU1LS0o/MCUnLDI5O0NHRkRAQEFAQkZKSUhGQ0A2LyonJycmJycnJyYmJiUkJScoJycnJiQlJSUlJSYqLTM4Oj0+OzYxKiQiIiUkIiMkJSEiIiIiIiIiIiMjIiMkJCUlJiYnKCYnKCYnKCcmJiUnKjI2PkRHTU5QU1pjboFhTl5cSUNBPz9AQkZISUtMTE5OTU5KT1NdaXF5f4GBfn18fYSGh4iGhYSCgoGBgYKFiYqMjIuJioeEgHx3c25tbGtra2tra2poZmZmZmhscXZ7f4KHi4uMjJCSkY2NjY2OjIqHg4SMiH97dnh5enp7eXd2d3V1dXV1dXV1dnV1eXuBhoyOjo6OlJSOjY6Ni4mLjpGUlJWUko+OjY2LiYiHhioqKiosLSwsLC0uLi4uLi4uLy8vLy8wMC8vMTEvLy8vMDAwMDAwMDAwMDAwMDAxMS8vLy8vLy4wLy8vLy4uLy8uLi8vLy8vLy4uLi4uLi4uLy8vLy8vLy8uLi4uLi0uLi4uLi4sLCwsLCwsLCwsLCwtLS0tLCwtLC0tLi4tLSwsLCwrKyoqKSkoKCYmJiYlJSUlJSUlJSQkJSQkJCQkJSQkJCQkJCQlJSUlJScrO2aBd3Fye4F5a15NOigjIiEiIyIjJigqMTpFT1pgY2NgVk9RXG19iIyHeHh2fH1rYF5keoSIkI5DKzI8VHqNl5+nqaqppZ6foZqOi4mJj5KYmpuLhX53bGdoaWFxfYRdYmZoZmRiX2RiYmBeXVtZVlZWVFFPS0lHR0VGSEhJSkpKS01PT0hDPDk3NzY1NjY1MzMzLzBDS0dGR0dDRklNPzExMjpHUlRVU1NSU1FQTk1MTExLS0pJR0ZEOiwjJCQlKS02PD0+PD5BQUJGSUVDQTo0LCgoJyorKyooKSgnJyYmJiYmJicmJycmJCYlJCMjIyIlKy4yMzEtJyIiIiMkJSIiIyMjIiIiIiIjIiQlJSYmKSsnJiYkJiYlJScnJiYnJygoKSksLjE4PUVKUFdganZ1XFlcal5HQEFBP0FGSElLS0tMTk1LSkxQV2Vtdnx+fn59en6FiIiHhoSDgYGBgYCDiIqLj4+LiouGhYF7d3Nua2tra2pqa2poZ2dnZ2dobHF2fH+EiYqKjZCRkZCOj46OjoyJhYSHjIR+enl4eXt7enh2dnV0dXN1dXZ2dnV3dnh9gIWLjo6MkJSSj46OjYqJjZGTlJWUk5KPjIuLi4qIh4YqKioqLC0sLCwsLi4uLi8vLy8vLy8vMDAvLy8vLy8vLzAwMDAwMDAwMDAwMTAwMTEwMC8vLy8vLy8vLy8uLi8vLi4vLy8vLy8uLi4uLi4uLi8vLy8vLy8vLi4uLi4tLi4uLi4uLCwsLCwsLCwsLCwsLS0tLSwsLC0uLi4uLS0sLCwsKysqKikoJycmJiYmJSUlJSUlJSUkJCQkJCQkJCEkJCQkJCQkJSUlJSYpLD9xhHRyeYCCdWZZRjEkIyIiIiMiIyUnKjE5RE9aYGNkYVpdZ3F+homKhHl+f4B/amBcXnaHj4yMejYvNU93i5egp6mpqKeinJyXi4d/fIKMkpGKeXV2c2ZhZ2tyfXV+bFZfY2JgXFxfXVxbXFhWU1NTUVBNS0hGREFBQkFBQ0REREVHSUlKR0I8ODY2NTY2NjUzMzIyN0tPR0dHR0pHSEw9MDI4RlBUVFVTUlBPUE5NTEtLS0tKSUZFQjgqIyMjJSYnJikrLzo8PEBEREVGQjUtKistLS0qKysqKSopKCgnJyYmJiYmJiYlJSYmJSQkJCMiIyMiJCQiIiEiIiEjIyIiIiMjIyIiIiIiIyQkKSwxNTk3NS4pJygoJSUnJyYmJycoKCgqKyosLzdETVRYW1xbXmhpV1BKQz8+P0FDRkhJS0tLS0xNS0pKT1ZiaXR6fn5+fXp/g4eHh4WEg4GBgYGCh4iLjI+Oi4qJhIR/enZwbGlrbGxqamppZ2ZmZmdpam5yd3t/hoqKiouQj46OjoyNjo2Lh4SFi4iBfXl4eHl7e3t5dnZ1dHN0dXV2dnZ1dXd5foOIi42NjpKUkI6OjoyJiY2Rk5SVlJKQjoyLi4uKiIeGKiorKyssLS0rLC4uLy8wMDAwMDAxMTExMTExMTAwMTEwMDExMDAxMTExMTExMTExMTExMTAwLy8vLy8vLi4uLy4uLy8vLy8vLy8uLi4uLy8uLjAwLy8vLy4uLi4uLS0tLS4uLSwsLCwsLCwsLS0tLS0tLi4sLCwuLi4uLi0tLS0sLCsqKiopKCgoJiYmJiYmJSUlJSUlJCQlJCQkIyMjIyQkJCQkJCQkJSUlKy5Ab4F1dHmAgHBfUT0rJCMjIyIjIiMlKCwwOENOWF5hY19fa3V9hYmLi4N8g4WBfG1fW1x0hXtudn5iMjFEcIWUnaWoqKioo5yZk4R/f3d1f4SBdWdlbHFqYGVacHBdcXlVU1dZWVlaWlZXVlRTU05PUExMS0lGREE/PTw7PD9AQUBDRUZGRUNDQTw3NTY0NDY1NTU2NjI7S0lDRENISEhJTj0xNkZQVFVUVFVTUE9OTk1NTEtLSUlHRT81JSMjJCQlJicnKCotMjtCRkRBOzItLSwtLS0sLSwqKyooKCgoKCgmJiUnJSUlJSUlJSQjIyMjIiIiIiIiIiIjIyIiIyIjIiIjIyMiIiMjIyMlKjE4QUdJSEQ8MyokIyUlJiYmJicnKSorKykrLDA7RUxKT1BWXWNeVU5KRUJAP0BBQ0ZISEpLS01NS0pJSk9UXWhyeX5/gH99goOGh4aFhYOAgIGAg4eJjI6PjouKioWCfXdzbmppampqampqaGdmZmdnaWxwdHh8f4WJioqOj4+Ojo2Njo2OioWDiIyEf3t4d3l6e3p5eHZ2dXR0c3R1dnZ1dXZ3en6EiYyOjY+UkpCPjo2KiouNkpOTlJSTj46Mi4uKiYiIhyoqKysrLC0tLi8uLi8vMDAwMDAwMTExMTExMTEwMDExMDAxMTAwMTExMTExMTEwMDExMTEwMC8vLy8vLy4uLi8uLi8vLy8vLy8vLi4uLjAwMDAvLy4uLy8uLi4uLi0tLS0uLi0sLCwsLCwsLC0tLS0tLS4uLi4uLi4uLi4tLS0tLCwrKioqKSgoKCcnJyYmJiUlJSUlJSQkJSQkJCMjIyMkJCQkJCQkJCUlJywvPmqBdXN6gHplV0kzJyQjIyMjIyIjJCcqLTZBTFZdYGJhX258hYiIjI2DeHh7fX1vXVpbZ2ZfaXuDfEgpPmR9jpafpKaopqKdl5OAdXx2cHJwb2xlYWhoZGdwZU5eSWOFWU1RU1RVU1VVU1JSUE5ISUtKSkdFQkA9Ozk4OTk5Oz08P0JDQ0VFQkJAPDc2NDQ1NjY2NjY0Mz5JRURDREVERkhUQzZCT1RVVFNRUU9PTk5NTEtLS0lJR0U/MiQlIyQkJSYnJygqKTRAQkI/Ny4rLS4vLC4uLS0sLCsrKCcnJycnJyYmKCgoJyUlJSUkIyMjIyIiIiIiIiIiIyMiIiIjISMiIiMjJCQjIyIlKjQ/SlNXV1ZSTEEzJyQjJSYmJiYpKSwvLSwuMzY7PD9IS1BdbGxnX1lRTkdDPz9AQUNGSEhKS0tLS0pJSElMUl1ncHh+f4B/f4KFhoeGhYWCgoGAgoWJi46Ojo6LioiEgHp2cGtqamhqampqamhnZmZnaGpscHR4fICFiI2QkY+NjY2MjIyPjoeEhIiJgX16d3d5ent6eXh2dnV0dHN0dXZ2dHZ3eH2BhYuMjI6QlpGOjo6NiouOkJKTlJWSj46NjIuKiYiHhoYqKisrKywuLi4uLS4vLzExMDAwMDAwMDAxMTExMDAxMTAwMTExMTExMTExMDAwLy8wMDAwMDAwMC8vLy8vLy8vLi4uLi8vLy8vLy4uLi4uLi4uLi4uLi8vLi4tLS4uLi4sLS0tLCwsLCwsLCwtLS0tLS0uLi0tLi4uLi4uLS0tLSwsKysqKikoKCgoKCgnJiYmJiYmJSQlJSQkJSQjIyMjIyMkJCUlJCQlJSctMz5lf3VzdnxwYVA9KyQjJSQjIyMjIyMmKS02QEtWXGFkZWJugIWJioyHgXV3eHt+b1xZWmZjZ3B6f3h8PS1Wc4eTmqClp6Wjn5qWhnp7d3FqaWhqZWdqaHF3e3JUSFFXfmJJT09OS1BNU1JOTEpIREVIRUREQ0E/PDY1NDQzNjY3Nzk+QkJCQUFBQEA8OTYzNDY1NjU0NDY4PUZFRERFRUNFTFdHQE1TVVNTUVBPT09NTU1MS0tKSkhGPjEkJCMkJSUoKCcnKCorNDk2MCstLi4tLS4uLS4tLi0qKigkIyYnKicmJygpKSonJiYkJCQjIyIiISMjIyMjIyIiIiMjJSQiISIhISIiIiIjKDJATFZhaWhnYVpQQjMqJCQlJSYmKCowNTo9QT04TFxsdnV2dnNuZ2FaUU1IREA/QUJER0lJSkpKS0tJSUlJSlBbZ3J6f4OCgIGEhoeHhYSEg4CCgYWIiouMjY2Mi4uHg354cm5qamlpampqamloaGdmaGpqbXJ2en6Dh4qPk5OPjo2NjI2PjoqEg4WKhX99eXZ2eXp7enh3dXV0c3JydHV2dnZ2dnd+gYiLjI2NkpiRjY2OjIqMj5GSlJSUkpCOjYyKiIeGhISCKiorKyssLi4uLi0uMDAxMTIyMjIyMjAwMTExMTAwMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAvLy8vLy8vLy4uLi4vLy8vLy8uLi4uLi4uLi4uLi4tLS4uLS0uLi0tLC0tLSwsLCwsLCwsLS0tLS0tLi4tLS4uLi4uLi0tLS0sLCsrKiopKCgoKCclJSYmJiYmJiUkJSUkJCUkIyMjIyMjJCQlJSQkJSYpLzZBYX51c3V4a1pKNSYiJCUkJCQjIyMjJiktNT9JU1xhZGdueoGEhoiGfWtwd3Z4enJgXV5kZ3V6e3l9jngvPmh6ipOZnqOioaCbkIeAenZwZ2dmaGdlZ294fHh3b2JcV2ddQ0tKRkZJSlRVTUdGREA/QkE/QD9APjo2MzMxMDAzNDQ1OT5AQD8/Pz4+Pj44NDM1NTY2NjU0NjdASEZEREZFRUhPWEtIUFVVUlFQT09PTU1MTExMS0tJRz8zJCQjJCUlJycmJygqKCcqJygsLy4vLy8uMC4tLy4vLSclIyMmJyooJycoKCgmJycmJSQlJCMiIiIjIyMjIyMiIiMjKTUyJSEhISEiIiIiJCw4RFNfa3R4dG9oXE4/MColJSUnKS4wLzQ8SFlbUHWAd3N2dnV0cW1mXVRMRkI/QUFDRUdJSUpKSktLSUlISEpQW2dyeoCEhIKDg4aIh4WEg4KBgoOGiYqMjI2MiomJhIB7dnBraWlpaWlpamlpaGhnZ2pra29zeHqAhYiNkpSRj46NjY6OjoyGg4SHiYOAfXl2dnh6enl4d3V0c3NycnR1dnZ2dnd6foSKjI2NjpWUkI6OjoyKjI+RkZOUk5GPjIyKiYeGhISEgiwqKy0tLC0tLi4tLjExMDAyMjMzMjIyMjIyMjIxMTExMDAxMTExMTEyMjAwMTIyMjExMTEwLzAwLy8vLy8vLy8vLy8vLy8vLy8vLy8uLi4uLi4uLi4tLS0uLi0sLS0sLC4uLi4sLCwsLS0tLS0tLS0tLS0tLS0uLi4uLi4tLS0tLS0qKikpKSgoKCcnKCgnJyYmJiYlJSUlJSUlJCQkJCQjIyQkJCQkJSYnKzE6Qlx8dXFxcWxWPy0mJCMlJCUkIyMjJCYpLjI7RVFaYmhtdoCChIOEel9PbWppcHBzZGFgZnN+eHZ5hYmIYTNbcoKKj5ien52cmIuGhoJwZ2FhZWhnYl5mb3dwb3Z4eG92bzhER0JBQT9BRUVEQUM+Oz08Ozw9Ojg1MzIxMS8uLzExMTU5PD0+Pj4+PT09Ozg1NTY3NzY4ODg6PERIRkdFRkZGSE1UTkhRVVNRUE9PTk1NTU1MS0tKS0ZBNSYlJCUlJSYnJicpKSgmJSQoKy0vLy4uLjAwLy8wMS8nIiIjJScsKigoKCcnJycnJyUlJSUkJCMjIiIiIiIiIiMjIyYtKiQiISEhISEiIiUvPUtaaXZ+hH96cmdcTT4xKScpLDA0PEpUTURPT19+gXx2dnV1dHFtZl5WTUZCP0RBQkRHSUlJSktJSUhIR0dIT1lncnyDhoaFhoaHh4eFg4KBgYSEiImKjYyMioiGhYR+eHRuamhoaWloaGpqaWhnZ2Zpa21wdHl8gYeMkZSUkY+Pjo2Oj4+Kg4GFiYeCfnt4d3Z4enl4d3Z0c3Nzc3N0dXV1dXZ5fIKGiYyMjZCVkpCQkI2KiYyRkJOTkpGPjIyLiYeGh4WDg4EsKistLi4tLS4uLzAxMTExMjIzMzIyMjIyMjIyMTExMTAwMTExMTExMjIxMTMzMzMxMTExMC8wMC8vLy8vLy8vLy8vLy8vLy8vLy8vLi4uLi4uLi4uLS0tLi4tLC0tLCwtLS0tLCwsLC0tLS0tLS0tLS0tLS0tLi4uLi4uLS0tLSwsKiopKSkoKCgnJycnJycmJiYmJSUlJSUlJSQkJCQkIyMkJCQkJCUlKC40O0ZXd3VxcW9uUzcnJSUjJSUlJCMjIyQmKS0zOUNQWmNtdHt/gIF8dWI8R2twcHNxd2hkY2ZzfHd2hImBgn9QQ2V0f4aOlpmamJWGhIiGcFxgYWdoY2BdY2x5fXVrbHt8fIFMOUJDPDs7PEA+PDw9Ozk5ODc3ODY0MS8vLi8tLC0vLy8yNjk6Oz4+Pj09PT07ODc3Nzc3OTk3Ojw9REdGRERGRUVITFBOSE5QUE9OTUxNTU1NTEpLSklHQzkmJCQlJSUmJycoKSkoJiUkJSsuLi8uLjIyLzAzNTUvJyAgISMnLCooKCgoKCcnJycmJiYmJSUkJCIiIiIiIiMkIyMhIiIjIiMhISEhIiImMD9MWWp7h4qIgXpxZlxNQTg0MzZBU2Fsa1tdYmd5fYKAd3R0dXVzbmliV05FQkJBQkRGR0lJSUpLSUlISEdHS1JdaXN+hYeHh4eHh4eHhYOCgYCFh4mJjI2MiomIhoOBfHZxbGpoaGlpaGhqamloZ2dnaWtucXV6fYSIjpSVkZCOjYyNj5COhoKChoqFgH15eHZ3eXp5eHd2c3Nzc3NzdHV1dXZ3eXyChoqNjY6SlZKPj4+Oi4qOkI+SkZOQjoyMioiHhoSDhIKBLS0tLi4uLi4vLzAxMTEyMjIyMjIyMjIxMTIxMTIyMTExMjExMjIyMjMzMzMzMzMzMzMwMDAwLy8vLy8vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLy0tLi0sLCwsLCwsLCwsLS0tLS0tLS0tLS0tLS0tLS0tLi4uLi0tLi8uLi4uLS0sLCspKSkpKSkoJycmJicnJycmJiUlJSUlJSUlJSUlJSIkJCQlJSUlJyswNTxJWG14a2hrbVkyJCUlJCUlJSUlJSUmJigrMjhBTVxodXx+fHt3cFw7KD9meXJxdHpqZGNibXR7hYV9e3p8dUlSbXl/gouNk5eUiYOEgW1fXGBhXmFkY2d0f4F9cGt0eHR3ai05Pjw4Njc6Ojo4Njc1NTMyNjY1MTAvLSwsLCgqLSwsLzE0Njc6PDw8Ozs8PTk3Nzg5OTxES0E+Oj9FR0dFREVFRkdJT0VBS05LTE1MS0tLS0tLSkhHR0U9KyMlJSYmJycpKiwpKCYlJCUsLi8vLzExMTY4ODo4MCYgICAiJy0uLComKSgpJycnJycmJSUlJiQkJCQkIyMjIyMjIyMjIyMjIiIhISIiJS49TF1tf4mKiYJ9dW1oXlRQSUZIVGJmZWtlZWxzdnl4fHp2dXd0cnFrY1lQSENBQURFR0hISUlKSkpKR0dGR0xTXml0f4WKiYiJiIiIhoSDgoGChIeIjIuNi4iJhoWCfnhybmppaGhoaGhoaGhoZ2dnaGprcHJ2e36BiJCUlZGRjo2OjpCOioODhYiIg4B9end3eXp5enZ2dXRzdHR0dHR0dHRzdnh8g4eMjoyOlJSQjo2Ni4iLj4+OkJGRjo2MioqHh4aFg4CBgSwtLi8uLi4uLzAwMTEyMjIyMjIyMzMyMTEyMTEyMjExMTIxMTIyMjIzMzMzMzMyMjAwMDAwMC8vLy8vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8sLCwtLCwsLCwsLCwsLC0tLS0tLS0tLS0tLS0tLS0tLS4uLi4tLS4vLi4uLi0tLS0rKSkpKSkpKCcnJyYnJycnJyYmJSUlJSUlJSUlJSUlJCQkJSYlJSktMzM9Sllncm5nZmlkQCQlJSQlJSUlJSYmJSUoKi42QU5hdIF/fHl1bWFKNC42WXhzcnl7bGFhZ2lyf4Z/eXd3enpkS11weHmAg4qOkoqCdmxoZGRnYVlcYmludoGFfHJsbG5xc3Y+MTQ3NTQ1NTU2NDMyMjIxMDIzMS8uLiwsLCwoJykpKywvMDIzODk6PDw8PDw7Ojg5PD0/WWJIQkA+QklJRkZHRkZIR0hKQkNISktMS0pKSkpLS0pIR0dEQDUmJSUmJigqKiorKiclJSQlLC4vLy4wNDg9Pjs9OzMnHx8gIiowMTIvLSwrKyknJykpJiUlJSUmJCQkJCQkIyMjIyMjIyMjIyIiISEiIicuPEtebn2Ii4uHgn95dXBrZmBXV1hdZmdfW1NPXWRSSmtxbXJ2dXVxbWRcUkpDQkNERUdJSUlJSEhISEdHRkdMU11qdoGIi4uKi4qIh4aEgoKBgoWHiouLjIiIh4eEgHp0cW1raWhoaGhqampqaGdnZ2lqbXF0eXt+hY2TlZSRjo2MjY6QjoeCgYWIiIJ/fHl3dnh6eXd3dnV0c3Nzc3NzdHR0dnZ6f4WKjI2NkJWRj42NjYqJi4+Pjo6Pj46Ni4qKiIeGgoGAgYMuLi4uLi4uLjAwMDExMTIyMjIzMzMzMjIyMzMzMzMyMjMzMzMzMzMzMzMzMzMzMzMyMjExMDAwMC8vLy8vLy8vLy8vLy8uLi4uLi4uLi4uLi4uLi0sLCwsLCwsLCwsLS0sLC0tLS0tLS0tLS0tLS0tLS0uLi4uLS0uLy8vLi4tLSwsKykqKioqKikoKCkpKCcoKCgnJiUmJiUlJSUlJSUlJSQlJSYlJSUqLzE2PU1aZm9uaGRjZlYrISUkJCQkJSUlJicoKCkuNkZYb4KEgH14b2ZVRT82OVR1cGx8fGtjYmVpdoWGf3VzdXZ5emJMYHBwcnZ8hIN7cmpnaWhobWxrbXJ5eHp+gnltYVZLS0dNSy4wMzExMTExMjMxMC4uLy8tLy8tLS0rKywsJyQpKScoLCwwMzU4ODo6OTo7Ojo6Ozo9Pz9CQ0NCQURGSUxJRkhHREZJSkhAPkZISkxJRkdJSktKSEZFQ0A5KSQkJiQoKysrKyooJSUlJisuMDAuMTo9QEJAPTo0KB4fHyUtMjQ3ODUvLS4qJiYlJicnJSUlJSQkJCMlIyUkJSUjIyIiIiIjIyIiIiMlKjRHWWp9houMioeGg39+e3p3bWxnWVtXXGZeRkBGNTxgdnx3c3NudG9nXFNKRENDQkVHSElJSUlJSUlISEVITVRfbXiDiYyNjIyLiIaGhIKCgYSHiIuLi4qIiIaDgX15dG9samhoaGlpaWloaGhnZ2dpa25ydHh7gIqSlZWSkY+NjYyPjomDgYSEiIR+fnp4dnV3eHh3dnV1dHNzc3Nzc3N1dXZ5e4CGi42MjpSUkI6OjouJiIuOjo6Oj4+OjYuJh4aGhoSCgoOELi4uLi4uLi4wMDAxMTEyMjIyMzMyMjIyMjMzMzMzMjIzMzMzMzMzMzMzMzMzMzMzNDQxMTAwMDAwMC8vLy8vLy8vLy8vLi4uLi4uLi4uLi4uLi0sLCwsLCwsLCwsLCwsLCwtLS0tLS0tLS0tLS0tLS0tLi4uLi0tLy4vLy8vLS0sLCspKioqKiopKCgpKSkpKCgoJyYlJiYlJSUlJSUlJSQnKyknJSYoKywvNT5MWmZvcWtnY2ZjQSIkIyUkJSUlJSUmKSkrM0RUbIWIhIF7dGpfVlBJREZSYWJmfnpuY2Foa36Jh3tzc3V2d3x5T1FnbGprb3VzdGtnamtsb3R8fYCGh4SEf3lxXk1EOzEyMjQtLS0uMDAxMS4vLy8sKisrKystLCwsKysrKyglJiYnKCorLjEzNTc4NzU2Nzc3OTo6PkJERkhKRkZGRkhKTE1LSklIS0tKR0BAREhKSURER0lKSUhHRUI/OSskJCUmKCssLCwrKSYlJSUqLjAwLzY+QERDQT8+MyggISInMDc8PDk5ODUyLigoJyUmJiUlJSUkJCQjIiMkJSUlJSMjIyMjJCQkJCQjJCgyR1lqfIeMjYyMi4iEhYOCgXt1bl1cY2llWlBWTz9Lan1+dnRoQ2BxaGFVTUZFRUVHSEhJSkpJSUdHRkZFSE1UYG54g4mMjYyMi4iGhIOCgoSFiImLi4qJhoWGg4B8d3Nta2loaGhoaGlpaGhoZ2dnaWtucnV5e4KNlJSSkY+OjIyPj4qFgYCDiIiDgH16eHZ1d3h4d3Z1dXRzc3Nzc3NzdXV2eXyCh4yMi4+Wk5CNjIyKiImNj46OjpGPjYuLiYeGhoOAgoOGhy0tLi4vLy8tLzAxMTExMjIyMjIyMjIyMjIzMzMzMzIyMzMzMzMzNDIyMjMzMzMzMzMzMjIxMTExMTAwMC8uLy8vLy8vLi4tLS4uLi4uLi4uLi4tKywsLCwsLCwsLCwsLCwsLS0tLS0tLS0tLS0tLS0tLS0tLi4uLi4uLi4uLi4uLCwsKysrKysqKioqKSkpKSgoKSgnJiUlJSUlJSYmJicqOEM3JyYnJiktMDY/TFtmb3RwaWdiZVovJCMjJCYkJCYnKCwzPU9jeIWLi4WBd2xkYFlXUk5PWGFkbnt3bmdmaHCHjIN5a25ycHJ3e1dBV2JmYWNlZ3duYWxvc3uDiIiGioyMiX5rV0Q4NjQ0NDQ3MSooKS8uLS0tLSwsKikpKSoqKioqKCcnJyclIyQmJicnKiwvMTM0NTUzMzMzMzc4ODxCRklKSUpKSElMTFBSUVBPUU5LSElIQ0FCRUZCQkNHR0hJSEZAPzksJSUlJygrLS4uLSooJSMjKS0uLjE6QEVJRUJCPTEkHyMlKzI6PT89Ojg2NDIrKiklJCUkIyMjJSUjIiQkJSUlJSQlJiUmJycoKSkoJyksMkVWZ3mHjo2Pj42LiYmIhYSAfHBka29qaVtdaFs1QWR2gXx3cmJjcGphWE5GRUVHSUlJSkpKSUlHR0RERkdLVWFteIOJjI6MjIqIhoOCgYOEh4uLjIqJiIaFhYKAfHhybGpoaGhoZ2dpaWhoaGdnaWpsb3N2en2KkpOUk5CPjYyNjo2IgICBhIqFgn57eXh3dnh4d3Z0dHRzcnJyc3Nzc3V1dXl+g4qMjI2OlJGOjY6LiIeKj4+NjpCQkI6LiomGhoWDg4OFh4gtLS4uLy8wLzExMTExMTMzMzMzMzMzMzMzNDQ0NDQzMzMzMzMzMzM0MzMzMzMzMzMzMzIyMjIyMTEwMDAwMC8vLy8vLy4uLS0uLi4uLi4uLiwsKyssLCwsLCwsLCwsLCwsLCsrLS0tLS0tLS0tLS0tLS0tLS4uLi4uLi4uLi4uLisrKysrKysrKysrKykpKSkoKCkoKScmJiYmJiYnJycoLUZaTDAwKycpLTI4QU5aZW5yc2xpY2NmUSkjIyUlJCMoKC45S2B0g4mJioqDeWpjYWFgXFhWVVlodXZzeHJoZmlvgIaBdW5ubm9wd3lZOEtXXF5dWltueWp3eXJ9hYeHiYqKiYJvVz45NDQ4Pzs2OTcuJygqLC0tLCwrKignJycoKCcnJicmJSUlIyQkIyQmJScpLC4vMTAyMjIyMjI0Nzg+Q0lLTExMTU9OTlFUV1hYWFZST0tKSUdCQUE/PT9CQ0VGR0ZEQDw1KiYmJygpKiwsLi0qKCcmJSgtLjAwPENFSUlFQjorISAiJTA3Ozs7PDs6NzQxLiwrJyMlJSMjIyQkIyIiIiEhISMjJCQkJSYnKCkpKywuMThGWWp6iI6Ojo6OjoyMi4eFf3lyaF5PRz40MDAzMTpBTW15dXZ2c29rY1tRSUZGSEpKSkpKSkpKSEhGRkVHS1VhbXeCiYyNjYyKh4SCgoGDhIeKi4yKiYeFhIKAgHx2cGtpaGhoaGdnaWloaGhnZ2lqbG9zdnqBjZaRko+OjYyNjI+LhoCAgYSJg4B+e3d2dXZ4eHd2dHR0c3JycnJzc3N1dXd7foOKjI2OkpSQjY2Ni4iIi42Njo+QkI+OjIuJhoODg4OFh4eJLS0vLy8vMDAxMTExMTEzMzMzMzMzMzMzMzMzMzMzMzM0NDQ0MzMzMzQ0MzMzMzMzMzMyMjQ0MTAwMDAwMDAwMC4uLi4uLi4uLi4uLi4uLi4sLCwsLCwsLCwsLCwsLCwsLCwrKywsLS0tLS0tLS0tLS0tLS0uLi4uLi4vLy4uLS0rKysrKysqKisrKiopKSkpKCgoKSgoKCgnJygoKCgoKSs/VVA8Oy0pKi4yOkVQW2Rtb3JsaGRiZWdDIyIlJiQlKy47T2l8h4aJiYiBeGNYWF5hYF9dWldXZXt7b3pzZ2dmbXR4eXZwb21vcnV6XDM2S1ZWWFhSXG50eHJia35/f3qIhn1pUEA5ODg2NTg4OTs/NSgnJycqLCopKCgnJSUlJCYlJSUlJCQkJCQkIiEkJSQmKCouLC0vLy8wMTExNDk5P0VHTU5PT09RVFVWV1lZXVpZWFVSTkpJSUdEQj48PUFCQUJDQj44LyonJyYnKSoqKywsKigoKCUnKy8wM0BCR0pKSEAyJx8fICY1Ojw9Pj05My8tLS4tLSooJiQkIyEhISMiISEgICAhIiQkJSgpKSouLSwuMDRFWnB+fYSMj46NjI2OjouKh311amBXT0U3LigmIyYqNjpATllpb3R0bmZeU0xIR0lJSkpKSkpJSUlIRkZFRkxXYWx4gIiMjI2MioaDgoGBhIaIiouLioeHhoWDgH97dm9samloaGhnZ2hoaGhoZ2hqa25vdHd7hJKUkpGOj4yLjIuPiYOAgIGFh4R/fXx4d3R2eHd2dnRzc3JycnJycnNzdHV5fYGHi42MjZSUkI2LjIqIiIyPj4+PkZGPjYqKiYaFg4KDhYiHiC4uLy8wMDAwMTExMTExMzMzMzMzMzMzMzMzMzMzMzU1NDQ0NDMzMzM0NDMzMzMzMzMzMzM0NDEwMDAwMDAwLi4uLi4uLi4uLi4uLi4uLi4uLCwsLCwsLCwsLCwsLCwsLCwsKyssLC0tLS0tLS0tLS0tLS0tLi4uLi4vLy8uLi0tLS0rKysrKiorKyoqKSkpKSgoKCgoKCgoKCgpKSkpKSoqMklYSzotKisvNj5HUl5na2tmbG1jYGNpZjsiJCQlKSw1SWiChYSFhoV8b1hKTlBYXmJiYGBcWmN9fnuCdWpqaGttb3V4cm1ubnJ1d14xLjdLUVBRTU5YXlpSRkJpfXt1enZrUDs1Njo5ODc3Njg7PDsuJiUlJicnJSUlJCQkJCMkIyMkIyMiIiIiIiEhIyMkJSYpKywsLS0tLS4wMTQ3Oz5GSktOUFFRU1ZXWltcWVtdXFpZVVNPTk5LSUdEQj4+QEBBQT88NS8qJycmJygoKisrKyooKCgnJysuLjRCQkdJSEY/LSMgHyApNTs9Pz43Mi4rKSYkKCwsKiYkIyIjIiIhIyIhISAhISMkJScqKSosLDA1OzlFU2R7f3h8iY+OjYyMjY2LioZ/eXNrZlpSQjkuKCgrMDlERkxPTlFca2tpY1dPSklJSkxKSkpKSUlIR0VFRUZMV2FueYGIjIyMi4mGg4KBhYWHiouMi4qHhoSDg4F/enVtamhoZ2dnZ2doaGhoaGdoam1vcnV4fouVkpKPjo2Li4uLi4WCgICBhYWCf316eHd1dnh3dnV0c3NycnJycnJzc3N1eH2EiYyOjY+Vk46Mi4qKiIiMjo6RkZGRj42LioeFhISEhYiJiYovLy8vMDAwMDIyMjIxMTMzMzMzMzMzMzMzMzMzNDQ0NDU1NTUzMzMzNDQ0NDQ0NDQzMzQ0NDMyMDExMDAwMDAwLi4uLi4uLi4uLi0tLS0tLS0tLS0rKysrKywsLCsrLCwrKywsLCwsLCwsLCwsLC0tLS0tLS4uLi4uLy8vLi4tLSsrLCwsLCoqKysqKikpKiopKSgoKSknJykrKiosLCssLTA5TFQ8LS0vMzpCTFVgaGpnYWBraGJiY29jLx8kKCsvPl5+h4SHhYF3XUI1PEVMUlhcX2FkYmJkc4CIiHtua2ppamxydHBra2xvdXVfMiwuOUhLSE5LSkxCQj80O2R4enBiTjs0NTc5Ozs6OTY4Ojs7NiglJCQlJSUkJCMjIiIiIiIiIiIiIiIiIiIhISEjJCUmJigrLS0tLC0tLy47QT1CRUlMT1JTVFVVVVhcXl1eXl1dXFhVU1NUUlFQSUZEQD07Pj08OTQuKikpKCgoKCgqKysqKioqKCcpKi40QUZISEVCNykgICIjLDY9Pjw5NDAsKignJCQnKCooJCMjIyQkIiEiIiIhICEkJScoKy0tLzM2PFFobmpwf397f4qOiouNjYyKiIaHhn95dGxmXFJFNzMyMjQ5P0dFREdJS1daWV1hVElIS01JS0xJSklJSEZFREVGTFdgbniAiIyMjIqIhYKCg4WHiImMjIqJiIaFg4SBf3pzbGlnZ2dnZ2dnZ2hoaGhoaWptb3N4eIOPlJGPj42LioqLi4iFgYB/goeDgX99enl2dnd4d3V0dHNzcnFzc3NzcnN0d3x/h4yOjo6QlpOOjIyKiYmJjZCQkZGRj42Mi4iGhYOEhIaIi4qKLy8vLzAwMjIyMjExMjIzMzMzMzMzMzMzMzMzMzQ0NDQ1NTU1NTMzMzQ0NDQ0NDQ0MzM0NDQzMTEyMTAwMDAwMC4uLi4uLi4uLi4tLS0tLCwsLCwsKysrKyssLCwrKywsKyssLCwsLCwsLCwsLCwtLS0tLS0uLi4uLi4vLy4uLS0rKywsLCwsKisrKyopKSoqKSkoKCkpKiorKi0uLy8vLzExMS9HQTExMjg/SFBbY2lqZVtRWm1nYmFncVQkIyksMkhshIODgXlpSS4pMjQ7REpSWFpdYWRmaHWCh4Z/cWlnZmhsbWtpaWtsb3F2XywpKy40RkhFR0Y+NjVJRjUzVmRdSDw1NTY4OTs7Ojo5Nzk6Oz0tJSUjJCUlJCQjIyIiIiIiIiAgICAhISEhICAgICMkJiYlJigqKyoqKiwuNDk7PENITk9SUlJTU1RVV1xdXV5iYmBeWVZYWVhYV1dVTUlDPTk3ODczMCwrKSkpKCgoKisrKioqKiooKiwvNUFGRkVDPS8jHyAhJS02PD87NzEuKykmJSMjIiMkJiMiJCkpJSUjIiMjIyIjJScpKiwwMjIvMT1cdX56eXx+gICIioqLjIqJh4SBgoSDfHdwaWNcUEZBOjc2ODo/P0FERklOS05ISl5lU1VaSEZKSkpKSkdGRURESE9YYm96goeLjIqJhoWCgoWHiIiLjIyJiIiHh4WEgX12cm1pZ2ZmZmZnZ2doaGhoaGpscHJ0d3yIkpSPjY2MiYiJiYmHg4CAf4OGgoF+fHl3dXZ3eHd1dHRzc3R0cnJycnJzdHd8gIeNj46PkZOPjY2LiYmJi46QkJGRkZGOjIqHhYSEhYeJiYqKiDAwMTEyMjMzMzMyMjIyMjIzMzQzMjM0NDQ0NDQ0NDQ0NTU1NTU1MzM0NDQ0NDQ1NTU1NDQzMzIyMzIyMjAwMDAwLi4uLi4uLi0tLC4uLi0tLCwsLCsrKysrLCssKysrLCosLCwsLC0tLS0tLS4uLS0tLS0tLi4uLi4uLi4uLi0tLS0uLi0tLCssLCwrKioqKikpKikpKystLi4wMDEyMTEwMDExOUI9NTc+RU5UXWZqamJVS0hha2VjZG5xPiEoKjZReYJ9fnNXOSYoKywxNTxBSFBUWl9kbHJ+iYJ6fHNoZGJnbXFta2lqa29vcF4rKSsqKjdGSUVDPjMsMTMxKjFEQzg0MzI0Nzo6Ojs7Ozc4Ojs8NigoJyYlJicnJSQiIiMjIiIhISEhISEgICAgHx8hICIjJCUoKioqLCwsLjM2Nzs8QkdMT1JRUVFTVlZaWlxbYGFjYV5cXV5dWVxeV1NOSUQ8NzU2NDAuLi0sKikoKSkqKisrKyssKywtMTdAREVEQTcrISIiIyguNDs+OjQvKikmJSMiIiEiJCElJikpKSYkIyIkJSUlJiYqKyssLi8tLjtLWGN0eHdzfH97hIeKioqKh4SBeXyChYN8eHJpYlxWT0I6Pjo9QENFR0hMTlVRVlpKSFZTX2lcTUlKSktJR0VDREhRWGRveYCIiYuIiIWCgoOEh4iKi42NiYiJiYeGhIF7dnFtaGdmZWVlZ2dnaGdoaGltbXBxdHZ/jpKRjouLiomIiIqHhYKAf4CEhoKBf317eXh5eXl1dHNzcnJycnJycXFzc3V2e4KKj5GQkJSSjoyKioiIiY2QkZGRkY+OjoyKh4aGhIiJioqLiIcwMDExMjIzMzMzMjIyMjIyMzM0MzIzNDQ0NDQ0NDQ0NDU1NTU1NTQ0NDQ0NDQ0NTU1NTQ0MzMzMjMzMzMyMDAwMDAuLi4uLi4tLS0tLS0sLCwsLCwrKysrKysrLCwrKysqLCwsLCwtLS0tLS0sLC0tLS0tLS4uLi4uLi0tLi4tLS4uLi4tLSwrLCwsKyoqKiopKSsrKy0tLzAxMjIzMzQ0NDQ0NDQ+SkM5QkxUXWZrbGpgVUU4SGlpZGJpdGEqIys6Wnx9eHdjNyUnKiksLDA1OUBFTVNbZnJ4hJKFeXhzZWBgYWlwb2Zna21ub3JdLCgqLTEyOUZBQDw2KiopKCcoLC8wMjM1OTg6Ojk6Ozs5Nzc5PDstKCorLCgpKSopKCclIyQkIiIiIiEhICAgIB8fIB8iIyQlJikpKSosLCwvMzY4OTxBRUpPUlJQUFRWWFtcXF9eYGFiYF9fX1xbW1taV0lOSDw3NDIyMC8uLSwrKSkpKiorKysrKy0sLTA7QERFRD81JiAhIiQpLjM5Ozk1MCsnJiQjIiIiIiMjJCUoKioqJCUjIyMkJignKisrKysqKzNBUFdCPTk8Olpscn6GioqJiYiDfHVze4CEg354cGtnX1VOREJAQENGS0tNTExRTkg/S0tMT1hnbGJJSUtJSEZEQ0VJUFxlcHmAhYeJiIeEgoKEhYiJioqLi4mJiYmHhoOAenVxbWdmZmVmZmdnaGZnaWlpbG5xcnV2g4+QjouKiYiHhIWGhISBf3+ChoWCgYB+e3l4eXl3dHRzc3JycXFxcHFxc3N1eH6FjI+RkJKUko2Li4qIiImOj5CQkZGPjIuKh4aHiIeJiouKiImEMDAxMjIyMzMyMjIyMzMzMzMzNDMzNDQ0NDQ0NDU1NTU1NTU1NTU1NTU1NDQ0NDQ0NTU2NjQ0NDQ0MjIyMTAwMDAwLy4uLi4uLS0tLS0tLCwsLCwsKysrKysrLC0rKysrLCwrLCwsLS0sLCwsLCwtLS0tLS0uLi4uLS0tLS0tLS0tLS0tLS0sKysrKyoqKisrKiosLC8vMTIzMzQ1NjY1NjU2Nzc4OERMREhSWWBmbW1pW1A+MDVWcGljY2pxSCQpOFp+e3hzXC4mJikoKCssMDM5P0ZLWGl3eYOQjH96dWReXF1jbHBoZ2dpbG9yWi0nKi01OzlSSD06OTIrJSckJiYpLS4yN0A9OTg5Ojk5ODY2ODw8Ny0rLS8sLCwuLi4sKSUjJCMjIiIiICAgHx8eHh4eIiMjJCYnKCkpKSwsLzM3MzEzOT5BSE1QUU9RU1VWWFpdXVtbYWRjYmJfXl9hYlxSVFJHOzc1MzMyMC0uLSsrKywsKyssLC4vMDAzO0BDQ0E7MSQhISUnKC0yNjo5My0pKCYlJCIiJCUjJCUoKSksLSglJCQkJicnKCkqKikoKy84RVRVPTUqJy9CWGt9iIqLiYiEfXVraHF4f4GCfnhzbGVhWVJLQ0JGRkZJUFFTV1RMSVBOT1JZZVZdXU1LSkpHRURFSlNdZnF5gYOGh4aFhIODhYeKi4uKiYmJiYmJh4aCfnhzb2tnZ2VkZmZnZ2doZ2hpa21wcnR2eIiTjoyKiImIh4SFg4OEgX5/g4aDgYCAf3x4eHp4d3Rzc3NycnFxcnFxcXN0c3mAhoyQkpGSlZGMi4qIh4qMjo+Oj5GRj42MiIiHiImJi4uKiomGhDIyMjIyMjMzMjIyMjMzMzMzMzQzMzQ0NDQ0NDQ1NTU1NTU1NTU1NTU2NjU1NTU1NTU1NjY1NTU1NDQyMjExMTEwMC8uLi4uLi0tLS0tLSwsLCwsLCwrKysrKywtKysrKywsLC0sLC0tLCwsLCwsLS0tLS0tLi4uLi0tLS0tLS0tLS0tLS0tLCsrKyoqLCwrKywtLzAzMzY3NjY4ODk5ODg4Ojs7Ozs+SlVSVFxjanJtY1dKOC4sP2ZtZWJlbGY7JDVRd3x2cV42JicpKScoKSouMzg+R1dseXV8hoyDenZoXlxbXmNoZ2dlZ21wclorJyotNTxDY1tCNzkzLCwoJSgoKSosLjU8OzU1Nzg4Nzg3NjU3NzoyKystLCsrLC0uLywqKSgmJiQiISAfHyAgHh4eHiIjIyQmJygnKCgoKS0xMTAvMDU6PkFHTlJUUFJTU1VVV1hYW1xdYV9gX19bW1lZW1ZTTkdANjc0MjEwLS0tKyssLCwsLS0uMTMzMzs+QUE/OS8kISIoKywvMTk8RUQ+MysnJiQmJiMkIyYpKSgqLi4tLCklJCUnKigoKCgoKCsyNjQ8MSonJyo1Q1pufomKi4qHg3xxamVpcXh/goJ9eHNva2VZUkxKSU9PUVVZXFxWUVdSS05UV1pVSVBYS0RFRUVERk5UXWdyeH+ChYWEg4OFhYaJiouLiYiIiYmJh4eGgX14c29rZmZlZGZmZ2dnaGlpamxucHJ1dn2Ok46LiIeHhoaGhoWEhIB/gIWFg4B/f358eXh6dXd0cnNzcnJxcXFxcXFyc3R7gYiNkZCQk5ONi4uKiIeJjZCRkJGRkY+Li4mIiIqKiouMi4mIhoIzMzMzMzMzMzEzNDQzMzMzMjI0NDQ1NTU0NDMzNDU1NTU1NTU1NTY2Nzc1NTU1NTU1NTY2NjY1NTQ0MzIyMjExMTEvLi4uLS0tLSwsLCwtLS0tLCwsLCwsKysrKysrKyssLC0tLCwtLS0tLS0tLS0tLS0tLS4uLi4tLS0tLi4tLS4uLi4tLSwrLCwsLC0tLS4xMjIyNTU5Ozo6Ozs7PDs7PDw9PT1AQ0ZPVlpcZm52bmFTRjUuLDNNcGlmY2VtXS8qRGp7dXBlQSYlJyknJikpKi80OEFacnlvc4KIf3p2bmFdW15lZmZmY2ZqbGtaLSUmLDE3SmdbTjgvLywrKygoKisrKiwuMTMyMjQ1Nzc2ODU1OTY1ODIqKSssLCsrLCwrLCspKCcnJiQgHh4eHh4eHh4gIiIjJCYnJycnJycoKCooKSwvMjg+QUtRUVJUU1JTU1NUVFJVWFpcWVteXV1kY2BaUlFRTUk4ODcyMTEvMC0tLS0tLS0vLzM0NTQ4PT4+PDYrIyMkJikvMTlNYGxwa19SQTMrKiYiIiImLTY0Njg4ODMwLSwqKysqKSkpKSYlKisnJSUnJycoMkNccH+Li4yLh4R8cGNcYGhyeYCEgn16dHBraGJiY2FgX2JfXl1bYm1oWVteXVlXUEA4T1ZlWkdGRkdMVWBpc3p/gIOEhIKDhISGiYqKi4mHh4iIiIiHg399d3JuamdmZWRmZmZnaGhpaWptb3JzdHmDkJCMiIeGh4aGhoaFhIN/f4CEhIGBgH59fHp5enZ2c3FycnJycnFwcHFxcnN1e4SJjpCPkJSRjYyMi4iHiI6Qj4+QkZCOjIqIh4mJi4yMi4qHhoOBMzMzMzMzMzMzNDQ0MzMzMzIyNDQ0NTU1NDQ0NDU2NTU1NTU1NTU2Njc3NjU1NTU1NTU2NjY2NTU0NDMyMjIxMTExLy4uLi0tLS0tLSwsLS0tLSwsLCwsLCsrKysrKysrLCwtLSwsLS0tLS0tLS0tLS0tLS0uLi4uLS0tLS4uLS0uLi4uLS0sKywsLCwtLi4vMjQ3NTg7Pj89Pj4+QEBAQUFBQkJDREZKTFNWWVpqdm5fT0Q1LywtOVp0aWVkamxaLjJZd3ZwaU8qJyknKCYpKikrLzVEYHdzam5+g3p0b3FmXlxcYGJmZmNnbWxtXC4mJisrME1nWVJROSoqKyssLC0sLC0uLS0tLy8xNDU4NzU1Njg3NUBQKyotLCwrKysqKysrLCooJyYkIh8eHh4eHh4eHh0dHh8iIiIjIyQkJSUnJygoKi85ODxGTFJTVFBUWFVUUU9RT1FTVVZXXmFiX2JmY11VVFJRTTo1Ozk0MDAuLi4uLS0vMDI1Njg0NDg5OzYwJyMjJSUrNkZbc4CEhYaDem1gVEIuJSQsOUFGR0ZFQUNCPDQ0NDIyMjEwMDAvLSonJCQkJCQmKDRIX3WEi4yMi4qDe3FhV1lganN5goKDgHx3cWpnaGRkZGFgYWZrbGxjW1dYV2BlZmFhW0xVa1xKRUZLT1hiaXN6fICChISEhYaGiImJiYmJh4eIh4aEhIF9e3dybmpmZWVkZmZmZmZmaWlqbW9yc3V8iJORi4iHhoWFhYWEg4SDgICBhYSBgYB/fnx6eXh2dnNxcnJycnJxcHBxcXJzdn2Gi4+QkJCVkI2LjIqHhoqQkI+QkZGQjoqHh4eKi4qLjImJh4aEgjIyMjIyMjMzNDQ0NjU1NDQzMzQ0NDQ0NDU1NTU1NTQ0NjY2NjY2NjY1NTY2NjY2NjY2NjY3NjY1NDQ0NDIxMTExMTAvLi4tLS0tLCwsLC0tLS0sLCsrLCwrLCwsLSwrLC0tLS0sLCssLi4tLS0tLS0tLS4uLi4tLS0tLS0uLi4uLy8uLS0sKissLC0tLzAxMjU3ODk8Pj9BQkFDRENEQ0REREVFRUdIS1FZX15cY3BrWkw/My8uLTBBaXBsZGZtc1ktR2x3dW1ZNSYoKScpKSosLTE7U3F4bGpyfHx0b21xbWBdW19hY2ZnaWpsbV8uJSosLjFQZV1XVVY6KycoKCgoKSotLi8tLCwtLjA0NDUzMTQ0MzNLeFIhLy8uLS0tLCsrKisrKignJiUiHyAgIR8fHh4dHR4eHh8fICEhIyQkIyImJiYoLDM3PUVKT1NXU1NQUk9RTlFPUFJUUlpgZWZnaGRkWk4+UU5ZQDA7PTcyMjAwMDAxMDAxNjg4NjI0NTIqJiMlJig0Sl5wgomLi4yNjo6LhHprVDEpOkVNSUE/RUZGRUE7Ojg6Ojo8PDo4NjMsJiEgIiIiJSc3TmR3iIyLi4uLhn1uY1VTWWNrdHuAhoWDgHp6eXh4d21sbm11eXVwa2xxb3NyaWtqa25vXU5UT0dDTVVaYmlyeHt+gICChYaHh4mKioiHiIaGh4eEg4J/fXl1cG5qZ2dmZmZlZ2dmZ2lqa21wcnZ2f4+RjoqIh4aGh4eGg4OFgoCAhIeDgYGAgH58enl4dnZzcXFxcXFycnFxcHBxcniAh42PkZCUko6Mi4uIiIiLkZCQkpKQjoqGiIiKi4qMjIuHhoSEg4MyMjIyMzMzMzQ0NDY1NTQ0NDQ0NDQ0NDQ1NTU1NTU0NDU1NTU2NjY2NTU2NjY2NjY2NjY2NjY2NTQzNDQzMjIyMTEwLy4uLS0tLSwsLCwtLS0tLCwrKywsKywsLC0sKywtLS0tLSwsLS4uLS0tLS0tLS0uLi4uLS0tLS0tLi4uLi8vLi4vLiwtLi4vLzExMzY4OTw+P0FCREVGR0dHR0dHSEhJSUlLSk5VXWRnZ2FkZ1tMPzIvLi0wNFRwa2lkaHJ1SjxhendwYz0lJyYnKCkqKy0wQWB4dmtseH54c21sb3ZkXVxbYWNlZmZpa2xdLyYqLC0zU2dbWVtYTjkqJyYmJykoLTAwLy4rKy0wMTIzMTE2OTlJZYCHNiYuMDAvMTEuLi0sKysoJyYlJCQlJSIhIh4fHh0eHh4eHh4gISAhISAhIyIiJyktLzc/REZJTlFMTlBSUE1KTE5RUlJTV11lZmZoZ2RaVVZLSVpONjc9OjYyMTExMTExMjc4ODY0MjMwKCUlJyxDYXiCiY6Oi4mLj5COj46NhXdPMDpCTUI+PEBMSklEPzk2Nzo7PDw5OTk4LSQgHyEkJCQqP1NpfYmOioqMjIqBdGRTS1BaZW92fISGhoWDgIB7end1cXN4enl4dHVmYWRranBxb25nX1RXZ2JmVExUXGVqc3Z6fX+AgoaHiIiJioiHh4eFhoaFhIGBfnx4dG9taWZlZWVmZWdnZmdpamxucXF0d4SSkZCMiIeGh4iHhoSEhYGAgoaIgYGAgYB+fHp6eXZ0c3FxcXFxcXFvb3BwcXJ5gImOj4+SlZKOjYuMiYiIjJGQj5GRkI2KiIiJiouLi4uKhoSDg4ODMzMzMzQ0NDQ0NDQ1NDQ1NTU1NDQ0NDU1NTU1NTU1NTU0NDQ1NjY2NjQ1NTY3NzY2NTY2NjY2NjY1NDQ0MzMyMjExMC8uLi0tLS0tLS0tLS0tLSwsLCwsLCwsLCwsLCwsLS0tLS0tLCwtLSwsLS0tLS0tLS0tLS0tLS0tLS4uLi4vLy8vMDEwLi4uMDEzNTU5Ojs/QUNEREVHSUlKSkxLS0xMTEtMTk9TWWBnbXBtZFxVSz82Mi8vLy87X3BoZWRqdGtAVXd5c2lGKCcnKSkoKSotM0Zpe3Jrbnx6cW1rZGF2a1xdXGBjZGNjaGpqXTAnKistM1hoWllZVlJKPiwmJicnJysyMy8uLiwsLS4uLzI0PkZQYXiKlHcfKzEzMjM0MzIxLy0rKCglIyIjIyMjIiAfIB8eHh0cHR0eHh8fICAhISAhIyQmKS0zOkBERUZISEdKTE5PTk5NTVBPUVVcYGZlaWpnZFtSTUpaZVhGPzw6NzMyMDExMjM2Njg3NjMzMisnJylBaYGJjpGSkZCOkJGRjIyNj5KGbEI/RkxFRE1JVFlVT01JQj09PkFBPj4/PDIoJCMlJSYnLkJYbYGNjYyLi4uJg3llTkJIUl9pcHiAhoiIhYWAfnl2dXR1cXR3d2tmY11aYF5iZmJbYVxaPUFRZF1eW19lbXJ2enp8f4KFhoeJiomIh4WFhISCgoF/f316dnNubGllZWVlZmZmZmZnaWpub3NzdHuOlJSQjIqIiImJiIeFhIWAgIKHh4KCgYF/fnx5eHl1c3JwcXFxcHBwb29wcHB1e4KJj5CPkZSRjY2MiIaHiIyRkJCRkY+LiImJiouMjIyJiIWEgoKEhjMzMzM0NDQ0NDQ1NDQ0NTU1NTQ0NDQ1NTU1NTU1NTU1NDQ0NTY2NjY0NTU2Nzc2NjU2NjY2NjY2NTQ0NDMzMjIxMS8vLi4tLS0tLS0tLS0tLS0sLCwsLCwsLCwsLCwsLC0tLS0tLSwsLS0sLC0tLS0uLi0tLS0tLS0tLS0uLi4uLi4wMzM1NDAwMDIzMzc4PD4/Q0VGRUhKTU5OTk9QUE9QUFBPUVJSVVphaG5vc3BiUkM+NzU0My8vMUNqcGZlZWx5Xk50fHZvUCsmKCoqKCgqLTJKbXlvbHKBeG5sZ2Jkb3BiYF5eYWNhYmVpaFwwJyssMDZfZVtdXVtQT0xALignJicoLjIvLSwsKissLC03Qk5ZaXiEjJaYWx4tNDU2NjMyMS8tKyopKCYjIiIiISAeHR4dHBwcHB0dHh4eHh8fICAgISMkJCYoLTI2OT5BQkRFRUlOS09QUE9QTU9TVlxsX2FvbGpjW1FMWWVfVU9JQTk4ODUyMjEyNTY3Nzk4NjYyLCg5YoKHjJCTl5eUk5WWko+Lio2SjntSPEZJSkpLTlNWWFhcYWFeVVVRT05NR0E0JiMjJSYoKC5BV22Bj5CMi4uLiIF1ZEk5PUpXYGt2fYSHiYmIhoJ9fn50amFkYV5gaF1hWVVXYWZhV1phhX9BQ1dfW2BkaW9zdnh5fH+DhYiIiomHhoSDg4SCgX9/f358eXVybWtoZWVlZWZmZWVmZ2lqbm9zc3R8kJSUkY2JiIiJiYiGhYSDgICCh4eBgYGBf358eXl3dXNycHBwcXFwcG9vcHBxdnyEi4+Pj5OUkI2Mi4mHh4mMkI+PkI+NjIiJioqLiomJiIeFhISEhYkzMzQ0NDQ0NDU1NDQ0NDQ0NTU0NDQ0NDQ1NTQ0NDQ1NTU1NTU2NjY2NjY3NzY2NjY2NjY2NzY2NDU1NDQzMzMzMTEwMC4uLS0tLSwsLS0tLC0tLS0sLCwsLCwsLCwsLCwsLC0tLi4sLCwtLCwtLS0tLi4uLi4uLS0tLS0tLi4vLy4uMDE0NTc3NjY3Nzk5PkBBQkZHS01NT09RUVNVVVRUVFRTU1NTVVZcY2lxcXFvZVtQQzw4NTQyMTA1UHFpZWZmcnVdcYB5c1kwJiYpKikpLC41UnF2bW11fnFlZ2dpaWl0aF9eXF9gYGNkZ2haMCYsLTE6ZWVeYF5bT01OUUQtKSgnJScvLyspKyoqKy84R1dibnuGioiWm5M2JC8zNDQ0NDAwLS0uLSwpJiQhIR8eHR0dHRwcHR0dHR0dHR0dHh4gICEiIiIjJSktLjE2Oj5AQkNFTVNSUU5NSUhNUVVbZWpvcGxtamBTTktgY1VQUE5JPzg3NDMzMzQ0Nzg6PDw8OTQ5Wn+Lio2QkpeWk5WampeSjIqKjJGFXj5JSUpITE1SVFpeX2JjZF1aXl1aWFRFMCUjIyUlJiYtQVNpfYyOjYyKioR8cGJFLzE+SlhlbHeBh4uNjImHhoWCgHhqYVpZXlxXV1dcXl5famVYaYOIfUxaYV5aWWZvcnN2enx/goWHiYmHhIWFg4KDgX5+fn59enh0cWtrZ2VkZWVlZGVlZ2hpbG5wc3NzgpOTk5CNi4eHh4iGhYSDgICBg4mGgYGAgIF+fHp4dnVxcXBwcG9vb29vb25vcHd9hY2PkI+Wk5CMjIuJiIiLj4+Pj5GOjIiIiYqKiomJh4eGhYSEhIaNNDQ0NDQ0NDQ1NTQ0NDQ0NDU1NTU0NDQ0NDQ0NDQ0NTU1NTU1NjY2NjY2Nzc3NzY2NjY2Njc2MzQ1NTQ0MzMzMzExMDAvLi0tLS0sLC0tLSwtLS0tLCwsLC0tLCwsLCwsLS0tLS4uLCwsLCwsLi4tLS4uLi4uLi0tLS0tLS0tLy8xMzQ0Njg7PDw8PDw7Oz1ARERISkxOT1FSU1VXWFlYWVhYWFhYWFpbYGZrcHNxb2VaUVBLQTg0MzMyMDhecWdkaG52dXiDgHhhMygqKCoqKywuPFp4c21sc352amlpaWlqcG1hXVxeY2FiZmhmWTArLjM0P2ZkXl1eWk1KUFRTQywnJiQkJiouKi0zMTdBS1docHyCi42HlJqdeB0oLzI0NDMxMC8sLS0rKyklIyEfHh4dHR0cHBwcHBwcHBwcHR4fHh8gICIhIyYoKiwsLTI3OTxAQkdNUFFJQkhLTlNZX19lamdsbmlcVFZNUmRYU09QUE1IQTgwLzEzNjY2NjY2PDg9WXqKi4uMkZGTk5GQlZWXko2IiI2QiWxGRklJTE1PUVNWWVxeX19cXFtcW1hRQiwkIiMjJCQmKTdNY3iGi4uLiYiCeW5YPSwpL0BMWWV0foSLjo2Mi4qHgoB5dnRkZWZlWlpeampnX0xITmuFiI50U1BMUVlnbnN1dXd8gIKEhoiIhoWEhYSAgYB+fHx9fXt4dHFraWVlZGRkZGRmZmZnaWxucHF0dYeVlJGOi4mHh4aGhYWEhIJ/gIKHhYGBgIB/fnp5d3RzcXFwb29vb29vb29ubnJ4gYqQkJCRlpOOjY2MiIeHi46OjY2OjIqHiImKioqJiYeFhISEhYWHjjQ0NDQ0NDQ0NTU0NDQ0NDQ0NDM0NDQ0NDQ0NTU0NDU1NTU1NTY2NjY2Njc3Nzc3Nzc3Nzc4QUM7NjY0NDQ0MzIzMTAwMC8uLi4uLCwtLS0sLS0tLS0tLS0tLS0tLCwtLS0tLi4tLS0tLS0tLS4uLi4uLi0tLS0tLS4uLi4tLS8vMTM1NTg7PUFBQkJAPT1AQ0ZIS05QUlRVWFlbW1tcXVxcWltbXFxeX2JobnN2dHFnXVRMUVVQQjUyMTEvPmVuaGZocXl+gX95aT4lJyooKSkqMEJkeW9sa3GAdWtoZ2lpZ2ZsY19dXmJiZGdmZ1YzMTExNEdmY11fX1lGRk5TVFJDKyYkIyMnNj02OT9FT1hganiBhYqNj5OWm5lVHSosLjEwLy4uLi0sKysqJyQiHx4cHBwcHBwcHBwcHBwcHBscHR4dHR4fIiIlJyorKyssLzM3OkBKS1FRTkpPTE5QU1deXl5hY2FhWlZZU1VjXlFPTk5OTEhFPjcyLisvLzAyMzQ1T3OHioyKio+RkI+AcHOAjpKMh4eKkItySEFISUpMTlFTU1NWV1lXV1xeXlxYVUUsISEgIiQlJCc0SmJ3hI2KiomGfnVpUjMoNTY+RE9eb3yCiY2OjIyKhYKAenRuZVpXVlheZGpkZWRSTFt7h4mOkI19b2ZbVmFsb253fYGEhoeHhoaFhIOBgoB/e3x7e3t5eHRva2hlZGRjY2RkZWVlZ2hsb3FydHmNlpSRj4qJiYmHhYSDhIOBf4CCiISCgoCAf3x5dnZ1c3FwcXBwb29ubm5ubG90e4SLkJGPk5aSjoyLiYiGh4yOjY2NjIuHhoiIiYqJiIiGhoaEhYaFiJA0NDQ0NDQ0NDU1NDQ0NDQ0NDQzNDQ0NDQ0NDQ0NDQ1NTU1NTU2NjY2NjY3Nzc3Nzc3Nzc3OERXTjk2NTQ0NDMyMzEwMDAwLi4uLi0sLS0tLS0tLS0tLS0tLS0uLi0tLS0tLS4uLS0tLS0tLS0uLi4uLi4tLS0tLS0uLi4uLS0vLzIzNTc5Oz9EREVGRUJBQ0VJS05RU1RWWFtdXl9gYGBgX2BgYGBgYmRna3BzdnRya2BXTUhESE1LQTQxMDFHa2tkY2hwfYWAenBWMCgqKCstMTdKaXVta2hvem9qaGhpaWVjZWhhYF9eYmRlZWZVMzExMTJQZ2FfY2BXRUZLUFFSUD8pIyMjJTFETkRDTVNaYml5f4SIiZCNkZegljsfLy4wMC8vLi8uLSsrKickIiEeHBwcHBwcHBwcHBwcHBwbHB0eHR0dHiAhIyUmJiosLC0vMzc/REVLTU5LSUpNT1FTV1peXmFgYl5ZVVNVY11RUE5OTkxIRURDPjgzMC4sKy8vRGmDhISIioyNjoh3VT1BWXiPjYaFioyMdVBESElJSUxNTk9SU1VSUlRXWVhWUlBDLiEhICIkJSQmMkVdcoKKiomGg31zZlIvJjc7P0FNYW55f4WJjYyMi4aCgXlza2NZU1FQS09WWF5fXl92iY2OkZWZnJufn5d9V1VbVFVbYGNwfoGDhIODgH9+fHt6ent8eXdzbmpnZGRkY2NkZGVlZWdpbXBzdHV+kpeUko6MiYqKioaDg4SDgX+Bg4mDgYGBgH98eXh2dHJxcXBvb29vbm5ubm5wdXyFjJGSkJSVkI6Mi4mIhoeMjYyMi4uJiIeIiImKiYiIh4aGhoaGhYiQNDQ0NDM0NTU0NDQ0NDQ0NDQ0NDQ1NTU1NDQzMzQ0NTU2NjU1NjY3NzY2Nzc3NzY2NjY2Njc6R048NTU1NDQ0MzMxLy8wMC4uLi0tLS4uLS4uLiwsLS0uLi0tLS0tLS4uLS0tLi4uLi4uLi4uLi4tLS0tLS0tLS0tLS0uLi4uLy8xNDY5Oz5CSEpNTUxJR0dKTE5QU1dZW15fYmJjZGRkZGNjZGRlZWZmam5xdXZ3cmxjWlFKQ0JCRklJRDoxMFBvZmNiZnJ+hH55a1dDNTM2OkJKWW9xamdlbnVta2lqamhlZWNtZGFgX2JkZGRlUzAsKiwyW2lkYWdoV0lLTU9PT09MOSYkJSgwQVZYS0hSWGFncnuBh4mHjJCUmp6EJSguMzIwLy8uKykqKiooJiMgHx0dHBwcHBwcHBwcHBwcGxsdHR0dHB4eISIiJCYnKi0vMjQ6QURHUFRZWVpbXV5lbXZ1c3Rwa2ZgX1pQV2ZgU1BPT01LSUZEQkJDPTo0MjErMlx+goODhYeKiYBtSyooKT1jg46HhIeMjXZQQUlKS0tLTU9PTk5OS0tQU1NPTk1LQy4hISIiJCUlKDJIXXKDiYeGg4B7b2JNLSkrLzY/TWFsdXyChYiMiomIhX95c2tmWVVRUFJdX11cYmdve42SlZugn6KlpJx/V0xOU1FKR0A7QUxWbH6Cg4F/fnp5eXp7enl2c21oZWRkZGRkZGRlZWVnam1xc3R1hpaVlJGNjIuLi4uHgoKDgoGAgYaJgoCAgoCAfXh3dXNwb3BwcHBubm5ubW5vcHV+h42RkZCVlI+OjImJhoaIjI6Ki4yLiYeHh4iIiIeGhYWGh4eFhYSKkTQ0NDQzNDU1NDQ0NDQ0NDQ0NDQ0NTU1NTQ0NDQ0NDU1NTU1NTY2Nzc2Njc3Nzc2NjY2NjY2NjU3OjM1NTQ0NDMzMTAwMDAuLi4uLS0uLi0uLi0uLi0uLy8tLS0tLS0uLi0tLS4uLi4uLi4uLi4uLS0tLS0tLS0tLS0tLi4uLi8vMzU3OjxARElNT1JSUE1KTE5RU1VYWl9hYmVlZ2ZmaGhpaWhoaWlpaW5xdHV2dXJsY1pUTUZCQD49RE1ORT8+XGxkY2Npc3+BfXlyZlxVVltgZGxybmlnZGx4b2lqaWhmYmRibWxmZWNkZmRkY1IwKSoqPGdpZGZlZ09MT01OTk1OTks4KCguNjpLXFpMUVldZG13foWIiYuOkpabm2geKC8vLi8tKykoKCkpKCckIR8eHh0cHBwcHBwcHBwcHBsbHR0dHRweHiEiIiMlJSksLzExMkZXZGxxcnZ4enZydHR2dHJ0c3N0cm1hVVhlYVRPTk5OTElGREJDQkRGSUEwL0Fvgnp7foOEhX1hNyUoKSUyV32MhoOFiolzSURJSktLS01OTk1NSUZLTE5OTk9LSUItISEiIiQlJSgzSV90goeHhIB+d25eRigrMy8qM01faXF4fIGDhoiJiIeBfXhwaWViW1VbXF5cXWFncX+Kj5SZoJuShWlTSFZhYWluXE1KSEdHREJKZnyCf3x6eXp7enl4dXJtaGRkZGRkZGRkZWVlZ2ptcXN1d42Xl5KOjIyLjIyMiIKCg4KBgIGGiIGBgYKAfHp4d3VzcG9wb29vbm1ubm1ub3B2f4iPkY+QlJORjoyJiYiHio2Ni4qKiIeIiIeIiIiHhoWGhoeHhYWFjpE0NDQ0NDQ0NDQ0NDQ0NDQ0NTU1NTU1NDQ1NDU1NDQ1NTQ1NjY2NjY3Nzc2NjY2NjY1NTY2NTU2MzQ1NTU0MzMzMzIyMjExMC4vLi0tLS4uLi4uLi4uLi4uLi4vLy4uLi4uLi4uLi4vLy8vLi4tLS0tLS0tLS4uLS0tLS0tLS0wMDM2ODs/Q0ZLTlJWWFdTT1BRVFdaW15iY2ZlaGlqa2tra2tqa2xsbW5yc3NzdXRwa2JdVE5LRENAPjw6PUNFRU9naGRkZm95fHx3eXNwcHBycm9wbmhlZmJre3BnZmZmZWNjYm12amZlYWRjZGJRLCoqLElsZ2ZoZ2ZLS09OTk9OTExLSDgyNTk5PVNaVE9TWl9pcXyEh4mLkJGVmpuZQx0qLCwqKionJyYmJiYmJSMgHx4eHhwcGxscGxwcHBwcHBsbHBwdHR4gICEiISYnKi85TmFoamppanB5eXZ1c3RzcW9vcG9ucHJydHNxbWBVUU9PTkxJR0VDQkJFSlFgYFBbe4B7fHyAhH5tOB0mKCUnL053ioaDhoiCaENESUpLS0pLTk1NTEZGSktMTEtKSUc+LiEgIiMkJCUoM0tgd4aJhYJ+e3RsXEcuJjEpKDpQW2VscXd7foOFhYWEg4B7c21pamtoYVpeY2drcHiCi4+QkIJCLjA7TV1gbnF0ZlZYY2hpbW1oXlJWZ3l7eHl4enp5eHVwa2ZkYmJkZGRkZGRlZWdrbnFzc3uSl5WQjouLjIyOj4eCg4GBgICBiIeBgoKDgX58eXZ0cnFwb29vb21sbGxtbW9zeYKKjpCPkJOSkIyLiYmIiYyOioqJiYiIh4eHiIiIh4eHh4eIhYSEhpCQNDQzMzQ0NDQ0NDQ0NTU0NDU1NTU0NDQ0NTQ1NTQ0NTU0NTY2NjY2Nzc3NjY2NjY2NTU2NjU1NTU1MzU1NDMzMzMzMjIxMTExMC8uLi0uLi8wMC8vLy8vLy4uLy8uLi4uLi4uLi4uLy8vLy4uLS0tLS0tLS0uLi4uLS0tLS0tLzAvMjg7QERITFFWWVtbWlVTVFVaXF5iZWdqamxtbW5ubm5ubW5wcHJzdXZ2dnRzb2liXVVQTUhFQkA9OTg1NjtDUmZlY2Vpc3l1eHZ0dHV4dnNvbGZiYmViaX1waWpoamhpaWpve25paGNjZWJeTiwqKy9YbGhmam5hRUxQUE9QTkxLSUdGQj88PTs9RTk8S1ZeZm5yfISIio6Pk5abnoksISYoJycmJiYlJSQkIyIhIB8eHh4eHB0dHBscHBwcHBwbGxwcHR0dHiAgISMiJz9aZmdkY2RlZ3J4eHV0dnRzcm9ta2tsbG5wcHJ2e310XFBMTk5MSEZFQ0JDREhTYW1yeoJ+e319fX55XSwkJSYkJC9OdIqGg4SHgFo5REhMTU1MTU5NTEtGSEtMTU1LSklHPi4jHyEiIiIlKDhQZnqHh4J+fnt0aVg+KywwLC5FUVpeZ2txdXp8fX6CgYB/fHl1dHNwbmdlZmhrcXiDioyNi41cHzJETFxiYV1uc22Gn6Oppp2TiICCgW9nbXZ3eHp5d3hzb2plZGJiZGRkZGRlZmdpbW9vcnV+l5mTj42Mi4qMjo+Hg4GAgYGBgYiHgYKCgoB9e3l2dHJxcG9vb29sbGxsbW1vc3qDjZGRj5CRkIyMi4mJh4iMjoqKiYmIiIeJh4eIh4aGh4eIhoOCg4mQkDU1NDQ0NDMzMzM0NDQ0NDQ0NDQ1NTU0NDQ0NDQ0NDU1NTU3NzU1NTY2NjY2NjY2NjY2NjY2NjU1NTU1NDIyNDQzMzIxMTEwMDAvLy4uLy4uLi4vLy8vLy8vLy8vLy8vLy4uLi4uLi8vLy8uLi4uLy0tLS4uLS0uLi0tLS0tLS8wMTQ2OkBESExRWFxeYWBaWFlaXGBgZGhpamxtbm9vb29vb3FxcnJzdHd3dnV0cW1mYVxXUU1KSERBPzs5NjIxMzxXamNmZW9yZ2hnZmpramlmZ2lmZmVkYGZ4c29taWlmZWdoaH1yaGZkYWdhXE4sKik8Z2toaWxtU0JLT1BRUU9OTElHQ0JAQj4/OTs1NEJRWmJnbHWAg4eJjZGVl5iacx4gJCcmJyUlJCQiIiEhHx8fHx4eHh4eHRwcHBwbGxsbHBwdHRweHB0fICAiN1tsaWNhYGFjaXJ6d3V1d3Z0c3Jwbm5sbGxra2xvcHR6gHdaTE9OTEtHRUNDQ0NKVGBrdICEfXl7e3h1b0opJiYlJiYuTnSIg4GFhXpPN0JGSkxMTUxMTEtIRUlLS01LSkhGRD4uIyAgISEhJSw8VGt+iYeBf315cmdTOCInMTg9TFFaXGBma25xcnd5fH5/fn58d3h3dXFxcW9qbnN6gYeMi4mIQSc3RVFbXVFVYn2as7y7urmxoo5+cI2ZjXd0fHp6enl2c25rZ2NiYmRkZGNjZGVnaWxucXNzhJmXko+Ni4qLjpKPhIGBgoF/gYGIhYGDgYB/fXp4dnRycG9vb25tbGxsbG5sb3R8hoyRkI+RkI+NjIuJiYmKjo6Li4mIh4eIh4eHh4aGhomIiISAgoaNkZA1NTQ0NDQzMzMzNDQ0NDQ0NDQ0NTU1NDQ0NDQ0NDQ1NTU1NjY1NTU2NjY2NjY2NjY2NjY2NjY1NTU1NDU0NDQ0MzMyMTExMDAwLy8uLi8vLy4uLy8vLzAvLy8vLy8vLy8uLi4uLi4vLy8vLy4uLi4uLS0uLi0tLi4tLS0tLi4wMDE0Njo+QUhMUFZcYGNkYV5cXV9hYmZoaWxucHBxb29vb29xcXJzdXd4eHZ0c29rZmFcVlNQTUpGREA9Ojc0MTExR2plYWNpbFhLUlVUVE5KS1doZmFfXFpkeHBqaWRnampnZGV4eGtoZmNoZ1tKLCcuUG5paGxvakVFTFBTVFJRT01JRUM+PEBFPjs5PTk/VFZbYGdtdn6EiIqNkJKVl5hYGiYmJCQkJCUlIiIhISAgHx8eHh4eHh0cHBwcHBwcHBwcHR0cHhsaIB00WmtqZWBgYmNjbHZ5dXZ1eHh4eHVzcXBubmxsampqa2xuc3qCeVxPTkxLR0VDQkJFSlJhbnR/gH15d3dzcGA5LCwoJicoL09zh4KAhIR2STdCRkpMTE1MSkpJQ0VJSklJSUhJR0U/LSQjIyEiIyUsQFhtgIiHgoB/enJkUDUiIiYyQk1QVllcYWVpa21xdHh6fHx8e3t8e3d0dHRycHR4foGIjIuIgjcxPEVTX1ZRTW6gtr66trejq7SZjpOanZaNgGZYcHt5dnJtZ2NjYmNjY2NjY2RlaGptb3FzdYqbmJOOjIyLi4+QjoOCgoKBgYKDioWBgoKAf316d3V0cnBvb29ubWxsbGxtbXB1fYeOkY+OkZCOjYyLiYmJio+OioqJiIeGiYeHh4aFhoiJh4WBgoaKj5GQNTU0NDQ0NDQ0NDMzMzM0NDQ0NTU0NDQ0NDQ0NDQ0NDQ2NjY2NTU1Njc3NjY2NjY2NjY2NjY2NTU1MzQ0NDQ0NDQ0MzIxMTAwMDAwLy8vLy4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLi8vLy8uLy8uLy8uLi4uLi0tLS0tLS0tLS8xMzU4O0BFSk9UW2FlamllYV1fYmRmamxqbW5ucG5ubm5ucXJ0d3l6eHd2dHJuaWRgXFdUUk9MSEZCQDw5NzMxMjpeaWFgYmtYMDQ7OjYyLzdOaGRcWldTXXhyaWdiZGhqaGlscn1tZmNiam9cRycoQGhraWpwcF0/SE5TVFVTUVBOSUVBPz08PkVCPThAQVJkUVlhZmt1fYKGiYuOkpaXkT0cJigoJSYlJCMjIiIhISAgHx8eHh0dHR0dHR0dHR0dHR0dHh4fHyJFbG9lXlxgZGRmanh6d3Z3eHl7enl4dnVycXBxbWtra2lpamxye4R6W1BMSkZFQ0RDRElUYW50fnp2c3N0cXJaNy8wLCgnJzJRdYSAfoKDcD0zQUhLSkxNTEpJQUJHSUlJSklISUhGPiwiIyUjJCUnL0NbcYOJhYOAfXlwYU0yICElOUtQVFZVWFxeY2Vna2xzdnh5e3t7fX56enh4dXZ5fH+Dh4mFhH8zMzxEVFtMRViUtL29q5aopKy5spGGj56VjYV3X254d3Zva2dlY2JiYmNjY2NjZWdqbW9xc3eOmZiSjY6MiouPj4qEgoODgoKChYmDgYKDgH97eHd1c3Jwb29vb21ra2xsbG5xdn+Jj5KOj5GQjo2Mi4eHioyQjIuMi4eJiYmIhoWFhYiJiYaDgoWJjpGRjzU1NDQ0NDQ0NDQzMzMzNDQ0NDU1NDQ0NDQ0NDQ0NDQ0NjY2NjU1NTY3NzY2NjY2NjY2NjY2NjU1NTM0NDQ0NDQ0NDMyMjIxMDAwMC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy4vLy8vLi8vLy8vLi4uLi4tLS0tLS0tLS8wMTM1Nzo9QkZNU1thZWptamZjYmRlaGtram1ubnBubm5vcHFzdnh7e3h3dHNxbWdkYFxYVlNQTUpHREI+Ojc0MjEzTmpgXWBnZzUnKisrLC45UmVfV1ZQTVZ4c2hnZ2Nla2Vqa26CdGlmZm12YEMmQmRqaGlscHFOQktQVVZWVFJPTEdFQz89OTpASko/OT5FW1hQWGBianV7gYSJio6SkpWGLSAoKScnJyUlJSIiISEgIB8fHh4dHR0dHR0dHR0dHR0dHyAfHS9dbmtfXmBjZWdqcXp3dXZ3eHl7fX19fXl3dnRycW9ubWtqZmhna3N5gXFVTEpGRUNDQ0RKVGJscnx6cnBwcW5ubWFFMS8vKys1VXeFfn6BgGkyIzVFSktOTUxHPz1DSUtKSkpJSElIRjwqIiMjIiUlJjBHX3eIiYWDgH13b2BILSMlLEJQVFdXV1laWl1cYGRma3F0dnh5eXt9fX19fHh6fX6Ag4WFgYJ5Nzc7QU1SSkRvpre+toh8oLS6uLaRfoqXlpKYkIJ1dnV0b2tnZWNiYWFiYmJiY2Vnam1vc3R8k5mXkI2MjIuMj4+Jg4KDg4KAgIWJhYKCgoGAfXp2dHJycXBubmtra2tsbGxucHeBio+QjY6Oj46NjIuGhoqPkIyLjIuJiomHhoaFhYWIh4eDgYKJjZCSkI80NDU1NDM1NTU1NDQ0NDQ0NDQzMzMzNTM0NDQ0NTU1NTY2NTU1NTU2NTY2NjU1NjY2Njc3Nzc2NjQ0NDQ0NDMzNDQzNDMzMTExMTExMDAvLy8vLy8vLzAwMDAvLy4vMDAvLy8vMDAuLy8vMDAwMC8uLi0uLi4uLS0tLS4uLi4vMTM0Njc5PEFFTFJaYGZrbm5qZ2ZnaWlpamlrbG5wb29vcnN3eHt8eXh4d3ZzbmlnZV9cWlhTUU9LSUZCPzo4NjIyLz9jY15hZmpHJigqKSsvO1RlW1dSTU5UdHdmZ2hpaWlmaGxwgX5ta2podXpwZ2loaGxwbnBoQ0dNUVVXVVJSTklGRUE+PTs4NTlGST86OUJJUFBWXmZtdX6BhIeKjI+Sk3clIigoKCYlJSQhICEfHx8eHh4eHR0eHRwdHR0cHh0dHR8iIkJqbmJeYGNlZmpwd3t3dHZ4d3t8fn1+fn16eHV2d3RycW9qZ2ZlZmZtc3p8aVBKR0ZDRUNHTFVicnh5dXBtbnBvb3BvbWFHMi0sN1Z5gn9+gH5kMCMkKjtGSEpIPzUzPENJS0xLS0pISEU4JSIiIiIkJCYzTWR7iYqFhIJ9dm1dQykiKjpMVVdaXVxcW1pZVFVaZGhscXR0dXd4foGAf359fX6AgoKCfn6Cckc5QENLSUNNiam2vbZ7WYORqbKqjY6Di5aToaOciHVxcm9rZmJiYWFhYmJjY2RmaGtvcXFyfpaZlI+NiYqLjZKQiYOBgYKAgYKDiYOBgoKAfnp3dHNxb29vb25tbGtrbGxqbXB4g4uPjo6OjYyMjIyKh4aJj4+OjY2KiYiIh4eGhoaGh4WDgIOGjZGTkpGPNTU1NTQzNDU1NTQ0NDQ0NDQ0MzMzMzQ0NDQ0NDU1NDQ0NDU1NTU1NjY1NTU1NTY2NjY3Nzc3NjY0NDQ0NDQ0NDQ0MjIyMjExMTExMTAwLy8vLy8vLy8wMDAwLy8uLzAwLy8vLzAwLi8vLzAwMDAvLi4tLi4uLi0tLS0uLi8vMDEzNTc4OTxBRUtRWF5kanBwbWpnZmhoaWpsa25vcXBxc3d5fH1/fnt5enl3cm1qZmNfXFtYVFJQTUlGQj87OTYyMzA0W2dgX2JoVyglKSksMDxWZlpVUU9QVXJ4aGVlZWJla2hpbXqDc2tqaW98gXp4b2xvcHBxXEFITlBTVVRST0xHQ0A+PDo5NTMyOENHPjE1PUNGUVteZW51e3+ChoiKjJGUaxwlJiYiIiMiIB8fHh8fHh4eHh0dHR0dHx8eHyEeIB8dI05ubGBfZWRkaXJ3enx3dHN1eHp7e3x9fXx8eHR1eHZ0dHRycGtpZ2VmaG1zenhgS0hEQ0RESE1YZnJ4d3Jxbm1vbm5xcm9ta2BUQj9ceoF8foB5WygiIiMhKjhBQTcvOUBCRkdJS0xKSUhENiUiIiIiJCQoOlFpe4iKhYSCf3htWj8mJTFEUlZZW15fX1pZV1RTWV1la21vb21wc3h8fX9/fX+BgYKCgXyCg21WQ0ZFSUVAYZOosre4qo58hpaVm5WalJKSjZObppWDcm9uaGZkYmJiYmFhY2RkZmdsbnFyc4SZmZSQjImKioyRjomDgoKBf3+AhIeCgoKCgH56d3VzcW9vb25tbGtra2xta25yeYSMkI+NjoyMjIuMiYeHipCOjo2MiomIiIaGhoaGhoSDgYGFi5CWlZKPjjY1NTU0MzQ1NTU1NTU1NDQ0NDMzNDQzMzMzNDQ1NTQ0NTU1NTY2NjY2NjU1NDQ1NTY2NzU2NjY2NTQ1NTQ0NDQzMzMzMjExMTExMTEwMDAwLy8vLy8vMDAwMC8vMDAwMC4uLy8wMC8vLy8vLzAwLy4uLS4uLi4tLS0tLi4wMDAxMzU2ODk8QUVJUVVbYmlwdHJuamdnZmhpa2xvcXZ5eXx9f4GCgYF/fnt6d3FtamZiX1xbWFVST0xKR0M/PDk3MzIxM0xpXl1hY2EwJCgpKzA+WGRXU1FSVFhpcmZhYmNhYWlscnBxgHVqZmZocXt6eXVvbnBybk5ESk5PUlJST0tKRUE+PDo3NTMzMS8yQEM6Mzc8P0RUXGFjbnV8f4SFiIaLk5JYGx8iJCEfISAgHx8eHx8eHh4dHR0dHR8iIyQmIyAeLVlva2VkaGhpbnJ1c3Z3dXN0dXZ5enl6e3lyamlpaHF1cXBydndyb2xoZmlscHN3clNJRkZCRUlQXWtyd3Zvbm1ucG1wcnFvamVpb29rb3+AfH59d1MkISMkIyIlIysqKC86P0VHSUlKRUZGPzElIyQiIiQlLT9WbYCKiYSDgH95bFg6Jio7SlVbWlpdX19dWldVU1ZbYGVpa2xqa293enx8fH2AgYKCgn9+g4JtVk9MR0lCQWyapaurqJqQmp2hoKGYkJOZmpiOkJiYiH9za2lkYmJiYWJiYmNjZWdnam5xc3OKnJmWkI2KioqNkY2Ig4SDgX9/f4KFgYKBgYB9endzcW9ubm1sbGtrampqa2tuc3uGjI+Njo6Mi4qKi4eHhoqPjo6NjIuJiIeGhYWFhYWDgoGFio+VlZSRj402NTU1NTU2NjU1NTU1NTQ0NDQ1NTQ0MzMzMzQ0NTU1NDU1NTU2NjY2NjY1NTU1NTU2NjY3NjY2NjY1NTU0NDQ0MzMzMzMzMTExMTExMDAwMDAvLy8vLzAwMDAvLzAwMDAvLy8vMDAvLy8vLy8wMC8uLi0uLi4uLS0tLS4uMDAwMTM1Njg6PT9DSE5UWmBnbnJ1c25qaWdoaGlucXZ8gYODhYWHh4eDgX57endxbmtmYl9cW1hVUk9MSkdDPzw5NzMyMDBAY2BYXWJlQCUoKCovQVtiVlJRVFZWZHNnYGNjY2htbW9rZ3FzaF5fY2ltcnh7eHR0bV1HSUtNTk9PT0tLSkVBPjs5NjUzMzIxLzI8PTQzN0FHUllZYWVtdXl/goaFiI2RkE0YHh8fHx8gHx4eHh8fIB8fHh0eHB4iJSgrLSUgN2FtaGRnaW1tcnh1bnBycnFwb3N2dnd5enBoY2VobW5vcG5ta2tyeHdvaWhqbG1ydHNkTUhEQ0dLVWNvdHZ0bm1tb25rbnRycGxqaGltcnuDgHt+fHNLJCEkJCIkJCQnKispLjpBRUhJS01MRTwwJiQkIyMmJzBEWXGFi4iEgoF/d2hUNCUwQkxSWVpbXmBgX1xXVVNUWV5hZmhpa25wdXF1enx9gIGCgoJ/gISAbltaWlRRSERxnKalo56Vl5iKi5mXlpOWmp2YlZqck5CJgmplZGFiYmFiYmJjY2VnaGtwcHN2i5qYlZCNioqKjZCMhoSDg4B/f36Ag4GCgYF/fXp2c3Fubm1sbGxra2pqa2psbnR+iIyOjo2NioqJi4uIhoeMkY2NjYyKiIeGhoWEhIWFgoKCiI+TlZSUkY+NNTU2NjU1NjY2NDU1NTU0NDQ0NTU0NDMzMzMzNDU1NDQ1NTU1NTU1NTY2NjY2NjY2NjY2NjY2NjY2NjU1NTQ0NDMzMzMzMzIyMTEwMDExMTEvLy8vLzAvLzAwLy8wMDAwLy8vLy8vLy8vLy8vLy8vLi4tLi4uLi0tLS0uLi8vMTIzNTc5Oj0/Q0dMU1hfZmxxd3Vyb2tpZ2hpb3R7gYaHh4eIiYiHhYF9endyb2xoZGJeW1tZVVNPTEpHQz87ODYyMS4vNFNkWldbY1MmJSgrMkNdYVhSUVZZWGByaWNqam5sa21rbGxjZ2llYF1jaW5xdXp6bl5PTU5NTU5OTUxLSklFQj89OTY1MjIvLi4uLzZBPzc+R05XYVVdZGx0e3+CgoaLkZWPQRkbHh4fHh4dHiAgISEhISAgHx4fISUoLzQtQWVtaGVoamtudndwaWtucnBvbm9xdHR1dmtjYWFhZ2ptbnFubGlmanV7c2xsampsbnBxbVdGQ0NITlhlcHR4cW5vcHFuam1ycm9sampoa3R9gn98fX1yQyMkJCIjIyIlJScsLioqND1CR0hHSEU8LyUkJCQkJikyR151houJhYGBgHRnUzEmNkRLT1ZbXF9eXV9cWVZUVFhcYGNhY2Vpa3BwbXV3fICBgYKCgoODf3BkZ2NaVlFPdZ2mpaOdmZaTjo+NjpKUmZWUm52hoJGRjpB8ZmJjYWBhYmFhY2NlZ2lscXF1eY+ZlpKNjYqJio2QioaFg4F+f39/gYN/goOCf3t4dXFubW1sbGtqa2tqaGtrbW93gImNjYqNi4mIiYuIhYWHjpKMjI2LiYiGhYWFhISFg4KDh42UlpWUk5CQjTk5OTk4ODY2NzY1NTU1MzM0NDU1NDQzMzMzMzM0NDQ0NTU1NTU1NTU2NjY2NjY2NjY2NjY2Njc2NjY2NjQ0NDQzMzMzMzMyMjExMjIxMTExMDAvLy8wLy8vLy8vMDAwMDAwLy8vLy8vLy8vLy8vLy4uLS4uLi4tLS0tLi4vLzAxMzU3OTo9P0NHTFBXXGNpb3J1dHBtaWZobHR4fIGEhYWFhoiGhIF/e3ZzcG5saGRiXltaV1RRTktJSEM/Ozg2MjIwLzFDYltYWmBdMiUrLjBAWl1WU1VXWFlgc21kaHBxcW5ucW1ua19dYmlkZmdrbG5nYVVRU1NUUVFPT01LSUhHRUI/Pjs3NjIxMDAvLywtN0ZFP0NITmlkVV9nbHF4fX6DhouRlYk4GBwdHiAgHyAiIiIiIiIiIh8gISMiJy84SFpoaGhrbW1xd3ZsaWdpbGxtbW9wcXF0cl1bW1tfYGVrb3Bub3FtamRpdHdxb2trbWxubnJlSURCSVFbaHF3dW5ucHBwbWZpcnJwbmtsamlxe4SAenx7azskJiUkJSUlIyUnLDEyKyQoNkFER0ZCNysjJCUkJCYqNk1jeomHhIOBgXxyZUwuJjdFS09TWVlcXl1dW1dVVVVYXF5hYmRkY2Npa2pvcnh8gIGBgYGCg3xybmtnZWBcXHyepKKcmZOPiYqHen+Sk5eYlZWZnaKfnpOGfWtjYmJiYWJhYWNjZWdpbHFydHuSmpaSjY2KiYqNkYuFhIKBf35/goiGgICCgX97eHVwbm1sbGxqamtramtqam1xeIKLj4yLjIuJh4iHh4WGhpCSjYuKi4mIhoWEhIWFg4KBhYuRlpWUlJKQj4w5ODk5OTk4Nzc3NjY1NTU0NDQ0NDQ0MzMzMzMzNDQ0NDQ0NDQ2NjY2NTU2NjY2NjY2NjY2NjY2NjY1NjY0NDQ0NDMzMzIyMjIxMTExMTExMTExLy8vLy8vLS0vLzAwMDAxMTAwMDAvLzAwLy8vLy8uLi0uLi4uLS0tLS4uLi8wMTM1Nzk7PkBCRkpPVFlfZWlwdHdzcGxnZ213en2Ag4ODg4WEgoJ+enZ1c3BsaWZjYV5bWVZST01KSEZDPjo4NjMzMC8vNVlgV1hcYUMmKSwwQVxdV1ZWWVlZX3NxaWprbXFsampsbmpqZFhZWVI9Oj5CRlJTV1lZWVZTT09LSkdGREJAPzw7OTc0MC8uLS0tLS84RktGRkNTcmNZYGlpc3p9f4OHjJCUizIYHCEgISEiIyMjIyIkJCUkJCIiKCU1SE1SWmRqb290eHdpY2VkZGdnZ2tucG5valJRWFdbXF9jZmhscHN1dG5qZGt5eXNwbGxtbG9ycFVEQ0pRXW11eHJub3BwbmliaHFzcG1tbW1sdX2EgHx7eWg3JScnJSUnKCYnKi4vNDEqJCUtOkRDQDMqJCQkJCcnLDlQZ3yHhoSDgX95bl9BKSg8RUpOUlZZW11dXFxbW1paW11fYGFgYF9iZWVkaGxweHt9f3+AgIF8d3NzcGtnZmV/mZ6dlo6IhYV+c1Zvi42VmJmUlJednZqYiXl5ZGFjY2FiYWFiY2Vnam1wcnV9lJmWk42KiYqKjpOKhIOCgX9+gIKIhYKCgYB/e3d0cG5ta2tra2pra2hpamttc3qEjZCMjIuJh4aGhYSChYmQkIyMioqJiIaFhYaFhYSEhYqQlJWUk5KSkI6MOzo6Ojo6Ojg3NzY2NTU1NDQ0NDQ0NDMzMzMzMzQ0NDQ0NDQ0NTU1NTU1NjY2NjY2NjY2NjY2NjY2NTU1NDQ0NDQ0MzMyMTIyMTExMTExMDAxMS8vLy8vLy0tLy8wMDAwLi4vLy8vLy8wMC8vLy8vLi4tLi4uLi0tLS0uLi4vMDEzNTc5Oz5AQkRITFJWXGFnbXJ2dnNwbGpudXl7foCAgH+Af398enl1cm9samdlYmBeW1pXUk9NSkhGQz46ODYzMzAuLjFJYlxZW2BUKCgrMEJbXVdVVVdXWFxvdmxucXV5cW9xcmtpa2VdXFpMPT1ASE5UWFlbW1lWU1FPTUlEQ0JBPj49PDo4NTIwLi4uLy8xNTlDTElCMkZeZ11eZGpzeX+ChIaMkJWKMhchICIkIyQkJCQkJCQlJSUkJTVTbGJOSldibHF4e29iYWFjYWFjY2Jna2xuYUFFTFJYWV1iY2RnbXF1dXdzbWlpdH55cW5rbW1tcHJjSEVKVWFydnhyb3BwcG5iX2dxdXBta2pobHJ8g359fXplMSYmJyUlJigoKSkmJSkyNCwmJSUuOz4xJiQlJSgnKC0/Vm+BiIaEg4CAeW5aOCgwP0dKTlFUWVxdW11dW1tbW11eXl9gX15dXmJjYmNnam92eX19fYCAe3V0dHJzcW9whJSalpCSmpqUf3Z7g4mLj5aZm5qYlpaXmJWDfG9gYWJhYmFhYmNlZ2ptcXN0gZiZlZKNioqLjZGTioSDgoGAf3+DiIWBgYGAfXp1c3BtbWtra2tqa2tpamlsbnN8h42Ni4yKiIaFhYWEhIeLkZCMjImJiIeHhYaGhYWEhIiPlJWUlJSTk5COjDw7Ojo6Ojo6OTg4ODc3NjY0NDQ0NDQzMzM0NDQzMzMzNDQ1NTY2NTU1NTU1NTU2NjY2NTU2NjY2NTU0NDQ0NDQzMzMzMjIyMjExMTEwMDAwMDAvLy8vLi4uLi8vLy8vLzAwLy8wLy8vLy8vLi4uLi4tLS4uLi4tLS0tLS0tLjAxMjQ3OTo9P0FFR0tOUlddYmpwdXd2dG1sb3Z4e3t+fnx6fHt7enh2cW9sa2llY2JfXFlXVFJPTUpFRUE9OTc3MzIxLS4vOV1hWVlfYTYmKzBDW15ZWVlaW1tfa3dxbm1weXt4dHdvaGVmXldURzw+QkhNUlZaXFtaV1VTUExIREFAPjw8Ozo4NzY0MzExLzAxNTs/OztKTUZBQl1nX2Bka3J5f4CDhoyRl4gvHSImIyQkJSYjIyEkJCUjKkZodXFkTEFKYHR8eWdfYl5fYWNjY2FhZWlrVD9DSkhPVFdaYWFgZGludHl6d3RxbG95e3JtbW1ta21taVBJTFdmdnh1cXFycXBtXF5mcHRxbWtraWtzfYN/e314YSwnKCcoKCcoKiknJicoLTAwJygoKSovLyopJyYoJSYwRlxzg4iIg4GAgHlqVTEnNUVLSkxQUlRYWlxcXFxbXF1dXF1gYF9gXV5eW1lcYGVsb3R3eXp9fnhyc3R1d3V0doWMkZOgrKyilYF6e4OHjI+SlZqeoZ2VlJiZkoJ4ZGJgYGFhYmFjZWhrbnJ0dIWXl5OQjIyKjI6RkomDg4OCgICBhIiFgICAf3t3dnVxbm1sa2pqamtra2tqa293f4iNjYuLioiFhIODg4WIjI+OjIyKiomIhoWGhoWFg4WNkpWVlJSUkpKSjow9PDs7Ozs6Ojk4ODg3NzY2NTQ0NDQ0MzMzNDQ0MzMzMzQ0NTU2NjU1NTU1NTU1NjY2NjU1NjY2NjU1NDQ0NDMzMzMzMzIyMjIxMTExMDAwMDAwLy8vLy4uLi4vLy8vLy8wMC8vLy8vLy8vLy4uLi4uLS0uLi4uLS0tLS0tLS4wMTI0Nzk6PT9BREVJTE9TWV5ka3J2d3dycHJzdnd6e3p7e3p6enl3dXJvbGpoZWJhXltZVVJPTUtIRUI/Ozk3NjQxMS4uLzJNYVtZW2JPJysvPVhgXFxcXl5gYWd3dW9xd4KCd3Z4cmtoZVVKT0E6PUBDS1FVWFlZWVdWUlBNSkVDQD49Ozo6Ojo4NjUzMjMzNDw9Ozs9PD5TXVpjaWpjZGRtc3l+gIOIj5eXgyscKCcmJSYmJCMlJCEoT254aWBjXks8QVRudGRZW11eYmJiZmVfYGhkTz0/SUNHSE5VVlVXWmBob3R5fHt4dXFsdHx0bGxsa2poaGhYS1JbbXd2cXBxcnFwZVdbZm9zcGxra2ptdH2Df3x8d1kpJygoKSkqKSkoJycnKCotNC4oKCkqKioqKSkqKSkpM0thdIWIhoGBgoF4ZkwtLDxHSktMTlFSVlhZWlpcXFxcXl5cWl5dWl1fX1xZWlxeYmlvc3R3eXdxbnB1dXV1dneCho2gs7auo42Ae4SMi4uLlJqZmp6gnZaUmpOHfHJhYmFhYGBgYmZoa25ydHaImZWRjoyMioyOkZCHgoKCgoB+gYSIhYCAgH97d3RxcG1tbGtqampra2tra21yd4CJjY2Li4iHhYSDg4OGiIyPjoyMioqJiIaFhoaFhYWKkJSVlZSUlJKSko6MPT0+PTw8PDs7Ozk5ODg3NzY1NDQ0NDQ0MzM0NDMzNDQ1NTU1NjY1NTU1NjY2NjY2NjY1NTY2NjY1NTQ0MzMzMzMzMzIxMTExMTExMTExLy8vLy4uLi4tLS0uLy8wMC8vMDAvLy8vLy4uLi4uLi4uLi4uLy8uLi8vLi0uLi4uMDEyNDY4Oj0/QUNFR0pOUFZbX2ZqbnR3dXJxcnR2eHl4eHl5eHh3dXRvbmxpaGZiX11aV1NQTkxJRkM/Pjo5NzQyMi8uLS0uPV5eWVlgYTsoLT1YZWBfXl9jaWlnc311dHyKhXl3d3Vual9RSlBFOj1AQ0dOUVZWV1ZVVVJQTUlGREFAPjw6Ojo6Ojc1NDQ1Nzk9PDw7PTYsM0xeZmdpbm5kYmpxd3uAhIaNlJeFJiEpJyknJiUkIyI1cXlya2VfXVhOPz5RUlZZWVlcXmJiZWVlZWZXRD08QkhFSEZNUU9RVF9ob3NzdHZ5eXd1cHN9eG9sa2tqaGlmW1JUYXB2dHByc3NybV5WWWJucm5qamppbXR+gX99fnVUJygpKCgpKikoKCcoKScpLDIxKScoKisqKywsMC0tLztTaXyIh4SCgYN9c2NDKy8+SUtLTVBQUVJVV1hZWlpcXV9eXV1dXVxcXV5aV1hZW1tgaXBwcXVxZ2htb3N2eHd6gYudrrOrno6FhIJ/goOCgoqXnJybn6GclpKYjYJ+ZmBfYGBhYGFkaG1wcnR3ipiVko+MjIyNjZKOg4CBgoKBgIGEiIV/f4B9e3dzcW5tbGtra2tra2tsbGttcXiCiY2Li4uHhYWFg4ODh4uNjo+Mi4mIiIeGhoaFhYSHkJSWlZSUlJORkZGOi0BAPz09PTw8Ozs5OTg4Nzc3NzU1NTU0NDMzNDQzMzQ0NTU1NTY2NTU1NTY2NjY2NjY2NTU2NjY2NTU0NDMzMzMzMzMyMTExMTExMTEwMC8vLy8uLi4uLS0tLi8vLy8tLTAwLy8vLy8uLi4uLi4uLi4uLi8vLi4vLy4tLi4uLi4wMjQ2ODo9P0FDRUlMTU5SVltgZ2xwdnh4dHJ0dnZ2d3d1dXZ2dXRzbm1rZ2ZlYF9dWFVRTkxKR0RCPz07Ojg2NDEvLi0tLTJRYFtaXmJSKiw5VWRjZGRlbHBwaXJ+en2HkIp8dnx1bmZgVUs9Ojk8P0FGSE1SU1RTVFNSUE1KR0VCQD49Ozo7Ojc1NDQ0NTY7Pj08OzszLysqPFlmZ2pydGhjZGt0en6Cio+UmIcsIikpJycnIx9AcnZuampraWpmWkE4SU1FT1VWWVxhY2RlZ15DNEU/QVFLRUhISUxOU11mbHJ0dHN0dXh5eHZ4fX11bWpsaGZmY2FXWml1d3NwcnN0cGhWVFhhbHJuamtpam51fn98f31ySyQnKSkpKCkoKCoqKikqJykwMy0nJygqKioqLTAzMzlHXHOFh4WCgoF/fHJgQSszQkpLS01QUFBQUlRWWVlZWlxfX19dXFxbWV9eW1RVWV9gWmJqam1vZFpgZ25zd3l8gIWRoKipnZWOh4eHhIGBgYKHjZWcm5men52Vl5GKfm9fYF9fYF9jZmttcHB1douYlZKPjIyLi46TjYWCgYKCgYCBhIiFf3+Bfnl1cnBsbGxra2tra2trbGxsb3J5gomNi4uLh4WFhYSEhoqPj4+NjIqJiIiHhoaGhYSIjpOWlpWUk5OSkJCPjotBQEFDQkA/Pjw8Ozo6Ojg4Nzc2NjY2NTU0NDU1NDQ0NDQ0NDQ1NTY2NjY1NTY2NTU1NTY2NjY1NTU0NDQzMzMzMjIyMjIyMDExMTEwLy8vLy8vLi4uLi0tLS4tLS4uLi4uLi4uLi4uLS0tLi4uLi4uLi4uLi4uLy8uLi4uLi4uMDI0NTg6Oz5AQkRGSUxNUVVYXWRobHF1eHRydHR1dXVzc3NydHJyb2xqaGZkYl9bWVZTUExKSEZDQj8+Ojg3NjQxLy0sLCwtQV9dWVpeYj0pN1FmZmlrbnF1dHB0fH+Ciop/cG11c2xqX1hINzg5Ojw9QUVLUFFQUFFQT05PS0ZCQD8+PTs7OTg4NTQzMjM3PT4+PDw4MS4uLiswSmNoaHFxb2dmbXN4fYOKjZOWgSghJysoJyIzc3Vva2ttbWxvb1tDODxPREpVWFpbXF5eW0w5NDU4NkVNSUJJSkpMVFxjZ2ltcHJxcHB1eHp6en19dW5oamdjYWFiXGBwenhxcXFyc2xiUFBXYGpwa2psampxeYF/fH6AcUMmJycoJycoKSopKSoqKSgqLTE1MCcoKCkpKiwyMzQ+UmZ6h4mFgYGCfXlvXTorOUVJTU9PT1BPT1BSUlZXWVpbXl5fYF1ZWFhXXVtUU1VZZWRfZGVoa11WXmZtdHp7f4eMlJ2hoJ6Xk4uLi4aGioqKh4eJkJuamJ2emJaSjYN5ZGFgYWFhZGdpbG9zd3qSmJKRjoyLiYmMkouEg4KBgYCAgYSKhX9/fHl3dHFwb21ramtrampqampqa25zfYWLjYqLioeFhISFg4aLj46OjIqJioqHhoaGhYOFi5KUlZWVlJKRkJCSkY+MQkFBQD9APz4+Ozs6Ojo4ODc3NjY2NjU1NDQ1NTQ0NDQ0NDQ0NTU2NjY2NjY2NjU1NTU2NjY2NjY0NDQ0MzMzMzIyMjIyMjAxMTExMC8vLy8vLy4uLi4tLS0tLS0uLi4uLi4uLi4uLi0tLS4uLi4uLi4uLi4uLi8vLi4uLi4uLzEyMzQ2ODs9QENFRUdKTFBTVlpdY2dscXV1cXFxcHBycnBwcXBtbWxqaGVjYV5aWFZUUU1LSEZFQkE+PDo3NjQyMC4sKysrLTNPYFZVWWBXLDJKYWtsbXF2eHZxcXOAgW10bG52aWVoXlhXQjg6Ojk5Oj1BSE5QTUtMTk9PTkxIQz88Ozo4Nzc4ODU0MzI1Oj9APjw8NzEvLzAvLis1U2pqanVyaGVqcnuAg4mLkJJ2GyQoJygmandtaGpwcnR0eHJaRzw3R0lFU1dZWlpYRTY1Nzo4MTpEQkBCREhJUV1kZ2ZnaGdpbm5wcnZ4d3Z5enVvamhlYV9gYV9kc3d2c3FycnBpWU5PVWBpbGlqbGpqcXyBf3yAf208JScoKSkpKisqKyoqKysqKysvNDcxJicoKSksMTg8SVxyg4yJhYSCgYB3alY0LDpESU1PT1BSUU9OT1BSVVlaXV5fYWBdWVdVVVxfXVlTT05hZ2dmZ2ZaWWFncnZ8foOJjpGXm5uXkIuSlJSRmKCinpqSi4qRl5iWmpuZkoeIh3RmZWRkZWdpbG1wc3d+lZmTkY6Mi4qKjpGKg4ODgYF/f4GEiYR/f358dnNxbWxsbWxraWpqampqamxvdX+Fi4yMi4mHhYSEhYaJj5CPjoyNjIqKiIaFhoSEiZCUlZWVlZSUkpCQkpGPjEZGRUREQ0E/Pz88Ojk5ODg3Nzc3Nzc1NTMzMzM0NDQ0MzM0NDU1NTU2NjY2NjY1NTU1NTU2NjU1NTU0NDMzMzMyMjIxMTEwMTExMTAwMC8vLy8uLi4uLS0sLCwsLS0uLi8vLS0tLS0tLi4uLi4uLi4tLS4uLi4uLi4uLi4uLy8xMTIzNTY7Oz4+QENFR0lOUVRXWV5jaG5ub29tbW5ub29tbW1ra2poZ2ViYV5bWVRSUU5LSUhFQ0E+Pjs4NjYzMS8uLCwrKywuPFxYU1RcX0EpPVRmbG9ze3p2b2xnaW5bYnGGjHhnW09TU0I6Ojs5OTc3O0NKTUtIRkpLTUxLRUI8Ojo4ODg4NzY0MzIzNz5CQkA+PDUxMTExMDAvLCdAXWZsbXBtam12eX6DiIyMkU8cIygmUXpxa2pwdXd7f31gVkc7MztCOz9JVVpPNSk2Ozk9QD07Oz5CREdJUVpjaGlmYWJjYF9laWtvcXN0c3JxcWpkYF9eYF9jaHd4dHR1cnFvZFJNTlRfZmhqbWtpa3J8hH99gH9tQDIuKisrKysqKioqKywtLSwtLTA4PC8mKCksLi45QVNneYmNiYWEgoF+dWRILSs6Q0dLTk9QUlNST05OT1JTWFtdX19fXlpWVFFaYGNfWldUVV9naWllW19obnV6foKHio2PkZaUkI2PmaSkop6cmpqanZqQjI6UlJiblod+i4Z9bGhraWlrbW5yc3V3gpeYk5GOjIyMjZCTiYOCg4GBgICBhIeCfn57d3Vyb2xsbGtqaWtpaWlpamptcHd/h4yLiouJhoWEhISJi5CSkI2MjYyJiYeFhYaEhoyTlZWUlJORkJCPkJSSjotISEZFQ0NCQkE/Pj48PDo5ODg3Nzc2NTU0MzMzNDQ0NDMzNDQ2NjU1NjY2NjY2NTU1NTU1NTU1NTU1NDQzMzMzMjIyMTExMTExMTEwMDAvLy8vLi4uLi0tLCwsLC0tLi4uLi0tLS0tLS4uLi4uLi4uLS0uLi4uLi4uLi4uLi8vMDEyMzU3ODo7PT9CRUdIS09SVlhZXWJlZ2lra2tpaWpqaWlpaGhmZWRiX15bV1VTUE5MSkhGQ0E/PTw4ODY0MjAsKysrKyssLDJNX1ZRV1tXLDA9UF5ob3V6dG1oX1dRSlpyhY6GgHNmZWBJPTk7OTk3Nzg+Q0lIRUVGSElIR0NAPDo4NTU0NTY1MzM1Nz1DREJCPTk0MjIyMDEwLi4vLCtEY2ptcHFtcHN2foCFiIl3ICQiQntxaGpvdnl8gndcVlZJOTI1Nzg3Njs4LDA1Njc5Oj4+PkVITFFUWlthaWpmYV5jZl9aXF9hYmZvcW1sbnFqZGBfXl5dYWx2dHFxcnFvb2BMS09VXWNla21qam51fYaCgoSBclJJRTwwLCwrKisrKisuLiwrLS0uMjo5MiktOD43PU1idIOMjYmFhIOCgHVlSi8nMD5GSktOUVBQT09OTU5OT1JYXV1eX15bV1RTV19maGRjYmVqa2xuamNpcHZ8f4KHi4qKi4uNj4+Pk5qio6CamJmal5WWlo6KjpGSk5OVjYeEgnZwbm1vb3Fyc3d4eYWXlpKQjYyMjZCQk4mDgoOBgX9/gYSIg35+e3d1cnBtbGxqaWloaWlpaWpqbXB4gYiNi4mKiIWFhIWHi5CTkpCPjY6MiomIh4WEhImQlJWVlJOSkpCQj5CSkI2JTU1JSEdGREJDQUA/PTw7Ozg5ODY1NTY2NjY1NTQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NDQ0NDQ0NDU1NDQzMzMzMzIyMjIyMjIyMjEvLy8vLy8uLi4uLi4sLCwsLCwtLSwuLS0tLi4uLS0tLS0tLS0tLS0tLi4tLS4uLi4uLi4uLi4wMDIzNjY4Ozw+QEJFSEhNT1JWWFpcYGJkZWRkYmNlZ2ZlZWZlY2JhXltaWFVSUE9MSkhIRUFBPjs7ODY0MjEuKysrKysrLC0sPFtZUlVbYkUmMTlFV2Brc29oYVxYVUlIYHyJhYF7dXVqTjw5PDo4NzY1OD1AQUBCQ0NDQ0RBPzw5NjQzMC8vMTQ2Oz9CRUVDQj02MzIzMzExMjEwMzIwKDNSZ21tanR9d3R2eoKAajcgNHV1ampudnd+f3VbVFVWTj40MjM1NjU0MzI3ODg6Ojk5Q0pOUFRcX2BeZWpoZWBjZ2hlY19dWVBQYG9tamxxa2JdXF1eXF5vdnFvcHFycWxSTExPU1hcZWxsZ2ltdoCGhYWIhnlsY1tTRDQtKysrKysrKywrKysrLC40Oz0wMzM6PkRabn+MkI2JiIiGhHt1al1bV0xFQURGSE5PTk9OTEpEQElMVFpaWVhcXFtXWV5mbG9vcHJzc3Rxc3Jxc3d7goOGi42Mi4qIiIqMkZOXmpmZlJOWmJiWk5GQj46OjpKUj4aFioR9d3VzdHZ3d3h3enyKlZSSj4uLi4uOkJGIgoKCgoB+foGEiH9+fHl3dHFwbmxsampqaWlpaGhra2xxeYOKjYmIioeFhYWHiYyRlZKQkI+Ni4qIhoSDhYmOlJWUlJOSkZCPj42QkpCOi05OTEtJSEVERUNDQT89PDw6OTk2NTU2NjY2NTUzMzMzNDQ0NDU1NTU1NTU1NTU0NDQ0NDQ0NDQ1NTMzMzMzMzMyMjIyMjIyMjIxLy8vLy8vLi4uLi4uLCwsLCwsLS0sLi0tLC0tLS0tLS0tLS0tLS0tLS4uLS0uLi4uLi4uLi4uMDAyMzQ3Nzk6PD4/QUNHSk1RU1VVVlhcXF5dXV5fYWNiYWBgX2BeXVpXVlRST09LSUdGQ0E/Pjw7OTg1MjEuLCsrKysrKy0sLTFHX1dRWmRfMCgwOk1YW2NlZF5YWVpSSk5senRwb29yYlFBPDU0NDIxLzE0NTU0Njc4Ozw+PDo7OTY0MzMyMTU4P0JFRkZFQj45MzExMjIyMjU1NTU1NDUwLz1aaW5ueX17dWVSVDgnL2x0aWhsb3d+fGdXV1pbWFJBMzQ2ODwzLzE2NjY6Pj9CSk1PVFdXW19fYmZnZmVkZWVoZWFbWVJFQFFmamprcGlgW1tcXFxleXpwcHFzcXBiSkhLTlBVXGVvbGlrcHuGiImKiYmFf3lwZFtJNiwrKysqKyssKysrKyosLzU+NzM1PUJRaXqIjo+NiYiIhoN9dGpcXWFmZmVXSkZHTExKS0dBLio+QkZWWFhZXGBfXV5lbXJzc3R2eXl4eHd2eHp9goOGiI2MjIuLiYmIiYyNk5WWlpKRkpOTk5CNjY2NjYuSlpWUk5SRjIZ7d3l6enp8fH+Bi5OTkI6KioqKjJCRhYKCgoKAfn6Agoh/fnt5d3JxcG5sa2lpaWlpaWhoamtscXuFi4yJiYmGhYaHi4yRk5OSkJCPjYuKiIaEg4aOlJWVlJOSkZCPj4+NkJORjotPTk5NS0pIRkVEQ0JAPz49Ozs5Nzc2Nzc1NTU1NTU0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzMzMzMzQ1NDQzMzMzMzMzMjIyMjIyMTExMTAvLy8uLi4uLS0tLSwsLCwsLCwsLCwtLSwtLS0tLS0tLS0tLS0tLS0tLS0tLS0uLi4uLi0uLTAwMTQ0NTc4OTo7PT9BRkdLTE9QUVFTVldYWFhYWltdXVxdXFxcWlhVUlJQT0xKSkdFQ0FBPzs5NzY0MzIwLCwsLCoqLCwsLCwtN1VbU1VdZU8mLDRATVNVWVhUUlZZWFVSXWxta2ZoaWJYSzgtLi0rKigoJycnJycqLTE0ODxBQ0RERUdHQ0BBRUZHR0dGRUE7NDAwMDAxNTU3NjY2NTU2MzMuMEliZ3N7fH94WCAkK2t2bG5xb3J5c2NXXFxbXlxVQTU1NjUzMC0vNERJRkZYZFRRVlpaWV5eYmRlZGBgYGRjZGNcV1RNPzpDVWJnZ2tnX1pZW11dbn53cHBycXFzWEZFS05RV11lamxtcniAh42Pj4+OjYmIf3NrXkw0LSwsLC0sLC0rKysrKy0xNjo7O0JMWnKBjpCOjIqHh4aBfHNoYF1iZmNiYllHT01HPjk9PzkjLzMuR1haXF9jZGNma3J2d3l5eXl6fH59fH2Ag4WGhoqMj4+OjI2OkJCPj5GRkpKRkZGQj46Pj42NjIyPkJGRkIyLiouKhIB/f4CAgICDhIySkI6MiomJiYyPjoSCgoGBgX5+f4KIf356eHZycHBubGtpaWhmaGlpaWlrbXN9h4uMiYmIhoWGiYuPkpSSkZCPjo2LioiHhYeIkpaVk5KSkZGPj46OjZCRj46LUE9OTk1LSkhHRURCQD4+PTw7OTg3Njc3NTU1NTU1NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MzMzMzM0NTQ0MzMzMzMzMzIyMjIyMjExMTEwLy8vLi4uLi0tLS0sLCwsLCwsLCwsLCwsLCwsLCwtLS0tLS0tLS0tLS0tLS0tLi4uLi4tLi4vLzAzMzQ1Nzg5Ojs9QERFSUpMTk1PT1BRUlJSVVdZWllYWVhYV1ZUUU9OTUxKSUhGREJAPjs5Nzc1MzEvLiwsLCwrKywsLCwsLC9DX1dTWGNoPiotM0BMUExMTE1OUlZZVlRna2toY2JiXltKKygnJiUjIyEhIiIjJCYpMDlFTlFSUE9PTk1KSUlIR0dGQ0E8NzEwMDAwMTU2NzY2NjQ0NTU1NDEwNUleb3d5eWUwKml6bW5tbnJ4d1xYWltcXWFfX0c2NTUzMS0uMDRGSklMZWxTU1NSU1ddXWFjYl9cXFxdX15aWVFOQzo3PU9gZ2BpamBcXFxbYXh+dXJwc3FxbExCRUlNUVdeZGpudXl/houPkpKTk46NjIiAdmtbRDAtLi0tLS0sLCsrKyssLzQ7Oz1ATmJ2iJCSkIyKiIiHgntwZV9ERmNpZWFeU2NtZ19WTD1AOzk8QEtZX2FjZWZobnJ2eXp8fHx8fX5/f31+gIKGhoaJjpOTlZaWl5eXl5eXl5WVlZORj4yLjIyMjY6OjIyJh4WEg4SFhIOEhISCgoSEg4eOj42LioqJiYmMkIyCgYCAgIB+fn+Ch358end1cnBwbmxraWloZmZmaGhpam92f4iMjYmJh4WGhYqMkZOUkpCQj46Mi4qKiIeIjZSWlJORkZGRj4+Ojo2QkpCOi1RTUlBOTk1LSUdGRENCPj09Ozk6ODY3NzQ2NjY1NTQ0NDQ0NDQ0NDQ0NDQ0NDQ0MzMzMzM0NTQ0MjIyMjMzMTEzMzIyMjIxMTAwMC8vLy4uLS0sLCwsLCwsLCwsLCsrKysrKyssLC0tLS0tLS0tLS0tLS0tLS0tLS0tLi4uLi4uLi4wMTMzNTU3Nzg6PUBEREZISUtNTU1NTk5PT1BTVFNUVFRTU1JST01NS0lJR0dGREA/PDw6NzU0MjEuLSwsLC0tLCwsLCwsLC0uNVRhVlhfZmEwKy82QUxKRkdIR0hNVlVTWGlvcGNaXGRhV0MnJSUjISEiIiMjJCcpLzpLVVRSUE9PT05KSklJR0REQ0E9NzMwMDAwMTQ0Njc3Nzs4OTU2NTM1NjAuMDc/RUI1LGp4bm5ycXB6el1YWlxfYWFgYU9ANzQ0MzAvLS0yNj5BQkpOUVdYVVRVWl1fX1paXFtdXVlUUU1HQTw2Nj1PXF5WYGxiXV1dXGyDfnVxcXJzcF9EQkZITE9WX2NncnyBhYmOkZKTk5STkI6MhoF0Z1Y9Ly8uLi4uLi4rKywrLS4wNzxARVJqgI2QkI6Mi4qKiYN8cGRjUD1eZ2JlZWhoaGhsb2xiT0RLUVFZYWZna25yc3h7f4B/f35/fn5/f4B+fH1+g4SHkJSYmp6goKChoqOho6KgnZ2Zl5SPjIyMjIyNi4eGgoKDg4ODg4KDhYWHiIiGhYWJjYyLi4qJiIiIjI6Jgn9+fn5+fn59gIZ+e3l2dHFvbmxsa2loZ2ZlZWdnaWpwd4CIjIyIiYeFhIeLjpOWlJKQkI+Ni4mKioqKi5GWlpSSk5GQkI+Pjo2LkJOQjotVVFNTUE9PTUtJRkZDQkA+PTs6ODk3Nzc2NTY2NTU0NDQ0NDQ0NDQ0MzM0NDQ0MzIzMzMzMzMzMjIyMjIxMTExMTEyMjIyMTEwMC8vLy8vLi0tLCwsLCwsLCwrKysrKysqKioqKysrKywsKyssLC0tLS0tLS0tLS0tLS4uLi4uLi8vMDExMTU1Nzc6PDw+QUNERkZISkpMTUxOTk5OUFFQUVBQT05MTEpKSEZGRURDQkA/PDo6ODY0MjAvLi0tLCstLS0tLCwsLCwsLi4/YWBXWF9nTygqLjZCTUpHSUVESEtNVFdebXFmX2BkZV5UOSEkIiEgIiIiJCcsMT9QW1lYWVZSVVFOSkdGRkRBQD88OTQwMDAwMTI0NDY2ODw+PDk1NTc3NTQ0MTAvLS4rMWV2bWtvcXB3e2NZW15eZGZmUD44Ozg0NDIyMTAxMzQ3OkJLUFhbWVpZWV1dXV1aWltcXFlUUE1JPTg2NTY9S1NUUVloZVtdXWF3g312dHV0c3FSP0JGR0tPVl9ob3WBiI6QkZSWl5WVk5KOjIyHfXNiTTUtLS0uLi4uLCwsKystLDI3S1xkdIiSkY6QjYyLi4iCeWxjYmNaXmVjY2VmaWlnZ2pvb3Bwb2tkZ21yc3V1eXqAgoKEhIKAgYCAfnx7enh5e3x9hY+co6aqq6urq6ytrrCtqqqpo5+alpCLi4uLiYeEhIGAgICAgIB/gYKDh4qJhoSFiYuMi4uJiYmJiYuNiIOAfn58fnx8fYCDfXt5dnRxb21sbGtpaGZmZWZnZ2lqcXqEjI2LioqFhISHjJGVlZKRkJCOjIqJiYqJi5GUlZOTlJGQkJCPj46Ni5CSj42KWFdVU1JSUU9NS0hJRUNAPj07Ozk5Nzc3NjU1NTQ0NDQzMzMzMzMzMzMzMjIzMzMzNDQyMjIyMTExMTExMDAxMTAxMjAxMTAwMTEvLy4uLi0tLSwsKysrKysrKioqKioqKSkqKisrKiorKyorKyssLCwsLS0sLC0tLS0uLi0uLy8vLzAxMzMzMzU2Nzk5Oz0/QUNFRUZISUlLS0xNTk5NTU1LS0pIR0ZEREJDQ0JAQUA+PDs5Njc0MTAvLi0tLSwrLS0tLSwsLSwrKy0tNFBlWVdYYGc9IywvNkNLSkZEQ0JFRkhRV2VyamloYl1YXFMyKCQhISAhIiUpLz1TXl5gYFxbW1RRS0ZCQUE/Pjc3ODgyMTAwMTIzMzQ3ODtAQT04ODc1NTQ0MzIwLSwtNmx3bGpvbm53emhcXFtdYGFXOiguNzs5NTIwMDM2NDM1Oj9HUFVYV1RWWVleXl1cWltdXl5aVFJRRzs3NTI0OkZNUVNWZGZdXltmgIN6d3Z0c3R2a0s9QkVKUVVca3l+iI+QkpWWmJmXlZKRj42Mi4N5bV1DMi4sLy8wMC4uLisrLS4uNENhd4GOlJKOjYyNjIyFgHVnYF9hYWJhY2RkZ2dlZWhucnJ2eX6BgX18fH5+f4GBhoaGiIeDgIF+fHt4d3Ryc3R0dH6QpqyvsbS0tLa3uru7urSzsq6ppZ2Vj42Oi4iGgoGAfnp6eXt7e3x9f4GIioiFhYeJiouKiomKiomKjIiDgICAfn59fX6Bgn56eHVycW5ta2ppaWhmZmZmZ2dpanN8ho2NjIyJhoSEhoyTlZWSkJCPjIqJiIiJiY2RlpWSkpKRkZCQj4+MjYuOkY+MillYV1dVVFNQTk1JSEVDQT8+PDw6ODc3NzY1NTU0NDQ0MzMzMzIyMjIyMjExMjIyMjMzMjIyMjExMTExMTAwMTEwMTIwMDAwMDAwLy8uLi4tLS0sLCsrKioqKioqKioqKikpKioqKikpKysrKisrLCwsLC0tLCwtLS4uLi4tLi8vMDAxMTIyMjIzNjY4Ojo8PT8/QUNERUdHSUlJSkpKTExJR0ZGRENEQUBBQEA+PT48PDk4NjQ1MjAvLy4uLS0sLC0tLS0sLC0sKywsLS87WmFaVVllZDMmLC85Q0tIRUVDQUFBSFBaa3V3cF5QVWBiSiggISEhISMlKzZOYGJlZGJfWU9IQTg1MDAyNzc1Njk4NDIxMTEyMzM1Njc6Pj06ODg3NTU0NDUzMywtQm11bWptcXF2eWdhXGBeYVg6KSktMDc6OTUyMDI4NzU1Oj9IT1JYW1dPT1ZaYWFeXFpbXl1eWlhWV05CPDY1NTxGT1VTUl5nXlpcbYKBeHZ1c3RzcXZ0U0FHTE1QX3N9hI6SlJSWl5mYk5GOi4yPjIyIfnNmVz4xNDk7Ozw4NjItKiswMjJDX3mLk5OSj46Mi4qKhXxvYl9iYWFiYmRlZWVnZ2prcHJ0eH1/gYCEg4OFhYSFhYiIiIeHg4GAenh3dHRwcW9ubnF1j6uxsre5ubm7vL69vby7urm3sKyhlpSVkIiFhIOCfnx5d3Z1dnZ2d3l7foWIhIGBhIiJioqJioqJiouHhIKAgICAfX1+gYF8eXZzcm5tbGtramloZmZoaGhoaW10fYeMjYuKiIODhYiPlJSSkZCOjYuKiIiIi42PkpSSkZCQkJCPj46Oi4yLjpGPjYtbW1pYWFhUUU9OTElHREJAPz08Ozg4ODc1NTU1MzIzMzMzMzMyMjIyMjIxMTIyMDAwMTExMTExMTExLy8wMDAwMTExMC8vMC8tLy4uLS0uLS0tKysrKikpKSkqKikoKCgoKCkoKSorKysrKysrLCwsLCwsLC0tLS0uLi0tLi4wMDAwMDAwMDEyNDQ1Nzg4Ojw8PT5BQkRERUVGR0dHR0ZFR0RDQ0NBQUE/PT09Ojw9Ozk4NjQzMzIvLy8uLi0tLS0tLSwsLS0tLS0tLS0tM0hnYFdVXGdfKSYmLzVASEdGREFAQEJJVF9ucm9gUFRdXlc7HyEhIiIkJy5EXWNjZGNcTkQ3LCgjISMnKCsuMTU6PDk0MzM0NzY3OTs9PUA6ODk3NTY1NDQ1MzA3Yn14bWdrcXN1d2BaXF9hYlMtJigtLzM2NDc3NDE4Ozg5OT5GT1RVV1dUUFBSV15fX19cXF5cW1paXFxYSz88ODlETlRVVlZbZGFXX3aAfXl2dHBycmpqd3hYRUlNVmN3goqSlJWVlpeZlJCNiYSBh42Ni4d8cWNTRUdMUFBQTUhDQDgxMjE0RWR8jZSTj4yLi4uIhoF4a2BfY2JjYWFiY2ZnaGpvc3N1e3+Bg4WGh4iJiYiIhoaIhoWEg4GAfnl2c3BvaGZpbXBtbpitsrO4vLy9vb6+vr28u7u7u7awp56elouAgYCBgHt5eHZzcm9ycHBycnZ3f4SAe36Fi4uKiYqKiouKhoSDgYCAgH5+gIOBe3h3c3BsbGxsamlpaWhmaWloaGlsdYCJjIuMioaEhIaKkpWSkI+OjYuLiYeIioyQkpKTkZCQj46Pjo6NjIuLi4+QjouJW1tbW1lZVlRSTk1KR0VCQEA+PTw5OTg3NTU1NTMzMzMzMzMzMjIyMjIyMTEyMjAwMDExMTExMTExMTAwMDAwMDAwMDAxMDAvLy4uLSwsLCsrKysrKykpKSkpKiopKCgoKCgpKCcpKioqKiorKysrKywsLCwtLS0tLi4tLS4uMDAxMTAwMDAxMjQ0NDY4ODk6PT49Pj9BQkJDREVFREREQ0NCQD4+PT09PDw7Ozs6Ojo3NzUyMjIyMS8vLy4tLS0tLi4tLS4tLi4uLSwsLS0zU2haV1leaVEjJSosMz5GSERDQkA8QUlSZnBwa2BbXl1dVCsfISEiJSo2UWRiY2VaRjAsKSUkIiMjJCQmKCovOTs4NDQ0NDc7PT0/QkJFQDs6ODY3NjY3NTBLdX10a2ltcXZ6dWFbX1pfZ0soKCsuLTEwMzg6NzxGRT47Pj5HTVZYVFNTU1BRU1FVWl5eXVpaWVlZWF5kYE9DQj4/RlJVVVVWWGFgW2mAgHx3dXN1c2pgYmt1eFhGS1hvfYaPkZKRkZKSko2HgH56eoGJj4yKg3hzaWRfYmZmZmJdVlFKQTg0Nk1shJGSko+LiomJh4F8cmRiYGJjYmJgYWJkZ2xwdHd7fH+BhYeIiYqKioqIiIaFgoF+f319fXx4c25qZmZfaG1wa2+fr7S4u76+vr2+vr2+vby7u7u6taymnYl6en1/f356eHZ0cm9ta2hoampsam95gX12e4KLiomKioqLioaFhIOBgYF+foCEgnp3dXBua2ppaWppaWloZmhoaGhqcHeBiYyKjIqGhISIjJSXk5GPjYyKiYiIiY2PkpOSkpKSk5eYk46OjIyLi4uPkI6LiVtbXFxbWVdWU1FOTEpIRkRAPj08Ojk3NjU1NDIyMjMzMjIyMjExMDIyMjIyMjIxMTExMDAwMDAwMTEwMDAwMDAvLzAvLi4uLi0tLSwsLCsqKysqKikpKCgpKSkpKCgpKSgoKCkoKSkpKioqKiorKysrLCwsLS0tLS0tLS0tLS8xLi4wMDExMjIzMzMzNjY3Nzk5PD4+QEBBQUFBQUFAPz89Pj48Ozs6Ojo6OTk5ODY2NTU1MjIxMTEwMDAwLS0tLS4uLi4uLS0tLS0tLS0uLzhXY1xYWWNkQCElKSsxO0ZJQkBAPj1ARVVqc3Jta2loaWVEISIiIycuP15pZWRiTDMqKyklIyEjIiIjJigrLzc5NjY2Njc5PUBCQ0ZIR0I/Ozg3NjY1NDNJfnlybWlscXN5dWRbXl1hYUQkKSsrLS4wNDc6PTk+SkY8OT1FTFBUWFVSUlJOTU9OUFNWW1pYWlpbVlRaYV1OSEZDQ0RMUlVVVlZfYGFyf3x4d3Z0dnRkXWBnbHNzVk9ec4OOkZGPjoyNjIiFfXFvdHZ5gYyOi4aAfXp4eXt9fHp3cmtmXFZLRktbcYeUko+MiImHhoV8eGthYWRiYWNjZWhpa25xdXl9fX+ChYeKioqJioiHiIaFg356dnZ3dnZ1c21oYlxfZGFjZ22CoauzuLu9vb2+vba+v769vb29vLSqoIVzdHl5eXp7enh1cnBrZ2ZmaWpoZGVtbnd7d3d8goeLiIiKi4mGh4SDhIKBgICAhIJ7d3RycGxsa2tqamlpZ2hoaGlpa3F8hIqNio2KhYSDiI+VlpSSj46MiomIi4uPkZOUk5KTk5ihoZuSjouLi4yMj5GPjIpeXlxcW1lXVlRST0xKSEVFQ0E9PDo5NzY2NTQyMjIzMzExMTExMTExMTExMTExMDAvLzAwMDAwMDExMC8vLy8vLi8uLi0tLi4sLCwsLS0qKisrKiopKSgoKCgoKCcnKCgnJycoKSkpKSkpKSoqKioqKisrKyoqLC0tLS0tLi4tLS8vMDAxMTIyNDQ1NTY2Nzc5Ojs8Pj4+QD8/Pz8/Pj4+PDs6OTk5ODg4ODc3ODg2NjU1MzIyMTExMDAwMC8tLi4tLC0tLSwtLS0tLS0tLi8wP19jWFZZYmEuIycnKy43Q0dGQkI+OzxEWHZ9c2pnYm50XS8gISQnMUhobW1sXTcqLSknJSMiISMlIyQmKi00NjY2NjY3OT1AREZISEdDQDw5ODU0NDE6c4J1b25xc3R5eWJeYF1hZ0klJSovOTo3OD4+P0E+PUZEPz1ARk1OTE1MS05RTUxOT09RUlNWV1dbXFZUVVdVTktLR0VFSE5VVVZWXGRqfXx2dXN1dXV1YV1iYmVrc29faXuJjZCNi4iGhoeEgHhraG10cniFi4yKh4SEhoqOjYyLh4F7dGxmXFxfbXuLkpGNioeHhYWEfXRmXV5fYmRjZmdrbHF1d3t/gYSFh4qMjIuLiouKhoSAgYWBd25qamtsamRbV1RRUlVTV2CCn6GqtrO1u7i4vL68vb2/vb29vby5pn1pbXF0dXZ2d3Z1cm9ua2lkaXBvcGtmbHRzamVrcHV2gYiIi4uHhoaFhYWFg4KCgIOCfXd1cnFsbGtramlpaWdoaWlpaWtxe4aLjIuLioWBhImTlpSTkY+Ni4qKiY2PkZKTk5KRkZOco6SckIyKjIuMjY6QjoyKXV1cXFtZWFdUUlBOTElHREI/PDs6OTg3NjQzMzIyMTExMTAwMTExMTAwMDAwMDAwLy8vLy4uLi4vLy4uLi4uLi4uLi4tLS0tLCwsLC0tKysqKikoKCgpKCYnKCgmJicnJiYnKCgoKCgpKSkpKCkqKioqKysrKywsLCwtLSwuLS0wMDAwMTEyMjIyMjIzNDU2Nzc4Ozw9PT09PTw8PDw8Ozo6Ojo5OTg4Nzc2ODg4NjU1NTMzMjEwMDAwMDAwLy8vLi4tLSwsLi0tLS4uLi0tLTFGZF5VVl1oViUmJyYoKzM/SUdBPz88OkNecWpqYmFwc3FNIx8jJzNObXBxblAtLSwpJCIiISEiIyIiJCksMDQ1NjY3ODo9QERISkhHQT49ODc1MTEwXoB4dHF0dXp8fmdZX11iZ1UmLCktND1HRUhMT0lHREVJRUZFREVLTElGQ0VKS0lJS05SVFFRUlVZWVxcVVJUUU9QT0tIRkVMU1ZXVVlkc3t3cnN2dnZ3cl9bX19hZ2txdHSCjIyNjIiEg4KDhYF5ZWNob2xte4WLjYuLi46TlpWWk4+NiIN8d29scXiEjpOPi4mGhISEgXtvYFpfYF5iZ2pucXN2fH2AhoiJiYqMjouLiYiHh4N+d3p9fHtzZlpaWFRQTVdQR1FeamyJo6ittbm7soyYnKy+vr++vr29vL23onJZY2lscHBxdHR0dHJxcG5rZ2pvbm9wcG1xdm1cW2BlbXqIiouIhYWFhYWFhYKCgoKEg354dXJvbGtqbGhoaWlpaGhoaGpvdX2HjIuKi4iEgoeQlJWSkJCPjo2Li42OkJOUlJKRkJCSmaOil46Mi4qLjY2Pj42Mil5eXV1bWVlXVlNRT0xKSERCPzw7Ojk4NzY0MzMyMjIyMTEwMC8vLy8uLi8wMDAvLy4uLi4vLy8vLy8tLS0tLS0vLi0tLCwsLCwsLCwsLCoqKiooKCgoKCcmJygoJyYnJyYmJicoKCgoKCgoKSoqKSkqKisrKyssLCwsLC0sLC4tLi4wMDExMjIyMjIyMzQ1Njc3OTo7PDw9PT08PDs7OTc3Nzc3Nzc3NzY2NTQ0NDY1MzMzMzIxMTEwMDAwMDAvLy8vLi4vLy4uLS0uLi4tLSwuM1BnWVJYYmVGIyUkIyQoLjtFSUZAPz4+SGNwbmNla2hrZjghJCgxUG9wb2tHLiwpJiMiICEhIiMiISMoKy0xNDY3OTo8Pj9BRUlKSUE9Pj46NTAvW3l4c3F0eHx7fnBWXF5gaF4sKSwsMDpDREVPUVNYU01RT0NJTk1HRkdFRENDRElJSEdNTlRVVFVWWFpeX1lUU1FPT1FPTEhESFFWV1hbZnV6dHJzc3R1d3JfW1xgYGFnb3yBi42MjIqHhIGBg4SAd2RiZGxqYnF/iYyOjJCSlpmamZeUj46Lh4N/fX+Fio+RjYqIhYSEg4F7bV5bXl5eZWlucnd6fH+Dh4qMjIyMjIyKiYiFgoF/e3l0cXV5fHZ2bGRbVF5hRkRskpqZp7K3uLi5vqZ3mYyRu76+v76+vr2yjV1SV15jZ2tsb3F0c3NycXFyb2xvcm9ta2tsb29vYU9SVmB0hoiLiIWFhIWFhYSCgoKDhIOAfXh0cG1sa2loaGhpaWloaGhrcHeAiYyLjIuIhIOLkpaTkpCQkI6Mi4yMj5OUlZKRkZCQkpmgn5eNjIuLi42Nj4+NjIpeXl1dW1pZV1RTUU9OSkhFQ0A8Ozo5NzY2NDQzMTAxMTAwMDAvLy4uLi4uMC8vLy8uLi4uLi4uLi4uLS0tLSwsLS0rKywtLCwrKysqKiopKSkpKCcnKScnKCcnJyYmJiYmJicnJycnJygoKCgoKSkpKCoqKiwsKyssLCwsLS0tLjExMTEyMjExMzMzMzMzNTU1Njc5ODo6Ojo6ODo6Ojg4ODc3NzY2NjY2NjU0NDQ0MzMzMzIyMjIyMTExMTAwMC8vLy8uLy8uLS4uLS0uLS0tLS82W2JSUVdhYjkiIyMiIicsNkJIR0NCQj9QZ2JYWl1na25aKCIlLUZmbWpmQCssJyYjIR8gISQlIyMiJCgrLS8zMzY6PD09PkFGSUtDPz9BPDI1YHdybHN0eHp8fHVbWl1dZGc6KyssLS42PUFHT1RYZmJXSUNETUxJR0VCQEFCQkNHSUdISk5TVldXWVpaXWFdWVVTUlJTTk1IREVNVVhaW2ZzdnFzd3h2dXZxYFteXWBkZ3N/iJGQj42JhoSDg4SDf3RiY2NpaV5qe4eMjo6QkpWZmpqal5aSkY2MiYeGioyQj4uKiIeHhYV/d2haVFheYmhrb3N7gYSGiYqOjoyLjIuKh4eDgn59enp6dWdcYXJtbmdlXl9xc0lamayxtLm7u72+vLu1rLiws7y+vr6/vrqndUhFT1JYXGBka29wcHBycnFzdnZycnh0bGdnaW5ycmlSQU1Xb4OHi4iFg4SEhISDg4KChIOGgn56d3JubGxpaGhoaGhoaGhpbXF6hIuLioyLiISFjpSVk5KRkY6NjIuMjpCVl5WRkY+QkJOboJyWjoqKioyMjY2PjYyKXl1dXVtaWVdVVFFOTElHRURCPTw6OTc2NjQzMzIxMTEwMC4uLy8uLi4uLjAvLy4uLCwuLi4uLi4uLi0tLS0sLCwsKysrLCsrKioqKSkpKSkoKCcmJygnJygnJiYmJiYmJiYnJycnJycnJycoKCgoKCkqKiorKysrLCwsLC0tLi8xMTExMjIxMTMzMzMzMzU1NTY3Nzg4OTk5OTk4ODg3Nzc2NjY2NjY2NjY0NDQ0NDMzMzMyMjIyMjExMTEwMDAvLy8vLzAwLy4uLi0tLi0sLCstLT1iXFRVWl9XLR8hIiEjIigyQkpKSENCQVhfT0xPV19oa0MeIyk5WWhpYkEsKiYkIiAfHyEkJCMhISMkJystMDM2OTw9PT5BREhJR0NBPzhMcHZtbWxwdnZ5enNfWV1cXmVJKS0sMTEwNTlASE9XYWtoV0pHSk5OSkVBQD4+Pz9CREZISUxNT1NWWFlYWltdXlxYWFdXVE9OSkVER1FXWVplcnZzdnp5eHV3cl9YWVxfZGt4g46QkY+MiYaDg4KEgn5xYmFjZmddaHuHjo6NkJKTmJmampiWlZKQj4uMjY2NkI+MiYmHh4aEfnZoXldVYWpnaG92fYSJi42OjI2Mi4mGhISBf319eXRvbmpdU0llbm5wdWhVXGpMb6a0uLu9v7++u7Szt7q7vb6+v7+9u7CXZEZLU1FPUVVaXmJnam1wcnFycnV5eXJzd3FwcG9xd3ZzaEtFWXCEiIuDgYGChIOEg4ODg4SFh4KAfHl1cG5sa2hoaGhoaGhoaW1ye4WLiomMioeEiZKVlZKRkZGPjYyMjI6RlpaTkZGPj5KYnZyZj4yLi4yMjoyOjoyMil5eXl5bWlpYVlNRT01KSkdFQkA+Ozk2NjY0MzMxMTExLy8uLS0tLS0uLi4uLS0uLiwsLS0uLi0tLSwsLC0sLCwrKysrKysrKyoqKikqKikpKSkoJycmJiYmJiUlJSUlJSUlJCUnJicnKCgnJicnKSkoKCoqKioqKissLCwuLi4vMDAxMTIxMTEyMjMzMzQ0NDY2NTU3Nzc3ODc3Nzc3Nzc2NjY2NjY3Nzc3NjY2NjQzMzMzMzMzMjIyMjIyMTExMDAwMDAvLy4uLS0tLSwsLCwsLCstR2RXUlVbY1YsISIfISAiJzA8TVJPS0dLYV1RSktNWW5jLh4lMVJkYFY/LCYiIiIiISEjJSUjIyIiJCgpLC4yNDQ5Ojw+P0FCQUI+O0hfdHFsamlwdXR2dnFgWVxdXmZfKSsvMDMyNTg4OD9IWGlsX1VNTVBTVVNNRT09PDw8P0NGSEpMTU1RU1ZZWVlXWFxbWllYWFRQTklFQ0RNU1dbZW5ucHJ1dnN1dm5nXFhdX2hzgI2SkY+Li4mHh4aFh4V/b2FhYWJlYWx7io6Nj5CTlZaZmZqYl5SSj5CQkY+Oj4+PjouKiIiHg352bGJeX2dvc3N5fYKHi4yNjY6MioiJhIF/fXt3dXRza3FvX1lwc21rbHNqWlhbV3WquLq8vr68uLGqtbq8vr69vr+7tJtyUUtUVFFNTk5OU1ZcYGRpbG9vcHBzeYOBdnd3c3NtaXBycG9hQktwhImIf3+AgIGCgoOEhISEh4iFgX57eHVzb2xqaGhoZ2dnaGptc36Ii4yJioiGh42VlZOQkJCQjoyMi4yPlJWTkY+OjZCWnZ2YlI+MiYqMjouHj4+NjIpbW1tbW1pZV1ZTUU9NSkhFREI/PTs5Nzc2NDMzMTExMS8vLi0tLS0tLS0tLS0tLS0sLC0tLS0tLSwsLCwsLCsrKysrKioqKSkpKSkpKSkpKSkpJyYmJiYmJiYlJSUlJSUlJSQlJyYnJygoJyYnJykpKCgqKioqKiorLCwsLi4uLzAwMTEyMTExMjIzMzM0NDQ1NTU1Nzc3Nzg3NjY2NjY3Nzc3NjY2Nzc3NzY1NjY0MzMzMzMzMzIyMjIyMjExMDAwMDAwLy8uLi0tLS0sLCwsKSoqKjBRZlVQVlxiWy0dHyEgICAmKzlIUVRNSVFlXE5OUFNldEshJC9OYVlVSzsnIiIiIiEhIyUlJCMjIiQnKSosLzE0NjY4Ozs7PDs3SWNyc21mZ2pvcHV7d21hWllcXmBkQC0sLzAyNTg5NzM2QVJcVUtIUFJVVVdaVUxAPTs6Oj0/REdMTE1NT1JWWVlZWFlaWlhVVVVTT0xJREFCSE9WWGJqampscHNxc3JrZV9ZWmBve4eQlJKPi4uJh4mJiYmGgW9hYWFla2lxhY+Qjo+QkpKTlpaXlZSQjIuLjY+RkZGPjo2MioiIh4OAeXJuamhueX6BhYWJjI6Ojo2LioiHhIB9end1dnJycm9ucHFybm9xbWtoZllTX2N8qbe6vb27uravpbC4u72+v7u2qX5VTVJSUU9MTU5PT09RVltfY2drcHFxcnR8fHdxc3hxamBtdnh3blxheYSJhH19f3+AgIGChISEhYiGhYOAfXt3dHFtbGhnZ2dnaGhpbXV+iIuLiImIh4mRlZORkJCQkI6MjIuNkZSVkZKPjY+Sm56ak4uLjIqKi4yKho6OjYyKWlpaWlpZWVdUU1FPTUpIRURCPz07Ojk3NjQzMjIwMDAvLy4tLS0tLS0tLS0tLSwsLCwsLCwsLCwsLCwsKyoqKCsrKyspKSgoKCgoJycnKCgoKCcmJiYlJSQkJCQkJCQkJCQjJCYmJiYmJiYmJycoKCkpKSkqKisrLCwsLC4uLzAwMDExMjIyMjIzMzMyMzQ0NDQ2NjY2NjY3NzY2NjY2Nzc3NzY2NjY2Nzc2NjU1NDMzMzMzMzMzMzIyMTExMC8vLy8vLy8vLi0tLS0tLCwrKywsKygpNV9iU1BVXGZhMh4gHx8fIigqN0NSVE9KW2lbUEtRWnBrNSAsSmNdVE1HKiIiIiIhIiQlJSYlIyQkJywrKiouLy8xMjY5ODQxT3dwbWdkZmltcHB3cG1jXFlaXV5gUTEvLzIyNTg8Ozo4PD1LRT07RVFXVlhaXFpRRj47Ozs7PUJGTE5OTVBQVVpaWVlbXFlVUU9PTEtKSERDQUNLUldgZ2doam1vbXBtZGNiXFpkc4GOkpKSjouLiYiLjIyKiYNzYmBiaHJ1fYyRj4+Oj5CPkZKTlJORjIiEhIeNkZKRkJGRjYuKiYiFgXt5eHNyeH+EhomLjo+Oj42Lh4OBgHx8enl3c3Fwb21wcGtqa25wcW1pZWpjXmNfdqW1ury+vLq5taOsrbi7vLmxk2VKTFNSUVFRUFBPT09NTVFUWl5hZ2lwcXJ0c3N1c3Z7fHRxfYOIiX9weYCDhn15fHx9fn9/gYKDg4WGiIWEgoB9e3dycG5qaWhmZ2dna294gYiKiYiIiIiMk5OQkJCPj4+OjY2NkJOWlpGQj46Ql52cl4+IiIuKi4yJhICOjo6Ni1xcXFxaWVhWVVRRT05LSUZDQD89Ozo5NzY0MzIyMDAwLy8tLS0tLS0sLCwsLCwsLCwsLCwsLCwsLCwrKyoqKigpKSoqKSgpKSkpKSgoKCgoKCgmJiYmJSUkJCQkJCQkJCQkIyQmJiYmJiYmJicnKCgpKSkpKioqKisrLCwtLi8wMDAxMTIyMjIyMzMzMzM1NjU1NjY2NjY2NjY2NjY2NjY3Nzc2NjY2Njc3NjY1NTQzMzMzMzMzMzMyMjExMTAvLy8vLy8vLi4vLS0tLSwsKyssLCkpJyk6ZGBVU1ZfaWQ0GiEiIyMkJSszPk1TUFNnblpOTlNhdFgjKD5hZllNQioiIiIiISIkJSYnJSYlJSgwLyopKSoqKysrLC4sTnJxa2hna29vb3B2aVhlYVxaWllVWDQuLjM2NjY3OTs3OEA/QjsxOUVPUlBSVVNRSkQ9OTk5Oz1CRkxOUFJUVFVXWVpbXFxZUkxLSUlHSEVEQ0FBRktUXWRkZWhrbGttal9gaGRgaHeJkJKSkY6KiomKjIyLjIqGdWJfZGt2e4eQkZCNjY6OjpGRkI6Ni4iEfn6Di5GSkZCOjo2LiouKiIWCgH9+fYCEh4mLjI6Ojo2Nh4F+eHVxbW1yc3BwcW9ubWxrbG9ubm5jWWBlZGBaVWCetLm7uri4uLSusKmyurisf1FMTVJSUlBPUVBQTk1NTkxOUVVZXmNobG5ycXBydnh/hoeFeoqRko+Jf3l/hYN6eHt7e3x9fX+AgoOFhoeGhYSAfXt6d3NvbWpoZ2dnaGtweoOIioiIiIeJj5STkJCQj4+Pjo2NjpKVlZKQjo+Ok5ucmpGNi4uLi4uMhn99jI2NjIpZWVlZWVhXVVNSUE5MS0lGRkQ/PT06ODc2NDMzMjAwMC8uLS0tLCwsLCwsLC0tLCwtLSsrLCwrKyoqKioqKigoKiopKSkpKSkpKSgoKCgoKCcmJCYlJSUlJSUlJSQkJCQkJCIjJSUlJSYmJycmJigoKSkpKSoqKissLCwtLS8vMDAwMDAxMjMzMjM0NDQ0NTY2NjY2NjY1NTU3NjY2NjY2NzY2NjY2Nzc2NjY2NTU1NDMzMzMzMzMzMjIyMjExMDAvLy4uLy4uLi0tLS0tLSsrLCsrKCcnJ0JrYlRSV19oYzgdISMkJCQoKSo2RlFUWGxpWVBUWGhzQSkzRk9KPC8lISEgICEhIiUmJyYkKCYoKy8sKCcmKCYkJCEqTHJubWhobG1ubXByW0toZmBcWllRWUwqLjE2OTk3ODg6NzU3ODYzMjhES01LS01NSEVCPjo4ODo+QUVMTlFUV1hWVlhaXF1cWFBNSkxKRkVHREVFREFGTVdgYWJlaGlpa2ZaXWdoanB9jpCRkI+JiYmJjIyKiIqLhXdkX2Zwen+NkZOSjY2MjIuNjo6LiYWCf399hIqSlJKPjYyMjI2NjIuKiISBg4KEiIqMjY6Pjo+NioR7dm9nYVxfY2hrbHBxcm9vbmxsbm1sVUBNWF9bSEBZjLC2ubavtberr7GttraqgE5PUU9RUVNSUlNRUE5OTE9PTk5TVVhcYmZpbW9xdHyFjpaVkoeSmJqQiIR/f4OBdnZ5enp6ent+gIGCg4aHhYSDgoB/fnp1cW9sa2ppaGpsc3yFiIqGhomKjI+TkpCQkI+Pj46NjY+SlZWSj4+Pk5menJaOioqKi4uLioR9fIyLjYuJWVlZWVlYV1VTUlBOTEtJRkZEQT88PDg3NjQzMzIwMDAuLS0tLSwrKysrKioqKisrLCwrKyoqKSkpKSkpKSkoKCkpKSkoKCkoKCgnJycnJiYmJiYlJSUlJSUlJSUkJCQkJCQjJCUlJSUmJicnJycoKCkpKSkqKiorLCwuLi0vLzAwMDAwMTIyMjMzNDU0NDU2NjY2NjY2NTU2NjY2NjY2NjY1NjY2Njc3NjY2NjU1NTQzMzMzMzMzMzIyMjIxMTAwLy8uLi4uLi4tLS0tLCwrKywrKysoJSMpSG1hWVdXX2dnQx8hJCUmJSUkJy87SlBcdGVXVVdfcmoyLCwoKSUjICEhICAhISMkJykuLywsKCYrKSgnJSQiIiQlV3Rtb2xsbm9rbXJyRj5obGVcWFpQWFcwKzE1OTo8PDs+OzU1NDYzLjM5RElISEZGRURCQT46ODg6PD9ER0xPU1hZVlZYWltcWFZQSktLSEdGRkZHR0dGQ0lQWF1gZGdpampjWFtjaW53iZCRj42Mi4mJi4yNi4eIi4V5ZF9mdH+HkpKRjouLiomJhoiKiomEgH18f4aNlJSQjYyLi4uMjIqLiYmIh4iIiImNjo6Oj4+NjIeCfXVoWExJT1JUXGBiY2ZtcG9vbm5qZU49Ul9eVj4zTnCltLavi5iwl6aysLGgmG9NT1RdV1NUWFdVUlFRUE9PT09PUFFVWFtgaHF9iI+Tmp2hop6ZmZeVjoqFgYGBf3d1eXp6enp7fH5/gIGFhYOCg4KBfn59eHZ0cG5raWhpbHSAh4qIhYWGiY+UlZKQkJCPj4+OjY2Pk5WUkY+OkJWen5qRjY2JioyNjIiCd32LjoyKiFdXWFhXV1VUVFNQTk1LSEVFQT89PDs5ODUzMjIyMC8vLSwtLS0sKyorKysrKysrKyoqKiopKSkpKSopKSkpKSkoKCgoJycnKCgoJycnJiYmJSUlJSQkJCQkJCUlJCQkJCQkJSUlJSUlJiYnJygoKCgoKCkpKSorKywsLC0tLy8vLy8wMDEyMjI0NDQ1NTU2NjY2NjY2NjY2NjU1NTU1NTU1NjU2NjU1NjY2NjY2NjQzMzMzMzMzMjIyMS8xMTEvLzAwLi4uLi4uLCwsLCsrLCwrLCosLCglJSpLbWJYVlddZGlLIyMkJCQkIiEgJjI/Rmt3Y1hXVWV2UCMnJyUjIiEgISEhICEjIyUuOUA8Oi8oKyspJiUjIiMhPXNwa2xvbm1wb3NrOitga2lkXFtVS1tBKS80OTo6PUBAPTg2NTQyLTE0OUBEREE9P0FCQUI/PDo5ODs9QkVKTFFWVlRUVlhZWlZUT0pLTEtISEhISktKSERESU1WXmNlZWZoZVdYZG10gI+RkI6MiomJiouOjomHh4qGfWhfanaBjJKQjoqJh4WDg3+ChYqMh4SBfIKIkJSRjYqJiYiLi4uKjIqJioqOjo6Njo+Pj4+OjImGgXptW05cYVxdXl5aWlhZYGVqbW1tZVdHPUdKS05CP01ela+ylFKHpH2as7eqhXZcTU5SWFFUWWFdVFVWVlRRUFJSUE5PUFJdbn6NnKKjoqCbn6OfmpqYkoyJioiHg354dnh4enp7e3p8fn+BhYSBgYGAgX5/fXt3dXRyb2xsa255gYiLiIaFh4qRlJSQkJCOjo2NjIyOkZWVkZCOkJKanp2Vj4uKiouNjYyGfXJ4ho2LiYZXV1dXVVVUVFJRUE5MSkhFREE/PTw7OTg2NTIyMjAvLy0sLC0tKyorKioqKioqKioqKioqKSkpKSkpKSkpKSkpKCcnJycnJygoKCgoJiYmJiUlJSUkJCQkJCQkJCQkJCQkJCUlJSUlJSYmJycoKCgoKCgpKSkqKyssLCwtLS8vLzExMDAxMjIyNDQ0NTU1NjY2NjY2NjY2NjU1NTU1NTU1NTY1NjY1NTY2NjY2NjY0MzMzMzMzMzIyMjEwMDExLy8vLy4uLi4tLSwsLCwrKysrKysrLCwpJiMoL01tYFZVWF5mbFsmIiQlIyIgHx0hKTNIbHFiV1ZaaHAyJiMkIyEhICEhISAhJCIoLjM3ODIvKystKiclIyIjLWhua2pqbXBsbHRhLjVfa2lnY2BiSltRKys8Pjs6PT9EPjc1NTk4MzAyNTg8QD06Nzo+Pj4/Pj06OTc6PD9ESU1PU1NRUVNVVldUUk5KS0tLS0lHSk1NTElGQUNJT1dcYWNmZmNZWmVweoeOkI6Ni4iIiIqNjoyJiIeJhH1oX2x5hY+Rj4uIhoSBfnx4eX6Eh4eHhYGDiY6RjYuIh4eIiouLi4uLi4yNj4+Pj5CQj5CNi4mHhX53b2RbbW1bUldWWWBcWFhZXmRmZmNcVUY1MUdRT1JaXXqiqo5flIlzn7K1qHZWSUlMT09PU1ZWUk9UVVRVVFJRUVJRTk1hfpalq7CvqqehnZyenp2cnJyYk5KQjYeAeXd4eHp6e3t7e3x9f4KDgICAgIB/fn58enl3dHJvbW5xeoOIiYiGhomNlJWUkJCQjo6NjYyNkJKUlJGNjZKYnJ6ZkYuJiImLjY2JgHZveIiMioiEVlZWVlRUVFJRT05MSkhHRUNBQT48Ojg3NTQzMzIwLy8tLCsrKysqKioqKioqKioqKSkpKSkpKSkoKCgoKCgoKCcnJycnJycnJycnJyYmJiUlJSQkJCMjIyIiJCMkJCQkJCQlJSUlJicnJycnKCgoKCgpKSkqKisrLC0tLi0uMDAwMDIyMjIzNDMzNTU1NjY2NjY2NjY2NjY1NTU1NTU2NjY2NjY2NjY2NjY2NjY2NDQzMzIyMTExMTExMDAwLzAuLy8uLS4uLSwrKysrKyspKSkqLC0tKyklJCctTW9iVVRXXWRsXzQhJCMiIR4eICElKkVwbmBZWWByVSMlIiIiISAgICAgIiQoLS8yNzYxLC0uLywpJSQiIlh2bWdnbGxtdWtPM0NhaGpqaGReTFxbNS46QD9AQEJCPjgzNTpAQjw0Mzc5OTc2NTY3Ojo8Pjw8Ojo3ODs+Q0lPUVFRT05PUVRVU1FMTEtLTExLS01OTk5MR0RBQkZPVFxhY2VjXFtpdoKJi46MioeFhoaIiomGiIiIiIR+amJwe4ePj4uIhIKAfHdxb3N5fICDhoeEh4mNjYyLiIeIh4iKioqKiouNjY+QkpKQkI+PjIiIhYKAeHNzc3JxaWdqaGlpY1dQUVdbWlZUVVVPQ0NUU1ZZXWdldKSdgJmJhaOvr6Z8V0pISU1MTFJVUU9QUFJVV1dVUVJUT1RmiKayuby6uLCppZ2dm5ueoKChn5yZmZWQh3t2e3p6ent7e3p5fH6Bgn19fn5/f399fXx8eXdycXBwdX2EiomFg4eKjpWUko+Pj42NjY2NjpCSk5CPjpGWmpuYk42JioiKjI2MhntybneFiYqIhVVVVFRTU1NQUE5MS0lHRURCQUA9PDs3NTc0MzMxLy8vLSwrKysrKioqKioqKioqKikpKSkpKSkpKCgoKCgoKCgnJycnJycnJycnJiYlJSUlJSUkJCQjIyMiIiMjJCQkJCQkJSUlJSYnJycnJygoKCgoKSkqKisrKywtLi4uLjAwMDAyMjIyMzQ0NDQ1NjY2NjY2NjY2NjY2NTU1NTU1NjY2NjY2NjY2NjY2NjY0NDQ0MzMyMjExMTExMTAwLy8vLi8vLi0uLiwsKysrKysrKikoKSsrKyooJigrLi9QbmRYVFdaXmZmQyIfIiAeHh8gIB0hR3dtXlZaZXE6ISMjIiEgICAgICMmLTIxMTEsKywtMTIuKickIzxzampnaWtwdF88O1plZ2pmZ2dhTVZfRjI5RT9EQ0VDPDs3NTY+RkVBOTU1NTY0MzMyNTk5Ozs8PDs6OTk8QUVKUFJUUk1MTU9QUVFNTEtLS0xMTk5PT09PTUdEQUBCR0tSWWFlY1teb3yIi4qMioeFhYaEhYSCgIaGhoeDfGpjcX6Mj42KhoOBfnlwZ2dtc3Z7foKFhYmJjIuLi4iJh4iHh4mJioyNjY2Nj5CQjo6NjYuHhYKAfnZycHBwcXN0cW9jXWFTRUVQV1ROSElOUE1LUVFQVFNmYWCRlHyNpaiprKqfbUxISE1OTU1OUFBTVFRTUlNUUlFRUFVukKq3u72/vLq1raienp+enqCko5+dn6GgmY98dXt7enp7e3l5enl9gYB7e3x9f35+fX19fXt6d3RycniAh4qIg4SJjJGVk5CPj4+NjIyMi4yQkpOQj5CUmJqYlI2LiYmJioyNioR4bm14hoeIiIVUVFJSU1FQT09OTElIRkRDQT8+PDs6ODY2NTMyMTAwLy0sLCsrKyopKioqKikpKSkoKCgoKCgoKCgoKCgoKCgoJycnJycnJiYlJSUlJSUkJCQkJCUkIyMjIyMjIyMjJCQkJCUlJCUlJicnJycnKCkpKSkpKiorKywsLS4tLi8wMTAxMjIzMzQ1NTU0NTU1NTU3NzY2NjY2NjU2NjY1NTY2NjY2NjU1NTU1NTU1NDQ0NDMzMjIxMTExMTAwLy4uLS0vLi0sLS0sKysrKioqKikoKCoqKy0sKScrLC4wL0hrY1ZTVFhdX2ZRLx8hHx4eHx4fISNVemddW15qYCUiIyAiISAhISAjKCosKisrKSwsLTQ2MSwoJTJsbmZmamlqcF08SGdmYWFiY2NjV1JWSTY1PTs9Qz8/PTk3NTMyOkJEQjw1NDMyMzAzMTI1ODk7PT49Ozo8QERKTVBTVlVSUE9OTk1MS0tLTExNTk5QUVBPT01IRkNBQEBDSFJaYWFgZniDiouJiYaEhIKBhIJ8eXuEh4WEgHtqZXOCjo+Mh4OCgH52bGBfZGtvc3d8gYKFh4qJiYqKiYmHhoaIiYmKi4yNioyMjIyKjI2Mh4SBfXx6d3RxcXFwcXFuXDk0ODk8RElOTUtLS01JSkZNUlJQbGxqipiJjKCnqKmokFVGR0hKSklMTE9LS1BPTU1PUFBRT1h3ma24u72+vr6+vLStpJ+gnZ2dn6SgnKCmpZ6XhHZ6fHt6enp6eXh5fH6Ad3d5fX18fX19fX18fHl4dHJ6gomJhoSGiJCWlpOQj4+OjIyMjIyOkZSSkJCVmJuZlo+LiomJiouNi4Z9dW9ueoeIiIeFUlJRUVBPT05NTUtIRkVDQkE/PTw7OTc2NjUzMjEwLy4tLCwsKysqKSoqKiopKSkpKCgoKCgoKCgoKCgoKCgoKCcnJycnJyYmJSUlJSYmJSUkJCQkIyMjIyMjIyMjIyQkJCQlJSQlJSYnJyYmJygpKSkpKiorKyssLC0uLi4vMDEwMTIyMzM0NTU1NTU1NTU1Nzc2NjY2NjY1NjY2NTU2NjY2NjY1NTU1NTU1NTU1NDQzMzIyMTExMTAwMC8uLS0tLi4tLCsrKikpKSkpJycqKSkpKistLCkpLCwtMDEzRWdqXVRSU1leZGJGJB8eHx4hISEiJ2Z4YltdYG5KGx8iIiEgICAhJigqKysqKiotLS4xMjAsLC9jcGplZGhrbl9NYGpoZGFhY2JbX1tKPzQ3ODk5Ozw6OTc1NjUxMDhBQkI9NjMxMC8vMDEyMjM3Ojs9Pj49P0RIS01QUlRTU1FQTk1LS0tLS0xMTlBQUVRTUE9MSUZDQkA+P0BHUVVbYm18hoqKiYeEg4KCgoF9dnF1gYeFhIB7aml2hY+NioOCgH59eG1hXWBlaW1xdn2BhISGiYmHh4iHhoaGhoaGh4mKi4mIhoaHiIiHiYiEfnx7end2dHBxcXBxbk0pNTY4ODxDREpQU09LSEtNVlpaVl5fbISSmJmeqKqnpHdESElJS0pJTExNSkpMS0pMTUxNTVRznK+4vLy+vr6+vry5s62koJ+dmpmYm52epaWhm4t8en17en18enp4eHt9gXZzdXd6e3x9fXx8fHx7eXd0eoKJiYaEhoiQlpOQkY+PjoyMi4uNkJGRkJCTl5ualpCMioiHiYyNjYmCeXFvbnuHiIiHhVFRUFBPT01NTUtIRkVDQkFBPzs7OTg2NjU0MzIwLy8vLSwtKywsKioqKikpKSkoKCgoKCgoKCgoKCgoKCcnJycoKCcnJiYmJiUlJSUlJSQkJCQkJCMjIyMjIyMjIyMkJCQkJSUlJSQlJycnJycoKSkpKioqKyssLC0sLS4vMDExMjMyMjM0NTU1NTU1NTU0NDU1Nzc2NjY2NjY2NjU1NTU1NTU1NTU1NTU1NDQzMzMzMzMxMTExMDAvLy8vLi4uLSwsLCssLCsrKioqKikpKSkoKSktLzAuKyorLzM0NzdCY25eU1FTVV1jalsxHh4gIB8gJCQzbHJiXlthbTAdHyAiISIiJCgqLCosKysrLi8wMTIvLC5gb2doZ2lqcGhkamtoZWBgYWNiXVZIODIwNTc2OD5APDg0MzY0MTA3QUZEQjo0MzAuMDEzNDU0Njc5PD5BQUJFRkhLTk9PUVNSUE5MSklJS0tNTU9QU1NVU1BOTElGRERAQUE+QUVLVGFyhImJiYiGhIGAgIB/em5rdoCIiISAeWpqd4WMi4eCgH99enZrZF9eX2VobXN5gIWGhoiIh4eEhIeFhYWFhYWFh4aDf3x9fn6CgoSGhoF+fXp5d3Z1dXR1dmtSLy46PD5DR0tHR0hPUFFYWFZcYGFlaWRti5eTnKeppqBtQUZKSUxLSklKSUpKSkpKSklLSlNslq63vL2+vr6+vr6+vrm1rqWjoZ2amZmYmJ2jo5+VhHp+fXt7e3t5enh4en5zcHR1d3d8e3x+fn59fXt5dnuDiYmFgoeMkZWUkZCOj4+LioqLjJCSkZGTlpmZlZGNiomIiYqLjYyIf3Vvb257hYiIh4ZPT05OTU1MTExKR0ZEQkBAQD07Ojo3NjY0MzIyMC8vLy0sKyssLCoqKiopKSkpKCgoKCgoKCgoKCgoKCgnJycnKCgnJyYmJiYlJSUlJSUkJCQkJCQjIyMjIyMjIyMjJCQkJCUlJSUlJycnJycnKCkpKSoqKyssLCwsLS4uMDAxMTMyMjIzNDU1NTU1NTU1NTU1NTY2NjY2NjY2NjY1NTU1NTU1NTU1NTU1NTQ0MzMzMzMzMTExMTAwLy4uLi4uLS0sLCwrKysqKikpKSkpKSgoKSkpLS8yMS8tLjE0Nzo9Pj5VamVYU1JWWF9paE4lHiAfICUoKDtxcl1fYWtiIB0eIiEhISQoKiwsLi0tLS4vMDExMCxVcmZjZGhrcG5qaGdlZmRhYWJjZGZZNTEzMzM0NTlBR0M5NDQ1MTEwND5FRkE6NTEvLjAxMzU2Njc3OTw+QkJDRUZKSkxMTE5PUVNPTUxJSUpKTE1QUlRUVVNPTUpIRkRDQUFBQD4/Qk9bcIOKioiFgn9/f4B+enFobHSCh4eGgXltbHiFiYmEgX98e3x2a2JfXFtfYGZtdX6Ih4SGhoeHhISFhIWFhISFhYOAe3ZxcHFvdXx+goWCf358e3x7e3t5eHl7d2dKQEFGUFteWEtNWFxdXlxaYWRlZmtrY3uUi5unp6WZY0NISklKS0pJSEhJSUpKSEhJSU9mjaq3ur6+vb6+vr6+vr6+urarp6Ohm5mZmpaXn6KinI6Ae3t8e3t7enh4eXt9bmxucXR0eHl7fH18fHx7enl7g4qIhIOKjpWVk5CPjo6OiomKi4yQkZKTl5eYlpGMiomHiomKi42KhH11b29ufYaJiYeGTExMS0tLSUlKR0RCQ0FAPj47Ojg3NzU1NDIxMDAwLy4uLiwrLCwqKioqKSkpKSgoKCgoKCgoKCgpKSgoJycnJycnJycmJicmJiYmJSUlJSUkJCQkIyMjIyMjIyMkJCQkJCQlJSUmJycoKCcnKCkqKioqKisrLCwtLS0vLzAwMTI0MzMzMzQ0NTU1NTU2NjU1NTU1NTU1NTU2NjY2NTU1NTU1NTU1NTU0NDQzMzMzMzMyMjExMTAvLy8uLi0tLC0tKiorKyoqKSgoKCcnJycoKCgoKS0xNDQyLzIzNjo8QkVBPklkbVxTUVFVWmZtYTkfHCIlJywsSHRqY2BgcEYeHiEgIiElJistLzIwLi4wMDAyMjFMcmhiY2VqcHBpZ2RkZGRkY2VmZGpiRTEyNTUzNDg6RFhdOTMzMzIxMDM6RUtGOzUzLiwvMTM1Njc4Nzk7PkJDREZGSUdKSktMTk9SUlJOS0lISEpKTU9TVFVSTUtJR0RDQkBAQEFAQD9GU2l6hIeFgn9+fX9/fHVqY2l2g4qIhoJ5b215hYiGgn9+fHx6dWZlZmVkXl5haXSAiIeFhYWGhoSEhISEhYOFg4KAenZtYmFlZXN7fH2BgoB/fH1/f4CBgYKAfn55cGhkZWhpaWRXW2BhYGBiY2ZnamtvaGJsi5afp6mkj1NDRktLSUpJSEZHR0dISkdHSEldhKOyuby9vr6+vr6+vr6+vr24s62ln5uamJaVkZOXmZmUhXp5enp7enl4eHl5fnBqbGxxcnR2eXx+fHp8fHx6fYOIh4SEio+WlJCPjY2OjYqJiouOkpKUmJqZmJOMi4qJiImMi4uLh4F8dG5vbnyIiYmIh0tLS0lKSkhIR0hGREJBPz08Ojo4Nzc2NjMyMTAwMDAuLS0sKywsKioqKikpKSkoKCgoKCgoKCgoKSkoKCcnJycnJycnJiYnJiYmJiUlJSUlJCQjIyMjIyMjIyMjJCQkJCQkJSUlJicnKCgpKSkpKioqKisrLCwsLS0tLzAwMTEyNDMzMzM0NDU1NTU1NjY1NTU1NTU1NTU1NjY2NjU1NTU1NTU1NTU1NDQ0MzMzMzMzMjIxMTEwLy8vLi0tLSwsKyoqKSkqKikoKCgnJycnJycoKCktMTY3NTI0Ojw+QkZKQkNAP1ZrYldRUFNbX2duXjQcJCssLS5PeGpfX2BsNB8dICIkJiYpLTEyMzIyNDQ0NDFJc21mZmZpbnBoZWRkZGRkZWVnZGRZQzc1MzQ0Mzc7P0NMTjcyMzMyMjEyOENIRj04MzAuLi8wMTU2NjY5OzxAQkRGRkdGR0hISU1QUFFOTEtJSEhISEpOUFNUUE1LSUdEQ0E/QEBDRENBQUhZanR8gIB+fXx+fHduYmJrd4SKiYiEe29teYSHg399enx8eXVsaGpoZWBeXml2hYuKiISEhISEhISEhISGhYOAfXdvZVdOUVhtdnl7fX+Af35/gYOGh4aIiId/fXdxc3NxbmpkV19hYF9fYGVlZ2hsb2djZ3uVnqWlo4dKRUtKSUhGSEdHR0dHR0dJSEZMbpqvuLy/vr6+vr6+vr6+vr69u7SspqGdmZWRkI2JhYSLj4V7eXp5eXp6eXl6e4BxamdnbnFwc3Z4enx6e3t9e36FiIeDhY2SlZKQj42NjYyKiouMkJSXmJqZl5KMiomJiImLi4uLioZ/eXRubm99h4mJiYhJSUlJSEhHRUREQ0JCQD8+PDs5ODg2NjU0MzAwMC8vLS4tLSwsKyopKSkqKikpKCgoKCgoJycpKSkpKSkpKSkpKCgnJycnJiYlJSUlJSUlJSQkJCQkJCQkJCQlJSUlJCQlJSYmJSYnKCkpKiopKSosKyssLC4uLi4vLy8wMTEyMjMzNDQ0NDY0NTY2NjY2NjY2NjY2NjY2NjQ0NTU1NDU1NjQ0NDQ0MzM0MjIyMjIyMjExMDAvLy4uLi0sLCsrKikpKSkpJycmJicnKCgnJiUlJicpKzE2Ojk3Nj4/QkhMTUpJQz88UGJlWlJSVVhcX2luUjEpKSkpKVNzYlpgalsgIiQkJioqKi4wMjQ1NDU3NzU9aWtoaGtrbHFnZGVnaGhjZGVpaF5HQEIzMzIyMjdGREA3MzIxMjExMTE0NjY6QEM8OzYuLi8vMTIzNDU2OTs8PUFDREVGRkdFR0hJTE5OTU1LSUhIR0dJTE5QUk9MSklHRURDQEBAQkRERERFSVNga3R4ent7fHZxaF5ganeEi4qKhn1vbnuDg4N/fHt7e3x7c2tqamhlYmNufo2QioaDgoGBgoODg4KEhYN/f3p0Zl5NQ0RWbXN3enx+fX5/gYKEh4uMjY6Oioh/dHBwbW1jWFxfX19gYWJkZmdlY2tnZGl1j52gpKCCRz9HSUtJRkZGRkZGRkhFR0ZGWoiot7y+vr6+vr6+vr6+vr6+vbmyrKekoJ2YlI+NiYWChomBenl5eHh4eHp6ent/cWdlaGhtb291e3x9fXt7e3p+hIiHg4qSlpWRjo2NjYyMjIuLjpGVmJmal5ONi4qJiYiJiouLi4eBfXlybm1ugIaLjIuLR0dHR0VFRURDQ0FAQD89PDo5ODc3NTU0NDMwMDAvLy0tLS0sLCsqKSkpKiopKSgoKCgoKCgoKSkpKSkpKSkpKSgoJycnJyYmJSUlJSUlJSUkJCQkJCQkJCQkJSUlJSQkJSUmJiUmJygpKSoqKSkqLCssLC0uLi4uLy8wMTExMjIzMzQ0NDQ1NjY2NjY2NjY2NjY2NjY2NDQ0NDU1NTQzMzQ1NDQ0NDMzMzQyMjIyMjIxMDAvLy4uLS0tLCsrKikpKSkoKCcnJiYmJicnJiYlJSYnKCovNzw9Ozg8QkhKTExKSUVEPz1HWGplW1hYWFlbYmhmUioiKCkoWnRkXWJsTB0mJCYqKistMDM3ODo7OTg3ZmpnaWtqb3BoY2ZnZ2doZmdpbFdBP0I3MzUzMzM3Q0tFNzMxLy8vMDEyNDY5OTc5OTk1MS4uLy4vMDI1Nzg5Ozw+QUJDRUVFRUVER0dISElJSEhGRkdHR0pPUVJPTEpIRkVEQ0BAQEBDRUVFRUdIUFtkbXR5e3dxZmJeX2t5houJi4V7b297gIB/fHt7e3t9fXlwb2xqaWZmcYGQkImFgoGAgIGCg4ODhYSCf316dGdaVEtIUGN0dnZ5e31+f4GChIeLjY6OjouJgXdwb25qW19gYWBgY2FjZWZnY15lZmhucYaanZ+df0ZARkdIR0hFRUVFRUZFRURGT3Sesrq9vr6+vr6+vr6+vr6+vr25sqyno5+dmJOKhYSFhouLhHt5eXl5eXl5eXd5fXJnZWdnam5uc3Z5enx7e3t6f4WIh4WNlJWTkI6MjY2MjIyLi46TlpiXlZGNioqKiYmIiYqMjImGf3x4cG1sc4KKjo6OjkVFRUVEREJBQEBBQD48Ozo6ODc2NzQ1NDIyMTAwLy4uLi0sLCwsKyoqKioqKiopKSkpKSkpKSoqKioqKikpKSkoKCcnKCgmJiYmJSUmJiUlJSUkJCUlJSUlJSUlJSUlJSYmJycnJygpKSkqKioqKiwsLCssLi8uLy8xMTExMTEyMzM0NDM0NDQ1NTU1NTU1NTY2NTU1NTQzNDU1NTUzMzQ0NDMzMzMzMzIzMzMxMTExMTEvLy4uLi4tLCsrKiopKCkoKCcnJyYlJyUmJiYmJSUlJSYqMTk/QkI9PUZLS0xKSkhFQj8/QTtJYGpkWVlZV1ldYGtnQSYmJihidmRiZGo6HyEoKyosLS0xNDU2ODg/amtnaWlnbHRrZGZnaGhpaWxsX0g6QkU+MzE1MzAxNkFbUjUyMC8uLjAxMzQ4PDo5NjY2NDItLC0tLS8wNDc5ODs9PT9BQUJCQ0NEQ0NDQ0NDQ0RFREVGRkdHSktOUUxJR0ZFRUNBQD9AQ0RHR0ZGSUdNVl9nb3NxZ1NYX2Jue4iKiYmEfHFwe35/fHt5eHl5fX1/dG9ubmtpbHaFkpCHg39+gIGAgYKDg4KCgYB+eXNoYVtXUVFaaHN1d3h6fX+AgoSHio2Pjo6NiYF3cGxqYl1gYWJiYmFjZGZnZF5ZZGZlbXJ6kZqemnhAQkZFREhHR0VDREZERENFSmSSrLi6vb6+vr6+vr6+vr6+vr28trKsp6Kdm5aPh4SCgYOFiYd9e3t6enl4eHd2d31zZGRnZWZrbG9zd3h7e3t7eoGHiIaIj5SUko+PjY2Ni4uLi42QlJaXlJONiYmIiIaHhoqMjIuGgH97eXV0d36Ijo+RkY9CQkJCQkJBQUBAQD88Ozo6OTc2NTU1NDMyMjIxMC8uLi4tKiorKysqKioqKioqKSkpKSkpKSkqKioqKiopKSkpKSkoKCgoJiYmJiUlJiYlJSUlJCQlJSUlJSUlJSUlJSUmJicnJycpKSkpKioqKiosLCwsLC8vLi8vMTExMTExMTM0NDQzNDU1NTU1NTU1NTU2NjU1NTU0NDQ1NTU0MzM0NDQzMzMzMjIyMjMzMjExMTEwLy4uLS4tLCwrKiopKCgoKCgnJiYlJSUkJSUlJSUlJicoKy86QkdIQz1GTk9QTkpKRUI/PTw6NjlNaGldWFZUVVldY2lWMiEkLGB2Y2NiZzEiKiwwMzIxMzc4PDg9aXFqaGpoaW9sZmdqamdqbm5bQjk6P0RJOzM0NDIwMTY/UEkzMC8vLy8yNzY3Njk8PDk4NTMvKyssLC0tLzE1OTo7PT0+QEBAQD4/QUA/Pz0+PkA/QUFDREREREVISkpJSEZERUVDQUA/QENERUZHRkhHR0pPWGBmY1ZJT15lbnyJiouKhXxwcXp9fn15eXp6enx/gHd0cW9ubG55iJKNhoF/fn5/gIGDhIOCgX+Afnt4cmllYVtXV11pc3V3d3p9f4GEhYiMjo6OjYmCeHBnY2BgYWJjY2NjZGZmZmFdXWhoaGtydYCVnpt1PEJFRklHRkdEQ0RFQ0NCRVeDpbS7vb2+vr6+vr6+vr6+vr6+urayrqmimZaRjYiEgn59e36Ffnt7enp7enh3dnd9d2dlZmdlamxvcHN1eXt7fXyBh4eFipKUlJKPj42NjYuLi4uPkpSWlpGMiYmJiYiGh4eKjIuJg4GBf3+Ag4eJjJCQkZORQEBBQUBAPz89Pj48Ojo5OTg3NDQzNDMzMjIxMTAvLi4rKywrLCsrKSkpKioqKioqKysqKioqKysrKysrKioqKioqKCcoKCcmJiYmJiYmJiYmJiUlJSYmJiUlJSUlJSYmJiYmJicnJykqKioqKiorKywtLS0uLy8vMDAxMTIwMjIyNDQ0NTU2NjY2NjY1NTU1NTU1NTU1NTU0NTU0MzMzMzMzMzMzMzIyMjEyMjExMTAwMC4uLS0tLSwrKiopKSkoKCgnJiYlJSUmJSQkJCQkJSQmJiouOEVMUElER1JUVlJNSURBPjw8OTkyLjhWZWJXVVNWWFxeZ2dLKx8nY3JhZWhdJyosMjc9Q0tMSUBJanNtam1paXBuZmhpaWtuZ1pMOzk6PT9AOzY0MjIwMDQ2Nzs3MS8xMS8wMzc6OTc6QEE9OjUzLysrLC0tLS0vMjY2OTs7PD89Ozs6Oz0+PDs7PT4+Pz9AQUNDQkFERkZHR0ZEQ0JCQD9AP0BCQ0NEREVFRUZFR0pRVVFKRUdXZnN+iIiIh4N5bXB3e317enl5eXp8gIR+d3Fxb29yfYuTjIWAent6fn+Bg4WDgn58fX19fHVxbWlkYWBjYmlzdnd3e3x/g4SGiIuOjo6KgnlwZWJiY2RjY2NjY2NmZGNjXV5pamptcnN0jJuYcj5BRURFQ0NFRERERURCREttma62ur2+vr6+vr6+vr6+vr6+vrq4ta6roJWRkI6MioWDfnp5fn57enp6eXh4d3Z1fHpoZWhnZGVqbm5xdHZ5fH18gYiGho6SkZOQjo+NjIyLi4yMj5OWlJGMiIuLjI2Ni4eIiouJhYSGhoeJi42PkJGQkZSTk0BAQEA/Pz8/PDw7Ojk5ODg3NjY2NTMzMzIyMTEwLy4uLCsrKysrKikpKSoqKioqKisrKioqKisrKysrKyoqKiopKSooKCgnJiYmJiYmJiYmJiYmJiYmJiYlJSUlJiYnJycnJycnKCkqKSkrKysrLCwsLS0uLi8vMDAwMTExMTIyMjM0NDU1NjY2NjY2NTU1NTU1NTU1NTU1MzQ1NDMzMzMzMzMzMzMyMjEyMjIxMTEwMC8uLS0sLSwrKyopKSgoKCgnJiYmJSQkJiYkJCUmJCMkJCYpLThFT1RSTUtTWFZTT0tHQz87OjczMi8uLD1YZ2FZVFNWWFtgZ2JCJiReb2FlZVY6ODU9QElMUVhjcnJsbWxqa3BwamlrbG9qU0VGR0hDQUJBPjg0NDIwLy8zNjc2My4tLjExMTQ5PTs3O0JEQD03MS8rLCwtLS0tLzE0Njc4Ojs9Ojg4OTw8PDs7Ozo6Oj09PT4/QUJDQ0RERURDQUBAQEFBPz9AQEFBQkJCQkRDRERDREVGREVFU2h1g4eGh4WAdG1xeHh6enp5eXl6e3yJjHh1cnFxd3+MkouFgHt6eXt+f4KEg4J+eXd4enl6d3hwbmxtbWxobXR3d3h7fYKFhoaHiIuKh391bmpmYmZlZGRjY2NjY2RiYF9mbG9sanB4eYGOk29DQkdERURBQ0REREVEQkNXhaazt7y+vr6+vr6+vr6+vr6+vr29ubiyq6CZlZaVlJGOioV+dnV5eXl6enl4d3d1dnl6Z2VlZGVmaWtsbnJ2eX19fISIhoiQk5KRkY+PjYyMi4uMjJGSkY+MiIiKjZGWlpKOi4qLioiMj5CSkpKRkJKRk5GRkpI/Pz8/Pj49PT47Ozs5Nzg4NzY3NjQzMzIxMTAwLi0uLisrKysqKysrKioqKioqKiorKyoqKiosLCwsLCwsLCsqKiwrKCoqKCgmJicnJycnJycnJycnJygoJycmJSYnJycoKCkpKSkpKioqKywsLC4uLi4uLi8wLzAwMDEwMDIyMjIzNDQ1NTU1NjY2NjU1NjY1NTY2NTU0NDQ0NDQzMzMzMzMyMTIyMjIxMTAxMDAwLy4uLS0sLCsrKyopKSgoKCcnJyYmJiUkJCQmJCMjIyMjJCMkJis2QUxWWlZRU1hZWFROS0hEPzw4MzEwLi8sLERhaF5WVFRUWF9jaGNFLF5pXWNoUCs3PEVUXWRqb3NqamxtbXBwbGxtbWdQPEJNUU9ISUxJQTo1NDMyLi0wNTU1NDAvLCsyNTMzODk5ODlARENCPDUxLS0tLCwuLy8xMzQ0Njg4OTg3Nzc7Ojo5ODk4OTo6OTs9PD1AQUJEQUJCQkA/QEA+Pj8/Pz9AQEFBQUFBQkJCQ0NDQkJCRVRpdoGAgYKCe29pb3Z2d3h4eHl6dXV2h5KAeXZ0cniCjJCKg397eHh4fH+ChIWDf3hwcHR3dXd2dXNyc3V0cWxrdHd4eHt/hYaFhoeIiIV9dXNwa2ZjZWZmZmRjY2JjYFtdY2drcW5vcnV7iYhwRkNDRUVFQkFCQ0RFRkNKapestbu8vr++vr6+vr6+vr6+vr6+vr27ubOoo6KgoKGclpOMf3Z1d3h5enp5d3d3dnh6fWhlZWNmZGdoa25ydnl9e32FhoaJkJSTkpCOj42MjIuLi42SkY6MioiIi5CWm5qXlZGPjpCRk5WWlJOTkpKSkZGSkZKPPDw8PDw8Ozs8OTg4ODc1NTY1NjUzMjIxMTEwMC4tLS0rKysrKioqKioqKioqKioqKysqKiorLCwsLCwsLCwsLCsqKikoKCgoJycnJycnJycnJycnJycoKCcnJycnJycnKCgpKSkpKSorKyssLCwuLi4vLi4vMDAwMDAxMDAyMjIyMzQ0NTU1NTY2NjY1NTY2NTU2NjU1NDQ0NDQ0MzMzMzMzMjEyMjExMTEwMDAwMC8uLS0sLCsrKioqKSgoJycnJycmJSUlJCQkJCQkIyMjIyMkJCUpMDpGUVlYUVFYWVhYU09MSEQ/Ozc1Mi8uLS8qMUhlaVlTU1ZYWVxkaWJWanFjZGJKOEtfZWdnbnRsaGpsbXBwa21sXT0tNUlbXVRPTUVHRz03NDIzMC8sMDo9NjIxLi0tMDM2Njg6Ojg5PkFFQkA5My8tLSwsLS4wMjIyNDU1NTY3Nzc4OTg5Ojk4ODg4ODg4OTs7PT9AQUJCQkI/Pj8/Pj4+Pj4+P0BAQUFBPz8/QEFBQkBCQUpba3l7e3x9eXJraXB0dHZ3d3d5eHJnbICTj3p4dnN5goyOiIN/fHl5eXx/g4WGhH94b2ltbW9wc3Z2dXV3dnV0cG1yd3p7f4SFhYaGh4eEf3l0cG5pamdmZmVjY2NjYV1aXWNnbXV1dW9tcIaIcExERERFREFDQ0NEREVGVoCjsri7vb6+vr6+vr6+vr6+vr6+vr6+vry7uLa1saqmo5uUjoN6dXd4eXp6eXd3d3d3en1oZWRjZGVnaGltcXR6fHt9hIWGiZOUk5KPjo6NjIyLi4uNkI+NioqIiIuQmJ2cmZiWlZaWlpeXl5WUk5OTk5KSkpGQjDw8Ozs7Ozo6OTk4ODc2Nzc2NjU1MjExMTAwLi4tLCsrKioqKioqKioqKioqKiorKyoqKystLSwsLS0tLS0tLCwsKyoqKiopKSgoKCcnJygoKCgoKCgoKCgoKCcnKCgoKCkpKSkpKSorLCwrLC0tLS0uLi8vLy8wMDAxMTEwMjIyMjM0NDQ0NTU1NjY2NTU1NTU1NTU1NTQ0NDQ0NDMzMzMxMTExMDAwMDAwMC8vLy8uLS0sLSwrKyoqKikpKCgnJycmJiUkIyQkIyMiIyIiIiIjIyMkJi02Q01TVFBOVVpbW1lUTUlHQj88NzMyLyssLCwrM1VpX1pXV1dZWVpianF1dHBvbmxpZ2VibHJqaGdqbnFybmpcPiIpM0ddX1pSTUI4RUU7NTIyMC8uLzdITDwzMS8vLi4zNzg5Ozg2NzxCRkNBPDcxLy0sLC0vMTMyNDQzNTU1NTY2NjY2ODc3Nzc5OTg4Nzc4ODs9Pj9AQD8/Pz4/Pj08PT09PT4/QEFBQUBAPj4+QEA/QklXY3J6d3Z6eXFqXmJscXN1dXZ3d3dxY1dujZiCfXl4e4SMi4aCf316ent8gISFiIeDfHNiX2RnaGxucHN1eHh2dHN0dHR1en6DhIWFhYeHh4N7d3h1c29pZ2ZlZGNiYl9eWl5mbXR3dnVwbGl2hnBRR0ZGRkRDQkNERUVBSmSSqrS5vb29vr6+vr6+vr6+vr6+vr6+vr6+vr6+vruwq6adjoSBenV3eXp5eXl3d3d2d3p9bGNjZGRkZmhqbXJze3p8foWGhouTlpKRj46NjYyLi4uNj5GOjYuKiouOlJecmpqamJqZmZeYl5aVlJOTlJWVkpONjYc6Ojo6Ozs6Ojk5Nzc2NjY2NTU0NDMxMTEwLy4uLSwrKywsKioqKioqKioqKioqKysqKisrLS0tLS4uLi4uLiwsKysrKysrKSkpKCgoKCgpKSkpKSkpKSkpKSkpKSgoKCgpKSkpKSkqKywsLCwtLS0tLS0vLy8vMDAwMTExMDIyMjIzNDQ0NDU1NTY2NjU1NTU1NTU1NTU1NDQ0NDQzMzMzMTExMTAwMDAwLy8vLy4uLi4tLCsrKyoqKikpKCgnJycmJiUlJCQjIyMjIiIhISIiIiIhIyQpMz5HTElGSU9ZXF5dWFFOTEdDPzo3NC8rKikrKCorPFllX1VaVVZXWmFlZmpqamdlZmJganNwaWhrbnR3b1w4Jy02L0lmZ2BdV083NkpDODUxLy8vLi4yOjk0MjEuMDExMTU2Nzs4NTc9QkVFQz04Mi4rLCwtLzAyNDU0MzQ0NDQ0NTU1NDU2Njc3OTk4ODc3Nzc4ODs8PT0/Pz49PT08PD09PT0+P0FBQUE/Pz4/Pj4/QUlUX213dnR2dXBlWE9VYWZrb3F0dXl3bls7Mm2Wi399e36EjIuGgn99enp8f4KGh4iHhoJ4aVlZXWBkZmdscnZ3d3Z2dXV0d3p8f4KDg4SFhYaDfnp5enVyb21nZGRjYl9fXl1hanN5d3Z1cG1rb4F+WURHRkVCQkJDREVFQU5zm6y2uby9vr6+vr6+vr6+vr6+vr6+vr6+vb6+vr69taygkHhucHN1d3d5eXl5d3d3dnd6fWtjY2JkZGZoam1xdHp8fH6EhYePk5OSkY+OjY2Mi4uLjpGQjYuKi46Sk5WWmpqbmZqampmZmJeWlZWTk5KRkY6KhYB7OTk6Ojo5Ojo4ODg4NjY2NjQ0NDQyMDExLy4uLS0sKysqKioqKSkpKioqKysrLCwrKyssLC0tLi4uLi4uLi4tLCssKyorKykpKiopKSkpKSgpJygoKCgoKCoqKSkpKSgoKCgpKisrKyssLC0tLi4tLS4uLy8wMDAwMDAxMTAxMjIyMjMzMzM0NTU1NjY2NjU1NTU0NDU1MzMzNDQ0MjIyMjExMTEwLi8vMDAvLy0tLi4uLSwrKyoqKSkpKCgnJyYmJiUlJCMiIyMiIiIiISEhISEhIiIjJzA5Q0VBP0JNV1pfX15XVVBLR0M/OTAoJygnJiYmJyMqQ1tfWVdTUlVXWVxgYmNjZGNjbHdxaWdscHR5aD8hIygoOU5laWRjY1tMNDJBOTQyMC8vLiwtLzEvMDExLzE1NDEyNTc5ODg4PUVHRkRAOzUwLCsrLi4vMTM0NDQzMzMzMzM0NDQ1NjY3NzY2Nzc1NTU1Nzc4ODo7Pj49PDw8PDw8PT08P0BAQEFBQEA+PD09QUVTX2lzdnJycWxkVUI+RlBYXGJnbXN0dGhZVkxmjpCGgH+Ch4yKhoJ/fn59f4GEh4iJh4mIf3FfUVNVWl1gZmpydHR1dXd2dnl5en2BgYKEhISEg4N+fHx6dXVwa2hmZGFfXVtcZWlwc3Vzc25qaWdyfGNHRkZGREJDQ0RDREJSfqCttrq9vb6/vr6+vr6+vr6+vr6+vr6+vb2+vr6+vbWljnNjZGVpbnN4eXp6eXh3dnd3eX5uY2JiZGZlZ2psb3V7fH1/goWIj5WUk5CPjo2NjIuJiY2OjYuKi46SlZeZmZqcm5qamZqamJiWlpSSko+MiIWAeXVtZDk5Ojo5OTk5ODg4ODY1NTUzMjIyMjAwMC4uLi0tLCsrKSkrKyoqKSorKysrKywsKywsLCwtLS0uLi4uLi4uLiwtLSwrLCwrKisrKioqKSkpKigqKikpKSkqKikpKiopKSkpKisrKysrLCwtLS4uLS0uLi8vMDAwMDAwMTExMjMzMjIyMjMzMzQ1NTQ0NDQ1NTU1NDQ0NDMzMzQ0NDIyMjIxMTExMC4vLy4uLi4tLS0tKysrKyoqKSkpKCgnJyYmJiUlJCQjIyIiISEhISEhISEhISIiIyctOEJHRD5CSFBXXWBfXlxaVE5LRT8uJyYmJSgoKCcmJCQoQF1iVE9UV1daXl9hY2VkbHVzcGtvcnZ4ZTslJigmJz1daWllY19VSSwrODYzMTAvLi0qKywuLzAwMDAyNjcyMjM2Ojo4OT5CREVFQTw2MSwrKy4uLjAxMzMzMzMyMjIyNDQ0NDQ0NTY0NjY2NTU1NTU2Nzc6Ozw9PTk6Ojs7Ozw9PD9AP0A/P0NAPj09P0dSWmdydHF0cmtjVT4wMjk/RElRWmBmbW5oX2VocoKRi4SCgoqOioaEgoCAf4GEh4iIioiIioV6bVZNT1BUV11ka3Bxc3R0dnd4eXp8fX1+gICChISEgn99fHl0dG5qZ2NgXl5cYWpwcHBxcXFtaWhmaXJvUExKSkVCQkJCQUJFVYWjsLe7vb2+v76+vr6+vr6+vr6+vr6+vby8vL69vLmpiGhZX2RlaGhrcXh5eXl5d3Z2dnl+c2ZjY2dpaWpsbnF2fH1+gIKFiY6SkZKPjo2NjYyLiYmNjouKio6RlJiZm5ubmZmYmJaXl5eXlpWTj4mDfnp0bGRZUVA4ODk5OTk3Nzg4ODc1NTU1MzIyMjIwLy4uLi4tLSwrKysrKysqKiorKysrKyssLS0tLS4uLi4uLi4uLi4uLi0tLi4tKywsLCsrKysqKSkqKioqKSkqKioqKykqKiorKigqKyssKysrKywsLS0uLi0tLi4vLzAwMDAvMTExMTIyMjIyMzMyMjMzMzM0NTQ0NTU1NTMzNDQzMzQ1MzIyMjIyMDAxMS8uLy4vLi4uLi0sLCwrKyoqKSkoKCgoJiYmJSUmJSQjIyIiIiEhISEhISEhISAhIiMmKzRBRkZER0lPVVpfYmNhX1xXU00+LikpJSQkJCYoKigoKCQqR11dVVldYGFjY2hobXNwbGttcXN3a040LCsmJypDXmliV1JZU0otKDc2MDAwLy0tKiwwLzExMTIxMzg5NzU3Ojw+PDs7QENFRUI/OzUwLCssLC0uMDExMjMzMjIwMDIyMzM0NDQ0NDQ0NDU1NDIzNDY3OTs8Ozk3ODg4ODo7PD49PT8/QkJCQT88PkNQW2ZxdXNzbmdfUkAyLy8wMzY5QEZPV19iYFteVl10jY6GhISHi4mFhYSEhISEhoeIiImIiIiKhnlsVkpISkxSW2dubm9wcnR3eXh4e31+fn5/f4CBg4KDgH57eHZybmpkYF5bXWVoam1wcW9ubGlnZGRma1dUUElDQkFCQkJBRViHpLC2ury8vr6+vr6+vr6+vr6+vr69vLu6ur29u7ethVxQV11gZGdoaWpyd3h4eHZ2d3h8gHlxcHJzc3NzdHR3fX9+f4GChoqNkZKRjo2NjIyLioqLj42Ki42Qk5eYmJqZmpmYlZSSkZGQkI6MiIB3cGdgWE5HREhOODg4ODg4Nzc4ODc1NTU1NTMyMjIyMC8uLi4uLS0sKysrKysrKioqKysrKysrLC0tLS0uLi4uLi4vLy8vLy8uLi4uLS4sLCwsLCsrKyoqKysrKyoqKysqKissKioqKysrKisrLCsrKyssLC0tLi4tLS4uLy8wMDAwMDAxMTEyMjIyMjMzMjIzMzMzMzM0NDMzMzM1NTQ0MzMzMzAwMDIyMjAwMDAuLi8uLi4uLS0tLCsrKyoqKSkoJykmJyYmJSUlJCQjIyIiISEgICAgICAgISEgICEjJis0P0hKSktOUFNaX2VlZmZiXlhNNCkrKCYkJScmJistLi4rJiUqOktXZ2xqa21ua3VybW1vc3V3bFNJNTI8PTEyTGNkWlNMTU1HMCU2NS8wMC4tLS0vMjAxMjEyMzY5PTs5ODg7PD09PkA/QEJAPz05Mi4sLCwtLjAxMTIzMzIyMTAxMTMzNDQ0NDMzMzM0NDQyMzM1Njg6Ozk4OTg4ODg3OTo7Ozs8PUBBQkE/PUBOWWNvcHFzb2hcTjwuLSwtLzAwMDQ3OkNJTlBXWVJaaX+LhoWFh4iGhYODgoKDg4aHioqKiYiHiYqHfm9bSERFSFFjaWtrbXByeHl3d3l7e3t8fX1+foGCg4J/fXt5dXJuamVbUFRcZWZnbm9ubmxpZ2RkYmBYUlBGREJCQUFBQkRYiKWxt7m8vr2+vr6+vr6+vr6+vr6+vLq4t7u7vbmxlVxFUFlcXmJmZ2lobHR4eXl6enx/goWCf4GCgoKAfn5+foGBgIGCgoaMjpGQj42NjYyMi4qKjY+NjIyQkpaXl5iYmZmXlZOQjIqIhoR/eXNnX1ZORUVGSkxQUzg4Nzc3Nzc3NzY1NTU1NTUzMjIyMjAwLy8vLi0tLCwsLCwrKysrKiwsLCwsLCwuLi0tLy8uLi4uMDAvLy8vLi4uLi4uLS0uLiwsLCwrKysqKysrKyoqKiosLCsrKyssLCoqLCwsLCstLCwtLS4uLS0uLi8vMDAwMDAwMDExMTEyMjIyMjIyMzQzMzMzMzMzMzMzMzMzMzMzMzIwLjAxMTEwMDAvLi4uLi4uLS0sLCsrKyoqKSkoJiYnJyYmJSUkJCQjIyIiISEhICAhISAgISEeICAhIiUrMz1FSUxPUVFUW2Bma2pmZGNbSDEsLywoKSkpJykqLCwtLy4wMTEyOEFRWGBjZnJyb29ydHV0ZVFQTzs7SE9KT1tgWFVSS0tPRjEkMzUwMC8tLi0xNjg1NTMyNDQ2OT8+PTs7PEBAQkE+PD9CQEA9OzQvLS0tLS8xMTIyMjIyMjIyMjIyMjQ0MzIxMTIyMzMyMTIxMTU2Nzc1Njc3Nzc3ODg4ODk5Ojo8PT9APUBIV2FucXFyb2dcUD4wLi0sLS0vLzAxMTI0ODxCSElLUFhqfnx5fH5/gH9/gICChoaHiYmKi4mHhomLjImBc1xIQkNKW2NmZmhtcnl5d3d5enp6enp7fH5+foGBf397end1c29sZV9haGRfZG1vb25saGZiYWFfW05OSEZDQkJCQj5EWYmmsLe5u729vr6+vr6+vr6+vr6+vLu5trW3uru5rYJGRU9WXF5gZGRnaWlvd3t7fH+BhYeHioqLi4qKiYeGhISGhoWEg4OHjI6RkI+OjIyMjIqJi42PjY2PkZSVl5aVlpeXlpSOiYV9eHVxbmNWTEZCQUBDSE1NUFQ3Nzc3Nzc2ODc2NTU1NTU1MzIyMjIwMC8vLy4tLS0sLCwsKysqKSosKyssLC0tLi4uLi0tLi4vLzAwLy8vLy4uLS0tLS4uLi4tLS0tLCsrKywsKiorKysrLCwrKysrLCwsLCwsLCwrLS0sLS0uLi0tLi4vLzAwMDAwMDAxMTEwMTIyMjIyMjMzMzMzMzMzMzMyMjMzMzMzMzMzMjEwMDExLy8uLi4uLi4tLS0tKysrKykpKSkoJycmJyYmJSUkJCQjIyIiISEgICAgISEgICEhHiAgISMoLjY+RUlLUFNUV19kam5saWViVj4uLSwqKiotLSgqKiwsLCoqLS4wMTEwLi4oKGRybGxraGltYElMTlBEQ05SUVleWlldW1VVVFI8Jy82ODMwLi0tMTc9PDo2MzMzNTtAQUFDQT9AQkJBPDo8Pj09PDo1MS4tLS0vMTExMTIyMjIyMjIyMjIzMzExMTExMTMzMjEvLzExMjQ0MzM0NTU1NTY2Nzc5OTo6PD0+Pz5GUF1rcm5vbGZcTj0wLiwsLCwtLy8vLzAwMTAxMzU5Oz5BS2BmYGRoa3Bxc3Z6fYOFhYeJiYuJiYaEh4qMjIR2Y0c/SFdjZmRla3B6eXZ3eXp7eXh4eHp7fH1+fXyAf3x6dnNyb29wbGtua2tvb29samhmYmFiYFxLTE9HQ0JCQkJBQlaEo662uby9vr6+vr6+vr6+vr6+vry6uLOvtbu7t6dwSExRWVxeYmRnampqbXN7f4GEh4uNjY+Pj4+Ojo2LiIeHh4eGhoWEiIyOkI6OjoyMjIyKiYuNj42Nj5GTlJOVk5OUk46Mhn91bGRgWk9FQDw9PkFAQ0hMTk9SNzc3Nzc3Nzc2NjU1NDQzMzMyMjIyMDEwMDAvLi4uLSwtLS0tLS0uLi4uLi4uLi4uLi4xMTExMDAwMDAwMDAwMC0tLi4tLjAuLi4tLS4uLS0tLSwsLCwsLCwsLS0sLCwsLCwsLC0tLC4uLi4uLS4uLjAwMDAwMDAwMC4xMTExMDAyMjIyMTExMTM0NTQzMzIyMjIyMjIyMTExMTExMC4wMC0tLS0tLS0tLCwrLCsrKioqKikpKCgoKCYlJiUlJSQkIyMhICEhICAgICAgICAfHyAgICIkKjA4QEVIS1BTVlpiZmtvbmllXk8wKikpKSoqLTEsLCwsLS0qJSMkJywwMDE2Llp2amprb2xoXFVKSUpJRUtST1hdYWBhYVpYX15aSy8pNEFANS4tMDpBQ0I8NjQ0Njk7P0NERUhEQkFCQzw3ODk5OTo4ODQwLS0sLjAwMTExMTIyMTEyMjIyMjIxMDAwMDAyMjExLy8wMTAwMTEyMjQ0NDQ2NjY2ODk4OTs9PT1ASlZkbmxuamVbTTszLywrLCwtLS4uLy8wMC8vMDAyMjEyMzZARUVJTVNVW2FjaG90eXqAhoWIiYaEhYWHio2Nh3llSUdWZGVhY2lzeXl2dnl5enl3dHF2d3p8fX19fn99fXt5dnNybm5vb25tbG1uamdnZWJhYWJdT0tTUERCRENCQ0RSd5uutrq8vby9vb2+vr6+vr6/v7y7u7WrrbS4t66ab19jZGRkZ2pqa21ubnJ5fYGFh4mNj5CPkJCQkZGOjIuGh4aFhYaEhYmNjYuMjY2Li42Mi4qMjY2OjJCRkZOQkI+NjImFgHZrYVVNRT45ODo7PD5AQERGSUxMTDc3Nzc3Nzc3NjY1NTQ0MzMzMjIyMjAxMDAwLy4uLi4uLS0tLS0tLi4uLiwsLi4uLi4vMTExMTAwMDAwMDAwMDAvLi4uLS4wLi4uLi4uLi0tLS0sLCwsLCwsLC0tLCwsLCwsLS0tLS0tLi4uLi0uLi4wMDAwMDAwMDAuLy8wMC8vMTExMTExMTEyMzMxMzMyMjIyMjIyMjExMTExMTEvMDAuLi4uLS0tLSwsKywrKiopKiopKSgoKCgnJyUlJCQkIyMjISEhISAgICAgICAgHx8gICEkJyw0PUNGR0hLUVVaYWZobGtpZVpCLSgqKysqKigoKysrKywsLCcjIiUlKSwyO1p1bGlramtlW01MRUdFOTVKUFFXYF9bX19aWltfVlM6Ky9ETTkvLzNAREVFQDk5Ojg4PD4/QkRISUQ/Pzo6NzU1NTU4OTk4My4tLC4wMDExMTEyMjExMjIwMDAwMDAwMDAwMDAxMS8vLzEwMDExMTEyMzM0NDQ1NjY4Nzk4OTk6QU5ZaG1tamVcTj41MjAuKywsLS0uLi8vMDAvLzAwMjIxMjIwLzA0NDY4PEBHSE5WXGRpb3V5fYCCgYKDg4SHi4yHfGhTWF9kYmRvd3h3dnZ5eXd2cG5ub3R3ent9fX9+fn59fHp5dnRycXFwbm5tbGpmZGJhYWBhYFZNTVBIQ0NDQ0JES2+XrLa5vL28vLy8vb29vby8u7u4t7Gtpqarr66kl4B4end3dnZ3d3d2eXl9fYCDhYiLj5CRkpGSkpGRjoyJh4aFhISEhISIjIyMjIyMi4uMi4mKjIyNjY6SkY6OjIaFf314bmdaT0U+Ozo3ODc5PD0/QEFERkdKSko3Nzc3Nzc2NjY2NTU0NDMzMzIyMjMxMC8wMC8uLi4tLS0tLi4tLS0tLS0tLy4uLy8wMDAwMDAwMDAwMTExMTAwMDAwMDAwLy8wMC8vLy8uLi0tLS0tLSwsLCwsLC0tLS0uLi4uLi4vLS4uLS0uLi8vMDAvLy8vLy8vLy8vMDAvLzAwMDAxMTIyMjExMjEyMjIyMjExMTAwMDAwMDAwMDAwLy8uLi0tLS0sKysrKiopKSkpKSgnJycnJyYlJCQjIiIhISIiISEgICAgHx8fHyAgICAhIykvNj5FRkZGSU5VWWBlaGppaWdXNy4tLC0pKiopKSgoKCgqKyspKCcnJSYqKElwampmZ2VjUEFLTUlEQkBARk5YYmRcWmJfV1FSXFlPRDozNj0yLi8wOD9FRkI7PkA6ODg5Ojs/SEtGPzo3NTY1NDQ2Nzs7ODUyLy0tLy8wMDExMTEyMjIyLy8vLzAwMDAvLy8vMDAvLy4vMDAxMTExMjIyMjEyMzQ2Njc3Nzc1OUNQXmhqaGZdUD82NDIxLiwsLCwsLi8uLi4uLy8wMDExMDIyMjAwMC8wLy8wMDI2PENJT1VcYmpucnZ4e31+gYOIjYqAcWVhYmZudnd4dnV1dXRybWhnZ2ptc3d5enx+f359fn58eXd1dnN0cnBwb21pZmRkYV9fX2FbS0lKTElFQ0RAQUdtlamyubq6vLy6urm4tbOxsK6rqKajoZ+gpKOgmZSLioqIiIaFhYSDgoGAgYKChYWHiYuOj5GSkpKSkY6MiYeHg4KCg4ODhomJi4uMjIyMjIuKiYqMioyLjYuFgHt2cWlhWk1DPTw9PT08Ojk4OTw/Pz9DRERERERENzc3Nzc3NjY2NjY1NTQzMzMyMjIzMTAvMDAwLy8vLi4tLS4uLS0tLS0tLS8wMC8vMDAwMDAwMDAwMDExMDAwMDAwMDAwMC8vMDAvLy8vLi4tLS0tLS0sLCwsLCwsLC0tLi4uLi4uLy4uLi4uLi4vLy8vLy8vLy8vLy8wMDAwLy8wMDAwMTEyMjIxMDIxMTIyMTExMTEwMDAwMDAwLy8vLy4uLi4tLS0tKysrKiopKSkpKSkoJycnJyYmJCQjIyIiISEiIiEhICAgIB8fHx8gICAgISYpLzY+REdHSEdLUFhdYGRkZWViSS0rKykrJykpKSkoKCgoKCoqKikpJyYmJz5oZmdmZ2RjTkBETU1MPjxKTklXX2NfX2BkYFRUWl1hT0dCOzQ4ODc5MTE0PENDQkI/Ojk5Nzc4O0ZMTUU9NzQ0MzU1Njc6PD48ODMwLS8vMDAwMDExMjIyMjAvLy8vLy8vLy8vLy4uLy8uLzAwMTExMTExMDExMTEyMzM0NDQ0NDhEUV5nZ2RfVUM1NDQxMC8tLCwsLC0tLCwuLi4uLzAxMTAyMjIxMTEwMC4tLi4sLi4vMzc8QEdNU1leZGhscHN4gIWIh4BzZ2hxeXx7eHd3dnFsZ2RcVFZgZ21yd3h6fX59fn1/fH17eXh2dXRzcnFvbWpmYmFfX19gXVBISklIREFDQ0dRao+jrbCxsbGxrayqqaekpKGfnpybmpydnJqamZiVkpGRj4+OjYyKiIaEg4WEg4WFh4mLjY6RkpKSkpGPjYqIh4OCgoKCgoWIiImKjIyMjImIiYaHh4WCgn15cGpjWk9HQjs5Ozs7PD09PDw6OTo9P0FAQ0REQ0NBQTg4Nzc2Njc3NjY2NjU1MzMzMjIyMjIxMDExMC8vLy8vLS0tLS0tLi4uLi4uLi4vLy8vMDAwMDAwMTExMTAwMDAwMDAwLy8vLy8vLy8vLy4uLS0tLS0tLCwtLS0tLCstLS4uLi4uLi4vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLy8vMDAwMDExMjIyMjExMjExMTAwMDAvLzAwMC8vLy4uLS0uLi4uLS0tLCsrKioqKiopKSkoJycnKCYlJCQjJCMjIiIiISEhISAgICAfHx8fHx8gICMlKS82P0ZISEhIS09UWVteX2JgVzknKiknKCgoKCgpKCgoKCkrKysqKCksJENsYGJiZGNlUDtCPDpLRz49RURTZGFdXWFiX2NeYWJgYlRIREhWSj5CRzksMDU7P0JHQjo3NjYzMzZBSk1HQjo1MzM1NTY3OT4/QT46NTEuLi8vMDAxMTIzNTUxMC8vLy8wMC4uLy8vLy8vLy8wMDAwMDAwMDAwMDAwMDExMjIyMjM4Q1FeY2JgWEo7NDQzMC8vLy0sLCwsLCwsLS0vLzAxMTExMTExMjEwMDAvLi0tLS0tLi4tLS4xMzs/REhMUldeZGlwdXd3cmxtc3h3d3l2c3BqYV1YTUhRWl1kbXJyd31+fn5+fn1+fXx7eXd2dXR1c3BsaGZhX2BgX19bTkxKRUVIUFZeanaNoKSmpqako6Cgn56cm5uZl5aYmJiYmJiXl5aWlZOSkpCPkI+OjIqIhoOEgoGDhoaHiY2OkJKTk5KSkZCOioeDgoKCgoGEhoaIiImJioqHgX58enZybmlhXFVMRj47Ojk6ODk7PDw9PTw8Ozo8Pj5CQkFCQ0BAQD83Nzc3Nzc3NzY2NjY1NTMzMzIyMjIyMTAwMDAvLy8vLy0tLS0tLS4uLi4uLi8vLy8vLzAwMDAwMDExMTEwMDAwMDAwMDAwMDAwMC8vLy8uLi0tLS0tLSwsLS0tLS0tLS0uLi4uLi4uLy8vLy8vLy4uLi4uLi4uLi4uLi4uLy8vLzAwMDAxMTExMjIxMTExMTEwMDAwLy8wMDAvLy8uLi0tLi4tLSwsLCorKiwrKiopKSkpJycnJyYlJCQjIyMjIiIiIiEhICAgICAgHx8fHx8fICEjJSkvNDxCR0hJSUlQVVZXWllaV0YtJycnJygoKCgoKCgoKCgrKywsLCkmJj1tZFtbYWZoUz5AOzc2QEY9NTU2UGNjY2RkZGFfYGRlYmNYTERHSkE7QEE6MS4wMjhBREU/NjM0MDEyOkJFRkI7NzQ0NTU3OTs9P0FBPjo1MS8wMDExMTEyMzQ0NDIwLy8vLy8uLi4vLy8vLy8vLy8vLy8wLy8vLzAwLy8vLy8vLy8xNkFNWmFdWlJFOTEyMS8vLy8uLiwsLCwsLC0tLy8wMTExMTExMTIxMTIwLy4uLSwtLS0tLS4vLi4vMDAzNjo+RElNU1ZbXl5eYWZqa2xsamdkXVVRTU1PSUVRXmZqbXB1e3+Af3x8fHx9fXt5eXZ2dHRxbWpoZWNhYWBgYFRMTlFYX2tzfIKNlJuenp+fnJudnZybmZmZmJmYl5eWlpaVlZSTk5GQj4+OjoyLioqJh4aDg4KCgoODhIeJjY6QkpKSkpGQjYqIhYOCgoKCgoSEhoeHh4SCfXdtZmRhWVFLSEE8Ozs7Ozs6Ozw8Ozw8PT08PDo7PD0/P0JCQkJAQD9ANzc2Njc4Nzc2NjU1NDQyMjExMjIzMzEwLy8vLy8vLy8tLS4uLi4vLy4uLy8vLy4uMDAwMDAwMTExMTExMTExMTExMTExMTExMDAvLy8vLi4uLi0tLS0tLS0tLS0tLS0tLi4uLi8vLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLy8vMC8vMDAwMDIyMTExMTAwMDAwMC8vMDAvLi4uLi0uLi0tLCwrKysrKysqKikoKignJycnJiYlJCMjIyIjIiIhISEhICAgICAfHx8fHh4eHyEiJSgpLTM7QURGSEpMT1JTVVVTTT80KScnJycpKSgoKCgpKSkpKystKyspKjBsbGBfYWRmVjhBRDwyMzlAREJLRUlfYmFmZmJjX2NkZGdlZ3VLQD4/PT5AQTkwLy43RUVEQDgyMS4tLzI5QEJCPzs2NTQzMzY4Ojw/QkI/OjYyMDExMDAxMjM0NDUyMjAwLy8uLi4uLy4uLi4uLi0tLi4vLy8vLy8vLy4uLi4uLi4uLzM+SVdbVlNMQTcwLy8vLi4uLS0sLCwsLC0uLi4vMTAwMDAwMTExMTEwMC8uLS4tLC0tLS4uMC4uLy8wLzAwLzE1Njg8PkFDRUhNUFRWVlhVU05FQ0NGS0Y/RFJbYWZsb3Z9gIF/fHx9fHx9fHt5eHd3c3FvbWpnZWJjYWNiXF9rcXuDio+SmJubm5ydnZ2dnJubm5ubmZmYl5WVlZWUlJKQkJCQjo2OjY2Ni4uLiYiGhYKBgYCBgoKFh4eLjI6QkZKSkY6MioaEg4GCgoGCg4SFgoOCf3dsX1VKRUA/QT9CQDo8PDs8Ozw8PDw8PD08PD06OTw8PT0/QkNDQkBCRDc3NjY3ODc3NjY1NTQ0MzMyMjIyMzEwMC8vMDAvLy8vLi4uLi4uLy8vLy8vLy8uLjAwMDAwMDExMTExMTExMTExMTExMTExMTAwLy8vLy4uLi4tLS0tLS0tLS0tLS0tLS4uLi4vLy8vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLy8vLzAvLzAwMDAxMTExMTEwMDAwMDAvLzAwLy4uLi4tLCwsLCsrKysrKysqKiooKConJycnJyYlJSQjIiIiIiIiIiEhISAgICAgHx8fHx4eHyAiIyYpLDA0PEFERkdKTE5QUlJTT0c3LScnJygnKSkoKCgoKSkpKSsrKiwrKCxla2hoZmNnVzdBSEc4LS83Oj0+RD9QZWVnamVjZGRiX2FlYmZkR0JCREVFRUU+My8uMjc5QUU+My8uLS4vMjk+QT85NzY2NDU1Nzg7PkBAQD46NjExMTAwMTIzNDQ0NDIyMjEwLy4uLi4tLS4uLi4tLS0tLi4uLi4uLi4uLi4uLi4uLi4xPEZTVlJOSUA2LSwsLC0uLi0tLCwsLCwtLi4uLzEwLy8vLzAwMTExMDAvLi0uLi0tLi8vLjAvLy8wMDAvLy8vLi8wLi4vMTA0Njg9Pj9CQUE+Ozs7PkJCPj9FTlNaYmVudX1/f359fXx9fnx7eXh5eXZ0cW9ua2pnaWxydnh8gouPkpaamZqcnZycm5ubm5ubm5qZmZqamJeUlJSUlJSQjImJiIqNj4+Pj42OjoyKiIeEgoGAgICAfoKEiIqLjJCRkZCQjouHhYSBgoGBgYOEhIGBgHpyaV5USkM/QEA/QkE9PDw7PDw8PDs9PDw8Ozs7PDs8PD09QENEREVFRkY2Njc3Njg2Njc3NTU1NDMzMjIyMjIxMC8uLi8vLy8vLy8wLy8vLy4uLi4vLy8vLy8vLzAwMDAxMTExMTExMTExMTExMTExMTEvLy4vLy8vLi4uLS0sLC0tLS0tLS0tLS0tLS0uMDAvLy8vLy8uLi4uLi4uLi4uLS0tLS0tLi4uLi8vLy8vLy8vLy8vMDAwMDAwMDAwLy8vLy8uLi4uLSwsLCwrKysrKysqKikoKSkoKCcnJiYmJSUlJCMjIiIhIiIhISEhICAfHx8gICAeHh8fISQmKy4yNz9CSElJSkxOT1BRUU1IOiwnJiYmJygpKCgoKCoqKSkqKSkqLC1dbGVnZGJmViw8RlJRSj0zMzc7NTU6UmZxbm1lXmFiY19dYWZbUk9LS0pISklIQjgwLzEyNUBHRDoxLS0tLS0xNjw7Ozc1NTU0NDU2OD09Pj9APTk3MzIxMDExMjQ0NTU0NDQ0NDEwLi4uLS0uLi4tLS0tLS0tLi4vLy4uLS0uLi0tLS0sMDlCTVVQTEY/NS0sLCwsLCwsLCwsKyssLS4uLi8vLzAwMDAwMDExMTEwLy8vLi4uLi4uLy8vLzAwMDAwMDAwMDAuLi4uLi4uLi4vMC8wMDExMTEzNjc6Ozs9PUFHS1BXX2hyeX6BgH18fX59fHt7e3p2dnRzcW9ub3R6goiNkJWXl5mZm5ubm5ubmpubmpqamJqXmJeXmJiWkIuPkpKSkYmFg4GFjZKUlJSVlJOSkI6MiIaDgYCAf31/gYaIioyOj4+Pjo6LioaEg4OCg4KBgYGCgX57dG1pYVxQQkBAP0JAPjw8PD09Ozs7Ozs7PDs8Ojw9Pz8/QEJFRkZHR0hHNzc3NzY4NjY3NzY1NTQzMzIyMjIyMTAvLy8vLy8vLy8tLy8vLy8uLi4uLy8vLy8vLy8wMDAwMTExMTExMTExMTExMTExMTEwLy8vLi8uLi4uLi0tLCwtLS0tLS0tLS0tLS0tLjAwLy8vLy8vLi4uLi4uLi4uLi0tLS0tLS4uLi4vLy8vLy8vLy8vLzAwMDAwMDAwMC8vLy8vLi4uLi0sLCwsKysrKysrKiooJykpKCgnJyYmJSUlJCQjIyIiISIiISEhISAgHx8fHyAgHx8hIiMmKCwwMzlBRklJSUpMTk9QUE5JRDQoJyYmJicoKCgoJykpKSooKCgoKS1bbmRnZWBoWy0yPkdUWVhRRjg6PDk4P15sdHJsaGplXmBhYWZmXFNST0xOT05MTEg/My8yMzc9Q0Y/NC8tLS0sLS80Nzc3NjU1NTQ2Nzk8PT5AQT88OTYyMTAxMTIzNDU1NTU3NzUyMi8vLy4tLi4uLS0tLS0tLS4uLi4uLi0tLi4tLS0tLS43QUpST0pGPzUtKioqKioqKysrKysrLC0uLi4vLy8wMDAwMDAxMTExMDAwMC8vLy8uLi8vLy8wMDAwMDAwMDAwLi4tLS4uLi4uLi4uLi4vLy8vLzEzMzY2Nzc4Ozw/RU5ZY253fYGAfn+Af359fHp5e3t6eXd1dnd/hoqPk5aYl5eZmZqbm5ubmZiYmJaUko6LiYmIiImKi4SAhouOjYl/cnJ6gpKZnZubm5ualpOQj4uIhIKAgH+Afn+ChYeIiYqKiouLiYiIhYODgoOCgYGBgoKBf3x4c29oYFFCPTw+PDs7PDw8PDs7Ozs7Ozs9Pj8/QEJCQkNFR0dHSEhIRzg4Nzc3NzY2NjY1NTQ0MzIyMjIyMjExMDAwLy8vMDAwLy8vLy8vLi4vLy8vLi4uLi8vLy8wMDAxMTExMTExMTEwLy4vMTEwMC8vLy4tLS4sLS0sLCwsLS0tLSwsLCwsLC4uLi4vLy8vLy8vLy4uLi4uLi4uLS0uLi4tLS4uLi4uLi4uLi8vLy4vLzAwMDAwMDAwMDAwMC8vLy4uLi4tLS0sLCsrLCwrKiopJycnJygoJyYmJSUlJCQjIiIhIiEhISAgIiIgIB8fHx8gICAgICMlKCksMTU8Q0lKSUhJSktOTUxMRT8uJyYlJicoKCgnJykoKSgoKCgpKihRbWNlZGFjXS4vNz1GUFdYWU03Mjk6PzxcdHJycGNZYV5bYGZoZV1XU1FRUlFQTkxKQzkzMy8xOD1DQTgxLSoqKyosLjEzNTQ0NTY3ODg3OTw+QEE+PTo3NTIwLzEyMTM0NTU2ODk2NDMxMDAuLS4uLiwsLCwsKyssLC0tLS0tLCwsLS0tLSwsNUBGUU5JRUA3LigoKSkpKSoqKiosLC0tLi4tLS4uLy8vLzAwMDAxMTEwMDAvLy8vLy8vLy8vMDAwMDAwMDAwMDAvLi4uLS4uLS0uLi4vLy8vLzAwMDEyMjIzNDQ1NTY7SVdjbXh/hIGAf399gH56eXh6e3t7e3yAh4uOkpOVlZWWl5mZmpqZmpiUkY2KhoF8dW9saGZma21wcXN7goSCdGhueouYn56gnqCgnZqZlJGMiYWAfHp7e31/gIGFhoiJiIiJiYmJhoaDgoODgoKAgICAgYGAf313c2hdTUA/PDs6Ojs7PDw7Ozo7Ozs+QEBBQUJDREZGRkhHR0dGRkY2Njc3OTk2NjY2NTU0NDMyMjIyMjIxMTAwLy8vLzAxMC8vLy8vLy4uLy8vLy8vLi4uLi8vMDAwMDExMTExMTExMC8uLzAwLy8uLS4uLS0tLC0tLCwsLS0tLS0sLCwsLCwuLi4uLy8vLy4uLy8vLi4uLi4tLS0tLS0uLS0uLi4uLi4uLi4uLi4uLy8wMDAwMDAwMDAwMDAvLy8uLi4uLS0tLCwrKysrKyopJycnJycmJiYmJiUlJCQkIyIiISIhISEgICEhICAfHyAfHx8gISMlKCsrLjM3PkVKSkhFREZHSUtKR0M7KyYmJicnKCkpJycpKCcoKCgpKyVPaWJkZWBlYTAsMzg9R05VWVhQNC85QUVIbHR0dG9gWGBbWl9jaGdgWVZUVFFQUFFQTEdBOjUzMTI3PUA6MiwqKiopKiotMDEyMzU3ODg4Nzc5PD4/Pz49Ojc1MjExMjEzMzQ2Nzg3NjU0MjAwMC8uLi0sLCwsLCsrKyssLCwsLSwsLCsrLCwtLTE8RU5NSEVAOTQqKCkpKSkqKikpKysrLCsrLS0uLi8vLy8wMDAwMTExMTExMC8vLy8vLy8vLzAwMDAwMDAwMDAwLy4uLi4tLS4uLy8vMDAwLy8wMDAxMTIyMzQ0MzMzMzpHVmJsdn2BgX1/gX9+fnt2c3Z6fn9/goeKjY+PkJSUk5WWlpeXlZKQi4V/d3BpY1tVUE1ISE1RYF1fZG5zcWxnc4WWn6OioaGhoZ+dm5GMh4R9eXRyc3N4e36AgoOGh4WFhoaGhoODg4KAgIGAgH5+fn5/goOCf3lxal1MQD09PTw7Ozo8PDw7PD4+QUNDRERFRkdHR0dHRkZFRUVFNzc3NzY2NjY1NTU1NDQzMjIyMjIxMDAwMDAwMC8vMC8vLy8vLy8tLy8vLy8vLy4uLi4uLzAwMDAxMTExMTEwMDAvLy8uLi4uLi4uLS0tLS0tLSwsLCwsLCssLCwsLCwsLS0uLi8vLy8wMC8vLy8uLi4uLC4uLi4uLS0tLS4uLi4uLi4uLi4sLS4uLy8vLy8vMDAwMC8vLy8vLi4uLi0tLSwsKysrKyooKCgnJycnJSUmJiUlJCQkIyMiIiEhISEhICAgICAgHx8fHx8fICAlJyorLDA0OUBGSUlIRUJCRkdHRkU/NSkmJiYnJygoKCgnJygoKSoqKipUbWBiZWFgYzEqNTY2PURJUFdYVD49PT48S2xwc3RVVmBjYWJlZWVnY11ZWFdTUFBRUU1MRj44MS8xMzg8PDMsKyopKSkqLC8xMzU4OTo5Ojc3Nzg6PkBBQUA9OjY0MjAxMjMzNDU2NzUzNTQyMjExMC4uLS0tLCwrKysrKyssLCsrLCwrKyoqKSkuOD5GS0dEQTo1LicnKCcnJigoKCkpKSkoKSsrLS0uLy4uLzAwMTAwMDEyMjExMTEvLy8vLy8vLy8vMDAvLzExLy8uLi0tLi4uLi4uLi8vLzEvMDAvMTExMjM0NDQ0MjI0OUNTYGtzeX9/gYOAf318d3FvdHh9f4ODhYaIiYmOjo6NjY2Oj4yGfndvaGBYU05MRkNERERFTV1YUk9UWl9nboGUnqCfn56fnpuWkYyGgHx0b2lkZGVpbXN3fH6AgYSEhISEg4KCgoGAf399fn9+fn1+fn+AhIB+enJnWkY+PDs7PDw+PD4+P0FCQ0VGR0dGRkZGRkZGRkVFRUNDRDY2Nzc3NzY2NTU1NTQ0MzIyMjAwMDAwMDAwMDAvLy8uLy8vLy8vLS8vLzAwMDAuLi4uLi4vLy8wMDEvLy8vMDAvLy8vLi4uLi4tLS0sLCwrKysrKysrKysrLCwsLCwsLC0tLi4vLy8vMDAvLy8vLi4uLi4tLi4uLi0tLS0uLi4uLi4uLiwsLS4uLi8vLy8vLzAwMDAvLy8vLy4uLi4tLS0sLCsrKiopKCgoJycnJyYlJiUlJSQkIyMjIiIhISEhISAgICAgIB8fHx4fHyAiJCcsLS8zOTxARklJR0I/P0JFRkVBPS8oJiYmJiYnJycnJycoKSkqKy5fa2FhYl9kZDUmMjk7Pj5CSk9QUEk+OzxBQ1RtcXJuZVtZY2Fla21raGVeXVtZVlJQU1JPTUpFPTMwLzI0OTkzLCsqKSkpKSsuMDE0ODk6Ozw5Nzc3OT1AQkJBPTo6NjUyMDAxMzM0NTY1NTU1NTQzMjExMC8vLy8vLS0sKysrLCwsLCwsKysqKikpLDI6QEhIQ0A8Ni8oJycnJycnJygpKSkpKCkqKisrLC0tLi4uLzEwMDAwMTExMTExMC8vLy8vLy8vLzAwLy8wMC8vLi4tLS0tLS0tLS0uMTEyMzExMTExMTIzNTU1NTIyMjQ3Q1FeaXB6gYCAgH99fHp2cG9xdXl9f4B/gIGBgoKBgH19fX57cmlcVExJSUtMT05MSkhISUtRUU9LSUtUX2+GkpKTk5KSj4yIgXtzbWVgXFlWVlhbYmVpcHN2e36AgYGBgX9/f4CAf35+fHt7fH19fHx+foCDgXx3b2RXRj09PUBBQT9AQEFDRkdGRkdHR0dGRkZGRkZFRUVGQ0M2NjY2NjY1NTQ0NTU0NDMyMjEwMDAwLy8vLzAwMDAxMC8vLy8vLy4tLS0uLi4uLi4uLi4uLi4vLy8vLy8vLy8vLi4tLS0tLS0tLSwsLCsrKysrKysqKiwsKyssLCwsLCwtLS4uLi4vLy8vLy8vLy4uLi4tLC0uLi4tLS0tLi4uLi4uLi4tLS0vLi4uLy8vLy8vLy8vLy8uLi8uLi4tLCwsLCwrKykpKSgnJycnJycmJiUlJSQkIyMjIyIiISEgISEfHyAgHx8fHx8eHyAiJCUpLC4yNztAQ0hIR0ZBPj5CQ0VDQjosJyUlJiYnJygoKCknKSgqKTNlbF5gX11gaj8iLzQ6PEBCQENISko/ODtBQDxacXFzb21pXWVnaGxwcGlkYV5eXFdTUFFQT05LR0M6MzAwNTQ3My4rKikpKCgqLC0wNDU3ODk6ODY3Nzc6PUFCQj48Ozo3NTIxMTEyMjQ1Njc3OTc1NTM0NDIyMTMzMzAvLiwsLC0tLS0rKyoqKykpKSotNjxESkE/OjUxKicmJycnJSUnJyYlJicnKCoqKiorKysuLy4uMDAxMTExMjIxMTEwLy8uLi4uLy8vLzAwLi4wMC0tLS0tLS0tLS0tMDQ0NTUzMjIwMTI0NTY3NjYzMzMzNDc/Tlplb3Z8gIGAfnt6eHVua2xvdXh7fHx6enl4dHNxbm1sZ15WTkpKSUlLTUxOTkpHR0hKTEtIRkdLTlpte318e315enZxamJbVU1HREJFR09VWV5fZGVpbHF0eXh5fX9/f359fHt7e3p6e3t8fXx8e3x9f4B/fHRrYlVJQEFBQkNDREVFRkZGR0dHR0ZHSEhHR0ZGRkZGRkdHNjY2NjY2NTU0NDU1NTQyMjIxMDAwMC8vLy8wMDAwMTAvLy8vLy8uLS0tLi4uLi4uLi4uLi4uLy8vLy8vLy8vLi4uLS0tLS0tLCwsLCsrKyoqKioqKyssLCsrLCwsLCwsLS0uLi8vLy8vLy8vLy8uLi4tLS0tLS0tLS0tLS4uLi4uLi4uLS0tLi4uLi8vLy8vLy8vLy8vLy8vLi4uLSwsLCwsKyspKSkoJycnJycnJiYlJSQkJCMjIiMiIiEhICAgICAgIB8fHx8fHyAhIyUoKy8zODxCRUdJSEZDQT4+QUJEQj83KSclJSYmJycoKCgoKiorJzpraV5fX11ib0cgLTIzODpER0tGRUhHPT5RZFtET2psbWdqaWVna21wcW5pZWZgXFpXVFFPTUxMS0dGPjcxMTQzNjMuLSspKSgoKSorLTEzMzc5Ojc2NjY3Nzo9Pj4+PDw7OTc1MjExMTIzNDM1NTc5Ojc2NzUzMzMzMzMwLy4uLi4tLSwsKysqKioqKikoKzE5QEZDPjo1My4oJycnJyUlJSUlJiUlJSYnKSkpKikqLCwtLi4wMTExMTIyMjIyMTAvLi4uLi8vLy8uLi8vLi4tLS0tLS0tLS0tLjE1Njg4NDMyMDIzNTY3Nzg4MzMzMzI0Nj9KWWNtdXh+gYB9e3l2cm1qa29ydnt8fHp4d3VzcW5paWRhXFhSUE5LS0tLSklGQ0NERkVDQ0JAQURPWltZWVlZWVZRTkZBPTk4Nzc5P0VKUlZcX19fYWNlaW1wcXZ6fX9/fnx7enp6ent7e3x8fHt7fH5/gH95c2thV0tDREVFRURERUVFRUVFRkZFRkZGRkZGRkVFR0ZHRTY2NTQ1NTY2NDQzMzMzMjIxMDIyMTEwMDAvLy8vLy8vMDAwLi4uLi4uLi0uLy8uLi0tLS0vLi4uLi4uLi4uLS0tLSwsLS0tLS0tLCwrKioqKioqKikpKissLCwsLS0tLSssLS0uLi8vMDAuLi4uLi4uLi4uLS0sLS0tLS0tLS0tLS0uLi4uLi4uLi4uLi4uLi8vLy4uLi8vLy4tLS0tLS0rKysrKSkpKCcnJiYmJiYmJCQlJSQjJCQjIiEhICAfHyAgHx8eHh4eHx8gIyQoKy0xODxER0pMTEpHQj9BQkNFRkI9MiYoJyYmJicnJycoJykpKUdvZ2BbXmFialUhLjo8PT07RUdYT0xKSEI9RU9XV1hkamhnaWlhYmlxcm9qY2hoZF9dWlZUUUxJS0lGREE6NjE0Njc1LywsKyspKSkpKiwtMDE1OTg4ODU1NTY5Ojs8Pj09PTs5NzU0MzAwMjIyMjU2ODk5Nzk5NTQ0MjEwMTEwMC8vLy4rKy0qKioqKikpKCktNTtAQz47NzMvLCklJCYmJSUlJCUlJSUlJicnJycoKSoqLC0tLS4vMDEyMzIyMjIwMDAwLjAvLy8uLS0uLi0tLCwsLCwsKiotLS8xNDY4NTM0NDIyMzQ1ODk2NjY2NTIxMTM0PUlWYGlydn2AgX56eXZybGpma290eHx7fXt6end1c3FtaWVfW1hUUU1MSkdFQkA/PUA+Pjw8Ozs9PT8/Pz8/Pjw8OTo6Ojg5Ojo5OjxCSE1TWFteYF5dX15iZWhscHV4fX58eXl5eHh6ent5e3t8e3x8fn9/fHl0bGRaTUZGREZGRUVDQ0NDQ0VFRUVERUVGR0ZISEdGSEY0NDMzMzMyMjMzMzIzMzExMjExMTAwLy8vLi4uLi4uLi8vLi4uLi4uLS4tLS4uLS0sLCwsLC0tLS8tLS0tLSwsLCwsLC0tLS0rKywsKyopKSkpKioqKSorLCwsLCwsLCwrLC0tLi4vLy8vLi4uLi4uLi4uLi0tLC0tLS0tLS0tLS0tLS0tLS0tLi4uLi4uLy8uLi4uLy8uLi4uLS0tLS0tKyorKykpKSgnJyYmJiYmJiUlJSUkIyQkIiIhISAgHx8gIB8fHh4eHh8gICIlKiwuMjlBRktQT0xKR0RCQUJFRklGPCwoJyYmJiYoKCcpJSgnKVZsY19cYmhnbFMeMkpMTE5TVUpHSk5LSUE8REBCR1FeYWVnaGppX2dqbnBsYmVqZ2JhY15XVFBMSEdGRURCPTgzNDY3NS8rKysrKioqKikpKyswMjY5OTk1NTM0NDU3Oj0+Pj49Ozk3NTMyMTExMzMzMzM1ODg4ODc2NDIxLzAwMDAwMDAvLi0sLCoqKSkpKSgpKS02O0A+OjY0MS4qJiQmJiQkJSQlJSUlJSYnJycnJycpKSsrLCwuLi8wMjIyMjIyMTExMS8vLy8uLi0tLS0tLSwsLS0sKywsLC0vMTEzNDQxMjM0MzQ0NTY4NjY2NjY0MTEzNDQ8RlJbZW92e32AfXl3dHJrZGdqbHF1eXt7fHx7eXh3dHJva2djYFxXVlRRTkpGQTw6ODg4ODc2Nzc6Ojo6OTs7Ozw9Pj48OTs7OTk7P0VKT1NbXmBfYF9cWllbYGVqcXZ6e3t5eXh4enp8e3l7e3x8fHx9fn99eXRtY1tORUZGRURDRENCQkJDQ0NDREVGR0dJSUhIRkdGNTQyMjQzMjIzMjIyMTExMTAwMDAvLy8vLy8vLy4uLi4uLi8vLi4tLS0tKyssLS0sKy0sLCwsLCwtKyoqKisrKywsKyssLCwsKysrKysrKiopKSkpKSkpKisrKysrKysrLCwsLC4uLS0tLS4uLi4uLi4uLi4tLS0tLS0tLS0tLS0tLS0sLS0tLS0tLi4uLi8vLS0uLi4wLS0tLS0tLS0sLCsqKioqKignJycmJiYmJiYmJiUkIyMjIyIiIiIgIB8fHx8eHx4eHx8fISIlKCktLzQ7QUhNUFBMSUZFQkBCQkRKRzgqKickJCYoJycnJickN2ZtY11fY2hobFomK0NLSk5NT1RTS0lOR0A5TmFWWldSXWRpbGtrcW5sbnBvYl9lZ2dlYmJfV1NQTEhDQkFDQj86MzAyNTQuLCwrKysrLCwrKiorLS8zNTc4NjUyMTEzNjg4Ozw9Pj4+Pjs5NTUzMTIzMzEwMjQ0MjU3NzU0MjIwMDExMjM0MzEvLS0qKiopKSkpKCgoMTg7PTo2NjQwLispJSUlJSUlJSUmJiYmJiYmJicnKCgpKioqLCwtLjAxMDAwMDExMTExLzAwLy8vLy4tLCwsKyoqKyorKystLjAxMTExMTIzMzMyMjM0NTU1NjY3NjY2NDQ1NTlBTllia3F4fn99eHVybmllZmdqbXF2eXt7e3p6enh4dnRwbGlnZmNhXVhTTUlGREE+Ojo2Nzc3Njc3ODk5PDw9PTw8PTw6OTg4OTxARkpQVVpdYGBgXVtVU1RaXWRocHZ7e3p6eHl5eXt7e3x9fH17e3x9fXx4dGtiW09FREVEQ0NCQUFBQ0NDREVGRkhISkpJSEZGRDMzMjIyMjIyMjIxMTEwMDEwMDAwLy8uLi4uLi4tLS0tLi4uLi0tLCwsLCsrKiwsKywrKysrKysrKysrKyssLCwrKyoqKysrKyoqKioqKioqKSkpKSkpKSorKywsKysrKywsLCwuLi0tLC0uLi4uLi4uLi4uLS0tLS0tLS0tLS0tLS0tLS4uLS0tLS4uLi4uLi0tLi4uLi0tLS0tLS0tLCwsKyoqKiooJycnJiYmJiYmJiYlJCQkJCMiIiAgICAgHx8fHh8eHh8fICIjJikpLC4yOD5ER0pLS0lGRUJDQkNCRkIwKCsnJicmJycnKColQHBtYmJgZmZob0wjKjBFUUpHRkBCTFFGS0o/PEZUW2RXVmNpbm9ubG9wa2xwZVdfampoaWNhX1hSUk1JREE+Pj08OTMvMDExLCsrKysrKywsKywrLCwvLjM1NjU1MzEvMDU3Nzg5Ozw+QEA/PTo3NjMzNDMwMDAxMTExNDQ0NTMzMjIyMjIzNDMyMC0tLCoqKSkpKCYmJyozODo8ODY1NDMwLCooJiUlJSUlJSUlJSYmJiYmJicnKCkqKiwsLS8vMDAwMDAxMTExMTAwMC8vLy8uLSwsKysrKyoqKysrLC0uLi4uLi8wMTIyMTIzMzM1NTY2NjU1NTMzNDQzNz9LVF1lbXR5fnx2cnBubGdiZWdqb3V4e3t6enp6eXl3dHJubGtraWhkYFtYVVBNSEZBOzg3NzY2Njc3Nzo6Ozs7Ozo6ODg3Nzc5PEJHTFFXW11fX11bV1FNTVRZYGdwdHd6end3eHl5enp5e3x8fHt6eXt9fXhyaWJZTkVEQ0NDQUJBQUNDREVGRkpLSkpKSUdGRUQxMTMyMjIyMjExMTExLy4vLy4uLi4uLi4uLS0tLS0tLSwuLCwrKyosKysrLCsrKyoqKioqKysqKisrKysqKiwsKikqKioqKysqKioqKCoqKioqKisqKSoqKiorKywsLCwsLCsrLS0tLS0tLi4uLi4uLS0uLi0tLS0tLS0tLS0tLS0tLCwtLS0tLS0uLi4uLi4uLS4uLSwtLS0tLS0tLSwsKysrKykpKCgnJyYmJiYmJiYmJSQkJCMjIyIiIiAgHx8fHx4fHx8fHyAjJCcqLC0uMjY7QEJGSUpJR0dEQUFBQD84LSosKCclJycmKCcnPHBrZGRlZ2psaD0eKy8zP1pMQ0ZHPFBSTktJR0ZMUV9mYFhfZ21vb25wcW9wb2ZfZWpoZ2lmZmFdWFJOR0I9Ozo7Ojc0MTEwLSwrKyoqKSosKy0tLCosLi8wMTM0NTQyMDAzNzU4OTo6PD5BQD88Ojg2OTc1MzEvLy4vLzEyMjQ0NDQzMzM1NTQzMS8uLSwsKikoKiknJScnLTI0OTk4NTY3MjAtKyclJSUlJCQkJCQlJSUlJiQlJScoKiosLC4uLi4uLi4uLS0tLzAwMDAuLjAuLi0sLCsrKysrKyoqKyssLCwsLS0tLTAxMTExMjMzNDQ0NDMzMzMyMjMyMTI2OkJOV2JqcXh7enVybW1rZmJiZWtxdHZ6eHl6eXh4dnR0b2xtbW1samlnZ2JeWlZRTEU/OTg2NjU2Nzc3Nzg5Ojo5OTg4NjY1Njk+QkZNU1hcXl5eXVlVTklISlNbY2txd3p7eHV2dnd4d3d5ent9fXp7e3t6dnBpYFhQRkRDQkBAQUJDRERER0hISkxLSkhHRUNBMTExMDExMTEwMC8uLy8tLi4tLS0tLS0tLCsrKywsLCwtLCsrKysqKykqKysqKiopKSkqKioqKiorKyoqKSkrKykpKiopKSkpKSkpKSgpKCgnJygqKikqKioqKyssLCwsKysrKywsLS0tLS0tLS0tLS0tLi4tLS0tLS0tLS0tLS0tLSwsLS0sLCwsLS0sLCwsLiwtLi0sLS0tLS0tLCwsLCsrKyspKSgoJycnJyYmJiYmJiYlJSUkJCMiIiIgIB8fHx8eHh8fHx8hJCUpKiwtLjE2Oz9DRUdKSklIRUJCQUA5LiorKygnKCkoKCgqPmttZmNma21vZzUmLjEwPVhYS05LSkxNUlNOREZGUFFoaWVhZmx0b2xrbm5rbmxgYmRmZmVmZ2hmX1pWUkpCPTs6ODY2Ojs4My8tLCooKCkqKiwtLi8uLi4uLi8xMjQ2NDIyMjM1Njg5OTk8Pz8+PT48Ojs5NzUzMjIxLzAxMzIzMzQ0MzMzNDQzMjEvLi0sLCsqKSkpKCcmJiksMTU6Ojk5NzY2MS8sJyQlJCQkJCMjJCQkJCQkJiYnKCoqLCwtLS4uLi4uLi0tLS8uLi4uLi8vLy4tLS0sLCsrKysqKisrLCwsLC0tLi4vLy8vMDExMjIyMjIxMTExMjIxMC8wMjM1PkpWXmdvdHl5dnJwbWxoY2FlamxwdHd4eXl4dnNxb21qaWlqamtqbW1raWVgWlNLRDw4NzY2NjY2Nzc3Nzc3NjY2NjU1NTc2OD5ESU5UWlxcXl5dVVFKRkJHT1hhaW90eHh4dnR0dXZ2dXV5e3t6eHl5enh2cWliWVBFQ0FCQkNEREVHSElKSUtLSkpIRkNBQjAwMDAwMC8vMC8vLy8vMC4tLS0tKywsLCwqLCwsLCwsLCsqKikpKikoKSkpKSkpKikpKikqKioqKysqKikpKSkoKCcoKCgoJygoKSkpKCgoKCgoKCkpKioqKioqKiorKysrKyssLCwsLCwsLCwsLS0tLS0tLi4tLSwsLS0tLS0tLCwrKysrKiorKysrKysrKysrKy0tLS0tLCwrKiwsKywsLCoqKiooKCcnJycnJScnJiYmJiUlJCMkIyIiICAfHx8fHh4eHh4gIiUoKSwrLjE0Nz5CRUZISUtKSUhEREM/MCopKigmKComKSgqKWRwZ2VlampvVyooMC80RFZcTEtISUxLQklSS0U/SVlfWVhbYGpwc2tqamVsbmxnX2FlZ2NfYWZoZV9dWVVOR0I9Ojg3OT1EPzUxLSspKCgoKCssLS0vLy4uLS0uLy8zMzQ1NTIxMTM2Nzc5Ozw8PD8/Pz8+Pjw5ODY2NTMzMzM0NDQ0NTQyMzAwMDAwLi0uLi0sKyopKSkoJyYnKCwyNzo6Ozs5ODQxLiokIyMjIyMiIiIiIyMkJSQmKCkqLCwsLC0uLi4uLS0sLCwtLS0uLi8uLy8uLi4uLS0sLCwsKyssLCwsLCwsLC0tLS0uLi8vMDEwMDAwMDAvLzExLy4vLy8vMTU7Rk9cY2tyeXt3dHBtaWhlYWFnam9ydXd3dHFxbmtpaGZkZGRoamlqbGpnZF9ZUUg+OTg3NjY1NTY2Nzc1NTQ0NDQ1NTU1NTY5P0VMUVdZW15fXVpTTUlDQElQWGBnbnR5eXd1cnJzdHJycnV5e3l5eXp8eHZwamRcU0pBQUNERkVISkpKSklJS0pJRkZDQT8vLy8vLi4uLi8vLi4vLi8tLS0sLCssLCwsKiwsKyspKSgqKSkoKCkoJygoKCcoKSkqKiopKSkpKSoqKSkpKSkpKCgnKCgoKCYnJygoJyYnJycnJygpKSoqKioqKioqKiorKysrLCwsLCwsLCwsLC0tLS0tLS0tLCwsLC0tLS0tLSwsKysrKyoqKysrKysrKysrKysrKywsKywsKyosLCsrKysqKioqKCgnJycnJiYnJyYmJiYmJiQjJCMiIiAgHx8eHh4eHR4eICImKSosLjE0OD5DRUZJSktLSkpJRkZGOSsrKiopJyYmJygoI1RvamlqbnBvTyw0My4tNENKTk9RTVNTU09MS0RCR0dbXlVLXGJpcW9tbWpnbW9taWZkYmFgYF9jZmJeWllWUEtEPzw8PTw8Qj01My8pKCgoKCgpKywvLy4vLi0tLS0tLzI0NjYzMjExMzU2ODk7Oz0/P0BAQEA/Pz08Ozo5OTg4ODg3NTU0MTAuLi4uLC4tLi4tLCsqKSkpKCcnJicoLTE0Nzo7OTc2MzAsKCQjIyMjIiIiIiMjIyQlJyYnKCosLCwtLi4uLi0tLCwsLS0tLS0vLy8vLi4uLi0tLCwsLC0tLCwsLCwsLCwtLS0tLi4vLy8wMDAwMC8vLi4wMC4uLi4uLi8xMjhETlhgaHB1enl3b2xqZ2ViYGFnbnFzc3Vxb21pZWRiYFtcXmBjZmhpaGRfWVBHPjk4ODY2NTU2Njc3NTU0NDQ0NTU0NDU2OD5DSk5UWlxdX11bV1BKRURESlFaYmhwc3d4dnRycHFxcXJydXp7enl5ent6d3NvZ19YTUZFQ0dISUpKSkpJSUlJSUZEQT08Li4uLi0tLi4uLS0sLS4tLSwsKSkqKioqKygoKCgoKCgnJycnJycnJycnJygoKCcnJycoKCgoKSkqKigoKCgpKSgoKCgnJiYmJiYmJiYmJiYnJyYnKSkqKioqKyspKSkpKSkrKysrKysrLCwqKyssLSwsLCwrKisrKiwsKywsLCwqKioqKysrKyoqKysrKysrKioqKioqKyorLCsrKysrKyoqKioqKikpKSkoJyYnKCgnJyUlJiYlJSQkISEgICAgHx4dHR0eHiAkKCssLzEzNztBR0xNTkxKS0pMS0pKQy4mKSclJycnKCgnJk1xaGNpb3BpPyIzMDAvMTQ9R1JaXlhWWFlVTUlCNjxIYmNaWWhxbXJycW1ubWlpamtnZGFfYmBfXl1cVVNVU1FNSUNAQEM/ODo5NTYxKCYnJygoKCkpKi4vMDAuLCsrKywsLTAzMTAxLzAyNTc4ODo7PT8/P0BAQUFCPkBAQD8+Pj07Ozg1NDIvLSwtLS0sLS4sLCsqKikpKSgnJiYmJSYrLzI0Njg4NDQxLiwnIiMjIyMjIyMkJCQkJSYnKCsrLCwtLS4uLCwrKywsLS0uLi4uLi4vLy8vLi4sLCwsLS0tLS0tLi4tLS0tLS0tLS4uLy8wMDAwMTEvLy4uLy8uLi0tLi4uLjAxNz9JU1xlbXN3d3ZwamhoZF9eXmZsbnBwcG5sZ2JhXltXVFNTWFtgZWFfWldNRT05ODY2NjU1NjY3NzU1NjY1NTY2NjY2Njk8QUdNU1daXF9dXFlTTkhGRUhNVF1la3B1d3h4dnNwbW5vcHFzeHt6eXl5e3p3dHFqY1tVTUlISUhJSklHSUdIR0ZDQD07OS4uLi4tLS0tLSwsLS0sLCwsKyoqKSkoKCgnJycoKCgoJycnJycnJycoKCcoJycnJycnKCgoKCkpKiopKSgoKCgpKCgoJiYmJiYmJiYmJiYmJycmJygoKSkpKSoqKCgpKSkpKysrKysrKywrKiorLC0sLCssKiorLCwrKiosLCwsKioqKisrKysqKiorKysqKioqKioqKisqKiwrKysrKysqKioqKiopKSkpKCcnJygoJyclJSYmJSUkJCIiICAgIB8eHR0dHh8iJSksLzE0Nzs9QkhOUlFPTUxLS01MSDcqJiYoJyYnJiYoJE50aWVqamxlMiMxMjAuMzA2RUlPV1lWVlZXVk1EOzA4Rl5SVVtha2pydXFtcHJuamlnZ2RiYF1eXllVVE5NUFJOTE1GPz9BPDc2MzU1MSsnJycoKCgoKSotLi8vLi0sLCsrKissLS4wMC8wMDM1Nzc4Ojo7PD5AQEBAQUFCQkJBQUE/PTs4NzUzMS8vLi0tLCwsKysrKiopKSknJyYmJiUkJigrLjAyNTQ0Mi8tKSUjIyMjIyMjJCQlJSUmJygrKywsLCwtLSwsKyssLC0tLi4uLi4uLy8vLy4tLCwsLC0tLS0tLS4uLi4uLi0tLS0uLy8vMDAwMDExMS8wMDAwLy4tLS4uLy8wMTIyO0VQW2FpbnZ5dXBtamllX1pdYmhrbnFycGxmYl5ZVVFOTE9PU1hZV1VQSkI5Nzg2NjY2Njc3ODg3Nzc3ODg5OTk5Ojo6O0FGS1FWWVtcXV5aVVFLR0ZITVJYYWhscHV3eXl3cm1tb29ub3J2e3p6ent8fHl4dG9sY1xSS0lJSUlISEdFRURDPz07NzYuLi4uLCstLCwsLS0sLCwsKyoqKiooJycoJiYmJiYnJycnJiYnJycnJycmJiUlJycnJygoKCgpKSgoKSkoKCgnJycnJyUlJSUlJSUlJSUlJSYmJiYmJicnKCcnJycoKSkpKSopKisrKyorKysrKyssKysrKyoqKiopKSsrKyorKyoqKioqKioqKiopKSkpKioqKioqKioqKioqKiorKysrKioqKioqKSkpKSkoKCgoKCgoJyUlJSUlJCQiIiEhICAfHh4eHh8gJCYpLTAzNzs+QENITVBRT05OTExNSz8tKSgoJyooJyYlJlR2amVmamRnQyMuMjEwLi0vOUhPUlhZWV5kWlRNRz4xPEhaWlRXXmhqbXFxc3d2cWlhYWZkX1pZXl9WUE5JSEpOTU1NSURCQDw4NTQ3NzQtKCUmJygpKSkpLC8uLi0uLi4rKSgoJykpKi0tLjAxNDU2Njg5OTs8PT4/P0E9Pj9AQEJCQT06Ojg2NjQyMTAvLy0sKyoqKyopKSgoJyYlJSQjJCQkJSksLjEyMzQvLismIyIkIyMkIyUlJiYmJycoKioqKisrKyssLCwsLS0tLS4tLi4uLi4uLy8uLSwsLCstLS0tLS0tLS0uLS0tLS0tLS4vLy8wMDAxMTAwMTEwMC8uMDAvLzAwMjMwMTQ5QUpWXWZrcnh3cXBqZWNdWlpeY2dsbW9ubGdiW1ZTUElHR0hKTU1LRkM9ODg6OTg4Nzc4ODg4ODg4ODo8PDw7Ozs7PDs/Q0hNUlhaWlxeW1dSSklHSUxRVVphZ21xdHh5eHZybW9ucHFyc3Z7e3t7fH2AgHt4c29oYVZOSUhHR0REQ0RBPzs6NzUyLCwsLC0tLCorKysrKioqKioqKCgqKSkpJiUlJSYmJiYmJiUlJiYmJicnJiYlJScnJycmJigoKSkoKCgoKCcoKCcnJiYlJSUlJSUlJSUlJSUmJiYmJiYnJycmJiYnKCkpKSkqKSkpKysqKioqKioqKyoqKisrKioqKSkqKioqKSkpKSkpKSkpKSkpKCgpKSkqKSkpKSkpKSkqKikpKioqKioqKioqKikpKSkpKCgoKCgoKCgoKCgmJSQkIiIhISAgHx4eHh4fICQoKi0wMzc/Q0RFSElKTE1PTU1MSkIyJycnJygqKSUlJFN0a2FmaGlpTSYuMTAuLi0rLz5NV1BVVllfX11bVEg+N0NRXl5VV2NfW2h0c3R3eXpxZmZraWBbWltcWlJLSUhKSkpLSkpGREE8ODc1NjU0LSglJicoKSkpKSstLCwtLi4uLionJyYkJSgqKy0vMjU1Njg5ODg7PDw8PT09Ozo6Oz4+Pjw5Ojo6Ojg3MzIxMDAuLCsqKiorKSkoKCYmJSUjIyQkIyMlJiosLjExLy4tKiUlJCMjJCQlJSYmJicnKCoqKiorKysrLCwsLC0tLi4uLS4uLi4uLi8vLi0sLCwrLCwsLC0tLS0tLi0tLS0tLS0uLy8vLzAwMDAwMDExMTAwLzExMTEyMjIyMjMyMzY+R1FZYWpwdXhybmhjXltWWV5gZWttbm5uaGNcVlNOSERBQENDQkA9PTo7PDs6Ojo6Ozs7Ozs7Ozs8PT09PT09PT49PUJESVBTV1haXFlXVE5KS0pKTlNXXGRna3F0eHl4dnJvbXFycnJ0eXx7e3yAgYOBfn13cWxhVUxJSEVCQ0I/PTs5NzYzMysrLCwsLCwrKioqKikpKSkoKCgmJiYmJiYlJSUlJSUlJSUlJSUlJSUlJSUlJSUmJicnJiYmJygoKCgoKCgoJycmJiUlJSMlJSUlJSUlJSUlJSUmJiYmJSYmJiYmJykpKCcnKigpKSgpKSkpKSkpKioqKisrKikpKSkpKSkoKCgoKSkpKSgoKSkpKCgoKSkpKSkpKCgoKCkpKSkpKSkpKSkpKSoqKSkpKSkpKSgoKCkpKCgnJygoJiQkJSQjIiEhIRweHh0eHyAlJyovMjc6QEVHRkdFRklLTk5NSkQ3LCooKCgpKiskI0F7bV9eZWRqXyUrMTAzOC8rKy04RExPUlNVWlteXVFKQj1IUldZUVJaUlRicnN0eH18d3Vzb2hgXFlWVVRQSEhJSEdHRUZKR0RBPjk3NjU0My4oJycnKCgoJykqKysrKy0vLy4sKiclIiQnKCsuMDQ2Nzc2Njc5PTw8PD08Ojk3Njc5ODg3Nzo7PDw7NzYzMjAvLiwqKioqKikpKCgnJiYmIyQkJCQkIyQnKi0uMTAvLiwpJiQkJCUlJSUmJicnKCgpKSoqKyssLC0tLS0uLi8vLywtLS0uLi4vLy4tLCwrKyoqKysrKywtLS0tLC0tLS0uLi4uLy8wMDAwMTExMjIyMTEzMzMzNDQ1NTQzNDQ2NzxETFRfZWx0dnNtaGNfWVVUWF5jZ2ttbW1qZV1YUk5IRT88Ojw+Pj8+Pj0+Pj8/Pzw8PT4/Pz8/QEA/Pz8/Pj4+PTw+QkhMUFRWWFlaV1VQTEtISU5SVVlfZGhucnZ5enl2cnFxcXJzc3Z5foCAgYKDhYSCfnlyaV9RR0ZDPz09Ozk2NDQzMzArKyssLCsqKioqKiopKSgoKCgoJiYmJiYmJSQkJCQlJSUlJSUlJSUlJSUlJSUlJiYnJyYmJSYoKCcnKCgoKCcnJiYlJSQlJSUlJSUlJSUlJSUlJiYmJiUlJiYmJicnJycnJykoKCgnKCgpKSkpKSkpKCgpKSkpKSkpKSkpKCgoKCgoJycnJygoKCgoKCkpKSkpKSgoKCgoKCkpKSkpKSkpKSkqKikpKSkpKSkoKCgpKSgoJycnJyclJSUkIyMjISEfHx4dHh8gJSksLzQ6PUJHSUlIRkVHSk5PTk5HPjMpKSkpKikoKC1xd2lgZGlqYjUlLjExMjItKiosNUJMTk5TV1tdXFpORjw4SFZZW1tTYGRZW2JtcHRzd3d3dW5qYVpUUVBQTEZHSElGRERFSUpIQ0I/Ozk4ODUxKygoKCkpKSopJykqKyssLi4uLC0sKCUkJCcqLjI2ODg3NjY4Ojs9PDw8Ozo5NjY0NjY2NTc3Ozk4OTc1MjEvLy4tLCwsLCwqKikpKCcnJyYkJCQkJCMkJSgqLjAxLy8wLSkoJiUlJSUlJiYnJygoKSkpKisrLCwtLS0tLi4tLS0tLS0tLi4uLi4uLSwsKysqKisrKyssLS0tLi4uLi4uLi4uLi8vMDAxMTIyMTIzMzMzMzQ0NDU1Nzc3ODc3Nzc4O0BJUVlkaHB0dG1oYVtaU1JWXWBka21tbGlkXlhVT0xIQz9AQEBBQUFAQEBBQUFAQD9AQUFBQUBAPz89PT4+PDs7PD9CR01TVVZYWVlWUk1MSkxOUlRYXGFma3Fzdnd6eXd0cnFxdHZ4eH1/gYGBg4WGhYN/d29jVkdDQDw7Ojk2NDMzMi8uKiopKSoqKiopKSgoKSkoKCcnJyYmJiYmJSQjIyQkJCQkJCUlJSUlJSUlJSUlJSUlJiYmJiYlJiYoJicoKCcmJicnJiYlJSUlJSUlJSUlJSUlJSUlJSUkJCUmJycnJycnJycoKCgoKCgoKCooKCgoKCgoKCgpKSkpKCgoKCgoKCgnJycnJycoKCgoKCgoKCgoKCgoKCgoKSkoKCgoKCgpKSoqKiopKSkpKSkqKSgpKSkoKCcnKCgnJSYmJSQjIyIiISAgHh4fIiUoLC80Oz9BRUhJR0ZFRkxOT05NTkc3JycpKiopKChde21jZWlwaEAhLjIwLy4sKikrLTdBRkpSUlRYXmNeT0VBPU1fZmZqbndxX1lTYGVka3J4eXVtamRbVlNQT0pERUZIRkREREhIR0ZGRkM+Ojg1MispKSkrKissLCgoJykrLC0uLSwuLCopJyYmKCsuNTk4NTQ3OTk8PD08Ojo5NzU1NTQ1NTU1NjUzNjY2MjEwLy8vLi0sLy4uLCsrLCoqKionJSQkJCMkJCQlKSwuMjExMjEuKyglIyUnJyYmJicoKCgoKSorKysrLCwsLC4uLi4tLS0tLi4uLiwtLi4sKysrKioqKisrLCwtLS8uLi4uLi8vLi4vLzAwMjIzMjIxMjQzMzQ1NTU2Njc3ODg4ODg4Nzc5PkVNVV1lbXNybWliXVtXU1ZcX2Nna2lqaWVjW1hUT0xHRURCQ0NEQ0JDQ0JCQUFBQUJCQkJAQD89PDs7Ozs5OTo7QEVLUFJXWVpaWFNQT0xPUVNYWVxhY2hscXN2eXt7eHVzdXV1d3p8gYOEgoKDhYWDgXpxZllIQTw5ODc1NTIxMS4sLCoqKSkoKCoqKSkoKCkpKCgnJyYmJiYlJSQkIyMjJCQkJCQlJSUlJSUmJiUlJSUlJSYmJiYmJScnKCYnJycnJiYnJyYmJSUlJSUlJSUlJSUlJSUlJSUlJCQlJicnJycnJycnKCgoKCgoKCgoJycnJycnJycnKCgoKCcnJycnJycnJiYmJiYmJycnJygoKCgoKCcnKCgoKCcnKCgoKCgoKSkqKioqKSkpKSkpKSgoKSkpKCgnJygoJyUmJiYlJCMiIiEgIB4eHyQmKCwuMzc7PD9BREFAQUVLTE1NTEhDNCgoJykpKiVVd29saG5ycFcmKy8zLy4uLCsqKis4QEtPUlJVVlZZXlFDQ09eZ2tqZ21qVllhXlpXV2NvcnRwbG5pX1lWUk5IQ0BDRUdGRUZHRUZISUlGRD87OTQuKiotKiouMTEuKygnKSssLCwsLSssKywpKSgpLTE2NDM0NTY4ODs6OTg4NzY0MjIyMzMzMzMyMjIyMjEwLy8tLS0tLS4uLi4sLS0qKioqKCYlJSUkJCQkJSgqLjEwMDIxMC4rKCYlJiYmJiYnKCgoKCkqKysrKywsLCwuLi4uLi4tLS8vLi4sLS0tKysrKyoqKiorKywsLS0vLi4uLy8vLy8vMDAxMTIzNDMyMzMzMzQ0NTU2NjY3Nzg5OTk4ODg5OTg7QUlRW2JucnNvbGVgW1tZWFlfY2dpa2pqaGVeW1hTUEpHRURFRkVDQ0NCQkFBQUFCQkJCQUA/PTw7Ojo5OTk5Oj5FSE5SVVdbWllWU1FRUlRWWFtdYGJiaG1wc3d4fHx6eHVzdnh8fH6ChYSCgIKCf355cmlbSj44NzU0MjIwLy4tKywqKikpKCgpKSkpKCgpKCcnJyYmJiUlJCQkJCQkJCQlJSQkJCQlJSUlJSUlJSYmJiYlJScnJycnJycmJycmJiYmJycmJSUlJiUlJSUlJCQkJCQkJSUlJSUlJSYmJicmJycoKCcnJyUnKCcmJiYmJiYmJycmKCcnJycnJyYmJiUlJSUlJSYmJiYmJSUmJicnJycnJycnJycnJycoKCgoKCkoKCgqKikpKCgpKSkoKCkpKSknKCgoKCgoJycnJiQjIyMhIB4eHyAkJSosLTE0Njc6PD07PkBCSUpMSkpGPjIqJygpKCVTeW9jYWdzb10kJy8vLi0tKysqKiosL0JLTVJTU1FQVVtaTEROYmtvb2Vyal9baGVhYU1XZ2xvbWtqZ2NeXVhOR0I/QEFDRUZEREVISUlIRkRCQD03LywsLy8wMzY4Mi4qJygoKSkrLCssLS0uLisrLS0wMDAwMTEyMzY2NzY1NDQxMTEwMTIyMjIxMDAuLy8vLy8vLi4tLS4uLy8xMS8uLCopKSopKCcmJiMlJCQlKS0xMzIzMzMwLywpJiUlJSYnJycoKCgqKisrLCwsLCwtLi4uLi4vLi4vLy8vLi4tKyoqKysqKSkrKysrKyssLi8vMDExMTEyMjIyMjIyMzMzMzM0NDQ1NTY2NjY2NjY4ODc3OTk4ODg3Nzc/Rk9aY2lxdXNuamVgXltZWFxgZWdoa2xpZGBcV1VQS0hIR0ZFRUNDQkE/P0BAQkJBQUFAPz08Ozo5ODc4ODk8QERKT1RXWVtbWVZUVlZYWVtcXV9kZGdobHBydHh8fHt4dXZ4en1/goSFgYB/f358eXJpWkk7NTUzMS8uLSwrKysrKSkpKSgoKSkpKSgoKSgnJycmJiYlJSQkJCQkJCQkJSUkJCQkJSUlJSUlJSUlJSYmJSUnJycnJycnJicnJiYmJicnJiUlJSYlJSUlJSQkJCQkJCUlJSUlJSUmJiYnJicnKCgnJyclJSUlJSYmJiYmJiYmJicnJycnJSUmJiUkJCQkJSUlJSUlJSYmJSUmJiYmJycmJiYmJiYnJycnKCgmJygoKiopKSgoKSkpKSkpKSkpJygoKCgoKCcnJyYjJCMjISAgHx8gIiUoKy0wMjMzNDc6Oz5CREZJS0tKRkI2KicpKSZHfG9gX2ZxcWU3ICwwLi0tLSsrKioqLT1HREdRVFdST1FZWVJKU2JqcV5vdmJlb2hhYGJSUFxkaGpoZF9gYl5ZUUdCQD9AQkNDRERFRkZGRkVEQkA9Ny8tLzEzNDI1NDIwKykoKCgoKioqLC8xMjIwMC4uLS0vLy4uLzAyMjQxMTExMDExMDEyMjIyMTAwLy8vLy8vLy4uLi0uLi8vMTEvLi4sLCwqKSgnJiYkJSQkJCcrLTI1NTU0MTAtKygmJSUmJycnJygoKiorKywsLCwtLi4uLi4uLzAwMTEwMDAwLy0rKysrKyoqKywsLCwrLC4vLzAxMTExMjIyMjIyMjIyMjIyMzQzNDU2NjY1NTU1Nzg3Nzk5ODg4NzY2NjxDTlhhaXF0dnRxamdiYF1bWl1kZ2tqaGhmY15ZVlRQS0hHRkVEQ0JBQUFCQkJCQkJBQD89PDs6OTc3ODg5PEFFSk9RVVdaW1tbWVtbWltcX2FjY2VmZmhrbnF0eHt8end4eHt/gIKDhIJ/fHt7eXVxZ15NPTIwMC4tLCwrKysrKygoKCgoKCkpKSkoJycnJycnJiYlJSUkJCQkJCQjIyUlJSUkJSYlJSUmJiUlJCQlJSUlJiYnJycnJyUoKCcnJiYnJycnJiYlJSUlJSUkJCUlJCQkJCQkJSUmJiYmJiYnJicnJiYnJyUlJSUlJSYmJiYmJiYmJiYmJiUmJSUlJSQkJCQkJCQkJCQkJCQkJSUlJSYmJiUmJiYmJiYnJycnJycnKCkpKSkpKSoqKikoKCkpKCcnJygoJyYmJignJCUjIiIiICAgICAjJykuLzEyMjM3Oj1AQkNGSEpNTEdBNCkoKic2dXZra2pwcWo4HCUtLi0tLS0rKykpKjBGQ0JJUVNRUE9TUk1YWVtga11Lbm92bmlnZF5ZWVZSWWFiZWBcXVtbXFNLRkE/Pj9AQ0ZGRURDRUVDQkFAPDcyLjA0ODcyLTEyMS0sKikpKCkoKSwvMjU1NDQyLi4sLi4tLS8vLy4vLy8vLy8vMDAxMzMzMzIxMTEuLi8vMDAwMC4uLS0wMDAwMC8uLSwsKikoJyYkJSUkJCQkKCsuMjQ1NTIxMS4rKSclJScnKCgoKSsrKystLS0tLi4uLi4uLi4wMDExMTEyMDAvLCwtLS0tLCwtLSwsLCwuLi8vMTExMTExMTEyMjExMTEwMTIyMzQ0NDU1NDQ0NDU2NjY4ODg4ODg4ODY1OUJMVl9qc3h8endya2djYFpYXWFkZ2hoamhkYFxZVlFMSUdGRURDQD8/QkRDREVDQkFAPzs7Ozo4OTo6Ojw/Q0hOU1daXF5eX19fX15eX2JkZmZmZmNiZWhrb3J2enx8enp7fYGDgoKBfnt5dnRzbmleUUEyLi4tKywsLSsrKiooKCgoKCgpKSkpKCcnJyYmJycmJSUlJCQkJCQkIyMlJSUlJSYmJSUlJiYmJicnJSUlJSYmJycnJyYnKCgnJyYmJiYnJyYmJSUlJSUlJCQlJSQkJCQkJCUlJiYmJiYmJyYnJyYmJiYlJSUlJSUlJSUlJSUlJSUlJSUmJCQkJCQjIyMjIyMjIyMjIyMjIyQkIyMkJCQkJSUlJSYmJiYmJyYnJygpKSkpKSkpKSkoKCgoKCgnKSkoKCcmJiYnJiclJCMjIiIgICAiIicpLC4wMTM1ODxCQ0RERkpMT0xHQTIoKCwsbHxra3FybmxBGiMqLS0tLS0tKysqKSktLzlGTFFQUFBQS0xQV15gW2JeV19lcHJvaWllY11bWF1gYWFdXFpVWFhTT0xFPzw9Pj9DQ0JBQUVGQkA/QUJBOTAuMTU1MC0vMjExLy4sKSkpKysvLTAzNTg4MzAuLCwsLS0uLi4tLi0tLi4tMC8wMTMzMzMzMzIyMDAwMDExMTEuLi8wMDAwMDAvLiwrKyopKCcnJiUlJCQkJCUpLDAyNDQyMjEvLSwoJyUlJSgoKCkrKysrLS0tLS0tLi4uLi4uMDAwMDAwMDAxMDExLy0tLS4uLS0sLC0tLS0uLzAwMDAwMDExMTEwMDExMDEyMjIzNDQ0NDU1NDQ0NDY2Nzc3Nzc3Nzc0NDQ4QExXYWp1fH59enZwaWVfWVdbXWNmZmlqaWZiXFpWUUxJR0dGRUJCREZHRkdHRUNCQEA/PTw7OTo6Ojs9QURITlNXWlxfX2BgYWFgYGFjZWdnZ2ZjYGBiZGpvc3h9fHx6ent+gIGAgH14dnRycW1oX1ZGNi0tLSsrKywsLCsrJycoKCgoKCgpKSgnJiYmJiYnJiUlJSQkJCQjIyQkJSUmJiYmJiYmJicnJiYmJiYmJiYmJicnJSUlJigoJycoKCcnJycnJiYmJCYmJiUlJSUlJSUlJSUlJSYmJycmJiYmJSUmJiUlJiYkJCUlJSUkJCUlJSUlJCQkJCMjIyMjIiIiIiIiISIiIiIiIiIjIyMjJCQjIyQlJSUlJSUmJiYmJicoKCgnJykpKSkpKSkpKSkoKCkpKSknJyYoKCYmJyUlJCIiICAhIyMnKSorLjAzOTxAQkZKTU5OT09KRkExKCkqW393bG12c29QICAjLCwsLCwsLCwsKiorMTU6QEhPUk9OS0hLS1VhZFhRWmVpZ2Fja2hbWGRhX19fXF9fXFpZU1FPUlJOSEJAPjw7Oz08PD0/PT09PT9ES0ExKiouMC4vLzMzMjAxLywqLTAxMTAyMTQ4ODMvKyopKSwrLCwsLCwtLi4uLi8vLzAyMTIzMjM0NDMzMjIxMTAwLy8uLjAwMTEwLy4sLCsrKignJyYmJSQlIyQjJicrKy8wMTExLy8tKyknJycoKCgpKSorKyssLCwrKyssLi4uLTAwMDAvLzAxMDAxMTAwLi4tLS4uLS0sLC0tLS0sLi4uLi8wMC8vLy8wMDAwMTEyMjIyMzM0NDMzMzM0NjY2NjY3Nzc2NTQ0NDdATFdjbHZ8gX98dnJpZVxVU1hcYWVpaWppZmJfW1ZSTUlJSEdHRkdISkpKSkdFRENDQD49PDs7PT0/P0FFSE1SVlpeYGFjY2JiYWJlZGVmZmZmY2BdW1xkam5zdXl7e3p6e35+gX55d3Vyb25saWNZTT0uKioqKysrLCspKSgoKCgoKCgoKSkoJycnJiYmJiYlJSUkJCQkIyMkJCUlJiYmJiYmJiYnJyYmJiYmJiYmJiYmJiUlJSYnJycnKCgnJycnJiUmJiYlJiYlJSUlJSUlJSUlJSUmJicnJiYmJiYmJiYlJSUlIyMjJSUlJCQkJCQkJCMjIyMiIyMiIiIhISEiIiIhISEhISEhIiIhISIiIiIjJCQkJSUlJSUmJiYoJycnJycpKSkpKSkpKSkpKSkpKSkpKioqKicnJycmJCQjISEhISIkJykqKy0vMTY+QkZJTVBSUlRSSkY/LigpOXpyaW53d3FUISAiJiwsKyssKyssLCoqKi8wNT5GSUxMSUpMTUxYYmNZRUhTVF9mbGRkYV9gYmlrZV5eX15dWlJQUVNSTEVCQT48ODc3ODg5ODk5OTk7QlBJMSopLC0wMjI0MjEvMC8vMDIzNDQ1MjIyMzMwLSopKiopKysrLS0tLS4vLy8vMC8wMTAwMDIzNDQzMzMzMjIxMTAwLi4vLzAwLy4vLS0sKyopKCkoJiYlJSQjJCQkJygqLS4vMDEwMC8uLCknKCgpKCgpKiopKywsLi4uLi8vLi0vLy8vLi4sLS8vLy8uLi4uLS4uLi0tLCwsLCwsLC0uLi0uLy8vLy8vMDAwMDAwMTEwMDAwMjMyMjIyMjMzMzMzNDU1NDQ0NDQ2OUBMWWNwdnt7fX13cWhfVlBRV1xhZWhqamxnZGFcVlJNTEtKSkpLTExNTUxJR0ZEQ0A/PTw8PD09Pz9DR0hNUlZZXV9fY2RkZWJkZGVlZmZmZmNdXVpYW2FmbHBzeXp7e3l6fn59eHZycG1ubGplXlRDMSspKikqKisqKCgnJycoKSkoJykpKCcnJycnJiYlJSUlJSUlJSQkJCQlJSYmJiYmJicnJycnJyYmJiYmJiUlJycmJicnJycnJycnJiYmJicnJSUmJSUlJCQlJiUlJiYlJSUlJSYmJiUlJycmJiUlJSUkJCQkIiMjIyQkJCQjIyIiIiIiIiEhISEhICEhISEhISAhICEhISEhHh8jIyIiISIjIyQkJCUlJSUlJicmJigoKCgoKCkpKSkpKSkpKSkpKSoqKiooKCgoJiUkJCIiISEhJCgpKisrLi81PUFFSlNVVFRWUUpFOyopKFR1cW1zeXRlKiAiISUqLCwqKiorLC4sKysrKjM9QkhLR0hIRkRGUF9TRktTUVRiZ2VpamZeX1xiamRaWFtcXFpTUFRWU1FMQ0I/Ozo3NTQ0NTQ1Njg4OkFFQDgsKSssLjMzNDQyMjE0NTY2NTY3NjMxMC8vLCsqKSgoKCgpKy0tLS0uMC8wMTEvLy8vMDAwMTMzMTIyMzMzMzExMC8sLS8uLi8tLiwtLCsrKyopKSgmJCQkJCQjJCQkJygrLCwvMDIyMS8tKyopKSkqKioqKiorLC4uMDAvMC8tLi8vLy8vLi4uLi8vLy8uLi4uLi4tLCwsKysrKywsLS0uLi4uLy8vLy8vMDAvLy8vLy8vLzAwMTIyMjExMTExMTIzMzM0NDM0NTc4QU5ZZW53ent8eXVvZVhQUFFUWmJmZ2pramdkYl1YUlBPTU9NTk9PTk5MSUhGRURAQD8+PTw+Pj4+QUVJTlFVW11dYWNlZmZmZ2ZmZ2dmZmRiX1tVUlFWXmRoa3J2enx6e3x6enh1cXJsbGtpZl9YSjosKSsqKSkpKSgoJycnKCkpKCcpKSgnJycnJyYmJSUlJSUlJCMkJCQlJSUmJiYmJiYmJiYmJycmJiYmJiYlJScnJiYnJycnJycnJyYmJiYmJiYmJiUlJSUlJSYlJSYmJSUlJSUmJiYlJSUlJiYlJSUlJCQkJCMiIiIjIyMjIiIhISEhISEgICAgIB8gICAgICEhISAhISEgIB8hJCQhISEiIyMkJSQkJSUmJiYnKSkoKCgoKCgpKSkpKSkpKSoqKioqKioqKCgoKCclJCQjIyIiIyYoKSkqKy4uNDg+SEtSVlVVUktIRDkpKCxrc2pxeHNpNx0kIiMnKisrKiopKywuLywqLCs1QUdHSUlGQD87PUZSSj9JUllraGZoaGNlZ1xQXWdhWFRXWFpaVlFVU01NSkNDQD09Ojc1NTUzNDY4ODw+Pj48MCkpKy0wMTQ0NDM0Njg4ODc1NDMxLy0tLSwrKikoKCgoKCkqLC4uLzAvMDExLy8vLy8vLzAxMTEzMjM0NDQ1MzIwLywrLi4vLS0tLSwrKyoqKysoJyclJCYkJCQkIyYmKCorLjEzMzIyMC8vLCoqKysrKywsLC4wMDAwLzAxMTAuLy8vLy4uLi4vLy8vLi4uLi8vLSwsLC0tLS0uLi0tLi4uLi8vMTExMTAwLy8vLy8vLy8vLzAwMjIxMTIyMjIyMzMzNDQ1NDU3NjpDTlljanN5eXl1cmpfVk9TUldcYmdta2xraWViXFhXUlFQUE9QUE5OSkhHRUREQkBAPz89Pz9BQUNFR05RVVtdXmJkZ2loZ2hnZ2dnZmVkYV1YUk9OT1JZYWdscHR4e3p5enp4eHdzbW1saWdkXFNDNC0qKSgoJycoKIGAgYCAgH9/fn5+fn5+fX18fH19foCAgYGBgYGBgYCAgIB/f39/gICAgH9+fn5/f35+fn5+fn19fX19fX19fX1+fn5+fn5+fn9/f39/f39/fn5+fn5+fn5+fn5+fn5+fn18e3p6enp5eXl5eXl5eXl6fYCChYaJiImIiIiJiYiIhoWDgn9/f3+BgoODgoB8e3p6enp6fH1/gYODhYWEgoB/fn+BgoGBgYCBgYOGh4eEgoOIhISCgH5+fn5+fn5+fn5/gIGDg4KBgYGBgYGBgH59e3x8e31+fn5+fn5+fX19f4CBg4SEhYaHh4OBf359fX19fHx7e3t7fHx7fXx8fX5/f4CAgICAf4CAf358fHt8fn9+fn9/gICAgYGBg4ODgH17eHd5en5/gICAgYGBgYB+fXx9fn5+fn9/goSBf318gYCBgICAf39+fn5+fn59fXx8fX2AgICBgYGBgYGBgICAgH9/f3+AgICAf35+fn9/fn5+fn5+fX19fX19fX19fX5+fn5+fn5+f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fXx7enp6enl5eXl5eXl5eXp9gIKHiIiIiIeEhISEhISDhIOAfn5+f4GCg4OCgHx7enp6enp7fX6AgYKDhISDgYB/gIKDg4OCgX+BgoOFhYWBfnh7goWEgn9/fn5+fn5/f4GCg4ODgoGBgYGBgYGAf317fHx7fX19fn5+fn59fX1+f4GDhISFhoeHg4F/fn19fX18fHt7e3t8fH1+fn59fn9/gICAgIB/f39+fHl5e3x+f35+fn6AgICBgYKBgX9+fXt6eXp7fn+AgICBgYGBgH59fH1+fn5+f3+ChIF9e3mBgYGAgICAgH9/fn5+fn19e3t9fn+AgICBgYGBgICBgYCAf39/f4CAgIB/f39/fn5/f35+fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn5/f319fn5+fn5+fn5+fn5+fn59fHx6eXl6enl5eXl5eXl5e32Ag4WIh4aDgoGAgYODhIWFgn5+fX1/gYKEhIOCf3x7ent7enp7foCBgYKEhIOBgICDg4ODgoKCgoGBg4OFhIB5c3N1gIaIgX5+fn5+f4CBgoODg4GBgYGBgYGBgoGAfXx9fX19fHx8fX5+fn19fX1+gIKDhYWGhoeEgn9+fn19fXx7enp7fH19f3+AgICAgIB/f39/gIB+fXx7eXp7fH5+fn19f4CAgYKCg4KBf319enp5enx9gICAgIGCgoKAfn58fn5+fn5+gIKDgX55eYGBgYCAgICAf39+fnx8fX19fX5/f4CAgIGBgYGAgIGBgIB/f39/gICAgH9/f39+fn9/fn5+fn19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn18fHp7e3p6eXl5eXl5eXl5fH+ChISCgYF/gYGEhYaGh4SBfXx7fX+BgoSEg4KAfXt6e3t7e3t9foCBgoSEg4GCgoODg4ODg4OBf3+BgYSDf3l2dXZ6f4OAf35+f3+AgYOCg4OBgIGBgYGBgYGCgX99fH19fX18fHx9fn5+fn18fX1/goKEhYaGh4WDf35+fX19fHt7e3x9gICBgYGBgICAgH9/f39/f3x7eHd4eXt8fn59fH1/gICBgoKEg4F/fnx7enl7fH2AgIGBgYKCgH99fXx+fn5+fn6Bg4SAe3l5gYGBgICAf39+fn19fHt9fX1/f39/gICAgYGBgYCAgICAgICAgICAgICAf39/f319fn5+fn59fX18fH19fX19fX19fX1+fn5+fX1+fn9/f39+fn5+fn5+fn5+fn5+fn5+fX18fHt7eXl5eXl5eHh4eHl6fIB/gYCCg4ODg4aHh4WEgn18e3t8f3+Bg4ODg4F/fHt6enp6fH1/gIGBgoSEhIODhISDg4ODg4F/fn+BgYGBgH59fHp7f4KBgIB/gIGChIODgoKAf4CAgIGBgYGAfnx7fX19fX19fH1+fn19fX18foCBg4ODhIWGhIKAfX5+fXx8fH1/gICAgoODgoGAgH9/gH9/f358eXh3d3h6fH19fXx7fH9/gYKChYWDgoB+fHt7e3x+f4GBgoKDg4KBfXt6fX9+fn5+fn+ChIF7eXiBgYGAgIB/f319fHx7enx8fX9/f3+AgICBgYGBgICAgICAgICAgICAgIB/f39/f39+fn5+fX19fXx8fX19fX19fX19fX5+fn5+f35+f39+fn5+fn5+fn5+fn5+fn5+fn59fXx8e3t6enl5eXl4eHh4eXp7foGCg4SFhYWFhoeHhYKAfHt7e3x/f4GDg4ODgoB9e3p6enp6fH6AgYCBgoSEhISEhIODg4OBf318fX9/f359fX1/fn1+g4WDgYCBg4SDg4KBgX5+f4CAgYGBgYB+fHt9fX19fX19fn5+fn19fHx9f4GDg4OEhYaEgoB9fn5+fn5/f4GCg4OCgoKBf4CAgH58fX9/fXp5d3Z2eHp8fX19fHt8f3+BgoKFhYOCgH59e3x8fX9/gYGCgoGCgX17eXp8fn5+fn5+f4KDgn17eYGBgYCBgYB+fnt8e3t7e3x+f39/f3+AgICBgoKAgICAgICAgICAgICAgICAgIB/f39/fX19fX18e319fX19fX19fX19fX19fX5+fn5+fn19fn59fX19fX1+fn5+fn5/f319fHx8fHt7enl5eXh4eHh5e3x+goSEhoaGhoaFhoaEf317ent7fX5/gIGCgoOCgX97e3t6ent7fX6AgICBg4SEhIODg4ODgoB/fH1+fn5+fX2BhIiJg319goSEgoSHh4OCgoF+fHx8f4GCgoGBgH59fHx8fX19fX19fn5/fnx7e31+gYODg4SFhoWDgX9/f3+BgYKDg4SEg4GAgICAgIB/fn1+fn59enl2dXV3e3x9fXx8enx/gICCgoWFg4OAf359fn5/f4GBgoOBgH58end4en1/f39/f35/gYSCf3x6gYGBgH9/fn19e3t7enp7fX5/gH9/f4CAgIGBgYCAgICAgICAgICAgICAgICAgH9/f399fX19fHx7fX19fX19fX19fX19fX19fn5+fn5+fX1+fn19fX19fX5+fn5+fn19fX18fH18e3t6eXl5eHh4eHl7fX+ChISGhoaGhoWGhYJ/fHt8e3t7fX+AgYKBg4OCgHx7e3p6e3t8fYB/gIGBg4SEg4ODg4KBf359fYCAfn6AgH5/gYF/fXt7g4WGhoWEhIGCgH59fH9/gYKCgYGAfn18fHx9fX19fX1+fn5+fXt7fH+Cg4ODhIWGhYOBf39/f4CBgoODhIODgYCAf39/f39+fX5+fn16eHV0dHd7fn99fHx6fH+AgIKChYWDg4KAgX9/f4CAgYKCgoGBfnx3dnd7f39/f39/fn+Bg4OAfXuAgICAf35+fXt7enp6e35+fn5/gICAgYGBgYCAgICAgICAgYGBgYGBgYGBgYCAf39+fX19fHt7e3t8fHx8fHx8fX19fX19fX19fX5+fX19fX19fn59fX19fX19fX19fX19fX19fHx8enp5eHh4eHd4eX1/gIOFhYaGhIWFhYSDf3x8fHx8fHx8fn+AgoGDhIOBfnx7enp7e3x9fX6AgYCChISDg4KBgYB/fn5/gH9/fn6BgH9/fn18fHl+f4J/gIF7dnZ6fH18f3+BgYODg4F+fHt7e3x8fH18fn19fn59fXt8foGCg4ODg4aFg4B/f4CBgoODhISDgoKBf35+fn5+fn1+fn5+e3h1c3N0d3t8fX18e3t9gIGBgYOGhoSEg4ODg4GAgYGBgoOEg4F/end2eXx+f39/fn5+f4GEhIF+eoCAgIB/fn18e3t7e3t8fn5+f3+AgICBgYGBgICAgICAgICBgYGBgYGBgYGBgIB/f359fn18e3t7e3x8fHx8fHx9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18fHx6enl4eHl3eHp7f4GCgoOFhoaEhYWFhIF+fHx8fHx8fHx9fn6AgYOEg4KAfXp6ent7e3x9f3+AgIKEhIODgoF/f319f359fH1+f4B/fn18enh5enh8goF+eHRxcXJ0d3x/f4GBg4ODgX59fH19fHx9fXx+fX19fXx8e3x+gYKDg4ODhISCgIB/gIGCg4ODg4KBgYB+fXx8fX1+fX5+fX15dnNycnN3e31+fXx7e32AgYGBg4WFhISEhIODgoGBgYGChIWDgX15dnd5fn9/f39+fn5/f4KFg397gICAgH59fHx7e3x9fX1+fn5/gH+AgIGBgYGBgYCAgICAgICAgYGBgYGBgYGAgICAfn5+fXx7enp7e3x8fHx8fHx8fX19fX19fX19fX19fHx8fHx9fHx8fH19fX19fX19fX18fHt8e3x6enl4eHd5fH6Bg4ODhIWEhISFhYSBf358fHx8fHx8fH19foCAgoKDg4F+fHt7fHx7fX5/f4CBgoSFhIOCgH59fX6AgX18fX5/f398e3t6enl3dnZ8f4KCfnh0dnh6fX6AgIGCg4OBfn18fHx8fH19fX19fX19fHt7e32AgYODg4ODg4KAf4CBgoKCgoGBgYCAfXx7eXt8fn5+fX19enh1c3FxcnZ6fX59fHp8foCAgIKDhYWEhISEg4ODgoGBg4OEhYOAe3h2eHl+f39/f35+fn+Ag4WEgHyAgH9/fX18e3x8fH19fX5+fn+AgICAgYGBgYGBgICAgICAgYGBgYGBgYGBgYCAgIB/fnx8e3p6enx8e3t8fHx8fHx9fX19fX19fX19fn5+fnx8fHx8fHx8fX19fX19fX19fXx8e3t7e3p6eXh5eHt+gIKEhIOEhISEhISEhIF9e3x8fHx8fHx8fX1+f4CCgoODgX98e3t8fHt8fX5/gIGCgoSEg4B+fn1/f4GBgIB/f39+fnx6ent7enh4dnd7f356ent8fHx8fYCAgYKDg4F+fXx8fHx9fX19fX19fXx7e3l6fYCAgoODg4ODgoB/gICBgYGBgX9/fnx5eXh5e35/fn59fXx5d3RxcHBzdnp9fnx7e31+gICAgoOFhYSEhISDg4KBgYGCgoOEgn97eHZ4fH9/f39/fn5+f4CDhYSAfH9+fn19fH19fn5+fn1+fn5/f4CAgICBgYGBgYGBgYCAgYGCgYGBgYGBgYGBgYGBf39+fXx7e3t7e3t7e3t7e3t8fHx8fX1+fn5+fX5+foB/fHx8fHx8fHx9fX19fX19fX19e3t7e3t7enp5eXl7foCCg4KDhISEhISDg4OBfXx8fHx8fH19fH18fX1+gIKCg4OEgH15e3x8e3x8fX+AgYKDg4SCf31+fn9+fHl6f39+fX1+f39+fHx9fXx7d3Z5eHV5gH57ent+gYGBgYODgX5+fX19fX19fX19fHx6eXp5eXp9f4GCg4ODg4KCgYGCgoGBf39/fXx7eXd2d3h8fX59fn59fHh1c3BucHJ1eX1/fHt8fn+Af3+Cg4WFhYWEgoKBgoKBgYKCg4KBfXp3dnp9gIB/f39+fn9/f4KGhoF+f35+fX18fX1+fn5+fn5+f4CAgICAgIGBgYGBgYGBgICBgYKBgYGBgYGBgYGBgYF/fn18e3t7e3t7e3t7e3t8fHx8fHx9fXx8fHx7fX5+fnx8fHx8fHx8fH19fX19fX19fHx7e3t7enp6enl5enx/gIGCg4SCgoKCgoKCgYB9fHx8fHx8fX18fHx9fX6AgoKDg4SBfn19fHx9fn9/f4CAgYKDhIJ/fX5+fXp0c3d9f359fH1+gH9/gIKEhIJ8dHN3d3l+gHt6e36BgYGBg4OBfn59fn59fX19fX17e3l5eHh3eHt9gYKDg4OCgoGBgYGBgICAgH57enl3dnZ3en1+f39/fnx6d3VycG5ucHV5fX98e3x+f4CBgYKDhYWDg4KBgYB/gICAgYGCgX98end4e4CAgH9/f39/f39/goSEgX5/fn59fn5+f39/f39+f39/gICAgIGBgYGBgYGBgYGAgIKCgoKBgYGBgYGBgYGBgH5+fXx7e3t6ent7e3t7e3x8fX19fX19fX19fX19fHx8fHx8fX19fX19fX19fXx8fHx7e3t7e3t6enp6eHp8fYCBgIKCgoGAgICAgoJ+fn18fHx8fHx8fH19fX19foCCgoODhIOAfnx8fX5/gX9/f4CBg4ODgoB9fn58fHl5fH2Eh4WAfn6AgIGDhISDgX53c3V3en19fHp8f4GBgYKCgoF/fXx9fX19fn59fHp5eXh3dXR2eX2AgoODgYGBgYGBgYGAgH59fHp4d3Z1dXZ5fn+AgYF/fHp1c3Fwbm5wdXp9fXx7fH5/gICAgYKEhIOBgYF/gICAgICBgYGAfXp2dnl8gICAgH9/f39/f3+BhISBfn9+fn1+fn5/f39/f39/f4CAgICAgYGBgYGBgYGBgYGBgoKCgoGBgYGBgYGBgYGAfn18e3p7e3p6e3t7e3t7fHx8fH19fX19fX19fX18fHx8fHx9fX19fX19fX19fHx8fHt7e3t7e3p6enp4enx+gIGBgYGBgH+AgH+BgH17enx8fHx8fHx7fH19fX1+gIKCg4KDg4B/fn1+gICCgH9/gIGBgYODgn5+fn19e319gIGDhYKBgICBgoKCgoGAfXlzcHJ3e3x6e3x/gYGBgoKCgH59fH19fX19fXx6eXh3d3V0cnR4fYCCgoKBgICAgICAgH9/fXx6eXd2dXN1dnp/f4CAgH58eXV0cnBubnB1en19fHt8fn+AgICBgoSEg4GBgX+AgH9/f4CAf356d3V1eXyAgICAf39/f39/f4GEhIF+fn5+fn9/f4B/f4CAf4CAgICAgICBgYGBgYGBgYGBgYGBgYGBgYGBgYKCgYGAgIB+fXx7e3t7e3t7e3t7enx8fH19fX18fHx8fX19fX19fX19fX5+fn5+fn19fX18fHx6e3t7e3p6enl5eXl8foCBgYKBfn19fn+AgYGAfXx8e3t8fHx8fHx9fX19fX6AgYGCgoOCgX9/f4CCgoOBgICAgIGBgoSDgX9+f398fHx+gYGBf31/gYGDhIKBgH17eHRvbHV8fnt7fH+AgYKCg4OBf318fHx8fHx8e3l4d3d2dHNwcnZ7foCCgoCAf318fH1+fn18eXh2dnVzc3R3fH6AgYCAf3x5dnRzcm9tcHR5fX18fH1/f4CAgIKCg4OCgYGBgYGAgH5+fn59enh1c3Z6fYCAf39/f39/f39/gYSDf31+fn9/f4B/f39/gIB/gICAgICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgoKBgYCAgH59fHt7e3t7e3t7e3t6fHx8fX19fXx8fHx9fX19fX19fX19fn5+fn5+fX19fXx8fHp7e3t7enp6eXl5en1/gYGCgYB+fX1+gIGBgH17fHx7e3x8fHx8fH19fX19fn+AgYKCg4KBgICAgYKCg4GBgICAgYGChIOBf357eHl8fH6BgYKDgYKDhIOCgoB9e3l3dW9rc3x9e3t8f4CBgoKDg4B9e3p8fHx8e3t6eXd2c3Jwb25vdXp9f4GBf35+fHp6e3x9fHp4eHZ0c3JydHd9f4CAgIB+fHh0dHJxb25wdHl9fXx8fX9/gICAgoKDg4KBgYGBgYCAfn59fXt4dHJzdnt+gIB/f39/f39/f3+BhIJ/fn9/gIB/f39/gICAgICAgICAgIGBgoKCgoGBgYGBgYGBgYGBgYGBgYGCgoKBgICAgH9+fXx7e3p6e3t7e3t7fHx9fX19fX19fX19fX1+fn19fHx+fn5+fn59fX19fHx7e3p6enp5eXl4eHp7f4GChIOBgH19foCCgoJ/fHt7e3t7fHx8fHx8fX19fX5+f4CBgoKCg4KBgICBgYOCgYGAgIGAgoODg4KAfnx7fHx+f3+ChoeHhYSDg4GAfXt6eXp4dG1xenx6e32AgYGCgoODgX57ent7fHt7e3p4d3ZzcW5tbG1yeX1+f39/fHp5eHh6e318eXh3dHJxcHFzeH1/gICAgH58d3RzcnFvbnB0eX19fHx+f3+AgICCgoODgYGAgYCAf39/fXx5eHRwcXJ3fX+AgH9/f319f36Af4CCgX99gICAgH+Af4CAgICAgICBgICAgYGCgoKCgYGBgYGBgYGBgYGBgYGBgYKCgYSFhYaGhIJ/fn19fX1/f39/fn58fH19fX19fX19fX19fX5+fX19fX5+fn5+fn19fX18fHt7enp6enl5eXh5e36BgoODgoGAgICAgYKCgX98e3t7fHx8fHx8fHx9fX19fn5/gIGBgYKDg4KBgYGBg4KBgYCAgYCBgoODgoB+fn19fX5/gYSEhYWEhYWCf358enl5eHh2cG53e3p7fYCBgYKCg4OBfnt6e3t7e3t6eXh1dHFua2ppa3B2fH5/fXp4d3Z2dnh7fHx6eXd0cnFwcXV5foCBgIB/fnx2dHNycnBucHZ7fX18fH5/f4CAgIKCg4OBgYCBgIB/f318enh0cW5vcnd9f4CAf399fHx9foB/gIGBf32AgH9/gICAgICAgICAgIGBgYGBgYKCgYGBgYGBgYGBgYGBgYGBgYCBgYOFiImJi4uIh4OAfoCCg4OGhoWCgX59fHx8fX19fX19fX5+fX1+fn5+fn5+fn5+fnx8fHx8e3t6enp6eXl5eXt+gYODhISCgoGBgYCBg4KBfXx7e3t8fHx8fHx8fH19fX19fX+AgIGAgISEg4OCgoKEg4J/fX5/gICBgoKDgn5/f39/f35/gIKChISDgYF+e3t6enl4d3dwbnV5eXx9f4GBgoKCgoB9e3p7e3l5enh4dnRxb21raWZpb3Z8f357eHZ0c3N0eHp7enp5dnRycXBxdHl/gICAgIB/enZ0c3NycXFyeHx8fHx9fn9/f3+BgoOCgYCAgIGAgIB+fHp4dnJva291eX5/gIB/f356fH6AgICAgYF/foGBgYGAgICAgYGBgYCAgYGBgYGBgoKBgYGBgYGBgYGBgYGBgYGBgIGDhIWIiYmJiYmIh4WDhYeIiYqJh4eGg4B+fn19fX19fX19fn59fX5+fn5+fn5+fn5+fHx8fHx7e3l5eXl5eXl7f4KChISFhYOCgYGBgIGCgIB8e3t7e3x8fHx8fHx8fX19fX19fX6AgYKCg4ODg4KCgYKDgn99fH2AgYKCgoODf39+fX9/f3+BgoKDg4KBfnx7e3p6eXh3d3ZzdXl5fX5/gYGCgoKCgH17ent7e3t7enh2dXJvbGpnZmlvdnx/fnt4dnR1dHV4ent6eXh2dHJxcHF1e3+AgICAgH97d3V0dXNyc3V4fHx8fH1+f39/f4GCg4KBgICAgYCAf358end0cW5rb3V7f4CAgH9/e3l7fYCAgICBgX9+gYGAgIGBgICBgYGBgICBgYGBgYGBgYGBgYGBgYGBgYGAgICAgICAgIGBhIeIh4iIiIiHh4aGiIeJiYeHiImIhIJ/fn59fX19fX1+fn5+fn5+fn19fn5+fn19fHx7e3p6eXl4enl7fYCBhISFhYWEhIKBgYGAgYKAfXt7e3t7fHx8fHx8fHx9fX19fX1+f4CBgoKCgoODg4ODg4KAf318foCAgYKDg4OAf36AgIGCgYKCgoKCgX58e3p6eXh4d3d3eHRzeHp8f4CBgYGAgoKAfXt6e3t7e3p6eXd1cm9saWZlZmx1fH6AfHl4dXZ2d3l6fHt6eXh2c3JzdHh9gICAgICBf3p4dnd2c3V1dnp9e3t7fH+AgH9/gIKDgoGBgICAgIGAf315dnFvbGxwdn2AgICAgH16eHt+gICAgICAfn2BgYCAgYGBgYGBgYGAgIGBgYGBgYGBgYGBgYGBgYGBgYCAgICAgICAgYGBgoOCgoKDhYaGhYWGhYWFhYWFhoiIhoKAfn19fX19fX5+fn5+fn5+fn5+fn5+fX18fHt7enp5eXh6fH+ChIWGhoaGhoSCgoGBgYGCf357ent8fHx8fHx8fHx8fH19fX19fX5/gIGCgoKCg4ODg4ODgn9+e3t+gICBgoODg4KAf4CCgoOCgoKCgoJ/fHt6enp5eHh3d3d3c3N5e3x+gIGBgYCCgoB9e3p7e3t7enp5d3Vyb2xpZmVmbHV8fn59e3p4eHp7fX6AgH9+fHt5eHh5fH6AgICAgIGBfnt5eHd2dXR2eXt7e3t8f4CAf3+AgoOCgYGAgIB/gIB/fXl2cW5ra3J5fn+AgICAfXh3en6AgICAgIB+fYKCgoKCgoKCgYGBgYGBgYGBgYKCgoKBgYCAgICAgICAgICAgH9/f3+AgH9/fnx9fX+BgoSFg4F+e3t+foCDhoeIhoOAfn59fX19fX1+fn9/fn5+fn5+fn59fXx7e3t6enl6e32BhIeGhYWFhYaGgoOAgYCAgH58fHt7e3t6ent7e3t7e3x8fX18fH19fH1/gIGBgYODg4ODg4KAf318fH2AgYKCgoKDg4KCg4WEhYODgoKBgH98e3p6enl5eHh2eHd0cnZ6fn+AgYGBgYODf3x7eXp7fHx7enl4dXRvbGpnZmhsdXx+fn59fHx8foCAgoKCgoF/gH59fn5/f4GBgICAgIGBfnt5eXd1dHZ6fHx8fX5+gH9/f4CCg4KAgICBgYCAf399eXVwbGpsdHp+f4CAgH97d3V6foCAgICAgH9/goKCgoKCgoKBgYGBgYGBgYGBgoKCgoGBgICAgICAgICAgICAf39/f39/f39+fH19fn+AgYF9eHd4eHl5fICChoWFg4KAgH9/f39/f39/f39+fn5+fn5+fn19fHt7e3p6enx9gIKFhoWGhYWFg4OBgYGBgX98enp6e3t7e3p6e3t7e3t7fHx9fXx8fHx8fX+AgYGBg4ODg4OCgX9+fXt7fICBgoKCgoODg4SFhoWFg4OCgoOBgH17enp6eXl4d3h4eHRxcnl8f4CBgYGBgYF/fHt5ent8fHt6eXh1dHFua2hnaW11fH5+fn59fn+AgYODg4ODgoGCgIB/f4CAgYGAgICAgYGBgH57eHZ1d3p8fHx9fn6Af39/gIKDgoB/gICAf39/fn15dXBsbHB1fH9/f4CAfXl2d3p+gICAgICAf3+CgoKCgoKCgoKCgYGBgYGBgYGAgICAgYGAgICAgICAgH9/f39+fn5+fn5+fn19fHx9fX9+enh4eXp6e3t8foCDg4SGhYSDg4CAgICAgH9/f39/fn5+fn5+fX18e3t7enp6fYCDhYWEhIWFhYSCgYGAf4B/fHp4eHh6ent7enp7e3t7fHx8fH19fHx7e3t8fH+AgIGCgoKDg4GAfn18fHt8f4CCgoODg4WEhYWGhoaEg4ODgoKAfXx7enp5eXh4eHl2c25wd3x/gIGBgYGAgH98e3p6en19fXt6eXd0cm9raGhpbnZ8f39+fX1+gIGChIODg4OBf39/f39+gIGAgH9+fn5/gIKBgH56d3V3eXx8fH19gIB/f3+Ag4SBf31/f39/f39+e3d0b2prcHd9gICAf399eXV4e3+AgICAgIB/foKCgoKCgoKCgoKBgYGBgYGBgYCAgICBgYCAgICAgICAf39/f35+fn5+fn5+fX18fHx8e3t4eHl7e3t8fH19foCCg4SFhYaGhoaGhoaFgX9/fn5+fn5+fn59fXx7e3t6ent+goSEhISFhIOCgX9+fnx8e3p4d3l6enp6enp6ent7e3t6ent7enp6ent7e3x9gICAgYKCgoKCgH99fHt7ent+f4KCg4ODhIWHh4eGhIKBgYGCgoB9fHt6enl5d3d4e315dHJ3fH+AgYGBgYODgH19e3x8fX18fn59eXdzcG9samtvdnt9f39+fX5/gIGCgIB+fHp5eHl5enx/gICAf359fXx+gIKDgXx3dXd5fHx8fX1+fn9/f4CDhIF/fH5+fn9+fn17d3Jta210en5/gIB/f315dXh7f4CAgICAgH9+g4ODg4KCgoKCgoGBgYGBgYGBgYGAgICAgIB/f4CAgIB/f35+fn59fX19fX19fH5+fX18fHt7e3t7e319fX1+fn+AgoOEg4aHiImJiomFgH1/f35+fn59fXx8e3t7e3t8fYCEhISEhYaEgX9+fXx5eXl5d3d3eXp6enp6enx8e3t7enl6enl6enp6e3t6e35/gIGBgYKCgYGAfn19e3t7e3x+gIGCgoOEhIWGhoWCgIB/gIF/fn57enl5eHh3d3h4e3t1dHh8fX+BgYGBgoKBfn18fHx9foCBgYB8enZzb25ubnJ6fX9/f39/fn6AgH98enh3dnRycXJ1eX6Af4CAfn58fHx9goSEfnh3eHp8fHx+fn5+f39+gIKDgn9+gH9/f39+fXt1cm1qbnZ9f3+Afn9/fHh1eHx/gICAgICAf36Dg4ODgoKCgoKCgYGBgYGBgYGBgYCAgICAgH9/f39/f39/fn5+fn19fX19fX18fX18fH19e3t7e3x8fX19fX19fX5+f4CCg4WHiIiJiIaBfn19fn5+fn19fHx7e3t7e3x+gYKChISEgn57enh3dnd3d3d3d3d5enp6enp6e3t7e3l5eXl7eXl5enp7e3p7fH5/gIGCgoKBgX9+fXx7e3t7e32AgYKCgoOEhYaFg4B/f39/fHt9fXt5eXl4eHd3dnZ3dnd2d3p9f4GBgoKCgoF+fXx8fH1/gYOEhIF9eHZ0cnN0eHt+f39/f39/f39+enl4d3Z1c3FwcXR5foB/gICAfnt2eHp+g4OCfHh5enx8fH5+fn5+fn6BgYKCgX9/fn5/f359eXVwbm1xeX5/f4B+f4B8d3V4fH+AgICAgIB/foODg4OCgoKCgoKBgYGBgYGBgYCAgICAgICAf39/f39/fn5+fn19fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fHt7fX2Ag4ODhISFhYSAfX1+fn59fX18fHt7enp7fX6Bg4SEg4N/e3h2dnd3dnZ4eHd4eXl6enp6enp6eXt7enl6enp6eXl5eXl6e3t8fX+AgYKCgoGAf359e3x8enp8fH+BgYGBgYKEhIOBfn5+fnx2fIB+fHp5eXh4eHd2dnV2eXd2eX1/gYGCgoKCgX59fHx+f3+Bg4WEg4B8enl5e3t7foCAf39/f3+AgH55eHh3dXV0cnJzdXp+gICAgoN9eXV0d3t/g4J9e3l6e3t7fH19fX5/fn+AgYKCgX9+f39/fnx6dXFvb3R7f4CAf39/gHx3dXh8f4CAgIB/f4B9g4ODg4KCgoKCgoGBgYGBgYGBgICAgH+AgIB/f39/f39+fn5+fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fHt8fH1/gIB/f4GDhIB8fH5+fn19fXx8e3t6ent9f4KDg4OCgHx5d3Z2dnZ2dnh4d3h5eXp6enp6enp5eXl5eXl5eXl4eHl5eXp7e3x9foCBgoKCgYB/fnx7fHx7e3x8f4GBgYGBgoOCgH98fH17eHmAgn99e3l5eHh4d3h6eHZ2dHZ5fX+BgYKCgoKBfn18e3x8fYCBg4OCgH9+fn1+f39/gICAfn9/gIGBfnt5eHd1dXRzc3R3e3+AgICAgYB8dnN0eX6Bg4B8enp7e3t8fX19fn99fH1/gYGAf39/f39/fnl1cW5vdXx/gIB/f39/fHZ1eHx/gICAgICAgH2EhISEgoKCgoKCgYGAgH9/gICAgH9/f39/f39/f39/f319fX18fHx8fHx8fHx8fX19fXx8fHx8fHx8fHx+fn5+fn59fXt9fn18e3yAhIWEfXl6fX59fX19e3p6ent7fYCCg4SEg4F+enh3d3d3d3d3eHh5eHl5enp6enp6enp7e3l5eHh5eXh4eXl5eXp6fH2AgICBgoKCgn9+fHt8fHx9fH6AgIGBgYGCgoKAfXx6fHt4e4GDgH17eXh4eHd4e396dXNzdnt9f4GBgoKDg4B9fHp6enx8fn9/gICAgICBgYGBgICAgH5+f4CAg4B+e3l4eHh2dnN1dXp+gH+AgICCgH15dXR3fICCgX56e3t7e3p7fX1+fn17eXp9fn9/f39/f398eHRwbnB3fX5/f39/f354dHR6fX9/gICAgIB+fISEhISCgoKCgoKBgYGBgYGAgICAf39/f39/f39/f39/fXx8fHx8fHx8fHx8fHx8fHx9fX19fXx8fHx9fX5+fn5+fn5+f39+fn18foOHh4J8eXp9fn19fX18e3p6e36Bg4SEhISDgHx5eHd3d3d3d3d4eHl4eXl6enp6enp6enl5eXl4eHl5eHh5eXl5e3t9foCBgYGCgoODgH98e3x9fX5+f4CAgYGBgYGBgX99fHp8e3h7gYOAfXt5eHh4d3l9gHp1dHR2e31/gYGCgoODgH18enp7fHx8fn+AgYGAgIGBgYGAgH9/f35/gICDgX98eXh4eHZ3d3h3e36Af4CAgIKAfXp2dHd7foCAf3x7e3t7ent9fX1+fnt3dnl8f39/f39/f3x3dHBvc3h+fn9/f39+fHdydHp9f3+AgICAgH58g4OEhIKCgYGCgoGBgYGBgH9/f39/f39/f39/f39/f359fXx8e3t8fHx8fHx8fHx8fX1+fn58fX18e3x8fX19fX5+fn5/f35+f3+BhYiJg357e31+fX19fHx8fHx+goSEhYWDg4J/fHd3d3d3d3d3d3h4eXh6ent7e3t7e3p5enl5eXh4eHh4eHl5eXl6fH5/gICAgYODg4OBf318fXx+gIGBgYCAgIGBgoKDgX98ent6dn6Cg4B9e3l4eHh5en1/eXRycnR6fn+AgIGBg4OBf3x6enp7e3x9gIGDg4OCgoKBgYCAgH9/fn+AgIOBf3x6eXl5eHh3eHp+gICAgIGAgH99e3h1dnp9gH9/fXx7e3t6e319fX9/fXl2eHt9fX5+f39+e3Zzb3B0eX5/f3+AgH97dXJ1en1/gICAgIB/fnuDg4ODgoKBgYKCgYGBgYB/f39/f39/f39/f35+f39+fHx8fHt7e3x8fHx8fHx8fHx+f4CAgH5+fn58fHx9fX19fn5+fn5+fn5/f4GEh4eFf3t7fX59fX18fH1+gYSFhYSFhIODgX56eHd3d3d3d3d3eHh5eHp6e3t7e3t7enl6enl5eHh4eHh4eXl5eXx9fn+AgYGBg4ODg4KAfnx+gIGDhYWDgYGBgYGCgoGAf3x8eXh4foKDgH17eXh4eHl8f3x3dXVydHp+f4CAgYGCgoF/fXt7e3t7fH2AgYODg4KAgICAgICAf39+f4CAg4GAfXx7e3t6eXh5e3+AgICBgYGAf317eHd3eHt8e318fHt7e3x9fX19f4B+end4e319fn5/f357d3NwcHV7fn9/f35+fnp1cnV6fX+AgICAgH97eIODgoKCgYGBgYGBgYCAgH9/f39/fn5+fn5+f39/f319e3t7e3t7fHx9fX19fX19fXx8f4GBgYGBfn18fHx+fn5+fn5+fn5+fn5+gYOGiYWCfHp8fX99fH19f4KGh4eGhYSFgoF+fHl4eHh3d3d3eHh4eHl5enp7e3t7e3t6enp6eXl5eXl5eXl5eXl6fH6AgIGBgYGCgoKCgoGAf3+AhIWGhoKBgYCAgYGBgYB/fHt4dnZ9goSAfXt6enl5eXp9fnl1dXF0en5/gICBgYGCgYB+fX59fHp7fH+Dg4OCgH59fn+AgH9/fn5/gIGCgX97ent7e3p5eXp9f4CBgYGBgoJ+fHt5eXl5eXp7e3t7e3x8fHx7fX6AgH57d3l7fX5+f4CAfnt2c3FyeHx9fn19fn58eXNzdXt/gICAgICAfXp1g4OCgoKCgYGBgYGBgIB/f39/f39+fn5+fn5+fn5+fX19fXx8fHx8fH19fX19fX19fHx9fn5+f39+fXx8fH5+fn5+fn5+fn5+fn6Bg4aHh4SAfn6Af319fn+BhYeHiIeGhYOCf3t5d3Z3d3d3d3d4eHh5eXl6ent7e3t7e3p6enp5eXl5d3d3d3l5ent8f4GCgYGBgYKCgoKCgYCAgYOGh4aGhIKBgIGBf4CCgoB9fHl2dnyBg4F9e3p6eXl4eHh8fnt4c3V7fn+AgIGBg4KBgYKBgH99fHt8foKDg4F9enx+f4CAf39+fn+AgYKBf317e3t7enl5en1/gIGAgIGBgX99e3t7e3t7e3l5e3t7fHx8fHt9foCAfnx6enx+fn9/gIB+e3dzcXN4fH1+fn5+fn15dHN3fH+AgICAgIB9eXeDg4KCgoKCgYCAgICAf39+f39/f35+fn5+fn5+fX19e3x8fX19fX19fX19fXx8fHx8fH19fX18fH19fX19fX5+fn5+fn9/f39+foGChYaHhYF9fn9/f35/gIOGh4iIh4eFgn56eHd3dnZ2d3d4eHh4enp6e3p6e3t7e3t7enp6enl5eHh5eXl5eXl7fYCBgYKCgoGBgYKCgoGBgYOEhYaFhYOEgYGAgIF/foCDgoF+fnZ1e4GCgX17enp6ent6d3h9fXh0dXt+f4CAgYGCgoSDhIOCgn99fHx9f4J/fHx7e39/gIB/f35/f4CBgoKAfXt7e3t6eXl7fX+AgICAgICAfXx7fH1+fn17enp7e3t6ent7enx+gIB/fHx8fH19fn5/f357d3NydXl9fX5+fn9/fXh0dHd8f4CAgICBf3t4d4ODgoKCgoGBgICAgH9/f35/f39/fn5+fn5+fn59fX17fHx9fX19fX19fX19fHx8fHx8fX19fX19fX19fX19fn5+fn5+f39/f35+gIGDhYaGgn99fX19fn+ChYaHiIiGg4B9end4eHZ2dnZ3d3h4eXl6ent7e3t7e3t7e3t6enp6eXl5eXl5eXl6e31/gIGCgoKCgYGBgoKCgYKEhoWGhoWDgoGAgH59f4GBgYGBgIGAenZ6f4KBfXt6enp6fICCg4F+eXN1e35/gICBgYKChIWEhISDgX58fH5/fnx6e3x+f3+AgH9/fn9/gIGCgoB9e3t7e3p5eXx9f4CAgICAgH99fHt8fX5+fXt4enp7e3p6e3t6fH6AgH98fHx8fX5+f4CAfnt3c3J3en59fn5+f399eHR0eHx/gICAgIGAfHp4hISCgYGBgYGBgH9/fn5+fn9/f39+fn5+fX1+fn18fHx9fX19fX19fX19fHx8fH19fX19fX19fn59fX5+f39/f35+fn5/f399fn5+foCChYeFgn5+fn5/gIKEhoaGhoSBfHl4d3d3d3d3d3d3eHh5eXp6e3t7e3t7e3t7e3p6enp6enp6eXl6enx/gIGCgoKCgYGBgYCBgoKDg4SGhoaFhIGBgH+Af35/goKBgYB/fHt5e3+BgYB9fHt6enp4eHd3e3p2cnZ7f4CAgICAgIKFhYSEhIKAf319gIB/fXt7fH+AgICAf3+AgICBgYKCgH58fX17eXl6e35/f4CAgICAfnt7fX1+fn59e3h5ent7enp7e3p8foCBf3t7fH19fH5+gYGAfXdzdHh8fX58fHx/f3x3dXR5fn9/gICAgH9/fn6Dg4KBgYGBgYCAf39/f39/f39/f35+fn59fX5+fXx8fH19fX19fX19fX19fX19fX19fX19fX1+fn19fn59fX5+fn5+fn9/f31+fn5+f4GDhYaDgH+AgYGChIWGhoWDf3x6eHd2d3d3d3d3d3d4eHl5enp7e3t7e3t7e3t7enp6enp6enp6e3x+f4CCgoKCgoKCgYGAgIGCgoODg4SFhoWDgICAf4CAgYOCgoGDg4KBgH99foCBgH18e3p6ent7fX17eHR0dnt9foCAgICAgoSEg4ODgYB/fX2AgH99e3t8f4CAgIB/f4CAgIGBgoKAfXt7e3t6eXp7fn9/gICAgIB+fX1+fn5+fn17eHl6e3t6ent7enx+gH99e3t8fX58fn6BgYB9d3R0eHx9fnx8fH9/fHd1dXl+f4CAgICAf39/f4KCgoCAgICAf39+f4CBgoKBf39/f39/f35+fX19fXx8fn5+fn5+fn59fX5+fX19fX19fX19fX5+fX19fX5+fn5+fn5+f39/f39/f39/gYOFhoaEgoOEhIWGhYeHhIF8eXh1dnZ2dnd3d3d3d3h4eXl6ent7fHx7e3t7e3t7e3t7enp6fHx+gIGBgYODg4OCgoKBf39/gIGCg4ODhISEg4GAgH9+gICBgoSCgYGCgYGBgYB/f4CBf358e3t7enl8fXx4dnV4e35/gICAgICAgoKCgoCAgH59fH9/f3x7e31+f3+AgH9/f4CAgIKDg4F9fHt7enp5en1+gICAgICAf35+fn9/f39+fXl4eHl7e3t7enp8fH+BgH57e3x+fn19f4KCgXx3dHZ6fH59fX19fn98d3R2e3+Af4CAgIB/gIF/goKCgICAgIB/f36AgIGGhoSDgoKCgoCAf39/f319fn5+fn5+fn5+fn5+fX19fX19fX19fX19fn59fX19fn5+fn5+fn5/f39/f39/f3+BgYOGhoWEhYaHh4iGhYWCgH56d3d2dnZ2d3d3d3d3eHh5eXp6e3t8fHx8fHx+fn5+fn5+fn1/gIGCgoKDgoODg4KCgX9+fn+AgIGBgYGCg4OCgYGBgH9/fn5/gYGAgIGAgYGBgH9/foCAf3x7e3t6eXp6e3Vzdnt+fn+AgICAgICBgYGBgIB9e3t9f399e3t7fX5/f39/f39/gICAgIKCgH18fHt6enl7fX6AgICAgICAf4CAgIB+fnx7eXh4eXp6e3t8fHx8foB/fXt7fH5+fX2AgoKBfHZ0dXp8fn19fX1+f3x4dXd7f4B/gICAgICBgX+BgYCAgICAgIB/f4CBhIiJiIeFhYODg4OBgYCAfn5+fn5+fn5+fn5+fX19fX19fX19fXx8fX19fn58fn5+fn5+f39/f35+fn5/f35+fn6Ag4aGhoaHiIiIh4aEgoB8end1dXV1dXZ2dnh4eXp5eXl5e3x7fH5+fX5/f35/gICAgIGBgoKEhIODhISEhIOBgoF+fXt9f3+AgoKCgoKCgYCBgYGAf35+fn9+f4CAgICAgIGBgH5/foGCgHt6e3p6eXl7dnZ6e31+f4CAf3+AgICAgoGBfXp6eX1+fn17e31+f39/f39/f4CAgICAgYF/fXx7e3p6e3x+gICAgIB/gIGBgIGCgX98fHt7eXl5eXp7fHx8e3x/gH99fHx8fn59fYCDg4F7d3V1en19fX1+foCBfnl2eHx+fn9+foB/gIKBfYGBgICAgICAgH9/gIGEiImIh4iIiIiIiIaGg4F/fn1+fn5+fn5+fn59fX19fX19fX19fHx9fXx9fX5+fn5+fn5/f39/fn5+fn5+fn6AgICDhoaGhoeIiIiHhoSCf3l2dHR0dHR1dnZ6foCAfn17e3t8fn+BgYODhIWFhoeIiIiIiIiIiIiIiIiGhoaGhIOBgH58fX6AgICCgoKCgoF+fn+CgoGAfn5+f39/gYGBgICAgICAf39+f4GDgn57e3t7enp5enx8fX5/gIB/f39/gYKEhIJ/fHp6foB+fHp6fX5/f39/f39/gICAgICBgX99fHt7enp6fH6AgICAgIKDgoKDg4KBfnt7ent5eXl5ent8fHx7fH+AgH58fHx+fn19gIODgXt1dHh8fX19fX5+gIF+eXh5fH5+f35+foCCg4N8gYGAgICAgIB/f3+AgICEhYaHiIiJiYmKioqHhIB+fn1/fX5+fn1+fn5+fn59fX19fX18fHx8fX19fX5+fn5+fn9/f39+fn5+fn5/f4CAgIKChIWFhYaHh4eFhIJ9eHRzdHNycnN3fIOIiYiGgoCAgISFhIeIiYqLjIyLi4uLiYmIiImJiYmIiIiIiIiFhIKAfn6AgICAgYGCgYKCgX9/fYKBgYB/fn5/gICAgoOBgH+Af39/f35/gIKDgX56e3t8enp7e319fn+BgYGBgYGCg4aFg4B/f4CAf397enp9fn9/f39/gICAgICAgIGBf318fHp7eXt9foCAgICAgoSDg4ODgn97ent6eXl4enh6fHx8fHt9foB/fnx8fX1+fX2AgoOAenV1eXt9fX19fX6Bgn97eXt8fX5/f39/gISFhHyBgYCAgICAgH9/f4CAgIGCgYKFhYaGh4mJiYqJhoKBgH99fn5+fX5+fn5+fn19fX19fXx8fHx9fX19fn5+fn5+f39/f35+fn5+fn9/gICBgIGCg4ODhIWFhYaFhIJ+end0c3R0eHyDh4eJiIaGhIWHiImIiYmJiYmJiYmJh4eIiIeHh4eHh4aGh4eHh4aGhoaEg4OBgICBgYKDhYmLioSAgIGBgH9/fn+AgH+BgoCAf4B/f3+AgIB/fn+AgH1+gIB7eHt9fX+BgYGBgYGDgoGAgYKCgIB/f39/fnt6en1+f39/f3+AgICAgICAgYF/fXx8ent6e31+f4CAgICChIODg4KAfXt6e3p5eXh6eHp8fHx8ent8f39+fHx9fX59fYCDhIB6dHZ6fH19fX19foGCf3t5e3x9fn9/f3+AgoOEfICAf39/f39/f39/f39/f39/f4CAgYGDhIaHiImJiIeDgoB/gH5+fXx+fnx+fn58fHx8fHx8fHx9fX1+fn5+fn5/f39/fn5+fn9/fn5+fn9/gICAgYGCgYKEhoaGhYaEgHp2dnd7gYWHiIiGhoWFh4mIiIiIiIeGhoWFhISDg4SEhISFhYWFhISFhYeHh4eHh4eHhoaDgICChYeIhoeGh4J/f4B+fn5+foCAgIGBgX9/gYGAgICBf35+fn+AgX+AgX57fH1+gIODgoCAg4KDgYCAgIGAgYKBgYF/e3p8fn5+f39/f4CAgICAgICBgH99fHp6e3t9f4CAgH9/gIOEhISAgH9/fn16enp5eXl5ent7e3t6enx9f399e3x8e3x7foGDf3l0dnp8fX19fX2AgoKAfXp8fX5+fn19foCBg4J8gIB/f39/f39/f39/f39/f39/fn5/f36AgoOFiIqKiIeEg4F/fX19fHx8fH5+fnx8fHx8fHx8fH19fX5+fn5+fn9/f39+fn5+f39+fn5+f3+AgH5+fX1/f4KDhISFhYWFgoB+foGFhoeGhoWFg4SFhoaGhISFg4ODg4ODg4SEg4ODg4ODg4OEhISEhYWEhISEhISGhoWDhIaHhoWCg4SDgH9/gH5+fn5+f4CAgIGBgIB+fn9/gIB+fXx+foB/fX1/fX19f3+BgYB+fH2AgoOBgICAgYB/gICAgH57enx+fn5/f39/gICAgICAgIGAf318enl6e31/gICAf3+AgYKCgH9/f39+fXp6enl5eXl6e3t7e3p6fH1+fn17fHx7fHt+gYN/eXR2enx9fX19foGDg4B+e319fn5+fX19foCBgH2AgH9/f39/f39/f39/f39/f39/f39/fn5/f4GGh4iIiYmHhYSAfn19fX19fX19fHx8fHx8fHx8fH19fn5+fn5+f39/f39/fn5+fn9/fn5+fn5+fHx9fX9/gYGAgoOFhYeHhoSEhYWGhYSEhIKCg4ODg4KCgoGBgIB+f36AgICBgYGAgYGAgIGCgoKDg4KEhISEhISEg4SFhoOBf3t9gYSCf3+Afn9/fn2AfoCCgYKCf4CAfn6AgH9+fXx7fX18fH+CgYB/f39/gH+AgIGCgYGCgICAgIGBgX9+fXp7fn5+fn9/fn6AgICAgICCgYB/fX1+fXx9fn+AgICAgICAgH9+fX5+fn59enp6enl5enp7e3t7e3t6e35+fHx8fHt8fH2Bg4B6dHZ6fHx8fHx+gISEgH59fX9/fn59e3t8fn9/f4CAf39/f39/f39/f39/f39/f39/f39+fn5+f4GChIaIiImJiIR/fX19fX19fX18fHx8fHx8fHx8fX1+fn5+fn5/f39/gIB/f39/f39+fn5+fn5+fn+AgIB+fn59f4GChIWGhYWGhYWEhISEgoKBgYGAfnx8e3t8fHx+gIGCgoKCg4GAgIGBf319fX9/f4GDg4KCgYGCgYKAgIB/fXp9hISBgYB+fX19gH16e4KFhYOAgIB/f4CAgYB+fHx8fX5/gH9+fX6AgIB/g4WFhIOCgYF/f4F/gICAf318ent+fn5+f3+AgIGBgYGAgICAgH+AgICBf39+f4CAgICAgIF/fHx7fX5+fn16enp6eXl6ent7e3t7e3p7fX18fHx8e3x8fYGDgHp0dnp8fHx8fH6AgoKAf35+f39+fn17ent8fn5+gYF/f39/f3+AgICAf39/f39/f39/f35+fn59fYCBg4SGiYmJhYF+e3x8fHx8e3t7e3t6enx8fHx8fH19fn5+fn9/f3+BgoGBgYB/fn19fn9+foGBgICAgIGAgH+Ag4ODhISFhYaGhISDg4SCf357enl5eXl5enx+gIGDg4SEhISEhIODgYB9e3t7e319foGCgYODg4KCgH59gYB/f3+EhoGAfn18foGEg35/gYWDgYCBgIB/f3+Af35+fn5/f399enp8fX5+gH+AgoKCgoKBgICAf4CAgH9/fnt7fH+Af4CAgICAgH+Bf4B/f4GBgYKCgoKBgX+AgICAgICAfn17e318fn58e3p5enp5eXl7e3t7e3t7eXl7e3x8fHx7fHx9gIJ/enV3e3x8fHt9foCCgX9+f39/fn5+fnx6eHp7fX5/f39/f39/f39/gIB/f39/f39/f39/fn5+fn19fX5/gISHiYmGgXx6e3t8fHt7e3p6ent7e3t7e3x8fH1+fn5+f3+AgIOEhoaGg4F/fn5/gIGBgoKCgoODhYSEhISEg4OEhISEg4ODg4ODg4F+fHt6eXl7e3x+foCBg4OEhISFhYWFhISCgX9+fX19fH1+f4KDhYSEgn9+foKCgoWBfn5+gX97eXp9gH+AgH59fn5+f4GBgH6AgoKAf35+fn5+fX17fHx9fH+BgoODg4SDgoF/f39+f4CAgYF/fHt8fn9/gIGBf39/gH99fn5+gIGBgoKCgYGBf4CAgICAgIB+fXt7fn19fXx7enl4eHl5eXt7e3p6eXl5eXp6e3t7e3t8fH2Agn96dnh7fHx8e31+gIKBgYB/f39+fn5/fXp4eHp8fX9/fn5/f35+f39/f39/f39/f39/f35+fn5+fn59fX19gIWIiIZ/enl6enx8e3t7enp6enp7e3t7e3x8fH19fn5/f36BhIaKiYmIg4KBgYKCg4OEhISEhISGhYaGhYeEg4SEg4KBgYCAgIOCgoGBgoGBfn18fX6AgYOCg4OEhISEhIODgoF/f35+fn5/gIGChIaFgn58f4GBgYGBgH9+fn59f4SEgn18f35/f35+fX9+fn19fX6AgoB/f39/fX5/fn5/fX1+fn6AgYGBgoKCgYB/f39/gICAgH99ent8fX9/gIGCgX9+fX1/gIGBg4OCgIGBgYCAgICAgICAgH59fHx/f399fHt6eHd3d3l6ent7enp6enl5enp7e3t7fHt7fH6Afnp3eXt9fHx7fX6AgoGAf39/f39+fn99e3h2eHt8f39+fn9/fn5/f39/f39/f39/f39/fn5+fX18fH19fX2AhYmJiIF7eXp6fHx7e3t6enp6enp6enp7e3x8fX1+fn9/gIKFiIqKiYiGhYSEhISEhIWFhYaGhoaGhYSEhYSDg4OAf357enp+gYGCg4WFh4aEgH9+gIGDg4ODg4SEhISEg4KBf35+fn5/f4GCg4SEgoB+fYCBgYF+fn9+f39+fXd6fn6AfXx/fnx8fX58fHt6e3t7fX9/f39+fX19fHt6ent9fX1+fn9/f3+BgoGBf35+fn5/f3+Af316e35/fn6AgIGBfn5/gICAgYKDg4KAgH+AgICAgICAgICAfn1+foCAgH58e3p4d3d3eXp6e3t6enp6eXl6ent7e3t8e3t8foB+enh6e318fHt9foCCgYB/f39/f39+f317eHd5fH1/f35+fX9+fn9/f39/f39/f39+fn5+fn59fXx8fHx9fYGEiYuJgnt5ent7e3t7e3t7e3l5enp5eXp7fH18fH5+f3+Ag4aGiYiIh4aIiYmHh4iIhoaFhYSEhoWEhYWFhYSDgH18end2dXp/goODg4WHiIiGhIOBgoKEhISEg4OFhIKCgIB+fn9/f4CCg4OEhIF9end5fH19fHx+fn6AgXx2dHd8foCBgHx7fn18ent6enp7e3t8fn9/f359fnt7e3p5eXh3enx9fX1+gIGDg4B/fn5+f4CAgYF/ent9f4GCgYGBf39/f4GAgYGCg4SEg4B9fX1/gICAgICAgIB9fHx+gIB/f317eXh4eHh4ent8fHp6enh5eXl5e3t6fHx8fHx+f3x5eHt8fHt7e31+gIGBgH9/f39/f39/fXp3eHt+f39/fn5+f35+f39/f39/f39/f35+fn5+fn19fHx8fH19gYSJi4iBe3l6e3t7e3t6enp6eXl6enl5ent6e3x8fn5/f4CDhYWFhYOFhoiJiYiIh4eHh4aGh4eGhYSFhYWCgX96d3RzcnJ1en+Cg4KBg4SGhoaGhoWEhISEhISDg4KBgYGAgICAgICBgoSFhYWEgHt0cnR4eHd4eXl/enV4enl7fXx8e3p6enx7fHx8fHp6enl6fHx8fn17enx7eXl5e3t6eXl8fX1+fn1+f4KCgH9+fn5/gICBgX96en1+gIOEhYSBgICBgYCBgIGCg4KAfnt7fH6AgICAgICAgH18fH6AgH9/fXt5eHh4eHh6e3t7enp6eHl5eXl7e3x9fX18fH19fHl5fHx7e3t7fX+BgYGAf39/f39/f399end4e31/fn5/f39/fn5/f39/f39/f39/fn5+fn9/fX18fHx8fX1/gIWJiYR/fHt8e3p6enl5eXl6enp6enp6eXp7e3x8fX5/gICDhISCg4SHh4iIiImIiIeGiIaHiIeGh4aFg4J+d3RwcHFxcXV6gIOEgH1/gYSGhYWGhoSEhYWFhIOCgIB/gYGBgoKDg4SFhYWFhYJ8dnRzdXZ1c3R1eX9/e3h4f4SAe3h4d3l6fHt7enh5enh3eXl4eHp8fHx9e3t7e31/fn19fn5/fn1+f39/gYCAgH9/f3+AgICAfnt7foKDg4OCgYCAgYCAgICCgYSDgH18fHx9f4CAgYGAgH9+fHt9fn9/gIB9e3l5eXl5eXl6enp5eXp6eXl4ent8fH19e3p6fX17enp7fHp7e3t9gIGCgICAf39/f35+f316d3h7fn5+fn9/f39/f39/f39/f39/f39+fn5+fn59fXx8fHx9fX1/hIeIhYN/fXx8e3p6eXl5eXp6enp6enl4eXp7fHx9fn+AgIKDgoKDhIWFhYWEhoiIh4iHhoeHhoWEg4GAfHZzcnFxcnJzdnh/g4SBfXt9f4CDhIWFhYWFhYSCgYCBgYKDhISFhYWFhYaFhIaEfnl3d3R1dnZ1c3R3fH18fHt9fX17end2eHp8e3p4d3p8fn19fHt6enx8fH18fHt8fX9/fn5+fn59fX+AgIGBgH5+fn5/f4B/f35/gIOEhISDgX9+fn+BgH58f4GCg4J/fHx7fH2AgICBgYCAf35+fX1+f399fX17eXl5eXl5eXp6enl5eHh5eXh6e3x8fX17e3t8fHt6e3x8e3t7e32AgYF/fn5/f39/fn5/fXp3eHp+fn5+fn5/f39/f39/f35+f39/f35+fn19fX19fX18fHx8fH6AhYiGhoOBf3x8eXl5eXl5eXl5eXl5eXl6enp8fX1+foCAgICAgYODhISDg4WGh4eHh4eGhoaEg4OBfnt3c3Nzc3Nyc3R1eH6ChIJ/e3p8foCAgoOFhYaDgoKBgYKDhoeGhoaGhYSFhYWGhYJ+enp5d3R1dnVzc3V5enx+goJ+e3t6eXZ2ent6eHZzdXt+f39/fnp6fHp5enp7e319fn5+fn19fHt9fn5/f4F/f35+fn+AgYGBgn9/gIGCgoKBf4B/gYB8eHZ4gIKCgn97enp7foCAgICAgICAf35+fn59fX5+fHp4eHh4eHh6enp6eXl4eHd4eXp6e3t+fn18e3x8fHt6e3x6fHx7fYGBgX19fn9/gH59fX5+eXh5en5+fn5+fn9/f39/f39/fn5/f39/fX19fX19fX19fXx8fHx8fX6BhYWFhoWEgn98e3p6eXl5eXl5eXl5eXp6enx9fX5+f3+AgICAgYGCgoSEhoeHh4eHhYSEhIKAfnt4dnR0dHR0dHN0dXZ4fIGEhIJ/fHx9fX5/gYKCg4WEhISHiImKiYeHiIiHhoWEhISDgX57e3l3dHR1cnFydXZ5fICDg4B8eXh3dnR3eXd1c3FwcXN1eHt8fX18e3p6fHx8fX1/f318e3x8fH5/f35+fX1+gIB/f39/gIGCgoKBgICAgIB/f3+AgXtzcnmBgoKCf3t6e31+gICAgICAgIB/fn5+fnx8fHx8enl5eXl6ent7enp5eXh4d3h5enp7e35+fXp5fHt7e3t8fHp8e3x/gYF+e3t9f39+fX19fn57eXp8fn5+fn5+f39/f39/f39/f35+f399fX19fXx8fHx8fHx8fHx9fX6Ag4OFiIiGhIB+e3p5eXl5eXl5eXl5eXp7e3x+fX5+foCAgIGDhISHiIiJiIeGhYOEg4B/fXp4dnZ3eHZ2dnV1dXV2dnd8f4SEg4F/fX+AgH9/goOEhoWHi4yMjIqJiYiJiYiFg4KAgICAfHt6end0dXZ1dHR3eHp+gISCf3t5d3Z0dHRzcnJyc3N1dXV1dXl7fX1+f359fn+AgIB/fnx8fn5+fX19fH58fH5+f35+f39+f39/gIKBf4CAgH9+fYCAfHN0fIKEhIJ/e3p8fX6AgICAgICBgIB/f35+fHt8fHx7eXl5eHl5e3t6eXl5eXh3eHl6ent7fn58e3p7e3t7e3x7e3t8fn+Cf3t7fX9+fn5+fX1+fnx6e31+fn5+fn5/f39/f39/f39/fn5+fn19fX18fHx8fHx8fHx8fH19fH2AgIKFhoeHhIF+e3l5eXl5eXl5eXl5ent7e3x9fn9/gYKFhoiJiYqJiYiGhYSCgYB+e3p4d3V2d3l5eXd3dnZ2dnd3eHt/goSEg4B+foB/f317e35/gIGEhoaGhYWHh4aGhoaDf35+fX18e3x9enh3d3R1dHZ7fHh4e318enh0c3V1c29sbXJ3d3Z2d3Z0dnp+gYOEgoB+f4CAfn18fH5/gIB/f39/fn1+f4B/fn9/f35+fX5/f4CAf4CAf3x5e316dnh/goSEgn99fHx9foCAgICAgYKDg4KCgoKAf35+fXx6enl4eXl7e3p5eXl5eHd4eXp6e3t+fnx6eXp6e3p7fHt7e31/gIF+eHl8fX5+f399fX19enl9fn5+fn5+fn5+fn5/f35+f39+fnx8fHx8fHx7fHx8fHx8fHx9fX19fX1/f4KDhYeHh4N9enl4eHh4d3d5eXl5enp7fH+AgYOFh4qKiomIh4eGhYSCgX59fHt5eHh4eHh4eHh4d3d3d3d3d3h5e36Cg4SDg4KBgX12dXd4eHd6fH1/gYGEhYWDfn9/goaHhIF/gIB9f4OCfXh2dnZ0d3h3cnB1eHl6d3VzdHd3cGhocHZ5eHl5eXh3eXt+foGDg4KAf317fH59f4B/gIB/gYF/fn+Cgn9/fX57enp8fn2Af3x7ent9fHx9fnx6fICCg4WDgX59fX5/gIGBgoODg4WFhISEgoKCgYGAf318enl5ent7eXh4eHh3d3h6e3p6fH9+e3l5enp5e3t7e3t7fICBf3p2eXx+f39/f359fHd3eX1+fn5+fn5+fn5+fn9/fn59fX5+fHx8fHx8fHt8fHx8fHx8fH19fX19fX19fX+ChIeIh4F9enp6enp5eXl5eXl6enx+goOFh4iIiomIhoWEg4OBgH18e3p4eXl5eXl5eXl5eXl4eHh4eHh4eXl7fYCDg4SDgoF9fHh1c3JzdXZ2eHp8fHx9fX2BgoKDg4SGhoeFg4CAhIJ9eXV2dnRycXJua25zd3t6d3R0dHVvZWNqc3d4ent7enl2eHt7en6BgX17enp9f4KDgYCAgIGBf319fX5+fXt6ent7fH5+e3p6e3x8fHx8gIF/fX6BgYOEhYSDgH5+fn+BgoKDg4ODgoGCgYGAgICBgYGBgYF/fHt6e3t5eHh5eHd3eHl6enp8f357eXh4eXl6e3t7e3t8gIF+eXZ5fH5/f39/fn17d3Z5fX5+fn5+fn5+fn5+f39+fn5+fn58fHx8fHx7e3t7fHx8fHx8fX19fX5+fX19fYCChoiHhYJ+fHt7enp6eXl5enx9gYOGh4iIh4aHhoSCgYGAgHx7enp7enp6enp5eXp6enp6enl5eXl5eXt7ent7f4GCg4GBf39/fXdvbG90dXFzeXl7e3p9foGChIODhIODgoKCgH6Bg4J6d3d1dXBrbG5sbXB3fX14dXR0c29paGxzd3l7fHx7e3h3d3d0eH+CgYB8ent+gYKBgYCAgYGAfnt8fH17eHV2eHp7fXt4eHh7fH59f3+AgoB+gIGAgYSGhoOAf4CAgIKEhIKDgoGAf4CAgYB/gYCAgYGDgoOBfXt6eXl5d3d4eHd4eXp5enx/fnx4d3d3eXt7e3p6fH2Agn56dnh8fn9/f3+Afnt2dXh9fn5+fn5+fn5+fn5/f35+fn5+fnx8fHx8fHt7e3t8fH19fX19fX19fn5+fn5+gIGEh4iHhYODgoF/fX18fHx9foCDhoiHh4aFhIKBgH59fHx8fHt7fHx8fHt7e3t7enp7e3p6eXl5eXt7e3t7fH+Ag4OAf35/gIB5cmxpbnJybnB1eHx8fH5/gYKEg4GDg4OCgoKAfoGBgX15d3d1bm1pb3BubnJ2c21tcHR1c29tcHR3eXt8fHt7eXh3dnN0eH+Dg4F/fX+Cg4KBgH+AgX99fHt7fX18fXp5ent7eHt+f35/gIGBf4CBgYGCgYCCg4WHhIGBgYGBgYGCgoKCgoGAgIB/fXx+fn5/gICAgYGBfnx6eXl5eXh3d3h5enl6fH9/fHh3dnd5ent7enp8fYCCgHx4e3x+f39/gIB+eXV2eX1+fn5+fn19f39/f35+fn5+fn19fHx8fHx8e3t7e3x8fX19fX19fn5+fn9/f39/f4GChoiHhoeHhoaDgn9+foCDhIaHhoWEg4B+fH17e3t7fHx9fXx9fHx8fHt7e3t7e3t7e3t6enp6e3t7e3x+gIKEg4GAf3+DgnxzbWpsbXJ2dXh7fX19f4GBgoOBgYGAgICBgX18gYOCf3p4dnJtaWdscXR0cm9tbG1xdXZ0cW9ydXd4ent9e3p5eXh2dHBwdHl9gIB9f4OFg4F/f4CBgH99fX59fX5+fXl4e3t8fH+AgYCAgIB/fn+BgoKBgYKDhISEgoCAgICAf4CCg4OEhISEgoB+fn18e3t9fn6AgYGBf3x5eXh4dnZ3enl5e3x9gIB8eHd2dnh6enp6ent9gIKBf3t8fX5/f35/fnx5dnd7f399fX5+f39/f39/f39+fn5+fX18fHx8fHx7e3t7fHx9fX19fn5+fn5+f39/f39/f4CChIaGhoiIiIeFg4KDhIWGhoaEgoF/fHp6fHx9fX19fX19fH18fHx8fHx8fHx8fHx8fHt7e3t8fHx8fH6Bg4WFh4SBgH58enRsaGlrcnyAfn5/f4B/f4CAgYGAfn59gIF/fHyBhYOAfHl2b2hkZWxydnZ0cm9vb3FydXV0c3R1d3d3ent+fHp3dnh4d3V1dnd4d3d8gIKCgoGAgICAgICBgYB+fX19e3p+gIB+gICBgICAf35+f4KCgoGBgYKCgoKBgICAgICAgYKDhIaGh4eGhIJ/fn18enl7e3x+gIGAfnp2d3d2dnZ4eHl6fH2AgHx4dXZ2eHp6enp6e32AgoGAfH19fn9/fn9+fHl2eH19fX19f39/f39/f39+fn5+fn59fX19fHx8fHt7enx8fH19fX1/f39/f39/f39/f39+foCAgoOFhYeIiYmHhYWFhISEgoF+e3t6ent8fn5+fn59fX19fHx8fHx8fHx8fHx8fHx8fHx8fH19fHx+g4WEh4iGhIODgoB/fHVubG12f4GAgYKBf39+fX1/gH9+f31+gH16fIGFhIJ8eXRuZmBlbXJ0d3d0cnJzc3J0dXVzc3R1c3R5en19eHRzdXd4d3N0d3d3eHx/f4GBgICAgICAgICAfn59fHx5en19fYCAfoCAgH59fHx/goKCgoGBgIGCgoGAgIB/f4KCgoWFhoeHhoSCgX5+fnx7enp5enx/gIGBfHl3dnZ2dnh4eXt6fYCAfXh0dHd5enp6enp7f4GAf359fn5+fn5+fn17eXd5fH1/f39/f39/f39/f35+fn5+fn19fX18fHx8e3t6fHx8fX19fX9/f39/f39/f39/f35+fn5+gICBg4SGhoaFhYWDgYB9fHt7fHt9fX1+fn5+fn19fX18fHx8fHx8fHx8fHx8fHx8fHx8fX19fYCEhIaJioqIhoWEhIGAfnt2dHd9gX+AgIJ+fXt7e3x+gIB+fHp8fHl7gIKEhYB6dG5mY2Ztc3Z4eHd3dnV0dHV2d3Z3dXRxcnV2eXl3cnFzdXh2dHR2dnd3enx9foCAgICAgICAgIB/fn19fXp6fHp3dnR3e35/f318foCCgoKDgYCBgYGCgYGBgYKCgYGChIWFhISFg4F+e3t8fXp5eXh3eXt+gYJ/fHl2dnZ2eHh5ent+gYB9eHR0d3l6enp6ent/gYB9e3x+fn5+fn5+fXt5d3l8f4CCgn9/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fHx+fn5+fn5+fn9/f39/f39/f39+fn9/f319foGCg4OCgX9+fHt7e319fX5+fn5+fn59fXx8fHt8fHx8fHx8fHx8fHx8fHt8fn5+fnx/goaJiImLi4uHhYWDgYCChIB6eXt+fn5/gn56eXl6en1/gIB/f357eHqAhoeGgHp0b2plZ25ydXZ2eHh4dXR0dHd4eXp7eXVzdXd3dnJwb3Jzc3JxcnR1dnh6eXp8fX+AgICAgICAgH99fX1+fn+Af358eHRuc3yAfn+BgoSEhIOBgIGBgH9/gIGBgYGCgoKDhIODgoSDf3x5eXl5enh4eHZ2en1/gYF/eXZ0dHd4eHh5e36AgHp1c3R3eXp5eXh6fX+Bfnt4en1/f399fHx8end3eX2BgYOFf39/f39/fn5+fn5+fX18fHx8fHx8fHx8fHx8fH5+fn5+fn5+f39/f39/f39+fn5+f399fHx8fX5/f359e3t6fHx8fX1+fn5+fn5+fn19fHx8e3x8fHx8fHx8fHx8fHx8e3x9fX19foCHi4Z+f4SLi4qFhISDg4WHiYV9enuAgYCAfHp5eXl4en2AgIB+fHd0eIKGh4aBenRvamZnbnJ1dnd3eHh1dHR2d3h5fH15d3V3eHd0cG5ub29vbm9yc3V3eXp5ent9f4CAgIB/gH+Af39+fn5/gIGBgYB/fXp2dHh/gIKCgoKDgYCAgICAf3+AgYGBgYKCgoOEg4OCgoB+end3dnd4d3h4dXZ5e32AgoF9eHV1d3h4eHh7foB/eXRxdHd5enl5eHp9f4B9eHd6fH9/f359fXx5dnqBgoWFg4J/f39/f39+fn5+fn5+fn19fHx8fHx8fHx8fHx8fn5+fn5+fn5+fn5+fn5/f39/f39/f35+fnx9fXx8fHx8fH19fX1+fn5+fn5+fn5+fn59fXx7fHx8fHx8fHx9fXx8fHx8fHx8fH1/gomHf3p8gISFg4GAg4OBf4GHioN9fH+Dg358fHx6eXZ3eX59fnx6dXJ3gIaIh4N9dW5raGhuc3N0dXh5d3Nxc3V3eXl8fHp4eHl4dnNvbW1samdrbXF0dXh6e3x7ent8fX+BgYCAf3+AgH9/fn19f4OEgYKAfnp2dXmAgYKCgoKCgICChIKAgYGBgYGBgIGCg4SCg4KCgXx5dXV1dnZ2dnV2d3d5enx/gX58eXd3eHh4eHt/gH14c3J0d3h5eXl4e36BgX11dXt9foB/fn18e3l8goOCgoKDg39/f39/f35+fn5+fn5+fX18fHx8fHx8fHx8fHx+fn5+fn5+fn5+fn5+fn9/f39/f39/fn5+fH19fHx8fHx8fX19fX5+fn5+fn5+fn5+fn19fHt8fHx8fHx8fHt7fHx8fHx8fHx8fX+Fgn16fXh3enx5c3N4e3h0dHiChoN+f318fn59fn57eXd2eXp7end0cXeAg4WFg311bWtoam5zdHV4eHdwamZnaWptcnN2d3Z2d3d0cW9rZ2RkaGdrcnV4ent8fXx7e3p7f4CAgIGEhYaFg39+fXp3eXp8fX59fX17d3p/gYGBgYGBgYKDgYCBgYGBgYGAgYKDhIKDgoF/e3d0c3N0dnZ2dXV2d3l5e35/gIB8d3d3d3d4e36AfHdycXR3eXp5eXh7f4F/eXN1fH9+gH9+fXx8f4SDgoGAgICAf39/f39/fn59fX19fXx9fXx8fHx8fH19fX1+fn5+fn5+fn5+f39+fn5+fn5/f39/f39+fn19fX18fHx8fHx8fH5+f39+fn5+fn5+fn5+fX19fHx8fHx8fHt7enp7e3t7fHx8fHx9f397en16cnR0dXZ0dXZzcG9vbnR8gnx6eHd7foB/fn16d3Z2eHl6d3JyeYCDhIaCfXdvbGlobHJ1eHh3cmdfXV1cYGpvcXNxcnJ0c3JxbWhkZGRpam1yeHx+fn9+fXt6e31/gHx6fH6AgYSGgX15d3d3eXd2c3V6fX15d3yAgoGBgYGBgYOBgICAgYGBgX+AgoKDgoKBf3x5dnNzcnN1dXZ1dHV3d3h6fYB/f356eHd3d3l8fn56dXFxdHd6e3l4eHuAgX12dHl9fn9/fn17fICEhIKDgX5+fn5/f39/f39+fn19fX19fX18fHx8fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f35+fX19fXx8fHx8fHx8fn5+fn5+fn5+fn5+fn59fX18fHx8fHx8e3t7e3t7e3t7e3t7ent8end4endydXp8fH9/enJub29ubnR9fXh2dnp9f4B+fXt4d3d4eXl4dnZ6gISFhYN9eHFuamltc3Z4dnZwY1RPT01XZG9yc3Fwb25sbGlramlnZ2ptbm9zdnp9f358enl6fX+Afnt7fH1/gYSHg397eXd4fX58fH5+fHd2eHx/gIF/gICBg4GAgICBgYCAf4CCgoOCgoF/fHd0cnJyc3V1dXR0dXd3eHh8fX+Af3x5d3Z3d3t+fnp1cXF0d3p7eXh4e36Ae3Z0eX1+fn99e32BgoODgoF/fn5+foCAf39+fn5+fX19fX19fXx8fHx8fHx9fXx+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fH19fXt8fHx8fHx9fX19fn5+fn5+fn5+fn18fXx8fHx8fHx7e3p6e3t7e3t7e3t7fH15dnV6dm5xd3d6fn9+dHFvb3Bvc3x+dnV2e31/f359e3p4d3h4d3d3eHp/goKDg4N+dW5qa3BzdXV1dnFpVExOVl9pcnR0c3FvaWZlZWZoaWdlZm1xcnN1d3p7e3l4eHp8fn18fXx7fYCChomKhX98end6fX9/f4GAf3x1cnJ2fHx9fn+DgH+BgYCAf39/gIKDg4OCgYB8dnRxcXJzdHR0c3R2dnZ3d3p8fH2Afnl3dXZ4e39+eXJwcXV4eXl5eXh7f397dXR5fX1+fXx/goSEg4OBf359fX19fn5/f35+fn59fX19fX19fHx8fHx8fH19fH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58fX19e3x8fHx8fH19fX1+fn5+fn5+fn5+fXx9fHx8fHx8fHt6e3t7e3t7e3t7e3t8fHhwbnFwbG1yc3N3e3p0cXFxb29xe4B5dnd7fH19fn18e3l4eHh2dnV3eXx/fnp9gIF6dHBxdHV1dnR0cGthXFtiaG1xcnBubW5ua2lnZWNjY2NnbnR0dHV4eXp5d3V0d3p9fX1/fn+AhYiFhISHiIeDe3l7fH9/fn+AgH98eXh0b3J2e3+Af4CAgIB/f3+AgoOEg4KBfnt1cnFxcnN0dHRzdHZ2dnZ2eXp8fX+Aend3d3h7f354cnBxdXh5eXl5eHt/fnlzdXp9fX18f4KEg4OCgH99fX19fX1+fn5+fn5+fn5+fn59fX19fX19fX19fn5+fn19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn19fXx8fHx8fHx8fX19fX19fX1/f39/fn59fXx8fHx7fH19fHx8fHx8fHx7e3t7fH18d29oaGtsb3Nxb3J5e3VwcnRzcXV8gXx3eHx8fHx+fnx8e3p3dnV0dHZ3d3t7e31/f4B6d3Z2dXR1dHJuaWZiY2hvcG9samdmaW1xcG1oZV9aW2Rwdnh4eHh4dnNubXByd3x/f3+BgYKCf35+fX+BhYyFfnp7fH1+f4CAgH9+gIF9dnFwdXp9f4CBgH5/foCChYWDgoF9eXVycHFzc3Nzc3R2dnZ1dXV2eHt9gIB8d3Z2eH1/fXZxcXJ3eHh4d3h4e39/enR0en5+fYCChISDg39+fX5+fHx9fX5+fn5+fn5+fn5+fn19fX19fX19fX19fX5+fX1+fn5+fn5+fn5+fn5/f39/f39/f39/fn5+fX19fHx8fHx8fHx9fX19fX19fX9/f39+fn19fHx8fHt8fX18fHx8fHx8fH19fX18fX14cGtramttcG1tcHZ8eXRzdnZ0d3x+fHl6fHx8fHt8fXx6eXd2dHN0dXZ2eHx8fX5+f3x5eHd2d3d3dG9samhrb3BvbGdiYGBjaG5wbmpnY19gaHJ2eHh4eHVybWhobnN2en5/fn+Cg35+fn5+f4KHjY2Hg4B9fH5+f4CAf3+AgoJ/gHp0cW90d3p7fH59gIGEhYOCgXx4dHFwcXNzc3NzdHZ2dXR0dHV3enyAgHx3dnZ4fX57dXBvc3d4eHh3d3l7fn54dHZ6fH2Ag4ODg4J+e3l7fHx8fH19fn5+fn19fX19fX5+fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn5/fX5+f39/f39/f39+fn5+fX19fH19fHx8fH19fX19fX19fn5+fn19fX19fXt7e3x8fHx8fHx8fHx8fHx8fHx9f3pybGprbG1sZ2hrc3t6eHZ1dXZ5fX59e3t8fnx6fHt7e3p6d3Z2c3JydXV4fH+Af319fXx7eXh2dnd0cG5sbm9xcnBrZF1YWF1jam9taWRiXl9mcHR1dnh4dG5oZGZvdnd4eXl6e39/fn5+f4CAhIuUlI+Kg39+fX5/gICAgYGBgoGAf4B9e3NvcHFxdHl9f4KDg4OBfHd0cnFycnJycnN0dnZ1dHNzdHd5fH9/e3d1dnl8f3p0cHBzd3l4eHh3eXt+fHVydnh7f4KDg4KCf3t2eXt7e3t7fHx+fn5+fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn99fn5/f39/f39/f35+fn59fX18fX18fHx8fX19fX19fX1+fn5+fX19fXx8e3t7fHx8fHx8fHx8fHx8fHx8fH1/enJsamxsbGdkZmpxeX16eXd4eHp9fXx8fHt8fHp7enp6e3p5eHZ1c3NzdHR5gYGAfX19fHt5eXl5eXZuam1vcXFxb2tjWlZXX2ZoZWNiYWFhY2ducXJ0dXVybGZhZGtydXd6ent9e3h4en2BgoOFiY+Pi4mEgYB+fX5/gIGCgoCBgYCAgYGBgHp3dnl8foCAgoODgYB7d3Jwb3FycnJyc3R2dnV0c3N0d3t+f396dXN1eXx+eXRwcHN3eXh4d3d5fH56dnR1eH+BgoOCgYF7dnV5e3t7e3t6en19fn59fX19fHx9fX19fX19fXx8fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fXt7fHx9fX19fX1+fn1+fn59fXx8fHx6ent7fHx8fX19fHx8fH5+fX1+fn57cmtoa21rZWRobnJ7gH57enp6enx9fHt7fHx8fHt6enl6enp6eXd0c3Jyc3Z+gIB+fXx8fHl4eXl4dW9rbG9wcHBtaWJbWFpkY15WWFlcXmNnam1wcXJzdHFrZ2NjaW91d3p7fH18end2eX6AgoaGhoeHhoOBgH59f3+AgoOBf4CBgYCAgH9/fn1+fn9+f4GCg4KBf3p1cG9vcHFxc3NzdHZ2dXNzc3J2e36AgHt2c3V6fXx3cm5wc3l5eXl2dnl7fnlzdHd9goOBgYGBfXZydHp7e3t6enp9fX19fX19fX18fH19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fXx8fHx9fX19fX19fX19fHx8fHt7e3t8fHx9fX19fX19fn59fX5+f31za2lqa2llZmxzdnx/f358fX16fH18e3t8fHx8e3t6ent7enl5d3NxcXJzdnuAgYB/f398dnV2d3h1cG1sampsbW5rZl9faW9rW0tOTk9XYWdqa2xvcXJxb2llYmNpbXJ2ent8fX1/gICBgYKDhIeGh4eHgoGBf35/f3+Bg4J+fX1/f39/f35+fn5+f39/gYGCgX99eXRwb29wcXFzc3N0dXV1c3NzdHh8f4B/eXRzdXl8fHdxcHF0d3d3d3Z2eXt8d3N0eYGCgoGBgX95cnJ3e317e3p6en99fX19fX19fXx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fXx8fHx8fX19fX19fX19fX18fHx8fHx8fHx8fX19fX19fX1+fn5+f39+fXVraGhpamdpcHV5fIF/fn59fn18fHt7e3t8fX17e3t6ent8fHp4cnBub3JzeH6CgYGBgX13cnN0dnd0cGllY2Zqa2toZGhqbGhcUktISFBaZWZiYWdvcG9rZ2NgYGNnbXZ7fHt7fX+BgYSFhoiJiYmJioiDgICAgH59foGDgn59fX1+gYB/fn5+fn5+f4CBgYGAfnx3c29ub3BwcXNzc3R1dXVzc3N0d31/gX54dHR2eXt7dm9wcnV3d3Z2dnZ5e3t3c3d+goKBgYF/enVycnd7e3p5ent8gH19fX19fX19fHx9fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fHx8fHx9fX19fX19fX19fXx8fHx8fHx8fHx9fX19fn5+fn5+fn5/f4ODfHBqamtrb3F1eX1/fn18fH2AgH98e3t7fX9/fnx8e3t7eXp6d3Rwbm1ucXF0en+BgYB/fnhycXF0dnNvaGNkZ2hnXl9jamxtaGFXUU5NT1lmYVdXYGltbmtmYl9dX2JtdXx9e3t9gIGDhYaGhoeIiIqJioaDgYGCgYB/gIOCf3x8fX6Af35+fn5+fn5+f4GBgYB+fHhzcG1sbXBxc3NzdHV1dXNzc3R3fX+BfndzdHZ5e3p0b3Bzdnd3dnZ2dnl7e3d1fIKDgoKBfnt3dXJyd3t7enl6e36CfHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fXx8fHx8fHx8fHx8fH19fX19fXt7fX19fX5+fX1+fn5+fX1+fn+Ch4eBdnBubW92eHp8fn17fH1+foGDhIJ/fXt7fH19fX18e3t6eXZ0cnFtamtvcXF1e3+Bf3x6dXFub3JycW9oZWVobGhdVVhja2lnX1dUVlleYmlgV1BZZWtqZ2FfXlxgZG12fH98e3x/gYGEhYaFhYaHiImKiYeEg4SEgoCAg4N/fX19fn5/fn5+fn5+fn+AgYGCgH17d3NvbGxtcHJycnNzdHRzc3Jydnl+gH98dnNzdXp7eHNvcHJ1d3Z1dXV2eHt5d3uBhISCgX96dnZyb3R5enp6enp9gIR8fHx8fHx8fHx8fHx9fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fHx8fHx8fHx8fHx8fX18fH19fn59fX19fn5+fn5+fn59fX5/goaJg314dnZ0dXh7fX5/fXx9foB/gYSHh4WBfX19fX19fXx7enl4dnNxbm1sa21vcHF0d3d4dnVxcG5ucHBxb2diZW1wbWBWV1lhY2ReWVpgYF9gZF5aUFNgaGNVU1ZdXWBkbnR5fn58e31+f4GCg4KDg4WIiYqJiYaEhISDgICCg4B9fX1+fn9+fX19fX5+f4CBgYF/fXt3c29sa2xvcXJyc3N0dHNzcnJ2en+BgHt2c3N1eXp2cW5vcnV2dnV0dXZ4end7gIGCgoGAe3h4enh4fH9/f39/foGDhHx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX17e3x8fHx9fXx8fHx8fHx8fX19fX19fX1+fn5+fn5+fn18fICGiIaBf4B+fnp6enx+fn17fH5/gIGCg4aKioeEgH19fH59fHx6eXh2c3Bubm9ua2xvcnNycnFwcXRybmttb3BvZ2Nma2lnZFlRVlxiY2FgYmNfXFhZVlJRVV5mY1NKTllcYGZuc3h+fn19fH18fn9/f4CChIaIiomHhoaEg4KDgoB/fXt9f39/fn18fHx8fX5/gIGBf357eXZzb2prbG9wcXJ0dHRyc3NxcnZ6f4F/enNyc3V5eXVwbnBydXV0dHN0dnh4en6CgYKCgH58fICAgIKDhIODg4OEhISEfHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fHx8fHx9fX19fX19fX5+fn5+fn5+fn6AhImIhoSCgn+AgH56fX9+fXx+gICBgYGChYqKioeFg4B+fn18fHp5eHZyb21rbW1ram5wcnJ0dHFub3FxbGtsbm1pZWdpY11aW1VXW2FgXlxfZmdhXFhUT1RYXWJhV01PWF9la3J2en19fn59fn9/f4CAgIKDhYWHh4aGh4SCgoWEgH5+fn59f39+fXx8fHx9fn+AgYGAfXp4dnNvamprbm9xcnR0dHJzc3J0eHyAgH55c3JzdXd3dG9ucHJ1dXR0c3V2dnp/gYGCgoKCgoSEhISEhISFhISEhISEhIR8fH19fHx8fH19fX1+fn9/fn5+fn19fn59fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn19e3t8fHt7e3t6enx8fHx9fX19fX19fX5+fn5+fn5+fn5+foKHh4aFgoKBgIB/e3p+gX9+fX6AgIKDhIOEiYmKiIeFgn9+fnx7enh3dHJuamtsbWpqbG9ycnR1cm1vbmppbm9vbmxoaWljWVlcWl1hYV5UT1ppb2piWlhaX19gZGVbUFRcZGtxdnp8fX1+fn5+f4CAgICCgoKCgoKFh4iGhoOEhoaCf3+Bf359fn59fHx8fHx+gICBgX98e3h1cm5paWpucHFydHR0cnJycnV5fYCAfnlycXN1d3Zxbm5wc3V0c3N0c3Z5f4KCgoKCg4WFhYSGhIOEhIOCg4ODg4ODg319fX18fHx8fX19fX5+f39+fn5+fX19fX19fX19fX5+fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fX1+fnx8e3t7e319fHx8fH19fX19fX19fn5+fn5+fn5+foCDhoiFhIOCgoGAgH96en+Afn19fn6AgIGCgoOFhoaIiYaCf4GAfXx6eHZzcW1qaGpqa2trb3FydHNxbm1rbHBycXBwbGpqbGZeW11hYmNgVk1VYWxvamJdXmVubWhpZ2BaXWNrcnd5enx9fX19f3+AgoKDg4SCgoGBgYSEhoiHhISGiIWAf4B/fn5/fn18fHx8fH6AgH9/fnt6d3Vybmlpam5wcXJ0dHRycnJzdnp+gYB9d3Jxc3V2dHBtbnBzdXRzcnN0dnyAgYGEhIWFhYWFg4OCgX+Afn19f4KCgoODfX19fXx8fHx8fX19fn5/f35+fn59fX19fX19fX19fn59fX19fn5+fn5+fn5/f35+fn5+fn5+fX1/f35+fn59fXx8e3t8e3t8fHx8fHx8fH1+fn19fn5+fn5+fn5+fn5/hIeIhYOCgYOCgYB/fXl5f4F/fHx7fHl5eXx9fYCBgoWHhoODgoF+fnx7d3FubWlnaGpub25ucXJ0dHNvbW5ycnBwb3BsamxrZV1dYWVmYVlOU11nbm5qZ2RiZm9vaWlpYVlbZG51eHp6fH19fX1+f4CBhIOFhYOCgoKBgYOFiouJhYaIiYSAf399f39+fXx8e3t7fn9/f358enl3dnNwbGprbm9xcnR0dHJycnN3fH+AgHx1cXFzdXZyb21ucnN1dHNzc3Z6gIGDg4SEhISEhISBf3p4ent8eXuAgoKAgYF9fX19fHx8fHx9fX1+fn9/fn5+fn19fX19fX19fX19fXx8fHx+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn19fHx7e3x7e3x8fHx8fHx8fX5+fn5+fn5+fn5+fn5+f4GGiYeEg4KBg4KBgH9/fHt/gX99fHp5eHd3d3d5e3x8f4WGhISCgX59fXt4cW5ta2lpa29xc3Jzc3NzdHNyc3NxcnJycHBvb2xfWV5laGVdVVReZ2xvbGlnZWNpcGtjYmZjXF1lcHZ5e3p8fX19fX5+fn5+foCBgYGAgYGAgoOEh4mIhoeIhoSCgH9/f359fHx7e3t+f39+fXt5eHZ2c3Bsamtub3FydHR0cnJydHl8f4B/enVxcXN1dXBtbG5yc3R0c3JyeX+Cg4ODg4OEhIF9e3ZxcnR3ent5fICDgoF+fnx8fX19fXx8fn5+fn5+fn5/f35+fn5+fn19fX18fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5/f35+f39+fn59fX18fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fn5+f4CChYiHhYODgYCDgYKAf4F/f4B+fH58eHh4eHZ2dXd7fHx/goSFg4J/fXx8fHpybm1sbGxtcHJ2dnZ0dHR0dHV2dHFydHRycnFwaWBbYmtuZVtWXGVqbW5rZ2RkZ21taWRlZ2RiZWtydXp8fX1+fn5+fn18fHt8foGBgYCAgICBgYKDhYWGhoaHh4WCgH5/fn17enp6e31/fn17enh4d3Z0cW5sbG1vcXNzc3JycnJ1en1/f395c3BxcnR0cGxsb3F0c3NycXV8gYODgoKCgYJ9dnNxb21vcnh5enx/gYSBf317fX19fX19fX1+fn5+fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fn5+fn5+fn5+fn5+fn5+fn9/fn5/f35+fX19fXx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn5+fn6AgISHh4WDgoGAgIODgYB/gYKCgH17fHp4eHh4dnZ1dnp8fX5/g4WEgn99fH18enJubW9wb3BydHh4eHd2dnR0dnRzcnN1dXNycXFqYF9nbnBoX19lam1ubWpmZWZpa2toaWloZmZqbXF1enx9fX5+fn5+fHx7enx+gYGBgICAgICAgICBg4SFhYiJh4SAfn+Afnx7enp7fX5+fnx6eHh3dnVxbmxtbnBxc3NzcnJycnZ6fn+AfndycHFydHNvbW1wc3Rzc3J0eoKDg4OCgoF9d3Nwb25tbG1zeXp7foCDgn9+e3p+fn5+fX18fn5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX19fX1+fn5+fn5+fn5+f39+fn9/f399fX19fX19fXx8fX19fX19fX1+fn5+fn5+fn5+f39+gH+EiIiFgoKBgYGBgoKBgH+BgoF+fHp7eXh4eHh2dnV2eHl7fH2ChIODgH16e3x5dW9tcHJ0dXZ4e3t7eXd1dHR2dXJydXV0dHJxcm5nZWtvb2xoaWxvcG5oZ2ZlZ2hmZmltbGloa21wcnZ6fHx9fn1+fn19e3t6e31+f39+foCAgICAf4CBgoKEhoeGhIF9foB/fXt7e3t8fn18e3p4eHd2dXBubW1vcXFyc3NycnJ1eX1/gH9+d3JwcXN0cW5sbXBzc3Nyc3l/g4ODgYB+eHNycG9ubm1sb3N3eXt/gYKBfnt6eX5+fn5+fXx+fn5+fn5+fn5/f35+fn5+fn19fX18fHx8fX19fX19fX19fX19fX1+fn5+fn5/f35+fn5+fn19fX19fX19fHx9fX19fX19fX5+fn5+fn5+fn5/f4CBhYeIhoOBgX9/f4GCgoGAf4KDgXx5d3h4d3d4eHZ3d3d0bmxteIKFhIOAfXp5enp4cm9xc3V3en1+fn18eXh2dnZ1dnZzc3FwcG9xb2trb3BwbW1ucXFvZ2FhY2JhYWFkam1ta2xucHF1eHt8fH18fX19enp6enl6fX5/f35+fX1/f4CAgYGBgoOEhISEg39+f4B/fXt7e3x9fHt7enh4d3Z1cW5tbnBxcXJzc3JycnV6fX+Af3t0cXBxc3RwbGxtcHNzc3N2fIGDg4OBeXJwcG9vb25ram1xd3p7fYCCgoB9enh4fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn59fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5/f3+AgYSIiYaDgX9/fn5/goSCgX5/g4WBfXl3d3Z2dnd5eXl4eHFtampygIaEgoF+eXt7e3l3dHJ0d3p8fn+BgH95eHd2dnV0c3NzcG9ubG9xcHBycm9tbXBycW1kX19hYmFgYGdsb25tbnBwcnZ5fH19fX19fHt7e3p6e3t9fn5/fn59foCAgYCBgYGBgIGChYaGgX5/gH17enp7fHx7enp6eHh3dnVyb21ucXFyc3NycXFydXp9gIB+eXNxcHFxcW5ra21xc3N1dnyBg4SEg39zcG9vb29tbGtqbnV3eXx/gYGAfnl4d3d+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn9/f4CEiIiGhISBgH5+f4GDg4KAgIGEhIB7eXd3dnZ2d3h5eHd1cm5tbXB8hYWCgYGAgIB+fHp4dXZ3enx+f4GAf3x7enh2dnV0c3FubW5ucHN0dXV0cG9wcnNybmdjY2NkY2RobG9wbGxvcXJ0d3p8fn19fX18e3t7enp7e31+fn9+fn1+gICBgIGBgYF/f3+ChIWCfX5/fHp6ent8fHt6enp4eHd2dXJvbW5xcXJzc3JxcXN2en1+fnx3dHFwcXFxbmtsb3Fzc3d7gYSEg4SCd3Bvbm5ubm1sa2pudXl6fYCBgYB+eXh3d35+f39+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn19fX19fX19fX19fX19fX18fn5+fn5+fn5+fX1+fn5+f39/g4eHhoWDgn99fYCCg4WDgYB/gYSBf3t5d3d2dnV3eHh1dHR0cnFtbnuFhoOAgYCAgH9+fHp4eHh5e3x+gH9+e3l5eXh2dXV0cm9vcXN0dHZ2d3Z0cnFydXVxamVkZWVlZmhucG9ub3Byc3V6fH19fX18fHx7enp6enp7fX5/f359fn5/gICAgICAgH9+fn5/gIF/fn57enh4e3x8e3p6eXl4d3d0cW9ubnBxc3NycXBxdHl8fXx8fHZycHBwcG9tbGxvcnR2e4CCg4WDhH5xbmxub21tbGtra250eHp/gYCAf3t5eHZ2f39/f35+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fX19fX19fX19fX19fX19fXx+fn5+fn5+fn59fX5+fn5/f4GGiYeFg4F/fXx+gIKDhISBf3+BhIGAfXl3d3Z2d3Z2dXJycnl7dnR1fYWHhIGCgYCAf357enp6enp7e3x9fn18e3p5eHd2d3Z0c3N0dXd3d3h6enl3c3R2dnNva2loZmVnaXBxcHBxcnR1d3t8fX19fXx8fHt6enp6ent9fn9/fn1+fn5/gICAgICAgH9/gIB/gIB/fX58enp7fHx7enp5eXh3dXRxb25ucHFzc3JxcHF0eXx9fHx5dHBvcHBvbm1sbXBzdXh9goOEhIN+dmxsbW1ubW1sa2trb3Z6fX+BgIB+enh2dnZ+fn5+fn5+fn5+fn5/f35+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fX19fX19fHx9fX5+fn5/f39/f39+fn19fn5+fn+ChoiIhYSBgH18foCChISEgn9+f4KDgH99eXd3dnh3dnVyb3BzeXx7fX6BhYeGgoKCgH9+fXx7enp6enx8fH1+fn5+fHt6enl4eHZ2dnZ2d3d5eXt9fXx4dnZ3d3VwbmtpaGpscnFycnR3d3h7fHx9fX19fXx7ent6enp6e3x+f39+fn9/f39/f4CAgYGBgICAgYB/f319e3p6en17e3p7e3p4dnR0dHNycG9wcXJycnJvcnd8fX18enVyb29vb25tbG1ucHJ3fIGCg4SCf3pvbGxtbW1sa2tqaWxyeHt/gIGBgH15dXV0dn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn59fX19fX18fH19fn5+fn9/f39/f35+fn59fX5+f4OHiIeFg397e35/gIKEhYOBfn2Ag4F/gH98eHh4eHh2c3NwbW9zd32AgYCBhoaDgICAgH9+fHt7e3x8fHx8fX5+fn58e3p6eXh5eXh4d3h4eHp7fH19fHp5dnd3d3VycW9tbm9zdHR2d3p6eXx8fH19fX19fHt6e3p6e3p7fH5/f35+f39/f35+gICBgYCAgIB/f317eHl7fX17fHx8e3t7enh2dHNzc3Jwb3BxcnJycnJ1eHx9fHp3cnBvb29vbm1sbW5wdHp/goODg4F7cm1sbG1tbWxra2pqbXN5fICCgYF+e3Z1dXR2fn5+fn5+fn5+fnx8fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn19fX19fX19fX19fX19fX1+fn5+f39/f39/fn5+fn19fn6AhYiHhoOAfnx8f39/goKEg4GAgIKDgX+AgX15eXp6eXh1cnBtbXJ3fH99e3uDhoSAgIGBgH+AgH9/gIB/f39/fn5+fH17enl6eXp5enh4d3d4eXt9fn5+fXt4d3Z2eXl3dXRydHZ1d3h6fHx8fX5+fX19fX18fHx7enp6e3t9fn9/f39/f39/fX1/f39/f3+Af3x8e3h1dXl+f399e3t6enp6eHZ0cnJzc3FwcHJycnFxcnZ6fHt7eXRxb29vb29vbWttb3J1e4GBg4KAf3lxbWtsbG1sa2tqaWludXl9gYKCgXx4dnZ2dnZ+fn5+fn5+fn5+f39+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fX19fX19fX19fX19fn59fX5+fn5/f39/f39+fn5+fn5+f4OHhoWEgX18fX1/f3+CgoOBf4GDhIJ/foCBgXx5e3t8enh1cW9ucXZ7fX57eH2CgoGAgICAgICAgYGBgYCAgIB/f358e3p6eXl4eXl6eXh3d3h6e31+fn59e3x6e3p6e3p5eHh4eXp8fX19fXp8fHx9fX18fHx8fHx7fHx7fH5+f39/f39/f39/f39/f39/f4B+fHx9fHp4en2BgoF9e3p6enp4dnRycnNzcXBwcnJycXFzeHt9enl3c29ub29vb21sa2tuc32BgoOCgYB8dG5ra2xsbWxra2ppaW50eHyAgYKAe3d1dXV1dX5+fn5+fn5+fn5+fn19fX1+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx9fX5+fn5+fn5+f39+fn5+fn5+fn+BhoeFhYN/fHx9fYCAgIGDhIODhIiEgX9+gIGCfnp6fX17enh1cW9ydnp7fHt8f4KDgn+AgH+AgICBgYGBgICAgH9/fnx7enp5d3d5eXt7eXh3eHx9foB+f35+fX19fX18fH18e3p7fn9/fHp7eXl6fH19fHx9fX19fX19fX5+fn5/f39/f39+f35+f3+Af39/f399fXt7fHt8gIKCgX56eXl5eHh3dXNxcnRycXFzcnJzc3Z6fHx6eHRycG5ubm9tbWtpa292fYCDg4KAgHlybWtsbW1ta2tramprb3V7f4GBgX14dXR0dHR0fn5+fn5+fn5+fn5+fX19fX5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+f39/f39/fn5+fn5+f4GEhoSDgX58fH1+f3+AgYOEg4WIiISBfn1/gH15d3h8f318endzcXJ0d3h4e31/g4WEgICAf4CAgH9/f3+AgICAf39+fHt6enl5eXl5e3t6eXh4eHt9fn5/fn5+fn5+fn19fXx8fX9/fXt5eHl5enp8fX18fH19fX19fX19fn5+fn9/f39/f3+AgYGCgoKAf39+fn19e3t8fX1/gYB9e3p5eXl4eHd1c3FydHJxcXNycnN0d3t8fHp3c3Fwbm5ub21ta2ttc3qAgYKDgoB9dnFsa2xtbW1ra2tqamxwdnp/gYGBfHZ0c3Nzc3N/f39/fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fHx8fH19fX1+fn5+fn5+fn9/f39+fn5+fn5/gIOFhYKAfnx9fX5/f3+AgYOGh4iEgn98e36Ae3ZzdHmAf357eXZzcnF1eXp9f4CBhISAf39/f39/f39/f39/f39/f319e3t7e3p6eHh4ent7eHd3eX1+f39+fn9/f39/fn19fX1+f397eHh6e31+fH59fHx8fX19fX1+fX1+fn5+f39/f39/f3+BgoOEg4J/fn19e3x7e31+f4GBgH18eXp6eHh5d3VzcXN0cnFxc3Jzc3V7e3x8enZyb29vb29vbWxram54f4GDgoOCf3pzbmxqa2xsbGpqamlpbXJ2fICBgoF7dnNycnJycn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fX5+fn5+fn5+f39/f35+fn5+fn+Ag4WFgn58fH59fn9/f4CDhYaHhoJ/fn59foB8d3V2eX6AgH17eHVycnV6e32Afn2AhIB/f39/f39/f39/f39/f35+fX18fHt7enp6enp7e3t4d3Z3e35/f35+f3+AgH9+fX19fX18fHl4eXt9gIB/fn18fHx9fX19fX19fX5+fn5/f39/f39/f4CCg4SEg4B/fX18e3x/gH9/gYGAfnx5enp4eHl3dXJwcXJycXFzcnN0eHt7e3t4dXFvb29vb29tbGtudHuBg4ODhIF+eHBta2prbGxsampqamptcnl+gIGCfnl1cnJycnJyfn5+fn9/f39/f35+f39+fn5+fn5+fn5+fn5+fn19fXt+fn5+fX19fX19fX5+fn19fX19fX17fHx8fHx8fHx8fH19fn5+foCAfn5+fn5+f3+Afnx/foCEhIOCf3t8fH5/fn9+gYOGiIeDf35+fnx+gH14dnd5fX+Afn17d3V2eXt5e317eHqCgoGAfn5+fn5+fn5+fn5+fn5/f35+fHt7ent6eHt8e3p5eHh3eXx9f39/f39/f31+fn19f357enp8gIKDgoB/fn9/fX18fn19fX19fX1+fn5+f39+fn9/gIGEhISEg4F/fYCAgYF/f36AgYF/fHt6enl4eHd1cW9vcHJycnJyc3d7fHx6eXZzcG9vb29vbmxra253foOEhISBgXx1cGxsa2tsbG1ra2tpanB0en6AgIB7eHVzcnFxcXN+fn5+f39/f39/fn5/f35+fn5+fn5+fn5+fn5+fX19e319fX19fX19fX19fn5+fX19fX19fXt8fHx8fHx8fHx8fX1+fn5+fn5+fn5+fn5/f4B/fn5+gISFhIOCf3x8fn99fn6DhomJhYOCgIB+fH6AfXVzdXt8foCBf3x5eXp8e3h5eXl3eH6BgH5+fn5+fn5+fn5+fn5+fn9/fn59fX19fHt5fH19fHp5eHd4enx+fn9/f39/fXx8fX1+fHt6en6ChISDgH9/gYGAf359fX19fX19fX5+fn5/f35+fn6AgYSEhISDgYKAgYF/fXx+fn+BgH98e3p6eXh4d3Vxb29wcnJycnN1eXt8e3l3dHJwb29vb29ubGtucnuBhIODg4F+eXNwbGxsbG1tbWtra2prcHZ9gIGBf3p2c3JxcXFzdX5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+fnx8fn5+fn5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fHx9fX19fn5+fn5+fn5/f3+AgYF+fn+BhYeFhYWBfHx8fn2Bg4WIiYWEhYWDgX56fYB8dnN4e319f4ODfn19fX99enh4eHh5fX5/fn5+fn5+fn5+fn5+fn5+f4B+foB/f35+fXt8fX18fHp6enp5eXt9fn+AgIB/fX1/f35+fHp6f4OFhIKAf4CChIOBgH9+fn1+fn5+fn5+fn59fn58fn+AgoODg4ODg4ODg4KAf4CAf4GBf3x6eXp6eXh2dG9ub3BycnJzdHd8fHx6dnZzcXBvb29vb25tbG52f4ODg4OCgHx1cW9tbGxtbW1ta2pqam5xd3yAgYF/eXRzcnJwcXZ5f3+AgH5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn5+f4CDg39+f4GEhoaFhoN/e3t+gYaJiIaFgoKGhoWCf3l8f356dnh8fnx/g4OBgH9/f316eXh5ent8fn9+fn5+fn5+fn5+fn5+fn5/gH9/gIB/f319fH1+fn1+fXx7ent7ent7fX9/fn19fX19fn59e3uAg4WDgYB/gIKCgYCAf35+fX5+fn5+fn5+fn19fX5/gYCBgoODg4OFh4SEgoOFhYWEg4KAfXx6enp5eHZ0b25vcHJycnN3e319e3l1c3NxcG9vb29vbWtucnqAgoKDgoF/eHNxb21sbG1tbW1ramprb3N6foCBgXx3c3JycnJ0eHt/f39/f39/f39/f39/f39/f39+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX19fX19fX19fXx8e3t8fHx8fHx8fH19fX1+fn5+fn5+fn5+fn59f4GBgX9/gYWFhoaFhYJ9fH+EiImFgoB/goaHhoR/eHh/gH55eXx8enyAgoODgH9+fnp3eHl6e319fX19fX5+fn5+fn5+fn5+fn9/gICBgX9+fHx8fH59fX5+fHx8fHx8ent8fH18fHx7fX59fXx8fYGFhYOBf39/goKCgYCAf35+fn59fX5+fn5/fXx8gYKCgYKEg4ODg4SEhISHiIyNjY2LiYSBf3x8enl4d3Rwb3BxcXJydnl8fnx7eHVycnFvbm5ubW1rbG92foGCgoKBgX11cnBubGxtbW1tbW1paW1xeH2AgYF/e3ZzcnJ0dnh8f39/f39/f39/f39/f35+f39/f35+fn5+fn9/fn5+fn5+fn5+fn5+fn59fX19fX19fX19fHx8fHx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn59f39/gIGDhoaDgoSFhoJ8f4WHg398fH+BhIWGhH91dn2Cf3t7fX16eX6AgoKAf35+fHp4eXp7fX1+fnx8fX19fX19fX1+fn5+f3+AgIGBf359fX19fn19fn5+fn19fHx7e3t7e3t7e3p8fHx9fHx9gYSEgn99fH1/gYGBgIB/f35+fn19fn5+fn99f4KGhYSDgIKDg4ODgoKChYiKi42NjYyKh4aGg4B8eXl3dHBvcHFycnR4e31+e3l3dHJxcHBubm5tbWtscXqAgoKCgYF+enRyb21sbG1tbW1tbWlpbXJ5foGBgX95dXRzc3Z5fX+AgICAgH9/f39/f39/fn5/f39/f39/f39/f35+fn5+fn59fX19fn5+fnx8fX19fX19fX18fHx8fHx8fHx8fHx9fX19fX1+fn19fn5+fn5+fn5+fn+AgoSFhoGAgoWGhH9+g4SAenp9foCAg4eGfnVzeYCAfXt+fHt6e3+BgoGAf397enl4ent9fX5+fHp8fHx8fHx9fX5+f39+fn6AgIB/f359fX1+fn5+fn19fX59fHx8fHx6fHt7enp7e3t7fX6BhISCf318fYCAgIB/f4B/f39/fn5/f39/fX6Bg4OAfn5/gYSEhISDgoKEiImLjY2MioeFhYiJhX57eHdzcG9vcXFzd3l9fXx5d3VzcnBvb29vb25tbG1zfIGCgoKBgH54c3FvbGxsbGxtbW1ta2puc3uAgYGAfXl2dHJzd3x/gYGAgICAf39/f39/f39+fn9/f39/f39/f39/fn5+fn5+fn19fX1+fn5+fn59fX19fX19fXx8fHx8fHx8fHx8fH19fX19fX5+fX1+fn5+fn5+fn5+f4CChIWEf35/hIWFg3+Bg4J9ent9fX2BhoZ+dXN5f4F/fn9+e3p7f4CAgH9+fnx7e3p6e319fX5+fXx8fHx8fHx8fn59fX5+foCAgH9/fn19fH1+fn5+fn59fn19fXx9fX19fHt6enp6e3t9foGCgoB+fH1+gYKCg4KBgH+AgICAf4CAgIB/gH+Af318fH+Bg4OEhISCgoSHiIqMi4mFh4eHh4mIhYN8d3RxcHFyc3V6fH59e3h2c3JwcW9ubm1tbWtsb3Z+goGBgYGAfnhxb21sbGxsbG1tbW1qam91fICBgYB9d3R0c3Z7foCCgX9/f39/f39/f39/f39/f39/f39/f39/f39/fn1+fn9/fX1+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fH19fX1+f319fn5+fn5+fX19fX19fn5+gIKEhISAf3+AhIaFg4ODhIF7e3t8foKHhn1zdnl/goGAgH58en1+gIB+fX1/fn19e3p7e3x9gIOCf3x6enx8fX1+fn5+fn5+fn1/fn5+fn5+fn9/fn19fX19fn59fHx8fn9+fHt7eXp6e3t8fn5+fn9/f4GBg4SEg4OCgH+AgIGAgICAgIGBgIB/fX19f4GAgYWFhIKCgoSFhYWDgoKHiYiHiIuKh4B5c3Jyc3F0eX1+fXt6dnNycXFwcG5ubWtramtxeoCAgIGAgH99d3FvbmxtbW1tbGxsa2trb3V+gIGBgXt0cnR1eHyBgYF/f39/f39/f39/f39/f39/f39/f39/f39/f39+fX5+fX19fX5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fX19fX5/fn5+fn5+fn59fX19fX1+fn6AgoSEhIB/f4CDhYaFhYWGg316e3x/g4iGf3RxdXx/gYCAfnx6e31+fnx7enx9f358e3t8fX+Dh4iCe3p6fHx8fH19fn5+fn5+fX9+fn5+fn5+f39/fn1+fn5+fn18fHx8fX5/fn18e3t7e3x+fX19f4CBgoKEhISDg4J/fn2AgoOCgIGCgoKAgH99fX6AgoOEhoaEgoKCg4KCgoSEhoaDh4iJiImIiYJ5dXNxcXZ7f358eXdzcnBxcXBwbm5ta2tqbXR8gYGAgYCAf313cG9ubG1tbW1sbGxra2tyeH+BgYGAenV0dnl7fYGBgH5/f39/gICAgH9/f39/f39/f39/f39/f39/f39+fn5+fn19fX1+fn5+fn5+fHx8fHx8fHx8fHx8fHx8fHx8fX5+f4B/fn5+fn59fX19fXx9fX19fn+ChYSCgYCAf3+EhoaFhYiDfnp7fX+Eh4WBeHh5fn+BgoCAfXt9fX17enh4eHx/fn19fX6Bg4aJi4h/e3p6ent7e3t9fn5+fn5+fn5+fn5+fn5/fn9/fX1+f39/fn58fn1+fn+AgIB+fHx8fX18fn5/gYGAgYODgoOEgX17en+DhoeGhoaHhIGAgH58fX6AgIKGhoSBgYKCg4ODhYaFhIGDhYV/h4qKh394dHJyen2BgHt5dnFwcHFxcHBvbm5sbGtud3+BgYGAgIB/fndvb21tbW1tbW1tbGppbXN6f4CAf355dHV4en5/goF+e39/f3+AgICAf39/f39/f39/f39/f39/f39/f35+fn5+fX19fX5+fn5+fn58fHx8fHx8fHx8fHx8fHx8fHx9fn6AgYGBf39+fn19fX19fH19fX1+f4CDhIKBgIB/f4GEhIaGhoF9eHl9gYaIh4OBfn5+f4CAgIB+fX19e3p4dnR1eXx9f4GBgoWIiYqMi4V8e3p6e3t7e3t9fn5+fn19fX1+fn5+fn9+fX18fH1+fn59fn19fH19f4CAgH9+fHx8fH1+gYKBgYOCgYKCgoSBf3x6fH6AgoODhIaCgH9/fHt9foCBhIWFgoCAgYKCg4OEhYSDf4CAfHyMl5CMiIF7ent/gH9+end0cHBwcXFwcG9ubmxqaW53gIKCgYB/gH97dG9ubG1tbW1tbW1samludXp/gH9+fXh1eHx/f4CAf3t4fn5/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX1+fn19fXx8fHx8fHx8fHx8fHx7e3x8fH5+foGCgoOBf359fX19fXx8fX1+fn1/gYKDg4F/gYCAgIKDhYWFhIB+fH2BhYaHhYF+fn1+f4F/fn18fXx7eXd0dHR2eH5/goSGiImJioyMi4J7enp6ent8fH1+fn5+fn5+fn5+fn5+fn17e3l8fH1+fn5/f35+fX1+f4CAf358e3t7fH6BgYKDgoGAgIGCg4N/fn19fH9+f3+Bg4F/fn57fH5+gIKFg4GBgICCgoKDg4ODg4OCgoB9gIuQjoyRjoWBf317fHp5dnJvb3FxcW9vb25ta2hqcHqBg4GBgH9/f3x1bm5sbW1tbm5ubWtpa293fX+AgH97dnZ5fX9/gIB+d3aAgH9/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX19fX19fX18fHx8fHx8fHx8fHx8fH19fHx8fn5+gIGDhIOCfn18fH19fX19fX5+f4CBgoODgX+Af4CAgYOEhISFhoaHh4iIh4WDf319fX5+gH9+fHt7e3l2dXJzcnR3fICChIeJiYmJi4yOiX97e3t8fHx8fX5+fn5+fn5+fn5+fn9+fXx7fH1+fn9/f4CAf35+fn5/gIB/fnx7enp8foGBg4OAf35+gIKDg399fHx8fX19f4KCgH59fnt8fn+BgoWDgYGAgoODg4ODg4ODg4SEg4KEipCRi4aDfnp5eXl4eXh3c3FvcXFxb29vbm1ra2x0fYCCgYGAf39/e3JtbWxtbW1ubm5tamhrcnh9f4CAf3t4eX1+gICAf3h0dX9/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fX18fXx8fHx8fHx8fHx8fHx8fHx8fH5+fX1/gYSFhYWBfXx8fH1+f39/gICBgYOCg4KAgIB/f3+AgIKEhIWFh4iIiIiHhoSBfnx+fn5/fn17enp6d3Z0c3FxcXR4fIGCgoWJi4uNjY2NiH17fH18fX1+fn5+fn5+fn5+fn5+fX19fn+Af39+fn5/fn5/f4B/f39/f359fXt4ent/gYCCgX98fX6AgYSEfnx7fH17e3x/f4B/gH99fHx+gYKFhoOAf4GDhYWFhYOCg4WFhYWFhIaKjomCfXt2c3yAgHx0dn17dHFwcXBvbW5tbWtqbXN/gYGBgYB/gH96cW1tbG1tbW5ubWxpaWx0en1/gH9+enl7fn+AgYF9dHN1f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX19fXx9fHx8fHx8fHx8fHx8fHx8fHx8fn59fX+Bg4SFhYN/fHx9f4CBgoKDg4KCg4KDgoCAgH9/fn5/gIOEg4GAgYSHiIeFhIF+fH1+fX59fHp5eHh1dXRyc3Jxc3Z7f4KBgoaIiYuNjY+MhHx7fHx9fX5+fn5+fn5+fn5+fn5+f4CAf35+fn19fX18fH1+f39/gH9/fn19e3l5fYGBgH9+fXt8fYCBg4KAfn1+f319fn+AgIB+fn18fH6BgoWGg4CAgoaHh4WFg4OFhISEhIWGiIuMhn52cXF8hIOBgX13eXx3c3FxcG9tbm1ta2lud3+CgoGBgH+Af3hwbW1sbW1tbm5tbGlpbnV7fn+Af358fH6AgICAfnhzc3d/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn19fn59fX17fHx8fHx8fHx8fHx8fHx8fH19fX1+fn5+fn+AgoWGhYF9fH6Ag4SEhIaGhYWFg4OBgYGBgX9/f39/goSDf319gYeIhYSEgX58fHx9fXx6d3Z4dnR1dXNzc3Jzdnh8gIKDhIaHiYuMjo+LgXx7fH19fX5+fn5+fn5+fX1/fn9/f399fX19fH18e3p4ent8f39/f39/fXt6enx/gIB+e3x8e3x+gYOGg4B/gIB/fn+Af3+BgH9+fXt9f4KDhYSBgYKEiImIh4WEhoaGhYWEhIWHiIqHfXVvc32DgH5/fnZ2fIF6c3JwcHBubWtranB5gIGAgYKAf4B+d3BtbWxsa21tbWtqaGludnx+f39/f32AgICAgIB6cXJ1fH9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fX1+fn19fXt8fHx8fHx8fHx8fHx8fHx8fX19fX5+fn5+f4CChYaHg39+f4KEhYSEhYWEhISCgoCAgICAf39/f3+Cg4F+en2Bh4iFhIR/fXt9fX19fHp6eXZ0c3V2dXR0dHV2eHp8f4CCg4iJi4uNjo6JgX59fX59fn5+fn5+fn19fX+AgH9+fXx8e3x7e3t7fHt5enp9fn9/f399e3p6fH+AgH57fHx8fn+BhIaEgYCAf35+f4CBgYGAf35+fX6AgoOFhIGBgoSIiYiHhYSGhoaFhYWFhoaIioeAdnFxeX18en5/fHx8fnx5c3BwcG5ta2trcXqBgYCBgoB/gXt1b21tbGxrbW1tbWxnaXB4fX6AgH9+foCAgIF/fXZxdHl9fn5/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX18fHx8fHx8fHx8fHx9fX19fX19fX19fn5+fn5+f4GEhYaEgX+BhISGhYOFhYSEg4KBgX5/gICAgH9/gIGDg4B8fYGHioiHhoJ+fn9/fn17e3p6eHV2dnd3dnh1dnl5e3t9f4CBhYmKi42Njo2IgX59fn5+f35+fn5+fX5/gIB/fHt6ent6e3t9fn9+fn18e3x9f4B/f357eHp9gYGAfHp7fH1+gIGEhoOBf39/fn5/gIKCgoB/fn18foCChIWEgYGChIeIiIeGhYaHh4eGhoWFhYaJhoR9dHV5fIGAgIGCg4GAf352cHBwbm1samtyfYGBgIGBf4B/fHJsbW1sbGxsbW1samhrdHl+f39/f39/gIGBf312cnR4fH1/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fXx8fHx8fHx8fHx8fH19fX19fX19fX1+fn5+fn5+f4KEhYWEgoGEhYSCgYGBgoKBgH9+fn+AgICAgICAgYKDgn58gIeKiIeHhYGAf399fHt7fHx8eXh2dXV2eHp7e3t8fH1/gYGEh4mKjI2OjY2HgH1+fn5/f39/f35+f3+Af317enl5enp7fH5/gH+AgH9+fX5/gICAfnt4en2BgYB8eXl7fH6AgYWGgn9+f35+f39/f4CAfn59fH1/gYKEhYSBgYGDhoeIh4iGhIaHhoaGhoaGh4eHhYJ8fH5/goGAgIKEg4OCgH51cHBubWxqa3J9gYGAgYF/gH98dG5tbWxsbGxtbWxpaGx0en5/f39/f3+AgYF/enV0dnp7fX9/gIB+fn5+f39/f39/f39/f39/f39/f39/fn5+fn5+fn59fX19fH17e3x8fHx8fHx8fX19fX19fX1+fn5+fn5+fn1/gIKGhYWGg4SDgoB/f3+AgICAfn5+gICAgICAgH9/gIKDfn2Ah4qJiIaEg4GAf3x7enp8fX16eHV0dHV5enx8fn1+gICAgIKFh4iKioyNjIyHgX5+fn+Afn5+f4B/f39+fHt5eXh5e319f4CAf4GDgoKBf36AgICAend7fX9/fnp3eXl7f4GChISBf359fX9/f39+gH9+fHx9fn+BgoSDgoGBgIGEhoeIiIaDg4aGhoaFh4eHiIiFgoB9fH2CgYCAgoWGhIGBgHpyb29ua2ttc36AgoGBgX+AgH11b2xsbGxrbW1tbWpqbXd9f4B+fX5/gIGBf353dHV4eXt+f39/f35+fn5/f39/f39/f39/f39/f39/f39+fn5+fn5+fn5+fn19fH19fHx8fHx8fHx9fX19fX19fX19fn5+fn5+fX9/gIKEhYaEhoOCgH9/f4CAgIB/f36AgICAgICAf3+AgYOBf4CHiomIhYWEg4B9enh4eHp8fHt4dXNyc3Z6fHx+f3+AgICAf4KGioqJi4yMjIyGgH5+f39+f4CBgH9+fn18e3p6eXp8fX1+fn+ChYeGhYOBf4CAfn58e31+gH9+end5eXt/gYKEhIF/fn19fX1/f39+fn18fH1/f4GDhYSCgYGAgYOEh4iHhoaFhoaGhoWHiIiGhoWCf3+AgYODgYKFhYWFg4KBfXVwb25ra212foCCgYGBf4CAfXRubGxsbGttbW1tamlvd31/gH59fn+AgYF/eXN1dnh5e35/f35+fn5+fn5+f39/f39/f39/f39/f39/f399fn5+fn5+fn5+fn18fHx8fHx8fHx8fH19fn5+fn19fX1+fn5+fn5+fn9/gIGEhoaGhIOBgH9/f35+fn9/f3+AgH9/f39+fn+Bg4OAf4aKiYeGhYSBe3d2dXV2eXt7e3d1c3NzdXl7fX9+f3+AgH9+fICFioyLi4yMjImEf39+fn+BgYF/fX1+fXx8e3t7fH1+fn5/goeJiomHhYOBgH9+fnx8fX+Af314dnd5fH+BgoOEgX9+fXx8fH5/f359fXt7fX+Bg4WFhIGCgoGBgoOEhoeGhoSFhYWFhYaIiIaFhIKCgoODhISCg4aGhYWEgoGAenNwbmtqbniAgYKBgYF/gIB8dW1sbGtrbW1ubGppanF5fH59fX5/gIKBgn14dXh5eXl7fn9/fn5+fn5+fn5/f39/f39/f39/f39/f39/f31+fn5+fn5+fn5+fXx8fHx8fHx8fHx8fX1+fn5+fX19fX5+fn5+fn5+f39/gIOFhoaFhIKBf39/fn5+f39/f4CAf39/f359foCCgoKBg4mKhoSBgHt4cm9vcnV5e3t7eXZzc3N1eXt9fX1+f4CAf3x7fH+GiouLi4uLi4qFgICAgYKBf35+fn19fHx8e3t8fH19f4OGiIiKioiGhIKAf35+fH1/gIB/fnl4eXl8foCChISBf35/fn19fn9/fn19fHx9f4KDg4SDgYKCgoKCg4OEhoeHhYODhYWFhoeHhYSEg4ODhISFhYaHiIiHhYODg4KBe3d0cXBzeoCBgoGBgX+AgHxzbGxsa2ttbWxramhrc3t9fn19foCBgoF/end2eXp5eXt+f39+fn5+fn5+fn9/f39/f39/f39/f4CAfn5+fn5+fn5+fn5+fX19fHx8fHx8fHx8fHx9fX19fX1+fn5+fn59fX5+fn5/f39/gYGDhIWFgoB/f39/f39/f39/f39/fn9/fn5+foCBgH18f4WGgn98fXx4cW5vdHl8fX16enZ3dnd5enx8fX+BgYB/fHt8fX+BhIiJiomJiIWAgIGCgH9/fn19fX18fHt7e3t9f4OFiYmKioqJioWEgX59fX18fX9/f398end4eHt+gYKDgoKBgX9/fn5+foCAf358fX6AgoOBgYKBgoGCg4OCgoGChIeFg4SEhIWFhoaFhYSDhISFhYaGhoaGhoaGhISDg4OCgH17eXl+gYGBgYKAf35/e3Jua2trbG1tbGtqaW12fH5+fn+BgoKBf3t3dXh6enh4en5/f35+fn5+fn5+f39/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX18fHx8fHx8fHx8fH19fX19fX5+fn5+fn19fn5+fn9/f39/f4GCg4OBgH9/f39/f39/f39/f39+fn5+fn5+f4CCgn98gIGCgIGDg354cm9ydnp+fn5+fHx8fHx9fn6AgYGBf318e3p8fX6AhIiLjIyIhYGBgYB/fn59fX18fH19fX5/gIKEhYiKiomLi4mIg4KAfnx8fX1/gIB/f3x6d3h6fX+BgoKDg4ODgYF/f35+gIB/fn1/goSCg4WFhYSEhIKCgoF/fn+ChIWDhIWEhYWGhoaFhISFhYWFhYWGhoaGhoaFhYSEhIOEhIKAf4GCgoKCgoB/fn97cm5ra2tsbW1sa2lobXd9fnx9f4GCgoF/e3d3eXl5d3d6fn9/f319fX19fX1+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn5+fn19fX19fX18fHx8fn5+fn5+fn5+fn5+fX1+fn5+fn5/f35+gICAgH9/fn5+fn9/f39+foCAf39+fX19fX1+f4GBfnx9gIOChISEg312cHF2eXx9fn5/fn1+gIGCgoKBf359fHt7fHx7fH+AgoWKioeEgIKBgH9+fXx8e3t7fHx9gISEhYaIiYqKioqJhoOAgH9+fHx9f3+AgH99fHp4eXt+f4CBg4ODhISDgYB+f39+fnx9f4CDg4ODhISDg4OFhIOGg4OAfoGDhYOEhIWFhoWFhYWDgoODhYWEhYWGh4eHh4eHhoaGhoSEhIODg4SEhISCgYB/gHlybmtra2xubmxrZ2lweH5/fX2AgYGBgX16d3l5eXh2dnp+f39/fX19fX19fX5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fX19fX19fX5+fX1+fn5+fn5+fn5+fn59fX19fn5+fn9/fn5/f35+fn5+fn5+f39/f35+fn5+fn59fX19fX5/foOCfnt+gIOEhIODgn11c3V4e3x+fn5+gIF/gICAgYB+fXx6e3t8fHt8fX+AgIGBgoKAgIB/fn18e3x7e3t7e3+BhIaHh4mLioqKioeEgH9+fXp6fH1/f4CAfnx8enh5en19fYCCgoKDg4OBgH5/f35+fn9/gIODg4OEhISEg4WFhoaGhoWFgoKDg4SEhYWGiIiGgX9+gIB/f4CBg4aFhYWFhYWGhoaGhISEg4ODhISEhISCgYCAeXFsa2trbGxsbGtpa3F5fX59fYCBgYGAfHl4eXl4d3Z2en6AgH99fX19fX19fn5+fn5+f39+fn5+f39+fn5+fn5+fn5+fn5+fn59fX19fX19fX1+fn19fn5+fn1+fn5+fn19fX19fX5+fn59fX5+fn5+fn1/fn5+fn5+fn5+fn19fX19fX19fX1+f4KAfXp9gYSEg4ODg3pzcnZ5en1+fn9/f35/f39/f318e3t7e3t6enp8fn99fn+Cgn+AgH99fHp7e3t6e3t8gIKGiIiJiYuKiouKiIWBfnx6eXp8fn9/gIB+fHp7eXp6ent9f4CBgYODg4KAgICAfn58fYCBgoKDg4SEg4OFhYWFhYWEhISEhISDg4SGhoeGhYB5dXh8fX9/fn+Ag4SFh4SFhYWEhYWEhYSEhIKEhIWFhISDg4F5cW1ra2xsbGxramlsdHt/fX19gICCgX98eXl6enh2dnZ5fYCAgH59fX19fX1+fn5+fn5/f35+fn5/f35+fn5+fn5+fn5+fn5+fn19fX19fX19fX5+fX1+fn5+fX1+fn5+fX19fX19fn5+fn19fn5+fn5+fX9+fn5+fn5+fn5+fX19fX19fX19fHx+goKBe3p9goSDgoSEf3h0dXh5e39/f317fH19f39/fn18fHt7e3p6enx+fX6AgoKCgH9/fn18e3p6ent8fX6BhIeIiIiIiYqKiomJh4OBfXp5enx+f3+AgH99fXt8e3p5eX1/gIGBgoKCgYCAgoKBgH6AgIGCgoODhISDg4SEhYWEhISEhISDg4SEhoWFhYJ9dG5weH1/fn59fn6AiIuKhoWGhISCgoOEhIWFhIODg4OEhISEg310bmxsbGxsbGtqaW11fH99f3+AgIGAf3x5eXyAf3h0dHl9gYGAfn5+fn59fX1+fn5+fn9/fn5+fn9/fnx9fX19fX1+fn5+fHx9fH19fX19fX19fn59fX19fX18fX5+fX19fX19fX19fX5+fn59fX5+fn5+fn9/fn5+fn5+fn58fH19fHx8fH19fX6AgoF+eHl+g4SEhISDfnd3e3l5fYB/enl8fH1+f4B+fX19fHx7e3p5enx8f4GBgYGAf359fHt6ent6fn+AgoKDhIaGhoaIiYqJiYmIhoOBfHp5fX5+fn9/f39+fn18enl7foCAgYGBgoKCgYKDg4KBgYGCgoKCg4SDg4ODhISDg4ODhISEhISEhIaEg4B+enJubnR6fn9+fX1+foeNiISEhISEg4CBgYOEhoiGg4CBg4SEhYWDgHlzb25tbW1ta2lobnd+fn1/gIB/gH9/e3l5fYSDeXR0eX6BgYB+fn5+fn19fX5+fn5+f39+fn5+fn5+fH19fX19fX5+fn5+fn18fX19fX19fX1+fn19fX19fXt9fX19fX19fX19fX19fn5+fn19fn5+fn5+fX1+fn5+fn5+fn5+fX18fHx8fX19fn6BgoB8eHp+goOEhIOCf35+e3p8f358enx9fn5/gH59fX18fHt7enl6fH2AgYF/f39/fn18fHx7fn+AgYKCgYKChIWFhYaHiYmKiomJhoJ9enl8fXx8f39/f35/fn5+fn+BgIB/f3+BgYGBgoODgoKBgYODgoKDhIODgoKDgoKCg4OEhIWFhISDhIeIhX51c3V7e319eXt+foGNjIN+f4KDg4SCf4CDhIaHiIeCf4CBg4ODg4SDf3pzcG9ubW1raWlweH5+fX+AgoGAf356enp+hH95dHR5foKBgIB/f359fX19fn5+fn5+fn5+fn5+fn58fX19fX19fn5+fn5+fn5+fn5+fX19fX5+fn59fX5+fX19fX19fX19fX19fHx8fn5+fn5+fn19fn5+fn19fX19fX9/fX1+fn19fX18fH19fn+CgoB7eHp+gYSFhYWDgX9/fnt9gX99fX5/f39+fX18fHx8fHt6eXt+gICAf39+f35+fX19fH5/goOEhYOCgoCAgoSGhoiJiYmJiomIhH99e3x8fX1/f39/fn6Af35+f4GBf39+f3+AgICAgIKDg4KCgoKDg4ODgoGAgIGCgYKCgoSEhYWFhYSFiIiGfXN3fX5/fnx8fn+Ij4qAenp6fYCCgoF+foOGh4eIiIF9foGCgoOEhIOCf3x2cm9ubWpoaHF6fn1/gYGBgYB/end4eoODe3d0dHh8goGAgH9/fn19fX1+fn5+fn5+fn5+fn5+fnx9fX19fX1+fn5+fn5+fn5+fn59fX19fn5+fn19fn59fX19fX19fX19fX18fHx+fn5+fn5+fX19fX19fn5+fn19fHx9fX5+fX19fX19fX19fYGCgX98eHh9f4KEhISDgYF/fH6Cgn99fn9/f39+fXx8fHx7e3t8f4CAfoB/fn1/fn59fX18fn6BhIaHhYSCgICBgoWFh4iIiIiJiYiFgX98fHx9fX9/fn5/f4B/gIB/gYF/fX1+gICAgICAgoKCgYGCgoODg4OCgYCAgYKBgoODhISFhYaGhoeIiIWAdXd8fn55eX6Di4eBenl5eXl6e36CgYJ/gIKCgoSIhIB9fYCBgoKDhISDgn54dHFua2dsdnt/f4CBgYGBf317eHt/gn13dXN0eHyCgoCAf39/f35+fn5+fn5+fX1+fn5+fn59fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fn59fX5+fX19fX19fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX59f4GBgoB8eHp9foGEhYSCgIGAfoCCgH9/fn+AgH5+fX17enl6foCBgH9/f35/fn5+fXx9fX19fYCChYeFhICAgH+BhIWGhoiIiIeHh4WEgn99fH19fn59f4CAgYCAgIKCgn58fH+AgICAgICAgYGBgYKCgoKDgYCAgICAgYGCgoKEhISEhoaHiIeHhoJ5d3t7e3h6gYWEend2d3l5eXl5fH5/fXt9foCDhYeHgX18f3+BgoKEhISEgn56dG9sa211fX+AgICBgX+AfXp4fIKBeHJxc3N3fIKCgIB/f39/fn5+fn5+fn59fX5+fn5+fn19fX19fX19fn5+fn5+fn5+fn5+fX19fX19fX1+fn19fn59fX19fX19fX19fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19f4GCgX99enl7fYCChISBgH98e31+f39+f4CAfn59fXt6fH+BgH+AgH99fXx7fHx8e319fXx8f4CCg4KBgICAf4GDhIWFhoeHhoSFhYeGg4GAfn59fX5/gYGBgICAgoKCfnx9gICAgoGAf3+AgIGBgoKBgYGAgICAgICBgYKCgoGBgoKDg4SFhISCgX13enp3dXuCgnx2dXZ3dnZ2dnVxcXN6f4OEhoaGh4aDfnt+f4CAg4ODgoODg4B7dW1qcHh+f4CAgIGBgH98eXt/gX12dHRzcHR5goKBf39/f399fX5+fn5+fn19fX1+fn5+fn5+fn5+fn5/f35+fn5+fn9/fn5+fn19fX19fX19fX19fX5+fX19fX19fX1+fn5+fn5+fn5+fn5+fn19fX19fX18fX19fX19fX19fX19fX19fX19f4GBf39+enh5fYCAg4OAgH17fH1+fn5+f39+fn18e3t/gIB/f35+fn57enl7fHx+fn5/fn5+f3+AgICAf39/gYGEhISEhYSEhIWHiIiGhIN/f35+fn+BgYGAgICBg4KAfH2AgYKEg4F/fn6AgIGBgoGBgICAgH9/gICAgoODgYGDg4F/gYKAgIKBfnl3dHJyeoB9dnR0dHV0dHR1b2tyen+EhoWFhYeIh4aCfn5+f3+Bg4SCgoOCgoB6cW50eX2AgICAgYB/fHx5fYJ/eXNycnFvdHmCgoF/f39/f35+fn5+fn5+fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fn19fX19fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fX19fX19fXx9fX19fX19fX19fX19fX19fHx8f4F/f39/e3Z4fH6CgoGBgH18fX5+fn59fX5+fnx8fYB/fX5+fn59e3x8e3x7fX5+fn+AgH5+fn9/gICBgYGCgYKDgoKDg4OEhYaHh4WEg4GAf35/gYGBgYGAgIGDgoB+f4CBg4aGhYKAfoCAgYGCgYGAgIGBgICAgH+Ag4OEhISDf3l7fH5+f4GBe3VxcXJ5f3p1dHR0dXV2dG5sdHx+foCFhoWFh4iIh4WBgIB/f4GBf36AgoODgnx2c3V6fYCAgICBf358fH+BgHt2c3Nzbm51eoKBgIB/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn59fX5+fn59fXx8fX19fX19fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX5+fX19fX19fX19fX19fHx8fHx8gICAgH+AfXl4enx/goKBf318fH5/f319fn5+fH1+f319fn59fXx6e3p6e3x8fn5+f4GBfn59fn5/gIGBgoKCgYGAgYGCg4OEhoeGhoSEg4GAgIGCgYGBgYB/gYKBf39/gYKEhomIhYKBgICBgYGBgYGCgoOEgX9/gICBgYGCg4F7d3l8fX6AgIKAenBvc3p7eHV0dHV1dHRvanF7fn5+foCGhoaGh4eFg4KAf4B/gH98eX6AgIKCf3p1d3t+f4CBgYB/fn1+hIB7dnNzdXJsa3N4goGAgH9/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn19fn5+fn19fX19fX19fn5+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX1+fnx8fHx8fH19fH5/fnt6ent+gIKBfXt7fH9/fn5+fn59fn9+fX1+fX18e3t7enp8f39/fn5/goJ/fn1+fn+AgYGCgoKBgYCAgICBg4SGh4WFhISDhISEgoGBgYGAgH+BgoF/fn+BgoSFh4eGgoGAgIGBgYGBgYKDhIOBgICAgIGBgYKEg4B+gICBg4GChIR/c3Byent3dHR0dXV1cWtye31+fn5+fYCGhoaHh4WEhIF/gH9/f3l0eX2AgoKAfHh5fH5/gIGBf35/gYKCfHZzc3NzcWttdnuBgYCAgIB/f35+fn5+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn9/fn16enp4eXp8fn5/gH96dnl9goKAe3p7fH1/f359fn6Af3x9fX57ent+fnx8fH1/f358fX5/gYB+fn5+f3+BgYGBgYGBgYCAgICBg4SEhIKDg4OEhoaEgoKBgYGAf4CCgYB+f4CBgoOGhoWDgYF/f4CAgICBgYSFhIGCgoOBgYGBgoOFhISDg4ODgoOGhoF4c3N6e3d1dXR0dXJsbHl+fn5+fn5+goeFhYaGhICAf4B/f3+BenBzeH2AgoF9enp8f4CAgIB+gIGBfnx4dXNxcnJtam13fYGBgICAgH9/fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5/fXp5eXd3eHl8fn9/gH99enp8gIGAe3p8fX19fHx+fn5+e3t7enp7fHx8fHx+fn99fXx9fn6Af35+fn5/f4CBgICAf4CBgICAgICBgoKCgIGBg4WFhYWDg4KCgIB/gIKBgH5/gIGCg4aGhYOBgICAf39/f4CAg4SDgoODg4GBgYGCg4WEhISEg4OCg4WFgn13dXl5dnR0dHR0b2pyfX5+fn5+fn6ChYSChISCgICAgX9/f4F7cXB0e3+Bf3x7e31/gICAgH6AgX98eHRxcXFxcnFzeH2AgICAgICAf39+fn5+f39+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn5+fn19fn5+fn5/f39/f39/f3+AgICAf39/f39/f39+fn5+fn5+fn19fX1+fn5+fX1+fn5+fn59fn59eXh4dnd3eHl8f4GAgIB/enh8gIF8eXt7enp5fX9+fX16enh5enp7e3x8fX2Af318fX9/gIB+fXx8fH1/gIB/gICAf35+fn5+f3+BgYGBgYGCg4SEg4ODg4F/foCBg4KAf4CBgoCChoWFg4GAf35/f39/gICBgYGAgoSDg4KCgoKEhYSEhYWEg4ODgoKDgHp4eXl1c3R1dHJqbHh9fn5+fn5+foGEgYCAgIGAgIGCgIB/gXxzcXJ4fX9/fXx9f4GAgICAfoB8eHh4d3VzdHl4en+BgoKAgICAfn5/f35+fn5/f35+fX1+fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn9/f39/f39/f4CAgIB/f39/f39/f35+fn5+fn5+fX19fX5+fn59fX5+fn5+fn1+fn15eHh1c3N0dnh7fH6AgH+AfXx8fX16eHh6fH5/fn58fHx7enl4eHp7fHx9fn59fX1+f3+AgH59fHx8fH1+fn9/fn5+fX5+fn5/f4CAf39/f4CBgoKBgoGBgICAgYKDgoB/gIGCgYGDhoWDgYB/fn9/f3+BgYGBhIKChIODgoKCgoKEhISFhYSDg4OBgYF/eXd5eHRzc3Nybmlyen1+fn5+fn5+f4GAf3+AhISBgYKAgH+Be3FwcXV6fn59fH1/gYCAgIB+fHh3eX2BgH5+gIGChISFhX9/fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fX1+f39/f39+fn9/gICBgX9/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3x6enZ0cXJydnd5fX6BgIB/f358fHt6en2Af35+fnx8e3h4eHl7e3t7fH19f359fX5/fn6Af359fHx8fXx8fH1+fnx8fX19fX19fn5+fn5+gICAgICAf3+Af4CDhISDgoCBgYKCgIGDhIN/fn59fn59f4GCg4KDg4KChISCgoGBg4OEhISEhISCgYCAgX54dnh3dXNzc3Fra3V9f35+fn5+fn5+fX5+gISGiISDg4GAgYGAdW9xdXd8fX19f4CAgICAf3t4dXd7foKEg4GCgoSEhYWGf39+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5/f39/f4CAf3+AgH9/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/e3p6d3RxcXFydnl8fH+AgH9/f358e3p8foCAfX19fXt5eHd3eHt7e3t8fH5/fn19fX5+fX9/fn18fHt8e3t7fHx8fHx8fH19fHx9fn5+fn5+fn9/f35+foCBgoWFhISEg4KCgoF+foGEg4GAfn1+fnx9gYODhISEhISEhIODhISDg4SEhISEhIKBgIB/eXRyeHd2dHNzcWpuen5/fn5+fn5+fn5/fn+Fi4iHhYODgoGBgX52cnN3eXx9fX1/gICAgIB+enh5en+AgoGCg4OFhYeJiot+fn19fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f39+fn5+fn5+fn59fX19fX5+fn5+fn5+fn5+fn5+f398eHZ1c3JxcXN2e31+fnx+foCAgHt7fH6AgH99enl2d3l5eHh5ent7e3x8fX5+fn58fX1+fn5+fXt7e3t7e3p6e3t7e3x8fHx7fH19fX1+fnx8fX1+fn6AgoSFhIWDgoGCg4SEgoB+gYOCgICAf319f3+AgYODgoKDg4ODgoSEg4SEhISEhIODgoGAf3t4dXV1d3d1dXNvam96fn5+fn5+fn5/f39+hY2LhYWGhoOCgX9/gH55eXt8f39/f39/gICAgH57eXx+gIGBgYKDhISHiImKi35+fX1+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/f39/f39/f35+fn5+fn5+fn19fX19fn5+fn5+fn5+fn5+fn5/f3x4dnR0c3JydHh7fHt7ent7fH5+f39/gH99fHl4d3d3eHp5eXl6e3t7fHx9fn5/f3x8fH5+fn59e3t7e3t7enp7e3t7e3t7e3t7fHx9fX19fX19fX19fYGEhoaFg4GAf4CAgoOEgoGDhoWDg4GAf39/f4CBgoGBgYCAgICBgoOEhISEhIODg4OCgX57dnZ1dXR2dnZ1dHBrcXp9fn5+fn5+fn9/fn+HiYOAgoWGg4KBf3+AgYCAgIGBgYCAgICAgICAfnt7fn+AgYKDg4WEhoaGh4qLfn59fX19fn5+fn5+fn5+fn5+fn5+f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+f399fX19fX1+fn5/f39/f4CAgIB/f39/f39/f35+fX1+fn5+fn5+fn1/fn5+fn5+fn5+fn5+fn5+fn9/fHp3d3d0c3N0enx8fHp7e3x8fXx7fYB/fnp4dnd4eXp5enp5ent9fXx8fX1+f4B/fn19fX19fHx6enp6enp6enp6e3t7e3t7e3t7e3t7e3t7fHx8f36AgoWFhIF/f35+fn5/f4GBg4SHh4aFg4KCgICAgYGCgoGAfXt8fX5+f4KEhIODg4OCgoGAfXt4dXV0dXZ3d3ZzcW5xen1+f399fX9/gYOAgoWDf3+AgYSEg4ODg4KCg4OEhIODg4OCgYGAf399fH1/gIGEhYeHhISEhIaIio1+fn19fX1+fn5+fn5+fn5+fn5+fn5/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5/f319fX19fX5+fn5/f39/gICAgH9/f39/f39/fn5+fn5+fn5+fn5+fX9+fn5+fn5+fn5+fn5+fn5+f398end4d3V0dHZ5fHx8ent7fHx8fn6AgH99e3l2d3h5enp5eHl6e3t8fX19fX5/gIB/fX18e3t7e3p6enp6enp6enp7e3t7e3t7e3t7e3t7e3t8fHx+f4CEhYOBfn5+fn5+fn9/gICAgYOEhISDgoOCg4OEhISEg4J/fX59fX1/goSEhISDg4ODg4GAfXt5dXR0dHV2dnNvbG54f4GBgoSFh4eGhYOFhoWCgoKDhISEhIODgoKDg4SEg4ODg4KBgYB/f39/goSGh4iIh4WDgYGDhoiKjX5+fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn5+fn9/fn5+fn5+fn5+fn5+fX19fX19fn5+fn5+f3+AgICAf39/fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3x7eHl5eHZ3eXx8fHx8fHx8fHt8foB/fXx8end5enp5eXh5eXp7fH59fX19fn1+gIB9fXt7e3t7fHx6enp6enp6ent7e3t7e3x8fHx8fHx8fHx8fH1+gIKBgH59fX1+fn5+fn5/f4CAgYGAgICAgIGEhoeHhoeHhIKBgIB+foGCg4ODg4ODg4ODg4CBf356d3RzdHRvcG9vdn+EhYaGhoaGhoWEhYWFhYSEhISFhYaGhIOCgoKCgoKCgoOEg4OCgoWEhIeIiImGhIKDg4OEg4aHiIqKfn59fX19fX1+fn5+fn5+fn5+fn5/f39/f39/f39/fn5+fn5+f39/f35+fn5+fn5+fn59fX19fX19fn5+fn5/f4CAgIB/f39+fn5+fn19fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fHt4eHh4eHl7e3x8fHx8fH18foCBgH96eHh5eXp6ent7e3x6enp7fX17e3t7e3t8fX19e3t7fHx8fHt7enp6enp6e3t7e3t7fHx8fHx8fHx8fHx8fX1/gH9+fXx9fX5+fn5+fn9/f39/gICAgICAgYGBgoOGh4eHhoWEhIKCgoGAgIKCgoODg4ODgoKBgH98end1c3Z3en5/goSFhoWFhYWEg4OFhYWFhISEhISEhISGhISEgoKBgYGBgYODgoWGiYiIiIaEg4KAgIGDg4SEhYaHh4d+fn5+fX19fX5+fn5+fn9/fn5+fn5+f39+fn5+f39/f39/f39+fn5+fn5+fn5+fX1+fn9/fX19fX9+fn5+fn5+fn5+fn9/f31+fn5+fX1+fn5+fn5+fn5+f3+AgH5+fn5+fn5+fn1+fn19fn57enl4eHd5ent7fHx7fHx8fH2AgYGAfXl0dHZ3e3t7fH1+fXx6enp6fHt8enp7fHx9fn19e3t6e3t7fHx7e3t7ent7e3t7e3t8fXx8fH19fX5+fX19fX1+f359fX19fX1+fn5+fn5+fn5+fn6BgYKCg4ODg4ODg4OCg4KBgYGAgICBgoODg4ODg4OEhIKCgYCAfX1+gICBgYKEg4WFhYWFhISDg4SEgoF/gIGBgoODhIaGhYWCgYB/f4CBg4OFhISHiIiGhIWFg4ODg4ODg4SEhYWFhX5+fn59fX19fn5+fn5+f39/f35+fn5/f35+fn5/f39/fn5+fn5+fn5+fn5+fn5/f35+fn59fX19fn5+fn5+fn5+fn5+f39/fX5+fX19fX5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX1+fn18enl5eXl5e3t8fHt8fHt9f4KCgYB/e3Z0dHd7fHx+fn59e3p6enp7eXp6e3p8fHt9fX18e3p7e3t8fHt7e3t6e3t7fHx8fH19fHx8fX19fX1+fn19fX5+fX19fX19fX5+fn5+fn5+fn5+fn9/gYGCgoODg4ODg4CAgYB+fn9/f4CBgoKDg4ODg4SEg4OEgoGBgoOCgoODhIWHiIeHh4eEgoB/f318en5+f4CCgoSFhoaFhYOCgYCAgICCgYODg4WHioqGhYWDg4OCgoKCg4OEhIWFfn5+fn19fX19f35+f39/f39/fn5+fX5+fn5+fn9/f39+fn5+fn5/f39/f39/f39/fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f359fX1+fXt5eXp5eXl6enx8fHt7fH6CgoF/f316d3V1dnp8fXt9fXx7eHh4eXl6eHl7e3x8fHx8fHp6ent7e3x8e3t7e3t8fH19fX19fX18fH19fX1+fn5+fn5+fn5+fX19fX19fX1+fn5+fn5+fn5+fn5/f4CAgYOCg4ODgYGAf35+f39/f3+AgYKDhISEhISEhIWFg4OEhYSFhoaHiIeGhYSBgH57enp5eXx/gIKDhISHh4eHh4aGhIOBgIGCgYGCgoODg4SIiomFhIKBgYCAgICBgYODgoJ+fn5+fX19fX1/fn5/f35+fn5+fn59fn5+fn5+f39/f35+fn5+fn9/f39/f39/f39+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/fn19fX59e3l5enl5enp6e3t7e3x+gYKCgH9+fHp3dXV1eHt7e3t7e3p4eHh5eXp6e3l5enp7e3t7enp6e3t7fHx7e3t7e3x8fX19fX19fXx9fX19fX5+fn5+fn5+fn5+fn19fX19fXx8fn5+fn5+fn5+fn9/gICAgYGBgYGBgIB/gIB/f39/f4CBgoODhISEhISEhYWFhYSFhYaHh4iJhoOBf4GCgYGAfXt8gYWGiIiJiYeGhoaGhoaFhIKBgYGBgoKCg4OCg4aHiYWBf4CAgICAgIGBgYGBgX5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn9/fn5+fn9/f39+fn19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5/f39/f39/f39/f39/fn5+f39/fnx6e3t6enp6ent7enp8f4KCgH57enp8end1dnZ2eXx8fH18eXl2dnd4enp7enp6ent7e3t7ent7enp8fHx8e3t7fH1+fX1/f35+fX19fX19fn5+fn5+fn5/gICAf359fX19fn5+fn19fX19fX5+fn5+foCAgICAgIGBgICAgICAgICAgIGBgoKDhYWEhIWFhYaEhIODhISEhISFhYSEhISDg4ODgYSFhoeHhoWFgoGDhYaFhYeGhIF/foGBgoKDg4OEhYWHhoOAgYB/gIGBgICAgH9/fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+f39+fn5+f39/f35+fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn9/f39/f39/f39/f39+fn5/gIF/fHp7e3x7enp6e3x8foGCg4OBf3x8e3t5eHZxcnZ8fXx8fHt5eXd3d3d6enx7enp6e3t7e3t7enl6ent7fHx7e3t8e3x8fH5+fn59fX19fX1+fn5+fn5+fn+AgICAfn5+fn5+fn5+fX19fX19fn5+fn5+f4CAgICAgICAgICAgICAgICAgYGCgoOFhIWFhYWFhoaFhYSDhISFhYaGhYWFhYSEhISEhISFhISEg4OAf4GEhoaGh4iHhYKBgYGCgoODg4OEhYeHhYOAgH9/f39/f39/f399fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn59fX5+fn19fn+AgH99fHt7fn18e3p7e36Cg4ODgX98enl6enl3dnRxd3x+fHx6eHd5d3d1d3h5e3t6enl7e3t7e3t7enp7enp7e319fX58e319fX19fX19fX1+fn5+fn5+fn5+f4CAgoGBgYB/f35+fn59fX19fX19fX19fn9+fn9/f39+fn9/f3+BgX9/gICBgYKCg4SFhYeHhYWFhYaHhYOFhYWGh4aHh4eHhoaGhoSFhISDg4SEgoGAgIGChIaHiIiGhYOAgIKCg4OCgoOEhYaHhYOAf39/f39/fn5+fn19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/fn5+fn9/fn5+fX19fn9/fn18e3t7enx8e3x/g4SEgYB8ent7enl5eXh2cXB2fH17eXZ2d3l4eHV1dXh6enp6eXp6e3t7e3t6ent7e3t7e3t8fXx7fHx8fHx8fX1+fn5+fn5+fn5+fn5/gICCgoKCgX9/fn5+fn19fX19fX19fX1+fn5+fn5+fn9/fn5/f39/f3+AgIGBgoKBg4ODg4SFhYWFhoeHhoWFg4WGh4iIiIiIiYmIh4WDg4KCg4OBgICAgIGDhIWHiYeFg4KCgoKDg4ODgoOEhYaFhYKAf39/f39/f39/fX19fX19fn5/f35+fn5+fn9/f39/f39/f39/f35+fn5+fn5+f3+AgICAf39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn9/f39+fn5+f39+fn5+fH5/f39+fHx8e3t7e3t6fYGDhYN/fXx9f398e3p4d3Nwb3R4e3p5dnZ2d3d4eXl4d3h4eXp6eXt7e3t7e3t8fH19fXx8fH19fX19fXx8fX19fX5+fn5+fn5+fn5+fn9/gIGDgoKBgH9+fn58fX18fX19fn59fX19fX18fH5+fn5+fn19f39/f39/gICAgICAgoKCgoOFhYaGh4eHhoWEhISGiImJiYmJi4qGhYOCgICAgIB/fn5+f4KFhoiJh4WDgoKCgoODgoKCg4OEhIWFhIKBf35+f4CAgIB9fX19fX1+fn19fn5+fn5+f39/f39/f39/f39/fn5+fn5+fn5/f39/fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35/f39/f35+fn5/f35+fn5+f4CAgH58fn17e3t7fH1/goKAfnx8foCBgX98eXd1cW5ucnZ5eXl2dnZ1d3l7e3t5d3d5enp5e3t7e3t7e3x8fX19fHx8e3t7e3x8fX1+fn19fn5+fn5+fn5+fn5+f39/gICCgoGAf35+f359fXx9fX18fH19fX19fX5+fn5+fn5+f39/f39/f3+AgICAgICBgYGBgYKEhYWGh4eHhoSEhIWGh4eHiIiHhYKBgH9/f39/f31+fn5/gYSFhoaIhoSDg4SEg4OCgoKCgoODhIWFhYSCgX9/gICAgH19fX19fX5+fn5+fn5+fn5/f39/f39/f39/fn5/f319fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn58fH1+fn5+fn5+fn5+fn5+fn5+fn59fX5+f39/f35/gICAgH9/fn5/f39/fn5+fn+Af3+Af399fHt6e3p9f4GAf317fHx+gYKCgH15eHd0cnBxdXl5eHd1dXd5e319fHx6eXl5enh6enp8fHt8fX19fXx8fHx7e3t7enp7e319fX18fn5+fX19fX19fn5/f39/f4CBgoGAf35+fn19fX19fX19fH19fX19fX1+fn5+f39+fn9/f39/f39/f39+gICAgICAgIKDhYaFh4eHhYWEhISFh4aFhIGAf35+fn5+fX1+fn5+f3+BgoOFhoiGhYSEhISDgYKCgoKCgYKEhIWFh4WEgoCAgICAfX19fX19fn5+fn5+fn5+fn9/f39/f39/f39+fn9/f39+fn5+f39+fn5+fn5+fn5+fn5+fn5+f358fX5+fn5+fn5+fn5+fn5+fn5+fn9/fn5/f39/f3+AgICAf39+fn9/f39+fn5+f4CBgYCAgH58e3p7foCAf359fHt8fH6BgoJ/fnp5eHVzcHBzdXh4d3d2d3l7fH18fHp7eXl5d3h5eXp6e3x9fX19e3t7fHx8fHx7e3t7e3t7e3t8fHx9fX19fX1+fn9/f39/gIGCgoGAf35+fX19fX19fX18fX19fX19fX19fn5/f35+f39/f39/f39/f36AgICAgICAgICChIWFhoaFhYSEg4SGhoSCgYB+fX5+fX19fX5+fn5/f3+Bg4SFh4aFhISEhIOBgoKCgYGBgIGDg4SGiIiDgYCAgIB9fX19fX1+fn5+fn5+fn9/f39+fn5+fn5+fn5+f39/f39/f39+fn5+f39+fX5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gICAgICAgYGAgH9/f39+fn5+fn5/gIGBgYGAf3x7e36AgoOCf3x7e3t8fYCBgoB+fXl3d3Nvb3FzdXd4dnd4eHl5fHx7fHx6eXl4d3d4eXl5ent7fX17e3p8e3t7e3p6enp6enl5enp7e3t8fHx9fX5+fn5+f35/goOCgoGAfn19fX19fX19fX19fX19fXx8fX1+fn5+gIB/f4CAgICAgICAgIB/f39/f39/f3+BhISFh4aFh4aGhoaFhYWCgH9/fX1+fn19fH19fn9/f4CDhIWFhoaEg4ODg4SCgoGBgYCAgYKEhIaJiIaDgIB/f319fX19fX5+fn5+fn5+f39/f35+fn5+fn5+fn5/f39/f39/f35+fn5/f359fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f3+AgICAgICBgYCAf39/f35+f35+fn5/gICAgIB/fHt8f4OCgIB/e3t7fH1+gIKDgoB+enl4dHBvcG9xc3V2eXp6eXl7e3t8fHp6enh3d3h5eXl6e3t8fHx8fHt7e3t7enp6eXl5enp6ent7e3x8fH19fX1+fn5+fn+AgoKDgoGAfn19fX19fX19fX19fX19fn5+fn5+fn5+fn9/gICAgICAgICAgH9/f39/f39/fn+BgoOFhIWGhoeGhoWFhYSDgX99fX19fHx8fX1+f39/gIGDhYSGhoaFhISEgX+BgYGBgIB/gYKEhoeKh4SBgH9/fn5+fn5+fn5+fn5+fn5/f35+f39+fX5+fn5+fn9/f39+fn9/fn5/f39/fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f4CAf3+AgICAgICAgH5+fn5/fn59fX9/gICAgH58fX+Dg4B/fnx7fHx9fH6AgoSDg39+e3h1cnFwb25vcXN2d3p5enl6fX19fXt7enl5eXl5enp5enx8fHx8fHp6e3p5eXp5eHh6enp6enp8fHx8fHx8fH19fn5+fn+AgYKCgYB/fn19fX19fHx8fHx8fX19fX19fn5+fn9/f39/f39/gICAgH5+f39/f39/f39+fn+BgYOEg4WGh4eHhYWFhYWDgH59e3p7e3x8fH5+fn5/gYKChIWFhYWFhYOCgH5+gYKBgYCBgoODhYiIhYKBgYF+fn5+fn5+fn5+fn5+fn9/fX5/f359fn5+fn5+f39/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gIB/f4CAgICAgICAgIB/fn9/fn19f4CCgoKAfn1/goOCf358e3t8fH18foCBgoKCgH57dnRyb25vbm5wcnN2eXp8enh5eXt7e3t6enp5eXl5eXl6fHx8fHx8fHx7enl5eXh5eXl5enp8fHx8fHx8fHx8e3x8fH1+fn6AgYGBgoCAfn19fX18fHx8fHx9fX19fX1+fn5+f39/f39/f39+fn5+fn5/f39/f39/f35+fn5/gYKCg4WHh4eFhYWFhYSCgH58e3t7fHx8fn5+fn+AgoKDhYWFhYWFg4KAfXx+gIGBgIGCg4OFiIiGg4GCgmtsbW5vb29ub29vcnR1dnZ3eHp6enp3dXJwcXFwcHBwcXFyc3N1eHl6enl5eXl8fH19fn+AgICAgICAgICAf39/fX5+fX19fX19fX17e3x8fHx8fHx8fHx8fH19fn5+f4CBgoOEhIWFhYWGhoWFhoaEg4J8c2pkXltdX2FkYV9dW15jZWhoZWBgYmdsc3qAhIWFhISBe3FmXVlYXWJqdHp+gX97dXJwcG1pZmFhZGdrbnBxdXl6gIGAgICAgH9/f3x3cG1qampqampqa2tucXF0dXV1dXV2dnV3dnd5eHVwZltYVFZbXmNob3mAgYGBgYKCg4GAgH5+fHh2dG9tamdnY2RmZ2doZmhqam1wcnR0dHR0c3JycXBvcXV0dXV6fH9/enZwbGhiYmRjYVxaXWRrbnR0c3Jyc3V3en6Cg4WCbW9vcHBwb3Jzc3R0dXZ3d3h6enp6eHZ0cnBxcXBwcHBxcXJzdXZ2eHp6enp6ent7fHx7fX5+f3+AgICAf39/f399fn59fX19fX19fX19fHx9fH59fHx8fHx8fX1+fn5/gYKCg4SEhYWFhYaGh4eGhoSDfXdwZ2NfXl5gYmJdWllYW19kZ2hmY2BhY2ZtdX6ChYWEhIJ7c2lfXFpbYmhwd319e3d0cnBtbmlmY2JiZWptcHBxc3Z7f4CAf39/gHx6dXBraWhoaGhoaGlrbG5vcnR1dXV1dXZ2dXd2d3l4dXBnXVZVV1xeY2dwd3+BgYGBgICBf4CAfn57d3RvbGppaGdlZWdpaWlqamtqbXBydHR0dHNycHBxcG9xc3Jwc3d7fHx5dHFtaGRjY2JgXFpdZGxzdXVzcnJzdXd6foSGiIVtb3Fxc3Nyc3R1dHV2d3h4eXt7e3l3dXNxcHBwcHBxcXNzc3N0dXV3eXl5e319fHx8fH19fX5/f39/f39/fX5+f39+fnx8fn5+fn19fHx9fX5+fn99fH19fn5+fn5+f3+BgoODhISFhYWFh4eGhoaEg4J9dm1nYF1eYGNkYV5bWFZZXWZtb2plYWBgZW10e4KDhYWFg4B2bWZjYWFkaG90e3l1c3FubW5qaWloZWRlaHB5f4aEend6foCAf399e3dybmpoaGhqamlpaWpsbm9zdnd2dnZ2d3d3d3d4eHl1cGddV1VWWl5kaHB3fX9/gICAgICAgIB/fHp0cm9qZ2hoZ2doaGpqamtrbG5ucHN0c3V1cm9wcHBvcHJycXJ0eHp8fHdzcWtnZWNjYV9bXWFlbHN1dHNzdHV2eHl9hIiJh25vbnBycnFydHV2d3h5enp7fHt7eXZ2c3FwcHBwcHJyc3N1dXV3d3h5eXl7e3t8fHx8fX19fn9/f39/f399fn5/f35+f39+fn5+fn59fX5+fn9/f318fX1+fn5+f39/f4CBgoOEhIWFhoaHh4aGhoSDgn93bmNeX19kZGRiYFlUVFtlcHV2bmVhYWJma3F3f4OFhYWEgXtzbWdiYmVpbG9zdHBubWxsbGxtbWtpZ2dsd3+DhYJ5bnF5gIKAf3p2cWtpaGppaWtrampqa21vcXJ0dnd3d3d3d3d3d3h5enhzamBYVFdbYGNnbnV8f39/f4CAf39+fHl1cm5saWhoaGhmZmdrbW1tbm9ubGxwc3Z0c3Nyb29vb21vcXBvcnR4ent5dnJsaGNhYGFkYWFjZGhuc3RycXF0dXV3en+GiYmIbm5tbnBxc3R1dXV2d3h7fH9/fHt5d3Z1cnFxcXBwcXJydHR2eHh4eHh4enp7e3l7fX19fX1+fn9/f39/fn5+fn9/fn59fX5+f39+fn9/gICBgYCAf39+fn5+fn+AgICAgYGCgoODhISHh4eHhYWFhYWCfnlvaGZiZWZmY15cV1VXYW12fHtya2NhYGNobnV7gYSEhYSCfXZyamVlZmlrb3Bvb21sbGtrbm9ubmppam92fYKBf3hxcXd+gX98d3Jua2hoaWlra2xraWlrbm9xcnV2eHh4eHh4eHZ4eHl5eXVrYlpXVlpgY2htc3x+f39/f4B+f3x4c25qaWhnaGVlZmdpam5vb29vbmxqa3Bzc3N1dXJvb21ucHBvbW1wdHh4enhzcG1pZGFfYWViYWVqbnN1dXJwcXR1d3d5fYaKiopubm5vcHF0dXV2d3h6e31+fX17enh2dXRycXFxcnJyc3V2d3h4eHh4eXl6enp6eXt9fX19fX1+f39/f39+fn5+f39+fn5+fn5/f3+Af3+AgIGBgICAgH9/f39+gICAgYGBgYKCgoODhIWFhoaFhYWFhYKAenNsaGRjZGVjYF5aWF5pdnx/fndwaWNgYGRrcnl/goSFhYSAeXJrZGJlaGpsbm9ubGxsbGxwcHBwbm9yc3h/gX96d3RvbnZ8fHZycGtoamxtb29wbmtpamxwcHR1eHl5eXh4eHh5eHl5ent5dGxjWldZXV9iZ2xzeX5/f39/fXl3c29ubGlnZ2ZkZGVmaWtsbm9vb29saWptcHNzc3Nzcm9tbG5wcG9tbXJ1eHh1c3Bta2ZiYWJlZWZpbXB1eHZzcXBxdHZ2dHV5hYqKimpsbm9wcXN1dnh4enp9fn5/fXt6eHZ1dHNzcXFxcXJyc3V1d3h4eXl5ent7eXl6fH19fHx8fX5+f39/f35+fn5/f39/f3+Afn9/gICAgIGBgYGBgYGAf39/f4CBgICBgYGBg4OCg4OEhISFhYWFhoSFg4F6dG5oZWNjYWBeXVxdZnJ7f4OAenVrZWJeYmdtc3uAg4SFg4F8dW5sZ2RmamtqaWlra2ttb3J0dHJ0dXZ4e3x4cW1tcHBpanR1c25qamtsbW9wcnNwa2hpa21vc3d4eXh4eHh5eXl5enp6e3p1bmZfWlpcX2JnbHF3ent9fHp3cm9raWdlZWNiYmRlZ2ltb3BxcG9ubWxqaGxvcnRzcnNyb25sbnBxbm1ucXR1dHJxbm5rZ2RhYmZma3Bzdnh6d3JwcXN1dnRzdHiEiYuLamxub3Bxc3V2eXp8fn5+fn18e3p4dnV0c3NxcXFxcnJ1dnd4eHh5eXl6e3t7e3p8fX18fHx9fX5/f39/fn5+fn9/gICAgH+AgYGAgICAgYGBgYGBgYB/gICAgIGAgIGBgYGCgoKCg4OEhIWFhYWEg4OCfnhybGZiYGBiYWBeX2RweX2Bg4B7dnJsZGFgZmtxeX+DhIWDgX54cW5pZ2lramhpa2xsbG5xdHZ1dHR4eXl5enZvbnByb2tqam5uaWlsb3FvbnJ0dHBraGlrbW9zd3l6enp5eXl5eXl6enp7enZuZmFeW11fYmdqb3d6e3p2c3FtaWdnZWNiY2VlZWZpbG5vcXNwb25tamhoa3BzdHNyc3NwbmxucHJvbW5vcHBubGtra2hkY2RlaGtyd3t+fnt1c3JzdHV3dHNydoCHh4htbW9wb3Bxd3h7fX1/f39+fX17eXZ1dHNxcXFxcHBxc3R1dnh5enp6e3t6enp6e3t9fXl6fH18fX5+f399fX5+gICAgICAgIB/f4CBgICBgYGBgoKBgIGBgYGBgYGBgYGBgYGBgYKCg4OEhISEhIODg4F7dG5pZWBcXWBgXl5ja3Z9goKDg4B8dW1nYWBiZ3B2fIGEhISCfXx3cWxqZ2tsaWhrbm1ucHJ1dnZ3dnx+end3d3d4enZraGlpbnNvb3F2eXRtbnFycGtpaWptcHJ3eXp5eXl4eXl5eXp6enp5eG9oZGBeXmFjZmtwc3h5dHJubGhnZGRiX2FiZGZnaW1tcXFycnBtbW5qaWlscnZ1dXR0c3BubG1vcG1ra2tramlqaGZlY2JiZWdrb3V7foB+eHRzcnR2eHd0cXB1fIOGhm1tbW9vcHJ3eXx/f39/f359fXt5dnV0c3NzcnJycnN0dHV2eHl6ent6ent7fHx7e3l5enx8fX1+fn5/f39/gICAgICAgICAgH9/gIGAgIGBgYGCgoGAgYGBgYGBgYGBgYGBgYGBgoKDg4OEhISDg4OBfXhxamVfXV1eX19gY2lye4CCgoODgn94cWtlYmFnbXR6f4KEhIOBfnlybWpnZ2hramtrbW5ydHd5enp7f4B5c3V6fn12cW9pZWVpb3N1e4KBe3RxcnJwa2lpamxvcnd7fHx8enp6ent7e3t6enp4cmtkYF5eYWNmaGxwc3Nwa2pmZGNiYmRlZGZoaWttbm5ubnBwbmxrbGxram5ydnV1dHRzcG5sbnFwa2hnZmZmZWRlZGNjYmJlaGxyeH1/fXt3c3BydHZ3dXJxcHJ6gYWFbGxub29ydXd7fn5+f39+fnx8e3l2dnVzcnJxcXBxcXN1dnZ3d3p6enp6enp6enp6e3t7fH1+fX5+f35+f4CAgIGBgICAgICAgYGBgYKCgoKCgoKCgoKBgYKCgoKBgICAgYGBgYGCgoODg4ODg4SCgH14cm1nY2BgX2BgYGFmbniBgoODg4ODgHx2bmhgYGNob3V8goODg4F/eXNuamZlaGpqa2xwc3V4enp8enx9fnZxeH9+eXZ0b2xramlqbnB4e3dxcHZ3dXBrZ2hrbXByd3x9fHx7e3t6fHx7e3x7e3hya2RhYGBiY2Vnam5wb2lnZWdkYmFiYmNnaWhqbm9vbm1ub29tbm5vbWtrb3N1dXV1dXNwbW1vcG9pY2JlZWFgYWRjZGVlZmZobXJ5fXx7enVxcXNzdXVycXFwcHh/goJsbGxucXR2eHt7fX1/f35+e3t6d3Z1dHJycnFxcXJzdHV2d3h4enp6enp6ent7enp7enp7fH19fn1/gIB/gICAgYGAgICAgICBgYGBgICCgoKCgoGCgoGBgoKCgoGAgICBgYGBgYKCg4ODg4OFhH97dnJtaGRiX1xaYGBiZWtye4GCg4ODg4OAfnhybGNfYmZscnqAg4ODgX54dG5qZmVoamprbHF0eXt8e3p4dnZ2dnd9goGAfHhzcXBvb25wdHt4dHN4fX15dGxoaGtsb3J3fH18fHx8e3t6ent7eXl4dnBsZ2NgYGFkZ2hpa2pqaGJhY2RkY2VnZmdpamtub29ubm9xcXBubm9ubG1xdHZ2dnd2dXJwb3BybWdhYWJiYF9gYWJjY2NkZ2htcnl9fHp4dHFyc3N1dHRzcnFxdHuBgWttbW9xc3d4eXp7fH5+fnx6eXh3dnV0cnFxcnJzdHV2dXZ4eHd4eHh7e3p8enp7e3t7fHx9fX5+f39/f3+AgICAgICAgICAgIGBgYGBgYGAgoKCgoKCgoKCgoKCgYGAgIGBgoKCgoKCg4ODgYOAe3VwbGdlY2BeXV1fX2JncXqAg4ODg4KDg4KBe3ZvZmBiZWtxd32BgoKBgHh2cWpmZGZoamttdHh9fH1+goF7dnZ1dnyBgnx6eXl7dnR2c3R3fHdxdHx+fXhybGhoamxvcXZ8fX19fXt8fHx6eXd3d3Z0c29qZWFgYGNpampnZ2dlY2FjZGRpaGlqa2trbG5vbm1tbXBtbXBycm9ubnJ1dnR0dnZzcG5vcHBsZmBhYV5eX19hYmNjZWhoam5zeHx7eHZycHJzdHZ0cXJycXFzeX9+bG5tb3J1d3h5ent8fX17enl4eHd1dHRxcXFxcXFyc3N2d3h4eXl6enl5eXp6enx8fHx8fH19fn5/f39/f4CAgICAgICAgICAgYGBgYGBgYGCgoKCgoKCgoKCgoKBgYGBgYGCgoKCgoKDg4OBf3t2b2pmZWVjYF9fYGNlaW52fICDg4ODg4OCgX58dm9nYWBkaG51e4GCgoF9e3VxbmhmZ2hra3B2enp+gIKHioN+f35+f358eHZzc3FvcHFydXh6eHV2fX59eHJsaGhqbnB0eXx9fX1+fX19fHp5d3Z1dHNwbWlkYmFhZGVmZWRnZ2ViY2VnZ2pqa2pqamlrbm9ubWxsbGxscHJycG9vc3Z4dXV2dnRxbm9wcGtlYmJhXl5cX2FkZWZpamprb3N5e3p4dnJwcnN0dnRxb29wcHF3enltbW1vdHV2eHh6e3t8fH17eHd3dnZ1c3JwcHFxcnNzdHh4eHh5eXp6enp6enp6e3t7e3x8fn59f39/f39/gICAgYGBf4CAgICBgYGBf3+AgYODgoKCgoKCgYGBgYKCgoKCgoODg4ODg4KCgoF9d3FsaWVlZWNiYWJlZmhrc3uAgoODg4ODg4KCgH12b2hiYWFnbHJ6foGBf3x3dHBtaWZlZ2tscXZ6e3+BgoaFf3l0cnV2d3RycW1rbm9vc3V1eHp5dnd+gX54cW9raWtsbnF2e31+fn5+fnx7eXd1c3N0dHFuaGViYmJlZmZnZ2dnaGhnZ2pramxtamlqa2tubW1sbG5tbm9wb3Fyb3J0dnR0cnV2dHFtbnFva2NgYGNjYmFhY2RlZmlqbG1xdHh6eXd0cXFydXV2c3FwcHBwcHV1dG1ub3FzdHR1d3h6enp6enl3d3V1dHNycXFxcXFycnN0d3d4eHl5eXp6ent7enp7e3t7fX1+fn1/f39/f3+AgICBgYF/gICAgIGBgYGBgYGBgoKCgoKCgoKBgYGBgoKCgoKCg4ODg4ODgoKCgXx3cGxpZmVlZWVlZmdobHF4foCCg4ODg4ODgoKDf3pzbWhiY2ZrcHd9f398eXRycG5raGVobHBwdHh7f4KEgn13c3FtbnBxcHBubW1tcHV5e3p5end2en+BfnhxbWlpa25wcnd7fX5+fn58e3p4dnN0c3Nyb2xoZ2NhYWRnZ2hoaGhpaWpqbW5tbm5ramlqamtra2psbW5tbHByc3NzdHd3dXR1dnd0cW9wcW9rZmJiZGRkYmJlZmhqamlqbnJ2eXl4dXJxcXJ1d3RwbnBwcHBvcXFwbm9xcXJxcnN3eHl5eXh4eHZ2dXRzcnFwcHBwcXNzdHR1dnd3d3h5ent7e3t9fX5+f39+fn5+f39/f35+f4CAgICAgYGAgICAgYGCgoKCgYGBgYKCgYGCgoGBgYGCgoODg4ODg4ODg4ODg4F/fXdwamhoZ2hoaGlpa2xwd3+AgoODg4ODg4ODgoF+e3VvamZjZWlwdHt9fHp2cHBwcG1pZmdqbm9zd3p+gIF+enVwcG5tbm9vbm5ubXB1eHuAf3t4dXV8gYF+eHBraWlrbnR1eXx+fn5+fXx6eHZ2dHV0c3JtamlqZmJiZGhrbG1samxsbm9xcnJwbmxqZWdnaWpra25tbW5ucHJ0dHR3eXp3dHV2dnRwb3Bxb2xmZGRlZGRjYmRoamxsbGtvc3h4eHZycXBwc3Z4d3NwbnBvbm5ub29ub3FxcnJzdHV3eHh5eHd3dXVzc3JxcXBwcHBxc3N0dHV2dnd4eXl6e3t7e3t7fX1+fn5+fn5/f39/fn5/gICAgICBgYCAgICBgYKCgoKBgYGBgoKBgYGBgYGBgYKCg4ODg4ODg4ODg4ODgX55c25qaWlrbGxsbW1tb3R6f4CCg4ODg4ODg4OCgYF8dnBrZmNlaW1zd3p5d3RxcHBvbWtnZGdsb3F1en5/g4F+eHNvbW9xcG1tbW9vcXd7f4OFgXt3dnqAgX54cGxqa2xvcnd6fH5+fn18e3l4dnZ0dXRzcG9sa2hnY2RobXB0dXRxcHFyc3J0dHFta2poaGhpamlpZ2lrbG5wcnN1dnl6eHV0dXZ1c29vcHFvbGZmZmRjYmJiZGhqbW1ubHBzdnh2dXJxcHBzdnh3dHFvbm1sa2tubnBwcXFyc3N1dnd3dnd3d3d2dXR0c3JycXFxcXJyc3R0dXZ3eHl6eXp8fHp7e3p7e3x8fH1+fn99fn1/f3+Af3+BgYGBgICAgIGBgYGAf4GBgYGCgoGBgYGBgYGBg4ODg4KCgoKDg4OCgoCAe3Ruamlqa25vcG9wb25ydnyCg4ODg4ODg4ODg4OCgn55cm1oZGRnbG91d3d2c3Fvb21sa2llaGtub3N3fYCAf3x2cnBsa2pmZ2tsbnF1e4CDhIaDe3Z1en+Bfndwa2tsbW9xdnt9foCAfn17enp5d3V0cnFvbmtqaGdnaG90d3t6eHZ0cnN2d3d2c25saWpqamhpaWlnZ2psbnFzc3Z2eHl5dXN0dnVxb29ycnBsZWRiY2JhYmNlaGtubm1tb3N2d3V0cnFvcXN2d3d0cW9ta2pqamxtcHBvb3FycnR2d3d2dnZzc3R0c3NzcnJxcXFxcnJzdHR1dXZ3eHl5enl5enl4dXV1c3N1eHx8e3p6eXp6fH1+gICAf3+AgICAgICAgH+AgYGBgYKCgYGBgYGBgYGDg4ODgoKCgoODg4KDgX53cGppaGlsb3BycXFwbnJ3fIKDg4ODg4ODg4ODg4KCgHp1b2llY2Vrb3JzdHNxcG9vbW5samZlaW5wcXd9fn18e3hzcGxqaGhpa25vc3l/goWEhoV9dnJ3fYF+d3Bra2xtb3F3fH5/fn5+fX18enl4dnRzcG9vbGppaGludXyAf399enZ0dnh6enZzcG1saGdnaGlpaWtqam1ucXNzdHZ6e3l1c3R2d3Jwb3JycGdkZGJgYGBhY2Voa25vbm1wc3d1dHNwcHJzdHV2dnRxb21ramhoa2xub29vb3Bxc3V2d3V0dHV1dXV0dHNzcnJxcXJyc3N0dHV2dnd4eXl7fHl3dHJva2poaWxwd3d1c3JwcXJydXh8fn9/f4CAf3+AgH5/gICBgYGBgYGBgYGBgIKCgoODg4ODg4ODg4ODg4N/enNsaGdoamtvb29vb29xdXyAgoKDg4ODg4ODg4ODgoKAfHZxamRhZGltb3BxcXBwcHBucG9raGdpbnBwdHp+fX58eHVxbWppaWltbnJ3fYKDhYaGh4N6dnd/gn93cGtramtvcXZ9f4CAgH9+fXx6eXh2dXFwbm9samhoa3R7gIKEgYB7d3Z3e3x6eHRwbmxqaWhpaWdpaWlsbG5vcXN1eHl8eXV0dXd2cnJyc3NtZWBiYmFhX2BjZmhrbm5ubnF1dnRycXFxc3R1dnh3dG9tbGppaGhqa25vcHBwcnN0dXZ1dHR0dXV1dXNzcXFycnJyc3NzdHR1dnZ3d3h5eXt7eHVxbGppaGZlZmpubWlmY2JkZWhsb3N3enx+fn5/f39/gIGAgIGBgYGBgYGBgYGAgoKCg4ODg4ODg4OEg4OCfXlxamdlY2NkaW1wcHBvcHJ3fICCgoODg4ODg4ODg4OCgoF+eHJrZWNjZWlsbXBwcHFxcXFycm1oZmlscHFzeHx9fXt3dHFtbGpqam5yd3yAgoWGhoaHhX11dn1/fHZwbGxsbW9xdn1/gICAf35+fXt6eHd2cnFvcG1rampudn6ChISDgX15eXt8fHl3dXJxbmxpaGZmZmdoaGpscHFxcXJ2e3t5dXd4d3ZycnJzc21lYGFgYGBgYWRnaWxubmtscXV2dHFwcHFzdHR1dnZxbm9tbGpoaGpra2xub3BxcXFzc3NzdHRzc3JycnJycnJyc3Nzc3N0c3R1dnZ2eHl6e3l4dnJtbGppZ2VjYmNjYmJiYmBhZGVlaG91e31/fn19fn5/f39/gICBgYCAgYGBgYGBgoKCgoKCg4ODg4OCgHx4c21mY2BgYGBmb3FycXBxd3x/gYODg4ODg4ODg4ODg4ODgn94cm5mYWNma2pqa21vcHJzc3RzcGpnaGtucHF0enx7eXRwcWxra2xtcXd7foGChIWGhoaGe3R1fIB+d3BsbGtsbnJ4fX5/fn5/f318fHp4dnVzcW9xb21sbHF3fYGDhIGAfXt6e3p5eHd0cnBtamlnZmZpaWhnaWpucHFyc3d7fHp2dXh3dXJycnJxaWFeX11eYGJkZmhrbW5tbG1yc3V0dHJwcnR0dHV3d3JubW1raWZlaGtrbG1ucHFxcXNzc3NycnNzcnJycnJycnJyc3NzdHR2dnZ2dnd4eXp7eXh2cm5ta2poZmRjYmNkYmFhYmRkZGNjZmxxd3t9fX5+fn9/f3+AgICAgICBgYGBgYGCgoKCgoKDg4KCgX56dXBraGRfXVxgZWtwc3JxcnR6f4GCg4ODg4ODg4ODg4ODg4OCf3t1b2plYWNlaGprbW9wc3V4eHZzbGloam5vcXR4eXhzbmxsamtrbXF2en6AgoSEhYaGhoaBd3N1eXt1b2tra2xvc3d8fn+AgH9/gH98e3p4dnRycHFvbWxrcXd6fYCBf3x5dXV1c3RzcnBwb2xoZ2ZoamlpaWhoa21vcHFzd3p5d3N0dnd1cXFycm9oYF1fXV5gY2VnaWxvbm1sbXFycnFxcXFzdnd1d3l4dG9sbGtpZWRmaG1ucXFwcHFxcnN0dHR0c3NycnNycnJycnJzdHR1dXV1d3d5eXh5ent7e3h1cnJycm5qZ2dnZmNmZmZmZmRlYmFgY2p0eHp8fH1+fn5/f4CAgICAgIGBgYGBgYKCg4ODg4ODg4F9d3FsZWJfXVtcXmJsbnFzcnR3en+Ag4OEhISEhISEg4ODg4ODg4KBfndxa2VjZWdnaWptcHFzeHt7eXZvamhob3Bwc3V1cm1ra2prbGxucXh/goODg4WFhYWHhoR8c3J3eHVwbGprbG5yd3yAgIGBgH9+fX19fHp5dnRzcnFvbm5xc3Z5enx6d3BwcW1ra21rbW1raWZkY2VpaWloZ2dnam9wcHN3enx6dnR1dXRycnNybmVeXFxbYGJjZWhrb3Fua2lscHFzcnBwcHN1dHR1eHhxbW5ubGhnZGVmbW5wcHBwcXFyc3Nzc3NycnNzcnFycnJyc3N0dXV1dXV4eHd4eHl6e3t7enp4eHl5dXJtbGlqbXFzdXR0cW1oYmJiY2tzdnd4enx9fX5+gICAgICAgYGBgYGBgoKDg4ODgoKBfHZvamRiX15dYGFlaW1wcnN1eXx+gIKDg4SEhISEhISDg4ODg4ODhIJ/eHJsZWFjZGhqam1xdHd7fX17eHNsaGhsb3BwcGxpZmhoamxsbG5xeH+Cg4ODhYWEhYeEgHlzcnN2dG9samprbnJ4fYCAgIB/fn19fX18enp4dnVzcnBucG9xdHZ3dnFtaGZlY2JhZGdqbmtoZGRjZWlqamhqbGxqampvdHh6fHdzdHV1dHJyc3JuZV5cXFtfYmVmbG9vcG5ram1vcHBwcHBxc3V0c3R6eXNubW1rZ2VjY2VsbW1tbW9ucHFxcXFwcHFxcHBxcXFxcnNzdHV1dnZ2dnd4eHh5ent8e3t7e3x8fHx3dW9ubnF1eHl7e3t5dG1lY2JjZWhrb3J1eHl6e3t+f31+gICBgYGBgoKDg4ODg4OCgX54b2tnZmNhYWFiZGdsb3JzdXp/gIGDg4ODg4ODg4SEhISDg4KCg4ODg4J+dW5oYmBkZ2hpa3J2eX5/fn57dm9oZ2tucWxpZWViZGVoa2ttbnJ4f4KDhISEhIWFhYWDf3l3eHh1cG1raWpvdHh9f39+fn19fXx8fXx8e3p4dnRxbnBubm5wc3Vzb2ZgYGBeXV5jZmpsbGtnZGNnamtsbXBwb25ta25xd3t7eHV1dnZ1c3NycW9nXVpbX2JnaWlrb3BvbWpqbXBxc3NxcXN1dnZ0c3h4cW5tbGloZWJlZmtsbW1sbW5wcXFxcXBwcXFycnFxcXFxcnR0dXZ2dnd3eHh4eHl6e3x7e3x8fHx7e3p4dnZ2eHl6fHt8fHx5dG9raGRiYGJkZ2lqaWpscXZ8fX6AgIGBgYGCgoODg4ODg4F+eXNuaWdkYmFiZmdsbnBxdXl8f4KDhIODg4ODg4ODhISFhYODg4OEhIODgX52cmxmY2Noamtuc3d6foGAf3t5cmpmaGxuamViYmNlZWhsbW5wcnV8goOEhISEhYWDgIB9eHV6enVwa2lpam5zeH1/f35+fn57eHh5fHx9fHp3dXNxbm5ubW5wcXFsZGFgYWFhYmdrbnBwbWhkY2Zpa29wc3Vyb25sa291e3t3dHV2dnVzc3RzbWVcWVthZmdra2xvcXBsaGlqbnByc3Fxc3V2dnJ1eXZxbmxqamllYmRia2pqa2xtb3FycnFxcHBxcXJycnJzc3R1dXV0dHZ2d3d4eHh4eXp7e3x8e3x8fHx8fHx7e3x8e3t8fHx8e3p2c3FtaWVhYmRgYF1fYmRnbnd6foCAgICCgoODg4ODg4OCgHt2cWxqaGViYWVqbHFzdnd8foGDg4ODg4ODg4ODg4OEhYWGhYWFhYWFhYWDf3tzbGZkZWdqbHB2e36BgoJ/fXlzbGZlaGxrY2BhY2ZobW9vbm90eX6Cg4ODg4SDg4SDgXxzcnd6dXBsbG1ubnF4fYCAgYB9eHRwcXd5e3x9fHp2c3Bub25ubnFybmtmZ2dqbW5ydHV2dXBrZmJiZWlsb3N3e3hybmppbnR7e3Z0dXZ3dHJzdHJsY1tZVl9obG1tb3BybmpnZ2ptcXRzcHF0dnh3c3R4dXBvbGtqaGVkZWZqaWprbW5ucHBwcXFwcHFxcnJycnN0dHV1dXV1dnZ4eHh4eHh5ent8fHx8fn19fX18fHx8e3t8fHx8fHx7enl5dXJta2hnZGFeXFxdXmBncHh9gICCgoKCg4ODg4ODg4J9eHJta2hnZ2hrcHR4eXp9f4GCgoODg4ODg4ODg4OEhIWFhoaGhoaGhYWFhYOBfXVtZmNkZ2pvc3d9f4KCgoF+eHRvaWdpbGtoY2Jma25yc3Ftb3V8gIKDg4ODhIWFgn95cm9vdnl1cGxsa2xucXh9gICAfnhyaWVlbXR5fHx6d3Nwb29tbWttb3Bwb29xdnh5eXp6enp3cmxmYmNlZ2ptcXh7fHZvZmVqc3p6dnR1dnZzcnN0c25mX11cYWhsbm9vcHBtaWdoam9zdHJzdHZ3d3V0dnh1b21sa2poZmVmaGpqamttbnBwcXFxcXFxcnJycnJyc3R0dXV1dXV2dnh4eHh6enl6e3t9fXx8fX18fHx8e3t7e3t7fHx6enx8enl4dXNvbWlnZWFgYGBgYGVud32BgYKCg4OEhISEg4OCf3x3cW1ra2lpbXN5fH5/gICBgYODg4ODg4ODg4OEhISEhYWGhoeHh4eGhoWFhIN8d3BoZWZobG9zen+BgoKCgYB6dnFraWprbmlmZGlvdHZ4c21tcXd9gIOCgoSEhYWDfnZvb3F3eXZva2tqa25zeX6BgYJ8cmhgXF1lbnR7e3dzcXBvbmxtbm9wcXBwcXZ8fXx8fn5+fHpza2ZjZGZoamxzeH58dm5mYWRud3h2dXZ3d3R1dXRyb2liYV5hZ2tvcXNzcW1pZ2lrcXNzdHN0d3h4dXV4eXZvbGxsa2lkZmhpampqa21ucHBxcXFxcXFycnJycnJzdHV1d3d3d3Z2eHh5eXh5enp8fHx8fHx9fXx8fHx7e3t7e3t7e3p6fHx8ent5eHd0cW5ramhmZGFeYmt0fYGBgoKDg4SEhISDg4N+eXRubWpqa3F2en6AgYKDg4ODg4ODg4ODg4ODg4SEhISFhoaHh4eHh4aGhYWEg315c2tmZmdqb3N4foGDg4OCgX57dm9qaGptbGpqcXd7fHt1b21tcnx/gYSEhISEhIJ8dXNycXV4dm9ra2prbnN5foGBgXpwaGFdX2ZudHh3c29tbW9ubG1vcHBxcnJ1en1+f35+fn58eHFqZ2RlaGlrbXF2e3t2bGRgYmx0eHZ1dnd3dHV1dnRwaWZlYmVqbnBzc3Nxbmlna21ydnVyc3R3eHh1cnV4dW9sampraWdpbG1pampqbG1vcXBwcHBwcHBwcXJzc3R1dnd4eHh4d3d4eHp6eHh4eXt9fHx7e3p6e3t6eXx6eXl5eXt7e3t8fHt7enp8fHx7d3VzcW1nYV5hZ3J8gIKCgoODhISCg4OCgH54cmtqa2xxd3x/gYODg4ODg4ODg4ODg4ODg4ODg4SEhIaHh4iIiIeHhoaGhYSDf3x2cGhlZWhtcnh+goSEg4KAgHx3c2xpaW1ubW51fX9+eXRvbW5yeH+DhISEhIOCgXt1dXd1dnZ2bmxrbWxvdHp/goJ/fHJpY2NkaG9yc3NvbGxsa2tsbW5vcHBxcXV6fX9/f4B+fn12bmdjZGVmZ2ptcnZ5eXVsY19ia3V4dnV2d3Z1dHZ2c25pZ2loaGxvcHJ0cm5qZ2ZqbnF1dXR0dXh4d3NxdXdybmtramhmZ2prbWlqa2tsbW5vcHBwcHBwcXFxcnNzdHR1dnh4eXl3d3h4enp7enl7e318fHx8fX17e3p5eHl4eHl5enp7e3x8fHx8fHt7e3t6enh2cWhhXmBqdHyAgoKCg4OEhIWFgoB8d3VwbWtsbXJ3foCBgoODg4ODg4ODg4ODg4ODg4ODhISEhoeHiIiIh4eHhoaFhIN+enVwZ2VkZ2pvdnyCg4OCgX55dXZ0bWppbW9wcXh/gX96dG9sbHJ4f4OEhISEg4J8d3R6fXp2dndwbGtrbm5zeH2CgoB6c2pnZ2tsbnBwcG5ubW1sbG5ucHFxcXFxc3d9f39/fn9/enNtZWJjZWhpam5zd3l5dG1mYGFqc3Z0dXZ4dnV0dnVybmppamtrbnByc3V0bmppaW1ydHVzc3V2eHh2cnN3eHNua2tqaGZnam9xaWpqamtsbnBwcXBxcXFycXFyc3N1dXd4eXl5eXh4eXl5enp6e3t7e3x8fHx9fXt7eXl5eHl5eXp7eXt7e3t8fHx8e3t7e3t7fHp1a2JeYWp0fICCg4OEhIOEg4KAfXdwbmxsbG5xdHp+gIGDg4OEhIODg4ODg4ODg4ODg4SEhYWGh4eIiIiIiIeHhoaFhIF8d3BqZmRlaW1ye3+Dg4B/fHVzdHVva2ttb3ByeX2Bf3p2cWtqb3Z/hISEhISEgHp2d3t8eHR0dHFubG1tb3N5f4GCgHx1cW1tbm5tb3BwbW1vbW9tbm9xcXFxcHBzeH1/fn5+fn15c21oY2RlZ2pscHN5fHlzbWZiY2tydHR1d3h3dnV1dXFua2xtbW5wcXN0dHFtbGttcXZ3dnN0dnZ4eHRwdHl5c25sa2tpZWdpbHFpamtrbGtsbW5wcHFxcXFxcnN2dnd4d3h5eXl5eXl5eXh5enp7e3t7fHx8fHp6enp5eHd2dXV1d3d4enp7e3x8fHx8fHx8e3t8eXZuZGBhZ3N7foGDg4SEg4SCgHp0cGxra2xsbXF3fX+BgYODg4SEg4ODg4ODg4ODg4ODhISFhYaHh4iIiIiIh4eHhoOCfXh1cmxmZGVpbXJ3fYGBfnp1bWxvcm9rampsb3J3fYGAfHZxbm1xd36DhISEhIJ9enx9eHVzcnJzcm5sbGxucnl/goGAe3Zyc3Nzbm1vcHBubm9tbW5vcHBxcXFxcXR4fH5+fn5+fHhxa2djZWdoa29zdXt8eXRvaWVlbnFydHV3eHd2dnZ2cWxpam1wcXN0dHV1c29tbm90d3h2dHV2dnd3c3J0eXhybmxra2loamxvdGhpamxsbW1ubW9xcXJycnJzdXd3dnZ4eHl5eHl7e3t7e3t7e3x8fHx9fXx7e3t5eXh4d3d3d3V1dHV3eXt8e3t7e3x8fHx8fHt7eHBmYWFlcXp+f4KDhISDgn13cW5raGhpaWpvdHp/goKDg4ODhISEhIODg4ODg4ODg4ODhIWGhoeHiIiIiIiHhoeFgoB9eHNybWdkZGZpcHR6fX15c21lZm1xbmpobGxuc3Z7gYF9dnJvbXJ4foKDhIODg396e3t2c29wcXRwbW1tbG1xd4GCf3t4c3N2dnRvbW1wcHBxcW9tbm9vcHBycnNzdXp8fn59f316dm9pZWNkZ2hsb3N6fXx3cmxpZ2hvcnR0dnh3d3Z3d3dybmxtb3FzdXR1dHZzcG9vcnZ5d3NzdHV1d3d0dHZ4dnFvbmxqamprbnF3aGlqbGxucHBxcnJycnJzc3R2d3d3d3l5enp5enx8fHx7e3x8fX18ent7e3p7e3l5eXl5eXd3dXV2eHd5eXt9fX19fHx8fHt7e3t5c2phX2NsdXt/f4CDg4F9d3JrZ2dnZmdpbHJ3fYCCgoODg4OEhISEg4ODg4ODg4ODg4OEhYaGh4eHiIiIiIeGh4WCf3p1cW9uaWZmaGhuc3h4dW9pZGNlZ25ubm5wb3FzdHp/gX14c29sb3V9gYSFhISDg358enh1cnFyc3FtamxrbG51enx5dnN1d3p6dnBwcHJycnRxb21ucHBwcXJyc3N0eXx/gH59fHp2b2plZGRmaGtwdHl7enZwbWtqbnN2dXV3eHh3dnd3dnNubG1vcXN0dnZ1dnNxcHN1eHp2dXR1eHh4eHR0eHp3b2xrbGpqam1wcnJpampsbG1vcHFxcXJyc3R0dXV4eHl7e3p6ent7fHx7e3x8fHx8fHx8e3t5e3l5enp6enp6enp5eXd3eHh4eXt7fHx9fXx8fHp6e3p0bWRgY2p0en6AgIKCf3dzbWdjY2JkZ2lxdX1/gIGCg4ODg4SEhISDg4ODg4ODg4ODg4SFhoWGh4eHh4eHhoaFgn96d3Rwbm5raWhpaWxwcnFsZ2RiYWBjaW9xcnZ7e3h3en6AfHhybW5xd3+DhYaFhYSEgoGBe3VycXN0cGxqa2prbXBzdXRwcHR5e3p1cnF0dHV2dXBubW5ub3Fxc3FxcnV5fX9/f357eHVvamVkY2VpbXF1enp4cm9ubnBydnl4dnh6enl5eHh4cmxqbXBydHd3dXZ3dXJzd3l9e3d1dXZ4eXp5dXV4eXRua2tra2trbGxubWlqbG1sbW9wcHBxc3R1dnZ2d3h4eXt7e3x8fHx8fHx8fHx8fHx8e3t5eXl6eXl5eXl5enp6enl5eXl5eXl7e3t8fHx8e3t8enp7endxa2JhZW53fYCAgYF8c21nYWBhY2Vpb3d8f4GAgYKDg4ODhISEhIODg4ODg4ODg4ODhISFhoaHh4eHh4eFhIOBfHhzcXBub2xoZ2lpamxramdkYV9jZWltcXV6fX6AfXyBgn97d3NwbnJ4f4OFhoWFgn98fH14cnF1d3ZwbGpramlpbHBxcG1scXZ6e3Zzdnd6eHZycG5ucHJycnJyc3J0dnl8fn9/fnt3cm5pZWVmaWtucnh6eXZxb25ucHV4end4ent7eXl5eXhya2xucHJ0dXZ2d3d1dHZ5fH17d3V3eHh5eXd1d3t5cm1rampqa2trbGpqamtsbW5vcHBwcXJ0dnZ2dnd4eXl6fHx8fHx8fHx8fHx8fHx8fHt6enh4d3d4eXl5eXl6enp6eXl5eXp6e3x8fHt8e3t7e3t7e3t7enRvaGVla3R6foB/fnlzamVgYF9janF2fYCAgIGCg4ODg4OEhISEg4ODgoKCgoKDg4SEhISFhYWFhoaGhYSCgHx0cXBwb25ta2hnaGhpaWVhZGNkY2psbnB0eH15d3x/gYaKi4mAeHFwc3l/g4WFhYWEg4ODfnlzcnd7eXFrampramtubm1saWxydXt7eXd4e3x4eHNwb3BxcnJycHJ0dHV3eXx+f357eXdxbGhkZGZnam5ydnZ0cXFxcHBydXp6eHd5e3p5eXl6enNubnFyc3V1dnV2dnRzdnl7fXp3d3l5eHp5eHV2entzbWppaWlqampqaGpqa2xtbm9wcHBxc3R2dnZ2d3h5eXp8fHx8fH19fHx8fHx8fHx7e3p5eHh5eXh5eXl5eXp6enp6enl5enp5enp6e3x7e3t7e3t7e3t6d3JtZ2NmbnV5e3t6d3FoY2BhY2lxeHt+gICAgYGCg4ODg4SEhISDg4OCgoKCgoODhISEhIWFhYWFhISCf317dnRxcHBubnBxbGhnZ2hoZmJjYmJkam5ydHZ2eXZxc3R0eH+GhoJ9end4fH+DhYWFhYSEgoKBfXl3d3t4cmtqaWloamtramlqbXN3eHh5d3h7fHh2cm5ucHFzc3JwcnR0dXd5fH5+fX16dHBrZmVlZ2lrb3N1cnFwcG9vb3N4fXx5eXp7enl5enx4cm1ucnR1dnZ2d3d2dHV4e319end3eXl6e3t5dnl8enJta2hpaWpqaWtqa2prbW5ub3BwcXN0dXZ1dXN0dXZ5e3t7fXt8fX59fXx8fHx7e3t6enl4eHl5eXl5eXl5eXl4eXp6enp6enp7e3t7e3t7e3t7e3t7e3t5dHFqZWJmbHF0dXRxbWhlY2Npb3Z7f4GAgIGBgoKDg4KCg4OFhYODg4OCgoKCg4OEhISEhISFhYWCf316d3VzcXFwcG5ucHFwZ2VlZmdmZGNjYmRobHBzd3dxaWpsbXBydnuBg4ODgH18f4KEhYaGhYJ+f4F/e3l6fHdxbWtqa2trbWtta2tvdXh6eHh3eXp7eHZ0cHBxcnNzcnJydHR1eHp9fn18enhzbmtoZ2hrbW1vcHBwcHBwcG9vdHp/fnt6ent7enp7e3hwbG90dXV2d3d3d3Z1dnl8foB6d3h4eXx8fXp2fHx4cWxqamtqZ2Zpa2lsaWpqa25vcHByc3R1dHNvbGttcHN2dnZ3eXx9fn5+fn58fHt7e3p5eXt7eXl5eXl5eHh3d3d4enp6enp6ent7e3t7e3t7e3t7e3t7e3x6dW1mYGNma21sa2hkYmJiZ21zfH1/f4CAgYGCgoODgoKDg4KCg4OCgoGBgYGCgoODg4ODg4KCf3x5dnRzc3FwcHBwcXJzdHBqZmZnaGdlZmZiX2BmbXN1d3ZwbmtucHJ2fYKCg4aGhIOCg4SFhoaFhIJ/fXt6f4R+d3Fta2tsbGxsbG5vcHF1eHt6eXh5enp3dnJwcHFydHRycnJ0dHV1eH1+f357d3FuaWdnaGttcG9ubm9vb29vbnB1fIB+e3p6enp6enx8d29scnZ2dXZ3eHl5dHR2eX1/fXl3eHl6fHx7d3Z8fHhwbGtramhmZ2lrbnBqamlqbG9xcnJzdHVzcW1oZ2Znam5ub3FydnZ5fHx7e3x8e3t6enp6eXl4eHl5eXl5eXh4eHh4eHp6enp7e3t7e3t7e3p6eXt8fHx8fHx3cWhiX2JjY2RkY2FhYmZtcXh+fn5/f4CAgICCgYKDg4SEgoKEg4GAgH5/f39/f359fX19e3l3d3RzcHJwbm5vb3FzdXZ1cmtoaGlpaWlqamRfW2FsdXd4d3FtbnF2en6BhIaHiYmIiIWBg4SFhoWFgn98en6FiIJ5cm1ramxtbWxxc3h9fXh4enp4eHp7enZ0cXBwcHN1dHFxcnR0dXZ5f35/fnp1cW1qaGhpbGxqaGprbW5wb21vcnd8fn18enp6enp8fnt0b250dnN0d3d4d3Zxc3d8f358eHd5eXt8fHl0dX19eXFtampqZ2dnaGtxdmpqa2tsb3FycnN0dXNxa2ZkY2VlZ2dnaGtsbXB2eHp7fX17e3p6enp5eXl5eXl5eXh4eHh5eXt7enp6ent7e3t7e3t7enp5e3x8fHx9fXhya2RjYV9fYGBhYWFiZmx0en9/fn9/gH98enh3eX2AgoKAfn17eHd0c3FxcHBvbm5ubm5saWpqaGdnaGlqamxvcnZ4eXdya2dnaGlra3Bva2FWWGVvdXZ3cm5vdHuBhIWGiImLi4uJhX59gIWGhYWFhYKDg4iHgHhwbWtucHJxcHR7gIB/eXl5eXh4ent7eHVycnJyc3RzcXFydHR1d3p/f399enVvbGlnaGppZ2RiZWhqbG1ucHJ2eHp9fXx8fHt7fH19enNub3V3dXZ4eHh3dHFzd3yAgHx5eXp5e3t7d3Fzen15cW1sa2tpZ2dobHR5aGpqbG5wcnJyc3V4dnVwbGhlZ2ZmZmRkZmZnaGxwdnl6e3t5eXl6enl4eHh4eHh4eHh5eXp6enp6ent7e3t6enp6enp7e3t8fHx8fHt6eXNuamdjX1xfXl5eYWJnbHV7f3+Af4B9eXJrZ2ZocHh9e3h1b21tbGtoZmZmZmVkY2NkY2JjY2RjYGBgYGBiZmtydnl5d3JsZ2ZpamhqcXRxZ1pZZG91d3Rxb25ydn2CgoSHiouLioeEg316gIWFg4ODg4KEh4R8dnBtbG5zeHt8fX57eHR1dnV3eHh7fHp3c3JycnNzcnFwcHBycnV5fH6Af314c21pZmdpaWZkYGBjZmptb29xdnh6e319fH19fHx9fn16dHBxdXV1d3h4eXd1cXJ2fX+Ae3h6ent7fHlybXF6fXdvbWxta2poZmdtdn1oampsbW9wcHFydHZ2dXJvbGpqaWdnZ2RkZGVkZWdscHJ2d3h5eXl5eHh4eHh4eHh4eHl5enp6enp6e3t7e3p6enp6ent7ent8fHx8fHt6d3Nva2diYF9eW1tdXmNnb3d+foB/fXhuY1xcXWJobnJvbGhkYWBfXV1dXVxcW1pXV1hXWVpcXV5eXV1fX19iZ2ptbnBxcGtqaGZmZGVnbXNvZGFpcnV3dXJwbm5wcnh+g4WHiIiIhoKDhoJ+gIOCf3x/gIWIgnp2cG1sb3R8goWEfHRvaGZpbXV3d3p6enZycXFxcnJxcG9vcHJzd3h7fn9/e3ZxbGhmZmhoZWNdXWJla25ucnV1eHp+f318fX18fH1+fnt4dHJ2eHV3eHh5dnNwcXZ9gYB7eHl5e3t7eHFscXp7dW9tbG1ta2ppZ2x2fWlramxub3BwcXFzdHV2dXJwcHBtbWtqaWhnZWNkZWZpbHBydXd4d3d3d3d3d3d3d3Z2eXl6enp7e3h7e3t7enp6enp6enp6enp7fHx9fXt5dnNwbmtoZmNfXF1cXmJobXR7fn15cGVfWVlbXmJlaGViXlxbWFdZWFdXVlZVU1RUUlNWV1dYWVVYVlhbX2FkZ2dmZ2lta2lnZGJfYGRpbXJwbXJ3dnZ0cXBvb29yeHyAgYOEhIKAf4KIioN6fIB+fX6Bh4eCenNtbGtvd36EhIN+c2xnaWpsdHV5ent3c3FwcHJzcXBvbm5ucXN1eHt/f316dW9pZ2hqa2tnY2FhYmZrbnFxdHZ3eX5/fXx+fHt8fn9/f3p1c3Z2dnd5eXt0bmxudXyCgHt4eXp7e3l2bmtweXhxb25ubmtpZmVobHV7aWtrbW5vcHBxcXJzc3R0dHV1dnV1c3Jxbm1raGZkY2Nmam5wcnR2dnV1dXV1dXV1dnZ3d3l5eXp7ent7e3t6enp6enp6enp6e3x+fn19fHt5d3Z0cW1pZmNgX11cXF5iZ25xcW5lXltbW11fYF9fXVtaWVhZW1xeYGBhYV9eXV1cXmBhYmNhXlxbWlpaXF9iZWhpa2lqZ2JgY2VnZ2RocXZzd3h3d3VycG9ubm9yeX1+gYF+e3x/g4qPioJ6e3x4eYGIiYN/foCCgYB/gYSGhoF1bGVmam9tcHN5fHl1cnJyc3Rzb2trbm9ydHd4e35+e3ZxbGlnZ2hqamllZWVpbXFyc3N1dnh6fn99fH58e3x+f39/e3h2dnd3eXp6eHNtbG51fIGBe3h5ent7eHJqaXB3dnFvbm5ub3BvbGxwdHloamttbW5ub3FxcXJydHV1dXV3d3h5d3d1cnBrZ2VjYWJjZmdrcXN0dHRzdXV1dXV1dnd3d3d3eXp6enp6ent7enp6enp6e3t8fHx9f399fHp3eHd2c2xqZ2RjYGJfXFxeZGloZF9fXV5cXFxcXFxeX2FhYmRlZ2xsa2traWdlZGJkZ2dpamlmZGFeXV1cWlxfYGRnaWhkYGJobW9pXVxsdXZ5eXh3dnRwbm1ub3N5fH1+fnx6eoGIjpCNiIOAfXl9hYuNjIqLjoyLiIWEhYSFhX10aGRlamxwdXx9eXRyc3JzdnNwbWxtb3F0dnl5eXhzcnBsZ2dpa2xsa2hqbHB2d3Z1dHV3eHt/fn19fnx7fH5/f39+e3p5eHh5enl4c21sbXR8goB6eXp6enp4b2dpcHR0b25tbm9wcnJvbW9zdmlra21tbm5vcXFydHN1dXV0dHd3eHl4eHh4dnFsaWVjYmFgX2FobnFycnN0dHR0dHV2eHh4eHd5enp8fHt7e3t6enp6enp7e3t7fH1/f399fHp4d3Nyb21ubmxpZWBcW15dXFxdX19fX15eXl5eZWhtbnBxcXJ0dXV0cnBsaWhnZWZnZ2ltb25ubWppZWRiYmBfYGBhYmNla25ub2dcVmV0d3h4d3V0cnJxb2xscnt9eHZ8gH98fYaMj5CNhoF+f4KJjYyLiYN5dHh/goWGh4iJhn92cGtrcHR2ent3c3JzcnNyb21sbG1wcnN1dnZ0c3FubWtra2tsbW1ubm90d3t7eHRydHZ5fn9+fX1+fHx+fn+BgX99e3p4eHl6enlzbW1udHyAfnp5e3t6endvZ2lydnRxcnFwcnN1eHd0cXJ0amxsbm1ub3BxcnR0dnZ0dHR0d3d3d3h4eHh3d3NvamdiYF5cYGRrb3BwcnJycnNzc3N1dXV2d3h4eXt8fHp6e3p6enp6eXl3d3Z3fHx/gH17eXZ0c3Nvbm5ubWpiXlxbXV5cW1tcXV5fX2BhZGdtdHd5fX1+fn57e3l1cm5saWhnZ2hpa3B1dXZ2dHJubWpoZ2RmZGFkaG5xbmtsb2plaW9ydXh3dHFsb25oZmdwent3dHt+fnt+hoyPj42IhIKFio2OiYWDgHdydn6DhIeIi4yMiIWCf3x2cnV6e3dzcXJzc3JvbW5xcnl4dXJvcXBubGtraGlnamxub3Fzdnx/fnx3dXV2eXt/gH58fX19fn+AgICAf399eXp6e3t5eXJtbG1ye4F/enl7e3p6dnFnanJ1dnRzcnFwc3V6e3h0dHRrbW1vcHBwcXFydHR0dHR0dHR3d3d3eHh4eHh4d3NxbWpmYV1dYmhucHBxcXFxcnJycnNzdHV2d3d4ent6eXp7enp6enp3cGlpa3B1eXx8eXVzcXFwcXFtZ2RiYmFfXVxdW1tcXl1eXWBhYWRnbnV7f4GCgoKCf3x5dXJvbWppaGlpaW1vdXl8fXx8enZxbWlmZGNmaG5zcmpnaG53e357dXBxdHJvbnBtbWxvc3l+fXt9g4SBf4KGi4yMi4uJiIqIiYmFhIN8dnl9fXp8hImMjY2NjIqIhoF6eXt6dnNwbm5ub290fYSJiYR4b29xcG5samloaWprbnBxc3V5e3x7eHNvcnZ5fICBgH1/fX1+f4CAgICAgH15eXp7fHx5c25rbHN9gX97ent7e3t1bWVqc3d0cnNycXBzdX1+e3d1dW1vbm9wcHJyc3N1dXV1dXV2dnd3d3d4eHh4eHh3dnNycGpjW1leZm9wcHJycXFwcHFxc3NydHV2dnh6e3p6enp6enp5dG1kYGJkaW5ydnV0cnBxcG5sa2VgW1haWVdYVllZWV1jZWVlY2NlZmdrcXd6fn+AgYF+enVwbWtra2poaGlpbXJ5fYCBgH99eXVuaGRiaW5yc3JraGhrfH+AgH9+d2xoZ211cnJvcXZ+gYKDh4mMioeCgoWIiYeKi4qHh4aIh4WHhn99gIB3cnmCh4uMjo6MjImJhYF8fnl3dHFsam1veIKJi4mAeHBub3BxcGtqaGdoaWxucHBzdXt+fnt1cXBydnl8gIKBfX19fX5/gYGBgYCAf3p6fH18fHhyb2xtdH6Afnt7e3t7e3RoZGpydXNycnJvb3F4fX18eXZ1bnBwcnR0dHR0dHV1dXV1dXZ2d3d3d3h4eHh4eHd2dXN0bmRcWl5lbXBwcHBwcHJycnJycnFzdHV1d3h5eHh6ent7endwaGVhXl9hZGltbmxrbG1sbGpoYVpVVFZWV1VUVFhdZGtwcXFtamdkYmNlaWxwdXh8fHp2cm9sa2tra2prbG5ydnt+f35+fHp3cW1nZ2xzdXRzc2xocHl/hIh/gYl9cm5zen17dnV6gIOEh4uMjo2LioiGiYyNi42Ni4eDgoN+fYWIhIGCenBvdn6EiYuNjYuLiYeEfn9+eXNycXFydn2FiIR8dG9tbm5vcHFwbWxraWlrbG5wcXN2enp6d3NwcHR3en6AgX9/f35+fn+BgYGBgIB9e3x9fnx8eHJvbW50foB+e3t7e3t5cGdkanFzc3JycnFxcXh7e3p4d3ZxcHJydHRzdHR0d3d2dnR0dXV1dXd3eHh4dnd3dXN0dHFtZV1YWmNtcG9vbnBwcXFxcXFxcXFycnR0dXZ3d3h4eXh4dG1nY15gYGFiZWVnZ2dmZ2dlZF9bVFBPUlZXWllbYGVscnh7e3duaGVfXV1gZWlqbHBxdHFwbm1ta2trbG1wcXR5fH5/f315dHJvb210en+Afnt7fHd5g4WFj46Mh3xydn2DhYWEg4SGiIqKi4uIiYmIiIiLjIyMjo+Oh4OGhHt5goaHhIF5c3F3foSGioyMiYmDgX13e317c3BwcXuCiYmDd21ubW9vcHBycnJwbm1qamxtbm9xc3Z6e3d0cXFydHh8gIGAf39/f36AgYKCgIGBgH58e3t9fXt2c29ub3R9f3x5ent7eXVuZWJqdHVycnNzcnJydnp5eXl2dnBzdXV1dXR1dnZ3d3Z2dnZ2dnZ3d3d4eHh2dnZ1c3NzcGxkXFVYYmlvb29wcHBvb29vcHBwcHBwc3R0dXd3eHh7eXd0b2hjX2FhYmRkZGNjYV9gYF5dW1dPTUxQUlRYXWNrcnl9gIKBfXRrZGFdXl1eYWVmZ2lqbG5tbW1sbG1vcXR3eX19fHt5d3Vxbm1wdX2Hjo+Lh4SEioqCi5CNj5OJfHZ7h46Oj4yMjo6NjYyMiISEhIeLiYqLioqNkI+IhIaEf4CFh4aAfHZ0dHqBhYiKjIuIg3hwbnF5fXp0bmtyf4eGgHVvbm1tbG1ucnR0dHJwbWtqbG1ucHJ0d3p5dXFxcXJ0eHyAgYB/f39/foCBgoKBg4GAfnx9fX19enZzb25vdH1+fHt7e3t5dWtiZG1zc3JycXFycnV5eXh5eXZ2cHN2dnV2dnZ4eHh4eHh4eHZ3dnd4d3d3eHh3d3Z2dXVxbmhfWFldZGptbW5ubm9vbm5vb3BwcHBxcnR1dXd4eHh4eHVxbmpoZGNiYWJkYl9fXV5dWlhWVVBNSkhNVV1kbnd/goODhIN/dmxmZGRmZWRfXl9iZGZoa2xtbm9vcHF0dnh6enp3d3NxcHBubnF6hYyQkY+MiIuOjYWHjZORin5yd4ONkpKNjZKTkY+NjYyIhYODiIuLioqIiYyOi4eGhIGBhYaEgHx5eHZ2e4GIioqKioiDd29scnl9eG5obn6Egnx0bm1tbm5vb3BydXZ1cnBvbGxsb3BxcnR3fHp2c3Bwc3V4fYCBgICBgX59gIGCg4KCg4F+e319fHx5dnNvbW51fX17ent9fHp0amRnb3VzcXFvcHBydnl7enl4eHd2d3Z2d3h6enl5eHh4eHd3d3d6enp4eHh4eHd3dnZ1dXNwa2VeWl1fZGlsbm9vb29ubm9vcHBwcHBxcnJ0dnh4eHh5d3RwbmxraWdkYWNkZGJgX1tYVlVTUVBPT1FdZ3F7f4OFhYWEhH93bWhmanByb2pnYmBhZGRkaGtuc3V0dXV0c3JycnFxcHBubW1weYGGio+Tko+OkJOSi4iLkJKOgXuBiJCTkY6MkJOSjYuLi4iGg4KGiYqKiomKiYuKiYSAgISIiIWEgX99fHl9g4iKioqKiIR+cWhsamZfYGh6hIJ+eXNwbm5ubm9ucHR3eXh0cW5tbm5vcHFydXh7eXZzcXFzdXh9gIGAgIGBgH+AgYKDgoKDgX57fHx8fHl2dXFtbnV9fXx7fHx6eXJqZmx1dXNxcW9wcHJ1eHl6eXh2d3d3eHh3d3l5enp5d3d3d3h6enp6enp5eXl4eHh3dnZ2c3BtaGFeXl5fYWVoa25vb21tbm5wcHBwcHByc3V2d3l4eXh4dnRyb29ubGpoaGlkYF5cVlRUVFRVV1haXml0fICBg4ODg4OCfnhvZmZqc3Z1cm5tZV9eYGJnaW1xcnNxcW9ubW9tbG9ub3BvbXF7gYSHjpOVlZSWl5aSi4mIiIWChYiMkJSSjo2PkZKTlJKOjYqIh4iLi4yNjIqJiIeGgX+CiIyNjIuKiYmFgIOHh4iKiIeHhH97dGVdWl9pdHx9eHl1cXBycm9tbG1ydnl5d3Rxbm5ubm9wcHJ4fH17eHd0dHR2eX6AgoCBgYGAgICCgYGBg4OBfXt7e3x8eXd0cm1xd31+fXx+fXx4dGxocnl3cXBwcHBxcXN4eHl6enl5d3d4eHl5eXl6enl3d3d6e3p6enp6enl5eXh4eHd2d3d1dHJrZ2NiYmFhYGFnamxubW1ubm5ub29vb3Fyc3V2d3d4enp4dnZ0cnBubWlnY2JfXVtYV1lbXF9hZWlweH6BgYKDg4ODgoOBenNrZmhvdnx6dXNva2doaWlpaGpsaWhoZ2hrbm1sbG5wcnFyeHt/g4aOlZeZm5ycmpeQiYSAfX+HjJGXmpiSj42Sl5yfn5yYlI6Kh4eKi4uKiIaGhIODhomMjpCPjYqLi4uMi4mGhYWEhYWDf318cm51f4N+eHZ0d3Z0c3V2c21sbXJ3ent5dHFubm5ucHFzdHd7fHp4d3V1dnh6f4KBf4CBgYCAgIKDg4GDg4F9e319fXx6d3VycHR6fX59fHt9fXl0bGt2eXZwcHBwcHFxcXJ1eXp6enp4eHh4eXl6enp6eXl5eXl5eHh4eHp5eXl5enl4eXd3dXd3dXFtaWllYWBfX2JjZmptb25ubm5ubm5ucXFydHV3eHp7e3p4eHRwbWxoZmNeXFtZXF5fYmNmaW50eXx9f4CBgYKCgoKCgoF8dG5mZmpxd3x7d3BtcHNxa2xqaWlqampvb3BvbmppcHR2eHp8gYODho6VmpycnJ2YlZCJg4GAhIiOlJqgoJyUkpSWmZmamZeVlpCKhYOChYiFg4KEgICGjI6OjYqJiomJiouMiYaDgICChIR+e3x3cnyGh392dHd+fXhycHNxbWxuc3h7e3d0cW5tbW9xcXNzdnd3dnV1dXd1d3yBgoF/gIGAgICBgoODg4ODf3x7fH1+fHp2dXJwdXt9fn18fX59e3Jvc3x8dHBwcG9vcHBwcXZ6enp6enl5enp7e3x8e3t7e3l5eXl6enp6enl6enp7enl5d3d1eHh5eHRxbmpnZGFfXV5iZ2xtbm5vb3BwcHBwcHJ0dXd3eXp5dHFuamdlYV1bW1laW15hY2drbnJ1e3+Bf36AgIGBgoKCgoKCgX13cGhlZWpwd3V4ent/gH53c3JwbWtpaGZmaGxtamhocHd7fYCCgoOEipKbnZ2enZiSi4uLiYiJi5CYnZ6dnpuYlZKOj5KRkJCQj4uFf3d1foCDg4KDhIqOjYqGhISIioqIiYuKhoJ+fn6Cf31+gH15eHx8end0e4OGgHVxcnFubm9xdXh5dnRxbm1sbW1ta2tub25sbW1vcHV3e4CCgX+AgYCAgIGCg4ODg4N/fHt+fn58eXd2dHN5fX9+fX1/f397dHB4fntzb3BwcXFycnFzdnp6enx8enp5eXp6e3t7eXp6enp5enp5eHt7e3t7enp7e3l5eHh3d3h4d3d2cm5qZmJgX19iZ2ttb25vcHBvcHJ0dHV3dnNzcW5rZmRgW1lXWFtdXmBiZWhscXV4e36AgYGBgYCAgoKBgYGBgYGAf3lza2Vnamtxc3qChYeHiYiGhYJ+enNsZGRkX11iamxubnJ2e3+BgXx+jJmdnp6emJCMjI+OjY2NkZidnZiYmJmZlZCOj4+OjY2OioWAdm9sb3Z/hYeKj4yGhISFg4GAgIKDhoWEf39+gIGCgYGAfXl4dXp/gXyAg4aAeHRycnBwcXJ2enl0cG5tbW1qa2trbm1tb25vb29ydHV5e3p8foGCgoCBgoKDg4ODgoCAgICAf316enl2dnuAgH5+fn6Af3x3dn6BenJwcHBwcXN0dHV7fHt7e3t6ent7fHx8fHx6e3t6enp7e3p5e3t7e3t7e3p6enp6eXp6eXl5eXd1dHFuamRgXl9jZ2xtbm9vb29wcXJzdHRzbGlkYV5aWVdXV1laXmNoam1wdXp7fX+AgYGBgYGBgICAgIGBgYGBgYB/fHVwaWZrb3N1eoGEiYuLi4qJi4uIhYJ9enNqZmdqa2hoaWprcnp8dHWDlJuenpyak4+OkJCPjY6Sl5ycmpWYnJ6alZCMioiHiYqIhoOAgHp3fIaKjpCJgXx7fn9/fHx8foGDhISCgH+BgoKEhoSAgH18fYGBgH58e3x5dnNzcnJzdXh6enVybGtqamprbG1ubWxsbGttbW1sbnN1d3h6gIKDgYOCgoSEhISDgYCAgICAf3t7enp5foGBfn5/f4B/eXV4f4J8dHFwcHFydXV6fn99enp7e3l5e3t7e3t7enp7e3t7enp8fHt7enp6enx8e3t8e3t7enp6ent7e3t4dnRxbGZhX19jaWxtbm9wb3Fzc3V0b2pkXlpYV1ZWWFteX2JobnJ1eXt+gIKCgYGCgoKCgYGBgYGBgYGBgYGBgYF8eXJvcnV9gYB8eoKLkY+LiIuMjIuLjY6Ni4JyaW9tYVxhaGxxeXhxbXuQmp2dnJqQlJKRkI2OjpCUmZqZmJeampiVkYyJhoaIiYmIhoaJiouLi42OjoqCe3h6fX5+f4GBhIWFhYOBhIaFg4OEg4SGhYB+fn18eXl5eXp6d3R0c3R4fX55c29tbm5ra2tsbnBycnBvbmxraWpqaWpvcnd8gIKBgoOEhISEhISCgYCBgYB+ent7e3p+gYCAgIGBgH94c3eAg3txcHFyc3N0d3yAf3x5e3t7fHx7e3t7e3t6enp6enp8fHx9fHx8fHx8fHx7e3t7fHx7e3t7e3t7e3x6eHZxa2RhX15gY2VmZ2hsb3Bwb2xoYl1bW1xeXl5jZ2tvcnV5e35/gYKCgoKCgoKCgoKBgYGBgYGBgYGBgYGBgX97d3d+g4aHhYSEiY6TkIuIioqLi4qKjY+Skod3dHRqYF1gaXN8fXVudIqYnJuZl4+UmJeXlJKQkpaZmZaTkpWVlJGOioiHh4eIiIiIh4uMjIuMjo6KhYN/eXl7e3p9gYOFhoiIh4aGhIOCg4KDhYSAe3l5enl7fXx6d3h2d3V1dXh8enNwb2xqamtrbnJ0dnd5eXl5dnRzc3Nva2psbnR6foGCg4SFhYWFhIOCgYKCf3x7fH59f4OCgYCAgYGBfXRvdn6AeXRzcnN0dXV4fYB+fHt8fHx7e3t7fHx8fHt7e3t6ent7fHx8fHt9fX18fH19fHx8fHt7fHx8fHp6fHx7enRva2dkYF9eXl9gYGRnaWhlY19dWltdYGJnaW1ydnl7fn+BgYKCgoKCgoGBgoKCgoGBgICCgoKCgYGBgYB/fnp8gIKChoeHhoeMkJKPioaFhoiJio2PkZKSi3x3d3tzbGZndX+BeHB0iZWZm5uWj5SampqamZaVlpeVk5GPkJKQjYuKiIiHh4eJiomJjI6OjoqHhYKAfHp6enh4en2Ag4OEhYeIi4eCgYGAf4CCf3p5eXt6e31+fXt4eXh3dnN0c3R0cW9rbGxvcW9wcnZ6fX5/fn17eXl5e3p0bmloa3F7f4KDg4aGhoeEg4OCg4KCfXt8foCChYKAgH+AgYB6cW50fX15dnV0dHZ2dnp+gH58e3x8fXt7fHx7e3x8e3t7e3p6e3t8fHx8e319fX19fX18fHx8e3t8fHx8fHx8fHx7eXRwbGhlYF5eXFxcXmFiYF9fXl9fYmZqb3R4fHx+gICAgoGBgoKCgoKCgoKCgoKCgYGCgoKCgoKBgYGBgH99foSEg4WHh4aGhomOj46JhIGBgoOIjpKVlpWMgXt8g4WEfXZ6gYF4bm5/jZeam5iTlZqamZmZlpSTk5KRjoyMjYyLi4uKiYWFhYmLiomIioyLiYiIiIR+eXt5dXN1eX5/fXl4e4SJioeFg4F/gYJ7enl7ent8fn98enl4eHh1cm9ucHBvb3JzdHR0c3R4fH+AgYGAgH9/f3+CgoJ+d25oaHB6gYOEhoiHh4WEhYOCgoB+fn+AgYSEgoCBf4CCgHpva3J8fHd1c3V1dnZ2en6Afnx7fH1/e3t8fHx8fHx7e3t7e3t8fHx8e3t7e319fn59fXx8fHx8fH19fX18fHx8enp5eHdzbmplYV1dXVtcXF5gX19gYmdsc3d5fH2Af4CBgYGBgoKCgoKCgYKCgoKCgoKCgoKCgoGCgoGBgYGBfYCFhYSDhoeIh4aGhYqOjoqGgHx9fX+Lk5iXlpCDf4CDiY2KhIGEgXdoZnOGlJqbmZqXmpqamZSSkY6NjI6OiomKi4uMjIyJhYWGi42LioiHiYuLi4qJiH95ent3dXR2eXx9enh3f4eNjIqGgICCfXd6e3l6e3yAgHx5enh3dHFubGtub3FxcnV1dXZ3eHp9gICAgIKBgIGBgYOEhIWCfHJqaHB8goWGh4iHh4aFhYOCgYGBgoKDhYSBgYGBgYF/enFud358eHV1dnZ3dnd5fn9+fH5+fn57e3x8e3t7e3t7e3t7e3x8fHx8fH19fX19fX19fHx8fHx8fX19fXx8fHx8fHx7eXd2cnBta2diYV5eYGJlZmpucnh6fH6AgH+AgH+AgYGCgoKCgoKBgoKCgoKCgoKCgoKCgYKCgYGBgX+BiYyFhISGh4eHiIaEhomNioaCfHt8fICOl5mZlYuEgoOGi46LhYaHfnRtdIWRl5qXmZmampqZlZKOi4uKioqJiYeHiIqMjIqGhoeNj42MiomKjI+MjYyLiISBfHl5enl6fH58e3uAhoqJiIaEhoeDfXl3d3h6fX9+enVxcW9ua2pqbXBycnJzdnh4eXl6e3+AgICAgoGBgoKChIWFhoWDe3BmaHJ+hIeIiIeHhoWFhIOCgoOEhIWFhIGBgoKBgoF8dXV7f314d3d3d3l3d3l+f3x5d3VzcXt7e3t6enp6eXl6fHp6e3t7e319fX1+fn18fX19fX19fHx9fXt7fHx8fHx8fHx7e3x8eXdzcG5pZWRlaGtucnZ+foCAgH9/f39/gYGAgIKCgoKCgoKCg4OCgoKCg4ODg4OCgoKBgYKCg4eLiYSEh4iJiYmIhoaGhoiJiIR/fHt7fYqWm5uamIyEgoKGiIaHiYV8dG90g46WmJmZmpubm5uZlJCMiYmJiYqIhYWGiYyNi4qKi5KUko+Oj5GSkI2KiomJiIWBfHt6eXl7gYKEhoaIiomIhoeMjIuJhX12dXZ3e3p2c3FwbW1ub3J1dXR1d3h5fHx9fX19foCBgYGCg4ODhIWFh4eHh4iFemtkaXWChoeJiIeHhoeFhYODgoWGh4aDg4ODg4ODgX56e4GEf3p3dnV4eHZ3e4CAe3JqaWlpe3t7e3p6enp5eXp7fX18fH19fX19fX5+fXx9fX19fX18fH19enp8fHx8fHx8fHt7fHx7enh6eHZzcnFzdnh7fX9/gIB/fn5+f3+BgYGBgoKCgoKCgoKDg4KCg4ODg4ODg4ODgoGBgYGBh4mMjo2Ki4yKiIiIiIiIhoWHhoN+enp+i5SZnJybkYeCgoOGhomKh31wa299jJWXmJianJ2dnZqWkY2Mi4uKiYeDg4WJjIyLi4yPlJaVk5KUlJOOi4mIiImIhoN+dnNydXuCh4eFhISFhoWEhIaHiYuKioR/enhzcnFxc3Jxc3V2d3d4e3p6ent9fX19fX1+gIGBgYKDhIWGh4iHh4eHiIiDdWhlaniEiYmIiIeHhoaGhISFh4iJh4WDg4ODg4OCgICEhoV/fXp4d3t7eXh5e3NrZ2psamp8fHt7enp5eXl5enp8fH19fHx+fn9/fn59fX19fHx8fHx8fHx6ent7enp8fHt8fX19fXx8enx+fnx6e3x9f35/gICAgICAf39/f4CAf3+BgYKCgoKCgoODg4ODg4ODg4ODhISDg4OBgIGIjJSQjYqLjIuLjIyLiomHhYWHhoF7e4ePlJaZm5yakYiEhYaIiYuIfG9tcn6NmJmYmJmcnp+enJaSkJGPi4mKi4iIiYiKioqMkJOUlpWWl5eWk46LiYiHh4WFhYF2bGlrdYCHioaDg4SDgX98eXuAhoeKjImGf3NxcnJ0dXR3eXl6en1/fXx8fX9/fn6AgH+BgICAgYSGiIiJiYqJiYmHhoV+cGVlcYCFh4iIiIiIiIaFhYaIioqHhYSEhISEhISDg4WIg4B9e3t9fXx6eHZvamxta2xsb3p6enp7e3p6enp6enp6e3t7e35+f39+fn19fX18fHx8fHx7e3l5eXh6ent7enp9fX5+fX19fn9/f39+f4CAgYKCgoCAgIB/f39/f39/f4GBgoKCgoKCg4ODg4ODg4ODg4OEhIODg4KBhYuPjo2KiYqLi42RkI+RkouHhIWIiIWGjJKTlJWWmZybkYiHh4qMjYh8c3FzeYqYm5mXl5qcnJyYlJOSlZWUkpKRkZCNjI2LioyPkZOVlpeYl5WTj4uIh4WFhISGhIB0Z2JlaG52gIOEg4F/enp6dnZ8g4aGiIiGfXp3eXp7fH18e3t7fX59fH1+f39+fn5+f4GAgIGDhYeKiouLiomJiYiHh4V7bWVncX6GiImJiYmJh4aGh4mKi4eFhISEhISEg4OEiImEfnx9fX9/fnp0bGlucnJwcXJ1eXl5eXl5eXl6enp6eXl6e3x9fn6AgH5+fX19fX19fHx9fXt7fHx6enp6enp5enx8fX19fn9/gICBgYCAgYGBgYGBf39/fn5+f39+fn9/gICBgYKCgoKDg4ODhISDg4KChISEgoODg4aNkI2Ki4qLioqKio6Pk5eWk4uFhIiMi42PkpWUk5OUl5uYj4iHio2OiXx2eX2AiJacmJeXmZqamZSUlJiZmpmXl5STk5OTkpGPjo6QkpWWlpSUlJOPi4aEg4GDhIeIhnhoaG5raG52foKDgH56eHh4eXt/goGCg4SEfXt6fnx8fHt7fHx9fn18fH6AgH9/gICAgIGBgoSHiouLi4mJiYqKioiIioBwZ2Rpc4KIiYqJiImHhYaHioyKhoSEhISEhISDhYeIiIN/f39/gYJ9dGtsbnBydHV3eHt4eHh4eXl5eXp6enp6enp7fH19fX5+fn59fX19fX18fHx8e3t7e3p6enp6enl6fHx9fX1+gICBgYKCgoKCgoKCgYF/f319fXx9fX5+f3+AgIKCgoKDg4ODg4ODg4ODhISEhISCg4ODiZGPioeLioaDiIKAhpCXm5qUkIiCh42Sko+TlZSTk5SXmpqUjoqLi4yIgHRwdn+Ik5yal5qcnJuamJeZlZWen52dmZWUlJSUlZSSk5SUk5OUk5KSkpCMioaDgoSGiIiEeXFydXNvbnJ7gH98e3l1dXd3dXR0cnJ2fH6Bfnx8fXx9fHx8fH1+fXx9f4CAgICAgH9+f4GChIiMjY2Mi4qKioqKiIeIhXlqY2VueoSJioqJiYeFhoiMjIqGhISEhISEhISEiIuKhICAgIF/e3BrbW9zdnl7fH5/gHh4eHh4eHl5eXl6ent7fHx9fX5+fX5/f35+fX18fHx8fHx7e3p6e3l6enp6e3x7e3x8fH2AgYGBgoKCgoKCgoGBf358e3t8e3t7fHx+gICAgoKCgoODg4ODg4WFg4ODg4SEhISDg4WLkY6KhoyKiomIgn6EkJiZmZWRioGCi5KRj5CSlZSVl5ibm5iRjIqMjIiDenRucnuLmp6cnJ+fn56amJeQn6ChoJ2YlZOSkpSVlpeVlZSTk5SUk5OSkI+NiYeGhoiJiYeBe3x7d3NxdHyDhIB8eHdzbnF2dnRwbXF4f4GBfXx9fXx9fXx7fX19fX+AgICAgIB/f3+AgIKFiYyNjY2LioqKiomJiYqHf3BnY2p4gomKi4qJhoWGiYyMioaEhISFhYWDhISJjImFgICCf3Zsamxwc3Z6fX5/f4CAeHh4eHh4eXl5eXp6e3t8fH1+fn59fn9/fn59fXx8fHx8fHt7fHx7eXp6enp7fHx8fHx8fX6AgYGCgoKCgoKCgX9+fnx8fHt6e3t8fH6AgICCgoKCg4ODg4ODg4ODg4ODhISEhIODhYuQjoyMjoyKiYmFgYOMlJaVk5GLgoGJkpGLjZCTlZaXmJqamJOOjYyMioaBgHt0dH+RnKKinp2enJiWl5SanZ+cmZaSkJGSlZaXmJeWlpaWl5aUkY6Pj42MioiJiouLioaDgHt7e36Cg4F9e3t3cmxrbnN1dXNxcXR7gYSDenh4enx8fHt9fX19f4CAgICAf319fX5/gYWJi42NjYuKioqKiYmJioqEem5pa3iDiIuLiomGhYaJjIyKhoSEhIWFhYOFh4qLiYWCgoB3bGttb3N3e35+f4CAgYF3d3d3d3d4eHl5enp6ent8fn5+fn9/fn5/fX19fX18fH17enl6enp6e3t6enp6ent8fH1+fn+BgYGBgYGBgIB/f359e3t7e3t7fH19fn5/gH+BgYKDg4ODg4ODg4ODg4OEhISDgoKFjJKPjo+Pj46NjYuFg4iPk5KQkI2FgoiOjouMjpCVlZeXl5iYlZGQjo2LioeAfHl5fomVm5+enp2amJiYlpibmpmVlJSUlZaVlZWVlpWXmJqbmpiSjo2Ojo6NjY6QkZGPi4eDgYKDhIWDgICAf3xxZWFtcHN2eHl3dXZ8hIeDenh5enx8ent7gYGAgIB/f39+fHt8fH+BhIiNj4+Ni4yMi4uKioqKiomEeXBudoGIjIuKiYaEh4mOjImGhIWFhoaGhYWHiYuIhYOBeG5sbnBydnqBf4GBgYGAgHd3d3d3d3h4eXl6enp6ent8fH5+f35/f399fX19fXx8fXt6eXp6enp6enp6enp6e3x8fX6AgYGBgYGBgYGAgH9/fn17e3t6ent8fX1+fn+AgYKBgoODg4ODg4ODg4ODg4SEhIOCgoaOkpCRkZGRkZCQjoiDhYyPkI+PjYiGiIuKiYuMj5OWl5iYmJmVkpGRj4yMiIF9f4KBhIuTmJiYmZeVlZaVlJWXlpWVlpaWlpiYlpaVlZiYmpWYmpSQj4+Ojo6PkZSVlJGNioWEhYeGhIB/gIB+eXFiT1Zpb3R3dnVzcXaAh4eDgYWHh4SAfnt6fHt9fXx8enp4d3h7fYCEiI6Pj42LjIyLi4qKioqKiYeAdnB0f4iMi4qJhoSHi46MiYaEhYWHh4eGhYaJiomFgHlta3BydXl8gYKBgYGBgYKCeHh3d3h4eXh5eXp6enp7e3x8fX1+fX5+fn59fX19fX18fHt7e3l5d3d3eHl6enp7fHx+f3+AgIGBgoGBgYCBgH59fXt6ent7ent8fX1/f4CBgYKCgoKDg4ODg4ODg4ODg4ODg4KBhY6TkpORkZGUk5KPi4WEioyPj5CNiYeJioqJiYuMj5SXmZmZmJeUkpCPjYyIgX2BhYODho2RlJWWlpOTk5OVlZWVlJWWmJmbmZmXl5eWmJqbnJ2cmJWTko+OjpGUl5eWlJCOi4uJiYeDgICAf3x5bFU3M1docHR2d3dzdHyGiYmJiYiKi4uHgnx6ent6d3V0dHV0dXd8gIaKjo+NjY2MjIuKioqKioqKiYF3cHR+iIyMi4mGhIiLjYuJhYaFhoaGh4WGiIuMioV7bmxwc3V5foSFg4ODg4OCgoN4eHh4eHh5eHl5enp6ent7e3t9fX59fn5+fn19fX19fXx8e3t8e3p4eHh4eXp6ent7e35/f4CAgYCBgYGBgIB/f359e3p6e3t6e3x9fX9/gIGBgoKCgoODgoKCgoKCgoKCgoKCgoGFjpaVlJSTk5SUkpCOiISHi46PjYuIiYqKioqKi4yOkZWXmZmXl5KPj5COjYuGgoKDhIOGiY2QkpOSkJGRk5aWl5WVlZaYnJudnpucnJmampucm5mZlpaVkpGSlJaYl5aWk4+Mi4qKjY+OiYSCfXVjQywvVmtubnJ3eXVwdoCCfXh7fn+BgYODhoJ/f4B9enl2dXR1eH6Ei46Rj42NjYyMi4qKioqKioqJgXdzdoGJjYyLiYaGiY2NioiFhoaHiIiHhYaJjIuIfnNtcXR1eoCDhoSDg4ODg4KDf3h4enp5eXh4eHl5ent7fX19fX19fn5+fn5+fX1+fn19fX18enp6e3l4eHd3eXl6ent7fX5/gICAgICBgYF/f39+fX18e3t7ent7fH1+foCAgIGCgoKCgoKBg4ODgoKCgoKCgoKBgYSOlpeXl5WVlpaUkY6IhIaKjI6NioqIiYuLi4uLjI6PkZOWmJmVkIyOj4+Oi4mEgoKEhYaGi46RkI+PkJKVl5eVlZSWmJuZm6GdnpifkJGXmZqZmZeXlZWVlZeYl5iYl5aTkY2LiYiJi5CRjIaAdGFKPEZgcXJub3J2dXN1en16dHZ4e36AgIGDgoKBgH59e3Z0c3Z6gIaKjpCPjY2NjIuLiouLi4uMi4mAdXN3gYiLjIuJhoaKjo6KiIaGh4iJiYeFhoqNjIFzbXF0dnl/iImIhIODhISEgn5zeHh4eHh4eHh5eXp6enp8fH19fX1+fn5+fn59fX5+fX19fXx6enp5eHh4eXl5eXl5e3t8fX1/gICAgICAgH9/fn59fXx7e3t6ent8fX5+gICAgYKCgoKCgoGDgoKCgoKBgoKCgoGBhIuWmJeYlZSWlZSRjomFhYmLiomJiYiJiYmLi4uMjY6QkJOWl5SQjI2PkI+MjIZ/f35+f4SIkZKSkJCQk5aYmZaUlJaZm56ejYaJj5iKj5idm5qZmZmVlZaXmpqZmJiYmJSQjYuJiYaEhYaFgX11bFtKTmd3eXVxb3R2dXR3fYF/e3l9gICAgIGAgH9+fX15d3Z2d3uBhouPkI+NjY2Mi4uKi4uLi4yLiYB1dHiDioyMi4iFhoqOjoqIiIiHiImJiIaGioyIeHBxdnZ4gImLjIqFg4OEhISCeG14eHh4d3d6enp6ent8fHt8fHx9fX19fX1+fn5+fn59fXx8fHx7enl5eXl5eXl5enp7e3x9fX9+gICAgICAf35+fXx9fH17enp7e3x9fX1+gICAgoKCgoODg4ODg4GBgYGCgoKCgICBhZOYl5eWlJaVk4+MiYWFiIyLh4iIiYqKiouLiYqMjY6PkZKUlI+Oj5GQj46Nh354dnd4fYaPlpaSkJGRlpqal5OUl5mZnZCJjJKTkpqen56fnZ2bmpiXlpeam5uampqYko2KiomIh4SDgn97dGthVk9cdoB/e3ZwcHV3dHh+g4J+fn+Af4CAgYCAgH5+fHl3dnZ6foKHjI+QkI6NjYyMjIqLi4uLi4yIf3d2e4SKjY6LiYaHi46NioiIiIeJiYmJh4iLiX1wcnV2eH6GioyMiISDg4SEg39yaXh4eHh5eXp6ent6fHx8e3x8fH19fX1/f35+fn5+fn19fHx8fHt6eXl4eHl5eXl6ent7fH19f36AgICAgH9/f359fH18fXt7e3t7fHx9fX6AgYGCgoKCgYGBgYGBgYGBgYKCgoKCfnp4g5KXmJeWlZSSjouHhomMkJGKh4eHiImJioqIiYqLjY6Oj4+RjoyPkZGRj46Mhn55eHh5gY6Xl5WUkpOVmJqWkZOVmZqbj4mRl5ecmpSUmZ6enqCempmYl5qbnJubm5qTkIuKiIiGg4F/e3dybWdhYGt7gHx7d3Bpcnl3eH2EhYGAgICBg4OBgYB/f357eXd2dnp+goiNkJORj42NjIyMiouLi4uLjIh/dnV8hYuPjouJhoiMjo2KiIiIh4mJiYeFh4d/cHF1dnd+hYqNjoyIhISEhISCeW5qeHh4eHl6enp7e3t7fHx8fHx8fn5+fn5+fn59fX18e3x9fX19fHx7fHx8fHp6ent7e3t+fn19fn6AgICAf39+fnt7fX18fHt7fHx9fX5/gIGCgoKCgoGBgYGAgICBgYGBgoKCgX53b218i5SVlJSVlJKNi4qNj5CQjo2JhYSEh4iJiYiJioqLjY6Qj5COjpCSkpGQkI+MhoOBgICGkJiYmJeXlZSVl5eVl5mXkZuXkpidnqCcn5+dnZqemKCcmJiZnZ+fnZ6cl5OPioiJiIeEgn96dXJxcm9vcnd5dXV1b2dqc3h5fIKCf39/gYGCgoKCgoJ+fn97eXl5fYGFiYyQkpKQjo2NjYuLjIyNjYyLhn12dn6GjY6NjImGiY2OjIqIiIiJiYqJiIeHgHNucnZ5foiLjI2Ri4iFhIaGhX1waWt4eHh4eXp6ent7e3t8fHx8fHx7e35+fn5+fn9/fnx9fn5+fn18fHt8fX18enp6e3t7e3x8fHx8fH5+fn5/f35+fn59fXx8fX18fH19fn+AgYKCgoKBgYGBgIGAgIGBgYGBgYB/eG5kZ3mHjY6QkZOVlY6JjJKTkY+PjouGf3p+f4WHiImKiomMj4+Pjo2PkJKSkZKRkZCPjY2NkJGTlpiZmJiWlZWXmZiXmZyZkpubnp6hoKKfoZ+dnaGQnJ+bmpuhn6CZnJyYk4+Kh4iIh4aEgX57ent6eHFsbG1rbnN0bWhrcHd/hYWCgICBgYKCgoKCgoB+e3l6ent/goWJjJCSkpCPjY2Ni4uMjI2NjIuFfXd5gIiNjo2MiYiKjY6MioiJiYmJiomIhoB4cHJ0dn2HjIyLioiDgICAf316c2hnanl5eHl5enp6e3t7e3x8fHx9fX19fn5+fn9/fn59fX5+fn5+fnx8e3t9fXt7enp8fH19fX19fX19fH19fHx9fn59fX19fHx8fHx8fX1/f4GBgYGBgYCAgYB/f4CAgICAgIB/fnxxZF9md317fIKJj5KRjYySlJORj46NjIiDf3x5gISIiYqKiYqLjY2MjpCRkZGRkpOSkZKTm6Gfmo6MlZqamJqYl5ibm5qZmp2Zl6CgoJ+fn6CelJegoZ2in5yanKKlpZ6cm5eSj4mHhoWFhoSDg4OBf314bmJhZmtucXJwamZqdYOIhoKBgYGCgoKCgoKCgX99fHt8foGEh4qMj5OSkY+NjYyMjIyMjY2NiYJ7eHqAiIyNjYyJiIqOj4yLioqKioqJiYiCdnJ0dXZ5gYWDgn57dnFub29vbWxmZWZsenp5ent8fHx9fX19fHx8fH19fX19fX5+f39/f39/f39/f39/fn59fXx8fX18fHx8e3t8fHx8fHx7fHx7enx9fX19fX18fHx8fX1+foCAf3+BgYGBgIB/f39/fn5/f4CAgH56c2hiYGVoamtueoSRko6Li5CUlJKPjYuNi4iEgn9vcnqCh4mKiYuNjIyOkJGRkZGTlJORkZGVnaimkYqNm6anopuYmJubmpiYmpyboaGglJCboKGdmp+boJ+enZueoaOioJ6bl5GMiYiHhYSEgoKBgH59eXRxbmljYmdsb3JuaGVufIF/f4CAgYKCgoKCgoKBf359fX+AgoWHioyPk5ORj42NjIyMjIyNjYyJgXp4fYOKjo+NjImJjI6PjIuKioqLi4uKhHdxdHZ1dHZzcG5qaWhoZmdoaGhnZmVjZWh6enl6e3x9fXx8fX18fHx8fX19fX19f39/f4GBgICAgICAgIB/f39+fX1+fn19fHx8fHt7e3t6ent7e3t8fH19fX19fX19fH5/f4CAgICAgICAgICBf35+fX5+fn9/f398e3ZtZmFiZGVoaW57iJKSjImOkZSXlJCOi4yMiISDgnRqbHeBhomKjIyLi4+Sk5OTk5OVlZKSkZOZoaSSi5ytrqmlnZeXmpycm5qbnZ6foJ2YmpycnJiYmpyfnZ+fnJygo6GenJuXkY2Ih4aGhIOCgYB/fnt2dXh8eWxhXmJqb29qZmt1eXp7fn+AgoKCg4ODg4GAf3+AgYKDhYeKjJCUk5GOjY2MjIyMjI2NjIZ+eXp+hYuQj4yLiYqNj46Ni4qLi4yMi4d9c3R2c29uaWVjY2RlaGlsbm9wb25raGhmZnp6eXp7fH19fX19fXx8fHx9fX19fX1/f39/f3+AgICAgICAgH9/f359fX5+fX19fX19fX17e3t7e3t8fHx8fX19fX19fX18fn9/gICAgICAgICAgH9+fn59fn5+f39/f3x1a2VlaGZlZWZnb3yJkY6Li5CSlJeWlJKOjY2KiIaDfXRydnyCiYqLjI2OkJOUlJWUk5SUlJKSkpWboZmiq6eioJ6amZibnZycnJydnJ2Yl6Kfm5manJuZnJybmZubmZyenpuYlZKOi4mHhoaEg4SAfnx6dnh7f4B/eW5jXmBobWtnbXl/gYCAf4CCgoKDg4ODgYB/f4CBgoOGiYqMkJSTkY6NjYyMjIyMjY2LhX55e4CHjZCPjIuKi46Pjo2LioyMjIyJgHRzcmxpZ2RlZGVobG91eX1+gIB4cWxtbG5ue3t7e3t9fX1+fn19fX19fXx8fH5+fn5+fn59foCAf3+AgICAgICAfn9/fn5+fn5+fn59e3x8fHx7e3x8fHx9fX19fX19fX19f3+AgICAgICAgICAf39/f35+fn5+fn9+eG9mYmVoZGRlZGdwe4mPjImMkZOWmJaVlJKPjo2KioeBe3V0eoOLjI6NjpCSk5SWlZSTlJWUlZOTlJeeqKumnpuYm5uZmZyenp6cnZubnZajp6Whnp6enJqamZaVmZiYmpybmZeSjoyLiYeGhYSDg4B9eXl5fH+Bf399d2tiXWJsbWxtdHt/goKCgoGDg4ODg4ODgX9/f4GDhYeJio2Rk5OTkI6NjIuMjIyNjYqCfHt7gYiNkY+NjIuNj4+OjYyMjIyMjIR2bmxoZ2RnaGtrbnR6g4WHg4WGgnpybW9xdnh7e3t7e319fX5+fX19fX5+fn58fn5+fn5+fn6AgICAgICAgICAgIB+f39+fn5+fn5+fn17fHx8fHt7e3t7e3x8fX19fX19fX1/f4CAgICAgICAgIB/f39/fn5+fn5+fHhwZmVmZmdnZ2NjaXKAjYyJi4+QlJeZl5aWlpORkY6NioaAdnR6hI+SkY6PkZKTlJaWlZGRkZSWlJSVlpmgoZ2Yk5SXlpaXmp2dnp2bmpubn6SkoZ6cnZybmpmYlZWZmZianZqYlJCMi4mIhoWEg4ODgoB+fn6AgICAgYB9eHFlXmVscXJvcXV8goOCgoODg4OEhIOBgYGBgoOFh4mKjY+Sk5OQjo2Mi4yMjI2NiIF8e3uDiY6Rj42Mi46Pj46NjIyMjIuGeG5raWtrbW1xdnyEio+QjYmGhoZ+cm5udHuBhXx8e318fX1+f399fX19fn5+fn5+fX5+fn1+f4CBgYGBgYGBgYCAgX9+fn5+fn59fX19fHp8fHx8fHx7e3p7fHx8fH19fH1+fn1/f39/f4CAf3+AgICAgIB+fX19fX15c2hkZmdpa2tpYmJqc36Ih4eMj5GUl5iYmJmZl5WQj5CMiYV8eXyEj5ORkJCRkpOTk5WUkY+OkJKVlpaVk5eYmpeSlZSUlZaanZ6fm5iVm5uioqGem5eXl5iamZiXlpiZmJmYlZWTkIuJiYiGhYSDgoF+fHx9gIKAgYGBgIB/enFjZmpvb2plbHiDgoB+gYOEgoSEgoKAgYKChYaGiIuMjZGSkpCOjYyLjY2NjYuHgHp6f4SKj5GPjYyLkJGQj4yMjI2Nin1taWZobXFydn6GjJGSkpGNiYiHg3lxbnJ4foSFenp6e3x9fX5+fn19fX1+fn5+f39/f39/foB/gIGBgYGBgYGBgICBf4CAgICAgH9/fX18ent7e3t6enp6fHx8fHx8fHx8fX5+f4CBgYGBgIB/f35+fn5+fn59fX18enNoY2NmaWxta2diYml0f4SFh4+SlJaYmpmZmpqYlpCOjouKiYJ7foaNkZGQkZGSk5OSk5OPjoyOkJKVlZOSkpSYl5WUlJSVlpibnZuXlZWXm56dnJuZlpWVlpeXmJiWlZaWl5WVlJGNiYmIh4aFhIOCgH17ent9gICBgYGBgYKAf3p1cnFyb2dqdoOGhIGChISDhISCgoGBg4OFhoeJiouNkZKRj46NjIuNjY2MiYV9fHuAh4uQkY+NjIuQkI+PjIyMjYt/cGZmaGt0eX6FjI+RkpKSkY2Jh4Z+dHBwc3uChYd7e3x8fX59fn5+fn5+fn5+f39/f35+fH5/f4CBgICAgIGBgYGAgICAgICAgICAf39/f319fX18enp6enp5eXp6e3t7e3x8fX1+fn5+f3+AgICAfX19fHx8fX19fXt1aWNhZWhtcXBuaWJjbHV/g4SJk5WVlpmbmpqamZeVkY6Ni4mGg35/hY2QkI+PkJKTkJCOi4qKiYuMjpGUk5OSkpWVk5OTlJaYmJmYl5WSkpOVmpuampmal5aVl5eZmJiYmJaVlJWTkY2JiIiGhoWEg4B+fHt5e3t8gIKDg4ODgoGAfX59e3t7dXJ3fYSGg4B/gIKEhIODgoKEhIaGhoiKi46QkpCPjoyMjIyNjYyHgXx7fIKIjY+Rj42MjZGQj46MjI2MiHVoZmtucnqFi5CRkpOTk5GRjYmIhHlxcXN5gYWIh3x8fX17fH1+fn5+fn5+fX1+fn5+fn5+fn9/gIGAgICAgYGBgYCAgICAgICAgIB/f39/fX19fXx6enp7e3t7e3t8fHt7e3t6fH5+fn59fX19fn5/f39+fX19fX16cmpkZGNla3BzcW5nYmNpcnyBhImUl5aXmZuampmXlZKPjo6MhX16fn+CiI2Pjo2Oj5GOjIqGgoCBgoWHjY+QkJGRk5OTk5SXnqKglpOUkpGTlJeXmJiXmp6bmJeYmZuam52dmJWTlJOPjImIh4aGhYKBf358e3p7e3yAgoODg4OCgoGAgICBgoGDgn14foWBeXd4gISEhISDg4SFhoaGiIqLjZCQkI6NjIyMjI2Ni4WAfHt8goiOkZGPjo2QkJCPjoyMjYp6bGZpbnJ7h4+RkZKTk5OTkY6Kh4V/dXBydHyDh4mJfX19fX19fn5+fn5+fX18fH19fHx+fn9/f3+AgYGBgYGAgIGBgICAgICAgICAgICAf35+fX17e3t7eXp6enp7e3x8fHx7e3t8fn5+fn5/fX18fYCAgIB/f318enRqZGRlZWlvc3NxbGZhZWx4f4SFiZWYl5mbm5ubl5WTjo2NjYyIeG51fIGGjY2LjI2NjYyJh4SAfnt8f4OJioyNj5CRkpGVl52nrKaZlJGQkZOVl5iXl5eYm5uZmZqcm5ucnpuYlZSUko2Jh4eHhYWFg4J/fnx8e3t8fYCCg4ODg4GCgoGBgYKDg4eHgXl8gn96e32DhYWEhIODhYWGhoeJiYuNj5CPjo2NjYyMjYyLhH59fYCEipCRkZGQkJKSkI+NjI+Lfm1kZmtudYSPk5OTlJSVlZSRjIiGhXtybnF4gYiJiYl+fn5+fn5+fn5+fn59fXx8fHx8fH19f35/f3+AgYGBgYCAgYGAgICAgICAgICAgIB/fn59fHt7e3t5enp6ent7fHx8fHt7e3x9fX19fX19fX19fn5/f319fXt1a2RjZWdpbXF0dHBraGdpcHyFhoaLlZiZm5ubmpmYlZKOjIuKiop8Z2l1fHx+f4CBhYeJioqHhIB8e3x/g4aJioyOj5CRlJynq6ypo5uVkpKRkpWWl5WVlZaZmZmZmpybmpucm5iUk5GQi4iHh4eFhYWDgn9+fX19fX1+gIKDg4ODgYKCgYKCg4SHiYiFgIKCfnt/gYSFhYSEg4OFhYaGhoiJi42PkI+OjY2NjIyNjImDf35+gYWLkJGRkZCQkpKQj42Ni4BxamlpbHJ/kJKTlJSUlJWVlJGMiIeAdW9xdnuEiImKin9/f39+fn5+fn5+fnx8fXx8fHx8fH5/f39/f4CAgIGBgICBgYCAgICBgYGBgICAgH5+fXx9fHt7e3p7e3t7enp7e3t7e3t8fHp6fHx9fX5+f39+fn9/fn18dWxjYWVobG5xdndzbmpnaGxzf4iIh42WmZmcnJuamJeVk4+NiomJi4JsYGx2dnh3eHx/g4aHhoaFgoB+f4KChoiJi42OkI6SnaiqpaKempWPj42NkJOVlJGRlJiZl5mbnZqXmJiWlZOSj42Jh4eHiIiGhIOBf39+fn19fn+Bg4ODg4OBgYKBgYKEhYeIhoSChIB5eHt+goSEg4ODg4SGhYWGiImKjI+Pjo6NjY2MjI2MiIN/f4CCiI2QkpGRkZGRkY+OjIqFeWtqa2xye4uSlJSTlJWVlZWTj4qHhnxzcHR5gIaKioqMf39/f35+fn5+fn5+fn59fHx8fHx+f4CAf39/gICAgICAgIGBgICAgIGBgYGAgICAgH9+fX18fHx7ent7e3t6ent7e3t7e3x8fX18fH19fX5/f39+f39+fXdtZGBkaGtuc3Z4d3FsaGdrc3uEjImGjJWYl5qcm5qYl5aUj4aChYiGgnFhY3B2d3d4fH+ChIWEhYSEhIKDg4OEhoiKjI2PjpCTmZ2cnJmXk46JiImLjpCPjY6QlJWWmJuamJWUlJKQj46Ni4iHh4aHh4aEg4F/f39/f39/gIGDg4ODg4KCgoGBgoKEhoaFhIODfXRzd3yBhISDg4ODhIaHh4aIiYqMj4+Ojo2NjY6OjYyIg4GBgYSJjpGRkZGRkZGRj46Mh3tsa2xtcHiDjpSTk5OUlZWVlZOPiYaCeHFydnuBh4qKiox/f39/fn5+fXx8fHt9fXx8fX18fHx9fn5/f39/f39/f39/f3+AgICAgICBgYGBgIB/f35+fXx9fXt7enx8e3p6enp7e3t8fX19fX19fX18fX5+fX1/fn16c2hiYmhrbXN5enx3cWxpaG50e4eOjIeIj5WXmZ2dmpiWlZORiYaDg4F+dmZgbXR3eHp+f4GDhYSFhISEg4ODg4ODhIaJio2Oj5CSlJeYl5STjYmDhIaJjIuKioyQlJOXmJmWk5OSj42MjIqJh4eIiIaGhoaEgoB/f39+fn+AgoKDg4SEg4ODg4GBg4OEhIWEhIF7dG90en+Dg4OChISFhoaGh4mMjIyOjo6OjY2NjY6Oi4aEgoKEiI2QkpKSkpKSkY+OjomAcWtvbm53gY2UlJSUlZWVlZWVko2JhXx0cnR3fYWKioqKioCAf39+fn59fX19fXx8fHx9fXx8fH1+fn9/f39/f39/f39/f4CAgICAgH9/f39+fn19fn59fHx8e3t6fHt6enp7e3t7e3x8fH19fX19fXx9fn+AgH9/e3RrY2FmaWtxd3l6eXRtaWhscHd7hY2LhYeNkpWYmZqZlpWUlJKNioODgX55a2BtfoB/f4GBgYODhYWEhISDg4ODg4OEhoeJi4yNjo6QkpSTk5GMiIOCg4WIiouJiouOj5KUlZSRkI+MiouLiYiHh4iIh4eHh4SDgX9/gH9/f4CCgoODg4ODg4ODg4ODg4OEhIODgXx0a2NodYGDg4OEhIWFhoaJi46OjI6Ojo6NjY2NjouIhYKDhIaLjpGSkpKSkpKRj4+NhnZsa25wc3yIkZWUlJSVlZWVlZWSjYiEeHFydnqAiIqLi4yMgIB/f35+fn5+fnx8e3t7e3x8fHx8fHx8fX9/f39/f39/f39/fn5/f39/f39/f35+fHx+fnx9fHx8fHx8enp7e3t7e3t8fHt7fHx8fX19fX1+f35/fn56cGdiZWlscHd7fHx5dW5paG51eHqFjouGhYiPkpWZmJWUk5OTko6LiIaDgH5xYGl/gYGAgYGCgoODhYWDg4ODg4ODg4WGh4iKioqKjI2PkJGRkIyGg4KCgoSJioqJiYqLjY+QkZCNi4mJh4iIiIeHiIiHh4eHhoWDgYB/f4B/goKDg4ODg4ODg4ODg4ODgoKDg4N/eHNsYltneoGDg4OEhYaGhomLjI6NjYyOjo6NjY2Ni4aCgoOGiY2RkpKSkpKRkpKRj4p/cGprcHR6g42TlJWUlJSUlZWWlJOOiIJ2cXN3fYKJi4uNjY2AgH9/fn5+fnx8fXx7e3t7e3t8fHx8fHx8fX5+fn5+fn9/f39+fn5+f39/f39/fn5+fn19fH19fX19fHx7e3t7fHx8fHx8e3t7e3t8fX19fX5+fn9/fndsYmNoam50eXt9e3l1cW1tbm1qbX6OjYaFiIuPkpWUkZCQkJGRkI2JhoaFgXdlZXuEhIODg4SEhISDg4aGhYWEhIODg4WGh4mJiYqLi42OkI+MiYWDgoKBgoOGh4iIiIeJiouKiomHhoaHiIiIh4eIiIiIiIiHhoWDgYB/f4CCg4ODg4ODg4ODg4ODg4OCgYKDgX13cWxjUlBneoCChIWFhoaGiIqKi42NjI6Ojo2NjoyIg4KDhYeLj5GSkpKSkpGSkpGQhnVubW5xdX2HkZSVlJSUlJSVlZaUko6If3Vyc3h+hImMi42NjYCAf39+fnx+fn5+e3t7e3t7e3x8fHx8fHx9fX1+fn5+f39/f39/f39/f39/fn5+fn9/fn5+fnx8fX18fH19fHx8fHx8e3t7e3x8fHx8fH19fn5/f358dmtlZ2lrb3Z7fX19e3dzcHBsY19pgpGQh4OFi46QkpCOjo+QkJCSjomIh4WCemtld4SIhoSEhYWGhoaGh4eGhoaGhISDhYeHiIiIiYqKi42Pj4yIhIKCgYCBg4OEhYaGiImIiIaGhYSEhoiIiYmIiIeHiIiIiImIhoaFg4GBg4ODg4ODg4ODg4KCgYKDgoODg4OCgX52bWJPTFpwf4CDhYaGhoaHiImLjIyLjY2Njo6OioeDg4SHio6RkpKSkpKSkZKSkox9b2xucHR7gouTlZWUlZWVlZaWlpORjId8c3N1e4GIiouMjI2Nf39+fn5+fXx9fHt8e3t7e3t7fHx8fHx8fH19fX5+fn5/f39/f39/f39/f3+AgH9/f39+fn19fHx9fX19fX18fHx8fHx7e3t7fHx8fHx9fX1+fn9/fXt2bmhqa21zeH1+e3t6eHVzcGdeX22DkZCHg4aMj5GQjIyLjI2Oj5KQjYqHhYF7bWJxg4qIh4eIiIiIiIiJiYiIiIiGhoWGh4eIiIiJioqKioyOjIiEgoKBgH+AgIKEhoaHiIiIhoSEhYeJiYmJh4iIh4eHh4eHh4eGhoWEhISEhISEg4ODg4J+end2e4CCg4OCgoKAf3pybm90en6ChIOFhoaGhoeIiYuMjIuNjY2OjoyIhIODhIeKjpGSkpKSkpKSk5KOg3NtbnByd36GjpOVlZSVlZWVlpaWk4+KhHhzc3Z8hYiLjI2Njo5/f35+fn59fHx8e3t7e3t7e3t8fHt7e3t8fX19fX19fX19f39/f39/f39/f39/f39/f35+fX19fX19fX19fXx8fHx8fHt7fHx7e319fH18fH19fn58enRwa25tcHd8fn5/fX16d3NsZF1fboWQkIaEh42QkY+Ni4qLjIyOk5GNiIWCfHRwZ2eBiYuIiYmJiYmIiIqKiYmIiIaGhYWHh4eHh4eJiYqKi42MioaEgoGAf4CAgIOEhoaHh4eGhYaIiYqIh4iGhoiHh4aGhoaFhYWGh4eFhYSEhISEhIWEf3VqY2dxen+Dg4KCgH58fHx+e31/goGChYaFhYaGh4iIi4yMjIyNjY2Mi4aDg4OFh4qOkZKSkpKSkpKUko17b21vcHN7goqSk5SVlJWVlZaWlpaTj4qBdHFzdn2GioyNjo6Pj39/fn5+fn18e3t6e3t7e3t7e3x8e3t7e3x9fX19fX19fX1+fn9/f39/f39/f39/f35+fX19fX19fX19fX19fHx8fHx8e3t8fHt7e3t6fHx8fX1+fnt5dHBtbm9yeXx+f4B/fXp3cGdaWGZ1gomJhYOGjI+QjYqKioqKi42SkouIhIF7cmxgZXyGioqKioqKiomJioqJiYmJiIiHh4eHhoaHh4iIiImKjIyLiIaGhIKBgIB/goSGhoeHh4aHh4iKiYeFhISEhYaGhoaGhoWFhYaFhYWFhISEhISEhIJ8cWNeXWVven9/gIB/fXl4fH58fH6BgYOFhoeHhoaHiIqMjIyMjI2NjIuIg4ODhYaJjI6RkpKSkpKSkpSOg3JsbG5wdn2Ei5CTlJWUlZWVlpaWlZKMhntzc3V6gYeLjY6Pj46OfX19fXx8fHx9fXx8e3t6ent7e3t7e3p6e3t9fXx8fX18fX19fX5/f39/f35+fn5+fn5+fn5+fX19fX19fX19fXx8e3t6ent7enp6eXl6fHx6fHx8fHlwbG1rbnJ5gIB+gIB+enNrXVpdanN9h4uHg4SJjoyKiYqJiYmLjI6NiYeFg397dW5ib4GLi4uMjIqKioqJiYiIiIiJh4iIhoaHh4iLi4mJioqLjIyMiomHhYOCgIKChIaGh4eHh4eIiYqJhIB9f4GDhISFhYaGhoWGhYSEg4ODhIWFhoWEg3xxZV5ZXGVtdHt/fXp5eXl7f359fH6ChISFhoeHh4iJi46NjY2NjY2MioaEgoWFiIyPkZGSkpKSkpKUkYd6bm5sbXF4gIeOkpWVlZSVlZWWlpaUj4uEd3NydX2EioqNjo6Pj4t9fX19e3t8fH19fHx7e3p6e3t7e3t7fHx8fHx8fHx8fHx9fX19fn5+f39/fn5+fn5+fn5+fn59fX19fX19fX19fX18fHx8e3t8fHp5eXp7e3l5ent5dW5ra2pqbnh8fn+Af3t0a2JbXGFlbXiFiYWBhIyPjomIiIiIiImLi4qHhoaHhoOCgH1+goeJiYqKiIiJiImJiIiIiImHiIiGhoeHiIqKiYmJiYqLi4yMi4qJh4SDgoKEhoaHh4eHh4iJiYR+eXd6gIKAfX5+gYOEhYaFhISDg4OEg4ODg4ODfXJlXlxdYGlwd3l6enl2dnh7fHt6fYGEhYSGh4eHiImMj42NjY2NjYqHhYOEhoeKjI+RkZKSkpKSkpKMfnFtbm1xdXyBipCSlZWVlJWVlZaWlpSPin90c3R4f4aLjY2Oj46KhH17e3t7e3t5e3t7e3t7enp6enp6fHx7e319fX19fXp6fX19fX19fX1+fn5+fn5+fn5+fn59fX19fX19fX1+fn5+fn19fHx9fX19e3p5e3p5d3Z4eXdybGdnZ2htdXt/f355cGllZGNlY2Fnc4KIhoGEjpONiYiIhoaGh4qJh4iIh4iJjYuKh4eGhoeHiIiHh4eGiIeHh4eHiIiHh4aGhoeIiYuKiYmIiYmJi4uNjYqJhoWFhYWGh4iHh4eHiImHgnl2dnuBf315eXl8f4SFh4aEhIODg4ODg4GAgH57dGliYF9eZm1xdHh8e3p4eHt7fHt+gYSFhIWGiIeJio2Ojo2NjYyKiYaDgoSHioyQkZGRk5OTk5OTkoh5bm5ub3V7gIWNkJOVlZSUlJSVlpWVko6IfnV1dnmBiIyOjo6Oi4R8fXt7e3t7eXt7e3t7e3t6enp6enp6ent7e3t8fHt7fX19fX19fX19fX5+fn5+fn5+fn58fH19fX19fX19fX5+fn5+fX18fH19fHx6e3t6enl2dXZ2dXFqZmNmZ2hvd39/eHBoZGVqbGdiYGJrfYiHgIKNlZCJiImHhoaEh4mKiYmKjI+Qj42Mi4qHh4eHh4eHhoWHhoaGhoaFhYaGhoaGh4qLi4yLiomKi4uLi4uLiomJh4aGhoeHiIeHh4eIiYeBe3Z3fYF/end4fH6Cg4WFhISEg4ODg4ODgX17dG1oZWViYGBfYGFpcXt/e3RubXF0eHl+goSGhYaIh4mKjY6OjY2NjIqHg4KEhomLjZCRkpKTk5OTk5OPg3Jtb3BxeH2DiI6PkpWVlJSUlJWWlZWRjYZ7dHV1e4OKjYyOjYuEeG57e3l5enp6enp6eXl6enl5eXl6enp6e3t7e3t7e3t7e319fX19fX19fX19fX19fX19fXx8fX19fX19fHx+f4CAfX19fX19fHx7enp6eXl5eXZ2dHNybWdhYmNoZWhyeXpyaWRobnNycWhgXmZ9jo6Df4uUj4iIiYmFhISEhomLi4uPkpKPjouMjYqIhoaGhoaFhYWFhYWEhIWFhoaGhoaHiYqNjo2NjI2MjIuLi4mKiYqIh4eHh4iIiIiHh4iHhoF8enx+gn98ent+g4OEhYODhIOEg4ODgoKAemtSRk5cZWNhYGFgYGVsdXdybmhiXVtkb3V+f4OEh4iGiYuNjo6NjYyLh4WCg4SHioyOkJCRkZOTk5OSkYt8cW5wcHV5f4aLjpGTlZWUlJSUlZWUk5CLgnl3d3l/homMjY6Lhnpva3t7e3t6enl5eXl5eXp5eXl5eXl5eXl6ent7e3t7e3t7fX19fX19fX19fX19fX19fX19fHx8fHx8fX1+fn5/fn59fX5+fX18fHt6enp5eXh4d3d0c3BrZWJjZ2lpaGpzd3JrbHF4fHt3cWhjaICRkoeBh5COiIiJiYeGgoGEhomJjJCRk5STj42NjIiHhoaGhoWFhYWFhYSEhISEhISEhoeJio2Ojo6NjpCPjo6MiomJiYqHh4iIiYiIiIiIiIeGgX59f4CBgH18foGDg4OEhIOCg4ODg4OCgn51ZVlYYGVnZWJhYmVlY2RmbGxoZF5ZVU9VXV5mcoCGiIiJi42Ojo2MjImGhIKDhImLjY+QkZKTk5OTk5OQhXdxc3J1eX2Ah42PkZOVlZSUlJSVlZSSj4d8dnd3eoCHioyOjYd8cm1re3t6enl5eXl5eXp6eHh3d3h4eXl4eHp6e3x8fHx8e3t9fX19fX18fH19fX19fX19fX18fHx8fHx8fn19fX19fX5+fn5+fH18e3l4eHl5eXl4d3Vyb2hjYWRqbWxnZWtycXBydXuAgH97cm1xgpCUioODioyIhoiIh4aEgoOFh4eLjZCSlJSSj4+MiYaGhYaGh4eGhoWFhISDg4SEg4OEhoiKjo2NjY6OkJCRkY+Oi4uIiIeIhoeIiImJiIiIh4WCf3+CgoOCgICBg4OCgoF/fnt+gIKAgIKCfXdxc318dm5pZGNna2plYWNkZmVhWFNPTlRTT1FkeYSFiIqLjY6OjYyJhoKDhISHioyNj5CRk5KTk5KTk42CdXR0dHl8foKKjpGSlJSUlJSVlZWVlJGPh3x3eHh7g4eJjYyJgHRtbW56enl5eHh5eXl5eXl4d3l5eXl5eXl5enp6e3x8fHx9fX19fX19fX5+fn5+fn19fn59fXx8fHx8fHx+fX1+fn5+fn5+fn58fXx7eXp6enp6enh3dnRva2ZjaG5ycm9qa3Fxb21weX+BgoB6dHaCkJmShH+Gi4mIiIiHhoWEgoOFhYeKjY+SlJKSkI2JhYSFhYWHh4eHhYWEhIODhISDg4SGhoiIioyNjo6QkpKTkZCOjYqIhYWEhYaIiYmIiIiHhIODg4SEg4B5cnJ3fICAfHRwb3J3e3t7fHx/f4CBg393b2djZGhwb2pkYmBfWlNLR0ZGQEtKTFdlcn6GiYuMjY2MiYaDgoGDhYeLjY+QkZGTkpOTkpOSiXx0c3N0eX1/goqPkZKUlJSUlJWVlZWUkYuCeXZ5eX2Fi42LiIJ4cG1wc3l5eXl3d3d3eHh3eXh4eXl6enp6eHl6ent7fHx8fH19fX19fX5+fX19fXx8fHx7e319fHx8fHx8fX1+fn9/f39/fXx/fXx7e3t7fHx8fHp4eHd2c25qZ2ZqcXR1cm5rbW5uaWhyfYKCf3x3eIOQl5OFfYKIiYmJiYmIhYSDg4WGhIeJipCSkZCOjYZ9f4OFhYaGh4eHh4aGhIOCgoODhISEhYeIioyPjpCRkpGSk5ORjYqHhoSBg4eIiIiIh4aGhoWFh4R6cGpnZ2dqcHV1cW5qam5wc3Fwc3h8gYOBfXNqYmJhZG5wbGViXFlUTEA6Njg9RUNASFVmdYCGiYqLi4qJhICCg4WHioyNkJGSkpKSk5OTlI6EdnFydHZ7fn6DipCRk5SUlJSUlJSVlZOSioF3dnl5f4aMjYqBdm9ucXV2eHh3d3d3d3d4eHd5eHh5eXl5eXl4eXp6enp6enx8fHx9fX19fn59fX19fHx8fHt7fX18fHx8fHx9fX5+f39/f399fHx8e3t7e3t8fHx8enh4d3VybmplZWhvdHV0cGtqampkY216gIGAenZ2gI2Vkoh9fIKGiImJiYiHhYWHiYeGhoaIi46NjouDcmNufYKEhYWGhoWFhoaEg4KCg4ODg4OEhoeIiYqLjo+QkZGSlJOQjouJhnx2eX+EhYeHhoaGhIWBdmxpaWdlZmdpbnR1cm1oY2RnaGdpc3yAgYF/dWtnY2FianJxamNdWlVPSUI8PkdNTlJXUE1jcX2GiYuLiYaCgIGDhomLjY+QkZKSkpKUlJSSi351c3R2eH1+foKNkJGTlJSUlJSUlJWVko6IfXd4eXuBh4uLhHtxbW50eXx3d3Z2d3d3d3d3d3d3d3l5eHh5eXp6enp6eXp6e3t8fH19fX19fX19fX19e3t7e3t8fH19e3t9fX19fX1/f39/fnx6enl5eXx8fHx7e3t7e3l4dnNwa2RjZW5zd3h1cGxramdjand/gH95dHWBjJKTi4J+foSIiIiJiYeHiI2Ni4eFhYaIiomKhHZmWFlzfoKEhIOEhYWGhYOBgoGCgoKCg4SFhYeIiIqNjpCRkZGTk5GQjo2IgHNydnyDh4aHhoiFgnlxb3BwbGppamptdHZ2bmllYmBfYGZzfYOEhIJ4bWhlYmNtenpya2RgXVlWWlxaWVlUWV9ILEBfdISLioiFgH+Ag4SHio6Pj4+QkpKRkpSUlJKIeXBwcnV6fH1+hI2QkZKTlJSUlJOVlZWSjYV8d3h5fIKIioh9dG9vbnV9f3V1dnZ3d3d3d3d3d3d3d3d4eHl5enp6enp4eXl7e3x8fX19fX19fHx8fHx9fX18fHt7e3t9fX19fX2AgIGBf39+end2dXV4e3t7fHt7e3t7e3p2c29sZmNiaG5yd3Z0cGtqZ2NldH1+eHZzdoGMkpOOh399gYaHh4mJiYmLj5GRjIiCfn17fHp1amFUTlt5gISEg4SFhYWDg4GBgIGBgoKCg4ODhYaHiY2Oj5GRkY+Pj5CQjoqDeHFzc3l/gYKFhoR+d3VzdHZ3dXBua2xzd3d2cm5qZmZma3Z/goODg31ybGZiZnN6eHNrZWRgXl1eY2ZlX15fWT0sMUFUaXyEhoOBgYGEhYmMjo+Pj5CSkpKUlZWUkYR4cXFydXp8fX6EjZCRkpOUlJSUk5WVlZCMg3l2eXp+g4iKg3hxcHF1fIGCdHR2dnd3d3d2dnh4d3d2dnd3eXl6enp6enp5eXp7fHx8fHt8fXt9fH19fX19fXx8fHx8fH19fX19fn5/gH5+fn17d3Nxc3Z6fH58fXx8e3p7eXl2cm1nYmNqb3N1dnRyb2xqZGFpcXJvcHN2g42SkpCKgn1/hYeIiIiIio6TlJSSi4N5b2lucWxmYFRLTGN7goSEhISFg4ODgoF/f3+BgYGCgoOEhoeIi4yMjouKiYmHh4iIiYR2bm5ydXl8foCCgHx5eHR1fYKAdnBub3F1dnV1dHFwbm5xdn6Cg4ODe3JsZF9jcHd3dG9pY2NiYmNnamxrZFtNOjhGT1pwg4iIiI2Li4iIjY6Oj4+PkJKSkpOVlZSPgHJvb292en59gIePkpGSk5SUlJSUlJWTkImBend4eX+Gi4V6dHBxcniCh4R2dnZ2dnZ3d3h4eHh3d3h4eXl5eXp6enp6enp6e3x7e3x8fn59fH18fX18e3x8fX18fHx8fX19fX1+fn+AgYCAfHp3c3Fxc3d7fH5+fn58e3p5eHZybWVjZm5xdnh4d3ZwbWtmX2JpaWltcniDjZKSj4uFf3+Fh4iIh4iLkJaWl5OOh31uZ2draWReVk9HTWx8hYWFhIWFhYSDgoGBgYGBf4GBgoOEh4iIh4aGhYWDhISDhIWDgnt0cXJ1eXp5eXp5d3l4e4CChYN6cW9ydnl4d3d3dnNxcXR6f4GDg4N9c21mYmh0e3t1cWpoaGdlZGRjY2JeVEQ6P1h3h5GRj4yJhIGCg4eLjo2Pj4+QkpKSk5OTlI9+cnFvb3Z8f32AiZCSkZKTlJSUlJSUlZOPiH95eXl6gIaFfXVyc3V3f4iJg3V1dnZ1dXV2d3d4eHh4eHh5eXl5eXl5enx8fHx7fHx8fn1+fnx8fXx8fHx7e3t7e3t7fHx8fHx8fH1/gIGBgIB/fnt3cnFxdHl9foB/fHt3dnR0cW9pZWZqcHV2eHl4dnRxb2tnaGptbG9zeoWQkpGQj4qBf4SHiIiIio2UmJmXk5KLg3VsaWhoY1tSTkhFUHWBhYWFhYWEhYODgoGAgICAgICBg4SGh4aGiIaFhYSEhYaEgoODgXp2cnV4enl6e3l5enh8gYWHgnpzcHN6fHp5d3d4dnNzd32AgoOFg3x0a2Vkbnh8eXRxbWxsaGJiY2JfYWBUS0hQaYaTmJmWiH94dXh4d3qFjI+Pj5CRkZKTk5SUjXtzcG9xeH5/foGLkJOSk5SUlJSUlZWVk4+Ffnt6eXuBg392cnF1dnqDjImDdXV2dnV1dXZ3d3h4eHh4eHd3eXl5eXl6e3t7e3t8fHx9fHx8fHx9fHt8e3t7e3t7e3t7e3x8fHx+f3+AgYGAgH9+e3dycXByeHt8e3Z0b2tpZ2hpaGZlaW5zdnd2eHh5eHVycHJ0dXdxbnF4go2RkpSSjIR/hIeIiIqMkZWZmpmUk5CKgHZuaGRiXldQS0NDWHmBhoWFhYSFg4OCg4GBgYGBgYKEhYWGh4eHh4eGhYWGhYSEhIKBgX13dHd5eXt7fHx7en1/g4WCeXNxdn1+fXx6enl4dXZ6fYGCg4SBeXFrZWZvd3lzbmtsbW1qZWJjZmNiYVpTUFhwi5mfno2Aenp3dHJubHaHkJCPkJGRkpOTlJSIeHFwcHJ5fn98gIuQk5KTlJSUlJSVlZSRi4R8enp5e39/eXRyc3d7gYqLhoB1dXV1dXV1dnd3d3h4eHd3eHh4eHh4eXl6enl5ent7ent7e3t7e3x6e3t6fHx8e3t7e3x8e31+fn1+fn9/f35+f398eXRubm92e3p3cWlkYF9eXF1gY2hudHV4eHh4eXt4d3NwdHl8fHNvc3iAjJOUlJKOhYCCiIqKio2PlJmamZeUkIyFf3VuamZhW1NMR0BEYnuEhYSEhIODg4OCgoODgoOChISGhoaGhoWGhoaGh4aHh4WFhISDg3x2dXh5enp+fHt9f39/gX53cHB2gIKCgYB/fHp3d3l+gYODg391b2tlaHR8enRuaWhqam1nZGVmZGFiX1lYX3SKmqCfi4GBgXl1cWxmY3KJj5KRkZGSk5SUk4h4b3Bwcnl9fX2DjJGUlJSUlJSUlJWVk4+Kg3t5enh7fXp0cnN2eICEjImBf3R0dXV1dXV2d3d3eHh4d3d3d3h4eHh5eXp6eXl5enp5e3t7e3t7fHp7e3p8fHx7e3t7fHx7fX5+fX5+f39/gIB/f358dnFub3J4d3NqZWFjZWJfXl9lbHJ2eHh4eHh5e3l3dHFzeXx7cm5ydoCNkpSUlZOMhYSHiYyMkJKWl5mYlpKRjoqHgHx4cWhfWVFHQDxHaHqDhIKCg4ODg4ODhIWFhIODhYaGh4eHh4eHiIqJiYmJiIaEhIGCgnx5eXt7e358e32AgH16eHJwcXiBg4OEhIOAfnp4en6Bg4ODfnRvaWNodHx6dWxoZ2lta2hoaWhmZGJfX19kc4eVnJqQioWBeXBoZGJeYnWIkJGRkZKTlJSQhXdxcnN1e399fYSOkZSUlJSUlJSUlZWTj4qAe3t6eHh4dnFzdXl/houJhoF/dHR1dXV1dXZ4eHl5eXl3d3h4eHh5eXl5enp6enp6e3x7e3t7e3t7e3t7e3t7e3t7fHx8fHx8fn59fn+Af39/f39/f356dHFwcHR1b2ZkaG1wbWZkZm5zdnl5eHh5eXp6eXh0c3R4fHpyb3F1e4eNkZSUlpGNh4aIi46QkpSVl5WTkY+LiYiFgn10amFaV01FP0NScHyBg4KBg4ODgoOFhoaGhIOEh4mJioiIiImMjoyLioiHh4aFgoKCfnt8fHx8f358foCAfHl1cnBxeoGEhIODgoKBfnx+gIGDhYR8c21nY2p1fXx3cGxoa2xrbW5ua2dlY2FgYmRwfo2WlY+JhYJ4bmReXVxbZHqOkpGRkpOUlI1/dXJzcnR8f35+hpCSlJSUlJSUk5WWlZOPhX17fX14dXVzc3V4fIKKiYeFgoB2dnZ2dXV1dnd3eHh3d3d3eHh4eHl5eXl6enp6e3t7fHt7e3t7e3t7e3t7e3t7e3t9fXx8fHx9fX+Af4B/f39/f3+AgX11cW1sb3FuaGltdXp5cmtpbnV3eXl4eHl5eXl7eXZ0dHd6eXNwcXJ3gYiMj5KWl5ONioyNkJGTk5SVlJKQjYqIh4eGgXlwZ15ZVk9JREZUcoCDg4GDg4ODg4WGiIiHhYeJiomLiYmLjY+OjIqJh4aFhYWCgoN/fHx8fHx+fXx+goF/fHVxcHN+hIaGhYSCgoKCgoKBgoSGg3pybGNkbHh9fHh0cGxra25vb29ta2toZWRkZmxxfYiMiYWCgX11amJfYF5caYGPkZGSk5SUj4FzcG9udHx/fn6Gj5GUlJSUlJSTlZOVko6Ffnx+fnhzcXFydHiAiIqKh4WBf3N0dXV0dXV2dXV2d3d3eHh5eXl5eHh5eXl5enp7e3t7enp7e3t7fHx7e3t7e3t7e3x8fHx8fH19fH9/f4CAf39/f3+BgH50bWlrbGlnZ3J6fHl3dHJ1enp5eHl5eXl6enp6eXh1dXh4dXFxcneAhYeNkZeXk5CNjY6PkZKTlJORkI6MiYeGhYSDgHpyZVpYWVJOSUxcd4KEgoKCg4SChIWIi4qJiYmJi4uLjZCQkJCOjIqGhoWEhoODg4F9fHx8fH18fX+Dg4B7dHFzc32FhoeIhoWDg4OFhYaHhoaCd3BsZ2hye358eHh1cG9tbG1wbm1vcG5qaGlsbW1zfIOEhIB+eHJoX2BiYmFhc4ySkZOUlJOLfHJvcXF2foB/fYWPk5WVlZWVlZOVlZWSi4N9e359eHFvc3N1fIKJioiHhoF+c3R1dXZ2dnZ2dnd4eXl4eHl5eXl4eHl5eXl5eXp6enp6ent7enp7e3t7e3t7e3t7fHx8fH5+fX1+fn9/gIB/f4CAf4GAfnlva2tnY2Flb3d9fHt6enp7e3p5eXl6enp6enp6eXZ2eHl0cG5xd32ChY2Vl5eTkI2NjI6QkZOUk5GPjYuIhoaFhIODg39yX1VUV1dUUltneYGDg4KBgYCDhoyPjo2LiouMjo6PkpSSkI+Lh4SFhISEhISEg39+fn9/fXx7f4SEgHt1cnF0fYKFhoeHh4WDg4SEhoeGhn1ybWlmanN9fHl4eHZ0cG9ubnJzcnFwcXBucHN0dHd4fIB9eXp3b2VgX2JkYmBsgpGSk5SUk4t8cm9vb3d/f359hZGUlZWVlZWVk5WUlJGKg319fnp1cW9xdXmAhoiIh4eGgX5yc3R0dXV3d3d3dnh5eXd3eHh4eHd3eHh4eXl5enp6enp6enp6enp6fHx7e3t7e3t7e3t9fn5+fn5+f39+fn5+f39+gIF/fHdxbGdiXl9pc3p+fn59fHt7e3l5eXt7enp7e3t5d3Z2d3Vyb3N8f4KIkJaVlJOQjo2NjY6RkpSUko+MiYiFhIWEhISGh4N5ZldWWlxcWV9rfIGCgX9/gYOGjI6OjYuLi42PkI+SlJOPi4iGhYWEg4WFhYWFg35+fX58enp/hISAfXZxcHd/g4aHh4iIiISBgoKFhYWCeW5tamZsd319e3l3d3hzcXBwc3RycHFycXBxdXh4dHBzdXVzc29qY15eYmVnZml3iY+QkZSSiXpycXBweH9/fnyGkJOVlZWVlZWVlZWTkYuCfn5+dnNub3J0e4SIiIiIiYaCf29xdHR0dXZ3d3d2eHd3d3d4eHh4d3d4eHd5eXl6enp6enp6ent6enp7e3t7e3t7e319e31+fn5+fn5/f35+f3+AgIB/f4CAfnlya2ZhXmRwen5+fn18enp6e3p6e3t6ent7e3l5d3d4eXl5fYCDhoqNkJSWlJGOjYyMjpGSlJSSjouJiIeGhISEhIaHhoZ9cmNaW15fYGZyfYF/f4CBhIaMj5COjY2PkJCQkJGSj4uIiIiJiIeHiIeFhYWDgYGAf317en+EhIF+d3Fwdn6EhYaHiIiIhYOCgoODg3xxbGxqaHB5f3x5eHl5enh2dHF0dnRubWxrampucHBubGxsbW1ub2xpYVxdY2doaG99hYqLjYuEeHFwcHB4f39+foeRlZWVlZWVlZWVlZOPh39+f3t0cG5vc3eAhoiIiIiJhoJ/b3Fyc3N2d3Z3d3l5eXl5eXh4eHh4eHl5eXl6enp6enp5eXl5eXp6eXp6eXl7e3x8fX18fHx9fn5/f39/fn5+foCAgICAgICAfnhwa2ZkaHB6fX59fXt5ent7e3t7fHx7e3t7e3p4eHd7fH6BhIWHhYaMkpaUkYyLiomMj4+RkI+LiIeFhYWDg4KEhYaFhYOCd2xeWF1ia3R7f4B/gYOGhouNj4+Pj5CPkpGRkY6LiIeIiYuMjYqIhoaFg4OCgYF+e3l6foGDgnpybGttcnt/hIWHh4eHhYSBgH98c21rbWtpa29xdnl6e319fX18eHl4dW1mX11dXV9laGdmZWdqbXBta2dkYF9haGlqbXN5fICDg31wcHBvcXh+f31+iZKVlZWVlZWVlZWVk4yDfn5+eXJvcHF0fIOHh4iJiomGgn9ub3BycnV3dnh4eXl5eXl5eHh4eHh4eHh4eHl5enp6enp6e3t5enp5eXl5eXt7fHx9fXx8fH1+fn5+fn5+fn5+gIB/f4CAgIB/e3p1cXByeH5/fn18e3p7e3t7e3t7e3t7e3t7enh4eXyAgoGBgoJ/foSMkpORjIiGhYSFhoeHiIeGg4KCgoKChIWGhYaGh4WEf3dqYWBreX19gIKDhYaHioyPj4+Pj46NjYyKioeJiYqMjY+PjYqHhYWDg4OCgX57eXp+g4J8cWljYWNkaHR+hIaGhoeFhYKAf3ZsamtqaWVobGtqbG9yd3l9gH15dnJsZVxWVFRUVltkaGptbnBwcW5taWVhYGNmaGlpZ2hscXZ2cm1sbG1veX+Afn+KkpWVlZWVlZWVlZWTi4J+f312cXBxc3Z9hIaHiImKiYaCf21tb3BxdHR1dnd3eXl5eXl5eXd3eHh4eHd3eHh5eXp6eXl5eXt7e3t7e3t7fHx7e3x8fX19fX19fX18fH19fn5+fn5+f39/f4CAfn58fHx9fXx9fHx8e3p8fH19fHt7fHx8fHx8fHl6fICFhIJ/fXt5f4WNkpGMiIWEg4ODg4WGg4KCgYKCgoSEhoWFhoaGhoaDgXx5e319fn+BhIWHhoiKjY+Pj4+Qjo2MjIuKiouLi4yOj5COiYeFhYOCgoKAf3p5eX6BfnRpY2JjYmFia3aBhoaHh4eHhYF9cmhnaGlpZWpsbGdlY2JlaXB2dnJtaGNeV1JPUFNZX2x2e3p6enh4c3BrZWRiY2RkZWZlYmJiZmhoaGhoa253foF9gIyUlZWVlZWVlZWVlZGKgX9/e3NxcXN1eYGEhoeJiYqKh4OAbW1vcHByc3R2d3d5eXl5eXl5d3d4eHl5eXl4eHd3eHh6ent7e3t7e3t7e3t8fHx8fHx9fX19fX19fX19fX19fX5+fn5+fn5+f3+AgH9/f4CAfn99fHx7enp6e3t8fX18fHx8fHt6e3x8fYSGhIJ8enp+gIiQkY6JhYODg4SEhIWFhIODg4OEhYaFhYWGhoeHh4WEhYOCgH1/gYOEhYeKjI6Pj4+Pj5COjY2NjIqKioqKioyOkI2Hg4OEhoSCgoKBgX18fn97cGpqaWllYmBjbXyDhYaFhYaHg3tza2pqaGhmaGlpaWdlZWNkYmNjZGNiYF1cWVlaXmh5hIWFg4N/fXx3c3Bwb2tpa21vcG1raWdkYWNjY2NjZ3F4enl+i5SVlZWVlZWVlZWVkId9fHx4cnV1c3V7goaHh4mKi4uGgX5tbW5vcXJzdXZ3eXl5eXl5eXl4eHh5e3t5eXl5enp7e3t7enp7e3p6enp6enx8fHx8fHx8fHx8fH19fX19fX19fn59fXt7fXt9fX1+f39/f318fX18e3p6fHx7e3t7fHx8fH19fHx9fXt8gYWGhH58fHx9gYqPjoyHhISEhYSFhYeGhYWFhISGh4aGhoaHiYmHhYSCgX57fn+Cg4SGiIqMjY+Pj5CRj4+OjY6MiomJiYuLi4yOioR+gISFg4ODhIOCgoB/fnlzcnFwbmxoYWFjcHx8e3p/gYWCeG5qbGtnZmhqaWppaGdnZWJiYmJhYmNjZWZlZGl2hI6SjIeCgIGBfnt4dnZ2dG9vdHl+fXt5dG5oZGVkZGVla29ydX+LlZWWlpaWlZWVlZSOhH16endyc3N1eHuChoeGh4qMi4eDf25ubm9wcXJzdnd5eXl5eXl5eXh4eHl5eXl5eXl6ent7e3t8fHx8e3t7e3x8fHx8fHx8fHx7e3t7fHx8fH19fX18fH19fX19e3x8fX5/f35+fXx9fXx7enp8fHt7fHx8fHx8fHx8fH19fn9/g4WGg4B+fHp9gouOjYqHhYWGhoeHiYeHhoaFhYeGhISEhoeJiYeFhIJ+fH6AgoSEh4iKjY6Pj4+QkJCQj4+Ojo2Ni4uLjIyMjI2Ig3t9goWDg4OCf4KDgX14dHZ4d3RzdG9lYF9mbGloaW1ze3t2b21ubWtnZ2ZlZmdlY2JjYmRkZmRiYWduc3Z7gpCYnJyRhoOBgH9/fX18f4CAeXd6f4WHiIaEfXVta2lnZWVmamxxe4iQlJWVlJSVlZWVlI2CfHt5dHJzc3V5foWHhX5+houLh4GBbm9ub3BxcnN3eHp6eXl5eXl5eXl6enp6eXl5eXp6e3t8fHx8e3p7e3t7fHx8fHx8e3t7e3t7e3t7fHx8fHx8fH19fX17e3t7fHx8fHx9fX17e319fHx8fHx8fHx8fHx8e3t8fHx8fn5/gH9+hIaEg4B+e3yAhouLi4mGhYWHiYqIhoaGhoSEhYWFhYWGh4mJiIaGgX1+gYODhYWIioyOj4+Ojo6PkJGSkZGQj4+NjYyMjIuMjIuHf3uAgoOEhIOBgIGAenFwdHZycHR5dm5mYWFkZWRgYmZscW9sbW5uamtpaWRjZGRkZGNjZGRmaGhlZG13fIKNl5qVj4iDhYeDf399foaOj4mAgH+BhoqLioqEfXZycGtoZWZoaWlzgYmQlZSTlJWVlZWUi396enZzc3NzdnqBhYiGe3qGioyGgYFsbm5vb3Fyc3Z3d3h5eXl5eXl6enp6enp5eXl5enp8fH5+fn59e3t7e3t8fHx8fHx7e3t7enp6ent8fHx8fHx8e3t7e3t7e3t6enx8fH18fHt7e3t8fHx8fHx8fHx8fX18fH19fHx+fn+BgH+AhIWDgYCAf36ChoeIh4aFhIWIioiGhYSEhISEhYWFhYaHiYmIhoOAgIGBg4SFhomLjI6PjYqIjI6Qk5OUk5KRkI+OjY2Li4yMi4mBe4CCg4SEg4F/f3tzbm9xcm9wdHh7dWxiYWRkZWVmZmVnaWtsa2tscHNzb2lnZmRkZGRlZWVnbXVuX1ljd4qTioWBgISFhIJ/f4SQmp+YkomEg4KFiouKioiDgn15dG5rampnZ255goqPkZOUlZWVlZKIe3l4dXNzcnN3fIKHh4J9gIiMjIaBgW5ubm5ucHFydnh5eHp6eXl6ent7e3t7e3t7fHx9fX19fn5/fXx8fHx8fHx8e3t7e3t7e3t6ent7enx9fXx7fHx8fHx7e3t6enp7e3t9fXt7fX17e3t7fHx8fHx8fX1+fn9/fX19fX1+gIKBgYCDhIODgoOCgYCAgISEhIWCgIKFhoaEhIWEhYWEhISEh4eIiIWCgYCDhIKDg4SHiYyOj46LiYiKjY6QkpOUlZSRkI+OjYyMi42OjIaBgIOEhYSAfH99dW5rbG9vb3J2eXl1bGVlaGlqamVjY2NlZ2ZkZWpudnVwamZlZmVlYmJjYmVqamNXSVZ1ipCEgYGGh4KBgYCLmKCfn56ak4uGhYWIiIaGh4aAf399enZzbmxoanJ7gIeNkZOVlZaVkIV7eHRzdHRzdXp/hoeGfn2Fio6Mh4ODbm5ubm5wcXJ0dnd5eXl5eXp6e3t7e3t7e3t8fH19fX1+fn99fHx8fHx8fHx8fH19fHx7e3t7e3t6fHt7ent7e3t7e3p5eXp6ent7e3p6e3t7e3x8fHx8fHt7e3t8fHx8fX19fX19fX6AgYKDgYCChIWFhISEgoKChISDhISBgIGEhISEhISFhYSEhISEhIOBgoKDg4OEg4OEhoiLjI+PjoyLjIyMjpCSk5SVlJOSkI+NjY2Pj5CPjIaDg4SGhIB7enhybGtsbWxucXZ5eXNtaGdpa21wb25qaWhnZmVkZmhqa2tnZ2dmZWNhX11dW11dWlRSWGV/jYSBg4WLiIGJmKCiop+fnp6clI+JhYeHh4eJiYSBf4B/e3l2cW1pb3N3fYSKjpOVlJSMf3d2dHN0dHN2e4KHiIF6gYmMjoyIhIRvb25ubnBxc3Z2d3h5eXl5enp6ent7fHx8fHx8fH1+fn5+fn5+fnx7e3t7e3x8fX18fHx8e3x8e3t7fHx7e3t7e3t7e3p6enp6enp6enp6ent7e3t8fHx8fHp7e3x8fHx+fXx8fX19foCDg4SDgX+ChYeGhoaDg4SFg4SFiIiEg4SEg4SFhYSDhISEhIWDgoGAg4ODhYWEhYaJioyPkI+PkI6Njo+QkZKUlJSUk5KQkI+Pj5CSkJCPjYiFhIWFgXdyb2xucHBvbG1tdHl7c25raGhscHB1d3Vwb2xoZmNjY2JjZ2hpamloaGllXVpYWVlYWV9hZXaHh4SHiImIi5egoqCfn5+fn56blpGMjIuJh4mIhoOBg4OAe3p3cGxwcnR5foaMkJOVkot+d3V0c3Nzc3iBh4iDfH2Gio6OjIeFg29vbm5ucHFzdnZ3eHl5eXl6enp6e3t7e3t7fHx9f35+fn5+fn5+fHt7e3t7fHx8fHx8fHx7fHx7e3t7e3p6enp6enp6enp6enp6enp6enp6enp7e3t7e3t7eXp6e3t8fH5+fX19fX1+gIOEhYOCgICCh4iIh4SCg4SFhoWHh4eGhISDhIWFhYSEhISEg4KCgoODhYWEhYeIiYyOj5GQkJCPj4+QkZKSkpSUlZWUk5KRkZCRk5KQj4+PjoqGhISCe3Nub3BxcG1paWlvd3hybWloaW5xdHZ1dHNxb2tlYmFhYWNkZ2xvcHFyc3JqZWRkYmBhZ2lsdoOLjI6OjImTnaKfnZ2eoKCenZ6dloyIhIWGiIiIhX6Ag4N/f353bnJ2dHR2fIOLkZORin11c3Nxc3N2eoCFhn98g4iMjY6Oi4aEcHBvb25wcXR2dnd4eHl4eHl5eXl7e3t7fHt9fX9/fn5/f39/fn18fHx9fHt7e319fHx9fX19enp6eXl5eXl4eHh4enp6enp6eXl6enp6enp6enl5ent6ent7e3t6fHx8fX1+fn5+fX+Ag4WHh4aCgoKEh4iHg4KDgoWGhoeHhoaEg4OEhYWGhoSDhISDgoOFhYWDhYaIi4yOj5CSkJGSkpKRkJGRkZKSk5SVlZWVlZWSkpKSkpCOjo+Pj4qGhIF8c3FydHNwbmloZ255eHJrZ2NncHNzc3RzcW9tamVkYmJhY2VobXFyc3Z0dXRyb3BtbGxvbnF6hI6Pj4+NjZihpKKhoKCgoJ+gn5mKgYKDhomJiIeFend9f36Afnp0eXx2dXJ2fISKj5CJenR1dHR0dHh8goOBfIGIjo6Pj4+LhoVwcHBwbnBxdHZ2d3h4eXl5eXl6ent7e3t7fn5+f39/f35+fn5+fX18fH18e3p6fX18fH19fX18fHp5eXl5eXh4eHh3d3h4eXl5eXp6enp6enp6enp6e3t7e3t7e3p8fHx/f39/fn59f3+ChYeHhoWFg4ODhIWFhIKBg4aGhYeGhYSDg4SFhYSEhIOEhIGBhIWFhYWGiIuNj5GSkpKQkJGSkY+PkJGRkZGSk5WVlZWVlpSUlZWSkJCQkJCRj4qGgXpxc3R1dXNxbmhlanN1b2llY2xydXZ1dHNvbWtmZGNiZGVna21vcXN0d3Z0cnFzdnRzc3V3dniAipCSkI+TnKSmpKKhoaGgoJ+WhoGAgIKGiYqJhoJ2bnJ7foCAe3qBhYJ5dnV1fYWKjIV5c3R1dXV2fICFgHyBhouOjo6QkoyGhXBwb29ucnN1d3d3d3d3eHp6enp6ent9fX5/fn5/f39/fn5+fn9/fnx9fXx8fHx8fHx8fX19fX17enl5eXl3eXl4eHh4eHh4eHl5enp5eXl5enx7e3t7e3t8fHt7e3t8fH1+fn59fX5+gIKFiIiIh4eGhYSDg4SEg4OEhoaGhoaGhYWEhISEhIODhIKDg4WHhoaGhoiJjJCQkJGQj4+Pj5CQkJCRkZGQkJGSk5OVlZaWlpWVlZKQj5CQkJGQj4uFe3RzeXh1c3VwaGZrcXFsZ2RlbnR3eHZ1cW9ramdlZGVmaGxxcXJycnV1cXBucHd7e3h2dnZzcHJ9ipGQj5afpaWlo6KioqGhmYeBgICAgISJiYqJhHZqaXV+f399fIOKiYB5d3h6f4aJgnp1dnZ2dXh8gIB8foeKjo6PjpGUjYWDcHBwcHFxc3V1dXd3d3d3eHl5enp6e3x8fX59fX9/f39/f39/gH9/fH19fHx8fHx8fHx9fX19e3p6eXl5eXd3d3h4eHh4eHh4eXl5eXl5eXl5ent7e3t7e3x8e3t7e3x8fX5+fn9/fn5/gYSIiIiIiIiIhoWDgoKDhYeJiYeGhoaFhYSEhISEg4KDgoOEhoeGh4eIiYyPkJCPkI+Ojo+PkJCOjo+QkJCQkZKTk5WVlpaWlpaVk5GQkZGRkpGQj4uCe3h5eHh3d3JsanB0cm1qZGdxdnd6endycGlpaWZlZWludnl3dXV1c3JtaGdrcnl7dnN0dHBtbXSDjo+RmaKlpaWjoqKiop2MgYCAgICAgIWJiomGf3FnbXuAgH17hIyPiIB4c3V7gYV/dnR3dXV2eXl7eoCGioyMjo+QkpGLhIJwcHFxcHJxdHR1eHd4eHZ3eHh7e3t8fH19fX19fX5+fn9/gIB/f398fX1+fnx8e3t8fH19fX17e3t7enp5d3h4d3d2dnd3d3l5eXh4eXl6ent7e3t8fHx8e3t8fH19fX19fX5+fn5/f36AhYiJiYmLjY2LiIWCgIGEiIqKh4eHh4aGhoSCg4ODg4OEhYeGiIiJiYmKjpCPj42Oj46Oj5GRkI+NjY6Qj5GRkZKTlJSWlpaWlZWUk5OTk5OTk5KQkI6GgHp2d3l6dm9ucHNxbWhmbHZ4dXh4dHFtamlpZ2dmbHF8gX14eHVyb25pZGJsdXh1dHJycm5rcYCLkJSZoqWmpaSko6Cgk4OAgICAgIB/hYyMiIeBc2lreYCAfnqCj5OMh4B5eHt/gHx1dnd1dnZ4d3qBhouOjY2OjpKVj4d+eHFxcXFyc3R0dHR1dHZ2dnd4eHl5ent8fX19fX19fX19fn5+fn5+fn59fXx8fHx9fX19fX19fXt7e3t6enl3eHh4eHh4eHh3eXl5eHh5eXp6enp7e3x8fHx8fHx8fX19fX19fn5+fn9/fX+ChYmKiouMjIyKh4WDgoGDhYeHh4iIiIiHhoODg4ODhIaGiImKi4yOjY+Pj4+Oi4yOjo+QkZKRkI+PjpCRkpGSk5OUlJaWlpaVlZaUlJSUlJSUk5GRj46LhH99fn13cnBxc3BsaGZwenp4eXh1b2pqbGxsbGtscHd6e3l2dXJycGtmZWx0dHN0c3Nzb29yfIaOlJujpqalpKWkopuIgoCAgICAgICGjo6GgnxxZ2p1foB+eoCNk4+Kg357fYB/eHN1dnV2d3l7gYaKi42Ojo2Mi4qDeXFucnJxcnNzdHRzdHV1d3d3eHl5enp6e3x8fHx9fXx8fX5+fn5+fX19fX19fHx7e319fX1+fn19e3t8ent7eXl4eHl5enp6enl4eXl4eHh4eXl5eXp6e3t7e3p7e3t7fH19fX19fn5+f39+foCGi4yMjY6OjIqJh4WEhYOEhIWIiImKioqIh4eFg4OFhoeKio2PkZCPkZCPjo6MjI6OkJGSk5KSkY+PkJKSk5OTk5OUlJWWlpaWlpWVlZWVlZWVlZOTkpKQjYiGgHZxcXJyb2xoZ3N/fnp7enZybW1tcG9vb25rbW9yc3R4dHNzb2xrbHBzcXR1dHJyc3N5hY6Um6KmpqakpKWij4SBgICAgICAg4SLjIWAenJtbnd9gX16fYqTj4uGgX2Af314dXZ2d3d4f4KHiYmEhYmJh4F5dG1pZ2txcXFyc3N0dHR1dXZ3d3d4eXl5eXh5enp6enp6e3t7e3t7e3t9fX19fX18fH19fn5+fn5+fX18fH18e3t6enl5eXl6enp6enl5eXh4eHh5eXp6enp7e3t7ent7e3t8fX19fX1+fn5/f359f4OKjIyNj4+OjYqJiYiGhYODhIaHiIuLioiIhoWEhYaHh4iLj5OTkZGRkI2MjIyMjo+RkpOTkpKRj5CSkpKTlJSTk5SUlZaWlpaWlZWVlZWVlZWVlJSTk5STkIqBeHJycnFua2dmc4GBfX5+enVzc3N0cnJxcGxqampqa29wcXFxcXBsbG9xdHV0dXVzc3eCi5GaoqWnp6WlpJyIgoGAgICAgICAgYWGg4B6cm1udHp+fnp9iZKRj4iDgoB/fXh1dnZ2dnuCiIqHfXZ0eHdwamRiY2VqbnJyc3NycnR0dHR2dnd3d3d5eXh4d3d4eHl6eXl6enl7enp6e3x8fX1+fn19fX5+f35+fX9/f319e3l6enp6eHh4eHp6enp6enp6eXl5eXl5ent7e3x8fHx8fHx8e3x9fX19fn6AgH9/fn6Ag4iMjo+RkpGOjIuJioiGhYWEhYaGiIiHhoWCg4SGhYaFiIyRkpKRkZGPjYuLjI2Oj5GRk5SVk5KRkZKRk5OTlJSVlZSUlpaWlpaVlZSVlZWVlJSUlJSUlJOPh4B6dnV1cG5qZ2RwgISAfXx6dXR0dXV0cXN3dG9taGdmZ2ptbW1wbm1sbnJ2dHVzdHV3foWKkJihpainpaWilIWAgICAgICAgICAgYCAgX53b2xxdXp9eXuHkZKOi4WCgYF6dnV1dXV4foaKioF2bmtsaWdmZWJiZWltdXV0dHR0dHR0dHR0dXV1dXZ2d3d3d3d3d3d4eHl5eHp6ent8fHx9fXx8fH59fX5+fn59f39/fX18enp6enp6enl5enp6enl5enp5eXl5eXl6e3t7fHx8fHx8fHx7fH19fX1+fn9/f39+fn+Ch4yOj5GSkpGOi4iHhoeGhoWGhoaGhoeGg4OEhYWFgoOJjpKSkZCPj42LjIuMjY6PkZOTlJWUk5GRkpGTk5OUlJWVlpaVlZWVlZSUlJWVlZWUlJSUlJOTkYqBfHt8f4J/eHJqZnOChoJ9end1dXV0dHJvbXV+e3dwa2dlZmdnaWxsamprbXB1dnZ3eH2EiIuOlpyjpaenpqKQhICAgICAgICAgICBgIGEhIN7c3FzeXt4e4aOkIyJhoKBfnd0dXV1d3qBh4Z/eHFwb25vcXJzcnJ0eHp0dHR0dHR0dHNzdXV1dXR0dnZ3d3d3d3d3d3Z3d3d3d3l5e3x8fH19fHx8fH19fn5+fn9/f399fX17e3t6enp6enp6enl5eXl5eXp6enp6ent7e3t7e3t7e3t6e3x8fH1/f39/fn5+fn19fH+Gi5CQkZGUlJGLiIeHh4eIiIiIiIeIhYSDgoWJh4eGh4qOkI6PjY+Ojo2NjI6OkJGSlJSUlpWVk5KRkZKSlJSUlpaVlZSUlZWUlJSUk5OVlZSUlJSUk5GLg398foWIiomIhHlvdYCDgXt4dXV1d3Z0cm1obnuDgntzbmpjYGBkZmdpbGprbnBydXd6gIWJjI2UmqCjpqamn46DgYCAgICAgICBgoKBiI+UjoN5c3F2eXZ1fIKBf319foB8dnZ2dXV3eoCEgndwcnR3d3d6fH6ChYWHhHR0c3N0dHR0dHR1dXR0dHR1dXV1dXV1dXZ2d3h4eHh4eHh6e3t7e3t8fHx8fH18fX5+f39/f319fXt7e3p6enp6enp6eXl5eXl5enp6enp6e3t7e3t7e3t7e3p7fHx8fX19fX1+fn5+fX1+gIaMj5CQkJCQj4uJiYmJiYqKioqKiomDgoKEh4mJiYiKi42PjY2MjY2Mjo+Pj4+QkZOUlJWWlpeVkpGRkpKUlJSUlJSUk5OUlJOTk5KTk5OTkpKSkpORjIWBgIOIi4uLjY6Ni4eDhoaEf3l1c3R1d3ZzbWdmb3yBgX14cGRiYmFiY2VoaWttb3FzfIGEh4uMjZCXnaKlpqafjYOBgICAgICAgIOGhIOPmJuUjIJ7dHRxbmtqa2hpaWluc3RzdnZ1dXl7gIF6dHN1d3p7foOIi4yJh4SCdHRzc3JzdHR1dXV1dXV2dnV1dHRzdHV1dXd3d3Z2d3d4eHl5enp7e3t7fHx8fH19fX5+fn5+fn5+fHx7e3t6eXl5e3t7e3p6enp6e3p6e3t7e3x6e3t7e3t8e3t8fHx8fn59fX19fX1+fX+DiIyNj4+PkJCOjIqIioqKiouKiYqJhYSDhIeJi4uLiYyNj4+Qjo2JiYqMkJGQj5CRk5SWlpaWlpaUk5GRk5OUlJWUk5OSkpOTk5OTk5GRkZGRkZGRkY+KhYSFio2Ojo2Njo6NjY2Ni4mHgnx6e3l4dHFsaGVob3p/f3lzamhnY2BgYWZnZ2hpbXJ7gIWHjIyNj5SaoKSnp6GShIGBgICAgYCBg4SEhouRkI+IgXlxbGlmZWJhYV9fYmdtcHFydHV2eH5/fXZ1dnZ4foSHi46MioWCf3p0dHNzcnN0dHV1dXV1dXR0dHRzc3N0dHV0dnZ2dnZ3d3h4eXl6ent7e3t8fHx8fX19fn9/fn5+fn58fHt7e3p5e3t7e3t7enp7e3t8e3t8fHx8fHt7e3t7e3x8fHx8fHx+fn5+fX19fX1/gISJi42OjY+QkI2KioiKioqKi4qIiIaDgoOGhoeIiImLjo+QkI+PjouKjY+RkpGQkJGTk5WVlpaXl5WUk5OTk5OTk5OSkZCQkZGRkZGRkZGQkJCQkJCPi4iFiIyNj46OjY2Ojo2NjY2Mi4mIiImHhoSBfHVtamhobXR0bmtqbm9ramlpZ2dmZmdoa3J4fYKGiouMkZefo6WjnZGGg4OCgX9/fn5+fHx7eHh3dnRvb2lmZWRjY2JgXVxfYGNnbXBzdXV4ent3d3t/g4iLjI6OjYqIhYKBgHNzdHR0dHR0dXV1dXR0c3Nzc3NzdHV1dnZ2dnZ2dnZ2dnZ4eHl5eXp7e3t7e3t7fH19fn5/fn5+fX17ent7enp6ent7enp7e3p7e3t8fHt7e3x8fHt7e318fH19e3t8fH5+fn59fXx+f4KEhomLjY6Oj4+NiomJiYqKioqKioqHhYKDhIWEhYeIiYyOkJKRkJCQjIyMjpCRkpKRkZGSlJWVlZeXlpaUk5KRkZGSkpGQj4+QkJGRkJCQkJCQkJCPj46LiIiKjY6Ojo6NjY2Njo6OjoyMjIyLioqJiYqHhIF8dHBxcW9tam1yc3NxdHJuamdlZGRobXJ2fICFiImNkpyhn5eQhoB9fXx6eXl6eXh2dXR0c3FvbGhnZmVkZGNjZWZmYmFhYWRna250d3t9gYOHi4+Qj4+OjYmJiYaFg4KDcnJzc3R0dHR1dXV1dHR0dHNzc3N0dHV2dnZ2dnd3d3d4eHl5eXl5ent7e3t7e3t8fX1+fn9+fn59fX18fHx7e3t7e3t7e3x8e3x8fHx8e3t8fHx8fX17fXx8fHx7e3t7fn5+fn19fH6Bg4WIiYqMjY6PjouKiYqKioqKioqJhoOCgoSHiIeHhoeKjI2NjY2PkJCPjYyOj5CSk5OSkZKUlZWVlpaWlpWUkZCQkI6OjY2MjI6OjY2Ojo2Njo6Ojo6OjYyKiYqMjY6NjY2NjY2Ojo6Ojo6NjYuKioqKiYiIhoeGhIWCgX9+gIGCgoOCgXt3cmpnZGRmaW5yd3p9hIiMjoyGgHx5eXh6eXl6enp6e3t4eXd2dHJwbGlpZGNhY2VmaGhnZmRkZGVmaGx1goeKi46PkI+NjYuKiomHhoaFg4Rzc3Nzc3Nzc3R0dXRzc3R0c3Nyc3JzdHR2dnd3d3d3d3h4eXl6ent7e3t8fHp6enx9fX5+fn59fX19fn59fHx8fHx8fHt7fXx8fHx8fHx7e3x8fX1+fn19fX19fXx8fHx+fn5+fXx+f4KFh4mKi4yOj4+Mi4qKioqJiYqKiYeDgX+ChoqNi4eGh4mLi4yMjo+QkI6NjY6OkJKTkpGQkJKTlZWUlJaVlZWSkJCPjo2Mi4uLi4uLjIyMjIyMjIyMjIyMjIqJiouNjY2NjY2NjY2NjY2NjY6OjY2Li4mJiYiIiIiIioqJiomKjIyKiYaGhYR+dW5oZGRmaWpsb3J5fHt6eXh4eHh5eHh7fX6AgICCg4ODgX15dnVzcGxpZWFgY2dnaGpqaWdmY2NjZmt2gYmLjYyNjY6OjIuLioiIh4eFhXR0dHR1dXV1dnZ1dHR0dHRzc3JzdXV2d3d3d3d4eHh4eHh5eXl5eXl7e3x8fHx8fX19fn5+fn19fX19fXx7e3t8fHx8fX19fHx8fHx8fHx8fHx9fX5+fX19fX19fHx8fH5+fn5+fX2ChIeIioqLjI6Qj42LioqKiomJh4iGg3+Ag4aHio2OioaGh4iKi42OjpCQkI6Ojo6QkpOSkZCQkZKTlJWWlZWVlZORkI+Mi4uKiYmJiYmJioqKioqKioqKiouLiomIiouLi4uLi4uLi4uMjI2Njo6NjY2NjIyKiYiIiIiIiIqKioyPj4+Ojo6OjYmDem9pZ2doaWhoa2xub3F2dnh4eXt9gIeMkZOSkIyLjIuGfnp3d3VycG5ramllZWltb29ta2lmY2NlZGVtfIaKjI2Njo6OjIuKioqJiYeHc3N0dHV1dXV1dXV0dHR0dHNzcnR1dnd3d3d3d3h5enp6enl5enp6ent7fHx8fHx9fH5+fn9/fX19fH19fHx8fH19fX19fXx8fHx7e31+fn5+fn19fX19e3t7e3t8fHx8e3t7fHt9gIOFh4mKi4yOjpCQjYqJiYmJioqIhYN+foOGh4aIi4yMiYaGh4uNkI6Oj5CQkI6OjpCSkpOSkY+PkJGTlJSUlJSTkZCQjYyKiIeIhoeHh4eIiImJiYmIiIiIiImKiIiIiImJiYmJiYmJiYmKjY2Ojo6Ojo6MjIyKiomIiImJiYmLi4yNjo+Ojo+PjoyFe3BoamlpamxsZ2dqbW9zc3d8goySlpibm5iTkZKQiH55eHh5eXd5eXZ1b2pqbG1xcW9va2pmY2RkYmVwgImOjo+Pj46Ni4qKiomJiIh1dXV1dXV1dXV1dXR0dHR0c3N0dXZ2d3h4eHl5eHl6ent7enp6enp6e3t8fHx8fH18fn5+f39+fn18fX18fHx8fX19fX19fHx8fHx8fX5+fn5+fX19fX17e3t7e3x8fHx7e3t8fn+ChYeJiYuMjY6Ojo6MiomJiYmIh4V/fH2Bh4iIiIiJi4yMiYiIiouMjI2PkJCQj4+PkJKSk5KRj4+QkZKTlJSUk5ORkI+NjIqJiIeGhYWFhYaGh4eHh4iIiIiIiYiHh4eHiIiIiIiIiIiIiYqLi4yMjo6OjoyMjIqKiYqKiYmJiYuLioyOj5CQj4+Ni4qFe3JsaWhpbGxoZWVnaGxxdX6GjJCSkpOTlJKQkY2JhYSCg4WGi4yKhX10cHBvcXJycHBwbmpnZGRjYmZyg42Oj4+Pjo2LioqKiYmKinZ2dXV2dnV1dnZ2dXRzc3N0dHR2eHd5enp5enp7e3t7fHx7e3t7enp7e3p6e3t9fX19fn5/f39/fX98fHx8fX19fX19fX18fHx8fX1+fn5+fn18fHx8e3t7e3x8fHx8fHx8fH1/gYWIiYuLjY+Pj4+NjYyLiYmJiYeCfnt+gYWLi4qJiIqKi4yLiYiIiYmKjY+SkZGRkZKSkpKTkZGRkZGQkJGSk5OSkZGRjoyMiomIh4aEg4ODhIWGhoaGhIaIiIiIiIiHhoeHiImJiImJiYmJiYqKi42MjI2NjY2MjIuKiYmJiYmJiIqJi42Oj4+NjY2NioiEenFrZmdqbWtqZmNmZmdqbnJ2e4GFh4uLjY6NjIyMjo6Oj5CRkY+LgndwbXJ2eXl1cXBvbmpnZmZlY2l4hY2Rj42OjIuKioqKioqKdXV1dXV1dXV2dnZ1dHNzc3R0dHZ3eHp6e3p5eXp6enp8fHx8e3t6ent7e3t8fH19fX1+fn9/f39+fXx8fHx9fX19fX19fX5+fHx9fX19fX19fXx7fHx7e3x8fX18fHx8fHx8fX+ChomLjI2Oj4+Pj42MiYqJiYmGgXt6e4CEiYyMiomIiYqOjouJiIiIioyPkZGQkJGSk5OSkZKRkZGRkY+Pj5CSkpCQkJCOjIyKiYiIhoeGhISEhYaGhYWEhoeHh4eHh4aFhYWDhYeHh4eIiIiIiIiKjIuLjIyLi4yLioqJiYmJiYmIiouMjY6Pj46OjY2LioaGgnpwamlqbXFwbmZjY2NkZWhoaW1ye4CEiIqMjIyOjo6PkJGRkIyGfHJtbXR9gX15dHBubGppaGZmZ214hYyPj42Mi4qKioqKiop0dHZ1dHR0dHZ2dnVzc3Jyc3V2dnd5ent8fHx8fX19fX19fX18fHx8fX19fX19fn5+fn9/fn5+fn5+fX19fXt7fHx9fX19fX1+fn19fXx9fn5+fXx9fHx8fHx7fHx8fHx8fHt+gYWIioyNjY6QkJCQjYuKiYmIh4F5d3l+iIqKjIyKiIiIio2PjImHh4iJi42Oj5CSk5OUlJKRkpGRkZCQj4+Pj5CPj4+Pj42NjIuIh4iHhoeHhYaFhYWEhIWFhoaHh4aGhoSEgoKEh4eHiIeHh4eHiImKi4uJi4uLjIuKiYmJiYmJiYqKioqLjY2Njo6Pj4uJiIiHh31xZmZnb3Jva2ZmY2JkZmRhY2Vob3d/hYmLjY2NjY6QkZKSko2CeHBucnqDhIF5cWxrbm5saWdnaG54goqOj4+Mi4mJiYmJiXd3dnV2dnZ2dnZ1dnR0c3N0dnd3d3l6e3x8fX1+fn19fX19fX19fHx9fX19fX1+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX5+gIB9fHt9fn58fHx7e3t6ent8fHx8fHx8e36DhomLjo6Oj5CQkJCMiomJiIZ/eXh7gYaMjo2LjIuJiImLjpCNioiKi4uMjY6PkZOUlZaUkpCPj5CQj4+Pj4+Ojo6Ojo6OjY2Mi4qJiYiIiYiHhoWFhYaGhoaGhoaGhoaGhISCgoGDhIaHh4eHh4eIiIiJiYmLi4uLioqJiYmJiYmJiYmJiYqLjIyNjY2NjIuKioqKh4B1aGVobXF0cWtmYWBkaWtqZmRlanJ+homLi4yMjo+QkpGRjYd/d3Bwd4CFhYF4bmtscHFwa2hoam11g4qMjYyLiYmJiYmJd3d4eHd3d3d3d3Z2dnZ1dXR1dnd4eHp7fX5/f358fX19fXx8fX18fH19fX19fX5+fn5+fn9/fn5+fn19fHx9fX19fH1+fn5+fn5+fn19fHx9fH18e3t7enl4eXp6e319fHx9gISIi42OjpCRj4+PjY2LiYmHgnp3e4KHjI6OjIyLioiJi46Pj46KiYmJiouOkJGSlJWXmJWTkZCQj46OjpCQj4+OjI2NjYyOjo2NjY2Li4qKiYmIh4aGhYWHh4aGhoaGhoeHhYSCfoCChIaHh4iIh4iIiImJioqLi4mJiYmKiomJiIiIiIiIiYqKiouLi4uKioqKioqLiYJ3aGRma3FzcWxmZWltc3Z1cm5xdn6HioyMjIyOj5GRkZCOiYJ8dnF0e4OGhn50bWtwdHl0bWlpamx0foeKi4uKiYqKiop4eHh4d3d3d3d3dnZ3d3d3dnd5ent7e3x9fn9/f35+fn19fHx9fX19fX19fX19fn5+fn5+f39/f35+fX1+fn19fX18fX9/fn5+fn5+fX1+fn18fHt6enp5eHd4eXp7fHx8fH2AhYmLjI2OkJGPj46LioqKh395eHqBiIyMjY2MjIuLioqLjpCRj4uJiYmKjY+Rk5KUlZaXl5STkpGPjo6OkJCPj46MjIyMi4uMjY2NjY6OjIyLi4qJh4eHh4eHhoaGhoaGh4eGhYOAfoCChYaHiIiHiIiIiYmJiYmJiYmJiYiIiYmIiIiIiIiIiYiIiYmJiYqKioqKioqLioZ6bmdlZm52eHNtaGpvdn+DhYWHiYuOj4+Pj5GSkpKRkI+Mh4F3cHB4gISDgXlybGxvdnp3cGpoZ2dsdn+Fh4mJioqKinh4d3d3dXd3d3d3d3h4eHh2d3p7fH59fn5+f39/f39/fn59fX5+fXx8fH19fn5+fn9/f39+fn5+fn5+fn5+fn5/fX5+fn5+fX19fX19fX18e3t7e3l5eXh4eHd5enp7e3x8f4KGiYuMjY+QkZGRjYyLioiCeHV6f4eMjIyLjY6OjYuKiYiKjY+PjouIiImMj5GQkZOUlZWVlZWTk5CPj4+Ojo+PjoyLi4qKi42NjYyOjo+Pj4+PjoyKiomIiIaGhoaGhoaGhoeEg4F9fH6BhoaIiIiIiYmJiYmJiIiIiIiIiIiJiYiIiIiHh4eHh4eIiIiIiYmJiYmJioqKioZ+dWpjZG55fHhzbmptdn6Gi4yPj4+Pj5CRkpOTkpGPjoyJhHdwcHZ+goKAfXdycXB1eXt4cWpnZ2VocX6FiYmJiYuLeHh4eHl4eHh3d3d3eHh5eXd4ent8fn1+fn5/f39/f39+fn19fn59fHx8fX19fX19f39/f39/f39+fn5+fn5+fn18fX1+fn59fX19fX19fXx7e3h4d3d4d3d3dnh6ent7fHx/goeKjI2Oj5CPj46NjIuIhHx1dn2EiYyMjIuNjo6NjIqIh4iNj4+OjIuKi4yPkpOTk5OUlJSVlpWUkZCQkJCQj4+OjIyMioqLjIyMjY6Oj4+PkJCPjoyMiomJiIeHh4eGhoaGhoaEgn96fH+DhYiIiIiJiYmJiYmIiIiIiIiIiImJiIiIiIeHh4eHh4iIiIiHh4iIiYmIiIiIiYiFe25iYWp4fnx0bGptdH2Fio2Pj4+PkJGSk5STkY+OjImFenNwdHuBhIGAfXl4c3J1eXt2b2llY2NodYGIiYmJiYl6enp6eXh4eHh4d3d4eHl5enl5e3t8fn59f39/f3+AgH5+fX19fX19fX19fXx8fX5/f4CAf39/f39/f39+fn5+fX19fX19fX1/f39/fXx8fHt6enl4eHd1eHh3d3h5eHp7fH+EiIuMjY6OkJCQkI6Ni4Z8d3h8gYiMjY6OjIyOjo6Ni4qJiYuPkJCQjoyLjJCSk5STk5OUlJWVlZWTkJGSkpGQj46Ojo6Mi4uLiouNjY2Pj4+Ojo6Mi4qJiYiIiIiGhoWGh4eHh4aEgH17fH+ChIeHiYmJiYmJiIiIiIiJiYmJioqJiYeHhoaGhoaGhoaGhoeHh4eIiIiIiYmKioqHe2peXGZ1fHt1b29uc32FioyPkJCQk5WUlZKQjo2MioZ/d3JyeX6Eg4KAgIF8eHR2eHdyamZlYmVtfYaIiYeIiHp6enp5eHh4eHh4eHl5enp6eXp7e3x+fn1/f39/f39/gIB+fn19fX19fX19fX19fn9/f39/f39/f39+fn5+fn59fX19fX19fX5+fn58fXx8enl5eXh4d3V2dnZ2dnd4enp7foOIi4yNjo6Ojo2NjYuFfnV2eoCFioyNjIyMjIuMjY2Ni4qKjI6QkZGQjo2Nj5KTlJOTk5OTlJSUlJKRkpOSkZCPjo6Pj4+OjIyMjI2NjY+Pj46NjIqKiomIiIiHh4aGhYaHh4eHh4aDgH9+f4CDhYeJiYmJiYmIiIiIiIiIiYmIiIiIh4eGhoaGhoaHh4eHh4eHh4iIiIiJiYqKioqHfm5fXF5ncXt8dnBuc32Ei42QkpSWl5eWk5GPjYyKhoN7dXJ1e4CCgoGDh4aCend3eHhya2pnZWp3gYeIhoeHe3t5eXh4eHh5eXl5eXl6enp8fHx9fX19fX9/f39/gYF/f35+fX19fX19fn59fX9/f39/f4B+f39/foCAfn5+fn9/f39+fX19fHx8fHx8fHt6eXd4eHd1dXZ2dXV2dnh5eXt+goeKjI2NjIyMiYqMiIJ4dXl/g4eKjI2MjIuKi4yNjo6Mi4yMjZCSk5ORkI+QkZKTlJOTk5OTkpOTkZCPkJKSkZCQkI+QkZGPj42NjY2NjY6NjYyLi4mIiomHh4eGhISFhYaHhoaHhoaEgoCAgIKChoiJiYiIiIiIiIiIiIiIiIiIh4eHhoeHh4eHh4eHiIiIiIiIiIiJiYmKioqJioyKfWheWVpjdX16dXFudH2GjZCTlJeYl5aUko+PjYuIhH12cnJ1e4GBgoSHjIqAeHZ4dnNvbWllZnF7hYaHhoZ7e3l5eHh4eHl5enp7e3p6e3x9fX19fX19f39/f3+AgH9/f39/f39/f39/f319f39/f39/gH5/f39+fn5+fn5+f39/f359fX18fHx8fHx7enp5d3h3dnV1dnZ1dXZ3d3h4en2BhomLjIuJiIiJioyIfnZ4fYSHiIqLjIyMjIuNjo6Ojo2MjI6PkJCQkpGQkJCRkpKTk5OTk5KRkpKPjo6QkpKRkJCQj5CRkZGRj4+Ojo6Ojo2Mi4uKiYeGhoeHh4aEhIWFhIaGhoeGhoWFhIOCgoKEh4iIiIiIiIiIh4eHh4iIiIiHh4eGh4eHh4eHh4eIiIiIiIiIiImJiYqKiomKi4yKe2hcV1hjdH1+eXRvcn2GjZGVmJeXlpSSj46MiYmDf3lzbW92e31/gIaMjouEfHd2dXFua2dmaXN+hISEhApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmFsaV82NDB4MzYwX1A0MjBfYWxwaGEueXV2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iYWxpXzY0MHgzNjBfUDQyMF9hbHBoYS55dXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTJhZTcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iYWxpXzY0MHgzNjBfUDQyMF9hbHBoYS55dXYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1ERUhLTExNTk5QUFBQUVNRU1JSUlNTUlJRU1FRUE9OTUxKS0pHR0ZDQUE+Pjo7Ojs7ODg4ODg4OTk5ODk6Ojk4ODo5NzY3NzU1NTQ0MjExMTAwLi4tLSsrKScpKSgoKSkoKCgoJycoKCgoJygpKSkpKiorKywsKiorKywsLCwsLCwsKysrKyopKSkpKSkpKSkpKSgoJycmJiYmJiYmJiYmJiYmJiYmJiYnJyYmJiYmJiYmJiYnJycnJycnKCgpKywsLS8wMjI0NTU3Nzc4ODk5OTk5OTk5Ojo5OTk5Ojo4ODc2Njc3Oj5FSlFZYWhscXV3eHh3dXFtamhoZ2hqbG5ub29vb3BvcG9xc3R3eXx+fn5+fHhybGRZTkE0LiwpKysrKywqKysrLjQ6Qk9aZW54foOGhYOCfXdtZ1hIOy8pJSQkIyQlJScqLjE3OD5DTFNeZW10e4CAfHp1b2lhWVNPUlFUVFFTTEQ9NjAnJSMkJCIiIyIiIiEhIyEiISAjJSYoKzA3PURLUFdeY2dscnd4eXh3dXZ2dXV1b2tfV0tGQT8/QEBAQEBAPz8/Pz09Ojk5OTc1NTQzMTAwLzAzOTxDTlZdZmxxdHl7fHp6dnJtZF1PRTkyLCspKCgnJycnJigoKCkpKSsqLTAxMjM2Nzc4PT4/Q0ZGSk5VXGJrcHR4ent9f3+BgoKCg4OBgYGBgIB+fXt5enZ0dHh7f4CCg4aIh4eFg358enh1dHR5gISGhYODg4B8eHBmWEo9NC8uLSwwMzg9RE5aYmtzeHyAgoGAgYGDg4KCf359e3l2d3d6enyBhIiKi4uLioqKioiHh4eIiIiGgHlwZFhPSEVBPjw7RklJTExMTU5OUFBQUFFSUVRTUlJTU1JSUlJRUVBPTk1MSkpISEhFQUFAPTw7PDw6ODo6Ojo6ODk5OTk6Ojo5ODg4ODg3NjY2NTU0NDIxMTEwMC4uLS0rKyooKSkoKCkpKCgoKCcnKCgoKCcoKSkpKSoqKyssLCwsKyssLCwsLCwsLCsrKysqKSkpKSkpKSkpKSkoKCcnJiYmJiYmJiYmJiYmJiYmJiYmJycmJiYmJiYmJiYmJycnJycnJygoKSssLS8wMTEyNDU1Nzg4ODg5OTk5OTk5OTo6OTk5OTo6OTk5ODc4Oz1ES1FZX2dvc3l6fHx8enRxbGpra2xtb29wcG9vbWxrampqa2tvcnd6foGAfn5+d3NrYFVIPDIrKisrKysrKywsKywxNz9KVmFtd32BhYaFhIF7dGteUD8zKiYkJCQlJigsLzI1OD1BRUpSWmNqcnyAgYB/enVuZFpTT01UYnBmVk5FPTYpIyQjIyMiIiMiIiIhISMiIiEhIiQmKy00PUNKUFZcYmVscXV5ent6d3V2dnV1dXNrYVZLRUI/P0BAQEBAQD8/Pz8+Pjw6Ojo3NTU0MzEwMDAxMTY8Q01VXWZscXR5e3x6end2b2ZeUkc7My4rKSgoJycnJyYnKCgpKSkrLC4uMDAzNTY4OTs9QUJER0tPWF5ka3B0eX1+gIKChISGhoeHhoaEhIKAfn18e3dzcnJ2eXp9f4OEhYWFhYN/fXt5eXh5foWGhoWFgoJ/e3VtYlJEOTIvLi4uMDM4PUJNWGJrc3h8gIKBgH+BgYGBgH98end3dHNzdnh6f4SIi42Li4uLi4uJiIiIiYmIhoF4bmJXTklGQT48O0hISUtMTE5PT09QUFFRUVJRU1JSUlJSUlFQUFBOTUxLSkpIR0VEQUBAPj08Ozo4Ojk4OTk4OTk6OTk5OTo6OTk5OTg4Nzc2NjU1MzMyMTAwLy8uLi0sLCsrKigoKCgoKCgoKCgoKCgoKSkpKSkpKSkqKiwsLCwsLCwsLS0sLCwsLCwsLCwsKyorKyoqKSkpKSkpKCgnJycnJycnJyYmJiYoJycoJyUnJicnJiYmJiYmJycmJicnJycoKCgoKSkqLC4uMDEzMzQ1NTU4ODg4OTk5OTg4OTk5OTk5OTk5Ojk5Nzc4Oz5DR09VXmJqcXZ7fX1+e3h2cG5sbGtsbW5vb21ta2lnZWNhXmFkam1yd3uAgoKCf3x2cWleUUI2LiorKioqKysrKysrMDU9RVFfanJ7gIWIhoaCfXhuY1RFNi0mJCQlJicsLzE0OD0+QkRITFVeZW93gISEg396c2hgVlBOXWV1dm9gZnlzQCQhIyMjIyMjIiIiIiEiIiIjIyQkKi4zOUFHTVNbYGVqcHN4e318eHZ2dXZ2dnNvamBUTURAPz8/P0BAPz8/P0A+PT08Ozo6NzU1NDIxLzAuLjI4O0JNVFxobnJ1eHx+fXx7dnFpY1ZKPjQuKykpKSgoJycoKCgoKSkqKywtMDExMzQ1ODk9PkBBRUpNU1pfZmtydnt/goODg4WGh4eIhoWFhIaBf318end0cnBwcXV2eX1/g4OFhYWBfn57eXp6e4GGh4eGgoSBfXlyalxOPjUxLSwsLjAzNzxDTVdgaXJ4fH+BgYF/gICAf399e3h3dHJvb3J1eH+EiYqKjIyNjYqKioqKiomJiYeAd2teU05JRkE+OzpJSkpLTUxOT09PUFBRUVFSU1JSUlFRUFBQUE9PTUxLS0lJR0ZEQ0FAPz48Ozs6OTk3Nzk5OTo6Ojk5ODo6Ojk5OTk4ODc3NjY0MzMzMjEwMC4uLi4uLi0sKyopKSgoKSkoKCgoKCgoKCkpKSkpKSkpKiosLCwsLCwsLC0tLCwsLCwsLCwsLCsqKysqKiopKSkpKSgoKCcnJycnJycmJiYmKCgoKCcmJycnJiYmJiYmJicnJiYnJycnKCgoKCkpKSstLzAxMjIzNTU1NDY4ODk5OTk4ODk5OTk5OTk5Ozo5OTc3Ojo/REpSWV5mbHN4fH59fHl2c25samppaGhpZmZlZmRgXlpYVVVYXGFlbHV6gIKCgoF+fHZtYldJOzQsKiwqKioqKiorKy4yOEFOWGNveYCGiIeHg359dGpbTT0wKSQkJCUrLjE2ODs/QkRDRktPWGRtdX6DhoaCfXduY1dPV2xgaWxwa2R3f15JKyEkIyMjIyIiIiIhIiIiIyIlKC4zO0BGTVJZX2NnbnF1eX18e3l2dnZ3d3d1cGhgVEtEQj8/Pz9AQD8/Pz8+PT09PDs6Ojc1NTQxMS4vLi4yNztCSlRcZm5ydXh3en59fHdzbGNaTj84MSsoKSkoKCcnKSkoKCkpKistLjAxMzMzNDY3OT4+RElOU1lfYWltdHh9gIOEhoaHiImIiIiFhYOBgH58eXZ0cW9vb3Bwc3V4f4ODhISDgX5+fXt8fH6BhoaGhYSCgHt2b2ZYSTszLy8wLi4wMjU6Qk1VXmdwd3x/gH9/fn5/fn58e3h2dHFtbGxucnZ7gYeJiouLjIyKioqKioqLi4qFgHdqXVJLR0VCPzw7SElKSkxMTU5PT09PUVFSUlJRUlJRUVBQUE9QT0xKSkpIR0dFQ0FAPz49PDs6OTo6ODg4ODg5Ojo6Ojo6Ojo5OTg4ODg2NTU0NDMyMjIxMDAwMC8vLS0tLSwrKSkpKCgoKCgoKCgoKCgoKSkpKSkpKSoqKiosLCwsLCwsLCwsLCwsLCwsLCwsKyoqKysqKCkpKigpKSkpKCgnJycnJycnJycnJycnJycnJycnJyYmJycnJycnJycoKCgoKCgqKiorLS0uMTExMjQ1NTY3ODg4ODk5OTk5OTo6OTg5OTk5ODc2OTo7QEVMU1lgZm1zdnl7eXZ3c3BraGVkZF9fXl5eXl9dWldUUk9OT1NYX2ZweoCEg4SEgX14cWxcT0I4LysqKioqKisrKywtMjg/SVdhbXeAh4qKiIeDe3ZtX1JCNColJSUoLjI0OTxAQ0RFREZJTlVfaXF6goaHhIB5cmldVVxpanFZSVJpcWNSV0chICEkIyMiIiIjIiIiIiImKC00Oz9FS1NXXWJkaW50eXp8fHt4d3d3d3h3c29qX1RKRD8/Pz4+Pz8/Pz8/Pj49PTw6OTk3NTQzMjExLy8vMDY6QEtTXGVrcnZ3eXt9e3p6d3FnXE9CODEtKykpKCgnJygoJykoKiorLC0vMDIzMjQ3OTo/REhOUllgZGdtcnZ7f4KFhoiIioqJiYiIhoWDgH59eHZ0cGxramprbW90e3+CgoODgX+Afn19fX6ChYaGhIOCgH96c2xiUkM4Mi8uLi4uLzI2O0JNV2FpcXd6foB/f359f399e3d1c3JtaWlpbXF2fH+EioqKiouLiYmJiYuLi4qKhX92Z1pOSEdFQ0A+PEpKS0pMTE5OT09QUE9PUFJSUVBQUVFQUFBPT01MSkpKSEdFRENBQD8+PTw7Ozo6Ojk5ODg5Ojo6Ojo6Ojo6OTk4ODg4NzY1NDMzMjIxMDAwMDAvLy8vLS0sKyopKSgoKCgoKSkoKCgoKCgpKSkpKysqKisrLCwsLCwsLCwsLC0tLCwsLCwsLCsrKysrLCopKSkpKSkpKSgoJycnJygoKCgnJycnJycnJycnJycnJygoJycnJycnKCgoKCkpKiorKy0tLjAxMDMzMzM1Njc4ODg5OTk5OTk6Ojk4OTk4ODc3Nzg6O0BFSlBZYWlvdXZ2dnRxb2xmY19aWVlYWFpaWFhZWVhVT01KR0VIUFljanN7gYKDg4GAfXZtY1dJPDIuLSoqKiorKyssLDA3PEZTYGt1foWJioiHhH95cmRXRzYtKSkpLjE1ODo/QkRGRUZGTE5SWWRvd36DhYWBe3RrYFxkamtlV0xRaVtPTlZcWVQmIiIkJCQjIyQiIiIkKC00OkBFS1FXXV5iaGxxdnl6fHx6end3d3d2dXRwamBTSUNBPT0+Pj4+Pj4+Pj4+PTw7Ojk5NzU0MzIzMTEuLi8zOD9JUlxmbXB0d3p7e318enZxaV9SRzoyLikpKSgoKCcoKCopKisrLCwtLi8xMzM2OTtARktQVVpfZGhtcXZ6fYKEhYeHiIqKioqJh4WDgH96eHZ0b2toZ2VlZ2ptc3t/goKCgYB+fn6Bf3+Ag4aHhoSDhIB9eHJpXk9ANzEuLS4uLzIyNjtDTVhhaXF1en1+fn5+fn17enl3c21ta2dnZ2pucXh/hIeKioqKiomJiIiKi4uLiIV+dWhbTklHRENAP0BLS0tNTU1NT09PUFBQUFJTUVFQUFBQT09QT01NS0tJSUhGRURCQT8+PT08Ozs7OTk4ODk5Ojo6Ojo6Ojo6Ojk5ODg4ODc2NTUzMjExMTExMTExMDAvLi0tLCwrKyoqKioqKikpKiooKCkpKioqKioqKyssLC0tLS0tLS0sLCwtLSwsLS0sLCwsLS0rKywsKiorKykpKSkoKCgoKCgoKCgoKCgnJycoKCgoKCcmJiYnJygnJycoKCgoKCgoKSoqKyssLCwtLzAxMjMzNDY2Nzk5ODg4ODg4Ojo4ODk4NjY1NTY3ODo+QkdOV19nbXFvb21raGdiXlhXVFNSVVVXV1hYVlZVUEtGQj48QUdRXWZvd3+BhYWCgYB7c2leUEI2MCwsKisrKyorKywtNDlCT1todHyEiYuJh4aCfHRqXU8+MSsrLzQ3OTw+QkNFRkZHR0lMUFhganJ7gYSFg3x1bGJeYFNbTlVURU9TSkZEY2pkWiUhJCQkJCQkIyQmKTAzOD9FTFFWW15gZWltcXN0d3p6enl3dnZ3eHh1cWtgUkpDPzw8PT0+Pj4+Pj49PTs7PDo3Nzg2NDMyMjEwLi8uMzc+SFFbY2xxdHZ4en1+fHp4dGthUkc9NDAsKSgoKCgoKSkrKyssLCwtLi4vMTQ2Oj9FSU9SV1xhZmluc3V4foKFh4eHh4iLi4qJiIWCf317d3NwbmtpaGRiY2dpbnR7f4CCgoCAgH9+gYCAgoWIiIaFhIOAfXdxZVlLPTYxLS4uLS4xNDg9Rk9YYGlxdnx9fX18fXx9eXd3c25ramdmY2NlanF3foSHioqKiYmJiYiIi4uMi4mDfXRlWlJKSEdEQkA/SklMTE1MUE5PT1BQUFBPUFFRUFBQUE9PT01NTUtKSkhGRENCQD8+PT09PTw7Ozo6ODg5OTo6Ojo6Ojo6Ojo5OTg4ODg3NjU1MzIxMTExMTExMTAwLy4tLSwsKysqKioqKiopKSoqKSkpKSoqKioqKisrLS0tLS0tLS0tLC0tLS0uLi0tLSwsLC0tKyssLCsrKyspKSkpKCgoKCgoKCgoKCgoJycnKCgoKCgnJiUmJycoJycnKCgoKCgoKCkqKisrLCwsLS8xMTEyMzM1NTY4ODg4ODg4ODk5ODg4NzU1NDU1NjY5PUFFS1NeZWhoZmZlZGJdWlVSU1JRUlJSVlZXV1ZTUE1HQT04NzlBSldha3N9gIKFgoKAfHZvZVlHOjIuLCorKysqKysrLDE3P0tYZHF8g4iKiIeGgnx1bWJSQTQvLzI2OT0/QkRHRkdHSEhIS1BWW2VtdX6ChIJ8eG5jYFVORzpDQDU5Oj5AQ0tUXVMjIyQlJSQkJCYmKi41Oz9HTFFYWl1gY2Zna29xc3V5eXp5dnV2dXZ2dXBoXlFIQT08PDw8PT09PT09PDw7Ojk4Nzc3NTQzMjIwLy8uLjI4PUZSWmNrcXZ1d3t9fXx8e3RsYldLPDQxLSkoKioqKiopKysrLCwsLi8vMjU4PUJFS1BUWV5jaG1wc3Z8foKEh4eGh4iIioqKiYaDgH15dXFvbGpnZGFfYGNnam50eX1/gIB/gICAgIOCgoWIiYiGhYSAgX12bmNXSjw3My4vLy4vMTU4PkZPW2NqcHd7fX59fHx7enh1cm9qZ2ZjYmBgZGlwdn6Eh4qKiomJiYmIioiLjIuIhX50Z1lRS0hHREJBQEtLTk5NTU9PT09QUFBRUVFRT1BQUFBPT0xMTUxNSkhGRUNCQT8/Pz0+PTw8PDw7Ozs7Ojo6Ojo6Ozs7Ozo6Ojo4ODc3NzQ0NDMyMjIxMTIyMjIwMDAwLi4tLCwsKiopKSoqKioqKigqKSkpKioqKysqKiwsLC0tLS0tLi4uLi4uLi4uLi0tLS0sLCwrKysrKysrKSkpKSkoKSkoKCgoJycpKSgoKCgoKCgoKCgoKCgoJycoKCgoKCgoKCgpKiorKywsKywtLTAyMTEyMjQ0NTY3Nzg4Nzc3Nzc3NjY1NTQ0MzU2ODo+Q0pSWV9iZGJgYF5cWldUUlBQUVNUVFVVVlZTUE1HQzs1MTI0O0VQXGhxeX6DgoOAgH13cGpeUEE2LysqKioqKCoqKysvNzxGVGBteICGh4iHhoOBeXBlWUo7NDM2OTs/REZHR0hISUlJSElMUVZfZ3F6f4GBfXVtZGBUVVdEOzJDWi8tMEFRRU1MOCIlJSUlJCQnKjA0O0FGTFJWW15fYmRlaWpqbHF0dnh4eHNzdXR0dHJtaV9RSEA8Ozo7Ozs7Ojs7Ozs7Ojk4ODc2NTM0MjIyMTAwLi8xOT1ETlphaXF1dnh6fHx8fHl0bGNaTUA4MS0rKSkpKigrKyssLCwtLy8vMjY6PkRITlNYXmNpa29zdXx9f4OEhIaGhoiJiYmJiYaEgXx3dHBqaGZjYV5dX2NnaW1vdXt/f4B/f36BgIGEg4WHiYqIhoaDg4B8dWxhVEY7NzQwLzAuMDI2PUJIUlxkaXB4fH19fn18e3d1cW9sZ2RfXFxcXGFpb3Z9hYmJiomIiIeHiIqLi42MiYR8c2dcUUpJRkVDQUBMTE5OTU1PT09PUFBQUVFRUlFQUFBQT01MTEtMSkhIRkRCQEA/Pz4/Pj08PDw8Ozs7Ozo6Ojo6Ojs7Ozs6Ojo6ODg3Nzc0NDQzMjIyMTEyMjExMDAwMC4uLi4sLCoqKioqKioqKiooKiopKSoqKisrKiosLCwsLS0tLS4uLi4uLi4uLi4uLi0tLCwsKysrKysrKyoqKikpKSkpKCgoKCkpKSkoKCgoKCgoKCgoKCgoKCcnKCgoKCgoKCgoKSoqKyssLCssLS0uLjAwMTEyNDQ1Nzc4ODc3Nzc2NjU1NDQzMzMzNDY5PUJJTlVXVldaW1tbWlpWVVNTU1NUVVVXWFZVUk9JQz02MC0tMjdAS1ZjbXZ9goCDgYB/enNtY1ZJOzItKioqKyopKisrLjI5RFFeZ3R9g4eIh4aDgXxza19RQzk3Oj0/Q0VFR0dHR0lJSUlJSUlOV2Bqc3l/gXZoa3BkXV1bTUVCV1koKzQ8Ozc9REsnJSUlJSYoKjA1OkBHTFJXXF1gYmRkZ2VlZmlscHN2dnZzc3V0dXVybWZcUEdAPDk5OTo7Ozo7Ozs7Ozo5Ojo3NjUzNDIyMjAvLy4vMjc8RE5YYmlxdXZ4enx8fHx5c25mW05DODIrLCwrKyopKysrLC0uLjAxMzk9Q0hNUVdcYGZqbnF2enx+gICChISGhoaHiIiIh4aEgX13c2tnZWFgXFxcXmJlaGtucHR6fn9+fn1+gYGDhoaHiYmJiIaFhYJ/fHVsYVRGPTg2NDIwMDI0OT5GTFVdZW1zd3x9fH18end1cm1qZWJfW1lZWFpgam12foWIiYqJiIiHh4eJjIuMjIiCfHNnXVJMSkZFQ0A+TU1OTk5OT09PT1BQUFFRUVFRUVFPT05OTU1LSElHREJBQEBAPz8/Pz49PDs8PDw8PDw7Ozs7Ojo6Ojs7Ojo5ODk5Nzc2NTQzMjIzMzIyMTExMC4wMTEvLy8vLSwsLCwsKysqKioqKiorKysrKioqKisrKyssLC0tLS0vLy0uLy8uLS4uLi4tLS0sLSwrKysrKioqKikoKCgpKSkpKCgoKCkpKSgoKCgoKCgoKCgoKCgoKCgoKCgpKSkpKSkpKioqLCwrKywsLS0vLy8zMzQ1NDU1NjY2NjY2NDQ1NTQ0MzIxMTI1Nzs/RUtPVVZVWVtbXFtaV1dVVlZWVldXWFdWU09LRj03MSwqKy4zO0ZQXWdxeIGBg4B/fnt3cGldUEEzLioqKSoqKSkqKiwyOUBLV2RueYCHiIeGhIF8dG1lV0pCPz5AQ0ZHR0lJSkpKSkhIRkZFR01XY213fH1za2VpYGVkYFZBPEM6MSoyLiwwPEFiMiUlJiYoLTA2OkBGTFNYWl5fYmNkZGRiYWNkam1ydHN0dHNzc3NzcG1lW1BEPTk4ODg4OTo7Ojo6Ojo5OTg4NzU1NDIyMjEvMDAvMDE2O0VNWGFpcHV2eHl6e3x8eXhxaF9TRDozLi0tKyssLCwsLS4uLzEzOT1BRkxQVlthZWpucnZ5fH+BgYGBgoSFhIWHh4eHh4aEgHx7c2pnYl1bWVpdX2NlaGttcHN2enx9fX19foGDhIiGiYqKioiHhYODgXx1a2BTRj45ODU0MTE0Nz1ESlNZYWZudXp9fnx8e3t4c3BqZ2FfWlhTUlNWXmhtd4CGiYqJiIiGhoeHiYqLi4mGgn1zaFxSTUhHRENBQE1NTk5QUE9PT09QUFFSUVFRUU5OTU1NTUxMSkhHRUJBQD8/P0BAPj0+PTs8PDw8PDo5Ozs7Ozo6Ojo5OTo6OTg3Nzc3NjU0MzIyMzMyMjExMTAuMDExMS8vLy0sLCwrKyoqKysqKioqKysrKyoqKiorKysrLCwtLS4uLS0tLi8vLi0uLi4uLS0tLS0sKysrKysrKiopKSkpKSkpKSgoKCgpKSkoKCgoKCgoKCgoKCgoKSkoKCgoKSkpKSkpKSoqKioqKyssLC0tLzAxMDAxNDM1NTY2NjY2NjQ0NDQzMzIxMDAxNDY6PkRJTlFVVlpbW1xcXFlZWFhYWFdXWlhXVFJNR0E5NC4qKSstMDdAS1dhbHV9gYKBf359eXRtZFVHOjArKioqKioqKioqMDc9RVNgand+g4aGhYSBfHdvaGBUSkVCREVHSEhJSUpKS0tIR0JCQkJFUFtndHRvaWZsZ2VnZVhKQ0BHOTEyMyw5PEVJY0slJSgqLDE4O0FHTFJWWV5fYWFjZGVgXVxcXmRobnF0dXRzc3Nzc29qZFpMQT07ODg3Nzg5OTg4ODg4Nzc2NjY1NTUzMjIxLzAvLi4yNjtETlliaXB1dnh5ent8fHx4cmlfU0k8NzEvLy0tLS0uLi8vMTM3O0FGS09VW19lam5ydXd8fn+BgYGBgYKChIWGhYWGhoODgX56dW1nYFtYWVpcX2JlaGtsb3F0d3t7fX18fn6Bg4aJiYmKioiHh4eHhIJ8dWpfUkU/Ojk2NTU0NztBSFBWXGNqc3h9f398fHx6d3NtaGBbWFVSUE9PU1xmbXeBiImJiYiHhoaHh4mKioiHhYF7c2heUk1IRkNCQD9NTU9PUVFRUE9PT09QUE9PUFBPTkxMS0lKSUdGREJBQkBAPz8/P0BAPT09PD09PT08PDs7Ojo6Ojo6ODg4ODk4Nzc2NjY1NDQzMzMzMjIyMDIyMDIyMjAwLy4uLSwsLCwsLCsrKiosLCsqKioqKisrKyssLC0tLi4uLi4uLi4uLy8vLi4uLi0sLS0tLCwsKysrKyoqKiopKSkpKSkpKSgoKSkpKSkpKSkoKCgoKCgoKCgoKCgoKCkpKScpKSkqKiorKysrKywsLS0tLi8vMTIzMTQ1NTY2NTU0MjQzMzEyMS4vMjU2OT5ESExRVVhcXl5dXl1bWVlZWVhXWVhZVFNPSUI9Ni4rKCgpKi40O0ZSXmhxeYCBgX9+fXt2cGhcTkA0LSopKiopKioqKi42OkJQXGhxfIKFhYWDf317dW5kWlFLRkZGSEhJSUlKSkpJR0Q+PDs9QEpWY3RpaGlnY2ZkYF5CM0xTWDxAUlNEPDpDSFhmVTwkLDA4PUJFS1FXW11kZmVlZWBcXFdVVlldZGpxdHZ0c3N0cnBsaWJXSkA7NjY2Njc4ODg4Nzc3NzY2NjY1NDMzMS8vMTAvLy0vMTQ6Q01WX2dvdHd3eXt7e3t8eXNsYVZKPTc0MC8vLy8vLi8wMjU6QEVLUVdcYGVrbXJ0eXt+fn9+fn6AgIGCg4OEg4SEg4SDgoB6dnFoX1lWVllcX2NmaWttbm9xdHd7e3t7e31/goSIiouMjIuJhoaHh4OBe3RqXlJJQTw7Ojg4ODs+RUxTWWBmbXR6fH59fXx7d3RvbGNdVlNPTUlITFFaZW14goeKiomIhoaHhoiJiYmIh4R+eXFqX1ROSEVDQT8+TU1PT1BQUE9PT09PUFBPT05OTk1MS0tKSUdGREJBQD9AQD8/Pz9AQD8+PTw9PT09PDw7Ozo6Ojo6Ojo5OTo4Nzc3NjY2NTQ0NDQzMzMyMjMyMjIyMTEwMDAvLi0sLC0tLCwrKysrLCwsKyoqKiorKysrLCwtLS4uLi4uLi4uLi8vLy4uLi4tLC0tLSwsLCsrKysqKyoqKSkpKSkpKSkoKCgoKSkpKSkpKCgoKCgoKCgoKCgoKCgpKSknKSkpKioqKysrKysrLCwuLi0uLzAxMDEyMjIzMzMzMjIzMjExMTAuLzI1Njk/RUpOVFhaXF9fYGBeXFtbW1tZWFlbWFZRTEU9Ni8qKSkpKSksMDdBTFhibnV9gIGAfn59eXNtY1VJOTAqKSkpKCkqKioqMDc+SVdkbnd+g4SEg39/fHdxa2FYUElHR0hISUpKSkpLSkVAPDk2OTtFU15wb29raWVgXVlTTUlKTFNgYF9fWEtBOCs7Um5uNSg3PEJGTllZW2BsaVRNVmFbW2FSUFBVWmFpcHV1dHN0cnBvbmhgVUk/ODU2NjU2Nzc2NjY2NjY1NTQ0MzMyMjIwLy8vLi4uLzA0OkNNVl9nb3R3eXd5e3t7fHlzbWNZTEA6NjIxMTExMTEzNDg9RElQVFxgZmltcnV5fH9/fn19fX1/gICAgYODg4KCgoKBf398eXRsZF1YV1lcXmJmaWttb29wcnZ5fHp7e3x8f4KEiIuLjIyLiYeHh4eDgXt0al5QR0M/Pj07Oz5AQ0pRWF1lanF2e35+fX19e3ZybWZgWVJNSkVDQ0hRXGVxfISIh4iJiIaGhoeIiYmJhoWCfndzaV9UTUdEQkBAPk5OT09PT05OT09PTlBQUVBOTkxMSkpJSEdGQ0FAQEBAPz4/Pz8/Pz4/Pz49PT08PDw8PDw6Ojs7Ojo7Ozo5ODg3Nzc2NTY1MjMzNDQzMzQ0MzMyMjIxMTEwLy8tLSwuLi0tLCwsLCwrKioqKioqKysrKywsLS0uLi4uLi4uLjAwLy8uLi4uLC0tLSwsLCwsLCosKyopKSkpKSkpKSkpKSkpKSgoKSkoKCgoKCgoKCgoKSkoKCgoKSkqKikpKSkqKSoqKiorKysrKywsLS8vLy8vMDExMTEyMjEyMjExMC8uMDExNDk8QEdMUlZaXl5fYGFhYF5dXV1bWVlbWlhTTkdCOjMrKCkpKSkpKi4zO0ZTXml0en+BgX9/fnt3b2dbTj4zKikpKSoqKioqKi81PERTYGx2fIGDg4OAf3x4dW9nXFJLSEhISUtLS0tKSEVBPDgyMjE2QVBfYW5pUmhkWlRSR1FRSlFZYWJhYWBdVT80PElbcnI6Nj5JTGNtaGNtd0pPS1RaW1lXSklLTlZgaXF1d3V3dHNzcWtoXlNGPDY0MzM0NDU1NDQ0NDU1NTU1MzIyMTIwMC8uLC4uLy4vNDpDTFVeZ25zd3d6eHl6e3x8dG9kWlFDOzY2MzIyMjMyNzpARk1VWWBla290d3p8gIB/fn9+fX1/f35/gICCgoKBgIB/fX17eHRwaGRbWVpaXWFmaWxvb3FycnR2eXx9fHx8e3+DhYmKjY2Ni4mHh4aGg4F7cmpcUElEQkFBP0FBRklRVl1iaG91eX99fn59e3h0cGpjW1NMRkM/PT9ET1tnc36EiIiIiYeFhYaHiImIh4SCgX15c2thVU1FQkE/Pj5OTk9PT09OTk9PT09QUE9OTExLS0pKSEdEQkBAQD4+Pj4+Pz8/Pz8+Pz8/PT09PDw8PDw8Ojo7Ozo6OTk4ODg4Nzc3NjU2NTU2NTMzNDQ1NTMzMjIyMTExMC8vLy4tLi4uLi0tLCwsKysrKioqKisrKyssLC0tLi4uLi4uLi4wMC8vLi4uLSwtLS0sLCwsLCwsLCwqKSkpKSkpKSkpKSkpKSkoKCkpKCgoKCgoKCgoKCkpKCgoKCkpKiopKSkpKSgpKSkpKysrKyorLC0tLS4vLzAxMTExMTEwMTEwMC8vLjAxMjY6PUNHT1RZXF5gYWJjY2FfX19cW1taWlpVTktDPTUuKicoKCgoKCksMDdBTVhkbnZ9f4B/fX59eXNsYVRFNy0qKSkpKSoqKiotMzlCTVtmcXuAgoSCf4B9enVwaWBXUE1KSklLS0tKSUZBPTg0Ly0sMTtRaXJzbU1dYVdVT05QTUdCTlZiYFhVWF1UPTlCVF5xWkxPW21+d4BqaFtZYm1wd3RkXFBAQUpUX2tzdXd2dnRzc3FraF5TRjw2NDIyMzMyMjIyMzMzMzMzNDMyMjEwLy0uLiwtLSwsLTM4QEhTXGhvc3d4eHl5ent7e3RuaV1TRz44NzY1NTU2Oj9ESk9XXmRpb3R4eoCBgoB/fn18fH19fn5/gYGBgYGBf319fnp5d3NxbmdiXFlZXWFjZ2xtcHJycnN1eHt9fXp6e3x/g4iKjY+QjoyHh4eGhoOBe3JqXFJOSEZGRkVHSUtPV15jZmxyeHx+fn59e3t5dG1mXlhPR0E9OTo8RlJcaHeChoiIiIiHhYWHh4mJiIeFgoB7dnJrYVVNRUFAPj4+T09OTk9PT09QUE9QTk1OTEtKSUhGRkZEQkJAQD8/Pj49PT4+Pz9AQD49Pj49PT09PDw8PDs6PDw7Ozs7ODg4Nzc3NjY1NTU1NTU1NTU0NTU0NDMyMjIyMjEwMDAwLi8wLi0tLCwtLCwsLCwsKyoqKisrLCwtLS0tLS0vLzAwMDEuLi4uLSwtLS4uLS0tLCwsLCwrKyoqKiopKSgoKCgoKCgoKCgpKSoqKSkoKCkpKCgpKSgoKCgpKSkpKSkpKSkpKiorKysrKikpKi0tLS4uLi4vLzAxMTExMDAvLy8wLi8wMTM3PUFGTFBWWl5gYmRlZGRhYmFhX1xbWllZVE9GPzkvKignKCcmJicnKi41PEhSXWdxen1/gH9/fXp2cGZZTD0zLCoqKiopKSoqLDE2PUlXY213foCCgn9/fHp2dWxnXlVPS01NTU5NSkdCPjo0MSsqKi45UHGBfnhlYFxHWVlVUVJOTE1IUVZZTExcX0tHQSpGTF1UT1tudG+Ac21obWxlcHqCcWpcRj1LVWFsc3d3eHh2dHNxbmddUEQ6MzEwMDExMTEyMjExMTAwMTExLzAvLS0tLSwtLCssLDAyOD5HUlxlbnJ2d3d5e3t7enp3cmtgVkhAPDk2Njg5O0JHTFNbYWhtcnV9f4KDg4OBfn98fX18fX59f3+AgX9/fn19enp5d3VycG1nYl1cXV9iZWlub3FycnN0dnl8fH16ent9f4OIi46QkY2KiIiIhoaDgXxyaF1UUE1LTExLTE5SWF5iZWtuc3h9fnx9fHx5d3JsZV1RSEA6Nzc3PkdTYm55gYeJioiHhoaGhoaJiIWEg4F/e3dzbGJWTEZBPz46OU9PTk5PT09PT09NTk1MS0pKSUlIRkNDQT8/PT09PT4+Pj4+Pj8/QEA+PT4+PT0+Pj09PDw8Ozw8Ozs7Ozk4ODc2NjY2NTU1NTU1NTU2NTU1NDQ0NDQ0MjIxMTEwMC8wLy4uLS0uLC0sLCwsLCsqKiorKywsLS0tLS0uLy8wMDAwLi4uLi0tLS0uLi4tLS0sLCwsKysqKioqKSkpKSgoKCgoKCgoKSkpKSkpKCgpKSgoKSkoKCgoKSkpKSkpKSkpKSoqKCgoKCoqKSosLC0uLi4uLy8wMDAwMC8vLy8tLS8wMTQ1OT9DSU5UWl5gY2VmZmZlZGFgYF9bWlpaV1FMQjwzLSooJygnJiYmJyktMThDTVljbXd8foB/fXx8eHFsX1NENi0qKigoKSkqKiouNDlEUl9qcnt+gIJ/gH57eXVwamFYUU1MTExMS0dDPjo1LysoJysvNVRzfHx7b19WSEZWVlFVW1JLVFxbalJJWmRlWkdCRktPSlhmX2xtcW+Ae2xnbF9bcGZnS1VASFdkbnN3d3h4eHd2c25nXVBEOjIwLy8wMDAwMDAvLzAwMDAwMC8uLi0sLCwsKysqKy0uMTc+R1FbZW50eHh4eHl6fHp6d3FrYlhORT89OTg8QERIT1deZWlwdHl+goOFgoKAgH9/fHt7ent9fH5+foB+fHp5eHZ2dXRzcnBuaGNfX2BhZGdqbnBxcnN2dnh6fXx7enp7fX+DiIuOkI6NiYeIiIiGg4F7c2pfWFRTUFBQUVJWWlxiZmpvcXZ6fn59fHx8eXZuaGBZTkQ8ODQ0Nz5JVmRweoKHiIiIh4WGhoiJiYeEhIJ/fXl4cWxiVkxFQD49OjlPTk9OT09OTk1MS01MS0pISUhFRENCQD87Ozw8Ojw8PD09Pj4+Pj9APj4+Pj09PT0/Pz09PDw8PDw7Ozo6ODc3Nzc3NzY2NjY3NzU0NTc2NjU1NTU0NDQzMjExMTAwMTAwLy4tLC0tLS0tLCwsKysrKysrKywsLS0uLy8vLy8vLi4uLi0tLS4uLi4uLSwsLSwrKyoqKioqKioqKCooKCcnKCgoKCkpKSkoKCgoJygoKCkpKSkpKSkpKCgoKCgoKSkpKSkpKiopKSkpKSorKywsLi8vLzAvMDAuLi8vLi4uLzE2Nj1BR0xSWF1gY2VmZ2lqZ2ZjYV9bWlpYV1ZQRj04LyooJygoJyYmJicnKy41PUlUXmlxeXx/fnt8fH14cGVbSjswKykoKCkpKiopKzI4QkxYZG93fX+Bf3x7e3p2c25lW1ROTEpMSkdEQDs1MCkoJCInKzZZYnR3eG9gU0xKWltUVWFfU1RaXF5dU1RebGRUSk1eTlFgaWt1cmZrb1tJR1RWXVJYU1FSTUtWZG50d3d3dnd3dnNraFxQQzkyLi0tLS0uLS4uLy8vLy4uLi4uLS4uLCwsLCwsKistLzE3PkdQWmVucXV4eHh4eXx7e3hzbmdcT0dCPzw9QkhNUldhZ2xyd3yAhIODgoOBgX+AfX16enl5eXp7e3t7fHt6d3Jzc3Nyc3JwbmlmYmBgZGVpbG9xcnN1dnd6fH18e3p6e32AhImMjo+PjYqIiYmHhoOBe3NsYlxYWFdVVVZYW15hZ2xvcnV5fH5+fXx7e3l0bmZeU0pAODMxMzdATFhnc32Eh4mIiIeGhYaIiIiHg4OBfXx4dXJrYlZMQz88Ojk5T05OTk1NTU1MS0tLSklHRkZFRUNBPj49Ozs6Ojo7PDw9PT4+Pj4/QD4+Pj49PT09Pj49PTw8PDw8PDs6Ojk5OTc3Nzc2NjY2Nzc3Nzg4NjY1NTU1NDQ0MzIyMjExMTEwLy8uLi0tLS0tLSwsLCsrKysrKyssLC0tLi4uLy8vLy8uLi4tLS0uLi4uLi0sLC0sKysqKioqKioqKikpKCgoKCgoKCgpKSkpKCgoKCcnKCgpKSkpKSkpKSgoKCgoKCoqKSkpKSoqKSkpKSkqKyssLCstLy4vLi4uLS0vLy4vLjEzNztCR0xSVl1fY2ZnaWtramdmY2FfXVtbWVdSSUM7NC0oJycoJicoJyYnKCgsMTlCTlhjbXZ6fH57fHx7d3JqYFBCNSwpKCgpKSoqKSovNTxHVWNrc3p+fX59fXt7eXVwaF9WUU1KSUlFQTw3MComIyIgJCo7X2Fma3FtZUxGVVtcVlRYW1lPWFJRWlheYGdpYlJAVk5EZX55bmZfVl5LOjg9UVZIUFNHRkdLVmRvdXd4eHd5eXd1bGlcUEM5MC0rKysrLC0tLS4uLi4tLS0tLSwtLSwsLCwrKyoqLC0xNz5HUFpkbXF1eHh4eHd6enp3dG9oXlJKRUBDRktQV1xhaG10eH2BhIWDgoKBgYB+fn19enp4eHd5enp6enp4d3VzcXFxcXJycG9rZmJiY2RmaWxvcXJzdnZ3en19fHt6ent9gYWJjI+QkI2LiYeHh4aEgntzbGJeWllYWFhaW11gZ2twcnN4fX5+fn18e3t5dGxlW1FFOzUyMjM5QlBfanZ/hoiJiIiHhoaHiIiIh4OCf3t4eHZzbGNWTEM/Ozk5OU9PT05NTU5MS0tKSUhHRkZEQ0JAPTw8Ozc3OTk4Ojw8Pj0+Pj4+Pz8+Pj8/Pj4+Pj09Pj48PD4+PTs7Ozk4ODc3Nzc3NjY2NjU2Nzg2NjY2NDY1NTU1NTQzMjIxMDIyMjAvLi8vLC0sLS0tLS0tKyssLCsrLS0tLS4uLzAuLi4uLy8vLi4uLi4tLy0sLS0sKyoqKiopKSkpKiopKSkpKiooKCkpKSkpKSkpKCopKSgoKSkpKSkpKSkoKCgoKCgpKSkpKSkrKysrKysqKisrKywtLS0tLi4uLi4uLzAwMDIyNzs/RkxRVVxgYWNnamptbWlnZmNhXltbWldTT0c9NzArKCgoJyYmJyYmKCkpKi80PEdUXmhyeHt8e3t9fHl0bWVXSDowKSkpKSkpKikpLjI4Qk5caG93fH18fXx8e3p4dG1iWVJMSUlGQjs2MysmIyEgIyMoO01VaGZjXFkyQFpbV1JdUVBaVlpVUF5bV15gamVXNE9OTm9vcmRiZ1haV004PUdDUVdEOjY/TVtncHZ4eHl5eHh2dG5pX09CODAqKyssKysrKysqKistLCwrKioqKSssLCoqKykrKy0tMDc+RlBaY2xxd3d4eHh4ent7eHZwaWBWTkdGSE5SWV1kaXB1en+DhoWEgYCBgICAfX17eXZ2dXR0dXV3dnZ2d3VycXFwcXFyc3Fva2hkY2NkZ2lsb3Fyc3Z2eHp8fX17enp7foGGjI+PkZCLiYmIioiHhoF9dmtkYV5cW1xcX2FiZWluc3d3e319fX18e3t6d3JsZVlOQjk0MjI0PEZUY256hIeKiYiHhoWGh4iIiIaDgHx5eHh2dG5lWE1DPzs5OTpPT09NTExLSktLSUhHRkVFQj8+Ozo6Ojk3ODk5OTs7Ozs9Pj4/Pz8/Pj49PT4+Pj49PT4+PT09PTs8Ozs6OTg4Nzc3NzY2NjY2Njc3ODk2NjY3NTU1NTU0MzMzMTEyMTEwMDAxMC0tLS0tLS0tLSwsLS0sLC0tLS0uLi4uLS4uLi8vLy4uLi4uLi4tLCwsLCsqKioqKSkoKCkpKiopKSoqKSkpKSkpKSkpKSkpKSkoKCkpKSkpKSkpKCgoKCgoKSkpKSkpKysrKywsKiorKysrKystLS4uLi4uLi8wMDIzNztARUtRVlphZGVpa2tsbGlqaWZjYF5bWVhWUElAOTEtKikoKCcmJicmJyYmKCktMjdBTldibnV6e3x7e317d3FpXk4/NCsqKCkpKSkpKSowNT1KWGFsdHt8fX59e3t8enVvZl9VTkpGQz03MiwnIyEkIiIjPmBeUlZfXlxVUlJVWlxdVGBcTEtaX15nU0pbY2BcVkZXS1JnX2RjZ2VlZWRRNDpIRUNCPS85Q1BbaHF3eHh4eHh4dnRual9QQTcwKioqKikqKyoqKyssKioqKSkpKSkpKSkoKCkqKissLjI3PUVRW2NqcnV3eHh4eHh7e3l1cGpiWFFNTFJWXGBmbHN3fYGDhIODgoGAgH9/f3x6eXd0cnBvcHJ0c3JydHZ1dHBwb3BxcnJybWplYmJjZGdpbG9xcnN3d3h6fXx7e3p6fH2BhoyPj4+Oi4mJiIeIiYeDfXZrZGJfXVteXmFjZmpvcnZ5fH2Af317e3t7eXZwa2FVSj03MzEyOD5LWGRzfYSHioqIh4aFhoeIiIeFgX56eXh3dnRuZVhMRD06ODk6T09NTU1NS0lIR0dHRUREQT49Ozo5ODg3Njc4Ojs7Ozs7PD09PT0+PT4+Pj4+Pj4+PD49PT09PTw8PDs7Ojo5ODc3Nzc2Njc3Nzc3Nzc3ODg4ODc2NTQ1NTQzMzMyMjExMDExLy8uLi0tLS0tLCwtLS0tLS0tLS0tLS0uLi4tLi8uLi8uLS0tLS4uLSwrKywrKiopKSgoKSkoJigmKSgqKikpKSkpKSkpKSkpKSkpKCgpKSgoKCgpKSgoKCgoKCgoKSkpKioqKysrKysrKysrKysrLS0tLS4uLi4wMDIyODxBR0tRVVpfZGZoa21sbm5saWpkYV5dWldXU09FPDUuKiopKCgnJycnJycoKCcnLC80PUhTXmpxd3p5enx8e3lycGRVRDgvKykoKCgoKCgpLzM7R1RgZ3J4e31/f319fXx3c2tgVU9FQj45NCspJCEhIyEgL2VnW0ZMZF1WU1FVVVJETl9pUkJOWFRXXlZZW1tYVVVTUEJIV11oXmZjZmtePDJFQz1ERTcxOkNRXGhxdnh4eHh2dnZ0b2leT0A2LiknJycnKCkpKSkoKikqKiopKCgoKCUlJygpKiorLS0xNj5FTldia3F0dnh4eHl6e3t4dnJuY1tWU1VYXmRobXN7foGEg4OBgYCBf39+fn15d3d1cm5tbGxta2xtcHN0cnFvbm9xcnJxcmxpZWNgYmVmaGxub3J1d3d4en17e3p6eXt9goeMj5CPjouJiImJiIqIg312bGViX15eX2BjZmhsb3R2eXx/gH19eXp6eXZ0bWdeT0Q7NjQzMzpAT11pdoCHiYuJiIeGh4eHiIiFg397d3l3dnZ0b2dZTUM9OTg5Pk9PTU1MS0lIR0ZFRUNCQj87Ojk5ODc4NzY3ODo7Ozs7Ozw9PT09PT4+Pj4+Pj49PT09PDw9PT4+PT08PDo7Ojk4ODg4Nzc3Nzc3Nzc3Nzg4NjY3ODc2NTU1NTQzMzMzMzExMTAvLy4uLS0rKywsLS0tLS0tLS0tLS0tLi4uLi8vLi4vLi0tLS0uLi0sKyssKyoqKSkoKCkpKCkqKikmKSkpKSkpKikpKSkpKSkpKSgoKSkoKCgoKSkoKCgoKCgoKCkpKSoqKisrKysrKysrKysrKywsLS0uLi4vMDE1ODxCR0xRV1peY2dpbG1wcXBxbWtnY2BeXVpXVE9IQDkzLCkqKSgoJycnJycnKCgnJyktMThCTlhlbnV4ent7enp6dnFnWkk9LyopKCgoKCgoKC0xNz9NWGRvd3p9f39+fn18enVvZltQR0E6NC8pJiIhISEgITdZZ2haYF1jX0hNV1RST1FebFQ1QElLR1NbXlxXT0ZFRUJIS0pWYE5dYGBlW1FHRFRHOSgoMzpDUVxocXZ4eHZ2dnZ1c29pXk9ANi4pJycnJycnKCgoKCkpKiopKCcnJyclJScoKSoqLC8vMzg+RVFXYmtxdHZ4d3d3eXt7e3d1bmlhXVxdYGdscHN3fYKDg4SBgX9/gYB+fXx6eXV0cG9ramlpaGprbXBzdHJxb25vcXJycnBraGNhYGJiZGdqbG1vdHd3eXt8e3p6enl9foOIjI+Qj46LiYiIiYqKiIN9dmxlZGJhYWFiZWhrb3N2ent9fn59fHl6enl2c2xlWU1FOzY0MzU8RFNhbXmCiIuKiYiHhoeHh4iIhYJ9eXd2dnZ2dGxkWU1DPTg5O0BOTUxLSkdJSEdGREJAQj09Ojk4Nzc2NjY2Nzg4OTs6Ojo6PDw8PDw8PT0+Pj4+Pj49PT4+PT0+Pjw8PT09PTs7Ojk5OTk3ODg4ODk5OTk4ODY3ODg3NjY2NjU0NDMzMzMzMzIxMDAuLi0tLCwsLCwsLCwtLS0tLS0uLi4uLi4uLi8vLy4uLi4tLS4tLCwsLCsrKSkpKSkpKSkqLzI4LScpKSkpKSoqKSkpKSkpKSkoKCgoKSkpKSgoKCgoKCgoKCgpKSkqKyorLCwqKyssLCsrKyssLCwtLy8wMDE1OT5ESUtRV1tfY2Vpa21vcHBwcm1oZWFfXFpYV1NMQzw1LykoJycnJycnJyYnJyYmKCcnKi81PElVYWlzeHt6ent8e3hza2FRQDMrKCgoJycnJycrLjY9SVVhbXV5fH9/f39/fX15cmpdU0U+Ni8sJiMgISEgISNPaI2BbWhjYWJgX1NQU1hcWmRURUM9RExQW2BWUFY/QkVCRUZIUFFQT1pXXF9USU9VXE8sLjQ5Q1BcaHF1dnZ1dXV1dnRuaF1OQDQsKCcmKCglJScnJiYpKSgoKSYlJSUlJiYmJygqLC4xMTQ4P0ZRV2Fpb3N2eHV1d3h5enp5dnNtZ2RjZGhscnZ7gYODgoGBgICAf319e3p4dXVxb21rZ2RjZmhqbW9ydHRycW1vcHFycXBta2dlYWFiYmNmaWltb3F1eXl6enp6enl5fH+DiIyPj46NioiHh4mKiomFfXZrZmZkY2NkZmprbW91d3l7fX19fXx6e3t6d3FrY1hNQTk1MjM3P0lWZG97hYuLi4mHh4aHiYmIh4WAfHh1dXV3dnRwaFtPQjw3Oj1FTUxLSkpIR0ZFQ0NCQD05OTY2NjU1NDQ0NjY2Njc4Ojo6OTo8PDw8PD09Pj4+Pj4+Pj4+Pj4+Pj49PD09PT07Ozo6OTk5ODg4ODg5OTk5OTk4Nzc3Nzc2NjY1NTQ0MzMzMzMyMTAwLy0tLSwsLS0rKywsLCwsLC0tLi4uLi4uLi4vLy8uLi4uLS0tLSwsLCwrKSkpKSkpKSkpKjZDQzQnKCkpKSkqKikpKSkpKSkpKSkoKCkpKCgnJygoKCgoKCgoKSkqKysrKywsKisrLCwrKysrLCwsLS8vMDI1OD5DR01SVltgZGZpa21vcXFwcG9rZmNgXVtYVVRPRj84MS0qKCcnJycnJycmJycmJicnJyktMjhDUlxmcHV5fHx7fHx5dW9kVkY2LCgoKCcnJycnKSwzO0NRXWp1eXx/f39/gYF/enVtX1FGPDMtKiUiISEhICE1V22QeVxeYmFeWVhKS1BaYltdWU1CSEZHS1lXUFBZQzQ6S09SSkhIRkpMUFBQTE5caFZPKS01OkRPXGdydnR0dXV0dnVybWldTkA0KycmJSUlJSUmJiYmKCkoKCcmJSUmJiYmKCkqLC4wMzQ1OT9GUVhham9zdnh1dXd4eXt7enh2cm1qaWlvcnd8gIOEgoKBgYGBfn19enh3dXNwcGxpZWFhYmZoa25xcnR0cXBub3BxcXBvbWllYmFhYmNjZWZoam5ydXl4ent7e3p5eXx/g4iOj4+OjYqJiYeIiYmHg312a2ZmZGRkZGZpbG5zdXd5e3t7enp5eXp7eXZwamJXST44NTM0OEBNXGl1f4eLi4uJh4eGh4mJiYiEf3l2dHR0dXZ0b2dcUUU8OT1DSk9OTElHRkZFREE/PTw5NjY2NjU0NDM0NjY1NTU3Nzg4Ojo7PDw8PT0+Pj09PT0+Pj8/Pj4+Pj8/Pj49PTw8PDs6Ojo6Ojo6Ojk5Ojo6Ojk5ODg5OTc1Nzc3NjU1NTU1NTMzMjIwMC4uLS0rKysrKisrKysrLCwtLS0tLS0tLS4uLy4uLy8vLy4tLS0sLCwsKyoqKSkpKSoqKSkyOjktKSgoKCgoKCgoKCkpKSkpKSgoKCgpJygoKCgoKCgoKSkoKCsrKywsKywtLCwrLCwsLCwsLCwuLC4uMDIzNzxDR01SV1xfZWhqbW5wcHJycG9ua2djXltaV1RQSkM5MywpKSknJyYmJycmJycnJyYoJycmKy81QE1YY250eHp6e3x8e3hzalxMPDApJyYmJycnKCktMjlCTlllbnd8fn+AgIKBgX53cWdWSDsxLSolJCMhISMjXGNfdVE+VEpYZFVBPU9ATFRTUE5ROjtITUtISE5KVVlcXmJlaGhhSkJLRkRCTU5MWWZWVyssMjpFUV1ncXNzcnJyc3R1c25pXk9BNCwoJSUkJCQkJCQmJiYnKCgnJiUlJycnKCkrLS4vMTI0NztARk9WYGhvc3V3dXd4eHt9fXx5eHZzcXFyd3l+gYSDg4GAgIKAfnx7e3h3dXFwbmtnY19hY2Zoamxwc3N0c3Fwb29vb3BubWtnY2FfYGBfYWNlZmhscXR4e3t7fHp3eHl9gISJjo6QjY2KiIiJioqJiIV8dGxnZmVlZWVmamtucXJ0eXp7e3p5eXl4eHhzbWdgVUc9OTc2NztEUmBseH+Gi4uLiIeHiImKiomIg394dXNzdHR0dHFnXVFFPT5CR05MS0pHR0ZEQ0JAPjs5NzU1MzMzMzMyMzQ1NTY2Nzk4ODo6OTo7Oz09Pj49PT4+Pz8/Pz8/QD4/Pz4+PT08PDw8Ozo7Ozw7Ojo6Ojo6Ojo5OTg4NzY3Nzg4NzY2NjY2NTUzMzIyMTAuLi0tKysrKyorKyssLCwsLS0tLS0tLS0uLi8uLi8vLy8uLS0tLCwsKysqKikpKSkpKSkpKiorKykoKCgoKCgoKCgpKSkpKSkpKCYpKCkpKSgoKCgoKCkpKSkrKyssLCssLSwsKywtLS0tLCwsLi8uLzA0NzpARUlQVltgZGdpbG5xcnJyb3BubGhkYV1bWVZSTEU8Ni8rKikpKCcmJicnJicnJycrNTwvJigtMjtHVF9rdHl7e3t8fHx7dW5hUUI1KycmJicnJygpLTE6QU5ZYW50en5/gICAgYJ/enNpWko7LyglJiUkISEiN3VZS0I8O0tPVmFUPzEyO0A/RUJHSkE4RklLRUlFTlteYGJkZWVjWj49SUNFQl5OQ1BbXEooKzM8RVFdZ3Fzc3JycnN0dXNtaF5PQDYsKSUlJiYkJCQkJSUlJiYmJiYlJSQlJykrLC8wMTM0Njo+Q0lPWGFpb3N2eHh3dnh5e31+fXt6d3d3eX2Ag4SEg4OBgYB/fnx7enh1c29vbGdiX15fYWNnamxvcnNzdXRxcG9vb29wbm9rZWJhX15dX2BgZGRnbHF0d3h5e3x6d3h5foGGio6OjoyLiIiIiIiKioiCe3JsZ2VlZWVmZ2dobXBxc3Z4enp5eHl5eHh2c2xmX1FHPTo5OTo9RlRibXmDiouLi4iIh4iJioqJiIN/eHVzc3R0dHRxZ11RRD5BSExQTExJR0ZFQ0FAPjw5NjU0MzIyMTIyMjMzNDQ1NTc4ODg5OTk6Ozs8PT4+Pj4/Pz8/Pz9AQD8/Pz8/Pj8+PT09PTw6Ozs8PDo6Ojo6OTo6OTk5OTg2Nzc3Nzc1Njg3NzQ0MzMyMTEvLS0tLCwrKyssLCwsLS0tLS0tLS0tLS4uLi4uLi4vLy8vLi0tLCwsKyoqKikpKSgoKCgoKCs1QjwsJycnKCgoKCgoKCgoKCgoKSgoKCgoKCgoKCgoKCgpKSsrKysrKywrKywsLCwsLS0tLS0tLi8uLjAxNTk+REhOUllfYmVoa2xvcHNzb29tbWtnYl9cWVhTT0lAODEsKikpKicnKCcnJycnJycmKzQtJycnKy43Q09aaHB4enx6enx8fnlxZldFNywoJyYnJicoLC80OUJLVWFrc3p9f4GBf4CEgX12bF9POy0kJCMjIyQjJTxrTDs0NTM9TExiYmFVQj0nNzk5OkJBPUdLSkxQVFhdX2BhZGJjXlQ8NUBDRUVqbU1JQ0RIMTA1PEZSW2dxc3R0c3N0dHR0bWdeUEE1LSklJSUlJCQlJSQkJSUlJSUlJiUnKSkqLC4wMjM1Nzk6P0VLUVlhaG9zdnh3dXV3en19fn5/gH9/gIKChIWFhIKCg4GCgH17end2cW5ua2ViYGBhYmRoamxwcHJ1dXRycnBvcHBwbmxtamZiX15dXV1cXmBiZ2pwc3Z7e3t7enl2en6Ch4qOjo6MioiIiIqKiomGf3tyamZlZWRjYmFiZmlrb3N2d3h3d3d4eXd3dHBqZF1QRD06ODg8QkpYZXJ8hYuLioqIiYmJioqKioaCfHd0c3NzdHRzcWlfUkdDRkpQVktJR0ZHREM/PDo5NzU0MzIxMTAxMDAyMjQ0NDQ0Nzg4ODg5Ojs7PD0+Pj4+Pz8/Pz8/QEA/Pz8/QEA/Pj09PT07PDw7Ozs7Ojo6Ojk6Ojk5OTk3Njc5ODg3ODc3Nzc1NDMyMjEwLi0tLSsrKysrKysrKywsLCwtLS0tLS0uLi4uLi4uLy0tLSwtLSwsKysqKikpKSkoKCgoKSknNjEqKicoKCgoKCgoKCgoKCgoKCgpKCgoKCgoKCgoKCkpKSorKysrKysrKyssLCwsLC0tLS0uLi8vLy8xMzc6QUZNU1hcYGRpam1ucHJxcXBubGxoZGBdW1hXUUtDOzUuKykoKCkpKScmJycnJyYmJyUkJScoJyouNT9MVmNvd3p8e3p6fHx6dGxcSzwvKCcmJyYnKiswNjpBSlRganJ5fX+BgYGBg4KAeXFiUkAxKCMkJCQkJCdCblk+Njs1OEFRYmlvcWhQPUY+NDZDR0ZQTk1OVllbXmBhYmJgXVhUUjVFR0dCTmFNSlVdSy4xNj1GUl1pcXN0dHNzdHR0dGxoXU9BNS0pJSUlJSQkJSUlJCUlJSUlJSUmJyorLjAwMjQ1Nzo8PEFFS1FZYWhvc3V5eHd2eHt+f4GDhIOEhISHh4aFhYSDg4GAgH18eXZzcm1saWZjYWFiYmNmZ2tvcXJ0dXV0cnBvb29vb25sa2hkYF5dXFxaWltcYWNpbnN2e3t9fHl3eXyAg4iLjo6OjIqIiIiJiYmIhYB8c2llZGRhYF9eYGNmam9zdXZ2dXV1dXd3d3Rwa2NaTkU+PDs7P0ZRXml2gIiLi4qJiIiIiYqLiYqHgHp3dHNzc3R0c3FpYVVLRkpQVlpLSUdFRUNAOzk4NjU0MjIxMDAvLy8vMTEzMzMzNTY4OTc4ODk7Oz0+PT4/Pz8/QEBAQEFAQEBBQUBAPz49PT09PTw8PDo7PDo7PDs6Ojo5OTo5Nzc4ODg4ODg3Nzc3NTUzMzIxMC4tLSwsKysrKyoqKiosLCwsLCwtLS0tLi4uLiwuLy4tLS0sLS0sLCoqKiopKSkpKCgoKCoqJyYoKCgoKSkoKCgoJycnJygoKCgoKCknKCgnKSkpKioqKioqKysrKysrKysrLCwsLS0tLS4uLi4wMDAwMzY6PkRKTFRbX2FlaWptb25vb29ua2pqZmJeXFtYVE9HPzcwKyopKSkqMi8oKCcnJycnJyYmJiUkJiMoLTE7SFVhbXV5fHx6enx7enVuYFA/MionJSYoKSovMzk9QUlTXWZvdn1/gYKCg4OCgXt0aVpGNiwmJCMjJSgoW2tYPDY8QkFJWWVudHd0VktIQ0FETFBNR0NMVFhaXWBgY2JhXVhUTkY+QkFDREtaVFBMTDkxMTc+SFJeanJ0dHR1c3R0c3JsaV9RQjUtKSUnJyclJSYmJSUlJSYmJSYnJygsLi4wMTM1Njo8PkBDSE1SXGJob3N2eHl4eHl7foGEh4iIiImJiYiHhYWEg4SBgH18eXZ0cGxpaWRiYGFhYmNlZmlsbnFzdHV0cnFvb29vcG9ubGllYl9dW1taW1tdXV5iZ2xydnp7fH16d3p9gYaJi42OjoyJh4eHiIiIhYJ+dm5oZGNiX2BcXGBlaGtuc3V1dXV1dXN1dXVzb2pgWU9EPz4+P0VLVmJtdn+IjIqJiYmHh4mKiouIhH95dnNycnR0dnVybGVWT0pNVFtfSEhGQ0E/PDk4NjU1MjIyMTAwLy8vLzAxMjEzMzU2Nzc3ODg5Ozs9Pj0+Pz8/P0BAQEBBQEBAQUFBQT8+Pj49PT09PDw8Ozs7PDw7Ojo6OTk5OTk5OTk4ODg4Nzc3NzU1NDQzMjAuLS0sLCsrKysrKiorLCwsLCwsLS0tLS4uLi4sLi8uLS0uLS0tLCwqKioqKSkpKSgoKCgoKCkpJycoKCgoJycoKCcnJycnKCgoKCgpJygoJykpKSoqKioqKisrKysrKysrKywsLC0tLi4vLy4uMDAwMTM2OkFGTFNXXGBjZ2lrbW5sbGpqaWloaGNfXFtbVlNMQzs0LSoqKSkpKiopKCgnJycnJyclJiYmJCYlKCsuN0NRXWhyeXx9e3t8fHt2b2ZXRDMpJyUmKCouMjY6PkNKUlxlbHV7f4CBgoGDg4F8eXBhTz4wJyMjIyQlKURLRjg/Pz0+Slpkb3N3cltUTkE+QUJNS0VQVFlaW15gYGFfXFhUTUdCOjhNQkBHVVpaVkUsMjQ3PkpUXmpydHR0dXNzc3NybGleUEI3LysoJycnJSUmJiYmJSUmJiYnKCorKy4wMzQ1Nzo7PkBCRUtRVFxiaG9zdnh3d3Z3fYCEh4qMjY2NjYuJh4aFhIOCgH98e3Zzb2toZmJfYGJiYWNlZWhrbHBxc3R1dHJxb29ubm9tbmxpZWJeXFpZWVlYWVpcYGdscnZ6e317eHd6fYGGiYuNjoyKiYeHh4iIiIWAenNsZ2RiYF5eXFxgZWlsb3F0dHNzc3NzdHZzcm5qYFhOR0NAP0JJT1tkcHqDiYuKiYmJiYmKi4uLiIR/eXVycnN0dHV1c21kW1NPUVlgZEhFREJAPTk4NDU1MzEwMTEwMC4uLi4vMTExMjM1NjY2OTk6Ojs7PT0+Pj8/Pz9AQEFBQUE/QUBAQUA/Pz8+PT08PD09PT09PTw8Ozo6Ojo6Ojo5OTk5Nzc5OTc3NjY1NTUzMTAuLi0sKysrKysrKiorKysrKystLS0uLS0rLS0vLS0sLC0tLi4sLCsrKiopKSkpKCgoJycnKCgoKCcnJycnJycnJycnJycnJycnJycnKCgoKCgoKSkqKisrKywsLCwsLCwtLSwtLS0tLjAzMDAuLi8wMDA0NzxDSU5SV1tfY2dpa2xraWlnZ2dmZWNhXVxbWVVRST84MCwpKSkpKCgoKCgoJyYnJyYmJiYmJiUlJicpMDU/T1tlcHd6e3p8fHx8eHJpW0s7LSYnKSktMTU3Oz9ES09ZYmtyen6BgYCBgoODgX11aFZFNismIiQjJChATko+Nzk5PEpVYnF0d3RsTkNCOTc+RkZQUldbXV5fYWBeW1dSTEZAODUyVEM7R1BZWFxAMDI2OUBLVmFrc3V1dHRzdHR0cmxoX1FBNjAsKSgnJyclJycmJiYkJiYnKCosLS4wMzU3Ojs9PUJERkhPU1heZGpvc3Z3eXl5e4GEhoqNj5GRkI+OjImIh4WCfoF9eXRxbmpoY19eYF9hZWVmZ2hpbGtvcXJ0dHRzcW9vbm1ubWxpZWJeW1tZWFlYV1dZXGBmbHF2eXx9e3t7en6BhoiLjY6MioiGh4eJiYWCfXdxamZjX15eXF1eYWZpbnBydHNzc3Jyc3R0dHJvZ2BWTkhFQ0NGS1VfZ3J7hYuLi4qJiYmJiouJi4mFfnp2dHN0dXV1dHJrZV9XVlheZGlHRUNAPTk4NjQzMzIyMDAwMDAuLi4uLzExMTIzNTY2Njk5Ojo7Oz09Pj4/Pz8/QEBBQUFBQUJCQkFAPz8/Pj09PDw9PT09PT08PDs7Ojo6Ojk5OTk6Ojc3ODg3NzY2NTUzMjEwLi4tLCsrKysrKyoqKysrKysrLCwtLi0tLS4vLS0tLS0tLS0tLCwrKyoqKSkpKSgoKCcnJycnKCgnJycnJycnJycnJycnJycnJycnJygoKCgoKCkpKiosKyssLCwsLCwsLS0sLS0tLi4vMC4uLi4vMTE0Njk/REtQVFhbX2NnaGlpaGZmZWVkY2FgXl5cW1hTTkU9NC4qKSkpKSkoKCgoKCcmJycmJiYmJiYmJiYnKy4yPElWY2x3ent6eXl7fHp1a15OPzIqKSkrLzM3OT5ARUtPV2FocHh+gYKBgoKDg4F+d25fTj0vJyMjJCUmQnV3RCYpMzpIVGNwdnh1bks7Li8yNy47VllaXV5gYWFdW1ZSTEZBOTMuLTc/RVFPT0xfTTk1NTpBSlVibHV3dnV1dXV0dXRsaF9RQTYwLCkoJycnJycnJycmJyYnKCosLS4wMzU3OTw9P0FERkhKUVVaYGRqb3N1dnh6e4CFiIyOkJKTk5KRj42JiIeEgH5+eXZybGllYWBdXmBfYWNjZmdoaWxsb3Bxc3VzcXBwcG5tbm1rZ2VhXVpZV1ZXVFNUVFlcZGpxd3t8fHp5eXp+gYaIi42OjIqIhoeIiIiFgHp1cGZjYF5dXF1dXmFmamxwcnNycHBvb3BycnJwbWVdVE1KR0ZGSk5YYmx2gIiLi4qJiYmJi4qLioqIhH15dnRzdHV2dXVzbmphW1lcYGZrRkNBPTo4Njc0MzExMS4vMC8vLi4uLi4wMTEzNDQ1Njg6Ojk5Ozs9PT4+Pz8/P0BCQUFAQEJCQUFAQD8/Pz8+Pj09PT09PT09PDw7Ozs7OTk6OTk4OTk4ODc3NjY2NjQ0MTExLy0tLSwrKyoqKysrKysrKysrKysrKy0tLS0tLC4tLS0tLS0tLSwqKSoqKSopKSkoKCgnKCgoKCcnJiYmJicnJycmJiYmJiYmJiYmJiYnJygoJygqKisqKyssLCwsLCwtLS0tLS4tLS4uLS0uLi4vLzAzNjg7QEhOU1RZXF9iZWhlY2JhYWJiYGBfX2BeXltXUktBOjIsKioqKiopKSgoKCgnJycnJycmJiYmJiYlJSkuMzpEUmBsc3d6enp5eXt6dG1jU0M0KyoqLTI1Nzw/Q0ZKTlVdZ252foCBgYGBgYOCf3lzZlZDMyclJCMjIjVpZCwjJy86Q1NibnR1c2tgNiUlKis3TFlaW19gX2FfWVVRS0U9NzEvLjMzOEhQUU9VTlJXNDU6QUxZY211d3l4dXV0d3Ryb2tgUkI5MS0qKiooJycnJycnJycoKSstLzAxMjQ2ODs9P0FDRklLTlNXW2FmbHB0dnd4en2Bh4uQkpWVl5aTko+NioeGhIB8eXRvbGdkYFxcXmBgYWNlZ2ZmZ2lrbW5wcnR1c3Fxb29ub21raWZkYV1ZVlVUU1RTVFVYXGRrcHV4e3p4eHh6foKHiYyNjYyKiIiGiIeGhH55c2xlYmBeXVxbXV5iZWptcHFycm5ubm9yc3N1cW1nX1dPTUlHSU5VXGZwe4KHi4qJiImJiYqKiYmJhoJ9eHVzdHR2dnd3dXFsZF1dX2Rqb0NBPDo5ODY1NDMxMTEuLi4vLy4uLi4uMDExMTI0NTY4ODg5OTs7PT0+Pj8/P0BAQkFBQkJCQkFBQEA/Pz8/Pz89PT09PT09PTw8Ozs7Ozs7Ojk5ODk5ODg3NzY2NjY0NDExMS8tLS0sKysqKisrKysrKysrKysrKyssLS0tLS4tLS0tLS0tLS0sKikqKikqKSkpKCgoJygoKCgnJyYmJiYnJycnJiYmJiYmJiYmJiYmJycoKCcoKiorKisrLCwsLCwsLS0tLS0uLi4uLy4uLy8vMDAxMjY5PkRJTlNXW15eYmVkYmBfXVtcXF1dX2BgYF1bVk9GPjYuKioqKioqKSkpKCgoJycnJycnJiYmJiYmJSUoKzI4Qk9caXF2eXt6eHh4enZvZ1hGOC8tLS8zODs+QERHSk1UXGRsdn2AgYGBgYGCg4F9dmxdSjgrJiMiIiAzTD0iJi80OERSYW50d3haPSQyMT9NVVpbW19gYWBdWVZRTEU/ODAsLS8yMC4/TVFSVE1JSTY1OkFNWmNtdXd3d3Z1d3d0c3BpYFJCOTEtKiopKSgoKCgoKCkpKSwsLTAxMzQ2ODo7P0FDRUpNT1JXW19jZ2xxdXZ3eXt+g4qOk5aXmJeWk5KPjYqHhYF9eXRuamdjYFxbXF5gYGFjZmZmZ2prbG5wcHN2dXNxcW9vb2xsamZkYF1bV1ZVU1JRUFFSU1thaW91eXx5d3h4en6Ch4mMjY2MiomJiImHhoN9dnBnYV9eXVxaWlxfZGhqbW9wcHBubm5vcnN0dHFrZl5WUE5MS01SWGJrdH2EiIuLiYiJiYmKiYiHh4WBfXh2dHV1dnZ3d3VybmdhYWJnbXJAPTs6ODg2NTQzMjIwMC4uLS0uLi4uLzExMTIyNTY3Nzo6Ojo8PD09PD4/P0FBQUFBQUFBQkJAQEBAPz8/Pz8/Pj4+Pj09PT08Ozs7Ozs5OTo5OTg4Nzg4NjY2NjU1NTU0MTEwLSwtLCoqKiorKysrKyssLCsrLCwsLCwsLS0sLCwsLCwsLCwsLCwpKSgpKSkoKCgoJycmJygoKCgmJiYmJiYmJiUlJiYmJiYmJycnJycnKCgoKSoqKysrKywsLCwsLC0tLS0uLy8vMDAuLi8vLy8yMDQ4O0FHS09VV1xdX2JiYV5cXFtbWltdXWBhYWBeWVRMRDszLCoqKioqKikpKSgnJicnJycoKCcnJycmJiYmJyovNT9OWGVvdnh5e3p3eHd0b2lbTT40MTEyNjk+QEFFR0pNU1piaHN6gIGCgYKDg4SEf3hyZVM/MCgjJC4rMTAmJCYyMjZDUWBtdHl8aUlKW1tZWFhZXF9gX19dWVVOSkQ9NzAtLSwuLS0uXlNST05PUkk0NzxBT1lkbnZ4d3d1dXZ2d3Vva2JSRDoyLSoqKSkqKionKCgpKiwtLjAxNDU3OTo8P0JFSElMUFFTWlxiZWltcHN2eXt/goeOk5eYmZiXlZSSjIqKh4SAe3VuaWRhXlxaW11dX19iZGRlZmdpa2xvcHF0dHNycXBvb25ua2lmYl5bWVZVVFFQUE9PT1NZYWlvdnh6enl4eXp+gYaKjo2Ni4mJiYmJiIeBe3ZtYl5eXVtbW1pdYWRpa25xc3Fwb29tb3JzdHRwa2RdVlFRT09RVl1mb3d/hoqJiYqIiYmKiYeGhYSCgHx5dnV0dnZ2eHh2dXFqZWNlaGxzPTo6ODY1NTU0MzIyMDAuLS0tLi4uLi8xMTE0MzU2Nzc5OTk6PDw9PT4/Pz9BQUFBQkJBQUJCQUBAQD8/Pz8/Pz4+Pj49PT09Ozs7Ozs7Ojo6OTk4Nzg4ODg3Nzc1NTQzNTMyMi8uLSwqKioqKysrKysrLCwrKy0tLCwrKywsLCwsLCwsLCwrKysrKSkpKyoqKCgoKCcnJiYnJycnJyYmJiYmJiYlJSUlJSUlJSYmJiYnJygoKCoqKioqKywtLSwsLCwtLS0tLi8vLzAwLy8wMC8wMzM2Oj9ESU1TVlpcXV9hYV5cWlpZWVhaXV9iYmJgXVhSST82MSwqKioqKiopKSopKScoKCgnKCgnJycnJiYmJicqLTM7SFRfbXN4eXl4d3d3dXJqYVFENzMzNzo8P0FDQkVITE9WYGdwen+BgYGBgYCAg4N9dGtZRjUrJiY9NiYlJSElKy82Q1FgbXR4enp4cm1lXVtaXF5fYF9cWVRQSkQ9NS4sKywtLS0tN3VYUU5MSlM/LzY7RFFbY211d3d1dnZ2dnd1cGpfUkQ6My4rKyopKiorKisrLCwtLS8wMjQ2ODk8PkBER0pLTlJVV1tfY2drbnN0dnh7foSJj5SZmZqXlpSTkYyKiIaBfXVvaWReW1lZWlpbXl9fYWNkZWZnaWtub3FxdHRycXFwb29ubmpoZmJdWFdUU1JPTk5NTE5RV2FocHd6enp6ent7f4KHi42NjY2JiYmJiYiFgHp0bGJeW1pZWVpaXWFmamptcXBxb25ubW9xcnNzb2xkXVhTUFBTVVpha3N7gomKioqJiYmJiYiGhYSDgH98eXZ1dXV2dnd3d3ZxamhnaWtvczs6ODc2NjQ0MzIyMDAwLi0uLi4uLi4vMTIyMzM1NjY2OTk6Ozw8PT0+Pj9AQkJCQkJCQkJCQkBAPz8/Pj4+Pz89PT4+PT08PDs6Ozo6Ojk5OTk4ODg5ODk6Ojk5Ojg5OTc5NzU1MjArKikqKistKy0sLCwtLi4tLCwsLCkrKywrLCwsLCwsLCwrKikqKikpKCgoKCgnJyYmJiYmJiYmJSUlJSUlJSUlJSUlJSUmJiYmKCgoKCkpKioqKiorLCwsLCwsLS0uLi4vLy8vLy8vMDAxMjM1Oj5DR0tPVVhaW19gX15dWllZWVlaXmFjY2RiYFxWUEU8Ni8rKioqKioqKSkqKikpKSkoJygoJycmJicnJycnKCswOUNQXWlyeXp5d3d2d3h2bWVXSD02Nzk7PkFDQ0RGSk1NU15mbHV8gICBgYCAgYKDgHpvXk08MCcmIyIkJSQkJCovNUFRXm12e3x8e3ZuaGNdWl5fYGFdWVVPSUQ9Ni0rKistLi4uLjxqZlBRTlReWDg3PkRQW2ZvdXd1dnd3dnZ3dW9oYFFFOjMuLSwrKywsLCwtLCssLS4xMjM1Njk7PkBER0lLTlFUV1teYmVpbW5yc3Z4e3+EiZGXmpqYl5ORko2Lh4WCf3l0bWRfWlhXV1dZWlpdXl9hZGVmZ2ptb3BwcnNzc3Fwb3Bvbm1oaGVhW1ZUUlFQTk1MSUtNT1ZfaHB0eXh4d3h4en+EiI2OjYyNjIqKiYiIhIB5cmlhXVpYWFhZWl1hZmltcHJvb25ub25xdXZ0c29qY11YVFJTVVldZ211foWJiomJiYmJiYmGhIOCgX5+fHl4dXd1dnZ3d3d0cm9pZ2lucXU6OTg3NjY1NDMyMTExMS4tLi4uLi4uLzEyMjMzNTY2Njk5Ojs8PD09Pj4/QEJCQkJCQkJCQkJAQD8/Pz4+Pj8/PT08PD09PTs6Ozs6Ojo5OTk5ODg5Oj0+QEA/P0BBQkJCQT4+PDgzLisqKiouLzAxMTEyMTExMC8uLi4tLSssKywsLCwsLCwsKyopKSopKSgoKCgoJycmJiYmJiYmJiUlJSUlJSUlJSUlJSUlJiYmJigoKCgpKSoqKioqKywsLCwsLS0tLi4uLy8vLy8vLzAwMTM1ODxCRktPUldYXF5eXl9dWldWVlZWWVxhY2NkYmFcVk1DOzQtKyoqKysqKikpKiopKSkpKCcoKCcnJycnJycnJycpLTQ+TFhncHV4eHd2dXZ3dHFoWlBCOjo7PT9BRENFRkpKTFBaYmpyen6AgYCAgIGCgoF6cWdWQzQoJiMjJDI1ISMpLTVBTl5sdXp9f3t4cGxmYF5fYF9dWVJOSUI6NS8sKyorLC0tLi4yUWJTU1NPYmdCNzxGU15ncHV3dnV2dnZ2dnNwaV1RRTozLi4tLCwsLCwsLCssLS4vMTQ2ODg6PD5BREhKTVBTVllcX2NkaG1xc3R3d3t/hYqQlpeXlZSRkI6Kh4aDgHx3bWdgW1dVVVZXWVpaXF1fYWRlZ2drbW9wcHJzc3NycG9wb25taWdjXllVUlBOTUxLS0lHSU1UXWZtc3Z5eHd3enyAhIiMjo6NjYyKioqIiIR/eG9mXlpZVldXWFldYWhqbW1xcG9ub29wcXV2dHNvamJcWlhWVVddYmlxeYGGiomJiYmJiYmJhoOCf359fXx5eHVzdXZ2d3d3dHJvamhpb3F1OTg3NjY1NDQzMjExMTAuLS4uLi4uLy8xMjMzNDU2Nzc6Ojo7PT0+Pj4+QEFCQkNDQ0NCQkJBQUBAQD8+Pz8/Pz8/PD09PTw8Ojk5Ojo6OTk5ODg4OTtAREZISEhISUlLSkpISUZBOjMuLC0vMTQ1Njc5Ojo6ODg1NDExMC8tKyotLS0sLCwsKyoqKikoKCgoKCgoKCYmJiYmJiUlJiYlJSUlJSUkJCUlJSUlJSUlJiYoKCcnKSkqKioqKissLCwsLS0uLi0uLi4uLi8vMDAxMTM2ODo+RUtPVFdYW1tcXl9fXFtaWFdZWFxgY2RlZmNeW1RLQTkyLCorKysrKysrKysqKSkpKSkpKSknJygoKCgoKCYmKSwyOkdVYm10dnh4dXV1eHZza2JTSD07PT9BQ0RFRUZGSk1QV11mbnd+gYKAgICBgYKDfndtW0k3KyMjISMqLSMjJy41QE9caXR6fX57eXVtZmNgX11bV1FMSUI5Mi0rLCsrLCwtLy8xMTVGV1FLTldWPDg9R1ReaHJ4d3h1d3d3d3ZzbmhfUEY6NDIuLi4tLCwsLCsrLS8xMjMzNTo6PD5AQ0ZJTE9SVFZbXmFjZ2twcnZ3eHl8gISJj5SWlZSSj4yLiISCgXx5cmtkWlRVVVRUVVZYWlpbXl9jZWdobG1ub29xc3NycXBvcXBxbWplYVtYVFFQTUtIR0VERUZLUVpmbHN3eHh5d3l8gIOHi4yOjYyLioqKiYiEfnduZlxYV1dWV1hbXmJnamxtcXJvbW5ub3BydHNyb2piXFlZV1dbYGZsdHyCh4mJioiJiIiJh4OAfn18e3x8eXZzdXd2dnd4d3Zyb21rbHBzdzg3NjY1NTMzMzIxMTAuLi0uLi4uLi8vMTIzNDU1Njc3OTo7PD09Pj4/P0BBQkJDQ0NDQkJCQUBAQEA/Pj4+PT09PT09PT08Ozo7Ozo6OTk5ODc5Oj1BRkpNT09PUFJTU1JSU1JPSUM5MzEyNTg7PkBBRERERUNCPzw6OTczMC8sLS0sLCwsLCsqKioqKikpKSgoKCgmJiYmJiYlJSYmJSUlJSUlJCQlJSUlJSUlJSYmJycnJykpKioqKiorLCwsLC0tLi4uLi4uLy8vLy8wMTM1NzxARUtPU1ZbXFxdX15dYF5cW1paWl1gYWNkZWRjXVlQRz43MCsrKysrKysrKysrKikpKSkpKSkpKScoKCgoKCgmJicrMDdCUFxpcXV3eHZ0dHZ2c21nWU5CPT9AQkRERUZHRkhLT1NZYWhye4CBgH+AgIKDg4B7c2NQPzAnJCIhIyIiIyctMkBNWml0eH5+e3l1bmdiX11bV1JNRkE6Mi0rKioqKywtLzAwMjQyTFdLSUlbTjY4QEpVYGp0eHh3d3d3d3d3dG9qXk9FPDUwLi4uLi0sLCwuLi0vMTIzMzU6Oz0+QURISk1QUlZYW15iZWltcXV2eHt8fYGEiY6Tk5GQj42LiIaCgHx3dG5nYFdTVVJTU1JUVllaW15fYWRnamxtb29wcnNzcnFwb3BvbWtnYl9ZVVFPTUtIRkRDQUFDSE9ZY2xyd3h3d3h7fYGEiIuMjYyLioqKiomIhH53bmZdWVlYVldZXF9iaGtucG9vcG5vb3JzdHV0c3BpYlxZWVlbXWNpcHd/hYiJiImIiImJiIWAfnx7eHt9fXl3dXZ3dnd3eHh3dHFta2tuc3c2NjY2NTUzMzMyMTEwLy0sLi4vLy8vMDIzNDY3Njc3ODo6Ojw8PD09Pj8/QENDQ0NDQ0JCQkBAPj4/Pz49PT09PT09PT09PDw7Ojo6OTk4OTo6Oz1ARUlOUlZXV1hZW1taWlpcWVRLQzw6Oz5BQ0lLTVBTVFJPTkpKSUVAPTgxLy0sLSsrKyosKiopKSopKSgoJycnJycmJiYlJSUlJSUlJCQkJCQkJCQlJSUlJSUlJScnJycoKSoqKysrKy0tLS0tLi4vLy8vLy8xLzExMjI0ODw/RElQUlZaW11eYWJjY2BfXlxcXF1gYmFhZGVjYV1WTUQ7NC4rKyoqKysrKyssKysqKioqKSspKSgoJycnJycnJiYoKS81P0xYZm9ydXV1dXR2d3Rwa19TSEFAQkNFRkZGR0dHSU1NUltkbXZ9gYGBgYGChIOCfXRpWEU1KCQiJCMkIyMmLDRATVpoc3p9fHx5dWxlY15cV1FMRkE6Mi0qKioqKyssLS4vLy4uM1lUUElKTVY9OkFLVl9sd3l5eHV1dnh4dnNuaF1PRD02Mi8vLi4uLi0sLi4tLzAyMzU2ODo8P0FGSUpNUVNWWFxfZGZqbnJ2eHt8fX6BhYqOkZGQjY2KhoWDf314cm5oYVpXU1FQT1JSUlNZWltcX2FjaGpsbnBwc3NzcnJvb29wb2xnZGFcV1JPTktKR0NBPjw8P0VMVl9pcHh7eXd3eX+ChYmLjYyKiYmKiomJh4OAeW5lXVhYWFdYWl5gY2hrbW5wcHBwb3BxcnV1dHJuaWJdWlhaXmJnbXZ8goaJioiIiIaIiIeCfnx6eHh4fHx6d3Z1dXd4eXl5d3RxbWttcXR2NjU2NjY1NDMzMjExMDAuLTAwMTExMTM1MzQ2Nzc3ODk6Ojo7PDw9PT4/P0BCQkJCQUFBQUFBQD89PT8+PT09PT09PT08PDs7Ojo6OTk5Nzk6Ojw9QUdLUFNYWlpbXF5eX19fYV9cVU1FQ0RJTVBWWFteX2BiX19dWVZSTkdCPTYyLy4tLCwsKysrKSkqKSkoJycnJycnJycmJSUlJSUlJSQkJCQkJCQkJSUlJSUlJSUnJycnJygqKisrKystLS0tLi8vLy8vMC8wMDAxMTI1OD1BRElOUldbXV5hYmRnZmZkYl9eXl5fYWNjZGRlY19cUkpBOTErKysqKisrKysrLCsrKioqKioqKiooKCcnJycnJygoKCksMjtGU2BrcnV3dXV1dXd2cW5nWU5HQ0JERkdGR0ZGRkhJSUxUXmhxeX6CgYGBgYKDgoB4b2BNPC4nIyUjJCQkKC85QU5cZ3J3ent7eHRsZV9cVVFLQz84MiwqKioqKissLC0uLy8uLjJMZFhKTExYPTlBS1dibXZ5eXh3dXZ4eHZzbWddT0M8NjIyLzExMC8uLC4uLzEwMjM1Njg6PEBDRklLTlJTVlldX2Rma29xdXl8f4CDg4iLjY+PjoqJh4aCf3x4dHBpY11XU1FPT09QUFJVVllbXF5gY2hqbG5wcHFycnFxcXFxcG9taWVfWlROTUtJRkNAPzs6OjxBSlVfaG92d3d1d3l+g4WJioyLioiIh4eIiIeDf3hxZ2BaWlpZXFtfY2Zoa29vcHBvb29xcnN1cnRybWhiXVtaW15kanF4f4SHiYqIiIiIiYiHgn56eHR0eHt7eHl2d3d5eXl5eHd0cW1rbnBydTc3NDQ1NTQzMzIxMTExMC4uMTIyMTEzNDU3Nzc3ODk5Ojo7Oz09Pz9APkBBQkBDQ0REQkJBQD8+Pj0+Pj09PT0+Pj49Ozs6Ojo5OTk4Nzg4OTo7PUJHS09SVlpaW1xdXmFkYmFiYF1XUE5PU1hcX2FjZWpqaGdmZmNfXVhWUUlBPDUyLSsrLSsrKioqKSgoKCcnJycmJicnJiUlJSQkJCQjIyMjJCQkJCQkJSUlJSUlJSYnJycnKSkrKywsLS0uLi8vLy8vMDAwLzAwMTI2OT1CRkpOVFZaXV1hY2VoamtpZWVjYF9fYGFjZWZkY2FbV01EPjcvKywsKyssLCwsKyssLCsrKioqKisrKSgpKSgoKCgoKCYnKi83RFFdaXJ1dXV1c3R4d3Rwa19USkNEREdFR0ZHR0ZERkVGTVdjbnh+goKCgoKCg4OBe3NkU0ExJyQkJSYmJyw1OEROWmdydnd5eXVybWVdV1FKRT84MCspKSkrKyorLS0uLi8vMDAxQ2ZWUk5QVjg9Q01YY251eHp4eHd3eHh2dG1nXVBEPDYyMzIyMjIyLy0uLzAyMjEzNTc5Oj1AQ0dKTU9SVVhZXmFjZ2xwcnZ6foCEg4WJjI2NjIqIh4SCf3x4dHBrY1xXU1BPT09OUFFTVFZXW15fY2RlZ21vb29wcXJxcXFxcnBvbWhjXllTTktIQ0JAPTs5Nzc6QEtUX2lwdXd3dXd6fYOGiYqMi4qIh4aHh4aGg4F6cmlkXVpYWl1cX2FlaGxvb3FxcXFwcnN1dXRzcGxnYlxcXF5fZm1zeoGIiYqJiIiJioqJh4F9eXZzdHh8enh5eHd5eHh6enh3dXJta21xdHU3NzU0MzM0MzIxMTExMTAvLzAyMjMzMzU2ODk5Nzc4ODo6Ozs6PD8/P0BAQUFBQUFCQkJBQEE+PT49PT08PDw8PT09PDs7Ojo5OTk4Nzc4Nzc5PD5ARElMT1JVWFdYW1xfYmJkZmRjYFtXWl5eY2VnZ2lra21pa2tpZ2VjX1lVT0hAOTItLCwqKikqKikoKCgnJycnJiYlJSUlJSUkJCQkIyMkJCQkJCQkJCUlJSUlJSUmJycnJykpKyssLC0tLi4vLy8vLy8wMDExMjQ4Oz9ESExQVFZeX2JkZWlqa21sbGlmZWNhYGJiZGRlZGReWVNKQTkyLissLCsrLCwsLCsrLCwrKyoqKiorKyspKSkoKCgoKCgnJiktNEBNWWRuc3Z1dXR1d3h3c29mWU9IRERGRkZGR0ZEQT8+QkZQXWp0fIKDgoKCgoODgXx2alpGNislJSYmKS4xNz5GTltncnZ3eHh1cm1jWFJLRD44MCkpKikpKysrLC0tLi4vLzAwMD9iYVFMT0xFPEJOWWVvdnl6eHh3d3h4dnRtZ11QRDw4NDMyMjIyMjEtLi8vMDIxMzU3OTo9QENHSk1QU1ZYWl5hY2dscHJ2e3+ChoWIioyMjYuIhoWCf3x5dHFrY15XU1FQT09QUlNVVVdZWlteYWJkaGptb29vcHF0c3FxcXJwb2xpY1xXUExGQ0A9PDk4NjU2OD5KVWBpcHV3d3V4eYCEhomLi4qIiIeFhoeGhoOAeXBmYl5cXFxdXl9iZmlucHFycnFycnR1dnZ2dHFrZWFdXF1fYmhvd36EiYqKiYiIiYqKiYeAfHhzcXZ5e3p6eHd3dnh4eHh4d3Vyb21tbnFzNjY1NDQ0MzIxMDEyMTEyMTExMzMzNDQ0NjU3Nzg5OTo5OTo6PDs9Pz8/QEFAQUFBQEA+QEBAPz49PD0+PT08PD09PDw7Ojk5OTk4ODc2NjY1Njk7P0JGSk1QU1VVVFNUWF1hY2VlZ2VjYGBiY2ZlZ2lpaWlsbGtsaWlnZGNiYFtVTEU9NS4sKiopKiopKCgoJiYnJyYlJSUlJSUlJCQjIyMjIyMkJCMjIyQlJSUlJSUkJScnJycoKSorLCwtLS4uLy8vLy8vLzAxNTY3PEBFSU1TV1lcX2Roam1ucHBycW9qaWhkY2FiY2NiY2FgW1RNQzw1Ly4sLCwsKywsLCwsLSwsKysrKysrKysqKioqKCgpKSgoKCgqLTI8SFVkbXN2dnZ2dnZ5eXd0aV9TSUVERUdHRkVFQj47OzxATFhkcnqCg4OCgYKCgoKAd3BfTDsuJiYnKS0wNTtASVBcZ3F2d3d3c3BrX1VNRj81LisoKSkqKisrLCwsLS4uLy8xMTE0TmVSS09VXk0/UVtncXd6enh4d3d3d3VzbWhcT0U9ODU0MzMyMjIwLy8vLy8vMTI0Nzk7PkFDSEtMTlNVV1peYmNnbXF0eH6Cg4aHiYqLi4qJhoSDgX15dHFrZl9YVFJPT09SUlVYWFpaXV5fYmNlZ2prbW5vcHFydHNzcnJzcG5uaWRdVlFLREE+Ozo3NjIyNDg/SlZga3F2eXh2eHt/hIeKi4uIh4eGhYaHiYeEf3hvZ2JgXl1fYGBjZWhqbnFycnJzc3V2dXh2dnNyaWNeXVxeYmZsc3mAh4mLi4qKiYqKi4qGf3t2dHJ0eHx8eHh4d3d4eHl5eHd0cW1rbW9ydDY2NTQ0NDMyMTAxMjIyMjExMTQ0NTU1NTY1Nzc5ODk6Ojo7Ozw9Pj8/Pz9AQUBBQUBAQUA/Pz4+PTw8PTw8PT08PDs7Ojo5OTk4OTk2NjY1NDU4OTw/QkZIS0pKSUpKSU9UWF1fZWhoaGVkZWdmZWVkZGRjZWVmZ2dmZ2loaGhlYltTTEE2MCopKSoqKSkoKCcmJycmJSUlJSUlJSQkIyMjIyMjIyMjIyMkJSUlJSUlJSYnJycnKCkqKywsLS0uLi8vLy8vLy8wNDY5O0FHTFFSWFpgZGdpbW9xc3N3dXJvbWpmZWNhY2RjYmJgW1VPRjw1MS8uLCwsLCwsLCwsLC0sLCsrLCwsLCsrKysqKigoKSkoKCgoKSwxOURSX2pxdnV0dHR2eXp6dW1iWE1HRkZHR0ZFQz87ODc4PEZUYm12goSDgoGBgoKCgXpzZVRCMiknKSswNDk/RU1UXWhxd3h3d3JvaVxQSEA4LyspKSkpKiorKywsLC0uLi8vMTEyMj1naFJQSVphSk1baHN4enl4d3d3d3d1c21oXE9FPTg1NDM0MzIyMDAwMDAwMDA0Njc5Oz5BQ0hLTU9SVFhZXV5jZ2xwdHh+goWIiIqLjImJiIWDgoB9eXRwamRdWFZUVVNVWFhaXF1fYGBiY2RoaWlrbW9vcHFwcXNyc3Jyc3Jwb21mYFpUTUM9Ojk3NTMxMDI4QEtXYWtydnd4dnh7f4SHiouLiYiHhoeIh4iIhX94b2diYGBfX19hZGZpbG9xcnNzdHR2dnd4dnZycGljXlxbXmJnb3d9hIiLjIuKiomKioqJhHx4c3Bwc3l7e3l4eHl5eHh5eXh3dHFvbW5wcnQ1NTU1NDQ0MjIzMjIzMzMzMzQ1NTU1NjY2NjY3OTs7Ozs7PDw8Pj4+Pz8/P0FCQEBAQEA/Pj49PT09Pj07Ozs7Ojo6Ojo6OTk4ODc3NTU1NTQ0NTU3Ojk8Pj0+Pjo5OTtDSVFXX2RoaWhnZmVlYmFcV1RUWFxcXV1dYGFkZmhqa21qYFZMQTQtKikqKigoKSgnJiYmJiYlJSUlJSUkJCQkIyIjIyMjIiQjIyQlJiYmJiYnJycoKCoqKissLi0tLS0vLzAwMDEyNDc8P0RLUFRWWV9iZ2ptb3FydnV5eHd0cW1pZWRkZGRjY2JfWVZRRkE5MiwsLCwsLC0tLS0sLC4uLS0tLS4uLSwtLS0tKyoqKCkpKSkpKSksMjc/Tl1pcXR1dXR1dnd5eXdwZ1xRSUdHSEVHRUM9NzQ0NDlBT19reYCEhYOBgIGDhIN+d2taSDkuKi0wNDo+Q0pRWF9ocXh4eXZxb2hcT0Q5MCopKSkpKSoqKiorLC0tLi4uLy8xMDM7UmRUVEdOTlJRWmd0enx6enl2dnZ2dHFuZ1xPRj46NzY2NTU1MzExMDAwMDAxMzU2Nzo9QUNHSk1PUlNWWFlgYmhqbnN4fYGEhoqLiYqJiISDgoF/fHl2cGhjXFhWV1dWWVtdYWJjZWVnamtsbm5wcXJzc3FxcnNzcnJycXRycnFuamVfWFFKQjw2NTUzMjAyN0BLVmFsc3Z3d3Z6fYGFiIuLi4qJiIiIiYqKhoWAeW9oZGJgX15fYmdmam5ycXNzc3R1eHh4end1cmxmYV1dXWBlanJ5f4WJi4yLioqLioyKiIJ8d3FtcHV5e3t4d3Z2dnh4d3d5eHV0cG9wcnN1NTU1NTQ0NDQzMzQzNDQ0NDU1NTU1NTY2NjY2Nzk7Ozs7PDw8PT8+Pj8/Pz9AQUBAQEA/PT09PT08Ozw8Ojo7Ozo6Ojo6Ojk5ODc3NjY1NTQzMzMzMTQ1NjY1MzMwMDAyOUBIUVldYmVnZWZiX1lUT0hGRkZIS0xQUVRZXGFma21wbmxlWUw+MSwrKysqKSkoKCcmJiYmJSUlJSUlJCQiIiIjIyMjIyIkJCQkJSYmJiYmJycoKCgqKiorLC4tLS0tLy8wMDEyNDk8QUZLUFVZXGNnaW5ucnR2eHp7fHt3dHJtamdmZGNjYmBeWVZPSEA4Mi0sLCwsLCwtLS0tLS0uLi0tLS0uLi4uLS0uLi4sKyopKSkpKSkpLC81PktZZW5zdXV0dXZ3eXl4dGpfVU1IRkdGRUNAOjUxMDI0PUpaZ3Z+hIaEgYCAgYKCgHlxYU4+MzAxMzk+QkhOU1pfaHF2eHl4c25oXEw+NC0oKSopKSkqKisrKywtLS4uLi8vMDE0PVROUU9LUUxCTV1qdnx8e3l4dnZ2dnRxbmhfUkY+Ojc2NjU1MzMxMTExMDAwMDI0Njc6PUBCRUhKTVBTVVlbXmBlaWxyeH6Ch4qLi4qHh4WDgoGAfnt3dHBqZF5dWFpbW11gYmRlaWlsbG5wcXFycnZ2dnZ0dHN0c3JycnR1dHR1c29rZl5YUEZAOzg2NTMyMzhAS1ZhbHN2d3Z4e36ChoiLi4uKiYiIiImKioeEf3hvaGVjYF9fYGNlZmpucnN1dHR1dnd5eXl3dXFsZV5dXV5gZm52fIKIi4yMiouKiouLiYeBfHdwbG9zeXt7eHh3dnZ4eHd3eHh1dHFwb3FzdTY2NTU0NDQ0NDQ0NDU1NTU1NTU1NjY1NTY2ODk5Ojo6Ozs7PT09PT0/Pz8/Pz8/Pz8/Pj48Ozw8PTs9Ozs7Ojo6Ojo6OTk4ODc2NTQ1NDMyMTEvLi4wMTEwLS0uLCssLjU4QUpRWVxdYWFhXFVNQzo1NTY4Nzg6O0FGS1FZY2pscnZ0bWNVSjoxLS4sKyopKScmJiYmJiYmJSUlJCQkIyMiIiMjIyMjIyMjJCUlJSYmJycnKCgoKiorLCwtLS0tLi8wMDEzNDg/QkhOUVldYWNmam1yc3Z3enx8eXp6dnJubGplZGRiYmFdWVJNSUE6My0rLCwsLC0tLS0tLS4uLi4uLi4uLy8uLzAxMjIxMC0tKikpKSkpKSwvMztJV2NtcnV0dHR2dnh7d3VvZVdNSUdGRUNAPTcyLSwuMjhFVWJxfIKFg4GBgICCgn97dmpZSDo3Nzg+QkdLT1NaYmpxd3t5eHRuaF1NPjMsKSkpKSoqKiosLCosLi4uLjAvMDAyM09SWVxSUFJUS0Fba3V6fHp5d3Z3d3Z1cm1nXlFGPjk3NjY1NDMyMjIxMTAwMTExMzQ1Oj0+QURHSUxQU1VXWV5fY2ZqcXd+g4eJi4uKiIWEgoGAgH17eHRvamVhX19dXmFiZGVoaWprbnBydHV2d3Z4eHd2dnZ0dHJycnN0dXZ2d3V0cm1pYFxTSEE6NzQzMTI2QExXYmx0eHd2eHp/goaKjYyLiYiIiImKioqIg353b2liYF9eYGJkZ2hscHJ0dHV1d3l6enl6d3RuaWNeXV1fY2hxeH+EiIyMjIqMi4uMi4mFf3lybWtvdHh6end2dXZ2eHh4dnh5dnVycHF1dHQ2NjU1NDQ0NDQ0NDQ1NTU1NTU1NTY2NjY4ODk5Ojo6Ojs7Oz09PT4+Pz8/Pz8/Pj4+Pj09PDs7Ozw8PDs6Ojo6Ojo6Ojk5ODg2NjQ0NDQyMjExLy4uLi4uLCwrLCsrLC4wNDpESU5SVllZWFJJPjQwLi4tLCssLjAyNz9HUFpjanF1d3NrYVVIPDc1MS8rKSgmJiYmJiYmJiUlJSQkJCMjIiIjIyMjIyMjIyQlJSUlJicnJygoKSoqKywtLS0tLi8vMDIzNTg9REtOU1teY2ZobG5vdHd4enx7fXl4d3NwbGloZWNiYF1aWFJLRj85Mi0rKywsLCwtLS0tLS0uLi8vLi4uLi8vLzAxMjQ0NDMuLSwrKiopKSksLTI6RlNha3N1dHR0dXV3eXp4b2VdUUtHRkRCPjo1MCwqKjA2QVJfbXmBhYWCgICAgoSCfndvYVNDPDs+QkdLTlNXXGRqcXd7enl2cWpeTz8zLCooKSkqKioqLCwsLSwsLi4uMDExMjM/Ym9jUkpLSFBTYWx1enx6eXd2d3d2dXJuaF5RRj45NzY2NTQzMjIyMTEwMDExMTM0NTc6PT5DRUdLTVBTV1dbXF9kanB4f4OIiYqKiIaEgoF/gH59enh0b2llYWFfYGFhY2RmaWlrbW1ucXR3dnh4enp5eHh4dXRycnJzdXZ5eXp6eXZzcGhiWlFKQTs4NjUzOEBMWWRudHd5eHp7gIOHi46OjIqJiomKioqJiIN+d25nYmJhYF9hZGdpbXF0dHR1dXd5e3t5eHZybWZhXl1dYGNqdHyBhouMjIuKjIyNjIuJhX96cWxsb3R4enp3dnV2d3h4eHZ4eXh1cnBydnZ1NjU1NTQ0NDQ1NTU1NTU1NTU1NTU1NTc3ODg6Ojo7Ozs8PD09Pjw9Pz8/Pj4+Pj4+Pj09PTs7Ozs6Ojs6Ojk6Ojk6Ozk4ODk3NjU1NDMyMTEwMC8vLi4tLCsrKysrKyoqKy81O0FHTExPTkpDOTMtKikpKioqKioqKy40PEZPWmNtcnd1c2pgUk1EPTo1My0qKCYmJiYnJyYmJSQjJCQjIiMiIyMjIyMkJCQkJCQkJSUmJicnKCkpKSssLS0uLi8vLzAyNTg8QUpQVFtfY2dqbXByc3V3d3p8fHl4d3FvbmtnZGBiXltYU09LRD02MS4tLCwsLC0tLS0uLS4uLy8uLy4uLi4vLzAyMjQ0NjU0MC8tLSwsKikpKiwwOUJQXGdwdHR0dHR0dnh6eXFpX1ZMR0ZDQDw4My4rKCkuNT9MWml2gYWFg4CAf4KDhIJ9dGtbTENBQ0dKTlFTVlxjaXJ3e3p6d3FpXlBBNC4qKioqKiorKywsLi4uLi8vLi4wMDIyTW5hQUtISkFNVWBtdnx8e3h2dnd3dnZ0b2heUUc/Ojg1NTU1NDQxMTIyMDAxMTEzMzU1Njs+QUVFSEpNUFRWV1xdYmhvd32DhoiJiIWDgoGAfn59e3l2cm1oZGJiY2JhY2RkZmdoa2xub3Fzdnh4eXp7fXl5eHVzcnJyc3V3e358fHp9fHhxa2NaUklBOjY0NDhBTVhkb3N2enl5foGFiI2OjoyLiouLi4uLioiFf3dtZmJeXVxdX2NmaW5yc3R1dXV2eHl5end0cGxkX11eXmNnb3d8hYqMjYyKioyMjY2MiYR/d3BraXB1d3l5d3d3d3h3d3h2eHp5d3NvcHJ1dTY1NTU0NDMzNTU1NTU1NDQ0NDY2NjY4ODg5Ojo6Ozs7PDw8PD49Pj8/Pz4+PT09PT08PDw6Ojo6PDg6Ojs5OTk4OTk5ODg3NjU1NDQyMjAvLi4uLi0tLCsqKioqKiopKSoqLTQ6PUBDQUA6NCwrKikqKioqKSkpKSksLjI7R1BbZWx1dnRxaWFaUk9KRUA6MywoJycqKysqKCYlJCQkIyIiIyMjIyMjJCQkJCQkJCUlJiYnJygpKSorLC0tLi8wMDAxNDg7QkdNVFpgZGVrbnFxdHd3eHl7eXZ0c3Bta2hoZGJfXVhVUk1HQjs1MS0tLSwsLCwtLS0tLi4uLi8vLy4wMDAwLy8xMTM1NDU2NTIwLi0sLCwqKiwtMThCTVplbnN1dHR0dHZ4eXdyal9WTEdFQj45NTEtKSgpLDM6RlZkcn2BhIOAf3+AgYSEf3txYlVNSElLTU9RU1hcY2dwdHZ3d3dzbWJTRT47LCorKyoqKystLS4uLi4uLy4uMDI0NlZjSkJKR0tJSFdgbXZ8fHt6d3d4eHd2dG9oX1JIQDo4NTU1NTQ0NDQyMjAxMTExMzMzNTY4Oz5BREZJS05RU1VYXGJocHd9g4iIiIaFgoGAf359e3x5dHBsZ2NiY2NjY2BjZGVmaGlqbW9wcXJ0d3l7fHx6enh1c3JycnN2eXt+fX6AgYF8eXJrZFpSSD83MjQ4QU1aZm92eHl5e3+BhYiOj46Mi4qLi4uLi4qIhX93bmdiXlxbXV9iZWpvcnN2dnV2eHp8e3h3c25oYV5cXF5iaHB3gIaLjY2Mi4qLjIuKjImDfnRsampvdHd5eXd3d3Z3dnZ3eHp7eXd0c3R1dnc1NTY2Nzc1NTU1NTY3NjY2Nzc3Nzc3ODg6Ojo6Ojs7Oz09PD09PT4+Pj49PTw8PDw8PDs7Ozs7Ozk5PDs6Ojg4ODc3NzY1NTU1NTIyMy8vLy4sLS0tLSsrKSkpKSopKCgpKCksMTU2OTg0MCwqKCgoKioqKikpKSkpKSstMzlFUFtlcXV2dXJsZ2JeWVFNRj44MCwtMjMzMjItJyUkJCMjIyMjIyMjIyMkJCUlJSUlJycmKCgpKSorLC0tLS4vLzAxNDc6P0ZNU1peZGdqbG5wcXJ2d3d3dXNyb21raWZiX1xbWFRSTkhEPzczMC0tLS0sLC0tLS0uLi8tLjAvLi4vMTExMTIyMjI0NDY3NjQxLy0tLS0rKysrLjE1PkpVZGxydHRzc3N2d3h3c2xhV0xGQkE8ODMvLCknJyoyOENSYW96gIOCgoB/f4CEhYJ9d2xfVU9OT05RUlVYW2BmanJ3d3d3dG1iVElOSi0pKSkqKisrLS0tLi4uLy8vLzAxNlFsRzc8OT9JSUpWYW13e3x7eXh3eXh3dnVxbGFSR0A8OTY2NTU0MzMzMzMxMTExMzM0NDM2ODk8PkFFR0pNTlBSVFtgaHF5foOHiIiHhoSAf399fHp5dnJuaWViYWBhYWFhYWJgYWJkZWdnaGpucnN1eHp6enh2dHJycnJ0dnd5e3p+goSEgn57cWtiWlFFPDU0OURQW2Zwd3l5eXp+goaJj5CPjIyLioqMjIuKioeBeXBqZVxbWlpcYGRqbnN1dXZ2eHl6e3t4dnFrZF9bWVlaYGhze4KIjI6Li4uMi4uNjIyJg31za2hqbnN4eXh3d3V1dnd4dnh7e3p3c3R1dXZ4NjY2Njc3NTU2NjY2NzY2Njc3Nzc3Nzg4Ojo6Ojo7PDw9PTw9PT0+Pj4+PT08PDw8Ozs6Ojo6Ojo6OTk5OTk4ODg3Nzc2NTU1NTQzMjEwLy4uLCwsLCwrKyopKSkpKSgoKSkoKiwtMDAtKikpKCgpKSkpKSkoKCkpKSkqKy0yOENQXGlwdXd1dHBsbGZhW1RLRT86Oz9AQT8/NzEsJSQjIyMjIyMjIyMjJCQlJSUlJScnJygoKioqKywtLi4uLy8wMzc6PkNKUFdeY2ZrbG1vcHN0dHRzcnBua2lmZGFdXFpYU1BNSURAOzYyLy4tLS0tLCwtLS0tLi4uLzAvLy8vMDExMTEyMjIyMzM1NjUyLy8uLi0tLCwsLC0wMztHU2BqcnRzcnNzdHZ3d3NsYlhORkA/OTUwLCwpJycpLjY/TFtpdX2CgoKAf36Bg4SDgH1zZ11VT09QVVVXWlxeY2dscnZ2dnNrX1JQR0IvKioqKiorKy0tLS0uLi8vLy8vMjVhhl05OElRT09LVWNseH1+fXl4eHh4enh1cWxiVEdAPDk2NjU1NDMzMzMzMjI0Njg4Nzc1NTY3OTw+QURGSEpMTlBYXmdvdn6Dh4iIhYSCgH5+fXt5d3ZzbWdkYWBeXV5dXFpbWltaXF1gY2JkZmltcXV2d3d0c3FxcnJydHZ2eHp4fH6Bg4SCfnpyamFZT0U8OTtGUV1ocXh6enp9gISHio+Qj4yMi4qKjIyLioiFgnp0bGZeWFdZW2JobXJ0dHR1dnh5ent5dXRuaGBbWllYW2JrdHyDiIyMi4qKiomLjI2LiIJ7cmxpa25zeXl4d3Z3dnV0dXZ4e3t6d3RzdXZ1dzc3NzU3NzU1Nzc2Njc2NTU4ODY3ODg5OTg5Ojo5PD09Oz4+Pzw8PT09PTw8PT07Ozo5OTk5OTk5OTk5ODg4OTg5NjU1NTUzMzIzMjIvLi4sLSwsKysqKioqKikpKCgnKCgnJicoKCkpJycoKCcoKSkoJykpKCgoKCgoKCgqLjQ9R1NeaHJ3eXZ1dXNwbmhiXVZRTk9QUVNTT0hBNywlIyEiIiQkIyMjJCUlJSUmJicnJycnKCkqLCwsLS4uMDExMjU4PUJJT1ZcYWZpa21vcHJ1dHJxbmlpZmZjXVpZVlRQTEpHRUI+ODIwLi4uLS0tLS0tLS0tLS0tLS4wMDExMTEzMzQ0MjIyMTEzNDQyMjAwMDAuLSwuLS0tLzM5RVBfZ3F0c3Nyc3R2dnVzbmRZTkVBPTg0LisrKScnKS4zOkdXZ3B6goODf4B9foGDhIOBem9lXFZUU1VWWFpZW1xjaW9zdnV0bWFYUzc+NyssLCsrLCwrLC0tLi4vMDAwMTM2VXdnSUpJVFRRT1lkcHh9fXx5eXh6eXp5eXNsY1VHQDw5NjY0NDQzMjIxMzQ2OT08PTw8Ozg2NTc5PD1AQ0RGSUpQVV1ncnl/g4eHh4WDgYB+fXt6eHZ2cGxlYl5cWVlVVlVUU1NTU1JUVFVYWl1hZmtubnFxcXJycnJycnJzc3N1eHh6fX+ChIKAeHJpYlZLQj4/SlNfanF5e3t6foCFiYyQkI+OjIuLi4yMjIyMiIN9d3BnYF1ZXF5janBzdXR0dXd4ent6d3NxamRdWVdXV1xkbXd+houMjIuLioqKi4uMi4iCe3BraWttc3l5eHd1dXZ2d3d2d3t7e3Z0c3Z1dHQ3NzY3Nzc2Njc3Nzc2NjY2Nzc3Nzg4OTk6OTs7Ojs7Ozo7Ozw+Pj09PT08PDs7Ozs5OTk5OTk5OTg4ODg4ODg4Nzc2NjQ0MjIxMjAvLi4tKywsKysrKiopKiopKSgoJygoJyYnKCgnJycnJycnKCkpKCcpKSgoKCgnJygoKCsuNj1IUl1ocnZ5eHh3dXRxbmhmYWBhY2RmZmRbU0g6KyQkIiIjIyMjIyQlJSUlJiYnJycnKCkpKiwsLC0uLzExMTQ3OkFGTVNZYGRnamxucHFzc29saGZjYFxcWVVSTktIRUVBPjw3NTAvLi0uLi0tLS0tLS0tLS0tLS4wMTExMTIxMzM0NDQzMzIyNDUyMjIxMTEwLy0uLi4uLS8yOENQXGdvcnNzcnJydHR0cm1kWU5FQDw3Mi4rKSgnJycrMTdBUWBsd4CDg4B/fX6Bg4SFg351aGBZV1ZXV1dXVVdYXmZtdHV1cmhaWEw3QDosLCwrKywsKywsLS4uLzAwMDIyPlhfXFRXQ0BOVVVYZnB4fX18eXl4ent6eXlzbGNVSUA6ODY2NDQ0MzMzMzg5PENGRUZFREI+Ojc3Nzg7PD1AQ0dKUFlgaXJ5f4WIh4aDgYCAfnt6enh2dG5pY19ZVFNQTk1MSklKS0xMTExNUFFUWF1laGtucXBxcXFwcnJycnJxcXFydXZ6foCCgnx4cGdbVElBQktUYGtyd3l5e32AhYmMkJCPjoyLi4uMjIyLi4mFf3t0bWVgXl5hZmtwc3V0dXd4enl6eHVybmZgWlZXVVhdZW93f4iKjI2Li4qKi4yMi4qGgXdvaGdqbXN5eXh3dnV2dnZ2d3l7e3p2cnJ0dHNzNzc2ODk4ODg2OTg4Nzc3NzY2Nzg3ODo6Ojo7Ozs7PDw8PDw8PDw8PTw8PDw8PDo6OTk4ODk5ODg4ODg4Nzc3NzU1NTUyMTExMTExMC0tLSwrKioqKSkpKSkpKCgnJycnKCcnJycnJycmJicnJycoKCgoKSkpKScnJycoKCcoLDI0PkdRW2Nqb3N2dnV0dHNzb3BvcXJ1dnZyamVXSTkpIiEhIiIkJCQlJCQlJSYmJiYnKCkqKywsLCwtLzAxMjM2OT1DSU9WXGFmaWxub3BzcWxrZmJcWlZSUExKSEdDQT06OTg0Mi8uLi4uLS0tLS0tLi4uLi0tLS0wMDAxMjIzMzU1NTU1NTQ0NTU0NDMyMjIxMC8vLy8tLi4wMjhCTVhlb3NycXFxcXN0c3FtZVpPRT47NjAsJycoKCcpKy41P0xaZnR8g4KAfX5/gYOFhYaAeW5mXVlYWFdVUlJQVlxianJ2dXJhWFlANjwyLCssLC0tLS0tLS0uLi8wMTAwMztbZl5aYFs7SFRYVmhwen19e3l4eHl5eXl6dG1jVUpAOTY1NDU1NDMyNDY7P0VKTlBQUk9LRD45Njc3Nzk8PkFGS1JaY2xzeX+Fh4aGhIB/f318fHp4dXFtZ19ZU1BNR0ZGRURFRERERUZHR0lKTVJZXmRnamxvcXJyc3Jycm9ua2tsbW1vcXZ8f4GAe3RsYltQSkZOV2Jsc3l7e31/goaKjpCQj46NjIuLjIuLi4yKhYJ9dnFqZmVlZm1wc3R1dXd4eXl5endzbmhiXVdSU1NYXWdveYKJi4yLi4uLi4uNjIyJhoF3bGVmaW91eXl3dnV1dnZ2dnV3enp6dnRycXFxcDg4ODg5OTk5Nzo4ODk5Nzc2Njg4Nzg6Ojo6Ozs7Ozw8PDw8PDw8PDw8PDw8Ojo6Ojg4ODg4ODc3Nzc4NzU3NzQ1NTU1MTExMTAwLi0tLCwsKyoqKSkoKCcoKCcnJiYmJicmJycnJycnJiYnJycnKCgoKCgoJycnJycnKCgnKCorMDU9R05UXWNmaWxucXJ0dXd4enx+gYWFf3pzZlZGNSghISIiJCQkJSQkJSUmJiYmKCkqKSwtLS0tLzAwMjM1ODtBRkxTWWBlaGpsbW5vcW5oY1xZVFBOSERBPz48Ozg3NjQyMDAvLy8uLi0tLS0tLS4uLi4wMDAwMDExMTIzMzQ1NTU1NTU1NTY2NDQ0MzIyMDAwLzAvLS8uMDI4QExWY29ycnFyb3BxcnFxbWVaT0U9ODQvKygoKSgoKSstMzpFVmRweoCCgH18fX+ChoeGgHtxaWBbWFdVUVFPTE9UXmlydXR2YlFLPzg4Mi4sLC0tLS0tLS0tLi8vMDAwMTI1TWtfV2RWODtQV1dkcXp9fXt5eHh5eXl7eXRtY1VKQDo3NzU1NTU0NDU5QEdNU1hbXFtZVU5COzg1NjY3Oj5ARk9WXWZudn2ChoeGhIOAfn5+fHx6eHVxa2VeVExHQ0FCQkFBQkFBQUFCQ0NERktQV11gY2ptcXBwcXFydHRwbGllZWJiZmhudHp/gH15b2dfV1BPUVlibHR6e3t9f4SIiY6QkI+OjYyLi4yNjIuLiYiDfnp1cWtramtwc3V1dnZ4eHl6enl1cmxmXlVSUFJSV11ocnyEiYyMi4uLi4uLjYyMioV+d21lY2pwdnl5d3V1dXZ2dnZ1dnh4eHZzcnBxcG45OTk5OTk5OTk5ODg4ODc3ODc3Nzg5Ojo6Ojo6Ozw8PDw8PDw9PTw7PDw7Ojo6ODg3Nzc2Nzc3Nzc3NjY3NTQ2NTQ1MzExMjAwLy4tLCsrKyoqKSknJycnJiYoKCgoKSkmJSUmJycnJyYmJycnJycnJycnJycnJycnJyYoJycnJykrNDtCSE5SWFpdYmRobnV3fYCEhoiLiIaCfHJlVUc1JiMhIiQkJCQkJCUlJSUnKCoqKiosLS4uLzAxMTM1ODs9QkdOVlxiZWlrbG9vb21pYVxUTkhFQT89PDk2NTM0MzIxLy8vLy0tLS0uLi4uLi4uLi4uLy8wMDExMjMzMzQ1NTU2Njc3NTU2NjU1NDQzMzIyMDAxMS4uLzEzNz5KVGBrcHFyb29ucHFwcG1lW1BDOzUxLSonJygpKCkqLC83QlBfbHd/goF+fX1/g4OFhYF+dW1jXlpVUU1JR0dIUFtqcXZ0a1JCS05GPjYwLCwtLSwsLS0tLS8wLy8xMC8yNUhbW1tpWzc2UFRWZHJ6f356eXl5eXp6eHhzbWRVSkA6NzU1NjQ0NDY7QEhQWF5iZ2hmYl9WS0I5NjQzNThARktTWmRrcnmAhIeIhYSCgH99fH59enh2cmpiWk1HQz4/Pj5AP0BAQD8/P0FAQ0NHTlRbYWZpbW9xcnFxc3NxcGplXVlVVlpdY2tzd3p9e3JsZFtYVVleZ291en19foGEh4qOkZGQj42MjIyOjYuKh4WBfHt7eHh0cHFxdHV2dnZ3d3l7enl3dG9pY1tUUE9PUFVcZ3F+hYuMjYyLi4uLjI2NjImEfnNrZmZrcXd6eXd0dXZ2dnV1dXZ3d3dzcW5ubnBuOTk5OTk5OTk5OTg4ODg3Nzg4Nzc4OTo6Ojo6Ojs8PDw8PDw8PT08Ozo6Ojo5OTc3NjY2NjY1NjY3NjU1NTU2NTU0MzExMTAvLy4uLCwqKioqKSgnJycnJiYmJycnJygoJiUlJicnJycmJicnJycnJycnJycnJycnJycoJycnJiYlKCowNTk8Q0RIS09UXGRudnyAhIeJioqJhYN8b2NSQS4kIiMkJCQkJCQlJSYmJygqKysrLS0uLi8wMTM0Njc7P0RKUVheZGdqbG9ubW1oYFpQSkNBPTo4NjU0NDMxMTIwMC8vLy8tLS0tLi4uLi4uLi4uLi8vMDAxMjMzNDQ1NTY2Nzc3Nzc3Nzc2NjU1MzMzMjEwMDAvLy8xMzc9SFNfanBzc3BubW5vcm9sZ1xRRTo0LyspKCcoKSgpKisvNTxKWmdzfIGBfnx8fICChISDfnhwZ19ZVFBIRUNDR1BaZnB0Zk0+RFxcTT82MCwsLS0sLC0tLS0uLy8vMDAuMj1SWV5jZFRJUVFPVmdxen5+enl5eXl6enl3c21mWEtBOjc1NTQzNDQ4PUVOVV5mbHFycGxlXVBFPDY1Mzg8QktQVmBob3V9gYWGh4aDgYB/fn1+fnx6dnJqYlZNRkE/PT49Pzw+PT0+PD0/Pj9DR05UW2FlaW9wcHFwcXNxcW9pY1tRSkhNVFpja3F1enl2b2lhXVxdYmdvdnt7e3+EhoiLj5GPj46NjIyMjIuIh4SBenl6ent7enh2eHd3d3d3eHl4e3p5d3NtZl9XUFBOTE9VXml0foaNjY2Mi4uLi4yNjYyJgXpyaWZmanF3enh3dXV2dnZ1dXV2d3d2cnBtbm1rajg4ODg5OTk5OTk4Nzg4Nzc4ODg4OTo6Ojo6Ojo7PDw8PDw8PDw8Ozo6Ojo6OTg3NzY2NjY1NDU1NTU2NTY2NTU1MjExMDAwLy4tKysqKikqKSkpKCcmJiUmJSUlJiYlJSYlJSYnJycnJiYmJicnJycnJycnJycmJiYmKCYlJSYlJSUlJyovMTEyMzhASVBZY2pzeoCChIWFiIaGgnhvXUw4JyMjJCQkJCQkJCUoKCgqKSkqKy0tLy4wMDEzNTc4PUFHT1VaYWVoa25vbGxqY1xUSUM9OTY2NTQ0NDQzMTIyMDAwMDAvLS0tLS0uLi4vLy4uLi4vLzExMTIzMzQ0NTU2Njc3Nzc3Nzc3NjY1NTQzMzMwMjExMDAvLzQ4O0VSXmlwcnFubWttbnJwbWhdUUU6My4rKSgmKCkpKisqLjI7RlZlcXqAgn58ent+gYOEg396cmpcVlBLQj89PURNWGZwaEk3Ql5pYFFEODAtLi0tLCwuLi0tLS4vMC4vMTNBXV1iYVVTWVhTUFlkcXt+fXt5eHl6enp5d3RuZVdLQTs4NDQ0NDQ2O0FKVF1mb3R5eXpzamBVRz03NDc7QkpQVl9mb3N6gIOGhoWDg39+fn19fHx9e3dxaF9VSkI/Pjw8PD08Pj07Ozw9PT9AREdOVlthZ2psbm5vcXFycnBsZ19XS0M8P0dRWWFobXV1dnFrZ2RiYWRqcnl9fnx/goaIjY+RkI+OjYyLi4uJh4OAfXt7fXt9fX17e3p6enl5eHl6enx7enVvaWFaU05MSkxPVV9rdoCHjY2Mi4uLjIyNjY6MiYF6cWhkZWpyd3p4dnV1dXZ2dnZ1dnd3d3Nvb2xsamg5OTk5OTk5OTk5ODc4ODc3ODg4ODo6Ojo6Ojo6Ozw8PDw8PDw8PDs6Ojo5OTg3Nzc2NjY2NDQ1NTQ0NTUzMzM0NTIxMTAwLi0tLSorKyooKSkpKCgmJicnJiUlJSYmJSUmJSUmJycnJyYmJiYnJycnJycnJycnJiYmJicnJSUmJSUlJCQmKCkpKikqMDxDS1RdZmxydnl6fIKDhoV+dGRTPyohISQkJCQkJCUmKCgoKSorLCwtLi4vMDAxMzY4OT5ESlJYXWJnam1ubW1qZF1VTEI5ODc0NDMzMzMzMzExMTAwMDAwLy0tLS0tLi4uLy8uLi4uLzAxMTIzMzM1NTU1Nzc4ODc3Nzc3Nzc2NTU1NDMyMjExMDExMDA0ODtDTlppb3Fxbmxsb21wcW9nXlNHOzItKikoKCkpKSsrKiwzOUJQX2x2fX9/fHp6e36BgoJ/e3ZqW1NMRT86OTpBS1dicGtOOUxqb2NSRTkwLS4uLi0tLi4uLi0uLzAwMTIzRmJpYlNNamJSVVNXZnJ7fn17eXh4eXl5end0bmVXS0E6NzQ0MzM0NjxCTVZibHV7f4B9dWxiVUk8Nzc7QkhPVl1mbHN5f4KFhoaDgYF/fX1+fH1+fXt3cWhfVEpDPz08Ozs7PDw7Ozs8PDw8PUJHTlZbYGZra21wcXBxcm9tamVcUko/NzY9RVBYYGZsc3dybWlpZmdpbXR6fX5/gYSHiY2PkZCPjo2Mi4uKiISAe3l3c3V3fH1/f39+e3t6enh5enp8e3l0bWddVk5ISUhJT1VgbXeCio2NjYyLi4yMjY2Mi4d/eG1lYmhscnd4eXd2dnZ2dnZ2dXZ3d3Zzb21oaGdlOjo6Ojo6Ojk5OTg3Nzc3Nzg4ODg6OTk5OTk7Ozo6Ojo7Ozw8PDw6Ozo7OTk4ODc3NjU1NTU0NTU1NDQ0NDMzNDMyMDEvLS0tKywqKSgoJycmJicmJyYlJCUlJSUlJSUlJiYlJSYmJycmJiYmJiYmJyYmJycnJycnJiYlJyYmJiYkJCUlJSUlJiUmJyswNT9GTlRaYWVpbHB4foWGhHlpWEQtIiQjIyMjJCUmJygpKSorKy0sLS4uLzAxMjQ2OT5BSVJWXGJmaGtubm5tZ2BYUEY7NzQ0NDQ0MzMzMzIxMjEwMDAwMC8uLi4uLS4tLS8vLi4wMDExMTEzMzQ1NTU1Nzk5OTk5OTk5ODg3NzY2NTU0NDIyMTExMTExNDg7QExXZG1wcG9ua21ubnFvbGRcTkE1LSkpKikqKSkqKissMTg9S1podHt+fn16eXl8foGAgH13al9SSEE8NTU3P0lUYGpxSj9hdXFnVkc8NC8uLCwuLi4uLS0uLzAwMDAzO1p6e2VITlxcSElSWWRxen9/fHl4dnh4eXl4dW9lWEpAODQzMzIxMzc8RVBaZHB5f4SDfnVtYVVJPzw+QUhQV19lbXJ4fYOFh4eGgn9+fn19fn5+fn98d3FqX1NJQDs8Ozo5OTk8PDs7Ozs8OT1BR09WXWNpbG5vb29vbm9ubWdiW09HOjMwNDtFTlZgZm5xc29qamtsb3J1e31+f4KFiIqOj5CPj46MiouKioiDfHZybmlsdHh9foB/f398e3t7e3t7fXt4cWtkXFRMSEZGSU1XZHB8hYuOjouLi4uMjI2NjIiEfnVrY2FnbHJ3eXl3dXV1dXV2dHZ3dnZ1cW5ramhlYjo6Ojo7Ozo5OTk4Nzc3Nzc4ODg4OTo5OTo6Ozs7Ozo6Ozs7Ozs7Ojk6ODc3NjY3NjU1NTQ0NDU0NDQ0NDQzMjIyMS8wLy4sLCwqKCgoKCcnJyYnJicmJCQlJSUlJSUlJSQkJSUmJiYmJiYmJiYmJicmJicnJycnJyYmJScmJiYmJCQlJSUlJSQlJCYmJiowOUBFSk1OU1pibnmChoR5bVxELSQjIyMjIyQlJicoKSkqKiosLS0tLzAvMTM2OTxCR0xUWV5lZ2psbm5tZ2NcVUpCOzc0NDQ0NDMzMzMyMTIxMDAwMDAvLi4uLi0tLS0uLi4uMDAxMTEyMzM0NTU1Njc5OTk5Ojo6Ojk4ODc3NjY1NDQyMjIyMTExMzQ4O0BLVmFscHBvbmxubm5wcG1nX1JDNi4qKiopKioqKiopKi82O0lYZXJ5fn99enh4en1/gX98d2xfUkY9NjE0OD1GUl5rZD1CZ3ZvZlhKPTUuLCsrLC4uLi0tLi8vLi4vMENue3ZeT05ZVD5OWWNlcnt+fXt5eHZ4eXp5eHVvZFdKQDg0MzExMjQ4QEhQXGdzfIKEg351bGBUSEFBRklPV1tjanB4fYOGiYmHhIJ/fn59e3x+fn5+e3dxaF5QSEA7Ojk5OTk5Ojo5OTk5OTo9QUhQWV5kaWxub29vbm5vbWpkYVdPQjYxLi8zO0ZRW2NqbnFyb29ucHJ0d3t+fn+Ag4eMjo+Qj46NioqLiomGgXpya2ViZW1yeHx+gIB/fHx7e3t7e317dm5pYVhPSUNERUdNWGZyfYeMjo6Li4qMjIyNjYyJg3xxamJiZ2x0eXl5d3V1dXV1dXV3d3Z0c3Bta2lmZWI7Ozs7Ozs7Ozo6OTg4Nzg4ODg4ODo4OTk5Ojo6Ojk6Ojo5OTk7Ojg4ODg3Nzc2NTQ1NDQ0NTQ0NDIzNDQ0MTIyMC8vMC4tKysqKikoKCgoKCcmJyYlJiYlJiYlJSUlJSUkJCQlJiYnJycnJiYlJSYnJSUmJiYmJiYmJiYmJiYmJiUlJSUkJCUlJCQkJCQkJywxNTg7PUNLV2l2gIWEem5bQywjIyQkJCQkJSYnKCkpKiwsLC0tLS8wLzEzNjo+REtRWFxhZmpqam5taWRgWE9GPjk2NTQ1NDQ0NDQ0MzMzMzIxMDAwLy8vLi0tLS0tLi4uMDAwMTEzMzQ0NTU2Nzc4OTk4ODk5OTk5ODg3NzY2NTQ0MzMyMjMyMjEzNj1CSVRfaXFycG5rbW9vcHJwa2NXSTwwKysrKSkqKyssKy0vNjtHVmJud31/fnt4eHp9foCAfnlvYlNEODIwMzY8RVFdamFERm93cmhdTEA1Ly0tLSwsLS0uLi4uLS4wMjxfa2xyWEdOTlpTUVJnanR8fn57eXh3d3l6eHd1b2dZSkA4NDIxMTI0OT1HUl9qd3+DhIN+dWtgVExHRUlQVlpgZ252fIGHioqIhoGBf35+fHx8fH9/fnt3cWleUEY/OTg2ODU3Nzc3Nzg3NzY4PEJHUVpfZ2ltbm1tbm1tbmpnY1tSSD02ListMDU9RlNcZWxvcXFxcXR1eHp8fn2Ag4WJio6Pjo6NjIuKi4qIg353bGFcWV5ma3N5foB/fn18fHx9fHx8eXNsZlxTSkVCQUJGT1todH+Jjo6Li4uLi4yMjYyKhoB7cGZhY2Zrc3p5eHd1dHR2dnZ2dnZ1c3BuamhnZWFeOzs7Ozo6Ozs6Ojk4Nzg4ODg4ODg5OTk5OTo6Ozk6Ozs5OTk5Ojg3Nzc1NjY2NjQzNDQ2NTQ0NDMyMzQ0NDExMS8uLS4tLCsrKiopKCgnKCgnJiYmJSYmJSYmJSUlJSUlJCQkJSYmJycnJyYmJSUmJyYmJiYmJiYmJiYmJiYmJiYlJSUlJCQkJCMjIyMiIiIkJicsLi82QlFkc3+Eg3lsWD4pIyMkJCQkJCUmJygpKSosLCwtLS4wMDEzNjk/REpOVVtfZmZna25ubGhjWlNKQzw2NjU1NTQ0NDQ0NDMzMzMyMTAwMDAvLy4tLS0tLS4uLjAwMDExMzMzNTU1NTY3ODk5OTk5OTk5OTg3Njc2NjU1NDMzMjIyMzEyNDc8QUlSXWZucnBubG5vb3BycmxmW00/NCwsKSspKisrKyosMDU8RlVhbHZ9f357eHh5fH1/f357cmVTQjcyMDM2OkRPW2dbRVJ1dG9qX05BNi8tKysrLC0tLi4uLi4uMDNLamp1bExHRkhNTE5Sb25ze31+e3l4d3d3eXh3dG5nWUpAODQyMTIyMzk+SFVibXmAhIWCfnVrYFRMSE1TWFlcZG10e4GFiYmKh4SAgH5+fnx8fXt/f357dnBnXFBEPTs3NjY2Nzc3Nzc2Nzc2Nz5DSlNZX2ZqbW9tbm1tbm1rZl9ZUEU6Mi4rKy0xOEFMVmFqbXR0dHV4eXt9foGBgIKEiIyNjY2NjIyLiouKh4F7c2dbU1BYYGtxdnp+f359fX19fXx8endya2NaUUdCPz9DSFFdaneCiY2Ni4yLi4uMjI2MioaAeG5mX2JnbHR4eXh2dHR0dXV1dXV1dXNwbmpoZmRhXTs7Ozo6Ojs7Ojk5ODc3ODg4ODk5OTg5OTk7Ozs6Ojo6OTk5ODg4Nzc2NTU1NTQ1NTU1NDQzMzMzMjM1NTQxMDAuLi4uLCsrKyoqKScnJycnJiYmJSYlJSQkJSUlJCQkJCQlJiUlJicpJyYmJicnJycnJycnJiYnJycnJiYlJSUlIyUkJCQkIyMjIyIiIyIkJCMlJicsND5OYHF9hIJ5a1c8JyMjJCQkJCUmJygpKiorKyssLC4xMjI0OT1CRktRVFthZGdoaW1ubGlmYFdORz84NzY2NTQ0NDQ0NDQyMjIyMTEwMDAwLy8vLi0tLS0tLS4wMDAxMTIzNDU1NTU3Nzc5OTk5Ojo5OTk5ODg4ODY2NTU0NDMzMzMyNDU4PUJJUVpja3Bxb21tb29xcnZxamJRQzYuKSkrKisqKiwrLjM6P0dTYGpzfIB/fXl5eHt8foCAe3NnV0Y6MzE0OTpCTlllVEteenRxa2BQQzcwLCwsKywsLC0tLS0uMC8zUnF6d19GRUw+PkxVVWVpcXx/fnt5eHd3eHh5eHVvZllKQDk0MTIxMTQ7QUlXY296hIeHhH94bWBVUVFTVlhbYWdwd32FiImJiIWDf35+fn17e31+f359fHVwZltPQjw4NjQ0NTY3NjY1NTQ0NTc7QktTWmBnamxsbW1sa21saWNdVk1BOC8sKiosMDY/SlReaW1zdnd3ent+foCAgIGChYiLjY2NjIyMi4uKioeAenBlWEtKUFxka3J3e31+fn59fX17e3h1b2deWE1EPz09QEdTX2x7hIuNjouLi4qMjIyNi4mFf3VsZGBjaG50eHh3dHNzc3Nzc3V1dHRxcG5qZmVjYFs7Ozo7Ojo7Ozo5ODc3Nzg4ODg4ODg5OTk4OTs7Ojo5OTo6ODk4ODY2NDQ1NTU0NDQ0NDMzMzMyMjIyMjIyMS8vLS0sLCsqKioqKSgnJycnJyYlJiUmJSQkJCUlJSQkJCQkJSUnKCsrLS0rKCcoJycnJycnJyUlJiYmJiQkJCUlJSUkJCQkJCMjIyMiIiMiIyMjJCUmKzE+TV9wfYSCeWtXPicjIyUlJCQlJicoKSoqKywsLS4vMDI1OT9ESE1RVltdZGVpamtqamppY1tTSkE5NzU2NjU0NDQ0NDQ0MjIyMjIyMS8wMDAuLS0tLS0tLS0uMDAwMTEyMzQ1NjY1Nzc3ODk5OTo6OTk5OTk5Nzc2NjU1NDQzMzMzMzQ2Oj5DSVFbZGtwcW9ubm9xc3R2dG5mWko8MCoqKiorKissLzI2PEJLVGBrdHyAgX56eHh7fH6AgHx2bFtLPTUwMjU6Qk1XZFBTZ3Z1cm1jU0Q7Mi0sLCssLCwtLSwtLS4wOGx6dXViTkVEPkVRUVRmZnF8f317eXh3d3h4eXh0bmVYSkA5NDAxLzE1O0NNWWZyfoaHh4aCfHBkWVZWWFpcXWRpcnh+hYiJiYeDgX9+fn58fHx9fn9+fHl0b2ZbT0M6NjQ0NDQ0NTU1NDQ0NDU3PERNVVxiaGtsbG1tbGtpaWZhW1RJQDMwKykpKzA0OkVQXGZtcnZ5e3x/gIGCgoKDg4WJi46OjYyKiYqKioiGf3htY1VKSk5XYWhwd3p9fn59fn5+fHt5dGxlXlJIQTw6PkJLV2NvfIaLjI2Mi4yLjI2NjIqIg3x1amJgY2hudHh3dXR0c3JycnN0dHNxcm9tamZjYF1bOzo6Ozs7Ozs5Ojg3Nzc4ODg3Nzc4ODg4OTo6Ojo6OTg5OTg3Nzc2NjU1NDMzMzMzNDQzMzMzMjIxMTAwLy8uLSwrKiorKysqKCgnJycnJiYmJSUmJSUlJCQkJCQjJCQkJCUmJywwMzQ0Mi0rKSgpKSkmJiYlJSQkJCQkJCMlJCQmJCMjIyMkIyQjIyIiIyIiISAkJykvOkpcbXmBhXprWEEpIiQjJCUlJicoKSkpKisqLC4tMDI1OUFFSk5TVl1fY2RmaGtra2tqZl9WTUQ+ODY1NjU1NDQ0MzMzMzIyMjIxMTAuLi8wLi0tLS0tLS4uLjAwMDExMTIzNDY2Njc4ODk5ODk6Ojo6OTk5OTc3NjY2NTU1MzMzMzU2Nzo/RElRWmNqb3Fwb25xcnN0dnVxa2FRQjQqKisrLCsuMDM2O0FFTVZhbHV9gYKAfnp7e3x/gYB+eW9hT0E3MTE0OEFMV2RMTGp2dnFsZVZGOzItKysqKywsLS0sLSwwMEl6clVLXl1UUFdMTVFQaWlyfn99e3p5d3l5eXl4dG5mWEo/ODQxMS8yNz9GUFtodn+Fh4uJhn9yZ11YWFlcXWBlbHJ6gISIiYmGg4B/fn1+fH5+fX5/gHx5dW9lWU1BOTUyMjIzMjIzMzQ0MzM0OD1FTlZdZWprbW1tbmxsa2llXlpQRToyKykpKiwvMzhFT1tjanJ3eX1+gIGCg4SEhISGiYyNjYyMiomJiYmGhX51amBWS0dNVF5pcnh7fX9/fn1/fXt6d3FsZFtPRD06OjtCTFdnc3+Hi4yMi4uLi4uLi4qKiIF9c2dhXmJnb3R2d3VybnFxcnJzc3NzcnFubGpmYV5bWTs6Ojs7Ozs7Ojk4Nzc3ODg3ODc3ODg4ODk6Ojo6OTc3ODg3Nzc3NjU0NDMzMzMzMzIyMjIxMTExMTEwMC8vLi0sKyoqKioqKSgoJycnJyYmJiUlJiUkJSQkJCQkIyQkJCUkJicrMDU6PTk3MjIxMDAuLCgmJCQjIyQkJCQjJSQkJSMjIyMjJCMjIyIjIiMiIiIhIiUoLzlHVmp5gYR8bl1KMSQlIyQlJSYnKCkpKSorLC0uMDM2OkBGS09TWFxfYWNmamtra2pqaWNcU0pCOzY0NjU1NTQ0NDMzMzMzMzMzMTEwLy4vLy0tLS0tLS0uLi4wMDAxMTEyMzQ1Njc3ODg5OTg5Ojo6Ojo5ODg4Nzc2NjU1NTMzNTU2Njg8QEVJUVhhaXBycnBvcXJzdHZ2dG5lV0Y4Li0uLCsuMTU3O0BESlFYYGpzfYODgX98e3t6fYKCgHtyZVVEODIxNDhBSVRjS0ZpdnZybGZXSD0yLSwsKissLC0tLS0tMUR0d21aOE9PTVNXUVJST2Nqc32AfXt6eXh3eXl5eHVuZVZJPjg0MzEyNTtBSVNebHiCiYqLioZ/dGhgW1tcXV1iZmxydnyBhYaGhIJ/f359fXx8fH1+f316eHRuZFpOQTk1MjExMTIyMTExMTExNDk+R1BZYGdqbW1tbW1sbGtoY11XTUI3LyopKSkrLzM6Rk9bY2lwdnt+gIOGhYaDhISGh4qMjY2MjIqJiYmJhoV9dmxgU0tKTVReaHB2e31/f359fXx7enZwamJWS0M9Ojo7Qk5aaXWBiYuMi4yLi4uLi4uLiYaAeHBlYF5iaG50dnZ0cnBxcXFxcnJycnFwbWpnY2FeWlg7OTs6Ojs7Ozo6ODk4Nzg3ODg4Nzc4OTk5OTk4ODg4ODc3NjY2NjU1MjIyMjExMTEyMjIyMTAwMDAvMDAvLy4uLCsqKikpKSkpKScmJSUnJyUlJiYlJSUkJCQjIyUlJCQjIyQmKy4zNzs7OjY3Nzc3NjUvKiUkJCQkJCQkIyMjIyIjIyMjIyIiIiIiIiIiISEhISMkKS02QlJjc36CfnNjUDgnJiQkJycnKCgoKiorKywuLzI1PUNITVFUWV1fYmRoa2tqbWtoaWVeVkxEPzk3NjY1NTY2NTUzMzMzMzMyMjExLy8vLi4tLS0tLS0tLi4vMTAwMTExMjM0NTU2Nzg4OTk4OTk5OTk5ODc4OTk3NjQ0MzQzNDU2NzY6PkBGS1BYYGlxc3RycHBxc3V2eHZwZ1xLOzItLS0tMTY5PUJFSk1UW2Fqc3yEhYWAfnt6fX5/gYKAeGtbSjszMzQ3PklTYUpKanZ0cm9mWEk8NC0sLCorLCwtLS0tLS5LeHpxSjdVTkxJTVNNUldjaHJ7gH57enl4eHl5eXd0bWVZSz03NTI1NDg9RUxYY3B8hoyNjYqGfXRpYl5cXV1fYWVqcHZ5f4OFhISDf319fX19fn99fn99eXh1bWNZSz83MzIxMDAwMDAwMDAwLzY6QEdRWWFobWxtbW1tbGtpZWBaVUs/NS0rKysqKi40P0lTXGNqcXV7f4GEhoaEg4SEhoeKjI2Li4qJiYiJiYiFfnZsX1JKS1FWYWpxeXx+fn5/fHx8e3hzbmVcUUc/Ojg5PURPX2x5g4qLi4uLi4uMjIyLiomEfXZsY15eYmdudXV0c3JxcHBwcHFxcXFvbWtnZmNgXFdWOzk7Ojk6Ozs5OTk5ODc3Nzg4ODc3ODg4OTk5ODg4NjY3NzY2NTU0MzIyMjIxMTExMjExMTEwMC8wLy8vLi4tLSssKiopKSkpKCclJSUlJiYlJSYmJSUlJCQkIyMjIyMjIyMkJSgqLjE2NjQ1NjY5OTg3Mi0nJCQkJCQkJCMjIyMiIyMjIyMiIiIiIiIiIiEhICAhIyYrMjxNXW97goF2ZlU9KiYlJystLCgpKSoqKystLzI2PEJJTVNVW15fYmVmaGpqamlpZ2NfWE9GQDk2NTY2NTU2NjU1MzMzMzMzMjIxMS8vLy4uLS0tLS0tLS4uLzEwMDExMTIzNDU1Njc4ODc3ODk5OTk5OTg3ODk5NzY2NTM1NTQ1Njg6PEBDR0tQVWBob3N0dHFwcHN1dnh3c2xhUEA2Ly4uMTg8P0JFSlBSV11ja3N7g4WEgX9/gHZ7f4J/gXhvYE8+NTM0Nz5HUl5JSGx2dHNvZlhKPTQtLCwqKywsLS0tLS0tO2BwalE4W1dOTFBZVU1UY2Bmdn1+fXp5eHh5eXl3dG9mWEtAOTY2ODk+RUxTXWh0foeMjo2KhHxyaGNgX15dXV5gZGpvdn2DhIKBgX5/fX19fn9+fn1/fXl2cm1jWUs/NzMxMDAwLi4uLi4uLzA0OkJLU1pjam1sbGxtbWxraWNdV1BFPDMtKyksKy0wOUJMVV1janJ2e3+DhYaGhIOEhIaHioyNioqJiIiGiIeHhH12bF9STk5TWmJrc3l8fn59fn18fHt3cmtmXFFHPDg4OD1GU2Nve4WKi4uLi4uLjIyMi4qJhXxzaWNeXmJpb3Z2dHNwb3BxcXFxcXFxb21qZ2RiXlpXVzo6PDw6Ojo6Ozk6Ojk4ODc4ODg4ODg4ODk5Nzc3NjU1NTU0NDU1NDMyMjIyMTEyMjIyMDAvLy8vLy8uLy4tLSwrKyopKCcnJycnJSUlJSUjIyUlJSQkJCQlJSMiIyMjIyMjJCQlJygqKystLy8vMjY2NjEuKCUjIyIiIiIjIyMjJCQjIiIiIiIiIiIhISEiIiIiIiMlKTA6SlpreICBd2lbRi8mJSovMjMsKSkpKissLTI4O0FHS1FVWl5gY2RmaGlpaWlnZmRhWVBIQTw3NjQ1NTU1NTU1NTQ0MzMzMjIyMDAvLy4tLi0tLS0tLS0uLjAwMTExMTIzMjU2NjY3ODg4ODg4OTk4ODk4ODg4ODc3NzU0NDU1Njc6PD1BRUpNUVhfZ291dXVzcnJ0dnR2d3NuZFVHOjEwMjc8QEVITVBUWFtfZGlxe4KJhoN+c15qfIB5eoB8c2VURDgzMzY8RlBfSkdrdnNxbmZYSz41LiwsKSosLCwsLCwtKzJMZW5hUG58aVFPXl5OTGFeVmuCf3x6eXl5eXl4eHZvZllKPzs7PUFDSExUWmJteIGGi4yMiYN6bmdhYF9dWlhZXGJpcHd9gYSCf358fX18fX5/fn5+fXt6dHFrY1dJPTYzMC8uLi4tLS0sLC0vNTxDTFVdZGpta2xrbGxtamhlXVdPRDkxLCoqLCsvNUBIUlheY2tyd32AgYWGhoWDg4SGh4qMjIqKiIiHh4iHh4N8dmxgU1FSVVtlbHR5fX59fH18fHx7d3BpYlhNQTk2ODg+RlhkcX6HioqKi4uMjIyMjIyLiIJ7cWZgXF5janJ2d3RzcXBxcnJyc3Nxb2xqbGdlXlxaWVk6Ojw8Ojo7Ozs5OTk4ODg3ODg4ODg4ODg4ODc3NzY1NTQ0MzM0NDMzMjExMTExMjIyMi8vLy8vLi8vLy4uLS0sKyspKignJycnJycnJyclIyMlJSQkJCQkJSUjIiMjIyMjIyQkJCQkJiYmJykqKisvLy8rKSYlIyMiIiIiIyMjIyQkIyIiIiIiIiIhICEhIiIiIiIjJSkvOEVXZnR/gXpuYVA2KSkuNTk7MyopKSorLjE2O0BGTFFWWlxhZGNmaWhoaWloZ2NfWVJLQjw3NjU1NTU1NTU1NTU0NDMzMzIyMjAwLy8uLi4tLS0uLi0tLi4wMDExMTEyMzI1NjY2Njg4ODg5OTc3ODk5ODg4Nzc3NzY1NjU1NjY4Oj1BREhJTFFXX2VtdHd1c3NzcnR0dnZ0cGhZSj44NTk8QURJTlJWWVxfZGhsdXyCiIaCd25reX58cHuCfXVqWEk6MzM3PUVPXktIYXJzcm5mWks+NS4sLCssLCwsLCwsLCwtNEZTa2t1dGViYGFaTkJTZmt6gX17enl5eXl5eHhzbWZcUERDQUNHSk5SWmFqcnyEiYuMiYh/dWljX1xaVVJTVFhgZm53f4ODgX9+fH17e31+fn5+fnx5dnVxa2JWST02My8uLS0tLCwsKysrLzQ8Q01XX2dqbW5sa2xsbGllYl1XT0Q5MSwrKysvNT9HTVVcZGlvdHh9foGEhoaFg4OEhoeKjIyMiYmIh4eIiIiDfHZsYVVRU1pgZ292e35+fXx7fX18e3VwaWFUST03NjY5P0pcanWBiYqKiouLjIyMjIyMi4aBeW5kW1teY2lxdndzcnFxcnJycnNzcm9ramhmYl1cXV5eOjo6Ojs7Ozs6OTk4Nzc4Nzg4Nzc4ODc3ODc3NzY2NDMzMzMzMjIyMjExMTExMTAwMTEwMDAvLy8uLC4uLCwsLCopKSkpJyYmJycmJiUlJCQlJSQkJCQkJCQkIyMjIyMjIyMjJCQkJSUmJiUlJiYnJSgqJyclJCIiIiIiIiIiIiIiIiMjISEiIiIiICAgICAgISEhIiQnKzQ+UWJveYB8c2dXQi0pMTs/QTcsKiosLTE2OT1DSlFWWF5iZmVnZ2poaWloZmFdVk9MRDw5Nzc1NDU0NTU2NjQ0NDQ0MzIyMTEwMC8vLi4uLS0tLS0tLS4uLzAxMTExMjMzNDU2NjY3NzY2ODg5OTg5ODg3NzY2NjY1NjY2Njc2Oj1AQ0VJSk1RV1xlbXN2d3VzcHNzc3N1dXFqX1BDPDw+QUVKTlJYW15hZWdrcHZ6gIaFeHd1amZxZltoc3p5b15NPTQyNDlDUFtQT19xc3JrZVpLPjYvLCorKysrKyssLC0tKysrOFlybGdkcGRXVlRTXWh1e399e3t6eXp5eHh4dm9pX1VNSkpMTVBUWWFob3Z+hoqLioeCenJlXVpWUk1KTU9TXWZyfICDgX9/fnx8fH1+fn5+fX57eHh1cGliVEk+NTIuLS0tLSwrKysrKjA1PkdPWWFoa25sbWtra2xqZ2NaVUxCOC8rKyswND1HTlZdYmluc3d5fH+ChIeHhYKDhIaKi4yLi4qJh4aHiIiHg3x1bGFWUlVcYmlxeHx+fn5+fX5+fXh1bWVeUkU6NjY0OEFNXGx5goqLi4uKiouMjIyNi4iDfnZsYFlZXmVsc3Z3dXNxcnFxcnJycnJvbGhnY2BcXF5gYjs7Ojo7Ozs7Ojk4Nzc3ODc4ODc3Nzc3Nzg3Nzc1NDMzMTExMTExMTEwMDAwMDAxMTAwLi0vLy8vLS0uKywsLCwpKCknJycmJiYmJiYlJSQkJCQkJCQkJCQkJCMjIyMjIyMjIyMkJCUlJSUkJCUlJCMjJSYlJCMiIiIiIiIiIiIiIiIiIiEhICAhISAgICAgICAgISIjJCkvOUtdbHd/fnRrXEozKSw0PD80KSkqLC8zODxDR05TWFxhZGZnaGhoamlnZGFbVk9IRD45NTU2NTU1NDU1NDQ0NDQ0NDMyMjExMDAvLy4tLi0tLS0tLS0uLi8wMTExMTIzMzQ0NTY2Nzc2Njc3ODg3Nzg4Nzc2NjY2NjU1Njg4Oj1AQkVFSUxNUVZaZGxzd3d2dHJycnJ0c3NxbGJXTkVCREpNUVVbX2RmaWtwc3Z6fYCDgnZ1dHxkUEQ/QEReXlhvaEo4MDQ5P0taTk1ebHJybWVaSz42LywqKysrKysrLCwsLCwsKzVNXWNoa2NESE1MU2Bpcnt/fXt5eXd4eXl5eHVxa2NcWFJRUFRWW2BmbnV8goiLi4qGgXhtY1lTTEhEQkVNVV5pdn2Cg4F/f358fH19f39+fn18e3h3dHBpYlRJPjUyLS0tLSwsKysrKywxOUBIUFtiaGxta2xsa2traWVhWFNKQDUvKistMztFUFVdY2lvcnd6fHx/goSGhoWCg4SGiouMi4uJiIeGh4iIh4N8dWleV1VYX2ZtdHl9fn58fX19fHx4dWtmXFBCODQ0NTlEUF9ve4WKi4uLi4uLi4yMjIqIg311aF5ZWV5lbHN3d3VzcnJxcXNzc3Nyb2xoZWJeXl5fYmQ8Ozs7Ojo6Ojk4OTg4Njc3ODg3NzY2Nzc2NTY2NDIxMTExMTEwMDAwLzExMTAwLy8vLzAwLy4tLSwsLSwsKywsKSkoJyYmJSUmJiUlJSUlJCIjIyMjIyMjIyMkJCIiIiIjIyMjIyMkJCQkJCQkJCQiIiIkJCQjIiIiIiIiIiIiIiIiIiIhISAgICAgICAgIB8fICEiIyMnLTVDVmhzfX97cmFSPi4rLzc1LyorLC4wNTs+REpQV1xgY2ZpaWpqamllY19aVE9HQjw3NjU0NTY1NDQ1NTQ0NDU0NDMyMjIxMTAvLi4tLS0sLS0sLC0tLi4uMDExMTEyMzMzNTU1NTY2Nzc3Nzg4ODk4ODY2NjY2NjY1Njc5PD1AQ0VGSUxLTU9UWWNsdHZ3dnRycnJycnJzcW9oXlRMSEpPU1leYmhrbnN0dnl6fYCBg4BtWVpxaFVbYmleUHhWZmBfVDw6P1luYktHTl9wcmxlWks+NS4tKywsLCwsLCwsLCsrLDI7UFZXYmZRT11JRUxWZXF6fn58eHd4eXp7e3t5dnBoY15bWVdaXmNnbXJ5f4eJi4uJg392a19RTEQ9ODtATVllcXt/hISBf39+fn1/gH9/fn18e3p4dXVwaWJUST0zMC0tLCwrKyoqKystMzpCSlRcZGhramxqamtqaWdjX1hPRjwzLSktMjtGT1ZdZGpwcnZ6e31+goSGhoSEgoOEhomLi4uLiYiHh4eIiYeDfXZtYldTWmFpcHh7fX5+fn19fXx9d3VpY1dKPzYyMjI5RFRicH2GiouLiYuMi4uLi4qHhoF6cWhdV1hfZm10dnR1dHFyc3Jzc3RzcW5rZmNhX2BfYWRmPDs7Ozo6Ojo5ODg4Nzc3Njg4Nzc2NjY2NTU0NDMxMTExMTExMDAwMDAwMDAvLzAvLy8wLy4tLS0sLCwrKyopKSkpKCcnJSUlJiYlJSUlJSQiIyMjIyMjIiMjJCQiIiIiIyMjIyMjJCQkJCQkJCQiJCMiJCQjIyMiIiIiIiIiIiIiIiIiISEgICAgICAgICAfHyEhIiMjJSk0QE5gbXp/fXVmWUk1LCstLCsqKy0wNDc+Q0dOVVpeYmRnaWlqampmYVxWUUpEQDs3NjY1NjYzMzQ0NTU0NDQ1NDQyMjIyMTEwLy4uLS0tLC0tLCwtLS4uLzAxMTExMjMzMzU1NDU2NzY2Nzc4ODc4ODc2NjY2NjY2Nzg5PT0/QkVISUtMTU9QU1tia3B1enl1c3FxcXFzdXRzbmVbVFBRVVpfZWpxdXh/f3+AgYOHhoR/dlhAUFpSUEBYYF5kbE5KQUBHS2iYk3JJQ0xjc3FrZltLPjUuLSssLCwsLCwsLC0vSG59hIaEdGNmalZbSk5cWGVxenx9e3h3enp5e3t7enh2b2dhX11bX2NobXN4fYSHiouKh4N8dWlaTEA3MzM5Q1BcaHZ9g4aEgX9/fn5/gIB/f359enl4eHdzcGliVEk9MzAtLSwsKysqKisrLTM5Q0tUXGRqa2tqamppaGhlYVtWTUI4MSwrMDdCS1NdZmpvdHl9fn19foGEhoeFhIKDhYaJi4uLi4iGhoaHiImHg312al9YV11lbXF5e31/f39+fn58fXhyaF5VSDszMTIyO0ZYZ3OAiYqLjIuLjIuLi4mIhoN8dGtjW1dYX2ZtdHZ1cnFxcXJycXJycXBtamVjYWBhYWRlZjs7Ozo6Ojk5OTg3Nzc3NjY1NTY2NTU1NjQyMjIyMTAwMTEwMC8vLy8uLi0tLS0tLy8uLi4tLSsrKysrKSkpKikoKCcmJiYmJSUlJCQkJCQkJCQkJCQjIyMjIyMjIyMjIyQkIiIjIyMjJCQiIiMjIiIjIyMjIyMjIyIiIiIiIiIiISEhISAgICAfICAgHx8fICEhIiIiIiQoLjhHV2dzenx4bmFSPi0qKCgqKiwtMDU4PkVMUllcYGNkaGlqaWhkX1lUTkhCPjk3NjMzNTQ0NDQ1NTU1MzM0NDMzMjIxMTAwMC8uLi4uLCwtLS4tLS0uLi8wMDEyMDIzNDQ1NTU1NTU1NTY2NjY4ODc2NjY0NDc2Nzk6PD5BQkZISkpMTkxOUVFZYmhwdHp7dnRxcXBwcnR2dnFrZF1YV1tdZGpxd3yDh4eHh4iIiIqLjH5qVlFaVlpcY2ZpYlxFRExRREBMaHdtWUdad3NvbGVbSz02Ly0tLCwsLCwsKystL1t+gHZ4fXhpaXdrUklWX1hkcXx+fnx5eHd3eXt7fHt6d29qZWJgYmRpbXJ5fYGGiImLiYWCe3FlVkY7NDA0PUhVYW14gYWFhIF/f39/f4CAf399fHt4eHd3dnJrYlZKPTMuLCwtLS0sLCsqKi8zOkROWGFlaWlpaWlpamllYlxXUUg+NS4tLzU+SFRcZGtvdnt+f318fX6BhISGhoSChIKFiIuMi4qIh4eHh4iJiIV+dWpeWlxgaG9zeXt9fn5/f39/fnx4cGhcU0U4MC0sMDxKXGl3hIiKi4uKiouLioqKioaAeXVtYlhUV2Fob3N2dXJwcnJzcnF0c3JvbGllY2NjZGRlZmg8PDs6Ojo5OTg4Nzc3NzY2NTU2NjU1NTQyMjIyMTAwLy8vMTAvLy8vLi4tLS0tLy4vLi0tLS0rKysrKispKSkpKCgnJiYmJiUlJSQkJCQkJCQkJCQjIyMjIyMjIyMjIyMkJCIiIyMjIyQkIiIjIyIiIyMiIiIiIiIhISEhISEhISEhISEgICAgHyAgIB8fHyAhISEiIiIjJiozP1BfbXZ8enNqW002LCsqKywvMDQ2O0FITVRZXWFkZ2pta2pkXlpSSkVBPjk1NTQ0NTQ0NDQ0NTU1NTMzNDQzMzIyMTEwMDAvLi4tLSwtLS0uLi0tLjAvMDAxMjAyMzMzNTU1NTU1NTU2NjY2Nzc3NTY1NjY3OTs9PkBBQkVHSUtMTU1NT1BTVl5nbnV6enh1c3Fzc3N1d3d0cGpkX15gZGlvdX6DiY2NjY2NjY+Qj5GMcFZJSVdfbXJrbG5ZR1FDRkdJSUtUYl5PW3RubWljW0w+Ni8sLCwsLCwsLCsrKywuPllocGtmZF9ua1BPXl5UZHB5fn58eXh4eHp6e3x7eXZvamVjY2ZpbXF2en2BhYeIiYmFgntxZVREODIxOEJNW2ZyfYSEhIKBf39/f3+AgH9/fXx7eHh3d3ZxbGJWSTwzLiwsLS0tLCwrKiouNTxHTlhhZmlpaWlpaWloZWBcWE9FOTIvMDQ8RE9ZYmluc3l+gH59fH1+gYSEhoaEgoOEhYiKjIuKiIeHh4eIiYiEfnVrYVxfY2lwdnp7fX5/f39/f398dXBoXE9ANS4rKzM+T19seYSJiouKioqLi4qKioiFgHlya15WU1hhaXB1dnNycXJycnJzc3Nzb2xpZWRkZWZmZ2hnOjo7Ozs7OTk4Nzc3NjY2NTY2NTU0NDQyMDAxMTExMTAvMC4vLi4vLy4uLS0tLS0tLS0sLCwsLCsqKigqKScmJigoKCclJSYlJiYlJSQkIyMkJCQkJCQkJCMjIyMiIiIjIyMiIiMjIiIiIiIiIyMjIiIiISEhISEhISEhISEhISEhISEhICAgICAhIB8fHx8fICAhISAhIyQnLjhHV2Zwenx3b2NUQzIsLS0wMTM2OkBFS1JVWV1hZWlqampoYVlTTEdCPTo2NzQ0NDU1NTU0NDQ1NTU0MzMzMzMzMjExMDAvLy4uLS0sLC0tLS0uLi8vLi8xMTExMTExMjQ0NTU1NTU1NDQ1NTU1NTQ0NTU2ODw8PkBBQkZJSUpMTU1OT05PU1hbY2tyd3h4dHNycnFzdnh4eHVvamZkZWhscXeAh4qQkJKRkpKRlJSVk4peO0JYXVdnYWd9cFZkXEtEQ0dPVVtWT1Vpam5sY1pMPjcwLCwsLCwsKyssLCwsNlNLTlZXYVBJV1FOWFJbWGVwen19e3h3eHl6ent8e3t4c2pmY2Zmam90d3p9f4KEh4mHhYB6cWRTQzcyNTxFUl1qdn+ChIKBgIB/f39/gIB/f318eXZ2eHh2cWxkV0k7Mi0rKywsLi0rKyksLzY9R1JcYmZoaWhoaWlpZ2VgWlRNQzgxMjc7REtWXmVrcnZ8fn9+fXt9f4GEhYaFgoKEhYaJi4uKiYiHh4eIiYmIhX51a2BZX2RrcXd8fn1+fn9/f39/e3dvZFlMPTQtKyw1QFJhcH+HiouKioqKioqJiYmHhYF5cGhaVlNXYWlvcnRzb29xcXFycnJzcm1raGVmZmdpaWhnZTo6Ozs7Ozk5ODc3NzY2NjU1NTIyMTEyMTAvMTIxMjIxMjIxLy4uLy8uLi0tLS0tLSsrKSkrKyspKioqKSgpKCgnJycmJSUlJCYmJSUkJCMjJCQjIyMjJCQjIyMjIiIiIyMjIiIjIyIiIiIiIiIiIiIiIiEhISEhISEhISEhISEhISEhISAgICAgISAfHx8fHyAgISEgISIjJSoyP09ganR9fXdsXE9AMjIyNTY4Oj9DR01RV1tfYmZoaWpnYltUTUZBPTo3NjU0NDQ0NDQ0NDQ0NDQ0NTQzMzMzMzIxMTAwLy4uLi0tLi4tLS0tLi4vLy4vMTExMTExMzM0NDQ0NTU1NTQ0NTU1NTQ1NTY4Ojw9QEJDREZISkpLTE5OT09OT1NUWV5obnV4d3VzcnJxc3Z6enp3dW9qZmlqbXR7gYiOkJGRk5WVlpeXlpWRdV5WWVAzXXN/gnx3alxUV1JTTU1ZV1FOVV5mZGBZTUE3LiwsLCwsLCsrKysqLDJBXWFQWltRXVQ6QkVKVF5lcXp9fHt4d3h5eXl7fHt7dm9qZmVoaGxwdXV4e3x/goWHh4WAenFkU0M4Mzc+SVZhb3mBg4WCgH9/gICAgIB/fn59fHl2dnh4dnFsZFdJOzItKyssLC0sKysrLTI5QUpUXGJmaGloaGlpaWdkX1lRSkA3MjU9QkpTXGJobnN3e3x9e3p6e3+BhYaGhYODhIWGiYuLiomIh4eHiYqLioV+dGlhXmBobHN5fH59fn5/f39/f3t3b2RZSjs0LSwvNkNYZHSAiIuLioqKioqKiYiGh4WAeG1lWVVSWGFqcHRycnFwcXFzdHNzcnBta2ppampoaGhmZF48PDs7Ojo5OTg3NjY2NjU1MzMzMzEwMTEwMjExNDY2NzQzMTAvLy4uLS0sLCwrLCwsLCsrKiorKykpKScoKCkpJiYlJSUlJSMlJSUlIyMjIyMjIyMjIyMjIyMjIyIiIiIkJCIiIiIiIiIiIyMjIyIiISEhISEhISEhISEhICAgICEhICAgIB8fHyEgIB8fHx8hICAiISEiIiMmLDlFVWNueH16cmVZSzs2Njk7Pj5DSExSVFhdYWRmaGlnY11VUEpCPTg3NjY2NTQzNDQ0NDU1NDQ1NTQ0MzMzMzMyMTEvLy4uLi4uLi0tLS0tLS0uLi4uLzExMDAxMjQzMzM0NDU1NTU0NTU1NDQzNjg4Ojw+QEJERUdHSUpLTE1OTk9PTlBPUVNZYmpxeXZ0dHNycXN2eXx9eXdybWlqaW51en+Fi46QkZKYmZiYmZqYk42IhH9rU3mBgIF/eW9iXUxFVl5ZVVFPTU9QUllhXFFDNzEtLSwsLCwsKywsLSotNVpnV1RhVmNUOkdMU1heaHV8fX16enl3d3h6e3t7eHNsZ2NjY2ZpbG9ydXl5fX+BhYWDgHpyZFRFOjU4QU5bZ3J7gYODgoB/f35/gIGAf39+e3p5dnZ3eHdzbGNWSDsyLSsrKysqKioqKy40O0ZOVlxjZmdoZ2doaGhoZF9XT0c8NTk8QkhQWF9kaW5ydnl5d3Z4eXp/gYSFhoWEg4OFiIuMjIqKiYiJiYqKi4qEfXVqYmFianB1en19fX5+gICAf397dm5kV0c6MywqMDtIWmp4goiLi4qLi4qKiYiHhIeEf3ZsYlVRUllhanF2dXJzcXBwcXJzc3FvbWxsa2xqamhkZGFaPDs6Ojo6Ojg4NzY2NTU2NDMzMjEvLzAwMS8xNDU4Ozw6ODUzMTEwMC4uLi4tKy0tLCwrKyoqKiopKSgnJygoKCYmJSUlJSUkJSUlJSQkIyMjIyQkIyMjIyMjIyMiIiIiIyMiIiIiIiIiIiMjIyMiIiEhISEhISEhICAgICAgICAfHyAgHx8fHyAgHx8fHx8fICEhISEhIiIlJSkyPElaaHJ7fXZtY1dHPDs9P0JESU1SVlhdXmJlZWhoZmBZU0tGPTk3NjU1NDY2NDQ0NDQ1NTY2NTU0NDMzMzMzMzExMC8vLy4uLi4tLS0tLS0tLi4uLi8xMTAwMTIyNDMzNDQ0NDQ0MzQ0NDU1Nzg7PDw/QUNERkZISUlKS0xNTk5PT09PUE9SVl1kbHV4dnRzcnFzdnd6fXt5c25qam1xc3Z7gIWKjpGSlZeampqYmJSRiIV8e3x/gH+BgHtzZ1xOR1ZbWFpQTEpNT0xMWV5WSD00LissLCwsLCwsLCwsLTVFXVxHW1ZXT0ZXVkc+UGRteH59enp5eHd5enp6eHVvamRiYmJiZ2trb3N1eHp9f4GCgn95cGVURTk2OkNQXmp2f4SFg4KAf39+f39/f35+fXt6eXZ3eXh3c2xjVkg7MSsqKioqKioqKiowNj1HT1dfZmhpZ2dnaGhnZmJdV09HPzxARElRWFxiaGxscnV2dnNyc3d6fYKFh4aDhISEh4iLjYyLioqKi4uMjIuKhH51a2BgZmxyeHp8fX1+fn9/gH9+enNrYlNEODEsKzE7TV9ue4WKi4yLi4uKiomIiIeGgXxzaV5TUFJbYmpydHRycnJycnJzdHRzcW9ubGxsbGpoZmBbVjs7OTk5OTk4NzY2NjUzNDMyMjEvLy8uLy8yMjc4PD5CQkA9OTU1NDIxMS8uLi4uLS0tKysqKSkpKSkoKCcnKCcmJiUlJSUkJCUlJSUmJiUlJCQlJSQkIyMjIyMjIyMjIyIiIiIiIiIiIiIiIiMjIiIiIiEhISEhISAgICAfHx8fHx8fHx8fHx8fHx8fHyAgHyAgISEhISIiIyUmKjNCTl5odH16c2piVUdBQkNITFBUV1pdX2JkZWZnZWJcV09HQjs4NTQ1NTU1NjY1NTQ0NTU2NjU1NTU0NDQ0MjIwMDAwMC8uLi0tLS0uLi0tLS0vLy8wMTEwMTEyMTIyMjIyMjI0MjM0MzU2Nzg8PT5BQkRFRUVISUhJS0xMTU9PTU5PTk5NT1BVXmdydnZ0c3RzdHR3eXx9enVvbGpsbG1wc3p/hIqNkJSVlpiamZeVkYuEgHx7e31+gYB7dGteUk5VT1BVVlZNR0tPU1NUV1JHOzQrLi4tLCwsLS0tLC4uMDU6PVFOUUVET1BDPlBrZ3d8e3h3d3l5eXp5eHV0bGliW11eYWVpZ21wcXV3eXt+f399d2xiUkY4OT1IVGJueYKGhIOBf39/fn9+f39+fXx7eXh2eHl4d3NsYlZHOTArKSkpKSoqKSkrMThASVJaYWZnaWhoaGhnZ2VhWlVORkJBRUpQWVtfZGhrbXBycW9tb3J2en6Ag4SFhISEhIeJjI6Oi4qLi4yMjY2MioR+cmdiYmdtdHl6e31+f39/f4B/fXhyaV1OQjcuKywzP09icn+Ii4uMi4uLi4uKiYiHhoF5cWdbUVBSW2NscXV2dHNyc3N0dHR0cnJwcG9sa2trZmNcVVA7Ozo5OTk4ODc2NTU0MzMzMjIxLy8vLi8uMTY6O0BDRklGREE+PDs4NTU0MzExMjAuLiwsKyoqKikpKCgnJygnJiYlJSUlJCQlJSUlJiYlJSQkJCQkJCMjIyMjIyMjIyMiIiIiIiIiIiIiIiIjIyIiIiIhISEhISEgICAgHx8fHx8fHx8fHx8fHx8fHx8gIB8gICEhIiMiIiIjJScvOkdWY254fHdyamFTSEhLTlJWWl1gYWJkZWZlZGNgXFVORj45NjY2NjY2NjY2NTU1NTU1NjY2NjU1NTU0NDMzMTAwMDAvLi4tLS0tLi4tLS0tLy8vMC8vMDEwMTEyMzM1NDU1NTU1NTU3ODk8PUFBQ0NFR0hISUlJSkxMTU5OTk1MTUxLSElKT1dibHN2dXNxcnR0d3l7fHp1b2xpaGZnZ2xweXyBh42Qk5WWlpiWko+Jgn95enx+f35+eXFqXVVVUlJOTkxOSURHT1BOSk1QSkQ5LS0tLSwsLC0tLSwtLS4zPVBXUExDSVNRQ0FPbWl3fHp4d3d4eXl6eHd0c2xnX1lYWmBma25vbG5ub3J2eXx9e3VrYVBEODlASlZkcXyBg4KAf39/f35/fn9/fn18eXZ2dnh5eHdzbGJWRzkwKykpKSkpKSkpLDI5QUpTW2JmZ2hpaGhoZ2ZiX1lVTUlER0pSWF5fYmVqbGxtbGtpaWxwdXl8f4OEhoaEhISHiYyOjo2Ni4uLi4yMjIqFfnJoY2ZqcHV6e3x9fn9/f3+Af3x3cWhdTkA2LisqNkNUZHSBh4yMjIuLi4uLiomIh4R/d25kVk9PVFtkbHR0c3NzcnJycnN0dHNzcXBvb25taGNfV05JPDw6Ojk5ODg4NTU0NTQ0MTIxLy4uLi4vMDM2Oj1BRkpNTUtIR0VCPz88PDs4Nzc2NTQxMS4sKSkpKSgnJyYmJiUlJSUmJiUlJiYlJSUlJSUlJSQkIyMkJCMjIyMjIyMjIiIjIyMjIyQiIiMjJCQiIiEhISEgICEhICAgIB8fHx8fHx8fHx8fHyAgHx8fHx8gICAgISQkIyMhISQmKzI/TVxodH58dnJrZFlUUlZYXGBjY2VmZmZpZmRhX1hRS0M8NjY4NzY2Nzc3Nzc3NjY1NjY2ODk3NjU1MzMzMzEwMDAwMC8tLi8uLi4uLS8uLy0vMDEyMjQ0NTU1NjY4NjY3ODY2ODg7Pj8/P0FDREZGSEhJSUpKS0tLTEpLS0tNTEtKSEZDRElTXmlxdHZ0c3NzdXd4eXt6dXFrZmRgX2JlaHB3e4WMjpGSlpWVlZOOh4F+eXl4ent4c25oYV5bWVZUTU1KSUpGQ0dLR0NIUE1MSC8pLi0sLCstLC0tLS0sMDZGWFFRSVFVR0E9PkpreXx7end2dXd6end1dXJsZFpXV1leZ21jRkBEY2tucXV6fnt1al9QQzk9RE9daHV9goKBgH5+fn5+fn5+fX57end3dnZ3eHh2cmthU0Y4MCwoKCcnJygoKS00O0JLU1xjZmdoaGlpaWlmY2BbWFJMS0xRVlxfY2VpaWlqaWhkZGRpbnR4e3+Cg4SEhIWFh4qNj4+OjoyMjY2OjoyIhX90a2dnbXN2eXt8fX1/fX5+gYB/eG9mWEs/NS0rLjhGWGp3hIqMjI2Mi4uLi4uKiYeEfnVsYldQTlNeZ210dHNzcXFycnR0dHV1dXRzcG9vbGZgWlFJSDw8Ozo5ODg3NTU1NDMzMjIxMC4uLi4uLzAzNjo/REhMUlJQTk1LSUhGRERDP0BAPjw7OTk1Mi0rKikpJyYmJiYlJCUlJiYlJSYmJSUlJSUlJSUlJSQkJCQjIyMjIyMjIyMiIyMjIyMlJCQjJCQkJCIhISEhICAgICAgICAfHx8fHx8fHx8fHh4fHx8fHx8fICAgICAjIiMjIiEkJicuOEZYZXB6fXt3cmxlYF5eXWFkZmZpamlpaWdjX1tUTUY+OTk5ODg2Njc3Nzc3Nzc3ODg4Ojg5OTc2NjQzMzAxMDAwMDAwLy8wLzAvLzAwLjE0NDQ1NjY2ODo6PD0+PT5AQEFCQkRERkZGRkhJSklJSUtLS0tMTExMS0tLS0xLTEpIR0NCQD9DTFlkcXR2dHNzdHR3eXl5eHZwaWJcWFdaXGBrcniAh4qPkZWVlpSSjoiBfHl5d3Z0bmVjYVpZV1ZZV01LTEpFPjxDR0dHSVBTU1xMJS0uLC0sKywsLS4tLS40TE1XZltTVEA8NzpJaXp6e3h2dnV3eXlzcnVyamRcWFpbamhNPURAOF1pZWpzeXp4c2hdTEA7P0dUYG13gISDgH9+fn19fX19f359e3l3dnZ2d3h4dnFqYVNGODErKCgnJycoKCouND1GTldeZWdoZ2hpaWlpZmNhXlpWUE9SV1teYWVnaGhpZmJfXl9jaW10eHt/gYKCgoKEhoiMjo6OjY2MjI2Njo6NioV8c2ppaW90enx7fHx9fn9/f4GAfXdvZlhIPTQtLTE7TFxufYSKjYyNjIuLi4uLiomHhH50aF5STlBUXWVscnVzc3Jyc3N0dHR1dXV1dHFwbWhjW1NNSEo7Ozo5ODc3NzU0MzMzMjEwMS8tLS4uLi4uMjY7P0VJTFJTU1JRT09NS0xLSklJSklGREJAPTk1MS4qKSgnKCcmJSUlJSYmJiYmJiYmJSYmJiUlJSUlJCUlJCMjJCQkIyMjIyMjJCUkJSUlJSUlJSQjIiIhISAgICAfHx8fICAfHx8fHh4fHx4eHh4fHyAgICEhIB8fICAhISEhJCYoLTVAUWBsdn1/fHh0cGxraGhoa2tra2tqamllYl5ZUktEPzs5OTk5Nzc3Nzg4OTg4ODg5Ozw+Pz8+Pjo2NDIyMS8xMTAvMjExMzIxMzQ1Nzc7PDw8P0JCQ0dHSUpMTE1PT1BSUlRTUlRUU1NTU1JSU1NSVFJQUE9OTkxKS0tJSUlGQ0I+Ozo5PUlVY290dXNzc3N0d3d5end0cGVcU1BOUFNcY21xeYKIj5GRk5OSkYyGf3x4d3d3cGZdWVZSUU1OVlFGR0ZDOzs/Q0dIS01PTU9RXUAjKiwtLC0sLCwtLC0tMDw8V2NgXlM9OjNBWnB7fnl4d3d2dnVzamhwcGplYFxcYVpcVUVAN0pjYWFqc3d2dnBoW01APEJKV2RveoGCgoB/fX19fX19fH5+fHp4dnR1dHZ3d3VxamBURzgwKygoJycmJygoMDZASU9aYWVnaGhoaGhqaGhmYmBcWFZWVlpdYGRmZWVkYl9ZWFhcYmhvdHh6foCAgYGChYeKjo6Ojo2NjY2OjpCOjYqFfndta2xxdHl7fHt6fH5+f4CBgHx1cGVYST00Li41Pk5fb32Ji42MjIuLi4uLiomHhoR7cWZbUU9RWWBpcXR0cXFxcXJzc3R0dXd3dXRyb2xnYFhOSEVKOjo4ODc3Nzc1NDQyMjIwLy4uLS0tLS0tLzI0Nz1CR0tRUlJSU1JQT05NTlBQUFFST1BMR0RBPTk0MCspKCcnJyYmJiYmJiYmJiYmJiUmJiYlJSUlJSUlJSUlIyQkJCQjIyMkJCUlJyUlJSUlJSUkIyIiISEgICAgHx8fHyAgHx8fHx4eHx8eHh8gHx8gICEhISEhISAgISEhIiUnKS40PkpaZnF7gYB8eXd0dXNzcXBvb3Bwb29qZ2ReVU5IQTw7OTk5OTg4ODg5OTg5Ozs9QkZJSk1OS0lDQDg1MzIyMzMzMzQ2Nzo7PTw/QERGRklLUFBQUlVXV1lbWl1hYWFjZGdmZmVlaGdlZWVlZWRkYmFfXVxbWFRRTkxKSEdEQj88Ojg1NTxEUl5qdHZ0c3NzdHZ3eHd3dG1jWk1HQUVMVV5pb3Z+h4yRkZORkZGNg356eHZ3eHNrY11YU01KTVJRSkZEREFBQ0NHTE9RTkxOSl5pTComLS0sLSwsLSwtLzA3PmBrX19LOjk2TWFxeX15d3d3dXZ3cF9WX2hpZWFcYVM9RUg/S1hgWVdbZnJ5eHVuZVhMP0BFTlxpdHyBgoCAf319fX19fXx+fXx6eXV0cnJzdXRxb2heUkU4MCsoKCcnJicpLDE5Q0tTW2NnaGhoaGhoaWloaGZlYV1bW1tcX2FjZWNgXVlXVFJXXmVrcXR4en5/f4GBgoWIjI6Qj4+NjY2Njo6OjY2KhoB4cG1udHh6e3x7fH1+fn6AgYB9d3FnWks9NC8vMz9SY3KAiIuMi4yLi4uLi4qJh4aBem9kW1FOU1lganFzc3NzcnByc3R1dXZ3d3d3c3BtZV5VTEVEUDg4ODg3Nzc2NjQzMTExMS8uLS0tLCwsLCwuMDU5P0NHTFBRUVFRUVBQT1FTVFRWVlNVU1NQS0dBPDUyLSkoJygnJyUlJiYmJiYoJyclJiYmJSUmJiYmJSUlJSUlJSUmJiQkJSYmJiYnJiUlJSQkJCQjIyIiICAgIB8fHx8fHx8eHx8fHx8fHx8fHx8fHx8gICEhISAhISIiIiQkJisvNDtEUWBqc3yBfnx6enp4dnh2dnVydHJybmlkXVVORj87Ojs7Ojo5OTk5Ojo6Oj1BR1BUWVxfYF5bVU1BNjU0NTQ5Oz1AQ0VGSU1NT1NWVlpaXF5fYmVkZ2hpa25tb3Jzc3R0dXZ1dnZ3d3Z2dHV0dHJwb29saWdkX1tWT0tHREA9ODc0MzQ8R1BdaXJ0dHNzc3R2eHZ5dnRuZFZMQTo+R1JbZW51foWMj5GTkZGPioV/enh2dXd2b2xmXlhSVldUUUtIREJBQ0JERElMTlRTTE1KRGxcOSstLS0sLzIvLy8xQFxybV9bQzk4PlhmXXB8enh2dnZ1dm9dXWJeYFtYWlVbSV5GQERdVk1RYmxxdXJzcGdZS0JCSFNfbHZ/gYGBf359fX19fX19fn17eHZ1cnFxcnNycG1oXVFFODIrKSgoJicoKS00PEVOV15kaGlpaGhpaWhqamlnZmNeXFxdX2BiY2RjXVVST05QV19nbXJ1eXt+f39/gYKFiIyNj46Ojo6Ojo6PkY+NioeCenJxcXZ6fHt6ent9f359f4B/fHhwZlpMPjUyMjlEVmd2goqMjIuNjIuLi4uKiYiGf3huYllRTlNbYmtxcnJxcXFxcXJydHZ3dnZ3d3Vxb2VdVEpFSFU4ODg3Nzc2NTM0MzExLzAwLi0tLSwsLCwrKy4yNjk+QkdISkpMTE1MTlBQUlNTV1laWFhYVlNQTEdCOjQvKykoJycmJSYmJiYmKCcnJygoKCcnJiYnJyYmJiYlJSYmJiYmJicnJiYnJycmJSUkJCQkJCQkIiEgICAfHx8fHx8fHh8fHx8fHx8fHx8fHx8fICAhISEgISIiIiMlJSgrLzI3PkpXYmx1fX9+fHx8fHp8enp5d3d1dXNtZ11VTkU/PTw7Ozw8Ozs7Ojk7O0BFTVZeZWtucHJxb2pgUUM7Oj1AQ0hJTVFUVlhaW11jZGdpa21ucHJycXR0dXd5enl4e3x+fX5+f39/f39+fn18fX19fHp6enl3dHBqZl9YUEpCPTk0MzQ4PkZSXmpzdXVzc3N0d3h3eHh0bWNQQDIyOEJOWGFqdX2GjJCRkpGQj4uFf3x4dnZ3eHh1cWpoYV5YU1BQS0dGRkdFRURGSElPWVNEQkJKYGg2KSstLSwuLjExO09oaFZXTzk5OUpgZVNde3t5dXV1dG9oXmNfVldVUE9MT2JcXV1FT1JfZ3NtdHB9dXFkV0pBQ0pWY294gIOBf359fHx9fX19fXt7enl2cnFxcXFycnBtaF1RRDcwLCkoKCknKCsuNj5JUVhgZmhpaWhoaWloampqaWhmYV1dXV9hYV9dWVRRTUpMUFdgaG1yd3p7fn9/f3+ChYeLjpCOjo6Ojo6Oj5COj4yIhX51dHR4e3t8enp7fX5+foCAf355cmhbTUE4MzM7R1hoeIOKjIyLi4qLi4uLi4qIhn94bmJXUlJXX2ZrcXJyb29wcXFycnR2d3p6eXh3dHBpYFRLR0pcOTk5NzY1NTMzMzEvLy8uLi4uLCsrKywsKysrLi8zNzk9QUJFR0dISUtOTk5QUFVXWFlaWldXVlNRSUM+ODQuKyonJycmJiYnKCgoJygoKCgnJycnJycnJycpJSUmJycnKCkoJycmJycnJyUlJCQkJCUlJCQiISAgICAfHx4eHx4eHh8fHh4fHyAgHx8fHyEhISEhISIiISIkJigqLC8yNjxCTldkbXR4fHt9fX19fn59fXt7eXh2c2xkW1JJQj8+Pj48PD08PDs9PkFHUVZfaXN6fYOEg397cWNVSEVIS09TWFtfY2hobG1ucXJzdHV3d3l8ent7e3x+fn9/gIGBgoODgYKDhIWEhISCgYKBgYGCgoOBgYB9enVvaWJaUUxGQDw+QUNJUl5ocXV1dHNzc3Z2eHl5eHl7e3xeLy0/SVNeanR8hY+SkpKQkI6KhYB8eXd4dnh5enh4cmljV1ZRUk5NSUtIRkhFRkdJTVZMQ0FEQj9VSyQqLywvLzE8YFNLUVBcU045OztRX2prZXR6enRzd3FlYl5aUlBTUUpKRkRSU2RhWkpOT1diamloX1dsYlVJQ0VPWmhwe4GBgH9+fXx8fHx8fHx7enl3dHBvbm5xcnFvbGddUEM3MCspKCgoJykrMThCSlRbYmdpaWloaGlpaWpqaWlnZF9fX15eX15ZV1BMSUdHS1FYYmpwdXZ6fH1/f39/gYOIi46Pjo6Pj4+Pjo+QkI+NiIV/eHV1eHt8fHp7fX19fn+AgH58eHFoXlFEOzQ0PktdbXyHi4yLioqLi4uKiomJiIaAeG1hV1RUW2FnbXFzc3BvcHFyc3JzdXd6fHt6d3VvaGFVTElQYjg4NzY1NDQyMDAvLy8vLi4tLSwrKysrKyoqKisrLS8xNDg4Oj09QENDRUZISkpQU1VXWVpbWFlYWFJNSUI7NjIuKygnJycnKSkpKCgpKSkpKCgnJycnJycnKScnJycoKCkpKSkoJygoJycmJSQkJCQlJSMjIiEgICAgHx8eHh4eHR4eHx4eHx8gIB8fHx8hISEhISEiIiEiJScoKisuMjU6QEVOWGRqcXN1eXt+fX9/f39+fnx7eXl1bGRcVE1GQz4+PTw8PD08P0RJT1hga3aAhoqOkY+Nh31xZllTVlxgZGdsb3FzdHZ3d3l7e3x9fX9+fH19fXt7gICBgYCBgIKCgIKCgoKEg4ODgoGDgoOFhYWHhoeFg4J/fHh0bWZgWVZST05OUFZfaXJ0dHRzc3N0dnZ3gZGcoJ6joHooM0VQXWd1f4eQlJORj4+NiYaAfHp5d3d4eXt6dmtpYVFSWFlSUk5LSUpKSUpPUVRRUUE2REE8O1dULCgxMjE8T2dvV2JeWVRNNzxBU15kcXV3eHd2dHZyZFlPUltTTk1NSktRX1taWkpTX15fXElbYVFebGFWSEdKUlxodX2DgX9+fHx8fHx8fHx8e3p4dXJvbW5tcHBwbmpmXE9DNzArKSgoKCcpLjQ8R01VYGZoaGloaGhpaWlqamloZWFdXV1cXFlWUUxJRUJCRkxTWmJqcHV2enx9f39/f4KEiIuPj46OjY2Pj5CRkZCPjYiEgXx5eXp7fHx6e319fX5/gIB+fHpzaF9SRj02Nj9PYHB+houMioqKi4uLioqJiYiGf3dsYFZVVl5kanByc3Nwb3BxcXJ0dXV3enp7enh2cmxlW1FOWmk3NzY1MzMzMTEwLy8uLi0tLS0rKysqKSkqKikpKiooKy0tLzEzMjU6OzxAQURFSExPUlRWWFlZWVpYVlJOR0E7NTEuLCkoKioqKikoKSkoKCkoKCgoKCcnKCgpKSkpKSkqKispKSknKCgoJyYmJiUlJiYkJCMiIiIgIB8fHx8eHh0eHh8fHx8fHx8fHx8fHyAhISIiIiIkJSUmKCktLjA0NjtASE9XX2ZpbXBzd3t7fX+AgIB+fX59e3VwaWNaU01HQj9APj0+P0JIT1hga3R+iZCUl5WVlI2GfHJlYWNna3B0dXd6fH19fHx9fYCAfn59fX19e3p7e3t7fX6Af4GBgYGCgIKCgYGBgYCAgYGBgoOEhoeHhIaHhYSAfHp2c29sZ2RfXFxfZmtzdXZ1cXNyc3R3g5qjoaKlq66oaCw+T1ppdYCKkZWTkZCOjIiEgHx7eXd3eHp6endua2NPRFRgWFlRTE1LTFFSVVVQSkJPRkU8PTpCY1hKVkYwXnlzcm5XPlFVUTo7SllfVml2cnB2eHZ2cmlVUlddVEhKSkpMUlRNVFtMW1VWXFVAYGdeX25iUkdIS1ZhbHZ+gYB+fHt7eXl7e3t7fHt6d3Nwb25sbG9vb25qZVtPQTgwKyopKCgoKS42PkhRWGJnaWppaWlpaWlqbGlnaWRhXlpZV1hVT0hFQT0+Q0lQV11ma3F0eHp9fn9/fn+ChYeMj4+Pjo+Rjo+QkZGRkY2LiYV/fH18fHt7e3t8fH5+f4B/fXt7cmheU0c9ODlCU2RzgIiLi4qKi4uLi4uLioqJh312al9WUldfZW5ydXRzcG9wcXJxdnV2eHt9fn58endxamNZWGJyNzc2NjQzMzExMC8vLi4tLS0tKysrKikpKiopKSkpJyopKSksKy0uMTAyNTg8PUBDRUlNUVVWV1hbWltZWFNMRD86NjEuLSwrKysqKSsrKSkpKSkpKSgoKCgoKSkqKioqKSkqKioqKCkoKCcmJiYlJSYmJCQkIyIiIiAfHx8fHh4dHh4fHx8fHx8fHx8fHx8gISEiIiIiJCUlJicrLS4wNDY5PEBITlVaYGRkaG5wc3h6fHx+fYCCgIB8enRuaGFbVU1HRUNAQERJTlZgaHB8ho+Ul5iWlpeRioF3bWtucnN1d3x+fn5+fn19fX19fXx8fHx8fHp6ent7e31+fn+CgoKCgoKCgoGBgYGAgIGBgYKDg4SGhIWGh4eHhIOBf399end3dHBubXJ0d3d3c3BubniEl6Gfn6GorLCxrpI0OElaaXWCjJKVk5GQjoyIhIJ+fHl4eHh6ent7eXJiTkNQU1NeWFFRSU1VVldRTj48TUpDOjo7OkRjXlJsY1xwaWaDWjxQW1Q9PUBGTEJYjpR7b3h4enhyYlZjYlJJTUtKSk1SVF5dW1ZTSkRbaGdkXmBzXFFLSktYY255foGAfXx7e3l5e3t7e3x6eXVyb21tbGxvb29uamVbT0A3MCsqKSgoKSsxOEJLVFxkaGlqaWhpaWhoaGlnZWJgW1hYWFNOSURCPjo7P0RMU1phZ21zdnl7fX5+fn5/goWIjY+Pj4+Pj46PkJGRkZCOjIiGgH19fX17e3t7fHx9fX+AfXx6d3JpX1VKQDo7RVdmdoGJi4uKiouLi4uLi4qKiYV/dWleVlJbYmhvc3R0c3BvcHFxc3Z1d3p7fX6Af355dW5oYGJteTc3NTU0MzEyMC8uLi0tLCwsLCsrKysqKiopKSknJycoKSkpKSoqKSkqLS4uMDM1OTo/Q0dNU1ZZW11fX11aVlBKQz86NjMxLCwsKyoqKyssKysrKysqKioqKSssKiwsLCsrKiorKykpKiooJyYmJicnJyUlJCQjIyIhICAgIB4eHx8eHx4eHx8fHx8fHx8fICEhISEiIiMlJCUoKCwvMDQ3OTo+QERKUFFUV1xjZ2lucXZ4e35/gIGDg4F9enZvaGFYVlFLRkdLUlhhZ3B6hIqPk5eXl5eXkoyBeHNzdnd5enp7fX1+fX59e3x8e3t8fHp6enp6eHl6enp9fX5+goKBgoKCgoGAgoCAf4CBgYKCgoGBg4KBg4WEhISGhoWHh4SCgoCAfX19fX5/fHhzdoWXop+fmp2mq66vrquaQTVHWWZ0go2UlZSRkI6NiYaDf3x8end4d3p7fHtzaWBTU1JcaGJXVExOV1hUUks4NUlDPTs6Nzo+VGhmXkQsYFVVb1ZSUVpJPD5LVUg7Vn16WlRhYmZkX11aYXNpR0dKSklMTFRYWFBNSU5RZGNgU1JfY25tTklQXmhze4B/fnx7enp5ent7e3t7eXdzcW5sbGtsb29vbWpkW1BCNzArKikqKSkvNDxFTVdfZWlra2hnZ2hnZ2ZkZGJgW1lXUlBLRkM9ODc2PEJIUFVbYGhvdHd6e31+fX1+f4KFiY6QkJCQjo2Oj5CRkZGQjo2JhoJ/fX18e3t6e3x9fn5+fX16eXZwaWBVTUI7PUpbanmFioyMi4uLi4uLi4uLiomEfnRnXVdZXWZsc3R1dHNvbnBxcHN2dXd6fH9/goKBfXl0bmpudoA1NTQ0MzIxMS4uLS0sLCsrKysqKioqKSkpKCgoKCgoJycnJycoKCkpKSgpKSosLjEyNTg+Q0hPVVdcXmBeXlxaVU9JREA9NzMxLy0rKywrLCwsLCwrKysrKyssLCwtLS0sLCwsLCwrKioqKScnJycnJyclJSQkIyMiISAgICAeHh8fHh8eHh8fHx8fHx8fHyAhISEhIiIiIyQlKCgqLC8yNTc6PkJERERFSExTWV5iZmltb3Z5eoCChYmHhIJ8eXZwaWRgWlZVV1phaG55gYmLj5OWlpSUk5CHgXl3d3h4eXd6e3t6e3t5eHl5eXh4dXV0dHJycnN0dXZ2d3d6en19fX5/f39+fn58fH5/f39/f35/gIGBgYKCgICCg4aHiIiIiYiGhYWFhYWHhYOAgZOeoJ2bnqGmqqqopqWellQxSFhndYOMkpWUkZCPjIuIg398fHh5eXp8fn18eHJkX1ZXYWRiW1JQU1BSVlBLNy4zODs7ODg+Q0xicWtEVnZrWVRabV9QQD4/UUpBQEI6OTw9PDw8PT1HT1FlXEJFSktLS0hPUFVTUFFSVldQPU1PVFRhYldKVmFrdn6Bf356enp6eXt7e3t7e3l3c3BtbGxrbG9vcG5qZFtNQTYwKysqKSssMjdBSlJZYWdqa2tqaWdmZmZkYmJeWlZTT0xHQj03NzMzNzxCSFBXXmVrb3V5fH19fn19fn+ChYmOkJCQkI6Njo+QkZGRkI6NiYaDgX99fHt7ent9fn5+fn18enh1b2hhWVBFP0FMXWx7houMjIuLi4uLi4uLiouJhH50Z15ZWWFob3Z2dHNwb25wcXFydnV3ent+goSFhIF9eXV0eH+HNTU1NDIwMC8uLS0sLSwrKyoqKCgoKCkpJycnJygoKCcnJygoJycoJycoKSkqKioqLC4vNTpBRk5VWFxeYGFfXltYUk9KRUE8OzgwLS0rKy0tLS0sKyssLCwsLS4uLi0tLS0uLiwsKyopKSkoJycnJycnJSUkJCQkIiEfHyAgHx8fHx8gICAfHx8fIB8fHx8gISEiIiMjIyQkJScnKSsuMTM2OT0+Pj8/QERHTFFXXGBjZ2ltcHV6foGGh4aHhIB9eXVyb2llZGRma3B4goiKi46PlJSTkY+LhX14dHV3dXZ2dXV2dXV3dHJyb21rampoZ2dnZWZmZGZpa2xtcHFyc3R1dXV1dHV1dHR1dnZ3eHl8fX5/gYKBgYKAgYGFhYaIh4eJiYmJioqMi4yLiZOfm5mboKOkpKKdnJqWlJFzM0RYZ3WDj5SUk5OQjo2MiIN/fXl6eXl5enx9fXdzaWNdW2RkZWNYWFhZVlZTQzYyLzc9PDo3PktTeHhdSFBocGpnWFVRUUBBPzw3PkJERkdHRkVHRkZNVEY/QkJDTVBOS0tKSUlPVldZU0VFTzY4RlVVR0NYTVhkbXh/gH99enl5eXl7ent7e3p4dnNvbWtra2xtb25saGJZSz80MCwrLCwuMThAR05VXGRqbGpqaGhoZ2ZmY19eWlVRTEhCPjo0LzEzNjpAREpRWWBobXN3en1+fn58fn9/goeJjo+Pj4+Pj4+QkJCRkZGPjYuIhIF/fn17e3p7fX1+fn19enl2cm5nYlpQR0JFUGFvfYaLi4uKiouLi4uLi4uKiIV9cmhfWltja3N3d3ZzcG1ucXFxcnR2d3d5foOHiIeFgoF8fIGIjTMzNDIxMS8vLiwsKyssKysqKigoKCgoKCcnJycoKCcnJycnJyYmJycnKSkpKioqKioqLC4xOT9ETE9WWl1fYWFfWlhYVVFLR0I+NzMwLi4tLi4uLSwsLS0tLS4uLi4uLi4uLi4tLS0sKysrKicnJycnJyYmJSUkJCMiICAgIB8fHx8fICAgICAgIB8gICAfICEhIiIjIyMkJCUnJykqLTAzNzc7PDw8PD9DR0tQVlldXWBkZmptcnd7gISIiIiHhYF9fXh1c3FwcnR8goiJio2Oj5OTko+NioJ6dXJxc3JxcnFvb2xsZ2VlZWFhXl1ZWFdVVVZXV1daXGBhYmRoaGlpampqamloaGpqaWhpa25vcnR3enx+f4CChISEg4OEhYaHiIiKi42NjI6OjpeamJSYnqKhnJSIgHyPko2NgkFGWGd1g4ySlJOQjo6MioeDf358fHx6ent6fX17dl9hXlZfXmRkWldWXl9RV0M5MzI5Ozs5NzhASEU1PUlLQ0Fsb2lVRz46Q0E9R0RCPTw7Ozg4NTk5QFRORkA/RUpKTEtJRkhOWWJbVU1GSlVXTkVLSkVXTlVcZXF6gH9+e3l5eXl4eXp7e3t6eHRxbW1ra2tsb3BubGhiWEo/NC8vLzAyNTk9REpTWmBna2tqamlnZmZmZWFfWlZSS0RBOzYwLiwvMjU8QUZNVFxjaW5zd3p9foCAgH9/gYSIjI+QkI+Pj4+PkJCQkZGRj42LhoWDgH18enp6e319fn59fXp5d3RvaGRcU0pFSFJjcoGHjYuLioqLi4uLi4yLioqFfXJlXVxhaG11eHd1c3BvcHBwcnFydHV2eX6Dh4mJiIWCgYOIjI4yMjAwMDAuLiwrKyopKSoqKiooKCcnJycnJycnJygoKCgoJycnJyYnKSkpKSoqKioqKioqLTA2OkBHTlNaXFxbXl9dXFtYVlNNSUM5MzEuLi4wLi8vLi4vLy8vLy8vLy8vLi8vLS0tLCsrKyopKSgoKCgmJiYmJSUkIyEhISEfHx4eHyAgICAgISEfISAeICAhISIjJCQkJSUlJigpKisuLzM2OTw9PT1BRUdMUFRWWFhZWFtfY2hvdXp/hYqMioiGg4GAfXx6eXt9hImJi4uMjpGRkZGRjod+c3FwbW1qamhkY2BcW1pYVFJQT01KSEhHRUNESEhJS01SUlZYWlteYGBgXV5cW11cXl9cW1tdXWFlam5ydXh7foGCgoSFhYWGhoaGh4mLh32EjZWXlZOWnKGimYl8eXtweIyMi4lcTFhodoSMkZOSj42Ni4mHg399cWJvenp5fIB9gn5pW1dYWl5kaFlISk5LPUtHN0M6Ojs5NTY2OTtEOzc/R0FNU1N2ZFA/PENDSkg/RjhKcn13c25WVD1NalBKQ0ZKSEdFRkNER09YVk9OS0ZER0dFV0lRWVNTX2x0e399fXp5eHl5enp5e3t6eXZ0cW5qamtsbG5xb21nYVVIQDY0NTc5PEBFSExSVl5kaWxsa2toZmdkZGJhXFdSTEU8NzItKSkqLjI3PENIT1hfZ2pwdXd6fX5/f4B/gIKHi46QkZCPj4+Pj4+QkJGRkI+MioeEgoB9e3x8enx+fn5+fn16eXdzb2lkXVZNSEtWZnWDiIyNjYuLjIyLioqKi4uIhXxzZl5dY2lyd3h3dXFwcXFwcHFycnJyc3Z8goaJioqIh4eIi46QMTEwMDExLywqKSoqKCgpKSkpKCgnJycnJycnJycnJycmJicnJycmJykpKSkpKSoqKioqKioqLTI4P0VKTlNXWVpdX2BhYGBfWVNMRDoyMDAuLy8wMC8vLzAwMDAwMDAwMC8wMC4uLi0sLCwrKSknJygoJiYmJiUlJCMhISEhHx8fHx8gICAgICEhICEhIiMjIyMkJSQkJCUlJSYoKywrLjA1Nzs8PUBARUlKTU9TVFRVVFVVV1teZm11fYKHjIuKiISEhYKBf35/hIiKiouMjI2PkJGRkY6HenJraGZkYl1bWFVTUEtIRkI/Pj07ODc3Njc4OT5BQ0VIS0xQU1VXWVdXVlVWVFNSUVFQUE9PT09RVFhbYWVqb3Z6fX+BhIWFhISFhYWFh4Fwf4yPj5SZnZ2bl4uBfX5+fG58ioyLc0xZZ3aEi5CTkY+NjYuJh4WCgWlhbWN6gYWHiI2Cd2piXFZUYVxGQ0hRUkhSYl1MOjo7NjU2NTY0OUVANlhoX1VOVFlPRjs/PEBBRUk9NGN/e25XZGpNS0xISklLTUpGQ0JCQUFITE1NS0U9P0BAS1BFV1hcX2JsdXx/fX16eHd3eHl5enp6eXh6enJra2hna2tsb29rZmBVSkA6Ojs/QkRITlJWWV1iZ2ttbWlpaGhmZmRgXVhTTkg+NS8sKSkpKi4yNzxDSE9ZYGVrc3V3en5/f3+Af4GDh4uOkJGQj4+Pj4+Pj4+RkY+Oi4iGhIKAf318fHx9fn5+fn59e3h2cm1pZV9YT0xOWGh2hIqMjIyLi4yMi4qLi4uLiIR7cWdgYWdvdXp6d3VycXFxcHBxcnJycnJ0eX6EiIqKiYuLi42QjzIxMS8wMC8rKysrKikoKCgoKCcnJycnJyYmJiYmJSYmJSYnJycnKCgpKSgoKSkqKioqKiopKSssLjQ6QEVJTlNYWV5gYWJiZGVeVUxBNjEwLy4wMDAwMDEyMjExMjMzMTExMTEvLy8vLi4tLCsrKikpKSgoJyYmJiUkIiIhIR8fICAfICAgISEhICAhIyYoKSgnJiUjJCUlJyQmKSorLC8yNTk8P0JFR0lLTk1QUlVVV1dWV1dYX2Nqb3qCh42MioeFhYaGhoWEhIWIiYqKjIyMjY+RkpGPh3xxZl5dWlVSTklDPz06OTUyMTIyMzAyMjI1OT0/QkZISk1QU1VVV1dXV1ZWV1NQT05LSEQ/Pjo6PkJFSlFTWV9kaXB3fYCDh4aFg4J/g4SHio6LjpCXnJyUkIyKhHdzf4N7cnx7e4JaWmd1g4mPkpCPjo2LioiEhot3cHFyb4uUlJGMeGtvaF1YZmNdW0ZHT1pjbWY7TUc6Nzg2Nzg2NTlCREVaYFRPSElKQEA9P0JOWmNIPDJXem1dTVBYUk5KTU5KR0ZMTUZBQTs7P0RHSUlGSUpMSk9PP1hYUmJob3h+fn18eXd2dnd3dnl4end2b2hveoJ+c2xqb3JqaWdcU0xIQ0VHSk9SVFdZW2BmaGprbGtramhnZmRhX1tWUUpBOC8rKCgpKCgsMzg7QkxTWmFnbXJ3ent/gH+Af4CBhIaKj5GQj4+Pj4+Pj5CQkI6PjouIhYOBf399fXt9fX5+fn59fHt4dXFtamZhWVNNUVxseoSLjYyKi4uLi4yLi4yLioiBfHJmY2dpc3l7enZ2c3Nwb29vcHFycm9ucXV6f4WIioqMjJCRkY8xLy8uLS0rKisqKiooKCcnJycmJiYmJiYlJiYmJiUmJiUmJycnJygoKSkqKisrKioqKioqKiorLCwsMDU5P0VJTVNZXmJkZmlpZl5USDwzMTAxLzAxMTExMjIxMTAyMjIxMTExMDAvLy4uLSwrKyopKSkoKCcmJiYlJCIiISEfHyAgHyAgICEhICAiJCcsLzAwLy0rJyYlJCYmJygqKy8zNTk9QENGSUtPUFBRUlJUVlhaXF1dXmFlanJ4gIaMjoyHhYWGiIiIh4eHh4iKioqKi42RlJOTkIl8bFxRTkxGPzs5NTMxLi8wLi4uLi0vMjMzNjw+QkVIS01QUlRXV1dXWFhXVlRTUk5KRkQ+OjQxLy4uMjg9QklPVVtgZ252en59gHp2eYKKjZCQkZmbmZWRjpCOjo2Je25zbWx5gI6blnZ+doCNjoJ6g4uNjY2NkZOPdHB9f3B4kJKUgmNhZ2pjVVxbXFBQT0laZFg5HE1LPTg4Nzg7NzY9P0djVE43PDY4PUZEQUFDS1ddQ0Y8YVxiZVtAP0pETlpWUEhGRkhDPT47OD1BR0lJSkxMTk9RWFpYWVhaZXB5fX18e3h3dXZ0eXhzc3ZwZkpMW3CGmX9gWFxTR0tbXllRTEhKTFFWWFpbXmNma21ubW5samloZ2VjYmBcVE1HPTQtKigoKSgoLDI3PUVMU1thaG50eHl8f4CAf3+AgYSGio+RkI+Pj4+Pj4+QkJCOj46LiIWDgX98e3p6fX1+fn5+fX17eHNvbGlmYVtVUlVfbX2Hi42OjouLi4uMi4uMi4qIgXtzaWZpbXR6e3p3dXNzcnBvb3BxcHBua21xdnuBhoiKjI6RkZGPMC8uLi0tKykqKSgoKSgnJiYmJiYlJSUlJiYmJiYmJSUmJicnKCgpKSkpKSkqKioqKioqKisrLCwtLS0uMDY8QUZMUVheZGdsbWtlW05CNzExMjIyMTIyMjMzMzMzMjIyMjIyMjEwLy4tLS0tLS0rKioqKCgnJiYmJSQkIiEgICAgIB8gISAhIB8iJisvNDw+Pj45NjAsKSgnKSkpKi4xNjk9QkZHSkxPUFJUVFRUVlpcYGRlZWVmaXF1e4CFjI2NiYeFhomKiYmIiIeIh4aIiIqMj5KTkoyIemhSRUE9OTczMTAwMC4uLy0tLS0uLjA0ODw/QkZJSkxPUlJWWFhaWlpaWFhXU1NNS0ZCOzYwLS0tKyssMDE3O0FIUllgZm1wdnV/jJCPkpOVmp+dmYRtkYmSkpGSkI2DobS8vb6+vruwnpF9eYGHgXF0goeIell7g2t6i4JtY3V4d2pcZmpraGViYFJUVUtFT2JcKyg9Pjw7OTtARTw5ODpGQ0BHPzo5ODdMQEFDRUpVU0ZJX11TWmVSUlg5QmhyaFVJRkRBQkI/Ojc7QENHSElLTVBSUlVYW1tYYGZven59fHp3dnd1dXl0X2B3aGJrcm5uYWBKR0ZJTk5FWWJcVVBQUVZZW11gZGVpbW9wb21raWpoaGdlZWBdWlRMRDsxKikpKSgpKS00OT9GTlVcY2pwdXd7fX9/foGAgICEiI2QkpCQkJCPj5CQkJCOjYuLi4iFg4B+e3l5en19fX5+fn17eXZzcGxpZWFcV1VYYnB+iIyNi4qLi4uLi4uMjIyLh4B7c2xrbXJ3e3x6eHRzc29vbm5wcXFua2hobHB2foSIiI2QkZKQjy8uLi4tKyopKCkoJygoJiYmJiUlJSUlJSUlJSUlJSUlJSYnJygoKSkpKSkpKioqKioqKiorKywsLCwsLSwuMjk+Q0tRWWBobXJxa2NVSDozMjIyMjIyMzM0NDQ0NDMzMzMzMzMyMS8uLi4uLi0tKyoqKigoJyYmJiUkIiEhICAgICAfIB8gICIlKi8zOUBHS0tLR0M+NzArKSosLS8xNTc9QUZKTE9PUlRVVlZYWFxgZWhsbW5ubnByeH2BhouMjIiGhYaIiYqKiomHh4aEhoaIi46RlJCMh3tpUUQ8NzczNTMvLy4uLi4tLS0tMDAzNjo+QkRISk5RUVJWV1hZWVpaWlhXVVVSTkpGQDk1MS0sLCwrKywsLTA1O0RMVFtiZXWOlJeSlJWZnp+YeWtvbY6QkpGSkpKhtru5u729vby7u7SWh4OIf3ZwaWhqa19dYHZ3eXtrVVZyg25VWmptamxsYF1UUVROSlN2dTw0MTM7PDw6QEtHODQ3P0ZETEU7PDk7SjxBQ0VJVUtIPU1pZVpWSlZPO25ubmlYTEVAPj0+QTw4OjxAQ0RHSUpLTE5RVltbWF1ncXV8fXh4dHN2dm1Vc21sZF1eaW5mXkNETlBRSkRIXWxlYFpVVFdaXF5hZGZpbG9xcW9ta2lqaGhnZWVgW1hRSkI5MCkoKSkpKiwwODtBSU9XXmVqcHZ4e31/f3+AgH+ChYqMkJKQkJCQj4+QkI6OjIyLi4mGg4F/fXt5ent7e3x9fX16eXZzcW5qZ2RgXFdXXWVzf4qNjYuLi4uLi4uLjIyMi4eAe3NwbnF1eX19e3dzc3Nwb25ubm5ua2loaWptcXqAhYiNkJGSkI8tLSwsKysoJygnJycmJiYlJSUlJSUlJSUlJSUlJiYmJiYmJycoKCkpKSkqKioqKioqKioqLCssLC0tLi4tLS4yNzo/SlJdaG1xc29kWEs9NDIyMjIxMjM0NDQ0NDMzMzM0NDMyMTIzMTEvMDAuLiwsKyspKSgnJycmJSUjIiEhISAgHyAhIiMkKC81PUdNUlZZW1ZSSkM8NjAuLzA0NDk9Q0ZKTE9SUlVVV1paW1xgYmZtcnRzcXFzdXl+goWKi4mGhYWGiYuLi4qHhYSDgYGChomMkJKSjouAb11STEQ8ODQ1NDEtLS8vLS0tLjIyNjg+QkVJSkxPUFNTVldZWVpbWlpZV1VUUExIQj02MS4rKywsLCwsLC0xNDg/SU5UWW2RmZaWjI6dmpSRfV01Y4WEiZCRlJSfuL68u7+/vr28vrazuqSEiIaJgXxfUmdjc3Bnd3p7emxXXGRYTFtjZmJdYWdXSEdOTUxabWhKOjlJRD48OERBOTY3M0VZU0EzOTw8SU1CREVDSlZFRDlNd3BrMkJAQXV5bmdgUk5GPz89Pj48Ozo+QkRDREZHRkhKUFNXWVtdZ3F3eHp5dnRzbHJubW9yZkc2QGRhSEtLTExIRkxca3BraGNdWVdZWl9hY2hpa29wcXBubGpoaGhnZmRjYFpXT0c/NS0pJycnKywwNDpBREtSWl5lbXJ2eXt9f39/fn9/g4aJjI+RkJCQkI+Pjo+OjoyMi4mHhYKAfnx6eXh5e3t7fH19eXZzcGxpaGZjYFxbWV5ndYGJjI2Ni4uLi4uLi4yMi4qHgXt1cXJ1eXt+fXp4dHNycHBvb29vcG1qZ2ZmbHB3fYKIjI+Rko+NLS0sLCspJycnJyYmJiUkJCQkJCQkJCQkJCQkJCUlJiYmJicnKCgpKSkpKioqKioqKiosLCwsLS0tLS4uLzEvLjI0O0RMWGJqc3ZxaVlMPTUzMzIzMjM0NDQ0NTU2NjY2NDQ0MzIzMzMxLzAwMC4tLSwsKSkpKSgnJiUlIyIhISEgIB8gISIkKC01PkhSV15kZWdmYVlRR0E7NTQ1Nzo/Q0dKTE5RVFZZWVpbW1xgZWpucnZ2dnR0dnl5foKGiIiIhISFhoeJioqHhYF+enl5en+Dio+SkY+NhXlsY1xXUElEOjcxLi8uLi0tLTAxNjg6QERISU1OT1BTU1ZXWVlbW1paWFhVUlBKRT85NC8tLCwrLCssLS4wMzY8QkhOVFSFnpmanX5reW5dcHiKlZiVintcXYSVtr2+vby9vr++uaZsc7O4sIaYnaF3SVpodYGBenx7e3tzY1JXYk9RUV9RQUFLWF5RTkxJT0xRWD44RkVBPDVDT1E5ODc8SWBKTFBOVU9DREJSTEpUQkY8VnhrRD48PHF5d3FlZlhIRkZEQkA9Ojk7PUBDREZHSElKTVFSVlhXV2h1eHd7eXl2c25gZG1qb2ppX1lfT0pLS0hEU2VrbG5ubWtmYVxaXV5iYmVnbG1tb29vbWtqaGhoZmVjYl5ZVU1FPTQsKScnJysvMzg7QkVMVFpgaG1ydnl7fX9/f36AgIKFio2PkZCQjo6Pj46NjY2MjIuJh4WCgH58enl4eXt7e3t5eXd0cm9qZ2dlY2BcW1pha3aBiY2MjIyLi4uLi4uLi4uKh4F7dXF0d3t9f316dnVzcnBwb29vb3BtamdmZmludXt/hYyPkZCNjCwsLCsqKCcnJiYmJSUlJCQkJCQkJCQkJCQkJCQkJCQkJiYnJygoKSkpKSoqKioqKisrLS0tLS0tLS0uLjEzMTEyMzg+R1RganN0cWpbTTw1NDQzMzI0NTU0NDY2NjY0NDU1NTQzNDMzMS8wMTEvLi0tLSopKiopKScmJCIiIiIiICAeHyEjJiszO0dQWGFobm9xcWxnXVRMRj88Oj1BREhKS1BRU1ZYXFtcXFxgY2hucnV2dnZ1dnZ4e36ChIeHhoSEhoSEhYSCgn55dnZzbG91fIeMkpKQjoqBd3FtaWFbVk9IPzkzLy0uLS8wMzg9QEJGSUpMTlBRU1RWV1laW1taWFZVVFJNSUI8NzIvLSwtLS0tLi8wMjg9QEZLT1RxnJydoKSTcllnaHWAd4+UjImKdnZvnbu+vr6ysLy+v724k3anuq+Ff52Yg1E8SF5vdn54dHd6b1RBc2daWVxeSD0/OzxNYVBNTk1LQktPREBAQT04QklEODk2ODk+Nk9WT0BLQ0ZDXllMUUFFOm55TTA9QnByd3h0ZWheSkdHRENAOjc4Ojw+QUNFRkhISlBVVVVYUVhtdnp4eHNIWnNwZ1phZmVxb19UTEpOTkxPZmxrbGxtbm5raGRfXF1dX2BjY2dpaWtta2tqamhnZmVkY2BdWFJLQzoxLCknJigsMDQ7PkJHTVZeYmhwdHd6fH1+fn59fn+DhoqQkZCPj46Ojo6NjY2Ni4uKiIeFgX99e3l3eHl7e3t6eXh1cm5qZ2VmZGNgXlxcZG55g4qNjIuLi4uLi4uLi4uLioeBe3VzdXl8fX59eXd0dHNwcG9vcG9vbGlmY2VpbnR4foSMkJGPjYsrKyoqKScnJyQlJSUkJCQjIyMjIyMjIyMkJCQkJCQkJCYmJycoKCkpKSkqKioqKyssLC0tLS0tLS0uLi4xMzExMjM4PkdUYGpydXNpWko9NDM0MzMzNTY2NTU2NjY2NTU1NTU0MzQzMzIxMTAxMC4tLS0sKysqKSknJiUjIyMiIh8fHh8hIygtNUBJVF5mb3V5enhybGZfVVFNR0VHSklKTk9QVFVYW15dX19fYWVrbm90dnZ1c3N0dXl8gIKEhYSGhoOAfn5+e3dzcGxnY15hZ3F/h46SkY+MiH54eHVxbmtkXlZMQDkxLi8xNTg8P0JESEpLTU5RUlNUVldYWVpaWFZVVFJOSUQ/OTMvLi0tLSwsLS4xNDg6P0RIS1BflpycoaKjmod7gYmOjnhtYHl1e2FofKO5vr26npmst729vayJk7Clh3yYimlPVE9uem9ZXmRsbWxlaoBlXVhUTD86OT5FSVRSTUtLS1RNS0VBQj8+PENFPz07OjtBOjtLTElBQEVGSldYUEpDQj56VjEyP2JfZnZ2c2teWVFGRkZDQj47OTg7PT5CREdIS0xPV11bWVlkbXZ5d3VxO1FzZD5bb2t2d05DU09KRVFiaWhnampsbm9vbWdjX1xcXFxeXFxeYWRmaGpqamlnZ2ZlY2JgXFdQSUE4MCsoJygrLjM4PD9BR05WXWRrcHR3enx9fn5+fX5/goWLj5GPj4+Ojo6OjY2NjYyMioiEgoF/fHp4d3h5e3t6eXh3cm9saGZkZWNjYGBeX2hwe4WKjYyLi4uLi4uLi4uLi4qHgXx2dHV7fH59e3l1dHNycHBvb3BvbmtnZmNlaW5wd36EjJCRj4yKKScpKScmJSUlJSUlJCQjIyIiIiIjIyMjIyMjIyQkJCQmJiYnKCgpKSkpKSorKywsKystLS0tLi4uLi4uMTQxLzIzOD5HVV9qdHlyaFtIOzMzMzU2NTU2NjY2NjY2NjY2NjY2NjU1NTU0NDMyMTEwLiwuLSwrKisqJyYlJCMjIiEhHyEhIyUqMThCTVdgaHJ5fXt5c29pY15aV1RTTk5QVFNTUlRXWVtfYGBhYWNmaWtvcnJ0c3JycnR2eX1+goSEg4F/fnt4dHBsZ2NfWFFPUlllcXyGjo+OjYmAfH18fHl4dG5pYllOQjs2NTo9QEBER0pMTE1OT1BSVFZXWFpYVldTUk9NSUQ+OjYzMC4uLy8uLjEzNTg8P0NFS1JSe52amqKemotpao2lmIiFhGhaVF5mfJ+2nau7vLGbpa+koLKjhn2VoJiGn5J9Xl50cV9ZTEtTaGldaW5pcV5YUjo6Oz0/OEpQT0ZMRkVTS0VESEpMU0I4PD87Ojs9UE1TSEdQTEFEQGFdUlFBREBKaDI3O01aXWd0dXBqX1VOSkZCQ0NCPjw8PkBCRUZJSk9QUlVbXllcYm52eHd0dHF1c2RRZG92bUs/R0tKR1dsamloaWtsa25ubWpoYl5cWlpXVFJTVVlcX2ZoamppZ2dmZWNhXlxXTkc/NS4oJiYqLDA1OTxAREhPVl9mbXF1enx7fH19fHx+f4OGi5CRkI6OjY2MjI2Njo6NjIqHhYOBf3t5eXh4eXl5eHh2c3BtaGViY2VjZGFgYWVsdICJjIyLioqLi4uLi4uKiomHhYJ7dnd4en2Cf3t5dnNycW9vb29wb2xrZ2ViZGdscHZ9hYqQkY+LiSopKCgnJiUlJSUlJSQjISEiIiIiIiMjIyMiIiIjIyQkJiYmJycoKSkpKikqKyssLCsrLS0tLS4uLi4uLi8zMjEyMzg+RlNeaXR4c2hbSjs1NDQ1NjU1NjY2NjY2NjY2NjY2NjY1NTU1NDQzMjExMDExMC0rKyoqKCcmJiUkJCIhISEjIyQnKjE5Q01XYmpydnl4dnBxbGhlZF5cW1lXWlxaWllbXF9hZWZmZmZoaWpscHFyc3JycXFxdHl9gYGAgH59eXZybWhkX1tZVEdBQkRNWWd2hI2PjouEfXt9f39+fn16dnNrZFlOQz8/QENERklLTExNTk9QUVRWV1lYVVJTTk1NSUQ/Ojg0Mi8vLy8vMTI1ODo+QENGSEpOXpWamp6fl4x3V1yJpKeWhHRiWWFkSVqPvq6GnbK1qa6dbnGLoZp9ZY2ZipmLZ2FnZl1jZFlUV2ZcVGVpaWNcYlI7PD5EPTxGUk5KUlFDSU5PUU1OUlpFPD5FPTg7OkhbZkxLUENDQkdgUlVYQUY9Vz0+Q0dQWEtOcXVwZ19XTkpDQUNDQD08PkBBQ0ZNTE5WWVdaWltdYGhyeHl2dXBvcXBubnJ5ZkpCSkpDQUpiZWZoaGhoa2xtbGtpZV9bWVhUT01KTEtQWV9jZ2lqaWdmZWRiYV1aVU5HPjQrJyYoKy4wNTk+QEVLUlhiZ25zd3p8e3x9fXx8foCEh4yPkZCOjo2NjIyNjY6OjYyKh4SCgH57eXh3d3h4eHl5dnNwamZiYGFkZGRhYWJnb3iDiYyLi4uLi4uLi4uLioqJh4WAeHZ1d3t/gX56d3VzcnFvb29vcG9sa2ZjYmRma3B2fYWMkZCNi4kpKCcnJSQkJCMjIiIiIiEhIiIiIiIiIyMiISEhISIkJCYmJicnKCkpKSorKysrLCwtLS0tLi4uLi0tLS0vMTMzMTI4PkhUXmp1eHJoXUw9NTY2NjU1NzY2NjY2NjY2NjY2NjY2NjY2NjU0NDQyMjEwMDAvLiwrKiknJicmJSQjIiIiIiIjJisyOkNNV2Bnbm9wb29tbGpqamhnY2JgXl5fX2FfY2VmaGxramlpampsbnF0c3Jxb25wcXZ6foB/fHp4dnFrZV9bV1JOSkdAPkBCRlBgcYGMjo2JgXp1eXt+gYGBgH59eXVvZVlQSUhHR0dKSkpKTE5OTlFTVVZWU1FOTUpJR0RAOjY0NDAwMTIzNTc6PD5AQkVHSUpQU4SemJyfmJKBdllReI+WmH53ZoeNXyggfb27qYR9l6yunXdbZYGYiT5ak6CYelVZXF10d21fXF1aU1ZtaGdoVkhFOT1NU0ZAPlRkXGB1W0ZMTk5HQ1VBPUA9Q0E3NzlEV1M/NUNCREM7QE9cTz5EPzs5QEpNVVNMWWpucWpaT01IQkBCQj88Oj1BQUNGU1VTXWJiYWBfXmJqc3h4d3NwcnBrSFR4dkZGTU5GTGdqZmRmZWVnaWpra2tsZmBcVlVRT0dDQENETlZdZGhpaWhnZmNkY2FdWlVNRTwzLCgnKSsvMjU6P0FGTFJbZGlwdXh7e3x8fHx7fX2BhIiNj4+Ojo2Li4yMjY2Ojo2MioeDgH59e3l3eHd4eHh3dnRxbGhjX15eY2RjYmFlanF5goqMjYyLi4uLi4uMjIuKiYaDf3hzdXd7fX18eHV0cnJxbm5vb3FwbGpnY2JlZ2xzeH+GjJGPjIuJKCYmJiUkJCQiIiIiIiIhISIiIiIiIiIiIiEhISEiJCQmJiYnJygpKSoqKysrKywsLS0uLi4uLi4tLS0tLjAyMjEyOD5ET1tlcHZ0a2FQQDc3NzY1NTU2NjY2NjY2NjY2NjY2NjY2NjY1NDQ0MjIzMjAwLy4sKyopJyYnJiUkIyIiIiIiIyYrMjtBS1VcY2VkZGNhY2ZpampqaGdlY2RjZWZmaGtsbW9wbm1tbW5ubnFzdHNycnBwcXZ6fHp6end1cGtmXVdRSkhEREFAPj49PkJKWmx9iYyLhnxyZ2txdnt+f4KCg4B9e3RsZVtTTktJSUlKSk1NTk5QUlNST0tLSUZGRENAOzg2MzMyMjU3OTs8PkFDREZKTE1RUWSdn5ygnJGDgoVjUWaEg4aDg4Gfm1oqI3i8u7Slgl18nJuIYlZrjo17bHCWpGZDXF9jepKSdm1kYlxoYVZcWD05P0RLV1lEOUJCY1xXYllLRkNAOkxUMzg+SUo8NDM1PkZKSERBR0BFN0BHVD1APD06SF1YW10/RU9NXl5fWk8/P0BBQkJCQD0+QUFDRlRZV19jZWNiYWJnbHR4d3RzbGBccmxmX1RNQ0xbZHNtaGVkY2JjZWhqa2traGNdWVJPSkM6NzY8RE1WXWZoaWloZmZjY2JgXFhTS0I4MCwoJykrLzI1Oj9CR0xSXWZscnV4e3t8fHt7e319gYSIjY+Pjo6Ni4uMjI2Njo6NjImGg4B/fHp4dnZ2d3h4dnR0b2tlYF5dXWBjYmJjZm1ze4SKjYuLi4uLi4uLi4uLiomGgn54c3V3e319fHh1cnFxcG5ub29wb2xqZmRlZWlvcnqCiY+Sj4yLiSYlJiYkJCQkJCMhISAgISEhISEhISEiIiIiIyMiISQkJycmJycoKSorKywsLS0tLS0tLi4uLi0tLi4uLjAvMDEwMTY8RExYZm5zdG1iU0g9NjU2NjU1Nzc4NjY2NjY2NjY2NjY3Nzc3NTU0NDQ0MjExMS8vLSwrKignJyYlJSMiIiIhIiUmKzI5QUhQVVtcWFRSVlxhZmpsa2lnZ2ZoaGhsbGxucHJycnBvb3BwcnR0d3h0cnJzcnN4eXl2dnNvamVfWVJMREA/QEA/PT09Oz1BSFZneYeKh4N3aFhaYWlwd3uAg4KChIKAe3VvZlxVUU5KSUpMTE5OT1BQTkhGREJFREJBPjs3NTU3ODc5PD4/QkRGSEtMTU9QUVSDo5+in5mJcIiLdVBXfIF7dnN7oJdAKiNourm2sqaFYGR2g4NpYH2HfXBjhItPRGZyjoiNkop9fGNhY1NSWFxSMz5LU15rRi8wNU1TTVFKSUZERERXOzg4PUA3MzI1NDhERDs+P0JBU0BBRkA9QkpSSFZnUVFXQEZAME9PTVBAOz9ERkhCPz4/QEJCREhRWVpfZmdkZGVmaW51eXh1cXBjXWpnSkhTTk1ZZXNuaWVjY2JjY2VlaWloZ2RfWlJMR0A5MjE1OkNMVl1kZmhoZmVlZGNhXltYUUlCNy8qKCcpLDA0NjxCQ0hPV19obXJ3eXp8fHx7e3t7fX+Fio2OjYyNjouLjY2Ojo2NjIuHhIB+fXx5d3Z3dnd3d3Z1cm1pY11ZXFtfYWNjZGhweH6IjI2LiouLi4uLi4qKioqHhIB5dHJzd3t8fHt4dXJwcG5ubm5vbm1samhnZWZpbnF9ho2QkI+Mi4omJSQkIyMjISEgISEgICEhICAhISEhISEhISIiIyMkJCcnJycoKSkqKyssLC0tLS0tLS4uLi4tLS4uLi4vLy8wMDA0OkBLV2JqcXJvZllORDw3ODY1NTU1NTU2NjU1NTU1NTU1NjY2NjU1NTQ0NDMxMTEvLCwrKikoJycmJSUkIyIiISIjJSgwNj5DS1FTU09KSU9UWmFlZ2hnaGhnaWpqbW5wcXFxcnJxcXF1dXd7e3t6d3R0dXZ2d3V0cm9sZ2FbU0tEQD4+Pz49Pjw8Ozw9QUdSY3iGioeCdWNPSk9YYmtyen+BhYaHhYOAeXZvZFtTT0tLTExNTU1NSEZDQUBBQkNCQT07PDo5Oz5BQUJDREZISkxOT1NVUVNjmqGdnpeRcVl+h3ReTWR9e3ZxdZCCMioqTbW0sbCrnYhyaWptb2h1fG1kdHZiPj5Yg6GZlpWMgXVmW1VLTVhfXkdLQkZaVUQzMjk+NTpOSUlDPjtGUzo1ODk8RjsyMjI4QE5GPT83TllRWUs5QkNRQUhWVU9STjdAMjBJS1lANjo+Q0ZJRkE/P0FBQ0dIVVxZWmNoY2VhZ21ye3dzal5nZ15eUkdGOjpLU19ybWllY2JhZGRkaGdnZ2ZgXVVNRD01LSwuMzxGTlhfZGZnZmVlY2FgYF5bVE9IPzcvKignKSwwNjk7P0NIT1lhaW91d3l6fHx8e3t7e36BhYqNjo2MjIyLi42NjY2NjYyJhYJ/fX16eXd1dnd4d3d1dHFsZmFbWFdaX2FiY2ZscXmCio2NjIqLi4uLi4uKioqKh4R+dnFwcnV4enx5d3RycHBubm5ubm1rampoZ2VlaG1xfYaNkJCNi4qJJiQkJCMjIyEgICAhICAgHx8fICAgICAgISEhIiQkJSUnJygpKSkpKisrLCwtLS4uLi4uLi0uLy8vLy4uLi4vLzAwMjc8RlFcZmtwcGliV01DPDk3NTU2MzQ1NTU1NTU1NDQ0NDU1NDY2NjUzMzIzMzExLy0rKyooKCgnJyUlJCQiIiIjIyUpLjM6PkRIS0tIR0ZJT1ZbXmBhZGNlZ2lqamttb3BxcXNyc3R2d3h6e3t8fHl3dnZ0cnBwb2xpZV5WTEQ/QD89Pj09PT07Ozs7PD9GUGFzgomHgndkTTtARU5ZY214f4SIh4iHhYF+eXVrX1ZQTUxNTE1MRkM/Ozo6PUFDQ0NDQ0NDRERDRERER0pLTE5PUU9RUlVVcKOhnJmUg0pMbo+DbFBPcXh3d3CCcDMxMDWjrqeopIqAeGpgVFlXZmpjbWxoUzg/VIOloJOXkpKUdEk8Xm9iW1ROTEZDQ0tSRDNARDk6Ojg+RzQzQktLPzNBPj83MTMwNTlEQz48UGVgaV87PTxBTlFJRU9ITU07PEY9Q0A/ODE3P0FAQEFBQEBBQUhJSk1NTFJgaGdmWl9wZWRjVEtERUpFT09KQEJOQ0lkdW1nZGFiZGRjZWZoaGZjXlhQRjwzKykpLzU+SVFZYGVnZ2VkZGNiYF9cWFVQRz40LSkoKCosMDU4Oj1CSVJaYmpwdnZ4eXt7fHt6ent9f4aJjI2NjIuLjIuLjIyMjY2LiISBf318end1dHV2dnZ1dHJvamVfWlVXWV1gYWRocHR6hI2PjoyMjIyMjIqKi4uKiYeDfXRwcHB0dnh6eHVycXFvbm5ubW1ubGtraWlmZ2htc36HjY+OjIuJiSQhIyMiISAfICAgICAgIB8fHx8fHx8gICEiISIkJCUlJycoKSkpKSorKywsLS0uLi4uLi4tLi8vLy8uLi4uLy8vLzAyOUFLV2Bla3BuaGBVTEY+Ozo4NjY0NDQ0NTU1NTQ0NDQ1NTQ2NjY2NTMyMzMyMS8tLCwrKigoKCgmJSUkIiIiIyMlJiswMzk+QENCQkNHSU5TV1lYW1xcXV9hYWRnaWttcHF0c3R1eHl5fHx8fHx5enh1cW5saWZjX1hQR0I/Pj49PT48PTw8Ojo5Ojs9Q01ecICIiYZ8alM3MTU9SE9eanV9hIeGh4eFgn57dnBpW1NPTUxLSEI/Ozs7PkFFRkdHSUlKSkpKSkpKSkxNTk9RUlJSUlNXVnajnpuVjG46SWOJiHhYTllyeHp4hGA4NTQueqSfoqSWiX5tZFhOQj9EXWpoY0o8RVF+n56YmaKflGNDTnx9dm1kYFNKUFlYWlBHPDpGRzo7PUVBP0FEVVBCQTcwNT02LDAzNjo/VWJZVk48Oz1EXlhIREZIUV1XTEpNS01APkA7PD8+Ojs+QEFAPj8/Q0ZHSElUYWhrXEZOTmBrWk9UXVQ0L0BIQ0FGR0dUcnJsaGVkZGVjY2RlaWhlYFtVS0A1LSgpKS82PklRW2JmaGdlZGNiYmFfXFhUT0U9My0pKCgqLDA1ODo9QUpTW2JqcHZ2eHl7e3x7enp7foGGiYyNjIyLi4mJiouMjIyNi4iEgX58e3l4dnR1dnZ4d3Z0bmljXFhUVFhcYGFlanF4foiNj46NjIyMi4uLi4uLiomFgHlvbGxucHZ3enh1cnFvbm5ubm1tbW1ta2pqamhqb3aAio6PjoyKiYkiISEhICAhICAfHh8fHx4eHx8eHh4fISEhIiEiIiMlJScnKCkpKSkqKyssLC0tLi4vLy4uLi4uLjAwLi4uLi4uLC8vMTU7RE5ZY2hvcGtkXlVOR0NAPTo4NTMzMTQ0NDQ0NDQ0NTU2NjY2NjU0NDMzMi8vLSwrKykoKScnJiYmJCQjIyIiJCYnLTE1Ozo8Oz0/Q0VKT1FUU1NRUVJUWV1gYWRnam1wcnJ1d3l7fX+AgIB+e3h0cW1pZGBfWVJMRT48PDw8PDw8Ozo6OTk5OTk5Oz5JWW1+iIqGgHFcPiorLzc/S1ZkbnZ9g4aHh4WEgn95cmldU0xLR0RCPTw7PkNHSEpNTk5QUlNUU1BPT09PT1BRUlNSU1VWVlZ8o56YkItqNlVhe4x9ZFJMZnV9golWOTc4OEmUmJ6jlIV9d2xgVUxGSVxjXFpHQUZKcpmVkpSenpB6WnOJeWxpXFpWXWxxeXZqYltUVVZVVVxoUEM/O0ZOSTswMTlHNy0tLzQ4S2ZgVVJQPT5DSkE9PkpNRkRNTkk+QUxWVlZTV0Y6PUE9Oj5BQUNFR0VBTVJRXlNPWVxJRVJaWmRZW1RDOj45RUc8MDxScHdyb29paG5jamhiYmZlZWFbU0g8MSgoJyovNj9KU1tjZWZnZmRiYWFgX15ZUk1EOzIsKiopKy0xNTc4PEBJU1xkbHF2dnh6ent7e3p5eoCCh4uMjIuLiYmJiYqKi4uLi4qHg4B9e3h4dnV2dnZ2dXVzcW1oX1pWUlNXW19iZ211e4GJjY6NjIyMjIuLi4uLjIqIg310bmlpbHB1d3l2dXJxb25tbW1sbm5ubW1sa2tpaW94g4yOjo6MiYqKIiEhISAgIB8eHh4eHx8eHh4eHh4dHiAhISIhIiMjJSUnKCgpKSkpKisrLCwtLi4uLy8vLi4uLi4vLy4uLi4uLiwtLi4xNT1IUVtkaG1taGRcWFFMR0U/PDk2MzM0NDQ0NDQ0NDU1NjY2NjU0NDQzMzExLy0sKyspKSgnJyYmJiUkIyMjISIlJCgtMjQzNTc4Oj5DSExNTUtLTExNT1FXW2FkZ2ptcHJyeHl6fH+BhIJ+e3hzb2tmXlpXU01GPzo6Ozs7Ozs7Ojo5OTg4Nzc3Nzo9RFJleYWJhoJ5aEwwKiksMDlDTVpmcXl+goSEhIJ/gH92bWJVS0ZBQENDQ0VIS05RVFVVVVZXWFdVVFNTUVFSUFRTUVVUVVRai56cl5CNcyw8WHGGfWhNR0xmdXx1Sjo7PDw6Z46RloZ3cnRtZVlQUFRaVVFRSUZHR2aOi4eLk5eViX18XU5RVE1PVU5SbomMcHOFcGJaTUZLWE9ORjtHT0AyLjM3PDgvLS4uMzw/Qz9LVkpNSTs3ODs7Ojw+PkE9ODo7PENISk1QQEFEQT4/QUFCRENDRkpKSU1SUEhDUFFCRUpJVFNAP0JAQUtRZmt0eXh1bmZ0eHdkWF1UXl5jZmVhXVVGOzEoKCcpMDdAS1VcZGZnZ2ZkYmFhYF9cWFJNRDsyLCkpKSstMTU3ODxBSlZfZmxxdnh5enp7e3t6eXp+gIeLjIyLiomJiYmKiouLi4uKh4OAfXt4dnV0dXV1dXZ2dHBsZ19YU09RVVtfZWlvdnyCiY2OjYuLi4uKiouLi4yIhoF6b2hkZ2twdXd3dXNxcW9ubW1tbG5ubm5ubW1ra21zfIaOj46Mi4mKiiEhICAgIB8eHx8eHh4eHR0eHh0dHh4gICAhISIjJCYmJygoKSoqKywrLCwuLi4vLy8vLy4uLi4uLS0tLS8vLi0sKywtLDE3PUdRXGRpaWlmZF9aVVFOSURAOjY1MzMzMzMzNDQ0NDU1NDQ0MzMzMjIxMC8uLSwsKyopKCcmJiYmJCQkIyIiIyQkKC0wMTMyNjg5PkFERkhIR0pMTlFVWltfY2ZrbnJyc3d7fIB+gH18eXdxbmdjXVhQTUdCPTs6Ojo5Ojo5OTk5ODg3NjY2NjY3OT5LX3KAiYiCfW5XOykpJyktND1JU11ob3h/g4SEgnt1dnhwYVRJRURHSUpNUlVZW11eXVlXWFpdWlhWVlVUU1JTVFJTU1ZdYpWdmJiVjH0rOU5ge3ljTktESVBSSUE9Pj49PDluhIqBbm1qYl9XUFBTUUpNUElKR0VKdoiEgoCIkol+W0FJT01MSkU+NT9bYWp/jYF0ZVtOUldISkw9Pzo1Mjg5MjU1MC0qJyoxOz8+VEw9NzQ3NzQzOTUzNTg7Ozo5OD09OzpCUURBP0VNR0NBPT8/QkdJUl5aXWRUVl5cSj1SWlE6QExHRVBhcHZzc3d0c3NtcGllSlNBSF1jZWdlYVtTRzsxKyYnKjE5QktUXWRmZ2dmY2JhYV9eW1dSSkM5Mi0qKyksLjA0Njg9Q0xXYGdtcnZ4enp6e3p7e3p9f4OIjIuLiomJiYiIiYmKioqKiYaEgH58eHZ2dXV1dXV2dXVvamVdVlFPUVdeYmZrcXl9hIuOjoyKioqKiYmLi4qJhoJ+dm1lZWVqbnN3d3Rxb3Fwb25tbW5tbnBwcG5tbmxwdX6Hjo+Ni4qJiYkhISEhIB8eHh4eHh4eHh0dHh4dHR4eICAfICEiIyQmJicoKCkqKissLCwsLi4uLy8vLy8uLi4uLi0tLS0tLSwsLiwsLS0wNDdARlJbXmNlZmViYFtYVVNNSEU9NjQzMjIyMzQ0NDQ1NTQ0NDMzMzQ0MTAwLy0sKysqKignKCgmJiUjJSQkIyMkJCQnKywtMzc4OT0/P0BDRUZNUlVbXmBkZ2lrbG5xdXd6en18fHp3dnNvamRdV1BJQ0E/Pjs7ODg4ODk5ODg4ODc3NjU1NTU1NDg6RlVqe4WJhoJ2ZEctKCYoKSksNT5IVV1ncHZ9fHBlX2Z7eHBlWk9OUFZaYmlsbm9vcGxmX1pZW19eWlZWVlRUUlBPUFBPT1mZoJeWlIx/MzE4Vm5wU0pQSEE8Oz1AQUFBQD43RXJ+c2VkYVhaUktOTkpLTUxGR0dKTFl1h4V6e5SOd0Y6QUJDQUFAPjs2LzJWgIyHdmJgVVFTST1EOTg4NDk/PTIuMS8uLSk8QTk4PDg2MzQ3OzxBQzo0MzY2MjxCQ0c8OTk7PUZGQj44PD9AQT5BRUNCSUlZUWp1TVBpcHJhSUFASElIPVRobnBxcmpacH9mbF5VUkBATFVdY2hlZGJbU0g6MSsnKCwyOkNMVV1kZmdnZmJiYWFfXlxYUkpCOjMsKyspLC4wMTU4PUVOV2BpcHR2eHp7e3t6enp6fX+DhoqLi4mJiIiIiImJioqKiomGg396eHZ2dnV1dXV1dnV1b2plXVZRT1FXXmJnbHJ6gYeNjo6MioqKiomJiYqJiYaBenJoYWBiZ25zdnZzcW9vb29ub29ubW5wb29ubW5udHqDio6OjYuKiYmJISMjIyEfHR0dHR4eHR0dHR0dHh4fHyAgHyAiIyMkJSUoKSgpKysrLC0tLC4uLi4vLi4vLi8vLS0tLS0sLCwsLCwsLSwsLC4xOEBIUVZaXmBhYmFhYF1aVlBKRUA6NTMzMjIzMzMzNDQzMzQzMzMzMjAvMDAuLSsrKyooJycnJyUmJCUjIyQkJCMjJScqLC8zNzs+QD9AQ0lNVlpdYWlrbm5vb3Bzdnh3eXd2d3V0cW5qY15YUUpDPDk4Ozw6Ojg3NjU2Nzc3NjY2NjU0MjMzMzM1Nj1MYHN/h4iFfHBXOSclJScoKCwvN0BLVmFqb2pkb25TaoB9dGhfXWNsdn2AgYSCfn19dW5naGhpZV9ZVlNSUE5MS0xKSUdMlKCalI+Ig0UuNk9nXEdJUkpFQj9AQEA/Pj0yNkZRcW5jXVpXVlBPTUlIRktMSUlQUldaWGl4fIaVjm1DOzw7ODk5Ojk3NjMvO2Z+hoZzYVNOSUNFS0o9MjZKOzQsMzQvKyozPz1ERTk1MzQ5NjxCRDw3NjU1NDM0MzM0NTc3Ojo+SlZJNjAsMzg6PEU/Oz1ARlpcUUNMW2diXUhBSEpFPVltbW1wcnRaQ2x2dIZGV2BXR0lQW2ZnaGdiW1JIOjErKSovNDtETldgZGZnZ2ZkYmFgX15cWVJJQjowKigpKi0xMTQ3OT5IU1pja3F1eHl7fHx8enl5eXyAg4mLi4uJiYeHh4eIiIqKioqIhYN/enh3dnV1dnZ2dnV1c21nY1xTT05TWV9jZ210fIOJjY6Ni4mJiYmKioqLioiFgHltZF1cYGdvdHV1c3FvbnBvbm5ubm5ubm1tbm5xcXZ9hY6PjYyLiomJiSEjJSUiHx0dHR0eHh0dHR0dHR4eHx8gICAhICEjJCUlKCkoKSsrKywtLSwuLi4uLi4uLy4vLy0tLS0sLCwsKiorKywrLCwsLDE2P0ZMT1NYW11eYF9gX1xXU05IQTo1MzIyMzMzMzQ0MzM0MzMzMjEvLy8wLy0sLC0rKSknJycmJiQkIyQlJCQlJSUnKzA1OT1BREZKS09VW15jZmpucnJzdHZ1d3d3dHNxb21raWZgXFZQS0I6NzU2ODg5Ojo5ODY3NTY2NjU1NTU0MzMxMTExMjM3QlZqeYSIhYJ5ZUYsJSclJykqMDY7RFNibWhrXWR4cXh5eHlyc3J3f4OFhYOGgoKFhYN/fX+BfnhwZ1tRT0xMR0dFQ0NDQXqelY+KhINZLjVBYFZDSE1KSEVCQ0NCQUA/Xm5eQlhsZ19YU1JOT01LR0hNTUtNTFRWV1ZYWm+YlYRvVUI4Ozo1NzY0MjEuLS1EanyJjIBlVE5KREFJSi8pLC8zMjw6LCoxOSwnND85NDM0MzQxMzQwMDMzNDMzMTAwMDE0OTw6PUNMRC8pLjM3NUJNOz9VWFFTVmBtWkBEUGJdS0RAQltuam5wbXB2d2VFYqiSS2RdTEJKUWBoaGlnYlxTSDoxKykqLjM9R09ZYGRmZ2dmZGJhYF9eWldRSkI6MzIyMzM3Ozs8PEBFTVRcZW1zd3l5e3x8fXt4eHh7gIOJi4yMiYmHh4eHiIiKioqKiIWCfnt5d3Z0c3Z2dnZ1dXNtaGJaUU5PU1lgZGlwd3+Gi42OjIqJiYmJioqLi4qIg3tyaF5aWl5la3J2dXNxb3Bub25ubm5ubW1tbW5ucnJ6g4mPj42Mi4uLioojJCYnJSAdHRwcHR0cHB0dHR0dHh8fICAhIiMkJSUmJygpKSkqKiosLi4tLi0tLi4tLi8vLy4sLC0tLCwrKysrKyosKywqKistLzQ7P0RJTVFWWVxdX2BiXl1VTkxCPjczMTIyMzMzNDMzMzMyMjExMTEvLy4uLCwtKiopJycmJiYlJCMmJSUlJSkrLzM5O0BFSE5RVldYX2ZqbW5xdXh6enl4d3VycGtrZ2ViXllWUU1GQTs3NDQ0NjU3ODc4ODY2NTU0NDQ0NDQ0MzIxMTAwMDAyMztMYnWCiImHgXJZPSklJCUlKC4xOkdTW15ZYWNmb3Fxa2lvcHV+goSAfnx8eHl9h4yOj5GUlZOOiod7bFtMQT4+Qj48OTtYmJGKh4OAcTQvPVhbSUtNS0tURkRDRUA+Ol+VjWpnYGVjWlNQTFBPTUdISkxNUk1NW1ZLUVRklo+DbF1RRTsyMjQ3NjQxLiwqLUhlfI2MemVWXVdRU09EOjoyNDk/PDAwNzorKCs0NDY0NDQzODpFT0Q9NzU0Mi8tLTAuMDM4Oj8+RT41LzE6P0A/ODVFVVJZV19taltMTkxabVNdZXR1bHOAgXR3dHl2VWOBT0RTW1RBSFdmZ2doaGNbUkc5Mi0rLDI3QEpTWmFlZ2dnZmVjYmFfXltYVE9KREA/QkdITU9QUFBTU1hdY2lxdnp6e3t7e3p4eXl5fYOGioyLiomIh4eHh4mJioqKioeEgn15d3d1dXV3d3Z2dnZybGdfWE5MT1RZYGVsc3iAh4uOj4yKiYmJiYqKioqLhoF5cGRZUlVbY2x0d3RzcG5tb29ubm5ubGtra2tub290e4SNkJCMjIyNjYyMIyQmJyYiHh0cHB0dHBwdHR0dHR4fHyAgISIjJCYmJycoKSkpKioqLC4uLS0tLS0tLS4vLy8tLCwtLSwsKSkrKykpKiorKioqKywuMzY8QERHTVBWWFxfYGFgX1pSS0U9NTEyMjMzMzMzMzMzMjIxMTExLy8uLiwsKyoqKScnJycmJSQlJCUoKisvNDk/REhMUlZZXGBkZWlwdHZ3eHl6eXl4dHBuaWdkYFtXUU5KSEM+ODQzMTExMjQ0NTU3NjY1NDMzMzMzMzMzMzIxMTEvLy0vMDE1Q1hsfoiMioZ8alE7JiUpNDUuMDxLTkdHR09OTlJNUVRXVlVaaHJ1eXZ2dXd7hI2SkpOWlpeVkImKjouAcltIPjg4OTc1OX6WiIJ/gH9RPT9RX1BNTkxJSkZDREJAPjdVmpKCdmdWWmBZUE1STkhFRUpIS05OTllZU0hKU5CSiHFdSUM0Mzc4OTk1Mi0qKiowSmB8lZaBbmFkY3NrXFhTTUQ3MzhESElANysvMzU1MzI2R0xJS0Y2Nzo4NjQ6QT04LystNz5BTV1BMj9DSEJIRz1HTVFSVV5nZF1VVlVgZWdJV29ycG1vhH5oaWJbXFtZTURJW2BIO0ZPZmZpamZhXVNKPDItLC8zOEJLU1phZWdnZ2dlY2RjZGRlZWJfXllVWFhbYGVoaWxsbm5wcHN0d3p8fHt6enp4d3h4en6BhIqMi4qJiIeHh4eJiYqKioqHhIF+e3l3dXZ2d3d2dnZ2cmxnX1dNS05UWWFmbnV7goiMjo+MiomJiYmKioqKiod/dWteU01RWWRtc3ZzcnBub3Fvbm5ubmxra2tra21uc3yFj5GQjIyMjY2MjCEjJicmIyAdHBwcHBwcHBwcHB0eHx8gICIjJCUmJycoJygqKyoqKiwtLy0tLS0uLi4uMDAuLCwsKisrKikpKiopKSkqKiopKysrKywuMjU5PUBFSlFWW11fX2BhXFVORzs1MjIyMjIyMzMyMjIxMDAwMC4uLi4tLS0rKiooKCgnJyYmJyktLzM4O0JITVFUW19iZmlrcHN0d3l7e3p5eHVyb2xpZGBbWFJMSEQ+Ozk1MjExMTAwMDAwMDMzMzMzMzIyMjIyNDIyMjIyMjEwLi0tLS0uNDxMZXqHjYyLhHVlTzkpNlNVSkdUXFpRUFFTVFlfUEpGRUZHP0ZJTFVeZ3B7g46SkZeYlZGNf3h5d4KPkpWNe2FIOTM0NjdIgomCfYGBaktHV2NVT1NNRUZDQkJCPDdGcp6XhnltWlRYWlZQSUZFRkdJR0hISUtPUElGSlGOj4iAZUE1Mj5DPjs3MjApKCkqKjVMZIKUk4h9d3R1cmNiWExLTEI8TU5GPjc7Ojc1NDI3PDw6Pj8/Ozo3NThERUs7LjExMj5KT2lxTy89Uk5MVFFSX3NaTFJaZ1FdUjs9XGZZT1RgXF5aWWJeVlBRSURATEpARU5BPEg6MV5ra2poYlxUSTsxLS0vNTxFTVRcZGdpZ2hmZmhqbG5xcnF0c3BwcHR5en2AgYODgYCBgICBgYODhISCf359fHt2dXl9g4mMi4uKiYmHh4iIiIiKiouKhoN/fHp4d3d3d3h4d3d1dHJsZV5UTUpMU1xjaXF4fYaLj46OjYuKiImJi4uLi4mGfnZnV01JT1libHR1dHJwbm5ubm5ubm1ramllZmlrbnV/iI+Sj4uMjI2NjYsgIiQlJSIgHRwcHBwcHBwcHBwdHh8fISEiIyUlJiYnKCgpKioqKiwtLi4sLS0tLi4uLi8vLiwsLCorKyopKSoqKSkpKSoqKiorKyoqKistMjU3PUJHS1JZXF9iYmFdVExGOzUyMjIxMjMzMjEwMTAwMDAuLi4uLS0sKysqKCgoKCgrKy4xNDo+RUlOVVhdYmhqbXBzdHZ4enp7eXh1dHFvamZhXlhST0lDPTo2MjMyMTAvLy8vLzAwLzAyMjIyMTEyMjIyMjQzMjAwMDAwLy4tLCwtLjE2RVpwgo2Oi4mAeWlPOkNYV1FSS11tcGJlaF1lYFlkY1JLRT5EREVGR0RJXG1/jpWWlpGMg4qPj4R/lJmcmpWOellBNzxHTGiPiYGBgX1ybm5nWExPTUREQj9BPzw7YoyfmYl+c2leWFVRTUhERklKSkhHRklMRUZFR01Nfoh/eW1GPDdCR0RAODAoIyMlJykqOFBgeIyTj4R1anVpcXhkaWtZSldeUUM8OTc4NDAvMDI1NjY4Ojg5R09HOUNDNyoqKzFOaGttZF9IQkdDVFBPU1xtY0xdZlpNRzlDTmpbQ2NpZVhJSUM/P0VMRjc3P01ZUk1HS1FbNE9na2lqaGJcVEg+NTExMzlBSFBYX2NmaWpsbnBxc3Z6fYCDhoeFhoaGh4mKiouLioqKioqKi4uKioqKioeGgX9/e3p8gIKHi4uLioqIh4eIiIiJioqLiYWCf3x6eHd3d3d4eHd3dXRxa2VeU0tJTlNcZGtyeYCHjpCPjYyKiYmLi4uLi4uHhHxyY1FJR1BaZW90dXRycG5ubm5ubm5ta2lnYmRmaG52gYuQkY+Li4uNjY2LHx8iJCQiHx0cHBwcHBwcHB0dHh4fICEhIiMkJicnJygpKikpKystLS0tLS0tLS4uLi4uLS0sLCwqKysqKiopKSgoKSkpKioqKiopKSoqKysvLzQ4PEJHTlVbYWRkZF1VTUU5MzMxMTIyMjIwMDAxMS8vLi4uLi0tLSorKikoKSosLzU4PEJHTVBUW19kaG1wcnR3eXh4eHd2dHJwbWtnYl5ZVE9KRj47NTExMDAwLi4vLy8vLy8vLy4vMTExMTExMjIxMTEzMjExMS8uLi4tLCsrLC4vMjxQZ3yIjouMhHhyd3d8fnVmUT8/UGN1eVxPV1hfbnd0YUlDQ0NERkNBQ0RHS1xxfn59hY6RlpWOi5Oan5yVlpWMeWNgbnmFlo+DgX6BjIqCcVhMTUlHQ0E/PUVMVn+Xn52Nf3htYl1dWlJJSEdISElIRkVGSEU8PUVTWWyGdG1pUUA+QkZEQj0zJiEgISQnKis+UWBxg42NhHRuaXV+dHZwZWJjWlxHOzw7OTYxMzQ1MzY5NTg1RDs7Pzs3OzY1LS85XnBxZVZdVVRPT0RMU1ZdV1NOXEtFUEhCWkxebV1fYFZNKy45NTM2NzQ9TVFjbF9VR0RPZWNpaGlra2djXlZJPzgzNTQ7RktUWWJnbnBydnZ6fX+Dh4mOj5CPjYyLi4uMi4uLi4qKi4uMjY6Oj4+Ojo6Ni4mKhIB/gIOEiYyLioqJiIeHh4eIiYqKiomFgn98e3l4eHd3d3d3d3V0cmtkXFJJSE1TXGVscnqDiI6Rjo6MioiJioqLi4uKh4N5bV5NRUdTXWhxdHVzcnBubm5ubm5vbWtoZWNjZGhveIOMkJCOjYyMjo6NjB4eICAgIB0dHBwcHBwcHBwdHR4eHyAhISIjJCYnJycoKSopKSsrLS0tLS0tLS0uLi4uLi0sLCwsKisrKioqKSkpKSkpKiopKSoqKysqKioqKystMDQ6QEdPVVtiZWlmXVZKQjgzMjIxMjIxMDAwMTEvLy4uLi4tLSwrKyopKiwxNDg/Q0dOVFtcYmhrb3J1d3l5eHZ1c3FwbGtpZ2JeWVRPS0VBOjYyLy0tLi8tLS4tLi4uLi4vLi4uLzAwMDAwMDExMDAwMjIxMTEwLi4sLSwrKysrLS83RVtyg4yKf3RxgpKVkYuDfntxWE1RZFpgUUpQZWxlfnxcUUhFRERHRkNBRUZFR0lWX3+SlZqSkpGUl56ckI6Ul5CIjJGRkpWPhX58fo+FWGhYSkxLR0NAQT09Q2+ToaebjIh9dWtnZGNhYU1IXWZgV0lGRUVDOTI5SFxof3hfYFhHRENFQj8+OC0iISMnKissLzpNXGp3hIeCeHd9foJ6dWpeT1VIPERIT1hUPTpAPDY3QjQyPj9DRlpVPD4zMTU0N1VpZFxWXFtRQDtDYWpoXlxaVUZETD9BTVhIVmheXE5FSz9HOz82P0NIXGVof3hvTkw9QWVmZmlqa2tnY15WTEE6Njc5P0ZPV2Bob3R3fH+ChYiLj5CSkpKQjoyNi4uKi4uLioqLi4uLioyMjI2NjY2Pjo+OjIuJiIaIiYyNjIuKiIeHh4eHiImKioqJhYJ/fHt5eHh3d3d3d3d1dHBqYVlQSEdMU1xlbHR7g4iNkI6OjIqKi4qKi4uLioeBeGlWSUVKVF5qcnR1c3Jwbm5ubm5ub21raGViYmNocXmFjZCPjY2MjI6OjYwdHR4eHh4dHRwcHBwcHBwcHR4fHh8hISEiIyQlJycoKSgpKiosLCwtLi4sLi4uLi4uLi4tLCsqKiorKyoqKikpKSkoKCgoKCgoKSgoKSkqJykpKystMjk/R05VX2RnamRcUktCOjU1NDMxMjAwMDEwLi4vLy4tLS0uLSwsLjE2OD9GSk9UW19kaWxtcHN1d3Z2dHJvbWloZWFgXVlVUExGQjs3MTAuLS0tLS4tLS0uLS0tLS0uLS4uLy8uLzAwMDAvLzAwMTIxMTIyLy4rKywrKiopKSksMDpOZHiDhHp8i5GKg4WKhoOCgn16bFhdbmJWT2WEgnd8bmBPRUFGRkVIRUZISkxKQT9TboeVk4+Qk5idmo6KjI2IcYqOlI+UjoR7eXuRjXGFXUhKS0VBPzs6Okp9l6OnnGVrg351bmxramlpgZWWkoyDeFxGPjcxM0tla3JuZWFdTUhEREE/Pz0yKCUnKSwsLCwtOkxdZ3B2e4aRlYSHgXVvYVFiVk5XVVhVWD41RUNFQkQxNkE6Rk9LRkMwLjs5LDRKWlNOUFxVRj1GS1RMUUlMUVVHRUdKTVZXSElYWk1ARU9JRzg/Qzg5RFhueX15c1I0PVFoZ2dnaWpsaGJeV05FPTg7PENMVV9ncXl9gYaJjZGSkpOVlJKSj46LioeHh4eHiIqKioqJiYmKiomIi4yMi42Oj4+OjY2NjY6SkI6MiYiHhoaHh4mKi4uKiIWCf3x7end3d3d3d3d3dXNvZ2BZT0dGTFRdZm12foSJjI+OjYuKiYeJiYuLi4qGgHdoVEhFTFdga3J1dXJycG9tbW5ubm9tamdkYWFjaHF9h46SkI2NjIyOjo2MHR0dHRwcHBwcHBwcHBwcHB0eHx4hICEhJCMkJScnKCkoKSorLCwsLS4uLy4uLi4uLi4uLSwrKioqKioqKSkpKSkpKCgoKCgoJycoKCkpKSgpKSsrKiswNj5FUFlfZ2tpY1tTTUVBPTg3NjUyMTAxMC8uLy8tLS0tKy0vMTM3PENJT1VcYWVqbXBzc3NzdHJwb21qZWJeWldTUk5LRUE7NjQxLCwsLCwtLSwtLCwsLS0tLS0tKy0uLi4uLS4vLy8vLy8vLzAxMDAwMC8uKysrKyoqKSkoKSoyQFRlb3N/jI+NhYJ5dnaFhX6BflxSa3NuZl1vh498dW1nW1dQRUVKUktFRENFSUtHR0pegZaRk5SYnZmJiIyLhnJ3homCkI2Aenh5jpOUjmNHSUlFQkNPRzhRiJ2mqaNeLFh7gXl4dnp6hJWfoZmTiHlkTT42LzhTZWxzbmdhXlVLQT9BP0A+ODEqLi8vLy0rKis6UFtnamx/k6GYlpiNhntrY2VlYlhURFZNPD5CP0lBMD07QUY/R046Lj9WRC01SVRbSkFKPDxMTEhQNTo8QEZXVkZFRU9OXGZfTTg1R1lLU0w2N1JZP0RKZnBfanJPQ1djZmdoaGpqbGhkX1hPRj48PkJNVl9pc32Ch4yOkZOUlJSUlJOQj4uIhIF+e3l5e36AgoGDhoeGh4eGh4eHh4mJjIyNjY6QkJKTk5GQjIqIh4aGh4eJiouLioiFgn98e3p4d3d3d3d3d3Vzb2dfVUpGRUtSW2Nsd3+FioyPjo2LiomKi4uLi4uKhoB1ZlNJSlJbZW1yc3NxcHBvbW1sbG9ubWpnZGBgY2lzfoiPkJCNjIyNjo6NjBwcHBwcHBwbHBwbGxwcHBweHx4fISEiIiQkJSYmJykqKCoqLCwsLC0sLS4uLi4uLi4uLCsrKysrKiopKSkpKSkpKScnKCgnJycnJycpKSgpKSgpKSkpLDE5QElSXGRpa2liXFdRS0dDPj07OTUzMzEwMC4uLi0sLS8vNDc6P0dNVFpgY2dtcHJydHNxcWxqaGVhXFhUT0xIRUE9OTUxMC4tLisrLCsrKysrKysrKywsLS0sLCwsLS0tLS0tLi4uLi4uLi4uLy8uLy8uLiwrKiopKSkpKSgqKzVGWmZ8foaDf4FxYnBoaW9XWGVYXGdnZF9fcYOShHRsZ2JaTURGSlBKRUVDREdJS0xMT3iYkpGSl56XioiNjo6FdX2IeYuMgXt3domQjo9xRExLSUlDPz43Wo+fpaqliis0TXKBgn15e4uboaCUjoZ0XUg7NC85TVliZ2hjW1ZUT0E+Pz9BQj44MTMzMTAvLSsqKzVMX2hka4GYoqSkpKKYfmBWaHFmVU9hVkU8SFc+Mjw6RE9SSz4vJjRHV0UyO0dVY1ZDRUQ1O0ZbUzw3Mzc6RURIQjE6QUZhYjg8WV9YTFtQS1NuaGBjYGpuTlZfXWBmZWdlZmlqa2toZWFYUUhCQ0hOWWJrdX+Hi42QkZKUlJSSk5KOi4eAeHJsZmJgYGJkZ2tvcnh7fH9+gISEhYWGh4iJioqLjpGRlJSTko+LiYiHh4aHiYqLi4qHhYJ/fHt6eHd4eHd3d3d1cm1mXFBHRERKUFpjbXd/h4yNj46Mi4qKi4uLjIyMi4aAdWZWT1BXX2dvc3RycG5wb25ubm5ubm1qZ2VhX2RqdIGLkZCPjo6Ojo6NjYwcHBwcHBwcGxsbGxscHBwcHh8eHyEhIiIkJSUmJicpKisoKissLCwtLCwuLi4uLi4uLiwrKysrKyspKSkpKSkpKSkoJycoJycnJycnKCgoKSkoKCgoKCouMzpCTFReZGhqaGNeWFZSTktGQz89Ojg2MzIvLi4uLzAzNjk+Q0hQVl1hZ2ptcHRycG5samZiXltVU05LRkE9OTMxMS0sLC0tLCsrKisrKysrKysrKyssLCwsKysrKywsLCwsLC0tLi4uLi4uLi8vLi4uLS0sKyoqKSkpKSkpKCs1TXB6eXVxbWlpXlx2c299d3RmWl1iVEtUYnWBjIZ1aW1tZ1ZEQUlISkdERUVGRkhJTE11lo6Lj5eelYuMi46NjouMkoeOiX96dnaEi4uLektHSEZGRUE+NWOToaenpZpXMj0/Rkk+QWqHmpmShYB1ZlpTOzExPkxYWl1eYFhUUE1DPT5CREdCPzk2NjQzMS4tKSorNVJiX11ugIqTnZ+fm4t4aXhzaGBbV1pLR1ZgPTk0O0FHRkg4OT5IPEU+OTxIUVlOPDtfQz1GWl5FMS42NjxIRUA9RUhIVF5lbmtnZWllaW1sZlBVaWBmbGBla2lpZWNmZ2dna2tramZhWlNMS05SWmRveYGJjI2OkJCRk5KSkI6Kg3tyamBYUkpGRUVHS0xSW19nbG5zdnp9fX5+gIOEhYeHiIuMjpCSkJCPjIqJh4eGh4mKi4uKh4WCf3x7enh3eHh3d3d3dXJuZVtPRUFBR1FbZW95gYeMjo+NjIuKiouLi4yMjIuGgHdoXFJUWmNsc3R0cnFwcG9ubm5ubm5tamdlYmFkbHaDjZGQj46Ojo6OjY2MHBwcHBwcHBsaGhkbHBwcHR4fHyAhISIkJSYmJyYnKCkqKisrLS4tLS0tLC0uLi4uLi4uLSwsKysrKCoqKSgoKCgoKCgnJygoJycmJiYmKCgoKCYmJykqKi80O0RNV1xkaGhnZGRgW1lXUlFNSUVDQTo2NTIyMjM3Oj5ESE5UWV9laGttbm9ubWpmYV5YVVBMSkU+OzczMC8uLSwsKyssLSsrKiorKysrKysrKysrKysrKysrKysrKywsLCwsLCwsLS0tLS0tLS0sLCwsLCsqKikpKSkoKCswYX2Bb2Vpdm9kaV5me3p5bV1mYF58dWNkbHR8i4yTkIyNhXl1ZFVLTExHREVERkZKTU1KaZSPjIyTm4lbcoWJh4yPkZSNkYZ7eXV0ipGRkItcRElISENBPDpymqOoqaaadDA8Ozk3NC9QfpCNh4J5cWVYUEc1OkJMUlJUVlhVT0tIRDw5QUpLRkRAOzk3NjUxLisuMTdAVl5bYmt0foSIiIiJhYOCfnVpVVBVVFVkZExCNzUyMjs+PD9ANDc3OTw7Oj1BOjYwLTo7PjdnWjMtMD5OQTY8SlBSTGN4d3JwbmtqaWtpaWBWaHNgWnFxbWloZmVmZmdoam1tbGppZGFcWVlcY2p1foaKjY2Nj5CQkJCNiomGfnRpYFVLQT47PDs7Ojw+QkpPV2Fnb3N2eHp6e32AgICDhYeIiImNj4+Pj42MiIeHiImKi4uKi4iGgX59e3l3d3h4d3d3dnZxa2RaUUZBQkhSXGhxeYGJjY+OjIuKiYqLi4uMjIuKh4B2al5ZWl9nbnV2dHJwcHBubm5ubm5ubWpmZGJhYm57ho+SkI+Ojo+Pjo2MixwcHBwcHBwbGhobHBwdHR0fHx8gISIiJCUmJicmJygpKiosLCwtLS4tLSwtLi4uLi4uLSwrKyoqKioqKikoKCgoKCgoJycoKCcnJiYmJigoKCgmJiYoKiorLzM8R05WXWJkZmVkY2NgXllXU1NQTUpFQTs5ODg9PUFGS1FXXWBiaGpraWhoZWFcWVRQSkY+OjczMS8vLSsrLCwsLCsrLSwrKyoqKysrKysrKysrKysrKysrKysrKyssLCwsLCwsLCwsLS0tLS0tLCwsLCwrKyopKSkpKi0zR4B6cXp3dHdpaWtnanVgTUtbXGVnZWJkX2d7fYeAk5ujo52QioZ4VUNISEVHSEhJSElJR2CVkIqMkJmILzlPY3F/iIyOjI2EeXd1d5GampiVaEBHRkVBQD1FeZmipaqmnYExOTs7Ozk0OWZ5e3p2cWdfWFBMR0dISUpOUE5QUk5KSUY9NEBOTktFQ0E/Ojc2NDIyNDc6N0NXXV9kbHBxc3VzdndyamhqZlZJTVVaUVZYTjEyLDlFPzxJSjI5PDg4MS85S0QwMDc5NDw5PVErLDE2OTJIZW1SUEpxenZyb25ra2pqa25tcXF1XUptcm5pZ2ZmZmZnaGlra2xtbWxqaWprcHZ8hIqNjoyMjIuNjYuJhoB9dm1lXVZPR0E+PTs8PDw+P0JGTVZdZm1zdnd3dnd5fHx+gIGChYaGhouMjI2NjYuIiIiIiouLioqHhoF+fXt5d3h4eHd3dnV0bmpjW1BFQENIUVxocXuDiY2PjoyLiomKi4uLjIyLioeAdmpfW11ka3F1d3VwcHBubm5ubm5ubm1qZmRiYWVwfoiRkpCOjo6Pj46NjYwcHBwcGxsbGhsbGxwcHR0eHx8fISMjJCQkJiUmKCcoKSsrLCwsLCwtLi4uLi4uLi4tLS0sLCsqKioqKSkpKSkpKCgoKCcnKCgoKCcmKCgnJygoJycnJygqKSswNT1FTFJYXmFjZGNlZGFhXl1bW1hUUUxIRUVDRElNUFZbX2JkZ2loZ2RhXltTT0pFQDo2MS0tLCwrKysrKywsLCwsLCwsLCwrKyoqKiorKyoqKioqKioqKioqKioqKyssLCwsLS0sLC0tLS0sLCsrKiorKywsKSsqKi43UWR4ZGZ/goWAcHBmZmliT01MTk1aZ21fVE9MXmhwaoCJkaWooZ2cknhVQElGSElHSUpISEhUjo2Ki4uUjEA7OzxJZ32Hj46Le3V2d3iUnp2emnpCQUZKQz4+Vn6Yn6Ompp59Ljk9PDw6NTRKZ2tsamZfVlRQTktKS0pMTk9OTk5OTUtHQTVBUFJQSUZGRT88OTY6Ozs4Nzk5TFhdYGVqanB0dnhwWkdGSEpJRERHUUpGSEc+O0MyNjw/PDk5RUM9OTo7Qjw8PDM1PDE3Oz9gU0s/PDxGW2ViU09Ze3h1cm5ramppaWptbnFyc21rdHBraWdmZmdnZ2loa3BydHZ1dnh6fYGGioyNjo2LiIiFhIF+e3hybWhiXFlSTUU/Ozo8PT0+P0FDSVJZYmhwdHd2dnZ3eXp6e3x+gYOEhISIiYuLi4yLi4mJiYuKioqJiIWBfnx6eHh4eHh2dnd2c29qY1hORT9CSFJda3R9g4qOj46NjIqJioqLjIuLiomGf3doX19ianF2d3d0cnFwbm5ub25ub29tamZlYWNmcoCJkZCPjo2NkI6OjY6NHBwcHBsbGxoaGhscHR0dHh8fICEiIyQkJCYnKCgnKCkrLCwsLCwsLS4uLi4uLi4uLS0tLCwrKioqKikpKSkpKSgoKCgnJygoKCgoKCgoJycoKCcnJycnJygnKiw0O0BHTlJWWVxeXl9hYWBhX19eXFpWU1FQUFBUV1peX2FjZ2ZmYl5bV1NMR0E7NTAtKysqKikrKissKyssLCwsLCwsLCwsKysqKioqKysqKioqKioqKioqKioqKisrLCwsLC0tLCwsLCwsKysrKyoqKiorKykrLCswTnN5c2x5hYiKhH18dnN5eWRVUFtbS2BnZGJdW1ZgY2R+nJ6vs62rpJ+XgkdARklMTU1MSURCR4GPiYaLkY5END4+P0VceYaGhHp0d3l7l5ybnJmKTj9FR0RAP2iTm5udn6OefS42ODs6ODYxN1NfX1xdW1RNSUlIRkpOTk5NTU1MS0xMTEZASlJTVkdESElGREA8PUJGQkA+PkRUWFpaW19fZWhucG5lW1RMQjs8PEdTUFZdXVo4LTQ4NTc7N0JDOz5CMDE7Q1NMOEA3Njk8T1lJRDo4WHV0XFFMcHt4c29ta2lpaWhpbG5xcG5wdXRva2lnZmZnZ2lqa3B0eX2BgYKGiIuNjo+Pj4uKh4N9enVybmxpZmNgXl1XUUtDQDw7Oz0+P0BARUtWXmRsc3l4eXl3eHl5eXl6e32AgoKDhIOFhomKjImJiYmKiouKiYiFgX58enh3d3h4dnZ2dXNuaWFXTUQ/QUhUX2x2gIeMjo+OjIuKiYqKi4yLi4qJhH1yZ2BgaG11d3l4dnJxcG5ubm9ubm5ubGloZ2RlanaCi5GQj46NjY+Pjo2NjhwcHBwbGxsaGxsbHB0dHR4fHyEiISIjJCUnJicoKSkqKissLCwsLC0uLi4uLi4tLS4uLSwsKyoqKiopKSgoKCgoKCgoJycoKCgoKCgoKCcnJycnJycnKCgpKScnLDA3PENGSk5RUlZZXV9eX2BfYWBgYV5dW1tcXl9fYWNkZWNiXlpUTklEPDUyLSsqKikpKikrKyoqKysqLCwsLCwsLCwsLCwsKysrKysrKykqKioqKioqKioqKiorKy0tLCwtLSwsKysrKysrKysqKSoqKiopKy0vSX54fH54d3+Ef3d2enZwa2Zmb2doWUZjcFdXZmNkZWZrf5mtsKyvsqyuq6F3QzxIS0pHSkVBQUJtj4eDhIySay46PkBAQFNyg4J1b3d4fJOYmJeWk2FDSEhFQUR5lZ2bl5igm3EtNjg5OTo5NzM+UVZVV1ZSTkpJSUdHSk1NTkxNTkpKSElLTlxlYFVFRUVHTExKRkRTYlNDQ0I9T1dVVFBLR0lPU1lbWlxYSzo6SUxST0tJUlhLPTouNT85Ojg+Qjo4Ni4oKiw0NCg5NzU3P0g8Qj47PGh9glVNX4R8dXJwbWtqZ2doaWludG9vdnRzcG1qaGhnaGprb3N4fICFiY2Pj5CPkI+OjIqHhH52cGxnZmNfYGFfXV1aVU9IQT48PD09Pj9AQkVPV15ocHZ7fXx7eHh6eXl5enx+f4GDhIOChoeIiYiMjIuJiYyMiomHhIF+e3p4d3d4eHZ2dnVxbWdeVUxDP0FJVWFteIGIjY+OjYuKiYmJiouMioqKiIN5b2VhY2pvdXh6eHNxcXBvbm5vb21ubWtqaWhlZm15hoyQkZCPjo2Njo+Pj40cHBwcGxsbGxsbGxwdHR4fHyAiIyIjIyQlJyYnKCkpKissLC0sLCwtLi4uLi4uLS0uLi0sLCsqKioqKSkoKCgoKCgoKCcnKCgoKCgoKCgnJycnJycnJycnKCgnJygpLjI2OkBDR0lMTVNVV1hcX2FhZGVkY2FhYWBhZGVjYWBdWVJNSUM7Mi0qKSgpJyoqKiorKysrKyssLCwsLCwsLCwsLCwsLCsrKysrKyssKysqKioqKioqKioqKywtLS0tLS0sLCsrKysrKysrKikpKSkpKSssP3mJanx7fHmAioB1cnx9eXB2eX52alxRWGtnU0dkd3l6eYKPqK2qs7m0t7mxm2g3SUhHRkZDQ0M9V46JgX2Ei5JTNEA/PUBCTnCDdHF4en6PlJSXl5Z4SEhMRkJHgZidk4yWn5xiLDY5OTo6ODUyMTxLUVFTUU5NTEdHR0hNSkxLTU1JR0VFS1NXV1ZNSkZHSUxRUlBNUV5dUE1DOUhWUk1EPTk2NjY6OTk5NTEwOkZOUUE9QUREOD8+PEhJPjk/REU5NTUzNS8kMjw9Q0E2O0NEPjo4NzhFTk1FTWhvfXx4dXBua2hnZ2hpb3JxdXV1c3BubGxsbm9wc3Z7gIOHjZGSk5SSkpCOjImEfHVuZ2NgYV9eXl5fXlxbWVRNRz88Ojs8PD0+QERJUVthanZ8gYB/fnt5eXp6ent7f4CDh4WDgYKFhoaIiYqKiouLi4uJh4SAfXt5eHd3eHh2dnVzcGxmXVRKQT5CSlVjcHuCiY2Pjo2KiomJiYqLjIqKiYeCeG1jXmJpcHV4eXZzcHBvb25sbW5ub21ramhnZmdwfYeNkI+Ojo6Pj4+Ni4uLHBwcHBsbGxscHBwcHR4fICAhISMkJCQlJSYnKCgpKSorKyssLS0uLi4uLi4vLy0tLS0tLCwrKioqKikpKCcnJygoKCgnJygoKCgoKCgoKCgoKCcnJycmJiYoJycoKCgpLTAzNjo9QUFHS0xPUlZXXF5iYmNjY2NjYWFhX1tXUU1IQTszLiknKCgpKSgoKisqKysqKisrLC0tLS0tLS0tLS0tLS0tLSwrKyssLCoqKioqKioqKysrKyssLS0tLSwsLS0rKysrKysqKiooKCgpKSkqN2uRcVhvd3qCho2GfoCAhHxudnNwd3BoY1ZjfW9HNFh2fHqFj5yjrre6u7u7ua2KQkJFTEpEQkNEPkZ+jIJ9f4WRiD04Pz4+RUNhgndzeX9+hYiIk5aWiU9OSUZBSoOanpuam52aXis2Nzc5OTk3MzAtOEdOT09NS0tJR0dGS0tNS01NSkhGQ0ZTTUtOUlNJSUlKUVZXW2FpWUxKQjlFVlNKQj5ARUhAOjIvLy0tMDdDRTcyMjM6Oz5DPkRNSz89OUJIOTY4NjQ0NzlBQzk0MzxBPTs5Ojo9PDc0OD5AQkpPWGNubWxpZ2dpaWxpbHR2dXR0cXJydHZ2eHyAg4iKkJKUk5WUkY+MiYR+dW1nYl5bW11dXl5eXVxcWlhSTUhAOzo6Ojs9PUBFSVNbZm95gIWFgoB+fXt5enp7e31/g4WIhoWCgoODhoiLi4yLioyLiYeEgHt5d3Z3d3Z3dnV1dXBrZVxSR0A/Q0tZZ3N9hIqOj46MioqJiYmKioqKiomHf3VpXV1ham91eHh1c3FwcG5tbG1tb29ubGxqaWdqc36Ij5GPjYyOjIyNjo2OjhwcHBwbGxsbHBwcHB0eHyAgISEjJCQkJSUmJygoKSkqKyssLC0uLi4uLi4uLy8tLS0tLSwsKyoqKiopKSgnJycoKCgoJycoKCgoKCgoKCkpKCgnJycnJiYmJycnJycnKCsqLC4wMTU2Oz9AQ0dMUFRaXV5fYGBgYF1cWlZRTEdBOjMuKyknKCkoKCgpKSorKyoqKyssLCwtLS0tLS0tLS0tLS0tLS0sKysrLCwrKyoqKioqKisrKysrLC0tLS0sLC0tLCwsLCsrKioqKCkpKSkqLEdvaFdZcXV8iYaHg4uMg32Cf4B7cXVscG1YRWRzalJHXWZ0go+QmKi1u7u8u7q1nl03PkFFQkNDP0BDZJGIfn6BipdmMUBAPkNIcYB4eHp/fnt6f4yVl49bQEVHSEqCm52cnpqalFEwNzo5Ojk4NjMvLjA7RU1PTk1LSUdHR0VLTUtLSkhFRkNEWFFMTlNUSElJS01VX3J3b2RdS0I9TVtSSEdNUVJQSD8zMC8wMDAyMi8vMDMyNTs7Rjs7RUI5Mzg+QT03OTc5Oj4+ODIzNjNCTz02NTg5Ojw7OT1DQjk6QkVIUl1hYWdpaGpvb3R5enl5eHZ4enx+gIOHiYyOkJKTlZOTkI2Ig3tza2NeXVxbWFpcXFxdXVxcXFlWUktFPTs6OTo7PDw+RUpSX2dxfIKHh4WDgH98e3p7fHx/g4WJioiGg4GBgYOGiYuMjY2Mi4iGgn56eHZ2d3d2dnZ1dHRvaWRbT0ZAP0VNWmZ0foWLjo+NiomJiYmJioqKioqIhHxyZVxZXmduc3d2cnFwcHBubWxtbW9ubm1samlobXaBjJCRj42Mi5CSk5SSkIsdHRwcHBwcHBwcHB0eHx8gISIiJCQlJSYmJycoKioqKisrKi0uLi4uLi4uLi4uLi4tLS0sLCsqKikpKSkoKCgoKCgoKCgoKCgoKCgoJycnJycnKCgnJyYmJycnJycnJiYoKCgoKysqLTE0Njg+QkdMT1FVVlZZWVdVUk5LRUA4MykpJycoKCcpKCoqKSoqLCwsKy0tLC0uLi4uLi4tLS0tLS0tLS0tLCwrKywsLCwrKisrKysrKywsLS0tLS0tLS0sLSwsLi4wNispKysqKikqLDVZXmN3f15rfoiAeIGIi4F8fHt7cW12b3h1XEFWcH11Y1ldYnuKkZOjr7q8u7u6uKdwMDY9QkFERUREQ06DkIZ+fYKSjkgxP0JLbX58e4CAhomJh4mOlJWNZT9DQ0VQgZecnJ+bmZJAMzs7Ojo6OTg2My8uMD1KTE1MTExKSkdJS01JRENBRURFRVhbTU9UU0JISUtNTlttbWxnZkk/RFteUlBWV1dWS0A4Mi4qKS0uLi4vLi4vMTQ3OTg0ODUyLjE7QT47OzY5Ojs8OTgxOjoxNDQ3MjhCSUc+NzU+Q0RGQz45P1BYW1lcZG1xdHZ5fX59fX1+gYOEh4qMjIyOjpCSlJKQjIeCe3BnXVdYWVtcXF1dXFxcXFxcW1tXVVBKRDw6OTk6Ozw8QEdLU11rdn+FiYmJhoN/fXx6e3x7gISGiouKhoOBgIGFhIeMjYyNi4yJhYJ9end1dXZ2dnZ2dnRybWdhWU9FPz1FUV5rdoKGi46OjYqJiYeHiImKioqKiIJ4bl9WVVtibHN2dnRxcG9ubWtrbG1vcHBvbWtqam96hY6RkY6Nj5GQkI+PjYuJHR0cHBwcHBwcHBwdHx8fICEiIiQkJSUmJicnKCkpKiorKyotLi4uLi4uLi4uLi4uLS0tLCwrKiopKSkpKCgoKCgoKCgoKCgoKCgoKCgoJycnJygoJycmJicnJycnJyYmKCgoKCkpKCgrLC4yNTc6PkJESUpKTU5LSEdDQDoyLCkoKCcnKCgnKSkqKyoqKiwsLS0tLSwtLi4uLi4uLS0tLS0tLS0tLSwsLCwsLCwsLCssLCsrKyssLC0tLS0tLS0tLS0tLS4uNFNAKCsrKiopKjJIUm6Kh4pxaW1+jZOFhYiDe3uAf3Zwcm1NP1VCYnh/eHxuWF9qgIyYn6iyu7u7urqmdDQ3PD8/Q0VDQ0NGY5CNgXl6g5CIRC1DXIN+fH2ChYWIjIyOj5KSkHpJRkFGTH+WmpqcnJmVSTU8OTo6Ojo5NTQyLis0RUxPTk5LSUpMTE1LR0xQUlBLREFFXU9OVFM/RUhKTU5RXmJgXl5NS1JdXVlcX1xXUEU9ODYtJicqKystLS0tLTAxMjVAQT48PEZHSEJGPzw3OTc3OTM0NTYzMS8yNjEzNzo5Pzw6Pjw/RUtKR0E3PU5pYEhdeHx6fYGDhIWFhoiJiouKi4yMjo6Pjo6MiIB4bGNWTkxQVFhZW1tcXFtbW1tcXFtZV1VQSkM7Ojk4OTs8P0JFTVdhanN/houLioiDf3x7ent7fICEiIuLiomFgYCBgoOGjIyOjoyLiIR/fHl2dHR2dnV1dXV0cm1nYFhLQTw9RVFfbHiDiYyOjo2KiYmJiYiJioqKiod/d2xdU1NaY210d3VzcXBvbWxra2xtb3BxcG9sa210fYmPkI6QlJCNjIqJiYiIiBwcHBwbGxscHR0eHyAgICEhIiIkJCUkJScoKCoqKioqKyssLi4uLi4uLi8vLS0tLS0tLCssLCoqKSgpKScnJycoKCgoKCgoKCcnJycnJycnJycoKCgnJycnJycnJycnJykpKSkpKSkpKSkqLC8wMzU3Oj9BQUFCQT07NjIsKScmJycoKCkpKSkpKisrLC0sKywsLSwtLi4uLi4vLy8vLy8tLS0tLS0tLS0tLCwsLCwsLCwsLCwsLCwtLS0tLS0tLS0tLSsrLC8xLSoqKioqKyxBWF97j3iDflJKVGWNhn+Hh4KIgHR0d3N1cGJUPkyBdXSAh3JYX2+DkJ6lrrS5u7q5o2kxNzo8PkFBQEBGQ0RtkYZ9e32Aiok7MmeDgH2AhYeHiYqOj4+PkI6DVktEREt9kpaYm5qak1A1OTo7PDs7Ojk0MS4sL0BLUFBMSkhITExNUFFRUVBNRzowMWFWTVFNND1DRkdKVl1iYV5eYmJkZGRkY2BaUkU8OTc3LicnKSoqKysrLCwuMDAxOT1BSEtGRk9PS0VCPEU+Rk9SRj85NjE0MzM0NTM1MzhDRj1AQTk6QEdLSUc/N1FhVl50g4aKi4qMjIyNjIuKiYiHiYmJh4aFf3duZFZNRkZMU1ZZWVlaWlpbW1tbW1taWldUT0lBOjo5ODk7PD1BSlheYWx3gIaKi4uJhIB9enp5e32BhIeKi4uIhoKBgYKBg4eJjI2Mi4aEf3x4dnR0dXV1dXV1dHFsZl1VSUA6PUVRX216hYuNjo6MioiIh4eHiIqKiomFfndpXFFTWmVudXd2dHJxb25sa2tsbW5vcHBubWttdYKIj5CSlZKOi4mGh4eFiIgcHBwcHBwcHR4eHh8gICEhISIiJCQlJCUnKCgqKysqKisrLi4uLi4uLi4vLy0tLS0tLSwrKysqKikoKSknJycnKCgoKCgoKCgoKCcnJycnJycnKCgoKCcnJycnJycnJycoKCgoKSkpKSoqKikqLC0uLjEzNjc3NzYyLywpKCgoKCcnKCgpKSkpKisrKy0tLCwtLS4uLy8uLi8wLy8vLy8vLS0tLS0tLS0tLS0sLCwsLCwsLCwsLCwsLS0tLS0tLi4tLS0uLSwtLCwsKiorKy04T1F5h4BUYltPSk1pm5mJho2RkI58dHl8eoB5b0g/Xnh4dYSGblNjcYGYpqmssLe6tZpOLzk6Pj49QEE+QUJCS3uMg316eH+LgUB3g317gYeHgoaLjo+QkZGRkm1OTEVJfJCXlpeXlpJVNTk7Ozw7Ozk3NDMuLSw5SU9TVldXV1dWU1FZW1hPQjMsKCxdXk9QSiwvNDk/VFtgZV9gamxtaGlpaWpgVEY/Ojo5OTIpKCwqKysqKiopKi0uLjI9SUtNUE5YT0lMSEFGTVFWTkIvMjY0Ly8xNDYwLzhLQDs4NU5USUE5OUBER0E5PVFbVGuLkY+OjY2LiomGhoSAfn19fXx5eG9qYFZMRkRHS1FUWFhXWFhYWVlZWVpaWlpWUkxGQTo6OTg5Ozw/QUxUV2Bsd4KHiouKiIN/fXp5e3t9gYSHi4yLiYaFgoCBgIOFiImKjImHg355d3Z1c3V1dXV0dHRxa2VcVElAOz5GUmFue4aLjY6Oi4mIiIeHh4iKioqJhX1zZlhQU1tncXZ3dXNycG9ubGtsbW1ucHFwcG5tcXmBjJSXlJCNi4uHhoeHiIqKHR0dHR0dHR0dHR8fICAhISEiIyQjJCUmKCcoKSsrKyssLC4uLy8vLy8vLy8tLS0tLCwtLCsqKiopKSkpKCgoKCgoKCgoKCgoJycnJyYmJycnJygoKCgnJycnJycnJycnKCgoKCgoKSkpKikpKioqKioqLCwtLS0tKyopKCcmJigoKCgoKSkpKiorLCwsLS4uLi4vLy4vMDAxMTExLy8vLy8tLi4vLy4uLS0tLS0tLS0sLCwsLCwsLC0tLS0uLi4uLi4uLi4uLS0rKysrLC0wSktQhY9iTUhFSlNokK6poZuXoJiQjIR2dm9wa29POjtIYoSKhH5pVlx5j5+lp6eps6l8NzI5PD08PD9BQEI+P0JRg4qCe3t2gI13g3x3fIOGgXyEioyMkZKTkZB7Uk9HSXiPlZOUlJOQYDc8Ozs8PT06ODQxLystOFhtdnVvamFdWVZfZWJcSzQmJSUnVGNMTEgtLi4wVGBmYmFleHFwaWdqa21sXElCPzw9PT02LzEyMjEwLikoJScrLi4vOUFMT0lWYFFKRj9HS0xFRUpGMSMwOTMtLi8wLC8/TXh/X0M8RVBUU0w9OTo9PUE4PE1YapCTjo2KiIaFgXx3c3JycXNzcW9rZVxUSkZFSExSVFhYWFhZWVpaWlpZWVtaVlFNR0E8OTg5Ojw9PkRJUFlib3mChomMioiDgH16eHp6fYOFiYyLiomIhIOBgIGCgoWIi4uLhoN9eHh2c3R1dXV0dHRzcGpkW1NHPz0+SFRjcH+HjI6Ni4mIhoaGh4iJioqKiIN7cWNXUVdganJ2dnVycnBvbm1tbW1tbnFxcW1tb3R+jpaUjoyJiYqKjIyNjIyLih0dHR0dHR0dHh4fICEhISEiIyQkJCUlJicoKSkpKSsrLCwtLS4uLy8vLy4uLS0tLSwsLCsqKioqKSkpKSgoKCgoKCgoKCgoKCgoJycmJykoJycoKCgoJycnJycnJycnJygoKCgoKCgoKSopKSoqKSkpKSkpKioqKiopKSgoKSgoKCgoKCkpKSorLCwsLS4vLy8vLy8uLzAwMTExMTEvMDAvLy4uLy8uLi0tLS0tLS0tLCwuLi4uLi4tLS4uLi4vLy4uLi4uLi0tLCwrKy0uNVZJaImBS0dFWHKGl6Gnra2sp6KbgIaLfW9rbXNyXT8/ODNHbXeCflldcICSnqShnZ+KTzQ7Ozo6Ojg7Ojw/PkJNT2SJhXt5d3mEjol8eH6FgYB+iI2IjJCSkIuJg1NJSE9wi5GUlJKRjGo6PDs9PD08ODU0MDAuLluAhH1zb2lbV1VUWl1dWEUsJikoKkhsVUxKLywvVGtra2dse3lvamhlZ2ttZVxSSkVBQEI/PDk3Njg2MzAqIyMkKCwtLi84QUZRW2BSS0xUUVpjX1dRSTUhKzw8MS4wMC4rKjx2kY+Uh2VJP0pQUFFOPDdCREI6Q1doipCKhYJ8e3ZxbGlpaWtsbm5taGNcU0pGRklNUVVZWVhYWVlaWlpaWVlZWFZRS0VAOjk4Ojs8PUFGS1RcZHF6goaJi4mHg4B8eXp6e3+DhYqMi4qIh4eHhIGBgYOEhYiKiYaCfXh3dXR1c3N0dHR0cm9qZFxSRz8+Q01ZZXJ/h4yOjYuJiIeHhoeIiYqKioiDem9iVlNYYGpzeXd1cnFwb25tbW1tbW5wcXBvbW19lJiTjYmGiImMjI6NjYuLjIwcHB4eHh4fHyAgISEiIiIiIyQlJSUmJicoKCcpKioqKywsLCwuLi4uLy8uLS0tLS0sKyopKiooKCkpKSkpKSkpKSkpKSgoKCgoKCkqLCkmKCcnKCgoKCgoJycnKCcnJycoKCgoKCgoKSgpKSkpKSoqKiopKSgpKSkpKCgqKSkoKCkpKCgpKSorLC4uLi4vLy4vLzExMTExMTExMTEyMjExMTEvLy8vLy4tLS0tLS0uLi0tLS0sLS4uLi0uLi4uLi4uLi4uLi4tLS0tLS0uLz9dbn9ubkc+YY6an6imoaOjq6qqqY53f4F/eHyBemJbS0hDREpxeX1vXmp3iJOcmZKKbEQ6PTo8PUFDQz89PD5CSEpSbYh/eHV2fIWKenZ7gX+BeYWNf3R9kZORkpBoRUlRZ4SQk46Ijot1PDk6PD07Ojk0NC8uK0t7fnp2cnBlX1hRSkhDREdCNDAwLS5BbFpNTDAxRWptcm94gnx2bmlmY2hsb21oXlhUUE9JQT08OTw5ODYsJSIjJCYqLi4tLjJEXmVoXFBWWGRsaW5saWRaRzg4NDYvLS00PD9FWXZ6hZGSh29RRExUVVI+OT1EQjg9V2+Kh3t4c29raGdmZ2hqbGxtb2ljXFNLR0ZJTVJTWFhYWFhZWlpaWltZW1hVUEpEPjo5ODk6OzxBR0xTXGdzfIKGiYqIhYB/enl5d3t/goaKjIuKiIiHhoaDg4GCgoSGhoaFg315dnRyc3R0dHR0c29tZ2NbUUc/QEZQXGh1f4iOjo2Ni4eGhoaHiImKiomHgnhtYFVUXGRudHd0dHFwb25tbW1tbW1ucXFwbXCGl5eSjYmGhoeJi42NjIuJi46SHh4eHh4eHx8gICEhIiIiIiEiJSUlJiYnKCgpKioqKissLCwsLi4uLi8vLi0tLS0tKyoqKSoqKSkpKSkpKSkpKSkpKSkoKCgoKSkpKS45KycnJygoKCgoKCcnJycnJycnKCgoKCgoKCkoKSkpKSkqKioqKSkoKSkpKSkpKSkpKCkpKSkpKiorLSwsLy8uLzAxMDAxMTExMTExMTExMjIyMjExLy8vLy8uLS0tLS0tLi4tLS0tLC0uLi4uLi4uLi4uLi4uLi8vLi4tLS0tLi9FdHplQ1JCWI2opaSjpqilo62vrquikZCNhoSFiXdsamBlW2VXX3d7e2VmcnuGjo6JdEpCOkE+PT1CSUpPSkRCPz9IUVJxiXt3dXd8h4JzcXl7d2tuh3dic4+YmpqVe0VDTV6GkY6Ed4yMekA2ODs7OTYyMTEwLDhxfXl3dXVrYFZTVE1FQTo7Ozw5NjQ0PmhaUFAzOWZqcXSBiIN9enJvcXNsY2Z0eG9mZV9YUUpFQD5APTw3KiQkJCQmLS0uLCksR2RlZ15bW2RxeYWGgn17fndhPDA0Lis2RkZEP0NMTF5gXHN8fXtbRkdMRkdANz9APUFbc4Z5cG5qaGdnZ2doamxubW1rZl1VTkdIS09SVVZWWFhYWFlaWlpaWlpYVVBKRD46OTg5Ojs8QkdOVl9qdH2ChomKiISAfXl4eHh8gISIiouKiYiHh4eFg4KAgYODhIOEg4R/eXZ0c3Jzc3Rzc3JvbWZhWU9EP0FHUl5qd4GJjo6Oi4qHhoaGh4iJioqJh4B2al1UVFxlbnR3dHNwcG9sbG5ubW1tbnBybXePl5SPi4mHhoWGiIqLi4uLjY+Rjh4eHh4gHx8fISEiIiMjIyMiIyQkJScnJygoKSkqKissLC0tLS4uLi4vLy4tLS0sLCwrKioqKikpKSkpKSkpKSkpKSkpKCgoKCgoKCgnJycnJycoKCgoKCgoKCkpKCgnJygoKCgpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkoKSkqKSoqKyssLS4sLS4uMDAxMTExMjIyMjIyMTIxMTExMTExMTAvLy8vLy4uLi0uLi4uLS0tLS0uLi0uLi4uLy8vLy4uLi4uLi0tLS0sLC4vRG1MQkBFUYaoraqpoKChoZ6sr6+lnaCim5GSk492bmFlbmloZmVwgIJsYG52fYOEeVQuND5EPj9AP0BASUVETT46QUZPSXiHfXZzeXqCg3V0dHBXYX13bXuQlJWYmI5VQkVkj5qXi3KFjX5BNzc5OTg0MzIvMC5He4t5cHRwb21gcIFzWzpGQDo7Ozs6OD1dXFBTQV5qbniJioN+f3p6fXxuX19eaXd0bWVhWVhVUUtHREI+MicjIiQjKjEuLisqK0teX2FUXFlhYG17dXN5en96cmpUNTA0Pj89OTc4PlFsa2JdXWNzaVtOSkZPUEk/PUA+QVt4gnJsa2loZ2ZmaGpsbW1ua2NcVk5MSUtPU1RWVldXWFhZWVlZWlpZV1VQSEI9Ojg3Ojo6PUNJUFhha3Z+goaKioeDf3t2dnd5fYGFiYuLiomHiIiGh4WFgoCBg4KDg4SDf3p3c3Jyc3JycnFwcG1lXlhOQz9DSlZhbHmEi46PjoyJh4aGhoeIiYqKioZ+dGdcVFdeZ3F2dnRyb21sbW1tbW1tbW9tb4KTlZCOjIuKiomIiIuLi4uOjY2Pjo0eHh8fHyAgICEhIiIjIyMjIiMlJSYmJygoKCkpKiorLCwtLS0uLi4uLy8uLS0tLCwsKyoqKiopKSkpKSkpKSkpKSkpKSgoKCgoKCgoJycnJycnKCgoKCgoKCgpKSgoJycoKCgoKSkpKSkpKSkqKikpKSkpKSkpKSkpKSkpKCkrKyoqKyssLC4uLS8vLzAwMTExMTIyMjIyMjEyNDIyMjIyMTEwLy8vLy8uLi4uLi4uLi0tLS0tLi4uLi4uLi8vLy8uLi4uLi4uLS0tLCwuLz1UR0NEVHSbs7KjpqiipKWjqqelnpeYoqGVk5CKcWRjZGltZ2ZrdXl0fGBrdn16fGo8LDI5Pz4/QD8/P0JGSEpBPD5BSk1MeYd9dXZ6gYaIeGxbVlx3gIaPkYyLkJONY0NDT4ygoZZego+BPzc4OTc3NzQ0NTY2TZSPiX5xgZ+XlYZ/foBQO0REPDs6PDw7U1xOV2Vxc3+JiISAgYODhXhnYF9eYGJiX2FiXVhVU1JPTUhGPCkkIyUkJS4yLy4rKzJOXF9XR1FbXV1hbXp5d3d1cmhpalpKRj4uNjs1Kyo0VIKKj4uJfmddU05QVk5MTT44PT5FWoN+c2lnZWZoZmlqa21tbWpmX1hQTUtNUVNUVlZWVlhYWVlZWVpaWFZTTkdBPTo6OTo6Oz5ESlFZY213foSIiYmHg315dnZ3eX2BhYmLi4qJh4iIhoaEhYGAgYN/gYOCgX97dXRzc3R0c3NycXBtZV5WTEM/REtYY257hYyOj46MiYeGhoaHiImKioiEfHJmWlNZYGtzd3Z0cHBvbmxtbm5sbG1tcoqWkoyMiomIiouJh4eHiY2Oj46OjY2MHx8gICAgISIiIiIiIyMkJCQkJycoJygoKCoqKisrLCwtLS4uLi4uLi0tLi4sLCsrLCsrKyoqKSkpKSoqKSkpKSkpKSkpKSgoKCgoKCgoKCgnJigoKCgnJygoKCgoKCcnJygoJygoKSkpKSkpKSkpKSkpKSkqKioqKiopKCoqKiosLSwtLS4uLzAwLy4wMDIwMTEzMzMzMjIyNDMzMzMzMzExMDAwMDAvLi4vLy4uLS0uLS0tLS4uLS4uLi4uLi4uLi4uLi4uLi4tLS0rLy8+RkZDTnGEprKxmJqtrrGytrevrKOZkpidlpB+dmlbb2pkZWhudnqCgntqZnJ7e3hfMSwwMTpDRERBPj08OUNKSDo6PUhNQ1KGhHx5fHyDjolrSFFUa4CSnZiTj4uIfm1KQ0R2maChjHOTdj86Ozs8Pj9APkNCMladnaCgh32Tl5iEb3BrVTI3P0Q/Ozw9PEpfXWdwb32Dg4aGhYqQiXJjYmRmY2ViXlVOVFRVUlJQUE5LQy8lIyQkJis0NDIvLTVEUF5aR0NJV11cXGFyfnlxaGltaWV2aEg6LTAwNjQuLzRSgYuKhWFecnx2aVhLR0NFR0JBQEFthIFxamhoZmdpamxtbG9sZ2BZUk1MTlFTVFZWVlZWWFpaWltaWlpXU01GQD07Ojo5Oz4+RExRWmVveX6Eh4eGhYF8d3Z2eHt9gYaKi4uKiYeIhoaFhoWCgIGAgIKDgYJ/fHdzdHJycnNzc3BwbWRdVEpDQUVOWmVyfYiNj5CPjIqJiIeHiIiJi4uHg3xxY1hTWmJrc3V1c3Bubm1ubG1ta21sdo+Yko2JioqLiouIhoWGioyPj46Oj4+OjCAgICAgICEiIiIiIiMjJSUlJScnKCgoKCgqKiorKywsLS0uLi4uLi4tLS0tLCwrKywrKysqKikpKSkqKikpKSkpKSkpKSkoKCgoKCgoKCgoJyYoKCgoKCgoKSgoKCgnJycoKCcoKCkpKSkpKSkpKSkpKSkpKioqKioqKyoqKioqLS0tLS4uLy8wMC8wMDEyMzIyMzMzMzU1MzM0NDMzMzMxMTAwMDAwLy8vLy8uLi4uLi4uLS4uLi0uLi4uLi4uLi4uLi4uLi4uLS0tKy4wOUFFT3CGkLC1tZ6Mqq+ztbm4s62gmJKVmpeUe3pqYmlgYWNzdHyAhpGQflJicHh1WCwoKzE3PEBBQkA+Pjw7QUE8PTtBS0g5WoqGfXt7gIaLgUVJVl94ipOZmpeViXRxUURFV4iZnZZ2gkpCQkNERkRDQD09OTJuqaWim5B+iIV8eWdbSUE3NTQ4P0A7PDpDYWhrcXaEhYeIjJKVgGVgZ2hqamhkZF5NOz1MUlBQUVBNST4qIiIlJyowNTY0MjVFUVBSRkBGSFBbXF9bYm5oZmNYUVJZY2lLMzAxLi8yLywtOG+EgIGAcnaBhIaGhXhNPUZCP0NFTGJzeG1qZ2lnaGpsbm5vamdgWVJPTU5RVFVWVlZWVlhaWltcXFpZVlNNRkA8Ojs7OjxAQ0hNVFxncHp/hIeHhoN/fHd3d3h7fYGGiouLiYiHiIaGh4aFgoB/gICBgYKCgH14dHNzc3J0dHNxcG1kXVNHQUFHUF5qdYCJjo+Qj4yKiYmIh4iIiYqKh4N6bmBVVlxkbXN1dXNwbm1sbWxsa25nd5CXkY+MioqLi4qKh4SHio6Qj4+Ojo+PjosiISIiISEiIiMjIyMjIyQkJCQnJycnKCgoKioqKyssLC0tLi4uLi4uLS0sLCwsLCwsKysrKikpKSkpKiopKSkpKioqKikpKSkoKCgoKCgoKCcmJycnJygoKSkoKCgoJycnJycnKCgpKSkpKSkpKSkpKSkpKSoqKioqKisqKyssLiwtLS4uLy8wMTExMTExMjMzMjQ0MzM0NDQ0NDQzMzMzMjIxMTAwMDAwMC8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4tLS0tLCwsLzxEVXSFjqWztLehf5yhq6Wpqaeoo5uSi5GSiXx4cWdnZW1ucXR/houaoJtTUmp1dFInKCsuODY6SURBPz08Ojk9Oj07P0dNREZ7j4d/e3mAhYt8R09YeoqMjpGTk5CBeWFGQ0RpjZmYil9EQT89P0A9OTo3UmBCha6ilYqJio5xaGlaUUM4NjQzMjQ+Qz88QVdrbnR6goWLj5qYf2lnZmZpbXBta2ZcQjAwPkxSUVJTUko3JiIiJyssMzY1OTpAS1JPRDc8QUlQVFdXXWBjWVxcSD03MjpHV082Ly8yMS8uLklfZ3h7eXt8foKAd2tvYlQ+Q0hFRUdFUFBTXmNnZ2hrbGxtb2xnYV1UT01OUlVWVlZVV1lZWVpcXVxcWlVSTEZBPj09PTw+QkdMUFdgaXJ6gISHh4aDfnl2eHh5fH2BhomLi4iHhoeGhoaHhYGAgIB/gYGBgYF9eHRxc3JzdHRycWxqZF1RRT9CSFRga3iCio2Pj46LiomIiIiJiYiJiYaCeG1eVlVdZm90dXNxcG5ubWppa2pofpaXkY2Ki4yMiYmJiYmLjo+PkI+Pj4+Pj4yJIiEhISIiIiIjIyMjIyMkJCQkJycnJygoKCoqKisrLCwtLS4uLi4uLi0tLCwsLCwsLCsrKyopKSkpKSoqKSkpKSoqKiopKSkpKCgoKCgoKCgnJicnJycnJycnKCgoKCcnJycnJygoKSkpKSkpKSkpKSkpKSkqKioqKiorKisrLC0tLS4uLy8wMDExMTExMjMyMzQ0NDQ0NDQ1NTQ0MzMzMzIyMTEwMDAwMDAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLS0uLi0tLS0tLSwsLC8/UW+GiZiupqWynXB+j6afmqSsqaCZjoWNk4qIenNsamNrcXV0fYWMn6mtbkplamhMKismLC4+TUtKQkFBPzw7Pjs7PT5ESEZGd3+NiH57e32DjXVKUnaHhYSAf4eQjnlyTkZDS3ONj3JMRUA/PT49PDo6NUdkWIGpm5eDfoKAZltQTU1DNjY0MzEyNj5JSEJFYG9zeICIjZaTf3Nxa2tqa2xwc3BqWDkuLzNCT1FSUlBBLSUkJystMDs/QkFCRkdITEI4OT5IT1FOVllZWE9DMywuMTMzNEJPTzo3NjE4OzZOPTxTcHV5en91Yl1rcXGFbT5MRT5ISEtNTlFVVl9kaWxubm5rZ2JfVlFPT1NWVlZWVVdZWVlaXF1dXVlXUkxGQUA/Pj9AQkVKTlJbYmt0e4CChYWEgX15dnd3eXx/g4eKioqIh4aHhoaHh4WEgYB/foCAgYB/fnlzc3JzdHNzc3JuaGFaUUU/QktYY255hIqNj4+Oi4mIiIiIiYqJiIiFgXdsXFNXX2hwdHVzcXBubGttamlsgpaWj42Li42NjYmJiYqLkJGPj5CPj4+Pj4+MiSIiIyMjIyIjJSUkJCQkJCUlJScnJycoKCgqKiorKywsLS0tLS4uLi4tLSwsLS0sLCwrKysqKSkpKioqKioqKSkqKikpKSkpKCgoKCgnJycnJyYoKCcnJycnKCgoKCgnJycmJycoKCkpKSkpKSkpKioqKioqKioqKiorKioqLC0tLS4uLy8wMDEwMDExMTMyNDU1NjY1NDQ0NjY1NDQ0MzMyMjIyMTExMDAwLy8uLi4uLi4uLi4uLi0uLS0tLi4uLi4uLS0sLCwsLS0tLSwwQ2WAjouhqZqdq5dwcpGlrq6srKeemI+Eh5OOgoCDfXBpZm5yc3uDhJOpropHX15dRy4uMy4tNkc6PkZDQkA8Pj08PDw9QktMSHpyeoqHgHx7gIWKbE1je4B5bmRrfY2Ngl9FREJMY3BURkVBPj09PTs6ODE0WmqBpZOPgHl2bWVXTENCQTc0MzM0OkNLU1NTRUdPVVhcc4WHfICAenFtbG9wdndxaVM0LTAwNUhSVFFIOC0qKywuMj5JTU5PT05HRUY6ODo+QkpPT1RTSUAtK0Fgeo2bo6alpaOUfmtdV0YyPUA1P1lvc3l6alxheYyOh4ZKQ0c8RUtFVWNYVlVTV1pfZWtrbW1nX1hUUlFVVlVWVlVWWFlZWlxbW1tYVU9MRkJBQEBAQkRITFJWXGRtdXyAgoSEgoB7d3Z3dnt8f4OIiomJh4aGh4eHh4aFg4KAfn5/fn5/f355dXNzc3N0c3JxbGZfWE9FPkRNWmVxfYWLjY6Pj4yKiYmHiIiJiYiHhH50Z1pTV19pcnR1c3BvbGxrbGpqhJeVkY6MjY2OjIyJiYmNkZCRkJCQj4+QkJCQjIkjIyMjIyMjJCUlJCQlJSUmJiYnJycnKCgoKioqKyssLC0tLS0tLS0tLS0sLCwsLCwsKysrKikpKSoqKioqKikpKSkpKSkpKSgoKCgoJycnJycmKCgnJycnJygoKCgoJycpJycnKCgpKSkpKSkpKSoqKioqKioqKioqKyoqKiwtLS4uLy8wMDExMTEzMzMzMzM1NTY2NjY1NTY2NTQ0NDMzMjIyMjExMTAwMC8vLy8uLi8uLi4uLi4tLi0sLC0tLS0tLSwsKyssLC0tLS0sMEp4kZmTj5KRmaOciIidqbK2qo2YnZiOhISQinN7eHR2c2lxd3yEjIyXqbCjUlVXVkAqK0FDMjAwMzdEQUBAPT88PT07Oz9ESkd7dmp/joZ/fHp/hohgUmZtY15eXmuCjYl+SD9DQUFCR0hEQj89Pjs5NTIyNVRkgqWfgHx2aV9VVExEPzgzNDs/R1JWWVtYWVlNSUdJT1VdaXqKjIZ4aWhyeX5/em1GLiwwMzE3SU9JPC8uLS4xMkdZW1pdXllUT0c8NzY8QUZKTU5LPTIpN1h5j6a2u7u7u7q7urWuqploLzE1NDA/WGt1fYB7d4KGgnN8bWJBSkVITU5udWhiZFtWVlddXWRkZGFbVVRTVVZVVlZUVVhZWVpbXVxcWFVRTEdDQkFCQkRGS09UWF9mb3Z8gYKEg4B9eXZ1d3h7fIGFiYuJiYeGhoeHh4aGhoWDgH9+fn9+fn5/enVxcXJzc3NzcGxmXlZNQ0BFUV1nc36Gi42Oj46LiomIiIiIiYmJh4N8c2ZZVFtja3JydHJvcG1ramtriZiUj4uLjI2Mi4uIiImNkZKPjo+Qj46OkJCQkIyJJCMiIyUlJCUmJiUlJSUlJicnKCgoKCgoKSsrKywsLCwuLi4uLi4uLSwsLCwsKysrKysrKyoqKioqKioqKiopKSoqKiopKSkpKCgoKCcnJycmJiYmJiYmJicnJycnJycnJiYoKCgoKCgpKSkpKSkpKioqKiorKysrKyssLCwsLS0vLy8vMTEyMjMzNDMzNDQ0NDU2NjY2NjY1NjY2NTU0NDMzMjIxMDEwMDAwLy8uLS8rLi0tLi0tLS0tLCwsLCwsLCwsLCwsLCwtLS0tKzBbhpebnpOJkI2TlpqdoKesraiRmZ+dkYmKj5Byd3Z3entyeH2BhIqDcJ2upVhOUEo1KCo3Qy8tMDAwN0NFPUE+PDs7OTtARUtIfH5zaoSKg313en+Ig1pfZFtcXVxld4KHjW8/QEFAP0JGREI+PTs5ODQwMDtVYnydm3xwc2tYVVBFOTk3PENKT1RWWVhbXVxgWkpEREtTXGl8jZaPd2FadYWIiopwNi0wMjY2MjhEQTEsMDIyMTxXYWFocW1gV1BGNjI3QElKTEg8MywwPlp6jqS7vr6/vr6+vr26t7Swqn05KDAyND9NZHR3f4KDhHx8iYqHTEhIT1NQWn90a2ppZWBdWVlaXV5dWVdVVVVVVVVVVldXWFpaW1xcW1lVU01JRURERUVHSk5SVltiaHB1fYCDhIJ/e3d1dnZ4e36ChouMi4qIh4eIhoaHh4aGhIF/fXt7fX1+e3p2c3N0dHNzcW9qZF5VS0NCSVRfaneCh4yPkJCNjIiJh4eIiIiIiIeCe3JlV1NbYmtydnZxb2xraWhriZeTjYuKjI6LiomJhoiLkZGSkZCMjY2Njo+QkJCMiCYkIyQlJSQlJiYlJSUmJSYnJygoKCgoKSkrKyssLCwsLi4uLi4uLi0tLSwsLCwrKysrKysqKioqKioqKioqKSkqKioqKSkpKSgoKCgnJycnJiYmJiYmJiYnJycnJycnJyYmKCgoKCgoKSkpKSkpKSoqKioqKysrKysrLCwsLC0tLy8vLzExMjIzMzQzMzQ0NDQ1NjY2NjY2NTY2NjU1NDQzMzIyMTAxMDAvMC8vLi8uOC8sLC0tLS0tLSwsLCwsLCwsLCwsLCwsLS0sKysyZ4SPnaCcmZmRkYyao5WTpqSloaOSjpOMiYuUgnl5fH9+eXd0dnx7YTN/m4hMUEtFLycoLC4sLCsuMTY7RkE/Qz0/PDw7PEFGRXmAc21vjYyCfHt+hIhyU1pSVVdZZnaAgIaCVT8/PUBDQ0NDPT04NjQxMDA9Ul95kI17cGxqXUpKQTQ1N0BKTlNUWVpbXF5fYmJPRUZMUltpe5CZmntibYyYl5iOXC0tMTM3NzUzNTMrKzE0NDlUX2VteHx1ZVlKPjY0QE1PTkg2Liw9SFd2jKa5vr6/vr6+vr68urezsK6lhDguNDM0OFVoZ35/en1+goeMe2hHRE5OTk95eGtoamhnb2pkX11bXFlXWFlXVVZWVVZYWVpbXF1dXFpYVVJOSUdHR0hISk5SVlpeZGxyd32AhIOBfXp1dXZ4enyBg4eLjIuKiIeHiIeHh4eGhoaCgH18fX5+fX17d3NzdHRzc3FvamRdVEtDQ0pWYmt5g4qMj46Oi4qJh4eHiIiIiIiHgnpwY1lUW2RtdHVzcG5ta2lqjJmSjYqLi4uLi4qIhISIkJOTkZCPjY2NjY6PkJCQjIgoJiQlJSUlJSYmJiYnJycnKCgpKSkpKisqKisrLCwsLCwsLCwtLS0sKyssLCwsKysrKyoqKioqKioqKioqKikpKSkpKSgoKSkoKCgoJycnJyYmJiYmJiYmJycnJycnJycmJigoKCgoKCkpKSkpKSkqKiorKysrLCwsLCwsLS0tLS8vMDAwMjIyMzMzMzM0NDQ1NTU2NTU2NjY2NTU1NTU1MzMyMjExMC8vLi4uLi4vTUswLS0tLSwsLCwsLCsrKysrKysrKysrKywrLCorNWh7jKCioZ+bmpuJjqKPhaCnpqKcjYmSj4yJjoR4dnt9fHl2b2tvalc7XWROTVBOQCsnKSstLzsxLjAyN0pEPT0+QD4/Ozs/QERqf3hzbnWQi4B8fH+ChV5YV1RUW2p6fXh4h3tNPkBBQkNHSD06ODQzMS4wPFJceJB/dHFtZF1LSD04NzU/TVNZW1xhYWBhYmNdSktOU1RaZHWNm56Bd5Ggo6Cdg0EvLzAyNTg6NTEtLS4wNDlNXmVweoWJf3BZQjo5OURRV1FCLy81Q01jhqS5v76+vr6+vr69u7q4tbGsqKByMDE4RzU+WFZvdXt/fIKEe2OGbj5IR09Qb350bWxoZGVkYmJfW1dVVldYWFZWVlVVV1hZXmBdW1paWVhTTkpJSEhKS01RUlZcYGZtdXp/gYSBf3t2dHV2d3l9gYWJi4yKiYeGh4eHhoeGhoWFhIOAfX17fX59end1c3Nzc3NxbmljWlBJREdPW2Nxe4SKjI6OjYuJiYiIiIiIh4iHhoB4bWJWVl1mbnV3c3FvbG1si5eTjouJioqKioeGhIJ+i5OTkZCPj42MjI2OkJGQjouHJyYkJSUlJycmJiYmJycnJygoKSkpKisrKiorKywsLCwsLCwsLS0tLCsrLCwsLCsrKysqKioqKioqKioqKiopKSkpKSkoKCkpKCgoKCcnJycmJiUlJSUlJSYmJiYmJycnJiYoKCgoKCgpKSkpKSkpKioqKysrKywsLCwsLC0tLS0vLzAwMDIyMjMzMzMzNDQ0NTU1NjU1NjY2NjU1NjY1NTMzMjIxMTAvLy4uLi4uLCksLi0tLS0tLSwsLCwrKysrKysrKysrKyssKysrKzZme5Gjo5uZmpuWkYWimY+cp56ampWQk5CLh4yDenZ1eXl4cm1lXFdRSlBOTk1QSzwrJyopLDAuKywzNDQ0NTk+PkBAPz07PUE/X4l2bmxuhZOHfnt9g4twUVBVXmRxfHhzbH2Ja0I/Q0JDRkQ9Ojc1MjEvMDtNWnR6fnhzaFxZU0Y+Pzo1O1BXWV9kZnFzbGZdWFdWTExRWWFvh5mgl5uenp2bjGExMzAxNDY2NzQ0MjEwMzZJXGVvd3yKkIxsOjc6Ozw8PkA9NzAvNz9FZpe2vr2+vr6+vr6+u7u6trOtp56bllUwTFdAMENCYVltgH2AeEZNfls/RUtOVmBeVVJKSUlKTE1SUU1LSk9TV1dVVlRXWVZUW2RlZV5ZW19dVlBLSUpJS0xPUlVZXmNob3Z8f4GDgX56dHN1dnh7fYGFiYyMiomHhoeHh4aHhoaFhoWDg4B+fn5/fXp4dXRzc3NzcW5pY1pQRkZIUFxlc32GjIyOj46LiYmIh4eIiIeHhoR/dmxfVlhfZ3B1dnNycGtuiJaTjouLiYqLh4WEg350foqRkZCQj4yMjIyNjpCRjo2KhicnJiYnJycnJycnJygoJycoKCgoKSoqKikqKyssLCwsLCwsLCwsLCwrKysrKioqLCsrKioqKioqKioqKikpKSkpKSgoKCgpKSgoKCgnJyYmJiYmJiYmJiYlJSUlJicnJyYmJycoKCgoKSkpKSkpKSopKSoqKysrLCwsLCwtLS0tLjAvMTAyMjIzNDMzNDQ0NTU1NjY1NTY2NjY1NTU1NTQzMzExMTEwLy8vLi0uLi0uLi0tLS0sLCwsLCwsKysqKSoqKioqKioqKiopKik2aoaXn5qXjZWakpGJnZ2bl5mbmJaLiI6TjIyLhHl6e313cGJnYVBFS1FPTk9RTEo8JyYoKSstKikqLCsvMzE2MTk+PkE+PT8+P1CHdW9ubHKMj4N8fnyEglVBU2RweXpyZVlgeHlcQ0RCP0RIPjo3NDMxMC86TGCDjo2FbWFWVFNGQkI+ODxTWFthaG52f4Z/eXdydmdiZmVnaXiPm5iamZeUkYZuRDY2Njc5ODYyMzQ0NTNFYGZsdXyDjJGNYjI3NzY1NTY3NTMwMDQ3QnWsur2+vr++vb+9vry6uLWyq6GXkpB+TUtVVDE5VGpYXn1+foB6eYN3TUVOTmVXU1RSUFVZVlhXVlFPTk1PV1VUVlhbXFtUV1pcYl5aWmBkZGZdT0xLTExNUVRYXGBmanB2fX6AgH98eXV0dHd4fH+Dh4uMi4mIh4aHh4aGh4aGhoWGhYKCfX9+fn18eXV2dHRzcXBtZ2FaUEZFSVNeaHZ/hoqMj46NiomHhoaHiIiIiIeDfHRqXVdZYWlydnZ0cWxth5iRkY6LiYiIh4OChXxqboCLkZCPj4+MjIyMjY6QkpKPioUnJycnJycnJycnJycoKCgoKCgpKSkqKiopKisrLCwsLCsrKysrKysrKysrKyosKysqKioqKiorKyoqKiopKSkpKCgoKCcnKCgoKCgoJycmJiYmJiYmJiYmJSUlJSUmJycmJicnKCgoKCkpKSkpKSkpKSkqKisrKywsLSwsLS0uLi8wMDAwMjIyMzQ0NDU1NDU1NTY2NTU2NjY2NTU1NTU0MzMxMTExMC8vLy4tLS0tLi4tLS0tLCwsLCwsLCsrKikqKioqKioqKioqKysvNmuMmZmWnIuPmJKNgpKVmJmWl5OMg4SCioaDg4h6f3p0bmlhamNLOUNPT1FPUE9IOCcoKCkqKiopKiwrLjU7Skc5OkBAPT48OTtCeoJ3d3V3g5KKf35/gIhxWGFodnt3blxHPkhaZVdFQ0VDQEA5NzMxLzAtO0lgipudjGNHU1RWSERHQ0NIUlhfaGpugJCRiYN3Zl5lbGdtcnV0d4KHjI6JhH53cFY9Ojk4OTg1NDMyNTg6WXR0dXiBg4eNiWI2NzU0NDMwMjAuLjI2NkVxn7S7u72+vLy4tLa6urmzrqSZkY2MhlpSTFVSMTRNTz1ogH+AgXx8eG5US0xMTU5QTU9OTERMWFVNRUNDRUdWUlFbWVNZV2NlZW1raGhmbW9oXlFNTE5OT1JVWFxiaG5zen6AgoJ+enZ0c3R3eHx/g4eLjIuJiIeGh4eGhoaGhoeGh4aEgn9/fn5+fXl1c3JycG5vbWdhWlBJSE1XYGt4gYaKjY6OjYqJh4aGhoeHhoaEgXtzaVxXXGNrcnd3cXBsg5aSjouKi4qJh4SFgXxkZHSDj5GQj4+PjIyMjI2OkJKQjImGKCgoKCgoKCgnJygoKCgoKCkpKSkpKioqKikqLCwsLCwrKisrKysqKioqKikoKyopKSkqKikpKSkpKSkpKSkpKSgoKCgnJycnJycnJyYmJiYlJSUlJSUlJSUlJSUmJiYnJiYmJygoJycpKSkpKSkpKSkpKiorKysrLC0sLC4uLy8uLzEwMTExMTIzNDQ1NTQ1NTU2NjY2NjY1NTU1NTU0MzIyMTEwMDAvLi4uLS0tLS0tLS0tLCwsLCsrKysqKioqKioqKioqKioqKiowQD5ojZiTlpqPkZaQlYyXm5qWi4aHiYOEgYWFf4GKfXlxcXBtbGdjVEpLS01OUU5KSDcnKCgoKSkrKCouLCssN1A9ODM8Oj8/PTw5O2yNgoJ/gYiPkoR+f4KEgllpdHh6eGpXRDk3OkthVEI/Q0NDQTg0MS8uLjxLWnaYnohSR0dXWE1IQ0JMTFZbXGV1hY+WnJN7YFNNYnmBg4qMjoV0aXR/fHZzbWhhU0A8Ozk4NzY2NjU2OlV3f357f4SFiIZjOjg2MzIwMC8tLjA0OTxKVW+RpKyztrGnnZaaqK6wr6iekouJiodYSUpHV0kwN0U0S3R5fYF/d2WBcD5MUF5jXV9gVlJIWmhobGtlW1NVZ1JHWF9aY2lhW2dtbGNgWGtsXlNPT09QUFJVVlpeYmdudXp9gYKBfXl2dXN2eHh8f4OHiouKiYiHh4eHhoaGhoaGh4iHhYOBgIB/fn15dXNycnBvbWpnX1lQSUpRW2VweYKHio2OjYuKiYiHh4aHh4eHhIB6cWZcWF5mbnV2d3JwfpaTjYuKiouJhYaDg3tkXml3g42QkJCPjY2Njo6NjpGRj4yJiCgoKCgoKCgoJycoKCgoKCgpKSkpKSoqKiopKiwsLCwsKisrKysrKioqKiopKCsqKSkpKSkpKSkpKSkpKSkpKSkoKCgoJycnJycnJycmJiYmJSUlJSUlJSUlJSUlJiYmJiYmJicoKCcnKCgpKSgpKSkpKSoqKysrKywtLC0sLC0tLi8xMDExMTEyMzMzNTU1NTU1NjY2NjY2NTU1NTU1MzMyMjExMDAwLy4uLS0tLC0tLCwsLCwsLCwrKysrKioqKioqKioqKioqKioqLC4wYYaSkJSWjY6VlZWXm5uYloiHgI6Ng4OLiIGCi4V3eXd2cm1lXlVOTElLTk5OS0k6KSgoKCkpKiorLS0tLC8zKzBWREI9P0A+Oz1ck4yJhoaLj5eNgH2CgYdxcnd3eXRnVEM4NTQ4TFpPREFGREQ9NTEvLy48TWV6lZlzNEBMTlBMQTw/QlNYXWRwhZienZaBdHVtXVJieHyKn5qclHtucnRybGZjW1lQREE+PTo5Nzc3OTpNdoSAgISHhX+AZzw3NTYzMS8uLS8zOTtDVV9ma3N7i5WVin13gJGam52XkIuHh4Z+WkRESUtRUDw8TW19d3h+fmxfiYJDTVljY2VraFlQXGZsbW1ubGdhYFhQSk1bWl1aVk9WYmVVSEFdZFdRUU9QUFBSVlhaXmRpb3Z7foGCgX15dnN1d3h6fYGFh4qLiomIh4eHh4aGhoaGhoeHiIeDgYKCf358eHVzcXFxb21qZ19YT0lMU11ncHuEiIuNjo2LiomIh4aFh4iHhoSAeXBmXFxiaXB3dnVxeZSUj4uJiYmHiIWEhHpkXmBqdoSNjo+Pj46NjYyMjY6RkY+MiowoKCgoKCgoKCgoKCkpKSkpKioqKioqKiorKysrKysrKysrKysrKyoqKioqKikpKCgpKSkpKSkpKSkpKSkpKSkpKCgoJyYmJignJyYmJiYmJiUlJSUkJCUlJSUlJSUlJSUmJiYnJycmJycoJygoKCkpKSkqKisrLCwsLSwsLS4uLjAwMDExMDExMTIzMzQ0NTU1NjU2NTU2NTQ2NTU1NDQ0MjEyMC8vLi0tLS0tLS0sLCwsKysrKysrKiorKyoqKiorLCgqKSkqKioqKSkpLFp9i5CUkI6LkI+MnJ6cmZyViYqMkZKLh4qDgouOgH14dnRtZF1SRT5CR01NS0hIPi0oJykqKCgpKi0uLCsoKSwuOkNQOz89Pjw+SpCRioeGjJOYlYh+f4KFf2R1eHZwY08+Nzc3OkVWXE8/PkI/QDo0MC4vOktnhJKXaC42UWRUSEI+PkFFW2Fke5GdnZeCdnh7cH6UlouAmqSioqCTfnJtaGdkX1paVE9JQkA+PTs5ODo0W4mId3uBhYJ8e2pENjY0My8uLi8xNTo/UGh9fnl3bWFfYmVjZGx4gIOHiIN/fHtuY1k/QDc8N0VaQkFidnh1fIKAZExgT01pamdnYF5bX2hqbWxubmtoYV5fX1dZWlhVV1xdYWpoQjA4V29XUVFQUVFRU1ZZXGBkanB3fICCgoF9eXR0dnh5fH+DiIqMjIuJiIeHhoaHh4eGh4eHiIiHhIKCgoF/fXh1dHR0cW9tamVeVk1JT1ZgaXV+hIiMjo2PioiHhoaHh4eHhoaDf3hwZF1dZGtzdnVvdY+WjouIh4eIh4aEg35nX19lbnqEiYqMjI6OjY+PjY6OkZKOiomRKCgoKCgoKCgoKCgpKSkpKSoqKioqKioqKysrKysrKysrKysqKioqKioqKiopKSgoKSkpKSkpKSkpKSkpKSkpKSgoKCcmJiYlJSUmJiYmJiYlJSUlJCQlJSUlJSUlJSUlJiYmJycnJicnJycoKCgpKSkpKiorKywsLC0tLS0uLy8wMDExMTAxMTEyMzM0NDU1NTY1NjU1NjU1NTQ0NDQzMjIxMDAvLi0tLS0tLS0tLCwsLCoqKioqKikpKiopKSoqLzIpKSkpKCgpKSkpKSxQbX2OjI2NjouIiZubmpyYh4eOjZCNiYqHgYOJkYN4d3d0b2VfVURAQ0pOSUtIRj0tKCcpKicoKCgqLCsrLi0zKykuODw+Pzw6PECQk4yKjpGVlpeKf4B/hYppbnd1cGBMQjg4PERaZl9UTURCQD87NTEvLztIW32SklkyU3J4YExFQT9AQU9mbneVn5aCc4Klq5+lpqabl66wqqWdl4d7cmllYF1aVlJOS0VBPT0+Pz8+O1qFj35zd36Ae3huUTg3NTMzMDAxNTg/QlZ2jI2Pjod9aVpWUk9NVFteYGRgXVxaYnRZQj89QjQ9QUs3S2VnbnqChWgmYnFTWl1ka2xmaGNiaG9wcHBrZ2RfX1xaWFlZWVpUVFxeWDYoMU9hVVJSUFFRUlRYWlxgZmtyeH2Ag4OBfXp2c3V4eXx/hIeMi4uKiYiHh4aGhoaHhoeHh4iJiIaGhISBf314dHNzc3BubGllXlZNTFFYYWt2foSIjI+NjYmHhoaGh4eHh4aGg393b2ReYGduc3d0dIqVkYuHhYaHiIaDhX9pY2NiZnF+iYyNjY2Ojo2Njo6OjpCRj4iOlCkpKCgoKCkpKSkpKSkpKioqKikqKioqKioqKiorKywsKysqKioqKiorKykpKSkoKCgoKCgoKCgoKCgoKCcnJycmJicnJiYmJiYmJiUlJSUlJSUkJCQkJSUkJCQkJCUlJSYlJiYmJiYnJycnJygoKCgpKSkqKSssLCwsLCwtLi4uLy8vLzAxLzExMjIyNDQ1NTU1NjU0NDQ0NDMzMzMzMjAxLy8vLi4tLS0tLCwsLCsrKiorKysrKioqKioqKioqKiopKSknJycnJycnKCkrSWt+j4aEh4mFgouYkouOjH2Hi4yJiIiEgYCAhZKBcXR5c2xoYVNMSEdGPEBJR0U8LygoKSopKCgqKissKy0sLS0qLC81ND08NztMlpeQjYuSlpWVk4aAgYOHgnJ1dW1bSzw4N0RfbHJoXVdPRkBCPzgxMC04RF9yjIhQTneMg29TSkhBQT5OVWV8hY2LkqCttbKysqyloJyus66kn45/fXNsZWNeWVdYVE1IQkBAQkNCQENigoaCeHd8fXl2b1tAOjs7PDcyNTc8QEVbeIqMkZGRj4JxamNcVlNNR0ZISExYZ3NvTEdJPkc4PkVERz9IV2F5gYA4RZKSgElYVlFWY2tiXWxtcXRxbWhkYF1bWllYWFlaV1pdXFZFP0xXWVVRUFFQUlJVWVtfY2hsdHh8gIKCgH16eHd2ent9gISHi4uKiYmIh4eGhoaGh4aGhoeIioiHhYODgX56d3Nzc3NvbmxnZFxUTU5TW2NteICFiYyOjYuJiYiHh4eHhoaGhoN+d21lYGJob3Z1cYaTkI2LiYiHiIaFiIFrZWViYmh2goyQj4+PjY2OjI2NjpCQkIyNlZUqKiopKSkpKSoqKSkqKioqKiopKioqKioqKioqKiorKykpKioqKSkpKiopKSkpKCgoKCgoKCgoKCgoKCgnJycnJiYnJyYmJiYmJiYlJSUlJSUlJCQkJCUlJSUlJSUlJSUlJCQkJiYmJicnJycnJygoKSkpKSkrLCwsLCwsLS4uLi8vLy8wMDEwMTIyMjMzNTU1NTU0NDQ0NDMzMzMzMzEwLy8vLy4uLS0tLSwsKysrKykpKioqKikpKSkpKSkpKSkqKSkmJycnJycnJygpKzxzg4uKhouCen6Olo+MkIt6gomGf35udoaEg4iQfXFxcXFvY1lRT01IRkBBSkVDPjAnKCkqKSgnKyoqKywqKSopKystLjE3OkBLa5yZkZCRlpiXh5KOg4KEh4h1cnRtW0lDQ0NKV2Vva2BVUFBJQUFAOjUvMkNbcYN5TmOHj4J6emVHPUU+TlZQXXmKlqWxs7WzsK2rpJuUqq2moaKWh390bmpkYVxicGdcUUhFRERERERQfJKQg3t6gX53dWlfXFldXF9QNDg7PkFCV2+ChYqRkIyBeXd1cGNjYV1cW15hZm1wZkJBPUBCQztMQUlHP1JndoBwZYqTjYRQUFdLSlZPS1dxcnJ0cW5pZWFeXFtbWVlbXFxcXFxYVlpbWFVVU1FQUFJSVVhcX2NpbnN3fICCgn98eXZ3eHt8fYCEh4uLiomJiIeHhoaGhoaFhoaHiIiIhoaDg4N/endzc3Fxb25rZmJaU05QVV1lcXyCh4mMjo2JiIiHhoaGhoWFhYWDfndtZGNnaXJ3cnySkY2JioqKh4eEh4VyaGlmYmJqeIWNkJCPjo6Ojo6NjY6QkZCMkZiVKSkqKioqKCoqKiooKSkrKyoqKSkqKioqKiorKyoqKioqKikpKSkoKCgoKCgoKCgoKCgoKCgoKCgoKCcnKCgnJyYmJiYmJiUlJiYnJSUlJSUkJCQkJCQkJCQkJCQkJSUlJiUlJiYmJiYmJicnJycnJycnKSkoKiwsKyssLC0uLi4vLzAwMTExMDEyMjIyMjQ0NTU1NTQ0MzMyMjMzMjIwLi8uLi0tLS0tLCsrKyoqKSkpKSkpKSkoJygoKCgpKSkpKSknJycnJycnJyYoKSwya4uNioyKg3qEjI2OkJWKfX2GgnNnZH6JhoeKjnFeX15gZ2RRUVNVTUxOTkpGRT8xJycpKSkpKSgrKCksKisqKywtLCwwNDdVepGdlZKUlZeWm3qKloiEhoaJg3x/e3Zxc3N1fYiPi4JqWVtaVU5HRkdBNzI/Tmp4bFyElZeJhIuRdExAPkpVTFJtjJ6osbOwrKijo6Sin6OclZKRj4yAc21raG1tanNqY1pTS0hISUNCTn2UmI6CgYB9d3JpaW90enp2ZT02ODo+Qk5heoGGi4R6eHt7enNmZGpnYFxfZmdqblpbW1g5Njo+TUtDRkRPYHl8W3KMko2EVEdSSzZHTWVscHJ0c3Fva2VfXVtbWlpaXFxbXF1bWlxaV1dVU1FQUE5SUlVZXV9jam5ydnyAgoKAfnp4eHl7fH6BhIiLi4mIiIeHh4aGhYWFhYaGhoeIiIeGhYOAfnl2cnFxcW9ubGdjXFJQVFlfaHJ8g4eKjY2NiomIh4eHh4eGhoWFhH53bWZlZ211dnuQkYyJiYqKiIeGiIRvaWlpZGJlb3qIj5GSjoyNjYyMjI2Nj5CQjpaWlSkpKSkpKSgqKioqKysrKysqKikpKioqKioqKiopKSoqKSkpKSkpKSgoKCgoKCgoKCgoKCgoKCgoKCgnJycnJycmJiYmJiYlJSYmJSUlJSUlJCQkJCQkJCQkJCQkJCUlJSUlJSUlJSUmJiYnJycnJycnJykpKCosLCsrLCwtLi4uLy8wMC8vMTAxMjIyMjI0NDQ0NDQ0NDIyMjIzMzMxMC8vLi0tLS0tLSsrKysqKikpKCgoKCgoJycmJiYmJycoKCcnJycnJycnJycmKCkvM06JkIyIhYB8goaLkoyLiHdpbm5mdIKNi4eKi4phT09QVFZfXU9NT05LSktIR0U/MScnKSkqIyorKionJigrKysqKywrKy5BbpKampSSk5WXlpV6f5WOiIOGiImHhpCSlJaVkpSXl5KJdVJQUlhSTUdFSkM2NEptiHd7lJmbkZKfo5+FaGlaT0BNZpCrsLCyraWgoJ2hrKSOj6CjpKSinpNpW2RvgHZxbmZfU0pIS0tHQkBdjJiOgYKAeHV4eHF2gImEf3NQNDY7Pz9EU2l5f31xbHF1c3FtZ2NnZl9bX2NiZ2JcYHNlQjc7PT5GSlFHO054e2R7i42KglxJTz4rQFRdZHFxcnNzb2xmYV1cXFtbW1taW1tcXFxcWlhVVVFQUFBPUFJVWV1fY2hscnZ5foGCgH58eXl7e3x+gYaJi4uIiIeHh4eGhoWFhYWGhoaHiIiHhoWDgH56dnNxcXFvbmxnYltSUFRZYGlzfoOHi46NjYmIh4aGhoaGhoaFhYN9d21mZ2pxdXuNkY2Ki4qLioeGhod0am5saWVjZ3F+iY+SkZCOjo6NjY2OjpCRjZKXlJQqKikpKSkqKysqKiorKysrKiopKSoqKioqKikpKSkpKSkpKSkpKSgoJycoKCgoKCgoKCgoKCgoKCgoJycmJiYmJiYmJiYmJiUlJSUlJSUlJSQkJCQkJCQkIyQkJCQlJSUlJSUlJSUmJiUlJycnJycnJycoKCkpKiopKywtLC0tLjAwMDAxMTEwMTIyMjIyMzMzMzMzMzMyMjExMjMyMi8vLy4tLS0tLSwrKyoqKiopKSgoJycnJicnJycnJycnJiYnJyYmJycnJycnJigsMTtFa4aNh4WEg4aDhYuIgoOEgoeEcXaNjYmMjo6CW05MVFhUR1diW09OTktKS0ZDPS8lJygqLEltOCMoLCwpKSssLC4vLi8yVICYoJiSkpWalpaPfnuRlYmEhIiLiHqNkpSYmZeWl5eXloVgVlhYWlxVSkZHQjo+YY2Jk5WXlpqkpaSgk4aTmoZfQE+Mpq6wr62inJ6doKKPiqSlpqWgn52UWzxKYHqHfnNsZVpKRkhMS0dBRG+TkHV6hYSFg399foGIhoJ3YTU1Ojw9QEhVZmxrY2dpZmBgYFtZXF1bWltfYF9KUVxnYEk6Qz83QUNGUkdIZXh/hIiLhX1SSlQ9LUdBMDVldXNzcW5qZmFeXVtaWlpbW1pbXFtbXFtaVlNSTU1OTk9SVVpdYGNlanF1en6BgoB+fHp6fHt9foGGiYqLiIiHh4aGhYWFhYWFhoaGh4iIiIaEgoB9eXVzc3FwcG5sZ2BYVFBXXGNsdX6EiIyOjYyKiYeGhoaGhoeHhoSDfHdtZ2dudHqKk46LiYuMioeEhoZ2bGxtbGlmZmp1gIuQkI+Ojo2NjIyNjo6PkJCWlpSSKioqKioqKiorKioqKiorKyoqKSkrKyoqKiopKSkpKSkpKCgoKCgoKCcnKCgoKCgoKCgoKCgoKCgoKCcnJiYmJiYmJiYmJiYlJSUlJSUlJSUkJCQkJCQkJCMkJCQkJSUlJCQlJSUlJiUlJSYmJiYmJicnKCgoKSkpKSssLSwtLS4vLy8vMTExMDEyMjIyMjMzMjIzMzIyMTExMTExMC8vLy8tLS0tLS0sKysqKikpKSknJyYmJiYnJyYmJiYmJiYmJyclJScnJiYnJycpMThFWXJ1fYWCgoiDfnt6gHyGmKGfn5KTlIyMjY+JcFdPUV1jWlhVaWlfTEZMS0pHQzotJCYnKSk5PSgmJygoKSgqLzAtMC8tPWF+m5+UkpSXl5SUiHx9g5aNg4OEiIyCgY2RlZmWmJmZmZ2ScldbWl1fYFlNRERBQG6PkpKQl5aYpKqmmoFzhZqgpYxgbJuqrKypn5mZmZyUf5uflpeampiUjVk8QUpylZB9cGliVEpIRkRFSEFQfZCFgIeLjIyIgYCBg357dGc+MjU3PDxBRlJcXVteYFxWWVlUT1NUV1haXVdFQkxVX2xhOTs2MzE9WVtlV1ZwgIaHhoOFY0lKRTg9QDQ9ZnR0dHJuaWZhXl1bWlpbW1lbW1xdW1taWVVTUE9PTE9RUlVaXmFkZ2pwdHh9gYOCgHx7fHx8fYCDhomJiYiIh4eGhoWFhYWFhYaGhoeGhoeFhIJ/fHh0c3NxcHBuaWZgWFJRV1xkbnZ/hIiMjo2MiomHhoaGhoaHh4aEg3x3bWlpbXWMlo+Li4mKi4iFhYd8bG1vbm1raGhud4OMj5CPjo6Ojo2NjY6OjpCTl5SUkioqKioqKioqKiorKysrKioqKioqKSkqKiopKiopKSkpKSkoKCcnJycnJycoKCgoKCgoJycoKCcnJyYmJiYmJSUkJCUlJSUlJSUmJSUlJSUlJSUkJCQkIyMkJCQkJCQkJCUlJSUmJiYmJCQlJSYmJicnJycnKCgpKSkrKyssLC0uLi4uMDExMTExMTEzMjIxMTIzMjEyMjMzMDAwMDAwLi4tLS0tLCwsKyorKiopKSkoJycmJSYmJiYmJiUlJiYlJSUlJiYnJygmJykqKzdGW3V7dGRtcXR4dWxsa2xzgJyipKGUlY6KjJCNel5XWV1hYmFeZmdscF9bU01ISEI3KicnJygoJicnJycnJicoKCorLS8sNUxkeJGcl5OUmJWUkYN+fH2Nk4qGgoWJkH98g4iOkpWXmJeXinJkYWNcW19dVkpCQD9ekpaRjZKSjZmdkoFoW3GXoaaomX2QnqWppJmWlZSXjo6blZSUk5WWk4VXQUNKYZyXiXtxamJRR0JBRkhEQGGBlJCIkJOQjIWAg4B4dG9oSC8vMjg7PkBDSlJUV1hXVVRTUE5RU1RXWVA6KzxITk9TTUBHPzk0QFdKUU9OW3B7hIuJhGVLQ0VAMzhFXnB0dHNxbmllYF1cW1tcXFtaWltaWltaWldTUE5NTk5PUFNWWl5gY2hqb3J3fICBg4OAfnx7fH6AgoWIh4aIh4aGhoWEhISFhYWHh4eHh4aHhYSCgHx4dXNycXBvbWplX1hTUlZeZW54goWIi42Ni4qJhoWGhoaGh4eGhYJ8dm5ra2+FlJGMi4uJiomFhoqBbm1ub21vbmlscXmEjpCOjoyMjY2Li4uOj5CRlpWUkY4qKioqKioqKioqKysrKyoqKioqKikpKiopKSkpKSkpKSkpKCgnJycnJycnKCgoKCgoKCcnJygnJyYmJiYmJiUlJSUlJSUlJSUlJiUlJSUlJSUlJCQkJCMjJCQkJCQkJCQlJSUlJSUlJSQkJCUmJiYnJycnJygoKSkpKysrLCwtLi4uLjAxMTExMTExMzIyMzMyMTExMDAwMC8vLy8vLy0tLS0sLCwsKyopKiopKSkoKCYmJSUmJiYlJSUkJCUlJCQmJiUmJiUmKCoqLTVFWW5xYWBbWF5jZFxTWFtcXXOPoZiUlJCJjI+OgGBVV2VpaWRmZGdocnpxbWhlXUtBMCYmJycnJyYnJycnJyYnKCgqKyssLzpWaHSQlpCTl5iUko5+eXl5hZWNhoSBg4iOhYmNkJKVl5aMiHVqZ2ZmZGBeXFpRRj07W4+WkYqOjIiJgnBmYVxljaOfnJiOjZWfop2WlpKRiYeXkpOTkpGRkJGIe2dNTmamo5WLem9lVUhEVXSJgGhqeY6XkpKUkImCf4B5cmtpZlEvLC4vNTg7PUJJTVBRUVBQUU9OUFJTUUMwMD4/ODs+Oj9DQz0+PUFKR0lYW0pea4GKhoN1WEZJUkQ8TllsdHRzcW5pZF9dXFtbW1tbWlpbXFxaWFlVUk9OTU5OTk9TVllcYGNmaG1ydnt/gIGBgH19fn5/gYOFiIeHh4eFhYWFhIOEhIWFh4eHh4eGh4WEgoB9eXJycXFwb21pZF5YVVVYXmdweIKFiIuNjIqKiYeGhoaGhoeHhoWAenNubWyAk5GLiomJiomHhYiHcW5xcG9wb21qbHR7iI6Pj46MjIuLioqNj5CSlpWUk4+OKysrKysrKioqKisrKysqKioqKiopKSkpKSkoKCgpKCgoKCgnJiYnJycnJygoKCgoKCgnJycnKCgmJiUlJSUlJSUlJSUlJSUlJSUlJSUlJCQkJCQkJCQjIyQkJCQkJCQkJCQkJCQkJCQkJCQlJiYmJycnJycoKCgoKSsrKywsLS4uLi0vMTExMTAwMDIxMTIyMTAvMTAvMC4uLi8vLi0tLSwsLCsrKyspKSkpKSgoJyYlJSUlJCQkJCQkJCQkJCQkJSUmJiUnJiYqLjRCWnJ6amJeVldZXFlPQ0tRVFpth5eGh5KNjJCRgWdVUltpYmRqaGNkanRwdW1wbHd4Z0QlJyYqJygnJicnKCcmKSgpKCorLjdFVmZ0lJKRlJaUkI+LgH98f4SUkIeCgoCGi4uDkJWSk5OTh4SDgoN+eHh2cGJdWlFIPz99m5CKioiEfG1cX2BfY3iVmaKmnoh6k5qXkpOPh3OGjYiRlZOOi4qKiIB8YFR5qqOdlYd2a11MREtdeIuSkX6Pm52YkI2Jgnx4dG5mYV5WNC0uKSouMzg8QkZKTU1NTk1OT0tIPzMsLzdCRjc/RkZAS09MST5CTUlATFJUX2J0hoWBeEtBSlphUFpvcHFzc3FuamVfXVtaWlpaWlpaWlpaWlhXVFBOTUxMTU1OUlVYXGFjZGdqcXV6foKDg4B9f39/foKEiIiHh4eGhYSFhYODg4SFhYaGh4eIh4iFg4F+e3ZzcXFwcG5saGRdWFNWXGBocnmChomLjIuJiomHhoaGhoaGhoWFgHlybmt3jJCMjIqKioqIh4uJdWxubW5wcHBtb3R8gYqOjY2OjYyLjY2Nj5CSlJeUk5KPjSsrKysrKyoqKiorKysrKioqKioqKSkpKSkoKCgoKCgoKCgoJyYmJycnJycoKCgoKCgoJycnJycnJiYlJSUlJSUlJSUlJSUlJSUlJSUlJSQkJCQkJCQkIyMkJCQkJCQkJCQkJCQkJCQkJCQkJSYmJiclJScnJygoKCkrKyssLC0uLi4vMDExMTEwMDAyMTExMTEwMjEvLy4tLS0uLi0sLCwsKysrKyoqKSgoKSgoKCYmJSUlJSUlIyMjIyMjIyMjIyUlJSUlJicnLDFAVnV8dWZeV1lmZFdRTEVJVlVcZHh7fIqNio6OhmxaXWBrZ2lrbmxiaG9wa29wc2htcoF8ZDwfKSwsKSgpKSgnJycnKCgqKi07TlpieJOMjpWRkI6PiXyFhoWGj5SLhIKAf4WMhHyLkY+SkZSaoZ2XnJ+Yj35oXVxZUEg9dZyVjYqIf25aYHBwa25wgpCVnaahjYiPjo2OjX5zf4KJj4+Ef4KGiIR+fnBog6WcmZWJeW9jUkRDSG6PkI55j5qdm5GMiYF5c2tmXltaVkAsKygnKSkrLzQ3OTw/Pz8/PDgxLCorLjM1RVU+Njs/RUlLP0JRTko8TExOVVZfaHmChHI8PUVSYltgb3Bxc3NxbmplX1xbWlpaWlpaWlpbXFlXVVJPTkpJSUtMTlJVWV1gYmRnaXB0eX2Bg4OBgICAgIGDhIiKiIeHhoSEhIODg4OEhYWGhoeHiIiHhYOBfnp2cnFxcHBubGhkXFhVV1phanJ5goaJi4yMiomHh4aGhoaGhoaGg353cWtxiYyMiomKiYiHhoiKe21xcXJydHZ2d3h9hIqLjY2Mi4uMjY6QkJKSk5aUk5GRkI4rKysrKysrKysrKysqKioqKioqKioqKSkoKCgoKCgpKSgoKSknJygnJycnJygoKCgoKCcnJycnJyYmJSUkJCQkJiYlJSUlJSUkJCQkJCQkJCQkJCQkJCMjJCQkJCMjJCQkJCQkJSUkJCQkJCUlJiYmJiYnJycoKSkqKysrKystLi4uMDAwMDExMDExMTAwMTExMTAuLS0tLS0sLS4tLCsrKysqKikrKykoKCcnJiYnJiUkIyMkJCQkIyMjIyMjJCQlJSUlJiYoKzE9VXJ6dnNnVVFdcXRjXV1RSUpbYmNzcIOKhoeMiHFTUFdsdW1wbXBubW1zbW9qcnRtZnNyfouBYDclKCsqKysqKDE5LSkoKCkuO01aY4WPiIyPjImGi4mIh42LiI2VkYiCfX19hIlsSFhiZneTmZylpqyqppmKd2FeWlNMSWqYmJCNhH1yW3OPiXx5eoCCgJGho5eIioiGh4Z5b3B8h4uEfoSQmZ+dk4J2dYKblZKNhnpxamBQQ1R9ioeAc4WRmJiQjIaAdW5oYVpXUU5GMCkoKCcoJyYnKSopKSgoJyYnKSsrLjE2OD1FSk5EPjo9PEhYVUhJOjBOTUVDUmRqfXtkTkJCQ01WYG5ycnNycW1pZF5cW1paWlpaWlpaWVlXVVRRT01KSklLTE9TVllbYGNlZWtucnl+goSEgoGAgICBhIeJioiHh4WDg4ODgoGDhIWGh4iIiIiHh4aDgX55dXJwcHBwb2toZF1XVVpdYmt0fIKGioyMi4mIh4aGhoWFhoaGhYJ9d3Fvho2HiIiIiomIhIWJgnFydnp8fH6Ag4SEiYyOjouKjI2NjY+QkZKTk5GUkpCRkJCPLCwsLCwsLCwrKysrKioqKioqKioqKikpKCgoKCgoKCgoKCgoJycnKCcnJycoKCgoKCgnJycnJycmJiUlJCQkJCUlJSUlJSUlJCQkJCQkJCQkJCQkJCQjIyQkJCQlJSQkJSUkJCQkJCQkJCQkJSUmJiYmJycnKCkpKisrKysrLS4uLi8vLi8wMC8wMTExMTAwMDAvLi0tLS0tLCwsLCwrKyoqKioqKSgpKCgnJiYmJiYkJCMjIyIjIyMjIiIiIiMjJSQkJicnKC02Tmx6dXF4c252d3d1aWJcRy9Aam9zfW6IjYaJiX1YR05ZdXFzf3Vta3OFdmdnbXZ+dmZseXaFjYx/YTckKCsrKyowPjAnKSkpLTtOWmmMiYaJi4eGhIaKhoOHi5GPmJeLgXt6dnp/iGA1T1lmcXiSpbCwsamhmIZuY15cUEljk5mTlYmEdl11kpSNi4yIhIiUnKCVenh+gn14dHGBkpSCbXSHmKKqpqGWgX6Ij5CLg3x2cWxkWEVnhYmKhXx/kJOUjYWAd25nYl1VT0lDOi4oJicmJiYmJicoKCgoJykqKioqLC4xNjo9Q0RMSEc8NTlORzw7QEc6M0FJSFRkd4J2ZVxWa2hRVl1mcXJzcnFtaWReW1paWlpaWlpaWllZV1VST05LSkpKS0xPU1ZZXl9iYmRobHF4fYGDg4KBgICCg4SHioqHhoaFhYSDgoGBgoOFhoeIiIiJiIeGhIF9eXVycHBvb21qZmJcV1VZX2ZtdXyCiIyMi4uJh4eGhoaFhYaGhoSBe3ZwgpCLh4WJiIiIiIeJint5f4OGh4mKi4yNjY6Ojo2NjYyNjIyNjpCRkZGRkZCQkI+QkCwsKysrKysrKysrKyoqKysqKioqKSkpKScnJycnJycnJycnJycnJycnJycnKCgoKCgoKSkoKCcnJiYmJiUkJSYlJSUlJSUlJSUlJSUkJCQkJCQjIyQkJCQkJCQkJCQkJCUlIyMkJCQkJCQkJCQkJiYmJiYmJigpKSkqLCwsLC0tLi4uLi4uLy8uLzAwMDAvLy8vLi4tLCsrLCwsLCwsLCsqKSkpKSgoKCcnJiYlJSUkIyMiIiIiIiIiIiIiIiIjIyQkJSUlKCs1RmR5eHN3fHx6ent2dGpfVUU8SmRyeXVxiYiGhoRsTU9daXBzenh3cm1xgHRxamdueXp9am96dXqEgYJ4Wi4rJyooKCkpKSsrKy5AUFlwjYeGgoKCgn1+gYOIioeDkJqdk4R6d3VzeYOLXEdKUlprh5+tsa6vqZ+OdGRgWlROYZCck5WIgXRedpOOjJKUjoWFjZSZjXBodHhrdJWkqqidglpQWWuEl5mUkIqSmZOKg3p0cXBuZVhFZ4KFiouHfoyLjYZ/d2hbU1BPSkI5LickJiQlJSQlJiUlJycoJykoJycpLS4vNzkyMzY3P0ZSRDU2NEpPSlk+MysxP1BbY2JeampWV2lyZFxbYGxxc3FwbWlkXltaWlpZWVpaWVlZWVZUUU1LSkhISktNUFNWWlxeYGJkZ2txdnuAg4OBgYGBg4SGiYuKiIeGhYSEg4OBgIOFhYWHiYiIi4aHhYSAfnlzcnFwb25saWVhXFhWXGBmbXR7gYeKjIuLiYaGhoaGhYWGh4WDgHtwfpCOi4iGhoeHhoeIjIWEiIyPj4+Pj46Ojo6Oj46MjYyMjIuLjI2Oj4+Pj46Pj4+Pj48sLCsrKysrKysrKysqKioqKioqKikpKSknJycnJycnJycnJycnJycnJycnJygoKCgoKCkpKCgnJyYmJiYmJiYmJSUlJSUlJSUlJSUlJCQkJCQkIyMkJCQkJCQlJSMjJCQlJSQjJCQkJCQkJCQkJCYmJiYmJiYoKSkpKiwsLCwtLS4uLi4uLi8vLi8wMC8vLy8vLy4uLSwrKysrKysrKysqKSkpKCgoKCcmJiYlJSUkJCMjIiIjIyEhISEhISEhIiIkJCUlJSowRGJ4d3F2fH5/fHp4dHBoXFBIUWFqfX5qd4qCg4J6V1FXcXltcntxcXF1eXR3dYBvcH55dG9fdXJibYqMjY5yTjMoKCgpKiorKys0R1ReeIqFgIGBf3twdHh8fYCEhI6XmZWMgHZwbXF6gYRXOk9dc4efrbCsrqeKXUlNTlFOTl+NmpiakIBqUFyFiYyPjoqIgYWOk3tqa294gJWnq6ejl3tTSkpHWYOYkISKmpeTiH1zb25ub2ZQQV2Cjo6NhXuCgIWAdGJHOjQzNDIuKCUlIyUlJSQkJCUkJSUlJiUnKCosLzAxNT81My8qKy4yPl5SP0BRSjxRRy0rNEFaX1JUSU90coB/dm5TUV1ocHJxcG1pZF5bWlhYV1dYWFlZWFhVU1BMSkhISElLTVBTVlpcXmBhY2ZqcHV6f4ODgYGBgoOEiIqLioeIhoWEg4ODg4ODhIeEh4mIiImHh4WEgnx3c3JxcG9ubGllYVxYWFxgaG92fYOHiouLiYeGhoaGhoWFhoaFgn56fJCOioqJh4aHh4iKjYyLkJKUlJGPj4+Ojo6OjY2NjIyLi4yLi4yMjI2NjY2MjIyMjI2NLCwrKysrKysrKyoqKioqKioqKSkpKSgoKCgnJycnJycnJycnJycnJygoJycnKCgoKSkoKCgoJycmJiYmJiYnJyYmJiYmJiUlJSUlJSUlJSUjIyMjIyQkJCQkJSUjIyMkJSUlJSUlJCQkJCQkJCQmJiYlJiYoKCkpKCosLCwsLS0tLS0tLi4vLy8vLi4tLS0tLS0tLS0sKysqKisrKioqKSkpKSgoKCYmJiYmJCQkIyMjIyEhISEhISEhIiIiIiMjJCUlJCgvPldzeHF0enx8ent6enJqZltOSVdpdoh9cICCgIJ/aUtOUGNubmhpa3B0dXFmdXh5cG9zdmtlWGBwbFeQl5KRbWRnPzInKSkpKCo1QUxZY3+Ign19f3x2bnBzdHZydn2EjpKQjIZ7dXJwcHqBhVdRYHKKmq6ysKmBQz1ERURLUFBbipuanpp/VDo9ZHN7goV/e3h5gnxoX2FpeIiWop+cm5N+VUZIT2uLlpWNkpqUi3Ryc2toa29hSEZTbHiAe3JueXl+fWNCNDAuLCooKCcmJCMkJCQlJSQlJiYlJCUnJywvMTAyMjQ3My0oJiYpKi5FX1BYWVpZVkksKy05UVBUTFx5fX2Ch3pTUU9YY3BwcXBtaGNdWlhXV1dXWFZYWFdXVVFPS0pHRkZISkxPUlVZW15fYGFlaW50eX+CgoKCgoODhIiLi4qIiIaFhISDg4ODhISHiImJiomJiYeGg4J8dnNycW9ubWtoZV9bWFheY2pyeX6DiIuKiYmHhYWFhYWFhIWFhIJ8fJGRjYiIhoWGiImNkJGQkpKTkpCPj42NjI6Ojo6Ojo6NjY2NjY2NjYqMjI6Oi4uLi4qLiywsKysrKysrKysqKioqKioqKikpKSkoKCgoJycnJycnJycnJycnJycoKCcnKCgoKCkpKSkoKCcnJiYnJyYmJycmJiYmJiYlJSUlJSUlJSUlJCQkJCQlJSUkJCUlIyMkJSUlJSUlJSQkJCQkJCQkJiYmJSYmKCgpKSorLCwsLC0tLS0tLS4uLy8vLy4uLS0tLS0tLS0tLCsrKioqKikpKSgoKCgnJycnJiYmJSQkJCMiIyMhISEhISEhISEiIiIjIyMlJycsOExrdHJyd3t8enp8eXhxbGJWTkpbdoeIeHWDfX2AeVlHR1Npbm9rZWtmanNtaGx+f3Jvc29oaWdHam5UbpSGcWhmdD9NRCkoLCopMjxMWWaFh4F6eXl7dWxqbm5qa2tucn+HioiHhXpxdHJudoOIZWB2jZuqr6h3aVFCPT1AUFlaW4eUnZ2chVY4QVNnd3t2cnBvcHNwamxzfomWm5eQjoyNfVQ9Pk57j5CVlZeVjH5jU1xgYmVmVUhCRldzd3FpYGpwdXVTNDAxLywqKCgnJSQjJCQkJSUkJSUkJigrLS4xMjQ2MzIyMC4oJiUlJykrPFNYTlZUXFdIPy8yQEpPUlhSXGxzeX+Bdm1ZTVducnFxbWhjXVpYV1dXV1dXWFdXV1RQTklHRkVFR0lMT1JVWVtdXV9hZWlrcXd9goKCgoKDhYaIi4uLiYeGhYSEg4ODg4SEhoeJiYmKioiIhoOAe3ZzcnFvbm1raGNeW1haYGVsdHp+g4iLioiJh4WFhYWFhYSFhYSBfYqQjYmHh4eKjI6QkZKSkI+RkJCOkI6QjY2Oj42Ojo+PjYyMjIyMjIyNkJGPj46NjYqMi4srKysrKysrKyoqKioqKioqKSkpKSkoJycpKSgoKCcnJygoJycnJycnJycnKCgoKSkpKSgoKCgoKCcnKCgnJyYmJycmJiYmJiUmJiUlJSUlJSQkJCQkJSUlJiYmJiUlJSUlJSYmJCQlJSUlJSUlJSYmJSYmJygpKSoqKysrLS0tLS4uLi4tLS8vLS0tLS0tLS0uLCwsLCsqKSkpKCgpKSgoKCgnJiYmJSUkJCUkIyMiIiMjISEhISEhISEhIiIjIiIkJSgrNUdhc3Fzdnt8eXl5e3h1c2pgVUpKY3+Ph3V9gXp7fG5NRUxdaGlpamViZGdqbWx1d4RyY4KCeG9pR1B3X0WBa2RmW2hobnZaOisrKzQ/S1dghIR+dnl3dnNsamtoY2RpZmlucXV3eHyAdXFubnJ4goFseoqVop53YXdRPTdAWG5waGCOjZSQlI1gOUBhb4aBcm1qaWtwbmprd4afpJyMg317d2RIQT1NcoSGi4qQj4Z5TS8zQVFhX1BKS1VvenJsYltkcHBrSiwvMC8rKigoJyYmJSQlJSUmJSgnKCkrMDIxMjE1NzQuKyopJSYnKSspKzdBRlFRVU1WZ0NBQEpNUlNNWFZfXWZre3RvYUtWaXJycG1nY11ZV1dXVlZXV1dXV1ZTT01IRkRCQ0VIS05SVVhaXV5eYGRoa3B2fICAgYGChIaHiYuLioiGhoWFhYODhISEg4aHioqKiYiKiYaDf3p1cnFxb21tamhkX1haX2Fnb3V8gIWJjIqIiIaGhYWFhYWFhYOBf4iRjYuHh4eKjI+SkpKRkI6Pjo+OjY+Qj5COjIyLioyPj46Ni4uLioyNkJKSkZCPjYyNjYyMKysrKysrKysqKioqKioqKikpKSkoKCcnKSkoKCgnJycoKCcnJycnJycnKCgoKCkqKSkoKCgoKCgoKCgoJycnJycnJyYmJiYmJiYlJSUlJSUlJSQkIyUmJiYmJiYlJSUlJSUmJiUlJiYlJSUlJSUmJiUmJicoKSkqKiorKy0tLS0uLi4uLS0uLi0tLS0tLS0tLCsrKysqKSkpKSgoKSkoKCgoJyYmJiUlJCQjIyIiIiEiIiEhISEhISEhISEiIyQkJScqM0Nbbm9vdnt7d3J1d3Z3dXRnXVVKSWmBkIhzgXx6fH1iSUdQYGFjZmpmZmhjVU5WWVhjZ1FdWVdRVkQ+Y29dgYCJZFdnXWhmWVZJOS8zPkpWWn6EfXp2dXZycG9saWVjYmFeX2FnZWNieX1xbG5tbHWCfXOIkJNSU1tRPjpKa4SOhXJjkJCQiXuCcExRa3aPinluaWZiZWppb3mXpp6OenZxcWtNPTo8S2N1f4WIl4+CcEQvLC8/Y2deWVtohIiBc2ZdZm1qX0YqLTAtKyooJyYmJiUkJSUiIyUpKSoqLzQ1Njg+RkNEPCsnKCYmJigpKSkwNz9JWV1VXWNQQEVMRk1Xa1xTV1Nea3lLQF1MZmtmcW9tZ2NdWVdWVlZWV1dXV1ZVUlBLRkVCQUJER0tOUlVYWlxdXl5hZmpvdXuBgYKCg4SGh4qLi4qIh4WEhYWDg4SEhYeGiIqKiomLioaFgX15dHBycW9tbWpoY15XWV9kaXF3fYCFi4yKiIiGhoWFhYWFhYWFgoWQjYuJioqMj5COkJCQjo2Ojo2PkZGQj46MiYeFhYeMj4+NjIuJiYuMj5KTkZCPjo2NkZKQjysrKysrKyoqKioqKikpKSkpKSkoJycnJygoJygoKCgoKCgoKCgoKCgnKCgoKCgpKSkpKCgoKCgoKCgoJyYmKCgnJycnJiYmJicnJSUlJSYmJiYmJiYmJiYmJiYmJSUlJSUlJSUmJiUlJSUmJiYmJiYmJygoKCkoKSoqKystLS0tLi4tLS0tLi0tLS0tLS0tLSwrKioqKiopKSkoKCgoKCgoKCYmJiYlJCMjIyIiIiEhICAgICAgICAhIiEhIiIjJCQnMEJcbmxtcXt7dHFydnh4eXdvZlxSREJuhY94a4B4eHlxVkZIUWJoam1mYlVUTkRLSEhFRkpFPjg4NztCQUZeWkqIjHBhfnRwbmFUS0hBOz5KUFZ5g315dHFxcXNzb2hlX1taV1laYWFXSElxdXBvaWZrd4J1fIdbT1ZOPzxMdo6amo9vX4aLjIpzTmNlZXp6joZ3bWdiXWJmZWqCo6CSh3hsZWheSEI9O0daZ3Z/iY6Fe2A8LCwzR2l2bllYZoCLjYOFcWxtZVU+KSosLCoqKCcmJSUkIyQkIyIkJiUmLDpCRUVER0dCPTUpJiYmJiYoKScqLzM6RERKV2RgWlZGQDtATFdYWlw+QltUMjhmUU5daXJwbWhiXFhWVFRVV1dXV1dVVFFOSkVBQEBBQ0ZKTVFUWFlaW1xdYGNobXJ6fH5/gIOFhYqLi4iHiIeEhYSEhISDg4SGhoeKiouKioiHhIF9eHNxcHFwbWxqZ2FdWltgZGpxeH2BhouLi4uIhoaFhYWFhYWFhYKOkouHi42Oj4+Qjo6Pj42NjIuPkJCOjYyIhoOBgIKIjY2NjIuMiYqKjZGUk4+PjoyMj5CRj44rKysrKysqKioqKiopKSkpKSkpKCcnJycoKCcoKCgoKCgoKCgoKCgoKCgoKCgpKSkpKSkoKCgoKCgoKCgpKSgoKCgnJyYmJiYnJyclJiYnJycnJycnJycnJiYmJiYmJSUlJSUlJiYlJSUlJiYmJiYmJicoKCgpKCkqKisrLCwsLC4uLS0tLS4tLS0tLS0tLS0sKyoqKSkpKSkoJycnJycnJycmJiUlJCMjIyIiIiIhICAgHx8gICAgISIhISEiIyQlLDxWcXBobnR5dG1tcHJzd3h2bmJWTT06aIaHcnJ3cnd5a05DSFVnaWx2ZFdHREdBSlBLS0pKREdBPjs7QEY/T106a3uFiIeEfnRjVE1JRUFARkpRcoJ6dnNyb25wcm5pZV9bWU9OVGBeUkYyR2ptbmpoaG52gHxjQEtOTkVIb5Cdop6QalxvhYuGeTUxTHeTkImAd2tkXlteY1xmmZ+Wh3xvXGFsXEZCQERNV2FrcXd2dW5VOCstO1JodH53ZF5keIaGhIR7aV9TNCYpLSwqKScnJiUlJCQkJCMiIiMkKC86QkRDPzo4NzYwJycnJicoKCcnKjE2Oj04R1FYW1lWT0lLQ0xZWlJQRjZRXE1WallKWXJzcG5oYlxYVlRUVFNWVlVVVFNQTEpFQUA/QEJFSk1RVFhZWFpaXF5hZWpxd31+f4CDhYaIi4uKiYeGhIWEhISEg4OEhoaHiouLiomHh4SAfHZzcXFxcG1samdhXVpdYWZrc3uAg4mLi4uLiIaGhYWFhYWGhoaKj4uLioyOjo2Oj42NjY2MjI+OjY2LiYWCgHx5e36CiY2OjoyLioqKi4+Tk5KNjo2LjZKRkY+OLCwrKysrKyoqKioqKiopKSkpKSgnKCkoJycoKCcnKSkpKSgoKSkoKCgoKCgpKSkpKSkqKikoKCgoKSooKCgpKSkoJycnJicnJycnJycnKCgnJycnJycnJycnJycmJicnJiYmJiYmJiYlJSUlJSUnJycnKCgoKCkpKisrKysrLCwtLS0tLS0tLS0tLS0sLCsrKyoqKikpKSkpKCcnJycmJiYmJiUjIyQjIiIiISIiISEhISAgISEhISEhISEjIyMmKTdPbXJpa3F2c2xpamtvcXZ3dGtjVks/O2qQi3R5cnB4d2JLSFBhZ19gaFdKRkRJQ0hOS0xLTUVDQkA+Pz5FQEFKRDo8d42HhH1yYlVNRkRDQ0JGTGeEd3VzcW5sbm9uZ2JbWFtTTk5DTE9JOSxGampmamhqb3d6RzxCSUlHbZOio6OhjXNhXYGOhodDKz2AmI2Ee3doX1xZWFpTdaGYjYBwW1BZXE07OkJJUldbYWRmamthTTcsN0lcaW52fnZqeYyQhXp/fWtcSiwlKCoqKignJiUkJSUkIyMjIiIiISYvNzo8Pz49PTs4MSgnJycoKCcoJioxOz03OUJHSVteW1xHRkFES0tJVmBSQFlSY25eSlxzdHBtZ2JcV1VUU1RUVFRUVFNSTktHQ0A/P0BBRUlMUFRXWFlaWlpcXmJnbnR4fX6Ag4aIiYuLiomHhoSFhISDg4ODhIWIiIuLi4qKiIeEgHx2cnFwcHBvbGpnYV1aXGBobnV7gIWIi4uKiYaGhYWFhYWFhIaKkI2MjI6OjIyLi4yNjYyNjYyKioiGgn58eXl4eXyAhYuOj42NjIqKjI6Tk5KPj42Li4+QkY+NjiwsLCwsLCwrKioqKioqKSkpKSkoJygpKCcnKCgoKCkpKSkoKCkpKCgoKCgpKSkpKSkpKioqKikpKCkqKCgoKSkpJycnJyYnJycnJycnJygoJycoKCgoKCgnJycnJiYnJyYmJiYmJiYmJSUlJSUlJycnJygoKCgpKSorKysrKywsLS0tLS0tLS0tLS0tLCwrKysqKiopKSkpKSgnJycnJiYmJiYlIyMjIyIiISEhISEgISEhISEhISEhISEhIyIjKTBGZnRta3B0c21raGlqbXBzdXJrY1ZKPjZml5J/fnF1eHpcQ0hRZWtfXV9QREZJTEdNUU9NSkpEQkFAQT9AQkRDQ0ZAboSJh4N6a1lOS0VDQkJBREdfhXh2dHFuamlramdhXlpWUEc+NjM7PTg2N1ZtZ2dmZmdvd3FGOjc7X4yjpqSmnod1YGV5jIaJSzFAhJeHg3pzYlpYVlZOVIibkoR5ak9OWVA7MTlCS1FXWVxfY2ZlXEo2MD1RY2lra3V8fpmckoJ6fHdkVD4qJicpKSooJyYlJCUlJCMjIyIiIiMqMzo9P0E+Pjs2MzArJicnKCgoKCYpLTIzMTk8OkRVW1JXXEQ/RFFUVV5pXUxid3h+Z0RYa3RvbWZiXFdVU1JTU1RUVFRTUk5LRUNAPz9AQUVJTFBUVldYWVlZWVxgZGtxeH1+gIOGiImLi4iHh4WEhYSEg4ODg4SFiImLi4uKioiEgX97dXJxcHFvbmtoZWBcW15jaW12fYGHiYuLioeGhoWFhYWFhYWHjY6Pj46OjIuJiYmKiouNjYuLiIR/fHl4eHd3eHt9gYiNj46NjY2Li42Qk5KNjYyLi42RkpCOjIsqKioqKioqKioqKioqKikoKSkpKSgoKCgpKSkpKSkpKSkpKSkpKSkpKSkqKioqKiorKyoqLCwsKyoqKiopKSkpKSkoKCgoKCgnJycnKSkpKSkpKSkoKCcnKCgnJycnKCgmJicnJycmJiYmJiYmJicnJycpKSkqKiopKiwsLCwsLCwsLCwuLi0tLCwsLCwrKiopKSkpKSkoKCgnJiYmJiYmJSUlJCMjIiIiISEhICAgICEhICAgICEhISAiJCMkKC9CXnFtam90dGxoZmRhZGludHNza2JVSDgxVZSRhHZuc3ptW0hLU2RhXF1aTERKT05OT1JTUktHR0VGSUxBPD5AP0NFRFeHh4aAcmdVSkdDQkFCQD5AXId5c29wb2toaGhlYV1ZVFBIOTExNTU1NTY8aWxpZ2NlaG19WDAyQXOYoqWnpJWFbVx2cX+CgmA3PneRh31zaFZSVVRUTXGbloV5bl5PWmFUNTQ7R05UWFxeYWJjYFlGOT9LWmRnZmdscGiTmY+CeXNpXlQ/LCgpKSgpKSclJSQjIyMjIyIiISMlMDk8PT4/QDw4MzEvKicnKCgoKCYmKC0uMTM0Nzo8SlpaSlNPQz1ASUhMUExabXduaWRFV211dW5pY1tYU1JRUFBTVFNTUlFPSkVCPj0+QEJGSU1OUlVWV1hYV1dYXWJobnV6fIGChYeJiYqIh4eFhYSEg4ODg4OFhoiJiouLiYmHh4SAe3VycXBwb2xqZmNfXF1fY2lxeH2Ch4qMjIqJh4eFhYWFhYWFjY6Oj4+OjYuJiIiGiYqKiYmIg315dnZ1dnZ3eXt7f4OKjpCOjo2NjIuNkpKRjouLi4qPkpORjoyLKioqKioqKioqKioqKiopKCgoKSkoKCgoKSkpKSkpKSkpKSkpKSkpKSkpKioqKyoqKystLSwsLCsqKisrKikpKSkpKCgoKCgoKCgoKCkpKSkpKSkpKCgoKCgoKCgnJycnJycnJycnJiYmJiYmJiYnJycnKCgqKioqKissLCwsLCwsLCwsLS0sLCwrLCwsKyoqKSkpKSkpKSkoJyYmJiYmJiUlJSQkJCIiIiEhISAgICAhISAgICAhISAiKDUlJi0/V3J0bG50dW5pZWJfXF9pbnN3cWphVEc2LUqQkoR0cnJ2YU9KTE9dWVNST0NGTU9OS0xQWVtQSEhJRkhMUE5CQUBAQ0RBgIiFfW5fUUlDQT47PTw5O1SFfXFvcG5oZmdlY19cVlVQRDUzMzExMzM1Nk1wbGhmZWNsdHQ+LE9+mKCjopiKfWNad2B2f3xyOjZvkH9za1hOT1JSUVeGlod3bWNYVFZaVUI/REtSV1tdX2BjYVpSSEVMUlxiZGdrcHmAmY59c25nX1pVQCwqJygoKSknJSUkIyMjIyEiIiEjLDc8PT4/QD88ODUzMCsoJygoKCgnJyYrLjEzNTU1NztDTU9CRlVaPkFPXFRWWVxiTVNcSlJpdndwbGVfV1JQUFFQUVNTU1JRTkhEQT49PkBBRUlNT1NVVldXV1ZWV1tfZm1yd32Bg4aHiYmKiIeGhoWEhIODg4ODhYaHiIqKi4mJh4eEf3l0cnFwcG9samZjX1xdYGZrcnl+goeKi4uJh4eHhYWFhYSCi5KRkY+PjoyLiYiIhoiKiYaDfXh3dHV2d3d3eHp7e4CFio6Qjo6NjYuMkZGPjYyJioqLkJSTkI2MiyoqKiorKyoqKioqKikpKCcnKCkpKSgpKSkpKSkpKSkpKCgpKSoqKysqKysrKyssLCsrLCwsLCwsLCwsLCopKSkpKSgoKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgnJycnJycnJyYmJiYmJiYmJycnJygoKCkrKyoqLCwsLCwsLCwsLCwsLCwsKy0tKysqKSkpKSkoKCgoJyYlJSUlJSUkJCQjJSUiIiIhICAfHyAgISEgICAgISEgICIlKCw+Vm91bnFzdm9qZWFdV1ZdaXF2dnJrYFNGNThbiY98cHJzbFxRRkdQVExEQUNER01LS0pMTl1cT0ZEQkFAQFJWRD1BPkQ+PmmHgXZtZFtURDs4ODg3NzlCfn5ybGxqaGRjX1hWV1ZSTDwuLjEvLi8wMjc1ZHJqYWBjZ2lzXzlefI+Zm5SKgW5OUl5DYX92c0c3co14bGFHR0dNTk5kg4h3aF5PUlRQTFNVUFNWWVxeX19iZGJgUkpOV11gZGxvbHCPmY58b2llYltZUz0rKCYnJygmJiUlJCMjIyQiISEiJjE7PT0/QEFAPjs4NjQtJiQmJicnJSQmKCwvMDI1Njc3NzxJRkZLUEdDRk5NVWRiWlRWVk9FSWV6cWxmXlhSUFBRT1FRUVFSUUxIQ0A+PT5AREdKTU9TVVZWVlVUVVZZXWNqcHZ8gIGHiIqKiYiHhoWFhIWEg4ODg4WGiIiLioqKjIqHg354cnBxcXBubGplYl5dXWFobnR6f4SIioqJiIaGhoaGhISEh5CSkpGPjoyLiomJiYaIhYJ9end3dnV3d3d4eXl6e3yAhouOj46OjY2NjpGQj4yKiomLj5KVk4+NjYwqKioqKysqKioqKiopKSgnJygpKSkpKSkpKSkpKSkpKSgoKSkqKisrKysrKysrLCwrKywsLCwsLCwsLCwqKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKCgnJycnJycmJiYmJiYmJicnJycoKCgpKiopKywsLCwsLCwsLCwsLCwsLCsrKysrKikpKSkpKCgoKCYmJSUlJSUlJCQkIyQkIiIiISAgHx8gICAgICAgICEhICIiJy08VnB1bm5zd3BpZmJcVFBQXmtyeHZvZ11QRDU2TXeGdG1wc15MVEVETEhFQT9ERUdGSUlJSVBWVk9FRUY/Pj07OUQ/Pz49QUBKgYB0bGdkVEE7Njc2NDQ2OGJ+c21qZ2VjX1xRTE5NSUU2KiovLiwuLzAxOE9vamVkY2FiZnBbY3uKkIyEem1SRkZDQld+dXBVOnaKdGtcQkVHTEtSa3Z1aV5UU1RWWEM8UFpZW1pdYGJjZGZlYlZQXmdpZ2x4bF13k5B8bmdhX11WVVI/KygoJygnJiYlJSQjIyQjIiEhISk1PD4+P0BBQD89PDg1KyQiIyMkJCMjJSYqLjEwMzc5PDs6OTg4OUNNTExRW1VYX2FXRUlfZEtPcXRtZF1YU1FQT1FRUVFRUE9MSENAPj0/QUNGSU5PU1RVVlZVVFRVV1xia3B3fICDh4mKiomIh4eGhYSEhIODg4OFhoiIiYuKiouKiIB9d3JwcXFwbmxqZGFeXV5iaXF1e4CEiIqKiYiGhoWFhYSEhY+RkJKQj46LioiIiImIgn98d3d2dnV2dnd3d3h4ent9g4eMjo+Ojo2NjI+Rjo2KiYmKjJGTlZOPjY2MKioqKioqKiopKSopKSkpJygpKSkpKSkpKSkpKSoqKiopKSoqKSkqKissKiwrKywsLCwtLS0tLi4sLCwtKyorKyoqKysqKioqKSkqKisrKioqKikpKSkpKSkpKSkpKSkpJycnJycnJycnJycnJycoKCkpKCgpKSoqKisrKysrLS0sLCwsLCwsLCsrKikqKiopKSkoKCgnKCgmJSUlJSUlJSQkJCMiIiIiIiEfIR8fHx8fHyAgICAhISAjJyk5VG92cG5zd3NrZWFaVE1KT11pb3RzbWVbTkM3NUldgWtmaHFTRUdDPUJFR0NCREVIRkdJSUlLUVFORkBCQkNFRD47Qj09Pj9AOm17cmtmY01ARD00MTEyMzU7cnJpZWVlYmBaUUtOT0tFNi0qKi0tLi8vLjdAaW5pZmJgXGBqaWl3hIZ/eGxUPkZCQUtYfXhqYkJ6hnRmV0BCSEpMVmRnZVxUU1RWVkU0LjhWZ2BgX2NlZGRnZ2dcX2ltbHJ7cl5ggoh8bGVfXVxXUVBOPislJicnJycmJSUlJCQkISIhIiYxOj0/QEBAQ0JAPz47NCwkIiIiJCQiIiQlJyouLzE1Oj09PTcxLisuNkhWWFBSWVlpaUxJYmJaTG11a2NcWFhaUk9QUFBRUVFOSkZBPj0+QENDRkpNUFJTUlVXVFNTVVdbYmpwdnx/goeJi4mIiIeHhoWEhYWDg4OEhoeKi4yNi4qLiYWAe3RycHBwcG5samNgXV1fZWlwdXyDhoiKi4mIhoSEhYWEhIqRk5KRjo6LiYmJiIeJhHp5eXd3d3d2d3d3d3Z4eXp7f4SJjY6Qj42OjY2QjouLiYmGiY6VlpSSjoyNiykpKioqKioqKSkpKSkpKSgpKSkpKSkpKSkpKSkqKioqKiorKyoqKysrLCsrKyssLS0tLS0tLS0tLCwtLCwrKysrKysrKysqKioqKysrKysrKysqKikpKiopKSkpKSkpKSgoKCgnJycnJycnJycnKCgpKSgoKSkpKSorKyssLC0tLS0sLCwsLCwrKyopKSkpKSoqKCgoJyYmJiUlJSUlJiQkJCMjIiIiIiIhICAfHyAgHx8gICAgISEjJSs3VnB5b2xxdnZvZ2FcVU1ERU9dZ25xc2tiV0o+NDI0YH5oZ21vSkZDPjpAQ0dFRERFREdISElJRktPUVRYZG5ucW9rY1VSVV9QNzlXeHFqZ19PQkA5MzIxMjMxMkhyamNiYV9eWVFMSU1OTUc7LiouMS8uLzIzN0pvbmlfXFtdYm1zd3t8dWtcQT9CRE1TYHJuX19NdYRzZVNBR0lKTVpdWlhWVFNVUkAwLjRDX2ptbmtnZ2ZnaWllY2tvcnR6Z1tXYHp7bGNdWVhZUlBNSjsqJiUmKCcnJiUlJSQjIiIiISMtOTw+QUFAQEJAQD8+OzUoIiMjIyMkIyMkJSUlKCouMTM3OTg2MiwrKy48UmBaW19hbGZhUElGU0pmcm5lXFdfXl5ZT1BQUFBOS0hEQT49PkBDRklMTlFRUVFTVFNRUVRYXGNrcXh+gIOHioqKiYiHhoWFhISEg4ODhIaHiouLjIuKiomEgHp0cXBwcHBua2ljYF1dYGZsc3Z8g4eKjIuKiIaFhYWFg4eMjpKSj46Lh4eHiImHgH15eHl4eHd3dnd3d3h4eHp6e3+EiI2Pj46OjY6QkYyKiYiHiYyTlpaTkI6Mi4soKCkpKSkpKSgoKCgpKSkpKSkpKSkpKSkpKSkpKioqKisrKysrKysrKysrLCwsLC0tLi4uLS0tLS0tLi4sLCwsKysrKysrKiorKysrKiosLCwsKyoqKisrKikqKikpKSkoKCgoKCgnJycnJycnJygoKSkqKikpKioqKisrLCwsLC0tLCwsLCwsKiorKioqKSkpKikpKSYlJSYlJCQjIyUlJCIhIiMjIiIhISEfICAgICAgICAhISAhIyc1UW54cm5wdXVzbGNdVkxBPURQXWZvcnBpXldKPDQxMWZ8a2hva0VFPzk5PUJFRkZFRURGSUVDRkNDTGmCkJWakIZ4dndpVV9xeVk3P3Nua2VbTT82MjExMTAuLzEzWGtjYF5dXFhSTUpJSk1OTkc5KyotLy0vMzQzUnJtYVdYWVxhbXp2cGpiTTxAP0JdYGdiWVpYUm2BbWBOSEpNTE9SUlRUVVNRTT0zMDNAU2dxdHh6dm9raWxsam1yeX1yWklaUFdmZmNeW1hZVE1KSEQ1JyQmJicpKCclJSUkIyIjICMpNz0+PUBAQEBBQUBAPzwzJh8gIyMiIyUkJCMkJCUnKCksLS4qKyorKikrLTdQXFJaY2RiYVtcaVtLW3NvaV9jW0BWX1NPT09NTEhHQ0A9PT5BQkRHTE9RUVFSVFJRUFFTWFxja3N5fYCDh4qKiYiHhYSEhIOCgoKCg4OFh4qLi4uKioqJhX55c3BwcHBvbWpoY2FdXmJnbnN5fYOIio2LiYiGhoaEhIaMkJORkI2LiYeFhYqKf3t7eHh4eHl5eHZ3d3d4eHd3enyBhomPkI+Ojo2QkpGMiomIiIuOk5eVko+OjIuKKCgpKSkpKSkoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKiorKysrKysrKysrLCwsLCwuLi4uLi4uLS0tLS0tLCwsLCsrKysrKysrLCwsLCsrLCwrKyorKysrKyopKiopKSkpKCgoKCgoJycnJycnJycoKCkpKiopKSoqKiorKywsLCwsLCwsLCwsLCoqKSkqKSkpKCgoKCgmJiYmJSQkIyMlJSQkIiIjIyIiISEhHyAgICAgICAgISEjJCg3TGt3bW1zdXZ1cWlhWk9BOj1ET15obW5sZl5VSDw0Mz50dmhnbmNBQ0A6OT9FQ0RFRENBRUhLRkJCSGiPo6qqoZWLfHd4e2hXZ4J7VC9gb2xlW0s9NjIyMzEvLi8xMjxkY19bWVhWU1BMS0tLS09NSkI2MS0rLTMxKy9aZl5YVV1dX2Zvd2phWUM9PEZhY2JgXVpQVGRke2RVR0hNUFFSVFVVVVFPSD80MTE7Tl5td3Ryd3h1cnFxcXByc3R1XUdWT0RRWl5fW1hVVVJMSEU/MiYkJycnJycmJSUlJCMjIiMoMzw9Pj9AQEBAQUFAQD88MiUfICMjIiMmJiMjJCQmLikpJiUmKioqKyorKywuM0ZKW19fWGBkWl9ZTFZxcmJaRSk0Tk5MT09PTUxIRUI/PT0+QUJGSUxPUVFSU1JRUFBRU1hfZGxzeX2BhIeKiomIh4WEhYSDgoKCgoODhoiKi4uLioqLiIN+enRwcHBwb21pZ2JgXV5iaG50eX6Dh4mMiomHhYWFhYaKkJORko+Ni4uMioeLhHl3eXp5eHh5eHd3d3d2d3d3eHp8g4eNj5CQjo6OkZOOjYyJiIeLkZSWkpGPjoyLiikpKiopKSkpKCgpKSkpKSkpKSkpKikpKSkpKioqKioqKysrKywsKysrLC0tLS4tLi8vLi4uLi4uLS4tLC0sLS0sLCwsLCwsLC0tLCwrKywsLCwrKysrKysrKisrKioqKikpKCgoKCcnKCgoKCkpKioqKioqKigqKioqKiosLCwsKywsLCwsLCwqKSgpKSkqKignJiYmJSUlJSUlJSUlJicqKiUkIyIiISIiISAgICAgIiMgICEhJSgwSWp3bWhudHh0c25mXFNDNzY/SFFeaG9wbGdcUUY6NDZQfnJhYmxfQUJBOjY/RUJCQkNDQENIUUo/SF6KnqWtpZSOkpSKgYFxWmJ9iXc7RnJrZVpPQDYyMjIzMy8uMTU1Pl5gV1ZVVFNSTkxNTUtMTEtLSDwvKSwvLSYnNF9iX1tYW15kZXFuXlI9O0BeX1VaWlxXUEdQUWtgUENKSk1OUlhcYF1aTkU7MzEzRVlmcHZ1cXBycW1qbG9vbm5scEtPVUdGUVtdXFpWVVROSkZCOi0jIyQlJicnJSUlJSQjIyQnMjk7PD4/P0BBQUFBQEA/Oi8jISAhIiIiIyYjISIlKSspKSsrKiorKysrLCosLy8xRFZtaWdmX2ZqWFJWbmdoYE4rMUZPUE5OTkxLR0RBPj09PkFCREdNT1BQUlJRUFBQT1JZYGdvdXt+goWIiYmJiIeFhISCgYKCgYGDhIaJiouLi4uKiYWCfnlzb29vb25saGRhYF9hZGpwdnyAhIiJi4mHh4WEhYaLkJGUko+Ojo6LjI2MhXx7eXp4eXh4d3d4eHh4eHh4d3h7foSLj5CPj46Oj5KRjYyLioqJjJSXlpORjoyMioooKCkpKCgoKCgoKSkpKSkpKSkpKSopKSkpKSoqKysqKisrKyssLCwsKywtLS0uLi8vLy4uLi4uLi0uLCwtLC0tLCwtLS0tLCwrKywsKywsLCwsLCwsLCwrKyorKyoqKiopKSgoKCgnJygoKCgpKSoqKioqKiooKioqKioqLCwsLCssLCwsLCwsKigpKykpKSkoJiYmJiUlJSUlJSUlJSYqMDAmIyIhIiEiIiEgICAgICEhISEjJSYxRmR5b2drcnh2dnJqYVdKODA3QUpUYGlwcm1lW09EODE8YYNwZWZuWkBEQDk2PENEQUFDQ0JERUhFS2SDmaCkrKedlZicj312dGqFj5GGZTNwamVcUkMyLiwsKioqKywvMC87VlxXU1BQT05NTE1LTUtKSUhFQDUuMS4pJCk6Wl5hYmNhXV5oaGFIOkJVWldbYGFZUkxJREdOWE1GTFFPT1JVW2FfVkxAOTMwN0pfa290dnNubWxnZWlqZ2dfXFpHWk5JSFJdXlxaVlVSSkZDQDUqJCQkJCcnJicmJiYlIyMmMDg7Ozw/QD9AQUFBQUBAPzovIyMlISEiIiIiIyMlJygqKiorKyoqKysrKysrLi8zOEBUYmhtb2lkZVVNV2lqZV5cWFVPTk1OTk5MSkZEQT49PT5BQkdKTU5QUFJSUFBPT05TWmBocHV7foKFiImJiYiHhYSEgoGCgoGBgoWHioqLi4uLiomFgX11cW9vb29ubGhkYWBgYmZscnh+goaLjIqKiIeFhIaKjpKSk5KQjY2OjY6OjX55e3l5eHh4eHd3d3d3d3d3d3d5fIKHjZCQkZGOjpCVkI2Mi4qKi5CVl5WSkI6MjIqKKCgoKCkpKCgpKSkpKSoqKioqKSkrKisrKiorKysrLCwsLCsrLCwsLCwsLi4tLS8vLi4uLi4uLi4uLi0tLi4uLiwsLi4tLS0tLS0sLCwsLCwsLCwsLCwsLCwsKysqKisrKCgoKCgoKCgpKSkpKSkpKSoqKysqKisrKysrKysrKywsLCwsLCwsKyoqKSkpKSgoJyYlJSUlJSUkJCQkJCQmJikoJSMiIiEhIiIhISEhISEgICEiJCktQGF1c2trcnZ4eHRvZVxNPjAxOkRQWmJqcXJpY1hMQzcxRXWCbGdqcVZBRj45OT9DRENCQkNBQ0VESWGBl6OmqKqsqqGcmZaHdnl6ko6NjnxFZGxmYFdPR0dGRUVGRUZKTFdaVEhMUlNST05NTEtLS0tLSEdEREQ+NzMuKicjJT5ZWVdbXF1dXl1iVUlSWVJUV1ZVU01KR0A0O0VBRElNTExRVFdcXFZJPDcwMT1QYGxwdHZ0bmtoZ2ZpaWdlX1tOVVJHSE1aYWFeW1VTTUdEQD0xKCQjIyUlJSYmJiYmJCIiKzU5Ojw+Pj8/QEJCQUFAQD86LyMjJCMiIiEjIyMiIiUoKCoqKysrKyoqKissLjE0OD1CREdUZmdnbWlOTF5qamRgWlRMTE5NTk5OTUtHQ0A+PT4/QURGSU1NUFBQUFBQTk9PVVpiaXF4fX+DhYiIioiHhYODgoGAgYGBgYOGiIqKioqJiIiIhH96dHBvb29vbWtnZWNiYmNobnV6foKIjIyKiIeHhoaKkJKSkZCOj4+Pj5GOjoF5eXh5d3h4eHh3eHh3d3d3d3d4en2EiZCSkpCOjo6Tk42MjIuJiIuRlpeVkY+Ni4uLiigoKCgpKSgoKSkpKSorKioqKioqKyorKysqKyssLCwsLCwrKywsLS0tLS4uLS4vLy4uLi4uLi4uLi4tLS4uLi4sLSwsLCwtLS0tLCwsLC0tLi0sLCwsLCwsLCsrKyorKyooKCgoKCgoKSkpKSkpKioqKisrKiorKysrKysrKyssLCwsLCwsLCsqKikpKSkoKCYmJSUlJSUlJSMkJCQkIyMlJCIjIiIhISIiISEhISIiISEjJSgxP1t2c2trcXZ2dnZvZlxRQjQvNT5IVV5mbnFuZ19VST02N1Z7gmxmaXFUP0U+OTlCRUVEQ0NDQkNFSFlwi5eapKyrqq6joZ6clHKGh3+AiJKGaVFkX11dXFlZVlRVVFNUVFJXV1lbU05NTktMS0xLSklJSkhFRUJBPjo3My0oJicmQ1dQUFdcWVdaYGJVVVdZVVRSUEtHQkI/NDM+SENFSUpMT1FVWFdRRj03MjI+Tl1ocHh4cWtpaWZmZmdoZ1hEOEZNSkhSXmBhXFhVUEhEQT05LCUjIiMkJCUmJiYmJSMjJjA4Ozw+QD8/P0BCQkFBQEA9Oy8jICAiIiEhIyMjIiIlJyoqKioqKioqKiorLzA2OT88PTw/REtRX3FtSUdYWV9kZVtTVlFOTk5OTk1MSEU/PT0+P0JGSEtNTVBQUFBPT05PUVZcYmlxen5/g4WIiYmIh4WDg4KBgH+BgYGDhomLi4uKiYiIhIB8dXFub29vb2xqZ2ViY2VmanF3e4CEio2MiomIhYWJkpOUkZGPj46Ojo+Oj4Z3eXx5eXp4eHd3eHh4d3d2dnd3eHp+hYuSk5KRj4+SlZGNjIuKh4qMkpWVlZGPjYyMi4onJygoKCgoKCkpKSkpKSsrKyssLCsrKysrKisrLCwsLCwsLCwtLS0tLi4tLS8vLy8vLy4uLi4uLi4uLi4uLi4uLi4uLi0tLS0uLi0tLS0sLC0tLS0tLSsrLCwrKyoqLCwrKioqKSkpKSoqKSkpKSoqKioqKioqKiorKysrKysrKywsLCwrKioqKSkoKCcnJycmJSUlJSUkJCQkJCQkJCQkJiQjIyMjIiEiIiEhISEiIiMiJSkxPVhzcWpscHJyc3JtZFlOQzUvMDdCTVZiaW9wa2VbT0M3NUJlfn9saGZsT0BDQDg3QkdFQ0NFRkNAQE5rgZCWlp6nqqqsoqOjpKKMfYOJi5SainpSWVhXVVRPT1BQT09PT1BQUlZbW1VQSUlGRUVGRUVGSEhISEVBPz46ODUzLCcmKC5QWlVTVVRTVVldYldSUk5QTktGQT0/QTcuMz1BQURGS01OUldZUUY6ODM0PktXZWxyc2xoaGdmZmZnaGljTjZARkVJWF5eXFhVU0tFQj87NSkjIyMjIyMkJSUkJCMjIykyOT0+P0BAPz9AQUBAQD8/PjouIyEhIiIhISIiIiIiJCYrKyspKioqKioqLDA0NjY2Njg5PENGRUhVVEZHXFJdZWZbV1xTTU5NTk5NS0dEPz09P0BER0hLTU1OTk5PUE9PUFFWX2Nrcnd9f4OFiIqIiIWEgoKAgIB+gYCBhIeKjI2LiomIh4SAeXRwb3Bwbm5raWdlZWNnaGxzeH2Dh4uNjYyKhYaHjpKTkpCPjY2Ojo+Ojox6c3p6eHl5eXl4eHd3d3d3eHp5d3d7gYeOk5OSkJCQlZWQjYyLiYiKkJOXlZSQj42NjYyJJycoKCgoKCgpKSkpKSkrKysrLCwsLCwsLCwtLS0tLS0sLC0tLS0tLS4uLi4vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLi4tLS0tLi4tLS0tLi4tLS0tLS0sLCwsLCwrKywsKyoqKikpKSkqKikpKSkqKioqKioqKioqKysrKysrKyssLCsrKioqKikpKCgnJycnJSUlJSUlJCQkJCQkJCQkJCUkIyMjIyIhIiIhISEhISEiIyctN1BvdmprbnBycnFnYFZMPzIsLjI8R1JbZm1vb2lgWEs/MjFJcX1/bGdqbExAQ0M6OEBERURFR0dDP0NefYyVmJKVmqOusK6wrqmrknR2jqOho5aDYFFVU1JRUVFRUVJSUVFQUFFTVFNWUU1LR0VDQkBBQD9DQ0JCQD4+Ojk2MzAqJScqMlJfWFBSVVJQVGFbRElDRUZFQj48Pj41LywtOkBBRUpMTU5OUE9DOTc0MzpIVV5nbG1saWhmZmZlX1hWTE9VTENGT1peXFpWU09IQz48OTMnJCMjIyMjJCUlJCQjIyMpMzo9Pj9AQEA/QEBAQEA/Pz46LiMhISIiISEiIiIiISIkKCoqKSoqKioqKiwvMzQ0NDU2OUBHSUlJTUNAQVVob25mYmNnU0xNTU5NTEpGQ0A/P0BBREdIS01NTk5PUFJUVFRXWV9ma3R6fX+Dh4mKiIiFhIKCgICAfoGAgYWIjY+NjIqJiIaDf3l0cG9vb25ubGpnZWRlaGlvdnt/g4eLjYuJiYeGi5SRkpGRjo6Njo6Njo+Bc3h7e3l5eXh4eHh3d3d3d3d3eHh5fIKIjpKTkpGOkJSRjYyKioiJjJKVl5WUkI+NjI2LiicnKCgoKCgpKSkqKisrKysrKywsLCwsLCstLS0tLS0tLS0tLS4uLi4uLi8vLy8wMC8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLS0tLS0tLCwsLCwsLCwsLCsqKiopKSoqKioqKioqKysqKioqKysqKisrKysrKysrLCsqKioqKiopKScnJiYmJiYmJCQkJCQkJCUkJCQjJCQkJSMiIiIjIiIiIiEhISMjJSgqN0tqeXBpbG1wcG1lXFFEOTErKy44QEtWYWpwcGxlXFFHOzM1WXt5f2xna25RQEVDPDc/REVFRkhHQj9Ob4WPlZiQiY+hr7m6u7iqp5J8kJOYop6fjXNNVVhYVldWU1JTU1JQUlJVVVVVV1BOSkhGRkVFQ0JCQUFBQUA+Pjw7OjYzLikoKyo1VF1bWFNRT1JbYUo7Pz9DQj87ODg3My8tLTlESUtMTlBPT1FPPzY1Mi41RFFXWV1kaWhra2ZnaVxPVzhMWUtHTlldXFpWU1FLREA8OjkxJiMjIyMkIiMkJCMjIyMiKTQ9Pz8/P0BBQEFBQEBAQEA/PC0jISAiIiIiIiIiIiEiIycnKSorKispKSsrLTEwMjQ3OTY2OT1ARUQ/Q0ZBS2ZnYF9cWlVOTU5OTUxKRkNBPz9BQkVISUpMTE5OUFJWV1paXWFhZW10e36AhIeJiomGhIODgoGAf36BgYKHi46Pj4uKiYiGgXx3cm9ubW1ubWpoZ2RlZmpscHd9gIOIi46MioeHipCTkZCQjo2OjY2NjYuIenV4fH16eXh4eHh3d3d3d3Z1dXh4eX6DipCUk5GPjpOWj4yLi4iIio6SlZaUk46NjY2Ni4onJygoKCgoKSkpKiorKysrKyssLCwsLCwsLi4uLS0tLS0tLS0uLi4uLi8vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi0tLi4uLSwsLCwsLCwsLCwrKioqKioqKioqKioqKisrKioqKioqKiorKysrKysrKywrKioqKioqKSgnJyYmJiYmJiUlJCQkJCQlJCQkIyQkJCQjIiIiIyIhISIhIiIjIycuN0VmeXJra25tbGtjWEs/NCwpKS0zOkdQW2ZtcXBrYlhNQTUxNl57eX5tZWluYD9DQz44PkVFRUZJSERIYXeJjJCUkoOLpLG5u7y6sq+pqqyunaCgpZd/XFhYWFZUVFRQUVFRUFBRU1VYWVlUUE1GRkVFRERFRENDQEBBQD4+PTs7OTUwLSssLjdVVVdXUlFQVFpVQjs7Pj49Ozg3NTEvLzI+SExNTU5QUE9RVUcoLzAuMjxFT1NWXmJiZWdpaGtpZF9RUVRPT1daW1hXVE9KREA/Ozk1LSUiIiQjIiMjJCQjIyMjIik2PkFAQUFBQUFCQUBAQEBAQD4vIyEgIiIiIiIiIiIhIiMjJCQoKSgpKiorKywvMTM1NjUzNjY4PT8+Q0NDPUlfZmZcWlRVT0xOTk1MSkZDQT9AQkNFSEpMTExPT1JVWVpfYWVnZ2xwd3t+gISHiYeHhoSDg4KBgH9+gYGEiI2Pj46MiomGg395dHBubm1tbm1qaGZlZmdqbXR5foKGiY6OjIqHiI6TkZGPjo2MjY2Li4uKgHV0enx7e3p4eHh4d3d3d3d2dnZ4eHl+hYySlJORj5CTkY2LjIqIiIuQlJWWlJKPjY2NjYuKKCgpKSoqKSkpKioqKioqKysrKy0tLS0tLS0tLS4uLi4uLi0tLy4uLi4uLjAvLy8vLi4uLy4uLi4uLi4uLi4uLi8vLy8vLy8uLy8vLy8vLy8tLi8uLi4uLi0sLCwsLCsrLCwsLCsrKysrKysrKioqKioqKioqKywsLCwrKyoqKisrKysrKiopKSgnJycmJiUlJCQlJSUlJSUlJSQkJCQkJCQkIyMjIyMjIyMiIiIjJCcrMT1aeHJqanFwcGhdVEg4LSglJiktNT9JVF5mbm9tZV1SRjsyMD5nd3Z/a2JlbHZLP0RAOjpFRERGR0ZMYHR/jYiGjpGEkaOxtba6u7a5u7q7uq6mnaKeimpaVlJSUVNTVFBQTk1NUlRSVFVVU1FOS0hGRURDRENDQ0JCQkFAQD49PT05ODQxLi4uQVdWUVBRUE9NVVY7NTs8PTo4NDMyMDE5R01OTU5OTk5OUVNTRz0pKC81O0NKTVZbX2JkZmdmY2FiVVZUS1BZW1tZVVFNRUE8Ozo2MCckJCQkJCQjIyIjIiIiIiMnMj5BQ0NCQD8/QEJBQUFBQD89MyUhICAiISEhISEhISEhISIiIiYpKSoqKysqKy8xMzI0NDY4Ozs6OT09QkdNUltmYmFcVlBUUU5OTUpGQkBAQkJDRklLTUxNTVFVWlxgZWtvcHBwdHd9gH+Dh4mJiIaEhIKBgYCAgYGEh4qNj4+MjIuHhH97d3Jvbm1tbWxramdmZmdpbHF3e4CChYqOjoqJiIySk5OSkI6Ojo6MiYeLiHl3eHt9fXp5eHh3d3d3d3d3d3d3d3h6gIePkpOSkY+Tk42LiIuKiImMkZOVlpOQj4+OjIuLiSgoKSkqKikpKioqKisrKyssLS0tLS4tLS0tLS0uLi4uLi4uLi8uLi4vLy4vLy8vLy4uLy0uLi4uLi4uLi4uLi4vLy8vLy8vLi4uLi4uLi4uLS4vLi4uLi4tLCwsLCwrKywsLCwrKysrKysrKyoqKioqKioqKissLCwsKysqKisrKysrKyoqKSkoJycnJiYlJSQkJSUlJSUlJSUkJCQkJCQkJCMjIyMjIyMjIiIiIiUoLThNcnhwbXF0cmlfU0Y1KSclJSYpMDlDTldia3BtaGBZT0AyLzBDbXh4gW1jY256cj1BPzo4QUNCRUFHX3aDgJCOh46Uk5mgpK+usLm8vLmzsLW0tampoY93VVRZZXN5eXl5dW1eTkxMTk5PUlJQTktIRkVERUNDQ0NCQkFAQEA/Pj09Ojk4NjMuLixAU1BPTk5LS01RUjo2OTo4NjUyMjAyPUtQT05OTk5OTlBVVVRUOTI5Ojs9QUZSV1pbX2JgYV9cX1lTTktPWFpZWFNQSj88OTc1MColJCQkJCQkIyMjIyMjIiIjJi87QEFDQkA/QEFBQUJCQUA/PDUpISEhISEhISEhISEhISEiIiIkJigqKigoKSosLzAxMjQ1NDc3NTU2OTk7QkpTYmxiWlJQT1NQTU1KRkNBQ0NDREhKTE1MTk9SVVthZmtydnd4eHh5fYCAhIeJiYeGhIKAgYGAgIGChIeKjY6NjIqHhIF7eXNvbW1tbW1sa2lmZ2dnaW1yeHyBhYiLjY2KiImQkpKQj4+Njo6Oi4eHjH95eXt8fHx6eXh4d3d3d3d3d3d3d3d4e4KHj5OUkpGRk5GMi4uKiIiLj5OVlZWSkI+PjoyLiogpKSkpKioqKioqKysrKyssLC0tLS0uLS4uLi4uLi4uLi4uLi4vLi8wLy8wMC8vLy8vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi0sLCwsLCwsKysrKysrKyoqKioqKysrKywsLCwsLCsrKisrKysrKyoqKioqKScmJiYmJSUkJCUlJSUlJSUlJCQkJCQkIyMjIyMjIyMjIyMiIyQnKzRHaXZuanF2dm5jVkY1JyQkJCUmKTE6RVBaZGxwa2ZdUkc6Li00VXN4eH9sY2Fod35VOkA3Nj9BQ0RBUXWGjIaSlZOWlpOXmpulpqy5vryzs7KzsaykqKaUgF5idH5+fXx7eHh1dGtgWVhXVVJST0xKR0RFRkZERERCQ0FAPz9APj08Ozo5ODc1NC4tLz9PTE1MSklHSVBMNjY5NjUzMTAvNUNNUlJOT01NTExNUFNXXFZGOzk8Oz1ASVBWV1paWllbWllVUExMU1haVlJOTEM5ODQwLCglJCQkJCQkJCQkJCMjIyIiIyQrOEBBQkNCQUFBQEBBQT4/Pzw3KiEiIiEhISEhIiIiIiIiIyMiIiQmKyopKiopKioqKi8yMjQ0MDEwLzU3PEBFSltmamFZVE9QUE5MS0dDQUJBRUZJS0xNTU1OUVVdYWlweHx9fXt6en5/goaGiIiHh4SDgYCBgICBg4aIi42OjIuJhoJ+eXRvbW1tbG1ta2ppaGdoaGpudHl+gYaKjY+MiomNkpGQj46LjY2Ni4iGiYh5eXl8fXt7enl4eHZ2d3d3d3d3dnZ2eX2Dh5CTk5GQkZOQjI2KioiIjZCUlZOVkZCPjYyNjImIKSkpKSoqKiorKysrKywsLC0uLi4uLi4uLi4uLi4uLi4uLi4uLi8wMC8vMDAvLy8vLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLy8uLi4uLi4uLi4uLi4uLi4uLi4tLCwsLCwsLCsrKysrKysqKioqKisrKyssLCwsLCwrKysrKysrKysqKioqKiknJiYmJiUlJCQlJSUlJSUlJSQkJCQkJCMjIyMjIyMjIyQjIiMlKDA9XnlzaW52dnFnWkw2KCQjJCQlJiszO0ZRW2VubmphWk1BMy0tOFx4d3N+cGFjaHSAdUA9OjU8QEFDTGaGj5CUlpaYmZKEjJGRmqCksra3tLGvrK2fmZaWlI1udHt6dnd2d3Rzc3N0cW9tamhkYl1ZVFJOTEVEREJBQkFAQUFAPz09PDs6OTg3NTQzMC0tQE1HR0ZGRkZLUUY2ODY1MzAvLzhJUVNTUU9NTUtLTExQUllXWEw7Njk8PUNKTVJUVlRUVFVWUU1NU1hZVlNPTElCODEvKyUjJCQkJCQkJSUkJCUjIiQiIiMjJjI9P0BBQUNDQT89QEJCQD8+OCwiIiIiISEhISIiIiIiIiMjIiIkJCspKissKigoKCswLy8wLSoqMTQwMzg3OT5PV2FXUVpZUVBNS0lGQ0BAQ0VFSExNS01NTE9UW2Nqc3p/gYKAfn5+f4GEhoiJhoaDg4GAgYCAg4aHiYqNjouLiIWCe3dybm1tbWxsbGtqaGhnaGhqb3V6fYGGio2Mi4mKj5KRj46NjY6Ni4iGhoyGenh6e317enp4d3d2dnZ2d3d3d3Z2dnl9g4iPk5GQkJOTkIyMjYmHh4ySlJSVk5GQj4+OjIuJiCkpKSkqKiorKysrLCwsLCwtLi4uLi4uLi8vLy8uLi4uLS0vLzAwMDAwMC8vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLy0tMDAvLy8vLy8vLy4uLi4vLy8uLi4uLi4uLSwtLS0tLCwrKyosKysrKywsLCwsLCwsLCwsLCwsKywsLCwsKysrKyoqKikqKSYmJiYlJSQkJCQkJCUlJCQkJCQkIyMjIyMjIyMjIyQkIyMlKSw2TnN3bGpydXFrX086KiQhIiIjJCcrMz1IUl5ka2plXVJIPTEsNUhrfX99gHNiY2h0gH9lNTk2OD9DQlt8kJORmZ6YlJyUh4qPkZiko6mrr7O0qaOdj5GQjIaPdGd0dXV0cnFyb29ubm5sbGlmYmBfX15cXFxYVVRRTUpIRUE9PT49PT08Ojk4NzY1MjEwLi48S0hFRkNCQkdSQTY4NzIxMTE9TFRXV1NRUE9LS0tLTVFSU05UU0U8PT9AQ0hPUlVUT05OTFBQUFBSUlBOS0lEPjYvLismJSQkJCQkJCQkJCQkJCQkIyMjIyQrOD5AQEBAQkE+Pj8+Pz08OzUrIiEhIiIhIiIiIiIiISEjIyMjJCQnKCgqKSkoKy4vLCspKikpKi0xNzw9Q0dOV1thb3RiVU9OTUtHREJAQUVISElLTU1NTUxPUlpia3Z8gIGDgoB+fH+BhYeIhoaEg4OBgICAgISHiIqMjYyLiIaDf3lzb21ra2tsa2traWdmZ2hpbXF2e3+BhoqNjYuIjZCSjo2Ni42NjImFhIqNgHx5eXt8e3t5eHh3dnZ1dXZ2dnZ3d3h6foSKjpKRj5CTko6Ojo6JiYqOk5WTlJKRj4+NjIuKiIcpKSkpKiorKiwsLCwsLC0tLS4uLi4uLzAvLy8vLy8vLy4uLy8wMDAwMDAvLy8vLy8uLi4uLy8vLy4uLi4uLi4uLy8tLS8vLy8vLy8vLy8uLi4uLy8vLi4uLi4uLi0sLS0sLCwsLCwsLCsrKyssLCwsLCwsLCwsLCwsLCwsLCwsLCsrKysqKiopKCcmJiYmJSUkJCQkJCQlJSQkJCQkJCMjJCQkJCQkJCQkJCMkKCsyRWt8b2twdHRuY1VCLSMiIiIiIyQnLTU9SFJdZmpqYlhNQjcwNUdpfH59dn13YmRmcICCfkg3NzY9QUhqipealpijpJuem5CLjI6YoqatrK6xraack4uIi4uEiIBrb29xcXBtbWtqa2ppaWhkYmVgX19aWVhYWFdUUVNSU1JSUEc/PT07Ojo5ODc3NjQyMi4uLj1EQkFDQkJESVQ+NjY0MDI0Qk9TVldTU1BPTEpKTExNUVNNTlRTTEI/QEJESU1OTU1KRERFR0hGRERDRUZDQDkxLCspJyYlJSQkJSUkJCQkJSUlJSUlJSUjJSw2PD8/P0A/Pz9APjw6ODMqIyIiISEiISIiIiIiIiIiIyMjIyQkJicnJyYqLDA5PDMoKCcmJykxPUNFTVBRVVZZX3CAeV5YTktMSUFAQkJDRkdJS01OTk5NTk9VXmdye4CBg4KAfn9/gYWHh4aFgoKDgYCAgoKGiYqLjYyLiIeDgHt3cm5sa2trbGtra2lnZmdoaW1xdnt/gYaMi4uKipGRkI2NjIyNjYuHg4aMhnx6eXp8fHx7eXh3dnZ2dXV2dnZ2d3d4en6Eio6Qj46RlZCNjo2MiImMkZOVk5SSkZCNjIuKiYeGKSkpKSsrLCwsLCwtLS0tLS4uLi4uLi8wLy8vLy8vLy8wMDAwMDAwMDAwLy8wMC8vLi4vLy8vLi4uLi4uLi4uLjAwLy8vLy8vLy8uLi4uLy8uLi4uLi4vLy8vLi4uLS0tLCwsLCwsLSsrKysrLCwsLCwsLCwtLSwsLC0sLCwsLCwrKysrKiopKSgnJycmJiUlJSUlJSQkJCQkJCQkJCQhIyQkJCQkJCQkIyQkJCguPGB/dGxxdnlxaFpONSQhISMjISMlJy41PEdRW2RpZWFWSkE5Nj9dgoh+enZ7e2hiYmx+hIN0MTk1PEBPdpGbnp+ioaSgnJ2ZjYyNk56kpaShoJ+emJGKe3R4dXuKaWtrbG1qa2lnZ2hmZmRhW1ZbXFpYWlhUUVBQT01NTU1OUVNSR0E8Ozk6ODk4ODY1NTEvMC8yRkdFRUJERUlSUDYzMzIxNkdRVFRVVVJST01LS0tLS01NUE9OT0xENjI6P0FFRkdIRkJDQ0NCP0NGSUpIRkE8MCsoJyknJycmJiUlJCUkJScnJiYmJCQlJSUmKjA3Oz4/PT9APzw4NC0mIyEiIyEiIiAiIiIiIiIiIiIiIiMmJiUmJycnKCcpNDovKCYlJycrMTtCRUpOUVNTV1hZan5dXm9QSEdDQEBAQkVGSUtMTE5OTU5NUVdjbXZ9gIGBfn19foKHiYmHhYSCgoGBgYOEiIqLjYyLiIeGgn13dHFsa2tra2tra2poZmZmZ2ltcXZ7f4KHi4uLi46RkI6OjY2OjIyJhIKKjIF8eXl8fH17enh3d3V1dXV1dXZ1dnV1eHp/hYmNj4+PkpSQjo6OjImKjpGUlJSVko+OjY2MiomIhykpKSkpKiwsLC0tLS0tLi4uLi4uLi4vMS8vLy8vLy8vMDAwMDAwMDAwMDAvMDAwLy4uLy8vLy4uLi4uLi4uLi4vLy8vLy8vLy8vLi4tLy8vLi4uLi4uLy8vLy4uLi0tLSwsLCwsLC0rKysrKywsLCwsLCwsLS0sLC0tLCwsLCwsKysrKyoqKSkoJycnJiYlJSUlJSUkJCQkJCQkJCQkJCQkJCQkJCQkJCUlJCYpM095f3Fwd316cGRUQy0jISIiIyMkJigrMzxHUlxiZmRgVUtEQ0xge4yGend2enxpYWBqfISDiForMjY+VXqQm52lpqWnopmgn5SNjo6XnZ+in52clIp/dWliYVxuh3ZfZ2doaGZlY2JkZWJfX19dWlhaWFZRT01JSUlLS0tMS0tNTk1HQz88Ojk5ODc1NTU0MTEwLjlIRUJFREZGSk9GMjI0MzdIUlVUVFNTU1FPTUtKS0xLS01NS0tKPzAlJywyOTtDR0ZEQEBBQEJGSklIRkNANi8qJycnJicnJycmJiYlJCUnKCcnJyYkJSUlJSUmKi0zODo9Pjs2MSokIiIlJCIjJCUhIiIiIiIiIiIjIyIjJCQlJSYmJygmJygmJygnJiYlJyoyNj5ER01OUFNaY26BYU5eXElDQT8/QEJGSElLTExOTk1OSk9TXWlxeX+BgX59fH2EhoeIhoWEgoKBgYGChYmKjIyLiYqHhIB8d3NubWxra2tra2tqaGZmZmZobHF2e3+Ch4uLjIyQkpGNjY2NjoyKh4OEjIh/e3Z4eXp6e3l3dnd1dXV1dXV1dXZ1dXl7gYaMjo6OjpSUjo2OjYuJi46RlJSVlJKPjo2Ni4mIh4YqKioqLC0sLCwtLi4uLi4uLi8vLy8vMDAvLzExLy8vLzAwMDAwMDAwMDAwMDAwMTEvLy8vLy8uMC8vLy8uLi8vLi4vLy8vLy8uLi4uLi4uLi8vLy8vLy8vLi4uLi4tLi4uLi4uLCwsLCwsLCwsLCwsLS0tLSwsLSwtLS4uLS0sLCwsKysqKikpKCgmJiYmJSUlJSUlJSUkJCUkJCQkJCUkJCQkJCQkJSUlJSUnKztmgXdxcnuBeWteTTooIyIhIiMiIyYoKjE6RU9aYGNjYFZPUVxtfYiMh3h4dnx9a2BeZHqEiJCOQysyPFR6jZefp6mqqaWen6GajouJiY+SmJqbi4V+d2xnaGlhcX2EXWJmaGZkYl9kYmJgXl1bWVZWVlRRT0tJR0dFRkhISUpKSktNT09IQzw5Nzc2NTY2NTMzMy8wQ0tHRkdHQ0ZJTT8xMTI6R1JUVVNTUlNRUE5NTExMS0tKSUdGRDosIyQkJSktNjw9Pjw+QUFCRklFQ0E6NCwoKCcqKysqKCkoJycmJiYmJiYnJicnJiQmJSQjIyMiJSsuMjMxLSciIiIjJCUiIiMjIyIiIiIiIyIkJSUmJikrJyYmJCYmJSUnJyYmJycoKCkpLC4xOD1FSlBXYGp2dVxZXGpeR0BBQT9BRkhJS0tLTE5NS0pMUFdlbXZ8fn5+fXp+hYiIh4aEg4GBgYGAg4iKi4+Pi4qLhoWBe3dzbmtra2tqamtqaGdnZ2dnaGxxdnx/hImKio2QkZGQjo+Ojo6MiYWEh4yEfnp5eHl7e3p4dnZ1dHVzdXV2dnZ1d3Z4fYCFi46OjJCUko+Ojo2KiY2Rk5SVlJOSj4yLi4uKiIeGKioqKiwtLCwsLC4uLi4vLy8vLy8vLzAwLy8vLy8vLy8wMDAwMDAwMDAwMDEwMDExMDAvLy8vLy8vLy8vLi4vLy4uLy8vLy8vLi4uLi4uLi4vLy8vLy8vLy4uLi4uLS4uLi4uLiwsLCwsLCwsLCwsLC0tLS0sLCwtLi4uLi0tLCwsLCsrKiopKCcnJiYmJiUlJSUlJSUlJCQkJCQkJCQhJCQkJCQkJCUlJSUmKSw/cYR0cnmAgnVmWUYxJCMiIiIjIiMlJyoxOURPWmBjZGFaXWdxfoaJioR5fn+Af2pgXF52h4+MjHo2LzVPd4uXoKepqainopycl4uHf3yCjJKRinl1dnNmYWdrcn11fmxWX2NiYFxcX11cW1xYVlNTU1FQTUtIRkRBQUJBQUNERERFR0lJSkdCPDg2NjU2NjY1MzMyMjdLT0dHR0dKR0hMPTAyOEZQVFRVU1JQT1BOTUxLS0tLSklGRUI4KiMjIyUmJyYpKy86PDxARERFRkI1LSorLS0tKisrKikqKSgoJycmJiYmJiYmJSUmJiUkJCQjIiMjIiQkIiIhIiIhIyMiIiIjIyMiIiIiIiMkJCksMTU5NzUuKScoKCUlJycmJicnKCgoKisqLC83RE1UWFtcW15oaVdQSkM/Pj9BQ0ZISUtLS0tMTUtKSk9WYml0en5+fn16f4OHh4eFhIOBgYGBgoeIi4yPjouKiYSEf3p2cGxpa2xsampqaWdmZmZnaWpucnd7f4aKioqLkI+Ojo6MjY6Ni4eEhYuIgX15eHh5e3t7eXZ2dXRzdHV1dnZ2dXV3eX6DiIuNjY6SlJCOjo6MiYmNkZOUlZSSkI6Mi4uLioiHhioqKysrLC0tKywuLi8vMDAwMDAwMTExMTExMTEwMDExMDAxMTAwMTExMTExMTExMTExMTEwMC8vLy8vLy4uLi8uLi8vLy8vLy8vLi4uLi8vLi4wMC8vLy8uLi4uLi0tLS0uLi0sLCwsLCwsLC0tLS0tLS4uLCwsLi4uLi4tLS0tLCwrKioqKSgoKCYmJiYmJiUlJSUlJSQkJSQkJCMjIyMkJCQkJCQkJCUlJSsuQG+BdXR5gIBwX1E9KyQjIyMiIyIjJSgsMDhDTlheYWNfX2t1fYWJi4uDfIOFgXxtX1tcdIV7bnZ+YjIxRHCFlJ2lqKioqKOcmZOEf393dX+EgXVnZWxxamBlWnBwXXF5VVNXWVlZWlpWV1ZUU1NOT1BMTEtJRkRBPz08Ozw/QEFAQ0VGRkVDQ0E8NzU2NDQ2NTU1NjYyO0tJQ0RDSEhISU49MTZGUFRVVFRVU1BPTk5NTUxLS0lJR0U/NSUjIyQkJSYnJygqLTI7QkZEQTsyLS0sLS0tLC0sKisqKCgoKCgoJiYlJyUlJSUlJSUkIyMjIyIiIiIiIiIiIyMiIiMiIyIiIyMjIiIjIyMjJSoxOEFHSUhEPDMqJCMlJSYmJiYnJykqKyspKywwO0VMSk9QVl1jXlVOSkVCQD9AQUNGSEhKS0tNTUtKSUpPVF1ocnl+f4B/fYKDhoeGhYWDgICBgIOHiYyOj46LioqFgn13c25qaWpqampqamhnZmZnZ2lscHR4fH+FiYqKjo+Pjo6NjY6NjoqFg4iMhH97eHd5ent6eXh2dnV0dHN0dXZ2dXV2d3p+hImMjo2PlJKQj46NioqLjZKTk5SUk4+OjIuLiomIiIcqKisrKywtLS4vLi4vLzAwMDAwMDExMTExMTExMDAxMTAwMTEwMDExMTExMTExMDAxMTExMDAvLy8vLy8uLi4vLi4vLy8vLy8vLy4uLi4wMDAwLy8uLi8vLi4uLi4tLS0tLi4tLCwsLCwsLCwtLS0tLS0uLi4uLi4uLi4uLS0tLSwsKyoqKikoKCgnJycmJiYlJSUlJSUkJCUkJCQjIyMjJCQkJCQkJCQlJScsLz5qgXVzeoB6ZVdJMyckIyMjIyMiIyQnKi02QUxWXWBiYV9ufIWIiIyNg3h4e319b11aW2dmX2l7g3xIKT5kfY6Wn6SmqKainZeTgHV8dnBycG9sZWFoaGRncGVOXkljhVlNUVNUVVNVVVNSUlBOSElLSkpHRUJAPTs5ODk5OTs9PD9CQ0NFRUJCQDw3NjQ0NTY2NjY2NDM+SUVEQ0RFREZIVEM2Qk9UVVRTUVFPT05OTUxLS0tJSUdFPzIkJSMkJCUmJycoKik0QEJCPzcuKy0uLywuLi0tLCwrKygnJycnJycmJigoKCclJSUlJCMjIyMiIiIiIiIiIiMjIiIiIyEjIiIjIyQkIyMiJSo0P0pTV1dWUkxBMyckIyUmJiYmKSksLy0sLjM2Ozw/SEtQXWxsZ19ZUU5HQz8/QEFDRkhISktLS0tKSUhJTFJdZ3B4fn+Af3+ChYaHhoWFgoKBgIKFiYuOjo6Oi4qIhIB6dnBrampoampqampoZ2ZmZ2hqbHB0eHyAhYiNkJGPjY2NjIyMj46HhISIiYF9end3eXp7enl4dnZ1dHRzdHV2dnR2d3h9gYWLjIyOkJaRjo6OjYqLjpCSk5SVko+OjYyLiomIh4aGKiorKyssLi4uLi0uLy8xMTAwMDAwMDAwMTExMTAwMTEwMDExMTExMTExMTAwMC8vMDAwMDAwMDAvLy8vLy8vLy4uLi4vLy8vLy8uLi4uLi4uLi4uLi4vLy4uLS0uLi4uLC0tLSwsLCwsLCwsLS0tLS0tLi4tLS4uLi4uLi0tLS0sLCsrKiopKCgoKCgoJyYmJiYmJiUkJSUkJCUkIyMjIyMjJCQlJSQkJSUnLTM+ZX91c3Z8cGFQPSskIyUkIyMjIyMjJiktNkBLVlxhZGViboCFiYqMh4F1d3h7fm9cWVpmY2dwen94fD0tVnOHk5qgpaelo5+aloZ6e3dxamloamVnamhxd3tyVEhRV35iSU9PTktQTVNSTkxKSERFSEVERENBPzw2NTQ0MzY2Nzc5PkJCQkFBQUBAPDk2MzQ2NTY1NDQ2OD1GRURERUVDRUxXR0BNU1VTU1FQT09PTU1NTEtLSkpIRj4xJCQjJCUlKCgnJygqKzQ5NjArLS4uLS0uLi0uLS4tKiooJCMmJyonJicoKSkqJyYmJCQkIyMiIiEjIyMjIyMiIiIjIyUkIiEiISEiIiIiIygyQExWYWloZ2FaUEIzKiQkJSUmJigqMDU6PUE9OExcbHZ1dnZzbmdhWlFNSERAP0FCREdJSUpKSktLSUlJSUpQW2dyen+DgoCBhIaHh4WEhIOAgoGFiIqLjI2NjIuLh4N+eHJuamppaWpqamppaGhnZmhqam1ydnp+g4eKj5OTj46NjYyNj46KhIOFioV/fXl2dnl6e3p4d3V1dHNycnR1dnZ2dnZ3foGIi4yNjZKYkY2NjoyKjI+RkpSUlJKQjo2MioiHhoSEgioqKysrLC4uLi4tLjAwMTEyMjIyMjIwMDExMTEwMDExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwLy8vLy8vLy8uLi4uLy8vLy8vLi4uLi4uLi4uLi4uLS0uLi0tLi4tLSwtLS0sLCwsLCwsLC0tLS0tLS4uLS0uLi4uLi4tLS0tLCwrKyoqKSgoKCgnJSUmJiYmJiYlJCUlJCQlJCMjIyMjIyQkJSUkJCUmKS82QWF+dXN1eGtaSjUmIiQlJCQkIyMjIyYpLTU/SVNcYWRnbnqBhIaIhn1rcHd2eHpyYF1eZGd1ent5fY54Lz5oeoqTmZ6joqGgm5CHgHp2cGdnZmhnZWdveHx4d29iXFdnXUNLSkZGSUpUVU1HRkRAP0JBP0A/QD46NjMzMTAwMzQ0NTk+QEA/Pz8+Pj4+ODQzNTU2NjY1NDY3QEhGRERGRUVIT1hLSFBVVVJRUE9PT01NTExMTEtLSUc/MyQkIyQlJScnJicoKignKicoLC8uLy8vLjAuLS8uLy0nJSMjJicqKCcnKCgoJicnJiUkJSQjIiIiIyMjIyMjIiIjIyk1MiUhISEhIiIiIiQsOERTX2t0eHRvaFxOPzAqJSUlJykuMC80PEhZW1B1gHdzdnZ1dHFtZl1UTEZCP0FBQ0VHSUlKSkpLS0lJSEhKUFtncnqAhISCg4OGiIeFhIOCgYKDhomKjIyNjIqJiYSAe3Zwa2lpaWlpaWppaWhoZ2dqa2tvc3h6gIWIjZKUkY+OjY2Ojo6MhoOEh4mDgH15dnZ4enp5eHd1dHNzcnJ0dXZ2dnZ3en6EioyNjY6VlJCOjo6MioyPkZGTlJORj4yMiomHhoSEhIIsKistLSwtLS4uLS4xMTAwMjIzMzIyMjIyMjIyMTExMTAwMTExMTExMjIwMDEyMjIxMTExMC8wMC8vLy8vLy8vLy8vLy8vLy8vLy8vLi4uLi4uLi4uLS0tLi4tLC0tLCwuLi4uLCwsLC0tLS0tLS0tLS0tLS0tLi4uLi4uLS0tLS0tKiopKSkoKCgnJygoJycmJiYmJSUlJSUlJSQkJCQkIyMkJCQkJCUmJysxOkJcfHVxcXFsVj8tJiQjJSQlJCMjIyQmKS4yO0VRWmJobXaAgoSDhHpfT21qaXBwc2RhYGZzfnh2eYWJiGEzW3KCio+Ynp+dnJiLhoaCcGdhYWVoZ2JeZm93cG92eHhvdm84REdCQUE/QUVFREFDPjs9PDs8PTo4NTMyMTEvLi8xMTE1OTw9Pj4+Pj09PTs4NTU2Nzc2ODg4OjxESEZHRUZGRkhNVE5IUVVTUVBPT05NTU1NTEtLSktGQTUmJSQlJSUmJyYnKSkoJiUkKCstLy8uLi4wMC8vMDEvJyIiIyUnLCooKCgnJycnJyclJSUlJCQjIyIiIiIiIiIjIyMmLSokIiEhISEhIiIlLz1LWml2foR/enJnXE0+MSknKSwwNDxKVE1ET09ffoF8dnZ1dXRxbWZeVk1GQj9EQUJER0lJSUpLSUlISEdHSE9ZZ3J8g4aGhYaGh4eHhYOCgYGEhIiJio2MjIqIhoWEfnh0bmpoaGlpaGhqamloZ2dmaWttcHR5fIGHjJGUlJGPj46Njo+PioOBhYmHgn57eHd2eHp5eHd2dHNzc3NzdHV1dXV2eXyChomMjI2QlZKQkJCNiomMkZCTk5KRj4yMi4mHhoeFg4OBLCorLS4uLS0uLi8wMTExMTIyMzMyMjIyMjIyMjExMTEwMDExMTExMTIyMTEzMzMzMTExMTAvMDAvLy8vLy8vLy8vLy8vLy8vLy8vLy4uLi4uLi4uLi0tLS4uLSwtLSwsLS0tLSwsLCwtLS0tLS0tLS0tLS0tLS4uLi4uLi0tLS0sLCoqKSkpKCgoJycnJycnJiYmJiUlJSUlJSUkJCQkJCMjJCQkJCQlJSguNDtGV3d1cXFvblM3JyUlIyUlJSQjIyMkJiktMzlDUFpjbXR7f4CBfHViPEdrcHBzcXdoZGNmc3x3doSJgYJ/UENldH+GjpaZmpiVhoSIhnBcYGFnaGNgXWNseX11a2x7fHyBTDlCQzw7OzxAPjw8PTs5OTg3Nzg2NDEvLy4vLSwtLy8vMjY5Ojs+Pj49PT09Ozg3Nzc3Nzk5Nzo8PURHRkRERkVFSExQTkhOUFBPTk1MTU1NTUxKS0pJR0M5JiQkJSUlJicnKCkpKCYlJCUrLi4vLi4yMi8wMzU1LycgICEjJywqKCgoKCgnJycnJiYmJiUlJCQiIiIiIiIjJCMjISIiIyIjISEhISIiJjA/TFlqe4eKiIF6cWZcTUE4NDM2QVNhbGtbXWJneX2CgHd0dHV1c25pYldORUJCQUJERkdJSUlKS0lJSEhHR0tSXWlzfoWHh4eHh4eHh4WDgoGAhYeJiYyNjIqJiIaDgXx2cWxqaGhpaWhoamppaGdnZ2lrbnF1en2EiI6UlZGQjo2MjY+QjoaCgoaKhYB9eXh2d3l6eXh3dnNzc3Nzc3R1dXV2d3l8goaKjY2OkpWSj4+PjouKjpCPkpGTkI6MjIqIh4aEg4SCgS0tLS4uLi4uLy8wMTExMjIyMjIyMjIyMTEyMTEyMjExMTIxMTIyMjIzMzMzMzMzMzMzMDAwMC8vLy8vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8tLS4tLCwsLCwsLCwsLC0tLS0tLS0tLS0tLS0tLS0tLS4uLi4tLS4vLi4uLi0tLCwrKSkpKSkpKCcnJiYnJycnJiYlJSUlJSUlJSUlJSUiJCQkJSUlJScrMDU8SVhteGtoa21ZMiQlJSQlJSUlJSUlJiYoKzI4QU1caHV8fnx7d3BcOyg/ZnlycXR6amRjYm10e4WFfXt6fHVJUm15f4KLjZOXlImDhIFtX1xgYV5hZGNndH+BfXBrdHh0d2otOT48ODY3Ojo6ODY3NTUzMjY2NTEwLy0sLCwoKi0sLC8xNDY3Ojw8PDs7PD05Nzc4OTk8REtBPjo/RUdHRURFRUZHSU9FQUtOS0xNTEtLS0tLS0pIR0dFPSsjJSUmJicnKSosKSgmJSQlLC4vLy8xMTE2ODg6ODAmICAgIictLiwqJikoKScnJycnJiUlJSYkJCQkJCMjIyMjIyMjIyMjIyIiISEiIiUuPUxdbX+JiomCfXVtaF5UUElGSFRiZmVrZWVsc3Z5eHx6dnV3dHJxa2NZUEhDQUFERUdISElJSkpKSkdHRkdMU15pdH+FiomIiYiIiIaEg4KBgoSHiIyLjYuIiYaFgn54cm5qaWhoaGhoaGhoaGdnZ2hqa3Bydnt+gYiQlJWRkY6Njo6QjoqDg4WIiIOAfXp3d3l6eXp2dnV0c3R0dHR0dHR0c3Z4fIOHjI6MjpSUkI6NjYuIi4+PjpCRkY6NjIqKh4eGhYOAgYEsLS4vLi4uLi8wMDExMjIyMjIyMjMzMjExMjExMjIxMTEyMTEyMjIyMzMzMzMzMjIwMDAwMDAvLy8vLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLCwsLSwsLCwsLCwsLCwtLS0tLS0tLS0tLS0tLS0tLS0uLi4uLS0uLy4uLi4tLS0tKykpKSkpKSgnJycmJycnJycmJiUlJSUlJSUlJSUlJSQkJCUmJSUpLTMzPUpZZ3JuZ2ZpZEAkJSUkJSUlJSUmJiUlKCouNkFOYXSBf3x5dW1hSjQuNll4c3J5e2xhYWdpcn+Gf3l3d3p6ZEtdcHh5gIOKjpKKgnZsaGRkZ2FZXGJpbnaBhXxybGxucXN2PjE0NzU0NTU1NjQzMjIyMTAyMzEvLi4sLCwsKCcpKSssLzAyMzg5Ojw8PDw8Ozo4OTw9P1liSEJAPkJJSUZGR0ZGSEdISkJDSEpLTEtKSkpKS0tKSEdHREA1JiUlJiYoKioqKyonJSUkJSwuLy8uMDQ4PT47PTszJx8fICIqMDEyLy0sKyspJycpKSYlJSUlJiQkJCQkJCMjIyMjIyMjIyMiIiEhIiInLjxLXm59iIuLh4J/eXVwa2ZgV1dYXWZnX1tTT11kUkprcW1ydnV1cW1kXFJKQ0JDREVHSUlJSUhISEhHR0ZHTFNdanaBiIuLiouKiIeGhIKCgYKFh4qLi4yIiIeHhIB6dHFta2loaGhoampqamhnZ2dpam1xdHl7foWNk5WUkY6NjI2OkI6HgoGFiIiCf3x5d3Z4enl3d3Z1dHNzc3Nzc3R0dHZ2en+FioyNjZCVkY+NjY2KiYuPj46Oj4+OjYuKioiHhoKBgIGDLi4uLi4uLi4wMDAxMTEyMjIyMzMzMzIyMjMzMzMzMjIzMzMzMzMzMzMzMzMzMzMzMjIxMTAwMDAvLy8vLy8vLy8vLy8vLi4uLi4uLi4uLi4uLi4tLCwsLCwsLCwsLC0tLCwtLS0tLS0tLS0tLS0tLS0tLi4uLi0tLi8vLy4uLS0sLCspKioqKiopKCgpKSgnKCgoJyYlJiYlJSUlJSUlJSUkJSUmJSUlKi8xNj1NWmZvbmhkY2ZWKyElJCQkJCUlJSYnKCgpLjZGWG+ChIB9eG9mVUU/NjlUdXBsfHxrY2JlaXaFhn91c3V2eXpiTGBwcHJ2fISDe3JqZ2loaG1sa21yeXh6foJ5bWFWS0tHTUsuMDMxMTExMTIzMTAuLi8vLS8vLS0tKyssLCckKSknKCwsMDM1ODg6Ojk6Ozo6Ojs6PT8/QkNDQkFERklMSUZIR0RGSUpIQD5GSEpMSUZHSUpLSkhGRUNAOSkkJCYkKCsrKysqKCUlJSYrLjAwLjE6PUBCQD06NCgeHx8lLTI0Nzg1Ly0uKiYmJSYnJyUlJSUkJCQjJSMlJCUlIyMiIiIiIyMiIiIjJSo0R1lqfYaLjIqHhoN/fnt6d21sZ1lbV1xmXkZARjU8YHZ8d3NzbnRvZ1xTSkRDQ0JFR0hJSUlJSUlJSEhFSE1UX214g4mMjYyMi4iGhoSCgoGEh4iLi4uKiIiGg4F9eXRvbGpoaGhpaWlpaGhoZ2dnaWtucnR4e4CKkpWVkpGPjY2Mj46Jg4GEhIiEfn56eHZ1d3h4d3Z1dXRzc3Nzc3NzdXV2eXuAhouNjI6UlJCOjo6LiYiLjo6Ojo+Pjo2LiYeGhoaEgoKDhC4uLi4uLi4uMDAwMTExMjIyMjMzMjIyMjIzMzMzMzIyMzMzMzMzMzMzMzMzMzMzMzQ0MTEwMDAwMDAvLy8vLy8vLy8vLy4uLi4uLi4uLi4uLi4tLCwsLCwsLCwsLCwsLCwsLS0tLS0tLS0tLS0tLS0tLS4uLi4tLS8uLy8vLy0tLCwrKSoqKioqKSgoKSkpKSgoKCcmJSYmJSUlJSUlJSUkJyspJyUmKCssLzU+TFpmb3FrZ2NmY0EiJCMlJCUlJSUlJikpKzNEVGyFiISBe3RqX1ZQSURGUmFiZn56bmNhaGt+iYd7c3N1dnd8eU9RZ2xqa291c3RrZ2prbG90fH2AhoeEhH95cV5NRDsxMjI0LS0tLjAwMTEuLy8vLCorKysrLSwsLCsrKysoJSYmJygqKy4xMzU3ODc1Njc3Nzk6Oj5CREZISkZGRkZISkxNS0pJSEtLSkdAQERISklEREdJSklIR0VCPzkrJCQlJigrLCwsKykmJSUlKi4wMC82PkBEQ0E/PjMoICEiJzA3PDw5OTg1Mi4oKCclJiYlJSUlJCQkIyIjJCUlJSUjIyMjIyQkJCQkIyQoMkdZanyHjI2MjIuIhIWDgoF7dW5dXGNpZVpQVk8/S2p9fnZ0aENgcWhhVU1GRUVFR0hISUpKSUlHR0ZGRUhNVGBueIOJjI2MjIuIhoSDgoKEhYiJi4uKiYaFhoOAfHdzbWtpaGhoaGhpaWhoaGdnZ2lrbnJ1eXuCjZSUkpGPjoyMj4+KhYGAg4iIg4B9enh2dXd4eHd2dXV0c3Nzc3Nzc3V1dnl8goeMjIuPlpOQjYyMioiJjY+Ojo6Rj42Li4mHhoaDgIKDhoctLS4uLy8vLS8wMTExMTIyMjIyMjIyMjIyMzMzMzMyMjMzMzMzMzQyMjIzMzMzMzMzMzIyMTExMTEwMDAvLi8vLy8vLy4uLS0uLi4uLi4uLi4uLSssLCwsLCwsLCwsLCwsLC0tLS0tLS0tLS0tLS0tLS0tLS4uLi4uLi4uLi4uLiwsLCsrKysrKioqKikpKSkoKCkoJyYlJSUlJSUmJiYnKjhDNycmJyYpLTA2P0xbZm90cGlnYmVaLyQjIyQmJCQmJygsMz1PY3iFi4uFgXdsZGBZV1JOT1hhZG57d25nZmhwh4yDeWtucnByd3tXQVdiZmFjZWd3bmFsb3N7g4iIhoqMjIl+a1dEODY0NDQ0NzEqKCkvLi0tLS0sLCopKSkqKioqKignJycnJSMkJiYnJyosLzEzNDU1MzMzMzM3ODg8QkZJSklKSkhJTExQUlFQT1FOS0hJSENBQkVGQkJDR0dISUhGQD85LCUlJScoKy0uLi0qKCUjIyktLi4xOkBFSUVCQj0xJB8jJSsyOj0/PTo4NjQyKyopJSQlJCMjIyUlIyIkJCUlJSUkJSYlJicnKCkpKCcpLDJFVmd5h46Nj4+Ni4mJiIWEgHxwZGtvamlbXWhbNUFkdoF8d3JiY3BqYVhORkVFR0lJSUpKSklJR0dEREZHS1VhbXiDiYyOjIyKiIaDgoGDhIeLi4yKiYiGhYWCgHx4cmxqaGhoaGdnaWloaGhnZ2lqbG9zdnp9ipKTlJOQj42MjY6NiICAgYSKhYJ+e3l4d3Z4eHd2dHR0c3JycnNzc3N1dXV5foOKjIyNjpSRjo2Oi4iHio+PjY6QkJCOi4qJhoaFg4ODhYeILS0uLi8vMC8xMTExMTEzMzMzMzMzMzMzMzQ0NDQ0MzMzMzMzMzMzNDMzMzMzMzMzMzMyMjIyMjExMDAwMDAvLy8vLy8uLi0tLi4uLi4uLi4sLCsrLCwsLCwsLCwsLCwsLCwrKy0tLS0tLS0tLS0tLS0tLS0uLi4uLi4uLi4uLi4rKysrKysrKysrKyspKSkpKCgpKCknJiYmJiYmJycnKC1GWkwwMCsnKS0yOEFOWmVucnNsaWNjZlEpIyMlJSQjKCguOUtgdIOJiYqKg3lqY2FhYFxYVlVZaHV2c3hyaGZpb4CGgXVubm5vcHd5WThLV1xeXVpbbnlqd3lyfYWHh4mKiomCb1c+OTQ0OD87Njk3LicoKiwtLSwsKyooJycnKCgnJyYnJiUlJSMkJCMkJiUnKSwuLzEwMjIyMjIyNDc4PkNJS0xMTE1PTk5RVFdYWFhWUk9LSklHQkFBPz0/QkNFRkdGREA8NSomJicoKSosLC4tKignJiUoLS4wMDxDRUlJRUI6KyEgIiUwNzs7Ozw7Ojc0MS4sKycjJSUjIyMkJCMiIiIhISEjIyQkJCUmJygpKSssLjE4RllqeoiOjo6Ojo6MjIuHhX95cmheT0c+NDAwMzE6QU1teXV2dnNva2NbUUlGRkhKSkpKSkpKSkhIRkZFR0tVYW13gomMjY2MioeEgoKBg4SHiouMiomHhYSCgIB8dnBraWhoaGhnZ2lpaGhoZ2dpamxvc3Z6gY2WkZKPjo2MjYyPi4aAgIGEiYOAfnt3dnV2eHh3dnR0dHNycnJyc3NzdXV3e36DioyNjpKUkI2NjYuIiIuNjY6PkJCPjoyLiYaDg4ODhYeHiS0tLy8vLzAwMTExMTExMzMzMzMzMzMzMzMzMzMzMzMzNDQ0NDMzMzM0NDMzMzMzMzMzMjI0NDEwMDAwMDAwMDAuLi4uLi4uLi4uLi4uLi4uLCwsLCwsLCwsLCwsLCwsLCwsKyssLC0tLS0tLS0tLS0tLS0tLi4uLi4uLy8uLi0tKysrKysrKiorKyoqKSkpKSgoKCkoKCgoJycoKCgoKCkrP1VQPDstKSouMjpFUFtkbW9ybGhkYmVnQyMiJSYkJSsuO09pfIeGiYmIgXhjWFheYWBfXVpXV2V7e296c2dnZm10eHl2cG9tb3J1elwzNktWVlhYUlxudHhyYmt+f396iIZ9aVBAOTg4NjU4ODk7PzUoJycnKiwqKSgoJyUlJSQmJSUlJSQkJCQkJCIhJCUkJigqLiwtLy8vMDExMTQ5OT9FR01OT09PUVRVVldZWV1aWVhVUk5KSUlHREI+PD1BQkFCQ0I+OC8qJycmJykqKissLCooKCglJysvMDNAQkdKSkhAMicfHyAmNTo8PT49OTMvLS0uLS0qKCYkJCMhISEjIiEhICAgISIkJCUoKSkqLi0sLjA0RVpwfn2EjI+OjYyNjo6Liod9dWpgV09FNy4oJiMmKjY6QE5ZaW90dG5mXlNMSEdJSUpKSkpKSUlJSEZGRUZMV2FseICIjIyNjIqGg4KBgYSGiIqLi4qHh4aFg4B/e3ZvbGppaGhoZ2doaGhoaGdoamtub3R3e4SSlJKRjo+Mi4yLj4mDgICBhYeEf318eHd0dnh3dnZ0c3NycnJycnJzc3R1eX2Bh4uNjI2UlJCNi4yKiIiMj4+Pj5GRj42KiomGhYOCg4WIh4guLi8vMDAwMDExMTExMTMzMzMzMzMzMzMzMzMzMzM1NTQ0NDQzMzMzNDQzMzMzMzMzMzMzNDQxMDAwMDAwMC4uLi4uLi4uLi4uLi4uLi4uLiwsLCwsLCwsLCwsLCwsLCwsLCsrLCwtLS0tLS0tLS0tLS0tLS4uLi4uLy8vLi4tLS0tKysrKyoqKysqKikpKSkoKCgoKCgoKCgoKSkpKSkqKjJJWEs6LSorLzY+R1JeZ2trZmxtY2BjaWY7IiQkJSksNUlogoWEhYaFfG9YSk5QWF5iYmBgXFpjfX57gnVqamhrbW91eHJtbm5ydXdeMS43S1FQUU1OWF5aUkZCaX17dXp2a1A7NTY6OTg3NzY4Ozw7LiYlJSYnJyUlJSQkJCQjJCMjJCMjIiIiIiIhISMjJCUmKSssLC0tLS0uMDE0Nzs+RkpLTlBRUVNWV1pbXFlbXVxaWVVTT05OS0lHREI+PkBAQUE/PDUvKicnJicoKCorKysqKCgoJycrLi40QkJHSUhGPy0jIB8gKTU7PT8+NzIuKykmJCgsLComJCMiIyIiISMiISEgISEjJCUnKikqLCwwNTs5RVNke394fImPjo2MjI2Ni4qGf3lza2ZaUkI5LigoKzA5REZMT05RXGtraWNXT0pJSUpMSkpKSklJSEdFRUVGTFdhbnmBiIyMjIuJhoOCgYWFh4qLjIuKh4aEg4OBf3p1bWpoaGdnZ2dnaGhoaGhnaGptb3J1eH6LlZKSj46Ni4uLi4uFgoCAgYWFgn99enh3dXZ4d3Z1dHNzcnJycnJyc3NzdXh9hImMjo2PlZOOjIuKioiIjI6OkZGRkY+Ni4qHhYSEhIWIiYmKLy8vLzAwMDAyMjIyMTEzMzMzMzMzMzMzMzMzMzQ0NDQ1NTU1MzMzMzQ0NDQ0NDQ0MzM0NDQzMjAxMTAwMDAwMC4uLi4uLi4uLi4tLS0tLS0tLS0tKysrKyssLCwrKywsKyssLCwsLCwsLCwsLCwtLS0tLS0uLi4uLi8vLy4uLS0rKywsLCwqKisrKiopKSoqKSkoKCkpJycpKyoqLCwrLC0wOUxUPC0tLzM6QkxVYGhqZ2Fga2hiYmNvYy8fJCgrLz5efoeEh4WBd11CNTxFTFJYXF9hZGJiZHOAiIh7bmtqaWpscnRwa2tsb3V1XzIsLjlIS0hOS0pMQkI/NDtkeHpwYk47NDU3OTs7Ojk2ODo7OzYoJSQkJSUlJCQjIyIiIiIiIiIiIiIiIiIiISEhIyQlJiYoKy0tLSwtLS8uO0E9QkVJTE9SU1RVVVVYXF5dXl5dXVxYVVNTVFJRUElGREA9Oz49PDk0LiopKSgoKCgoKisrKioqKignKSouNEFGSEhFQjcpICAiIyw2PT48OTQwLCooJyQkJygqKCQjIyMkJCIhIiIiISAhJCUnKCstLS8zNjxRaG5qcH9/e3+KjoqLjY2MioiGh4Z/eXRsZlxSRTczMjI0OT9HRURHSUtXWlldYVRJSEtNSUtMSUpJSUhGRURFRkxXYG54gIiMjIyKiIWCgoOFh4iJjIyKiYiGhYOEgX96c2xpZ2dnZ2dnZ2doaGhoaGlqbW9zeHiDj5SRj4+Ni4qKi4uIhYGAf4KHg4F/fXp5dnZ3eHd1dHRzc3Jxc3Nzc3JzdHd8f4eMjo6OkJaTjoyMiomJiY2QkJGRkY+NjIuIhoWDhISGiIuKii8vLy8wMDIyMjIxMTIyMzMzMzMzMzMzMzMzMzM0NDQ0NTU1NTUzMzM0NDQ0NDQ0NDMzNDQ0MzExMjEwMDAwMDAuLi4uLi4uLi4uLS0tLSwsLCwsLCsrKysrLCwsKyssLCsrLCwsLCwsLCwsLCwsLS0tLS0tLi4uLi4uLy8uLi0tKyssLCwsLCorKysqKSkqKikpKCgpKSoqKyotLi8vLy8xMTEvR0ExMTI4P0hQW2NpamVbUVptZ2JhZ3FUJCMpLDJIbISDg4F5aUkuKTI0O0RKUlhaXWFkZmh1goeGf3FpZ2ZobG1raWlrbG9xdl8sKSsuNEZIRUdGPjY1SUY1M1ZkXUg8NTU2ODk7Ozo6OTc5Ojs9LSUlIyQlJSQkIyMiIiIiIiIgICAgISEhISAgICAjJCYmJSYoKisqKiosLjQ5OzxDSE5PUlJSU1NUVVdcXV1eYmJgXllWWFlYWFdXVU1JQz05Nzg3MzAsKykpKSgoKCorKyoqKioqKCosLzVBRkZFQz0vIx8gISUtNjw/OzcxLispJiUjIyIjJCYjIiQpKSUlIyIjIyMiIyUnKSosMDIyLzE9XHV+enl8foCAiIqKi4yKiYeEgYKEg3x3cGljXFBGQTo3Njg6Pz9BREZJTktOSEpeZVNVWkhGSkpKSkpHRkVEREhPWGJveoKHi4yKiYaFgoKFh4iIi4yMiYiIh4eFhIF9dnJtaWdmZmZmZ2dnaGhoaGhqbHBydHd8iJKUj42NjImIiYmJh4OAgH+DhoKBfnx5d3V2d3h3dXR0c3N0dHJycnJyc3R3fICHjY+Oj5GTj42Ni4mJiYuOkJCRkZGRjoyKh4WEhIWHiYmKiogwMDExMjIzMzMzMjIyMjIyMzM0MzIzNDQ0NDQ0NDQ0NDU1NTU1NTMzNDQ0NDQ0NTU1NTQ0MzMyMjMyMjIwMDAwMC4uLi4uLi4tLSwuLi4tLSwsLCwrKysrKywrLCsrKywqLCwsLCwtLS0tLS0uLi0tLS0tLS4uLi4uLi4uLi4tLS0tLi4tLSwrLCwsKyoqKiopKSopKSsrLS4uMDAxMjExMDAxMTlCPTU3PkVOVF1mampiVUtIYWtlY2RucT4hKCo2UXmCfX5zVzkmKCssMTU8QUhQVFpfZGxyfomCenxzaGRiZ21xbWtpamtvb3BeKykrKio3RklFQz4zLDEzMSoxREM4NDMyNDc6Ojo7Ozs3ODo7PDYoKCcmJSYnJyUkIiIjIyIiISEhISEhICAgIB8fISAiIyQlKCoqKiwsLC4zNjc7PEJHTE9SUVFRU1ZWWlpcW2BhY2FeXF1eXVlcXldTTklEPDc1NjQwLi4tLCopKCkpKiorKysrLCssLTE3QERFREE3KyEiIiMoLjQ7Pjo0LyopJiUjIiIhIiQhJSYpKSkmJCMiJCUlJSYmKisrLC4vLS47S1hjdHh3c3x/e4SHioqKioeEgXl8goWDfHhyaWJcVk9COj46PUBDRUdITE5VUVZaSkhWU19pXE1JSkpLSUdFQ0RIUVhkb3mAiImLiIiFgoKDhIeIiouNjYmIiYmHhoSBe3ZxbWhnZmVlZWdnZ2hnaGhpbW1wcXR2f46SkY6Li4qJiIiKh4WCgH+AhIaCgX99e3l4eXl5dXRzc3JycnJycnFxc3N1dnuCio+RkJCUko6MioqIiImNkJGRkZGPjo6MioeGhoSIiYqKi4iHMDAxMTIyMzMzMzIyMjIyMjMzNDMyMzQ0NDQ0NDQ0NDQ1NTU1NTU0NDQ0NDQ0NDU1NTU0NDMzMzIzMzMzMjAwMDAwLi4uLi4uLS0tLS0tLCwsLCwsKysrKysrKywsKysrKiwsLCwsLS0tLS0tLCwtLS0tLS0uLi4uLi4tLS4uLS0uLi4uLS0sKywsLCsqKioqKSkrKystLS8wMTIyMzM0NDQ0NDQ0PkpDOUJMVF1ma2xqYFVFOEhpaWRiaXRhKiMrOlp8fXh3YzclJyopLCwwNTlARU1TW2ZyeISShXl4c2VgYGFpcG9mZ2ttbm9yXSwoKi0xMjlGQUA8NioqKSgnKCwvMDIzNTk4Ojo5Ojs7OTc3OTw7LSgqKywoKSkqKSgnJSMkJCIiIiIhISAgICAfHyAfIiMkJSYpKSkqLCwsLzM2ODk8QUVKT1JSUFBUVlhbXFxfXmBhYmBfX19cW1tbWldJTkg8NzQyMjAvLi0sKykpKSoqKysrKystLC0wO0BERUQ/NSYgISIkKS4zOTs5NTArJyYkIyIiIiIjIyQlKCoqKiQlIyMjJCYoJyorKysrKiszQVBXQj05PDpabHJ+hoqKiYmIg3x1c3uAhIN+eHBrZ19VTkRCQEBDRktLTUxMUU5IP0tLTE9YZ2xiSUlLSUhGRENFSVBcZXB5gIWHiYiHhIKChIWIiYqKi4uJiYmJh4aDgHp1cW1nZmZlZmZnZ2hmZ2lpaWxucXJ1doOPkI6LiomIh4SFhoSEgX9/goaFgoGAfnt5eHl5d3R0c3NycnFxcXBxcXNzdXh+hYyPkZCSlJKNi4uKiIiJjo+QkJGRj4yLioeGh4iHiYqLioiJhDAwMTIyMjMzMjIyMjMzMzMzMzQzMzQ0NDQ0NDQ1NTU1NTU1NTU1NTU1NTQ0NDQ0NDU1NjY0NDQ0NDIyMjEwMDAwMC8uLi4uLi0tLS0tLSwsLCwsLCsrKysrKywtKysrKywsKywsLC0tLCwsLCwsLS0tLS0tLi4uLi0tLS0tLS0tLS0tLS0tLCsrKysqKiorKyoqLCwvLzEyMzM0NTY2NTY1Njc3ODhETERIUllgZm1taVtQPjA1VnBpY2NqcUgkKThafnt4c1wuJiYpKCgrLDAzOT9GS1hpd3mDkIx/enVkXlxdY2xwaGdnaWxvclotJyotNTs5Ukg9OjkyKyUnJCYmKS0uMjdAPTk4OTo5OTg2Njg8PDctKy0vLCwsLi4uLCklIyQjIyIiIiAgIB8fHh4eHiIjIyQmJygpKSksLC8zNzMxMzk+QUhNUFFPUVNVVlhaXV1bW2FkY2JiX15fYWJcUlRSRzs3NTMzMjAtLi0rKyssLCsrLCwuLzAwMztAQ0NBOzEkISElJygtMjY6OTMtKSgmJSQiIiQlIyQlKCkpLC0oJSQkJCYnJygpKiopKCsvOEVUVT01KicvQlhrfYiKi4mIhH11a2hxeH+Bgn54c2xlYVlSS0NCRkZGSVBRU1dUTElQTk9SWWVWXV1NS0pKR0VERUpTXWZxeYGDhoeGhYSDg4WHiouLiomJiYmJiYeGgn54c29rZ2dlZGZmZ2dnaGdoaWttcHJ0dniIk46MioiJiIeEhYODhIF+f4OGg4GAgH98eHh6eHd0c3NzcnJxcXJxcXFzdHN5gIaMkJKRkpWRjIuKiIeKjI6Pjo+RkY+NjIiIh4iJiYuLioqJhoQyMjIyMjIzMzIyMjIzMzMzMzM0MzM0NDQ0NDQ0NTU1NTU1NTU1NTU1NjY1NTU1NTU1NTY2NTU1NTQ0MjIxMTExMDAvLi4uLi4tLS0tLS0sLCwsLCwsKysrKyssLSsrKyssLCwtLCwtLSwsLCwsLC0tLS0tLS4uLi4tLS0tLS0tLS0tLS0tLSwrKysqKiwsKyssLS8wMzM2NzY2ODg5OTg4ODo7Ozs7PkpVUlRcY2pybWNXSjguLD9mbWViZWxmOyQ1UXd8dnFeNiYnKSknKCkqLjM4PkdXbHl1fIaMg3p2aF5cW15jaGdnZWdtcHJaKycqLTU8Q2NbQjc5MywsKCUoKCkqLC41PDs1NTc4ODc4NzY1Nzc6MisrLSwrKywtLi8sKikoJiYkIiEgHx8gIB4eHh4iIyMkJicoJygoKCktMTEwLzA1Oj5BR05SVFBSU1NVVVdYWFtcXWFfYF9fW1tZWVtWU05HQDY3NDIxMC0tLSsrLCwsLC0tLjEzMzM7PkFBPzkvJCEiKCssLzE5PEVEPjMrJyYkJiYjJCMmKSkoKi4uLSwpJSQlJyooKCgoKCgrMjY0PDEqJycqNUNabn6JiouKh4N8cWplaXF4f4KCfXhzb2tlWVJMSklPT1FVWVxcVlFXUktOVFdaVUlQWEtERUVFREZOVF1ncnh/goWFhIODhYWGiYqLi4mIiImJiYeHhoF9eHNva2ZmZWRmZmdnZ2hpaWpsbnBydXZ9jpOOi4iHh4aGhoaFhISAf4CFhYOAf39+fHl4enV3dHJzc3JycXFxcXFxcnN0e4GIjZGQkJOTjYuLioiHiY2QkZCRkZGPi4uJiIiKioqLjIuJiIaCMzMzMzMzMzMxMzQ0MzMzMzIyNDQ0NTU1NDQzMzQ1NTU1NTU1NTU2Njc3NTU1NTU1NTU2NjY2NTU0NDMyMjIxMTExLy4uLi0tLS0sLCwsLS0tLSwsLCwsLCsrKysrKysrLCwtLSwsLS0tLS0tLS0tLS0tLS0uLi4uLS0tLS4uLS0uLi4uLS0sKywsLCwtLS0uMTIyMjU1OTs6Ojs7Ozw7Ozw8PT09QENGT1ZaXGZudm5hU0Y1LiwzTXBpZmNlbV0vKkRqe3VwZUEmJScpJyYpKSovNDhBWnJ5b3OCiH96dm5hXVteZWZmZmNmamxrWi0lJiwxN0pnW044Ly8sKysoKCorKyosLjEzMjI0NTc3Njg1NTk2NTgyKikrLCwrKywsKywrKSgnJyYkIB4eHh4eHh4eICIiIyQmJycnJycnKCgqKCksLzI4PkFLUVFSVFNSU1NTVFRSVVhaXFlbXl1dZGNgWlJRUU1JODg3MjExLzAtLS0tLS0tLy8zNDU0OD0+Pjw2KyMjJCYpLzE5TWBscGtfUkEzKyomIiIiJi02NDY4ODgzMC0sKisrKikpKSkmJSorJyUlJycnKDJDXHB/i4uMi4eEfHBjXGBocnmAhIJ9enRwa2hiYmNhYF9iX15dW2JtaFlbXl1ZV1BAOE9WZVpHRkZHTFVgaXN6f4CDhISCg4SEhomKiouJh4eIiIiIh4N/fXdybmpnZmVkZmZmZ2hoaWlqbW9yc3R5g5CQjIiHhoeGhoaGhYSDf3+AhISBgYB+fXx6eXp2dnNxcnJycnJxcHBxcXJzdXuEiY6Qj5CUkY2MjIuIh4iOkI+PkJGQjoyKiIeJiYuMjIuKh4aDgTMzMzMzMzMzMzQ0NDMzMzMyMjQ0NDU1NTQ0NDQ1NjU1NTU1NTU1NjY3NzY1NTU1NTU1NjY2NjU1NDQzMjIyMTExMS8uLi4tLS0tLS0sLC0tLS0sLCwsLCwrKysrKysrKywsLS0sLC0tLS0tLS0tLS0tLS0tLi4uLi0tLS0uLi0tLi4uLi0tLCssLCwsLS4uLzI0NzU4Oz4/PT4+PkBAQEFBQUJCQ0RGSkxTVllaanZuX09ENS8sLTladGllZGpsWi4yWXd2cGlPKicpJygmKSopKy81RGB3c2pufoN6dG9xZl5cXGBiZmZjZ21sbVwuJiYrKzBNZ1lSUTkqKisrLCwtLCwtLi0tLS8vMTQ1ODc1NTY4NzVAUCsqLSwsKysrKisrKywqKCcmJCIfHh4eHh4eHh4dHR4fIiIiIyMkJCUlJycoKCovOTg8RkxSU1RQVFhVVFFPUU9RU1VWV15hYl9iZmNdVVRSUU06NTs5NDAwLi4uLi0tLzAyNTY4NDQ4OTs2MCcjIyUlKzZGW3OAhIWGg3ptYFRCLiUkLDlBRkdGRUFDQjw0NDQyMjIxMDAwLy0qJyQkJCQkJig0SF91hIuMjIuKg3txYVdZYGpzeYKCg4B8d3FqZ2hkZGRhYGFma2xsY1tXWFdgZWZhYVtMVWtcSkVGS09YYmlzenyAgoSEhIWGhoiJiYmJiYeHiIeGhISBfXt3cm5qZmVlZGZmZmZmZmlpam1vcnN1fIiTkYuIh4aFhYWFhIOEg4CAgYWEgYGAf358enl4dnZzcXJycnJycXBwcXFyc3Z9houPkJCQlZCNi4yKh4aKkJCPkJGRkI6Kh4eHiouKi4yJiYeGhIIyMjIyMjIzMzQ0NDY1NTQ0MzM0NDQ0NDQ1NTU1NTU0NDY2NjY2NjY2NTU2NjY2NjY2NjY2NzY2NTQ0NDQyMTExMTEwLy4uLS0tLSwsLCwtLS0tLCwrKywsKywsLC0sKywtLS0tLCwrLC4uLS0tLS0tLS0uLi4uLS0tLS0tLi4uLi8vLi0tLCorLCwtLS8wMTI1Nzg5PD4/QUJBQ0RDRENERERFRUVHSEtRWV9eXGNwa1pMPzMvLi0wQWlwbGRmbXNZLUdsd3VtWTUmKCknKSkqLC0xO1NxeGxqcnx8dG9tcW1gXVtfYWNmZ2lqbG1fLiUqLC4xUGVdV1VWOisnKCgoKCkqLS4vLSwsLS4wNDQ1MzE0NDMzS3hSIS8vLi0tLSwrKyorKyooJyYlIh8gICEfHx4eHR0eHh4fHyAhISMkJCMiJiYmKCwzNz1FSk9TV1NTUFJPUU5RT1BSVFJaYGVmZ2hkZFpOPlFOWUAwOz03MjIwMDAwMTAwMTY4ODYyNDUyKiYjJSYoNEpecIKJi4uMjY6Oi4R6a1QxKTpFTUlBP0VGRkVBOzo4Ojo6PDw6ODYzLCYhICIiIiUnN05kd4iMi4uLi4Z9bmNVU1lja3R7gIaFg4B6enl4eHdtbG5tdXl1cGtscW9zcmlramtub11OVE9HQ01VWmJpcnh7foCAgoWGh4eJioqIh4iGhoeHhIOCf315dXBuamdnZmZmZWdnZmdpamttcHJ2dn+PkY6KiIeGhoeHhoODhYKAgISHg4GBgIB+fHp5eHZ2c3FxcXFxcnJxcXBwcXJ4gIeNj5GQlJKOjIuLiIiIi5GQkJKSkI6KhoiIiouKjIyLh4aEhIODMjIyMjMzMzM0NDQ2NTU0NDQ0NDQ0NDQ0NTU1NTU1NDQ1NTU1NjY2NjU1NjY2NjY2NjY2NjY2NjU0MzQ0MzIyMjExMC8uLi0tLS0sLCwsLS0tLSwsKyssLCssLCwtLCssLS0tLS0sLC0uLi0tLS0tLS0tLi4uLi0tLS0tLS4uLi4vLy4uLy4sLS4uLy8xMTM2ODk8Pj9BQkRFRkdHR0dHR0hISUlJS0pOVV1kZ2dhZGdbTD8yLy4tMDRUcGtpZGhydUo8YXp3cGM9JScmJygpKistMEFgeHZrbHh+eHNtbG92ZF1cW2FjZWZmaWtsXS8mKiwtM1NnW1lbWE45KicmJicpKC0wMC8uKystMDEyMzExNjk5SWWAhzYmLjAwLzExLi4tLCsrKCcmJSQkJSUiISIeHx4dHh4eHh4eICEgISEgISMiIicpLS83P0RGSU5RTE5QUlBNSkxOUVJSU1ddZWZmaGdkWlVWS0laTjY3PTo2MjExMTExMTI3ODg2NDIzMCglJScsQ2F4gomOjouJi4+Qjo+OjYV3TzA6Qk1CPjxATEpJRD85Njc6Ozw8OTk5OC0kIB8hJCQkKj9TaX2JjoqKjIyKgXRkU0tQWmVvdnyEhoaFg4CAe3p3dXFzeHp5eHR1ZmFka2pwcW9uZ19UV2diZlRMVFxlanN2en1/gIKGh4iIiYqIh4eHhYaGhYSBgX58eHRvbWlmZWVlZmVnZ2ZnaWpsbnFxdHeEkpGQjIiHhoeIh4aEhIWBgIKGiIGBgIGAfnx6enl2dHNxcXFxcXFxb29wcHFyeYCJjo+PkpWSjo2LjImIiIyRkI+RkZCNioiIiYqLi4uLioaEg4ODgzMzMzM0NDQ0NDQ0NTQ0NTU1NTQ0NDQ1NTU1NTU1NTU1NDQ0NTY2NjY0NTU2Nzc2NjU2NjY2NjY2NTQ0NDMzMjIxMTAvLi4tLS0tLS0tLS0tLS0sLCwsLCwsLCwsLCwsLC0tLS0tLSwsLS0sLC0tLS0tLS0tLS0tLS0tLS0uLi4uLy8vLzAxMC4uLjAxMzU1OTo7P0FDRERFR0lJSkpMS0tMTExLTE5PU1lgZ21wbWRcVUs/NjIvLy8vO19waGVkanRrQFV3eXNpRignJykpKCkqLTNGaXtya258enFta2RhdmtcXVxgY2RjY2hqal0wJyorLTNYaFpZWVZSSj4sJiYnJycrMjMvLi4sLC0uLi8yND5GUGF4ipR3HysxMzIzNDMyMS8tKygoJSMiIyMjIyIgHyAfHh4dHB0dHh4fHyAgISEgISMkJiktMzpAREVGSEhHSkxOT05OTU1QT1FVXGBmZWlqZ2RbUk1KWmVYRj88OjczMjAxMTIzNjY4NzYzMzIrJycpQWmBiY6RkpGQjpCRkYyMjY+ShmxCP0ZMRURNSVRZVU9NSUI9PT5BQT4+PzwyKCQjJSUmJy5CWG2BjY2Mi4uLiYN5ZU5CSFJfaXB4gIaIiIWFgH55dnV0dXF0d3drZmNdWmBeYmZiW2FcWj1BUWRdXltfZW1ydnp6fH+ChYaHiYqJiIeFhYSEgoKBf399enZzbmxpZWVlZWZmZmZmZ2lqbm9zc3R7jpSUkIyKiIiJiYiHhYSFgICCh4eCgoGBf358eXh5dXNycHFxcXBwcG9vcHBwdXuCiY+Qj5GUkY2NjIiGh4iMkZCQkZGPi4iJiYqLjIyMiYiFhIKChIYzMzMzNDQ0NDQ0NTQ0NDU1NTU0NDQ0NTU1NTU1NTU1NTQ0NDU2NjY2NDU1Njc3NjY1NjY2NjY2NjU0NDQzMzIyMTEvLy4uLS0tLS0tLS0tLS0tLCwsLCwsLCwsLCwsLCwtLS0tLS0sLC0tLCwtLS0tLi4tLS0tLS0tLS0tLi4uLi4uMDMzNTQwMDAyMzM3ODw+P0NFRkVISk1OTk5PUFBPUFBQT1FSUlVaYWhub3NwYlJDPjc1NDMvLzFDanBmZWVseV5OdHx2b1ArJigqKigoKi0ySm15b2xygXhubGdiZG9wYmBeXmFjYWJlaWhcMCcrLDA2X2VbXV1bUE9MQC4oJyYnKC4yLy0sLCorLCwtN0JOWWl4hIyWmFseLTQ1NjYzMjEvLSsqKSgmIyIiIiEgHh0eHRwcHBwdHR4eHh4fHyAgICEjJCQmKC0yNjk+QUJERUVJTktPUFBPUE1PU1ZcbF9hb2xqY1tRTFllX1VPSUE5ODg1MjIxMjU2Nzc5ODY2MiwoOWKCh4yQk5eXlJOVlpKPi4qNko57UjxGSUpKS05TVlhYXGFhXlVVUU9OTUdBNCYjIyUmKCguQVdtgY+QjIuLi4iBdWRJOT1KV2Brdn2Eh4mJiIaCfX5+dGphZGFeYGhdYVlVV2FmYVdaYYV/QUNXX1tgZGlvc3Z4eXx/g4WIiIqJh4aEg4OEgoF/f39+fHl1cm1raGVlZWVmZmVlZmdpam5vc3N0fJCUlJGNiYiIiYmIhoWEg4CAgoeHgYGBgX9+fHl5d3VzcnBwcHFxcHBvb3BwcXZ8hIuPj4+TlJCNjIuJh4eJjJCPj5CPjYyIiYqKi4qJiYiHhYSEhIWJMzM0NDQ0NDQ1NTQ0NDQ0NDU1NDQ0NDQ0NTU0NDQ0NTU1NTU1NjY2NjY2Nzc2NjY2NjY2Njc2NjQ1NTQ0MzMzMzExMDAuLi0tLS0sLC0tLSwtLS0tLCwsLCwsLCwsLCwsLCwtLS4uLCwsLSwsLS0tLS4uLi4uLi0tLS0tLS4uLy8uLjAxNDU3NzY2Nzc5OT5AQUJGR0tNTU9PUVFTVVVUVFRUU1NTU1VWXGNpcXFxb2VbUEM8ODU0MjEwNVBxaWVmZnJ1XXGAeXNZMCYmKSopKSwuNVJxdm1tdX5xZWdnaWlpdGhfXlxfYGBjZGdoWjAmLC0xOmVlXmBeW09NTlFELSkoJyUnLy8rKSsqKisvOEdXYm57hoqIlpuTNiQvMzQ0NDQwMC0tLi0sKSYkISEfHh0dHR0cHB0dHR0dHR0dHR4eICAhIiIiIyUpLS4xNjo+QEJDRU1TUlFOTUlITVFVW2Vqb3BsbWpgU05LYGNVUFBOST84NzQzMzM0NDc4Ojw8PDk0OVp/i4qNkJKXlpOVmpqXkoyKioyRhV4+SUlKSExNUlRaXl9iY2RdWl5dWlhURTAlIyMlJSYmLUFTaX2Mjo2MioqEfHBiRS8xPkpYZWx3gYeLjYyJh4aFgoB4amFaWV5cV1dXXF5eX2plWGmDiH1MWmFeWllmb3Jzdnp8f4KFh4mJh4SFhYOCg4F+fn5+fXp4dHFra2dlZGVlZWRlZWdoaWxucHNzc4KTk5OQjYuHh4eIhoWEg4CAgYOJhoGBgICBfnx6eHZ1cXFwcHBvb29vb29ub3B3fYWNj5CPlpOQjIyLiYiIi4+Pj4+RjoyIiImKioqJiYeHhoWEhISGjTQ0NDQ0NDQ0NTU0NDQ0NDQ1NTU1NDQ0NDQ0NDQ0NDU1NTU1NTY2NjY2Njc3Nzc2NjY2NjY3NjM0NTU0NDMzMzMxMTAwLy4tLS0tLCwtLS0sLS0tLSwsLCwtLSwsLCwsLC0tLS0uLiwsLCwsLC4uLS0uLi4uLi4tLS0tLS0tLS8vMTM0NDY4Ozw8PDw8Ozs9QERESEpMTk9RUlNVV1hZWFlYWFhYWFhaW2Bma3BzcW9lWlFQS0E4NDMzMjA4XnFnZGhudnV4g4B4YTMoKigqKissLjxaeHNtbHN+dmppaWlpanBtYV1cXmNhYmZoZlkwKy4zND9mZF5dXlpNSlBUU0MsJyYkJCYqLiotMzE3QUtXaHB8gouNh5SanXgdKC8yNDQzMTAvLC0tKyspJSMhHx4eHR0dHBwcHBwcHBwcHB0eHx4fICAiISMmKCosLC0yNzk8QEJHTVBRSUJIS05TWV9fZWpnbG5pXFRWTVJkWFNPUFBNSEE4MC8xMzY2NjY2Njw4PVl6iouLjJGRk5ORkJWVl5KNiIiNkIlsRkZJSUxNT1FTVllcXl9fXFxbXFtYUUIsJCIjIyQkJik3TWN4houLi4mIgnluWD0sKS9ATFlldH6Ei46NjIuKh4KAeXZ0ZGVmZVpaXmpqZ19MSE5rhYiOdFNQTFFZZ25zdXV3fICChIaIiIaFhIWEgIGAfnx8fX17eHRxa2llZWRkZGRkZmZmZ2lsbnBxdHWHlZSRjouJh4eGhoWFhISCf4CCh4WBgYCAf356eXd0c3FxcG9vb29vb29vbm5yeIGKkJCQkZaTjo2NjIiHh4uOjo2NjoyKh4iJioqKiYmHhYSEhIWFh440NDQ0NDQ0NDU1NDQ0NDQ0NDQzNDQ0NDQ0NDU1NDQ1NTU1NTU2NjY2NjY3Nzc3Nzc3Nzc3OEFDOzY2NDQ0NDMyMzEwMDAvLi4uLiwsLS0tLC0tLS0tLS0tLS0tLSwsLS0tLS4uLS0tLS0tLS0uLi4uLi4tLS0tLS0uLi4uLS0vLzEzNTU4Oz1BQUJCQD09QENGSEtOUFJUVVhZW1tbXF1cXFpbW1xcXl9iaG5zdnRxZ11UTFFVUEI1MjExLz5lbmhmaHF5foF/eWk+JScqKCkpKjBCZHlvbGtxgHVraGdpaWdmbGNfXV5iYmRnZmdWMzExMTRHZmNdX19ZRkZOU1RSQysmJCMjJzY9Njk/RU9YYGp4gYWKjY+TlpuZVR0qLC4xMC8uLi4tLCsrKickIh8eHBwcHBwcHBwcHBwcHBwbHB0eHR0eHyIiJScqKysrLC8zNzpASktRUU5KT0xOUFNXXl5eYWNhYVpWWVNVY15RT05OTkxIRT43Mi4rLy8wMjM0NU9zh4qMioqPkZCPgHBzgI6SjIeHipCLckhBSElKTE5RU1NTVldZV1dcXl5cWFVFLCEhICIkJSQnNEpid4SNioqJhn51aVIzKDU2PkRPXm98gomNjoyMioWCgHp0bmVaV1ZYXmRqZGVkUkxbe4eJjpCNfW9mW1ZhbG9ud32BhIaHh4aGhYSDgYKAf3t8e3t7eXh0b2toZWRkY2NkZGVlZWdobG9xcnR5jZaUkY+KiYmJh4WEg4SDgX+AgoiEgoKAgH98eXZ2dXNxcHFwcG9vbm5ubmxvdHuEi5CRj5OWko6Mi4mIhoeMjo2NjYyLh4aIiImKiYiIhoaGhIWGhYiQNDQ0NDQ0NDQ1NTQ0NDQ0NDQ0MzQ0NDQ0NDQ0NDQ0NTU1NTU1NjY2NjY2Nzc3Nzc3Nzc3NzhEV045NjU0NDQzMjMxMDAwMC4uLi4tLC0tLS0tLS0tLS0tLS0tLi4tLS0tLS0uLi0tLS0tLS0tLi4uLi4uLS0tLS0tLi4uLi0tLy8yMzU3OTs/RERFRkVCQUNFSUtOUVNUVlhbXV5fYGBgYF9gYGBgYGJkZ2twc3Z0cmtgV01IREhNS0E0MTAxR2trZGNocH2FgHpwVjAoKigrLTE3Sml1bWtob3pvamhoaWllY2VoYWBfXmJkZWVmVTMxMTEyUGdhX2NgV0VGS1BRUlA/KSMjIyUxRE5EQ01TWmJpeX+EiImQjZGXoJY7Hy8uMDAvLy4vLi0rKyonJCIhHhwcHBwcHBwcHBwcHBwcGxwdHh0dHR4gISMlJiYqLCwtLzM3P0RFS01OS0lKTU9RU1daXl5hYGJeWVVTVWNdUVBOTk5MSEVEQz44MzAuLCsvL0Rpg4SEiIqMjY6Id1U9QVl4j42GhYqMjHVQREhJSUlMTU5PUlNVUlJUV1lYVlJQQy4hISAiJCUkJjJFXXKCioqJhoN9c2ZSLyY3Oz9BTWFueX+FiY2MjIuGgoF5c2tjWVNRUEtPVlheX15fdomNjpGVmZybn5+XfVdVW1RVW2BjcH6Bg4SDg4B/fnx7enp7fHl3c25qZ2RkZGNjZGRlZWVnaW1wc3R1fpKXlJKOjImKioqGg4OEg4F/gYOJg4GBgYB/fHl4dnRycXFwb29vb25ubm5ucHV8hYyRkpCUlZCOjIuJiIaHjI2MjIuLiYiHiIiJiomIiIeGhoaGhoWIkDQ0NDQzNDU1NDQ0NDQ0NDQ0NDQ0NTU1NTQ0MzM0NDU1NjY1NTY2Nzc2Njc3Nzc2NjY2NjY3OkdOPDU1NTQ0NDMzMS8vMDAuLi4tLS0uLi0uLi4sLC0tLi4tLS0tLS0uLi0tLS4uLi4uLi4uLi4uLS0tLS0tLS0tLS0tLi4uLi8vMTQ2OTs+QkhKTU1MSUdHSkxOUFNXWVteX2JiY2RkZGRjY2RkZWVmZmpucXV2d3JsY1pRSkNCQkZJSUQ6MTBQb2ZjYmZyfoR+eWtXQzUzNjpCSllvcWpnZW51bWtpampoZWVjbWRhYF9iZGRkZVMwLCosMltpZGFnaFdJS01PT09PTDkmJCUoMEFWWEtIUlhhZ3J7gYeJh4yQlJqehCUoLjMyMC8vLispKioqKCYjIB8dHRwcHBwcHBwcHBwcHBsbHR0dHRweHiEiIiQmJyotLzI0OkFER1BUWVlaW11eZW12dXN0cGtmYF9aUFdmYFNQT09NS0lGREJCQz06NDIxKzJcfoKDg4WHiomAbUsqKCk9Y4OOh4SHjI12UEFJSktLS01PT05OTktLUFNTT05NS0MuISEiIiQlJSgySF1yg4mHhoOAe29iTS0pKy82P01hbHV8goWIjIqJiIV/eXNrZllVUVBSXV9dXGJnb3uNkpWboJ+ipaScf1dMTlNRSkdAO0FMVmx+goOBf356eXl6e3p5dnNtaGVkZGRkZGRkZWVlZ2ptcXN0dYaWlZSRjYyLi4uLh4KCg4KBgIGGiYKAgIKAgH14d3VzcG9wcHBwbm5ubm1ub3B1foeNkZGQlZSPjoyJiYaGiIyOiouMi4mHh4eIiIiHhoWFhoeHhYWEipE0NDQ0MzQ1NTQ0NDQ0NDQ0NDQ0NDU1NTU0NDQ0NDQ1NTU1NTU2Njc3NjY3Nzc3NjY2NjY2NjY1NzozNTU0NDQzMzEwMDAwLi4uLi0tLi4tLi4tLi4tLi8vLS0tLS0tLi4tLS0uLi4uLi4uLi4uLi0tLS0tLS0tLS0tLS4uLi4vLzM1Nzo8QERJTU9SUlBNSkxOUVNVWFpfYWJlZWdmZmhoaWloaGlpaWlucXR1dnVybGNaVE1GQkA+PURNTkU/PlxsZGNjaXN/gX15cmZcVVZbYGRscm5pZ2RseG9pamloZmJkYm1sZmVjZGZkZGNSMCkqKjxnaWRmZWdPTE9NTk5NTk5LOCgoLjY6S1xaTFFZXWRtd36FiImLjpKWm5toHigvLy4vLSspKCgpKSgnJCEfHh4dHBwcHBwcHBwcHBwbGx0dHR0cHh4hIiIjJSUpLC8xMTJGV2RscXJ2eHp2cnR0dnRydHNzdHJtYVVYZWFUT05OTkxJRkRCQ0JERklBMC9Bb4J6e36DhIV9YTclKCklMld9jIaDhYqJc0lESUpLS0tNTk5NTUlGS0xOTk5PS0lCLSEhIiIkJSUoM0lfdIKHh4SAfnduXkYoKzMvKjNNX2lxeHyBg4aIiYiHgX14cGllYltVW1xeXF1hZ3F/io+UmaCbkoVpU0hWYWFpblxNSkhHR0RCSmZ8gn98enl6e3p5eHVybWhkZGRkZGRkZGVlZWdqbXFzdXeNl5eSjoyMi4yMjIiCgoOCgYCBhoiBgYGCgHx6eHd1c3BvcG9vb25tbm5tbm9wdn+Ij5GPkJSTkY6MiYmIh4qNjYuKioiHiIiHiIiIh4aFhoaHh4WFhY6RNDQ0NDQ0NDQ0NDQ0NDQ0NDU1NTU1NTQ0NTQ1NTQ0NTU0NTY2NjY2Nzc3NjY2NjY2NTU2NjU1NjM0NTU1NDMzMzMyMjIxMTAuLy4tLS0uLi4uLi4uLi4uLi4uLy8uLi4uLi4uLi4uLy8vLy4uLS0tLS0tLS0uLi0tLS0tLS0tMDAzNjg7P0NGS05SVlhXU09QUVRXWlteYmNmZWhpamtra2tramtsbG1ucnNzc3V0cGtiXVROS0RDQD48Oj1DRUVPZ2hkZGZveXx8d3lzcHBwcnJvcG5oZWZia3twZ2ZmZmVjY2JtdmpmZWFkY2RiUSwqKixJbGdmaGdmS0tPTk5PTkxMS0g4MjU5OT1TWlRPU1pfaXF8hIeJi5CRlZqbmUMdKiwsKioqJycmJiYmJiUjIB8eHh4cHBsbHBscHBwcHBwbGxwcHR0eICAhIiEmJyovOU5haGpqaWpweXl2dXN0c3Fvb3BvbnBycnRzcW1gVVFPT05MSUdFQ0JCRUpRYGBQW3uAe3x8gIR+bTgdJiglJy9Od4qGg4aIgmhDRElKS0tKS05NTUxGRkpLTExLSklHPi4hICIjJCQlKDNLYHeGiYWCfnt0bFxHLiYxKSg6UFtlbHF3e36DhYWFhIOAe3NtaWpraGFaXmNna3B4gouPkJCCQi4wO01dYG5xdGZWWGNoaW1taF5SVmd5e3h5eHp6eXh1cGtmZGJiZGRkZGRkZWVna25xc3N7kpeVkI6Li4yMjo+HgoOBgYCAgYiHgYKCg4F+fHl2dHJxcG9vb29tbGxsbW1vc3mCio6Qj5CTkpCMi4mJiImMjoqKiYmIiIeHh4iIiIeHh4eHiIWEhIaQkDQ0MzM0NDQ0NDQ0NDU1NDQ1NTU1NDQ0NDU0NTU0NDU1NDU2NjY2Njc3NzY2NjY2NjU1NjY1NTU1NTM1NTQzMzMzMzIyMTExMTAvLi4tLi4vMDAvLy8vLy8uLi8vLi4uLi4uLi4uLi8vLy8uLi0tLS0tLS0tLi4uLi0tLS0tLS8wLzI4O0BESExRVllbW1pVU1RVWlxeYmVnampsbW1ubm5ubm1ucHByc3V2dnZ0c29pYl1VUE1IRUJAPTk4NTY7Q1JmZWNlaXN5dXh2dHR1eHZzb2xmYmJlYml9cGlqaGpoaWlqb3tuaWhjY2ViXk4sKisvWGxoZmpuYUVMUFBPUE5MS0lHRkI/PD07PUU5PEtWXmZucnyEiIqOj5OWm56JLCEmKCcnJiYmJSUkJCMiISAfHh4eHhwdHRwbHBwcHBwcGxscHB0dHR4gICEjIic/WmZnZGNkZWdyeHh1dHZ0c3JvbWtrbGxucHBydnt9dFxQTE5OTEhGRUNCQ0RIU2FtcnqCfnt9fX1+eV0sJCUmJCQvTnSKhoOEh4BaOURITE1NTE1OTUxLRkhLTE1NS0pJRz4uIx8hIiIiJSg4UGZ6h4eCfn57dGlYPissMCwuRVFaXmdrcXV6fH1+goGAf3x5dXRzcG5nZWZoa3F4g4qMjYuNXB8yRExcYmFdbnNthp+jqaadk4iAgoFvZ212d3h6eXd4c29qZWRiYmRkZGRkZWZnaW1vb3J1fpeZk4+NjIuKjI6Ph4OBgIGBgYGIh4GCgoKAfXt5dnRycXBvb29vbGxsbG1tb3N6g42RkY+QkZCMjIuJiYeIjI6KiomJiIiHiYeHiIeGhoeHiIaDgoOJkJA1NTQ0NDQzMzMzNDQ0NDQ0NDQ0NTU1NDQ0NDQ0NDQ1NTU1Nzc1NTU2NjY2NjY2NjY2NjY2NjY1NTU1NTQyMjQ0MzMyMTExMDAwLy8uLi8uLi4uLy8vLy8vLy8vLy8vLy8uLi4uLi4vLy8vLi4uLi8tLS0uLi0tLi4tLS0tLS0vMDE0NjpAREhMUVhcXmFgWlhZWlxgYGRoaWpsbW5vb29vb29xcXJyc3R3d3Z1dHFtZmFcV1FNSkhEQT87OTYyMTM8V2pjZmVvcmdoZ2Zqa2ppZmdpZmZlZGBmeHNvbWlpZmVnaGh9cmhmZGFnYVxOLCopPGdraGlsbVNCS09QUVFPTkxJR0NCQEI+Pzk7NTRCUVpiZ2x1gIOHiY2RlZeYmnMeICQnJiclJSQkIiIhIR8fHx8eHh4eHh0cHBwcGxsbGxwcHR0cHhwdHyAgIjdbbGljYWBhY2lyend1dXd2dHNycG5ubGxsa2tsb3B0eoB3WkxPTkxLR0VDQ0NDSlRga3SAhH15e3t4dW9KKSYmJSYmLk50iIOBhYV6TzdCRkpMTE1MTExLSEVJS0tNS0pIRkQ+LiMgICEhISUsPFRrfomHgX99eXJnUzgiJzE4PUxRWlxgZmtucXJ3eXx+f35+fHd4d3VxcXFvam5zeoGHjIuJiEEnN0VRW11RVWJ9mrO8u7q5saKOfnCNmY13dHx6enp5dnNua2djYmJkZGRjY2RlZ2lsbnFzc4SZl5KPjYuKi46Sj4SBgYKBf4GBiIWBg4GAf316eHZ0cnBvb29ubWxsbGxubG90fIaMkZCPkZCPjYyLiYmJio6Oi4uJiIeHiIeHh4eGhoaJiIiEgIKGjZGQNTU0NDQ0MzMzMzQ0NDQ0NDQ0NDU1NTQ0NDQ0NDQ0NTU1NTY2NTU1NjY2NjY2NjY2NjY2NjY2NTU1NTQ1NDQ0NDMzMjExMTAwMC8vLi4vLy8uLi8vLy8wLy8vLy8vLy8vLi4uLi4uLy8vLy8uLi4uLi0tLi4tLS4uLS0tLS4uMDAxNDY6PkFITFBWXGBjZGFeXF1fYWJmaGlsbnBwcW9vb29vcXFyc3V3eHh2dHNva2ZhXFZTUE1KRkRAPTo3NDExMUdqZWFjaWxYS1JVVFROSktXaGZhX1xaZHhwamlkZ2pqZ2RleHhraGZjaGdbSiwnLlBuaWhsb2pFRUxQU1RSUU9NSUVDPjxART47OT05P1RWW2BnbXZ+hIiKjZCSlZeYWBomJiQkJCQlJSIiISEgIB8fHh4eHh4dHBwcHBwcHBwcHB0dHB4bGiAdNFpramVgYGJjY2x2eXV2dXh4eHh1c3Fwbm5sbGpqamtsbnN6gnlcT05MS0dFQ0JCRUpSYW50f4B9eXd3c3BgOSwsKCYnKC9Pc4eCgISEdkk3QkZKTExNTEpKSUNFSUpJSUlISUdFPy0kIyMhIiMlLEBYbYCIh4KAf3pyZFA1IiImMkJNUFZZXGFlaWttcXR4enx8fHt7fHt3dHR0cnB0eH6BiIyLiII3MTxFU19WUU1uoLa+ura3o6u0mY6Tmp2WjYBmWHB7eXZybWdjY2JjY2NjY2NkZWhqbW9xc3WKm5iTjoyMi4uPkI6DgoKCgYGCg4qFgYKCgH99end1dHJwb29vbm1sbGxsbW1wdX2HjpGPjpGQjo2Mi4mJiYqPjoqKiYiHhomHh4eGhYaIiYeFgYKGio+RkDU1NDQ0NDQ0NDQzMzMzNDQ0NDU1NDQ0NDQ0NDQ0NDQ0NjY2NjU1NTY3NzY2NjY2NjY2NjY2NjU1NTM0NDQ0NDQ0NDMyMTEwMDAwMC8vLy8uLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy4vLy8vLi8vLi8vLi4uLi4tLS0tLS0tLS0vMTM1ODtARUpPVFthZWppZWFdX2JkZmpsam1ubnBubm5ubnFydHd5enh3dnRybmlkYFxXVFJPTEhGQkA8OTczMTI6XmlhYGJrWDA0Ozo2Mi83TmhkXFpXU114cmlnYmRoamhpbHJ9bWZjYmpvXEcnKEBoa2lqcHBdP0hOU1RVU1FQTklFQT89PD5FQj04QEFSZFFZYWZrdX2ChomLjpKWl5E9HCYoKCUmJSQjIyIiISEgIB8fHh4dHR0dHR0dHR0dHR0dHR4eHx8iRWxvZV5cYGRkZmp4end2d3h5e3p5eHZ1cnFwcW1ra2tpaWpscnuEeltQTEpGRUNEQ0RJVGFudH56dnNzdHFyWjcvMCwoJycyUXWEgH6Cg3A9M0FIS0pMTUxKSUFCR0lJSUpJSElIRj4sIiMlIyQlJy9DW3GDiYWDgH15cGFNMiAhJTlLUFRWVVhcXmNlZ2tsc3Z4eXt7e31+enp4eHV2eXx/g4eJhYR/MzM8RFRbTEVYlLS9vauWqKSsubKRho+elY2Fd19ueHd2b2tnZWNiYmJjY2NjY2Vnam1vcXN3jpmYko2OjIqLj4+KhIKDg4KCgoWJg4GCg4B/e3h3dXNycG9vb29ta2tsbGxucXZ/iY+Sjo+RkI6NjIuHh4qMkIyLjIuHiYmJiIaFhYWIiYmGg4KFiY6RkY81NTQ0NDQ0NDQ0MzMzMzQ0NDQ1NTQ0NDQ0NDQ0NDQ0NDY2NjY1NTU2Nzc2NjY2NjY2NjY2NjY1NTUzNDQ0NDQ0NDQzMjIyMTAwMDAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8uLy8vLy4vLy8vLy4uLi4uLS0tLS0tLS0vMDEzNTc6PUJGTVNbYWVqbWpmY2JkZWhra2ptbm5wbm5ub3Bxc3Z4e3t4d3RzcW1nZGBcWFZTUE1KR0RCPjo3NDIxM05qYF1gZ2c1JyorKywuOVJlX1dWUE1WeHNoZ2djZWtlamtugnRpZmZtdmBDJkJkamhpbHBxTkJLUFVWVlRST0xHRUM/PTk6QEpKPzk+RVtYUFhgYmp1e4GEiYqOkpKVhi0gKCknJyclJSUiIiEhICAfHx4eHR0dHR0dHR0dHR0dHR8gHx0vXW5rX15gY2VnanF6d3V2d3h5e319fX15d3Z0cnFvbm1ramZoZ2tzeYFxVUxKRkVDQ0NESlRibHJ8enJwcHFubm1hRTEvLysrNVV3hX5+gYBpMiM1RUpLTk1MRz89Q0lLSkpKSUhJSEY8KiIjIyIlJSYwR193iImFg4B9d29gSC0jJSxCUFRXV1dZWlpdXGBkZmtxdHZ4eXl7fX19fXx4en1+gIOFhYGCeTc3O0FNUkpEb6a3vraIfKC0uri2kX6Kl5aSmJCCdXZ1dG9rZ2VjYmFhYmJiYmNlZ2ptb3N0fJOZl5CNjIyLjI+PiYOCg4OCgICFiYWCgoKBgH16dnRycnFwbm5ra2trbGxsbnB3gYqPkI2Ojo+OjYyLhoaKj5CMi4yLiYqJh4aGhYWFiIeHg4GCiY2QkpCPNDQ1NTQzNTU1NTQ0NDQ0NDQ0MzMzMzUzNDQ0NDU1NTU2NjU1NTU1NjU2NjY1NTY2NjY3Nzc3NjY0NDQ0NDQzMzQ0MzQzMzExMTExMTAwLy8vLy8vLy8wMDAwLy8uLzAwLy8vLzAwLi8vLzAwMDAvLi4tLi4uLi0tLS0uLi4uLzEzNDY3OTxBRUxSWmBma25uamdmZ2lpaWppa2xucG9vb3Jzd3h7fHl4eHd2c25pZ2VfXFpYU1FPS0lGQj86ODYyMi8/Y2NeYWZqRyYoKikrLztUZVtXUk1OVHR3ZmdoaWlpZmhscIF+bWtqaHV6cGdpaGhscG5waENHTVFVV1VSUk5JRkVBPj07ODU5Rkk/OjlCSVBQVl5mbXV+gYSHioyPkpN3JSIoKCgmJSUkISAhHx8fHh4eHh0dHh0cHR0dHB4dHR0fIiJCam5iXmBjZWZqcHd7d3R2eHd7fH59fn59enh1dnd0cnFvamdmZWZmbXN6fGlQSkdGQ0VDR0xVYnJ4eXVwbW5wb29wb21hRzItLDdWeYJ/foB+ZDAjJCo7RkhKSD81MzxDSUtMS0tKSEhFOCUiIiIiJCQmM01ke4mKhYSCfXZtXUMpIio6TFVXWl1cXFtaWVRVWmRobHF0dHV3eH6BgH9+fX1+gIKCgn5+gnJHOUBDS0lDTYmptr22e1mDkamyqo2Og4uWk6GjnIh1cXJva2ZiYmFhYWJiY2NkZmhrb3Fxcn6WmZSPjYmKi42SkImDgYGCgIGCg4mDgYKCgH56d3RzcW9vb29ubWxra2xsam1weIOLj46Ojo2MjIyMioeGiY+Pjo2NiomIiIeHhoaGhoeFg4CDho2Rk5KRjzU1NTU0MzQ1NTU0NDQ0NDQ0NDMzMzM0NDQ0NDQ1NTQ0NDQ1NTU1NTY2NTU1NTU2NjY2Nzc3NzY2NDQ0NDQ0NDQ0NDIyMjIxMTExMTEwMC8vLy8vLy8vMDAwMC8vLi8wMC8vLy8wMC4vLy8wMDAwLy4uLS4uLi4tLS0tLi4vLzAxMzU3ODk8QUVLUVheZGpwcG1qZ2ZoaGlqbGtub3FwcXN3eXx9f357eXp5d3JtamZjX1xbWFRSUE1JRkI/Ozk2MjMwNFtnYF9iaFcoJSkpLDA8VmZaVVFPUFVyeGhlZWViZWtoaW16g3NramlvfIF6eG9sb3BwcVxBSE5QU1VUUk9MR0NAPjw6OTUzMjhDRz4xNT1DRlFbXmVudXt/goaIioyRlGscJSYmIiIjIiAfHx4fHx4eHh4dHR0dHR8fHh8hHiAfHSNObmxgX2VkZGlyd3p8d3RzdXh6e3t8fX18fHh0dXh2dHR0cnBraWdlZmhtc3p4YEtIRENEREhNWGZyeHdycW5tb25ucXJvbWtgVEI/XHqBfH6AeVsoIiIjISo4QUE3LzlAQkZHSUtMSklIRDYlIiIiIiQkKDpRaXuIioWEgn94bVo/JiUxRFJWWVteX19aWVdUU1ldZWttb29tcHN4fH1/f31/gYGCgoF8goNtVkNGRUlFQGGTqLK3uKqOfIaWlZuVmpSSko2Tm6aVg3JvbmhmZGJiYmJhYWNkZGZnbG5xcnOEmZmUkIyJioqMkY6Jg4KCgX9/gISHgoKCgoB+end1c3Fvb29ubWxra2tsbWtucnmEjJCPjY6MjIyLjImHh4qQjo6NjIqJiIiGhoaGhoaEg4GBhYuQlpWSj442NTU1NDM0NTU1NTU1NTQ0NDQzMzQ0MzMzMzQ0NTU0NDU1NTU2NjY2NjY1NTQ0NTU2Njc1NjY2NjU0NTU0NDQ0MzMzMzIxMTExMTExMDAwMC8vLy8vLzAwMDAvLzAwMDAuLi8vMDAvLy8vLy8wMC8uLi0uLi4uLS0tLS4uMDAwMTM1Njg5PEFFSVFVW2JpcHRybmpnZ2ZoaWtsb3F2eXl8fX+BgoGBf357endxbWpmYl9cW1hVUk9MSkdDPzw5NzMyMTNMaV5dYWNhMCQoKSswPlhkV1NRUlRYaXJmYWJjYWFpbHJwcYB1amZmaHF7enl1b25wcm5OREpOT1JSUk9LSkVBPjw6NzUzMzEvMkBDOjM3PD9EVFxhY251fH+EhYiGi5OSWBsfIiQhHyEgIB8fHh8fHh4eHR0dHR0fIiMkJiMgHi1Zb2tlZGhoaW5ydXN2d3VzdHV2eXp5ent5cmppaWhxdXFwcnZ3cm9saGZpbHBzd3JTSUZGQkVJUF1rcnd2b25tbnBtcHJxb2plaW9va29/gHx+fXdTJCEjJCMiJSMrKigvOj9FR0lJSkVGRj8xJSMkIiIkJS0/Vm2AiomEg4B/eWxYOiYqO0pVW1paXV9fXVpXVVNWW2BlaWtsamtvd3p8fHx9gIGCgoJ/foOCbVZPTEdJQkFsmqWrq6iakJqdoaChmJCTmZqYjpCYmIh/c2tpZGJiYmFiYmJjY2VnZ2pucXNzipyZlpCNioqKjZGNiIOEg4F/f3+ChYGCgYGAfXp3c3Fvbm5tbGxra2pqamtrbnN7hoyPjY6OjIuKiouHh4aKj46OjYyLiYiHhoWFhYWFg4KBhYqPlZWUkY+NNjU1NTU1NjY1NTU1NTU0NDQ0NTU0NDMzMzM0NDU1NTQ1NTU1NjY2NjY2NTU1NTU1NjY2NzY2NjY2NTU1NDQ0NDMzMzMzMzExMTExMTAwMDAwLy8vLy8wMDAwLy8wMDAwLy8vLzAwLy8vLy8vMDAvLi4tLi4uLi0tLS0uLjAwMDEzNTY4Oj0/Q0hOVFpgZ25ydXNuamlnaGhpbnF2fIGDg4WFh4eHg4F+e3p3cW5rZmJfXFtYVVJPTEpHQz88OTczMjAwQGNgWF1iZUAlKCgqL0FbYlZSUVRWVmRzZ2BjY2NobW1va2dxc2heX2NpbXJ4e3h0dG1dR0lLTU5PT09LS0pFQT47OTY1MzMyMS8yPD00MzdBR1JZWWFlbXV5f4KGhYiNkZBNGB4fHx8fIB8eHh4fHyAfHx4dHhweIiUoKy0lIDdhbWhkZ2ltbXJ4dW5wcnJxcG9zdnZ3eXpwaGNlaG1ub3BubWtrcnh3b2loamxtcnRzZE1IRENHS1Vjb3R2dG5tbW9ua250cnBsamhpbXJ7g4B7fnxzSyQhJCQiJCQkJyorKS46QUVISUtNTEU8MCYkJCMjJicwRFlxhYuIhIKBf3doVDQlMEJMUllaW15gYF9cV1VTVFleYWZoaWtucHVxdXp8fYCBgoKCf4CEgG5bWlpUUUhEcZympaOelZeYiouZl5aTlpqdmJWanJOQiYJqZWRhYmJhYmJiY2NlZ2hrcHBzdouamJWQjYqKio2QjIaEg4OAf39+gIOBgoGBf316dnNxbm5tbGxsa2tqamtqbG50foiMjo6NjYqKiYuLiIaHjJGNjY2MioiHhoaFhISFhYKCgoiPk5WUlJGPjTU1NjY1NTY2NjQ1NTU1NDQ0NDU1NDQzMzMzMzQ1NTQ0NTU1NTU1NTU2NjY2NjY2NjY2NjY2NjY2NjY1NTU0NDQzMzMzMzMyMjExMDAxMTExLy8vLy8wLy8wMC8vMDAwMC8vLy8vLy8vLy8vLy8vLy4uLS4uLi4tLS0tLi4vLzEyMzU3OTo9P0NHTFNYX2ZscXd1cm9raWdoaW90e4GGh4eHiImIh4WBfXp3cm9saGRiXltbWVVTT0xKR0M/Ozg2MjEuLzRTZFpXW2NTJiUoKzJDXWFYUlFWWVhgcmljampubGtta2xsY2dpZWBdY2lucXV6em5eT01OTU1OTk1MS0pJRUI/PTk2NTIyLy4uLi82QT83PkdOV2FVXWRsdHt/goKGi5GVj0EZGx4eHx4eHR4gICEhISEgIB8eHyElKC80LUFlbWhlaGprbnZ3cGlrbnJwb25vcXR0dXZrY2FhYWdqbW5xbmxpZmp1e3NsbGpqbG5wcW1XRkNDSE5YZXB0eHFub3BxbmptcnJvbGpqaGt0fYJ/fH19ckMjJCQiIyMiJSUnLC4qKjQ9QkdIR0hFPC8lJCQkJCYpMkdedYaLiYWBgYB0Z1MxJjZES09WW1xfXl1fXFlWVFRYXGBjYWNlaWtwcG11d3yAgYGCgoKDg39wZGdjWlZRT3WdpqWjnZmWk46PjY6SlJmVlJudoaCRkY6QfGZiY2FgYWJhYWNjZWdpbHFxdXmPmZaSjY2KiYqNkIqGhYOBfn9/f4GDf4KDgn97eHVxbm1tbGxramtramhra21vd4CJjY2KjYuJiImLiIWFh46SjIyNi4mIhoWFhYSEhYOCg4eNlJaVlJOQkI05OTk5ODg2Njc2NTU1NTMzNDQ1NTQ0MzMzMzMzNDQ0NDU1NTU1NTU1NjY2NjY2NjY2NjY2NjY3NjY2NjY0NDQ0MzMzMzMzMjIxMTIyMTExMTAwLy8vMC8vLy8vLzAwMDAwMC8vLy8vLy8vLy8vLy8uLi0uLi4uLS0tLS4uLy8wMTM1Nzk6PT9DR0xQV1xjaW9ydXRwbWlmaGx0eHyBhIWFhYaIhoSBf3t2c3BubGhkYl5bWldUUU5LSUhDPzs4NjIyMC8xQ2JbWFpgXTIlKy4wQFpdVlNVV1hZYHNtZGhwcXFubnFtbmtfXWJpZGZna2xuZ2FVUVNTVFFRT09NS0lIR0VCPz47NzYyMTAwLy8sLTdGRT9DSE5pZFVfZ2xxeH1+g4aLkZWJOBgcHR4gIB8gIiIiIiIiIiIfICEjIicvOEhaaGhoa21tcXd2bGlnaWxsbW1vcHFxdHJdW1tbX2Bla29wbm9xbWpkaXR3cW9ra21sbm5yZUlEQklRW2hxd3VubnBwcG1maXJycG5rbGppcXuEgHp8e2s7JCYlJCUlJSMlJywxMiskKDZBREdGQjcrIyQlJCQmKjZNY3qJh4SDgYF8cmVMLiY3RUtPU1lZXF5dXVtXVVVVWFxeYWJkZGNjaWtqb3J4fICBgYGBgoN8cm5rZ2VgXFx8nqSinJmTj4mKh3p/kpOXmJWVmZ2in56Thn1rY2JiYmFiYWFjY2VnaWxxcnR7kpqWko2NiomKjZGLhYSCgX9+f4KIhoCAgoF/e3h1cG5tbGxsampra2pramptcXiCi4+Mi4yLiYeIh4eFhoaQko2LiouJiIaFhISFhYOCgYWLkZaVlJSSkI+MOTg5OTk5ODc3NzY2NTU1NDQ0NDQ0NDMzMzMzMzQ0NDQ0NDQ0NjY2NjU1NjY2NjY2NjY2NjY2NjY2NTY2NDQ0NDQzMzMyMjIyMTExMTExMTExMS8vLy8vLy0tLy8wMDAwMTEwMDAwLy8wMC8vLy8vLi4tLi4uLi0tLS0uLi4vMDEzNTc5Oz5AQkZKT1RZX2VpcHR3c3BsZ2dtd3p9gIODg4OFhIKCfnp2dXNwbGlmY2FeW1lWUk9NSkhGQz46ODYzMzAvLzVZYFdYXGFDJiksMEFcXVdWVllZWV9zcWlqa21xbGpqbG5qamRYWVlSPTo+QkZSU1dZWVlWU09PS0pHRkRCQD88Ozk3NDAvLi0tLS0vOEZLRkZDU3JjWWBpaXN6fX+Dh4yQlIsyGBwhICEhIiMjIyMiJCQlJCQiIiglNUhNUlpkam9vdHh3aWNlZGRnZ2drbnBub2pSUVhXW1xfY2ZobHBzdXRuamRreXlzcGxsbWxvcnBVRENKUV1tdXhybm9wcG5pYmhxc3BtbW1tbHV9hIB8e3loNyUnJyUlJygmJyouLzQxKiQlLTpEQ0AzKiQkJCQnJyw5UGd8h4aEg4F/eW5fQSkoPEVKTlJWWVtdXVxcW1taWltdX2BhYGBfYmVlZGhscHh7fX9/gICBfHdzc3BrZ2Zlf5menZaOiIWFfnNWb4uNlZiZlJSXnZ2amIl5eWRhY2NhYmFhYmNlZ2ptcHJ1fZSZlpONiomKio6TioSDgoF/foCCiIWCgoGAf3t3dHBubWtra2tqa2toaWprbXN6hI2QjIyLiYeGhoWEgoWJkJCMjIqKiYiGhYWGhYWEhIWKkJSVlJOSkpCOjDs6Ojo6Ojo4Nzc2NjU1NTQ0NDQ0NDQzMzMzMzM0NDQ0NDQ0NDU1NTU1NTY2NjY2NjY2NjY2NjY2NjU1NTQ0NDQ0NDMzMjEyMjExMTExMTAwMTEvLy8vLy8tLS8vMDAwMC4uLy8vLy8vMDAvLy8vLy4uLS4uLi4tLS0tLi4uLzAxMzU3OTs+QEJESExSVlxhZ21ydnZzcGxqbnV5e36AgIB/gH9/fHp5dXJvbGpnZWJgXltaV1JPTUpIRkM+Ojg2MzMwLi4xSWJcWVtgVCgoKzBCW11XVVVXV1hcb3ZsbnF1eXFvcXJraWtlXVxaTD09QEhOVFhZW1tZVlNRT01JRENCQT4+PTw6ODUyMC4uLi8vMTU5Q0xJQjJGXmddXmRqc3l/goSGjJCVijIXISAiJCMkJCQkJCQkJSUlJCU1U2xiTkpXYmxxeHtvYmFhY2FhY2NiZ2tsbmFBRUxSWFldYmNkZ21xdXV3c21paXR+eXFua21tbXByY0hFSlVhcnZ4cm9wcHBuYl9ncXVwbWtqaGxyfIN+fX16ZTEmJiclJSYoKCkpJiUpMjQsJiUlLjs+MSYkJSUoJygtP1ZvgYiGhIOAgHluWjgoMD9HSk5RVFlcXVtdXVtbW1tdXl5fYF9eXV5iY2JjZ2pvdnl9fX2AgHt1dHRyc3FvcISUmpaQkpqalH92e4OJi4+WmZuamJaWl5iVg3xvYGFiYWJhYWJjZWdqbXFzdIGYmZWSjYqKi42Rk4qEg4KBgH9/g4iFgYGBgH16dXNwbW1ra2tramtraWppbG5zfIeNjYuMioiGhYWFhISHi5GQjIyJiYiHh4WGhoWFhISIj5SVlJSUk5OQjow8Ozo6Ojo6Ojk4ODg3NzY2NDQ0NDQ0MzMzNDQ0MzMzMzQ0NTU2NjU1NTU1NTU1NjY2NjU1NjY2NjU1NDQ0NDQ0MzMzMzIyMjIxMTExMDAwMDAwLy8vLy4uLi4vLy8vLy8wMC8vMC8vLy8vLy4uLi4uLS0uLi4uLS0tLS0tLS4wMTI0Nzk6PT9BRUdLTlJXXWJqcHV3dnRtbG92eHt7fn58enx7e3p4dnFvbGtpZWNiX1xZV1RST01KRUVBPTk3NzMyMS0uLzldYVlZX2E2JiswQ1teWVlZWltbX2t3cW5tcHl7eHR3b2hlZl5XVEc8PkJITVJWWlxbWldVU1BMSERBQD48PDs6ODc2NDMxMS8wMTU7Pzs7Sk1GQUJdZ19gZGtyeX+Ag4aMkZeILx0iJiMkJCUmIyMhJCQlIypGaHVxZExBSmB0fHlnX2JeX2FjY2NhYWVpa1Q/Q0pIT1RXWmFhYGRpbnR5end0cWxveXtybW1tbWttbWlQSUxXZnZ4dXFxcnFwbVxeZnB0cW1ra2lrc32Df3t9eGEsJygnKCgnKCopJyYnKC0wMCcoKCkqLy8qKScmKCUmMEZcc4OIiIOBgIB5alUxJzVFS0pMUFJUWFpcXFxcW1xdXVxdYGBfYF1eXltZXGBlbG90d3l6fX54cnN0dXd1dHaFjJGToKysopWBenuDh4yPkpWanqGdlZSYmZKCeGRiYGBhYWJhY2Voa25ydHSFl5eTkIyMioyOkZKJg4ODgoCAgYSIhYCAgH97d3Z1cW5tbGtqampra2tramtvd3+IjY2Li4qIhYSDg4OFiIyPjoyMioqJiIaFhoaFhYOFjZKVlZSUlJKSko6MPTw7Ozs7Ojo5ODg4Nzc2NjU0NDQ0NDMzMzQ0NDMzMzM0NDU1NjY1NTU1NTU1NTY2NjY1NTY2NjY1NTQ0NDQzMzMzMzMyMjIyMTExMTAwMDAwMC8vLy8uLi4uLy8vLy8vMDAvLy8vLy8vLy8uLi4uLi0tLi4uLi0tLS0tLS0uMDEyNDc5Oj0/QURFSUxPU1leZGtydnd3cnByc3Z3ent6e3t6enp5d3Vyb2xqaGViYV5bWVVST01LSEVCPzs5NzY0MTEuLi8yTWFbWVtiTycrLz1YYFxcXF5eYGFnd3VvcXeCgnd2eHJraGVVSk9BOj1AQ0tRVVhZWVlXVlJQTUpFQ0A+PTs6Ojo6ODY1MzIzMzQ8PTs7PTw+U11aY2lqY2RkbXN5foCDiI+Xl4MrHCgnJiUmJiQjJSQhKE9ueGlgY15LPEFUbnRkWVtdXmJiYmZlX2BoZE89P0lDR0hOVVZVV1pgaG90eXx7eHVxbHR8dGxsbGtqaGhoWEtSW213dnFwcXJxcGVXW2Zvc3Bsa2tqbXR9g398fHdZKScoKCkpKikpKCcnJygqLTQuKCgpKioqKikpKikpKTNLYXSFiIaBgYKBeGZMLSw8R0pLTE5RUlZYWVpaXFxcXF5eXFpeXVpdX19cWVpcXmJpb3N0d3l3cW5wdXV1dXZ3goaNoLO2rqONgHuEjIuLi5SamZqeoJ2WlJqTh3xyYWJhYWBgYGJmaGtucnR2iJmVkY6MjIqMjpGQh4KCgoKAfoGEiIWAgIB/e3d0cXBtbWxrampqa2tra2ttcneAiY2Ni4uIh4WEg4ODhoiMj46MjIqKiYiGhYaGhYWFipCUlZWUlJSSkpKOjD09Pj08PDw7Ozs5OTg4Nzc2NTQ0NDQ0NDMzNDQzMzQ0NTU1NTY2NTU1NTY2NjY2NjY2NTU2NjY2NTU0NDMzMzMzMzMyMTExMTExMTExMS8vLy8uLi4uLS0tLi8vMDAvLzAwLy8vLy8uLi4uLi4uLi4uLi8vLi4vLy4tLi4uLjAxMjQ2ODo9P0FDRUdKTlBWW19mam50d3VycXJ0dnh5eHh5eXh4d3V0b25saWhmYl9dWldTUE5MSUZDPz46OTc0MjIvLi0tLj1eXllZYGE7KC09WGVgX15fY2lpZ3N9dXR8ioV5d3d1bmpfUUpQRTo9QENHTlFWVldWVVVSUE1JRkRBQD48Ojo6Ojo3NTQ0NTc5PTw8Oz02LDNMXmZnaW5uZGJqcXd7gISGjZSXhSYhKScpJyYlJCMiNXF5cmtlX11YTj8+UVJWWVlZXF5iYmVlZWVmV0Q9PEJIRUhGTVFPUVRfaG9zc3R2eXl3dXBzfXhvbGtramhpZltSVGFwdnRwcnNzcm1eVllibnJuampqaW10foF/fX51VCcoKSgoKSopKCgnKCknKSwyMSknKCorKissLDAtLS87U2l8iIeEgoGDfXNjQysvPklLS01QUFFSVVdYWVpaXF1fXl1dXV1cXF1eWldYWVtbYGlwcHF1cWdobW9zdnh3eoGLna6zq56OhYSCf4KDgoKKl5ycm5+hnJaSmI2CfmZgX2BgYWBhZGhtcHJ0d4qYlZKPjIyMjY2SjoOAgYKCgYCBhIiFf3+AfXt3c3FubWxra2tra2trbGxrbXF4gomNi4uLh4WFhYODg4eLjY6PjIuJiIiHhoaGhYWEh5CUlpWUlJSTkZGRjotAQD89PT08PDs7OTk4ODc3Nzc1NTU1NDQzMzQ0MzM0NDU1NTU2NjU1NTU2NjY2NjY2NjU1NjY2NjU1NDQzMzMzMzMzMjExMTExMTExMDAvLy8vLi4uLi0tLS4vLy8vLS0wMC8vLy8vLi4uLi4uLi4uLi4vLy4uLy8uLS4uLi4uMDI0Njg6PT9BQ0VJTE1OUlZbYGdscHZ4eHRydHZ2dnd3dXV2dnV0c25ta2dmZWBfXVhVUU5MSkdEQj89Ozo4NjQxLy4tLS0yUWBbWl5iUiosOVVkY2RkZWxwcGlyfnp9h5CKfHZ8dW5mYFVLPTo5PD9BRkhNUlNUU1RTUlBNSkdFQkA+PTs6Ozo3NTQ0NDU2Oz49PDs7My8rKjxZZmdqcnRoY2RrdHp+goqPlJiHLCIpKScnJyMfQHJ2bmpqa2lqZlpBOElNRU9VVllcYWNkZWdeQzRFP0FRS0VISElMTlNdZmxydHRzdHV4eXh2eH19dW1qbGhmZmNhV1ppdXdzcHJzdHBoVlRYYWxybmpraWpudX5/fH99ckskJykpKSgpKCgqKiopKicpMDMtJycoKioqKi0wMzM5R1xzhYeFgoKBf3xyYEErM0JKS0tNUFBQUFJUVllZWVpcX19fXVxcW1lfXltUVVlfYFpiamptb2RaYGduc3d5fICFkaCoqZ2VjoeHh4SBgYGCh42VnJuZnp+dlZeRin5vX2BfX2BfY2ZrbXBwdXaLmJWSj4yMi4uOk42FgoGCgoGAgYSIhX9/gX55dXJwbGxsa2tra2tra2xsbG9yeYKJjYuLi4eFhYWEhIaKj4+PjYyKiYiIh4aGhoWEiI6TlpaVlJOTkpCQj46LQUBBQ0JAPz48PDs6Ojo4ODc3NjY2NjU1NDQ1NTQ0NDQ0NDQ0NTU2NjY2NTU2NjU1NTU2NjY2NTU1NDQ0MzMzMzIyMjIyMjAxMTExMC8vLy8vLy4uLi4tLS0uLS0uLi4uLi4uLi4uLi0tLS4uLi4uLi4uLi4uLi8vLi4uLi4uLjAyNDU4Ojs+QEJERklMTVFVWF1kaGxxdXh0cnR0dXV1c3NzcnRycm9samhmZGJfW1lWU1BMSkhGQ0I/Pjo4NzY0MS8tLCwsLUFfXVlaXmI9KTdRZmZpa25xdXRwdHx/goqKf3BtdXNsal9YSDc4OTo8PUFFS1BRUFBRUE9OT0tGQkA/Pj07Ozk4ODU0MzIzNz0+Pjw8ODEuLi4rMEpjaGhxcW9nZm1zeH2Dio2TloEoIScrKCciM3N1b2trbW1sb29bQzg8T0RKVVhaW1xeXltMOTQ1ODZFTUlCSUpKTFRcY2dpbXBycXBwdXh6enp9fXVuaGpnY2FhYlxgcHp4cXFxcnNsYlBQV2BqcGtqbGpqcXmBf3x+gHFDJicnKCcnKCkqKSkqKikoKi0xNTAnKCgpKSosMjM0PlJmeoeJhYGBgn15b106KzlFSU1PT09QT09QUlJWV1laW15eX2BdWVhYV11bVFNVWWVkX2RlaGtdVl5mbXR6e3+HjJSdoaCel5OLi4uGhoqKioeHiZCbmpidnpiWko2DeWRhYGFhYWRnaWxvc3d6kpiSkY6Mi4mJjJKLhIOCgYGAgIGEioV/f3x5d3RxcG9ta2pra2pqampqamtuc32Fi42Ki4qHhYSEhYOGi4+OjoyKiYqKh4aGhoWDhYuSlJWVlZSSkZCQkpGPjEJBQUA/QD8+Pjs7Ojo6ODg3NzY2NjY1NTQ0NTU0NDQ0NDQ0NDU1NjY2NjY2NjY1NTU1NjY2NjY2NDQ0NDMzMzMyMjIyMjIwMTExMTAvLy8vLy8uLi4uLS0tLS0tLi4uLi4uLi4uLi4tLS0uLi4uLi4uLi4uLi4vLy4uLi4uLi8xMjM0Njg7PUBDRUVHSkxQU1ZaXWNnbHF1dXFxcXBwcnJwcHFwbW1samhlY2FeWlhWVFFNS0hGRUJBPjw6NzY0MjAuLCsrKy0zT2BWVVlgVywySmFrbG1xdnh2cXFzgIFtdGxudmllaF5YV0I4Ojo5OTo9QUhOUE1LTE5PT05MSEM/PDs6ODc3ODg1NDMyNTo/QD48PDcxLy8wLy4rNVNqamp1cmhlanJ7gIOJi5CSdhskKCcoJmp3bWhqcHJ0dHhyWkc8N0dJRVNXWVpaWEU2NTc6ODE6REJAQkRISVFdZGdmZ2hnaW5ucHJ2eHd2eXp1b2poZWFfYGFfZHN3dnNxcnJwaVlOT1VgaWxpamxqanF8gX98gH9tPCUnKCkpKSorKisqKisrKisrLzQ3MSYnKCkpLDE4PElccoOMiYWEgoGAd2pWNCw6RElNT09QUlFPTk9QUlVZWl1eX2FgXVlXVVVcX11ZU09OYWdnZmdmWllhZ3J2fH6DiY6Rl5ubl5CLkpSUkZigop6akouKkZeYlpqbmZKHiId0ZmVkZGVnaWxtcHN3fpWZk5GOjIuKio6RioODg4GBf3+BhImEf39+fHZzcW1sbG1sa2lqampqampsb3V/hYuMjIuJh4WEhIWGiY+Qj46MjYyKioiGhYaEhImQlJWVlZWUlJKQkJKRj4xGRkVERENBPz8/PDo5OTg4Nzc3Nzc3NTUzMzMzNDQ0NDMzNDQ1NTU1NjY2NjY2NTU1NTU1NjY1NTU1NDQzMzMzMjIyMTExMDExMTEwMDAvLy8vLi4uLi0tLCwsLC0tLi4vLy0tLS0tLS4uLi4uLi4uLS0uLi4uLi4uLi4uLi8vMTEyMzU2Ozs+PkBDRUdJTlFUV1leY2hubm9vbW1ubm9vbW1ta2tqaGdlYmFeW1lUUlFOS0lIRUNBPj47ODY2MzEvLiwsKyssLjxcWFNUXF9BKT1UZmxvc3t6dm9sZ2luW2Jxhox4Z1tPU1NCOjo7OTk3NztDSk1LSEZKS01MS0VCPDo6ODg4ODc2NDMyMzc+QkJAPjw1MTExMTAwLywnQF1mbG1wbWptdnl+g4iMjJFPHCMoJlF6cWtqcHV3e399YFZHOzM7Qjs/SVVaTzUpNjs5PUA9Ozs+QkRHSVFaY2hpZmFiY2BfZWlrb3FzdHNycXFqZGBfXmBfY2h3eHR0dXJxb2RSTU5UX2Zoam1raWtyfIR/fYB/bUAyLiorKysrKioqKissLS0sLS0wODwvJigpLC4uOUFTZ3mJjYmFhIKBfnVkSC0rOkNHS05PUFJTUk9OTk9SU1hbXV9fX15aVlRRWmBjX1pXVFVfZ2lpZVtfaG51en6Ch4qNj5GWlJCNj5mkpKKenJqamp2akIyOlJSYm5aHfouGfWxoa2lpa21ucnN1d4KXmJORjoyMjI2Qk4mDgoOBgYCAgYSHgn5+e3d1cm9sbGxramlraWlpaWpqbXB3f4eMi4qLiYaFhISEiYuQkpCNjI2MiYmHhYWGhIaMk5WVlJSTkZCQj5CUko6LSEhGRUNDQkJBPz4+PDw6OTg4Nzc3NjU1NDMzMzQ0NDQzMzQ0NjY1NTY2NjY2NjU1NTU1NTU1NTU1NTQ0MzMzMzIyMjExMTExMTExMDAwLy8vLy4uLi4tLSwsLCwtLS4uLi4tLS0tLS0uLi4uLi4uLi0tLi4uLi4uLi4uLi4vLzAxMjM1Nzg6Oz0/QkVHSEtPUlZYWV1iZWdpa2traWlqamlpaWhoZmVkYl9eW1dVU1BOTEpIRkNBPz08ODg2NDIwLCsrKysrLCwyTV9WUVdbVywwPVBeaG91enRtaF9XUUpacoWOhoBzZmVgST05Ozk5Nzc4PkNJSEVFRkhJSEdDQDw6ODU1NDU2NTMzNTc9Q0RCQj05NDIyMjAxMC4uLywrRGNqbXBxbXBzdn6AhYiJdyAkIkJ7cWhqb3Z5fIJ3XFZWSTkyNTc4NzY7OCwwNTY3OTo+Pj5FSExRVFpbYWlqZmFeY2ZfWlxfYWJmb3FtbG5xamRgX15eXWFsdnRxcXJxb29gTEtPVV1jZWttampudX2GgoKEgXJSSUU8MCwsKyorKyorLi4sKy0tLjI6OTIpLTg+Nz1NYnSDjI2JhYSDgoB1ZUovJzA+RkpLTlFQUE9PTk1OTk9SWF1dXl9eW1dUU1dfZmhkY2JlamtsbmpjaXB2fH+Ch4uKiouLjY+Pj5OaoqOgmpiZmpeVlpaOio6RkpOTlY2HhIJ2cG5tb29xcnN3eHmFl5aSkI2MjI2QkJOJg4KDgYF/f4GEiIN+fnt3dXJwbWxsamlpaGlpaWlqam1weIGIjYuJioiFhYSFh4uQk5KQj42OjIqJiIeFhISJkJSVlZSTkpKQkI+QkpCNiU1NSUhHRkRCQ0FAPz08Ozs4OTg2NTU2NjY2NTU0NDQ0NDQ0NDU1NTU1NTU1NTU2NjQ0NDQ0NDQ1NTQ0MzMzMzMyMjIyMjIyMjIxLy8vLy8vLi4uLi4uLCwsLCwsLS0sLi0tLS4uLi0tLS0tLS0tLS0tLS4uLS0uLi4uLi4uLi4uMDAyMzY2ODs8PkBCRUhITU9SVlhaXGBiZGVkZGJjZWdmZWVmZWNiYV5bWlhVUlBPTEpISEVBQT47Ozg2NDIxLisrKysrKywtLDxbWVJVW2JFJjE5RVdga3NvaGFcWFVJSGB8iYWBe3V1ak48OTw6ODc2NTg9QEFAQkNDQ0NEQT88OTY0MzAvLzE0Njs/QkVFQ0I9NjMyMzMxMTIxMDMyMCgzUmdtbWp0fXd0dnqCgGo3IDR1dWpqbnZ3fn91W1RVVk4+NDIzNTY1NDMyNzg4Ojo5OUNKTlBUXF9gXmVqaGVgY2doZWNfXVlQUGBvbWpscWtiXVxdXlxeb3Zxb3BxcnFsUkxMT1NYXGVsbGdpbXaAhoWFiIZ5bGNbU0Q0LSsrKysrKyssKysrKywuNDs9MDMzOj5EWm5/jJCNiYiIhoR7dWpdW1dMRUFERkhOT05PTkxKREBJTFRaWllYXFxbV1leZmxvb3Byc3N0cXNycXN3e4KDhouNjIuKiIiKjJGTl5qZmZSTlpiYlpORkI+Ojo6SlI+GhYqEfXd1c3R2d3d4d3p8ipWUko+Li4uLjpCRiIKCgoKAfn6BhIh/fnx5d3RxcG5sbGpqamlpaWhoa2tscXmDio2JiIqHhYWFh4mMkZWSkJCPjYuKiIaEg4WJjpSVlJSTkpGQj4+NkJKQjotOTkxLSUhFREVDQ0E/PTw8Ojk5NjU1NjY2NjU1MzMzMzQ0NDQ1NTU1NTU1NTU1NDQ0NDQ0NDQ0NTUzMzMzMzMzMjIyMjIyMjIyMS8vLy8vLy4uLi4uLiwsLCwsLC0tLC4tLSwtLS0tLS0tLS0tLS0tLS0uLi0tLi4uLi4uLi4uLjAwMjM0Nzc5Ojw+P0FDR0pNUVNVVVZYXFxeXV1eX2FjYmFgYF9gXl1aV1ZUUk9PS0lHRkNBPz48Ozk4NTIxLiwrKysrKystLC0xR19XUVpkXzAoMDpNWFtjZWReWFlaUkpObHp0cG9vcmJRQTw1NDQyMS8xNDU1NDY3ODs8Pjw6Ozk2NDMzMjE1OD9CRUZGRUI+OTMxMTIyMjI1NTU1NTQ1MC89Wmlubnl9e3VlUlQ4Jy9sdGlobG93fnxnV1daW1hSQTM0Njg8My8xNjY2Oj4/QkpNT1RXV1tfX2JmZ2ZlZGVlaGVhW1lSRUBRZmpqa3BpYFtbXFxcZXl6cHBxc3FwYkpIS05QVVxlb2xpa3B7hoiJiomJhX95cGRbSTYsKysrKisrLCsrKysqLC81PjczNT1CUWl6iI6PjYmIiIaDfXRqXF1hZmZlV0pGR0xMSktHQS4qPkJGVlhYWVxgX11eZW1yc3N0dnl5eHh3dnh6fYKDhoiNjIyLi4mJiImMjZOVlpaSkZKTk5OQjY2NjY2LkpaVlJOUkYyGe3d5enp6fHx/gYuTk5COioqKioyQkYWCgoKCgH5+gIKIf357eXdycXBubGtpaWlpaWloaGprbHF7hYuMiYmJhoWGh4uMkZOTkpCQj42LioiGhIOGjpSVlZSTkpGQj4+PjZCTkY6LT05OTUtKSEZFRENCQD8+PTs7OTc3Njc3NTU1NTU1NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MzMzMzM0NTQ0MzMzMzMzMzIyMjIyMjExMTEwLy8vLi4uLi0tLS0sLCwsLCwsLCwsLS0sLS0tLS0tLS0tLS0tLS0tLS0tLS0tLi4uLi4tLi0wMDE0NDU3ODk6Oz0/QUZHS0xPUFFRU1ZXWFhYWFpbXV1cXVxcXFpYVVJSUE9MSkpHRUNBQT87OTc2NDMyMCwsLCwqKiwsLCwsLTdVW1NVXWVPJiw0QE1TVVlYVFJWWVhVUl1sbWtmaGliWEs4LS4tKyooKCcnJycnKi0xNDg8QUNEREVHR0NAQUVGR0dHRkVBOzQwMDAwMTU1NzY2NjU1NjMzLjBJYmdze3x/eFggJCtrdmxucW9yeXNjV1xcW15cVUE1NTY1MzAtLzRESUZGWGRUUVZaWlleXmJkZWRgYGBkY2RjXFdUTT86Q1ViZ2drZ19aWVtdXW5+d3BwcnFxc1hGRUtOUVddZWpsbXJ4gIeNj4+Pjo2JiH9za15MNC0sLCwtLCwtKysrKystMTY6OztCTFpygY6QjoyKh4eGgXxzaGBdYmZjYmJZR09NRz45PT85Iy8zLkdYWlxfY2RjZmtydnd5eXl5enx+fXx9gIOFhoaKjI+PjoyNjpCQj4+RkZKSkZGRkI+Oj4+NjYyMj5CRkZCMi4qLioSAf3+AgICAg4SMkpCOjIqJiYmMj46EgoKBgYF+fn+CiH9+enh2cnBwbmxraWloZmhpaWlpa21zfYeLjImJiIaFhomLj5KUkpGQj46Ni4qIh4WHiJKWlZOSkpGRj4+Ojo2QkY+Oi1BPTk5NS0pIR0VEQkA+Pj08Ozk4NzY3NzU1NTU1NTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMzMzMzNDU0NDMzMzMzMzMyMjIyMjIxMTExMC8vLy4uLi4tLS0tLCwsLCwsLCwsLCwsLCwsLCwsLS0tLS0tLS0tLS0tLS0tLS4uLi4uLS4uLy8wMzM0NTc4OTo7PUBERUlKTE5NT09QUVJSUlVXWVpZWFlYWFdWVFFPTk1MSklIRkRCQD47OTc3NTMxLy4sLCwsKyssLCwsLCwvQ19XU1hjaD4qLTNATFBMTExNTlJWWVZUZ2traGNiYl5bSisoJyYlIyMhISIiIyQmKTA5RU5RUlBPT05NSklJSEdHRkNBPDcxMDAwMDE1Njc2NjY0NDU1NTQxMDVJXm93eXllMCppem1ubW5yeHdcWFpbXF1hX19HNjU1MzEtLjA0RkpJTGVsU1NTUlNXXV1hY2JfXFxcXV9eWllRTkM6Nz1PYGdgaWpgXFxcW2F4fnVycHNxcWxMQkVJTVFXXmRqbnV5f4aLj5KSk5OOjYyIgHZrW0QwLS4tLS0tLCwrKysrLC80Ozs9QE5idoiQkpCMioiIh4J7cGVfREZjaWVhXlNjbWdfVkw9QDs5PEBLWV9hY2VmaG5ydnl6fHx8fH1+f399foCChoaGiY6Tk5WWlpeXl5eXl5eVlZWTkY+Mi4yMjI2OjoyMiYeFhIOEhYSDhISEgoKEhIOHjo+Ni4qKiYmJjJCMgoGAgICAfn5/god+fHp3dXJwcG5sa2lpaGZmZmhoaWpvdn+IjI2JiYeFhoWKjJGTlJKQkI+OjIuKioiHiI2UlpSTkZGRkY+Pjo6NkJKQjotUU1JQTk5NS0lHRkRDQj49PTs5Ojg2Nzc0NjY2NTU0NDQ0NDQ0NDQ0NDQ0NDQ0NDMzMzMzNDU0NDIyMjIzMzExMzMyMjIyMTEwMDAvLy8uLi0tLCwsLCwsLCwsLCwrKysrKysrLCwtLS0tLS0tLS0tLS0tLS0tLS0tLS4uLi4uLi4uMDEzMzU1Nzc4Oj1ARERGSElLTU1NTU5OT09QU1RTVFRUU1NSUk9NTUtJSUdHRkRAPzw8Ojc1NDIxLi0sLCwtLSwsLCwsLCwtLjVUYVZYX2ZhMCsvNkFMSkZHSEdITVZVU1hpb3BjWlxkYVdDJyUlIyEhIiIjIyQnKS86S1VUUlBPT09OSkpJSUdERENBPTczMDAwMDE0NDY3Nzc7ODk1NjUzNTYwLjA3P0VCNSxqeG5ucnFwenpdWFpcX2FhYGFPQDc0NDMwLy0tMjY+QUJKTlFXWFVUVVpdX19aWlxbXV1ZVFFNR0E8NjY9T1xeVmBsYl1dXVxsg351cXFyc3BfREJGSExPVl9jZ3J8gYWJjpGSk5OUk5COjIaBdGdWPS8vLi4uLi4uKyssKy0uMDc8QEVSaoCNkJCOjIuKiomDfHBkY1A9XmdiZWVoaGhobG9sYk9ES1FRWWFmZ2tucnN4e3+Af39+f35+f3+Afnx9foOEh5CUmJqeoKCgoaKjoaOioJ2dmZeUj4yMjIyMjYuHhoKCg4ODg4OCg4WFh4iIhoWFiY2Mi4uKiYiIiIyOiYJ/fn5+fn5+fYCGfnt5dnRxb25sbGtpaGdmZWVnZ2lqcHeAiIyMiImHhYSHi46TlpSSkJCPjYuJioqKiouRlpaUkpORkJCPj46Ni5CTkI6LVVRTU1BPT01LSUZGQ0JAPj07Ojg5Nzc3NjU2NjU1NDQ0NDQ0NDQ0NDMzNDQ0NDMyMzMzMzMzMzIyMjIyMTExMTExMjIyMjExMDAvLy8vLy4tLSwsLCwsLCwsKysrKysrKioqKisrKyssLCsrLCwtLS0tLS0tLS0tLS0uLi4uLi4vLzAxMTE1NTc3Ojw8PkFDREZGSEpKTE1MTk5OTlBRUFFQUE9OTExKSkhGRkVEQ0JAPzw6Ojg2NDIwLy4tLSwrLS0tLSwsLCwsLC4uP2FgV1hfZ08oKi42Qk1KR0lFREhLTVRXXm1xZl9gZGVeVDkhJCIhICIiIiQnLDE/UFtZWFlWUlVRTkpHRkZEQUA/PDk0MDAwMDEyNDQ2Njg8Pjw5NTU3NzU0NDEwLy0uKzFldm1rb3Fwd3tjWVteXmRmZlA+ODs4NDQyMjEwMTM0NzpCS1BYW1laWVldXV1dWlpbXFxZVFBNST04NjU2PUtTVFFZaGVbXV1hd4N9dnR1dHNxUj9CRkdLT1ZfaG91gYiOkJGUlpeVlZOSjoyMh31zYk01LS0tLi4uLiwsLCsrLSwyN0tcZHSIkpGOkI2Mi4uIgnlsY2JjWl5lY2NlZmlpZ2dqb29wcG9rZGdtcnN1dXl6gIKChISCgIGAgH58e3p4eXt8fYWPnKOmqqurq6usra6wraqqqaOfmpaQi4uLi4mHhISBgICAgICAf4GCg4eKiYaEhYmLjIuLiYmJiYmLjYiDgH5+fH58fH2Ag317eXZ0cW9tbGxraWhmZmVmZ2dpanF6hIyNi4qKhYSEh4yRlZWSkZCQjoyKiYmKiYuRlJWTk5SRkJCQj4+OjYuQko+NilhXVVNSUlFPTUtISUVDQD49Ozs5OTc3NzY1NTU0NDQ0MzMzMzMzMzMzMzIyMzMzMzQ0MjIyMjExMTExMTAwMTEwMTIwMTEwMDExLy8uLi4tLS0sLCsrKysrKyoqKioqKikpKiorKyoqKysqKysrLCwsLC0tLCwtLS0tLi4tLi8vLy8wMTMzMzM1Njc5OTs9P0FDRUVGSElJS0tMTU5OTU1NS0tKSEdGRERCQ0NCQEFAPjw7OTY3NDEwLy4tLS0sKy0tLS0sLC0sKystLTRQZVlXWGBnPSMsLzZDS0pGRENCRUZIUVdlcmppaGJdWFxTMigkISEgISIlKS89U15eYGBcW1tUUUtGQkFBPz43Nzg4MjEwMDEyMzM0Nzg7QEE9ODg3NTU0NDMyMC0sLTZsd2xqb25ud3poXFxbXWBhVzooLjc7OTUyMDAzNjQzNTo/R1BVWFdUVllZXl5dXFpbXV5eWlRSUUc7NzUyNDpGTVFTVmRmXV5bZoCDend2dHN0dmtLPUJFSlFVXGt5foiPkJKVlpiZl5WSkY+NjIuDeW1dQzIuLC8vMDAuLi4rKy0uLjRDYXeBjpSSjo2MjYyMhYB1Z2BfYWFiYWNkZGdnZWVobnJydnl+gYF9fHx+fn+BgYaGhoiHg4CBfnx7eHd0cnN0dHR+kKasr7G0tLS2t7q7u7q0s7KuqaWdlY+NjouIhoKBgH56enl7e3t8fX+BiIqIhYWHiYqLioqJioqJioyIg4CAgH5+fX1+gYJ+enh1cnFubWtqaWloZmZmZmdnaWpzfIaNjYyMiYaEhIaMk5WVkpCQj4yKiYiIiYmNkZaVkpKSkZGQkI+PjI2LjpGPjIpZWFdXVVRTUE5NSUhFQ0E/Pjw8Ojg3Nzc2NTU1NDQ0NDMzMzMyMjIyMjIxMTIyMjIzMzIyMjIxMTExMTEwMDExMDEyMDAwMDAwMC8vLi4uLS0tLCwrKyoqKioqKioqKiopKSoqKiopKSsrKyorKywsLCwtLSwsLS0uLi4uLS4vLzAwMTEyMjIyMzY2ODo6PD0/P0FDREVHR0lJSUpKSkxMSUdGRkRDREFAQUBAPj0+PDw5ODY0NTIwLy8uLi0tLCwtLS0tLCwtLCssLC0vO1phWlVZZWQzJiwvOUNLSEVFQ0FBQUhQWmt1d3BeUFVgYkooICEhISEjJSs2TmBiZWRiX1lPSEE4NTAwMjc3NTY5ODQyMTExMjMzNTY3Oj49Ojg4NzU1NDQ1MzMsLUJtdW1qbXFxdnlnYVxgXmFYOikpLTA3Ojk1MjAyODc1NTo/SE9SWFtXT09WWmFhXlxaW15dXlpYVldOQjw2NTU8Rk9VU1JeZ15aXG2CgXh2dXN0c3F2dFNBR0xNUF9zfYSOkpSUlpeZmJORjouMj4yMiH5zZlc+MTQ5Ozs8ODYyLSorMDIyQ195i5OTko+OjIuKioV8b2JfYmFhYmJkZWVlZ2dqa3BydHh9f4GAhIODhYWEhYWIiIiHh4OBgHp4d3R0cHFvbm5xdY+rsbK3ubm5u7y+vb28u7q5t7CsoZaUlZCIhYSDgn58eXd2dXZ2dnd5e36FiISBgYSIiYqKiYqKiYqLh4SCgICAgH19foGBfHl2c3JubWxra2ppaGZmaGhoaGltdH2HjI2LioiDg4WIj5SUkpGQjo2LioiIiIuNj5KUkpGQkJCQj4+OjouMi46Rj42LW1taWFhYVFFPTkxJR0RCQD89PDs4ODg3NTU1NTMyMzMzMzMzMjIyMjIyMTEyMjAwMDExMTExMTExMS8vMDAwMDExMTAvLzAvLS8uLi0tLi0tLSsrKyopKSkpKiopKCgoKCgpKCkqKysrKysrKywsLCwsLCwtLS0tLi4tLS4uMDAwMDAwMDAxMjQ0NTc4ODo8PD0+QUJEREVFRkdHR0dGRUdEQ0NDQUFBPz09PTo8PTs5ODY0MzMyLy8vLi4tLS0tLS0sLC0tLS0tLS0tLTNIZ2BXVVxnXykmJi81QEhHRkRBQEBCSVRfbnJvYFBUXV5XOx8hISIiJCcuRF1jY2RjXE5ENywoIyEjJygrLjE1Ojw5NDMzNDc2Nzk7PT1AOjg5NzU2NTQ0NTMwN2J9eG1na3FzdXdgWlxfYWJTLSYoLS8zNjQ3NzQxODs4OTk+Rk9UVVdXVFBQUldeX19fXFxeXFtaWlxcWEs/PDg5RE5UVVZWW2RhV192gH15dnRwcnJqand4WEVJTVZjd4KKkpSVlZaXmZSQjYmEgYeNjYuHfHFjU0VHTFBQUE1IQ0A4MTIxNEVkfI2Uk4+Mi4uLiIaBeGtgX2NiY2FhYmNmZ2hqb3NzdXt/gYOFhoeIiYmIiIaGiIaFhIOBgH55dnNwb2hmaW1wbW6YrbKzuLy8vb2+vr69vLu7u7u2sKeenpaLgIGAgYB7eXh2c3JvcnBwcnJ2d3+EgHt+hYuLiomKioqLioaEg4GAgIB+foCDgXt4d3NwbGxsbGppaWloZmlpaGhpbHWAiYyLjIqGhISGipKVkpCPjo2Li4mHiIqMkJKSk5GQkI+Oj46OjYyLi4uPkI6LiVtbW1tZWVZUUk5NSkdFQkBAPj08OTk4NzU1NTUzMzMzMzMzMzIyMjIyMjExMjIwMDAxMTExMTExMTEwMDAwMDAwMDAwMTAwLy8uLi0sLCwrKysrKyspKSkpKSoqKSgoKCgoKSgnKSoqKioqKysrKyssLCwsLS0tLS4uLS0uLjAwMTEwMDAwMTI0NDQ2ODg5Oj0+PT4/QUJCQ0RFRURERENDQkA+Pj09PTw8Ozs7Ojo6Nzc1MjIyMjEvLy8uLS0tLS4uLS0uLS4uLi0sLC0tM1NoWldZXmlRIyUqLDM+RkhEQ0JAPEFJUmZwcGtgW15dXVQrHyEhIiUqNlFkYmNlWkYwLCklJCIjIyQkJigqLzk7ODQ0NDQ3Oz09P0JCRUA7Ojg2NzY2NzUwS3V9dGtpbXF2enVhW19aX2dLKCgrLi0xMDM4Ojc8RkU+Oz4+R01WWFRTU1NQUVNRVVpeXl1aWllZWVheZGBPQ0I+P0ZSVVVVVlhhYFtpgIB8d3VzdXNqYGJrdXhYRktYb32Gj5GSkZGSkpKNh4B+enqBiY+MioN4c2lkX2JmZmZiXVZRSkE4NDZNbISRkpKPi4qJiYeBfHJkYmBiY2JiYGFiZGdscHR3e3x/gYWHiImKioqKiIiGhYKBfn99fX18eHNuamZmX2htcGtvn6+0uLu+vr69vr69vr28u7u7urWspp2Jenp9f39+enh2dHJvbWtoaGpqbGpveYF9dnuCi4qJioqKi4qGhYSDgYGBfn6AhIJ6d3VwbmtqaWlqaWlpaGZoaGhoanB3gYmMioyKhoSEiIyUl5ORj42MiomIiImNj5KTkpKSkpOXmJOOjoyMi4uLj5COi4lbW1xcW1lXVlNRTkxKSEZEQD49PDo5NzY1NTQyMjIzMzIyMjIxMTAyMjIyMjIyMTExMTAwMDAwMDExMDAwMDAwLy8wLy4uLi4tLS0sLCwrKisrKiopKSgoKSkpKSgoKSkoKCgpKCkpKSoqKioqKysrKywsLC0tLS0tLS0tLS0vMS4uMDAxMTIyMzMzMzY2Nzc5OTw+PkBAQUFBQUFBQD8/PT4+PDs7Ojo6Ojk5OTg2NjU1NTIyMTExMDAwMC0tLS0uLi4uLi0tLS0tLS0tLi84V2NcWFljZEAhJSkrMTtGSUJAQD49QEVVanNybWtpaGllRCEiIiMnLj9eaWVkYkwzKispJSMhIyIiIyYoKy83OTY2NjY3OT1AQkNGSEdCPzs4NzY2NTQzSX55cm1pbHFzeXVkW15dYWFEJCkrKy0uMDQ3Oj05PkpGPDk9RUxQVFhVUlJSTk1PTlBTVltaWFpaW1ZUWmFdTkhGQ0NETFJVVVZWX2Bhcn98eHd2dHZ0ZF1gZ2xzc1ZPXnODjpGRj46MjYyIhX1xb3R2eYGMjouGgH16eHl7fXx6d3JrZlxWS0ZLW3GHlJKPjIiJh4aFfHhrYWFkYmFjY2VoaWtucXV5fX1/goWHioqKiYqIh4iGhYN+enZ2d3Z2dXNtaGJcX2RhY2dtgqGrs7i7vb29vr22vr++vb29vby0qqCFc3R5eXl6e3p4dXJwa2dmZmlqaGRlbW53e3d3fIKHi4iIiouJhoeEg4SCgYCAgISCe3d0cnBsbGtramppaWdoaGhpaWtxfISKjYqNioWEg4iPlZaUko+OjIqJiIuLj5GTlJOSk5OYoaGbko6Li4uMjI+Rj4yKXl5cXFtZV1ZUUk9MSkhFRUNBPTw6OTc2NjU0MjIyMzMxMTExMTExMTExMTExMTAwLy8wMDAwMDAxMTAvLy8vLy4vLi4tLS4uLCwsLC0tKiorKyoqKSkoKCgoKCgnJygoJycnKCkpKSkpKSkqKioqKiorKysqKiwtLS0tLS4uLS0vLzAwMTEyMjQ0NTU2Njc3OTo7PD4+PkA/Pz8/Pz4+Pjw7Ojk5OTg4ODg3Nzg4NjY1NTMyMjExMTAwMDAvLS4uLSwtLS0sLS0tLS0tLS4vMD9fY1hWWWJhLiMnJysuN0NHRkJCPjs8RFh2fXNqZ2JudF0vICEkJzFIaG1tbF03Ki0pJyUjIiEjJSMkJiotNDY2NjY2Nzk9QERGSEhHQ0A8OTg1NDQxOnOCdW9ucXN0eXliXmBdYWdJJSUqLzk6Nzg+Pj9BPj1GRD89QEZNTkxNTEtOUU1MTk9PUVJTVldXW1xWVFVXVU5LS0dFRUhOVVVWVlxkan18dnVzdXV1dWFdYmJla3NvX2l7iY2QjYuIhoaHhIB4a2htdHJ4hYuMioeEhIaKjo2Mi4eBe3RsZlxcX217i5KRjYqHh4WFhH10Zl1eX2JkY2Zna2xxdXd7f4GEhYeKjIyLi4qLioaEgIGFgXduamprbGpkW1dUUVJVU1dggp+hqraztbu4uLy+vL29v729vb28uaZ9aW1xdHV2dnd2dXJvbmtpZGlwb3BrZmx0c2pla3B1doGIiIuLh4aGhYWFhYOCgoCDgn13dXJxbGxra2ppaWlnaGlpaWlrcXuGi4yLi4qFgYSJk5aUk5GPjYuKiomNj5GSk5OSkZGTnKOknJCMioyLjI2OkI6Mil1dXFxbWVhXVFJQTkxJR0RCPzw7Ojk4NzY0MzMyMjExMTEwMDExMTEwMDAwMDAwMC8vLy8uLi4uLy8uLi4uLi4uLi4uLS0tLSwsLCwtLSsrKiopKCgoKSgmJygoJiYnJyYmJygoKCgoKSkpKSgpKioqKisrKyssLCwsLS0sLi0tMDAwMDExMjIyMjIyMzQ1Njc3ODs8PT09PT08PDw8PDs6Ojo6OTk4ODc3Njg4ODY1NTUzMzIxMDAwMDAwMC8vLy4uLS0sLC4tLS0uLi4tLS0xRmReVVZdaFYlJicmKCszP0lHQT8/PDpDXnFqamJhcHNxTSMfIyczTm1wcW5QLS0sKSQiIiEhIiMiIiQpLDA0NTY2Nzg6PUBESEpIR0E+PTg3NTExMF6AeHRxdHV6fH5nWV9dYmdVJiwpLTQ9R0VITE9JR0RFSUVGRURFS0xJRkNFSktJSUtOUlRRUVJVWVlcXFVSVFFPUE9LSEZFTFNWV1VZZHN7d3JzdnZ2d3JfW19fYWdrcXR0goyMjYyIhIOCg4WBeWVjaG9sbXuFi42Li4uOk5aVlpOPjYiDfHdvbHF4hI6Tj4uJhoSEhIF7b2BaX2BeYmdqbnFzdnx9gIaIiYmKjI6Li4mIh4eDfnd6fXx7c2ZaWlhUUE1XUEdRXmpsiaOorbW5u7KMmJysvr6/vr69vby9t6JyWWNpbHBwcXR0dHRycXBua2dqb25vcHBtcXZtXFtgZW16iIqLiIWFhYWFhYWCgoKChIN+eHVyb2xramxoaGlpaWhoaGhqb3V9h4yLiouIhIKHkJSVkpCQj46Ni4uNjpCTlJSSkZCQkpmjopeOjIuKi42Nj4+NjIpeXl1dW1lZV1ZTUU9MSkhEQj88Ozo5ODc2NDMzMjIyMjExMDAvLy8vLi4vMDAwLy8uLi4uLy8vLy8vLS0tLS0tLy4tLSwsLCwsLCwsLCwqKioqKCgoKCgnJicoKCcmJycmJiYnKCgoKCgoKCkqKikpKiorKysrLCwsLCwtLCwuLS4uMDAxMTIyMjIyMjM0NTY3Nzk6Ozw8PT09PDw7Ozk3Nzc3Nzc3Nzc2NjU0NDQ2NTMzMzMyMTExMDAwMDAwLy8vLy4uLy8uLi0tLi4uLS0sLjNQZ1lSWGJlRiMlJCMkKC47RUlGQD8+PkhjcG5jZWtoa2Y4ISQoMVBvcG9rRy4sKSYjIiAhISIjIiEjKCstMTQ2Nzk6PD4/QUVJSklBPT4+OjUwL1t5eHNxdHh8e35wVlxeYGheLCksLDA6Q0RFT1FTWFNNUU9DSU5NR0ZHRURDQ0RJSUhHTU5UVVRVVlhaXl9ZVFNRT09RT0xIREhRVldYW2Z1enRyc3N0dXdyX1tcYGBhZ298gYuNjIyKh4SBgYOEgHdkYmRsamJxf4mMjoyQkpaZmpmXlI+Oi4eDf31/hYqPkY2KiIWEhIOBe21eW15eXmVpbnJ3enx/g4eKjIyMjIyMiomIhYKBf3t5dHF1eXx2dmxkW1ReYUZEbJKamaeyt7i4ub6md5mMkbu+vr++vr69so1dUldeY2drbG9xdHNzcnFxcm9sb3JvbWtrbG9vb2FPUlZgdIaIi4iFhYSFhYWEgoKCg4SDgH14dHBtbGtpaGhoaWlpaGhoa3B3gImMi4yLiISDi5KWk5KQkJCOjIuMjI+TlJWSkZGQkJKZoJ+XjYyLi4uNjY+PjYyKXl5dXVtaWVdUU1FPTkpIRUNAPDs6OTc2NjQ0MzEwMTEwMDAwLy8uLi4uLjAvLy8vLi4uLi4uLi4uLi0tLS0sLC0tKyssLSwsKysrKioqKSkpKSgnJyknJygnJycmJiYmJiYnJycnJycoKCgoKCkpKSgqKiosLCsrLCwsLC0tLS4xMTExMjIxMTMzMzMzMzU1NTY3OTg6Ojo6Ojg6Ojo4ODg3Nzc2NjY2NjY1NDQ0NDMzMzMyMjIyMjExMTEwMDAvLy8vLi8vLi0uLi0tLi0tLS0vNltiUlFXYWI5IiMjIiInLDZCSEdDQkI/UGdiWFpdZ2tuWigiJS1GZm1qZkArLCcmIyEfICEkJSMjIiQoKy0vMzM2Ojw9PT5BRklLQz8/QTwyNWB3cmxzdHh6fHx1W1pdXWRnOisrLC0uNj1BR09UWGZiV0lDRE1MSUdFQkBBQkJDR0lHSEpOU1ZXV1laWl1hXVlVU1JSU05NSERFTVVYWltmc3Zxc3d4dnV2cWBbXl1gZGdzf4iRkI+NiYaEg4OEg390YmNjaWleanuHjI6OkJKVmZqampeWkpGNjImHhoqMkI+LioiHh4WFf3doWlRYXmJoa29ze4GEhomKjo6Mi4yLioeHg4J+fXp6enVnXGFybW5nZV5fcXNJWpmssbS5u7u9vry7tay4sLO8vr6+v766p3VIRU9SWFxgZGtvcHBwcnJxc3Z2cnJ4dGxnZ2lucnJpUkFNV2+Dh4uIhYOEhISEg4OCgoSDhoJ+endybmxsaWhoaGhoaGhoaW1xeoSLi4qMi4iEhY6UlZOSkZGOjYyLjI6QlZeVkZGPkJCTm6Cclo6KioqMjI2Nj42Mil5dXV1bWllXVVRRTkxJR0VEQj08Ojk3NjY0MzMyMTExMDAuLi8vLi4uLi4wLy8uLiwsLi4uLi4uLi4tLS0tLCwsLCsrKywrKyoqKikpKSkpKCgnJicoJycoJyYmJiYmJiYmJycnJycnJycnKCgoKCgpKioqKysrKywsLCwtLS4vMTExMTIyMTEzMzMzMzM1NTU2Nzc4ODk5OTk5ODg4Nzc3NjY2NjY2NjY2NDQ0NDQzMzMzMjIyMjIxMTExMDAwLy8vLy8wMC8uLi4tLS4tLCwrLS09YlxUVVpfVy0fISIhIyIoMkJKSkhDQkFYX09MT1dfaGtDHiMpOVloaWJBLComJCIgHx8hJCQjISEjJCcrLTAzNjk8PT0+QURISUdDQT84THB2bW1scHZ2eXpzX1ldXF5lSSktLDExMDU5QEhPV2FraFdKR0pOTkpFQUA+Pj8/QkRGSElMTU9TVlhZWFpbXV5cWFhXV1RPTkpFREdRV1laZXJ2c3Z6eXh1d3JfWFlcX2RreIOOkJGPjImGg4OChIJ+cWJhY2ZnXWh7h46OjZCSk5iZmpqYlpWSkI+LjI2NjZCPjImJh4eGhH52aF5XVWFqZ2hvdn2EiYuNjoyNjIuJhoSEgX99fXl0b25qXVNJZW5ucHVoVVxqTG+mtLi7vb+/vru0s7e6u72+vr+/vbuwl2RGS1NRT1FVWl5iZ2ptcHJxcnJ1eXlyc3dxcHBvcXd2c2hLRVlwhIiLg4GBgoSDhIODg4OEhYeCgHx5dXBubGtoaGhoaGhoaGltcnuFi4qJjIqHhImSlZWSkZGRj42MjIyOkZaWk5GRj4+SmJ2cmY+Mi4uMjI6Mjo6MjIpeXl5eW1paWFZTUU9NSkpHRUJAPjs5NjY2NDMzMTExMS8vLi0tLS0tLi4uLi0tLi4sLC0tLi4tLS0sLCwtLCwsKysrKysrKysqKiopKiopKSkpKCcnJiYmJiYlJSUlJSUlJSQlJyYnJygoJyYnJykpKCgqKioqKiorLCwsLi4uLzAwMTEyMTExMjIzMzM0NDQ2NjU1Nzc3Nzg3Nzc3Nzc3NjY2NjY2Nzc3NzY2NjY0MzMzMzMzMzIyMjIyMjExMTAwMDAwLy8uLi0tLS0sLCwsLCwrLUdkV1JVW2NWLCEiHyEgIicwPE1ST0tHS2FdUUpLTVluYy4eJTFSZGBWPywmIiIiIiEhIyUlIyMiIiQoKSwuMjQ0OTo8Pj9BQkFCPjtIX3RxbGppcHV0dnZxYFlcXV5mXykrLzAzMjU4ODg/SFhpbF9VTU1QU1VTTUU9PTw8PD9DRkhKTE1NUVNWWVlZV1hcW1pZWFhUUE5JRUNETVNXW2VubnBydXZzdXZuZ1xYXV9oc4CNkpGPi4uJh4eGhYeFf29hYWFiZWFse4qOjY+Qk5WWmZmamJeUko+QkJGPjo+Pj46LioiIh4N+dmxiXl9nb3NzeX2Ch4uMjY2OjIqIiYSBf317d3V0c2txb19ZcHNta2xzalpYW1d1qri6vL6+vLixqrW6vL6+vb6/u7SbclFLVFRRTU5OTlNWXGBkaWxvb3Bwc3mDgXZ3d3NzbWlwcnBvYUJLcISJiH9/gICBgoKDhISEhIeIhYF+e3h1c29samhoaGdnZ2hqbXN+iIuMiYqIhoeNlZWTkJCQkI6MjIuMj5SVk5GPjo2Qlp2dmJSPjImKjI6Lh4+PjYyKW1tbW1taWVdWU1FPTUpIRURCPz07OTc3NjQzMzExMTEvLy4tLS0tLS0tLS0tLS0tLCwtLS0tLS0sLCwsLCwrKysrKyoqKikpKSkpKSkpKSkpKScmJiYmJiYmJSUlJSUlJSUkJScmJycoKCcmJycpKSgoKioqKioqKywsLC4uLi8wMDExMjExMTIyMzMzNDQ0NTU1NTc3Nzc4NzY2NjY2Nzc3NzY2Njc3Nzc2NTY2NDMzMzMzMzMyMjIyMjIxMTAwMDAwMC8vLi4tLS0tLCwsLCkqKiowUWZVUFZcYlstHR8hICAgJis5SFFUTUlRZVxOTlBTZXRLISQvTmFZVUs7JyIiIiIhISMlJSQjIyIkJykqLC8xNDY2ODs7Ozw7N0ljcnNtZmdqb3B1e3dtYVpZXF5gZEAtLC8wMjU4OTczNkFSXFVLSFBSVVVXWlVMQD07Ojo9P0RHTExNTU9SVllZWVhZWlpYVVVVU09MSURBQkhPVlhiampqbHBzcXNya2VfWVpgb3uHkJSSj4uLiYeJiYmJhoFvYWFhZWtpcYWPkI6PkJKSk5aWl5WUkIyLi42PkZGRj46NjIqIiIeDgHlybmpobnl+gYWFiYyOjo6Ni4qIh4SAfXp3dXZycnJvbnBxcm5vcW1raGZZU19jfKm3ur29u7q2r6WwuLu9vr+7tql+VU1SUlFPTE1OT09PUVZbX2Nna3BxcXJ0fHx3cXN4cWpgbXZ4d25cYXmEiYR9fX9/gICBgoSEhIWIhoWDgH17d3RxbWxoZ2dnZ2hoaW11foiLi4iJiIeJkZWTkZCQkJCOjIyLjZGUlZGSj42PkpuempOLi4yKiouMioaOjo2MilpaWlpaWVlXVFNRT01KSEVEQj89Ozo5NzY0MzIyMDAwLy8uLS0tLS0tLS0tLS0sLCwsLCwsLCwsLCwsLCsqKigrKysrKSkoKCgoKCcnJygoKCgnJiYmJSUkJCQkJCQkJCQkIyQmJiYmJiYmJicnKCgpKSkpKiorKywsLCwuLi8wMDAxMTIyMjIyMzMzMjM0NDQ0NjY2NjY2Nzc2NjY2Njc3Nzc2NjY2Njc3NjY1NTQzMzMzMzMzMzMyMjExMTAvLy8vLy8vLy4tLS0tLSwsKyssLCsoKTVfYlNQVVxmYTIeIB8fHyIoKjdDUlRPSltpW1BLUVpwazUgLEpjXVRNRyoiIiIiISIkJSUmJSMkJCcsKyoqLi8vMTI2OTg0MU93cG1nZGZpbXBwd3BtY1xZWl1eYFExLy8yMjU4PDs6ODw9S0U9O0VRV1ZYWlxaUUY+Ozs7Oz1CRkxOTk1QUFVaWllZW1xZVVFPT0xLSkhEQ0FDS1JXYGdnaGptb21wbWRjYlxaZHOBjpKSko6Li4mIi4yMiomDc2JgYmhydX2MkY+Pjo+Qj5GSk5STkYyIhISHjZGSkZCRkY2LiomIhYF7eXhzcnh/hIaJi46Pjo+Ni4eDgYB8fHp5d3NxcG9tcHBramtucHFtaWVqY15jX3altbq8vry6ubWjrK24u7y5sZNlSkxTUlFRUVBQT09PTU1RVFpeYWdpcHFydHNzdXN2e3x0cX2DiIl/cHmAg4Z9eXx8fX5/f4GCg4OFhoiFhIKAfXt3cnBuamloZmdnZ2tveIGIiomIiIiIjJOTkJCQj4+Pjo2NjZCTlpaRkI+OkJednJePiIiLiouMiYSAjo6OjYtcXFxcWllYVlVUUU9OS0lGQ0A/PTs6OTc2NDMyMjAwMC8vLS0tLS0tLCwsLCwsLCwsLCwsLCwsLCwsKysqKiooKSkqKikoKSkpKSkoKCgoKCgoJiYmJiUlJCQkJCQkJCQkJCMkJiYmJiYmJiYnJygoKSkpKSoqKiorKywsLS4vMDAwMTEyMjIyMjMzMzMzNTY1NTY2NjY2NjY2NjY2NjY2Nzc3NjY2NjY3NzY2NTU0MzMzMzMzMzMzMjIxMTEwLy8vLy8vLy4uLy0tLS0sLCsrLCwpKScpOmRgVVNWX2lkNBohIiMjJCUrMz5NU1BTZ25aTk5TYXRYIyg+YWZZTUIqIiIiIiEiJCUmJyUmJSUoMC8qKSkqKisrKywuLE5ycWtoZ2tvb29wdmlYZWFcWlpZVVg0Li4zNjY2Nzk7NzhAP0I7MTlFT1JQUlVTUUpEPTk5OTs9QkZMTlBSVFRVV1laW1xcWVJMS0lJR0hFRENBQUZLVF1kZGVoa2xrbWpfYGhkYGh3iZCSkpGOioqJioyMi4yKhnViX2RrdnuHkJGQjY2Ojo6RkZCOjYuIhH5+g4uRkpGQjo6Ni4qLioiFgoB/fn2AhIeJi4yOjo6NjYeBfnh1cW1tcnNwcHFvbm1sa2xvbm5uY1lgZWRgWlVgnrS5u7q4uLi0rrCpsrq4rH9RTE1SUlJQT1FQUE5NTU5MTlFVWV5jaGxucnFwcnZ4f4aHhXqKkZKPiX95f4WDenh7e3t8fX1/gIKDhYaHhoWEgH17endzb21qaGdnZ2hrcHqDiIqIiIiHiY+Uk5CQkI+Pj46NjY6SlZWSkI6PjpObnJqRjYuLi4uLjIZ/fYyNjYyKWVlZWVlYV1VTUlBOTEtJRkZEPz09Ojg3NjQzMzIwMDAvLi0tLSwsLCwsLCwtLSwsLS0rKywsKysqKioqKiooKCoqKSkpKSkpKSkoKCgoKCgnJiQmJSUlJSUlJSUkJCQkJCQiIyUlJSUmJicnJiYoKCkpKSkqKiorLCwsLS0vLzAwMDAwMTIzMzIzNDQ0NDU2NjY2NjY2NTU1NzY2NjY2Njc2NjY2Njc3NjY2NjU1NTQzMzMzMzMzMzIyMjIxMTAwLy8uLi8uLi4tLS0tLS0rKywrKygnJydCa2JUUldfaGM4HSEjJCQkKCkqNkZRVFhsaVlQVFhoc0EpM0ZPSjwvJSEhICAhISIlJicmJCgmKCsvLCgnJigmJCQhKkxybm1oaGxtbm1wcltLaGZgXFpZUVlMKi4xNjk5Nzg4Ojc1Nzg2MzI4REtNS0tNTUhFQj46ODg6PkFFTE5RVFdYVlZYWlxdXFhQTUpMSkZFR0RFRURBRk1XYGFiZWhpaWtmWl1naGpwfY6QkZCPiYmJiYyMioiKi4V3ZF9mcHp/jZGTko2NjIyLjY6Oi4mFgn9/fYSKkpSSj42MjIyNjYyLioiEgYOChIiKjI2Oj46PjYqEe3ZvZ2FcX2Noa2xwcXJvb25sbG5tbFVATVhfW0hAWYywtrm2r7W3q6+xrba2qoBOT1FPUVFTUlJTUVBOTkxPT05OU1VYXGJmaW1vcXR8hY6WlZKHkpiakIiEf3+DgXZ2eXp6enp7foCBgoOGh4WEg4KAf356dXFvbGtqaWhqbHN8hYiKhoaJioyPk5KQkJCPj4+OjY2PkpWVko+Pj5OZnpyWjoqKiouLi4qEfXyMi42LiVlZWVlZWFdVU1JQTkxLSUZGREE/PDw4NzY0MzMyMDAwLi0tLS0sKysrKyoqKiorKywsKysqKikpKSkpKSkpKCgpKSkpKCgpKCgoJycnJyYmJiYmJSUlJSUlJSUlJCQkJCQkIyQlJSUlJiYnJycnKCgpKSkpKioqKywsLi4tLy8wMDAwMDEyMjIzMzQ1NDQ1NjY2NjY2NjU1NjY2NjY2NjY2NTY2NjY3NzY2NjY1NTU0MzMzMzMzMzMyMjIyMTEwMC8vLi4uLi4uLS0tLSwsKyssKysrKCUjKUhtYVlXV19nZ0MfISQlJiUlJCcvO0pQXHRlV1VXX3JqMiwsKCklIyAhISAgISEjJCcpLi8sLCgmKykoJyUkIiIkJVd0bW9sbG5va21yckY+aGxlXFhaUFhXMCsxNTk6PDw7Pjs1NTQ2My4zOURJSEhGRkVEQkE+Ojg4Ojw/REdMT1NYWVZWWFpbXFhWUEpLS0hHRkZGR0dHRkNJUFhdYGRnaWpqY1hbY2lud4mQkY+NjIuJiYuMjYuHiIuFeWRfZnR/h5KSkY6Li4qJiYaIioqJhIB9fH+GjZSUkI2Mi4uLjIyKi4mJiIeIiIiJjY6Ojo+PjYyHgn11aFhMSU9SVFxgYmNmbXBvb25uamVOPVJfXlY+M05wpbS2r4uYsJemsrCxoJhvTU9UXVdTVFhXVVJRUVBPT09PT1BRVVhbYGhxfYiPk5qdoaKemZmXlY6KhYGBgX93dXl6enp6e3x+f4CBhYWDgoOCgX5+fXh2dHBua2loaWx0gIeKiIWFhomPlJWSkJCQj4+Pjo2Nj5OVlJGPjpCVnp+akY2NiYqMjYyIgnd9i46MiohXV1hYV1dVVFRTUE5NS0hFRUE/PTw7OTg1MzIyMjAvLy0sLS0tLCsqKysrKysrKysqKioqKSkpKSkqKSkpKSkpKCgoKCcnJygoKCcnJyYmJiUlJSUkJCQkJCQlJSQkJCQkJCUlJSUlJSYmJycoKCgoKCgpKSkqKyssLCwtLS8vLy8vMDAxMjIyNDQ0NTU1NjY2NjY2NjY2NjY1NTU1NTU1NTY1NjY1NTY2NjY2NjY0MzMzMzMzMzIyMjEvMTExLy8wMC4uLi4uLiwsLCwrKywsKywqLCwoJSUqS21iWFZXXWRpSyMjJCQkJCIhICYyP0Zrd2NYV1VldlAjJyclIyIhICEhISAhIyMlLjlAPDovKCsrKSYlIyIjIT1zcGtsb25tcG9zazorYGtpZFxbVUtbQSkvNDk6Oj1AQD04NjU0Mi0xNDlARERBPT9BQkFCPzw6OTg7PUJFSkxRVlZUVFZYWVpWVE9KS0xLSEhISEpLSkhERElNVl5jZWVmaGVXWGRtdICPkZCOjIqJiYqLjo6Jh4eKhn1oX2p2gYySkI6KiYeFg4N/goWKjIeEgXyCiJCUkY2KiYmIi4uLioyKiYqKjo6OjY6Pj4+PjoyJhoF6bVtOXGFcXV5eWlpYWWBlam1tbWVXRz1HSktOQj9NXpWvspRSh6R9mrO3qoV2XE1OUlhRVFlhXVRVVlZUUVBSUlBOT1BSXW5+jZyio6Kgm5+jn5qamJKMiYqIh4N+eHZ4eHp6e3t6fH5/gYWEgYGBgIF+f317d3V0cm9sbGtueYGIi4iGhYeKkZSUkJCQjo6NjYyMjpGVlZGQjpCSmp6dlY+LioqLjY2Mhn1yeIaNi4mGV1dXV1VVVFRSUVBOTEpIRURBPz08Ozk4NjUyMjIwLy8tLCwtLSsqKyoqKioqKioqKioqKikpKSkpKSkpKSkpKSgnJycnJycoKCgoKCYmJiYlJSUlJCQkJCQkJCQkJCQkJCQlJSUlJSUmJicnKCgoKCgoKSkpKisrLCwsLS0vLy8xMTAwMTIyMjQ0NDU1NTY2NjY2NjY2NjY1NTU1NTU1NTU2NTY2NTU2NjY2NjY2NDMzMzMzMzMyMjIxMDAxMS8vLy8uLi4uLS0sLCwsKysrKysrKywsKSYjKC9NbWBWVVheZmxbJiIkJSMiIB8dISkzSGxxYldWWmhwMiYjJCMhISAhISEgISQiKC4zNzgyLysrLSonJSMiIy1obmtqam1wbGx0YS41X2tpZ2NgYkpbUSsrPD47Oj0/RD43NTU5ODMwMjU4PEA9Ojc6Pj4+Pz49Ojk3Ojw/RElNT1NTUVFTVVZXVFJOSktLS0tJR0pNTUxJRkFDSU9XXGFjZmZjWVplcHqHjpCOjYuIiIiKjY6MiYiHiYR9aF9seYWPkY+LiIaEgX58eHl+hIeHh4WBg4mOkY2LiIeHiIqLi4uLi4uMjY+Pj4+QkI+QjYuJh4V+d29kW21tW1JXVllgXFhYWV5kZmZjXFVGNTFHUU9SWl16oqqOX5SJc5+ytah2VklJTE9PT1NWVlJPVFVUVVRSUVFSUU5NYX6Wpauwr6qnoZ2cnp6dnJycmJOSkI2HgHl3eHh6ent7e3t8fX+Cg4CAgICAf35+fHp5d3Ryb21ucXqDiImIhoaJjZSVlJCQkI6OjY2MjZCSlJSRjY2SmJyemZGLiYiJi42NiYB2b3iIjIqIhFZWVlZUVFRSUU9OTEpIR0VDQUE+PDo4NzU0MzMyMC8vLSwrKysrKioqKioqKioqKikpKSkpKSkpKCgoKCgoKCgnJycnJycnJycnJycmJiYlJSUkJCQjIyMiIiQjJCQkJCQkJSUlJSYnJycnJygoKCgoKSkpKiorKywtLS4tLjAwMDAyMjIyMzQzMzU1NTY2NjY2NjY2NjY2NTU1NTU1NjY2NjY2NjY2NjY2NjY2NjQ0MzMyMjExMTExMTAwMC8wLi8vLi0uLi0sKysrKysrKSkpKiwtLSspJSQnLU1vYlVUV11kbF80ISQjIiEeHiAhJSpFcG5gWVlgclUjJSIiIiEgICAgICIkKC0vMjc2MSwtLi8sKSUkIiJYdm1nZ2xsbXVrTzNDYWhqamhkXkxcWzUuOkA/QEBCQj44MzU6QEI8NDM3OTk3NjU2Nzo6PD48PDo6Nzg7PkNJT1FRUU9OT1FUVVNRTExLS0xMS0tNTk5OTEdEQUJGT1RcYWNlY1xbaXaCiYuOjIqHhYaGiIqJhoiIiIiEfmpicHuHj4+LiISCgHx3cW9zeXyAg4aHhIeJjY2Mi4iHiIeIioqKioqLjY2PkJKSkJCPj4yIiIWCgHhzc3NycWlnamhpaWNXUFFXW1pWVFVVT0NDVFNWWV1nZXSknYCZiYWjr6+mfFdKSElNTExSVVFPUFBSVVdXVVFSVE9UZoimsrm8uriwqaWdnZubnqCgoZ+cmZmVkId7dnt6enp7e3t6eXx+gYJ9fX5+f39/fX18fHl3cnFwcHV9hIqJhYOHio6VlJKPj4+NjY2NjY6QkpOQj46RlpqbmJONiYqIioyNjIZ7cm53hYmKiIVVVVRUU1NTUFBOTEtJR0VEQkFAPTw7NzU3NDMzMS8vLy0sKysrKyoqKioqKioqKiopKSkpKSkpKSgoKCgoKCgoJycnJycnJycnJyYmJSUlJSUlJCQkIyMjIiIjIyQkJCQkJCUlJSUmJycnJycoKCgoKCkpKiorKyssLS4uLi4wMDAwMjIyMjM0NDQ0NTY2NjY2NjY2NjY2NjU1NTU1NTY2NjY2NjY2NjY2NjY2NDQ0NDMzMjIxMTExMTEwMC8vLy4vLy4tLi4sLCsrKysrKyopKCkrKysqKCYoKy4vUG5kWFRXWl5mZkMiHyIgHh4fICAdIUd3bV5WWmVxOiEjIyIhICAgICAjJi0yMTExLCssLTEyLionJCM8c2pqZ2lrcHRfPDtaZWdqZmdnYU1WX0YyOUU/RENFQzw7NzU2PkZFQTk1NTU2NDMzMjU5OTs7PDw7Ojk5PEFFSlBSVFJNTE1PUFFRTUxLS0tMTE5OT09PT01HREFAQkdLUllhZWNbXm98iIuKjIqHhYWGhIWEgoCGhoaHg3xqY3F+jI+NioaDgX55cGdnbXN2e36ChYWJiYyLi4uIiYeIh4eJiYqMjY2NjY+QkI6OjY2Lh4WCgH52cnBwcHFzdHFvY11hU0VFUFdUTkhJTlBNS1FRUFRTZmFgkZR8jaWoqayqn21MSEhNTk1NTlBQU1RUU1JTVFJRUVBVbpCqt7u9v7y6ta2onp6fnp6gpKOfnZ+hoJmPfHV7e3p6e3t5eXp5fYGAe3t8fX9+fn19fX17end0cnJ4gIeKiIOEiYyRlZOQj4+PjYyMjIuMkJKTkI+QlJiamJSNi4mJiYqMjYqEeG5teIaHiIiFVFRSUlNRUE9PTkxJSEZEQ0E/Pjw7Ojg2NjUzMjEwMC8tLCwrKysqKSoqKiopKSkpKCgoKCgoKCgoKCgoKCgoKCcnJycnJyYmJSUlJSUlJCQkJCQlJCMjIyMjIyMjIyQkJCQlJSQlJSYnJycnJygpKSkpKSoqKyssLC0uLS4vMDEwMTIyMzM0NTU1NDU1NTU1Nzc2NjY2NjY1NjY2NTU2NjY2NjY1NTU1NTU1NTQ0NDQzMzIyMTExMTEwMC8uLi0tLy4tLC0tLCsrKyoqKiopKCgqKistLCknKywuMC9Ia2NWU1RYXV9mUS8fIR8eHh8eHyEjVXpnXVteamAlIiMgIiEgISEgIygqLCorKyksLC00NjEsKCUybG5mZmppanBdPEhnZmFhYmNjY1dSVkk2NT07PUM/Pz05NzUzMjpCREI8NTQzMjMwMzEyNTg5Oz0+PTs6PEBESk1QU1ZVUlBPTk5NTEtLS0xMTU5OUFFQT09NSEZDQUBAQ0hSWmFhYGZ4g4qLiYmGhISCgYSCfHl7hIeFhIB7amVzgo6PjIeDgoB+dmxgX2Rrb3N3fIGChYeKiYmKiomJh4aGiImJiouMjYqMjIyMioyNjIeEgX18end0cXFxcHFxblw5NDg5PERJTk1LS0tNSUpGTVJSUGxsaoqYiYygp6ipqJBVRkdISkpJTExPS0tQT01NT1BQUU9Yd5mtuLu9vr6+vry0raSfoJ2dnZ+koJygpqWel4R2enx7enp6enl4eXx+gHd3eX19fH19fX19fHx5eHRyeoKJiYaEhoiQlpaTkI+PjoyMjIyMjpGUkpCQlZibmZaPi4qJiYqLjYuGfXVvbnqHiIiHhVJSUVFQT09OTU1LSEZFQ0JBPz08Ozk3NjY1MzIxMC8uLSwsLCsrKikqKioqKSkpKSgoKCgoKCgoKCgoKCgoKCgnJycnJycmJiUlJSUmJiUlJCQkJCMjIyMjIyMjIyMkJCQkJSUkJSUmJycmJicoKSkpKSoqKysrLCwtLi4uLzAxMDEyMjMzNDU1NTU1NTU1NTc3NjY2NjY2NTY2NjU1NjY2NjY2NTU1NTU1NTU1NTQ0MzMyMjExMTEwMDAvLi0tLS4uLSwrKyopKSkpKScnKikpKSorLSwpKSwsLTAxM0Vnal1UUlNZXmRiRiQfHh8eISEhIidmeGJbXWBuShsfIiIhICAgISYoKisrKioqLS0uMTIwLCwvY3BqZWRoa25fTWBqaGRhYWNiW19bSj80Nzg5OTs8Ojk3NTY1MTA4QUJCPTYzMTAvLzAxMjIzNzo7PT4+PT9ESEtNUFJUU1NRUE5NS0tLS0tMTE5QUFFUU1BPTElGQ0JAPj9AR1FVW2JtfIaKiomHhIOCgoKBfXZxdYGHhYSAe2ppdoWPjYqDgoB+fXhtYV1gZWltcXZ9gYSEhomJh4eIh4aGhoaGhoeJiouJiIaGh4iIh4mIhH58e3p3dnRwcXFwcW5NKTU2ODg8Q0RKUFNPS0hLTVZaWlZeX2yEkpiZnqiqp6R3REhJSUtKSUxMTUpKTEtKTE1MTU1Uc5yvuLy8vr6+vr68ubOtpKCfnZqZmJudnqWloZuLfHp9e3p9fHp6eHh7fYF2c3V3ent8fX18fHx8e3l3dHqCiYmGhIaIkJaTkJGPj46MjIuLjZCRkZCQk5ebmpaQjIqIh4mMjY2Jgnlxb257h4iIh4VRUVBQT09NTU1LSEZFQ0JBQT87Ozk4NjY1NDMyMC8vLy0sLSssLCoqKiopKSkpKCgoKCgoKCgoKCgoKCgnJycnKCgnJyYmJiYlJSUlJSUkJCQkJCQjIyMjIyMjIyMjJCQkJCUlJSUkJScnJycnKCkpKSoqKisrLCwtLC0uLzAxMTIzMjIzNDU1NTU1NTU1NDQ1NTc3NjY2NjY2NjY1NTU1NTU1NTU1NTU1NTQ0MzMzMzMzMTExMTAwLy8vLy4uLi0sLCwrLCwrKyoqKiopKSkpKCkpLS8wLisqKy8zNDc3QmNuXlNRU1VdY2pbMR4eICAfICQkM2xyYl5bYW0wHR8gIiEiIiQoKiwqLCsrKy4vMDEyLywuYG9naGdpanBoZGpraGVgYGFjYl1WSDgyMDU3Njg+QDw4NDM2NDEwN0FGREI6NDMwLjAxMzQ1NDY3OTw+QUFCRUZIS05PT1FTUlBOTEpJSUtLTU1PUFNTVVNQTkxJRkREQEFBPkFFS1RhcoSJiYmIhoSBgICAf3pua3aAiIiEgHlqaneFjIuHgoB/fXp2a2RfXl9laG1zeYCFhoaIiIeHhISHhYWFhYWFhYeGg398fX5+goKEhoaBfn16eXd2dXV0dXZrUi8uOjw+Q0dLR0dIT1BRWFhWXGBhZWlkbYuXk5ynqaagbUFGSklMS0pJSklKSkpKSkpJS0pTbJaut7y9vr6+vr6+vr65ta6lo6GdmpmZmJido6OflYR6fn17e3t7eXp4eHp+c3B0dXd3fHt8fn5+fX17eXZ7g4mJhYKHjJGVlJGQjo+Pi4qKi4yQkpGRk5aZmZWRjYqJiImKi42MiH91b29ue4WIiIeGT09OTk1NTExMSkdGREJAQEA9Ozo6NzY2NDMyMjAvLy8tLCsrLCwqKioqKSkpKSgoKCgoKCgoKCgoKCgoJycnJygoJycmJiYmJSUlJSUlJCQkJCQkIyMjIyMjIyMjIyQkJCQlJSUlJScnJycnJygpKSkqKisrLCwsLC0uLjAwMTEzMjIyMzQ1NTU1NTU1NTU1NTU2NjY2NjY2NjY2NTU1NTU1NTU1NTU1NTU0NDMzMzMzMzExMTEwMC8uLi4uLi0tLCwsKysrKiopKSkpKSkoKCkpKS0vMjEvLS4xNDc6PT4+VWplWFNSVlhfaWhOJR4gHyAlKCg7cXJdX2FrYiAdHiIhISEkKCosLC4tLS0uLzAxMTAsVXJmY2Roa3BuamhnZWZkYWFiY2RmWTUxMzMzNDU5QUdDOTQ0NTExMDQ+RUZBOjUxLy4wMTM1NjY3Nzk8PkJCQ0VGSkpMTExOT1FTT01MSUlKSkxNUFJUVFVTT01KSEZEQ0FBQUA+P0JPW3CDioqIhYJ/f3+AfnpxaGx0goeHhoF5bWx4hYmJhIF/fHt8dmtiX1xbX2BmbXV+iIeEhoaHh4SEhYSFhYSEhYWDgHt2cXBxb3V8foKFgn9+fHt8e3t7eXh5e3dnSkBBRlBbXlhLTVhcXV5cWmFkZWZra2N7lIubp6elmWNDSEpJSktKSUhISUlKSkhISUlPZo2qt7q+vr2+vr6+vr6+vrq2q6ejoZuZmZqWl5+iopyOgHt7fHt7e3p4eHl7fW5sbnF0dHh5e3x9fHx8e3p5e4OKiISDio6VlZOQj46OjoqJiouMkJGSk5eXmJaRjIqJh4qJiouNioR9dW9vbn2GiYmHhkxMTEtLS0lJSkdEQkNBQD4+Ozo4Nzc1NTQyMTAwMC8uLi4sKywsKioqKikpKSkoKCgoKCgoKCgoKSkoKCcnJycnJycnJiYnJiYmJiUlJSUlJCQkJCMjIyMjIyMjJCQkJCQkJSUlJicnKCgnJygpKioqKiorKywsLS0tLy8wMDEyNDMzMzM0NDU1NTU1NjY1NTU1NTU1NTU1NjY2NjU1NTU1NTU1NTU1NDQ0MzMzMzMzMjIxMTEwLy8vLi4tLSwtLSoqKysqKikoKCgnJycnKCgoKCktMTQ0Mi8yMzY6PEJFQT5JZG1cU1FRVVpmbWE5HxwiJScsLEh0amNgYHBGHh4hICIhJSYrLS8yMC4uMDAwMjIxTHJoYmNlanBwaWdkZGRkZGNlZmRqYkUxMjU1MzQ4OkRYXTkzMzMyMTAzOkVLRjs1My4sLzEzNTY3ODc5Oz5CQ0RGRklHSkpLTE5PUlJSTktJSEhKSk1PU1RVUk1LSUdEQ0JAQEBBQEA/RlNpeoSHhYJ/fn1/f3x1amNpdoOKiIaCeW9teYWIhoJ/fnx8enVmZWZlZF5eYWl0gIiHhYWFhoaEhISEhIWDhYOCgHp2bWJhZWVze3x9gYKAf3x9f3+AgYGCgH5+eXBoZGVoaWlkV1tgYWBgYmNmZ2prb2hibIuWn6eppI9TQ0ZLS0lKSUhGR0dHSEpHR0hJXYSjsrm8vb6+vr6+vr6+vr69uLOtpZ+bmpiWlZGTl5mZlIV6eXp6e3p5eHh5eX5wamxscXJ0dnl8fnx6fHx8en2DiIeEhIqPlpSQj42Njo2KiYqLjpKSlJiamZiTjIuKiYiJjIuLi4eBfHRub258iImJiIdLS0tJSkpISEdIRkRCQT89PDo6ODc3NjYzMjEwMDAwLi0tLCssLCoqKiopKSkpKCgoKCgoKCgoKCkpKCgnJycnJycnJyYmJyYmJiYlJSUlJSQkIyMjIyMjIyMjIyQkJCQkJCUlJSYnJygoKSkpKSoqKiorKywsLC0tLS8wMDExMjQzMzMzNDQ1NTU1NTY2NTU1NTU1NTU1NTY2NjY1NTU1NTU1NTU1NTQ0NDMzMzMzMzIyMTExMC8vLy4tLS0sLCsqKikpKiopKCgoJycnJycnKCgpLTE2NzUyNDo8PkJGSkJDQD9Wa2JXUVBTW19nbl40HCQrLC0uT3hqX19gbDQfHSAiJCYmKS0xMjMyMjQ0NDQxSXNtZmZmaW5waGVkZGRkZGVlZ2RkWUM3NTM0NDM3Oz9DTE43MjMzMjIxMjhDSEY9ODMwLi4vMDE1NjY2OTs8QEJERkZHRkdISElNUFBRTkxLSUhISEhKTlBTVFBNS0lHRENBP0BAQ0RDQUFIWWp0fICAfn18fnx3bmJia3eEiomIhHtvbXmEh4N/fXp8fHl1bGhqaGVgXl5pdoWLioiEhISEhISEhISEhoWDgH13b2VXTlFYbXZ5e31/gH9+f4GDhoeGiIiHf313cXNzcW5qZFdfYWBfX2BlZWdobG9nY2d7lZ6lpaOHSkVLSklIRkhHR0dHR0dHSUhGTG6ar7i8v76+vr6+vr6+vr6+vbu0rKahnZmVkZCNiYWEi4+Fe3l6eXl6enl5enuAcWpnZ25xcHN2eHp8ent7fXt+hYiHg4WNkpWSkI+NjY2MioqLjJCUl5iamZeSjIqJiYiJi4uLi4qGf3l0bm5vfYeJiYmISUlJSUhIR0VERENCQkA/Pjw7OTg4NjY1NDMwMDAvLy0uLS0sLCsqKSkpKiopKSgoKCgoKCcnKSkpKSkpKSkpKSgoJycnJyYmJSUlJSUlJSUkJCQkJCQkJCQkJSUlJSQkJSUmJiUmJygpKSoqKSkqLCsrLCwuLi4uLy8vMDExMjIzMzQ0NDQ2NDU2NjY2NjY2NjY2NjY2NjY0NDU1NTQ1NTY0NDQ0NDMzNDIyMjIyMjIxMTAwLy8uLi4tLCwrKyopKSkpKScnJiYnJygoJyYlJSYnKSsxNjo5NzY+P0JITE1KSUM/PFBiZVpSUlVYXF9pblIxKSkpKSlTc2JaYGpbICIkJCYqKiouMDI0NTQ1Nzc1PWlraGhra2xxZ2RlZ2hoY2RlaWheR0BCMzMyMjI3RkRANzMyMTIxMTExNDY2OkBDPDs2Li4vLzEyMzQ1Njk7PD1BQ0RFRkZHRUdISUxOTk1NS0lISEdHSUxOUFJPTEpJR0VEQ0BAQEJERERERUlTYGt0eHp7e3x2cWheYGp3hIuKioZ9b257g4ODf3x7e3t8e3NrampoZWJjbn6NkIqGg4KBgYKDg4OChIWDf396dGZeTUNEVm1zd3p8fn1+f4GChIeLjI2OjoqIf3RwcG1tY1hcX19fYGFiZGZnZWNrZ2RpdY+doKSggkc/R0lLSUZGRkZGRkZIRUdGRlqIqLe8vr6+vr6+vr6+vr6+vr25sqynpKCdmJSPjYmFgoaJgXp5eXh4eHh6enp7f3FnZWhobW9vdXt8fX17e3t6foSIh4OKkpaVkY6NjY2MjIyLi46RlZiZmpeTjYuKiYmIiYqLi4uHgX15cm5tboCGi4yLi0dHR0dFRUVEQ0NBQEA/PTw6OTg3NzU1NDQzMDAwLy8tLS0tLCwrKikpKSoqKSkoKCgoKCgoKCkpKSkpKSkpKSkoKCcnJycmJiUlJSUlJSUlJCQkJCQkJCQkJCUlJSUkJCUlJiYlJicoKSkqKikpKiwrLCwtLi4uLi8vMDExMTIyMzM0NDQ0NTY2NjY2NjY2NjY2NjY2NjQ0NDQ1NTU0MzM0NTQ0NDQzMzM0MjIyMjIyMTAwLy8uLi0tLSwrKyopKSkpKCgnJyYmJiYnJyYmJSUmJygqLzc8PTs4PEJISkxMSklFRD89R1hqZVtYWFhZW2JoZlIqIigpKFp0ZF1ibEwdJiQmKiorLTAzNzg6Ozk4N2ZqZ2lram9waGNmZ2dnaGZnaWxXQT9CNzM1MzMzN0NLRTczMS8vLzAxMjQ2OTk3OTk5NTEuLi8uLzAyNTc4OTs8PkFCQ0VFRUVFREdHSEhJSUhIRkZHR0dKT1FST0xKSEZFRENAQEBAQ0VFRUVHSFBbZG10eXt3cWZiXl9reYaLiYuFe29ve4CAf3x7e3t7fX15cG9samlmZnGBkJCJhYKBgICBgoODg4WEgn99enRnWlRLSFBjdHZ2eXt9fn+BgoSHi42Ojo6LiYF3cG9ualtfYGFgYGNhY2VmZ2NeZWZobnGGmp2fnX9GQEZHSEdIRUVFRUVGRUVERk90nrK6vb6+vr6+vr6+vr6+vr69ubKsp6OfnZiTioWEhYaLi4R7eXl5eXl5eXl3eX1yZ2VnZ2pubnN2eXp8e3t7en+FiIeFjZSVk5COjI2NjIyMi4uOk5aYl5WRjYqKiomJiImKjIyJhn98eHBtbHOCio6Ojo5FRUVFRERCQUBAQUA+PDs6Ojg3Njc0NTQyMjEwMC8uLi4tLCwsLCsqKioqKioqKSkpKSkpKSkqKioqKiopKSkpKCgnJygoJiYmJiUlJiYlJSUlJCQlJSUlJSUlJSUlJSUmJicnJycoKSkpKioqKiosLCwrLC4vLi8vMTExMTExMjMzNDQzNDQ0NTU1NTU1NTU2NjU1NTU0MzQ1NTU1MzM0NDQzMzMzMzMyMzMzMTExMTExLy8uLi4uLSwrKyoqKSgpKCgnJycmJSclJiYmJiUlJSUmKjE5P0JCPT1GS0tMSkpIRUI/P0E7SWBqZFlZWVdZXWBrZ0EmJiYoYnZkYmRqOh8hKCsqLC0tMTQ1Njg4P2prZ2lpZ2x0a2RmZ2hoaWlsbF9IOkJFPjMxNTMwMTZBW1I1MjAvLi4wMTM0ODw6OTY2NjQyLSwtLS0vMDQ3OTg7PT0/QUFCQkNDRENDQ0NDQ0NERURFRkZHR0pLTlFMSUdGRUVDQUA/QENER0dGRklHTVZfZ29zcWdTWF9ibnuIiomJhHxxcHt+f3x7eXh5eX19f3Rvbm5raWx2hZKQh4N/foCBgIGCg4OCgoGAfnlzaGFbV1FRWmhzdXd4en1/gIKEh4qNj46OjYmBd3BsamJdYGFiYmJhY2RmZ2ReWWRmZW1yepGanpp4QEJGRURIR0dFQ0RGRERDRUpkkqy4ur2+vr6+vr6+vr6+vr69vLayrKeinZuWj4eEgoGDhYmHfXt7enp5eHh3dnd9c2RkZ2Vma2xvc3d4e3t7e3qBh4iGiI+UlJKPj42NjYuLi4uNkJSWl5STjYmJiIiGh4aKjIyLhoB/e3l1dHd+iI6PkZGPQkJCQkJCQUFAQEA/PDs6Ojk3NjU1NTQzMjIyMTAvLi4uLSoqKysrKioqKioqKikpKSkpKSkpKioqKioqKSkpKSkpKCgoKCYmJiYlJSYmJSUlJSQkJSUlJSUlJSUlJSUlJiYnJycnKSkpKSoqKioqLCwsLCwvLy4vLzExMTExMTEzNDQ0MzQ1NTU1NTU1NTU1NjY1NTU1NDQ0NTU1NDMzNDQ0MzMzMzIyMjIzMzIxMTExMC8uLi0uLSwsKyoqKSgoKCgoJyYmJSUlJCUlJSUlJSYnKCsvOkJHSEM9Rk5PUE5KSkVCPz08OjY5TWhpXVhWVFVZXWNpVjIhJCxgdmNjYmcxIiosMDMyMTM3ODw4PWlxamhqaGlvbGZnampnam5uW0I5Oj9ESTszNDQyMDE2P1BJMzAvLy8vMjc2NzY5PDw5ODUzLysrLCwtLS8xNTk6Oz09PkBAQEA+P0FAPz89Pj5AP0FBQ0RERERFSEpKSUhGREVFQ0FAP0BDREVGR0ZIR0dKT1hgZmNWSU9eZW58iYqLioV8cHF6fX59eXl6enp8f4B3dHFvbmxueYiSjYaBf35+f4CBg4SDgoF/gH57eHJpZWFbV1ddaXN1d3d6fX+BhIWIjI6Ojo2JgnhwZ2NgYGFiY2NjY2RmZmZhXV1oaGhrcnWAlZ6bdTxCRUZJR0ZHRENERUNDQkVXg6W0u729vr6+vr6+vr6+vr6+vrq2sq6popmWkY2IhIJ+fXt+hX57e3p6e3p4d3Z3fXdnZWZnZWpsb3BzdXl7e318gYeHhYqSlJSSj4+NjY2Li4uLj5KUlpaRjImJiYmIhoeHioyLiYOBgX9/gIOHiYyQkJGTkUBAQUFAQD8/PT4+PDo6OTk4NzQ0MzQzMzIyMTEwLy4uKyssKywrKykpKSoqKioqKisrKioqKisrKysrKyoqKioqKignKCgnJiYmJiYmJiYmJiYlJSUmJiYlJSUlJSUmJiYmJiYnJycpKioqKioqKyssLS0tLi8vLzAwMTEyMDIyMjQ0NDU1NjY2NjY2NTU1NTU1NTU1NTU1NDU1NDMzMzMzMzMzMzMyMjIxMjIxMTEwMDAuLi0tLS0sKyoqKSkpKCgoJyYmJSUlJiUkJCQkJCUkJiYqLjhFTFBJREdSVFZSTUlEQT48PDk5Mi44VmViV1VTVlhcXmdnSysfJ2NyYWVoXScqLDI3PUNLTElASWpzbWptaWlwbmZoaWlrbmdaTDs5Oj0/QDs2NDIyMDA0Njc7NzEvMTEvMDM3Ojk3OkBBPTo1My8rKywtLS0tLzI2Njk7Ozw/PTs7Ojs9Pjw7Oz0+Pj8/QEFDQ0JBREZGR0dGRENCQkA/QD9AQkNDRERFRUVGRUdKUVVRSkVHV2ZzfoiIiIeDeW1wd3t9e3p5eXl6fICEfndxcW9vcn2Lk4yFgHp7en5/gYOFg4J+fH19fXx1cW1pZGFgY2Jpc3Z3d3t8f4OEhoiLjo6OioJ5cGViYmNkY2NjY2NjZmRjY11eaWpqbXJzdIybmHI+QUVERUNDRUREREVEQkRLbZmutrq9vr6+vr6+vr6+vr6+vr66uLWuq6CVkZCOjIqFg356eX5+e3p6enl4eHd2dXx6aGVoZ2Rlam5ucXR2eXx9fIGIhoaOkpGTkI6PjYyMi4uMjI+TlpSRjIiLi4yNjYuHiIqLiYWEhoaHiYuNj5CRkJGUk5NAQEBAPz8/Pzw8Ozo5OTg4NzY2NjUzMzMyMjExMC8uLiwrKysrKyopKSkqKioqKiorKyoqKiorKysrKysqKioqKSkqKCgoJyYmJiYmJiYmJiYmJiYmJiYmJSUlJSYmJycnJycnJygpKikpKysrKywsLC0tLi4vLzAwMDExMTEyMjIzNDQ1NTY2NjY2NjU1NTU1NTU1NTU1NTM0NTQzMzMzMzMzMzMzMjIxMjIyMTExMDAvLi0tLC0sKysqKSkoKCgoJyYmJiUkJCYmJCQlJiQjJCQmKS04RU9UUk1LU1hWU09LR0M/Ozo3MzIvLiw9WGdhWVRTVlhbYGdiQiYkXm9hZWVWOjg1PUBJTFFYY3JybG1samtwcGppa2xvalNFRkdIQ0FCQT44NDQyMC8vMzY3NjMuLS4xMTE0OT07NztCREA9NzEvKywsLS0tLS8xNDY3ODo7PTo4ODk8PDw7Ozs6Ojo9PT0+P0FCQ0NEREVEQ0FAQEBBQT8/QEBBQUJCQkJEQ0REQ0RFRkRFRVNodYOHhoeFgHRtcXh4enp6eXl5ent8iYx4dXJxcXd/jJKLhYB7enl7fn+ChIOCfnl3eHp5end4cG5sbW1saG10d3d4e32ChYaGh4iLiod/dW5qZmJmZWRkY2NjY2NkYmBfZmxvbGpweHmBjpNvQ0JHREVEQUNERERFREJDV4Wms7e8vr6+vr6+vr6+vr6+vr69vbm4squgmZWWlZSRjoqFfnZ1eXl5enp5eHd3dXZ5emdlZWRlZmlrbG5ydnl9fXyEiIaIkJOSkZGPj42MjIuLjIyRkpGPjIiIio2RlpaSjouKi4qIjI+QkpKSkZCSkZORkZKSPz8/Pz4+PT0+Ozs7OTc4ODc2NzY0MzMyMTEwMC4tLi4rKysrKisrKyoqKioqKioqKysqKioqLCwsLCwsLCwrKiosKygqKigoJiYnJycnJycnJycnJycoKCcnJiUmJycnKCgpKSkpKSoqKissLCwuLi4uLi4vMC8wMDAxMDAyMjIyMzQ0NTU1NTY2NjY1NTY2NTU2NjU1NDQ0NDQ0MzMzMzMzMjEyMjIyMTEwMTAwMC8uLi0tLCwrKysqKSkoKCgnJycmJiYlJCQkJiQjIyMjIyQjJCYrNkFMVlpWUVNYWVhUTktIRD88ODMxMC4vLCxEYWheVlRUVFhfY2hjRSxeaV1jaFArNzxFVF1kam9zampsbW1wcGxsbW1nUDxCTVFPSElMSUE6NTQzMi4tMDU1NTQwLywrMjUzMzg5OTg5QERDQjw1MS0tLSwsLi8vMTM0NDY4ODk4Nzc3Ozo6OTg5ODk6Ojk7PTw9QEFCREFCQkJAP0BAPj4/Pz8/QEBBQUFBQUJCQkNDQ0JCQkVUaXaBgIGCgntvaW92dnd4eHh5enV1doeSgHl2dHJ4goyQioN/e3h4eHx/goSFg394cHB0d3V3dnVzcnN1dHFsa3R3eHh7f4WGhYaHiIiFfXVzcGtmY2VmZmZkY2NiY2BbXWNna3Fub3J1e4mIcEZDQ0VFRUJBQkNERUZDSmqXrLW7vL6/vr6+vr6+vr6+vr6+vr69u7mzqKOioKChnJaTjH92dXd4eXp6eXd3d3Z4en1oZWVjZmRnaGtucnZ5fXt9hYaGiZCUk5KQjo+NjIyLi4uNkpGOjIqIiIuQlpual5WRj46QkZOVlpSTk5KSkpGRkpGSjzw8PDw8PDs7PDk4ODg3NTU2NTY1MzIyMTExMDAuLS0tKysrKyoqKioqKioqKioqKisrKioqKywsLCwsLCwsLCwrKiopKCgoKCcnJycnJycnJycnJycnKCgnJycnJycnJygoKSkpKSkqKysrLCwsLi4uLy4uLzAwMDAwMTAwMjIyMjM0NDU1NTU2NjY2NTU2NjU1NjY1NTQ0NDQ0NDMzMzMzMzIxMjIxMTExMDAwMDAvLi0tLCwrKyoqKikoKCcnJycnJiUlJSQkJCQkJCMjIyMjJCQlKTA6RlFZWFFRWFlYWFNPTEhEPzs3NTIvLi0vKjFIZWlZU1NWWFlcZGliVmpxY2RiSjhLX2VnZ250bGhqbG1wcGttbF09LTVJW11UT01FR0c9NzQyMzAvLDA6PTYyMS4tLTAzNjY4Ojo4OT5BRUJAOTMvLS0sLC0uMDIyMjQ1NTU2Nzc3ODk4OTo5ODg4ODg4ODk7Oz0/QEFCQkJCPz4/Pz4+Pj4+Pj9AQEFBQT8/P0BBQUJAQkFKW2t5e3t8fXlya2lwdHR2d3d3eXhyZ2yAk496eHZzeYKMjoiDf3x5eXl8f4OFhoR/eG9pbW1vcHN2dnV1d3Z1dHBtcnd6e3+EhYWGhoeHhH95dHBuaWpnZmZlY2NjY2FdWl1jZ211dXVvbXCGiHBMRERERURBQ0NDRERFRlaAo7K4u72+vr6+vr6+vr6+vr6+vr6+vr68u7i2tbGqpqOblI6DenV3eHl6enl3d3d3d3p9aGVkY2RlZ2hpbXF0enx7fYSFhomTlJOSj46OjYyMi4uLjZCPjYqKiIiLkJidnJmYlpWWlpaXl5eVlJOTk5OSkpKRkIw8PDs7Ozs6Ojk5ODg3Njc3NjY1NTIxMTEwMC4uLSwrKyoqKioqKioqKioqKioqKysqKisrLS0sLC0tLS0tLSwsLCsqKioqKSkoKCgnJycoKCgoKCgoKCgoKCgnJygoKCgpKSkpKSkqKywsKywtLS0tLi4vLy8vMDAwMTExMDIyMjIzNDQ0NDU1NTY2NjU1NTU1NTU1NTU0NDQ0NDQzMzMzMTExMTAwMDAwMDAvLy8vLi0tLC0sKysqKiopKSgoJycnJiYlJCMkJCMjIiMiIiIiIyMjJCYtNkNNU1RQTlVaW1tZVE1JR0I/PDczMi8rLCwsKzNVaV9aV1dXWVlaYmpxdXRwb25saWdlYmxyamhnam5xcm5qXD4iKTNHXV9aUk1COEVFOzUyMjAvLi83SEw8MzEvLy4uMzc4OTs4Njc8QkZDQTw3MS8tLCwtLzEzMjQ0MzU1NTU2NjY2Njg3Nzc3OTk4ODc3ODg7PT4/QEA/Pz8+Pz49PD09PT0+P0BBQUFAQD4+PkBAP0JJV2Nyend2enlxal5ibHFzdXV2d3d3cWNXbo2Ygn15eHuEjIuGgn99enp7fICEhYiHg3xzYl9kZ2hsbnBzdXh4dnRzdHR0dXp+g4SFhYWHh4eDe3d4dXNvaWdmZWRjYmJfXlpeZm10d3Z1cGxpdoZwUUdGRkZEQ0JDREVFQUpkkqq0ub29vb6+vr6+vr6+vr6+vr6+vr6+vr6+vr67sKumnY6EgXp1d3l6eXl5d3d3dnd6fWxjY2RkZGZoam1yc3t6fH6FhoaLk5aSkY+OjY2Mi4uLjY+Rjo2LioqLjpSXnJqampiamZmXmJeWlZSTk5SVlZKTjY2HOjo6Ojs7Ojo5OTc3NjY2NjU1NDQzMTExMC8uLi0sKyssLCoqKioqKioqKioqKisrKiorKy0tLS0uLi4uLi4sLCsrKysrKykpKSgoKCgoKSkpKSkpKSkpKSkpKSkoKCgoKSkpKSkpKissLCwsLS0tLS0tLy8vLzAwMDExMTAyMjIyMzQ0NDQ1NTU2NjY1NTU1NTU1NTU1NTQ0NDQ0MzMzMzExMTEwMDAwMC8vLy8uLi4uLSwrKysqKiopKSgoJycnJiYlJSQkIyMjIyIiISEiIiIiISMkKTM+R0xJRklPWVxeXVhRTkxHQz86NzQvKyopKygqKzxZZV9VWlVWV1phZWZqampnZWZiYGpzcGloa250d29cOCctNi9JZmdgXVdPNzZKQzg1MS8vLy4uMjo5NDIxLjAxMTE1Njc7ODU3PUJFRUM9ODIuKywsLS8wMjQ1NDM0NDQ0NDU1NTQ1NjY3Nzk5ODg3Nzc3ODg7PD09Pz8+PT09PDw9PT09Pj9BQUFBPz8+Pz4+P0FJVF9td3Z0dnVwZVhPVWFma29xdHV5d25bOzJtlot/fXt+hIyLhoJ/fXp6fH+ChoeIh4aCeGlZWV1gZGZnbHJ2d3d2dnV1dHd6fH+Cg4OEhYWGg356eXp1cm9tZ2RkY2JfX15dYWpzeXd2dXBta2+BfllER0ZFQkJCQ0RFRUFOc5ustrm8vb6+vr6+vr6+vr6+vr6+vr6+vr2+vr6+vbWsoJB4bnBzdXd3eXl5eXd3d3Z3en1rY2NiZGRmaGptcXR6fHx+hIWHj5OTkpGPjo2NjIuLi46RkI2LiouOkpOVlpqam5mampqZmZiXlpWVk5OSkZGOioWAezk5Ojo6OTo6ODg4ODY2NjY0NDQ0MjAxMS8uLi0tLCsrKioqKikpKSoqKisrKywsKysrLCwtLS4uLi4uLi4uLSwrLCsqKyspKSoqKSkpKSkoKScoKCgoKCgqKikpKSkoKCgoKSorKysrLCwtLS4uLS0uLi8vMDAwMDAwMTEwMTIyMjIzMzMzNDU1NTY2NjY1NTU1NDQ1NTMzMzQ0NDIyMjIxMTExMC4vLzAwLy8tLS4uLi0sKysqKikpKSgoJycmJiYlJSQjIiMjIiIiIiEhISEhISIiIycwOUNFQT9CTVdaX19eV1VQS0dDPzkwKCcoJyYmJicjKkNbX1lXU1JVV1lcYGJjY2RjY2x3cWlnbHB0eWg/ISMoKDlOZWlkY2NbTDQyQTk0MjAvLy4sLS8xLzAxMS8xNTQxMjU3OTg4OD1FR0ZEQDs1MCwrKy4uLzEzNDQ0MzMzMzMzNDQ0NTY2Nzc2Njc3NTU1NTc3ODg6Oz4+PTw8PDw8PD09PD9AQEBBQUBAPjw9PUFFU19pc3ZycnFsZFVCPkZQWFxiZ21zdHRoWVZMZo6QhoB/goeMioaCf35+fX+BhIeIiYeJiH9xX1FTVVpdYGZqcnR0dXV3dnZ5eXp9gYGChISEhIODfnx8enV1cGtoZmRhX11bXGVpcHN1c3NuamlncnxjR0ZGRkRCQ0NEQ0RCUn6grba6vb2+v76+vr6+vr6+vr6+vr6+vr29vr6+vr21pY5zY2RlaW5zeHl6enl4d3Z3d3l+bmNiYmRmZWdqbG91e3x9f4KFiI+VlJOQj46NjYyLiYmNjo2LiouOkpWXmZmanJuampmampiYlpaUkpKPjIiFgHl1bWQ5OTo6OTk5OTg4ODg2NTU1MzIyMjIwMDAuLi4tLSwrKykpKysqKikqKysrKyssLCssLCwsLS0tLi4uLi4uLi4sLS0sKywsKyorKyoqKikpKSooKiopKSkpKiopKSoqKSkpKSorKysrKywsLS0uLi0tLi4vLzAwMDAwMDExMTIzMzIyMjIzMzM0NTU0NDQ0NTU1NTQ0NDQzMzM0NDQyMjIyMTExMTAuLy8uLi4uLS0tLSsrKysqKikpKSgoJycmJiYlJSQkIyMiIiEhISEhISEhISEiIiMnLThCR0Q+QkhQV11gX15cWlROS0U/LicmJiUoKCgnJiQkKEBdYlRPVFdXWl5fYWNlZGx1c3Brb3J2eGU7JSYoJic9XWlpZWNfVUksKzg2MzEwLy4tKissLi8wMDAwMjY3MjIzNjo6ODk+QkRFRUE8NjEsKysuLi4wMTMzMzMzMjIyMjQ0NDQ0NDU2NDY2NjU1NTU1Njc3Ojs8PT05Ojo7Ozs8PTw/QD9APz9DQD49PT9HUlpncnRxdHJrY1U+MDI5P0RJUVpgZm1uaF9laHKCkYuEgoKKjoqGhIKAgH+BhIeIiIqIiIqFem1WTU9QVFddZGtwcXN0dHZ3eHl6fH19foCAgoSEhIJ/fXx5dHRuamdjYF5eXGFqcHBwcXFxbWloZmlyb1BMSkpFQkJCQkFCRVWFo7C3u729vr++vr6+vr6+vr6+vr6+vr28vLy+vby5qYhoWV9kZWhoa3F4eXl5eXd2dnZ5fnNmY2NnaWlqbG5xdnx9foCChYmOkpGSj46NjY2Mi4mJjY6LioqOkZSYmZubm5mZmJiWl5eXl5aVk4+Jg356dGxkWVFQODg5OTk5Nzc4ODg3NTU1NTMyMjIyMC8uLi4uLS0sKysrKysrKioqKysrKysrLC0tLS0uLi4uLi4uLi4uLi4tLS4uLSssLCwrKysrKikpKioqKikpKioqKispKioqKyooKisrLCsrKyssLC0tLi4tLS4uLy8wMDAwLzExMTEyMjIyMjMzMjIzMzMzNDU0NDU1NTUzMzQ0MzM0NTMyMjIyMjAwMTEvLi8uLy4uLi4tLCwsKysqKikpKCgoKCYmJiUlJiUkIyMiIiIhISEhISEhISEgISIjJis0QUZGREdJT1VaX2JjYV9cV1NNPi4pKSUkJCQmKCooKCgkKkddXVVZXWBhY2NoaG1zcGxrbXFzd2tONCwrJicqQ15pYldSWVNKLSg3NjAwMC8tLSosMC8xMTEyMTM4OTc1Nzo8Pjw7O0BDRUVCPzs1MCwrLCwtLjAxMTIzMzIyMDAyMjMzNDQ0NDQ0NDQ1NTQyMzQ2Nzk7PDs5Nzg4ODg6Ozw+PT0/P0JCQkE/PD5DUFtmcXVzc25nX1JAMi8vMDM2OUBGT1dfYmBbXlZddI2OhoSEh4uJhYWEhISEhIaHiIiJiIiIioZ5bFZKSEpMUltnbm5vcHJ0d3l4eHt9fn5+f3+AgYOCg4B+e3h2cm5qZGBeW11laGptcHFvbmxpZ2RkZmtXVFBJQ0JBQkJCQUVYh6Swtrq8vL6+vr6+vr6+vr6+vr6+vby7urq9vbu3rYVcUFddYGRnaGlqcnd4eHh2dnd4fIB5cXByc3Nzc3R0d31/fn+BgoaKjZGSkY6NjYyMi4qKi4+NiouNkJOXmJiamZqZmJWUkpGRkJCOjIiAd3BnYFhOR0RITjg4ODg4ODc3ODg3NTU1NTUzMjIyMjAvLi4uLi0tLCsrKysrKyoqKisrKysrKywtLS0tLi4uLi4uLy8vLy8vLi4uLi0uLCwsLCwrKysqKisrKysqKisrKiorLCoqKisrKyorKywrKysrLCwtLS4uLS0uLi8vMDAwMDAwMTExMjIyMjIzMzIyMzMzMzMzNDQzMzMzNTU0NDMzMzMwMDAyMjIwMDAwLi4vLi4uLi0tLSwrKysqKikpKCcpJicmJiUlJSQkIyMiIiEhICAgICAgICEhICAhIyYrND9ISkpLTlBTWl9lZWZmYl5YTTQpKygmJCUnJiYrLS4uKyYlKjpLV2dsamttbmt1cm1tb3N1d2xTSTUyPD0xMkxjZFpTTE1NRzAlNjUvMDAuLS0tLzIwMTIxMjM2OT07OTg4Ozw9PT5AP0BCQD89OTIuLCwsLS4wMTEyMzMyMjEwMTEzMzQ0NDQzMzMzNDQ0MjMzNTY4Ojs5ODk4ODg4Nzk6Ozs7PD1AQUJBPz1ATlljb3Bxc29oXE48Li0sLS8wMDA0NzpDSU5QV1lSWml/i4aFhYeIhoWDg4KCg4OGh4qKiomIh4mKh35vW0hERUhRY2lra21wcnh5d3d5e3t7fH19fn6BgoOCf317eXVybmplW1BUXGVmZ25vbm5saWdkZGJgWFJQRkRCQkFBQUJEWIilsbe5vL69vr6+vr6+vr6+vr6+vry6uLe7u725sZVcRVBZXF5iZmdpaGx0eHl5enp8f4KFgn+BgoKCgH5+fn6BgYCBgoKGjI6RkI+NjY2MjIuKio2PjYyMkJKWl5eYmJmZl5WTkIyKiIaEf3lzZ19WTkVFRkpMUFM4ODc3Nzc3Nzc2NTU1NTU1MzIyMjIwMC8vLy4tLSwsLCwsKysrKyosLCwsLCwsLi4tLS8vLi4uLjAwLy8vLy4uLi4uLi0tLi4sLCwsKysrKisrKysqKioqLCwrKysrLCwqKiwsLCwrLSwsLS0uLi0tLi4vLzAwMDAwMDAxMTExMjIyMjIyMjM0MzMzMzMzMzMzMzMzMzMzMzMyMC4wMTExMDAwLy4uLi4uLi0tLCwrKysqKikpKCYmJycmJiUlJCQkIyMiIiEhISAgISEgICEhHiAgISIlKzM9RUlMT1FRVFtgZmtqZmRjW0gxLC8sKCkpKScpKiwsLS8uMDExMjhBUVhgY2Zycm9vcnR1dGVRUE87O0hPSk9bYFhVUktLT0YxJDM1MDAvLS4tMTY4NTUzMjQ0Njk/Pj07OzxAQEJBPjw/QkBAPTs0Ly0tLS0vMTEyMjIyMjIyMjIyMjI0NDMyMTEyMjMzMjEyMTE1Njc3NTY3Nzc3Nzg4ODg5OTo6PD0/QD1ASFdhbnFxcm9nXFA+MC4tLC0tLy8wMTEyNDg8QkhJS1BYan58eXx+f4B/f4CAgoaGh4mJiouJh4aJi4yJgXNcSEJDSltjZmZobXJ5eXd3eXp6enp6e3x+fn6BgX9/e3p3dXNvbGVfYWhkX2Rtb29ubGhmYmFhX1tOTkhGQ0JCQkI+RFmJprC3ubu9vb6+vr6+vr6+vr6+vry7uba1t7q7ua2CRkVPVlxeYGRkZ2lpb3d7e3x/gYWHh4qKi4uKiomHhoSEhoaFhIODh4yOkZCPjoyMjIyKiYuNj42Nj5GUlZeWlZaXl5aUjomFfXh1cW5jVkxGQkFAQ0hNTVBUNzc3Nzc3Njg3NjU1NTU1NTMyMjIyMDAvLy8uLS0tLCwsLCsrKikqLCsrLCwtLS4uLi4tLS4uLy8wMC8vLy8uLi0tLS0uLi4uLS0tLSwrKyssLCoqKysrKywsKysrKywsLCwsLCwsKy0tLC0tLi4tLS4uLy8wMDAwMDAwMTExMDEyMjIyMjIzMzMzMzMzMzMzMjIzMzMzMzMzMzIxMDAxMS8vLi4uLi4uLS0tLSsrKyspKSkpKCcnJicmJiUlJCQkIyMiIiEhICAgICEhICAhIR4gICEjKC42PkVJS1BTVFdfZGpubGllYlY+Li0sKioqLS0oKiosLCwqKi0uMDExMC4uKChkcmxsa2hpbWBJTE5QRENOUlFZXlpZXVtVVVRSPCcvNjgzMC4tLTE3PTw6NjMzMzU7QEFBQ0E/QEJCQTw6PD49PTw6NTEuLS0tLzExMTEyMjIyMjIyMjIyMzMxMTExMTEzMzIxLy8xMTI0NDMzNDU1NTU2Njc3OTk6Ojw9Pj8+RlBda3Jub2xmXE49MC4sLCwsLS8vLy8wMDEwMTM1OTs+QUtgZmBkaGtwcXN2en2DhYWHiYmLiYmGhIeKjIyEdmNHP0hXY2ZkZWtwenl2d3l6e3l4eHh6e3x9fn18gH98enZzcm9vcGxrbmtrb29vbGpoZmJhYmBcS0xPR0NCQkJCQUJWhKOutrm8vb6+vr6+vr6+vr6+vr68urizr7W7u7encEhMUVlcXmJkZ2pqam1ze3+BhIeLjY2Pj4+Pjo6Ni4iHh4eHhoaFhIiMjpCOjo6MjIyMiomLjY+NjY+Rk5STlZOTlJOOjIZ/dWxkYFpPRUA8PT5BQENITE5PUjc3Nzc3Nzc3NjY1NTQ0MzMzMjIyMjAxMDAwLy4uLi0sLS0tLS0tLi4uLi4uLi4uLi4uMTExMTAwMDAwMDAwMDAtLS4uLS4wLi4uLS0uLi0tLS0sLCwsLCwsLC0tLCwsLCwsLCwtLSwuLi4uLi0uLi4wMDAwMDAwMDAuMTExMTAwMjIyMjExMTEzNDU0MzMyMjIyMjIyMjExMTExMTAuMDAtLS0tLS0tLSwsKywrKyoqKiopKSgoKCgmJSYlJSUkJCMjISAhISAgICAgICAgHx8gICAiJCowOEBFSEtQU1ZaYmZrb25pZV5PMCopKSkqKi0xLCwsLC0tKiUjJCcsMDAxNi5admpqa29saFxVSklKSUVLUk9YXWFgYWFaWF9eWksvKTRBQDUuLTA6QUNCPDY0NDY5Oz9DREVIREJBQkM8Nzg5OTk6ODg0MC0tLC4wMDExMTEyMjExMjIyMjIyMTAwMDAwMjIxMS8vMDEwMDExMjI0NDQ0NjY2Njg5ODk7PT09QEpWZG5sbmplW007My8sKywsLS0uLi8vMDAvLzAwMjIxMjM2QEVFSU1TVVthY2hvdHl6gIaFiImGhIWFh4qNjYd5ZUlHVmRlYWNpc3l5dnZ5eXp5d3Rxdnd6fH19fX5/fX17eXZzcm5ub29ubWxtbmpnZ2ViYWFiXU9LU1BEQkRDQkNEUnebrra6vL28vb29vr6+vr6+v7+8u7u1q620uLeumm9fY2RkZGdqamttbm5yeX2BhYeJjY+Qj5CQkJGRjoyLhoeGhYWGhIWJjY2LjI2Ni4uNjIuKjI2NjoyQkZGTkJCPjYyJhYB2a2FVTUU+OTg6Ozw+QEBERklMTEw3Nzc3Nzc3NzY2NTU0NDMzMzIyMjIwMTAwMC8uLi4uLi0tLS0tLS4uLi4sLC4uLi4uLzExMTEwMDAwMDAwMDAwLy4uLi0uMC4uLi4uLi4tLS0tLCwsLCwsLCwtLSwsLCwsLC0tLS0tLS4uLi4tLi4uMDAwMDAwMDAwLi8vMDAvLzExMTExMTExMjMzMTMzMjIyMjIyMjIxMTExMTExLzAwLi4uLi0tLS0sLCssKyoqKSoqKSkoKCgoJyclJSQkJCMjIyEhISEgICAgICAgIB8fICAhJCcsND1DRkdIS1FVWmFmaGxraWVaQi0oKisrKiooKCsrKyssLCwnIyIlJSksMjtadWxpa2prZVtNTEVHRTk1SlBRV2BfW19fWlpbX1ZTOisvRE05Ly8zQERFRUA5OTo4ODw+P0JESElEPz86Ojc1NTU1ODk5ODMuLSwuMDAxMTExMjIxMTIyMDAwMDAwMDAwMDAwMTEvLy8xMDAxMTExMjMzNDQ0NTY2ODc5ODk5OkFOWWhtbWplXE4+NTIwLissLC0tLi4vLzAwLy8wMDIyMTIyMC8wNDQ2ODxAR0hOVlxkaW91eX2AgoGCg4OEh4uMh3xoU1hfZGJkb3d4d3Z2eXl3dnBubm90d3p7fX1/fn5+fXx6eXZ0cnFxcG5ubWxqZmRiYWFgYWBWTU1QSENDQ0NCREtvl6y2uby9vLy8vL29vb28vLu7uLexraamq6+upJeAeHp3d3Z2d3d3dnl5fX2Ag4WIi4+QkZKRkpKRkY6MiYeGhYSEhISEiIyMjIyMjIuLjIuJioyMjY2OkpGOjoyGhX99eG5nWk9FPjs6Nzg3OTw9P0BBREZHSkpKNzc3Nzc3NjY2NjU1NDQzMzMyMjIzMTAvMDAvLi4uLS0tLS4uLS0tLS0tLS8uLi8vMDAwMDAwMDAwMDExMTEwMDAwMDAwMC8vMDAvLy8vLi4tLS0tLS0sLCwsLCwtLS0tLi4uLi4uLy0uLi0tLi4vLzAwLy8vLy8vLy8vLzAwLy8wMDAwMTEyMjIxMTIxMjIyMjIxMTEwMDAwMDAwMDAwMC8vLi4tLS0tLCsrKyoqKSkpKSkoJycnJycmJSQkIyIiISEiIiEhICAgIB8fHx8gICAgISMpLzY+RUZGRklOVVlgZWhqaWlnVzcuLSwtKSoqKSkoKCgoKisrKSgnJyUmKihJcGpqZmdlY1BBS01JREJAQEZOWGJkXFpiX1dRUlxZT0Q6MzY9Mi4vMDg/RUZCOz5AOjg4OTo7P0hLRj86NzU2NTQ0Njc7Ozg1Mi8tLS8vMDAxMTExMjIyMi8vLy8wMDAwLy8vLzAwLy8uLzAwMTExMTIyMjIxMjM0NjY3Nzc3NTlDUF5oamhmXVA/NjQyMS4sLCwsLC4vLi4uLi8vMDAxMTAyMjIwMDAvMC8vMDAyNjxDSU9VXGJqbnJ2eHt9foGDiI2KgHFlYWJmbnZ3eHZ1dXV0cm1oZ2dqbXN3eXp8fn9+fX5+fHl3dXZzdHJwcG9taWZkZGFfX19hW0tJSkxJRUNEQEFHbZWpsrm6ury8urq5uLWzsbCuq6imo6GfoKSjoJmUi4qKiIiGhYWEg4KBgIGCgoWFh4mLjo+RkpKSkpGOjImHh4OCgoODg4aJiYuLjIyMjIyLiomKjIqMi42LhYB7dnFpYVpNQz08PT09PDo5ODk8Pz8/Q0RERERERDc3Nzc3NzY2NjY2NTU0MzMzMjIyMzEwLzAwMC8vLy4uLS0uLi0tLS0tLS0vMDAvLzAwMDAwMDAwMDAxMTAwMDAwMDAwMDAvLzAwLy8vLy4uLS0tLS0tLCwsLCwsLCwtLS4uLi4uLi8uLi4uLi4uLy8vLy8vLy8vLy8vMDAwMC8vMDAwMDExMjIyMTAyMTEyMjExMTExMDAwMDAwMC8vLy8uLi4uLS0tLSsrKyoqKSkpKSkpKCcnJycmJiQkIyMiIiEhIiIhISAgICAfHx8fICAgICEmKS82PkRHR0hHS1BYXWBkZGVlYkktKyspKycpKSkpKCgoKCgqKiopKScmJic+aGZnZmdkY05ARE1NTD48Sk5JV19jX19gZGBUVFpdYU9HQjs0ODg3OTExNDxDQ0JCPzo5OTc3ODtGTE1FPTc0NDM1NTY3Ojw+PDgzMC0vLzAwMDAxMTIyMjIwLy8vLy8vLy8vLy8uLi8vLi8wMDExMTExMTAxMTExMjMzNDQ0NDQ4RFFeZ2dkX1VDNTQ0MTAvLSwsLCwtLSwsLi4uLi8wMTEwMjIyMTExMDAuLS4uLC4uLzM3PEBHTVNZXmRobHBzeICFiIeAc2docXl8e3h3d3ZxbGdkXFRWYGdtcnd4en1+fX59f3x9e3l4dnV0c3Jxb21qZmJhX19fYF1QSEpJSERBQ0NHUWqPo62wsbGxsa2sqqmnpKShn56cm5qcnZyampmYlZKRkY+Pjo2MioiGhIOFhIOFhYeJi42OkZKSkpKRj42KiIeDgoKCgoKFiIiJioyMjIyJiImGh4eFgoJ9eXBqY1pPR0I7OTs7Ozw9PTw8Ojk6PT9BQENERENDQUE4ODc3NjY3NzY2NjY1NTMzMzIyMjIyMTAxMTAvLy8vLy0tLS0tLS4uLi4uLi4uLy8vLzAwMDAwMDExMTEwMDAwMDAwMC8vLy8vLy8vLy8uLi0tLS0tLSwsLS0tLSwrLS0uLi4uLi4uLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8vLzAwMDAxMTIyMjIxMTIxMTEwMDAwLy8wMDAvLy8uLi0tLi4uLi0tLSwrKyoqKioqKSkpKCcnJygmJSQkIyQjIyIiIiEhISEgICAgHx8fHx8fICAjJSkvNj9GSEhISEtPVFlbXl9iYFc5JyopJygoKCgoKSgoKCgpKysrKigpLCRDbGBiYmRjZVA7Qjw6S0c+PUVEU2RhXV1hYl9jXmFiYGJUSERIVko+Qkc5LDA1Oz9CR0I6NzY2MzM2QUpNR0I6NTMzNTU2Nzk+P0E+OjUxLi4vLzAwMTEyMzU1MTAvLy8vMDAuLi8vLy8vLy8vMDAwMDAwMDAwMDAwMDAxMTIyMjIzOENRXmNiYFhKOzQ0MzAvLy8tLCwsLCwsLC0tLy8wMTExMTExMTIxMDAwLy4tLS0tLS4uLS0uMTM7P0RITFJXXmRpcHV3d3JsbXN4d3d5dnNwamFdWE1IUVpdZG1ycnd9fn5+fn59fn18e3l3dnV0dXNwbGhmYV9gYF9fW05MSkVFSFBWXmp2jaCkpqampKOgoJ+enJubmZeWmJiYmJiYl5eWlpWTkpKQj5CPjoyKiIaDhIKBg4aGh4mNjpCSk5OSkpGQjoqHg4KCgoKBhIaGiIiJiYqKh4F+fHp2cm5pYVxVTEY+Ozo5Ojg5Ozw8PT08PDs6PD4+QkJBQkNAQEA/Nzc3Nzc3Nzc2NjY2NTUzMzMyMjIyMjEwMDAwLy8vLy8tLS0tLS0uLi4uLi4vLy8vLy8wMDAwMDAxMTExMDAwMDAwMDAwMDAwMDAvLy8vLi4tLS0tLS0sLC0tLS0tLS0tLi4uLi4uLi8vLy8vLy8uLi4uLi4uLi4uLi4uLi8vLy8wMDAwMTExMTIyMTExMTExMDAwMC8vMDAwLy8vLi4tLS4uLS0sLCwqKyosKyoqKSkpKScnJycmJSQkIyMjIyIiIiIhISAgICAgIB8fHx8fHyAhIyUpLzQ8QkdISUlJUFVWV1pZWldGLScnJycoKCgoKCgoKCgoKyssLCwpJiY9bWRbW2FmaFM+QDs3NkBGPTU1NlBjY2NkZGRhX2BkZWJjWExER0pBO0BBOjEuMDI4QURFPzYzNDAxMjpCRUZCOzc0NDU1Nzk7PT9BQT46NTEvMDAxMTExMjM0NDQyMC8vLy8vLi4uLy8vLy8vLy8vLy8vMC8vLy8wMC8vLy8vLy8vMTZBTVphXVpSRTkxMjEvLy8vLi4sLCwsLCwtLS8vMDExMTExMTEyMTEyMC8uLi0sLS0tLS0uLy4uLzAwMzY6PkRJTVNWW15eXmFmamtsbGpnZF1VUU1NT0lFUV5mam1wdXt/gH98fHx8fX17eXl2dnR0cW1qaGVjYWFgYGBUTE5RWF9rc3yCjZSbnp6fn5ybnZ2cm5mZmZiZmJeXlpaWlZWUk5ORkI+Pjo6Mi4qKiYeGg4OCgoKDg4SHiY2OkJKSkpKRkI2KiIWDgoKCgoKEhIaHh4eEgn13bWZkYVlRS0hBPDs7Ozs7Ojs8PDs8PD09PDw6Ozw9Pz9CQkJCQEA/QDc3NjY3ODc3NjY1NTQ0MjIxMTIyMzMxMC8vLy8vLy8vLS0uLi4uLy8uLi8vLy8uLjAwMDAwMDExMTExMTExMTExMTExMTExMTAwLy8vLy4uLi4tLS0tLS0tLS0tLS0tLS4uLi4vLy8vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLy8vLzAvLzAwMDAyMjExMTEwMDAwMDAvLzAwLy4uLi4tLi4tLSwsKysrKysrKiopKCooJycnJyYmJSQjIyMiIyIiISEhISAgICAgHx8fHx4eHh8hIiUoKS0zO0FERkhKTE9SU1VVU00/NCknJycnKSkoKCgoKSkpKSsrLSsrKSowbGxgX2FkZlY4QUQ8MjM5QERCS0VJX2JhZmZiY19jZGRnZWd1S0A+Pz0+QEE5MC8uN0VFREA4MjEuLS8yOUBCQj87NjU0MzM2ODo8P0JCPzo2MjAxMTAwMTIzNDQ1MjIwMC8vLi4uLi8uLi4uLi4tLS4uLy8vLy8vLy8uLi4uLi4uLi8zPklXW1ZTTEE3MC8vLy4uLi0tLCwsLCwtLi4uLzEwMDAwMDExMTExMDAvLi0uLSwtLS0uLjAuLi8vMC8wMC8xNTY4PD5BQ0VITVBUVlZYVVNORUNDRktGP0RSW2FmbG92fYCBf3x8fXx8fXx7eXh3d3Nxb21qZ2ViY2FjYlxfa3F7g4qPkpibm5ucnZ2dnZybm5ubm5mZmJeVlZWVlJSSkJCQkI6Njo2NjYuLi4mIhoWCgYGAgYKChYeHi4yOkJGSkpGOjIqGhIOBgoKBgoOEhYKDgn93bF9VSkVAP0E/QkA6PDw7PDs8PDw8PDw9PDw9Ojk8PD09P0JDQ0JAQkQ3NzY2Nzg3NzY2NTU0NDMzMjIyMjMxMDAvLzAwLy8vLy4uLi4uLi8vLy8vLy8vLi4wMDAwMDAxMTExMTExMTExMTExMTExMTEwMC8vLy8uLi4uLS0tLS0tLS0tLS0tLS0uLi4uLy8vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8vLy8wLy8wMDAwMTExMTExMDAwMDAwLy8wMC8uLi4uLSwsLCwrKysrKysrKioqKCgqJycnJycmJSUkIyIiIiIiIiIhISEgICAgIB8fHx8eHh8gIiMmKSwwNDxBREZHSkxOUFJSU09HNy0nJycoJykpKCgoKCkpKSkrKyosKygsZWtoaGZjZ1c3QUhHOC0vNzo9PkQ/UGVlZ2plY2RkYl9hZWJmZEdCQkRFRUVFPjMvLjI3OUFFPjMvLi0uLzI5PkE/OTc2NjQ1NTc4Oz5AQEA+OjYxMTEwMDEyMzQ0NDQyMjIxMC8uLi4uLS0uLi4uLS0tLS4uLi4uLi4uLi4uLi4uLi4uMTxGU1ZSTklANi0sLCwtLi4tLSwsLCwsLS4uLi8xMC8vLy8wMDExMTAwLy4tLi4tLS4vLy4wLy8vMDAwLy8vLy4vMC4uLzEwNDY4PT4/QkFBPjs7Oz5CQj4/RU5TWmJlbnV9f39+fX18fX58e3l4eXl2dHFvbmtqZ2lscnZ4fIKLj5KWmpmanJ2cnJubm5ubm5uamZmampiXlJSUlJSUkIyJiYiKjY+Pj4+Njo6MioiHhIKBgICAgH6ChIiKi4yQkZGQkI6Lh4WEgYKBgYGDhISBgYB6cmleVEpDP0BAP0JBPTw8Ozw8PDw7PTw8PDs7Ozw7PDw9PUBDRERFRUZGNjY3NzY4NjY3NzU1NTQzMzIyMjIyMTAvLi4vLy8vLy8vMC8vLy8uLi4uLy8vLy8vLy8wMDAwMTExMTExMTExMTExMTExMTExLy8uLy8vLy4uLi0tLCwtLS0tLS0tLS0tLS0tLjAwLy8vLy8vLi4uLi4uLi4uLi0tLS0tLS4uLi4vLy8vLy8vLy8vLzAwMDAwMDAwMC8vLy8vLi4uLi0sLCwsKysrKysrKiopKCkpKCgnJyYmJiUlJSQjIyIiISIiISEhISAgHx8fICAgHh4fHyEkJisuMjc/QkhJSUpMTk9QUVFNSDosJyYmJicoKSgoKCgqKikpKikpKiwtXWxlZ2RiZlYsPEZSUUo9MzM3OzU1OlJmcW5tZV5hYmNfXWFmW1JPS0tKSEpJSEI4MC8xMjVAR0Q6MS0tLS0tMTY8Ozs3NTU1NDQ1Njg9PT4/QD05NzMyMTAxMTI0NDU1NDQ0NDQxMC4uLi0tLi4uLS0tLS0tLS4uLy8uLi0tLi4tLS0tLDA5Qk1VUExGPzUtLCwsLCwsLCwsLCsrLC0uLi4vLy8wMDAwMDAxMTExMC8vLy4uLi4uLi8vLy8wMDAwMDAwMDAwLi4uLi4uLi4uLzAvMDAxMTExMzY3Ojs7PT1BR0tQV19ocnl+gYB9fH1+fXx7e3t6dnZ0c3Fvbm90eoKIjZCVl5eZmZubm5ubm5qbm5qampial5iXl5iYlpCLj5KSkpGJhYOBhY2SlJSUlZSTkpCOjIiGg4GAgH99f4GGiIqMjo+Pj46Oi4qGhIODgoOCgYGBgoF+e3RtaWFcUEJAQD9CQD48PDw9PTs7Ozs7Ozw7PDo8PT8/P0BCRUZGR0dIRzc3Nzc2ODY2Nzc2NTU0MzMyMjIyMjEwLy8vLy8vLy8vLS8vLy8vLi4uLi8vLy8vLy8vMDAwMDExMTExMTExMTExMTExMTExMC8vLy4vLi4uLi4tLSwsLS0tLS0tLS0tLS0tLS4wMC8vLy8vLy4uLi4uLi4uLi4tLS0tLS0uLi4uLy8vLy8vLy8vLy8wMDAwMDAwMDAvLy8vLy4uLi4tLCwsLCsrKysrKyoqKCcpKSgoJycmJiUlJSQkIyMiIiEiIiEhISEgIB8fHx8gIB8fISIjJigsMDM5QUZJSUlKTE5PUFBOSUQ0KCcmJiYnKCgoKCcpKSkqKCgoKCktW25kZ2VgaFstMj5HVFlYUUY4Ojw5OD9ebHRybGhqZV5gYWFmZlxTUk9MTk9OTExIPzMvMjM3PUNGPzQvLS0tLC0vNDc3NzY1NTU0Njc5PD0+QEE/PDk2MjEwMTEyMzQ1NTU1Nzc1MjIvLy8uLS4uLi0tLS0tLS0uLi4uLi4tLS4uLS0tLS0uN0FKUk9KRj81LSoqKioqKisrKysrKywtLi4uLy8vMDAwMDAwMTExMTAwMDAvLy8vLi4vLy8vMDAwMDAwMDAwMC4uLS0uLi4uLi4uLi4uLy8vLy8xMzM2Njc3ODs8P0VOWWNud32BgH5/gH9+fXx6eXt7enl3dXZ3f4aKj5OWmJeXmZmam5ubm5mYmJiWlJKOi4mJiIiJiouEgIaLjo2Jf3JyeoKSmZ2bm5ubmpaTkI+LiISCgIB/gH5/goWHiImKioqLi4mIiIWDg4KDgoGBgYKCgX98eHNvaGBRQj08Pjw7Ozw8PDw7Ozs7Ozs7PT4/P0BCQkJDRUdHR0hISEc4ODc3Nzc2NjY2NTU0NDMyMjIyMjIxMTAwMC8vLzAwMC8vLy8vLy4uLy8vLy4uLi4vLy8vMDAwMTExMTExMTExMC8uLzExMDAvLy8uLS0uLC0tLCwsLC0tLS0sLCwsLCwuLi4uLy8vLy8vLy8uLi4uLi4uLi0tLi4uLS0uLi4uLi4uLi4vLy8uLy8wMDAwMDAwMDAwMDAvLy8uLi4uLS0tLCwrKywsKyoqKScnJycoKCcmJiUlJSQkIyIiISIhISEgICIiICAfHx8fICAgICAjJSgpLDE1PENJSklISUpLTk1MTEU/LicmJSYnKCgoJycpKCkoKCgoKSooUW1jZWRhY10uLzc9RlBXWFlNNzI5Oj88XHRycnBjWWFeW2BmaGVdV1NRUVJRUE5MSkM5MzMvMTg9Q0E4MS0qKisqLC4xMzU0NDU2Nzg4Nzk8PkBBPj06NzUyMC8xMjEzNDU1Njg5NjQzMTAwLi0uLi4sLCwsLCsrLCwtLS0tLSwsLC0tLS0sLDVARlFOSUVANy4oKCkpKSkqKioqLCwtLS4uLS0uLi8vLy8wMDAwMTExMDAwLy8vLy8vLy8vLzAwMDAwMDAwMDAwLy4uLi0uLi0tLi4uLy8vLy8wMDAxMjIyMzQ0NTU2O0lXY214f4SBgH9/fYB+enl4ent7e3t8gIeLjpKTlZWVlpeZmZqamZqYlJGNioaBfHVvbGhmZmttcHFze4KEgnRobnqLmJ+eoJ6goJ2amZSRjImFgHx6e3t9f4CBhYaIiYiIiYmJiYaGg4KDg4KCgICAgIGBgH99d3NoXU1APzw7Ojo7Ozw8Ozs6Ozs7PkBAQUFCQ0RGRkZIR0dHRkZGNjY3Nzk5NjY2NjU1NDQzMjIyMjIyMTEwMC8vLy8wMTAvLy8vLy8uLi8vLy8vLy4uLi4vLzAwMDAxMTExMTExMTAvLi8wMC8vLi0uLi0tLSwtLSwsLC0tLS0tLCwsLCwsLi4uLi8vLy8uLi8vLy4uLi4uLS0tLS0tLi0tLi4uLi4uLi4uLi4uLi8vMDAwMDAwMDAwMDAwLy8vLi4uLi0tLSwsKysrKysqKScnJycnJiYmJiYlJSQkJCMiIiEiISEhICAhISAgHx8gHx8fICEjJSgrKy4zNz5FSkpIRURGR0lLSkdDOysmJiYnJygpKScnKSgnKCgoKSslT2liZGVgZWEwLDM4PUdOVVlYUDQvOUFFSGx0dHRvYFhgW1pfY2hnYFlWVFRRUFBRUExHQTo1MzEyNz1AOjIsKioqKSoqLTAxMjM1Nzg4ODc3OTw+Pz8+PTo3NTIxMTIxMzM0Njc4NzY1NDIwMDAvLi4tLCwsLCwrKysrLCwsLC0sLCwrKywsLS0xPEVOTUhFQDk0KigpKSkpKiopKSsrKywrKy0tLi4vLy8vMDAwMDExMTExMTAvLy8vLy8vLy8wMDAwMDAwMDAwMC8uLi4uLS0uLi8vLzAwMC8vMDAwMTEyMjM0NDMzMzM6R1ZibHZ9gYF9f4F/fn57dnN2en5/f4KHio2Pj5CUlJOVlpaXl5WSkIuFf3dwaWNbVVBNSEhNUWBdX2Ruc3FsZ3OFlp+joqGhoaGfnZuRjIeEfXl0cnNzeHt+gIKDhoeFhYaGhoaDg4OCgICBgIB+fn5+f4KDgn95cWpdTEA9PT08Ozs6PDw8Ozw+PkFDQ0RERUZHR0dHR0ZGRUVFRTc3Nzc2NjY2NTU1NTQ0MzIyMjIyMTAwMDAwMDAvLzAvLy8vLy8vLS8vLy8vLy8uLi4uLi8wMDAwMTExMTExMDAwLy8vLi4uLi4uLi0tLS0tLS0sLCwsLCwrLCwsLCwsLC0tLi4vLy8vMDAvLy8vLi4uLiwuLi4uLi0tLS0uLi4uLi4uLi4uLC0uLi8vLy8vLzAwMDAvLy8vLy4uLi4tLS0sLCsrKysqKCgoJycnJyUlJiYlJSQkJCMjIiIhISEhISAgICAgIB8fHx8fHyAgJScqKywwNDlARklJSEVCQkZHR0ZFPzUpJiYmJycoKCgoJycoKCkqKioqVG1gYmVhYGMxKjU2Nj1ESVBXWFQ+PT0+PEtscHN0VVZgY2FiZWVlZ2NdWVhXU1BQUVFNTEY+ODEvMTM4PDwzLCsqKSkpKiwvMTM1ODk6OTo3Nzc4Oj5AQUFAPTo2NDIwMTIzMzQ1Njc1MzU0MjIxMTAuLi0tLSwsKysrKysrLCwrKywsKysqKikpLjg+RktHREE6NS4nJygnJyYoKCgpKSkpKCkrKy0tLi8uLi8wMDEwMDAxMjIxMTExLy8vLy8vLy8vLzAwLy8xMS8vLi4tLS4uLi4uLi4vLy8xLzAwLzExMTIzNDQ0NDIyNDlDU2Brc3l/f4GDgH99fHdxb3R4fX+Dg4WGiImJjo6OjY2Njo+Mhn53b2hgWFNOTEZDRERERU1dWFJPVFpfZ26BlJ6gn5+en56blpGMhoB8dG9pZGRlaW1zd3x+gIGEhISEhIOCgoKBgH9/fX5/fn59fn5/gISAfnpyZ1pGPjw7Ozw8Pjw+Pj9BQkNFRkdHRkZGRkZGRkZFRUVDQ0Q2Njc3Nzc2NjU1NTU0NDMyMjIwMDAwMDAwMDAwLy8vLi8vLy8vLy0vLy8wMDAwLi4uLi4uLy8vMDAxLy8vLzAwLy8vLy4uLi4uLS0tLCwsKysrKysrKysrKywsLCwsLCwtLS4uLy8vLzAwLy8vLy4uLi4uLS4uLi4tLS0tLi4uLi4uLi4sLC0uLi4vLy8vLy8wMDAwLy8vLy8uLi4uLS0tLCwrKyoqKSgoKCcnJycmJSYlJSUkJCMjIyIiISEhISEgICAgICAfHx8eHx8gIiQnLC0vMzk8QEZJSUdCPz9CRUZFQT0vKCYmJiYmJycnJycnKCkpKisuX2thYWJfZGQ1JjI5Oz4+QkpPUFBJPjs8QUNUbXFybmVbWWNhZWtta2hlXl1bWVZSUFNST01KRT0zMC8yNDk5MywrKikpKSkrLjAxNDg5Ojs8OTc3Nzk9QEJCQT06OjY1MjAwMTMzNDU2NTU1NTU0MzIxMTAvLy8vLy0tLCsrKywsLCwsLCsrKiopKSwyOkBISENAPDYvKCcnJycnJycoKSkpKSgpKiorKywtLS4uLi8xMDAwMDExMTExMTAvLy8vLy8vLy8wMC8vMDAvLy4uLS0tLS0tLS0tLjExMjMxMTExMTEyMzU1NTUyMjI0N0NRXmlweoGAgIB/fXx6dnBvcXV5fX+Af4CBgYKCgYB9fX1+e3JpXFRMSUlLTE9OTEpISElLUVFPS0lLVF9vhpKSk5OSko+MiIF7c21lYFxZVlZYW2JlaXBzdnt+gIGBgYF/f3+AgH9+fnx7e3x9fXx8fn6Ag4F8d29kV0Y9PT1AQUE/QEBBQ0ZHRkZHR0dHRkZGRkZGRUVFRkNDNjY2NjY2NTU0NDU1NDQzMjIxMDAwMC8vLy8wMDAwMTAvLy8vLy8uLS0tLi4uLi4uLi4uLi4uLy8vLy8vLy8vLy4uLS0tLS0tLS0sLCwrKysrKysrKiosLCsrLCwsLCwsLS0uLi4uLy8vLy8vLy8uLi4uLSwtLi4uLS0tLS4uLi4uLi4uLS0tLy4uLi8vLy8vLy8vLy8vLi4vLi4uLSwsLCwsKyspKSkoJycnJycnJiYlJSUkJCMjIyMiIiEhICEhHx8gIB8fHx8fHh8gIiQlKSwuMjc7QENISEdGQT4+QkNFQ0I6LCclJSYmJycoKCgpJykoKikzZWxeYF9dYGo/Ii80OjxAQkBDSEpKPzg7QUA8WnFxc29taV1lZ2hscHBpZGFeXlxXU1BRUE9OS0dDOjMwMDU0NzMuKyopKSgoKiwtMDQ1Nzg5Ojg2Nzc3Oj1BQkI+PDs6NzUyMTExMjI0NTY3Nzk3NTUzNDQyMjEzMzMwLy4sLCwtLS0tKysqKispKSkqLTY8REpBPzo1MSonJicnJyUlJycmJSYnJygqKioqKysrLi8uLjAwMTExMTIyMTExMC8vLi4uLi8vLy8wMC4uMDAtLS0tLS0tLS0tLTA0NDU1MzIyMDEyNDU2NzY2MzMzMzQ3P05aZW92fICBgH57enh1bmtsb3V4e3x8enp5eHRzcW5tbGdeVk5KSklJS01MTk5KR0dISkxLSEZHS05abXt9fHt9eXp2cWpiW1VNR0RCRUdPVVleX2RlaWxxdHl4eX1/f39+fXx7e3t6ent7fH18fHt8fX+Af3x0a2JVSUBBQUJDQ0RFRUZGRkdHR0dGR0hIR0dGRkZGRkZHRzY2NjY2NjU1NDQ1NTU0MjIyMTAwMDAvLy8vMDAwMDEwLy8vLy8vLi0tLS4uLi4uLi4uLi4uLi8vLy8vLy8vLy4uLi0tLS0tLSwsLCwrKysqKioqKisrLCwrKywsLCwsLC0tLi4vLy8vLy8vLy8vLi4uLS0tLS0tLS0tLS0uLi4uLi4uLi0tLS4uLi4vLy8vLy8vLy8vLy8vLy4uLi0sLCwsLCsrKSkpKCcnJycnJyYmJSUkJCQjIyIjIiIhISAgICAgICAfHx8fHx8gISMlKCsvMzg8QkVHSUhGQ0E+PkFCREI/NyknJSUmJicnKCgoKCoqKyc6a2leX19dYm9HIC0yMzg6REdLRkVIRz0+UWRbRE9qbG1namllZ2ttcHFuaWVmYFxaV1RRT01MTEtHRj43MTE0MzYzLi0rKSkoKCkqKy0xMzM3OTo3NjY2Nzc6PT4+Pjw8Ozk3NTIxMTEyMzQzNTU3OTo3Njc1MzMzMzMzMC8uLi4uLS0sLCsrKioqKiopKCsxOUBGQz46NTMuKCcnJyclJSUlJSYlJSUmJykpKSopKiwsLS4uMDExMTEyMjIyMjEwLy4uLi4vLy8vLi4vLy4uLS0tLS0tLS0tLS4xNTY4ODQzMjAyMzU2Nzc4ODMzMzMyNDY/SlljbXV4foGAfXt5dnJtamtvcnZ7fHx6eHd1c3FuaWlkYVxYUlBOS0tLS0pJRkNDREZFQ0NCQEFET1pbWVlZWVlWUU5GQT05ODc3OT9FSlJWXF9fX2FjZWltcHF2en1/f358e3p6enp7e3t8fHx7e3x+f4B/eXNrYVdLQ0RFRUVEREVFRUVFRUZGRUZGRkZGRkZFRUdGR0U2NjU0NTU2NjQ0MzMzMzIyMTAyMjExMDAwLy8vLy8vLzAwMC4uLi4uLi4tLi8vLi4tLS0tLy4uLi4uLi4uLi0tLS0sLC0tLS0tLSwsKyoqKioqKiopKSorLCwsLC0tLS0rLC0tLi4vLzAwLi4uLi4uLi4uLi0tLC0tLS0tLS0tLS0tLi4uLi4uLi4uLi4uLi4vLy8uLi4vLy8uLS0tLS0tKysrKykpKSgnJyYmJiYmJiQkJSUkIyQkIyIhISAgHx8gIB8fHh4eHh8fICMkKCstMTg8REdKTExKR0I/QUJDRUZCPTImKCcmJiYnJycnKCcpKSlHb2dgW15hYmpVIS46PD09O0VHWE9MSkhCPUVPV1dYZGpoZ2lpYWJpcXJvamNoaGRfXVpWVFFMSUtJRkRBOjYxNDY3NS8sLCsrKSkpKSosLTAxNTk4ODg1NTU2OTo7PD49PT07OTc1NDMwMDIyMjI1Njg5OTc5OTU0NDIxMDExMDAvLy8uKystKioqKiopKSgpLTU7QEM+OzczLywpJSQmJiUlJSQlJSUlJSYnJycnKCkqKiwtLS0uLzAxMjMyMjIyMDAwMC4wLy8vLi0tLi4tLSwsLCwsLCoqLS0vMTQ2ODUzNDQyMjM0NTg5NjY2NjUyMTEzND1JVmBpcnZ9gIF+enl2cmxqZmtvdHh8e317enp3dXNxbWllX1tYVFFNTEpHRUJAPz1APj48PDs7PT0/Pz8/Pz48PDk6Ojo4OTo6OTo8QkhNU1hbXmBeXV9eYmVobHB1eH1+fHl5eXh4enp7eXt7fHt8fH5/f3x5dGxkWk1GRkRGRkVFQ0NDQ0NFRUVFREVFRkdGSEhHRkhGNDQzMzMzMjIzMzMyMzMxMTIxMTEwMC8vLy4uLi4uLi4vLy4uLi4uLi0uLS0uLi0tLCwsLCwtLS0vLS0tLS0sLCwsLCwtLS0tKyssLCsqKSkpKSoqKikqKywsLCwsLCwsKywtLS4uLy8vLy4uLi4uLi4uLi4tLSwtLS0tLS0tLS0tLS0tLS0tLS4uLi4uLi8vLi4uLi8vLi4uLi0tLS0tLSsqKyspKSkoJycmJiYmJiYlJSUlJCMkJCIiISEgIB8fICAfHx4eHh4fICAiJSosLjI5QUZLUE9MSkdEQkFCRUZJRjwsKCcmJiYmKCgnKSUoJylWbGNfXGJoZ2xTHjJKTExOU1VKR0pOS0lBPERAQkdRXmFlZ2hqaV9nam5wbGJlamdiYWNeV1RQTEhHRkVEQj04MzQ2NzUvKysrKyoqKiopKSsrMDI2OTk5NTUzNDQ1Nzo9Pj4+PTs5NzUzMjExMTMzMzMzNTg4ODg3NjQyMS8wMDAwMDAwLy4tLCwqKikpKSkoKSktNjtAPjo2NDEuKiYkJiYkJCUkJSUlJSUmJycnJycnKSkrKywsLi4vMDIyMjIyMjExMTEvLy8vLi4tLS0tLS0sLC0tLCssLCwtLzExMzQ0MTIzNDM0NDU2ODY2NjY2NDExMzQ0PEZSW2Vvdnt9gH15d3Rya2RnamxxdXl7e3x8e3l4d3Ryb2tnY2BcV1ZUUU5KRkE8Ojg4ODg3Njc3Ojo6Ojk7Ozs8PT4+PDk7Ozk5Oz9FSk9TW15gX2BfXFpZW2BlanF2ent7eXl4eHp6fHt5e3t8fHx8fX5/fXl0bWNbTkVGRkVEQ0RDQkJCQ0NDQ0RFRkdHSUlISEZHRjU0MjI0MzIyMzIyMjExMTEwMDAwLy8vLy8vLy8uLi4uLi4vLy4uLS0tLSsrLC0tLCstLCwsLCwsLSsqKiorKyssLCsrLCwsLCsrKysrKyoqKSkpKSkpKSorKysrKysrKywsLCwuLi0tLS0uLi4uLi4uLi4uLS0tLS0tLS0tLS0tLS0tLC0tLS0tLS4uLi4vLy0tLi4uMC0tLS0tLS0tLCwrKioqKiooJycnJiYmJiYmJiYlJCMjIyMiIiIiICAfHx8fHh8eHh8fHyEiJSgpLS80O0FITVBQTElGRUJAQkJESkc4KionJCQmKCcnJyYnJDdmbWNdX2NoaGxaJitDS0pOTU9UU0tJTkdAOU5hVlpXUl1kaWxra3FubG5wb2JfZWdnZWJiX1dTUExIQ0JBQ0I/OjMwMjU0LiwsKysrKywsKyoqKy0vMzU3ODY1MjExMzY4ODs8PT4+Pj47OTU1MzEyMzMxMDI0NDI1Nzc1NDIyMDAxMTIzNDMxLy0tKioqKSkpKSgoKDE4Oz06NjY0MC4rKSUlJSUlJSUlJiYmJiYmJiYnJygoKSoqKiwsLS4wMTAwMDAxMTExMS8wMC8vLy8uLSwsLCsqKisqKysrLS4wMTExMTEyMzMzMjIzNDU1NTY2NzY2NjQ0NTU5QU5ZYmtxeH5/fXh1cm5pZWZnam1xdnl7e3t6enp4eHZ0cGxpZ2ZjYV1YU01JRkRBPjo6Njc3NzY3Nzg5OTw8PT08PD08Ojk4ODk8QEZKUFVaXWBgYF1bVVNUWl1kaHB2e3t6enh5eXl7e3t8fXx9e3t8fX18eHRrYltPRURFRENDQkFBQUNDQ0RFRkZISEpKSUhGRkQzMzIyMjIyMjIyMTExMDAxMDAwMC8vLi4uLi4uLS0tLS4uLi4tLSwsLCwrKyosLCssKysrKysrKysrKysrLCwsKysqKisrKysqKioqKioqKikpKSkpKSkqKyssLCsrKyssLCwsLi4tLSwtLi4uLi4uLi4uLi0tLS0tLS0tLS0tLS0tLS0uLi0tLS0uLi4uLi4tLS4uLi4tLS0tLS0tLSwsLCsqKioqKCcnJyYmJiYmJiYmJSQkJCQjIiIgICAgIB8fHx4fHh4fHyAiIyYpKSwuMjg+REdKS0tJRkVCQ0JDQkZCMCgrJyYnJicnJygqJUBwbWJiYGZmaG9MIyowRVFKR0ZAQkxRRktKPzxGVFtkV1ZjaW5vbmxvcGtscGVXX2pqaGljYV9YUlJNSURBPj49PDkzLzAxMSwrKysrKyssLCssKywsLy4zNTY1NTMxLzA1Nzc4OTs8PkBAPz06NzYzMzQzMDAwMTExMTQ0NDUzMzIyMjIyMzQzMjAtLSwqKikpKSgmJicqMzg6PDg2NTQzMCwqKCYlJSUlJSUlJSUmJiYmJiYnJygpKiosLC0vLzAwMDAwMTExMTEwMDAvLy8vLi0sLCsrKysqKisrKywtLi4uLi4vMDEyMjEyMzMzNTU2NjY1NTUzMzQ0Mzc/S1RdZW10eX58dnJwbmxnYmVnam91eHt7enp6enl5d3Rybmxra2loZGBbWFVQTUhGQTs4Nzc2NjY3Nzc6Ojs7Ozs6Ojg4Nzc3OTxCR0xRV1tdX19dW1dRTU1UWWBncHR3enp3d3h5eXp6eXt8fHx7enl7fX14cmliWU5FRENDQ0FCQUFDQ0RFRkZKS0pKSklHRkVEMTEzMjIyMjIxMTExMS8uLy8uLi4uLi4uLi0tLS0tLS0sLiwsKysqLCsrKywrKysqKioqKisrKiorKysrKiosLCopKioqKisrKioqKigqKioqKiorKikqKioqKyssLCwsLCwrKy0tLS0tLS4uLi4uLi0tLi4tLS0tLS0tLS0tLS0tLSwsLS0tLS0tLi4uLi4uLi0uLi0sLS0tLS0tLS0sLCsrKyspKSgoJycmJiYmJiYmJiUkJCQjIyMiIiIgIB8fHx8eHx8fHx8gIyQnKiwtLjI2O0BCRklKSUdHREFBQUA/OC0qLCgnJScnJignJzxwa2RkZWdqbGg9HisvMz9aTENGRzxQUk5LSUdGTFFfZmBYX2dtb29ucHFvcG9mX2VqaGdpZmZhXVhSTkdCPTs6Ozo3NDExMC0sKysqKikqLCstLSwqLC4vMDEzNDU0MjAwMzc1ODk6Ojw+QUA/PDo4Njk3NTMxLy8uLy8xMjI0NDQ0MzMzNTU0MzEvLi0sLCopKCopJyUnJy0yNDk5ODU2NzIwLSsnJSUlJSQkJCQkJSUlJSYkJSUnKCoqLCwuLi4uLi4uLi0tLS8wMDAwLi4wLi4tLCwrKysrKysqKisrLCwsLC0tLS0wMTExMTIzMzQ0NDQzMzMzMjIzMjEyNjpCTldianF4e3p1cm1ta2ZiYmVrcXR2enh5enl4eHZ0dG9sbW1tbGppZ2diXlpWUUxFPzk4NjY1Njc3Nzc4OTo6OTk4ODY2NTY5PkJGTVNYXF5eXl1ZVU5JSEpTW2NrcXd6e3h1dnZ3eHd3eXp7fX16e3t7enZwaWBYUEZEQ0JAQEFCQ0REREdISEpMS0pIR0VDQTExMTAxMTExMDAvLi8vLS4uLS0tLS0tLSwrKyssLCwsLSwrKysrKispKisrKioqKSkpKioqKioqKysqKikpKyspKSoqKSkpKSkpKSkoKSgoJycoKiopKioqKisrLCwsLCsrKyssLC0tLS0tLS0tLS0tLS4uLS0tLS0tLS0tLS0tLS0sLC0tLCwsLC0tLCwsLC4sLS4tLC0tLS0tLSwsLCwrKysrKSkoKCcnJycmJiYmJiYmJSUlJCQjIiIiICAfHx8fHh4fHx8fISQlKSosLS4xNjs/Q0VHSkpJSEVCQkFAOS4qKysoJygpKCgoKj5rbWZjZmttb2c1Ji4xMD1YWEtOS0pMTVJTTkRGRlBRaGllYWZsdG9sa25ua25sYGJkZmZlZmdoZl9aVlJKQj07Ojg2Njo7ODMvLSwqKCgpKiosLS4vLi4uLi4vMTI0NjQyMjIzNTY4OTk5PD8/Pj0+PDo7OTc1MzIyMS8wMTMyMzM0NDMzMzQ0MzIxLy4tLCwrKikpKSgnJiYpLDE1Ojo5OTc2NjEvLCckJSQkJCQjIyQkJCQkJCYmJygqKiwsLS0uLi4uLi4tLS0vLi4uLi4vLy8uLS0tLCwrKysrKiorKywsLCwtLS4uLy8vLzAxMTIyMjIyMTExMTIyMTAvMDIzNT5KVl5nb3R5eXZycG1saGNhZWpscHR3eHl5eHZzcW9tamlpampram1ta2llYFpTS0Q8ODc2NjY2Njc3Nzc3NzY2NjY1NTU3Njg+RElOVFpcXF5eXVVRSkZCR09YYWlvdHh4eHZ0dHV2dnV1eXt7enh5eXp4dnFpYllQRUNBQkJDRERFR0hJSklLS0pKSEZDQUIwMDAwMDAvLzAvLy8vLzAuLS0tLSssLCwsKiwsLCwsLCwrKiopKSopKCkpKSkpKSopKSopKioqKisrKiopKSkpKCgnKCgoKCcoKCkpKSgoKCgoKCgpKSoqKioqKioqKysrKysrLCwsLCwsLCwsLC0tLS0tLS4uLS0sLC0tLS0tLSwsKysrKyoqKysrKysrKysrKystLS0tLSwsKyosLCssLCwqKioqKCgnJycnJyUnJyYmJiYlJSQjJCMiIiAgHx8fHx4eHh4eICIlKCksKy4xNDc+QkVGSElLSklIRERDPzAqKSooJigqJikoKilkcGdlZWpqb1cqKDAvNERWXExLSElMS0JJUktFP0lZX1lYW2BqcHNramplbG5sZ19hZWdjX2FmaGVfXVlVTkdCPTo4Nzk9RD81MS0rKSgoKCgrLC0tLy8uLi0tLi8vMzM0NTUyMTEzNjc3OTs8PDw/Pz8/Pj48OTg2NjUzMzMzNDQ0NDU0MjMwMDAwMC4tLi4tLCsqKSkpKCcmJygsMjc6Ojs7OTg0MS4qJCMjIyMjIiIiIiMjJCUkJigpKiwsLCwtLi4uLi0tLCwsLS0tLi4vLi8vLi4uLi0tLCwsLCsrLCwsLCwsLCwtLS0tLi4vLzAxMDAwMDAwLy8xMS8uLy8vLzE1O0ZPXGNrcnl7d3RwbWloZWFhZ2pvcnV3d3RxcW5raWhmZGRkaGppamxqZ2RfWVFIPjk4NzY2NTU2Njc3NTU0NDQ0NTU1NTU2OT9FTFFXWVteX11aU01JQ0BJUFhgZ250eXl3dXJyc3RycnJ1eXt5eXl6fHh2cGpkXFNKQUFDREZFSEpKSkpJSUtKSUZGQ0E/Ly8vLy4uLi4vLy4uLy4vLS0tLCwrLCwsLCosLCsrKSkoKikpKCgpKCcoKCgnKCkpKioqKSkpKSkqKikpKSkpKSgoJygoKCgmJycoKCcmJycnJycoKSkqKioqKioqKioqKysrKywsLCwsLCwsLCwtLS0tLS0tLSwsLCwtLS0tLS0sLCsrKysqKisrKysrKysrKysrKyssLCssLCsqLCwrKysrKioqKigoJycnJyYmJycmJiYmJiYkIyQjIiIgIB8fHh4eHh0eHiAiJikqLC4xNDg+Q0VGSUpLS0pKSUZGRjkrKyoqKScmJicoKCNUb2ppam5wb08sNDMuLTRDSk5PUU1TU1NPTEtEQkdHW15VS1xiaXFvbW1qZ21vbWlmZGJhYGBfY2ZiXlpZVlBLRD88PD08PEI9NTMvKSgoKCgoKSssLy8uLy4tLS0tLS8yNDY2MzIxMTM1Njg5Ozs9Pz9AQEBAPz89PDs6OTk4ODg4NzU1NDEwLi4uLiwuLS4uLSwrKikpKSgnJyYnKC0xNDc6Ozk3NjMwLCgkIyMjIyIiIiIjIyMkJScmJygqLCwsLS4uLi4tLSwsLC0tLS0tLy8vLy4uLi4tLSwsLCwtLSwsLCwsLCwsLS0tLS4uLy8vMDAwMDAvLy4uMDAuLi4uLi4vMTI4RE5YYGhwdXp5d29samdlYmBhZ25xc3N1cW9taWVkYmBbXF5gY2ZoaWhkX1lQRz45ODg2NjU1NjY3NzU1NDQ0NDU1NDQ1Njg+Q0pOVFpcXV9dW1dQSkVEREpRWmJocHN3eHZ0cnBxcXFycnV6e3p5eXp7endzb2dfWE1GRUNHSElKSkpKSUlJSUlGREE9PC4uLi4tLS4uLi0tLC0uLS0sLCkpKioqKisoKCgoKCgoJycnJycnJycnJycoKCgnJycnKCgoKCkpKiooKCgoKSkoKCgoJyYmJiYmJiYmJiYmJycmJykpKioqKisrKSkpKSkpKysrKysrKywsKisrLC0sLCwsKyorKyosLCssLCwsKioqKisrKysqKisrKysrKyoqKioqKisqKywrKysrKysqKioqKiopKSkpKCcmJygoJyclJSYmJSUkJCEhICAgIB8eHR0dHh4gJCgrLC8xMzc7QUdMTU5MSktKTEtKSkMuJiknJScnJygoJyZNcWhjaW9waT8iMzAwLzE0PUdSWl5YVlhZVU1JQjY8SGJjWllocW1ycnFtbm1paWprZ2RhX2JgX15dXFVTVVNRTUlDQEBDPzg6OTU2MSgmJycoKCgpKSouLzAwLiwrKyssLC0wMzEwMS8wMjU3ODg6Oz0/Pz9AQEFBQj5AQEA/Pj49Ozs4NTQyLy0sLS0tLC0uLCwrKiopKSkoJyYmJiUmKy8yNDY4ODQ0MS4sJyIjIyMjIyMjJCQkJCUmJygrKywsLS0uLiwsKyssLC0tLi4uLi4uLy8vLy4uLCwsLC0tLS0tLS4uLS0tLS0tLS0uLi8vMDAwMDExLy8uLi8vLi4tLS4uLi4wMTc/SVNcZW1zd3d2cGpoaGRfXl5mbG5wcHBubGdiYV5bV1RTU1hbYGVhX1pXTUU9OTg2NjY1NTY2Nzc1NTY2NTU2NjY2NjY5PEFHTVNXWlxfXVxZU05IRkVITVRdZWtwdXd4eHZzcG1ub3Bxc3h7enl5eXt6d3RxamNbVU1JSElISUpJR0lHSEdGQ0A9OzkuLi4uLS0tLS0sLC0tLCwsLCsqKikpKCgoJycnKCgoKCcnJycnJycnKCgnKCcnJycnJygoKCgpKSoqKSkoKCgoKSgoKCYmJiYmJiYmJiYmJicnJicoKCkpKSkqKigoKSkpKSsrKysrKyssKyoqKywtLCwrLCoqKywsKyoqLCwsLCoqKiorKysrKioqKysrKioqKioqKiorKiosKysrKysrKioqKioqKSkpKSgnJycoKCcnJSUmJiUlJCQiIiAgICAfHh0dHR4fIiUpLC8xNDc7PUJITlJRT01MS0tNTEg3KiYmKCcmJyYmKCROdGllampsZTIjMTIwLjMwNkVJT1dZVlZWV1ZNRDswOEZeUlVbYWtqcnVxbXBybmppZ2dkYmBdXl5ZVVROTVBSTkxNRj8/QTw3NjM1NTErJycnKCgoKCkqLS4vLy4tLCwrKyorLC0uMDAvMDAzNTc3ODo6Ozw+QEBAQEFBQkJCQUFBPz07ODc1MzEvLy4tLSwsLCsrKyoqKSkpJycmJiYlJCYoKy4wMjU0NDIvLSklIyMjIyMjIyQkJSUlJicoKyssLCwsLS0sLCsrLCwtLS4uLi4uLi8vLy8uLSwsLCwtLS0tLS0uLi4uLi4tLS0tLi8vLzAwMDAxMTEvMDAwMC8uLS0uLi8vMDEyMjtFUFthaW52eXVwbWppZV9aXWJoa25xcnBsZmJeWVVRTkxPT1NYWVdVUEpCOTc4NjY2NjY3Nzg4Nzc3Nzg4OTk5OTo6OjtBRktRVllbXF1eWlVRS0dGSE1SWGFobHB1d3l5d3JtbW9vbm9ydnt6enp7fHx5eHRvbGNcUktJSUlJSEhHRUVEQz89Ozc2Li4uLiwrLSwsLC0tLCwsLCsqKioqKCcnKCYmJiYmJycnJyYmJycnJycnJiYlJScnJycoKCgoKSkoKCkpKCgoJycnJyclJSUlJSUlJSUlJSUmJiYmJiYnJygnJycnKCkpKSkqKSorKysqKysrKysrLCsrKysqKioqKSkrKysqKysqKioqKioqKioqKSkpKSoqKioqKioqKioqKioqKysrKyoqKioqKikpKSkpKCgoKCgoKCclJSUlJSQkIiIhISAgHx4eHh4fICQmKS0wMzc7PkBDSE1QUU9OTkxMTUs/LSkoKCcqKCcmJSZUdmplZmpkZ0MjLjIxMC4tLzlIT1JYWVleZFpUTUc+MTxIWlpUV15oam1xcXN3dnFpYWFmZF9aWV5fVlBOSUhKTk1NTUlEQkA8ODU0Nzc0LSglJicoKSkpKSwvLi4tLi4uKykoKCcpKSotLS4wMTQ1NjY4OTk7PD0+Pz9BPT4/QEBCQkE9Ojo4NjY0MjEwLy8tLCsqKisqKSkoKCcmJSUkIyQkJCUpLC4xMjM0Ly4rJiMiJCMjJCMlJSYmJicnKCoqKiorKysrLCwsLC0tLS0uLS4uLi4uLi8vLi0sLCwrLS0tLS0tLS0tLi0tLS0tLS0uLy8vMDAwMTEwMDExMDAvLjAwLy8wMDIzMDE0OUFKVl1ma3J4d3FwamVjXVpaXmNnbG1vbmxnYltWU1BJR0dISk1NS0ZDPTg4Ojk4ODc3ODg4ODg4ODg6PDw8Ozs7Ozw7P0NITVJYWlpcXltXUkpJR0lMUVVaYWdtcXR4eXh2cm1vbnBxcnN2e3t7e3x9gIB7eHNvaGFWTklIR0dERENEQT87Ojc1MiwsLCwtLSwqKysrKyoqKioqKigoKikpKSYlJSUmJiYmJiYlJSYmJiYnJyYmJSUnJycnJiYoKCkpKCgoKCgnKCgnJyYmJSUlJSUlJSUlJSUlJiYmJiYmJycnJiYmJygpKSkpKikpKSsrKioqKioqKisqKiorKyoqKikpKioqKikpKSkpKSkpKSkpKSgoKSkpKikpKSkpKSkpKiopKSoqKioqKioqKiopKSkpKSgoKCgoKCgoKCgoJiUkJCIiISEgIB8eHh4eHyAkKCotMDM3P0NERUhJSkxNT01NTEpCMicnJycoKiklJSRTdGthZmhpaU0mLjEwLi4tKy8+TVdQVVZZX19dW1RIPjdDUV5eVVdjX1todHN0d3l6cWZma2lgW1pbXFpSS0lISkpKS0pKRkRBPDg3NTY1NC0oJSYnKCkpKSkrLSwsLS4uLi4qJycmJCUoKistLzI1NTY4OTg4Ozw8PD09PTs6Ojs+Pj48OTo6Ojo4NzMyMTAwLiwrKioqKykpKCgmJiUlIyMkJCMjJSYqLC4xMS8uLSolJSQjIyQkJSUmJiYnJygqKioqKysrKywsLCwtLS4uLi0uLi4uLi4vLy4tLCwsKywsLCwtLS0tLS4tLS0tLS0tLi8vLy8wMDAwMDAxMTEwMC8xMTExMjIyMjIzMjM2PkdRWWFqcHV4cm5oY15bVlleYGVrbW5ubmhjXFZTTkhEQUBDQ0JAPT06Ozw7Ojo6Ojs7Ozs7Ozs7PD09PT09PT0+PT1CRElQU1dYWlxZV1ROSktKSk5TV1xkZ2txdHh5eHZyb21xcnJydHl8e3t8gIGDgX59d3FsYVVMSUhFQkNCPz07OTc2MzMrKywsLCwsKyoqKiopKSkpKCgoJiYmJiYmJSUlJSUlJSUlJSUlJSUlJSUlJSUlJiYnJyYmJicoKCgoKCgoKCcnJiYlJSUjJSUlJSUlJSUlJSUlJiYmJiUmJiYmJicpKSgnJyooKSkoKSkpKSkpKSoqKiorKyopKSkpKSkpKCgoKCkpKSkoKCkpKSgoKCkpKSkpKSgoKCgpKSkpKSkpKSkpKSkqKikpKSkpKSkoKCgpKSgoJycoKCYkJCUkIyIhISEcHh4dHh8gJScqLzI3OkBFR0ZHRUZJS05OTUpENywqKCgoKSorJCNBe21fXmVkal8lKzEwMzgvKystOERMT1JTVVpbXl1RSkI9SFJXWVFSWlJUYnJzdHh9fHd1c29oYFxZVlVUUEhISUhHR0VGSkdEQT45NzY1NDMuKCcnJygoKCcpKisrKystLy8uLConJSIkJygrLjA0Njc3NjY3OT08PDw9PDo5NzY3OTg4Nzc6Ozw8Ozc2MzIwLy4sKioqKiopKSgoJyYmJiMkJCQkJCMkJyotLjEwLy4sKSYkJCQlJSUlJiYnJygoKSkqKisrLCwtLS0tLi4vLy8sLS0tLi4uLy8uLSwsKysqKisrKyssLS0tLSwtLS0tLi4uLi8vMDAwMDExMTIyMjExMzMzMzQ0NTU0MzQ0Njc8RExUX2VsdHZzbWhjX1lVVFheY2drbW1tamVdWFJOSEU/PDo8Pj4/Pj49Pj4/Pz88PD0+Pz8/P0BAPz8/Pz4+Pj08PkJITFBUVlhZWldVUExLSElOUlVZX2RobnJ2eXp5dnJxcXFyc3N2eX6AgIGCg4WEgn55cmlfUUdGQz89PTs5NjQ0MzMwKysrLCwrKioqKioqKSkoKCgoKCYmJiYmJiUkJCQkJSUlJSUlJSUlJSUlJSUlJSYmJycmJiUmKCgnJygoKCgnJyYmJSUkJSUlJSUlJSUlJSUlJSYmJiYlJSYmJiYnJycnJycpKCgoJygoKSkpKSkpKSgoKSkpKSkpKSkpKSgoKCgoKCcnJycoKCgoKCgpKSkpKSkoKCgoKCgpKSkpKSkpKSkpKiopKSkpKSkpKCgoKSkoKCcnJycnJSUlJCMjIyEhHx8eHR4fICUpLC80Oj1CR0lJSEZFR0pOT05ORz4zKSkpKSopKCgtcXdpYGRpamI1JS4xMTIyLSoqLDVCTE5OU1dbXVxaTkY8OEhWWVtbU2BkWVtibXB0c3d3d3VuamFaVFFQUExGR0hJRkRERUlKSENCPzs5ODg1MSsoKCgpKSkqKScpKisrLC4uLiwtLCglJCQnKi4yNjg4NzY2ODo7PTw8PDs6OTY2NDY2NjU3Nzs5ODk3NTIxLy8uLSwsLCwsKiopKSgnJycmJCQkJCQjJCUoKi4wMS8vMC0pKCYlJSUlJSYmJycoKCkpKSorKywsLS0tLS4uLS0tLS0tLS4uLi4uLi0sLCsrKiorKysrLC0tLS4uLi4uLi4uLi4vLzAwMTEyMjEyMzMzMzM0NDQ1NTc3Nzg3Nzc3ODtASVFZZGhwdHRtaGFbWlNSVl1gZGttbWxpZF5YVU9MSEM/QEBAQUFBQEBAQUFBQEA/QEFBQUFAQD8/PT0+Pjw7Ozw/QkdNU1VWWFlZVlJNTEpMTlJUWFxhZmtxc3Z3enl3dHJxcXR2eHh9f4GBgYOFhoWDf3dvY1ZHQ0A8Ozo5NjQzMzIvLioqKSkqKioqKSkoKCkpKCgnJycmJiYmJiUkIyMkJCQkJCQlJSUlJSUlJSUlJSUlJSYmJiYmJSYmKCYnKCgnJiYnJyYmJSUlJSUlJSUlJSUlJSUlJSUlJCQlJicnJycnJycnKCgoKCgoKCgqKCgoKCgoKCgoKSkpKSgoKCgoKCgoJycnJycnKCgoKCgoKCgoKCgoKCgoKCkpKCgoKCgoKSkqKioqKSkpKSkpKikoKSkpKCgnJygoJyUmJiUkIyMiIiEgIB4eHyIlKCwvNDs/QUVISUdGRUZMTk9OTU5HNycnKSoqKSgoXXttY2VpcGhAIS4yMC8uLCopKy03QUZKUlJUWF5jXk9FQT1NX2Zmam53cV9ZU2BlZGtyeHl1bWpkW1ZTUE9KREVGSEZERERISEdGRkZDPjo4NTIrKSkpKyorLCwoKCcpKywtLi0sLiwqKScmJigrLjU5ODU0Nzk5PDw9PDo6OTc1NTU0NTU1NTY1MzY2NjIxMC8vLy4tLC8uLiwrKywqKioqJyUkJCQjJCQkJSksLjIxMTIxLisoJSMlJycmJiYnKCgoKCkqKysrKywsLCwuLi4uLS0tLS4uLi4sLS4uLCsrKyoqKiorKywsLS0vLi4uLi4vLy4uLy8wMDIyMzIyMTI0MzM0NTU1NjY3Nzg4ODg4ODc3OT5FTVVdZW1zcm1pYl1bV1NWXF9jZ2tpamllY1tYVE9MR0VEQkNDRENCQ0NCQkFBQUFCQkJCQEA/PTw7Ozs7OTk6O0BFS1BSV1laWlhTUE9MT1FTWFlcYWNobHFzdnl7e3h1c3V1dXd6fIGDhIKCg4WFg4F6cWZZSEE8OTg3NTUyMTEuLCwqKikpKCgqKikpKCgpKSgoJycmJiYmJSUkJCMjIyQkJCQkJSUlJSUlJiYlJSUlJSUmJiYmJiUnJygmJycnJyYmJycmJiUlJSUlJSUlJSUlJSUlJSUlJSQkJSYnJycnJycnJygoKCgoKCgoKCcnJycnJycnJygoKCgnJycnJycnJyYmJiYmJicnJycoKCgoKCgnJygoKCgnJygoKCgoKCkpKioqKikpKSkpKSkoKCkpKSgoJycoKCclJiYmJSQjIiIhICAeHh8kJigsLjM3Ozw/QURBQEFFS0xNTUxIQzQoKCcpKSolVXdvbGhucnBXJisvMy8uLiwrKiorOEBLT1JSVVZWWV5RQ0NPXmdramdtalZZYV5aV1djb3J0cGxuaV9ZVlJOSENAQ0VHRkVGR0VGSElJRkQ/Ozk0LioqLSoqLjExLisoJykrLCwsLC0rLCssKSkoKS0xNjQzNDU2ODg7Ojk4ODc2NDIyMjMzMzMzMjIyMjIxMC8vLS0tLS0uLi4uLC0tKioqKigmJSUlJCQkJCUoKi4xMDAyMTAuKygmJSYmJiYmJygoKCgpKisrKyssLCwsLi4uLi4uLS0vLy4uLC0tLSsrKysqKioqKyssLC0tLy4uLi8vLy8vLzAwMTEyMzQzMjMzMzM0NDU1NjY2Nzc4OTk5ODg4OTk4O0FJUVtibnJzb2xlYFtbWVhZX2NnaWtqamhlXltYU1BKR0VERUZFQ0NDQkJBQUFBQkJCQkFAPz08Ozo6OTk5OTo+RUhOUlVXW1pZVlNRUVJUVlhbXWBiYmhtcHN3eHx8enh1c3Z4fHx+goWEgoCCgn9+eXJpW0o+ODc1NDIyMC8uLSssKiopKSgoKSkpKSgoKSgnJycmJiYlJSQkJCQkJCQkJSUkJCQkJSUlJSUlJSUmJiYmJSUnJycnJycnJicnJiYmJicnJiUlJSYlJSUlJSQkJCQkJCUlJSUlJSUmJiYnJicnKCgnJyclJygnJiYmJiYmJicnJignJycnJycmJiYlJSUlJSUmJiYmJiUlJiYnJycnJycnJycnJycnKCgoKCgpKCgoKiopKSgoKSkpKCgpKSkpJygoKCgoKCcnJyYkIyMjISAeHh8gJCUqLC0xNDY3Ojw9Oz5AQklKTEpKRj4yKicoKSglU3lvY2Fnc29dJCcvLy4tLSsrKioqLC9CS01SU1NRUFVbWkxETmJrb29lcmpfW2hlYWFNV2dsb21ramdjXl1YTkdCP0BBQ0VGRERFSElJSEZEQkA9Ny8sLC8vMDM2ODIuKicoKCkpKywrLC0tLi4rKy0tMDAwMDExMjM2Njc2NTQ0MTExMDEyMjIyMTAwLi8vLy8vLy4uLS0uLi8vMTEvLiwqKSkqKSgnJiYjJSQkJSktMTMyMzMzMC8sKSYlJSUmJycnKCgoKiorKywsLCwsLS4uLi4uLy4uLy8vLy4uLSsqKisrKikpKysrKysrLC4vLzAxMTExMjIyMjIyMjMzMzMzNDQ0NTU2NjY2NjY2ODg3Nzk5ODg4Nzc3P0ZPWmNpcXVzbmplYF5bWVhcYGVnaGtsaWRgXFdVUEtISEdGRUVDQ0JBPz9AQEJCQUFBQD89PDs6OTg3ODg5PEBESk9UV1lbW1lWVFZWWFlbXF1fZGRnaGxwcnR4fHx7eHV2eHp9f4KEhYGAf39+fHlyaVpJOzU1MzEvLi0sKysrKykpKSkoKCkpKSkoKCkoJycnJiYmJSUkJCQkJCQkJCUlJCQkJCUlJSUlJSUlJSUmJiUlJycnJycnJyYnJyYmJiYnJyYlJSUmJSUlJSUkJCQkJCQlJSUlJSUlJiYmJyYnJygoJycnJSUlJSUmJiYmJiYmJiYnJycnJyUlJiYlJCQkJCUlJSUlJSUmJiUlJiYmJicnJiYmJiYmJycnJygoJicoKCoqKSkoKCkpKSkpKSkpKScoKCgoKCgnJycmIyQjIyEgIB8fICIlKCstMDIzMzQ3Ojs+QkRGSUtLSkZCNionKSkmR3xvYF9mcXFlNyAsMC4tLS0rKyoqKi09R0RHUVRXUk9RWVlSSlNianFeb3ZiZW9oYWBiUlBcZGhqaGRfYGJeWVFHQkA/QEJDQ0RERUZGRkZFREJAPTcvLS8xMzQyNTQyMCspKCgoKCoqKiwvMTIyMDAuLi0tLy8uLi8wMjI0MTExMTAxMTAxMjIyMjEwMC8vLy8vLy8uLi4tLi4vLzExLy4uLCwsKikoJyYmJCUkJCQnKy0yNTU1NDEwLSsoJiUlJicnJycoKCoqKyssLCwsLS4uLi4uLi8wMDExMDAwMC8tKysrKysqKissLCwsKywuLy8wMTExMTIyMjIyMjIyMjIyMjM0MzQ1NjY2NTU1NTc4Nzc5OTg4ODc2NjY8Q05YYWlxdHZ0cWpnYmBdW1pdZGdramhoZmNeWVZUUEtIR0ZFRENCQUFBQkJCQkJCQUA/PTw7Ojk3Nzg4OTxBRUpPUVVXWltbW1lbW1pbXF9hY2NlZmZoa25xdHh7fHp3eHh7f4CCg4SCf3x7e3l1cWdeTT0yMDAuLSwsKysrKysoKCgoKCgpKSkpKCcnJycnJyYmJSUlJCQkJCQkIyMlJSUlJCUmJSUlJiYlJSQkJSUlJSYmJycnJyclKCgnJyYmJycnJyYmJSUlJSUlJCQlJSQkJCQkJCUlJiYmJiYmJyYnJyYmJyclJSUlJSUmJiYmJiYmJiYmJiYlJiUlJSUkJCQkJCQkJCQkJCQkJCUlJSUmJiYlJiYmJiYmJycnJycnJygpKSkpKSkqKiopKCgpKSgnJycoKCcmJiYoJyQlIyIiIiAgICAgIycpLi8xMjIzNzo9QEJDRkhKTUxHQTQpKConNnV2a2tqcHFqOBwlLS4tLS0tKyspKSowRkNCSVFTUVBPU1JNWFlbYGtdS25vdm5pZ2ReWVlWUllhYmVgXF1bW1xTS0ZBPz4/QENGRkVEQ0VFQ0JBQDw3Mi4wNDg3Mi0xMjEtLCopKSgpKCksLzI1NTQ0Mi4uLC4uLS0vLy8uLy8vLy8vLzAwMTMzMzMyMTExLi4vLzAwMDAuLi0tMDAwMDAvLi0sLCopKCcmJCUlJCQkJCgrLjI0NTUyMTEuKyknJSUnJygoKCkrKysrLS0tLS4uLi4uLi4uMDAxMTExMjAwLywsLS0tLSwsLS0sLCwsLi4vLzExMTExMTExMjIxMTExMDEyMjM0NDQ1NTQ0NDQ1NjY2ODg4ODg4ODg2NTlCTFZfanN4fHp3cmtnY2BaWF1hZGdoaGpoZGBcWVZRTElHRkVEQ0A/P0JEQ0RFQ0JBQD87Ozs6ODk6Ojo8P0NITlNXWlxeXl9fX19eXl9iZGZmZmZjYmVoa29ydnp8fHp6e32Bg4KCgX57eXZ0c25pXlFBMi4uLSssLC0rKyoqKCgoKCgoKSkpKSgnJycmJicnJiUlJSQkJCQkJCMjJSUlJSUmJiUlJSYmJiYnJyUlJSUmJicnJycmJygoJycmJiYmJycmJiUlJSUlJSQkJSUkJCQkJCQlJSYmJiYmJicmJycmJiYmJSUlJSUlJSUlJSUlJSUlJSUlJiQkJCQkIyMjIyMjIyMjIyMjIyMkJCMjJCQkJCUlJSUmJiYmJicmJycoKSkpKSkpKSkpKCgoKCgoJykpKCgnJiYmJyYnJSQjIyIiICAgIiInKSwuMDEzNTg8QkNEREZKTE9MR0EyKCgsLGx8a2txcm5sQRojKi0tLS0tLSsrKikpLS85RkxRUFBQUEtMUFdeYFtiXldfZXByb2lpZWNdW1hdYGFhXVxaVVhYU09MRT88PT4/Q0NCQUFFRkJAP0FCQTkwLjE1NTAtLzIxMS8uLCkpKSsrLy0wMzU4ODMwLiwsLC0tLi4uLS4tLS4uLTAvMDEzMzMzMzMyMjAwMDAxMTExLi4vMDAwMDAwLy4sKysqKSgnJyYlJSQkJCQlKSwwMjQ0MjIxLy0sKCclJSUoKCgpKysrKy0tLS0tLS4uLi4uLjAwMDAwMDAwMTAxMS8tLS0uLi0tLCwtLS0tLi8wMDAwMDAxMTExMDAxMTAxMjIyMzQ0NDQ1NTQ0NDQ2Njc3Nzc3Nzc3NDQ0OEBMV2FqdXx+fXp2cGllX1lXW11jZmZpamlmYlxaVlFMSUdHRkVCQkRGR0ZHR0VDQkBAPz08Ozk6Ojo7PUFESE5TV1pcX19gYGFhYGBhY2VnZ2dmY2BgYmRqb3N4fXx8enp7foCBgIB9eHZ0cnFtaF9WRjYtLS0rKyssLCwrKycnKCgoKCgoKSkoJyYmJiYmJyYlJSUkJCQkIyMkJCUlJiYmJiYmJiYnJyYmJiYmJiYmJiYnJyUlJSYoKCcnKCgnJycnJyYmJiQmJiYlJSUlJSUlJSUlJSUmJicnJiYmJiUlJiYlJSYmJCQlJSUlJCQlJSUlJSQkJCQjIyMjIyIiIiIiIiEiIiIiIiIiIyMjIyQkIyMkJSUlJSUlJiYmJiYnKCgoJycpKSkpKSkpKSkpKCgpKSkpJycmKCgmJiclJSQiIiAgISMjJykqKy4wMzk8QEJGSk1OTk9PSkZBMSgpKlt/d2xtdnNvUCAgIywsLCwsLCwsLCoqKzE1OkBIT1JPTktIS0tVYWRYUVplaWdhY2toW1hkYV9fX1xfX1xaWVNRT1JSTkhCQD48Ozs9PDw9Pz09PT0/REtBMSoqLjAuLy8zMzIwMS8sKi0wMTEwMjE0ODgzLysqKSksKywsLCwsLS4uLi4vLy8wMjEyMzIzNDQzMzIyMTEwMC8vLi4wMDExMC8uLCwrKyooJycmJiUkJSMkIyYnKysvMDExMS8vLSspJycnKCgoKSkqKysrLCwsKysrLC4uLi0wMDAwLy8wMTAwMTEwMC4uLS0uLi0tLCwtLS0tLC4uLi4vMDAvLy8vMDAwMDExMjIyMjMzNDQzMzMzNDY2NjY2Nzc3NjU0NDQ3QExXY2x2fIF/fHZyaWVcVVNYXGFlaWlqaWZiX1tWUk1JSUhHR0ZHSEpKSkpHRURDQ0A+PTw7Oz09Pz9BRUhNUlZaXmBhY2NiYmFiZWRlZmZmZmNgXVtcZGpuc3V5e3t6ent+foF+eXd1cm9ubGljWU09LioqKisrKywrKSkoKCgoKCgoKCkpKCcnJyYmJiYmJSUlJCQkJCMjJCQlJSYmJiYmJiYmJycmJiYmJiYmJiYmJiYlJSUmJycnJygoJycnJyYlJiYmJSYmJSUlJSUlJSUlJSUlJiYnJyYmJiYmJiYmJSUlJSMjIyUlJSQkJCQkJCQjIyMjIiMjIiIiISEhIiIiISEhISEhISIiISEiIiIiIyQkJCUlJSUlJiYmKCcnJycnKSkpKSkpKSkpKSkpKSkpKSoqKionJycnJiQkIyEhISEiJCcpKistLzE2PkJGSU1QUlJUUkpGPy4oKTl6cmlud3dxVCEgIiYsLCsrLCsrLCwqKiovMDU+RklMTElKTE1MWGJjWUVIU1RfZmxkZGFfYGJpa2VeXl9eXVpSUFFTUkxFQkE+PDg3Nzg4OTg5OTk5O0JQSTEqKSwtMDIyNDIxLzAvLzAyMzQ0NTIyMjMzMC0qKSoqKSsrKy0tLS0uLy8vLzAvMDEwMDAyMzQ0MzMzMzIyMTEwMC4uLy8wMC8uLy0tLCsqKSgpKCYmJSUkIyQkJCcoKi0uLzAxMDAvLiwpJygoKSgoKSoqKSssLC4uLi4vLy4tLy8vLy4uLC0vLy8vLi4uLi0uLi4tLSwsLCwsLCwtLi4tLi8vLy8vLzAwMDAwMDExMDAwMDIzMjIyMjIzMzMzMzQ1NTQ0NDQ0NjlATFljcHZ7e319d3FoX1ZQUVdcYWVoampsZ2RhXFZSTUxLSkpKS0xMTU1MSUdGRENAPz08PDw9PT8/Q0dITVJWWV1fX2NkZGViZGRlZWZmZmZjXV1aWFthZmxwc3l6e3t5en5+fXh2cnBtbmxqZV5UQzErKSopKiorKigoJycnKCkpKCcpKSgnJycnJyYmJSUlJSUlJSUkJCQkJSUmJiYmJiYnJycnJycmJiYmJiYlJScnJiYnJycnJycnJyYmJiYnJyUlJiUlJSQkJSYlJSYmJSUlJSUmJiYlJScnJiYlJSUlJCQkJCIjIyMkJCQkIyMiIiIiIiIhISEhISAhISEhISEgISAhISEhIR4fIyMiIiEiIyMkJCQlJSUlJSYnJiYoKCgoKCgpKSkpKSkpKSkpKSkqKioqKCgoKCYlJCQiIiEhISQoKSorKy4vNT1BRUpTVVRUVlFKRTsqKShUdXFtc3l0ZSogIiElKiwsKioqKywuLCsrKyozPUJIS0dISEZERlBfU0ZLU1FUYmdlaWpmXl9cYmpkWlhbXFxaU1BUVlNRTENCPzs6NzU0NDU0NTY4ODpBRUA4LCkrLC4zMzQ0MjIxNDU2NjU2NzYzMTAvLywrKikoKCgoKSstLS0tLjAvMDExLy8vLzAwMDEzMzEyMjMzMzMxMTAvLC0vLi4vLS4sLSwrKysqKSkoJiQkJCQkIyQkJCcoKywsLzAyMjEvLSsqKSkpKioqKioqKywuLjAwLzAvLS4vLy8vLy4uLi4vLy8vLi4uLi4uLSwsLCsrKyssLC0tLi4uLi8vLy8vLzAwLy8vLy8vLy8wMDEyMjIxMTExMTEyMzMzNDQzNDU3OEFOWWVud3p7fHl1b2VYUFBRVFpiZmdqa2pnZGJdWFJQT01PTU5PT05OTElIRkVEQEA/Pj08Pj4+PkFFSU5RVVtdXWFjZWZmZmdmZmdnZmZkYl9bVVJRVl5kaGtydnp8ent8enp4dXFybGxraWZfWEo6LCkrKikpKSkoKCcnJygpKSgnKSkoJycnJycmJiUlJSUlJSQjJCQkJSUlJiYmJiYmJiYmJicnJiYmJiYmJSUnJyYmJycnJycnJycmJiYmJiYmJiYlJSUlJSUmJSUmJiUlJSUlJiYmJSUlJSYmJSUlJSQkJCQjIiIiIyMjIyIiISEhISEhICAgICAfICAgICAhISEgISEhICAfISQkISEhIiMjJCUkJCUlJiYmJykpKCgoKCgoKSkpKSkpKSkqKioqKioqKigoKCgnJSQkIyMiIiMmKCkpKisuLjQ4PkhLUlZVVVJLSEQ5KSgsa3NqcXhzaTcdJCIjJyorKyoqKSssLi8sKiwrNUFHR0lJRkA/Oz1GUko/SVJZa2hmaGhjZWdcUF1nYVhUV1haWlZRVVNNTUpDQ0A9PTo3NTU1MzQ2ODg8Pj4+PDApKSstMDE0NDQzNDY4ODg3NTQzMS8tLS0sKyopKCgoKCgpKiwuLi8wLzAxMS8vLy8vLy8wMTExMzIzNDQ0NTMyMC8sKy4uLy0tLS0sKysqKisrKCcnJSQmJCQkJCMmJigqKy4xMzMyMjAvLywqKisrKyssLCwuMDAwMC8wMTEwLi8vLy8uLi4uLy8vLy4uLi4vLy0sLCwtLS0tLi4tLS4uLi4vLzExMTEwMC8vLy8vLy8vLy8wMDIyMTEyMjIyMjMzMzQ0NTQ1NzY6Q05ZY2pzeXl5dXJqX1ZPU1JXXGJnbWtsa2llYlxYV1JRUFBPUFBOTkpIR0VEREJAQD8/PT8/QUFDRUdOUVVbXV5iZGdpaGdoZ2dnZ2ZlZGFdWFJPTk9SWWFnbHB0eHt6eXp6eHh3c21tbGlnZFxTQzQtKikoKCcnKCiBgIGAgIB/f35+fn5+fn19fHx9fX6AgIGBgYGBgYGAgICAf39/f4CAgIB/fn5+f39+fn5+fn59fX19fX19fX19fn5+fn5+fn5/f39/f39/f35+fn5+fn5+fn5+fn5+fn59fHt6enp6eXl5eXl5eXl5en2AgoWGiYiJiIiIiYmIiIaFg4J/f39/gYKDg4KAfHt6enp6enx9f4GDg4WFhIKAf35/gYKBgYGAgYGDhoeHhIKDiISEgoB+fn5+fn5+fn5+f4CBg4OCgYGBgYGBgYB+fXt8fHt9fn5+fn5+fn19fX+AgYOEhIWGh4eDgX9+fX19fXx8e3t7e3x8e318fH1+f3+AgICAgH+AgH9+fHx7fH5/fn5/f4CAgIGBgYODg4B9e3h3eXp+f4CAgIGBgYGAfn18fX5+fn5/f4KEgX99fIGAgYCAgH9/fn5+fn5+fX18fH19gICAgYGBgYGBgYCAgIB/f39/gICAgH9+fn5/f35+fn5+fn19fX19fX19fX1+fn5+fn5+fn9/f39/f39/fn5+fn5+fn5+fn5+fn5+fn18e3p6enp5eXl5eXl5eXl6fYCCh4iIiIiHhISEhISEg4SDgH5+fn+BgoODgoB8e3p6enp6e31+gIGCg4SEg4GAf4CCg4ODgoF/gYKDhYWFgX54e4KFhIJ/f35+fn5+f3+BgoODg4KBgYGBgYGBgH99e3x8e319fX5+fn5+fX19fn+Bg4SEhYaHh4OBf359fX19fHx7e3t7fHx9fn5+fX5/f4CAgICAf39/fnx5eXt8fn9+fn5+gICAgYGCgYF/fn17enl6e35/gICAgYGBgYB+fXx9fn5+fn9/goSBfXt5gYGBgICAgIB/f35+fn59fXt7fX5/gICAgYGBgYCAgYGAgH9/f3+AgICAf39/f35+f39+fn5+fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+f399fX5+fn5+fn5+fn5+fn5+fXx8enl5enp5eXl5eXl5eXt9gIOFiIeGg4KBgIGDg4SFhYJ+fn19f4GChISDgn98e3p7e3p6e36AgYGChISDgYCAg4ODg4KCgoKBgYODhYSAeXNzdYCGiIF+fn5+fn+AgYKDg4OBgYGBgYGBgYKBgH18fX19fXx8fH1+fn59fX19foCCg4WFhoaHhIJ/fn59fX18e3p6e3x9fX9/gICAgICAf39/f4CAfn18e3l6e3x+fn59fX+AgIGCgoOCgX99fXp6eXp8fYCAgICBgoKCgH5+fH5+fn5+foCCg4F+eXmBgYGAgICAgH9/fn58fH19fX1+f3+AgICBgYGBgICBgYCAf39/f4CAgIB/f39/fn5/f35+fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn59fHx6e3t6enl5eXl5eXl5eXx/goSEgoGBf4GBhIWGhoeEgX18e31/gYKEhIOCgH17ent7e3t7fX6AgYKEhIOBgoKDg4ODg4ODgX9/gYGEg395dnV2en+DgH9+fn9/gIGDgoODgYCBgYGBgYGBgoF/fXx9fX19fHx8fX5+fn59fH19f4KChIWGhoeFg39+fn19fXx7e3t8fYCAgYGBgYCAgIB/f39/f398e3h3eHl7fH5+fXx9f4CAgYKChIOBf358e3p5e3x9gICBgYGCgoB/fX18fn5+fn5+gYOEgHt5eYGBgYCAgH9/fn59fXx7fX19f39/f4CAgIGBgYGAgICAgICAgICAgICAgH9/f399fX5+fn5+fX19fHx9fX19fX19fX19fn5+fn19fn5/f39/fn5+fn5+fn5+fn5+fn5+fn19fHx7e3l5eXl5eXh4eHh5enyAf4GAgoODg4OGh4eFhIJ9fHt7fH9/gYODg4OBf3x7enp6enx9f4CBgYKEhISDg4SEg4ODg4OBf35/gYGBgYB+fXx6e3+CgYCAf4CBgoSDg4KCgH+AgICBgYGBgH58e319fX19fXx9fn59fX19fH6AgYODg4SFhoSCgH1+fn18fHx9f4CAgIKDg4KBgIB/f4B/f39+fHl4d3d4enx9fX18e3x/f4GCgoWFg4KAfnx7e3t8fn+BgYKCg4OCgX17en1/fn5+fn5/goSBe3l4gYGBgICAf399fXx8e3p8fH1/f39/gICAgYGBgYCAgICAgICAgICAgICAf39/f39/fn5+fn19fX18fH19fX19fX19fX1+fn5+fn9+fn9/fn5+fn5+fn5+fn5+fn5+fn5+fX18fHt7enp5eXl5eHh4eHl6e36BgoOEhYWFhYaHh4WCgHx7e3t8f3+Bg4ODg4KAfXt6enp6enx+gIGAgYKEhISEhISDg4ODgX99fH1/f39+fX19f359foOFg4GAgYOEg4OCgYF+fn+AgIGBgYGAfnx7fX19fX19fX5+fn59fXx8fX+Bg4ODhIWGhIKAfX5+fn5+f3+BgoODgoKCgX+AgIB+fH1/f316eXd2dnh6fH19fXx7fH9/gYKChYWDgoB+fXt8fH1/f4GBgoKBgoF9e3l6fH5+fn5+fn+Cg4J9e3mBgYGAgYGAfn57fHt7e3t8fn9/f39/gICAgYKCgICAgICAgICAgICAgICAgICAf39/f319fX19fHt9fX19fX19fX19fX19fX1+fn5+fn59fX5+fX19fX19fn5+fn5+f399fXx8fHx7e3p5eXl4eHh4eXt8foKEhIaGhoaGhYaGhH99e3p7e31+f4CBgoKDgoF/e3t7enp7e31+gICAgYOEhISDg4ODg4KAf3x9fn5+fn19gYSIiYN9fYKEhIKEh4eDgoKBfnx8fH+BgoKBgYB+fXx8fH19fX19fX5+f358e3t9foGDg4OEhYaFg4F/f39/gYGCg4OEhIOBgICAgICAf359fn5+fXp5dnV1d3t8fX18fHp8f4CAgoKFhYODgH9+fX5+f3+BgYKDgYB+fHp3eHp9f39/f39+f4GEgn98eoGBgYB/f359fXt7e3p6e31+f4B/f3+AgICBgYGAgICAgICAgICAgICAgICAgIB/f39/fX19fXx8e319fX19fX19fX19fX19fX5+fn5+fn19fn59fX19fX1+fn5+fn59fX19fHx9fHt7enl5eXh4eHh5e31/goSEhoaGhoaFhoWCf3x7fHt7e31/gIGCgYODgoB8e3t6ent7fH2Af4CBgYOEhIODg4OCgX9+fX2AgH5+gIB+f4GBf317e4OFhoaFhISBgoB+fXx/f4GCgoGBgH59fHx8fX19fX19fn5+fn17e3x/goODg4SFhoWDgX9/f3+AgYKDg4SDg4GAgH9/f39/fn1+fn59enh1dHR3e35/fXx8enx/gICCgoWFg4OCgIF/f3+AgIGCgoKBgX58d3Z3e39/f39/f35/gYODgH17gICAgH9+fn17e3p6ent+fn5+f4CAgIGBgYGAgICAgICAgIGBgYGBgYGBgYGAgH9/fn19fXx7e3t7fHx8fHx8fH19fX19fX19fX1+fn19fX19fX5+fX19fX19fX19fX19fX19fXx8fHp6eXh4eHh3eHl9f4CDhYWGhoSFhYWEg398fHx8fHx8fH5/gIKBg4SDgX58e3p6e3t8fX1+gIGAgoSEg4OCgYGAf35+f4B/f35+gYB/f359fHx5fn+Cf4CBe3Z2enx9fH9/gYGDg4OBfnx7e3t8fHx9fH59fX5+fX17fH6BgoODg4OGhYOAf3+AgYKDg4SEg4KCgX9+fn5+fn59fn5+fnt4dXNzdHd7fH19fHt7fYCBgYGDhoaEhIODg4OBgIGBgYKDhIOBf3p3dnl8fn9/f35+fn+BhISBfnqAgICAf359fHt7e3t7fH5+fn9/gICAgYGBgYCAgICAgICAgYGBgYGBgYGBgYCAf39+fX59fHt7e3t8fHx8fHx8fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8enp5eHh5d3h6e3+BgoKDhYaGhIWFhYSBfnx8fHx8fHx8fX5+gIGDhIOCgH16enp7e3t8fX9/gICChISDg4KBf399fX9+fXx9fn+Af359fHp4eXp4fIKBfnh0cXFydHd8f3+BgYODg4F+fXx9fXx8fX18fn19fX18fHt8foGCg4ODg4SEgoCAf4CBgoODg4OCgYGAfn18fH19fn1+fn19eXZzcnJzd3t9fn18e3t9gIGBgYOFhYSEhISDg4KBgYGBgoSFg4F9eXZ3eX5/f39/fn5+f3+ChYN/e4CAgIB+fXx8e3t8fX19fn5+f4B/gICBgYGBgYGAgICAgICAgIGBgYGBgYGBgICAgH5+fn18e3p6e3t8fHx8fHx8fH19fX19fX19fX19fXx8fHx8fXx8fHx9fX19fX19fX19fHx7fHt8enp5eHh3eXx+gYODg4SFhISEhYWEgX9+fHx8fHx8fHx9fX6AgIKCg4OBfnx7e3x8e31+f3+AgYKEhYSDgoB+fX1+gIF9fH1+f39/fHt7enp5d3Z2fH+Cgn54dHZ4en1+gICBgoODgX59fHx8fHx9fX19fX19fXx7e3t9gIGDg4ODg4OCgH+AgYKCgoKBgYGAgH18e3l7fH5+fn19fXp4dXNxcXJ2en1+fXx6fH6AgICCg4WFhISEhIODg4KBgYODhIWDgHt4dnh5fn9/f39+fn5/gIOFhIB8gIB/f319fHt8fHx9fX1+fn5/gICAgIGBgYGBgYCAgICAgIGBgYGBgYGBgYGAgICAf358fHt6enp8fHt7fHx8fHx8fX19fX19fX19fX5+fn58fHx8fHx8fH19fX19fX19fX18fHt7e3t6enl4eXh7foCChISDhISEhISEhISBfXt8fHx8fHx8fH19fn+AgoKDg4F/fHt7fHx7fH1+f4CBgoKEhIOAfn59f3+BgYCAf39/fn58enp7e3p4eHZ3e39+enp7fHx8fH2AgIGCg4OBfn18fHx8fX19fX19fX18e3t5en2AgIKDg4ODg4KAf4CAgYGBgYF/f358eXl4eXt+f35+fX18eXd0cXBwc3Z6fX58e3t9foCAgIKDhYWEhISEg4OCgYGBgoKDhIJ/e3h2eHx/f39/f35+fn+Ag4WEgHx/fn59fXx9fX5+fn59fn5+f3+AgICAgYGBgYGBgYGAgIGBgoGBgYGBgYGBgYGBgX9/fn18e3t7e3t7e3t7e3t7fHx8fH19fn5+fn1+fn6Af3x8fHx8fHx8fX19fX19fX19fXt7e3t7e3p6eXl5e36AgoOCg4SEhISEg4ODgX18fHx8fHx9fXx9fH19foCCgoODhIB9eXt8fHt8fH1/gIGCg4OEgn99fn5/fnx5en9/fn19fn9/fnx8fX18e3d2eXh1eYB+e3p7foGBgYGDg4F+fn19fX19fX19fXx8enl6eXl6fX+BgoODg4OCgoGBgoKBgX9/f318e3l3dnd4fH1+fX5+fXx4dXNwbnBydXl9f3x7fH5/gH9/goOFhYWFhIKCgYKCgYGCgoOCgX16d3Z6fYCAf39/fn5/f3+ChoaBfn9+fn19fH19fn5+fn5+fn+AgICAgICBgYGBgYGBgYCAgYGCgYGBgYGBgYGBgYGBf359fHt7e3t7e3t7e3t7fHx8fHx8fX18fHx8e31+fn58fHx8fHx8fHx9fX19fX19fXx8e3t7e3p6enp5eXp8f4CBgoOEgoKCgoKCgoGAfXx8fHx8fH19fHx8fX1+gIKCg4OEgX59fXx8fX5/f3+AgIGCg4SCf31+fn16dHN3fX9+fXx9foB/f4CChISCfHRzd3d5foB7ent+gYGBgYODgX5+fX5+fX19fX19e3t5eXh4d3h7fYGCg4ODgoKBgYGBgYCAgIB+e3p5d3Z2d3p9fn9/f358end1cnBubnB1eX1/fHt8fn+AgYGCg4WFg4OCgYGAf4CAgIGBgoF/fHp3eHuAgIB/f39/f39/f4KEhIF+f35+fX5+fn9/f39/fn9/f4CAgICBgYGBgYGBgYGBgICCgoKCgYGBgYGBgYGBgYB+fn18e3t7enp7e3t7e3t8fH19fX19fX19fX19fXx8fHx8fH19fX19fX19fX18fHx8e3t7e3t7enp6enh6fH2AgYCCgoKBgICAgIKCfn59fHx8fHx8fHx9fX19fX6AgoKDg4SDgH58fH1+f4F/f3+AgYODg4KAfX5+fHx5eXx9hIeFgH5+gICBg4SEg4F+d3N1d3p9fXx6fH+BgYGCgoKBf318fX19fX5+fXx6eXl4d3V0dnl9gIKDg4GBgYGBgYGBgIB+fXx6eHd2dXV2eX5/gIGBf3x6dXNxcG5ucHV6fX18e3x+f4CAgIGChISDgYGBf4CAgICAgYGBgH16dnZ5fICAgIB/f39/f39/gYSEgX5/fn59fn5+f39/f39/f3+AgICAgIGBgYGBgYGBgYGBgYKCgoKBgYGBgYGBgYGBgH59fHt6e3t6ent7e3t7e3x8fHx9fX19fX19fX19fHx8fHx8fX19fX19fX19fXx8fHx7e3t7e3t6enp6eHp8foCBgYGBgYB/gIB/gYB9e3p8fHx8fHx8e3x9fX19foCCgoOCg4OAf359foCAgoB/f4CBgYGDg4J+fn59fXt9fYCBg4WCgYCAgYKCgoKBgH15c3Byd3t8ent8f4GBgYKCgoB+fXx9fX19fX18enl4d3d1dHJ0eH2AgoKCgYCAgICAgIB/f318enl3dnVzdXZ6f3+AgIB+fHl1dHJwbm5wdXp9fXx7fH5/gICAgYKEhIOBgYF/gIB/f3+AgH9+end1dXl8gICAgH9/f39/f3+BhISBfn5+fn5/f3+Af3+AgH+AgICAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGCgoGBgICAfn18e3t7e3t7e3t7e3p8fHx9fX19fHx8fH19fX19fX19fX1+fn5+fn59fX19fHx8ent7e3t6enp5eXl5fH6AgYGCgX59fX5/gIGBgH18fHt7fHx8fHx8fX19fX1+gIGBgoKDgoF/f3+AgoKDgYCAgICBgYKEg4F/fn9/fHx8foGBgX99f4GBg4SCgYB9e3h0b2x1fH57e3x/gIGCgoODgX99fHx8fHx8fHt5eHd3dnRzcHJ2e36AgoKAgH99fHx9fn59fHl4dnZ1c3N0d3x+gIGAgH98eXZ0c3JvbXB0eX19fHx9f3+AgICCgoODgoGBgYGBgIB+fn5+fXp4dXN2en2AgH9/f39/f39/f4GEg399fn5/f3+Af39/f4CAf4CAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYKCgYGAgIB+fXx7e3t7e3t7e3t7enx8fH19fX18fHx8fX19fX19fX19fX5+fn5+fn19fX18fHx6e3t7e3p6enl5eXp9f4GBgoGAfn19foCBgYB9e3x8e3t8fHx8fHx9fX19fX5/gIGCgoOCgYCAgIGCgoOBgYCAgIGBgoSDgX9+e3h5fHx+gYGCg4GCg4SDgoKAfXt5d3Vva3N8fXt7fH+AgYKCg4OAfXt6fHx8fHt7enl3dnNycG9ub3V6fX+BgX9+fnx6ent8fXx6eHh2dHNycnR3fX+AgICAfnx4dHRycW9ucHR5fX18fH1/f4CAgIKCg4OCgYGBgYGAgH5+fX17eHRyc3Z7foCAf39/f39/f39/gYSCf35/f4CAf39/f4CAgICAgICAgICBgYKCgoKBgYGBgYGBgYGBgYGBgYGBgoKCgYCAgIB/fn18e3t6ent7e3t7e3x8fX19fX19fX19fX19fn59fXx8fn5+fn5+fX19fXx8e3t6enp6eXl5eHh6e3+BgoSDgYB9fX6AgoKCf3x7e3t7e3x8fHx8fH19fX1+fn+AgYKCgoOCgYCAgYGDgoGBgICBgIKDg4OCgH58e3x8fn9/goaHh4WEg4OBgH17enl6eHRtcXp8ent9gIGBgoKDg4F+e3p7e3x7e3t6eHd2c3FubWxtcnl9fn9/f3x6eXh4ent9fHl4d3RycXBxc3h9f4CAgIB+fHd0c3Jxb25wdHl9fXx8fn9/gICAgoKDg4GBgIGAgH9/f318eXh0cHFyd31/gIB/f399fX9+gH+AgoF/fYCAgIB/gH+AgICAgICAgYCAgIGBgoKCgoGBgYGBgYGBgYGBgYGBgYGCgoGEhYWGhoSCf359fX19f39/f35+fHx9fX19fX19fX19fX1+fn19fX1+fn5+fn59fX19fHx7e3p6enp5eXl4eXt+gYKDg4KBgICAgIGCgoF/fHt7e3x8fHx8fHx8fX19fX5+f4CBgYGCg4OCgYGBgYOCgYGAgIGAgYKDg4KAfn59fX1+f4GEhIWFhIWFgn9+fHp5eXh4dnBud3t6e32AgYGCgoODgX57ent7e3t7enl4dXRxbmtqaWtwdnx+f316eHd2dnZ4e3x8enl3dHJxcHF1eX6AgYCAf358dnRzcnJwbnB2e319fHx+f3+AgICCgoODgYGAgYCAf399fHp4dHFub3J3fX+AgH9/fXx8fX6Af4CBgX99gIB/f4CAgICAgICAgICBgYGBgYGCgoGBgYGBgYGBgYGBgYGBgYGAgYGDhYiJiYuLiIeDgH6AgoODhoaFgoF+fXx8fH19fX19fX1+fn19fn5+fn5+fn5+fn58fHx8fHt7enp6enl5eXl7foGDg4SEgoKBgYGAgYOCgX18e3t7fHx8fHx8fHx9fX19fX1/gICBgICEhIODgoKChIOCf31+f4CAgYKCg4J+f39/f39+f4CCgoSEg4GBfnt7enp5eHd3cG51eXl8fX+BgYKCgoKAfXt6e3t5eXp4eHZ0cW9ta2lmaW92fH9+e3h2dHNzdHh6e3p6eXZ0cnFwcXR5f4CAgICAf3p2dHNzcnFxcnh8fHx8fX5/f39/gYKDgoGAgICBgICAfnx6eHZyb2tvdXl+f4CAf39+enx+gICAgIGBf36BgYGBgICAgIGBgYGAgIGBgYGBgYKCgYGBgYGBgYGBgYGBgYGBgYCBg4SFiImJiYmJiIeFg4WHiImKiYeHhoOAfn59fX19fX19fX5+fX1+fn5+fn5+fn5+fnx8fHx8e3t5eXl5eXl5e3+CgoSEhYWDgoGBgYCBgoCAfHt7e3t8fHx8fHx8fH19fX19fX1+gIGCgoODg4OCgoGCg4J/fXx9gIGCgoKDg39/fn1/f39/gYKCg4OCgX58e3t6enl4d3d2c3V5eX1+f4GBgoKCgoB9e3p7e3t7e3p4dnVyb2xqZ2Zpb3Z8f357eHZ0dXR1eHp7enl4dnRycXBxdXt/gICAgIB/e3d1dHVzcnN1eHx8fHx9fn9/f3+BgoOCgYCAgIGAgH9+fHp3dHFua291e3+AgIB/f3t5e32AgICAgYF/foGBgICBgYCAgYGBgYCAgYGBgYGBgYGBgYGBgYGBgYGBgICAgICAgICBgYSHiIeIiIiIh4eGhoiHiYmHh4iJiISCf35+fX19fX19fn5+fn5+fn59fX5+fn59fXx8e3t6enl5eHp5e32AgYSEhYWFhISCgYGBgIGCgH17e3t7e3x8fHx8fHx8fX19fX19fn+AgYKCgoKDg4ODg4OCgH99fH6AgIGCg4ODgH9+gICBgoGCgoKCgoF+fHt6enl4eHd3d3h0c3h6fH+AgYGBgIKCgH17ent7e3t6enl3dXJvbGlmZWZsdXx+gHx5eHV2dnd5enx7enl4dnNyc3R4fYCAgICAgX96eHZ3dnN1dXZ6fXt7e3x/gIB/f4CCg4KBgYCAgICBgH99eXZxb2xscHZ9gICAgIB9enh7foCAgICAgH59gYGAgIGBgYGBgYGBgICBgYGBgYGBgYGBgYGBgYGBgYGAgICAgICAgIGBgYKDgoKCg4WGhoWFhoWFhYWFhYaIiIaCgH59fX19fX1+fn5+fn5+fn5+fn5+fn19fHx7e3p6eXl4enx/goSFhoaGhoaEgoKBgYGBgn9+e3p7fHx8fHx8fHx8fHx9fX19fX1+f4CBgoKCgoODg4ODg4J/fnt7foCAgYKDg4OCgH+AgoKDgoKCgoKCf3x7enp6eXh4d3d3d3NzeXt8foCBgYGAgoKAfXt6e3t7e3p6eXd1cm9saWZlZmx1fH5+fXt6eHh6e31+gIB/fnx7eXh4eXx+gICAgICBgX57eXh3dnV0dnl7e3t7fH+AgH9/gIKDgoGBgICAf4CAf315dnFua2tyeX5/gICAgH14d3p+gICAgICAfn2CgoKCgoKCgoGBgYGBgYGBgYGCgoKCgYGAgICAgICAgICAgIB/f39/gIB/f358fX1/gYKEhYOBfnt7fn6Ag4aHiIaDgH5+fX19fX19fn5/f35+fn5+fn5+fX18e3t7enp5ent9gYSHhoWFhYWGhoKDgIGAgIB+fHx7e3t7enp7e3t7e3t8fH19fHx9fXx9f4CBgYGDg4ODg4OCgH99fHx9gIGCgoKCg4OCgoOFhIWDg4KCgYB/fHt6enp5eXh4dnh3dHJ2en5/gIGBgYGDg398e3l6e3x8e3p5eHV0b2xqZ2ZobHV8fn5+fXx8fH6AgIKCgoKBf4B+fX5+f3+BgYCAgICBgX57eXl3dXR2enx8fH1+foB/f3+AgoOCgICAgYGAgH9/fXl1cGxqbHR6fn+AgIB/e3d1en6AgICAgIB/f4KCgoKCgoKCgYGBgYGBgYGBgYKCgoKBgYCAgICAgICAgICAgH9/f39/f39/fnx9fX5/gIGBfXh3eHh5eXyAgoaFhYOCgIB/f39/f39/f39/fn5+fn5+fn59fXx7e3t6enp8fYCChYaFhoWFhYODgYGBgYF/fHp6ent7e3t6ent7e3t7e3x8fX18fHx8fH1/gIGBgYODg4ODgoF/fn17e3yAgYKCgoKDg4OEhYaFhYODgoKDgYB9e3p6enl5eHd4eHh0cXJ5fH+AgYGBgYGBf3x7eXp7fHx7enl4dXRxbmtoZ2ltdXx+fn5+fX5/gIGDg4ODg4KBgoCAf3+AgIGBgICAgIGBgYB+e3h2dXd6fHx8fX5+gH9/f4CCg4KAf4CAgH9/f359eXVwbGxwdXx/f3+AgH15dnd6foCAgICAgH9/goKCgoKCgoKCgoGBgYGBgYGBgICAgIGBgICAgICAgIB/f39/fn5+fn5+fn59fXx8fX1/fnp4eHl6ent7fH6Ag4OEhoWEg4OAgICAgIB/f39/f35+fn5+fn19fHt7e3p6en2Ag4WFhISFhYWEgoGBgH+Af3x6eHh4enp7e3p6e3t7e3x8fHx9fXx8e3t7fHx/gICBgoKCg4OBgH59fHx7fH+AgoKDg4OFhIWFhoaGhIODg4KCgH18e3p6eXl4eHh5dnNucHd8f4CBgYGBgIB/fHt6enp9fX17enl3dHJva2hoaW52fH9/fn19foCBgoSDg4ODgX9/f39/foCBgIB/fn5+f4CCgYB+end1d3l8fHx9fYCAf39/gIOEgX99f39/f39/fnt3dG9qa3B3fYCAgH9/fXl1eHt/gICAgICAf36CgoKCgoKCgoKCgYGBgYGBgYGAgICAgYGAgICAgICAgH9/f39+fn5+fn5+fn19fHx8fHt7eHh5e3t7fHx9fX6AgoOEhYWGhoaGhoaGhYF/f35+fn5+fn5+fX18e3t7enp7foKEhISEhYSDgoF/fn58fHt6eHd5enp6enp6enp7e3t7enp7e3p6enp7e3t8fYCAgIGCgoKCgoB/fXx7e3p7fn+CgoODg4SFh4eHhoSCgYGBgoKAfXx7enp5eXd3eHt9eXRyd3x/gIGBgYGDg4B9fXt8fH19fH5+fXl3c3BvbGprb3Z7fX9/fn1+f4CBgoCAfnx6eXh5eXp8f4CAgH9+fX18foCCg4F8d3V3eXx8fH19fn5/f3+Ag4SBf3x+fn5/fn59e3dybWttdHp+f4CAf399eXV4e3+AgICAgIB/foODg4OCgoKCgoKBgYGBgYGBgYGBgICAgICAf3+AgICAf39+fn5+fX19fX19fXx+fn19fHx7e3t7e3t9fX19fn5/gIKDhIOGh4iJiYqJhYB9f39+fn5+fX18fHt7e3t7fH2AhISEhIWGhIF/fn18eXl5eXd3d3l6enp6enp8fHt7e3p5enp5enp6ent7ent+f4CBgYGCgoGBgH59fXt7e3t8foCBgoKDhISFhoaFgoCAf4CBf35+e3p5eXh4d3d4eHt7dXR4fH1/gYGBgYKCgX59fHx8fX6AgYGAfHp2c29ubm5yen1/f39/f35+gIB/fHp4d3Z0cnFydXl+gH+AgH5+fHx8fYKEhH54d3h6fHx8fn5+fn9/foCCg4J/foB/f39/fn17dXJtam52fX9/gH5/f3x4dXh8f4CAgICAgH9+g4ODg4KCgoKCgoGBgYGBgYGBgYGAgICAgIB/f39/f39/f35+fn59fX19fX19fH19fHx9fXt7e3t8fH19fX19fX1+fn+AgoOFh4iIiYiGgX59fX5+fn59fXx8e3t7e3t8foGCgoSEhIJ+e3p4d3Z3d3d3d3d3eXp6enp6ent7e3t5eXl5e3l5eXp6e3t6e3x+f4CBgoKCgYF/fn18e3t7e3t9gIGCgoKDhIWGhYOAf39/f3x7fX17eXl5eHh3d3Z2d3Z3dnd6fX+BgYKCgoKBfn18fHx9f4GDhISBfXh2dHJzdHh7fn9/f39/f39/fnp5eHd2dXNxcHF0eX6Af4CAgH57dnh6foODgnx4eXp8fHx+fn5+fn5+gYGCgoF/f35+f39+fXl1cG5tcXl+f3+Afn+AfHd1eHx/gICAgICAf36Dg4ODgoKCgoKCgYGBgYGBgYGAgICAgICAgH9/f39/f35+fn59fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx7e319gIODg4SEhYWEgH19fn5+fX19fHx7e3p6e31+gYOEhIODf3t4dnZ3d3Z2eHh3eHl5enp6enp6enl7e3p5enp6enl5eXl5ent7fH1/gIGCgoKBgH9+fXt8fHp6fHx/gYGBgYGChISDgX5+fn58dnyAfnx6eXl4eHh3dnZ1dnl3dnl9f4GBgoKCgoF+fXx8fn9/gYOFhIOAfHp5eXt7e36AgH9/f39/gIB+eXh4d3V1dHJyc3V6foCAgIKDfXl1dHd7f4OCfXt5ent7e3x9fX1+f35/gIGCgoF/fn9/f358enVxb290e3+AgH9/f4B8d3V4fH+AgICAf3+AfYODg4OCgoKCgoKBgYGBgYGBgYCAgIB/gICAf39/f39/fn5+fn19fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx7fHx9f4CAf3+Bg4SAfHx+fn59fX18fHt7enp7fX+Cg4ODgoB8eXd2dnZ2dnZ4eHd4eXl6enp6enp6eXl5eXl5eXl5eHh5eXl6e3t8fX6AgYKCgoGAf358e3x8e3t8fH+BgYGBgYKDgoB/fHx9e3h5gIJ/fXt5eXh4eHd4enh2dnR2eX1/gYGCgoKCgX59fHt8fH2AgYODgoB/fn59fn9/f4CAgH5/f4CBgX57eXh3dXV0c3N0d3t/gICAgIGAfHZzdHl+gYOAfHp6e3t7fH19fX5/fXx9f4GBgH9/f39/f355dXFub3V8f4CAf39/f3x2dXh8f4CAgICAgIB9hISEhIKCgoKCgoGBgIB/f4CAgIB/f39/f39/f39/f399fX19fHx8fHx8fHx8fH19fX18fHx8fHx8fHx8fn5+fn5+fX17fX59fHt8gISFhH15en1+fX19fXt6enp7e32AgoOEhIOBfnp4d3d3d3d3d3h4eXh5eXp6enp6enp6e3t5eXh4eXl4eHl5eXl6enx9gICAgYKCgoJ/fnx7fHx8fXx+gICBgYGBgoKCgH18enx7eHuBg4B9e3l4eHh3eHt/enVzc3Z7fX+BgYKCg4OAfXx6enp8fH5/f4CAgICAgYGBgYCAgIB+fn+AgIOAfnt5eHh4dnZzdXV6foB/gICAgoB9eXV0d3yAgoF+ent7e3t6e319fn59e3l6fX5/f39/f39/fHh0cG5wd31+f39/f39+eHR0en1/f4CAgICAfnyEhISEgoKCgoKCgYGBgYGBgICAgH9/f39/f39/f39/f318fHx8fHx8fHx8fHx8fHx8fX19fX18fHx8fX1+fn5+fn5+fn9/fn59fH6Dh4eCfHl6fX59fX19fHt6ent+gYOEhISEg4B8eXh3d3d3d3d3eHh5eHl5enp6enp6enp5eXl5eHh5eXh4eXl5eXt7fX6AgYGBgoKDg4B/fHt8fX1+fn+AgIGBgYGBgYF/fXx6fHt4e4GDgH17eXh4eHd5fYB6dXR0dnt9f4GBgoKDg4B9fHp6e3x8fH5/gIGBgICBgYGBgIB/f39+f4CAg4F/fHl4eHh2d3d4d3t+gH+AgICCgH16dnR3e36AgH98e3t7e3p7fX19fn57d3Z5fH9/f39/f398d3Rwb3N4fn5/f39/fnx3cnR6fX9/gICAgIB+fIODhISCgoGBgoKBgYGBgYB/f39/f39/f39/f39/f39+fX18fHt7fHx8fHx8fHx8fH19fn5+fH19fHt8fH19fX1+fn5+f39+fn9/gYWIiYN+e3t9fn19fXx8fHx8foKEhIWFg4OCf3x3d3d3d3d3d3d4eHl4enp7e3t7e3t6eXp5eXl4eHh4eHh5eXl5enx+f4CAgIGDg4ODgX99fH18foCBgYGAgICBgYKCg4F/fHp7enZ+goOAfXt5eHh4eXp9f3l0cnJ0en5/gICBgYODgX98enp6e3t8fYCBg4ODgoKCgYGAgIB/f35/gICDgX98enl5eXh4d3h6foCAgICBgIB/fXt4dXZ6fYB/f318e3t7ent9fX1/f315dnh7fX1+fn9/fnt2c29wdHl+f39/gIB/e3VydXp9f4CAgICAf357g4ODg4KCgYGCgoGBgYGAf39/f39/f39/f39+fn9/fnx8fHx7e3t8fHx8fHx8fHx8fn+AgIB+fn5+fHx8fX19fX5+fn5+fn5+f3+BhIeHhX97e31+fX19fHx9foGEhYWEhYSDg4F+enh3d3d3d3d3d3h4eXh6ent7e3t7e3p5enp5eXh4eHh4eHl5eXl8fX5/gIGBgYODg4OCgH58foCBg4WFg4GBgYGBgoKBgH98fHl4eH6Cg4B9e3l4eHh5fH98d3V1cnR6fn+AgIGBgoKBf317e3t7e3x9gIGDg4OCgICAgICAgH9/fn+AgIOBgH18e3t7enl4eXt/gICAgYGBgH99e3h3d3h7fHt9fHx7e3t8fX19fX+Afnp3eHt9fX5+f39+e3dzcHB1e35/f39+fn56dXJ1en1/gICAgIB/e3iDg4KCgoGBgYGBgYGAgIB/f39/f35+fn5+fn9/f399fXt7e3t7e3x8fX19fX19fX18fH+BgYGBgX59fHx8fn5+fn5+fn5+fn5+foGDhomFgnx6fH1/fXx9fX+ChoeHhoWEhYKBfnx5eHh4d3d3d3h4eHh5eXp6e3t7e3t7enp6enl5eXl5eXl5eXl5enx+gICBgYGBgoKCgoKBgH9/gISFhoaCgYGAgIGBgYGAf3x7eHZ2fYKEgH17enp5eXl6fX55dXVxdHp+f4CAgYGBgoGAfn1+fXx6e3x/g4ODgoB+fX5/gIB/f35+f4CBgoF/e3p7e3t6eXl6fX+AgYGBgYKCfnx7eXl5eXl6e3t7e3t8fHx8e31+gIB+e3d5e31+fn+AgH57dnNxcnh8fX59fX5+fHlzc3V7f4CAgICAgH16dYODgoKCgoGBgYGBgYCAf39/f39/fn5+fn5+fn5+fn19fX18fHx8fHx9fX19fX19fXx8fX5+fn9/fn18fHx+fn5+fn5+fn5+fn5+gYOGh4eEgH5+gH99fX5/gYWHh4iHhoWDgn97eXd2d3d3d3d3eHh4eXl5enp7e3t7e3t6enp6eXl5eXd3d3d5eXp7fH+BgoGBgYGCgoKCgoGAgIGDhoeGhoSCgYCBgX+AgoKAfXx5dnZ8gYOBfXt6enl5eHh4fH57eHN1e35/gICBgYOCgYGCgYB/fXx7fH6Cg4OBfXp8fn+AgH9/fn5/gIGCgX99e3t7e3p5eXp9f4CBgICBgYF/fXt7e3t7e3t5eXt7e3x8fHx7fX6AgH58enp8fn5/f4CAfnt3c3FzeHx9fn5+fn59eXRzd3x/gICAgICAfXl3g4OCgoKCgoGAgICAgH9/fn9/f39+fn5+fn5+fn19fXt8fH19fX19fX19fX18fHx8fHx9fX19fHx9fX19fX1+fn5+fn5/f39/fn6BgoWGh4WBfX5/f39+f4CDhoeIiIeHhYJ+enh3d3Z2dnd3eHh4eHp6ent6ent7e3t7e3p6enp5eXh4eXl5eXl5e32AgYGCgoKBgYGCgoKBgYGDhIWGhYWDhIGBgICBf36Ag4KBfn52dXuBgoF9e3p6enp7end4fX14dHV7fn+AgIGBgoKEg4SDgoJ/fXx8fX+Cf3x8e3t/f4CAf39+f3+AgYKCgH17e3t7enl5e31/gICAgICAgH18e3x9fn59e3p6e3t7enp7e3p8foCAf3x8fHx9fX5+f39+e3dzcnV5fX1+fn5/f314dHR3fH+AgICAgX97eHeDg4KCgoKBgYCAgIB/f39+f39/f35+fn5+fn5+fX19e3x8fX19fX19fX19fXx8fHx8fH19fX19fX19fX19fX5+fn5+fn9/f39+foCBg4WGhoJ/fX19fX5/goWGh4iIhoOAfXp3eHh2dnZ2d3d4eHl5enp7e3t7e3t7e3t7enp6enl5eXl5eXl5ent9f4CBgoKCgoGBgYKCgoGChIaFhoaFg4KBgIB+fX+BgYGBgYCBgHp2en+CgX17enp6enyAgoOBfnlzdXt+f4CAgYGCgoSFhISEg4F+fHx+f358ent8fn9/gIB/f35/f4CBgoKAfXt7e3t6eXl8fX+AgICAgIB/fXx7fH1+fn17eHp6e3t6ent7enx+gIB/fHx8fH1+fn+AgH57d3Nyd3p+fX5+fn9/fXh0dHh8f4CAgICBgHx6eISEgoGBgYGBgYB/f35+fn5/f39/fn5+fn19fn59fHx8fX19fX19fX19fXx8fHx9fX19fX19fX5+fX1+fn9/f39+fn5+f39/fX5+fn6AgoWHhYJ+fn5+f4CChIaGhoaEgXx5eHd3d3d3d3d3d3h4eXl6ent7e3t7e3t7e3t6enp6enp6enl5enp8f4CBgoKCgoGBgYGAgYKCg4OEhoaGhYSBgYB/gH9+f4KCgYGAf3x7eXt/gYGAfXx7enp6eHh3d3t6dnJ2e3+AgICAgICChYWEhISCgH99fYCAf317e3x/gICAgH9/gICAgYGCgoB+fH19e3l5ent+f3+AgICAgH57e319fn5+fXt4eXp7e3p6e3t6fH6AgX97e3x9fXx+foGBgH13c3R4fH1+fHx8f398d3V0eX5/f4CAgIB/f35+g4OCgYGBgYGAgH9/f39/f39/f39+fn5+fX1+fn18fHx9fX19fX19fX19fX19fX19fX19fX19fn59fX5+fX1+fn5+fn5/f399fn5+fn+Bg4WGg4B/gIGBgoSFhoaFg398enh3dnd3d3d3d3d3eHh5eXp6e3t7e3t7e3t7e3p6enp6enp6ent8fn+AgoKCgoKCgoGBgICBgoKDg4OEhYaFg4CAgH+AgIGDgoKBg4OCgYB/fX6AgYB9fHt6enp7e319e3h0dHZ7fX6AgICAgIKEhIODg4GAf319gIB/fXt7fH+AgICAf3+AgICBgYKCgH17e3t7enl6e35/f4CAgICAfn19fn5+fn59e3h5ent7enp7e3p8foB/fXt7fH1+fH5+gYGAfXd0dHh8fX58fHx/f3x3dXV5fn+AgICAgH9/f3+CgoKAgICAgH9/fn+AgYKCgX9/f39/f39+fn19fX18fH5+fn5+fn5+fX1+fn19fX19fX19fX1+fn19fX1+fn5+fn5+fn9/f39/f39/f4GDhYaGhIKDhISFhoWHh4SBfHl4dXZ2dnZ3d3d3d3d4eHl5enp7e3x8e3t7e3t7e3t7e3p6enx8foCBgYGDg4ODgoKCgX9/f4CBgoODg4SEhIOBgIB/foCAgYKEgoGBgoGBgYGAf3+AgX9+fHt7e3p5fH18eHZ1eHt+f4CAgICAgIKCgoKAgIB+fXx/f398e3t9fn9/gIB/f3+AgICCg4OBfXx7e3p6eXp9foCAgICAgH9+fn5/f39/fn15eHh5e3t7e3p6fHx/gYB+e3t8fn59fX+CgoF8d3R2enx+fX19fX5/fHd0dnt/gH+AgICAf4CBf4KCgoCAgICAf39+gICBhoaEg4KCgoKAgH9/f399fX5+fn5+fn5+fn5+fn19fX19fX19fX19fX5+fX19fX5+fn5+fn5+f39/f39/f39/gYGDhoaFhIWGh4eIhoWFgoB+end3dnZ2dnd3d3d3d3h4eXl6ent7fHx8fHx8fn5+fn5+fn59f4CBgoKCg4KDg4OCgoF/fn5/gICBgYGBgoODgoGBgYB/f35+f4GBgICBgIGBgYB/f36AgH98e3t7enl6ent1c3Z7fn5/gICAgICAgYGBgYCAfXt7fX9/fXt7e31+f39/f39/f4CAgICCgoB9fHx7enp5e31+gICAgICAgH+AgICAfn58e3l4eHl6ent7fHx8fH6Af317e3x+fn19gIKCgXx2dHV6fH59fX19fn98eHV3e3+Af4CAgICAgYF/gYGAgICAgICAf3+AgYSIiYiHhYWDg4ODgYGAgH5+fn5+fn5+fn5+fn19fX19fX19fX18fH19fX5+fH5+fn5+fn9/f39+fn5+f39+fn5+gIOGhoaGh4iIiIeGhIKAfHp3dXV1dXV2dnZ4eHl6eXl5eXt8e3x+fn1+f39+f4CAgICBgYKChISDg4SEhISDgYKBfn17fX9/gIKCgoKCgoGAgYGBgH9+fn5/fn+AgICAgICBgYB+f36BgoB7ent6enl5e3Z2ent9fn+AgH9/gICAgIKBgX16enl9fn59e3t9fn9/f39/f3+AgICAgIGBf318e3t6ent8foCAgICAf4CBgYCBgoF/fHx7e3l5eXl6e3x8fHt8f4B/fXx8fH5+fX2Ag4OBe3d1dXp9fX19fn6AgX55dnh8fn5/fn6Af4CCgX2BgYCAgICAgIB/f4CBhIiJiIeIiIiIiIiGhoOBf359fn5+fn5+fn5+fX19fX19fX19fXx8fX18fX1+fn5+fn5+f39/f35+fn5+fn5+gICAg4aGhoaHiIiIh4aEgn95dnR0dHR0dXZ2en6AgH59e3t7fH5/gYGDg4SFhYaHiIiIiIiIiIiIiIiIhoaGhoSDgYB+fH1+gICAgoKCgoKBfn5/goKBgH5+fn9/f4GBgYCAgICAgH9/fn+Bg4J+e3t7e3p6eXp8fH1+f4CAf39/f4GChISCf3x6en6Afnx6en1+f39/f39/f4CAgICAgYF/fXx7e3p6enx+gICAgICCg4KCg4OCgX57e3p7eXl5eXp7fHx8e3x/gIB+fHx8fn59fYCDg4F7dXR4fH19fX1+foCBfnl4eXx+fn9+fn6AgoODfIGBgICAgICAf39/gICAhIWGh4iIiYmJioqKh4SAfn59f31+fn59fn5+fn5+fX19fX19fHx8fH19fX1+fn5+fn5/f39/fn5+fn5+f3+AgICCgoSFhYWGh4eHhYSCfXh0c3RzcnJzd3yDiImIhoKAgICEhYSHiImKi4yMi4uLi4mJiIiJiYmJiIiIiIiIhYSCgH5+gICAgIGBgoGCgoF/f32CgYGAf35+f4CAgIKDgYB/gH9/f39+f4CCg4F+ent7fHp6e3t9fX5/gYGBgYGBgoOGhYOAf3+AgH9/e3p6fX5/f39/f4CAgICAgICBgX99fHx6e3l7fX6AgICAgIKEg4ODg4J/e3p7enl5eHp4enx8fHx7fX6Af358fH19fn19gIKDgHp1dXl7fX19fX1+gYJ/e3l7fH1+f39/f4CEhYR8gYGAgICAgIB/f3+AgICBgoGChYWGhoeJiYmKiYaCgYB/fX5+fn1+fn5+fn59fX19fX18fHx8fX19fX5+fn5+fn9/f39+fn5+fn5/f4CAgYCBgoODg4SFhYWGhYSCfnp3dHN0dHh8g4eHiYiGhoSFh4iJiImJiYmJiYmJiYeHiIiHh4eHh4eGhoeHh4eGhoaGhIODgYCAgYGCg4WJi4qEgICBgYB/f35/gIB/gYKAgH+Af39/gICAf35/gIB9foCAe3h7fX1/gYGBgYGBg4KBgIGCgoCAf39/f357enp9fn9/f39/gICAgICAgIGBf318fHp7ent9fn+AgICAgoSDg4OCgH17ent6eXl4enh6fHx8fHp7fH9/fnx8fX1+fX2Ag4SAenR2enx9fX19fX6Bgn97eXt8fX5/f39/gIKDhHyAgH9/f39/f39/f39/f39/f3+AgIGBg4SGh4iJiYiHg4KAf4B+fn18fn58fn5+fHx8fHx8fHx8fX19fn5+fn5+f39/f35+fn5/f35+fn5/f4CAgIGBgoGChIaGhoWGhIB6dnZ3e4GFh4iIhoaFhYeJiIiIiIiHhoaFhYSEg4OEhISEhYWFhYSEhYWHh4eHh4eHh4aGg4CAgoWHiIaHhoeCf3+Afn5+fn6AgICBgYF/f4GBgICAgX9+fn5/gIF/gIF+e3x9foCDg4KAgIOCg4GAgICBgIGCgYGBf3t6fH5+fn9/f3+AgICAgICAgYB/fXx6ent7fX+AgIB/f4CDhISEgIB/f359enp6eXl5eXp7e3t7enp8fX9/fXt8fHt8e36Bg395dHZ6fH19fX19gIKCgH16fH1+fn59fX6AgYOCfICAf39/f39/f39/f39/f39/f35+f39+gIKDhYiKioiHhIOBf319fXx8fHx+fn58fHx8fHx8fHx9fX1+fn5+fn5/f39/fn5+fn9/fn5+fn9/gIB+fn19f3+Cg4SEhYWFhYKAfn6BhYaHhoaFhYOEhYaGhoSEhYODg4ODg4OEhIODg4ODg4ODhISEhIWFhISEhISEhoaFg4SGh4aFgoOEg4B/f4B+fn5+fn+AgICBgYCAfn5/f4CAfn18fn6Af319f319fX9/gYGAfnx9gIKDgYCAgIGAf4CAgIB+e3p8fn5+f39/f4CAgICAgICBgH99fHp5ent9f4CAgH9/gIGCgoB/f39/fn16enp5eXl5ent7e3t6enx9fn59e3x8e3x7foGDf3l0dnp8fX19fX6Bg4OAfnt9fX5+fn19fX6AgYB9gIB/f39/f39/f39/f39/f39/f39/f35+f3+BhoeIiImJh4WEgH59fX19fX19fXx8fHx8fHx8fHx9fX5+fn5+fn9/f39/f35+fn5/f35+fn5+fnx8fX1/f4GBgIKDhYWHh4aEhIWFhoWEhISCgoODg4OCgoKBgYCAfn9+gICAgYGBgIGBgICBgoKCg4OChISEhISEhIOEhYaDgX97fYGEgn9/gH5/f359gH6AgoGCgn+AgH5+gIB/fn18e319fHx/goGAf39/f4B/gICBgoGBgoCAgICBgYF/fn16e35+fn5/f35+gICAgICAgoGAf319fn18fX5/gICAgICAgIB/fn1+fn5+fXp6enp5eXp6e3t7e3t7ent+fnx8fHx7fHx9gYOAenR2enx8fHx8foCEhIB+fX1/f35+fXt7fH5/f3+AgH9/f39/f39/f39/f39/f39/f39/fn5+fn+BgoSGiIiJiYiEf319fX19fX19fHx8fHx8fHx8fH19fn5+fn5+f39/f4CAf39/f39/fn5+fn5+fn5/gICAfn5+fX+BgoSFhoWFhoWFhISEhIKCgYGBgH58fHt7fHx8foCBgoKCgoOBgICBgX99fX1/f3+Bg4OCgoGBgoGCgICAf316fYSEgYGAfn19fYB9enuChYWDgICAf3+AgIGAfnx8fH1+f4B/fn1+gICAf4OFhYSDgoGBf3+Bf4CAgH99fHp7fn5+fn9/gICBgYGBgICAgIB/gICAgX9/fn+AgICAgICBf3x8e31+fn59enp6enl5enp7e3t7e3t6e319fHx8fHt8fH2Bg4B6dHZ6fHx8fHx+gIKCgH9+fn9/fn59e3p7fH5+foGBf39/f39/gICAgH9/f39/f39/f39+fn5+fX2AgYOEhomJiYWBfnt8fHx8fHt7e3t7enp8fHx8fHx9fX5+fn5/f39/gYKBgYGAf359fX5/fn6BgYCAgICBgIB/gIODg4SEhYWGhoSEg4OEgn9+e3p5eXl5eXp8foCBg4OEhISEhISDg4GAfXt7e3t9fX6BgoGDg4OCgoB+fYGAf39/hIaBgH59fH6BhIN+f4GFg4GAgYCAf39/gH9+fn5+f39/fXp6fH1+foB/gIKCgoKCgYCAgH+AgIB/f357e3x/gH+AgICAgIB/gX+Af3+BgYGCgoKCgYF/gICAgICAgH59e3t9fH5+fHt6eXp6eXl5e3t7e3t7e3l5e3t8fHx8e3x8fYCCf3p1d3t8fHx7fX6AgoF/fn9/f35+fn58enh6e31+f39/f39/f39/f4CAf39/f39/f39/f35+fn59fX1+f4CEh4mJhoF8ent7fHx7e3t6enp7e3t7e3t8fHx9fn5+fn9/gICDhIaGhoOBf35+f4CBgYKCgoKDg4WEhISEhIODhISEhIODg4ODg4OBfnx7enl5e3t8fn6AgYODhISEhYWFhYSEgoF/fn19fXx9fn+Cg4WEhIJ/fn6CgoKFgX5+foF/e3l6fYB/gIB+fX5+fn+BgYB+gIKCgH9+fn5+fn19e3x8fXx/gYKDg4OEg4KBf39/fn+AgIGBf3x7fH5/f4CBgX9/f4B/fX5+foCBgYKCgoGBgX+AgICAgICAfn17e359fX18e3p5eHh5eXl7e3t6enl5eXl6ent7e3t7fHx9gIJ/enZ4e3x8fHt9foCCgYGAf39/fn5+f316eHh6fH1/f35+f39+fn9/f39/f39/f39/f39+fn5+fn5+fX19fYCFiIiGf3p5enp8fHt7e3p6enp6e3t7e3t8fHx9fX5+f39+gYSGiomJiIOCgYGCgoODhISEhISEhoWGhoWHhIOEhIOCgYGAgICDgoKBgYKBgX59fH1+gIGDgoODhISEhISDg4KBf39+fn5+f4CBgoSGhYJ+fH+BgYGBgYB/fn5+fX+EhIJ9fH9+f39+fn1/fn59fX1+gIKAf39/f31+f35+f319fn5+gIGBgYKCgoGAf39/f4CAgIB/fXp7fH1/f4CBgoF/fn19f4CBgYODgoCBgYGAgICAgICAgIB+fXx8f39/fXx7enh3d3d5enp7e3p6enp5eXp6e3t7e3x7e3x+gH56d3l7fXx8e31+gIKBgH9/f39/fn5/fXt4dnh7fH9/fn5/f35+f39/f39/f39/f39/f35+fn19fHx9fX19gIWJiYiBe3l6enx8e3t7enp6enp6enp6e3t8fH19fn5/f4CChYiKiomIhoWEhISEhISFhYWGhoaGhoWEhIWEg4ODgH9+e3p6foGBgoOFhYeGhIB/foCBg4ODg4OEhISEhIOCgX9+fn5+f3+BgoOEhIKAfn2AgYGBfn5/fn9/fn13en5+gH18f358fH1+fHx7ent7e31/f39/fn19fXx7enp7fX19fn5/f39/gYKBgX9+fn5+f39/gH99ent+f35+gICBgX5+f4CAgIGCg4OCgIB/gICAgICAgICAgH59fn6AgIB+fHt6eHd3d3l6ent7enp6enl5enp7e3t7fHt7fH6Afnp4ent9fHx7fX6AgoGAf39/f39/fn99e3h3eXx9f39+fn1/fn5/f39/f39/f39/fn5+fn5+fX18fHx8fX2BhImLiYJ7eXp7e3t7e3t7e3t5eXp6eXl6e3x9fHx+fn9/gIOGhomIiIeGiImJh4eIiIaGhYWEhIaFhIWFhYWEg4B9fHp3dnV6f4KDg4OFh4iIhoSDgYKChISEhIODhYSCgoCAfn5/f3+AgoODhISBfXp3eXx9fXx8fn5+gIF8dnR3fH6AgYB8e359fHp7enp6e3t7fH5/f39+fX57e3t6eXl4d3p8fX19foCBg4OAf35+fn+AgIGBf3p7fX+BgoGBgX9/f3+BgIGBgoOEhIOAfX19f4CAgICAgICAfXx8foCAf399e3l4eHh4eHp7fHx6enp4eXl5eXt7enx8fHx8fn98eXh7fHx7e3t9foCBgYB/f39/f39/f316d3h7fn9/f35+fn9+fn9/f39/f39/f39+fn5+fn59fXx8fHx9fYGEiYuIgXt5ent7e3t7enp6enl5enp5eXp7ent8fH5+f3+Ag4WFhYWDhYaIiYmIiIeHh4eGhoeHhoWEhYWFgoF/end0c3JydXp/goOCgYOEhoaGhoaFhISEhISEg4OCgYGBgICAgICAgYKEhYWFhIB7dHJ0eHh3eHl5f3p1eHp5e318fHt6enp8e3x8fHx6enp5enx8fH59e3p8e3l5eXt7enl5fH19fn59fn+CgoB/fn5+f4CAgYF/enp9foCDhIWEgYCAgYGAgYCBgoOCgH57e3x+gICAgICAgIB9fHx+gIB/f317eXh4eHh4ent7e3p6enh5eXl5e3t8fX19fHx9fXx5eXx8e3t7e31/gYGBgH9/f39/f39/fXp3eHt9f35+f39/f35+f39/f39/f39/f35+fn5/f319fHx8fH19f4CFiYmEf3x7fHt6enp5eXl5enp6enp6enl6e3t8fH1+f4CAg4SEgoOEh4eIiIiJiIiHhoiGh4iHhoeGhYOCfnd0cHBxcXF1eoCDhIB9f4GEhoWFhoaEhIWFhYSDgoCAf4GBgYKCg4OEhYWFhYWCfHZ0c3V2dXN0dXl/f3t4eH+EgHt4eHd5enx7e3p4eXp4d3l5eHh6fHx8fXt7e3t9f359fX5+f359fn9/f4GAgIB/f39/gICAgH57e36Cg4ODgoGAgIGAgICAgoGEg4B9fHx8fX+AgIGBgIB/fnx7fX5/f4CAfXt5eXl5eXl5enp6eXl6enl5eHp7fHx9fXt6en19e3p6e3x6e3t7fYCBgoCAgH9/f39+fn99end4e35+fn5/f39/f39/f39/f39/f39/fn5+fn5+fX18fHx8fX19f4SHiIWDf318fHt6enl5eXl6enp6enp5eHl6e3x8fX5/gICCg4KCg4SFhYWFhIaIiIeIh4aHh4aFhIOBgHx2c3JxcXJyc3Z4f4OEgX17fX+Ag4SFhYWFhYWEgoGAgYGCg4SEhYWFhYWGhYSGhH55d3d0dXZ2dXN0d3x9fHx7fX19e3p3dnh6fHt6eHd6fH59fXx7enp8fHx9fHx7fH1/f35+fn5+fX1/gICBgYB+fn5+f3+Af39+f4CDhISEg4F/fn5/gYB+fH+BgoOCf3x8e3x9gICAgYGAgH9+fn19fn9/fX19e3l5eXl5eXl6enp5eXh4eXl4ent8fH19e3t7fHx7ent8fHt7e3t9gIGBf35+f39/f35+f316d3h6fn5+fn5+f39/f39/f39+fn9/f39+fn59fX19fX19fHx8fHx+gIWIhoaDgX98fHl5eXl5eXl5eXl5eXl5enp6fH19fn6AgICAgIGDg4SEg4OFhoeHh4eHhoaGhIODgX57d3Nzc3NzcnN0dXh+goSCf3t6fH6AgIKDhYWGg4KCgYGCg4aHhoaGhoWEhYWFhoWCfnp6eXd0dXZ1c3N1eXp8foKCfnt7enl2dnp7enh2c3V7fn9/f356enx6eXp6e3t9fX5+fn59fXx7fX5+f3+Bf39+fn5/gIGBgYJ/f4CBgoKCgX+Af4GAfHh2eICCgoJ/e3p6e36AgICAgICAgH9+fn5+fX1+fnx6eHh4eHh4enp6enl5eHh3eHl6ent7fn59fHt8fHx7ent8enx8e32BgYF9fX5/f4B+fX1+fnl4eXp+fn5+fn5/f39/f39/f35+f39/f319fX19fX19fX18fHx8fH1+gYWFhYaFhIJ/fHt6enl5eXl5eXl5eXl6enp8fX1+fn9/gICAgIGBgoKEhIaHh4eHh4WEhISCgH57eHZ0dHR0dHRzdHV2eHyBhISCf3x8fX1+f4GCgoOFhISEh4iJiomHh4iIh4aFhISEg4F+e3t5d3R0dXJxcnV2eXyAg4OAfHl4d3Z0d3l3dXNxcHFzdXh7fH19fHt6enx8fH19f399fHt8fHx+f39+fn19foCAf39/f4CBgoKCgYCAgICAf39/gIF7c3J5gYKCgn97ent9foCAgICAgICAf35+fn58fHx8fHp5eXl5enp7e3p6eXl4eHd4eXp6e3t+fn16eXx7e3t7fHx6fHt8f4GBfnt7fX9/fn19fX5+e3l6fH5+fn5+fn9/f39/f39/f39+fn9/fX19fX18fHx8fHx8fHx8fX1+gIODhYiIhoSAfnt6eXl5eXl5eXl5eXl6e3t8fn1+fn6AgICBg4SEh4iIiYiHhoWDhIOAf316eHZ2d3h2dnZ1dXV1dnZ3fH+EhIOBf31/gIB/f4KDhIaFh4uMjIyKiYmIiYmIhYOCgICAgHx7enp3dHV2dXR0d3h6foCEgn97eXd2dHR0c3JycnNzdXV1dXV5e319fn9+fX5/gICAf358fH5+fn19fXx+fHx+fn9+fn9/fn9/f4CCgX+AgIB/fn2AgHxzdHyChISCf3t6fH1+gICAgICAgYCAf39+fnx7fHx8e3l5eXh5eXt7enl5eXl4d3h5enp7e35+fHt6e3t7e3t8e3t7fH5/gn97e31/fn5+fn19fn58ent9fn5+fn5+f39/f39/f39/f35+fn59fX19fHx8fHx8fHx8fHx9fXx9gICChYaHh4SBfnt5eXl5eXl5eXl5eXp7e3t8fX5/f4GChYaIiYmKiYmIhoWEgoGAfnt6eHd1dnd5eXl3d3Z2dnZ3d3h7f4KEhIOAfn6Af399e3t+f4CBhIaGhoWFh4eGhoaGg39+fn19fHt8fXp4d3d0dXR2e3x4eHt9fHp4dHN1dXNvbG1yd3d2dnd2dHZ6foGDhIKAfn+AgH59fHx+f4CAf39/f359fn+Af35/f39+fn1+f3+AgH+AgH98eXt9enZ4f4KEhIJ/fXx8fX6AgICAgIGCg4OCgoKCgH9+fn18enp5eHl5e3t6eXl5eXh3eHl6ent7fn58enl6ent6e3x7e3t9f4CBfnh5fH1+fn9/fX19fXp5fX5+fn5+fn5+fn5+f39+fn9/fn58fHx8fHx8e3x8fHx8fHx8fX19fX19f3+Cg4WHh4eDfXp5eHh4eHd3eXl5eXp6e3x/gIGDhYeKioqJiIeHhoWEgoF+fXx7eXh4eHh4eHh4eHd3d3d3d3d4eXt+goOEg4OCgYF9dnV3eHh3enx9f4GBhIWFg35/f4KGh4SBf4CAfX+Dgn14dnZ2dHd4d3JwdXh5end1c3R3d3BoaHB2eXh5eXl4d3l7fn6Bg4OCgH99e3x+fX+Af4CAf4GBf35/goJ/f31+e3p6fH59gH98e3p7fXx8fX58enyAgoOFg4F+fX1+f4CBgYKDg4OFhYSEhIKCgoGBgH99fHp5eXp7e3l4eHh4d3d4ent6enx/fnt5eXp6eXt7e3t7e3yAgX96dnl8fn9/f39+fXx3d3l9fn5+fn5+fn5+fn5/f35+fX1+fnx8fHx8fHx7fHx8fHx8fHx9fX19fX19fX1/goSHiIeBfXp6enp6eXl5eXl5enp8foKDhYeIiIqJiIaFhIODgYB9fHt6eHl5eXl5eXl5eXl5eHh4eHh4eHl5e32Ag4OEg4KBfXx4dXNyc3V2dnh6fHx8fX19gYKCg4OEhoaHhYOAgISCfXl1dnZ0cnFybmtuc3d7end0dHR1b2VjanN3eHp7e3p5dnh7e3p+gYF9e3p6fX+Cg4GAgICBgX99fX1+fn17enp7e3x+fnt6ent8fHx8fICBf31+gYGDhIWEg4B+fn5/gYKCg4ODg4KBgoGBgICAgYGBgYGBf3x7ent7eXh4eXh3d3h5enp6fH9+e3l4eHl5ent7e3t7fICBfnl2eXx+f39/f359e3d2eX1+fn5+fn5+fn5+fn9/fn5+fn5+fHx8fHx8e3t7e3x8fHx8fH19fX1+fn19fX2AgoaIh4WCfnx7e3p6enl5eXp8fYGDhoeIiIeGh4aEgoGBgIB8e3p6e3p6enp6eXl6enp6enp5eXl5eXl7e3p7e3+BgoOBgX9/f313b2xvdHVxc3l5e3t6fX6BgoSDg4SDg4KCgoB+gYOCend3dXVwa2xubG1wd319eHV0dHNvaWhsc3d5e3x8e3t4d3d3dHh/goGAfHp7foGCgYGAgIGBgH57fHx9e3h1dnh6e317eHh4e3x+fX9/gIKAfoCBgIGEhoaDgH+AgICChISCg4KBgH+AgIGAf4GAgIGBg4KDgX17enl5eXd3eHh3eHl6eXp8f358eHd3d3l7e3t6enx9gIJ+enZ4fH5/f39/gH57dnV4fX5+fn5+fn5+fn5+f39+fn5+fn58fHx8fHx7e3t7fHx9fX19fX19fX5+fn5+foCBhIeIh4WDg4KBf319fHx8fX6Ag4aIh4eGhYSCgYB+fXx8fHx7e3x8fHx7e3t7e3p6e3t6enl5eXl7e3t7e3x/gIODgH9+f4CAeXJsaW5ycm5wdXh8fHx+f4GChIOBg4ODgoKCgH6BgYF9eXd3dW5taW9wbm5ydnNtbXB0dXNvbXB0d3l7fHx7e3l4d3ZzdHh/g4OBf31/goOCgYB/gIF/fXx7e319fH16eXp7e3h7fn9+f4CBgX+AgYGBgoGAgoOFh4SBgYGBgYGBgoKCgoKBgICAf318fn5+f4CAgIGBgX58enl5eXl4d3d4eXp5enx/f3x4d3Z3eXp7e3p6fH2AgoB8eHt8fn9/f4CAfnl1dnl9fn5+fn59fX9/f39+fn5+fn59fXx8fHx8fHt7e3t8fH19fX19fX5+fn5/f39/f3+BgoaIh4aHh4aGg4J/fn6Ag4SGh4aFhIOAfnx9e3t7e3x8fX18fXx8fHx7e3t7e3t7e3t7enp6ent7e3t8foCChIOBgH9/g4J8c21qbG1ydnV4e319fX+BgYKDgYGBgICAgYF9fIGDgn96eHZybWlnbHF0dHJvbWxtcXV2dHFvcnV3eHp7fXt6eXl4dnRwcHR5fYCAfX+DhYOBf3+AgYB/fX1+fX1+fn15eHt7fHx/gIGAgICAf35/gYKCgYGCg4SEhIKAgICAgH+AgoODhISEhIKAfn59fHt7fX5+gIGBgX98eXl4eHZ2d3p5eXt8fYCAfHh3dnZ4enp6enp7fYCCgX97fH1+f39+f358eXZ3e39/fX1+fn9/f39/f39/fn5+fn19fHx8fHx8e3t7e3x8fX19fX5+fn5+fn9/f39/f3+AgoSGhoaIiIiHhYOCg4SFhoaGhIKBf3x6enx8fX19fX19fXx9fHx8fHx8fHx8fHx8fHx7e3t7fHx8fHx+gYOFhYeEgYB+fHp0bGhpa3J8gH5+f3+Af3+AgIGBgH5+fYCBf3x8gYWDgHx5dm9oZGVscnZ2dHJvb29xcnV1dHN0dXd3d3p7fnx6d3Z4eHd1dXZ3eHd3fICCgoKBgICAgICAgYGAfn19fXt6foCAfoCAgYCAgH9+fn+CgoKBgYGCgoKCgYCAgICAgIGCg4SGhoeHhoSCf359fHp5e3t8foCBgH56dnd3dnZ2eHh5enx9gIB8eHV2dnh6enp6ent9gIKBgHx9fX5/f35/fnx5dnh9fX19fX9/f39/f39/fn5+fn5+fX19fXx8fHx7e3p8fHx9fX19f39/f39/f39/f39/fn6AgIKDhYWHiImJh4WFhYSEhIKBfnt7enp7fH5+fn5+fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx9fXx8foOFhIeIhoSDg4KAf3x1bmxtdn+BgIGCgX9/fn19f4B/fn99foB9enyBhYSCfHl0bmZgZW1ydHd3dHJyc3NydHV1c3N0dXN0eXp9fXh0c3V3eHdzdHd3d3h8f3+BgYCAgICAgICAgH5+fXx8eXp9fX2AgH6AgIB+fXx8f4KCgoKBgYCBgoKBgICAf3+CgoKFhYaHh4aEgoF+fn58e3p6eXp8f4CBgXx5d3Z2dnZ4eHl7en2AgH14dHR3eXp6enp6e3+BgH9+fX5+fn5+fn59e3l3eXx9f39/f39/f39/f39+fn5+fn59fX19fHx8fHt7enx8fH19fX1/f39/f39/f39/f39+fn5+foCAgYOEhoaGhYWFg4GAfXx7e3x7fX19fn5+fn59fX19fHx8fHx8fHx8fHx8fHx8fHx8fH19fX2AhISGiYqKiIaFhISBgH57dnR3fYF/gICCfn17e3t8foCAfnx6fHx5e4CChIWAenRuZmNmbXN2eHh3d3Z1dHR1dnd2d3V0cXJ1dnl5d3Jxc3V4dnR0dnZ3d3p8fX6AgICAgICAgICAf359fX16enx6d3Z0d3t+f399fH6AgoKCg4GAgYGBgoGBgYGCgoGBgoSFhYSEhYOBfnt7fH16eXl4d3l7foGCf3x5dnZ2dnh4eXp7foGAfXh0dHd5enp6enp7f4GAfXt8fn5+fn5+fn17eXd5fH+AgoJ/f39/f39+fn5+fn59fXx8fHx8fHx8fHx8fHx8fn5+fn5+fn5/f39/f39/f39/fn5/f399fX6BgoODgoF/fnx7e3t9fX1+fn5+fn5+fX18fHx7fHx8fHx8fHx8fHx8fHx7fH5+fn58f4KGiYiJi4uLh4WFg4GAgoSAenl7fn5+f4J+enl5enp9f4CAf39+e3h6gIaHhoB6dG9qZWducnV2dnh4eHV0dHR3eHl6e3l1c3V3d3ZycG9yc3NycXJ0dXZ4enl6fH1/gICAgICAgIB/fX19fn5/gH9+fHh0bnN8gH5/gYKEhISDgYCBgYB/f4CBgYGBgoKCg4SDg4KEg398eXl5eXp4eHh2dnp9f4GBf3l2dHR3eHh4eXt+gIB6dXN0d3l6eXl4en1/gX57eHp9f39/fXx8fHp3d3l9gYGDhX9/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fHx+fn5+fn5+fn9/f39/f39/fn5+fn9/fXx8fH1+f39+fXt7enx8fH19fn5+fn5+fn59fXx8fHt8fHx8fHx8fHx8fHx8fHt8fX19fX6Ah4uGfn+Ei4uKhYSEg4OFh4mFfXp7gIGAgHx6eXl5eHp9gICAfnx3dHiChoeGgXp0b2pmZ25ydXZ3d3h4dXR0dnd4eXx9eXd1d3h3dHBubm9vb25vcnN1d3l6eXp7fX+AgICAf4B/gH9/fn5+f4CBgYGAf316dnR4f4CCgoKCg4GAgICAgH9/gIGBgYGCgoKDhIODgoKAfnp3d3Z3eHd4eHV2eXt9gIKBfXh1dXd4eHh4e36Af3l0cXR3eXp5eXh6fX+AfXh3enx/f39+fX18eXZ6gYKFhYOCf39/f39/fn5+fn5+fn59fXx8fHx8fHx8fHx8fH5+fn5+fn5+fn5+fn5+f39/f39/f39+fn58fX18fHx8fHx9fX19fn5+fn5+fn5+fn5+fX18e3x8fHx8fHx8fX18fHx8fHx8fHx9f4KJh396fICEhYOBgIODgX+Bh4qDfXx/g4N+fHx8enl2d3l+fX58enVyd4CGiIeDfXVua2hobnNzdHV4eXdzcXN1d3l5fHx6eHh5eHZzb21tbGpna21xdHV4ent8e3p7fH1/gYGAgH9/gIB/f359fX+DhIGCgH56dnV5gIGCgoKCgoCAgoSCgIGBgYGBgYCBgoOEgoOCgoF8eXV1dXZ2dnZ1dnd3eXp8f4F+fHl3d3h4eHh7f4B9eHNydHd4eXl5eHt+gYF9dXV7fX6Af359fHt5fIKDgoKCg4N/f39/f39+fn5+fn5+fn19fHx8fHx8fHx8fHx8fn5+fn5+fn5+fn5+fn5/f39/f39/f35+fnx9fXx8fHx8fH19fX1+fn5+fn5+fn5+fn59fXx7fHx8fHx8fHx7e3x8fHx8fHx8fH1/hYJ9en14d3p8eXNzeHt4dHR4goaDfn99fH5+fX5+e3l3dnl6e3p3dHF3gIOFhYN9dW1raGpuc3R1eHh3cGpmZ2lqbXJzdnd2dnd3dHFva2dkZGhna3J1eHp7fH18e3t6e3+AgICBhIWGhYN/fn16d3l6fH1+fX19e3d6f4GBgYGBgYGCg4GAgYGBgYGBgIGCg4SCg4KBf3t3dHNzdHZ2dnV1dnd5eXt+f4CAfHd3d3d3eHt+gHx3cnF0d3l6eXl4e3+Bf3lzdXx/foB/fn18fH+Eg4KBgICAgH9/f39/f35+fX19fX18fX18fHx8fHx9fX19fn5+fn5+fn5+fn9/fn5+fn5+f39/f39/fn59fX19fHx8fHx8fHx+fn9/fn5+fn5+fn5+fn19fXx8fHx8fHx7e3p6e3t7e3x8fHx8fX9/e3p9enJ0dHV2dHV2c3Bvb250fIJ8enh3e36Af359end2dnh5endycnmAg4SGgn13b2xpaGxydXh4d3JnX11dXGBqb3FzcXJydHNycW1oZGRkaWptcnh8fn5/fn17ent9f4B8enx+gIGEhoF9eXd3d3l3dnN1en19eXd8gIKBgYGBgYGDgYCAgIGBgYF/gIKCg4KCgX98eXZzc3JzdXV2dXR1d3d4en2Af39+enh3d3d5fH5+enVxcXR3ent5eHh7gIF9dnR5fX5/f359e3yAhISCg4F+fn5+f39/f39/fn59fX19fX19fHx8fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39+fn19fX18fHx8fHx8fH5+fn5+fn5+fn5+fn5+fX19fHx8fHx8fHt7e3t7e3t7e3t7e3p7fHp3eHp3cnV6fHx/f3pybm9vbm50fX14dnZ6fX+Afn17eHd3eHl5eHZ2eoCEhYWDfXhxbmppbXN2eHZ2cGNUT09NV2RvcnNxcG9ubGxpa2ppZ2dqbW5vc3Z6fX9+fHp5en1/gH57e3x9f4GEh4N/e3l3eH1+fHx+fnx3dnh8f4CBf4CAgYOBgICAgYGAgH+AgoKDgoKBf3x3dHJycnN1dXV0dHV3d3h4fH1/gH98eXd2d3d7fn56dXFxdHd6e3l4eHt+gHt2dHl9fn5/fXt9gYKDg4KBf35+fn6AgH9/fn5+fn19fX19fX18fHx8fHx8fX18fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnx9fX17fHx8fHx8fX19fX5+fn5+fn5+fn59fH18fHx8fHx8e3t6ent7e3t7e3t7e3x9eXZ1enZucXd3en5/fnRxb29wb3N8fnZ1dnt9f39+fXt6eHd4eHd3d3h6f4KCg4ODfnVuamtwc3V1dXZxaVRMTlZfaXJ0dHNxb2lmZWVmaGlnZWZtcXJzdXd6e3t5eHh6fH59fH18e32AgoaJioV/fHp3en1/f3+BgH98dXJydnx8fX5/g4B/gYGAgH9/f4CCg4ODgoGAfHZ0cXFyc3R0dHN0dnZ2d3d6fHx9gH55d3V2eHt/fnlycHF1eHl5eXl4e39/e3V0eX19fn18f4KEhIODgX9+fX19fX5+f39+fn5+fX19fX19fXx8fHx8fHx9fXx+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fH19fXt8fHx8fHx9fX19fn5+fn5+fn5+fn18fXx8fHx8fHx7ent7e3t7e3t7e3t7fHx4cG5xcGxtcnNzd3t6dHFxcW9vcXuAeXZ3e3x9fX59fHt5eHh4dnZ1d3l8f356fYCBenRwcXR1dXZ0dHBrYVxbYmhtcXJwbm1ubmtpZ2VjY2NjZ250dHR1eHl6eXd1dHd6fX19f35/gIWIhYSEh4iHg3t5e3x/f35/gIB/fHl4dG9ydnt/gH+AgICAf39/gIKDhIOCgX57dXJxcXJzdHR0c3R2dnZ2dnl6fH1/gHp3d3d4e39+eHJwcXV4eXl5eXh7f355c3V6fX19fH+ChIODgoB/fX19fX19fn5+fn5+fn5+fn5+fX19fX19fX19fX5+fn59fX5+fn5+fn5+fn5+fn9/f39/f39/f39+fn59fX18fHx8fHx8fH19fX19fX19f39/f35+fX18fHx8e3x9fXx8fHx8fHx8e3t7e3x9fHdvaGhrbG9zcW9yeXt1cHJ0c3F1fIF8d3h8fHx8fn58fHt6d3Z1dHR2d3d7e3t9f3+Aend2dnV0dXRybmlmYmNob3BvbGpnZmltcXBtaGVfWltkcHZ4eHh4eHZzbm1wcnd8f39/gYGCgn9+fn1/gYWMhX56e3x9fn+AgIB/foCBfXZxcHV6fX+AgYB+f36AgoWFg4KBfXl1cnBxc3Nzc3N0dnZ2dXV1dnh7fYCAfHd2dnh9f312cXFyd3h4eHd4eHt/f3p0dHp+fn2AgoSEg4N/fn1+fnx8fX1+fn5+fn5+fn5+fn59fX19fX19fX19fX1+fn19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn19fXx8fHx8fHx8fX19fX19fX1/f39/fn59fXx8fHx7fH19fHx8fHx8fHx9fX19fH19eHBra2prbXBtbXB2fHl0c3Z2dHd8fnx5enx8fHx7fH18enl3dnRzdHV2dnh8fH1+fn98eXh3dnd3d3RvbGpoa29wb2xnYmBgY2hucG5qZ2NfYGhydnh4eHh1cm1oaG5zdnp+f35/goN+fn5+fn+Ch42Nh4OAfXx+fn+AgH9/gIKCf4B6dHFvdHd6e3x+fYCBhIWDgoF8eHRxcHFzc3Nzc3R2dnV0dHR1d3p8gIB8d3Z2eH1+e3Vwb3N3eHh4d3d5e35+eHR2enx9gIODg4OCfnt5e3x8fHx9fX5+fn59fX19fX1+fn19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+f31+fn9/f39/f39/fn5+fn19fXx9fXx8fHx9fX19fX19fX5+fn59fX19fX17e3t8fHx8fHx8fHx8fHx8fHx8fX96cmxqa2xtbGdoa3N7enh2dXV2eX1+fXt7fH58enx7e3t6end2dnNycnV1eHx/gH99fX18e3l4dnZ3dHBubG5vcXJwa2RdWFhdY2pvbWlkYl5fZnB0dXZ4eHRuaGRmb3Z3eHl5ent/f35+fn+AgISLlJSPioN/fn1+f4CAgIGBgYKBgH+AfXtzb3BxcXR5fX+Cg4ODgXx3dHJxcnJycnJzdHZ2dXRzc3R3eXx/f3t3dXZ5fH96dHBwc3d5eHh4d3l7fnx1cnZ4e3+Cg4OCgn97dnl7e3t7e3x8fn5+fn19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn5/fX5+f39/f39/f39+fn5+fX19fH19fHx8fH19fX19fX19fn5+fn19fX18fHt7e3x8fHx8fHx8fHx8fHx8fHx9f3pybGpsbGxnZGZqcXl9enl3eHh6fX18fHx7fHx6e3p6ent6eXh2dXNzc3R0eYGBgH19fXx7eXl5eXl2bmptb3FxcW9rY1pWV19maGVjYmFhYWNnbnFydHV1cmxmYWRrcnV3enp7fXt4eHp9gYKDhYmPj4uJhIGAfn1+f4CBgoKAgYGAgIGBgYB6d3Z5fH6AgIKDg4GAe3dycG9xcnJycnN0dnZ1dHNzdHd7fn9/enVzdXl8fnl0cHBzd3l4eHd3eXx+enZ0dXh/gYKDgoGBe3Z1eXt7e3t7enp9fX5+fX19fXx8fX19fX19fX18fH19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX17e3x8fX19fX19fn59fn5+fX18fHx8enp7e3x8fH19fXx8fHx+fn19fn5+e3JraGtta2VkaG5ye4B+e3p6enp8fXx7e3x8fHx7enp5enp6enl3dHNycnN2foCAfn18fHx5eHl5eHVva2xvcHBwbWliW1haZGNeVlhZXF5jZ2ptcHFyc3Rxa2djY2lvdXd6e3x9fHp3dnl+gIKGhoaHh4aDgYB+fX9/gIKDgX+AgYGAgIB/f359fn5/fn+BgoOCgX96dXBvb3BxcXNzc3R2dnVzc3Nydnt+gIB7dnN1en18d3JucHN5eXl5dnZ5e355c3R3fYKDgYGBgX12cnR6e3t7enp6fX19fX19fX19fHx9fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX18fHx8fX19fX19fX19fXx8fHx7e3t7fHx8fX19fX19fX5+fX1+fn99c2tpamtpZWZsc3Z8f39+fH19enx9fHt7fHx8fHt7enp7e3p5eXdzcXFyc3Z7gIGAf39/fHZ1dnd4dXBtbGpqbG1ua2ZfX2lva1tLTk5PV2Fnamtsb3FycW9pZWJjaW1ydnp7fH19f4CAgYGCg4SHhoeHh4KBgX9+f39/gYOCfn19f39/f39+fn5+fn9/f4GBgoF/fXl0cG9vcHFxc3NzdHV1dXNzc3R4fH+Af3l0c3V5fHx3cXBxdHd3d3d2dnl7fHdzdHmBgoKBgYF/eXJyd3t9e3t6enp/fX19fX19fX18fH19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX18fHx8fH19fX19fX19fX19fHx8fHx8fHx8fH19fX19fX19fn5+fn9/fn11a2hoaWpnaXB1eXyBf35+fX59fHx7e3t7fH19e3t7enp7fHx6eHJwbm9yc3h+goGBgYF9d3JzdHZ3dHBpZWNmamtraGRoamxoXFJLSEhQWmVmYmFnb3Bva2djYGBjZ212e3x7e31/gYGEhYaIiYmJiYqIg4CAgIB+fX6Bg4J+fX19foGAf35+fn5+fn+AgYGBgH58d3Nvbm9wcHFzc3N0dXV1c3NzdHd9f4F+eHR0dnl7e3ZvcHJ1d3d2dnZ2eXt7d3N3foKCgYGBf3p1cnJ3e3t6eXp7fIB9fX19fX19fXx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fXx8fHx8fX19fX19fX19fX18fHx8fHx8fHx8fX19fX5+fn5+fn5+f3+Dg3xwampra29xdXl9f359fHx9gIB/fHt7e31/f358fHt7e3l6end0cG5tbnFxdHp/gYGAf354cnFxdHZzb2hjZGdoZ15fY2psbWhhV1FOTU9ZZmFXV2BpbW5rZmJfXV9ibXV8fXt7fYCBg4WGhoaHiIiKiYqGg4GBgoGAf4CDgn98fH1+gH9+fn5+fn5+fn+BgYGAfnx4c3BtbG1wcXNzc3R1dXVzc3N0d31/gX53c3R2eXt6dG9wc3Z3d3Z2dnZ5e3t3dXyCg4KCgX57d3Vycnd7e3p5ent+gnx8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX18fHx8fHx8fHx8fHx9fX19fX17e319fX1+fn19fn5+fn19fn5/goeHgXZwbm1vdnh6fH59e3x9fn6Bg4SCf317e3x9fX19fHt7enl2dHJxbWprb3FxdXt/gX98enVxbm9ycnFvaGVlaGxoXVVYY2tpZ19XVFZZXmJpYFdQWWVramdhX15cYGRtdnx/fHt8f4GBhIWGhYWGh4iJiomHhIOEhIKAgIODf319fX5+f35+fn5+fn5/gIGBgoB9e3dzb2xsbXBycnJzc3R0c3NycnZ5foB/fHZzc3V6e3hzb3BydXd2dXV1dnh7eXd7gYSEgoF/enZ2cm90eXp6enp6fYCEfHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fXx8fHx8fHx8fHx8fH19fHx9fX5+fX19fX5+fn5+fn5+fX1+f4KGiYN9eHZ2dHV4e31+f318fX6Af4GEh4eFgX19fX19fX18e3p5eHZzcW5tbGttb3BxdHd3eHZ1cXBubnBwcW9nYmVtcG1gVldZYWNkXllaYGBfYGReWlBTYGhjVVNWXV1gZG50eX5+fHt9fn+BgoOCg4OFiImKiYmGhISEg4CAgoOAfX19fn5/fn19fX1+fn+AgYGBf317d3NvbGtsb3FycnNzdHRzc3Jydnp/gYB7dnNzdXl6dnFub3J1dnZ1dHV2eHp3e4CBgoKBgHt4eHp4eHx/f39/f36Bg4R8fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19e3t8fHx8fX18fHx8fHx8fH19fX19fX19fn5+fn5+fn59fHyAhoiGgX+Afn56enp8fn59e3x+f4CBgoOGioqHhIB9fXx+fXx8enl4dnNwbm5vbmtsb3JzcnJxcHF0cm5rbW9wb2djZmtpZ2RZUVZcYmNhYGJjX1xYWVZSUVVeZmNTSk5ZXGBmbnN4fn59fXx9fH5/f3+AgoSGiIqJh4aGhIOCg4KAf317fX9/f359fHx8fH1+f4CBgX9+e3l2c29qa2xvcHFydHR0cnNzcXJ2en+Bf3pzcnN1eXl1cG5wcnV1dHRzdHZ4eHp+goGCgoB+fHyAgICCg4SDg4ODhISEhHx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx8fHx8fX19fX19fX1+fn5+fn5+fn5+gISJiIaEgoJ/gIB+en1/fn18foCAgYGBgoWKioqHhYOAfn59fHx6eXh2cm9ta21ta2pucHJydHRxbm9xcWxrbG5taWVnaWNdWltVV1thYF5cX2ZnYVxYVE9UWF1iYVdNT1hfZWtydnp9fX5+fX5/f3+AgICCg4WFh4eGhoeEgoKFhIB+fn5+fX9/fn18fHx8fX5/gIGBgH16eHZzb2pqa25vcXJ0dHRyc3NydHh8gIB+eXNyc3V3d3RvbnBydXV0dHN1dnZ6f4GBgoKCgoKEhISEhISEhYSEhISEhISEfHx9fXx8fHx9fX19fn5/f35+fn59fX5+fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn59fXt7fHx7e3t7enp8fHx8fX19fX19fX1+fn5+fn5+fn5+fn6Ch4eGhYKCgYCAf3t6foF/fn1+gICCg4SDhImJioiHhYJ/fn58e3p4d3RybmprbG1qamxvcnJ0dXJtb25qaW5vb25saGlpY1lZXFpdYWFeVE9aaW9qYlpYWl9fYGRlW1BUXGRrcXZ6fH19fn5+fn+AgICAgoKCgoKChYeIhoaDhIaGgn9/gX9+fX5+fXx8fHx8foCAgYF/fHt4dXJuaWlqbnBxcnR0dHJycnJ1eX2AgH55cnFzdXd2cW5ucHN1dHNzdHN2eX+CgoKCgoOFhYWEhoSDhISDgoODg4ODg4N9fX19fHx8fH19fX1+fn9/fn5+fn19fX19fX19fX1+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn19fn58fHt7e3t9fXx8fHx9fX19fX19fX5+fn5+fn5+fn6Ag4aIhYSDgoKBgIB/enp/gH59fX5+gICBgoKDhYaGiImGgn+BgH18enh2c3Ftamhqamtra29xcnRzcW5ta2xwcnFwcGxqamxmXltdYWJjYFZNVWFsb2piXV5lbm1oaWdgWl1ja3J3eXp8fX19fX9/gIKCg4OEgoKBgYGEhIaIh4SEhoiFgH+Af35+f359fHx8fHx+gIB/f357end1cm5paWpucHFydHR0cnJyc3Z6foGAfXdycXN1dnRwbW5wc3V0c3JzdHZ8gIGBhISFhYWFhYODgoF/gH59fX+CgoKDg319fX18fHx8fH19fX5+f39+fn5+fX19fX19fX19fX5+fX19fX5+fn5+fn5+f39+fn5+fn5+fn19f39+fn5+fX18fHt7fHt7fHx8fHx8fHx9fn59fX5+fn5+fn5+fn5+f4SHiIWDgoGDgoGAf315eX+Bf3x8e3x5eXl8fX2AgYKFh4aDg4KBfn58e3dxbm1pZ2hqbm9ubnFydHRzb21ucnJwcG9wbGpsa2VdXWFlZmFZTlNdZ25uamdkYmZvb2lpaWFZW2RudXh6enx9fX19fn+AgYSDhYWDgoKCgYGDhYqLiYWGiImEgH9/fX9/fn18fHt7e35/f39+fHp5d3ZzcGxqa25vcXJ0dHRycnJzd3x/gIB8dXFxc3V2cm9tbnJzdXRzc3N2eoCBg4OEhISEhISEgX96eHp7fHl7gIKCgIGBfX19fXx8fHx8fX19fn5/f35+fn59fX19fX19fX19fX18fHx8fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn59fXx8e3t8e3t8fHx8fHx8fH1+fn5+fn5+fn5+fn5+fn+BhomHhIOCgYOCgYB/f3x7f4F/fXx6eXh3d3d3eXt8fH+FhoSEgoF+fX17eHFubWtpaWtvcXNyc3Nzc3RzcnNzcXJycnBwb29sX1leZWhlXVVUXmdsb2xpZ2VjaXBrY2JmY1xdZXB2eXt6fH19fX1+fn5+fn6AgYGBgIGBgIKDhIeJiIaHiIaEgoB/f39+fXx8e3t7fn9/fn17eXh2dnNwbGprbm9xcnR0dHJycnR5fH+Af3p1cXFzdXVwbWxucnN0dHNycnl/goODg4ODhISBfXt2cXJ0d3p7eXyAg4KBfn58fH19fX18fH5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+f39+fn9/fn5+fX19fHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn5+fn+AgoWIh4WDg4GAg4GCgH+Bf3+Afnx+fHh4eHh2dnV3e3x8f4KEhYOCf318fHx6cm5tbGxsbXBydnZ2dHR0dHR1dnRxcnR0cnJxcGlgW2JrbmVbVlxlam1ua2dkZGdtbWlkZWdkYmVrcnV6fH19fn5+fn59fHx7fH6BgYGAgICAgYGCg4WFhoaGh4eFgoB+f359e3p6ent9f359e3p4eHd2dHFubGxtb3Fzc3NycnJydXp9f39/eXNwcXJ0dHBsbG9xdHNzcnF1fIGDg4KCgoGCfXZzcW9tb3J4eXp8f4GEgX99e319fX19fX19fn5+fn5+fn5/f35+fn5+fn19fX18fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5/f35+f39+fn19fX18fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fn5+gICEh4eFg4KBgICDg4GAf4GCgoB9e3x6eHh4eHZ2dXZ6fH1+f4OFhIJ/fXx9fHpybm1vcG9wcnR4eHh3dnZ0dHZ0c3JzdXVzcnFxamBfZ25waF9fZWptbm1qZmVmaWtraGlpaGZmam1xdXp8fX1+fn5+fnx8e3p8foGBgYCAgICAgICAgYOEhYWIiYeEgH5/gH58e3p6e31+fn58enh4d3Z1cW5sbW5wcXNzc3JycnJ2en5/gH53cnBxcnRzb21tcHN0c3NydHqCg4ODgoKBfXdzcG9ubWxtc3l6e36Ag4J/fnt6fn5+fn19fH5+fn5+fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fX19fX19fn5+fn5+fn5+fn9/fn5/f39/fX19fX19fX18fH19fX19fX19fn5+fn5+fn5+fn9/foB/hIiIhYKCgYGBgYKCgYB/gYKBfnx6e3l4eHh4dnZ1dnh5e3x9goSDg4B9ent8eXVvbXBydHV2eHt7e3l3dXR0dnVycnV1dHRycXJuZ2Vrb29saGlsb3BuaGdmZWdoZmZpbWxpaGttcHJ2enx8fX59fn59fXt7ent9fn9/fn6AgICAgH+AgYKChIaHhoSBfX6Af317e3t7fH59fHt6eHh3dnVwbm1tb3FxcnNzcnJydXl9f4B/fndycHFzdHFubG1wc3NzcnN5f4ODg4GAfnhzcnBvbm5tbG9zd3l7f4GCgX57enl+fn5+fn18fn5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX19fX19fX19fn5+fn5+f39+fn5+fn59fX19fX19fXx8fX19fX19fX1+fn5+fn5+fn5+f3+AgYWHiIaDgYF/f3+BgoKBgH+Cg4F8eXd4eHd3eHh2d3d3dG5sbXiChYSDgH16eXp6eHJvcXN1d3p9fn59fHl4dnZ2dXZ2c3NxcHBvcW9ra29wcG1tbnFxb2dhYWNiYWFhZGptbWtsbnBxdXh7fHx9fH19fXp6enp5en1+f39+fn19f3+AgIGBgYKDhISEhIN/fn+Af317e3t8fXx7e3p4eHd2dXFubW5wcXFyc3NycnJ1en1/gH97dHFwcXN0cGxsbXBzc3NzdnyBg4ODgXlycHBvb29ua2ptcXd6e32AgoKAfXp4eH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+f39/gIGEiImGg4F/f35+f4KEgoF+f4OFgX15d3d2dnZ3eXl5eHhxbWpqcoCGhIKBfnl7e3t5d3RydHd6fH5/gYB/eXh3dnZ1dHNzc3BvbmxvcXBwcnJvbW1wcnFtZF9fYWJhYGBnbG9ubW5wcHJ2eXx9fX19fXx7e3t6ent7fX5+f35+fX6AgIGAgYGBgYCBgoWGhoF+f4B9e3p6e3x8e3p6enh4d3Z1cm9tbnFxcnNzcnFxcnV6fYCAfnlzcXBxcXFua2ttcXNzdXZ8gYOEhIN/c3Bvb29vbWxram51d3l8f4GBgH55eHd3fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn59fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/f3+AhIiIhoSEgYB+fn+Bg4OCgICBhISAe3l3d3Z2dnd4eXh3dXJubW1wfIWFgoGBgICAfnx6eHV2d3p8fn+BgH98e3p4dnZ1dHNxbm1ubnBzdHV1dHBvcHJzcm5nY2NjZGNkaGxvcGxsb3FydHd6fH59fX19fHt7e3p6e3t9fn5/fn59foCAgYCBgYGBf39/goSFgn1+f3x6enp7fHx7enp6eHh3dnVyb21ucXFyc3NycXFzdnp9fn58d3RxcHFxcW5rbG9xc3N3e4GEhIOEgndwb25ubm5tbGtqbnV5en2AgYGAfnl4d3d+fn9/fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn59fX19fX19fX19fX19fX19fH5+fn5+fn5+fn19fn5+fn9/f4OHh4aFg4J/fX2AgoOFg4GAf4GEgX97eXd3dnZ1d3h4dXR0dHJxbW57hYaDgIGAgIB/fnx6eHh4eXt8foB/fnt5eXl4dnV1dHJvb3FzdHR2dnd2dHJxcnV1cWplZGVlZWZobnBvbm9wcnN1enx9fX19fHx8e3p6enp6e31+f39+fX5+f4CAgICAgIB/fn5+f4CBf35+e3p4eHt8fHt6enl5eHd3dHFvbm5wcXNzcnFwcXR5fH18fHx2cnBwcHBvbWxsb3J0dnuAgoOFg4R+cW5sbm9tbWxra2tudHh6f4GAgH97eXh2dn9/f39+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn19fX19fX19fX19fX19fX18fn5+fn5+fn5+fX1+fn5+f3+BhomHhYOBf318foCCg4SEgX9/gYSBgH15d3d2dnd2dnVycnJ5e3Z0dX2Fh4SBgoGAgH9+e3p6enp6e3t8fX59fHt6eXh3dnd2dHNzdHV3d3d4enp5d3N0dnZzb2tpaGZlZ2lwcXBwcXJ0dXd7fH19fX18fHx7enp6enp7fX5/f359fn5+f4CAgICAgIB/f4CAf4CAf31+fHp6e3x8e3p6eXl4d3V0cW9ubnBxc3NycXBxdHl8fXx8eXRwb3Bwb25tbG1wc3V4fYKDhISDfnZsbG1tbm1tbGtra292en1/gYCAfnp4dnZ2fn5+fn5+fn5+fn5+f39+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn19fX19fXx8fX1+fn5+f39/f39/fn59fX5+fn5/goaIiIWEgYB9fH6AgoSEhIJ/fn+Cg4B/fXl3d3Z4d3Z1cm9wc3l8e31+gYWHhoKCgoB/fn18e3p6enp8fHx9fn5+fnx7enp5eHh2dnZ2dnd3eXl7fX18eHZ2d3d1cG5raWhqbHJxcnJ0d3d4e3x8fX19fX18e3p7enp6ent8fn9/fn5/f39/f3+AgIGBgYCAgIGAf399fXt6enp9e3t6e3t6eHZ0dHRzcnBvcHFycnJyb3J3fH19fHp1cm9vb29ubWxtbnByd3yBgoOEgn96b2xsbW1tbGtramlscnh7f4CBgYB9eXV1dHZ+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fX19fX19fHx9fX5+fn5/f39/f39+fn5+fX1+fn+Dh4iHhYN/e3t+f4CChIWDgX59gIOBf4B/fHh4eHh4dnNzcG1vc3d9gIGAgYaGg4CAgIB/fnx7e3t8fHx8fH1+fn5+fHt6enl4eXl4eHd4eHh6e3x9fXx6eXZ3d3d1cnFvbW5vc3R0dnd6enl8fHx9fX19fXx7ent6ent6e3x+f39+fn9/f39+foCAgYGAgICAf399e3h5e319e3x8fHt7e3p4dnRzc3NycG9wcXJycnJydXh8fXx6d3Jwb29vb25tbG1ucHR6f4KDg4OBe3JtbGxtbW1sa2tqam1zeXyAgoGBfnt2dXV0dn5+fn5+fn5+fn58fH5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn59fX19fX19fX19fX19fX19fn5+fn9/f39/f35+fn59fX5+gIWIh4aDgH58fH9/f4KChIOBgICCg4F/gIF9eXl6enl4dXJwbW1yd3x/fXt7g4aEgICBgYB/gIB/f4CAf39/f35+fnx9e3p5enl6eXp4eHd3eHl7fX5+fn17eHd2dnl5d3V0cnR2dXd4enx8fH1+fn19fX19fHx8e3p6ent7fX5/f39/f39/f319f39/f39/gH98fHt4dXV5fn9/fXt7enp6enh2dHJyc3NxcHBycnJxcXJ2enx7e3l0cW9vb29vb21rbW9ydXuBgYOCgH95cW1rbGxtbGtramlpbnV5fYGCgoF8eHZ2dnZ2fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn19fX19fX19fX19fX5+fX1+fn5+f39/f39/fn5+fn5+fn+Dh4aFhIF9fH19f39/goKDgX+Bg4SCf36AgYF8eXt7fHp4dXFvbnF2e31+e3h9goKBgICAgICAgIGBgYGAgICAf39+fHt6enl5eHl5enl4d3d4ent9fn5+fXt8ent6ent6eXh4eHl6fH19fX16fHx8fX19fHx8fHx8e3x8e3x+fn9/f39/f39/f39/f39/f3+Afnx8fXx6eHp9gYKBfXt6enp6eHZ0cnJzc3FwcHJycnFxc3h7fXp5d3Nvbm9vb29tbGtrbnN9gYKDgoGAfHRua2tsbG1sa2tqaWludHh8gIGCgHt3dXV1dXV+fn5+fn5+fn5+fn59fX19fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fX1+fn5+fn5+fn9/fn5+fn5+fn5/gYaHhYWDf3x8fX2AgICBg4SDg4SIhIF/foCBgn56en19e3p4dXFvcnZ6e3x7fH+Cg4J/gIB/gICAgYGBgYCAgIB/f358e3p6eXd3eXl7e3l4d3h8fX6Afn9+fn19fX19fHx9fHt6e35/f3x6e3l5enx9fXx8fX19fX19fX1+fn5+f39/f39/fn9+fn9/gH9/f39/fX17e3x7fICCgoF+enl5eXh4d3VzcXJ0cnFxc3Jyc3N2enx8enh0cnBubm5vbW1raWtvdn2Ag4OCgIB5cm1rbG1tbWtra2pqa291e3+BgYF9eHV0dHR0dH5+fn5+fn5+fn5+fn19fX1+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn9/f39/f35+fn5+fn+BhIaEg4F+fHx9fn9/gIGDhIOFiIiEgX59f4B9eXd4fH99fHp3c3FydHd4eHt9f4OFhICAgH+AgIB/f39/gICAgH9/fnx7enp5eXl5eXt7enl4eHh7fX5+f35+fn5+fn59fX18fH1/f317eXh5eXp6fH19fHx9fX19fX19fX5+fn5/f39/f39/gIGBgoKCgH9/fn59fXt7fH19f4GAfXt6eXl5eHh3dXNxcnRycXFzcnJzdHd7fHx6d3NxcG5ubm9tbWtrbXN6gIGCg4KAfXZxbGtsbW1ta2trampscHZ6f4GBgXx2dHNzc3Nzf39/f35+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX18fHx8fHx9fX19fn5+fn5+fn5/f39/fn5+fn5+f4CDhYWCgH58fX1+f39/gIGDhoeIhIJ/fHt+gHt2c3R5gH9+e3l2c3JxdXl6fX+AgYSEgH9/f39/f39/f39/f39/f399fXt7e3t6enh4eHp7e3h3d3l9fn9/fn5/f39/f359fX19fn9/e3h4ent9fnx+fXx8fH19fX19fn19fn5+fn9/f39/f39/gYKDhIOCf359fXt8e3t9fn+BgYB9fHl6enh4eXd1c3FzdHJxcXNyc3N1e3t8fHp2cm9vb29vb21sa2pueH+Bg4KDgn96c25samtsbGxqamppaW1ydnyAgYKBe3ZzcnJycnJ/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fHx8fH19fX1+fn5+fn5+fn9/f39+fn5+fn5/gIOFhYJ+fHx+fX5/f3+Ag4WGh4aCf35+fX6AfHd1dnl+gIB9e3h1cnJ1ent9gH59gISAf39/f39/f39/f39/f39+fn19fHx7e3p6enp6e3t7eHd2d3t+f39+fn9/gIB/fn19fX19fHx5eHl7fYCAf359fHx8fX19fX19fX1+fn5+f39/f39/f3+AgoOEhIOAf319fHt8f4B/f4GBgH58eXp6eHh5d3VycHFycnFxc3JzdHh7e3t7eHVxb29vb29vbWxrbnR7gYODg4SBfnhwbWtqa2xsbGpqampqbXJ5foCBgn55dXJycnJycn5+fn5/f39/f39+fn9/fn5+fn5+fn5+fn5+fn59fX17fn5+fn19fX19fX1+fn59fX19fX19e3x8fHx8fHx8fHx9fX5+fn6AgH5+fn5+fn9/gH58f36AhISDgn97fHx+f35/foGDhoiHg39+fn58foB9eHZ3eX1/gH59e3d1dnl7eXt9e3h6goKBgH5+fn5+fn5+fn5+fn5+f39+fnx7e3p7enh7fHt6eXh4d3l8fX9/f39/f399fn59fX9+e3p6fICCg4KAf35/f319fH59fX19fX19fn5+fn9/fn5/f4CBhISEhIOBf32AgIGBf39+gIGBf3x7enp5eHh3dXFvb3BycnJycnN3e3x8enl2c3Bvb29vb25sa2tud36DhISEgYF8dXBsbGtrbGxta2traWpwdHp+gICAe3h1c3JxcXFzfn5+fn9/f39/f35+f39+fn5+fn5+fn5+fn5+fn19fXt9fX19fX19fX19fX5+fn19fX19fX17fHx8fHx8fHx8fH19fn5+fn5+fn5+fn5+f3+Af35+foCEhYSDgn98fH5/fX5+g4aJiYWDgoCAfnx+gH11c3V7fH6AgX98eXl6fHt4eXl5d3h+gYB+fn5+fn5+fn5+fn5+fn5/f35+fX19fXx7eXx9fXx6eXh3eHp8fn5/f39/f318fH19fnx7enp+goSEg4B/f4GBgH9+fX19fX19fX1+fn5+f39+fn5+gIGEhISEg4GCgIGBf318fn5/gYB/fHt6enl4eHd1cW9vcHJycnJzdXl7fHt5d3RycG9vb29vbmxrbnJ7gYSDg4OBfnlzcGxsbGxtbW1ra2tqa3B2fYCBgX96dnNycXFxc3V+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5+fn5+fn58fH5+fn5+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+f39/gIGBfn5/gYWHhYWFgXx8fH59gYOFiImFhIWFg4F+en2AfHZzeHt9fX+Dg359fX1/fXp4eHh4eX1+f35+fn5+fn5+fn5+fn5+fn+Afn6Af39+fn17fH19fHx6enp6eXl7fX5/gICAf319f39+fnx6en+DhYSCgH+AgoSDgYB/fn59fn5+fn5+fn5+fX5+fH5/gIKDg4ODg4ODg4OCgH+AgH+BgX98enl6enl4dnRvbm9wcnJyc3R3fHx8enZ2c3Fwb29vb29ubWxudn+Dg4ODgoB8dXFvbWxsbW1tbWtqampucXd8gIGBf3l0c3JycHF2eX9/gIB+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fHx9fX19fn5+fn5+fn5+fn+Ag4N/fn+BhIaGhYaDf3t7foGGiYiGhYKChoaFgn95fH9+enZ4fH58f4ODgYB/f399enl4eXp7fH5/fn5+fn5+fn5+fn5+fn5+f4B/f4CAf399fXx9fn59fn18e3p7e3p7e31/f359fX19fX5+fXt7gIOFg4GAf4CCgoGAgH9+fn1+fn5+fn5+fn59fX1+f4GAgYKDg4ODhYeEhIKDhYWFhIOCgH18enp6eXh2dG9ub3BycnJzd3t9fXt5dXNzcXBvb29vb21rbnJ6gIKCg4KBf3hzcW9tbGxtbW1ta2pqa29zen6AgYF8d3NycnJydHh7f39/f39/f39/f39/f39/f39/fn5+fn5+f39+fn5+fn5+fn5+fn5+fn19fX19fX19fX18fHt7fHx8fHx8fHx9fX19fn5+fn5+fn5+fn5+fX+BgYF/f4GFhYaGhYWCfXx/hIiJhYKAf4KGh4aEf3h4f4B+eXl8fHp8gIKDg4B/fn56d3h5ent9fX19fX1+fn5+fn5+fn5+fn5/f4CAgYF/fnx8fHx+fX1+fnx8fHx8fHp7fHx9fHx8e31+fX18fH2BhYWDgX9/f4KCgoGAgH9+fn5+fX1+fn5+f318fIGCgoGChIODg4OEhISEh4iMjY2Ni4mEgX98fHp5eHd0cG9wcXFycnZ5fH58e3h1cnJxb25ubm1ta2xvdn6BgoKCgYF9dXJwbmxsbW1tbW1taWltcXh9gIGBf3t2c3JydHZ4fH9/f39/f39/f39/f39+fn9/f39+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX19fX19fX19fXx8fHx8fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fX9/f4CBg4aGg4KEhYaCfH+Fh4N/fHx/gYSFhoR/dXZ9gn97e319enl+gIKCgH9+fnx6eHl6e319fn58fH19fX19fX19fn5+fn9/gICBgX9+fX19fX59fX5+fn59fXx8e3t7e3t7e3t6fHx8fXx8fYGEhIJ/fXx9f4GBgYCAf39+fn59fX5+fn5/fX+ChoWEg4CCg4ODg4KCgoWIiouNjY2MioeGhoOAfHl5d3Rwb3BxcnJ0eHt9fnt5d3RycXBwbm5ubW1rbHF6gIKCgoGBfnp0cm9tbGxtbW1tbW1paW1yeX6BgYF/eXV0c3N2eX1/gICAgIB/f39/f39/f35+f39/f39/f39/f39+fn5+fn5+fX19fX5+fn58fH19fX19fX19fHx8fHx8fHx8fHx8fX19fX19fn59fX5+fn5+fn5+fn5/gIKEhYaBgIKFhoR/foOEgHp6fX6AgIOHhn51c3mAgH17fnx7ent/gYKBgH9/e3p5eHp7fX1+fnx6fHx8fHx8fX1+fn9/fn5+gICAf39+fX19fn5+fn59fX1+fXx8fHx8enx7e3p6e3t7e31+gYSEgn99fH2AgICAf3+Af39/f35+f39/f31+gYODgH5+f4GEhISEg4KChIiJi42NjIqHhYWIiYV+e3h3c3Bvb3Fxc3d5fX18eXd1c3Jwb29vb29ubWxtc3yBgoKCgYB+eHNxb2xsbGxsbW1tbWtqbnN7gIGBgH15dnRyc3d8f4GBgICAgH9/f39/f39/fn5/f39/f39/f39/f35+fn5+fn59fX19fn5+fn5+fX19fX19fX18fHx8fHx8fHx8fHx9fX19fX1+fn19fn5+fn5+fn5+fn+AgoSFhH9+f4SFhYN/gYOCfXp7fX19gYaGfnVzeX+Bf35/fnt6e3+AgIB/fn58e3t6ent9fX1+fn18fHx8fHx8fH5+fX1+fn6AgIB/f359fXx9fn5+fn5+fX59fX18fX19fXx7enp6ent7fX6BgoKAfnx9foGCgoOCgYB/gICAgH+AgICAf4B/gH99fHx/gYODhISEgoKEh4iKjIuJhYeHh4eJiIWDfHd0cXBxcnN1enx+fXt4dnNycHFvbm5tbW1rbG92foKBgYGBgH54cW9tbGxsbGxtbW1tampvdXyAgYGAfXd0dHN2e36AgoF/f39/f39/f39/f39/f39/f39/f39/f39/f359fn5/f319fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx9fX19fn99fX5+fn5+fn19fX19fX5+foCChISEgH9/gISGhYODg4SBe3t7fH6Ch4Z9c3Z5f4KBgIB+fHp9foCAfn19f359fXt6e3t8fYCDgn98enp8fH19fn5+fn5+fn59f35+fn5+fn5/f359fX19fX5+fXx8fH5/fnx7e3l6ent7fH5+fn5/f3+BgYOEhIODgoB/gICBgICAgICBgYCAf319fX+BgIGFhYSCgoKEhYWFg4KCh4mIh4iLioeAeXNycnNxdHl9fn17enZzcnFxcHBubm1ra2prcXqAgICBgIB/fXdxb25sbW1tbWxsbGtra291foCBgYF7dHJ0dXh8gYGBf39/f39/f39/f39/f39/f39/f39/f39/f39/fn1+fn19fX1+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fH19fX1+f35+fn5+fn5+fX19fX19fn5+gIKEhISAf3+Ag4WGhYWFhoN9ent8f4OIhn90cXV8f4GAgH58ent9fn58e3p8fX9+fHt7fH1/g4eIgnt6enx8fHx9fX5+fn5+fn1/fn5+fn5+fn9/f359fn5+fn59fHx8fH1+f359fHt7e3t8fn19fX+AgYKChISEg4OCf359gIKDgoCBgoKCgIB/fX1+gIKDhIaGhIKCgoOCgoKEhIaGg4eIiYiJiImCeXVzcXF2e39+fHl3c3JwcXFwcG5ubWtram10fIGBgIGAgH99d3BvbmxtbW1tbGxsa2trcnh/gYGBgHp1dHZ5e32BgYB+f39/f4CAgIB/f39/f39/f39/f39/f39/f39/fn5+fn59fX19fn5+fn5+fnx8fHx8fHx8fHx8fHx8fHx8fH1+fn+Af35+fn5+fX19fX18fX19fX5/goWEgoGAgH9/hIaGhYWIg356e31/hIeFgXh4eX5/gYKAgH17fX19e3p4eHh8f359fX1+gYOGiYuIf3t6enp7e3t7fX5+fn5+fn5+fn5+fn5+f35/f319fn9/f35+fH59fn5/gICAfnx8fH19fH5+f4GBgIGDg4KDhIF9e3p/g4aHhoaGh4SBgIB+fH1+gICChoaEgYGCgoODg4WGhYSBg4WFf4eKiod/eHRycnp9gYB7eXZxcHBxcXBwb25ubGxrbnd/gYGBgICAf353b29tbW1tbW1tbWxqaW1zen+AgH9+eXR1eHp+f4KBfnt/f39/gICAgH9/f39/f39/f39/f39/f39/f39+fn5+fn19fX1+fn5+fn5+fHx8fHx8fHx8fHx8fHx8fHx8fX5+gIGBgX9/fn59fX19fXx9fX19fn+Ag4SCgYCAf3+BhISGhoaBfXh5fYGGiIeDgX5+fn+AgICAfn19fXt6eHZ0dXl8fX+BgYKFiImKjIuFfHt6ent7e3t7fX5+fn59fX19fn5+fn5/fn19fHx9fn5+fX59fXx9fX+AgIB/fnx8fHx9foGCgYGDgoGCgoKEgX98enx+gIKDg4SGgoB/f3x7fX6AgYSFhYKAgIGCgoODhIWEg3+AgHx8jJeQjIiBe3p7f4B/fnp3dHBwcHFxcHBvbm5samlud4CCgoGAf4B/e3RvbmxtbW1tbW1tbGppbnV6f4B/fn14dXh8f3+AgH97eH5+f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fn59fX18fHx8fHx8fHx8fHx8e3t8fHx+fn6BgoKDgX9+fX19fX18fH19fn59f4GCg4OBf4GAgICCg4WFhYSAfnx9gYWGh4WBfn59fn+Bf359fH18e3l3dHR0dnh+f4KEhoiJiYqMjIuCe3p6enp7fHx9fn5+fn5+fn5+fn5+fn59e3t5fHx9fn5+f39+fn19fn+AgH9+fHt7e3x+gYGCg4KBgICBgoODf359fXx/fn9/gYOBf35+e3x+foCChYOBgYCAgoKCg4ODg4ODgoKAfYCLkI6MkY6FgX99e3x6eXZyb29xcXFvb29ubWtoanB6gYOBgYB/f398dW5ubG1tbW5ubm1raWtvd31/gIB/e3Z2eX1/f4CAfnd2gIB/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX19fX19fHx8fHx8fHx8fHx8fHx9fXx8fH5+foCBg4SDgn59fHx9fX19fX1+fn+AgYKDg4F/gH+AgIGDhISEhYaGh4eIiIeFg399fX1+foB/fnx7e3t5dnVyc3J0d3yAgoSHiYmJiYuMjol/e3t7fHx8fH1+fn5+fn5+fn5+fn5/fn18e3x9fn5/f3+AgH9+fn5+f4CAf358e3p6fH6BgYODgH9+foCCg4N/fXx8fH19fX+CgoB+fX57fH5/gYKFg4GBgIKDg4ODg4ODg4OEhIOChIqQkYuGg356eXl5eHl4d3Nxb3FxcW9vb25ta2tsdH2AgoGBgH9/f3tybW1sbW1tbm5ubWpoa3J4fX+AgH97eHl9foCAgH94dHV/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX19fX19fH18fHx8fHx8fHx8fHx8fHx8fHx+fn19f4GEhYWFgX18fHx9fn9/f4CAgYGDgoOCgICAf39/gICChISFhYeIiIiIh4aEgX58fn5+f359e3p6end2dHNxcXF0eHyBgoKFiYuLjY2NjYh9e3x9fH19fn5+fn5+fn5+fn5+fn19fX5/gH9/fn5+f35+f3+Af39/f39+fX17eHp7f4GAgoF/fH1+gIGEhH58e3x9e3t8f3+Af4B/fXx8foGChYaDgH+Bg4WFhYWDgoOFhYWFhYSGio6Jgn17dnN8gIB8dHZ9e3RxcHFwb21ubW1ram1zf4GBgYGAf4B/enFtbWxtbW1ubm1saWlsdHp9f4B/fnp5e35/gIGBfXRzdX9/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fX18fXx8fHx8fHx8fHx8fHx8fHx8fH5+fX1/gYOEhYWDf3x8fX+AgYKCg4OCgoOCg4KAgIB/f35+f4CDhIOBgIGEh4iHhYSBfnx9fn1+fXx6eXh4dXV0cnNycXN2e3+CgYKGiImLjY2PjIR8e3x8fX1+fn5+fn5+fn5+fn5+fn+AgH9+fn59fX19fHx9fn9/f4B/f359fXt5eX2BgYB/fn17fH2AgYOCgH59fn99fX5/gICAfn59fHx+gYKFhoOAgIKGh4eFhYODhYSEhISFhoiLjIZ+dnFxfISDgYF9d3l8d3NxcXBvbW5tbWtpbnd/goKBgYB/gH94cG1tbG1tbW5ubWxpaW51e35/gH9+fHx+gICAgH54c3N3f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn59fX5+fX19e3x8fHx8fHx8fHx8fHx8fHx9fX19fn5+fn5/gIKFhoWBfXx+gIOEhISGhoWFhYODgYGBgYF/f39/f4KEg399fYGHiIWEhIF+fHx8fX18end2eHZ0dXVzc3Nyc3Z4fICCg4SGh4mLjI6Pi4F8e3x9fX1+fn5+fn5+fn19f35/f39/fX19fXx9fHt6eHp7fH9/f39/f317enp8f4CAfnt8fHt8foGDhoOAf4CAf35/gH9/gYB/fn17fX+Cg4WEgYGChIiJiIeFhIaGhoWFhISFh4iKh311b3N9g4B+f352dnyBenNycHBwbm1ra2pweYCBgIGCgH+AfndwbW1sbGttbW1ramhpbnZ8fn9/f399gICAgICAenFydXx/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn19fn59fX17fHx8fHx8fHx8fHx8fHx8fH19fX1+fn5+fn+AgoWGh4N/fn+ChIWEhIWFhISEgoKAgICAgH9/f39/goOBfnp9gYeIhYSEf317fX19fXx6enl2dHN1dnV0dHR1dnh6fH+AgoOIiYuLjY6OiYF+fX1+fX5+fn5+fn59fX1/gIB/fn18fHt8e3t7e3x7eXp6fX5/f39/fXt6enx/gIB+e3x8fH5/gYSGhIGAgH9+fn+AgYGBgH9+fn1+gIKDhYSBgYKEiImIh4WEhoaGhYWFhYaGiIqHgHZxcXl9fHp+f3x8fH58eXNwcHBubWtra3F6gYGAgYKAf4F7dW9tbWxsa21tbW1sZ2lweH1+gIB/fn6AgICBf312cXR5fX5+f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fX19fX19fX19fX5+fn5+fn+BhIWGhIF/gYSEhoWDhYWEhIOCgYF+f4CAgIB/f4CBg4OAfH2Bh4qIh4aCfn5/f359e3t6enh1dnZ3d3Z4dXZ5eXt7fX+AgYWJiouNjY6NiIF+fX5+fn9+fn5+fn1+f4CAf3x7enp7ent7fX5/fn59fHt8fX+Af39+e3h6fYGBgHx6e3x9foCBhIaDgX9/f35+f4CCgoKAf359fH6AgoSFhIGBgoSHiIiHhoWGh4eHhoaFhYWGiYaEfXR1eXyBgICBgoOBgH9+dnBwcG5tbGprcn2BgYCBgX+Af3xybG1tbGxsbG1tbGpoa3R5fn9/f39/f4CBgX99dnJ0eHx9f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX18fHx8fHx8fHx8fHx9fX19fX19fX19fn5+fn5+fn+ChIWFhIKBhIWEgoGBgYKCgYB/fn5/gICAgICAgIGCg4J+fICHioiHh4WBgH9/fXx7e3x8fHl4dnV1dnh6e3t7fHx9f4GBhIeJioyNjo2Nh4B9fn5+f39/f39+fn9/gH99e3p5eXp6e3x+f4B/gIB/fn1+f4CAgH57eHp9gYGAfHl5e3x+gIGFhoJ/fn9+fn9/f3+AgH5+fXx9f4GChIWEgYGBg4aHiIeIhoSGh4aGhoaGhoeHh4WCfHx+f4KBgICChIODgoB+dXBwbm1samtyfYGBgIGBf4B/fHRubW1sbGxsbW1saWhsdHp+f39/f39/gIGBf3p1dHZ6e31/f4CAfn5+fn9/f39/f39/f39/f39/f39/f35+fn5+fn5+fX19fXx9e3t8fHx8fHx8fH19fX19fX19fn5+fn5+fn59f4CChoWFhoOEg4KAf39/gICAgH5+foCAgICAgIB/f4CCg359gIeKiYiGhIOBgH98e3p6fH19enh1dHR1eXp8fH59foCAgICChYeIioqMjYyMh4F+fn5/gH5+fn+Af39/fnx7eXl4eXt9fX+AgH+Bg4KCgX9+gICAgHp3e31/f356d3l5e3+BgoSEgX9+fX1/f39/foB/fnx8fX5/gYKEg4KBgYCBhIaHiIiGg4OGhoaGhYeHh4iIhYKAfXx9goGAgIKFhoSBgYB6cm9vbmtrbXN+gIKBgYF/gIB9dW9sbGxsa21tbW1qam13fX+Afn1+f4CBgX9+d3R1eHl7fn9/f39+fn5+f39/f39/f39/f39/f39/f39/fn5+fn5+fn5+fn59fXx9fXx8fHx8fHx8fX19fX19fX19fX5+fn5+fn1/f4CChIWGhIaDgoB/f3+AgICAf39+gICAgICAgH9/gIGDgX+Ah4qJiIWFhIOAfXp4eHh6fHx7eHVzcnN2enx8fn9/gICAgH+ChoqKiYuMjIyMhoB+fn9/fn+AgYB/fn59fHt6enl6fH19fn5/goWHhoWDgX+AgH5+fHt9foB/fnp3eXl7f4GChISBf359fX19f39/fn59fHx9f3+Bg4WEgoGBgIGDhIeIh4aGhYaGhoaFh4iIhoaFgn9/gIGDg4GChYWFhYOCgX11cG9ua2ttdn6AgoGBgX+AgH10bmxsbGxrbW1tbWppb3d9f4B+fX5/gIGBf3lzdXZ4eXt+f39+fn5+fn5+fn9/f39/f39/f39/f39/f39/fX5+fn5+fn5+fn59fHx8fHx8fHx8fHx9fX5+fn59fX19fn5+fn5+fn5/f4CBhIaGhoSDgYB/f39+fn5/f39/gIB/f39/fn5/gYODgH+GiomHhoWEgXt3dnV1dnl7e3t3dXNzc3V5e31/fn9/gIB/fnyAhYqMi4uMjIyJhH9/fn5/gYGBf319fn18fHt7e3x9fn5+f4KHiYqJh4WDgYB/fn58fH1/gH99eHZ3eXx/gYKDhIF/fn18fHx+f39+fX17e31/gYOFhYSBgoKBgYKDhIaHhoaEhYWFhYWGiIiGhYSCgoKDg4SEgoOGhoWFhIKBgHpzcG5ram54gIGCgYGBf4CAfHVtbGxra21tbmxqaWpxeXx+fX1+f4CCgYJ9eHV4eXl5e35/f35+fn5+fn5+f39/f39/f39/f39/f39/f399fn5+fn5+fn5+fn18fHx8fHx8fHx8fH19fn5+fn19fX1+fn5+fn5+fn9/f4CDhYaGhYSCgX9/f35+fn9/f3+AgH9/f39+fX6AgoKCgYOJioaEgYB7eHJvb3J1eXt7e3l2c3NzdXl7fX19fn+AgH98e3x/hoqLi4uLi4uKhYCAgIGCgX9+fn59fXx8fHt7fHx9fX+DhoiIioqIhoSCgH9+fnx9f4CAf355eHl5fH6AgoSEgX9+f359fX5/f359fXx8fX+Cg4OEg4GCgoKCgoODhIaHh4WDg4WFhYaHh4WEhIODg4SEhYWGh4iIh4WDg4OCgXt3dHFwc3qAgYKBgYF/gIB8c2xsbGtrbW1sa2poa3N7fX59fX6AgYKBf3p3dnl6eXl7fn9/fn5+fn5+fn5/f39/f39/f39/f3+AgH5+fn5+fn5+fn5+fn19fXx8fHx8fHx8fHx8fX19fX19fn5+fn5+fX1+fn5+f39/f4GBg4SFhYKAf39/f39/f39/f39/f35/f35+fn6AgYB9fH+FhoJ/fH18eHFub3R5fH19enp2d3Z3eXp8fH1/gYGAf3x7fH1/gYSIiYqJiYiFgICBgoB/f359fX19fHx7e3t7fX+DhYmJioqKiYqFhIF+fX19fH1/f39/fHp3eHh7foGCg4KCgYF/f35+fn6AgH9+fH1+gIKDgYGCgYKBgoODgoKBgoSHhYOEhISFhYaGhYWEg4SEhYWGhoaGhoaGhoSEg4ODgoB9e3l5foGBgYGCgH9+f3tybmtra2xtbWxramltdnx+fn5/gYKCgX97d3V4enp4eHp+f39+fn5+fn5+fn9/f39/f39/f39/f39/fn5+fn5+fn5+fn5+fX19fHx8fHx8fHx8fHx9fX19fX1+fn5+fn59fX5+fn5/f39/f3+BgoODgYB/f39/f39/f39/f39/fn5+fn5+fn+AgoJ/fICBgoCBg4N+eHJvcnZ6fn5+fnx8fHx8fX5+gIGBgX99fHt6fH1+gISIi4yMiIWBgYGAf35+fX19fHx9fX1+f4CChIWIioqJi4uJiIOCgH58fH19f4CAf398end4en1/gYKCg4ODg4GBf39+foCAf359f4KEgoOFhYWEhISCgoKBf35/goSFg4SFhIWFhoaGhYSEhYWFhYWFhoaGhoaGhYWEhISDhISCgH+BgoKCgoKAf35/e3Jua2trbG1tbGtpaG13fX58fX+BgoKBf3t3d3l5eXd3en5/f399fX19fX19fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fHx8fH5+fn5+fn5+fn5+fn19fn5+fn5+f39+foCAgIB/f35+fn5/f39/fn6AgH9/fn19fX19fn+BgX58fYCDgoSEhIN9dnBxdnl8fX5+f359foCBgoKCgX9+fXx7e3x8e3x/gIKFioqHhICCgYB/fn18fHt7e3x8fYCEhIWGiImKioqKiYaDgIB/fnx8fX9/gIB/fXx6eHl7fn+AgYODg4SEg4GAfn9/fn58fX+Ag4ODg4SEg4ODhYSDhoODgH6Bg4WDhISFhYaFhYWFg4KDg4WFhIWFhoeHh4eHh4aGhoaEhISDg4OEhISEgoGAf4B5cm5ra2tsbm5sa2dpcHh+f319gIGBgYF9end5eXl4dnZ6fn9/f319fX19fX1+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn5+fn19fX19fX1+fn19fn5+fn5+fn5+fn5+fX19fX5+fn5/f35+f39+fn5+fn5+fn9/f39+fn5+fn5+fX19fX1+f36Dgn57foCDhISDg4J9dXN1eHt8fn5+foCBf4CAgIGAfn18ent7fHx7fH1/gICBgYKCgICAf359fHt8e3t7e3t/gYSGh4eJi4qKioqHhIB/fn16enx9f3+AgH58fHp4eXp9fX2AgoKCg4ODgYB+f39+fn5/f4CDg4ODhISEhIOFhYaGhoaFhYKCg4OEhIWFhoiIhoF/foCAf3+AgYOGhYWFhYWFhoaGhoSEhIODg4SEhISEgoGAgHlxbGtra2xsbGxraWtxeX1+fX2AgYGBgHx5eHl5eHd2dnp+gIB/fX19fX19fX5+fn5+fn9/fn5+fn9/fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fn59fX5+fn59fn5+fn59fX19fX1+fn5+fX1+fn5+fn59f35+fn5+fn5+fn59fX19fX19fX19fn+CgH16fYGEhIODg4N6c3J2eXp9fn5/f39+f39/f399fHt7e3t7enp6fH5/fX5/goJ/gIB/fXx6e3t7ent7fICChoiIiYmLioqLioiFgX58enl6fH5/f4CAfnx6e3l6enp7fX+AgYGDg4OCgICAgH5+fH2AgYKCg4OEhIODhYWFhYWFhISEhISEg4OEhoaHhoWAeXV4fH1/f35/gIOEhYeEhYWFhIWFhIWEhISChISFhYSEg4OBeXFta2tsbGxsa2ppbHR7f319fYCAgoF/fHl5enp4dnZ2eX2AgIB+fX19fX19fn5+fn5+f39+fn5+f39+fn5+fn5+fn5+fn5+fn59fX19fX19fX1+fn19fn5+fn19fn5+fn19fX19fX5+fn59fX5+fn5+fn1/fn5+fn5+fn5+fn19fX19fX19fXx8foKCgXt6fYKEg4KEhH94dHV4eXt/f399e3x9fX9/f359fHx7e3t6enp8fn1+gIKCgoB/f359fHt6enp7fH1+gYSHiIiIiImKioqJiYeDgX16eXp8fn9/gIB/fX17fHt6eXl9f4CBgYKCgoGAgIKCgYB+gICBgoKDg4SEg4OEhIWFhISEhISEg4OEhIaFhYWCfXRucHh9f35+fX5+gIiLioaFhoSEgoKDhISFhYSDg4ODhISEhIN9dG5sbGxsbGxramltdXx/fX9/gICBgH98eXl8gH94dHR5fYGBgH5+fn5+fX19fn5+fn5/f35+fn5/f358fX19fX19fn5+fnx8fXx9fX19fX19fX5+fX19fX19fH1+fn19fX19fX19fX1+fn5+fX1+fn5+fn5/f35+fn5+fn5+fHx9fXx8fHx9fX1+gIKBfnh5foOEhISEg353d3t5eX2Af3p5fHx9fn+Afn19fXx8e3t6eXp8fH+BgYGBgH9+fXx7enp7en5/gIKCg4SGhoaGiImKiYmJiIaDgXx6eX1+fn5/f39/fn59fHp5e36AgIGBgYKCgoGCg4OCgYGBgoKCgoOEg4ODg4SEg4ODg4SEhISEhISGhIOAfnpybm50en5/fn19fn6HjYiEhISEhIOAgYGDhIaIhoOAgYOEhIWFg4B5c29ubW1tbWtpaG53fn59f4CAf4B/f3t5eX2Eg3l0dHl+gYGAfn5+fn59fX1+fn5+fn9/fn5+fn5+fnx9fX19fX1+fn5+fn59fH19fX19fX19fn59fX19fX17fX19fX19fX19fX19fX5+fn59fX5+fn5+fn19fn5+fn5+fn5+fn19fHx8fH19fX5+gYKAfHh6foKDhISDgn9+fnt6fH9+fHp8fX5+f4B+fX19fHx7e3p5enx9gIGBf39/f359fHx8e35/gIGCgoGCgoSFhYWGh4mJioqJiYaCfXp5fH18fH9/f39+f35+fn5/gYCAf39/gYGBgYKDg4KCgYGDg4KCg4SDg4KCg4KCgoODhISFhYSEg4SHiIV+dXN1e3t9fXl7fn6BjYyDfn+Cg4OEgn+Ag4SGh4iHgn+AgYODg4OEg396c3Bvbm1ta2lpcHh+fn1/gIKBgH9+enp6foR/eXR0eX6CgYCAf39+fX19fX5+fn5+fn5+fn5+fn5+fH19fX19fX5+fn5+fn5+fn5+fn19fX1+fn5+fX1+fn19fX19fX19fX19fXx8fH5+fn5+fn59fX5+fn59fX19fX1/f319fn59fX19fHx9fX5/goKAe3h6foGEhYWFg4F/f357fYF/fX1+f39/fn19fHx8fHx7enl7foCAgH9/fn9+fn19fXx+f4KDhIWDgoKAgIKEhoaIiYmJiYqJiIR/fXt8fH19f39/f35+gH9+fn+BgX9/fn9/gICAgICCg4OCgoKCg4ODg4KBgICBgoGCgoKEhIWFhYWEhYiIhn1zd31+f358fH5/iI+KgHp6en2AgoKBfn6DhoeHiIiBfX6BgoKDhISDgn98dnJvbm1qaGhxen59f4GBgYGAf3p3eHqDg3t3dHR4fIKBgIB/f359fX19fn5+fn5+fn5+fn5+fn58fX19fX19fn5+fn5+fn5+fn5+fX19fX5+fn59fX5+fX19fX19fX19fX19fHx8fn5+fn5+fn19fX19fX5+fn59fXx8fX1+fn19fX19fX19fX2BgoF/fHh4fX+ChISEg4GBf3x+goJ/fX5/f39/fn18fHx8e3t7fH+AgH6Af359f35+fX19fH5+gYSGh4WEgoCAgYKFhYeIiIiIiYmIhYF/fHx8fX1/f35+f3+Af4CAf4GBf319foCAgICAgIKCgoGBgoKDg4ODgoGAgIGCgYKDg4SEhYWGhoaHiIiFgHV3fH5+eXl+g4uHgXp5eXl5ent+goGCf4CCgoKEiISAfX2AgYKCg4SEg4J+eHRxbmtnbHZ7f3+AgYGBgX99e3h7f4J9d3VzdHh8goKAgH9/f39+fn5+fn5+fn19fn5+fn5+fX19fX19fX1+fn5+fn5+fn5+fn59fX19fX19fX5+fX1+fn19fX19fX5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX1+fX+BgYKAfHh6fX6BhIWEgoCBgH6AgoB/f35/gIB+fn19e3p5en6AgYB/f39+f35+fn18fX19fX2AgoWHhYSAgIB/gYSFhoaIiIiHh4eFhIJ/fXx9fX5+fX+AgIGAgICCgoJ+fHx/gICAgICAgIGBgYGCgoKCg4GAgICAgIGBgoKChISEhIaGh4iHh4aCeXd7e3t4eoGFhHp3dnd5eXl5eXx+f317fX6Ag4WHh4F9fH9/gYKChISEhIJ+enRvbGttdX1/gICAgYF/gH16eHyCgXhycXNzd3yCgoCAf39/f35+fn5+fn5+fX1+fn5+fn59fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fn59fX5+fX19fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX+BgoF/fXp5e32AgoSEgYB/fHt9fn9/fn+AgH5+fX17enx/gYB/gIB/fX18e3x8fHt9fX18fH+AgoOCgYCAgH+Bg4SFhYaHh4aEhYWHhoOBgH5+fX1+f4GBgYCAgIKCgn58fYCAgIKBgH9/gICBgYKCgYGBgICAgICAgYGCgoKBgYKCg4OEhYSEgoF9d3p6d3V7goJ8dnV2d3Z2dnZ1cXFzen+DhIaGhoeGg357fn+AgIODg4KDg4OAe3VtanB4fn+AgICBgYB/fHl7f4F9dnR0c3B0eYKCgX9/f39/fX1+fn5+fn59fX19fn5+fn5+fn5+fn5+f39+fn5+fn5/f35+fn59fX19fX19fX19fX1+fn19fX19fX19fn5+fn5+fn5+fn5+fn59fX19fX19fH19fX19fX19fX19fX19fX19fX+BgX9/fnp4eX2AgIODgIB9e3x9fn5+fn9/fn59fHt7f4CAf39+fn5+e3p5e3x8fn5+f35+fn9/gICAgH9/f4GBhISEhIWEhISFh4iIhoSDf39+fn5/gYGBgICAgYOCgHx9gIGChIOBf35+gICBgYKBgYCAgIB/f4CAgIKDg4GBg4OBf4GCgICCgX55d3RycnqAfXZ0dHR1dHR0dW9rcnp/hIaFhYWHiIeGgn5+fn9/gYOEgoKDgoKAenFudHl9gICAgIGAf3x8eX2Cf3lzcnJxb3R5goKBf39/f39+fn5+fn5+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX59fX19fX5+fX19fX19fX1+fn5+fn5+fn5+fn5+fn19fX19fX18fX19fX19fX19fX19fX19fXx8fH+Bf39/f3t2eHx+goKBgYB9fH1+fn5+fX1+fn58fH2Af31+fn5+fXt8fHt8e31+fn5/gIB+fn5/f4CAgYGBgoGCg4KCg4ODhIWGh4eFhIOBgH9+f4GBgYGBgICBg4KAfn+AgYOGhoWCgH6AgIGBgoGBgICBgYCAgIB/gIODhISEg395e3x+fn+BgXt1cXFyeX96dXR0dHV1dnRubHR8fn6AhYaFhYeIiIeFgYCAf3+BgX9+gIKDg4J8dnN1en2AgICAgX9+fHx/gYB7dnNzc25udXqCgYCAf39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fX1+fn5+fX18fH19fX19fX5+f39/f39/f39/f39/fn5+fn5+fn5+fn5+fX1+fn19fX19fX19fX19fXx8fHx8fICAgIB/gH15eHp8f4KCgX99fHx+f399fX5+fnx9fn99fX5+fX18ent6ent8fH5+fn+BgX5+fX5+f4CBgYKCgoGBgIGBgoODhIaHhoaEhIOBgICBgoGBgYGAf4GCgX9/f4GChIaJiIWCgYCAgYGBgYGBgoKDhIF/f4CAgYGBgoOBe3d5fH1+gICCgHpwb3N6e3h1dHR1dXR0b2pxe35+fn6AhoaGhoeHhYOCgH+Af4B/fHl+gICCgn96dXd7fn+AgYGAf359foSAe3Zzc3VybGtzeIKBgIB/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn59fX5+fn59fX19fX19fX5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fn58fHx8fHx9fXx+f357enp7foCCgX17e3x/f35+fn5+fX5/fn19fn19fHt7e3p6fH9/f35+f4KCf359fn5/gIGBgoKCgYGAgICAgYOEhoeFhYSEg4SEhIKBgYGBgIB/gYKBf35/gYKEhYeHhoKBgICBgYGBgYGCg4SDgYCAgICBgYGChIOAfoCAgYOBgoSEf3Nwcnp7d3R0dHV1dXFrcnt9fn5+fn2AhoaGh4eFhISBf4B/f395dHl9gIKCgHx4eXx+f4CBgX9+f4GCgnx2c3Nzc3FrbXZ7gYGAgICAf39+fn5+fn59fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5/f359enp6eHl6fH5+f4B/enZ5fYKCgHt6e3x9f39+fX5+gH98fX1+e3p7fn58fHx9f39+fH1+f4GAfn5+fn9/gYGBgYGBgYGAgICAgYOEhISCg4ODhIaGhIKCgYGBgH+AgoGAfn+AgYKDhoaFg4GBf3+AgICAgYGEhYSBgoKDgYGBgYKDhYSEg4ODg4KDhoaBeHNzent3dXV0dHVybGx5fn5+fn5+foKHhYWGhoSAgH+Af39/gXpwc3h9gIKBfXp6fH+AgICAfoCBgX58eHVzcXJybWptd32BgYCAgIB/f35+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+f316eXl3d3h5fH5/f4B/fXp6fICBgHt6fH19fXx8fn5+fnt7e3p6e3x8fHx8fn5/fX18fX5+gH9+fn5+f3+AgYCAgH+AgYCAgICAgYKCgoCBgYOFhYWFg4OCgoCAf4CCgYB+f4CBgoOGhoWDgYCAgH9/f3+AgIOEg4KDg4OBgYGBgoOFhISEhIODgoOFhYJ9d3V5eXZ0dHR0dG9qcn1+fn5+fn5+goWEgoSEgoCAgIF/f3+Be3FwdHt/gX98e3t9f4CAgIB+gIF/fHh0cXFxcXJxc3h9gICAgICAgH9/fn5+fn9/fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fn59fX5+fn5+f39/f39/f39/gICAgH9/f39/f39/fn5+fn5+fn59fX19fn5+fn19fn5+fn5+fX5+fXl4eHZ3d3h5fH+BgICAf3p4fICBfHl7e3p6eX1/fn19enp4eXp6e3t8fH19gH99fH1/f4CAfn18fHx9f4CAf4CAgH9+fn5+fn9/gYGBgYGBgoOEhIODg4OBf36AgYOCgH+AgYKAgoaFhYOBgH9+f39/f4CAgYGBgIKEg4OCgoKChIWEhIWFhIODg4KCg4B6eHl5dXN0dXRyamx4fX5+fn5+fn6BhIGAgICBgICBgoCAf4F8c3FyeH1/f318fX+BgICAgH6AfHh4eHd1c3R5eHp/gYKCgICAgH5+f39+fn5+f39+fn19fn1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5/f39/f39/f3+AgICAf39/f39/f39+fn5+fn5+fn19fX1+fn5+fX1+fn5+fn59fn59eXh4dXNzdHZ4e3x+gIB/gH18fH19enh4enx+f35+fHx8e3p5eHh6e3x8fX5+fX19fn9/gIB+fXx8fHx9fn5/f35+fn1+fn5+f3+AgH9/f3+AgYKCgYKBgYCAgIGCg4KAf4CBgoGBg4aFg4GAf35/f39/gYGBgYSCgoSDg4KCgoKChISEhYWEg4ODgYGBf3l3eXh0c3Nzcm5pcnp9fn5+fn5+fn+BgH9/gISEgYGCgIB/gXtxcHF1en5+fXx9f4GAgICAfnx4d3l9gYB+foCBgoSEhYV/f35+fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5+fn19fn9/f39/fn5/f4CAgYF/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f398enp2dHFycnZ3eX1+gYCAf39+fHx7enp9gH9+fn58fHt4eHh5e3t7e3x9fX9+fX1+f35+gH9+fXx8fH18fHx9fn58fH19fX19fX5+fn5+foCAgICAgH9/gH+Ag4SEg4KAgYGCgoCBg4SDf35+fX5+fX+BgoOCg4OCgoSEgoKBgYODhISEhISEgoGAgIF+eHZ4d3Vzc3Nxa2t1fX9+fn5+fn5+fn1+foCEhoiEg4OBgIGBgHVvcXV3fH19fX+AgICAgH97eHV3e36ChIOBgoKEhIWFhn9/fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+f39/f3+AgH9/gIB/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3t6end0cXFxcnZ5fHx/gIB/f39+fHt6fH6AgH19fX17eXh3d3h7e3t7fHx+f359fX1+fn1/f359fHx7fHt7e3x8fHx8fHx9fXx8fX5+fn5+fn5/f39+fn6AgYKFhYSEhIOCgoKBfn6BhIOBgH59fn58fYGDg4SEhISEhISDg4SEg4OEhISEhISCgYCAf3l0cnh3dnRzc3Fqbnp+f35+fn5+fn5+f35/hYuIh4WDg4KBgYF+dnJzd3l8fX19f4CAgICAfnp4eXp/gIKBgoODhYWHiYqLfn59fX5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX1+fn5+fn5+fn5/f39/f39/f39/f39/f39/f39/fn5+fn5+fn5+fX19fX1+fn5+fn5+fn5+fn5+fn9/fHh2dXNycXFzdnt9fn58fn6AgIB7e3x+gIB/fXp5dnd5eXh4eXp7e3t8fH1+fn5+fH19fn5+fn17e3t7e3t6ent7e3t8fHx8e3x9fX19fn58fH19fn5+gIKEhYSFg4KBgoOEhIKAfoGDgoCAgH99fX9/gIGDg4KCg4ODg4KEhIOEhISEhISDg4KBgH97eHV1dXd3dXVzb2pven5+fn5+fn5+f39/foWNi4WFhoaDgoF/f4B+eXl7fH9/f39/f4CAgIB+e3l8foCBgYGCg4SEh4iJiot+fn19fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f39+fn5+fn5+fn59fX19fX5+fn5+fn5+fn5+fn5+f398eHZ0dHNycnR4e3x7e3p7e3x+fn9/f4B/fXx5eHd3d3h6eXl5ent7e3x8fX5+f398fHx+fn5+fXt7e3t7e3p6e3t7e3t7e3t7e3x8fX19fX19fX19fX2BhIaGhYOBgH+AgIKDhIKBg4aFg4OBgH9/f3+AgYKBgYGAgICAgYKDhISEhISDg4ODgoF+e3Z2dXV0dnZ2dXRwa3F6fX5+fn5+fn5/f35/h4mDgIKFhoOCgX9/gIGAgICBgYGAgICAgICAgH57e35/gIGCg4OFhIaGhoeKi35+fX19fX5+fn5+fn5+fn5+fn5+fn9/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fX19fX19fn5+f39/f3+AgICAf39/f39/f39+fn19fn5+fn5+fn59f35+fn5+fn5+fn5+fn5+fn5/f3x6d3d3dHNzdHp8fHx6e3t8fH18e32Af356eHZ3eHl6eXp6eXp7fX18fH19fn+Af359fX19fXx8enp6enp6enp6ent7e3t7e3t7e3t7e3t7e3x8fH9+gIKFhYSBf39+fn5+f3+BgYOEh4eGhYOCgoCAgIGBgoKBgH17fH1+fn+ChISDg4ODgoKBgH17eHV1dHV2d3d2c3FucXp9fn9/fX1/f4GDgIKFg39/gIGEhIODg4OCgoODhISDg4ODgoGBgH9/fXx9f4CBhIWHh4SEhISGiIqNfn59fX19fn5+fn5+fn5+fn5+fn5+f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+f399fX19fX1+fn5+f39/f4CAgIB/f39/f39/f35+fn5+fn5+fn5+fn1/fn5+fn5+fn5+fn5+fn5+fn9/fHp3eHd1dHR2eXx8fHp7e3x8fH5+gIB/fXt5dnd4eXp6eXh5ent7fH19fX1+f4CAf319fHt7e3t6enp6enp6enp6e3t7e3t7e3t7e3t7e3t7fHx8fn+AhIWDgX5+fn5+fn5/f4CAgIGDhISEg4KDgoODhISEhIOCf31+fX19f4KEhISEg4ODg4OBgH17eXV0dHR1dnZzb2xueH+BgYKEhYeHhoWDhYaFgoKCg4SEhISDg4KCg4OEhIODg4OCgYGAf39/f4KEhoeIiIeFg4GBg4aIio1+fn19fX19fX5+fn5+fn5+fn5+fn9/f39/f39/f39+fn5+fn5/f35+fn5+fn5+fn5+fn19fX19fX5+fn5+fn9/gICAgH9/f35+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f398e3h5eXh2d3l8fHx8fHx8fHx7fH6Af318fHp3eXp6eXl4eXl6e3x+fX19fX59foCAfX17e3t7e3x8enp6enp6enp7e3t7e3t8fHx8fHx8fHx8fHx9foCCgYB+fX19fn5+fn5+f3+AgIGBgICAgICBhIaHh4aHh4SCgYCAfn6BgoODg4ODg4ODg4OAgX9+end0c3R0b3Bvb3Z/hIWGhoaGhoaFhIWFhYWEhISEhYWGhoSDgoKCgoKCgoKDhIODgoKFhISHiIiJhoSCg4ODhIOGh4iKin5+fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn5+fn9/f39+fn5+fn5+fn5+fX19fX19fX5+fn5+f3+AgICAf39/fn5+fn59fX5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3x7eHh4eHh5e3t8fHx8fHx9fH6AgYB/enh4eXl6enp7e3t8enp6e319e3t7e3t7fH19fXt7e3x8fHx7e3p6enp6ent7e3t7e3x8fHx8fHx8fHx8fH19f4B/fn18fX1+fn5+fn5/f39/f4CAgICAgIGBgYKDhoeHh4aFhISCgoKBgICCgoKDg4ODg4KCgYB/fHp3dXN2d3p+f4KEhYaFhYWFhIODhYWFhYSEhISEhISEhoSEhIKCgYGBgYGDg4KFhomIiIiGhIOCgICBg4OEhIWGh4eHfn5+fn19fX1+fn5+fn5/f35+fn5+fn9/fn5+fn9/f39/f39/fn5+fn5+fn5+fn19fn5/f319fX1/fn5+fn5+fn5+fn5/f399fn5+fn19fn5+fn5+fn5+fn9/gIB+fn5+fn5+fn59fn59fX5+e3p5eHh3eXp7e3x8e3x8fHx9gIGBgH15dHR2d3t7e3x9fn18enp6enx7fHp6e3x8fX59fXt7ent7e3x8e3t7e3p7e3t7e3t7fH18fHx9fX1+fn19fX19fn9+fX19fX19fn5+fn5+fn5+fn5+gYGCgoODg4ODg4ODgoOCgYGBgICAgYKDg4ODg4ODhISCgoGAgH19foCAgYGChIOFhYWFhYSEg4OEhIKBf4CBgYKDg4SGhoWFgoGAf3+AgYODhYSEh4iIhoSFhYODg4ODg4OEhIWFhYV+fn5+fX19fX5+fn5+fn9/f39+fn5+f39+fn5+f39/f35+fn5+fn5+fn5+fn5+f39+fn5+fX19fX5+fn5+fn5+fn5+fn9/f31+fn19fX1+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn19fn59fHp5eXl5eXt7fHx7fHx7fX+CgoGAf3t2dHR3e3x8fn5+fXt6enp6e3l6ent6fHx7fX19fHt6e3t7fHx7e3t7ent7e3x8fHx9fXx8fH19fX19fn59fX1+fn19fX19fX1+fn5+fn5+fn5+fn5/f4GBgoKDg4ODg4OAgIGAfn5/f3+AgYKCg4ODg4OEhIODhIKBgYKDgoKDg4SFh4iHh4eHhIKAf399fHp+fn+AgoKEhYaGhYWDgoGAgICAgoGDg4OFh4qKhoWFg4ODgoKCgoODhISFhX5+fn59fX19fX9+fn9/f39/f35+fn1+fn5+fn5/f39/fn5+fn5+f39/f39/f39/f35+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9+fX19fn17eXl6eXl5enp8fHx7e3x+goKBf399end1dXZ6fH17fX18e3h4eHl5enh5e3t8fHx8fHx6enp7e3t8fHt7e3t7fHx9fX19fX19fHx9fX19fn5+fn5+fn5+fn19fX19fX19fn5+fn5+fn5+fn5+f3+AgIGDgoODg4GBgH9+fn9/f39/gIGCg4SEhISEhISFhYODhIWEhYaGh4iHhoWEgYB+e3p6eXl8f4CCg4SEh4eHh4eGhoSDgYCBgoGBgoKDg4OEiIqJhYSCgYGAgICAgYGDg4KCfn5+fn19fX19f35+f39+fn5+fn5+fX5+fn5+fn9/f39+fn5+fn5/f39/f39/f39/fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f359fX1+fXt5eXp5eXp6ent7e3t8foGCgoB/fnx6d3V1dXh7e3t7e3t6eHh4eXl6ent5eXp6e3t7e3p6ent7e3x8e3t7e3t8fH19fX19fX18fX19fX1+fn5+fn5+fn5+fn59fX19fX18fH5+fn5+fn5+fn5/f4CAgIGBgYGBgYCAf4CAf39/f3+AgYKDg4SEhISEhIWFhYWEhYWGh4eIiYaDgX+BgoGBgH17fIGFhoiIiYmHhoaGhoaGhYSCgYGBgYKCgoODgoOGh4mFgX+AgICAgICBgYGBgYF+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5/f35+fn5/f39/fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+f39/f39/f39/f39/f35+fn9/f358ent7enp6enp7e3p6fH+CgoB+e3p6fHp3dXZ2dnl8fHx9fHl5dnZ3eHp6e3p6enp7e3t7e3p7e3p6fHx8fHt7e3x9fn19f39+fn19fX19fX5+fn5+fn5+f4CAgH9+fX19fX5+fn59fX19fX1+fn5+fn6AgICAgICBgYCAgICAgICAgICBgYKCg4WFhISFhYWGhISDg4SEhISEhYWEhISEg4ODg4GEhYaHh4aFhYKBg4WGhYWHhoSBf36BgYKCg4ODhIWFh4aDgIGAf4CBgYCAgIB/f35+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn9/fn5+fn9/f39+fn19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5/f39/f39/f39/f39/fn5+f4CBf3x6e3t8e3p6ent8fH6BgoODgX98fHt7eXh2cXJ2fH18fHx7eXl3d3d3enp8e3p6ent7e3t7e3p5enp7e3x8e3t7fHt8fHx+fn5+fX19fX19fn5+fn5+fn5/gICAgH5+fn5+fn5+fn19fX19fX5+fn5+fn+AgICAgICAgICAgICAgICAgIGBgoKDhYSFhYWFhYaGhYWEg4SEhYWGhoWFhYWEhISEhISEhYSEhIODgH+BhIaGhoeIh4WCgYGBgoKDg4ODhIWHh4WDgIB/f39/f39/f39/fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fX1+fn59fX5/gIB/fXx7e359fHt6e3t+goODg4F/fHp5enp5d3Z0cXd8fnx8enh3eXd3dXd4eXt7enp5e3t7e3t7e3p6e3p6e3t9fX1+fHt9fX19fX19fX19fn5+fn5+fn5+fn+AgIKBgYGAf39+fn5+fX19fX19fX19fX5/fn5/f39/fn5/f39/gYF/f4CAgYGCgoOEhYWHh4WFhYWGh4WDhYWFhoeGh4eHh4aGhoaEhYSEg4OEhIKBgICBgoSGh4iIhoWDgICCgoODgoKDhIWGh4WDgH9/f39/f35+fn59fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f35+fn5/f35+fn19fX5/f359fHt7e3p8fHt8f4OEhIGAfHp7e3p5eXl4dnFwdnx9e3l2dnd5eHh1dXV4enp6enl6ent7e3t7enp7e3t7e3t7fH18e3x8fHx8fH19fn5+fn5+fn5+fn5+f4CAgoKCgoF/f35+fn59fX19fX19fX19fn5+fn5+fn5/f35+f39/f39/gICBgYKCgYODg4OEhYWFhYaHh4aFhYOFhoeIiIiIiImJiIeFg4OCgoODgYCAgICBg4SFh4mHhYOCgoKCg4ODg4KDhIWGhYWCgH9/f39/f39/f319fX19fX5+f39+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn9/gICAgH9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5/f39/fn5+fn9/fn5+fnx+f39/fnx8fHt7e3t7en2Bg4WDf318fX9/fHt6eHdzcG90eHt6eXZ2dnd3eHl5eHd4eHl6enl7e3t7e3t7fHx9fX18fHx9fX19fX18fH19fX1+fn5+fn5+fn5+fn5/f4CBg4KCgYB/fn5+fH19fH19fX5+fX19fX19fHx+fn5+fn59fX9/f39/f4CAgICAgIKCgoKDhYWGhoeHh4aFhISEhoiJiYmJiYuKhoWDgoCAgICAf35+fn+ChYaIiYeFg4KCgoKDg4KCgoODhISFhYSCgX9+fn+AgICAfX19fX19fn59fX5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+f39/f35+f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+f39/f39+fn5+f39+fn5+fn+AgIB+fH59e3t7e3x9f4KCgH58fH6AgYF/fHl3dXFubnJ2eXl5dnZ2dXd5e3t7eXd3eXp6eXt7e3t7e3t8fH19fXx8fHt7e3t8fH19fn59fX5+fn5+fn5+fn5+fn9/f4CAgoKBgH9+fn9+fX18fX19fHx9fX19fX1+fn5+fn5+fn9/f39/f39/gICAgICAgYGBgYGChIWFhoeHh4aEhISFhoeHh4iIh4WCgYB/f39/f399fn5+f4GEhYaGiIaEg4OEhIODgoKCgoKDg4SFhYWEgoF/f4CAgIB9fX19fX1+fn5+fn5+fn5+f39/f39/f39/f35+f399fX5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fHx9fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn9/f39+f4CAgIB/f35+f39/f35+fn5/gH9/gH9/fXx7ent6fX+BgH99e3x8foGCgoB9eXh3dHJwcXV5eXh3dXV3eXt9fXx8enl5eXp4enp6fHx7fH19fX18fHx8e3t7e3p6e3t9fX19fH5+fn19fX19fX5+f39/f3+AgYKBgH9+fn59fX19fX19fXx9fX19fX19fn5+fn9/fn5/f39/f39/f39/foCAgICAgICCg4WGhYeHh4WFhISEhYeGhYSBgH9+fn5+fn19fn5+fn9/gYKDhYaIhoWEhISEg4GCgoKCgoGChISFhYeFhIKAgICAgH19fX19fX5+fn5+fn5+fn5/f39/f39/f39/fn5/f39/fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn9+fH1+fn5+fn5+fn5+fn5+fn5+fn5/f35+f39/f39/gICAgH9/fn5/f39/fn5+fn+AgYGAgIB+fHt6e36AgH9+fXx7fHx+gYKCf356eXh1c3Bwc3V4eHd3dnd5e3x9fHx6e3l5eXd4eXl6ent8fX19fXt7e3x8fHx8e3t7e3t7e3t7fHx8fX19fX19fn5/f39/f4CBgoKBgH9+fn19fX19fX19fH19fX19fX19fX5+f39+fn9/f39/f39/f39+gICAgICAgICAgoSFhYaGhYWEhIOEhoaEgoGAfn1+fn19fX1+fn5+f39/gYOEhYeGhYSEhISDgYKCgoGBgYCBg4OEhoiIg4GAgICAfX19fX19fn5+fn5+fn5/f39/fn5+fn5+fn5+fn9/f39/f39/fn5+fn9/fn1+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f4CAgICAgIGBgIB/f39/fn5+fn5+f4CBgYGBgH98e3t+gIKDgn98e3t7fH2AgYKAfn15d3dzb29xc3V3eHZ3eHh5eXx8e3x8enl5eHd3eHl5eXp7e319e3t6fHt7e3t6enp6enp5eXp6e3t7fHx8fX1+fn5+fn9+f4KDgoKBgH59fX19fX19fX19fX19fX18fH19fn5+foCAf3+AgICAgICAgICAf39/f39/f39/gYSEhYeGhYeGhoaGhYWFgoB/f319fn59fXx9fX5/f3+Ag4SFhYaGhIODg4OEgoKBgYGAgIGChISGiYiGg4CAf399fX19fX1+fn5+fn5+fn9/f39+fn5+fn5+fn5+f39/f39/f39+fn5+f39+fX5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gICAgICAgYGAgH9/f39+fn9+fn5+f4CAgICAf3x7fH+DgoCAf3t7e3x9foCCg4KAfnp5eHRwb3BvcXN1dnl6enl5e3t7fHx6enp4d3d4eXl5ent7fHx8fHx7e3t7e3p6enl5eXp6enp7e3t8fHx9fX19fn5+fn5/gIKCg4KBgH59fX19fX19fX19fX19fX5+fn5+fn5+fn5/f4CAgICAgICAgIB/f39/f39/f35/gYKDhYSFhoaHhoaFhYWEg4F/fX19fXx8fH19fn9/f4CBg4WEhoaGhYSEhIF/gYGBgYCAf4GChIaHioeEgYB/f35+fn5+fn5+fn5+fn5+f39+fn9/fn1+fn5+fn5/f39/fn5/f35+f39/f35+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f3+AgH9/gICAgICAgIB+fn5+f35+fX1/f4CAgIB+fH1/g4OAf358e3x8fXx+gIKEg4N/fnt4dXJxcG9ub3Fzdnd6eXp5en19fX17e3p5eXl5eXp6eXp8fHx8fHx6ent6eXl6eXh4enp6enp6fHx8fHx8fHx9fX5+fn5/gIGCgoGAf359fX19fXx8fHx8fH19fX19fX5+fn5/f39/f39/f4CAgIB+fn9/f39/f39/fn5/gYGDhIOFhoeHh4WFhYWFg4B+fXt6e3t8fHx+fn5+f4GCgoSFhYWFhYWDgoB+foGCgYGAgYKDg4WIiIWCgYGBfn5+fn5+fn5+fn5+fn5/f31+f39+fX5+fn5+fn9/f39/f39/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f4CAf3+AgICAgICAgICAf35/f359fX+AgoKCgH59f4KDgn9+fHt7fHx9fH6AgYKCgoB+e3Z0cm9ub25ucHJzdnl6fHp4eXl7e3t7enp6eXl5eXl5enx8fHx8fHx8e3p5eXl4eXl5eXp6fHx8fHx8fHx8fHt8fHx9fn5+gIGBgYKAgH59fX19fHx8fHx8fX19fX19fn5+fn9/f39/f39/fn5+fn5+f39/f39/f39+fn5+f4GCgoOFh4eHhYWFhYWEgoB+fHt7e3x8fH5+fn5/gIKCg4WFhYWFhYOCgH18foCBgYCBgoODhYiIhoOBgoJrbG1ub29vbm9vb3J0dXZ2d3h6enp6d3VycHFxcHBwcHFxcnNzdXh5enp5eXl5fHx9fX5/gICAgICAgICAgH9/f31+fn19fX19fX19e3t8fHx8fHx8fHx8fHx9fX5+fn+AgYKDhISFhYWFhoaFhYaGhIOCfHNqZF5bXV9hZGFfXVteY2VoaGVgYGJnbHN6gISFhYSEgXtxZl1ZWF1ianR6foF/e3VycHBtaWZhYWRna25wcXV5eoCBgICAgIB/f398d3BtampqampqamtrbnFxdHV1dXV1dnZ1d3Z3eXh1cGZbWFRWW15jaG95gIGBgYGCgoOBgIB+fnx4dnRvbWpnZ2NkZmdnaGZoamptcHJ0dHR0dHNycnFwb3F1dHV1enx/f3p2cGxoYmJkY2FcWl1ka250dHNycnN1d3p+goOFgm1vb3BwcG9yc3N0dHV2d3d4enp6enh2dHJwcXFwcHBwcXFyc3V2dnh6enp6enp7e3x8e31+fn9/gICAgH9/f39/fX5+fX19fX19fX19fXx8fXx+fXx8fHx8fH19fn5+f4GCgoOEhIWFhYWGhoeHhoaEg313cGdjX15eYGJiXVpZWFtfZGdoZmNgYWNmbXV+goWFhISCe3NpX1xaW2JocHd9fXt3dHJwbW5pZmNiYmVqbXBwcXN2e3+AgH9/f4B8enVwa2loaGhoaGhpa2xub3J0dXV1dXV2dnV3dnd5eHVwZ11WVVdcXmNncHd/gYGBgYCAgX+AgH5+e3d0b2xqaWhnZWVnaWlpampram1wcnR0dHRzcnBwcXBvcXNycHN3e3x8eXRxbWhkY2NiYFxaXWRsc3V1c3Jyc3V3en6EhoiFbW9xcXNzcnN0dXR1dnd4eHl7e3t5d3VzcXBwcHBwcXFzc3NzdHV1d3l5eXt9fXx8fHx9fX1+f39/f39/f31+fn9/fn58fH5+fn59fXx8fX1+fn5/fXx9fX5+fn5+fn9/gYKDg4SEhYWFhYeHhoaGhIOCfXZtZ2BdXmBjZGFeW1hWWV1mbW9qZWFgYGVtdHuCg4WFhYOAdm1mY2FhZGhvdHt5dXNxbm1uamlpaGVkZWhweX+GhHp3en6AgH9/fXt3cm5qaGhoamppaWlqbG5vc3Z3dnZ2dnd3d3d3eHh5dXBnXVdVVlpeZGhwd31/f4CAgICAgICAf3x6dHJvamdoaGdnaGhqampra2xubnBzdHN1dXJvcHBwb3BycnFydHh6fHx3c3FrZ2VjY2FfW11hZWxzdXRzc3R1dnh5fYSIiYdub25wcnJxcnR1dnd4eXp6e3x7e3l2dnNxcHBwcHBycnNzdXV1d3d4eXl5e3t7fHx8fH19fX5/f39/f39/fX5+f39+fn9/fn5+fn5+fX1+fn5/f399fH19fn5+fn9/f3+AgYKDhISFhYaGh4eGhoaEg4J/d25jXl9fZGRkYmBZVFRbZXB1dm5lYWFiZmtxd3+DhYWFhIF7c21nYmJlaWxvc3Rwbm1sbGxsbW1raWdnbHd/g4WCeW5xeYCCgH96dnFraWhqaWlra2pqamttb3FydHZ3d3d3d3d3d3d4eXp4c2pgWFRXW2BjZ251fH9/f3+AgH9/fnx5dXJubGloaGhoZmZna21tbW5vbmxscHN2dHNzcm9vb29tb3Fwb3J0eHp7eXZybGhjYWBhZGFhY2RobnN0cnFxdHV1d3p/homJiG5ubW5wcXN0dXV1dnd4e3x/f3x7eXd2dXJxcXFwcHFycnR0dnh4eHh4eHp6e3t5e319fX19fn5/f39/f35+fn5/f35+fX1+fn9/fn5/f4CAgYGAgH9/fn5+fn5/gICAgIGBgoKDg4SEh4eHh4WFhYWFgn55b2hmYmVmZmNeXFdVV2Ftdnx7cmtjYWBjaG51e4GEhIWEgn12cmplZWZpa29wb29tbGxra25vbm5qaWpvdn2CgX94cXF3foF/fHdybmtoaGlpa2tsa2lpa25vcXJ1dnh4eHh4eHh2eHh5eXl1a2JaV1ZaYGNobXN8fn9/f3+Afn98eHNuamloZ2hlZWZnaWpub29vb25samtwc3NzdXVyb29tbnBwb21tcHR4eHp4c3BtaWRhX2FlYmFlam5zdXVycHF0dXd3eX2GioqKbm5ub3BxdHV1dnd4ent9fn19e3p4dnV0cnFxcXJycnN1dnd4eHh4eHl5enp6enl7fX19fX19fn9/f39/fn5+fn9/fn5+fn5+f39/gH9/gICBgYCAgIB/f39/foCAgIGBgYGCgoKDg4SFhYaGhYWFhYWCgHpzbGhkY2RlY2BeWlheaXZ8f353cGljYGBka3J5f4KEhYWEgHlya2RiZWhqbG5vbmxsbGxscHBwcG5vcnN4f4F/end0b252fHx2cnBraGpsbW9vcG5raWpscHB0dXh5eXl4eHh4eXh5eXp7eXRsY1pXWV1fYmdsc3l+f39/f315d3NvbmxpZ2dmZGRlZmlrbG5vb29vbGlqbXBzc3Nzc3JvbWxucHBvbW1ydXh4dXNwbWtmYmFiZWVmaW1wdXh2c3FwcXR2dnR1eYWKiopqbG5vcHFzdXZ4eHp6fX5+f317enh2dXRzc3FxcXFycnN1dXd4eHl5eXp7e3l5enx9fXx8fH1+fn9/f39+fn5+f39/f39/gH5/f4CAgICBgYGBgYGBgH9/f3+AgYCAgYGBgYODgoODhISEhYWFhYaEhYOBenRuaGVjY2FgXl1cXWZye3+DgHp1a2ViXmJnbXN7gIOEhYOBfHVubGdkZmpramlpa2trbW9ydHRydHV2eHt8eHFtbXBwaWp0dXNuamprbG1vcHJzcGtoaWttb3N3eHl4eHh4eXl5eXp6ent6dW5mX1paXF9iZ2xxd3p7fXx6d3Jva2lnZWVjYmJkZWdpbW9wcXBvbm1samhsb3J0c3Jzcm9ubG5wcW5tbnF0dXRycW5ua2dkYWJmZmtwc3Z4endycHFzdXZ0c3R4hImLi2psbm9wcXN1dnl6fH5+fn59fHt6eHZ1dHNzcXFxcXJydXZ3eHh4eXl5ent7e3t6fH19fHx8fX1+f39/f35+fn5/f4CAgIB/gIGBgICAgIGBgYGBgYGAf4CAgICBgICBgYGBgoKCgoODhISFhYWFhIODgn54cmxmYmBgYmFgXl9kcHl9gYOAe3ZybGRhYGZrcXl/g4SFg4F+eHFuaWdpa2poaWtsbGxucXR2dXR0eHl5eXp2b25wcm9rampubmlpbG9xb25ydHRwa2hpa21vc3d5enp6eXl5eXl5enp6e3p2bmZhXltdX2Jnam93ent6dnNxbWlnZ2VjYmNlZWVmaWxub3FzcG9ubWpoaGtwc3RzcnNzcG5sbnByb21ub3Bwbmxra2toZGNkZWhrcnd7fn57dXNyc3R1d3RzcnaAh4eIbW1vcG9wcXd4e319f39/fn19e3l2dXRzcXFxcXBwcXN0dXZ4eXp6ent7enp6ent7fX15enx9fH1+fn9/fX1+foCAgICAgICAf3+AgYCAgYGBgYKCgYCBgYGBgYGBgYGBgYGBgYGCgoODhISEhISDg4OBe3RuaWVgXF1gYF5eY2t2fYKCg4OAfHVtZ2FgYmdwdnyBhISEgn18d3FsamdrbGloa25tbnBydXZ2d3Z8fnp3d3d3eHp2a2hpaW5zb29xdnl0bW5xcnBraWlqbXByd3l6eXl5eHl5eXl6enp6eXhvaGRgXl5hY2ZrcHN4eXRybmxoZ2RkYl9hYmRmZ2ltbXFxcnJwbW1uamlpbHJ2dXV0dHNwbmxtb3Bta2tra2ppamhmZWNiYmVna291e36Afnh0c3J0dnh3dHFwdXyDhoZtbW1vb3Byd3l8f39/f39+fX17eXZ1dHNzc3JycnJzdHR1dnh5enp7enp7e3x8e3t5eXp8fH19fn5+f39/f4CAgICAgICAgIB/f4CBgICBgYGBgoKBgIGBgYGBgYGBgYGBgYGBgYKCg4ODhISEg4ODgX14cWplX11dXl9fYGNpcnuAgoKDg4J/eHFrZWJhZ210en+ChISDgX55cm1qZ2doa2pra21ucnR3eXp6e3+AeXN1en59dnFvaWVlaW9zdXuCgXt0cXJycGtpaWpsb3J3e3x8fHp6enp7e3t7enp6eHJrZGBeXmFjZmhscHNzcGtqZmRjYmJkZWRmaGlrbW5ubm5wcG5sa2xsa2pucnZ1dXR0c3BubG5xcGtoZ2ZmZmVkZWRjY2JiZWhscnh9f317d3NwcnR2d3VycXByeoGFhWxsbm9vcnV3e35+fn9/fn58fHt5dnZ1c3JycXFwcXFzdXZ2d3d6enp6enp6enp6ent7e3x9fn1+fn9+fn+AgICBgYCAgICAgIGBgYGCgoKCgoKCgoKCgYGCgoKCgYCAgIGBgYGBgoKDg4ODg4OEgoB9eHJtZ2NgYF9gYGBhZm54gYKDg4ODg4B8dm5oYGBjaG91fIKDg4OBf3lzbmpmZWhqamtscHN1eHp6fHp8fX52cXh/fnl2dG9sa2ppam5weHt3cXB2d3Vwa2doa21wcnd8fXx8e3t7enx8e3t8e3t4cmtkYWBgYmNlZ2pucG9pZ2VnZGJhYmJjZ2loam5vb25tbm9vbW5ub21ra29zdXV1dXVzcG1tb3BvaWNiZWVhYGFkY2RlZWZmaG1yeX18e3p1cXFzc3V1cnFxcHB4f4KCbGxsbnF0dnh7e319f39+fnt7end2dXRycnJxcXFyc3R1dnd4eHp6enp6enp7e3p6e3p6e3x9fX59f4CAf4CAgIGBgICAgICAgYGBgYCAgoKCgoKBgoKBgYKCgoKBgICAgYGBgYGCgoODg4ODhYR/e3ZybWhkYl9cWmBgYmVrcnuBgoODg4ODgH54cmxjX2JmbHJ6gIODg4F+eHRuamZlaGpqa2xxdHl7fHt6eHZ2dnZ3fYKBgHx4c3Fwb29ucHR7eHRzeH19eXRsaGhrbG9yd3x9fHx8fHt7enp7e3l5eHZwbGdjYGBhZGdoaWtqamhiYWNkZGNlZ2ZnaWprbm9vbm5vcXFwbm5vbmxtcXR2dnZ3dnVycG9wcm1nYWFiYmBfYGFiY2NjZGdobXJ5fXx6eHRxcnNzdXR0c3JxcXR7gYFrbW1vcXN3eHl6e3x+fn58enl4d3Z1dHJxcXJyc3R1dnV2eHh3eHh4e3t6fHp6e3t7e3x8fX1+fn9/f39/gICAgICAgICAgICBgYGBgYGBgIKCgoKCgoKCgoKCgoGBgICBgYKCgoKCgoODg4GDgHt1cGxnZWNgXl1dX19iZ3F6gIODg4OCg4OCgXt2b2ZgYmVrcXd9gYKCgYB4dnFqZmRmaGprbXR4fXx9foKBe3Z2dXZ8gYJ8enl5e3Z0dnN0d3x3cXR8fn14cmxoaGpsb3F2fH19fX17fHx8enl3d3d2dHNvamVhYGBjaWpqZ2dnZWNhY2RkaWhpamtra2xub25tbW1wbW1wcnJvbm5ydXZ0dHZ2c3Bub3BwbGZgYWFeXl9fYWJjY2VoaGpuc3h8e3h2cnByc3R2dHFycnFxc3l/fmxubW9ydXd4eXp7fH19e3p5eHh3dXR0cXFxcXFxcnNzdnd4eHl5enp5eXl6enp8fHx8fHx9fX5+f39/f3+AgICAgICAgICAgIGBgYGBgYGBgoKCgoKCgoKCgoKCgYGBgYGBgoKCgoKCg4ODgX97dm9qZmVlY2BfX2BjZWludnyAg4ODg4ODgoF+fHZvZ2FgZGhudXuBgoKBfXt1cW5oZmdoa2twdnp6foCCh4qDfn9+fn9+fHh2c3Nxb3BxcnV4enh1dn1+fXhybGhoam5wdHl8fX19fn19fXx6eXd2dXRzcG1pZGJhYWRlZmVkZ2dlYmNlZ2dqamtqamppa25vbm1sbGxsbHBycnBvb3N2eHV1dnZ0cW5vcHBrZWJiYV5eXF9hZGVmaWpqa29zeXt6eHZycHJzdHZ0cW9vcHBxd3p5bW1tb3R1dnh4ent7fHx9e3h3d3Z2dXNycHBxcXJzc3R4eHh4eXl6enp6enp6ent7e3t8fH5+fX9/f39/f4CAgIGBgX+AgICAgYGBgX9/gIGDg4KCgoKCgoGBgYGCgoKCgoKDg4ODg4OCgoKBfXdxbGllZWVjYmFiZWZoa3N7gIKDg4ODg4OCgoB9dm9oYmFhZ2xyen6BgX98d3RwbWlmZWdrbHF2ent/gYKGhX95dHJ1dnd0cnFta25vb3N1dXh6eXZ3foF+eHFva2lrbG5xdnt9fn5+fn58e3l3dXNzdHRxbmhlYmJiZWZmZ2dnZ2hoZ2dqa2psbWppamtrbm1tbGxubW5vcG9xcm9ydHZ0dHJ1dnRxbW5xb2tjYGBjY2JhYWNkZWZpamxtcXR4enl3dHFxcnV1dnNxcHBwcHB1dXRtbm9xc3R0dXd4enp6enp5d3d1dXRzcnFxcXFxcnJzdHd3eHh5eXl6enp7e3p6e3t7e319fn59f39/f39/gICAgYGBf4CAgICBgYGBgYGBgYKCgoKCgoKCgYGBgYKCgoKCgoODg4ODg4KCgoF8d3BsaWZlZWVlZWZnaGxxeH6AgoODg4ODg4KCg396c21oYmNma3B3fX9/fHl0cnBua2hlaGxwcHR4e3+ChIJ9d3NxbW5wcXBwbm1tbXB1eXt6eXp3dnp/gX54cW1paWtucHJ3e31+fn5+fHt6eHZzdHNzcm9saGdjYWFkZ2doaGhoaWlqam1ubW5ua2ppampra2tqbG1ubWxwcnNzc3R3d3V0dXZ3dHFvcHFva2ZiYmRkZGJiZWZoamppam5ydnl5eHVycXFydXd0cG5wcHBwb3FxcG5vcXFycXJzd3h5eXl4eHh2dnV0c3JxcHBwcHFzc3R0dXZ3d3d4eXp7e3t7fX1+fn9/fn5+fn9/f39+fn+AgICAgIGBgICAgIGBgoKCgoGBgYGCgoGBgoKBgYGBgoKDg4ODg4ODg4ODg4OBf313cGpoaGdoaGhpaWtscHd/gIKDg4ODg4ODg4KBfnt1b2pmY2VpcHR7fXx6dnBwcHBtaWZnam5vc3d6foCBfnp1cHBubW5vb25ubm1wdXh7gH97eHV1fIGBfnhwa2lpa250dXl8fn5+fn18enh2dnR1dHNybWppamZiYmRoa2xtbGpsbG5vcXJycG5samVnZ2lqa2tubW1ubnBydHR0d3l6d3R1dnZ0cG9wcW9sZmRkZWRkY2JkaGpsbGxrb3N4eHh2cnFwcHN2eHdzcG5wb25ubm9vbm9xcXJyc3R1d3h4eXh3d3V1c3NycXFwcHBwcXNzdHR1dnZ3eHl5ent7e3t7e319fn5+fn5+f39/f35+f4CAgICAgYGAgICAgYGCgoKCgYGBgYKCgYGBgYGBgYGCgoODg4ODg4ODg4ODg4F+eXNuamlpa2xsbG1tbW90en+AgoODg4ODg4ODgoGBfHZwa2ZjZWltc3d6eXd0cXBwb21rZ2RnbG9xdXp+f4OBfnhzb21vcXBtbW1vb3F3e3+DhYF7d3Z6gIF+eHBsamtsb3J3enx+fn59fHt5eHZ2dHV0c3BvbGtoZ2NkaG1wdHV0cXBxcnNydHRxbWtqaGhoaWppaWdpa2xucHJzdXZ5enh1dHV2dXNvb3Bxb2xmZmZkY2JiYmRoam1tbmxwc3Z4dnVycXBwc3Z4d3Rxb25tbGtrbm5wcHFxcnNzdXZ3d3Z3d3d3dnV0dHNycnFxcXFycnN0dHV2d3h5enl6fHx6e3t6e3t8fHx9fn5/fX59f39/gH9/gYGBgYCAgICBgYGBgH+BgYGBgoKBgYGBgYGBgYODg4OCgoKCg4ODgoKAgHt0bmppamtub3BvcG9ucnZ8goODg4ODg4ODg4ODgoJ+eXJtaGRkZ2xvdXd3dnNxb29tbGtpZWhrbm9zd32AgH98dnJwbGtqZmdrbG5xdXuAg4SGg3t2dXp/gX53cGtrbG1vcXZ7fX6AgH59e3p6eXd1dHJxb25ramhnZ2hvdHd7enh2dHJzdnd3dnNubGlqampoaWlpZ2dqbG5xc3N2dnh5eXVzdHZ1cW9vcnJwbGVkYmNiYWJjZWhrbm5tbW9zdnd1dHJxb3Fzdnd3dHFvbWtqampsbXBwb29xcnJ0dnd3dnZ2c3N0dHNzc3JycXFxcXJyc3R0dXV2d3h5eXp5eXp5eHV1dXNzdXh8fHt6enl6enx9foCAgH9/gICAgICAgIB/gIGBgYGCgoGBgYGBgYGBg4ODg4KCgoKDg4OCg4F+d3BqaWhpbG9wcnFxcG5yd3yCg4ODg4ODg4ODg4OCgoB6dW9pZWNla29yc3RzcXBvb21ubGpmZWlucHF3fX59fHt4c3BsamhoaWtub3N5f4KFhIaFfXZyd32Bfndwa2tsbW9xd3x+f35+fn19fHp5eHZ0c3Bvb2xqaWhpbnV8gH9/fXp2dHZ4enp2c3BtbGhnZ2hpaWlramptbnFzc3R2ent5dXN0dndycG9ycnBnZGRiYGBgYWNlaGtub25tcHN3dXRzcHByc3R1dnZ0cW9ta2poaGtsbm9vb29wcXN1dnd1dHR1dXV1dHRzc3JycXFycnNzdHR1dnZ3eHl5e3x5d3Ryb2tqaGlscHd3dXNycHFycnV4fH5/f3+AgH9/gIB+f4CAgYGBgYGBgYGBgYCCgoKDg4ODg4ODg4ODg4ODf3pzbGhnaGprb29vb29vcXV8gIKCg4ODg4ODg4ODg4KCgHx2cWpkYWRpbW9wcXFwcHBwbnBva2hnaW5wcHR6fn1+fHh1cW1qaWlpbW5yd32Cg4WGhoeDenZ3f4J/d3Bra2prb3F2fX+AgIB/fn18enl4dnVxcG5vbGpoaGt0e4CChIGAe3d2d3t8enh0cG5samloaWlnaWlpbGxub3FzdXh5fHl1dHV3dnJycnNzbWVgYmJhYV9gY2Zoa25ubm5xdXZ0cnFxcXN0dXZ4d3RvbWxqaWhoamtub3BwcHJzdHV2dXR0dHV1dXVzc3FxcnJycnNzc3R0dXZ2d3d4eXl7e3h1cWxqaWhmZWZqbm1pZmNiZGVobG9zd3p8fn5+f39/f4CBgICBgYGBgYGBgYGBgIKCgoODg4ODg4ODhIODgn15cWpnZWNjZGltcHBwb3Byd3yAgoKDg4ODg4ODg4ODgoKBfnhya2VjY2VpbG1wcHBxcXFxcnJtaGZpbHBxc3h8fX17d3RxbWxqampucnd8gIKFhoaGh4V9dXZ9f3x2cGxsbG1vcXZ9f4CAgH9+fn17enh3dnJxb3Bta2pqbnZ+goSEg4F9eXl7fHx5d3VycW5saWhmZmZnaGhqbHBxcXFydnt7eXV3eHd2cnJyc3NtZWBhYGBgYGFkZ2lsbm5rbHF1dnRxcHBxc3R0dXZ2cW5vbWxqaGhqa2tsbm9wcXFxc3Nzc3R0c3NycnJycnJycnNzc3NzdHN0dXZ2dnh5ent5eHZybWxqaWdlY2JjY2JiYmJgYWRlZWhvdXt9f359fX5+f39/f4CAgYGAgIGBgYGBgYKCgoKCgoODg4ODgoB8eHNtZmNgYGBgZm9xcnFwcXd8f4GDg4ODg4ODg4ODg4ODg4J/eHJuZmFjZmtqamttb3Byc3N0c3BqZ2hrbnBxdHp8e3l0cHFsa2tsbXF3e36BgoSFhoaGhnt0dXyAfndwbGxrbG5yeH1+f35+f399fHx6eHZ1c3FvcW9tbGxxd32Bg4SBgH17ent6eXh3dHJwbWppZ2ZmaWloZ2lqbnBxcnN3e3x6dnV4d3VycnJycWlhXl9dXmBiZGZoa21ubWxtcnN1dHRycHJ0dHR1d3dybm1ta2lmZWhra2xtbnBxcXFzc3NzcnJzc3JycnJycnJycnNzc3R0dnZ2dnZ3eHl6e3l4dnJubWtqaGZkY2JjZGJhYWJkZGRjY2ZscXd7fX1+fn5/f39/gICAgICAgYGBgYGBgoKCgoKCg4OCgoF+enVwa2hkX11cYGVrcHNycXJ0en+BgoODg4ODg4ODg4ODg4ODgn97dW9qZWFjZWhqa21vcHN1eHh2c2xpaGpub3F0eHl4c25sbGpra21xdnp+gIKEhIWGhoaGgXdzdXl7dW9ra2tsb3N3fH5/gIB/f4B/fHt6eHZ0cnBxb21sa3F3en2AgX98eXV1dXN0c3JwcG9saGdmaGppaWloaGttb3Bxc3d6eXdzdHZ3dXFxcnJvaGBdX11eYGNlZ2lsb25tbG1xcnJxcXFxc3Z3dXd5eHRvbGxraWVkZmhtbnFxcHBxcXJzdHR0dHNzcnJzcnJycnJyc3R0dXV1dXd3eXl4eXp7e3t4dXJycnJuamdnZ2ZjZmZmZmZkZWJhYGNqdHh6fHx9fn5+f3+AgICAgICBgYGBgYGCgoODg4ODg4OBfXdxbGViX11bXF5ibG5xc3J0d3p/gIODhISEhISEhIODg4ODg4OCgX53cWtlY2VnZ2lqbXBxc3h7e3l2b2poaG9wcHN1dXJta2tqa2xsbnF4f4KDg4OFhYWFh4aEfHNyd3h1cGxqa2xucnd8gICBgYB/fn19fXx6eXZ0c3Jxb25ucXN2eXp8endwcHFta2tta21ta2lmZGNlaWlpaGdnZ2pvcHBzd3p8enZ0dXV0cnJzcm5lXlxcW2BiY2Voa29xbmtpbHBxc3JwcHBzdXR0dXh4cW1ubmxoZ2RlZm1ucHBwcHFxcnNzc3NzcnJzc3JxcnJycnNzdHV1dXV1eHh3eHh5ent7e3p6eHh5eXVybWxpam1xc3V0dHFtaGJiYmNrc3Z3eHp8fX1+foCAgICAgIGBgYGBgYKCg4ODg4KCgXx2b2pkYl9eXWBhZWltcHJzdXl8foCCg4OEhISEhISEg4ODg4ODg4SCf3hybGVhY2RoamptcXR3e319e3hzbGhobG9wcHBsaWZoaGpsbGxucXh/goODg4WFhIWHhIB5c3JzdnRvbGpqa25yeH2AgICAf359fX19fHp6eHZ1c3JwbnBvcXR2d3ZxbWhmZWNiYWRnam5raGRkY2Vpampoamxsampqb3R4enx3c3R1dXRycnNybmVeXFxbX2JlZmxvb3Bua2ptb3BwcHBwcXN1dHN0enlzbm1ta2dlY2NlbG1tbW1vbnBxcXFxcHBxcXBwcXFxcXJzc3R1dXZ2dnZ3eHh4eXp7fHt7e3t8fHx8d3Vvbm5xdXh5e3t7eXRtZWNiY2Voa29ydXh5ent7fn99foCAgYGBgYKCg4ODg4ODgoF+eG9rZ2ZjYWFhYmRnbG9yc3V6f4CBg4ODg4ODg4OEhISEg4OCgoODg4OCfnVuaGJgZGdoaWtydnl+f35+e3ZvaGdrbnFsaWVlYmRlaGtrbW5yeH+Cg4SEhISFhYWFg395d3h4dXBta2lqb3R4fX9/fn59fX18fH18fHt6eHZ0cW5wbm5ucHN1c29mYGBgXl1eY2ZqbGxrZ2RjZ2prbG1wcG9ubWtucXd7e3h1dXZ2dXNzcnFvZ11aW19iZ2lpa29wb21qam1wcXNzcXFzdXZ2dHN4eHFubWxpaGViZWZrbG1tbG1ucHFxcXFwcHFxcnJxcXFxcXJ0dHV2dnZ3d3h4eHh5ent8e3t8fHx8e3t6eHZ2dnh5enx7fHx8eXRva2hkYmBiZGdpamlqbHF2fH1+gICBgYGBgoKDg4ODg4OBfnlzbmlnZGJhYmZnbG5wcXV5fH+Cg4SDg4ODg4ODg4SEhYWDg4ODhISDg4F+dnJsZmNjaGprbnN3en6BgH97eXJqZmhsbmplYmJjZWVobG1ucHJ1fIKDhISEhIWFg4CAfXh1enp1cGtpaWpuc3h9f39+fn5+e3h4eXx8fXx6d3VzcW5ubm1ucHFxbGRhYGFhYWJna25wcG1oZGNmaWtvcHN1cm9ubGtvdXt7d3R1dnZ1c3N0c21lXFlbYWZna2tsb3FwbGhpam5wcnNxcXN1dnZydXl2cW5samppZWJkYmtqamtsbW9xcnJxcXBwcXFycnJyc3N0dXV1dHR2dnd3eHh4eHl6e3t8fHt8fHx8fHx8e3t8fHt7fHx8fHt6dnNxbWllYWJkYGBdX2JkZ253en6AgICAgoKDg4ODg4ODgoB7dnFsamhlYmFlamxxc3Z3fH6Bg4ODg4ODg4ODg4ODhIWFhoWFhYWFhYWFg397c2xmZGVnamxwdnt+gYKCf315c2xmZWhsa2NgYWNmaG1vb25vdHl+goODg4OEg4OEg4F8c3J3enVwbGxtbm5xeH2AgIGAfXh0cHF3eXt8fXx6dnNwbm9ubm5xcm5rZmdnam1ucnR1dnVwa2ZiYmVpbG9zd3t4cm5qaW50e3t2dHV2d3Ryc3RybGNbWVZfaGxtbW9wcm5qZ2dqbXF0c3BxdHZ4d3N0eHVwb2xramhlZGVmamlqa21ubnBwcHFxcHBxcXJycnJzdHR1dXV1dXZ2eHh4eHh4eXp7fHx8fH59fX19fHx8fHt7fHx8fHx8e3p5eXVybWtoZ2RhXlxcXV5gZ3B4fYCAgoKCgoODg4ODg4OCfXhybWtoZ2doa3B0eHl6fX+BgoKDg4ODg4ODg4ODhISFhYaGhoaGhoWFhYWDgX11bWZjZGdqb3N3fX+CgoKBfnh0b2lnaWxraGNiZmtucnNxbW91fICCg4ODg4SFhYJ/eXJvb3Z5dXBsbGtsbnF4fYCAgH54cmllZW10eXx8endzcG9vbW1rbW9wcG9vcXZ4eXl6enp6d3JsZmJjZWdqbXF4e3x2b2ZlanN6enZ0dXZ2c3JzdHNuZl9dXGFobG5vb3BwbWlnaGpvc3Ryc3R2d3d1dHZ4dW9tbGtqaGZlZmhqamprbW5wcHFxcXFxcXJycnJycnN0dHV1dXV1dnZ4eHh4enp5ent7fX18fH19fHx8fHt7e3t7e3x8enp8fHp5eHVzb21pZ2VhYGBgYGBlbnd9gYGCgoODhISEhIODgn98d3Fta2tpaW1zeXx+f4CAgYGDg4ODg4ODg4ODhISEhIWFhoaHh4eHhoaFhYSDfHdwaGVmaGxvc3p/gYKCgoGAenZxa2lqa25pZmRpb3R2eHNtbXF3fYCDgoKEhIWFg352b29xd3l2b2tramtuc3l+gYGCfHJoYFxdZW50e3t3c3Fwb25sbW5vcHFwcHF2fH18fH5+fnx6c2tmY2RmaGpsc3h+fHZuZmFkbnd4dnV2d3d0dXV0cm9pYmFeYWdrb3Fzc3FtaWdpa3Fzc3RzdHd4eHV1eHl2b2xsbGtpZGZoaWpqamttbnBwcXFxcXFxcnJycnJyc3R1dXd3d3d2dnh4eXl4eXp6fHx8fHx8fX18fHx8e3t7e3t7e3t6enx8fHp7eXh3dHFua2poZmRhXmJrdH2BgYKCg4OEhISEg4ODfnl0bm1qamtxdnp+gIGCg4ODg4ODg4ODg4ODg4OEhISEhYaGh4eHh4eGhoWFhIN9eXNrZmZnam9zeH6Bg4ODgoF+e3ZvamhqbWxqanF3e3x7dW9tbXJ8f4GEhISEhISCfHVzcnF1eHZva2tqa25zeX6BgYF6cGhhXV9mbnR4d3NvbW1vbmxtb3BwcXJydXp9fn9+fn5+fHhxamdkZWhpa21xdnt7dmxkYGJsdHh2dXZ3d3R1dXZ0cGlmZWJlam5wc3NzcW5pZ2ttcnZ1cnN0d3h4dXJ1eHVvbGpqa2lnaWxtaWpqamxtb3FwcHBwcHBwcHFyc3N0dXZ3eHh4eHd3eHh6enh4eHl7fXx8e3t6ent7enl8enl5eXl7e3t7fHx7e3p6fHx8e3d1c3FtZ2FeYWdyfICCgoKDg4SEgoODgoB+eHJramtscXd8f4GDg4ODg4ODg4ODg4ODg4ODg4OEhISGh4eIiIiHh4aGhoWEg398dnBoZWVobXJ4foKEhIOCgIB8d3NsaWltbm1udX1/fnl0b21ucnh/g4SEhISDgoF7dXV3dXZ2dm5sa21sb3R6f4KCf3xyaWNjZGhvcnNzb2xsbGtrbG1ub3BwcXF1en1/f3+Afn59dm5nY2RlZmdqbXJ2eXl1bGNfYmt1eHZ1dnd2dXR2dnNuaWdpaGhsb3BydHJuamdmam5xdXV0dHV4eHdzcXV3cm5ra2poZmdqa21pamtrbG1ub3BwcHBwcHFxcXJzc3R0dXZ4eHl5d3d4eHp6e3p5e3t9fHx8fH19e3t6eXh5eHh5eXp6e3t8fHx8fHx7e3t7enp4dnFoYV5ganR8gIKCgoODhISFhYKAfHd1cG1rbG1yd36AgYKDg4ODg4ODg4ODg4ODg4ODg4SEhIaHh4iIiIeHh4aGhYSDfnp1cGdlZGdqb3Z8goODgoF+eXV2dG1qaW1vcHF4f4F/enRvbGxyeH+DhISEhIOCfHd0en16dnZ3cGxra25uc3h9goKAenNqZ2drbG5wcHBubm1tbGxubnBxcXFxcXN3fX9/f35/f3pzbWViY2VoaWpuc3d5eXRtZmBhanN2dHV2eHZ1dHZ1cm5qaWpra25wcnN1dG5qaWltcnR1c3N1dnh4dnJzd3hzbmtramhmZ2pvcWlqamprbG5wcHFwcXFxcnFxcnNzdXV3eHl5eXl4eHl5eXp6ent7e3t8fHx8fX17e3l5eXh5eXl6e3l7e3t7fHx8fHt7e3t7e3x6dWtiXmFqdHyAgoODhISDhIOCgH13cG5sbGxucXR6foCBg4ODhISDg4ODg4ODg4ODg4OEhIWFhoeHiIiIiIiHh4aGhYSBfHdwamZkZWltcnt/g4OAf3x1c3R1b2trbW9wcnl9gX96dnFram92f4SEhISEhIB6dnd7fHh0dHRxbmxtbW9zeX+BgoB8dXFtbW5ubW9wcG1tb21vbW5vcXFxcXBwc3h9f35+fn59eXNtaGNkZWdqbHBzeXx5c21mYmNrcnR0dXd4d3Z1dXVxbmtsbW1ucHFzdHRxbWxrbXF2d3ZzdHZ2eHh0cHR5eXNubGtraWVnaWxxaWpra2xrbG1ucHBxcXFxcXJzdnZ3eHd4eXl5eXl5eXl4eXp6e3t7e3x8fHx6enp6eXh3dnV1dXd3eHp6e3t8fHx8fHx8fHt7fHl2bmRgYWdze36Bg4OEhIOEgoB6dHBsa2tsbG1xd31/gYGDg4OEhIODg4ODg4ODg4ODg4SEhYWGh4eIiIiIiIeHh4aDgn14dXJsZmRlaW1yd32BgX56dW1sb3Jva2pqbG9yd32BgHx2cW5tcXd+g4SEhISCfXp8fXh1c3Jyc3JubGxsbnJ5f4KBgHt2cnNzc25tb3Bwbm5vbW1ub3BwcXFxcXF0eHx+fn5+fnx4cWtnY2VnaGtvc3V7fHl0b2llZW5xcnR1d3h3dnZ2dnFsaWptcHFzdHR1dXNvbW5vdHd4dnR1dnZ3d3NydHl4cm5sa2tpaGpsb3RoaWpsbG1tbm1vcXFycnJyc3V3d3Z2eHh5eXh5e3t7e3t7e3t8fHx8fX18e3t7eXl4eHd3d3d1dXR1d3l7fHt7e3t8fHx8fHx7e3hwZmFhZXF6fn+Cg4SEg4J9d3Fua2hoaWlqb3R6f4KCg4ODg4SEhISDg4ODg4ODg4ODg4SFhoaHh4iIiIiIh4aHhYKAfXhzcm1nZGRmaXB0en19eXNtZWZtcW5qaGxsbnN2e4GBfXZyb21yeH6Cg4SDg4N/ent7dnNvcHF0cG1tbWxtcXeBgn97eHNzdnZ0b21tcHBwcXFvbW5vb3BwcnJzc3V6fH5+fX99enZvaWVjZGdobG9zen18d3JsaWdob3J0dHZ4d3d2d3d3cm5sbW9xc3V0dXR2c3Bvb3J2eXdzc3R1dXd3dHR2eHZxb25sampqa25xd2hpamxsbnBwcXJycnJyc3N0dnd3d3d5eXp6eXp8fHx8e3t8fH19fHp7e3t6e3t5eXl5eXl3d3V1dnh3eXl7fX19fXx8fHx7e3t7eXNqYV9jbHV7f3+Ag4OBfXdya2dnZ2ZnaWxyd32AgoKDg4ODhISEhIODg4ODg4ODg4ODhIWGhoeHh4iIiIiHhoeFgn96dXFvbmlmZmhobnN4eHVvaWRjZWdubm5ucG9xc3R6f4F9eHNvbG91fYGEhYSEg4N+fHp4dXJxcnNxbWpsa2xudXp8eXZzdXd6enZwcHBycnJ0cW9tbnBwcHFycnNzdHl8f4B+fXx6dm9qZWRkZmhrcHR5e3p2cG1ram5zdnV1d3h4d3Z3d3Zzbmxtb3FzdHZ2dXZzcXBzdXh6dnV0dXh4eHh0dHh6d29sa2xqamptcHJyaWpqbGxtb3BxcXFycnN0dHV1eHh5e3t6enp7e3x8e3t8fHx8fHx8fHt7eXt5eXp6enp6enp6eXl3d3h4eHl7e3x8fX18fHx6ent6dG1kYGNqdHp+gICCgn93c21nY2NiZGdpcXV9f4CBgoODg4OEhISEg4ODg4ODg4ODg4OEhYaFhoeHh4eHh4aGhYJ/end0cG5ua2loaWlscHJxbGdkYmFgY2lvcXJ2e3t4d3p+gHx4cm1ucXd/g4WGhYWEhIKBgXt1cnFzdHBsamtqa21wc3V0cHB0eXt6dXJxdHR1dnVwbm1ubm9xcXNxcXJ1eX1/f39+e3h1b2plZGNlaW1xdXp6eHJvbm5wcnZ5eHZ4enp5eXh4eHJsam1wcnR3d3V2d3Vyc3d5fXt3dXV2eHl6eXV1eHl0bmtra2tra2xsbm1pamxtbG1vcHBwcXN0dXZ2dnd4eHl7e3t8fHx8fHx8fHx8fHx8fHt7eXl5enl5eXl5eXp6enp5eXl5eXl5e3t7fHx8fHt7fHp6e3p3cWtiYWVud32AgIGBfHNtZ2FgYWNlaW93fH+BgIGCg4ODg4SEhISDg4ODg4ODg4ODg4SEhYaGh4eHh4eHhYSDgXx4c3Fwbm9saGdpaWpsa2pnZGFfY2VpbXF1en1+gH18gYJ/e3dzcG5yeH+DhYaFhYJ/fHx9eHJxdXd2cGxqa2ppaWxwcXBtbHF2ent2c3Z3enh2cnBubnBycnJycnNydHZ5fH5/f357d3JuaWVlZmlrbnJ4enl2cW9ubnB1eHp3eHp7e3l5eXl4cmtsbnBydHV2dnd3dXR2eXx9e3d1d3h4eXl3dXd7eXJta2pqamtra2xqamprbG1ub3BwcHFydHZ2dnZ3eHl5enx8fHx8fHx8fHx8fHx8fHx7enp4eHd3eHl5eXl5enp6enl5eXl6ent8fHx7fHt7e3t7e3t7e3p0b2hlZWt0en6Af355c2plYGBfY2pxdn2AgICBgoODg4ODhISEhIODg4KCgoKCg4OEhISEhYWFhYaGhoWEgoB8dHFwcG9ubWtoZ2hoaWllYWRjZGNqbG5wdHh9eXd8f4GGiouJgHhxcHN5f4OFhYWFhIODg355c3J3e3lxa2pqa2prbm5tbGlscnV7e3l3eHt8eHhzcG9wcXJycnBydHR1d3l8fn9+e3l3cWxoZGRmZ2pucnZ2dHFxcXBwcnV6enh3eXt6eXl5enpzbm5xcnN1dXZ1dnZ0c3Z5e316d3d5eXh6eXh1dnp7c21qaWlpampqamhqamtsbW5vcHBwcXN0dnZ2dnd4eXl6fHx8fHx9fXx8fHx8fHx8e3t6eXh4eXl4eXl5eXl6enp6enp5eXp6eXp6ent8e3t7e3t7e3t7endybWdjZm51eXt7endxaGNgYWNpcXh7foCAgIGBgoODg4OEhISEg4ODgoKCgoKDg4SEhISFhYWFhYSEgn99e3Z0cXBwbm5wcWxoZ2doaGZiY2JiZGpucnR2dnl2cXN0dHh/hoaCfXp3eHx/g4WFhYWEhIKCgX15d3d7eHJramlpaGpra2ppam1zd3h4eXd4e3x4dnJubnBxc3NycHJ0dHV3eXx+fn19enRwa2ZlZWdpa29zdXJxcHBvb29zeH18eXl6e3p5eXp8eHJtbnJ0dXZ2dnd3dnR1eHt9fXp3d3l5ent7eXZ5fHpybWtoaWlqamlramtqa21ubm9wcHFzdHV2dXVzdHV2eXt7e317fH1+fX18fHx8e3t7enp5eHh5eXl5eXl5eXl5eHl6enp6enp6e3t7e3t7e3t7e3t7e3t7eXRxamViZmxxdHV0cW1oZWNjaW92e3+BgICBgYKCg4OCgoODhYWDg4ODgoKCgoODhISEhISEhYWFgn99end1c3FxcHBubnBxcGdlZWZnZmRjY2JkaGxwc3d3cWlqbG1wcnZ7gYODg4B9fH+ChIWGhoWCfn+Bf3t5enx3cW1ramtra21rbWtrb3V4enh4d3l6e3h2dHBwcXJzc3JycnR0dXh6fX59fHp4c25raGdoa21tb3BwcHBwcHBvb3R6f357enp7e3p6e3t4cGxvdHV1dnd3d3d2dXZ5fH6Aend4eHl8fH16dnx8eHFsampramdmaWtpbGlqamtub3BwcnN0dXRzb2xrbXBzdnZ2d3l8fX5+fn5+fHx7e3t6eXl7e3l5eXl5eXh4d3d3eHp6enp6enp7e3t7e3t7e3t7e3t7e3t8enVtZmBjZmttbGtoZGJiYmdtc3x9f3+AgIGBgoKDg4KCg4OCgoODgoKBgYGBgoKDg4ODg4OCgn98eXZ0c3NxcHBwcHFyc3RwamZmZ2hnZWZmYl9gZm1zdXd2cG5rbnBydn2CgoOGhoSDgoOEhYaGhYSCf317en+EfndxbWtrbGxsbGxub3BxdXh7enl4eXp6d3ZycHBxcnR0cnJydHR1dXh9fn9+e3dxbmlnZ2hrbXBvbm5vb29vb25wdXyAfnt6enp6enp8fHdvbHJ2dnV2d3h5eXR0dnl9f315d3h5enx8e3d2fHx4cGxra2poZmdpa25wamppamxvcXJyc3R1c3FtaGdmZ2pubm9xcnZ2eXx8e3t8fHt7enp6enl5eHh5eXl5eXl4eHh4eHh6enp6e3t7e3t7e3t6enl7fHx8fHx8d3FoYl9iY2NkZGNhYWJmbXF4fn5+f3+AgICAgoGCg4OEhIKChIOBgIB+f39/f39+fX19fXt5d3d0c3BycG5ub29xc3V2dXJraGhpaWlpampkX1thbHV3eHdxbW5xdnp+gYSGh4mJiIiFgYOEhYaFhYJ/fHp+hYiCeXJta2psbW1scXN4fX14eHp6eHh6e3p2dHFwcHBzdXRxcXJ0dHV2eX9+f356dXFtamhoaWxsamhqa21ucG9tb3J3fH59fHp6enp6fH57dG9udHZzdHd3eHd2cXN3fH9+fHh3eXl7fHx5dHV9fXlxbWpqamdnZ2hrcXZqamtrbG9xcnJzdHVzcWtmZGNlZWdnZ2hrbG1wdnh6e319e3t6enp6eXl5eXl5eXl4eHh4eXl7e3p6enp7e3t7e3t7e3p6eXt8fHx8fX14cmtkY2FfX2BgYWFhYmZsdHp/f35/f4B/fHp4d3l9gIKCgH59e3h3dHNxcXBwb25ubm5ubGlqamhnZ2hpampsb3J2eHl3cmtnZ2hpa2twb2thVlhlb3V2d3Jub3R7gYSFhoiJi4uLiYV+fYCFhoWFhYWCg4OIh4B4cG1rbnBycXB0e4CAf3l5eXl4eHp7e3h1cnJycnN0c3FxcnR0dXd6f39/fXp1b2xpZ2hqaWdkYmVoamxtbnBydnh6fX18fHx7e3x9fXpzbm91d3V2eHh4d3Rxc3d8gIB8eXl6eXt7e3dxc3p9eXFtbGtraWdnaGx0eWhqamxucHJycnN1eHZ1cGxoZWdmZmZkZGZmZ2hscHZ5ent7eXl5enp5eHh4eHh4eHh4eXl6enp6enp7e3t7enp6enp6e3t7fHx8fHx7enlzbmpnY19cX15eXmFiZ2x1e39/gH+AfXlya2dmaHB4fXt4dW9tbWxraGZmZmZlZGNjZGNiY2NkY2BgYGBgYmZrcnZ5eXdybGdmaWpoanF0cWdaWWRvdXd0cW9ucnZ9goKEh4qLi4qHhIN9eoCFhYODg4OChIeEfHZwbWxuc3h7fH1+e3h0dXZ1d3h4e3x6d3NycnJzc3JxcHBwcnJ1eXx+gH99eHNtaWZnaWlmZGBgY2ZqbW9vcXZ4ent9fXx9fXx8fX59enRwcXV1dXd4eHl3dXFydn1/gHt4enp7e3x5cm1xen13b21sbWtqaGZnbXZ9aGpqbG1vcHBxcnR2dnVyb2xqamlnZ2dkZGRlZGVnbHBydnd4eXl5eXh4eHh4eHh4eHh5eXp6enp6ent7e3t6enp6enp7e3p7fHx8fHx7endzb2tnYmBfXltbXV5jZ293fn6Af314bmNcXF1iaG5yb2xoZGFgX11dXV1cXFtaV1dYV1laXF1eXl1dX19fYmdqbW5wcXBramhmZmRlZ21zb2RhaXJ1d3VycG5ucHJ4foOFh4iIiIaCg4aCfoCDgn98f4CFiIJ6dnBtbG90fIKFhHx0b2hmaW11d3d6enp2cnFxcXJycXBvb3Byc3d4e35/f3t2cWxoZmZoaGVjXV1iZWtubnJ1dXh6fn99fH19fHx9fn57eHRydnh1d3h4eXZzcHF2fYGAe3h5eXt7e3hxbHF6e3VvbWxtbWtqaWdsdn1pa2psbm9wcHFxc3R1dnVycHBwbW1ramloZ2VjZGVmaWxwcnV3eHd3d3d3d3d3d3d2dnl5enp6e3t4e3t7e3p6enp6enp6enp6e3x8fX17eXZzcG5raGZjX1xdXF5iaG10e359eXBlX1lZW15iZWhlYl5cW1hXWVhXV1ZWVVNUVFJTVldXWFlVWFZYW19hZGdnZmdpbWtpZ2RiX2BkaW1ycG1yd3Z2dHFwb29vcnh8gIGDhISCgH+CiIqDenyAfn1+gYeHgnpzbWxrb3d+hISDfnNsZ2lqbHR1eXp7d3NxcHByc3Fwb25ubnFzdXh7f399enVvaWdoamtrZ2NhYWJma25xcXR2d3l+f318fnx7fH5/f396dXN2dnZ3eXl7dG5sbnV8goB7eHl6e3t5dm5rcHl4cW9ubm5raWZlaGx1e2lra21ub3BwcXFyc3N0dHR1dXZ1dXNycW5ta2hmZGNjZmpucHJ0dnZ1dXV1dXV1dXZ2d3d5eXl6e3p7e3t7enp6enp6enp6ent8fn59fXx7eXd2dHFtaWZjYF9dXFxeYmducXFuZV5bW1tdX2BfX11bWllYWVtcXmBgYWFfXl1dXF5gYWJjYV5cW1paWlxfYmVoaWtpamdiYGNlZ2dkaHF2c3d4d3d1cnBvbm5vcnl9foGBfnt8f4OKj4qCent8eHmBiImDf36AgoGAf4GEhoaBdWxlZmpvbXBzeXx5dXJycnN0c29ra25vcnR3eHt+fnt2cWxpZ2doamppZWVlaW1xcnNzdXZ4en5/fXx+fHt8fn9/f3t4dnZ3d3l6enhzbWxudXyBgXt4eXp7e3hyamlwd3Zxb25ubm9wb2xscHR5aGprbW1ubm9xcXFycnR1dXV1d3d4eXd3dXJwa2dlY2FiY2Zna3FzdHR0c3V1dXV1dXZ3d3d3d3l6enp6enp7e3p6enp6ent7fHx8fX9/fXx6d3h3dnNsamdkY2BiX1xcXmRpaGRfX11eXFxcXFxcXl9hYWJkZWdsbGtra2lnZWRiZGdnaWppZmRhXl1dXFpcX2BkZ2loZGBiaG1vaV1cbHV2eXl4d3Z0cG5tbm9zeXx9fn58enqBiI6QjYiDgH15fYWLjYyKi46Mi4iFhIWEhYV9dGhkZWpscHV8fXl0cnNyc3ZzcG1sbW9xdHZ5eXl4c3JwbGdnaWtsbGtoamxwdnd2dXR1d3h7f359fX58e3x+f39/fnt6eXh4eXp5eHNtbG10fIKAenl6enp6eG9naXB0dG9ubW5vcHJyb21vc3Zpa2ttbW5ub3FxcnRzdXV1dHR3d3h5eHh4eHZxbGllY2JhYF9haG5xcnJzdHR0dHR1dnh4eHh3eXp6fHx7e3t7enp6enp6e3t7e3x9f39/fXx6eHdzcm9tbm5saWVgXFteXVxcXV9fX19eXl5eXmVobW5wcXFydHV1dHJwbGloZ2VmZ2dpbW9ubm1qaWVkYmJgX2BgYWJjZWtubm9nXFZldHd4eHd1dHJycW9sbHJ7fXh2fIB/fH2GjI+QjYaBfn+CiY2Mi4mDeXR4f4KFhoeIiYZ/dnBra3B0dnp7d3Nyc3Jzcm9tbGxtcHJzdXZ2dHNxbm1ra2trbG1tbm5vdHd7e3h0cnR2eX5/fn19fnx8fn5/gYF/fXt6eHh5enp5c21tbnR8gH56eXt7enp3b2dpcnZ0cXJxcHJzdXh3dHFydGpsbG5tbm9wcXJ0dHZ2dHR0dHd3d3d4eHh4d3dzb2pnYmBeXGBka29wcHJycnJzc3NzdXV1dnd4eHl7fHx6ent6enp6enl5d3d2d3x8f4B9e3l2dHNzb25ubm1qYl5cW11eXFtbXF1eX19gYWRnbXR3eX19fn5+e3t5dXJubGloZ2doaWtwdXV2dnRybm1qaGdkZmRhZGhucW5rbG9qZWlvcnV4d3RxbG9uaGZncHp7d3R7fn57foaMj4+NiISChYqNjomFg4B3cnZ+g4SHiIuMjIiFgn98dnJ1ent3c3Fyc3Nyb21ucXJ5eHVyb3Fwbmxra2hpZ2psbm9xc3Z8f358d3V1dnl7f4B+fH19fX5/gICAgH9/fXl6ent7eXlybWxtcnuBf3p5e3t6enZxZ2pydXZ0c3JxcHN1ent4dHR0a21tb3BwcHFxcnR0dHR0dHR0d3d3d3h4eHh4eHdzcW1qZmFdXWJobnBwcXFxcXJycnJzc3R1dnd3eHp7enl6e3p6enp6d3BpaWtwdXl8fHl1c3FxcHFxbWdkYmJhX11cXVtbXF5dXl1gYWFkZ251e3+BgoKCgn98eXVyb21qaWhpaWltb3V5fH18fHp2cW1pZmRjZmhuc3JqZ2hud3t+e3VwcXRyb25wbW1sb3N5fn17fYOEgX+ChouMjIuLiYiKiImJhYSDfHZ5fX16fISJjI2NjYyKiIaBenl7enZzcG5ubm9vdH2EiYmEeG9vcXBubGppaGlqa25wcXN1eXt8e3hzb3J2eXyAgYB9f319fn+AgICAgIB9eXl6e3x8eXNua2xzfYF/e3p7e3t7dW1lanN3dHJzcnFwc3V9fnt3dXVtb25vcHBycnNzdXV1dXV1dnZ3d3d3eHh4eHh4d3ZzcnBqY1tZXmZvcHBycnFxcHBxcXNzcnR1dnZ4ent6enp6enp6eXRtZGBiZGlucnZ1dHJwcXBubGtlYFtYWllXWFZZWVldY2VlZWNjZWZna3F3en5/gIGBfnp1cG1ra2tqaGhpaW1yeX2AgYB/fXl1bmhkYmlucnNya2hoa3x/gIB/fndsaGdtdXJyb3F2foGCg4eJjIqHgoKFiImHiouKh4eGiIeFh4Z/fYCAd3J5goeLjI6OjIyJiYWBfH55d3RxbGptb3iCiYuJgHhwbm9wcXBramhnaGlsbnBwc3V7fn57dXFwcnZ5fICCgX19fX1+f4GBgYGAgH96enx9fHx4cm9sbXR+gH57e3t7e3t0aGRqcnVzcnJyb29xeH19fHl2dW5wcHJ0dHR0dHR1dXV1dXV2dnd3d3d4eHh4eHh3dnVzdG5kXFpeZW1wcHBwcHBycnJycnJxc3R1dXd4eXh4enp7e3p3cGhlYV5fYWRpbW5sa2xtbGxqaGFaVVRWVldVVFRYXWRrcHFxbWpnZGJjZWlscHV4fHx6dnJvbGtra2tqa2xucnZ7fn9+fnx6d3FtZ2dsc3V0c3NsaHB5f4SIf4GJfXJuc3p9e3Z1eoCDhIeLjI6Ni4qIhomMjYuNjYuHg4KDfn2FiISBgnpwb3Z+hImLjY2Li4mHhH5/fnlzcnFxcnZ9hYiEfHRvbW5ub3BxcG1sa2lpa2xucHFzdnp6endzcHB0d3p+gIF/f39+fn5/gYGBgYCAfXt8fX58fHhyb21udH6Afnt7e3t7eXBnZGpxc3NycnJxcXF4e3t6eHd2cXBycnR0c3R0dHd3dnZ0dHV1dXV3d3h4eHZ3d3VzdHRxbWVdWFpjbXBvb25wcHFxcXFxcXFxcnJ0dHV2d3d4eHl4eHRtZ2NeYGBhYmVlZ2dnZmdnZWRfW1RQT1JWV1pZW2BlbHJ4e3t3bmhlX11dYGVpamxwcXRxcG5tbWtra2xtcHF0eXx+f399eXRyb29tdHp/gH57e3x3eYOFhY+OjId8cnZ9g4WFhIOEhoiKiouLiImJiIiIi4yMjI6PjoeDhoR7eYKGh4SBeXNxd36EhoqMjImJg4F9d3t9e3NwcHF7gomJg3dtbm1vb3BwcnJycG5tampsbW5vcXN2ent3dHFxcnR4fICBgH9/f39+gIGCgoCBgYB+fHt7fX17dnNvbm90fX98eXp7e3l1bmVianR1cnJzc3JycnZ6eXl5dnZwc3V1dXV0dXZ2d3d2dnZ2dnZ2d3d3eHh4dnZ2dXNzc3BsZFxVWGJpb29vcHBwb29vb3BwcHBwcHN0dHV3d3h4e3l3dG9oY19hYWJkZGRjY2FfYGBeXVtXT01MUFJUWF1ja3J5fYCCgX10a2RhXV5dXmFlZmdpamxubW1tbGxtb3F0d3l9fXx7eXd1cW5tcHV9h46Pi4eEhIqKgouQjY+TiXx2e4eOjo+MjI6OjY2MjIiEhISHi4mKi4qKjZCPiISGhH+AhYeGgHx2dHR6gYWIioyLiIN4cG5xeX16dG5rcn+HhoB1b25tbWxtbnJ0dHRycG1ramxtbnBydHd6eXVxcXFydHh8gIGAf39/f36AgYKCgYOBgH58fX19fXp2c29ub3R9fnx7e3t7eXVrYmRtc3NycnFxcnJ1eXl4eXl2dnBzdnZ1dnZ2eHh4eHh4eHh2d3Z3eHd3d3h4d3d2dnV1cW5oX1hZXWRqbW1ubm5vb25ub29wcHBwcXJ0dXV3eHh4eHh1cW5qaGRjYmFiZGJfX11eXVpYVlVQTUpITVVdZG53f4KDg4SDf3ZsZmRkZmVkX15fYmRmaGtsbW5vb3BxdHZ4enp6d3dzcXBwbm5xeoWMkJGPjIiLjo2Fh42TkYp+cneDjZKSjY2Sk5GPjY2MiIWDg4iLi4qKiImMjouHhoSBgYWGhIB8eXh2dnuBiIqKioqIg3dvbHJ5fXhuaG5+hIJ8dG5tbW5ub29wcnV2dXJwb2xsbG9wcXJ0d3x6dnNwcHN1eH2AgYCAgYF+fYCBgoOCgoOBfnt9fXx8eXZzb21udX19e3p7fXx6dGpkZ291c3Fxb3BwcnZ5e3p5eHh3dnd2dnd4enp5eXh4eHh3d3d3enp6eHh4eHh3d3Z2dXVzcGtlXlpdX2RpbG5vb29vbm5vb3BwcHBwcXJydHZ4eHh4eXd0cG5sa2lnZGFjZGRiYF9bWFZVU1FQT09RXWdxe3+DhYWFhIR/d21oZmpwcm9qZ2JgYWRkZGhrbnN1dHV1dHNycnJxcXBwbm1tcHmBhoqPk5KPjpCTkouIi5CSjoF7gYiQk5GOjJCTko2Li4uIhoOChomKioqJiomLiomEgICEiIiFhIF/fXx5fYOIioqKioiEfnFobGpmX2BoeoSCfnlzcG5ubm5vbnB0d3l4dHFubW5ub3BxcnV4e3l2c3Fxc3V4fYCBgICBgYB/gIGCg4KCg4F+e3x8fHx5dnVxbW51fX18e3x8enlyamZsdXVzcXFvcHBydXh5enl4dnd3d3h4d3d5eXp6eXd3d3d4enp6enp6eXl5eHh4d3Z2dnNwbWhhXl5eX2FlaGtub29tbW5ucHBwcHBwcnN1dnd5eHl4eHZ0cm9vbmxqaGhpZGBeXFZUVFRUVVdYWl5pdHyAgYODg4ODgn54b2ZmanN2dXJubWVfXmBiZ2ltcXJzcXFvbm1vbWxvbm9wb21xe4GEh46TlZWUlpeWkouJiIiFgoWIjJCUko6Nj5GSk5SSjo2KiIeIi4uMjYyKiYiHhoF/goiMjYyLiomJhYCDh4eIioiHh4R/e3RlXVpfaXR8fXh5dXFwcnJvbWxtcnZ5eXd0cW5ubm5vcHByeHx9e3h3dHR0dnl+gIKAgYGBgICAgoGBgYODgX17e3t8fHl3dHJtcXd9fn18fn18eHRsaHJ5d3FwcHBwcXFzeHh5enp5eXd3eHh5eXl5enp5d3d3ent6enp6enp5eXl4eHh3dnd3dXRya2djYmJhYWBhZ2psbm1tbm5ubm9vb29xcnN1dnd3eHp6eHZ2dHJwbm1pZ2NiX11bWFdZW1xfYWVpcHh+gYGCg4ODg4KDgXpza2Zob3Z8enVzb2tnaGlpaWhqbGloaGdoa25tbGxucHJxcnh7f4OGjpWXmZucnJqXkImEgH1/h4yRl5qYko+Nkpecn5+cmJSOioeHiouLioiGhoSDg4aJjI6Qj42Ki4uLjIuJhoWFhIWFg399fHJudX+Dfnh2dHd2dHN1dnNtbG1yd3p7eXRxbm5ubnBxc3R3e3x6eHd1dXZ4en+CgX+AgYGAgICCg4OBg4OBfXt9fX18end1cnB0en1+fXx7fX15dGxrdnl2cHBwcHBxcXFydXl6enp6eHh4eHl5enp6enl5eXl5eXh4eHh6eXl5eXp5eHl3d3V3d3VxbWlpZWFgX19iY2ZqbW9ubm5ubm5ubnFxcnR1d3h6e3t6eHh0cG1saGZjXlxbWVxeX2JjZmludHl8fX+AgYGCgoKCgoKBfHRuZmZqcXd8e3dwbXBzcWtsamlpampqb29wb25qaXB0dnh6fIGDg4aOlZqcnJydmJWQiYOBgISIjpSaoKCclJKUlpmZmpmXlZaQioWDgoWIhYOChICAhoyOjo2KiYqJiYqLjImGg4CAgoSEfnt8d3J8hod/dnR3fn14cnBzcW1sbnN4e3t3dHFubW1vcXFzc3Z3d3Z1dXV3dXd8gYKBf4CBgICAgYKDg4ODg398e3x9fnx6dnVycHV7fX59fH1+fXtyb3N8fHRwcHBvb3BwcHF2enp6enp5eXp6e3t8fHt7e3t5eXl5enp6enp5enp6e3p5eXd3dXh4eXh0cW5qZ2RhX11eYmdsbW5ub29wcHBwcHBydHV3d3l6eXRxbmpnZWFdW1tZWlteYWNna25ydXt/gX9+gICBgYKCgoKCgoF9d3BoZWVqcHd1eHp7f4B+d3NycG1raWhmZmhsbWpoaHB3e32AgoKDhIqSm52dnp2YkouLi4mIiYuQmJ2enZ6bmJWSjo+SkZCQkI+LhX93dX6Ag4OCg4SKjo2KhoSEiIqKiImLioaCfn5+gn99foB9eXh8fHp3dHuDhoB1cXJxbm5vcXV4eXZ0cW5tbG1tbWtrbm9ubG1tb3B1d3uAgoF/gIGAgICBgoODg4ODf3x7fn5+fHl3dnRzeX1/fn19f39/e3RweH57c29wcHFxcnJxc3Z6enp8fHp6eXl6ent7e3l6enp6eXp6eXh7e3t7e3p6e3t5eXh4d3d4eHd3dnJuamZiYF9fYmdrbW9ub3Bwb3BydHR1d3Zzc3Fua2ZkYFtZV1hbXV5gYmVobHF1eHt+gIGBgYGAgIKCgYGBgYGBgH95c2tlZ2prcXN6goWHh4mIhoWCfnpzbGRkZF9dYmpsbm5ydnt/gYF8foyZnZ6enpiQjIyPjo2NjZGYnZ2YmJiZmZWQjo+Pjo2NjoqFgHZvbG92f4WHio+MhoSEhYOBgICCg4aFhH9/foCBgoGBgH15eHV6f4F8gIOGgHh0cnJwcHFydnp5dHBubW1tamtra25tbW9ub29vcnR1eXt6fH6BgoKAgYKCg4ODg4KAgICAgH99enp5dnZ7gIB+fn5+gH98d3Z+gXpycHBwcHFzdHR1e3x7e3t7enp7e3x8fHx8ent7enp6e3t6eXt7e3t7e3t6enp6enl6enl5eXl3dXRxbmpkYF5fY2dsbW5vb29vcHFyc3R0c2xpZGFeWllXV1dZWl5jaGptcHV6e31/gIGBgYGBgYCAgICBgYGBgYGAf3x1cGlma29zdXqBhImLi4uKiYuLiIWCfXpzamZnamtoaGlqa3J6fHR1g5Sbnp6cmpOPjpCQj42OkpecnJqVmJyempWQjIqIh4mKiIaDgIB6d3yGio6QiYF8e35/f3x8fH6Bg4SEgoB/gYKChIaEgIB9fH2BgYB+fHt8eXZzc3Jyc3V4enp1cmxrampqa2xtbm1sbGxrbW1tbG5zdXd4eoCCg4GDgoKEhISEg4GAgICAgH97e3p6eX6BgX5+f3+Af3l1eH+CfHRxcHBxcnV1en5/fXp6e3t5eXt7e3t7e3p6e3t7e3p6fHx7e3p6enp8fHt7fHt7e3p6enp7e3t7eHZ0cWxmYV9fY2lsbW5vcG9xc3N1dG9qZF5aWFdWVlhbXl9iaG5ydXl7foCCgoGBgoKCgoGBgYGBgYGBgYGBgYGBfHlyb3J1fYGAfHqCi5GPi4iLjIyLi42OjYuCcmlvbWFcYWhscXl4cW17kJqdnZyakJSSkZCNjo6QlJmamZiXmpqYlZGMiYaGiImJiIaGiYqLi4uNjo6Kgnt4en1+fn+BgYSFhYWDgYSGhYODhIOEhoWAfn59fHl5eXl6end0dHN0eH1+eXNvbW5ua2trbG5wcnJwb25sa2lqamlqb3J3fICCgYKDhISEhISEgoGAgYGAfnp7e3t6foGAgICBgYB/eHN3gIN7cXBxcnNzdHd8gH98eXt7e3x8e3t7e3t7enp6enp6fHx8fXx8fHx8fHx8e3t7e3x8e3t7e3t7e3t8enh2cWtkYV9eYGNlZmdobG9wcG9saGJdW1tcXl5eY2drb3J1eXt+f4GCgoKCgoKCgoKCgYGBgYGBgYGBgYGBgYF/e3d3foOGh4WEhImOk5CLiIqKi4uKio2PkpKHd3R0amBdYGlzfH11bnSKmJybmZePlJiXl5SSkJKWmZmWk5KVlZSRjoqIh4eHiIiIiIeLjIyLjI6OioWDf3l5e3t6fYGDhYaIiIeGhoSDgoOCg4WEgHt5eXp5e318end4dnd1dXV4fHpzcG9sampra25ydHZ3eXl5eXZ0c3Nzb2tqbG50en6BgoOEhYWFhYSDgoGCgn98e3x+fX+DgoGAgIGBgX10b3Z+gHl0c3JzdHV1eH2Afnx7fHx8e3t7e3x8fHx7e3t7enp7e3x8fHx7fX19fHx9fXx8fHx7e3x8fHx6enx8e3p0b2tnZGBfXl5fYGBkZ2loZWNfXVpbXWBiZ2ltcnZ5e35/gYGCgoKCgoKBgYKCgoKBgYCAgoKCgoGBgYGAf356fICCgoaHh4aHjJCSj4qGhYaIiYqNj5GSkot8d3d7c2xmZ3V/gXhwdImVmZublo+UmpqampmWlZaXlZORj5CSkI2LioiIh4eHiYqJiYyOjo6Kh4WCgHx6enp4eHp9gIODhIWHiIuHgoGBgH+Agn96eXl7ent9fn17eHl4d3ZzdHN0dHFva2xsb3FvcHJ2en1+f359e3l5eXt6dG5paGtxe3+Cg4OGhoaHhIODgoOCgn17fH6AgoWCgIB/gIGAenFudH19eXZ1dHR2dnZ6foB+fHt8fH17e3x8e3t8fHt7e3t6ent7fHx8fHt9fX19fX19fHx8fHt7fHx8fHx8fHx8e3l0cGxoZWBeXlxcXF5hYmBfX15fX2Jmam90eHx8foCAgIKBgYKCgoKCgoKCgoKCgoGBgoKCgoKCgYGBgYB/fX6EhIOFh4eGhoaJjo+OiYSBgYKDiI6SlZaVjIF7fIOFhH12eoGBeG5uf42XmpuYk5WampmZmZaUk5OSkY6MjI2Mi4uLiomFhYWJi4qJiIqMi4mIiIiEfnl7eXVzdXl+f315eHuEiYqHhYOBf4GCe3p5e3p7fH5/fHp5eHh4dXJvbnBwb29yc3R0dHN0eHx/gIGBgIB/f39/goKCfnduaGhweoGDhIaIh4eFhIWDgoKAfn5/gIGEhIKAgX+AgoB6b2tyfHx3dXN1dXZ2dnp+gH58e3x9f3t7fHx8fHx8e3t7e3t7fHx8fHt7e3t9fX5+fX18fHx8fHx9fX19fHx8fHp6eXh3c25qZWFdXV1bXFxeYF9fYGJnbHN3eXx9gH+AgYGBgYKCgoKCgoGCgoKCgoKCgoKCgoKBgoKBgYGBgX2AhYWEg4aHiIeGhoWKjo6KhoB8fX1/i5OYl5aQg3+Ag4mNioSBhIF3aGZzhpSam5mal5qampmUkpGOjYyOjoqJiouLjIyMiYWFhouNi4qIh4mLi4uKiYh/eXp7d3V0dnl8fXp4d3+HjYyKhoCAgn13ent5ent8gIB8eXp4d3Rxbmxrbm9xcXJ1dXV2d3h6fYCAgICCgYCBgYGDhISFgnxyamhwfIKFhoeIh4eGhYWDgoGBgYKCg4WEgYGBgYGBf3pxbnd+fHh1dXZ2d3Z3eX5/fnx+fn5+e3t8fHt7e3t7e3t7e3t8fHx8fHx9fX19fX19fXx8fHx8fH19fX18fHx8fHx8e3l3dnJwbWtnYmFeXmBiZWZqbnJ4enx+gIB/gIB/gIGBgoKCgoKCgYKCgoKCgoKCgoKCgoGCgoGBgYF/gYmMhYSEhoeHh4iGhIaJjYqGgnx7fHyAjpeZmZWLhIKDhouOi4WGh350bXSFkZeal5mZmpqamZWSjouLioqKiYmHh4iKjIyKhoaHjY+NjIqJioyPjI2Mi4iEgXx5eXp5enx+fHt7gIaKiYiGhIaHg315d3d4en1/fnp1cXFvbmtqam1wcnJyc3Z4eHl5ent/gICAgIKBgYKCgoSFhYaFg3twZmhyfoSHiIiHh4aFhYSDgoKDhISFhYSBgYKCgYKBfHV1e399eHd3d3d5d3d5fn98eXd1c3F7e3t7enp6enl5enx6ent7e3t9fX19fn59fH19fX19fXx8fX17e3x8fHx8fHx8e3t8fHl3c3BuaWVkZWhrbnJ2fn6AgIB/f39/f4GBgICCgoKCgoKCgoODgoKCgoODg4ODgoKCgYGCgoOHi4mEhIeIiYmJiIaGhoaIiYiEf3x7e32KlpubmpiMhIKChoiGh4mFfHRvdIOOlpiZmZqbm5ubmZSQjImJiYmKiIWFhomMjYuKiouSlJKPjo+RkpCNioqJiYiFgXx7enl5e4GChIaGiIqJiIaHjIyLiYV9dnV2d3t6dnNxcG1tbm9ydXV0dXd4eXx8fX19fX6AgYGBgoODg4SFhYeHh4eIhXprZGl1goaHiYiHh4aHhYWDg4KFhoeGg4ODg4ODg4F+enuBhH96d3Z1eHh2d3uAgHtyamlpaXt7e3t6enp6eXl6e319fHx9fX19fX1+fn18fX19fX19fHx9fXp6fHx8fHx8fHx7e3x8e3p4enh2c3Jxc3Z4e31/f4CAf35+fn9/gYGBgYKCgoKCgoKCg4OCgoODg4ODg4ODg4KBgYGBgYeJjI6NiouMioiIiIiIiIaFh4aDfnp6fouUmZycm5GHgoKDhoaJiod9cGtvfYyVl5iYmpydnZ2alpGNjIuLiomHg4OFiYyMi4uMj5SWlZOSlJSTjouJiIiJiIaDfnZzcnV7goeHhYSEhYaFhISGh4mLioqEf3p4c3JxcXNycXN1dnd3eHt6enp7fX19fX19foCBgYGCg4SFhoeIh4eHh4iIg3VoZWp4hImJiIiHh4aGhoSEhYeIiYeFg4ODg4ODgoCAhIaFf316eHd7e3l4eXtza2dqbGpqfHx7e3p6eXl5eXp6fHx9fXx8fn5/f35+fX19fXx8fHx8fHx8enp7e3p6fHx7fH19fX18fHp8fn58ent8fX9+f4CAgICAgH9/f3+AgH9/gYGCgoKCgoKDg4ODg4ODg4ODg4SEg4ODgYCBiIyUkI2Ki4yLi4yMi4qJh4WFh4aBe3uHj5SWmZucmpGIhIWGiImLiHxvbXJ+jZiZmJiZnJ6fnpyWkpCRj4uJiouIiImIioqKjJCTlJaVlpeXlpOOi4mIh4eFhYWBdmxpa3WAh4qGg4OEg4F/fHl7gIaHioyJhn9zcXJydHV0d3l5enp9f318fH1/f35+gIB/gYCAgIGEhoiIiYmKiYmJh4aFfnBlZXGAhYeIiIiIiIiGhYWGiIqKh4WEhISEhISEg4OFiIOAfXt7fX18enh2b2psbWtsbG96enp6e3t6enp6enp6ent7e3t+fn9/fn59fX19fHx8fHx8e3t5eXl4enp7e3p6fX1+fn19fX5/f39/fn+AgIGCgoKAgICAf39/f39/f3+BgYKCgoKCgoODg4ODg4ODg4ODhISDg4OCgYWLj46NiomKi4uNkZCPkZKLh4SFiIiFhoySk5SVlpmcm5GIh4eKjI2IfHNxc3mKmJuZl5eanJycmJSTkpWVlJKSkZGQjYyNi4qMj5GTlZaXmJeVk4+LiIeFhYSEhoSAdGdiZWhudoCDhIOBf3p6enZ2fIOGhoiIhn16d3l6e3x9fHt7e31+fXx9fn9/fn5+fn+BgICBg4WHioqLi4qJiYmIh4eFe21lZ3F+hoiJiYmJiYeGhoeJiouHhYSEhISEhIODhIiJhH58fX1/f356dGxpbnJycHFydXl5eXl5eXl5enp6enl5ent8fX5+gIB+fn19fX19fXx8fX17e3x8enp6enp6eXp8fH19fX5/f4CAgYGAgIGBgYGBgX9/f35+fn9/fn5/f4CAgYGCgoKCg4ODg4SEg4OCgoSEhIKDg4OGjZCNiouKi4qKioqOj5OXlpOLhYSIjIuNj5KVlJOTlJebmI+Ih4qNjol8dnl9gIiWnJiXl5mampmUlJSYmZqZl5eUk5OTk5KRj46OkJKVlpaUlJSTj4uGhIOBg4SHiIZ4aGhua2hudn6Cg4B+enh4eHl7f4KBgoOEhH17en58fHx7e3x8fX59fHx+gIB/f4CAgICBgYKEh4qLi4uJiYmKioqIiIqAcGdkaXOCiImKiYiJh4WGh4qMioaEhISEhISEg4WHiIiDf39/f4GCfXRrbG5wcnR1d3h7eHh4eHl5eXl6enp6enp6e3x9fX1+fn5+fX19fX19fHx8fHt7e3t6enp6enp5enx8fX19foCAgYGCgoKCgoKCgoGBf399fX18fX1+fn9/gICCgoKCg4ODg4ODg4ODg4SEhISEgoODg4mRj4qHi4qGg4iCgIaQl5ualJCIgoeNkpKPk5WUk5OUl5qalI6Ki4uMiIB0cHZ/iJOcmpeanJybmpiXmZWVnp+dnZmVlJSUlJWUkpOUlJOTlJOSkpKQjIqGg4KEhoiIhHlxcnVzb25ye4B/fHt5dXV3d3V0dHJydnx+gX58fH18fXx8fHx9fn18fX+AgICAgIB/fn+BgoSIjI2NjIuKioqKioiHiIV5amNlbnqEiYqKiYmHhYaIjIyKhoSEhISEhISEhIiLioSAgICBf3twa21vc3Z5e3x+f4B4eHh4eHh5eXl5enp7e3x8fX1+fn1+f39+fn19fHx8fHx8e3t6ent5enp6ent8e3t8fHx9gIGBgYKCgoKCgoKBgX9+fHt7fHt7e3x8foCAgIKCgoKDg4ODg4OFhYODg4OEhISEg4OFi5GOioaMioqJiIJ+hJCYmZmVkYqBgouSkY+QkpWUlZeYm5uYkYyKjIyIg3p0bnJ7i5qenJyfn5+empiXkJ+goaCdmJWTkpKUlZaXlZWUk5OUlJOTkpCPjYmHhoaIiYmHgXt8e3dzcXR8g4SAfHh3c25xdnZ0cG1xeH+BgX18fX18fX18e319fX1/gICAgICAf39/gICChYmMjY2Ni4qKioqJiYmKh39wZ2NqeIKJiouKiYaFhomMjIqGhISEhYWFg4SEiYyJhYCAgn92bGpscHN2en1+f3+AgHh4eHh4eHl5eXl6ent7fHx9fn5+fX5/f35+fX18fHx8fHx7e3x8e3l6enp6e3x8fHx8fH1+gIGBgoKCgoKCgoF/fn58fHx7ent7fHx+gICAgoKCgoODg4ODg4ODg4ODg4SEhISDg4WLkI6MjI6MiomJhYGDjJSWlZORi4KBiZKRi42Qk5WWl5iampiTjo2MjIqGgYB7dHR/kZyiop6dnpyYlpeUmp2fnJmWkpCRkpWWl5iXlpaWlpeWlJGOj4+NjIqIiYqLi4qGg4B7e3t+goOBfXt7d3Jsa25zdXVzcXF0e4GEg3p4eHp8fHx7fX19fX+AgICAgH99fX1+f4GFiYuNjY2LioqKiomJiYqKhHpuaWt4g4iLi4qJhoWGiYyMioaEhISFhYWDhYeKi4mFgoKAd2xrbW9zd3t+fn+AgIGBd3d3d3d3eHh5eXp6enp7fH5+fn5/f35+f319fX19fHx9e3p5enp6ent7enp6enp7fHx9fn5/gYGBgYGBgYCAf39+fXt7e3t7e3x9fX5+f4B/gYGCg4ODg4ODg4ODg4ODhISEg4KChYySj46Pj4+OjY2LhYOIj5OSkJCNhYKIjo6LjI6QlZWXl5eYmJWRkI6Ni4qHgHx5eX6JlZufnp6dmpiYmJaYm5qZlZSUlJWWlZWVlZaVl5iam5qYko6Njo6OjY2OkJGRj4uHg4GCg4SFg4CAgH98cWVhbXBzdnh5d3V2fISHg3p4eXp8fHp7e4GBgICAf39/fnx7fHx/gYSIjY+PjYuMjIuLioqKioqJhHlwbnaBiIyLiomGhIeJjoyJhoSFhYaGhoWFh4mLiIWDgXhubG5wcnZ6gX+BgYGBgIB3d3d3d3d4eHl5enp6enp7fHx+fn9+f39/fX19fX18fH17enl6enp6enp6enp6ent8fH1+gIGBgYGBgYGBgIB/f359e3t7enp7fH19fn5/gIGCgYKDg4ODg4ODg4ODg4OEhISDgoKGjpKQkZGRkZGQkI6Ig4WMj5CPj42IhoiLiomLjI+TlpeYmJiZlZKRkY+MjIiBfX+CgYSLk5iYmJmXlZWWlZSVl5aVlZaWlpaYmJaWlZWYmJqVmJqUkI+Pjo6Oj5GUlZSRjYqFhIWHhoSAf4CAfnlxYk9WaW90d3Z1c3F2gIeHg4GFh4eEgH57enx7fX18fHp6eHd4e32AhIiOj4+Ni4yMi4uKioqKiomHgHZwdH+IjIuKiYaEh4uOjImGhIWFh4eHhoWGiYqJhYB5bWtwcnV5fIGCgYGBgYGCgnh4d3d4eHl4eXl6enp6e3t8fH19fn1+fn5+fX19fX19fHx7e3t5eXd3d3h5enp6e3x8fn9/gICBgYKBgYGAgYB+fX17enp7e3p7fH19f3+AgYGCgoKCg4ODg4ODg4ODg4ODg4OCgYWOk5KTkZGRlJOSj4uFhIqMj4+QjYmHiYqKiYmLjI+Ul5mZmZiXlJKQj42MiIF9gYWDg4aNkZSVlpaTk5OTlZWVlZSVlpiZm5mZl5eXlpiam5ydnJiVk5KPjo6RlJeXlpSQjouLiYmHg4CAgH98eWxVNzNXaHB0dnd3c3R8homJiYmIiouLh4J8enp7end1dHR1dHV3fICGio6PjY2NjIyLioqKioqKiomBd3B0foiMjIuJhoSIi42LiYWGhYaGhoeFhoiLjIqFe25scHN1eX6EhYODg4ODgoKDeHh4eHh4eXh5eXp6enp7e3t7fX1+fX5+fn59fX19fX18fHt7fHt6eHh4eHl6enp7e3t+f3+AgIGAgYGBgYCAf39+fXt6ent7ent8fX1/f4CBgYKCgoKDg4KCgoKCgoKCgoKCgoKBhY6WlZSUk5OUlJKQjoiEh4uOj42LiImKioqKiouMjpGVl5mZl5eSj4+Qjo2LhoKCg4SDhomNkJKTkpCRkZOWlpeVlZWWmJybnZ6bnJyZmpqbnJuZmZaWlZKRkpSWmJeWlpOPjIuKio2PjomEgn11Y0MsL1Zrbm5yd3l1cHaAgn14e35/gYGDg4aCf3+AfXp5dnV0dXh+hIuOkY+NjY2MjIuKioqKioqKiYF3c3aBiY2Mi4mGhomNjYqIhYaGh4iIh4WGiYyLiH5zbXF0dXqAg4aEg4ODg4OCg394eHp6eXl4eHh5eXp7e319fX19fX5+fn5+fn19fn59fX19fHp6ent5eHh3d3l5enp7e31+f4CAgICAgYGBf39/fn19fHt7e3p7e3x9fn6AgICBgoKCgoKCgYODg4KCgoKCgoKCgYGEjpaXl5eVlZaWlJGOiISGioyOjYqKiImLi4uLi4yOj5GTlpiZlZCMjo+PjouJhIKChIWGhouOkZCPj5CSlZeXlZWUlpibmZuhnZ6Yn5CRl5mamZmXl5WVlZWXmJeYmJeWk5GNi4mIiYuQkYyGgHRhSjxGYHFybm9ydnVzdXp9enR2eHt+gICBg4KCgYB+fXt2dHN2eoCGio6Qj42NjYyLi4qLi4uLjIuJgHVzd4GIi4yLiYaGio6OioiGhoeIiYmHhYaKjYyBc21xdHZ5f4iJiISDg4SEhIJ+c3h4eHh4eHh4eXl6enp6fHx9fX19fn5+fn5+fX1+fn19fX18enp6eXh4eHl5eXl5eXt7fH19f4CAgICAgIB/f35+fX18e3t7enp7fH1+foCAgIGCgoKCgoKBg4KCgoKCgYKCgoKBgYSLlpiXmJWUlpWUkY6JhYWJi4qJiYmIiYmJi4uLjI2OkJCTlpeUkIyNj5CPjIyGf39+fn+EiJGSkpCQkJOWmJmWlJSWmZueno2GiY+Yio+YnZuamZmZlZWWl5qamZiYmJiUkI2LiYmGhIWGhYF9dWxbSk5nd3l1cW90dnV0d32Bf3t5fYCAgICBgIB/fn19eXd2dnd7gYaLj5CPjY2NjIuLiouLi4uMi4mAdXR4g4qMjIuIhYaKjo6KiIiIh4iJiYiGhoqMiHhwcXZ2eICJi4yKhYODhISEgnhteHh4eHd3enp6enp7fHx7fHx8fX19fX19fn5+fn5+fX18fHx8e3p5eXl5eXl5eXp6e3t8fX1/foCAgICAgH9+fn18fXx9e3p6e3t8fX19foCAgIKCgoKDg4ODg4OBgYGBgoKCgoCAgYWTmJeXlpSWlZOPjImFhYiMi4eIiImKioqLi4mKjI2Oj5GSlJSPjo+RkI+OjYd+eHZ3eH2Gj5aWkpCRkZaampeTlJeZmZ2QiYySk5Kanp+en52dm5qYl5aXmpubmpqamJKNioqJiIeEg4J/e3RrYVZPXHaAf3t2cHB1d3R4foOCfn5/gH+AgIGAgIB+fnx5d3Z2en6Ch4yPkJCOjY2MjIyKi4uLi4uMiH93dnuEio2Oi4mGh4uOjYqIiIiHiYmJiYeIi4l9cHJ1dnh+hoqMjIiEg4OEhIN/cml4eHh4eXl6enp7enx8fHt8fHx9fX19f39+fn5+fn59fXx8fHx7enl5eHh5eXl5enp7e3x9fX9+gICAgIB/f39+fXx9fH17e3t7e3x8fX1+gIGBgoKCgoGBgYGBgYGBgYGCgoKCgn56eIOSl5iXlpWUko6Lh4aJjJCRioeHh4iJiYqKiImKi42Ojo+PkY6Mj5GRkY+OjIZ+eXh4eYGOl5eVlJKTlZialpGTlZmam4+JkZeXnJqUlJmenp6gnpqZmJeam5ybm5uak5CLioiIhoOBf3t3cm1nYWBre4B8e3dwaXJ5d3h9hIWBgICAgYODgYGAf39+e3l3dnZ6foKIjZCTkY+NjYyMjIqLi4uLi4yIf3Z1fIWLj46LiYaIjI6NioiIiIeJiYmHhYeHf3BxdXZ3foWKjY6MiISEhISEgnluanh4eHh5enp6e3t7e3x8fHx8fH5+fn5+fn5+fX19fHt8fX19fXx8e3x8fHx6enp7e3t7fn59fX5+gICAgH9/fn57e319fHx7e3x8fX1+f4CBgoKCgoKBgYGBgICAgYGBgYKCgoF+d29tfIuUlZSUlZSSjYuKjY+QkI6NiYWEhIeIiYmIiYqKi42OkI+Qjo6QkpKRkJCPjIaDgYCAhpCYmJiXl5WUlZeXlZeZl5Gbl5KYnZ6gnJ+fnZ2anpignJiYmZ2fn52enJeTj4qIiYiHhIJ/enVycXJvb3J3eXV1dW9nanN4eXyCgn9/f4GBgoKCgoKCfn5/e3l5eX2BhYmMkJKSkI6NjY2Li4yMjY2Mi4Z9dnZ+ho2OjYyJhomNjoyKiIiIiYmKiYiHh4BzbnJ2eX6Ii4yNkYuIhYSGhoV9cGlreHh4eHl6enp7e3t7fHx8fHx8e3t+fn5+fn5/f358fX5+fn59fHx7fH19fHp6ent7e3t8fHx8fHx+fn5+f39+fn5+fX18fH19fHx9fX5/gIGCgoKCgYGBgYCBgICBgYGBgYGAf3huZGd5h42OkJGTlZWOiYySk5GPj46Lhn96fn+Fh4iJioqJjI+Pj46Nj5CSkpGSkZGQj42NjZCRk5aYmZiYlpWVl5mYl5mcmZKbm56eoaCin6GfnZ2hkJyfm5qboZ+gmZycmJOPioeIiIeGhIF+e3p7enhxbGxta25zdG1oa3B3f4WFgoCAgYGCgoKCgoKAfnt5enp7f4KFiYyQkpKQj42NjYuLjIyNjYyLhX13eYCIjY6NjImIio2OjIqIiYmJiYqJiIaAeHBydHZ9h4yMi4qIg4CAgH99enNoZ2p5eXh5eXp6ent7e3t8fHx8fX19fX5+fn5/f35+fX1+fn5+fn58fHt7fX17e3p6fHx9fX19fX19fXx9fXx8fX5+fX19fXx8fHx8fH19f3+BgYGBgYGAgIGAf3+AgICAgICAf358cWRfZnd9e3yCiY+SkY2MkpSTkY+OjYyIg398eYCEiImKiomKi42NjI6QkZGRkZKTkpGSk5uhn5qOjJWampiamJeYm5uamZqdmZegoKCfn5+gnpSXoKGdop+cmpyipaWenJuXko+Jh4aFhYaEg4ODgX99eG5iYWZrbnFycGpmanWDiIaCgYGBgoKCgoKCgoF/fXx7fH6BhIeKjI+TkpGPjY2MjIyMjI2NjYmCe3h6gIiMjY2MiYiKjo+Mi4qKioqKiYmIgnZydHV2eYGFg4J+e3Zxbm9vb21sZmVmbHp6eXp7fHx8fX19fXx8fHx9fX19fX1+fn9/f39/f39/f39/f35+fX18fH19fHx8fHt7fHx8fHx8e3x8e3p8fX19fX19fHx8fH19fn6AgH9/gYGBgYCAf39/f35+f3+AgIB+enNoYmBlaGprbnqEkZKOi4uQlJSSj42LjYuIhIJ/b3J6goeJiomLjYyMjpCRkZGRk5STkZGRlZ2oppGKjZump6KbmJibm5qYmJqcm6GhoJSQm6ChnZqfm6Cfnp2bnqGjoqCem5eRjImIh4WEhIKCgYB+fXl0cW5pY2JnbG9ybmhlbnyBf3+AgIGCgoKCgoKCgX9+fX1/gIKFh4qMj5OTkY+NjYyMjIyMjY2MiYF6eH2Dio6PjYyJiYyOj4yLioqKi4uLioR3cXR2dXR2c3BuamloaGZnaGhoZ2ZlY2Voenp5ent8fX18fH19fHx8fH19fX19fX9/f3+BgYCAgICAgICAf39/fn19fn59fXx8fHx7e3t7enp7e3t7fHx9fX19fX19fXx+f3+AgICAgICAgICAgX9+fn1+fn5/f39/fHt2bWZhYmRlaGlue4iSkoyJjpGUl5SQjouMjIiEg4J0amx3gYaJioyMi4uPkpOTk5OTlZWSkpGTmaGkkoucra6ppZ2Xl5qcnJuam52en6CdmJqcnJyYmJqcn52fn5ycoKOhnpybl5GNiIeGhoSDgoGAf357dnV4fHlsYV5iam9vamZrdXl6e35/gIKCgoODg4OBgH9/gIGCg4WHioyQlJORjo2NjIyMjIyNjYyGfnl6foWLkI+Mi4mKjY+OjYuKi4uMjIuHfXN0dnNvbmllY2NkZWhpbG5vcG9ua2hoZmZ6enl6e3x9fX19fX18fHx8fX19fX19f39/f39/gICAgICAgIB/f39+fX1+fn19fX19fX19e3t7e3t7fHx8fH19fX19fX19fH5/f4CAgICAgICAgIB/fn5+fX5+fn9/f398dWtlZWhmZWVmZ298iZGOi4uQkpSXlpSSjo2NioiGg310cnZ8gomKi4yNjpCTlJSVlJOUlJSSkpKVm6GZoqunoqCempmYm52cnJycnZydmJein5uZmpybmZycm5mbm5mcnp6bmJWSjouJh4aGhIOEgH58enZ4e3+Af3luY15gaG1rZ215f4GAgH+AgoKCg4ODg4GAf3+AgYKDhomKjJCUk5GOjY2MjIyMjI2Ni4V+eXuAh42Qj4yLiouOj46Ni4qMjIyMiYB0c3JsaWdkZWRlaGxvdXl9foCAeHFsbWxubnt7e3t7fX19fn59fX19fX18fHx+fn5+fn5+fX6AgH9/gICAgICAgH5/f35+fn5+fn5+fXt8fHx8e3t8fHx8fX19fX19fX19fX9/gICAgICAgICAgH9/f39+fn5+fn5/fnhvZmJlaGRkZWRncHuJj4yJjJGTlpiWlZSSj46NioqHgXt1dHqDi4yOjY6QkpOUlpWUk5SVlJWTk5SXnqirpp6bmJubmZmcnp6enJ2bm52Wo6eloZ6enpyampmWlZmYmJqcm5mXko6Mi4mHhoWEg4OAfXl5eXx/gX9/fXdrYl1ibG1sbXR7f4KCgoKBg4ODg4ODg4F/f3+Bg4WHiYqNkZOTk5COjYyLjIyMjY2Kgnx7e4GIjZGPjYyLjY+Pjo2MjIyMjIyEdm5saGdkZ2hra250eoOFh4OFhoJ6cm1vcXZ4e3t7e3t9fX1+fn19fX1+fn5+fH5+fn5+fn5+gICAgICAgICAgICAfn9/fn5+fn5+fn59e3x8fHx7e3t7e3t8fH19fX19fX19f3+AgICAgICAgICAf39/f35+fn5+fnx4cGZlZmZnZ2djY2lygI2MiYuPkJSXmZeWlpaTkZGOjYqGgHZ0eoSPkpGOj5GSk5SWlpWRkZGUlpSUlZaZoKGdmJOUl5aWl5qdnZ6dm5qbm5+kpKGenJ2cm5qZmJWVmZmYmp2amJSQjIuJiIaFhIODg4KAfn5+gICAgIGAfXhxZV5lbHFyb3F1fIKDgoKDg4ODhISDgYGBgYKDhYeJio2PkpOTkI6NjIuMjIyNjYiBfHt7g4mOkY+NjIuOj4+OjYyMjIyLhnhua2lra21tcXZ8hIqPkI2JhoaGfnJubnR7gYV8fHt9fH19fn9/fX19fX5+fn5+fn1+fn59fn+AgYGBgYGBgYGAgIF/fn5+fn5+fX19fXx6fHx8fHx8e3t6e3x8fHx9fXx9fn59f39/f3+AgH9/gICAgICAfn19fX19eXNoZGZnaWtraWJianN+iIeHjI+RlJeYmJiZmZeVkI+QjImFfHl8hI+TkZCQkZKTk5OVlJGPjpCSlZaWlZOXmJqXkpWUlJWWmp2en5uYlZuboqKhnpuXl5eYmpmYl5aYmZiZmJWVk5CLiYmIhoWEg4KBfnx8fYCCgIGBgYCAf3pxY2Zqb29qZWx4g4KAfoGDhIKEhIKCgIGCgoWGhoiLjI2RkpKQjo2Mi42NjY2Lh4B6en+Eio+Rj42Mi5CRkI+MjIyNjYp9bWlmaG1xcnZ+hoyRkpKRjYmIh4N5cW5yeH6EhXp6ent8fX1+fn59fX19fn5+fn9/f39/f36Af4CBgYGBgYGBgYCAgX+AgICAgIB/f319fHp7e3t7enp6enx8fHx8fHx8fH1+fn+AgYGBgYCAf39+fn5+fn5+fX19fHpzaGNjZmlsbWtnYmJpdH+EhYePkpSWmJqZmZqamJaQjo6LiomCe36GjZGRkJGRkpOTkpOTj46MjpCSlZWTkpKUmJeVlJSUlZaYm52bl5WVl5uenZybmZaVlZaXl5iYlpWWlpeVlZSRjYmJiIeGhYSDgoB9e3p7fYCAgYGBgYGCgH96dXJxcm9nanaDhoSBgoSEg4SEgoKBgYODhYaHiYqLjZGSkY+OjYyLjY2NjImFfXx7gIeLkJGPjYyLkJCPj4yMjI2Lf3BmZmhrdHl+hYyPkZKSkpGNiYeGfnRwcHN7goWHe3t8fH1+fX5+fn5+fn5+fn9/f39+fnx+f3+AgYCAgICBgYGBgICAgICAgICAgH9/f399fX19fHp6enp6eXl6ent7e3t8fH19fn5+fn9/gICAgH19fXx8fH19fX17dWljYWVobXFwbmliY2x1f4OEiZOVlZaZm5qampmXlZGOjYuJhoN+f4WNkJCPj5CSk5CQjouKiomLjI6RlJOTkpKVlZOTk5SWmJiZmJeVkpKTlZqbmpqZmpeWlZeXmZiYmJiWlZSVk5GNiYiIhoaFhIOAfnx7eXt7fICCg4ODg4KBgH1+fXt7e3Vyd32EhoOAf4CChISDg4KChISGhoaIiouOkJKQj46MjIyMjY2Mh4F8e3yCiI2PkY+NjI2RkI+OjIyNjIh1aGZrbnJ6hYuQkZKTk5ORkY2JiIR5cXFzeYGFiId8fH19e3x9fn5+fn5+fn19fn5+fn5+fn5/f4CBgICAgIGBgYGAgICAgICAgICAf39/f319fX18enp6e3t7e3t7fHx7e3t7enx+fn5+fX19fX5+f39/fn19fX19enJqZGRjZWtwc3FuZ2JjaXJ8gYSJlJeWl5mbmpqZl5WSj46OjIV9en5/goiNj46Njo+RjoyKhoKAgYKFh42PkJCRkZOTk5OUl56ioJaTlJKRk5SXl5iYl5qem5iXmJmbmpudnZiVk5STj4yJiIeGhoWCgX9+fHt6e3t8gIKDg4ODgoKBgICAgYKBg4J9eH6FgXl3eICEhISEg4OEhYaGhoiKi42QkJCOjYyMjIyNjYuFgHx7fIKIjpGRj46NkJCQj46MjI2KemxmaW5ye4ePkZGSk5OTk5GOioeFf3VwcnR8g4eJiX19fX19fX5+fn5+fn19fHx9fXx8fn5/f39/gIGBgYGBgICBgYCAgICAgICAgICAgH9+fn19e3t7e3l6enp6e3t8fHx8e3t7fH5+fn5+f319fH2AgICAf399fHp0amRkZWVpb3NzcWxmYWVseH+EhYmVmJeZm5ubm5eVk46NjY2MiHhudXyBho2Ni4yNjY2MiYeEgH57fH+DiYqMjY+QkZKRlZedp6ymmZSRkJGTlZeYl5eXmJubmZmanJubnJ6bmJWUlJKNiYeHh4WFhYOCf358fHt7fH2AgoODg4OBgoKBgYGCg4OHh4F5fIJ/ent9g4WFhISDg4WFhoaHiYmLjY+Qj46NjY2MjI2Mi4R+fX2AhIqQkZGRkJCSkpCPjYyPi35tZGZrbnWEj5OTk5SUlZWUkYyIhoV7cm5xeIGIiYmJfn5+fn5+fn5+fn5+fX18fHx8fHx9fX9+f39/gIGBgYGAgIGBgICAgICAgICAgICAf35+fXx7e3t7eXp6enp7e3x8fHx7e3t8fX19fX19fX19fX5+f399fX17dWtkY2VnaW1xdHRwa2hnaXB8hYaGi5WYmZubm5qZmJWSjoyLioqKfGdpdXx8fn+AgYWHiYqKh4SAfHt8f4OGiYqMjo+QkZScp6usqaOblZKSkZKVlpeVlZWWmZmZmZqcm5qbnJuYlJORkIuIh4eHhYWFg4J/fn19fX19foCCg4ODg4GCgoGCgoOEh4mIhYCCgn57f4GEhYWEhIODhYWGhoaIiYuNj5CPjo2NjYyMjYyJg39+foGFi5CRkZGQkJKSkI+NjYuAcWppaWxyf5CSk5SUlJSVlZSRjIiHgHVvcXZ7hIiJiop/f39/fn5+fn5+fn58fH18fHx8fHx+f39/f3+AgICBgYCAgYGAgICAgYGBgYCAgIB+fn18fXx7e3t6e3t7e3p6e3t7e3t7fHx6enx8fX1+fn9/fn5/f359fHVsY2FlaGxucXZ3c25qZ2hsc3+IiIeNlpmZnJybmpiXlZOPjYqJiYuCbGBsdnZ4d3h8f4OGh4aGhYKAfn+CgoaIiYuNjpCOkp2oqqWinpqVj4+NjZCTlZSRkZSYmZeZm52al5iYlpWTko+NiYeHh4iIhoSDgX9/fn59fX5/gYODg4ODgYGCgYGChIWHiIaEgoSAeXh7foKEhIODg4OEhoWFhoiJioyPj46OjY2NjIyNjIiDf3+AgoiNkJKRkZGRkZGPjoyKhXlramtscnuLkpSUk5SVlZWVk4+Kh4Z8c3B0eYCGioqKjH9/f39+fn5+fn5+fn5+fXx8fHx8fn+AgH9/f4CAgICAgICBgYCAgICBgYGBgICAgIB/fn19fHx8e3p7e3t7enp7e3t7e3t8fH19fHx9fX1+f39/fn9/fn13bWRgZGhrbnN2eHdxbGhna3N7hIyJhoyVmJeanJuamJeWlI+GgoWIhoJxYWNwdnd3eHx/goSFhIWEhISCg4ODhIaIioyNj46Qk5mdnJyZl5OOiYiJi46Qj42OkJSVlpibmpiVlJSSkI+OjYuIh4eGh4eGhIOBf39/f39/f4CBg4ODg4OCgoKBgYKChIaGhYSDg310c3d8gYSEg4ODg4SGh4eGiImKjI+Pjo6NjY2Ojo2MiIOBgYGEiY6RkZGRkZGRkY+OjId7bGtsbXB4g46Uk5OTlJWVlZWTj4mGgnhxcnZ7gYeKioqMf39/f35+fn18fHx7fX18fH19fHx8fX5+f39/f39/f39/f39/gICAgICAgYGBgYCAf39+fn18fX17e3p8fHt6enp6e3t7fH19fX19fX19fH1+fn19f359enNoYmJoa21zeXp8d3FsaWhudHuHjoyHiI+Vl5mdnZqYlpWTkYmGg4OBfnZmYG10d3h6fn+Bg4WEhYSEhIODg4ODg4SGiYqNjo+QkpSXmJeUk42Jg4SGiYyLioqMkJSTl5iZlpOTko+NjIyKiYeHiIiGhoaGhIKAf39/fn5/gIKCg4OEhIODg4OBgYODhISFhISBe3RvdHp/g4ODgoSEhYaGhoeJjIyMjo6Ojo2NjY2OjouGhIKChIiNkJKSkpKSkpGPjo6JgHFrb25ud4GNlJSUlJWVlZWVlZKNiYV8dHJ0d32FioqKioqAgH9/fn5+fX19fX18fHx8fX18fHx9fn5/f39/f39/f39/f3+AgICAgIB/f39/fn59fX5+fXx8fHt7enx7enp6e3t7e3t8fHx9fX19fX18fX5/gIB/f3t0a2NhZmlrcXd5enl0bWlobHB3e4WNi4WHjZKVmJmamZaVlJSSjYqDg4F+eWtgbX6Af3+BgYGDg4WFhISEg4ODg4ODhIaHiYuMjY6OkJKUk5ORjIiDgoOFiIqLiYqLjo+SlJWUkZCPjIqLi4mIh4eIiIeHh4eEg4F/f4B/f3+AgoKDg4ODg4ODg4ODg4ODhISDg4F8dGtjaHWBg4ODhISFhYaGiYuOjoyOjo6OjY2NjY6LiIWCg4SGi46RkpKSkpKSkY+PjYZ2bGtucHN8iJGVlJSUlZWVlZWVko2IhHhxcnZ6gIiKi4uMjICAf39+fn5+fn58fHt7e3t8fHx8fHx8fH1/f39/f39/f39/f35+f39/f39/f39+fnx8fn58fXx8fHx8fHp6e3t7e3t7fHx7e3x8fH19fX19fn9+f35+enBnYmVpbHB3e3x8eXVuaWhudXh6hY6LhoWIj5KVmZiVlJOTk5KOi4iGg4B+cWBpf4GBgIGBgoKDg4WFg4ODg4ODg4OFhoeIioqKioyNj5CRkZCMhoOCgoKEiYqKiYmKi42PkJGQjYuJiYeIiIiHh4iIh4eHh4aFg4GAf3+Af4KCg4ODg4ODg4ODg4ODg4KCg4ODf3hzbGJbZ3qBg4ODhIWGhoaJi4yOjY2Mjo6OjY2NjYuGgoKDhomNkZKSkpKSkZKSkY+Kf3Bqa3B0eoONk5SVlJSUlJWVlpSTjoiCdnFzd32CiYuLjY2NgIB/f35+fn58fH18e3t7e3t7fHx8fHx8fH1+fn5+fn5/f39/fn5+fn9/f39/f35+fn59fXx9fX19fXx8e3t7e3x8fHx8fHt7e3t7fH19fX1+fn5/f353bGJjaGpudHl7fXt5dXFtbW5tam1+jo2GhYiLj5KVlJGQkJCRkZCNiYaGhYF3ZWV7hISDg4OEhISEg4OGhoWFhISDg4OFhoeJiYmKi4uNjpCPjImFg4KCgYKDhoeIiIiHiYqLioqJh4aGh4iIiIeHiIiIiIiIh4aFg4GAf3+AgoODg4ODg4ODg4ODg4ODgoGCg4F9d3FsY1JQZ3qAgoSFhYaGhoiKiouNjYyOjo6NjY6MiIOCg4WHi4+RkpKSkpKRkpKRkIZ1bm1ucXV9h5GUlZSUlJSUlZWWlJKOiH91cnN4foSJjIuNjY2AgH9/fn58fn5+fnt7e3t7e3t8fHx8fHx8fX19fn5+fn9/f39/f39/f39/f35+fn5/f35+fn58fH19fHx9fXx8fHx8fHt7e3t8fHx8fHx9fX5+f39+fHZrZWdpa292e319fXt3c3BwbGNfaYKRkIeDhYuOkJKQjo6PkJCQko6JiIeFgnprZXeEiIaEhIWFhoaGhoeHhoaGhoSEg4WHh4iIiImKiouNj4+MiISCgoGAgYODhIWGhoiJiIiGhoWEhIaIiImJiIiHh4iIiIiJiIaGhYOBgYODg4ODg4ODg4OCgoGCg4KDg4ODgoF+dm1iT0xacH+Ag4WGhoaGh4iJi4yMi42NjY6OjoqHg4OEh4qOkZKSkpKSkpGSkpKMfW9sbnB0e4KLk5WVlJWVlZWWlpaTkYyHfHNzdXuBiIqLjIyNjX9/fn5+fn18fXx7fHt7e3t7e3x8fHx8fHx9fX1+fn5+f39/f39/f39/f39/gIB/f39/fn59fXx8fX19fX19fHx8fHx8e3t7e3x8fHx8fX19fn5/f317dm5oamttc3h9fnt7enh1c3BnXl9tg5GQh4OGjI+RkIyMi4yNjo+SkI2Kh4WBe21icYOKiIeHiIiIiIiIiYmIiIiIhoaFhoeHiIiIiYqKioqMjoyIhIKCgYB/gICChIaGh4iIiIaEhIWHiYmJiYeIiIeHh4eHh4eHhoaFhISEhISEhIODg4OCfnp3dnuAgoODgoKCgH96cm5vdHp+goSDhYaGhoaHiImLjIyLjY2Njo6MiISDg4SHio6RkpKSkpKSkpOSjoNzbW5wcnd+ho6TlZWUlZWVlZaWlpOPioR4c3N2fIWIi4yNjY6Of39+fn5+fXx8fHt7e3t7e3t7fHx7e3t7fH19fX19fX19fX9/f39/f39/f39/f39/f39+fn19fX19fX19fX18fHx8fHx7e3x8e3t9fXx9fHx9fX5+fHp0cGtubXB3fH5+f319endzbGRdX26FkJCGhIeNkJGPjYuKi4yMjpORjYiFgnx0cGdngYmLiImJiYmJiIiKiomJiIiGhoWFh4eHh4eHiYmKiouNjIqGhIKBgH+AgICDhIaGh4eHhoWGiImKiIeIhoaIh4eGhoaGhYWFhoeHhYWEhISEhISFhH91amNncXp/g4OCgoB+fHx8fnt9f4KBgoWGhYWGhoeIiIuMjIyMjY2NjIuGg4ODhYeKjpGSkpKSkpKSlJKNe29tb3Bze4KKkpOUlZSVlZWWlpaWk4+KgXRxc3Z9hoqMjY6Oj49/f35+fn59fHt7ent7e3t7e3t8fHt7e3t8fX19fX19fX19fn5/f39/f39/f39/f39+fn19fX19fX19fX19fXx8fHx8fHt7fHx7e3t7enx8fH19fn57eXRwbW5vcnl8fn+Af316d3BnWlhmdYKJiYWDhoyPkI2KioqKiouNkpKLiISBe3JsYGV8hoqKioqKioqJiYqKiYmJiYiIh4eHh4aGh4eIiIiJioyMi4iGhoSCgYCAf4KEhoaHh4eGh4eIiomHhYSEhIWGhoaGhoaFhYWGhYWFhYSEhISEhISCfHFjXl1lb3p/f4CAf315eHx+fHx+gYGDhYaHh4aGh4iKjIyMjIyNjYyLiIODg4WGiYyOkZKSkpKSkpKUjoNybGxucHZ9hIuQk5SVlJWVlZaWlpWSjIZ7c3N1eoGHi42Oj4+Ojn19fX18fHx8fX18fHt7enp7e3t7e3t6ent7fX18fH19fH19fX1+f39/f39+fn5+fn5+fn5+fn19fX19fX19fX18fHt7enp7e3p6enl5enx8enx8fHx5cGxta25yeYCAfoCAfnpza11aXWpzfYeLh4OEiY6MiomKiYmJi4yOjYmHhYN/e3VuYm+Bi4uLjIyKioqKiYmIiIiIiYeIiIaGh4eIi4uJiYqKi4yMjIqJh4WDgoCCgoSGhoeHh4eHiImKiYSAfX+Bg4SEhYWGhoaFhoWEhIODg4SFhYaFhIN8cWVeWVxlbXR7f316eXl5e39+fXx+goSEhYaHh4eIiYuOjY2NjY2NjIqGhIKFhYiMj5GRkpKSkpKSlJGHem5ubG1xeICHjpKVlZWUlZWVlpaWlI+LhHdzcnV9hIqKjY6Oj4+LfX19fXt7fHx9fXx8e3t6ent7e3t7e3x8fHx8fHx8fHx8fX19fX5+fn9/f35+fn5+fn5+fn5+fX19fX19fX19fX19fHx8fHt7fHx6eXl6e3t5eXp7eXVua2tqam54fH5/gH97dGtiW1xhZW14hYmFgYSMj46JiIiIiIiJi4uKh4aGh4aDgoB9foKHiYmKioiIiYiJiYiIiIiJh4iIhoaHh4iKiomJiYmKi4uMjIuKiYeEg4KChIaGh4eHh4eIiYmEfnl3eoCCgH1+foGDhIWGhYSEg4ODhIODg4ODg31yZV5cXWBpcHd5enp5dnZ4e3x7en2BhIWEhoeHh4iJjI+NjY2NjY2Kh4WDhIaHioyPkZGSkpKSkpKSjH5xbW5tcXV8gYqQkpWVlZSVlZWWlpaUj4p/dHN0eH+Gi42Njo+OioR9e3t7e3t7eXt7e3t7e3p6enp6enx8e3t9fX19fX16en19fX19fX19fn5+fn5+fn5+fn5+fX19fX19fX19fn5+fn59fXx8fX19fXt6eXt6eXd2eHl3cmxnZ2dobXV7f39+eXBpZWRjZWNhZ3OCiIaBhI6TjYmIiIaGhoeKiYeIiIeIiY2LioeHhoaHh4iIh4eHhoiHh4eHh4iIh4eGhoaHiImLiomJiImJiYuLjY2KiYaFhYWFhoeIh4eHh4iJh4J5dnZ7gX99eXl5fH+EhYeGhISDg4ODg4OBgIB+e3RpYmBfXmZtcXR4fHt6eHh7e3x7foGEhYSFhoiHiYqNjo6NjY2MiomGg4KEh4qMkJGRkZOTk5OTk5KIeW5ubm91e4CFjZCTlZWUlJSUlZaVlZKOiH51dXZ5gYiMjo6OjouEfH17e3t7e3l7e3t7e3t7enp6enp6enp7e3t7fHx7e319fX19fX19fX1+fn5+fn5+fn5+fHx9fX19fX19fX1+fn5+fn19fHx9fXx8ent7enp5dnV2dnVxamZjZmdob3d/f3hwaGRlamxnYmBia32Ih4CCjZWQiYiJh4aGhIeJiomJioyPkI+NjIuKh4eHh4eHh4aFh4aGhoaGhYWGhoaGhoeKi4uMi4qJiouLi4uLi4qJiYeGhoaHh4iHh4eHiImHgXt2d32Bf3p3eHx+goOFhYSEhIODg4ODg4F9e3RtaGVlYmBgX2BhaXF7f3t0bm1xdHh5foKEhoWGiIeJio2Ojo2NjYyKh4OChIaJi42QkZKSk5OTk5OTj4NybW9wcXh9g4iOj5KVlZSUlJSVlpWVkY2Ge3R1dXuDio2Mjo2LhHhue3t5eXp6enp6enl5enp5eXl5enp6ent7e3t7e3t7e3t9fX19fX19fX19fX19fX19fX18fH19fX19fXx8fn+AgH19fX19fXx8e3p6enl5eXl2dnRzcm1nYWJjaGVocnl6cmlkaG5zcnFoYF5mfY6Og3+LlI+IiImJhYSEhIaJi4uLj5KSj46LjI2KiIaGhoaGhYWFhYWFhISFhYaGhoaGh4mKjY6NjYyNjIyLi4uJiomKiIeHh4eIiIiIh4eIh4aBfHp8foJ/fHp7foODhIWDg4SDhIODg4KCgHprUkZOXGVjYWBhYGBlbHV3cm5oYl1bZG91fn+DhIeIhomLjY6OjY2Mi4eFgoOEh4qMjpCQkZGTk5OTkpGLfHFucHB1eX+Gi46Rk5WVlJSUlJWVlJOQi4J5d3d5f4aJjI2Oi4Z6b2t7e3t7enp5eXl5eXl6eXl5eXl5eXl5enp7e3t7e3t7e319fX19fX19fX19fX19fX19fXx8fHx8fH19fn5+f35+fX1+fn19fHx7enp6eXl4eHd3dHNwa2ViY2dpaWhqc3dya2xxeHx7d3FoY2iAkZKHgYeQjoiIiYmHhoKBhIaJiYyQkZOUk4+NjYyIh4aGhoaFhYWFhYWEhISEhISEhIaHiYqNjo6OjY6Qj46OjIqJiYmKh4eIiImIiIiIiIiHhoF+fX+AgYB9fH6Bg4ODhISDgoODg4ODgoJ+dWVZWGBlZ2ViYWJlZWNkZmxsaGReWVVPVV1eZnKAhoiIiYuNjo6NjIyJhoSCg4SJi42PkJGSk5OTk5OTkIV3cXNydXl9gIeNj5GTlZWUlJSUlZWUko+HfHZ3d3qAh4qMjo2HfHJta3t7enp5eXl5eXl6enh4d3d4eHl5eHh6ent8fHx8fHt7fX19fX19fHx9fX19fX19fX19fHx8fHx8fH59fX19fX1+fn5+fnx9fHt5eHh5eXl5eHd1cm9oY2Fkam1sZ2VrcnFwcnV7gIB/e3JtcYKQlIqDg4qMiIaIiIeGhIKDhYeHi42QkpSUko+PjImGhoWGhoeHhoaFhYSEg4OEhIODhIaIio6NjY2OjpCQkZGPjouLiIiHiIaHiIiJiYiIiIeFgn9/goKDgoCAgYODgoKBf357foCCgICCgn13cXN9fHZuaWRjZ2tqZWFjZGZlYVhTT05UU09RZHmEhYiKi42Ojo2MiYaCg4SEh4qMjY+QkZOSk5OSk5ONgnV0dHR5fH6Cio6RkpSUlJSUlZWVlZSRj4d8d3h4e4OHiY2MiYB0bW1uenp5eXh4eXl5eXl5eHd5eXl5eXl5eXp6ent8fHx8fX19fX19fX1+fn5+fn59fX5+fX18fHx8fHx8fn19fn5+fn5+fn5+fH18e3l6enp6enp4d3Z0b2tmY2hucnJvamtxcW9tcHl/gYKAenR2gpCZkoR/houJiIiIh4aFhIKDhYWHio2PkpSSkpCNiYWEhYWFh4eHh4WFhISDg4SEg4OEhoaIiIqMjY6OkJKSk5GQjo2KiIWFhIWGiImJiIiIh4SDg4OEhIOAeXJyd3yAgHx0cG9yd3t7e3x8f3+AgYN/d29nY2RocG9qZGJgX1pTS0dGRkBLSkxXZXJ+homLjI2NjImGg4KBg4WHi42PkJGRk5KTk5KTkol8dHNzdHl9f4KKj5GSlJSUlJSVlZWVlJGLgnl2eXl9hYuNi4iCeHBtcHN5eXl5d3d3d3h4d3l4eHl5enp6enh5enp7e3x8fHx9fX19fX1+fn19fX18fHx8e3t9fXx8fHx8fH19fn5/f39/f318f318e3t7e3x8fHx6eHh3dnNuamdmanF0dXJua21ubmlocn2Cgn98d3iDkJeThX2CiImJiYmJiIWEg4OFhoSHiYqQkpGQjo2GfX+DhYWGhoeHh4eGhoSDgoKDg4SEhIWHiIqMj46QkZKRkpOTkY2Kh4aEgYOHiIiIiIeGhoaFhYeEenBqZ2dnanB1dXFuampucHNxcHN4fIGDgX1zamJiYWRucGxlYlxZVExAOjY4PUVDQEhVZnWAhomKi4uKiYSAgoOFh4qMjZCRkpKSkpOTk5SOhHZxcnR2e35+g4qQkZOUlJSUlJSUlZWTkoqBd3Z5eX+GjI2KgXZvbnF1dnh4d3d3d3d3eHh3eXh4eXl5eXl5eHl6enp6enp8fHx8fX19fX5+fX19fXx8fHx7e319fHx8fHx8fX1+fn9/f39/fXx8fHt7e3t7fHx8fHp4eHd1cm5qZWVob3R1dHBrampqZGNteoCBgHp2doCNlZKIfXyChoiJiYmIh4WFh4mHhoaGiIuOjY6Lg3Jjbn2ChIWFhoaFhYaGhIOCgoODg4ODhIaHiImKi46PkJGRkpSTkI6LiYZ8dnl/hIWHh4aGhoSFgXZsaWlnZWZnaW50dXJtaGNkZ2hnaXN8gIGBf3VrZ2NhYmpycWpjXVpVT0lCPD5HTU5SV1BNY3F9homLi4mGgoCBg4aJi42PkJGSkpKSlJSUkot+dXN0dnh9fn6CjZCRk5SUlJSUlJSVlZKOiH13eHl7gYeLi4R7cW1udHl8d3d2dnd3d3d3d3d3d3d5eXh4eXl6enp6enl6ent7fHx9fX19fX19fX19fXt7e3t7fHx9fXt7fX19fX19f39/f358enp5eXl8fHx8e3t7e3t5eHZzcGtkY2Vuc3d4dXBsa2pnY2p3f4B/eXR1gYySk4uCfn6EiIiIiYmHh4iNjYuHhYWGiIqJioR2ZlhZc36ChISDhIWFhoWDgYKBgoKCgoOEhYWHiIiKjY6QkZGRk5ORkI6NiIBzcnZ8g4eGh4aIhYJ5cW9wcGxqaWpqbXR2dm5pZWJgX2Bmc32DhISCeG1oZWJjbXp6cmtkYF1ZVlpcWllZVFlfSCxAX3SEi4qIhYB/gIOEh4qOj4+PkJKSkZKUlJSSiHlwcHJ1enx9foSNkJGSk5SUlJSTlZWVko2FfHd4eXyCiIqIfXRvb251fX91dXZ2d3d3d3d3d3d3d3d3eHh5eXp6enp6eHl5e3t8fH19fX19fXx8fHx8fX19fHx7e3t7fX19fX19gICBgX9/fnp3dnV1eHt7e3x7e3t7e3t6dnNvbGZjYmhucnd2dHBramdjZXR9fnh2c3aBjJKTjod/fYGGh4eJiYmJi4+RkYyIgn59e3x6dWphVE5beYCEhIOEhYWFg4OBgYCBgYKCgoODg4WGh4mNjo+RkZGPj4+QkI6Kg3hxc3N5f4GChYaEfnd1c3R2d3Vwbmtsc3d3dnJuamZmZmt2f4KDg4N9cmxmYmZzenhza2VkYF5dXmNmZV9eX1k9LDFBVGl8hIaDgYGBhIWJjI6Pj4+QkpKSlJWVlJGEeHFxcnV6fH1+hI2QkZKTlJSUlJOVlZWQjIN5dnl6foOIioN4cXBxdXyBgnR0dnZ3d3d3dnZ4eHd3dnZ3d3l5enp6enp6eXl6e3x8fHx7fH17fXx9fX19fX18fHx8fHx9fX19fX5+f4B+fn59e3dzcXN2enx+fH18fHt6e3l5dnJtZ2Jjam9zdXZ0cm9samRhaXFyb3BzdoONkpKQioJ9f4WHiIiIiIqOk5SUkouDeW9pbnFsZmBUS0xje4KEhISEhYODg4KBf39/gYGBgoKDhIaHiIuMjI6LiomJh4eIiImEdm5ucnV5fH6AgoB8eXh0dX2CgHZwbm9xdXZ1dXRxcG5ucXZ+goODg3tybGRfY3B3d3RvaWNjYmJjZ2psa2RbTTo4Rk9acIOIiIiNi4uIiI2Ojo+Pj5CSkpKTlZWUj4Byb29vdnp+fYCHj5KRkpOUlJSUlJSVk5CJgXp3eHl/houFenRwcXJ4goeEdnZ2dnZ2d3d4eHh4d3d4eHl5eXl6enp6enp6ent8e3t8fH5+fXx9fH19fHt8fH19fHx8fH19fX19fn5/gIGAgHx6d3NxcXN3e3x+fn5+fHt6eXh2cm1lY2ZucXZ4eHd2cG1rZl9iaWlpbXJ4g42Sko+LhX9/hYeIiIeIi5CWlpeTjod9bmdna2lkXlZPR01sfIWFhYSFhYWEg4KBgYGBgX+BgYKDhIeIiIeGhoWFg4SEg4SFg4J7dHFydXl6eXl6eXd5eHuAgoWDenFvcnZ5eHd3d3ZzcXF0en+Bg4ODfXNtZmJodHt7dXFqaGhnZWRkY2NiXlREOj9Yd4eRkY+MiYSBgoOHi46Nj4+PkJKSkpOTk5SPfnJxb292fH99gImQkpGSk5SUlJSUlJWTj4h/eXl5eoCGhX11cnN1d3+IiYN1dXZ2dXV1dnd3eHh4eHh4eXl5eXl5eXp8fHx8e3x8fH59fn58fH18fHx8e3t7e3t7e3x8fHx8fHx9f4CBgYCAf357d3JxcXR5fX6Af3x7d3Z0dHFvaWVmanB1dnh5eHZ0cW9rZ2hqbWxvc3qFkJKRkI+KgX+Eh4iIiIqNlJiZl5OSi4N1bGloaGNbUk5IRVB1gYWFhYWFhIWDg4KBgICAgICAgYOEhoeGhoiGhYWEhIWGhIKDg4F6dnJ1eHp5ent5eXp4fIGFh4J6c3Bzenx6eXd3eHZzc3d9gIKDhYN8dGtlZG54fHl0cW1sbGhiYmNiX2FgVEtIUGmGk5iZloh/eHV4eHd6hYyPj4+QkZGSk5OUlI17c3BvcXh+f36Bi5CTkpOUlJSUlJWVlZOPhX57enl7gYN/dnJxdXZ6g4yJg3V1dnZ1dXV2d3d4eHh4eHh3d3l5eXl5ent7e3t7fHx8fXx8fHx8fXx7fHt7e3t7e3t7e3t8fHx8fn9/gIGBgIB/fnt3cnFwcnh7fHt2dG9raWdoaWhmZWluc3Z3dnh4eXh1cnBydHV3cW5xeIKNkZKUkoyEf4SHiIiKjJGVmZqZlJOQioB2bmhkYl5XUEtDQ1h5gYaFhYWEhYODgoOBgYGBgYGChIWFhoeHh4eHhoWFhoWEhISCgYF9d3R3eXl7e3x8e3p9f4OFgnlzcXZ9fn18enp5eHV2en2BgoOEgXlxa2Vmb3d5c25rbG1tamViY2ZjYmFaU1BYcIuZn56NgHp6d3Rybmx2h5CQj5CRkZKTk5SUiHhxcHByeX5/fICLkJOSk5SUlJSUlZWUkYuEfHp6eXt/f3l0cnN3e4GKi4aAdXV1dXV1dXZ3d3d4eHh3d3h4eHh4eHl5enp5eXp7e3p7e3t7e3t8ent7enx8fHt7e3t8fHt9fn59fn5/f39+fn9/fHl0bm5vdnt6d3FpZGBfXlxdYGNobnR1eHh4eHl7eHdzcHR5fHxzb3N4gIyTlJSSjoWAgoiKioqNj5SZmpmXlJCMhX91bmpmYVtTTEdARGJ7hIWEhISDg4ODgoKDg4KDgoSEhoaGhoaFhoaGhoeGh4eFhYSEg4N8dnV4eXp6fnx7fX9/f4F+d3BwdoCCgoGAf3x6d3d5foGDg4N/dW9rZWh0fHp0bmloamptZ2RlZmRhYl9ZWF90ipqgn4uBgYF5dXFsZmNyiY+SkZGRkpOUlJOIeG9wcHJ5fX19g4yRlJSUlJSUlJSVlZOPioN7eXp4e316dHJzdniAhIyJgX90dHV1dXV1dnd3d3h4eHd3d3d4eHh4eXl6enl5eXp6eXt7e3t7e3x6e3t6fHx8e3t7e3x8e31+fn1+fn9/f4CAf39+fHZxbm9yeHdzamVhY2ViX15fZWxydnh4eHh4eXt5d3Rxc3l8e3JucnaAjZKUlJWTjIWEh4mMjJCSlpeZmJaSkY6Kh4B8eHFoX1lRR0A8R2h6g4SCgoODg4ODg4SFhYSDg4WGhoeHh4eHh4iKiYmJiYiGhISBgoJ8eXl7e3t+fHt9gIB9enhycHF4gYODhISDgH56eHp+gYODg350b2ljaHR8enVsaGdpbWtoaGloZmRiX19fZHOHlZyakIqFgXlwaGRiXmJ1iJCRkZGSk5SUkIV3cXJzdXt/fX2EjpGUlJSUlJSUlJWVk4+KgHt7enh4eHZxc3V5f4aLiYaBf3R0dXV1dXV2eHh5eXl5d3d4eHh4eXl5eXp6enp6ent8e3t7e3t7e3t7e3t7e3t7e3x8fHx8fH5+fX5/gH9/f39/f39+enRxcHB0dW9mZGhtcG1mZGZuc3Z5eXh4eXl6enl4dHN0eHx6cm9xdXuHjZGUlJaRjYeGiIuOkJKUlZeVk5GPi4mIhYJ9dGphWldNRT9DUnB8gYOCgYODg4KDhYaGhoSDhIeJiYqIiIiJjI6Mi4qIh4eGhYKCgn57fHx8fH9+fH6AgHx5dXJwcXqBhISDg4KCgX58foCBg4WEfHNtZ2NqdX18d3BsaGtsa21ubmtnZWNhYGJkcH6NlpWPiYWCeG5kXl1cW2R6jpKRkZKTlJSNf3Vyc3J0fH9+foaQkpSUlJSUlJOVlpWTj4V9e319eHV1c3N1eHyCiomHhYKAdnZ2dnV1dXZ3d3h4d3d3d3h4eHh5eXl5enp6ent7e3x7e3t7e3t7e3t7e3t7e3t7fX18fHx8fX1/gH+Af39/f39/gIF9dXFtbG9xbmhpbXV6eXJraW51d3l5eHh5eXl5e3l2dHR3enlzcHFyd4GIjI+SlpeTjYqMjZCRk5OUlZSSkI2KiIeHhoF5cGdeWVZPSURGVHKAg4OBg4ODg4OFhoiIh4WHiYqJi4mJi42PjoyKiYeGhYWFgoKDf3x8fHx8fn18foKBf3x1cXBzfoSGhoWEgoKCgoKCgYKEhoN6cmxjZGx4fXx4dHBsa2tub29vbWtraGVkZGZscX2IjImFgoF9dWpiX2BeXGmBj5GRkpOUlI+Bc3BvbnR8f35+ho+RlJSUlJSUk5WTlZKOhX58fn54c3FxcnR4gIiKioeFgX9zdHV1dHV1dnV1dnd3d3h4eXl5eXh4eXl5eXp6e3t7e3p6e3t7e3x8e3t7e3t7e3t8fHx8fHx9fXx/f3+AgH9/f39/gYB+dG1pa2xpZ2dyenx5d3RydXp6eXh5eXl5enp6enl4dXV4eHVxcXJ3gIWHjZGXl5OQjY2Oj5GSk5STkZCOjImHhoWEg4B6cmVaWFlSTklMXHeChIKCgoOEgoSFiIuKiYmJiYuLi42QkJCQjoyKhoaFhIaDg4OBfXx8fHx9fH1/g4OAe3Rxc3N9hYaHiIaFg4ODhYWGh4aGgndwbGdocnt+fHh4dXBvbWxtcG5tb3BuamhpbG1tc3yDhISAfnhyaF9gYmJhYXOMkpGTlJSTi3xyb3Fxdn6Af32Fj5OVlZWVlZWTlZWVkouDfXt+fXhxb3NzdXyCiYqIh4aBfnN0dXV2dnZ2dnZ3eHl5eHh5eXl5eHh5eXl5eXl6enp6enp7e3p6e3t7e3t7e3t7e3x8fHx+fn19fn5/f4CAf3+AgH+BgH55b2trZ2NhZW93fXx7enp6e3t6eXl5enp6enp6enl2dnh5dHBucXd9goWNlZeXk5CNjYyOkJGTlJORj42LiIaGhYSDg4N/cl9VVFdXVFJbZ3mBg4OCgYGAg4aMj46Ni4qLjI6Oj5KUkpCPi4eEhYSEhISEhIN/fn5/f318e3+EhIB7dXJxdH2ChYaHh4eFg4OEhIaHhoZ9cm1pZmpzfXx5eHh2dHBvbm5yc3JxcHFwbnBzdHR3eHyAfXl6d29lYF9iZGJgbIKRkpOUlJOLfHJvb293f39+fYWRlJWVlZWVlZOVlJSRioN9fX56dXFvcXV5gIaIiIeHhoF+cnN0dHV1d3d3d3Z4eXl3d3h4eHh3d3h4eHl5eXp6enp6enp6enp6enx8e3t7e3t7e3t7fX5+fn5+fn9/fn5+fn9/foCBf3x3cWxnYl5faXN6fn5+fXx7e3t5eXl7e3p6e3t7eXd2dnd1cm9zfH+CiJCWlZSTkI6NjY2OkZKUlJKPjImIhYSFhISEhoeDeWZXVlpcXFlfa3yBgoF/f4GDhoyOjo2Li4uNj5CPkpSTj4uIhoWFhIOFhYWFhYN+fn1+fHp6f4SEgH12cXB3f4OGh4eIiIiEgYKChYWFgnlubWpmbHd9fXt5d3d4c3FwcHN0cnBxcnFwcXV4eHRwc3V1c3NvamNeXmJlZ2Zpd4mPkJGUkol6cnFwcHh/f358hpCTlZWVlZWVlZWVk5GLgn5+fnZzbm9ydHuEiIiIiImGgn9vcXR0dHV2d3d3dnh3d3d3eHh4eHd3eHh3eXl5enp6enp6enp7enp6e3t7e3t7e3t9fXt9fn5+fn5+f39+fn9/gICAf3+AgH55cmtmYV5kcHp+fn59fHp6ent6ent7enp7e3t5eXd3eHl5eX2Ag4aKjZCUlpSRjo2MjI6RkpSUko6LiYiHhoSEhISGh4aGfXJjWlteX2Bmcn2Bf3+AgYSGjI+Qjo2Nj5CQkJCRko+LiIiIiYiHh4iHhYWFg4GBgH99e3p/hISBfndxcHZ+hIWGh4iIiIWDgoKDg4N8cWxsamhweX98eXh5eXp4dnRxdHZ0bm1sa2pqbnBwbmxsbG1tbm9saWFcXWNnaGhvfYWKi42LhHhxcHBweH9/fn6HkZWVlZWVlZWVlZWTj4d/fn97dHBub3N3gIaIiIiIiYaCf29xcnNzdnd2d3d5eXl5eXl4eHh4eHh5eXl5enp6enp6eXl5eXl6enl6enl5e3t8fH19fHx8fX5+f39/f35+fn6AgICAgICAgH54cGtmZGhwen1+fX17eXp7e3t7e3x8e3t7e3t6eHh3e3x+gYSFh4WGjJKWlJGMi4qJjI+PkZCPi4iHhYWFg4OChIWGhYWDgndsXlhdYmt0e3+Af4GDhoaLjY+Pj4+Qj5KRkZGOi4iHiImLjI2KiIaGhYODgoGBfnt5en6Bg4J6cmxrbXJ7f4SFh4eHh4WEgYB/fHNta21raWtvcXZ5ent9fX19fHh5eHVtZl9dXV1fZWhnZmVnam1wbWtnZGBfYWhpam1zeXyAg4N9cHBwb3F4fn99fomSlZWVlZWVlZWVlZOMg35+fnlyb3BxdHyDh4eIiYqJhoJ/bm9wcnJ1d3Z4eHl5eXl5eXh4eHh4eHh4eHh5eXp6enp6ent7eXp6eXl5eXl7e3x8fX18fHx9fn5+fn5+fn5+foCAf3+AgICAf3t6dXFwcnh+f359fHt6e3t7e3t7e3t7e3t7e3p4eHl8gIKBgYKCf36EjJKTkYyIhoWEhYaHh4iHhoOCgoKCgoSFhoWGhoeFhH93amFga3l9fYCCg4WGh4qMj4+Pj4+OjY2MioqHiYmKjI2Pj42Kh4WFg4ODgoF+e3l6foOCfHFpY2FjZGh0foSGhoaHhYWCgH92bGpramllaGxramxvcnd5fYB9eXZybGVcVlRUVFZbZGhqbW5wcHFubWllYWBjZmhpaWdobHF2dnJtbGxtb3l/gH5/ipKVlZWVlZWVlZWVk4uCfn99dnFwcXN2fYSGh4iJiomGgn9tbW9wcXR0dXZ3d3l5eXl5eXl3d3h4eHh3d3h4eXl6enl5eXl7e3t7e3t7e3x8e3t8fH19fX19fX19fHx9fX5+fn5+fn9/f3+AgH5+fHx8fX18fXx8fHt6fHx9fXx7e3x8fHx8fHx5enyAhYSCf317eX+FjZKRjIiFhIODg4OFhoOCgoGCgoKEhIaFhYaGhoaGg4F8eXt9fX5/gYSFh4aIio2Pj4+PkI6NjIyLioqLi4uMjo+QjomHhYWDgoKCgH96eXl+gX50aWNiY2JhYmt2gYaGh4eHh4WBfXJoZ2hpaWVqbGxnZWNiZWlwdnZybWhjXldST1BTWV9sdnt6enp4eHNwa2VkYmNkZGVmZWJiYmZoaGhoaGtud36BfYCMlJWVlZWVlZWVlZWRioF/f3tzcXFzdXmBhIaHiYmKioeDgG1tb3BwcnN0dnd3eXl5eXl5eXd3eHh5eXl5eHh3d3h4enp7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn9/gIB/f3+AgH5/fXx8e3p6ent7fH19fHx8fHx7ent8fH2EhoSCfHp6foCIkJGOiYWDg4OEhISFhYSDg4ODhIWGhYWFhoaHh4eFhIWDgoB9f4GDhIWHioyOj4+Pj4+Qjo2NjYyKioqKioqMjpCNh4ODhIaEgoKCgYF9fH5/e3BqamlpZWJgY218g4WGhYWGh4N7c2tqamhoZmhpaWlnZWVjZGJjY2RjYmBdXFlZWl5oeYSFhYODf318d3NwcG9raWttb3Bta2lnZGFjY2NjY2dxeHp5fouUlZWVlZWVlZWVlZCHfXx8eHJ1dXN1e4KGh4eJiouLhoF+bW1ub3Fyc3V2d3l5eXl5eXl5eHh4eXt7eXl5eXp6e3t7e3p6e3t6enp6enp8fHx8fHx8fHx8fHx9fX19fX19fX5+fX17e317fX19fn9/f399fH19fHt6enx8e3t7e3x8fHx9fXx8fX17fIGFhoR+fHx8fYGKj46Mh4SEhIWEhYWHhoWFhYSEhoeGhoaGh4mJh4WEgoF+e35/goOEhoiKjI2Pj4+QkY+Pjo2OjIqJiYmLi4uMjoqEfoCEhYODg4SDgoKAf355c3JxcG5saGFhY3B8fHt6f4GFgnhuamxrZ2ZoamlqaWhnZ2ViYmJiYWJjY2VmZWRpdoSOkoyHgoCBgX57eHZ2dnRvb3R5fn17eXRuaGRlZGRlZWtvcnV/i5WVlpaWlpWVlZWUjoR9enp3cnNzdXh7goaHhoeKjIuHg39ubm5vcHFyc3Z3eXl5eXl5eXl4eHh5eXl5eXl5enp7e3t7fHx8fHt7e3t8fHx8fHx8fHx8e3t7e3x8fHx9fX19fHx9fX19fXt8fH1+f39+fn18fX18e3p6fHx7e3x8fHx8fHx8fHx9fX5/f4OFhoOAfnx6fYKLjo2Kh4WFhoaHh4mHh4aGhYWHhoSEhIaHiYmHhYSCfnx+gIKEhIeIio2Oj4+PkJCQkI+Pjo6NjYuLi4yMjIyNiIN7fYKFg4ODgn+Cg4F9eHR2eHd0c3RvZWBfZmxpaGltc3t7dm9tbm1rZ2dmZWZnZWNiY2JkZGZkYmFnbnN2e4KQmJyckYaDgYB/f319fH+AgHl3en+Fh4iGhH11bWtpZ2VlZmpscXuIkJSVlZSUlZWVlZSNgnx7eXRyc3N1eX6Fh4V+foaLi4eBgW5vbm9wcXJzd3h6enl5eXl5eXl5enp6enl5eXl6ent7fHx8fHt6e3t7e3x8fHx8fHt7e3t7e3t7e3x8fHx8fHx9fX19e3t7e3x8fHx8fX19e3t9fXx8fHx8fHx8fHx8fHt7fHx8fH5+f4B/foSGhIOAfnt8gIaLi4uJhoWFh4mKiIaGhoaEhIWFhYWFhoeJiYiGhoF9foGDg4WFiIqMjo+Pjo6Oj5CRkpGRkI+PjY2MjIyLjIyLh397gIKDhISDgYCBgHpxcHR2cnB0eXZuZmFhZGVkYGJmbHFvbG1ubmpraWlkY2RkZGRjY2RkZmhoZWRtd3yCjZealY+Ig4WHg39/fX6Gjo+JgIB/gYaKi4qKhH12cnBraGVmaGlpc4GJkJWUk5SVlZWVlIt/enp2c3Nzc3Z6gYWIhnt6hoqMhoGBbG5ub29xcnN2d3d4eXl5eXl5enp6enp6eXl5eXp6fHx+fn5+fXt7e3t7fHx8fHx8e3t7e3p6enp7fHx8fHx8fHt7e3t7e3t7enp8fHx9fHx7e3t7fHx8fHx8fHx8fH19fHx9fXx8fn5/gYB/gISFg4GAgH9+goaHiIeGhYSFiIqIhoWEhISEhIWFhYWGh4mJiIaDgICBgYOEhYaJi4yOj42KiIyOkJOTlJOSkZCPjo2Ni4uMjIuJgXuAgoOEhIOBf397c25vcXJvcHR4e3VsYmFkZGVlZmZlZ2lrbGtrbHBzc29pZ2ZkZGRkZWVlZ211bl9ZY3eKk4qFgYCEhYSCf3+EkJqfmJKJhIOChYqLioqIg4J9eXRua2pqZ2dueYKKj5GTlJWVlZWSiHt5eHVzc3Jzd3yCh4eCfYCIjIyGgYFubm5ubnBxcnZ4eXh6enl5enp7e3t7e3t7e3x8fX19fX5+f318fHx8fHx8fHt7e3t7e3t7enp7e3p8fX18e3x8fHx8e3t7enp6e3t7fX17e319e3t7e3x8fHx8fH19fn5/f319fX19foCCgYGAg4SDg4KDgoGAgICEhISFgoCChYaGhISFhIWFhISEhIeHiIiFgoGAg4SCg4OEh4mMjo+Oi4mIio2OkJKTlJWUkZCPjo2MjIuNjoyGgYCDhIWEgHx/fXVua2xvb29ydnl5dWxlZWhpamplY2NjZWdmZGVqbnZ1cGpmZWZlZWJiY2JlampjV0lWdYqQhIGBhoeCgYGAi5ign5+empOLhoWFiIiGhoeGgH9/fXp2c25saGpye4CHjZGTlZWWlZCFe3h0c3R0c3V6f4aHhn59hYqOjIeDg25ubm5ucHFydHZ3eXl5eXl6ent7e3t7e3t7fHx9fX19fn5/fXx8fHx8fHx8fHx9fXx8e3t7e3t7enx7e3p7e3t7e3t6eXl6enp7e3t6ent7e3t8fHx8fHx7e3t7fHx8fH19fX19fX1+gIGCg4GAgoSFhYSEhIKCgoSEg4SEgYCBhISEhISEhYWEhISEhISDgYKCg4ODhIODhIaIi4yPj46Mi4yMjI6QkpOUlZSTkpCPjY2Nj4+Qj4yGg4OEhoSAe3p4cmxrbG1sbnF2eXlzbWhnaWttcG9uamloZ2ZlZGZoamtrZ2dnZmVjYV9dXVtdXVpUUlhlf42EgYOFi4iBiZigoqKfn56enJSPiYWHh4eHiYmEgX+Af3t5dnFtaW9zd32Eio6TlZSUjH93dnRzdHRzdnuCh4iBeoGJjI6MiISEb29ubm5wcXN2dnd4eXl5eXp6enp7e3x8fHx8fHx9fn5+fn5+fn58e3t7e3t8fH19fHx8fHt8fHt7e3x8e3t7e3t7e3t6enp6enp6enp6enp7e3t7fHx8fHx6e3t8fHx8fn18fH19fX6Ag4OEg4F/goWHhoaGg4OEhYOEhYiIhIOEhIOEhYWEg4SEhISFg4KBgIODg4WFhIWGiYqMj5CPj5COjY6PkJGSlJSUlJOSkJCPj4+QkpCQj42IhYSFhYF3cm9sbnBwb2xtbXR5e3Nua2hobHBwdXd1cG9saGZjY2NiY2doaWppaGhpZV1aWFlZWFlfYWV2h4eEh4iJiIuXoKKgn5+fn5+em5aRjIyLiYeJiIaDgYODgHt6d3BscHJ0eX6GjJCTlZKLfnd1dHNzc3N4gYeIg3x9hoqOjoyHhYNvb25ubnBxc3Z2d3h5eXl5enp6ent7e3t7e3x8fX9+fn5+fn5+fnx7e3t7e3x8fHx8fHx8e3x8e3t7e3t6enp6enp6enp6enp6enp6enp6enp6e3t7e3t7e3l6ent7fHx+fn19fX19foCDhIWDgoCAgoeIiIeEgoOEhYaFh4eHhoSEg4SFhYWEhISEhIOCgoKDg4WFhIWHiImMjo+RkJCQj4+PkJGSkpKUlJWVlJOSkZGQkZOSkI+Pj46KhoSEgntzbm9wcXBtaWlpb3d4cm1paGlucXR2dXRzcW9rZWJhYWFjZGdsb3BxcnNyamVkZGJgYWdpbHaDi4yOjoyJk52in52dnqCgnp2enZaMiISFhoiIiIV+gIODf39+d25ydnR0dnyDi5GTkYp9dXNzcXNzdnqAhYZ/fIOIjI2OjouGhHBwb29ucHF0dnZ3eHh5eHh5eXl5e3t7e3x7fX1/f35+f39/f359fHx8fXx7e3t9fXx8fX19fXp6enl5eXl5eHh4eHp6enp6enl5enp6enp6enp5eXp7enp7e3t7enx8fH19fn5+fn1/gIOFh4eGgoKChIeIh4OCg4KFhoaHh4aGhIODhIWFhoaEg4SEg4KDhYWFg4WGiIuMjo+QkpCRkpKSkZCRkZGSkpOUlZWVlZWVkpKSkpKQjo6Pj4+KhoSBfHNxcnRzcG5paGdueXhya2djZ3Bzc3N0c3FvbWplZGJiYWNlaG1xcnN2dHV0cm9wbWxsb25xeoSOj4+PjY2YoaSioaCgoKCfoJ+ZioGCg4aJiYiHhXp3fX9+gH56dHl8dnVydnyEio+QiXp0dXR0dHR4fIKDgXyBiI6Oj4+Pi4aFcHBwcG5wcXR2dnd4eHl5eXl5enp7e3t7e35+fn9/f39+fn5+fn19fHx9fHt6en19fHx9fX19fHx6eXl5eXl4eHh4d3d4eHl5eXl6enp6enp6enp6ent7e3t7e3t6fHx8f39/f35+fX9/goWHh4aFhYODg4SFhYSCgYOGhoWHhoWEg4OEhYWEhISDhISBgYSFhYWFhoiLjY+RkpKSkJCRkpGPj5CRkZGRkpOVlZWVlZaUlJWVkpCQkJCQkY+KhoF6cXN0dXVzcW5oZWpzdW9pZWNscnV2dXRzb21rZmRjYmRlZ2ttb3FzdHd2dHJxc3Z0c3N1d3Z4gIqQkpCPk5ykpqSioaGhoKCfloaBgICChomKiYaCdm5ye36AgHt6gYWCeXZ1dX2FioyFeXN0dXV1dnyAhYB8gYaLjo6OkJKMhoVwcG9vbnJzdXd3d3d3d3h6enp6enp7fX1+f35+f39/f35+fn5/f358fX18fHx8fHx8fH19fX19e3p5eXl5d3l5eHh4eHh4eHh5eXp6eXl5eXp8e3t7e3t7fHx7e3t7fHx9fn5+fX1+foCChYiIiIeHhoWEg4OEhIODhIaGhoaGhoWFhISEhISDg4SCg4OFh4aGhoaIiYyQkJCRkI+Pj4+QkJCQkZGRkJCRkpOTlZWWlpaVlZWSkI+QkJCRkI+LhXt0c3l4dXN1cGhma3FxbGdkZW50d3h2dXFva2pnZWRlZmhscXFycnJ1dXFwbnB3e3t4dnZ2c3ByfYqRkI+Wn6WlpaOioqKhoZmHgYCAgICEiYmKiYR2aml1fn9/fXyDiomAeXd4en+GiYJ6dXZ2dnV4fICAfH6Hio6Oj46RlI2Fg3BwcHBxcXN1dXV3d3d3d3h5eXp6ent8fH1+fX1/f39/f39/f4B/f3x9fXx8fHx8fHx8fX19fXt6enl5eXl3d3d4eHh4eHh4eHl5eXl5eXl5eXp7e3t7e3t8fHt7e3t8fH1+fn5/f35+f4GEiIiIiIiIiIaFg4KCg4WHiYmHhoaGhYWEhISEhIOCg4KDhIaHhoeHiImMj5CQj5CPjo6Pj5CQjo6PkJCQkJGSk5OVlZaWlpaWlZORkJGRkZKRkI+Lgnt4eXh4d3dybGpwdHJtamRncXZ3enp3cnBpaWlmZWVpbnZ5d3V1dXNybWhna3J5e3ZzdHRwbW10g46PkZmipaWlo6KioqKdjIGAgICAgICFiYqJhn9xZ217gIB9e4SMj4iAeHN1e4GFf3Z0d3V1dnl5e3qAhoqMjI6PkJKRi4SCcHBxcXBycXR0dXh3eHh2d3h4e3t7fHx9fX19fX1+fn5/f4CAf39/fH19fn58fHt7fHx9fX19e3t7e3p6eXd4eHd3dnZ3d3d5eXl4eHl5enp7e3t7fHx8fHt7fHx9fX19fX1+fn5+f39+gIWIiYmJi42Ni4iFgoCBhIiKioeHh4eGhoaEgoODg4ODhIWHhoiIiYmJio6Qj4+Njo+Ojo+RkZCPjY2OkI+RkZGSk5SUlpaWlpWVlJOTk5OTk5OSkJCOhoB6dnd5enZvbnBzcW1oZmx2eHV4eHRxbWppaWdnZmxxfIF9eHh1cm9uaWRibHV4dXRycnJua3GAi5CUmaKlpqWkpKOgoJODgICAgICAf4WMjIiHgXNpa3mAgH56go+TjIeAeXh7f4B8dXZ3dXZ2eHd6gYaLjo2Njo6SlY+HfnhxcXFxcnN0dHR0dXR2dnZ3eHh5eXp7fH19fX19fX19fX5+fn5+fn5+fX18fHx8fX19fX19fX17e3t7enp5d3h4eHh4eHh4d3l5eXh4eXl6enp6e3t8fHx8fHx8fH19fX19fX5+fn5/f31/goWJioqLjIyMioeFg4KBg4WHh4eIiIiIh4aDg4ODg4SGhoiJiouMjo2Pj4+PjouMjo6PkJGSkZCPj46QkZKRkpOTlJSWlpaWlZWWlJSUlJSUlJORkY+Oi4R/fX59d3JwcXNwbGhmcHp6eHl4dW9qamxsbGxrbHB3ent5dnVycnBrZmVsdHRzdHNzc29vcnyGjpSbo6ampaSlpKKbiIKAgICAgICAho6OhoJ8cWdqdX6AfnqAjZOPioN+e32Af3hzdXZ1dnd5e4GGiouNjo6NjIuKg3lxbnJycXJzc3R0c3R1dXd3d3h5eXp6ent8fHx8fX18fH1+fn5+fn19fX19fXx8e3t9fX19fn59fXt7fHp7e3l5eHh5eXp6enp5eHl5eHh4eHl5eXl6ent7e3t6e3t7e3x9fX19fX5+fn9/fn6AhouMjI2OjoyKiYeFhIWDhISFiIiJioqKiIeHhYODhYaHioqNj5GQj5GQj46OjIyOjpCRkpOSkpGPj5CSkpOTk5OTlJSVlpaWlpaVlZWVlZWVlZWTk5KSkI2IhoB2cXFycm9saGdzf356e3p2cm1tbXBvb29ua21vcnN0eHRzc29sa2xwc3F0dXRycnNzeYWOlJuipqampKSloo+EgYCAgICAgIOEi4yFgHpybW53fYF9en2Kk4+LhoF9gH99eHV2dnd3eH+Ch4mJhIWJiYeBeXRtaWdrcXFxcnNzdHR0dXV2d3d3eHl5eXl4eXp6enp6ent7e3t7e3t7fX19fX19fHx9fX5+fn5+fn19fHx9fHt7enp5eXl5enp6enp5eXl4eHh4eXl6enp6e3t7e3p7e3t7fH19fX19fn5+f39+fX+DioyMjY+Pjo2KiYmIhoWDg4SGh4iLi4qIiIaFhIWGh4eIi4+Tk5GRkZCNjIyMjI6PkZKTk5KSkY+QkpKSk5SUk5OUlJWWlpaWlpWVlZWVlZWVlZSUk5OUk5CKgXhycnJxbmtnZnOBgX1+fnp1c3NzdHJycXBsampqamtvcHFxcXFwbGxvcXR1dHV1c3N3gouRmqKlp6elpaSciIKBgICAgICAgIGFhoOAenJtbnR6fn56fYmSkY+Ig4KAf314dXZ2dnZ7goiKh312dHh3cGpkYmNlam5ycnNzcnJ0dHR0dnZ3d3d3eXl4eHd3eHh5enl5enp5e3p6ent8fH19fn59fX1+fn9+fn1/f399fXt5enp6enh4eHh6enp6enp6enl5eXl5eXp7e3t8fHx8fHx8fHt8fX19fX5+gIB/f35+gIOIjI6PkZKRjoyLiYqIhoWFhIWGhoiIh4aFgoOEhoWGhYiMkZKSkZGRj42Li4yNjo+RkZOUlZOSkZGSkZOTk5SUlZWUlJaWlpaWlZWUlZWVlZSUlJSUlJSTj4eAenZ1dXBuamdkcICEgH18enV0dHV1dHFzd3RvbWhnZmdqbW1tcG5tbG5ydnR1c3R1d36FipCYoaWop6WlopSFgICAgICAgICAgIGAgIF+d29scXV6fXl7h5GSjouFgoGBenZ1dXV1eH6GioqBdm5rbGlnZmViYmVpbXV1dHR0dHR0dHR0dHV1dXV2dnd3d3d3d3d3eHh5eXh6enp7fHx8fX18fHx+fX1+fn5+fX9/f319fHp6enp6enp5eXp6enp5eXp6eXl5eXl5ent7e3x8fHx8fHx8e3x9fX19fn5/f39/fn5/goeMjo+RkpKRjouIh4aHhoaFhoaGhoaHhoODhIWFhYKDiY6SkpGQj4+Ni4yLjI2Oj5GTk5SVlJORkZKRk5OTlJSVlZaWlZWVlZWUlJSVlZWVlJSUlJSTk5GKgXx7fH+Cf3hyamZzgoaCfXp3dXV1dHRyb211fnt3cGtnZWZnZ2lsbGpqa21wdXZ2d3h9hIiLjpaco6Wnp6aikISAgICAgICAgICAgYCBhISDe3Nxc3l7eHuGjpCMiYaCgX53dHV1dXd6gYeGf3hxcG9ub3Fyc3JydHh6dHR0dHR0dHRzc3V1dXV0dHZ2d3d3d3d3d3d2d3d3d3d5eXt8fHx9fXx8fHx9fX5+fn5/f39/fX19e3t7enp6enp6enp5eXl5eXl6enp6enp7e3t7e3t7e3t7ent8fHx9f39/f35+fn59fXx/houQkJGRlJSRi4iHh4eHiIiIiIiHiIWEg4KFiYeHhoeKjpCOj42Pjo6NjYyOjpCRkpSUlJaVlZOSkZGSkpSUlJaWlZWUlJWVlJSUlJOTlZWUlJSUlJORi4N/fH6FiIqJiIR5b3WAg4F7eHV1dXd2dHJtaG57g4J7c25qY2BgZGZnaWxqa25wcnV3eoCFiYyNlJqgo6ampp+Og4GAgICAgICAgYKCgYiPlI6DeXNxdnl2dXyCgX99fX6AfHZ2dnV1d3qAhIJ3cHJ0d3d3enx+goWFh4R0dHNzdHR0dHR0dXV0dHR0dXV1dXV1dXV2dnd4eHh4eHh4ent7e3t7fHx8fHx9fH1+fn9/f399fX17e3t6enp6enp6enl5eXl5eXp6enp6ent7e3t7e3t7e3t6e3x8fH19fX19fn5+fn19foCGjI+QkJCQkI+LiYmJiYmKioqKioqJg4KChIeJiYmIiouNj42NjI2NjI6Pj4+PkJGTlJSVlpaXlZKRkZKSlJSUlJSUlJOTlJSTk5OSk5OTk5KSkpKTkYyFgYCDiIuLi42OjYuHg4aGhH95dXN0dXd2c21nZm98gYF9eHBkYmJhYmNlaGlrbW9xc3yBhIeLjI2Ql52ipaamn42DgYCAgICAgICDhoSDj5iblIyCe3R0cW5ramtoaWlpbnN0c3Z2dXV5e4CBenRzdXd6e36DiIuMiYeEgnR0c3Nyc3R0dXV1dXV1dnZ1dXR0c3R1dXV3d3d2dnd3eHh5eXp6e3t7e3x8fHx9fX1+fn5+fn5+fnx8e3t7enl5eXt7e3t6enp6ent6ent7e3t8ent7e3t7fHt7fHx8fH5+fX19fX19fn1/g4iMjY+Pj5CQjoyKiIqKioqLiomKiYWEg4SHiYuLi4mMjY+PkI6NiYmKjJCRkI+QkZOUlpaWlpaWlJORkZOTlJSVlJOTkpKTk5OTk5ORkZGRkZGRkZGPioWEhYqNjo6NjY6OjY2NjYuJh4J8ent5eHRxbGhlaG96f395c2poZ2NgYGFmZ2doaW1ye4CFh4yMjY+UmqCkp6ehkoSBgYCAgIGAgYOEhIaLkZCPiIF5cWxpZmViYWFfX2JnbXBxcnR1dnh+f312dXZ2eH6Eh4uOjIqFgn96dHRzc3JzdHR1dXV1dXV0dHR0c3NzdHR1dHZ2dnZ2d3d4eHl5enp7e3t7fHx8fH19fX5/f35+fn5+fHx7e3t6eXt7e3t7e3p6e3t7fHt7fHx8fHx7e3t7e3t8fHx8fHx8fn5+fn19fX19f4CEiYuNjo2PkJCNioqIioqKiouKiIiGg4KDhoaHiIiJi46PkJCPj46Lio2PkZKRkJCRk5OVlZaWl5eVlJOTk5OTk5OTkpGQkJGRkZGRkZGRkJCQkJCQj4uIhYiMjY+Ojo2Njo6NjY2NjIuJiIiJh4aEgXx1bWpoaG10dG5ram5va2ppaWdnZmZnaGtyeH2ChoqLjJGXn6Olo52RhoODgoF/f35+fnx8e3h4d3Z0b29pZmVkY2NiYF1cX2BjZ21wc3V1eHp7d3d7f4OIi4yOjo2KiIWCgYBzc3R0dHR0dHV1dXV0dHNzc3Nzc3R1dXZ2dnZ2dnZ2dnZ2eHh5eXl6e3t7e3t7e3x9fX5+f35+fn19e3p7e3p6enp7e3p6e3t6e3t7fHx7e3t8fHx7e3t9fHx9fXt7fHx+fn5+fX18fn+ChIaJi42Ojo+PjYqJiYmKioqKioqKh4WCg4SFhIWHiImMjpCSkZCQkIyMjI6QkZKSkZGRkpSVlZWXl5aWlJOSkZGRkpKRkI+PkJCRkZCQkJCQkJCQj4+Oi4iIio2Ojo6OjY2NjY6Ojo6MjIyMi4qKiYmKh4SBfHRwcXFvbWptcnNzcXRybmpnZWRkaG1ydnyAhYiJjZKcoZ+XkIaAfX18enl5enl4dnV0dHNxb2xoZ2ZlZGRjY2VmZmJhYWFkZ2tudHd7fYGDh4uPkI+Pjo2JiYmGhYOCg3Jyc3N0dHR0dXV1dXR0dHRzc3NzdHR1dnZ2dnZ3d3d3eHh5eXl5eXp7e3t7e3t7fH19fn5/fn5+fX19fHx8e3t7e3t7e3t8fHt8fHx8fHt7fHx8fH19e318fHx8e3t7e35+fn59fXx+gYOFiImKjI2Oj46LiomKioqKioqKiYaDgoKEh4iHh4aHioyNjY2Nj5CQj42Mjo+QkpOTkpGSlJWVlZaWlpaVlJGQkJCOjo2NjIyOjo2Njo6NjY6Ojo6Ojo2MiomKjI2OjY2NjY2Njo6Ojo6OjY2LioqKiomIiIaHhoSFgoF/foCBgoKDgoF7d3JqZ2RkZmlucnd6fYSIjI6MhoB8eXl4enl5enp6ent7eHl3dnRycGxpaWRjYWNlZmhoZ2ZkZGRlZmhsdYKHiouOj5CPjY2LioqJh4aGhYOEc3Nzc3Nzc3N0dHV0c3N0dHNzcnNyc3R0dnZ3d3d3d3d4eHl5enp7e3t7fHx6enp8fX1+fn5+fX19fX5+fXx8fHx8fHx7e318fHx8fHx8e3t8fH19fn59fX19fX18fHx8fn5+fn18fn+ChYeJiouMjo+PjIuKioqKiYmKiomHg4F/goaKjYuHhoeJi4uMjI6PkJCOjY2OjpCSk5KRkJCSk5WVlJSWlZWVkpCQj46NjIuLi4uLi4yMjIyMjIyMjIyMjIyKiYqLjY2NjY2NjY2NjY2NjY2Ojo2Ni4uJiYmIiIiIiIqKiYqJioyMiomGhoWEfnVuaGRkZmlqbG9yeXx7enl4eHh4eXh4e31+gICAgoODg4F9eXZ1c3BsaWVhYGNnZ2hqamlnZmNjY2ZrdoGJi42MjY2OjoyLi4qIiIeHhYV0dHR0dXV1dXZ2dXR0dHR0c3Nyc3V1dnd3d3d3eHh4eHh4eXl5eXl5e3t8fHx8fH19fX5+fn59fX19fX18e3t7fHx8fH19fXx8fHx8fHx8fHx8fX1+fn19fX19fXx8fHx+fn5+fn19goSHiIqKi4yOkI+Ni4qKioqJiYeIhoN/gIOGh4qNjoqGhoeIiouNjo6QkJCOjo6OkJKTkpGQkJGSk5SVlpWVlZWTkZCPjIuLiomJiYmJiYqKioqKioqKioqLi4qJiIqLi4uLi4uLi4uLjIyNjY6OjY2NjYyMiomIiIiIiIiKioqMj4+Pjo6Ojo2Jg3pvaWdnaGloaGtsbm9xdnZ4eHl7fYCHjJGTkpCMi4yLhn56d3d1cnBua2ppZWVpbW9vbWtpZmNjZWRlbXyGioyNjY6OjoyLioqKiYmHh3NzdHR1dXV1dXV1dHR0dHRzc3J0dXZ3d3d3d3d4eXp6enp5eXp6enp7e3x8fHx8fXx+fn5/f319fXx9fXx8fHx9fX19fX18fHx8e3t9fn5+fn59fX19fXt7e3t7fHx8fHt7e3x7fYCDhYeJiouMjo6QkI2KiYmJiYqKiIWDfn6DhoeGiIuMjImGhoeLjZCOjo+QkJCOjo6QkpKTkpGPj5CRk5SUlJSUk5GQkI2MioiHiIaHh4eHiIiJiYmJiIiIiIiJioiIiIiJiYmJiYmJiYmJio2Njo6Ojo6OjIyMioqJiIiJiYmJi4uMjY6Pjo6Pj46MhXtwaGppaWpsbGdnam1vc3N3fIKMkpaYm5uYk5GSkIh+eXh4eXl3eXl2dW9qamxtcXFvb2tqZmNkZGJlcICJjo6Pj4+OjYuKioqJiYiIdXV1dXV1dXV1dXV0dHR0dHNzdHV2dnd4eHh5eXh5enp7e3p6enp6ent7fHx8fHx9fH5+fn9/fn59fH19fHx8fH19fX19fXx8fHx8fH1+fn5+fn19fX19e3t7e3t8fHx8e3t7fH5/goWHiYmLjI2Ojo6OjIqJiYmJiIeFf3x9gYeIiIiIiYuMjImIiIqLjIyNj5CQkI+Pj5CSkpOSkY+PkJGSk5SUlJOTkZCPjYyKiYiHhoWFhYWGhoeHh4eIiIiIiImIh4eHh4iIiIiIiIiIiImKi4uMjI6Ojo6MjIyKiomKiomJiYmLi4qMjo+QkI+PjYuKhXtybGloaWxsaGVlZ2hscXV+hoyQkpKTk5SSkJGNiYWEgoOFhouMioV9dHBwb3FycnBwcG5qZ2RkY2JmcoONjo+Pj46Ni4qKiomJiop2dnV1dnZ1dXZ2dnV0c3NzdHR0dnh3eXp6eXp6e3t7e3x8e3t7e3p6e3t6ent7fX19fX5+f39/f31/fHx8fH19fX19fX19fHx8fH19fn5+fn59fHx8fHt7e3t8fHx8fHx8fHx9f4GFiImLi42Pj4+PjY2Mi4mJiYmHgn57foGFi4uKiYiKiouMi4mIiImJio2PkpGRkZGSkpKSk5GRkZGRkJCRkpOTkpGRkY6MjIqJiIeGhIODg4SFhoaGhoSGiIiIiIiIh4aHh4iJiYiJiYmJiYmKiouNjIyNjY2NjIyLiomJiYmJiYiKiYuNjo+PjY2NjYqIhHpxa2Znam1ramZjZmZnam5ydnuBhYeLi42OjYyMjI6Ojo+QkZGPi4J3cG1ydnl5dXFwb25qZ2ZmZWNpeIWNkY+NjoyLioqKioqKinV1dXV1dXV1dnZ2dXRzc3N0dHR2d3h6ent6eXl6enp6fHx8fHt7enp7e3t7fHx9fX19fn5/f39/fn18fHx8fX19fX19fX1+fnx8fX19fX19fX18e3x8e3t8fH19fHx8fHx8fH1/goaJi4yNjo+Pj4+NjImKiYmJhoF7enuAhImMjIqJiImKjo6LiYiIiIqMj5GRkJCRkpOTkpGSkZGRkZGPj4+QkpKQkJCQjoyMiomIiIaHhoSEhIWGhoWFhIaHh4eHh4eGhYWFg4WHh4eHiIiIiIiIioyLi4yMi4uMi4qKiYmJiYmJiIqLjI2Oj4+Ojo2Ni4qGhoJ6cGppam1xcG5mY2NjZGVoaGltcnuAhIiKjIyMjo6Oj5CRkZCMhnxybW10fYF9eXRwbmxqaWhmZmdteIWMj4+NjIuKioqKioqKdHR2dXR0dHR2dnZ1c3NycnN1dnZ3eXp7fHx8fH19fX19fX19fHx8fH19fX19fX5+fn5/f35+fn5+fn19fX17e3x8fX19fX19fn59fX18fX5+fn18fXx8fHx8e3x8fHx8fHx7foGFiIqMjY2OkJCQkI2LiomJiIeBeXd5foiKioyMioiIiIqNj4yJh4eIiYuNjo+QkpOTlJSSkZKRkZGQkI+Pj4+Qj4+Pj4+NjYyLiIeIh4aHh4WGhYWFhISFhYaGh4eGhoaEhIKChIeHh4iHh4eHh4iJiouLiYuLi4yLiomJiYmJiYmKioqKi42NjY6Oj4+LiYiIh4d9cWZmZ29yb2tmZmNiZGZkYWNlaG93f4WJi42NjY2OkJGSkpKNgnhwbnJ6g4SBeXFsa25ubGlnZ2hueIKKjo+PjIuJiYmJiYl3d3Z1dnZ2dnZ2dXZ0dHNzdHZ3d3d5ent8fH19fn59fX19fX19fXx8fX19fX19fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fX1+foCAfXx7fX5+fHx8e3t7enp7fHx8fHx8fHt+g4aJi46Ojo+QkJCQjIqJiYiGf3l4e4GGjI6Ni4yLiYiJi46QjYqIiouLjI2Oj5GTlJWWlJKQj4+QkI+Pj4+Pjo6Ojo6Ojo2NjIuKiYmIiImIh4aFhYWGhoaGhoaGhoaGhoSEgoKBg4SGh4eHh4eHiIiIiYmJi4uLi4qKiYmJiYmJiYmJiYmKi4yMjY2NjYyLioqKioeAdWhlaG1xdHFrZmFgZGlramZkZWpyfoaJi4uMjI6PkJKRkY2Hf3dwcHeAhYWBeG5rbHBxcGtoaGptdYOKjI2Mi4mJiYmJiXd3eHh3d3d3d3d2dnZ2dXV0dXZ3eHh6e31+f39+fH19fX18fH19fHx9fX19fX1+fn5+fn5/f35+fn59fXx8fX19fXx9fn5+fn5+fn59fXx8fXx9fHt7e3p5eHl6ent9fXx8fYCEiIuNjo6QkY+Pj42Ni4mJh4J6d3uCh4yOjoyMi4qIiYuOj4+OiomJiYqLjpCRkpSVl5iVk5GQkI+Ojo6QkI+PjoyNjY2Mjo6NjY2Ni4uKiomJiIeGhoWFh4eGhoaGhoaHh4WEgn6AgoSGh4eIiIeIiIiJiYqKi4uJiYmJioqJiYiIiIiIiImKioqLi4uLioqKioqKi4mCd2hkZmtxc3FsZmVpbXN2dXJucXZ+h4qMjIyMjo+RkZGQjomCfHZxdHuDhoZ+dG1rcHR5dG1paWpsdH6HiouLiomKioqKeHh4eHd3d3d3d3Z2d3d3d3Z3eXp7e3t8fX5/f39+fn59fXx8fX19fX19fX19fX5+fn5+fn9/f39+fn19fn59fX19fH1/f35+fn5+fn19fn59fHx7enp6eXh3eHl6e3x8fHx9gIWJi4yNjpCRj4+Oi4qKiod/eXh6gYiMjI2NjIyLi4qKi46QkY+LiYmJio2PkZOSlJWWl5eUk5KRj46OjpCQj4+OjIyMjIuLjI2NjY2OjoyMi4uKiYeHh4eHh4aGhoaGhoeHhoWDgH6AgoWGh4iIh4iIiImJiYmJiYmJiYmIiImJiIiIiIiIiImIiImJiYmKioqKioqKi4qGem5nZWZudnhzbWhqb3Z/g4WFh4mLjo+Pj4+RkpKSkZCPjIeBd3BweICEg4F5cmxsb3Z6d3BqaGdnbHZ/hYeJiYqKiop4eHd3d3V3d3d3d3d4eHh4dnd6e3x+fX5+fn9/f39/f35+fX1+fn18fHx9fX5+fn5/f39/fn5+fn5+fn5+fn5+f31+fn5+fn19fX19fX19fHt7e3t5eXl4eHh3eXp6e3t8fH+ChomLjI2PkJGRkY2Mi4qIgnh1en+HjIyMi42Ojo2LiomIio2Pj46LiIiJjI+RkJGTlJWVlZWVk5OQj4+Pjo6Pj46Mi4uKiouNjY2Mjo6Pj4+Pj46MioqJiIiGhoaGhoaGhoaHhIOBfXx+gYaGiIiIiImJiYmJiYiIiIiIiIiIiYmIiIiIh4eHh4eHiIiIiImJiYmJiYqKioqGfnVqY2RueXx4c25qbXZ+houMj4+Pj4+QkZKTk5KRj46MiYR3cHB2foKCgH13cnFwdXl7eHFqZ2dlaHF+hYmJiYmLi3h4eHh5eHh4d3d3d3h4eXl3eHp7fH59fn5+f39/f39/fn59fX5+fXx8fH19fX19fX9/f39/f39/fn5+fn5+fn59fH19fn5+fX19fX19fX18e3t4eHd3eHd3d3Z4enp7e3x8f4KHioyNjo+Qj4+OjYyLiIR8dXZ9hImMjIyLjY6OjYyKiIeIjY+PjoyLiouMj5KTk5OTlJSUlZaVlJGQkJCQkI+PjoyMjIqKi4yMjI2Ojo+Pj5CQj46MjIqJiYiHh4eHhoaGhoaGhIJ/enx/g4WIiIiIiYmJiYmJiIiIiIiIiIiJiYiIiIiHh4eHh4eIiIiIh4eIiImJiIiIiImIhXtuYmFqeH58dGxqbXR9hYqNj4+Pj5CRkpOUk5GPjoyJhXpzcHR7gYSBgH15eHNydXl7dm9pZWNjaHWBiImJiYmJenp6enl4eHh4eHd3eHh5eXp5eXt7fH5+fX9/f39/gIB+fn19fX19fX19fX18fH1+f3+AgH9/f39/f39/fn5+fn19fX19fX19f39/f318fHx7enp5eHh3dXh4d3d4eXh6e3x/hIiLjI2OjpCQkJCOjYuGfHd4fIGIjI2OjoyMjo6OjYuKiYmLj5CQkI6Mi4yQkpOUk5OTlJSVlZWVk5CRkpKRkI+Ojo6OjIuLi4qLjY2Nj4+Pjo6OjIuKiYmIiIiIhoaFhoeHh4eGhIB9e3x/goSHh4mJiYmJiYiIiIiIiYmJiYqKiYmHh4aGhoaGhoaGhoaHh4eHiIiIiImJioqKh3tqXlxmdXx7dW9vbnN9hYqMj5CQkJOVlJWSkI6NjIqGf3dycnl+hIOCgICBfHh0dnh3cmpmZWJlbX2GiImHiIh6enp6eXh4eHh4eHh5eXp6enl6e3t8fn59f39/f39/f4CAfn59fX19fX19fX19fX5/f39/f39/f39/fn5+fn5+fX19fX19fX1+fn5+fH18fHp5eXl4eHd1dnZ2dnZ3eHp6e36DiIuMjY6Ojo6NjY2LhX51dnqAhYqMjYyMjIyLjI2NjYuKioyOkJGRkI6NjY+Sk5STk5OTk5SUlJSSkZKTkpGQj46Oj4+PjoyMjIyNjY2Pj4+OjYyKioqJiIiIh4eGhoWGh4eHh4eGg4B/fn+Ag4WHiYmJiYmJiIiIiIiIiImJiIiIiIeHhoaGhoaGh4eHh4eHh4eIiIiIiYmKioqKh35uX1xeZ3F7fHZwbnN9hIuNkJKUlpeXlpORj42MioaDe3VydXuAgoKBg4eGgnp3d3h4cmtqZ2Vqd4GHiIaHh3t7eXl4eHh4eXl5eXl5enp6fHx8fX19fX1/f39/f4GBf39+fn19fX19fX5+fX1/f39/f3+Afn9/f36AgH5+fn5/f39/fn19fXx8fHx8fHx7enl3eHh3dXV2dnV1dnZ4eXl7foKHioyNjYyMjImKjIiCeHV5f4OHioyNjIyLiouMjY6OjIuMjI2QkpOTkZCPkJGSk5STk5OTk5KTk5GQj5CSkpGQkJCPkJGRj4+NjY2NjY2OjY2Mi4uJiIqJh4eHhoSEhYWGh4aGh4aGhIKAgICCgoaIiYmIiIiIiIiIiIiIiIiIiIeHh4aHh4eHh4eHh4iIiIiIiIiIiYmJioqKiYqMin1oXllaY3V9enVxbnR9ho2Qk5SXmJeWlJKPj42LiIR9dnJydXuBgYKEh4yKgHh2eHZzb21pZWZxe4WGh4aGe3t5eXh4eHh5eXp6e3t6ent8fX19fX19fX9/f39/gIB/f39/f39/f39/f399fX9/f39/f4B+f39/fn5+fn5+fn9/f39+fX19fHx8fHx8e3p6eXd4d3Z1dXZ2dXV2d3d4eHp9gYaJi4yLiYiIiYqMiH52eH2Eh4iKi4yMjIyLjY6Ojo6NjIyOj5CQkJKRkJCQkZKSk5OTk5OSkZKSj46OkJKSkZCQkI+QkZGRkY+Pjo6Ojo6NjIuLiomHhoaHh4eGhISFhYSGhoaHhoaFhYSDgoKChIeIiIiIiIiIiIeHh4eIiIiIh4eHhoeHh4eHh4eHiIiIiIiIiIiJiYmKioqJiouMintoXFdYY3R9fnl0b3J9ho2RlZiXl5aUko+OjImJg395c21vdnt9f4CGjI6LhHx3dnVxbmtnZmlzfoSEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JhbGlfNjQweDM2MF9QNDIyLnl1diBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmFsaV82NDB4MzYwX1A0MjIueXV2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzYxNmNhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmFsaV82NDB4MzYwX1A0MjIueXV2CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotREVIS0xMTU5OUFBQUFFTUVNSUlJTU1JSUVNRUVBPTk1MSktKR0dGQ0FBPj46Ozo7Ozg4ODg4ODk5OTg5Ojo5ODg6OTc2Nzc1NTU0NDIxMTEwMC4uLS0rKyknKSkoKCkpKCgoKCcnKCgoKCcoKSkpKSoqKyssLCoqKyssLCwsLCwsLCsrKysqKSkpKSkpKSkpKSkoKCcnJiYmJiYmJiYmJiYmJiYmJiYmJycmJiYmJiYmJiYmJycnJycnJygoKSssLC0vMDIyNDU1Nzc3ODg5OTk5OTk5OTo6OTk5OTo6ODg3NjY3Nzo+RUpRWWFobHF1d3h4d3VxbWpoaGdoamxubm9vb29wb3BvcXN0d3l8fn5+fnx4cmxkWU5BNC4sKSsrKyssKisrKy40OkJPWmVueH6DhoWDgn13bWdYSDsvKSUkJCMkJSUnKi4xNzg+Q0xTXmVtdHuAgHx6dW9pYVlTT1JRVFRRU0xEPTYwJyUjJCQiIiMiIiIhISMhIiEgIyUmKCswNz1ES1BXXmNnbHJ3eHl4d3V2dnV1dW9rX1dLRkE/P0BAQEBAQD8/Pz89PTo5OTk3NTU0MzEwMC8wMzk8Q05WXWZscXR5e3x6enZybWRdT0U5MiwrKSgoJycnJyYoKCgpKSkrKi0wMTIzNjc3OD0+P0NGRkpOVVxia3B0eHp7fX9/gYKCgoODgYGBgYCAfn17eXp2dHR4e3+AgoOGiIeHhYN+fHp4dXR0eYCEhoWDg4OAfHhwZlhKPTQvLi0sMDM4PUROWmJrc3h8gIKBgIGBg4OCgn9+fXt5dnd3enp8gYSIiouLi4qKioqIh4eHiIiIhoB5cGRYT0hFQT48O0ZJSUxMTE1OTlBQUFBRUlFUU1JSU1NSUlJSUVFQT05NTEpKSEhIRUFBQD08Ozw8Ojg6Ojo6Ojg5OTk5Ojo6OTg4ODg4NzY2NjU1NDQyMTExMDAuLi0tKysqKCkpKCgpKSgoKCgnJygoKCgnKCkpKSkqKisrLCwsLCsrLCwsLCwsLCwrKysrKikpKSkpKSkpKSkpKCgnJyYmJiYmJiYmJiYmJiYmJiYmJicnJiYmJiYmJiYmJicnJycnJycoKCkrLC0vMDExMjQ1NTc4ODg4OTk5OTk5OTk6Ojk5OTk6Ojk5OTg3ODs9REtRWV9nb3N5enx8fHp0cWxqa2tsbW9vcHBvb21sa2pqamtrb3J3en6BgH5+fndza2BVSDwyKyorKysrKyssLCssMTc/SlZhbXd9gYWGhYSBe3RrXlA/MyomJCQkJSYoLC8yNTg9QUVKUlpjanJ8gIGAf3p1bmRaU09NVGJwZlZORT02KSMkIyMjIiIjIiIiISEjIiIhISIkJistND1DSlBWXGJlbHF1eXp7end1dnZ1dXVza2FWS0VCPz9AQEBAQEA/Pz8/Pj48Ojo6NzU1NDMxMDAwMTE2PENNVV1mbHF0eXt8enp3dm9mXlJHOzMuKykoKCcnJycmJygoKSkpKywuLjAwMzU2ODk7PUFCREdLT1heZGtwdHl9foCCgoSEhoaHh4aGhISCgH59fHt3c3Jydnl6fX+DhIWFhYWDf317eXl4eX6FhoaFhYKCf3t1bWJSRDkyLy4uLjAzOD1CTVhia3N4fICCgYB/gYGBgYB/fHp3d3Rzc3Z4en+EiIuNi4uLi4uLiYiIiImJiIaBeG5iV05JRkE+PDtISElLTExOT09PUFBRUVFSUVNSUlJSUlJRUFBQTk1MS0pKSEdFREFAQD49PDs6ODo5ODk5ODk5Ojk5OTk6Ojk5OTk4ODc3NjY1NTMzMjEwMC8vLi4tLCwrKyooKCgoKCgoKCgoKCgoKCkpKSkpKSkpKiosLCwsLCwsLC0tLCwsLCwsLCwsLCsqKysqKikpKSkpKSgoJycnJycnJycmJiYmKCcnKCclJyYnJyYmJiYmJicnJiYnJycnKCgoKCkpKiwuLjAxMzM0NTU1ODg4ODk5OTk4ODk5OTk5OTk5OTo5OTc3ODs+Q0dPVV5ianF2e319fnt4dnBubGxrbG1ub29tbWtpZ2VjYV5hZGptcnd7gIKCgn98dnFpXlFCNi4qKyoqKisrKysrKzA1PUVRX2pye4CFiIaGgn14bmNURTYtJiQkJSYnLC8xNDg9PkJESExVXmVvd4CEhIN/enNoYFZQTl1ldXZvYGZ5c0AkISMjIyMjIyIiIiIhIiIiIyMkJCouMzlBR01TW2BlanBzeHt9fHh2dnV2dnZzb2pgVE1EQD8/Pz9AQD8/Pz9APj09PDs6Ojc1NTQyMS8wLi4yODtCTVRcaG5ydXh8fn18e3ZxaWNWSj40LispKSkoKCcnKCgoKCkpKissLTAxMTM0NTg5PT5AQUVKTVNaX2ZrcnZ7f4KDg4OFhoeHiIaFhYSGgX99fHp3dHJwcHF1dnl9f4ODhYWFgX5+e3l6enuBhoeHhoKEgX15cmpcTj41MS0sLC4wMzc8Q01XYGlyeHx/gYGBf4CAgH9/fXt4d3Ryb29ydXh/hImKioyMjY2KioqKioqJiYmHgHdrXlNOSUZBPjs6SUpKS01MTk9PT1BQUVFRUlNSUlJRUVBQUFBPT01MS0tJSUdGRENBQD8+PDs7Ojk5Nzc5OTk6Ojo5OTg6Ojo5OTk5ODg3NzY2NDMzMzIxMDAuLi4uLi4tLCsqKSkoKCkpKCgoKCgoKCgpKSkpKSkpKSoqLCwsLCwsLCwtLSwsLCwsLCwsLCwrKisrKioqKSkpKSkoKCgnJycnJycnJiYmJigoKCgnJicnJyYmJiYmJiYnJyYmJycnJygoKCgpKSkrLS8wMTIyMzU1NTQ2ODg5OTk5ODg5OTk5OTk5OTs6OTk3Nzo6P0RKUlleZmxzeHx+fXx5dnNubGpqaWhoaWZmZWZkYF5aWFVVWFxhZWx1eoCCgoKBfnx2bWJXSTs0LCosKioqKioqKysuMjhBTlhjb3mAhoiHh4N+fXRqW009MCkkJCQlKy4xNjg7P0JEQ0ZLT1hkbXV+g4aGgn13bmNXT1dsYGlscGtkd39eSSshJCMjIyMiIiIiISIiIiMiJSguMztARk1SWV9jZ25xdXl9fHt5dnZ2d3d3dXBoYFRLREI/Pz8/QEA/Pz8/Pj09PTw7Ojo3NTU0MTEuLy4uMjc7QkpUXGZucnV4d3p+fXx3c2xjWk4/ODErKCkpKCgnJykpKCgpKSorLS4wMTMzMzQ2Nzk+PkRJTlNZX2FpbXR4fYCDhIaGh4iJiIiIhYWDgYB+fHl2dHFvb29wcHN1eH+Dg4SEg4F+fn17fHx+gYaGhoWEgoB7dm9mWEk7My8vMC4uMDI1OkJNVV5ncHd8f4B/f35+f35+fHt4dnRxbWxsbnJ2e4GHiYqLi4yMioqKioqKi4uKhYB3al1SS0dFQj88O0hJSkpMTE1OT09PT1FRUlJSUVJSUVFQUFBPUE9MSkpKSEdHRUNBQD8+PTw7Ojk6Ojg4ODg4OTo6Ojo6Ojo6OTk4ODg4NjU1NDQzMjIyMTAwMDAvLy0tLS0sKykpKSgoKCgoKCgoKCgoKCkpKSkpKSkqKioqLCwsLCwsLCwsLCwsLCwsLCwsLCsqKisrKigpKSooKSkpKSgoJycnJycnJycnJycnJycnJycnJycmJicnJycnJycnKCgoKCgoKioqKy0tLjExMTI0NTU2Nzg4ODg5OTk5OTk6Ojk4OTk5OTg3Njk6O0BFTFNZYGZtc3Z5e3l2d3Nwa2hlZGRfX15eXl5fXVpXVFJPTk9TWF9mcHqAhIOEhIF9eHFsXE9COC8rKioqKiorKyssLTI4P0lXYW13gIeKioiHg3t2bV9SQjQqJSUlKC4yNDk8QENERURGSU5VX2lxeoKGh4SAeXJpXVVcaWpxWUlSaXFjUldHISAhJCMjIiIiIyIiIiIiJigtNDs/RUtTV11iZGludHl6fHx7eHd3d3d4d3Nval9USkQ/Pz8+Pj8/Pz8/Pz4+PT08Ojk5NzU0MzIxMS8vLzA2OkBLU1xla3J2d3l7fXt6endxZ1xPQjgxLSspKSgoJycoKCcpKCoqKywtLzAyMzI0Nzk6P0RITlJZYGRnbXJ2e3+ChYaIiIqKiYmIiIaFg4B+fXh2dHBsa2pqa21vdHt/goKDg4F/gH59fX1+goWGhoSDgoB/enNsYlJDODIvLi4uLi8yNjtCTVdhaXF3en6Af39+fX9/fXt3dXNybWlpaW1xdnx/hIqKioqLi4mJiYmLi4uKioV/dmdaTkhHRUNAPjxKSktKTExOTk9PUFBPT1BSUlFQUFFRUFBQT09NTEpKSkhHRURDQUA/Pj08Ozs6Ojo5OTg4OTo6Ojo6Ojo6Ojk5ODg4ODc2NTQzMzIyMTAwMDAwLy8vLy0tLCsqKSkoKCgoKCkpKCgoKCgoKSkpKSsrKiorKywsLCwsLCwsLCwtLSwsLCwsLCwrKysrKywqKSkpKSkpKSkoKCcnJycoKCgoJycnJycnJycnJycnJycoKCcnJycnJygoKCgpKSoqKystLS4wMTAzMzMzNTY3ODg4OTk5OTk5Ojo5ODk5ODg3Nzc4OjtARUpQWWFpb3V2dnZ0cW9sZmNfWllZWFhaWlhYWVlYVU9NSkdFSFBZY2pze4GCg4OBgH12bWNXSTwyLi0qKioqKysrLCwwNzxGU2BrdX6FiYqIh4R/eXJkV0c2LSkpKS4xNTg6P0JERkVGRkxOUllkb3d+g4WFgXt0a2BcZGprZVdMUWlbT05WXFlUJiIiJCQkIyMkIiIiJCgtNDpARUtRV11eYmhscXZ5enx8enp3d3d3dnV0cGpgU0lDQT09Pj4+Pj4+Pj4+Pj08Ozo5OTc1NDMyMzExLi4vMzg/SVJcZm1wdHd6e3t9fHp2cWlfUkc6Mi4pKSkoKCgnKCgqKSorKywsLS4vMTMzNjk7QEZLUFVaX2RobXF2en2ChIWHh4iKioqKiYeFg4B/enh2dG9raGdlZWdqbXN7f4KCgoGAfn5+gX9/gIOGh4aEg4SAfXhyaV5PQDcxLi0uLi8yMjY7Q01YYWlxdXp9fn5+fn59e3p5d3NtbWtnZ2dqbnF4f4SHioqKioqJiYiIiouLi4iFfnVoW05JR0RDQD9AS0tLTU1NTU9PT1BQUFBSU1FRUFBQUE9PUE9NTUtLSUlIRkVEQkE/Pj09PDs7Ozk5ODg5OTo6Ojo6Ojo6Ojo5OTg4ODg3NjU1MzIxMTExMTExMTAwLy4tLSwsKysqKioqKiopKSoqKCgpKSoqKioqKisrLCwtLS0tLS0tLCwsLS0sLC0tLCwsLC0tKyssLCoqKyspKSkpKCgoKCgoKCgoKCgoJycnKCgoKCgnJiYmJycoJycnKCgoKCgoKCkqKisrLCwsLS8wMTIzMzQ2Njc5OTg4ODg4ODo6ODg5ODY2NTU2Nzg6PkJHTldfZ21xb29ta2hnYl5YV1RTUlVVV1dYWFZWVVBLRkI+PEFHUV1mb3d/gYWFgoGAe3NpXlBCNjAsLCorKysqKyssLTQ5Qk9baHR8hImLiYeGgnx0al1PPjErKy80Nzk8PkJDRUZGR0dJTFBYYGpye4GEhYN8dWxiXmBTW05VVEVPU0pGRGNqZFolISQkJCQkJCMkJikwMzg/RUxRVlteYGVpbXFzdHd6enp5d3Z2d3h4dXFrYFJKQz88PD09Pj4+Pj4+PT07Ozw6Nzc4NjQzMjIxMC4vLjM3PkhRW2NscXR2eHp9fnx6eHRrYVJHPTQwLCkoKCgoKCkpKysrLCwsLS4uLzE0Njo/RUlPUldcYWZpbnN1eH6ChYeHh4eIi4uKiYiFgn99e3dzcG5raWhkYmNnaW50e3+AgoKAgIB/foGAgIKFiIiGhYSDgH13cWVZSz02MS0uLi0uMTQ4PUZPWGBpcXZ8fX19fH18fXl3d3Nua2pnZmNjZWpxd36Eh4qKiomJiYmIiIuLjIuJg310ZVpSSkhHREJAP0pJTExNTFBOT09QUFBQT1BRUVBQUFBPT09NTU1LSkpIRkRDQkA/Pj09PT08Ozs6Ojg4OTk6Ojo6Ojo6Ojo6OTk4ODg4NzY1NTMyMTExMTExMTEwMC8uLS0sLCsrKioqKioqKSkqKikpKSkqKioqKiorKy0tLS0tLS0tLSwtLS0tLi4tLS0sLCwtLSsrLCwrKysrKSkpKSgoKCgoKCgoKCgoKCcnJygoKCgoJyYlJicnKCcnJygoKCgoKCgpKiorKywsLC0vMTExMjMzNTU2ODg4ODg4ODg5OTg4ODc1NTQ1NTY2OT1BRUtTXmVoaGZmZWRiXVpVUlNSUVJSUlZWV1dWU1BNR0E9ODc5QUpXYWtzfYCChYKCgHx2b2VZRzoyLiwqKysrKisrKywxNz9LWGRxfIOIioiHhoJ8dW1iUkE0Ly8yNjk9P0JER0ZHR0hISEtQVltlbXV+goSCfHhuY2BVTkc6Q0A1OTo+QENLVF1TIyMkJSUkJCQmJiouNTs/R0xRWFpdYGNmZ2tvcXN1eXl6eXZ1dnV2dnVwaF5RSEE9PDw8PD09PT09PTw8Ozo5ODc3NzU0MzIyMC8vLi4yOD1GUlpja3F2dXd7fX18fHt0bGJXSzw0MS0pKCoqKioqKSsrKywsLC4vLzI1OD1CRUtQVFleY2htcHN2fH6ChIeHhoeIiIqKiomGg4B9eXVxb2xqZ2RhX2BjZ2pudHl9f4CAf4CAgICDgoKFiImIhoWEgIF9dm5jV0o8NzMuLy8uLzE1OD5GT1tjanB3e31+fXx8e3p4dXJvamdmY2JgYGRpcHZ+hIeKioqJiYmJiIqIi4yLiIV+dGdZUUtIR0RCQUBLS05OTU1PT09PUFBQUVFRUU9QUFBQT09MTE1MTUpIRkVDQkE/Pz89Pj08PDw8Ozs7Ozo6Ojo6Ojs7Ozs6Ojo6ODg3Nzc0NDQzMjIyMTEyMjIyMDAwMC4uLSwsLCoqKSkqKioqKiooKikpKSoqKisrKiosLCwtLS0tLS4uLi4uLi4uLi4tLS0tLCwsKysrKysrKykpKSkpKCkpKCgoKCcnKSkoKCgoKCgoKCgoKCgoKCcnKCgoKCgoKCgoKSoqKyssLCssLS0wMjExMjI0NDU2Nzc4ODc3Nzc3NzY2NTU0NDM1Njg6PkNKUllfYmRiYGBeXFpXVFJQUFFTVFRVVVZWU1BNR0M7NTEyNDtFUFxocXl+g4KDgIB9d3BqXlBBNi8rKioqKigqKisrLzc8RlRgbXiAhoeIh4aDgXlwZVlKOzQzNjk7P0RGR0dISElJSUhJTFFWX2dxen+BgX11bWRgVFVXRDsyQ1ovLTBBUUVNTDgiJSUlJSQkJyowNDtBRkxSVlteX2JkZWlqamxxdHZ4eHhzc3V0dHRybWlfUUhAPDs6Ozs7Ozo7Ozs7Ozo5ODg3NjUzNDIyMjEwMC4vMTk9RE5aYWlxdXZ4enx8fHx5dGxjWk1AODEtKykpKSooKysrLCwsLS8vLzI2Oj5ESE5TWF5jaWtvc3V8fX+DhISGhoaIiYmJiYmGhIF8d3RwamhmY2FeXV9jZ2ltb3V7f3+Af39+gYCBhIOFh4mKiIaGg4OAfHVsYVRGOzc0MC8wLjAyNj1CSFJcZGlweHx9fX59fHt3dXFvbGdkX1xcXFxhaW92fYWJiYqJiIiHh4iKi4uNjImEfHNnXFFKSUZFQ0FATExOTk1NT09PT1BQUFFRUVJRUFBQUE9NTExLTEpISEZEQkBAPz8+Pz49PDw8PDs7Ozs6Ojo6Ojo7Ozs7Ojo6Ojg4Nzc3NDQ0MzIyMjExMjIxMTAwMDAuLi4uLCwqKioqKioqKioqKCoqKSkqKiorKyoqLCwsLC0tLS0uLi4uLi4uLi4uLi4tLSwsLCsrKysrKysqKiopKSkpKSgoKCgpKSkpKCgoKCgoKCgoKCgoKCgnJygoKCgoKCgoKCkqKisrLCwrLC0tLi4wMDExMjQ0NTc3ODg3Nzc3NjY1NTQ0MzMzMzQ2OT1CSU5VV1ZXWltbW1paVlVTU1NTVFVVV1hWVVJPSUM9NjAtLTI3QEtWY212fYKAg4GAf3pzbWNWSTsyLSoqKisqKSorKy4yOURRXmd0fYOHiIeGg4F8c2tfUUM5Nzo9P0NFRUdHR0dJSUlJSUlJTldganN5f4F2aGtwZF1dW01FQldZKCs0PDs3PURLJyUlJSUmKCowNTpAR0xSV1xdYGJkZGdlZWZpbHBzdnZ2c3N1dHV1cm1mXFBHQDw5OTk6Ozs6Ozs7Ozs6OTo6NzY1MzQyMjIwLy8uLzI3PEROWGJpcXV2eHp8fHx8eXNuZltOQzgyKywsKysqKSsrKywtLi4wMTM5PUNITVFXXGBmam5xdnp8foCAgoSEhoaGh4iIiIeGhIF9d3NrZ2VhYFxcXF5iZWhrbnB0en5/fn59foGBg4aGh4mJiYiGhYWCf3x1bGFURj04NjQyMDAyNDk+RkxVXWVtc3d8fXx9fHp3dXJtamViX1tZWVhaYGptdn6FiImKiYiIh4eHiYyLjIyIgnxzZ11STEpGRUNAPk1NTk5OTk9PT09QUFBRUVFRUVFRT09OTk1NS0hJR0RCQUBAQD8/Pz8+PTw7PDw8PDw8Ozs7Ozo6Ojo7Ozo6OTg5OTc3NjU0MzIyMzMyMjExMTAuMDExLy8vLy0sLCwsLCsrKioqKioqKysrKyoqKiorKysrLCwtLS0tLy8tLi8vLi0uLi4uLS0tLC0sKysrKyoqKiopKCgoKSkpKSgoKCgpKSkoKCgoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKSoqKiwsKyssLC0tLy8vMzM0NTQ1NTY2NjY2NjQ0NTU0NDMyMTEyNTc7P0VLT1VWVVlbW1xbWldXVVZWVlZXV1hXVlNPS0Y9NzEsKisuMztGUF1ncXiBgYOAf357d3BpXVBBMy4qKikqKikpKiosMjlAS1dkbnmAh4iHhoSBfHRtZVdKQj8+QENGR0dJSUpKSkpISEZGRUdNV2Ntd3x9c2tlaWBlZGBWQTxDOjEqMi4sMDxBYjIlJSYmKC0wNjpARkxTWFpeX2JjZGRkYmFjZGptcnRzdHRzc3Nzc3BtZVtQRD05ODg4ODk6Ozo6Ojo6OTk4ODc1NTQyMjIxLzAwLzAxNjtFTVhhaXB1dnh5ent8fHl4cWhfU0Q6My4tLSsrLCwsLC0uLi8xMzk9QUZMUFZbYWVqbnJ2eXx/gYGBgYKEhYSFh4eHh4eGhIB8e3NqZ2JdW1laXV9jZWhrbXBzdnp8fX19fX6Bg4SIhomKioqIh4WDg4F8dWtgU0Y+OTg1NDExNDc9REpTWWFmbnV6fX58fHt7eHNwamdhX1pYU1JTVl5obXeAhomKiYiIhoaHh4mKi4uJhoJ9c2hcUk1IR0RDQUBNTU5OUFBPT09PUFBRUlFRUVFOTk1NTU1MTEpIR0VCQUA/Pz9AQD49Pj07PDw8PDw6OTs7Ozs6Ojo6OTk6Ojk4Nzc3NzY1NDMyMjMzMjIxMTEwLjAxMTEvLy8tLCwsKysqKisrKioqKisrKysqKioqKysrKywsLS0uLi0tLS4vLy4tLi4uLi0tLS0tLCsrKysrKyoqKSkpKSkpKSkoKCgoKSkpKCgoKCgoKCgoKCgoKCkpKCgoKCkpKSkpKSkqKioqKisrLCwtLS8wMTAwMTQzNTU2NjY2NjY0NDQ0MzMyMTAwMTQ2Oj5ESU5RVVZaW1tcXFxZWVhYWFhXV1pYV1RSTUdBOTQuKikrLTA3QEtXYWx1fYGCgX9+fXl0bWRVRzowKyoqKioqKioqKjA3PUVTYGp3foOGhoWEgXx3b2hgVEpFQkRFR0hISUlKSktLSEdCQkJCRVBbZ3R0b2lmbGdlZ2VYSkNARzkxMjMsOTxFSWNLJSUoKiwxODtBR0xSVlleX2FhY2RlYF1cXF5kaG5xdHV0c3Nzc3NvamRaTEE9Ozg4Nzc4OTk4ODg4ODc3NjY2NTU1MzIyMS8wLy4uMjY7RE5ZYmlwdXZ4eXp7fHx8eHJpX1NJPDcxLy8tLS0tLi4vLzEzNztBRktPVVtfZWpucnV3fH5/gYGBgYGCgoSFhoWFhoaDg4F+enVtZ2BbWFlaXF9iZWhrbG9xdHd7e319fH5+gYOGiYmJioqIh4eHh4SCfHVqX1JFPzo5NjU1NDc7QUhQVlxjanN4fX9/fHx8endzbWhgW1hVUlBPT1NcZm13gYiJiYmIh4aGh4eJioqIh4WBe3NoXlJNSEZDQkA/TU1PT1FRUVBPT09PUFBPT1BQT05MTEtJSklHRkRCQUJAQD8/Pz9AQD09PTw9PT09PDw7Ozo6Ojo6Ojg4ODg5ODc3NjY2NTQ0MzMzMzIyMjAyMjAyMjIwMC8uLi0sLCwsLCwrKyoqLCwrKioqKiorKysrLCwtLS4uLi4uLi4uLi8vLy4uLi4tLC0tLSwsLCsrKysqKioqKSkpKSkpKSkoKCkpKSkpKSkpKCgoKCgoKCgoKCgoKCgpKSknKSkpKioqKysrKyssLC0tLS4vLzEyMzE0NTU2NjU1NDI0MzMxMjEuLzI1Njk+REhMUVVYXF5eXV5dW1lZWVlYV1lYWVRTT0lCPTYuKygoKSouNDtGUl5ocXmAgYF/fn17dnBoXE5ANC0qKSoqKSoqKiouNjpCUFxocXyChYWFg399e3VuZFpRS0ZGRkhISUlJSkpKSUdEPjw7PUBKVmN0aWhpZ2NmZGBeQjNMU1g8QFJTRDw6Q0hYZlU8JCwwOD1CRUtRV1tdZGZlZWVgXFxXVVZZXWRqcXR2dHNzdHJwbGliV0pAOzY2NjY3ODg4ODc3Nzc2NjY2NTQzMzEvLzEwLy8tLzE0OkNNVl9nb3R3d3l7e3t7fHlzbGFWSj03NDAvLy8vLy4vMDI1OkBFS1FXXGBla21ydHl7fn5/fn5+gICBgoODhIOEhIOEg4KAenZxaF9ZVlZZXF9jZmlrbW5vcXR3e3t7e3t9f4KEiIqLjIyLiYaGh4eDgXt0al5SSUE8Ozo4ODg7PkVMU1lgZm10enx+fX18e3d0b2xjXVZTT01JSExRWmVteIKHioqJiIaGh4aIiYmJiIeEfnlxal9UTkhFQ0E/Pk1NT09QUFBPT09PT1BQT09OTk5NTEtLSklHRkRCQUA/QEA/Pz8/QEA/Pj08PT09PTw8Ozs6Ojo6Ojo6OTk6ODc3NzY2NjU0NDQ0MzMzMjIzMjIyMjExMDAwLy4tLCwtLSwsKysrKywsLCsqKioqKysrKywsLS0uLi4uLi4uLi4vLy8uLi4uLSwtLS0sLCwrKysrKisqKikpKSkpKSkpKCgoKCkpKSkpKSgoKCgoKCgoKCgoKCgoKSkpJykpKSoqKisrKysrKywsLi4tLi8wMTAxMjIyMzMzMzIyMzIxMTEwLi8yNTY5P0VKTlRYWlxfX2BgXlxbW1tbWVhZW1hWUUxFPTYvKikpKSkpLDA3QUxYYm51fYCBgH5+fXlzbWNVSTkwKikpKSgpKioqKjA3PklXZG53foOEhIN/f3x3cWthWFBJR0dISElKSkpKS0pFQDw5Njk7RVNecG9va2llYF1ZU01JSkxTYGBfX1hLQTgrO1JubjUoNzxCRk5ZWVtgbGlUTVZhW1thUlBQVVphaXB1dXRzdHJwb25oYFVJPzg1NjY1Njc3NjY2NjY2NTU0NDMzMjIyMC8vLy4uLi8wNDpDTVZfZ290d3l3eXt7e3x5c21jWUxAOjYyMTExMTExMzQ4PURJUFRcYGZpbXJ1eXx/f359fX19f4CAgIGDg4OCgoKCgX9/fHl0bGRdWFdZXF5iZmlrbW9vcHJ2eXx6e3t8fH+ChIiLi4yMi4mHh4eHg4F7dGpeUEdDPz49Ozs+QENKUVhdZWpxdnt+fn19fXt2cm1mYFlSTUpFQ0NIUVxlcXyEiIeIiYiGhoaHiImJiYaFgn53c2lfVE1HREJAQD5OTk9PT09OTk9PT05QUFFQTk5MTEpKSUhHRkNBQEBAQD8+Pz8/Pz8+Pz8+PT09PDw8PDw8Ojo7Ozo6Ozs6OTg4Nzc3NjU2NTIzMzQ0MzM0NDMzMjIyMTExMC8vLS0sLi4tLSwsLCwsKyoqKioqKisrKyssLC0tLi4uLi4uLi4wMC8vLi4uLiwtLS0sLCwsLCwqLCsqKSkpKSkpKSkpKSkpKSkoKCkpKCgoKCgoKCgoKCkpKCgoKCkpKiopKSkpKikqKioqKysrKyssLC0vLy8vLzAxMTExMjIxMjIxMTAvLjAxMTQ5PEBHTFJWWl5eX2BhYWBeXV1dW1lZW1pYU05HQjozKygpKSkpKSouMztGU15pdHp/gYF/f357d29nW04+MyopKSkqKioqKiovNTxEU2BsdnyBg4ODgH98eHVvZ1xSS0hISElLS0tLSkhFQTw4MjIxNkFQX2FuaVJoZFpUUkdRUUpRWWFiYWFgXVU/NDxJW3JyOjY+SUxjbWhjbXdKT0tUWltZV0pJS05WYGlxdXd1d3Rzc3FraF5TRjw2NDMzNDQ1NTQ0NDQ1NTU1NTMyMjEyMDAvLiwuLi8uLzQ6Q0xVXmduc3d3enh5ent8fHRvZFpRQzs2NjMyMjIzMjc6QEZNVVlgZWtvdHd6fICAf35/fn19f39+f4CAgoKCgYCAf319e3h0cGhkW1laWl1hZmlsb29xcnJ0dnl8fXx8fHt/g4WJio2NjYuJh4eGhoOBe3JqXFBJREJBQT9BQUZJUVZdYmhvdXl/fX5+fXt4dHBqY1tTTEZDPz0/RE9bZ3N+hIiIiImHhYWGh4iJiIeEgoF9eXNrYVVNRUJBPz4+Tk5PT09PTk5PT09PUFBPTkxMS0tKSkhHREJAQEA+Pj4+Pj8/Pz8/Pj8/Pz09PTw8PDw8PDo6Ozs6Ojk5ODg4ODc3NzY1NjU1NjUzMzQ0NTUzMzIyMjExMTAvLy8uLS4uLi4tLSwsLCsrKyoqKiorKysrLCwtLS4uLi4uLi4uMDAvLy4uLi0sLS0tLCwsLCwsLCwsKikpKSkpKSkpKSkpKSkpKCgpKSgoKCgoKCgoKCgpKSgoKCgpKSoqKSkpKSkoKSkpKSsrKysqKywtLS0uLy8wMTExMTExMDExMDAvLy4wMTI2Oj1DR09UWVxeYGFiY2NhX19fXFtbWlpaVU5LQz01LionKCgoKCgpLDA3QU1YZG52fX+Af31+fXlzbGFURTctKikpKSkqKioqLTM5Qk1bZnF7gIKEgn+AfXp1cGlgV1BNSkpJS0tLSklGQT04NC8tLDE7UWlyc21NXWFXVU9OUE1HQk5WYmBYVVhdVD05QlRecVpMT1ttfneAamhbWWJtcHd0ZFxQQEFKVF9rc3V3dnZ0c3Nxa2heU0Y8NjQyMjMzMjIyMjMzMzMzMzQzMjIxMC8tLi4sLS0sLC0zOEBIU1xob3N3eHh5eXp7e3t0bmldU0c+ODc2NTU1Njo/REpPV15kaW90eHqAgYKAf359fHx9fX5+f4GBgYGBgX99fX56eXdzcW5nYlxZWV1hY2dsbXBycnJzdXh7fX16ent8f4OIio2PkI6Mh4eHhoaDgXtyalxSTkhGRkZFR0lLT1deY2Zscnh8fn5+fXt7eXRtZl5YT0dBPTk6PEZSXGh3goaIiIiIh4WFh4eJiYiHhYKAe3Zya2FVTUVBQD4+Pk9PTk5PT09PUFBPUE5NTkxLSklIRkZGREJCQEA/Pz4+PT0+Pj8/QEA+PT4+PT09PTw8PDw7Ojw8Ozs7Ozg4ODc3NzY2NTU1NTU1NTU1NDU1NDQzMjIyMjIxMDAwMC4vMC4tLSwsLSwsLCwsLCsqKiorKywsLS0tLS0tLy8wMDAxLi4uLi0sLS0uLi0tLSwsLCwsKysqKioqKSkoKCgoKCgoKCgoKSkqKikpKCgpKSgoKSkoKCgoKSkpKSkpKSkpKSoqKysrKyopKSotLS0uLi4uLy8wMTExMTAwLy8vMC4vMDEzNz1BRkxQVlpeYGJkZWRkYWJhYV9cW1pZWVRPRj85LyooJygnJiYnJyouNTxIUl1ncXp9f4B/f316dnBmWUw9MywqKioqKSkqKiwxNj1JV2Ntd36AgoJ/f3x6dnVsZ15VT0tNTU1OTUpHQj46NDErKiouOVBxgX54ZWBcR1lZVVFSTkxNSFFWWUxMXF9LR0EqRkxdVE9bbnRvgHNtaG1sZXB6gnFqXEY9S1VhbHN3d3h4dnRzcW5nXVBEOjMxMDAxMTExMjIxMTEwMDExMS8wLy0tLS0sLSwrLCwwMjg+R1JcZW5ydnd3eXt7e3p6d3JrYFZIQDw5NjY4OTtCR0xTW2FobXJ1fX+Cg4ODgX5/fH19fH1+fX9/gIF/f359fXp6eXd1cnBtZ2JdXF1fYmVpbm9xcnJzdHZ5fHx9enp7fX+DiIuOkJGNioiIiIaGg4F8cmhdVFBNS0xMS0xOUlheYmVrbnN4fX58fXx8eXdybGVdUUhAOjc3Nz5HU2JueYGHiYqIh4aGhoaGiYiFhIOBf3t3c2xiVkxGQT8+OjlPT05OT09PT09PTU5NTEtKSklJSEZDQ0E/Pz09PT0+Pj4+Pj4/P0BAPj0+Pj09Pj49PTw8PDs8PDs7Ozs5ODg3NjY2NjU1NTU1NTU1NjU1NTQ0NDQ0NDIyMTExMDAvMC8uLi0tLiwtLCwsLCwrKioqKyssLC0tLS0tLi8vMDAwMC4uLi4tLS0tLi4uLS0tLCwsLCsrKioqKikpKSkoKCgoKCgoKCkpKSkpKSgoKSkoKCkpKCgoKCkpKSkpKSkpKSkqKigoKCgqKikqLCwtLi4uLi8vMDAwMDAvLy8vLS0vMDE0NTk/Q0lOVFpeYGNlZmZmZWRhYGBfW1paWldRTEI8My0qKCcoJyYmJicpLTE4Q01ZY213fH6Af318fHhxbF9TRDYtKiooKCkpKioqLjQ5RFJfanJ7foCCf4B+e3l1cGphWFFNTExMTEtHQz46NS8rKCcrLzVUc3x8e29fVkhGVlZRVVtSS1RcW2pSSVpkZVpHQkZLT0pYZl9sbXFvgHtsZ2xfW3BmZ0tVQEhXZG5zd3d4eHh3dnNuZ11QRDoyMC8vMDAwMDAwLy8wMDAwMDAvLi4tLCwsLCsrKistLjE3PkdRW2VudHh4eHh5enx6endxa2JYTkU/PTk4PEBESE9XXmVpcHR5foKDhYKCgIB/f3x7e3p7fXx+fn6Afnx6eXh2dnV0c3JwbmhjX19gYWRnam5wcXJzdnZ4en18e3p6e31/g4iLjpCOjYmHiIiIhoOBe3NqX1hUU1BQUFFSVlpcYmZqb3F2en5+fXx8fHl2bmhgWU5EPDg0NDc+SVZkcHqCh4iIiIeFhoaIiYmHhISCf315eHFsYlZMRUA+PTo5T05PTk9PTk5NTEtNTEtKSElIRURDQkA/Ozs8PDo8PDw9PT4+Pj4/QD4+Pj49PT09Pz89PTw8PDw8Ozs6Ojg3Nzc3Nzc2NjY2Nzc1NDU3NjY1NTU1NDQ0MzIxMTEwMDEwMC8uLSwtLS0tLSwsLCsrKysrKyssLC0tLi8vLy8vLy4uLi4tLS0uLi4uLi0sLC0sKysqKioqKioqKigqKCgnJygoKCgpKSkpKCgoKCcoKCgpKSkpKSkpKSgoKCgoKCkpKSkpKSoqKSkpKSkqKyssLC4vLy8wLzAwLi4vLy4uLi8xNjY9QUdMUlhdYGNlZmdpamdmY2FfW1paWFdWUEY9OC8qKCcoKCcmJiYnJysuNT1JVF5pcXl8f357fHx9eHBlW0o7MCspKCgpKSoqKSsyOEJMWGRvd31/gX98e3t6dnNuZVtUTkxKTEpHREA7NTApKCQiJys2WWJ0d3hvYFNMSlpbVFVhX1NUWlxeXVNUXmxkVEpNXk5RYGlrdXJma29bSUdUVl1SWFNRUk1LVmRudHd3d3Z3d3Zza2hcUEM5Mi4tLS0tLi0uLi8vLy8uLi4uLi0uLiwsLCwsLCorLS8xNz5HUFplbnF1eHh4eHl8e3t4c25nXE9HQj88PUJITVJXYWdscnd8gISDg4KDgYF/gH19enp5eXl6e3t7e3x7endyc3NzcnNycG5pZmJgYGRlaWxvcXJzdXZ3enx9fHt6ent9gISJjI6Pj42KiImJh4aDgXtzbGJcWFhXVVVWWFteYWdsb3J1eXx+fn18e3t5dG5mXlNKQDgzMTM3QExYZ3N9hIeJiIiHhoWGiIiIh4ODgX18eHVya2JWTEM/PDo5OU9OTk5NTU1NTEtLS0pJR0ZGRUVDQT4+PTs7Ojo6Ozw8PT0+Pj4+P0A+Pj4+PT09PT4+PT08PDw8PDw7Ojo5OTk3Nzc3NjY2Njc3Nzc4ODY2NTU1NTQ0NDMyMjIxMTExMC8vLi4tLS0tLS0sLCwrKysrKysrLCwtLS4uLi8vLy8vLi4uLS0tLi4uLi4tLCwtLCsrKioqKioqKiopKSgoKCgoKCgoKSkpKSgoKCgnJygoKSkpKSkpKSkoKCgoKCgqKikpKSkqKikpKSkpKisrLCwrLS8uLy4uLi0tLy8uLy4xMzc7QkdMUlZdX2NmZ2lra2pnZmNhX11bW1lXUklDOzQtKCcnKCYnKCcmJygoLDE5Qk5YY212enx+e3x8e3dyamBQQjUsKSgoKSkqKikqLzU8R1Vja3N6fn1+fX17e3l1cGhfVlFNSklJRUE8NzAqJiMiICQqO19hZmtxbWVMRlVbXFZUWFtZT1hSUVpYXmBnaWJSQFZORGV+eW5mX1ZeSzo4PVFWSFBTR0ZHS1Zkb3V3eHh3eXl3dWxpXFBDOTAtKysrKywtLS0uLi4uLS0tLS0sLS0sLCwsKysqKiwtMTc+R1BaZG1xdXh4eHh3enp6d3RvaF5SSkVAQ0ZLUFdcYWhtdHh9gYSFg4KCgYGAfn59fXp6eHh3eXp6enp6eHd1c3FxcXFycnBva2ZiYmNkZmlsb3Fyc3Z2d3p9fXx7enp7fYGFiYyPkJCNi4mHh4eGhIJ7c2xiXlpZWFhYWltdYGdrcHJzeH1+fn59fHt7eXRsZVtRRTs1MjIzOUJQX2p2f4aIiYiIh4aGh4iIiIeDgn97eHh2c2xjVkxDPzs5OTlPT09OTU1OTEtLSklIR0ZGRENCQD08PDs3Nzk5ODo8PD49Pj4+Pj8/Pj4/Pz4+Pj49PT4+PDw+Pj07Ozs5ODg3Nzc3NzY2NjY1Njc4NjY2NjQ2NTU1NTU0MzIyMTAyMjIwLy4vLywtLC0tLS0tLSsrLCwrKy0tLS0uLi8wLi4uLi8vLy4uLi4uLS8tLC0tLCsqKioqKSkpKSoqKSkpKSoqKCgpKSkpKSkpKSgqKSkoKCkpKSkpKSkpKCgoKCgoKSkpKSkpKysrKysrKiorKyssLS0tLS4uLi4uLi8wMDAyMjc7P0ZMUVVcYGFjZ2pqbW1pZ2ZjYV5bW1pXU09HPTcwKygoKCcmJicmJigpKSovNDxHVF5ocnh7fHt7fXx5dG1lV0g6MCkpKSkpKSopKS4yOEJOXGhvd3x9fH18fHt6eHRtYllSTElJRkI7NjMrJiMhICMjKDtNVWhmY1xZMkBaW1dSXVFQWlZaVVBeW1deYGplVzRPTk5vb3JkYmdYWldNOD1HQ1FXRDo2P01bZ3B2eHh5eXh4dnRuaV9PQjgwKisrLCsrKysrKiorLSwsKyoqKikrLCwqKispKystLTA3PkZQWmNscXd3eHh4eHp7e3h2cGlgVk5HRkhOUlldZGlwdXp/g4aFhIGAgYCAgH19e3l2dnV0dHV1d3Z2dnd1cnFxcHFxcnNxb2toZGNjZGdpbG9xcnN2dnh6fH19e3p6e36BhoyPj5GQi4mJiIqIh4aBfXZrZGFeXFtcXF9hYmVpbnN3d3t9fX19fHt7endybGVZTkI5NDIyNDxGVGNueoSHiomIh4aFhoeIiIiGg4B8eXh4dnRuZVhNQz87OTk6T09PTUxMS0pLS0lIR0ZFRUI/Pjs6Ojo5Nzg5OTk7Ozs7PT4+Pz8/Pz4+PT0+Pj4+PT0+Pj09PT07PDs7Ojk4ODc3Nzc2NjY2NjY3Nzg5NjY2NzU1NTU1NDMzMzExMjExMDAwMTAtLS0tLS0tLS0sLC0tLCwtLS0tLi4uLi0uLi4vLy8uLi4uLi4uLSwsLCwrKioqKikpKCgpKSoqKSkqKikpKSkpKSkpKSkpKSkpKCgpKSkpKSkpKSgoKCgoKCkpKSkpKSsrKyssLCoqKysrKysrLS0uLi4uLi4vMDAyMzc7QEVLUVZaYWRlaWtrbGxpamlmY2BeW1lYVlBJQDkxLSopKCgnJiYnJicmJigpLTI3QU5XYm51ent8e3t9e3dxaV5OPzQrKigpKSkpKSkqMDU9SlhhbHR7fH1+fXt7fHp1b2ZfVU5KRkM9NzIsJyMhJCIiIz5gXlJWX15cVVJSVVpcXVRgXExLWl9eZ1NKW2NgXFZGV0tSZ19kY2dlZWVkUTQ6SEVDQj0vOUNQW2hxd3h4eHh4eHZ0bmpfUEE3MCoqKiopKisqKisrLCoqKikpKSkpKSkpKCgpKiorLC4yNz1FUVtjanJ1d3h4eHh4e3t5dXBqYlhRTUxSVlxgZmxzd32Bg4SDg4KBgIB/f398enl3dHJwb3BydHNycnR2dXRwcG9wcXJycm1qZWJiY2RnaWxvcXJzd3d4en18e3t6enx9gYaMj4+PjouJiYiHiImHg312a2RiX11bXl5hY2Zqb3J2eXx9gH99e3t7e3l2cGthVUo9NzMxMjg+S1hkc32Eh4qKiIeGhYaHiIiHhYF+enl4d3Z0bmVYTEQ9Ojg5Ok9PTU1NTUtJSEdHR0VEREE+PTs6OTg4NzY3ODo7Ozs7Ozw9PT09Pj0+Pj4+Pj4+Pjw+PT09PT08PDw7Ozo6OTg3Nzc3NjY3Nzc3Nzc3Nzg4ODg3NjU0NTU0MzMzMjIxMTAxMS8vLi4tLS0tLSwsLS0tLS0tLS0tLS0tLi4uLS4vLi4vLi0tLS0uLi0sKyssKyoqKSkoKCkpKCYoJikoKiopKSkpKSkpKSkpKSkpKSgoKSkoKCgoKSkoKCgoKCgoKCkpKSoqKisrKysrKysrKysrKy0tLS0uLi4uMDAyMjg8QUdLUVVaX2RmaGttbG5ubGlqZGFeXVpXV1NPRTw1LioqKSgoJycnJycnKCgnJywvND1IU15qcXd6eXp8fHt5cnBkVUQ4LyspKCgoKCgoKS8zO0dUYGdyeHt9f399fX18d3NrYFVPRUI+OTQrKSQhISMhIC9lZ1tGTGRdVlNRVVVSRE5faVJCTlhUV15WWVtbWFVVU1BCSFddaF5mY2ZrXjwyRUM9REU3MTpDUVxocXZ4eHh4dnZ2dG9pXk9ANi4pJycnJygpKSkpKCopKioqKSgoKCglJScoKSoqKy0tMTY+RU5XYmtxdHZ4eHh5ent7eHZybmNbVlNVWF5kaG1ze36BhIODgYGAgX9/fn59eXd3dXJubWxsbWtsbXBzdHJxb25vcXJycXJsaWVjYGJlZmhsbm9ydXd3eHp9e3t6enl7fYKHjI+Qj46LiYiJiYiKiIN9dmxlYl9eXl9gY2ZobG90dnl8f4B9fXl6enl2dG1nXk9EOzY0MzM6QE9daXaAh4mLiYiHhoeHh4iIhYN/e3d5d3Z2dG9nWU1DPTk4OT5PT01NTEtJSEdGRUVDQkI/Ozo5OTg3ODc2Nzg6Ozs7Ozs8PT09PT0+Pj4+Pj4+PT09PTw8PT0+Pj09PDw6Ozo5ODg4ODc3Nzc3Nzc3Nzc4ODY2Nzg3NjU1NTU0MzMzMzMxMTEwLy8uLi0tKyssLC0tLS0tLS0tLS0tLS4uLi4vLy4uLy4tLS0tLi4tLCsrLCsqKikpKCgpKSgpKiopJikpKSkpKSopKSkpKSkpKSkoKCkpKCgoKCkpKCgoKCgoKCgpKSkqKiorKysrKysrKysrKyssLC0tLi4uLzAxNTg8QkdMUVdaXmNnaWxtcHFwcW1rZ2NgXl1aV1RPSEA5MywpKikoKCcnJycnJygoJycpLTE4Qk5YZW51eHp7e3p6enZxZ1pJPS8qKSgoKCgoKCgtMTc/TVhkb3d6fX9/fn59fHp1b2ZbUEdBOjQvKSYiISEhICE3WWdoWmBdY19ITVdUUk9RXmxUNUBJS0dTW15cV09GRUVCSEtKVmBOXWBgZVtRR0RURzkoKDM6Q1FcaHF2eHh2dnZ2dXNvaV5PQDYuKScnJycnJygoKCgpKSoqKSgnJycnJSUnKCkqKiwvLzM4PkVRV2JrcXR2eHd3d3l7e3t3dW5pYV1cXWBnbHBzd32Cg4OEgYF/f4GAfn18enl1dHBva2ppaWhqa21wc3RycW9ub3FycnJwa2hjYWBiYmRnamxtb3R3d3l7fHt6enp5fX6DiIyPkI+Oi4mIiImKioiDfXZsZWRiYWFhYmVoa29zdnp7fX5+fXx5enp5dnNsZVlNRTs2NDM1PERTYW15goiLiomIh4aHh4eIiIWCfXl3dnZ2dnRsZFlNQz04OTtATk1MS0pHSUhHRkRCQEI9PTo5ODc3NjY2Njc4ODk7Ojo6Ojw8PDw8PD09Pj4+Pj4+PT0+Pj09Pj48PD09PT07Ozo5OTk5Nzg4ODg5OTk5ODg2Nzg4NzY2NjY1NDQzMzMzMzMyMTAwLi4tLSwsLCwsLCwsLS0tLS0tLi4uLi4uLi4vLy8uLi4uLS0uLSwsLCwrKykpKSkpKSkpKi8yOC0nKSkpKSkqKikpKSkpKSkpKCgoKCkpKSkoKCgoKCgoKCgoKSkpKisqKywsKisrLCwrKysrLCwsLS8vMDAxNTk+RElLUVdbX2NlaWttb3BwcHJtaGVhX1xaWFdTTEM8NS8pKCcnJycnJycmJycmJignJyovNTxJVWFpc3h7enp7fHt4c2thUUAzKygoKCcnJycnKy42PUlVYW11eXx/f39/f319eXJqXVNFPjYvLCYjICEhICEjT2iNgW1oY2FiYF9TUFNYXFpkVEVDPURMUFtgVlBWP0JFQkVGSFBRUE9aV1xfVElPVVxPLC40OUNQXGhxdXZ2dXV1dXZ0bmhdTkA0LCgnJigoJSUnJyYmKSkoKCkmJSUlJSYmJicoKiwuMTE0OD9GUVdhaW9zdnh1dXd4eXp6eXZzbWdkY2RobHJ2e4GDg4KBgYCAgH99fXt6eHV1cW9ta2dkY2Zoam1vcnR0cnFtb3BxcnFwbWtnZWFhYmJjZmlpbW9xdXl5enp6enp5eXx/g4iMj4+OjYqIh4eJioqJhX12a2ZmZGNjZGZqa21vdXd5e319fX18ent7endxa2NYTUE5NTIzNz9JVmRve4WLi4uJh4eGh4mJiIeFgHx4dXV1d3Z0cGhbT0I8Nzo9RU1MS0pKSEdGRUNDQkA9OTk2NjY1NTQ0NDY2NjY3ODo6Ojk6PDw8PDw9PT4+Pj4+Pj4+Pj4+Pj4+PTw9PT09Ozs6Ojk5OTg4ODg4OTk5OTk5ODc3Nzc3NjY2NTU0NDMzMzMzMjEwMC8tLS0sLC0tKyssLCwsLCwtLS4uLi4uLi4uLy8vLi4uLi0tLS0sLCwsKykpKSkpKSkpKSo2Q0M0JygpKSkpKiopKSkpKSkpKSkpKCgpKSgoJycoKCgoKCgoKCkpKisrKyssLCorKywsKysrKywsLC0vLzAyNTg+Q0dNUlZbYGRmaWttb3FxcHBva2ZjYF1bWFVUT0Y/ODEtKignJycnJycnJicnJiYnJycpLTI4Q1JcZnB1eXx8e3x8eXVvZFZGNiwoKCgnJycnJyksMztDUV1qdXl8f39/f4GBf3p1bV9RRjwzLSolIiEhISAhNVdtkHlcXmJhXllYSktQWmJbXVlNQkhGR0tZV1BQWUM0OktPUkpISEZKTFBQUExOXGhWTyktNTpET1xncnZ0dHV1dHZ1cm1pXU5ANCsnJiUlJSUlJiYmJigpKCgnJiUlJiYmJigpKiwuMDM0NTk/RlFYYWpvc3Z4dXV3eHl7e3p4dnJtamlpb3J3fICDhIKCgYGBgX59fXp4d3VzcHBsaWVhYWJmaGtucXJ0dHFwbm9wcXFwb21pZWJhYWJjY2VmaGpucnV5eHp7e3t6eXl8f4OIjo+Pjo2KiYmHiImJh4N9dmtmZmRkZGRmaWxuc3V3eXt7e3p6eXl6e3l2cGpiV0k+ODUzNDhATVxpdX+Hi4uLiYeHhoeJiYmIhH95dnR0dHV2dG9nXFFFPDk9Q0pPTkxJR0ZGRURBPz08OTY2NjY1NDQzNDY2NTU1Nzc4ODo6Ozw8PD09Pj49PT09Pj4/Pz4+Pj4/Pz4+PT08PDw7Ojo6Ojo6Ojo5OTo6Ojo5OTg4OTk3NTc3NzY1NTU1NTUzMzIyMDAuLi0tKysrKyorKysrKywsLS0tLS0tLS0uLi8uLi8vLy8uLS0tLCwsLCsqKikpKSkqKikpMjo5LSkoKCgoKCgoKCgpKSkpKSkoKCgoKScoKCgoKCgoKCkpKCgrKyssLCssLSwsKywsLCwsLCwsLiwuLjAyMzc8Q0dNUldcX2Voam1ucHBycnBvbmtnY15bWldUUEpDOTMsKSkpJycmJicnJicnJycmKCcnJisvNUBNWGNudHh6ent8fHt4c2pcTDwwKScmJicnJygpLTI5Qk5ZZW53fH5/gICCgYF+d3FnVkg7MS0qJSQjISEjI1xjX3VRPlRKWGRVQT1PQExUU1BOUTo7SE1LSEhOSlVZXF5iZWhoYUpCS0ZEQk1OTFlmVlcrLDI6RVFdZ3Fzc3JycnN0dXNuaV5PQTQsKCUlJCQkJCQkJiYmJygoJyYlJScnJygpKy0uLzEyNDc7QEZPVmBob3N1d3V3eHh7fX18eXh2c3Fxcnd5foGEg4OBgICCgH58e3t4d3VxcG5rZ2NfYWNmaGpscHNzdHNxcG9vb29wbm1rZ2NhX2BgX2FjZWZobHF0eHt7e3x6d3h5fYCEiY6OkI2NioiIiYqKiYiFfHRsZ2ZlZWVlZmprbnFydHl6e3t6eXl5eHh4c21nYFVHPTk3Njc7RFJgbHh/houLi4iHh4iJioqJiIN/eHVzc3R0dHRxZ11RRT0+QkdOTEtKR0dGRENCQD47OTc1NTMzMzMzMjM0NTU2Njc5ODg6Ojk6Ozs9PT4+PT0+Pj8/Pz8/P0A+Pz8+Pj09PDw8PDs6Ozs8Ozo6Ojo6Ojo6OTk4ODc2Nzc4ODc2NjY2NjU1MzMyMjEwLi4tLSsrKysqKysrLCwsLC0tLS0tLS0tLi4vLi4vLy8vLi0tLSwsLCsrKiopKSkpKSkpKSoqKyspKCgoKCgoKCgoKSkpKSkpKSgmKSgpKSkoKCgoKCgpKSkpKysrLCwrLC0sLCssLS0tLSwsLC4vLi8wNDc6QEVJUFZbYGRnaWxucXJycm9wbmxoZGFdW1lWUkxFPDYvKyopKSgnJiYnJyYnJycnKzU8LyYoLTI7R1Rfa3R5e3t7fHx8e3VuYVFCNSsnJiYnJycoKS0xOkFOWWFudHp+f4CAgIGCf3pzaVpKOy8oJSYlJCEhIjd1WUtCPDtLT1ZhVD8xMjtAP0VCR0pBOEZJS0VJRU5bXmBiZGVlY1o+PUlDRUJeTkNQW1xKKCszPEVRXWdxc3NycnJzdHVzbWheT0A2LCklJSYmJCQkJCUlJSYmJiYmJSUkJScpKywvMDEzNDY6PkNJT1hhaW9zdnh4d3Z4eXt9fn17end3d3l9gIOEhIODgYGAf358e3p4dXNvb2xnYl9eX2FjZ2psb3Jzc3V0cXBvb29vcG5va2ViYV9eXV9gYGRkZ2xxdHd4eXt8end4eX6BhoqOjo6Mi4iIiIiIioqIgntybGdlZWVlZmdnaG1wcXN2eHp6eXh5eXh4dnNsZl9RRz06OTk6PUZUYm15g4qLi4uIiIeIiYqKiYiDf3h1c3N0dHR0cWddUUQ+QUhMUExMSUdGRUNBQD48OTY1NDMyMjEyMjIzMzQ0NTU3ODg4OTk5Ojs7PD0+Pj4+Pz8/Pz8/QEA/Pz8/Pz4/Pj09PT08Ojs7PDw6Ojo6Ojk6Ojk5OTk4Njc3Nzc3NTY4Nzc0NDMzMjExLy0tLSwsKysrLCwsLC0tLS0tLS0tLS0uLi4uLi4uLy8vLy4tLSwsLCsqKiopKSkoKCgoKCgrNUI8LCcnJygoKCgoKCgoKCgoKCkoKCgoKCgoKCgoKCgoKSkrKysrKyssKyssLCwsLC0tLS0tLS4vLi4wMTU5PkRITlJZX2JlaGtsb3Bzc29vbW1rZ2JfXFlYU09JQDgxLCopKSonJygnJycnJycnJis0LScnJysuN0NPWmhweHp8enp8fH55cWZXRTcsKCcmJyYnKCwvNDlCS1Vha3N6fX+BgX+AhIF9dmxfTzstJCQjIyMkIyU8a0w7NDUzPUxMYmJhVUI9Jzc5OTpCQT1HS0pMUFRYXV9gYWRiY15UPDVAQ0VFam1NSUNESDEwNTxGUltncXN0dHNzdHR0dG1nXlBBNS0pJSUlJSQkJSUkJCUlJSUlJSYlJykpKiwuMDIzNTc5Oj9FS1FZYWhvc3Z4d3V1d3p9fX5+f4B/f4CCgoSFhYSCgoOBgoB9e3p3dnFubmtlYmBgYWJkaGpscHBydXV0cnJwb3BwcG5sbWpmYl9eXV1dXF5gYmdqcHN2e3t7e3p5dnp+goeKjo6OjIqIiIiKioqJhn97cmpmZWVkY2JhYmZpa29zdnd4d3d3eHl3d3RwamRdUEQ9Ojg4PEJKWGVyfIWLi4qKiImJiYqKioqGgnx3dHNzc3R0c3FpX1JHQ0ZKUFZLSUdGR0RDPzw6OTc1NDMyMTEwMTAwMjI0NDQ0NDc4ODg4OTo7Ozw9Pj4+Pj8/Pz8/P0BAPz8/P0BAPz49PT09Ozw8Ozs7Ozo6Ojo5Ojo5OTk5NzY3OTg4Nzg3Nzc3NTQzMjIxMC4tLS0rKysrKysrKyssLCwsLS0tLS0tLi4uLi4uLi8tLS0sLS0sLCsrKiopKSkpKCgoKCkpJzYxKionKCgoKCgoKCgoKCgoKCgoKSgoKCgoKCgoKCgpKSkqKysrKysrKysrLCwsLCwtLS0tLi4vLy8vMTM3OkFGTVNYXGBkaWptbnBycXFwbmxsaGRgXVtYV1FLQzs1LispKCgpKSknJicnJycmJiclJCUnKCcqLjU/TFZjb3d6fHt6enx8enRsXEs8LygnJicmJyorMDY6QUpUYGpyeX1/gYGBgYOCgHlxYlJAMSgjJCQkJCQnQm5ZPjY7NThBUWJpb3FoUD1GPjQ2Q0dGUE5NTlZZW15gYWJiYF1YVFI1RUdHQk5hTUpVXUsuMTY9RlJdaXFzdHRzc3R0dHRsaF1PQTUtKSUlJSUkJCUlJSQlJSUlJSUlJicqKy4wMDI0NTc6PDxBRUtRWWFob3N1eXh3dnh7fn+Bg4SDhISEh4eGhYWEg4OBgIB9fHl2c3JtbGlmY2FhYmJjZmdrb3FydHV1dHJwb29vb29ubGtoZGBeXVxcWlpbXGFjaW5zdnt7fXx5d3l8gIOIi46OjoyKiIiIiYmJiIWAfHNpZWRkYWBfXmBjZmpvc3V2dnV1dXV3d3d0cGtjWk5FPjw7Oz9GUV5pdoCIi4uKiYiIiImKi4mKh4B6d3Rzc3N0dHNxaWFVS0ZKUFZaS0lHRUVDQDs5ODY1NDIyMTAwLy8vLzExMzMzMzU2ODk3ODg5Ozs9Pj0+Pz8/P0BAQEBBQEBAQUFAQD8+PT09PT08PDw6Ozw6Ozw7Ojo6OTk6OTc3ODg4ODg4Nzc3NzU1MzMyMTAuLS0sLCsrKysqKioqLCwsLCwsLS0tLS4uLi4sLi8uLS0tLC0tLCwqKioqKSkpKSgoKCgqKicmKCgoKCkpKCgoKCcnJycoKCgoKCgpJygoJykpKSoqKioqKisrKysrKysrKywsLC0tLS0uLi4uMDAwMDM2Oj5ESkxUW19hZWlqbW9ub29vbmtqamZiXlxbWFRPRz83MCsqKSkpKjIvKCgnJycnJycmJiYlJCYjKC0xO0hVYW11eXx8enp8e3p1bmBQPzIqJyUmKCkqLzM5PUFJU11mb3Z9f4GCgoODgoF7dGlaRjYsJiQjIyUoKFtrWDw2PEJBSVllbnR3dFZLSENBRExQTUdDTFRYWl1gYGNiYV1YVE5GPkJBQ0RLWlRQTEw5MTE3PkhSXmpydHR0dXN0dHNybGlfUUI1LSklJycnJSUmJiUlJSUmJiUmJycoLC4uMDEzNTY6PD5AQ0hNUlxiaG9zdnh5eHh5e36BhIeIiIiJiYmIh4WFhIOEgYB9fHl2dHBsaWlkYmBhYWJjZWZpbG5xc3R1dHJxb29vb3BvbmxpZWJfXVtbWltbXV1eYmdscnZ6e3x9end6fYGGiYuNjo6MiYeHh4iIiIWCfnZuaGRjYl9gXFxgZWhrbnN1dXV1dXVzdXV1c29qYFlPRD8+Pj9FS1ZibXZ/iIyKiYmJh4eJioqLiIR/eXZzcnJ0dHZ1cmxlVk9KTVRbX0hIRkNBPzw5ODY1NTIyMjEwMC8vLy8wMTIxMzM1Njc3Nzg4OTs7PT49Pj8/Pz9AQEBAQUBAQEFBQUE/Pj4+PT09PTw8PDs7Ozw8Ozo6Ojk5OTk5OTk5ODg4ODc3Nzc1NTQ0MzIwLi0tLCwrKysrKyoqKywsLCwsLC0tLS0uLi4uLC4vLi0tLi0tLSwsKioqKikpKSkoKCgoKCgpKScnKCgoKCcnKCgnJycnJygoKCgoKScoKCcpKSkqKioqKiorKysrKysrKyssLCwtLS4uLy8uLjAwMDEzNjpBRkxTV1xgY2dpa21ubGxqamlpaGhjX1xbW1ZTTEM7NC0qKikpKSoqKSgoJycnJycnJSYmJiQmJSgrLjdDUV1ocnl8fXt7fHx7dm9mV0QzKSclJigqLjI2Oj5DSlJcZWx1e3+AgYKBg4OBfHlwYU8+MCcjIyMkJSlES0Y4Pz89PkpaZG9zd3JbVE5BPkFCTUtFUFRZWlteYGBhX1xYVE1HQjo4TUJAR1VaWlZFLDI0Nz5KVF5qcnR0dHVzc3NzcmxpXlBCNy8rKCcnJyUlJiYmJiUlJiYmJygqKysuMDM0NTc6Oz5AQkVLUVRcYmhvc3Z4d3d2d32AhIeKjI2NjY2LiYeGhYSDgoB/fHt2c29raGZiX2BiYmFjZWVoa2xwcXN0dXRycW9vbm5vbW5saWViXlxaWVlZWFlaXGBnbHJ2ent9e3h3en2BhomLjY6MiomHh4eIiIiFgHpzbGdkYmBeXlxcYGVpbG9xdHRzc3Nzc3R2c3JuamBYTkdDQD9CSU9bZHB6g4mLiomJiYmJiouLi4iEf3l1cnJzdHR1dXNtZFtTT1FZYGRIRURCQD05ODQ1NTMxMDExMDAuLi4uLzExMTIzNTY2Njk5Ojo7Oz09Pj4/Pz8/QEBBQUFBP0FAQEFAPz8/Pj09PDw9PT09PT08PDs6Ojo6Ojo6OTk5OTc3OTk3NzY2NTU1MzEwLi4tLCsrKysrKyoqKysrKysrLS0tLi0tKy0tLy0tLCwtLS4uLCwrKyoqKSkpKSgoKCcnJygoKCgnJycnJycnJycnJycnJycnJycnJygoKCgoKCkpKiorKyssLCwsLCwsLS0sLS0tLS4wMzAwLi4vMDAwNDc8Q0lOUldbX2NnaWtsa2lpZ2dnZmVjYV1cW1lVUUk/ODAsKSkpKSgoKCgoKCcmJycmJiYmJiYlJSYnKTA1P09bZXB3ent6fHx8fHhyaVtLOy0mJykpLTE1Nzs/REtPWWJrcnp+gYGAgYKDg4F9dWhWRTYrJiIkIyQoQE5KPjc5OTxKVWJxdHd0bE5DQjk3PkZGUFJXW11eX2FgXltXUkxGQDg1MlRDO0dQWVhcQDAyNjlAS1Zha3N1dXR0c3R0dHJsaF9RQTYwLCkoJycnJScnJiYmJCYmJygqLC0uMDM1Nzo7PT1CREZIT1NYXmRqb3N2d3l5eXuBhIaKjY+RkZCPjoyJiIeFgn6BfXl0cW5qaGNfXmBfYWVlZmdoaWxrb3FydHR0c3Fvb25tbm1saWViXltbWVhZWFdXWVxgZmxxdnl8fXt7e3p+gYaIi42OjIqIhoeHiYmFgn13cWpmY19eXlxdXmFmaW5wcnRzc3NycnN0dHRyb2dgVk5IRUNDRktVX2dye4WLi4uKiYmJiYqLiYuJhX56dnRzdHV1dXRya2VfV1ZYXmRpR0VDQD05ODY0MzMyMjAwMDAwLi4uLi8xMTEyMzU2NjY5OTo6Ozs9PT4+Pz8/P0BAQUFBQUFCQkJBQD8/Pz49PTw8PT09PT09PDw7Ozo6Ojo5OTk5Ojo3Nzg4Nzc2NjU1MzIxMC4uLSwrKysrKysqKisrKysrKywsLS4tLS0uLy0tLS0tLS0tLSwsKysqKikpKSkoKCgnJycnJygoJycnJycnJycnJycnJycnJycnJycoKCgoKCgpKSoqLCsrLCwsLCwsLC0tLC0tLS4uLzAuLi4uLzExNDY5P0RLUFRYW19jZ2hpaWhmZmVlZGNhYF5eXFtYU05FPTQuKikpKSkpKCgoKCgnJicnJiYmJiYmJiYmJysuMjxJVmNsd3p7enl5e3x6dWteTj8yKikpKy8zNzk+QEVLT1dhaHB4foGCgYKCg4OBfnduX049LycjIyQlJkJ1d0QmKTM6SFRjcHZ4dW5LOy4vMjcuO1ZZWl1eYGFhXVtWUkxGQTkzLi03P0VRT09MX005NTU6QUpVYmx1d3Z1dXV1dHV0bGhfUUE2MCwpKCcnJycnJycnJicmJygqLC0uMDM1Nzk8PT9BREZISlFVWmBkam9zdXZ4enuAhYiMjpCSk5OSkY+NiYiHhIB+fnl2cmxpZWFgXV5gX2FjY2ZnaGlsbG9wcXN1c3FwcHBubW5ta2dlYV1aWVdWV1RTVFRZXGRqcXd7fHx6eXl6foGGiIuNjoyKiIaHiIiIhYB6dXBmY2BeXVxdXV5hZmpscHJzcnBwb29wcnJycG1lXVRNSkdGRkpOWGJsdoCIi4uKiYmJiYuKi4qKiIR9eXZ0c3R1dnV1c25qYVtZXGBma0ZDQT06ODY3NDMxMTEuLzAvLy4uLi4uMDExMzQ0NTY4Ojo5OTs7PT0+Pj8/Pz9AQkFBQEBCQkFBQEA/Pz8/Pj49PT09PT09PTw8Ozs7Ozk5Ojk5ODk5ODg3NzY2NjY0NDExMS8tLS0sKysqKisrKysrKysrKysrKystLS0tLSwuLS0tLS0tLS0sKikqKikqKSkpKCgoJygoKCgnJyYmJiYnJycnJiYmJiYmJiYmJiYmJycoKCcoKiorKisrLCwsLCwsLS0tLS0uLS0uLi0tLi4uLy8wMzY4O0BITlNUWVxfYmVoZWNiYWFiYmBgX19gXl5bV1JLQToyLCoqKioqKSkoKCgoJycnJycnJiYmJiYmJSUpLjM6RFJgbHN3enp6eXl7enRtY1NDNCsqKi0yNTc8P0NGSk5VXWdudn6AgYGBgYGDgn95c2ZWQzMnJSQjIyI1aWQsIycvOkNTYm50dXNrYDYlJSorN0xZWltfYF9hX1lVUUtFPTcxLy4zMzhIUFFPVU5SVzQ1OkFMWWNtdXd5eHV1dHd0cm9rYFJCOTEtKioqKCcnJycnJycnKCkrLS8wMTI0Njg7PT9BQ0ZJS05TV1thZmxwdHZ3eHp9gYeLkJKVlZeWk5KPjYqHhoSAfHl0b2xnZGBcXF5gYGFjZWdmZmdpa21ucHJ0dXNxcW9vbm9ta2lmZGFdWVZVVFNUU1RVWFxka3B1eHt6eHh4en6Ch4mMjY2MioiIhoiHhoR+eXNsZWJgXl1cW11eYmVqbXBxcnJubm5vcnNzdXFtZ19XT01JR0lOVVxmcHuCh4uKiYiJiYmKiomJiYaCfXh1c3R0dnZ3d3VxbGRdXV9kam9DQTw6OTg2NTQzMTExLi4uLy8uLi4uLjAxMTEyNDU2ODg4OTk7Oz09Pj4/Pz9AQEJBQUJCQkJBQUBAPz8/Pz8/PT09PT09PT08PDs7Ozs7Ozo5OTg5OTg4Nzc2NjY2NDQxMTEvLS0tLCsrKiorKysrKysrKysrKysrLC0tLS0uLS0tLS0tLS0tLCopKiopKikpKSgoKCcoKCgoJycmJiYmJycnJyYmJiYmJiYmJiYmJicnKCgnKCoqKyorKywsLCwsLC0tLS0tLi4uLi8uLi8vLzAwMTI2OT5ESU5TV1teXmJlZGJgX11bXFxdXV9gYGBdW1ZPRj42LioqKioqKikpKSgoKCcnJycnJyYmJiYmJiUlKCsyOEJPXGlxdnl7enh4eHp2b2dYRjgvLS0vMzg7PkBER0pNVFxkbHZ9gIGBgYGBgoOBfXZsXUo4KyYjIiIgM0w9IiYvNDhEUmFudHd4Wj0kMjE/TVVaW1tfYGFgXVlWUUxFPzgwLC0vMjAuP01RUlRNSUk2NTpBTVpjbXV3d3d2dXd3dHNwaWBSQjkxLSoqKSkoKCgoKCgpKSksLC0wMTM0Njg6Oz9BQ0VKTU9SV1tfY2dscXV2d3l7foOKjpOWl5iXlpOSj42Kh4WBfXl0bmpnY2BcW1xeYGBhY2ZmZmdqa2xucHBzdnVzcXFvb29sbGpmZGBdW1dWVVNSUVBRUlNbYWlvdXl8eXd4eHp+goeJjI2NjIqJiYiJh4aDfXZwZ2FfXl1cWlpcX2Roam1vcHBwbm5ub3JzdHRxa2ZeVlBOTEtNUlhia3R9hIiLi4mIiYmJiomIh4eFgX14dnR1dXZ2d3d1cm5nYWFiZ21yQD07Ojg4NjU0MzIyMDAuLi0tLi4uLi8xMTEyMjU2Nzc6Ojo6PDw9PTw+Pz9BQUFBQUFBQUJCQEBAQD8/Pz8/Pz4+Pj49PT09PDs7Ozs7OTk6OTk4ODc4ODY2NjY1NTU1NDExMC0sLSwqKioqKysrKysrLCwrKywsLCwsLC0tLCwsLCwsLCwsLCwsKSkoKSkpKCgoKCcnJicoKCgoJiYmJiYmJiYlJSYmJiYmJicnJycnJygoKCkqKisrKyssLCwsLCwtLS0tLi8vLzAwLi4vLy8vMjA0ODtBR0tPVVdcXV9iYmFeXFxbW1pbXV1gYWFgXllUTEQ7MywqKioqKiopKSkoJyYnJycnKCgnJycnJiYmJicqLzU/Tlhlb3Z4eXt6d3h3dG9pW00+NDExMjY5PkBBRUdKTVNaYmhzeoCBgoGCg4OEhH94cmVTPzAoIyQuKzEwJiQmMjI2Q1FgbXR5fGlJSltbWVhYWVxfYF9fXVlVTkpEPTcwLS0sLi0tLl5TUk9OT1JJNDc8QU9ZZG52eHd3dXV2dnd1b2tiUkQ6Mi0qKikpKioqJygoKSosLS4wMTQ1Nzk6PD9CRUhJTFBRU1pcYmVpbXBzdnl7f4KHjpOXmJmYl5WUkoyKioeEgHt1bmlkYV5cWltdXV9fYmRkZWZnaWtsb3BxdHRzcnFwb29ubmtpZmJeW1lWVVRRUFBPT09TWWFpb3Z4enp5eHl6foGGio6NjYuJiYmJiYiHgXt2bWJeXl1bW1taXWFkaWtucXNxcG9vbW9yc3R0cGtkXVZRUU9PUVZdZm93f4aKiYmKiImJiomHhoWEgoB8eXZ1dHZ2dnh4dnVxamVjZWhscz06Ojg2NTU1NDMyMjAwLi0tLS4uLi4vMTExNDM1Njc3OTk5Ojw8PT0+Pz8/QUFBQUJCQUFCQkFAQEA/Pz8/Pz8+Pj4+PT09PTs7Ozs7Ozo6Ojk5ODc4ODg4Nzc3NTU0MzUzMjIvLi0sKioqKisrKysrKywsKystLSwsKyssLCwsLCwsLCwsKysrKykpKSsqKigoKCgnJyYmJycnJycmJiYmJiYmJSUlJSUlJSUmJiYmJycoKCgqKioqKissLS0sLCwsLS0tLS4vLy8wMC8vMDAvMDMzNjo/RElNU1ZaXF1fYWFeXFpaWVlYWl1fYmJiYF1YUkk/NjEsKioqKioqKSkqKSknKCgoJygoJycnJyYmJiYnKi0zO0hUX21zeHl5eHd3d3VyamFRRDczMzc6PD9BQ0JFSExPVmBncHp/gYGBgYGAgIODfXRrWUY1KyYmPTYmJSUhJSsvNkNRYG10eHp6eHJtZV1bWlxeX2BfXFlUUEpEPTUuLCssLS0tLTd1WFFOTEpTPy82O0RRW2NtdXd3dXZ2dnZ3dXBqX1JEOjMuKysqKSoqKyorKywsLS0vMDI0Njg5PD5AREdKS05SVVdbX2Nna25zdHZ4e36EiY+UmZmal5aUk5GMioiGgX11b2lkXltZWVpaW15fX2FjZGVmZ2lrbm9xcXR0cnFxcG9vbm5qaGZiXVhXVFNST05OTUxOUVdhaHB3enp6enp7e3+Ch4uNjY2NiYmJiYmIhYB6dGxiXltaWVlaWl1hZmpqbXFwcW9ubm1vcXJzc29sZF1YU1BQU1VaYWtze4KJioqKiYmJiYmIhoWEg4B/fHl2dXV1dnZ3d3d2cWpoZ2lrb3M7Ojg3NjY0NDMyMjAwMC4tLi4uLi4uLzEyMjMzNTY2Njk5Ojs8PD09Pj4/QEJCQkJCQkJCQkJAQD8/Pz4+Pj8/PT0+Pj09PDw7Ojs6Ojo5OTk5ODg4OTg5Ojo5OTo4OTk3OTc1NTIwKyopKiorLSstLCwsLS4uLSwsLCwpKyssKywsLCwsLCwsKyopKiopKSgoKCgoJycmJiYmJiYmJiUlJSUlJSUlJSUlJSUlJiYmJigoKCgpKSoqKioqKywsLCwsLC0tLi4uLy8vLy8vLzAwMTIzNTo+Q0dLT1VYWltfYF9eXVpZWVlZWl5hY2NkYmBcVlBFPDYvKyoqKioqKikpKiopKSkpKCcoKCcnJiYnJycnJygrMDlDUF1pcnl6eXd3dnd4dm1lV0g9Njc5Oz5BQ0NERkpNTVNeZmx1fICAgYGAgIGCg4B6b15NPDAnJiMiJCUkJCQqLzVBUV5tdnt8fHt2bmhjXVpeX2BhXVlVT0lEPTYtKyorLS4uLi48amZQUU5UXlg4Nz5EUFtmb3V3dXZ3d3Z2d3VvaGBRRTozLi0sKyssLCwsLSwrLC0uMTIzNTY5Oz5AREdJS05RVFdbXmJlaW1ucnN2eHt/hImRl5qamJeTkZKNi4eFgn95dG1kX1pYV1dXWVpaXV5fYWRlZmdqbW9wcHJzc3NxcG9wb25taGhlYVtWVFJRUE5NTElLTU9WX2hwdHl4eHd4eHp/hIiNjo2MjYyKiomIiISAeXJpYV1aWFhYWVpdYWZpbXByb29ubm9ucXV2dHNvamNdWFRSU1VZXWdtdX6FiYqJiYmJiYmJhoSDgoF+fnx5eHV3dXZ2d3d3dHJvaWdpbnF1Ojk4NzY2NTQzMjExMTEuLS4uLi4uLi8xMjIzMzU2NjY5OTo7PDw9PT4+P0BCQkJCQkJCQkJCQEA/Pz8+Pj4/Pz09PDw9PT07Ojs7Ojo6OTk5OTg4OTo9PkBAPz9AQUJCQkE+Pjw4My4rKioqLi8wMTExMjExMTAvLi4uLS0rLCssLCwsLCwsLCsqKSkqKSkoKCgoKCcnJiYmJiYmJiYlJSUlJSUlJSUlJSUlJSYmJiYoKCgoKSkqKioqKissLCwsLC0tLS4uLi8vLy8vLy8wMDEzNTg8QkZLT1JXWFxeXl5fXVpXVlZWVllcYWNjZGJhXFZNQzs0LSsqKisrKiopKSoqKSkpKSgnKCgnJycnJycnJycnKS00PkxYZ3B1eHh3dnV2d3RxaFpQQjo6Oz0/QURDRUZKSkxQWmJqcnp+gIGAgICBgoKBenFnVkM0KCYjIyQyNSEjKS01QU5ebHV6fX97eHBsZmBeX2BfXVlSTklCOjUvLCsqKywtLS4uMlFiU1NTT2JnQjc8RlNeZ3B1d3Z1dnZ2dnZzcGldUUU6My4uLSwsLCwsLCwrLC0uLzE0Njg4Ojw+QURISk1QU1ZZXF9jZGhtcXN0d3d7f4WKkJaXl5WUkZCOioeGg4B8d21nYFtXVVVWV1laWlxdX2FkZWdna21vcHByc3NzcnBvcG9ubWlnY15ZVVJQTk1MS0tJR0lNVF1mbXN2eXh3d3p8gISIjI6OjY2MioqKiIiEf3hvZl5aWVZXV1hZXWFoam1tcXBvbm9vcHF1dnRzb2piXFpYVlVXXWJpcXmBhoqJiYmJiYmJiYaDgn9+fX18eXh1c3V2dnd3d3Ryb2poaW9xdTk4NzY2NTQ0MzIxMTEwLi0uLi4uLi8vMTIzMzQ1Njc3Ojo6Oz09Pj4+PkBBQkJDQ0NDQkJCQUFAQEA/Pj8/Pz8/Pzw9PT08PDo5OTo6Ojk5OTg4ODk7QERGSEhISElJS0pKSElGQTozLiwtLzE0NTY3OTo6Ojg4NTQxMTAvLSsqLS0tLCwsLCsqKiopKCgoKCgoKCgmJiYmJiYlJSYmJSUlJSUlJCQlJSUlJSUlJSYmKCgnJykpKioqKiorLCwsLC0tLi4tLi4uLi4vLzAwMTEzNjg6PkVLT1RXWFtbXF5fX1xbWlhXWVhcYGNkZWZjXltUS0E5MiwqKysrKysrKysrKikpKSkpKSkpJycoKCgoKCgmJiksMjpHVWJtdHZ4eHV1dXh2c2tiU0g9Oz0/QUNERUVGRkpNUFddZm53foGCgICAgYGCg353bVtJNysjIyEjKi0jIycuNUBPXGl0en1+e3l1bWZjYF9dW1dRTElCOTItKywrKywsLS8vMTE1RldRS05XVjw4PUdUXmhyeHd4dXd3d3d2c25oX1BGOjQyLi4uLSwsLCwrKy0vMTIzMzU6Ojw+QENGSUxPUlRWW15hY2drcHJ2d3h5fICEiY+UlpWUko+Mi4iEgoF8eXJrZFpUVVVUVFVWWFpaW15fY2VnaGxtbm9vcXNzcnFwb3FwcW1qZWFbWFRRUE1LSEdFREVGS1FaZmxzd3h4eXd5fICDh4uMjo2Mi4qKiomIhH53bmZcWFdXVldYW15iZ2psbXFyb21ubm9wcnRzcm9qYlxZWVdXW2BmbHR8goeJiYqIiYiIiYeDgH59fHt8fHl2c3V3dnZ3eHd2cm9ta2xwc3c4NzY2NTUzMzMyMTEwLi4tLi4uLi4vLzEyMzQ1NTY3Nzk6Ozw9PT4+Pz9AQUJCQ0NDQ0JCQkFAQEBAPz4+Pj09PT09PT09PDs6Ozs6Ojk5OTg3OTo9QUZKTU9PT1BSU1NSUlNST0lDOTMxMjU4Oz5AQUREREVDQj88Ojk3MzAvLC0tLCwsLCwrKioqKiopKSkoKCgoJiYmJiYmJSUmJiUlJSUlJSQkJSUlJSUlJSUmJicnJycpKSoqKioqKywsLCwtLS4uLi4uLi8vLy8vMDEzNTc8QEVLT1NWW1xcXV9eXWBeXFtaWlpdYGFjZGVkY11ZUEc+NzArKysrKysrKysrKyopKSkpKSkpKSknKCgoKCgoJiYnKzA3QlBcaXF1d3h2dHR2dnNtZ1lOQj0/QEJEREVGR0ZIS09TWWFocnuAgYB/gICCg4OAe3NjUD8wJyQiISMiIiMnLTJATVppdHh+fnt5dW5nYl9dW1dSTUZBOjItKyoqKissLS8wMDI0MkxXS0lJW042OEBKVWBqdHh4d3d3d3d3d3Rval5PRTw1MC4uLi4tLCwsLi4tLzEyMzM1Ojs9PkFESEpNUFJWWFteYmVpbXF1dnh7fH2BhImOk5ORkI+Ni4iGgoB8d3RuZ2BXU1VSU1NSVFZZWlteX2FkZ2psbW9vcHJzc3JxcG9wb21rZ2JfWVVRT01LSEZEQ0FBQ0hPWWNscnd4d3d4e32BhIiLjI2Mi4qKioqJiIR+d25mXVlZWFZXWVxfYmhrbnBvb3Bub29yc3R1dHNwaWJcWVlZW11jaXB3f4WIiYiJiIiJiYiFgH58e3h7fX15d3V2d3Z3d3h4d3RxbWtrbnN3NjY2NjU1MzMzMjExMC8tLC4uLy8vLzAyMzQ2NzY3Nzg6Ojo8PDw9PT4/P0BDQ0NDQ0NCQkJAQD4+Pz8+PT09PT09PT09PTw8Ozo6Ojk5ODk6Ojs9QEVJTlJWV1dYWVtbWlpaXFlUS0M8Ojs+QUNJS01QU1RST05KSklFQD04MS8tLC0rKysqLCoqKSkqKSkoKCcnJycnJiYmJSUlJSUlJSQkJCQkJCQkJSUlJSUlJSUnJycnKCkqKisrKystLS0tLS4uLy8vLy8vMS8xMTIyNDg8P0RJUFJWWltdXmFiY2NgX15cXFxdYGJhYWRlY2FdVk1EOzQuKysqKisrKysrLCsrKioqKikrKSkoKCcnJycnJyYmKCkvNT9MWGZvcnV1dXV0dnd0cGtfU0hBQEJDRUZGRkdHR0lNTVJbZG12fYGBgYGBgoSDgn10aVhFNSgkIiQjJCMjJiw0QE1aaHN6fXx8eXVsZWNeXFdRTEZBOjItKioqKisrLC0uLy8uLjNZVFBJSk1WPTpBS1ZfbHd5eXh1dXZ4eHZzbmhdT0Q9NjIvLy4uLi4tLC4uLS8wMjM1Njg6PD9BRklKTVFTVlhcX2Rmam5ydnh7fH1+gYWKjpGRkI2NioaFg399eHJuaGFaV1NRUE9SUlJTWVpbXF9hY2hqbG5wcHNzc3Jyb29vcG9sZ2RhXFdST05LSkdDQT48PD9FTFZfaXB4e3l3d3l/goWJi42MiomJioqJiYeDgHluZV1YWFhXWFpeYGNoa21ucHBwcG9wcXJ1dXRybmliXVpYWl5iZ212fIKGiYqIiIiGiIiHgn58enh4eHx8end2dXV3eHl5eXd0cW1rbXF0djY1NjY2NTQzMzIxMTAwLi0wMDExMTEzNTM0Njc3Nzg5Ojo6Ozw8PT0+Pz9AQkJCQkFBQUFBQUA/PT0/Pj09PT09PT09PDw7Ozo6Ojk5OTc5Ojo8PUFHS1BTWFpaW1xeXl9fX2FfXFVNRUNESU1QVlhbXl9gYl9fXVlWUk5HQj02Mi8uLSwsLCsrKykpKikpKCcnJycnJycnJiUlJSUlJSUkJCQkJCQkJCUlJSUlJSUlJycnJycoKiorKysrLS0tLS4vLy8vLzAvMDAwMTEyNTg9QURJTlJXW11eYWJkZ2ZmZGJfXl5eX2FjY2RkZWNfXFJKQTkxKysrKiorKysrKywrKyoqKioqKioqKCgnJycnJycoKCgpLDI7RlNga3J1d3V1dXV3dnFuZ1lOR0NCREZHRkdGRkZISUlMVF5ocXl+goGBgYGCg4KAeG9gTTwuJyMlIyQkJCgvOUFOXGdyd3p7e3h0bGVfXFVRS0M/ODIsKioqKiorLCwtLi8vLi4yTGRYSkxMWD05QUtXYm12eXl4d3V2eHh2c21nXU9DPDYyMi8xMTAvLiwuLi8xMDIzNTY4OjxAQ0ZJS05SU1ZZXV9kZmtvcXV5fH+Ag4OIi42Pj46KiYeGgn98eHRwaWNdV1NRT09PUFBSVVZZW1xeYGNoamxucHBxcnJxcXFxcXBvbWllX1pUTk1LSUZDQD87Ojo8QUpVX2hvdnd3dXd5foOFiYqMi4qIiIeHiIiHg394cWdgWlpaWVxbX2NmaGtvb3Bwb29vcXJzdXJ0cm1oYl1bWlteZGpxeH+Eh4mKiIiIiImIh4J+enh0dHh7e3h5dnd3eXl5eXh3dHFta25wcnU3NzQ0NTU0MzMyMTExMTAuLjEyMjExMzQ1Nzc3Nzg5OTo6Ozs9PT8/QD5AQUJAQ0NEREJCQUA/Pj49Pj49PT09Pj4+PTs7Ojo6OTk5ODc4ODk6Oz1CR0tPUlZaWltcXV5hZGJhYmBdV1BOT1NYXF9hY2VqamhnZmZjX11YVlFJQTw1Mi0rKy0rKyoqKikoKCgnJycnJiYnJyYlJSUkJCQkIyMjIyQkJCQkJCUlJSUlJSUmJycnJykpKyssLC0tLi4vLy8vLzAwMC8wMDEyNjk9QkZKTlRWWl1dYWNlaGpraWVlY2BfX2BhY2VmZGNhW1dNRD43LyssLCsrLCwsLCsrLCwrKyoqKiorKykoKSkoKCgoKCgmJyovN0RRXWlydXV1dXN0eHd0cGtfVEpDRERHRUdGR0dGREZFRk1XY254foKCgoKCgoODgXtzZFNBMSckJCUmJicsNThETlpncnZ3eXl1cm1lXVdRSkU/ODArKSkpKysqKy0tLi4vLzAwMUNmVlJOUFY4PUNNWGNudXh6eHh3d3h4dnRtZ11QRDw2MjMyMjIyMi8tLi8wMjIxMzU3OTo9QENHSk1PUlVYWV5hY2dscHJ2en6AhIOFiYyNjYyKiIeEgn98eHRwa2NcV1NQT09PTlBRU1RWV1teX2NkZWdtb29vcHFycXFxcXJwb21oY15ZU05LSENCQD07OTc3OkBLVF9pcHV3d3V3en2DhomKjIuKiIeGh4eGhoOBenJpZF1aWFpdXF9hZWhsb29xcXFxcHJzdXV0c3BsZ2JcXFxeX2Ztc3qBiImKiYiIiYqKiYeBfXl2c3R4fHp4eXh3eXh4enp4d3VybWttcXR1Nzc1NDMzNDMyMTExMTEwLy8wMjIzMzM1Njg5OTc3ODg6Ojs7Ojw/Pz9AQEFBQUFBQkJCQUBBPj0+PT09PDw8PD09PTw7Ozo6OTk5ODc3ODc3OTw+QERJTE9SVVhXWFtcX2JiZGZkY2BbV1peXmNlZ2dpa2ttaWtraWdlY19ZVU9IQDkyLSwsKiopKiopKCgoJycnJyYmJSUlJSUlJCQkJCMjJCQkJCQkJCQlJSUlJSUlJicnJycpKSsrLCwtLS4uLy8vLy8vMDAxMTI0ODs/REhMUFRWXl9iZGVpamttbGxpZmVjYWBiYmRkZWRkXllTSkE5Mi4rLCwrKywsLCwrKywsKysqKioqKysrKSkpKCgoKCgoJyYpLTRATVlkbnN2dXV0dXd4d3NvZllPSERERkZGRkdGREE/PkJGUF1qdHyCg4KCgoKDg4F8dmpaRjYrJSUmJikuMTc+Rk5bZ3J2d3h4dXJtY1hSS0Q+ODApKSopKSsrKywtLS4uLy8wMDA/YmFRTE9MRTxCTlllb3Z5enh4d3d4eHZ0bWddUEQ8ODQzMjIyMjIxLS4vLzAyMTM1Nzk6PUBDR0pNUFNWWFpeYWNnbHBydnt/goaFiIqMjI2LiIaFgn98eXRxa2NeV1NRUE9PUFJTVVVXWVpbXmFiZGhqbW9vb3BxdHNxcXFycG9saWNcV1BMRkNAPTw5ODY1Njg+SlVgaXB1d3d1eHmAhIaJi4uKiIiHhYaHhoaDgHlwZmJeXFxcXV5fYmZpbnBxcnJxcnJ0dXZ2dnRxa2VhXVxdX2Job3d+hImKiomIiImKiomHgHx4c3F2eXt6enh3d3Z4eHh4eHd1cm9tbW5xczY2NTQ0NDMyMTAxMjExMjExMTMzMzQ0NDY1Nzc4OTk6OTk6Ojw7PT8/P0BBQEFBQUBAPkBAQD8+PTw9Pj09PDw9PTw8Ozo5OTk5ODg3NjY2NTY5Oz9CRkpNUFNVVVRTVFhdYWNlZWdlY2BgYmNmZWdpaWlpbGxrbGlpZ2RjYmBbVUxFPTUuLCoqKSoqKSgoKCYmJycmJSUlJSUlJSQkIyMjIyMjJCQjIyMkJSUlJSUlJCUnJycnKCkqKywsLS0uLi8vLy8vLy8wMTU2NzxARUlNU1dZXF9kaGptbnBwcnFvamloZGNhYmNjYmNhYFtUTUM8NS8uLCwsLCssLCwsLC0sLCsrKysrKysrKioqKigoKSkoKCgoKi0yPEhVZG1zdnZ2dnZ2eXl3dGlfU0lFREVHR0ZFRUI+Ozs8QExYZHJ6goODgoGCgoKCgHdwX0w7LiYmJyktMDU7QElQXGdxdnd3d3Nwa19VTUY/NS4rKCkpKiorKywsLC0uLi8vMTExNE5lUktPVV5NP1FbZ3F3enp4eHd3d3d1c21oXE9FPTg1NDMzMjIyMC8vLy8vLzEyNDc5Oz5BQ0hLTE5TVVdaXmJjZ21xdHh+goOGh4mKi4uKiYaEg4F9eXRxa2ZfWFRST09PUlJVWFhaWl1eX2JjZWdqa21ub3BxcnRzc3Jyc3BubmlkXVZRS0RBPjs6NzYyMjQ4P0pWYGtxdnl4dnh7f4SHiouLiIeHhoWGh4mHhH94b2diYF5dX2BgY2Voam5xcnJyc3N1dnV4dnZzcmljXl1cXmJmbHN5gIeJi4uKiomKiouKhn97dnRydHh8fHh4eHd3eHh5eXh3dHFta21vcnQ2NjU0NDQzMjEwMTIyMjIxMTE0NDU1NTU2NTc3OTg5Ojo6Ozs8PT4/Pz8/QEFAQUFAQEFAPz8+Pj08PD08PD09PDw7Ozo6OTk5ODk5NjY2NTQ1ODk8P0JGSEtKSklKSklPVFhdX2VoaGhlZGVnZmVlZGRkY2VlZmdnZmdpaGhoZWJbU0xBNjAqKSkqKikpKCgnJicnJiUlJSUlJSUkJCMjIyMjIyMjIyMjJCUlJSUlJSUmJycnJygpKissLC0tLi4vLy8vLy8vMDQ2OTtBR0xRUlhaYGRnaW1vcXNzd3Vyb21qZmVjYWNkY2JiYFtVT0Y8NTEvLiwsLCwsLCwsLCwtLCwrKywsLCwrKysrKiooKCkpKCgoKCksMTlEUl9qcXZ1dHR0dnl6enVtYlhNR0ZGR0dGRUM/Ozg3ODxGVGJtdoKEg4KBgYKCgoF6c2VUQjIpJykrMDQ5P0VNVF1ocXd4d3dyb2lcUEhAOC8rKSkpKSoqKyssLCwtLi4vLzExMjI9Z2hSUElaYUpNW2hzeHp5eHd3d3d3dXNtaFxPRT04NTQzNDMyMjAwMDAwMDAwNDY3OTs+QUNIS01PUlRYWV1eY2dscHR4foKFiIiKi4yJiYiFg4KAfXl0cGpkXVhWVFVTVVhYWlxdX2BgYmNkaGlpa21vb3BxcHFzcnNycnNycG9tZmBaVE1DPTo5NzUzMTAyOEBLV2FrcnZ3eHZ4e3+Eh4qLi4mIh4aHiIeIiIV/eG9nYmBgX19fYWRmaWxvcXJzc3R0dnZ3eHZ2cnBpY15cW15iZ293fYSIi4yLioqJioqKiYR8eHNwcHN5e3t5eHh5eXh4eXl4d3Rxb21ucHJ0NTU1NTQ0NDIyMzIyMzMzMzM0NTU1NTY2NjY2Nzk7Ozs7Ozw8PD4+Pj8/Pz9BQkBAQEBAPz4+PT09PT49Ozs7Ozo6Ojo6Ojk5ODg3NzU1NTU0NDU1Nzo5PD49Pj46OTk7Q0lRV19kaGloZ2ZlZWJhXFdUVFhcXF1dXWBhZGZoamttamBWTEE0LSopKiooKCkoJyYmJiYmJSUlJSUlJCQkJCMiIyMjIyIkIyMkJSYmJiYmJycnKCgqKiorLC4tLS0tLy8wMDAxMjQ3PD9ES1BUVllfYmdqbW9xcnZ1eXh3dHFtaWVkZGRkY2NiX1lWUUZBOTIsLCwsLCwtLS0tLCwuLi0tLS0uLi0sLS0tLSsqKigpKSkpKSkpLDI3P05daXF0dXV0dXZ3eXl3cGdcUUlHR0hFR0VDPTc0NDQ5QU9fa3mAhIWDgYCBg4SDfndrWkg5LiotMDQ6PkNKUVhfaHF4eHl2cW9oXE9EOTAqKSkpKSkqKioqKywtLS4uLi8vMTAzO1JkVFRHTk5SUVpndHp8enp5dnZ2dnRxbmdcT0Y+Ojc2NjU1NTMxMTAwMDAwMTM1Njc6PUFDR0pNT1JTVlhZYGJoam5zeH2BhIaKi4mKiYiEg4KBf3x5dnBoY1xYVldXVllbXWFiY2VlZ2prbG5ucHFyc3NxcXJzc3JycnF0cnJxbmplX1hRSkI8NjU1MzIwMjdAS1ZhbHN2d3d2en2BhYiLi4uKiYiIiImKioaFgHlvaGRiYF9eX2JnZmpucnFzc3N0dXh4eHp3dXJsZmFdXV1gZWpyeX+FiYuMi4qKi4qMioiCfHdxbXB1eXt7eHd2dnZ4eHd3eXh1dHBvcHJzdTU1NTU0NDQ0MzM0MzQ0NDQ1NTU1NTU2NjY2Njc5Ozs7Ozw8PD0/Pj4/Pz8/QEFAQEBAPz09PT09PDs8PDo6Ozs6Ojo6Ojo5OTg3NzY2NTU0MzMzMzE0NTY2NTMzMDAwMjlASFFZXWJlZ2VmYl9ZVE9IRkZGSEtMUFFUWVxhZmttcG5sZVlMPjEsKysrKikpKCgnJiYmJiUlJSUlJSQkIiIiIyMjIyMiJCQkJCUmJiYmJicnKCgoKioqKywuLS0tLS8vMDAxMjQ5PEFGS1BVWVxjZ2lubnJ0dnh6e3x7d3RybWpnZmRjY2JgXllWT0hAODItLCwsLCwsLS0tLS0tLi4tLS0tLi4uLi0tLi4uLCsqKSkpKSkpKSwvNT5LWWVuc3V1dHV2d3l5eHRqX1VNSEZHRkVDQDo1MTAyND1KWmd2foSGhIGAgIGCgoB5cWFOPjMwMTM5PkJITlNaX2hxdnh5eHNuaFxMPjQtKCkqKSkpKiorKyssLS0uLi4vLzAxND1UTlFPS1FMQk1danZ8fHt5eHZ2dnZ0cW5oX1JGPjo3NjY1NTMzMTExMTAwMDAyNDY3Oj1AQkVISk1QU1VZW15gZWlscnh+goeKi4uKh4eFg4KBgH57d3RwamReXVhaW1tdYGJkZWlpbGxucHFxcnJ2dnZ2dHRzdHNycnJ0dXR0dXNva2ZeWFBGQDs4NjUzMjM4QEtWYWxzdnd2eHt+goaIi4uLiomIiIiJioqHhH94b2hlY2BfX2BjZWZqbnJzdXR0dXZ3eXl5d3VxbGVeXV1eYGZudnyCiIuMjIqLioqLi4mHgXx3cGxvc3l7e3h4d3Z2eHh3d3h4dXRxcG9xc3U2NjU1NDQ0NDQ0NDQ1NTU1NTU1NTY2NTU2Njg5OTo6Ojs7Oz09PT09Pz8/Pz8/Pz8/Pz4+PDs8PD07PTs7Ozo6Ojo6Ojk5ODg3NjU0NTQzMjExLy4uMDExMC0tLiwrLC41OEFKUVlcXWFhYVxVTUM6NTU2ODc4OjtBRktRWWNqbHJ2dG1jVUo6MS0uLCsqKSknJiYmJiYmJiUlJSQkJCMjIiIjIyMjIyMjIyQlJSUmJicnJygoKCoqKywsLS0tLS4vMDAxMzQ4P0JITlFZXWFjZmptcnN2d3p8fHl6enZybmxqZWRkYmJhXVlSTUlBOjMtKywsLCwtLS0tLS0uLi4uLi4uLi8vLi8wMTIyMTAtLSopKSkpKSksLzM7SVdjbXJ1dHR0dnZ4e3d1b2VXTUlHRkVDQD03Mi0sLjI4RVVicXyChYOBgYCAgoJ/e3ZqWUg6Nzc4PkJHS09TWmJqcXd7eXh0bmhdTT4zLCkpKSkqKioqLCwqLC4uLi4wLzAwMjNPUllcUlBSVEtBW2t1enx6eXd2d3d2dXJtZ15RRj45NzY2NTQzMjIyMTEwMDExMTM0NTo9PkFER0lMUFNVV1leX2NmanF3foOHiYuLioiFhIKBgIB9e3h0b2plYV9fXV5hYmRlaGlqa25wcnR1dnd2eHh3dnZ2dHRycnJzdHV2dnd1dHJtaWBcU0hBOjc0MzEyNkBMV2JsdHh3dnh6f4KGio2Mi4mIiIiJioqKiIN+d29pYmBfXmBiZGdobHBydHR1dXd5enp5end0bmljXl1dX2NocXh/hIiMjIyKjIuLjIuJhX95cm1rb3R4enp3dnV2dnh4eHZ4eXZ1cnBxdXR0NjY1NTQ0NDQ0NDQ0NTU1NTU1NTU2NjY2ODg5OTo6Ojo7Ozs9PT0+Pj8/Pz8/Pz4+Pj49PTw7Ozs8PDw7Ojo6Ojo6Ojo5OTg4NjY0NDQ0MjIxMS8uLi4uLiwsKywrKywuMDQ6RElOUlZZWVhSST40MC4uLSwrLC4wMjc/R1BaY2pxdXdza2FVSDw3NTEvKykoJiYmJiYmJiYlJSUkJCQjIyIiIyMjIyMjIyMkJSUlJSYnJycoKCkqKissLS0tLS4vLzAyMzU4PURLTlNbXmNmaGxub3R3eHp8e315eHdzcGxpaGVjYmBdWlhSS0Y/OTItKyssLCwsLS0tLS0tLi4vLy4uLi4vLy8wMTI0NDQzLi0sKyoqKSkpLC0yOkZTYWtzdXR0dHV1d3l6eG9lXVFLR0ZEQj46NTAsKiowNkFSX215gYWFgoCAgIKEgn53b2FTQzw7PkJHS05TV1xkanF3e3p5dnFqXk8/MywqKCkpKioqKiwsLC0sLC4uLjAxMTIzP2JvY1JKS0hQU2FsdXp8enl3dnd3dnVybmheUUY+OTc2NjU0MzIyMjExMDAxMTEzNDU3Oj0+Q0VHS01QU1dXW1xfZGpweH+DiImKioiGhIKBf4B+fXp4dG9pZWFhX2BhYWNkZmlpa21tbnF0d3Z4eHp6eXh4eHV0cnJyc3V2eXl6enl2c3BoYlpRSkE7ODY1MzhATFlkbnR3eXh6e4CDh4uOjoyKiYqJioqKiYiDfnduZ2JiYWBfYWRnaW1xdHR0dXV3eXt7eXh2cm1mYV5dXWBjanR8gYaLjIyLioyMjYyLiYV/enFsbG90eHp6d3Z1dnd4eHh2eHl4dXJwcnZ2dTY1NTU0NDQ0NTU1NTU1NTU1NTU1NTU3Nzg4Ojo6Ozs7PDw9PT48PT8/Pz4+Pj4+Pj49PT07Ozs7Ojo7Ojo5Ojo5Ojs5ODg5NzY1NTQzMjExMDAvLy4uLSwrKysrKysqKisvNTtBR0xMT05KQzkzLSopKSoqKioqKisuNDxGT1pjbXJ3dXNqYFJNRD06NTMtKigmJiYmJycmJiUkIyQkIyIjIiMjIyMjJCQkJCQkJCUlJiYnJygpKSkrLC0tLi4vLy8wMjU4PEFKUFRbX2Nnam1wcnN1d3d6fHx5eHdxb25rZ2RgYl5bWFNPS0Q9NjEuLSwsLCwtLS0tLi0uLi8vLi8uLi4uLy8wMjI0NDY1NDAvLS0sLCopKSosMDlCUFxncHR0dHR0dHZ4enlxaV9WTEdGQ0A8ODMuKygpLjU/TFppdoGFhYOAgH+Cg4SCfXRrW0xDQUNHSk5RU1ZcY2lyd3t6endxaV5QQTQuKioqKioqKyssLC4uLi4vLy4uMDAyMk1uYUFLSEpBTVVgbXZ8fHt4dnZ3d3Z2dG9oXlFHPzo4NTU1NTQ0MTEyMjAwMTExMzM1NTY7PkFFRUhKTVBUVldcXWJob3d9g4aIiYiFg4KBgH5+fXt5dnJtaGRiYmNiYWNkZGZnaGtsbm9xc3Z4eHl6e315eXh1c3JycnN1d3t+fHx6fXx4cWtjWlJJQTo2NDQ4QU1YZG9zdnp5eX6BhYiNjo6Mi4qLi4uLi4qIhX93bWZiXl1cXV9jZmlucnN0dXV1dnh5eXp3dHBsZF9dXl5jZ293fIWKjI2MioqMjI2NjImEf3dwa2lwdXd5eXd3d3d4d3d4dnh6eXdzb3BydXU2NTU1NDQzMzU1NTU1NTQ0NDQ2NjY2ODg4OTo6Ojs7Ozw8PDw+PT4/Pz8+Pj09PT09PDw8Ojo6Ojw4Ojo7OTk5ODk5OTg4NzY1NTQ0MjIwLy4uLi4tLSwrKioqKioqKSkqKi00Oj1AQ0FAOjQsKyopKioqKikpKSkpLC4yO0dQW2VsdXZ0cWlhWlJPSkVAOjMsKCcnKisrKigmJSQkJCMiIiMjIyMjIyQkJCQkJCQlJSYmJycoKSkqKywtLS4vMDAwMTQ4O0JHTVRaYGRla25xcXR3d3h5e3l2dHNwbWtoaGRiX11YVVJNR0I7NTEtLS0sLCwsLS0tLS4uLi4vLy8uMDAwMC8vMTEzNTQ1NjUyMC4tLCwsKiosLTE4Qk1aZW5zdXR0dHR2eHl3cmpfVkxHRUI+OTUxLSkoKSwzOkZWZHJ9gYSDgH9/gIGEhH97cWJVTUhJS01PUVNYXGNncHR2d3d3c21iU0U+OywqKysqKisrLS0uLi4uLi8uLjAyNDZWY0pCSkdLSUhXYG12fHx7end3eHh3dnRvaF9SSEA6ODU1NTU0NDQ0MjIwMTExMTMzMzU2ODs+QURGSUtOUVNVWFxiaHB3fYOIiIiGhYKBgH9+fXt8eXRwbGdjYmNjY2NgY2RlZmhpam1vcHFydHd5e3x8enp4dXNycnJzdnl7fn1+gIGBfHlya2RaUkg/NzI0OEFNWmZvdnh5eXt/gYWIjo+OjIuKi4uLi4uKiIV/d25nYl5cW11fYmVqb3JzdnZ1dnh6fHt4d3NuaGFeXFxeYmhwd4CGi42NjIuKi4yLioyJg350bGpqb3R3eXl3d3d2d3Z2d3h6e3l3dHN0dXZ3NTU2Njc3NTU1NTU2NzY2Njc3Nzc3Nzg4Ojo6Ojo7Ozs9PTw9PT0+Pj4+PT08PDw8PDw7Ozs7Ozs5OTw7Ojo4ODg3Nzc2NTU1NTUyMjMvLy8uLC0tLS0rKykpKSkqKSgoKSgpLDE1Njk4NDAsKigoKCoqKiopKSkpKSkrLTM5RVBbZXF1dnVybGdiXllRTUY+ODAsLTIzMzIyLSclJCQjIyMjIyMjIyMjJCQlJSUlJScnJigoKSkqKywtLS0uLy8wMTQ3Oj9GTVNaXmRnamxucHFydnd3d3Vzcm9ta2lmYl9cW1hUUk5IRD83MzAtLS0tLCwtLS0tLi4vLS4wLy4uLzExMTEyMjIyNDQ2NzY0MS8tLS0tKysrKy4xNT5KVWRscnR0c3Nzdnd4d3NsYVdMRkJBPDgzLywpJycqMjhDUmFveoCDgoKAf3+AhIWCfXdsX1VPTk9OUVJVWFtgZmpyd3d3d3RtYlRJTkotKSkpKiorKy0tLS4uLi8vLy8wMTZRbEc3PDk/SUlKVmFtd3t8e3l4d3l4d3Z1cWxhUkdAPDk2NjU1NDMzMzMzMTExMTMzNDQzNjg5PD5BRUdKTU5QUlRbYGhxeX6Dh4iIh4aEgH9/fXx6eXZybmllYmFgYWFhYWFiYGFiZGVnZ2hqbnJzdXh6enp4dnRycnJydHZ3eXt6foKEhIJ+e3FrYlpRRTw1NDlEUFtmcHd5eXl6foKGiY+Qj4yMi4qKjIyLioqHgXlwamVcW1paXGBkam5zdXV2dnh5ent7eHZxa2RfW1lZWmBoc3uCiIyOi4uLjIuLjYyMiYN9c2toam5zeHl4d3d1dXZ3eHZ4e3t6d3N0dXV2eDY2NjY3NzU1NjY2Njc2NjY3Nzc3Nzc4ODo6Ojo6Ozw8PT08PT09Pj4+Pj09PDw8PDs7Ojo6Ojo6Ojk5OTk5ODg4Nzc3NjU1NTU0MzIxMC8uLiwsLCwsKysqKSkpKSkoKCkpKCosLTAwLSopKSgoKSkpKSkpKCgpKSkpKistMjhDUFxpcHV3dXRwbGxmYVtUS0U/Ojs/QEE/PzcxLCUkIyMjIyMjIyMjIyQkJSUlJSUnJycoKCoqKissLS4uLi8vMDM3Oj5DSlBXXmNma2xtb3BzdHR0c3JwbmtpZmRhXVxaWFNQTUlEQDs2Mi8uLS0tLSwsLS0tLS4uLi8wLy8vLzAxMTExMjIyMjMzNTY1Mi8vLi4tLSwsLCwtMDM7R1NganJ0c3Jzc3R2d3dzbGJYTkZAPzk1MCwsKScnKS42P0xbaXV9goKCgH9+gYOEg4B9c2ddVU9PUFVVV1pcXmNnbHJ2dnZza19SUEdCLyoqKioqKystLS0tLi4vLy8vLzI1YYZdOThJUU9PS1VjbHh9fn15eHh4eHp4dXFsYlRHQDw5NjY1NTQzMzMzMzIyNDY4ODc3NTU2Nzk8PkFERkhKTE5QWF5nb3Z+g4eIiIWEgoB+fn17eXd2c21nZGFgXl1eXVxaW1pbWlxdYGNiZGZpbXF1dnd3dHNxcXJycnR2dnh6eHx+gYOEgn56cmphWU9FPDk7RlFdaHF4enp6fYCEh4qPkI+MjIuKioyMi4qIhYJ6dGxmXlhXWVtiaG1ydHR0dXZ4eXp7eXV0bmhgW1pZWFtia3R8g4iMjIuKioqJi4yNi4iCe3JsaWtuc3l5eHd2d3Z1dHV2eHt7end0c3V2dXc3Nzc1Nzc1NTc3NjY3NjU1ODg2Nzg4OTk4OTo6OTw9PTs+Pj88PD09PT08PD09Ozs6OTk5OTk5OTk5OTg4ODk4OTY1NTU1MzMyMzIyLy4uLC0sLCsrKioqKiopKSgoJygoJyYnKCgpKScnKCgnKCkpKCcpKSgoKCgoKCgoKi40PUdTXmhyd3l2dXVzcG5oYl1WUU5PUFFTU09IQTcsJSMhIiIkJCMjIyQlJSUlJiYnJycnJygpKiwsLC0uLjAxMTI1OD1CSU9WXGFmaWttb3BydXRycW5paWZmY11aWVZUUExKR0VCPjgyMC4uLi0tLS0tLS0tLS0tLS0uMDAxMTExMzM0NDIyMjExMzQ0MjIwMDAwLi0sLi0tLS8zOUVQX2dxdHNzcnN0dnZ1c25kWU5FQT04NC4rKyknJykuMzpHV2dweoKDg3+AfX6Bg4SDgXpvZVxWVFNVVlhaWVtcY2lvc3Z1dG1hWFM3PjcrLCwrKywsKywtLS4uLzAwMDEzNlV3Z0lKSVRUUU9ZZHB4fX18eXl4enl6eXlzbGNVR0A8OTY2NDQ0MzIyMTM0Njk9PD08PDs4NjU3OTw9QENERklKUFVdZ3J5f4OHh4eFg4GAfn17enh2dnBsZWJeXFlZVVZVVFNTU1NSVFRVWFpdYWZrbm5xcXFycnJycnJyc3NzdXh4en1/goSCgHhyaWJWS0I+P0pTX2pxeXt7en6AhYmMkJCPjoyLi4uMjIyMjIiDfXdwZ2BdWVxeY2pwc3V0dHV3eHp7endzcWpkXVlXV1dcZG13foaLjIyLi4qKiouLjIuIgntwa2lrbXN5eXh3dXV2dnd3dnd7e3t2dHN2dXR0Nzc2Nzc3NjY3Nzc3NjY2Njc3Nzc4ODk5Ojk7Ozo7Ozs6Ozs8Pj49PT09PDw7Ozs7OTk5OTk5OTk4ODg4ODg4ODc3NjY0NDIyMTIwLy4uLSssLCsrKyoqKSoqKSkoKCcoKCcmJygoJycnJycnJygpKSgnKSkoKCgoJycoKCgrLjY9SFJdaHJ2eXh4d3V0cW5oZmFgYWNkZmZkW1NIOiskJCIiIyMjIyMkJSUlJSYmJycnJygpKSosLCwtLi8xMTE0NzpBRk1TWWBkZ2psbnBxc3NvbGhmY2BcXFlVUk5LSEVFQT48NzUwLy4tLi4tLS0tLS0tLS0tLS0uMDExMTEyMTMzNDQ0MzMyMjQ1MjIyMTExMC8tLi4uLi0vMjhDUFxnb3Jzc3JycnR0dHJtZFlORUA8NzIuKykoJycnKzE3QVFgbHeAg4OAf31+gYOEhYN+dWhgWVdWV1dXV1VXWF5mbXR1dXJoWlhMN0A6LCwsKyssLCssLC0uLi8wMDAyMj5YX1xUV0NATlVVWGZweH19fHl5eHp7enl5c2xjVUlAOjg2NjQ0NDMzMzM4OTxDRkVGRURCPjo3Nzc4Ozw9QENHSlBZYGlyeX+FiIeGg4GAgH57enp4dnRuaWNfWVRTUE5NTEpJSktMTExMTVBRVFhdZWhrbnFwcXFxcHJycnJycXFxcnV2en6AgoJ8eHBnW1RJQUJLVGBrcnd5eXt9gIWJjJCQj46Mi4uLjIyMi4uJhX97dG1lYF5eYWZrcHN1dHV3eHp5enh1cm5mYFpWV1VYXWVvd3+IioyNi4uKiouMjIuKhoF3b2hnam1zeXl4d3Z1dnZ2dnd5e3t6dnJydHRzczc3Njg5ODg4Njk4ODc3Nzc2Njc4Nzg6Ojo6Ozs7Ozw8PDw8PDw8PD08PDw8PDw6Ojk5ODg5OTg4ODg4ODc3Nzc1NTU1MjExMTExMTAtLS0sKyoqKikpKSkpKSgoJycnJygnJycnJycnJiYnJycnKCgoKCkpKSknJycnKCgnKCwyND5HUVtjam9zdnZ1dHRzc29wb3FydXZ2cmplV0k5KSIhISIiJCQkJSQkJSUmJiYmJygpKissLCwsLS8wMTIzNjk9Q0lPVlxhZmlsbm9wc3Fsa2ZiXFpWUlBMSkhHQ0E9Ojk4NDIvLi4uLi0tLS0tLS4uLi4tLS0tMDAwMTIyMzM1NTU1NTU0NDU1NDQzMjIyMTAvLy8vLS4uMDI4Qk1YZW9zcnFxcXFzdHNxbWVaT0U+OzYwLCcnKCgnKSsuNT9MWmZ0fIOCgH1+f4GDhYWGgHluZl1ZWFhXVVJSUFZcYmpydnVyYVhZQDY8MiwrLCwtLS0tLS0tLi4vMDEwMDM7W2ZeWmBbO0hUWFZocHp9fXt5eHh5eXl5enRtY1VKQDk2NTQ1NTQzMjQ2Oz9FSk5QUFJPS0Q+OTY3Nzc5PD5BRktSWmNsc3l/hYeGhoSAf399fHx6eHVxbWdfWVNQTUdGRkVERUREREVGR0dJSk1SWV5kZ2psb3FycnNycnJvbmtrbG1tb3F2fH+BgHt0bGJbUEpGTldibHN5e3t9f4KGio6QkI+OjYyLi4yLi4uMioWCfXZxamZlZWZtcHN0dXV3eHl5eXp3c25oYl1XUlNTWF1nb3mCiYuMi4uLi4uLjYyMiYaBd2xlZmlvdXl5d3Z1dXZ2dnZ1d3p6enZ0cnFxcXA4ODg4OTk5OTc6ODg5OTc3NjY4ODc4Ojo6Ojs7Ozs8PDw8PDw8PDw8PDw8PDo6Ojo4ODg4ODg3Nzc3ODc1Nzc0NTU1NTExMTEwMC4tLSwsLCsqKikpKCgnKCgnJyYmJiYnJicnJycnJyYmJycnJygoKCgoKCcnJycnJygoJygqKzA1PUdOVF1jZmlsbnFydHV3eHp8foGFhX96c2ZWRjUoISEiIiQkJCUkJCUlJiYmJigpKiksLS0tLS8wMDIzNTg7QUZMU1lgZWhqbG1ub3FuaGNcWVRQTkhEQT8+PDs4NzY0MjAwLy8vLi4tLS0tLS0uLi4uMDAwMDAxMTEyMzM0NTU1NTU1NTU2NjQ0NDMyMjAwMC8wLy0vLjAyOEBMVmNvcnJxcm9wcXJxcW1lWk9FPTg0LysoKCkoKCkrLTM6RVZkcHqAgoB9fH1/goaHhoB7cWlgW1hXVVFRT0xPVF5pcnV0dmJRSz84ODIuLCwtLS0tLS0tLS4vLzAwMDEyNU1rX1dkVjg7UFdXZHF6fX17eXh4eXl5e3l0bWNVSkA6Nzc1NTU1NDQ1OUBHTVNYW1xbWVVOQjs4NTY2Nzo+QEZPVl1mbnZ9goaHhoSDgH5+fnx8enh1cWtlXlRMR0NBQkJBQUJBQUFBQkNDREZLUFddYGNqbXFwcHFxcnR0cGxpZWViYmZobnR6f4B9eW9nX1dQT1FZYmx0ent7fX+EiImOkJCPjo2Mi4uMjYyLi4mIg356dXFra2prcHN1dXZ2eHh5enp5dXJsZl5VUlBSUlddaHJ8hImMjIuLi4uLi42MjIqFfndtZWNqcHZ5eXd1dXV2dnZ2dXZ4eHh2c3JwcXBuOTk5OTk5OTk5OTg4ODg3Nzg3Nzc4OTo6Ojo6Ojs8PDw8PDw8PT08Ozw8Ozo6Ojg4Nzc3Njc3Nzc3NzY2NzU0NjU0NTMxMTIwMC8uLSwrKysqKikpJycnJyYmKCgoKCkpJiUlJicnJycmJicnJycnJycnJycnJycnJycmKCcnJycpKzQ7QkhOUlhaXWJkaG51d32AhIaIi4iGgnxyZVVHNSYjISIkJCQkJCQlJSUlJygqKioqLC0uLi8wMTEzNTg7PUJHTlZcYmVpa2xvb29taWFcVE5IRUE/PTw5NjUzNDMyMS8vLy8tLS0tLi4uLi4uLi4uLi8vMDAxMTIzMzM0NTU1NjY3NzU1NjY1NTQ0MzMyMjAwMTEuLi8xMzc+SlRga3Bxcm9vbnBxcHBtZVtQQzs1MS0qJycoKSgpKiwvN0JQX2x3f4KBfn19f4ODhYWBfnVtY15aVVFNSUdHSFBbanF2dGtSQktORj42MCwsLS0sLC0tLS0vMC8vMTAvMjVIW1tbaVs3NlBUVmRyen9+enl5eXl6enh4c21kVUpAOjc1NTY0NDQ2O0BIUFheYmdoZmJfVktCOTY0MzU4QEZLU1pka3J5gISHiIWEgoB/fXx+fXp4dnJqYlpNR0M+Pz4+QD9AQEA/Pz9BQENDR05UW2FmaW1vcXJxcXNzcXBqZV1ZVVZaXWNrc3d6fXtybGRbWFVZXmdvdXp9fX6BhIeKjpGRkI+NjIyMjo2LioeFgXx7e3h4dHBxcXR1dnZ2d3d5e3p5d3RvaWNbVFBPT1BVXGdxfoWLjI2Mi4uLi4yNjYyJhH5za2Zma3F3enl3dHV2dnZ1dXV2d3d3c3Fubm5wbjk5OTk5OTk5OTk4ODg4Nzc4ODc3ODk6Ojo6Ojo7PDw8PDw8PD09PDs6Ojo6OTk3NzY2NjY2NTY2NzY1NTU1NjU1NDMxMTEwLy8uLiwsKioqKikoJycnJyYmJicnJycoKCYlJSYnJycnJiYnJycnJycnJycnJycnJycnKCcnJyYmJSgqMDU5PENESEtPVFxkbnZ8gISHiYqKiYWDfG9jUkEuJCIjJCQkJCQkJSUmJicoKisrKy0tLi4vMDEzNDY3Oz9ESlFYXmRnamxvbm1taGBaUEpDQT06ODY1NDQzMTEyMDAvLy8vLS0tLS4uLi4uLi4uLi4vLzAwMTIzMzQ0NTU2Njc3Nzc3Nzc3NjY1NTMzMzIxMDAwLy8vMTM3PUhTX2pwc3Nwbm1ub3JvbGdcUUU6NC8rKSgnKCkoKSorLzU8Slpnc3yBgX58fHyAgoSEg354cGdfWVRQSEVDQ0dQWmZwdGZNPkRcXE0/NjAsLC0tLCwtLS0tLi8vLzAwLjI9UlleY2RUSVFRT1ZncXp+fnp5eXl5enp5d3NtZlhLQTo3NTU0MzQ0OD1FTlVeZmxxcnBsZV1QRTw2NTM4PEJLUFZgaG91fYGFhoeGg4GAf359fn58enZyamJWTUZBPz0+PT88Pj09Pjw9Pz4/Q0dOVFthZWlvcHBxcHFzcXFvaWNbUUpITVRaY2txdXp5dm9pYV1cXWJnb3Z7e3t/hIaIi4+Rj4+OjYyMjIyLiIeEgXp5enp7e3p4dnh3d3d3d3h5eHt6eXdzbWZfV1BQTkxPVV5pdH6GjY2NjIuLi4uMjY2MiYF6cmlmZmpxd3p4d3V1dnZ2dXV1dnd3dnJwbW5ta2o4ODg4OTk5OTk5ODc4ODc3ODg4ODk6Ojo6Ojo6Ozw8PDw8PDw8PDs6Ojo6Ojk4Nzc2NjY2NTQ1NTU1NjU2NjU1NTIxMTAwMC8uLSsrKiopKikpKSgnJiYlJiUlJSYmJSUmJSUmJycnJyYmJiYnJycnJycnJycnJiYmJigmJSUmJSUlJScqLzExMjM4QElQWWNqc3qAgoSFhYiGhoJ4b11MOCcjIyQkJCQkJCQlKCgoKikpKistLS8uMDAxMzU3OD1BR09VWmFlaGtub2xsamNcVElDPTk2NjU0NDQ0MzEyMjAwMDAwLy0tLS0tLi4uLy8uLi4uLy8xMTEyMzM0NDU1NjY3Nzc3Nzc3NzY2NTU0MzMzMDIxMTAwLy80ODtFUl5pcHJxbm1rbW5ycG1oXVFFOjMuKykoJigpKSorKi4yO0ZWZXF6gIJ+fHp7foGDhIN/enJqXFZQS0I/PT1ETVhmcGhJN0JeaWBRRDgwLS4tLSwsLi4tLS0uLzAuLzEzQV1dYmFVU1lYU1BZZHF7fn17eXh5enp6eXd0bmVXS0E7ODQ0NDQ0NjtBSlRdZm90eXl6c2pgVUc9NzQ3O0JKUFZfZm9zeoCDhoaFg4N/fn59fXx8fXt3cWhfVUpCPz48PDw9PD49Ozs8PT0/QERHTlZbYWdqbG5ub3FxcnJwbGdfV0tDPD9HUVlhaG11dXZxa2dkYmFkanJ5fX58f4KGiI2PkZCPjo2Mi4uLiYeDgH17e317fX19e3t6enp5eXh5enp8e3p1b2lhWlNOTEpMT1Vfa3aAh42NjIuLi4yMjY2OjImBenFoZGVqcnd6eHZ1dXV2dnZ2dXZ3d3dzb29sbGpoOTk5OTk5OTk5OTg3ODg3Nzg4ODg6Ojo6Ojo6Ojs8PDw8PDw8PDw7Ojo6OTk4Nzc3NjY2NjQ0NTU0NDU1MzMzNDUyMTEwMC4tLS0qKysqKCkpKSgoJiYnJyYlJSUmJiUlJiUlJicnJycmJiYmJycnJycnJycnJyYmJiYnJyUlJiUlJSQkJigpKSopKjA8Q0tUXWZscnZ5enyCg4aFfnRkUz8qISEkJCQkJCQlJigoKCkqKywsLS4uLzAwMTM2ODk+REpSWF1iZ2ptbm1tamRdVUxCOTg3NDQzMzMzMzMxMTEwMDAwMC8tLS0tLS4uLi8vLi4uLi8wMTEyMzMzNTU1NTc3ODg3Nzc3Nzc3NjU1NTQzMjIxMTAxMTAwNDg7Q05aaW9xcW5sbG9tcHFvZ15TRzsyLSopKCgpKSkrKyosMzlCUF9sdn1/f3x6ent+gYKCf3t2altTTEU/Ojk6QUtXYnBrTjlMam9jUkU5MC0uLi4tLS4uLi4tLi8wMDEyM0ZiaWJTTWpiUlVTV2Zye359e3l4eHl5eXp3dG5lV0tBOjc0NDMzNDY8Qk1WYmx1e3+AfXVsYlVJPDc3O0JIT1ZdZmxzeX+ChYaGg4GBf319fnx9fn17d3FoX1RKQz89PDs7Ozw8Ozs7PDw8PD1CR05WW2Bma2ttcHFwcXJvbWplXFJKPzc2PUVQWGBmbHN3cm1paWZnaW10en1+f4GEh4mNj5GQj46NjIuLioiEgHt5d3N1d3x9f39/fnt7enp4eXp6fHt5dG1nXVZOSElISU9VYG13goqNjY2Mi4uMjI2NjIuHf3htZWJobHJ3eHl3dnZ2dnZ2dnV2d3d2c29taGhnZTo6Ojo6Ojo5OTk4Nzc3Nzc4ODg4Ojk5OTk5Ozs6Ojo6Ozs8PDw8Ojs6Ozk5ODg3NzY1NTU1NDU1NTQ0NDQzMzQzMjAxLy0tLSssKikoKCcnJiYnJicmJSQlJSUlJSUlJSYmJSUmJicnJiYmJiYmJicmJicnJycnJyYmJScmJiYmJCQlJSUlJSYlJicrMDU/Rk5UWmFlaWxweH6FhoR5aVhELSIkIyMjIyQlJicoKSkqKystLC0uLi8wMTI0Njk+QUlSVlxiZmhrbm5ubWdgWFBGOzc0NDQ0NDMzMzMyMTIxMDAwMDAvLi4uLi0uLS0vLy4uMDAxMTExMzM0NTU1NTc5OTk5OTk5OTg4Nzc2NjU1NDQyMjExMTExMTQ4O0BMV2RtcHBvbmttbm5xb2xkXE5BNS0pKSopKikpKiorLDE4PUtaaHR7fn59enl5fH6BgIB9d2pfUkhBPDU1Nz9JVGBqcUo/YXVxZ1ZHPDQvLiwsLi4uLi0tLi8wMDAwMztaentlSE5cXEhJUllkcXp/f3x5eHZ4eHl5eHVvZVhKQDg0MzMyMTM3PEVQWmRweX+Eg351bWFVST88PkFIUFdfZW1yeH2DhYeHhoJ/fn59fX5+fn5/fHdxal9TSUA7PDs6OTk5PDw7Ozs7PDk9QUdPVl1jaWxub29vb25vbm1nYltPRzozMDQ7RU5WYGZucXNvamprbG9ydXt9fn+ChYiKjo+Qj4+OjIqLioqIg3x2cm5pbHR4fX6Af39/fHt7e3t7e317eHFrZFxUTEhGRklNV2RwfIWLjo6Li4uLjIyNjYyIhH51a2NhZ2xyd3l5d3V1dXV1dnR2d3Z2dXFua2poZWI6Ojo6Ozs6OTk5ODc3Nzc3ODg4ODk6OTk6Ojs7Ozs6Ojs7Ozs7Ozo5Ojg3NzY2NzY1NTU0NDQ1NDQ0NDQ0MzIyMjEvMC8uLCwsKigoKCgnJycmJyYnJiQkJSUlJSUlJSUkJCUlJiYmJiYmJiYmJiYnJiYnJycnJycmJiUnJiYmJiQkJSUlJSUkJSQmJiYqMDlARUpNTlNaYm55goaEeW1cRC0kIyMjIyMkJSYnKCkpKioqLC0tLS8wLzEzNjk8QkdMVFleZWdqbG5ubWdjXFVKQjs3NDQ0NDQzMzMzMjEyMTAwMDAwLy4uLi4tLS0tLi4uLjAwMTExMjMzNDU1NTY3OTk5OTo6Ojo5ODg3NzY2NTQ0MjIyMjExMTM0ODtAS1ZhbHBwb25sbm5ucHBtZ19SQzYuKioqKSoqKioqKSovNjtJWGVyeX5/fXp4eHp9f4F/fHdsX1JGPTYxNDg9RlJea2Q9Qmd2b2ZYSj01LiwrKywuLi4tLS4vLy4uLzBDbnt2Xk9OWVQ+TlljZXJ7fn17eXh2eHl6eXh1b2RXSkA4NDMxMTI0OEBIUFxnc3yChIN+dWxgVEhBQUZJT1dbY2pweH2DhomJh4SCf35+fXt8fn5+fnt3cWheUEhAOzo5OTk5OTo6OTk5OTk6PUFIUFleZGlsbm9vb25ub21qZGFXT0I2MS4vMztGUVtjam5xcm9vbnBydHd7fn5/gIOHjI6PkI+OjYqKi4qJhoF6cmtlYmVtcnh8foCAf3x8e3t7e3t9e3ZuaWFYT0lDREVHTVhmcn2HjI6Oi4uKjIyMjY2MiYN8cWpiYmdsdHl5eXd1dXV1dXV1d3d2dHNwbWtpZmViOzs7Ozs7Ozs6Ojk4ODc4ODg4ODg6ODk5OTo6Ojo5Ojo6OTk5Ozo4ODg4Nzc3NjU0NTQ0NDU0NDQyMzQ0NDEyMjAvLzAuLSsrKiopKCgoKCgnJicmJSYmJSYmJSUlJSUlJCQkJSYmJycnJyYmJSUmJyUlJiYmJiYmJiYmJiYmJiYlJSUlJCQlJSQkJCQkJCcsMTU4Oz1DS1dpdoCFhHpuW0MsIyMkJCQkJCUmJygpKSosLCwtLS0vMC8xMzY6PkRLUVhcYWZqampubWlkYFhPRj45NjU0NTQ0NDQ0NDMzMzMyMTAwMC8vLy4tLS0tLS4uLjAwMDExMzM0NDU1Njc3ODk5ODg5OTk5OTg4Nzc2NjU0NDMzMjIzMjIxMzY9QklUX2lxcnBua21vb3BycGtjV0k8MCsrKykpKisrLCstLzY7R1Zibnd9f357eHh6fX6AgH55b2JTRDgyMDM2PEVRXWphREZvd3JoXUxANS8tLS0sLC0tLi4uLi0uMDI8X2tsclhHTk5aU1FSZ2p0fH5+e3l4d3d5enh3dW9nWUpAODQyMTEyNDk9R1Jfand/g4SDfnVrYFRMR0VJUFZaYGdudnyBh4qKiIaBgX9+fnx8fHx/f357d3FpXlBGPzk4Njg1Nzc3Nzc4Nzc2ODxCR1FaX2dpbW5tbW5tbW5qZ2NbUkg9Ni4rLTA1PUZTXGVsb3FxcXF0dXh6fH59gIOFiYqOj46OjYyLiouKiIN+d2xhXFleZmtzeX6Af359fHx8fXx8fHlzbGZcU0pFQkFCRk9baHR/iY6Oi4uLi4uMjI2MioaAe3BmYWNma3N6eXh3dXR0dnZ2dnZ2dXNwbmpoZ2VhXjs7Ozs6Ojs7Ojo5ODc4ODg4ODg4OTk5OTk6Ojs5Ojs7OTk5OTo4Nzc3NTY2NjY0MzQ0NjU0NDQzMjM0NDQxMTEvLi0uLSwrKyoqKSgoJygoJyYmJiUmJiUmJiUlJSUlJSQkJCUmJicnJycmJiUlJicmJiYmJiYmJiYmJiYmJiYmJSUlJSQkJCQjIyMjIiIiJCYnLC4vNkJRZHN/hIN5bFg+KSMjJCQkJCQlJicoKSkqLCwsLS0uMDAxMzY5P0RKTlVbX2ZmZ2tubmxoY1pTSkM8NjY1NTU0NDQ0NDQzMzMzMjEwMDAwLy8uLS0tLS0uLi4wMDAxMTMzMzU1NTU2Nzg5OTk5OTk5OTk4NzY3NjY1NTQzMzIyMjMxMjQ3PEFJUl1mbnJwbmxub29wcnJsZltNPzQsLCkrKSorKysqLDA1PEZVYWx2fX9+e3h4eXx9f39+e3JlU0I3MjAzNjpET1tnW0VSdXRval9OQTYvLSsrKywtLS4uLi4uLjAzS2pqdWxMR0ZITUxOUm9uc3t9fnt5eHd3d3l4d3RuZ1lKQDg0MjEyMjM5PkhVYm15gISFgn51a2BUTEhNU1hZXGRtdHuBhYmJioeEgIB+fn58fH17f39+e3ZwZ1xQRD07NzY2Njc3Nzc3Njc3Njc+Q0pTWV9mam1vbW5tbW5ta2ZfWVBFOjIuKystMThBTFZham10dHR1eHl7fX6BgYCChIiMjY2NjYyMi4qLioeBe3NnW1NQWGBrcXZ6fn9+fX19fX18fHp3cmtjWlFHQj8/Q0hRXWp3gomNjYuMi4uLjIyNjIqGgHhuZl9iZ2x0eHl4dnR0dHV1dXV1dXVzcG5qaGZkYV07Ozs6Ojo7Ozo5OTg3Nzg4ODg5OTk4OTk5Ozs7Ojo6Ojk5OTg4ODc3NjU1NTU0NTU1NTQ0MzMzMzIzNTU0MTAwLi4uLiwrKysqKiknJycnJyYmJiUmJSUkJCUlJSQkJCQkJSYlJSYnKScmJiYnJycnJycnJyYmJycnJyYmJSUlJSMlJCQkJCMjIyMiIiMiJCQjJSYnLDQ+TmBxfYSCeWtXPCcjIyQkJCQlJicoKSoqKysrLCwuMTIyNDk9QkZLUVRbYWRnaGltbmxpZmBXTkc/ODc2NjU0NDQ0NDQ0MjIyMjExMDAwMC8vLy4tLS0tLS0uMDAwMTEyMzQ1NTU1Nzc3OTk5OTo6OTk5OTg4ODg2NjU1NDQzMzMzMjQ1OD1CSVFaY2twcW9tbW9vcXJ2cWpiUUM2LikpKyorKiosKy4zOj9HU2Bqc3yAf315eXh7fH6AgHtzZ1dGOjMxNDk6Qk5ZZVRLXnp0cWtgUEM3MCwsLCssLCwtLS0tLjAvM1JxendfRkVMPj5MVVVlaXF8f357eXh3d3h4eXh1b2ZZSkA5NDEyMTE0O0FJV2NveoSHh4R/eG1gVVFRU1ZYW2FncHd9hYiJiYiFg39+fn59e3t9fn9+fXx1cGZbT0I8ODY0NDU2NzY2NTU0NDU3O0JLU1pgZ2psbG1tbGttbGljXVZNQTgvLCoqLDA2P0pUXmltc3Z3d3p7fn6AgICBgoWIi42NjYyMjIuLioqHgHpwZVhLSlBcZGtyd3t9fn5+fX19e3t4dW9nXlhNRD89PUBHU19se4SLjY6Li4uKjIyMjYuJhX91bGRgY2hudHh4d3Rzc3Nzc3N1dXR0cXBuamZlY2BbOzs6Ozo6Ozs6OTg3Nzc4ODg4ODg4OTk5ODk7Ozo6OTk6Ojg5ODg2NjQ0NTU1NDQ0NDQzMzMzMjIyMjIyMjEvLy0tLCwrKioqKikoJycnJycmJSYlJiUkJCQlJSUkJCQkJCUlJygrKy0tKygnKCcnJycnJyclJSYmJiYkJCQlJSUlJCQkJCQjIyMjIiIjIiMjIyQlJisxPk1fcH2EgnlrVz4nIyMlJSQkJSYnKCkqKissLC0uLzAyNTk/REhNUVZbXWRlaWprampqaWNbU0pBOTc1NjY1NDQ0NDQ0NDIyMjIyMjEvMDAwLi0tLS0tLS0tLjAwMDExMjM0NTY2NTc3Nzg5OTk6Ojk5OTk5OTc3NjY1NTQ0MzMzMzM0Njo+Q0lRW2RrcHFvbm5vcXN0dnRuZlpKPDAqKioqKyorLC8yNjxCS1Rga3R8gIF+enh4e3x+gIB8dmxbSz01MDI1OkJNV2RQU2d2dXJtY1NEOzItLCwrLCwsLS0sLS0uMDhsenV1Yk5FRD5FUVFUZmZxfH99e3l4d3d4eHl4dG5lWEpAOTQwMS8xNTtDTVlmcn6Gh4eGgnxwZFlWVlhaXF1kaXJ4foWIiYmHg4F/fn5+fHx8fX5/fnx5dG9mW09DOjY0NDQ0NDU1NTQ0NDQ1NzxETVVcYmhrbGxtbWxraWlmYVtUSUAzMCspKSswNDpFUFxmbXJ2eXt8f4CBgoKCg4OFiYuOjo2MiomKioqIhn94bWNVSkpOV2FocHd6fX5+fX5+fnx7eXRsZV5SSEE8Oj5CS1djb3yGi4yNjIuMi4yNjYyKiIN8dWpiYGNobnR4d3V0dHNycnJzdHRzcXJvbWpmY2BdWzs6Ojs7Ozs7OTo4Nzc3ODg4Nzc3ODg4ODk6Ojo6Ojk4OTk4Nzc3NjY1NTQzMzMzMzQ0MzMzMzIyMTEwMC8vLi0sKyoqKysrKigoJycnJyYmJiUlJiUlJSQkJCQkIyQkJCQlJicsMDM0NDItKykoKSkpJiYmJSUkJCQkJCQjJSQkJiQjIyMjJCMkIyMiIiMiIiEgJCcpLzpKXG15gYV6a1hBKSIkIyQlJSYnKCkpKSorKiwuLTAyNTlBRUpOU1ZdX2NkZmhra2tramZfVk1EPjg2NTY1NTQ0NDMzMzMyMjIyMTEwLi4vMC4tLS0tLS0uLi4wMDAxMTEyMzQ2NjY3ODg5OTg5Ojo6Ojk5OTk3NzY2NjU1NTMzMzM1Njc6P0RJUVpjam9xcG9ucXJzdHZ1cWthUUI0KiorKywrLjAzNjtBRU1WYWx1fYGCgH56e3t8f4GAfnlvYU9BNzExNDhBTFdkTExqdnZxbGVWRjsyLSsrKissLC0tLC0sMDBJenJVS15dVFBXTE1RUGlpcn5/fXt6eXd5eXl5eHRuZlhKPzg0MTEvMjc/RlBbaHZ/hYeLiYZ/cmddWFhZXF1gZWxyeoCEiImJhoOAf359fnx+fn1+f4B8eXVvZVlNQTk1MjIyMzIyMzM0NDMzNDg9RU5WXWVqa21tbW5sbGtpZV5aUEU6MispKSosLzM4RU9bY2pyd3l9foCBgoOEhISEhomMjY2MjIqJiYmJhoV+dWpgVktHTVReaXJ4e31/f359f317endxbGRbT0Q9Ojo7QkxXZ3N/h4uMjIuLi4uLi4uKioiBfXNnYV5iZ290dnd1cm5xcXJyc3Nzc3JxbmxqZmFeW1k7Ojo7Ozs7Ozo5ODc3Nzg4Nzg3Nzg4ODg5Ojo6Ojk3Nzg4Nzc3NzY1NDQzMzMzMzMyMjIyMTExMTExMDAvLy4tLCsqKioqKikoKCcnJycmJiYlJSYlJCUkJCQkJCMkJCQlJCYnKzA1Oj05NzIyMTAwLiwoJiQkIyMkJCQkIyUkJCUjIyMjIyQjIyMiIyIjIiIiISIlKC85R1ZqeYGEfG5dSjEkJSMkJSUmJygpKSkqKywtLjAzNjpARktPU1hcX2FjZmpra2tqamljXFNKQjs2NDY1NTU0NDQzMzMzMzMzMzExMC8uLy8tLS0tLS0tLi4uMDAwMTExMjM0NTY3Nzg4OTk4OTo6Ojo6OTg4ODc3NjY1NTUzMzU1NjY4PEBFSVFYYWlwcnJwb3Fyc3R2dnRuZVdGOC4tLiwrLjE1NztAREpRWGBqc32Dg4F/fHt7en2CgoB7cmVVRDgyMTQ4QUlUY0tGaXZ2cmxmV0g9Mi0sLCorLCwtLS0tLTFEdHdtWjhPT01TV1FSUk9janN9gH17enl4d3l5eXh1bmVWST44NDMxMjU7QUlTXmx4gomKi4qGf3RoYFtbXF1dYmZscnZ8gYWGhoSCf39+fX18fHx9fn99enh0bmRaTkE5NTIxMTEyMjExMTExMTQ5PkdQWWBnam1tbW1tbGxraGNdV01CNy8qKSkpKy8zOkZPW2NpcHZ7foCDhoWGg4SEhoeKjI2NjIyKiYmJiYaFfXZsYFNLSk1UXmhwdnt9f39+fX18e3p2cGpiVktDPTo6O0JOWml1gYmLjIuMi4uLi4uLi4mGgHhwZWBeYmhudHZ2dHJwcXFxcXJycnJxcG1qZ2NhXlpYOzk7Ojo7Ozs6Ojg5ODc4Nzg4ODc3ODk5OTk5ODg4ODg3NzY2NjY1NTIyMjIxMTExMjIyMjEwMDAwLzAwLy8uLiwrKiopKSkpKSknJiUlJyclJSYmJSUlJCQkIyMlJSQkIyMkJisuMzc7Ozo2Nzc3NzY1LyolJCQkJCQkJCMjIyMiIyMjIyMiIiIiIiIiIiEhISEjJCktNkJSY3N+gn5zY1A4JyYkJCcnJygoKCoqKyssLi8yNT1DSE1RVFldX2JkaGtram1raGllXlZMRD85NzY2NTU2NjU1MzMzMzMzMjIxMS8vLy4uLS0tLS0tLS4uLzEwMDExMTIzNDU1Njc4ODk5ODk5OTk5OTg3ODk5NzY0NDM0MzQ1Njc2Oj5ARktQWGBpcXN0cnBwcXN1dnh2cGdcSzsyLS0tLTE2OT1CRUpNVFthanN8hIWFgH57en1+f4GCgHhrW0o7MzM0Nz5JU2FKSmp2dHJvZlhJPDQtLCwqKywsLS0tLS0uS3h6cUo3VU5MSU1TTVJXY2hye4B+e3p5eHh5eXl3dG1lWUs9NzUyNTQ4PUVMWGNwfIaMjY2Khn10aWJeXF1dX2FlanB2eX+DhYSEg399fX19fX5/fX5/fXl4dW1jWUs/NzMyMTAwMDAwMDAwMC82OkBHUVlhaG1sbW1tbWxraWVgWlVLPzUtKysrKiouND9JU1xjanF1e3+BhIaGhIOEhIaHioyNi4uKiYmIiYmIhX52bF9SSktRVmFqcXl8fn5+f3x8fHt4c25lXFFHPzo4OT1ET19seYOKi4uLi4uLjIyMi4qJhH12bGNeXmJnbnV1dHNycXBwcHBxcXFxb21rZ2ZjYFxXVjs5Ozo5Ojs7OTk5OTg3Nzc4ODg3Nzg4ODk5OTg4ODY2Nzc2NjU1NDMyMjIyMTExMTIxMTExMDAvMC8vLy4uLS0rLCoqKSkpKSgnJSUlJSYmJSUmJiUlJSQkJCMjIyMjIyMjJCUoKi4xNjY0NTY2OTk4NzItJyQkJCQkJCQjIyMjIiMjIyMjIiIiIiIiIiIhISAgISMmKzI8TV1ve4KBdmZVPSomJScrLSwoKSkqKisrLS8yNjxCSU1TVVteX2JlZmhqamppaWdjX1hPRkA5NjU2NjU1NjY1NTMzMzMzMzIyMTEvLy8uLi0tLS0tLS0uLi8xMDAxMTEyMzQ1NTY3ODg3Nzg5OTk5OTk4Nzg5OTc2NjUzNTU0NTY4OjxAQ0dLUFVgaG9zdHRxcHBzdXZ4d3NsYVBANi8uLjE4PD9CRUpQUlddY2tze4OFhIF/f4B2e3+Cf4F4b2BPPjUzNDc+R1JeSUhsdnRzb2ZYSj00LSwsKissLC0tLS0tLTtgcGpROFtXTkxQWVVNVGNgZnZ9fn16eXh4eXl5d3RvZlhLQDk2Njg5PkVMU11odH6HjI6NioR8cmhjYF9eXV1eYGRqb3Z9g4SCgYF+f319fX5/fn59f315dnJtY1lLPzczMTAwMC4uLi4uLi8wNDpCS1NaY2ptbGxsbW1sa2ljXVdQRTwzLSspLCstMDlCTFVdY2pydnt/g4WGhoSDhISGh4qMjYqKiYiIhoiHh4R9dmxfUk5OU1pia3N5fH5+fX59fHx7d3JrZlxRRzw4ODg9RlNjb3uFiouLi4uLi4yMjIuKiYV8c2ljXl5iaW92dnRzcG9wcXFxcXFxcW9tamdkYl5aV1c6Ojw8Ojo6Ojs5Ojo5ODg3ODg4ODg4ODg5OTc3NzY1NTU1NDQ1NTQzMjIyMjExMjIyMjAwLy8vLy8vLi8uLS0sKysqKSgnJycnJyUlJSUlIyMlJSUkJCQkJSUjIiMjIyMjIyQkJScoKisrLS8vLzI2NjYxLiglIyMiIiIiIyMjIyQkIyIiIiIiIiIiISEhIiIiIiIjJSkwOkpaa3iAgXdpW0YvJiUqLzIzLCkpKSorLC0yODtBR0tRVVpeYGNkZmhpaWlpZ2ZkYVlQSEE8NzY0NTU1NTU1NTU0NDMzMzIyMjAwLy8uLS4tLS0tLS0tLi4wMDExMTEyMzI1NjY2Nzg4ODg4ODk5ODg5ODg4ODg3Nzc1NDQ1NTY3Ojw9QUVKTVFYX2dvdXV1c3JydHZ0dndzbmRVRzoxMDI3PEBFSE1QVFhbX2RpcXuCiYaDfnNeanyAeXqAfHNlVEQ4MzM2PEZQX0pHa3ZzcW5mWEs+NS4sLCkqLCwsLCwsLSsyTGVuYVBufGlRT15eTkxhXlZrgn98enl5eXl5eHh2b2ZZSj87Oz1BQ0hMVFpibXiBhouMjImDem5nYWBfXVpYWVxiaXB3fYGEgn9+fH19fH1+f35+fn17enRxa2NXST02MzAvLi4uLS0tLCwtLzU8Q0xVXWRqbWtsa2xsbWpoZV1XT0Q5MSwqKiwrLzVASFJYXmNrcnd9gIGFhoaFg4OEhoeKjIyKioiIh4eIh4eDfHZsYFNRUlVbZWx0eX1+fXx9fHx8e3dwaWJYTUE5Njg4PkZYZHF+h4qKiouLjIyMjIyMi4iCe3FmYFxeY2pydnd0c3FwcXJycnNzcW9samxnZV5cWllZOjo8PDo6Ozs7OTk5ODg4Nzg4ODg4ODg4ODg3Nzc2NTU0NDMzNDQzMzIxMTExMTIyMjIvLy8vLy4vLy8uLi0tLCsrKSooJycnJycnJycnJSMjJSUkJCQkJCUlIyIjIyMjIyMkJCQkJCYmJicpKiorLy8vKykmJSMjIiIiIiMjIyMkJCMiIiIiIiIiISAhISIiIiIiIyUpLzhFV2Z0f4F6bmFQNikpLjU5OzMqKSkqKy4xNjtARkxRVlpcYWRjZmloaGlpaGdjX1lSS0I8NzY1NTU1NTU1NTU1NDQzMzMyMjIwMC8vLi4uLS0tLi4tLS4uMDAxMTExMjMyNTY2NjY4ODg4OTk3Nzg5OTg4ODc3Nzc2NTY1NTY2ODo9QURISUxRV19lbXR3dXNzc3J0dHZ2dHBoWUo+ODU5PEFESU5SVllcX2RobHV8goiGgndua3l+fHB7gn11alhJOjMzNz1FT15LSGFyc3JuZlpLPjUuLCwrLCwsLCwsLCwsLTRGU2trdXRlYmBhWk5CU2ZreoF9e3p5eXl5eXh4c21mXFBEQ0FDR0pOUlphanJ8hImLjImIf3VpY19cWlVSU1RYYGZud3+Dg4F/fnx9e3t9fn5+fn58eXZ1cWtiVkk9NjMvLi0tLSwsLCsrKy80PENNV19nam1ubGtsbGxpZWJdV09EOTEsKysrLzU/R01VXGRpb3R4fX6BhIaGhYODhIaHioyMjImJiIeHiIiIg3x2bGFVUVNaYGdvdnt+fn18e319fHt1cGlhVEk9NzY2OT9KXGp1gYmKioqLi4yMjIyMjIuGgXluZFtbXmNpcXZ3c3JxcXJycnJzc3Jva2poZmJdXF1eXjo6Ojo7Ozs7Ojk5ODc3ODc4ODc3ODg3Nzg3Nzc2NjQzMzMzMzIyMjIxMTExMTEwMDExMDAwLy8vLiwuLiwsLCwqKSkpKScmJicnJiYlJSQkJSUkJCQkJCQkJCMjIyMjIyMjIyQkJCUlJiYlJSYmJyUoKicnJSQiIiIiIiIiIiIiIiIjIyEhIiIiIiAgICAgICEhISIkJys0PlFib3mAfHNnV0ItKTE7P0E3LCoqLC0xNjk9Q0pRVlheYmZlZ2dqaGlpaGZhXVZPTEQ8OTc3NTQ1NDU1NjY0NDQ0NDMyMjExMDAvLy4uLi0tLS0tLS0uLi8wMTExMTIzMzQ1NjY2Nzc2Njg4OTk4OTg4Nzc2NjY2NTY2NjY3Njo9QENFSUpNUVdcZW1zdnd1c3Bzc3NzdXVxal9QQzw8PkFFSk5SWFteYWVna3B2eoCGhXh3dWpmcWZbaHN6eW9eTT00MjQ5Q1BbUE9fcXNya2VaSz42LywqKysrKysrLCwtLSsrKzhZcmxnZHBkV1ZUU11odXt/fXt7enl6eXh4eHZvaV9VTUpKTE1QVFlhaG92foaKi4qHgnpyZV1aVlJNSk1PU11mcnyAg4F/f358fHx9fn5+fn1+e3h4dXBpYlRJPjUyLi0tLS0sKysrKyowNT5HT1lhaGtubG1ra2tsamdjWlVMQjgvKysrMDQ9R05WXWJpbnN3eXx/goSHh4WCg4SGiouMi4uKiYeGh4iIh4N8dWxhVlJVXGJpcXh8fn5+fn1+fn14dW1lXlJFOjY2NDhBTVxseYKKi4uLioqLjIyMjYuIg352bGBZWV5lbHN2d3VzcXJxcXJycnJyb2xoZ2NgXFxeYGI7Ozo6Ozs7Ozo5ODc3Nzg3ODg3Nzc3Nzc4Nzc3NTQzMzExMTExMTExMDAwMDAwMTEwMC4tLy8vLy0tLissLCwsKSgpJycnJiYmJiYmJSUkJCQkJCQkJCQkJCQjIyMjIyMjIyMjJCQlJSUlJCQlJSQjIyUmJSQjIiIiIiIiIiIiIiIiIiIhISAgISEgICAgICAgICEiIyQpLzlLXWx3f350a1xKMyksNDw/NCkpKiwvMzg8Q0dOU1hcYWRmZ2hoaGppZ2RhW1ZPSEQ+OTU1NjU1NTQ1NTQ0NDQ0NDQzMjIxMTAwLy8uLS4tLS0tLS0tLi4vMDExMTEyMzM0NDU2Njc3NjY3Nzg4Nzc4ODc3NjY2NjY1NTY4ODo9QEJFRUlMTVFWWmRsc3d3dnRycnJydHNzcWxiV05FQkRKTVFVW19kZmlrcHN2en2Ag4J2dXR8ZFBEP0BEXl5Yb2hKODA0OT9LWk5NXmxycm1lWks+Ni8sKisrKysrKywsLCwsLCs1TV1jaGtjREhNTFNgaXJ7f317eXl3eHl5eXh1cWtjXFhSUVBUVltgZm51fIKIi4uKhoF4bWNZU0xIREJFTVVeaXZ9goOBf39+fHx9fX9/fn59fHt4d3RwaWJUST41Mi0tLS0sLCsrKyssMTlASFBbYmhsbWtsbGtra2llYVhTSkA1LyorLTM7RVBVXWNpb3J3enx8f4KEhoaFgoOEhoqLjIuLiYiHhoeIiIeDfHVpXldVWF9mbXR5fX5+fH19fXx8eHVrZlxQQjg0NDU5RFBfb3uFiouLi4uLi4uMjIyKiIN9dWheWVleZWxzd3d1c3JycXFzc3Nzcm9saGViXl5eX2JkPDs7Ozo6Ojo5ODk4ODY3Nzg4Nzc2Njc3NjU2NjQyMTExMTExMDAwMC8xMTEwMC8vLy8wMC8uLS0sLC0sLCssLCkpKCcmJiUlJiYlJSUlJSQiIyMjIyMjIyMjJCQiIiIiIyMjIyMjJCQkJCQkJCQkIiIiJCQkIyIiIiIiIiIiIiIiIiIiISEgICAgICAgICAfHyAhIiMjJy01Q1Zoc31/e3JhUj4uKy83NS8qKywuMDU7PkRKUFdcYGNmaWlqamppZWNfWlRPR0I8NzY1NDU2NTQ0NTU0NDQ1NDQzMjIyMTEwLy4uLS0tLC0tLCwtLS4uLjAxMTExMjMzMzU1NTU2Njc3Nzc4ODg5ODg2NjY2NjY2NTY3OTw9QENFRklMS01PVFljbHR2d3Z0cnJycnJyc3FvaF5UTEhKT1NZXmJoa25zdHZ5en2AgYOAbVlacWhVW2JpXlB4VmZgX1Q8Oj9ZbmJLR05fcHJsZVpLPjUuLSssLCwsLCwsLCwrKywyO1BWV2JmUU9dSUVMVmVxen5+fHh3eHl6e3t7eXZwaGNeW1lXWl5jZ21yeX+HiYuLiYN/dmtfUUxEPTg7QE1ZZXF7f4SEgX9/fn59f4B/f359fHt6eHV1cGliVEk9MzAtLSwsKysqKisrLTM6QkpUXGRoa2psampramlnY19YT0Y8My0pLTI7Rk9WXWRqcHJ2ent9foKEhoaEhIKDhIaJi4uLi4mIh4eHiImHg312bWJXU1phaXB4e31+fn59fX18fXd1aWNXSj82MjIyOURUYnB9hoqLi4mLjIuLi4uKh4aBenFoXVdYX2ZtdHZ0dXRxcnNyc3N0c3Fua2ZjYV9gX2FkZjw7Ozs6Ojo6OTg4ODc3NzY4ODc3NjY2NjU1NDQzMTExMTExMTAwMDAwMDAwLy8wLy8vMC8uLS0tLCwsKysqKSkpKSgnJyUlJSYmJSUlJSUkIiMjIyMjIyIjIyQkIiIiIiMjIyMjIyQkJCQkJCQkIiQjIiQkIyMjIiIiIiIiIiIiIiIiIiEhICAgICAgICAgHx8hISIjIyUpNEBOYG16f311ZllJNSwrLSwrKistMDQ3PkNHTlVaXmJkZ2lpampqZmFcVlFKREA7NzY2NTY2MzM0NDU1NDQ0NTQ0MjIyMjExMC8uLi0tLSwtLSwsLS0uLi8wMTExMTIzMzM1NTQ1Njc2Njc3ODg3ODg3NjY2NjY2Njc4OT09P0JFSElLTE1PUFNbYmtwdXp5dXNxcXFxc3V0c25lW1RQUVVaX2VqcXV4f39/gIGDh4aEf3ZYQFBaUlBAWGBeZGxOSkFAR0tomJNySUNMY3Nxa2ZbSz41Li0rLCwsLCwsLCwtL0hufYSGhHRjZmpWW0pOXFhlcXp8fXt4d3p6eXt7e3p4dm9nYV9dW19jaG1zeH2Eh4qLioeDfHVpWkxANzMzOUNQXGh2fYOGhIF/f35+f4CAf39+fXp5eHh3c3BpYlRJPTMwLS0sLCsrKiorKy0zOUNLVFxkamtrampqaWhoZWFbVk1CODEsKzA3QktTXWZqb3R5fX59fX6BhIaHhYSCg4WGiYuLi4uIhoaGh4iJh4N9dmpfWFddZW1xeXt9f39/fn5+fH14cmheVUg7MzEyMjtGWGdzgImKi4yLi4yLi4uJiIaDfHRrY1tXWF9mbXR2dXJxcXFycnFycnFwbWplY2FgYWFkZWY7Ozs6Ojo5OTk4Nzc3NzY2NTU2NjU1NTY0MjIyMjEwMDExMDAvLy8vLi4tLS0tLS8vLi4uLS0rKysrKykpKSopKCgnJiYmJiUlJSQkJCQkJCQkJCQkIyMjIyMjIyMjIyMkJCIiIyMjIyQkIiIjIyIiIyMjIyMjIyMiIiIiIiIiIiEhISEgICAgHyAgIB8fHyAhISIiIiIkKC44R1dnc3p8eG5hUj4tKigoKiosLTA1OD5FTFJZXGBjZGhpamloZF9ZVE5IQj45NzYzMzU0NDQ0NTU1NTMzNDQzMzIyMTEwMDAvLi4uLiwsLS0uLS0tLi4vMDAxMjAyMzQ0NTU1NTU1NTU2NjY2ODg3NjY2NDQ3Njc5Ojw+QUJGSEpKTE5MTlFRWWJocHR6e3Z0cXFwcHJ0dnZxa2RdWFdbXWRqcXd8g4eHh4eIiIiKi4x+alZRWlZaXGNmaWJcRURMUURATGh3bVlHWndzb2xlW0s9Ni8tLSwsLCwsLCsrLS9bfoB2eH14aWl3a1JJVl9YZHF8fn58eXh3d3l7e3x7endvamViYGJkaW1yeX2BhoiJi4mFgntxZVZGOzQwND1IVWFteIGFhYSBf39/f3+AgH9/fXx7eHh3d3Zya2JWSj0zLiwsLS0tLCwrKiovMzpETlhhZWlpaWlpaWppZWJcV1FIPjUuLS81PkhUXGRrb3Z7fn99fH1+gYSEhoaEgoSChYiLjIuKiIeHh4eIiYiFfnVqXlpcYGhvc3l7fX5+f39/f358eHBoXFNFODAtLDA8Slxpd4SIiouLioqLi4qKioqGgHl1bWJYVFdhaG9zdnVycHJyc3JxdHNyb2xpZWNjY2RkZWZoPDw7Ojo6OTk4ODc3Nzc2NjU1NjY1NTU0MjIyMjEwMC8vLzEwLy8vLy4uLS0tLS8uLy4tLS0tKysrKyorKSkpKSgoJyYmJiYlJSUkJCQkJCQkJCQkIyMjIyMjIyMjIyMjJCQiIiMjIyMkJCIiIyMiIiMjIiIiIiIiISEhISEhISEhISEhICAgIB8gICAfHx8gISEhIiIiIyYqMz9QX212fHpzaltNNiwrKissLzA0NjtBSE1UWV1hZGdqbWtqZF5aUkpFQT45NTU0NDU0NDQ0NDU1NTUzMzQ0MzMyMjExMDAwLy4uLS0sLS0tLi4tLS4wLzAwMTIwMjMzMzU1NTU1NTU1NjY2Njc3NzU2NTY2Nzk7PT5AQUJFR0lLTE1NTU9QU1ZeZ251enp4dXNxc3NzdXd3dHBqZF9eYGRpb3V+g4mNjY2NjY2PkI+RjHBWSUlXX21ya2xuWUdRQ0ZHSUlLVGJeT1t0bm1pY1tMPjYvLCwsLCwsLCwrKyssLj5ZaHBrZmRfbmtQT15eVGRweX5+fHl4eHh6ent8e3l2b2plY2NmaW1xdnp9gYWHiImJhYJ7cWVURDgyMThCTVtmcn2EhISCgX9/f39/gIB/f318e3h4d3d2cWxiVkk8My4sLC0tLSwsKyoqLjU8R05YYWZpaWlpaWlpaGVgXFhPRTkyLzA0PERPWWJpbnN5foB+fXx9foGEhIaGhIKDhIWIioyLioiHh4eHiImIhH51a2FcX2NpcHZ6e31+f39/f39/fHVwaFxPQDUuKyszPk9fbHmEiYqLioqKi4uKioqIhYB5cmteVlNYYWlwdXZzcnFycnJyc3Nzc29saWVkZGVmZmdoZzo6Ozs7Ozk5ODc3NzY2NjU2NjU1NDQ0MjAwMTExMTEwLzAuLy4uLy8uLi0tLS0tLS0tLCwsLCwrKiooKiknJiYoKCgnJSUmJSYmJSUkJCMjJCQkJCQkJCQjIyMjIiIiIyMjIiIjIyIiIiIiIiMjIyIiIiEhISEhISEhISEhISEhISEhISAgICAgISAfHx8fHyAgISEgISMkJy44R1dmcHp8d29jVEMyLC0tMDEzNjpARUtSVVldYWVpampqaGFZU0xHQj06Njc0NDQ1NTU1NDQ0NTU1NDMzMzMzMzIxMTAwLy8uLi0tLCwtLS0tLi4vLy4vMTExMTExMTI0NDU1NTU1NTQ0NTU1NTU0NDU1Njg8PD5AQUJGSUlKTE1NTk9OT1NYW2Nrcnd4eHRzcnJxc3Z4eHh1b2pmZGVobHF3gIeKkJCSkZKSkZSUlZOKXjtCWF1XZ2FnfXBWZFxLRENHT1VbVk9VaWpubGNaTD43MCwsLCwsLCsrLCwsLDZTS05WV2FQSVdRTlhSW1hlcHp9fXt4d3h5enp7fHt7eHNqZmNmZmpvdHd6fX+ChIeJh4WAenFkU0M3MjU8RVJdanZ/goSCgYCAf39/f4CAf399fHl2dnh4dnFsZFdJOzItKyssLC4tKyspLC82PUdSXGJmaGloaGlpaWdlYFpUTUM4MTI3O0RLVl5la3J2fH5/fn17fX+BhIWGhYKChIWGiYuLiomIh4eHiImJiIV+dWtgWV9ka3F3fH59fn5/f39/f3t3b2RZTD00LSssNUBSYXB/h4qLioqKioqKiYmJh4WBeXBoWlZTV2Fpb3J0c29vcXFxcnJyc3Jta2hlZmZnaWloZ2U6Ojs7Ozs5OTg3Nzc2NjY1NTUyMjExMjEwLzEyMTIyMTIyMS8uLi8vLi4tLS0tLS0rKykpKysrKSoqKikoKSgoJycnJiUlJSQmJiUlJCQjIyQkIyMjIyQkIyMjIyIiIiMjIyIiIyMiIiIiIiIiIiIiIiIhISEhISEhISEhISEhISEhISEgICAgICEgHx8fHx8gICEhICEiIyUqMj9PYGp0fX13bFxPQDIyMjU2ODo/Q0dNUVdbX2JmaGlqZ2JbVE1GQT06NzY1NDQ0NDQ0NDQ0NDQ0NDU0MzMzMzMyMTEwMC8uLi4tLS4uLS0tLS4uLy8uLzExMTExMTMzNDQ0NDU1NTU0NDU1NTU0NTU2ODo8PUBCQ0RGSEpKS0xOTk9PTk9TVFleaG51eHd1c3JycXN2enp6d3VvamZpam10e4GIjpCRkZOVlZaXl5aVkXVeVllQM11zf4J8d2pcVFdSU01NWVdRTlVeZmRgWU1BNy4sLCwsLCwrKysrKiwyQV1hUFpbUV1UOkJFSlReZXF6fXx7eHd4eXl5e3x7e3ZvamZlaGhscHV1eHt8f4KFh4eFgHpxZFNDODM3PklWYW95gYOFgoB/f4CAgICAf35+fXx5dnZ4eHZxbGRXSTsyLSsrLCwtLCsrKy0yOUFKVFxiZmhpaGhpaWlnZF9ZUUpANzI1PUJKU1xiaG5zd3t8fXt6ent/gYWGhoWDg4SFhomLi4qJiIeHh4mKi4qFfnRpYV5gaGxzeXx+fX5+f39/f397d29kWUo7NC0sLzZDWGR0gIiLi4qKioqKiomIhoeFgHhtZVlVUlhhanB0cnJxcHFxc3Rzc3JwbWtqaWpqaGhoZmRePDw7Ozo6OTk4NzY2NjY1NTMzMzMxMDExMDIxMTQ2Njc0MzEwLy8uLi0tLCwsKywsLCwrKyoqKyspKSknKCgpKSYmJSUlJSUjJSUlJSMjIyMjIyMjIyMjIyMjIyMiIiIiJCQiIiIiIiIiIiMjIyMiIiEhISEhISEhISEhISAgICAhISAgICAfHx8hICAfHx8fISAgIiEhIiIjJiw5RVVjbnh9enJlWUs7NjY5Oz4+Q0hMUlRYXWFkZmhpZ2NdVVBKQj04NzY2NjU0MzQ0NDQ1NTQ0NTU0NDMzMzMzMjExLy8uLi4uLi4tLS0tLS0tLi4uLi8xMTAwMTI0MzMzNDQ1NTU1NDU1NTQ0MzY4ODo8PkBCREVHR0lKS0xNTk5PT05QT1FTWWJqcXl2dHRzcnFzdnl8fXl3cm1pamludXp/hYuOkJGSmJmYmJmamJONiIR/a1N5gYCBf3lvYl1MRVZeWVVRT01PUFJZYVxRQzcxLS0sLCwsLCssLC0qLTVaZ1dUYVZjVDpHTFNYXmh1fH19enp5d3d4ent7e3hzbGdjY2NmaWxvcnV5eX1/gYWFg4B6cmRURTo1OEFOW2dye4GDg4KAf39+f4CBgH9/fnt6eXZ2d3h3c2xjVkg7Mi0rKysrKioqKisuNDtGTlZcY2ZnaGdnaGhoaGRfV09HPDU5PEJIUFhfZGlucnZ5eXd2eHl6f4GEhYaFhIODhYiLjIyKiomIiYmKiouKhH11amJhYmpwdXp9fX1+foCAgH9/e3ZuZFdHOjMsKjA7SFpqeIKIi4uKi4uKiomIh4SHhH92bGJVUVJZYWpxdnVyc3FwcHFyc3Nxb21sbGtsampoZGRhWjw7Ojo6Ojo4ODc2NjU1NjQzMzIxLy8wMDEvMTQ1ODs8Ojg1MzExMDAuLi4uLSstLSwsKysqKioqKSkoJycoKCgmJiUlJSUlJCUlJSUkJCMjIyMkJCMjIyMjIyMjIiIiIiMjIiIiIiIiIiIjIyMjIiIhISEhISEhISAgICAgICAgHx8gIB8fHx8gIB8fHx8fHyAhISEhISIiJSUpMjxJWmhye312bWNXRzw7PT9CRElNUlZYXV5iZWVoaGZgWVNLRj05NzY1NTQ2NjQ0NDQ0NTU2NjU1NDQzMzMzMzMxMTAvLy8uLi4uLS0tLS0tLS4uLi4vMTEwMDEyMjQzMzQ0NDQ0NDM0NDQ1NTc4Ozw8P0FDREZGSElJSktMTU5OT09PT1BPUlZdZGx1eHZ0c3Jxc3Z3en17eXNuamptcXN2e4CFio6RkpWXmpqamJiUkYiFfHt8f4B/gYB7c2dcTkdWW1haUExKTU9MTFleVkg9NC4rLCwsLCwsLCwsLC01RV1cR1tWV09GV1ZHPlBkbXh+fXp6eXh3eXp6enh1b2pkYmJiYmdra29zdXh6fX+BgoJ/eXBlVEU5NjpDUF5qdn+EhYOCgH9/fn9/f39+fn17enl2d3l4d3NsY1ZIOzErKioqKioqKioqMDY9R09XX2ZoaWdnZ2hoZ2ZiXVdPRz88QERJUVhcYmhsbHJ1dnZzcnN3en2ChYeGg4SEhIeIi42Mi4qKiouLjIyLioR+dWtgYGZscnh6fH19fn5/f4B/fnpza2JTRDgxLCsxO01fbnuFiouMi4uLioqJiIiHhoF8c2leU1BSW2JqcnR0cnJycnJyc3R0c3FvbmxsbGxqaGZgW1Y7Ozk5OTk5ODc2NjY1MzQzMjIxLy8vLi8vMjI3ODw+QkJAPTk1NTQyMTEvLi4uLi0tLSsrKikpKSkpKCgnJygnJiYlJSUlJCQlJSUlJiYlJSQkJSUkJCMjIyMjIyMjIyMiIiIiIiIiIiIiIiIjIyIiIiIhISEhISEgICAgHx8fHx8fHx8fHx8fHx8fHx8gIB8gICEhISEiIiMlJiozQk5eaHR9enNqYlVHQUJDSExQVFdaXV9iZGVmZ2ViXFdPR0I7ODU0NTU1NTY2NTU0NDU1NjY1NTU1NDQ0NDIyMDAwMDAvLi4tLS0tLi4tLS0tLy8vMDExMDExMjEyMjIyMjIyNDIzNDM1Njc4PD0+QUJERUVFSElISUtMTE1PT01OT05OTU9QVV5ncnZ2dHN0c3R0d3l8fXp1b2xqbGxtcHN6f4SKjZCUlZaYmpmXlZGLhIB8e3t9foGAe3RrXlJOVU9QVVZWTUdLT1NTVFdSRzs0Ky4uLSwsLC0tLSwuLjA1Oj1RTlFFRE9QQz5Qa2d3fHt4d3d5eXl6eXh1dGxpYltdXmFlaWdtcHF1d3l7fn9/fXdsYlJGODk9SFRibnmChoSDgX9/f35/fn9/fn18e3l4dnh5eHdzbGJWRzkwKykpKSkqKikpKzE4QElSWmFmZ2loaGhoZ2dlYVpVTkZCQUVKUFlbX2Roa21wcnFvbW9ydnp+gIOEhYSEhISHiYyOjouKi4uMjI2NjIqEfnJnYmJnbXR5ent9fn9/f3+Af314cmldTkI3LissMz9PYnJ/iIuLjIuLi4uLiomIh4aBeXFnW1FQUltjbHF1dnRzcnNzdHR0dHJycHBvbGtra2ZjXFVQOzs6OTk5ODg3NjU1NDMzMzIyMS8vLy4vLjE2OjtAQ0ZJRkRBPjw7ODU1NDMxMTIwLi4sLCsqKiopKSgoJycoJyYmJSUlJSQkJSUlJSYmJSUkJCQkJCQjIyMjIyMjIyMjIiIiIiIiIiIiIiIiIyMiIiIiISEhISEhICAgIB8fHx8fHx8fHx8fHx8fHx8fICAfICAhISIjIiIiIyUnLzpHVmNueHx3cmphU0hIS05SVlpdYGFiZGVmZWRjYFxVTkY+OTY2NjY2NjY2NjU1NTU1NTY2NjY1NTU1NDQzMzEwMDAwLy4uLS0tLS4uLS0tLS8vLzAvLzAxMDExMjMzNTQ1NTU1NTU1Nzg5PD1BQUNDRUdISElJSUpMTE1OTk5NTE1MS0hJSk9XYmxzdnVzcXJ0dHd5e3x6dW9saWhmZ2dscHl8gYeNkJOVlpaYlpKPiYJ/eXp8fn9+fnlxal1VVVJSTk5MTklER09QTkpNUEpEOS0tLS0sLCwtLS0sLS0uMz1QV1BMQ0lTUUNBT21pd3x6eHd3eHl5enh3dHNsZ19ZWFpgZmtub2xubm9ydnl8fXt1a2FQRDg5QEpWZHF8gYOCgH9/f39+f35/f359fHl2dnZ4eXh3c2xiVkc5MCspKSkpKSkpKSwyOUFKU1tiZmdoaWhoaGdmYl9ZVU1JREdKUlheX2JlamxsbWxraWlscHV5fH+DhIaGhISEh4mMjo6NjYuLi4uMjIyKhX5yaGNmanB1ent8fX5/f39/gH98d3FoXU5ANi4rKjZDVGR0gYeMjIyLi4uLi4qJiIeEf3duZFZPT1RbZGx0dHNzc3JycnJzdHRzc3Fwb29ubWhjX1dOSTw8Ojo5OTg4ODU1NDU0NDEyMS8uLi4uLzAzNjo9QUZKTU1LSEdFQj8/PDw7ODc3NjU0MTEuLCkpKSkoJycmJiYlJSUlJiYlJSYmJSUlJSUlJSUkJCMjJCQjIyMjIyMjIyIiIyMjIyMkIiIjIyQkIiIhISEhICAhISAgICAfHx8fHx8fHx8fHx8gIB8fHx8fICAgICEkJCMjISEkJisyP01caHR+fHZya2RZVFJWWFxgY2NlZmZmaWZkYV9YUUtDPDY2ODc2Njc3Nzc3NzY2NTY2Njg5NzY1NTMzMzMxMDAwMDAvLS4vLi4uLi0vLi8tLzAxMjI0NDU1NTY2ODY2Nzg2Njg4Oz4/Pz9BQ0RGRkhISUlKSktLS0xKS0tLTUxLSkhGQ0RJU15pcXR2dHNzc3V3eHl7enVxa2ZkYF9iZWhwd3uFjI6RkpaVlZWTjoeBfnl5eHp7eHNuaGFeW1lWVE1NSklKRkNHS0dDSFBNTEgvKS4tLCwrLSwtLS0tLDA2RlhRUUlRVUdBPT5Ka3l8e3p3dnV3enp3dXVybGRaV1dZXmdtY0ZARGNrbnF1en57dWpfUEM5PURPXWh1fYKCgYB+fn5+fn5+fn1+e3p3d3Z2d3h4dnJrYVNGODAsKCgnJycoKCktNDtCS1NcY2ZnaGhpaWlpZmNgW1hSTEtMUVZcX2NlaWlpamloZGRkaW50eHt/goOEhISFhYeKjY+Pjo6MjI2Njo6MiIV/dGtnZ21zdnl7fH19f31+foGAf3hvZlhLPzUtKy44Rlhqd4SKjIyNjIuLi4uLiomHhH51bGJXUE5TXmdtdHRzc3FxcnJ0dHR1dXV0c3Bvb2xmYFpRSUg8PDs6OTg4NzU1NTQzMzIyMTAuLi4uLi8wMzY6P0RITFJSUE5NS0lIRkREQz9AQD48Ozk5NTItKyopKScmJiYmJSQlJSYmJSUmJiUlJSUlJSUlJSUkJCQkIyMjIyMjIyMjIiMjIyMjJSQkIyQkJCQiISEhISAgICAgICAgHx8fHx8fHx8fHx4eHx8fHx8fHyAgICAgIyIjIyIhJCYnLjhGWGVwen17d3JsZWBeXl1hZGZmaWppaWlnY19bVE1GPjk5OTg4NjY3Nzc3Nzc3Nzg4ODo4OTk3NjY0MzMwMTAwMDAwMC8vMC8wLy8wMC4xNDQ0NTY2Njg6Ojw9Pj0+QEBBQkJEREZGRkZISUpJSUlLS0tLTExMTEtLS0tMS0xKSEdDQkA/Q0xZZHF0dnRzc3R0d3l5eXh2cGliXFhXWlxga3J4gIeKj5GVlZaUko6IgXx5eXd2dG5lY2FaWVdWWVdNS0xKRT48Q0dHR0lQU1NcTCUtLiwtLCssLC0uLS0uNExNV2ZbU1RAPDc6SWl6ent4dnZ1d3l5c3J1cmpkXFhaW2poTT1EQDhdaWVqc3l6eHNoXUxAOz9HVGBtd4CEg4B/fn59fX19fX9+fXt5d3Z2dnd4eHZxamFTRjgxKygoJycnKCgqLjQ9Rk5XXmVnaGdoaWlpaWZjYV5aVlBPUldbXmFlZ2hoaWZiX15fY2ltdHh7f4GCgoKChIaIjI6Ojo2NjIyNjY6OjYqFfHNqaWlvdHp8e3x8fX5/f3+BgH13b2ZYSD00LS0xO0xcbn2Eio2MjYyLi4uLi4qJh4R+dGheUk5QVF1lbHJ1c3NycnNzdHR0dXV1dXRxcG1oY1tTTUhKOzs6OTg3Nzc1NDMzMzIxMDEvLS0uLi4uLjI2Oz9FSUxSU1NSUU9PTUtMS0pJSUpJRkRCQD05NTEuKikoJygnJiUlJSUmJiYmJiYmJiUmJiYlJSUlJSQlJSQjIyQkJCMjIyMjIyQlJCUlJSUlJSUkIyIiISEgICAgHx8fHyAgHx8fHx4eHx8eHh4eHx8gICAhISAfHyAgISEhISQmKC01QFFgbHZ9f3x4dHBsa2hoaGtra2tramppZWJeWVJLRD87OTk5OTc3Nzc4ODk4ODg4OTs8Pj8/Pj46NjQyMjEvMTEwLzIxMTMyMTM0NTc3Ozw8PD9CQkNHR0lKTExNT09QUlJUU1JUVFNTU1NSUlNTUlRSUFBPTk5MSktLSUlJRkNCPjs6OT1JVWNvdHVzc3NzdHd3eXp3dHBlXFNQTlBTXGNtcXmCiI+RkZOTkpGMhn98eHd3d3BmXVlWUlFNTlZRRkdGQzs7P0NHSEtNT01PUV1AIyosLSwtLCwsLSwtLTA8PFdjYF5TPTozQVpwe355eHd3dnZ1c2pocHBqZWBcXGFaXFVFQDdKY2FhanN3dnZwaFtNQDxCSldkb3qBgoKAf319fX19fXx+fnx6eHZ0dXR2d3d1cWpgVEc4MCsoKCcnJicoKDA2QElPWmFlZ2hoaGhoamhoZmJgXFhWVlZaXWBkZmVlZGJfWVhYXGJob3R4en6AgIGBgoWHio6Ojo6NjY2Njo6Qjo2KhX53bWtscXR5e3x7enx+fn+AgYB8dXBlWEk9NC4uNT5OX299iYuNjIyLi4uLi4qJh4aEe3FmW1FPUVlgaXF0dHFxcXFyc3N0dHV3d3V0cm9sZ2BYTkhFSjo6ODg3Nzc3NTQ0MjIyMC8uLi0tLS0tLS8yNDc9QkdLUVJSUlNSUE9OTU5QUFBRUk9QTEdEQT05NDArKSgnJycmJiYmJiYmJiYmJiYlJiYmJSUlJSUlJSUlJSMkJCQkIyMjJCQlJSclJSUlJSUlJCMiIiEhICAgIB8fHx8gIB8fHx8eHh8fHh4fIB8fICAhISEhISEgICEhISIlJykuND5KWmZxe4GAfHl3dHVzc3Fwb29wcG9vamdkXlVOSEE8Ozk5OTk4ODg4OTk4OTs7PUJGSUpNTktJQ0A4NTMyMjMzMzM0Njc6Oz08P0BERkZJS1BQUFJVV1dZW1pdYWFhY2RnZmZlZWhnZWVlZWVkZGJhX11cW1hUUU5MSkhHREI/PDo4NTU8RFJeanR2dHNzc3R2d3h3d3RtY1pNR0FFTFVeaW92foeMkZGTkZGRjYN+enh2d3hza2NdWFNNSk1SUUpGRERBQUNDR0xPUU5MTkpeaUwqJi0tLC0sLC0sLS8wNz5ga19fSzo5Nk1hcXl9eXd3d3V2d3BfVl9oaWVhXGFTPUVIP0tYYFlXW2ZyeXh1bmVYTD9ARU5caXR8gYKAgH99fX19fX18fn18enl1dHJyc3V0cW9oXlJFODArKCgnJyYnKSwxOUNLU1tjZ2hoaGhoaGlpaGhmZWFdW1tbXF9hY2VjYF1ZV1RSV15la3F0eHp+f3+BgYKFiIyOkI+PjY2NjY6Ojo2NioaAeHBtbnR4ent8e3x9fn5+gIGAfXdxZ1pLPTQvLzM/UmNygIiLjIuMi4uLi4uKiYeGgXpvZFtRTlNZYGpxc3Nzc3JwcnN0dXV2d3d3d3NwbWVeVUxFRFA4ODg4Nzc3NjY0MzExMTEvLi0tLSwsLCwsLjA1OT9DR0xQUVFRUVFQUE9RU1RUVlZTVVNTUEtHQTw1Mi0pKCcoJyclJSYmJiYmKCcnJSYmJiUlJiYmJiUlJSUlJSUlJiYkJCUmJiYmJyYlJSUkJCQkIyMiIiAgICAfHx8fHx8fHh8fHx8fHx8fHx8fHx8fICAhISEgISEiIiIkJCYrLzQ7RFFganN8gX58enp6eHZ4dnZ1cnRycm5pZF1VTkY/Ozo7Ozo6OTk5OTo6Ojo9QUdQVFlcX2BeW1VNQTY1NDU0OTs9QENFRklNTU9TVlZaWlxeX2JlZGdoaWtubW9yc3N0dHV2dXZ2d3d2dnR1dHRycG9vbGlnZF9bVk9LR0RAPTg3NDM0PEdQXWlydHRzc3N0dnh2eXZ0bmRWTEE6PkdSW2VudX6FjI+Rk5GRj4qFf3p4dnV3dm9sZl5YUlZXVFFLSERCQUNCRERJTE5UU0xNSkRsXDkrLS0tLC8yLy8vMUBccm1fW0M5OD5YZl1wfHp4dnZ2dXZvXV1iXmBbWFpVW0leRkBEXVZNUWJscXVyc3BnWUtCQkhTX2x2f4GBgX9+fX19fX19fX59e3h2dXJxcXJzcnBtaF1RRTgyKykoKCYnKCktNDxFTldeZGhpaWhoaWloamppZ2ZjXlxcXV9gYmNkY11VUk9OUFdfZ21ydXl7fn9/f4GChYiMjY+Ojo6Ojo6Oj5GPjYqHgnpycXF2enx7enp7fX9+fX+Af3x4cGZaTD41MjI5RFZndoKKjIyLjYyLi4uLiomIhn94bmJZUU5TW2JrcXJycXFxcXFycnR2d3Z2d3d1cW9lXVRKRUhVODg4Nzc3NjUzNDMxMS8wMC4tLS0sLCwsKysuMjY5PkJHSEpKTExNTE5QUFJTU1dZWlhYWFZTUExHQjo0LyspKCcnJiUmJiYmJignJycoKCgnJyYmJycmJiYmJSUmJiYmJiYnJyYmJycnJiUlJCQkJCQkJCIhICAgHx8fHx8fHx4fHx8fHx8fHx8fHx8fHyAgISEhICEiIiIjJSUoKy8yNz5KV2JsdX1/fnx8fHx6fHp6eXd3dXVzbWddVU5FPz08Ozs8PDs7Ozo5OztARU1WXmVrbnBycW9qYFFDOzo9QENISU1RVFZYWltdY2RnaWttbnBycnF0dHV3eXp5eHt8fn1+fn9/f39/fn59fH19fXx6enp5d3RwamZfWFBKQj05NDM0OD5GUl5qc3V1c3NzdHd4d3h4dG1jUEAyMjhCTlhhanV9hoyQkZKRkI+LhX98eHZ2d3h4dXFqaGFeWFNQUEtHRkZHRUVERkhJT1lTREJCSmBoNikrLS0sLi4xMTtPaGhWV085OTlKYGVTXXt7eXV1dXRvaF5jX1ZXVVBPTE9iXF1dRU9SX2dzbXRwfXVxZFdKQUNKVmNveICDgX9+fXx8fX19fX17e3p5dnJxcXFxcnJwbWhdUUQ3MCwpKCgpJygrLjY+SVFYYGZoaWloaGlpaGpqamloZmFdXV1fYWFfXVlUUU1KTFBXYGhtcnd6e35/f39/goWHi46Qjo6Ojo6Ojo+Qjo+MiIV+dXR0eHt7fHp6e31+fn6AgH9+eXJoW01BODMzO0dYaHiDioyMi4uKi4uLi4uKiIZ/eG5iV1JSV19ma3Fycm9vcHFxcnJ0dnd6enl4d3RwaWBUS0dKXDk5OTc2NTUzMzMxLy8vLi4uLiwrKyssLCsrKy4vMzc5PUFCRUdHSElLTk5OUFBVV1hZWlpXV1ZTUUlDPjg0LisqJycnJiYmJygoKCcoKCgoJycnJycnJycnKSUlJicnJygpKCcnJicnJyclJSQkJCQlJSQkIiEgICAgHx8eHh8eHh4fHx4eHx8gIB8fHx8hISEhISEiIiEiJCYoKiwvMjY8Qk5XZG10eHx7fX19fX5+fX17e3l4dnNsZFtSSUI/Pj4+PDw9PDw7PT5BR1FWX2lzen2DhIN/e3FjVUhFSEtPU1hbX2NoaGxtbnFyc3R1d3d5fHp7e3t8fn5/f4CBgYKDg4GCg4SFhISEgoGCgYGBgoKDgYGAfXp1b2liWlFMRkA8PkFDSVJeaHF1dXRzc3N2dnh5eXh5e3t8Xi8tP0lTXmp0fIWPkpKSkJCOioWAfHl3eHZ4eXp4eHJpY1dWUVJOTUlLSEZIRUZHSU1WTENBREI/VUskKi8sLy8xPGBTS1FQXFNOOTs7UV9qa2V0enp0c3dxZWJeWlJQU1FKSkZEUlNkYVpKTk9XYmppaF9XbGJVSUNFT1pocHuBgYB/fn18fHx8fHx8e3p5d3Rwb25ucXJxb2xnXVBDNzArKSgoKCcpKzE4QkpUW2JnaWlpaGhpaWlqamlpZ2RfX19eXl9eWVdQTElHR0tRWGJqcHV2enx9f39/f4GDiIuOj46Oj4+Pj46PkJCPjYiFf3h1dXh7fHx6e319fX5/gIB+fHhxaF5RRDs0ND5LXW18h4uMi4qKi4uLioqJiYiGgHhtYVdUVFthZ21xc3Nwb3BxcnNyc3V3enx7end1b2hhVUxJUGI4ODc2NTQ0MjAwLy8vLy4uLS0sKysrKysqKiorKy0vMTQ4ODo9PUBDQ0VGSEpKUFNVV1laW1hZWFhSTUlCOzYyLisoJycnJykpKSgoKSkpKSgoJycnJycnJyknJycnKCgpKSkpKCcoKCcnJiUkJCQkJSUjIyIhICAgIB8fHh4eHh0eHh8eHh8fICAfHx8fISEhISEhIiIhIiUnKCorLjI1OkBFTlhkanFzdXl7fn1/f39/fn58e3l5dWxkXFRNRkM+Pj08PDw9PD9ESU9YYGt2gIaKjpGPjYd9cWZZU1ZcYGRnbG9xc3R2d3d5e3t8fX1/fnx9fX17e4CAgYGAgYCCgoCCgoKChIODg4KBg4KDhYWFh4aHhYOCf3x4dG1mYFlWUk9OTlBWX2lydHR0c3NzdHZ2d4GRnKCeo6B6KDNFUF1ndX+HkJSTkY+PjYmGgHx6eXd3eHl7enZraWFRUlhZUlJOS0lKSklKT1FUUVFBNkRBPDtXVCwoMTIxPE9nb1diXllUTTc8QVNeZHF1d3h3dnR2cmRZT1JbU05NTUpLUV9bWlpKU19eX1xJW2FRXmxhVkhHSlJcaHV9g4F/fnx8fHx8fHx8fHt6eHVyb21ubXBwcG5qZlxPQzcwKykoKCgnKS40PEdNVWBmaGhpaGhoaWlpamppaGVhXV1dXFxZVlFMSUVCQkZMU1pianB1dnp8fX9/f3+ChIiLj4+Ojo2Nj4+QkZGQj42IhIF8eXl6e3x8ent9fX1+f4CAfnx6c2hfUkY9NjY/T2BwfoaLjIqKiouLi4qKiYmIhn93bGBWVVZeZGpwcnNzcG9wcXFydHV1d3p6e3p4dnJsZVtRTlppNzc2NTMzMzExMC8vLi4tLS0tKysrKikpKiopKSoqKCstLS8xMzI1Ojs8QEFERUhMT1JUVlhZWVlaWFZSTkdBOzUxLiwpKCoqKiopKCkpKCgpKCgoKCgnJygoKSkpKSkpKiorKSkpJygoKCcmJiYlJSYmJCQjIiIiICAfHx8fHh4dHh4fHx8fHx8fHx8fHx8gISEiIiIiJCUlJigpLS4wNDY7QEhPV19maW1wc3d7e31/gICAfn1+fXt1cGljWlNNR0I/QD49Pj9CSE9YYGt0fomQlJeVlZSNhnxyZWFjZ2twdHV3enx9fXx8fX2AgH5+fX19fXt6e3t7e31+gH+BgYGBgoCCgoGBgYGAgIGBgYKDhIaHh4SGh4WEgHx6dnNvbGdkX1xcX2Zrc3V2dXFzcnN0d4Oao6GipauuqGgsPk9aaXWAipGVk5GQjoyIhIB8e3l3d3h6enp3bmtjT0RUYFhZUUxNS0xRUlVVUEpCT0ZFPD06QmNYSlZGMF55c3JuVz5RVVE6O0pZX1ZpdnJwdnh2dnJpVVJXXVRISkpKTFJUTVRbTFtVVlxVQGBnXl9uYlJHSEtWYWx2foGAfnx7e3l5e3t7e3x7endzcG9ubGxvb29uamVbT0E4MCsqKSgoKCkuNj5IUVhiZ2lqaWlpaWlpamxpZ2lkYV5aWVdYVU9IRUE9PkNJUFddZmtxdHh6fX5/f35/goWHjI+Pj46PkY6PkJGRkZGNi4mFf3x9fHx7e3t7fHx+fn+Af317e3JoXlNHPTg5QlNkc4CIi4uKiouLi4uLi4qKiYd9dmpfVlJXX2VucnV0c3BvcHFycXZ1dnh7fX5+fHp3cWpjWVhicjc3NjY0MzMxMTAvLy4uLS0tLSsrKyopKSoqKSkpKScqKSkpLCstLjEwMjU4PD1AQ0VJTVFVVldYW1pbWVhTTEQ/OjYxLi0sKysrKikrKykpKSkpKSkoKCgoKCkpKioqKikpKioqKigpKCgnJiYmJSUmJiQkJCMiIiIgHx8fHx4eHR4eHx8fHx8fHx8fHx8fICEhIiIiIiQlJSYnKy0uMDQ2OTxASE5VWmBkZGhucHN4enx8fn2AgoCAfHp0bmhhW1VNR0VDQEBESU5WYGhwfIaPlJeYlpaXkYqBd21rbnJzdXd8fn5+fn59fX19fX18fHx8fHx6enp7e3t9fn5/goKCgoKCgoKBgYGBgICBgYGCg4OEhoSFhoeHh4SDgX9/fXp3d3Rwbm1ydHd3d3Nwbm54hJehn5+hqKywsa6SNDhJWml1goySlZORkI6MiISCfnx5eHh4enp7e3lyYk5DUFNTXlhRUUlNVVZXUU4+PE1KQzo6OzpEY15SbGNccGlmg1o8UFtUPT1ARkxCWI6Ue294eHp4cmJWY2JSSU1LSkpNUlReXVtWU0pEW2hnZF5gc1xRS0pLWGNueX6BgH18e3t5eXt7e3t8enl1cm9tbWxsb29vbmplW09ANzArKikoKCkrMThCS1RcZGhpamloaWloaGhpZ2ViYFtYWFhTTklEQj46Oz9ETFNaYWdtc3Z5e31+fn5+f4KFiI2Pj4+Pj4+Oj5CRkZGQjoyIhoB9fX19e3t7e3x8fX1/gH18endyaV9VSkA6O0VXZnaBiYuLioqLi4uLi4uKiomFf3VpXlZSW2Job3N0dHNwb3BxcXN2dXd6e31+gH9+eXVuaGBibXk3NzU1NDMxMjAvLi4tLSwsLCwrKysrKioqKSkpJycnKCkpKSkqKikpKi0uLjAzNTk6P0NHTVNWWVtdX19dWlZQSkM/OjYzMSwsLCsqKisrLCsrKysrKioqKikrLCosLCwrKyoqKyspKSoqKCcmJiYnJyclJSQkIyMiISAgICAeHh8fHh8eHh8fHx8fHx8fHyAhISEhIiIjJSQlKCgsLzA0Nzk6PkBESlBRVFdcY2dpbnF2eHt+f4CBg4OBfXp2b2hhWFZRS0ZHS1JYYWdweoSKj5OXl5eXl5KMgXhzc3Z3eXp6e319fn1+fXt8fHt7fHx6enp6enh5enp6fX1+foKCgYKCgoKBgIKAgH+AgYGCgoKBgYOCgYOFhISEhoaFh4eEgoKAgH19fX1+f3x4c3aFl6Kfn5qdpquur66rmkE1R1lmdIKNlJWUkZCOjYmGg398fHp3eHd6e3x7c2lgU1NSXGhiV1RMTldYVFJLODVJQz07Ojc6PlRoZl5ELGBVVW9WUlFaSTw+S1VIO1Z9elpUYWJmZF9dWmFzaUdHSkpJTExUWFhQTUlOUWRjYFNSX2NubU5JUF5oc3uAf358e3p6eXp7e3t7e3l3c3FubGxrbG9vb21qZFtQQjcwKyopKikpLzQ8RU1XX2Vpa2toZ2doZ2dmZGRiYFtZV1JQS0ZDPTg3NjxCSFBVW2Bob3R3ent9fn19fn+ChYmOkJCQkI6Njo+QkZGRkI6NiYaCf319fHt7ent8fX5+fn19enl2cGlgVU1COz1KW2p5hYqMjIuLi4uLi4uLi4qJhH50Z11XWV1mbHN0dXRzb25wcXBzdnV3enx/f4KCgX15dG5qbnaANTU0NDMyMTEuLi0tLCwrKysrKioqKikpKSgoKCgoKCcnJycnKCgpKSkoKSkqLC4xMjU4PkNIT1VXXF5gXl5cWlVPSURAPTczMS8tKyssKywsLCwsKysrKysrLCwsLS0tLCwsLCwsKyoqKiknJycnJycnJSUkJCMjIiEgICAgHh4fHx4fHh4fHx8fHx8fHx8gISEhISIiIiMkJSgoKiwvMjU3Oj5CRERERUhMU1leYmZpbW92eXqAgoWJh4SCfHl2cGlkYFpWVVdaYWhueYGJi4+TlpaUlJOQh4F5d3d4eHl3ent7ent7eXh5eXl4eHV1dHRycnJzdHV2dnd3enp9fX1+f39/fn5+fHx+f39/f39+f4CBgYGCgoCAgoOGh4iIiImIhoWFhYWFh4WDgIGTnqCdm56hpqqqqKalnpZUMUhYZ3WDjJKVlJGQj4yLiIN/fHx4eXl6fH59fHhyZF9WV2FkYltSUFNQUlZQSzcuMzg7Ozg4PkNMYnFrRFZ2a1lUWm1fUEA+P1FKQUBCOjk8PTw8PD09R09RZVxCRUpLS0tIT1BVU1BRUlZXUD1NT1RUYWJXSlZha3Z+gX9+enp6enl7e3t7e3t5d3NwbWxsa2xvb3BuamRbTUE2MCsrKikrLDI3QUpSWWFnamtramlnZmZmZGJiXlpWU09MR0I9NzczMzc8QkhQV15la291eXx9fX59fX5/goWJjpCQkJCOjY6PkJGRkZCOjYmGg4F/fXx7e3p7fX5+fn59fHp4dW9oYVlQRT9BTF1se4aLjIyLi4uLi4uLi4qLiYR+dGdeWVlhaG92dnRzcG9ucHFxcnZ1d3p7foKEhYSBfXl1dHh/hzU1NTQyMDAvLi0tLC0sKysqKigoKCgpKScnJycoKCgnJycoKCcnKCcnKCkpKioqKiwuLzU6QUZOVVhcXmBhX15bWFJPSkVBPDs4MC0tKystLS0tLCsrLCwsLC0uLi4tLS0tLi4sLCsqKSkpKCcnJycnJyUlJCQkJCIhHx8gIB8fHx8fICAgHx8fHyAfHx8fICEhIiIjIyMkJCUnJykrLjEzNjk9Pj4/P0BER0xRV1xgY2dpbXB1en6BhoeGh4SAfXl1cm9pZWRkZmtweIKIiouOj5SUk5GPi4V9eHR1d3V2dnV1dnV1d3Rycm9ta2pqaGdnZ2VmZmRmaWtsbXBxcnN0dXV1dXR1dXR0dXZ2d3h5fH1+f4GCgYGCgIGBhYWGiIeHiYmJiYqKjIuMi4mTn5uZm6CjpKSinZyalpSRczNEWGd1g4+UlJOTkI6NjIiDf315enl5eXp8fX13c2ljXVtkZGVjWFhYWVZWU0M2Mi83PTw6Nz5LU3h4XUhQaHBqZ1hVUVFAQT88Nz5CREZHR0ZFR0ZGTVRGP0JCQ01QTktLSklJT1ZXWVNFRU82OEZVVUdDWE1YZG14f4B/fXp5eXl5e3p7e3t6eHZzb21ra2tsbW9ubGhiWUs/NDAsKywsLjE4QEdOVVxkamxqamhoaGdmZmNfXlpVUUxIQj46NC8xMzY6QERKUVlgaG1zd3p9fn5+fH5/f4KHiY6Pj4+Pj4+PkJCQkZGRj42LiISBf359e3t6e319fn59fXp5dnJuZ2JaUEdCRVBhb32Gi4uLioqLi4uLi4uLioiFfXJoX1pbY2tzd3d2c3BtbnFxcXJ0dnd3eX6Dh4iHhYKBfHyBiI0zMzQyMTEvLy4sLCsrLCsrKiooKCgoKCgnJycnKCgnJycnJycmJicnJykpKSoqKioqKiwuMTk/RExPVlpdX2FhX1pYWFVRS0dCPjczMC4uLS4uLi0sLC0tLS0uLi4uLi4uLi4uLS0tLCsrKyonJycnJycmJiUlJCQjIiAgICAfHx8fHyAgICAgICAfICAgHyAhISIiIyMjJCQlJycpKi0wMzc3Ozw8PDw/Q0dLUFZZXV1gZGZqbXJ3e4CEiIiIh4WBfX14dXNxcHJ0fIKIiYqNjo+Tk5KPjYqCenVycXNycXJxb29sbGdlZWVhYV5dWVhXVVVWV1dXWlxgYWJkaGhpaWpqamppaGhqamloaWtub3J0d3p8fn+AgoSEhIODhIWGh4iIiouNjYyOjo6XmpiUmJ6ioZyUiIB8j5KNjYJBRlhndYOMkpSTkI6OjIqHg39+fHx8enp7en19e3ZfYV5WX15kZFpXVl5fUVdDOTMyOTs7OTc4QEhFNT1JS0NBbG9pVUc+OkNBPUdEQj08Ozs4ODU5OUBUTkZAP0VKSkxLSUZITlliW1VNRkpVV05FS0pFV05VXGVxeoB/fnt5eXl5eHl6e3t7enh0cW1ta2trbG9wbmxoYlhKPzQvLy8wMjU5PURKU1pgZ2tramppZ2ZmZmVhX1pWUktEQTs2MC4sLzI1PEFGTVRcY2luc3d6fX6AgIB/f4GEiIyPkJCPj4+Pj5CQkJGRkY+Ni4aFg4B9fHp6ent9fX5+fX16eXd0b2hkXFNKRUhSY3KBh42Li4qKi4uLi4uMi4qKhX1yZV1cYWhtdXh3dXNwb3BwcHJxcnR1dnl+g4eJiYiFgoGDiIyOMjIwMDAwLi4sKysqKSkqKioqKCgnJycnJycnJycoKCgoKCcnJycmJykpKSkqKioqKioqKi0wNjpAR05TWlxcW15fXVxbWFZTTUlDOTMxLi4uMC4vLy4uLy8vLy8vLy8vLy4vLy0tLSwrKysqKSkoKCgoJiYmJiUlJCMhISEhHx8eHh8gICAgICEhHyEgHiAgISEiIyQkJCUlJSYoKSorLi8zNjk8PT09QUVHTFBUVlhYWVhbX2Nob3V6f4WKjIqIhoOBgH18enl7fYSJiYuLjI6RkZGRkY6HfnNxcG1tampoZGNgXFtaWFRSUE9NSkhIR0VDREhISUtNUlJWWFpbXmBgYF1eXFtdXF5fXFtbXV1hZWpucnV4e36BgoKEhYWFhoaGhoeJi4d9hI2Vl5WTlpyhopmJfHl7cHiMjIuJXExYaHaEjJGTko+NjYuJh4N/fXFib3p6eXyAfYJ+aVtXWFpeZGhZSEpOSz1LRzdDOjo7OTU2Njk7RDs3P0dBTVNTdmRQPzxDQ0pIP0Y4SnJ9d3NuVlQ9TWpQSkNGSkhHRUZDREdPWFZPTktGREdHRVdJUVlTU19sdHt/fX16eXh5eXp6eXt7enl2dHFuamprbGxucW9tZ2FVSEA2NDU3OTxARUhMUlZeZGlsbGtraGZnZGRiYVxXUkxFPDcyLSkpKi4yNzxDSE9YX2dqcHV3en1+f3+Af4CCh4uOkJGQj4+Pj4+PkJCRkZCPjIqHhIKAfXt8fHp8fn5+fn59enl3c29pZF1WTUhLVmZ1g4iMjY2Li4yMi4qKiouLiIV8c2ZeXWNpcnd4d3VxcHFxcHBxcnJycnN2fIKGiYqKiIeHiIuOkDExMDAxMS8sKikqKigoKSkpKSgoJycnJycnJycnJycnJiYnJycnJicpKSkpKSkqKioqKioqKi0yOD9FSk5TV1laXV9gYWBgX1lTTEQ6MjAwLi8vMDAvLy8wMDAwMDAwMDAvMDAuLi4tLCwsKykpJycoKCYmJiYlJSQjISEhIR8fHx8fICAgICAhISAhISIjIyMjJCUkJCQlJSUmKCssKy4wNTc7PD1AQEVJSk1PU1RUVVRVVVdbXmZtdX2Ch4yLioiEhIWCgX9+f4SIioqLjIyNj5CRkZGOh3pya2hmZGJdW1hVU1BLSEZCPz49Ozg3NzY3ODk+QUNFSEtMUFNVV1lXV1ZVVlRTUlFRUFBPT09PUVRYW2Flam92en1/gYSFhYSEhYWFhYeBcH+Mj4+UmZ2dm5eLgX1+fnxufIqMi3NMWWd2hIuQk5GPjY2LiYeFgoFpYW1jeoGFh4iNgndqYlxWVGFcRkNIUVJIUmJdTDo6OzY1NjU2NDlFQDZYaF9VTlRZT0Y7PzxAQUVJPTRjf3tuV2RqTUtMSEpJS01KRkNCQkFBSExNTUtFPT9AQEtQRVdYXF9ibHV8f319enh3d3h5eXp6enl4enpya2toZ2trbG9va2ZgVUpAOjo7P0JESE5SVlldYmdrbW1paWhoZmZkYF1YU05IPjUvLCkpKSouMjc8Q0hPWWBla3N1d3p+f39/gH+Bg4eLjpCRkI+Pj4+Pj4+PkZGPjouIhoSCgH99fHx8fX5+fn5+fXt4dnJtaWVfWE9MTlhodoSKjIyMi4uMjIuKi4uLi4iEe3FnYGFnb3V6end1cnFxcXBwcXJycnJydHl+hIiKiomLi4uNkI8yMTEvMDAvKysrKyopKCgoKCgnJycnJycmJiYmJiUmJiUmJycnJygoKSkoKCkpKioqKioqKSkrLC40OkBFSU5TWFleYGFiYmRlXlVMQTYxMC8uMDAwMDAxMjIxMTIzMzExMTExLy8vLy4uLSwrKyopKSkoKCcmJiYlJCIiISEfHyAgHyAgICEhISAgISMmKCkoJyYlIyQlJSckJikqKywvMjU5PD9CRUdJS05NUFJVVVdXVldXWF9jam96goeNjIqHhYWGhoaFhISFiImKioyMjI2PkZKRj4d8cWZeXVpVUk5JQz89Ojk1MjEyMjMwMjIyNTk9P0JGSEpNUFNVVVdXV1dWVldTUE9OS0hEPz46Oj5CRUpRU1lfZGlwd32Ag4eGhYOCf4OEh4qOi46Ql5yclJCMioR3c3+De3J8e3uCWlpndYOJj5KQj46Ni4qIhIaLd3Bxcm+LlJSRjHhrb2hdWGZjXVtGR09aY21mO01HOjc4Njc4NjU5QkRFWmBUT0hJSkBAPT9CTlpjSDwyV3ptXU1QWFJOSk1OSkdGTE1GQUE7Oz9ER0lJRklKTEpPTz9YWFJiaG94fn59fHl3dnZ3d3Z5eHp3dm9ob3qCfnNsam9yamlnXFNMSENFR0pPUlRXWVtgZmhqa2xra2poZ2ZkYV9bVlFKQTgvKygoKSgoLDM4O0JMU1phZ21yd3p7f4B/gH+AgYSGio+RkI+Pj4+Pj4+QkJCOj46LiIWDgX9/fX17fX1+fn5+fXx7eHVxbWpmYVlTTVFcbHqEi42MiouLi4uMi4uMi4qIgXxyZmNnaXN5e3p2dnNzcG9vb3BxcnJvbnF1en+FiIqKjIyQkZGPMS8vLi0tKyorKioqKCgnJycnJiYmJiYmJSYmJiYlJiYlJicnJycoKCkpKiorKyoqKioqKioqKywsLDA1OT9FSU1TWV5iZGZpaWZeVEg8MzEwMS8wMTExMTIyMTEwMjIyMTExMTAwLy8uLi0sKysqKSkpKCgnJiYmJSQiIiEhHx8gIB8gICAhISAgIiQnLC8wMC8tKycmJSQmJicoKisvMzU5PUBDRklLT1BQUVJSVFZYWlxdXV5hZWpyeICGjI6Mh4WFhoiIiIeHh4eIioqKiouNkZSTk5CJfGxcUU5MRj87OTUzMS4vMC4uLi4tLzIzMzY8PkJFSEtNUFJUV1dXV1hYV1ZUU1JOSkZEPjo0MS8uLjI4PUJJT1VbYGdudnp+fYB6dnmCio2QkJGZm5mVkY6Qjo6NiXtuc21seYCOm5Z2fnaAjY6CeoOLjY2NjZGTj3RwfX9weJCSlIJjYWdqY1VcW1xQUE9JWmRYORxNSz04ODc4Ozc2PT9HY1RONzw2OD1GREFBQ0tXXUNGPGFcYmVbQD9KRE5aVlBIRkZIQz0+Ozg9QUdJSUpMTE5PUVhaWFlYWmVweX19fHt4d3V2dHl4c3N2cGZKTFtwhpl/YFhcU0dLW15ZUUxISkxRVlhaW15jZmttbm1ubGppaGdlY2JgXFRNRz00LSooKCkoKCwyNz1FTFNbYWhudHh5fH+AgH9/gIGEhoqPkZCPj4+Pj4+PkJCQjo+Oi4iFg4F/fHt6en19fn5+fn19e3hzb2xpZmFbVVJVX219h4uNjo6Li4uLjIuLjIuKiIF7c2lmaW10ent6d3Vzc3Jwb29wcXBwbmttcXZ7gYaIioyOkZGRjzAvLi4tLSspKikoKCkoJyYmJiYmJSUlJSYmJiYmJiUlJiYnJygoKSkpKSkpKioqKioqKiorKywsLS0tLjA2PEFGTFFYXmRnbG1rZVtOQjcxMTIyMjEyMjIzMzMzMzIyMjIyMjIxMC8uLS0tLS0tKyoqKigoJyYmJiUkJCIhICAgICAfICEgISAfIiYrLzQ8Pj4+OTYwLCkoJykpKSouMTY5PUJGR0pMT1BSVFRUVFZaXGBkZWVlZmlxdXuAhYyNjYmHhYaJiomJiIiHiIeGiIiKjI+Sk5KMiHpoUkVBPTk3MzEwMDAuLi8tLS0tLi4wNDg8P0JGSUpMT1JSVlhYWlpaWlhYV1NTTUtGQjs2MC0tLSsrLDAxNztBSFJZYGZtcHZ1f4yQj5KTlZqfnZmEbZGJkpKRkpCNg6G0vL2+vr67sJ6RfXmBh4FxdIKHiHpZe4NreouCbWN1eHdqXGZqa2hlYmBSVFVLRU9iXCsoPT48Ozk7QEU8OTg6RkNARz86OTg3TEBBQ0VKVVNGSV9dU1plUlJYOUJocmhVSUZEQUJCPzo3O0BDR0hJS01QUlJVWFtbWGBmb3p+fXx6d3Z3dXV5dF9gd2hia3JubmFgSkdGSU5ORVliXFVQUFFWWVtdYGRlaW1vcG9ta2lqaGhnZWVgXVpUTEQ7MSopKSkoKSktNDk/Rk5VXGNqcHV3e31/f36BgICAhIiNkJKQkJCQj4+QkJCQjo2Li4uIhYOAfnt5eXp9fX1+fn59e3l2c3BsaWVhXFdVWGJwfoiMjYuKi4uLi4uLjIyMi4eAe3Nsa21yd3t8enh0c3Nvb25ucHFxbmtoaGxwdn6EiIiNkJGSkI8vLi4uLSsqKSgpKCcoKCYmJiYlJSUlJSUlJSUlJSUlJSUmJycoKCkpKSkpKSoqKioqKioqKyssLCwsLC0sLjI5PkNLUVlgaG1ycWtjVUg6MzIyMjIyMjMzNDQ0NDQzMzMzMzMzMjEvLi4uLi4tLSsqKiooKCcmJiYlJCIhISAgICAgHyAfICAiJSovMzlAR0tLS0dDPjcwKykqLC0vMTU3PUFGSkxPT1JUVVZWWFhcYGVobG1ubm5wcnh9gYaLjIyIhoWGiImKioqJh4eGhIaGiIuOkZSQjId7aVFEPDc3MzUzLy8uLi4uLS0tLTAwMzY6PkJESEpOUVFSVldYWVlaWlpYV1VVUk5KRkA5NTEtLCwsKyssLC0wNTtETFRbYmV1jpSXkpSVmZ6fmHlrb22OkJKRkpKSoba7ubu9vb28u7u0loeDiH92cGloamtfXWB2d3l7a1VWcoNuVVpqbWpsbGBdVFFUTkpTdnU8NDEzOzw8OkBLRzg0Nz9GRExFOzw5O0o8QUNFSVVLSD1NaWVaVkpWTztubm5pWExFQD49PkE8ODo8QENER0lKS0xOUVZbW1hdZ3F1fH14eHRzdnZtVXNtbGRdXmluZl5DRE5QUUpESF1sZWBaVVRXWlxeYWRmaWxvcXFvbWtpamhoZ2VlYFtYUUpCOTApKCkpKSosMDg7QUlPV15lanB2eHt9f39/gIB/goWKjJCSkJCQkI+PkJCOjoyMi4uJhoOBf317eXp7e3t8fX19enl2c3FuamdkYFxXV11lc3+KjY2Li4uLi4uLi4yMjIuHgHtzcG5xdXl9fXt3c3NzcG9ubm5ubmtpaGlqbXF6gIWIjZCRkpCPLS0sLCsrKCcoJycnJiYmJSUlJSUlJSUlJSUlJSYmJiYmJicnKCgpKSkpKioqKioqKioqKiwrLCwtLS4uLS0uMjc6P0pSXWhtcXNvZFhLPTQyMjIyMTIzNDQ0NDQzMzMzNDQzMjEyMzExLzAwLi4sLCsrKSkoJycnJiUlIyIhISEgIB8gISIjJCgvNT1HTVJWWVtWUkpDPDYwLi8wNDQ5PUNGSkxPUlJVVVdaWltcYGJmbXJ0c3Fxc3V5foKFiouJhoWFhomLi4uKh4WEg4GBgoaJjJCSko6LgG9dUkxEPDg0NTQxLS0vLy0tLS4yMjY4PkJFSUpMT1BTU1ZXWVlaW1paWVdVVFBMSEI9NjEuKyssLCwsLCwtMTQ4P0lOVFltkZmWloyOnZqUkX1dNWOFhImQkZSUn7i+vLu/v769vL62s7qkhIiGiYF8X1JnY3NwZ3d6e3psV1xkWExbY2ZiXWFnV0hHTk1MWm1oSjo5SUQ+PDhEQTk2NzNFWVNBMzk8PElNQkRFQ0pWRUQ5TXdwazJCQEF1eW5nYFJORj8/PT4+PDs6PkJEQ0RGR0ZISlBTV1lbXWdxd3h6eXZ0c2xybm1vcmZHNkBkYUhLS0xMSEZMXGtwa2hjXVlXWVpfYWNoaWtvcHFwbmxqaGhoZ2ZkY2BaV09HPzUtKScnJyssMDQ6QURLUlpeZW1ydnl7fX9/f35/f4OGiYyPkZCQkJCPj46Pjo6MjIuJh4WCgH58enl4eXt7e3x9fXl2c3BsaWhmY2BcW1leZ3WBiYyNjYuLi4uLi4uMjIuKh4F7dXFydXl7fn16eHRzcnBwb29vb3BtamdmZmxwd32CiIyPkZKPjS0tLCwrKScnJycmJiYlJCQkJCQkJCQkJCQkJCQlJSYmJiYnJygoKSkpKSoqKioqKioqLCwsLC0tLS0uLi8xLy4yNDtETFhianN2cWlZTD01MzMyMzIzNDQ0NDU1NjY2NjQ0NDMyMzMzMS8wMDAuLS0sLCkpKSkoJyYlJSMiISEhICAfICEiJCgtNT5IUldeZGVnZmFZUUdBOzU0NTc6P0NHSkxOUVRWWVlaW1tcYGVqbnJ2dnZ0dHZ5eX6ChoiIiISEhYaHiYqKh4WBfnp5eXp/g4qPkpGPjYV5bGNcV1BJRDo3MS4vLi4tLS0wMTY4OkBESElNTk9QU1NWV1lZW1taWlhYVVJQSkU/OTQvLSwsKywrLC0uMDM2PEJITlRUhZ6Zmp1+a3luXXB4ipWYlYp7XF2Elba9vr28vb6/vrmmbHOzuLCGmJ2hd0laaHWBgXp8e3t7c2NSV2JPUVFfUUFBS1heUU5MSU9MUVg+OEZFQTw1Q09ROTg3PElgSkxQTlVPQ0RCUkxKVEJGPFZ4a0Q+PDxxeXdxZWZYSEZGREJAPTo5Oz1AQ0RGR0hJSk1RUlZYV1dodXh3e3l5dnNuYGRtam9qaV9ZX09KS0tIRFNla2xubm1rZmFcWl1eYmJlZ2xtbW9vb21ramhoaGZlY2JeWVVNRT00LCknJycrLzM4O0JFTFRaYGhtcnZ5e31/f39+gICChYqNj5GQkI6Oj4+OjY2NjIyLiYeFgoB+fHp5eHl7e3t7eXl3dHJvamdnZWNgXFtaYWt2gYmNjIyMi4uLi4uLi4uLioeBe3VxdHd7fX99enZ1c3JwcG9vb29wbWpnZmZpbnV7f4WMj5GQjYwsLCwrKignJyYmJiUlJSQkJCQkJCQkJCQkJCQkJCQkJCYmJycoKCkpKSkqKioqKiorKy0tLS0tLS0tLi4xMzExMjM4PkdUYGpzdHFqW008NTQ0MzMyNDU1NDQ2NjY2NDQ1NTU0MzQzMzEvMDExLy4tLS0qKSoqKSknJiQiIiIiIiAgHh8hIyYrMztHUFhhaG5vcXFsZ11UTEY/PDo9QURISktQUVNWWFxbXFxcYGNobnJ1dnZ2dXZ2eHt+goSHh4aEhIaEhIWEgoJ+eXZ2c2xvdXyHjJKSkI6KgXdxbWlhW1ZPSD85My8tLi0vMDM4PUBCRklKTE5QUVNUVldZWltbWlhWVVRSTUlCPDcyLy0sLS0tLS4vMDI4PUBGS09UcZycnaCkk3JZZ2h1gHePlIyJinZ2b527vr6+srC8vr+9uJN2p7qvhX+dmINRPEheb3Z+eHR3em9UQXNnWllcXkg9Pzs8TWFQTU5NS0JLT0RAQEE9OEJJRDg5Njg5PjZPVk9AS0NGQ15ZTFFBRTpueU0wPUJwcnd4dGVoXkpHR0RDQDo3ODo8PkFDRUZISEpQVVVVWFFYbXZ6eHhzSFpzcGdaYWZlcW9fVExKTk5MT2Zsa2xsbW5ua2hkX1xdXV9gY2NnaWlrbWtrampoZ2ZlZGNgXVhSS0M6MSwpJyYoLDA0Oz5CR01WXmJocHR3enx9fn5+fX5/g4aKkJGQj4+Ojo6OjY2NjYuLioiHhYF/fXt5d3h5e3t7enl4dXJuamdlZmRjYF5cXGRueYOKjYyLi4uLi4uLi4uLi4qHgXt1c3V5fH1+fXl3dHRzcHBvb3Bvb2xpZmNlaW50eH6EjJCRj42LKysqKiknJyckJSUlJCQkIyMjIyMjIyMjJCQkJCQkJCQmJicnKCgpKSkpKioqKisrLCwtLS0tLS0tLi4uMTMxMTIzOD5HVGBqcnVzaVpKPTQzNDMzMzU2NjU1NjY2NjU1NTU1NDM0MzMyMTEwMTAuLS0tLCsrKikpJyYlIyMjIiIfHx4fISMoLTVASVReZm91eXp4cmxmX1VRTUdFR0pJSk5PUFRVWFteXV9fX2Fla25vdHZ2dXNzdHV5fICChIWEhoaDgH5+fnt3c3BsZ2NeYWdxf4eOkpGPjIh+eHh1cW5rZF5WTEA5MS4vMTU4PD9CREhKS01OUVJTVFZXWFlaWlhWVVRSTklEPzkzLy4tLS0sLC0uMTQ4Oj9ESEtQX5acnKGio5qHe4GJjo54bWB5dXthaHyjub69up6ZrLe9vb2siZOwpYd8mIppT1RPbnpvWV5kbG1sZWqAZV1YVEw/Ojk+RUlUUk1LS0tUTUtFQUI/PjxDRT89Ozo7QTo7S0xJQUBFRkpXWFBKQ0I+elYxMj9iX2Z2dnNrXllRRkZGQ0I+Ozk4Oz0+QkRHSEtMT1ddW1lZZG12eXd1cTtRc2Q+W29rdndOQ1NPSkVRYmloZ2pqbG5vb21nY19cXFxcXlxcXmFkZmhqamppZ2dmZWNiYFxXUElBODArKCcoKy4zODw/QUdOVl1ka3B0d3p8fX5+fn1+f4KFi4+Rj4+Pjo6Ojo2NjY2MjIqIhIKBf3x6eHd4eXt7enl4d3JvbGhmZGVjY2BgXl9ocHuFio2Mi4uLi4uLi4uLi4uKh4F8dnR1e3x+fXt5dXRzcnBwb29wb25rZ2ZjZWlucHd+hIyQkY+MiiknKSknJiUlJSUlJSQkIyMiIiIiIyMjIyMjIyMkJCQkJiYmJygoKSkpKSkqKyssLCsrLS0tLS4uLi4uLjE0MS8yMzg+R1VfanR5cmhbSDszMzM1NjU1NjY2NjY2NjY2NjY2NjY1NTU1NDQzMjExMC4sLi0sKyorKicmJSQjIyIhIR8hISMlKjE4Qk1XYGhyeX17eXNvaWNeWldUU05OUFRTU1JUV1lbX2BgYWFjZmlrb3JydHNycnJ0dnl9foKEhIOBf357eHRwbGdjX1hRT1JZZXF8ho6Pjo2JgHx9fHx5eHRuaWJZTkI7NjU6PUBAREdKTExNTk9QUlRWV1haWFZXU1JPTUlEPjo2MzAuLi8vLi4xMzU4PD9DRUtSUnudmpqinpqLaWqNpZiIhYRoWlReZnyftp2ru7yxm6WvpKCyo4Z9laCYhp+SfV5edHFfWUxLU2hpXWluaXFeWFI6Ojs9PzhKUE9GTEZFU0tFREhKTFNCODw/Ozo7PVBNU0hHUExBREBhXVJRQURASmgyNztNWl1ndHVwal9VTkpGQkNDQj48PD5AQkVGSUpPUFJVW15ZXGJudnh3dHRxdXNkUWRvdm1LP0dLSkdXbGppaGlrbGtubm1qaGJeXFpaV1RSU1VZXF9maGpqaWdnZmVjYV5cV05HPzUuKCYmKiwwNTk8QERIT1ZfZm1xdXp8e3x9fXx8fn+DhouQkZCOjo2NjIyNjY6OjYyKh4WDgX97eXl4eHl5eXh4dnNwbWhlYmNlY2RhYGFlbHSAiYyMi4qKi4uLi4uLioqJh4WCe3Z3eHp9gn97eXZzcnFvb29vcG9sa2dlYmRnbHB2fYWKkJGPi4kqKSgoJyYlJSUlJSUkIyEhIiIiIiIjIyMjIiIiIyMkJCYmJicnKCkpKSopKisrLCwrKy0tLS0uLi4uLi4vMzIxMjM4PkZTXml0eHNoW0o7NTQ0NTY1NTY2NjY2NjY2NjY2NjY2NTU1NTQ0MzIxMTAxMTAtKysqKignJiYlJCQiISEhIyMkJyoxOUNNV2JqcnZ5eHZwcWxoZWReXFtZV1pcWlpZW1xfYWVmZmZmaGlqbHBxcnNycnFxcXR5fYGBgIB+fXl2cm1oZF9bWVRHQUJETVlndoSNj46LhH17fX9/fn59enZza2RZTkM/P0BDREZJS0xMTU5PUFFUVldZWFVSU05NTUlEPzo4NDIvLy8vLzEyNTg6PkBDRkhKTl6Vmpqen5eMd1dciaSnloR0YllhZElaj76uhp2ytamunW5xi6GafWWNmYqZi2dhZ2ZdY2RZVFdmXFRlaWljXGJSOzw+RD08RlJOSlJRQ0lOT1FNTlJaRTw+RT04OzpIW2ZMS1BDQ0JHYFJVWEFGPVc9PkNHUFhLTnF1cGdfV05KQ0FDQ0A9PD5AQUNGTUxOVllXWlpbXWBocnh5dnVwb3Fwbm5yeWZKQkpKQ0FKYmVmaGhoaGtsbWxraWVfW1lYVE9NSkxLUFlfY2dpamlnZmVkYmFdWlVORz40KycmKCsuMDU5PkBFS1JYYmduc3d6fHt8fX18fH6AhIeMj5GQjo6NjYyMjY2Ojo2MioeEgoB+e3l4d3d4eHh5eXZzcGpmYmBhZGRkYWFiZ294g4mMi4uLi4uLi4uLi4qKiYeFgHh2dXd7f4F+end1c3Jxb29vb3BvbGtmY2JkZmtwdn2FjJGQjYuJKSgnJyUkJCQjIyIiIiIhISIiIiIiIiMjIiEhISEiJCQmJiYnJygpKSkqKysrKywsLS0tLS4uLi4tLS0tLzEzMzEyOD5IVF5qdXhyaF1MPTU2NjY1NTc2NjY2NjY2NjY2NjY2NjY2NjY1NDQ0MjIxMDAwLy4sKyopJyYnJiUkIyIiIiIiIyYrMjpDTVdgZ25vcG9vbWxqampoZ2NiYF5eX19hX2NlZmhsa2ppaWpqbG5xdHNycW9ucHF2en6Af3x6eHZxa2VfW1dSTkpHQD5AQkZQYHGBjI6NiYF6dXl7foGBgYB+fXl1b2VZUElIR0dHSkpKSkxOTk5RU1VWVlNRTk1KSUdEQDo2NDQwMDEyMzU3Ojw+QEJFR0lKUFOEnpicn5iSgXZZUXiPlph+d2aHjV8oIH29u6mEfZesrp13W2WBmIk+WpOgmHpVWVxddHdtX1xdWlNWbWhnaFZIRTk9TVNGQD5UZFxgdVtGTE5OR0NVQT1APUNBNzc5RFdTPzVDQkRDO0BPXE8+RD87OUBKTVVTTFlqbnFqWk9NSEJAQkI/PDo9QUFDRlNVU11iYmFgX15ianN4eHdzcHJwa0hUeHZGRk1ORkxnamZkZmVlZ2lqa2trbGZgXFZVUU9HQ0BDRE5WXWRoaWloZ2ZjZGNhXVpVTUU8MywoJykrLzI1Oj9BRkxSW2RpcHV4e3t8fHx8e319gYSIjY+Pjo6Ni4uMjI2Njo6NjIqHg4B+fXt5d3h3eHh4d3Z0cWxoY19eXmNkY2JhZWpxeYKKjI2Mi4uLi4uLjIyLiomGg394c3V3e319fHh1dHJycW5ub29xcGxqZ2NiZWdsc3h/hoyRj4yLiSgmJiYlJCQkIiIiIiIiISEiIiIiIiIiIiIhISEhIiQkJiYmJycoKSkqKisrKyssLC0tLi4uLi4uLS0tLS4wMjIxMjg+RE9bZXB2dGthUEA3Nzc2NTU1NjY2NjY2NjY2NjY2NjY2NjY2NTQ0NDIyMzIwMC8uLCsqKScmJyYlJCMiIiIiIiMmKzI7QUtVXGNlZGRjYWNmaWpqamhnZWNkY2VmZmhrbG1vcG5tbW1ubm5xc3RzcnJwcHF2enx6enp3dXBrZl1XUUpIRERBQD4+PT5CSlpsfYmMi4Z8cmdrcXZ7fn+CgoOAfXt0bGVbU05LSUlJSkpNTU5OUFJTUk9LS0lGRkRDQDs4NjMzMjI1Nzk7PD5BQ0RGSkxNUVFknZ+coJyRg4KFY1FmhIOGg4OBn5taKiN4vLu0pYJdfJybiGJWa46Ne2xwlqRmQ1xfY3qSknZtZGJcaGFWXFg9OT9ES1dZRDlCQmNcV2JZS0ZDQDpMVDM4PklKPDQzNT5GSkhEQUdARTdAR1Q9QDw9OkhdWFtdP0VPTV5eX1pPPz9AQUJCQkA9PkFBQ0ZUWVdfY2VjYmFiZ2x0eHd0c2xgXHJsZl9UTUNMW2RzbWhlZGNiY2Voamtra2hjXVlST0pDOjc2PERNVl1maGlpaGZmY2NiYFxYU0tCODAsKCcpKy8yNTo/QkdMUl1mbHJ1eHt7fHx7e3t9fYGEiI2Pj46OjYuLjIyNjY6OjYyJhoOAf3x6eHZ2dnd4eHZ0dG9rZWBeXV1gY2JiY2Ztc3uEio2Li4uLi4uLi4uLi4qJhoJ+eHN1d3t9fXx4dXJxcXBubm9vcG9samZkZWVpb3J6gomPko+Mi4kmJSYmJCQkJCQjISEgICEhISEhISEhIiIiIiMjIiEkJCcnJicnKCkqKyssLC0tLS0tLS4uLi4tLS4uLi4wLzAxMDE2PERMWGZuc3RtYlNIPTY1NjY1NTc3ODY2NjY2NjY2NjY2Nzc3NzU1NDQ0NDIxMTEvLy0sKyooJycmJSUjIiIiISIlJisyOUFIUFVbXFhUUlZcYWZqbGtpZ2dmaGhobGxsbnBycnJwb29wcHJ0dHd4dHJyc3JzeHl5dnZzb2plX1lSTERAP0BAPz09PTs9QUhWZ3mHioeDd2hYWmFpcHd7gIOCgoSCgHt1b2ZcVVFOSklKTExOTk9QUE5IRkRCRURCQT47NzU1Nzg3OTw+P0JERkhLTE1PUFFUg6Ofop+ZiXCIi3VQV3yBe3Zze6CXQCojaLq5trKmhWBkdoODaWB9h31wY4SLT0Rmco6IjZKKfXxjYWNTUlhcUjM+S1Nea0YvMDVNU01RSklGREREVzs4OD1ANzMyNTQ4REQ7Pj9CQVNAQUZAPUJKUkhWZ1FRV0BGQDBPT01QQDs/REZIQj8+P0BCQkRIUVlaX2ZnZGRlZmludXl4dXFwY11qZ0pIU05NWWVzbmllY2NiY2NlZWlpaGdkX1pSTEdAOTIxNTpDTFZdZGZoaGZlZWRjYV5bWFFJQjcvKignKSwwNDY8QkNIT1dfaG1yd3l6fHx8e3t7e31/hYqNjo2MjY6Li42Njo6NjYyLh4SAfn18eXd2d3Z3d3d2dXJtaWNdWVxbX2FjY2RocHh+iIyNi4qLi4uLi4uKioqKh4SAeXRyc3d7fHx7eHVycHBubm5ub25tbGpoZ2VmaW5xfYaNkJCPjIuKJiUkJCMjIyEhICEhICAhISAgISEhISEhISEiIiMjJCQnJycnKCkpKisrLCwtLS0tLS0uLi4uLS0uLi4uLy8vMDAwNDpAS1dianFyb2ZZTkQ8Nzg2NTU1NTU1NjY1NTU1NTU1NTY2NjY1NTU0NDQzMTExLywsKyopKCcnJiUlJCMiIiEiIyUoMDY+Q0tRU1NPSklPVFphZWdoZ2hoZ2lqam1ucHFxcXJycXFxdXV3e3t7end0dHV2dnd1dHJvbGdhW1NLREA+Pj8+PT48PDs8PUFHUmN4hoqHgnVjT0pPWGJrcnp/gYWGh4WDgHl2b2RbU09LS0xMTU1NTUhGQ0FAQUJDQkE9Ozw6OTs+QUFCQ0RGSEpMTk9TVVFTY5qhnZ6XkXFZfod0Xk1kfXt2cXWQgjIqKk21tLGwq52IcmlqbW9odXxtZHR2Yj4+WIOhmZaVjIF1ZltVS01YX15HS0JGWlVEMzI5PjU6TklJQz47RlM6NTg5PEY7MjIyOEBORj0/N05ZUVlLOUJDUUFIVlVPUk43QDIwSUtZQDY6PkNGSUZBPz9BQUNHSFVcWVpjaGNlYWdtcnt3c2peZ2deXlJHRjo6S1Nfcm1pZWNiYWRkZGhnZ2dmYF1VTUQ9NS0sLjM8Rk5YX2RmZ2ZlZWNhYGBeW1RPSD83LyooJyksMDY5Oz9DSE9ZYWlvdXd5enx8fHt7e3t+gYWKjY6NjIyMi4uNjY2NjY2MiYWCf319enl3dXZ3eHd3dXRxbGZhW1hXWl9hYmNmbHF5goqNjYyKi4uLi4uLioqKioeEfnZxcHJ1eHp8eXd0cnBwbm5ubm5ta2pqaGdlZWhtcX2GjZCQjYuKiSYkJCQjIyMhICAgISAgIB8fHyAgICAgICEhISIkJCUlJycoKSkpKSorKywsLS0uLi4uLi4tLi8vLy8uLi4uLy8wMDI3PEZRXGZrcHBpYldNQzw5NzU1NjM0NTU1NTU1NTQ0NDQ1NTQ2NjY1MzMyMzMxMS8tKysqKCgoJyclJSQkIiIiIyMlKS4zOj5ESEtLSEdGSU9WW15gYWRjZWdpamprbW9wcXFzcnN0dnd4ent7fHx5d3Z2dHJwcG9saWVeVkxEP0A/PT49PT09Ozs7Ozw/RlBhc4KJh4J3ZE07QEVOWWNteH+EiIeIh4WBfnl1a19WUE1MTUxNTEZDPzs6Oj1BQ0NDQ0NDQ0REQ0REREdKS0xOT1FPUVJVVXCjoZyZlINKTG6Pg2xQT3F4d3dwgnAzMTA1o66nqKSKgHhqYFRZV2ZqY21saFM4P1SDpaCTl5KSlHRJPF5vYltUTkxGQ0NLUkQzQEQ5Ojo4Pkc0M0JLSz8zQT4/NzEzMDU5REM+PFBlYGlfOz08QU5RSUVPSE1NOzxGPUNAPzgxNz9BQEBBQUBAQUFISUpNTUxSYGhnZlpfcGVkY1RLREVKRU9PSkBCTkNJZHVtZ2RhYmRkY2VmaGhmY15YUEY8MyspKS81PklRWWBlZ2dlZGRjYmBfXFhVUEc+NC0pKCgqLDA1ODo9QklSWmJqcHZ2eHl7e3x7enp7fX+GiYyNjYyLi4yLi4yMjI2Ni4iEgX99fHp3dXR1dnZ2dXRyb2plX1pVV1ldYGFkaHB0eoSNj46MjIyMjIyKiouLiomHg310cHBwdHZ4enh1cnFxb25ubm1tbmxra2lpZmdobXN+h42PjoyLiYkkISMjIiEgHyAgICAgICAfHx8fHx8fICAhIiEiJCQlJScnKCkpKSkqKyssLC0tLi4uLi4uLS4vLy8vLi4uLi8vLy8wMjlBS1dgZWtwbmhgVUxGPjs6ODY2NDQ0NDU1NTU0NDQ0NTU0NjY2NjUzMjMzMjEvLSwsKyooKCgoJiUlJCIiIiMjJSYrMDM5PkBDQkJDR0lOU1dZWFtcXF1fYWFkZ2lrbXBxdHN0dXh5eXx8fHx8eXp4dXFubGlmY19YUEdCPz4+PT0+PD08PDo6OTo7PUNNXnCAiImGfGpTNzE1PUhPXmp1fYSHhoeHhYJ+e3ZwaVtTT01MS0hCPzs7Oz5BRUZHR0lJSkpKSkpKSkpMTU5PUVJSUlJTV1Z2o56blYxuOkljiYh4WE5Zcnh6eIRgODU0Lnqkn6Kklol+bWRYTkI/RF1qaGNKPEVRfp+emJmin5RjQ058fXZtZGBTSlBZWFpQRzw6Rkc6Oz1FQT9BRFVQQkE3MDU9NiwwMzY6P1ViWVZOPDs9RF5YSERGSFFdV0xKTUtNQD5AOzw/Pjo7PkBBQD4/P0NGR0hJVGFoa1xGTk5ga1pPVF1UNC9ASENBRkdHVHJybGhlZGRlY2NkZWloZWBbVUtANS0oKSkvNj5JUVtiZmhnZWRjYmJhX1xYVE9FPTMtKSgoKiwwNTg6PUFKU1tianB2dnh5e3t8e3p6e36BhomMjYyMi4uJiYqLjIyMjYuIhIF+fHt5eHZ0dXZ2eHd2dG5pY1xYVFRYXGBhZWpxeH6IjY+OjYyMjIuLi4uLi4qJhYB5b2xsbnB2d3p4dXJxb25ubm5tbW1tbWtqampoam92gIqOj46MiomJIiEhISAgISAgHx4fHx8eHh8fHh4eHyEhISIhIiIjJSUnJygpKSkpKisrLCwtLS4uLy8uLi4uLi4wMC4uLi4uLiwvLzE1O0ROWWNob3BrZF5VTkdDQD06ODUzMzE0NDQ0NDQ0NDU1NjY2NjY1NDQzMzIvLy0sKyspKCknJyYmJiQkIyMiIiQmJy0xNTs6PDs9P0NFSk9RVFNTUVFSVFldYGFkZ2ptcHJydXd5e31/gICAfnt4dHFtaWRgX1lSTEU+PDw8PDw8PDs6Ojk5OTk5OTs+SVltfoiKhoBxXD4qKy83P0tWZG52fYOGh4eFhIJ/eXJpXVNMS0dEQj08Oz5DR0hKTU5OUFJTVFNQT09PT09QUVJTUlNVVlZWfKOemJCLajZVYXuMfWRSTGZ1fYKJVjk3ODhJlJieo5SFfXdsYFVMRklcY1xaR0FGSnKZlZKUnp6QelpziXlsaVxaVl1scXl2amJbVFVWVVVcaFBDPztGTkk7MDE5RzctLS80OEtmYFVSUD0+Q0pBPT5KTUZETU5JPkFMVlZWU1dGOj1BPTo+QUFDRUdFQU1SUV5TT1lcSUVSWlpkWVtUQzo+OUVHPDA8UnB3cm9vaWhuY2poYmJmZWVhW1NIPDEoKCcqLzY/SlNbY2VmZ2ZkYmFhYF9eWVJNRDsyLCoqKSstMTU3ODxASVNcZGxxdnZ4enp7e3t6eXqAgoeLjIyLi4mJiYmKiouLi4uKh4OAfXt4eHZ1dnZ2dnV1c3FtaF9aVlJTV1tfYmdtdXuBiY2OjYyMjIyLi4uLi4yKiIN9dG5paWxwdXd5dnVycW9ubW1tbG5ubm1tbGtraWlveIOMjo6OjImKiiIhISEgICAfHh4eHh8fHh4eHh4eHR4gISEiISIjIyUlJygoKSkpKSorKywsLS4uLi8vLy4uLi4uLy8uLi4uLi4sLS4uMTU9SFFbZGhtbWhkXFhRTEdFPzw5NjMzNDQ0NDQ0NDQ1NTY2NjY1NDQ0MzMxMS8tLCsrKSkoJycmJiYlJCMjIyEiJSQoLTI0MzU3ODo+Q0hMTU1LS0xMTU9RV1thZGdqbXBycnh5enx/gYSCfnt4c29rZl5aV1NNRj86Ojs7Ozs7Ozo6OTk4ODc3Nzc6PURSZXmFiYaCeWhMMCopLDA5Q01aZnF5foKEhISCf4B/dm1iVUtGQUBDQ0NFSEtOUVRVVVVWV1hXVVRTU1FRUlBUU1FVVFVUWouenJeQjXMsPFhxhn1oTUdMZnV8dUo6Ozw8OmeOkZaGd3J0bWVZUFBUWlVRUUlGR0dmjouHi5OXlYl9fF1OUVRNT1VOUm6JjHBzhXBiWk1GS1hPTkY7R09AMi4zNzw4Ly0uLjM8P0M/S1ZKTUk7Nzg7Ozo8Pj5BPTg6OzxDSEpNUEBBREE+P0FBQkRDQ0ZKSklNUlBIQ1BRQkVKSVRTQD9CQEFLUWZrdHl4dW5mdHh3ZFhdVF5eY2ZlYV1VRjsxKCgnKTA3QEtVXGRmZ2dmZGJhYWBfXFhSTUQ7MiwpKSkrLTE1Nzg8QUpWX2ZscXZ4eXp6e3t7enl6foCHi4yMi4qJiYmJioqLi4uLioeDgH17eHZ1dHV1dXV2dnRwbGdfWFNPUVVbX2Vpb3Z8gomNjo2Li4uLioqLi4uMiIaBem9oZGdrcHV3d3VzcXFvbm1tbWxubm5ubm1ta2ttc3yGjo+OjIuJioohISAgICAfHh8fHh4eHh0dHh4dHR4eICAgISEiIyQmJicoKCkqKissKywsLi4uLy8vLy8uLi4uLi0tLS0vLy4tLCssLSwxNz1HUVxkaWlpZmRfWlVRTklEQDo2NTMzMzMzMzQ0NDQ1NTQ0NDMzMzIyMTAvLi0sLCsqKSgnJiYmJiQkJCMiIiMkJCgtMDEzMjY4OT5BREZISEdKTE5RVVpbX2Nma25ycnN3e3yAfoB9fHl3cW5nY11YUE1HQj07Ojo6OTo6OTk5OTg4NzY2NjY2Nzk+S19ygImIgn1uVzspKScpLTQ9SVNdaG94f4OEhIJ7dXZ4cGFUSUVER0lKTVJVWVtdXl1ZV1haXVpYVlZVVFNSU1RSU1NWXWKVnZiYlYx9KzlOYHt5Y05LRElQUklBPT4+PTw5boSKgW5tamJfV1BQU1FKTVBJSkdFSnaIhIKAiJKJfltBSU9NTEpFPjU/W2Fqf42BdGVbTlJXSEpMPT86NTI4OTI1NTAtKicqMTs/PlRMPTc0Nzc0Mzk1MzU4Ozs6OTg9PTs6QlFEQT9FTUdDQT0/P0JHSVJeWl1kVFZeXEo9UlpROkBMR0VQYXB2c3N3dHNzbXBpZUpTQUhdY2VnZWFbU0c7MSsmJyoxOUJLVF1kZmdnZmNiYWFfXltXUkpDOTItKispLC4wNDY4PUNMV2BnbXJ2eHp6ent6e3t6fX+DiIyLi4qJiYmIiImJioqKiomGhIB+fHh2dnV1dXV1dnV1b2plXVZRT1FXXmJma3F5fYSLjo6MioqKiomJi4uKiYaCfnZtZWVlam5zd3d0cW9xcG9ubW1ubW5wcHBubW5scHV+h46PjYuKiYmJISEhISAfHh4eHh4eHh4dHR4eHR0eHiAgHyAhIiMkJiYnKCgpKiorLCwsLC4uLi8vLy8vLi4uLi4tLS0tLS0sLC4sLC0tMDQ3QEZSW15jZWZlYmBbWFVTTUhFPTY0MzIyMjM0NDQ0NTU0NDQzMzM0NDEwMC8tLCsrKiooJygoJiYlIyUkJCMjJCQkJyssLTM3ODk9Pz9AQ0VGTVJVW15gZGdpa2xucXV3enp9fHx6d3Zzb2pkXVdQSUNBPz47Ozg4ODg5OTg4ODg3NzY1NTU1NTQ4OkZVanuFiYaCdmRHLSgmKCkpLDU+SFVdZ3B2fXxwZV9me3hwZVpPTlBWWmJpbG5vb3BsZl9aWVtfXlpWVlZUVFJQT1BQT09ZmaCXlpSMfzMxOFZucFNKUEhBPDs9QEFBQUA+N0VyfnNlZGFYWlJLTk5KS01MRkdHSkxZdYeFenuUjndGOkFCQ0FBQD47Ni8yVoCMh3ZiYFVRU0k9RDk4ODQ5Pz0yLjEvLi0pPEE5ODw4NjM0Nzs8QUM6NDM2NjI8QkNHPDk5Oz1GRkI+ODw/QEE+QUVDQklJWVFqdU1QaXByYUlBQEhJSD1UaG5wcXJqWnB/ZmxeVVJAQExVXWNoZWRiW1NIOjErJygsMjpDTFVdZGZnZ2ZiYmFhX15cWFJKQjozLCsrKSwuMDE1OD1FTldgaXB0dnh6e3t7enp6en1/g4aKi4uJiYiIiIiJiYqKioqJhoN/enh2dnZ1dXV1dXZ1dW9qZV1WUU9RV15iZ2xyeoGHjY6OjIqKioqJiYmKiYmGgXpyaGFgYmduc3Z2c3Fvb29vbm9vbm1ucG9vbm1ubnR6g4qOjo2LiomJiSEjIyMhHx0dHR0eHh0dHR0dHR4eHx8gIB8gIiMjJCUlKCkoKSsrKywtLSwuLi4uLy4uLy4vLy0tLS0tLCwsLCwsLC0sLCwuMThASFFWWl5gYWJhYWBdWlZQSkVAOjUzMzIyMzMzMzQ0MzM0MzMzMzIwLzAwLi0rKysqKCcnJyclJiQlIyMkJCQjIyUnKiwvMzc7PkA/QENJTVZaXWFpa25ub29wc3Z4d3l3dnd1dHFuamNeWFFKQzw5ODs8Ojo4NzY1Njc3NzY2NjY1NDIzMzMzNTY9TGBzf4eIhXxwVzknJSUnKCgsLzdAS1Zham9qZG9uU2qAfXRoX11jbHZ9gIGEgn59fXVuZ2hoaWVfWVZTUlBOTEtMSklHTJSgmpSPiINFLjZPZ1xHSVJKRUI/QEBAPz49MjZGUXFuY11aV1ZQT01JSEZLTElJUFJXWlhpeHyGlY5tQzs8Ozg5OTo5NzYzLztmfoaGc2FTTklDRUtKPTI2Sjs0LDM0LysqMz89REU5NTM0OTY8QkQ8NzY1NTQzNDMzNDU3Nzo6PkpWSTYwLDM4OjxFPzs9QEZaXFFDTFtnYl1IQUhKRT1ZbW1tcHJ0WkNsdnSGRldgV0dJUFtmZ2hnYltSSDoxKykqLzQ7RE5XYGRmZ2dmZGJhYF9eXFlSSUI6MCooKSotMTE0Nzk+SFNaY2txdXh5e3x8fHp5eXl8gIOJi4uLiYmHh4eHiIiKioqKiIWDf3p4d3Z1dXZ2dnZ1dXNtZ2NcU09OU1lfY2dtdHyDiY2OjYuJiYmJioqKi4qIhYB5bWRdXGBnb3R1dXNxb25wb25ubm5ubm5tbW5ucXF2fYWOj42Mi4qJiYkhIyUlIh8dHR0dHh4dHR0dHR0eHh8fICAgISAhIyQlJSgpKCkrKyssLS0sLi4uLi4uLi8uLy8tLS0tLCwsLCoqKyssKywsLCwxNj9GTE9TWFtdXmBfYF9cV1NOSEE6NTMyMjMzMzM0NDMzNDMzMzIxLy8vMC8tLCwtKykpJycnJiYkJCMkJSQkJSUlJyswNTk9QURGSktPVVteY2ZqbnJyc3R2dXd3d3RzcW9ta2lmYFxWUEtCOjc1Njg4OTo6OTg2NzU2NjY1NTU1NDMzMTExMTIzN0JWanmEiIWCeWVGLCUnJScpKjA2O0RTYm1oa11keHF4eXh5cnNyd3+DhYWDhoKChYWDf31/gX54cGdbUU9MTEdHRUNDQ0F6npWPioSDWS41QWBWQ0hNSkhFQkNDQkFAP15uXkJYbGdfWFNSTk9NS0dITU1LTUxUVldWWFpvmJWEb1VCODs6NTc2NDIxLi0tRGp8iYyAZVROSkRBSUovKSwvMzI8OiwqMTksJzQ/OTQzNDM0MTM0MDAzMzQzMzEwMDAxNDk8Oj1DTEQvKS4zNzVCTTs/VVhRU1ZgbVpARFBiXUtEQEJbbmpucG1wdndlRWKokktkXUxCSlFgaGhpZ2JcU0g6MSspKi4zPUdPWWBkZmdnZmRiYWBfXlpXUUpCOjMyMjMzNzs7PDxARU1UXGVtc3d5eXt8fH17eHh4e4CDiYuMjImJh4eHh4iIioqKioiFgn57eXd2dHN2dnZ2dXVzbWhiWlFOT1NZYGRpcHd/houNjoyKiYmJiYqKi4uKiIN7cmheWlpeZWtydnVzcW9wbm9ubm5ubm1tbW1ubnJyeoOJj4+NjIuLi4qKIyQmJyUgHR0cHB0dHBwdHR0dHR4fHyAgISIjJCUlJicoKSkpKioqLC4uLS4tLS4uLS4vLy8uLCwtLSwsKysrKysqLCssKiorLS80Oz9ESU1RVllcXV9gYl5dVU5MQj43MzEyMjMzMzQzMzMzMjIxMTExLy8uLiwsLSoqKScnJiYmJSQjJiUlJSUpKy8zOTtARUhOUVZXWF9mam1ucXV4enp5eHd1cnBra2dlYl5ZVlFNRkE7NzQ0NDY1Nzg3ODg2NjU1NDQ0NDQ0NDMyMTEwMDAwMjM7TGJ1goiJh4FyWT0pJSQlJSguMTpHU1teWWFjZm9xcWtpb3B1foKEgH58fHh5fYeMjo+RlJWTjoqHe2xbTEE+PkI+PDk7WJiRioeDgHE0Lz1YW0lLTUtLVEZEQ0VAPjpflY1qZ2BlY1pTUExQT01HSEpMTVJNTVtWS1FUZJaPg2xdUUU7MjI0NzY0MS4sKi1IZXyNjHplVl1XUVNPRDo6MjQ5PzwwMDc6KygrNDQ2NDQ0Mzg6RU9EPTc1NDIvLS0wLjAzODo/PkU+NS8xOj9APzg1RVVSWVdfbWpbTE5MWm1TXWV0dWxzgIF0d3R5dlVjgU9EU1tUQUhXZmdnaGhjW1JHOTItKywyN0BKU1phZWdnZ2ZlY2JhX15bWFRPSkRAP0JHSE1PUFBQU1NYXWNpcXZ6ent7e3t6eHl5eX2DhoqMi4qJiIeHh4eJiYqKioqHhIJ9eXd3dXV1d3d2dnZ2cmxnX1hOTE9UWWBlbHN4gIeLjo+MiomJiYmKioqKi4aBeXBkWVJVW2NsdHd0c3BubW9vbm5ubmxra2trbm9vdHuEjZCQjIyMjY2MjCMkJicmIh4dHBwdHRwcHR0dHR0eHx8gICEiIyQmJicnKCkpKSoqKiwuLi0tLS0tLS0uLy8vLSwsLS0sLCkpKyspKSoqKyoqKissLjM2PEBER01QVlhcX2BhYF9aUktFPTUxMjIzMzMzMzMzMzIyMTExMS8vLi4sLCsqKiknJycnJiUkJSQlKCorLzQ5P0RITFJWWVxgZGVpcHR2d3h5enl5eHRwbmlnZGBbV1FOSkhDPjg0MzExMTI0NDU1NzY2NTQzMzMzMzMzMzMyMTExLy8tLzAxNUNYbH6IjIqGfGpROyYlKTQ1LjA8S05HR0dPTk5STVFUV1ZVWmhydXl2dnV3e4SNkpKTlpaXlZCJio6LgHJbSD44ODk3NTl+loiCf4B/UT0/UV9QTU5MSUpGQ0RCQD43VZqSgnZnVlpgWVBNUk5IRUVKSEtOTk5ZWVNISlOQkohxXUlDNDM3ODk5NTItKioqMEpgfJWWgW5hZGNza1xYU01ENzM4REhJQDcrLzM1NTMyNkdMSUtGNjc6ODY0OkE9OC8rLTc+QU1dQTI/Q0hCSEc9R01RUlVeZ2RdVVZVYGVnSVdvcnBtb4R+aGliW1xbWU1ESVtgSDtGT2ZmaWpmYV1TSjwyLSwvMzhCS1NaYWVnZ2dnZWNkY2RkZWViX15ZVVhYW2BlaGlsbG5ucHBzdHd6fHx7enp6eHd4eHp+gYSKjIuKiYiHh4eHiYmKioqKh4SBfnt5d3V2dnd3dnZ2dnJsZ19XTUtOVFlhZm51e4KIjI6PjIqJiYmJioqKioqHf3VrXlNNUVlkbXN2c3Jwbm9xb25ubm5sa2tra2ttbnN8hY+RkIyMjI2NjIwhIyYnJiMgHRwcHBwcHBwcHBwdHh8fICAiIyQlJicnKCcoKisqKiosLS8tLS0tLi4uLjAwLiwsLCorKyopKSoqKSkpKioqKSsrKyssLjI1OT1ARUpRVltdX19gYVxVTkc7NTIyMjIyMjMzMjIyMTAwMDAuLi4uLS0tKyoqKCgoJycmJicpLS8zODtCSE1RVFtfYmZpa3BzdHd5e3t6eXh1cm9saWRgW1hSTEhEPjs5NTIxMTEwMDAwMDAzMzMzMzMyMjIyMjQyMjIyMjIxMC4tLS0tLjQ8TGV6h42Mi4R1ZU85KTZTVUpHVFxaUVBRU1RZX1BKRkVGRz9GSUxVXmdwe4OOkpGXmJWRjX94eXeCj5KVjXthSDkzNDY3SIKJgn2BgWpLR1djVU9TTUVGQ0JCQjw3RnKel4Z5bVpUWFpWUElGRUZHSUdISElLT1BJRkpRjo+IgGVBNTI+Qz47NzIwKSgpKio1TGSClJOIfXd0dXJjYlhMS0xCPE1ORj43Ozo3NTQyNzw8Oj4/Pzs6NzU4REVLOy4xMTI+Sk9pcU8vPVJOTFRRUl9zWkxSWmdRXVI7PVxmWU9UYFxeWlliXlZQUUlEQExKQEVOQTxIOjFea2tqaGJcVEk7MS0tLzU8RU1UXGRnaWdoZmZoamxucXJxdHNwcHB0eXp9gIGDg4GAgYCAgYGDg4SEgn9+fXx7dnV5fYOJjIuLiomJh4eIiIiIioqLioaDf3x6eHd3d3d4eHd3dXRybGVeVE1KTFNcY2lxeH2Gi4+Ojo2LioiJiYuLi4uJhn52Z1dNSU9ZYmx0dXRycG5ubm5ubm5ta2ppZWZpa251f4iPko+LjIyNjY2LICIkJSUiIB0cHBwcHBwcHBwcHR4fHyEhIiMlJSYmJygoKSoqKiosLS4uLC0tLS4uLi4vLy4sLCwqKysqKSkqKikpKSkqKioqKysqKiorLTI1Nz1CR0tSWVxfYmJhXVRMRjs1MjIyMTIzMzIxMDEwMDAwLi4uLi0tLCsrKigoKCgoKysuMTQ6PkVJTlVYXWJoam1wc3R2eHp6e3l4dXRxb2pmYV5YUk9JQz06NjIzMjEwLy8vLy8wMC8wMjIyMjExMjIyMjI0MzIwMDAwMC8uLSwsLS4xNkVacIKNjouJgHlpTzpDWFdRUktdbXBiZWhdZWBZZGNSS0U+RERFRkdESVxtf46VlpaRjIOKj4+Ef5SZnJqVjnpZQTc8R0xoj4mBgYF9cm5uZ1hMT01EREI/QT88O2KMn5mJfnNpXlhVUU1IREZJSkpIR0ZJTEVGRUdNTX6If3ltRjw3QkdEQDgwKCMjJScpKjhQYHiMk4+EdWp1aXF4ZGlrWUpXXlFDPDk3ODQwLzAyNTY2ODo4OUdPRzlDQzcqKisxTmhrbWRfSEJHQ1RQT1NcbWNMXWZaTUc5Q05qW0NjaWVYSUlDPz9FTEY3Nz9NWVJNR0tRWzRPZ2tpamhiXFRIPjUxMTM5QUhQWF9jZmlqbG5wcXN2en2Ag4aHhYaGhoeJioqLi4qKioqKiouLioqKioqHhoF/f3t6fICCh4uLi4qKiIeHiIiIiYqKi4mFgn98enh3d3d3eHh3d3V0cWtlXlNLSU5TXGRrcnmAh46Qj42MiomJi4uLi4uLh4R8cmNRSUdQWmVvdHV0cnBubm5ubm5ubWtpZ2JkZmhudoGLkJGPi4uLjY2Nix8fIiQkIh8dHBwcHBwcHBwdHR4eHyAhISIjJCYnJycoKSopKSsrLS0tLS0tLS0uLi4uLi0tLCwsKisrKioqKSkoKCkpKSoqKioqKSkqKisrLy80ODxCR05VW2FkZGRdVU1FOTMzMTEyMjIyMDAwMTEvLy4uLi4tLS0qKyopKCkqLC81ODxCR01QVFtfZGhtcHJ0d3l4eHh3dnRycG1rZ2JeWVRPSkY+OzUxMTAwMC4uLy8vLy8vLy8uLzExMTExMTIyMTExMzIxMTEvLi4uLSwrKywuLzI8UGd8iI6LjIR4cnd3fH51ZlE/P1BjdXlcT1dYX253dGFJQ0NDREZDQUNER0tccX5+fYWOkZaVjouTmp+clZaVjHljYG55hZaPg4F+gYyKgnFYTE1JR0NBPz1FTFZ/l5+djX94bWJdXVpSSUhHSEhJSEZFRkhFPD1FU1lshnRtaVFAPkJGREI9MyYhICEkJyorPlFgcYONjYR0bml1fnR2cGViY1pcRzs8Ozk2MTM0NTM2OTU4NUQ7Oz87Nzs2NS0vOV5wcWVWXVVUT09ETFNWXVdTTlxLRVBIQlpMXm1dX2BWTSsuOTUzNjc0PU1RY2xfVUdET2VjaWhpa2tnY15WST84MzU0O0ZLVFliZ25wcnZ2en1/g4eJjo+Qj42Mi4uLjIuLi4uKiouLjI2Ojo+Pjo6OjYuJioSAf4CDhImMi4qKiYiHh4eHiImKioqJhYJ/fHt5eHh3d3d3d3d1dHJrZFxSSUhNU1xlbHJ6g4iOkY6OjIqIiYqKi4uLioeDeW1eTUVHU11ocXR1c3Jwbm5ubm5ub21raGVjY2Rob3iDjJCQjo2MjI6OjYweHiAgICAdHRwcHBwcHBwcHR0eHh8gISEiIyQmJycnKCkqKSkrKy0tLS0tLS0tLi4uLi4tLCwsLCorKyoqKikpKSkpKSoqKSkqKisrKioqKisrLTA0OkBHT1VbYmVpZl1WSkI4MzIyMTIyMTAwMDExLy8uLi4uLS0sKysqKSosMTQ4P0NHTlRbXGJoa29ydXd5eXh2dXNxcGxraWdiXllUT0tFQTo2Mi8tLS4vLS0uLS4uLi4uLy4uLi8wMDAwMDAxMTAwMDIyMTExMC4uLC0sKysrKy0vN0VbcoOMin90cYKSlZGLg357cVhNUWRaYFFKUGVsZX58XFFIRURER0ZDQUVGRUdJVl9/kpWakpKRlJeenJCOlJeQiIyRkZKVj4V+fH6PhVhoWEpMS0dDQEE9PUNvk6Gnm4yIfXVrZ2RjYWFNSF1mYFdJRkVFQzkyOUhcaH94X2BYR0RDRUI/PjgtIiEjJyorLC86TVxqd4SHgnh3fX6CenVqXk9VSDxESE9YVD06QDw2N0I0Mj4/Q0ZaVTw+MzE1NDdVaWRcVlxbUUA7Q2FqaF5cWlVGREw/QU1YSFZoXlxORUs/Rzs/Nj9DSFxlaH94b05MPUFlZmZpamtrZ2NeVkxBOjY3OT9GT1dgaG90d3x/goWIi4+QkpKSkI6MjYuLiouLi4qKi4uLi4qMjIyNjY2Nj46PjoyLiYiGiImMjYyLioiHh4eHh4iJioqKiYWCf3x7eXh4d3d3d3d3dXRwamFZUEhHTFNcZWx0e4OIjZCOjoyKiouKiouLi4qHgXhpVklFSlReanJ0dXNycG5ubm5ubm9ta2hlYmJjaHF5hY2Qj42NjIyOjo2MHR0eHh4eHR0cHBwcHBwcHB0eHx4fISEhIiMkJScnKCkoKSoqLCwsLS4uLC4uLi4uLi4uLSwrKioqKysqKiopKSkpKCgoKCgoKCkoKCkpKicpKSsrLTI5P0dOVV9kZ2pkXFJLQjo1NTQzMTIwMDAxMC4uLy8uLS0tLi0sLC4xNjg/RkpPVFtfZGlsbXBzdXd2dnRyb21paGVhYF1ZVVBMRkI7NzEwLi0tLS0uLS0tLi0tLS0tLi0uLi8vLi8wMDAwLy8wMDEyMTEyMi8uKyssKyoqKSkpLDA6TmR4g4R6fIuRioOFioaDgoJ9emxYXW5iVk9lhIJ3fG5gT0VBRkZFSEVGSEpMSkE/U26HlZOPkJOYnZqOioyNiHGKjpSPlI6Ee3l7kY1xhV1ISktFQT87OjpKfZejp5xla4N+dW5sa2ppaYGVlpKMg3hcRj43MTNLZWtybmVhXU1IRERBPz89MiglJyksLCwsLTpMXWdwdnuGkZWEh4F1b2FRYlZOV1VYVVg+NUVDRUJEMTZBOkZPS0ZDMC47OSw0SlpTTlBcVUY9RktUTFFJTFFVR0VHSk1WV0hJWFpNQEVPSUc4P0M4OURYbnl9eXNSND1RaGdnZ2lqbGhiXldORT04OzxDTFVfZ3F5fYGGiY2RkpKTlZSSko+Oi4qHh4eHh4iKioqKiYmJioqJiIuMjIuNjo+Pjo2NjY2OkpCOjImIh4aGh4eJiouLioiFgn98e3p3d3d3d3d3d3Vzb2dgWU9HRkxUXWZtdn6EiYyPjo2LiomHiYmLi4uKhoB3aFRIRUxXYGtydXVycnBvbW1ubm5vbWpnZGFhY2hxfYeOkpCNjYyMjo6NjB0dHR0cHBwcHBwcHBwcHBwdHh8eISAhISQjJCUnJygpKCkqKywsLC0uLi8uLi4uLi4uLi0sKyoqKioqKikpKSkpKSgoKCgoKCcnKCgpKSkoKSkrKyorMDY+RVBZX2draWNbU01FQT04NzY1MjEwMTAvLi8vLS0tLSstLzEzNzxDSU9VXGFlam1wc3Nzc3RycG9tamViXlpXU1JOS0VBOzY0MSwsLCwsLS0sLSwsLC0tLS0tLSstLi4uLi0uLy8vLy8vLy8wMTAwMDAvLisrKysqKikpKCkqMkBUZW9zf4yPjYWCeXZ2hYV+gX5cUmtzbmZdb4ePfHVtZ1tXUEVFSlJLRURDRUlLR0dKXoGWkZOUmJ2ZiYiMi4Zyd4aJgpCNgHp4eY6TlI5jR0lJRUJDT0c4UYidpqmjXixYe4F5eHZ6eoSVn6GZk4h5ZE0+Ni84U2Vsc25nYV5VS0E/QT9APjgxKi4vLy8tKyorOlBbZ2psf5OhmJaYjYZ7a2NlZWJYVERWTTw+Qj9JQTA9O0FGP0dOOi4/VkQtNUlUW0pBSjw8TExIUDU6PEBGV1ZGRUVPTlxmX004NUdZS1NMNjdSWT9ESmZwX2pyT0NXY2ZnaGhqamxoZF9YT0Y+PD5CTVZfaXN9goeMjpGTlJSUlJSTkI+LiISBfnt5eXt+gIKBg4aHhoeHhoeHh4eJiYyMjY2OkJCSk5ORkIyKiIeGhoeHiYqLi4qIhYJ/fHt6eHd3d3d3d3d1c29nX1VKRkVLUltjbHd/hYqMj46Ni4qJiouLi4uLioaAdWZTSUpSW2VtcnNzcXBwb21tbGxvbm1qZ2RgYGNpc36Ij5CQjYyMjY6OjYwcHBwcHBwcGxwcGxscHBwcHh8eHyEhIiIkJCUmJicpKigqKiwsLCwtLC0uLi4uLi4uLiwrKysrKyoqKSkpKSkpKSknJygoJycnJycnKSkoKSkoKSkpKSwxOUBJUlxkaWtpYlxXUUtHQz49Ozk1MzMxMDAuLi4tLC0vLzQ3Oj9HTVRaYGNnbXBycnRzcXFsamhlYVxYVE9MSEVBPTk1MTAuLS4rKywrKysrKysrKyssLC0tLCwsLC0tLS0tLS4uLi4uLi4uLi8vLi8vLi4sKyoqKSkpKSkoKis1RlpmfH6Gg3+BcWJwaGlvV1hlWFxnZ2RfX3GDkoR0bGdiWk1ERkpQSkVFQ0RHSUtMTE94mJKRkpeel4qIjY6OhXV9iHmLjIF7d3aJkI6PcURMS0lJQz8+N1qPn6WqpYorNE1ygYJ9eXuLm6GglI6GdF1IOzQvOU1ZYmdoY1tWVE9BPj8/QUI+ODEzMzEwLy0rKis1TF9oZGuBmKKkpKSimH5gVmhxZlVPYVZFPEhXPjI8OkRPUks+LyY0R1dFMjtHVWNWQ0VENTtGW1M8NzM3OkVESEIxOkFGYWI4PFlfWExbUEtTbmhgY2Bqbk5WX11gZmVnZWZpamtraGVhWFFIQkNITllia3V/h4uNkJGSlJSUkpOSjouHgHhybGZiYGBiZGdrb3J4e3x/foCEhIWFhoeIiYqKi46RkZSUk5KPi4mIh4eGh4mKi4uKh4WCf3x7enh3eHh3d3d3dXJtZlxQR0RESlBaY213f4eMjY+OjIuKiouLi4yMjIuGgHVmVk9QV19nb3N0cnBucG9ubm5ubm5tamdlYV9kanSBi5GQj46Ojo6OjY2MHBwcHBwcHBsbGxsbHBwcHB4fHh8hISIiJCUlJiYnKSorKCorLCwsLSwsLi4uLi4uLi4sKysrKysrKSkpKSkpKSkpKCcnKCcnJycnJygoKCkpKCgoKCgqLjM6QkxUXmRoamhjXlhWUk5LRkM/PTo4NjMyLy4uLi8wMzY5PkNIUFZdYWdqbXB0cnBubGpmYl5bVVNOS0ZBPTkzMTEtLCwtLSwrKyorKysrKysrKysrLCwsLCsrKyssLCwsLCwtLS4uLi4uLi4vLy4uLi0tLCsqKikpKSkpKSgrNU1wenl1cW1paV5cdnNvfXd0ZlpdYlRLVGJ1gYyGdWltbWdWREFJSEpHREVFRkZISUxNdZaOi4+XnpWLjIuOjY6LjJKHjol/enZ2hIuLi3pLR0hGRkVBPjVjk6Gnp6WaVzI9P0ZJPkFqh5qZkoWAdWZaUzsxMT5MWFpdXmBYVFBNQz0+QkRHQj85NjY0MzEuLSkqKzVSYl9dboCKk52fn5uLeGl4c2hgW1daS0dWYD05NDtBR0ZIODk+SDxFPjk8SFFZTjw7X0M9RlpeRTEuNjY8SEVAPUVISFReZW5rZ2VpZWltbGZQVWlgZmxgZWtpaWVjZmdnZ2tra2pmYVpTTEtOUlpkb3mBiYyNjpCQkZOSkpCOioN7cmpgWFJKRkVFR0tMUltfZ2xuc3Z6fX1+foCDhIWHh4iLjI6QkpCQj4yKiYeHhoeJiouLioeFgn98e3p4d3h4d3d3d3VybmVbT0VBQUdRW2VveYGHjI6PjYyLioqLi4uMjIyLhoB3aFxSVFpjbHN0dHJxcHBvbm5ubm5ubWpnZWJhZGx2g42RkI+Ojo6Ojo2NjBwcHBwcHBwbGhoZGxwcHB0eHx8gISEiJCUmJicmJygpKiorKy0uLS0tLSwtLi4uLi4uLi0sLCsrKygqKikoKCgoKCgoJycoKCcnJiYmJigoKCgmJicpKiovNDtETVdcZGhoZ2RkYFtZV1JRTUlFQ0E6NjUyMjIzNzo+REhOVFlfZWhrbW5vbm1qZmFeWFVQTEpFPjs3MzAvLi0sLCsrLC0rKyoqKysrKysrKysrKysrKysrKysrKyssLCwsLCwsLC0tLS0tLS0tLCwsLCwrKiopKSkpKCgrMGF9gW9laXZvZGleZnt6eW1dZmBefHVjZGx0fIuMk5CMjYV5dWRVS0xMR0RFREZGSk1NSmmUj4yMk5uJW3KFiYeMj5GUjZGGe3l1dIqRkZCLXERJSEhDQTw6cpqjqKmmmnQwPDs5NzQvUH6QjYeCeXFlWFBHNTpCTFJSVFZYVU9LSEQ8OUFKS0ZEQDs5NzY1MS4rLjE3QFZeW2JrdH6EiIiIiYWDgn51aVVQVVRVZGRMQjc1MjI7Pjw/QDQ3Nzk8Ozo9QTo2MC06Oz43Z1ozLTA+TkE2PEpQUkxjeHdycG5ramlraWlgVmhzYFpxcW1paGZlZmZnaGptbWxqaWRhXFlZXGNqdX6Gio2NjY+QkJCQjYqJhn50aWBVS0E+Ozw7Ozo8PkJKT1dhZ29zdnh6ent9gICAg4WHiIiJjY+Pj4+NjIiHh4iJiouLiouIhoF+fXt5d3d4eHd3d3Z2cWtkWlFGQUJIUlxocXmBiY2PjoyLiomKi4uLjIyLioeAdmpeWVpfZ251dnRycHBwbm5ubm5ubm1qZmRiYWJue4aPkpCPjo6Pj46NjIscHBwcHBwcGxoaGxwcHR0dHx8fICEiIiQlJiYnJicoKSoqLCwsLS0uLS0sLS4uLi4uLi0sKysqKioqKiopKCgoKCgoKCcnKCgnJyYmJiYoKCgoJiYmKCoqKy8zPEdOVl1iZGZlZGNjYF5ZV1NTUE1KRUE7OTg4PT1BRktRV11gYmhqa2loaGVhXFlUUEpGPjo3MzEvLy0rKywsLCwrKy0sKysqKisrKysrKysrKysrKysrKysrKysrLCwsLCwsLCwsLC0tLS0tLSwsLCwsKysqKSkpKSotM0eAenF6d3R3aWlrZ2p1YE1LW1xlZ2ViZF9ne32HgJObo6OdkIqGeFVDSEhFR0hISUhJSUdglZCKjJCZiC85T2Nxf4iMjoyNhHl3dXeRmpqYlWhAR0ZFQUA9RXmZoqWqpp2BMTk7Ozs5NDlmeXt6dnFnX1hQTEdHSElKTlBOUFJOSklGPTRATk5LRUNBPzo3NjQyMjQ3OjdDV11fZGxwcXN1c3Z3cmpoamZWSU1VWlFWWE4xMiw5RT88SUoyOTw4ODEvOUtEMDA3OTQ8OT1RKywxNjkySGVtUlBKcXp2cm9ua2tqamtubXFxdV1KbXJuaWdmZmZmZ2hpa2tsbW1samlqa3B2fISKjY6MjIyLjY2LiYaAfXZtZV1WT0dBPj07PDw8Pj9CRk1WXWZtc3Z3d3Z3eXx8foCBgoWGhoaLjIyNjY2LiIiIiIqLi4qKh4aBfn17eXd4eHh3d3Z1dG5qY1tQRUBDSFFcaHF7g4mNj46Mi4qJiouLi4yMi4qHgHZqX1tdZGtxdXd1cHBwbm5ubm5ubm5tamZkYmFlcH6IkZKQjo6Oj4+OjY2MHBwcHBsbGxobGxscHB0dHh8fHyEjIyQkJCYlJignKCkrKywsLCwsLS4uLi4uLi4uLS0tLCwrKioqKikpKSkpKSgoKCgnJygoKCgnJigoJycoKCcnJycoKikrMDU9RUxSWF5hY2RjZWRhYV5dW1tYVFFMSEVFQ0RJTVBWW19iZGdpaGdkYV5bU09KRUA6NjEtLSwsKysrKyssLCwsLCwsLCwsKysqKioqKysqKioqKioqKioqKioqKisrLCwsLC0tLCwtLS0tLCwrKyoqKyssLCkrKiouN1FkeGRmf4KFgHBwZmZpYk9NTE5NWmdtX1RPTF5ocGqAiZGlqKGdnJJ4VUBJRkhJR0lKSEhIVI6NiouLlIxAOzs8SWd9h4+Oi3t1dnd4lJ6dnpp6QkFGSkM+PlZ+mJ+jpqaefS45PTw8OjU0SmdrbGpmX1ZUUE5LSktKTE5PTk5OTk1LR0E1QVBSUElGRkU/PDk2Ojs7ODc5OUxYXWBlampwdHZ4cFpHRkhKSURER1FKRkhHPjtDMjY8Pzw5OUVDPTk6O0I8PDwzNTwxNzs/YFNLPzw8RltlYlNPWXt4dXJua2pqaWlqbW5xcnNta3Rwa2lnZmZnZ2dpaGtwcnR2dXZ4en2BhoqMjY6Ni4iIhYSBfnt4cm1oYlxZUk1FPzs6PD09Pj9BQ0lSWWJocHR3dnZ2d3l6ent8foGDhISEiImLi4uMi4uJiYmLioqKiYiFgX58enh4eHh4dnZ3dnNvamNYTkU/QkhSXWt0fYOKjo+OjYyKiYqKi4yLi4qJhn93aF9fYmpxdnd3dHJxcG5ubm9ubm9vbWpmZWFjZnKAiZGQj46NjZCOjo2OjRwcHBwbGxsaGhobHB0dHR4fHyAhIiMkJCQmJygoJygpKywsLCwsLC0uLi4uLi4uLi0tLSwsKyoqKiopKSkpKSkoKCgoJycoKCgoKCgoKCcnKCgnJycnJycoJyosNDtAR05SVllcXl5fYWFgYV9fXlxaVlNRUFBQVFdaXl9hY2dmZmJeW1dTTEdBOzUwLSsrKiopKyorLCsrLCwsLCwsLCwsLCsrKioqKisrKioqKioqKioqKioqKiorKywsLCwtLSwsLCwsLCsrKysqKioqKyspKywrME5zeXNseYWIioR9fHZzeXlkVVBbW0tgZ2RiXVtWYGNkfpyer7Otq6Sfl4JHQEZJTE1NTElEQkeBj4mGi5GORDQ+Pj9FXHmGhoR6dHd5e5ecm5yZik4/RUdEQD9ok5ubnZ+jnn0uNjg7Ojg2MTdTX19cXVtUTUlJSEZKTk5OTU1NTEtMTExGQEpSU1ZHREhJRkRAPD1CRkJAPj5EVFhaWltfX2VobnBuZVtUTEI7PDxHU1BWXV1aOC00ODU3OzdCQzs+QjAxO0NTTDhANzY5PE9ZSUQ6OFh1dFxRTHB7eHNvbWtpaWloaWxucXBucHV0b2tpZ2ZmZ2dpamtwdHl9gYGChoiLjY6Pj4+LioeDfXp1cm5saWZjYF5dV1FLQ0A8Ozs9Pj9AQEVLVl5kbHN5eHl5d3h5eXl5ent9gIKCg4SDhYaJioyJiYmJioqLiomIhYF+fHp4d3d4eHZ2dnVzbmlhV01EP0FIVF9sdoCHjI6PjoyLiomKiouMi4uKiYR9cmdgYGhtdXd5eHZycXBubm5vbm5ubmxpaGdkZWp2gouRkI+OjY2Pj46NjY4cHBwcGxsbGhsbGxwdHR0eHx8hIiEiIyQlJyYnKCkpKiorLCwsLCwtLi4uLi4uLS0uLi0sLCsqKioqKSkoKCgoKCgoKCcnKCgoKCgoKCgnJycnJycnJygoKSknJywwNzxDRkpOUVJWWV1fXl9gX2FgYGFeXVtbXF5fX2FjZGVjYl5aVE5JRDw1Mi0rKiopKSopKysqKisrKiwsLCwsLCwsLCwsLCsrKysrKyspKioqKioqKioqKioqKystLSwsLS0sLCsrKysrKysrKikqKioqKSstL0l+eHx+eHd/hH93dnp2cGtmZm9naFlGY3BXV2ZjZGVma3+ZrbCsr7Ksrquhd0M8SEtKR0pFQUFCbY+Hg4SMkmsuOj5AQEBTcoOCdW93eHyTmJiXlpNhQ0hIRUFEeZWdm5eYoJtxLTY4OTk6OTczPlFWVVdWUk5KSUlHR0pNTU5MTU5KSkhJS05cZWBVRUVFR0xMSkZEU2JTQ0NCPU9XVVRQS0dJT1NZW1pcWEs6OklMUk9LSVJYSz06LjU/OTo4PkI6ODYuKCosNDQoOTc1Nz9IPEI+OzxofYJVTV+EfHVycG1ramdnaGlpbnRvb3Z0c3BtamhoZ2hqa29zeHyAhYmNj4+Qj5CPjoyKh4R+dnBsZ2ZjX2BhX11dWlVPSEE+PDw9PT4/QEJFT1deaHB2e318e3h4enl5eXp8fn+Bg4SDgoaHiImIjIyLiYmMjIqJh4SBfnt6eHd3eHh2dnZ1cW1nXlVMQz9BSVVhbXiBiI2Pjo2LiomJiYqLjIqKioiDeW9lYWNqb3V4enhzcXFwb25ub29tbm1ramloZWZteYaMkJGQj46NjY6Pj4+NHBwcHBsbGxsbGxscHR0eHx8gIiMiIyMkJScmJygpKSorLCwtLCwsLS4uLi4uLi0tLi4tLCwrKioqKikpKCgoKCgoKCgnJygoKCgoKCgoJycnJycnJycnJygoJycoKS4yNjpAQ0dJTE1TVVdYXF9hYWRlZGNhYWFgYWRlY2FgXVlSTUlDOzItKikoKScqKioqKysrKysrLCwsLCwsLCwsLCwsLCwrKysrKysrLCsrKioqKioqKioqKissLS0tLS0tLCwrKysrKysrKyopKSkpKSkrLD95iWp8e3x5gIqAdXJ8fXlwdnl+dmpcUVhrZ1NHZHd5enmCj6itqrO5tLe5sZtoN0lIR0ZGQ0NDPVeOiYF9hIuSUzRAPz1AQk5wg3RxeHp+j5SUl5eWeEhITEZCR4GYnZOMlp+cYiw2OTk6Ojg1MjE8S1FRU1FOTUxHR0dITUpMS01NSUdFRUtTV1dWTUpGR0lMUVJQTVFeXVBNQzlIVlJNRD05NjY2Ojk5OTUxMDpGTlFBPUFERDg/PjxIST45P0RFOTU1MzUvJDI8PUNBNjtDRD46ODc4RU5NRU1ob318eHVwbmtoZ2doaW9ycXV1dXNwbmxsbG5vcHN2e4CDh42RkpOUkpKQjoyJhHx1bmdjYGFfXl5eX15cW1lUTUc/PDo7PDw9PkBESVFbYWp2fIGAf357eXl6enp7e3+Ag4eFg4GChYaGiImKioqLi4uLiYeEgH17eXh3d3h4dnZ1c3BsZl1USkE+QkpVY3B7gomNj46NioqJiYmKi4yKiomHgnhtY15iaXB1eHl2c3Bwb29ubG1ubm9ta2poZ2ZncH2HjZCPjo6Oj4+PjYuLixwcHBwbGxsbHBwcHB0eHyAgISEjJCQkJSUmJygoKSkqKysrLC0tLi4uLi4uLy8tLS0tLSwsKyoqKiopKSgnJycoKCgoJycoKCgoKCgoKCgoKCgnJycnJiYmKCcnKCgoKS0wMzY6PUFBR0tMT1JWV1xeYmJjY2NjY2FhYV9bV1FNSEE7My4pJygoKSkoKCorKisrKiorKywtLS0tLS0tLS0tLS0tLS0sKysrLCwqKioqKioqKisrKysrLC0tLS0sLC0tKysrKysrKioqKCgoKSkpKjdrkXFYb3d6goaNhn6AgIR8bnZzcHdwaGNWY31vRzRYdnx6hY+co663uru7u7mtikJCRUxKREJDRD5GfoyCfX+FkYg9OD8+PkVDYYJ3c3l/foWIiJOWlolPTklGQUqDmp6bmpudml4rNjc3OTk5NzMwLThHTk9PTUtLSUdHRktLTUtNTUpIRkNGU01LTlJTSUlJSlFWV1thaVlMSkI5RVZTSkI+QEVIQDoyLy8tLTA3Q0U3MjIzOjs+Qz5ETUs/PTlCSDk2ODY0NDc5QUM5NDM8QT07OTo6PTw3NDg+QEJKT1hjbm1saWdnaWlsaWx0dnV0dHFycnR2dnh8gIOIipCSlJOVlJGPjImEfnVtZ2JeW1tdXV5eXl1cXFpYUk1IQDs6Ojo7PT1ARUlTW2ZveYCFhYKAfn17eXp6e3t9f4OFiIaFgoKDg4aIi4uMi4qMi4mHhIB7eXd2d3d2d3Z1dXVwa2VcUkdAP0NLWWdzfYSKjo+OjIqKiYmJioqKioqJh391aV1dYWpvdXh4dXNxcHBubWxtbW9vbmxsamlnanN+iI+Rj42MjoyMjY6Njo4cHBwcGxsbGxwcHBwdHh8gICEhIyQkJCUlJicoKCkpKisrLCwtLi4uLi4uLi8vLS0tLS0sLCsqKioqKSkoJycnKCgoKCcnKCgoKCgoKCgpKSgoJycnJyYmJicnJycnJygrKiwuMDE1Njs/QENHTFBUWl1eX2BgYGBdXFpWUUxHQTozLispJygpKCgoKSkqKysqKisrLCwsLS0tLS0tLS0tLS0tLS0tLCsrKywsKysqKioqKiorKysrKywtLS0tLCwtLSwsLCwrKyoqKigpKSkpKixHb2hXWXF1fImGh4OLjIN9gn+Ae3F1bHBtWEVkc2pSR11mdIKPkJiotbu7vLu6tZ5dNz5BRUJDQz9AQ2SRiH5+gYqXZjFAQD5DSHGAeHh6f357en+MlZePW0BFR0hKgpudnJ6ampRRMDc6OTo5ODYzLy4wO0VNT05NS0lHR0dFS01LS0pIRUZDRFhRTE5TVEhJSUtNVV9yd29kXUtCPU1bUkhHTVFSUEg/MzAvMDAwMjIvLzAzMjU7O0Y7O0VCOTM4PkE9Nzk3OTo+PjgyMzYzQk89NjU4OTo8Ozk9Q0I5OkJFSFJdYWFnaWhqb290eXp5eXh2eHp8foCDh4mMjpCSk5WTk5CNiIN7c2tjXl1cW1haXFxcXV1cXFxZVlJLRT07Ojk6Ozw8PkVKUl9ncXyCh4eFg4B/fHt6e3x8f4OFiYqIhoOBgYGDhomLjI2NjIuIhoJ+enh2dnd3dnZ2dXR0b2lkW09GQD9FTVpmdH6Fi46PjYqJiYmJiYqKioqKiIR8cmVcWV5nbnN3dnJxcHBwbm1sbW1vbm5tbGppaG12gYyQkY+NjIuQkpOUkpCLHR0cHBwcHBwcHBwdHh8fICEiIiQkJSUmJicnKCoqKiorKyotLi4uLi4uLi4uLi4uLS0tLCwrKiopKSkpKCgoKCgoKCgoKCgoKCgoKCcnJycnJygoJycmJicnJycnJyYmKCgoKCsrKi0xNDY4PkJHTE9RVVZWWVlXVVJOS0VAODMpKScnKCgnKSgqKikqKiwsLCstLSwtLi4uLi4uLS0tLS0tLS0tLSwsKyssLCwsKyorKysrKyssLC0tLS0tLS0tLC0sLC4uMDYrKSsrKiopKiw1WV5jd39ea36IgHiBiIuBfHx7e3Ftdm94dVxBVnB9dWNZXWJ7ipGTo6+6vLu7urincDA2PUJBREVERENOg5CGfn2Cko5IMT9CS21+fHuAgIaJiYeJjpSVjWU/Q0NFUIGXnJyfm5mSQDM7Ozo6Ojk4NjMvLjA9SkxNTExMSkpHSUtNSURDQUVERUVYW01PVFNCSElLTU5bbW1sZ2ZJP0RbXlJQVldXVktAODIuKiktLi4uLy4uLzE0Nzk4NDg1Mi4xO0E+Ozs2OTo7PDk4MTo6MTQ0NzI4QklHPjc1PkNERkM+OT9QWFtZXGRtcXR2eX1+fX19foGDhIeKjIyMjo6QkpSSkIyHgntwZ11XWFlbXFxdXVxcXFxcXFtbV1VQSkQ8Ojk5Ojs8PEBHS1Nda3Z/hYmJiYaDf318ent8e4CEhoqLioaDgYCBhYSHjI2MjYuMiYWCfXp3dXV2dnZ2dnZ0cm1nYVlPRT89RVFea3aChouOjo2KiYmHh4iJioqKioiCeG5fVlVbYmxzdnZ0cXBvbm1ra2xtb3Bwb21rampveoWOkZGOjY+RkJCPj42LiR0dHBwcHBwcHBwcHR8fHyAhIiIkJCUlJiYnJygpKSoqKysqLS4uLi4uLi4uLi4uLi0tLSwsKyoqKSkpKSgoKCgoKCgoKCgoKCgoKCgoKCcnJycoKCcnJiYnJycnJycmJigoKCgpKSgoKywuMjU3Oj5CRElKSk1OS0hHQ0A6MiwpKCgnJygoJykpKisqKiosLC0tLS0sLS4uLi4uLi0tLS0tLS0tLS0sLCwsLCwsLCwrLCwrKysrLCwtLS0tLS0tLS0tLS0uLjRTQCgrKyoqKSoySFJuioeKcWltfo2ThYWIg3t7gH92cHJtTT9VQmJ4f3h8blhfaoCMmJ+osru7u7q6pnQ0Nzw/P0NFQ0NDRmOQjYF5eoOQiEQtQ1yDfnx9goWFiIyMjo+SkpB6SUZBRkx/lpqanJyZlUk1PDk6Ojo6OTU0Mi4rNEVMT05OS0lKTExNS0dMUFJQS0RBRV1PTlRTP0VISk1OUV5iYF5eTUtSXV1ZXF9cV1BFPTg2LSYnKisrLS0tLS0wMTI1QEE+PDxGR0hCRj88Nzk3NzkzNDU2MzEvMjYxMzc6OT88Oj48P0VLSkdBNz1OaWBIXXh8en2Bg4SFhYaIiYqLiouMjI6Oj46OjIiAeGxjVk5MUFRYWVtbXFxbW1tbXFxbWVdVUEpDOzo5ODk7PD9CRU1XYWpzf4aLi4qIg398e3p7e3yAhIiLi4qJhYGAgYKDhoyMjo6Mi4iEf3x5dnR0dnZ1dXV1dHJtZ2BYS0E8PUVRX2x4g4mMjo6NiomJiYmIiYqKioqHf3dsXVNTWmNtdHd1c3Fwb21sa2tsbW9wcXBvbGttdH2Jj5COkJSQjYyKiYmIiIgcHBwcGxsbHB0dHh8gICAhISIiJCQlJCUnKCgqKioqKisrLC4uLi4uLi4vLy0tLS0tLSwrLCwqKikoKSknJycnKCgoKCgoKCgnJycnJycnJycnKCgoJycnJycnJycnJycpKSkpKSkpKSkpKiwvMDM1Nzo/QUFBQkE9OzYyLCknJicnKCgpKSkpKSorKywtLCssLC0sLS4uLi4uLy8vLy8vLS0tLS0tLS0tLSwsLCwsLCwsLCwsLCwsLS0tLS0tLS0tLS0rKywvMS0qKioqKissQVhfe494g35SSlRljYZ/h4eCiIB0dHdzdXBiVD5MgXV0gIdyWF9vg5Cepa60ubu6uaNpMTc6PD5BQUBARkNEbZGGfXt9gIqJOzJng4B9gIWHh4mKjo+Pj5COg1ZLRERLfZKWmJuampNQNTk6Ozw7Ozo5NDEuLC9AS1BQTEpISExMTVBRUVFQTUc6MDFhVk1RTTQ9Q0ZHSlZdYmFeXmJiZGRkZGNgWlJFPDk3Ny4nJykqKisrKywsLjAwMTk9QUhLRkZPT0tFQjxFPkZPUkY/OTYxNDMzNDUzNTM4Q0Y9QEE5OkBHS0lHPzdRYVZedIOGiouKjIyMjYyLiomIh4mJiYeGhX93bmRWTUZGTFNWWVlZWlpaW1tbW1tbWlpXVE9JQTo6OTg5Ozw9QUpYXmFsd4CGiouLiYSAfXp6eXt9gYSHiouLiIaCgYGCgYOHiYyNjIuGhH98eHZ0dHV1dXV1dXRxbGZdVUlAOj1FUV9teoWLjY6OjIqIiIeHh4iKioqJhX53aVxRU1plbnV3dnRycW9ubGtrbG1ub3Bwbm1rbXWCiI+QkpWSjouJhoeHhYiIHBwcHBwcHB0eHh4fICAhISEiIiQkJSQlJygoKisrKiorKy4uLi4uLi4uLy8tLS0tLS0sKysrKiopKCkpJycnJygoKCgoKCgoKCgnJycnJycnJygoKCgnJycnJycnJycnKCgoKCkpKSkqKiopKiwtLi4xMzY3Nzc2Mi8sKSgoKCgnJygoKSkpKSorKystLSwsLS0uLi8vLi4vMC8vLy8vLy0tLS0tLS0tLS0tLCwsLCwsLCwsLCwsLC0tLS0tLS4uLS0tLi0sLSwsLCoqKystOE9ReYeAVGJbT0pNaZuZiYaNkZCOfHR5fHqAeW9IP154eHWEhm5TY3GBmKaprLC3urWaTi85Oj4+PUBBPkFCQkt7jIN9enh/i4FAd4N9e4GHh4KGi46PkJGRkZJtTkxFSXyQl5aXl5aSVTU5Ozs8Ozs5NzQzLi0sOUlPU1ZXV1dXVlNRWVtYT0IzLCgsXV5PUEosLzQ5P1RbYGVfYGpsbWhpaWlqYFRGPzo6OTkyKSgsKisrKioqKSotLi4yPUlLTVBOWE9JTEhBRk1RVk5CLzI2NC8vMTQ2MC84S0A7ODVOVElBOTlAREdBOT1RW1Rri5GPjo2Ni4qJhoaEgH59fX18eXhvamBWTEZER0tRVFhYV1hYWFlZWVlaWlpaVlJMRkE6Ojk4OTs8P0FMVFdgbHeCh4qLioiDf316eXt7fYGEh4uMi4mGhYKAgYCDhYiJioyJh4N+eXd2dXN1dXV1dHR0cWtlXFRJQDs+RlJhbnuGi42OjouJiIiHh4eIioqKiYV9c2ZYUFNbZ3F2d3VzcnBvbmxrbG1tbnBxcHBubXF5gYyUl5SQjYuLh4aHh4iKih0dHR0dHR0dHR0fHyAgISEhIiMkIyQlJignKCkrKysrLCwuLi8vLy8vLy8vLS0tLSwsLSwrKioqKSkpKSgoKCgoKCgoKCgoKCcnJycmJicnJycoKCgoJycnJycnJycnJygoKCgoKCkpKSopKSoqKioqKiwsLS0tLSsqKSgnJiYoKCgoKCkpKSoqKywsLC0uLi4uLy8uLzAwMTExMS8vLy8vLS4uLy8uLi0tLS0tLS0tLCwsLCwsLCwtLS0tLi4uLi4uLi4uLi0tKysrKywtMEpLUIWPYk1IRUpTaJCuqaGbl6CYkIyEdnZvcGtvTzo7SGKEioR+aVZceY+fpaenqbOpfDcyOTw9PDw/QUBCPj9CUYOKgnt7doCNd4N8d3yDhoF8hIqMjJGSk5GQe1JPR0l4j5WTlJSTkGA3PDs7PD09Ojg0MS8rLThYbXZ1b2phXVlWX2ViXEs0JiUlJ1RjTExILS4uMFRgZmJhZXhxcGlnamttbFxJQj88PT09Ni8xMjIxMC4pKCUnKy4uLzlBTE9JVmBRSkY/R0tMRUVKRjEjMDkzLS4vMCwvP014f19DPEVQVFNMPTk6PT1BODxNWGqQk46NioiGhYF8d3NycnFzc3Fva2VcVEpGRUhMUlRYWFhYWVlaWlpaWVlbWlZRTUdBPDk4OTo8PT5ESVBZYm95goaJjIqIg4B9enh6en2DhYmMi4qJiISDgYCBgoKFiIuLi4aDfXh4dnN0dXV1dHR0c3BqZFtTRz89PkhUY3B/h4yOjYuJiIaGhoeIiYqKioiDe3FjV1FXYGpydnZ1cnJwb25tbW1tbW5xcXFtbW90fo6WlI6MiYmKioyMjYyMi4odHR0dHR0dHR4eHyAhISEhIiMkJCQlJSYnKCkpKSkrKywsLS0uLi8vLy8uLi0tLS0sLCwrKioqKikpKSkoKCgoKCgoKCgoKCgoKCcnJicpKCcnKCgoKCcnJycnJycnJycoKCgoKCgoKCkqKSkqKikpKSkpKSoqKioqKSkoKCkoKCgoKCgpKSkqKywsLC0uLy8vLy8vLi8wMDExMTExLzAwLy8uLi8vLi4tLS0tLS0tLSwsLi4uLi4uLS0uLi4uLy8uLi4uLi4tLSwsKystLjVWSWiJgUtHRVhyhpehp62trKeim4CGi31va21zcl0/PzgzR213gn5ZXXCAkp6koZ2fik80Ozs6Ojo4Ozo8Pz5CTU9kiYV7eXd5hI6JfHh+hYGAfoiNiIyQkpCLiYNTSUhPcIuRlJSSkYxqOjw7PTw9PDg1NDAwLi5bgIR9c29pW1dVVFpdXVhFLCYpKCpIbFVMSi8sL1Rra2tnbHt5b2poZWdrbWVcUkpFQUBCPzw5NzY4NjMwKiMjJCgsLS4vOEFGUVtgUktMVFFaY19XUUk1ISs8PDEuMDAuKyo8dpGPlIdlST9KUFBRTjw3QkRCOkNXaIqQioWCfHt2cWxpaWlrbG5ubWhjXFNKRkZJTVFVWVlYWFlZWlpaWllZWVhWUUtFQDo5ODo7PD1BRktUXGRxeoKGiYuJh4OAfHl6ent/g4WKjIuKiIeHh4SBgYGDhIWIiomGgn14d3V0dXNzdHR0dHJvamRcUkc/PkNNWWVyf4eMjo2LiYiHh4aHiImKioqIg3pvYlZTWGBqc3l3dXJxcG9ubW1tbW1ucHFwb21tfZSYk42JhoiJjIyOjY2Li4yMHBweHh4eHx8gICEhIiIiIiMkJSUlJiYnKCgnKSoqKissLCwsLi4uLi8vLi0tLS0tLCsqKSoqKCgpKSkpKSkpKSkpKSkoKCgoKCgpKiwpJignJygoKCgoKCcnJygnJycnKCgoKCgoKCkoKSkpKSkqKioqKSkoKSkpKSgoKikpKCgpKSgoKSkqKywuLi4uLy8uLy8xMTExMTExMTExMjIxMTExLy8vLy8uLS0tLS0tLi4tLS0tLC0uLi4tLi4uLi4uLi4uLi4uLS0tLS0tLi8/XW5/bm5HPmGOmp+opqGjo6uqqqmOd3+Bf3h8gXpiW0tIQ0RKcXl9b15qd4iTnJmSimxEOj06PD1BQ0M/PTw+QkhKUm2If3h1dnyFinp2e4F/gXmFjX90fZGTkZKQaEVJUWeEkJOOiI6LdTw5Ojw9Ozo5NDQvLitLe356dnJwZV9YUUpIQ0RHQjQwMC0uQWxaTUwwMUVqbXJveIJ8dm5pZmNobG9taF5YVFBPSUE9PDk8OTg2LCUiIyQmKi4uLS4yRF5laFxQVlhkbGlubGlkWkc4ODQ2Ly0tNDw/RVl2eoWRkodvUURMVFVSPjk9REI4PVdviod7eHNva2hnZmdoamxsbW9pY1xTS0dGSU1SU1hYWFhYWVpaWlpbWVtYVVBKRD46OTg5Ojs8QUdMU1xnc3yChomKiIWAf3p5eXd7f4KGioyLioiIh4aGg4OBgoKEhoaGhYN9eXZ0cnN0dHR0dHNvbWdjW1FHP0BGUFxodX+Ijo6NjYuHhoaGh4iJioqJh4J4bWBVVFxkbnR3dHRxcG9ubW1tbW1tbnFxcG1whpeXko2JhoaHiYuNjYyLiYuOkh4eHh4eHh8fICAhISIiIiIhIiUlJSYmJygoKSoqKiorLCwsLC4uLi4vLy4tLS0tLSsqKikqKikpKSkpKSkpKSkpKSkpKCgoKCkpKSkuOSsnJycoKCgoKCgnJycnJycnJygoKCgoKCgpKCkpKSkpKioqKikpKCkpKSkpKSkpKSgpKSkpKSoqKy0sLC8vLi8wMTAwMTExMTExMTExMTIyMjIxMS8vLy8vLi0tLS0tLS4uLS0tLSwtLi4uLi4uLi4uLi4uLi4vLy4uLS0tLS4vRXR6ZUNSQliNqKWko6aopaOtr66ropGQjYaEhYl3bGpgZVtlV193e3tlZnJ7ho6OiXRKQjpBPj09QklKT0pEQj8/SFFScYl7d3V3fIeCc3F5e3drbod3YnOPmJqalXtFQ01ehpGOhHeMjHpANjg7Ozk2MjExMCw4cX15d3V1a2BWU1RNRUE6Ozs8OTY0ND5oWlBQMzlmanF0gYiDfXpyb3FzbGNmdHhvZmVfWFFKRUA+QD08NyokJCQkJi0tLiwpLEdkZWdeW1tkcXmFhoJ9e353YTwwNC4rNkZGRD9DTExeYFxzfH17W0ZHTEZHQDc/QD1BW3OGeXBuamhnZ2dnaGpsbm1ta2ZdVU5HSEtPUlVWVlhYWFhZWlpaWlpaWFVQSkQ+Ojk4OTo7PEJHTlZfanR9goaJioiEgH15eHh4fICEiIqLiomIh4eHhYOCgIGDg4SDhIOEf3l2dHNyc3N0c3Nyb21mYVlPRD9BR1JeaneBiY6OjouKh4aGhoeIiYqKiYeAdmpdVFRcZW50d3RzcHBvbGxubm1tbW5wcm13j5eUj4uJh4aFhoiKi4uLi42PkY4eHh4eIB8fHyEhIiIjIyMjIiMkJCUnJycoKCkpKiorLCwtLS0uLi4uLy8uLS0tLCwsKyoqKiopKSkpKSkpKSkpKSkpKSgoKCgoKCgoJycnJycnKCgoKCgoKCgpKSgoJycoKCgoKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKCkpKikqKisrLC0uLC0uLjAwMTExMTIyMjIyMjEyMTExMTExMTEwLy8vLy8uLi4tLi4uLi0tLS0tLi4tLi4uLi8vLy8uLi4uLi4tLS0tLCwuL0RtTEJARVGGqK2qqaCgoaGerK+vpZ2gopuRkpOPdm5hZW5paGZlcICCbGBudn2DhHlULjQ+RD4/QD9AQElFRE0+OkFGT0l4h312c3l6goN1dHRwV2F9d217kJSVmJiOVUJFZI+al4tyhY1+QTc3OTk4NDMyLzAuR3uLeXB0cG9tYHCBc1s6RkA6Ozs7Ojg9XVxQU0Feam54iYqDfn96en18bl9fXml3dG1lYVlYVVFLR0RCPjInIyIkIyoxLi4rKitLXl9hVFxZYWBte3VzeXp/enJqVDUwND4/PTk3OD5RbGtiXV1jc2lbTkpGT1BJPz1APkFbeIJybGtpaGdmZmhqbG1tbmtjXFZOTElLT1NUVlZXV1hYWVlZWVpaWVdVUEhCPTo4Nzo6Oj1DSVBYYWt2foKGioqHg397dnZ3eX2BhYmLi4qJh4iIhoeFhYKAgYOCg4OEg396d3NycnNycnJxcHBtZV5YTkM/Q0pWYWx5hIuOj46MiYeGhoaHiImKioqGfnRnXFRXXmdxdnZ0cm9tbG1tbW1tbW1vbW+Ck5WQjoyLioqJiIiLi4uLjo2Nj46NHh4fHx8gICAhISIiIyMjIyIjJSUmJicoKCgpKSoqKywsLS0tLi4uLi8vLi0tLSwsLCsqKioqKSkpKSkpKSkpKSkpKSkoKCgoKCgoKCcnJycnJygoKCgoKCgoKSkoKCcnKCgoKCkpKSkpKSkpKiopKSkpKSkpKSkpKSkpKSgpKysqKisrLCwuLi0vLy8wMDExMTEyMjIyMjIxMjQyMjIyMjExMC8vLy8vLi4uLi4uLi4tLS0tLS4uLi4uLi4vLy8vLi4uLi4uLi0tLSwsLi89VEdDRFR0m7Oyo6aooqSlo6qnpZ6XmKKhlZOQinFkY2RpbWdma3V5dHxga3Z9enxqPCwyOT8+P0A/Pz9CRkhKQTw+QUpNTHmHfXV2eoGGiHhsW1Zcd4CGj5GMi5CTjWNDQ0+MoKGWXoKPgT83ODk3Nzc0NDU2Nk2Uj4l+cYGfl5WGf36AUDtERDw7Ojw8O1NcTldlcXN/iYiEgIGDg4V4Z2BfXmBiYl9hYl1YVVNST01IRjwpJCMlJCUuMi8uKysyTlxfV0dRW11dYW16eXd3dXJoaWpaSkY+LjY7NSsqNFSCio+LiX5nXVNOUFZOTE0+OD0+RVqDfnNpZ2VmaGZpamttbW1qZl9YUE1LTVFTVFZWVlZYWFlZWVlaWlhWU05HQT06Ojk6Ojs+REpRWWNtd36EiImJh4N9eXZ2d3l9gYWJi4uKiYeIiIaGhIWBgIGDf4GDgoF/e3V0c3N0dHNzcnFwbWVeVkxDP0RLWGNue4WMjo+OjImHhoaGh4iJioqIhHxyZlpTWWBrc3d2dHBwb25sbW5ubGxtbXKKlpKMjIqJiIqLiYeHh4mNjo+Ojo2NjB8fICAgICEiIiIiIiMjJCQkJCcnKCcoKCgqKiorKywsLS0uLi4uLi4tLS4uLCwrKywrKysqKikpKSkqKikpKSkpKSkpKSkoKCgoKCgoKCgoJyYoKCgoJycoKCgoKCgnJycoKCcoKCkpKSkpKSkpKSkpKSkpKioqKioqKSgqKioqLC0sLS0uLi8wMC8uMDAyMDExMzMzMzIyMjQzMzMzMzMxMTAwMDAwLy4uLy8uLi0tLi0tLS0uLi0uLi4uLi4uLi4uLi4uLi4uLS0tKy8vPkZGQ05xhKaysZiara6xsra3r6yjmZKYnZaQfnZpW29qZGVobnZ6goJ7amZye3t4XzEsMDE6Q0REQT49PDlDSkg6Oj1ITUNShoR8eXx8g46Ja0hRVGuAkp2Yk4+LiH5tSkNEdpmgoYxzk3Y/Ojs7PD4/QD5DQjJWnZ2goId9k5eYhG9wa1UyNz9EPzs8PTxKX11ncG99g4OGhoWKkIlyY2JkZmNlYl5VTlRUVVJSUFBOS0MvJSMkJCYrNDQyLy01RFBeWkdDSVddXFxhcn55cWhpbWlldmhIOi0wMDY0Li80UoGLioVhXnJ8dmlYS0dDRUdCQUBBbYSBcWpoaGZnaWpsbWxvbGdgWVJNTE5RU1RWVlZWVlhaWlpbWlpaV1NNRkA9Ozo6OTs+PkRMUVplb3l+hIeHhoWBfHd2dnh7fYGGiouLiomHiIaGhYaFgoCBgICCg4GCf3x3c3RycnJzc3NwcG1kXVRKQ0FFTlplcn2IjY+Qj4yKiYiHh4iIiYuLh4N8cWNYU1pia3N1dXNwbm5tbmxtbWttbHaPmJKNiYqKi4qLiIaFhoqMj4+Ojo+PjowgICAgICAhIiIiIiIjIyUlJSUnJygoKCgoKioqKyssLC0tLi4uLi4uLS0tLSwsKyssKysrKiopKSkpKiopKSkpKSkpKSkpKCgoKCgoKCgoKCcmKCgoKCgoKCkoKCgoJycnKCgnKCgpKSkpKSkpKSkpKSkpKSoqKioqKisqKioqKi0tLS0uLi8vMDAvMDAxMjMyMjMzMzM1NTMzNDQzMzMzMTEwMDAwMC8vLy8vLi4uLi4uLi0uLi4tLi4uLi4uLi4uLi4uLi4uLi0tLSsuMDlBRU9whpCwtbWejKqvs7W5uLOtoJiSlZqXlHt6amJpYGFjc3R8gIaRkH5SYnB4dVgsKCsxNzxAQUJAPj48O0FBPD07QUtIOVqKhn17e4CGi4FFSVZfeIqTmZqXlYl0cVFERVeImZ2WdoJKQkJDREZEQ0A9PTkybqmlopuQfoiFfHlnW0lBNzU0OD9AOzw6Q2Foa3F2hIWHiIySlYBlYGdoampoZGReTTs9TFJQUFFQTUk+KiIiJScqMDU2NDI1RVFQUkZARkhQW1xfW2JuaGZjWFFSWWNpSzMwMS4vMi8sLThvhICBgHJ2gYSGhoV4TT1GQj9DRUxic3htamdpZ2hqbG5ub2pnYFlST01OUVRVVlZWVlZYWlpbXFxaWVZTTUZAPDo7Ozo8QENITVRcZ3B6f4SHh4aDf3x3d3d4e32BhoqLi4mIh4iGhoeGhYKAf4CAgYGCgoB9eHRzc3NydHRzcXBtZF1TR0FBR1BeanWAiY6PkI+MiomJiIeIiImKioeDem5gVVZcZG1zdXVzcG5tbG1sbGtuZ3eQl5GPjIqKi4uKioeEh4qOkI+Pjo6Pj46LIiEiIiEhIiIjIyMjIyMkJCQkJycnJygoKCoqKisrLCwtLS4uLi4uLi0tLCwsLCwsLCsrKyopKSkpKSoqKSkpKSoqKiopKSkpKCgoKCgoKCgnJicnJycoKCkpKCgoKCcnJycnJygoKSkpKSkpKSkpKSkpKSkqKioqKiorKisrLC4sLS0uLi8vMDExMTExMTIzMzI0NDMzNDQ0NDQ0MzMzMzIyMTEwMDAwMDAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLS0tLSwsLC88RFV0hY6ls7S3oX+coaulqamnqKObkouRkol8eHFnZ2VtbnF0f4aLmqCbU1JqdXRSJygrLjg2OklEQT89PDo5PTo9Oz9HTURGe4+Hf3t5gIWLfEdPWHqKjI6Rk5OQgXlhRkNEaY2ZmIpfREE/PT9APTk6N1JgQoWuopWKiYqOcWhpWlFDODY0MzI0PkM/PEFXa250eoKFi4+amH9pZ2ZmaW1wbWtmXEIwMD5MUlFSU1JKNyYiIicrLDM2NTk6QEtST0Q3PEFJUFRXV11gY1lcXEg9NzI6R1dPNi8vMjEvLi5JX2d4e3l7fH6CgHdrb2JUPkNIRUVHRVBQU15jZ2doa2xsbW9sZ2FdVE9NTlJVVlZWVVdZWVlaXF1cXFpVUkxGQT49PT08PkJHTFBXYGlyeoCEh4eGg355dnh4eXx9gYaJi4uIh4aHhoaGh4WBgICAf4GBgYGBfXh0cXNyc3R0cnFsamRdUUU/QkhUYGt4goqNj4+Oi4qJiIiIiYmIiYmGgnhtXlZVXWZvdHVzcXBubm1qaWtqaH6Wl5GNiouMjImJiYmJi46Pj5CPj4+Pj4+MiSIhISEiIiIiIyMjIyMjJCQkJCcnJycoKCgqKiorKywsLS0uLi4uLi4tLSwsLCwsLCwrKysqKSkpKSkqKikpKSkqKioqKSkpKSgoKCgoKCgoJyYnJycnJycnJygoKCgnJycnJycoKCkpKSkpKSkpKSkpKSkpKioqKioqKyorKywtLS0uLi8vMDAxMTExMTIzMjM0NDQ0NDQ0NTU0NDMzMzMyMjExMDAwMDAwLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi0tLi4tLS0tLS0sLCwvP1FvhomYrqalsp1wfo+mn5qkrKmgmY6FjZOKiHpzbGpja3F1dH2FjJ+prW5KZWpoTCorJiwuPk1LSkJBQT88Oz47Oz0+REhGRnd/jYh+e3t9g411SlJ2h4WEgH+HkI55ck5GQ0tzjY9yTEVAPz0+PTw6OjVHZFiBqZuXg36CgGZbUE1NQzY2NDMxMjY+SUhCRWBvc3iAiI2Wk39zcWtramtscHNwalg5Li8zQk9RUlJQQS0lJCcrLTA7P0JBQkZHSExCODk+SE9RTlZZWVhPQzMsLjEzMzRCT086NzYxODs2Tj08U3B1eXp/dWJda3FxhW0+TEU+SEhLTU5RVVZfZGlsbm5ua2diX1ZRT09TVlZWVlVXWVlZWlxdXV1ZV1JMRkFAPz4/QEJFSk5SW2JrdHuAgoWFhIF9eXZ3d3l8f4OHioqKiIeGh4aGh4eFhIGAf36AgIGAf355c3Nyc3Rzc3NybmhhWlFFP0JLWGNueYSKjY+PjouJiIiIiImKiYiIhYF3bFxTV19ocHR1c3FwbmxrbWppbIKWlo+Ni4uNjY2JiYmKi5CRj4+Qj4+Pj4+PjIkiIiMjIyMiIyUlJCQkJCQlJSUnJycnKCgoKioqKyssLC0tLS0uLi4uLS0sLC0tLCwsKysrKikpKSoqKioqKikpKiopKSkpKSgoKCgoJycnJycmKCgnJycnJygoKCgoJycnJicnKCgpKSkpKSkpKSoqKioqKioqKioqKyoqKiwtLS0uLi8vMDAxMDAxMTEzMjQ1NTY2NTQ0NDY2NTQ0NDMzMjIyMjExMTAwMC8vLi4uLi4uLi4uLi4tLi0tLS4uLi4uLi0tLCwsLC0tLS0sMENlgI6LoamanauXcHKRpa6urKynnpiPhIeTjoKAg31waWZucnN7g4STqa6KR19eXUcuLjMuLTZHOj5GQ0JAPD49PDw8PUJLTEh6cnqKh4B8e4CFimxNY3uAeW5ka32NjYJfRURCTGNwVEZFQT49PT07OjgxNFpqgaWTj4B5dm1lV0xDQkE3NDMzNDpDS1NTU0VHT1VYXHOFh3yAgHpxbWxvcHZ3cWlTNC0wMDVIUlRRSDgtKissLjI+SU1OT09OR0VGOjg6PkJKT09UU0lALStBYHqNm6OmpaWjlH5rXVdGMj1ANT9Zb3N5empcYXmMjoeGSkNHPEVLRVVjWFZVU1daX2Vra21tZ19YVFJRVVZVVlZVVlhZWVpcW1tbWFVPTEZCQUBAQEJESExSVlxkbXV8gIKEhIKAe3d2d3Z7fH+DiIqJiYeGhoeHh4eGhYOCgH5+f35+f39+eXVzc3NzdHNycWxmX1hPRT5ETVplcX2Fi42Oj4+MiomJh4iIiYmIh4R+dGdaU1dfaXJ0dXNwb2xsa2xqaoSXlZGOjI2NjoyMiYmJjZGQkZCQkI+PkJCQkIyJIyMjIyMjIyQlJSQkJSUlJiYmJycnJygoKCoqKisrLCwtLS0tLS0tLS0tLCwsLCwsLCsrKyopKSkqKioqKiopKSkpKSkpKSkoKCgoKCcnJycnJigoJycnJycoKCgoKCcnKScnJygoKSkpKSkpKSkqKioqKioqKioqKisqKiosLS0uLi8vMDAxMTExMzMzMzMzNTU2NjY2NTU2NjU0NDQzMzIyMjIxMTEwMDAvLy8vLi4vLi4uLi4uLS4tLCwtLS0tLS0sLCsrLCwtLS0tLDBKeJGZk4+SkZmjnIiInamytqqNmJ2YjoSEkIpze3h0dnNpcXd8hIyMl6mwo1JVV1ZAKitBQzIwMDM3REFAQD0/PD09Ozs/REpHe3Zqf46Gf3x6f4aIYFJmbWNeXl5rgo2Jfkg/Q0FBQkdIREI/PT47OTUyMjVUZIKln4B8dmlfVVRMRD84MzQ7P0dSVllbWFlZTUlHSU9VXWl6ioyGeGlocnl+f3ptRi4sMDMxN0lPSTwvLi0uMTJHWVtaXV5ZVE9HPDc2PEFGSk1OSz0yKTdYeY+mtru7u7u6u7q1rqqZaC8xNTQwP1hrdX2Ae3eChoJzfG1iQUpFSE1ObnVoYmRbVlZXXV1kZGRhW1VUU1VWVVZWVFVYWVlaW11cXFhVUUxHQ0JBQkJERktPVFhfZm92fIGChIOAfXl2dXd4e3yBhYmLiYmHhoaHh4eGhoaFg4B/fn5/fn5+f3p1cXFyc3Nzc3BsZl5WTUNARVFdZ3N+houNjo+Oi4qJiIiIiImJiYeDfHNmWVRbY2tycnRyb3Bta2pra4mYlI+Li4yNjIuLiIiJjZGSj46PkI+OjpCQkJCMiSQjIiMlJSQlJiYlJSUlJSYnJygoKCgoKCkrKyssLCwsLi4uLi4uLi0sLCwsLCsrKysrKysqKioqKioqKioqKSkqKioqKSkpKSgoKCgnJycnJiYmJiYmJiYnJycnJycnJyYmKCgoKCgoKSkpKSkpKSoqKioqKysrKysrLCwsLC0tLy8vLzExMjIzMzQzMzQ0NDQ1NjY2NjY2NTY2NjU1NDQzMzIyMTAxMDAwMC8vLi0vKy4tLS4tLS0tLSwsLCwsLCwsLCwsLCwsLS0tLSswW4aXm56TiZCNk5aanaCnrK2okZmfnZGJio+Qcnd2d3p7cnh9gYSKg3CdrqVYTlBKNSgqN0MvLTAwMDdDRT1BPjw7Ozk7QEVLSHx+c2qEioN9d3p/iINaX2RbXF1cZXeCh41vP0BBQD9CRkRCPj07OTg0MDA7VWJ8nZt8cHNrWFVQRTk5NzxDSk9UVllYW11cYFpKRERLU1xpfI2Wj3dhWnWFiIqKcDYtMDI2NjI4REExLDAyMjE8V2FhaHFtYFdQRjYyN0BJSkxIPDMsMD5aeo6ku76+v76+vr69ure0sKp9OSgwMjQ/TWR0d3+Cg4R8fImKh0xISE9TUFp/dGtqaWVgXVlZWl1eXVlXVVVVVVVVVVZXV1haWltcXFtZVVNNSUVEREVFR0pOUlZbYmhwdX2Ag4SCf3t3dXZ2eHt+goaLjIuKiIeHiIaGh4eGhoSBf317e319fnt6dnNzdHRzc3FvamReVUtDQklUX2p3goeMj5CQjYyIiYeHiIiIiIiHgntyZVdTW2JrcnZ2cW9sa2loa4mXk42LioyOi4qJiYaIi5GRkpGQjI2NjY6PkJCQjIgmJCMkJSUkJSYmJSUlJiUmJycoKCgoKCkpKysrLCwsLC4uLi4uLi4tLS0sLCwsKysrKysrKioqKioqKioqKikpKioqKikpKSkoKCgoJycnJyYmJiYmJiYmJycnJycnJycmJigoKCgoKCkpKSkpKSkqKioqKisrKysrKywsLCwtLS8vLy8xMTIyMzM0MzM0NDQ0NTY2NjY2NjU2NjY1NTQ0MzMyMjEwMTAwLzAvLy4vLjgvLCwtLS0tLS0sLCwsLCwsLCwsLCwsLC0tLCsrMmeEj52gnJmZkZGMmqOVk6akpaGjko6TjImLlIJ5eXx/fnl3dHZ8e2Ezf5uITFBLRS8nKCwuLCwrLjE2O0ZBP0M9Pzw8OzxBRkV5gHNtb42Mgnx7foSIclNaUlVXWWZ2gICGglU/Pz1AQ0NDQz09ODY0MTAwPVJfeZCNe3Bsal1KSkE0NTdASk5TVFlaW1xeX2JiT0VGTFJbaXuQmZp7Ym2MmJeYjlwtLTEzNzc1MzUzKysxNDQ5VF9lbXh8dWVZSj42NEBNT05INi4sPUhXdoymub6+v76+vr6+vLq3s7CupYQ4LjQzNDhVaGd+f3p9foKHjHtoR0ROTk5PeXhraGpoZ29qZF9dW1xZV1hZV1VWVlVWWFlaW1xdXVxaWFVSTklHR0dISEpOUlZaXmRscnd9gISDgX16dXV2eHp8gYOHi4yLioiHh4iHh4eHhoaGgoB9fH1+fn19e3dzc3R0c3Nxb2pkXVRLQ0NKVmJreYOKjI+OjouKiYeHh4iIiIiIh4J6cGNZVFtkbXR1c3BubWtpaoyZko2Ki4uLi4uKiISEiJCTk5GQj42NjY2Oj5CQkIyIKCYkJSUlJSUmJiYmJycnJygoKSkpKSorKiorKywsLCwsLCwsLS0tLCsrLCwsLCsrKysqKioqKioqKioqKiopKSkpKSkoKCkpKCgoKCcnJycmJiYmJiYmJicnJycnJycnJiYoKCgoKCgpKSkpKSkpKioqKysrKywsLCwsLC0tLS0vLzAwMDIyMjMzMzMzNDQ0NTU1NjU1NjY2NjU1NTU1NTMzMjIxMTAvLy4uLi4uL01LMC0tLS0sLCwsLCwrKysrKysrKysrKyssKywqKzVoe4ygoqGfm5qbiY6ij4Wgp6ainI2Jko+MiY6EeHZ7fXx5dm9rb2pXO11kTk1QTkArJykrLS87MS4wMjdKRD09PkA+Pzs7P0BEan94c251kIuAfHx/goVeWFdUVFtqen14eId7TT5AQUJDR0g9Ojg0MzEuMDxSXHiQf3RxbWRdS0g9ODc1P01TWVtcYWFgYWJjXUpLTlNUWmR1jZuegXeRoKOgnYNBLy8wMjU4OjUxLS0uMDQ5TV5lcHqFiX9wWUI6OTlEUVdRQi8vNUNNY4akub++vr6+vr6+vbu6uLWxrKigcjAxOEc1PlhWb3V7f3yChHtjhm4+SEdPUG9+dG1saGRlZGJiX1tXVVZXWFhWVlZVVVdYWV5gXVtaWllYU05KSUhISktNUVJWXGBmbXV6f4GEgX97dnR1dnd5fYGFiYuMiomHhoeHh4aHhoaFhYSDgH19e31+fXp3dXNzc3NzcW5pY1pQSURHT1tjcXuEioyOjo2LiYmIiIiIiIeIh4aAeG1iVlZdZm51d3Nxb2xtbIuXk46LiYqKioqHhoSCfouTk5GQj4+NjIyNjpCRkI6LhycmJCUlJScnJiYmJicnJycoKCkpKSorKyoqKyssLCwsLCwsLC0tLSwrKywsLCwrKysrKioqKioqKioqKioqKSkpKSkpKCgpKSgoKCgnJycnJiYlJSUlJSUmJiYmJicnJyYmKCgoKCgoKSkpKSkpKSoqKisrKyssLCwsLCwtLS0tLy8wMDAyMjIzMzMzMzQ0NDU1NTY1NTY2NjY1NTY2NTUzMzIyMTEwLy8uLi4uLiwpLC4tLS0tLS0sLCwsKysrKysrKysrKysrLCsrKys2ZnuRo6ObmZqblpGFopmPnKeempqVkJOQi4eMg3p2dXl5eHJtZVxXUUpQTk5NUEs8KycqKSwwLissMzQ0NDU5Pj5AQD89Oz1BP1+Jdm5sboWTh357fYOLcFFQVV5kcXx4c2x9iWtCP0NCQ0ZEPTo3NTIxLzA7TVp0en54c2hcWVNGPj86NTtQV1lfZGZxc2xmXVhXVkxMUVlhb4eZoJebnp6dm4xhMTMwMTQ2Njc0NDIxMDM2SVxlb3d8ipCMbDo3Ojs8PD5APTcwLzc/RWaXtr69vr6+vr6+vru7urazraeem5ZVMExXQDBDQmFZbYB9gHhGTX5bP0VLTlZgXlVSSklJSkxNUlFNS0pPU1dXVVZUV1lWVFtkZWVeWVtfXVZQS0lKSUtMT1JVWV5jaG92fH+Bg4F+enRzdXZ4e32BhYmMjIqJh4aHh4eGh4aGhYaFg4OAfn5+f316eHV0c3Nzc3FuaWNaUEZGSFBcZXN9hoyMjo+Oi4mJiIeHiIiHh4aEf3ZsX1ZYX2dwdXZzcnBrboiWk46Li4mKi4eFhIN+dH6KkZGQkI+MjIyMjY6QkY6NioYnJyYmJycnJycnJycoKCcnKCgoKCkqKiopKisrLCwsLCwsLCwsLCwsKysrKyoqKiwrKyoqKioqKioqKiopKSkpKSkoKCgoKSkoKCgoJycmJiYmJiYmJiYmJSUlJSYnJycmJicnKCgoKCkpKSkpKSkqKSkqKisrKywsLCwsLS0tLS4wLzEwMjIyMzQzMzQ0NDU1NTY2NTU2NjY2NTU1NTU0MzMxMTExMC8vLy4tLi4tLi4tLS0tLCwsLCwsLCsrKikqKioqKioqKioqKSopNmqGl5+al42VmpKRiZ2dm5eZm5iWi4iOk4yMi4R5ent9d3BiZ2FQRUtRT05PUUxKPCcmKCkrLSopKiwrLzMxNjE5Pj5BPj0/Pj9Qh3VvbmxyjI+DfH58hIJVQVNkcHl6cmVZYHh5XENEQj9ESD46NzQzMTAvOkxgg46NhW1hVlRTRkJCPjg8U1hbYWhudn+Gf3l3cnZnYmZlZ2l4j5uYmpmXlJGGbkQ2NjY3OTg2MjM0NDUzRWBmbHV8g4yRjWIyNzc2NTU2NzUzMDA0N0J1rLq9vr6/vr2/vb68uri1squhl5KQfk1LVVQxOVRqWF59fn6AenmDd01FTk5lV1NUUlBVWVZYV1ZRT05NT1dVVFZYW1xbVFdaXGJeWlpgZGRmXU9MS0xMTVFUWFxgZmpwdn1+gIB/fHl1dHR3eHx/g4eLjIuJiIeGh4eGhoeGhoaFhoWCgn1/fn59fHl1dnR0c3FwbWdhWlBGRUlTXmh2f4aKjI+OjYqJh4aGh4iIiIiHg3x0al1XWWFpcnZ2dHFsbYeYkZGOi4mIiIeDgoV8am6Ai5GQj4+PjIyMjI2OkJKSj4qFJycnJycnJycnJycnKCgoKCgoKSkpKioqKSorKywsLCwrKysrKysrKysrKysqLCsrKioqKioqKysqKioqKSkpKSgoKCgnJygoKCgoKCcnJiYmJiYmJiYmJiUlJSUlJicnJiYnJygoKCgpKSkpKSkpKSkpKiorKyssLC0sLC0tLi4vMDAwMDIyMjM0NDQ1NTQ1NTU2NjU1NjY2NjU1NTU1NDMzMTExMTAvLy8uLS0tLS4uLS0tLSwsLCwsLCwrKyopKioqKioqKioqKisrLzZrjJmZlpyLj5iSjYKSlZiZlpeTjIOEgoqGg4OIen96dG5pYWpjSzlDT09RT1BPSDgnKCgpKioqKSosKy41O0pHOTpAQD0+PDk7QnqCd3d1d4OSin9+f4CIcVhhaHZ7d25cRz5IWmVXRUNFQ0BAOTczMS8wLTtJYIqbnYxjR1NUVkhER0NDSFJYX2hqboCQkYmDd2ZeZWxnbXJ1dHeCh4yOiYR+d3BWPTo5ODk4NTQzMjU4Oll0dHV4gYOHjYliNjc1NDQzMDIwLi4yNjZFcZ+0u7u9vry8uLS2urq5s66kmZGNjIZaUkxVUjE0TU89aIB/gIF8fHhuVEtMTE1OUE1PTkxETFhVTUVDQ0VHVlJRW1lTWVdjZWVta2hoZm1vaF5RTUxOTk9SVVhcYmhuc3p+gIKCfnp2dHN0d3h8f4OHi4yLiYiHhoeHhoaGhoaHhoeGhIJ/f35+fn15dXNycnBub21nYVpQSUhNV2BreIGGio2Ojo2KiYeGhoaHh4aGhIF7c2lcV1xja3J3d3FwbIOWko6LiouKiYeEhYF8ZGR0g4+RkI+Pj4yMjIyNjpCSkIyJhigoKCgoKCgoJycoKCgoKCgpKSkpKSoqKiopKiwsLCwsKyorKysrKioqKiopKCsqKSkpKiopKSkpKSkpKSkpKSkoKCgoJycnJycnJycmJiYmJSUlJSUlJSUlJSUlJiYmJyYmJicoKCcnKSkpKSkpKSkpKSoqKysrKywtLCwuLi8vLi8xMDExMTEyMzQ0NTU0NTU1NjY2NjY2NTU1NTU1NDMyMjExMDAwLy4uLi0tLS0tLS0tLSwsLCwrKysrKioqKioqKioqKioqKioqMEA+aI2Yk5aaj5GWkJWMl5ualouGh4mDhIGFhX+Bin15cXFwbWxnY1RKS0tNTlFOSkg3JygoKCkpKygqLiwrLDdQPTgzPDo/Pz08OTtsjYKCf4GIj5KEfn+ChIJZaXR4enhqV0Q5NzpLYVRCP0NDQ0E4NDEvLi48S1p2mJ6IUkdHV1hNSENCTExWW1xldYWPlpyTe2BTTWJ5gYOKjI6FdGl0f3x2c21oYVNAPDs5ODc2NjY1NjpVd39+e3+EhYiGYzo4NjMyMDAvLS4wNDk8SlVvkaSss7axp52WmqiusK+onpKLiYqHWElKR1dJMDdFNEt0eX2Bf3dlgXA+TFBeY11fYFZSSFpoaGxrZVtTVWdSR1hfWmNpYVtnbWxjYFhrbF5TT09PUFBSVVZaXmJnbnV6fYGCgX15dnVzdnh4fH+Dh4qLiomIh4eHh4aGhoaGhoeIh4WDgYCAf359eXVzcnJwb21qZ19ZUElKUVtlcHmCh4qNjo2LiomIh4eGh4eHh4SAenFmXFheZm51dndycH6Wk42LioqLiYWGg4N7ZF5pd4ONkJCQj42NjY6OjY6RkY+MiYgoKCgoKCgoKCcnKCgoKCgoKSkpKSkqKioqKSosLCwsLCorKysrKyoqKioqKSgrKikpKSkpKSkpKSkpKSkpKSkpKCgoKCcnJycnJycnJiYmJiUlJSUlJSUlJSUlJSYmJiYmJiYnKCgnJygoKSkoKSkpKSkqKisrKyssLSwtLCwtLS4vMTAxMTExMjMzMzU1NTU1NTY2NjY2NjU1NTU1NTMzMjIxMTAwMC8uLi0tLSwtLSwsLCwsLCwsKysrKyoqKioqKioqKioqKioqKiwuMGGGkpCUlo2OlZWVl5ubmJaIh4COjYODi4iBgouFd3l3dnJtZV5VTkxJS05OTktJOikoKCgpKSoqKy0tLSwvMyswVkRCPT9APjs9XJOMiYaGi4+XjYB9goGHcXJ3d3l0Z1RDODU0OExaT0RBRkREPTUxLy8uPE1lepWZczRATE5QTEE8P0JTWF1kcIWYnp2WgXR1bV1SYnh8ip+anJR7bnJ0cmxmY1tZUERBPj06OTc3Nzk6TXaEgICEh4V/gGc8NzU2MzEvLi0vMzk7Q1VfZmtze4uVlYp9d4CRmpudl5CLh4eGflpERElLUVA8PE1tfXd4fn5sX4mCQ01ZY2Nla2hZUFxmbG1tbmxnYWBYUEpNW1pdWlZPVmJlVUhBXWRXUVFPUFBQUlZYWl5kaW92e36BgoF9eXZzdXd4en2BhYeKi4qJiIeHh4eGhoaGhoaHh4iHg4GCgn9+fHh1c3FxcW9tamdfWE9JTFNdZ3B7hIiLjY6Ni4qJiIeGhYeIh4aEgHlwZlxcYmlwd3Z1cXmUlI+LiYmJh4iFhIR6ZF5ganaEjY6Pj4+OjY2MjI2OkZGPjIqMKCgoKCgoKCgoKCgpKSkpKSoqKioqKioqKysrKysrKysrKysrKysqKioqKiopKSgoKSkpKSkpKSkpKSkpKSkpKSgoKCcmJiYoJycmJiYmJiYlJSUlJCQlJSUlJSUlJSUlJiYmJycnJicnKCcoKCgpKSkpKiorKywsLC0sLC0uLi4wMDAxMTAxMTEyMzM0NDU1NTY1NjU1NjU0NjU1NTQ0NDIxMjAvLy4tLS0tLS0tLCwsLCsrKysrKyoqKysqKioqKywoKikpKioqKikpKSxafYuQlJCOi5CPjJyenJmclYmKjJGSi4eKg4KLjoB9eHZ0bWRdUkU+QkdNTUtISD4tKCcpKigoKSotLiwrKCksLjpDUDs/PT48PkqQkYqHhoyTmJWIfn+ChX9kdXh2cGNPPjc3NzpFVlxPPz5CP0A6NDAuLzpLZ4SSl2guNlFkVEhCPj5BRVthZHuRnZ2XgnZ4e3B+lJaLgJqkoqKgk35ybWhnZF9aWlRPSUJAPj07OTg6NFuJiHd7gYWCfHtqRDY2NDMvLi4vMTU6P1BofX55d21hX2JlY2RseICDh4iDf3x7bmNZP0A3PDdFWkJBYnZ4dXyCgGRMYE9NaWpnZ2BeW19oam1sbm5raGFeX19XWVpYVVdcXWFqaEIwOFdvV1FRUFFRUVNWWVxgZGpwd3yAgoKBfXl0dHZ4eXx/g4iKjIyLiYiHh4aGh4eHhoeHh4iIh4SCgoKBf314dXR0dHFvbWplXlZNSU9WYGl1foSIjI6Nj4qIh4aGh4eHh4aGg394cGRdXWRrc3Z1b3WPlo6LiIeHiIeGhIN+Z19fZW56hImKjIyOjo2Pj42OjpGSjoqJkSgoKCgoKCgoKCgoKSkpKSkqKioqKioqKisrKysrKysrKysrKioqKioqKioqKSkoKCkpKSkpKSkpKSkpKSkpKSkoKCgnJiYmJSUlJiYmJiYmJSUlJSQkJSUlJSUlJSUlJSYmJicnJyYnJycnKCgoKSkpKSoqKyssLCwtLS0tLi8vMDAxMTEwMTExMjMzNDQ1NTU2NTY1NTY1NTU0NDQ0MzIyMTAwLy4tLS0tLS0tLSwsLCwqKioqKiopKSoqKSkqKi8yKSkpKSgoKSkpKSksUG19joyNjY6LiImbm5qcmIeHjo2QjYmKh4GDiZGDeHd3dG9lX1VEQENKTklLSEY9LSgnKSonKCgoKiwrKy4tMyspLjg8Pj88OjxAkJOMio6RlZaXin+Af4WKaW53dXBgTEI4ODxEWmZfVE1EQkA/OzUxLy87SFt9kpJZMlNyeGBMRUE/QEFPZm53lZ+WgnOCpaufpaamm5eusKqlnZeHe3JpZWBdWlZSTktFQT09Pj8/PjtahY9+c3d+gHt4blE4NzUzMzAwMTU4P0JWdoyNj46HfWlaVlJPTVRbXmBkYF1cWmJ0WUI/PUI0PUFLN0tlZ256goVoJmJxU1pdZGtsZmhjYmhvcHBwa2dkX19cWlhZWVlaVFRcXlg2KDFPYVVSUlBRUVJUWFpcYGZrcnh9gIODgX16dnN1eHl8f4SHjIuLiomIh4eGhoaGh4aHh4eIiYiGhoSEgX99eHRzc3NwbmxpZV5WTUxRWGFrdn6EiIyPjY2Jh4aGhoeHh4eGhoN/d29kXmBnbnN3dHSKlZGLh4WGh4iGg4V/aWNjYmZxfomMjY2Njo6NjY6Ojo6QkY+IjpQpKSgoKCgpKSkpKSkpKSoqKiopKioqKioqKioqKyssLCsrKioqKioqKyspKSkpKCgoKCgoKCgoKCgoKCgnJycnJiYnJyYmJiYmJiYlJSUlJSUlJCQkJCUlJCQkJCQlJSUmJSYmJiYmJycnJycoKCgoKSkpKikrLCwsLCwsLS4uLi8vLy8wMS8xMTIyMjQ0NTU1NTY1NDQ0NDQzMzMzMzIwMS8vLy4uLS0tLSwsLCwrKyoqKysrKyoqKioqKioqKioqKSkpJycnJycnJygpK0lrfo+GhIeJhYKLmJKLjox9h4uMiYiIhIGAgIWSgXF0eXNsaGFTTEhHRjxASUdFPC8oKCkqKSgoKiorLCstLC0tKiwvNTQ9PDc7TJaXkI2LkpaVlZOGgIGDh4JydXVtW0s8ODdEX2xyaF1XT0ZAQj84MTAtOERfcoyIUE53jINvU0pIQUE+TlVlfIWNi5KgrbWysrKspaCcrrOupJ+Of31zbGVjXllXWFRNSEJAQEJDQkBDYoKGgnh3fH15dm9bQDo7Ozw3MjU3PEBFW3iKjJGRkY+CcWpjXFZTTUdGSEhMWGdzb0xHST5HOD5FREc/SFdheYGAOEWSkoBJWFZRVmNrYl1sbXF0cW1oZGBdW1pZWFhZWldaXVxWRT9MV1lVUVBRUFJSVVlbX2NobHR4fICCgoB9enh3dnp7fYCEh4uLiomJiIeHhoaGhoeGhoaHiIqIh4WDg4F+endzc3Nzb25sZ2RcVE1OU1tjbXiAhYmMjo2LiYmIh4eHh4aGhoaDfndtZWBiaG92dXGGk5CNi4mIh4iGhYiBa2VlYmJodoKMkI+Pj42NjoyNjY6QkJCMjZWVKioqKSkpKSkqKikpKioqKioqKSoqKioqKioqKioqKyspKSoqKikpKSoqKSkpKSgoKCgoKCgoKCgoKCgoJycnJyYmJycmJiYmJiYmJSUlJSUlJSQkJCQlJSUlJSUlJSUlJSQkJCYmJiYnJycnJycoKCkpKSkpKywsLCwsLC0uLi4vLy8vMDAxMDEyMjIzMzU1NTU1NDQ0NDQzMzMzMzMxMC8vLy8uLi0tLS0sLCsrKyspKSoqKiopKSkpKSkpKSkpKikpJicnJycnJycoKSs8c4OLioaLgnp+jpaPjJCLeoKJhn9+bnaGhIOIkH1xcXFxb2NZUU9NSEZAQUpFQz4wJygpKikoJysqKissKikqKSsrLS4xNzpAS2ucmZGQkZaYl4eSjoOChIeIdXJ0bVtJQ0NDSldlb2tgVVBQSUFBQDo1LzJDW3GDeU5jh4+CenplRz1FPk5WUF15ipalsbO1s7Ctq6SblKqtpqGilod/dG5qZGFcYnBnXFFIRUREREREUHySkIN7eoF+d3VpX1xZXVxfUDQ4Oz5BQldvgoWKkZCMgXl3dXBjY2FdXFteYWZtcGZCQT1AQkM7TEFJRz9SZ3aAcGWKk42EUFBXS0pWT0tXcXJydHFuaWVhXlxbW1lZW1xcXFxcWFZaW1hVVVNRUFBSUlVYXF9jaW5zd3yAgoJ/fHl2d3h7fH2AhIeLi4qJiYiHh4aGhoaGhYaGh4iIiIaGg4ODf3p3c3NxcW9ua2ZiWlNOUFVdZXF8goeJjI6NiYiIh4aGhoaFhYWFg353bWRjZ2lyd3J8kpGNiYqKioeHhIeFcmhpZmJianiFjZCQj46Ojo6OjY2OkJGQjJGYlSkpKioqKigqKioqKCkpKysqKikpKioqKioqKysqKioqKiopKSkpKCgoKCgoKCgoKCgoKCgoKCgoKCgnJygoJycmJiYmJiYlJSYmJyUlJSUlJCQkJCQkJCQkJCQkJCUlJSYlJSYmJiYmJiYnJycnJycnJykpKCosLCsrLCwtLi4uLy8wMDExMTAxMjIyMjI0NDU1NTU0NDMzMjIzMzIyMC4vLi4tLS0tLSwrKysqKikpKSkpKSkpKCcoKCgoKSkpKSkpJycnJycnJycmKCksMmuLjYqMioN6hIyNjpCVin19hoJzZ2R+iYaHio5xXl9eYGdkUVFTVU1MTk5KRkU/MScnKSkpKSkoKygpLCorKissLSwsMDQ3VXqRnZWSlJWXlpt6ipaIhIaGiYN8f3t2cXNzdX2Ij4uCallbWlVOR0ZHQTcyP05qeGxchJWXiYSLkXRMQD5KVUxSbYyeqLGzsKyoo6Okop+jnJWSkY+MgHNta2htbWpzamNaU0tISElDQk59lJiOgoGAfXdyaWlvdHp6dmU9Njg6PkJOYXqBhouEenh7e3pzZmRqZ2BcX2Znam5aW1tYOTY6Pk1LQ0ZET2B5fFtyjJKNhFRHUks2R01lbHBydHNxb2tlX11bW1paWlxcW1xdW1pcWldXVVNRUFBOUlJVWV1fY2pucnZ8gIKCgH56eHh5e3x+gYSIi4uJiIiHh4eGhoWFhYWGhoaHiIiHhoWDgH55dnJxcXFvbmxnY1xSUFRZX2hyfIOHio2NjYqJiIeHh4eHhoaFhYR+d21mZWdtdXZ7kJGMiYmKioiHhoiEb2lpaWRiZW96iI+Rko6MjY2MjIyNjY+QkI6WlpUpKSkpKSkoKioqKisrKysrKiopKSoqKioqKioqKSkqKikpKSkpKSkoKCgoKCgoKCgoKCgoKCgoKCgoJycnJycnJiYmJiYmJSUmJiUlJSUlJSQkJCQkJCQkJCQkJCQlJSUlJSUlJSUlJiYmJycnJycnJycpKSgqLCwrKywsLS4uLi8vMDAvLzEwMTIyMjIyNDQ0NDQ0NDQyMjIyMzMzMTAvLy4tLS0tLS0rKysrKiopKSgoKCgoKCcnJiYmJicnKCgnJycnJycnJycnJigpLzNOiZCMiIWAfIKGi5KMi4h3aW5uZnSCjYuHiouKYU9PUFRWX11PTU9OS0pLSEdFPzEnJykpKiMqKyoqJyYoKysrKissKysuQW6SmpqUkpOVl5aVen+VjoiDhoiJh4aQkpSWlZKUl5eSiXVSUFJYUk1HRUpDNjRKbYh3e5SZm5GSn6OfhWhpWk9ATWaQq7Cwsq2loKCdoaykjo+go6Skop6TaVtkb4B2cW5mX1NKSEtLR0JAXYyYjoGCgHh1eHhxdoCJhH9zUDQ2Oz8/RFNpeX99cWxxdXNxbWdjZ2ZfW19jYmdiXGBzZUI3Oz0+RkpRRztOeHtke4uNioJcSU8+K0BUXWRxcXJzc29sZmFdXFxbW1tbWltbXFxcXFpYVVVRUFBQT1BSVVldX2NobHJ2eX6BgoB+fHl5e3t8foGGiYuLiIiHh4eHhoaFhYWFhoaGh4iIh4aFg4B+enZzcXFxb25sZ2JbUlBUWWBpc36Dh4uOjY2JiIeGhoaGhoaGhYWDfXdtZmdqcXV7jZGNiouKi4qHhoaHdGpubGllY2dxfomPkpGQjo6OjY2Njo6QkY2Sl5SUKiopKSkpKisrKioqKysrKyoqKSkqKioqKiopKSkpKSkpKSkpKSkoKCcnKCgoKCgoKCgoKCgoKCgoKCcnJiYmJiYmJiYmJiYlJSUlJSUlJSUkJCQkJCQkJCMkJCQkJSUlJSUlJSUlJiYlJScnJycnJycnKCgpKSoqKSssLSwtLS4wMDAwMTExMDEyMjIyMjMzMzMzMzMzMjIxMTIzMjIvLy8uLS0tLS0sKysqKioqKSkoKCcnJyYnJycnJycnJyYmJycmJicnJycnJyYoLDE7RWuGjYeFhIOGg4WLiIKDhIKHhHF2jY2JjI6OgltOTFRYVEdXYltPTk5LSktGQz0vJScoKixJbTgjKCwsKSkrLCwuLy4vMlSAmKCYkpKVmpaWj357kZWJhISIi4h6jZKUmJmXlpeXl5aFYFZYWFpcVUpGR0I6PmGNiZOVl5aapKWkoJOGk5qGX0BPjKausK+topyenaCij4qkpaaloJ+dlFs8SmB6h35zbGVaSkZITEtHQURvk5B1eoWEhYN/fX6BiIaCd2E1NTo8PUBIVWZsa2NnaWZgYGBbWVxdW1pbX2BfSlFcZ2BJOkM/N0FDRlJHSGV4f4SIi4V9UkpUPS1HQTA1ZXVzc3FuamZhXl1bWlpaW1taW1xbW1xbWlZTUk1NTk5PUlVaXWBjZWpxdXp+gYKAfnx6enx7fX6BhomKi4iIh4eGhoWFhYWFhYaGhoeIiIiGhIKAfXl1c3NxcHBubGdgWFRQV1xjbHV+hIiMjo2MiomHhoaGhoaHh4aEg3x3bWdnbnR6ipOOi4mLjIqHhIaGdmxsbWxpZmZqdYCLkJCPjo6NjYyMjY6Oj5CQlpaUkioqKioqKioqKyoqKioqKysqKikpKysqKioqKSkpKSkpKSgoKCgoKCgnJygoKCgoKCgoKCgoKCgoKCgnJyYmJiYmJiYmJiYmJSUlJSUlJSUlJCQkJCQkJCQjJCQkJCUlJSQkJSUlJSYlJSUmJiYmJiYnJygoKCkpKSkrLC0sLS0uLy8vLzExMTAxMjIyMjIzMzIyMzMyMjExMTExMTAvLy8vLS0tLS0tLCsrKiopKSkpJycmJiYmJycmJiYmJiYmJicnJSUnJyYmJycnKTE4RVlydX2FgoKIg357eoB8hpihn5+Sk5SMjI2PiXBXT1FdY1pYVWlpX0xGTEtKR0M6LSQmJykpOT0oJicoKCkoKi8wLTAvLT1hfpuflJKUl5eUlIh8fYOWjYODhIiMgoGNkZWZlpiZmZmdknJXW1pdX2BZTUREQUBuj5KSkJeWmKSqppqBc4WaoKWMYGybqqysqZ+ZmZmclH+bn5aXmpqYlI1ZPEFKcpWQfXBpYlRKSEZERUhBUH2QhYCHi4yMiIGAgYN+e3RnPjI1Nzw8QUZSXF1bXmBcVllZVE9TVFdYWl1XRUJMVV9sYTk7NjMxPVlbZVdWcICGh4aDhWNJSkU4PUA0PWZ0dHRybmlmYV5dW1paW1tZW1tcXVtbWllVU1BPT0xPUVJVWl5hZGdqcHR4fYGDgoB8e3x8fH2Ag4aJiYmIiIeHhoaFhYWFhYWGhoaHhoaHhYSCf3x4dHNzcXBwbmlmYFhSUVdcZG52f4SIjI6NjIqJh4aGhoaGh4eGhIN8d21paW11jJaPi4uJiouIhYWHfGxtb25ta2hobneDjI+Qj46Ojo6NjY2Ojo6Qk5eUlJIqKioqKioqKioqKysrKyoqKioqKikpKioqKSoqKSkpKSkpKCgnJycnJycnKCgoKCgoKCcnKCgnJycmJiYmJiUlJCQlJSUlJSUlJiUlJSUlJSUlJCQkJCMjJCQkJCQkJCQlJSUlJiYmJiQkJSUmJiYnJycnJygoKSkpKysrLCwtLi4uLjAxMTExMTExMzIyMTEyMzIxMjIzMzAwMDAwMC4uLS0tLSwsLCsqKyoqKSkpKCcnJiUmJiYmJiYlJSYmJSUlJSYmJycoJicpKis3Rlt1e3RkbXF0eHVsbGtsc4CcoqShlJWOioyQjXpeV1ldYWJhXmZnbHBfW1NNSEhCNyonJycoKCYnJycnJyYnKCgqKy0vLDVMZHiRnJeTlJiVlJGDfnx9jZOKhoKFiZB/fIOIjpKVl5iXl4pyZGFjXFtfXVZKQkA/XpKWkY2Sko2ZnZKBaFtxl6GmqJl9kJ6lqaSZlpWUl46Om5WUlJOVlpOFV0FDSmGcl4l7cWpiUUdCQUZIREBhgZSQiJCTkIyFgIOAeHRvaEgvLzI4Oz5AQ0pSVFdYV1VUU1BOUVNUV1lQOis8SE5PU01ARz85NEBXSlFPTltwe4SLiYRlS0NFQDM4RV5wdHRzcW5pZWBdXFtbXFxbWlpbWlpbWlpXU1BOTU5OT1BTVlpeYGNoam9yd3yAgYODgH58e3x+gIKFiIeGiIeGhoaFhISEhYWFh4eHh4eGh4WEgoB8eHVzcnFwb21qZV9YU1JWXmVueIKFiIuNjYuKiYaFhoaGhoeHhoWCfHZua2tvhZSRjIuLiYqJhYaKgW5tbm9tb25pbHF5hI6Qjo6MjI2Ni4uLjo+QkZaVlJGOKioqKioqKioqKisrKysqKioqKiopKSoqKSkpKSkpKSkpKSgoJycnJycnJygoKCgoKCgnJycoJycmJiYmJiYlJSUlJSUlJSUlJSYlJSUlJSUlJSQkJCQjIyQkJCQkJCQkJSUlJSUlJSUkJCQlJiYmJycnJycoKCkpKSsrKywsLS4uLi4wMTExMTExMTMyMjMzMjExMTAwMDAvLy8vLy8tLS0tLCwsLCsqKSoqKSkpKCgmJiUlJiYmJSUlJCQlJSQkJiYlJiYlJigqKi01RVlucWFgW1heY2RcU1hbXF1zj6GYlJSQiYyPjoBgVVdlaWlkZmRnaHJ6cW1oZV1LQTAmJicnJycmJycnJycmJygoKisrLC86Vmh0kJaQk5eYlJKOfnl5eYWVjYaEgYOIjoWJjZCSlZeWjIh1amdmZmRgXlxaUUY9O1uPlpGKjoyIiYJwZmFcZY2jn5yYjo2Vn6KdlpaSkYmHl5KTk5KRkZCRiHtnTU5mpqOVi3pvZVVIRFV0iYBoanmOl5KSlJCJgn+AeXJraWZRLywuLzU4Oz1CSU1QUVFQUFFPTlBSU1FDMDA+Pzg7Pjo/Q0M9Pj1BSkdJWFtKXmuBioaDdVhGSVJEPE5ZbHR0c3FuaWRfXVxbW1tbW1paW1xcWlhZVVJPTk1OTk5PU1ZZXGBjZmhtcnZ7f4CBgYB9fX5+f4GDhYiHh4eHhYWFhYSDhISFhYeHh4eHhoeFhIKAfXlycnFxcG9taWReWFVVWF5ncHiChYiLjYyKiomHhoaGhoaHh4aFgHpzbm1sgJORi4qJiYqJh4WIh3FucXBvcG9tamx0e4iOj4+OjIyLi4qKjY+QkpaVlJOPjisrKysrKyoqKiorKysrKioqKioqKSkpKSkpKCgoKSgoKCgoJyYmJycnJycoKCgoKCgoJycnJygoJiYlJSUlJSUlJSUlJSUlJSUlJSUlJSQkJCQkJCQkIyMkJCQkJCQkJCQkJCQkJCQkJCQkJSYmJicnJycnKCgoKCkrKyssLC0uLi4tLzExMTEwMDAyMTEyMjEwLzEwLzAuLi4vLy4tLS0sLCwrKysrKSkpKSkoKCcmJSUlJSQkJCQkJCQkJCQkJCUlJiYlJyYmKi40QlpyempiXlZXWVxZT0NLUVRabYeXhoeSjYyQkYFnVVJbaWJkamhjZGp0cHVtcGx3eGdEJScmKicoJyYnJygnJikoKSgqKy43RVZmdJSSkZSWlJCPi4B/fH+ElJCHgoKAhouLg5CVkpOTk4eEg4KDfnh4dnBiXVpRSD8/fZuQioqIhHxtXF9gX2N4lZmipp6IepOal5KTj4dzho2IkZWTjouKioiAfGBUeaqjnZWHdmtdTERLXXiLkpF+j5udmJCNiYJ8eHRuZmFeVjQtLikqLjM4PEJGSk1NTU5NTk9LSD8zLC83QkY3P0ZGQEtPTEk+Qk1JQExSVF9idIaFgXhLQUpaYVBab3Bxc3NxbmplX11bWlpaWlpaWlpaWlpYV1RQTk1MTE1NTlJVWFxhY2RnanF1en6Cg4OAfX9/f36ChIiIh4eHhoWEhYWDg4OEhYWGhoeHiIeIhYOBfnt2c3FxcHBubGhkXVhTVlxgaHJ5goaJi4yLiYqJh4aGhoaGhoaFhYB5cm5rd4yQjIyKioqKiIeLiXVsbm1ucHBwbW90fIGKjo2Njo2Mi42NjY+QkpSXlJOSj40rKysrKysqKioqKysrKyoqKioqKikpKSkpKCgoKCgoKCgoKCcmJicnJycnKCgoKCgoKCcnJycnJyYmJSUlJSUlJSUlJSUlJSUlJSUlJSUkJCQkJCQkJCMjJCQkJCQkJCQkJCQkJCQkJCQkJCUmJiYnJSUnJycoKCgpKysrLCwtLi4uLzAxMTExMDAwMjExMTExMDIxLy8uLS0tLi4tLCwsLCsrKysqKikoKCkoKCgmJiUlJSUlJSMjIyMjIyMjIyMlJSUlJSYnJywxQFZ1fHVmXldZZmRXUUxFSVZVXGR4e3yKjYqOjoZsWl1ga2dpa25sYmhvcGtvcHNobXKBfGQ8HyksLCkoKSkoJycnJygoKiotO05aYniTjI6VkZCOj4l8hYaFho+Ui4SCgH+FjIR8i5GPkpGUmqGdl5yfmI9+aF1cWVBIPXWclY2KiH9uWmBwcGtucIKQlZ2moY2Ij46Njo1+c3+CiY+PhH+ChoiEfn5waIOlnJmViXlvY1JEQ0huj5COeY+anZuRjImBeXNrZl5bWlZALCsoJykpKy80Nzk8Pz8/Pzw4MSwqKy4zNUVVPjY7P0VJSz9CUU5KPExMTlVWX2h5goRyPD1FUmJbYG9wcXNzcW5qZV9cW1paWlpaWlpaW1xZV1VST05KSUlLTE5SVVldYGJkZ2lwdHl9gYODgYCAgICBg4SIioiHh4aEhISDg4ODhIWFhoaHh4iIh4WDgX56dnJxcXBwbmxoZFxYVVdaYWpyeYKGiYuMjIqJh4eGhoaGhoaGhoN+d3FrcYmMjIqJiomIh4aIinttcXFycnR2dnd4fYSKi42NjIuLjI2OkJCSkpOWlJORkZCOKysrKysrKysrKysrKioqKioqKioqKikpKCgoKCgoKSkoKCkpJycoJycnJycoKCgoKCgnJycnJycmJiUlJCQkJCYmJSUlJSUlJCQkJCQkJCQkJCQkJCQjIyQkJCQjIyQkJCQkJCUlJCQkJCQlJSYmJiYmJycnKCkpKisrKysrLS4uLjAwMDAxMTAxMTEwMDExMTEwLi0tLS0tLC0uLSwrKysrKiopKyspKCgnJyYmJyYlJCMjJCQkJCMjIyMjIyQkJSUlJSYmKCsxPVVyenZzZ1VRXXF0Y11dUUlKW2Jjc3CDioaHjIhxU1BXbHVtcG1wbm1tc21vanJ0bWZzcn6LgWA3JSgrKisrKigxOS0pKCgpLjtNWmOFj4iMj4yJhouJiIeNi4iNlZGIgn19fYSJbEhYYmZ3k5mcpaasqqaZindhXlpTTElqmJiQjYR9cltzj4l8eXqAgoCRoaOXiIqIhoeGeW9wfIeLhH6EkJmfnZOCdnWCm5WSjYZ6cWpgUENUfYqHgHOFkZiYkIyGgHVuaGFaV1FORjApKCgnKCcmJykqKSkoKCcmJykrKy4xNjg9RUpORD46PTxIWFVISTowTk1FQ1Jkan17ZE5CQkNNVmBucnJzcnFtaWReXFtaWlpaWlpaWllZV1VUUU9NSkpJS0xPU1ZZW2BjZWVrbnJ5foKEhIKBgICAgYSHiYqIh4eFg4ODg4KBg4SFhoeIiIiIh4eGg4F+eXVycHBwcG9raGRdV1VaXWJrdHyChoqMjIuJiIeGhoaFhYaGhoWCfXdxb4aNh4iIiIqJiISFiYJxcnZ6fHx+gIOEhImMjo6LioyNjY2PkJGSk5ORlJKQkZCQjywsLCwsLCwsKysrKyoqKioqKioqKiopKSgoKCgoKCgoKCgoKCcnJygnJycnKCgoKCgoJycnJycnJiYlJSQkJCQlJSUlJSUlJSQkJCQkJCQkJCQkJCQkIyMkJCQkJSUkJCUlJCQkJCQkJCQkJCUlJiYmJicnJygpKSorKysrKy0uLi4vLy4vMDAvMDExMTEwMDAwLy4tLS0tLSwsLCwsKysqKioqKikoKSgoJyYmJiYmJCQjIyMiIyMjIyIiIiIjIyUkJCYnJygtNk5senVxeHNudnd3dWliXEcvQGpvc31uiI2GiYl9WEdOWXVxc391bWtzhXZnZ212fnZmbHl2hY2Mf2E3JCgrKysqMD4wJykpKS07TlppjImGiYuHhoSGioaDh4uRj5iXi4F7enZ6f4hgNU9ZZnF4kqWwsLGpoZiGbmNeXFBJY5OZk5WJhHZddZKUjYuMiISIlJyglXp4foJ9eHRxgZKUgm10h5iiqqahloF+iI+Qi4N8dnFsZFhFZ4WJioV8f5CTlI2FgHduZ2JdVU9JQzouKCYnJiYmJiYnKCgoKCcpKioqKiwuMTY6PUNETEhHPDU5Tkc8O0BHOjNBSUhUZHeCdmVcVmtoUVZdZnFyc3JxbWlkXltaWlpaWlpaWlpZWVdVUk9OS0pKSktMT1NWWV5fYmJkaGxxeH2Bg4OCgYCAgoOEh4qKh4aGhYWEg4KBgYKDhYaHiIiIiYiHhoSBfXl1cnBwb29tamZiXFdVWV9mbXV8goiMjIuLiYeHhoaGhYWGhoaEgXt2cIKQi4eFiYiIiIiHiYp7eX+DhoeJiouMjY2Ojo6NjY2MjYyMjY6QkZGRkZGQkJCPkJAsLCsrKysrKysrKysqKisrKioqKikpKSknJycnJycnJycnJycnJycnJycnJygoKCgoKCkpKCgnJyYmJiYlJCUmJSUlJSUlJSUlJSUlJCQkJCQkIyMkJCQkJCQkJCQkJCQlJSMjJCQkJCQkJCQkJCYmJiYmJiYoKSkpKiwsLCwtLS4uLi4uLi8vLi8wMDAwLy8vLy4uLSwrKywsLCwsLCwrKikpKSkoKCgnJyYmJSUlJCMjIiIiIiIiIiIiIiIiIyMkJCUlJSgrNUZkeXhzd3x8enp7dnRqX1VFPEpkcnl1cYmIhoaEbE1PXWlwc3p4d3JtcYB0cWpnbnl6fWpvenV6hIGCeFouKycqKCgpKSkrKysuQFBZcI2HhoKCgoJ9foGDiIqHg5CanZOEend1c3mDi1xHSlJaa4efrbGur6mfjnRkYFpUTmGQnJOViIF0XnaTjoySlI6FhY2UmY1waHR4a3SVpKqonYJaUFlrhJeZlJCKkpmTioN6dHFwbmVYRWeChYqLh36Mi42Gf3doW1NQT0pCOS4nJCYkJSUkJSYlJScnKCcpKCcnKS0uLzc5MjM2Nz9GUkQ1NjRKT0pZPjMrMT9QW2NiXmpqVldpcmRcW2BscXNxcG1pZF5bWlpaWVlaWllZWVlWVFFNS0pISEpLTVBTVlpcXmBiZGdrcXZ7gIODgYGBgYOEhomLioiHhoWEhIODgYCDhYWFh4mIiIuGh4WEgH55c3JxcG9ubGllYVxYVlxgZm10e4GHioyLi4mGhoaGhoWFhoeFg4B7cH6QjouIhoaHh4aHiIyFhIiMj4+Pj4+Ojo6Ojo+OjI2MjIyLi4yNjo+Pj4+Oj4+Pj4+PLCwrKysrKysrKysrKioqKioqKiopKSkpJycnJycnJycnJycnJycnJycnJycoKCgoKCgpKSgoJycmJiYmJiYmJiUlJSUlJSUlJSUlJSQkJCQkJCMjJCQkJCQkJSUjIyQkJSUkIyQkJCQkJCQkJCQmJiYmJiYmKCkpKSosLCwsLS0uLi4uLi4vLy4vMDAvLy8vLy8uLi0sKysrKysrKysrKikpKSgoKCgnJiYmJSUlJCQjIyIiIyMhISEhISEhISIiJCQlJSUqMERieHdxdnx+f3x6eHRwaFxQSFFhan1+aneKgoOCeldRV3F5bXJ7cXFxdXl0d3WAb3B+eXRvX3VyYm2KjI2Ock4zKCgoKSoqKysrNEdUXniKhYCBgX97cHR4fH2AhISOl5mVjIB2cG1xeoGEVzpPXXOHn62wrK6nil1JTU5RTk5fjZqYmpCAalBchYmMj46KiIGFjpN7amtveICVp6uno5d7U0pKR1mDmJCEipqXk4h9c29ubm9mUEFdgo6OjYV7goCFgHRiRzo0MzQyLiglJSMlJSUkJCQlJCUlJSYlJygqLC8wMTU/NTMvKisuMj5eUj9AUUo8UUctKzRBWl9SVElPdHKAf3ZuU1FdaHBycXBtaWReW1pYWFdXWFhZWVhYVVNQTEpISEhJS01QU1ZaXF5gYWNmanB1en+Dg4GBgYKDhIiKi4qHiIaFhIODg4ODg4SHhIeJiIiJh4eFhIJ8d3NycXBvbmxpZWFcWFhcYGhvdn2Dh4qLi4mHhoaGhoaFhYaGhYJ+enyQjoqKiYeGh4eIio2Mi5CSlJSRj4+Pjo6Ojo2NjYyMi4uMi4uMjIyNjY2NjIyMjIyNjSwsKysrKysrKysqKioqKioqKikpKSkoKCgoJycnJycnJycnJycnJycoKCcnJygoKCkpKCgoKCcnJiYmJiYmJycmJiYmJiYlJSUlJSUlJSUlIyMjIyMkJCQkJCUlIyMjJCUlJSUlJSQkJCQkJCQkJiYmJSYmKCgpKSgqLCwsLC0tLS0tLS4uLy8vLy4uLS0tLS0tLS0tLCsrKiorKyoqKikpKSkoKCgmJiYmJiQkJCMjIyMhISEhISEhISIiIiIjIyQlJSQoLz5Xc3hxdHp8fHp7enpyamZbTklXaXaIfXCAgoCCf2lLTlBjbm5oaWtwdHVxZnV4eXBvc3ZrZVhgcGxXkJeSkW1kZz8yJykpKSgqNUFMWWN/iIJ9fX98dm5wc3R2cnZ9hI6SkIyGe3VycHB6gYVXUWByipqusrCpgUM9REVES1BQW4qbmp6af1Q6PWRze4KFf3t4eYJ8aF9haXiIlqKfnJuTflVGSE9ri5aVjZKalIt0cnNraGtvYUhGU2x4gHtybnl5fn1jQjQwLiwqKCgnJiQjJCQkJSUkJSYmJSQlJycsLzEwMjI0NzMtKCYmKSouRV9QWFlaWVZJLCstOVFQVExceX19god6U1FPWGNwcHFwbWhjXVpYV1dXV1hWWFhXV1VRT0tKR0ZGSEpMT1JVWVteX2BhZWludHl/goKCgoKDg4SIi4uKiIiGhYSEg4ODg4SEh4iJiYqJiYmHhoOCfHZzcnFvbm1raGVfW1hYXmNqcnl+g4iLiomJh4WFhYWFhYSFhYSCfHyRkY2IiIaFhoiJjZCRkJKSk5KQj4+NjYyOjo6Ojo6OjY2NjY2NjY2KjIyOjouLi4uKi4ssLCsrKysrKysrKioqKioqKiopKSkpKCgoKCcnJycnJycnJycnJycnKCgnJygoKCgpKSkpKCgnJyYmJycmJicnJiYmJiYmJSUlJSUlJSUlJSQkJCQkJSUlJCQlJSMjJCUlJSUlJSUkJCQkJCQkJCYmJiUmJigoKSkqKywsLCwtLS0tLS0uLi8vLy8uLi0tLS0tLS0tLSwrKyoqKiopKSkoKCgoJycnJyYmJiUkJCQjIiMjISEhISEhISEhIiIiIyMjJScnLDhMa3Rycnd7fHp6fHl4cWxiVk5KW3aHiHh1g319gHlZR0dTaW5va2VrZmpzbWhsfn9yb3NvaGlnR2puVG6UhnFoZnQ/TUQpKCwqKTI8TFlmhYeBenl5e3Vsam5uamtrbnJ/h4qIh4V6cXRybnaDiGVgdo2bqq+od2lRQj09QFBZWluHlJ2dnIVWOEFTZ3d7dnJwb3BzcGpsc36JlpuXkI6MjX1UPT5Oe4+QlZWXlYx+Y1NcYGJlZlVIQkZXc3dxaWBqcHV1UzQwMS8sKigoJyUkIyQkJCUlJCUlJCYoKy0uMTI0NjMyMjAuKCYlJScpKzxTWE5WVFxXSD8vMkBKT1JYUlxsc3l/gXZtWU1XbnJxcW1oY11aWFdXV1dXV1hXV1dUUE5JR0ZFRUdJTE9SVVlbXV1fYWVpa3F3fYKCgoKCg4WGiIuLi4mHhoWEhIODg4OEhIaHiYmJioqIiIaDgHt2c3Jxb25ta2hjXltYWmBlbHR6foOIi4qIiYeFhYWFhYWEhYWEgX2KkI2Jh4eHioyOkJGSkpCPkZCQjpCOkI2Njo+Njo6Pj42MjIyMjIyMjZCRj4+OjY2KjIuLKysrKysrKysqKioqKioqKikpKSkpKCcnKSkoKCgnJycoKCcnJycnJycnJygoKCkpKSkoKCgoKCgnJygoJycmJicnJiYmJiYlJiYlJSUlJSUkJCQkJCUlJSYmJiYlJSUlJSUmJiQkJSUlJSUlJSUmJiUmJicoKSkqKisrKy0tLS0uLi4uLS0vLy0tLS0tLS0tLiwsLCwrKikpKSgoKSkoKCgoJyYmJiUlJCQlJCMjIiIjIyEhISEhISEhISIiIyIiJCUoKzVHYXNxc3Z7fHl5eXt4dXNqYFVKSmN/j4d1fYF6e3xuTUVMXWhpaWplYmRnam1sdXeEcmOCgnhvaUdQd19FgWtkZltoaG52WjorKys0P0tXYISEfnZ5d3ZzbGpraGNkaWZpbnF1d3h8gHVxbm5yeIKBbHqKlaKed2F3UT03QFhucGhgjo2UkJSNYDlAYW+GgXJtamlrcG5qa3eGn6ScjIN9e3dkSEE9TXKEhouKkI+GeU0vM0FRYV9QSktVb3pybGJbZHBwa0osLzAvKyooKCcmJiUkJSUlJiUoJygpKzAyMTIxNTc0LisqKSUmJykrKSs3QUZRUVVNVmdDQUBKTVJTTVhWX11ma3t0b2FLVmlycnBtZ2NdWVdXV1ZWV1dXV1dWU09NSEZEQkNFSEtOUlVYWl1eXmBkaGtwdnyAgIGBgoSGh4mLi4qIhoaFhYWDg4SEhIOGh4qKiomIiomGg396dXJxcW9tbWpoZF9YWl9hZ291fICFiYyKiIiGhoWFhYWFhYWDgX+IkY2Lh4eHioyPkpKSkZCOj46Pjo2PkI+QjoyMi4qMj4+OjYuLi4qMjZCSkpGQj42MjY2MjCsrKysrKysrKioqKioqKiopKSkpKCgnJykpKCgoJycnKCgnJycnJycnJygoKCgpKikpKCgoKCgoKCgoKCcnJycnJycmJiYmJiYmJSUlJSUlJSUkJCMlJiYmJiYmJSUlJSUlJiYlJSYmJSUlJSUlJiYlJiYnKCkpKioqKystLS0tLi4uLi0tLi4tLS0tLS0tLSwrKysrKikpKSkoKCkpKCgoKCcmJiYlJSQkIyMiIiIhIiIhISEhISEhISEhIiMkJCUnKjNDW25vb3Z7e3dydXd2d3V0Z11VSklpgZCIc4F8enx9YklHUGBhY2ZqZmZoY1VOVllYY2dRXVlXUVZEPmNvXYGAiWRXZ11oZllWSTkvMz5KVlp+hH16dnV2cnBvbGllY2JhXl9hZ2VjYnl9cWxubWx1gn1ziJCTUlNbUT46SmuEjoVyY5CQkIl7gnBMUWt2j4p5bmlmYmVqaW95l6aejnp2cXFrTT06PEtjdX+FiJePgnBELywvP2NnXllbaISIgXNmXWZtal9GKi0wLSsqKCcmJiYlJCUlIiMlKSkqKi80NTY4PkZDRDwrJygmJiYoKSkpMDc/SVldVV1jUEBFTEZNV2tcU1dTXmt5S0BdTGZrZnFvbWdjXVlXVlZWVldXV1dWVVJQS0ZFQkFCREdLTlJVWFpcXV5eYWZqb3V7gYGCgoOEhoeKi4uKiIeFhIWFg4OEhIWHhoiKioqJi4qGhYF9eXRwcnFvbW1qaGNeV1lfZGlxd32AhYuMioiIhoaFhYWFhYWFhYKFkI2LiYqKjI+QjpCQkI6Njo6Nj5GRkI+OjImHhYWHjI+PjYyLiYmLjI+Sk5GQj46NjZGSkI8rKysrKysqKioqKiopKSkpKSkpKCcnJycoKCcoKCgoKCgoKCgoKCgoJygoKCgoKSkpKSgoKCgoKCgoKCcmJigoJycnJyYmJiYnJyUlJSUmJiYmJiYmJiYmJiYmJiUlJSUlJSUlJiYlJSUlJiYmJiYmJicoKCgpKCkqKisrLS0tLS4uLS0tLS4tLS0tLS0tLS0sKyoqKioqKSkpKCgoKCgoKCgmJiYmJSQjIyMiIiIhISAgICAgICAgISIhISIiIyQkJzBCXG5sbXF7e3RxcnZ4eHl3b2ZcUkRCboWPeGuAeHh5cVZGSFFiaGptZmJVVE5ES0hIRUZKRT44ODc7QkFGXlpKiIxwYX50cG5hVEtIQTs+SlBWeYN9eXRxcXFzc29oZV9bWldZWmFhV0hJcXVwb2lma3eCdXyHW09WTj88THaOmpqPb1+Gi4yKc05jZWV6eo6Gd21nYl1iZmVqgqOgkod4bGVoXkhCPTtHWmd2f4mOhXtgPCwsM0dpdm5ZWGaAi42DhXFsbWVVPikqLCwqKignJiUlJCMkJCMiJCYlJiw6QkVFREdHQj01KSYmJiYmKCknKi8zOkRESldkYFpWRkA7QExXWFpcPkJbVDI4ZlFOXWlycG1oYlxYVlRUVVdXV1dXVVRRTkpFQUBAQUNGSk1RVFhZWltcXWBjaG1yenx+f4CDhYWKi4uIh4iHhIWEhISEg4OEhoaHioqLioqIh4SBfXhzcXBxcG1samdhXVpbYGRqcXh9gYaLi4uLiIaGhYWFhYWFhYWCjpKLh4uNjo+PkI6Oj4+NjYyLj5CQjo2MiIaDgYCCiI2NjYyLjImKio2RlJOPj46MjI+QkY+OKysrKysrKioqKioqKSkpKSkpKSgnJycnKCgnKCgoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKCgoKCgoKCgoKSkoKCgoJycmJiYmJycnJSYmJycnJycnJycnJyYmJiYmJiUlJSUlJSYmJSUlJSYmJiYmJiYnKCgoKSgpKiorKywsLCwuLi0tLS0uLS0tLS0tLS0tLCsqKikpKSkpKCcnJycnJycnJiYlJSQjIyMiIiIiISAgIB8fICAgICEiISEhIiMkJSw8VnFwaG50eXRtbXByc3d4dm5iVk09OmiGh3Jyd3J3eWtOQ0hVZ2lsdmRXR0RHQUpQS0tKSkRHQT47O0BGP09dOmt7hYiHhH50Y1RNSUVBQEZKUXKCenZzcm9ucHJuaWVfW1lPTlRgXlJGMkdqbW5qaGhudoB8Y0BLTk5FSG+QnaKekGpcb4WLhnk1MUx3k5CJgHdrZF5bXmNcZpmflod8b1xhbFxGQkBETVdha3F3dnVuVTgrLTtSaHR+d2ReZHiGhoSEe2lfUzQmKS0sKiknJyYlJSQkJCQjIiIjJCgvOkJEQz86ODc2MCcnJyYnKCgnJyoxNjo9OEdRWFtZVk9JS0NMWVpSUEY2UVxNVmpZSllyc3BuaGJcWFZUVFRTVlZVVVRTUExKRUFAP0BCRUpNUVRYWVhaWlxeYWVqcXd9fn+Ag4WGiIuLiomHhoSFhISEhIODhIaGh4qLi4qJh4eEgHx2c3FxcXBtbGpnYV1aXWFma3N7gIOJi4uLi4iGhoWFhYWFhoaGio+Li4qMjo6Njo+NjY2NjIyPjo2Ni4mFgoB8eXt+gomNjo6Mi4qKiouPk5OSjY6Ni42SkZGPjiwsKysrKysqKioqKioqKSkpKSkoJygpKCcnKCgnJykpKSkoKCkpKCgoKCgoKSkpKSkpKiopKCgoKCkqKCgoKSkpKCcnJyYnJycnJycnJygoJycnJycnJycnJycnJiYnJyYmJiYmJiYmJSUlJSUlJycnJygoKCgpKSorKysrKywsLS0tLS0tLS0tLS0tLCwrKysqKiopKSkpKSgnJycnJiYmJiYlIyMkIyIiIiEiIiEhISEgICEhISEhISEhIyMjJik3T21yaWtxdnNsaWprb3F2d3RrY1ZLPztqkIt0eXJweHdiS0hQYWdfYGhXSkZESUNITktMS01FQ0JAPj8+RUBBSkQ6PHeNh4R9cmJVTUZEQ0NCRkxnhHd1c3FubG5vbmdiW1hbU05OQ0xPSTksRmpqZmpoam93ekc8QklJR22ToqOjoY1zYV2BjoaHQys9gJiNhHt3aF9cWVhaU3WhmI2AcFtQWVxNOzpCSVJXW2FkZmprYU03LDdJXGludn52anmMkIV6f31rXEosJSgqKiooJyYlJCUlJCMjIyIiIiEmLzc6PD8+PT07ODEoJycnKCgnKCYqMTs9NzlCR0lbXltcR0ZBREtLSVZgUkBZUmNuXkpcc3RwbWdiXFdVVFNUVFRUVFRTUk5LR0NAPz9AQUVJTFBUV1hZWlpaXF5iZ250eH1+gIOGiImLi4qJh4aEhYSEg4ODg4SFiIiLi4uKioiHhIB8dnJxcHBwb2xqZ2FdWlxgaG51e4CFiIuLiomGhoWFhYWFhYSGipCNjIyOjoyMi4uMjY2MjY2MioqIhoJ+fHl5eHl8gIWLjo+NjYyKioyOk5OSj4+Ni4uPkJGPjY4sLCwsLCwsKyoqKioqKikpKSkpKCcoKSgnJygoKCgpKSkpKCgpKSgoKCgoKSkpKSkpKSoqKiopKSgpKigoKCkpKScnJycmJycnJycnJycoKCcnKCgoKCgoJycnJyYmJycmJiYmJiYmJiUlJSUlJScnJycoKCgoKSkqKysrKyssLC0tLS0tLS0tLS0tLSwsKysrKioqKSkpKSkoJycnJyYmJiYmJSMjIyMiIiEhISEhICEhISEhISEhISEhISMiIykwRmZ0bWtwdHNta2hpam1wc3Vya2NWSj42ZpeSf35xdXh6XENIUWVrX11fUERGSUxHTVFPTUpKREJBQEE/QEJEQ0NGQG6EiYeDemtZTktFQ0JCQURHX4V4dnRxbmppa2pnYV5aVlBHPjYzOz04NjdWbWdnZmZnb3dxRjo3O1+Mo6akpp6HdWBleYyGiUsxQISXh4N6c2JaWFZWTlSIm5KEeWpPTllQOzE5QktRV1lcX2NmZVxKNjA9UWNpa2t1fH6ZnJKCenx3ZFQ+KiYnKSkqKCcmJSQlJSQjIyMiIiIjKjM6PT9BPj47NjMwKyYnJygoKCgmKS0yMzE5PDpEVVtSV1xEP0RRVFVeaV1MYnd4fmdEWGt0b21mYlxXVVNSU1NUVFRUU1JOS0VDQD8/QEFFSUxQVFZXWFlZWVlcYGRrcXh9foCDhoiJi4uIh4eFhIWEhIODg4OEhYiJi4uLioqIhIF/e3VycXBxb25raGVgXFteY2ltdn2Bh4mLi4qHhoaFhYWFhYWFh42Oj4+OjoyLiYmJioqLjY2Li4iEf3x5eHh3d3h7fYGIjY+OjY2Ni4uNkJOSjY2Mi4uNkZKQjoyLKioqKioqKioqKioqKiopKCkpKSkoKCgoKSkpKSkpKSkpKSkpKSkpKSkpKioqKioqKysqKiwsLCsqKioqKSkpKSkpKCgoKCgoJycnJykpKSkpKSkpKCgnJygoJycnJygoJiYnJycnJiYmJiYmJiYnJycnKSkpKioqKSosLCwsLCwsLCwsLi4tLSwsLCwsKyoqKSkpKSkpKCgoJyYmJiYmJiUlJSQjIyIiIiEhISAgICAhISAgICAhISEgIiQjJCgvQl5xbWpvdHRsaGZkYWRpbnRzc2tiVUg4MVWUkYR2bnN6bVtIS1NkYVxdWkxESk9OTk9SU1JLR0dFRklMQTw+QD9DRURXh4eGgHJnVUpHQ0JBQkA+QFyHeXNvcG9raGhoZWFdWVRQSDkxMTU1NTU2PGlsaWdjZWhtfVgwMkFzmKKlp6SVhW1cdnF/goJgNz53kYd9c2hWUlVUVE1xm5aFeW5eT1phVDU0O0dOVFhcXmFiY2BZRjk/S1pkZ2ZnbHBok5mPgnlzaV5UPywoKSkoKSknJSUkIyMjIyMiIiEjJTA5PD0+P0A8ODMxLyonJygoKCgmJigtLjEzNDc6PEpaWkpTT0M9QElITFBMWm13bmlkRVdtdXVuaWNbWFNSUVBQU1RTU1JRT0pFQj49PkBCRklNTlJVVldYWFdXWF1iaG51enyBgoWHiYmKiIeHhYWEhIODg4ODhYaIiYqLi4mJh4eEgHt1cnFwcG9samZjX1xdX2NpcXh9goeKjIyKiYeHhYWFhYWFhY2Ojo+Pjo2LiYiIhomKiomJiIN9eXZ2dXZ2d3l7e3+Dio6Qjo6NjYyLjZKSkY6Li4uKj5KTkY6MiyoqKioqKioqKioqKioqKSgoKCkpKCgoKCkpKSkpKSkpKSkpKSkpKSkpKSoqKisqKisrLS0sLCwrKiorKyopKSkpKSgoKCgoKCgoKCgpKSkpKSkpKSgoKCgoKCgoJycnJycnJycnJyYmJiYmJiYmJycnJygoKioqKiorLCwsLCwsLCwsLC0tLCwsKywsLCsqKikpKSkpKSkpKCcmJiYmJiYlJSUkJCQiIiIhISEgICAgISEgICAgISEgIig1JSYtP1dydGxudHVuaWViX1xfaW5zd3FqYVRHNi1KkJKEdHJydmFPSkxPXVlTUk9DRk1PTktMUFlbUEhISUZITFBOQkFAQENEQYCIhX1uX1FJQ0E+Oz08OTtUhX1xb3BuaGZnZWNfXFZVUEQ1MzMxMTMzNTZNcGxoZmVjbHR0PixPfpigo6KYin1jWndgdn98cjo2b5B/c2tYTk9SUlFXhpaHd21jWFRWWlVCP0RLUldbXV9gY2FaUkhFTFJcYmRna3B5gJmOfXNuZ19aVUAsKicoKCkpJyUlJCMjIyMhIiIhIyw3PD0+P0A/PDg1MzArKCcoKCgoJycmKy4xMzU1NTc7Q01PQkZVWj5BT1xUVllcYk1TXEpSaXZ3cGxlX1dSUFBRUFFTU1NSUU5IREE+PT5AQUVJTU9TVVZXV1dWVldbX2Ztcnd9gYOGh4mJioiHhoaFhISDg4ODg4WGh4iKiouJiYeHhH95dHJxcHBvbGpmY19cXWBma3J5foKHiouLiYeHh4WFhYWEgouSkZGPj46Mi4mIiIaIiomGg314d3R1dnd3d3h6e3uAhYqOkI6OjY2LjJGRj42MiYqKi5CUk5CNjIsqKioqKysqKioqKiopKSgnJygpKSkoKSkpKSkpKSkpKSgoKSkqKisrKisrKysrLCwrKywsLCwsLCwsLCwqKSkpKSkoKCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkoJycnJycnJycmJiYmJiYmJicnJycoKCgpKysqKiwsLCwsLCwsLCwsLCwsLCstLSsrKikpKSkpKCgoKCcmJSUlJSUlJCQkIyUlIiIiISAgHx8gICEhICAgICEhICAiJSgsPlZvdW5xc3ZvamVhXVdWXWlxdnZya2BTRjU4W4mPfHByc2xcUUZHUFRMREFDREdNS0tKTE5dXE9GREJBQEBSVkQ9QT5EPj5ph4F2bWRbVEQ7ODg4Nzc5Qn5+cmxsamhkY19YVldWUkw8Li4xLy4vMDI3NWRyamFgY2dpc185XnyPmZuUioFuTlJeQ2F/dnNHN3KNeGxhR0dHTU5OZIOId2heT1JUUExTVVBTVllcXl9fYmRiYFJKTlddYGRsb2xwj5mOfG9pZWJbWVM9KygmJycoJiYlJSQjIyMkIiEhIiYxOz09P0BBQD47ODY0LSYkJiYnJyUkJigsLzAyNTY3Nzc8SUZGS1BHQ0ZOTVVkYlpUVlZPRUllenFsZl5YUlBQUU9RUVFRUlFMSENAPj0+QERHSk1PU1VWVlZVVFVWWV1janB2fICBh4iKiomIh4aFhYSFhIODg4OFhoiIi4qKioyKh4N+eHJwcXFwbmxqZWJeXV1haG50en+EiIqKiYiGhoaGhoSEhIeQkpKRj46Mi4qJiYmGiIWCfXp3d3Z1d3d3eHl5ent8gIaLjo+Ojo2NjY6RkI+MioqJi4+SlZOPjY2MKioqKisrKioqKioqKSkoJycoKSkpKSkpKSkpKSkpKSkoKCkpKiorKysrKysrKywsKyssLCwsLCwsLCwsKikpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgoJycnJycnJiYmJiYmJiYnJycnKCgoKSoqKSssLCwsLCwsLCwsLCwsLCwrKysrKyopKSkpKSgoKCgmJiUlJSUlJSQkJCMkJCIiIiEgIB8fICAgICAgICAhISAiIictPFZwdW5uc3dwaWZiXFRQUF5rcnh2b2ddUEQ1Nk13hnRtcHNeTFRFRExIRUE/REVHRklJSUlQVlZPRUVGPz49OzlEPz8+PUFASoGAdGxnZFRBOzY3NjQ0NjhifnNtamdlY19cUUxOTUlFNioqLy4sLi8wMThPb2plZGNhYmZwW2N7ipCMhHptUkZGQ0JXfnVwVTp2inRrXEJFR0xLUmt2dWleVFNUVlhDPFBaWVtaXWBiY2RmZWJWUF5naWdseGxdd5OQfG5nYV9dVlVSPysoKCcoJyYmJSUkIyMkIyIhISEpNTw+Pj9AQUA/PTw4NSskIiMjJCQjIyUmKi4xMDM3OTw7Ojk4ODlDTUxMUVtVWF9hV0VJX2RLT3F0bWRdWFNRUE9RUVFRUVBPTEhDQD49P0FDRklOT1NUVVZWVVRUVVdcYmtwd3yAg4eJioqJiIeHhoWEhISDg4ODhYaIiImLioqLioiAfXdycHFxcG5samRhXl1eYmlxdXuAhIiKiomIhoaFhYWEhIWPkZCSkI+Oi4qIiIiJiIJ/fHd3dnZ1dnZ3d3d4eHp7fYOHjI6Pjo6NjYyPkY6NiomJioyRk5WTj42NjCoqKioqKioqKSkqKSkpKScoKSkpKSkpKSkpKSkqKioqKSkqKikpKiorLCosKyssLCwsLS0tLS4uLCwsLSsqKysqKisrKioqKikpKiorKyoqKiopKSkpKSkpKSkpKSkpKScnJycnJycnJycnJycnKCgpKSgoKSkqKiorKysrKy0tLCwsLCwsLCwrKyopKioqKSkpKCgoJygoJiUlJSUlJSUkJCQjIiIiIiIhHyEfHx8fHx8gICAgISEgIycpOVRvdnBuc3dza2VhWlRNSk9daW90c21lW05DNzVJXYFrZmhxU0VHQz1CRUdDQkRFSEZHSUlJS1FRTkZAQkJDRUQ+O0I9PT4/QDpte3JrZmNNQEQ9NDExMjM1O3JyaWVlZWJgWlFLTk9LRTYtKiotLS4vLy43QGluaWZiYFxgamlpd4SGf3hsVD5GQkFLWH14amJCeoZ0ZldAQkhKTFZkZ2VcVFNUVlZFNC44VmdgYF9jZWRkZ2dnXF9pbWxye3JeYIKIfGxlX11cV1FQTj4rJSYnJycnJiUlJSQkJCEiISImMTo9P0BAQENCQD8+OzQsJCIiIiQkIiIkJScqLi8xNTo9PT03MS4rLjZIVlhQUllZaWlMSWJiWkxtdWtjXFhYWlJPUFBQUVFRTkpGQT49PkBDQ0ZKTVBSU1JVV1RTU1VXW2JqcHZ8f4KHiYuJiIiHh4aFhIWFg4ODhIaHiouMjYuKi4mFgHt0cnBwcHBubGpjYF1dX2VpcHV8g4aIiouJiIaEhIWFhISKkZOSkY6Oi4mJiYiHiYR6eXl3d3d3dnd3d3d2eHl6e3+EiY2OkI+Njo2NkI6Li4mJhomOlZaUko6MjYspKSoqKioqKikpKSkpKSkoKSkpKSkpKSkpKSkpKioqKioqKysqKisrKywrKysrLC0tLS0tLS0tLSwsLSwsKysrKysrKysrKioqKisrKysrKysrKiopKSoqKSkpKSkpKSkoKCgoJycnJycnJycnJygoKSkoKCkpKSkqKysrLCwtLS0tLCwsLCwsKysqKSkpKSkqKigoKCcmJiYlJSUlJSYkJCQjIyIiIiIiISAgHx8gIB8fICAgICEhIyUrN1ZweW9scXZ2b2dhXFVNREVPXWducXNrYldKPjQyNGB+aGdtb0pGQz46QENHRURERURHSEhJSUZLT1FUWGRubnFva2NVUlVfUDc5V3hxamdfT0JAOTMyMTIzMTJIcmpjYmFfXllRTElNTk1HOy4qLjEvLi8yMzdKb25pX1xbXWJtc3d7fHVrXEE/QkRNU2Bybl9fTXWEc2VTQUdJSk1aXVpYVlRTVVJAMC40Q19qbW5rZ2dmZ2lpZWNrb3J0emdbV2B6e2xjXVlYWVJQTUo7KiYlJignJyYlJSUkIyIiIiEjLTk8PkFBQEBCQEA/Pjs1KCIjIyMjJCMjJCUlJSgqLjEzNzk4NjIsKysuPFJgWltfYWxmYVBJRlNKZnJuZVxXX15eWU9QUFBQTktIREE+PT5AQ0ZJTE5RUVFRU1RTUVFUWFxja3F4foCDh4qKiomIh4aFhYSEhIODg4SGh4qLi4yLioqJhIB6dHFwcHBwbmtpY2BdXWBmbHN2fIOHioyLioiGhYWFhYOHjI6Sko+Oi4eHh4iJh4B9eXh5eHh3d3Z3d3d4eHh6ent/hIiNj4+Ojo2OkJGMiomIh4mMk5aWk5COjIuLKCgpKSkpKSkoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKiorKysrKysrKysrKywsLCwtLS4uLi0tLS0tLS4uLCwsLCsrKysrKyoqKysrKyoqLCwsLCsqKiorKyopKiopKSkpKCgoKCgoJycnJycnJycoKCkpKiopKSoqKiorKywsLCwtLSwsLCwsLCoqKyoqKikpKSopKSkmJSUmJSQkIyMlJSQiISIjIyIiISEhHyAgICAgICAgISEgISMnNVFueHJucHV1c2xjXVZMQT1EUF1mb3JwaV5XSjw0MTFmfGtob2tFRT85OT1CRUZGRUVERklFQ0ZDQ0xpgpCVmpCGeHZ3aVVfcXlZNz9zbmtlW00/NjIxMTEwLi8xM1hrY2BeXVxYUk1KSUpNTk5HOSsqLS8tLzM0M1JybWFXWFlcYW16dnBqYk08QD9CXWBnYllaWFJtgW1gTkhKTUxPUlJUVFVTUU09MzAzQFNncXR4enZva2lsbGptcnl9clpJWlBXZmZjXltYWVRNSkhENSckJiYnKSgnJSUlJCMiIyAjKTc9Pj1AQEBAQUFAQD88MyYfICMjIiMlJCQjJCQlJygpLC0uKisqKyopKy03UFxSWmNkYmFbXGlbS1tzb2lfY1tAVl9TT09PTUxIR0NAPT0+QUJER0xPUVFRUlRSUVBRU1hcY2tzeX2Ag4eKiomIh4WEhISDgoKCgoODhYeKi4uLioqKiYV+eXNwcHBwb21qaGNhXV5iZ25zeX2DiIqNi4mIhoaGhISGjJCTkZCNi4mHhYWKin97e3h4eHh5eXh2d3d3eHh3d3p8gYaJj5CPjo6NkJKRjIqJiIiLjpOXlZKPjoyLiigoKSkpKSkpKCgoKCkpKSkpKSkpKSkpKSkpKSkqKioqKysrKysrKysrKywsLCwsLi4uLi4uLi0tLS0tLSwsLCwrKysrKysrKywsLCwrKywsKysqKysrKysqKSoqKSkpKSgoKCgoKCcnJycnJycnKCgpKSoqKSkqKioqKyssLCwsLCwsLCwsLCwqKikpKikpKSgoKCgoJiYmJiUkJCMjJSUkJCIiIyMiIiEhIR8gICAgICAgICEhIyQoN0xrd21tc3V2dXFpYVpPQTo9RE9eaG1ubGZeVUg8NDM+dHZoZ25jQUNAOjk/RUNERURDQUVIS0ZCQkhoj6OqqqGVi3x3eHtoV2eCe1QvYG9sZVtLPTYyMjMxLy4vMTI8ZGNfW1lYVlNQTEtLS0tPTUpCNjEtKy0zMSsvWmZeWFVdXV9mb3dqYVlDPTxGYWNiYF1aUFRkZHtkVUdITVBRUlRVVVVRT0g/NDExO05ebXd0cnd4dXJxcXFwcnN0dV1HVk9EUVpeX1tYVVVSTEhFPzImJCcnJycnJiUlJSQjIyIjKDM8PT4/QEBAQEFBQEA/PDIlHyAjIyIjJiYjIyQkJi4pKSYlJioqKisqKyssLjNGSltfX1hgZFpfWUxWcXJiWkUpNE5OTE9PT01MSEVCPz09PkFCRklMT1FRUlNSUVBQUVNYX2Rsc3l9gYSHioqJiIeFhIWEg4KCgoKDg4aIiouLi4qKi4iDfnp0cHBwcG9taWdiYF1eYmhudHl+g4eJjIqJh4WFhYWGipCTkZKPjYuLjIqHi4R5d3l6eXh4eXh3d3d3dnd3d3h6fIOHjY+QkI6OjpGTjo2MiYiHi5GUlpKRj46Mi4opKSoqKSkpKSgoKSkpKSkpKSkpKSopKSkpKSoqKioqKisrKyssLCsrKywtLS0uLS4vLy4uLi4uLi0uLSwtLC0tLCwsLCwsLCwtLSwsKyssLCwsKysrKysrKyorKyoqKiopKSgoKCgnJygoKCgpKSoqKioqKiooKioqKioqLCwsLCssLCwsLCwsKikoKSkpKiooJyYmJiUlJSUlJSUlJSYnKiolJCMiIiEiIiEgICAgICIjICAhISUoMElqd21obnR4dHNuZlxTQzc2P0hRXmhvcGxnXFFGOjQ2UH5yYWJsX0FCQTo2P0VCQkJDQ0BDSFFKP0heip6lraWUjpKUioGBcVpifYl3O0Zya2VaT0A2MjIyMzMvLjE1NT5eYFdWVVRTUk5MTU1LTExLS0g8LyksLy0mJzRfYl9bWFteZGVxbl5SPTtAXl9VWlpcV1BHUFFrYFBDSkpNTlJYXGBdWk5FOzMxM0VZZnB2dXFwcnFtamxvb25ubHBLT1VHRlFbXVxaVlVUTkpGQjotIyMkJSYnJyUlJSUkIyMkJzI5Ozw+Pz9AQUFBQUBAPzovIyEgISIiIiMmIyEiJSkrKSkrKyoqKysrKywqLC8vMURWbWlnZl9malhSVm5naGBOKzFGT1BOTk5MS0dEQT49PT5BQkRHTU9QUFJSUVBQUE9SWWBnb3V7foKFiImJiYiHhYSEgoGCgoGBg4SGiYqLi4uLiomFgn55c29vb29ubGhkYWBfYWRqcHZ8gISIiYuJh4eFhIWGi5CRlJKPjo6Oi4yNjIV8e3l6eHl4eHd3eHh4eHh4eHd4e36Ei4+Qj4+Ojo+SkY2Mi4qKiYyUl5aTkY6MjIqKKCgpKSgoKCgoKCkpKSkpKSkpKSkqKSkpKSkqKisrKiorKysrLCwsLCssLS0tLi4vLy8uLi4uLi4tLiwsLSwtLSwsLS0tLSwsKyssLCssLCwsLCwsLCwsKysqKysqKioqKSkoKCgoJycoKCgoKSkqKioqKioqKCoqKioqKiwsLCwrLCwsLCwsLCooKSspKSkpKCYmJiYlJSUlJSUlJSUmKjAwJiMiISIhIiIhICAgICAhISEhIyUmMUZkeW9na3J4dnZyamFXSjgwN0FKVGBpcHJtZVtPRDgxPGGDcGVmblpAREA5NjxDREFBQ0NCREVIRUtkg5mgpKynnZWYnI99dnRqhY+RhmUzcGplXFJDMi4sLCoqKissLzAvO1ZcV1NQUE9OTUxNS01LSklIRUA1LjEuKSQpOlpeYWJjYV1eaGhhSDpCVVpXW2BhWVJMSURHTlhNRkxRT09SVVthX1ZMQDkzMDdKX2tvdHZzbm1sZ2VpamdnX1xaR1pOSUhSXV5cWlZVUkpGQ0A1KiQkJCQnJyYnJiYmJSMjJjA4Ozs8P0A/QEFBQUFAQD86LyMjJSEhIiIiIiMjJScoKioqKysqKisrKysrKy4vMzhAVGJobW9pZGVVTVdpamVeXFhVT05NTk5OTEpGREE+PT0+QUJHSk1OUFBSUlBQT09OU1pgaHB1e36ChYiJiYmIh4WEhIKBgoKBgYKFh4qKi4uLi4qJhYF9dXFvb29vbmxoZGFgYGJmbHJ4foKGi4yKioiHhYSGio6SkpOSkI2Njo2Ojo1+eXt5eXh4eHh3d3d3d3d3d3d3eXyCh42QkJGRjo6QlZCNjIuKiouQlZeVkpCOjIyKiigoKCgpKSgoKSkpKSkqKioqKikpKyorKyoqKysrKywsLCwrKywsLCwsLC4uLS0vLy4uLi4uLi4uLi4tLS4uLi4sLC4uLS0tLS0tLCwsLCwsLCwsLCwsLCwsLCsrKiorKygoKCgoKCgoKSkpKSkpKSkqKisrKiorKysrKysrKyssLCwsLCwsLCsqKikpKSkoKCcmJSUlJSUlJCQkJCQkJiYpKCUjIiIhISIiISEhISEhICAhIiQpLUBhdXNra3J2eHh0b2VcTT4wMTpEUFpianFyaWNYTEM3MUV1gmxnanFWQUY+OTk/Q0RDQkJDQUNFRElhgZejpqiqrKqhnJmWh3Z5epKOjY58RWRsZmBXT0dHRkVFRkVGSkxXWlRITFJTUk9OTUxLS0tLS0hHREREPjczLionIyU+WVlXW1xdXV5dYlVJUllSVFdWVVNNSkdANDtFQURJTUxMUVRXXFxWSTw3MDE9UGBscHR2dG5raGdmaWlnZV9bTlVSR0hNWmFhXltVU01HREA9MSgkIyMlJSUmJiYmJiQiIis1OTo8Pj4/P0BCQkFBQEA/Oi8jIyQjIiIhIyMjIiIlKCgqKisrKysqKiorLC4xNDg9QkRHVGZnZ21pTkxeampkYFpUTExOTU5OTk1LR0NAPj0+P0FERklNTVBQUFBQUE5PT1VaYmlxeH1/g4WIiIqIh4WDg4KBgIGBgYGDhoiKioqKiYiIiIR/enRwb29vb21rZ2VjYmJjaG51en6CiIyMioiHh4aGipCSkpGQjo+Pj4+Rjo6BeXl4eXd4eHh4d3h4d3d3d3d3eHp9hImQkpKQjo6Ok5ONjIyLiYiLkZaXlZGPjYuLi4ooKCgoKSkoKCkpKSkqKyoqKioqKisqKysrKisrLCwsLCwsKyssLC0tLS0uLi0uLy8uLi4uLi4uLi4uLS0uLi4uLC0sLCwsLS0tLSwsLCwtLS4tLCwsLCwsLCwrKysqKysqKCgoKCgoKCkpKSkpKSoqKiorKyoqKysrKysrKysrLCwsLCwsLCwrKiopKSkpKCgmJiUlJSUlJSUjJCQkJCMjJSQiIyIiISEiIiEhISEiIiEhIyUoMT9bdnNra3F2dnZ2b2ZcUUI0LzU+SFVeZm5xbmdfVUk9NjdWe4JsZmlxVD9FPjk5QkVFRENDQ0JDRUhZcIuXmqSsq6quo6GenJRyhod/gIiShmlRZF9dXVxZWVZUVVRTVFRSV1dZW1NOTU5LTEtMS0pJSUpIRUVCQT46NzMtKCYnJkNXUFBXXFlXWmBiVVVXWVVUUlBLR0JCPzQzPkhDRUlKTE9RVVhXUUY9NzIyPk5daHB4eHFraWlmZmZnaGdYRDhGTUpIUl5gYVxYVVBIREE9OSwlIyIjJCQlJiYmJiUjIyYwODs8PkA/Pz9AQkJBQUBAPTsvIyAgIiIhISMjIyIiJScqKioqKioqKioqKy8wNjk/PD08P0RLUV9xbUlHWFlfZGVbU1ZRTk5OTk5NTEhFPz09Pj9CRkhLTU1QUFBQT09OT1FWXGJpcXp+f4OFiImJiIeFg4OCgYB/gYGBg4aJi4uLiomIiISAfHVxbm9vb29samdlYmNlZmpxd3uAhIqNjIqJiIWFiZKTlJGRj4+Ojo6Pjo+Gd3l8eXl6eHh3d3h4eHd3dnZ3d3h6foWLkpOSkY+PkpWRjYyLioeKjJKVlZWRj42MjIuKJycoKCgoKCgpKSkpKSkrKysrLCwrKysrKyorKywsLCwsLCwsLS0tLS4uLS0vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLi4tLS0tLi4tLS0tLCwtLS0tLS0rKywsKysqKiwsKyoqKikpKSkqKikpKSkqKioqKioqKioqKysrKysrKyssLCwsKyoqKikpKCgnJycnJiUlJSUlJCQkJCQkJCQkJCYkIyMjIyIhIiIhISEhIiIjIiUpMT1Yc3FqbHBycnNybWRZTkM1LzA3Qk1WYmlvcGtlW09DNzVCZX5/bGhmbE9AQ0A4N0JHRUNDRUZDQEBOa4GQlpaep6qqrKKjo6SijH2DiYuUmop6UllYV1VUT09QUE9PT09QUFJWW1tVUElJRkVFRkVFRkhISEhFQT8+Ojg1MywnJiguUFpVU1VUU1VZXWJXUlJOUE5LRkE9P0E3LjM9QUFERktNTlJXWVFGOjgzND5LV2VscnNsaGhnZmZmZ2hpY042QEZFSVheXlxYVVNLRUI/OzUpIyMjIyMjJCUlJCQjIyMpMjk9Pj9AQD8/QEFAQEA/Pz46LiMhISIiISEiIiIiIiQmKysrKSoqKioqKiwwNDY2NjY4OTxDRkVIVVRGR1xSXWVmW1dcU01OTU5OTUtHRD89PT9AREdIS01NTk5OT1BPT1BRVl9ja3J3fX+DhYiKiIiFhIKCgICAfoGAgYSHioyNi4qJiIeEgHl0cG9wcG5ua2lnZWVjZ2hsc3h9g4eLjY2MioWGh46Sk5KQj42Njo6Pjo6MenN6enh5eXl5eHh3d3d3d3h6eXd3e4GHjpOTkpCQkJWVkI2Mi4mIipCTl5WUkI+NjY2MiScnKCgoKCgoKSkpKSkpKysrKywsLCwsLCwsLS0tLS0tLCwtLS0tLS0uLi4uLy8vLy4uLi4uLi4uLi4uLi4uLi4uLi4uLS0tLS4uLS0tLS4uLS0tLS0tLCwsLCwsKyssLCsqKiopKSkpKiopKSkpKioqKioqKioqKisrKysrKysrLCwrKyoqKiopKSgoJycnJyUlJSUlJSQkJCQkJCQkJCQlJCMjIyMiISIiISEhISEhIiMnLTdQb3Zqa25wcnJxZ2BWTD8yLC4yPEdSW2Ztb29pYFhLPzIxSXF9f2xnamxMQENDOjhAREVERUdHQz9DXn2MlZiSlZqjrrCusK6pq5J0do6joaOWg2BRVVNSUVFRUVFSUlFRUFBRU1RTVlFNS0dFQ0JAQUA/Q0NCQkA+Pjo5NjMwKiUnKjJSX1hQUlVSUFRhW0RJQ0VGRUI+PD4+NS8sLTpAQUVKTE1OTlBPQzk3NDM6SFVeZ2xtbGloZmZmZV9YVkxPVUxDRk9aXlxaVlNPSEM+PDkzJyQjIyMjIyQlJSQkIyMjKTM6PT4/QEBAP0BAQEBAPz8+Oi4jISEiIiEhIiIiIiEiJCgqKikqKioqKiosLzM0NDQ1NjlAR0lJSU1DQEFVaG9uZmJjZ1NMTU1OTUxKRkNAPz9AQURHSEtNTU5OT1BSVFRUV1lfZmt0en1/g4eJioiIhYSCgoCAgH6BgIGFiI2PjYyKiYiGg395dHBvb29ubmxqZ2VkZWhpb3Z7f4OHi42LiYmHhouUkZKRkY6OjY6OjY6PgXN4e3t5eXl4eHh4d3d3d3d3d3h4eXyCiI6Sk5KRjpCUkY2MioqIiYySlZeVlJCPjYyNi4onJygoKCgoKSkpKiorKysrKyssLCwsLCwrLS0tLS0tLS0tLS0uLi4uLi4vLy8vMDAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi0tLS0tLSwsLCwsLCwsLCwrKioqKSkqKioqKioqKisrKioqKisrKiorKysrKysrKywrKioqKioqKSknJyYmJiYmJiQkJCQkJCQlJCQkIyQkJCUjIiIiIyIiIiIhISEjIyUoKjdLanlwaWxtcHBtZVxRRDkxKysuOEBLVmFqcHBsZVxRRzszNVl7eX9sZ2tuUUBFQzw3P0RFRUZIR0I/Tm+Fj5WYkImPoa+5uru4qqeSfJCTmKKen41zTVVYWFZXVlNSU1NSUFJSVVVVVVdQTkpIRkZFRUNCQkFBQUFAPj48Ozo2My4pKCsqNVRdW1hTUU9SW2FKOz8/Q0I/Ozg4NzMvLS05RElLTE5QT09RTz82NTIuNURRV1ldZGloa2tmZ2lcT1c4TFlLR05ZXVxaVlNRS0RAPDo5MSYjIyMjJCIjJCQjIyMjIik0PT8/Pz9AQUBBQUBAQEBAPzwtIyEgIiIiIiIiIiIhIiMnJykqKyorKSkrKy0xMDI0Nzk2Njk9QEVEP0NGQUtmZ2BfXFpVTk1OTk1MSkZDQT8/QUJFSElKTExOTlBSVldaWl1hYWVtdHt+gISHiYqJhoSDg4KBgH9+gYGCh4uOj4+LiomIhoF8d3Jvbm1tbm1qaGdkZWZqbHB3fYCDiIuOjIqHh4qQk5GQkI6Njo2NjY2LiHp1eHx9enl4eHh4d3d3d3d2dXV4eHl+g4qQlJORj46Tlo+Mi4uIiIqOkpWWlJOOjY2NjYuKJycoKCgoKCkpKSoqKysrKysrLCwsLCwsLC4uLi0tLS0tLS0tLi4uLi4vLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4tLS4uLi0sLCwsLCwsLCwsKyoqKioqKioqKioqKiorKyoqKioqKioqKysrKysrKyssKyoqKioqKikoJycmJiYmJiYlJSQkJCQkJSQkJCMkJCQkIyIiIiMiISEiISIiIyMnLjdFZnlya2tubWxrY1hLPzQsKSktMzpHUFtmbXFwa2JYTUE1MTZee3l+bWVpbmA/Q0M+OD5FRUVGSUhESGF3iYyQlJKDi6Sxubu8urKvqaqsrp2goKWXf1xYWFhWVFRUUFFRUVBQUVNVWFlZVFBNRkZFRURERURDQ0BAQUA+Pj07Ozk1MC0rLC43VVVXV1JRUFRaVUI7Oz4+PTs4NzUxLy8yPkhMTU1OUFBPUVVHKC8wLjI8RU9TVl5iYmVnaWhraWRfUVFUT09XWltYV1RPSkRAPzs5NS0lIiIkIyIjIyQkIyMjIyIpNj5BQEFBQUFBQkFAQEBAQEA+LyMhICIiIiIiIiIiISIjIyQkKCkoKSoqKyssLzEzNTY1MzY2OD0/PkNDQz1JX2ZmXFpUVU9MTk5NTEpGQ0E/QEJDRUhKTExMT09SVVlaX2FlZ2dscHd7foCEh4mHh4aEg4OCgYB/foGBhIiNj4+OjIqJhoN/eXRwbm5tbW5tamhmZWZnam10eX6ChomOjoyKh4iOk5GRj46NjI2Ni4uLioB1dHp8e3t6eHh4eHd3d3d3dnZ2eHh5foWMkpSTkY+Qk5GNi4yKiIiLkJSVlpSSj42NjY2LiigoKSkqKikpKSoqKioqKisrKystLS0tLS0tLS0uLi4uLi4tLS8uLi4uLi4wLy8vLy4uLi8uLi4uLi4uLi4uLi4vLy8vLy8vLi8vLy8vLy8vLS4vLi4uLi4tLCwsLCwrKywsLCwrKysrKysrKyoqKioqKioqKissLCwsKysqKiorKysrKyoqKSkoJycnJiYlJSQkJSUlJSUlJSUkJCQkJCQkJCMjIyMjIyMjIiIiIyQnKzE9WnhyampxcHBoXVRIOC0oJSYpLTU/SVReZm5vbWVdUkY7MjA+Z3d2f2tiZWx2Sz9EQDo6RURERkdGTGB0f42Iho6RhJGjsbW2uru2ubu6u7qupp2inopqWlZSUlFTU1RQUE5NTVJUUlRVVVNRTktIRkVEQ0RDQ0NCQkJBQEA+PT09OTg0MS4uLkFXVlFQUVBPTVVWOzU7PD06ODQzMjAxOUdNTk1OTk5OTlFTU0c9KSgvNTtDSk1WW19iZGZnZmNhYlVWVEtQWVtbWVVRTUVBPDs6NjAnJCQkJCQkIyMiIyIiIiIjJzI+QUNDQkA/P0BCQUFBQUA/PTMlISAgIiEhISEhISEhISEiIiImKSkqKisrKisvMTMyNDQ2ODs7Ojk9PUJHTVJbZmJhXFZQVFFOTk1KRkJAQEJCQ0ZJS01MTU1RVVpcYGVrb3BwcHR3fYB/g4eJiYiGhISCgYGAgIGBhIeKjY+PjIyLh4R/e3dyb25tbW1sa2pnZmZnaWxxd3uAgoWKjo6KiYiMkpOTkpCOjo6OjImHi4h5d3h7fX16eXh4d3d3d3d3d3d3d3d4eoCHj5KTkpGPk5ONi4iLioiJjJGTlZaTkI+PjoyLi4koKCkpKiopKSoqKiorKysrLC0tLS0uLS0tLS0tLi4uLi4uLi4vLi4uLy8uLy8vLy8uLi8tLi4uLi4uLi4uLi4uLy8vLy8vLy4uLi4uLi4uLi0uLy4uLi4uLSwsLCwsKyssLCwsKysrKysrKysqKioqKioqKiorLCwsLCsrKiorKysrKysqKikpKCcnJyYmJSUkJCUlJSUlJSUlJCQkJCQkJCQjIyMjIyMjIyIiIiIlKC04TXJ4cG1xdHJpX1NGNSknJSUmKTA5Q05XYmtwbWhgWU9AMi8wQ214eIFtY2NuenI9QT86OEFDQkVBR192g4CQjoeOlJOZoKSvrrC5vLy5s7C1tLWpqaGPd1VUWWVzeXl5eXVtXk5MTE5OT1JSUE5LSEZFREVDQ0NDQkJBQEBAPz49PTo5ODYzLi4sQFNQT05OS0tNUVI6Njk6ODY1MjIwMj1LUE9OTk5OTk5QVVVUVDkyOTo7PUFGUldaW19iYGFfXF9ZU05LT1haWVhTUEo/PDk3NTAqJSQkJCQkJCMjIyMjIyIiIyYvO0BBQ0JAP0BBQUFCQkFAPzw1KSEhISEhISEhISEhISEhIiIiJCYoKiooKCkqLC8wMTI0NTQ3NzU1Njk5O0JKU2JsYlpSUE9TUE1NSkZDQUNDQ0RISkxNTE5PUlVbYWZrcnZ3eHh4eX2AgISHiYmHhoSCgIGBgICBgoSHio2OjYyKh4SBe3lzb21tbW1tbGtpZmdnZ2ltcnh8gYWIi42NioiJkJKSkI+PjY6OjouHh4x/eXl7fHx8enl4eHd3d3d3d3d3d3d3eHuCh4+TlJKRkZORjIuLioiIi4+TlZWVkpCPj46Mi4qIKSkpKSoqKioqKisrKysrLCwtLS0tLi0uLi4uLi4uLi4uLi4uLy4vMC8vMDAvLy8vLy8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4tLCwsLCwsLCsrKysrKysqKioqKisrKyssLCwsLCwrKyorKysrKysqKioqKiknJiYmJiUlJCQlJSUlJSUlJSQkJCQkJCMjIyMjIyMjIyMjIiMkJys0R2l2bmpxdnZuY1ZGNSckJCQlJikxOkVQWmRscGtmXVJHOi4tNFVzeHh/bGNhaHd+VTpANzY/QUNEQVF1hoyGkpWTlpaTl5qbpaasub68s7Oys7GspKimlIBeYnR+fn18e3h4dXRrYFlYV1VSUk9MSkdERUZGREREQkNBQD8/QD49PDs6OTg3NTQuLS8/T0xNTEpJR0lQTDY2OTY1MzEwLzVDTVJSTk9NTUxMTVBTV1xWRjs5PDs9QElQVldaWlpZW1pZVVBMTFNYWlZSTkxDOTg0MCwoJSQkJCQkJCQkJCQjIyMiIiMkKzhAQUJDQkFBQUBAQUE+Pz88NyohIiIhISEhISIiIiIiIiMjIiIkJisqKSoqKSoqKiovMjI0NDAxMC81NzxARUpbZmphWVRPUFBOTEtHQ0FCQUVGSUtMTU1NTlFVXWFpcHh8fX17enp+f4KGhoiIh4eEg4GAgYCAgYOGiIuNjoyLiYaCfnl0b21tbWxtbWtqaWhnaGhqbnR5foGGio2PjIqJjZKRkI+Oi42NjYuIhomIeXl5fH17e3p5eHh2dnd3d3d3d3Z2dnl9g4eQk5ORkJGTkIyNioqIiI2QlJWTlZGQj42MjYyJiCkpKSkqKioqKysrKyssLCwtLi4uLi4uLi4uLi4uLi4uLi4uLi4vMDAvLzAwLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi8vLi4uLi4uLi4uLi4uLi4uLi4uLSwsLCwsLCwrKysrKysrKioqKiorKysrLCwsLCwsKysrKysrKysrKioqKiopJyYmJiYlJSQkJSUlJSUlJSUkJCQkJCQjIyMjIyMjIyMkIyIjJSgwPV55c2ludnZxZ1pMNigkIyQkJSYrMztGUVtlbm5qYVpNQTMtLThceHdzfnBhY2h0gHVAPTo1PEBBQ0xmho+QlJaWmJmShIyRkZqgpLK2t7Sxr6ytn5mWlpSNbnR7enZ3dnd0c3NzdHFvbWpoZGJdWVRSTkxFRERCQUJBQEFBQD89PTw7Ojk4NzU0MzAtLUBNR0dGRkZGS1FGNjg2NTMwLy84SVFTU1FPTU1LS0xMUFJZV1hMOzY5PD1DSk1SVFZUVFRVVlFNTVNYWVZTT0xJQjgxLyslIyQkJCQkJCUlJCQlIyIkIiIjIyYyPT9AQUFDQ0E/PUBCQkA/PjgsIiIiIiEhISEiIiIiIiIjIyIiJCQrKSorLCooKCgrMC8vMC0qKjE0MDM4Nzk+T1dhV1FaWVFQTUtJRkNAQENFRUhMTUtNTUxPVFtjanN6f4GCgH5+fn+BhIaIiYaGg4OBgIGAgIOGh4mKjY6Li4iFgnt3cm5tbW1sbGxramhoZ2hoam91en2BhoqNjIuJio+SkY+OjY2OjYuIhoaMhnp4ent9e3p6eHd3dnZ2dnd3d3d2dnZ5fYOIj5ORkJCTk5CMjI2Jh4eMkpSUlZORkI+PjoyLiYgpKSkpKioqKysrKywsLCwsLS4uLi4uLi4vLy8vLi4uLi0tLy8wMDAwMDAvLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8tLTAwLy8vLy8vLy8uLi4uLy8vLi4uLi4uLi0sLS0tLSwsKysqLCsrKyssLCwsLCwsLCwsLCwsLCssLCwsLCsrKysqKiopKikmJiYmJSUkJCQkJCQlJSQkJCQkJCMjIyMjIyMjIyMkJCMjJSksNk5zd2xqcnVxa19POiokISIiIyQnKzM9SFJeZGtqZV1SSD0xLDVIa31/fYBzYmNodIB/ZTU5Njg/Q0JbfJCTkZmemJSclIeKj5GYpKOpq6+ztKmjnY+RkIyGj3RndHV1dHJxcm9vbm5ubGxpZmJgX19eXFxcWFVUUU1KSEVBPT0+PT09PDo5ODc2NTIxMC4uPEtIRUZDQkJHUkE2ODcyMTExPUxUV1dTUVBPS0tLS01RUlNOVFNFPD0/QENIT1JVVE9OTkxQUFBQUlJQTktJRD42Ly4rJiUkJCQkJCQkJCQkJCQkJCMjIyMkKzg+QEBAQEJBPj4/Pj89PDs1KyIhISIiISIiIiIiIiEhIyMjIyQkJygoKikpKCsuLywrKSopKSotMTc8PUNHTldbYW90YlVPTk1LR0RCQEFFSEhJS01NTU1MT1JaYmt2fICBg4KAfnx/gYWHiIaGhIODgYCAgICEh4iKjI2Mi4iGg395c29ta2trbGtra2lnZmdoaW1xdnt/gYaKjY2LiI2Qko6NjYuNjYyJhYSKjYB8eXl7fHt7eXh4d3Z2dXV2dnZ2d3d4en6Eio6SkY+Qk5KOjo6OiYmKjpOVk5SSkY+PjYyLioiHKSkpKSoqKyosLCwsLCwtLS0uLi4uLi8wLy8vLy8vLy8uLi8vMDAwMDAwLy8vLy8vLi4uLi8vLy8uLi4uLi4uLi8vLS0vLy8vLy8vLy8vLi4uLi8vLy4uLi4uLi4tLC0tLCwsLCwsLCwrKysrLCwsLCwsLCwsLCwsLCwsLCwsLCwrKysrKioqKSgnJiYmJiUlJCQkJCQkJSUkJCQkJCQjIyQkJCQkJCQkJCQjJCgrMkVrfG9rcHR0bmNVQi0jIiIiIiMkJy01PUhSXWZqamJYTUI3MDVHaXx+fXZ9d2JkZnCAgn5INzc2PUFIaoqXmpaYo6SbnpuQi4yOmKKmrayusa2mnJOLiIuLhIiAa29vcXFwbW1ramtqaWloZGJlYF9fWllYWFhXVFFTUlNSUlBHPz09Ozo6OTg3NzY0MjIuLi49REJBQ0JCRElUPjY2NDAyNEJPU1ZXU1NQT0xKSkxMTVFTTU5UU0xCP0BCRElNTk1NSkRERUdIRkREQ0VGQ0A5MSwrKScmJSUkJCUlJCQkJCUlJSUlJSUlIyUsNjw/Pz9APz8/QD48OjgzKiMiIiEhIiEiIiIiIiIiIiMjIyMkJCYnJycmKiwwOTwzKCgnJicpMT1DRU1QUVVWWV9wgHleWE5LTElBQEJCQ0ZHSUtNTk5OTU5PVV5ncnuAgYOCgH5/f4GFh4eGhYKCg4GAgIKChomKi42Mi4iHg4B7d3JubGtra2xra2tpZ2ZnaGltcXZ7f4GGjIuLioqRkZCNjYyMjY2Lh4OGjIZ8enl6fHx8e3l4d3Z2dnV1dnZ2dnd3eHp+hIqOkI+OkZWQjY6NjIiJjJGTlZOUkpGQjYyLiomHhikpKSkrKywsLCwsLS0tLS0uLi4uLi4vMC8vLy8vLy8vMDAwMDAwMDAwMC8vMDAvLy4uLy8vLy4uLi4uLi4uLi4wMC8vLy8vLy8vLi4uLi8vLi4uLi4uLy8vLy4uLi0tLSwsLCwsLC0rKysrKywsLCwsLCwsLS0sLCwtLCwsLCwsKysrKyoqKSkoJycnJiYlJSUlJSUkJCQkJCQkJCQkISMkJCQkJCQkJCMkJCQoLjxgf3RscXZ5cWhaTjUkISEjIyEjJScuNTxHUVtkaWVhVkpBOTY/XYKIfnp2e3toYmJsfoSDdDE5NTxAT3aRm56foqGkoJydmY2MjZOepKWkoaCfnpiRint0eHV7imlra2xtamtpZ2doZmZkYVtWW1xaWFpYVFFQUE9NTU1NTlFTUkdBPDs5Ojg5ODg2NTUxLzAvMkZHRUVCREVJUlA2MzMyMTZHUVRUVVVSUk9NS0tLS0tNTVBPTk9MRDYyOj9BRUZHSEZCQ0NDQj9DRklKSEZBPDArKCcpJycnJiYlJSQlJCUnJyYmJiQkJSUlJiowNzs+Pz0/QD88ODQtJiMhIiMhIiIgIiIiIiIiIiIiIiIjJiYlJicnJygnKTQ6LygmJScnKzE7QkVKTlFTU1dYWWp+XV5vUEhHQ0BAQEJFRklLTExOTk1OTVFXY212fYCBgX59fX6Ch4mJh4WEgoKBgYGDhIiKi42Mi4iHhoJ9d3RxbGtra2tra2tqaGZmZmdpbXF2e3+Ch4uLi4uOkZCOjo2NjoyMiYSCioyBfHl5fHx9e3p4d3d1dXV1dXV2dXZ1dXh6f4WJjY+Pj5KUkI6OjoyJio6RlJSUlZKPjo2NjIqJiIcpKSkpKSosLCwtLS0tLS4uLi4uLi4uLzEvLy8vLy8vLzAwMDAwMDAwMDAwLzAwMC8uLi8vLy8uLi4uLi4uLi4uLy8vLy8vLy8vLy4uLS8vLy4uLi4uLi8vLy8uLi4tLS0sLCwsLCwtKysrKyssLCwsLCwsLC0tLCwtLSwsLCwsLCsrKysqKikpKCcnJyYmJSUlJSUlJCQkJCQkJCQkJCQkJCQkJCQkJCQlJSQmKTNPeX9xcHd9enBkVEMtIyEiIiMjJCYoKzM8R1JcYmZkYFVLRENMYHuMhnp3dnp8aWFganyEg4haKzI2PlV6kJudpaalp6KZoJ+UjY6Ol52fop+dnJSKf3VpYmFcbod2X2dnaGhmZWNiZGViX19fXVpYWlhWUU9NSUlJS0tLTEtLTU5NR0M/PDo5OTg3NTU1NDExMC45SEVCRURGRkpPRjIyNDM3SFJVVFRTU1NRT01LSktMS0tNTUtLSj8wJScsMjk7Q0dGREBAQUBCRkpJSEZDQDYvKicnJyYnJycnJiYmJSQlJygnJycmJCUlJSUlJiotMzg6PT47NjEqJCIiJSQiIyQlISIiIiIiIiIiIyMiIyQkJSUmJicoJicoJicoJyYmJScqMjY+REdNTlBTWmNugWFOXlxJQ0E/P0BCRkhJS0xMTk5NTkpPU11pcXl/gYF+fXx9hIaHiIaFhIKCgYGBgoWJioyMi4mKh4SAfHdzbm1sa2tra2tramhmZmZmaGxxdnt/goeLi4yMkJKRjY2NjY6MioeDhIyIf3t2eHl6ent5d3Z3dXV1dXV1dXV2dXV5e4GGjI6Ojo6UlI6Njo2LiYuOkZSUlZSSj46NjYuJiIeGKioqKiwtLCwsLS4uLi4uLi4vLy8vLzAwLy8xMS8vLy8wMDAwMDAwMDAwMDAwMDExLy8vLy8vLjAvLy8vLi4vLy4uLy8vLy8vLi4uLi4uLi4vLy8vLy8vLy4uLi4uLS4uLi4uLiwsLCwsLCwsLCwsLC0tLS0sLC0sLS0uLi0tLCwsLCsrKiopKSgoJiYmJiUlJSUlJSUlJCQlJCQkJCQlJCQkJCQkJCUlJSUlJys7ZoF3cXJ7gXlrXk06KCMiISIjIiMmKCoxOkVPWmBjY2BWT1FcbX2IjId4eHZ8fWtgXmR6hIiQjkMrMjxUeo2Xn6epqqmlnp+hmo6LiYmPkpiam4uFfndsZ2hpYXF9hF1iZmhmZGJfZGJiYF5dW1lWVlZUUU9LSUdHRUZISElKSkpLTU9PSEM8OTc3NjU2NjUzMzMvMENLR0ZHR0NGSU0/MTEyOkdSVFVTU1JTUVBOTUxMTEtLSklHRkQ6LCMkJCUpLTY8PT48PkFBQkZJRUNBOjQsKCgnKisrKigpKCcnJiYmJiYmJyYnJyYkJiUkIyMjIiUrLjIzMS0nIiIiIyQlIiIjIyMiIiIiIiMiJCUlJiYpKycmJiQmJiUlJycmJicnKCgpKSwuMTg9RUpQV2BqdnVcWVxqXkdAQUE/QUZISUtLS0xOTUtKTFBXZW12fH5+fn16foWIiIeGhIOBgYGBgIOIiouPj4uKi4aFgXt3c25ra2trampramhnZ2dnZ2hscXZ8f4SJioqNkJGRkI6Pjo6OjImFhIeMhH56eXh5e3t6eHZ2dXR1c3V1dnZ2dXd2eH2AhYuOjoyQlJKPjo6NiomNkZOUlZSTko+Mi4uLioiHhioqKiosLSwsLCwuLi4uLy8vLy8vLy8wMC8vLy8vLy8vMDAwMDAwMDAwMDAxMDAxMTAwLy8vLy8vLy8vLy4uLy8uLi8vLy8vLy4uLi4uLi4uLy8vLy8vLy8uLi4uLi0uLi4uLi4sLCwsLCwsLCwsLCwtLS0tLCwsLS4uLi4tLSwsLCwrKyoqKSgnJyYmJiYlJSUlJSUlJSQkJCQkJCQkISQkJCQkJCQlJSUlJiksP3GEdHJ5gIJ1ZllGMSQjIiIiIyIjJScqMTlET1pgY2RhWl1ncX6GiYqEeX5/gH9qYFxedoePjIx6Ni81T3eLl6Cnqamop6KcnJeLh398goySkYp5dXZzZmFna3J9dX5sVl9jYmBcXF9dXFtcWFZTU1NRUE1LSEZEQUFCQUFDRERERUdJSUpHQjw4NjY1NjY2NTMzMjI3S09HR0dHSkdITD0wMjhGUFRUVVNSUE9QTk1MS0tLS0pJRkVCOCojIyMlJicmKSsvOjw8QERERUZCNS0qKy0tLSorKyopKikoKCcnJiYmJiYmJiUlJiYlJCQkIyIjIyIkJCIiISIiISMjIiIiIyMjIiIiIiIjJCQpLDE1OTc1LiknKCglJScnJiYnJygoKCorKiwvN0RNVFhbXFteaGlXUEpDPz4/QUNGSElLS0tLTE1LSkpPVmJpdHp+fn59en+Dh4eHhYSDgYGBgYKHiIuMj46LiomEhH96dnBsaWtsbGpqamlnZmZmZ2lqbnJ3e3+GioqKi5CPjo6OjI2OjYuHhIWLiIF9eXh4eXt7e3l2dnV0c3R1dXZ2dnV1d3l+g4iLjY2OkpSQjo6OjImJjZGTlJWUkpCOjIuLi4qIh4YqKisrKywtLSssLi4vLzAwMDAwMDExMTExMTExMDAxMTAwMTEwMDExMTExMTExMTExMTExMDAvLy8vLy8uLi4vLi4vLy8vLy8vLy4uLi4vLy4uMDAvLy8vLi4uLi4tLS0tLi4tLCwsLCwsLCwtLS0tLS0uLiwsLC4uLi4uLS0tLSwsKyoqKikoKCgmJiYmJiYlJSUlJSUkJCUkJCQjIyMjJCQkJCQkJCQlJSUrLkBvgXV0eYCAcF9RPSskIyMjIiMiIyUoLDA4Q05YXmFjX19rdX2FiYuLg3yDhYF8bV9bXHSFe252fmIyMURwhZSdpaioqKijnJmThH9/d3V/hIF1Z2VscWpgZVpwcF1xeVVTV1lZWVpaVldWVFNTTk9QTExLSUZEQT89PDs8P0BBQENFRkZFQ0NBPDc1NjQ0NjU1NTY2MjtLSUNEQ0hISElOPTE2RlBUVVRUVVNQT05OTU1MS0tJSUdFPzUlIyMkJCUmJycoKi0yO0JGREE7Mi0tLC0tLSwtLCorKigoKCgoKCYmJSclJSUlJSUlJCMjIyMiIiIiIiIiIiMjIiIjIiMiIiMjIyIiIyMjIyUqMThBR0lIRDwzKiQjJSUmJiYmJycpKisrKSssMDtFTEpPUFZdY15VTkpFQkA/QEFDRkhISktLTU1LSklKT1RdaHJ5fn+Af32Cg4aHhoWFg4CAgYCDh4mMjo+Oi4qKhYJ9d3NuamlqampqampoZ2ZmZ2dpbHB0eHx/hYmKio6Pj46OjY2OjY6KhYOIjIR/e3h3eXp7enl4dnZ1dHRzdHV2dnV1dnd6foSJjI6Nj5SSkI+OjYqKi42Sk5OUlJOPjoyLi4qJiIiHKiorKyssLS0uLy4uLy8wMDAwMDAxMTExMTExMTAwMTEwMDExMDAxMTExMTExMTAwMTExMTAwLy8vLy8vLi4uLy4uLy8vLy8vLy8uLi4uMDAwMC8vLi4vLy4uLi4uLS0tLS4uLSwsLCwsLCwsLS0tLS0tLi4uLi4uLi4uLi0tLS0sLCsqKiopKCgoJycnJiYmJSUlJSUlJCQlJCQkIyMjIyQkJCQkJCQkJSUnLC8+aoF1c3qAemVXSTMnJCMjIyMjIiMkJyotNkFMVl1gYmFfbnyFiIiMjYN4eHt9fW9dWltnZl9pe4N8SCk+ZH2Olp+kpqimop2Xk4B1fHZwcnBvbGVhaGhkZ3BlTl5JY4VZTVFTVFVTVVVTUlJQTkhJS0pKR0VCQD07OTg5OTk7PTw/QkNDRUVCQkA8NzY0NDU2NjY2NjQzPklFRENERURGSFRDNkJPVFVUU1FRT09OTk1MS0tLSUlHRT8yJCUjJCQlJicnKCopNEBCQj83ListLi8sLi4tLSwsKysoJycnJycnJiYoKCgnJSUlJSQjIyMjIiIiIiIiIiIjIyIiIiMhIyIiIyMkJCMjIiUqND9KU1dXVlJMQTMnJCMlJiYmJikpLC8tLC4zNjs8P0hLUF1sbGdfWVFOR0M/P0BBQ0ZISEpLS0tLSklISUxSXWdweH5/gH9/goWGh4aFhYKCgYCChYmLjo6OjouKiISAenZwa2pqaGpqampqaGdmZmdoamxwdHh8gIWIjZCRj42NjYyMjI+Oh4SEiImBfXp3d3l6e3p5eHZ2dXR0c3R1dnZ0dnd4fYGFi4yMjpCWkY6Ojo2Ki46QkpOUlZKPjo2Mi4qJiIeGhioqKysrLC4uLi4tLi8vMTEwMDAwMDAwMDExMTEwMDExMDAxMTExMTExMTEwMDAvLzAwMDAwMDAwLy8vLy8vLy8uLi4uLy8vLy8vLi4uLi4uLi4uLi4uLy8uLi0tLi4uLiwtLS0sLCwsLCwsLC0tLS0tLS4uLS0uLi4uLi4tLS0tLCwrKyoqKSgoKCgoKCcmJiYmJiYlJCUlJCQlJCMjIyMjIyQkJSUkJCUlJy0zPmV/dXN2fHBhUD0rJCMlJCMjIyMjIyYpLTZAS1ZcYWRlYm6AhYmKjIeBdXd4e35vXFlaZmNncHp/eHw9LVZzh5OaoKWnpaOfmpaGent3cWppaGplZ2pocXd7clRIUVd+YklPT05LUE1TUk5MSkhERUhFRERDQT88NjU0NDM2Njc3OT5CQkJBQUFAQDw5NjM0NjU2NTQ0Njg9RkVEREVFQ0VMV0dATVNVU1NRUE9PT01NTUxLS0pKSEY+MSQkIyQlJSgoJycoKis0OTYwKy0uLi0tLi4tLi0uLSoqKCQjJicqJyYnKCkpKicmJiQkJCMjIiIhIyMjIyMjIiIiIyMlJCIhIiEhIiIiIiMoMkBMVmFpaGdhWlBCMyokJCUlJiYoKjA1Oj1BPThMXGx2dXZ2c25nYVpRTUhEQD9BQkRHSUlKSkpLS0lJSUlKUFtncnp/g4KAgYSGh4eFhISDgIKBhYiKi4yNjYyLi4eDfnhybmpqaWlqampqaWhoZ2ZoamptcnZ6foOHio+Tk4+OjY2MjY+OioSDhYqFf315dnZ5ent6eHd1dXRzcnJ0dXZ2dnZ2d36BiIuMjY2SmJGNjY6MioyPkZKUlJSSkI6NjIqIh4aEhIIqKisrKywuLi4uLS4wMDExMjIyMjIyMDAxMTExMDAxMTExMTExMTExMTExMDAwMDAwMDAwMDAwMC8vLy8vLy8vLi4uLi8vLy8vLy4uLi4uLi4uLi4uLi0tLi4tLS4uLS0sLS0tLCwsLCwsLCwtLS0tLS0uLi0tLi4uLi4uLS0tLSwsKysqKikoKCgoJyUlJiYmJiYmJSQlJSQkJSQjIyMjIyMkJCUlJCQlJikvNkFhfnVzdXhrWko1JiIkJSQkJCMjIyMmKS01P0lTXGFkZ256gYSGiIZ9a3B3dnh6cmBdXmRndXp7eX2OeC8+aHqKk5meo6KhoJuQh4B6dnBnZ2ZoZ2Vnb3h8eHdvYlxXZ11DS0pGRklKVFVNR0ZEQD9CQT9AP0A+OjYzMzEwMDM0NDU5PkBAPz8/Pj4+Pjg0MzU1NjY2NTQ2N0BIRkRERkVFSE9YS0hQVVVSUVBPT09NTUxMTExLS0lHPzMkJCMkJSUnJyYnKCooJyonKCwvLi8vLy4wLi0vLi8tJyUjIyYnKignJygoKCYnJyYlJCUkIyIiIiMjIyMjIyIiIyMpNTIlISEhISIiIiIkLDhEU19rdHh0b2hcTj8wKiUlJScpLjAvNDxIWVtQdYB3c3Z2dXRxbWZdVExGQj9BQUNFR0lJSkpKS0tJSUhISlBbZ3J6gISEgoODhoiHhYSDgoGCg4aJioyMjYyKiYmEgHt2cGtpaWlpaWlqaWloaGdnamtrb3N4eoCFiI2SlJGPjo2Njo6OjIaDhIeJg4B9eXZ2eHp6eXh3dXRzc3JydHV2dnZ2d3p+hIqMjY2OlZSQjo6OjIqMj5GRk5STkY+MjIqJh4aEhISCLCorLS0sLS0uLi0uMTEwMDIyMzMyMjIyMjIyMjExMTEwMDExMTExMTIyMDAxMjIyMTExMTAvMDAvLy8vLy8vLy8vLy8vLy8vLy8vLy4uLi4uLi4uLi0tLS4uLSwtLSwsLi4uLiwsLCwtLS0tLS0tLS0tLS0tLS4uLi4uLi0tLS0tLSoqKSkpKCgoJycoKCcnJiYmJiUlJSUlJSUkJCQkJCMjJCQkJCQlJicrMTpCXHx1cXFxbFY/LSYkIyUkJSQjIyMkJikuMjtFUVpiaG12gIKEg4R6X09tamlwcHNkYWBmc354dnmFiYhhM1tygoqPmJ6fnZyYi4aGgnBnYWFlaGdiXmZvd3Bvdnh4b3ZvOERHQkFBP0FFRURBQz47PTw7PD06ODUzMjExLy4vMTExNTk8PT4+Pj49PT07ODU1Njc3Njg4ODo8REhGR0VGRkZITVROSFFVU1FQT09OTU1NTUxLS0pLRkE1JiUkJSUlJicmJykpKCYlJCgrLS8vLi4uMDAvLzAxLyciIiMlJywqKCgoJycnJycnJSUlJSQkIyMiIiIiIiIiIyMjJi0qJCIhISEhISIiJS89S1ppdn6Ef3pyZ1xNPjEpJyksMDQ8SlRNRE9PX36BfHZ2dXV0cW1mXlZNRkI/REFCREdJSUlKS0lJSEhHR0hPWWdyfIOGhoWGhoeHh4WDgoGBhISIiYqNjIyKiIaFhH54dG5qaGhpaWhoamppaGdnZmlrbXB0eXyBh4yRlJSRj4+OjY6Pj4qDgYWJh4J+e3h3dnh6eXh3dnRzc3Nzc3R1dXV1dnl8goaJjIyNkJWSkJCQjYqJjJGQk5OSkY+MjIuJh4aHhYODgSwqKy0uLi0tLi4vMDExMTEyMjMzMjIyMjIyMjIxMTExMDAxMTExMTEyMjExMzMzMzExMTEwLzAwLy8vLy8vLy8vLy8vLy8vLy8vLy8uLi4uLi4uLi4tLS0uLi0sLS0sLC0tLS0sLCwsLS0tLS0tLS0tLS0tLS0uLi4uLi4tLS0tLCwqKikpKSgoKCcnJycnJyYmJiYlJSUlJSUlJCQkJCQjIyQkJCQkJSUoLjQ7Rld3dXFxb25TNyclJSMlJSUkIyMjJCYpLTM5Q1BaY210e3+AgXx1YjxHa3Bwc3F3aGRjZnN8d3aEiYGCf1BDZXR/ho6WmZqYlYaEiIZwXGBhZ2hjYF1jbHl9dWtse3x8gUw5QkM8Ozs8QD48PD07OTk4Nzc4NjQxLy8uLy0sLS8vLzI2OTo7Pj4+PT09PTs4Nzc3Nzc5OTc6PD1ER0ZEREZFRUhMUE5ITlBQT05NTE1NTU1MSktKSUdDOSYkJCUlJSYnJygpKSgmJSQlKy4uLy4uMjIvMDM1NS8nICAhIycsKigoKCgoJycnJyYmJiYlJSQkIiIiIiIiIyQjIyEiIiMiIyEhISEiIiYwP0xZanuHioiBenFmXE1BODQzNkFTYWxrW11iZ3l9goB3dHR1dXNuaWJXTkVCQkFCREZHSUlJSktJSUhIR0dLUl1pc36Fh4eHh4eHh4eFg4KBgIWHiYmMjYyKiYiGg4F8dnFsamhoaWloaGpqaWhnZ2dpa25xdXp9hIiOlJWRkI6NjI2PkI6GgoKGioWAfXl4dnd5enl4d3Zzc3Nzc3N0dXV1dnd5fIKGio2NjpKVko+Pj46Lio6Qj5KRk5COjIyKiIeGhIOEgoEtLS0uLi4uLi8vMDExMTIyMjIyMjIyMjExMjExMjIxMTEyMTEyMjIyMzMzMzMzMzMzMzAwMDAvLy8vLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLS0uLSwsLCwsLCwsLCwtLS0tLS0tLS0tLS0tLS0tLS0uLi4uLS0uLy4uLi4tLSwsKykpKSkpKSgnJyYmJycnJyYmJSUlJSUlJSUlJSUlIiQkJCUlJSUnKzA1PElYbXhraGttWTIkJSUkJSUlJSUlJSYmKCsyOEFNXGh1fH58e3dwXDsoP2Z5cnF0empkY2JtdHuFhX17enx1SVJteX+Ci42Tl5SJg4SBbV9cYGFeYWRjZ3R/gX1wa3R4dHdqLTk+PDg2Nzo6Ojg2NzU1MzI2NjUxMC8tLCwsKCotLCwvMTQ2Nzo8PDw7Ozw9OTc3ODk5PERLQT46P0VHR0VERUVGR0lPRUFLTktMTUxLS0tLS0tKSEdHRT0rIyUlJiYnJykqLCkoJiUkJSwuLy8vMTExNjg4OjgwJiAgICInLS4sKiYpKCknJycnJyYlJSUmJCQkJCQjIyMjIyMjIyMjIyMiIiEhIiIlLj1MXW1/iYqJgn11bWheVFBJRkhUYmZla2VlbHN2eXh8enZ1d3RycWtjWVBIQ0FBREVHSEhJSUpKSkpHR0ZHTFNeaXR/hYqJiImIiIiGhIOCgYKEh4iMi42LiImGhYJ+eHJuamloaGhoaGhoaGhnZ2doamtwcnZ7foGIkJSVkZGOjY6OkI6Kg4OFiIiDgH16d3d5enl6dnZ1dHN0dHR0dHR0dHN2eHyDh4yOjI6UlJCOjY2LiIuPj46QkZGOjYyKioeHhoWDgIGBLC0uLy4uLi4vMDAxMTIyMjIyMjIzMzIxMTIxMTIyMTExMjExMjIyMjMzMzMzMzIyMDAwMDAwLy8vLy8vLy8vLy4uLi4uLi4uLi4uLi4uLi4vLywsLC0sLCwsLCwsLCwsLS0tLS0tLS0tLS0tLS0tLS0tLi4uLi0tLi8uLi4uLS0tLSspKSkpKSkoJycnJicnJycnJiYlJSUlJSUlJSUlJSUkJCQlJiUlKS0zMz1KWWdybmdmaWRAJCUlJCUlJSUlJiYlJSgqLjZBTmF0gX98eXVtYUo0LjZZeHNyeXtsYWFnaXJ/hn95d3d6emRLXXB4eYCDio6SioJ2bGhkZGdhWVxiaW52gYV8cmxsbnFzdj4xNDc1NDU1NTY0MzIyMjEwMjMxLy4uLCwsLCgnKSkrLC8wMjM4OTo8PDw8PDs6ODk8PT9ZYkhCQD5CSUlGRkdGRkhHSEpCQ0hKS0xLSkpKSktLSkhHR0RANSYlJSYmKCoqKisqJyUlJCUsLi8vLjA0OD0+Oz07MycfHyAiKjAxMi8tLCsrKScnKSkmJSUlJSYkJCQkJCQjIyMjIyMjIyMjIiIhISIiJy48S15ufYiLi4eCf3l1cGtmYFdXWF1mZ19bU09dZFJKa3FtcnZ1dXFtZFxSSkNCQ0RFR0lJSUlISEhIR0dGR0xTXWp2gYiLi4qLioiHhoSCgoGChYeKi4uMiIiHh4SAenRxbWtpaGhoaGpqampoZ2dnaWptcXR5e36FjZOVlJGOjYyNjpCOh4KBhYiIgn98eXd2eHp5d3d2dXRzc3Nzc3N0dHR2dnp/hYqMjY2QlZGPjY2NiomLj4+Ojo+Pjo2LioqIh4aCgYCBgy4uLi4uLi4uMDAwMTExMjIyMjMzMzMyMjIzMzMzMzIyMzMzMzMzMzMzMzMzMzMzMzIyMTEwMDAwLy8vLy8vLy8vLy8vLy4uLi4uLi4uLi4uLi4uLSwsLCwsLCwsLCwtLSwsLS0tLS0tLS0tLS0tLS0tLS4uLi4tLS4vLy8uLi0tLCwrKSoqKioqKSgoKSkoJygoKCcmJSYmJSUlJSUlJSUlJCUlJiUlJSovMTY9TVpmb25oZGNmVishJSQkJCQlJSUmJygoKS42RlhvgoSAfXhvZlVFPzY5VHVwbHx8a2NiZWl2hYZ/dXN1dnl6YkxgcHBydnyEg3tyamdpaGhtbGttcnl4en6CeW1hVktLR01LLjAzMTExMTEyMzEwLi4vLy0vLy0tLSsrLCwnJCkpJygsLDAzNTg4Ojo5Ojs6Ojo7Oj0/P0JDQ0JBREZJTElGSEdERklKSEA+RkhKTElGR0lKS0pIRkVDQDkpJCQmJCgrKysrKiglJSUmKy4wMC4xOj1AQkA9OjQoHh8fJS0yNDc4NS8tLiomJiUmJyclJSUlJCQkIyUjJSQlJSMjIiIiIiMjIiIiIyUqNEdZan2Gi4yKh4aDf357endtbGdZW1dcZl5GQEY1PGB2fHdzc250b2dcU0pEQ0NCRUdISUlJSUlJSUhIRUhNVF9teIOJjI2MjIuIhoaEgoKBhIeIi4uLioiIhoOBfXl0b2xqaGhoaWlpaWhoaGdnZ2lrbnJ0eHuAipKVlZKRj42NjI+OiYOBhISIhH5+enh2dXd4eHd2dXV0c3Nzc3Nzc3V1dnl7gIaLjYyOlJSQjo6Oi4mIi46Ojo6Pj46Ni4mHhoaGhIKCg4QuLi4uLi4uLjAwMDExMTIyMjIzMzIyMjIyMzMzMzMyMjMzMzMzMzMzMzMzMzMzMzM0NDExMDAwMDAwLy8vLy8vLy8vLy8uLi4uLi4uLi4uLi4uLSwsLCwsLCwsLCwsLCwsLC0tLS0tLS0tLS0tLS0tLS0uLi4uLS0vLi8vLy8tLSwsKykqKioqKikoKCkpKSkoKCgnJiUmJiUlJSUlJSUlJCcrKSclJigrLC81PkxaZm9xa2djZmNBIiQjJSQlJSUlJSYpKSszRFRshYiEgXt0al9WUElERlJhYmZ+em5jYWhrfomHe3NzdXZ3fHlPUWdsamtvdXN0a2dqa2xvdHx9gIaHhIR/eXFeTUQ7MTIyNC0tLS4wMDExLi8vLywqKysrKy0sLCwrKysrKCUmJicoKisuMTM1Nzg3NTY3Nzc5Ojo+QkRGSEpGRkZGSEpMTUtKSUhLS0pHQEBESEpJRERHSUpJSEdFQj85KyQkJSYoKywsLCspJiUlJSouMDAvNj5ARENBPz4zKCAhIicwNzw8OTk4NTIuKCgnJSYmJSUlJSQkJCMiIyQlJSUlIyMjIyMkJCQkJCMkKDJHWWp8h4yNjIyLiISFg4KBe3VuXVxjaWVaUFZPP0tqfX52dGhDYHFoYVVNRkVFRUdISElKSklJR0dGRkVITVRgbniDiYyNjIyLiIaEg4KChIWIiYuLiomGhYaDgHx3c21raWhoaGhoaWloaGhnZ2dpa25ydXl7go2UlJKRj46MjI+PioWBgIOIiIOAfXp4dnV3eHh3dnV1dHNzc3Nzc3N1dXZ5fIKHjIyLj5aTkI2MjIqIiY2Pjo6OkY+Ni4uJh4aGg4CCg4aHLS0uLi8vLy0vMDExMTEyMjIyMjIyMjIyMjMzMzMzMjIzMzMzMzM0MjIyMzMzMzMzMzMyMjExMTExMDAwLy4vLy8vLy8uLi0tLi4uLi4uLi4uLi0rLCwsLCwsLCwsLCwsLCwtLS0tLS0tLS0tLS0tLS0tLS0uLi4uLi4uLi4uLi4sLCwrKysrKyoqKiopKSkpKCgpKCcmJSUlJSUlJiYmJyo4QzcnJicmKS0wNj9MW2ZvdHBpZ2JlWi8kIyMkJiQkJicoLDM9T2N4hYuLhYF3bGRgWVdSTk9YYWRue3duZ2ZocIeMg3lrbnJwcnd7V0FXYmZhY2Vnd25hbG9ze4OIiIaKjIyJfmtXRDg2NDQ0NDcxKigpLy4tLS0tLCwqKSkpKioqKiooJycnJyUjJCYmJycqLC8xMzQ1NTMzMzMzNzg4PEJGSUpJSkpISUxMUFJRUE9RTktISUhDQUJFRkJCQ0dHSElIRkA/OSwlJSUnKCstLi4tKiglIyMpLS4uMTpARUlFQkI9MSQfIyUrMjo9Pz06ODY0MisqKSUkJSQjIyMlJSMiJCQlJSUlJCUmJSYnJygpKSgnKSwyRVZneYeOjY+PjYuJiYiFhIB8cGRrb2ppW11oWzVBZHaBfHdyYmNwamFYTkZFRUdJSUlKSkpJSUdHRERGR0tVYW14g4mMjoyMioiGg4KBg4SHi4uMiomIhoWFgoB8eHJsamhoaGhnZ2lpaGhoZ2dpamxvc3Z6fYqSk5STkI+NjI2OjYiAgIGEioWCfnt5eHd2eHh3dnR0dHNycnJzc3NzdXV1eX6DioyMjY6UkY6NjouIh4qPj42OkJCQjouKiYaGhYODg4WHiC0tLi4vLzAvMTExMTExMzMzMzMzMzMzMzM0NDQ0NDMzMzMzMzMzMzQzMzMzMzMzMzMzMjIyMjIxMTAwMDAwLy8vLy8vLi4tLS4uLi4uLi4uLCwrKywsLCwsLCwsLCwsLCwsKystLS0tLS0tLS0tLS0tLS0tLi4uLi4uLi4uLi4uKysrKysrKysrKysrKSkpKSgoKSgpJyYmJiYmJicnJygtRlpMMDArJyktMjhBTlplbnJzbGljY2ZRKSMjJSUkIygoLjlLYHSDiYmKioN5amNhYWBcWFZVWWh1dnN4cmhmaW+AhoF1bm5ub3B3eVk4S1dcXl1aW255and5cn2Fh4eJioqJgm9XPjk0NDg/OzY5Ny4nKCosLS0sLCsqKCcnJygoJycmJyYlJSUjJCQjJCYlJyksLi8xMDIyMjIyMjQ3OD5DSUtMTExNT05OUVRXWFhYVlJPS0pJR0JBQT89P0JDRUZHRkRAPDUqJiYnKCkqLCwuLSooJyYlKC0uMDA8Q0VJSUVCOishICIlMDc7Ozs8Ozo3NDEuLCsnIyUlIyMjJCQjIiIiISEhIyMkJCQlJicoKSkrLC4xOEZZanqIjo6Ojo6OjIyLh4V/eXJoXk9HPjQwMDMxOkFNbXl1dnZzb2tjW1FJRkZISkpKSkpKSkpISEZGRUdLVWFtd4KJjI2NjIqHhIKCgYOEh4qLjIqJh4WEgoCAfHZwa2loaGhoZ2dpaWhoaGdnaWpsb3N2eoGNlpGSj46NjI2Mj4uGgICBhImDgH57d3Z1dnh4d3Z0dHRzcnJycnNzc3V1d3t+g4qMjY6SlJCNjY2LiIiLjY2Oj5CQj46Mi4mGg4ODg4WHh4ktLS8vLy8wMDExMTExMTMzMzMzMzMzMzMzMzMzMzMzMzQ0NDQzMzMzNDQzMzMzMzMzMzIyNDQxMDAwMDAwMDAwLi4uLi4uLi4uLi4uLi4uLiwsLCwsLCwsLCwsLCwsLCwsLCsrLCwtLS0tLS0tLS0tLS0tLS4uLi4uLi8vLi4tLSsrKysrKyoqKysqKikpKSkoKCgpKCgoKCcnKCgoKCgpKz9VUDw7LSkqLjI6RVBbZG1vcmxoZGJlZ0MjIiUmJCUrLjtPaXyHhomJiIF4Y1hYXmFgX11aV1dle3tvenNnZ2ZtdHh5dnBvbW9ydXpcMzZLVlZYWFJcbnR4cmJrfn9/eoiGfWlQQDk4ODY1ODg5Oz81KCcnJyosKikoKCclJSUkJiUlJSUkJCQkJCQiISQlJCYoKi4sLS8vLzAxMTE0OTk/RUdNTk9PT1FUVVZXWVldWllYVVJOSklJR0RCPjw9QUJBQkNCPjgvKicnJicpKiorLCwqKCgoJScrLzAzQEJHSkpIQDInHx8gJjU6PD0+PTkzLy0tLi0tKigmJCQjISEhIyIhISAgICEiJCQlKCkpKi4tLC4wNEVacH59hIyPjo2MjY6Oi4qHfXVqYFdPRTcuKCYjJio2OkBOWWlvdHRuZl5TTEhHSUlKSkpKSklJSUhGRkVGTFdhbHiAiIyMjYyKhoOCgYGEhoiKi4uKh4eGhYOAf3t2b2xqaWhoaGdnaGhoaGhnaGprbm90d3uEkpSSkY6PjIuMi4+Jg4CAgYWHhH99fHh3dHZ4d3Z2dHNzcnJycnJyc3N0dXl9gYeLjYyNlJSQjYuMioiIjI+Pj4+RkY+NioqJhoWDgoOFiIeILi4vLzAwMDAxMTExMTEzMzMzMzMzMzMzMzMzMzMzNTU0NDQ0MzMzMzQ0MzMzMzMzMzMzMzQ0MTAwMDAwMDAuLi4uLi4uLi4uLi4uLi4uLi4sLCwsLCwsLCwsLCwsLCwsLCwrKywsLS0tLS0tLS0tLS0tLS0uLi4uLi8vLy4uLS0tLSsrKysqKisrKiopKSkpKCgoKCgoKCgoKCkpKSkpKioySVhLOi0qKy82PkdSXmdra2ZsbWNgY2lmOyIkJCUpLDVJaIKFhIWGhXxvWEpOUFheYmJgYFxaY31+e4J1ampoa21vdXhybW5ucnV3XjEuN0tRUFFNTlheWlJGQml9e3V6dmtQOzU2Ojk4Nzc2ODs8Oy4mJSUmJyclJSUkJCQkIyQjIyQjIyIiIiIiISEjIyQlJikrLCwtLS0tLjAxNDc7PkZKS05QUVFTVldaW1xZW11cWllVU09OTktJR0RCPj5AQEFBPzw1LyonJyYnKCgqKysrKigoKCcnKy4uNEJCR0lIRj8tIyAfICk1Oz0/PjcyLispJiQoLCwqJiQjIiMiIiEjIiEhICEhIyQlJyopKiwsMDU7OUVTZHt/eHyJj46NjIyNjYuKhn95c2tmWlJCOS4oKCswOURGTE9OUVxra2ljV09KSUlKTEpKSkpJSUhHRUVFRkxXYW55gYiMjIyLiYaDgoGFhYeKi4yLioeGhIODgX96dW1qaGhnZ2dnZ2hoaGhoZ2hqbW9ydXh+i5WSko+OjYuLi4uLhYKAgIGFhYJ/fXp4d3V2eHd2dXRzc3JycnJycnNzc3V4fYSJjI6Nj5WTjoyLioqIiIyOjpGRkZGPjYuKh4WEhISFiImJii8vLy8wMDAwMjIyMjExMzMzMzMzMzMzMzMzMzM0NDQ0NTU1NTMzMzM0NDQ0NDQ0NDMzNDQ0MzIwMTEwMDAwMDAuLi4uLi4uLi4uLS0tLS0tLS0tLSsrKysrLCwsKyssLCsrLCwsLCwsLCwsLCwsLS0tLS0tLi4uLi4vLy8uLi0tKyssLCwsKiorKyoqKSkqKikpKCgpKScnKSsqKiwsKywtMDlMVDwtLS8zOkJMVWBoamdhYGtoYmJjb2MvHyQoKy8+Xn6HhIeFgXddQjU8RUxSWFxfYWRiYmRzgIiIe25ramlqbHJ0cGtrbG91dV8yLC45SEtITktKTEJCPzQ7ZHh6cGJOOzQ1Nzk7Ozo5Njg6Ozs2KCUkJCUlJSQkIyMiIiIiIiIiIiIiIiIiIiEhISMkJSYmKCstLS0sLS0vLjtBPUJFSUxPUlNUVVVVWFxeXV5eXV1cWFVTU1RSUVBJRkRAPTs+PTw5NC4qKSkoKCgoKCorKyoqKiooJykqLjRBRkhIRUI3KSAgIiMsNj0+PDk0MCwqKCckJCcoKigkIyMjJCQiISIiIiEgISQlJygrLS0vMzY8UWhuanB/f3t/io6Ki42NjIqIhoeGf3l0bGZcUkU3MzIyNDk/R0VER0lLV1pZXWFUSUhLTUlLTElKSUlIRkVERUZMV2BueICIjIyMioiFgoKDhYeIiYyMiomIhoWDhIF/enNsaWdnZ2dnZ2dnaGhoaGhpam1vc3h4g4+UkY+PjYuKiouLiIWBgH+Ch4OBf316eXZ2d3h3dXR0c3NycXNzc3Nyc3R3fH+HjI6OjpCWk46MjIqJiYmNkJCRkZGPjYyLiIaFg4SEhoiLioovLy8vMDAyMjIyMTEyMjMzMzMzMzMzMzMzMzMzNDQ0NDU1NTU1MzMzNDQ0NDQ0NDQzMzQ0NDMxMTIxMDAwMDAwLi4uLi4uLi4uLi0tLS0sLCwsLCwrKysrKywsLCsrLCwrKywsLCwsLCwsLCwsLC0tLS0tLS4uLi4uLi8vLi4tLSsrLCwsLCwqKysrKikpKiopKSgoKSkqKisqLS4vLy8vMTExL0dBMTEyOD9IUFtjaWplW1FabWdiYWdxVCQjKSwySGyEg4OBeWlJLikyNDtESlJYWl1hZGZodYKHhn9xaWdmaGxta2lpa2xvcXZfLCkrLjRGSEVHRj42NUlGNTNWZF1IPDU1Njg5Ozs6Ojk3OTo7PS0lJSMkJSUkJCMjIiIiIiIiICAgICEhISEgICAgIyQmJiUmKCorKioqLC40OTs8Q0hOT1JSUlNTVFVXXF1dXmJiYF5ZVlhZWFhXV1VNSUM9OTc4NzMwLCspKSkoKCgqKysqKioqKigqLC81QUZGRUM9LyMfICElLTY8Pzs3MS4rKSYlIyMiIyQmIyIkKSklJSMiIyMjIiMlJykqLDAyMi8xPVx1fnp5fH6AgIiKiouMiomHhIGChIN8d3BpY1xQRkE6NzY4Oj8/QURGSU5LTkhKXmVTVVpIRkpKSkpKR0ZFRERIT1hib3qCh4uMiomGhYKChYeIiIuMjImIiIeHhYSBfXZybWlnZmZmZmdnZ2hoaGhoamxwcnR3fIiSlI+NjYyJiImJiYeDgIB/g4aCgX58eXd1dnd4d3V0dHNzdHRycnJycnN0d3yAh42Pjo+Rk4+NjYuJiYmLjpCQkZGRkY6MioeFhISFh4mJioqIMDAxMTIyMzMzMzIyMjIyMjMzNDMyMzQ0NDQ0NDQ0NDQ1NTU1NTUzMzQ0NDQ0NDU1NTU0NDMzMjIzMjIyMDAwMDAuLi4uLi4uLS0sLi4uLS0sLCwsKysrKyssKywrKyssKiwsLCwsLS0tLS0tLi4tLS0tLS0uLi4uLi4uLi4uLS0tLS4uLS0sKywsLCsqKioqKSkqKSkrKy0uLjAwMTIxMTAwMTE5Qj01Nz5FTlRdZmpqYlVLSGFrZWNkbnE+ISgqNlF5gn1+c1c5JigrLDE1PEFIUFRaX2Rscn6Jgnp8c2hkYmdtcW1raWprb29wXispKyoqN0ZJRUM+MywxMzEqMURDODQzMjQ3Ojo6Ozs7Nzg6Ozw2KCgnJiUmJyclJCIiIyMiIiEhISEhISAgICAfHyEgIiMkJSgqKiosLCwuMzY3OzxCR0xPUlFRUVNWVlpaXFtgYWNhXlxdXl1ZXF5XU05JRDw3NTY0MC4uLSwqKSgpKSoqKysrKywrLC0xN0BERURBNyshIiIjKC40Oz46NC8qKSYlIyIiISIkISUmKSkpJiQjIiQlJSUmJiorKywuLy0uO0tYY3R4d3N8f3uEh4qKioqHhIF5fIKFg3x4cmliXFZPQjo+Oj1AQ0VHSExOVVFWWkpIVlNfaVxNSUpKS0lHRUNESFFYZG95gIiJi4iIhYKCg4SHiIqLjY2JiImJh4aEgXt2cW1oZ2ZlZWVnZ2doZ2hoaW1tcHF0dn+OkpGOi4uKiYiIioeFgoB/gISGgoF/fXt5eHl5eXV0c3NycnJycnJxcXNzdXZ7goqPkZCQlJKOjIqKiIiJjZCRkZGRj46OjIqHhoaEiImKiouIhzAwMTEyMjMzMzMyMjIyMjIzMzQzMjM0NDQ0NDQ0NDQ0NTU1NTU1NDQ0NDQ0NDQ1NTU1NDQzMzMyMzMzMzIwMDAwMC4uLi4uLi0tLS0tLSwsLCwsLCsrKysrKyssLCsrKyosLCwsLC0tLS0tLSwsLS0tLS0tLi4uLi4uLS0uLi0tLi4uLi0tLCssLCwrKioqKikpKysrLS0vMDEyMjMzNDQ0NDQ0ND5KQzlCTFRdZmtsamBVRThIaWlkYml0YSojKzpafH14d2M3JScqKSwsMDU5QEVNU1tmcniEkoV5eHNlYGBhaXBvZmdrbW5vcl0sKCotMTI5RkFAPDYqKikoJygsLzAyMzU5ODo6OTo7Ozk3Nzk8Oy0oKissKCkpKikoJyUjJCQiIiIiISEgICAgHx8gHyIjJCUmKSkpKiwsLC8zNjg5PEFFSk9SUlBQVFZYW1xcX15gYWJgX19fXFtbW1pXSU5IPDc0MjIwLy4tLCspKSkqKisrKysrLSwtMDtAREVEPzUmICEiJCkuMzk7OTUwKycmJCMiIiIiIyMkJSgqKiokJSMjIyQmKCcqKysrKyorM0FQV0I9OTw6WmxyfoaKiomJiIN8dXN7gISDfnhwa2dfVU5EQkBAQ0ZLS01MTFFOSD9LS0xPWGdsYklJS0lIRkRDRUlQXGVweYCFh4mIh4SCgoSFiImKiouLiYmJiYeGg4B6dXFtZ2ZmZWZmZ2doZmdpaWlsbnFydXaDj5COi4qJiIeEhYaEhIF/f4KGhYKBgH57eXh5eXd0dHNzcnJxcXFwcXFzc3V4foWMj5GQkpSSjYuLioiIiY6PkJCRkY+Mi4qHhoeIh4mKi4qIiYQwMDEyMjIzMzIyMjIzMzMzMzM0MzM0NDQ0NDQ0NTU1NTU1NTU1NTU1NTU0NDQ0NDQ1NTY2NDQ0NDQyMjIxMDAwMDAvLi4uLi4tLS0tLS0sLCwsLCwrKysrKyssLSsrKyssLCssLCwtLSwsLCwsLC0tLS0tLS4uLi4tLS0tLS0tLS0tLS0tLSwrKysrKioqKysqKiwsLy8xMjMzNDU2NjU2NTY3Nzg4RExESFJZYGZtbWlbUD4wNVZwaWNjanFIJCk4Wn57eHNcLiYmKSgoKywwMzk/RktYaXd5g5CMf3p1ZF5cXWNscGhnZ2lsb3JaLScqLTU7OVJIPTo5MislJyQmJiktLjI3QD05ODk6OTk4NjY4PDw3LSstLywsLC4uLiwpJSMkIyMiIiIgICAfHx4eHh4iIyMkJicoKSkpLCwvMzczMTM5PkFITVBRT1FTVVZYWl1dW1thZGNiYl9eX2FiXFJUUkc7NzUzMzIwLS4tKysrLCwrKywsLi8wMDM7QENDQTsxJCEhJScoLTI2OjkzLSkoJiUkIiIkJSMkJSgpKSwtKCUkJCQmJycoKSoqKSgrLzhFVFU9NSonL0JYa32IiouJiIR9dWtocXh/gYJ+eHNsZWFZUktDQkZGRklQUVNXVExJUE5PUlllVl1dTUtKSkdFREVKU11mcXmBg4aHhoWEg4OFh4qLi4qJiYmJiYmHhoJ+eHNva2dnZWRmZmdnZ2hnaGlrbXBydHZ4iJOOjIqIiYiHhIWDg4SBfn+DhoOBgIB/fHh4enh3dHNzc3JycXFycXFxc3RzeYCGjJCSkZKVkYyLioiHioyOj46PkZGPjYyIiIeIiYmLi4qKiYaEMjIyMjIyMzMyMjIyMzMzMzMzNDMzNDQ0NDQ0NDU1NTU1NTU1NTU1NTY2NTU1NTU1NTU2NjU1NTU0NDIyMTExMTAwLy4uLi4uLS0tLS0tLCwsLCwsLCsrKysrLC0rKysrLCwsLSwsLS0sLCwsLCwtLS0tLS0uLi4uLS0tLS0tLS0tLS0tLS0sKysrKiosLCsrLC0vMDMzNjc2Njg4OTk4ODg6Ozs7Oz5KVVJUXGNqcm1jV0o4Liw/Zm1lYmVsZjskNVF3fHZxXjYmJykpJygpKi4zOD5HV2x5dXyGjIN6dmheXFteY2hnZ2VnbXByWisnKi01PENjW0I3OTMsLCglKCgpKiwuNTw7NTU3ODg3ODc2NTc3OjIrKy0sKyssLS4vLCopKCYmJCIhIB8fICAeHh4eIiMjJCYnKCcoKCgpLTExMC8wNTo+QUdOUlRQUlNTVVVXWFhbXF1hX2BfX1tbWVlbVlNOR0A2NzQyMTAtLS0rKywsLCwtLS4xMzMzOz5BQT85LyQhIigrLC8xOTxFRD4zKycmJCYmIyQjJikpKCouLi0sKSUkJScqKCgoKCgoKzI2NDwxKicnKjVDWm5+iYqLioeDfHFqZWlxeH+Cgn14c29rZVlSTEpJT09RVVlcXFZRV1JLTlRXWlVJUFhLREVFRURGTlRdZ3J4f4KFhYSDg4WFhomKi4uJiIiJiYmHh4aBfXhzb2tmZmVkZmZnZ2doaWlqbG5wcnV2fY6TjouIh4eGhoaGhYSEgH+AhYWDgH9/fnx5eHp1d3Ryc3NycnFxcXFxcXJzdHuBiI2RkJCTk42Li4qIh4mNkJGQkZGRj4uLiYiIioqKi4yLiYiGgjMzMzMzMzMzMTM0NDMzMzMyMjQ0NDU1NTQ0MzM0NTU1NTU1NTU1NjY3NzU1NTU1NTU1NjY2NjU1NDQzMjIyMTExMS8uLi4tLS0tLCwsLC0tLS0sLCwsLCwrKysrKysrKywsLS0sLC0tLS0tLS0tLS0tLS0tLi4uLi0tLS0uLi0tLi4uLi0tLCssLCwsLS0tLjEyMjI1NTk7Ojo7Ozs8Ozs8PD09PUBDRk9WWlxmbnZuYVNGNS4sM01waWZjZW1dLypEant1cGVBJiUnKScmKSkqLzQ4QVpyeW9zgoh/enZuYV1bXmVmZmZjZmpsa1otJSYsMTdKZ1tOOC8vLCsrKCgqKysqLC4xMzIyNDU3NzY4NTU5NjU4MiopKywsKyssLCssKykoJycmJCAeHh4eHh4eHiAiIiMkJicnJycnJygoKigpLC8yOD5BS1FRUlRTUlNTU1RUUlVYWlxZW15dXWRjYFpSUVFNSTg4NzIxMS8wLS0tLS0tLS8vMzQ1NDg9Pj48NisjIyQmKS8xOU1gbHBrX1JBMysqJiIiIiYtNjQ2ODg4MzAtLCorKyopKSkpJiUqKyclJScnJygyQ1xwf4uLjIuHhHxwY1xgaHJ5gISCfXp0cGtoYmJjYWBfYl9eXVtibWhZW15dWVdQQDhPVmVaR0ZGR0xVYGlzen+Ag4SEgoOEhIaJioqLiYeHiIiIiIeDf313cm5qZ2ZlZGZmZmdoaGlpam1vcnN0eYOQkIyIh4aHhoaGhoWEg39/gISEgYGAfn18enl6dnZzcXJycnJycXBwcXFyc3V7hImOkI+QlJGNjIyLiIeIjpCPj5CRkI6MioiHiYmLjIyLioeGg4EzMzMzMzMzMzM0NDQzMzMzMjI0NDQ1NTU0NDQ0NTY1NTU1NTU1NTY2Nzc2NTU1NTU1NTY2NjY1NTQ0MzIyMjExMTEvLi4uLS0tLS0tLCwtLS0tLCwsLCwsKysrKysrKyssLC0tLCwtLS0tLS0tLS0tLS0tLS4uLi4tLS0tLi4tLS4uLi4tLSwrLCwsLC0uLi8yNDc1ODs+Pz0+Pj5AQEBBQUFCQkNERkpMU1ZZWmp2bl9PRDUvLC05WnRpZWRqbFouMll3dnBpTyonKScoJikqKSsvNURgd3Nqbn6DenRvcWZeXFxgYmZmY2dtbG1cLiYmKyswTWdZUlE5KiorKywsLSwsLS4tLS0vLzE0NTg3NTU2ODc1QFArKi0sLCsrKyorKyssKignJiQiHx4eHh4eHh4eHR0eHyIiIiMjJCQlJScnKCgqLzk4PEZMUlNUUFRYVVRRT1FPUVNVVldeYWJfYmZjXVVUUlFNOjU7OTQwMC4uLi4tLS8wMjU2ODQ0ODk7NjAnIyMlJSs2RltzgISFhoN6bWBUQi4lJCw5QUZHRkVBQ0I8NDQ0MjIyMTAwMC8tKickJCQkJCYoNEhfdYSLjIyLioN7cWFXWWBqc3mCgoOAfHdxamdoZGRkYWBhZmtsbGNbV1hXYGVmYWFbTFVrXEpFRktPWGJpc3p8gIKEhISFhoaIiYmJiYmHh4iHhoSEgX17d3JuamZlZWRmZmZmZmZpaWptb3JzdXyIk5GLiIeGhYWFhYSDhIOAgIGFhIGBgH9+fHp5eHZ2c3FycnJycnFwcHFxcnN2fYaLj5CQkJWQjYuMioeGipCQj5CRkZCOioeHh4qLiouMiYmHhoSCMjIyMjIyMzM0NDQ2NTU0NDMzNDQ0NDQ0NTU1NTU1NDQ2NjY2NjY2NjU1NjY2NjY2NjY2Njc2NjU0NDQ0MjExMTExMC8uLi0tLS0sLCwsLS0tLSwsKyssLCssLCwtLCssLS0tLSwsKywuLi0tLS0tLS0tLi4uLi0tLS0tLS4uLi4vLy4tLSwqKywsLS0vMDEyNTc4OTw+P0FCQUNEQ0RDRERERUVFR0hLUVlfXlxjcGtaTD8zLy4tMEFpcGxkZm1zWS1HbHd1bVk1JigpJykpKiwtMTtTcXhsanJ8fHRvbXFtYF1bX2FjZmdpamxtXy4lKiwuMVBlXVdVVjorJygoKCgpKi0uLy0sLC0uMDQ0NTMxNDQzM0t4UiEvLy4tLS0sKysqKysqKCcmJSIfICAhHx8eHh0dHh4eHx8gISEjJCQjIiYmJigsMzc9RUpPU1dTU1BST1FOUU9QUlRSWmBlZmdoZGRaTj5RTllAMDs9NzIyMDAwMDEwMDE2ODg2MjQ1MiomIyUmKDRKXnCCiYuLjI2OjouEemtUMSk6RU1JQT9FRkZFQTs6ODo6Ojw8Ojg2MywmISAiIiIlJzdOZHeIjIuLi4uGfW5jVVNZY2t0e4CGhYOAenp5eHh3bWxubXV5dXBrbHFvc3Jpa2prbm9dTlRPR0NNVVpiaXJ4e36AgIKFhoeHiYqKiIeIhoaHh4SDgn99eXVwbmpnZ2ZmZmVnZ2ZnaWprbXBydnZ/j5GOioiHhoaHh4aDg4WCgICEh4OBgYCAfnx6eXh2dnNxcXFxcXJycXFwcHFyeICHjY+RkJSSjoyLi4iIiIuRkJCSkpCOioaIiIqLioyMi4eGhISDgzIyMjIzMzMzNDQ0NjU1NDQ0NDQ0NDQ0NDU1NTU1NTQ0NTU1NTY2NjY1NTY2NjY2NjY2NjY2NjY1NDM0NDMyMjIxMTAvLi4tLS0tLCwsLC0tLS0sLCsrLCwrLCwsLSwrLC0tLS0tLCwtLi4tLS0tLS0tLS4uLi4tLS0tLS0uLi4uLy8uLi8uLC0uLi8vMTEzNjg5PD4/QUJERUZHR0dHR0dISElJSUtKTlVdZGdnYWRnW0w/Mi8uLTA0VHBraWRocnVKPGF6d3BjPSUnJicoKSorLTBBYHh2a2x4fnhzbWxvdmRdXFthY2VmZmlrbF0vJiosLTNTZ1tZW1hOOSonJiYnKSgtMDAvLisrLTAxMjMxMTY5OUllgIc2Ji4wMC8xMS4uLSwrKygnJiUkJCUlIiEiHh8eHR4eHh4eHiAhICEhICEjIiInKS0vNz9ERklOUUxOUFJQTUpMTlFSUlNXXWVmZmhnZFpVVktJWk42Nz06NjIxMTExMTEyNzg4NjQyMzAoJSUnLENheIKJjo6LiYuPkI6Pjo2Fd08wOkJNQj48QExKSUQ/OTY3Ojs8PDk5OTgtJCAfISQkJCo/U2l9iY6KioyMioF0ZFNLUFplb3Z8hIaGhYOAgHt6d3Vxc3h6eXh0dWZhZGtqcHFvbmdfVFdnYmZUTFRcZWpzdnp9f4CChoeIiImKiIeHh4WGhoWEgYF+fHh0b21pZmVlZWZlZ2dmZ2lqbG5xcXR3hJKRkIyIh4aHiIeGhISFgYCChoiBgYCBgH58enp5dnRzcXFxcXFxcW9vcHBxcnmAiY6Pj5KVko6Ni4yJiIiMkZCPkZGQjYqIiImKi4uLi4qGhIODg4MzMzMzNDQ0NDQ0NDU0NDU1NTU0NDQ0NTU1NTU1NTU1NTQ0NDU2NjY2NDU1Njc3NjY1NjY2NjY2NjU0NDQzMzIyMTEwLy4uLS0tLS0tLS0tLS0tLCwsLCwsLCwsLCwsLCwtLS0tLS0sLC0tLCwtLS0tLS0tLS0tLS0tLS0tLi4uLi8vLy8wMTAuLi4wMTM1NTk6Oz9BQ0RERUdJSUpKTEtLTExMS0xOT1NZYGdtcG1kXFVLPzYyLy8vLztfcGhlZGp0a0BVd3lzaUYoJycpKSgpKi0zRml7cmtufHpxbWtkYXZrXF1cYGNkY2NoampdMCcqKy0zWGhaWVlWUko+LCYmJycnKzIzLy4uLCwtLi4vMjQ+RlBheIqUdx8rMTMyMzQzMjEvLSsoKCUjIiMjIyMiIB8gHx4eHRwdHR4eHx8gICEhICEjJCYpLTM6QERFRkhIR0pMTk9OTk1NUE9RVVxgZmVpamdkW1JNSlplWEY/PDo3MzIwMTEyMzY2ODc2MzMyKycnKUFpgYmOkZKRkI6QkZGMjI2PkoZsQj9GTEVETUlUWVVPTUlCPT0+QUE+Pj88MigkIyUlJicuQlhtgY2NjIuLi4mDeWVOQkhSX2lweICGiIiFhYB+eXZ1dHVxdHd3a2ZjXVpgXmJmYlthXFo9QVFkXV5bX2VtcnZ6enx/goWGh4mKiYiHhYWEhIKCgX9/fXp2c25saWVlZWVmZmZmZmdpam5vc3N0e46UlJCMioiIiYmIh4WEhYCAgoeHgoKBgX9+fHl4eXVzcnBxcXFwcHBvb3BwcHV7gomPkI+RlJGNjYyIhoeIjJGQkJGRj4uIiYmKi4yMjImIhYSCgoSGMzMzMzQ0NDQ0NDU0NDQ1NTU1NDQ0NDU1NTU1NTU1NTU0NDQ1NjY2NjQ1NTY3NzY2NTY2NjY2NjY1NDQ0MzMyMjExLy8uLi0tLS0tLS0tLS0tLSwsLCwsLCwsLCwsLCwsLS0tLS0tLCwtLSwsLS0tLS4uLS0tLS0tLS0tLS4uLi4uLjAzMzU0MDAwMjMzNzg8Pj9DRUZFSEpNTk5OT1BQT1BQUE9RUlJVWmFobm9zcGJSQz43NTQzLy8xQ2pwZmVlbHleTnR8dm9QKyYoKiooKCotMkpteW9scoF4bmxnYmRvcGJgXl5hY2FiZWloXDAnKywwNl9lW11dW1BPTEAuKCcmJyguMi8tLCwqKywsLTdCTllpeISMlphbHi00NTY2MzIxLy0rKikoJiMiIiIhIB4dHh0cHBwcHR0eHh4eHx8gICAhIyQkJigtMjY5PkFCREVFSU5LT1BQT1BNT1NWXGxfYW9samNbUUxZZV9VT0lBOTg4NTIyMTI1Njc3OTg2NjIsKDligoeMkJOXl5STlZaSj4uKjZKOe1I8RklKSktOU1ZYWFxhYV5VVVFPTk1HQTQmIyMlJigoLkFXbYGPkIyLi4uIgXVkSTk9Sldga3Z9hIeJiYiGgn1+fnRqYWRhXmBoXWFZVVdhZmFXWmGFf0FDV19bYGRpb3N2eHl8f4OFiIiKiYeGhIODhIKBf39/fnx5dXJta2hlZWVlZmZlZWZnaWpub3NzdHyQlJSRjYmIiImJiIaFhIOAgIKHh4GBgYF/fnx5eXd1c3JwcHBxcXBwb29wcHF2fISLj4+Pk5SQjYyLiYeHiYyQj4+Qj42MiImKiouKiYmIh4WEhISFiTMzNDQ0NDQ0NTU0NDQ0NDQ1NTQ0NDQ0NDU1NDQ0NDU1NTU1NTY2NjY2Njc3NjY2NjY2NjY3NjY0NTU0NDMzMzMxMTAwLi4tLS0tLCwtLS0sLS0tLSwsLCwsLCwsLCwsLCwsLS0uLiwsLC0sLC0tLS0uLi4uLi4tLS0tLS0uLi8vLi4wMTQ1Nzc2Njc3OTk+QEFCRkdLTU1PT1FRU1VVVFRUVFNTU1NVVlxjaXFxcW9lW1BDPDg1NDIxMDVQcWllZmZydV1xgHlzWTAmJikqKSksLjVScXZtbXV+cWVnZ2lpaXRoX15cX2BgY2RnaFowJiwtMTplZV5gXltPTU5RRC0pKCclJy8vKykrKiorLzhHV2Jue4aKiJabkzYkLzM0NDQ0MDAtLS4tLCkmJCEhHx4dHR0dHBwdHR0dHR0dHR0eHiAgISIiIiMlKS0uMTY6PkBCQ0VNU1JRTk1JSE1RVVtlam9wbG1qYFNOS2BjVVBQTkk/ODc0MzMzNDQ3ODo8PDw5NDlaf4uKjZCSl5aTlZqal5KMioqMkYVePklJSkhMTVJUWl5fYmNkXVpeXVpYVEUwJSMjJSUmJi1BU2l9jI6NjIqKhHxwYkUvMT5KWGVsd4GHi42MiYeGhYKAeGphWlleXFdXV1xeXl9qZVhpg4h9TFphXlpZZm9yc3Z6fH+ChYeJiYeEhYWDgoOBfn5+fn16eHRxa2tnZWRlZWVkZWVnaGlsbnBzc3OCk5OTkI2Lh4eHiIaFhIOAgIGDiYaBgYCAgX58enh2dXFxcHBwb29vb29vbm9wd32FjY+Qj5aTkIyMi4mIiIuPj4+PkY6MiIiJioqKiYmHh4aFhISEho00NDQ0NDQ0NDU1NDQ0NDQ0NTU1NTQ0NDQ0NDQ0NDQ1NTU1NTU2NjY2NjY3Nzc3NjY2NjY2NzYzNDU1NDQzMzMzMTEwMC8uLS0tLSwsLS0tLC0tLS0sLCwsLS0sLCwsLCwtLS0tLi4sLCwsLCwuLi0tLi4uLi4uLS0tLS0tLS0vLzEzNDQ2ODs8PDw8PDs7PUBEREhKTE5PUVJTVVdYWVhZWFhYWFhYWltgZmtwc3FvZVpRUEtBODQzMzIwOF5xZ2RobnZ1eIOAeGEzKCooKiorLC48WnhzbWxzfnZqaWlpaWpwbWFdXF5jYWJmaGZZMCsuMzQ/ZmReXV5aTUpQVFNDLCcmJCQmKi4qLTMxN0FLV2hwfIKLjYeUmp14HSgvMjQ0MzEwLywtLSsrKSUjIR8eHh0dHRwcHBwcHBwcHBwdHh8eHyAgIiEjJigqLCwtMjc5PEBCR01QUUlCSEtOU1lfX2VqZ2xuaVxUVk1SZFhTT1BQTUhBODAvMTM2NjY2NjY8OD1ZeoqLi4yRkZOTkZCVlZeSjYiIjZCJbEZGSUlMTU9RU1ZZXF5fX1xcW1xbWFFCLCQiIyMkJCYpN01jeIaLi4uJiIJ5blg9LCkvQExZZXR+hIuOjYyLioeCgHl2dGRlZmVaWl5qamdfTEhOa4WIjnRTUExRWWduc3V1d3yAgoSGiIiGhYSFhICBgH58fH19e3h0cWtpZWVkZGRkZGZmZmdpbG5wcXR1h5WUkY6LiYeHhoaFhYSEgn+AgoeFgYGAgH9+enl3dHNxcXBvb29vb29vb25ucniBipCQkJGWk46NjYyIh4eLjo6NjY6MioeIiYqKiomJh4WEhISFhYeONDQ0NDQ0NDQ1NTQ0NDQ0NDQ0MzQ0NDQ0NDQ1NTQ0NTU1NTU1NjY2NjY2Nzc3Nzc3Nzc3NzhBQzs2NjQ0NDQzMjMxMDAwLy4uLi4sLC0tLSwtLS0tLS0tLS0tLS0sLC0tLS0uLi0tLS0tLS0tLi4uLi4uLS0tLS0tLi4uLi0tLy8xMzU1ODs9QUFCQkA9PUBDRkhLTlBSVFVYWVtbW1xdXFxaW1tcXF5fYmhuc3Z0cWddVExRVVBCNTIxMS8+ZW5oZmhxeX6Bf3lpPiUnKigpKSowQmR5b2xrcYB1a2hnaWlnZmxjX11eYmJkZ2ZnVjMxMTE0R2ZjXV9fWUZGTlNUUkMrJiQjIyc2PTY5P0VPWGBqeIGFio2Pk5abmVUdKiwuMTAvLi4uLSwrKyonJCIfHhwcHBwcHBwcHBwcHBwcGxwdHh0dHh8iIiUnKisrKywvMzc6QEpLUVFOSk9MTlBTV15eXmFjYWFaVllTVWNeUU9OTk5MSEU+NzIuKy8vMDIzNDVPc4eKjIqKj5GQj4Bwc4COkoyHh4qQi3JIQUhJSkxOUVNTU1ZXWVdXXF5eXFhVRSwhISAiJCUkJzRKYneEjYqKiYZ+dWlSMyg1Nj5ET15vfIKJjY6MjIqFgoB6dG5lWldWWF5kamRlZFJMW3uHiY6QjX1vZltWYWxvbnd9gYSGh4eGhoWEg4GCgH97fHt7e3l4dG9raGVkZGNjZGRlZWVnaGxvcXJ0eY2WlJGPiomJiYeFhIOEg4F/gIKIhIKCgIB/fHl2dnVzcXBxcHBvb25ubm5sb3R7hIuQkY+TlpKOjIuJiIaHjI6NjY2Mi4eGiIiJiomIiIaGhoSFhoWIkDQ0NDQ0NDQ0NTU0NDQ0NDQ0NDM0NDQ0NDQ0NDQ0NDU1NTU1NTY2NjY2Njc3Nzc3Nzc3Nzc4RFdOOTY1NDQ0MzIzMTAwMDAuLi4uLSwtLS0tLS0tLS0tLS0tLS4uLS0tLS0tLi4tLS0tLS0tLS4uLi4uLi0tLS0tLS4uLi4tLS8vMjM1Nzk7P0RERUZFQkFDRUlLTlFTVFZYW11eX2BgYGBfYGBgYGBiZGdrcHN2dHJrYFdNSERITUtBNDEwMUdra2RjaHB9hYB6cFYwKCooKy0xN0ppdW1raG96b2poaGlpZWNlaGFgX15iZGVlZlUzMTExMlBnYV9jYFdFRktQUVJQPykjIyMlMURORENNU1piaXl/hIiJkI2Rl6CWOx8vLjAwLy8uLy4tKysqJyQiIR4cHBwcHBwcHBwcHBwcHBscHR4dHR0eICEjJSYmKiwsLS8zNz9ERUtNTktJSk1PUVNXWl5eYWBiXllVU1VjXVFQTk5OTEhFREM+ODMwLiwrLy9EaYOEhIiKjI2OiHdVPUFZeI+NhoWKjIx1UERISUlJTE1OT1JTVVJSVFdZWFZSUEMuISEgIiQlJCYyRV1ygoqKiYaDfXNmUi8mNzs/QU1hbnl/hYmNjIyLhoKBeXNrY1lTUVBLT1ZYXl9eX3aJjY6RlZmcm5+fl31XVVtUVVtgY3B+gYOEg4OAf358e3p6e3x5d3NuamdkZGRjY2RkZWVlZ2ltcHN0dX6Sl5SSjoyJioqKhoODhIOBf4GDiYOBgYGAf3x5eHZ0cnFxcG9vb29ubm5ubnB1fIWMkZKQlJWQjoyLiYiGh4yNjIyLi4mIh4iIiYqJiIiHhoaGhoaFiJA0NDQ0MzQ1NTQ0NDQ0NDQ0NDQ0NDU1NTU0NDMzNDQ1NTY2NTU2Njc3NjY3Nzc3NjY2NjY2NzpHTjw1NTU0NDQzMzEvLzAwLi4uLS0tLi4tLi4uLCwtLS4uLS0tLS0tLi4tLS0uLi4uLi4uLi4uLi0tLS0tLS0tLS0tLS4uLi4vLzE0Njk7PkJISk1NTElHR0pMTlBTV1lbXl9iYmNkZGRkY2NkZGVlZmZqbnF1dndybGNaUUpDQkJGSUlEOjEwUG9mY2Jmcn6EfnlrV0M1MzY6QkpZb3FqZ2VudW1raWpqaGVlY21kYWBfYmRkZGVTMCwqLDJbaWRhZ2hXSUtNT09PT0w5JiQlKDBBVlhLSFJYYWdye4GHiYeMkJSanoQlKC4zMjAvLy4rKSoqKigmIyAfHR0cHBwcHBwcHBwcHBwbGx0dHR0cHh4hIiIkJicqLS8yNDpBREdQVFlZWltdXmVtdnVzdHBrZmBfWlBXZmBTUE9PTUtJRkRCQkM9OjQyMSsyXH6Cg4OFh4qJgG1LKigpPWODjoeEh4yNdlBBSUpLS0tNT09OTk5LS1BTU09OTUtDLiEhIiIkJSUoMkhdcoOJh4aDgHtvYk0tKSsvNj9NYWx1fIKFiIyKiYiFf3lza2ZZVVFQUl1fXVxiZ297jZKVm6CfoqWknH9XTE5TUUpHQDtBTFZsfoKDgX9+enl5ent6eXZzbWhlZGRkZGRkZGVlZWdqbXFzdHWGlpWUkY2Mi4uLi4eCgoOCgYCBhomCgICCgIB9eHd1c3BvcHBwcG5ubm5tbm9wdX6HjZGRkJWUj46MiYmGhoiMjoqLjIuJh4eHiIiIh4aFhYaHh4WFhIqRNDQ0NDM0NTU0NDQ0NDQ0NDQ0NDQ1NTU1NDQ0NDQ0NTU1NTU1NjY3NzY2Nzc3NzY2NjY2NjY2NTc6MzU1NDQ0MzMxMDAwMC4uLi4tLS4uLS4uLS4uLS4vLy0tLS0tLS4uLS0tLi4uLi4uLi4uLi4tLS0tLS0tLS0tLS0uLi4uLy8zNTc6PEBESU1PUlJQTUpMTlFTVVhaX2FiZWVnZmZoaGlpaGhpaWlpbnF0dXZ1cmxjWlRNRkJAPj1ETU5FPz5cbGRjY2lzf4F9eXJmXFVWW2BkbHJuaWdkbHhvaWppaGZiZGJtbGZlY2RmZGRjUjApKio8Z2lkZmVnT0xPTU5OTU5OSzgoKC42OktcWkxRWV1kbXd+hYiJi46SlpubaB4oLy8uLy0rKSgoKSkoJyQhHx4eHRwcHBwcHBwcHBwcGxsdHR0dHB4eISIiIyUlKSwvMTEyRldkbHFydnh6dnJ0dHZ0cnRzc3RybWFVWGVhVE9OTk5MSUZEQkNCREZJQTAvQW+Cent+g4SFfWE3JSgpJTJXfYyGg4WKiXNJRElKS0tLTU5OTU1JRktMTk5OT0tJQi0hISIiJCUlKDNJX3SCh4eEgH53bl5GKCszLyozTV9pcXh8gYOGiImIh4F9eHBpZWJbVVtcXlxdYWdxf4qPlJmgm5KFaVNIVmFhaW5cTUpIR0dEQkpmfIJ/fHp5ent6eXh1cm1oZGRkZGRkZGRlZWVnam1xc3V3jZeXko6MjIuMjIyIgoKDgoGAgYaIgYGBgoB8enh3dXNwb3Bvb29ubW5ubW5vcHZ/iI+Rj5CUk5GOjImJiIeKjY2LioqIh4iIh4iIiIeGhYaGh4eFhYWOkTQ0NDQ0NDQ0NDQ0NDQ0NDQ1NTU1NTU0NDU0NTU0NDU1NDU2NjY2Njc3NzY2NjY2NjU1NjY1NTYzNDU1NTQzMzMzMjIyMTEwLi8uLS0tLi4uLi4uLi4uLi4uLi8vLi4uLi4uLi4uLi8vLy8uLi0tLS0tLS0tLi4tLS0tLS0tLTAwMzY4Oz9DRktOUlZYV1NPUFFUV1pbXmJjZmVoaWpra2tra2prbGxtbnJzc3N1dHBrYl1UTktEQ0A+PDo9Q0VFT2doZGRmb3l8fHd5c3BwcHJyb3BuaGVmYmt7cGdmZmZlY2NibXZqZmVhZGNkYlEsKiosSWxnZmhnZktLT05OT05MTEtIODI1OTk9U1pUT1NaX2lxfISHiYuQkZWam5lDHSosLCoqKicnJiYmJiYlIyAfHh4eHBwbGxwbHBwcHBwcGxscHB0dHiAgISIhJicqLzlOYWhqamlqcHl5dnVzdHNxb29wb25wcnJ0c3FtYFVRT09OTElHRUNCQkVKUWBgUFt7gHt8fICEfm04HSYoJScvTneKhoOGiIJoQ0RJSktLSktOTU1MRkZKS0xMS0pJRz4uISAiIyQkJSgzS2B3homFgn57dGxcRy4mMSkoOlBbZWxxd3t+g4WFhYSDgHtzbWlqa2hhWl5jZ2tweIKLj5CQgkIuMDtNXWBucXRmVlhjaGltbWheUlZneXt4eXh6enl4dXBrZmRiYmRkZGRkZGVlZ2tucXNze5KXlZCOi4uMjI6Ph4KDgYGAgIGIh4GCgoOBfnx5dnRycXBvb29vbWxsbG1tb3N5goqOkI+Qk5KQjIuJiYiJjI6KiomJiIiHh4eIiIiHh4eHh4iFhISGkJA0NDMzNDQ0NDQ0NDQ1NTQ0NTU1NTQ0NDQ1NDU1NDQ1NTQ1NjY2NjY3Nzc2NjY2NjY1NTY2NTU1NTUzNTU0MzMzMzMyMjExMTEwLy4uLS4uLzAwLy8vLy8vLi4vLy4uLi4uLi4uLi4vLy8vLi4tLS0tLS0tLS4uLi4tLS0tLS0vMC8yODtAREhMUVZZW1taVVNUVVpcXmJlZ2pqbG1tbm5ubm5tbnBwcnN1dnZ2dHNvaWJdVVBNSEVCQD05ODU2O0NSZmVjZWlzeXV4dnR0dXh2c29sZmJiZWJpfXBpamhqaGlpam97bmloY2NlYl5OLCorL1hsaGZqbmFFTFBQT1BOTEtJR0ZCPzw9Oz1FOTxLVl5mbnJ8hIiKjo+TlpueiSwhJignJyYmJiUlJCQjIiEgHx4eHh4cHR0cGxwcHBwcHBsbHBwdHR0eICAhIyInP1pmZ2RjZGVncnh4dXR2dHNyb21ra2xsbnBwcnZ7fXRcUExOTkxIRkVDQkNESFNhbXJ6gn57fX19fnldLCQlJiQkL050ioaDhIeAWjlESExNTUxNTk1MS0ZIS0xNTUtKSUc+LiMfISIiIiUoOFBmeoeHgn5+e3RpWD4rLDAsLkVRWl5na3F1enx9foKBgH98eXV0c3BuZ2VmaGtxeIOKjI2LjVwfMkRMXGJhXW5zbYafo6mmnZOIgIKBb2dtdnd4enl3eHNvamVkYmJkZGRkZGVmZ2ltb29ydX6XmZOPjYyLioyOj4eDgYCBgYGBiIeBgoKCgH17eXZ0cnFwb29vb2xsbGxtbW9zeoONkZGPkJGQjIyLiYmHiIyOioqJiYiIh4mHh4iHhoaHh4iGg4KDiZCQNTU0NDQ0MzMzMzQ0NDQ0NDQ0NDU1NTQ0NDQ0NDQ0NTU1NTc3NTU1NjY2NjY2NjY2NjY2NjY2NTU1NTU0MjI0NDMzMjExMTAwMC8vLi4vLi4uLi8vLy8vLy8vLy8vLy8vLi4uLi4uLy8vLy4uLi4vLS0tLi4tLS4uLS0tLS0tLzAxNDY6QERITFFYXF5hYFpYWVpcYGBkaGlqbG1ub29vb29vcXFycnN0d3d2dXRxbWZhXFdRTUpIREE/Ozk2MjEzPFdqY2Zlb3JnaGdmamtqaWZnaWZmZWRgZnhzb21paWZlZ2hofXJoZmRhZ2FcTiwqKTxna2hpbG1TQktPUFFRT05MSUdDQkBCPj85OzU0QlFaYmdsdYCDh4mNkZWXmJpzHiAkJyYnJSUkJCIiISEfHx8fHh4eHh4dHBwcHBsbGxscHB0dHB4cHR8gICI3W2xpY2FgYWNpcnp3dXV3dnRzcnBubmxsbGtrbG9wdHqAd1pMT05MS0dFQ0NDQ0pUYGt0gIR9eXt7eHVvSikmJiUmJi5OdIiDgYWFek83QkZKTExNTExMS0hFSUtLTUtKSEZEPi4jICAhISElLDxUa36Jh4F/fXlyZ1M4IicxOD1MUVpcYGZrbnFyd3l8fn9+fnx3eHd1cXFxb2puc3qBh4yLiYhBJzdFUVtdUVVifZqzvLu6ubGijn5wjZmNd3R8enp6eXZzbmtnY2JiZGRkY2NkZWdpbG5xc3OEmZeSj42LiouOko+EgYGCgX+BgYiFgYOBgH99enh2dHJwb29vbm1sbGxsbmxvdHyGjJGQj5GQj42Mi4mJiYqOjouLiYiHh4iHh4eHhoaGiYiIhICCho2RkDU1NDQ0NDMzMzM0NDQ0NDQ0NDQ1NTU0NDQ0NDQ0NDU1NTU2NjU1NTY2NjY2NjY2NjY2NjY2NjU1NTU0NTQ0NDQzMzIxMTEwMDAvLy4uLy8vLi4vLy8vMC8vLy8vLy8vLy4uLi4uLi8vLy8vLi4uLi4tLS4uLS0uLi0tLS0uLjAwMTQ2Oj5BSExQVlxgY2RhXlxdX2FiZmhpbG5wcHFvb29vb3FxcnN1d3h4dnRzb2tmYVxWU1BNSkZEQD06NzQxMTFHamVhY2lsWEtSVVRUTkpLV2hmYV9cWmR4cGppZGdqamdkZXh4a2hmY2hnW0osJy5QbmlobG9qRUVMUFNUUlFPTUlFQz48QEU+Ozk9OT9UVltgZ212foSIio2QkpWXmFgaJiYkJCQkJSUiIiEhICAfHx4eHh4eHRwcHBwcHBwcHBwdHRweGxogHTRaa2plYGBiY2Nsdnl1dnV4eHh4dXNxcG5ubGxqamprbG5zeoJ5XE9OTEtHRUNCQkVKUmFudH+AfXl3d3NwYDksLCgmJygvT3OHgoCEhHZJN0JGSkxMTUxKSklDRUlKSUlJSElHRT8tJCMjISIjJSxAWG2AiIeCgH96cmRQNSIiJjJCTVBWWVxhZWlrbXF0eHp8fHx7e3x7d3R0dHJwdHh+gYiMi4iCNzE8RVNfVlFNbqC2vrq2t6OrtJmOk5qdlo2AZlhwe3l2cm1nY2NiY2NjY2NjZGVoam1vcXN1ipuYk46MjIuLj5COg4KCgoGBgoOKhYGCgoB/fXp3dXRycG9vb25tbGxsbG1tcHV9h46Rj46RkI6NjIuJiYmKj46KiomIh4aJh4eHhoWGiImHhYGChoqPkZA1NTQ0NDQ0NDQ0MzMzMzQ0NDQ1NTQ0NDQ0NDQ0NDQ0NDY2NjY1NTU2Nzc2NjY2NjY2NjY2NjY1NTUzNDQ0NDQ0NDQzMjExMDAwMDAvLy8vLi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8uLy8vLy4vLy4vLy4uLi4uLS0tLS0tLS0tLzEzNTg7QEVKT1RbYWVqaWVhXV9iZGZqbGptbm5wbm5ubm5xcnR3eXp4d3Z0cm5pZGBcV1RST0xIRkJAPDk3MzEyOl5pYWBia1gwNDs6NjIvN05oZFxaV1NdeHJpZ2JkaGpoaWxyfW1mY2Jqb1xHJyhAaGtpanBwXT9ITlNUVVNRUE5JRUE/PTw+RUI9OEBBUmRRWWFma3V9goaJi46SlpeRPRwmKCglJiUkIyMiIiEhICAfHx4eHR0dHR0dHR0dHR0dHR0eHh8fIkVsb2VeXGBkZGZqeHp3dnd4eXt6eXh2dXJxcHFta2traWlqbHJ7hHpbUExKRkVDRENESVRhbnR+enZzc3Rxclo3LzAsKCcnMlF1hIB+goNwPTNBSEtKTE1MSklBQkdJSUlKSUhJSEY+LCIjJSMkJScvQ1txg4mFg4B9eXBhTTIgISU5S1BUVlVYXF5jZWdrbHN2eHl7e3t9fnp6eHh1dnl8f4OHiYWEfzMzPERUW0xFWJS0vb2rlqikrLmykYaPnpWNhXdfbnh3dm9rZ2VjYmJiY2NjY2NlZ2ptb3Fzd46ZmJKNjoyKi4+PioSCg4OCgoKFiYOBgoOAf3t4d3VzcnBvb29vbWtrbGxsbnF2f4mPko6PkZCOjYyLh4eKjJCMi4yLh4mJiYiGhYWFiImJhoOChYmOkZGPNTU0NDQ0NDQ0NDMzMzM0NDQ0NTU0NDQ0NDQ0NDQ0NDQ2NjY2NTU1Njc3NjY2NjY2NjY2NjY2NTU1MzQ0NDQ0NDQ0MzIyMjEwMDAwLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLi8vLy8uLy8vLy8uLi4uLi0tLS0tLS0tLzAxMzU3Oj1CRk1TW2Flam1qZmNiZGVoa2tqbW5ucG5ubm9wcXN2eHt7eHd0c3FtZ2RgXFhWU1BNSkdEQj46NzQyMTNOamBdYGdnNScqKyssLjlSZV9XVlBNVnhzaGdnY2VrZWprboJ0aWZmbXZgQyZCZGpoaWxwcU5CS1BVVlZUUk9MR0VDPz05OkBKSj85PkVbWFBYYGJqdXuBhImKjpKSlYYtICgpJycnJSUlIiIhISAgHx8eHh0dHR0dHR0dHR0dHR0fIB8dL11ua19eYGNlZ2pxend1dnd4eXt9fX19eXd2dHJxb25ta2pmaGdrc3mBcVVMSkZFQ0NDREpUYmxyfHpycHBxbm5tYUUxLy8rKzVVd4V+foGAaTIjNUVKS05NTEc/PUNJS0pKSklISUhGPCoiIyMiJSUmMEdfd4iJhYOAfXdvYEgtIyUsQlBUV1dXWVpaXVxgZGZrcXR2eHl5e319fX18eHp9foCDhYWBgnk3NztBTVJKRG+mt762iHygtLq4tpF+ipeWkpiQgnV2dXRva2dlY2JhYWJiYmJjZWdqbW9zdHyTmZeQjYyMi4yPj4mDgoODgoCAhYmFgoKCgYB9enZ0cnJxcG5ua2tra2xsbG5wd4GKj5CNjo6Pjo2Mi4aGio+QjIuMi4mKiYeGhoWFhYiHh4OBgomNkJKQjzQ0NTU0MzU1NTU0NDQ0NDQ0NDMzMzM1MzQ0NDQ1NTU1NjY1NTU1NTY1NjY2NTU2NjY2Nzc3NzY2NDQ0NDQ0MzM0NDM0MzMxMTExMTEwMC8vLy8vLy8vMDAwMC8vLi8wMC8vLy8wMC4vLy8wMDAwLy4uLS4uLi4tLS0tLi4uLi8xMzQ2Nzk8QUVMUlpgZmtubmpnZmdpaWlqaWtsbnBvb29yc3d4e3x5eHh3dnNuaWdlX1xaWFNRT0tJRkI/Ojg2MjIvP2NjXmFmakcmKCopKy87VGVbV1JNTlR0d2ZnaGlpaWZobHCBfm1ramh1enBnaWhobHBucGhDR01RVVdVUlJOSUZFQT49Ozg1OUZJPzo5QklQUFZeZm11foGEh4qMj5KTdyUiKCgoJiUlJCEgIR8fHx4eHh4dHR4dHB0dHRweHR0dHyIiQmpuYl5gY2VmanB3e3d0dnh3e3x+fX5+fXp4dXZ3dHJxb2pnZmVmZm1zenxpUEpHRkNFQ0dMVWJyeHl1cG1ucG9vcG9tYUcyLSw3VnmCf36AfmQwIyQqO0ZISkg/NTM8Q0lLTEtLSkhIRTglIiIiIiQkJjNNZHuJioWEgn12bV1DKSIqOkxVV1pdXFxbWllUVVpkaGxxdHR1d3h+gYB/fn19foCCgoJ+foJyRzlAQ0tJQ02Jqba9tntZg5GpsqqNjoOLlpOho5yIdXFyb2tmYmJhYWFiYmNjZGZoa29xcXJ+lpmUj42JiouNkpCJg4GBgoCBgoOJg4GCgoB+end0c3Fvb29vbm1sa2tsbGptcHiDi4+Ojo6NjIyMjIqHhomPj46NjYqJiIiHh4aGhoaHhYOAg4aNkZOSkY81NTU1NDM0NTU1NDQ0NDQ0NDQzMzMzNDQ0NDQ0NTU0NDQ0NTU1NTU2NjU1NTU1NjY2Njc3Nzc2NjQ0NDQ0NDQ0NDQyMjIyMTExMTExMDAvLy8vLy8vLzAwMDAvLy4vMDAvLy8vMDAuLy8vMDAwMC8uLi0uLi4uLS0tLS4uLy8wMTM1Nzg5PEFFS1FYXmRqcHBtamdmaGhpamxrbm9xcHFzd3l8fX9+e3l6eXdybWpmY19cW1hUUlBNSUZCPzs5NjIzMDRbZ2BfYmhXKCUpKSwwPFZmWlVRT1BVcnhoZWVlYmVraGlteoNza2ppb3yBenhvbG9wcHFcQUhOUFNVVFJPTEdDQD48Ojk1MzI4Q0c+MTU9Q0ZRW15lbnV7f4KGiIqMkZRrHCUmJiIiIyIgHx8eHx8eHh4eHR0dHR0fHx4fIR4gHx0jTm5sYF9lZGRpcnd6fHd0c3V4ent7fH19fHx4dHV4dnR0dHJwa2lnZWZobXN6eGBLSERDRERITVhmcnh3cnFubW9ubnFyb21rYFRCP1x6gXx+gHlbKCIiIyEqOEFBNy85QEJGR0lLTEpJSEQ2JSIiIiIkJCg6UWl7iIqFhIJ/eG1aPyYlMURSVllbXl9fWllXVFNZXWVrbW9vbXBzeHx9f399f4GBgoKBfIKDbVZDRkVJRUBhk6iyt7iqjnyGlpWblZqUkpKNk5umlYNyb25oZmRiYmJiYWFjZGRmZ2xucXJzhJmZlJCMiYqKjJGOiYOCgoF/f4CEh4KCgoKAfnp3dXNxb29vbm1sa2trbG1rbnJ5hIyQj42OjIyMi4yJh4eKkI6OjYyKiYiIhoaGhoaGhIOBgYWLkJaVko+ONjU1NTQzNDU1NTU1NTU0NDQ0MzM0NDMzMzM0NDU1NDQ1NTU1NjY2NjY2NTU0NDU1NjY3NTY2NjY1NDU1NDQ0NDMzMzMyMTExMTExMTAwMDAvLy8vLy8wMDAwLy8wMDAwLi4vLzAwLy8vLy8vMDAvLi4tLi4uLi0tLS0uLjAwMDEzNTY4OTxBRUlRVVtiaXB0cm5qZ2dmaGlrbG9xdnl5fH1/gYKBgX9+e3p3cW1qZmJfXFtYVVJPTEpHQz88OTczMjEzTGleXWFjYTAkKCkrMD5YZFdTUVJUWGlyZmFiY2FhaWxycHGAdWpmZmhxe3p5dW9ucHJuTkRKTk9SUlJPS0pFQT48Ojc1MzMxLzJAQzozNzw/RFRcYWNudXx/hIWIhouTklgbHyIkIR8hICAfHx4fHx4eHh0dHR0dHyIjJCYjIB4tWW9rZWRoaGlucnVzdnd1c3R1dnl6eXp7eXJqaWlocXVxcHJ2d3JvbGhmaWxwc3dyU0lGRkJFSVBda3J3dm9ubW5wbXBycW9qZWlvb2tvf4B8fn13UyQhIyQjIiUjKyooLzo/RUdJSUpFRkY/MSUjJCIiJCUtP1ZtgIqJhIOAf3lsWDomKjtKVVtaWl1fX11aV1VTVltgZWlrbGprb3d6fHx8fYCBgoKCf36Dgm1WT0xHSUJBbJqlq6uompCanaGgoZiQk5mamI6QmJiIf3NraWRiYmJhYmJiY2NlZ2dqbnFzc4qcmZaQjYqKio2RjYiDhIOBf39/goWBgoGBgH16d3Nxb25ubWxsa2tqampra25ze4aMj42OjoyLioqLh4eGio+Ojo2Mi4mIh4aFhYWFhYOCgYWKj5WVlJGPjTY1NTU1NTY2NTU1NTU1NDQ0NDU1NDQzMzMzNDQ1NTU0NTU1NTY2NjY2NjU1NTU1NTY2Njc2NjY2NjU1NTQ0NDQzMzMzMzMxMTExMTEwMDAwMC8vLy8vMDAwMC8vMDAwMC8vLy8wMC8vLy8vLzAwLy4uLS4uLi4tLS0tLi4wMDAxMzU2ODo9P0NITlRaYGducnVzbmppZ2hoaW5xdnyBg4OFhYeHh4OBfnt6d3Fua2ZiX1xbWFVST0xKR0M/PDk3MzIwMEBjYFhdYmVAJSgoKi9BW2JWUlFUVlZkc2dgY2NjaG1tb2tncXNoXl9jaW1yeHt4dHRtXUdJS01OT09PS0tKRUE+Ozk2NTMzMjEvMjw9NDM3QUdSWVlhZW11eX+ChoWIjZGQTRgeHx8fHyAfHh4eHx8gHx8eHR4cHiIlKCstJSA3YW1oZGdpbW1yeHVucHJycXBvc3Z2d3l6cGhjZWhtbm9wbm1ra3J4d29paGpsbXJ0c2RNSERDR0tVY290dnRubW1vbmtudHJwbGpoaW1ye4OAe358c0skISQkIiQkJCcqKykuOkFFSElLTUxFPDAmJCQjIyYnMERZcYWLiISCgX93aFQ0JTBCTFJZWlteYGBfXFdVU1RZXmFmaGlrbnB1cXV6fH2AgYKCgn+AhIBuW1paVFFIRHGcpqWjnpWXmIqLmZeWk5aanZiVmpyTkImCamVkYWJiYWJiYmNjZWdoa3Bwc3aLmpiVkI2KioqNkIyGhIODgH9/foCDgYKBgX99enZzcW5ubWxsbGtrampramxudH6IjI6OjY2KiomLi4iGh4yRjY2NjIqIh4aGhYSEhYWCgoKIj5OVlJSRj401NTY2NTU2NjY0NTU1NTQ0NDQ1NTQ0MzMzMzM0NTU0NDU1NTU1NTU1NjY2NjY2NjY2NjY2NjY2NjY2NTU1NDQ0MzMzMzMzMjIxMTAwMTExMS8vLy8vMC8vMDAvLzAwMDAvLy8vLy8vLy8vLy8vLy8uLi0uLi4uLS0tLS4uLy8xMjM1Nzk6PT9DR0xTWF9mbHF3dXJva2lnaGlvdHuBhoeHh4iJiIeFgX16d3JvbGhkYl5bW1lVU09MSkdDPzs4NjIxLi80U2RaV1tjUyYlKCsyQ11hWFJRVllYYHJpY2pqbmxrbWtsbGNnaWVgXWNpbnF1enpuXk9NTk1NTk5NTEtKSUVCPz05NjUyMi8uLi4vNkE/Nz5HTldhVV1kbHR7f4KChouRlY9BGRseHh8eHh0eICAhISEhICAfHh8hJSgvNC1BZW1oZWhqa252d3Bpa25ycG9ub3F0dHV2a2NhYWFnam1ucW5saWZqdXtzbGxqamxucHFtV0ZDQ0hOWGVwdHhxbm9wcW5qbXJyb2xqamhrdH2Cf3x9fXJDIyQkIiMjIiUlJywuKio0PUJHSEdIRTwvJSQkJCQmKTJHXnWGi4mFgYGAdGdTMSY2REtPVltcX15dX1xZVlRUWFxgY2FjZWlrcHBtdXd8gIGBgoKCg4N/cGRnY1pWUU91naalo52ZlpOOj42OkpSZlZSbnaGgkZGOkHxmYmNhYGFiYWFjY2VnaWxxcXV5j5mWko2NiomKjZCKhoWDgX5/f3+Bg3+Cg4J/e3h1cW5tbWxsa2pra2poa2ttb3eAiY2Nio2LiYiJi4iFhYeOkoyMjYuJiIaFhYWEhIWDgoOHjZSWlZSTkJCNOTk5OTg4NjY3NjU1NTUzMzQ0NTU0NDMzMzMzMzQ0NDQ1NTU1NTU1NTY2NjY2NjY2NjY2NjY2NzY2NjY2NDQ0NDMzMzMzMzIyMTEyMjExMTEwMC8vLzAvLy8vLy8wMDAwMDAvLy8vLy8vLy8vLy8vLi4tLi4uLi0tLS0uLi8vMDEzNTc5Oj0/Q0dMUFdcY2lvcnV0cG1pZmhsdHh8gYSFhYWGiIaEgX97dnNwbmxoZGJeW1pXVFFOS0lIQz87ODYyMjAvMUNiW1haYF0yJSsuMEBaXVZTVVdYWWBzbWRocHFxbm5xbW5rX11iaWRmZ2tsbmdhVVFTU1RRUU9PTUtJSEdFQj8+Ozc2MjEwMC8vLC03RkU/Q0hOaWRVX2dscXh9foOGi5GViTgYHB0eICAfICIiIiIiIiIiHyAhIyInLzhIWmhoaGttbXF3dmxpZ2lsbG1tb3BxcXRyXVtbW19gZWtvcG5vcW1qZGl0d3Fva2ttbG5ucmVJREJJUVtocXd1bm5wcHBtZmlycnBua2xqaXF7hIB6fHtrOyQmJSQlJSUjJScsMTIrJCg2QURHRkI3KyMkJSQkJio2TWN6iYeEg4GBfHJlTC4mN0VLT1NZWVxeXV1bV1VVVVhcXmFiZGRjY2lram9yeHyAgYGBgYKDfHJua2dlYFxcfJ6kopyZk4+Jiod6f5KTl5iVlZmdop+ek4Z9a2NiYmJhYmFhY2NlZ2lscXJ0e5KalpKNjYqJio2Ri4WEgoF/fn+CiIaAgIKBf3t4dXBubWxsbGpqa2tqa2pqbXF4gouPjIuMi4mHiIeHhYaGkJKNi4qLiYiGhYSEhYWDgoGFi5GWlZSUkpCPjDk4OTk5OTg3Nzc2NjU1NTQ0NDQ0NDQzMzMzMzM0NDQ0NDQ0NDY2NjY1NTY2NjY2NjY2NjY2NjY2NjU2NjQ0NDQ0MzMzMjIyMjExMTExMTExMTEvLy8vLy8tLS8vMDAwMDExMDAwMC8vMDAvLy8vLy4uLS4uLi4tLS0tLi4uLzAxMzU3OTs+QEJGSk9UWV9laXB0d3NwbGdnbXd6fYCDg4ODhYSCgn56dnVzcGxpZmNhXltZVlJPTUpIRkM+Ojg2MzMwLy81WWBXWFxhQyYpLDBBXF1XVlZZWVlfc3FpamttcWxqamxuampkWFlZUj06PkJGUlNXWVlZVlNPT0tKR0ZEQkA/PDs5NzQwLy4tLS0tLzhGS0ZGQ1NyY1lgaWlzen1/g4eMkJSLMhgcISAhISIjIyMjIiQkJSQkIiIoJTVITVJaZGpvb3R4d2ljZWRkZ2dna25wbm9qUlFYV1tcX2NmaGxwc3V0bmpka3l5c3BsbG1sb3JwVURDSlFdbXV4cm5vcHBuaWJocXNwbW1tbWx1fYSAfHt5aDclJyclJScoJicqLi80MSokJS06RENAMyokJCQkJycsOVBnfIeGhIOBf3luX0EpKDxFSk5SVllbXV1cXFtbWlpbXV9gYWBgX2JlZWRobHB4e31/f4CAgXx3c3Nwa2dmZX+Znp2WjoiFhX5zVm+LjZWYmZSUl52dmpiJeXlkYWNjYWJhYWJjZWdqbXBydX2UmZaTjYqJioqOk4qEg4KBf36AgoiFgoKBgH97d3Rwbm1ra2tramtraGlqa21zeoSNkIyMi4mHhoaFhIKFiZCQjIyKiomIhoWFhoWFhISFipCUlZSTkpKQjow7Ojo6Ojo6ODc3NjY1NTU0NDQ0NDQ0MzMzMzMzNDQ0NDQ0NDQ1NTU1NTU2NjY2NjY2NjY2NjY2NjY1NTU0NDQ0NDQzMzIxMjIxMTExMTEwMDExLy8vLy8vLS0vLzAwMDAuLi8vLy8vLzAwLy8vLy8uLi0uLi4uLS0tLS4uLi8wMTM1Nzk7PkBCREhMUlZcYWdtcnZ2c3Bsam51eXt+gICAf4B/f3x6eXVyb2xqZ2ViYF5bWldST01KSEZDPjo4NjMzMC4uMUliXFlbYFQoKCswQltdV1VVV1dYXG92bG5xdXlxb3Fya2lrZV1cWkw9PUBITlRYWVtbWVZTUU9NSURDQkE+Pj08Ojg1MjAuLi4vLzE1OUNMSUIyRl5nXV5kanN5f4KEhoyQlYoyFyEgIiQjJCQkJCQkJCUlJSQlNVNsYk5KV2JscXh7b2JhYWNhYWNjYmdrbG5hQUVMUlhZXWJjZGdtcXV1d3NtaWl0fnlxbmttbW1wcmNIRUpVYXJ2eHJvcHBwbmJfZ3F1cG1ramhscnyDfn19emUxJiYnJSUmKCgpKSYlKTI0LCYlJS47PjEmJCUlKCcoLT9Wb4GIhoSDgIB5blo4KDA/R0pOUVRZXF1bXV1bW1tbXV5eX2BfXl1eYmNiY2dqb3Z5fX19gIB7dXR0cnNxb3CElJqWkJKampR/dnuDiYuPlpmbmpiWlpeYlYN8b2BhYmFiYWFiY2Vnam1xc3SBmJmVko2KiouNkZOKhIOCgYB/f4OIhYGBgYB9enVzcG1ta2tra2pra2lqaWxuc3yHjY2LjIqIhoWFhYSEh4uRkIyMiYmIh4eFhoaFhYSEiI+UlZSUlJOTkI6MPDs6Ojo6Ojo5ODg4Nzc2NjQ0NDQ0NDMzMzQ0NDMzMzM0NDU1NjY1NTU1NTU1NTY2NjY1NTY2NjY1NTQ0NDQ0NDMzMzMyMjIyMTExMTAwMDAwMC8vLy8uLi4uLy8vLy8vMDAvLzAvLy8vLy8uLi4uLi0tLi4uLi0tLS0tLS0uMDEyNDc5Oj0/QUVHS05SV11ianB1d3Z0bWxvdnh7e35+fHp8e3t6eHZxb2xraWVjYl9cWVdUUk9NSkVFQT05NzczMjEtLi85XWFZWV9hNiYrMENbXllZWVpbW19rd3FubXB5e3h0d29oZWZeV1RHPD5CSE1SVlpcW1pXVVNQTEhEQUA+PDw7Ojg3NjQzMTEvMDE1Oz87O0pNRkFCXWdfYGRrcnl/gIOGjJGXiC8dIiYjJCQlJiMjISQkJSMqRmh1cWRMQUpgdHx5Z19iXl9hY2NjYWFlaWtUP0NKSE9UV1phYWBkaW50eXp3dHFsb3l7cm1tbW1rbW1pUElMV2Z2eHVxcXJxcG1cXmZwdHFta2tpa3N9g397fXhhLCcoJygoJygqKScmJygtMDAnKCgpKi8vKiknJiglJjBGXHODiIiDgYCAeWpVMSc1RUtKTFBSVFhaXFxcXFtcXV1cXWBgX2BdXl5bWVxgZWxvdHd5en1+eHJzdHV3dXR2hYyRk6CsrKKVgXp7g4eMj5KVmp6hnZWUmJmSgnhkYmBgYWFiYWNlaGtucnR0hZeXk5CMjIqMjpGSiYODg4KAgIGEiIWAgIB/e3d2dXFubWxrampqa2tra2prb3d/iI2Ni4uKiIWEg4ODhYiMj46MjIqKiYiGhYaGhYWDhY2SlZWUlJSSkpKOjD08Ozs7Ozo6OTg4ODc3NjY1NDQ0NDQzMzM0NDQzMzMzNDQ1NTY2NTU1NTU1NTU2NjY2NTU2NjY2NTU0NDQ0MzMzMzMzMjIyMjExMTEwMDAwMDAvLy8vLi4uLi8vLy8vLzAwLy8vLy8vLy8vLi4uLi4tLS4uLi4tLS0tLS0tLjAxMjQ3OTo9P0FERUlMT1NZXmRrcnZ3d3JwcnN2d3p7ent7enp6eXd1cm9samhlYmFeW1lVUk9NS0hFQj87OTc2NDExLi4vMk1hW1lbYk8nKy89WGBcXFxeXmBhZ3d1b3F3goJ3dnhya2hlVUpPQTo9QENLUVVYWVlZV1ZSUE1KRUNAPj07Ojo6Ojg2NTMyMzM0PD07Oz08PlNdWmNpamNkZG1zeX6Ag4iPl5eDKxwoJyYlJiYkIyUkIShPbnhpYGNeSzxBVG50ZFlbXV5iYmJmZV9gaGRPPT9JQ0dITlVWVVdaYGhvdHl8e3h1cWx0fHRsbGxramhoaFhLUlttd3ZxcHFycXBlV1tmb3NwbGtram10fYN/fHx3WSknKCgpKSopKSgnJycoKi00LigoKSoqKiopKSopKSkzS2F0hYiGgYGCgXhmTC0sPEdKS0xOUVJWWFlaWlxcXFxeXlxaXl1aXV9fXFlaXF5iaW9zdHd5d3FucHV1dXV2d4KGjaCztq6jjYB7hIyLi4uUmpmanqCdlpSak4d8cmFiYWFgYGBiZmhrbnJ0doiZlZGOjIyKjI6RkIeCgoKCgH6BhIiFgICAf3t3dHFwbW1sa2pqamtra2trbXJ3gImNjYuLiIeFhIODg4aIjI+OjIyKiomIhoWGhoWFhYqQlJWVlJSUkpKSjow9PT49PDw8Ozs7OTk4ODc3NjU0NDQ0NDQzMzQ0MzM0NDU1NTU2NjU1NTU2NjY2NjY2NjU1NjY2NjU1NDQzMzMzMzMzMjExMTExMTExMTEvLy8vLi4uLi0tLS4vLzAwLy8wMC8vLy8vLi4uLi4uLi4uLi4vLy4uLy8uLS4uLi4wMTI0Njg6PT9BQ0VHSk5QVltfZmpudHd1cnFydHZ4eXh4eXl4eHd1dG9ubGloZmJfXVpXU1BOTElGQz8+Ojk3NDIyLy4tLS49Xl5ZWWBhOygtPVhlYF9eX2NpaWdzfXV0fIqFeXd3dW5qX1FKUEU6PUBDR05RVlZXVlVVUlBNSUZEQUA+PDo6Ojo6NzU0NDU3OT08PDs9NiwzTF5mZ2lubmRianF3e4CEho2Ul4UmISknKScmJSQjIjVxeXJrZV9dWE4/PlFSVllZWVxeYmJlZWVlZldEPTxCSEVIRk1RT1FUX2hvc3N0dnl5d3Vwc314b2xra2poaWZbUlRhcHZ0cHJzc3JtXlZZYm5ybmpqamltdH6Bf31+dVQnKCkoKCkqKSgoJygpJyksMjEpJygqKyorLCwwLS0vO1NpfIiHhIKBg31zY0MrLz5JS0tNUFBRUlVXWFlaWlxdX15dXV1dXFxdXlpXWFlbW2BpcHBxdXFnaG1vc3Z4d3qBi52us6uejoWEgn+Cg4KCipecnJufoZyWkpiNgn5mYF9gYGFgYWRobXBydHeKmJWSj4yMjI2Nko6DgIGCgoGAgYSIhX9/gH17d3Nxbm1sa2tra2tra2xsa21xeIKJjYuLi4eFhYWDg4OHi42Oj4yLiYiIh4aGhoWFhIeQlJaVlJSUk5GRkY6LQEA/PT09PDw7Ozk5ODg3Nzc3NTU1NTQ0MzM0NDMzNDQ1NTU1NjY1NTU1NjY2NjY2NjY1NTY2NjY1NTQ0MzMzMzMzMzIxMTExMTExMTAwLy8vLy4uLi4tLS0uLy8vLy0tMDAvLy8vLy4uLi4uLi4uLi4uLy8uLi8vLi0uLi4uLjAyNDY4Oj0/QUNFSUxNTlJWW2BnbHB2eHh0cnR2dnZ3d3V1dnZ1dHNubWtnZmVgX11YVVFOTEpHREI/PTs6ODY0MS8uLS0tMlFgW1peYlIqLDlVZGNkZGVscHBpcn56fYeQinx2fHVuZmBVSz06OTw/QUZITVJTVFNUU1JQTUpHRUJAPj07Ojs6NzU0NDQ1Njs+PTw7OzMvKyo8WWZnanJ0aGNka3R6foKKj5SYhywiKSknJycjH0Bydm5qamtpamZaQThJTUVPVVZZXGFjZGVnXkM0RT9BUUtFSEhJTE5TXWZscnR0c3R1eHl4dnh9fXVtamxoZmZjYVdaaXV3c3Byc3RwaFZUWGFscm5qa2lqbnV+f3x/fXJLJCcpKSkoKSgoKioqKSonKTAzLScnKCoqKiotMDMzOUdcc4WHhYKCgX98cmBBKzNCSktLTVBQUFBSVFZZWVlaXF9fX11cXFtZX15bVFVZX2BaYmpqbW9kWmBnbnN3eXyAhZGgqKmdlY6Hh4eEgYGBgoeNlZybmZ6fnZWXkYp+b19gX19gX2Nma21wcHV2i5iVko+MjIuLjpONhYKBgoKBgIGEiIV/f4F+eXVycGxsbGtra2tra2tsbGxvcnmCiY2Li4uHhYWFhISGio+Pj42MiomIiIeGhoaFhIiOk5aWlZSTk5KQkI+Oi0FAQUNCQD8+PDw7Ojo6ODg3NzY2NjY1NTQ0NTU0NDQ0NDQ0NDU1NjY2NjU1NjY1NTU1NjY2NjU1NTQ0NDMzMzMyMjIyMjIwMTExMTAvLy8vLy8uLi4uLS0tLi0tLi4uLi4uLi4uLi4tLS0uLi4uLi4uLi4uLi4vLy4uLi4uLi4wMjQ1ODo7PkBCREZJTE1RVVhdZGhscXV4dHJ0dHV1dXNzc3J0cnJvbGpoZmRiX1tZVlNQTEpIRkNCPz46ODc2NDEvLSwsLC1BX11ZWl5iPSk3UWZmaWtucXV0cHR8f4KKin9wbXVzbGpfWEg3ODk6PD1BRUtQUVBQUVBPTk9LRkJAPz49Ozs5ODg1NDMyMzc9Pj48PDgxLi4uKzBKY2hocXFvZ2Ztc3h9g4qNk5aBKCEnKygnIjNzdW9ra21tbG9vW0M4PE9ESlVYWltcXl5bTDk0NTg2RU1JQklKSkxUXGNnaW1wcnFwcHV4enp6fX11bmhqZ2NhYWJcYHB6eHFxcXJzbGJQUFdganBramxqanF5gX98foBxQyYnJygnJygpKikpKiopKCotMTUwJygoKSkqLDIzND5SZnqHiYWBgYJ9eW9dOis5RUlNT09PUE9PUFJSVldZWlteXl9gXVlYWFddW1RTVVllZF9kZWhrXVZeZm10ent/h4yUnaGgnpeTi4uLhoaKioqHh4mQm5qYnZ6YlpKNg3lkYWBhYWFkZ2lsb3N3epKYkpGOjIuJiYySi4SDgoGBgICBhIqFf398eXd0cXBvbWtqa2tqampqamprbnN9hYuNiouKh4WEhIWDhouPjo6MiomKioeGhoaFg4WLkpSVlZWUkpGQkJKRj4xCQUFAP0A/Pj47Ozo6Ojg4Nzc2NjY2NTU0NDU1NDQ0NDQ0NDQ1NTY2NjY2NjY2NTU1NTY2NjY2NjQ0NDQzMzMzMjIyMjIyMDExMTEwLy8vLy8vLi4uLi0tLS0tLS4uLi4uLi4uLi4uLS0tLi4uLi4uLi4uLi4uLy8uLi4uLi4vMTIzNDY4Oz1AQ0VFR0pMUFNWWl1jZ2xxdXVxcXFwcHJycHBxcG1tbGpoZWNhXlpYVlRRTUtIRkVCQT48Ojc2NDIwLiwrKystM09gVlVZYFcsMkpha2xtcXZ4dnFxc4CBbXRsbnZpZWheWFdCODo6OTk6PUFITlBNS0xOT09OTEhDPzw7Ojg3Nzg4NTQzMjU6P0A+PDw3MS8vMC8uKzVTampqdXJoZWpye4CDiYuQknYbJCgnKCZqd21oanBydHR4clpHPDdHSUVTV1laWlhFNjU3OjgxOkRCQEJESElRXWRnZmdoZ2lubnBydnh3dnl6dW9qaGVhX2BhX2Rzd3ZzcXJycGlZTk9VYGlsaWpsampxfIF/fIB/bTwlJygpKSkqKyorKiorKyorKy80NzEmJygpKSwxODxJXHKDjImFhIKBgHdqVjQsOkRJTU9PUFJRT05PUFJVWVpdXl9hYF1ZV1VVXF9dWVNPTmFnZ2ZnZlpZYWdydnx+g4mOkZebm5eQi5KUlJGYoKKempKLipGXmJaam5mSh4iHdGZlZGRlZ2lsbXBzd36VmZORjoyLioqOkYqDg4OBgX9/gYSJhH9/fnx2c3FtbGxtbGtpampqampqbG91f4WLjIyLiYeFhISFhomPkI+OjI2MioqIhoWGhISJkJSVlZWVlJSSkJCSkY+MRkZFRERDQT8/Pzw6OTk4ODc3Nzc3NzU1MzMzMzQ0NDQzMzQ0NTU1NTY2NjY2NjU1NTU1NTY2NTU1NTQ0MzMzMzIyMjExMTAxMTExMDAwLy8vLy4uLi4tLSwsLCwtLS4uLy8tLS0tLS0uLi4uLi4uLi0tLi4uLi4uLi4uLi4vLzExMjM1Njs7Pj5AQ0VHSU5RVFdZXmNobm5vb21tbm5vb21tbWtramhnZWJhXltZVFJRTktJSEVDQT4+Ozg2NjMxLy4sLCsrLC48XFhTVFxfQSk9VGZsb3N7enZvbGdpblticYaMeGdbT1NTQjo6Ozk5Nzc7Q0pNS0hGSktNTEtFQjw6Ojg4ODg3NjQzMjM3PkJCQD48NTExMTEwMC8sJ0BdZmxtcG1qbXZ5foOIjIyRTxwjKCZRenFranB1d3t/fWBWRzszO0I7P0lVWk81KTY7OT1APTs7PkJER0lRWmNoaWZhYmNgX2Vpa29xc3RzcnFxamRgX15gX2Nod3h0dHVycW9kUk1OVF9maGpta2lrcnyEf32Af21AMi4qKysrKyoqKiorLC0tLC0tMDg8LyYoKSwuLjlBU2d5iY2JhYSCgX51ZEgtKzpDR0tOT1BSU1JPTk5PUlNYW11fX19eWlZUUVpgY19aV1RVX2dpaWVbX2hudXp+goeKjY+RlpSQjY+ZpKSinpyampqdmpCMjpSUmJuWh36Lhn1saGtpaWttbnJzdXeCl5iTkY6MjIyNkJOJg4KDgYGAgIGEh4J+fnt3dXJvbGxsa2ppa2lpaWlqam1wd3+HjIuKi4mGhYSEhImLkJKQjYyNjImJh4WFhoSGjJOVlZSUk5GQkI+QlJKOi0hIRkVDQ0JCQT8+Pjw8Ojk4ODc3NzY1NTQzMzM0NDQ0MzM0NDY2NTU2NjY2NjY1NTU1NTU1NTU1NTU0NDMzMzMyMjIxMTExMTExMTAwMC8vLy8uLi4uLS0sLCwsLS0uLi4uLS0tLS0tLi4uLi4uLi4tLS4uLi4uLi4uLi4uLy8wMTIzNTc4Ojs9P0JFR0hLT1JWWFldYmVnaWtra2lpamppaWloaGZlZGJfXltXVVNQTkxKSEZDQT89PDg4NjQyMCwrKysrKywsMk1fVlFXW1csMD1QXmhvdXp0bWhfV1FKWnKFjoaAc2ZlYEk9OTs5OTc3OD5DSUhFRUZISUhHQ0A8Ojg1NTQ1NjUzMzU3PUNEQkI9OTQyMjIwMTAuLi8sK0Rjam1wcW1wc3Z+gIWIiXcgJCJCe3Foam92eXyCd1xWVkk5MjU3ODc2OzgsMDU2Nzk6Pj4+RUhMUVRaW2FpamZhXmNmX1pcX2FiZm9xbWxucWpkYF9eXl1hbHZ0cXFycW9vYExLT1VdY2VrbWpqbnV9hoKChIFyUklFPDAsLCsqKysqKy4uLCstLS4yOjkyKS04Pjc9TWJ0g4yNiYWEg4KAdWVKLycwPkZKS05RUFBPT05NTk5PUlhdXV5fXltXVFNXX2ZoZGNiZWprbG5qY2lwdnx/goeLioqLi42Pj4+TmqKjoJqYmZqXlZaWjoqOkZKTk5WNh4SCdnBubW9vcXJzd3h5hZeWkpCNjIyNkJCTiYOCg4GBf3+BhIiDfn57d3VycG1sbGppaWhpaWlpamptcHiBiI2LiYqIhYWEhYeLkJOSkI+NjoyKiYiHhYSEiZCUlZWUk5KSkJCPkJKQjYlNTUlIR0ZEQkNBQD89PDs7ODk4NjU1NjY2NjU1NDQ0NDQ0NDQ1NTU1NTU1NTU1NjY0NDQ0NDQ0NTU0NDMzMzMzMjIyMjIyMjIyMS8vLy8vLy4uLi4uLiwsLCwsLC0tLC4tLS0uLi4tLS0tLS0tLS0tLS0uLi0tLi4uLi4uLi4uLjAwMjM2Njg7PD5AQkVISE1PUlZYWlxgYmRlZGRiY2VnZmVlZmVjYmFeW1pYVVJQT0xKSEhFQUE+Ozs4NjQyMS4rKysrKyssLSw8W1lSVVtiRSYxOUVXYGtzb2hhXFhVSUhgfImFgXt1dWpOPDk8Ojg3NjU4PUBBQEJDQ0NDREE/PDk2NDMwLy8xNDY7P0JFRUNCPTYzMjMzMTEyMTAzMjAoM1JnbW1qdH13dHZ6goBqNyA0dXVqam52d35/dVtUVVZOPjQyMzU2NTQzMjc4ODo6OTlDSk5QVFxfYF5lamhlYGNnaGVjX11ZUFBgb21qbHFrYl1cXV5cXm92cW9wcXJxbFJMTE9TWFxlbGxnaW12gIaFhYiGeWxjW1NENC0rKysrKysrLCsrKyssLjQ7PTAzMzo+RFpuf4yQjYmIiIaEe3VqXVtXTEVBREZITk9OT05MSkRASUxUWlpZWFxcW1dZXmZsb29wcnNzdHFzcnFzd3uCg4aLjYyLioiIioyRk5eamZmUk5aYmJaTkZCPjo6OkpSPhoWKhH13dXN0dnd3eHd6fIqVlJKPi4uLi46QkYiCgoKCgH5+gYSIf358eXd0cXBubGxqamppaWloaGtrbHF5g4qNiYiKh4WFhYeJjJGVkpCQj42LioiGhIOFiY6UlZSUk5KRkI+PjZCSkI6LTk5MS0lIRURFQ0NBPz08PDo5OTY1NTY2NjY1NTMzMzM0NDQ0NTU1NTU1NTU1NTQ0NDQ0NDQ0NDU1MzMzMzMzMzIyMjIyMjIyMjEvLy8vLy8uLi4uLi4sLCwsLCwtLSwuLS0sLS0tLS0tLS0tLS0tLS0tLi4tLS4uLi4uLi4uLi4wMDIzNDc3OTo8Pj9BQ0dKTVFTVVVWWFxcXl1dXl9hY2JhYGBfYF5dWldWVFJPT0tJR0ZDQT8+PDs5ODUyMS4sKysrKysrLSwtMUdfV1FaZF8wKDA6TVhbY2VkXlhZWlJKTmx6dHBvb3JiUUE8NTQ0MjEvMTQ1NTQ2Nzg7PD48Ojs5NjQzMzIxNTg/QkVGRkVCPjkzMTEyMjIyNTU1NTU0NTAvPVppbm55fXt1ZVJUOCcvbHRpaGxvd358Z1dXWltYUkEzNDY4PDMvMTY2Njo+P0JKTU9UV1dbX19iZmdmZWRlZWhlYVtZUkVAUWZqamtwaWBbW1xcXGV5enBwcXNxcGJKSEtOUFVcZW9saWtwe4aIiYqJiYV/eXBkW0k2LCsrKyorKywrKysrKiwvNT43MzU9QlFpeoiOj42JiIiGg310alxdYWZmZVdKRkdMTEpLR0EuKj5CRlZYWFlcYF9dXmVtcnNzdHZ5eXh4d3Z4en2Cg4aIjYyMi4uJiYiJjI2TlZaWkpGSk5OTkI2NjY2Ni5KWlZSTlJGMhnt3eXp6enx8f4GLk5OQjoqKioqMkJGFgoKCgoB+foCCiH9+e3l3cnFwbmxraWlpaWlpaGhqa2xxe4WLjImJiYaFhoeLjJGTk5KQkI+Ni4qIhoSDho6UlZWUk5KRkI+Pj42Qk5GOi09OTk1LSkhGRURDQkA/Pj07Ozk3NzY3NzU1NTU1NTQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMzMzMzNDU0NDMzMzMzMzMyMjIyMjIxMTExMC8vLy4uLi4tLS0tLCwsLCwsLCwsLC0tLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS4uLi4uLS4tMDAxNDQ1Nzg5Ojs9P0FGR0tMT1BRUVNWV1hYWFhaW11dXF1cXFxaWFVSUlBPTEpKR0VDQUE/Ozk3NjQzMjAsLCwsKiosLCwsLC03VVtTVV1lTyYsNEBNU1VZWFRSVllYVVJdbG1rZmhpYlhLOC0uLSsqKCgnJycnJyotMTQ4PEFDRERFR0dDQEFFRkdHR0ZFQTs0MDAwMDE1NTc2NjY1NTYzMy4wSWJnc3t8f3hYICQra3ZsbnFvcnlzY1dcXFteXFVBNTU2NTMwLS80RElGRlhkVFFWWlpZXl5iZGVkYGBgZGNkY1xXVE0/OkNVYmdna2dfWllbXV1ufndwcHJxcXNYRkVLTlFXXWVqbG1yeICHjY+Pj46NiYh/c2teTDQtLCwsLSwsLSsrKysrLTE2Ojs7QkxacoGOkI6MioeHhoF8c2hgXWJmY2JiWUdPTUc+OT0/OSMvMy5HWFpcX2NkY2ZrcnZ3eXl5eXp8fn18fYCDhYaGioyPj46MjY6QkI+PkZGSkpGRkZCPjo+PjY2MjI+QkZGQjIuKi4qEgH9/gICAgIOEjJKQjoyKiYmJjI+OhIKCgYGBfn5/goh/fnp4dnJwcG5sa2lpaGZoaWlpaWttc32Hi4yJiYiGhYaJi4+SlJKRkI+OjYuKiIeFh4iSlpWTkpKRkY+Pjo6NkJGPjotQT05OTUtKSEdFREJAPj49PDs5ODc2Nzc1NTU1NTU0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzMzMzMzQ1NDQzMzMzMzMzMjIyMjIyMTExMTAvLy8uLi4uLS0tLSwsLCwsLCwsLCwsLCwsLCwsLC0tLS0tLS0tLS0tLS0tLS0uLi4uLi0uLi8vMDMzNDU3ODk6Oz1AREVJSkxOTU9PUFFSUlJVV1laWVhZWFhXVlRRT05NTEpJSEZEQkA+Ozk3NzUzMS8uLCwsLCsrLCwsLCwsL0NfV1NYY2g+Ki0zQExQTExMTU5SVllWVGdra2hjYmJeW0orKCcmJSMjISEiIiMkJikwOUVOUVJQT09OTUpJSUhHR0ZDQTw3MTAwMDAxNTY3NjY2NDQ1NTU0MTA1SV5vd3l5ZTAqaXptbm1ucnh3XFhaW1xdYV9fRzY1NTMxLS4wNEZKSUxlbFNTU1JTV11dYWNiX1xcXF1fXlpZUU5DOjc9T2BnYGlqYFxcXFtheH51cnBzcXFsTEJFSU1RV15kam51eX+Gi4+SkpOTjo2MiIB2a1tEMC0uLS0tLSwsKysrKywvNDs7PUBOYnaIkJKQjIqIiIeCe3BlX0RGY2llYV5TY21nX1ZMPUA7OTxAS1lfYWNlZmhucnZ5enx8fHx9fn9/fX6AgoaGhomOk5OVlpaXl5eXl5eXlZWVk5GPjIuMjIyNjo6MjImHhYSDhIWEg4SEhIKChISDh46PjYuKiomJiYyQjIKBgICAgH5+f4KHfnx6d3VycHBubGtpaWhmZmZoaGlqb3Z/iIyNiYmHhYaFioyRk5SSkJCPjoyLioqIh4iNlJaUk5GRkZGPj46OjZCSkI6LVFNSUE5OTUtJR0ZEQ0I+PT07OTo4Njc3NDY2NjU1NDQ0NDQ0NDQ0NDQ0NDQ0NDQzMzMzMzQ1NDQyMjIyMzMxMTMzMjIyMjExMDAwLy8vLi4tLSwsLCwsLCwsLCwsKysrKysrKywsLS0tLS0tLS0tLS0tLS0tLS0tLS0uLi4uLi4uLjAxMzM1NTc3ODo9QERERkhJS01NTU1OTk9PUFNUU1RUVFNTUlJPTU1LSUlHR0ZEQD88PDo3NTQyMS4tLCwsLS0sLCwsLCwsLS41VGFWWF9mYTArLzZBTEpGR0hHSE1WVVNYaW9wY1pcZGFXQyclJSMhISIiIyMkJykvOktVVFJQT09PTkpKSUlHRERDQT03MzAwMDAxNDQ2Nzc3Ozg5NTY1MzU2MC4wNz9FQjUsanhubnJxcHp6XVhaXF9hYWBhT0A3NDQzMC8tLTI2PkFCSk5RV1hVVFVaXV9fWlpcW11dWVRRTUdBPDY2PU9cXlZgbGJdXV1cbIN+dXFxcnNwX0RCRkhMT1ZfY2dyfIGFiY6RkpOTlJOQjoyGgXRnVj0vLy4uLi4uLisrLCstLjA3PEBFUmqAjZCQjoyLioqJg3xwZGNQPV5nYmVlaGhoaGxvbGJPREtRUVlhZmdrbnJzeHt/gH9/fn9+fn9/gH58fX6DhIeQlJianqCgoKGio6GjoqCdnZmXlI+MjIyMjI2Lh4aCgoODg4ODgoOFhYeIiIaFhYmNjIuLiomIiIiMjomCf35+fn5+fn2Ahn57eXZ0cW9ubGxraWhnZmVlZ2dpanB3gIiMjIiJh4WEh4uOk5aUkpCQj42LiYqKioqLkZaWlJKTkZCQj4+OjYuQk5COi1VUU1NQT09NS0lGRkNCQD49Ozo4OTc3NzY1NjY1NTQ0NDQ0NDQ0NDQzMzQ0NDQzMjMzMzMzMzMyMjIyMjExMTExMTIyMjIxMTAwLy8vLy8uLS0sLCwsLCwsLCsrKysrKyoqKiorKysrLCwrKywsLS0tLS0tLS0tLS0tLi4uLi4uLy8wMTExNTU3Nzo8PD5BQ0RGRkhKSkxNTE5OTk5QUVBRUFBPTkxMSkpIRkZFRENCQD88Ojo4NjQyMC8uLS0sKy0tLS0sLCwsLCwuLj9hYFdYX2dPKCouNkJNSkdJRURIS01UV15tcWZfYGRlXlQ5ISQiISAiIiIkJywxP1BbWVhZVlJVUU5KR0ZGREFAPzw5NDAwMDAxMjQ0NjY4PD48OTU1Nzc1NDQxMC8tLisxZXZta29xcHd7Y1lbXl5kZmZQPjg7ODQ0MjIxMDEzNDc6QktQWFtZWllZXV1dXVpaW1xcWVRQTUk9ODY1Nj1LU1RRWWhlW11dYXeDfXZ0dXRzcVI/QkZHS09WX2hvdYGIjpCRlJaXlZWTko6MjId9c2JNNS0tLS4uLi4sLCwrKy0sMjdLXGR0iJKRjpCNjIuLiIJ5bGNiY1peZWNjZWZpaWdnam9vcHBva2RnbXJzdXV5eoCCgoSEgoCBgIB+fHt6eHl7fH2Fj5yjpqqrq6urrK2usK2qqqmjn5qWkIuLi4uJh4SEgYCAgICAgH+BgoOHiomGhIWJi4yLi4mJiYmJi42Ig4B+fnx+fHx9gIN9e3l2dHFvbWxsa2loZmZlZmdnaWpxeoSMjYuKioWEhIeMkZWVkpGQkI6MiomJiomLkZSVk5OUkZCQkI+Pjo2LkJKPjYpYV1VTUlJRT01LSElFQ0A+PTs7OTk3Nzc2NTU1NDQ0NDMzMzMzMzMzMzMyMjMzMzM0NDIyMjIxMTExMTEwMDExMDEyMDExMDAxMS8vLi4uLS0tLCwrKysrKysqKioqKiopKSoqKysqKisrKisrKywsLCwtLSwsLS0tLS4uLS4vLy8vMDEzMzMzNTY3OTk7PT9BQ0VFRkhJSUtLTE1OTk1NTUtLSkhHRkREQkNDQkBBQD48Ozk2NzQxMC8uLS0tLCstLS0tLCwtLCsrLS00UGVZV1hgZz0jLC82Q0tKRkRDQkVGSFFXZXJqaWhiXVhcUzIoJCEhICEiJSkvPVNeXmBgXFtbVFFLRkJBQT8+Nzc4ODIxMDAxMjMzNDc4O0BBPTg4NzU1NDQzMjAtLC02bHdsam9ubnd6aFxcW11gYVc6KC43Ozk1MjAwMzY0MzU6P0dQVVhXVFZZWV5eXVxaW11eXlpUUlFHOzc1MjQ6Rk1RU1ZkZl1eW2aAg3p3dnRzdHZrSz1CRUpRVVxreX6Ij5CSlZaYmZeVkpGPjYyLg3ltXUMyLiwvLzAwLi4uKystLi40Q2F3gY6Uko6NjI2MjIWAdWdgX2FhYmFjZGRnZ2VlaG5ycnZ5foGBfXx8fn5/gYGGhoaIh4OAgX58e3h3dHJzdHR0fpCmrK+xtLS0tre6u7u6tLOyrqmlnZWPjY6LiIaCgYB+enp5e3t7fH1/gYiKiIWFh4mKi4qKiYqKiYqMiIOAgIB+fn19foGCfnp4dXJxbm1ramlpaGZmZmZnZ2lqc3yGjY2MjImGhISGjJOVlZKQkI+MiomIiImJjZGWlZKSkpGRkJCPj4yNi46Rj4yKWVhXV1VUU1BOTUlIRUNBPz48PDo4Nzc3NjU1NTQ0NDQzMzMzMjIyMjIyMTEyMjIyMzMyMjIyMTExMTExMDAxMTAxMjAwMDAwMDAvLy4uLi0tLSwsKysqKioqKioqKioqKSkqKioqKSkrKysqKyssLCwsLS0sLC0tLi4uLi0uLy8wMDExMjIyMjM2Njg6Ojw9Pz9BQ0RFR0dJSUlKSkpMTElHRkZEQ0RBQEFAQD49Pjw8OTg2NDUyMC8vLi4tLSwsLS0tLSwsLSwrLCwtLztaYVpVWWVkMyYsLzlDS0hFRUNBQUFIUFprdXdwXlBVYGJKKCAhISEhIyUrNk5gYmVkYl9ZT0hBODUwMDI3NzU2OTg0MjExMTIzMzU2Nzo+PTo4ODc1NTQ0NTMzLC1CbXVtam1xcXZ5Z2FcYF5hWDopKS0wNzo5NTIwMjg3NTU6P0hPUlhbV09PVlphYV5cWlteXV5aWFZXTkI8NjU1PEZPVVNSXmdeWlxtgoF4dnVzdHNxdnRTQUdMTVBfc32EjpKUlJaXmZiTkY6LjI+MjIh+c2ZXPjE0OTs7PDg2Mi0qKzAyMkNfeYuTk5KPjoyLioqFfG9iX2JhYWJiZGVlZWdnamtwcnR4fX+BgISDg4WFhIWFiIiIh4eDgYB6eHd0dHBxb25ucXWPq7Gyt7m5ubu8vr29vLu6ubewrKGWlJWQiIWEg4J+fHl3dnV2dnZ3eXt+hYiEgYGEiImKiomKiomKi4eEgoCAgIB9fX6BgXx5dnNybm1sa2tqaWhmZmhoaGhpbXR9h4yNi4qIg4OFiI+UlJKRkI6Ni4qIiIiLjY+SlJKRkJCQkI+Pjo6LjIuOkY+Ni1tbWlhYWFRRT05MSUdEQkA/PTw7ODg4NzU1NTUzMjMzMzMzMzIyMjIyMjExMjIwMDAxMTExMTExMTEvLzAwMDAxMTEwLy8wLy0vLi4tLS4tLS0rKysqKSkpKSoqKSgoKCgoKSgpKisrKysrKyssLCwsLCwsLS0tLS4uLS0uLjAwMDAwMDAwMTI0NDU3ODg6PDw9PkFCRERFRUZHR0dHRkVHRENDQ0FBQT89PT06PD07OTg2NDMzMi8vLy4uLS0tLS0tLCwtLS0tLS0tLS0zSGdgV1VcZ18pJiYvNUBIR0ZEQUBAQklUX25yb2BQVF1eVzsfISEiIiQnLkRdY2NkY1xORDcsKCMhIycoKy4xNTo8OTQzMzQ3Njc5Oz09QDo4OTc1NjU0NDUzMDdifXhtZ2txc3V3YFpcX2FiUy0mKC0vMzY0Nzc0MTg7ODk5PkZPVFVXV1RQUFJXXl9fX1xcXlxbWlpcXFhLPzw4OUROVFVWVltkYVdfdoB9eXZ0cHJyamp3eFhFSU1WY3eCipKUlZWWl5mUkI2JhIGHjY2Lh3xxY1NFR0xQUFBNSENAODEyMTRFZHyNlJOPjIuLi4iGgXhrYF9jYmNhYWJjZmdoam9zc3V7f4GDhYaHiImJiIiGhoiGhYSDgYB+eXZzcG9oZmltcG1umK2ys7i8vL29vr6+vby7u7u7trCnnp6Wi4CBgIGAe3l4dnNyb3JwcHJydnd/hIB7foWLi4qJioqKi4qGhIOBgICAfn6Ag4F7eHdzcGxsbGxqaWlpaGZpaWhoaWx1gImMi4yKhoSEhoqSlZKQj46Ni4uJh4iKjJCSkpORkJCPjo+Ojo2Mi4uLj5COi4lbW1tbWVlWVFJOTUpHRUJAQD49PDk5ODc1NTU1MzMzMzMzMzMyMjIyMjIxMTIyMDAwMTExMTExMTExMDAwMDAwMDAwMDEwMC8vLi4tLCwsKysrKysrKSkpKSkqKikoKCgoKCkoJykqKioqKisrKysrLCwsLC0tLS0uLi0tLi4wMDExMDAwMDEyNDQ0Njg4OTo9Pj0+P0FCQkNERUVERERDQ0JAPj49PT08PDs7Ozo6Ojc3NTIyMjIxLy8vLi0tLS0uLi0tLi0uLi4tLCwtLTNTaFpXWV5pUSMlKiwzPkZIRENCQDxBSVJmcHBrYFteXV1UKx8hISIlKjZRZGJjZVpGMCwpJSQiIyMkJCYoKi85Ozg0NDQ0Nzs9PT9CQkVAOzo4Njc2Njc1MEt1fXRraW1xdnp1YVtfWl9nSygoKy4tMTAzODo3PEZFPjs+PkdNVlhUU1NTUFFTUVVaXl5dWlpZWVlYXmRgT0NCPj9GUlVVVVZYYWBbaYCAfHd1c3VzamBia3V4WEZLWG99ho+RkpGRkpKSjYeAfnp6gYmPjIqDeHNpZF9iZmZmYl1WUUpBODQ2TWyEkZKSj4uKiYmHgXxyZGJgYmNiYmBhYmRnbHB0d3t8f4GFh4iJioqKioiIhoWCgX5/fX19fHhzbmpmZl9obXBrb5+vtLi7vr6+vb6+vb69vLu7u7q1rKadiXp6fX9/fnp4dnRyb21raGhqamxqb3mBfXZ7gouKiYqKiouKhoWEg4GBgX5+gISCend1cG5ramlpamlpaWhmaGhoaGpwd4GJjIqMioaEhIiMlJeTkY+NjIqJiIiJjY+Sk5KSkpKTl5iTjo6MjIuLi4+QjouJW1tcXFtZV1ZTUU5MSkhGREA+PTw6OTc2NTU0MjIyMzMyMjIyMTEwMjIyMjIyMjExMTEwMDAwMDAxMTAwMDAwMC8vMC8uLi4uLS0tLCwsKyorKyoqKSkoKCkpKSkoKCkpKCgoKSgpKSkqKioqKisrKyssLCwtLS0tLS0tLS0tLzEuLjAwMTEyMjMzMzM2Njc3OTk8Pj5AQEFBQUFBQUA/Pz0+Pjw7Ozo6Ojo5OTk4NjY1NTUyMjExMTAwMDAtLS0tLi4uLi4tLS0tLS0tLS4vOFdjXFhZY2RAISUpKzE7RklCQEA+PUBFVWpzcm1raWhpZUQhIiIjJy4/XmllZGJMMyorKSUjISMiIiMmKCsvNzk2NjY2Nzk9QEJDRkhHQj87ODc2NjU0M0l+eXJtaWxxc3l1ZFteXWFhRCQpKystLjA0Nzo9OT5KRjw5PUVMUFRYVVJSUk5NT05QU1ZbWlhaWltWVFphXU5IRkNDRExSVVVWVl9gYXJ/fHh3dnR2dGRdYGdsc3NWT15zg46RkY+OjI2MiIV9cW90dnmBjI6LhoB9enh5e318endya2ZcVktGS1txh5SSj4yIiYeGhXx4a2FhZGJhY2NlaGlrbnF1eX19f4KFh4qKiomKiIeIhoWDfnp2dnd2dnVzbWhiXF9kYWNnbYKhq7O4u729vb69tr6/vr29vb28tKqghXN0eXl5ent6eHVycGtnZmZpamhkZW1ud3t3d3yCh4uIiIqLiYaHhIOEgoGAgICEgnt3dHJwbGxra2pqaWlnaGhoaWlrcXyEio2KjYqFhIOIj5WWlJKPjoyKiYiLi4+Rk5STkpOTmKGhm5KOi4uLjIyPkY+Mil5eXFxbWVdWVFJPTEpIRUVDQT08Ojk3NjY1NDIyMjMzMTExMTExMTExMTExMTEwMC8vMDAwMDAwMTEwLy8vLy8uLy4uLS0uLiwsLCwtLSoqKysqKikpKCgoKCgoJycoKCcnJygpKSkpKSkpKioqKioqKysrKiosLS0tLS0uLi0tLy8wMDExMjI0NDU1NjY3Nzk6Ozw+Pj5APz8/Pz8+Pj48Ozo5OTk4ODg4Nzc4ODY2NTUzMjIxMTEwMDAwLy0uLi0sLS0tLC0tLS0tLS0uLzA/X2NYVlliYS4jJycrLjdDR0ZCQj47PERYdn1zamdibnRdLyAhJCcxSGhtbWxdNyotKSclIyIhIyUjJCYqLTQ2NjY2Njc5PUBERkhIR0NAPDk4NTQ0MTpzgnVvbnFzdHl5Yl5gXWFnSSUlKi85Ojc4Pj4/QT49RkQ/PUBGTU5MTUxLTlFNTE5PT1FSU1ZXV1tcVlRVV1VOS0tHRUVITlVVVlZcZGp9fHZ1c3V1dXVhXWJiZWtzb19pe4mNkI2LiIaGh4SAeGtobXRyeIWLjIqHhISGio6NjIuHgXt0bGZcXF9te4uSkY2Kh4eFhYR9dGZdXl9iZGNmZ2tscXV3e3+BhIWHioyMi4uKi4qGhICBhYF3bmpqa2xqZFtXVFFSVVNXYIKfoaq2s7W7uLi8vry9vb+9vb29vLmmfWltcXR1dnZ3dnVyb25raWRpcG9wa2ZsdHNqZWtwdXaBiIiLi4eGhoWFhYWDgoKAg4J9d3VycWxsa2tqaWlpZ2hpaWlpa3F7houMi4uKhYGEiZOWlJORj42LioqJjY+RkpOTkpGRk5yjpJyQjIqMi4yNjpCOjIpdXVxcW1lYV1RSUE5MSUdEQj88Ozo5ODc2NDMzMjIxMTExMDAxMTExMDAwMDAwMDAvLy8vLi4uLi8vLi4uLi4uLi4uLi0tLS0sLCwsLS0rKyoqKSgoKCkoJicoKCYmJycmJicoKCgoKCkpKSkoKSoqKiorKysrLCwsLC0tLC4tLTAwMDAxMTIyMjIyMjM0NTY3Nzg7PD09PT09PDw8PDw7Ojo6Ojk5ODg3NzY4ODg2NTU1MzMyMTAwMDAwMDAvLy8uLi0tLCwuLS0tLi4uLS0tMUZkXlVWXWhWJSYnJigrMz9JR0E/Pzw6Q15xampiYXBzcU0jHyMnM05tcHFuUC0tLCkkIiIhISIjIiIkKSwwNDU2Njc4Oj1AREhKSEdBPj04NzUxMTBegHh0cXR1enx+Z1lfXWJnVSYsKS00PUdFSExPSUdERUlFRkVERUtMSUZDRUpLSUlLTlJUUVFSVVlZXFxVUlRRT1BPS0hGRUxTVldVWWRze3dyc3Z2dndyX1tfX2Fna3F0dIKMjI2MiISDgoOFgXllY2hvbG17hYuNi4uLjpOWlZaTj42Ig3x3b2xxeISOk4+LiYaEhISBe29gWl9gXmJnam5xc3Z8fYCGiImJioyOi4uJiIeHg353en18e3NmWlpYVFBNV1BHUV5qbImjqK21ubuyjJicrL6+v76+vb28vbeiclljaWxwcHF0dHR0cnFwbmtnam9ub3BwbXF2bVxbYGVteoiKi4iFhYWFhYWFgoKCgoSDfnh1cm9sa2psaGhpaWloaGhoam91fYeMi4qLiISCh5CUlZKQkI+OjYuLjY6Qk5SUkpGQkJKZo6KXjoyLiouNjY+PjYyKXl5dXVtZWVdWU1FPTEpIREI/PDs6OTg3NjQzMzIyMjIxMTAwLy8vLy4uLzAwMC8vLi4uLi8vLy8vLy0tLS0tLS8uLS0sLCwsLCwsLCwsKioqKigoKCgoJyYnKCgnJicnJiYmJygoKCgoKCgpKiopKSoqKysrKywsLCwsLSwsLi0uLjAwMTEyMjIyMjIzNDU2Nzc5Ojs8PD09PTw8Ozs5Nzc3Nzc3Nzc3NjY1NDQ0NjUzMzMzMjExMTAwMDAwMC8vLy8uLi8vLi4tLS4uLi0tLC4zUGdZUlhiZUYjJSQjJCguO0VJRkA/Pj5IY3BuY2VraGtmOCEkKDFQb3Bva0cuLCkmIyIgISEiIyIhIygrLTE0Njc5Ojw+P0FFSUpJQT0+Pjo1MC9beXhzcXR4fHt+cFZcXmBoXiwpLCwwOkNERU9RU1hTTVFPQ0lOTUdGR0VEQ0NESUlIR01OVFVUVVZYWl5fWVRTUU9PUU9MSERIUVZXWFtmdXp0cnNzdHV3cl9bXGBgYWdvfIGLjYyMioeEgYGDhIB3ZGJkbGpicX+JjI6MkJKWmZqZl5SPjouHg399f4WKj5GNioiFhISDgXttXlteXl5laW5yd3p8f4OHioyMjIyMjIqJiIWCgX97eXRxdXl8dnZsZFtUXmFGRGySmpmnsre4uLm+pneZjJG7vr6/vr6+vbKNXVJXXmNna2xvcXRzc3JxcXJvbG9yb21ra2xvb29hT1JWYHSGiIuIhYWEhYWFhIKCgoOEg4B9eHRwbWxraWhoaGlpaWhoaGtwd4CJjIuMi4iEg4uSlpOSkJCQjoyLjIyPk5SVkpGRkJCSmaCfl42Mi4uLjY2Pj42Mil5eXV1bWllXVFNRT05KSEVDQDw7Ojk3NjY0NDMxMDExMDAwMC8vLi4uLi4wLy8vLy4uLi4uLi4uLi4tLS0tLCwtLSsrLC0sLCsrKyoqKikpKSkoJycpJycoJycnJiYmJiYmJycnJycnKCgoKCgpKSkoKioqLCwrKywsLCwtLS0uMTExMTIyMTEzMzMzMzM1NTU2Nzk4Ojo6Ojo4Ojo6ODg4Nzc3NjY2NjY2NTQ0NDQzMzMzMjIyMjIxMTExMDAwLy8vLy4vLy4tLi4tLS4tLS0tLzZbYlJRV2FiOSIjIyIiJyw2QkhHQ0JCP1BnYlhaXWdrblooIiUtRmZtamZAKywnJiMhHyAhJCUjIyIkKCstLzMzNjo8PT0+QUZJS0M/P0E8MjVgd3Jsc3R4enx8dVtaXV1kZzorKywtLjY9QUdPVFhmYldJQ0RNTElHRUJAQUJCQ0dJR0hKTlNWV1dZWlpdYV1ZVVNSUlNOTUhERU1VWFpbZnN2cXN3eHZ1dnFgW15dYGRnc3+IkZCPjYmGhIODhIN/dGJjY2lpXmp7h4yOjpCSlZmampqXlpKRjYyJh4aKjJCPi4qIh4eFhX93aFpUWF5iaGtvc3uBhIaJio6OjIuMi4qHh4OCfn16enp1Z1xhcm1uZ2VeX3FzSVqZrLG0ubu7vb68u7WsuLCzvL6+vr++uqd1SEVPUlhcYGRrb3BwcHJycXN2dnJyeHRsZ2dpbnJyaVJBTVdvg4eLiIWDhISEhIODgoKEg4aCfnp3cm5sbGloaGhoaGhoaGltcXqEi4uKjIuIhIWOlJWTkpGRjo2Mi4yOkJWXlZGRj5CQk5ugnJaOioqKjIyNjY+NjIpeXV1dW1pZV1VUUU5MSUdFREI9PDo5NzY2NDMzMjExMTAwLi4vLy4uLi4uMC8vLi4sLC4uLi4uLi4uLS0tLSwsLCwrKyssKysqKiopKSkpKSgoJyYnKCcnKCcmJiYmJiYmJicnJycnJycnJygoKCgoKSoqKisrKyssLCwsLS0uLzExMTEyMjExMzMzMzMzNTU1Njc3ODg5OTk5OTg4ODc3NzY2NjY2NjY2NjQ0NDQ0MzMzMzIyMjIyMTExMTAwMC8vLy8vMDAvLi4uLS0uLSwsKy0tPWJcVFVaX1ctHyEiISMiKDJCSkpIQ0JBWF9PTE9XX2hrQx4jKTlZaGliQSwqJiQiIB8fISQkIyEhIyQnKy0wMzY5PD09PkFESElHQ0E/OExwdm1tbHB2dnl6c19ZXVxeZUkpLSwxMTA1OUBIT1dha2hXSkdKTk5KRUFAPj4/P0JERkhJTE1PU1ZYWVhaW11eXFhYV1dUT05KRURHUVdZWmVydnN2enl4dXdyX1hZXF9ka3iDjpCRj4yJhoODgoSCfnFiYWNmZ11oe4eOjo2QkpOYmZqamJaVkpCPi4yNjY2Qj4yJiYeHhoR+dmheV1Vhamdob3Z9hImLjY6MjYyLiYaEhIF/fX15dG9ual1TSWVubnB1aFVcakxvprS4u72/v767tLO3uru9vr6/v727sJdkRktTUU9RVVpeYmdqbXBycXJydXl5cnN3cXBwb3F3dnNoS0VZcISIi4OBgYKEg4SDg4ODhIWHgoB8eXVwbmxraGhoaGhoaGhpbXJ7hYuKiYyKh4SJkpWVkpGRkY+NjIyMjpGWlpORkY+PkpidnJmPjIuLjIyOjI6OjIyKXl5eXltaWlhWU1FPTUpKR0VCQD47OTY2NjQzMzExMTEvLy4tLS0tLS4uLi4tLS4uLCwtLS4uLS0tLCwsLSwsLCsrKysrKysrKioqKSoqKSkpKSgnJyYmJiYmJSUlJSUlJSUkJScmJycoKCcmJycpKSgoKioqKioqKywsLC4uLi8wMDExMjExMTIyMzMzNDQ0NjY1NTc3Nzc4Nzc3Nzc3NzY2NjY2Njc3Nzc2NjY2NDMzMzMzMzMyMjIyMjIxMTEwMDAwMC8vLi4tLS0tLCwsLCwsKy1HZFdSVVtjViwhIh8hICInMDxNUk9LR0thXVFKS01ZbmMuHiUxUmRgVj8sJiIiIiIhISMlJSMjIiIkKCksLjI0NDk6PD4/QUJBQj47SF90cWxqaXB1dHZ2cWBZXF1eZl8pKy8wMzI1ODg4P0hYaWxfVU1NUFNVU01FPT08PDw/Q0ZISkxNTVFTVllZWVdYXFtaWVhYVFBOSUVDRE1TV1tlbm5wcnV2c3V2bmdcWF1faHOAjZKRj4uLiYeHhoWHhX9vYWFhYmVhbHuKjo2PkJOVlpmZmpiXlJKPkJCRj46Pj4+Oi4qIiIeDfnZsYl5fZ29zc3l9goeLjI2NjoyKiImEgX99e3d1dHNrcW9fWXBzbWtsc2paWFtXdaq4ury+vry4saq1ury+vr2+v7u0m3JRS1RUUU1OTk5TVlxgZGlsb29wcHN5g4F2d3dzc21pcHJwb2FCS3CEiYh/f4CAgYKCg4SEhISHiIWBfnt4dXNvbGpoaGhnZ2doam1zfoiLjImKiIaHjZWVk5CQkJCOjIyLjI+UlZORj46NkJadnZiUj4yJioyOi4ePj42MiltbW1tbWllXVlNRT01KSEVEQj89Ozk3NzY0MzMxMTExLy8uLS0tLS0tLS0tLS0tLSwsLS0tLS0tLCwsLCwsKysrKysqKiopKSkpKSkpKSkpKSknJiYmJiYmJiUlJSUlJSUlJCUnJicnKCgnJicnKSkoKCoqKioqKissLCwuLi4vMDAxMTIxMTEyMjMzMzQ0NDU1NTU3Nzc3ODc2NjY2Njc3Nzc2NjY3Nzc3NjU2NjQzMzMzMzMzMjIyMjIyMTEwMDAwMDAvLy4uLS0tLSwsLCwpKioqMFFmVVBWXGJbLR0fISAgICYrOUhRVE1JUWVcTk5QU2V0SyEkL05hWVVLOyciIiIiISEjJSUkIyMiJCcpKiwvMTQ2Njg7Ozs8OzdJY3JzbWZnam9wdXt3bWFaWVxeYGRALSwvMDI1ODk3MzZBUlxVS0hQUlVVV1pVTEA9Ozo6PT9ER0xMTU1PUlZZWVlYWVpaWFVVVVNPTElEQUJIT1ZYYmpqamxwc3FzcmtlX1laYG97h5CUko+Li4mHiYmJiYaBb2FhYWVraXGFj5COj5CSkpOWlpeVlJCMi4uNj5GRkY+OjYyKiIiHg4B5cm5qaG55foGFhYmMjo6OjYuKiIeEgH16d3V2cnJyb25wcXJub3Fta2hmWVNfY3ypt7q9vbu6tq+lsLi7vb6/u7apflVNUlJRT0xNTk9PT1FWW19jZ2twcXFydHx8d3FzeHFqYG12eHduXGF5hImEfX1/f4CAgYKEhISFiIaFg4B9e3d0cW1saGdnZ2doaGltdX6Ii4uIiYiHiZGVk5GQkJCQjoyMi42RlJWRko+Nj5KbnpqTi4uMioqLjIqGjo6NjIpaWlpaWllZV1RTUU9NSkhFREI/PTs6OTc2NDMyMjAwMC8vLi0tLS0tLS0tLS0tLCwsLCwsLCwsLCwsLCwrKiooKysrKykpKCgoKCgnJycoKCgoJyYmJiUlJCQkJCQkJCQkJCMkJiYmJiYmJiYnJygoKSkpKSoqKyssLCwsLi4vMDAwMTEyMjIyMjMzMzIzNDQ0NDY2NjY2Njc3NjY2NjY3Nzc3NjY2NjY3NzY2NTU0MzMzMzMzMzMzMjIxMTEwLy8vLy8vLy8uLS0tLS0sLCsrLCwrKCk1X2JTUFVcZmEyHiAfHx8iKCo3Q1JUT0pbaVtQS1FacGs1ICxKY11UTUcqIiIiIiEiJCUlJiUjJCQnLCsqKi4vLzEyNjk4NDFPd3BtZ2RmaW1wcHdwbWNcWVpdXmBRMS8vMjI1ODw7Ojg8PUtFPTtFUVdWWFpcWlFGPjs7Ozs9QkZMTk5NUFBVWlpZWVtcWVVRT09MS0pIRENBQ0tSV2BnZ2hqbW9tcG1kY2JcWmRzgY6SkpKOi4uJiIuMjIqJg3NiYGJocnV9jJGPj46PkI+RkpOUk5GMiISEh42RkpGQkZGNi4qJiIWBe3l4c3J4f4SGiYuOj46PjYuHg4GAfHx6eXdzcXBvbXBwa2prbnBxbWllamNeY192pbW6vL68urm1o6ytuLu8ubGTZUpMU1JRUVFQUE9PT01NUVRaXmFnaXBxcnRzc3Vzdnt8dHF9g4iJf3B5gIOGfXl8fH1+f3+BgoODhYaIhYSCgH17d3JwbmppaGZnZ2drb3iBiIqJiIiIiIyTk5CQkI+Pj46NjY2Qk5aWkZCPjpCXnZyXj4iIi4qLjImEgI6Ojo2LXFxcXFpZWFZVVFFPTktJRkNAPz07Ojk3NjQzMjIwMDAvLy0tLS0tLSwsLCwsLCwsLCwsLCwsLCwsLCsrKioqKCkpKiopKCkpKSkpKCgoKCgoKCYmJiYlJSQkJCQkJCQkJCQjJCYmJiYmJiYmJycoKCkpKSkqKioqKyssLC0uLzAwMDExMjIyMjIzMzMzMzU2NTU2NjY2NjY2NjY2NjY2Njc3NzY2NjY2Nzc2NjU1NDMzMzMzMzMzMzIyMTExMC8vLy8vLy8uLi8tLS0tLCwrKywsKSknKTpkYFVTVl9pZDQaISIjIyQlKzM+TVNQU2duWk5OU2F0WCMoPmFmWU1CKiIiIiIhIiQlJiclJiUlKDAvKikpKiorKyssLixOcnFraGdrb29vcHZpWGVhXFpaWVVYNC4uMzY2Njc5Ozc4QD9COzE5RU9SUFJVU1FKRD05OTk7PUJGTE5QUlRUVVdZWltcXFlSTEtJSUdIRURDQUFGS1RdZGRlaGtsa21qX2BoZGBod4mQkpKRjoqKiYqMjIuMioZ1Yl9ka3Z7h5CRkI2Njo6OkZGQjo2LiIR+foOLkZKRkI6OjYuKi4qIhYKAf359gISHiYuMjo6OjY2HgX54dXFtbXJzcHBxb25tbGtsb25ubmNZYGVkYFpVYJ60ubu6uLi4tK6wqbK6uKx/UUxNUlJSUE9RUFBOTU1OTE5RVVleY2hsbnJxcHJ2eH+Gh4V6ipGSj4l/eX+Fg3p4e3t7fH19f4CCg4WGh4aFhIB9e3p3c29tamhnZ2doa3B6g4iKiIiIh4mPlJOQkJCPj4+OjY2OkpWVkpCOj46Tm5yakY2Li4uLi4yGf32MjY2MillZWVlZWFdVU1JQTkxLSUZGRD89PTo4NzY0MzMyMDAwLy4tLS0sLCwsLCwsLS0sLC0tKyssLCsrKioqKioqKCgqKikpKSkpKSkpKCgoKCgoJyYkJiUlJSUlJSUlJCQkJCQkIiMlJSUlJiYnJyYmKCgpKSkpKioqKywsLC0tLy8wMDAwMDEyMzMyMzQ0NDQ1NjY2NjY2NjU1NTc2NjY2NjY3NjY2NjY3NzY2NjY1NTU0MzMzMzMzMzMyMjIyMTEwMC8vLi4vLi4uLS0tLS0tKyssKysoJycnQmtiVFJXX2hjOB0hIyQkJCgpKjZGUVRYbGlZUFRYaHNBKTNGT0o8LyUhISAgISEiJSYnJiQoJigrLywoJyYoJiQkISpMcm5taGhsbW5tcHJbS2hmYFxaWVFZTCouMTY5OTc4ODo3NTc4NjMyOERLTUtLTU1IRUI+Ojg4Oj5BRUxOUVRXWFZWWFpcXVxYUE1KTEpGRUdERUVEQUZNV2BhYmVoaWlrZlpdZ2hqcH2OkJGQj4mJiYmMjIqIiouFd2RfZnB6f42Rk5KNjYyMi42OjouJhYJ/f32EipKUko+NjIyMjY2Mi4qIhIGDgoSIioyNjo+Oj42KhHt2b2dhXF9jaGtscHFyb29ubGxubWxVQE1YX1tIQFmMsLa5tq+1t6uvsa22tqqATk9RT1FRU1JSU1FQTk5MT09OTlNVWFxiZmltb3F0fIWOlpWSh5KYmpCIhH9/g4F2dnl6enp6e36AgYKDhoeFhIOCgH9+enVxb2xramloamxzfIWIioaGiYqMj5OSkJCQj4+Pjo2Nj5KVlZKPj4+TmZ6clo6KioqLi4uKhH18jIuNi4lZWVlZWVhXVVNSUE5MS0lGRkRBPzw8ODc2NDMzMjAwMC4tLS0tLCsrKysqKioqKyssLCsrKiopKSkpKSkpKSgoKSkpKSgoKSgoKCcnJycmJiYmJiUlJSUlJSUlJSQkJCQkJCMkJSUlJSYmJycnJygoKSkpKSoqKissLC4uLS8vMDAwMDAxMjIyMzM0NTQ0NTY2NjY2NjY1NTY2NjY2NjY2NjU2NjY2Nzc2NjY2NTU1NDMzMzMzMzMzMjIyMjExMDAvLy4uLi4uLi0tLS0sLCsrLCsrKyglIylIbWFZV1dfZ2dDHyEkJSYlJSQnLztKUFx0ZVdVV19yajIsLCgpJSMgISEgICEhIyQnKS4vLCwoJispKCclJCIiJCVXdG1vbGxub2ttcnJGPmhsZVxYWlBYVzArMTU5Ojw8Oz47NTU0NjMuMzlESUhIRkZFREJBPjo4ODo8P0RHTE9TWFlWVlhaW1xYVlBKS0tIR0ZGRkdHR0ZDSVBYXWBkZ2lqamNYW2NpbneJkJGPjYyLiYmLjI2Lh4iLhXlkX2Z0f4eSkpGOi4uKiYmGiIqKiYSAfXx/ho2UlJCNjIuLi4yMiouJiYiHiIiIiY2Ojo6Pj42Mh4J9dWhYTElPUlRcYGJjZm1wb29ubmplTj1SX15WPjNOcKW0tq+LmLCXprKwsaCYb01PVF1XU1RYV1VSUVFQT09PT09QUVVYW2BocX2Ij5OanaGinpmZl5WOioWBgYF/d3V5enp6ent8fn+AgYWFg4KDgoF+fn14dnRwbmtpaGlsdICHioiFhYaJj5SVkpCQkI+Pj46NjY+TlZSRj46QlZ6fmpGNjYmKjI2MiIJ3fYuOjIqIV1dYWFdXVVRUU1BOTUtIRUVBPz08Ozk4NTMyMjIwLy8tLC0tLSwrKisrKysrKysrKioqKikpKSkpKikpKSkpKSgoKCgnJycoKCgnJycmJiYlJSUlJCQkJCQkJSUkJCQkJCQlJSUlJSUmJicnKCgoKCgoKSkpKisrLCwsLS0vLy8vLzAwMTIyMjQ0NDU1NTY2NjY2NjY2NjY2NTU1NTU1NTU2NTY2NTU2NjY2NjY2NDMzMzMzMzMyMjIxLzExMS8vMDAuLi4uLi4sLCwsKyssLCssKiwsKCUlKkttYlhWV11kaUsjIyQkJCQiISAmMj9Ga3djWFdVZXZQIycnJSMiISAhISEgISMjJS45QDw6LygrKykmJSMiIyE9c3BrbG9ubXBvc2s6K2BraWRcW1VLW0EpLzQ5Ojo9QEA9ODY1NDItMTQ5QEREQT0/QUJBQj88Ojk4Oz1CRUpMUVZWVFRWWFlaVlRPSktMS0hISEhKS0pIRERJTVZeY2VlZmhlV1hkbXSAj5GQjoyKiYmKi46OiYeHioZ9aF9qdoGMkpCOiomHhYODf4KFioyHhIF8goiQlJGNiomJiIuLi4qMiomKio6Ojo2Oj4+Pj46MiYaBem1bTlxhXF1eXlpaWFlgZWptbW1lV0c9R0pLTkI/TV6Vr7KUUoekfZqzt6qFdlxNTlJYUVRZYV1UVVZWVFFQUlJQTk9QUl1ufo2coqOioJufo5+ampiSjImKiIeDfnh2eHh6ent7enx+f4GFhIGBgYCBfn99e3d1dHJvbGxrbnmBiIuIhoWHipGUlJCQkI6OjY2MjI6RlZWRkI6QkpqenZWPi4qKi42NjIZ9cniGjYuJhldXV1dVVVRUUlFQTkxKSEVEQT89PDs5ODY1MjIyMC8vLSwsLS0rKisqKioqKioqKioqKiopKSkpKSkpKSkpKSkoJycnJycnKCgoKCgmJiYmJSUlJSQkJCQkJCQkJCQkJCQkJSUlJSUlJiYnJygoKCgoKCkpKSorKywsLC0tLy8vMTEwMDEyMjI0NDQ1NTU2NjY2NjY2NjY2NTU1NTU1NTU1NjU2NjU1NjY2NjY2NjQzMzMzMzMzMjIyMTAwMTEvLy8vLi4uLi0tLCwsLCsrKysrKyssLCkmIygvTW1gVlVYXmZsWyYiJCUjIiAfHSEpM0hscWJXVlpocDImIyQjISEgISEhICEkIiguMzc4Mi8rKy0qJyUjIiMtaG5ramptcGxsdGEuNV9raWdjYGJKW1ErKzw+Ozo9P0Q+NzU1OTgzMDI1ODxAPTo3Oj4+Pj8+PTo5Nzo8P0RJTU9TU1FRU1VWV1RSTkpLS0tLSUdKTU1MSUZBQ0lPV1xhY2ZmY1laZXB6h46Qjo2LiIiIio2OjImIh4mEfWhfbHmFj5GPi4iGhIF+fHh5foSHh4eFgYOJjpGNi4iHh4iKi4uLi4uLjI2Pj4+PkJCPkI2LiYeFfndvZFttbVtSV1ZZYFxYWFleZGZmY1xVRjUxR1FPUlpdeqKqjl+UiXOfsrWodlZJSUxPT09TVlZST1RVVFVUUlFRUlFOTWF+lqWrsK+qp6GdnJ6enZycnJiTkpCNh4B5d3h4enp7e3t7fH1/goOAgICAgH9+fnx6eXd0cm9tbnF6g4iJiIaGiY2UlZSQkJCOjo2NjI2QkpSUkY2NkpicnpmRi4mIiYuNjYmAdm94iIyKiIRWVlZWVFRUUlFPTkxKSEdFQ0FBPjw6ODc1NDMzMjAvLy0sKysrKyoqKioqKioqKiopKSkpKSkpKSgoKCgoKCgoJycnJycnJycnJycnJiYmJSUlJCQkIyMjIiIkIyQkJCQkJCUlJSUmJycnJycoKCgoKCkpKSoqKyssLS0uLS4wMDAwMjIyMjM0MzM1NTU2NjY2NjY2NjY2NjU1NTU1NTY2NjY2NjY2NjY2NjY2NjY0NDMzMjIxMTExMTEwMDAvMC4vLy4tLi4tLCsrKysrKykpKSosLS0rKSUkJy1Nb2JVVFddZGxfNCEkIyIhHh4gISUqRXBuYFlZYHJVIyUiIiIhICAgICAiJCgtLzI3NjEsLS4vLCklJCIiWHZtZ2dsbG11a08zQ2FoampoZF5MXFs1LjpAP0BAQkI+ODM1OkBCPDQzNzk5NzY1Njc6Ojw+PDw6Ojc4Oz5DSU9RUVFPTk9RVFVTUUxMS0tMTEtLTU5OTkxHREFCRk9UXGFjZWNcW2l2gomLjoyKh4WGhoiKiYaIiIiIhH5qYnB7h4+Pi4iEgoB8d3Fvc3l8gIOGh4SHiY2NjIuIh4iHiIqKioqKi42Nj5CSkpCQj4+MiIiFgoB4c3NzcnFpZ2poaWljV1BRV1taVlRVVU9DQ1RTVlldZ2V0pJ2AmYmFo6+vpnxXSkhJTUxMUlVRT1BQUlVXV1VRUlRPVGaIprK5vLq4sKmlnZ2bm56goKGfnJmZlZCHe3Z7enp6e3t7enl8foGCfX1+fn9/f319fHx5d3JxcHB1fYSKiYWDh4qOlZSSj4+PjY2NjY2OkJKTkI+OkZaam5iTjYmKiIqMjYyGe3Jud4WJioiFVVVUVFNTU1BQTkxLSUdFREJBQD08Ozc1NzQzMzEvLy8tLCsrKysqKioqKioqKioqKSkpKSkpKSkoKCgoKCgoKCcnJycnJycnJycmJiUlJSUlJSQkJCMjIyIiIyMkJCQkJCQlJSUlJicnJycnKCgoKCgpKSoqKysrLC0uLi4uMDAwMDIyMjIzNDQ0NDU2NjY2NjY2NjY2NjY1NTU1NTU2NjY2NjY2NjY2NjY2NjQ0NDQzMzIyMTExMTExMDAvLy8uLy8uLS4uLCwrKysrKysqKSgpKysrKigmKCsuL1BuZFhUV1peZmZDIh8iIB4eHyAgHSFHd21eVlplcTohIyMiISAgICAgIyYtMjExMSwrLC0xMi4qJyQjPHNqamdpa3B0Xzw7WmVnamZnZ2FNVl9GMjlFP0RDRUM8Ozc1Nj5GRUE5NTU1NjQzMzI1OTk7Ozw8Ozo5OTxBRUpQUlRSTUxNT1BRUU1MS0tLTExOTk9PT09NR0RBQEJHS1JZYWVjW15vfIiLioyKh4WFhoSFhIKAhoaGh4N8amNxfoyPjYqGg4F+eXBnZ21zdnt+goWFiYmMi4uLiImHiIeHiYmKjI2NjY2PkJCOjo2Ni4eFgoB+dnJwcHBxc3Rxb2NdYVNFRVBXVE5ISU5QTUtRUVBUU2ZhYJGUfI2lqKmsqp9tTEhITU5NTU5QUFNUVFNSU1RSUVFQVW6Qqre7vb+8urWtqJ6en56eoKSjn52foaCZj3x1e3t6ent7eXl6eX2BgHt7fH1/fn59fX19e3p3dHJyeICHioiDhImMkZWTkI+Pj42MjIyLjJCSk5CPkJSYmpiUjYuJiYmKjI2KhHhubXiGh4iIhVRUUlJTUVBPT05MSUhGRENBPz48Ozo4NjY1MzIxMDAvLSwsKysrKikqKioqKSkpKSgoKCgoKCgoKCgoKCgoKCgnJycnJycmJiUlJSUlJSQkJCQkJSQjIyMjIyMjIyMkJCQkJSUkJSUmJycnJycoKSkpKSkqKisrLCwtLi0uLzAxMDEyMjMzNDU1NTQ1NTU1NTc3NjY2NjY2NTY2NjU1NjY2NjY2NTU1NTU1NTU0NDQ0MzMyMjExMTExMDAvLi4tLS8uLSwtLSwrKysqKioqKSgoKiorLSwpJyssLjAvSGtjVlNUWF1fZlEvHyEfHh4fHh8hI1V6Z11bXmpgJSIjICIhICEhICMoKiwqKyspLCwtNDYxLCglMmxuZmZqaWpwXTxIZ2ZhYWJjY2NXUlZJNjU9Oz1DPz89OTc1MzI6QkRCPDU0MzIzMDMxMjU4OTs9Pj07OjxAREpNUFNWVVJQT05OTUxLS0tMTE1OTlBRUE9PTUhGQ0FAQENIUlphYWBmeIOKi4mJhoSEgoGEgnx5e4SHhYSAe2plc4KOj4yHg4KAfnZsYF9ka29zd3yBgoWHiomJioqJiYeGhoiJiYqLjI2KjIyMjIqMjYyHhIF9fHp3dHFxcXBxcW5cOTQ4OTxESU5NS0tLTUlKRk1SUlBsbGqKmImMoKeoqaiQVUZHSEpKSUxMT0tLUE9NTU9QUFFPWHeZrbi7vb6+vr68tK2kn6CdnZ2fpKCcoKalnpeEdnp8e3p6enp5eHl8foB3d3l9fXx9fX19fXx8eXh0cnqCiYmGhIaIkJaWk5CPj46MjIyMjI6RlJKQkJWYm5mWj4uKiYmKi42Lhn11b256h4iIh4VSUlFRUE9PTk1NS0hGRUNCQT89PDs5NzY2NTMyMTAvLi0sLCwrKyopKioqKikpKSkoKCgoKCgoKCgoKCgoKCgoJycnJycnJiYlJSUlJiYlJSQkJCQjIyMjIyMjIyMjJCQkJCUlJCUlJicnJiYnKCkpKSkqKisrKywsLS4uLi8wMTAxMjIzMzQ1NTU1NTU1NTU3NzY2NjY2NjU2NjY1NTY2NjY2NjU1NTU1NTU1NTU0NDMzMjIxMTExMDAwLy4tLS0uLi0sKysqKSkpKSknJyopKSkqKy0sKSksLC0wMTNFZ2pdVFJTWV5kYkYkHx4fHiEhISInZnhiW11gbkobHyIiISAgICEmKCorKyoqKi0tLjEyMCwsL2NwamVkaGtuX01gamhkYWFjYltfW0o/NDc4OTk7PDo5NzU2NTEwOEFCQj02MzEwLy8wMTIyMzc6Oz0+Pj0/REhLTVBSVFNTUVBOTUtLS0tLTExOUFBRVFNQT0xJRkNCQD4/QEdRVVtibXyGioqJh4SDgoKCgX12cXWBh4WEgHtqaXaFj42Kg4KAfn14bWFdYGVpbXF2fYGEhIaJiYeHiIeGhoaGhoaHiYqLiYiGhoeIiIeJiIR+fHt6d3Z0cHFxcHFuTSk1Njg4PENESlBTT0tIS01WWlpWXl9shJKYmZ6oqqekd0RISUlLSklMTE1KSkxLSkxNTE1NVHOcr7i8vL6+vr6+vLmzraSgn52amZibnZ6lpaGbi3x6fXt6fXx6enh4e32BdnN1d3p7fH19fHx8fHt5d3R6gomJhoSGiJCWk5CRj4+OjIyLi42QkZGQkJOXm5qWkIyKiIeJjI2NiYJ5cW9ue4eIiIeFUVFQUE9PTU1NS0hGRUNCQUE/Ozs5ODY2NTQzMjAvLy8tLC0rLCwqKioqKSkpKSgoKCgoKCgoKCgoKCgoJycnJygoJycmJiYmJSUlJSUlJCQkJCQkIyMjIyMjIyMjIyQkJCQlJSUlJCUnJycnJygpKSkqKiorKywsLSwtLi8wMTEyMzIyMzQ1NTU1NTU1NTQ0NTU3NzY2NjY2NjY2NTU1NTU1NTU1NTU1NTU0NDMzMzMzMzExMTEwMC8vLy8uLi4tLCwsKywsKysqKioqKSkpKSgpKS0vMC4rKisvMzQ3N0Jjbl5TUVNVXWNqWzEeHiAgHyAkJDNscmJeW2FtMB0fICIhIiIkKCosKiwrKysuLzAxMi8sLmBvZ2hnaWpwaGRqa2hlYGBhY2JdVkg4MjA1NzY4PkA8ODQzNjQxMDdBRkRCOjQzMC4wMTM0NTQ2Nzk8PkFBQkVGSEtOT09RU1JQTkxKSUlLS01NT1BTU1VTUE5MSUZEREBBQT5BRUtUYXKEiYmJiIaEgYCAgH96bmt2gIiIhIB5amp3hYyLh4KAf316dmtkX15fZWhtc3mAhYaGiIiHh4SEh4WFhYWFhYWHhoN/fH1+foKChIaGgX59enl3dnV1dHV2a1IvLjo8PkNHS0dHSE9QUVhYVlxgYWVpZG2Ll5Ocp6mmoG1BRkpJTEtKSUpJSkpKSkpKSUtKU2yWrre8vb6+vr6+vr6+ubWupaOhnZqZmZiYnaOjn5WEen59e3t7e3l6eHh6fnNwdHV3d3x7fH5+fn19e3l2e4OJiYWCh4yRlZSRkI6Pj4uKiouMkJKRkZOWmZmVkY2KiYiJiouNjIh/dW9vbnuFiIiHhk9PTk5NTUxMTEpHRkRCQEBAPTs6Ojc2NjQzMjIwLy8vLSwrKywsKioqKikpKSkoKCgoKCgoKCgoKCgoKCcnJycoKCcnJiYmJiUlJSUlJSQkJCQkJCMjIyMjIyMjIyMkJCQkJSUlJSUnJycnJycoKSkpKiorKywsLCwtLi4wMDExMzIyMjM0NTU1NTU1NTU1NTU1NjY2NjY2NjY2NjU1NTU1NTU1NTU1NTU1NDQzMzMzMzMxMTExMDAvLi4uLi4tLSwsLCsrKyoqKSkpKSkpKCgpKSktLzIxLy0uMTQ3Oj0+PlVqZVhTUlZYX2loTiUeIB8gJSgoO3FyXV9ha2IgHR4iISEhJCgqLCwuLS0tLi8wMTEwLFVyZmNkaGtwbmpoZ2VmZGFhYmNkZlk1MTMzMzQ1OUFHQzk0NDUxMTA0PkVGQTo1MS8uMDEzNTY2Nzc5PD5CQkNFRkpKTExMTk9RU09NTElJSkpMTVBSVFRVU09NSkhGRENBQUFAPj9CT1twg4qKiIWCf39/gH56cWhsdIKHh4aBeW1seIWJiYSBf3x7fHZrYl9cW19gZm11foiHhIaGh4eEhIWEhYWEhIWFg4B7dnFwcW91fH6ChYJ/fnx7fHt7e3l4eXt3Z0pAQUZQW15YS01YXF1eXFphZGVma2tje5SLm6enpZljQ0hKSUpLSklISElJSkpISElJT2aNqre6vr69vr6+vr6+vr66tquno6GbmZmalpefoqKcjoB7e3x7e3t6eHh5e31ubG5xdHR4eXt8fXx8fHt6eXuDioiEg4qOlZWTkI+Ojo6KiYqLjJCRkpOXl5iWkYyKiYeKiYqLjYqEfXVvb259homJh4ZMTExLS0tJSUpHREJDQUA+Pjs6ODc3NTU0MjEwMDAvLi4uLCssLCoqKiopKSkpKCgoKCgoKCgoKCkpKCgnJycnJycnJyYmJyYmJiYlJSUlJSQkJCQjIyMjIyMjIyQkJCQkJCUlJSYnJygoJycoKSoqKioqKyssLC0tLS8vMDAxMjQzMzMzNDQ1NTU1NTY2NTU1NTU1NTU1NTY2NjY1NTU1NTU1NTU1NTQ0NDMzMzMzMzIyMTExMC8vLy4uLS0sLS0qKisrKiopKCgoJycnJygoKCgpLTE0NDIvMjM2OjxCRUE+SWRtXFNRUVVaZm1hOR8cIiUnLCxIdGpjYGBwRh4eISAiISUmKy0vMjAuLjAwMDIyMUxyaGJjZWpwcGlnZGRkZGRjZWZkamJFMTI1NTM0ODpEWF05MzMzMjEwMzpFS0Y7NTMuLC8xMzU2Nzg3OTs+QkNERkZJR0pKS0xOT1JSUk5LSUhISkpNT1NUVVJNS0lHRENCQEBAQUBAP0ZTaXqEh4WCf359f398dWpjaXaDioiGgnlvbXmFiIaCf358fHp1ZmVmZWReXmFpdICIh4WFhYaGhISEhISFg4WDgoB6dm1iYWVlc3t8fYGCgH98fX9/gIGBgoB+fnlwaGRlaGlpZFdbYGFgYGJjZmdqa29oYmyLlp+nqaSPU0NGS0tJSklIRkdHR0hKR0dISV2Eo7K5vL2+vr6+vr6+vr6+vbizraWfm5qYlpWRk5eZmZSFenl6ent6eXh4eXl+cGpsbHFydHZ5fH58enx8fHp9g4iHhISKj5aUkI+NjY6NiomKi46SkpSYmpmYk4yLiomIiYyLi4uHgXx0bm9ufIiJiYiHS0tLSUpKSEhHSEZEQkE/PTw6Ojg3NzY2MzIxMDAwMC4tLSwrLCwqKioqKSkpKSgoKCgoKCgoKCgpKSgoJycnJycnJycmJicmJiYmJSUlJSUkJCMjIyMjIyMjIyMkJCQkJCQlJSUmJycoKCkpKSkqKioqKyssLCwtLS0vMDAxMTI0MzMzMzQ0NTU1NTU2NjU1NTU1NTU1NTU2NjY2NTU1NTU1NTU1NTU0NDQzMzMzMzMyMjExMTAvLy8uLS0tLCwrKiopKSoqKSgoKCcnJycnJygoKS0xNjc1MjQ6PD5CRkpCQ0A/VmtiV1FQU1tfZ25eNBwkKywtLk94al9fYGw0Hx0gIiQmJiktMTIzMjI0NDQ0MUlzbWZmZmlucGhlZGRkZGRlZWdkZFlDNzUzNDQzNzs/Q0xONzIzMzIyMTI4Q0hGPTgzMC4uLzAxNTY2Njk7PEBCREZGR0ZHSEhJTVBQUU5MS0lISEhISk5QU1RQTUtJR0RDQT9AQENEQ0FBSFlqdHyAgH59fH58d25iYmt3hIqJiIR7b215hIeDf316fHx5dWxoamhlYF5eaXaFi4qIhISEhISEhISEhIaFg4B9d29lV05RWG12eXt9f4B/fn+Bg4aHhoiIh399d3Fzc3FuamRXX2FgX19gZWVnaGxvZ2Nne5WepaWjh0pFS0pJSEZIR0dHR0dHR0lIRkxumq+4vL++vr6+vr6+vr6+vr27tKymoZ2ZlZGQjYmFhIuPhXt5enl5enp5eXp7gHFqZ2ducXBzdnh6fHp7e317foWIh4OFjZKVkpCPjY2NjIqKi4yQlJeYmpmXkoyKiYmIiYuLi4uKhn95dG5ub32HiYmJiElJSUlISEdFRERDQkJAPz48Ozk4ODY2NTQzMDAwLy8tLi0tLCwrKikpKSoqKSkoKCgoKCgnJykpKSkpKSkpKSkoKCcnJycmJiUlJSUlJSUlJCQkJCQkJCQkJCUlJSUkJCUlJiYlJicoKSkqKikpKiwrKywsLi4uLi8vLzAxMTIyMzM0NDQ0NjQ1NjY2NjY2NjY2NjY2NjY2NDQ1NTU0NTU2NDQ0NDQzMzQyMjIyMjIyMTEwMC8vLi4uLSwsKysqKSkpKSknJyYmJycoKCcmJSUmJykrMTY6OTc2Pj9CSExNSklDPzxQYmVaUlJVWFxfaW5SMSkpKSkpU3NiWmBqWyAiJCQmKioqLjAyNDU0NTc3NT1pa2hoa2tscWdkZWdoaGNkZWloXkdAQjMzMjIyN0ZEQDczMjEyMTExMTQ2NjpAQzw7Ni4uLy8xMjM0NTY5Ozw9QUNERUZGR0VHSElMTk5NTUtJSEhHR0lMTlBST0xKSUdFRENAQEBCREREREVJU2BrdHh6e3t8dnFoXmBqd4SLioqGfW9ue4ODg398e3t7fHtza2pqaGViY25+jZCKhoOCgYGCg4ODgoSFg39/enRmXk1DRFZtc3d6fH59fn+BgoSHi4yNjo6KiH90cHBtbWNYXF9fX2BhYmRmZ2Vja2dkaXWPnaCkoIJHP0dJS0lGRkZGRkZGSEVHRkZaiKi3vL6+vr6+vr6+vr6+vr69ubKsp6SgnZiUj42JhYKGiYF6eXl4eHh4enp6e39xZ2VoaG1vb3V7fH19e3t7en6EiIeDipKWlZGOjY2NjIyMi4uOkZWYmZqXk42LiomJiImKi4uLh4F9eXJubW6AhouMi4tHR0dHRUVFRENDQUBAPz08Ojk4Nzc1NTQ0MzAwMC8vLS0tLSwsKyopKSkqKikpKCgoKCgoKCgpKSkpKSkpKSkpKCgnJycnJiYlJSUlJSUlJSQkJCQkJCQkJCQlJSUlJCQlJSYmJSYnKCkpKiopKSosKywsLS4uLi4vLzAxMTEyMjMzNDQ0NDU2NjY2NjY2NjY2NjY2NjY0NDQ0NTU1NDMzNDU0NDQ0MzMzNDIyMjIyMjEwMC8vLi4tLS0sKysqKSkpKSgoJycmJiYmJycmJiUlJicoKi83PD07ODxCSEpMTEpJRUQ/PUdYamVbWFhYWVtiaGZSKiIoKShadGRdYmxMHSYkJioqKy0wMzc4Ojs5ODdmamdpa2pvcGhjZmdnZ2hmZ2lsV0E/QjczNTMzMzdDS0U3MzEvLy8wMTI0Njk5Nzk5OTUxLi4vLi8wMjU3ODk7PD5BQkNFRUVFRURHR0hISUlISEZGR0dHSk9RUk9MSkhGRURDQEBAQENFRUVFR0hQW2RtdHl7d3FmYl5fa3mGi4mLhXtvb3uAgH98e3t7e319eXBvbGppZmZxgZCQiYWCgYCAgYKDg4OFhIJ/fXp0Z1pUS0hQY3R2dnl7fX5/gYKEh4uNjo6Oi4mBd3BvbmpbX2BhYGBjYWNlZmdjXmVmaG5xhpqdn51/RkBGR0hHSEVFRUVFRkVFREZPdJ6yur2+vr6+vr6+vr6+vr6+vbmyrKejn52Yk4qFhIWGi4uEe3l5eXl5eXl5d3l9cmdlZ2dqbm5zdnl6fHt7e3p/hYiHhY2UlZOQjoyNjYyMjIuLjpOWmJeVkY2KioqJiYiJioyMiYZ/fHhwbWxzgoqOjo6ORUVFRUREQkFAQEFAPjw7Ojo4NzY3NDU0MjIxMDAvLi4uLSwsLCwrKioqKioqKikpKSkpKSkpKioqKioqKSkpKSgoJycoKCYmJiYlJSYmJSUlJSQkJSUlJSUlJSUlJSUlJiYnJycnKCkpKSoqKioqLCwsKywuLy4vLzExMTExMTIzMzQ0MzQ0NDU1NTU1NTU1NjY1NTU1NDM0NTU1NTMzNDQ0MzMzMzMzMjMzMzExMTExMS8vLi4uLi0sKysqKikoKSgoJycnJiUnJSYmJiYlJSUlJioxOT9CQj09RktLTEpKSEVCPz9BO0lgamRZWVlXWV1ga2dBJiYmKGJ2ZGJkajofISgrKiwtLTE0NTY4OD9qa2dpaWdsdGtkZmdoaGlpbGxfSDpCRT4zMTUzMDE2QVtSNTIwLy4uMDEzNDg8Ojk2NjY0Mi0sLS0tLzA0Nzk4Oz09P0FBQkJDQ0RDQ0NDQ0NDREVERUZGR0dKS05RTElHRkVFQ0FAP0BDREdHRkZJR01WX2dvc3FnU1hfYm57iIqJiYR8cXB7fn98e3l4eXl9fX90b25ua2lsdoWSkIeDf36AgYCBgoODgoKBgH55c2hhW1dRUVpoc3V3eHp9f4CChIeKjY+Ojo2JgXdwbGpiXWBhYmJiYWNkZmdkXllkZmVtcnqRmp6aeEBCRkVESEdHRUNERkREQ0VKZJKsuLq9vr6+vr6+vr6+vr6+vby2sqynop2blo+HhIKBg4WJh317e3p6eXh4d3Z3fXNkZGdlZmtsb3N3eHt7e3t6gYeIhoiPlJSSj4+NjY2Li4uLjZCUlpeUk42JiYiIhoeGioyMi4aAf3t5dXR3foiOj5GRj0JCQkJCQkFBQEBAPzw7Ojo5NzY1NTU0MzIyMjEwLy4uLi0qKisrKyoqKioqKiopKSkpKSkpKSoqKioqKikpKSkpKSgoKCgmJiYmJSUmJiUlJSUkJCUlJSUlJSUlJSUlJSYmJycnJykpKSkqKioqKiwsLCwsLy8uLy8xMTExMTExMzQ0NDM0NTU1NTU1NTU1NTY2NTU1NTQ0NDU1NTQzMzQ0NDMzMzMyMjIyMzMyMTExMTAvLi4tLi0sLCsqKikoKCgoKCcmJiUlJSQlJSUlJSUmJygrLzpCR0hDPUZOT1BOSkpFQj89PDo2OU1oaV1YVlRVWV1jaVYyISQsYHZjY2JnMSIqLDAzMjEzNzg8OD1pcWpoamhpb2xmZ2pqZ2publtCOTo/REk7MzQ0MjAxNj9QSTMwLy8vLzI3Njc2OTw8OTg1My8rKywsLS0vMTU5Ojs9PT5AQEBAPj9BQD8/PT4+QD9BQUNERERERUhKSklIRkRFRUNBQD9AQ0RFRkdGSEdHSk9YYGZjVklPXmVufImKi4qFfHBxen1+fXl5enp6fH+Ad3Rxb25sbnmIko2GgX9+fn+AgYOEg4KBf4B+e3hyaWVhW1dXXWlzdXd3en1/gYSFiIyOjo6NiYJ4cGdjYGBhYmNjY2NkZmZmYV1daGhoa3J1gJWem3U8QkVGSUdGR0RDREVDQ0JFV4OltLu9vb6+vr6+vr6+vr6+vr66trKuqaKZlpGNiISCfn17foV+e3t6ent6eHd2d313Z2VmZ2VqbG9wc3V5e3t9fIGHh4WKkpSUko+PjY2Ni4uLi4+SlJaWkYyJiYmJiIaHh4qMi4mDgYF/f4CDh4mMkJCRk5FAQEFBQEA/Pz0+Pjw6Ojk5ODc0NDM0MzMyMjExMC8uLisrLCssKyspKSkqKioqKiorKyoqKiorKysrKysqKioqKiooJygoJyYmJiYmJiYmJiYmJSUlJiYmJSUlJSUlJiYmJiYmJycnKSoqKioqKisrLC0tLS4vLy8wMDExMjAyMjI0NDQ1NTY2NjY2NjU1NTU1NTU1NTU1NTQ1NTQzMzMzMzMzMzMzMjIyMTIyMTExMDAwLi4tLS0tLCsqKikpKSgoKCcmJiUlJSYlJCQkJCQlJCYmKi44RUxQSURHUlRWUk1JREE+PDw5OTIuOFZlYldVU1ZYXF5nZ0srHydjcmFlaF0nKiwyNz1DS0xJQElqc21qbWlpcG5maGlpa25nWkw7OTo9P0A7NjQyMjAwNDY3OzcxLzExLzAzNzo5NzpAQT06NTMvKyssLS0tLS8yNjY5Ozs8Pz07Ozo7PT48Ozs9Pj4/P0BBQ0NCQURGRkdHRkRDQkJAP0A/QEJDQ0RERUVFRkVHSlFVUUpFR1dmc36IiIiHg3ltcHd7fXt6eXl5enyAhH53cXFvb3J9i5OMhYB6e3p+f4GDhYOCfnx9fX18dXFtaWRhYGNiaXN2d3d7fH+DhIaIi46OjoqCeXBlYmJjZGNjY2NjY2ZkY2NdXmlqam1yc3SMm5hyPkFFREVDQ0VERERFREJES22Zrra6vb6+vr6+vr6+vr6+vr6+uri1rquglZGQjoyKhYN+enl+fnt6enp5eHh3dnV8emhlaGdkZWpubnF0dnl8fXyBiIaGjpKRk5COj42MjIuLjIyPk5aUkYyIi4uMjY2Lh4iKi4mFhIaGh4mLjY+QkZCRlJOTQEBAQD8/Pz88PDs6OTk4ODc2NjY1MzMzMjIxMTAvLi4sKysrKysqKSkpKioqKioqKysqKioqKysrKysrKioqKikpKigoKCcmJiYmJiYmJiYmJiYmJiYmJiUlJSUmJicnJycnJycoKSopKSsrKyssLCwtLS4uLy8wMDAxMTExMjIyMzQ0NTU2NjY2NjY1NTU1NTU1NTU1NTUzNDU0MzMzMzMzMzMzMzIyMTIyMjExMTAwLy4tLSwtLCsrKikpKCgoKCcmJiYlJCQmJiQkJSYkIyQkJiktOEVPVFJNS1NYVlNPS0dDPzs6NzMyLy4sPVhnYVlUU1ZYW2BnYkImJF5vYWVlVjo4NT1ASUxRWGNycmxtbGprcHBqaWtsb2pTRUZHSENBQkE+ODQ0MjAvLzM2NzYzLi0uMTExNDk9Ozc7QkRAPTcxLyssLC0tLS0vMTQ2Nzg6Oz06ODg5PDw8Ozs7Ojo6PT09Pj9BQkNDRERFRENBQEBAQUE/P0BAQUFCQkJCRENERENERUZERUVTaHWDh4aHhYB0bXF4eHp6enl5eXp7fImMeHVycXF3f4ySi4WAe3p5e35/goSDgn55d3h6eXp3eHBubG1tbGhtdHd3eHt9goWGhoeIi4qHf3VuamZiZmVkZGNjY2NjZGJgX2Zsb2xqcHh5gY6Tb0NCR0RFREFDRERERURCQ1eFprO3vL6+vr6+vr6+vr6+vr6+vb25uLKroJmVlpWUkY6KhX52dXl5eXp6eXh3d3V2eXpnZWVkZWZpa2xucnZ5fX18hIiGiJCTkpGRj4+NjIyLi4yMkZKRj4yIiIqNkZaWko6LiouKiIyPkJKSkpGQkpGTkZGSkj8/Pz8+Pj09Pjs7Ozk3ODg3Njc2NDMzMjExMDAuLS4uKysrKyorKysqKioqKioqKisrKioqKiwsLCwsLCwsKyoqLCsoKiooKCYmJycnJycnJycnJycnKCgnJyYlJicnJygoKSkpKSkqKiorLCwsLi4uLi4uLzAvMDAwMTAwMjIyMjM0NDU1NTU2NjY2NTU2NjU1NjY1NTQ0NDQ0NDMzMzMzMzIxMjIyMjExMDEwMDAvLi4tLSwsKysrKikpKCgoJycnJiYmJSQkJCYkIyMjIyMkIyQmKzZBTFZaVlFTWFlYVE5LSEQ/PDgzMTAuLywsRGFoXlZUVFRYX2NoY0UsXmldY2hQKzc8RVRdZGpvc2pqbG1tcHBsbG1tZ1A8Qk1RT0hJTElBOjU0MzIuLTA1NTU0MC8sKzI1MzM4OTk4OUBEQ0I8NTEtLS0sLC4vLzEzNDQ2ODg5ODc3Nzs6Ojk4OTg5Ojo5Oz08PUBBQkRBQkJCQD9AQD4+Pz8/P0BAQUFBQUFCQkJDQ0NCQkJFVGl2gYCBgoJ7b2lvdnZ3eHh4eXp1dXaHkoB5dnRyeIKMkIqDf3t4eHh8f4KEhYN/eHBwdHd1d3Z1c3JzdXRxbGt0d3h4e3+FhoWGh4iIhX11c3BrZmNlZmZmZGNjYmNgW11jZ2txbm9ydXuJiHBGQ0NFRUVCQUJDREVGQ0pql6y1u7y+v76+vr6+vr6+vr6+vr6+vbu5s6ijoqCgoZyWk4x/dnV3eHl6enl3d3d2eHp9aGVlY2ZkZ2hrbnJ2eX17fYWGhomQlJOSkI6PjYyMi4uLjZKRjoyKiIiLkJabmpeVkY+OkJGTlZaUk5OSkpKRkZKRko88PDw8PDw7Ozw5ODg4NzU1NjU2NTMyMjExMTAwLi0tLSsrKysqKioqKioqKioqKiorKyoqKissLCwsLCwsLCwsKyoqKSgoKCgnJycnJycnJycnJycnJygoJycnJycnJycoKCkpKSkpKisrKywsLC4uLi8uLi8wMDAwMDEwMDIyMjIzNDQ1NTU1NjY2NjU1NjY1NTY2NTU0NDQ0NDQzMzMzMzMyMTIyMTExMTAwMDAwLy4tLSwsKysqKiopKCgnJycnJyYlJSUkJCQkJCQjIyMjIyQkJSkwOkZRWVhRUVhZWFhTT0xIRD87NzUyLy4tLyoxSGVpWVNTVlhZXGRpYlZqcWNkYko4S19lZ2dudGxoamxtcHBrbWxdPS01SVtdVE9NRUdHPTc0MjMwLywwOj02MjEuLS0wMzY2ODo6ODk+QUVCQDkzLy0tLCwtLjAyMjI0NTU1Njc3Nzg5ODk6OTg4ODg4ODg5Ozs9P0BBQkJCQj8+Pz8+Pj4+Pj4/QEBBQUE/Pz9AQUFCQEJBSltreXt7fH15cmtpcHR0dnd3d3l4cmdsgJOPenh2c3mCjI6Ig398eXl5fH+DhYaEf3hvaW1tb3BzdnZ1dXd2dXRwbXJ3ent/hIWFhoaHh4R/eXRwbmlqZ2ZmZWNjY2NhXVpdY2dtdXV1b21whohwTEREREVEQUNDQ0RERUZWgKOyuLu9vr6+vr6+vr6+vr6+vr6+vr6+vLu4trWxqqajm5SOg3p1d3h5enp5d3d3d3d6fWhlZGNkZWdoaW1xdHp8e32EhYaJk5STko+Ojo2MjIuLi42Qj42KioiIi5CYnZyZmJaVlpaWl5eXlZSTk5OTkpKSkZCMPDw7Ozs7Ojo5OTg4NzY3NzY2NTUyMTExMDAuLi0sKysqKioqKioqKioqKioqKisrKiorKy0tLCwtLS0tLS0sLCwrKioqKikpKCgoJycnKCgoKCgoKCgoKCgoJycoKCgoKSkpKSkpKissLCssLS0tLS4uLy8vLzAwMDExMTAyMjIyMzQ0NDQ1NTU2NjY1NTU1NTU1NTU1NDQ0NDQ0MzMzMzExMTEwMDAwMDAwLy8vLy4tLSwtLCsrKioqKSkoKCcnJyYmJSQjJCQjIyIjIiIiIiMjIyQmLTZDTVNUUE5VWltbWVRNSUdCPzw3MzIvKywsLCszVWlfWldXV1lZWmJqcXV0cG9ubGlnZWJscmpoZ2pucXJualw+IikzR11fWlJNQjhFRTs1MjIwLy4vN0hMPDMxLy8uLjM3ODk7ODY3PEJGQ0E8NzEvLSwsLS8xMzI0NDM1NTU1NjY2NjY4Nzc3Nzk5ODg3Nzg4Oz0+P0BAPz8/Pj8+PTw9PT09Pj9AQUFBQEA+Pj5AQD9CSVdjcnp3dnp5cWpeYmxxc3V1dnd3d3FjV26NmIJ9eXh7hIyLhoJ/fXp6e3yAhIWIh4N8c2JfZGdobG5wc3V4eHZ0c3R0dHV6foOEhYWFh4eHg3t3eHVzb2lnZmVkY2JiX15aXmZtdHd2dXBsaXaGcFFHRkZGRENCQ0RFRUFKZJKqtLm9vb2+vr6+vr6+vr6+vr6+vr6+vr6+vr6+u7Crpp2OhIF6dXd5enl5eXd3d3Z3en1sY2NkZGRmaGptcnN7enx+hYaGi5OWkpGPjo2NjIuLi42PkY6Ni4qKi46Ul5yampqYmpmZl5iXlpWUk5OUlZWSk42Nhzo6Ojo7Ozo6OTk3NzY2NjY1NTQ0MzExMTAvLi4tLCsrLCwqKioqKioqKioqKiorKyoqKystLS0tLi4uLi4uLCwrKysrKyspKSkoKCgoKCkpKSkpKSkpKSkpKSkpKCgoKCkpKSkpKSorLCwsLC0tLS0tLS8vLy8wMDAxMTEwMjIyMjM0NDQ0NTU1NjY2NTU1NTU1NTU1NTU0NDQ0NDMzMzMxMTExMDAwMDAvLy8vLi4uLi0sKysrKioqKSkoKCcnJyYmJSUkJCMjIyMiIiEhIiIiIiEjJCkzPkdMSUZJT1lcXl1YUU5MR0M/Ojc0LysqKSsoKis8WWVfVVpVVldaYWVmampqZ2VmYmBqc3BpaGtudHdvXDgnLTYvSWZnYF1XTzc2SkM4NTEvLy8uLjI6OTQyMS4wMTExNTY3Ozg1Nz1CRUVDPTgyLissLC0vMDI0NTQzNDQ0NDQ1NTU0NTY2Nzc5OTg4Nzc3Nzg4Ozw9PT8/Pj09PTw8PT09PT4/QUFBQT8/Pj8+Pj9BSVRfbXd2dHZ1cGVYT1VhZmtvcXR1eXduWzsybZaLf317foSMi4aCf316enx/goaHiIeGgnhpWVldYGRmZ2xydnd3dnZ1dXR3enx/goODhIWFhoN+enl6dXJvbWdkZGNiX19eXWFqc3l3dnVwbWtvgX5ZREdGRUJCQkNERUVBTnObrLa5vL2+vr6+vr6+vr6+vr6+vr6+vr69vr6+vr21rKCQeG5wc3V3d3l5eXl3d3d2d3p9a2NjYmRkZmhqbXF0enx8foSFh4+Tk5KRj46NjYyLi4uOkZCNi4qLjpKTlZaampuZmpqamZmYl5aVlZOTkpGRjoqFgHs5OTo6Ojk6Ojg4ODg2NjY2NDQ0NDIwMTEvLi4tLSwrKyoqKiopKSkqKiorKyssLCsrKywsLS0uLi4uLi4uLi0sKywrKisrKSkqKikpKSkpKCknKCgoKCgoKiopKSkpKCgoKCkqKysrKywsLS0uLi0tLi4vLzAwMDAwMDExMDEyMjIyMzMzMzQ1NTU2NjY2NTU1NTQ0NTUzMzM0NDQyMjIyMTExMTAuLy8wMC8vLS0uLi4tLCsrKiopKSkoKCcnJiYmJSUkIyIjIyIiIiIhISEhISEiIiMnMDlDRUE/Qk1XWl9fXldVUEtHQz85MCgnKCcmJiYnIypDW19ZV1NSVVdZXGBiY2NkY2Nsd3FpZ2xwdHloPyEjKCg5TmVpZGNjW0w0MkE5NDIwLy8uLC0vMS8wMTEvMTU0MTI1Nzk4ODg9RUdGREA7NTAsKysuLi8xMzQ0NDMzMzMzMzQ0NDU2Njc3NjY3NzU1NTU3Nzg4Ojs+Pj08PDw8PDw9PTw/QEBAQUFAQD48PT1BRVNfaXN2cnJxbGRVQj5GUFhcYmdtc3R0aFlWTGaOkIaAf4KHjIqGgn9+fn1/gYSHiImHiYh/cV9RU1VaXWBmanJ0dHV1d3Z2eXl6fYGBgoSEhISDg358fHp1dXBraGZkYV9dW1xlaXBzdXNzbmppZ3J8Y0dGRkZEQkNDRENEQlJ+oK22ur29vr++vr6+vr6+vr6+vr6+vr69vb6+vr69taWOc2NkZWluc3h5enp5eHd2d3d5fm5jYmJkZmVnamxvdXt8fX+ChYiPlZSTkI+OjY2Mi4mJjY6Ni4qLjpKVl5mZmpybmpqZmpqYmJaWlJKSj4yIhYB5dW1kOTk6Ojk5OTk4ODg4NjU1NTMyMjIyMDAwLi4uLS0sKyspKSsrKiopKisrKysrLCwrLCwsLC0tLS4uLi4uLi4uLC0tLCssLCsqKysqKiopKSkqKCoqKSkpKSoqKSkqKikpKSkqKysrKyssLC0tLi4tLS4uLy8wMDAwMDAxMTEyMzMyMjIyMzMzNDU1NDQ0NDU1NTU0NDQ0MzMzNDQ0MjIyMjExMTEwLi8vLi4uLi0tLS0rKysrKiopKSkoKCcnJiYmJSUkJCMjIiIhISEhISEhISEhIiIjJy04QkdEPkJIUFddYF9eXFpUTktFPy4nJiYlKCgoJyYkJChAXWJUT1RXV1peX2FjZWRsdXNwa29ydnhlOyUmKCYnPV1paWVjX1VJLCs4NjMxMC8uLSorLC4vMDAwMDI2NzIyMzY6Ojg5PkJERUVBPDYxLCsrLi4uMDEzMzMzMzIyMjI0NDQ0NDQ1NjQ2NjY1NTU1NTY3Nzo7PD09OTo6Ozs7PD08P0A/QD8/Q0A+PT0/R1JaZ3J0cXRya2NVPjAyOT9ESVFaYGZtbmhfZWhygpGLhIKCio6KhoSCgIB/gYSHiIiKiIiKhXptVk1PUFRXXWRrcHFzdHR2d3h5enx9fX6AgIKEhISCf318eXR0bmpnY2BeXlxhanBwcHFxcW1paGZpcm9QTEpKRUJCQkJBQkVVhaOwt7u9vb6/vr6+vr6+vr6+vr6+vr69vLy8vr28uamIaFlfZGVoaGtxeHl5eXl3dnZ2eX5zZmNjZ2lpamxucXZ8fX6AgoWJjpKRko+OjY2NjIuJiY2Oi4qKjpGUmJmbm5uZmZiYlpeXl5eWlZOPiYN+enRsZFlRUDg4OTk5OTc3ODg4NzU1NTUzMjIyMjAvLi4uLi0tLCsrKysrKyoqKisrKysrKywtLS0tLi4uLi4uLi4uLi4uLS0uLi0rLCwsKysrKyopKSoqKiopKSoqKiorKSoqKisqKCorKywrKysrLCwtLS4uLS0uLi8vMDAwMC8xMTExMjIyMjIzMzIyMzMzMzQ1NDQ1NTU1MzM0NDMzNDUzMjIyMjIwMDExLy4vLi8uLi4uLSwsLCsrKiopKSgoKCgmJiYlJSYlJCMjIiIiISEhISEhISEhICEiIyYrNEFGRkRHSU9VWl9iY2FfXFdTTT4uKSklJCQkJigqKCgoJCpHXV1VWV1gYWNjaGhtc3Bsa21xc3drTjQsKyYnKkNeaWJXUllTSi0oNzYwMDAvLS0qLDAvMTExMjEzODk3NTc6PD48OztAQ0VFQj87NTAsKywsLS4wMTEyMzMyMjAwMjIzMzQ0NDQ0NDQ0NTU0MjM0Njc5Ozw7OTc4ODg4Ojs8Pj09Pz9CQkJBPzw+Q1BbZnF1c3NuZ19SQDIvLzAzNjlARk9XX2JgW15WXXSNjoaEhIeLiYWFhISEhISGh4iIiYiIiIqGeWxWSkhKTFJbZ25ub3BydHd5eHh7fX5+fn9/gIGDgoOAfnt4dnJuamRgXltdZWhqbXBxb25saWdkZGZrV1RQSUNCQUJCQkFFWIeksLa6vLy+vr6+vr6+vr6+vr6+vr28u7q6vb27t62FXFBXXWBkZ2hpanJ3eHh4dnZ3eHyAeXFwcnNzc3N0dHd9f35/gYKGio2RkpGOjY2MjIuKiouPjYqLjZCTl5iYmpmamZiVlJKRkZCQjoyIgHdwZ2BYTkdESE44ODg4ODg3Nzg4NzU1NTU1MzIyMjIwLy4uLi4tLSwrKysrKysqKiorKysrKyssLS0tLS4uLi4uLi8vLy8vLy4uLi4tLiwsLCwsKysrKiorKysrKiorKyoqKywqKiorKysqKyssKysrKywsLS0uLi0tLi4vLzAwMDAwMDExMTIyMjIyMzMyMjMzMzMzMzQ0MzMzMzU1NDQzMzMzMDAwMjIyMDAwMC4uLy4uLi4tLS0sKysrKiopKSgnKSYnJiYlJSUkJCMjIiIhISAgICAgICAhISAgISMmKzQ/SEpKS05QU1pfZWVmZmJeWE00KSsoJiQlJyYmKy0uLismJSo6S1dnbGprbW5rdXJtbW9zdXdsU0k1Mjw9MTJMY2RaU0xNTUcwJTY1LzAwLi0tLS8yMDEyMTIzNjk9Ozk4ODs8PT0+QD9AQkA/PTkyLiwsLC0uMDExMjMzMjIxMDExMzM0NDQ0MzMzMzQ0NDIzMzU2ODo7OTg5ODg4ODc5Ojs7Ozw9QEFCQT89QE5ZY29wcXNvaFxOPC4tLC0vMDAwNDc6Q0lOUFdZUlppf4uGhYWHiIaFg4OCgoODhoeKioqJiIeJiod+b1tIREVIUWNpa2ttcHJ4eXd3eXt7e3x9fX5+gYKDgn99e3l1cm5qZVtQVFxlZmdub25ubGlnZGRiYFhSUEZEQkJBQUFCRFiIpbG3uby+vb6+vr6+vr6+vr6+vr68uri3u7u9ubGVXEVQWVxeYmZnaWhsdHh5eXp6fH+ChYJ/gYKCgoB+fn5+gYGAgYKChoyOkZCPjY2NjIyLioqNj42MjJCSlpeXmJiZmZeVk5CMioiGhH95c2dfVk5FRUZKTFBTODg3Nzc3Nzc3NjU1NTU1NTMyMjIyMDAvLy8uLS0sLCwsLCsrKysqLCwsLCwsLC4uLS0vLy4uLi4wMC8vLy8uLi4uLi4tLS4uLCwsLCsrKyorKysrKioqKiwsKysrKywsKiosLCwsKy0sLC0tLi4tLS4uLy8wMDAwMDAwMTExMTIyMjIyMjIzNDMzMzMzMzMzMzMzMzMzMzMzMjAuMDExMTAwMC8uLi4uLi4tLSwsKysrKiopKSgmJicnJiYlJSQkJCMjIiIhISEgICEhICAhIR4gICEiJSszPUVJTE9RUVRbYGZramZkY1tIMSwvLCgpKSknKSosLC0vLjAxMTI4QVFYYGNmcnJvb3J0dXRlUVBPOztIT0pPW2BYVVJLS09GMSQzNTAwLy0uLTE2ODU1MzI0NDY5Pz49Ozs8QEBCQT48P0JAQD07NC8tLS0tLzExMjIyMjIyMjIyMjIyNDQzMjExMjIzMzIxMjExNTY3NzU2Nzc3Nzc4ODg4OTk6Ojw9P0A9QEhXYW5xcXJvZ1xQPjAuLSwtLS8vMDExMjQ4PEJISUtQWGp+fHl8fn+Af3+AgIKGhoeJiYqLiYeGiYuMiYFzXEhCQ0pbY2ZmaG1yeXl3d3l6enp6ent8fn5+gYF/f3t6d3Vzb2xlX2FoZF9kbW9vbmxoZmJhYV9bTk5IRkNCQkJCPkRZiaawt7m7vb2+vr6+vr6+vr6+vr68u7m2tbe6u7mtgkZFT1ZcXmBkZGdpaW93e3t8f4GFh4eKiouLioqJh4aEhIaGhYSDg4eMjpGQj46MjIyMiomLjY+NjY+RlJWXlpWWl5eWlI6JhX14dXFuY1ZMRkJBQENITU1QVDc3Nzc3NzY4NzY1NTU1NTUzMjIyMjAwLy8vLi0tLSwsLCwrKyopKiwrKywsLS0uLi4uLS0uLi8vMDAvLy8vLi4tLS0tLi4uLi0tLS0sKysrLCwqKisrKyssLCsrKyssLCwsLCwsLCstLSwtLS4uLS0uLi8vMDAwMDAwMDExMTAxMjIyMjIyMzMzMzMzMzMzMzIyMzMzMzMzMzMyMTAwMTEvLy4uLi4uLi0tLS0rKysrKSkpKSgnJyYnJiYlJSQkJCMjIiIhISAgICAhISAgISEeICAhIyguNj5FSUtQU1RXX2RqbmxpZWJWPi4tLCoqKi0tKCoqLCwsKiotLjAxMTAuLigoZHJsbGtoaW1gSUxOUERDTlJRWV5aWV1bVVVUUjwnLzY4MzAuLS0xNz08OjYzMzM1O0BBQUNBP0BCQkE8Ojw+PT08OjUxLi0tLS8xMTExMjIyMjIyMjIyMjMzMTExMTExMzMyMS8vMTEyNDQzMzQ1NTU1NjY3Nzk5Ojo8PT4/PkZQXWtybm9sZlxOPTAuLCwsLC0vLy8vMDAxMDEzNTk7PkFLYGZgZGhrcHFzdnp9g4WFh4mJi4mJhoSHioyMhHZjRz9IV2NmZGVrcHp5dnd5ent5eHh4ent8fX59fIB/fHp2c3Jvb3Bsa25ra29vb2xqaGZiYWJgXEtMT0dDQkJCQkFCVoSjrra5vL2+vr6+vr6+vr6+vr6+vLq4s6+1u7u3p3BITFFZXF5iZGdqamptc3t/gYSHi42Nj4+Pj46OjYuIh4eHh4aGhYSIjI6Qjo6OjIyMjIqJi42PjY2PkZOUk5WTk5STjoyGf3VsZGBaT0VAPD0+QUBDSExOT1I3Nzc3Nzc3NzY2NTU0NDMzMzIyMjIwMTAwMC8uLi4tLC0tLS0tLS4uLi4uLi4uLi4uLjExMTEwMDAwMDAwMDAwLS0uLi0uMC4uLi0tLi4tLS0tLCwsLCwsLCwtLSwsLCwsLCwsLS0sLi4uLi4tLi4uMDAwMDAwMDAwLjExMTEwMDIyMjIxMTExMzQ1NDMzMjIyMjIyMjIxMTExMTEwLjAwLS0tLS0tLS0sLCssKysqKioqKSkoKCgoJiUmJSUlJCQjIyEgISEgICAgICAgIB8fICAgIiQqMDhARUhLUFNWWmJma29uaWVeTzAqKSkpKiotMSwsLCwtLSolIyQnLDAwMTYuWnZqamtvbGhcVUpJSklFS1JPWF1hYGFhWlhfXlpLLyk0QUA1Li0wOkFDQjw2NDQ2OTs/Q0RFSERCQUJDPDc4OTk5Ojg4NDAtLSwuMDAxMTExMjIxMTIyMjIyMjEwMDAwMDIyMTEvLzAxMDAxMTIyNDQ0NDY2NjY4OTg5Oz09PUBKVmRubG5qZVtNOzMvLCssLC0tLi4vLzAwLy8wMDIyMTIzNkBFRUlNU1VbYWNob3R5eoCGhYiJhoSFhYeKjY2HeWVJR1ZkZWFjaXN5eXZ2eXl6eXd0cXZ3enx9fX1+f319e3l2c3Jubm9vbm1sbW5qZ2dlYmFhYl1PS1NQREJEQ0JDRFJ3m662ury9vL29vb6+vr6+vr+/vLu7tauttLi3rppvX2NkZGRnamprbW5ucnl9gYWHiY2PkI+QkJCRkY6Mi4aHhoWFhoSFiY2Ni4yNjYuLjYyLioyNjY6MkJGRk5CQj42MiYWAdmthVU1FPjk4Ojs8PkBAREZJTExMNzc3Nzc3Nzc2NjU1NDQzMzMyMjIyMDEwMDAvLi4uLi4tLS0tLS0uLi4uLCwuLi4uLi8xMTExMDAwMDAwMDAwMC8uLi4tLjAuLi4uLi4uLS0tLSwsLCwsLCwsLS0sLCwsLCwtLS0tLS0uLi4uLS4uLjAwMDAwMDAwMC4vLzAwLy8xMTExMTExMTIzMzEzMzIyMjIyMjIyMTExMTExMS8wMC4uLi4tLS0tLCwrLCsqKikqKikpKCgoKCcnJSUkJCQjIyMhISEhICAgICAgICAfHyAgISQnLDQ9Q0ZHSEtRVVphZmhsa2llWkItKCorKyoqKCgrKysrLCwsJyMiJSUpLDI7WnVsaWtqa2VbTUxFR0U5NUpQUVdgX1tfX1paW19WUzorL0RNOS8vM0BERUVAOTk6ODg8Pj9CREhJRD8/Ojo3NTU1NTg5OTgzLi0sLjAwMTExMTIyMTEyMjAwMDAwMDAwMDAwMDExLy8vMTAwMTExMTIzMzQ0NDU2Njg3OTg5OTpBTllobW1qZVxOPjUyMC4rLCwtLS4uLy8wMC8vMDAyMjEyMjAvMDQ0Njg8QEdITlZcZGlvdXl9gIKBgoODhIeLjId8aFNYX2RiZG93eHd2dnl5d3Zwbm5vdHd6e319f35+fn18enl2dHJxcXBubm1samZkYmFhYGFgVk1NUEhDQ0NDQkRLb5estrm8vby8vLy9vb29vLy7u7i3sa2mpquvrqSXgHh6d3d2dnd3d3Z5eX19gIOFiIuPkJGSkZKSkZGOjImHhoWEhISEhIiMjIyMjIyLi4yLiYqMjI2NjpKRjo6MhoV/fXhuZ1pPRT47Ojc4Nzk8PT9AQURGR0pKSjc3Nzc3NzY2NjY1NTQ0MzMzMjIyMzEwLzAwLy4uLi0tLS0uLi0tLS0tLS0vLi4vLzAwMDAwMDAwMDAxMTExMDAwMDAwMDAvLzAwLy8vLy4uLS0tLS0tLCwsLCwsLS0tLS4uLi4uLi8tLi4tLS4uLy8wMC8vLy8vLy8vLy8wMC8vMDAwMDExMjIyMTEyMTIyMjIyMTExMDAwMDAwMDAwMDAvLy4uLS0tLSwrKysqKikpKSkpKCcnJycnJiUkJCMiIiEhIiIhISAgICAfHx8fICAgICEjKS82PkVGRkZJTlVZYGVoamlpZ1c3Li0sLSkqKikpKCgoKCorKykoJyclJiooSXBqamZnZWNQQUtNSURCQEBGTlhiZFxaYl9XUVJcWU9EOjM2PTIuLzA4P0VGQjs+QDo4ODk6Oz9IS0Y/Ojc1NjU0NDY3Ozs4NTIvLS0vLzAwMTExMTIyMjIvLy8vMDAwMC8vLy8wMC8vLi8wMDExMTEyMjIyMTIzNDY2Nzc3NzU5Q1BeaGpoZl1QPzY0MjEuLCwsLCwuLy4uLi4vLzAwMTEwMjIyMDAwLzAvLzAwMjY8Q0lPVVxiam5ydnh7fX6Bg4iNioBxZWFiZm52d3h2dXV1dHJtaGdnam1zd3l6fH5/fn1+fnx5d3V2c3RycHBvbWlmZGRhX19fYVtLSUpMSUVDREBBR22VqbK5urq8vLq6ubi1s7GwrquopqOhn6Cko6CZlIuKioiIhoWFhIOCgYCBgoKFhYeJi46PkZKSkpKRjoyJh4eDgoKDg4OGiYmLi4yMjIyMi4qJioyKjIuNi4WAe3ZxaWFaTUM9PD09PTw6OTg5PD8/P0NEREREREQ3Nzc3Nzc2NjY2NjU1NDMzMzIyMjMxMC8wMDAvLy8uLi0tLi4tLS0tLS0tLzAwLy8wMDAwMDAwMDAwMTEwMDAwMDAwMDAwLy8wMC8vLy8uLi0tLS0tLSwsLCwsLCwsLS0uLi4uLi4vLi4uLi4uLi8vLy8vLy8vLy8vLzAwMDAvLzAwMDAxMTIyMjEwMjExMjIxMTExMTAwMDAwMDAvLy8vLi4uLi0tLS0rKysqKikpKSkpKSgnJycnJiYkJCMjIiIhISIiISEgICAgHx8fHyAgICAhJikvNj5ER0dIR0tQWF1gZGRlZWJJLSsrKSsnKSkpKSgoKCgoKioqKSknJiYnPmhmZ2ZnZGNOQERNTUw+PEpOSVdfY19fYGRgVFRaXWFPR0I7NDg4NzkxMTQ8Q0NCQj86OTk3Nzg7RkxNRT03NDQzNTU2Nzo8Pjw4MzAtLy8wMDAwMTEyMjIyMC8vLy8vLy8vLy8vLi4vLy4vMDAxMTExMTEwMTExMTIzMzQ0NDQ0OERRXmdnZF9VQzU0NDEwLy0sLCwsLS0sLC4uLi4vMDExMDIyMjExMTAwLi0uLiwuLi8zNzxAR01TWV5kaGxwc3iAhYiHgHNnaHF5fHt4d3d2cWxnZFxUVmBnbXJ3eHp9fn1+fX98fXt5eHZ1dHNycW9tamZiYV9fX2BdUEhKSUhEQUNDR1Fqj6OtsLGxsbGtrKqpp6SkoZ+enJuanJ2cmpqZmJWSkZGPj46NjIqIhoSDhYSDhYWHiYuNjpGSkpKSkY+NioiHg4KCgoKChYiIiYqMjIyMiYiJhoeHhYKCfXlwamNaT0dCOzk7Ozs8PT08PDo5Oj0/QUBDRERDQ0FBODg3NzY2Nzc2NjY2NTUzMzMyMjIyMjEwMTEwLy8vLy8tLS0tLS0uLi4uLi4uLi8vLy8wMDAwMDAxMTExMDAwMDAwMDAvLy8vLy8vLy8vLi4tLS0tLS0sLC0tLS0sKy0tLi4uLi4uLi8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLy8wMDAwMTEyMjIyMTEyMTExMDAwMC8vMDAwLy8vLi4tLS4uLi4tLS0sKysqKioqKikpKSgnJycoJiUkJCMkIyMiIiIhISEhICAgIB8fHx8fHyAgIyUpLzY/RkhISEhLT1RZW15fYmBXOScqKScoKCgoKCkoKCgoKSsrKyooKSwkQ2xgYmJkY2VQO0I8OktHPj1FRFNkYV1dYWJfY15hYmBiVEhESFZKPkJHOSwwNTs/QkdCOjc2NjMzNkFKTUdCOjUzMzU1Njc5Pj9BPjo1MS4uLy8wMDExMjM1NTEwLy8vLzAwLi4vLy8vLy8vLzAwMDAwMDAwMDAwMDAwMTEyMjIyMzhDUV5jYmBYSjs0NDMwLy8vLSwsLCwsLCwtLS8vMDExMTExMTEyMTAwMC8uLS0tLS0uLi0tLjEzOz9ESExSV15kaXB1d3dybG1zeHd3eXZzcGphXVhNSFFaXWRtcnJ3fX5+fn5+fX59fHt5d3Z1dHVzcGxoZmFfYGBfX1tOTEpFRUhQVl5qdo2gpKampqSjoKCfnpybm5mXlpiYmJiYmJeXlpaVk5KSkI+Qj46MioiGg4SCgYOGhoeJjY6QkpOTkpKRkI6Kh4OCgoKCgYSGhoiIiYmKioeBfnx6dnJuaWFcVUxGPjs6OTo4OTs8PD09PDw7Ojw+PkJCQUJDQEBAPzc3Nzc3Nzc3NjY2NjU1MzMzMjIyMjIxMDAwMC8vLy8vLS0tLS0tLi4uLi4uLy8vLy8vMDAwMDAwMTExMTAwMDAwMDAwMDAwMDAwLy8vLy4uLS0tLS0tLCwtLS0tLS0tLS4uLi4uLi4vLy8vLy8vLi4uLi4uLi4uLi4uLi4vLy8vMDAwMDExMTEyMjExMTExMTAwMDAvLzAwMC8vLy4uLS0uLi0tLCwsKisqLCsqKikpKSknJycnJiUkJCMjIyMiIiIiISEgICAgICAfHx8fHx8gISMlKS80PEJHSElJSVBVVldaWVpXRi0nJycnKCgoKCgoKCgoKCsrLCwsKSYmPW1kW1thZmhTPkA7NzZARj01NTZQY2NjZGRkYV9gZGViY1hMREdKQTtAQToxLjAyOEFERT82MzQwMTI6QkVGQjs3NDQ1NTc5Oz0/QUE+OjUxLzAwMTExMTIzNDQ0MjAvLy8vLy4uLi8vLy8vLy8vLy8vLzAvLy8vMDAvLy8vLy8vLzE2QU1aYV1aUkU5MTIxLy8vLy4uLCwsLCwsLS0vLzAxMTExMTExMjExMjAvLi4tLC0tLS0tLi8uLi8wMDM2Oj5ESU1TVlteXl5hZmprbGxqZ2RdVVFNTU9JRVFeZmptcHV7f4B/fHx8fH19e3l5dnZ0dHFtamhlY2FhYGBgVExOUVhfa3N8go2Um56en5+cm52dnJuZmZmYmZiXl5aWlpWVlJOTkZCPj46OjIuKiomHhoODgoKCg4OEh4mNjpCSkpKSkZCNioiFg4KCgoKChISGh4eHhIJ9d21mZGFZUUtIQTw7Ozs7Ozo7PDw7PDw9PTw8Ojs8PT8/QkJCQkBAP0A3NzY2Nzg3NzY2NTU0NDIyMTEyMjMzMTAvLy8vLy8vLy0tLi4uLi8vLi4vLy8vLi4wMDAwMDAxMTExMTExMTExMTExMTExMTEwMC8vLy8uLi4uLS0tLS0tLS0tLS0tLS0uLi4uLy8vLy8vLy8uLi4uLi4uLi4uLi4uLi4uLy8vLy8wLy8wMDAwMjIxMTExMDAwMDAwLy8wMC8uLi4uLS4uLS0sLCsrKysrKyoqKSgqKCcnJycmJiUkIyMjIiMiIiEhISEgICAgIB8fHx8eHh4fISIlKCktMztBREZISkxPUlNVVVNNPzQpJycnJykpKCgoKCkpKSkrKy0rKykqMGxsYF9hZGZWOEFEPDIzOUBEQktFSV9iYWZmYmNfY2RkZ2VndUtAPj89PkBBOTAvLjdFRURAODIxLi0vMjlAQkI/OzY1NDMzNjg6PD9CQj86NjIwMTEwMDEyMzQ0NTIyMDAvLy4uLi4vLi4uLi4uLS0uLi8vLy8vLy8vLi4uLi4uLi4vMz5JV1tWU0xBNzAvLy8uLi4tLSwsLCwsLS4uLi8xMDAwMDAxMTExMTAwLy4tLi0sLS0tLi4wLi4vLzAvMDAvMTU2ODw+QUNFSE1QVFZWWFVTTkVDQ0ZLRj9EUlthZmxvdn2AgX98fH18fH18e3l4d3dzcW9tamdlYmNhY2JcX2txe4OKj5KYm5ubnJ2dnZ2cm5ubm5uZmZiXlZWVlZSUkpCQkJCOjY6NjY2Li4uJiIaFgoGBgIGCgoWHh4uMjpCRkpKRjoyKhoSDgYKCgYKDhIWCg4J/d2xfVUpFQD9BP0JAOjw8Ozw7PDw8PDw8PTw8PTo5PDw9PT9CQ0NCQEJENzc2Njc4Nzc2NjU1NDQzMzIyMjIzMTAwLy8wMC8vLy8uLi4uLi4vLy8vLy8vLy4uMDAwMDAwMTExMTExMTExMTExMTExMTExMDAvLy8vLi4uLi0tLS0tLS0tLS0tLS0tLi4uLi8vLy8vLy8vLi4uLi4uLi4uLi4uLi4uLi8vLy8vMC8vMDAwMDExMTExMTAwMDAwMC8vMDAvLi4uLi0sLCwsKysrKysrKyoqKigoKicnJycnJiUlJCMiIiIiIiIiISEhICAgICAfHx8fHh4fICIjJiksMDQ8QURGR0pMTlBSUlNPRzctJycnKCcpKSgoKCgpKSkpKysqLCsoLGVraGhmY2dXN0FIRzgtLzc6PT5EP1BlZWdqZWNkZGJfYWViZmRHQkJERUVFRT4zLy4yNzlBRT4zLy4tLi8yOT5BPzk3NjY0NTU3ODs+QEBAPjo2MTExMDAxMjM0NDQ0MjIyMTAvLi4uLi0tLi4uLi0tLS0uLi4uLi4uLi4uLi4uLi4uLjE8RlNWUk5JQDYtLCwsLS4uLS0sLCwsLC0uLi4vMTAvLy8vMDAxMTEwMC8uLS4uLS0uLy8uMC8vLzAwMC8vLy8uLzAuLi8xMDQ2OD0+P0JBQT47Ozs+QkI+P0VOU1piZW51fX9/fn19fH1+fHt5eHl5dnRxb25ramdpbHJ2eHyCi4+SlpqZmpydnJybm5ubm5ubmpmZmpqYl5SUlJSUlJCMiYmIio2Pj4+PjY6OjIqIh4SCgYCAgIB+goSIiouMkJGRkJCOi4eFhIGCgYGBg4SEgYGAenJpXlRKQz9AQD9CQT08PDs8PDw8Oz08PDw7Ozs8Ozw8PT1AQ0RERUVGRjY2Nzc2ODY2Nzc1NTU0MzMyMjIyMjEwLy4uLy8vLy8vLzAvLy8vLi4uLi8vLy8vLy8vMDAwMDExMTExMTExMTExMTExMTExMS8vLi8vLy8uLi4tLSwsLS0tLS0tLS0tLS0tLS4wMC8vLy8vLy4uLi4uLi4uLi4tLS0tLS0uLi4uLy8vLy8vLy8vLy8wMDAwMDAwMDAvLy8vLy4uLi4tLCwsLCsrKysrKyoqKSgpKSgoJycmJiYlJSUkIyMiIiEiIiEhISEgIB8fHyAgIB4eHx8hJCYrLjI3P0JISUlKTE5PUFFRTUg6LCcmJiYnKCkoKCgoKiopKSopKSosLV1sZWdkYmZWLDxGUlFKPTMzNzs1NTpSZnFubWVeYWJjX11hZltST0tLSkhKSUhCODAvMTI1QEdEOjEtLS0tLTE2PDs7NzU1NTQ0NTY4PT0+P0A9OTczMjEwMTEyNDQ1NTQ0NDQ0MTAuLi4tLS4uLi0tLS0tLS0uLi8vLi4tLS4uLS0tLSwwOUJNVVBMRj81LSwsLCwsLCwsLCwrKywtLi4uLy8vMDAwMDAwMTExMTAvLy8uLi4uLi4vLy8vMDAwMDAwMDAwMC4uLi4uLi4uLi8wLzAwMTExMTM2Nzo7Oz09QUdLUFdfaHJ5foGAfXx9fn18e3t7enZ2dHNxb25vdHqCiI2QlZeXmZmbm5ubm5uam5uampqYmpeYl5eYmJaQi4+SkpKRiYWDgYWNkpSUlJWUk5KQjoyIhoOBgIB/fX+BhoiKjI6Pj4+OjouKhoSDg4KDgoGBgYKBfnt0bWlhXFBCQEA/QkA+PDw8PT07Ozs7Ozs8Ozw6PD0/Pz9AQkVGRkdHSEc3Nzc3Njg2Njc3NjU1NDMzMjIyMjIxMC8vLy8vLy8vLy0vLy8vLy4uLi4vLy8vLy8vLzAwMDAxMTExMTExMTExMTExMTExMTAvLy8uLy4uLi4uLS0sLC0tLS0tLS0tLS0tLS0uMDAvLy8vLy8uLi4uLi4uLi4uLS0tLS0tLi4uLi8vLy8vLy8vLy8vMDAwMDAwMDAwLy8vLy8uLi4uLSwsLCwrKysrKysqKignKSkoKCcnJiYlJSUkJCMjIiIhIiIhISEhICAfHx8fICAfHyEiIyYoLDAzOUFGSUlJSkxOT1BQTklENCgnJiYmJygoKCgnKSkpKigoKCgpLVtuZGdlYGhbLTI+R1RZWFFGODo8OTg/Xmx0cmxoamVeYGFhZmZcU1JPTE5PTkxMSD8zLzIzNz1DRj80Ly0tLSwtLzQ3Nzc2NTU1NDY3OTw9PkBBPzw5NjIxMDExMjM0NTU1NTc3NTIyLy8vLi0uLi4tLS0tLS0tLi4uLi4uLS0uLi0tLS0tLjdBSlJPSkY/NS0qKioqKiorKysrKyssLS4uLi8vLzAwMDAwMDExMTEwMDAwLy8vLy4uLy8vLzAwMDAwMDAwMDAuLi0tLi4uLi4uLi4uLi8vLy8vMTMzNjY3Nzg7PD9FTlljbnd9gYB+f4B/fn18enl7e3p5d3V2d3+Gio+TlpiXl5mZmpubm5uZmJiYlpSSjouJiYiIiYqLhICGi46NiX9ycnqCkpmdm5ubm5qWk5CPi4iEgoCAf4B+f4KFh4iJioqKi4uJiIiFg4OCg4KBgYGCgoF/fHhzb2hgUUI9PD48Ozs8PDw8Ozs7Ozs7Oz0+Pz9AQkJCQ0VHR0dISEhHODg3Nzc3NjY2NjU1NDQzMjIyMjIyMTEwMDAvLy8wMDAvLy8vLy8uLi8vLy8uLi4uLy8vLzAwMDExMTExMTExMTAvLi8xMTAwLy8vLi0tLiwtLSwsLCwtLS0tLCwsLCwsLi4uLi8vLy8vLy8vLi4uLi4uLi4tLS4uLi0tLi4uLi4uLi4uLy8vLi8vMDAwMDAwMDAwMDAwLy8vLi4uLi0tLSwsKyssLCsqKiknJycnKCgnJiYlJSUkJCMiIiEiISEhICAiIiAgHx8fHyAgICAgIyUoKSwxNTxDSUpJSElKS05NTExFPy4nJiUmJygoKCcnKSgpKCgoKCkqKFFtY2VkYWNdLi83PUZQV1hZTTcyOTo/PFx0cnJwY1lhXltgZmhlXVdTUVFSUVBOTEpDOTMzLzE4PUNBODEtKiorKiwuMTM1NDQ1Njc4ODc5PD5AQT49Ojc1MjAvMTIxMzQ1NTY4OTY0MzEwMC4tLi4uLCwsLCwrKywsLS0tLS0sLCwtLS0tLCw1QEZRTklFQDcuKCgpKSkpKioqKiwsLS0uLi0tLi4vLy8vMDAwMDExMTAwMC8vLy8vLy8vLy8wMDAwMDAwMDAwMC8uLi4tLi4tLS4uLi8vLy8vMDAwMTIyMjM0NDU1NjtJV2NteH+EgYB/f32Afnp5eHp7e3t7fICHi46Sk5WVlZaXmZmampmamJSRjYqGgXx1b2xoZmZrbXBxc3uChIJ0aG56i5ifnqCeoKCdmpmUkYyJhYB8ent7fX+AgYWGiImIiImJiYmGhoOCg4OCgoCAgICBgYB/fXdzaF1NQD88Ozo6Ozs8PDs7Ojs7Oz5AQEFBQkNERkZGSEdHR0ZGRjY2Nzc5OTY2NjY1NTQ0MzIyMjIyMjExMDAvLy8vMDEwLy8vLy8vLi4vLy8vLy8uLi4uLy8wMDAwMTExMTExMTEwLy4vMDAvLy4tLi4tLS0sLS0sLCwtLS0tLSwsLCwsLC4uLi4vLy8vLi4vLy8uLi4uLi0tLS0tLS4tLS4uLi4uLi4uLi4uLi4vLzAwMDAwMDAwMDAwMC8vLy4uLi4tLS0sLCsrKysrKiknJycnJyYmJiYmJSUkJCQjIiIhIiEhISAgISEgIB8fIB8fHyAhIyUoKysuMzc+RUpKSEVERkdJS0pHQzsrJiYmJycoKSknJykoJygoKCkrJU9pYmRlYGVhMCwzOD1HTlVZWFA0LzlBRUhsdHR0b2BYYFtaX2NoZ2BZVlRUUVBQUVBMR0E6NTMxMjc9QDoyLCoqKikqKi0wMTIzNTc4ODg3Nzk8Pj8/Pj06NzUyMTEyMTMzNDY3ODc2NTQyMDAwLy4uLSwsLCwsKysrKywsLCwtLCwsKyssLC0tMTxFTk1IRUA5NCooKSkpKSoqKSkrKyssKystLS4uLy8vLzAwMDAxMTExMTEwLy8vLy8vLy8vMDAwMDAwMDAwMDAvLi4uLi0tLi4vLy8wMDAvLzAwMDExMjIzNDQzMzMzOkdWYmx2fYGBfX+Bf35+e3Zzdnp+f3+Ch4qNj4+QlJSTlZaWl5eVkpCLhX93cGljW1VQTUhITVFgXV9kbnNxbGdzhZafo6KhoaGhn52bkYyHhH15dHJzc3h7foCCg4aHhYWGhoaGg4ODgoCAgYCAfn5+fn+Cg4J/eXFqXUxAPT09PDs7Ojw8PDs8Pj5BQ0NEREVGR0dHR0dGRkVFRUU3Nzc3NjY2NjU1NTU0NDMyMjIyMjEwMDAwMDAwLy8wLy8vLy8vLy0vLy8vLy8vLi4uLi4vMDAwMDExMTExMTAwMC8vLy4uLi4uLi4tLS0tLS0tLCwsLCwsKywsLCwsLCwtLS4uLy8vLzAwLy8vLy4uLi4sLi4uLi4tLS0tLi4uLi4uLi4uLiwtLi4vLy8vLy8wMDAwLy8vLy8uLi4uLS0tLCwrKysrKigoKCcnJyclJSYmJSUkJCQjIyIiISEhISEgICAgICAfHx8fHx8gICUnKissMDQ5QEZJSUhFQkJGR0dGRT81KSYmJicnKCgoKCcnKCgpKioqKlRtYGJlYWBjMSo1NjY9RElQV1hUPj09PjxLbHBzdFVWYGNhYmVlZWdjXVlYV1NQUFFRTUxGPjgxLzEzODw8MywrKikpKSosLzEzNTg5Ojk6Nzc3ODo+QEFBQD06NjQyMDEyMzM0NTY3NTM1NDIyMTEwLi4tLS0sLCsrKysrKywsKyssLCsrKiopKS44PkZLR0RBOjUuJycoJycmKCgoKSkpKSgpKystLS4vLi4vMDAxMDAwMTIyMTExMS8vLy8vLy8vLy8wMC8vMTEvLy4uLS0uLi4uLi4uLy8vMS8wMC8xMTEyMzQ0NDQyMjQ5Q1Nga3N5f3+Bg4B/fXx3cW90eH1/g4OFhoiJiY6Ojo2NjY6PjIZ+d29oYFhTTkxGQ0REREVNXVhST1RaX2dugZSeoJ+fnp+em5aRjIaAfHRvaWRkZWltc3d8foCBhISEhISDgoKCgYB/f31+f35+fX5+f4CEgH56cmdaRj48Ozs8PD48Pj4/QUJDRUZHR0ZGRkZGRkZGRUVFQ0NENjY3Nzc3NjY1NTU1NDQzMjIyMDAwMDAwMDAwMC8vLy4vLy8vLy8tLy8vMDAwMC4uLi4uLi8vLzAwMS8vLy8wMC8vLy8uLi4uLi0tLSwsLCsrKysrKysrKyssLCwsLCwsLS0uLi8vLy8wMC8vLy8uLi4uLi0uLi4uLS0tLS4uLi4uLi4uLCwtLi4uLy8vLy8vMDAwMC8vLy8vLi4uLi0tLSwsKysqKikoKCgnJycnJiUmJSUlJCQjIyMiIiEhISEhICAgICAgHx8fHh8fICIkJywtLzM5PEBGSUlHQj8/QkVGRUE9LygmJiYmJicnJycnJygpKSorLl9rYWFiX2RkNSYyOTs+PkJKT1BQST47PEFDVG1xcm5lW1ljYWVrbWtoZV5dW1lWUlBTUk9NSkU9MzAvMjQ5OTMsKyopKSkpKy4wMTQ4OTo7PDk3Nzc5PUBCQkE9Ojo2NTIwMDEzMzQ1NjU1NTU1NDMyMTEwLy8vLy8tLSwrKyssLCwsLCwrKyoqKSksMjpASEhDQDw2LygnJycnJycnKCkpKSkoKSoqKyssLS0uLi4vMTAwMDAxMTExMTEwLy8vLy8vLy8vMDAvLzAwLy8uLi0tLS0tLS0tLS4xMTIzMTExMTExMjM1NTU1MjIyNDdDUV5pcHqBgICAf318enZwb3F1eX1/gH+AgYGCgoGAfX19fntyaVxUTElJS0xPTkxKSEhJS1FRT0tJS1Rfb4aSkpOTkpKPjIiBe3NtZWBcWVZWWFtiZWlwc3Z7foCBgYGBf39/gIB/fn58e3t8fX18fH5+gIOBfHdvZFdGPT09QEFBP0BAQUNGR0ZGR0dHR0ZGRkZGRkVFRUZDQzY2NjY2NjU1NDQ1NTQ0MzIyMTAwMDAvLy8vMDAwMDEwLy8vLy8vLi0tLS4uLi4uLi4uLi4uLi8vLy8vLy8vLy8uLi0tLS0tLS0tLCwsKysrKysrKyoqLCwrKywsLCwsLC0tLi4uLi8vLy8vLy8vLi4uLi0sLS4uLi0tLS0uLi4uLi4uLi0tLS8uLi4vLy8vLy8vLy8vLy4uLy4uLi0sLCwsLCsrKSkpKCcnJycnJyYmJSUlJCQjIyMjIiIhISAhIR8fICAfHx8fHx4fICIkJSksLjI3O0BDSEhHRkE+PkJDRUNCOiwnJSUmJicnKCgoKScpKCopM2VsXmBfXWBqPyIvNDo8QEJAQ0hKSj84O0FAPFpxcXNvbWldZWdobHBwaWRhXl5cV1NQUVBPTktHQzozMDA1NDczLisqKSkoKCosLTA0NTc4OTo4Njc3Nzo9QUJCPjw7Ojc1MjExMTIyNDU2Nzc5NzU1MzQ0MjIxMzMzMC8uLCwsLS0tLSsrKiorKSkpKi02PERKQT86NTEqJyYnJyclJScnJiUmJycoKioqKisrKy4vLi4wMDExMTEyMjExMTAvLy4uLi4vLy8vMDAuLjAwLS0tLS0tLS0tLS0wNDQ1NTMyMjAxMjQ1Njc2NjMzMzM0Nz9OWmVvdnyAgYB+e3p4dW5rbG91eHt8fHp6eXh0c3FubWxnXlZOSkpJSUtNTE5OSkdHSEpMS0hGR0tOWm17fXx7fXl6dnFqYltVTUdEQkVHT1VZXl9kZWlscXR5eHl9f39/fn18e3t7enp7e3x9fHx7fH1/gH98dGtiVUlAQUFCQ0NERUVGRkZHR0dHRkdISEdHRkZGRkZGR0c2NjY2NjY1NTQ0NTU1NDIyMjEwMDAwLy8vLzAwMDAxMC8vLy8vLy4tLS0uLi4uLi4uLi4uLi4vLy8vLy8vLy8uLi4tLS0tLS0sLCwsKysrKioqKiorKywsKyssLCwsLCwtLS4uLy8vLy8vLy8vLy4uLi0tLS0tLS0tLS0tLi4uLi4uLi4tLS0uLi4uLy8vLy8vLy8vLy8vLy8uLi4tLCwsLCwrKykpKSgnJycnJycmJiUlJCQkIyMiIyIiISEgICAgICAgHx8fHx8fICEjJSgrLzM4PEJFR0lIRkNBPj5BQkRCPzcpJyUlJiYnJygoKCgqKisnOmtpXl9fXWJvRyAtMjM4OkRHS0ZFSEc9PlFkW0RPamxtZ2ppZWdrbXBxbmllZmBcWldUUU9NTExLR0Y+NzExNDM2My4tKykpKCgpKistMTMzNzk6NzY2Njc3Oj0+Pj48PDs5NzUyMTExMjM0MzU1Nzk6NzY3NTMzMzMzMzAvLi4uLi0tLCwrKyoqKioqKSgrMTlARkM+OjUzLignJycnJSUlJSUmJSUlJicpKSkqKSosLC0uLjAxMTExMjIyMjIxMC8uLi4uLy8vLy4uLy8uLi0tLS0tLS0tLS0uMTU2ODg0MzIwMjM1Njc3ODgzMzMzMjQ2P0pZY211eH6BgH17eXZybWprb3J2e3x8enh3dXNxbmlpZGFcWFJQTktLS0tKSUZDQ0RGRUNDQkBBRE9aW1lZWVlZVlFORkE9OTg3Nzk/RUpSVlxfX19hY2VpbXBxdnp9f39+fHt6enp6e3t7fHx8e3t8fn+Af3lza2FXS0NERUVFRERFRUVFRUVGRkVGRkZGRkZGRUVHRkdFNjY1NDU1NjY0NDMzMzMyMjEwMjIxMTAwMC8vLy8vLy8wMDAuLi4uLi4uLS4vLy4uLS0tLS8uLi4uLi4uLi4tLS0tLCwtLS0tLS0sLCsqKioqKioqKSkqKywsLCwtLS0tKywtLS4uLy8wMC4uLi4uLi4uLi4tLSwtLS0tLS0tLS0tLS4uLi4uLi4uLi4uLi4uLy8vLi4uLy8vLi0tLS0tLSsrKyspKSkoJycmJiYmJiYkJCUlJCMkJCMiISEgIB8fICAfHx4eHh4fHyAjJCgrLTE4PERHSkxMSkdCP0FCQ0VGQj0yJignJiYmJycnJygnKSkpR29nYFteYWJqVSEuOjw9PTtFR1hPTEpIQj1FT1dXWGRqaGdpaWFiaXFyb2pjaGhkX11aVlRRTElLSUZEQTo2MTQ2NzUvLCwrKykpKSkqLC0wMTU5ODg4NTU1Njk6Ozw+PT09Ozk3NTQzMDAyMjIyNTY4OTk3OTk1NDQyMTAxMTAwLy8vLisrLSoqKioqKSkoKS01O0BDPjs3My8sKSUkJiYlJSUkJSUlJSUmJycnJygpKiosLS0tLi8wMTIzMjIyMjAwMDAuMC8vLy4tLS4uLS0sLCwsLCwqKi0tLzE0Njg1MzQ0MjIzNDU4OTY2NjY1MjExMzQ9SVZgaXJ2fYCBfnp5dnJsamZrb3R4fHt9e3p6d3VzcW1pZV9bWFRRTUxKR0VCQD89QD4+PDw7Oz09Pz8/Pz8+PDw5Ojo6ODk6Ojk6PEJITVNYW15gXl1fXmJlaGxwdXh9fnx5eXl4eHp6e3l7e3x7fHx+f398eXRsZFpNRkZERkZFRUNDQ0NDRUVFRURFRUZHRkhIR0ZIRjQ0MzMzMzIyMzMzMjMzMTEyMTExMDAvLy8uLi4uLi4uLy8uLi4uLi4tLi0tLi4tLSwsLCwsLS0tLy0tLS0tLCwsLCwsLS0tLSsrLCwrKikpKSkqKiopKissLCwsLCwsLCssLS0uLi8vLy8uLi4uLi4uLi4uLS0sLS0tLS0tLS0tLS0tLS0tLS0uLi4uLi4vLy4uLi4vLy4uLi4tLS0tLS0rKisrKSkpKCcnJiYmJiYmJSUlJSQjJCQiIiEhICAfHyAgHx8eHh4eHyAgIiUqLC4yOUFGS1BPTEpHREJBQkVGSUY8LCgnJiYmJigoJyklKCcpVmxjX1xiaGdsUx4ySkxMTlNVSkdKTktJQTxEQEJHUV5hZWdoamlfZ2pucGxiZWpnYmFjXldUUExIR0ZFREI9ODM0Njc1LysrKysqKioqKSkrKzAyNjk5OTU1MzQ0NTc6PT4+Pj07OTc1MzIxMTEzMzMzMzU4ODg4NzY0MjEvMDAwMDAwMC8uLSwsKiopKSkpKCkpLTY7QD46NjQxLiomJCYmJCQlJCUlJSUlJicnJycnJykpKyssLC4uLzAyMjIyMjIxMTExLy8vLy4uLS0tLS0tLCwtLSwrLCwsLS8xMTM0NDEyMzQzNDQ1Njg2NjY2NjQxMTM0NDxGUltlb3Z7fYB9eXd0cmtkZ2pscXV5e3t8fHt5eHd0cm9rZ2NgXFdWVFFOSkZBPDo4ODg4NzY3Nzo6Ojo5Ozs7PD0+Pjw5Ozs5OTs/RUpPU1teYF9gX1xaWVtgZWpxdnp7e3l5eHh6enx7eXt7fHx8fH1+f315dG1jW05FRkZFRENEQ0JCQkNDQ0NERUZHR0lJSEhGR0Y1NDIyNDMyMjMyMjIxMTExMDAwMC8vLy8vLy8vLi4uLi4uLy8uLi0tLS0rKywtLSwrLSwsLCwsLC0rKioqKysrLCwrKywsLCwrKysrKysqKikpKSkpKSkqKysrKysrKyssLCwsLi4tLS0tLi4uLi4uLi4uLi0tLS0tLS0tLS0tLS0tLSwtLS0tLS0uLi4uLy8tLS4uLjAtLS0tLS0tLSwsKyoqKioqKCcnJyYmJiYmJiYmJSQjIyMjIiIiIiAgHx8fHx4fHh4fHx8hIiUoKS0vNDtBSE1QUExJRkVCQEJCREpHOCoqJyQkJignJycmJyQ3Zm1jXV9jaGhsWiYrQ0tKTk1PVFNLSU5HQDlOYVZaV1JdZGlsa2txbmxucG9iX2VnZ2ViYl9XU1BMSENCQUNCPzozMDI1NC4sLCsrKyssLCsqKistLzM1Nzg2NTIxMTM2ODg7PD0+Pj4+Ozk1NTMxMjMzMTAyNDQyNTc3NTQyMjAwMTEyMzQzMS8tLSoqKikpKSkoKCgxODs9OjY2NDAuKyklJSUlJSUlJSYmJiYmJiYmJycoKCkqKiosLC0uMDEwMDAwMTExMTEvMDAvLy8vLi0sLCwrKiorKisrKy0uMDExMTExMjMzMzIyMzQ1NTU2Njc2NjY0NDU1OUFOWWJrcXh+f314dXJuaWVmZ2ptcXZ5e3t7enp6eHh2dHBsaWdmY2FdWFNNSUZEQT46OjY3Nzc2Nzc4OTk8PD09PDw9PDo5ODg5PEBGSlBVWl1gYGBdW1VTVFpdZGhwdnt7enp4eXl5e3t7fH18fXt7fH19fHh0a2JbT0VERURDQ0JBQUFDQ0NERUZGSEhKSklIRkZEMzMyMjIyMjIyMjExMTAwMTAwMDAvLy4uLi4uLi0tLS0uLi4uLS0sLCwsKysqLCwrLCsrKysrKysrKysrKywsLCsrKiorKysrKioqKioqKiopKSkpKSkpKisrLCwrKysrLCwsLC4uLS0sLS4uLi4uLi4uLi4tLS0tLS0tLS0tLS0tLS0tLi4tLS0tLi4uLi4uLS0uLi4uLS0tLS0tLS0sLCwrKioqKignJycmJiYmJiYmJiUkJCQkIyIiICAgICAfHx8eHx4eHx8gIiMmKSksLjI4PkRHSktLSUZFQkNCQ0JGQjAoKycmJyYnJycoKiVAcG1iYmBmZmhvTCMqMEVRSkdGQEJMUUZLSj88RlRbZFdWY2lub25sb3BrbHBlV19qamhpY2FfWFJSTUlEQT4+PTw5My8wMTEsKysrKysrLCwrLCssLC8uMzU2NTUzMS8wNTc3ODk7PD5AQD89Ojc2MzM0MzAwMDExMTE0NDQ1MzMyMjIyMjM0MzIwLS0sKiopKSkoJiYnKjM4Ojw4NjU0MzAsKigmJSUlJSUlJSUlJiYmJiYmJycoKSoqLCwtLy8wMDAwMDExMTExMDAwLy8vLy4tLCwrKysrKiorKyssLS4uLi4uLzAxMjIxMjMzMzU1NjY2NTU1MzM0NDM3P0tUXWVtdHl+fHZycG5sZ2JlZ2pvdXh7e3p6enp5eXd0cm5sa2tpaGRgW1hVUE1IRkE7ODc3NjY2Nzc3Ojo7Ozs7Ojo4ODc3Nzk8QkdMUVdbXV9fXVtXUU1NVFlgZ3B0d3p6d3d4eXl6enl7fHx8e3p5e319eHJpYllORURDQ0NBQkFBQ0NERUZGSktKSkpJR0ZFRDExMzIyMjIyMTExMTEvLi8vLi4uLi4uLi4tLS0tLS0tLC4sLCsrKiwrKyssKysrKioqKiorKyoqKysrKyoqLCwqKSoqKiorKyoqKiooKioqKioqKyopKioqKisrLCwsLCwsKystLS0tLS0uLi4uLi4tLS4uLS0tLS0tLS0tLS0tLS0sLC0tLS0tLS4uLi4uLi4tLi4tLC0tLS0tLS0tLCwrKysrKSkoKCcnJiYmJiYmJiYlJCQkIyMjIiIiICAfHx8fHh8fHx8fICMkJyosLS4yNjtAQkZJSklHR0RBQUFAPzgtKiwoJyUnJyYoJyc8cGtkZGVnamxoPR4rLzM/WkxDRkc8UFJOS0lHRkxRX2ZgWF9nbW9vbnBxb3BvZl9lamhnaWZmYV1YUk5HQj07Ojs6NzQxMTAtLCsrKiopKiwrLS0sKiwuLzAxMzQ1NDIwMDM3NTg5Ojo8PkFAPzw6ODY5NzUzMS8vLi8vMTIyNDQ0NDMzMzU1NDMxLy4tLCwqKSgqKSclJyctMjQ5OTg1NjcyMC0rJyUlJSUkJCQkJCUlJSUmJCUlJygqKiwsLi4uLi4uLi4tLS0vMDAwMC4uMC4uLSwsKysrKysrKiorKywsLCwtLS0tMDExMTEyMzM0NDQ0MzMzMzIyMzIxMjY6Qk5XYmpxeHt6dXJtbWtmYmJla3F0dnp4eXp5eHh2dHRvbG1tbWxqaWdnYl5aVlFMRT85ODY2NTY3Nzc3ODk6Ojk5ODg2NjU2OT5CRk1TWFxeXl5dWVVOSUhKU1tja3F3ent4dXZ2d3h3d3l6e319ent7e3p2cGlgWFBGRENCQEBBQkNERERHSEhKTEtKSEdFQ0ExMTEwMTExMTAwLy4vLy0uLi0tLS0tLS0sKysrLCwsLC0sKysrKyorKSorKyoqKikpKSoqKioqKisrKiopKSsrKSkqKikpKSkpKSkpKCkoKCcnKCoqKSoqKiorKywsLCwrKysrLCwtLS0tLS0tLS0tLS0uLi0tLS0tLS0tLS0tLS0tLCwtLSwsLCwtLSwsLCwuLC0uLSwtLS0tLS0sLCwsKysrKykpKCgnJycnJiYmJiYmJiUlJSQkIyIiIiAgHx8fHx4eHx8fHyEkJSkqLC0uMTY7P0NFR0pKSUhFQkJBQDkuKisrKCcoKSgoKCo+a21mY2ZrbW9nNSYuMTA9WFhLTktKTE1SU05ERkZQUWhpZWFmbHRvbGtubmtubGBiZGZmZWZnaGZfWlZSSkI9Ozo4NjY6OzgzLy0sKigoKSoqLC0uLy4uLi4uLzEyNDY0MjIyMzU2ODk5OTw/Pz49Pjw6Ozk3NTMyMjEvMDEzMjMzNDQzMzM0NDMyMS8uLSwsKyopKSkoJyYmKSwxNTo6OTk3NjYxLywnJCUkJCQkIyMkJCQkJCQmJicoKiosLC0tLi4uLi4uLS0tLy4uLi4uLy8vLi0tLSwsKysrKyoqKyssLCwsLS0uLi8vLy8wMTEyMjIyMjExMTEyMjEwLzAyMzU+SlZeZ290eXl2cnBtbGhjYWVqbHB0d3h5eXh2c3FvbWppaWpqa2ptbWtpZWBaU0tEPDg3NjY2NjY3Nzc3Nzc2NjY2NTU1NzY4PkRJTlRaXFxeXl1VUUpGQkdPWGFpb3R4eHh2dHR1dnZ1dXl7e3p4eXl6eHZxaWJZUEVDQUJCQ0RERUdISUpJS0tKSkhGQ0FCMDAwMDAwLy8wLy8vLy8wLi0tLS0rLCwsLCosLCwsLCwsKyoqKSkqKSgpKSkpKSkqKSkqKSoqKiorKyoqKSkpKSgoJygoKCgnKCgpKSkoKCgoKCgoKSkqKioqKioqKisrKysrKywsLCwsLCwsLCwtLS0tLS0uLi0tLCwtLS0tLS0sLCsrKysqKisrKysrKysrKysrLS0tLS0sLCsqLCwrLCwsKioqKigoJycnJyclJycmJiYmJSUkIyQjIiIgIB8fHx8eHh4eHiAiJSgpLCsuMTQ3PkJFRkhJS0pJSEREQz8wKikqKCYoKiYpKCopZHBnZWVqam9XKigwLzREVlxMS0hJTEtCSVJLRT9JWV9ZWFtganBza2pqZWxubGdfYWVnY19hZmhlX11ZVU5HQj06ODc5PUQ/NTEtKykoKCgoKywtLS8vLi4tLS4vLzMzNDU1MjExMzY3Nzk7PDw8Pz8/Pz4+PDk4NjY1MzMzMzQ0NDQ1NDIzMDAwMDAuLS4uLSwrKikpKSgnJicoLDI3Ojo7Ozk4NDEuKiQjIyMjIyIiIiIjIyQlJCYoKSosLCwsLS4uLi4tLSwsLC0tLS4uLy4vLy4uLi4tLSwsLCwrKywsLCwsLCwsLS0tLS4uLy8wMTAwMDAwMC8vMTEvLi8vLy8xNTtGT1xja3J5e3d0cG1paGVhYWdqb3J1d3d0cXFua2loZmRkZGhqaWpsamdkX1lRSD45ODc2NjU1NjY3NzU1NDQ0NDU1NTU1Njk/RUxRV1lbXl9dWlNNSUNASVBYYGdudHl5d3VycnN0cnJydXl7eXl5enx4dnBqZFxTSkFBQ0RGRUhKSkpKSUlLSklGRkNBPy8vLy8uLi4uLy8uLi8uLy0tLSwsKywsLCwqLCwrKykpKCopKSgoKSgnKCgoJygpKSoqKikpKSkpKiopKSkpKSkoKCcoKCgoJicnKCgnJicnJycnKCkpKioqKioqKioqKisrKyssLCwsLCwsLCwsLS0tLS0tLS0sLCwsLS0tLS0tLCwrKysrKiorKysrKysrKysrKysrLCwrLCwrKiwsKysrKyoqKiooKCcnJycmJicnJiYmJiYmJCMkIyIiICAfHx4eHh4dHh4gIiYpKiwuMTQ4PkNFRklKS0tKSklGRkY5KysqKiknJiYnKCgjVG9qaWpucG9PLDQzLi00Q0pOT1FNU1NTT0xLREJHR1teVUtcYmlxb21tamdtb21pZmRiYWBgX2NmYl5aWVZQS0Q/PDw9PDxCPTUzLykoKCgoKCkrLC8vLi8uLS0tLS0vMjQ2NjMyMTEzNTY4OTs7PT8/QEBAQD8/PTw7Ojk5ODg4ODc1NTQxMC4uLi4sLi0uLi0sKyopKSkoJycmJygtMTQ3Ojs5NzYzMCwoJCMjIyMiIiIiIyMjJCUnJicoKiwsLC0uLi4uLS0sLCwtLS0tLS8vLy8uLi4uLS0sLCwsLS0sLCwsLCwsLC0tLS0uLi8vLzAwMDAwLy8uLjAwLi4uLi4uLzEyOEROWGBocHV6eXdvbGpnZWJgYWducXNzdXFvbWllZGJgW1xeYGNmaGloZF9ZUEc+OTg4NjY1NTY2Nzc1NTQ0NDQ1NTQ0NTY4PkNKTlRaXF1fXVtXUEpFRERKUVpiaHBzd3h2dHJwcXFxcnJ1ent6eXl6e3p3c29nX1hNRkVDR0hJSkpKSklJSUlJRkRBPTwuLi4uLS0uLi4tLSwtLi0tLCwpKSoqKiorKCgoKCgoKCcnJycnJycnJycnKCgoJycnJygoKCgpKSoqKCgoKCkpKCgoKCcmJiYmJiYmJiYmJicnJicpKSoqKiorKykpKSkpKSsrKysrKyssLCorKywtLCwsLCsqKysqLCwrLCwsLCoqKiorKysrKiorKysrKysqKioqKiorKissKysrKysrKioqKioqKSkpKSgnJicoKCcnJSUmJiUlJCQhISAgICAfHh0dHR4eICQoKywvMTM3O0FHTE1OTEpLSkxLSkpDLiYpJyUnJycoKCcmTXFoY2lvcGk/IjMwMC8xND1HUlpeWFZYWVVNSUI2PEhiY1pZaHFtcnJxbW5taWlqa2dkYV9iYF9eXVxVU1VTUU1JQ0BAQz84Ojk1NjEoJicnKCgoKSkqLi8wMC4sKysrLCwtMDMxMDEvMDI1Nzg4Ojs9Pz8/QEBBQUI+QEBAPz4+PTs7ODU0Mi8tLC0tLSwtLiwsKyoqKSkpKCcmJiYlJisvMjQ2ODg0NDEuLCciIyMjIyMjIyQkJCQlJicoKyssLC0tLi4sLCsrLCwtLS4uLi4uLi8vLy8uLiwsLCwtLS0tLS0uLi0tLS0tLS0tLi4vLzAwMDAxMS8vLi4vLy4uLS0uLi4uMDE3P0lTXGVtc3d3dnBqaGhkX15eZmxucHBwbmxnYmFeW1dUU1NYW2BlYV9aV01FPTk4NjY2NTU2Njc3NTU2NjU1NjY2NjY2OTxBR01TV1pcX11cWVNOSEZFSE1UXWVrcHV3eHh2c3Btbm9wcXN4e3p5eXl7end0cWpjW1VNSUhJSElKSUdJR0hHRkNAPTs5Li4uLi0tLS0tLCwtLSwsLCwrKiopKSgoKCcnJygoKCgnJycnJycnJygoJygnJycnJycoKCgoKSkqKikpKCgoKCkoKCgmJiYmJiYmJiYmJiYnJyYnKCgpKSkpKiooKCkpKSkrKysrKysrLCsqKissLSwsKywqKissLCsqKiwsLCwqKioqKysrKyoqKisrKyoqKioqKioqKyoqLCsrKysrKyoqKioqKikpKSkoJycnKCgnJyUlJiYlJSQkIiIgICAgHx4dHR0eHyIlKSwvMTQ3Oz1CSE5SUU9NTEtLTUxINyomJignJicmJigkTnRpZWpqbGUyIzEyMC4zMDZFSU9XWVZWVldWTUQ7MDhGXlJVW2FranJ1cW1wcm5qaWdnZGJgXV5eWVVUTk1QUk5MTUY/P0E8NzYzNTUxKycnJygoKCgpKi0uLy8uLSwsKysqKywtLjAwLzAwMzU3Nzg6Ojs8PkBAQEBBQUJCQkFBQT89Ozg3NTMxLy8uLS0sLCwrKysqKikpKScnJiYmJSQmKCsuMDI1NDQyLy0pJSMjIyMjIyMkJCUlJSYnKCsrLCwsLC0tLCwrKywsLS0uLi4uLi4vLy8vLi0sLCwsLS0tLS0tLi4uLi4uLS0tLS4vLy8wMDAwMTExLzAwMDAvLi0tLi4vLzAxMjI7RVBbYWludnl1cG1qaWVfWl1iaGtucXJwbGZiXllVUU5MT09TWFlXVVBKQjk3ODY2NjY2Nzc4ODc3Nzc4ODk5OTk6Ojo7QUZLUVZZW1xdXlpVUUtHRkhNUlhhaGxwdXd5eXdybW1vb25vcnZ7enp6e3x8eXh0b2xjXFJLSUlJSUhIR0VFREM/PTs3Ni4uLi4sKy0sLCwtLSwsLCwrKioqKignJygmJiYmJicnJycmJicnJycnJyYmJSUnJycnKCgoKCkpKCgpKSgoKCcnJycnJSUlJSUlJSUlJSUlJiYmJiYmJycoJycnJygpKSkpKikqKysrKisrKysrKywrKysrKioqKikpKysrKisrKioqKioqKioqKikpKSkqKioqKioqKioqKioqKisrKysqKioqKiopKSkpKSgoKCgoKCgnJSUlJSUkJCIiISEgIB8eHh4eHyAkJiktMDM3Oz5AQ0hNUFFPTk5MTE1LPy0pKCgnKignJiUmVHZqZWZqZGdDIy4yMTAuLS85SE9SWFlZXmRaVE1HPjE8SFpaVFdeaGptcXFzd3ZxaWFhZmRfWlleX1ZQTklISk5NTU1JREJAPDg1NDc3NC0oJSYnKCkpKSksLy4uLS4uLispKCgnKSkqLS0uMDE0NTY2ODk5Ozw9Pj8/QT0+P0BAQkJBPTo6ODY2NDIxMC8vLSwrKiorKikpKCgnJiUlJCMkJCQlKSwuMTIzNC8uKyYjIiQjIyQjJSUmJiYnJygqKioqKysrKywsLCwtLS0tLi0uLi4uLi4vLy4tLCwsKy0tLS0tLS0tLS4tLS0tLS0tLi8vLzAwMDExMDAxMTAwLy4wMC8vMDAyMzAxNDlBSlZdZmtyeHdxcGplY11aWl5jZ2xtb25sZ2JbVlNQSUdHSEpNTUtGQz04ODo5ODg3Nzg4ODg4ODg4Ojw8PDs7Ozs8Oz9DSE1SWFpaXF5bV1JKSUdJTFFVWmFnbXF0eHl4dnJtb25wcXJzdnt7e3t8fYCAe3hzb2hhVk5JSEdHRERDREE/Ozo3NTIsLCwsLS0sKisrKysqKioqKiooKCopKSkmJSUlJiYmJiYmJSUmJiYmJycmJiUlJycnJyYmKCgpKSgoKCgoJygoJycmJiUlJSUlJSUlJSUlJSYmJiYmJicnJyYmJicoKSkpKSopKSkrKyoqKioqKiorKioqKysqKiopKSoqKiopKSkpKSkpKSkpKSkoKCkpKSopKSkpKSkpKSoqKSkqKioqKioqKioqKSkpKSkoKCgoKCgoKCgoKCYlJCQiIiEhICAfHh4eHh8gJCgqLTAzNz9DREVISUpMTU9NTUxKQjInJycnKCopJSUkU3RrYWZoaWlNJi4xMC4uLSsvPk1XUFVWWV9fXVtUSD43Q1FeXlVXY19baHRzdHd5enFmZmtpYFtaW1xaUktJSEpKSktKSkZEQTw4NzU2NTQtKCUmJygpKSkpKy0sLC0uLi4uKicnJiQlKCorLS8yNTU2ODk4ODs8PDw9PT07Ojo7Pj4+PDk6Ojo6ODczMjEwMC4sKyoqKispKSgoJiYlJSMjJCQjIyUmKiwuMTEvLi0qJSUkIyMkJCUlJiYmJycoKioqKisrKyssLCwsLS0uLi4tLi4uLi4uLy8uLSwsLCssLCwsLS0tLS0uLS0tLS0tLS4vLy8vMDAwMDAwMTExMDAvMTExMTIyMjIyMzIzNj5HUVlhanB1eHJuaGNeW1ZZXmBla21ubm5oY1xWU05IREFAQ0NCQD09Ojs8Ozo6Ojo7Ozs7Ozs7Ozw9PT09PT09Pj09QkRJUFNXWFpcWVdUTkpLSkpOU1dcZGdrcXR4eXh2cm9tcXJycnR5fHt7fICBg4F+fXdxbGFVTElIRUJDQj89Ozk3NjMzKyssLCwsLCsqKioqKSkpKSgoKCYmJiYmJiUlJSUlJSUlJSUlJSUlJSUlJSUlJSYmJycmJiYnKCgoKCgoKCgnJyYmJSUlIyUlJSUlJSUlJSUlJSYmJiYlJiYmJiYnKSkoJycqKCkpKCkpKSkpKSkqKioqKysqKSkpKSkpKSgoKCgpKSkpKCgpKSkoKCgpKSkpKSkoKCgoKSkpKSkpKSkpKSkpKiopKSkpKSkpKCgoKSkoKCcnKCgmJCQlJCMiISEhHB4eHR4fICUnKi8yNzpARUdGR0VGSUtOTk1KRDcsKigoKCkqKyQjQXttX15lZGpfJSsxMDM4LysrLThETE9SU1VaW15dUUpCPUhSV1lRUlpSVGJyc3R4fXx3dXNvaGBcWVZVVFBISElIR0dFRkpHREE+OTc2NTQzLignJycoKCgnKSorKysrLS8vLiwqJyUiJCcoKy4wNDY3NzY2Nzk9PDw8PTw6OTc2Nzk4ODc3Ojs8PDs3NjMyMC8uLCoqKioqKSkoKCcmJiYjJCQkJCQjJCcqLS4xMC8uLCkmJCQkJSUlJSYmJycoKCkpKiorKywsLS0tLS4uLy8vLC0tLS4uLi8vLi0sLCsrKiorKysrLC0tLS0sLS0tLS4uLi4vLzAwMDAxMTEyMjIxMTMzMzM0NDU1NDM0NDY3PERMVF9lbHR2c21oY19ZVVRYXmNna21tbWplXVhSTkhFPzw6PD4+Pz4+PT4+Pz8/PDw9Pj8/Pz9AQD8/Pz8+Pj49PD5CSExQVFZYWVpXVVBMS0hJTlJVWV9kaG5ydnl6eXZycXFxcnNzdnl+gICBgoOFhIJ+eXJpX1FHRkM/PT07OTY0NDMzMCsrKywsKyoqKioqKikpKCgoKCgmJiYmJiYlJCQkJCUlJSUlJSUlJSUlJSUlJSUmJicnJiYlJigoJycoKCgoJycmJiUlJCUlJSUlJSUlJSUlJSUmJiYmJSUmJiYmJycnJycnKSgoKCcoKCkpKSkpKSkoKCkpKSkpKSkpKSkoKCgoKCgnJycnKCgoKCgoKSkpKSkpKCgoKCgoKSkpKSkpKSkpKSoqKSkpKSkpKSgoKCkpKCgnJycnJyUlJSQjIyMhIR8fHh0eHyAlKSwvNDo9QkdJSUhGRUdKTk9OTkc+MykpKSkqKSgoLXF3aWBkaWpiNSUuMTEyMi0qKiw1QkxOTlNXW11cWk5GPDhIVllbW1NgZFlbYm1wdHN3d3d1bmphWlRRUFBMRkdISUZEREVJSkhDQj87OTg4NTErKCgoKSkpKiknKSorKywuLi4sLSwoJSQkJyouMjY4ODc2Njg6Oz08PDw7Ojk2NjQ2NjY1Nzc7OTg5NzUyMS8vLi0sLCwsLCoqKSkoJycnJiQkJCQkIyQlKCouMDEvLzAtKSgmJSUlJSUmJicnKCgpKSkqKyssLC0tLS0uLi0tLS0tLS0uLi4uLi4tLCwrKyoqKysrKywtLS0uLi4uLi4uLi4uLy8wMDExMjIxMjMzMzMzNDQ0NTU3Nzc4Nzc3Nzg7QElRWWRocHR0bWhhW1pTUlZdYGRrbW1saWReWFVPTEhDP0BAQEFBQUBAQEFBQUBAP0BBQUFBQEA/Pz09Pj48Ozs8P0JHTVNVVlhZWVZSTUxKTE5SVFhcYWZrcXN2d3p5d3RycXF0dnh4fX+BgYGDhYaFg393b2NWR0NAPDs6OTY0MzMyLy4qKikpKioqKikpKCgpKSgoJycnJiYmJiYlJCMjJCQkJCQkJSUlJSUlJSUlJSUlJSUmJiYmJiUmJigmJygoJyYmJycmJiUlJSUlJSUlJSUlJSUlJSUlJSQkJSYnJycnJycnJygoKCgoKCgoKigoKCgoKCgoKCkpKSkoKCgoKCgoKCcnJycnJygoKCgoKCgoKCgoKCgoKCgpKSgoKCgoKCkpKioqKikpKSkpKSopKCkpKSgoJycoKCclJiYlJCMjIiIhICAeHh8iJSgsLzQ7P0FFSElHRkVGTE5PTk1ORzcnJykqKikoKF17bWNlaXBoQCEuMjAvLiwqKSstN0FGSlJSVFheY15PRUE9TV9mZmpud3FfWVNgZWRrcnh5dW1qZFtWU1BPSkRFRkhGRERESEhHRkZGQz46ODUyKykpKSsqKywsKCgnKSssLS4tLC4sKiknJiYoKy41OTg1NDc5OTw8PTw6Ojk3NTU1NDU1NTU2NTM2NjYyMTAvLy8uLSwvLi4sKyssKioqKiclJCQkIyQkJCUpLC4yMTEyMS4rKCUjJScnJiYmJygoKCgpKisrKyssLCwsLi4uLi0tLS0uLi4uLC0uLiwrKysqKioqKyssLC0tLy4uLi4uLy8uLi8vMDAyMjMyMjEyNDMzNDU1NTY2Nzc4ODg4ODg3Nzk+RU1VXWVtc3JtaWJdW1dTVlxfY2draWppZWNbWFRPTEdFREJDQ0RDQkNDQkJBQUFBQkJCQkBAPz08Ozs7Ozk5OjtARUtQUldZWlpYU1BPTE9RU1hZXGFjaGxxc3Z5e3t4dXN1dXV3enyBg4SCgoOFhYOBenFmWUhBPDk4NzU1MjExLiwsKiopKSgoKiopKSgoKSkoKCcnJiYmJiUlJCQjIyMkJCQkJCUlJSUlJSYmJSUlJSUlJiYmJiYlJycoJicnJycmJicnJiYlJSUlJSUlJSUlJSUlJSUlJSUkJCUmJycnJycnJycoKCgoKCgoKCgnJycnJycnJycoKCgoJycnJycnJycmJiYmJiYnJycnKCgoKCgoJycoKCgoJycoKCgoKCgpKSoqKiopKSkpKSkpKCgpKSkoKCcnKCgnJSYmJiUkIyIiISAgHh4fJCYoLC4zNzs8P0FEQUBBRUtMTU1MSEM0KCgnKSkqJVV3b2xobnJwVyYrLzMvLi4sKyoqKzhAS09SUlVWVlleUUNDT15na2pnbWpWWWFeWldXY29ydHBsbmlfWVZSTkhDQENFR0ZFRkdFRkhJSUZEPzs5NC4qKi0qKi4xMS4rKCcpKywsLCwtKywrLCkpKCktMTY0MzQ1Njg4Ozo5ODg3NjQyMjIzMzMzMzIyMjIyMTAvLy0tLS0tLi4uLiwtLSoqKiooJiUlJSQkJCQlKCouMTAwMjEwLisoJiUmJiYmJicoKCgoKSorKysrLCwsLC4uLi4uLi0tLy8uLiwtLS0rKysrKioqKisrLCwtLS8uLi4vLy8vLy8wMDExMjM0MzIzMzMzNDQ1NTY2Njc3ODk5OTg4ODk5ODtBSVFbYm5yc29sZWBbW1lYWV9jZ2lrampoZV5bWFNQSkdFREVGRUNDQ0JCQUFBQUJCQkJBQD89PDs6Ojk5OTk6PkVITlJVV1taWVZTUVFSVFZYW11gYmJobXBzd3h8fHp4dXN2eHx8foKFhIKAgoJ/fnlyaVtKPjg3NTQyMjAvLi0rLCoqKSkoKCkpKSkoKCkoJycnJiYmJSUkJCQkJCQkJCUlJCQkJCUlJSUlJSUlJiYmJiUlJycnJycnJyYnJyYmJiYnJyYlJSUmJSUlJSUkJCQkJCQlJSUlJSUlJiYmJyYnJygoJycnJScoJyYmJiYmJiYnJyYoJycnJycnJiYmJSUlJSUlJiYmJiYlJSYmJycnJycnJycnJycnJygoKCgoKSgoKCoqKSkoKCkpKSgoKSkpKScoKCgoKCgnJycmJCMjIyEgHh4fICQlKiwtMTQ2Nzo8PTs+QEJJSkxKSkY+MionKCkoJVN5b2NhZ3NvXSQnLy8uLS0rKyoqKiwvQktNUlNTUVBVW1pMRE5ia29vZXJqX1toZWFhTVdnbG9ta2pnY15dWE5HQj9AQUNFRkRERUhJSUhGREJAPTcvLCwvLzAzNjgyLionKCgpKSssKywtLS4uKystLTAwMDAxMTIzNjY3NjU0NDExMTAxMjIyMjEwMC4vLy8vLy8uLi0tLi4vLzExLy4sKikpKikoJyYmIyUkJCUpLTEzMjMzMzAvLCkmJSUlJicnJygoKCoqKyssLCwsLC0uLi4uLi8uLi8vLy8uLi0rKiorKyopKSsrKysrKywuLy8wMTExMTIyMjIyMjIzMzMzMzQ0NDU1NjY2NjY2Njg4Nzc5OTg4ODc3Nz9GT1pjaXF1c25qZWBeW1lYXGBlZ2hrbGlkYFxXVVBLSEhHRkVFQ0NCQT8/QEBCQkFBQUA/PTw7Ojk4Nzg4OTxAREpPVFdZW1tZVlRWVlhZW1xdX2RkZ2hscHJ0eHx8e3h1dnh6fX+ChIWBgH9/fnx5cmlaSTs1NTMxLy4tLCsrKyspKSkpKCgpKSkpKCgpKCcnJyYmJiUlJCQkJCQkJCQlJSQkJCQlJSUlJSUlJSUlJiYlJScnJycnJycmJycmJiYmJycmJSUlJiUlJSUlJCQkJCQkJSUlJSUlJSYmJicmJycoKCcnJyUlJSUlJiYmJiYmJiYmJycnJyclJSYmJSQkJCQlJSUlJSUlJiYlJSYmJiYnJyYmJiYmJicnJycoKCYnKCgqKikpKCgpKSkpKSkpKSknKCgoKCgoJycnJiMkIyMhICAfHyAiJSgrLTAyMzM0Nzo7PkJERklLS0pGQjYqJykpJkd8b2BfZnFxZTcgLDAuLS0tKysqKiotPUdER1FUV1JPUVlZUkpTYmpxXm92YmVvaGFgYlJQXGRoamhkX2BiXllRR0JAP0BCQ0NEREVGRkZGRURCQD03Ly0vMTM0MjU0MjArKSgoKCgqKiosLzEyMjAwLi4tLS8vLi4vMDIyNDExMTEwMTEwMTIyMjIxMDAvLy8vLy8vLi4uLS4uLy8xMS8uLiwsLCopKCcmJiQlJCQkJystMjU1NTQxMC0rKCYlJSYnJycnKCgqKisrLCwsLC0uLi4uLi4vMDAxMTAwMDAvLSsrKysrKiorLCwsLCssLi8vMDExMTEyMjIyMjIyMjIyMjIzNDM0NTY2NjU1NTU3ODc3OTk4ODg3NjY2PENOWGFpcXR2dHFqZ2JgXVtaXWRna2poaGZjXllWVFBLSEdGRURDQkFBQUJCQkJCQkFAPz08Ozo5Nzc4ODk8QUVKT1FVV1pbW1tZW1taW1xfYWNjZWZmaGtucXR4e3x6d3h4e3+AgoOEgn98e3t5dXFnXk09MjAwLi0sLCsrKysrKCgoKCgoKSkpKSgnJycnJycmJiUlJSQkJCQkJCMjJSUlJSQlJiUlJSYmJSUkJCUlJSUmJicnJycnJSgoJycmJicnJycmJiUlJSUlJSQkJSUkJCQkJCQlJSYmJiYmJicmJycmJicnJSUlJSUlJiYmJiYmJiYmJiYmJSYlJSUlJCQkJCQkJCQkJCQkJCQlJSUlJiYmJSYmJiYmJicnJycnJycoKSkpKSkpKioqKSgoKSkoJycnKCgnJiYmKCckJSMiIiIgICAgICMnKS4vMTIyMzc6PUBCQ0ZISk1MR0E0KSgqJzZ1dmtranBxajgcJS0uLS0tLSsrKSkqMEZDQklRU1FQT1NSTVhZW2BrXUtub3ZuaWdkXllZVlJZYWJlYFxdW1tcU0tGQT8+P0BDRkZFRENFRUNCQUA8NzIuMDQ4NzItMTIxLSwqKSkoKSgpLC8yNTU0NDIuLiwuLi0tLy8vLi8vLy8vLy8wMDEzMzMzMjExMS4uLy8wMDAwLi4tLTAwMDAwLy4tLCwqKSgnJiQlJSQkJCQoKy4yNDU1MjExLispJyUlJycoKCgpKysrKy0tLS0uLi4uLi4uLjAwMTExMTIwMC8sLC0tLS0sLC0tLCwsLC4uLy8xMTExMTExMTIyMTExMTAxMjIzNDQ0NTU0NDQ0NTY2Njg4ODg4ODg4NjU5QkxWX2pzeHx6d3JrZ2NgWlhdYWRnaGhqaGRgXFlWUUxJR0ZFRENAPz9CRENERUNCQUA/Ozs7Ojg5Ojo6PD9DSE5TV1pcXl5fX19fXl5fYmRmZmZmY2JlaGtvcnZ6fHx6ent9gYOCgoF+e3l2dHNuaV5RQTIuLi0rLCwtKysqKigoKCgoKCkpKSkoJycnJiYnJyYlJSUkJCQkJCQjIyUlJSUlJiYlJSUmJiYmJyclJSUlJiYnJycnJicoKCcnJiYmJicnJiYlJSUlJSUkJCUlJCQkJCQkJSUmJiYmJiYnJicnJiYmJiUlJSUlJSUlJSUlJSUlJSUlJSYkJCQkJCMjIyMjIyMjIyMjIyMjJCQjIyQkJCQlJSUlJiYmJiYnJicnKCkpKSkpKSkpKSgoKCgoKCcpKSgoJyYmJicmJyUkIyMiIiAgICIiJyksLjAxMzU4PEJDRERGSkxPTEdBMigoLCxsfGtrcXJubEEaIyotLS0tLS0rKyopKS0vOUZMUVBQUFBLTFBXXmBbYl5XX2Vwcm9paWVjXVtYXWBhYV1cWlVYWFNPTEU/PD0+P0NDQkFBRUZCQD9BQkE5MC4xNTUwLS8yMTEvLiwpKSkrKy8tMDM1ODgzMC4sLCwtLS4uLi0uLS0uLi0wLzAxMzMzMzMzMjIwMDAwMTExMS4uLzAwMDAwMC8uLCsrKikoJycmJSUkJCQkJSksMDI0NDIyMS8tLCgnJSUlKCgoKSsrKystLS0tLS0uLi4uLi4wMDAwMDAwMDEwMTEvLS0tLi4tLSwsLS0tLS4vMDAwMDAwMTExMTAwMTEwMTIyMjM0NDQ0NTU0NDQ0NjY3Nzc3Nzc3NzQ0NDhATFdhanV8fn16dnBpZV9ZV1tdY2ZmaWppZmJcWlZRTElHR0ZFQkJERkdGR0dFQ0JAQD89PDs5Ojo6Oz1BREhOU1daXF9fYGBhYWBgYWNlZ2dnZmNgYGJkam9zeH18fHp6e36AgYCAfXh2dHJxbWhfVkY2LS0tKysrLCwsKysnJygoKCgoKCkpKCcmJiYmJicmJSUlJCQkJCMjJCQlJSYmJiYmJiYmJycmJiYmJiYmJiYmJyclJSUmKCgnJygoJycnJycmJiYkJiYmJSUlJSUlJSUlJSUlJiYnJyYmJiYlJSYmJSUmJiQkJSUlJSQkJSUlJSUkJCQkIyMjIyMiIiIiIiIhIiIiIiIiIiMjIyMkJCMjJCUlJSUlJSYmJiYmJygoKCcnKSkpKSkpKSkpKSgoKSkpKScnJigoJiYnJSUkIiIgICEjIycpKisuMDM5PEBCRkpNTk5PT0pGQTEoKSpbf3dsbXZzb1AgICMsLCwsLCwsLCwqKisxNTpASE9ST05LSEtLVWFkWFFaZWlnYWNraFtYZGFfX19cX19cWllTUU9SUk5IQkA+PDs7PTw8PT89PT09P0RLQTEqKi4wLi8vMzMyMDEvLCotMDExMDIxNDg4My8rKikpLCssLCwsLC0uLi4uLy8vMDIxMjMyMzQ0MzMyMjExMDAvLy4uMDAxMTAvLiwsKysqKCcnJiYlJCUjJCMmJysrLzAxMTEvLy0rKScnJygoKCkpKisrKywsLCsrKywuLi4tMDAwMC8vMDEwMDExMDAuLi0tLi4tLSwsLS0tLSwuLi4uLzAwLy8vLzAwMDAxMTIyMjIzMzQ0MzMzMzQ2NjY2Njc3NzY1NDQ0N0BMV2NsdnyBf3x2cmllXFVTWFxhZWlpamlmYl9bVlJNSUlIR0dGR0hKSkpKR0VEQ0NAPj08Ozs9PT8/QUVITVJWWl5gYWNjYmJhYmVkZWZmZmZjYF1bXGRqbnN1eXt7enp7fn6Bfnl3dXJvbmxpY1lNPS4qKiorKyssKykpKCgoKCgoKCgpKSgnJycmJiYmJiUlJSQkJCQjIyQkJSUmJiYmJiYmJicnJiYmJiYmJiYmJiYmJSUlJicnJycoKCcnJycmJSYmJiUmJiUlJSUlJSUlJSUlJSYmJycmJiYmJiYmJiUlJSUjIyMlJSUkJCQkJCQkIyMjIyIjIyIiIiEhISIiIiEhISEhISEiIiEhIiIiIiMkJCQlJSUlJSYmJignJycnJykpKSkpKSkpKSkpKSkpKSkqKioqJycnJyYkJCMhISEhIiQnKSorLS8xNj5CRklNUFJSVFJKRj8uKCk5enJpbnd3cVQhICImLCwrKywrKywsKioqLzA1PkZJTExJSkxNTFhiY1lFSFNUX2ZsZGRhX2BiaWtlXl5fXl1aUlBRU1JMRUJBPjw4Nzc4ODk4OTk5OTtCUEkxKiksLTAyMjQyMS8wLy8wMjM0NDUyMjIzMzAtKikqKikrKystLS0tLi8vLy8wLzAxMDAwMjM0NDMzMzMyMjExMDAuLi8vMDAvLi8tLSwrKikoKSgmJiUlJCMkJCQnKCotLi8wMTAwLy4sKScoKCkoKCkqKikrLCwuLi4uLy8uLS8vLy8uLiwtLy8vLy4uLi4tLi4uLS0sLCwsLCwsLS4uLS4vLy8vLy8wMDAwMDAxMTAwMDAyMzIyMjIyMzMzMzM0NTU0NDQ0NDY5QExZY3B2e3t9fXdxaF9WUFFXXGFlaGpqbGdkYVxWUk1MS0pKSktMTE1NTElHRkRDQD89PDw8PT0/P0NHSE1SVlldX19jZGRlYmRkZWVmZmZmY11dWlhbYWZscHN5ent7eXp+fn14dnJwbW5samVeVEMxKykqKSoqKyooKCcnJygpKSgnKSkoJycnJycmJiUlJSUlJSUlJCQkJCUlJiYmJiYmJycnJycnJiYmJiYmJSUnJyYmJycnJycnJycmJiYmJyclJSYlJSUkJCUmJSUmJiUlJSUlJiYmJSUnJyYmJSUlJSQkJCQiIyMjJCQkJCMjIiIiIiIiISEhISEgISEhISEhICEgISEhISEeHyMjIiIhIiMjJCQkJSUlJSUmJyYmKCgoKCgoKSkpKSkpKSkpKSkpKioqKigoKCgmJSQkIiIhISEkKCkqKysuLzU9QUVKU1VUVFZRSkU7KikoVHVxbXN5dGUqICIhJSosLCoqKissLiwrKysqMz1CSEtHSEhGREZQX1NGS1NRVGJnZWlqZl5fXGJqZFpYW1xcWlNQVFZTUUxDQj87Ojc1NDQ1NDU2ODg6QUVAOCwpKywuMzM0NDIyMTQ1NjY1Njc2MzEwLy8sKyopKCgoKCkrLS0tLS4wLzAxMS8vLy8wMDAxMzMxMjIzMzMzMTEwLywtLy4uLy0uLC0sKysrKikpKCYkJCQkJCMkJCQnKCssLC8wMjIxLy0rKikpKSoqKioqKissLi4wMC8wLy0uLy8vLy8uLi4uLy8vLy4uLi4uLi0sLCwrKysrLCwtLS4uLi4vLy8vLy8wMC8vLy8vLy8vMDAxMjIyMTExMTExMjMzMzQ0MzQ1NzhBTlllbnd6e3x5dW9lWFBQUVRaYmZnamtqZ2RiXVhSUE9NT01OT09OTkxJSEZFREBAPz49PD4+Pj5BRUlOUVVbXV1hY2VmZmZnZmZnZ2ZmZGJfW1VSUVZeZGhrcnZ6fHp7fHp6eHVxcmxsa2lmX1hKOiwpKyopKSkpKCgnJycoKSkoJykpKCcnJycnJiYlJSUlJSUkIyQkJCUlJSYmJiYmJiYmJiYnJyYmJiYmJiUlJycmJicnJycnJycnJiYmJiYmJiYmJSUlJSUlJiUlJiYlJSUlJSYmJiUlJSUmJiUlJSUkJCQkIyIiIiMjIyMiIiEhISEhISAgICAgHyAgICAgISEhICEhISAgHyEkJCEhISIjIyQlJCQlJSYmJicpKSgoKCgoKCkpKSkpKSkpKioqKioqKiooKCgoJyUkJCMjIiIjJigpKSorLi40OD5IS1JWVVVSS0hEOSkoLGtzanF4c2k3HSQiIycqKysqKikrLC4vLCosKzVBR0dJSUZAPzs9RlJKP0lSWWtoZmhoY2VnXFBdZ2FYVFdYWlpWUVVTTU1KQ0NAPT06NzU1NTM0Njg4PD4+PjwwKSkrLTAxNDQ0MzQ2ODg4NzU0MzEvLS0tLCsqKSgoKCgoKSosLi4vMC8wMTEvLy8vLy8vMDExMTMyMzQ0NDUzMjAvLCsuLi8tLS0tLCsrKiorKygnJyUkJiQkJCQjJiYoKisuMTMzMjIwLy8sKiorKysrLCwsLjAwMDAvMDExMC4vLy8vLi4uLi8vLy8uLi4uLy8tLCwsLS0tLS4uLS0uLi4uLy8xMTExMDAvLy8vLy8vLy8vMDAyMjExMjIyMjIzMzM0NDU0NTc2OkNOWWNqc3l5eXVyal9WT1NSV1xiZ21rbGtpZWJcWFdSUVBQT1BQTk5KSEdFRERCQEA/Pz0/P0FBQ0VHTlFVW11eYmRnaWhnaGdnZ2dmZWRhXVhST05PUllhZ2xwdHh7enl6enh4d3NtbWxpZ2RcU0M0LSopKCgnJygogYCBgICAf39+fn5+fn59fXx8fX1+gICBgYGBgYGBgICAgH9/f3+AgICAf35+fn9/fn5+fn5+fX19fX19fX19fX5+fn5+fn5+f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fXx7enp6enl5eXl5eXl5eXp9gIKFhomIiYiIiImJiIiGhYOCf39/f4GCg4OCgHx7enp6enp8fX+Bg4OFhYSCgH9+f4GCgYGBgIGBg4aHh4SCg4iEhIKAfn5+fn5+fn5+fn+AgYODgoGBgYGBgYGAfn17fHx7fX5+fn5+fn59fX1/gIGDhISFhoeHg4F/fn19fX18fHt7e3t8fHt9fHx9fn9/gICAgIB/gIB/fnx8e3x+f35+f3+AgICBgYGDg4OAfXt4d3l6fn+AgICBgYGBgH59fH1+fn5+f3+ChIF/fXyBgIGAgIB/f35+fn5+fn19fHx9fX+AgIGBgYGBgYGAgICAf39/f4CAgIB/fn5+f39+fn5+fn59fX19fX19fX19fn5+fn5+fn5/f39/f39/f35+fn5+fn5+fn5+fn5+fn59fHt6enp6eXl5eXl5eXl5en2AgoeHiYiJiIaGh4eGhoWEgoF+fn5/gYKDg4KAfHt6enp6ent9foGCg4SFhIKAf35/gYOCgoKAgYGDhYaHhYODhYWHhoF/f39+fn5+f39/gIGBg4OCgYGBgYGBgYB+fXt8fHt9fX1+fn5+fn19fX+AgYOEhIWGh4eDgX9+fX19fXx8e3t7e3x8fH19fX1+f3+AgICAgH9/f399e3t7fH5/fn5+foCAgIGBgYKCgX99enh3eXp+f4CAgIGBgYGAfn18fX5+fn5/f4KEgX59e4GAgYCAgH9/fn5+fn5+fX18fH19gICAgYGBgYGBgYCAgIB/f39/gICAgH9+fn5/f35+fn5+fn19fX19fX19fX1+fn5+fn5+fn9/f39/f39/fn5+fn5+fn5+fn5+fn5+fn18e3p6enp5eXl5eXl5eXl6fYCCh4iIiIiHhISEhISEg4SDgH5+fn+BgoODgoB8e3p6enp6e31+gIGCg4SEg4GAf4CCg4ODgoF/gYKDhYWFgX97fYOGg4F/f35+fn5+f3+BgoKDg4KBgYGBgYGBgH99e3x8e319fX5+fn5+fX19fn+Bg4SEhYaHh4OBf359fX19fHx7e3t7fHx9fn5+fX5/f4CAgICAf39/fnx5eXt8fn9+fn5+gICAgYGCgYF/fn17enl6e35/gICAgYGBgYB+fXx9fn5+fn9/goSBfXt5gYCBgICAf39+fn5+fn59fXx8fX2AgICBgYGBgYGBgICAgH9/f3+AgICAf35+fn9/fn5+fn5+fX19fX19fX19fX5+fn5+fn5+f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fXx7enp6enl5eXl5eXl5eXp9gIKHiYiHh4WDg4KCg4ODhIJ/fn1+f4GCg4ODgHx7enp6ent7fX6AgYKDhIODgYB/gIKDhIOCgX+BgIODhISAe3R2fYKEg4CAfn5+fn+AgIKDhIODgoGBgYGBgYGAf317fHx7fXx8fn5+fn59fX19foGDhISFhoeHg4J/fn19fX18fHt7e3t8fH1+fn59fn9/gICAgIB/fn59fHl5e3x+f35+fX2AgIGBgYOBgoB/fXp6eXp8fn+AgICBgYGBgH59fH1+fn5+f3+ChIJ9fHqBgYGAgICAgH9/fn5+fn19e3t9fn+AgICBgYGBgICBgYCAf39/f4CAgIB/f39/fn5/f35+fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn5/f319fn5+fn5+fn5+fn5+fn59fHx6eXl6enl5eXl5eXl5e32Ag4WIh4aEgoGBgYKDhISEgn5+fX1/gYKEhIOBfnt7ent7enp7foCBgYKEhIOBgICCg4ODgoKBgYGBg4OFhIB5c3N2gIaHgX5+fn5+f4CBgoODg4GBgYGBgYGBgoGAfXx9fXx9fHx8fX5+fn19fX1+gIKDhYWGhoeEgn9+fn19fXx7enp7fH19fn9/f39/gIB/f39/gIB+fXx7eXp7fH5+fn19foCAgYKCg4KBf319enp5enx9gICAgIGCgoKAfn58fn5+fn5+gIKDgX56eYGBgYCAgICAf39+fn19fX18fH1+f4CAgIGBgYGAgIGBgIB/f39/gICAgH9/f39+fn9/fn5+fn19fX19fX19fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn18fHp5eXp6eXl5eXl5eXl6fYGDhoiFhIKAgICBg4SFhoWCfnx8fX+BgoSEg4J/fHt6e3t7e3x+f4GBgoOEg4GBgYODg4ODgoOCgICCgoSDgHl0dHV9hYeBfn5+fn5/gIKCg4OCgYGBgYGBgYGCgYB9fH19fX18fHx9fn5+fn18fX6AgoOFhYaFhoWDf35+fX19fHt7e3t8fn6AgICAgICAgH9/f39/f358enl5ent8fn5+fX1/gICBgoKDgoF/fnx7enp7fH2AgICBgYKCgYB+fnx+fn5+fn6AgoSBfHl5gYGBgICAgIB/f35+fHx9fX19fn9/gICAgYGBgYCAgYGAgH9/f3+AgICAf39/f35+f39+fn5+fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fXx8ent7enp5eXl5eXl5eXl8gIKEhYKBgX+BgYOEhoaHhIF9fHt9f4GChISDgoB9e3p7e3t7e31+gIGChISDgYKCg4ODg4ODg4F/f4GBhIN/eXZ1dnqAhIB/fn5/f4CBg4KDg4GAgYGBgYGBgYKBf318fX19fXx8fH1+fn5+fXx9fX+CgoSFhoWHhYN/fn59fX18e3t7fH1/f4GBgYGAgICAf39/f39/fHt4d3h5e3x+fn18fX+AgIGCgoSDgX9+fHt6eXt8fYCAgYGBgoKAf319fH5+fn5+foGDhIB7eXmBgYGAgICAgH9/fn58fH19fX1+gH+AgICBgYGBgICBgYCAf39/f4CAgIB/f39/fn5/f35+fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn59fHx6e3t6enl5eXl5eXl5eXt9gIKCgIGBf4KChIWGhYaBgHx7e31/gYKEhIOCgH17ent7e3t6fX5/gYKDhISBgoKDg4ODg4ODgoCAgICDgn95eHd3enyAgYB+fn+AgIGCgoODgYCBgYGBgYGBgoB+fXx9fX19fHx8fX5+fn59fX19f4KChISFhoeFg39+fn19fXx7e3t8foCAgYGCgoCAgIB/f39/fn57enl4d3l7fH5+fXt9f4CAgoKDhIOBgH99fHp5e3x+gYCBgYGDg4GAfHx8fn5+fn5+gYOEgXt5eYGBgYCAgH9/fn59fXx7fX19fn9/f4CAgIGBgYGAgICAgICAgICAgICAgH9/f399fX5+fn5+fX19fHx9fX19fX19fX19fn5+fn19fn5/f35+fn5+fn5+fn5+fn5+fn5+fn19fHt7e3l5eXl5eXh4eHh5enyAf4GAgoKCg4OGh4aFhIJ+fHt7fH9/gYODg4OBfnx7enp6ent9f4CBgYKEhIODg4SEg4ODg4OBf35/gYGBgX99fHt6e3+CgX9/f4CBgoOCg4KCgH+AgICBgYGBgH58e319fX19fXx9fn59fX19fH6AgYODg4SFhoSCgH1+fn18fHt9fn9/gIGDg4KBgIB/f4B/f39+fHl4d3d4enx9fX18e3x/f4GCgoWFg4KAfnx7e3t8fX+BgYKCg4OCgX57en1/fn5+fn5/goSBe3l4gYGBgICAf39+fX18e3p8fH1/f39/gICAgYGBgYCAgICAgICAgICAgICAf39/f35+fn5+fn59fX18fH19fX19fX19fX1+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fX18fHt7enl5eXl5eHh4eHl6fH9/gYCDhISEhIaHh4WEgX18e3t8f3+Bg4ODg4J/fHt6enp6e31+gIGBgoOEhIODg4ODg4ODg4B/fn+BgYGAfnx7fHl6fYKCgYCAgIKDg4SCgoJ/fn+AgIGBgYGAfnx7fX19fX19fH1+fn59fXx8fYCBg4ODhIWGhIKAfX5+fXx9fX6AgYGAgoKCgoCAgH9+f35/f357eXh2dnh6fH19fXx7fH9/gYKChYWDgoB+fHt7e31+f4GBgoKCgoGAfHp6fH5+fn5+fn+ChIF8eXiBgYGAgIB/f319fHx7enx8fX9/f3+AgICBgYGBgICAgICAgICAgICAgIB/f39/f39+fn5+fX19fXx8fX19fX19fX19fX5+fn5+f35+f39+fn5+fn5+fn5+fn5+fn5+fn59fXx8e3t6enl5eXl4eHh4eXp7foGCgoSFhYWFhoeHhYKAfHt7e3x/f4GDg4ODgoB9e3p6enp6fH6AgYCBgoSEhISEhIODg4OBf318fX9/f359fXx+fXx+g4SCgYCBg4SDg4KBgX5+f4CAgYGBgYB+fHt9fX19fX19fn5+fn19fHx9f4GDg4OEhYaEgoB9fn5+fX5+f4CCgoKCgoKBf4CAgH58fX9/fXp5d3Z2eHp8fX19fHt8f3+BgoKFhYOCgH59e3x8fX9/gYGCgoGCgX57eXp8fn5+fn5+f4KDgn17eYGBgYCAgH9/fX18fHp6fHx9gH9/f4CAgIGBgYGAgICAgICAgICAgICAgH9/f39/f35+fn59fX18fHx9fX19fX19fX19fn5+fn5+fX1/f35+fn5+fn5+fn5+fn5+fn5+fn19fHx7e3p6eXl5eXh4eHh5ent+gYKEhYWFhYWGh4eFgX58e3t7fH9/gYODg4ODgH17eXl6enp7fn+AgIGChISEhIODg4ODg4B+fHt8fn5+fX19foGAfn2BhISBgYKDhIOEgoKAf31+gICBgYGBgH58e319fX19fX1/fn5+fX18e31/gYODg4SFhoSCgH1+fn5+fn9/goOEg4KBgYB/gICAf3x9f399enh3dXZ4enx9fX18e3x/f4GCgoWFg4KAfn18fHx9f4CCgIKDgoCAfHl4enx+f39/f35/goODfXt6gYGBgIGBgH5+e3x7e3t7fH5/f39/f4CAgIGCgoCAgICAgICAgICAgICAgICAgH9/f399fX19fXx7fX19fX19fX19fX19fX19fn5+fn5+fX1+fn19fX19fX5+fn5+fn9/fX18fHx8e3t6eXl5eHh4eHl7fH6Cg4SGhoaGhoWGhoR/fXt6e3t9fn+AgYKCg4KBfnt6enp6e3t9foCAgIGDhISEg4ODg4OCgH98fX1+fn59fYCDh4iCfX6DhIOCg4aGg4KCgX59fHx/gYKCgYGAfn18fHx9fX19fX1+fn9+fHt7fX6Bg4ODhIWGhYOBfn9/f4CAgYKDhISDgYCAgICAgH9+fH1+fn16eXZ1dXd7fH19fHx6fH+AgIKChYWDg4B/fn19fn5/gIGBg4GAfn16eHh6fX9/f39/fn+BhIJ+fHqBgYGAgIB/fn17e3t7e3t9fn+Af39/gICAgYGBgICAgICAgICAgICAgICAgICAf39/f319fX18fHt9fX19fX19fX19fX19fX1+fn5+fn59fX5+fX19fX19fn5+fn5+fn59fXx8fHx7e3p5eXl4eHh4eXt8foKEhIaGhoaGhYaGg398e3t7e3x+f4CBgoKDgoKAfHt7enp7e3x+gICAgYKEhISDg4ODg4J/fnx8fn5+fn5+gIOGhoN+e3+EhYSGh4aEgoKBfnx7fH+BgoKBgYB+fXx8fH19fX19fX5+fn59e3t8foGDg4OEhYaFg4F/f39/gIGCg4OEhIOBgICAgICAf359fn5+fXp4dnV1d3t9fn18fHp8f4CAgoKFhYODgX9/fn9+f3+BgoKCgYB+fHh2dnt+f39/f39+f4GEgoB9e4GBgYB/f359fXt7e3p6e31+f4B/f3+AgICBgYGAgICAgICAgICAgICAgICAgIB/f39/fX19fXx8e319fX19fX19fX19fX19fX5+fn5+fn19fn59fX19fX1+fn5+fn59fX19fHx9fHt7enl5eXh4eHh5e31/goSEhoaGhoaFhoWCf3x7fHt7e31/gIGCgYODgoB8e3t6ent7fH2Af4CBgYOEhIODg4OCgX9+fX1/f35+gIB+gIKCgH17fIOFhoaFhISBgoB+fXt+f4GCgoGBgH59fHx8fX19fX19fn5+fn17e3x/goODg4SFhoWDgX9/f3+AgYKDg4SDg4GAgH9/f39/fn1+fn59enh1dHR3e35/fXx8enx/gICCgoWFg4OCgIB/f3+AgIGCgoKBgX58d3Z3e39/f39/f35/gYOCgH17gYGBgH9/fn19ent6enp7fX5/gIB/f4CAgIGAgICAgICAgICAgICAgICAgICAgH9/f399fX18fHx7fX19fX19fX19fX19fX19fn5+fn5+fX1+fn19fX19fX5+fn5+fn19fX18fH19e3t6eXl5eHh4eHl7foCChISGhoaGhoWGhYJ+fHt7e3t7fH+AgYKBg4SDgX17enp6e3t8fX9/gIGBgoSEg4ODg4KAf359fYCAfX1/gH5+gH9/fXp6gYOEhISEgoGBgIB+fX9/gYKCgYGAfn18fHx9fX19fX1+fn5+fXt6fH+Bg4ODhIWGhYOBf39/gIGBgoSEhIODgYCAfn5+fn9+fX5+fn16eHV0dHd7fn99fHx6fH+AgIKChYWDg4KAgX9/f4CAgYKCgoGBfXx4dnh7f39/f39/fn+Ag4OCf32AgICAf35+fXt7enp6e31+fn5/gICAgYGBgYCAgICAgICAgYGBgYGBgYGBgYCAf39+fX19fHt7e3t8fHx8fHx8fX19fX19fX19fX5+fX19fX19fn59fX19fX19fX19fX19fX19fHx8enp5eHh4eHd4eXx/gIOFhYaGhIWFhYSDgHx8fHx8fHx8fn+AgoGDhIOBfnx6enp7e3x9fX6AgYCChISDg4KBgYB/fn5/gH9+fn6Af39/fn18e3l+gIKAgYJ9eHh7fX18f3+BgYOCgoF+fHt7e3x8fH18fn19fn59fXt8foGCg4ODg4aFg4B/f4CBgoKDhISDgoKBf35+fn5+fn1+fn5+e3h1c3N0d3t8fX18e3t9gIGBgYOGhoSEgoKCgoCAgYGBgoOEg4F/end2eHx+f39/fn5+f4GEhIF+eoCAgIB/fn18e3t7e3p7fn5+f3+AgICBgYGBgICAgICAgICBgYGBgYGBgYGBgIB/f359fn18e3t7e3x8fHx8fHx9fX19fX19fX19fn59fX19fHx9fn19fX19fX19fX19fX19fX18fHx6enl4eHh4eHh6foCBg4SEhYaEhYWFhIF+fHx8fHx8fHx+f36AgYOEg4J/fHt6ent7fH19f4CBgIKEhIODgoGBgH5+fn5+fX1+gICAfn59fHp7eXt9gX9/fHNwcXR4enx/f4GBg4ODgX58e3x8fHx9fXx+fX19fXx8e3x+gYKDg4ODhYWDgH9/gIGCg4SEhIKBgYF/fn19fn5+fX5+fn56d3Ryc3R3e31+fXx7e32AgYGBg4WFhISEhIODgoGBgYGCg4SDgX56d3Z5fX9/f39+fn5/gIOEgX56gICAgH9+fXx7e3t7e3x+fn5/f4CAgIGBgYGAgICAgICAgIGBgYGBgYGBgYGAgH9/fn1+fXx7e3t7fHx8fHx8fH19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fHp6eXh4eXd4eXt/gIKCg4WGhoSFhYWEgX58fHx8fHx8fH1+foCBg4SDgoB9enp6e3t7fH1/f4CAgoSEg4OCgX9/fX1/fn18fX5/gH9+fXx6eHl6eHyCgX54c3BwcnR3fH9/gYGDg4OBfn18fX18fH19fH59fX19fHx7fH6BgoODg4OEhIKAgH+AgYKDg4ODgoGBgH59fHx9fX59fn59fXl2c3Jyc3d7fX59fHt7fYCBgYGDhYWEhISEg4OCgYGBgYKEhYOBfXl2d3l+f39/f35+fn9/goWDf3uAgICAfn59fHt7fHx7fX5+fn9/gICAgYGBgYCAgICAgICAgYGBgYGBgYGBgYCAf39+fn59fHt7e3t8fHx8fHx8fX19fX19fX19fXx8fX19fX18fHx9fX19fX19fX19fX19fX19fHx8enp6eHh6eHl7fH+Cg4OEhIWGhIWFg4F/fHx8fHx8fHx8e31+gIGDhIODgX16enp7e3p7fn9+gICChISDg4KBfn59fn9/fHx9fn+Afn19fHp4eHl2eYCAf3p2c3NydHh8f3+BgYODg4F+fn19fXx8fX18fn19fX18fHp7foGCg4ODg4SEgoB/gIGCgoOCgoKBgIB/fXx8fHx8fn1+fnx8eHVycXFyd3t+f318e3t9gIGBgYOGhoSEhISEhIKBgYGBgoSFg4F9eHZ3eX1/f39/fn5+f3+ChYN/fICAgIB+fXx8e3t8fXx9fn5+f4B/gICBgYGBgYGAgICAgICAgIGBgYGBgYGBgICAgH5+fn18e3p6e3t8fHx8fHx8fH19fX19fX19fX19fXx8fHx8fXx8fHx9fX19fX19fX19fHx7fHt7enp5eHh3eXx9gYODg4SFhISEhYWEgX9+fHx8fHx8fHx8fX6AgIKCg4OBfnt7e3x8e31+f3+AgYKEhYSDgoB+fX1+f4B8fH1+f39/fHt7enl5d3Z2fX+CgX13dHV3en1+gICBgoODgX59fHx8fHx9fX19fX19fXx7e3t9gIGDg4ODg4OCgH+AgYKCgoKBgYGAgH18e3p7fH1+fn19fXp4dXNxcXJ2en1+fXx6fH6AgICBg4WFhISEhIODg4KBgYODhIWDgHt4dnh5fX9/f39+fn5/gIOFhIB8gIB/f359fHt7e3x9fX1+fn5/gICAgIGBgYGBgYCAgICAgIGBgYGBgYGBgYGAgICAf359fHx7enp7e3t7fHx8fHx8fX19fX19fX19fX5+fHx8fHx8fHx8fH19fX19fX19fX18fHt8e3x6enl4eHd5fX+BhIOEhYWEhISFhYSBfnx8fHx8fHx8fH19fn+AgoKDg4F+fHt7fHx6fH1+f4CBgoOFhIOBf359fn+AgX9+fn5+fn58enp7enp3d3Z5fYGBfXh3eHp7fX6AgIGCg4OBfn18fHx8fX19fX19fX18e3t6e32AgIODg4ODg4J/gICAgYKCgoGAgH9+e3t6eXt9fn5+fX19enh1cnFwcnZ6fX59fHt8foCAgIKDhYWEhISEg4ODgoGBgoKEhYOAe3h2eHp/f39/f35+fn+Ag4WEgHyAgH9/fX18e3x8fH19fX5+fn+AgICAgYGBgYGBgICAgICAgYGBgYGBgYGBgYCAgIB/fnx8e3p6enx8e3t8fHx8fHx9fX19fX19fX19fn5+fnx8fHx8fHx8fX19fX19fX19fXx8e3t7e3p6eXh5eHt+gIKEhIOEhISEhISEhIF9e3x8fHx8fHx8fX1+f4CCgoODgX98e3t8fHt8fX5/gIGCgoSEg4B+fn1/f4GBgIB/f39+fnx6ent7enh4dnd7gH56eXp7fHx8fYCAgYKDg4F+fXx8fHx9fX19fX19fXx7e3l6fYCAgoODg4ODgoB/gICBgYGBgX9/fnx5eXh5e35/fn59fXx5d3RxcHBzdnp9fnx7e31+gICAgoOFhYSEhISDg4KBgYGCgoOEgn97eHZ4e39/f39/fn5+f4CDhYSAfICAfn59fHx7fX18fX19fn5+f4CAgICBgYGBgYGAgICAgICCgoKCgoKCgoKCgICAgH9+fHx6eXp6e3t6enx8fHx8fH19fX19fX19fX1/f35+fHx8fHx8fHx9fX19fX19fX19fHx7e3t7enp5eHp4e3+AgoWFg4SEhISEg4OCf317fHx8fHx8fHx9fX5/gIKCg4SBf3x7e3x8ent8fn+AgYKCg4SDf31+fX5+gH9/f39/f31/fXt6fHx6eHh2d3p9fXh7fH18ent9gICBgoODgX59fHx8fH19fX19fX19fHt7eXp9gH+Cg4ODg4OBgICAgYGBgYF/fn18fHl4d3l7fn9+fn19e3l3dHFvcHJ2en1+e3p8fX6AgICCg4WFhISEhIODgoCBgYGBg4SBf3t4dnh8gH9/f39+fn5/gIOFhIB8f35+fX18fXx+fn1+fX5+fn9/gICAgIGBgYGBgYGBgICBgYKBgYGBgYGBgYGBgYF/f359fHt6e3t7e3t7e3t7e3x8fHx9fX5+fn59fn5+gH98fHx8fHx8fH19fX19fX19fX17e3t7e3t6enl5eXp9gIGDgoOEhISEhIODg4F9fHx8fHx8fX18fXx9fX6AgoKDg4OAfXl7fHx6fHx9f4CBgoODhIJ/fX5+f359ent/f359fX5/fn18fHx7e3l3d3p5dXl/fnt6e36BgYGBg4OBfn59fX19fX19fX18fHp5enl5en1/gIKDg4ODgoKBgYGCgYF/f399fHt6d3Z3eHx9fn1+fn18eHVzcG5wcnV5fX98e3x+f4B/f4KDhYWFhYSCgoGCgYGBgoKDgoF9end2eX2AgH9/f35+f39/goaFgX5/fn59fXx9fX5+fn5+fn5/gICBgYCAgYGBgYGBgYGAgIGBgoGBgYGBgYGBgYGBgX9/fXx7e3t7e3t7e3t7e3x8fHx8fH19fX19fXx+fn5/fnx8fHx8fHx8fX19fX19fX18fHt7e3t7e3p6eXl5e36AgYKDhIODg4ODg4KCgH18fHx8fHx9fXx8fH19foCCgoODhIB9e3x8fHx9fX1/gIGCg4OEgn99fn58fHd1d318e3x9fn6Afn19f4GBgHp1dnZ1eYB/e3p7foGBgYGDg4F+fn19fX19fX19fXx8enp5eHh5fH6BgoODg4KCgoGBgoKBgYCAf3x7enh3dnd4fH5/fn5+fXt4dXNwbm9xdXl+f3x7fH5/gICAgoOFhYSEg4KCgYGBgIGCgoKBgH16d3d6foCAf39/f39/f3+ChYWBfn9+fn19fH19fn5+fn5+fn+AgICAgICBgYGBgYGBgYCAgYGCgYGBgYGBgYGBgYGBf359fHt7e3t7e3t7e3t7fHx8fHx8fX18fHx8e31+fn58fHx8fHx8fHx9fX19fX19fXx8e3t7e3p6enp5eXp8f4CBgoOEgoKCgoKCgoGAfXx8fHx8fH19fHx8fX1+gIKCg4OEgX59fXx8fX5/f3+AgIGCg4SCf31+fnx6dHN3fX59fHx9foB/fn+BhISCfHRzdnZ5foB7ent+gYGBgYODgX5+fX5+fX19fX19e3t5eXh4d3h7fYGCg4ODgoKBgYGBgYCAgIB+e3p5d3Z2d3p9fn9/f358end1cnBubnB1eX1/fHt8fn+AgYGCg4WFg4OCgYGAf4CAgIGBgoF/fHp3eHt/gIB/f39/f39/f4KEhIF+f35+fX18fX1+fn5+fn5/f4CAgICAgIGBgYGBgYGBgICBgYKBgYGBgYGBgYGBgYF/fn18e3t7e3t7e3t7e3t9fXx8fHx9fXx8fHx7fH19fXt8fHx8fHx8fH19fX19fX19e3t7e3t7eXl6enl5e31/gYGCgoOCgoKCgoKBgYB9fHx8fHx8fX18fHx9fX6AgoKDg4SCf317fHx+f3+Af4B/gIKDhIJ/fX5+fXp0dXd+gYF+fn19gICAgYODg4J9dHN3eHp8fnt6e36BgYGBg4OBfn59fn59fX19fX16enp5d3d2d3p9gYKDg4KCgoGCgoGBgICAgH17enl3dnZ3en1/gICAf3t6d3RycG5ucHV5e318e3x+f4CBgYKDhYWDg4KBf39/f4CAgYGCgX97end4e4CAgH9/f4CAf39/goSEgX5/fn59fn1+fn9/f39+f39/gICAgIGBgYGBgYGBgYGAgIKCgoKBgYGBgYGBgYGBgH5+fXx7e3t6ent7e3t7e3x8fX19fX19fX19fXx9fHx8fHx8fX19fX19fX19fXx8fHx7e3t7e3t6enp6eHp8fYCBgIKCgoGAgICAgoJ/f318fHx8fHx8fH19fX19foCCgoODhIOAfnx8fX5/gH9/f4CBg4ODgoB9fn58e3h4e32DhoR/fX6AgIGDhISDgX12c3V3en19fHp8f4GBgYKCgoF/fXx9fX19fn59fHp5eXh3dXR2eX2AgoODgYGBgYGBgYGAgH5+fHp4d3Z1dXZ5fn+AgYF/fHp1c3Fwbm5wdXp8fXx7fH5/gICAgYKEhIOBgYF/gICAgICBgYGAfXp3dnl8gICAgH9/f39/f3+BhISBfn9+fn1+fn5/f39/f35/f3+AgICAgYGBgYGBgYGBgYGBgoKCgoGBgYGBgYGBgYGAfn59fHp7e3p6e3t7e3t7fHx9fX19fX19fX19fX18fHx8fHx9fX19fX19fX19fHx8fHt7e3t7e3p6enp4enx+gIGBgoKCgYCAgICBgX58e3x8fHx8fHx8fX19fX1+gIKCg4OEg4B+fXx9fn+Bf39/gIGCgoOCgX5+fnx8e3t9foOGhoGAf4CBgoODg4KBfnlzcnZ5fH17enx/gYGBgoKCgX99fH19fX19fX17enh4eHZ1c3V4fYCCg4OBgYCAgICAgH9/fXx7enh2dnR1dnl+f4CAgH99eXVzcXBubnB1en19fHt8fn+AgICBgoSEg4GBgX+AgH9/f4GBgH98eXZ2eXyAgICAf39/f39/f4GEhIF+f35+fX5+fn9/f39/f39/gICAgICBgYGBgYGBgYGBgYGCgoKCgYGBgYGBgYGBgYB+fXx7ent7enp7e3t7e3t8fHx8fX19fX19fX19fXx8fHx8fH19fX19fX19fX18fHx8e3t7e3t7enp6enh6fH6AgYGBgYGAf4CAf4GAfXt6fHx8fHx8fHt8fX19fX6AgoKDgoODgH9+fX5/gIKAf3+AgYGBg4OCfn5+fX17fX2AgYOFgoGAgIGCgoKCgYB9eXNwc3d7fHp7fH+BgYGCgoKAfn18fX19fX19fHp5eHd3dXRydHh9gIKCgoGAgICAgICAf399fHp5d3Z1c3V2en9/gICAfnx5dXRycG5ucHV6fX18e3x+f4CAgIGChISDgYGBf4CAf39/gIB/fnp3dXV5fICAgIB/f39/f39/gYSEgX5+fX19fn5+f39/f39/f4CAgICAgIGBgYGBgYGBgYGCgoKCgoKBgYGBgYGBgYGBgH59fHt6e3t6ent7e3t7e3x8e3t9fX19fX19fX19fHx8fHx8fX19fX19fX19fXx8fHx7e3t7e3t6enp6eHp8foGBgoGBgYB+gIB/gIB9fHt8fHx8fHx8fH19fX19foCCgoOCgoOAf359f4GBgoB/f4CBgYGDg4J/fn59fXx8fX+AgoKAf3+AgoKCgoKBgHx4c29wdnt8enx8f4GBgYKCgn9+fXx9fX19fHx7enh3d3Z1c3Jzd3yAgoGBgYB/f39/f39/f318enh2dXRzdXZ7gH+AgIB+fHl1dXJwbm5wdXp9fXx7fH5/gICAgYKEhIOBgYF/f4B/f3+AgH59eXZ1dHl8gICAgH9/f39/f3+BhISBfn5+fn5/f3+Af3+AgH+AgICAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGCgoGBgICAfn18e3t7e3t7e3t7e3p8fHx8fH19fHx8fH19fX19fX19fX1+fn5+fn59fX19fHx8ent7e3t6enp5eXl5e31/gYGCgX9+fn5/gICBgH18fHt7fHx8fHx8fX19fX1+gIGBgoKDgoF/f36AgoKDgYCAgICBgYKEg4B/fn9/fHx8foGBgX99f4CBg4OCgYB+e3h0b211fH17e3x/gIGCgoODgH99fHx8fHx8fHt5eHd3dnRzcHJ2e36AgoKAgH99fX19fn59fHp4dnZ1c3N0d3x+gIGAgH98eXZ0c3FvbXB0eX19fHx9f3+AgICCgoODgoGBgYCAgIB+fn5+fXt4dXN1eX2AgH9/f39/f39/f4GEg399fn5+fn9/f39/f4CAf4CAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYKCgYGAgIB+fXx7e3t7e3t7e3t7enx8fH19fX18fHx8fX19fX19fX19fX5+fn5+fn19fX18fHx6e3t7e3p6enl5eXl9foCBgoKBfn19fn+AgYB/fHx8e3t8fHx8fHx9fX19fX5/gIGCgoOCgYCAf4CCgoOBgICAgIGBgoSDgX9+fHp7e3x+gYGBf36AgoKDhIKAf3x6d3RubHR8fXt7fH+AgYKCg4OBfnx7fHx8fHx7enl4dnZ1c3JvcHV6foCCgX9/fn17e3x9fX17eXh2dXRzc3R3fH6AgICAf3x5dXRzcm9tcHR5fX18fH1/f4CAgIKCg4OCgYGBgYGAgH5+fn58eXZzc3Z6foCAf39/f39/f39/gYSDf35+fn9/f4B/f39/gIB/gICAgICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgoKBgYCAgH59fHt7e3t7e3t7e3t6fHx8fX19fXx8fHx9fX19fX19fX19fn5+fn5+fX19fXx8fHp7e3t7enp6eXl5en1/gYGCgYB+fX1+gIGBgH17fHx7e3x8fHx8fH19fX19fn+AgYKCg4KBgICAgYKCg4GBgICAgYGChIOBf357eHl8fH6BgYKCgIKChIOCgoB9e3l3dW9rc3x9e3t8f4CBgoKDg4B9e3p8fHx8e3t6eXd2dHJwcG5vdXp9f4GBf35+fHp6e3x9fHp4eHZ0c3JydHd9f4CAgIB+fHh0dHJxb25wdHl9fXx8fX9/gICAgoKDg4KBgYGBgYCAfn59fXt4dHJzdnt+gIB/f39/f39/f3+BhIJ/fn5+gIB/gH5/f3+AgICAgICAgIKCgYGBgYGBgYGBgYGBgYGBgYGBgYGCgoGBgICAfn18e3t7e3t7e3t7e3p8fHx9fX19fHx8fH19fX19fX19fX1+fn5+fn59fX19fHx8ent7e3t6enp5eXl6fn+BgYOBf359fX6AgoGAfXt8fHt7fHx8fHx8fX19fX1+f4CBgoODgoGBgYCBgoKDgYGAgICBgYKEg4J/fnt4enx8foGBg4WEhISDg4KBf3x5end3cWpxe3x7e3x/gIGCgoODgH17enx8fHx7e3p5d3Zzcm9ubG5zeX1+gIB+fX17eXl6fHx8end4dnRzcnJ0d31/f4CAgH58d3RzcnBubnF0eX19fHx9f3+AgICCgoODgoGBgYGBgIB+fn19eXdzcHN2e36AgH9/f39/f39/f4GEgoB/f3+AgH9/f3+AgICAgICAgICAgYGCgoKCgYGBgYGBgYGBgYGBgYGBgYKCgoGAgIB/fn18fHt7enp7e3t7e3t8fH19fX19fX19fX19fX5+fX18fH5+fn5+fn19fX18fHt7enp6enl5eXh4ent/gIKDg4GAfX1+f4GCgn98e3t7e3t8fHx8fHx9fX19fn5/gIGCgoKDgoGAgIGBg4KBgYCAgYCCg4ODgoB+fHp7fH1/f4KFh4eFhIODgYB9e3p5enhzbHF6fHp7fYCBgYKCg4OBfnt6e3t8e3t7enh3dnNxbm1sbXJ5fX5/f398enl4eHp7fXx5eHd0cnFwcXN4fX+AgICAfnx3dHNycW9ucHR5fX18fH5/f4CAgIKCg4OBgYCBgIB/f399fHp4dHBxcnd9f4CAf39/fX1/foB/gIKBf31/f4CAf39/f4CAgICAgICAgICBgYKCgoKBgYGBgYGBgYGBgYGBgYGBgoKCgYGBgYF/f359fHx7e3x8fHx7e3x8fX19fX19fX19fX19fn59fX19fn5+fn5+fX19fXx8e3t6enp6eXl5eHh6fICCg4SDgYB9fX+AgoKBgHx7e3t7e3x8fHx8fH19fX1+fn+AgYKCgoODgoCAgYGDgoGBgICBgIKDg4OCgH59fH59fn+AhIWGhYWEhIKAf3x7enl4eHVucHl8ent9gIGBgoKDg4F+e3p7e3t7e3p5eHZ0cnBsa2pscXh9fn9+fXp5eHd3eXt8e3p5d3RycXBxdHh+gIGAgH9+fHZ0c3Jxb25wdXp9fXx8fn9/gICAgoKDg4GBgIGAgH9/fn17eXZzb3Byd31/gIB/f359fX5+gH+AgYF/fYCAgIB/gH+AgICAgICAgYCAgIGBgoKCgoGBgYGBgYGBgYGBgYGBgYGCgoGDhISFhYOBf359fX19fn5+fn19fHx9fX19fX19fX19fX1+fn19fX1+fn5+fn59fX19fHx7e3p6enp5eXl4eXt+gYKDg4KBgH9/gIGCgoF/fHt7e3x8fHx8fHx8fX19fX5+f4CBgYGCg4OCgYGBgYOCgYGAgIGAgYKDg4KAfn59fX1+f4GEhIWFhIWFgn9+fHp5eXh4dnBud3t6e32AgYGCgoODgX57ent7e3t7enl4dXRxbmtqaWtwdnx+f316eHd2dnZ4e3x8enl3dHJxcHF1eH6AgYCAf358dnRzcnJwbnB2e319fHx+f3+AgICCgoODgYGAgYCAf399fHp4dHFub3J3fX+AgH9/fXx8fX6Af4CBgX99gYGAgICAf4CAgICAgICBgICAgYGCgoKCgYGBgYGBgYGBgYGBgYGBgYKCgIOFhYeHhIN/fn59fn6AgICAfn58fH19fX19fX19fX19fX5+fX1+fn5+fn5+fn19fX18fHt7enp6enl5eXh5fH6Bg4ODg4GAgYGBgoKCgX99e3t7fX18fHx8fHx9fX19fn5+f4CBgIKEhIOBgYKBg4KBgH9/gICAgYODgoB+fn5+fn5/f4KDhIOEhIOBf357enp5eHZ0cW92e3p7fYCBgYKCg4OBfnt6e3t7e3p6eXh0c3BtamlnaW51fH5/fHp5dnV0dXh6fXx5eXd0cnFwcXV6f4GCgYB/fnx2dHNycnBucHZ7fX18fH5/f4CAgIKCg4OBgYCBgIB/f318eXhzb21ucnd9f4CAf399fHx9foB/gIGBfn2AgH9/gICAgICAgICAgIGBgYGBgYKCgYGBgYGBgYGBgYGBgYGBgYCBgYKEh4iIioqHhoKAfn+BgoKFhYSBgH19fHx8fX19fX19fX5+fX1+fn5+fn5+fn5+fnx8fHx8e3t6enp6eXl5eHp9gIKDhISCgoGBgYCBg4KBfXx7e3t8fHx8fHx8fH19fX19fX+AgIGAgISEg4KCgoKEg4J/fX5/gICBgoKDgX5/f39/f35/gIKChISDgYF+e3t6enl4d3ZwbnV5eXx9f4GBgoKCgoB9e3p7e3l5enh4dnRxb21raWZpb3Z8f357eHd0c3N0eHp7enp5dnRycXBxdHl/gICAgIB/enZ0c3NycXBxd3x8fHx9fn9/f3+BgoOCgYCAgIGAgIB+fHp4dnJva250eH5/gIB/f316fH1/gICAgYF/foCAgICAgICAgICBgYCAgYGBgYGBgoKBgYGBgYGBgYGBgYGBgYGBgIGChIWIiYmKiomIhIGAgoSFhoiIhoSDgH59fHx9fX19fX19fn59fX5+fn5+fn5+fn5+fHx8fHx7e3p6enp5eXl6fH+ChISFhYOCgYGBgIGCgYF9fHt7e3x8fHx8fHx8fX19fX19fn+AgYGAhISDg4KCgoODgn99fH2AgYKCgoOCf39+fn9/f3+AgoKDg4KBgH17e3p6eXh3d3JvdXl6e31/gYGCgoKCgH17ent7eXl6eHh2dHFvbGpoZmlvdnx/fnt4dnRzdHV4ent6eXh2dHJxcHF0en+AgICAgH96d3V0dHNxcnN4fHx8fH1+f39/f4GCg4KBgICAgYCAgH58enh1cm9rb3V6fn+AgH9/fXl7fYCAgICBgX9+gYGBgYCAgICBgYGBgICBgYGBgYGCgoGBgYGBgYGBgYGBgYGBgYGAgYOEhYiJiYmJiYiGhIKEhoeIiomHhoWCf35+fX19fX19fX1+fn19fn5+fn5+fn5+fn58fHx8fHt7eXl5eXl5eXt+gYKEhIWFg4KBgYGAgYKAgHx7e3t7fHx8fHx8fHx9fX19fX19foCBgoKDg4ODgoKBgoOCf318fYCBgoKCg4N/f359f39/f4GCgoODgoF+fHt7enp5eHd3dnJ1eXl9fn+BgYKCgoKAfXt6e3t7e3t6eHZ1cm9samdmaW92fH9+e3h2dHV0dXh6e3p5eHZ0cnFwcXV7f4CAgICAf3p3dXR1c3JzdHh8fHx8fX5/f39/gYKDgoGAgICBgIB/fnx6d3RxbmtvdXt/gICAf397eXt9gICAgIGBf36CgoGBgICAgIKCgICAgIGBgYGBgYKCgYGBgYGBgYGBgYGBgYGBgYCBgYOFiImJiYmIh4iFg4aIiIuKiYiIhoOCfn5+fH19fX19fX5+fX1+fn5+fn5+fn5+fnx8fHx8e3t5eXh4enl5e4CDg4WFhYWDgoGBgYCBgH9/fHx7e3t8fHx8fHx8fH19fX19fX1+gIGCgoKCg4OCgoGDg4J/fX5/gIGCgoKDg39/fn5/f4CAgYKCgoKCgX58e3t6enl4d3d2c3V4eXx+f4GBgoKCgoB9e3p7e3t7e3p4d3Vyb2xpZmZpb3Z8f357eXd1dnV2eHp7enl4d3VycXBxdXt/gICAgIB/e3h2dXV0cnR2eHx8fHx9fn9/f3+BgoOCgYCAgIGAgH9+fHp3dHBua292fX+AgIB/f3l5fH6AgICAgYF/foGBgICBgYCAgYGBgYCAgYGBgYGBgYGBgYGBgYGBgYGBgICAgICAgICBgYSHiIeIiIiIh4aFhoiHiYmHh4iIh4SBf359fX19fX19fn5+fn5+fn59fX5+fn59fXx8e3t6enl5eHl5enx/gYSEhYWFhISCgYGBgIGBgH17e3t7e3x8fHx8fHx8fX19fX19fn+AgYKCgoKDg4ODg4OCgH99fH6AgIGCg4ODgH9+f4CAgYGCgoKCgoF/fHt6enl4eHd3d3d0c3h6fH+AgYGBgIKCgH17ent7e3t6enl3dXJvbGlmZWZsdXx+gHx5eHV2dnd4ent6eXh3dXJxcnN3fICAgICAgX96eHZ2dnN0dXZ5fXt7e3x/gIB/f4CCg4KBgYCAgICBgH99eXZxb2xrb3Z9gICAgIB9enh7foCAgICAgH59gYGAgIGBgYGBgYGBgICBgYGBgYGBgYGBgYGBgYGBgYGAgICAgICAgIGBg4aGhYeHh4eHh4aGh4eIiIeHh4eHhYOAf359fX19fX1+fn5+fn5+fn5+fn5+fn19fHx7e3p6eXl4enl8f4GDhYWFhYaEg4KBgYGBgoF+fHp6e3t7fHx8fHx8fHx9fX19fX1+f4CBgoKCgoODg4ODg4KAfnx8foCAgYKDg4KBgH+AgIKCgoKCgoKCgH58enp6eXh4d3d3d3NzeHt9f4CBgYGAgoKAfXt6e3t7e3p6eXd1cm9saWZlZmx1fH5/fHl5dXd3eHp7fX18e3l3dXRzdHl+gICAgICBgHt4d3d2dHZ1dnp8e3t7fH+AgH9/gIKDgoGBgICAgICAf315dnFua2txd32AgICAgH15d3t+gICAgICAfn2BgYCAgYGBgYGBgYGAgIGBgYGBgYGBgYGBgYGBgYGBgYCAgICAgICAgYGBg4SCg4OEhYaGhYWGhYaGhYWFhoiHhYGAfn19fX19fX5+fn5+fn5+fn5+fn5+fX18fHt7enp5eXh6e36Bg4WGhYaGhoSCgoGBgYGCf357ent8fHx8fHx8fHx8fH19fX19fX5/gIGCgoKCg4ODg4ODgn9+e3t+gICBgoODg4KAf4CBgoOCgoKCgoJ/fHt6enp5eHh3d3d3c3N5e3x+gIGBgYCCgoB9e3p7e3t7enp5d3Vyb2xpZmVmbHV8fn59e3p3eHl6fH1/f359e3p4d3d4e36AgICAgIGBfXp4eHd2dXR2eXt7e3t8f4CAf3+AgoOCgYGAgIB/gIB/fXl2cW5ra3J4fn+AgICAfXh3en6AgICAgIB+fYGBgICBgYKCgYGBgYCAgYGBgYGBgYGBgYGBgYGBgYGBgICAgICAgICBgYGBgYGAgIGDhYWFhIWDg4ODg4OFh4mGgoB+fX19fX19fn5+fn5+fn5/f35+fn59fXx8e3t6enl5eHl8gIKFhYWHh4aGg4KCgYGBgIF+fHt5ent9fXx8fHx8fHx8fX19fX19fn+AgYKCgoKDg4ODg4KBf357e36AgYKCgoODg4GAgIOCgoGCgoKCgn57e3p6enl4eHd3d3d0c3d8fX6AgYGBgIKCgH17ent7e3t6enl3dXJvbGhmZWZsdXx+fn58enh4ent+f4GBgX99fHt5eXp9f4CAgICAgYJ/e3l4eHZ1c3V5e3t7e3x/gIB/f4CCg4OBgYCAgH+Af399eXZxbWpqcnp/f4CAgIB9d3d7foCAgICAgH59goKBgYKCgoKBgYGBgYGBgYGBgoKCgoGBgICAgICAgICAgICAf39/f4CAf39+fX19f4GChIWDgn99fX9/gYOGh4eFgn9+fn19fX19fX5+f39+fn5+fn5+fn19fHt7e3p6eXl6fICDhoaFhYWFhoaCg4CBgICAfnx8e3p7e3t7e3t7e3t7fHx9fXx8fX18fX+AgYGBg4ODg4ODgoB/fXx8fYCBgoKCgoODgoKChIOEgoOCgoGAf3x7enp6eXl4eHZ4d3Rydnp+f4CBgYGBg4N/fHt5ent8fHt6eXh1c29saWdmZ2x1fH5+fn17e3t9f3+BgYGCgH9/fXx9fX9/gYGAgICAgYF9enh5d3V0dnp8fHx8fX6Af39/gIKDgoCAgIGBgIB/f315dXBsamtzen5/gICAf3t3dXp+gICAgICAf36CgoKCgoKCgoGBgYGBgYGBgYGCgoKCgYGAgICAgICAgICAgIB/f39/gIB/f358fX1+gIGCg4B9enh4e3t9gYSHh4eDgH9/fn5+fn5+fn5/f35+fn5+fn5+fX18e3t7enp5e3x+gYSHhoaFhYWEhIKCgIGAgIB9e3t7e3t7enp7e3t7e3t8fH19fHx8fHx9f4CBgYGDg4ODg4KBgH99fHx9gIGCgoKCg4OCg4SGhYWDg4KCgYB/fHt6enp5eXh3d3h3dXJ0en1/gIGBgYGCgn98e3l6e3x8e3p5eHV0cG1qZ2dobHV8fn5+fX19fX+CgYOEhIODgIGAfn5+f4CBgYCAgICBgX98enl3dXR2enx8fH1+foB/f3+AgoOCgH+AgYB/f39/fXl1cGtqbXR7fn9/gIB+end2en6AgICAgIB/f4KCgoKCgoKCgYGBgYGBgYGBgYKCgoKBgYCAgICAgICAgICAgH9/f39/f39/fnx9fX5/gIGBfXl3eHh5eXyAgoaFhYOBgIB/f39/f39/f39/fn5+fn5+fn59fXx7e3t6enp8fX+BhIaFhoWFhYODgYGBgYF/fXp6ent7e3t6ent7e3t7e3x8fX18fHx8fH1/gIGBgYODg4ODgoF/fn17e3yAgYKCgoKDg4KEhYaFhYODgoKDgYB9e3p6enl5eHd4eHh0cXJ5fH+AgYGBgYGBf3x7eXp7fHx7enl4dXRxbmpoZ2ltdXx+fn5+fX5+gIGDg4ODg4KBgoCAf3+AgIGBgICAgIGBgX99enh2dXd6fHx8fX5+gH9/f4CCg4KAf4CAgH9/f359eXVwbGxvdXx/f3+AgH15dnZ6foCAgICAgH9/goKCgoKCgoKBgYGBgYGBgYGBgoKCgoGBgICAgICAgICAgICAf39/f35+f39+fH19fX6AgH98eHZ4eHl5e36BhYWFg4KAgH+AgICAgICAf39+fn5+fn5+fn19fHt7e3p6e3x+gIKGhoWFhYWFgoKAgICAgH57eXp6e3t7e3p6enp6enp6fHx9fXx8e3t8fX+AgYGBg4ODg4OCgX9+fHx7fICBgoKCgoOEhIWFh4aFg4OCgoOCgH17enp6eXl4d3d5eHNucnh8f4CBgYGBgYF/fHt5ent8fHt6eXh1dHFubGloaW11e35/fX19foCBgoSFhISDgoCBgIB/gIGBgYGAgICAgYGAgIB8eHZ2eHp8fHx9fn6Af39/gIKDgoB+f4B/f39+fn15dXBrbHB2fYCAgICAfXl1d3p+gICAgICAf3+CgoKCgoKCgoKCgYGBgYGBgYGAgICAgYGAgICAgICAgH9/f39+fn5+fn5+fn19fHx9fX9+e3h4eHl5e3t8foCDg4SFhIOCgoCAgICAgH9/f39/fn5+fn5+fX18e3t7enp6fX+ChIWEhIWFhYSCgYGAf4B/fHp4eHh6ent7enp7e3t7e3t8fH19fHx7e3t8fX+AgIGCgoKDg4GAfn18fHt8f4CCgoODg4WEhYWGhoaEg4ODgoKAfXx7enp5eXh4eHl2c25wd3x/gIGBgYGAgH98e3p6en19fHt6eXZ0cm9raGhpbnZ8f39+fX1+gIGChIODg4OBf39/f39+gIGAgH9+fn5/gIGBgH15d3V3eXx8fH19gIB/f3+Ag4SBf31/f39/f39+e3d0b2prcHd9gICAf399eXV4e3+AgICAgIB/foKCgoKCgoKCgoKBgYGBgYGBgYCAgICBgYCAgICAgICAf39/f35+fn5+fn5+fX18fH18fX15eHh6enp7e3x9fX+Dg4WFhIaEgoKCgoKAf39/f39+fn5+fn59fXx7e3t6ent9gYOFhYSFhYSEg4GAgH9+f316eXh4eHp6e3t6ent7e3t7e3t7e3t7e3t7e3x8f4CAgYKCgoKCgYB+fXx7e3x/gIKCg4ODhYWFhIaGhYKCgoKCgoB9fHt6enl5d3h4enp1b3F3fH+AgYGBgYGBgH18ent7fX19fHt5eHRzcGxpaWpudnt+f35+fX5/gYGDgoKBgX9+fn18fn2AgYCAf35+fn5/gYKAf3p3dXd5fHx8fX1/f39/f4CDhIF/fX5/f39/f317d3NuamtxeX1/gIB/f315dXh7f4CAgICAgH9+goKCgoKCgoKCgoGBgYGBgYGBgICAgIGBgICAgICAgIB/f39/fn5+fn5+fn59fXx8fHx7e3h4eXt7e3x8fX1+gIKDhIWEhoaFhYWFhYSAf39+fn5+fn5+fn19fHt7e3p6e36ChISEhIWEg4KBf35+fH18enh3eXp6enp6enp6e3t7e3p6e3t6enp6e3t7fH2AgICBgoKCgoKAf318e3t6e35/goKDg4OEhYaGhoaEgoGBgYKCgH18e3p6eXl3d3h7fXhzcnd8f4CBgYGBg4OAfX17fHx9fXx+fXx5dnNwbmtqam52e31/f359fn+AgYKAgX99e3p5enp7fH+AgIB/fn19fH6AgoKAe3d1d3l8fHx9fX5+f39/gIOEgX98fn5+f35+fXt3cm1rbXR6fn+AgH9/fXl1eHt/gICAgICAf36CgoKCgoKCgoKCgYGBgYGBgYGAgICAgYGAgICAgICAgH9/f39+fn5+fn5+fn19fHx9fHt6eXl5e3t7fHx9fH6AgoKDhIaFhoaHhoaGhYF/f319fn5+fn5+fX18e3t7enp8f4KFhISEhYSDgoF/fX18enp6eXd5enp6enl5enp7e3t7enp6ent7enp7e3p7fX+AgIGCgoKBgYB/fXx7e3p6fX6CgoODg4SFh4eIhYOAgIGBgoKAfXx7enp5eXd4eHp8enVzd3x/gIGBgYGCgoF+fXx8fH19fH9/fnp4dHFvbGpscHd8fn5+fn1+f4CBgH5+fXl3dnV2d3h7f4CAgH9+fHx7fX+ChIF9d3V3eXx8fH19fn5/f3+Ag4SBf3x9fn5+fn59e3dybWttdXt+f4CAf399eXV4e3+AgICAgIB/foODg4OCgoKCgoKBgYGBgYGBgYGBgICAgICAf3+AgICAf39+fn5+fX19fX19fXx+fn19fHt6e3p7e3t9fX19fn6AgIKDhIOGh4iIiImIhIB9fn5+fn5+fX18fHt7e3t7e31/g4SEhIWGhIGAf358enp5eXd3d3l6enp6enp7e3t7e3p5enp5enp6ent7ent+f4CBgYGCgoGBgH59fXt7e3t8foCBgoKDhISFhoaFgoCAf4CBgH5+e3p5eXh4d3d4eHt7dXR4fH1/gYGBgYKCgX59fHx8fX5/gIB/e3l1cm9tbW1yeX1/f39/fn5+gIB/fHt5d3Z0cnJzdXl+gH+AgH59fHx8fYKEg313dnh6fHx8fn5+fn9/foCCg4J/fX9/f39/fn17dXJtam12fH5/gH5/f3x4dXh8f4CAgICAgH9+g4ODg4KCgoKCgoGBgYGBgYGBgYGAgICAgIB/f4CAgIB/f35+fn59fX19fX19fH19fHx8fHx8fHx8fH19fX1+fn5+gIGChIWGiImJioiFgH5+fn5+fn59fXx8e3t7e3t8fYCEhISEhYWCgH17enl3d3d3d3d3eXp6enp6ent7e3t6enl6enh5eXp6e3t6e31/gIGBgYKCgYGAfn18e3t7e3x+gIGCgoOEhIWGhYSBf4B/gH98fX17eXl5eHh3d3d3eXp2dXh7fX+BgYGBgoKBfn18fHx9foCCgoJ/e3dzcXBvb3R6fn9/f39/f3+Af316eXd1dHNxcHF0eX6Af4CAf357enp8gIOEgHp3eHp8fHx+fn5+f39+gYKDgoB+f39/f39+fXp1cW1rbnd+f3+Afn+AfHd1eHx/gICAgICAf36Dg4ODgoKCgoKCgYGBgYGBgYGBgYCAgICAgH9/f39/f39/fn5+fn19fX19fX18fX18fH19e3t7e3x8fX19fX19fX5+f4CCg4WHiIiJiIaBfn19fn5+fn19fHx7e3t7e3x+gYKChISEgn98enh3dnd3d3d3d3d5enp6enp6e3t7e3l5eXl7eXl5enp7e3p7fH5/gIGCgoKBgX9+fXx7e3t7e32AgYKCgoOEhYaFg4B/f39/fXt9fXt5eXl4eHd3dnZ3d3d2d3p9f4GBgoKCgoF+fXx8fH1/gYOEhIF9eHVzcXJzd3t+f39/f39/f39+enl4d3Z1c3FwcXR5foB/gICAfnt2eHp+g4OCfHh5enx8fH5+fn5+fn6BgYKCgX9/fn5/f359eXVwbmxweH5/f4B+f4B8d3V4fH+AgICAgIB/foODg4OCgoKCgoKBgYGBgYGBgYGBgICAgICAf39+fn5+f39+fn5+fX19fX19fXx8fHt7fHx8fHx8fX19fX19fHx8fXx9foCBg4WGhoeHhoF/fX1+fn5+fX18fHt7e3t7fH6BgoKEhIOAe3p5eHd2d3d3d3d3d3l6enp6enp6ent7eHh4eXt6eXl6ent7ent8fX+AgIGCgoGBf358fHt7e3t6fICBgoKBg4SFhYSBfn5/f396eX1+e3p5eXh4d3d2dXZ2d3Z2en1/gYGDg4KCgX59fHx8fX+Bg4SDgX54dnZ1dXZ5fH+Af39/f4CAf355eHh3dXVzcXBxdXp+gICAgIB+enZ2eH2CgoJ8eHl6fHx8fn5+fn19foGAgoGCgH9+fn9/fn14dHBvbnF5fn9/gH5/gHx3dXh8f4CAgICAgH9+g4ODg4KCgoKCgoGBgYGBgYGBgICAgICAgIB/f39/f39+fn5+fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH18e3t9foCDg4OEhYWFg4B9fX5+fn19fXx8e3t6ent9foGCg4SDg397eHd2d3d2dnh4d3h4eXp6enp6enp5e3t5eXl6enp5eXl5eXp7e3x9f4CBgoKCgYB/fn17fHx6ent8f4GBgYGBgoSEg4F+fn5+fXZ7f358enl5eHh4d3Z1dXZ4d3Z5fX+BgYKCgoKBfn18fH1+f4GDhYSDf3t5eHh6ent+gIB/f39/f4CAfnl4eHd1dXRycXJ1en6AgICBg315dXR3e4CDgn16eXp7e3t8fX19fn5+f4CBgoKBf35/f39+fHl1cW9vc3p+gIB/f3+AfHd1eHx/gICAgH9/gH2Dg4ODgoKCgoKCgYGBgYGBgYGAgICAf4CAgH9/f39/f35+fn59fXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fXx7e3t8foGCgoGBg4SEgH19fn5+fX19fHx7e3p6e31/goODhIOCfnp3dnZ3d3Z2d3d3eHl5enp6enp6enl6enl5enl5eXh4eXl5ent7fH1/gICBgoKBgH9+fHt8fHt7fHx/gYGBgYGCg4OCgH59fX16d3yBf3x6eXl4eHh3d3Z2dnl2dnl9f4GBgoKCgoF+fXx8fX5+gIOFhYOAfHt6enx8fH+AgIB+f39/gIB+eXh4d3V1dHNzdHZ7foCAgIGCfnl1c3Z6f4KDfnt5ent7e3x9fX1+f31+f4CCgoCAf39/f399eXVxbm90fH+AgH9/f398dnV4fH+AgICAgICAfYODg4OCgoKCgoKBgYGBgYGBgYCAgIB/gICAf39/f39/fn5+fn19fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx9fXx7fHx9f4CAf3+Bg4SAfHx+fn59fX18fHt7enp7fX+Cg4ODgoB8eXd2dnZ2dnZ4eHd4eXl6enp6enp6eXl5eXl5eXl5eHh5eXl6e3t8fX6AgYKCgoGAf358e3x8e3t8fH+BgYGBgYKDgoB/fHx9e3h4f4J/fXt5eXh4eHd4eXh2dnR2eX1/gYGCgoKCgX59fHt8fH2AgYSDgoB+fX18fn5/f4CAgH5/f4CBgX56eXh3dXV0c3N0d3t/gICAgIF/e3VzdHl+gYN/fHp6e3t7fH19fX5/fXx9f4GBgH9/f39/f355dXFub3V8f4CAf39/f3x2dXh8f4CAgICAgIB9g4ODg4KCgoKCgoGBgYGBgYGBgICAgH+AgIB/f39/f39+fn5+fX18fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fH19fHx8fX1+fn5/f4GEhIB7e35+fn19fXx8e3t6ent9f4ODg4OBf3t4dnZ3d3d4eHh4d3h5eXp6enp6enp5eXl5eXl5eXl4eHl5eXp7e3x9foCAgYKCgYB/fXx7fHx8fHx8f4GBgYGBgoKBf397e317eXqBg4B9e3l5eHh4d3h6eXZ0dHZ5fX+BgYKCgoKBfn18e3x8fX9/gYGBgH5/f31+gH9/gIB/fn9/gIKBfnx6eHh2dnVzdHR3fICBgICAgoJ9d3R0eHyAg4F9e3p7e3t8fX19fn99e3x+gICAf3+Af39+fHl0b21vdX1/gIB/f39/enV1d3x/gICAgIGBgH2EhISEgoKCgoKCgYGAgH9/gICAgH9/f39/f39/f39/f319fX18fHx8fHx8fHx8fX19fXx8fHx8fHx8fHx9fX19fn59fXt9fn18e31/g4WEfnl6fX59fX19e3p6ent6fH+Bg4OEg4F+enh3d3d3d3d3eHh4eHl5enp6enp6enp6enl5eHh5eXh4eXl5eXp6fH1/gICBgoKCgX9+fHt8fHx9fH2AgIGBgYGCgoKAfXx6fHt4e4GDgH17eXh4eHd4en56dXNzdnp9f4GBgoKDg4B9fHp6enx8fn9/gICAf4CBgICBgICAgH5+f4CAg4B+e3l4eHd2dnN1dXl+gH+AgICCgH15dXR3fICCgX56e3t7e3p7fX1+fn17eXt+fn9/f39/f398eHRwbnB2fX5/f39/f354dHR6fX9/gICAgIB+fISEhISCgoKCgoKBgYGBgICAgICAf3+Af39/f39/f39/fX19fXx8fHx8fHx8fHx9fX19fHx8fHx8fHx8fH5+fn5+fn19fH5+fXx7fICEhoJ8eXp9fn19fX18e3p6e3x+gIOEhISDgH16d3d3d3d3d3d4eHl4eXl6enp6enp6enp6eXl4eHl5eHh5eXl5enp9foCBgIGCgoKCgH58e3x8fH59foCAgYGBgYKCgoB9fHp8e3h7gYOAfXt5eHh4d3h8gHp1dHR2e31/gYGCgoODgH18enp6fHx9fn+AgICAgIGBgYGAgICAfn5/gICDgX57eXh4eHZ3dXZ2e36Af4CAgIKAfXl1dHd7f4KAfnt7e3t7ent9fX1+fXt4eXx+f39/f39/f3x4dHBvcXd9fn9/f39/fXhzdHp9f3+AgICAgH58hISEhIKCgoKCgoGBgYGBgYCAgIB/f39/f39/f39/f399fHx8fHx8fHx8fHx8fHx8fH19fX19fHx8fH19fn5+fn5+fn5/f35+fXx+goaHgnx5en1+fX19fXx7enp7fYCChISEhIOAfHl4d3d3d3d3d3h4eXh5eXp6enp6enp6eXl5eXh4eXl4eHl5eXl7e31+gIGBgYKCg4OAf3x7fH19fn5/gICBgYGBgYGBf318enx7eHuBg4B9e3l4eHh3eX2AenV0dHZ7fX+BgYKCg4OAfXx6ent8fHx+f4CBgYCAgYGBgYCAf39/fn+AgIOBf3x5eHh4dnd3eHd7foB/gICAgoB9enZ0d3t+gIB/fHt7e3t6e319fX5+e3d2eXx/f39/f39/fHd0cG9yeH5+f39/f358d3J0en1/f4CAgICAfnyEhISEgoKCgoKCgYGBgYGBgICAgIB/f39/f39/f39/f3x8fHx8fHx8fHx8fHx8e3t7fH19fX17e3x8fn5+fn5+fn5/f39/fn5+fX+EiIeEfXl6fX59fX19fHt6e3t+goWEhIODgoB8eXd2d3d3d3d3eHh5eHl5enp6enp6enp6eXl5eHh5eXh4eXl5eXx8fn+AgYGCgoKDg4B/fXt8fX1/fn+AgIGBgYGAgIB/fXx6fHt4e4GDgH17eXh4eHd5foB5dXRydnt9f4GBgoKDg4B9fHp6e3x8fH1/gIKCgICBgYGBgIB+fn9+f4CAg4F/fHp5eXl3d3h3eHx/gICAgICBgH16dnV3en5/gH58fHt7e3p7fX19fn99d3Z5fX9/f39/f398d3RwcHN5fn5/f39/fnx2cnR6fX9/gICAgIB+fIODhISCgoGBgoKBgYGBgYB/f39/f39/f39/f39/f39+fX18fHt7fHx8fHx8fHx8fHx9fn5+fHx8fHt8fH19fX1+fn5+f39+fn9/gIWIiIN+ent9fn19fXx8e3x8fYGDhIWFg4OCf3x3d3d3d3d3d3d4eHl4enp7e3t7e3t6eXp5eXl4eHh4eHh5eXl5enx+f4CAgIGDg4ODgX99fH18fYCAgIGAgICBgYGBgoB+fHp7enZ9goOAfXt5eHh4eHp9f3l0cnJ0en1/gICBgYODgX58enp6e3t8fYCBg4OCgYKCgYGAgH9/f35/gICDgX98enl5eXh4d3h5fYCAgICBgIB/fXt3dXZ6fYB/f318e3t7ent9fX1/f314dnh7fX1+fn9/fnt2c29wdHl+f39/gIB/e3VydXp9f4CAgICAf357g4ODg4KCgYGCgoGBgYGBgH9/f39/f39/f39+fn9/f318fHx8e3t8fHx8fHx8fHx8fX1/f399fX19e3x8fX19fX5+fn5/f35+f3+BhYiIg357e31+fX19fHx8fX2Ag4WEhIOEhIJ/e3d3d3d3d3d3d3h4eXh6ent7e3t7e3p5enp5eXh4eHh4eHl5eXl7fH5/gIGAgYODg4OCf318fn1/gYGBgoCAgIGBgoKCgX98e3p5d36Cg4B9e3l4eHh5e359eHRzcnR6fn+AgIGBgoKBf3x6enp7e3x9gIGDg4OCgYGBgYCAgH9/fn+AgIOCf3x7eXl6eXh4eHt+f4CAgYGBgX99e3h2d3h7f35+fXx7e3t7fH19fX+AfXl2eHt9fX5+f39+e3dzcHB1en5/f39/f357dXJ1en1/gICAgIB/fXqDg4ODgoKBgYKCgYGBgYB/f39/f39/f39/f35+f39+fHx8fHt7e3x8fHx8fHx8fHx+f4CAgH59fX58fHx9fX19fn5+fn5+fn5/f4GEh4eFf3t7fX59fX18fH1+gIOEhYSFhIODgX56eHd3d3d3d3d3eHh5eHp6e3t7e3t7enl6enl5eHh4eHh4eXl5eXx9fn+AgYGBg4ODg4KAfnx+gIGDhISDgYGBgYGCgoGAf3x8eXh4foKDgH17eXh4eHl8fnx3dXVydHp+f4CAgYGCgoF/fXt7e3t7fH2AgYODg4KAgICAgICAf39+f4CAg4GAfXx7e3t6eXh5e3+AgICBgYGAf317eHd3eHt8e318fHt7e3x9fX19f4B+end4e319fn5/f357d3NwcHV6fn9/f35+fnp1cnV6fX+AgICAgH97eIODgoKCgoGBgoKBgYGBgH9/f39/f39/f39/f39/f318e3t7e3t7fHx8fHx8fHx8fH1+gIGBf39/fn18fH19fX1+fn5+fn5+fn9/gYOHh4V/e3t9fn19fXx9fX6ChIaFhYSEg4OBfXl5d3d3d3d3d3d4eHl4enp7e3t7e3t6enp6eXl4eHh4eHh5eXl5fH1+f4GBgYKDg4ODgoB+fX+AgYOFhYOCgoKBgYKCgYB/fHx5eHh+goOAfXt5eHh4eXx/fXZ1dHF0en5/gICBgYGBgX9+e3t8e3t8fYCBg4ODgoCAf3+AgIB/f35/gICDgYB9fHt7e3p4eXl7f4CBgIGBgoF/fXt4d3d5e3t7fHx7fHx7ent9fX1/gH97eHl7fX1+fn9/fnt2cnFxd3x+f39/fn59enVydXp9f4CAgICAf3t3g4OCgoKBgYGBgYGBgICAf39/f39+fn5+fn5/f39/fX17e3t7e3t8fH19fX19fX19fHx/gYGAgYF+fXx8fH5+fn5+fn5+fn5+fn6Bg4aIhYF8enx9fn18fX1+gYWGh4aFhIWCgX98eXh4eHd3d3d4eHh4eXl6ent7e3t7e3p6enp5eXl5eXl5eXl5eXp8fn+AgYGBgYKCgoKCgH9+f4CDhIaGgoGBgICBgYGBgH98e3h2dn2ChIB9e3p5eXl5en5+eHV0cXR6fn+AgIGBgYKBgH59fX18ent8f4KDg4KAfn5+f4CAf39+fn+AgYKBf3t6e3t7enl5enx/gIGBgYGCgn58e3l4eHl5ent7e3t7fHx7fHt9foCAfnt3eXt9fn5/gIB+e3ZzcXJ4fH1+fX1+fnx5c3N1e36AgICAgIB9enWDg4KCgoKBgYGBgYGAgH9/f39/f35+fn5+fn5+fn59fXx8fHx8fH19fX19fX19fX18fH6AgIB/f359fHx8fn5+fn5+fn5+fn5+foGDhoiGgn58fX5/fXx9foCChoeHh4aEhIKAfHp4d3h4d3d3d3h4eHh5eXp6e3t7e3t7enp6enl5eXl4eHh4eXh5enx+gYGBgYGBgoKCgoKBgH+AgYSFhoaDgoGAgICBgYKBf3x8eXZ2fYKEgH17enp5eXh4fH98d3ZydHp+f4CAgYGCgoGBf35/fnx7e3x+g4SDgn99fH5/gIB/f35+f4CBgoF/fHt7e3t6eXl6fX+AgYGBgYGBfn17enp6eXl7ent7e3t8fHx8e31+gIB+fHd5e35+fn+AgH57dnNxc3h8fX59fX5+fHlzc3Z8f4CAgICAf316dYODgoKCgoGBgYGBgYCAf39/f39/fn5+fn5+fn5+fn19fX18fHx8fHx9fX19fX19fXx8fX5+fn9/fn18fHx+fn5+fn5+fn5+fn5+gYOGh4eDgH5+gH99fX5/gYSGh4iHhoWDgn97eXd2d3d3d3d3eHh4eXl5enp7e3t7e3t6enp6eXl5eXd3d3d5eXl7fH+BgoGBgYGCgoKCgoGAgIGDhoaGhoSCgYCBgX+AgoKAfXx5dnZ8gYOBfXt6enl5eHh4fH56eHN1en5/gICBgYOCgYGBgIB/fXx7fH6Cg4OBfnp8fn+AgH9/fn5/gIGCgX99e3t7e3p5eXp9f4CBgICBgYF/fXt7e3t7e3t5eXt7e3x8fHx7fX6AgH58eXp8fn5/f4CAfnt3c3FzeHx9fn5+fn59eXRzd3x/gICAgICAfXl2g4OCgoKBgYGBgYGBgIB/f39/f39+fn5+fn59fX19fX19fX19fX18fH19fX19fX19fHx8fX5+fn5+fXx8fH5+fn5+fn5+fn5+fn6Bg4WHiIWBfn6Af319f4CCh4iIiIeGhYOBfnp4d3d2dnd3d3d4eHh5eXl6ent7e3t7e3p6enp5eXl5eHh4eHl5ent+gIGCgYGBgYKCgoKCgYCAgoSHh4aFhIOBgICBfoCBgYB9fXl2dnyBgoF9e3p6eXl4d3Z5fnx4dHZ8fn+AgIGBgoKCgoKBgYB9fHt8foKBgYB7enx+f4CAf39+fn+AgYKBf317e3t7enl5en1/gIGAgICAgH99e3x8e3x8fHp6e3t7e3t8fHt9foCAfnx7e3x+fn9/gIB+e3dzcXN4fH1+f39+fn15dHN4fn6AgICAgH98eXeDg4KCgoKCgYCAgICAf39+f39/f35+fn5+fn5+fX19e3x8fX19fX19fX19fXx8fHx8fH19fX18fH19fX19fX5+fn5+fn9/f39+foGChYaHhYF9fn9/fn5/gIOGh4iIh4eFgn97eHd3dnZ2d3d4eHh4eXp5e3p6e3t7e3t7enp6enl5eHh5eXl5eXl7fYCBgYKCgoGBgYKCgoGBgYKEhYaFhYOEgYGAgIF+foCCgoB9fXZ1e4GCgX17enp6enp5dnd9fXh0dXt+f4CAgYGCgoSDg4OCgn59fHx9gIJ/fXx7e39/gIB/f35/f4CBgoKAfXt7e3t6eXl7fX+AgICAgICAfXx7fH19fn17enp7e3t6ent7enx+gIB/fHx8fH19fn5/f357d3NydXl9fX5+fn9/fXh0dHd8f4CAgICBf3t4d4ODgoKCgoGBgICAgIB/f35/f39/fn5+fn5+fn59fX17fHx9fX19fX19fX19fHx8fHx8fX19fX19fX19fX19fn5+fn5+f39/f35+gYKEhYaFgX5+f35+fn+BhIeHiImHhYOBfHh4d3d2dnZ3d3h4eHh6ent7e3t7e3t7e3t6enp6eXl4eHl5eXl5enx+f4GBgoKCgYGBgoKCgYGChISFhIWEgoKAgH5+f4GBgYKCgYCAd3V6gIKBfXt6enp6fHx+gIB+eHN1e35/gICBgYKChISEg4OCgH18fH5/gX17e3t7f3+AgH9/fn9/gIGCgoB9e3t7e3p5eXt9f4CAgICAgH99fHt8fX5+fXt5ent7e3p6e3t6fH6AgH98fHx8fX5+fn9/fnt3c3J2eX19fn5+f399eHR0d3x/gICAgIF/fHh3g4OCgoKCgYGAgICAf39/fn9/f39+fn5+fn5+fn19fXt8fH19fX19fX19fX18fHx8fHx9fX19fX19fX19fX1+fn5+fn5/f39/fn6AgYOFhoaCf319fX1+f4KFhoeIiIaDgH56d3h4dnZ2dnd3eHh5eXp6e3t7e3t7e3t7e3p6enp5eXl5eXl5eXl7fH6AgYKCgoKBgYGCgoKBgoOFhYaFhYOCgYCAfn1/gYGBgYGAgYB6dnl/goF9e3p6enp8f4KDgX55c3V7fn+AgIGBgoKEhYSEhIKBfnx8fn9+fHp7fH5/f4CAf39+f3+AgYKCgH17e3t7enl5fH1/gICAgICAf318e3x9fn59e3h6ent7enp7e3p8foCAf3x8fHx9fn5/gIB+e3dzcnd6fn1+fn5/f314dHR4fH+AgICAgYB8eXiDg4KCgoGBgYCAgIB/f35+f39/f35+fn5+fn5+fX19e3x8fX19fX19fX19fXx8fHx8fH19fX1+fn19fX19fX5+fn5+fn9/f39+fn+AgoSGhoJ/fX19fX5/gYSGh4eHhoJ+e3h3d3d1dnZ2d3d4eHl5ent7e3x8e3t7e3t7enp6enl5eXl5eXl5e3t9gICBgoKCgoGBgYKCgoGDhIaFhoeFgYGAf39+fX2AgICBgX9/f3l1e4CCgX17enp6ent/gYF/fXhydXt+f4CAgYGBgoSFhIOFhIF/fHx+f358ent8f39/gIB/f35/f4CBgoKAfXt7e3t6eXl8fX+AgICAgIB/fXp7fH1+fn17eHl6e3t6ent7enx+gIB/fHx8fH1+fn+BgX57d3Nzd3t+fX5+fn9/fXh1dHh8gICAgICBgHx6eISEgoGBgYGBgYB/f35+fn5/f39/fn5+fn19fn59fHx8fX19fX19fX19fXx8fHx9fX19fX19fX5+fX1+fn5+f39+fn5+f39/fX5+fn6AgoWHhIF9fn5+f4CChIaGhoaEgXx5eHd3d3Z3d3d3d3h4eXl6ent7e3t7e3t7e3t6enp6enp6enl5eXl8fn+BgYKCgoGBgYGAgYKCgoOEhoWGhYSBgYB/gH9+foGBgYGAf3x7eXp+gYGAfXx7enp6eHl5eHx7dnJ2e3+AgICAgICChYWEhISCgH99fX+Af317e3x/gICAgH9/f4CAgYGCgoB+fH19e3l5ent+f3+AgICAgH57enx9fn5+fXt4eXp7e3p6e3t6fH6AgX97e3x9fXx+foGBf3x3c3R4e31+fHx8f398d3V0eX1/f4CAgIB/fn19g4OCgYGBgYGAgH9/fn5+fn5+fn5+fn5+fX1+fn18fHx9fX19fX19fX19fHx8fH19fX19fX19fn59fX5+fn5+fn5+fn5/f399fn5+foCChIaGg39+f3+AgYOEhoaGhYJ/e3h3dnd3d3d3d3d3eHh5eXp6e3t7e3t7e3t7e3p6enp6enp6eXl6fH2AgYGCgoKCgYGBgYCBgoKDg4SFhYaFg4CAgH+Af36Ag4KBgYGAfn18fH+BgYB9fHt6enp4eHd5eXhzcnZ7fn+AgICAgIKEhIODg4GAf319gIB/fXt7fH+AgICAf3+AgICBgYKCgH17fHx7eXl6e35/f4CAgICAfnt8fX1+fn59e3h5ent7enp7e3p8foB/fXt7fH1+fH5+gYGAfXh0dHh8fX58fHx/f3x3dXR5fn9/gICAgH9/f3+Dg4KBgYGBgYCAf39/f39/f39/f35+fn59fX5+fXx8fH19fX19fX19fX19fX19fX19fX19fX1+fn19fn59fX5+fn5+fn9/f31+fn5+f4GDhYaDgH+AgIGBhIWGhoWDf3x6eHd2d3d3d3d3d3d4eHl5enp7e3t7e3t7e3t7enp6enp6enp5e3t+foCCgoKCgoKCgYGAgIGCgoODg4SFhoWDgICAf4CAgIKCgoGDg4KAf359foCBgH18e3p6ent7fH16eHNzdnt9foCAgICAgoSEg4ODgYB/fX2AgH99e3t8f4CAgIB/f4CAgIGBgoKAfXt7e3t6eXp7fn9/gICAgIB+fX1+fn5+fn17eHl6e3t6ent7enx+gH99e3t8fX58fn6BgYB9d3R0eHx9fnx8fH9/fHd1dXl+f4CAgICAf39/f4KCgoGBgYGBgIB/f3+AgIB/f39/fn5+fn19fn59fHx8fX19fX5+fn59fX5+fn59fX19fX19fX5+fX1+fn19fX1+fn5+f39/fX5+fn5+gIOFhYJ/f4CBgoODhYaGhIF+fHl3dnZ3d3d3d3d3d3h4eXl6ent7e3t7e3t7e3t6enp6enp6enp8fX6AgYKDgoKCgoKBgICAgYKCg4ODhISGhYN/f4B/gIGChIKCgYKCgoKBf359f4GAfXx7enp6e3t8fXt4dXZ2e31+gICAgICCg4OCgoKAgH99fYCAf317e31+gICAgH9/gICAgYGCgoB8ent7e3p5ent+f3+AgICAgH59fX9/fn5+fXt4eXp7e3p6e3t6fH6AgH57e3x9fn1+foGBgH13dHR5fH1+fHx8f398d3V1en6AgYCAgIB/f4CAgoKCgICAgIB/f35/gIGBgYB/f39/f39/fn59fX19fHx+fn5+fn5+fn19fn59fX19fX19fX19fn59fX19fn5+fn5+fn5/f39+f39/f3+Bg4WGhYOCgoODhIWFh4eEgXx5eHV2dnZ2d3d3d3d3eHh5eXp6e3t8fHt7e3t7e3t7e3t6enp7e31/gIGBg4ODg4KCgoF/f3+AgYKDg4OEhISDgYCAf36AgIGChIKBgYKBgYGAf35/gIF+fXx7e3t6eXx9fHh2dXd7fn+AgICAgICCgoKCgICAfn18f39/fHt7fX5/f4CAf39/gICAgoODgX17e3t6enl6fH6AgICAgIB/fn5+f39/f359eXh4eXt7e3t6ent8f4GAfnt7fH5+fX1/goKAfHd0dnp8fn19fX1+f3x3dHZ7f4B/gICAgH+AgX+CgoKAgICAgH9/fn+AgYKDgYCAgICAgIB+fn5+fX19fX5+fn5+fn5+fX19fX19fX19fX19fX1+fn19fX1+fn5+fn5+fn9/f39/f39/f4GChIaGhYOEhIWGh4WGhoOBfXl4dnZ2dnZ3d3d3d3d4eHl5enp7e3x8e3t7e3x8e3t7e3p6en19f4GBgoKDg4ODgoKBgH5+f4CBgoKCgoOEhIKBgIB/fn9+f4CCgoCBgoGBgYGAf39/gX9+fHt7e3l4eXp7dnR1eXx+f4CAgICAgIGBgYGAgH99fHx/f358e3t9fn9/f39/f3+AgICBg4KAfXx7e3p6eXt9foCAgICAgH9+f39/f39/fXx5eHh5enp7e3t7fHx+gH99e3t8fn59fX+CgoF8d3R1eXx+fX19fX5/fHd0dnt/gH+AgICAf4CBf4KCgoCAgICAf39+gICBhYWDgoGBgYGAgH9/f399fX5+fn5+fn5+fn5+fn19fX19fX19fX19fX5+fX19fX5+fn5+fn5+f39/f39/f39/gYGDhoaFhISFh4aIhoWFgoB+end3dnZ2dnd3d3d3d3h4eXl6ent7fHx8fHx8fn59fX19fX18fn+BgoKCgoKDg4OCgoF/fn5/gICBgYGBgoODgoGBgYB/f35+f4GBgICBgIGBgYB/f36AgH98e3t7eXl6ent1c3V7fn5/gICAgICAgYGBgYCAfXt7fX9/fXt7e31+f39/f39/f4CAgICCgoB9fHx7enp5e31+gICAgICAgH+AgICAfn58e3l4eHl6ent7fHx8fH6Af317e3x+fn19gIKCgXx2dHV6fH59fX19fn98eHV2e3+Af4CAgICAgYF/goKCgICAgIB/fn+AgYKHiIWEg4ODg4CAgIB/f319fn5+fn5+fn5+fn5+fX19fX19fX19fX19fn59fX19fn5+fn5+fn5/f39/f39/f3+BgYOGhoWFhoaIiIiHhYWCf3x5dnZ2dnZ2d3d3d3d3eHh5eXp6e3t8fH19fX19fX9/f39/f36AgIKDg4KDg4SDg4KCgH59fX+Af4GBgYGCg4KCgoKCgYB/fX5+gICAf4CAgYGBgH9/fn+Bf3t7e3t7eXl6e3Z1eHp9fn+AgICAgICAgICAgIB8enp9f399ent8fn9/f35+f39/gICAgIGBf318fHx6enl7fX6AgICAgICBf4GBgIB9fXx7eXh4eXl5e3t8fHx8fn9+fHt7fH5+fX2AgoKBfHZ0dXp8fn19fX1+f314dXh6f4B/gICAgICCgX+BgYCAgICAgIB/f4CBhIiJh4aEhIKCgoKAgICAfn5+fn5+fn5+fn5+fX19fX19fX19fXx8fX19fn58fn5+fn5+f39/f35+fn5/f35+fn+Ag4aGhoaHiIiIh4aEgoB9end1dXV1dXZ2dnd3eHl5eXl5e3t7e319fX1+fn1+f39/f4CAgYGDg4ODhISEhIOBgoF+fXt9f3+AgoKCgoKCgYCBgYGAf35+fn9+f4CAgICAgIGBgH5/foGBfnt6e3p6eXl7dnZ6e31+f4CAf3+AgICAgYCAfXp6eX1+fn17e31+f39/f39/f4CAgICAgYF/fXx7e3p6e3x+f4CAgIB/gIGAgIGBgX58fHt6eXl5eXp7fHx8e3x/gH99fHx8fn59fYCDg4F7d3V1en19fX1+fX+Afnl2eHt+fn9+foB/gIKBfYGBgICAgICAgH9/gIGEiImKiIeHhoaFhYODgIF/fn5/fn5+fn5+fn59fX19fX19fX19fHx9fX1+fnx+fn5+fn5/f39/fn5+fn9/fn5/f4CDhoaGhoeIiIiHhoSCf3t4dXV1dXV1dnZ3eXt6enp5eXl7fXt9f3+AgYKCgoODg4ODg4OEhIWFhISEhISEg4GCgX99fH1/f4CCgoKCgoF/f4CCgoGAfn5+f35/gICAgICAgIB/fn9+gIKBfXp7e3t5eXp3d3t7fX5/gIB/f39/gICCg4J9enl5fX9+fXt6fX5/f39/f39/gICAgICBgX99fHt7enp7fH6AgICAgICBgYGDg4KBfnx7ent5eXl5ent8fHx7fH+Af318fHx+fn19gIODgXt2dXZ7fX19fX5+gIF+eXd5fH5+f35+f4CBg4F9gYGAgICAgICAf3+AgYSIiYiHiIiIiIeHhYWCgX9+fX5+fn5+fn5+fn19fX19fX19fX18fH19fH19fn5+fn5+fn9/f39+fn5+fn5+foCAgIOGhoaGh4iIiIeGhIJ/eXZ0dHR0dHV2dnl9f359fHp6enx+foCAgoKDhISFhoeHh4eHh4eHh4eHh4WFhYWEgoGAfnx9foCAgIKCgoKCgX5+f4KCgYB+fn5/f3+BgYGAgICAgIB/f35/gYOBfXt7e3t5enh5fHx9fn+AgH9/f3+AgYOEgn57enl+gH58enp9fn9/f39/f3+AgICAgIGBf318e3t6enp8foCAgICAgYKCgoODgoF+e3t6e3l5eXl6e3x8fHt8f4CAfnx8fH5+fX2Ag4OBe3V0eHx9fX19fn6AgX55eHl8fn5/fn5+gIKDgnyBgYCAgICAgIB/f4CBhIaHh4aIiIiIiYiGhoSBgH99fX5+fn5+fn5+fX19fX5+fn59fXx8fX17fXx+fn5+fn5+f39/f35+fn59fX5+gICAg4aGhoaHiIiIh4aEgn55dHN0dHNzdXZ4fIGDg4F+fHt8fX+Bg4OFhoeIiIeIiYmJiYiIiYmJiYiIh4eHh4SDgYB/fX5/gIGAgoKCgoGAfX5+goOCgX5+fn9/f4KCgYGAgICAgH9/fn+Bg4N/ent8fHt5e3t9fX5+f4CAf39/f4CChYWDgHx6fH5/fnt5e31+f39/f39/f4CAgICAgYF/fXx7e3p6enx+gICAgICDhIODg4OCgH17enl7eXl5eXp7fHx8e3x/gIB+fHx8fn59fYCDg4F7dXR4fH19fX1+foCBfnl4eXx+fn9+fn6Bg4SDfIGBgICAgICAf39/gICBhIWGh4iIiYmJiomJhoOAfn59f31+fn59fn5+fn5+fX19fX19fHx8fHx9fX1+fn5+fn5/f39/fn5+fn5+f3+AgICCg4SFhYWGh4eHhYSCfXh0c3RzcnJzdnuBh4iHhYF/f3+ChIOGh4iJiouLioqLi4mJiIiJiYmJiIiIiIiIhYSBgH59f4CAgIGBgoGCgYB+fn2CgYGAf35+f4CAgIKDgYB/gH9/f39+f4CCg4F9ent7e3p6e3t9fX5/gYGAgICAgYOGhYOAfn5/gH9/e3p6fX5/f39/f4CAgICAgICBgX99fHx6e3l7fX6AgICAgIKEg4ODg4J/e3p7enl5eHp4enx8fHx7fX6Af358fH19fn19gIKDgHp1dXl7fX19fX1+gYJ/enl7fH1+f39/f4CEhYR8gYGAgICAgIB/f3+AgICDhIOFh4eIiIiKioqIhoJ/fn1/fX5+fn1+fn5+fn59fX19fX18fHx8fX19fX5+fn5+fn9/f39+fn5+fn5/f4CAgYGCg4WFhYaHh4aFhIJ9eHVzdHNzc3V5f4WIiYmHg4CBgoWGhoiKioqKioqKiomJiYmIiIiIiIiHh4iIiIiGhIKBgH+AgICAgYGCgYKFiISBf4GBgYB/fn5/gICAgoOBgH+Af39/f35/gIGBgX96e3x9eXl5e319f4CBgYGBgoKCgoKDgn9/gICAf357enp9fn9/f39/gICAgICAgIGBf318fHp7ent9foCAgICAgoSDg4ODgn58e3t6eXl4enh6fHx8fHt8fYB/fnx8fX1+fX2AgoOAenN1enx9fX19fX6Bgn97eXt8fX5/f39/gIOEhHyBgYCAgICAgH9/f4CAgIGCgYKFhYaGh4mJiYqIhYGAf399fn5+fX5+fn5+fn19fX19fXx8fHx9fX19fn5+fn5+f39/f35+fn5+fn9/gICBgIGCg4ODhIWFhYaEhIF8eXZ0c3R0d3uCh4eJiIaGg4SGh4iIiYmJiYmJiYmJh4eIiIeHh4eHh4aGh4eHh4aFhYWDgoKAgICBgYKDhIiLiYOAgIGBgH9/fn+AgH+BgoCAf4B/f3+Af4B/f4CAgHx+f396eHp9fX6AgYGBgYGDgoGAgYKCgIB/f39/fnt6en1+f39/f3+AgICAgICAgYF/fXx8ent6e31+f4CAgICChIODg4KAfXt6e3p5eXh6eHp8fHx8ent8f39+fHx9fX59fYCDhIB6dHZ6fH19fX19foGCf3t5e3x9fn9/f3+AgoOEfIGBgICAgICAf39/gICAf4CBgoODhISGh4mJiImIg4GAf31+fn59fn5+fn5+fX19fX19fHx8fH19fX1+fn5+fn5/f39/fn5+fn5+f3+AgIB/gYKCgoKDhISEhYWEg4B8eHNzdHR5foOGiImIh4aFhoeJiomJiomJhoeHh4eGhoaGhYWGhoaGhYWHh4eHhoeGhoSEhIKAgIGBgoOHiYuLhYGAgICAf39/f4CAf4GCgIF/gH9/f4GAgH99fn+Bfn+Bgnx5fX99f4GBgYGBgYODgYCBgYGAgH9/gH9+e3p6fn5/f39/f4CAgICAgICBgX99fHx6e3p7fX5/gICAgIKEg4OCgYB9e3p7enl5eHp4enx8fHx6e3x+f358fH19fn19gIOFgHp1d3p8fX19fX1+gYJ/e3l7fH1+f39/f4CCg4R7gIB/f39/f39/f39/f39/f3+AgYGBgYOFh4eIiYmHhoKBf35/fn59fH5+fH5+fnx8fHx8fHx8fH19fX5+fn5+fn9/f39+fn5+f39+fn5+f3+AgICBgYKBgoSGhoWEhYJ+eHV1dnqAhIeIiIaGhYWHiIiIiIiIh4eGhYWEhIODhISEhIWFhYWEhIWFh4eHh4eHhoaGhYKAgIKEhoiHiIeHgn9/gH5+fn5+gICAgYGBf3+BgICAgIF/fn5+f4CAf4CBfXt8fX1/goOCgICCgoOBgICAgYCBgYGBgH97ent+fn5/f39/gICAgICAgIGAf318enp7e3x+f4CAf3+Ag4SEhICAf399fHp6enl5eXl6e3t7e3p6fH1/f317fHx7fHt+gYN/eXR2enx9fX19fX+CgoB8enx9fn5+fX1+gIGDgnuAgH9/f39/f39/f39/f39/f39/f4CAgYKEhoeIiomHhIOBgIB+fn18fX18fn5+fHx8fHx8fHx8fX19fn5+fn5+f39/f35+fn5/f35+fn5/f4CAf4B/gICBg4WFhYaGhoN+eXh5fYKFh4iIhoaEhIaIiIiHh4aFhISEhISEg4ODg4ODg4ODg4ODg4OEhIWFhYWGhoaGhICAgoWHh4SEhYaBf3+Afn5+fn6AgICAgoGAf4CAf3+AgX9+fX5+gIB+fn99fH1+gICCgoB+foKCg4GAgICBgICBgYGBf3t6fH5+fn9/f3+AgICAgICAgYB/fXx6ent7fX+AgIB/f4CBgoOCgIB/f359enp6eXl5eXp7e3t7enp8fX9/fXt8fHt8e36Bg395dHZ6fH19fX1+gYKCgH17fX1+fn59fX5/gYKBfICAf39/f39/f39/f39/f39/f35+f39/gIKDhYiKioiGg4KBf319fXx8fHx+fn58fHx8fHx8fHx9fX1+fn5+fn5/f39/fn5+fn9/fn5+fn9/gIB+fn19f3+Cg4SEhYWFhYF+fX2AhIaHhoaFhYOEhYaGhoSEhYODg4ODg4OEhIODg4ODg4ODhISEhISEhISEhISEhoaFgoOFhoaFgoOEg4B/f4B+fn5+fn+AgICBgYCAfn5/f4CAfn18fn6Af319f319fX9/gYGAfnx9gIKDgYCAgIGAf4CAgIB+e3p8fn5+f39/f4CAgICAgICBgH99fHp5ent9f4CAgH9/gIGCgoB/f39/fn16enp5eXl5ent7e3t6enx9fn59e3x8e3x7foGDf3l0dnp8fX19fX6Bg4OAfnt9fX5+fn19fX6AgYB9gIB/f39/f39/f39/f39/f39/fn5/f31/gIGDiImJiIeGhIOAfn19fHx8fH5+fnx8fHx8fHx8fH19fX5+fn5+fn9/f39+fn5+f39+fn5+f3+AgH58fH19foGChISEhIWFhIOBgIGFhoaFhYSEg4SEhISEhISDgoKCgYGBgYGBgoKCgoGBgYGCgoODhISEhISEhISGhoSDhYeHhYOAgYGDgH9/gH5+fn5+f4CAgIGAgIB/f35+gIB+fHx8fX9/fXyAfn19fn+Af39+fHx/goOBgYCAgIB/f4CAgH57enx+fn5/f39/gICAgICAgIGAf318enl7fH1/gICAf3+AgICBf35+f39+fXp6enl5eXl6e3t7e3p6fH19fX17fHx7fHt+gYN/eXR2enx9fX19foKEhIF/e3x9fn5+fX19foCBgH2AgH9/f39/f39/f39/f39/f39/f39/fn5/f4GGh4iIiIiGhIOAfn19fX19fX19fHx8fHx8fHx8fH19fn5+fn5+f39/f39/fn5+fn9/fn5+fn5+fHx9fX5/gYGBgoOFhYeHhYODhISGhYSEhIKCg4ODg4KCgoGBgYF/f36AgICBgYGAgYGAgIGCgoKDg4KEhISEhISEg4SFhoSCgHx+gYSBf3+Afn9/fn2AfoCCgYGCf4CAfn6AgH99fXx7fX18fH+BgIB/f39/f35/f4CCgYGCgICAgICAgX9+fXp6fX5+fn9/fn6AgICAgICBgYB/fX19fHx9fn+AgICAgICAgH9+fX5+fn59enp6enl5enp7e3t7e3t6e35+fHx8fHt8fH2Bg4B6dHZ6fHx8fHx+gISEgH58fX5/fn59e3t8fn9/foCAf39/f39/f39/f39/f39/f39/f39+fn5+gISFhoiJioiHhYJ/fX19fX19fX18fHx8fHx8fHx8fX1+fn5+fn5/f39/f39/f39/f39+fn5+fn58fH19f4B/f3+AgYOEhYaHhYWGhoWEhISEgoOCgoKCgICAf39+fnx9fn+BgYGBgoB/f4CAgICAgIGBgoODg4ODgoKDg4ODgYB/enp+hIKAgIB+fn5+fn58foGCg4OAgIB+fn9/f359e3t8fHx8foGAf3+Af4CChISDgoKBgYKAgIB/gICBf359ent+fn5+f39/f4CAgICAgIGBgH99fn99fH1+f4CAgICAgICAfX18fn5+fn16enp6eXl6ent7e3t7e3p7fX18fHx8e3x8fYGDgHp0dnp8fHx8fH6Ag4OAf35+f39+fn17enx9f39/gIB/f39/f39/f39/f39/f39/f39/f35+fn5/goKEhoiIiYmHhH99fX19fX19fXx8fHx8fHx8fHx9fX5+fn5+fn9/f3+AgH9/f39/f35+fn5+fn5+fn+AgH5+fn1/gYKEhYaFhYaFhYSEhISCgoGBgYB/fHx8fHx8fH5/gIKCgoKDgYCAgYF/fX19f3+AgYODgoKBgYKBgoCAgH98en2EhIGBgH59fX1/fXp7goSEg4CAgH9/gICAf358fHx8fX5/f399foCAgICEhYWEgoKBgX9/gX+AgIB/fXx6e35+fn5/f4CAgYGBgYCAgICAf39/gIB+fn5/gICAgICAgX98fHt9fn5+fXp6enp5eXp6e3t7e3t7ent9fXx8fHx7fHx9gYOAenR2enx8fHx8foCCgoB/fn5/f35+fXt6e3x+fn6AgH9/f39/f39/f39/f39/f39/f39/fn59fX+AgIOFhoeJioiFgH18fX19fX19fHx8fHx8fHx8fH19fn5+fn5+f39/f4GBgICAgH9/fn5+fn5+fn6AgH9/fn5+fX6Bg4OEhYWFhoWEg4SEhIKBgICAfn17e3p6fHx9fn+Bg4OCgoSCgYGBgX57e3t+fn6AgYGCgoGBgoGCgX+AgH56fISFgYGAfn19fYB9eXuBhoeDgYCAf35/gIKBf318fX5/gH99fX19gH9/foGEhIOEg4GAgH+AgICAf358e3p7fn5+fn9/gICCgoKCgICAgIB/gICBgYB/fn+AgICAgICAfnx8e3x+fn59enp6enl5enp7e3t7e3t6e3x8fHx8fHt8fH2Bg4B6dHZ6fHx8fHx+gIKCgH9+fn9/fn59e3l6fH19fYGBf39/f39/gICAgH9/f39/f39/f39+fn5+fX2AgYOEhomJiYWBfnt8fHx8fHt7e3t7enp8fHx8fHx9fX5+fn5/f39/gYKAgICAf359fX5/fn6AgICAgICAgH9+f4ODg4SEhYWGhoSEg4OEgn9/fHt6eXl5eXp8fX+AgoKEhIODhISCgoGAfXt7e3t9fX6BgoGCg4OCgoB/fYGAfn1+hIaBgH99fH6Ag4J9foGFhIGAgYCAf39/gH9+fn1+f39/fXp6fH1+fn9+gIKCgoKCgYCAgH+AgIB/f317e3x/gH9/gICAgICAgYCAgH+BgYCBgYKCgYB/gICAgICAgH59e3t8fH5+fHt6eXp6eXl5e3t7e3t7e3l5e3t8fHx8e3x8fYCCf3p1d3t8fHx7fX6AgoF/fn9/f35+fn58enh6e31+gIB/f39/f39/f4CAf39/f39/f39/f35+fn59fX+AgYOFiImJhoF9e3x8fHx7e3t7e3t7e3t7e3t8fH19fn5+fn9/f3+Cg4KCgoCAfn19fn9/f4KCgYGAgIKBgYCAg4ODhISEhISEg4ODg4SCfnt5eXh4eXl6fH1/gIKDg4SEhYWFhYSEgYB+fHx8e3x9fn+AgYOEhIKBf35/goCBhIWGhoJ/fHp7foKDg39+f4GBgICBgYB/f3+Af359fn9+fn19ent7fX1/gYCBg4ODg4KBf39/fn+AgICAfnt7fH5/gICAgYCAgICAfn19foGBgYKCgoGBgX+AgICAgICAfn17e319fn18e3p5eXl5eXl7e3t7e3p6eXl6ent7e3t7fHx9gIJ/enV3e3x8fHt9foCCgYB/f39/fn5+fnx6eHl7fX5/f39/f39/f39/gIB/f39/f39/f39/fn5+fn19fX5/gYSHiYmGgXx6e3t8fHt7e3p6ent7e3t7e3x8fH1+fn5+f3+AgIOEhYWFgoF/fn5/gIGBgoKCgoKChIODg4OEg4OEhISEg4ODg4ODg4F+e3p5eHh7e3x+foCBg4OEhISFhYWFhISCgX9+fX18fH1+f4GChYSEgn9+foGCgoSCgICAgX97eHp9gYCAgH59fn5+f4GBgH6AgYGAf35+fn5+fX17e3x9fH+BgoODg4SDgoF/f39+f4CAgYF/fHt8fn9/gIGBf39/gH99fn1+gIGBgoKCgYGBf4CAgICAgIB+fXt7fn19fXx7enl4eHl5eXt7e3p6eXl5eXp6e3t7e3t8fH2Agn96dnh7fHx8e31+gIKBgYB/f39+fn5/fXp4eHp8fX9/f39/f39/fn6AgH9/f39/f39/f39+fn5+fX18fX1/g4aJiYaBfHp6enx8e3t7enp6e3t7e3t7e3x8fX5+fn5/f4GBg4SHh4eDgoB+foCBgoKCgoODhISGhYWFhISDg4SEg4OCgoKCgoOCgH99fXx7e3t8fH1/gYKDhISEhISEhISDg4KAfn5/fn59fn+AhIWGhIOAfn1+goGDg39/fn6Af318fHyAf39/fn1+fn5/gICAf4GCg4J/f35+fn19fXx9fH18fn+BgYKCgoKCgX9/f35/gICAgH99e3x9fn5/gYGAf39/fnt+fn+BgYGCgoGBgYB/gICAgICAgH59e3t+fn19fHt6eXh4eXl5e3t7eXl5eXl5eXl7e3t7e3x8fYCCf3p3eXt8fHx7fX6AgoGBgH9/f39+fn99enh4eXt9f39+fn9/fn5/f39/f39/f39/f39/fn5+fn5+fn19fX2AhYiIhn96eXp6fHx7e3t6enp6ent7e3t7fHx8fX1+fn9/f4GEhYmIiIeDgYCAgYKDg4SEhISEhIaFhoaFhoSDhISDgoGBgICAg4KBgYCBgH99fXx8foCBg4KDg4SEhISEg4OCgX9/fn5+fn6AgYGEhoWCf31/gICBgYGAf35+fn1/g4OBfX1/fn9/fn59f35/fn59f4GCgH9/f399fn9+fn98fX5+foCBgYGCgoKBgH9/f3+AgICAf316e3x9f3+AgYKAf359fH9/gIGCgoKAgYGBgICAgICAgICAfn18fH9/fn18e3p4d3d3eXp6e3t6enp6eXl6ent7e3t8e3t8foB+end5e318fHt9foCCgYB/f39/f35+f317eHZ4e3x/f35+f39+fn9/f39/f39/f39/f39+fn5+fnx8fX19fYCFiIiHgHp5enp8fHt7e3p6enp6e3t7e3t7fHx9fX5+f39/goSHioqKiYSDgYGDgoODhISFhISEhoaGhYWGhIOEhIKBgIB/f3+BgYKCg4OCg4B+fX1/gYKDg4OEhISEhISDg4J/fn5+fn5/gIGCg4WEg4B+fYGDg39+gX9/fn19en2Dg4F9e31+fn18fXx9fHt8fH19f4CAgH9+fnx8fXx9fX5+fn5+f4CAgIGCgoGAf39/f4CAgIB/fXp7fX5/foCBgoGAf35+gICBgYODgoCAgICAgICAgICAgIB+fX19gH9/fXx7enh3d3d5enp7e3p6enp5eXp6e3t7e3x7e3x+gH56d3l7fXx8e31+gIKBgH9/f39/fn5/fXt4dnh7fH9/fn5/f35+f39/f39/f39/f39/f35+fn19fHx9fX19gIWIiYiBe3l6enx8e3t7enp6enp6enp6e3t8fH19fn5/f4CChYiKiomIhYSDg4SEhISEhIWGhoWGhoWEhIWEg4ODgH9+fHt7foGBgoOFhYaFg39+foCBg4ODg4OEhISEhIOCgX9+fn5+f3+BgoOEhIKAfn1/gYGBfn5/fn9/fn13en9/gH17fn58fH1+fHx7ent7e31/f39/fn19fXx7e3p7fX19fn5/f39/gYKBgX9+fn5+f39/gH99ent+f35+gICBgX9+f4CAgIGCg4OCgIB/gICAgICAgICAgH59fn6AgIB+fHt6eHd3d3l6ent7enp6enl5enp7e3t7fHt7fH6Afnp4ent9fHx7fX6AgoGAf39/f39/fn99e3h3eXx9f39+fn9/fn5/f39/f39/f39/f39/fn5+fHx8fH19fX2AhYmJiIF7eXp6fHx7e3p6enp6enp6enp6e3t8fX1+fn9/gIOFiYmKiIaIhYSEg4OEhIaGhoaGhoeHhYSEhYSDgoKAfn15eHh8gYGCg4WFh4iEgYB/gYGChISEhISEhISEg4KAf35+fn9/f4GDhISEgH99fYCBfn9+f39+f39/fXZ4fX5+f3+AfXt9fX17fHt7ent8f3+AgIB+fX59fHt5eXp8fHx9fn5/f4CBgoGBgH9/f3+AgICBf316e36Afn5/gIB/fX2AgICAgYKDg4KAf36AgICAgICAgICAfn1+foCAgH58e3p4d3d3eXp6e3t6enp6eXl6enx8fHx8e3t8foB+enl7e318fHt9foCCgYB/f39/f39+f317eHh5fH5/f35+fX9+fn9/f39/f39/f39+fn5+fn59fXx8fHx9fYGEiYqJgnt5ent7e3t7e3t7e3l5enp5eXp7fH18fH5+f3+Ag4aHiYiIhoaHiIiGhoeHhoaFhYSEhoWEhYWFhYSDgH59e3h2dXp/goODg4WHiIeFg4KBgYKEhISEg4OFhIKCgIB+fn9/f4CBgoOEhIF9e3h6fX59fXx+fn6AgX13dHd8foCBgH17fX18ent6enp7e3t9fn9/f359fnt7e3l5eXl4enx9fX1+gIGDgoB/fn5+f4CAgYF/ent8f4GBgICBf39+foGAgYGCgoSEg4B9fX5/gICAgICAgIB9fHx+gIB/f317eXh4eHh4ent8fHp6enh5eXl5e3t6fHx8fHx+f3x5eHt8fHt7e31+gIGBgH9/f39/f39/fXp3eHp9f39/fn59f35+f39/f39/f39/f35+fn5+fn19fHx8fH19goWKjIiBe3l6e3t7e3t6enp6enp5eXp6ent7fHx8fn5/f4CDhYWIh4aHhoiJiYiIiIiGhoWFhIWGhYSFhYWDgoF/e3h2dHN1en+Cg4KChIWHh4aFhIODg4SEhISDg4SDgoKAgH9/gICAgYOEhIWEgHx3dXZ6e3t6e31+e3x9e3V0eX19f35+e3x8fXx7fHt6ent8fHx+f358fHx7eXp5e3l6eHd6fH19fX1+f4ODgH9+fn5/gICBgX96en1+gIKCgoJ/f4CAgoCAgYGDhIOBf3x9fX6AgICAgICAgH18fH6AgH9/fXt5eHh4eHh6e3t7enp6eHl5eXl7e3t8fX18fH5+fHl4e3x8e3t7fX+BgYGAf39/f39/f399end4e35/f39+fn5/fn5/f39/f39/f39/fn5+fn5+fX18fHx8fX2BhImLiIF7eXp7e3t7e3p6enp5eXp6eXl6e3p7fHx+fn9/gIOFhYWFg4WGiImJiIiHh4eHhoaGh4aFhIWFhYKBf3t4dXNycnV6f4KDgoGDhIaGhoaFhYSEhISEhIODgoGBgYCAgICAgIGChISFhYSAe3RydHh4d3h5en96dnl6eHl8fHx8ent6fHt8fHx8enp6eXp8fHx+fXt6fHt5eXl7enp4eHt8fX5+fX5/goKAf35+fn+AgIGBf3p6fX6Ag4OEg4CAgIGBgIGAgYKDgoB+e3t8foCAgICAgICAfXx8foCAf399e3l4eHh4eHp7e3t6enp4eXl5eXt7fH19fXx8fX18eXl8fHt7e3t9f4GBgYB/f39/f39/f316d3h7fX9/f35+foB+fn9/f39/f39/f39+fn5+fn59fXx8fHx9fX+Ch4mJgXt5enp7e3t7eXl5eXp6enp6enp7ent8fH5+f3+Ag4SEhYOChYaIiYmJiYiIiIiGhoeHhoaEhYWEgoB9d3RycXFxdXp/goOCgIKChYaGhoaFhISEhISEg4OBgICAgICAgICAgoOEhoWGg355dHNzdnZ2d3h6fnx1dHh+fn97enl5eHt9ent7enp6eXl5eXp6fH18fHt7e3l5enx7e3p6fX9+fn9/fX6CgoB/fn5+f4CAgYF/enp9foGEhYWDgoCAgYGAgICBgoKBf316enx9gICAgICAgIB9fHx+gIB/f317eXh4eHh4ent6enp6enh5eXl5e3t8fX19fHx9fXx5eXx8e3t7e32AgoGBgH9/f39/f39/fXp3eHt9f35+f39/f35+f39/f39/f39/f35+fn5/f319fHx8fH19f4CFiYmDfnt7e3t6enp5eXl5enp6enp6enl6e3t8fH1+f4CBg4SEgoOEh4eIiIiJiIiHhoeGh4iGhoaGhYOCf3h0cHBxcXF1eoCDhIF+gIGEhoWFhoaEhIWFhYSDgoCAf4GBgYGBgoKDhIWFhYWCfHd0c3R2dXR1dnl/fnp3eH+DgHt4eHd5enx7e3p4eXp4d3l5eHh6fHx8fXt7ent8fn19fH1+f359fn9+f4GAgIB/f39/gICAgH56en2Bg4ODg4GAgIGAgICAgoGEg4B9fHt7fX6AgIGBgIB/fnx7fX5/f4CAfXt5eXl5eXl5enp6eXl6enl5eHp7fHx9fXt6en19e3l6e3x6e3t7fYCBgoCAgH9/f39+fn99end4e35+fn5/f39/f35/f39/f39/f39/fn5+fn5+fX18fHx8fX1+gIWIiYWAfXx8e3p6enl5eXl6enp6enp6eXp7e3x8fX5/gICCg4SBg4SGhoaGhoiJiYiHiIeIiIeGhoWDgoB8dXJxcXJycnZ5gIOEgH19f4KDhIWGhoWFhYWFg4KBgICAgYGBg4OEhISFhYWFhYB7dnV0dXZ1c3N1eX1+fXl5fYKAfXh3dnh7fHt7eXh6ent6e3p4eHl8fHt8fHt7e31/fn19f35/fn5/f3+AgYB/f39/f3+Af39/gH1/gYODg4GAfn+AgYB/f4CCgYOCgH18e3t9gICAgYGAgH9+fXx9fn9/fn59e3l5eXl5eXl6enp5eXl5eXl4ent8fH19e3p7fX17enp7fHt7e3t9gIGCgH9/f39/f35+f316d3h7fn5+fn9/f39/f39/f39/f39/f39+fn5+fn59fXx8fHx9fX1/hIeIhYJ+fXx8e3p6eXl5eXp6enp6enl4eXp7fHx9fn+AgIKDgoKDhIWFhYWEhoiIh4iHhoeHhoWEg4GAfXdzcnFxcnJzdnh/g4SBfXt9f4GDhIWFhYWFhYSCgYCBgYGDg4OEhIWFhYaFhIaEfnl3dnR1dnZ0c3R3fH18fHp9fn17eXd2eHp8e3p4d3p7fX19fHp6eXx8fH18fHt8fX9/fn5+fn59fX+AgIGBgH5+fn5/f4B/f35/f4KEhISDgX9+fn+BgH59f4GCg4J/fHx7fH2AgICBgYCAf35+fX1+f399fX17eXl5eXl5eXp6enl5eHh5eXh6e3x8fX17e3t8fHt6e3x8e3t7e32AgYF/fn5/f39/fn5/fXp3eHp+fn5+f39/f39/f39/f39/f39/f35+fn59fX19fHx8fH19fX+Dh4eGg4B+fX17enp5eXl5enp6enp6eHh5eXt8fH1+f4CAgYKBgoOEhYWEhISFh4eGiIeGhoaFhISDgH96dHJycnJzc3N1eH6DhIJ9e3t9f4GDhISEhIWFg4KBgIKCgoODg4WFhYWFhoWEhYN9end4dHV1dnV0dXd6fHx8fH5+fXp7eHZ4eXt7eXZ2eXx+fH5+e3t7fXt6e3t8fHx9fn5+fn1+fn19f4CBgYGAfn59fX9/gICAf4CAgoOEg4KBf35+f4F/fHl9gIKDgn97enx8fYCAgIGBgIB/fn59fX5/f35+fXt5eXl5eXl5enp6eXl4eHh5eHp7fHx9fXx7e3t8e3p7fHx7e3t7fYCBgX9+fn9/f39+fn99end4en5+fn5+fn9/f39/f39/fn5/f39/fn5+fX19fX19fXx8fHx8foGFiIaFgoB+fHt5eXl5eXl5eXl5eXl5eXp6enx9fX5+gICAgICBg4OEhIODhIWHh4aHh4aGhoSDg4F/fHdzc3Nzc3JzdHV4foKEgn97enx+gIGCg4WFhoOCgoGAgoKFhoWFhYWFhIWFhYWFgn56eXl2dHV2dXNzdXl6fH2AgX57e3p5dnZ6e3p4dnR2fH5/f39+enp8enl6ent7fX1+fn5+fX18e31+foCAgX9/fn1+f4CBgYGBf3+AgYKCgoF/f3+AgHx5dnmAgoKCf3t6ent+gICAgICAgIB/fn5+fn19fn58enh4eHh4eHp6enp5eXh4d3h5enp7e35+fXx7fHx8e3p7fHp8fHt9gYGBfX1+f3+Afn19fn55eHh6fn5+fn5+f39/f39/f39+fn9/f39+fn59fX19fX19fHx8fHx+f4OGhoaDgoB/fXl5eXl5eXl5eXl5eXl5enp6fH19fn5/f4CAgIGCgoKCgoKFhoeHh4eGhYWFhIKAf3x4dXJzc3NzcnN0dXh9goSCgHx6fH5+f4GChISFg4KCgoKDhIaGh4eHh4aEhYWFhoSCfnt7end0dXZzcnN1d3h8f4ODf3t5end1dnh5eHd1c3N1eXt9fX17enp6eXl7fHx9fX9+fX18e3t7fH5+fX2Af39/f39/gIGBgoKAgIB/gIGBgX+AgIKAfHVzeIGCgoJ/e3p6fH6AgICAgICAgH9+fn5+fX19fXx6eXl4eHh4enp6enl5eHh3eHl6ent7fn59e3p8fHt7ent8enx7e36BgYB9fH5/f39+fX1+fnl4eXt+fn5+fn5/f39/f39/f35+f39/f319fX19fX19fX18fHx8fH1+gYWFhYWEg4F/e3p5eXl5eXl5eXl5eXl6enp8fX1+fn9/gICAgIGBgoKDg4aHh4eHh4WEhISCgH57eHZ0c3R0dHRzdHV2eHyBhISCfnt8fX1+f4GCgoOEhISDhoeIiYiHh4iIh4aFhISEg4F+e3t5d3R0dXJxcnV2eXyAg4OAfHl4d3Z0d3l3dXNxcHF0dnl7fH18e3p5eXx8fH19f399fHt8e3x9f39+fn59foCAf39/f4CBgoKCgYCAgICAf39/gIF7c3J5gYKCgn97ent9foCAgICAgICAf35+fn58fHx8fHp5eXl5enp7e3p6eXl4eHd4eXp6e3t+fn16eXx7e3t7fHx6fHt8f4GBfnt7fX9/fn19fX5+e3l6fH5+fn5+fn9/f39/f39/fn5/f39/fHx9fX18fHx8fHx8fHx8fX1/goSEhoaFg4B+e3t7eXl5eXl5eXl5eXp6enx9fX5+fn6AgICAgICDg4WFhoiHh4eHhIOEg4B+enh4dnV1dXV0dHN0dXZ4fIGEhIN/fX19fn59f4GBgoWEhIWIiYqKiYeHiIiHhoWEg4OBgHx7enl3dHR1cnJzdHZ5fYGDgoB8eXh3dXV2dnV0dHFxcHJ0d3p7fHx9fXx8fX19fn5/f359e3x9fX5+fn5+fXx+gH9/fn59foGAgYOCgICAf4B/f32AgXx0cnmCgoKCf3t6fH1+gICAgICAgIB/fn5+fnt7fHx8enp6enp6enx8enp5eXh4d3h5enp7e35+fnp5e3t7enx9fHp8e32AgYF8eXt8f39+fX19fn57ent8fn5+fn5+f39/f39/f39/f35+f399fX19fXx8fHx8fHx8fHx9fX6Ag4OFiIeFg399e3p5eXl5eXl5eXl5eXp7e3x+fX5+foCAgICCg4SGh4eIiIeGhYSEg4GAfnp4dnZ3d3Z2dnV1dHV2dnd8f4SEg4B/fX5/f35/goOEhoWHiouMjIqJiYiJiYiFg4KBgYCAfHt6end0dHZ0dHR2d3l+gISCf3t5d3Z0dHRzcnJzcnJ0dHR1dnp7fX1+fn19fn9/f4B/fnx8fX5+fX19fH58fH5+f35+f35+f3+AgYKBf4CAgH9+fYCAfHNze4KDg4J/e3p8fX6AgICAgICBgIB/f35+fHt8fHx7eXl5eHl5e3t6eXl5eXh3eHl6ent7fn58e3p7e3t7e3x7e3t8fn+Cf3t6fH5+fn5+fX1+fnx6e31+fn5+fn5/f39/f39/f39/fn5+fn19fX18fHx8fHx8fHx8fH19fX6CgoSHh4aFgn98enl5eXl5eXl5eXl5ent7fH19fn5+f4CAgoSFhYiJiYmHh4WEg4KBf318eHd2d3h5eHZ2dXV1dXZ2d3t/g4WDgn99foCAgYCAgIKEg4aJi4uLh4eIiImJiIWCgIB/fn59e3t7eHZ2d3V0dXd6e3x+gIB9enl1dXR0c3Bwb3F1dXV2dnV0eHt9gICBgH5+f4B/f359fH1/f359fX17fX19fn5/fn5/f39/fn5/gYCAgICBgH58f397c3V8goSEgn98e3x9foCAgICAgIGAgICAf398e3x8fHt5eXl4eXl7e3p5eXl5eHd4eXp6e3t+fnx6eXt6e3t7fHt7e31/gIJ+enp9fn5+fn59fX19e3p8fX5+fn5+fn9/f39/f39/f39+fn5+fX19fXx8fHx8fHx8fHx8fX18fYCAgoWGhoeEgH17eXl5eXl5eXl5eXl6e3t7fH1+f3+AgYSFh4iIiYmJiIaFhIKBgH58enl3dXZ3eXl5d3d2dnZ2d3d4e3+ChISDgH5+gH+Afnx8f4CBgoWHh4eFhYeHh4eGhoN/fn59fXx7fHx6eHd3dHV0dnt8eXl8fXx6eHRzdXVzbmxtcXd3dnZ3dnN2en6Bg4OCgH5/gIB+fXx8fn+Af35+fn5+fX5/f39+f39/fn59fn9/gIB/gIB/fHp8fXp1d36ChISCf318fH1+gICAgICBgoKCgYGBgX9+fX19fHl5eXh5eXt7enl5eXl4d3h5enp7e35+fHp5enp7ent8e3t7fX+AgX54eXx9fn5/f319fX16eX1+fn5+fn5+f39/f39/f39/f35+fX19fX18fHx8fHx8fHx8fH19fH19fn6AhIWHiISCfnt5eXl5eXl5eXl5eXp7e3t8fX5/f4GChoeIioqJiIiHhoSDgYB/fXp5dnZ2d3d5eXl4eHd3d3d4eHl7f4KDhYOBfn6Af3x5eXl7fX5/goODg4WFhYWEhISEg4F9fX19fHt+f3t5dnV0dXV2eXt3dnl7enh3dHN0dHRwa2xxdnh3dnh3dHZ6foCBg4OBf39/gH19fHx/gIGBgICAgH9+f4CBgH5/gH58fHx9fn9/f35/f397eHp9enh6gIKEhIJ/e3p8fX6AgICAgIGDhISDg4OEgYB/f318enp5eHl5e3t6eXl5eXh3eHl6ent7fn58eXh6enp6e3x7e3t9f4GAfHd4fH1+foCAfX18fHp5fX5+fn5+fn5+fn5+f39+fn9/fn58fHx8fHx8e3x8fHx8fHx8fX19fX19f3+Cg4WHhoaCfHl5eHh4eHd3eXl5eXp6e3x+f4CChIaJiYqJiIeHhoWEgoF/fn17eXh3d3d4eHh4eHd3d3d3d3d4eXt+goOEg4KBgIF9d3V3eHh4e31+gIGBhIWFg3+AgIKFhoKAfn9/fX+CgXx3dXV2dHd4eHNxdnh5eXd1c3R3d3BpaXB2eXh4eXh3dnl8fn+Bg4OCgH9+e3x+fX+Af4CAf4GBf35/goJ/f35+fHp6fH19gH98fHt8fXx7fH17enuAgoOEgoB9fH1+f4CBgYGCgoOFhYSEhIKCgYCAf358e3l5eXp7e3l4eHh4d3d4ent6enx/fnt5eXp6eXt7e3t7e3yAgX96dnl8fn9/f39+fXx4eHl9fn5+fn5+fn5+fn5/f35+fn5+fnx8fHx8fHx7fHx8fHx8fHx9fX19fX19fYCBhIaHiIN+enl4eHh4d3d5eXl5enp7fYCBgoOGiIqKiYiHhoWFg4GAf3x7eXp4eHl5eXl4eHl5eHh4eHh4eHl5e32Bg4SDg4KBgHx1c3R1d3Z4ent9f3+BgoKBfn9/g4WGhYOCg4F+gISCfXh2dnZ0dnZ1cG5ydXh6d3V0dHZ3b2ZmbXR4eHl5eXh3d3p8fH6Bg4J/fX16fH5+f4CAgICAgYB+fn6BgX59fHx7ent8fXx9fXt7ent8fH5+fnx7f4GCg4WEgn9+fX5/gIGCg4SEhISEg4ODgoKCgoKBgIB+e3l5ent7eXh4eHh3d3h5enp6fH9+e3l5eXl5e3t7e3t7fICBf3p2eXx+f39/f359e3d2eX1+fn5+fn5+fn5+fn9/fn59fX5+fHx8fHx8fHt8fHx8fHx8fH19fX19fX19fX+ChIeIhoB8enp6enp5eXl5eXl6enx+gYOEhoiIiomIhoWEg4OBgH18e3p4eXh4eXl5eXl5eXl4eHh4eHh4eXl7fYCDg4SDgoF9e3d0c3J0dXZ3eHt8fH1+fn2AgYGDg4SGhYaFg4CAhIJ9eHV2dnRycnJua25zd3t5dnR0dHVvZWNqc3d4enp6eXh2eHt7e3+BgX17enp9f4GCgYCAgIGBf319fX5+fXt6ent7fH5+e3p6e3x8fHx8gIB/fX2BgYOEhYSDgH5+fn+BgoKDg4ODgoGCgYGAgICBgYGBgYB+e3p6e3t5eHh5eHd3eHl6enp8f357eXh4eXl6e3t7e3t8gIF+eXZ5fH5/f39/fn17d3Z5fX5+fn5+fn5+fn5+f39+fn19fn58fHx8fHx8e3x8fHx8fHx8fX19fX19fn5+gICDhYiIgn56enp6enl5eXl5eXp6fX+Dg4eIiImJiIeEg4KCgYB/e3t6eXl5eXl6enh4enp6enl5eXl5eXh6eXt8gIODhYSCgX58e3ZycHF0dXR2eXt8e3t7fYKDg4OCg4WFh4WDgYCEg315dnd2dXBvcG1rbnJ3e3x6dXRzc29lY2tyd3h6fHx7eXd2eHl3e4CAfnx5e32Ag4OBgICAgYGAfnt8fH58enh4ent7fX17eHl6fHx7fH2AgoB+foGBg4SGhISBf39/f4KDgoOEhIOAgIGBgoCAgIGBgoKBgoF+fHt7e3l4eHl4d3d4eHl6enx/fnt4eHd3eXp7e3t7e3yAgX54dnl8fn9/f39+fnp3d3l9fn5+fn5+fn5+fn5/f35+fn5+fnx8fHx8fHt7e3t8fHx8fHx9fX19fn59fX1+gIKGiIeEgX17enp6enp5eXl6e3yAgoWGiIiHh4eGhYKBgYCAfXx6ent5enp6enl5eXl6enp6eXl5eXl5ent6e3t/gYKDgYF/f399d3Btb3R1cXR5eXt7enx+gYKEg4OEg4ODg4KAfoGDgXl3d3V1cGttbmttcXd9fXl1dHRzb2hna3N3eXt8fHt6eHd3d3R4f4GAf3t6e36BgoGBgICBgYB+e3x8fXt4dXZ4ent9fHh3eHt8fnx+foCCgH6AgYCBhIaGg4B/gICAgoSEgoOCgYB/gICBgH+BgICBgYOCg4B9e3p5eXl3d3h4d3h5enl6fH9+fHh3d3d5e3t7enp8fYCCfnp2eHx+f39/f39+e3Z1eH1+fn5+fn5+fn5+fn9/fn5+fn5+fHx8fHx8e3t7e3x8fX19fX19fX1+fn19fn2AgoSIh4WDf358fHp6enl5eXp9foGEh4iIh4aFhISCgX9/fn57e3p7fHt7e3p6eXl6enp6enp5eXl5enp7e3p7fH9/gIGAf358fHpybmtvdXRvcXd5fHt7fX6BgoSDgoSDg4GBgoB+gYKBfHh3dnVva2tvbGxtdXt5c3JydHNwa2ttdHd5e3x8e3t4eHd2dHd+goSCfXp7foGCgYKBgICAgH58e3t9fHh3d3h6fHx5eXp6e31/foCAgYGBf4GAgIKEhYaDgICBgYGCgoOCgoGBgH9/f39+fX9/f4CBgoKCgX98e3l5eXd3eXh3eHl6eXp8f398eHd3d3l6e3t6enx9gIJ/e3d5fH5/f3+AgH55dXZ5fX5+fn5+fn5+fn5+f39+fn5+fn58fHx8fHx7e3t7fHx9fX19fX19fX5+fn5+foCBhIeIhoSCgoGAfnx8e3t7fH6Ag4WIh4eGhYSCgYB/fXx8fHx7e3x8fHx7e3t7e3p6e3t6enl5eXl7e3t7e3x/gIKCgH9+fn9/eHJsaW5zcm5wdXh8e3t9f4GChIOBg4ODgoKCgH6BgYF9eXd3dW5taXBvbW5yd3RubnB0dXJubG90d3l7fHx7e3l4d3ZzdXmAhIOAfnx/goOCgYB/gIF/fXx7e319e3x5eXp7e3h7fX59f4CAgX+AgYGBgoGAgoOFh4SBgYGBgYGBgoKCgoGBgICAf318fn5+f4CAgIGBgX58enl5eXl4d3d4eXp5enx/f3x4d3Z3eXp7e3p6fH2AgoB8eHp8fn9/f4CAfnl1dnl9fn5+fn5+fn5+fn5/f35+fn5+fnx8fHx8fHt7e3t8fH19fX19fX19fn5/f35/gIGDhoiJhYSEg4GAf398fHx9f4GEh4eGhoWDgoB/fnx7ent7fHx8fXx8fHt7e3t7e3t8fHp6eXl5eXl5e3t7fX6Bg4SBf3+AgYF7cWpoa3Byb3B1eX19fX+AgYKEg4GCg4OCgoB/fYCAf356eHd0bWxobnBubnFzcGxrcHR2c29tcXV3eXp8fHt7eXh3dnNxdXyAgoKBfoCDhIKBgH9/gH9+fHt7fX19f3x6ent7eXt/gH6Af3+Af3+AgYGCgYGDg4WGhIGBgYCAgICBgYKCgoGBgYB+fXx+fX1+fn+AgICCgHx7eXl5eXd3d3h5enl6fH9/fHh3dnZ5ent7enp8fYCCgHx5fHx+f39/gIB+eXV2eX1+fn5+fn19f39/f35+fn5+fn19fHx8fHx8e3t7e3x8fX19fX19fn5+fn9/f39/f4GDhoiGhoaGhYWCgX59fX+Cg4WHhoWEg4F/fX18e3t7fHt9fXx9fHx8fHt7e3t7e3t7e3t5eXl5enp7e3x+f4KEg4GAf3+DgnxybGpsbXJ0dHd6fX19f4GBgoOBgYGBgYCBgH18gIKBfnp4dnJtaWdscXNzcm9tbGxxdXZzcG5ydXd4ent9e3p5eXh2dHBwdXp+gYF9f4OEg4F/f4CBgH99fH19fX5+fXl4e3t7fH+AgICAgIB/fn+BgoKBgYKDhISEgoCAgICAf4CCgoKDg4ODgX99fX18e3x9fn6AgYGBfnt5eXh4dnZ3eXl5ent9gIB8eHd2dnh6enp6ent9gIKBfnp8fX5/f35/fnx5dnd6fn99fX5+fn5/f39/f39+fn5+fX18fHx8fHx7e3t7fHx9fX19fn5+fn5+f39/f39/gIKFhoeGh4eHh4OCgH+AgYSFh4eGhIOBf3x7e3p7fHx9fX19fH18fHx8e3t8fHx8fHx8fHt7e3t8fHx8fH6Bg4SCgoGAgH59enFsaGttc3h6enx+fX6AgIGBgYGBgH9/gIGAfXyBhIJ/e3h2cWtoZmxxdnZycG1sbnF0dnVycHJ1d3h5e3x7enl4eHZ2cnJydnp7enp9goOCgX9/gIGAgH5+gH5+fn59eXh8fX5+gIGBgICAf35+f4KCgoGBgYKDgoKBgICAgICAgYKDhIWFhoaEgoB/fn18ent8fX6AgIGAfHl4d3d2dnd5eXl7e32AgHx4dnZ2eHp6enp6e32AgoF/fH19fn9/fn9+fHl2d3x+fn19fn5/f39/f39/f35+fn59fXx8fHx8fHt7e3t8fH19fX1+fn5+fn5/f39/f39/gIKEhoaGh4iIhoSCgYKEhYaGhoSCgX98enp7e3x9fX19fX18fXx8fHx8fHx8fHx8fHx8e3t7e3x8fHx8foGDhISGhIGAfXt5c2xoaWtye399fn5/gH9/gICBgYB+fn2AgX98fIGFg4B8eXZvaGVlbHJ2dnRxbm5ucXJ1dXNydHV3d3d6e318end2d3h2dHR2d3h3d3yAgoKCgICAgICAgICBgH59fX16en1/gH6AgIGAgIB/fn5/goKCgYGBgoKCgoGAgICAgICBgoOEhoaHh4aEgn9+fXx6eXt7fH+AgYB+enZ3d3Z2dnh4eXp8fYCAfHh1dnZ4enp6enp7fYCCgYB8fX1+f39+f358eXZ4fX19fX1+fn9/f39/f35+fn5+fn19fHx8fHx8e3t7e3x8fX19fX9/fn5+fn9/f39/f35/gYKFhoaIiIiIhoWDg4WFhoSEg4B/fXp6e319fX5+fn59fXx9fHx8fH19fHx8fHx8fHx7e3t7fHx8fH1+goSFh4eEgoB/f3p1bWhoanJ8gH9/gICAf39/gICAf35+fYCBf3t8gYWDgHx5dW9nY2Vsc3Z2dnNwb3BycXN2dHV1dXZ2dnp7f315dnZ4eHh1c3V4eHh3e3+CgoKBgICAgICBgoGAfn18fXx7f4GAfn9/gYCAgH59fn+CgoKBgoKBgoGBgoGBgYGBgYKChISGhoaHhoOBf359fHp5eXh7fH+AgX97dnZ2dnZ2eHh5ent9gIB9eHR2dnh6enp6ent9gIKBf3x+fX5/f35/fnx5dnl9fX19fX9/f39/f39/fn5+fn5+fX19fXx8fHx7e3p8fHx9fX19f39/f39/f39/f39/fn6AgIOEhYaHiImJh4WEhYSEhIKBf3x7enp7fH5+fn5+fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx9fXx8foKFhIeIhoSDgoGAfntzbGtsdX6BgICCgX9/fn19f4B/fn99f4B9enyBhYSCfHl0bmZgZW1ydHd3dHFxcnNydHV1c3N0dXR0eXp9fXh0dHV3eHdzdHd3d3h8f4CBgYCAgICAgICAgH5+fXx8enp+fn6AgH6AgIB+fXx8f4KCgoKBgYCBgoKBgICAf3+CgoKFhYaHh4aEgoF+fn58e3p6eXp8f4CBgXx4d3Z2dnZ4eHl7en2AgH14dHR3eXp6enp6e36BgH9+fX5+fn5+fn59e3l3eXx9fn5+f39/f39/f39+fn5+fn59fX19fHx8fHt7enx8fH19fX1/f39/f39/f39/f39+fn9/gICCgoWGh4eGhYWFhISDgX98ent6e3x8fn5+fn59fX19fHx8fHx8fHx8fHx8fHx8fHx8fH19fHx/g4WEiIiHhYOEg4KBfXp1b3B3f4GAgYGCf319fHx+gIB/f318fn16e4CDg4N9enRuZmBmbnN0d3d1dHN0c3N0dXZ0dHV0cXN3eHx8d3JydXZ5d3N0dnZ3eHt9foCAgICAgICAgICAf398fHx6eXl4d3l8foCAgH99fH1/goKCgoGBgIGCgoGAf3+AgIGBgYSFhoWFhoSCgH19fn17enp4d3p9f4GCfHp4dnZ2dnh4eXp6fYCAfXh0dHd5enp6enp7f4GAf319fn5+fn5+fn17eXd5fH5/gIB/f39/f39/f35+fn5+fn19fX18fHx8e3t6fHx8fX19fX9/f39/f39/f39/f35+fn5+gICBg4SGhoaFhYWDgoF+fHt7fHt9fX1+fn5+fn19fX18fHx8fHx8fHx8fHx8fHx8fHx8fX19fYCDhIWJiomHhYSEhIF/fXp0c3d9gX+AgIJ+fXt7e3x+gIB+fHp8fHl7gIKDhH96dG5mYmZtc3Z4eHd3dXV0dHV2d3Z2dXRxcnV2enp3cnFzdXh2dHR2dnd3enx9foCAgICAgICAgIB/fn19fXp5e3l2dnV5fH5/f318foCCgoKDgYCBgYGCgYGAgIGBgYGChIWFhISFg4F/e3t8fXp5eXh3eXt+gYJ+e3l2dnZ2eHh5ent+gYB9eHR0d3l6enp6ent/gYB9e3x+fn5+fn5+fXt5d3l8f4CBgX9/f39/f39/fn5+fn5+fX19fXx8fHx7e3p8fHx9fX19f39/f39/f39/f39/fn5+fn5/fn6CgoWFhIODg4F/fnt8e3t8fHx9fX19fn5+fX19fXx8fHx8fHx8fHx8fHx8fHx8fHx9fX5+gYWEhomLioiHhoSEgYGAfnl1eH2Af39/gn58enl5e31/gH58enx7eHp/goWFgnp0bmVkZW1zdXd3d3d3dnV1dHZ2d3h3dnFydXd4eHVwcHJ1d3R0dHR2d3h5e3t9fn+AgICAgICAgH5+fX5+e3t9enl2cnJ3fH9/fXx+gYKCgoOBgIGBgYGAgIKCgYGBgoKDhIWGhYSCgHx6enp7e3l5eHh4en1/gYB9eXZ2dnZ4eHl6e36BgHx3c3R3eXp6enp6e3+BgHx5e3x+fn5+fn59e3l3eXx/gIODf39/f39/fn5+fn5+fX18fHx8fHx8fHx8e3x8fH5+fn5+fn5+f39/f39/f39/f35+f39+fX5/gYKDg4KBf358e3t7fH19fX5+fn5+fn19fHx8e3x8fHx8fHx8fHx8fHx8e3x9fX5+fH+BhoiIiYuLioeFhYOBgIKCfnl5e35+fn+Cfnp5eXp6fX+AgH5+fXt4eoCFh4aAenRuaWVmbnJ1dnZ4eHh1dHR0d3h5enp4dHJ1d3d2cnBvcnR0cnJydHV2eHp5enx9f4CAgICAgICAf319fX59foB+fXt2cm90fYB9foCCg4OEg4GAgYGAf3+AgYGBgYKCgoOEg4OChIN/fHl5eXl6eHh4dnZ6fX+BgX94dnR0d3h4eHl7foCAenVzdHd5enl5eHp9f4F+e3h6fX9/f318fHx6eHd5fICAg4V/f39/f39+fn5+fn59fXx8fHx8fHx8fHx8fHx8fn5+fn5+fn5/f39/f39/f39/fn5/f359fX2AgYKCgYB9fHt7e3t9fX1+fn5+fn5+fX18fHx7fHx8fHx8fHx8fHx8fHx7fH5+fn59f4SHiYWEiIqLiYaFgoKCg4WEfnp5fX9/f4F9enp5eXl7foCAf399end5gIaHhoF6dG9qZmducnV2dnh5eHZ1dHV3eHl7fHp2dHZ4d3Vwb25wcXFwb3J0dXd5enl5e31/gICAgIB/gIB/fn19fn9/gIB/fnx3c3R4fn+AgoKDg4SCgICAgIB/f4CBgYGBgoKCg4SDg4KDgn57eHh4eHl4eHh2dnl7foCCgXx4dXV3eHh4eXt+gIB6dXJ0d3l6eXl4en1/gH15d3p9f39/fXx8fHp2eHt/g4OEhX9/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fHx+fn5+fn5+fn9/f39/f39/fn5+fn9/fXx8fH5/gIB/fnt7enx8fH19fn5+fn5+fn59fXx8fHt8fHx8fHx8fHx8fHx8fHt8fX19fX6AhoqGf4CEi4uKhYSEg4OFh4iEfHl7gICAgHx6eXl5eHp9gICAfnx3dXiBhoeGgXp0b2pmZ25ydXZ3d3h4dXR0dnd4eXx9eXd1d3h3dHBubm9vb25vcnN1d3l6eXp7fX+AgICAf4B/gH9/fn5+f4CBgICAf3x5dXR5f4CCgoKCg4GAgICAgH9/gIGBgYGCgoKDhIODgoKAfnp3d3Z3eHd4eHV2eXt9gIKBfXh1dXd4eHh4e36Af3l0cXR3eXp5eXh6fX+AfXh3enx/f39+fX18eXZ5gIGFhYOCf39/f39/fn5+fn5+fX18fHx8fHx8fHx8fHx8fH5+fn5+fn5+f39/f39/f399fX5+f399fHx7fH1+fn18fHx7fX19fX1+fn5+fn5+fn19fHx8e3x8fHx8fHx8fHx8fHx8e3x9fXx8foGIioN8foOKi4iEg4SCgYSGiod/e3uAg4F/e3p6eXl3eHp+gIB9fHZzeIKGh4aCenRva2dnbnJ1dnZ3eHd0c3N1eHh5fHx5d3Z4eXZzcG5ubm1tbG5ydHV4eXt5ent8fn+AgYGAf39/f39+fn5/gIGDgYCAf312cnR+gIODg4ODgoCAgICBf3+AgYGBgYKCgoOEg4OCgoB9e3Z2dnZ4d3h4dnZ4enx/gYJ+end1dnd3d3h7foB9eHRxdHd5enl5eHp9f4F9dnZ6fX9/gH59fHx5eHyBg4WFg4F/f39/f39+fn5+fn5+fn19fHx8fHx8fHx8fHx8fn5+fn5+fn5+fn5+fn5/f35+f39/f359fXx8fXx8fHx8fHx9fX1+fn5+fn5+fn5+fn59fXx7fHx8fHx8fHx9fXx8fHx8fHx8fH1/gYiIgHp9gYWGhIKBhIOBgIKIioJ8e3+Dg357fHt5eXZ3eX5+fnx6dXJ3gIaIh4N8dW5raGhuc3N0dXh5d3Nyc3V4eXl8fHp4eHl4dnNvbW5ta2hrbXF0dXh6e3t7ent8fX+BgYB/f35/gH9/fn1+gIOEgYGAfnl1dHqAgYKCgoKCgICBg4KAgIGBgYGBgIGCg4SCg4KCgXx5dXV1dnZ2dnV2d3d5enx/gX58eXd3eHh4eHt/gH14c3J0d3h5eXl4e36AgX11dXt9foB/fn18e3h7gYKCgoKDgn9/f39/f35+fn5+fn5+fX18fHx8fHx8fHx8fHx+fn5+fn5+fn5+fn5+fn9/f39/f39/fn5+fH19fHx8fHx8fX19fX5+fn5+fn5+fn5+fn19fHt8fHx8fHx8fHx8fHx8fHx8fHx8fX+EhoJ9fHt8gYOAeXh+gn56eoKJhoF9f4GBf3x7fHp5d3d4fHx+e3l0cneAhYeGhH11bWtnaW5zdHV2eHh2cG1vcXF0dnl6end3eHh1cm9tbGhmZ2ltcXR2eXt8fHt7e3t8f4GBgIGCg4OBgH9+fXt8gIKCgYB/fHt4d36AgYGBgYGAgIKDgoCBgYGBgYGAgYKDhIKDgoKAfHd1dHR1dnZ2dXV2d3h5fH+AgH15dnZ3d3d4e36AfXhzcXR3eHl5eXh7f4GAfHR1e31+gH9+fX18e3+Cg4KBgYKCf39/f39/fn5+fn5+fn59fXx8fHx8fHx8fHx8fH5+fn5+fn5+fn5+fn5+f39/f39/f39+fn58fX18fHx8fHx9fX19fn5+fn5+fn5+fn5+fX18e3x8fHx8fHx8e3t8fHx8fHx8fHx9f4WDfnt9eHh7fXpzc3l8eXV1eoSHg35/fn1+fnx+fXp4d3Z5ent6d3Rxd4CDhYWDfXVta2hqbnN0dXh4d3JrZ2hra25ydHd4dnZ3d3Rxb2toZGRnZ2tydXd6e3x9fHt7ent/gICAgYSFhoSCf359enh6fH1+f319fXp3en+BgYGBgYGBgoOBgIGBgYGBgYCBgoOEgoOCgX97d3Rzc3R2dnZ1dXZ3eXl7fn+AgHt3d3d3d3h7foB8d3JxdHd5eXl5eHt/gX95c3V8f36Af359fHx+g4OCgYCAgIB/f39/f39+fn5+fn5+fn19fHx8fHx8fHx8fHx8fn5+fn5+fn5+fn5+fn5/f39/f39/f35+fnx9fXx8fHx8fH19fX1+fn5+fn5+fn5+fn59fXx7fHx8fHx8fHx7e3x8fHx8fHx7fH1/g4B9ent3dnh6eHNzd3p2cXF1foSEfn17enx9f3+Ae3p4d3h6e3l2c3B3gIKEhIR+dm5raWluc3V2d3h1bWVjY2VpbHBydXV1dXZ3dHFuamVlZWlna3N2eXt8fX18e3p7fH+Af3+AgoSFhoSAfnx3dHR3eHl7e3x+fXh6f4CBgYGBgoKDg4GAgIGBgYGBgIGCg4SCg4KAfnl2c3Jyc3Z2dnV1dnZ4eXp+f4GAfXd2dnZ3eHt+f3x1cnF0d3p7eXl4e36AfXdydnx+foB/fnx7fIGEg4KBgYGAgH9/f39/f35+fX19fX18fX18fHx8fHx9fX19fX1+fn5+fn5+fn9/fn5+fn5+f39/f39/fn59fX19fHx8fHx8fHx+fn9/fn5+fn5+fn5+fn19fXx8fHx8fHx7e3p6e3t7e3x8fHx8fX+AfHp9enN0dHV2dHR2dHFvb292foJ8enl4e36Af358end2dnh5endycXiAgoSFgn13b2tpaGxydXh4d3NoYF5eXmNqb3FzcXJydHRycW1oZGRkaWltcnh8fn5/fn17ent9f4B9e31/gYKEhoB9eXd2dnh2dnR2en19eXh9gIKBgYGBgYGDgYCAgIGBgYF/gIKCg4KCgX98eXZzc3JzdXV2dXR1d3d4en2Af39+eXd3d3d4fH5+enVxcHR3ent5eHh7f4F9dnN4fX5/f359e3x/hISCg4F/f35+f39/f39/fn59fX19fX19fXx8fHx8fH19fX1+fn5+fn5+fn5+f39+fn5+fn5/f39/f39+fn19fX18fHx8fHx8fH5+fn5+fn5+fn5+fn5+fX19fHx8fHx8fHt7enp7e3t7fHx8fHt8fX14eXt4cnR2dnd2eHVybm9vbnF3fnx4dnZ7foB/fn16eHZ2eHl5d3JyeYCDhIaCfXZwbWlpbXJ2eHh3b2JZV1lUWWZvcXNxcnJycW9ua2dlZmZqa21wdXl8foB+fXp6en1/gH16enx+gIOGg356eXl3eXt6eHZ6e3x5d3p/goGBgIGBgYOBgICAgYGAgH+AgoKDgoKBf3x4dXNzcnN1dXZ1dHV3d3h5fH6AgH57eHd3d3h8fn56dXFxdHd6e3l4eHt/gH11dHl9fn5/fnx7fYGEg4KCgH9/f39/f39/f39+fn19fX19fX18fHx8fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f35+fX19fXx8fHx8fHx8fn5+fn5+fn5+fn5+fn59fX18fHx8fHx8e3t7e3t7e3t7e3t7ent8end4endydXl7e31+eXJub29ubnR9fXh2dnp9f4B+fXt4d3d4eXl4dXV6gISFhYJ9d3Fuamltc3Z4dnZvYlVQUU1WZG9yc3FwcG9tbWpraWhnZ2psbm9zdnp9f358enl6fX+Afnt6fH1/gYSGgn57eXd4fX57e319fHd2eX2AgYF/gICBg4GAgICBgYCAf4CCgoOCgoF/fHd0cnJyc3V1dXR0dXd3eHh8fX+Af3x5d3Z3d3t+fnp1cXF0d3p7eXh4e36Ae3Z0eX1+fn99e3yAgoODgoF/fn5+fn9/f39/f35+fX19fX5+fXx8fHx8fHx9fX19fn5+fn5+fn5+fn19fn5+fn5+f39/f39/fn59fX19fHx8fHx8fHx+fn19fn5+fn5+fn5+fn19fXx8fHx8fHx7e3t7e3t7e3p6enp6e316d3d6eHJ1e319gX97c29vb25uc31+eHV2e31/f359e3l4eHh5eHl3d3qAgoOFg315cm1qaW1zdnd1dnFlUktLTVhlbnN0cW9tbGlpZ2pqaWhmaW1vcHN1ent9fXt5eXp9f399e3x9fH+Ag4eGf3x5d3Z7fn59gH9+d3V2eHt+gH5/f4GDgYCAgIGBf39/gIKCg4KCgX98d3RxcXJzdXV1c3R1d3d4eHt9fX+AfXl3dXZ3en5+enRxcXR3ent5eHh7fn97dnR5fX5/fnx6gIODg4OCgH19fX19gIB/f35+fn59fX19fX19fHx8fHx8fH19fH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58fX19e3x8fHx8fH19fX1+fn5+fn5+fn5+fXx9fHx8fHx8fHt7enp7e3t7e3t7e3t8fXl2dXp2b3J4eXt/f310cW9vcG9zfH52dXZ7fX9/fn17enh3eHh3d3d4en+CgoSDgn10bWprb3N1dXV2cWhTS0xTXWhxdHRycG5pZmVlZ2lpZ2VmbXFxc3V3ent7eXh4enx+fXx9fHt8f4GFiImEfnt5dnp9f39/gYB9enRyc3h9fX5+f4OAf4GBgIB/f3+AgoODg4KBgHx2dHFxcnN0dHRzdHZ2dnd3enx8fYB+eXd1dnh7f355cnBxdXh5eXl5eHt/f3t1dHl9fX59e36ChISDg4F/fn19fX1/f39/fn5+fn19fX19fX18fHx8fHx8fX18fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fnx9fX17fHx8fHx8fX19fX5+fn5+fn5+fn59fH18fHx8fHx8e3t7e3t7e3t7e3t7e3x9eXRzd3Vtb3Rzdnp9fHRxcHBvbnJ7fnd1dnt9f39+fXt6eHd4eHd3dnh6foGAf4CCf3dwbG1xc3V2dXVxa1lTU1pja3F0c3Jwb2pnZWVmZmZlZmdtcnJzdXd5enp4d3Z5fH19fX59fH6ChoiLjImEgHx3eHx+f3+AgIB+enZzcnZ2eX1/g4B/gICAgH9/f4CCg4ODgoF/fHZzcXFyc3R0dHN0dnZ2dXZ5e3x9f395d3Z3eHt/fnhycHF1eHl5eXl4e39/eXR0eX19fXx8gIODhIKCgX59fX19fX5+f39+fn5+fX19fX19fXx8fHx8fHx9fXx+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fH19fXt8fHx8fHx9fX19fn5+fn5+fn5+fn18fXx8fHx8fHx7ent7e3t7e3t7e3t7fHx4cW9ycWxtcnNzd3t6dHFxcW9vcXt/eXZ3e3x9fX59fHt5eHh4dnZ1d3l8f357fYCAeXNvcHN0dXZ0dHBrYFpaYWdtcXNxb25ubWpoZmVjY2NkaG5zdHR1eHl6eXd2dHd7fX19f35+f4WIhoaGiIiGgXp4e3x/f35/gIB+e3h2c3Bzd3yAgH+AgICAf39/gIKDhIOCgX57dXJxcXJzdHR0c3R2dnZ2dnl6fH1/gHl3d3d4e39+eHJwcXV4eXl5eXh7f355c3V6fX19fH6ChIODgoB/fX19fX19fn5/f35+fn59fX19fX18fHx8fHx8fH19fH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58fX19e3x8fHx8fH19fX1+fn5+fn5+fn5+fXx9fHx8fHx8fHt6e3t7e3t7e3t7e3t8fHdva21tbG1xcnF1e3p0cXFwcW9xe4F6d3d8fH19fn19e3p4eHh1dXV2d3p+fnp9gIF7dXJydnZ1dnRyb2piXl1kaW5xcG5sa21vbWtpZWNhYmBmb3V1dXZ4eXl3dXNydHh9fX1+foCBhYR/gICChIiFfXl6e39+f4GAgYB+fXx5b3BzeX2Af39/gIB/f3+AgoOEg4KBfnp1cnFxcnN0dHRzdHZ2dnZ2eHp8fIB/end2dnh7f353cnBxdXh5eXl5eHuAf3p0dXp9fXx8gIODg4KBgH58fH19fX1+fn5+fn5+fn5+fn59fX19fX19fX19fn59fn19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn19fXx8fHx8fHx8fX19fX19fX1/f39/fn59fXx8fHx7fH19fHt8fHx8fHx7e3t7fH18d29oaGtsb3Nxb3N6e3VwcnNzcXR7gXx3eHx8fHx+fnx8e3l3dnV0dHZ3d3x8e31/gH95dnV2dXR1dHJuaWVhYWducG9ta2hnam5xb2xnZF9bW2Rwdnd3eHh4d3RvbnByd3x+fn+AgYKDgH5+fX+BhouDfXp7fH1+f4CAgH9+f396dHBxd3x+f4CBgH5/foCChIWDgoF9eXVycHFzc3Nzc3R1dnZ1dXV2eHt9gIB8d3Z2eHx/fXZxcXJ2eHh4d3h4e39/enR0en5+fH+ChISDg4B+fX19fHx9fX5+fn5+fn5+fn5+fn19fX19fX19fX1+fn5+fX1+fn5+fn5+fn5+fn5/f39/f39/f39/fn5+fX19fHx8fHx8fHx9fX19fX19fX9/f39+fn19fHx8fHt8fX18fHx8fHx8fHx8fHx8fX13b2loamtuc29vcnh7dnFydXVzdn1/fHh5fHx8fHx9fXx7enh3c3J0dXZ3ent7fX9/f3t4dnZ2dnd1cm5qZ2Rma3BwbmpnZGRnbHFwbmlmYFtcZXB2eHh4eHZzcWxrb3J3e3+AgIKDg4F+fn59f4GFjYiAfHx9fX5/gICAf36AgoB7d3Ruc3V7fn9/foB/f4GEhYOCgXx4dHJwcXNzc3NzdHZ2dnV1dXZ4e32AgHx3dnZ4fX98dXBwcnd4eHh4eHl7fn55dHV6fX1+gYOEg4KBfXx9fX18fH19fn5+fn5+fn5+fn5+fX19fX19fX19fX19fn59fX5+fn5+fn5+fn5+fn9/f39/f39/f39+fn59fX18fHx8fHx8fH19fX19fX19f39/f35+fX18fHx8e3x9fXx8fHx8fHx8fX19fXx9fXhvampqa21wbW5wdnx4c3N2dnR2fH58eXp8fHx8e3x9fHp5d3Zzc3R1dnZ4fHx9fn5/fHl3d3Z3d3d0b2xpZ2pucG9saGNhYWRpb3BuamdiXl9ncXZ4eHh4dXJuaWhuc3Z6fn9+gIKDfn5+fn5/goaNjIWBf318fn5/gIB/f4CCgn5/eXJxb3V4e3x9f36AgYSFg4KBfHh0cXBxc3Nzc3N0dnZ1dHR0dXd6fICAfHd2dnh9fnt1cG9zd3h4eHd3eXt+fnh0dnp8fX+Dg4ODgn57eXt8fHx8fX1+fn5+fn5+fn5+fn59fX19fX19fX19fX1+fn19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn19fXx8fHx8fHx8fX19fX19fX1/f39/fn59fXx8fHx7fH19fHx8fHx8fHx9fX19fH1+eHFsa2prbW5sa251e3p1c3Z2dHh9fn15enx8fHx8fHx8enh3dnV0c3R1dnd7fH1+fX99enh4d3V1d3RvbWtqbHBwb2tmYF5dYGZtb21qZ2NhX2hydXh4eHh3cmtlZ210dnp9fn19gIJ+fn5+f3+CiI+PioaBfXx+fn+Af3+AgIKCgIF+eXNwcnR3d3d6e3+BhYWDgoF8eHRxcHFzc3Nzc3R2dnVzdHR1d3p9gIB8d3Z2eH19e3Vxb3N3eHh4dnd5e39/d3N1eHx+gIOCgoOAfXl4e3x8fHx9fX5+fn59fX19fX1+fn19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+f31+fn9/f39/f39/fn5+fn19fXx9fXx8fHx9fX19fX19fX5+fn59fX19fX17e3t8fHx8fHx8fHx8fHx8fHx8fX56cmxqa2ttbGhoa3N7end1dXV2eX1+fXp7fH18enx7e3t6eXd2dnNycnV1eHx+f359fX17enh4dXV3dHBubG1ucXJwa2ReWVldY2pvbWlkYl5fZnB0dnZ4eHVvaWRmb3Z3eHl6ent/gH5+fn6AgIOKk5OOiYJ+fn1+f4CAgIGBgYKBgH9/e3lxb3FycnR5fX+Cg4ODgXx3dHJxcnJycnJzdHZ2dXRzc3R3eXx/f3t3dXZ5fH56dHBwc3d5eHh4d3l7fnx1cnZ4e3+Cg4OCgn97dnl7e3t7e3x8fn5+fn19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fn5/fX5+f39/f39/f39+fn5+fX19fH19fHx8fH19fX19fX19fn5+fn19fX18fHt7e3x8fHx8fHx8fHx8fHx8fHx9f3pybGtrbW5qZWZpcXl6eXd1dnd5fX59e3t8fXx6fHp7enp5eHZ2dHNydHR2eoCBf319fXx7eHh5eXh1b2xsbnBxcW9rZFxWV11kam1raWRgXWBmb3J0dXd3dG1nYmVtdHZ4enl6en19fX1+gIGAhY2UlI6KhIB/fn1+f4CBgoKDg4GAgIB/fnp0cXFzdnt/gIKDg4KBe3dzcXBycnJycnN0dnZ1dHNzdHd6fX9/e3Z0dnl8fnp0cHBzd3l4eHd3eXt+e3Zzdnh8gIODg4KCf3l1eXt7e3t7enp+fn5+fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn99fn5/f39/f39/f35+fn59fX18fX18fHx8fX19fX19fX1+fn5+fX19fXx8e3t7fHx8fHx8fHx8fHx8fHx8fH1/enJsamxsbGdkZmpxeXx6eHd4eHp9fXx8fHt8fHp7enp6e3l5d3Z1c3NzdHR5gYGAfX19fHt5eXl5eXZuam1vcXFxb2tjWlZXXmZpZ2VjYmFgYmducXJ0dXVybGZhZGtydXd6ent8e3l5e32BgoKFipCQi4mEgYB+fX5/gIGCgoCBgYCAgYGBf3l2dXh7foCAgoODgYB7d3Jwb3FycnJyc3R2dnV0c3N0d3t+f396dXN1eXx+eXRwcHN3eXh4d3d5fH56dnR1eH6BgoOCgYF8d3V5e3t7e3t6en5+fn59fX19fX18fH19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+f31+fn9/f39/f39/fn5+fn19fXx9fXx8fHx9fX19fX19fX5+fn59fX19e3t7e3t8fHx8fHx8fHx8fHx8fHx8fX96c2toa2xrZmRmanF5fnp6eHl5en19fHx8e3x8enp5e3t8e3p5d3dzcnNzdHmAgYF+fX18e3l5eXl5dW5qbXBwcXFva2JaVlhfZWRgXl5fYWJkaG1wcXN0dHFqZWJkanF1d3p6e318eXV3e4GBg4WIjIyJiISBgH59f3+AgoOCgYKAgH+BgIB/e3l4enx+foCCg4OBgHt2cXBvcHJycnJzdHZ2dXRzc3R3e35/f3p1c3V5fH15dHBwc3d5eHh3d3l7fXp2c3V4gIODhIGBgHpzdHl7e3t7e3t7fX1+fn19fX18fH19fX19fX19fHx9fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19e3t8fH19fX19fX5+fX5+fn19fHx8fHp6e3t8fHx9fX18fHx8fX19fX1+fntya2hrbWtlZGdtcnuAfXt5enp6fH18e3t8fHx7e3p6eXp6enp5d3RzcnJzd36AgH59fHx8eXh5eXh1bmtsb3BwcG1pYlpXWWJjX1hZWlxeY2ZqbXBxcnN0cWtnY2Npb3V3ent8fXx5dnV5foCChoaHiIeGg4GAfn1/f4CCg4GAgIGBgICAf39+fH19fn5/gYKDgoF/enVwb29wcXFzc3N0dnZ1c3NzcnZ7foCAe3ZzdXp9fHdybnBzeHl5eXZ2eXt+eXN0dnyCg4GBgYF+d3J0eXt7e3p6enx9fX5+fX19fXx8fX19fX19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX18fHx8fX19fX19fX19fn5+fX18fHx8e3t7e3x8fH19fX19fX1+fn19fn5+fHFsaWpraWVkaXBzfIB/fHt6enp8fXx7e3x8fHx7enp5e3t6eXl3dHJycnN2fYCAf359fHt3d3h4eHVwbGxvb29vbmljXVpfaWVbUVRUVlxlaGtucHFycnJwamZiZGlvdHZ5enx+fX18e31+gIGDhYWHiIaDgYF+fn9/f4GDgn9+gIB/f39/fn5+fn5/f3+BgYKBgH55dXBub3BxcXNzc3R2dnVzc3Nyd3x/gH96dXN1eXx8d3JvcXR4eHh4dnZ5e315c3N3foODgYGBgHtzcnV6fHt7enp6fX19fX19fX19fHx9fX19fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX18fHx8fX19fX19fX19fXx8fHx7e3t7fHx8fX19fX19fX5+fX1+fn99cmtpamtpZWVrc3V8f399fHx8enx9fHt7fHx8fHt7enp7e3p5eXdzcXFyc3Z7gIGAfn9+e3Z1dnd4dXBtbGtrbG1ta2VeXmdualpMT09QWGJnamxtcHFycW9pZWJjaW1ydnp7fH19f4B/gYCBgoOGhoeHh4KBgX9+f39/gYOCfn1+f39/f39+fn5+fn9/f4GBgoF/fXl0cG9vcHFxc3NzdHV1dXNzc3R4fH+Af3l0c3V5fHx3cXBxdHd3d3d2dnl7fHdzdHiAgoKBgYF/eXJydnt9e3t6enp+fX18fH19fX18fH19fX19fX19fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/fn5+fn59fX19fX19fX19fXt7e3t9fXx8fX19fX19fHx8fHx8e3t8fHx9fX19fX19fn59fX5+gH10bWhpa2plZmx0d3x/gH99fX16fH18e3t8fHx8e3t6ent6fHt5d3RwcHFzdXuAgoCAgIB8dnR0dXh1cW1qZmVqbW9sZ2Bha29rW0lKSk1TX2dpZ2hucHFxbmhjYWNoa3B3e3x8e3x+gICBgoOFhYeHiIiHg4GBgH5/fn6BhIJ+fX1+f39/fn5+fn5+f3+AgYGAgH99eXRvbm9wcXFzc3N0dHR1c3NzdHh9gIB/eXRzdXh7fHdwcHJ1d3d3d3Z2eXt7dnN1e4GCgYGBgH54cnJ4fH17e3p6eoB9fX19fX19fXx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fXx8fHx8fH19fX19fX19fX18fHx8fHx8fHx8fX19fX19fX1+fn5+f39+fXRraGhpamZob3R4fIF/fn59fnx8fHt7e3t8fX17e3t6ent8fHp4cnBvb3JzeH6CgYGBgX13cnN0dndzb2llY2ZqbGtoY2ZqbGhcUEpHSFBbZWdjYmlvcG9sZ2NgYWRobXZ7fHt7fX+BgYOEhYeIiYmJioeDgICAf359foGDgn59fX1+gIB/fn5+fn5+f4CBgYGAfnx3c29ub3BwcXNzc3R1dXVzc3N0d31/gX54dHR2eXt7dm9wcnV3d3Z2dnZ5e3t3c3Z9gYKBgYGAe3Zycnd7e3p5ent7gH19fX1+fn19fHx9fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fHx8fHx9fX19fX19fX19fXx8fHx8fHx8fHx9fX19fX19fX5+fn5/f39+d2xpaWlqaWxwdXt+gH59fX1+fn18e3t7fH5/fnx8fHt7e3t7eHZxb21vcnJ2fYGBgYGAfXhycnJ1dnRvaGNjZmhoZmhmaWttaV9ZTktKUFllY11dZW1ub2tmYl9eYWVsd3x8e3t8f4GChYaGh4iIiYmJiIOBgIGBf35+gYOCf318fH6Af35+fn5+fn5+f4GBgYB+fHdycG1tbnBxc3NzdHV1dXNzc3R3fX+Bfnh0dHZ5e3p1b3BydXd3dnZ2dnl7e3Z0eH+DgoGBgH14dXNydnt7enl6e3yAfX19fX19fX18fH19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX18fHx8fH19fX19fX19fX19fHx8fHx8fHx8fH19fX1+fn5+fn5+fn9/goJ7b2lqa2pucHR4fX9+fXx8fYB/fnx7e3t9f39+fHx7e3t5enp3dHBubW5xcXR6f4GBgH9+eHJxcXR2c29oY2NnaGdfYWRqbG1oYVhQTkxPWGZhV1hham1ua2ZiX11fYmx1fH17e32AgYOFhoaGh4iIiomKhYKBgYGBgH+Ag4J/fHx9foB/fn5+fn5+fn5/gYGBgH58eHNwbWxtcHFzc3N0dXV1c3NzdHd9f4F+d3N0dnl7enRvcHN2d3d2dnZ2eXt7d3R7gYOCgoF/e3d1cnJ3e3t6eXp7foJ9fX19fHx9fXx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fXx8fHx8fX19fX19fX19fX18fHx8fHx8fHx8fX19fX5+fn5+fn5+f3+DhH5ybWtra3Bzd3p9fn58fHx9gYB/fXx7e3t9f359fXt6enl5enZzcG5sbW9xcnh/gYGAfn14cnBxc3Vzb2djZmhpZVtaX2ltbWhiVlJOTlFaZ2JVVF5nbW5qZWJeXWBibXV9fXx7fX+Bg4WGh4aGh4iIiImGg4GAgoGAf4CDgoB9fX5+gH9+fn5+fn5+fn+BgYGAfXt4cm9ubW5wcXNzc3R1dXVzc3N0d31/gX52c3R2eXt5dG9wc3Z3d3Z2dnZ5e3t3dn2Dg4OCgH16d3Rxc3h7e3p5ent/g3x8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX18fHx8fHx8fHx8fHx9fX19fX17e319fX1+fn19fn5+fn19fn5/gYaHgXVvbWxudXd5e359e3x9fX6BgoOBfnx7e3x9fX19fHt7enl3dHJxbWprb3FxdnyAgX99e3Zxbm9yc3JvaGVlZ2tnXFVZZGxqZ2BWU1RWW2FoYFZQWmVra2hiYF5cYGRtdnx/fHt8f4GBhIWGhYWGh4iJioiGg4KEg4GAgIODf319fX5+f35+fn5+fn5/gIGBgoB9e3dzb2xsbXBycnJzc3R0c3NycnV4foB/fHZzc3V6e3hzb3BydXd2dXV1dnh7eXd6gISEgoF/end2cm9zeXp6enl6fICEfHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fXx8fHx8fHx8fHx8fH19fX19fXx8fX19fX5+fn5+fn5+fX1/f3+Dh4aAdnJwbnB3eXt9f358fX5/foCDhIOAfXp7fX19fX18e3t5eHZzcW9samtucHBzeHx9fXp4c3BvcHFxcW9nY2VpbmldVVdeZ2ZlXldWW15gZWhgWE9WY2lnXlpZW1xfZG51e358e3t+f4CCg4SDhISGiImKiYiFg4SEg4CAgoOAfn19fn5/fn19fn5+fn+AgYGBf317d3NvbGtsb3FycnNzdHRzc3Jydnp+gYB8dnNzdXl7d3Jub3J1dnZ1dXV2eHt4eHyCg4OBgX14dXVzcXd7e3t7e3t+gYR8fHx8fHx8fHx8fHx9fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fHx8fHx8fHx8fHx8fX18fH19fn59fX19fn5+fn5+fn59fX5/gYWIg314dXVzdHh7fH5/fXx9foB/gYOGhoSAfH19fX19fXx7enl4dnNxbm1ra21vcHF1eHh5d3ZxcG5ucHBxb2diZWxwbF9WV1liY2ReWFlfYF9hZV5aUFNgaGNWVFZcXF9kbnR5fn18e31+f4GCg4KDg4WIiYqJiYWEhISDgICCg4B9fX1+fn9+fX19fX5+f4CBgYF/fXt3c29sa2xvcXJyc3N0dHNzcnJ2en+BgHt2c3N1eXp2cW5vcnV2dnV0dXZ4end6f4GCgoGAe3h3eXd2e35+fn5+fYCChHx8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX18fHx8fHx8fHx8fHx9fXt7fX19fX5+fn5+fn9/fn5+fn19fX+DiIiCfXp3d3V2eHt+f317fH5+gICBhYeIhoR+fnx9fX19fHt6eXl2c3FubWxsbW9wcXJ1dXV0c3FwbW5wcHFvZmJlbG9tYlZVWF9iYl5cXGBgXF1gXFlQU15oY1RPVVxeYGRudHh+f3x7fH1+gIGBgIGChIiJiYmIhoWDhISAgIGBf3x9fX5+f358fHx8fn5/gIGBgH59e3dzb2xqa25wcnJzc3R0c3NycnZ6f4F/e3Zzc3V4eXZxbW5ydXZ2dXR1dnh4d3yBgoKBgH96eHd6e3x/gICAgIB/goSFfHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fXt7fHx8fH19fHx8fHx8fHx9fX19fX19fX5+fn5+fn5+fXx8gIWIhoF+f3x8eXl5fH5+fXt8fn+AgYKDhoqJhoN/fH18fn18fHp5eHZzcG5ubm1rbG9yc3JycXBxc3Fta25vcG9nYmVsamlkWFFWXGJjYV9hYl9bWFtXU1BUXmZjU0pPWlxgZW1zeH5+fXx8fXx+f39/gIKEhoiKiYeGhoSDgoKBgH99e31+f39+fXx8fHx9fn+AgYF/fnt5dnNvamtsb3BxcnR0dHJzc3Fydnp/gX96c3JzdXl5dXBub3J1dXR0c3R2eHh5fYKBgoKAfnt7fn9/gYKDgoKCgoODhIR8fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fHx8fHx8fHx8fHx8fHx8fH19fX19fX19fn5+fn5+fn5+fX2BiIeGgoCBgIB9e3p8fn59e31/gIGBgYOGioqHhYF+fX1+fXx8enl4dnJvbW5ubmprbnFycnJwcW9xdG9sbG5ubWhkZmhlYGBaUlVbYWJgX2FjYFtXVVNPUVZdY2JUS05ZXWFob3R5fX5+fn1+fX5/f4CBgoOGh4mIhoaGhIKChIOAfn58fX5/f359fHx8fH1+f4CBgYB+e3l2c29qamtvcHFydHR0cnNzcXJ2en+AfnpzcnN1eHh0b25wcnV1dHRzdXZ3eXt/goGCgoF/f3+CgoGDhIWEhISEhISEhHx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx8fHx8fX19fX19fX1+fn5+fn5+fn5+f4OJiIaEgoJ/gIB+en1/fn18foCAgYGBgoWKiomGhIJ/fn59fHx6eXh2cm9tbG1ta2pucHJyc3Nxbm9ycWxrbG5taWVnaGNdW1tUV1phYF5dYGVlX1pXVE9TV11iYVZMT1hfZGpxdXp9fX5+fX5/f3+AgICCg4WFh4eGhoeEgoKEg4B+fn5+fX9/fn18fHx8fX5/gIGBgH16eHZzb2pqa25vcXJ0dHRyc3Nyc3d7gIB+eXNyc3V3d3RvbnBydXV0dHN1dnZ6foGBgoKCgoGDg4SEg4SEhYSEhISEhISEfHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fXt7fHx8fHt7fHx8fHx8fHx9fX19fX19fX5+fn5+fn5+fn6BhYiGhIOCgoB/f316fX9+fXx+gIGCgoGDhImJioeGhIF/fn18fHp5d3ZybmxqbGxraW1wcnN0dXFucHBxamprcG5pZWdpY1tZWlZXXWJgXFdcZ2tmYVlUUVdaXmJhV01PWF9mbXR2eX19fn59fn+Af4CCgYKDhISFhoaGhoSBgYWFgYB/gH99f39+fXx8fHx9fn+AgYGBfXp3dnNvamlrbm9xcnR0dHJzc3N1eX2AgH55c3JzdXh3c29ucHJ1dXRzc3R1d3qAgoCCgoKDg4WFhIWEhISFhISEhISEhIR8fH19fHx8fH19fX1+fn9/fn5+fn19fn59fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn19e3t8fHt7e3t6enx8fHx9fX19fX19fX5+fn5+fn5+fn5+foGHh4aEgoKBgIB/e3p+gH9+fX6AgIKDg4OEiYmKh4eFgn9+fnx7enh3dHJuamtsbGpqbG9ycnR1cm1vbmtobW5vbmtnaGljWVlbWVxgYV5WUFppbmpiWlZYXV1fY2RaT1JbY2pwdnl7fX1+fn5+f4CAgICCgoKCgoKFh4iGhYKDhoaCf3+Bf359fn59fHx8fHx+gICBgYB8e3h1cm5paWpucHFydHR0cnJycnV5fYCAfnlycXN1d3Zxbm5wc3V0c3N0c3Z5foGCgYKCgoSEhYSGhIOEhIOCg4ODg4ODg3x8fX18fHx8fX19fX5+f39+fn5+fX1+fn19fX19fX5+fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fX18fHx8e3t7e3t7fHx8fH19fX19fX19fn5+fn5+fn5+fn6Ag4iHhYSCgoGAgH96en+Afn5+fn+BgoOEgoSHh4eJh4WCf39/fX16eHd0cW1qamtsa2prb3JydHRybW9uaWtvb3BvbGlpamRbWVxdX2JgW1FQXGlvaWFaWmBnZGNlZl1VWV5nbnR3enx9fX5+fn6AgYGCgYOCgoKCgoWGiIeGg4SGhoJ/f4F/fn5/fn18fHx8fH6AgICAfnt6d3Vybmlpam5wcXJ0dHRycnJydXl9gIB+eHJxc3V3dHBubnBzdXRzc3NzdXqAgYGDgoKEhYWFhIWEgoKDgYGBgYKDgoODfX19fXx8fHx9fX19fn5/f35+fn59fX19fX19fX19fn59fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn59fX5+fHx7e3t7fX18fHx8fX19fX19fX1+fn5+fn5+fn5+gIKFiIWEg4KCgYCAf3p6f4B+fX1+foCBgoKCg4WGhoiJhoJ/gYB9fHp4dnNxbWpoampramtvcXJ0c3FubWtrb3FwcHBsamprZl1aXGBhY2BXTlRfa29qYVxdZG1sZ2hnYFlcYmpxd3l6fH19fX1/f4CCgoODhIKCgYGBhISGh4aEhIaHhIB/gH9+fn9+fXx8fHx8foCAf39+e3p3dXJuaWlqbnBxcnR0dHJycnN2en6BgH13cnFzdXZ0cG1ucHN1dHNyc3R1e4CBgYSEhIWFhYWDg4KBgIF/fn1/goKCg4N+fn19fHx8fH19fX1+fn9/fn5+fn19fHx9fX19fX1+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn19fX18fHt7e3t8fHx8fHx9fX19fX19fX5+fn5+fn5+fn6AhIWHhIOCgoKBgIB/ent/gH58fH5+f35+gYGBg4WEh4mGgn+BgX58enh2c3BsamdpaWxsa25xcnR0cW1ta25ycnJwcGxqa2xlXlxeYWJiXVFMV2Rtb2pkX19lb29qa2hhW19jbHJ3eXp8fX18fH9/gYKDhIOEgoKBgYKDhIaIiISEhYmGgX+AgH5+f359fHx8fHx+gIB/f316eXZ1cm5paWpucHFydHR0cnJydHd6f4GAfXZycXN1dnRwbW1wc3Vzc3JzdXd8gIKChISEhIWFhIKBgH58fnx7e4CCg4KCgn19fX18fHx8fH19fX5+f39+fn5+fX19fX19fX19fX5+fX19fX5+fn5+fn5+f39+fn5+fn5+fn19f39+fn5+fX18fHt7fHt7fHx8fHx8fHx9fn59fX5+fn5+fn5+fn5+f4OGh4WDgoGDgoGAf315eX+Bf3x8e3x6enp9fn6BgYKGh4aDgoKBfn57endxbm1pZ2hqbW5tbnFydHRybmxtcXJwcG9wbGpra2VdXGBkZWFZTlFcZm5uamZjYWZvb2lqaWBZXGRtdHh6enx9fX19fn+AgYSDhYWDgoKCgYGDhYqLiISGiIiDgH9/fX9/fn18fHt7e35/f39+fHp5d3Zzb2tqa25vcXJ0dHRycnJzd3t/gIB8dXFxc3V2cm9tbnFzdXRzc3N2eX+Bg4OEhISEhISEgYB7eXt8fHl7gIKCgIGBfX19fXx8fHx8fX19fn5/f35+fn59fX19fX19fX19fn59fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn59fXx8e3t8e3t8fHx8fHx8fH1+fn19fn5+fn5+fn5+fn6AhIiIhYOCgYOCgYB/fXl6f4GAfX17e3p5eXl6e31+gIKIh4ODgoB9fXx7d3FubWpoaWtvcHBvcnN0dHRxbm9ycXBvb3BubG5rYlpdYmZlX1ZQVmBobWxpZ2RiZ3BtZmZoYVhaY252eHp6fH19fX1+fn+AgoGDg4GBgIGBgIOEiImJhYaIiYWBgH59f39+fXx8e3t7fn9/f357enh3dnNwbGprbm9xcnR0dHJycnN4fH+AgHt1cXFzdXZxb21ucnN0dHNzc3Z7gYKDg4SEhIODg4F9eXV2eHp7eXyAgoOBgIB9fX19fHx8fHx9fX1+fn9/fn5+fn19fX19fX19fX19fXx8fHx+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn19fHx7e3x7e3x8fHx8fHx8fX5+fn5+fn5+fn5+fn5+f4GFiIeEg4KBg4KBgH9/e3t/gX99fHp5eHd3d3d5e3x8f4aGhISCgX59fXt4cW5ta2lpa29xc3Fyc3NzdHNxcnNxcXFxcHBub2xfWV1kaGVdVVJcZmtubGlnZWJocGtjYmZiW1xkcHZ5e3p8fX19fX5+fn5/f4CBgYGAgYGAgoOEh4mHhoeIhoOBf35/f359fHx7e3t+f39+fXt5eHZ2c3Bsamtub3FydHR0cnJydHl8f4B/enVxcXN1dXBtbG5yc3R0c3JyeH6Cg4ODg4OEhIF+fHdycnR3ent5fICDgoF+fn19fX18fHx8fH19fX5+f39+fn5+fX19fX19fX19fXx8fHx8fH5+fn5+fn5+fX1+fn5+fn5+fn9/f39+fn5+fX18fHt7fHt7fHx8fHx8fHx9fn5/f35+fn5+fn5+fn6AgIeJh4SDgoGDgoGAf398e4B/fn18enh4d3Z3d3l7fH1/goSFhYKBfn19e3hxbm1raWprb3Fzc3V0dHN1c3N0c3BxcnNycXBvbGBaX2ZoZV1UV2FobnBtaWdlZGlvaWJhZWNeYGdwdnl7enx9fX19fn19e3x8foCBgYCAgICBgoOFiImGh4eGhIOBgH9/fn18fHt7e35/f358enh3dnZzcGxqa25vcXJ0dHRycnJ1eXx/gH96dXFxc3V1cGxsbnJzdHNycnJ7gIOEg4ODg4SCf3t2c25uc3d6e3l9goSCgX9+fHx9fX19fHx9fn5+fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fn5+fn5+fn5+fn5+fn5+fn9/fn5/f35+fn19fXx8fHx8fHx8fX19fX19fX5+fn5+fn5+fn5+fn5/f4GEiIeFg4OBgIOBgoB/gH5+gH58fnx4eHh4dnZ1d3t8fH+ChIWDgn99fHx8eXJubWtra2xwcnV1dnR0dHR0dXZ0cXJ0c3JycXBpYFtham1kW1VbZGltbmtnZGRnbG1pY2RmY2FkanF1eXx8fX5+fn5+fXx8e3x+gYGBgICAgIGBgoOFhoaGhoaGhIKAfn9+fXt6enp7fX9+fXt6eHh3dnRxbWtsbW9xc3NzcnJycnV6fX9/f3lzcHFydHRwbGxvcXRzc3JxdHyAg4OCgoKBgn54dHFwbW5yeHl6e3+BhIF/fXx9fX19fX19fH5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX1+fn5+fn5+fn5+fn5+fn5+f39+fn9/fn5+fX19fHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn5+fn+Ag4aIhoSDgoGAg4KCgH+BgICBfXx9enh4eHh2dnV3ent8f4GEhYSCf318fHx6cm5tbW1sbXFzd3d2dHV1dHR2dXNycnV1c3JxcGlfXGRtbmVbWF9ma21tamdkZWhsbGlkZmdlY2dscXZ7fH19fn5+fn58fHx6fH6BgYGAgICAgYCAgYOFhoaGh4iGg4F+gH99fHt6ent9fn59e3p4eHd2dHFubGxtb3Fzc3NycnJydnp9f4B+d3JwcXJ0dHBsbG9ydHNzcnJ3foKDg4KBgYF+eHJvb21tbnJ5eXp8gIGDgH58en19fX19fX19fn5+fn5+fn5/f35+fn5+fn19fX18fHx8fX19fX5+fn5+fn5+fn5+fn5+fn5/f35+f39+fn19fX18fHx8fHx8fH19fX19fX5+fn5+fn5+fn5+fn5+gICEh4eFg4KBgICDgoGAf4GBgoB9e3x6eHh4eHZ2dXZ6fH1+f4OFhIJ/fXx9fHpybm1vb25vcnR4eHd2dnZ0dHZ0c3JzdXVzcnFwal9eZm5vZ15dZGlsbm1qZmVmaWtraGhoaGZlaW1xdXp8fX1+fn5+fnx8e3p8foGBgYCAgICAgICAgYOEhYWIiYeEgH5/gH58e3p6e31+fn58enh4d3Z1cW5sbW5wcXNzc3JycnJ2en5/gH53cnBxcnRzb21tcHN0c3Nyc3mBg4ODgoKBfnh0cG9ubWxtc3l6e32Ag4J/fnt6fn59fX19fX1+fn5+fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fn5+fn5+fn5+fn5+fn5+fn9/fn5/f35+fX19fXx8fHx8fHx8fX19fX19fn5+fn5+fn5+fn5+fn5/gIWHhoWDgoGAgIODgIB/gYKBfnx7e3l4eHh4dnZ0dnl7fH5+g4SEgn99fHt7e3NubG9xcXJydXl5eHd2dnR0dXNycnR2dXNycXFqYGBnbnFpY2Nma21ubGlmZWdpaWlnampoZmdqbXF2eXt9fX5+fn19fHt7ent+gYGBgICAgICAgYCBg4OEhIeJh4SBfX9/fn17enp7fX5+fnx6eHh3d3VxbmxtbnBxc3NzcnJycnZ6fn+AfnVwcHFydHJvbm5wc3RzcnF1e4KCg4ODg396dHFxcG9ubG10enp7foCCgn99enl+fn5+fX18fn5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX19fX1+fn5+fn5+fn5+f39+fn9/f399fX19fX19fXx8fX19fX19fX1+fn5+fn5+fn5+f39+f3+Dh4iFgoKBgYGBgoKBgH+BgoF+fHp7eXh4eHh2dnV2eHp8fX2ChIODgH16e3x5dG9tcHJzdHV3e3t6eHd1dHR2dHJydXV0dHJxcm1lZGpvb2xnaGtub25pZ2ZlZ2hnZ2lta2lnamxvcXZ6fHx9fn1+fn19e3t6e31/f39+foCAgICAf4CBgoKEhoeGhIF9foB/fXt7e3t8fn18e3p4eHd2dXBubW1vcXFyc3NycnJ0eHx/gH9+dnFwcXN0cW5sbXBzc3Nycnh/goODgYGAeXRycG9ubm1sbnN3eXt/gYKBfnt6eX5+fn59fXx+fn5+fn5+fn5/f35+fn5+fn19fX18fHx8fX19fX19fX19fX19fX1+fn5+fn5/f35+fn5+fn19fX19fX19fHx9fX19fX19fX5+fn5+fn5+fn5/f3+AgoWIh4SCgYCAgIGCgoGAf4GCgH17eXp4d3d4eHZ2dnZ2dXR1e4KFhIOAfXp7e3p2b21wc3V3eHt7e3x6d3Z1dXZ1dHR0dHNycnFybmhnbXBvbmprbXBva2VlZGNkZmNjam1samlrbnBzd3p8fH19fX59e3t7enl7fX5/f35+fn5/f4CAgYGBgoSFhYWEgX5+f39+fHt7e3x+fXx7enh4d3Z1cW5tbW9xcXJzc3JycnV6fX+AgHx0cXBxc3RxbWxtcHNzc3JzeoCDg4OBfXp0cXFwb25sa2xvdHl5e3+BgoF9enl5fn5+fn59fH5+fn5+fn5+fn9/fn5+fn5+fX19fXx8fHx9fX19fX19fX19fX19fX5+fn5+fn9/fn5+fn5+fX19fX19fX18fH19fX19fX19fn5+fn5+fn5+fn9/gIGEhoiGg4GBf39/gYKCgYB/goOBfHl3eHh3d3h4dnd3dnRvbW55goWEg4B9enl6endxbnFzdXd6fX19fXx4d3Z2dnV2dnNzcXBwb3FvampvcHBtbG1wcW9oYmFjYmFiYWRqbWxra21vcXV4e3x8fXx9fX16enp6eXp9fn9/fn59fX9/gICBgYGCg4SEhISDf35/gH99e3t7fH18e3t6eHh3dnVxbm1ucHFxcnNzcnJydXp9f4B/e3RxcHFzdHBsbG1wc3NzcnV7gYODg4F6c3Bwb29vbmtqbXB2ent9gIKCgH16eHh+fn5+fn59fn5+fn5+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX19fX18fHx8fn5+fn5+f39+fn19fX19fX19fX19fXx8fX19fX19fX1+fn5+fn5+fn5+f3+AgYWHiIaDgIB/f3+BgoKBgH+ChIF7eHZ3eHZ2eHh3eHh4c2xpanSBhYSDgH16eXp6eXRxcHR1d3t9gH9+fXp5d3d2dnV1c3NxcG9ucG9sbXBxcW1ub3FxcGZfYGFhYmFfZGpubmtsb3FydXh7fH19fX19fHp6enp5en1+f39+fn5+f3+AgIGBgIGCg4OEhIOAf3+Af317e3t8fHt7e3p4eHd2dXFubW5wcXFyc3NycnJ1en1/gH56dHFwcXN0b2xsbXBzc3Nzd36Cg4ODgXhxb29vb29ubGttcXh6fH6BgoJ/fHl3d35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+f39/gIGDh4mGg4F/f35+f4KDgoF+f4OFgXx5d3d2dnZ3eXh5eHhxbWpqcoCGhIKBfXl6ent5dnNxdHZ5fH5/gX9/eXh3dnZ1dHNzc3BvbmxvcW9vcnJvbW1wcnFtZF9fYWFhYF9mbG9ubW5wcHJ2eHx9fX19fXx7e3t6enp7fX5+f35+fX6AgIGAgYGBgYCBgoWFhYF+f4B9e3p6e3x8e3p6enh4d3Z1cm9tbnFxcnNzcnFxcnV6fYCAfnlzcXBxcXFua2ttcXNzdHV7gIOEhIN/dHBvb29vbWxram50d3l8f4GBgH55eHd3fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn59fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fn5/f3+AgoWIiIaDgYB+fX+AgoSCgH+Ag4WAfHl3d3Z2dnd5enl4d3Ftampxf4aFgoF/fHx8e3l4dnN1eHt8fn+BgH96eXh3dnZ0dHJyb25ta29ycXFzcm9tbnBzcW5kX19hY2JgZGpsb21tbnBxc3Z6fH19fX19fHt7e3p6e3t9fn5/fn59foCAgYCBgYGBf4CBhIWFgn5+f317enp7fHx7enp6eHh3dnVyb21ucXFyc3NycXFydXp9f399eHRwcHFxcW5ra25xc3N1d32Cg4SEgnxyb25ubm5tbGtqbnV3eXx/gYGAfnl4d3d+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn5+fn9/f4CDh4iGhISBgH5+f4GDg4KAgIGEhIB7eXd3dnZ2d3h5eHd1cW1sbHB9hYWCgYF/f399e3p3dXZ3enx+f4GAf3x7enh2dnV0cnFubW1tcHNzdHRzcG5vcnNybmZiYmNkY2NnbG5wbGxvcXJ0d3p8fn19fX18e3t7enp7e31+fn9+fn1+gICBgIGBgYF/f3+ChIWCfX5/fHp6ent8fHt6enp4eHd2dXJvbW5xcXJzc3JxcXN2en1+fnx3dHFwcXFxbmtrbnFzc3Z6gISEg4SCeHBvbm5ubm1sa2pudXh6fYCBgYB+eXh3d35+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fX19fX19fX19fX19fX19fX19fX19fX1/f35+fn5+fn5+f39/gISJiIWDhIF/fn2AgoODgX+AgYWDf3t5d3d2dnZ3eHl2dXVyb21ub3qEhoKBgYCAgH59e3p3d3d6e35/gYB/fHt6eXd3dnR0cG1tbnBwc3V2dnVwb3BydHNtaGRkY2RkZWdrb3BtbG9xcnR4e319fX19fXx7e3t6ent7fX5+f35+fX5/gIGAgYGBgX5+foCCg4J+fn98eXp6e3x8e3p6enh4d3Z1cm9tbnFxcnNzcnFxc3d6fX5+fHdzcHBxcXFua2xvcnJyeH2DhISDhIB1bm1vb21tbWxram51eXt+gYKCgH55eHd3fn5/f35+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fX19fX19fX19fX19fX19fXx+fn5+fn5+fn59fX5+fn5/f3+ChoeGhYOCf319f4GDhIOBgH+BhIF/e3l3d3Z2dXd4eHV0dHNxcG1ue4WGg4CBgICAf358enh3eHl7fX6Af357eXl5eHZ1dXRxbm5wcnN0dnZ3dnNxcHJ1dHBpZGRkZWVlaG1wb21ucHJzdXp8fX19fXx8fHt6enp6ent9fn9/fn1+fn+AgICAgICAf35+fn+BgX5+fnt5eHh7fHx7enp5eXh3d3Rxb25ucHFzc3JxcHF0eHt9fHx8dnJwcHBwb21sbG9yc3V6f4KDhIOEfnJubG5vbW1sa2trbnR4en+BgIB/e3l4dnZ+fn9/fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn59fX19fX19fX19fX19fX19fH5+fn5+fn5+fn19fn5+fn9/gISHiIWEgoF+fH6AgoOEg4F/f4GEgX98eXd3dnZ2d3d2dHJzdnZzb3B7hYaDgYGBgYF+fXx6eHl5eXl5fH5/fnx6enl4d3Z2dXJwcHJ0dXR2dnd3dXNyc3V2cmtmZWVlZWZpb3FwbnBxc3R2e3x9fX19fHx8e3p6enp6e31+f39+fX5+f4CAgICAgIB/fn5/f3+Bf39+fHt5eXt8fHt6enl5eHd2dHFvbm5wcXNzcnFwcXR5fH18fHp1cXBwcHBvbWxsb3J0d3yBg4SEg4J7b2xsbW5tbWxra2tudHh7f4GAgH97eHd2dn9/f39+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn19fX19fX19fX19fX19fX18fn5+fn5+fn5+fX1+fn5+f3+BhYmHhYOBf318foCCg4SEgX9/gYSBgH15d3d2dnd2dnVycnJ4enVzc32FhoSBgoGAgH9+e3p6enp5enp8fX59fHt6eXh3dnd2c3Jyc3V2dnd3eXl4dnN0dnZzbmpoZ2ZlZ2lwcXBwcHJ0dXd7fH19fX18fHx7enp6enp7fX5/f359fn5+f4CAgICAgIB/f4CAf4CAf31+fHp6e3x8e3p6eXl4d3V0cW9ubnBxc3NycXBxdHl8fXx8eXRwb3Bwb25tbG1wc3R3fIKDhISDf3dsbGxtbm1tbGtra292enx/gYCAfnp4dnZ2f39+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fX19fX19fX19fX19fX19fXx+fn5+fn5+fn59fX5+fn5/f4GGiYaEg4B/fXt+gYKEhIOAfn+DhIGAfXl3d3Z2d3Z2dHFxcnp9eXd4foWGhIKCgoCAfn17enp5e3t7e31+fXx9fHt5eHh3d3d1dHR1dnh4eHl7enp3c3R3d3Rwa2ppZmZnaXBxcHFxcnV1d3x8fH19fXx8fHt6enp6ent9fn9/fn1+fn1+f4CAgICAgYCAgIF/gH9+fXx7enp7fHx7enp5eXh3dXRyb25ucHFzc3JxcHF0eXx9fHx4c3BvcHBvbW1sbnBzdnl+g4SEhIJ+dGxrbW1ubW1sa2tqb3Z7foCCgYB+end2dnZ+fn5+fn5+fn5+fn5/f35+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn5+fX19fX19fHx9fX5+fX5/f39/f39+fn19fn5+fn+BhYiIhYSBgH18fX+ChISEgn9+f4KDgH99eHd3dnd3dnVyb3BzeX17fH2AhYeGgoKCgH9+fXx6enl6enx8fH1+fX5+fHt6eXh4eHZ1dnZ2d3d5eXt8fXt3dnZ3d3RvbWpoZ2lrcXFxcXN2dnd6fHx9fX19fXx7ent6enp6e3x+f39+fn9/fn9/f4CAgYGBgICAgYB/f319e3p6enx7e3p7e3p4dnR0dHNxb29wcXJycnJvcnZ7fX18enVyb29vb25tbG1ucHJ2e4CCg4SCgHtwbGxtbW1sa2tqaWxxeHt/gIGBgH15dXV0dn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fn5+fn5+fn59fX19fX18fH19fn5+fn9/f39/f35+fn59fX5+foGGiIeFg4B+e3x+gIKEhYOCf35/goKAf355d3h3eHd1dHJwb3F3enx+gIGDh4aCgICAgH99e3p7e3t7fHx8fX5+fn58e3p6eXh4d3d3d3d4eHp6fH19fHh3dnd3dnNwbWtpam1ycnNydXd3eXt8fH19fX19fHt6e3p6enp7fH5/f35+f39/f39/gICBgYGAgICAf35+e3t8e3t7fXx7ent7enh2dHR0c3Jwb3BxcnJycnByd3t8fHx4dHFvb29vbm1sbW5wcnh9gYKDhIJ+dm5sbG1tbWxra2ppbHN4fH+BgYF/fHh1dXR2fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn5+fn5+fn19fX19fXx8fX1+fn5+f39/f39/fn5+fn19fn5/goeIh4WDf3x7fn+AgoSFg4F+fYCCgX+Af3x4eHh4eHZzc3Btb3R3fYCBgIGGhoOAgICAf357ent7fHx8fHx9fn5+fnx7enp5eHl4eHh3eHh4ent8fX18eXh2d3d3dXJwbmxtbnN0dHV2eXl5fHx8fX19fX18e3p7enp7ent8fn9/fn5/f39/fn6AgIGBgICAgH9/fXx4ent9fXt8fHx7e3t6eHZ0c3NzcnBvcHFycnJycnR4e318endycG9vb29ubWxtbnB0eX+Cg4ODgXxzbWxsbW1tbGtramptc3h8gIKBgX57dnV1dHZ+fn5+fn5+fn5+fn59fX5+fn5+fn19fX19fX19fX19fX19fX1+fn5+fX19fX19fX19fX5+fn5+fn5+fX19fX19fHx9fX5+fn5/f39/f39+fn5+fX1+fn+DiIiGhYJ+e3t+f4CChIWDgX59gIOBfoB/e3h4eXl5dnRxb21ucnh8f4B/gIOGhIGBgICAf317e3t8fHx8fH1+fn5+fHt6enl4eXl5eHd4eHh6enx9fXx7enZ3d3h2c3JxcHBxdHV1d3h7e3p9fHx9fX19fXx7e3t6e3t6e3x+f39+fn9/f39+foCAgYGAgIB/f358enV2en5+fHx9fHt6enp4dnRycnNycG9wcXJycnJydXh9e3t6dXFvb29vb25tbG1ucHV8f4KDhIOBeXFta2xtbW1sa2tqam1zeXyAgoKBfXp1dXV0dn5+fn5+fn5+fn58fH5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn59fX19fX19fX19fX19fX19fn5+fn9/f39/f35+fn59fX5+f4SIh4aDgH58fH9/f4KChIOBf3+Bg4F/gIB8eHh6enl4dXFvbW1yd3x/fXx8g4aEgICBgYB/gH9+fn9/fn5+fn5+fnx9e3p5enl6eXl4eHd3eHl7fX5+fXx7d3d2dnh4dnRzcXN1dXZ3enx8e31+fn19fX19fHx8e3p6ent7fX5/f39/f39/f319f39/f39/gH99fHt4dXV5fn9+fXt7enp6enh2dHJyc3NxcHBycnJxcXJ1eXx7e3l0cW9vb29vb21rbW5xdXuBgYOCgH95cW1rbGxtbGtramlpbnR5fYGCgoF8eHZ2dnV2fn5+fn5+fn5+fn19fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn19fX19fX19fX19fX5+fX1+fn5+f39/f39/fn5+fn5+fn6BhoeGhYJ/fXx8f39/goKDgX+AgYODgH+AgX97enp6enl2c3BubHF2e359eneAhIOAgICAgICAgICAgYF/f4CAfn5+fHx7enl6eXp5enh4d3d4ent9fn5+fXt6eHd3enp4d3V0dXZ2eXl7fX17fX19fX19fX18fHx7ent7e3x+fn9/f39/f39/fn5/f39/f3+Afnx8fHl2dnp+gYB/fXt6enp6eHZ0cnJzc3FwcHJycnFxcnd7fHt6d3Nwb29vb29ubWtsb3J4fYKBg4KBfndvbGtsbG1sa2tqaWludHl9gYKCgXx4dnZ2dnZ+fn5+fn5+fn5+f39+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fX19fX19fX19fX19fn59fX5+fn5/f39/f39+fn5+fn5+f4OHhoWEgX18fX1/f3+CgoOBf4GDhIJ/foCBgXx5e3p8end1cG9tcXZ7fX57d36CgoGAgICAgICAgYGBgYCAgIB/f358e3p6eXl4eXl6eXh3d3h6e31+fn59e3x6enl6e3p5d3d3eHl7fH19fXp8fHx9fX18fHx8fHx7fHx7fH5+f39/f39/f39/f39/f39/f4B+fHx9fHl4en2BgYF9e3p6enp4dnRycnNzcXBwcnJycXFzeHt9enl3c29ub29vb21sa2tuc3yAgoOCgYB8dG5ra2xsbWxra2ppaW50eHyAgYKAe3d1dXV1dX5+fn5+fn5+f35+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fn59fX19fX19fX19fX19fX19fn5+fn9/f39/f35+fn5+fn5/g4eGhYOAfH1+fn9/f4KCg4GAgoSEgn9+gIGBe3l7fH17eXZycG9yd3p8fXx7fYKCgoCAgIGAgICBgYKCgYGBgYCAfnx7enp5eXh5eXp5eHd3eXp8fX5+fn17e3p7e3p8e3l6eXl6fH5/fnx8ent8fH19fXx8fHx8fXx8fHt9fn5/f39/f39/f39/f39/f39/gH58fHx8e3l6fYKEgn17enp6enh2dHJyc3NxcHBycnJxcXR5e3x5eHZyb21vb29vbWxram1zfYCCg4KBgHtybWxrbGxtbGtramlpbnR4fIGCgn97d3V0dHR0fn5+fn5+fn5+fn5+fX19fX5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18fH19fn5+fn5+fn5/f35+fn5+fn5+f4CFh4WFg398fH19gICAgYOEgoKDh4SBf36AgYJ9enp9fXt6d3Rxb3J2ent8e3x/goOCf4CAf4CAgIGBgYGAgICAf39+fHt6enl3d3l5e3p5eHd4fH1+f35/fn18fHx8fHx8fHx7ent+f398ent5eXp8fX18fH19fX19fX19fX5+fn9/f39/f35/fn5/f4B/f39/f319e3t8ent/goKBfnp5eXl4eHd1c3FydHJxcXNycnJydnp8fHp4dHJwbm5ub21ta2lqbnV9gIODgoCAeXJta2xtbW1ra2tqampvdXp+gYGBfXl1dHR0dHR+fn5+fn5+fn5+fn59fX19fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fX1+fn5+fn5+fn9/fn5+fn5+fn5/gYWHhYSCf3t8fH5/f4CBg4SDg4aIg4F+fX+AgX15eX1+fHt5dnJvcnV5eXl7fX+ChIN/gIB/gICAgICAgICAgIB/f358e3p6eXd4eXl7e3l4d3l7fH5/fn9+fn5+fn59fXx9fHt6fH5/fnt5enl5enx9fXx8fX19fX19fn5+fn5+f39/f39/f4B+foCAgX9/f39/fX17e3t8fH+Cgn99enl5eXh4d3VzcXJ0cnFxc3Jyc3N2enx8enhzcXBubm5vbW1ramxweH+Bg4OCgH94cWxrbG1tbWtra2pqbHB2e3+BgYF9eHR0dHR0dH5+fn5+fn5+fn5+fn19fX1+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX5+fn5+fn9/f39/f35+fn5+fn+BhIaEg4F+fHx9fn9/gIGDhIOEiIiEgX59f4B+end4fH99fHp3c3FydHd4eHt9f4OEhICAgH+AgIB/f39/gICAgH9/fnx7enp5eXl5eXt7enl4eHh7fX5+f35+fn5+fn59fX18fHx/f318eXh5eXp6fH19fHx9fX19fX19fX5+fn5/f39/f39/gICAgYGCgH9/fn59fXt7fH19f4GAfXt6eXl5eHh3dXNxcnRycXFzcnJzdHd7fHx6d3NxcG5ubm9tbWtrbHJ6gIGCg4KAfXZxbGtsbW1ta2trampscHZ6f4GBgXx2dHNzc3Nzfn5+fn5+fn5+fn5+fX19fX5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1+fn19fn5+fn5+gIB/f4CAfn5+fn5+f4GEhoSDgX58fH5+fn6AgYOEg4aHhoOBfXx+f3t3dnd8f399e3h0cnF0dXd5fH6Ag4WEgICAf4CAgH9/f3+AgICAf39+fHt6enl5eXl5e3t6eXh4eHt9fn5/fn5/f39/fn5+fn19fn9+fHl4eHp5enp8fX18fH19fX19fX19fn5+fn9/f39/f3+AgYKDg4KBf399fX19fHx9fn6AgX99e3p5eXl4eHd1c3FydHJxcXNycnJ0d3x8fHl3cm9wbm5ub21ta2tudHyBgoKDgoB8dXBra2xtbW1ra2tqam1xd3p/gYGBfHZ0c3Nzc3N/f39/fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fHx8fH19fX1+fn5+fn5+fn9/f39+fn5+fn5/gIOFhIKAfnx9fX5/f3+AgYOFh4iEgn98e36Ae3Z0dHmAf357eXVzcnJ1eHp9f4CBhISAf39/f39/f39/f39/f39/f319e3t7enp6eHh4ent6eHd3eX1+f39+fn9/f39/fn19fX1+f397eHh5e3x9e319fHx8fX19fX1+fX1+fn5+f39/f39/f3+BgoOEgoJ/fn19e3x7e31+f4GBgH18eXp6eHh5d3VzcXN0cnFxc3Jyc3V6e3x8enZyb29vb29vbWxram53foGDgoOCf3p0bmxqa2xsbGpqamlpbXJ2fICBgoF7dnNycnJycn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX19fHx8fHx8fX19fX5+fn5+fn5+f39/f35+fn5+fn+Ag4WFgn99fH59fn9/f4CBhIaHh4OBf3x8foB7dnR1eH6Af3x6d3RycXV5e36Af4CDhIB/f39/f39/f39/f39/f35+fX18fHt7enp4eHh6e3t4dnZ4fH5/f35/gIB/f39+fX19fX19fXl4eXt8fn99fn18fHx9fX19fX19fX5+fn5/f39/f39/f4GBg4SDgoB+fX18e3t7fX9/gYGAfXx5enp4eHl3dXNxcnNycXFzcnNzdnt7e3t5dnFvb29vb29tbGtrcXmAgoODhIJ/eXJubGprbGxsampqaWlscnd9gIGCgHt1c3JycnJyf39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX19fX19fX19fX19fX19fX18fHx8fHx9fX19fn5+fn5+fn5/f39/fn5+fn5+f4CDhYWCfnx8fn1+f39/gIKFhoeGgoB+fn1+gHx3dXZ5foCAfXt4dXJxdXl7fYB+foCEgH9/f39/f39/f39/f39/fn59fXx8e3t6enp6ent7e3h3dnd7fn9/fn5/f4CAf359fX19fXx8eXh5e31/gH5+fXx8fH19fX19fX19fn5+fn9/f39/f39/gIKDhISDgH99fXx7e35/f3+BgYB+fHl6enh4eXd1cnBxcnJxcXNyc3R3e3t7e3h1cW9vb29vb21sa210e4GDg4OEgX54cG1ramtsbGxqampqamxyeX6AgYJ+eXVycnJycnJ/f39/fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX19fX19fXx8fHx8fH19fX1+fn5+fn5+fn9/f39/f39/f39/gIOFhIF9e3x+fX5/f3+Ag4WFh4WCf35+fX6AfXh1dnl+gIF+fHl2c3J1enx9fn18gISAf39/f39/f39/f39/f399fX19fX17e3p6enp6e3t7eHd2d3p9f39+f4CAf39/fn19fX19fHx5eXl8foGBgH59fHx8fX19fX18fn5+fn5+f39/f39/f3+AgYOEhYOAgH19fHt9gIB/f4GBgX58eXp6eHh5d3VxcHFycnFxc3JzdXl7e3p6eHRxb29vb29vbWxrbnR7goODgYKBfXdwbWtqa2xsbGpqampqbXN6foCBgn14dXJxcXFxcX5+fn5/f39/f39+fn9/fn5+fn5+fn5+fn5+fn59fX17fn5+fn19fX19fX1+fn59fX19fX19e3x8fHx8fHx8fHx9fX5+fn6AgH5+fn5+fn9/gH58f36AhISDgn57fHx9f35/foGDhYeHg39+fn58foB9eHZ3eX1/gH59end0dXh7ent9e3l7goKAgH5+fn5+fn5+fn5+fn5+fn5+fnx7e3p7enh7fHt5eHd4eHp9fX9/f39/f399fn59fX9+e3l6e3+Bg4KAf35+fn19fH59fX19fX19fn5+fn9/fn5/f4CBhISEhIKBfn1/f4CBf39+gIGBf3x6enp5eHh3dXFvb3BycnJycnN2e3x8enl2c3Bvb29vb25sa2tudn6ChISDgYF8dXBsa2trbGxta2traWpvdHp+gICAe3h1c3JxcXFyfn5+fn9/f39/f35+f39+fn5+fn5+fn5+fn5+fn19fXt9fX19fX19fX19fX5+fn19fX19fX17fHx8fHx8fHx8fH19fn5+fn9/fn5+fn5+f3+Af31/f4GDhISDf3t8fH5/fn9+gYOHiIaDgH5+fnx+gH13dXZ5fX+Afn18eHV3ent5ent5d3iAgoF/fn5+fn5+fn5+fn5+fn5/f35+fHx8ent6eHt8fHt5eHd2eHt9fn5/f39/f318fH19fnx7enp9gIODgoB/foCAfn18fX19fX19fX1+fn5+f39+fn5+gIGEhISEg4GAfYCAf39+f3+AgoB/fHt6enl4eHd1cW9vcHJycnJzdHh7fHx6eHVzcG9vb29vbmxra3B5f4SDg4OBf3t0b2xsa2tsbG1ra2tpanB1e3+AgIB7d3RycXFxcXR+fn5+f39/f39/fn5/f35+fn5+fn5+fn5+fn5+fX19e319fX19fX19fX19fn5+fX19fX19fXt8fHx8fHx8fHx8fX1+fn5+fn5+fn5+fn5/f4B/fn5+gISEhIOCfnx8fn99fn6ChYmJhYOBf39+fH6AfXVzdXp8foCAf3x5eHl7e3h5eXl3eH6BgH5+fn5+fn5+fn5+fn5+fn9/fn59fX18fHt5fH19fHl5eHd4enx+fn9/f39/fXx8fX1+fHt6en6BhISDgH9/gYF/fn19fX19fX19fX5+fn5/f35+fn6AgYSEhISDgYF/gYF/fXx+fn+BgH98e3p6eXh4d3Vxb29wcnJycnN1eXt8e3l3dHJwb29vb29ubGttcXqBhIODg4F+eXNwbGxra2xsbWtra2prcHZ8gIGBf3p2c3JxcXFydH5+fn5/f39/f39+fn9/fn5+fn5+fn5+fn5+fn59fX17fHx8fH19fX19fX1+fn59fX19fX19e3x8fHx8fHx8fHx9fX5+fn5+fn5+fn5+fn9/gIB+fn+BhIWFhIOAfXx9f31+f4SHiYeFg4OAgX58foB8dHJ1e3x+f4J/fXh5e317eHl4d3d4fYF/fn5+fn5+fn5+fn5+fn5+f39+fn5+fX19fHp9fnx7e3p5d3h6e319f39/f399fHx9fX99e3p6f4OEhIOAf4CBgYGAf359fX19fX19fn5+fn9/fn59fYCBhISEhIOBgYCBgYB9fX9/gIGBf3x7e3p6eHh3dXFvb3BycnJydHZ6fH17d3Z0cXBvb29vb25sa290fIGEg4OCgH13cm9sbG1sbm5ta2tramtwdn2AgoJ/enVzcnFxcXN2fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fHx9fX19fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn9/f4CAgH5+f4GFhoWFhIF8fHx+fYCChYiJhYSEhIKBfnp9gHx1c3d7fH1/g4J+fHx8f3x5eHh4d3h9fn9+fn5+fn5+fn5+fn5+fn5/gH5+gH9+fn59e3x9fXx8enp5eXl5e31+f4CAgH59fX5+fn58enp/g4WEgoB/gIKDg4GAf35+fX5+fn5+fn5+fn1+fnx+f4CCg4ODg4KCgoKCgn9+gIB/gYF/fHp5enp5eHZ0b25vcHJycnN0dnt8fHp2dnNxcG9vb29vbm1sbnV+goODg4KAfHVxb21sbG1tbW1rampqbXF3fICBgX95dHNycnBxdXh+fn9/fn5+fn5+f39/f35+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+fn5/gIKCf36AgoSGhYWGgn17fH5+g4aGh4eEhIWFhIF+en2AfXZ0eHx9fYCDg39+fn5/fXp3eHh4eX1+f35+fn5+fn5+fn5+fn5+fn+Afn6AgH9+fn58fX5+fX16e3t6eXl7fH1+f39/fn19fn5+fnx7e3+DhYSCgH+AgoSDgYB/fn59fn5+fn5+fn5+fX19fH5/gIKDg4ODg4WEg4OBgH+AgICAgH99e3l6enl4dnRvbm9wcnJyc3V4fH17eXZ1c3Fwb29vb29tbGxveH+Dg4ODgoB7dHFvbWxsbW1tbWtqampucnh9gIGBfnhzcnJycHJ3en9/gIB+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fHx9fX19fn5+fn5+fn5+fn+Ag4N/fn+BhIaGhYaDf3t7foCFiYiGhYKChYWFgn95fH9+eXV4fH58f4ODgH9/f399enh4eXl7fH5/fn5+fn5+fn5+fn5+fn5+f4B/f4CAf399fXx9fn59fnx8e3p7e3p7e31/f359fX19fX5+fXt7gIOFg4GAf4CCgoGAgH9+fn1+fn5+fn5+fn59fX1+f4CAgYKDg4ODhYaEhIKCg4SEg4KBgH18enp6eXh2dG9ub3BycnJzd3p9fXt5dXNzcXBvb29vb21rbnF6f4KCg4KBf3hzcW9tbGxtbW1ta2pqa29zen6AgYF8d3NycnJxdHh7gICAgH5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx8fH19fX1+fn5+fn5+fn19f4CCgoB+gIKEhoaFhoR/fHt/gYeJhoWCgIKHh4WDgHl8f357dnh8fnx/g4OBgH9/f315eHl5e3x8fn9+fn5+fn5+fn5+fn5+fn5/gICAgYB/f318fH1+fn5+fXx7e3t7ent6fH5+fn19fX19fn59fHyBg4WEgoB/gIKBgYGAf35+fX5+fn5+fn5+fn18fH5/goGAgoODg4OEhoSEg4WIiYmGhYWAfX17e3p5eHZ0b25vcHJycnN4e359enh1c3NxcG9vb29vbGtuc3yBgoKCgoF/d3Nwb21sbG1tbW1ramprb3N6f4CBgXx2c3JycXN1eXx/f39/f39/f39/f39/f39/f39+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX19fX19fX19fXx8e3t8fHx8fHx8fH19fX1+fn5+fn5+fn5+fn59f4GBgX9/gYWFhoaFhIF8fH+DiImFg4B/goaHhoN/eHl/gH14eHx8enyBgoODgH9+fnl3eHl6e319fX19fX5+fn5+fn5+fn5+fn9/gICBgX9+fHx8fH59fX5+fHx8fHx7ent8fH18fHx7fX59fXx8fYGEhYOBf39/goKCgYCAf35+fn59fX5+fn5/fXx8gIGCgYKDg4ODg4SEhISGh4uMjIyKiIOAfnt7enl4d3Rwb3BxcXJydXh8fnx6eHVycnFvbm5ubW1rbG51foGCgoKBgX11cnBubGxtbW1tbWxpaWxwd3yAgYGAe3ZzcnJzdXd7fn9/f39/f39/f39/f39/f39/f35+fn5+fn9/fn5+fn5+fn5+fn5+fn59fX19fX19fX19fHx8fHx8fHx8fHx8fX19fX5+fn5+fn5+fn5+fn1+gYGAf3+BhYWEhIWGg398f4SHh4KAfn+BhYaGhH93d36Bfnp6fX16e3+Dg4KAf35+e3h4eXp7fX19fX19fX1+fn5+fn5+fn5+f3+AgIGBf359fX19fn19fn59fX19fHx6ent7fHt7fHp8fH19fHx9gYWFg4B+fX6BgoKBgIB/f35+fn19fn5+fn99fX+EhIOCgYODg4ODg4OEhIeIioyMjIqIhYOBfn15eXh3dHBvcHFxcnN3en1+fHp4dHJxcG9ubm5tbWtscHh/gYKCgYGAfHVxcG5sbG1tbW1tbWlpbXJ5foCBgX96dnNyc3R3eX2Af39/f39/f39/f39/fn5/f39/fn5+fn5+f39+fn5+fn5+fn5+fn5+fn19fX19fX19fX18fHx8fHx8fHx8fHx9fX19fX1+fn5+fn5+fn5+fn1/f3+AgIKGhoOChIWFgXx/hYeEgH18f4GEhYaEf3V2fYJ/enp9fXp5foGCgoB/fn58enh5ent9fX5+fHx9fX19fX19fX5+fn5/f4CAgYF/fn19fX1+fX1+fn5+fX18fHt7e3t7e3t7enx8fH18fH2BhISCf318fX+BgYGAgH9/fn5+fX1+fn5+f31+gYaFhIOAgoODg4OCgoKFiImLjY2Ni4qHhYWCf3t5eXd0cG9wcXJydHh7fX57eXd0cnFwcG5ubm1ta2xxeoCCgoKBgX56dHJvbWxsbW1tbW1taWltcnl+gYGBf3l1dHNzdXl8f4B/f39/f39/f39/f399fX9/f39+fn5+fn5/f35+fn5+fn5+fn5+fn5+fX19fX19fX19fXx8fX18fHx8fHx8fH19fX18fH5+fn5+fn5+fn5/fX5+f4GChIaGgoGEhoaDfH+EhoJ9e3t+gIKDhoR+dHV8goB7e35+enh8f4KBgH9+fnt5eHl6e319fn57e3x8fHx9fX19fn5+fn9/gICBgX9+fn5+fn59fX5+fn59fXx8e3t7e3t7ent6e3t8fHx8fYGEhIJ/fXx9f4CAgYB/f39/f39+fn9/f399fYCChIOCgYCCg4ODg4KCgYSIiouMjY2Mh4WGh4WCfXl5d3Rwb3BxcnJ0eXx9fnt5dnVycXBwb25ubW1qbHF6gIOCgoGBfXlzcW5sbGxtbW1tbW1paW1yen6BgYGAeXV1dHN2en6AgICAgIB/f39/f39/f35+f39/f39/f39/f39+fn5+fn5+fX19fX5+fn58fH19fX19fX19fHx8fHx8fHx8fHx8fX19fX19fn59fX5+fn5+fn5+fn5/gIKEhYaBgIKFhoR+foOEgHp6fX6AgIOHhX51c3mAgHx7fnx6eXt/gYKBgH9/e3l5eHp7fX1+fnx6fHx8fHx8fX1+fn9/fn5+gICAf39+fX19fn5+fn59fX1+fXx8fHx8enx7e3p6e3t7e319gYSEgn99fH2AgICAf3+Af39/f35+f39/f31+gYODgX9/f4GEhISEg4KChIiJi42NjIqHhYWIiIR9enh3c3Bvb3Fxc3Z5fX18eXd1c3Jwb29vb29ubWtscnuAgoKCgYB+eHNxb2xsbGxsbW1tbWtqbnN7gIGBgH55dnRyc3Z8f4GBgICAgH9/f39/f39/fn5/f39/f39/f39/f35+fn5+fn59fX19fn5+fnx8fX19fX19fX18fHx8fHx8fHx8fHx9fX19fX1+fn19fn5+fn5+fn5+fn+Ag4WGhYB/gYWFhYB/goSAenp7fX5/goaGfnVzeYCAfXx+fHt6en6BgYGAf397enp4ent9fX1+fXt8fHx8fHx8fH5+fn5+fn6AgIB/f359fXx9fn5+fn19fX59fHx8fHx7e3p7enp6e3t7fX6Bg4OBf31+fICAgICAgIB/f4CAf35/f39/fX+AgYB9fHx/gYODhISDgYKEh4iKjIyLioaEhYiJhIB+eXdzcG9vcXJzd3p9fXx4dnRzcXBvb25ubm1sbG50foGCgoKBgH54cnBtbGxsbGxtbW1tamludHyBgYGAfXd0dHJ0eH1/gYGAgICAf39/f39/f39+fn9/f39/f39/f39/fn5+fn5+fn19fX1+fn5+fn59fX19fX19fXx8fHx8fHx8fHx8fH19fX19fX5+fX1+fn5+fn5+fn5+f4CChIWEf35/hIWEgn+Bg4J8ent9fX2BhoZ+dXN5f4F+fX9+e3p7f4CAgH9+fnx7e3p6e319fX5+fXx8fHx8fHx8fn59fX5+foCAgH9/fn19fH1+fn5+fn59fn19fXx9fXx8e3t6enp6e3t9foGCgoB+fH1+gYGBgoGBgH+AgICAf4CAgIB+gH+Af318fH+Bg4OEhISCgoSHiIqMi4mGh4aGh4mHhIJ7d3RxcHFyc3R5e359e3h2c3JwcW9ubm1tbWtsb3Z+goGBgYGAfnhxb21sbGxsbG1tbW1qam91fICBgYB9d3R0c3Z6foCCgYCAgIB/f39/f39/f35+f39/f39/f39/f39+fn5+fn5+fX19fX5+fn5+fn19fX19fX19fHx8fHx8fHx8fHx8fX19fX19fn59fX5+fn5+fn5+fn5/gIGEhYV/fn6BhYWDf4CDgn57e3x9fYGGhn51c3l/goB/f357ent+gH+Afn19fXt7enp7fX19fn59e3x8fH19fHx+fn19fn5+gICAf39+fX19fn5+fn5+fn1/fn19fHx9fX18e3p6enp6e31+gYKCgH18fX6Bg4OEg4GAgICAgYF/gICAgICAf39+fH19f4GCgoSEg4KDhIaHiYyIh4WGh4eIioqIhH12c3JxcXNzdXp9fnx6d3VzcXBxcG5ubW1sa2xwd3+CgYCAgYB9eHFvbWxsbGxsbW1tbWlqb3Z9gIGBgH13dHR0d3x/gIGAf39/f39/f39/f39/f39/f39/f39/f39/f39+fX5+f399fX5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fX19fX5+fX1+fn5+fn59fX19fX1+fn6AgoSEhH9+f4CEhoSCgoODgHt7e3x+goaGfXN2eX+CgYCAfnx6fH6AgH59fX5+fHx7ent7fH1/goF+fHp6fHx9fX5+fn5+fn5+fn9+fn5+fn5+f39+fX19fX1+fn18fHx+f317ent5enp7e3x+f39+fn5+gIGDhISDg4GAf4CAgYCAgICAgYCAgH99fX1/gYCBhYWEgoKChIWGhoSDgoeJiIeIi4qGf3hzcnJycXR4fH59e3p2c3JxcXBwbm5ta2tqa3F5f4CAgYCAf313cW9ubG1tbW1sbGxramtvdX6AgYGAe3RydHV4fICBgX9/f39/f39/f39/f39/f39/f39/f39/f39/f359fn59fX19fn5+fn5+fn5+fn19fX19fXx8fHx8fHx8fHx9fX19fn9+fn5+fn5+fn19fX19fX5+foCChISEgH9/gIOGhYSEhISCe3t7fH+Ch4Z+c3N3fYCBgIB+fHp8fn9/fXx8fn5+fXx7e3p7foGFhYB8enp8fH19fX1+fn5+fn59f35+fn5+fn5/f359fX1+fn5+fHx8fH5+fn17e3p6ent7fH5+fn1+f4CCgYOEhIODgoB/foCAgH9/gIGCgYCAf319foCCgYKFhYSCgoKDhIODg4GChYaHiImJiYmDfHVycnJxdXp+f3x6eHVycXFxcHBubm1ra2pscnuAgICAgIB/fXdwb25sbW1tbWxsbGtra3B2f4GBgYF6dHJ1dnl9gYGBf39/f39/f39/f39/f39/f39/f39/f39/f39/fn1+fn19fX1+fn5+fn5+fn5+fX19fX19fHx8fHx8fHx8fH19fX1+f35+fn5+fn5+fX19fX19fn5+gIKEhISAf3+Ag4WGhIWFhoN8ent8f4OIhn90cXV8f4GAgH58ent9fn58e3p8fX9+fHt7e3x/goaHgXt6enx8fHx9fX5+fn5+fn1/fn5+fn5+fn9/f359fn5+fn58fHx8fH1+f359e3t7e3t8fn19fX+AgYKChISEg4OCf359gIGCgX+AgYKCgIB/fX1+gIKDhIaGhIKCgoOCgoKEg4WFg4eIiYiJiIiBeHRzcXF2e39+fHl3c3JwcXFwcG5ubWtram10fIGBgIGAgH99d3BvbmxtbW1tbGxsa2trcnh/gYGBgHp1dHZ4e32BgYB+f39/f39/f39/f39/f39/f39/f39/f39/f39+fX5+fn59fX5+fn5+fn5+fn59fX19fX18fHx8fHx8fHx8fX19fX5/fn5+fn5+fn59fX19fX1+fn6AgoSEhIB/f4CChYaFhYWGg356e3x/g4mGf3RzdnyAgYCAfnx6e3x+fnt7eXp8f399fHx8fn+Eh4mEfHt7fHx7e3x8fn5+fn5+fX9+fn5/f35+f39/fn5+f39/fn19fXx8fX5/f358e3x7e3x+fHx+gICBgoKEhISEg4J/fXyAg4SDg4KDgoKAgH99fX5/gYKDhoaEgoKBgoGCgoSFhYiDhYeHhYiGioN8d3Nyc3d9gH57eHZzcXBxcXBwbm5ta2tqbXV9gYGBgH+Af313cG9ubG1tbW1sbGxra2tyeYCBgYF/eHR0d3p7fYGBgH1/f39/gICAgH9/f39/f39/f39/f39/f39/f39+fn5+fn19fX1+fn5+fn5+fHx8fHx8fHx8fHx8fHx8fHx8fX5+f4B+fn5+fn59fX19fXx9fX19fn+ChISCgYCAf4CEhoaFhYeDfnp7fX+Dh4WAd3d4fX+BgYB/fXt8fX17enh4eHx/fn19fX2AgoaJiod+e3p6ent7e3t9fn5+fn5+fn5+fn5+fn5/fn9/fX1+f39/fn58fX1+fn+Af399fHx8fX18fX5/gYGAgYODgoOEgX17en+DhoaGhYWGhIGAgH58fX6AgIKGhoSBgYKCgoODhYaFhIGDhYWAh4iJhn53dHJyeX2BgHt5dnFwcHFxcHBvbm5sbGtud3+BgYGAgIB/fndvb21tbW1tbW1tbGppbHN6f4CAf355dHV3en1+gYF+e39/f3+AgICAf39/f39/f39/f39/f39/f39/f35+fn5+fX19fX5+fn5+fn58fHx8fHx8fHx8fHx8fHx8fHx9fn5/gIB/f39+fn19fX19fH19fX1+f4GEhIKBgIB/f4OFhYaGh4J9eHl+gYWHhYJ7enp+f4GBgIB9fH19fHt5d3Z2e35+fX5+f4KEhomLiYF7e3p6e3t7e3x+fn5+fn19fX1+fX1+fn9+fX19fX5/f399fn1+fX19f4CAgH59fHx8fH1+f4CBgYCBg4OCgoSBfnt6fYGEhoaFhoeDgYCAfXt9foCAg4aGg4GAgoKCg4OEhYSDf4GDgXqJkYyIgXl0dHR8foB/enh1cHBwcXFwcG9ubmxram52f4KCgYB/gH98dXBubG1tbW1tbW1samltdHt/gIB/fnh1dnl7foCBgH16f39/f4CAgIB/f39/f39/f39/f39/f39/f39/fn5+fn59fX19fn5+fn5+fnx8fHx8fHx8fHx8fHx8fHx8fH1+foCBgYF/f35+fX19fX18fX19fX5/gIOEgoGAgH9/gYSEhoaGgX14eX2BhoeGg4B9fX5/gICAgH59fX17enh2dHV5fH1+gICBhIeIiouKhHt7enp7e3t7e31+fn5+fX19fX5+fn5+f359fXx8fX5+fn1+fX18fX1/gICAf358fHx8fX6AgYGBgoKBgoKChIF/fHp8f4GCg4OEhoKAf398e31+gIGEhYWCgICBgoKDg4SFhIN/gIF9e4uXj4uGf3l5eX+Af356d3RwcHBxcXBwb25ubGppbnaAgoKBgH+Af3t0b25sbW1tbW1tbWxqaW51en+Af359eHV4fH5/gIB/e3h/f39/gICAgH9/f39/f39/f39/f39/f39/f35+fn5+fn19fX1+fn5+fn5+fHx8fHx8fHx8fHx8fHx8fHx8fX5+gIGBgYCAfn59fX19fXx9fX19fn+Ag4SCgYCAf4CAhISFhYaBfnl5e4CGiYiDgH5+fn+AgICAfn19fXt6d3VzdHl7fH+CgoOGioqLjY2HfXt6ent7e3t7fH5+fn5+fn5+fn5/fn5/fnx7fHx9fn5+fn59fXx9fH9/gIB/fnx8e3t8foGBgIKDg4B/gYKEgX98enx9f4GBgoSFgoB+f3x7fX6AgYSFhYKAgIGCgoKChIWEg4CBf31+kJWQjYuGgH18fn9+fnp3dHBwcHFxcHBvbm5samlueICCgoJ/f4B/fHVubmxtbW1tbW1tbGpqbnV6f4B/fnx2dHh8f3+AgH97d35+f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fn59fX18fHx8fHx8fHx8fHx8e3t8fHx+fn6BgoKDgX9+fX19fX18fH19fn59f4GCg4OBf4GAgICCg4WFhYN/fXt8gIWGh4SBfn59fn+Bf359fH18e3l3dHR0d3l+f4KEhYiJiYqMjIqBe3p6enp7fHx9fn5+fn5+fn5+fn5+fn59e3t5fHx9fn5+f35+fn18fn+AgH9+fHt7e3x+gYGBg4KBgICBgoOCf358fXx/fn+AgYOBf35+e3x+foCChYOCgYCAgoKCg4ODg4ODgYKAfYCNkY6LkI2FgX99fH17eXZyb29xcXFvb29ubWtoam95gYOBgYB/f398dW5ubG1tbW5ubm1raWtudnx/gIB/e3Z1eX1/f4CAfnh2f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX19fX19fXx8fHx8fHx8fHx8fHx8fHx8fH5+foGBgoOBgH59fX19fX19fX1+fn5/gYKDg4F/gYCAgIGDhISFhIOBgYGEhoaFg39+fn19foF/fn18fXx6eHZzc3N1d3yAg4WGh4mJiYuMjIR8enl6e3t8fH1+fn5+fn5+fn5+fn5+fn17e3l8fH1+fn5/f35+fn5+f4CAf358e3t6fH6BgYKDgYF/f4CCg4N/fXx8e31+f3+BgoB+fn57fH5/gYKFg4GBgIGCg4ODg4ODg4OCgoF+gYmOkpGQiYF/fXp4eXp4dnJvb3FxcW9vb25ta2lqcnuAgoGBgH9/f3x0bm5sbW1tbm5ubWtpa294fn+AgH97d3d6fX+AgH98dnaAgH9/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX19fX19fX18fHx8fHx8fHx8fHx8fH19fHx8fn5+gIGDhIOBfn18fH19fX19fX5+f4CBgoODgX+Af4CAgYOEhISEhYWGhoeIh4WDf319fX5+gH9+fHt7e3l2dXJzcnR3fICChIeIiYmJi4yNiH56ent8fHx8fX5+fn5+fn5+fn5+fn9+fXx7e31+fn9/f4CAf35+fn5/gIB/fnx7enp8foGBg4OAgH5+gIKDg399fHx8fX19f4KCgH59fnt8fn+BgoWDgYGAgoKDg4ODg4ODg4ODgoGDiY+SjYiDf3t5eHh4eXh2c3BvcXFxb29vbm1ramt0fYCCgYGAf39/e3JtbWxtbW1ubm5tamhrcXh9f4CAf3t4eXx+gICAf3l0dYCAf39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fHx9fHx8fHx8fHx8fHx8fHx8fX18fHx+fn6AgYOEhIN+fXt7fX1+fn19fn5/gIGCg4OBgH9+gICBgoODhIWGh4mJiIiGhoSAfHx+f36Af357enp6eHZ1cnJxc3Z7gIODhYeJiYqLjY6LgX18fHx8fHx9fn5+fn5+fn5+fn5+fn59fH19f39+f39/gIB/fn9/fn+AgH9+fHp5eXx+gYGCgX58fX2AgYODf318fH18fH1/goGAfn1+e3x+gIKChYOBgYCCg4SEg4ODg4ODhYWDg4WKj4+GgX98dnZ8enl3eXhzcW9xcXFvb29ubWtrbXR+gIKBgYB/f397cWxsbG1tbW5ubm1qaGtzeH1/gIB/e3h6f3+AgIB+dnJ0f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX19fXx9fHx8fHx8fHx8fHx8fHx8fHx8fX59fX+BhIWFhIB9fHx8fX5/fn5/f4CBgoKDgoCAgH9/f4CAgoSEhYWHiIiIiIeGhIF9fH5+fn9+fXt6enp3dnRzcXFxdHh9gYKChYmLi42NjYyHfXt8fXx9fX5+fn5+fn5+fn5+fn59fX19f4B/f35+fn9+fn9/gH9/f39/fn19e3h6e3+BgIKBf3x9foCBhIR+fHt8fXt7fH+AgH+Af318fH6BgoSGg4B/gYKEhISEg4KDhISFhYWEhoqOioN+e3dyen9/e3R3fHlzcHBxcG9tbm1ta2ptc3+BgYGBgH+Af3pxbW1sbW1tbm5tbGlpbHR5fX+Af356eHp+f4CBgX10c3V/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX19fX19fH18fHx8fHx8fHx8fHx8fHx8fHx+fn19f4GEhIWFgX18fHx+fn+AgIGBgoKDgoOCgICAf39/f3+BhISEhIWHh4iIh4aEgX58fX5+fn58e3p6eXd2dHJxcXF0d3yBgYGEiIqKjI2Njop+fHx9fH19fn5+fn5+fn5+fn5+fn1+fn9/f39/fn5+fn19fn+Af3+Af39+fX17eHl7gIGAgH9+e3x9f4GDgn99e3x+fHx9f4CAgH5+fXx8foGChYaDgICCg4WFhYWDgoSEhISEhYSHio2HgHp3cnZ/goJ9d3Z8fHVycHFwb21ubW1ram11gIKCgYGAf4B/eXFtbWxtbW1ubm1saWltdHp+f4B/fnp6fH+AgIGAe3Rydn9/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fX19fX18fXx8fHx8fHx8fHx8fHx8fHx8fH5+fX1/gYOEhYWCfnx8fX9/gIGBg4OCgoOCg4KAgIB/f35+f4CDhIOBgYKFh4iHhYSBfnx9fn1+fXx6eXh4dXV0cnJycXN2e3+CgIKGiImLjY2Pi4N8e3x8fX1+fn5+fn5+fn5+fn5+fn+AgH9+fn59fX19fHx9fn9/f4B/f359fXt5eX2BgYB/fn17fH2AgYOCgH58fX99fH5/gICAfn59fHx+gYKFhoOAgIKFh4eFhYODhYSEhISFhYiLjIZ+d3Jxe4ODgYB7d3p8dnNxcXBvbW5tbWtpbnd/goKBgYB/gH94cG1tbG1tbW5ubWxpaW51en5/gH9+e3x+gICAgH54c3N3f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fX19fXx9fHx8fHx8fHx8fHx8fHx8fHx8fn59fX+Bg4SFhYSAfHx+f4CBg4OEhIODg4KDgoCAgIB/fn9+gIKDgn9+foKHiIeFhIF+fH19fX58e3l4d3Zzc3RzcnJxcnZ6foGBgoWHiYuLjY6Nh358e3x9fX5+fn5+fn5+fn5+fn5+f4CAf35+fn19fXx6ent9fn9/gH9/fn19e3l5fYGBgH58e3t7fYCBg4OAfn2Af319fn+AgYB/fn18fH6BgoWGg4CBg4eHiIWFg4OFg4SEhIaIiYmNhXx0b3J9hYJ/gnx2eHt5cnJxcG9tbm1ta2hud4CBgoGBgH+Af3hvbW1sbW1tbm5tbGppb3Z8f3+Af358fH+BgIGAfXdyc3h/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn19fn59fX17fHx8fHx8fHx8fHx8fHx8fH19fX1+fn5+fn+BgoWGhIF9fH6AgoOEhIaGhYWEg4OBgYGBgX9/f39/goSCf319gYeIhYSEgX58fHx9fXx6d3Z4dnR0dXNzc3Jzdnh8gIKDhIaHiYuMjo6KgHx7fH19fX5+fn5+fn5+fX1/fn9/f399fX19fH18e3p4ent8f39/f39/fXt6ent/gIB+e3x8e3x+gYKGg4B/gIB/fn5/f3+BgH9+fXt8f4KDhYSBgYKEiImIhoWEhYaFhYWEhIWHiIuGfHRvc32DgH6AfXZ2fH94c3JwcG9ubWtraW95gIGAgYKAf4B+d3BtbWxsa21tbWtqaGludnx+f39/f31/gICAgIB7cnJ1e39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fX1+fn19fXt8fHx8fHx8fHx8fHx8fHx8fX19fX5+fn5+f4CChYaGgn59f4GDhISEhoaFhYSDg4GAgICAf39/f3+ChIJ+e32Bh4iFhISAfHt9fX19fHp3d3Z1c3N1dHNzc3R2eHt/gYKDhIiJi4yOjo2Efnx8fX19fn5+fn5+fn59fH9+gH9+fnx8fH18e3p7e3l5eXx+f39/f399e3p6fH+AgH57fHx7fX6BhIaEgH+Af39+f4CAgIGAf359fH2AgoOFhIGBgoSIiYiHhYSGhoaFhYWEhYeJiYd+dXBzfIF+e35+eHZ8gHt0cnBwcG5ta2tqcHmAgYCBgoB/gH12b21tbGxrbW1ta2pnaW53fH6AgH9/foGAgICAfndxcnV8f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn59fX5+fX19e3x8fHx8fHx8fHx8fHx8fHx9fX19fn5+fn5/gIKFhoeDf35/goSFhISFhYSEhIKCgICAgIB/f39/f4KDgX56fYGHiIWEhH99e319fX18enl4dnRzdHZ1dHR0dXZ4en1/gIKDiImLi42OjoiAfX19fn1+fn5+fn5+fX19f3+Af359fHx7fHt7e3t8enl5en1+f39/f317enp8f4CAfnt8fHx+f4GEhoSBgIB/fn5/gIGBgYB/fn59foCCg4WEgYGChIiJiIeFhIaGhoWFhYWGhoiKh4B2cXJ6fnx6fn97enx/fHhzcHBwbm1ra2txeoGBgIGCgH+Be3VvbW1sbGttbW1tbGdpb3h9foCAf35+gICAgH99dnFzeH1/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn19fn59fX17fHx8fHx8fHx8fHx8fHx8fH19fX1+fn5+fn+AgoWGh4OAf4CDhIaEhIWFhISDgoKAf39/f39/f39/goOCf3t9gYeIhYSFf317fn59fXx6e3p2dHR1dnV1dHV2dnl6e35/gYKGiYqLjY6NioN9fHx+fX5+fn5+fn5+fH2AgYB9fHx7fHt8e3p7e318eXt6fH1/f39/fnt6enx/gIB+e3x8fX5/gYSHgoCAf35+fn+AgYGBgH9+fX1+gYKDhYSBgYKEiImIh4WEhoaGhYWFhYaGh4iHgnhxcXh8fXx+f39/fn18enNwcHBubWtra3F7gYGAgYKAf4B7dG5tbWxsa21tbW1sZ2lweHx9gIB+f39/gH+Cf3t1cHR5fX5+f39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fX19fX19fX19fX5+fn5+fn+BhIWGhIB/gYSEhoWDhYWEhIOCgYF+f4CAgIB/f4CBg4N/fH2Bh4mHhoaBfn1/f359e3t6enh0dXZ3d3Z3dXZ4eXt7fX+AgYWJiouNjY6Mhn99fX5+fn9+fn5+fn19foCAf3x7enp7ent7fH1+fn58e3t8fX+Af39+e3h6fYCBgHx6e3x9foCBhIaDgX9/f35+f4CCgoKAf359fH6AgoSFhIGBgoSHiIiHhYWGhoaGhoaFhYWGiYaDfHN0eHyAf3+AgYKAf359dXBwcG5tbGprcnyBgYCBgX+Af3xybG1tbGxsbG1tbGpoanN4fX5/f39/f4CBgH9+d3Nzd3t9f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/fn5+fn5+fX18fHx8fHx8fHx8fHx9fX19fX19fX19fn5+fn5+f4CDhYaEgYCBhIWFhIODg4ODgoGAgH5/gICAgICAgIGCg4F9fYGHioiHhoJ/gH9/fn17e3t7eXZ3d3Z2dnh2eHp6fHx9f4GBhIiKioyNjo2Lg359fX5+f39/f399fH+AgYB/e3p6ent6enx+foB+fn59fH1+f4B/f357eHp9gYGAfHp6e3x+gIGEhoJ/fX9/fn5/gIGBgX9/fn18foGChIWEgYGBg4eIiIeHhYWHh4eGhoaFhYaIhoV/d3d7foGAgICDhYKAgIB5cXBwbm1samtyfYGBgIGBf4B/fHJsbW1sbGxsbW1saWhrdHp+f39/f39/gIGBf3x2c3R4fH1/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39+fn5+fn59fXx8fHx8fHx8fHx8fH19fX19fX19fX1+fn5+fn5+f4KEhYWDgYGEhYSCgYGBgoKBgH9+fn+AgICAgICAgYKDgn58gIeKiIeHhICAf399fHt7fHx7eHh2dXV2eHl6e3t8fH1/gYGEh4mKjI2OjY2Gf31+fn5/f39/f319f3+Af357enl5enp7fH5/gH9/f399fX5/gICAfnt4en2BgYB8eXl7fH6AgYWGgn9+f35+f39/f4CAfn59fH1/gYKEhYSBgYGDhoeIh4iGhIaHhoaGhoaGh4eHhYF7e31/goGAgIKEg4KBgH10cHBubWxqa3J9gYGAgYF/gH98dG5tbWxsbGxtbWxpaGx0en5/f39/f3+AgYF/enV0dXl7fYCAf39/f39/f39/f39/f39/f39/f39/f39/f39/f35+fn5+fn19fHx8fHx8fHx8fHx8fX19fX19fX19fX5+fn5+fn1/goOEhoWCgoWEg4GAgICBgYF+fn5+f4CAgICBgYCAgYKCfnyAh4qIh4aFgoB/f317e3t8fH16eHZ1dXZ4e3t7fH19fX+BgISHiYqMjI2NjIiDfn5+fn+AgH5+f39/gIB+fHt5eXl6ent9f3+Af4GAgIB9fn+AgIB+e3h6fYGBgHx4eXt7foCBhYaCgH5/fn+Af39/f4B+fXx8fX+CgoSFhIGBgIKFhoiHiIeEhYeHhoaGhoaHh4eFg31+fn2BgH+AgYODg4J/f3ZwcG5tbGprcn2BgYCBgX+Af3x0bm1tbGxsbG1tbWlobHV6fn9/fn5/f4CAgH96dXR2ent8f3+AgH5+fn5/f39/f39/f39/f39/f39/f39+fn5+fn5+fn19fX18fXt7fHx8fHx8fHx9fX19fX19fX5+fn5+fn5+fX+AgoWFhYWDhIOCgH9/f4CAgH9+fn6AgICAgICAf3+AgoN+fYCHiomIhoSDgYB/fHt6enx9fXp4dXR0dXl6fHx9fX5/gICAgoWHiIqKjI2Mi4aAfn5+f4B+fn5/gH9/f358e3l5eHl7fX1/gIB/gYKBgYB/foCAgIB6d3t9f39+end5eXt/gYKEhIF/fn19f39/f36Af358fH1+f4GChIOCgYGAgYSGh4iIhoODhoaGhoWGhoeIiIWCgH18fYKBgICChIWEgYGAeXFvb25ra2xzfoCCgYGBf4CAfXVvbGxsbGttbW1tamltd3x/gH59fn+AgYF/fnd0dXh5e31/f39/fn5+fn9/f39/f39/f39/f39/f39/f35+fn5+fn5+fX19fXx8fHx8fHx8fHx8fH19fX19fX19fn5+fn5+fn59f4CBhYWFhoOEg4KAf39/gICAgH9/foCAgICAgIB/f4CCg39+gIeKiYiGhYSCgH98e3l5e318enh1c3N1eHp8fH59foCAgICBhIaIioqMjYyMiIJ+fn5/f35+f4CBf39/fXx7enp4eXt9fX5/gICCg4ODgoB/gIB/f3t4e32Af356d3l5e3+BgoSEgX9+fH1/fn9/fn9/fnx8fX9/gYOEg4KBgYCBg4WHiIeGg4OGhoaGhYeHh4eHhYJ/fXx9goKAgIOEhYSBgYF7cm9vbmtrbXR+gIKBgYF/gIB9dG5sbGxsa21tbW1qam53fX+Afn1+f4CBgX99dXR1eHl7fn9/f39+fn5+f39/f39/f39/f39/f39/f39/fn5+fn5+fn5+fn59fXx9fXx8fHx8fHx8fX19fX19fX19fX5+fn5+fn1/f4CChIWGhIaDgoB/f3+AgICAf39+gICAgICAgH9/gIGDgH+Ah4qJiIWFhIOAfnp5eHh6fHx7eHVzcnN2enx8fn5+gICAgH+ChoqKiYuMjIyLhX9+fn9/fn+AgYB/fn59fHt6enh6fH19fn5/gYSGhYSDgX+AgH5+fHp8foB/fnp3eXl7f4GChISBf359fX19f39/fn59fHx9f3+Bg4WEgoGBgIGDhIeIh4aFhIaGhoaFh4eHhoaFgn9+f4CDg4GChISEhYKBgX10cG9ua2ttdX6AgoGBgX+AgH10bmxsbGxrbW1tbWppb3d9f4B+fX5/gIGBf3pzdXZ4eXt+f39+fn5+fn5/f39/f39/f39/f39/f39/f39+fn5+fn5+fn9/fn1+fX19fHx8fHx8fHx9fX19fX19fXx8fn5+fn5+fX9/gICDhYaEhoOCgH9/f4CAgICAgH6AgICAgICAfn9/gYOCgICHiomHhYWFgn98eXd3d3p7e3x4dXJxc3R6fHx+gICAgICAf4GEiYqJioyMjI6Ign9+f39/gIGAf35+fn18e3p6ent8fX1+foCEh4iIhoSCgICAfn58fX5/gH9+end5eXt/gYOFhIF/fn5+fHx/f39+fnx8fH1/f4GDhYSDgYGAgYKDh4iGhoeGhoaGhoWHiYmGhoWDgYGBgoODgoOFhoaFhIOBfndxb21ra213foCCgYGBf4CAfXNtbGxsbGttbW1samlwd31/gH59fn+AgYF/eHJ1d3h5e35/f35+fn5+fn5+f39/f39/f39/f39/f39/f399fn5+fn5+fn5+fn18fHx8fHx8fHx8fH19fn5+fn19fX1+fn5+fn5+fn9/gIGEhoaGhIKBgH9/f35+fn9/f3+AgH9/f39+fn+Bg4OAf4aKiYeGhYSBfHh3dXV2eXt7e3d1c3JzdXl7fX9+f3+AgH9+fYGGiouLi4yMjImDf39+fn+BgYF/fX1+fXx8e3t7fH1+fn5/gYaJiomHhIOBgH9+fnx8fX+Af314dnd5fH+BgoOEgX9+fXx8fH5/f359fXt7fX+AgoSFhIGCgoGBgoOEhoaGhoSFhYWFhYaIiIaFhIKCgoODhISCg4WGhYWEgoGAeXJvbWpqbXh/gYKBgYF/gIB8dG1sbGtrbG1ubGppanF4fH5+fX5/gIGBgn14dHd4eXl7fn9/fn5+fn5+fn5/f39/f39/f39/f39/f39/f31+fn5+fn5+fn5+fXx8fHx8fHx8fHx8fX1+fn5+fX19fX5+fn5+fn5+f3+AgYOFhoaFhIKBf39/fn5+f39/f4CAf39/f35+f4GDg4GAhIqJh4WDgn95dHNzdHZ5e3t7eHVzc3N1eXt9fn5/f4CAf318f4OJjIuLi4uMiYeBf39/gIKBgH9+fX19fHx7e3t8fX19foCDiImKioiGhIGAf35+fX1+f4B/fXl3d3l8foCDhISBf35+fHx8fn9/fn19fHx9f4GDhIWEgoKCgoKCg4SGh4aHhISEhYWFhoiIhoWEg4ODhISEhIOEh4aFhYOCgYB7dnJvbWxveICBgoGBgX+AgHx0bWxsa2ttbW1samlqcnp8fn19fn+AgoGBfHh2eHl5eXt+f39+fn5+fn5+fn9/f39/f39/f39/f39/f39/fX5+fn5+fn5+fn59fHx8fHx8fHx8fHx9fX5+fn59fX19fn5+fn5+fn5/f3+Ag4WGhoWEgoF/f39+fn5/f39/gIB/f39/fn1+gIKCgoGDiYqGhIGAe3hyb29ydXl7e3t5dnNzc3V5e319fX5/gIB/fHt8gIeKi4uLi4uKioSAgICBgoF/fn5+fX18fHx7e3x8fX1/goWIiIqKiIaEgoB/fn58fX+AgH9+eXh5eXx+gIKEhIF/fn9+fX1+f39+fX18fH1/goODhIOBgoKCgoKDg4SGh4eFg4OFhYWGh4eFhISDg4OEhIWFhYaIh4aFg4ODgYB6dnNwb3J6gIGCgYGBf4CAfHNsbGxra21tbGtqaGtze31+fX1+gIGCgX96d3Z5enl5e35/f35+fn5+fn5+f39/f39/f39/f39/f39/f399fn5+fn5+fn5+fn18fHx8fHx8fHx8fH19fn5+fn19fX1+fn5+fn5+fn9/foCChIaGhoWDgn9/f35+fn9/f3+AgH9/f39+fX1/goKAgICGiYWEgH56eXNvb3F1eXt7e3l2dHNzdnl7fX19fn+AgH98enx9g4aLi4qKiouJhn+AgYCBgH5+fn59fHx8e3t8fHx+fYCDh4iIiYmIiISCgH9+fn19f4CAfn16eHl5fH6AgoKEgX9+f35+fn5/f359fX19fX+Cg4SFg4GCgoODgoODg4WIh4WDg4WFhYaHh4WEhYODg4SEhYWHhoaIh4aEgoODgn55d3Nyc3uAgYKBgYF/gIB8c2xsbGtrbW1sa2pobHN7fn59fX6AgYKBf3l2d3l7eXl7fn9/fn5+fn5+fn5/f39/f39/f39/f3+AgH5+fn5+fn5+fn5+fn19fXx8fHx8fHx8fHx8fX19fX19fn5+fn5+fX1+fn5+f39/f4GBg4SFhYKAf39/f39/f39/f39/f35/f35+fn6AgYB9fICGhoJ/fHx7d3Bub3R5fHx8eXl1dnV2eXp8fH1/gIGAf3x7fH2AgYWJiYqJiYiFgICBgoB/f359fX19fHx7e3t7fH6ChIiIioqKiYmFhIF+fX19fH1/f39/fHp3eHh7foGCg4KCgIB/f35+fn6Af35+fH19gIKDgYGCgYKBgoODgoKBgoWHhYOEhISFhYaGhYWEg4SEhYWGhoaGhoaGhoSDg4ODgX98eXd4fYCBgYGCgH9+f3tybWtra2xtbWxramltdXx+fn5+gIGCgYB8eHV4enp4eHp+f39+fn5+fn5+fn9/f39/f39/f39/f39/fn5+fn5+fn5+fn5+fX19fHx8fHx8fHx8fHx9fX19fX1+fn5+fn59fX5+fn5/f39/gICDhIWFgoF/f39/f39/f39/f39/fn5+fn5+foCBgn98foKDgn99f356cm9uc3l8fn57e3l4eXl6enx8foCBgYB+fHt7fX6Ag4aJi4mJiIWBgIGAgH9/fn19fX19fHx7fH2AgYSGiYmKi4qJiYSDgX59fX18fn9/f398end4eHt/gYODg4OCgoCAf39+foCAf358foCBgoOCgoOCgoGCgoKCgH+Bg4aFg4SFhIWFhoaFhYSEhYWFhYaGhoaGhoaGhISEhISDgoB+fHt/goKCgoKAf35/e3Jua2trbG1tbGtqaG12fH5+fn+BgoKBf3t3dnh5eXh4en5/f35+fn5+fn5+f39/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX18fHx8fHx8fHx8fH19fX19fX5+fn5+fn19fn5+fn9/f39/f4GCg4OBgH9/f39/f39/f39/f39+fn5+fn5+f4CCgX58gIGCgICCgn13cW9yd3p+fn19e3t7e3t8fX1/gYGBf318e3p8fX6BhIiLi4uIhYGBgYB/fn59fX18fH19fX1+f4GEhIeKiomLi4mIg4KAfnx8fX1/gIB/f3x6d3h6fX+BgoKDg4ODgYF/f35+gIB/fn1/goOCg4WFhYSEg4KCgoF/fn+ChIWDhIWEhYWGhoaFhISFhYWFhYWGhoaGhoaEhISEhIOEg4F/foCCgoKCgoB/fn97cm5ra2tsbW1sa2lobXd9fnx9f4GCgoF/e3d3eXl5d3d6fn9/fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn19fXx8fHx8fHx8fHx8fX19fX19fn5+fn5+fX1+fn5+f39/f39/gIGCgoB/f39/f39/f39/f39/f359fX5+fn5+f4GCf3t/gYKBgoSFgHlzb3F1eX19f399fX19foCAgICCgYF+fXx7ent8fX6Dh4qNjYiFgYKCgH9+fn19fXt7e3x9foCCg4OGiYuLiouKiIaCgYB+fHx9fX+BgX9/fHp3eHp9foGBgoODg4OCgX5+fn6AgH9+fn+Cg4KDhISEg4WEg4KCgX9+foGEhYOEhYSFhYaGhoWEhIWFhISEhIaGhoaGhoWFhISFg4SEg4CAgoODg4OCgH9+f3tybmtra2xtbWxraWltd31+e3x/gYKCgX96d3d6eHh2dnp+f39/fX19fX19fX5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fX19fX19fXx8fHx+fn5+fn5+fn5+fn59fX5+fn5+fn9/fn6AgICAf39+fn5+f39/f35+gIB/f359fX19fX5/gYF+fH2Ag4KDhISCfHVvcXZ5fH1+fn5+fX6AgYKCgoF/f318e3t7fHt8f4CDhouLh4SAgoGAf359fHx7e3t8fH1/g4SEhYeJioqKiomGg4CAf358fH1+f4CAf318enh5e35/gIGDg4OEhIOBf35/f35+fH1/gIODg4OEhIODg4WEg4WCgn9+gYOFg4SEhYWGhYWFhYOCg4OFhYSFhYaHh4eHh4eGhoaFhISEgoKDhISEhIKBgH+AeXJua2trbG5ubGtnaW94fn98fYCBgYGBfXp3eHl5eHZ2en5/f399fX19fX19fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX5+fn5+fn5+fn5+fn19fn5+fn5+f39+fn9/fn5+fn5+fn5/f39/fn5/f35+fn19fX19fn+AgX99fICCgoSEhIN/eHJydXh7fH19f35+f3+AgYGCgX9+fXt7e3x8e3x+f4GDhYWEgYGCgH9+fXx8fHt7e3x8foCEhYaHiIqKioqKiIWBf39/fXx8fX9/gIB/fXx6eHl6fX+AgIODg4SEg4GAfn9/fn59fn+Ag4ODg4SEg4ODhYSDhoSEgoGCgoODhISFhYaGhoWFgYCBgYGBgoSFh4aGhoaGhoaGhoaEhISDg4OEhISEg4GAf4B5cm1ra2tsbW1sa2hqcHh+f319gIGBgYF8eXh5eXl4dnZ6fn9/f319fX19fX1+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn5+fn19fX19fX1+fn19fn5+fn5+fn5+fn5+fX19fX5+fn5/f35+f39+fn5+fn5+fn9/f39+fn5+fn5+fX19fX1+f36DgX57foGDhISDg4J8dHN1eHt8fn5+foCBf4CAgIGAfn18ent7fHx7fH1/gIGBgYKCgICAf359fHt8e3t7e3t/gYSGh4eJi4qKioqHhIB/fn17enx9f3+AgH58fHp4eXp9fX6AgoKCg4ODgYB+f39+fn5/f4CDg4ODhISEhIOFhYWGhoaFhIKCg4OEhIWFhoiIhoJ/foCAf3+AgYOGhYWFhYWFhoaGhoSEhIODg4SEhISDgoGAgHlxbGtra2xsbGxraWtxeX1+fX2AgYGBgHx5eHl5eHd2dnp+f39/fX19fX19fX5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fX19fX19fXx8fn5+fn5+fn5+fn5+fn59fXx8fn5+fn9/fn5+fn5+fX1+fn5+f39/f35+fn59fX59fX19fX5+f4GBf3p8f4OEhISDg311cHR3ent+fn5+gIGAf4CAgX9+fHt6e3t8fHt8fH5/f4CAgYKAgH9+fn18e3x7e3t7e3+BhYaHh4qLioqKioeDgH98e3l6fH1/f4CAfXt8enh5eXx8fX+BgYGCgoOCgH5/f35+fH1/gIODg4OEhIWFg4WGhoaFhYSEgoOEg4SEhYWGh4eFgH18fn5+fn+AgYSFhYSFhYWGhoaGhISEg4ODhISEhISCgYCAeXBsa2trbGxsbGtpa3F5fX59foCBgYGAfHh4eXl4dnZ2en6AgH99fX19fX19fn5+fn5+f39+fn5+f39+fn5+fn5+fn5+fn5+fn59fX19fX19fX1+fn19fn5+fn1+fn5+fn19fX19fX5+fn59fX5+fn5+fn1/fn5+fn5+fn5+fn19fX19fX19fX1+f4KAfHp9gYSEg4ODgnlycnZ5en1+fn9/f39/f39/f318e3t7e3t6enp8fn99fn+Cgn+AgH99fHp7e3t6e3t8gIGFiIiIiYuKiouKiIWBfnx6eXp8fn9/gIB+fHp7eHl6ent9f4CBgYODg4KAf4CAfn58fYCBgoKDg4SEg4OEhYWFhYWEhISEhISDg4SGhoeGhYF7dnl8fX9/fn+Ag4SFhoSFhYWEhYWEhYSEhIKEhIWFhIOCgoB5cG1ra2xsbGxramlrc3p+fX19gICCgX98eXl5eXd2dnZ5fYCAf319fX19fX1+fn5+fn5/f35+fn5/f35+fn5+fn5+fn5+fn5+fn19fX19fX19fX5+fX1+fn5+fX5+fn5+fX19fX19fn5+fn19fn5+fn5+fX9+fn5+fn5+fn5+fX19fX19fX19fX1/gYF/enuAg4SDg4SDe3RydXl6fH5+f39+fX1+f39/fXx7e3t7e3p6enx+fn1+gIKCgICAfn18e3p5e3t8fH2Bg4eIiIiJioqKi4qIhYJ/fXp5enx+f3+AgH58e3p6e3p6en1/gIGBg4ODgoCAgYF/f31+gIGCgoODhISDg4SEhYWEhISEhISEhIODhIaGhoWDe3Ryd3x9fn5+fn6Bg4aIhIWFhYSEhISFhISDgoODhISEhIODgntybmxsbGxsbGtqaW11fH99fn6AgIGAf3x5eXt9end1dXl9gICAfn19fX19fX5+fn5+fn9/fn5+fn9/fn5+fn5+fn5+fn5+fn5+fX19fX19fX19fn59fX5+fn59fX5+fn59fX19fX1+fn5+fX1+fn5+fn59f35+fn5+fn5+fn59fX19fX19fX18fH6CgoF6en2ChIOChIR+d3N1eHl7f39/fXx8fX1/f39+fXx8e3t7enp6fH59foCBgoKAf39+fXx7enp6e3x9foGEh4iIiIiJioqKiYmGg4F9enl6fH5/f4CAf318e3x7enl5fX+AgYGCgoKBgICCgoGAfoCAgYKCg4OEhIODhISFhYSEhISEhIODhISGhYWFgn91b3B4fX5+fn1+foCHioqGhYWEhIKCg4SEhYSEg4ODg4SEhISDfXNubGxsbGxsa2ppbXV8f31/f4CAgYB/fHl5fH9+eHR0eX2AgIF/fn5+fn19fn5+fn5+f39+fn5+f39+fn5+fn5+fn5+fn5+fn59fX19fX19fX1+fn19fn5+fn19f39+fn19fX19fX5+fn59fX5+fn5+fn1/fn5+fn5+fn5+fn19fX19fX19fXx8f4KCgnx5e4GDg4KEhIB5dXZ3eXt/f398ent8fX9/f39+fX17e3t6enp8fn1/gYOCgoCAf359e3t6eXp8fX5/goOGh4eIiImKioqJiIeEgn57eXp8fn9/gICAfn57fXt6eXl+f4CBgYGBgYB/gIKCgoF+gIGBgoKDg4SEg4OEg4SEg4OEhISEgoKFhIaEhIOBenNtb3d9gH9+fX5+gIqMioaFhYSDgYGBg4SEhYSCgoODhISEhIN/dm9sbGxsbGxramludn1/fX9/gICAf398eXl8gYB5dHR5fYGBgH5+fn5+fX19fn5+fn5/f35+fn5/f358fX19fX19fn5+fnx8fXx9fX19fX19fX5+fX19fX19fH1+fn19fX19fX19fX1+fn5+fX1+fn5+fn5/f35+fn5+fn5+fHx9fXx8fHx9fX1+gIKBfnh5f4OEg4SEgn12dnp5eX2Af3p5fHx9fn+Afn19fXx8e3t6eXp8fH+BgYGBgH9+fXx7enp6en5/gIGCg4SGhoaGiImKiYmJh4WDgHx6eX1+fn5/f39/fn19fHp4en6AgIGBgYKCgYGBg4OCgYCBgoKCgoOEg4ODg4SEg4ODg4SEhISDg4SGhIOBf3xzbm1yeX5/fn19fn2FjYmFhISEhIOAgYGDhIaHhoKAgYOEhIWFg394cm5tbWxtbWtpaG53fn59f4CAf4B/f3t5eX2Dgnl0dHl+gYGAfn5+fn59fX1+fn5+fn9/fn5+fn5+fnx9fX19fX1+fn5+fXx9fH19fX19fX19fn59fX19fX18fX19fX19fX19fX19fX5+fn59fX5+fn5+fn5+fn5+fn5+fn58fH19fHx8fH19fX5+gYF/eHh9goOEhISDf3p5fHl5fH9+enl8fX5+f4B+fX19fHx7e3p5enx8f4GBgICAf359fHx7e3t7foCBgoKDhIWFhYWGiIqJiYmJiISBfHp5fX59fX9/f39+fn59fHx9f4CAgICAgoKCgoKDg4KCgYGDg4KCg4SDg4ODhIOCgoODhISEhISEhIWEhIB+dnBucXd7fnx7fn59g42LhIKDg4SEgn+AgYOEhoiGg4CBgoODhISEgn12b25tbm1ta2lob3d+fn1/gIGAgH9+enl5fYSBeXR0eX6BgYB+fn5+fn19fX5+fn5+f39+fn5+fn5+fH19fX19fX5+fn5+fn18fX19fX19fX1+fn19fX19fXt9fX19fX19fX19fX19fn5+fn19fn5+fn5+fX1+fn5+fn5+fn5+fX18fHx8fX19fn6BgoB7eHp/goOEhIOBfn19enp8f358enx9fn5/gH59fX18fHt7enl6fH2AgYF/f39/fn18fHx7fX5/gIKCgYKChIWFhIaHiYmKiomJhoJ9enl8fXx8f39/f35/fn5+fn+BgIB/f3+BgYGBgoODgoKBgYODgoKDhIODgoKDgoKCg4OEhISEhISDhIaHhH51cnN5en19eXp+fn+LjYV/gIKDg4SCf4CChIWGiIaCf4CBg4ODg4SDf3lyb29ubW1raWlweH5+fX+AgoGAf356enp+hIB5dHR5foGBgH5+fn5+fX19fn5+fn5/f35+fn59fX58fX19fX19fn5+fn5+fXx9fX19fX19fX5+fX19fX19e318fH19fX19fX19fX1+fn5+fX1+fn5+fn59fX5+fn5+fn5+fn59fXx8fHx9fX1+foGDgX13en2Ag4SFhIJ/f397eXt/fnx6fH5/fn+Afn19fXx8e3t6eXp8foCBgX9/f39+fXx8fHyAgIKCgoKBgYGChISGh4eIiYqKioiGg355eXt8fHx/f39/fn9/f35+gIKAgH9/f4CBgYCAgoODg4GBg4OCgoOEg4OCgoKCg4ODg4SEhoaEhIOEiIqGfnR1en19fnp6fHx+iI+JgHx9gIODg4F/gISEh4iIiIF/f4GCgoODhISAe3Rwb29tbWtpaXB5fn59f4CCgYB/fXl6en+Dfnd0dHl+goGAf39/fn19fX1+fn5+fn5+fn5+fn5+fnx9fX19fX1+fn5+fn5+fX5+fn59fX19fn5+fn19fn58fX19fX19fX19fX18fHx+fn5+fn5+fX1+fn5+fX19fX19f399fX5+fX19fXx8fX1+f4KCf3p4en+BhIWFhIKAf359e32Afnx9fn9/f359fXx8fHx8e3p5e31/gIB/f35/fn59fX18fX+Cg4SEg4GCgICChIaGiImJiYmKiYeEf3x6e3x9fX9/f39+foB/fn5/gYF/f35/f4CAgICAgoODgoKCgoODg4OCgYCAgYKBgoKChISFhYWFhISIiIZ9c3d9fn5+e3t+fYaPjIJ7ent+gIKCgX5+g4aHh4iIgX1+gYKCg4SEg4J+enVxb21tamhocXp+fX6AgYGBgH96d3h5goN7d3R0eHyCgYCAf39+fX19fX5+fn5+fn5+fn5+fn5+fH19fX19fX5+fn5+fn5+fn5+fn19fX1+fn5+fX1+fn19fX19fX19fX19fXx8fH5+fn5+fn59fXx8fHx9fX19fX19fX19fn59fX19fHx9fX5/gYKBfXl5fICChIWFg4KAgH58foKAfn1+f39/f359fHx8fHx7enl8f4GAgH9+fn9+fX19fXx+f4KEhIaEg4KAgIKDhYaHiIiJiYqJiIWAfnt8fH19f39/f39/gH9/f3+BgX9+fX5/gICAgICCgoKCgoKCg4ODg4KBgICBgoGCg4OEhIWFhYWEhYiIh31zdnt+f3x6fX+EjIqCfHl5eXx+gIGBf3+ChYWFh4iCfX2AgYGDg4SEg4F+eHRxb21qZ2pze35+f4GBgYF/fnp3eXyCgXp2c3R4fIKBgIB/f359fX19fn5+fn5+fn5+fn5+fn58fX19fX19fn5+fn5+fn5+fn5+fX19fX5+fn59fX5+fX19fX19fX19fX19fHx8fn5+fn5+fn19fX18fH5+fn59fXx8fX1+fn19fX19fX19fX2BgoF/e3h4fn+ChISEgoGBf3x+goJ/fX5/f39/fn18fHx8e3t6e36AgH6Af359f35+fX19fH5+gYSGh4WEgoCAgYKFhYeIiIiIiYmIhYB/fHx8fX1/f35+f3+Af4CAf4GBf319foCAgICAgIKCgoGBgoKDg4ODgoGAgIGCgYKDg4SEhYWGhoWGiIiFf3R3fH5+eXl+goqJg3t5eXl5ent+goGBf4CCgoKEiIN/fX6AgYKCg4SEg4F9d3NwbmtnbHV7fn+AgYGBgX99e3h6foJ+eHVzdHh8goGAgH9/fn19fX1+fn5+fn5+fn5+fn5+fnx9fX19fX1+fn5+fn5+fn5+fn59fX19fn5+fn19fn59fX19fX19fX19fX18fHx+fn5+fn5+fX19fX5+fX19fX19fX19fX5+fX19fX5+fX19fYCBgIB/eHl8fYGDg4SDgYKAfX+Dg4B9fn9/f39+fXx8fHx7e3t9gIF/fn9/fn2Af35+fX19fn6Ag4aIhoWCgICBgoSFhoeIiIiIh4eFgn98fHx9fn9+fn5/f4B/gIB/gYF/fHx+gICAgICAgYGBgICCgoODg4OCgYCAgYKBgoSEhISFhYaGhoiIiIWAdnh7fXt5eH+FiYR8eXp5eXp6en2AgIF+foGBgoSIhIF8fICAgYKDhISEhIB8d3Jva2dsdnyAf4CBgYKBfnx6eHyAg3t0dHNzeHuCgoCAf39/fn5+fn5+fn5+fX1+fn5+fn59fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fn59fX5+fX19fX19fn5+fn19fX5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fX59f4GBgYB7eHp9f4GEhYSBgIF/f4GCgH5/fn+AgH5+fX17enl6foCBgH9/f35/fn5+fXx9fX19fYCChYeFhICAgH+BhIWGhoiIiIeHh4WDgX59fH19fn59f4CAgYCAgIGCgn58fH+AgICAgICAgYGBgYKCgoKDgYCAgICAgYGCgoKEhISEhoaHiIeHhoJ4d3t7e3h6gIWFfHd2d3l5eXl5fH+Afnx9foCChYeGgX18f3+BgoKEhISEgn15c29samx1fX+AgICBgX+AfXp4fIKCeXJxc3N3fIKCgIB/f39/fn5+fn5+fn59fX5+fn5+fn19fX19fX19fn5+fn5+fn5+fn5+fX19fX19fX1+fn19fn59fX19fX1+fn5+fn5+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fXx+gIGCgX56eHt9gIKEhIKAgX99fn9+f39+f4CAfn59fXt6enx/gICAf35+fX19fXx9fH18fXx8f4KEhISCgICAf4GEhYWGiIiHh4aGhYSCgH58fX18fX1+gICBgICAgoKCfnx8f4CAgYCAgICAgIGBgoKCgoKBgICAgICBgYKCgoKCg4OFhYaHhoaEgnp2enp5dnuChIB3dnZ3d3d3d3d5eHp7fICBgoSFh4eBfXt/f4GBg4SEg4OCgHx3cWxqbnZ9f4CAgIGBgH99eXh+gn92c3JzcXZ7goKAgH9/f39+fn5+fn5+fn19fn5+fn5+fX19fX19fX1+fn5+fn5+fn5+fn59fX19fX19fX5+fX1+fn19fX19fX19fX1+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fX19fX19fX19fH1/gYKBf3x5eXt+gIKEhIGAf3x7fX5/f35/gIB+fn19e3p8f4CAf4CAf319fHt8fHx7fX19fHx/gIKDgoGAgIB/gYOEhYWGh4eGhIWFhoWCgH9+fn19fn+BgYGAgICCgoJ+fH2AgICCgYB/f4CAgYGCgoGBgYCAgICAgIGBgoKCgYGCgoODhIWEhIKBfHZ6end1e4KCfXZ1dnd2dnZ2dXJyc3p+goOFhYaHhoN9e35/gICDg4OCg4OCf3p0bGlveH5/gICAgYGAf3x5en+BfXZ0dHNwdHmCgoCAf39/f35+fn5+fn5+fX1+fn5+fn59fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fn59fX5+fX19fX19fX19fX5+fn5+fn5+fn5+fn5+fX19fX19fX19fX19fX19fX19fX19fX5+fX+BgoB/fnp4eXx+gYSEgoGAfHt8fX9/fn+AgH5+fX17en1+goB/f35+fHt8e3t6fHt9fX58fH9/gIKBgICAgH+Bg4OEhYaGhoWEhYWHh4SBgH9+fHx+f4GBgYCAgIKCgn58fYCAgIKCgIB/f3+BgYKCgICBgICAgICAgYGCgoKCgoKCgoKDhIODg4J9d3l5dnN6goF6dnV2dnV1dXVzb25ze3+DhYaGhoeGhH98fn9/gIKDg4KEhYOBfXZvbHF5fn+AgICBgYB+e3l8gIF6dXJ0cm90eYKCgX9/f39/fX1+fn5+fn59fX19fn5+fn5+fn5+fn5+f39+fn5+fn5/f35+fn59fX19fX19fX19fX1+fn19fX19fX19fn5+fn5+fn5+fn5+fn59fX19fX19fH19fX19fX19fX19fX19fX19fX+BgX9/fXl4en2AgYODgIB9e3x9fn5+fn9/fn59fHt6fn+Af39+fn59e3p5e3t8fX5+f319fn9/gICAgH9/f4GBhISEhIWEhISFh4iIhYSCf399fX5/gYGBgICAgYOCf3x9gIGBg4OBf35+gICBgYKBgYCAgIB/f4CAgIKDg4GBgoKBgIGCgYGCgX55d3VycnqAfnd0dHR1dHR0dXBrcHl+g4aFhYWHiIeFgX5+fn9/gYOEgoKDgoF/eXBtdHl9gICAgIGAf3x8eX2CgHlzcnJxb3R5goKBf39/f39+fn5+fn5+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fX19fX19fX19fX5+fX19fX19fX1+fn5+fn5+fn5+fn5+fn19fX19fX18fX19fX19fX19fX19fX19fXx8foCBf39/e3h4fH+AgoKAgX18fH1+fn5+fn5+fn18fHx/gH9/fn5+fn17enl6e31+fn5/f39+fn9/f4CAgICAgYGDg4ODhISEhIWHiIiGhYOAf35+foCBgYGBgICBg4KAfH2AgYKEhIKAf36AgIGBgoGBgICBgYCAgICAgYODgoKDhIF9f4B+foGCf3l1cnFyeoB8dnR0dHV0dXRybW13fH+DhoWFhYeIiIeCf35/f3+BgoKBgYODg4F7c290eX2AgICAgYB/fHx8f4N9eHNzc3BvdHmCgoF/f39/f35+fn5+fn5+fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX19fn19fX19fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fX19fX19fXx9fX19fX19fX19fX19fX19fHx8f4F/f39+enZ5fH+CgoGBf318fX5+fn59fX5+fnx8fYB/fX5+fn59e3x7e3t7fX5+fn+AgH5+fn9/gICBgYGCgYKDgoKDg4OEhYaHh4WEg4CAf35/gYGBgYGAgIGDgoB9foCBg4WGhIGAfoCAgYGCgYGAgIGBgICAgH+Ag4OEhISDgHp8fX5+f4GBenVxcXJ5f3p1dHR0dXV2dG5scnt+foCFhYWFh4iIh4SAgIB/f4GBgH+AgoODgnx2cnV6fYCAgICBf358fH6AgXt2c3Nzbm51eoKCgX9/f39/f39+fn5+fn59fX19fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn59fX19fX1+fn19fX1+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn59fH19fX19fX19fX19fX19fX17e3t+gX+AgH99d3d6fYGBgoKAfnx9fn5+fn19fn5+fH5+gH99fX5+fX17fH18e3p8fn5+f4CAfn19fn6AgIGBgYKCgoKBgoOCgoSFhYaGhISDg4F/f4CBgYGAgYCAgYOCgH+AgIGDhoaFg4F/gICBgYKBgYCAgoGAgYCAf4CDg4ODhIF8d3l6fX19f4J9d3Fycnl9eXR0dHR1dXVybW54fn9+f4WGhYWHiIeGh4OAgH9/gYB8fYCBhISDfXZzdXt9gH+AgIF/fXx8fn9+eXVzdHRsbnZ7goGAgH9/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn19fn5+fn19fHx9fX19fX1+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn19fn59fX19fX19fX19fX18fHx8fHyAgICAf397eXh7fX+CgoF/fXx8fn9/fX1+fn58fX5/fX1+fn19fHp7e3p7e3x+fn5/gYF+fn1+fn+AgYGCgoKBgYCBgYKDg4SFhoaFhISDgYCAgYKBgYGBgH+BgoF/f3+BgoSGiIeEgoCAgIGBgYGBgYGCg4OBf3+AgIGBgYKDgXt3eXt9fX+Agn95cG9zent4dXR0dXV0dHBqcHt+fn5+gYaGhoaHh4WEgoB/gH+Af3x6foCBgoJ/eXR2e35/gIGBgH9+fX2CgHt2c3N1cmxrc3iCgYCAf39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fX1+fn5+fX19fH19fX19fX5+f39/f39/f39/f39/fn5+fn5+fn5+fn5+fX1+fn19fX19fX19fX19fXx8fHx8fH9/fn9+f397eHl8foGBgYB9e3x9f39+fn5+fn1+fn59fX59fX17e3t6eXx9fX5+fn+BgX5+fX5+f4CBgYKCgoGBgICAgYKDhIaHhYWEhIOCgYGBgoGBgYGAf4GCgX9/f4GChIWIh4WCgYCAgYGBgYGBgoOEhIKAgICAgYGBgoSBe3h6fH5/gIGCgn1xb3J7fHd1dHR1dXRzbG11fH5+fn5+hIaGhoeHhYODgX+Af35/enh9f4CCgn97dnh7fn+AgYGAf35+f4R+eHVzc3RybGtzeIKBgIB/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn59fX5+fn59fX19fX19fX5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX19fX19fX19fX19fX19fn58fHx8fHx9fXx+f316eXp8f4CCgX17e3x/f35+fn5+fX5/fn19fn19fHt7e3p6fH5+f35+f4KCf359fn5/gIGBgoKCgYGAgICAgYOEhoeFhYSEg4SDg4KBgYGBgIB/gYKBf35/gYKEhYeHhYKBgICBgYGBgYGCg4SDgYCAgICBgYGChIJ/fX9/gIKBgoSDf3Nwcnp7d3R0dHV1dXFrcXp9fn5+fn2AhoaGh4eFhISBf4B/f395dXp9gIKCgHx4eHx+f4CBgX9+f4CCgnx2c3Nzc3FrbXV6goGAgH9/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/fn5+fn19fn5+fn19fX19fX19f39+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn19fHx9fX19fX19fX19fX1+fnx8fHx6enx9fX6Bf3x6eXl9f4OBfnt7fH9/f39+fn19fn5+fX19fXx8e3x5e3p9gICAfn5/gYKAfn5+fn+AgYGCgoKBgYB/f4CBg4SGh4SEhISDhISEgoGBgYGBgH+BgoF/fn+BgoOEh4eGg4GAgIGBgYGBgYKEhYSBgYGAgIGBgYKEg4J/gYGBgoKChIWAdHBzfHt2dHR0dXV0cGt1fn1+fn5+foCGhoaHh4WDg4J/gH9/gHlyd32AgoKAe3d5fX5/gICBf35/gIKBenVyc3NzcGttdnuBgYCAgIB/f35+fn5+fn19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn59fX5+fn5+fn19fn5+fn9/fX16enp4eXp8fn9/f355dnp+goJ/e3p7fX1/f359fn6Af3x9fX57ent9fnt8e31/f358fX5/gYB+fn5+f3+BgYGBgYGBgYCAgICBg4SEhIKDg4OEhoaDgoKBgYGAf4CCgYB+f4CBgoOGhoWDgYF/f4CAgICBgYSFhIGCgoKBgYGBgoOFg4ODg4KDgoOGhoF3cnN7e3d1dXR0dXNta3h+fn5+fn5+goeFhYaGhIGBgIB/f3+BeXB0eX6AgoB8eXp8f4CAgIB+f4CBf315dXNxcnJtamx2fIGBgICAgH9/fn5+fn5+fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+f39/fXp6enh5ent+f3+AgH15eHuAgoF8ent8fX5+fX1+fn9+fHx8e3l6fH19fHx9fn9+fnx9fn+BgH5+fn5/f4GBgIGBgIGBgICAgIGCg4ODgYKCg4WFhYSDg4GBgYB/gIKBgH5/gIGCg4aGhYOBgICAgICAgIGBg4WEgYKCg4GBgYGCg4WEhIODg4OCg4WFgnl1dHp7dnV1dHR1cGpsen5+fn5+fn6ChoWEhYWDgIB/gH9/f4F6cHF3fX+CgH16e32AgYCAgH6AgYF+eXZzcnFycW1sb3l+gYGAgICAf39+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn99enl5d3d4eXx+f3+Af3x5en2AgX97enx9fX18fH5+fn57e3t6ent8fHx8fH5+f319fH1+foB/fn5+fn9/gIGAgIB/gIGAgICAgIGCgoKAgYGDhYWFhYODgoKAgH+AgoGAfn+AgYKDhoaFg4GAgIB/f39/gICDhIOCgoKDgYGBgYKDhYSEhISDg4KDhYWCfHd1eXl2dHR0dHRvanF8fn5+fn5+foKFhIKEhIKAgICBf39/gXtxcHV7f4F/fHt7fX+AgICAfoCBgH14dHFxcXFxcHF2fH+BgYCAgIB/f35+fn5+fn19f39+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+gIB/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn59fn16eXl3dnh5e3+Af3+Af3t6e3+CgXt6fH18fHp7fn9+fXt6enp7fXx8fHx8f39/fHx8fX5/gH5+fn5+f3+AgICAgH+BgYCAgICAgYKCgoCBgYKEhYWEg4OCgX9/f4CCgYB+f4CBgoOGhoWDgYCAgH9/f3+AgIKDgoKEhIOBgYGBgoOFhISFhYODgoOEhIN/d3V4eHd0dHR0dG5qc35+fn5+fn5+goWEgYODgYCAgYF/f3+Be3Fvcnh9gH97fHx+gICAgIB+gIF9enh0cnFxc3N0dnt/goCAgICAgH9/fn5+fn9/fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fn59fX5+fn5+f39/f39/f39/gICAgH9/f39/f39/fn5+fn5+fn59fX19fn5+fn19fn5+fn5+fX5+fXl4eHZ3d3h5fX+BgICAfnp4fYGBfHl7e3p7eXx/fn19enp4eXp7e3t8fH19gH99fH1+f4CAfn18fHx9f4CAf4CAgH9/fn5+fn9/gYGBgYGBgoOEhIODg4OBf36AgYOCgH+AgYKAgoaFhYOBgH9+f39/f4CAgYGBgIKEg4KCgoKChIWEhIWFhIODg4KCg4B5d3l5dXN0dXRyamt3fX5+fn5+fn6BhIKAgYGBgICBgoCAf4F8c3ByeH1/f3x8fX+BgICAgH6AfXl4d3Z0cnN4d3h9gIGCgICAgH9/f39+fn5+f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn5+fn19fn5+fn5/f39/f39/f3+AgICAf39/f39/f39+fn5+fn5+fn19fX1+fn5+fX1+fn5+fn59fn59eXh4dnV1d3h6fX+AgIB/fXp5fYB8eXl5eXl6fn9+fHt6enp5eXh5e3x8fX1/fn18fX9/gIB+fXx8fH1+f4B/f39/fn5+fn5+f3+BgYCAgICBgoODgoKCgoF/f4CBg4KAf4CBgoGBhYWFg4GAf35/f39/gICBgYKAgoSDg4KCgoKDhYSEhYWEg4ODgoKBf3p3eXh0c3Nzc3FpbXl9fn5+fn5+foCCf39/gIGAgYGCgIB/gXtxcHF2e35+fXx9f4GAgICAfn96eHh6enh2eHx+f4KDhISAgICAfn5/f35+fn5/f35+fX1+fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn9/f39/f39/f4CAgIB/f39/f39/f35+fn5+fn5+fX19fX5+fn59fX5+fn5+fn1+fn15eHh1c3N1dnh7fH+AgH+AfHt8fn16eHh5e31/fn58e3x7enl4eHp7fHx9fn59fX1+f3+AgH59fHx8fH1+fn9/fn5+fX5+fn5/f4CAf39/f4CBgoKBgoGBgICAgYKDgoB/gIGCgYGDhoWDgYB/fn9/f3+BgYGBhIKChIODgoKCgoKEhISFhYSDg4OBgYF/eXd5eHRzc3Nybmlxen1+fn5+fn5+f4GAf3+Ag4OBgYKAgH+Be3FwcXV6fn59fH1/gYCAgIB+fXh3eXyAf3x8f4GChISFhYCAgIB+fn9/fn5+fn9/fn59fX59fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+fn5+fn5/f35+fn5+f39/f39/f39/gICAgH9/f39/f39/fn5+fn5+fn59fX19fn5+fn19fn5+fn5+fX1+fXl4eHVzc3J0d3l8fICAf35/fX18fXt4eHp9f399fHt8fHp5eHd4ent8fH1+fn19fX9/f4CAfn18fHx8fX19fn99fX19fn5+fn9/f39/f39/gIGCgoGBgYGAgICCgoOCgX+AgYKCgYOGhIOBgH9+f39/f4GBgoGDgYKEg4OCgoKCgoOEhIWFhIODg4GBg395d3d3dHN0c3BsanN6fX5+fn5+fn5+f36AgICEhYKBgoCAf4F7cnBxdXl9fX18fX+AgICAgH57dnd5fYKBgICBg4OFhYaFf39+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn59fX5/f39/f35+f3+AgIGBf39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/e3l5dnRxcnJ2d3l9foGAf39/fnx8e3p6fH9/fn59fHx7eHh4eHp7e3t8fX1/fn19fn9+foB/fn18fHx9fHx8fX5+fHx9fX19fX1+fn5+fn6AgICAgIB/f4B/gIODhIOCgIGBgoKAgYOEg39+fn1+fn1/gYKDgYOCgoKEhIKCgYGDg4SEhISEhIKBgICBfnh2eHd1c3NzcWtqdHx+fn5+fn5+fn59fn5/g4WHg4KDgYCAgX91b3F1d3x9fX1+gICAgIB/fHl1d3t+goOCgYKChISFhYZ/f35+fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn5+fn5+fn9/f39/f39/f4CAgIB/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f398e3p3dHFycnR2eXx9gIGBgIB+fXx7e3t9gIB+fXx9fHl4eHd4e3t7e3x9fn9+fX1+f359f39+fXx8fH18fHx9fX18fH19fn59fX5+fn5+fn9/gIB/f35/gICBhISEhIOBgoKCgX5/g4SDf39+fX5+fH2Bg4SDg4OCgoSEg4OBgYODhISEhISEgoGAgIB9dnR3dnVzc3Nxamx3fX9+fn5+fn5+fn5+foGGh4mFg4OBgIGBfnRvcHV3fH19fX+AgICAgH97eHZ3fH+Cg4SCg4OEhIaGh39/fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fn5+fn5+f39/f3+AgH9/gIB/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3t6end0cXFxcnZ5fHx/gIB/f39+fHt6fH6AgH19fX17eXh3d3h7e3t7fHx+f359fX1+fn1/f359fHx7fHt7e3x8fHx8fHx9fXx8fX5+fn5+fn5/f39+fn6AgYKEhISEhIOCgoKBfn6BhIOBgH59fn58fYGDg4SEhISEhISDg4ODg4OEhISEhISCgYCAf3p0cnh3dnRzc3FqbXp+f35+fn5+fn5+f35+hIqIh4WDg4KBgYF+dXFydnh8fX19f4CAgICAfnp4eHl+gIKBgoODhYWGiImKf39+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+fn5+fn5+fn5+fn5/f35/f39/f4CAf3+AgH9/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/enh5d3RxcHBydnp8fH9+fn9/f356enp8f4B+fXx8e3l6eXd3eXt7e3t8fH5/fn19fX59fX9/fn18fHp7enp6e3x8fHx8fHx8fHx9fX5+fn5+fn9/f39+f4CCg4WGhYSEhIOCgoJ/fYCEg4GAfn1+fn1+gYKEhIWFhISEhISEhYWDg4SEhISEhIKBgIB+d3Ryd3Z2dHN0cWlve35/fn5+fn5+fn5/foCJjIiGhYKDg4GAgH53c3V3eXx9fX1/gICAgIB9enl5e4CBgoKDg4OEhYiJi4x+fn19fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX19fX5+fn5+fn5+fn9/f39/f39/f39/f39/f39/f39+fn5+fn5+fn59fX19fX5+fn5+fn5+fn5+fn5+f397eHZ1c3JxcXN2e31+fnx+foCAf3t6fH2AgH99enp2d3l5eHh5ent7e3x8fX5+fn58fX1+fn5+fXt7e3t7e3p6e3t7e3x8fHx7fH19fX1+fnx8fX1+fn5/gYOEhIWDgoGCg4ODgoB+gYOCgIB/fn19f3+AgYODgoKDg4ODgoSEg4SEhISEhIODgoGAf3x4dXR1d3d1dXNvam96fn5+fn5+fn5/f39+hIyLhoWFhYOCgX9/f313eHp7fn5+fn9/gICAgH57eXt+gIGBgYKDhISHiImKi35+fX1+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+f39/f39/f39/f39/f39/f39/f35+fn5+fn5+fn19fX19fn5+fn5+fn5+fn5+fn5/f3x4dXVzcnFxdHd7fX19e3x9f4CAfHt9f4B/fnt5eHZ3eHl4eXl6e3t7fHx9fn5+fnx8fH5+fn59e3t7e3t7enp7e3t7fHx8fHt7fHx9fX5+fX1+fn5+fYCDhIWFhIOBgIGChIWDgX6Bg4KAgIB/fn5/f4CBgoKCgoKCgoKDhIWEhISEhISEg4OCgX9+eHd1dXV2d3V1dHBrcHp9fn5+fn5+fn9/f3+GjIiDhIaGg4KBf3+Af319fn9/f39/gICAgICAfnt6fX5/gYCBgYODhIWHiYqMfn59fX5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39/f39/f39/fn5+fn5+fn5+fX19fX1+fn5+fn5+fn5+fn5+fn9/fHh2dHRzcnJ0eHt8e3t6e3t8fn5/fn5/f318eXh3d3d4enl5eXp7e3t8fH1+fn9/fHx8fn5+fn17e3t7e3t6ent7e3t7e3t7e3t8fH19fX19fX19fX19gIOGhoWDgYB/gICCg4SCgIKFhIKCgYB/f39/gIGCgYGBgICAgIGCg4SEhISEg4ODg4KBfnt2dnV1dHZ2dnV0cGtwen1+fn5+fn5+f39+f4aJhIGChYaDgoF/f4CAf3+AgYCAgICAgICAgIB+e3t+f4CBgYKChYSGhoaHiot+fn19fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn5+fn5+fn9/f39/f39/f39/f39/f39/f39+fn5+fn5+fn59fX19fX5+fn5+fn5+fn5+fn5+f398eHd1dXNycnR4e3x7e3t9e319fX59gIF/fXt4eHd3d3d5eXl5e3t8e3x8fH5+f398fXx9fn59fXt7e3t7e3p6e3t7e3t7e3t6enx8fX18fHx8fX19fX2BhYeFg4KAf31+f4CBhIOChIaFhIOBgH9/f3+AgIGCgYGAgICAf4GBg4SEhISCgoODgoF+eXd1dXV1dXd2dXRxa3F6fX5+fn5+fn5/fn5/h4aAfYKFhoOCgX9/gIGBgYCCgoKAgIGBgICAgH57e39/gYGDhYSFhYSGhoeKi35+fX19fX5+fn5+fn5+fn5+fn5+fn9/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fX19fX19fn5+f39/f3+AgICAf39/f39/f39+fn19fn5+fn5+fn59fn5+fn5+fn5+fn5+fn5+fn5/f3x6d3d2dHNzdHl8fHx6e3t8fH18e32Af357eHZ3eHh5eXp6eXp7fH18fH19fn+Af319fX19fXx8enp6enp6enp6ent7e3t7e3t7e3t7e3t7e3x8fH5+f4KFhYSBgH9+fn5+f3+BgYOEh4aFhIKBgYCAgIGBgYKBgH18fX5+fn+ChISDg4ODgoKBgH16eHV1dHV1d3d2c3FucXp9fn9/fX1+foCCf4GFg39+gIKEhIOCgoKBgoODg4SDg4KCgoGBgH9/fXx8fn+Bg4SGhoSEhISGiIqMfn59fX19fn5+fn5+fn5+fn5+fn5+f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+f399fX19fX1+fn5/f39/f4CAgIB/f39/f39/f35+fn5+fn5+fn5+fn1/fn5+fn5+fn5+fn5+fn5+fn9/fHp3d3d1c3N1enx8fHp7e3x8fH18fYCAfXp3dXd4eXp6eXl5ent9fX19fX1+f4B/fn19fXx8fHx6enp6enp6enp6e3t7e3t7e3t7e3t7e3t7fHx8fn6Ag4SFgn9/f35+fn5/f4GBgoOFhoaFhIOCgYCAgYGCgoGAfnt8fX5+f4KEhISEg4OCgoGBfnx4dnV0dXV2d3dzcGxveX5+fn9/gICAg4SBg4WEgICBgYSEg4ODg4KCg4OEhIODg4OCgYGAf4B+fH6BgoSGh4iGhIKCg4aIio1+fn19fX1+fn5+fn5+fn5+fn5+fn5/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5/f319fX19fX5+fn5/f39/gICAgH9/f39/f39/fn5+fn5+fn5+fn5+fX9+fn5+fn5+fn5+fn5+fn5+f398end4d3V0dHZ5fHx8ent7fHx8fn5/gH99e3h1d3h5enp5eHl6e3t8fX19fX5/gIB/fX18e3t7e3p6enp6enp6enp7e3t7e3t7e3t7e3t7e3t8fHx+f4CEhYOBfn5+fn5+fn9/gICAgYOEhISDgoOCgoKDg4SEg4J/fX59fX1/goSEhISDg4ODg4GAfXp4dXR0dHV2dnNvbG54foCAgYOEhoaFhYOEhoWCgoKDhISEhIODgoKDg4SEg4ODg4KBgYB/f39+gYOFhoiIh4WDgYGDhoiKjX5+fX19fX5+fn5+fn5+fn5+fn5+fn9/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fX19fX19fn5+fn9/f3+AgICAf39/f39/f39+fn9/fn5+fn5+fn59f35+fn5+fn5+fn5+fn5+fn5/f3x6eHl4dnR1d3l8fHx6e3t8fHt8fYGAfXx8enh3d3h6enl5enp7ent8fH19fn+AgX99fXx6ent7enp6enp6enp6ent7e3t7e3t7e3t7e3t7e3x8fH5+gYOEg4B+fX1+fn5+f3+AgH+AgYKCg4GBgoKEhYWFhISDg4B9fn59fYCDg4OEhIODg4OEgoF9fHp1dHNzdnZ1cW9sb3uAhIWFhoaHh4aFhIaGhIKCgYKEhISEg4OCgoODhISDg4ODgoGBgH+AgICEhoeIiIeGhYOCgoOGiIqNfn59fX19fX1+fn5+fn5+fn5+fn5/f39/f39/f39/fn5+fn5+f39+fn5+fn5+fn5+fn59fX19fX1+fn5+fn5/f4CAgIB/f39+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fHt4eXl3dXZ4e3x8fHt8fHx8e3x+gH99fHx6d3h5eXl5eHl5ent7fX19fX1+fX6AgH19e3t7e3t7e3p6enp6enp6e3t7e3t7fHx8fHx8fHx8fHx8fX6AgoGBfn19fX5+fn5+fn9/gICBgYCBgICAgYSGh4eFhoaDgYB/f319gYKDg4ODg4ODg4OCgIB+fXl2dHN0dHBwbm50foOFhoaGhoaGhYSFhYWFg4ODg4WFhoaEg4KCgoKCgoKCg4SDgoGBhIODhoeIiYeFg4ODg4SDhYaIiop+fn19fX19fX5+fn5+fn5+fn5+fn9/f39/f39/f39+fn5+fn5/f35+fn5+fn5+fn5+fn19fX19fX5+fn5+fn9/gICAgH9/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f398e3h5eHh3eHp8fHx8fHx8fHx7fX+Af3x7e3t5ent7eXl5enl6e3x9fXx8fHx8fX9+fX17e3t8fHx8enp6enp6enp7e3t7e3t8fHx8fHx8fHx8fHx9foCCgH9/fX19fn5+fn5+f3+AgICAgICAgICBgYKFhYiJiIWFg4KBgYGBgoGBg4ODg4ODg4OBgYB/e3h1c3RycXFzdnuAhIWGhoaGhoWEhIWFhYWEhISEhYWFhYSDgoKCgoKCgoKChIOCg4SGhoaIh4aEg4GCg4ODhYSFh4iJiX5+fX19fX19fn5+fn5+fn5+fn5+f39/f39/f39/f35+fn5+fn9/f39+fn5+fn5+fn5+fX19fX19fX5+fn5+f3+AgICAf39/fn5+fn59fX5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f3x7eHh4eHh5e3t8fHx8fHx9fH1/gIB/enl5eXl6enp7e3t8enp6e319e3t7e3t7fH19fXt7e3x8fHx7e3p6enp6ent7e3t7e3x8fHx8fHx8fHx8fH19f4B/fn18fX1+fn5+fn5/f39/f4CAgICAgIGBgYKDhoeHh4aFhISCgoKBgICCgoKDg4ODg4KCgYB+e3l2dHJ1dXl9f4GEhYaFhYWFhIODhYWFhYSEhISEhISEhoSEhIKCgYGBgYGDg4KFhoiIiIiGhIOCgICBg4OEhIWGh4eHfn59fX19fX1+fn5+fn5+fn5+fn5/f39/f39/f39/fn5+fn5+f3+AgH5+fn5+fn5+fn59fX19fX19fn5+fn5/f4CAgIB/f39+fn5+fn19fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fHt4eHh4eXp7e3x8fHx8fH19f4CBgX96d3Z5eXl6e3t7fH17e3t7fH17e3t7e3t8fH19e3t7e3t8fHx8enp6enp6e3t7e3t7fHx8fHx8fHx8fHx8fX19f39+fXx9fX5+fn5+fn9/f39/f39/f4CAgYKCgoOEhYaGhYWDg4KCgoCAgIKCg4ODg4ODgoODgYB+e3h3dnl7fH+AgoSEhYSFhYWEgoKFhIWEg4ODg4ODhISGhISEgoKAgICAgYKDg4WFiYmIh4SEhIGBgYKDg4ODhIWGhoZ+fn5+fX19fX5+fn5+fn9/fn5+fn5+f39+fn5+f39/f39/f39+fn5+fn5+fn5+fX1+fn5+fX19fX5+fn5+fn5+fn5+fn9/f31+fn5+fX1+fn5+fn5+fn5+f3+AgH5+fn5+fn5+fn1+fn19fn57enl4eHd5ent7fHx7fHx8fH2AgYGAfXl0dHZ3ent7fHx+fXx6enp6fHt8enp7fHx9fn18e3t6e3t7fHx7e3t7ent7e3t7e3t8fXx8fH19fX5+fX19fX1+f359fX19fX1+fn5+fn5+fn5+fn6AgYGCg4ODg4ODg4OCg4KBgYGAgICBgoODg4ODg4OEhIKCgYB/fHx8f3+AgIGDg4SFhIWFhISDg4SEg4KAgYGBgoODhIaGhYWCgYB/f4CBg4OEhISHiIiGhIWFgoOCg4ODg4SEhYWFhX5+fn59fX19fn5+fn5+f39+fn5+fn5/f35+fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn59fX19fn5+fn5+fn5+fn5+f39/fX5+fn59fX5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fX5+fX1+fnx7eXh4eHp6e3t8fHt8fHt8fYGCgoF9enVzdXd7fHx9fX59e3p6enp7ent6ent8fHx+fX17e3p7e3t8fHt7e3t6e3t7fHx8fH19fHx8fX19fX1+fn19fX5+fX19fX19fX5+fn5+fn5+fn5+foCAgYGDg4ODg4OCgoGBgYB+fn9/f4CBgoODg4ODg4SEg4OBgIB+f4CCgYKCg4SFhoWFhoaEhIGBgYGAfX5/gICCgoOFhoaFhYOCgYCAgIGDgoSEhIaHiIeEhYWDg4OCgoKCg4OEhISEfn5+fn19fX1+fn5+fn5/f39/fn5+fn9/fn5+fn9/f39+fn5+fn5+fn5+fn5+fn9/fn5+fn19fX1+fn5+fn5+fn5+fn5/f399fn59fX19fn5+fn5+fn5+fn9/fn5+fn5+fn5+fn5+fn59fX5+fXx6eXl5eXl7e3x8e3x8e31+gYKBgH97dnN0d3t8fH5+fn17enp6ent5enp7enx8e319fXx7ent7e3x8e3t7e3p7e3t8fHx8fX18fHx9fX19fX5+fX19fn59fX19fX19fn5+fn5+fn5+fn5+f3+BgYKCg4ODg4ODgICBgH5+f39/gIGCgoODg4ODhISDg4OCgYCBgoKCg4OEhYeIh4eHh4SCgH9/fnx6fn5/gIKChIWGhoWFg4KBgICAgIKBg4ODhYeKiYWFhYODg4KCgoKDg4SEhYV+fn5+fX19fX5+fn5+fn9/gIB+fn5+f39+fn5+f39/f35+fn5+fn5+fn5+fn5+f39+fn19fX19fX5+fn5+fn5+fn5+fn9/f31+fn5+fX1+fn5+fn5+fn5+f39+fn5+fn5+fn5+fn5/fn19fn59fHt5eXl4eHt7fHx7e3t8fn+CgoF/fnt4dXR3enx8fn18fXt6enp6enl6ent6fHx7fH19fHt6e3t7fHx7e3t7e3t7e3x8fHx9fX19fX5+fn19fn59fX1+f359fX19fX1+fn5+fn5+fn5+fn5/f4CAgYGDg4ODg4OBgYB/f39+fn5/gIGCgoODg4OEhISEhIOBgoOFg4OEhISFhoeHh4WGgoB+fXx6e3x9fn+AgYKEhYaGhYWDgoGAgIGAgoGDhISDhoqLh4WFg4ODgYGBgYKCg4OEhH5+fn59fX19fX9+fn9/f39/f35+fn1+fn5+fn5/f39/fn5+fn5+f39/f39/f39/f35+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9+fX19fn17eXl6eXl4enp8fHx7e3x+gYKBf399end1dXZ6fH18fX18e3h4eHl5enh5e3t8fHx8fHx6enp7e3t8fHt7e3t7fHx8fX19fX19fHx9fX19fn5+fn5+fn5+fn19fX19fX19fn5+fn5+fn5+fn5+f3+AgIGDgoODg4GBgH9+fn9/f39/gIGCg4SEhISEhISFhIKDhIWEhIWFhoeGhoWFgoF/e3p6eXl8fn+BgoODhoaGh4eGhoSDgYCBgoCBgoKDg4OEiIqIhYSCgYGAgICAgYGDg4KCfn5+fn19fX19f35+f39+fn9/fn5+fX5+fn5+fn9/f39+fn5+fn5/f39/f39/f39/fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f359fX1+fXt5eXp5eXp6enx8fHt7fX+Cg4F/f316d3V1dXl8e3p8fHt6eHh4eXl6eHl6ent7e3t7e3p6ent7e3x8e3t7e3t8fH19fX19fX18fH19fX1+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5/f4CAgYKCgoKCgYCAgH5+gICAgICBgYKDg4SEhISEhIWFhISEhYWGh4eIiIaEgoGAf319fHp5eX2CgoSFhoeIiIiGhoaGhIOCgYCBgYGCgoODg4SHiImFgoCBgYCAgICBgYKCgYF+fn5+fX19fX1/fn5/f35+fn5+fn59fn5+fn5+f39/f35+fn5+fn9/f39/f39/f39+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/fn19fX59e3l5enl5enp6e3t7e3x+gYKCgH9+fHp3dXV1eHt7ent7e3p4eHh5eXp6e3l5enp7e3t7enp6e3t7fHx7e3t7e3x8fX19fX19fXx9fX19fX5+fn5+fn5+fn5+fn19fX19fXx8fn5+fn5+fn5+fn9/gICAgYGBgYGBgIB/f39/f39/f4CBgoODhISEhISEhYWFhYSFhYaHh4iJhoOBf4GBgIB/fHp7gISFh4eJiYeGhoaGhoaFhIKBgYGBgoKCg4OCg4aHiYWBf4CAgICAgIGBgYGBgX5+fn59fX19fX9+fn9/fX19fX5+fn1+fn5+fn5/f39/fn5+fn5+f39/f39/f39/f35+fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fn9+fX19fn17eXl6eXl6enp6ent8fn+CgoKAfn18end1dHN3e318e3x7eXh4eHl5ent7eXl6enx8fHx6enp7e3t8fHt7e3t7fHx9fX19fX1+fX19fX19fn5+fn5+fn5+fn9/fX19fX19fX1+fn5+fn5+fn5+f3+AgICBgYGBgYB/gICAgICAgICAgYGCg4OEhISEhISFhYWFhIWEhYaGh4iFgoB/gYKCgYB/fX+DhoiJiImIhoSEhYWGhoWDgoGAgIGCgoKDg4ODhYaJhYKAf3+AgICAgYGBgYCAfn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+f39+fn5+f39/f35+fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5/f35+fn5+fn5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+fHp6enp6enp6e3t6enx/gYKAf3x6enx6d3V2dXZ5fHx8fXx5eXZ2d3h6ent5enp6e3t7e3t6e3t6enx8fHx7e3t8fX59fX5+fn59fX19fX1+fn5+fn5+fn9/gIB+fn19fX1+fn5+fX19fX19fn5+fn5+gICAgICAgYCAgICAgICAgICAgYGCgoOFhYSEhIWFhoSEg4OEhISEhYWEg4ODg4OCgoKAg4WGh4eHhoWDgYOFhYWFhoWDgX9+gYGCgoODg4SFhYeGgoCAgH+AgYGAgICAf39+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fX1+fn5+fn5/f35+fn5/f39/fn59fX19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/f35+fn9/gH98ent7enp6enp7e3p7foCDgoF+fHt6enl4dnR0dnp9fH18fHl5dnZ3eHp6fHt6enp7e3t7e3t6enp6fHx8fHt7e3x8fX19f39+fn19fX19fX5+fn5+fn5+f4CAgH9+fn5+fn5+fn59fX19fX1+fn5+fn6AgICAgICAgICAgICAgICAgICBgYKCg4WFhISFhYWGhIWEg4SEhISEhYWEhISEg4ODg4KEhYaGhoWEhIGAgoSGhYWHh4SCgH6BgYKCg4ODhIWFh4eDgYGAf4CAgICAgIB/f35+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn9/fn5+fn9/f39+fn19fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn59fX5+fn5+fn5+fn5/f39/f39/f39/f39/fn5+f4CBf3x6e3t7enp6ent8fH2AgoODgX98fHt7eXh2cXJ2e318fHx7eXl3d3d3enp8e3p6ent7e3t7e3p5enp7e3x8e3t7fHt8fHx+fn5+fX19fX19fn5+fn5+fn5/gICAgH5+fn5+fn5+fn19fX19fX5+fn5+fn+AgICAgICAgICAgICAgICAgIGBgoKDhYSEhYWFhYaGhYWEg4SEhYWFhYSEhISEhISEg4SEhYSEhIODgH+BhIaFhYeIhoSBgIGBgoKDg4ODhIWHh4WCgIB/f39/f39/f39/fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn19fn5+fn5+f39+fn5+f39/f35+fX19fX19fX1+fn5+fn5+fn5+fn5+fn5+fn59fX19fn5+fn5+fn5+fn9/f39/f39/f39/f39+fn5/gYKAfHp7e318e3p6e3x9f4GCg4KAfX17enp4eHZxcnV8fXx7enl5eXh3dnd5enx7enp6e3t7e3t7enl6enp6fHx7e3t8e3x8fH5+fn59fX19fX1+fn5+fn5+fn+AgICAfn5/f39+fn5+fX19fX19fn5+fn1+f4CAgICAf3+AgICAgICAgICAgYGCgoOFhIWFhIWFhoaGhYSDhISGhoeHhYWFhYSEhISFhIOFg4OEg4OAf4GEhYeIh4iIhoKCgYGCgoODg4OEhYaGhoSBgH9/f39+fn5+f399fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f35+fn59fX5+fn19fn+AgH99e3t7fn18e3p7e32Bg4ODgX98enl6enh3dnRxdnx+fHx6eHd5d3d1d3h5e3t6enl7e3t7e3t7enp7enp7e319fX58e319fX19fX19fX1+fn5+fn5+fn5+f4CAgYGAgIB/f35+fn59fX19fX19fX19fn9+fn9/f39+fn9/f3+BgX9/gICBgYKCg4SFhYeGhYWFhYaGhIOFhYWGh4aHh4eHhYWFhYSFhISDg4SEgoGAgIGChIaHiIiGhIOAgIKCg4OCgoOEhYaHhYKAf39/f39/fn5+fn19fX19fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/fn5+fn5+fn5+fX19fn+Af318e3t8e3x7e3x+gYKDgoF+fHt6eXl6enh2c3F3fH98enh3d3l3d3V1dnh6enp6eXt7fHx7e3t6ent6ent7fHx8fXx7fHx8fH19fX1+fn5+fn5+fn5+fn5/gICCgYGBgH9/fn5+fn19fX19fX19fX1+fn5+fn5+fn9/fn5/f4CAf3+AgIGBgoKChISEhYWFhYWFhoeFhIWFhIaHhoeHh4eHh4eHhIWEhIODhISCgYCAgIGEhYaHiYeFg4GBgoKDg4KDg4SEhYaFg4F/f39/f39+fn5+fX19fX19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/f39+fn5+f39+fn59fX1+f39+fXx7e3t6fHx7fH+DhISBgHx6e3p5eXl5eHZxcHZ8fXt5dnZ3eXh4dXV1eHp6enp5enp7e3t7e3p6e3t7e3t7e3x9fHt8fHx8fHx9fX5+fn5+fn5+fn5+fn+AgIKCgoKBf39+fn5+fX19fX19fX19fX5+fn5+fn5+f39+fn9/f39/f4CAgYGCgoGDg4ODhIWFhYWGh4eGhYWDhYaGh4eHh4iIiIiGhYODgoKDg4GAgICAgYOEhYeJh4WDgoKCgoODg4OCg4SFhoWFgoB/f39/f39/f399fX19fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn6AgICAf39/f35+fn5/f35+fnx8fX5+fn59fHt7e3t8fHp9f4KEhIB/fHt8fHp5d3h5dHBwdXt8eXl2dnd5eXh2dXZ3eXl6enl6enl5e3t7e3p7fHx7e3t7e3x8e3x8fHx7e319f39+fn5+fn5+fn5+f4CAgoKCgoF/f35+fn59fX19fX19fX19fn59fn5+fn59fX5+f39/f39/gICBgYKCgYKCgoKDhIWFhYaHhoWFhYOEhoeJiYiJiYmKiYeEgoKBgYKCgH9/f4CAg4SFh4mIhYOCgoKCg4ODg4KCg4SFhoWDgH9/f39/gICAgH19fX19fX5+f39+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn9/gICAgH9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/fn5/f39/fn5+fn9/fn5+fXx+f39/fnx8fHt7e3t7en2Ag4WDf358fX5+e3t5eHdzcG90eHt6eXZ2dnd3eHl4eHd4eHl6enl7enp7e3t7e3x9fXx8fHx9fX19fX18fHx8fX1+fn5+fn5+fn5+fn5/f4CBg4KCgYB/fn5+fH19fH19fX5+fX19fX19fHx+fn5+fn59fX9/f39/f4CAgICAgIKCgoKDhYWGhoeGhoaFg4SEhoiJiYmJiYuKhoWDgoCAgICAf35+fn+ChIaIiYeFg4KCgoKDg4KCgoODhISFhYSBgH9+fn+AgICAfX19fX19fn5+fn5+fn5+fn9/f39/f39/f39/f35+fn5+fn5+f39/f39/f39/f35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39+f39/f39+fn5+f39+fn5+fX5/f39+fH19e3t7e3t7foKDg4F9fHx+gIB9fHp4dnJvb3N4enl5dnZ2dXd4enp5d3h4eXp6eXt7e3t7e3t8fH19fXx8fHx8fHx9fX19fn59fX5+fn5+fn5+fn5+fn9/gIGCgoKBgH9+fn58fX18fX19fX19fX19fX18fH5+fn5+fn5+f39/f39/gICAgICAgYGBgYKDhYWFhoeHhoWEhISGh4iJiImJiYiFhIKBgICAgIB+fn5+f4GEhYaIiIaEg4OCgoODgoKCgoKEhIWFhYOCgH5/f4CAgIB9fX19fX1+fn19fn5+fn5+f39/f39/f39/f39/fn5+fn5+fn5/f39/fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f35/f39/f35+fn5/f35+fn5+f4CAgH58fn17e3t7fH1/goKAfnx8fn+BgX98eXd1cW5ucnZ5eXl2dnZ1d3l7e3p4d3d5enp5e3t7e3t7e3x8fX19fHx8e3t7e3x8fX1+fn19fn5+fn5+fn5+fn5+f39/gICCgoGAf35+f359fXx9fX18fH19fX19fX5+fn5+fn5+f39/f39/f3+AgICAgICBgYGBgYKEhYWGh4eGhoSEhIWGh4eHiIiHhoKBgH9/f39/f31+fn5/gYSFhoaIhoSDg4SEg4OCgoKCgoODhIWFhYSBgH9/gICAgH19fX19fX5+fX1+fn5+fn5/f39/f39/f39/f39+fn5+fn5+fn9/fn5+fn9/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f39/fn5+fn9/fn5+fn5/gICAf35/fnt7e3t8f4CBgX99e3t/gYKCgH15d3Vyb29xdXl5eXZ2dnZ4eXx8e3l3d3l6enl7e3t7e3t7fHx9fX18fHx7e3t7e3t8fH19fX1+fn5+fn5+fn5+fn5/f36Af4KCgYB/fn5/fn19fH19fXx8fX19fX19fn5+fn5+fn5/f39/f39/f4CAgICAgICAgICAgYSFhYaGh4eGhISDhYaGhoaGhoWDgYB/fn5+fn5+fX5+fn+Ag4OFhYeHhISEhISDg4KCgoGCgoKDhIWGhYOBgH+AgICAfX19fX19fn5+fn5+fn5+fn9/f39/f39/f39+fn9/fX1+fn5+f39+fn5+fn5+fn5+fn5+fn5+fnx8fX5+fn5+fn5+fn5+fn5+fn5+fn19fn5/f39/fn+AgICAf39+fn9/f39+fn5+f4B/f4B/f318e3p7en1/gYB/fXt8fH6BgoKAfXl4dnNxcHF1eXl4d3V1d3l6fX18e3l4eXl6eHp6enx8e3x9fX19fHx8fHt7e3t6ent7fX19fXx+fn59fX19fX1+fn9/f39/gIGCgYB/fn5+fX19fX19fX18fX19fX19fX5+fn5/f35+f39/f39/f39/f36AgICAgICAgoOFhoWHh4aFhISEhIWHhoWEgYF/fn5+fn59fX5+fn5/f4GCg4WFiIaFhISEhIOBgoKCgoKBgoSEhYWHhIOBgICAgIB9fX19fX1+fn5+fn5+fn5+f39/f39/f39/f35+f39+fn5+fn5/f35+fn5+fn5+fn5+fn5+fn5+fHx9fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39+f4CAgIB/f35+f39/f35+fn5/gICAgIB/fXx7ent7fn+Af358e3x9foGCgoB9eXh4dXJvcHR3eHh3dnV3enx9fXx7enp5eXl4eXp6e3t7fH19fX17e3t8e3t7e3p6e3t8fHx8fH19fX19fX19fX5+f39/f3+AgYKBgIB/fn59fX19fX19fXx9fX19fX19fn5+fn9/fn5/f39/f39/f39/foCAgICAgICBgYSFhYeHh4WFhISDhIaGhIKBgH9+fn5+fn19fn5+fn9/gIGDhYaHhoWEhISEg4GCgoKBgYGBgoSEhIaHhoKBgICAgH19fX19fX5+fn5+fn5+fn5/f39/f39/f39/fn5/f39/fn5+fn9/fn5+fn5+fn5+fn5+fn5+fn9+fH1+fn5+fn5+fn5+fn5+fn5+fn5/f35+f39/f39/gICAgH9/fn5/f39/fn5+fn+AgYGAgIB+fHt6e31/gH9+fXx7fHx+gYKCf356eXh1c3Bwc3V4eHd3dnd5e3x9fHx6e3l5eXd4eXl6ent8fX19fXt7e3x8fHx8e3t7e3t7e3t7fHx8fX19fX19fn5/f39/f4CBgoKBgH9+fn19fX19fX19fH19fX19fX19fX5+f39+fn9/f39/f39/f39+gICAgICAgICAgoSFhYaGhYWEhIOEhoaDgoGAfn1+fn19fX1+fn5+f39/gYOEhYeGhYSEhISDgYKCgoGBgYCBg4OEhoiIgoGAgICAfX19fX19fn5+fn5+fn5+fn9/f39/f39/f39+fn9/f39+fn5+f39+fn5+fn5+fn5+fn5+fn5+f358fX5+fn5+fn5+fn5+fn5+fn5+fn9/fn5/f39/f3+AgYGBgIB+fn9/f39+fn5+f4CBgYCAgH99e3p7foGAf318e3t8fX6BgoJ/f3p5eHVzcHBydHd4d3d3d3h6e318e3p7enl4d3h4eHp6e3x9fX19ent7e3x8fHx7e3p6enp6ent8fHx9fX19fX1+fn9/f39/gIGCg4KBgH5+fX19fX19fX18fX19fX19fXx8fn5/f35+f39/f39/f39/f36AgICAgICAgYCBg4WFhoaFhoSEg4SGhoWDgYB+fH5+fHx9fX5+fn5/f36AgoSFhoaFhISEhIOBgoKCgYGBgIGDg4OGiIiEgoCAgIB9fX19fX1+fn5+fn5+fn9/f39+fn5+fn5+fn5+f39/f39/f39+fn5+f39+fX5+fn5+fn5+fX1+fn1+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gICAgICAgYGAgH9/f39+fn5+fn5/gIGBgYGAf3x7e31/gYOBfnx7e3t8fYCBgoB+fHl3dnNvb3FzdXd4dnd3eHl5fHx7fHx6eXl4d3d4eXl5ent7fX17e3p8e3t7e3p6enp6enl5enp7e3t8fHx9fX5+fn5+f35/goOCgoGAfn19fX19fX19fX19fX19fXx8fX1+fn5+gIB/f4CAgICAgICAf4B/f39/f39/f3+BhISFhoaFhoWFhYaFhYWCgH9+fX19fX19fH19fn9/f4CDhIWFhoaEg4ODg4OCgoGBgYCAgYKEhIaJiIaDgIB/f319fX19fX5+fn5+fn5+f39/f35+fn5+fn5+fn5/f39/f39/f35+fn5/f359fn5+fn5+fn59fX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f3+AgICAgICBgYCAf39/f35+f35+fn5/gICAgIB/fHt7foCCgYB/fHt7e3x9gIGCgX9+enh4dHBvcHFzdnd2eHl5eXl7e3t8fHp5eXh3d3h5eXl6e3t9fXt7e3x7e3t7enp6enp6enp6ent7e3x8fH19fX1+fn5+fn+Bg4KCgYB/fX19fX19fX19fX19fX19fHx9fX5+fn5/f39/gICAgICAgICAgH9/f39/f39/f4CDg4WGhYWHh4eGhoWFhYOAgH99fX19fX18fX1+f39/gIKEhYWGhoWEhISEg4GCgYGBgICAgoOEhoiIh4OAgH9/fX19fX19fn5+fn5+fn5/f39/fn5+fn5+fn5+fn9/f39/f39/fn5+fn9/fn1+fn5+fn5+fn19fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f4CAgICAgIGBgIB/f39/fn5/fn5+fn+AgICAgH98e3x/goKAgH97e3t8fX6AgoKCgH56eXh0cG9wb3F0dXZ5enp5eXt7e3x8enl5eHd3eHl5eXp7e3x8fHx8e3t7e3t6enp5eXl6enp6e3t7fHx8fX19fX5+fn5+f4CCgoOCgYB+fX19fX19fX19fX19fX1+fn5+fn5+fn5+f3+AgICAgICAgICAf39/f39/f39+f4GCg4WEhYaGh4aGhYWFhIKBf319fX18fHx9fX5/f3+AgYOFhIaGhoWEhISBf4GBgYGAgH+BgoSGh4qHhIGAf399fX19fX1+fn5+fn5+fn9/f39+fn5+fn5+fn5+f39/f39/f39+fn5+f39+fX5+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gICAgICAgYGAgH9/f39+fn9+fn59fn9/f3+Af3x7fICCgn9/fnt7e31+foCDhIOBf3t5d3RxcHBtbnF0dXh5eXl5enp7fHx6e3t5eHh4eXl5ent7e3t9fXx6e3t7e3p6enl5eXp6enp7e3t8fHx9fXx8fX1+fn5/gIKCg4KCgH99fX19fX19fX19fX19fX5+f39+fn5+fn5/f4CAgICAgICAgIB/f39/f39/f35/gIGDhISEhYaIhoaFhYWFhIJ/fX18fHt7fH19fn9/f4CAgYSEhoaEg4ODg4CAf4CBgYCAf4GChIaHioiFgYB/f35+fn5+fn5+fn5+fn5+f39+fn9/fn1+fn5+fn5/f39/fn5/f35+f39/f35+fn5+fn5+fX1+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f3+AgH9/gICAgICAgIB+fn5+f35+fX1/f4CAgIB+fH1+goOAf358e3x8fXx+gIKEg4N/fXp4dXJxcG5ub3Fzdnd6eHl5en19fXx7e3p5eHl5eXp6eXp8fHx8fHt6ent6eXl6eXh4enp6enp6fHx8fHx8fHx9fX5+fn5/gIGCgoGAf359fX19fXx8fHx8fH19fX19fX5+fn5/f39/f39/f4CAgIB+fn9/f39/f39/fn5/gYGDhIOFhoeGhoWFhYWFg4B+fXt6e3t8fHx+fn5+f4GCgoSFhYSEhISDgYB+foGCgYGAgYKDg4WIiIWCgYCAfn5+fn5+fn5+fn5+fn5/f35+f39+fX5+fn5+fn9/f39/f39/fn5/f39/fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn9/f39/f4CAf3+AgICAgICAgH9/f35/f359fX9/gYGBgH58foCDg39+fXx7fHx9fH6AgoSDgoB+end0cm5ub25ucHN0d3p6e3l5fHt8fHt7ent7eXl5eXl5enx8fHx8fHt7e3p6enp5eXl6enp6e3t8fHx8fHx8fHx8fHx9fn5/gIKCgYF/f319fX19fHx8fHx8fX19fX19fn5+fn9/f39/f39/f39/f35+f39/f39/f39+fn+AgIKDg4SGh4eHhYWFhYWEgX99fHp7e3x8fH5+fn5/gYKChIWFhYWFhYOCgH19gIGBgYCBgoODhIiIhYKBgYF+fn5+fn5+fn5+fn5+fn9/fX5/f359fn5+fn5+f39/f39/f39/f39/f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+f39/f39/gIB/f4CAgICAgICAgIB/fn9/fn19f4CCgoKAfn1/goOCf358e3t8fH18foCBgoKCgH57dnRybm5vbm5wcnN2eXp8enh5eXt7e3t6enp5eXl5eXl6fHx8fHx8fHx7enl5eXh5eXl5enp8fHx8fHx8fHx8e3x8fH1+fn6AgYGBgoCAfn19fX18fHx8fHx9fX19fX1+fn5+f39/f39/f39+fn5+fn5/f39/f39/f35+fn5/gYKCg4WHh4eFhYWFhYSCgH58e3t7fHx8fn5+fn+AgoKDhYWFhYWFg4KAfXx+gIGBgIGCg4OEiIiGg4GCgn5+fn5+fn5+fn5+fn5+f399fn9/fn1+fn5+fn5/f39/fn5/f4CAf39/f35+fn5+fn5+f39+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5/f39/f3+AgH9/gICAgICAgICAgH9+f39+fX1/gYKDg4B+fn+Cg4J/f3x6e3x8fXx+gICCgoGBfnt3c3FxcG9ubnByc3Z4eXp7eHl5e3t7e3p5eXl5eXh4eXp8fHx8fHx8fHt6enl4eHl5eXl6ent8fHx8fHx8fHx8fHt8fH5+fn+AgIGCgYB/fX19fXx8fHx8fH19fX19fX5+fn5/f39/f39/f35+fn5+fn9/f39/f39/fn5+fn6AgYKChIeHh4WFhYWFhYKAf318fHx8fHx+fn5+f4CBgoOFhYWFhYWDgoB9e36AgYGAgYKDg4aIiIeDgoKCa2xtbm9vb25vb29ydHV2dnd4enp6end1cnBxcXBwcHBxcXJzc3V4eXp6eXl5eXx8fX1+f4CAgICAgICAgIB/f399fn59fX19fX19fXt7fHx8fHx8fHx8fHx8fX1+fn5/gIGCg4SEhYWFhYaGhYWGhoSDgnxzamReW11fYWRhX11bXmNlaGhlYGBiZ2xzeoCEhYWEhIF7cWZdWVhdYmp0en6Bf3t1cnBwbWlmYWFkZ2tucHJ2eXqAgYCAgICAf39/fHdwbWpqampqampra25xcXR1dXV1dXZ2dXd2d3l4dXBmW1hUVlteY2hveYCBgYGBgoKDgYCAfn58eHZ0b21qZ2djZGZnZ2hmaGpqbXBydHR0dHRzcnJxcG9xdXR1dXp8f396dnBsaGJiZGNhXFpdZGtudHRzcnJzdXd6foKDhYJrbW5vcHBwb3BwcHN1dnd3d3h6enp5d3VycHFxcHBwcHFxcnN0dnd5enp5eXp6fHx9fX1/gICAgICAgICAgH9/f31+fn19fX19fX19fHx8fHx8fXx8fHx8fHx9fX5+fn+AgYKDhISFhYWFhoaGhoaGhIN/eW9oY19cXl9hY2BdXFpdYWVoZ2RhYGJlaXF4f4OFhYSEgnpyaF1ZWFtjaXN6foB+enZzcG9taGZhYWNma21ua25zeX6AgICAgIB/fn16dG5raWloaGhoaWtsbnBxdHV1dXV1dnZ1d3Z3eXh1cGZcV1RXXF5jaHB4f4GBgYGAgIF/gIB+fnx4dXNubGlnZ2NkZmhoaWdpamptcHJ0dHR0dHNxcXFwb3FzcnFzd3l+fnp1cGxnYmJjYmFbWVxja290dHNycnN1d3p+g4SGg2xub3BwcG9xcnJzdHV2d3d4enp6enh2dHJwcXFwcHBwcXFyc3V2dnh6enl5enp7e3x8e31+fn9/gICAgH9/f39/fX5+fX19fX19fX19fXx8fXx+fHx8fHx8fH19fn5+f4GCgoOEhIWFhYWGhoeHhoaEg313b2djX11eX2JiXVpZWFtfZGdnZWJfYWNmbXV+goWFhISCe3NpXltZW2JocHh9fnx4dHJwbW5pZmJiYmVqbW9ub3J3e3+AgH9/f4B8enZxa2loaGhoaGhpa2xub3J0dXV1dXV2dnV3dnd5eHVwZ1xWVVdcXmNncHd/gYGBgYCAgX+AgH5+e3d0cGxqaWhnZGVnaWlpaWpram1wcnR0dHRzcnBwcXBvcXNycHJ2enx8eXRxbWhjYmNiYFxaXWNrcnV1c3Jyc3V3en6DhYiFbnBvcHBwb3N0dHZ1dnd4eHl6enp6eHZ0cnBxcXBwcHBxcXJzc3V2d3p6e3t6ent7fHx7fH5+f3+AgICAfn5/f399fn59fX19fX19fX19fHx9fX5+fHx8fHx8fX1+fn5/gYKCg4SEhYWFhYaGh4eGhoSDfHZuZ2NfX15gY2JdWlhXWl9kaGpoY2BhYWVudH2ChYWEhIJ7cmlhXVtcYmdudXx8enVycW9tbWlmZGJiZGluc3Z3d3Z7foCAfn6Af3t5dG9qaGhoaGhoaGhpbG5vcnR1dXV1dXZ2dXd2d3l4dXBnXVZVV1teZGZvd4CBgYGBgICBf4CAfn57d3NubGlpaWhmZmhpaWhqamtpbXBydHR0dHNxcHBxcG5xc3JwdHh7e3t4dHFsaGVkZGNfXFpcZG10dnZzcnJzdXd6foSHiIVtb3FxcnJyc3R1dHV2d3h4eXt7e3l3dXNxcHBwcHBxcXJycnN0dXV3eXl5e319fHx8fHx9fX5/f39/f39/fX5+f35+fnx8fn5+fn19fHx9fX5+fn99fH19fX1+fn5+f3+BgoODhISFhYWFhoaGhoaEg4J9dm1nYV1eX2NkYV1aWFZZXWVsbmlkYWBgZW10fIKDhYWFg391bGViYGBjaG90e3l2dHFvbW5qaWhnZGNkaG93fYOBeXh7f4B/f399e3hybmpoaGhpaWlpaWpsbm9zdXd2dnZ2d3d2d3d4eHl1cGddVlVWWl5kaG93fn9/gICAgICAgIB/fHp1cm9qZ2hoZ2doaGpqaWtqa21ucHN0c3V1cm9wcHBvcHJycXF0eHp8fHdzcWtnZWNjYV9bXGBlbHN1dHNzc3R2eHl9hIeJhm5vb3Fzc3FydHV1dnd5eXl5e3t7eXZ2cnFwcHBwcHFxc3N0dHR2dnd5eXl7fHx8fHx8fX19fn9/f39/f399fn5/f35+fX1+fn5+fn59fXx8fn5/f318fX1+fn5+fn5/f4GCg4OEhIWFhoaHh4aGhoSDgn52bmRdXF5hY2NhX1pWVVhganFybGRgYGFmbHJ6gIOFhYWDgHpyaGNgYGRobXJ4d3NxbmxsbWpqampmZGVpdH6BhoV7cHJ6foF/fnx4c3BsaGhpaWpqaWlpam1vcHJ0dnZ2dnZ3d3d3d3h5enZxZ11XVVdaXmRnb3d8f39/f4GBgIB/f357d3JvbWlnaGhmZmdpampqa2xtbW1wc3V0dHRyb29vb21wcnFwcnR4ent6d3NuaWVjYWJhX15fYmZsc3VzcnJ0dXV4en6Dh4iHbm9ucHJycXJ0dXZ3eHl6ent8e3t5dnZycXBwcHBwcnJzc3V1dXd3eHl5eXt7e3x8fHx9fX1+f39/f39/f31+fn9/fn5/f35+fn5+fn19fX1+f39/fXx9fX5+fn5/f39/gIGCg4SEhYWGhoeHhoaGhIOCf3duYl1eXmNjY2JgWVRUWmRvdHVuZWFgYmZrcXd/g4WFhYSBe3NsZmFhZWlsb3R0cG5tbGxsbGxsamhmZ2t3f4OFg3lucXh/goB/enZxbGloamlpa2tqamprbW9xcnR2d3d3d3d3d3d3eHl6eHJpX1hUV1tfY2dudXx/f39/gIB/f359enZzb2xqaGhoaGZmZ2psbGxtbm5sbHBzdnRzc3Jvb29vbW9xcG9ydHh6e3l2cmxoY2FgYWNgYGJjZ25zdHJxcXR1dXd6f4WIiIhubm1ucXFyc3N0dXZ3eHt6e3x7e3l3dnRxcHBwcHBycnNzc3N1d3d4eXl5e3t7fHx8fH19fX5/f39/f39/fX5+f39+fn5+fn5+fn9/fn5+fn+AgIB9fH19fn5+foCAf3+AgYKChISFhYaGh4eGhoaEg4J/eG5lYWBfZGVlYF5YVVRcaHF3d25nYWFhZGtxd36DhYWFhIF7c2xpY2NmamxvcnRwbm1sa2xrbW1sa2hobnZ+g4SBd3Bxe4CCgX54dW9samhoampra2pqamtucHFydXd3d3h4d3d3d3d4eXl4c2thWVRWW2BjZ210e39/fn5/f39/fnt4c25samdnaGhoZ2Zna21tbW9ubGxscHN0c3Nzcm9ubnBucHFvb3J0eXp7eXRwbWpkYmBhZWNjZGZqbnJzcnFxdHV2eHl/homJiG5ubW5wcXN0dHV1dnd4e3x+fnx7eXd2dXJxcXFwcHFycnRzdXd4eHh4eHp6e3t6e319fX19fn5/f39/f35+fn5/f35+fX1+fn9/fn5/f39/gIGAgH5+fn5+fn5/gICAgIGBgoKDg4SEh4eHh4WFhYWEgn55bmhlYmRlZmNeXFdVVl9sdXt6cWpiYWBjaW91fIGEhIWEgnx1cWplZWZpa29wcG9tbGxra21ubm5qaGludn2Cgn94cXF4f4F/fXdzbmtoaGlpampra2lpa25vcXJ1dnh4eHh4eHh2eHh5eXl0a2JaVlZaYGNobXN8fn9/f3+Afn99eXRvamloZ2hmZWZnaGltb29vb25samtwc3NzdXVyb29tbnBwb21tcHR4eHp4c3BtaWRhX2FlYmFkaW1ydHVycHF0dXd3eX2GioqJbm5tbnBxc3R1dnV2d3h8fX5+fHt4dnV0cnFxcXBwcnNzdXV3eHh4eHl5enp7e3l7fX19fX1+fn9/f39/fn5+fn9/fn59fX5+gIB/f39/gICBgYCAf39+fn9/foCAgICAgYGCgoODg4SGhoaGhYWFhYWCf3lvaWdjZGVlY15cV1VZZHB4fXxza2RhYGJmbHR7gIOEhYSDfXdza2VjZ2lqbG9vbm1sbGxsb3Bub2xrbG93foKBfnhycHR8f355dXFsa2lpamxubW1raWlsb3Bxc3V3eHh4eHh4eHd4eHp6eXVrY1tYV1tfYmdtc3t/gH9/fn5+fXh1cW1paGloZ2RlZmhqa25vb29vbGpqa3Bzc3N0dHJvbm1ucHBvbW1xdXh4eHZyb21oYmBfY2ViZGhrcXR2c3FwcXR2d3d3fIaKiopubm5ucHF0dXV2dnd5en1+fX17enh2dXRycXFxcnJyc3V2d3h4eHh4eXl6enp6eXt9fX19fX1+f39/f39+fn5+f39+fn5+fn5/f3+Af3+AgIGBgICAgH5/f39+gICAgYGBgYKCgoODhIWFhoaFhYWFhYKAenJraGRjZGVjYF5ZV11odHt/fXZvaGNgYGRrcnl/goSFhIR/eHJrZGJmaGprbm9ubGxsbGxwcG9vbm5xcnh/gYB7d3Rvb3d9fHZycGtoamtsb29vbmtpamxwcHN0d3h5eXh4eHh5eHl5ent5dGxjWldZXV9iZ2xzeX5/f39/fXp4dHBvbGlnZ2ZlZGVmaWprbW9vb29saWptcHNzc3Nzcm9tbG5wcG9tbXF1eHh1c3Bta2ZiYWFlZWVobG90d3ZzcXBxdHZ2dXV5hYqKim5ub3BwcXR1dXZ4eXx8fn9+fnt5d3V0c3JxcXFycnFydHV2d3h4eHh6eXp6eXl5e319fX19fX5+f39/f35+fn5/f35+fn59fX9/f4F/f4CAgYGAgIGBgYB/f3+BgICCgoGBgoKCg4OEhYWFhYWFhYWFgoB6dG1oZGJjZWJgXlpXYGx4fn9+eHFqZGBfY2pyeH2AhIWFhIB5c2tmYWNlaW1tbW1rbGxsbHFwcHBtb3R1eYB/e3Vzc29qc3t7dnFvamhqbW5vb3Fva2lpa25vdXZ4eXl5eHh4eHl4enp7e3l0bGNbWFhcXmFma3N5fH5/f397dnRwbWpqaGdlZGNjZWZqbG5ub29vb2xqamxwc3Nzc3Nyb21sbnBwb21tcnZ4eHNxbmtpZmFgY2VmaGxvcXZ5d3JwcHF1dnVxdHiFiYqKa2xub3Bxc3V2d3h6en1+fn99e3p4dnV0c3JxcXFxcnJzdXV3eHh5eXl6e3t5eXp8fX18fHx9fn5/f39/fn5+fn9/f39/f399f3+AgICAgYGBgYGBgYB/f39/gIGAgIGBgYGDg4KDg4SEhIWFhYWGhIWDgXp0bmhlY2NiYF5dW1xkcHp/goB6dGpkYV5iaG50e4CDhIWDgXt0bWtmZGVpa2ppamtra21ucnNzcnN0dnh6fXlzbm5xcGhsdXZ0b2tqamtsbm9xcnBraGlrbW9zd3h5eHh4eHl5eXl6enp7enVtZV5aWlxfYWdscnd6e319e3hzcGxpZ2ZmZGJiY2RmaG1ucHBwb25tbGpobG9ydHNyc3JvbmxucHFubW5xdHZ1cnFubWtnY2BiZmZqb3J1eHp3cnBxcnV2dHJ0eISJi4tqbG5vcHFzdXZ5eXp7fn5+fn17enh2dXRzc3FxcXFycnN1dnd4eHl5eXp7e3p6enx9fXx8fH1+fn9/f39+fn5+f39/f4CAgH6AgICAgICBgYGBgYGBgH+AgICAgYCAgYGBgYKCgoODg4SEhYWFhYWEhIKAenRuaGRiYmFgXl1cXmp1fICDgHp1bWdiXmFmbHN6gIOEhYOBfHZvbWhlaGpraWlpamxsbXBzdXVzdHZ3eHt7dW9pam9wbGhwc3BraWpucG9wcnN0cGtoaWttb3N3eHl4eHh4eXl5eXp6ent6dm5mX1paXF9iZ2txd3p7fHp4dXBsaWdlZGRjYmJkZWhqbm9wcnBvbm1samhscHN0c3Jzcm9ubG5wcm9tbnFzdHJvb2xsamZjYWNmaG1ydnl7enVycHJzdXZ0c3J2goiJimpsbm9wcXN1dnl5e31+fn59fHt6eHZ1dHNzcXFxcXJydXZ3eHh4eXl5ent7e3t6fH19fHx8fX1+f39/f35+fn5/f4CAgIB/gIGBgICAgIGBgYGBgYGAf4CAgICBgICBgYGBgoKCgoODhISFhYWFhIODgn54c2xmYmBgYmFgXl5jb3h9gYOAe3Zxa2NgYGZrcXl/g4SFg4F9d3BuaWdpa2poaWprbGxucXR2dXR0d3h5eXp1bmxucW9saWtvbmlpa29xb25ydHRwa2hpa21vc3d5eXp6eXl5eXl5enp6e3p2bmZhXVtdX2Jnam93ent6d3RybmlnZ2VjYmNkZGVmaWtub3FzcG9ubWpoaGtwc3RzcnNzcG5sbnByb21ub3Fxb2xra2toZGNjZWdqcXZ6fX17dXNyc3R1d3RzcnaAh4eIamxub3Bxc3V3eXp8f35+fn59fHt4dnV0c3NxcXFxcnJ1dnd4eHh5eXl6e3t5eXp8fX18fHx9fX5/f39/fn5+fn9/gICAgH+BgYGAgICAgYGBgYGBgYF/gIGBgIGAgIGBgYGBgYKCg4OEhIWFhYWEg4OBfXdwaWViYGBhYGBfYGVxen6Cg4B7dnJsZWFgZWlvd36ChIWDgX95cm5pZWhramlpbG1sbG9xdXd2dXV4enl4eHdycHR0bWtqaGxsZ2ptcHBtbXN0dG9raGlrbW9zd3p7enp6enl5eXl6enp7enZuZmFeW15fYmhpbnd6e3l1cW5rZ2VlY2JhY2ZmZWdpbW5wcHFwb25tamhna3F0dHNyc3RxbmxucHFubW5ubm5tamppaWZkZGRmamxzen1/fnp1cnN0dXZ3dHNydH+Gh4dsbW9vb3Bxdnh6fH1/f39+fX17eXZ1dHNxcXFxcHBxcnR1dnh5eXp5ent6enl5e3t9fXl6fH18fX5+f399fX5+gICAgICAgIB/f4CBgICBgYGBgoKBgICBgYGBgYGBgYGBgYGBgYKCg4OEhISEhIODg4F7dW5pZWBdXWBgXl5iaXV8gYKDgn97dGxmYWBiZ3B2fIGEhISBfXt2cGtpZ2tsaWhrbm1ucHJ1dnZ2dnt9end3dnZ3eXZraGlpbXFtbnB0dnJtb3FycGtpaWptcHJ3eXp5eXl4eXl5eXp6enp5d29oY2BdXmBjZmtvdHh5dXNubGlnZGRiX2FiZGZmaGxtcHFycnBtbW5qaGhrcnZ1dHN0c3BubG1vcG1rbGxsa2pqaGZmY2JiZWdrbnR7fn9+eHRycnR2d3d0cXB1fYOGhm1tbnBvcHJ3eXt+fn9/f359fXt5d3V0cnJycnJwcHJ0dHV2eHl6enp6ent7e3t7e3t7eXt8fXx9fn5/f35+f3+AgICAgICAgH9/gIGAgIGBgYGCgoGAgYGBgYGBgYGBgYGBgYGBgoKDg4OEhISDg4OCgHpybGdiXlxdX19fYWZudn6CgoODgX11bmhiYWJocHZ8gIOEhIN+fXdybGpnaGpqaWpsbG1wc3Z2eHh3fH96dXV5ent5c2xnZmdscXJxdH+BfHNucXJwbGppam1wcnd6e3l5eXl6eXl5enp6enp4b2lkYF5eYWNmam5ydndzcG1qZWRjY2JgYmNlZ2hqbW1wcHFxb21rbGtpaWxydnV1dHRzcG5sbW9wbWloaWlnZmdlZWRjYmFkZ2tyeHx/f313dHFxdHZ4dnNxcXR7goWFbW1tb29wcnd5fH9/f39/fn19e3l2dXRzc3NycnJyc3R0dXZ4eXp6e3p6e3t8fHt7eXl6fHx9fX5+fn9/f3+AgICAgICAgICAf3+AgYCAgYGBgYKCgYCBgYGBgYGBgYGBgYGBgYGCgoODg4SEhIODg4F9eHFqZV9dXF5fX2BjaHF6f4KCg4OCfndwamRiYWdudXp/goSEg4B+eHJtamdnaGtqamtsbXF0dnh6enp+f3lzdXp9fXZxbmhlZWlvc3R6goJ8dHBxcnBraWlqbG9yd3t8e3t6enp6enp7e3p6enhxamRgXl5hY2ZobHB0dHFsamZkY2JiZGRkZWdoamxtbW5ucHBubGtsbGpqbnJ2dXV0dHNwbmxucHBraGdmZmZlZWVkY2NiYWVobHJ4fX99e3dzcHF0dnd1cnFwcnqBhYVtbW1ubnByeHp9f39/f39+fX17eXd2dXNzc3FxcnJxc3R1dnh5e3t7fHx7e3p6e3t5eXt8fH1+f35+f39+f4CAgICAgICAgIB/f4CBgICBgYGBgoKBgYGBgYGBgYGBgYGBgYGBgYKCg4ODhISDgoOCgHx4cGhjXl1dX2BgYGNsdXuBgoKDg4N/eHJrZmJgZmxyeH6BhISCgX55c21qZ2doamltbG5vcnV4ent7e3+AenN1en58dG9vamZlZ2xydXuAfnh0cnJycGlnaWprb3J3e3x9fXt7enp8fHt7ent7eHNsY2BeXmFjZmhsb3JxbmpoZWRjYmJkZGRnaWtsbm9vbW1wcG5sbG1tbGxucnZ1dXR0c3BubG9xcGpmZWVlZGNiZGRjY2FjZmlscnh7fnx7d3NxdHR2dnVxcXBxeYCEhGxsbm9vcXR3e35+fn9/fn58fHt5dnZ1c3JycXFwcXFzdXZ2d3d6enp6enp6enp6ent7e3x9fn1+fn9+fn+AgICBgYCAgICAgICAgYGCgoKCgoKCgoKCgYGCgoKCgYCAgIGBgYGBgoKDg4ODg4ODgoF+eXNuZ2NgX19gYGBhZW13f4KCgoODg4B7dW1nYGBjaG91fIKDg4OBf3lzbmpmZWhqamtscHJ0d3l6fHp8fn93cXd+fnl1cm9ramloam9xeHx4cnF1dnRvamdoa2xwcnd8fXx8e3t7enx8e3t7e3t4cmtkYV9fYmNlZ2pucG9qaGVmZGJhYmJjZ2loam1vb25tbW9vbW1ub21ra29zdXV1dXVzcG1sb3BvaWNiZWVhYGFkY2RkZGZmaG1yeHx8e3p1cXFzc3V1cnFxcHB4f4KCbGxsbm9ydXh7fX5+f39+fnx8enh2dnRzcnJxcXBxcnN1dnd4eHp6enp6enp7e3p6e3t6e31+fX5+gH9/f4CAgIGBgICAgICAgYGBgYCAgoKCgoKCgoKBgYKCgoKBgICAgYGBgYGCgoODg4ODhISBgHt2bmpmY15dXF9gYGJobniBgoODg4ODgH13b2lgX2JnbnN7gYODg4F+eXNuaWVlaGpqa2xwdHh6e3p5d3l6eHVze39/e3l1cG1sa2psbXJ5eXVxcnh5dnFraGhrbG9yd3x9fHx8e3t7e3t7e3t7eXdxa2VhYGBiZGVnam1ubmllY2VkY2FjY2NmaGlqbm9vbm1ucHBubW1ubWxrcHN1dnZ2dnRxbm5wcW5oYmJkZGFgYGJjZGRkZGdobXJ5fXx7eXRxcXNzdXRzcnJycnd+goJsbGxucXN2eHt7fX1/f35+e3t6d3Z1dHJycnFxcHJzdHV2d3h4enp6enp6ent7enp7enp7fH19fn1/gIB/gICAgYGAgICAgICBgYGBgICCgoKCgoGCgoGBgoKCgoGAgICBgYGBgYKCg4ODg4OFhIB8d3NtaGRiXlxaYGBhZGpxeoGCg4ODg4OAfnhxa2JfYmZscnqAg4ODgX54dG5pZWVoamprbHF0eXt8enl3dnZ2dnd9gYB/e3dycG9ubm1vdHt4dHN2fHx4dGtoaGtsb3J3fH18fHx8e3t6ent7eXl4dnBsZmJgYGFkZ2hpa2traGJhY2RkYmRmZWZoamtub29ubW9xcXBtbW5ubGxwdHZ2dnd2dXJwb3BybWdhYWJiYF9gYWJjY2NkZ2htcnl9fHp4dHFyc3N1dHRzcnFxdXyBgWxsbW9ydXZ5e3t9fX9/fn56enl3dXVzcnJycXFxc3N0dXZ4eXh6enp7e3t7enp6enp6ent7fH1+fn+AgH+AgICBgYCAgICAgIGBgYGBgYKCgoKCgoKCgYGCgoKCgYCAgIGBgYGBgoKDg4OCg4SCfnl0cGxnY2NfW1pfYGNma3R7gYKDg4ODg4B/eHJtY19hZmpweX+Dg4OBfnl0bmtoZWhqamtscXR4fH18fXp1dnZ0dnyCgoB8eXR0dHFwb3B1fHlzdXt+fXhzbWloa21wcnd8fXx8fHx8e3t7enp3d3d2cGxnZGBgYWVoaGhoZ2hmY2FkZGRkZ2hoaWtrbG5vb25ucHFxb29vb25sbnJ0d3V1d3dzcG9ub3BsZmFhYWFfXmFhYWJjY2VmaG1yeX18enh1cnFzc3V1cnFxcXFzeoCAa2xtb3Fzd3h5ent8fn5+fHp5eHd2dXRycXFycnJ0dXZ1dnh4d3h4eHt7enx6ent7e3t7fHx9fn5/f39/f4CAgICAgICAgICAgYGBgYGBgYCCgoKCgoKCgoKCgoKBgYCAgYGCgoKCgoKDg4OBg4B8dXFtZ2VjYF5cXV9fYmdweX+Cg4ODgoODgoF6dW5lYGJla3F3fYGCgoGAeHZwamZkZmhqa21zd3x8fX2Bf3l1dXR1fIGCfXp5eHp2dHVyc3Z7d3F0fH59eHJsaGhqbG9xdnx9fX19e3x8fHp5d3d3dnRybmllYGBgY2lqamdnZ2VjYWNkZGhoaWpra2tsbm9ubW1tcG5tcHFxb25ucnV2dHR2dnNwbm9wcGxmYGFhXl5fX2FhYmNkZ2dpbXN4fHt4dnJwcnN0dnRxcnJxcXN5f35rbG1vcXR3eHl6e3x+fnt6enl4dnZ0dHFxcXFxcnN0dHV2eHh4eHh5enp6e3p6e3t8fHx8fX1+fn9/f39/gICAgICAgICAgICBgYGBgYGBgIKCgoKCgoKCgoKCgoGBgICBgYKCgoKCgoODg4GBfnlzbmplZWNgXl1dYWJlaXJ6gIODg4ODg4KBgHt2b2ZhYWVqcHZ8gYKCgX55dXBqZ2VnaGtrbnV5en19f4SHgXp6eXp9gIF6d3l5dnJwcXJ0eHt4c3V8fn15c2tnaGptcHJ3fH19fX18fHx8enl3d3Z1c3JvaWVhYGBjaGhpZWVlZWJiZGVlaWlqamtramxub25tbG1ubGxvcnJvbm9zdXd1dXZ2dHFub3Bwa2VhYmFeXV1eYWRkY2ZpaWpudHl8e3h2cnByc3R2dHFxcXBwcnh+fGttbW9ydXd4eXp7fH19e3p5eHh3dXR0cXFxcXFxcnNzdnd4eHl5enp5eXl6enp8fHx8fHx9fX5+f39/f3+AgICAgICAgICAgIGBgYGBgYGBgoKCgoKCgoKCgoKCgYGBgYGBgoKCgoKCg4ODgX98dnBqZmVlY2BfX19jZGhtdXyAg4ODg4ODgoF+fHZvZ2FgZGhudXuBgoKBfXp1cW1oZmdoa2twdnp5fn+BhoqDfX5+fX9/fXh2dHRyb29wcnV4enh1dX1+fXhya2doam5wdHl8fX19fn19fXx6eXd2dXRzcG1pZGJhYWRmZmVkZmZlYmNlZ2dqampqamppa25vbm1sbGxsbHBycnBvb3N2eHV1dnZ0cW5vcHBrZWJiYV5dXF9hZGVlaGpqa29zeXt6eHZycHJzdHZ0cW9vcHBxd3t6bm9tb3N1d3h5ent8fX18enh3d3Z1dHNxcXFwcHFycnN2eHh4eXl6enl5eXp6enx8fX18fH19fn5/f39/f4CAgICAgICAgICAgYGBgYGBgYGCgoKCgoKCgoKCgoKBgYKCgYGCgoKCgoKDg4OBfHl0bWllZWVjYF5fYmRlanF4fICDg4ODg4OCgX58dm9oYmBjZ211e4GCgoF+enVwb2hkZmhra293e3x/gYOJiIJ+fX19f3x4dXRxcW5tcHFzdXd6eHV4fX59d3FtaWhqbG9zeHx9fX1+fX5+fHp5d3V1c3JwbGlkY2FiZWRkZGVnZ2ViY2ZoaWtra2tpaWlqbm9ubWtrbGxtcXJycXBvdHd4dHR2dnVybm9wcGpkYGFhXV9cX2FjY2dpa2tsb3R5enl4dnJwcnN0dnRxb29vb3F3eHdtbW1vdHV2eHh6e3t8fH17eHd3dnZ1c3JwcHFxcnNzdHd4eHh5eXp6enp5enp6e3t7e3x8fn59f39/f39/gICAgYGBf4CAgICBgYGBf3+AgYODgoKCgoKCgYGBgYKCgoKCgoODg4ODg4KCgoF9d3FsaWVlZWNhYGFkZWdrc3qAgYODg4ODg4KCf3x2b2hiYGFnbHN6f4GBf3x3dHBtaWVlZ2tscHZ6e3+BgoaFgHp2dHZ4eHVycW5sbm5vcnR1eHp4dnd+gH53cW9raWtsbnF2e31+fn5+fnx7eXd1c3N0dHFtaGViYmJlZWVmZmdnZ2dmZ2pramttamlqampubW1sbG1tbm9wb3Fyb3F0dnV0cnV2dHFtbnFva2NgYGJiYmBgYmNkZmlqbGxxdHh6eXh1cXFydHV2c3FwcHBwcHV1dG1tbnB0dXV2eHl7e3x8e3p3dnZ1dnVzcXFxcXFycnN0eHh4eHl5eXp6ent7enp7e3t7fX1+fn1/f39/f3+AgICBgYF/gICAgIGBgYGAgICBgoKCgoKCgoKBgYGBgoKCgoKCg4ODg4ODgoKCgXx3cWxqZ2ZkY2JhY2ZnaWx0fICCg4ODg4ODgoKBfnhwaWNhYWdscnl+gIB+e3ZzcG1qZ2Voa25xdXl7f4CChIJ6dXBucXJ0cnFvbGttb3B0eHZ4e3p1eH6Bfnhxbmppa2xvcXZ7fX5+fn59fHt5d3Rzc3NzcG1oZWJiYmVmZ2dnZ2doaGhoamtrbG1qaWpra21tbGtsbm1ubnBwc3NwcnV2dXRydXZ0cW5vcW9rY2BfY2NjYWFjZGZnampsbXJ1eHp5dHFxcXJ1dnVxb3BwcHBwc3RzbW5vcXN0dHV3eHp6enp6eXd3dXV0c3JxcXFxcXJyc3R3d3h4eXl5enp6e3t6ent7e3t9fX5+fX9/f39/f4CAgIGBgX+AgICAgYGBgYGBgYGCgoKCgoKCgoGBgYGCgoKCgoKDg4ODg4OCgoKBfHdwbGlmZWVkZGRlZ2hrcHd+gIKDg4ODg4OCgoN/enNsZ2JjZmtwd31/f3x5dHJwbmtoZWhscHB0eHt/goSCfndzcG1ucHFwcG5tbW1vdHh6eXl7eHV5foF+eHFtaWlrbnByd3t9fn5+fnx7enh2c3Rzc3JvbGhmY2FhZGdnaGhoaGlpampsbW1ubmtqaWpqa2tramxtbW1scHJzc3Jzdnd1dHR2d3Rxb3Bxb2tlYWFkZGNiYmVlZ2lqaWpucnZ5eXh1cnFxcnV3dHBucHBwcG9xcnFtbXBycnR1dnd4eXl5eXl4dnZ2dnNycnFycnFxcXJzdHZ2eHh4eXl6enp7e3p6e3t7e35+fn59f39/f39/gICAgYGBf4CAgICBgYGBgYGBgYGBgoKCgoKCgYGBgYKCgoKCgoODg4ODg4KCgoF8dnBramZkZWRmZWdnaW1zeX6AgoODg4ODg4KDgn56cm5pYWNmam92fX9+e3hzcHBva2llZmtub3R4e3+ChIJ8dnFxbW1tbm5ubW1ubXF2enx9eXh1dXqAgX54cW1paWtucHN4e31+fn5+fHt6d3Zzc3JycW5rZ2djYGFkZ2doaGhpampra21ubW9ubGppaWlqamtqa2xvbWtwcXJ0dHV3d3Z0dXZ3dHFvcHFva2ZjY2RkZGNjZWdqa2pqa29zdnl4d3VycXFydXd0cG9wcHBwb3Bwb25vcXFycXJzd3h5eXl4eHh2dnV0c3JxcHBwcHFyc3R0dXZ3d3d4eXp7e3t7fHx9fX5+fn5+fn5/f39+fn+AgICAgIGAgICAgIGBgoKCgoGBgYGCgoGBgoKBgYGBgoKDg4ODg4ODg4ODg4OBf313cGpoZ2ZnZ2hoaGprb3Z+gIGDg4ODg4ODg4KBfnt0b2plY2Vpb3R7fnx6dnBwcG9taWZnam5vc3d6foCBf3p1cHBubW1ubm5ubm1vdHd6f396eHV1fIGBfnhwa2lpa25zdXl8fn5+fn18enh2dnR0dHNybWpoaWVhYmRnamtsa2lra21ucHFxcG5samZnZ2lqa2ttbW1ubXBydHR0d3l5d3R1dnZ0cG9wcW9sZmNjZWRkY2JkaGpsa2trb3N4eHh2cnFwcHN2eHZycG5wb25ubm9vbm9xcXJxc3R2eHl5enl4d3V1dHRycXFwcHBwcXNzdHR1dnd3eHl5ent7e3t8fH5+f39+fn5+f39/f35+f4CAgICAgYGAgICAgYGCgoKCgYGBgYKCgYGCgoGBgYGCgoODg4ODg4ODg4ODg4F+e3VuamhoZ2lpaWpqbG1wd3+AgoODg4ODg4ODgoF/e3VwamdjZWlvc3l8e3h1cHBwcG5pZmVpbm9ydnp+f4F/e3Zxb21tb3FvbW5vbnF2eH2CgX55dHR5gYF+eHBraWprbnN2enx+fn5+fXx6eHZ2dHR0c3Fua2lpZmJiZGltcHFvbW1ubnBxcnNwbWtqZWhoaWpqamxrbG1ucHJzdHV4eXl2dXZ2dnRwb3Bxb2xmZWVkY2NjYmRoamxsbGtwdHd4d3ZycXBwc3Z4d3Nxbm9sa2trbm5ub3FxcnJzdHV3eHh5eHd3dXVzc3JxcXBwcHBxc3N0dHV2dnd4eXl6e3t7e3t7fX1+fn5+fn5/f39/fn5/gICAgICBgYCAgICBgYKCgoKBgYGBgoKBgYGBgYGBgYKCg4ODg4ODg4ODg4ODgX55c25qaWlqa2trbGxsbnN5f4CCg4ODg4ODg4OCgYB8dnBrZmNlaW1zd3p5d3RxcHBvbWpnZGdsb3F1en5/g4F9eHNvbW5xcG5tbW9vcXZ6f4OEgHt2dXqAgX54cGxqa2tvcnd6fH5+fn18e3l4dnZ0dXRzcG9samhnY2NnbG9zdHNwb3BxcnFzdHFta2pnaGhpamlpaGlrbG5wcnN1dnh5eHV0dXZ1c29vcHFvbGZmZmRjYmJiZGhqbW1ubHBzdnh2dXJxcHBzdnh3dHFvbm1sa2tubm5vcXFycnN0dXZ3d3d3d3d2dnNzcXBxcHBwcHFzc3R0dXZ2d3l6eXp7e3t7e3t8fH19fn5+fn9/f39+fn+AgICAgIGBgICAgIGBgoKCgoGBgYGCgoGBgICBgYGBgoKDg4ODg4ODg4ODgoKAfndybGpqamtsbW1ubm1vdXp/gIKDg4ODg4ODg4KBgn13cGtmZGNnbXJ2eXh1dHFwcG5sa2hkZ2tvcXV6foCDgH13cnBucHFubGpsb29yeXyAg4WCenh3eoCBfnhwbGtrbHByd3t8fn5+fHx7eXl3d3V0dHJxbWtraGdjZmtucnR2dXJxcnN0dHV0cW5samlpaWlqaWlnaWprbnBxc3V1ent4dXJzdnVyb29wcW9sZmRkY2JiYmJkaGptbW5tbnJ2d3Z0cnFwcHN2eHd0cnBubWtqam1tb3BxcXJzc3R2d3d2d3d3d3Z1dHRycXJxcXFxcnJzdHR1dnd4eXp5enx8ent7ent7fHx8fX5+f31+fX9/f4B/f4GBgYGAgICAgYGBgYCAgYGBgYKCgYGBgYGBgYGDg4ODgoKCgoODg4KCgIB8dW9qaWprbW5vbnBvbnF2e4GCg4ODg4ODg4ODg4KCfnhxbGdkZGdscHV3d3ZzcW9vbWxraWVoa25vc3d9gYF/fHZycGxtbGdnamxucHV6f4KEhoN7dnV6f4F+d3Bra2xtb3F2e31+gIB9fXt5enh3dXRycW9ua2poZ2ZobnJ2eXl3dXNyc3V2d3VybmxpampqaGlpaWdnamtucXJzdnZ4eXl1c3R2dXFvb3FycGxlZGJjYmFiY2Voa25ubW1uc3Z3dXRycW9wc3Z3d3Rxb21rampqbG1wcG5ucXJydHZ3d3Z2dnV1dXVzcnNycnFxcXFycnN0dHV1d3h4eXl6enp6e3t5enp6ent8fX19fH18fn5/gICAgIB/f4CAgICAgIGBgH+BgYGBgoKBgYGBgYGBgYODg4OCgoKCg4ODgoOAgHlybGlpamtucHFwcG9ucnZ8goODg4ODg4ODg4ODgoJ/eXNtaWVjZmtvdHV2dXJxb29sbGxqZWdpbW9zeH6Afn17d3JwbGpnZmdrbG9ydXuBhIWGg3t2c3d9gX53cGtrbG1vcXZ7fX5+fn59e3t6eXh2dHJxb25samlnZ2pyeHt8fHp3dnN0d3h4dnNvbGppaGhoaWlpaGhrbW5xc3N1d3l6eXVzdHZ2cm9vcnJwamRkYmJiYWJjZWhrbm5ubW9zdnZ1dHFxb3FzdnZ2dHFvbWtqaWlsbXBwbm5xcnJ0dnd3dnZ2c3N0dHNyc3JycXFxcXJyc3R0dXV2d3h5eXp5eXp5eXZ2dnR0dnl8fHt6e3p7e31+f4CAgH9/gICAgICAgIB/gIGBgYGCgoGBgYGBgYGBg4ODg4KCgoKDg4OCg4F+d3BqaWhpbG9wcnFxcG5yd3yCg4ODg4ODg4ODg4OCgoB6dW5pZWNla29yc3RzcXBvb21tbGplZWltcHF3fX59fHt4c3BsamdoaWttb3N4foKFhIaEfHZydn2Bfndwa2tsbW9xd3x+f35+fn19fHp5eHZ0c3Bvb2xqaWhobXR7f35+fHl2dHV4eXl2c3BtbGhnZ2hpaWlramptbnFzc3R2ent5dXN0dndycG9ycnBnY2RiYGBgYWNlaGtub25tcHN3dXRzcHBxc3R1dnZ0cW9ta2poaGtscHBvb3BxcXR2d3d2dXVzc3R0dHRzcnJxcXFxcnJzdHR1dXV2d3h5enl6enh2cnFxcHByd3p6eXl5d3l5eXp8f39/gIGAgICAf39/f3+AgYGBgYKCgYGBgYGBgYGDg4ODgoKCgoODg4KCgHx2b2doZ2htcHFxcHFwb3N3fIKDg4ODg4ODg4ODg4KCgHt2cGllYmZqbnByc3FxcG9vb25samZlam9wcXV7fHx7enhzcGxpamlqbG9vdHt/g4WFh4Z/dnN4fYF+d3Bra2xtb3F3fH6Af39+fX18e3p4dnVzcW5vbGppaGlud32AgYF9end1d3l7e3ZzcG1raWdoaGlpaWpqaWttcXNzdHZ6e3l1c3R3d3Nxb3JycGhlZGJfX2BhY2Voa29vbm1wdHd1c3JwcHN0dXV3d3Rxb21ramhoamtub29vb3Bxc3V2d3V0dHV1dXV0dHNzcnJxcXJyc3N0dHV2dnd4eXl7e3l3dXNvbGtpam1xeHh2dHRyc3Rzdnl9fn9/f4CAf3+AgH5/gICBgYGBgYGBgYGBgIKCgoODg4ODg4ODg4ODg4N/e3RtaGdoamtvb29vb29wdHt/goKDg4ODg4ODg4ODgoKAfHZxamRhZWltb3BxcXBwcHBub25qaGdpbnBwdHp9fX17eHRxbWppaWltbnF2fYGDhYaGh4J5dXd/gn93cGtramtvcXZ9f4CAgH9+fXx6eXh2dXFwbm9saWhoanN6f4GDgX96d3Z3e3x6d3RwbWtqaWhpaWdpaWlrbG5vcXN1d3l8eXV0dXd2cnJxcnNuZmFiYmBgX2BjZmhrbm5ubnF1dnRycXFxc3R1dnh3dHBtbGppaGhqa25vb29vcHJzdXZ2dXR0dXV2dnNzcnJycnFxcnJzc3R0dXZ2d3h5eXt8eXdzcG1qaWZnam50c3Fva2ppa21xdXp9fn9+f39/f39/f4CAgIGBgYGBgYGBgYGAgoKCg4ODg4ODg4OEg4KCgX13b2toZmZoam5vb29vcHF1fICCgoODg4ODg4ODg4OCgoF9d3FqZWJkZ2tub3BwcHFwcG9wb2toZ2lucHFzeX19fnt3dXFsa2lpaW5vc3h+goSFhYWGg313eH6BfnZva2tqa29xdn1/gICAf359fHt5eHZ1cXBucG1qaWlrdXyBg4SCgXx4d3h8fHl4dXJwbWtpaGdnZmdpaWtsb3Bxc3N3enx6dnV2d3ZycnJzc21kYGJhYGBgYWRmaWtubmxtcXV2dHFvcHBzdHV2dnZybm1samloaGprbm9wcHByc3R1dnV0dHR1dXV1c3NxcXJycnFzc3N0dHV2dnd3eHl5e3t4dXFsamloZmVna29uamdkY2RmaW1wdHh7fH5+fn9/f3+AgYCAgYGBgYGBgYGBgYCCgoKDg4ODg4ODg4SDg4J+enJraGZkY2VpbXBwcG9wcXZ8gIKCg4ODg4ODg4ODg4KCgX54cmplY2NlaWxtcHBwcXBwcHJxbWhmaWxwcXN4fH19e3d0cWxsampqbnF2e3+ChYWFhYaEfXV2fX98dnBra2xtb3F2fX+AgIB/fn59e3p4d3ZycW9wbWtqam12foKEhIOBfXl4enx8eXd1cnFubGloZmZmZ2hoamxwcXFxcnZ7e3l1d3h3dnJycnNzbWVgYWBgYGBhZGdpbG5ua2xxdXZ0cW9wcXN0dHV2dnFub21samhoamtub3FxcXJzdHV2dXN0dHV1c3NycnFxcnJzc3R0c3R0dXZ2d3d4eXl7enh0cGxqaWdmZWRoamhnY2JgYmNmamxwdHl7fH5+f35+fn5/gICBgYGBgYGBgYGBgIKCgoODg4OCgoODhIOBgHt2cGlkYmFgY2htcXBwcHB0eHyBgoKDg4ODg4ODg4ODgoKCfnhza2ZjY2Zpa2xvb3Byc3NzcnNuaGVpbG9wcnd8fHx6dXNxbmxra2pvc3h9gYKFhoaGh4Z6dHR9f3x2cW1tbG1vcXZ9f4CAgH9+f317enl3dnJxb3Fua2pqb3d+goSDgoJ9enp8fHt5d3VycGxqaWhnZ2doaGhqbG9wcnF0d3p8d3N2d3d2cnJyc3NtZWBgYF9fYWFlaGptbm5sbXF1dnRycXFyc3RzdXd3cW5vbmxraGhqa2ttb29wcXFxc3Rzc3R0c3NycnJycnJycnNzc3NzdHN0dXZ2dnh5ent5eHVxbWtqaGdlY2NkZGNiYmFgYWRmZmlwdnt9f359fX5+f39/f4CAgYGAgIGBgYGBgYKCgoKCgoODg4ODgoB9eXRuZmNgYGBgZm5xcXFwcHZ7foGDg4ODg4ODg4ODg4ODg4J/eHJtZmFjZmtqamxtb3Byc3Nzc29pZ2hrbnBxdHp8e3l0cXFsa2tsbHB2en6BgoSFhoaGhnp0dX2AfndwbGxrbG5yeH1+f35+f399fHx6eHZ1c3FvcW9ta2twd32Bg4SBgH17ent6eXh3dHJwbWppZ2ZmaWloZ2lqbnBxcnN3e3x5dXV4d3VycnJycWphXl9dXmBiY2Zoa21ubWxtcnN1dHRycHJ0dHR1d3dxbm1ta2lmZmhra2xtbnBxcXFzc3Nzc3Nzc3JycnJycnJyc3Nzc3R0dHV1dnZ3eHl6e3l4dnJubGpoZmRiYWFhYWFgYGFjY2RkZWtwdnx9fH1+fn5/f39/gICAgICAgYGBgYGBgoKCgoKCg4ODg4KAfnt1cWtmYV1dYGNpb3JycXFyeH2AgoODg4ODg4ODg4ODg4ODgn95c25nYmFkaWpqa21vcHJ0dXV0cGtoaGtub3F0eXp6dnFubmpra2xtcnd8f4GChIWGhoaGfHRzen58dW5ra2tsbnJ3fH5/f39/f359fHt4d3Z0cnBxb21sa3F3fH+BgoF/e3l4enl4dnVzcnBtaWhnZ2dpaWloaWttcHFyc3d5e3h1dXd3dXJycnJwaWBdXl1eYGNlZmlrbm5tbG1yc3Nyc3FwcnZ1dHZ3eHNubGxraWZkaGprbG1ucHFxcXNzc3NycnNzcnJycnJycnJyc3NzdHR2dnZ2dnd4eXp7eXh2cm5tamlnZWNiYWJjYWBgYmRjZGNjZm1yeHt9fX5+fn9/f3+AgICAgICBgYGBgYGCgoKCgoKDg4KCgX57dnFsaWVfXVxgZWtwc3JxcnR5foGCg4ODg4ODg4ODg4ODg4OCf3t1b2lkYWNlaGprbW9wc3R3d3Vya2loam5vcXR4eXlzbmxsamtrbXB1eX6AgoSEhYaGhoaAdnJ2ent1bmtra2xuc3d8fn+AgH9/gH98e3l4dnRycHFvbWxrcXd6fYCBf315dnZ2dHV0c3Bwb2xoZ2ZoamlpaWhoa21vcHFzd3p5d3N0dnd1cXFycm9oYF1fXV5gY2VnaWxvbm1sbXFycnFxcXBydnd1d3l4dG9sbGtpZWRmaGtsbW9wcXFxc3Nzc3Jyc3NycnJycnJycnFyc3N0dHZ2dnZ3d3h5ent5eHZxbm1ta2lnZWRjZGRiYGBjZWVkY2NmaW91eXt7fX5+f39/f4CAgYGAgIGBgYGBgYKCgoKCgoODgoOAfnhybWhlYl5cXWBma3FzcnFydHqBgYODg4ODg4ODg4ODg4ODg4J/fHZva2ViZGVnamttcHF1eHl5dnNsaWhqbW9wdHd4dnJua21ra2tucnZ7f4GDhISFhoaGhoJ4dHN5enVwamprbG9zeH1+f4CAf39/fn17e3l3dXJwcW9tbGxxdnl7f399e3h0c3JxcnJxbm1ta2hnZmZpaWloaGdpbW9wcXN3e3l3c3N2d3VxcHJyb2dgXV5dXl9iZGdqbG9ubWxtcHJzcnFxcnR1dnZ3eXh0b2xsa2lkY2VnbG1wcXBwcXFyc3R0dHRzc3Jyc3JycnJycnN0dHV1dXV3d3h4eHl6e3p6d3RxcXFwbWlmZmZlY2VkZGVlY2RiYWFka3R4enx8fX5+fn9/gICAgICAgYGBgYGBgoKDg4ODg4ODgX54cm1mY2BeW1xdYWttcXNyc3Z5foCCg4SEhISEhISDg4ODg4ODgoB9d3FrZWNlZ2dpam1wcXN4enp4dW5qaGhvcHBzdXZzbmxramtsbG5xd36BgoODhYWFhYaGhHtzcnh4dXBramtsbnJ3fH9/gYGAf359fXx8enh2c3JycG5tbXF0d3l7fXt4cnFybmxsbmxtbWtqZmRkZWlpaWhnZ2drb3Bwc3d6e3p2dHV1dHFxc3JuZV5cXFtfYWJlZ2pucG5raWxwcXNycHBwc3V0dHV4eHFtbm5saGZkZWZtbnBwcHBxcXJzc3Nzc3JycnJycXJycnJzc3R0dXV1dXh4eHh4eXp7e3t5dnR0dnZxbWloaGdmaWxtbGxoaGRiYGJmcHZ5enp7fX19f3+AgICAgICBgYGBgYGCgoODg4OCgoF/enRuaGRhXlxcXWFmbW9xcnN2eXx/gYODhISEhISEhIODg4ODg4OCgX54cmtkYWRmaGpqbXBydHh8fHp3cGpoaG1wcHFzcm9raWlqbGxsbnF4f4KDg4OFhYWFiIaCeXJxdHd1cGxqamtucnh9gICAgH9/fX19fXx6eXd1c3NycG5vb3J1eHl7d3Jta2toZ2ZoaWtta2hkZGNlaWpqaWhoaGhsbW90eHp8eXV0dXV0cnJzcm5lXlxcW19hZGZqbW9xbmtpbG9wcXBwcHFzdHN0dXl5cm1tbWxoZmRjZW1ucHBwcHFxcnNzc3NzcnJzc3JxcnJycnNzdHV1dXV1eHh3eHh5ent7e3p5d3d4eHRxbGtoaWxvcnRycm9sZ2JhYWNsdHd3eHp8fX1+foCAgICAgIGBgYGBgYKCg4ODg4KCgXx3cGpkYl9eXF9gZGhtcHFydXh7foCCg4OEhISEhISEg4ODg4ODg4SCf3hybGVhY2RoamptcXN2en19enhya2hobG9wcHFtamdoaGpsbGxucXh/goODg4WFhIWHhIB5cnFzdnRvbGpqa25yeH2AgICAf359fX19fHp6eHV1c3JwbnBvcXR2d3dybmlnZmRjYWRnam5raGRkY2VpampoamtraWpqb3R4enx3c3R1dXRycnNybmVeXFxbXmFlZmxvb3Bua2ptb3BwcHBwcXN0c3N0enlzbm1ta2dlY2NlbW5vb3BwcXFyc3JycnJxcXJycXBycnJyc3R0dXV1dXV3d3h4eHl6e3t7ent5eXp6d3RubWpsb3N1eHd3c3FqYmJiY2pwc3V2eXp8fH19gICAgICAgYGBgYGBgoKDg4ODgYGCfHVuaWNhXl9eYWJmaW5xc3R2eX1+gIKDg4SEhISEhISDg4ODg4ODhIN/eHJsZmFiY2doam1xdXh8fn57eHRsZ2hqbnBwbWtnZWZlam1sbG5xeH+Cg4ODhYWEhYWDgXt0c3R2dG5samlqbnJ5foCAf39+fn18fX18ent4d3Z0cXBvb25vcnR2dG1pZGRjYF9gY2dpbWtoZWRjZWlramhrbW1samtuc3d6fHdzdHV1dHJyc3JuZV5cXFtgYmVna25vcG5ra21vb3FxcXFydHZ2cnN4eHFtbGxqZ2ViZGZsbW1tbW9ucHFxcXFwcHFxcHBxcXFxcnNzdHV1dnZ2dnd4eHh5ent8e3t7e3x8e3t3dW5ubXB0d3h6enp4c2xkYmJjZmltcXN2eXp7fHx/f35+gICBgYGBgoKDg4ODg4OCgX95cGtnZWJgYGBiZGZrb3JzdXl+f4CCg4ODg4ODg4SEhISDg4KCg4ODg4F9dG1oYmBkZ2hpa3J2eX5/fn16dm5oZ2tucW1pZmViZGVoa2tsbnJ4f4KDhISEhIWFhYWCfnh2d3d1cGxraWpvc3h9f39+fn19fXx8fXx7e3l4dnRxbnBubm5wc3VzbmZgYGBeXV5jZmlsa2tnZGNmamtsbG9vbm5sa25xd3t7eHR1dnZ1c3NycW9nXVpbXmJmaGhrbnBvbWpqbXBwc3NxcXN1dnZ0c3h4cW5tbGloZWJlZmtsbW1tbm5wcXFxcXBwcXFwcHFxcXFxcnR0dXV2dnZ2eHh4eHl6e3x7e3x8e3t7e3h2cnFxdHd5eXt7e3p1cGlmY2JjZGZpbHBycnN0d3x+fX6AgIGBgYGCgoODg4ODg4KAfXZuaWZkY2FhYWJla25wcnV3e4CBgoODg4ODg4ODhISEhIODg4OEhISEgn12b2ljYmNnaWlrcXV5fYB/fnt2cGlnam1uamdjZGNkZWhsa21ucnZ9goOEhISEhYWEg4F/enh5eXVwa2lpam90eH1/f35+fn59fHt8fHx8enh2dHJvb25ubW5xc3JtZWBfYF5eXmJnam1ubGhkY2Zpa2xucXFvb21rbXF2e3t4dXV2dnVzc3NybmZcWlxgY2dqamxvcXBtaWpsbnByc3Fxc3V2dnJ0eHdxbm1ramllYmVka2xtbWxtbnBxcXFxcHBxcXJycXFxcXFydHR1dnZ2d3d4eHh4eXp7fHt7fHx8fHt7end1dXV3eXp8e3x8fHhzbmpnY2JgYmRnamtqa21yd3x9foCAgYGBgYKCg4ODg4ODgX56c25pZ2RiYWFlZmptcHB0eHt+gYOEg4ODg4ODg4OEhIWFg4ODg4SEg4OBfnZxbGZjY2hqa21ydnl9gYB/e3hxamZobG5qZWJiY2VlaGxsbm9ydXyCg4SEhISFhYOAgH14dnp6dXBraWlqbnN4fX9/fn5+fnx5eXp8fHx7eXd1c3Fubm5tbnBxcWxkYF9gYGBhZWptb3BtaGRjZmlrbm9ydHFvbmxrb3V7e3d0dXZ2dXNzdHNtZVxZW2FlZ2trbG9xcGxoaWpucHJzcXFzdXZ2cXV5dnFubGpqaWViZGJsbW1tbG1ucHFxcXFwcHFxcnJxcXFxcXN0dXV2dnZ4eHh4eHl5ent8e3t9fXt7eXl7eXh4dnl6e317e3t7e3Vxa2lmY2BhYmZmZmZnaW11e31+gICBgYGBgoKDg4ODg4OCfXdxbGhlY2FhYmdobG5vdHh6fYCCgYKDg4ODg4ODg4SEhYWDg4SEhYWDg4F9dnNsZWJlaGpsbnN4e3+CgYB7eXNqZWZqbmpkYGFjZWZobG1ucXN2fYKDhISEhIWFg4CAfHZ0eXl1cGxqamttcnh9f39+fnx8eHd4eHx8fnx7eHVzcW5ubm5vcHFwa2RiZGRiY2RqbXBwcGtnZGNlaGtwcXN3cnBvbGpudHt7dnR1dnZ1c3NycW1lW1laYGZoa2xscHFxa2hqaW1vcnNxcXN1dnZ1dXl2cW5ramloZWJjY2tqamtsbW9xcnJxcXBwcXFycnJycnJzdHV1dHR2dnd3eHh4eHl6e3t8fHt8fHx7e3x7enp7e3t7fHx8fHt6dnNwbGlkYGFjYWFfYGNlaG94e36AgICAgoKDg4ODg4ODgoB7dnFsamdkYWBkaWtvcnR2e32AgoOCg4ODg4ODg4ODhIWFhoSEhISFhYSEg356c2xmY2VnamxwdXp+gYKCf315c2tmZWhsa2NgYWNlaGxubm5vdHh+goODg4OEg4OEgoF8dHJ3enVwbGxtbm1xeH2AgIB/fXl1cnJ3ent8fXx6dnNwbm9ubm5xcm5rZWZmaGpsb3JzdXRwa2ZiYmVpbG9ydnp3cm5qaW50e3t2dHV2d3Ryc3NybGNaWVZfZ2ttbW5wcW9qZ2dqbXBzc3BxdHV4d3N0eHVwb2xqamhlY2Rma2lqa2xtbnBxcXFxcHBxcXJycnJzdHR1dXV1dXZ2d3d4eHh4eXp7e3x8e3x8fHx8fHx7e3t7e3t8fHx8e3p3dHJuamZjZWJeXFpbXmBibHV6foCAgYGCgoODg4ODg4OCf3p0b2xpaGZkZWhtcHR2eXt/f4GDg4ODg4ODg4ODg4OFhYWGhoaGhoWFhYWDf3x0bWZjZGdqbXF2e36BgoKAfXh0bGdmaGxrZmBhZGhqbnBvbW91e4CCg4ODg4SEhIOCfXdxcXd6dXBsbGxtb3J4fYCAgYB7dnBsbXR4e3t9e3h1cnBvbm5ubm9wb2tpamxxc3R2d3d4d3FrZmJjZWdqbnJ4e3lzbmhnbXR6enZ0dXZ3dHJzdHNsY1tZV19pbW5tb3BxbWlnZ2pucnVzcHJ1dnd1c3V4dXBubGtqaGVkZWdqaWprbG1ucHBwcXFwcHFxcnJycnN0dHV1dXV1dnZ4eHh4eHh5ent8fHx8fn19fX18fHx8e3t8fHx8fHx7enh4dHFsamdnY2BdW1tcXmBocXh9gICCgoKCg4ODg4ODg4J+eHJta2hnZ2dqbnN2eHl8foGBgoODg4ODg4ODg4OEhIWFhoaGhoaGhYWFhYOAfXVtZmNkZ2pvc3d9f4KCgoF+eHRuaGdpbGtoYmJmam1xcnBtb3V8gIKDg4ODhIWFgn95cm9vdnl1cGxsa2xucXh9gICAf3hzamZmbnV5fHx6d3Nwb29tbWxtb3Bwbm5vdHd4eHl5eXp3cmxmYmNlZ2ptcXh7fHVuZmVqc3p6dnR1dnZzcnN0c25lXlxbYWhsbm9vcHBtaWdoam9zdHJyc3Z3d3V0dnh1b21sa2poZmVmaGloamtub21vcHBxcXBwcXFycnJyc3R0dXZ2dXV2dnl5eHh4eHl6e3x8fH1+fX19fXt7fHx7e3x8fHx8fHt6ent1cm5samdkYV9dXVxeYGVud32AgIKCgoKDg4ODg4ODgnx3cWxraGdnam5zd3t8fH+AgoOCg4ODg4ODg4ODg4WFhYWGhoaGhoaFhYWFg4J9dW5nY2Vnam5yeH5/goKCgX55dHBqZ2psamhkY2Zrb3R0cW1vdHt/gYODg4OEhYWCf3hxcHB2eHVwbGxrbGxweH2AgH18dm9mYmJrcnl8fXt2cnFubW5tam1xcXBxcXV5enp6e3t6endybGZjY2VnaWxxd3t+eHBmY2hzeXl2dHV2dnNyc3RzbWZfXVxiZmpvb29wcGxoZWhqbnJzcXR1dnd3dXR2eHVvbWxramhnZWdoamlqa21ub3BxcXFxcXFycnJycnJzdHR1dXV1dXZ2eHh4eHp6eXp7e319fHx9fXx8fHx7e3t7e3t8fHp6fHt6eXd0cm5saGZkYF9fX19gZW53fYGBgoKDg4SEhISDg4KAfHdxbGtqaGhscnh7fX5/gICBg4ODg4ODg4ODg4SEhISFhYaGh4eHh4aGhYWEg3x2b2dlZmhrbnN6f4CCgoKBf3p1cGtoamttaWVjaG5zdXdybG1yeH2Ag4KChISFhYN+dm9vcXd5dm9ra2prbXJ5foGBgXxzaWFdXWZvdXt7eHRxcG9tbG1tbnBxcHBxdnt9e3t9fX17eXNrZmNkZWhqbHJ4fXx2bmZhZW94eHZ0dnd2dHR0dHJuaGFgXmFnam9wcnJxbGlmaWtwcnNzc3R3eHh1dXh5dm9sbGxraWRlZ2hqamprbW5wcHFxcXFxcXJycnJycnN0dXV2dnZ2dnZ4eHl5eXl6enx7fHx7e3x8e3t7e3p6enp6ent7enp8fHt5eXd1cW5raGZkY2NiYGBkbXZ9gYGCgoODhISEhIODgn96dW9tamppanB4fH6AgYKCgoKDg4ODg4ODg4ODhISEhIWGhoaHh4eHhoaFhYSDfHhwaWZlaGtvc3d9gYKDg4GAe3dybGppa25qZ2Vrcnd5eHRubW51fH+CgoKEhISEg311b29xdnl2b2tramtuc3l+gYGCe3FnYFtdZW51enp2cW9ubm5sbW9wcHFxcXN4fX19fX9/f316cmtnY2VnaWttcnd9fHZtZWBibXV3dnV2d3d0dXV1c3BqZWRfYmhsb3Jzc3JuaWhqbXJ0dHNzdHd4eHVzdnh1b2xra2tpZWdpampqamttbnBwcXFxcXFxcnJycnJyc3R1dXd3d3d2dnh4eXl4eXp6fHx8fHx8fX18fHx8e3t7e3t7e3t6enx8fHp7eXd2cm9samlnZWRgXmJrdH2BgYKCg4OEhISEg4ODfnl0bm1qampvdXp+gIGCg4ODg4ODg4ODg4ODg4OEhISEhYaGhoeHh4eGhoWFhIN9eXJrZmZnam9zeH6Bg4ODgoF9enVuamhqbWtpaXB2enx7dW9tbXJ8f4GEhISEhISCfHVycXF1eHZva2tqa25zeX6BgYF6cGhgXF5lbnR5eHNvbW1vbmxtb3BwcXJydXp9fn5+fn5+fHhxamdkZWhpa21xdnt7dmxkYGJsdHd2dXZ3d3R1dXZ0cGlmZWFkam1wc3NzcW5pZ2ttcnV0cnN0d3h4dXJ1eHVvbGpqa2lnaWttampqa21ucHBxcXFxcXFycnJycnJzdHV1d3d3d3Z2eHh6enh4ent8fHx8e3t8fHt7e3t6enp6enp6enp6fHx8e3p5eXl4c3FubGtoZWFeYWp0fYGBgoKDg4SEhISDg4R+eHNtbGtra3J3e3+BgYOEhIODg4ODg4ODg4ODg4SEhISFhoaHh4eHh4aGhYWEg355c2tnZmdqb3N5foKDhISDgX98d3BraGpsbWxrc3l7fHp1b2ttdHqAgYSEhISDg4J7dnRycXV4dm9ra2prbnN5foGBgHpxaWFeYGdvdHd0cm5sbW5tbG5ub3BxcHB1en1+f39+fn17dnBpZmRlZ2lrbnB2ent1bGRfYm11eXZ1dnd3dHV1dnRwaWdlY2Vqb3Fzc3NwbGloa2xyd3Vyc3R3eHh0cXR3dG9sampraWZoa21pampqbG1vcXBwcHBwcHBwcXJzc3R1dnd4eHh4d3d4eHp6d3h4eXt9fHx7e3p6e3t6eXx6eXl5eXt7e3t8fHt7enl8fHt6dnRycGxnYV5hZ3J8gIKCgoODhISCg4OCgX54cmtqa2xwdnt+gYKCg4ODg4ODg4ODg4ODg4ODg4SEhIaGh4iIiIeHhoaGhYSDf3t1b2hlZWhtcnh+goSEg4KAgHx3cmxpaW1ubG11fH59eXRvbG5yeH+ChISEhIOCgXt1dHZ0dXZ2bmxrbGtvdHp/goJ/e3JpY2JjaG9yc3NvbGxsa2tsbW5vcHBxcXV6fX9/f4B+fX12bmdjZGVmZ2ptcXZ5eXVsY19ia3V4dnV2d3Z1dHZ2c25pZ2hnZ2xvcHJ0cm5qZ2ZqbXF1dXN0dXh4d3NxdXdybmtramhmZmlqbWlqa2psbW9wcHBwcHBwcHBxcnNzdXZ2d3h4eHh3d3h4enp5eXh5e318fHt7enp7e3p5enp5eXp6enp7e3x8e3t7e3t7e3t4d3RzbmdhXmJpc3uAgoKCg4OEhIOEg4F+fHZwbGprbHF3fICCg4ODg4ODg4ODg4ODg4ODg4ODhISEhoeHiIiIh4eGhoaFhIN+enVwaGVlaGxxd32Cg4OCgX9+endzbWppbW9tb3Z+gH55dG9tbXJ4f4OEhISEg4J/eXV2enZ2dndua2prbW90eX6Cgn97cmljZGZqb3Fycm9sbW1sbGxtb3BxcXFxc3h9f39/f39+e3RuZmNjZWZoaW1ydnl5dG1kX2JqdHd0dHd4dnV0dnZzb2loaWlobW9wcnRzbmpoZ2pvc3Z1dHR1eHh3c3F1d3Jua2tqaGZnam1uaWpra2xtbm9wcHBwcHBxcXFyc3N0dHV2eHh5eXd3eHh6ent6eXt7fXx8fHx8fHt7enl4eXh4eXl6ent7fHx8fHx8e3t7e3p5d3VwaGFeYWp0e4CCgoKDg4SEhYWCgHx4dXBta2tscXd9gIGCg4ODg4ODg4ODg4ODg4ODg4OEhISGh4eIiIiHh4eGhoWEg356dXBnZWRnam92fIKDg4KBfnp2dnRtamltb29weH+Bf3p0b2xscnh/g4SEhISDgn13dHl9eXZ2d3BramtubnN4fYKCgHpzamZmamxucHBwbm5tbWxsbW1wcXFxcXFzd31/f39+f396c21lYmNlaGlqbXN3eXl0bWZfYWpzdnR1dnh2dXR2dXJuamlqampucHJzdXRuamlpbHF0dXNzdXZ4eHZycnd4c25ra2poZmdqb3FpamxsbG1ub3BwcHBwcHFxcXJzc3V1dnd4eHl5d3d4eHp6eXl6e3t9fHx9fX5+e3t6eXl5eHh6ent8e3t8fH19fHx8fHt7e3t4d3NqYV5ganR+gIKCgoODhISDg4GAenV0b2xrbW1zeH+BgoODg4ODg4ODg4ODg4ODg4ODg4SEhIaHh4iIiIeHh4aGhoSDfnt1b2dlZGZpbnV7gYODgoB9eXV2dW1raW1vcHF5f4F/e3Rva2xyeH+DhISEhISCeXZ0eX16dnZ2cW1sbGxtcnh9goJ/e3NqZ2drbG1wcHBubm1ubG1vb3FycXFycnR4fX9/f31+fXpybGViY2VnaWtuc3h5eXVuaGFgaXJ1dXZ4eXZ1dHZ1cW5rampsa25wcnN1dG5qampucnV1cnN1d3h4dXF0eHhzbmtramhmZ2pucGlqamprbG5wcHFwcXFxcnFxcnNzdXV3eHl5eXl4eHl5eXp6ent7e3t8fHx8fX17e3l5eXh5eXl6e3p7e3t7fHx8fHt7e3t7e3t6dWthXmFqdHyAgoODhISDhIOCgH14cW9sbGxucHR6foCBg4ODhISDg4ODg4ODg4ODg4OEhIWFhoeHiIiIiIiHh4aGhYSBfHZwaWZkZWltc3t/g4OAf3x2dHR1b2tqbW9wcnl9gX96dXFram92f4OEhISEhIF6dnZ6fXl1dHRxbmxtbW5zeX6Bgn98dG9sbG1tbW9wcG1tb21ubW5vcXFxcXBwc3h9f35+fn59eXNtZ2JjZWdqa29zeXt5c21mYWJqcnR0dXd4d3Z1dXVxbmtrbGxtb3FzdHRxbWtrbHB2d3Zyc3Z2eHh0cHR5eXNubGtraWVnaWxxaWpqamtsbW9vcXBxcXFycXFydHR2dnd4eXl5eXh4eXl4eHp6e3t7e3x8fHx8fHt7eXl2dXV1dnd6eXp6e3t8fHx8fHx7e3t7e3l0a2NeYWl0fH+Cg4OEhISEgoF+e3VvbWxsbG1xdXt/gYGDg4OEhIODg4ODg4ODg4ODg4SEhYWGh4eIiIiIiIeHhoaEg4B6dnFqZmRlam5yeX6Cg4B+enFvcnRva2trbXBzeH2Bf3p2cWxrb3d/hISEhISDfnp4eXl5dnN0c3JubG1tb3N5f4KCgX11cW5ucG5tb3BwbW1vbW5tb29xcnFxcHB0eX1/fn5+fnx4cmtnY2RmaGttcXJ4fHl0bmZiY2twcnR1d3h3dnZ2dXFtamxtbm9xcnN0dHFtbGtvcnZ4dnR1dnZ4eHRwdHl5c25sa2tpZWlqbHFpamtra2tsbW5wcHFxcXFxcnN1dXd4d3h5eXl5eXl5eXh4enp7e3t7fHx8fHp6enp5eHZ2dHR1d3h4enp7e3x8fHx8fHx8e3t8eXVtZGBhZ3N7foGDg4SEg4SCgHt1cW1ra2xsbXF3fX+BgYODg4SEg4ODg4ODg4ODg4ODhISFhYaHh4iIiIiIh4eGhoOCfXh1cmtmZGVpbXJ3fYGBfnt2bmxvcm9rampsb3J3fYGAfHZxbm1xd36DhISEhIJ9ent8eHVzcnJzcm5sbGxucnl/goGAfHZycnJzbm1vcHBubm9tbW5vcHBxcXFxcXR4fH5+fn5+fHhxa2djZWdoa25zdHp8eXRvaGRkbXBydHV3eHd2dnZ2cWxpam1wcXJzdHV1c29tbW90d3h2dHV2dnd3c3J0eXhybmxra2lnamxuc2lqbGxsamtsbm9wcXFycXFydHd3d3d2d3l5eXl6enl5eHp6ent7e3t8fHx8enp5eXh4d3Z2dnV2dnd5eXt7fHx8fHt7fHx7e316eHBkYGFmc3p+gYODhISDg4J+eXNuampra2xtcHd9f4CBg4ODhISDg4ODg4ODg4ODg4OEhIWFhoeHiIiIiIiIh4eGg4J+eXRybGZkZWdrcXZ8gIF9eXNsa21xb2tpam1vc3d9gYF8dnFtbHF4foKEhISEgX16fH14dHFxcXRxbmxsa25xeX+DgH55dnJ0dHFubW9wcG9ub21tb29wcHFycnFxdXl9fn5+fn58dnFqZmNjZmhrb3R3fXx5c25qZmZvc3N1dnd4d3Z3d3dxbGppbnBydHV0dnZzb21ucHR3eHZzdHZ2d3dycnR5d3FubGtraWlqbHB1aGlqbGxsbG1tb3FxcnJycnN1d3d2dnd4eXl4eXt7enp6e3t7fHx8fH19fHt7e3l5eHh3d3d3dXV0dXd5e3x7e3t7fHx8fHx8e3t4cGZhYWVxen5/goOEhIOCfnlzb2xoaGlpam5zeX6BgYKDg4OEhISEg4ODg4ODg4ODg4OEhYaGh4eIiIiIiIeGh4WCgH15c3JtZ2RkZmlwdHp+fnp1bmZnbXFuamhsbG5zdnuBgX12cm5scnh+goOEg4OCfnp7e3Zzb3BxdHBtbW1sbXF3gIJ/e3hzc3V1c29tbXBwb3Bwbm1ub29wcHJycnJ1enx+fn1/fXp2b2llY2RnaGxvc3l9fHdybGlnZ25ydHR2d3d3dnd3d3Fta2xvcXN1dHV0dnNwb29ydnh3c3N0dXV3d3NzdXh2cW9tbGpqamptcXdoaWpsbG1tbm9wcXFycnNzc3V3d3d3eHh5eXh5e3t7e3t7e3t8fHx7fHx8ent7eXl5eXh4dnZ1dXV2d3l6fHx8fHx8fHx8e3t7e3dwZV9fY254fH+BgoSEgYB6dW5raWhnaGlqcHV7gIKCg4ODg4SEhISDg4ODg4ODg4ODg4SFhoaHh4iIiIiIh4aHhYKAenVxcG1oZWVnaW5ze3x7dnBqZWRpbm9raW1tb3N1e4CBfXdyb2xwdn6Cg4SEhIOAenp5dnRwcHFzcW5rbGttcHZ/gH55dnR1d3d1cG5ucXBwcnFvbW5vcHBxcnJzc3V6fH5/fX59enZvaWRjZGZobHBzeHp7d3FsaWhqcHN0dXh4d3d2d3d3cm5sbW9xc3V1dXR2c3BvcHN3endzdHV1dXh4dHR3eXdwbmxsampqbG9xdmhpamxsbm9vcXJycnJyc3N0dnd3d3d5eXp6eXp8fHx8e3t8fH19fHp7e3t6e3t5eXl5eXl3d3V1dnh3eXl7fX19fXx8fHx7e3t7eHJpYF9jbHV7f3+Ag4OBfndza2dnZ2ZnaWtxd3yAgoKDg4ODhISEhIODg4ODg4ODg4ODhIWGhoeHh4iIiIiHhoeFgn96dXFvbWlmZmhobnN5eXZwamVjZWdubm1tb25wc3R6f4F9eHNvbG91fYGEhYSEg4J9e3l3dXJxcnNxbWpsa2xudXt9enZzdXd5eXZwcHBycXFzcW9tbnBwcHFycnNzdHl8f4B+fXx6dm9qZWRkZmhrcHR4enp2cG1raW1ydXV1d3h4d3Z3d3Zzbmxtb3FzdHV2dXZzcXBydXh6dnV0dXd3eHh0dHh6d29sa2xqamptcHJzaGlqbG1ucHBxcnJyc3Nzc3V3d3d4eHl5enp5enx8fHx7e319fn59ent7e3t7e3l5enp5eXh4dXV1d3d5eXp7e319fHx8fHp6e3t6dWxjYGRqc3p/fn+CgoJ9dm9pZWVmZWZpbHN4foGCgoODg4OEhISEg4ODg4ODg4ODg4OEhYaGh4eHiIiIiIaGhoSCfnh0cnBuaWZmaGhscnV2cm1mYmJkZmxtbm9xc3Nyc3p/gX14c29sb3V8gISGhYWDhH98fXt1cnJydHBsa2tqa25zeHl3dHF0d3t7d3Bwb3Jzc3Rxb21ucHBxcXJyc3N0eXx/gH99fHl2cGtkY2RlaGtwdHt8eHVwbWtqb3R3dXN2eHh3dnd3dXRubG1wcXN0dnZ1dnNycHN1eHp2dXV2eXl5eXR0dnh2bmxsbGpqamtvcnFpampsbG1vcHFxcXJyc3R0dXV4eHl6enl6enp7fHx7e3x8fHx8fHx7e3t5e3l5enp6enp6enp4eHZ3eHh4eXt7fHx9fXx8e3p6e3p0bWNgY2p0en5/gIKCgHh0bmdkY2NkZ2lwdHx/gIGCg4ODg4SEhISDg4ODg4ODg4ODg4SFhoWGh4eHh4eHhoaFgoB7d3Rwbm5qaGhpaWxwcnJtaGRiYWBjaW5wcXV5eXd2en6AfHhybW1xd36ChYaFhYSEgoCAe3VycXN0cGxqa2prbXF0dnRxcHR4e3p1cnBzc3V2dXBubW5ub3Fxc3FxcnV5fX9/f357eHVvamVjY2VobHF1enp4c29ubW9xdXh3dXd5enh4eHh3cmxqbXBydHZ3dXZ3dHJydnh8e3d1dXZ4eXp5dXV3eXRua2tra2trbGxvbmlqa2xsbW9vcXFxcnJ0dXV2dnh4eXt7e3t7fHx8fHx8fHx8fHx8fHx6enl7eXl5eXl5eXl5eXh4eHh5eXh5e3t8fHx8fHx8enp7enRuZmBgaHF4foCAgYF9dXBqZWFjY2Rna3N3foCAgYKDg4ODhISEhIODg4ODg4ODg4ODhIWGhYaHh4eHh4eFhYSBfnp2c3BubmxoZ2lpbG9wb2llY2BhYmRqcHJze4GCfXl6fn56dnFtbnF3f4OFhoWFg4KAgIB5dHNyc3RwbGpramprbnJzcm5uc3h7enVzcXV1dnZzcG5tb29wcXJzcnFzdnl9f39/fnt4c25pZWRjZmptcXZ7endwb25tb3N3enh2eXt6eXl4eHhybGptcHJ0dnd2dnh2c3R4en17d3V2d3h5enh1dXh5c21ra2tra2tsbG1saWpsbGxtb3BwcHFzc3V2dnZ3eHh5e3t7fHx8fHx8fHx8fHx8fHx7e3l5eXp5eXl5eXl6enp6eXl5eXl5eXt7e3x8fHx7e3x6ent6dnBqYWBlbnd9gICBgXxzbWdiYGFjZWhudnt/gYCBgoODg4OEhISEg4ODg4ODg4ODg4OEhIWGhoeHh4eHh4WEg4F9eHNxcG5vbGhnaWlqbWxrZ2RhX2JkaGxxdXh9f4F9e3+Bfnp2cm9ucnd/g4WGhYWCgHx8fXhycXR2dnBsamtqaWlscHFwbWxxdnp7dnN1dnl3dnJwbm1wcnJycnJzcnR2eXx+f39+e3dybmllZWVoa25yeHp5dnBvbm1vdXh6d3h6e3t5eXl5eHJrbG5wcnR1dnZ3d3V0dnl7fXt3dXd4eHl5d3V3enlybWtqampra2tsamppamxtbG1ub3BwcnN1dnZ2d3d4eHl7e3t9fXx8e3t8fHx8fHx8fHp6eXl5enl5eHh4eHp6enp5eXl5enp6e3t7fHx7e3p6fHp6e3p3cmxkYWZud3yAgICAenNsZl9eYWNlanB3fYCCgIGCg4ODg4SEhISDg4ODg4ODg4ODg4SDhIaGh4eHh4eHhYSBgHt2cXFwbm9taWhpaWlqaWhlY2BfY2Vqb3J2fHt7fXx+hIWAfHl0cG5yeX+DhYaFhYN+fH18d3Fxdnd3cGxqa2poaWtvcG5qa3B1ent3c3h5enh2cnBub29xcnJycXNzdHZ6fH9/f357dnFuaWZlZmlscHN4enl0cW9ub3F1eXt3eXt8e3l5enp4cmpsbXBydHZ2dnd1c3N1enx9end1d3h4eXh3dXh7eXFta2ppaWtra2xpaGprbG1tb29wcHFydHZ2dnZ3eHl5enx8fHx8fHx8fHx8fHx8fHx7enp4eHd3eHl5eXl5enp6enl5eXl6ent8fHx7fHt7e3t7e3t7e3pzbmdkZWt1en+Af395c2plYF9fY2lvdXyAgICBgoODg4ODhISEhIODg4KCgoKCg4OEhISEhYWFhYaGhoWEgoB9dXJwcG9ubWtoZ2hoaWllYmRjY2Jpa21wc3h9eXh8f4GGiYmHf3dwb3N5f4OFhYWFg4GBgn14cnF3enlxa2pqa2prbW5ubGlrcXV7e3h2eHt7eHdzcG9wcHJycnFydHR1d3l8fn9+e3l3cWxoZGRmZ2pucnZ3dXFxcW9wcnV6enh3eXt6eXl5enlzbW1wcXN1dXZ1dnZ0c3Z5e316d3d4eXh6eXh1dnp6c21qaWlpampqamhpamtsbW5vcHBwcXJ0dnZ2dnd4eXl6fHx8fHx8fHx8fHx8fHx8fHt6eXl5d3d4eXl5eXl6enp6eXl5eXp6eXp6ent8e3t7e3t7e3t7enVvaWVlanF4fX19fHdxaGNgYGBmbHR4foCAgIGCg4ODg4OEhISEg4ODgoKCgoKDg4SEhISFhYWFhoWFhIKBfnl0cXBwbm5ubWhoaGhpaWVhY2NjZGpsb3F0d3t3dHl7foKGi4iBeXNyc3p/g4WFhYWFhISFgXx2dHd7eHFrampqaGptbWtqaWxydnl5eXd4e3x5dnNvb3BxcnJycHJ0dHV3eXx+f358enZxa2dkZWZoam5zdnRzcHBwcHBydXp7eHd5e3p5eXl7eXJubXFzdHV2dnZ3dnRzdnp8fXp3d3l5eXp6eHZ3e3txbmtqaWlqampqaWpqa2xtbm9wcHBxc3R2dnZ2d3h5eXp8fHx8fH19fHx8fHx8fHx7e3p5eHh5eXh5eXl5eXp6enp5eXl5enp5enp6e3x7e3t7e3t7e3t6d3FsZmRnbnZ6e3t6d3FoY2BgYmhvd3p+gICAgYGCg4ODg4SEhISDg4OCgoKCgoODhISEhIWFhYWFhISCgH57dnRxcHBubnBwa2hnZ2hoZmJjYmJkam1xdHZ2enZxdHV1eoCHh4J8eHZ3fH+DhYWFhYSEgoKBfXh2d3t4cmtqaWloamtramlqbXN3eHh5d3h7fHh2cm5ucHFzc3JwcnR0dXd5fH5+fX16dHBrZmVlZ2lrb3N1cnFwcG9vb3N3fHx5eXl7enl5enx4cm1ucnR1dnZ2d3d2dHR4e319end3eXl6e3t5dnl8enJta2hpaWpqaWtqa2prbG1ub3BwcHFzdHZ1dHR1dnd3enx8fHx8fX18fHx8fHx8fHt7enl4eHh4eHl5eXl5enp6ent7eXl6enp7e3t7fHt7e3t7e3t7e3p4c25nYmRqcXd5eXl2b2pkX2Jma3N6fH+AgICBgIKDg4ODhISEhIODg4KCgoKCg4OEhISEhYWFhYWDgoF+fHl0dHFwcG9vcHFtaWZmZ2dmYmNiYWJpb3JzdnV2c29wcnB0eoKEgX9+e3h9f4OFhYWFg4GAf4B9e3d3e3lxa2poaWlrampqaWptc3d4eXl3eHt8eXdybm5wcXR0cnBydHR1d3l8fn18e3hycGpmZWVnaGxwcnRycHBwb29vc3h9fHp5ent6eXl7fHhxbW5zdHV2dnZ4eHZ0dnl7fX56d3d5eXp7e3p3eXx6cm1saWlpampoa2pramttbm5vcHBxcnR1dnV1c3R1dnh7e3t9e3x9fn19fHx8fHt7e3p6eXh4eHh5eXl5eXl5eXh5enp6enp6ent7e3t7e3t7e3t7e3t7e3hzcGlkYmZtcnV2dXJuaWViY2hudXt+gICAgYGBgoODgoKDg4WFg4ODg4KCgoKDg4SEhISEhIWFhYKAfnt4dnNxcXBwbm5wcW9nZWVmZ2ZjY2NhZGhtcHN3d3FqamxtcHJ2fIGDgoJ/fHx/goSFhoaFgX5/gX97eHl7d3Fsa2lqa2tsamxqa250eHp4eHd5ent4dnRvb3Fyc3NycXJ0dHV4en1+fXx6eHNua2dnZ2psbG9wcHBwcHBwb290en59e3p6e3t6ent7eHBsb3R1dXZ3d3d3dnV2eXx+gHp3eHh5e3x8enZ7fHhxbGpqampnZ2lraWtpamxtbm9wcHFzdHV0c3NxcXN1eHp6enx8fX5/fn59fXx8e3t7enp5eXl6enl5eXl4eHd3eHl6enp6enp6e3t7e3t7e3t7e3t7e3t7endxa2RgZGpvc3JwbWlmY2Nka3B4fH+AgICBgYKCg4OCgoODg4ODg4KCgoKCgoODhISEhISEhYWDgH16d3RzcXFxcHBwcHFyb2dlZWZnZmRjY2JhZmtvc3Z2dG1qa21wc3d7gYKDhIN/fYCDhIWGhoWCgX+AgHx7f313cW1ra2xra2trbWtrb3V4enh4d3l6e3h2c3BwcXJzc3JycnR0dXZ5fX5+fHp4cm5qaGdoa21ucG9vcHBwcG9ub3V7f357enp7e3p6e3t4cWxwdXZ1dnd4eHh1dXZ5fX9+end4eHl8fHx5d3x8eHFsa2praWdmaGtsbmlqamtub3BwcnN0dXRzcG1sbnF0d3d3eHp8fX5+fn5+fHx7e3t6eXl7e3l5eXl5eXh4d3d3eHp6enp6enp7e3t7e3t7e3t7e3t7e3t8eXRsZWBjZ2xubWxpZWJiYmZscnt9f3+AgIGBgoKDg4KCg4OCgoODgoKBgYGBgoKDg4ODg4ODg4B9eXZ0c3NxcHBwcHFyc3NwaWZmZ2hnZWVlYV9hZ21zdXd2cG1rbXBydnyBgoOFhYOCgYOEhYaGhYOCf318e36DfndxbWtrbGtra2ttbm9wdXh7eXl4eXp6d3ZycHBxcnR0cnJydHR1dXh9fn9+e3dxbmlnZ2hrbXBvbm5vb29vb25wdXyAfnt6enp6enp8fHdvbHF2dnV2d3h5eXR0dnl9f315d3h5enx8e3d2fHx4cGxra2poZmdpam5waGlqa25vcHByc3R1c3JtamhqbXBzc3V2eHt8fH19fn58fHt7e3p5eXp6eXl5eXl5eXl4eHZ4enp6enp6ent7e3t7e3t7e3t7e3t7e3x6dm5oYWBjZ2lpaGZiYmJiaG50fX1+f4CAgYGCgoODgoKDg4ODg4OBgYCAgICBgYKCgoKCgoGBfXp4dXNzcW5vb3BwcXF0dXBqZ2doaWhlZmZiXl1lbXN1d3ZwbGtucXR3fYODhIaHhYSCg4SFhoaGhIF9fHh5gIV/d3Fta2prbW1tbW5wcXJ0eHt6enh5enl2c3JwcHFydXVycnJ0dHV2eX1+f357dnJsaWZnaGttb25tbW9vb29ubXF2fIB+e3p6eXl6enx8dm9tc3V0dXZ3eHh3dHN2eX6AfXl3eHl7fHx7dXZ9fHdwbGpraWhmZ2lsb3FpamlqbG9xcXJzdHVzcW1oZ2Zoa29vcHJzd3d6fHx7e3x8e3t6enp6eXl4eHl5eXl5eXh4d3h4eHp6enp7e3t7e3t7e3p6eXt8fHx8fHt3cWhhX2JjZGVlZGFhYmVscHd+fn5/f4CAgIGCgYKDg4SEgoKEg4GAgH+AgICAgIB/f39/fXt4eHV0cXJwbm5vb3BydHV1cWtoaGlpaWhpaWNeXGJsdXd4d3FtbXB1eHyAhIWGiIiHh4SBg4SFhoWFgX57eXyEh4J4cm1raWttbWxwcnZ6end4enp4eHp7eXZzcXBwcHN1dHFxcnR0dXZ5fn5/fnp1cW1qZ2hpbGxraWtrbW5wb21ucXZ8f318enp6enp7fXt0b250dnN0d3d4d3Zxc3d7f358eHd5eXt8fHl0dX19eHFtampqZ2dnaGtwdWpqampsb3FycnN0dXJwa2dmZWRna2trbW5xc3Z6e3x8fHx7e3p6enp5eXh4eXl5eXl5eHh5eXl5enp6ent7e3t7e3t7enp5e3x8fHx9fXdxaGJfYmFhYWFiYmFiZm1zeX5+fn9/gX9/f39/gYKDg4OCgYKCf319e3t7e3t3dnV1dXV1cnFxb25ub29tbW5vcXR3d3Zya2dnaWpqamxrZ2BXW2ZxdXZ3cm1uc3h9gIKEh4iKiomIhYCChYSGhYWDgoGBgYaGgXlxbWtqbG1tbHB0fIKBeXh5enh4ent5dnRycXFxc3V0cXFydHR1d3p/f399enVwbGloaGpqamhnaGlrbHBwbXBzeHt+fXx7e3p6e3x+e3RvbnR2c3V3eHh3dXFzd3yAf3x5eHl5e3x7eXR1fH15cW1qampoZ2dobHN4ampra2xvcXJyc3R1cnBrZmRjZGVnZ2doa21ucXd5ent9fXt7enp6enl5eXl5eXl5eHh4eHl5e3t6enp6e3t7e3t7e3t6enl7fHx8fH19eHJqZGJhX19gYGFhYWJmbHR6f39+f3+Af317enl7foGCgoB/fn16eHZ1c3NycnBvb29vb25qa2tpaGhpamtrbW9ydnh5d3JrZ2doaWtqb25qYFVYZW91dndybm90e4CDhIaIiYuLi4mFf36BhYaFhYWFgoODiIeAeHBta21vcXBvc3p/gYB5eXl5eHh6e3p3dXJycnJzdHNxcXJ0dHV3en9/f316dW9saWdoamlnZWNlaGpsbW5vcXV4en19fHx8e3t8fX16c25udXd1dnh4eHd0cXN3fICAfHl5eXl7e3t4cnN6fXlxbWxra2lnZ2hsdHlqamxqbG9xcnJzdHV0cmtmZGNmZWZmZmdpamxvc3Z5en5+e3t6enp6eXl5eXl5eXl3d3h4enp6enp6enp7e3t7e3t7e3p6eXt8fHx8fHx5c2tkY2FfX2BgYGFhYmZrc3l/f35/gYB+eXVxcnJ6f4GBf3x6d3RycG9ubm1ta2ppaWlpaGZnZ2RjY2RlZmhqb3N4eXl3cmtmZmdoamtvcW1iVlZkcHZ3dnJucHR7gYWFhoiJi4uLiYV/en2DhYWFhIOBgYOJhn94cG1rb3F0dHN3fX99e3d6eXh3eHp8enhzcnNzc3J0cnFxcnR0dXh7gICAfnp1b2toZmhpaWZiYWRoamxsbXFzd3l6fX18fHx8fHx9fHpzbW92eHV2eHd4d3Nxc3d8gIB8eXl6eXt6enVucnp9eXFtbGtsaWdnaGt1eWhqamttcHJycnN1d3Z0b2tnZGdmZmZkZGZnaGltcXd5e3x7eXl5enp5eHh4eHh4eHh4eXl6enp6enp7e3t7enp6enp6e3t6fHx8fHx7enlybWlmYl9cX15eX2FiZ2x1e39/f3+Afnp0bWloanJ5fnx6d3Fvb21saWhoZ2dmZWRkZWRjZGRlY2BgYGFhY2dsc3d5eXdybGdmaGpoanF0cGVZWGRvdXd0cW9ucnd+g4OEh4qLi4qHhIN8eoCFhYODg4KChIeEfXZwbWxuc3d5ent+fHl2dnd2d3h4e3x6d3NycnJzc3JxcHBwcnJ1eXx+gH99eHNtaWZnaWlnZGBgY2dqbW5ucXZ4ent9fXx9fXx8fX59enNvcXV2dXd4eHh3dHFydn1/gHt4enp6e3t5cm1xen13b21sbGtqZ2ZnbHZ8aGpqbG5wcXFyc3R3dnVxbWlmaGdnZ2RkZGRkZWhscnV4eXp5eXl5eXh4eHh4eHh4eHh5eXp6enp6ent7e3t6enp6enp7e3t8fHx8fHt6eXNuamhkYF1eXFxcX2BlanR6f3+Af397dmxkYGBkbHZ4d3NvamhnZmZjYWFhYWBfXl5fXl5fYGFhXl9fX19fY2lvc3V2dXFsaGZnaGdpbnJza11bZW91dnVycG5vcnh9gISGiYqKiYeDg4F8foSEgoGBgoGFiIJ6dnBtbG5zen6AgH13cW1sb3J1d3d7e3l1cnFxcXJycnFwcHBycnZ5e36AgHx3cm1pZmZoaGVjXl5iZWttb29ydHh6fH19fH19fHx9fn17dXFxdXZ1d3h4eXd0cXJ2fYCAe3h5eXt7fHlybXF6fHZvbWxtbGtpZ2htdn1oampsbW9wcHFydHZ2dXJua2lpaGdnZmRkZGRkZWhtcXN3eHh5eXl5eHh4eHh4eHh4eHl5enp6enp6e3t7e3p6enp6ent7ent8fHx8fHt6dnJuamZhX15dW1tdXmNocHh+foB/fXhvZF1cXWJocHNwbWllYmFgXl5eXl1dXFtYWFlYWltcXl5eXV1fX19iZ2tub3FycGtqaGZmZWZobnNvYl9ocXV3dXJwbm5wc3l+g4WHiIiIhoKDhYF9gIOCf32AgIWIgnp2cG1sb3R8gYSDfHRvaGZpbnV3d3p6enZycXFxcnJxcG9vcHJzd3h7fn9/e3ZxbGhmZmhoZWNdXWJla25ucXV1eHp+f318fX18fH1+fnt4dHJ2d3V3eHh5dnNwcXZ9gYB7eHl5e3t7eHFscXp7dW9tbG1ta2ppZ2x2fWhqamxsb3BwcHFzdnZ1c29tamppZmZnZGVlZGJlZmptcXR2d3l5eHh4eHh4eHh4eHh4eXl6enp6enp7e3t7enp6enp6e3t5e3x8fHx9e3p4dHBsaGRhYF5bXF1fYWVtdn9+gH97dmtgW1tcYWdsbmxnZGJeXlxaWVtbWVlZWFRUVlRWVllaW1xcXF1dYWJmZ2psbW5wa2lnZmVjY2RpcW9nZGxyd3d1cnBvbm5xeH6Cg4aHh4aDgIOHhn5+gYJ+en2BhYeDenZvbWxwdH2BhoN8dW1mZWludnZ3ent6dXFycnJzc3Fvbm5wcnN3eHt+f356dXBrZ2ZmaGhmZF1dY2Zsbm9zdHV3en+AfXx9fXx8fX5+fHhzc3d5dXd4eHl2c29wdn2BgHt4eHh7e3p3cWxxent1b21sbWtqaWhobHV8aWtqbG1vcHBxcXN0dXZ1cW9vb2xramloZ2ZkYmRlZ2ltcXN1d3h3d3d3d3d3d3d3dnZ5eXp6ent7eHt7e3t6enp6enp6enp6ent8fH18e3l2cm9taWZkYl5cXVxeY2lvd3x/fnlxZl9ZWVtfY2ZpZ2NfXVtZWFlYV1dWVlVTU1NSUlVWV1hZVlhXWVtfYWRnZ2doam5raWdlY19gZGhucW5rcXZ2dnRxcG9vb3J4fICBg4WEgoB/goiJgXt9gH58foGHh4J6dG1sam92foOEg31zbGdoaWx1dXl6e3hzcXBwcnNxcG9ubm5xc3V4e39/fXp1b2lnaGlra2djYGBiZmtucXF0dnd5fn99fH58e3x+f39+eXRzdnd2d3l5enRvbG51fIKAe3h5eXt7eXZva3B5eHJvbm1ua2lmZWhsdXtpa2psbm9wcHFxc3R0dXRycnJycHBubWxpaGdlZGRkZ2pucXR1dnZ2dnZ2dnZ2dnZ2dnh4eXl6e3t5e3t7e3p6enp6enp6enp6e319fX17end0cXBua2djX1xdXFxfYmlwdnp5dmxiXVlZXF5iY2RhX1tZV1ZWWFdYWFdXV1ZXV1VXWVpbXFxXV1ZYWlxfYmVoaGZoamloZWJgYWFkaGxydHFzd3d3dXJwb29vcHZ7f3+BgoKAf36CiYyGfHl8fH18gYeHgHdwbG9vc3l/hIWEf3NpZWhrbXFzd3p7d3RxcHByc3JvbW1ubnFzdnh7fn58eHNvaWdnaGpqaGRiYWNobXBxcXR2d3l+f318fnx7fH5/f397dXR2dnZ4eXl6dG5sbnV8gYF7eHl6e3t4dGtpcHh3cm9ubm5sa2hnam51emlra2xub3BwcXFyc3N0dHN0dHV0dHJxcG1samdlZGNkZmpvcXN0dnZ1dXV1dXV1dXZ2d3d5eXl6e3p7e3t7enp6enp6enp6ent8fn59fXx7eHd1c3BsaGViX15dXFxeY2lvcnJvZl5bWlpdXmBgYF1bWlhXWFpbXF5eX19dXFtbW11fYGFiYF1bWllaWlxgY2ZoaGpoamdiYGJkZmZlaXF2c3Z4d3d1cnBvbm5vcnl9foGBf3x8f4KKjomBeXt8eXmBh4iCfHp7fn19foCEhoaBdGtlZmpubXBzeXx4dXJycnN0c29ra25vcnR3eHt+fnt2cWxpZ2doamppZWRkaGxwcXJydXZ4en5/fXx+fHt8fn9/f3t3dXZ3d3l5enhzbWxudXyBgXt4eXp7e3hyamlwd3Zxb25ubm5vbmtscHR5aWtsbm5vcHBxcXFzc3R1dXZ2d3d3dXRzcHBsamdlZGNlaWxvcXJ0dHV1dXV1dXV1dnZ3d3h4eHp6ent7e3t6enp6enp6enp6e318fH19fHt6d3d1cm9qZ2NgXl1bXFxfZGpubmliXFtcXF1gX15fXVtbXFpbXl5hY2NkZGNiYWFfYGNkZGVkYF5dW1tZXF1hYmVoamppZWFhZWdnZmFjcHZzeHh4eHZycG9ubXByeHyAgoB9enp/hYuPioN8fHt2eIGIioeEhoqLiYWBgoSEhYJ3bWVlam9ucHN5fXl1c3Jyc3RzcGtqbW9ydHd4e35+enRwbGlnaGlra2lkZmdrb3Rzc3N1d3l7fn99fH58e3x+f39/fHl2dnh4eXp6d3JsbG51fIKAe3h5ent7eXFpaXB3dXFvbm5ubnBwbGxwc3loamttbW5ub3FxcXJydHV1dXV3d3h4dnZ0cW9qZ2VjYWJkZ2lscXN0dHRzdXV1dXV1dnd3d3d3eXp6enp6ent7enp6enp6e3t8fHx9fn59fHp3eHd1cmtpZmNhX2BeXFxfZWppZV9eXF1cXF1dXFxdXl9gYGJjZWpqaWlpaGZkY2FjZmZoaWhkYmBdXFxcWlxfYWVoamhkYGJnbG1oXV1tdXV5eXh3dnRwbm1ub3N5fH5/f3x6eoGHjpCMhoJ/fHh8hIqNi4mLjo2MiIWDhYOFhHtyZ2Nma2xwdHt9eXRyc3JzdnNwbGttb3F0dnl5enl0cnBsZ2dpa2xsamdpa250dnZ1dHV3eHt/fn19fnx7fH5/f39+e3l4eHh5enl4c21sbXR8goB6eXp6enp4b2dpcHR0b25tbm5vcXFubG9zdmprbG5tbm5vcXFxc3J0dHR1dXZ2d3h4eHd1cm1oZWNhY2RkZWZucHJzc3N0dHR0dHV2eHh4eHd5enp7e3p6e3t6enp6enp7e3x8fH1/f358e3h5eHZzbmxsaWdkY15dW11gYmFhXmBeXlxcXFtcXmBkZWZnamtrcHBvbm5raWZkZGVoaGpsbWtoZmNhYF9dX19gYmVnZmJgZWtvcWtbWGl1eHh4d3VzcXFvbm5vc3l9e3t9fXx7gIeMkI+LhYF9eX6Fi4yNjImHhIeGhISGhIWGgXhsZWRmbHF0e3x4dHJzcnN1cm9ta2xvcXR2eHh4dnJwb2toaGprbW1samxwc3d3d3RydHZ4fH9+fX1+fHt9fn+AgH58enl4eHl6eXhzbW1udHyBf3p5enp6enhuZ2lxdHZxb25vcHFzdXNub3N1aWtrbW1ubm9xcXJ0c3V1dXR0d3d4eXh4eHh1cGtoZGJiYmBgYmlucXJyc3R0dHR0dXZ4eHh4d3l6enx8e3t7e3p6enp6ent7e3t8fX9/f318enh3c3JvbW5ta2hlX1xbXV1dXF5fX19eXl5eXV1jZmtsbm9vcXJ0dHNxcGxpZ2ZlZmdnaWxvbW1saGdkY2FhX19gYWJiY2Rqbm9vaFtWZXR3eHh3dXRycXFvbW1yen15d3yAf3x9hoyPkI2FgX1+gYiMjIuJhHt3e4GChYaGh4iFfnRtaWlvc3V6e3dzcnNyc3NwbWxrbHByc3V2dnV0cW5ta2tra2xtbW1tbnN2enp4dHJ0dnl+f359fX58fH5+f4GBf317eXh4eXp6eHNtbW50fIB+enl7e3p6d25naXJ1dHFycHByc3V4dnJwcnRoamlrbW5ucHFxc3RzdXR0dXV2dnd4eXl4eXdxb2pnZGJgXlxfZWtwcXFyc3R0dHR1dnd3d3d3eXp6fHx8fHt7enp6enp6e3t6enx9f39/fnx5d3Zzc29tbm5samRhXVtdXVtaW15fYF9eXl1gYGhscHFzdXV2d3h3dnRxbWppZ2ZoZ2dpbW9vb3BtbWloZWNfXl9fXmFkaW5ubGxnXVdkcnZ3d3h3dHJzcm5qaXB7fXh1fH9+enyFjZCOjYaCfoGFio6MiYeCdW9zfIKFhYiIiYaCenZwb3JzeHp7dnNyc3JzcW5sbGxucHJydXZ1cnFwbW1ramprbG1tb29xd3h7fXh1c3V3eX5/fn19fnx9fn5/f3+AfXx6eHh5ent5c21sbXR8gH56eXt7enp2cGdqcnd0cnFwb3FydHh4dXFxdGlra21sbm9wcXJ0dHV2dHR0dHd3d3d4eHh4d3ZybmlmYmBeXF9ka29wcHJycnJzc3N0dXV1dnd4eHl7fHx6ent6enp6enl5eHh3eHx9f4B9e3l2dHNzb25ubm1qYl5cW11eXFtaXF1eX15fYGNlbHJ1d3t7fHx8enp5dXJubGloZ2doaGpvc3R0dXNwbWxpZ2VjZWNgY2dtcW5rbG1mYGdwc3V4d3VybnBvaGZmb3p7d3R7fn57fYaMj4+NiISBhImNjoqFg4B2cXV9g4SHiIqLi4eDgHx5dXJ1ent3c3Fyc3Nyb21tb3B2dnRycHJwbmxra2hpZ2psbm9xcnV7fn18d3V1dnh6f4B+fH19fX5/f4CAgH9+fXl6eXp7eXlybWxtcnuBf3p5e3t6enZxZ2pydXZ0cnFwcHN1eXp4c3N0amxsbm1vb3BxcnR0dHR0dHR0d3d3d3h4eHh5eXZya2hkYV5cXmJpbnBwcXFycnNzc3N0dHR2d3d4eXt7e3p6e3p6enp7e3ZycnF1enx/f3t4dnRycXJvbWxramhiXl1cXlxcW1tbXF1gX2BiZmtyeXx+gICBgYB9enh0cW5raWhoaGhqbHJ2d3l5eHVxb2xqZmRlZWNnbXJvamlrdHZzc3BxdHd2cmtoa2xoaGp0e3x3dHt+fn1+hYuOjYyJhYSHioyMh4SCfnVzeX+BgYaIi4yMi4iGg4B6dnd6e3dycnJ0cnBub3F3fYKBeHBvcXBubWtqaGlnamxvcHFzd3x+fXp2c3N2eXt/gH98fn19fn+AgICAgIB9eXl6e3x5eXJtbG1yfIF/enl7e3p6dnBnanN2dXNzcnFwc3V7fHl1dHRrbG1vb3BwcXFydHR0dHR0dHR3d3d3eHh4eHh4d3NwbGllYF1dYmhucHBxcXFxcnJycnNzdHV2d3d4ent6eXp7enp6enp4cWtqbHF2en19enV0cXFwcXFtaGVkY2FfXVxdW1tcXVxdXGBhYWRnbnV7f4GCgoKCf3x5dXJvbWppaGlpaWxudHh7fHt7eXVxbWlmZGNmZ2xycmtnaG13en16dHBydXNvbW5sbGttcXh+fXp7gYOAfoGFi4yMi4uIh4qIiYmFhIJ8dnh8fXt9hImMjY2Ni4mHhYB5eXt6dnNwb29vb25zeoKHiYR4b29xcG5samloaWlrbXBwcnV4e3x7eHNvcnZ5fICBgH1/fX1+f4CAgICAgH15eXp7fHt5c25rbHN9gX96eXt7e3t1bWVqc3d0cnNycXBzdX1+enZ1dWxtbW9xb3BxcXJ0dHR0dHR0dHd3d3d4eHh4eHh4c3JvbGdhXVtgZm5wcHJycXFycnJycnJzdXZ2d3h5enp4ent6enp6eXJrZmZobXJ4e3l2cnBvcG9wcW1kYF9fYF5cW1tcW1xeX19eYGFhZGdtc3p+gIKCgYF/fXl0cW1tamloaWlqbm92eXx9fX58d3FuaWViYmdqcHVxamdncXl7f314cHFxbm9yc3FubnN3fX5+f4KHh4OAgYWJioqLjImJiYiJiYWEg3x3en97dniCiIuMjI2NioiGgnt6e3p3c25ramxucXiAh4qKgnVvb3FwbmtqaGlpamxucHFzdnl7e3p3cW9ydnl8gIGAfn99fX5/gICAgIGBfXl5eXx8fXl0b2prc32Bf3x7e3t8fHVsZGlydXRyc3JxcHN1fH17d3V1bW9tb3BvcXJyc3V1dXV1dXV1d3d3d3h4eHh4eHd1c3JvaWJbWV5mbnBwcnJxcXBwcXFzc3J0dXZ2eHp7enl6enp6enl1bmVhY2Vqb3N3dnRycHBwbm1sZmFcWVtaWFlXWVpZXWFjY2NiYmRlZ2xyeHt/gICBgX57dnFta2tramhoaWltcXh8f4CAf315dW5oZGJnbHBzc2xpZ2p6fn+Af3x1bWlnbXRycm9wdXyAgYGFiIuJhoGBhYiJh4qLioeIhoiHhYeFfnt/gHhzeYKHi4yNjoyLiYiEgHt9eXd0cGtpbG53gIeKioN6cW5vcHFva2poZ2hpbG5wcHN1e359e3VxcHJ2eXyAgoF9fX19fn+BgYGBgIB/enl7fXx8eHJva2x0foB+e3t7e3t7dGljanJ1c3Jycm9vcnd9fXx5dnVtb25wcXFzc3R0dXV1dXV1dnZ3d3d3eHh4eHh4d3Z0c3FrY1tZXmZucHBxcXBwcHBycnJycnN1dXV3eHl5eXp6e3t6eXJqY19fYWVqbXFzcm9vcG5ta2lkXVhVV1dWVVRWV1leZmhoaGZkZmVlZ2xxdHh9f4GBfXh0cG5ta2tqaWhqam5zen5/f39+fHdzbmdkZWxxcnJvZmJncH+AgH+Bh3xsaGpyeHVyb3N4gIKDhouNjYyJhYOGiYmIioyKhoSEhYOChoeBf4J+cG93gIaKi42Ni4yJiYaBfX55dXRxbmxudH2FioaAd3BvbW9wcXBramhnaGpsbnBxc3Z6fX16dHBwc3Z5fICCgH5+fX1+f4GBgYGAgH56enx9fHx4cm9sbXR+gH57e3t7e3tzaGRqcnRzcnJycG9xeHx8e3l2dW5wcHFzc3R0dHR1dXV1dXV2dnd3d3d4eHh4eHh3dnVzdG1kXFpeZW1wcHBwcHBycnJycnJxc3R1dXd4eXh4enp7e3p3cGhlYV5fYWVqbm9tbGxtbGxqaGFaVVRWVlZVVFRXXGNqbm9va2lnZGJkZmptcXd6fX16dnJvbGtra2tqamttcXV7fn9+fnx6d3FtZ2ZrcXRzcnJqZm53f4OGfoGJfXBscXl8enVzeH6Cg4aKjI6Ni4qIhYiLjIqMjYqHg4KDf36FiISAgnpvbnZ+hImLjY2Li4mHhH9/fnlzcnFxcXR7hIiFfnZwbW5ub3BxcG1samhpa2xucHFzdnp6enhzcHB0d3p+gIF/f39+fn5/gYGBgYCAfXt7fX58fHhyb2xudH6Afnt7e3t7eXFnZGpxc3NycnJxcXF4e3t6eHd2bnBxc3R0dXV1dXV1dXV1dXZ2d3d3d3h4eHh4eHd2dXRzbmRcWF1kbXBwcHBwcHFxcHBycnFydHR0dnZ3eHh6enp6enZuZ2RgXl5gYmZqbGppa2tqa2lmYFlVVFVXWFdVVlpdZW50dXVxbWhkYWFjZWltcHV6enh0cG9ta2tra2psbm5zd3x+gH9+fHh2cGtpam91dnV1dXFucnuAho2EgYZ9cnJ4fYF/eXl+hIWGh4yNjYuKioeHio2NjI2OjIaDgoR8e4OHhIOCeXBvdoCDiIuNjYuKiIeCfX5+eXFxcHF0eoGIiIB2b21tbW1vcHFwbWxramprbG5wcXN2e3t4dnNvcHR3e3+AgH9/f39+fn+BgYGBgIB9fHx+fn18eHJvbm90foB+e3t7e3t4b2dkanFzc3JycnFxcXh7e3p3eHZwcHJydHRzdHR0dnZ2dnR0dXV1dXd3eHh4dnd3dXR0dHFtZV1YWmNtcG9vbnBwcXFxcXFxcXFycnR0dXZ3d3h4eXh4dG1nY15fX2BiZWZoZ2hnaGhmZWBcVVFQU1ZXWlhZX2NqcXd5enZtaGVfXl5hZmprbnJzdXJwbm1ta2tra21wcHN5fH5/f316dXNvbmxyd319fHl5enV3gYOFj4uJhnxydXyBhIOCgYOFh4mJi4uJiYmIh4eLjIyMjo+Nh4OFhHt5goaGhIF5cnB2foOGioyMiYmEg354fH17cnBwcXqAiImFeW5ubW5ucHBxcnFvbW1qamxtbm9xc3Z6e3d0cXBydHh8gIGAf39/f35/gIKCgIGBgH18e3t9fXt2c29ub3R9f3x5ent7eXVuZWJqc3VycnNzcnJxdnp5eXh2dnFwcnJ0dHR0dXV3d3Z2dXV1dnZ2d3d4eHh2dnZ1c3R0cW1lXVdZYmtwcG9ucHBwcHBwcXFxcXJyc3R1dnd3eHh5eHdzbWdjXmBgYmNlZWVlZWRjY2JhXVlST05RVFZYWV5jaXF2fH9/eXBpZV5bW11gZmlqbW9vbm9ubW1sbGtsbXBzdnp9f39+fHdzb21vcHd/hoeDf3+AgIGCi4eLkZSIfHJ2gIaKioeGh4mIiYqLiYWHh4iJiIqLi4uOj46Hg4aEfXyDh4iDf3l0cnh/hYeKjIuJhX96d3N5fnp0cW9xfIaLiH5ybW1tbW9wcXNzc3FubmtqbG1ub3Fzdnp6dnNxcXJ0eHyAgYB/f39/foCBgoKAgoGAfnx7e319enZzb25vdH1/fHl6e3t5dWxjYmp0dHJycnJycnJ2eXh5eXZ2cHJ0dHV1dHV2dnd3dnZ2dnZ2dnd3d3h4eHZ2dnVzc3NwbGRcVVhiaW9vb3BwcG9vb29wcHBwcHBzdHR1d3d4eHt5d3RuaGNeYWFiZGRkY2NhYGBgXl1bV09OTVBSVFdcYmlwd3t/gYF8c2pkYFxdXF5iZmdoamtsbm1tbWxsbG5wc3Z4fX19fHp4dXFubXB0fIWNjomGg4OIiIKMjoyQlIl9dXqGjY2Pi4qNjYyMi4uIhIWFh4qIiouKio2QjoeDhoR/f4WHhoF9dnRzeoGFh4qMi4iDeXFvcXl9enVvbHF+h4eCd29ubW1sbW5ydHR0cnBta2psbW5wcnR3enl1cXFxcnR4fICBgH9/f39+gIGCgoGDgYB+fH19fX16dnNvbm90fX58e3t7e3l1a2JjbHNzcnJxcXJydHh5eHl5dnZwc3V1dXV1dXZ2d3d2dnZ2dnZ2dnd3eHh4dnV1dXNycnBrY1tVWWFpbW9vcHBwb29vb3FxcXFwcHJzdHV3d3h4e3p5dm9oY2FgYWFiY2NiYl9dXl5dXFlVTkpJTlFSV15lbnd9gIGDgn51bGRhX2BfXmBjZGVnaGlubW1tbGxub3J1d3l8fHp5d3V0b21tcHaAiI+RjYiEhYuMgYiSkI+Phnl3fomQkI+Oj4+PjY2NjImEgoSIjIqMi4mKjJCOiIWGg36BhYaEfnp2dXV7g4aIioyKh4R3bmxxeX15c2pqc4GEgnxybm1tbWxtbnJ0dXRzcW1ramxtbnBzdXh6eHRwcXFydHh8gIGAf39/f36AgYKCgoOBgH58fX19fXp2c29ub3R9fnt7e3t7eXVsYmVuc3JycnFxcnJ2enl5eXl2dnBzdnZ1dnV1d3d4eHd3d3d2d3Z3eHd3d3h3dnZ2dXR0cW1nXldYXmVrbW1ubm5vb25ub29wcHBwcXJ0dXV3eHh4eHh1cW1oZmNiYWFiZGJfXlxeXVpZV1VQTElJTlRcYmx1fYGCg4ODf3ZsZWNjZWNiXl5gY2RmaGxsbW5ubm9wc3Z4ent7eHd0cnFwbm5weYSLj5GPi4eKjY2Eh46TkYp/c3eCjJKSjo2RkpGOjY2MiISDg4iLi4qKiImMjoyHhoSBgISFhIB8eHd1dXuBiIqKioqIg3dubHJ5fXlvaG18g4J9dW5tbW5tbm5vcnV1dHJwb2xrbG5vcXJ0d3t5dXJwcHN1eH2AgYCAgIB+fYCBgoOCgoKBfnt9fXx8eXZzb21udX19e3p7fXx6dGpjZm91cnFxb3BwcnZ5e3p5eHh3cnR2dnZ3eHh4eHh4eHh4eHd3d3h5d3h4eHh3d3Z2dXVyb2lhXFpdYWdqbm9ubm9vbm5vb3BwcHBwcXN0dHd4eHh4eHZybmpoaGdjYWBiYmFhYF5dWVdVVFBNS0lNV19pcnuBg4SEhYSAd21oZmhqa2lkYF1fY2VmaGtsbnBxc3V1dXV2dnZ0dHFvbW1ubnR9houQkZCNio2Rj4eHjJGSjH1zeoaOkpGNjJGTko6LjIuJhoOEiIqLioqIiIuMioiGg4CChYaEgX15eHd3fIKIioqKioiEfG5qcnh4cGlndIKFgHp0bm1tbm5vb3Bzdnh2c3BvbWxsb3BxcnZ4e3l2c3Fxc3V4fYCBgICBgX9+gIGCg4KCg4F+e3x8fHx5dnRvbW51fX17e3x8enlzamVocHVzcXFvcHBydXl7enl4dnZ1d3Z2d3h6enl5eHh4eHd3d3d6enp4eHh4eHd3dnZ1dXNwa2ReWl1fZGlsbm9vb29ubm9vcHBwcHBxcnJ0dnh4eHh5d3NwbWtqaWZjYGJjZGJgX1tYVlVTUU9OTVBbZW95foOFhYWEhH93bWhmam9xbmllYV9hZGRkaWtuc3R0dXV0c3Nzc3FxcHBubW1weICGio+SkY6NkJKRioeLkJKOgHmAh5CTkY6MkJOSjYuLi4iGg4KGiYqKiomJiYuKiYSAgIOHh4WDgH18e3h9g4iKioqKiIR+cGhtbmpiYmd5hIN/eXNwbm1ubm9ucHR3eXh0cW5tbm5vcHFydXh7eXZzcXFzdXh9gIGAgIGBgH+AgYKDgoKDgX57fHx8fHl2dXBtbnV9fXx7fHx6eXJqZmt0dXNxcW9wcHJ1eHl6eXh2d3Z2dnZ3d3l6enp4eHh4dnZ3d3l6enl5eXh4d3d2dnV1c3BqZV1bXV9jaGpsbm5vb25ub29wcHBwcHBxcnN2eHh4eHp3dXBvbWtqaGRjZGRiYV9dWVZUVFJRUFFRVWBrdH+BhISEhYSBfXVsZmdrcHNybmplYF9iZGZnam5ydXN0dHNycHBwb29ub25tbXF6goWIjpOTkY6RlZONiYqOkIuDgIOJkJSRjYuOkZGNjY2LiIeDg4aIiouKiomIiomHgn+AhIiJh4aCgoF/e32DiIqKioqIhX9za2hiXFlda3mCf3t5dG9ubm5tbm5wdHd5eHVybm5ubm9wcXJ2eXx5dnJxcXN1eH2AgYCAgYGAf4CBgoOCgoOBfnt7e3x8eXZ2cm1udX1+fX19fXt4cmpnbXZ1c3Fxb3BwcnR3eHp6eHd4d3d3d3d3eXl6enl3d3d3d3l5enp6enl5eXh4eHd2dnZzcGxnYF1dXmBiZmlsbm9vbW1ubnBwcHBwcHJzdHZ3eXh5eHh2c3Fubm1raWdnaGNgXlxWVFRTU1NVVlhcZ3J6gIGDg4ODg4F+d25mZmpydnRxbWtjXl5gY2dpbXFzc3JycG9ub25sb25vb25scXuBhIeOk5SUk5WWlZGLiYmKhoOEh4uQlJGNjI+RkZGSkI2LiYeGiIqLjIyMiomJh4aBfoGHi4yLioiIh4N/goaHiIqIh4eEf3lyZVxYW2Vye356eXZyb3Fxbm1sbXF1eHl3dHFubm5ub3Bwcnh8fXt3dnR0dHZ5foCCgIGBgYCAgIKBgYGDg4F9e3t7fHx5d3RybXB2fX59fH59fHhza2hxeHZxcHBwcHFxc3h4eXp5eXl3d3h4eHh5eXp6eXd3d3h5enp6enp6eXl5eHh4d3Z2dnRybmljX15eX2JiZWptbW5tbW5ub29wcHBwcnN0dnd4d3h5eXd1c3Fwb21raWloY15dXFZTVFVVWFtdYGZwen+BgoODg4ODgn95cWdlaXF2eHVxb2plYGFjZ2hsb3Bvbm1qa2tsa2xubm9wb29ze3+Dho6UlpeYmJuZlI2IhYOAf4WJjpSWk5CNjpGUmJuZlJKOioiHio2PjouJh4aGhYSFhoiOj4+Ni4uLiYeGiIeHiIeHhoR/fXhsZmVudXt7enV3dXFydXVxbWxtcnZ5eXd0cW5ubm5vcHFyd3t9e3h2c3N1d3l+gYGAgYGBgICAgoGBgYODgX17fHx9fHl3dXJtcnh9fn18fX19eHRsaXJ4d3FwcHBwcXFydnd5enp5eXd3eHh5eXl5enp5d3d3ent6enp6enp5eXl4eHh3dnd3dXRxamZiYWFhYWBiZ2tsbm1tbm5ubm9vb29xcnN1dnd3eHp6eHZ2dHJwbm1paGRiX11bWFZYWVpdYGNnbnZ+gYGCg4ODg4KCgHlzamZob3Z7eXRybmplZmdoaGhrbWppaWdoam1sbGxucHFwcXd7f4OGjpSXmZubnJqWj4mEgH1+houQlpmXkY6NkZabn56bl5ONiYaHi4yLioiGhoSDg4aJi46Qj42Ki4uLjIqJhoWGhYWFg399fHFtc3yAfnl3dHd1c3N1dnNtbG1yd3p7eXRxbm5ubnBxcnR3e3x6eHd0dHZ4en+CgX+AgYGAgICCg4OBg4OBfXt9fX18end1cm9zeX1+fXx7fX15dGxqdXl2cHBwcHBxcXFzdXl6enp6d3d4eHl5eXl6enl3d3d5enp6enp6enl5eXh4eHd2d3d2dXNsaWVkY2BfXl9kZ2tsbW1ubm5ubm5ubnBxc3R2d3l5enp5d3VzcXBubGdlYmFdXFxYWVpeX2JjaW51en5/gIGDg4ODgoOCenRsZmhudHt8d3RxbGtsbGpraWlqaGdoaGdsb25tbG5wc3R2eX2Ag4aPlZiZm5ycm5iRiYSAfYCIjJGYm5uUj46Sl5yfn5yalpKMh4WHiImJh4WFhIKCh4qNjo2NjIqKioyLjIiGhIKCg4WEf3t6dG54hId/dnN1eHl1cnN0cm1sbXJ3ent5dHFubm5ucHJ0dXZ6eXh4d3d3dnh7gIKAfoCBgYCAgIKDg4GDg4F9e319fXx6d3VycHR6fH59fHp+fXpzbW14enVwcHBwcHFxcHF0eXp6enp4eHh4eXl5eXp6eXh4eHl5eHh4eHp5eXl5eXl4eHd3dXd2dHBsaGhkYF9fX2JkZ2ptbm5ubm5ubm5ucXFydHV3eHp7e3p4eHRxbm1pZmNfXVtZXF1eYGFkZ2txd3p8f4CAgYKCgoKCgoF8dG5mZmtyeHx6d3Bsb3JvamxqaWlpampubnBvbmppcHN1eHl7gIKDho6VmZucnJ2ZlpCIg4B/g4iOk5mfn5qSkZSWmpubmpiVlY+JhYSDhoiFg4KEgICGjI6OjYqJiomJiouMiIaDgICChIR+e3t2cXyGh392dHZ9fHdycHNxbWxuc3h7e3d0cW5tbW9xcXN0dnh4d3Z2dXd1d3yBgoF/gIGAgICBgoODgoODf3x7fH1+fHp2dXJwdXt9fn18fH59e3Jvcnt8dHBwcG9vcHBwcXZ5enp6enh4eXl5eXt7enp5enl5eXl4eHh4enl6enp7enl5d3d1eHh3c3FuamZiYV9fYGFlaW1ubm5ubm9vb29wcHJ0dXd4ent8enh0cWxqZ2NiYFxbWVpcX2JlZ2tudnp+fn6AgIGBgoKCgoKCgXx1bmdlaG1ze3p4cnB0dnRua2poaGppaGxtb3Fwa2hscnd5e36Cg4KGjJSanJydnJeSjYqFhISGiY+Vm5+gnZiVlJOTk5aVlJSUkYuFf32AhYSDgoKAgIeNjo2Kh4eKioqKjIyLh4N/foGDgn17fnl1e4ODfXVzd3+Ae3FvcnFtbG5ydnl6d3Rxbm1tbnBwcHByc3FxcHBzdXZ4fIGDgn+AgYCAgIGCg4ODg4N/e3p8fn58eXZ2c3F2fH5+fXx+fn57c291fXx0cHBwb29wcHBydnp6ent7eXl6ent7fHx7e3t7eXl5eXp6enp6eXp6ent6eXl3d3V4eHh3c3BtaWZjYF9dX2NnbG1ubm9vcHBwcHBwcnR1d3d5enp1cm9raGZiXlxcWVpaXWBiZmpscXN6foF/foCAgYGCgoKCgoKBfXdvaGVlanB4dnh4eX1+fHVxcG5ramloZ2dpbm5qaGhwd3t9gIKCg4SKkpudnJ2dl5KLi4qIh4iKkJednp6em5eUko6PkpGQkZGPi4V+eHeAgYODgoKDiY6Ni4eEhIiKiomKi4qGgn5+foJ/fX2AfHh5fX16dnR6goV/dHBycW1ubnF1eHl2dHFubWxtbm5sbG9wbmxtbW9xdXd7gIKBf4CBgICAgYKDg4ODg397en5+fnx5d3Z0c3h9f359fX9/f3t0b3d9e3NvcHBxcXJycXN2enp6fHx5eXp6e3t8fHx8e3t5eXl5enp6enp5e3t7fHt6eXd3dXh4eHh2c3BtaWZiXlxdYGZsbW5ucHBwcHBwcHBydHV3dnh5d3FuamZkYV5aWlpYWl1fYmRrbnF1eX2AgYB/gICBgYKCgoKCgoF9eHBpZGVqb3V1eH2AhISDfHh3dXJta2hkY2RoamlpaW11e31/goKBgomQmp2foJ2YkYqLjIuLi4yQmJ6dm5qamJaRjo6QkI6MjY2KhH10cXd8gYODg4aMjYyIg4OFiIeHhoeIiYWCfn5+gn9+f4B/eXZ5enl6dXyEh4F2cnBxbm5vcXZ4eXV0cW5tbG1sbGpqbG1ta2xsbm90dnp/gYB/gIGAgICBgoODg4ODf318f39+fXl3d3V1en+Afn1+f39/e3VzeX98c25wcHFxcnJxc3Z6enp8fHp6eXl6ent7e3p6enl5eXp6eXh7e3p7e3p6e3t5eHd3d3d4eHd2dXFtaWVhX15fY2hrbW9ub3Bwb3Byc3R1dnZ0dHNwbGhlYV1aWFhaXF1eYWNmam9zdnp9f4GBgICAgIKCgYGBgYGBgH94cmplZ2pscnN5gYSHh4iGg4J/e3dwamJjY19fY2prbnB0eH2AgYF9gI2ZnZ6enpiQi4yOjY2NjZGYnZ2YmJiZmJSPjo+Pjo2NjoqFf3VubXF4gISGiY+Nh4WEhYSCgYGDhIaGhIB/foCBgoCAgH15d3V6foB6f4OGgHhzcXFvb3Bxdnp5dHFvbW1tamtram1sbW9tbm5vcnR1eXx7fX6BgoGAgYKCg4ODg4KAf3+AgH99enl4dnZ7gIB+fn5+gH98d3V9gXpyb3BwcHFzc3N0eXt7e3t7enp5eXt7e3t7eXp6e3t5enp6eXt7e3t7enp6enl5eXl4eHh4eHh2cnBsaWVhYF9hZWltbm5vb29vcHFycnR2dnJwbGllYl5cWFZWWFxeYWNlaW1ydXl7fX+AgYGBgYCAgYGBgYGBgYGAf3l0bWZlamttc3yFh4eIioqIh4eFgnx0a2lnYV5iaGtua21scXl9fXd5h5ecnp6dmZGMjY+Pjo2OkpidnJiWmJubl5COjo2Mi4uMiYaBeXRtbHOAhouNjYiDgoKDgX59fH+Ag4ODf399gYKCgoOCfnt4dnqAgn5/gYF/eHRzcnFxcXJ2enl0cG1ra2tqa2xsbm5tbm1ubm5xcXJ2eHh6fYGCg4CCgoKDg4ODg4GAgICAf356enl3d3yBgH5+f3+Af3t2d36Ce3NxcHBwcnR0d3l8fHt7e3t6ent7fHx8fHx6e3t6enp7e3p5e3t7e3t7e3p6eXl6eXp6eXl5eXd0c3BtaWNgXl9jZ2xtbm9vb29wcXJzdHR0bWplYl9bWVdXVlhaXWJmaWtuc3l6fH5/gIGBgYGBgICAgIGBgYGBgYB/e3VvaGVrbXF0eoKFiIqLi4qJioqHg395dnBoZGZpamloaWlrc3p8dXWDlJuenpyak46OkJCPjY6Sl5ycmpWYnJ6ZlI+MioiHiYqIhoJ/fnd0eYSJjo+Jgn18f4B/fHx7foGDhISBgH6BgoKEhYR/f3x6fIGBgH59fHx5dXNzcnJydHh6eXVybGtqamprbGxubWxsbGxtbW5tb3N1d3h7gIKDgYOCgoSEhISDgYCAgICAf3t7enl5foGAfn5/f4B/eXV4f4J8dHFwcHBydXV5fX99enp7e3p6e3t8fHt7e3l6ent7eXp7enl7e3t7e3x8e3t7e3t5eXl6enl5d3Z2cnBsZmBdXmFlbG1tb3Bwb3BydHR0cm5pZWJfXFZXV1hYW11gZWttcXR4fH1/gIGCgYKCgYGAgICAgYGBgYGBgH99dXFrZ2tzd3d5e4OJjY2LioqMioiIh4aAem5qaGxsZWZpa2pxeXtydIGSmp2cnJqTkY+QkI+Nj5KXm5yalZicnpuWkYuJh4WIiomHg4KDgn2BiIyPj4h/enh9fX18fHt+goSEhYOAgYKCgoOGhICCgH19gYB/fHp5enl3c3Ryc3R3eHt7dXBrampqamtrbm5tbWxramtqampscHJ0d3h/goKCg4KChISEhIOCgYGAgIF/e3t7fHl/gYF+foCAgH94dHh/gXpycHBwcXN1dnt+f3x5eXt7eXl7e3t7e3t6ent7e3t5enx7ent6enp6fHx7e3x7e3t6enp6enp6end1c3BrZWBfX2RqbG1vcHBvcXNzdXRwa2VfW1lXVlZYWlxeYGZscHN3en1/gYGBgYKCgoKBgYGBgYGBgYGBgYGBgHx4cm5vcnt/fnt5gYuQjouIi4yLi4qMjYqIfW9obmxiXmNpa3F5eHFufJGanZ2cmpCUkZCQjY6OkJSZmpmYl5qbmZWRjImGhYiJiYiFhYiJiYmKjY6OioF6eHp9fn5+gICEhIWFg4GDhYSCg4SDg4WEgH5/fn16eXl5enp2dHNzdHd8fXlzb2xtbWtramtub3Fwb25sa2poaWpqa3BzeH2BgoGCg4OEhISEhIKBgIGBgH56e3t7en6BgH9/gYGAf3hzd4CCe3FwcHFyc3R3fH9/fHl6e3t6ent7e3t7e3p6enp6ent7fHx8fHt7e3t8fHt7e3t8fHp6enp7e3t7enh2c21nYl9dYWVnaWprbG9yc3NzcW1oYVpYWFhYWFtfYmVobHJ1eX1/gIGBgYGBgoKCgoGBgYGBgYGBgYGBgYGBfXpzcXh9goWEgH+GjJKQjIiLjIyMi4uMj5CNfnBwcGJZXGVtcnp7c2x3jZqdnJuYkJSUlJKPj4+PlJiZlpWWmJiXlJGLiIaGiImIiIeGi4qLjIuOj42Ign14eHt7fH6BgoSGhoaFg4WGhIODg4SFh4R/fHx5eHp6e3l5eXd0dHR1eX19d3JubW1sa2tsb3FzdXd1dHJwb25tbWlqbG9zeH6AgYKDhIWFhYWEgoGBgYF/fHp7fHt8gIKAgICBgYF+d3J4gIF6cXBxcnR0dXh8gH99eXt7e3x8e3t7e3t7enp6enp6fHx8fXx8fHx8fHx8e3t7e3x8e3t7e3t7e3t8enh1cGpjYF5eYWRmZ2hpbXBxcXBtaWNdW1pbXVxcYWVpbXBzeHp9f4GCgoKCgoKCgoKCgYGBgYGBgYGBgYGBgYF/e3Z2fYKFh4WEg4iOk5CLiIqKi4uKio2PkpKGdnNzaF5cYGpzfH11bXWKmJybmZePlJeXlpORj5GWmZmWk5OWlpWSjoqIh4eHiIiIiIeLjIuLjI6Pi4WDf3l5e3t6fYGDhYaIiIaFhoSDgoOCg4WFgXx5eXl4e318end4dnZ1dXV4fHt0cG9sampra25xdHZ3eXh4eHVzcnJybmpqbG91e36BgoOEhYWFhYSDgoGCgn98e3x+fX6CgoGAgIGBgX10cHZ+gHlzcnJzdHV1eH2Afnx7fHx8e3t7e3t7e3t6ent7e3t8fH19fHx9fX19fHx7e3x8fHx8fHx8e3t7e3x7eHZybWZjX15eYWNkZWZrbW9vbGlkYFxcXF1fYWJnaW5zdHh7fH+BgoKCgYGCgoKCgoKBgYGBgYGBgYGBgYGBgX56eXl/goaHhYSFiY+TjoqHiYmKjIuKjY+Rkol5dXVuZF9gZnJ7fXZuc4mXmpual4+UmZiZlpSSk5eYmJWTkJOTko6MioeHh4eIiYiIh4qMjYyLjIqGg4F+eXp7e3t9gIOEhoiHhoeEgoGCg4CChIF9eHh5enp7fXx6eHh3d3Z2dnh5eHFwb2xqa21tbnF0dnl6fHt5d3d1c3NwbGpqbHF3fYGCg4SGhoWFhYOCgYODgH58fH9+gIODgYCAgYGBfHNudHyBenV0cnR1dXZ5foF/e3t8fX17e3t7fHx8fHt7e3t6ent7fHx8fHt9fX18fHx8fHx8fHt7fHx8fHp6fHt6eXRuamZjX15eX2BhYWVoamlmZF9dWltcX2FlZ2xwdHh5fX6AgIKCgoKCgoGBgoKCgoGBgICCgoKCgYGBgYB/fnp8f4KChoeGhYeMkJKPioaGh4iKioyOkJGSint2dnhvaGRmdH6AeHB0iZWZm5uWj5SampqZmJWVlpeVk5GPkJKQjYuKiIeHh4eJioiIjI6OjoqIhYKAfXt5enl5en2Ag4OEhoeIioaBgYGBf4CCf3p5eXt6e3x+fXt4eXh3dnN0dHV0cW9rbGtucW5vcXV5fH1+fXx6eHh4eXdybGhobHJ7gIKDg4aGhoeEg4OCg4KCfXt8fn+BhYKAgH+AgYB6cW50fX55dnVzdHZ2dnl+gH58e3x8fXt7e3t7e3x8e3t7e3p6e3t8fHx8e319fXx8fX18fHx8e3t8fHx8e3t7e3x7d3JtaWViYF1dXV5eYWRlY2JgXl1bXV9iaG1vcnZ6fX5/gIGBgoKCgoKCgYGCgoKCgYGBgYGBgoKBgYGBgH9+en+DgoOGh4eGh4uQkY6KhIOEh4eKjpCSkpKLfXl4fn54b211gIF4cHOGk5iam5aPlJqampqalpWVlZSSj46Oj42Li4qIiIaGhomLioqLjI6MiYeGhH97eHp5d3Z5e4CBgIB/g4eLiIOBgYF/gIJ/enl5enp7fX59e3l5eXh2dHFwcnFvbm1vcHNzcHB0eXx/gIB/fnx9fXt+gHx0b2lnbHd+goOEhoaGh4WEg4KDg4F9fH1/gYOFgoCBf4CBgHpwbHR9fHh1c3R0dnZ2en6Afnx7fHx+e3t8fHt7fHx7e3t7enp7e3x8fHx7fX19fX19fXx8fHx7e3x8fHx8fHx8fHt5c29rZ2RgXV1cXFxeYWJgX19eXl5hZGhuc3d6e31/gICCgYGCgoKCgoKCgoKCgoKBgYKCgYGCgoGBgYGAf319g4SDhIeHhoaGiY6PjomDgYGDhIiOkZSVlIyAe3uChIJ7dHmBgXhvb4GOl5qbl5KUmpqZmZmWlJOTkpGOjIyNjIuLiomJhYWFiYuKiYiKjIuJiIeHg315e3l1c3Z5fn99enl9hImKhoSCgX+Bgnx6eXt6e3x+f3x6eXh4eHVzb25wcG9ucXJ0dHRyc3d7foCBgYCAfn9/foGCgXx1bGdocXuBg4SGiIeHhYSEg4KCgH1+f4CBhISCgIF/gIKAem9rcnx8d3VzdXV2dnZ6foB+fHt8fX97e319fHx8fHt7e3t6ent7fHx8fHt9fX1+fn19fHx8fHt7fHx8fHx8fX18enp0cm5pZWFeX1xcXFxfYV9fX15gYmVobXN3en5/gICAf4GBgYKCgoKCgoODgoKCgoGBgoKDg4KCgYGBgYB/fH6Dg4SGhoeGhoWHjY6OioWAf4CBho6TlZiWjYJ7fYKGh4J8eoKBeGxse4uWmpuYlZWampmYl5STkpGQkI6Ki4yMjIuMi4mFhYWJi4qJiYqJiYmIiImFfnp8enRzcnd8fnx4dXiBiYqIh4OBgIOCenl5enl7fX5/e3l5d3V1cnBubnBvb3BydHR0dHR1eX1/gYGBgYGAgIB/goKDgXtza2dud3+DhIaHh4eFhIWDg4KBf3+AgYKEhIKAgYCBgoB6cGtye3x3dnR2dnZ2dnp+gH58e3x+f3t7fHx8fHx8e3t7e3t7fHx8fHt7e3t9fX5+fX18fHx8fHx9fX19fHx8fHp6eXd2cm1pZGBcXFxbXFxeYF5eX2FlanF1eHt9gH+AgYGAgYKCgoKCgoGCgoKCgoKCgoKCgoKBgoKBgYGBgX1+g4SEg4aHiIaFhYWKjo6KhoB8fX6AjJOXl5aPgn5/g4mMiIOAhIF3aGd0hpSam5mZlpqamZiUkpGPjo2OjoqJiouLjIyMiYWFhYqMi4qIh4mKioqJiYd+eXp6dnRzdnl8fXp3d3+HjIuKhYCAgn53ent5ent8f4B8eXp4d3Rxbmxsbm9wcXJ1dXV1dnd6fYCAgICCgYCBgYGCg4SEgXpwaWlxfYKFhoeIh4eGhYSDgoGBgIGCg4WEgYGBgYGBf3pxbXZ9fHh1dXZ2d3Z3eX5/fnx9fn5+e3t8fHx8fHx7e3t7e3t8fHx8fHx8e319fn59fXx8fHx8fH19fX18fHx8e3t6eHh0cG1pZmJgXVxcXF5hYWFjZmxxdnh7fn+BgIB/gIGBgoKCgoKCgYKCgoKCgoKCgoKCgoGCgoGBgYGAfYKIhYSEhoiHhoaGhYmNjoqGgXt8fX6HkJiYl5KGgICDh4yOiIKFg3lsaHKFk5iamJmYmpqamZWRjouKi4yMiomIiYmKjIyJhYaHjI6Mi4iIiIyMjIyLiYJ8fXx5d3Z2eXx9enh2fYaMiomGgYGBfXh4eXl5e32Af3t4dHNycW5raWptcHJxcnV1dXh4eXt+gICAgIKBgYKCgoSFhIaEgHZsZWx4gISGh4iHh4aFhYSCgYGCg4KEhYSBgYKCgYF/enJvd359eHZ2d3d4dnd5fn99e3x7fHt7e3x8e3t7e3t7e3t7e3x8fHx8fH19fX19fX19fHx8fHx8fX19fXx8fHx8fHt6eXZ1cW9samZhYF1dX2FkZWlscXd5e36AgH+AgH+AgYGCgoKCgoKBgoKCgoKCgoKCgoKCgYKCgYGBgX9/h4uFhISGh4eHiIaEhomNioaBfHt8fIGOl5mZlIqDgYOGi46KhIaGfXNsc4WRl5qXmZmampqZlZGOi4uKioqJiYeHiIqMjIqGhoeMj42MiYiJjI+MjYyLhoKAfHl5eXh5fH57enp/hoqJiIWEhYaBfHh3d3h6fX9+enVxcW9ua2ppbG9xcnFzdnd3eXl6e3+AgICAgoGBgoKChIWEhoWCem9maXN/hIaHiIeHhoWFhIKBgoOEg4SFhIGBgoKBgoB7dHR6fn14d3d3d3l3d3l+f3x5eHZ1c3t7fHx6enp6e3t7e3t7fHx8fH19fX19fXx8fX18fHx8fHx9fX19fHx8fHx8fXx5d3d0cW9saWRjX19gY2Zna3B1enx9fn6Af4CAgIGBgYKCgoKCgoGCgoKCgoKCgoKCgoKBgoKBgYGBgIOLioaEhIaHh4eIhoSFh4uKhoN8e3p6fo2XmpqWjYaCgoWKjYuGhod/dG50g5CXmZeYmZubmpqVko6LiomKioqIhoaIioyMi4aGh46Qj4yKiouNjoyLiouJh4J9enl6enp8f39/fYKHiYmHhoWIiIaAe3d2eHl9f314dHBxbmtramxucXNyc3R3eHh4eXp7foCAgIGDgoGCgoOEhYWGhYV+c2dlbnuCiImIh4eGhYWEg4SDg4SFhoWEgYGDg4KCgnx1dn6BfXl3d3h4eXh3eX5/fHd0cnBte3t7e3p6enp5eXp8enp7e3t7fX19fX5+fXx9fX19fX18fH19e3t8fHx8fHx8fHp6e3p3dXFua2djYmRmaWxwdXx9f39/f39/f3+BgYCAgoKCgoKCgoKDg4KCgoKDg4ODg4KCgoGBgoKChouJhIOGh4iIiIiGhYWGiImIg358e3t9ipabmpqWioOCg4eJh4eIhX10b3SDj5aYmZmam5ubm5iTj4yJiYmJioiFhYaJjI2LiYmKkZORjo2OkJGPjYqKiYmIhYB7e3p5eXuAgYOEhoiKiYiGh4uLi4eDe3V1d3h8e3ZzcXBtbG1ucHN0dHR2d3l7e3x8fHx+gIGBgYKDgoOEhIWGh4aGh4R4amNpd4OGh4mIh4aFhoSEg4OChIaHhYODg4ODg4OBfnl6gIN+end2dXh4dnd6f4B7dGxqaml7e3t7enp6enl5ent7e3t7fHx9fX19fn59fH19fX19fXx8fX17e319fHx8fHx8e3t8fHp4dnRybmtqamxvcnd5fn6AgIB/f39/f4GBgICCgoKCgoKCgoODgoKDg4ODg4ODg4OCgYGBgYKGiYmIiIiJiYmJiIaGhoaHiIiEgX16en2KlJmcnJmNgn+BhIeGh4mFfXJtcoCNlpeYmJqbnJycmpSRjYqKiomJiISEhYmMjIuKioyTlZOQj5GSko+MiomIiYiGgn15eHh5fIKEhYWFhoeHhYWHiouLjImCenZ1dnd2dXFxcG5vcXJ1dnZ2dnh5en19fX19fX6AgYGBgoOEhISFhoeHh4eJhn9vZWZwfoWIiYiIh4aGhoWEg4KGhoeGg4ODg4ODg4F/fX6EhYB6eHd2eXh3d3uAfHVsZ2hpaXt7e3t6enp6eXl6e319fHx9fX19fX1+fn18fX19fX19fHx9fXp6fHx8fHx8fHx7e3x8e3l3eXd1cnBwcnV3enx/f4CAf35+fn9/gYGBgYKCgoKCgoKCg4OCgoODg4ODg4ODg4KBgYGBgYaJi42MiouLioiIiIiHh4aFh4aDfnp6foqUmZycm5CGgYKDhoaIioZ9cGtvfYyVl5iYmpydnZ2alZGNjIuLiomHg4OFiYyMi4qLjpOVlZKRk5OTjouJiIiJiIaDfnd0c3Z7goaHhYSEhYaFhISHiIqMiomCfXh4c3NxcXJxcHJ0dXd3d3p5enp7fX19fX19foCBgYGCg4SEhYeHh4eHh4iIgnRnZWt5hImJiIiHh4aGhoSEhIeHiIeFg4ODg4ODgoCAg4WFf316eHd6enl4enx1bGdpa2lpe3t7e3p6enp5eXp7fHx9fX19fX19fX5+fXx9fX19fX18fH19e3t7e3x8fHx8fHt7fHx8e3t7enh1dHR2eHp8fn9/gIB/fn5+f3+BgYKCgoKCgoKCgoKDg4ODg4ODg4ODg4SEg4GBgICBiIqOj46KjI2LiIiIiYiJhoWFh4N/eXh/jJSYmpyck4qDgoKFhomKiH1wa299jJWXmZianJ6enZqXko2Mi4qJiYaEhYWJi4yMjI2RlJeVlJSVlZOOi4mIh4iIh4SAdXBvcXmCh4eFg4SFhYSDgIKDh4mJi4eDf3pxcHBzdHJzdnZ3eHd7fHx6e3x9fX19fX1+gIGBgYKDhYaHh4mGh4eHiIiEeWtkaHaDh4eIiIeIhoaGhYSFiIiKh4WDg4ODg4ODgYGGh4SAfHt5eHt7enl4eG5oZmxrbGx8fHt7enp5eXl5enp8fH19fHx+fn5+fn59fX19fHx8fHx8fHx6ent7enp8fHt8fHx9fXx8enx9fXt5eXt8fn5/gICAgIB/f39/f4CAgICBgYKCgoKCgoODg4ODg4ODg4ODhISDgoKBgIGIjJOQjYqLjIuKi4uKiYiGhYWHhoB6eoWPlJaZm5yZj4aDhIWHiYuIfG9scX6Nl5iYmJmcnp+enJaSj5COioiJioeHiIiKioqMj5OUlpWWlpeWk46LiYiHh4WFhYB1bGpsdoGIioaDg4SDgYB9e32Ch4eKi4iFfnJwcXJ0dHR3eHh6eX1+fXx8fX5+fn5/f3+BgICAgYSGh4eIiYmIiIiHhoV9b2VlcoGFh4iIiIiHh4WFhYaIioqHhYSEhISEhISDg4WIg4B9e3t8fHx6eHdxa2tra2tsbnt7e3t7e3p6enp6ent7e3t7e35+f39+fn19fX18fHx8fHx7e3l5eHl6ent7e3t9fX5+fHx7fX5+fnx9fn+BgIGBgYCAgIB/f39/f39/f4GBgoKCgoKCg4ODg4ODg4ODg4OEhIODg4GAgYmPko+MiYqMi42Ojo2Mi4eFhYWGg4B/iJCTlZaZm5yVi4WFhomKi4h8cG5xfIyZmpiYmZudnp2alZKQkpGOjI2Mi4uJiYqKiouPkpWVlZaYl5WSjouIh4aGhYSGgXpvaGZsdX6EhIODg4J/fXl1c3aAhomJiYiBd3V1dnd4eHp6ent7fX59e3x9f39+fn9/f4GAgIGBhIeIiYqKiomJiYiHh4FzaGVte4OGiImIiIiIhoaFhomKioeFhISEhISEg4ODhoiDf318fH19fHp3cWpqb3Bub3Byenp6ent7enp6enp6enp7e3t7fn5/f35+fX19fXx8fHx8fHt7eXl4eHp6e3t6en19fn59fXx+f39/fn5/gICBgoKCgICAgH9/f39/f39/gYGCgoKCgoKDg4ODg4ODg4ODg4SEg4ODgoGEi4+PjYqJiouLjZGQjpCQioaEhYeHhIWLkpOUlZaZnJqQh4aHiouMiHxycHJ5ipibmZeXmpycnJiUkpGUlJORkZCQj4yLjIuKjI+Rk5WVl5iXlZKPi4iHhYWEhIaDf3NnYmVqcXmAg4SDgX96eXl1dXyDh4aIiIV8eXd4eXp7fHx7e3t9fn18fX5/f35+fn5/gYCAgYOEh4qKi4uKiYmJiIeHhHlsZWhzf4aIiYiIiImHhoaHiYqLh4WEhISEhISDg4SIiYR+fH19fn59enVtaW1xcnBxcXR6enl5enp5eXp7enp6ent7fHx+fn9/fn59fX19fHx8fHx8enp5eXp5enp6enl6fX19fX5+fX2AgH6Af4CBgYKCgICAgICAf39/f35+f3+BgYKCgoKCgoODg4ODg4ODg4ODhISDg4ODgIaMjo2LiomKiYuMj4+SlJSNiIWFiYiGiI2Rk5OTk5ianJKKiIiKjY6IfHRydXuJl5yal5eZm5ybl5OTk5eWlpSTk5ORkI6OjIqMjpGSlZeXl5aUlI+LiIaFhIOEhoaCdmdiZWVocX2ChIOBf3t7fHp3fIGDhoeIhn97d3p7fX9+fX18fH1/fX19foCAfn5+fn+BgICCg4WHi4uMjIqJiYmJiIaGfW5nZW57hIiJioqJiYeGhoeKi4uHhYSEhISEhIOEhYiJhX59fn5/f4B5cGlqcHN0cXJ0dnl5eXl5eXl5enp6enl5ent8fX5+gIB+fn19fX19fXx8fX17e3t7enp6enp6eXp8fH19fX5+foCAgIGAgIGBgYGAgH9/f35+fn9/fn5/f4CAgYGCgoKCg4ODg4SEg4OCgoSEhIKDg4OFi4+Ni4uKioqJioqOj5OWlpKKhYSIi4qMj5KUlJOTlJebl46Ih4qNjol8dnh7foiWnJiXl5mampmUlJOXmZmZlpaUk5OSkpGQjo2OkJKVlpaVlJSTj4uGhIOBg4SHh4V4aGZsaWdud3+Cg4B+enl5eHh7gIOCg4SFg3x6eX18fXx7e3x8fX59fHx+gIB/f39/gICBgYKDh4mLi4uJiYmKioqIh4l/b2dkanWCiImKiYiJh4WGh4qMioaEhISEhISEg4WHiIiDf39/f4CBfnVsa21wcnR0dnd6eXl5eXl5eXl6enp6enp6e3x9fn5/f35+fX19fX19fHx8fHt7e3t6enp6enp5enx8fX19fn9/gICBgYGBgoKBgYGBf39+fn19fn5+fn9/gICBgYKCgoKDg4ODg4ODg4KChISEgoODg4ePkYuIi4mKiYmIiIyPlJiYlI6Hg4iNj4+PkpWUkpKUl5uZkImHioyOiX50d36Dipebl5aZmZqZmJSUmJmcnZaYmZaTlJSTkpOQj5CRk5SVlZKSkpKPjIeEgoKEhIeIhHdqanFva2xxeoGBgH55dnd4eHh4enx8foGCf3x7fX18fXx8fHx9fn18fX+AgICAgICAf4CBgoSHi4uLi4mJioqKioiIiYJ0Z2NncX+GiIqKiYmHhYaHi4yKhoSEhISEhISDhYeJiIN/f4CAgYB4b2ttb3J1eHl7fH54eHh4eXl5eXp6enp6enp7fH19fX5+fn59fX19fX18fHx8e3t7e3p6enp6enl6fHx9fX1+gICBgYKCgoKCgoKCgYF/f319fXx9fX5+f3+AgIKCgoKDg4ODg4ODg4ODhISEhISCg4ODiJGPioeLioeEiIOBh5CWm5qUkIiCh42Sko+TlZSSkpSXmpqTjYmLi4yIgHRxeIGJlJuZlpqbnJqZl5aZlpaenZycmJWUlJOUlZORkpOUk5OUkpKSkpCMiYaDgoSGiIiEeG9wdHNubXF6gH99e3h1dXd3dXR0c3R3fX+BfXx8fXx9fHx8fH1+fXx9f4CAgICAgH9+f4GChIiMjY2Li4qKioqKiIeIhHhpY2Vue4SJioqJiYeFhoiMjIqGhISEhISEhISEh4uKhICAgIF/fHFrbG9ydXh6e35/gHh4eHh5eXl5enp6ent7ent8fX19fn5+fn19fX19fXx8e3t7e3p6enp6enp6eXp8fH19fX6BgYKCg4OCgoKCgoGBgX9/fX18fH19fn5/f4CAg4OCgoODg4ODg4ODg4OEhISEhIKDg4OKko+JhouKhoSIgH2EkJmbmpWQiIKEjZKRkJGTlJSUlJeampWPi4uKi4iAdW1ye4WRm5uYm52dnJuZmZiRl56hoJ6alZOTlJSUlZSUlZSTk5OUk5GSkI2KhoOChIeIiIV6dHZ2dG9ucnuAf3x7e3d1dXR1dHJwb3N6fn9/fXx9fHx9fXx8fX59fH6AgICBgYCAfn5/gYKEiYyNjYyLi4uKioqIh4iFe21kZGt5hIqKi4qJh4WGiYyMiYaEhISEhISEg4WJi4qFgYGAgn53bGttcHR3eXt9f4CAeHh4eHh4eXl5eXp6e3t7fH19fn59fn9/fn59fXx8fHx8fHt7enp7eXp6enp6e3t7fHx8fYCBgYGCgoKCgoKCgYF/fn17e3x7e3t8fH6AgICCgoKCg4ODg4ODhISDg4ODhISEg4ODhIuRjoqGi4qJiIiBfYSQmJmZlZGJgYOMkpGPkJKUlJWWmJqbl5CMiouMiIJ5cW1zfYyanZubn56fnpqYl4+eoKGgnZiVk5KSlJWWlpWVlJOTk5STkpKQj4yIhoWGiIiIhn95e3p2cnBze4KDgHx4d3NvcXZ1c3BtcXh/gIB9fH19fH19fHt9fX19f4CAgICAgH9/f4CAgoWJjI2NjYuKioqKiYmIiYd+b2ZjaniCiYqLiomGhYaJjIyKhoSEhIWFhYOEhImMiYWAgIF/eG5pa29ydXl8fX9/gIB4eHh4eHh5eXl5enp7e3x8fX5+fn1+f39+fn19fHx8fHx8e3t7e3t5enp6ent8fHx8fHx9f4GBgYKCgoKCgoKBgH9+fHx7e3t7e3x8foCAgIKCgoKDg4ODg4OEhIODg4OEhISEg4OFi5GOioiNi4uKiIN/hI+XmJeVkYqCgYqSko2PkZSUlZeYm5uYkYyKjIyJg357dXR4hpadn5+fn5+emZaWlZ2foJ+cmJOQkZKUlZaYl5aUk5KUlJOSkJCPjYqIh4aIiYmIg39+enh2dnmBhISAfHp3cmxudXd1cG1xdn2CgX57e3x8fHx8e319fX1/gICAgICAfn5/gICChYmLjY2Ni4qKioqJiYmKiIBzaWVpeIOJiouKiYaFhomMjIqGhISEhYWFg4WFioyJhYGBgX1xamttcXR3e31/f3+AgHh4eHh4eHl5eXl6ent7fHx9fn5+fX5/f35+fX18fHx8fHx7e3x8e3l6enp6e3x8fHx8fH1+gIGBgoKCgoKCgoF/fn58fHx7ent7fHx+gICAgoKCgoODg4ODg4ODg4ODg4SEhISDg4WLkI6Li46MiomJhIGDjZSWlZORi4KBiZKRi42Qk5SWl5iampiTjYyMjIqFgX96dHSAkpyhop6dnpyYlpeVmp2fnJqWkpCRkpWWl5iXlpaVlZaVlJGOj4+NjImHiImLiomFgn96enp8gIOBfnx7eHNta25zdnVycHF0e4GDgnp4eXp8fHx7fX19fX+AgICAgH99fX1+f4GFiYuNjY2LioqKiomJiYqKg3htaGp4g4iLi4qJhoWGiYyMioaEhISFhYWDhYaKi4mFgoKAeG1qbW9ydnp9fn+AgIGBeHh4eHh4eXl5eXp6e3t8fH1+fn59fn9/fn59fXx8fHx8fHt7enp7eXp6enp7fH19fHx8fX5/gYGCgoKCgoGBgH9+fnx8e3p6e3t8fH6AgICCgoKCg4ODg4ODg4ODg4ODhISEhIODhYuQj4yMjo2Jh4mGgoKLk5STkZGLgoCIkZCLi4+SlZeXmJqamJSPjYyMi4eBf3x2dH2OmqCgnp2enJmXmJSanZ6bl5WSkZGSlZWWl5eWl5eXmZaVkY6Njo2MiomKi4yMi4aEgHx8fYCEg4B8e3t5b2hqbnJ0dnV0cXN4gIWFfHh3eXt7fHt9fXx8f4CAgICAfn19fH1+gYWJjI2NjYuKioqKiYmJiouFfHBsbHeCh4uLiomGhYaJjIyKhoSEhIWFhYOFiIqLiYWCgn90amtucHR4e39+f4CAgYF3d3d3d3d4eHl5enp6ent8fn5+fn5/fn5/fX19fX18fH17enl6enp6e3t6enp6e3t8fH1+fn+BgYGBgYGBgIB/f359e3t7e3t7fH19fn5/gH+BgYKDg4ODg4ODg4ODg4OEhISDgoKFjJGPjo+Pjo2LjIqEg4mPk5KQkI2EgYiPjouMjpCVlZeXl5iYlJCPjY2LioaAfHl4fomWnJ+enp2amJiYlZmbm5mVlJSTlJWVlZWVlpWXmJmbmZeSjo2Ojo2NjI2PkJCOioaCgICCg4WDgH9/fnxxZWNucXN2eHh2dXZ9hIeBeXd5ent8ent7gICAgIB/f39+fHt8fH+BhIiNjo6Ni4uLi4uKioqKioiCd29tdoGHjIuKiYaEh4mNjImGhIWFhYWFhIWHiYuIhYOCeW9rbW9xdXl/f4CAgYGAgHd3d3d3d3h4eXl6enp6e3x9fX5+f35+fn99fX19fXx8fXt6eXp6enp6enp6enp6e3x8fX5/gIGBgYGBgYGAgH9/fn17e3t7e3t8fX1+fn+Af4GBgoODg4ODg4ODg4ODg4SEhIOCgoWNk5CPkJCQkI6PjIWEh46SkZCQjYWDiIyMioyNkJSVl5iYmJmWkpGPjYyKiIF8e31/hpGYnJycm5mWlpaVlpmYl5WUlJWWlpWVlpaVlZiZnJuamZKPjY+Ojo6Oj5GSkZCMiIOBg4WEhoOAgIB/enFmW2lucXV3eHVzdXqCiIR8eHp7fXx5e3t+gH9/gH5+fX16ent8foGFiY2Pj42LjIyLi4qKioqKiYV7cm91gYiMi4qJhoSHio6MiYaEhYWHh4eGhYaJi4iFgn5za21wcnR4fYGAgYGBgYGBd3d3d3d3eHh5eXp6enp6e3x8fn5/fn9/f319fX19fHx9e3p5enp6enp6enp6enp7fHx9foCBgYGBgYGBgYCAf39+fXt7e3p6e3x9fX5+f4CBgoGCg4ODg4ODg4ODg4ODhISEg4KCho6SkJGRkZGRkJCNh4OFjI+Qj4+Nh4WIi4qJi4yPk5aXmJiYmZWSkZGPjIuIgX1+gYCEjJSZmJiZl5WVlpWUlZeWlZWWlZaWl5eWlpWVmJialpiak4+Pj46Ojo+Qk5STkY2JhIOEh4aEgX+AgH55cWNRW2pvdHd2dXNxd4CHhoF/goSFgn59e3p9e35+fX17e3l4eXt9gISIjo+PjYuMjIuLioqKioqJh391cHR/iIyLiomGhIeLjoyJhoSFhYeHh4aFhomKiIWBem5rb3J0eHuAgoGBgYGBgoJ3d3d3d3d4eHl5enp6enl7fHx+fn9+gIB/fX19fX18fH17enl6enp6eXl6enp6ent8fH1+gICBgoGBgYGBgIB/f359e3t7eXl7fH19fn5/gIGCgYKDg4ODg4ODg4ODg4OEhISDgoKGjpORkZGRkpGQkY+Ig4SMjpCPjo2Ih4mLiomKjI+RlZeYl5mYlpKRkI6OjYiBfoCDgYOIkJWWl5iWlJSWlZOVlpWVlZaXl5eZmZaWlZWXmJmXm5uVkY+Ojo6OkJGUlpWRjYuHh4eHh4J+f4CAfnhvXkhHZmxzdnZ1c3F1foaIhoaIioqJhYF9ent7e3t5enh4dnZ3en2AhImOj4+Ni4yMi4uKioqKi4qGgHZwdH+IjIuKiYaEh4yOjImGhIWFh4eHhoaGiYqJhn90a2xxc3Z6f4KCgYGBgYGCgnh4d3d4eHl4eXl6enp6ent8fH19fn1+fn5+fX19fX19fHx7enp5eXd3d3h5enp6e3x8fn9/gICBgYKBgYGAgYB+fX17enp6enp7fH19f3+AgYGCgoKCg4ODg4ODg4ODg4ODg4OCgYWOk5KSkZGRk5KSj4qEg4qMj4+PjYmHiYqKiYmLjI+Ul5mYmZiXlJKQj42MiIF9gYSCg4aNkpWVlpaTk5STlJWVlZSVlpiYmpiZl5eWlZiZmpudnJeUkpGPjo6Qk5aXlpOPjYqKiIiGgn+AgH98eW1YOjZaaHB1dnd2c3R8homJiYqJioyKhoF7enp7end2dHR1dHV3fICFiY6PjY2MjIyLioqKioqKioiBd3B0foiMjIuJhoSHi42LiYWFhYWGhoeFhoeLjIqFfG9rb3J0eH2DhYOCgoKCgoKDeHh4eHh4eXh5eXp6enp7e3x8fX1+fX5+fn59fX19fX18fHt7fHp6eHd3eHl6enp7fHx+f3+AgIGBgoGBgYCBgH9+fXt6ent7ent8fX1/f4CBgYKCgoKDg4ODg4ODg4ODg4ODg4KBhY6TkpORkZGUlJKQjIWEiYyPkI+MioiJioqJiYuMjpOWmJmZmJeTkY6Pjo2IgX2BhIODhouPkZOVlJGTkZOVlZWWlZWWmJudm5qXmJiWmZqcnJ2bmJaUk5CPj5GVmJeWlZGOjIuKiomGg4GBf3x4ak0vLlNpbnJ0eHh0cnqFiIaEhISHh4eHhH98eXt8eHV1dHR0dXd9goeLj4+NjY2MjIuKioqKioqKiYF4cXV/iY2Mi4mGhIiLjYuJhYaFhoaGh4WFiIuMiYN3bG5xdHh8gIWFg4ODg4OCg4N4eHh4eHh5eHl5enp6ent7e3t9fX59fn5+fn19fX19fXx8e3t8e3p4eHh4eXp6ent7e35/f4CAgYCBgYGBgIB/f359e3p6e3t6e3x9fX9/gIGBgoKCgoODgoKCgoKCgoKCgoKCgoGFjpWUk5OSkpSUkpCOh4SHi46PjYuIiYqKioqKi4yOkpWXmZmXl5KPj5COjYqFgYGDhIOGiY2QkpOSkJGRk5aWl5WVlZaYnJycnZqbm5mampucm5mZlpaVkZCRk5aYl5aWk4+Mi4qKjI6Mh4OBfHVkRCsuVWtub3J3eXVwdoGDf3p9f4CCgoSDhYB9fn98eXh1dXR1eH6Eio2Rj42NjYyMi4qKioqKioqJgXdydoGJjYyLiYaGiI2NioiFhoaHiIiHhYWJjIuIf3NscHR1en+ChoSDg4ODg4KDgHh4eXl4eHl4eXl6enp6e3t6en19fn1+fn5+fX19fX19fHx7e3t5e3l5eXh5enp6e3t7fn9/gICAf4GBgYGAf35+fX17enp7e3p7fH19f3+AgYGCgoKCg4ODg4ODg4ODg4ODg4OCgYWOlpaUlZSUlJSTko+JhIaLjY+OioiJiomJi4uLjI6Qk5SYmZeWko+Ojo6NjIiDgYKDg4aJjY6RkI+PkJKTlpaXlpaWl5mamZ6enJ2cmZqZmpubmZiWlZSSkZSVl5mYl5eTj4yLiYmNkpOOhoN+c2BDLDFZbW9ucHd5dnF0fn95dHh9fX9/gIKFhIKBgH57e3h0dHV4foSKjY+PjY2NjIyLioqKioqLiomBdXJ2gIiMjIuJhoaKjY2Jh4WGhoiIiIeFhYmMjIZ7cW5ydXZ7gYSHhIODg4ODgoJ9eHh6enl5eHh4eXl6e3t9fXx8fX1+fn5+fn59fX5+fX19fXx6enp7eXh4d3d5eXp6e3t9fn+AgICAgIGBgX9/f359fXx7e3t6e3t8fX5+gICAgYKCgoKCgoGDg4OCgoKCgoKCgoGBhI6Wl5eWlZWVlpSRjoiEhoqMjo2KioiJioqLi4uMjo+Rk5eYmJWQjI6Oj46LiYSCgoSFhoeMjpGQj4+QkpSXl5WVlJaYmpmaoZ+fmZ+Sk5eZmpmZl5eVlZSUlpeXmJiXlpOQjYuJiIqMkZGLhoBzYEg4QV9wcW1vc3Z1cnR6fXlzdnl7foCAgYOCgoGAfn17dnRzdnp/hYqOkI+NjY2Mi4uKi4uLi4yLiYB1c3eBiIuMi4mGhoqOjoqIhYaHiImJh4WFio2MgnRucHN2eH6HiIeEg4OEhISCf3V4eHl5eHh4eHl5enp7e3x8fX19fX5+fn5+fn19fn59fX19fHp6enp5eHh3d3l5eHl7e31+foCAgICAgYGAf39/fXx9fHt7e3p7e3x9fn6AgICBgoKCgoKCgYODg4KCgoKCgoKCgYGEjZaWmJiVlJWUk5GOiISGioyNi4mJiImKiouLi4yOj5CSlZiYlJCMjY+PjoyKhIGCg4SEhoqPkZCPkJCSlZeYlZWUlpmcmp+dkZOSmoqPmJqbmZiXl5WVlZaXmJeYmJiWlJGNi4qIh4eKjYqFgndqV0lLYnJ1cG9wdHRzdXl9fHh3d3t/gICAgYGBgH9+fnt2dHR2eoCHi46Qj42NjYyLi4qLi4uLjIuJgHVzd4GJi4yLiYaGio6OioiGhoeIiYmHhYaKjIp+cW5zdXd8gomKiYWDg4SEhIJ8cXh4eHh4eHh4eXl6enp6fHx9fX19fn5+fn5+fX1+fn19fX18enp6eXh4eHl5eXl4eXt7fH19f4CAgICAgIB/f35+fX18e3t7enp7fH1+foCAgIGCgoKCgoKBg4KCgoKCgYKCgoKBgYSLlpiXmJWUlpWUkY6JhYWJi4uJiYmIiYmJi4uLjI2OkJCTlpeUkIyNj5CPjIuGgIB/f4CEiJCRkZCQkJOVmJmWlJSWmZudn5CHio+XiY6XnJuZmJiYlZWVl5mZmJiYmJiUkI2LiYmGhIaHhoJ+dm1bSk5mdnh0cG90dXV0d31/fnp4fYCAgICBgIB/fn19eXd1dXZ7gYaLj5CPjY2NjIuLiouLi4uMi4mAdXR4goqMjIuIhYaKjo6KiIiIh4iJiYeFhoqMiXlwcHV2eH+IiouKhYODhISEgnlteHh4eHd3eHh5enp7eXl7e319fX1+fn5+fn59fX5+fX19fXx6enp5eHl5eXl6enp6e3t7fH1+gICAgH9/gH9+fn59fXx7e3t6eXt8fX5+gICAgYKCgoKCgoGDgYGCgoGBgoKCgoGBhIqUl5eYlZSWlZSPjYiFhIiKiYeIiIiJiYmLi4uMjY6Pj5KUlpSRjI2PkI+NjId+fXt8fYGHkZOSkZCRk5eZmZaTlJaZnJ6XiYaKkJqNk5qem5ubmpmVlZaXmpuZmZiYmJOPjIqJioaFhIODf3pyaVtMUGp4e3dycXN3dXN4fYKAfHx+f4CAgIGBgX9+fXx4d3Z3d3uBhoyPkI+NjY2Mi4uKi4uLi4yLiYB1dHiDio2Mi4eEhoqOjoqIiIiHiImJiYeGi4qEdG9yd3d6gYmNjYuFg4OEhISCd214eHh4d3d5eXp6ent7e3t8fHx9fX19fX1+fn5+fn59fXx8fHt7enl5eXl5eXl5enp7e3x9fX9+gICAgICAf35+fXx9fHx7enp6e3x9fX1+gICAgoKCgoODg4OCgoGBgYGCgoKCgICChpSYl5eWlJaVk4+MiYWEiIuKh4iIiYqKiouLiYqMjY6PkZKVlI+OjpCQj46Nh355dnh4fYaPlZWRkJGRlpqal5OUl5mZnZCJipCSk5edn56enZ2amZeXlpeam5uamZmYko2KiomIh4SDgn98dWxiV01ZdH5+enVwcXV2c3h+g4F9fX+Af4CAgYCAgH5+fHl3dnZ5fYKHjI+QkI6NjYyMjIqLi4uLi4yIf3Z1eoSKjY2LiYaGio6NioiIiIeJiYmJh4iLiX5wcXR2d32FioyMiISDg4SEg4BzaXh4eHh4eHp6enp6fHx8e3x8fH19fX1+fn5+fn5+fn19fHx8fHt6eXl4eHl5eXl6ent7fH19f36AgICAgH9/fn59fH18fXt7e3t7fH19fX6AgYCCgoKCgoKCgoKCgYGBgYKCgoKBgH+BjpaWl5aVlZSUj4yJhYaJjIyHiIiIiYmJioqIiYqMjo+QkZKSj4yPkZGQjo6JgXp4d3h8g5CYl5ORkZGWmZqWlJOWmpqbjYmOlJSRoJSUlp6enp2cmZiXl5qbnJuampmTjoqKiIiGg4KAfXp0a2JYVWJ6gX98eG9udnh2eH2Dgn9/gIB/gYGBgICAgH58eXh3dnp+goeMj5KQjo2NjIyMiouLi4uLjIh/dnV8hIqOjouJhoeLjo2KiIiIh4mJiYiGh4mFd29zdXd6gYeKjY2IhISEhISDfnFpeHh4eHl5enp6e3p8fHx7fHx8fX19fX9/fn5+fn5+fX18fHx8e3p5eXh4eXl5eXp6e3t8fX1/foCAgICAf39/fn18fXx9e3t7e3t8fH19foCBgYKCgoKBgYGBgYGBgYGBgoKCgoJ/e3qFk5eYl5aVlJKOi4eGiIuPkImHh4eIiYmKioiJiouNjo6Pj5GOjI+RkZGPjouFfXl4eHmBjpeXlZOSk5WYmpWRk5WZm5uOiJCWlpqck5OXnZ6eoJ6amZiXmpucm5ubmpOQi4qIiIaDgX97d3JtZV9eanuAfXt3cGpzeXd4fYSEgYCAgICDg4GBgH9/fnt5d3Z2en6CiI2Qk5GPjY2MjIyKi4uLi4uMiH92dXyEi4+Oi4mGiIyOjYqIiIiHiYmJh4WHiIBxcHV2d32EiYyOjIiEhISEhIJ6b2p4eHh4eXl6ent7e3x8fHt8fHx9fX19f39+fn5+fn59fXx8fHx7enl5eHh5eXl5enp7e3x9fX9+gICAgICAgH9/fXx9fH17fHx7fH19fX1+gIKCgoKCgoGBgYGBgYGBgYGCgoKCgH13dH6PlpiXlZWTkY6Jh4aKjZGSi4aGh4iIiIqKiImJi42OjY+PkI+Nj5GSkY+PjomBe3h5en+OmJiWlZOTlJeYlZCUl5eUnpSMkpmYoJiZmZufnp6fnpuamJeam52cnJuZk5CMiYiIhoSBfnl3cm1pZWRueYB8enhwaG94d3l9hISAfoCBgYKCgYGBf359e3l3dnZ6f4KIjZCSkZCNjYyMjIqLi4uLi4yIf3d2fYWMj46LiYaIjI6NioiIiIeJiYmHhYaFfG5ydnd4gIaMjo6MiISFhISEgnhta3h4eHh5enp6e3t7e3x8fHx8fH5+fn5+fn5+fX19fHt8fX19fXx7ent7e3t6enp7e3t7fn59fX5+gICAgH9/fn57e319fHx7e3x8fX1+fn+BgoKCgoKBgYGBgICAgYGBgYKCgoF/eXFufIuUlZSUlZSRjYuJi46QkI+NiIWFhYeIiYmIiYqKi42OkI+Qjo6QkpKRkJCPi4SBf35+hI+YmJeXlpSUlZeXlJaZlpCclpGXnJygm56enZ6bnpqgnJiYmJyenp2enJeTj4qIiYiGhIF/eXVxcHBtbXF3e3Z2dW9nanR4eXyCgn9/f4GBgoKCgoKBfn5+e3h4eHyAhImMkJKSkI6NjY2Li4yMjIyMi4Z9dnZ+hoyOjYyJhomNjoyKiIiIiImKiYiGh4F0bnJ2eX2GioyNkIuIhYSGhYV+cWpreHh4eHl6enp7e3t7fHx8fHx8fHx+fn5+fn5+fn58e31+fX19fHx7fHx8fHp6ent7e3t9fXx8fX1/f39/f39+fnx8fX18fHx8fHx9fX5/gIGCgoKCgoGBgYGAgICBgYGBgYGBgHxzaml5ipOUlJSUlZOOiYuOkJCQj46KhYGAhYaIiIiJioqKjY+Pj4+OjpCSkpGQkJCNiYeGhoaKkZiZmJeXlZSVl5iWl5mYlpyclpqeoKCfn6GenJqfk5+dmJmanqCgnJ6cl5OPioiJiIeFg396dXR0dXNwcXR1cHFzcGhnb3Z5fYKBf4CAgYGCgoKCgoJ+fn55eXl6foKFiYyQkpKQjo2NjYuLjIyNjYyLhn12dn+GjY6NjImHio2OjIqIiYmJiYqJiIaFfXBvcnZ6goqNjo+PioaDg4SFg3ttaGt4eHh4eXp6ent7e3t8fHx8fHx7e35+fn5+fn9/fnx9fn5+fn18fHt8fX18enp6e3t7e3x8fHx8fH5+fn5/f35+fn59fXx8fX18fH19fn+AgYKCgoKBgYGBgIGAgIGBgYGBgYB/eW9lZ3mHjo+RkpOVlY6JjJGSkI+PjouGf3t/gYWHiImKiomMj4+Pjo2PkJKSkZGRkY+OjIyLjo+TlpiZmJiWlZWXmZeXmZyYlJyanZ6hoKKfoZ+dnKGPnJ+ampugn6CZnJyYk4+Kh4iIh4aEgH16eXp5d3Ftbm5sbnNzbGdrcXh+hISBgICBgYKCgoKCgoB+e3l6ent/goWJjJCSkpCPjY2Ni4uMjI2NjIuFfXd4gIeNjo2MiYiKjY6MioiJiYmJiomIhoF5b3F0dnyGjIyMi4qFgYGBgH98dWhnanh4eHh5enp6e3t7e3x8fHx8fHx8fn5+fn5+fX19fH1+fn5+fnx8e3x+fnx6enp7e3t7fHx9fXx8fX19fX9/fn59fX19fHx9fXx8fX1+f4CBgoKCgoGBgYCAgYCAgYGBgYGAf3x0amJoeYSJiYyOk5WTjImNk5KRkI2NjIh/eHp9g4aIiYqKiYyNjo+OjY+QkpKRkpGRkZGQkJGUlJSUl5mZmZaVlZeamZaYnJyVmJ6fn5+hoJ6fn56eoZOdoJuanKKioZicnJiTj4mHh4eHhYWDf319fXx5cGlpampuc3NuaGhudn+GhYOBgYGBgoKCgoKCgX57enp6e4CDhomMkJKSkY+NjY2Li4yMjY2MioV8d3qAiY2OjYyKh4qOjoyKiImJioqLiomGfXVwc3V2f4aKioeGgn16enp5eXVvZ2dqeXl4eXl6enp7e3t7fHx8fH19fX1+fn5+f39+fn19fn5+fn5+fHx7e319e3t6enx8fX19fX19fX18fX18fX1+fn19fX18fHx8fHx9fX9/gYGBgYGBgICBgH9/gICAgICAgH9+fHJlX2Z4f35/hIqQkpGMi5GUkpGPjo2MiIJ9e3mBhYiJioqJiouNjYyOkJGRkZGSkpKRkpOZn52Zj42WmpmXmZeXmJubmZmanZmXoKCgn6Cfn56WmKChm6GfnJqcoqWknZybl5KPiYeGhYWGhIOCgoB/fXhuYmJna25ycm9pZmt1goiGgoGBgYKCgoKCgoKBf318e3t9gYSHioyPk5KRj42NjIyMjIyNjY2Jg3t4eoCIjI2NjImHio6PjIuJioqKiomJiIN3cnN0dniBhYWFgX55dHBxcXFvbmdlZmt5eXh5eXt7e3x8fHx8fHx8fX19fX19fn5/f35+fX1+fn9/fn59fXx8fHx8fHt7e3t7e319fX19fXx9fXx7fX5+fX19fXx8fHx9fX5+gICAgIGBgYGAgICAf39+foCAgICAfn53bWFfZ3F1c3R9hY6Sj4yLkZSTko+OjI2JhYGAfXqAhomJiomKi4yMjI6QkZGRkZOUkpGSk5qipZ+PipGZm5ybmZeYm5uZl5mbmpmhoaGem56gn5SVn6GfoZ6cm5yipKSfnZuWkY6Jh4aFhIWEg4OCgX98d25mYmRoa21wcWxnaHOChoSBgICBgoKCgoKCgoF/fXx7fX+BhIeKjI+Tk5GPjY2MjIyMjI2NjIqCe3l8gYiNjo2MiYmLjo+Mi4qKioqKiYqHfHJxdXZ3en5/eHVyb25paWtpaWdlZWNma3p6eXp7fHx8fX19fXx8fHx9fX19fX1+fn9/f39+fn9/f39/f35+fX18fH19fHx8fHt7fHx8fHx8e3x8e3p8fX19fX19fHx8fH19fn6AgH9/gYGBgYCAf39/f35+f3+AgIB+e3NoYmBmaWtsb3qEkJKOi4uQlJOSj42LjYuHhIF/cXV9hIeJiomLjYyMjpCRkZGRk5SSkZGSlp6opZGJjZqkpaCamJibm5mXmJqcm6GhoZaRm6Chm5menKCfnp2bnqGjop+em5eRjImIh4WEhIKCgYB/fnp1cGxnYmNobG9ybmhlb32CgH+AgIGCgoKCgoKCgX9+fX1+gIKFh4qMj5OTkY+NjYyMjIyMjY2MiYF6eH2CiY6PjYyJiYyOj4yLioqKi4uLioR3cXN2dXV3dnNwa2poaGZnaGhoZmVlY2Vpenp5e3t8fHx7e319fHx8fH19fX1+fn5+f3+AgICAgIB/f39/fn59fX19fX18fHx8e3t7e3t7e3t7fHx7ent8fH19fX18fHx8fn5+f39/f3+BgYGBgH9+fn9/gIB+foCAf315cmdiX2NlZ2lueoWRkoyLjJCUk5KQjYuNi4iEg4BtbXN9homKiYuMi4yOkZGRkZGTlJSSkpCTm6ankYqOoaqpo5yXmJqcm5mYm56eoaGekJCcnp+em52bn56enZyeoaOioJ6bl5GMiYeGhYSEgoKAfn57eHNzcm5jXmRqb3NwaWVseH58fX9/gYKCgoKCgoKBf399foCAgoWIioyPk5ORj46NjIyMjIyNjY2HgHp4fYOLjo+NjImJjI+PjIuKi4uLi4qJgnZwdXZ1cXJua2lnZmZnZmhpaGhpaGVkZGd6enl6e3x9fXx8fX18fHx8fX19fX19f39/f4GBgICAgICAgIB/f35+fX1+fn19fHx8fHt7e3t6ent7e3t7fH19fX19fX19fH1/f3+AgICAgICAgICBf35+fX5+fn9/f398e3duZmFhY2VoaW56h5KSjImOkZSWk5CNi4yMh4SDgnJqbHiCh4mKjIyLi4+Sk5OSk5OVlZKSkZOaoqWRipirrqqlnZeXmpycm5mbnZ6foJ6VmJycnJmYmpyfnZ+fnJygo6GenJuXkY2Ih4aFhIOCgYB/fnt2dHd6d2pfXmNrcG9qZmt1eXp7fn+AgoKCg4ODg4GAf35/gYGDhYeKjJCUk5GOjY2MjIyMjI2NjIZ+eXl+hYuPj4yLiYqNj46Mi4qLi4yMi4d+dHN2dHFuamZkY2RlZ2hqbG1ubW1rZ2dlZnp6eXp7fH19fHx9fXx8fHx9fX19fX1/f39/gICAgICAgICAgH9/f359fX5+fX19fXx8fHx7e3t7e3t8fHx8fX19fX19fX18fn9/gICAgICAgICAgIB/fn59fn5+f39/f317c2llZGNlZWdmbHuJkY+MiY+SlJeUko+MjIyJhoSCdmxtd36EiIiMjIuLj5KTk5STk5WVk5KRkpefo5OOpq2ppaOcl5eanZybm5ydnp6dmp2enJqamJiZnJ6dnZ2bm5+in52bmJWQjIiHhoaEg4OAf358eXd3fH9+c2ZfX2dsbmpmbHl8fHx+f4GCgoKDg4ODgYB/f4CBgoOFh4qMkJSTkY6NjYyMjIyMjY2LhX55e3+GjJCPjIuKio2Pjo2LioyMjIyKhXl1dHNva2hlZGNlZ2drb3N0dnZxbmpqaWlpenp5ent8fX19fX19fHx8fH19fX19fX9/f39/f4CAgICAgICAf39/fn19fn59fX19fX19fXt7e3t7e3x8fHx9fX19fX19fXx+f3+AgICAgICAgICAf35+fn1+fn5/f39/fHZtZmVnZWVlZmdufImRjouLkJKUl5aTkY6MjYqHhoN7cnF2fIKIiYuMjI2QkpOTlZOTlJSTkpGSlZuhl56rqaOhn5qZmJudnJycnJ2cnZqXoZ+bmZqbmpmcnJyam5uZnJ6em5mVko6LiYeGhoSDhIB+fHp2d3p/gH94bGJeYWltamZteX+Af39/gIKCgoODg4OBgH9/gIGCg4WIioyQlJORjo2NjIyMjIyNjYuFfnl7gIeNkI+Mi4qLjo+OjYuKjIyMjImBdHNzbWpnZGRkZGdqbXN3e3x+fnZwa21rbW16enl6e3x9fX5+fX18fHx8fX19fX19f39/f39/gICAgICAgIB/f39+fX1+fn19fn59fX19e3t8fHt7fX18fH19fX19fX19fH5/f4CAgICAgICAgIB/fn5+fX5+fn9/f396cmdjZmhmZGVlZ299iZGNiYyRk5SXl5WUkI2NiomGhH92dHV9g4mKi42Oj5GUlZSVlJOUlJWSkpOUmaCfq6ukn52bmZiYm56dnZydnJyclZukn5uam5ybmZqbmZeZmZmbnZ2bl5SQjYuKh4aGhIODgHx6eHZ5fX+Af3lxZF5eZ21rZ2x3f4CBgICAgoKCg4ODg4GAf3+AgYKDh4qKjJCUk5GOjY2MjIyMjI2NioR+eXyAh42Qj4yLi4yPj46Ni4qMjI2NiH5xc3BqZmVlaGVmaW50en2AgoSCenJtbW1wcXt7ent7fX19fn59fX19fX18fHx+fn5+fn5+fX6AgH9/gICAgICAgH5+fn5+fn5+fn5+fXt8fHx8e3t8fHx8fX19fX19fX19fX9/gICAgICAgICAgH9/f39+fn5+fn5/fnhwZWJlaGRkZWRncHuJj4yJjJGTlZiWlZSRj42MiomGgHp0dHqDiouNjY6QkpOUlpWUk5SVlJSTk5SXnqasqJ+cmZubmZmcnp6enJ2bm5yVoqakoJ2dnZyampmWlZmYmJqcm5mXko6Mi4mHhoWEg4OAfHl4eHt/gH9/fHZpYV1jbG1rbXR8gIKCgYGBg4ODg4ODgoF/f3+Bg4SHiYqNkZOTko+OjYyLjIyMjY2Kgnx6e4CHjZCPjYyLjY+Pjo2Mi4yMjIyFd25taWdkZmdqaWxxd4CChYKEhoJ6cm1ucHR2e3t7e3t9fX1+fn19fX19fXx8fH5+fn5+fn59f4CAgICAgICAgICAfn9/fn5+fn5+fn59e3x8fHx7e3x8e3t8fH19fX19fX19f3+AgICAgICBgYCAf39/f35+fn5+fn59dWtlYmVnZGRkZGhxfouNiomNkZOWmJaVlJSQj46LioiEfnZ1eoSNj46Oj5CSk5SWlZSTk5SVlpSTlJWcp6iinJiWmZmYmJuenZ6cnJqbm5ikpqShoJ+dnJmZmJWVmJiYm52bmZaRjoyKiYaFhYSDg4F+fHx9fn+AgIB+e3BnXl9pbW5vcXh8gIODg4GDg4ODg4ODgYCAgIGDhYeJio2Qk5OTkI6NjIuMjIyNjYmCfHt7goiOkY+NjIuNkI+OjYyMjIyMi39ybWtoZ2dnam5wd36EiYmIhYWGgHZubHF0en17e3t7e319fX5+fX19fX5+fn58fn5+fn5+fn6AgICAgICAgICAgIB+f39+fn5+fn5+fn17fHx8fHt7e3t7e3x8fX19fX19fX1/f4CAgICAgICAgIB/f39/fn5+fn5+fHlxZ2VlZWdmZmNjaXKAjYyJio+Qk5eZl5aVlpKRkI6MiYaAdnR6hI+SkI6PkZKTlJaWlZGRkZSWlJSVlpmio56YlJSXlpaXmp2dnp2bmpubnaSkop+dnZybmpmYlZWZmJianZqYlJCMi4mIhoWEg4ODgoB+fn6AgICAgYB8d29jXmVscXFvcnZ8goOCgoODg4OEhIOBgYGBgoOFh4mKjY+Sk5OQjo2Mi4yMjI2NiIF8e3uDiY6Rj42Mi46Pj46NjIyMjIuHeW9raWpqbGtvdHmBiI2PjImGhoZ+cm1tc3qAhHt7e3t7fX19fn59fX19f39+fnx+fn5+fn5+f4CAgIGBgICAgICAgH5/f35+fn5+fn5+fXt8fHx8e3t6enp6e3t9fX19fX19fX9/gICAgICAfn6AgH9/f39+fn5+fn57d25kZWdnZ2doY2NpcoCLi4mLkJCUmJmXlpaWk5CRjo6LhoB2dXqEjpKSj5CSkpOUlpWUkZGQk5WVlJSVlpudnJeRk5eWlpeanZ6enJqZmpqgo6OfnZqbmpmamZiVlZmamZmbmZiTjouKiYeFhISCg4KBf3x9f4CBgICBgH57dWlgZGtxcW9udHuCgoGBg4ODg4WFg4GBgYGCg4aHiYqNj5KTk5COjYyLjIyMjY2IgXx7eoOKjpGPjYyMjo+Pjo2MjI2Ni4V1bWpna2xtb3N5gYiOkpCNiYaGhH1xb3B3fIOGfHx7fHx9fX5/f319fX1+fn5+fX59fn5+fX5/gIGBgYGBgYGBgICBf35+fn5+fn19fX18enx8fHx8fHt7ent8fHx8fX18fX5+fX9/f39/gIB/f4CAgICAgH59fX19fXl0aWRmZ2lqamhiYmpzfoiIh4yPkZSXmJiXmJiWlJCPkIyIhHt4fISPk5GQkJGSk5OTlZSRj46Qk5WVlZWTl5mbl5GUlJSVlpqdnp+bmJWbmqKiop6bl5eXmJqZmJeWmJmYmZiWlpOPi4mJiIWFhIOCgX59fH2AgoCBgIGAf355b2Flam9vamdueYOCgH6Bg4SChISCgoCBgoKEhoaIi4yNkZKSkI6NjIuNjY2Ni4eAenp+g4mPkY+NjIuPkJCPjIyMjY2Kf29pZmhscHB0e4OKkJGSkY2Jh4eDenFucnh+hIV7e3t8fH19fn5+fX19fX5+fn5/f35/fn59f3+AgYGBgYGBgYGAgIF/f39/f39/fn59fXx6e3t7e3t7e3t6e3t7fHx8fHx9fn5+f4CAgICAgH9/f39/f39/fn19fX19eG9mY2ZnamtraGJianN/hYWGjI+RlJeYmJiZmZeWkI6PjImHfnl9hI6SkZCQkZKTk5OVk5CPjY+SlJWVlJOVlZmWk5SUlJWWmZyfnZqXlZqcoaCfm5mWlpaXmJeYmJaXl5aYlpWUko6JiYmHhoWEg4KAfXx7fH+BgIGBgYGBgH14bmxtbm5pYml4g4SAfoGDg4KEhIKCgYGCg4WGh4mKjI2RkpKQjo2Mi42NjY2KhX57en6Fi4+Rj42Mi5CRkI+MjIyNjYh4aWVnam90dnyFjI6RkpKRjYmHh4J4cW5zeX+Fhnp6ent8fX1+fn59fX19fn5+fn9/f39/f36Af4CBgYGBgYGBgYCAgX+AgICAgIB/f319fHp7e3t7enp6ent8fHx8fHx8fH1+fn+AgYGBgYCAf39+fn5+fn5+fX19fHt0aWRjZmlrbGtnYmJpdH+EhYaOkZOWmJqYmJqamJaQjo6LiomBen6GjZGRkJGRkpOTkpOTj46MjpCSlZWTkpKUmJeVlJSUlZaYm52bmJWVmJuenZybmZaVlZaXl5iYlpWWlpeVlZSRjYmJiIeGhYSDgoB9e3p7fYCAgYGBgYGCf354c3FwcW1laXaDhoOAgoSEg4SEgoKBgYODhYaHiYqLjZGSkY+OjYyLjY2NjImFfXx7f4aLkJGPjYyLkJCPj4yMjI2LgXFmZWhrc3h8g4uPkZGSkpGNiYeGf3VwcHN7gYWHenp5e3x9fX59fX19fX1+fn5+fn59fX9/f4B/gIGBgYGBgYGBgICBf4CAgICAgH9/fX18enx8enp6enl5e3t7e3p6e3t8fX5+f4B/f4GBgIB/f35+fn5+fn59fX17eG9kYWNmaWxua2diYmh1foSFiI+SlJaZmpqampmXlpCOjoqKiYN8foaNkZGQkZKUk5KRkZGPjIuNjpCUlJOSk5SWlpSUk5SVlpibm5mVk5OVmZubnJuZlpWVlZeXmJiWlZWWlpWVlZCNiYiIh4aFg4OBf3x7ent8f4CBgYGCgoKBf3x4dHV1c2tsdYKGhIKDg4ODhISCgoGCg4SFhoiKiouNkZKQj46NjIuNjY2MiYN8fHyBh4yQkY+NjIuQkI6PjIyMjop8bWZnaWx2e4KJjJCSk5KSkY2Jh4Z8cm9wdHyChYd7e3t7fX59fn5+fn5+fn5+f39/f35+fX5/f4CBgICAgIGBgYGAgICAgICAgICAf39+fn18fX17enp6eXl5eXp6e3t7e3x8fX1+fn5+f3+AgICAfX19fHx8fX19fXt2amJhZGdscG9taWJja3V/g4SJkpSVlpmbmpqamZeVkY6Ni4mHg35/hY2QkI+PkZKTkJCOjIuLioyMj5KUk5OSkpWVk5OTlJWXl5qYl5WSkpOVmpuampmZl5WVl5eYmJeXl5aVlJWTkY2JiIiGhoWEg4B+fHt5e3t9gIKCgoODgoGAfXx7enp5c3B2foWGg4GAgYKEhIODgoKEhIWGhoiKi46QkpCPjoyMjIyNjYyHgXx7fIKHjY+Rj42MjJGQj46MjI2MiXZoZWptcXmDiY+QkZOTk5GRjYmIhHpxcHJ4gISHh3x8fHx8fX1+fn5+fn5+fX1+fn5+fn59fn9/gIGAgICAgYGBgYCAgICAgICAgIB/f39/fX19fXx6enp7e3l5e3t7e3t7e3t7fH5+fn5+fn9/f39+fn58fHx9fX18d3BnZGFlaW1ycG5pYmNqc32ChImUlZWWmZuampqZlpSQj46Lh4SBf4CCi4+OjY2OkpKPj4yJh4aFhoiLjpGSkpKSlJSTk5OVmZual5aUk5GSk5WYmJeZmpuYlpaXl5mZmJmal5WUlZOQjImIiIaGhYSCgH58enp6e3yAgoODg4OCgYB+f39/f397d3l6g4aCe3l8gYSEg4OCg4SEhoaGiIqLjpCQkI6NjIyMjI2NjIaAfHp8goiOkJGPjo2OkZCPjoyMjYyEcmdobW92gImOkZGTk5OTkZCMiIaDeHBwcnqChYmIfHx9fXt8fX5+fn5+fn59fX5+fn5+fn1+f3+AgYCAgICBgYGBgICAgICAgICAgH9/f399fX19fHp6ent7e3t7e3x8e3t7e3p8fn5+fn19fX1+fn9/f359fX19fXpza2VkY2Vqb3NxbmdiY2lyfIGEiZSWlpeZm5qamZeVko+OjoyFfnt/f4KIjY+OjY6QkY6NioaDgYGChYiNj5CQkZGTk5OTlJadoZ+Wk5SSkZOTlpeYmJeanpqYl5iZmpqanJ2YlZOUk4+MiYiHhoaFgoF/fnx7ent7fICCg4ODg4KCgX+AgIGBgYGAfHh/hYF5d3iAhISEhIODhIWGhoaIiouNkJCQjo2MjIyMjY2LhYB8e3yCiI6RkY+OjY+QkI+OjIyNi3xtZmlucXqGjpGRkpOTk5ORjoqHhYB2cHFze4OHiYl9fX19e3x+fn5+fn5+fnx8fX19fX5+f35/f4CBgICAgIGBgYGAgICAgICAgICAf39/f319fX18enp6fHx7e3t7fHx7e3x8e35+fn5+fX18fH5+f39/fn5+fX18enFoZGRkZGtwc3JuZmJjaXJ8gYWJlJiWmJmbmpqZl5SRjo6PjYV7d319g4iOjYyMjI6PjYuIhYB+f4CDhYuOj4+RkJGRkpOUmaGmn5eTk5KSk5SYmJiYlpmdnJmYmZqcmpyenJeUk5SSj4uIiIeGhoSCgX9+fHt5e3t8gIKDg4ODgoGAgICBgIOChIR+d3uDgHh2eYGEhIWFg4OFhYaGhoiKi42QkJCOjYyMjIyNjYqFgHx7fIOIjpGRj4+OkZCQj46MjI2HdWhkaW9zfoqQkpKSk5OSk5GNioeFfnNwc3V9g4iKin19fX18fX5+fn5+fn19fHx9fXx8fn5/f39/gIGBgYGBgICBgYCAgICAgICAgICAgH9+fn19e3t7e3l6enp6e3t8fHx8e3t7fH5+fn5+fn19fH2AgICAf399fHp1bGVkZWRobnJzcWxmYWRrd36DhYmVmJeZm5ubm5eVk4+NjY2Mh3hvd3yCho6Ni4yNjY2MiYeEgH57fH+DiYuNjY+QkZGRlJacpqulmJORkJGTlZeYl5eXmJubmZmanJubnJ6bmJSUlJKNiYeHh4WFhYOCf358fHp7fH2AgoODg4OBgoGBgYGBg4KGhoB4e4J/enp8goWFhISDg4WFhoaHiYmLjY+Qj46NjY2MjI2Mi4R/fXx/hImPkZGQkI+SkpCPjYyOjIBuZGVrbnSCjpKTk5OTlJSTkYyIhoV8cm5xd4CHiYmJfn5+fn19fn5+fn5+fX18fH19fX1+fn9/f39/gIGBgYGAgIGBgICAgICAgICAgICAf35+fXx7e3t7eXp6enp7e3x8fHx7e3t8fX19fX5/fX17fYCAf399fX17eXFoY2RmZmlwdHRxbGdkZm15gISFiZWYmJqbm5ual5WSjoyLi4uKeWpxeX+BiYqIiYuLi4uJiISAfXt8f4OHiYuNj5CQkZKXnaSqraWZlJGQkZOVl5eWlpaXmpqZmZqcnJucnZqXlJOSkYyIh4eHhYWFg4J/fn19fHx8fYCCg4ODg4GCgoGBgYKDhIiHg3t+g4B8fX+EhYWEhIODhYWGhoeJiYuNj5CPjo2NjYyMjYyKhH99fYCEi5CRkZGQkJKSkI+NjI2HeWtmZ2tueYmQk5STlJSVlZSRjIiGhHhwb3J5goiJiop+fn5+fn5+fn5+fn59fXx8fHx8fH19f35/f3+AgYGBgYCAgYGAgICAgICAgICAgIB/fn59fHt7e3t5enp6ent7fHx8fHt7e3x9fX19fX19fXx9fn5/f319fXt2bGRjZWdobHF0dHBraGdob3uEhYaLlZiZm5ubmpmYlZKOjIuKiop7Z2p2fX2AgYKChoiKioqHhIB8e3x/g4aJioyOj5CRlJulqqyqo5uVkpKRkpWWl5WVlZaZmZmZmpybmpucm5iUk5GQi4iHh4eFhYWDgn9+fX19fX1+gIKDg4ODgYKCgYKCg4SGiYiFf4GCf3t/gYSFhYSEg4OFhYaGhoiJi42PkI+OjY2NjIyNjImDf35+gYWLkJGRkZCQkpKQj42Ni4Fzamhpa3F+j5GTlJOUlJWVlJGMiIeBdW9xdXqDiImKin5+fn5/f35+fn5+fn19fX18fH19fX1/f39/fn+BgYGBgICBgYCAgICAgICAgICAgH9/fn19fHt7e3l6enp6e3t8fHx8e3t7fHx8fHx8fH19fn59fX5+fn59enNoY2RmZmpucXV0b2xoZ2pyfYaHh4uVmJmbnJyamJeVko6LioqKiXxmZXN6eHl6fH6ChYeJiIeFgXx7fH+DhYmKi46Pj5CUnqmsq6ainZSQkY+RlJWWlJSUlZmZmZmanJuZmpuamJSTkI+Kh4eHh4WFhYOCf35+fn19fX6AgoODg4OBgoKBg4ODhYeIiYWCgoJ9en5/goWFhISDg4WFhoaFh4mLjI+Qj46NjY2MjI2MiYOAf3+BhYyQkZGRkJCSkpCPjo2Lfm1pamtudoKQk5OUlJSUlZWUkYyIhn11cHF2e4WIiYuLf39/f35+fn5+fn5+fHx9fHx8fHx8fn9/f39/gICAgYGAgIGBgICAgIGBgYGAgICAfn59fH18e3t7ent7e3t6ent7e3t7e3x8enp8fH19fn5/fn5+f39+fXx2bWRhZWhqbXB1d3Nuamdoa3N+h4iHjZaZmZycm5qYl5WTj42KiYmKgGphbXd2eHd4fH+DhoeGhoWCf31+gYKGiImLjY6QjpKeqaumo5+alY+PjY6Rk5WUkpGUmJmXmZudmpeYmZeVk5KPjYmHh4eIh4aEg4F/f35+fX1+f4GDg4ODg4GBgoGBgoSFh4iHhIKDgHp5fH6ChISDg4ODhIaFhYWIiYqMj4+Ojo2NjYyMjYyIg39/gIKHjZCSkZGRkZGRj46Mi4Z6a2pqbHF6iZGUlJOUlZWVlZOPioeGfHNwc3h/hYmKiox/f39/fn5+fn5+fn58fH18fHx8fHx+f39/f3+AgICAgICAgYGAgICAgYGBgYCAgIB/fn59fXx8fHt6e3t7e3p6e3t7e3t7fHx7e3x8fX1+fn9/f39/f359enFoYmFmaW1vc3d4cmxpZ2htdoCIiIeNlZiYm5ybmpeWlZOPi4eHiIqDbmBpc3V2d3l7foOGhoWGhYOCgIGCgoWHiYuNjY+OkZmipqOhnJmTjo2Li46Rk5KPkJKWmJaZm5yZlZaWlZORkI6MiYeHh4eHhoSDgX9/f39+fn5/gYODg4ODgYGCgYGCg4WGhoWEg4V/dnV5fYGEhIODg4OEhoWFhoiJioyPj46OjY2NjY2NjIiDgICAg4mOkZKRkZGRkZGPjo2JgXNqa2ttdH+Mk5OTkpSVlZWVk4+Kh4R6cnF0eYCGioqKjH9/f39+fn5+fn5+fn5+fXx8fHx8fn+AgH9/f4CAgICAgICBgYCAgICBgYGBgICAgIB/fn19fHx8e3p7e3t7enp7e3t7e3t8fH19fHx9fX1+f39/fn9/fn14bmVgY2dqbXJ1eHdxbGhnanJ6g4uJhoyVmJeanJuamJeWlI+Hg4WIh4JwYGRxdnd3eHx/goSFhIWEhISCg4OChIaIioyNj46QlJqfnZ2al5OOioiJi46QkI2OkJSVlpibmpiVlJSTkY+OjYuIh4eGh4eGhIOBf39/f39/f4CBg4ODg4OCgoKBgYKChIaGhYSDg310c3d8gYSEg4ODg4SGh4eGiImKjI+Pjo6NjY2Ojo2MiIOBgYGEiY6RkZGRkZGRkY+OjId8bWtrbG93go2Uk5OSlJWVlZWTj4mGg3hxcnV6gYeKioqMf39/f35+fn5+fn5+fn59fHx8fHx+f39/f39/gICAf3+AgIGBgICAgIGBgYGAgICAgIB/fn18fX17ent7e3t6ent7e3t7e3x8fHx8fH19fX5/f359f39+fXZrYmBkaGtudHd5d3FsaGltdXyFjYmFi5SXl5qcm5qYlpWTj4WAhIeEgXNiYG51dnd4e36Cg4WEhISDg4KDg4SDhYeJi4yOjo+QlpmampeWko2Jh4eJjI2Ni4yPkpSVmJuZl5WTkpCOjY2MioiIh4aGhoaEg4F/f4CAf39/gIGDg4ODg4ODgoGBgoKDhISEhIOCe3Nyd32BhISDg4ODhIaHh4aIiYqMjo+Ojo2NjY6OjYyIg4GBgYOKjpGSkZGRkZGRj46KhnZqamxtcXuGkJSTk5SUlZWVlZOPiYaBdnJzdnyBiIqKiox/f39/fn5+fXx8fHt9fXx8fX18fHx9fn5/f39/f39/f39/f3+AgICAgICBgYGBgIB/f35+fXx9fXt7enx8e3p6enp7e3t8fX19fX19fX18fX5+fX1/fn17c2liYWdqbXJ4eXx3cWxpaG50e4aOi4eJkJWXmZ2dmpiWlZOQiIWDg4F/dmVgbHR2d3l9f4GDhYSFhISEg4ODg4ODhIaJio2Oj5CTlZeYl5STjYmEhYaJjIuKio2QlJOXmZmWk5OSj42MjIqJh4eIh4aGhoWDgoB/f39+fn+AgoKDg4SEg4ODgoGBg4OEhIWEhIF6dHB1e4CDg4OChISFhoaGhomLi4yOjo6OjY2NjY6Oi4aDgoKDh4yQkpKSkpKSkY+OjomCcmpubW52gIyTlJSUlZWVlZWVko2JhX11cnN2fISJioqKin9/f39+fn59fX18e319fHx9fXx8fH1+fn9/f39/f39/f39/f39/gICAgH9/f39+fn5+fn59fHx8e3t6fHx7enp7e3t7e3x9fX19fX19fXx9fn9+fn9+enhwZmBjaGttdHl6enRvbGhobnV7hY6LhoiOk5aYm5yal5WUk5GLiIKBgX13aF5td3p8fX+AgYOEhIWEhISDg4ODg4OEhomKi42Oj5CTlZaVk5KNiIOChIeKioqKi42SkZWWl5WSkpCOjIyMiomHh4iIhoaGhoSDgH9/gH5+f4CCgoODhISDg4ODgoGDg4OEhIODgXtza2x0fIKCgYKEhIWGhoaHio2NjI6Ojo6NjY2Njo2JhoODg4SJjpCSkpKSkpKRj46NiHtvam5ucHiDjZSTlJSVlZWVlZWSjYmEenNydHh+hoqLi4qKgIB/f35+fn19fX19fHx8fH19fHx8fX5+f39/f39/f39/f39/gICAgICAf39/f35+fX1+fn18fHx7e3p8e3p6ent7e3t7fHx8fX19fX19fH1+f4CAf397dGxjYGVpanB2eXp5dG1paGtvd3uFjYuFh42SlZiZmpmWlZSTko2KgoKBfXhqX219f35/gIGBg4OFhYSEhIODg4ODg4SGh4mLjI2OjpCTlJOTkYyIg4KDhYiKi4mKi4+Pk5SVlJGQj4yKi4uJiIeHiIiHh4eGhIOBf3+Af39/gIKCg4ODg4ODg4ODg4ODg4SEg4OBfHRrZGp2gYOCgoSEhYWGhomLjo6Mjo6Ojo2NjY2Oi4iFgoODhYqOkZKSkpKSkpGPj42Gd2xrbm9ye4eQlZSUlJWVlZWVlZKNiIR4cXJ2eYCHiouLjIyBgX9/fn5+fX19fX17e3x8fX18fHx9fn5/f39/f39/f39/f39/f4CAgIB/f39/fn59fX5+fXx7e3t7enx7eXp6e3t7e3t8e3t9fX19fX18fX5/f39/f3pyaWNhZmpsdHl5enhzbGhnbHJ0e4aNioWHjJKUl5iZl5SUlJSSjYqFhYJ/e21hbH6BgIGBgYGDg4aFhISEg4ODg4ODhIaGh4qLjIyNjpGTkpKQjIiDgYKEhomLioqKjI2QkpOSkI+NiomKiomHh4eIiIeHh4eEhIGAf4B/f3+AgoKDg4KCg4ODg4ODg4ODhISDgoB9dWthY3KAhISEg4SFhYaGiYuOjoyOjo6OjY2NjY6MiIOBgoSHjI+SkpKSkpKSkY+QjIN0a2xucHV9iJGWlJSUlZWVlZWVko2IhHdxc3Z7gYiKjIuMjICAf39+fn5+fn58fHt7e3t8fHx8fHx8fH1/f39/f39/f39/f35+f39/f39/f39+fnx8fn58fXx8fHx7fHp5e3t7e3t7fHx7e3x8fH19fX19fn9+f35+enFoYmRpbG92e3t8eXRtaGdtdXh7hY2KhYWJkJKVmZiVlJOTk5KOi4eGg399cGBqf4GBgIGBgoKDg4WFg4ODg4ODg4OFhoeIioqKioyNj5CRkZCMh4OCgoKEiYqKiYmKi46QkZGQjYuJiYeIiIiHh4iIh4eHh4WFgoGAf3+Af4GCg4ODg4ODg4ODg4ODg4KCg4ODf3l0bGFcanyBg4ODhIWGhoaJi4yOjY2Mjo6OjY2NjYuGgoKDhomNkZKSkpKSkZKSkY+KgHBqa29zeYKMkpSUlJSUlJWVlpSTjoiCdnFzd32CiYuLjY2NgIB/f35+fn59fX18e3t7e3x8fHx8fHx8fX5+fn5+fn5/f39/fn5+fn9/f39/f35+fHx9fXx9fX19fXx8e3t7e3x8e3x8fHt7e3t7fH19fX1+fn5/fn13bWRiZmptcXh7fHx5dW9qam5ycnWCjouGhYmNkZSXlpSSkZKSko+MiIWEgn9zYWZ9g4KAgoKCgoODg4ODg4SEhISDg4SGhoiKiYqKi4yOj5CQjoqFg4KCgoOGiIiIiYmJio2Njo2LiYeIh4iIiIeHiIiIiIiIh4WDgoGAf3+AgoODg4ODg4ODg4ODg4ODgYGCg4J8dnBqYlZacoCBgoOEhYaGhomLi4yNjYyOjo6NjY2NioSCgoSGiY6RkpKSkpKRkpKRkIp7b2trb3R7hI+TlZWUlJSUlZWWlJKOiIF2cnN3foOJi4uNjY2AgH9/fn5+fnx8fXx7e3t7e3t8fHx8fHx8fX5+fn5+fn9/f39+fn5+f39/f39/fn5+fn19fH19fX19fHx7e3t7fHx8fHx8e3t7e3t8fX19fX5+fn9/fXdsYmJnam5zeHt9e3l1cWxsbm5rbn6OjYaFiIuPkpWUkZCQkJGRkI2IhYaEgHZkZXuEhIKDg4SEhISDg4WFhYWEhIODg4WGh4mJiYqLi42OkI+MiYWDgoKBgoOGh4iIiIeJiouKiomHhoaHiIiIh4eIiIiIiIiHhoSDgYB/f4CCg4ODg4ODg4ODg4ODg4OCgYKDgXx2cGtiUlFpfICChISFhoaGiIqKi42NjI6Ojo2NjoyIg4KDhYaKj5GSkpKSkpGSkpGQh3ZubW1wdH2GkJSVlJSUlJSVlZaUko6If3Vyc3h+hImMi42NjYCAf39+fn5+fHx9fHt7e3t6enx8fHx8fHx9fX19fX19f39/f35+gIB/f39/f39+fn5+fn58fXx8fHx8fHx8e3t7fHx8fHx7e3x8fH19fX19fn5+f39+dmtgY2hpb3R6fX16eXVybm5vamdrf46OhoWGjI+Sk5OQj4+QkJGRjomHhoWCeWhmeoSFg4SEhISEhISEhoaFhYSEg4ODhIaHiYmJioqKjI6Qj4yJhYOCgoGCg4SGh4iHhoiJiYmIh4WEhYeIiIiHh4iIiIiIiIeGhYSBgICAgYODg4ODg4ODg4ODg4ODg4KBgoKCf3p0bmVRTGB3foKFhoaGhoaHiYuMjY2Mjo6OjY2Oi4eDgoOFh4yPkZKSkpKSkZKSkY6Ec25tbnJ3foiRlJWUlJSUlJWVlpSSjoh+dHFzeH+FioyLjY2NgIB/f35+fH5+fn57e3t7e3t7fHx8fHx8fH19fX5+fn5/f39/f39/f39/f39+fn5+f39+fn1+fHx9fXx8fX18fHx8fHx7e3t7fHx8fHx8fX1+fn9/fnx2a2RmaWpvdXt9fXx6dnNwcG1kYWmBkI+Hg4WLjpCSkY6Oj5CQkJKOiYiHhYJ6amV3hIeFhISEhIWFhYWGhoWFhYWEhIOFhoeIiIiJioqLjY+PjIiEgoKBgIGDg4SFhoaHiYiIhoaFhISFh4iJiYiIh4eIiIiIiYeGhoSCgICCg4ODg4ODg4ODgoKBgoOCg4KDg4KBfXVtYk1KWXB+gIOFhoaGhoeIiYuMjIuNjY2Ojo6Kh4ODhIaJjZCSkpKSkpKRkpKSjX9wbG1vc3qBipKVlZSVlZWVlpaWk5GMh3xzcnR6gIeKi4uMjY2AgH9/fn58fX19fXt7e3t7e3t8fHx8fHx8fX19fn5+fn9/f39/f39/f39/f39/fn5/f35+fn58fH19fX19fXx8fHx8fHt7e3t8fHx8fX19fX5+f39+e3ZsZmhqbG92fH57e3p2c3Fwa2BdaoORkIeDhoyOkJGOjY2Ojo+Qko+KiYaEgXprZHWEiIeEhIWFh4eHh4eHh4eHh4SEhIWHh4iIiImKiouMjo+LiISCgoGAgIGBgoSGhoiJiIiGhIOEhIaJiYmIiIiHh4eHh4eJiIaGhYSCgoODg4ODg4ODhIGAf3+BgoKDg4ODg4N+dWtgW11seYCCg4WGhoaGh4iJi4yMi42NjY6OjYqGg4OEh4qOkZKSkpKSkpKTkZCHeG5sb3B1e4OLk5WVlJWVlZWWlpaTkIuFenNzdXuDh4qLjY2Ojn9/fn5+fn18fXx7fHt7e3t7e3x8fHx8fHx9fX1+fn5+f39/f39/f39/f39/gIB/f39/fn59fXx8fX19fX19fHx8fHx8e3t7e3x8fHx8fX19fn5/f317dm1naWtscnd9fnt7eXd0cnBoXl5sg5GQh4OGjI+RkIyMi4yNjo+SkI2Kh4SBe2xicoOKh4aGh4eHh4eHiIiHh4eHhoaFhYeHiIiIiYqKioqMjoyIhIKCgYB/gICChIaGh4iIiIaEg4SGiImJiYeIiIeHh4eHh4eHhoaFhISEhISEhIODg4OCf3t5eHyAgoODgoKCgX95cGprcXl+goSDhYaGhoaHiImLjIyLjY2Njo6MiISDg4SHio6RkpKSkpKSkpOSjoNzbW1wcXZ9hY2TlZWUlZWVlZaWlpOPioR4c3N2fISHi4yNjY6Ofn59fX5+fnx7e3t9e3t7e3t7fHx8fHx8fH19fX5+fn5/f39/f39/f39/f3+AgICAf39+fnx8fHx+fn19fX18fHx8fHx7e3t7fHx8fH19fX19fX5+fXp2bmlqbG10eX1+fHx7enZ0cGVcX26DkZCHg4eNkJKQjY2KjIyOjpKQjYqHhIB4b2Nvg4uIiIeJiYmJiYmKiomJiYmGhoWGh4eIiIiJioqJiouOjImEg4KBgH5/f4KDhoaGh4iIhoSEhoiKiomIh4iIh4eGhoaGhoaGhoWDhYWFhYWFg4ODg4F8dHByeICCg4OBgYF/fnp4dXV4fn+CgoOFhoaGhoeIiYuMjIuNjY2OjouHhIODhIeLj5KSkpKSkpKTlJOMgXBtcHBzeYCGj5OVlZSVlZWVlpaWk4+Jg3hzc3Z8hYqLjI6Oj49/f35+fn59fHx8e3t7e3t7e3t8fHt7e3t8fX19fX19fX19f39/f39/f39/f39/f39/f35+fX19fX19fX19fXx8fHx8fHt7fHx7e319fH18fH19fn58enRvam1sb3Z7fn5+fXx6d3NtZV1fboWQkIaEh42QkY+Ni4qLjIyOk5GNiIWCfXVwZmmBioqIiImJiYmIiIqKiYmIiIaGhYWHh4eHh4eJiYqKi42MioaEgoGAf4CAgIOEhoaHh4eGhYaHiYqIh4iGhoiHh4aGhoaFhYWGh4aFhYSEhISEhISEf3ZsZWlze4CDg4KCgH58fHx9enx/gYGChIaFhYaGh4iIi4yMjIyNjY2Mi4aDg4OFh4qOkZKSkpKSkpKUko18bm1vcHN6gomSk5SVlJWVlZaWlpaTj4qBdXFzdnyGioyNjo6Pj39/fn5+fn18fHt6e3t7e3t7e3x8e3t7e3x9fX19fX19fX1+fn9/f39/f39/f39/f35+fn59fX19fX19fX19fHx8fHx8e3t8fHt7fHx7fXx8fX1+fnx5dHBsbm5yeHx+f4B+fXp4c2lfWmFwhI6OhoSGjJCRjYyLioqLjI6Tko2HhYF5cW1jZH+Ii4mKiYmJiYiIiYmIiImJhoaFhYeHhoaHh4mJiYqLjYyLh4SDg4F/f39/goSGhoeHh4aGh4iKioeHhoWFh4aGhoaGhoWFhYaGhoWFhISEhISEhYN9cmZfZW54foGBgYGBfnp6fH57fH6BgoOFhoWFhoaHiIiLjIyMjI2NjYyKhIODhIWHio6RkpKSkpKSkpSQiXdubW5wdHuCipCTlJWUlZWVlpaWlpOOiX9zcXR3foaKjY6Pj4+Pf39+fn5+fXx7e3p7e3t7e3t7fHx7e3t7fH19fX19fX19fX5+f39/f39/f39/f39/fn59fX19fX19fX19fX18fHx8fHx7e3x8e3t7e3p8fHx9fX5+e3l0cG1ub3J5fH5/gH99endxZ1pYZXSDioqFg4aMj5CNioqKioqLjZKSjIeEgXpxbGBkfIaKiYqKioqKiYmKiomJiYmIiIeHh4eGhoeHiIiIiYqMjIuHhYWEgYCAgH+ChIaGh4eHhoaHiIqJh4WEhISFhoaGhoaGhYWFhoWFhYWEhISEhISEgnxxY15eZ3F7f3+AgH99eXh8fnt8foGBg4WGh4eGhoeIiouMjIyMjY2Mi4iDg4OEhomMjpGSkpKSkpKSlI+Ec21sbnB2fIOKkJOUlZSVlZWWlpaVkoyHfHNzdXmAh4uNjo+Pjo5/f35+fn59fHt7enp7e3t7e3t8fHt7e3t8fX19fX19fX19fX1/f39/f39/f39/f399fXx8fX19fX19fX19fXx8fHx8fHt7fHx7e3t7ent8fHx8fX16eHRwbm5ucXl8fn9/fX16dW5lWFhodIGJiYWChYuOkIyKiIqJioqMkJCKh4SBfHRvYWV4hoqKi4qKioqJiYmJiIiKioiIh4eHh4aGh4aHh4iJioyNi4iHhoODgoGBgIOEhoaHh4eGh4iJiomGg4KCg4SFhYaGhoaFhYWGhYWFhYSEhISEhIOCfHJjXlpia3d+fYCAfnt4d3x+fX19gIGDhYaHh4aGh4iKjIyMjIyNjYyLh4KDg4WGiYyPkpKSkpKSkpKUi4BwbG1ucHd/ho2Rk5SVlJWVlZaWlpSRi4R5cnN1e4KHi46PkJCPj319fX18fHx8fHx7e3t7enp7e3t7e3t6ent7fX18fH19fH19fX1+f39/f39+fn5+fn5+fX1+fn19fX19fX19fX18fHt7enp7e3p6enl5enx8enx8fHx5cW1tbG5yeX9/foB/fnp0bF9ZXGpzfoeLhoOEiY6NiomJiYmJi4yOjYmHhYJ+eXNrYXCCi4uLjIyKioqKiYmIiIiIiYeIiIaGh4eIioqIiYqKi4yMi4mIhoSDgoCCgoSGhoeHh4aHiImKiYWBfoCCg4SEhYWGhoaFhoWEhIODg4SFhYWFhIN8cWVeWV1mb3Z8f356eXl5e39+fXx+goSEhYaHhoeIiYuNjY2NjY2NjIqGhIKEhYeLjpCRkpKSkpKSk5GIe25tbG1xeICHjpKUlZWUlZWVlpaWlI+LhHdzcnV9g4mKjY6Oj4+MfX19fXx8fHx9fXx8e3t6ent7e3t7e3t7fHx8fHx8fHx8fX19fX5/f39/f35+fn5+fn5+fn5+fX19fX19fX19fXx8e3t7e3t7e3t6eXl6fHx6ent7endva2tqbHJ5f39+gH9+eHBlWlleaXJ7h4qGgoSJjoyKiYmJiYmKjI2MiIeFhIN/e3NqcoCJioqLi4mJiYmJiYiIiIiJh4iIhoaHh4iKioiIiYmKi4uMi4mIhYSCgIKChIaGh4eHh4eIioqHgX16fYGDg4KDgoOEhYWGhYSEg4ODhISEhISDg3xxZF1ZW2NscXl9e3p5d3d5fn58en2BhISFhoeHh4iJi46NjY2NjY2LiIWCg4WFiIyPkZGSkpKSkpKTj4N1bG1sbnF4gYeOkpWVlZSVlZWWlpaUj4qCdXNydX6FiouNjo+PjIh9fX19e3t8fH19fHx7e3p6e3t7e3t7fHx8fHx8fHx8fHx9fX19fn5+f39/fn5+fn5+fn5+fn59fX19fX19fX19fX18fHx8e3t8fHp5eXp7e3l5ent5dW5ra2pqb3h8fn+Af3x1bGJaW2BmbnmFiYWBhIuPjomIiIiIiImLi4qHhoWGhYKAfXl8gYeJiYqKiIiJiImJiIiIiImHiIiGhoeHiIqKiYmJiYqLi4yMi4mIhoSCgoKEhoaHh4eHh4iJiYR+end6gIKBfn9/gYOEhYaFhISDg4OEg4ODg4ODfXJkXVtcYWlwd3p6enl2dnh8fHt6fYGEhYSGh4eHiImMj42NjY2NjYqHhYODhYeKjI+RkZKSkpKSkpKMf3JtbmxwdHuBiY+SlZWVlJWVlZaWlpSPioB0c3R3f4WLjY2Oj46KhX19fX17e3x8fX18fHt7enp7e3t7e3t8fH19fX18fHt7fH19fX1+fX1/f39+fn5+fn5+fn5+fn19fX19fX19fX1+fn19fHx7e3x8enl5enp6eXl5enh0bWpoaGptd3x+f39+d29oYlxfYWVsdoSIhYGEjY+OiYiIiIeHiYqKiYeGiImIhoaFg4ODh4mJioqIiImHiIiHh4eHiIaHh4aGh4eIiYmJiYmIiYqLjIyMioqIhYSCgoSGhoeHh4eHiImIhHx3d3p/gX57e3yAgYSFhoWEhIODg4SDg4ODg4N+c2ZfXl1faG91eHh6eXZ3d3p8fXt9gYSFg4aHh4eIiY2PjY2NjY2NioeEg4SHh4qMj5GRkpKSkpKSkot7bm1ubXF1fIKKkZKVlZWUlZWVlpaWlI+JfnZ0dXl/hoqOjY6OjYiBfXt7e3t7e3l7e3t7e3t6enp6enp8fHt7fX19fX19enp9fX19fX19fX5+fn5+fn5+fn5+fn19fX19fX19fX5+fn5+fX18fHx8fX17enl7enl3dnh5d3NsZ2dnaG11e39/fnpxamZjYWRjYmhzg4iGgYSOko2JiIiGhoaHiomHiIeHiImMiomGhoWGh4eIiIeHh4aIh4eHh4eIh4eHhoaGh4iJioqJiYiJiYmLi42MiomFhISEhYaGiIeHh4eIiYeCeXZ2eoB/fXl5eX1/hIWHhoSEg4ODg4ODgYGBf3x1aGFgX15mbnJ1eXx6eXh4e3t8e36BhIWEhYaIh4mKjY6OjY2NjIqJhoOChIeJi4+QkZGTk5OTk5OSiHlubW5udHl/hIyQk5WVlJSUlJWWlZWSjoh+dXV2eYGIjI6Ojo6LhX19e3t7e3t5ent7e3t7e3p6enp6ent7e3t8fHx8e3t6en19fX19fX19fn5+fn5+fn5+fn19fX19fX19fX19fn5+fn59fX5+fX18fHt6eXt6eXd2d3h2cWtnZWdoa3R6gH99dW1mZGRmZGJiZnGAh4WAg46UjomIiYeGhoaJiYeIiIiKi4+Ni4mJhoaHh4eHh4eGhYeGhoaGhoaGhoaGhoaHiImKioqJiImKiouKjIyKiYaFhYWFhoeIh4eHh4iJh4F5dXd8gX97eHh5fH+EhYaFhISDg4ODg4OBf399eXBpY2BgXmNlaG5zfHx8eHd5e3t6fH6BhYWFhoiHiYqNjo6NjY2MioeEgoKEh4qNkJGSkpOTk5OTk5GGdm1vb292fIGGjZGTlZWUlJSUlZaVlZKOh3x0dXZ6gYmLjo6OjYiAdX17e3t7e3l7e3t7e3t7enp6enp6enp7e3t7fHx7e3x8fX19fX19fX1+fn5+fn5+fn5+fHx9fX19fX19fX1+fn5+fn19fHx9fXx8ent7enp5dnV2dnVxamZjZmdpcHh/f3lxaWRkaGpmYmBjbH2HhoCCjZWQiYiJh4aGhIeJiYiIiouOkI+NjIuJh4eHh4eHh4aFh4aGhoaGhYWGhoaGhoeKiouLi4qJiouLi4uLi4qJiIeFhYaGh4iHh4eHiImHgXp2d32Bf3p3eHt9gYOFhYSEhIODg4ODg4F9fHZwamZlYmBfX2BhaXF7f3t1cG9zdnl6foGEhYWGiIeJio2Ojo2NjYyKh4OChIaIi42QkZKSk5OTk5OTj4NzbW9wcXd9g4eOj5KVlZSUlJSVlpWVkY2Ge3R1dXqDioyMjo2LhXlvfXt7e3t7enl7e3t7e3t6enp6enp6ent7e3t7e3x8fX19fX19fX19fX5+fn5+fn5+fn58fH19fX19fX19fX5+fn5+fX18fH19e3t6e3t5enl2dXZ2dHBpZWNkZmdrdX19dmplY2dtbmliXmBpfYmJgYKNlI+JiIqIhoaDhomLioqLjZCRj4yLi4qHh4eGhoeHhoWHhoaGhoaFhYaGhoaGh4qKjI2MioqKjIyLiouLiomJiIeHhoeHiIeHh4eIiYeBe3Z3foF/end5fX+Cg4WFhISEg4ODg4ODgXx4bWRiY2ViYWBgYGBmcXt9eXBpZWhtc3h8gYOGhYaIh4mKjY6OjY2NjIqFg4OFhouLjZCRkZGTk5OTk5OOgnBucHByeH6DiY6OkZWVlJSUlJWWlZWQjIR6c3V0eoOKjYyOjIqCdW17e3l5enp6enp6eXl6enl5eXl6enp6e3t7e3t7e3t7e319fX19fX19fX19fX19fX19fXx8fX19fX19fHx+f4CAfX19fX19fHx7enp6eXl5eXZ2dHRybmdiYmNnZWhyenpyaWNmbHFwb2ZfXmZ8jY2DgIuUj4iIiYmFhISFh4mLi4uOkpGPjYuMjYmIhoaGhoaFhYWFhYWEhIWFhoaGhoaHiYqNjo2Mi4yMjIuLi4mKiYqIh4eGh4eIiIiHh4iHhoF8eXt+gX98ent+goOEhYODhIOEg4ODgoKAe21XS1FdZWNhYGFgX2Vud3lzbmdiXl5ncneAgYSEhoiGiYuNjo6NjYyLh4WCg4SGioyOkJCRkZOTk5OSkYx9cG5wcHR4foWLjpCSlZWUlJSUlZWUk5CLgnl2dnh+hYmMjY6Lh3twa3t7eXl6enp6eXl6enp5eXl5eXp6enp7e3t7e3t7e3t7fX19fX19fX19fX19fX19fX19fHx8fHx8fX18fH5/f399fX19fX18fHt6enp5eXh4dnZ0c3FsZmFiZGlnaG93eHFpZ2xyd3Zya2NeZX2Pj4OAipGNiIiJiYWDgoKFiIuLjJGSkpGQjIyNioeGhoaGhoWFhYWFhYSEhYWFhYWFhoeJio2OjY2Mjo2Mi4yLiYqJiomHh4iIiYiIiIeHiIeGgXx7fX6DgHx7e3+Dg4WFhIWEg4SDg4OCgn94Zk1CTFtlZGFgYWBgYmhucW9sZmBcVllfanJ3foKHiIaJi42Ojo2NjIqHhIKDg4iKjY+QkJGRk5OTk5KPiXpxbnBxdXp/hoyOkZOVlZSUlJSVlZSTj4l/dnZ2eYCGioyNjYqCd25se3t7e3p6eXl5eXl5enl5eXl5eXl5eXp6e3t7e3t7e3t9fX19fX19fX19fX19fX19fX18fHx8fHx9fX5+fn9+fn19fn59fXx8e3p6enl5eHh3d3RzcGtlYmNmaWloa3R3cWprcHd7enVwZ2Fnf5CRhoGIkI6IiImJh4aCgYSGiYmMkJGTk5KOjY2LiIeGhoaGhYWFhYWFhISEhISEhISGh4mKjY6Ojo2Oj46NjoyKiYmJioeHiIiJiIiIh4eIh4aBfnx+gIGAfXx9gIODg4SEg4KDg4ODg4KCfnVlVVJbYmZkYmFhZGRiZGdsbGhlXlpVUFVfYWl1gYaIh4mLjY6OjYyMiYaEgoOEiYuNj5CRkZKTk5OTkpCGeHFycXR4fICHjY+Rk5WVlJSUlJWVlJKPh3x2d3d6gIeKjI6Nh31zbWt7e3t7enp4eHp6eXl5eXl4eXl4eHh4eXl7e3t7e3t7e319fX19fX19fX19fX19fX19fXx8e3t7e319fn5+f35+fX1/f319fHx7enp6eXl3d3h4dHNvamViY2dpamlpcXVza2tyen59enRrZm2AkZSHgYaOjIiIiYmHhoOCg4WIiIqNkZOUk5CNjYyIhoaGhoaFhYWFhYWEhIODhISEhIaHiIqNjo+Pjo2QkY+PjIqKiYmKh4eHiImIiIiJiYiHhoF/foCBgYF9fH+Cg4ODg4GBgYGCg4ODgoJ+dWdkaWtqaGViYmJmZmRhZGprZ2JcWFRRWlhYXm19hImIiYuNjo6NjIyIhYOCg4SJjI6QkJGTlJOTk5OUkIJ0cXRzdnp/gYeOj5KTlZWUlJSUlZWUko+HfHV4eHqAh4uMjYyGenBtant7enp5eXl5eXl6enh4d3d4eHl5eHh6ent8fHx8fHt7fX19fX19fHx9fX19fX19fX19fHx8fHx8fH59fX19fX1+fn5+fnx9fHt5eHh5eXh4eHd1cm9oY2FjaWxrZ2Vsc3JvcXV7gH9+eXBscIKQk4mCg4qMiIaIiIeGhIKDhYeHi42QkpSTkY6OjIiGhoWGhoaGhoaFhYSEg4OEhIODhIaIio6NjY2OjpCQkZCOjYuKiIiHiIaHiIiJiYiIiIeFgX5+gYKCgn9/gYODgoKBgH99f4GCgYGCgn12b3B6eXRsaGNjZWppZGFjZWdmYVlUUE9WVFBUZnqEhoiKi42Ojo2MiYaDg4OEhoqMjY+QkZOSk5OSk5OOgnRzdHR4fH6CiY6QkpOUlJSUlZWVlZSRj4d8d3h4e4KHiY2MioF2bW1tenp5eXl5eXl5eXl5eHh3d3h4eXl5eXp6e3x8fHx8fHx9fX19fX18fH5+fn59fX5+fX18fHx8fHx8fn19fX1+fn5+fn5+fH18e3l4eHl5eXl4d3Zzb2ljYGVqbm5qZ2twcG9wdHyAgYF9dnF0gpCWjIOCiYyIh4iIh4aEgoOEhoaJi4+SlJSSkI6MioeGhYWFh4eGhoWFhISDg4SEg4OEhoeJjIyNjY6OkJCSkZCPi4uJiIaGhoiIiImJiIiIh4SCgICDgoSDf3x+goODgoB8end7fYB/f4GBfnp3e4GAeXBoZGRobGtlYWJiZGJdVFBLS01STk1dcX2Dh4mLjY6OjYuHhYKCg4SHi42Oj5GRk5KTk5KTk4t/dXNzdHl9foKKj5GSlJSUlJSVlZWVlJGNhHt3eHd8g4iLjIuHfHFtb3B6enl5eHh5eXl5eXl4d3l5eXl5eXl5enp6e3x8fHx9fX19fX19fX5+fn5+fn19fn59fXx8fHx8fHx+fX1+fn5+fn5+fn58fXx7eXp5eXl6enh3dnRvamViZ21xcW5pa3Fxb21xeX+Bgn95c3WCkJiRg4CHi4mIiIiHhoWDgoOFhYeKjZCSlJKRj42KhoSFhYWHh4aGhYWEhIODhISDg4SGhoiJioyNjo6QkpKTkZCNjIqIhYWEhoaIiYmIiIiHhIOCgoSEg4F7dHR6foGAfXVxcXR4fHx8fX1/fn6Ag4B4b2djZGhvbmljYmBgXFVNSUdIQkxLTFhndH+GiYuMjY2MiYaDgoGDhYeLjY+QkZGTkpOTkpOSiXx0c3N0eX1/goqPkZKUlJSUlJWVlZWUkYuCeXZ5eH2Fi42LiYN5cG1wcnl5eHh3d3l5eXl4eHd3eXl6enl5enp6enl7fHx8fH19fX19fX19fn59fX19fX19fX19fHx8fHx8fH59fX9+f39+fn5+fnx9fHt5enp7e3l5eHd1cm9rZ2VpbnNzcGxrcHFva252fYGDgXt1d4KQmZKEfoWKioiIiIeGhYSCg4WFh4mLjpGUkpOQjIeEg4WGhoaGh4eFhYSEg4OEhIODhIaGiIeJjI2OjpCSk5ORkY+Ni4mFhIODhYiJiYiIiIeDg4SEhISBfXRvbnJ3fX16cm1rb3R4eXl5eX1/g4ODfnVtZ2NjZ3Bva2VhXltWTkdFQD5FSkhHU15se4WHiouMjIuIhYKCgYOFh4yOj5GRkZOTk5OSk5CHe3NycnR5f4CDi5CRkpSUlJSUlZWVlZSRjIJ3dnl5foaKjYuGfnVvb3F0eXl5eXd3d3d4eHd5eHh5eXp6enp4eXp6ent8fHx8fX19fX19fn59fX19fHx8fHt7fX18fHx8fHx9fX5+f39/f399fH99fHt7e3p7e3x8enh4d3ZzbmpnZmpwc3Vxbmtub25paXN9goJ/fHd4g5CYk4V9g4iJiYmJiIeFhIKDhYWEh4mLkJKRkY6Nh3+Bg4WFhoaHh4aGhYWEg4KCg4OEhISFh4iKjI+OkJGSkZKSkpCMiYaFg4GEh4iIiIiHhoWFhYSHhHxybGhoaWxzdnZxbWpqb3J0c3J0eX2Bg4F9c2pjYmFlb3BsZWFcWVRMQTw3OD9GQ0BJVmd3goaJiouLiomEgIKDhIaJjI2QkZKSkpKTk5KTjoR3cXJzdXp+foOKkJGTlJSUlJSUlJWVk5KKgXd2eXl/houNioJ3cG5xdHV4eHh4d3d3d3h4d3l4eHl5enp5eXh5enp7e3t7fHx8fH19fX1+fn19fX18fHx8e3t9fXx8fHx8fH1+fn5/f39/f318fX18e3t7e3x8fHx6eHh3dXJuamZmaXB0dXJuamtra2dlcHyBgn97d3eCj5aShX2AhoiJiYmJiIWEg4SFh4SGiIqOkJCOjYl/c3mBg4WFhYaGhoaGhoSDgoKDg4SEhIWGiImKjY2PkJGRkZOUko6MiIaEf32ChYeHiIeGhoaFhoV/cmloZ2ZmZ2tzdHFua2hqbG9ubnB2fICBgX10amNiYWRscG5nYlxaVUxCNjM1PUdFQ0lVY256goiJi4uKh4KAgYOFiIqMjpCRkpKSkpOTlJSNgXVyc3Z3fH5+g4qQkZOUlJSUlJSUlZWTkIl/eHd5eoCGjIyIf3RtbnF2d3h4d3d3d3d3eHh3eXh4eXl5eXl5eHl6enp6enp8fHx8fX19fX5+fX19fXx8fHx7e319fHx8fHx8fX1+fn9/f39/fXx8fHt7e3t7fHx8fHp4eHd1cm5qZWVob3R1c29qampqZGNteoCBgHp2doCNlZKHfXyChoiJiYmIhoWEhoiHhYaGiIuOjo6LhHRmcH6ChIWFhoaFhYaGhIOCgoODg4ODhIaHiImKi46PkJGRkpSTkI6KiIV8d3uAhIWHh4aGhoSFgXdsaGhmZWZnaW90dHFsaGRlaGloanN8gIGBf3VqZmNhYmpxcGliXFpVTkc+OTtETExOVFFTZnJ+homLi4mGgoCBg4aJi42PkJGSkpKSk5SUkot+dXN0dnh9fn6CjJCRk5SUlJSUlJSVlZKOiH13eHl6gYeLi4R8cW1uc3h7d3d3d3d3d3d4eHd5eHh5eXh4eHh4eXp6enp6enx8fX19fX19fn59fX19fHx8fHt7fX18fHx8fHx8fH5+f39/f399fHt8ent7e3t8fHx8enh4d3ZzbmplZGhvdHV1cGxrampkZGx5gIGAenZ1f4yUkoh9fYKFiImJiYiHhYWIioiHhoWHio2MjYmAbF5me4GDhISFhYWFhoaEg4KCg4ODg4KEhYaIiYqKjY6QkZCTlZOQjYyKh3x1dXyDhIeHhoaGgoN/c2xra2lnZ2ZobnV2c21oYmJjZGJncXyAgoJ/dWtoZGFhanNzbGVeWVVRTEtHSUxQUlhdTD5caXuFiYqJh4WBf4KDhoqMjo+QkZKSkpKUlJSRiX1zc3N1eH5+foKNkJGTlJSUlJSUlJWVko6IfXZ4eXyBh4uLg3lxbW90eX53d3Z2d3d3d3d3d3d3d3l5eHh5eXl6enp6eXp6e3t8fH19fX19fX19fX19e3t7e3t8fH19e3t9fX19fX1/f39/fnx7enp5eXx8fHx7e3t7enl4dnNva2RjZm5zd3d0b2tramZjand/gH95dHWAjJKTioB9f4SIiIiJiYeGh4yMioaFhYaJi4qLhXhnWVx1f4KEhIOEhYWGhYOBgoGCgoKCg4SFhYeIiIqNjpCRkZGTk5GPjoyIf3Nyd36Dh4aHhoeEgnpxbm9va2lpaWltdHZ1bWhjYmBfYGVyfIKEhIF3bGhlYmJseXlxamNeW1dUV1lXVlhTWF9ILkVidoWLioiFgYCAg4SGio2Pj4+QkpKRkpSUlJGIenBwcnV6fH1+g42QkZKTlJSUlJOVlZWSjYV9d3h5fIKIioh+dW9ubXR8f3Z2dnZ3d3d3d3d3d3d3eHh4eHl5enp6enp5enl7e3x8fX19fX19fX18fH18fHx8fHt7fHx8fH19fX1+f4CAgIB+enh4eHh5fHt7fHt7e3t7enl2c29sZWJjbHF1d3ZwbGxqZ2Rod4CCfnl0doGMkpOOhX5+g4eIiImJh4eIjo6Nh4WDhIWGhYN+cmRWU2x8gYSEg4SFhYaEg4GCgIGBgYGDg4SEhYaHio2Oj5GRkZCRkZGPjYiCdXJzdn6EhIaGh4WBeHNzc3JvbWtram1zd3dzbmhkYWFgZ3R+g4SEg3twamZjZHB6eXNsZWJeW1hbXl1cV1heXkgrNFJpfIeIiIGAf4GDhYeLjo+Pj5CSkpGSlJSUkoZ5cXFydXl7fX6EjJCRkpOUlJSUk5WVlZGNhHp2eXp8g4iKhntzb29yeH2AdXV2dnd3d3d3d3d3d3d3d3h4eXl6enp6enh5eXt7fHx9fX19fX18fHx8fH19fXx8e3t7e319fX19fYCAgYF/f356d3Z1dXh7e3t8e3t7e3t7enZzb2xmYmJobnJ3dnNva2pnY2Z1fn95d3N2gYySk46Hf32BhoeHiYmJiYqPkJCLiIJ/fn1+e3ZrYVRPXnqAhISDhIWFhYODgYGAgYGCgoKDg4OFhoeJjY6PkZGRj4+PkJCOioN4cXNzeYCBg4WGhH93dXN0dXV0b21qbHN3d3ZybWhlZWRqdn+Cg4ODfXJsZmJmc3p4c2tlZF9dXF1iZGNcXV9aPyswQ1hsfoWGgoCAgYOFiIyOj4+PkJKSkpOVlZSRhHhxcXJ1enx9foSMkJGSk5SUlJSTlZWVkIyDeXZ5en6DiIqDeXFwcXR7gIF1dXZ2d3d3d3d3d3d3d3d3eHh5eXp6enp6eHl5e3t8fH19fX19fXt7e3t7fX19e3t6ent7fX19fX1+fn5/f39/fXl2dXR0eHp8e3x7e3t7e3p5dnNva2ZkYmhucnZ3dXFramdjY3B6e3ZzcXWBjJKTjod/fYCFh4eJiYmJi5CRkoyIg356dnh3cmdfVE1Vc3+EhIOEhYWEg4OBgH+AgIGBgoODg4WGh4mNjpCQkZCOjo6PkI6KhHhwcHJ3fH+AhYaDfnh0dHN3e3lzbmprcnZ2dXRwbWlpaW51foGChIR9c2tlYWVxendza2ZlYV5eXmRpaGNhXlQ5MThFUGJ5hIaFg4ODhIWKjY+Pj4+QkpKTlJWVk5GCd3BvcXR7fX1+hY+QkZKTlJSUlJOVlZWQi4J6d3l5fYOJiIF3cHFyd32Cg3R0dnZ3d3d3dnZ4eHd3dnZ3d3l5enp6enp5eXl6e3x8fHx7fH17fHx8fH19fX18fHt7fHx9fX19fX5+f4B+fn59endzcXN2enx9fHx8fHt6e3l4dXFsZ2JjaW5zdXZ0cm5raWRhanN0cHBydoKNkpKQiYF8f4SHiIiIiIqNkpOTkYqDeXFscHJtZmBUS05mfIOEg4SEhYODg4KBf39/gYGBgoKDhIaHiIuMjY+Mi4qKiImKiYmEdm5ucnV5fH+Bg4F8eHd0dHyAfnVwbW5xdXZ1dHNwb21tcHV+goODg3tya2RfY3B3dnNuaGNiYWFiZ2psamRcTjk3RExVa4CHiIeLiYmHh4yOjo+Pj5CSkpKTlZWUj4Bzb29vdXp+fX+Hj5GRkpOUlJSUk5SVk5CJgXp3eHl+hYuGe3VwcXJ4gYaDdXV2dnZ2d3d3d3h4d3d3d3h4eXl6enp6enp6enp7e3t8fHt8fXt9fH19fXx8fH19fHx8fH19fX19fn5/gH9/f3x6d3NxcnV5fH19fX19e3p6eXl2c25mYmNrcHR2d3Vzb2xqZV9lbm1sbXN2g42SkpCKgn1/hYeIiIiJio+TlJSTi4N6bGVoa2plYFVMR1d3gIWFhYSFhISDgoGAgICBgYCCgoODhYeIiouKiYeHhYWEg4WGh4J4b25ydXl6e36Afnp5eHZ5gISBeHFucHJ2d3d3dXJxb25yd36ChIODe3JtZWBkcXd4dXBpZWVjY2RnaWpmYFhJOjpIWm+DjImKio+NiomKjY6Oj4+PkJKSkpOUlJSPfnBvbm92e359gIiPkpGSk5SUlJSUlJWTkImAenh4eX+GioF4c3Fyc3uEiIV2dnZ2dnZ3d3h4eHh3d3h4eXl5eXp6enp6enp6e3x7e3x8fX59fH18fX18e3x8fX18fHx8fX19fX1+fn+AgICAfHp3c3Fxc3d7fH5+fn58e3p5eHZybWViZW1wdnh4dnVwbGtmX2JqaWltcneDjZKSj4qEf3+Fh4iIh4iKkJWVlpONhnxtZmdqaWReVk5GTm99hYWFhIWFhYSCgoGBgYGBf4GBgoOEh4iIiIaGhYWDhISDhIWDgnpzcHJ1eXp5ent6d3l4en+ChYJ6cW9ydXh4d3d3dXJwcHR5f4GDg4N9c21mYWdzent1cWpnZ2ZlZGVkZGJeVUU5PVRxg5CQjoyJhoSEhIiMjo2Pj4+QkpKSk5OTlI9+cXBvb3Z8f32AiZCSkZKTlJSUlJSUlZOPiH95eXl6gIaGfnVyc3R2foeIg3Z2dnZ1dXd3eHh4eHh4eXl5eXl5enp6enp6e3t7fXx8fHx+fn17e3t9fXx7e3t8fHx8fHx9fX19fX5+f4CCgIB8e3dzcXBzdnt8fn5/f3x7enl2dHBrZWNnb3F3eHh4d3BtamVhY2doaG5zeYONkpKPi4V/f4WHiIiHiIyQlpaYlJCIfXJpZ21qZVtWUEhIYnqDhYWEhYWFhYOCgYGBgYF/gICCg4SGh4eFhoaGhIOEhIODg4KCfHZxcnV5enp6enl4eXh8gYOEgnpycHN3enh3d3Z2dHJydXuAgYSDg310bGRiaXV8enRxampqZmNiYGBfYF1SRD1CX4GPlJOQjYd+e3x+g4mNjY+Pj5CSkpKTk5OUj351cW9vdnyAfoCJkJKRkpOUlJSUlJSVk4+Ifnp5enuAhYR8cnFydXmBioqEdXV2dnV1dXZ3d3h4eHh4eHl5eXl5eXl6e3t8fHt8fHx9fX5+fHx8e3x8fHt7e3t7e3t8fHx8fHx8fX+AgYGAgH59enZycXF1eXx+gH99fHh3dXVyb2llZWlwdHZ4eHh2c3BuaWVmaWtqb3N6hI+SkZCOiYB/hIeIiIiJjJOXmJeTkYqBdGtoaWljW1NOSEZTd4GFhYWFhYSFg4OCgYCAgICAgIGDhIaHhoWHhoWFhISFhYSCgoOAeXVydXh6eXp7eXl6eHyBhYaCenNwc3l8enh3d3d1c3J2fICCg4SDfHRrZWNteHx5dHFtbGxnYmJiYV5gX1NJRU1nhZKXl5WJgHl2eHl5fYaMj4+PkJGRkpOTk5SNe3Rwb3B3fX9+gYqQkpKTk5SUlJSVlZWTj4V+e3p5e4GDgXdycXR2eoOMiYN1dXZ2dXV1dnd3eHh4eHh4eHh5eXl5eXp7e3t7e3x8fH59fX18fHx7fHx8fHt7e3t7e3t7fHx8fHx+f4CBgYCAf357d3JxcHR4fH1/fnt3c3JwcG5uaGVna3B2d3d5eXd1cm9sbGxucW5ucXqEj5GRkZCKgn+Eh4iIiIqNlJiZmJOSjYV5cGxpZWNbUk9IQkhsfYSFhYWFhIWDg4KCgIGBgYGBgoOFhYWGhoeFhYWEhIWFhIKEg4F9d3N1eHl5ent5eXp5e3+Fh4N6c3F0e317end3eXd1dXh9gIODhYJ7c2tlZW53endycG5tbWhiYmNjYGFgVk9MU22Kl5yclIN8d3R2dXJ0gIyQkI+QkZGSk5OUlIx5c3FvcXh+f3yAi5CTkpOUlJSUlJWVlZKNhX16enl7gIF8c3FydHZ8hIyIgnV1dnZ1dXV2d3d4eHh4eHh3d3l5eXl5ent7e3t7fHx8fXx8fHx8fXx7fHt7e3t7e3t7e3t8fHx8fn9/gIGBgIB/fnt3cnFwcnh7fHx4dXFta2lpamlmZWhtcnZ3dnh4eXh1cW9xcnR2cG1xeYKNkZGTkYuDf4SHiIeJjJCVmJqZlJOPiX91bmhkYl1WUEpCRFx6goaFhYWEhYODgoOBgYGBgYGChIWEhYeGh4eHhYSEhYWEhISCgYB8dnR3eXl7e3t7e3p8f4OFg3lzcXV9fXx7eXl5eHV2en2BgoOEgXlxa2Vmbnd5dG9sbG1taWRiY2ZiYmBZUk9XcIuYnp6OgHp5dnVyb214iJCQj5CRkZKTk5SUiHhxcHByeX5/fICLkJOSk5SUlJSUlZWUkYuEfHp6eXt/gHl0cXN2eoCJi4aAdXV2dnV1dXZ3d3h4eHh4eHd3eXl5eXl6enp6ent8fHx9fHx8fHx9fHt7e3p7e3t7e3t8fHx8fHx+f3+AgYGAgH9+fHdycXBxd3t7enJwamZlY2RnZ2RkaW51dnl3eHd5d3VzcXR3d3hzcHJ3gYyQkpWTjIR/hIeIiIqNkZWZmpqUlJCLgnduaWVhXlhRTURBT3R/hoWFhYSFg4OCg4KCgoKCgoOEhYaHiIiHhoaHhYWHhYSEg4KBgX53dHZ5eXp7fHx7eX2AgoOBeHNxdn5/fnx6enh4d3V5foKCg4SBeXBrZWZveHpybWtqbGxqZmJjZWNjYVtTUllxi5qhn4t/ent4c3FtaW+Dj4+PkJGRkpOTlJSGeHBvb3J6fn99gYuQk5KTlJSUlJSVlZSRjIN8enp5fH99dnR0dHh8g4uLhX91dXV1dXV1dnd3d3h4eHd3eHh4eHh4eXl6enl5ent7ent7e3t7e3x6e3t6e3x8e3t7e3x8e319fX1+fn9/f35+f398eHNubm92e3p4cWplYWBfXV9hY2dtcnV3eHh4eHp4dnNwdHl7e3Nvc3iAi5KUlJKOhICCiImKiY2PlJmamZaUkIyEfXNsaGRgWlNMRkBGZ3yEhYSEhIODg4OCgoODgoOChISFhoaGhoWGhoaGh4aHhoSEg4ODgnt1dXh5enp9fHt8f3+Agn53cXB2f4GBgH9+e3l3dnl+gYODg4B2b2tlZ3N8enNuaWhqamxnY2RlZGFiXldWXXOKmqCfioB/gHl1cWxmZXaLj5GRkZGSk5OUk4d4b29wcnl9fX2CjJGTk5OUlJSUlJWVk4+Kg3t5enh7fnt0cnN1eH+DjImCf3V1dXV1dXV2d3d3eHh4d3d3d3h4eHh5eXp6eXl5ent6e3t7e3t7fHp7e3p8fHx7e3t7fHx7fX5+fX5+f39/f39/f3x6dG5ub3V6eXdwaGFfX15aXGBjaW91dXh4eHh5e3l3dHF0en18c29zd4GNk5WUko+GgIKHiouLjo+UmJqZl5ORjYeCeXRwamRdVU1IQUBVdoGFhISDg4ODg4ODhIOChIKEhYeGhoaGhYaGhoeHh4eIhoWDhIOCfnh2eHl7e358e31/f319fHZwcXeBgoOCgoF9enh3eX6Bg4ODfnRvamRnc3t5dG1oZ2lqbGdkZmhlYmNgW1thdImYn56NhIOCe3RvaWVgaoOOkZGRkZKTlJSSh3dvcHFzeX19fYONkZSUlJSUlJSUlZWTj4mBenl6eHp8d3Jyc3Z6goeMh4F+dHR1dXV1dXZ3d3d4eHh3d3d3eHh4eHl5enp5eXl6enl7e3t7e3t8ent7enx8fHt7e3t8fHt9fn59fn5/f3+AgH9/fXt1cG5vc3h4c2tlYWJjYV5dX2RrcnZ3eHh4eHl7eXd0cXN5fHtybnJ2gI2SlJSUkouEg4eJjIyQkZaXmZiWkpGOiYZ/endwZ15YUEdAPUlre4OEgoKDg4ODg4OEhISEg4OFhoaGhoaHh4aHiYiJiYmIhoSEgYKBe3h5e3t7fnx7fYCAfXp5c3BxeIGDg4SEg399eXh5foGDg4N+dG9pY2dze3l1bGhnaWxraGdoaGZkYl9eXmNzh5adm5CJhIF5cWllY15jeIqQkZGRkpOUlJCFd3FycnR7f319hI6RlJSUlJSUlJSVlZOPioB7enp4eHl2cXN1eH6FioqGgX9zc3V1dXV1dnd3d3h4eHd3dnZ4eHh4eXl6enl5eHl6eXt7e3t7e3x6e3t6fHx8e3t7e3x8e31+fn1+fn9/f4CAf39/fHdxbm9xdnZxaGRjZWdlYWBhZ250d3l4eHh4eXt5eHVxdHh8e3FucnZ9i5GSlJaTjYaFhomMjJCRlpeZl5WSj4yKiIN/enJpYVtTR0A8RV55gYSCgoODg4ODhISGhoSDg4SFhoeIh4iIh4iKiomJiYiGhIOBgoJ9enp7fHx+fHt9gYF9eXZxb3F5gYODhISDgn96eHp+gYODg31zbmljaXV+e3ZsaGhpbmtoaGpnZWVjXl9fZHOHkZqYkIqGf3duZWFgXl9uhJCRkZGSk5SUj4R2cXN0dnyAfX2FjpGUlJSUlJSUlJWVk4+Jf3t8e3l3dnRzdHZ6gIaLiYSBfnNzdXV1dXV2eHh4eXl5d3d3d3h4eXl5eXp6enp5ent7e3t7e3t7e3t7e3t7e3t7e3x8fHx8fH5+fX5/gH9/f39/f399eXNwcHB1dW9mZGdsbmtlY2VtcnV4eXh4eXl6enl4dHJ0eHx6cW5xdXuHjpGUlJWQi4aGiIuNkJKUlZeVk5GPi4mIhYF8c2lhWlZMRD5DVHN9gYKCgYODg4KDhIaGhYODhIaIiIqIiIiIi42Mi4qIh4aFhIKCgn17e3x8fH99fH6AgHx4dXFvcXqBhISDg4KCgX17fX+Bg4SEfHNtZ2NpdX18d29raGpsa2xtbWpmZWNgX2JkcYCOl5WPiYWBd25kXl1cW2V8jpKRkZKTlJSNgHVyc3N0fH9+foWPkpSUlJSUlJOVlpWTj4V9en18eHV1c3N1eHuBiYmHhYJ/dnZ2dnV1dXZ3d3h4eHh3d3h4eHh5eXl5enp6enp6e3x7e3t7e3t7e3t7e3t7e3t7fX18fHx8fX1+f3+Af39/f39/gH56c3Bub3Fzb2dla3F1cmtnZ250d3l5eHh5eXl5eXh1dHR3e3p0cXF0eISLj5KUlZORioeIi4+RkpSVlpWTkY6KiYiFg352a2FbWFFIQUFLZHqAhIOBg4ODg4OFh4aGhISFiImJiomJiYuNjoyLioiHhoaFgoKDf3t8fHx8f358foCAfXp1cXFye4GEhISDgoKCf35/gIKDhYN7cm1lZGt3fXx3cWxpamtsbm9vbGhmZWJhY2VteIWPkY2IhIJ6cGZeXVxbX3OJj5GRkpOUlI6AdHFxcHR8f35+h5CRlJSUlJSUk5WUlZOPhX17fn14dHNyc3V4foSLioiFgn92dnZ2dXV1dnd3eHh3d3d3eHh4eHl5eXl6enp6e3t7fHt7e3t7e3t7e3t7e3t7e3t9fXx8fHx9fX+Af4B/f39/f3+AgHx0cG1sb3JuaGhtdHl4cWpobnR3eXl4eHl5eXl7eXZ0dHd6eXNwcXJ3gYiNj5KVlpKNiYuNkJGSk5SVlJKQjYqIh4eFgHhuZV1YVU1HQ0ZWdICDg4GDg4ODg4WGiIeGhIeJiomLiYmLjY+OjIqJh4aFhYWCgoN/fHx8fHx+fXx+goF/fHVxcHN+g4WFhISCgoKBgYGBgoSFg3pybGNkbHh9fHhzb2tqa25vb29sampnZGNkZmxyfomNioWCgX10aWFfX11caoOPkZGSk5SUj4FzcG9udHx/fn6Gj5GUlJSUlJSTlZOVko6Ffnx+fnhzcXFydHiAh4qKh4WBf3R0dXV1dXV2dnZ3d3d3d3d4eHh4eXl5eXp6enp8fHx8e3t7e3t7e3t7e3t7e3t7e3x8fHx8fHx8fX5/gH9/f39/f4CBfnhybmxucG5naW12e3tzbWxwdXh5eXh4eXl6enp5dnR0dnp5c3BxcXeBhYmNkZeXlY6LjY+QkZKSlJWUkY+MiYiGhYaDfHNrX1lWUUxGRVBnfYGCgYODg4ODhIaIiIeFh4mKiouKi4yOkI2MiomHhYWFhoOCg398fHx8fH58fH6BgX16dXFwc36Eh4aFhIOCgoKDg4GChIaCeXBsYmNteX18eHRwbW1rbW5ubm5sbGplZGRmbG95hYqHg4F/e3NrYV5gXl1mfY6RkZKTlJSNgHNwb250fH9+foSOkZSUlJSUlJOVlJSSjYN9fH5+d3JvcnJ0en+IioqHhIJ/c3R1dXR1dXZ1dXZ3d3d4eHl5eXl4eHl5eXl6ent7e3t6ent7e3t8fHt7e3t7e3t7fHx8fHx8fX18f39/gIB/f39/f4GAfXNtamttamdncXl7eXZzcHR5enl4eXl5eXp6enp4d3V1eHh1cXFyd4CFh42Rl5eTj42Njo+RkpKUk5GQjoyJh4aFhIN/eXFkWVdYUUxHTF54goSCgoKDg4KEhYiKiYiIiYmLi4uNj4+Qj42LioaGhYSGg4ODgH18fHx8fXx9f4KCf3t0cXJzfYWGh4eGhIKDg4SEhYaGhoJ3cGxmZ3F7fnx4d3RvbmxsbW9tbW9vbWlnaGttbXR+hISEgH54c2lfX2FhYGJ1jJKRk5OUk4t8cm9xcXV9gH99hY+TlZWVlZWVk5WVlZKLg317fn14cW9zc3V8gYmKiIeFgX5zdHV1dXZ1dXV1dnd4eHh4eXl5eXh4eXl5eXl6e3t7e3p6e3t7e3t6e3t7e3t7e3t8fHx8fX19fXx/f3+AgH9/f39/gYB+d29qa2tnZWZxeX99end2eHp6eXh5eXl5enp6eXl4dXV4eHRwcHF2foSGjZKXl5OQjY2Nj5GSk5STkZCOjImHhoWEg4J9c2ZYV1hTUE9RW3F/goODgoKDgYOFioyMiomKiouMjI6RkZGRj4uIhYWFhIWEg4OBfn19fX1+fXx/hISAe3RycnR8g4aHh4aFhIODhYWGh4aGgHVvbGdoc3x9enh4dnFwbmxtcW9ucHBva2lqbW9vdX2Cg4N/fXhvZV9gY2JgXm6IkpGSlJSTjH1yb29vdn6Af32Fj5OVlZWVlZWTlZWUkoqDfX2AfHdxb3J0dXyDiYmIh4aBfnN0dXV2dnZ2dnZ3eHl5eHh5eXl5eHh5eXl5eXl6enp6enp7e3p6e3t7e3t7e3t7e3x8fHx+fn19fn5/f4CAf3+AgH+BgH55b2traGRiZW93fn17eXl6e3t6eXl5eXl6enp5enl2dnh5dHBucXZ9goWNlJeXk5CNjYyOkJGTlJORj42LiIaGhYSDg4F8b1xVVVZVU1JaaHqBg4OCgYGAg4aMj46Ni4qLjI6Oj5KTkZCPi4eEhYSEhISEhIN/fn5/f318e3+EhIB7dXJxdHyChYaHh4eEg4OEhIaHhoZ9cm1pZmlzfXx5eHh2c3Bvbm5ycnFxcHBvbW9yc3N3eX2Bfnp6d29lX19iZGFfbIORkpOUlJOLfHJvb293f39+fYWRlJWVlZWVlZOVlJSRioN9fX56dXFvcXV4f4WIiIeHhoF+c3R1dXZ2d3d3d3d5eXl4eHl5eXl4eHl5eXl5eXp6enp6ent7eXl6e3t7e3t7e3t7fHx8fH19fn5+fX5+gIB/f4GBf4GAfnxwamplYl9kb3Z7e3t7e3t8fHt5eXl7e3p6ent6end3d3p0cG5xeH6Cho2VlpSTkI2NjI2PkZKUk5GOjIqHhoaFhISChIN5ZldSVlhWU1tjc3+DgoGBgICChoyOjoyLiouMj46PkZSTkY6Kh4OEg4SEg4WFhH9+foCAe3p6f4ODgHt1cnB1foOEhYaGh4aDg4SEhoeGhntwbWlmanR9fXp4eHZ1cXBubnR1c3FwcnFwcnV2dnZ2eX17d3l2b2RfX2BkZWFsf4+RkpSUk4l7cm9wcXiAf319hZGUlZWVlZWVk5WVk5CKg319fXl0cW9xdXqBh4iIh4eGgX5yc3R0dXV3d3d3dnh5eXd3eHh4eHd3eHh4eXl5enp6enp6enp5enp6fHx7e3t7e3t7e3t9fn5+fn5+f39+fn5+f39+gIF/e3Zva2ZiXmBqc3p9fn19fHt7e3l5eXt7enp7e3t5d3Z2d3VxbnJ7foKHj5WVlJOQjo2NjY6RkpSTko+MiYiFhIWEhIOFhoF2YlVWWlpaWV9sfIGCgX9/gYOGjI6OjIuKi4yPj4+SlJOPjIiGhISEg4SEhYWFgn5+fX58enp/hISAfHZxcHZ/g4aGhoeIh4SBgoKFhYWDeW5tamZrdnx9e3l3d3dycG9vc3RycHFycXBxdXh4dHF0d3Z0dHBrY15eYmVnZWp5ipCQkZSSiXpycHBweH9/fnyGkJOVlZWVlZWUlZWTkYuCfn5+dnNvb3J0eoOIiIiIiIWCf3BxdHR1dXZ3d3d2eHh4d3d4eHh4d3d4eHh5eXl6enp6enp6ent6enp7e3t7e3t7e3x8e31+fn5+fn5/f35+f39/f3+AgH99enNtaGJdXmZxen5+fn18e3t7eXl5e3t6ent7e3l4dnZ3dnVydn2Ag4iQlZaUlJCOjYyMjpGSlJSSj4yJiIWEhISEhIaHhX9xYFdXXV9cXmh3f4OAf3+Ag4aMj4+NjIyNjpCQkJGUko6Jh4aGhoWFhoWFhYWDfn59f3x6en+EhIB9dnFweICEhoeHiIiIhYGCgoWFhYF3bGxpZ255fn16eXh4eHV0cHBzdXJvcXNxcHB0dnZybnFycnFwbmtlXl1gZGhoaXWFi46Pk5GHeHJxcHB4f39+fYaQk5WVlZWVlZWVlZOQiYF+fn12cm5vcnR8hYiIiIiJhoJ/b3F0dHR1dnd3d3Z4d3d3d3h4eHh3d3h4d3l5eXp6enp6enp6e3p6ent7e3t7e3t7fX17fX5+fn5+fn9/fn5/f4CAgH9/gIB9eHFqZWBeZHB6fn5+fXx6enp7eXl7e3p6e3t7eXl3d3h4eHh8f4KGio6RlJWUkY6NjIyOkZKUlJKOi4mIh4aEhISEhoeGhXtvYFhbXl9gZnN9gX9/gIGEhoyPkI6NjY+QkJCQkZKQjIiIh4iIhoaIh4WFhYOAgH9/fXt6f4SEgX53cXB2f4SFhoeIiIiFg4KCg4ODfXJsbGpocHl/fHl4eXl5d3ZzcHN2dG5ubm1sa29xcW9sbW1ubm5vbGhgXF1jZ2hocH+Gi4yOjIR4cXBwcHh/f35+h5GVlZWVlZWVlZWVk4+Hf35/e3Rwbm9zdn+GiIiIiImGgn9wcnR0dHV2d3d3dnh3d3d3eHh4eHd3eHh3eHh5enp6enp6enp6enp6enp7e3t7e3t9fXt9fn5+fn5+f39+foCAgYGAfn+Bf356cmtmYl9lb3p+fn59fHp6eXt7e3t7enp7e3t5eXh3eXp6e4CCg4aIi4+VlZWRjo2Li46RkZOTkY2LiIeHhoSDg4OFhoaFgXlqXVtdX2FmcHuAf3+BgoSHjI+Qj46PkJGQkJCRkI2JhoiJioqJiIiHhYWFg4KCgYB9e3t/hISBfnZwb3J6goWFh4iIiIaDgoKCgoJ5b2praGlvd318eXd5eXp6eHVydXd1bGloZ2VmamxsbGtqamtsbm5tamFdXWNnaGdseYGGh4yKgndxb3BweH9/fn6HkZWVlZWVlZWVlZWTjoV/fn56c29ub3N3gYaIiIiIiYaCf29xcnNzdnd2d3d4eXh4eHh4eHh4eHh5eXh5eXp6enp6eXl5eXl6enl6enl5e3t8fH19fHx8fX5+f39/f35+fn6AgIB/gICAf313bmllYmdven1+fX17eXp6e3t7e3x7e3t7e3p6eHh3e3t9gYSFh4aHjZOWlJGMi4qJjZCQkZGQjImHhYWFg4OChIWGhYWDgHRoXFhdYmpze3+Af4GDhYaLjY+Pj4+Qj5KRkZGOi4iGiImLjIyJiIaGhYODgoGBfnt5en6Bg4J7c21sbnR9gIWFh4eHh4SDgYCAfnRtamxqaWxwdHh5enp8fHx8e3d4eHVtZmFfXl9hZmloZmZnam1wbWtnY19fYWhpam10e36ChYR+cXBwb3F4fn99fomSlZWVlZWVlZWVlZOMg35+fnlyb29wdHuCh4eIiYmJhoJ/b3BxcnN1dnZ4eHl5eXl5eXh4eHh4eHh4eHh5eXp6enp5eXl5eXp6eXp6eXl7e3x8fX18fHx9fn5/f39/fn5+foCAgICAgICAfnl0b2poa3N7fn59fHt6e3t7e3t7fHx7e3t7e3p4eHd8fX+Bg4SFg4SJkJSTkYuKiYiIi4uNjIyIhoWEhISCgoKEhYaFhoWDfnRmXFpda3h8fYCBgoSGh4qNj4+Pj5CPkI+PjoyJiYeIioyNjouJh4aFg4OCgYF+e3l6foKDgHduaGZnanN6gYSGh4eHhYSCgH95b2tqbGpnaWtscXV3en19f4B+enl3cWphW1hYWFthZWZmZ2hpbG9sbGhkYF9hZ2lpbG1xd3x/f3pvbm5ucHl/f31+iZKVlZWVlZWVlZWVk4yDfn58d3JwcHJ1fIOHh4iJiomGgn9ub3BycnV3dnh4eXl5eXl5eHh4eHh4eHh4eHl5enp6enl5e3t5enp5eXl5eXt7fHx9fXx8fH1+fn5+fn5+fn5+gIB/f4CAgIB/enl0b25wd31/fn18e3p7e3t7e3t7e3t7e3t7enh4eXx/gYGBgoKAf4WNkpORjIiGhYSGh4iIiIeGg4KCgoKChISFhYaGh4WDfXRnXl5qeX19gIKDhYaHioyPj4+Pj46NjY2KioeJiImLjY+PjYqHhYWDg4OCgX57eXp+goJ9cmpkYWNlanV+hIaGhoeFhYKAf3ZsamtqaWVoa2trbXF0eHp+gH15d3NtZl1WVVVUVlxkZ2lrbG5vcG1taWVhYGNmaGlpZ2luc3h4dG1sbG1veX+Afn+KkpWVlZWVlZWVlZWTi4J+f312cXBxc3Z9hIaHiImKiYaCf25vcHFydHZ2d3d5eXl5eXl4eHh4eHh3d3d3eHh6enp6e3t7e3p7e3p5eXl5e3t8fHx8fHx8fX5+fX19fX5+fn6AgH5+gICAgH98fHd1c3V6fn1+fXt8e3t7e3t7e3t7e3t7e3t6eHd6fICDgYCBf3x8goqQk5GMiIWDgoGDhYWHhYSCgYKCg4KEhYaFhYWFhISBfHJoZW14fX6Bg4OGh4iJjI+Pj4+PjoyMi4uKh4iKi4yNj5CNioeEg4ODhIKBfnt5en6DgXpuZmJhYmJmcHyChYaGh4WFgoB/dWtpa2loZmhtbGlqamxydXp+e3d0cGpiWlRRUVRWWmRrbnBxc3Nyb21pZWJgY2ZnaGhmZWhtcnJua2trbG54foF/gIqSlZWVlZWVlZWVlZKKgn5/fHRwcXJzdn2FhoeIiYqJhoJ/bW1vcHF0dHV2d3d5eXl5eXl5d3d4eHh4d3d4eHl5enp5eXl5e3t7e3p6e3t8fHt7fHx9fX19fX19fXx8fX1+fn5+fn5/f39/gH9+fHt6e3x9fH18fHx7enx8fX18e3t8fHx8fHt7eHp8gISEgX99e3p/ho6SkYyIhYSCgoODhYaDgoKBgoKChISGhYWFhYWFhYOAenZ3enx9f4GEhIeGiImNj4+Pj5COjYyMi4qJiouLjI6PkI6Jh4WEg4KCgoB+enl5foF/dWljYmJiYWJsd4GGhoaHhoaEgX1zaWdoaWllaWxsZ2ZkY2drcnh4c25qZF5XUk9PU1hdaXN4eHh4d3dyb2pkY2FjZGRlZmViYmRoamlpaWlrbnd+gX6Ai5OVlZWVlZWVlZWVkYqBf397c3Bwc3V4gISGh4mJioqHg4BsbG9wcXN0dXZ3d3l5eXl5eXl3d3h4eHh4eHh4d3d4eHl5enp7e3t7e3t7e3x8e3t8fH19fX19fX19fHx9fX19fn5+fn9/fn5/f3+Afn5+fn58fnx8fHt6e3t8fHx8fHx8fHx8e3t7e3x/hYSDgH15eX6Di5GRjImFhISEhISFhYSDgoGDg4KEhIaFhYaGhoaGhIOBf4CAfX5/goSFh4iKi46Pj4+PkI6NjIyLioqLi4qLjo+QjYmFhIWEgoKCgYB9eXp+f3xxZ2VkZWNiYWhyf4SGh4eHh4WCfHNpZ2hoaGZqaWloZWNhYWRobW5samZgW1hTUVJVXGh1fIB/fn16eHNxbmloZmVlZmhpZ2VkZGRlZmZmZmhrdHt/fH+MlJWVlZWVlZWVlZWRiYB+fnp0cnJzdXqChIaHiYmKioeCf2xsb3BwcnN0dnd3eXl5eXl5eXd3eHh5eXl5eHh3d3h4eXl7e3t7e3t7e3t7fHx8fHx8fX19fX19fX19fX19fX1+fn5+fn5+fn9/gIB/f3+AgH5/fXx8e3p6ent7fH19fHx8fHx7ent8fH2EhYOCfHl6foGJkJGOiYWDg4OEhISFhISCgoODhISGhYWFhoaGhoaEhIWCgoB9f4CDhIWHioyOj4+Pj4+Qjo2NjYyKioqKioqMjpCNh4ODhIaEgoKCgYB8e35/e3BpaWhoZGJgZG59g4WGhYWGhoN7c2tpaWhoZmhpaWlmZGRiY2JkZGVkYmBcW1dXWFxldoGDhIKCf3x7dnJwb25qaGprbW5raWdmY2FjY2NjZGdxeHt5fouUlZWVlZWVlZWVlZCHfnx8eHN1dXN1e4KGh4eJiouLhoF+b29vcG9yc3R2d3d5eXl5eXl5d3d4eHp6eXl4eHh4eXl7e3t7e3t7e3t7e3t8fH19fHx9fX19fX19fX5+fX19fX5+fn59fX19fn6AgICAf4F/fX9+fHx7enp6e3t8fHx8fHx8fHt7e319fYKFhYN9e3t9foeOkI+KhYSEhISFhIWFhYSEhISEhYaEhYWGhoeHiIaEgoOBfn1/goOFhoiJi46Nj4+PkJCOjY2NjIqKioqKiouNjoyFgYGEhYOCgoKBgX98foF7cW1sbGpnY2Bha3qChISEg4WHg3txamtqZ2dnaWpqamdmZmRmYWFiYWJhYF1dW1xdY29/ioeFhISAfX55d3FzcW5rbG9yc3JvbWpmYmRjY2NiZ251eXh+ipSVlZWVlZWVlZWUkIZ8fHx4cXR0c3V8g4eIh4mKjIuFgX5tbW5vcHJzdXZ3eHl5eXl5eXl4eHh5e3t5eXl5enp7e3t7enp7e3p6enp6enx8fHx8fHx8fHx8fH19fX19fX19fn59fXt7fXt9fX5+f39/f318fX18e3p6e3t7e3t7fHx8fH19fHx8fXt8gYWGg318fHx9gouPjouHhISEhYSFhYeFhYWFhISGhoWGhoaGiYmHhYSCgX97fX6Cg4SGiIqLjY6Pj5CRj4+OjY6MiomJiYuLi4yOioR+gISFg4ODg4OCgX9+f3lycW9vbWtmYGFkcn5+fn2BgoaDeW9qbGpnZmhqaWppaGdnZWNiYWJhYmNiY2RiYWVyf4qQioeCgYGAfnp4dXV1cm5uc3d8e3h2cWxmY2RjZGRlbHBzdX+LlZWWlpaWlZWVlZSOhHx6e3dyc3N0d3uChoeGiIqMi4aCf21tbm9xcnN1dnd5eXl5eXl5eXh4eHl6enl5eXl6ent7e3t7e3t7e3t6ent7fHx8fHx8fHx7e3t7fHx8fH19fX19fX19e3t9e3x8fX5/f39/fXx9fXx7enp8fHt7fHx8fHx8fX19fH19fH2AhIWFgX19fHx/iI6QjoeEhYWFhIWFh4aFhYWEhIaHhYWFhoeJiYeFhIJ/fH2AgIODhIeIi42Oj5CPkJGPj46Ojo2KiYqKi4uLjI6Jg3x/g4WDg4ODgoODgH57dnR0dXJxb2tjYGFqc3Jxc3h9gn93bmttbGhlZGZnaGhnZmVkYmJiYmFhYmRna2tuc4GNlZePhoF/gIB/fHp5enp5cnJ2fIKCgX97dWxmZWVlZWVpbXB1fYqTlpaWlZWVlZWVlI6DfHp6dnJzc3V5e4KGhoSEiIyLh4KAbW1ub3BxcnN2d3l5eXl5eXl5eHh4eXl5eXl5eXp6e3t7e3x8fHx7e3t7fHx8fHx8fHx8fHt7e3t8fHx8fX19fXx8fX19fX17fHx9fn9/fn59fH19fHt6enx8e3t8fHx8fHx8fHx8fX19fn+DhYaDf358en2Di46NiYaFhYaFhoaJh4eGhoWFhoaEhISGh4mJh4WEgn58foCChIOGiIqMjo+Pj5CQkJCPj46OjYyLi4uMjIyMjYiCe32ChYODg4J/goOBfXl0dXh3dHNzbmRgX2Ztamlqb3V8fHZvbW5tamZmZWVmZ2VkYmNiZGRlY2FhZm1xdHl/jZabnJGGgoCAf399fHt+f394dnl+hIaHhYJ8c2tqaGZlZWZqbXJ8iZCUlZWUlJWVlZWUjYJ8e3l0cnNzdXl9hIaFf3+Gi4uHgYFvb25vb3BxcnZ3eXl5eXl5eXl4eHh5eXl5eXl5enp7e3t7fHx9fXx8fHx8fHx8fHx8fHx8e3t7e3x8fHx9fX19fHx9fX19fXt7e31+f399fX18fX18e3p6fHx7e3x8fHx8fHt7fHx9fn+AgIOFhoSBf3x6e4CHjYyLiIWGhoeJiIiHhoaGhYWHhYSEhIaHiYmHhYSCf3x+gIGDhIeIi46PkI+Pj5CQkY+Qj4+NjoyLi4yMjIyMiIR8fIGFg4ODgn2BgoF9dnJ2eXVzdXVyZ2BfZGlmZWVocHd4c25tbGtraGhmZWZlYmFhYmJkZGdlYmFmb3d6foeUnJ2ZkIaEg4GAgH59foOEgnt7fIGHiIqIh4F4cG1qZ2VlZmprb3iFjpOUlJSUlZWVlZOMgnx8eXNyc3N1en6Fh4V8fIWLi4eAgW5vbm9wcXJzd3h6enl5eXl5eXl5eXp6enl5eXl6ent7fHx8fHt6e3t7e3x8fHx8fHt7e3t7e3t7e3x8fHx8fHx9fX19e3t7e3x8fHx9fX19e3t9fXx8e3t8fHx8fHx8fHt7fHx8fH5+f4B/f4SGhIOAfXp7gIaLi4uJhoWFh4mKiIaGhoaEhIWFhYWFhoeJiYiGhYF9fYCCgoSFiImMjo+Pjo6Oj5CRkZCQkI+PjYyMjIyLjIyKhn57gIKDg4ODgICBgHtycHR2c3F0eHVsZWBhZWVkYWNobnNwbG1ubWpqaGhkY2RjY2NiYmRkZmdmY2RueX2CjJabl5GJhIWGg39/fX2Di4yHf39+gYaKi4qJg3x0cW5qZ2VmaGpqdIKKkJWUk5SVlZWVlIt/enp3c3Nzc3Z6gIWIhnt6hoqMhoGBbW9ub3BxcnN2d3h5eXl5eXl5eXl6enp6eXl5eXp6e3t9fX19e3p7e3t7fHx8fHx8e3t7e3t7e3t7fHx8fHx8fHx8fHx7e3t7e3t8fHx9fHx7e3x8fHx8fHx8fHx8fHx9fHx9fXx8fn5/gX9+goWFg4B/fH1/hIiIioiGhYWGiYqIh4WFhYSEhYWFhYWGh4mJiIaFgX1/gYODhYWIioyNj46MjI2PkJGSkpGRkI+OjYyNjIuMjIuIgHuAgoOEhIOBgIF+d3Bvc3RxcHN4d3BoYGFjZGNhY2NobGxrbGtramxtbWhlZGRjYmRkZGRlaGxtZ2ZqcXyKmZaOiISChYaEf4B/g46Yk42EgoGBhoqLioqGgXx3dG5qaGdpaGhxgIeOk5OTlJWVlZWTin55eXVzc3NzdnuBhYiFe3yGioyGgYFsbm5vb3Fyc3Z3d3h5eXl5eXl5eXp6enp5eXl5enp8fH5+fn59e3t7e3t8fHx8fHx7e3t7enp6ent8fHx8fHx8e3t7e3t7e3t6enx8fH18fHt7e3t8fHx8fHx8fHx8fX18fH19fHx+fn+BgH+AhIWDgYB/f36ChoeIh4aFhIWIioiGhYSEhISEhYWFhYaHiYmIhoOAf4CBg4SFhomLjI6PjYqIjI6Qk5OUk5KRkI+OjY2Li4yMi4mAe4CCg4SEg4F/f3t0bm9xc29wdHh6dGthYWRkZGRlZWVnaWtsa2tsb3JybmhmZmNjZGRlZWVnbXRtYFtld4qVjIaCgIOFhIN/f4ONmJ6XkYiEg4KFiouKioiDgXx4c21qaWpnZ256g4uQkZOUlZWVlZKIfHl4dXNzcnN3e4KHh4J8f4eMjIaBgWxtbm9vcXJzdXZ4eXl5eXl5eXt7enp6enl5eXl6enx8fn5+fn18e3t7e3x8fHx8fHt7e3t6enp6e3x8fHx8fHx7e3t7e3t7e3p6fHx8fXt7e3t7e3x8fHx8fHx8fH19fXx8fX18fH5+f4GBf3+DhIOCgYCAf3+DhYeGhoWDg4eJh4WEhISEhISFhYWFhoeJiYiGgoCAgYGDhIWGiYuNjo+LiIiMjo+TlJWTkpCQj4+NjYuLjIyLioJ6gIKDhISDgX99eXFtb3Bwb290d3p2bGNhZGRmZWZmZGVpamtqaWtwdXVva2dlZWVlZWVlZGdtdW9cUl12i5KGgYCBhoOBgH+CipaeoJqVjISDgoWKi4qKiIOCf313cG1ramdnbHaAho6Qk5SVlZWVkIZ7eHh0c3NydHh8goeHgXyBio2MhoGBbW5ubm5wcXJ2eHl4enp5eXp6e3t7e3t7enp7e3x8fX1+fn99fHx8fHx8fHx7e3t7e3t7e3p6e3t6fH19fHt8fHx8fHt7e3p6ent7e319e3t9fXt7e3t8fHx8fHx9fX5+fn59fX19fX6AgoGAf4OEg4OBgoKAf4CBhISEhYKBg4aGhoSEhYSEhYSEhISHh4iIhoOBgIKDgoODhIaJjI6PjouIiIqNjpCSk5OUk5GQj46NjIuLjY2LhYCAg4SFhIB9f312bmttb29vcXV4eXVsZWRnaGlpZGNjY2ZnZ2Vmam52dXBqZmVmZWVjY2RjZmttZVhKV3aLkISBgIWGgoGAf4iVn5+fnZmSiYWEhYiIh4eHhYB/f3x4dHFta2dqc3yBiY6Rk5WVlpWQhXt4dXN0dHN1en6FhoZ+fISKjYyHgoJubm5ubnBxcnV3eHh6enl5enp7e3t7e3t7e3x8fX19fX5+f318fHx8fHx8fHt7fHx8fHt7e3t7e3p8fHx8e3x8fHx8e3l5enp6e3t7e3t7e3t7fHx8fHx8e3t7e319fHx+fn19fX19foCBgYKAgIKEhISDg4GAgICEg4OFg4F/goWFhISEhIaFhISEhIaGhoWCgoGCg4OCg4OEiIqMjo+Oi4mJioyNkJKTlJWUkZGQj42NjYyNj42IgoGDhIaEf3p+fHRtamxvbm9ydnl4c2xmZmhqa21oZmRkZWZlZGVobXJyb2lmZWVlY2FhYV9gZGReVEpVboSPhIGChomEgIGHlaGjn5+em5WOiYWEh4eGhoeHgn9/fnt3dXFuaWlwd3yDio+RlZWWlY6Eenh0c3R0c3V6gIaIhHx9hoqOjIeDg25ubm5ucHFydHZ3eXl5eXl6ent7e3t7e3t7fHx9fX19fn5/fXx8fHx8fHx8fHx9fXx8e3t7e3t7enx7e3p7e3t7e3t6eXl6enp7e3t6ent7e3t8fHx8fHx7e3t7fHx8fH19fX19fX1+gIGCg4GAgoSFhYODg4KBgYSEg4SDgX+BhISEhISEhYWEhISEhISDgYKCgoODhIODhIaIi4yPj46Li4uLjI6QkpOUlZSSkZCPjY2Njo6Qj4uFgoOEhoSAe3t5cmxqbG1sbnF2eXlzbWhnaWpsb25saGhnZ2VlZGZpa2xsZ2dnZmVjYF9dXVteXlpTUFdmgI2EgYOFi4eBh5WeoqKfn56em5OOiISHh4aGiYmEgX9/fnp4dXBsaW90eH6Fi46TlZSUjIB3dnRzdHRzdnuCh4iCeoCIjI6MiISEbm5ubm5wcXJ0dnd6eHh5eXp6e3t7e3t7e3t8fH19fX1+fn99fHx8fHx8fHx9fX19fX17e3x8e3t6fHt7ent7e3t7e3p5eXp6ent7e3t7e3t8fHx8fHx7e3t7e3t7e3x8fn19fX19fX6AgYKDgoGBg4aGhYWEg4ODg4ODhIWCgYGEhISEhISFhYSEhISEg4KBgYGCg4OEgoOEhomMjI+Pjo2MjY2Nj5GSk5SVlJOTkI+Njo6QkJGQjYeDg4SFhIB6d3VxbGxtbGtucXZ5eXNsaGdpbG5xcnJtaWhoZ2ZkZWZnaWlnZ2hmZWViYF5cXFxcWFRXWmJ8jISBg4aKioORnaOiop+fnp2dl5CLiIeHh4iKiYSBf4CAfHl3c25qbXJ1fIKHjZGVlZOMf3d1dHN0dHR3fIOHhoB7goqMjY2IhYRvb25ubnBxc3V2d3h5eXl5enp6ent7fHx8fHx8fH1+fn5+fn59fXx7e3t7e3x8fX18fHx8e3x8e3t7fHx7e3t7e3t7e3p6enp6enp6enp6ent7e3t8fHx8fHp7e3x8fHx+fXx8fX19foCCg4SDgX+ChYeGhoWDg4SEg4SFh4eDgoSEg4SFhYSDhISEhIWDgoGAgoKDhIWDhIWIiYyOj4+Pj42Njo+QkZKTlJSUk5KQkI6Pj5CSkJCPjIeEhIWFgXdzcG1tb29ubG1udHl6c21raGhscHB0dnRubmtoZmNjZGNkZ2hoaWhnZ2djXFlYWVlXWF5fY3aIhoOGh4mJiZafoqGfn5+en56alI+Li4qJh4mIhYKAgoN/enl2b2tvcnR6f4aMkJOVkot+d3V0c3Nzc3iAhoeEfX2Fio2OjIeFg29vbm5ucHFzdnZ3eHl5eXl6enp6e3t7e3t7fHx8fn5+fn5+fn5+fHt7e3t7fHx9fXx8fHx7fHx7e3t7e3t7e3t7e3t7enp6enp6enp6enp6e3t7e3x8fHx8ent7fHx8fH5+fX19fX1+gIOEhISDf4CFiIaGhoOChIWDhIWHh4WEhISDhIWFhIOEhISEhIOBgoCDg4SEhYWFh4mLjZCQj5CPjo6QkJGSkpSUlJSTkpGRkJCQkZKQkI+OioaEhISCeXNua29xcG5rbGxyeHpybWppaWxwcnd2dHFwbWljYWBgYWNmZ2ttbWxtb2xiXl1bW1pbYWRodoWIh4uKioiNmaGgnp6eoKCenZyZlI6LiIeGiIiIhICChIF9fHpzbHB0c3d7goiOk5SRi312c3Nxc3NzeYGGh4F8f4eKjo+NiYWEb29ubm5wcXN2dnd4eXl5eXp6enp7e3t7e3t8fH1/fn5+fn5+fn58e3t7e3t8fHx8fHx8fHt8fHt7e3t7enp6enp6enp6enp6enp6enp6enp6ent7e3t7e3t5enp7e3x8fn59fX19fX6Ag4SFg4KAgIKHh4eHhIKDhIWFhYeHh4WEhIOEhYWFhISEhISDgoKCgoOFhYSFh4eJi42PkZCQkI+Pj5CRkpKSlJSVlZSTkpGRkJGTkpCPj4+NiYWEhIF6c25ucHFwbWlpanB3eHJtaWhpbXB0dnV0cnFuamRhYGBhY2RnbG9vcHFycWhjYmJgXl9maGt2g4qLjo2MiJKcop+dnZ6goJ6dnZyWjYmEhYaIiIiFfoCDg39/fXZtcXZzdXd9hIuSk5GKfXVzc3Fzc3V5gIWGf3yCh4uNjo6LhoRvb25ubnBxc3Z2d3h5eXl5enp6ent7enp6enx8fn9+fn5+fn5+fnx7e3t7e3x8e3t8fHx8e3x8e3t7enp6enp6enp6enp6enp6enp6enp6enl5enp6enp6e3l6enp6fHx9fXx9fX19foCDhIWDgoGBgoWIiYeFgYKEhoaFh4eHhoSEg4SEhIWEhISEhIOCgoKFhIWEhIWHiImNj5CRkZCRj5CQj5GSkpKUlJWVlJOTkpGRkZGSkI+Pj46LhoSDgXxybm5wcXBsaWhobnd3cm1oZmducnR1dXVzcnBsZ2NiYmJjZGhsbnByc3R0bmloaGViZGhrbneCi42Oj4yKlZ6kn52dnqCgoJ6fnZSKhYSFhomJiIZ9gIKCf4B/eHB0eHVzc3mBiY6SkIl8c3J0cnNzdnuAhIV+fIOJjo6Oj4uGhHBwb29ucHF0dnZ3eHh5eHh5eXl5e3t7e3t7fX1/f35+f39/f359fHx8fHx7e3t8fHx8fX18fXp6enl5eXl5eHh4eHp6enp6enl5enp6enp6enp5eXp7enp7ent7ent8fH19fX5+fn1/gIOFhoaFgoKChIeIh4OBg4KFhoaHh4aGhIODhIWFhoWEg4SEg4KDhIWFg4WFh4qLjY6QkZCRkpKRkZCQkZGSkpOUlZWVlJSUkpKRkZKQjo6Pj46JhYSBfHNwcXNycG1paGdueHhya2djZ29zc3N0c3FwbmplZGJiYWNkaGxwcXJ2dHRzcG5ua2pqbW1weYOOjo+PjYyXoKShoJ+goKCfoJ+bjIOCg4aIiYiHhXp5foB+gH55c3h7dXRydn2Fio+QiXp0dHR0dHR4fIGDgnyAh42Oj4+Pi4aFcHBvb25wcXR2dnd4eHl4eHl5eXl7e3t7fHt9fX9/fn5+fn5+fn18fHx9fHt6en19fHx9fX19ent6eXl5eXl4eHh4eHh4eHl5eXl6enp6enp6enp6ent7e3t7e3t6fHx8fn5+fn5+fX+AgoWHh4aCgoKEhIaHhIKCgoSGhoaIhoWEg4OEhYWFhYODg4SBgYOEhYWEhYaJjI2PkJGSkJCRkpKRkJGRkZKSk5SVlZWVlZWTkpOTkpCPjpCQkIuHhIB7cXNzdHRwcG1pZWx3d3FqZmNncXR0c3R0cW5saWVjYmJhY2ZpbXFyc3Z1dXNxb3JxcHJycnJ6go6QkJCOj5mipKOhoKCgn5+gnpKFgIGDhomJiIaDeHV7fn6Af3p2fX95dnJ1eoKIjY6HenN0dXR0dXh9g4N9e4KJjo6Pj5CLhoVwcHBwbnBxdHZ2d3h4eXl5eXl5eXt7e3t7fX5+f39/f35+fn5+fX18fH18e3p6fX18fH19fX18fHp5eXl5eXh4eHh3d3h4eXl5eXp6enp6enp6enp6e3t7e3t7e3p8fHx/f39/fn59f3+ChYeHhoSEg4ODhIWEg4KBg4aGhYeGhYSDg4SFhYSEhIOEhIGBhISFhYWFh4qNjpGSkpKQkJGSkY+PkJGRkZGSk5WVlZWVlpSUlZWSkJCQkJCRjomFgXpxc3R1dXJxbmhlanN1b2llY2tydXZ1dHNvbWtnZGNiY2RmamxvcXN0d3Z0cnFydXNyc3V2dXiBi5CSkI+Sm6SmpKKhoaGgoKCYh4GAgIKGiYqIhoJ2cHR7foCAe3mAhIB4dXV2foWLjIV5c3R1dXV2e3+FgXx/hYuOjo6QkYyGhXBwcXFucHF0dnZ3eHh5enp5eXt7e3t7e3t+f39/f4CAfX19fX5+fXx8fXx7e3t9fXx8fX19fXx8enl5eXl5eHh4eHd3eHh4eHl5enp6enp6enp7e3t8e3t7e3t7enx8fH19f39+fn1/f4KFh4eGhYWDhIODhIWFgoCDhoaEhoaFhIODhIWFhISDg4KDgoKFhoaGhYaJjI6PkZKRkpCPkJKQj5CQkZGQkJGTlZWVlZaWlJWVlJKQkJCPj5GQi4eBe3JxdHV1dHJvZmVrc3RuaWRkbnN2d3Z1cm5saWVjYmJlZmhsb3Bxc3V3dnNycXR4d3VzdXh1dnyGjpGRkJWeo6Wko6GhoqGgnpCDgICAgYaJi4qHgnVscHp/gIB7eoKGhnp3dHN6hIiJhHh0dXZ2dXZ9goR+fIOIjI6OjZCSjIaFcHBvb25xcnV3d3d3d3d4enp6enp6e3x8fX9+fn9/f39+fn5+f39+fH19fHx8fHx8fHx9fX19fXt6eXl5eXd5eXh4eHh4eHh4eXl6enl5eXl6e3t7e3t7e3x8e3t7e3x8fX5+fn19fn5/goWIiIeHh4WEhIODhISDgoSGhoWGhoaFhISEhISEg4OEgoODhIaGhoaFh4mMj5CQkZCPj4+PkJCQkJGRkZCQkZKTk5WVlpaWlZWVkpCPkJCQkZCOioR7c3J4d3VzdHBnZmtycmxnY2VudHd3dnVxb2tqZmRjZGZoa3BxcXJydXZycW9xd3t6eHV2dnRxdH+KkZCPlZ+kpaWjoqKioaGaiYGAgICAhImJiomEdWlqdn5/f3x7g4mIf3h2d3qAhomCenV2dnZ1d3yAgX19hoqOjo+OkZSNhYNwcG9vbnJzdXZ2d3d3d3h5enp6enp7fX1+f35+f39/f39/f3+Af358fX18fHx8fHx8fH19fX18e3p5eXl5d3h4eHh4eHh4eHh5eXl5eXl5eXp7e3t7e3t7fHx7e3t7fHx9fn5+fn5+fn+BhYiIiIeHhoWEg4KDhISEhIaGh4aGhoWFhISEhISDg4SCg4OGhoaGhoeIioyQkJCQkI+Pj4+QkI+PkJCQkJCRkpOTlZWWlpaWlZWTkY+QkJCRkI+Mh353dXl4dnV2cWhmbXJxbGplZm51eHl3dnJwampnZmRlZmlvc3JycnJ1dHBsam91e3x3dXR0cW1wd4aPkJCYoKWlpaOioqKhoZWEgICAgICBh4mKiYV6bGZwfIB/fHyEjIqCenZ2eHyEiIF4dXZ2dnZ4e399fYKIi4yOj4+Sk42GhHBwcHBwcXN1dXV3d3d3d3h5eXp6ent8fH1+fX1/f39/f39/f4B/f3x9fXx8fHx8fHx8fX19fXt6enl5eXl3d3d4eHh4eHh4eHl5eXl5eXl5eXp7e3t7e3t8fHt7e3t8fH1+fn5/f35+f4GEiIiIh4eHh4WEg4KCg4SGiIiHhoaGhYWEhISEhIOCg4KDhIaHhoaGh4mMjpCQj5CPjo6Pj5CQjo6PkJCQkJGSk5OVlZaWlpaWlZORkJGRkZGRkI6KgXp3eXh4d3dya2lvdHJtamRncHZ3enp3cnBpaWlmZWVobXV4dnR0dHNybmhnbHN5e3ZzdHRwbW10g46PkZmipaWlo6KioqGejoGAgICAgICFiYqJhX5wZm17gIB9e4SMjod/d3N1e4GGf3Z0d3V1dnl5fHp/hYmLjI6PkJKRi4SCcHBxcXFxc3V1dXd3d3d3eHh4enp6e3x8fX59fX9/f3+AgICAgH9/fX19fHx8fHx8fHx9fX19e3p6eXl5eXd3d3h4d3d4eHh4eXl4eHl5eXl5ent7e3t7e3x8e3t7e3x8fX5+fn9/fn5+f4SIiIiJiIiIh4WEg4KChoiKioeGhoWFhYSEhISEg4ODgoSDh4aGh4eIiY2QkJCOjo+Ojo+PkI+Ojo+Pj5CQkZKTk5WVlpaWlpaWk5KQkZGRk5KRkI2Efnp5eHd2d3JsanBzcm1oZWhxdnd6eXZzbmppaWdmZWlveHx4dnZ1cnBsZmVocXd5dnNycnBubHSCjI+RmaClpaWjoqKiopuHgICAgICAgIWJioiGfnFnbHqBgX17hIyQioJ5c3V6f4J9dHR3dnZ3eXh5eoCGi46Njo+Qk5CKg4FwcHFxcHJxdHR1eHd4eHZ3eHh7e3t8fH19fX19fX5+fn9/gIB/f398fX1+fnx8e3t8fH19fX17e3t6enp5d3h4d3d2dnd3d3l5eXh4eXl6enp7e3t8fHx8e3t8fHx8fX19fX5+fn5/f36AhYiJiYmKjIyKh4WCgIGEiIqKh4aGhoWFhYSCg4ODg4OEhIaGh4eIiImJjpCPj42Oj46Oj5CRkI+NjY6Qj5GRkZKTlJSWlpaWlZWUk5KSkpKTkpGQj42Efnp2d3h5dW5tcHNxbWhma3V3dXh4dHFtamlpZ2Zla3F7gHx3eHVyb21oY2NsdXh1dHJycW5rcoCLkJOZoaWmpaSjo6CglYOAgICAgIB/hYuLiIeAc2hreYCAfnqCjpKMhn53d3p/gXx1dXd1dnZ4d3l/hIqNjY2OjpKVj4h/enBwcXFwcnF0dHV2dXV1dnd4eHl5ent8fX19fX19fX1+f3+AgH9/f3x9fX19fHx8fHx8fX19fXt7e3t6enl3eHh3d3d3d3d3eXl5eHh5eXp6e3t7e3x8fHx8fHx8fX19fX19fn5+fn9/fX+DhomJiYuMjIuJhYKAgYKGiYmHh4eHh4eGhIKEhISDhIWGh4aIiImKiYuPkI+OjIyOjo6PkZGQj46NjpCQkZGSkpOUlJaWlpaVlZSTlJSUlJOTk5GRj4qEfXl4enp3b29wcnFtaGZsdnp4eXh0cW1qamppaWhtcnyBfXl2dXJvbmpkYmx1d3V0c3NybmtxfYiOlJqipqalpKSioZ+PgoCAgICAgH+FjY2HhYByZ2p3f4B+eoGPk42Ign14fH+AenV1dnV2dnh4e4OIjI6OjY+OkJGMg3lzcHBxcXJzc3R0dHV0dnZ2d3h4eXl6e3x9fX19fX19fX1+fn5+fn5+fn19fHx8fH19fX19fX19e3t7e3p6eXd4eHh4eHh4eHd5eXl4eHl5enp6ent7fHx8fHx8fHx9fX19fX1+fn5+f399f4KFiYqKi4yMjIqHhIKCgYOFh4eHh4eHh4aFgoODg4OEhoaIiImKi42Mjo+Pj46LjI6Oj5CRkpGQj4+OkJGRkZKTk5SUlpaWlpWVlpSUlJSUlJSTkZGPjYmCfXx9fHdxcHFzcGxoZm95enh5eHVvampsbGtra2xweHt8eXZ1cnFwa2VkbHR1c3Rzc3NvbnJ8ho6Um6OmpqWkpaOinImCgICAgICAgIaOjoaCfXFnanV+gH56gI2TjoqDfnp9gH94c3V2dXZ3eXqAhoqLjY6Ojo2MjIV7cm9ycnFxcnN1dHR0dnV1dXZ3eHh5eXt8fH19fX19fHx9fX5+fn59fX5+fX18fHx8fX1+fn19fX17e3t7enp5d3h4eXl4eHl5d3l5eXh4eXl6enl5e3t8fHx8fX18fH19fX19fX5+fn5/f31+gYWJi4uLjY2MioiFg4OBg4OGh4eJiIiIhoaCgoSEg4WGhoiJiouMj46Pj4+PjouLjY6QkZGSkpCPj46QkZKRkpOUk5SVlpaWlZWWlZWVlZWVlZORkY+Qj4iDf4B+d3NxcnNva2hmcXp6d3l5dW5paWxrbGxra29zd3l4eHVyc3FrZmVsc3NydHR0dHBwc3yHjpSbpKampaSlpKKXg4GAgICAgICAh42Nh4F6cGhqdYCAfnp/jJOPi4R/e36Af3hxdnZ1dnh5fIOGiYqLjI2MiYeFfXNua3JycXJzc3R0c3R1dXZ2d3h5eXp6ent8fHx8fX18fH1+fn5+fn19fX19fXx8e3t9fX19fn59fXt7e3p7e3l4eHh5eXl5enp4eHl5eHh4eHl5eXl6ent7e3t7e3t7e3x9fX19fX5+fn9/fn6AhoqMjI2OjoyKiYaEg4SDhISFiIiJioqJh4aGhIODhYaHiYqMjpCPj5CQj46OjIyOjpCRkpOSkZCPj5CSkpKTk5OTlJSVlpaWlpaVlZWVlZWVlZSSkpGRj4uGhH92cXFycm9saGdyfn15enp1cWxsbG9ubm5tbG5xc3R1d3Rzcm5raWxxc3F0dXRycXJzeoWOlJuipqampKSlopGDgYCAgICAgIKEjIyFgHpxbG12foF9en2Kk4+LhoB8gH99eHR2dnd3eH2BhomJhYeKiomDfHhwa2hqcnJxcnNzdHR0dXV2d3d3eHp6enp6e3x8fHx8fHt8fHx8fHx8fX19fX19fHx8fH19fn5+fn19e3t9e3t7enp5eXl5enp6enl4eXl4eHh4eXl6enp6e3t7e3p7e3t7fH19fX19fn5+f39+fX+Ei4yMjY6OjIqJiIaFhYSDg4WHiImKioqIiYiGhISFh4iIio6Rk5KRkZCOjYyMjI6PkJGSk5KSkY+PkZKSk5STk5OUlJWWlpaWlpWVlZWVlZWVlZSUkpKSkIyHgHdycXJyb2xoZ3N/gHx8fHhzb29vcnBwcG9ra2xucHF2dHNzcG5tbG5wcXR1dHNzc3N3g4uSm6Kmp6elpaWgjIOBgICAgICAgoOJioWAeXFtbnZ8f3x6fYqSj42Ggn9/f314dXZ2dHR5gISJiYN+f4KCfnZva2ZmaW1xcXFyc3N0dHR1dXZ3d3d4eXl5eXh5enp6enp6e3t7e3t7e3t9fX19fX18fH19fn5+fn5+fX18fH18e3t6enl5eXl6enp6enl5eXh4eHh5eXp6enp7e3t7ent7e3t8fX19fX1+fn5/f359f4OKjIyNj4+OjImIiIeFhYODhIaHiIuLioiIhoWEhYaGh4iLj5OTkZGRkI2MjIyMjo+RkZOTkpKRj5CSkpKTlJSTk5SUlZaWlpaWlZWVlZWVlZWVlJSTk5SSj4mBeHJxcnFua2dmc4CBfX5+enVycnJ0cnJwb2tqamprbHBxcXFxcXBsbG9xdHV0dXVzc3eCi5GaoqWnp6WlpJyIgoGAgICAgICAgYWHg4B5cW1udHp+fXp9iZKRj4eCgYB/fXh1dnZ1dXqBh4qHfnd2enlya2VjY2VqbnFxcXJzc3R0dXV2dnd3d3h6enl5d3h5eXl5enp7e3p6e3t7e319fX19fXx8fX1/f39/fn59fX19fHp7e3l5enp5eXp6enp7eXl5eHh4eHl5e3t6ent7e3t6e3t7e3x9fX19fX5+fn9/f31/hImMjI2Pj4+Oi4qKiIaFhISDhoaIi4uKiIaEhISGh4eGiIyQk5KRkZGQjYuLjIyOkJKSk5OSkpGPkZKSkpOUlJOTlZWWlpaWlpaVlZWVlZWVlZWVlZOTlJORioF4c3RycG5qZ2VzgoJ+fn15dXR0dHRycnFwbmtpamlqbG9wcHBwbmxsb3F0dXR0dHNyd4GLkZmhpaampqakmoaCgYCAgICAgH+AgoODgXtzbW5zeX19en2IkZCPiYWCgX99eHV2dXZ2e4KIioZ8dHBzc2xmY2FiZGpucXFyc3JydHR0dHZ2d3d3d3l5eHh3d3h4eXp5eXp6eXt6enp7fHx9fX5+fX19fn5/fn59f35+fX17eXp6enp4eHh4enp6enp6enp5eXl5eXl6e3t7fHx8fHt8fHx7fH19fX1+foCAf39+foCDiIyNjpCRkY6Mi4mKh4aEhIOFhoaIiIeGhYKDhIaFhoWIjJGSkpGRkY+Ni4uMjY6PkZGTlJSSkpCRkpGTk5OUlJSVlJSWlpaWlpWVlJWVlZWUlJSUlJSUk4+IgHl1dXRvbmpnZHCAg399fHp1dHR1dXRxc3ZybmxoZ2doa25ubXBubWxucnV0dXN0dHZ8hIqQmKGlp6elpaKVhYCAgICAgICAgICBgIGBfXZubHF2en15e4eRkY6LhYKBgHt2dXV1dXd9hYqLgndva21qZ2VkYWFkaG1zc3Nzc3N0dHR0dXV2dnZ2eHh3d3d3d3d4eHl5eXl4enp6ent8fH19fX19fX1+fn9+fn1/f399fXx6enp6enh4eXl6enp6enp6enl5eXl5eXp7e3t8fHx8fHx8fHt8fX19fX5+f39/f35+gIOIjI2PkZKRj42LiIiGhoaGhYWGhoiIh4aEgoSFhYWEhImMkZKTkZCQjoyLi4yNjo+RkZOUlZSSkZGSkZOTk5SUlZWUlJaWlpaVlZSUlZWVlZSUlJSUlJWTjYV+enh5enVxbGhlcYGFgX18eXV0dHJyc290eXhzb2lnZmRna2tqbm1sbG1xdXV2dHV3eoKHi4+Xn6Wnp6aloZKEgICAgICAgICAgIGAgIF+e3JucXV6fHh7iJGSj4uFgoGAeXZ1dXV2eX+Giod9dG5rbGpqaWlnZmhtcXV1dHR0dHR0dHR0dHV1dXV2dnd3d3d3d3d3eHh5eXh6enp7fHx8fX18fHx+fX1+fn5+fX9/f319fHp6enp6enp5eXp6enp5eXp6eXl5eXl5ent7e3x8fHx8fHx8e3x9fX19fn5/f39/fn5/goeMjo+RkpKQjYuIh4aGhoaFhoaGhoaHhoOChIWFhYKDiY2SkpGQj4+Ni4yLjI2Oj5GTk5SVlJKRkZKRk5OTlJSVlZaWlZWVlZWUlJSVlZWVlJSUlJSTk5KLgnx7e36AfXZwaWZzgoaCfXp3dXV1c3Nyb252fXp1bmpnZWZoaGlsbGpqa25xdXZ2d3h8hIiLjpaco6Wnp6aikISAgICAgICAgICAgYCAg4KBeXJxc3l7eHqHj5GNioaCgX53dHV1dXd6gYeHgXlxcG5tbm9wcXBvcXZ4dHR1dXR0dHR0dHR0dXV1dXZ2dnZ3d3Z2dnZ4eHh4d3l6eXt7fHx9fXx8e359fX5+fn59f39/fX19e3p6enp6enp6enp6enh4enp5eXl5eXl6e3t7fHx8fHx8fHx7fH19fX1+fn5+f39+fn+Bh4yOkJGSkpGPi4iGhoeGhoWHhoaFhYeGg4OEhYWEg4OIjpKRj4+Pj42LjIuMjY6PkpOTlJWVlJGRkpGTk5OUlJWVlpaVlZWVlJSUk5WVlZWUlJSUlZOSj4d+enp/goWEfHZsZ3OChoB9eXZ1dnZ0dHJuanR+f3tzbWlkZWVlZ2traWlqam90dHV2eX6GiYyOlZuhpaanpqGPhIGAgICAgICAgICBgYKGiYZ/dXFyeHt5e4SLjYmFg4KBfXZzdXV1dnmAhYR7dXFwcnFzdHZ2dnl8fn90dHR0dHR0dHNzdXV1dXR0dnZ3d3d3d3d3d3Z3d3d3d3l5e3x8fH19fHx8fH19fn5+fn5/f399fX17e3t6enp6enp6enl5eXl5eXp6enp6ent7e3t7e3t7e3t6e3x8fH1+fn9/fn5+fn19fICGi4+QkZGUlJGLiIaGh4eHh4eHh4aHhYSDgoWIh4aFhomOkI6PjY+OjoyNjI2Oj5CSk5SUlpWUkpKRkZKSk5SUlpaVlZSUlZWUlJSUk5OVlZSUlJSUk5GMg397fYSHiYiFgXVsdICDgXt4dXV1d3V0cm1pb3yDgXlxbGhjYWFlZ2hpa2pqbnFydXd5f4WJjI2UmqCjpqamn46DgYCAgICAgICBgYKBho2SjIJ4cnF3end3foSEgn9/f4F8dnV2dXV3eYCEgnhxcXN2dnZ4enx/goOFg3R0dHR0dHR0dHR1dXV1dHR2dnZ2dnZ1dXZ2d3d3d3d3eHh6e3x8fHx8fHx8fH18fX5+f39/f319fXt7e3p6enp6enp6eXl5eXl5enp6enp6e3t7e3t7e3t7e3p7fHx8fX5+fn5+fn5+fX19f4WLkJCQkJKSj4uIh4eHh4mIiIiIh4iFg4GChYmHh4eIi42PjY6Njo6Njo2Mjo6QkZOUlJWWlpWUkpGRkpKUlJSVlZWVlZWUlJSTk5OTk5SUk5OTk5OSjoiCgH6ChomLi4uIgnp6goKBenh0c3R1dnVzbmdrd4CDfnhzbWRfX2JkZWhramxub3J0eX2ChYmMjZKZn6OmpqafjoOBgICAgICAgIKDg4OMlJmSh312cnV1cnBzeHd2dnZ4e3p1dnZ1dXh6gIN/dHBzdXh4eX2BhYiJiYeEdHRzc3R0dHR0dHV1dHR0dHV1dXV1dXV1dnZ3eHh4eHh4eHp7e3t7e3x8fHx8fXx9fn5/f39/fX19e3t7enp6enp6enp5eXl5eXl6enp6enp7e3t7e3t7e3t7ent8fHx9fX19fX5+fn59fX6AhoyPkJCQkJCPi4iIiIiJioqKioqKiIOCgoOGiYmIh4qLjY+NjYyNjYyOj46Pj5CRk5SUlZaWl5WSkZGSkpSUlJSUlJSTk5SUk5OTkpOTk5OSkpKSk5GMhYGAgoeKiouNjoyKhYGFhYN+eHRzdHV3dnNtZ2dwfYGAfHdvZGFhYWJjZmhpa21vcXN7gISGi4yNkJedoqWmpp+Ng4GAgICAgICAgoWEg4+Ym5SLgXp0dHFvbGttamtra3B0dXN2dnV1eXuAgXtzcnR2eXp9goeKjImIhYJ0dHNzdHR0dHV1dXVzc3R0dXVzc3NzdXV1dXd3d3d3d3h4eXp6ent7fHx8fHx9fX1+fn9/f399fX17e3t6enp6enp6enl5eXl5eXp6enp6ent7e3t7e3t7e3t6e3x8fH19fX19fn5+fn19foGGjI+Pj4+QkI+KioqKioqLi4uLi4uIg4GChYiJioqJiouOkI2Oi4uLjI6Pj5CQkJGTlJSVl5eWlJKRkZKSlJSUlJSTk5OTk5OTk5OSk5OTk5KSkpKRjoqFgIKEiYyMi42OjYyKh4iGhYF6dXN0dnd2cmxmZGt5gIJ+enBnY2NgYmFkZmhpbG5wdHyDhYeLjI2OlZyipaamoI2EgYCAgICAgICDh4SDj5iclI2DfHNxcW1pZ2djZWVla3BycnZ2dXV6e3+AenR1dnd6fYGEiYyLh4WCgHR0c3Nyc3R0dXV1dXR0dXV1dXR0c3R1dXV2d3d2dnd3eHh5eXp6e3t7e3x8fHx9fX1+fn5+fn5+fnx8e3t7enl5eXt7enp6enp5ent6ent7e3t8ent7e3t7fHt7fHx8fH5+fX19fX19fn1/goiMjY+Pj5CQjouKiIqKioqLiomKiYaEgoOGiYuLi4mLjI+Pj46MiYmKjJCQkI+QkZOUlpaWlpaVk5KRkZOTlJSVlJOTkpKTk5OTk5ORkZGRkZGRkZGPioWDhImMjY6NjY6OjYyMjIqIhoB6eHl4d3RxbGdlaHF7gH96c2lnZmJgYGFmZ2doam5ye4GFh4yMjY+UmqCkp6ehkYSBgYCAgIGAgYOFhIWNlJOSioJ6cm1qZ2VjYmFgYGJobXFxc3R1dnh+gH52dXZ2d32ChYmNjIqFgn97dHRzc3JzdHR1dXV1dXV1dXR0dHRzdHV1dXd3d3Z2d3d4eHl5enp7e3t7fHx8fH19fX5+fn5+fn5+fHx7e3t6eXp6e3t7e3p6ent7e3t7e3t8fHx7e3t7e3t8e3t8fHx8fn59fX19fX19fX+DiIuMjo6PkJCOi4qIioqKioqJiImHhIODhIeJioqKio2OkJCQj42JiIuNkJKQj5CRk5SVlpaWlpaUk5GRk5OUlJSUkpKRkZKSkpKSkpGRkZGRkZGRkI2IhYSHjI6Ojo2Njo6NjY2Ni4qIhYGBgX58d3NtaGVma3V6e3RwaWtqZWJiY2RlZmdobHB4foKFiouLjpKYnqSmpqCShIGBgYGBgoGAgYKCgoSHhYSAenVtamdlZGNhYF1dYGVqbXFydHV2eH19enV0d3l+hIiLjY2MiYWCf3t0dHNzcnN0dHV1dXV1dXR0dHRzc3N0dHV0dnZ2dnZ3d3h4eXl6ent7e3t8fHx8fX19fn9/fn5+fn58fHt7e3p5e3t7e3t7enp7e3t8e3t8fHx8fHt7e3t7e3x8fHx8fHx+fn5+fX19fX1/gISJi42OjY+QkI2KioiKioqKi4qIiIaDgoOFhoeIiImLjo+QkI+PjoqJjY+RkpGQkJGTk5WVlpaXl5WTk5OTk5OTk5OSkZCQkZGRkZGRkZGQkJCQkJCPi4iFh4uNj46OjY2Ojo2NjY2Li4mHh4iGhYJ/enNsaWdpbnV1b2tqbW5qaGdnZmZmZmdobHN5foKHiouMkZefo6WknpGGg4OCgX+Af39/fX18enp5eHZxcGpmZWRjY2JgXVxfYWRobnBzdXV4ent3dnl9gYaKjI6OjYqIhYKBf3R0c3Nyc3R0dXV1dXV1dHRzc3Jyc3R0dXR2dnZ2dnd3eHh5eXp6e3t7e3x8fHx9fX1+gIB+fn5+fnx8e3t7enl5eXt7e3t6ent7fHx8fH18fX19e3t7e3t7fH19fHx8fH5+f399fX19foCAhImKjo6Mj5CPjYqKiIqKioqKioiHhoOChIeGh4eIioyPkJGRj4+OjIuMjpGSkpGRkZOTlZWWlpiYlpSTk5OTkpKTk5GRkJCRkZGRkZGQkJCQkJCQkI6Lh4WJjI6Pjo6NjY6OjY2NjYyLiomJi4iHh4N/eXBtamlrcXFtampucGxtbWxpaGZmZ2Zpb3V6gISJioqPlZ2ipKGbkIWCgYB/f358fHt5eXh1c3JxcGxrZmZmZGNkYmBeXGBgYmZrb3J1dXd6e3l7gISIi4yNjo2MiYeFgoKBc3N0dHN0dHR1dXV1dHRzc3Nzc3N0dXV2dXZ2dnZ2dnZ2dnh4eXl5ent7e3t7e3t8fX1+fn9+fn59fXt6e3t6enl5e3t6ent7ent7e3x8e3t7fHx8e3t7fHx8fX17e3x8fn5+fn19fH5+gYOFiYuNjo2Pj42LiYmJioqKioqKioeFgoOEhYSFh4iJjI6QkpGQkI+MjIyOkJGSkZGRkZKUlZWVl5eWlZOTkpGRkZKSkZCPj5CQkZGQkJCQkJCQkI+PjouHh4qNjo6Ojo2NjY2Ojo6OjIuLi4uKiomJiYaBfnhxbW9wbmxpbHBycW9ycG1pZmVkZGhtc3d9gYaJiY2SnKKhmpOIgX5+fXt6enp5eHZ1dHRzcW9saGdlZWRkYmNkZWRhYGBhZGdsb3R2enx/gYSJjY+Oj46NiYmJhoWDgoJzc3R0dHR0dHV1dXV0dHR0c3Nzc3R0dXZ2dnZ2dnZ3d3d3eXl5eXl6e3t7e3t7e3x9fX5+f35+fn19fHt7e3p6e3t7e3t7e3t7e3t8fHx8fHx8fHx8fHt9fHx9fXt7e3t+fn5+fX18fn+ChYeJi42Ojo+OjIqJiYmKioqKioqIhIOCg4WGhYSFiImMjo+Qj5CQkI2NjI6QkZKSkZGRkpSVlZWWlpaWlJORkJGRkI+Pj46Ojo6Ojo6Oj4+Ojo6Ojo6OjImJio2Oj46OjY2NjY6Ojo6NjYyMi4uKiYmKiIaEg357eXh2c3Fzd3h5enx6dHBrZ2RkZmtvdHh8gYSIjJCYmpaMhn97ent5eHl4eXl4d3V0dHNxb2xoZ2ZkY2JkY2VnZ2NhYWFkZmlscXd/g4eIi46Qj4+PjIuJiIeGhYSDg3Jyc3N0dHR0dXV1dXR0dHRzc3NzdHR1dnZ2dnZ3d3d3eHh5eXl5eXp7e3t7e3t7fH19fn5/fn5+fX19fHx8e3t7e3t7e3t8fHt8fHx8fHt7fHx8fH19e318fHx8e3t7e35+fn59fXx+gYOFiImKjI2Oj46LiomKioqKioqKiYaDgoGEhoeGhoaHioyNjY2Nj5CQj42Mjo+QkpOSkZGSlJWVlZaWlpaVk5CQkJCOjo2NjIyOjo2Njo6NjY6Ojo6Ojo2MiomKjI2OjY2NjY2Njo6Ojo6OjY2LioqKiomIiIaHhYODgH99e31/gICCgYB6dnBpZmRkZ2pvc3h7foWJjZCOiYJ9enl4enl4eXl5eXp6d3h2dXNxb2tpaGRjYWNlZmhoZmVjY2RlZmltdoKHiouOj5CPjY2LioqJh4aFhIOEcXFycnR0dHR1dXV1dHR1dXNzc3N0dHV2dnZ2dnh4eHh4eHh4eXl5ent7e3t7e3t8fX1+fn9+fn59fX19fX18fHx8e3t8fH19fHx8fXx8fHx8fHx8fX17fXx8e3t7e3x8fn5+fn19fH6Bg4aJiYqMjo+OjYuKiYuLioqKioqIhYOBgoSIiYiHhYiKjIyMjY6PkJCOjIyOj5CSk5STkZGUlZWVlZWWlpaUkpGQkI6OjY2MjI2NjIyNjYyMjIyMjI2NjIuKiYqMjY6MjI2NjY2Ojo6Ojo6NjYuKi4uKioiIiIeIh4eFhoOEhYSGhYSDgn97dW1nZGNkZ2xvdHd6goWIiIR+fHl4eXl5enp6e3p7fH17e3p4dXNxbWlpZGNiYWVmaWloZ2NkZGRlZ2t1gIaLjIyNkJCOjoyLiomHhoeFhIRycnNzc3Nzc3R0dXRzc3R0c3Nyc3JzdHR2dnd3d3d3d3h4eXl6enp7e3t8fHp6enx9fX5+fn59fX19fn59fHx8fHx8fHt7fXx8fHx8fHx7e3x8fX1+fnx9fX18fHx8fHx+fn5+fXx+foKEh4mKi4yOj4+Mi4qKioqJiYqKiYeDgX+ChYqMioaFh4mLi4yMjo+QkI6NjY6OkJKTkpGQkJKTlZWUlJaVlZWSkJCPjo2Mi4uLi4uLjIyMjIyMjIyMjIyMjIqJiouNjY2NjY2NjY2NjY2NjY6OjYyLi4mJiIiIiIiIiomIiYiJi4uJiIWFhIJ8c2xnY2RmamttcHN7fn59e3h4eHh5eHh6fH1/fn6AgoGBf3x4dXRybmtoZGFgY2dnaGlpaGZlY2NjZ215gomLjYyNjY6OjIuLioeHh4aEhHNzc3Nzc3NzdXV1dHR0dHRzc3JzcnN1dXZ2d3d3d3h4eHh4eHp6enp7e3x8e3t7fH19fn5+fn19fX19fXx7e3t7e3t7fHx9fHx8fHx8fHt7fHx9fX5+fn5+fn5+fHx8fH5+fn59fH2Ag4WIioqLjI6Pj42LioqKiomJiYmIhIGAgYOGio2Mh4aGiIqKjI2Nj5CQj42Njo6QkpOSkZCQkpOUlZWUlpWVlZKQkI+NjIuKioqKioqKi4uLi4uLi4uLi4uLiomJi4yMjIyMjIyMjIyNjY2Njo6NjYuLiYmJiIiIiIiIiYqKiYuNjYyLioqJiIN7cWllZWZoamptb3R2dHR2dXh4eXp6en2Bg4WGhIWFh4iFf3p3dnVxbWpnY2JjZmhqbGxqaWdkZGRlZ255hYmMjI2Njo6Ni4uKiIiHh4WFdHR0dHV1dXV2dnV0dHR0dHNzcnN0dXZ3d3d3d3h4eHh4eHl5eXl5eXt7fHx8fHx9fX1+fn5+fX19fX19fHt7e3x8fHx9fX18fHx8fHx8fHx8fH19fn59fX19fX18fHx8fn5+fn59fYKDhoiKiouMjpCPjYuKioqKiYmHiIaDf4CDhYeKjY6JhoaHiIqLjY6OkJCQjo6OjpCSk5KRkJCRkpOUlZaVlZWVk5GQj4yLi4qJiYmJiYmKioqKioqKioqKi4uKiYiKi4uLi4uLi4uLi4yMjY2Ojo2NjY2Li4qIiIiIiIiIioqKi4+Pj46Ojo2MiIF4bWhmZ2hpaGlrbW9wcXZ2eHh5e3x+hYmOkI+OiomLi4Z/end3dXJvbWpoZ2VlaW1ubmxraGZjY2VkZm9+h4qMjY2Ojo6Mi4qKiomJh4d0dHV1dXV1dXZ2dXR1dXR0c3Nyc3V2dnd3d3Z2eXl5eXd3eHh4eHl5e3t8fHx8fH19fX5+fn59fX19fX18e3t7fX19fX19fXx8fHx8fHx9fXx8fX1+fnt7e3t7e3x8fHx+fn5+fX5+goWIiYqKi4yOj4+Oi4qKioqJiYiHhYOAgISGh4mMjYqHhoeIiouNjo6QkJCPjo6OkJKTkpGQkJCSk5OUlpWVlZWUkZCPi4qKioiIiIiIiImJiYmJiYmJiYmKioqJiImLi4uLi4uLi4uLi4uNjY6OjY2NjY2Ni4mIiImJiYmKiouMjo6OjI6Ojo2MhntyamhnZ2lnZ2pqbG1wdXZ3d3l8gYaMkpaZlpOPj42KhHt5eHh1cnFxbmxrZWNpbXBwbWtqZ2RkZGVkaXmDioyNjY6Ojo2LioqKiYmHh3NzdHR1dXV1dXV1dHR0dHRzc3J0dXZ3d3d3d3d4eXp6eXl4eHl5enp7e3x8fHx8fXx+fn5/f319fXx9fXx8fHx9fX19fX18fHx8e3t9fX5+fX19fX19fHt7e3t7fHx8fHt7e3x7fYCDhYeJiouMjY6QkI2KiYmJiYqKiIWDf36ChoeGiIuMi4iGhoeLjZCOjo+QkJCOjo6QkpKTkpGPj5CRk5SUlJSUk5GQkI2LioiHiIaHh4eHiIiJiYmJiIiIiIiJioiIiIiJiYmJiYmJiYmJio2Njo6Ojo6OjIyMiomJiIiJiYmJi4uMjY6Ojo6Pjo6Lg3luaGloaWlra2hoam1wdHN2e4CKkJWYmpuYk5GSkIh/eXh3eHh1d3d0c25paGttcXFubmppZWNkZGJlcoGJjo6Oj4+OjYuKioqJiYeHc3N0dHV1dXV1dXV0dHR0dHNzc3R1dnd4eHh4eHh5enp7e3p6enp6ent7fHx8fHx9fH5+fn9/fn59fH19fHx8fH19fX19fXx8fHx8fH1+fn5+fn19fX19e3t7e3t8fHx8e3t7fHt9gYOFh4mLi4yOjo+PjIqJiYmJiYmIg4B9f4SHiIaJi4yMioeHiIuMjo2Oj5CQkI6Pj5CSkpOSkY+PkJGTlJSUlJSTkZCQjYyKiIiIh4eHhoaHh4iIiIiIiIiIiImJiIiIiImJiYmJiYmJiYmKjIyNjY6Ojo6MjIyKiomIiImJiYmLi4uNjo+Pj4+PjoyHf3NramloaWtrZmVna25ydXl/h5CVlpaYmJaSkJGOh397enp8fX+CgX12cGxsbG5xcXBvbWxnZGRkY2VsfIeNjo+Pj46Ni4qKiomJiIh1dXV1dXV1dXV1dXR0dHR0c3N0dXZ2d3h4eHl5eHl6ent7enp6enp6e3t8fHx8fH18fn5+f39+fn18fX18fHx8fX19fX19fHx8fHx8fX5+fn5+fX19fX17e3t7e3x8fHx7e3t8fX+ChIeIiYuLjY6Ojo6MiomJiYmIh4aAfX2AhoeIh4iJi4yMiYeIiouMjI2PkJCQj4+PkJKSk5KRj4+QkZKTlJSUk5ORkI+NjIqJiIeGhYWFhYaGh4eHh4iIiIiIiYiHh4eHiIiIiIiIiIiIiYqLi4yMjo6OjoyMjIqKiYqKiYmJiYuLioyOj5CQj4+Ni4mEeXBsaWhpbGxnZWVoaW1ydn+HjZGTk5SUlJKQkY2Ig4KAgYOEiYqIhHtzb29ucHFxcHBwbmpmZGRjY2d0hI2Oj4+Pjo2LioqKiYmKinV1dXV1dXV1dXV1dHR0dHRzc3R1dnd3eHh5eXl4eXp6fHx7e3p6enp7e3x8fHx8fXx+fn5/f39/fXx9fXx8fHx9fX19fX18fHx8fX19fn5+fn59fX19fXt7e3t7fHx8fHt7e3x+f4KGh4mKi4yOjo6OjYuJiYmJiYiGg358foGHiYiIiImKi4yKiImJiouJjI+QkJCPj4+QkpKTkpGPj5CRkpOUlJSTk5GQj42MiomIh4aEhISEhIWGhoaGh4eHh4iJiIeHh4eIiIiIiIiIiIiJiouLjIyOjo6OjIyMioqJioqJiYqKioqJio2Oj4+Ojo2LioZ/dWxpaGlsbGlmZWZmam5yeoGGi42PkJCSkI+RjYqIiIiIiYuNjoyGfnVvb3Bxc3NxcXBuamdjZGRiZW5/io6Pj4+OjYuKioqJiYqKdnZ1dXZ2dXV2dnZ1dHNzc3R0dHZ3d3h5enl6enp6e3t8fHt7e3t6ent7enp7e319fX1+fn9/f399fnx8fHx9fX19fX19fXx8fHx9fX5+fn5+fXx8fHx7e3t7fHx8fHx8fHx8fX+AhIeJiouNjo+Pj42NjIqJiYmJh4N/fH6AhIqLiomIioqLjIuJiIiJiYmNj5GRkZCRkZGSkpORkZCQkZCQkZKTk5KRkZGOjIyKiYiHhoSDg4OEhYaGhoaEhoiIiIiIiIeGh4eIiYmIiYmJiYmJioqLjYyMjY2NjYyMi4qJiYmJiYmIiomLjY6Pj42NjYyKiIN5b2pmZ2pta2lmY2VnaGxwdnl/hIiJjIyOjo6Mi4uNjY2Oj5CRj4qBd29tcnV3d3RxcG9taWZlZWRjaXqGjpGPjY6Mi4qKioqKiop1dXV1dnZ1dXZ2dnV0c3NzdHR0dnh3enp7enl5enp6enx8e3t7e3p6e3t6ent7fX19fX5+f39/f31+fHx8fH19fX19fX19fX18fH19fX1+fn59fHx8fHt7e3t8fHx8fHx8fHx9f4KFiIqLjI6Pj4+PjYyKiomJiYeFf3t6f4KHi4uKiYiJiouMi4mIiImJio6QkpGQkZKTk5KSkpGRkZGRkJCQkZOSkZGQkI6MjIqJiIeGhIODg4SFhoaFhYSGh4eHh4eHhoWFhYaHiIiIiImJiYmJiYqMjIuMjIyMjIuLiomJiYmJiYiKiouNjo+PjY2NjYqJhn95cWhnamxtbGlmZWRjZWZqbXF2en+Fh4qMjIyMjI6Ojo+QkZGOioN4cGxvd3x9d3Nwb25raGdmZWNmdIGLkI+OjoyLioqKioqKinV1dXV1dXV1dnZ2dXRzc3N0dHR2d3h6ent6eXl6enp6fHx8fHt7enp7e3t7fHx9fX19fn5/f39/fn18fHx8fX19fX19fX1+fnx8fX19fX19fX18e3x8e3t8fH19fHx8fHx8fH1/goWJi4uNjo+Pj4+NjImKiYmJhoJ8enp/g4mMjIqJiImKjY2LiYiIiIqMj5GRkJCRkpOTkpGSkZGRkZGPj4+QkpKQkJCQjoyMiomIiIaGhYSEhIWGhoWFhIaHh4eHh4eGhYWFg4WHh4eHiIiIiIiIioyLi4yMi4uMi4qKiYmJiYmJiIqLi42Oj4+Ojo2Ni4qGhYF4bmlpam1wb21lY2JjZGVoaWtvdH2ChYmKjIyMjo6Oj5CRkY+LhXtxbG11fYB8eHNwbmxpaWdmZWdueoaNj4+NjIuKioqKioqKdnZ1dXR0dXV2dnZ1dHNzc3R0dHV3eXp6e3p6ent7e3t8fH19e3t6ent7fHx9fX19fX1+fn9/f39/fXx8fHx9fX19fX19fX5+fHx9fXx8fHx9fXx7fHx7e3t7fHx8fHx8fHx8fYCDhomLjI2Pj4+Pj42LiomJiYiEfnl7fYGGiYuMiYmIiYqNjYuJiIiIiYuOkJGQkZGTk5ORkZGRkZGRkY+Pj4+RkZCPj4+OjIyLiYiIhoeGhISDhYaGhISEhoaGhoaGhoWEg4ODhYeHh4eHh4eHiIiJi4qKi4uLi4yLioqJiYmJiYmIiouMjY6Pj4+PjY2LioeHhn91bGhobXNyb2dkY2NjZGZlZWlsdHqBhIiMjIyOjo6PkJGRko2IfnNub3N7gn97dHFubWtqaGZnaGp0gIqOjY2Mi4qKioqKiop0dHZ1dHR0dHZ2dnVzc3Jyc3V1dnd5ent8e3x8fX19fX19fX18fHt7fHx9fX19fn5+fn9/fn5+fn5+fX19fXt7fHx9fX19fX19fX19fXx9fX5+fXx9fHx8fHx7fHx8fHx8fHt+gYWIiouNjY6QkJCQjYuKiYmIh4J5d3l9homKjIyKiIiIio2OjImHh4iJi42Oj5CSkpOUlJKRkpGRkZCQj4+Pj5CPj4+Pj42NjIuIh4iHhoaGhYWFhYWEhIWFhoaGhoaGhYSEgoKEh4eHiIeHh4eHiImKi4uJi4uLjIuKiYmJiYmJiYmKioqLjY2Njo6Pj4uJh4eGhXtvZmZocHJvamVlY2JkZmNhZGZqcXmAhoqLjY2NjY6QkZKSkYyBd29ucnqDg394cGxrbW1raGdnaG95hIuOj46Mi4mJiYmJiXV1dnV1dXV1dnZ2dXNzc3NzdXZ2d3l6e3x8fHx+fnx8fX19fXx8fHx9fX19fX1+fn5+f39+fn5+fn59fX19fHx8fH19fX19fX5+fn59fHx+fn59fHx7e3t7e3t8fHx8fHx8e36ChYiKjY2Oj5CQkJCMiomJiYeEfnd4fIGJi4uLi4qJiIiKjZCNiYeHiIqLjY6PkJKUk5SUkpCPj5CQkJCPj4+Pj4+Ojo6OjY2Mi4mHiIeHh4eFhoWFhYSEhYWGhoeHhoaGhISCgoOFhoeIh4eHh4eIiYmJiYmLi4uLi4qJiYmJiYmJioqKiouMjY2Ojo6OjIqIiIeHg3hsZmZscHJva2ZjYGFlZmRkYmRpcHmBiIuMjI2Njo+QkZGRjIN7c25wd4GGhH11bGxub21rZ2hnbHN+h42OjoyLiYmJiYmJd3d2dXZ2dnZ2dnV2dHRzc3R2d3d3eXp7fHx9fX5+fX19fX19fX18fH19fX19fX5+fn5/f35+fn5+fn19fX18fHx8fX19fX19fn6AgH18e31+fnx8fHt7e3p6e3x8fHx8fHx7foOFiYuOjo6PkJCQkIyKiYmIhoB6eHqAhYuNjYuMi4mIiIuOkI2KiImKi4yNjo+RkpSUlZSSkI+PkJCPj4+Pj46Ojo6Ojo6NjYyLiomIh4iIh4aGhYWFhoaFhYaGhoaGhoaEhIKCgYOEhoeHh4eHh4iIiImJiYuLi4uKiomJiYmJiYmJiYmJiouMjI2NjY2Mi4qKiYmGfnNnZWhtcnNwamVgYGRoamhkY2Vrc36GiYuLjIyOj5CRkZGMhn52b3B3gIWFgHdta2xwcG9qaGhrbneEi4yNjIuJiYmJiYl2dnZ1dnZ2dnZ2dXZ1dXR0dHZ3d3d5ent8fH5+fX19fX19fX1+fnx8fX19fX19fn5+fn9/fn5+fn5+fX19fX19fHx9fX19fX1+fn9/fXx7fH5+fHx7enp6eXl6e3x8fHx8fHt+g4aKjI2Pj5CQkJCQjIqJioiDfnh4fIKIjY+OjIyLiomJjI+PjIuIiYqLjI2Oj5KUlJaXlJKQkJCPj46Oj4+Pj46OjY2NjY2NjIuKiYqIiImIh4aFhYWGhoeHhoaFhYaGhoSEgoKBgoSFh4eHh4eHiIiIiYmJi4uLi4qKiYmJiYmJiYiIiIiKi4uLjIyNjYuJioqKioeDeGtmZmtvdXJuaGNhZmptbmpmZmlyfoWIi4uNjY6PkJGRkY6IgHhxcHZ/hYWCeW5rbHBycm1paWlqcX6Hi42Mi4mJiYmJiXd3d3d3d3d3d3d2dnZ2dXV0dXZ3d3h6e319f39+fH19fX18fH19fHx9fX19fX1+fn5+fn5/f35+fn59fXx8fX19fXx9fn5+fn5+fn59fXx8fXx9fHt7e3p5eHl6ent9fXx8fH+Eh4uNjo6QkY+Pj46Ni4mJiIJ7d3qBhouOjoyMi4qIiYuNj4+NiomJiYqLjo+QkpSVl5iUkpCQkI+Ojo6QkI+PjoyNjY2Mjo6NjIyMi4qKiomIh4aGhoWFh4eGhoWFhoaGhoSDgn6AgoSGh4eIiIeIiIiJiYqKi4uJiYmJioqJiYiIiIiIiImKioqLi4uLiomKioqKioiAdGdkZ2xyc3BqZWRpbXJ0cm9rbnV9homLi4yMjo+RkZGQjomBe3VxdHyDhoV9c2xrcHR4c2xpaWptdoCJi4uLiomKioqKd3d4eHd3d3d3d3Z2d3d1dXV2d3d5eXp8fX5/f358fX19fXx8fHx8fH19fX19fX5+fn5+fn9/f39+fn19fHx9fX19fH1+fn5+fn5+fn19fXx9fH18e3t6enl4eXp6e3x8fHx9gIWIjIyNjpCRj4+OjIqKioiEfnh3fYSJjI2NjIyLi4iJi46PkI+KiYmJioyOkJGSlJWXmJaTkZGQj46OjpCQj4+OjIyMjIuMjY6OjIyLjIqKiYmIh4aGhYWHh4aGhoaGhoeHhYSCf3+Bg4aHh4iIh4iIiImJiYmKiomJiYmJiYmJiIiIiIiIiImJiYqKioqKioqKioqLiod9b2VkZm1zdnFqZ2dqcXh9e3h5fIOHioyMjIyOj5GRkZCPioR+dW9xeoKGhH92bmpudHl4b2tqaWpvd4GHiYmJiYqKiop4eHh4d3d3d3d3dnZ3d3Z2dnd5eXt7e3x9fn9/f35+fn19fHx8fH19fX19fX19fn5+fn5+f39/f35+fX1+fn19fX18fX9/fn5+fn5+fX1+fn18fHt6enp5eHd4eXp7fHx8fH2AhYmLjI2OkJGPj46LioqKh4B6eHmAh4uMjY2MjIuLioqLjpCRj4uJiYmKjI+RkpKUlZaXl5SSkZGPjo6OkJCPj46MjIyMi4uMjY2NjY2Ni4uKiomIhoaHh4eHhoaGhoaGh4eGhIOAfoCChYaHiIiHiIiIiYmJiYmJiYmJiYiIiYmIiIiIiIiIiYiIiYmJiYqKioqKioqLioV3bGZkZ3B3dnFsZ2pvd3+Cg4OFiIqNjo6OjpCRkZGRkI+Mh4B2cHB4gISDgXlxa2xwdnp1b2poZ2hueIGGiImJioqKinl5eHh3d3d3d3d2dnh4eHh2d3p7fHt8fX1+f39/fn9/fX18fH9/fn59fX19fX1+fn5+fn5/f4CAfn59fX9/fn59fXx9gIB+fn5+fn59fX5+fXx7enp6eXl4d3h5ent7e3x8fYCFiYyMjY+RkZCQjYuKioqGfnh5fYKJjIyMjIyMi4qJiouMjpCPi4mJiYqNj5GSkZOUlZeXlZOSkY+Ojo6QkI+PjoyLi4uKioyNjY6Ojo6NjYuLiomHh4eHh4eGhoaGhoaHh4eFhIB9f4GEhoeIiIeIiIiJiYiIiYmJiYmJiIiJiYiIiIiIiIaHh4eIiIiIiYmKioqKiYuKiH90a2ZjanR5dm5ra250fYKGh4uLjI+QkJCQkpKTk5GQjoyHgXhwcXd/g4SAeXJta211enhza2lmZWlxe4OFiImKioqKeHh3d3d1d3d3d3d3eHh4eHZ3ent8fX1+fn5/f39/f39+fn19fn59fHx8fX1+fn5+f39/f35+fn5+fn5+fn5+fn59fX5+fn59fX19fX19fXx7e3t7eXl5eHh4d3l6ent7fHx/gYaJi4yNj5CRkZGNjIuKiIN5dnp/houMjIuNjY2Ni4qJiYqNj4+NioiIiYyPkZCRk5SVlZWVlZOSkI+Pj46Oj4+OjIuLioqLjY2NjI6Oj4+Pjo6Ni4mJiIiIhoaGhoaGhoaGh4SDgX19f4KGhoiIiIiJiYmJiYmIiIiIiIiIiImJiIiIiIeHhoeHh4iIiIiJiYmJiYmKioqKhXxyaWNlcHl7dnFtam53f4aLjI+Oj4+PkJGSk5OSkY+OjIiDd3Bwdn6CgoB8dnFvb3V5endvaWdnZWlzf4WJiYmJi4t4eHd3eHZ4eHd3d3d4eHh4d3h5enx+fX5+fn9/f39/f35+fX1+fn18fHx9fX5+fX1/f39/fn5+fn5+fn5+fn5+fn1+fn5+fn19fX19fX19fHt7eXl4eHh4eHh3eXp6e3t8fH+Ch4qMjY2PkJCQkI2Mi4mGf3Z1eoCIjY2Mi42Ojo2LioiHiY2Pj4+LiImKjI+SkZGTk5WUlZWVk5OQj4+Pjo6Pj46Mi4uKiouMjIyMjY2Ojo6Pj46Ni4uJiIiGhoaGhoaGhoaHhIOBfnx8f4WGiIiIiImJiYmJiYiIiIiIiIiIiYmIiIiIh4eHh4eHiIiIiIiIiYmJiYmJiYmHg31xZWFndXt7d3Bpa3J7hImLjo+Pj4+QkZKTk5KRj46MiYN4cHB1fYKCgH54dHRwc3d6enRtaGZjZW17hImJiYmKinh4eHh5eHh4d3d3d3h4eXl3eHp7fH59fn5+f39/f39/fn59fX5+fXx8fH19fX19fX9/f39/f39/fn5+fn5+fn59fH19fn5+fX19fX19fX18e3t4eHd3eHd3d3Z4enp7e3x8f4KHioyNjo+Qj4+OjYyLiIV8dXZ8g4mMjIyLjY6OjYyKiIeIjY+PjoyKiouMj5KSk5OTlJSUlZaVlJGQkJCQkI+PjoyMjIqKi4yMjI2Ojo+Pj5CQj46MjIqIiIiGhoaGhoaGhoaGhIJ+enx/g4WIiIiIiYmJiYmJiIiIiIiIiIiJiYiIiIiHh4eHh4eIiIiIh4eIiImJiIiIiImHhHlsYWFseX57c2tqbnV+hYqNj4+Pj5CRkpOUkpGPjoyJhHpycHR7gYSBf3x4d3JydXl7dm9pZWNjaXaBiImJiYmJeHh5eXh3d3d3d3d3eHh6enh5ent8fn1+fn5/f39/f39+fn19fn59fHx8fX18fH5+f39/f4CAgIB+fn5+fn5+fn18fHx+fn59fX19fX19fXx7e3h4eHh3d3d3dnh6ent7fHx/goeLjY6Oj5CPkI6OjIuHgXp2eICGi42MjIuNjo6NjIqJh4iMjo+Oi4yKi4yPk5SUk5OTk5OUlpaVkpCQkJCQj4+OjIyMiouMi4uLjI2Oj4+Pj4+OjIyMi4mJiIiIiIiGhoaGhoaEgn96fH6BhYiIiIiJiYmJiYmIiIiIiIiIiImJiIiIiIeHh4aGhoeHh4eGhoeHiYmIiIiIiYmGf3JjX2Z0fX13bWprcXuDiYuPj4+PkJGSk5WTkY+OjIqFe3Vvc3qChIKBf3x7dnN0d3p3b2llYmJlcX6HiImJiYl5eXp6eXh4eHh4d3d4eHl5eXl5e3t8fn59f39/f3+AgH5+fX19fX19fX19fXx8fX5/f4CAf39/f39/f39+fn5+fX19fX19fX1+fn5+fXx8fHt6enl4eHd1eHh3d3h5eHp7fH+DiIuMjY6OkJCQj46Ni4Z9d3d7gYiMjY2NjIyOjo6Ni4qIiYuPkI+PjYuLjJCSk5STk5OUlJWVlZWSkJGRkZGQj46NjY2Mi4uLiouNjY2Pj4+Ojo6Mi4qJiYiIiIiGhoWGhoaGhoaDf3x7fH+ChYeHiYmJiYmJiIiIiIiJiYmJioqJiYeHhoaGhoaGhoaGhoaGh4eIiIiIiYmKiomGeWhdXWh4fHtzbW5udH6Gi4yPkJCQkpSUlZKQjo2MioZ+d3FyeX+Eg4KAf4B6d3N2eHdxaWVkYmVtfYaIiYeIiHp6enp5eHh4eHh4eHl5eXl6eXl6e3x+fn1/f39/f39/f399fX19fX19fX19fX19fn9/f39/f39/f39/f35+fn59fX19fX19fX5+fn59fHx8enp6eXh4eHZ3d3d3d3d4enp7foOIi4yNjo6Pj4+PjoyJg3d0eX2CiIyNjY2MjIyNjo2Mi4mKi46QkJGPjYyMj5KTlJOTk5OTlZWVlZKRkpKSkZCPjo6Ojo2LjIyKjI2NjY+Pj46NjIqLiomIiIiIiIaGhYaHh4eHhoSAfXt8f4GEhoeJiYmJiYmIiIiIiIiIiYmJiYiIh4eGhoaGhoaGhoaGh4eHh4iIiIiJiYqKioiAcWRcYWt3eXp0cG5xeYKHjI6QkJCTlpWVkpGPjYyKhoB4cnN4fYKDgYCBgoB7dHV3d3RtZ2ViZWx7hIiJh4iIenp6enl4eHh4eHh4eXl5eXp5eXt7fH5+fX9/f39/f3+AgH5+fX19fX19fX19fX1+f39/f39/f39/f35+fn5+fn19fX19fX19fn5+fnx9fHx6eXl5eHh3dXZ2dnZ2d3h6ent+g4iLjI2Ojo6OjY2Ni4Z/dXV5f4SJjI2MjIyMi4yNjY2LioqMjpCRkZCOjY2PkpOUk5OTk5OUlJSUkpGSk5KRkI+Ojo+Pjo2MjIyMjY2Nj4+Pjo2MioqKiYiIiIeHhoaFhoeHh4eGhYJ/fn1/gIOFh4mJiYmJiYiIiIiIiIiJiYiIiIiHh4aGhoaGhoeHh4eHh4eHiIiIiImJioqKiYZ8bF5cYGpye3t1b250foSLjZCRk5WXlpWTkY+NjIqGg3p1cnV7gIKBgYKGhYF5dnd4d3FqaWZlaniBh4iGh4d6enp6eXh4eHh4eXl6ent7e3t8e3t8fn59f39/f3+AgICAf399fX19fX19fX5+fX5/f4CAf39/f39/fX1+fn5+fX19fX19fX19fX19fH18fHp5eXh4eHV0dnZ1dXV2d3l6e32CiIuMjY6Ojo6MjIyLhHtzdnyChoqMjYyMi4uLjI2NjYuLi4yPkJGRkY+OjpCSk5STk5OSkpOTk5ORkJGTkpGQj46Oj4+Qj4yMjYuNjY2Oj4+NjY2KioqJiIiIhoaGhoWGh4eHh4eGhIKAfn6AgoWHiYmJiYmJiIiIiIiHh4mJiIiHh4eHhoaGhoaGiIiIiIeHh4eIiIiIiYmKioqLiYFzY1paYGx5fXdybXF6goqNkJOVl5iYlpORkI2MioaDe3VydHp/goKBg4eJhH14dnh3c2xraGVodoCGh4aHh3t7eXl4eHh4eXl5eXl5enp6fHx8fH19fX1/f39/f4GBf39+fn19fX19fX5+fX1+f39/f3+Afn9/f35/f35+fn5+fn5+fn19fXx8fHx8fHx7enl3eHh3dXV2dnV1dnZ4eXl7fYKHioyNjYyNjYmKjIiCeHR4foOHioyNjIyLiouMjY6OjIuMjI2QkpKTkZCPkJGSk5STk5KSk5KTk5GQj5CSkpGQj4+PkJGRjo6NjI2NjY2OjY2Mi4uJiIqJh4eGhoSEhYWGh4aGh4aGhIF/gICCgoaIiYmIiIiIiIiIiIiIiIiIiIeHh4aGhoaGhoaHh4iIiIiIiIiIiYmJioqKiYqLiHtnXFlbZXd+eXRwbnV+h42Qk5SXmJeWlJKPj42Lh4R8dnFzdnyBgYKEh4uJf3d2eHZzbm1pZWZyfIWGh4aGe3t5eXh4eHh5eXl5eXl6ent7fH19fX19fX9/f39/gIB/f35+fn5+fn5+fn59fX9/f39/f4B+f39/fn9/fn5+fn9/f39+fX19fHx8fHx8e3p6end4eHd1dXZ2dXV1dnh4eXt+goeKi4yNi4mJiYqMiIB3dnuBhIiKjI2MjIyLjI2Ojo6NjIyNjpGSkpOSkZCQkZKTlJOTk5OTkpOTkI6OkJKSkZCQkI+QkZGQkI6OjY2NjY6NjIyLiomIiIeHh4eGhISFhYWHhoaHhoaEg4GBgIKChYiJiYiIiIiIiIiIiIiIiIiIh4eHhoeHh4eHh4eHiIiIiIiIiIiJiYmKioqJio2Kg3BfV1debXh7d3JvcHiCio6RlZeYmJaUko+OjIqIhX53c3BzeYB/gYKHjIyFfnl4dnRwbWpmZW13goWGhYV7e3l5eHh4eHl5enp7e3p6e3x9fX19fX19f39/f3+AgH9/f39/f39/f39/f319f39/f39/gH5/f39+fn5+fn5+f39/f359fX18fHx8fHx7enp5d3h3dnV1dnZ1dXZ3d3h4en2BhomLjIuJiIiJioyIfnZ4fYOGiIqLjIyMjIuNjo6Ojo2MjI6PkJCQkpGQkJCRkpKTk5OTk5KRkpKPjo6QkpKRkJCQj5CRkZGRj4+Ojo6Ojo2Mi4uKiYeGhoeHh4aEhIWFhIaGhoeGhoWFhIOCgoKEh4iIiIiIiIiIh4eHh4iIiIiHh4eGh4eHh4eHh4eIiIiIiIiIiImJiYqKiomKi4yJeWZbVllkdX19eHNvc36GjZGVl5eXlpSSj46MiYiDf3lzbW93fH5/gIaMjoqDe3d2dXFua2dmaXR/hISEhHt7eXl4eHh4eXl6ent7enp7fHx8fX19fX1/f39/f39/f3+AgH9/f39/f35+fX1/f39/f3+Afn9/f35+fn5+fn5/f39/fn19fXx8fHx8fHx7e3p3d3Z1dXV2dnV1d3d3d3h6fYGFiIqLiomIiImKjIh+dnh/hYeIioqLjIyMi46PjY2OjYyMjY6RkJCSkZCQkZGSkpKTk5OTkpCRkY+Pj5CSkpGQkJCPkJGRkJCPj4+Pjo6OjYyLioqJh4eHh4eHhoSEhYWEhYaGh4aHhYSDg4OCgoSGh4eIiIiIiIiGhoaGiIiIiIeHh4aHh4eHh4eHh4iIiIiIiIiIiYmJioqKiYqJjIp/bF5XVmBzfH97dm9xe4WNk5aYl5eWlJKPjYuIiYOAeXJtcHR6fH1/houOjYZ8d3Z1cW5rZ2VocX2EhIWFClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iYWxpXzY0MHgzNjBfUkdCMjQucmdiIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iYWxpXzY0MHgzNjBfUkdCMjQucmdiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWViZDFlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmFsaV82NDB4MzYwX1JHQjI0LnJnYgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmJiLTMyMHgyNDAtMnZpZGVvLTJhdWRpby5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JiYi0zMjB4MjQwLTJ2aWRlby0yYXVkaW8ubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWFiY2U2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmJiLTMyMHgyNDAtMnZpZGVvLTJhdWRpby5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYV9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuYy1rZXlfcm90YXRpb24ubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzhjZTBmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuYy1rZXlfcm90YXRpb24ubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuYy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZjQ0YTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hX2ZyYWctY2VuY19jbGVhci1hbGwubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jX2NsZWFyLWFsbC5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1OTlkZmUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jX2NsZWFyLWFsbC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYV9mcmFnLWNlbmNfbWlzc2luZy1zYWl6LXNhaW8ubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFfZnJhZy1jZW5jX21pc3Npbmctc2Fpei1zYWlvLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzOGFjZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYV9mcmFnLWNlbmNfbWlzc2luZy1zYWl6LXNhaW8ubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFhY19oZS50cyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hYWNfaGUudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YWZjZWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWFhY19oZS50cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hdl9mcmFnLWluaXRzZWdtZW50LW12aGRfdmVyc2lvbl8wLW12aGRfZHVyYXRpb25fYml0c19hbGxfc2V0Lm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hdl9mcmFnLWluaXRzZWdtZW50LW12aGRfdmVyc2lvbl8wLW12aGRfZHVyYXRpb25fYml0c19hbGxfc2V0Lm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmMGE2OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYXZfZnJhZy1pbml0c2VnbWVudC1tdmhkX3ZlcnNpb25fMC1tdmhkX2R1cmF0aW9uX2JpdHNfYWxsX3NldC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYXZfZnJhZy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYXZfZnJhZy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwNWUxYTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWF2X2ZyYWcubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWF2X3dpdGgtYXVkLW5hbHVzX2ZyYWcubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLWF2X3dpdGgtYXVkLW5hbHVzX2ZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmE5OTMxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hdl93aXRoLWF1ZC1uYWx1c19mcmFnLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hdnRfc3VidF9mcmFnLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC1hdnRfc3VidF9mcmFnLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjNTg0ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtYXZ0X3N1YnRfZnJhZy5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWF2YzMubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLXZfZnJhZy1hdmMzLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5NzBhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWF2YzMubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLXZfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzZDI2Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmMta2V5X3JvdGF0aW9uLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC12X2ZyYWctY2VuYy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmMubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWU2NWMwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC12X2ZyYWctY2VuYy5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtdl9mcmFnLWNlbmNfY2xlYXItYWxsLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC12X2ZyYWctY2VuY19jbGVhci1hbGwubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWYyZjZiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC12X2ZyYWctY2VuY19jbGVhci1hbGwubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLXplcm8tc3Rzei1lbnRyeS5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtemVyby1zdHN6LWVudHJ5Lm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzODY1OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAtemVyby1zdHN6LWVudHJ5Lm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDI0YTBmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAudHMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNGZlZTEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmNjMyOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMTI4MHg3MjAud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0xMjgweDcyMF9wdHN3cmFwYXJvdW5kLnRzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwX3B0c3dyYXBhcm91bmQudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MjE1YzMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTEyODB4NzIwX3B0c3dyYXBhcm91bmQudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDE4MC1oaTEwcC12cDkud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MTgwLWhpMTBwLXZwOS53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2E1MzFkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MTgwLWhpMTBwLXZwOS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgxODAtaGkxMHAubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgxODAtaGkxMHAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjViNGFjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MTgwLWhpMTBwLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MTgwLWhpMTJwLXZwOS53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgxODAtaGkxMnAtdnA5LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYjU0YWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgxODAtaGkxMnAtdnA5LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC0xNng5LWFzcGVjdC1hdl9lbmMtYXYud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLTE2eDktYXNwZWN0LWF2X2VuYy1hdi53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjg1ZjQ4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLTE2eDktYXNwZWN0LWF2X2VuYy1hdi53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtMTZ4OS1hc3BlY3Qud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLTE2eDktYXNwZWN0LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWU4MDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtMTZ4OS1hc3BlY3Qud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLVA0NDQud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLVA0NDQud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmMmM2NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1QNDQ0LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hbHRyZWYud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWFsdHJlZi53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWRiMDdhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWFsdHJlZi53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXVkaW8tb25seS00OGtoei53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXVkaW8tb25seS00OGtoei53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmFhMzgwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHktNDhraHoud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHkud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHkud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU5NDc1NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdWRpby1vbmx5LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYS53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLWEud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIyOGU1My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLWF2LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYXYud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyN2Y5MS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYXYud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWF2X2VuYy1hdl9jbGVhci0xcy53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLWF2X2NsZWFyLTFzLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyY2Q0MWEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLWF2X2NsZWFyLTFzLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYXZfY2xlYXItYWxsLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1hdl9lbmMtYXZfY2xlYXItYWxsLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTBlNmQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLWF2X2NsZWFyLWFsbC53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLXYud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWF2X2VuYy12LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYTZjNjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtYXZfZW5jLXYud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWN1ZXMtaW4tZnJvbnQud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLWN1ZXMtaW4tZnJvbnQud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1ZjNiMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1jdWVzLWluLWZyb250LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1saXZlLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1saXZlLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNzViMzkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtbGl2ZS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtbWFuaWZlc3QuanMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1tYW5pZmVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU2NjAyYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1tYW5pZmVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi17Ci0gIGR1cmF0aW9uOiAyLjc0NDAwMCwKLSAgdHlwZTogJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4LCB2b3JiaXMiJywKLSAgaW5pdDogeyBvZmZzZXQ6IDAsIHNpemU6IDQzNzB9LAotICBtZWRpYTogWwotICAgIHsgb2Zmc2V0OiA0MzcwLCBzaXplOiA0MDc3OCwgdGltZWNvZGU6IDAuMDAwMDAwIH0sCi0gICAgeyBvZmZzZXQ6IDQ1MTQ4LCBzaXplOiAyNzU4OSwgdGltZWNvZGU6IDAuMzk2MDAwIH0sCi0gICAgeyBvZmZzZXQ6IDcyNzM3LCBzaXplOiAyODE4MywgdGltZWNvZGU6IDAuNzc5MDAwIH0sCi0gICAgeyBvZmZzZXQ6IDEwMDkyMCwgc2l6ZTogMzE2MDAsIHRpbWVjb2RlOiAxLjE5NzAwMCB9LAotICAgIHsgb2Zmc2V0OiAxMzI1MjAsIHNpemU6IDMzOTIyLCB0aW1lY29kZTogMS41ODkwMDAgfSwKLSAgICB7IG9mZnNldDogMTY2NDQyLCBzaXplOiAzMDU4NywgdGltZWNvZGU6IDEuOTg3MDAwIH0sCi0gICAgeyBvZmZzZXQ6IDE5NzAyOSwgc2l6ZTogMjIwNzksIHRpbWVjb2RlOiAyLjQwMDAwMCB9LAotICBdCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1tdWx0aXRyYWNrLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1tdWx0aXRyYWNrLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4N2IxOTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtbXVsdGl0cmFjay53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtb3B1cy1hX2VuYy1hLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1vcHVzLWFfZW5jLWEud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyMGU1My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1vcHVzLWFfZW5jLWEud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLW9wdXMtYXZfZW5jLWF2LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1vcHVzLWF2X2VuYy1hdi53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTA3ZjdhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLW9wdXMtYXZfZW5jLWF2LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1vcHVzLWF2X2VuYy12LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC1vcHVzLWF2X2VuYy12LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3OGEwYTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtb3B1cy1hdl9lbmMtdi53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdi12cDlfZW5jLXYud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXYtdnA5X2VuYy12LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZjAwMjkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdi12cDlfZW5jLXYud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXZfZW5jLXYud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXZfZW5jLXYud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyZjlhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC12X2VuYy12LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC12X2ZyYWctaGV2Yy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC12X2ZyYWctaGV2Yy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNDEzNzIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdl9mcmFnLWhldmMubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdl9mcmFnLXZwOS1jZW5jLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXZfZnJhZy12cDktY2VuYy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNDgwN2UuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdl9mcmFnLXZwOS1jZW5jLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLXZfZnJhZy12cDkubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdl9mcmFnLXZwOS5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MTI0MGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdl9mcmFnLXZwOS5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC12aWRlby1vbmx5LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItMzIweDI0MC12aWRlby1vbmx5LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjAxZjQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAtdmlkZW8tb25seS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci0zMjB4MjQwLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExYjQxNTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTMyMHgyNDAud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWFfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1hX2ZyYWctY2VuYy1rZXlfcm90YXRpb24ubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzRmMTk3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWFfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1hX2ZyYWctY2VuYy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1hX2ZyYWctY2VuYy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjQ5YzQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtYV9mcmFnLWNlbmMubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtYV9mcmFnLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWFfZnJhZy5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNDMxYjEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtYV9mcmFnLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWF2X2VuYy1hdi53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtYXZfZW5jLWF2LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNTRhZTAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtYXZfZW5jLWF2LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1hdl9mcmFnLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWF2X2ZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWEwNDVhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLWF2X2ZyYWcubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbWFuaWZlc3QuanMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1tYW5pZmVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc3ODdiMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1tYW5pZmVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi17Ci0gIGR1cmF0aW9uOiAyLjc0MDAwMCwKLSAgdHlwZTogJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4LCB2b3JiaXMiJywKLSAgaW5pdDogeyBvZmZzZXQ6IDAsIHNpemU6IDQzNDB9LAotICBtZWRpYTogWwotICAgIHsgb2Zmc2V0OiA0MzQwLCBzaXplOiA1MDk1MCwgdGltZWNvZGU6IDAuMDAwMDAwfSwKLSAgICB7IG9mZnNldDogNTUyOTAsIHNpemU6IDE4Nzg1LCB0aW1lY29kZTogMC41MjcwMDB9LAotICAgIHsgb2Zmc2V0OiA3NDA3NSwgc2l6ZTogMTk4MTAsIHRpbWVjb2RlOiAxLjAxNDAwMH0sCi0gICAgeyBvZmZzZXQ6IDkzODg1LCBzaXplOiAyMTcwNiwgdGltZWNvZGU6IDEuNTIyMDAwfSwKLSAgICB7IG9mZnNldDogMTE1NTkxLCBzaXplOiAyMDI0OSwgdGltZWNvZGU6IDIuMDE2MDAwfSwKLSAgICB7IG9mZnNldDogMTM1ODQwLCBzaXplOiA5OTQ2LCB0aW1lY29kZTogMi41MTUwMDB9LAotICBdCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1ub25fc3F1YXJlX3BpeGVsLXdpdGhfcGFzcC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC1ub25fc3F1YXJlX3BpeGVsLXdpdGhfcGFzcC5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjMyOGMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRoX3Bhc3AubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRob3V0X3Bhc3AubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtbm9uX3NxdWFyZV9waXhlbC13aXRob3V0X3Bhc3AubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGJiYWFmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLW5vbl9zcXVhcmVfcGl4ZWwtd2l0aG91dF9wYXNwLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC12X2ZyYWctY2VuYy1rZXlfcm90YXRpb24ubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTZjNjRlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLWtleV9yb3RhdGlvbi5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC12X2ZyYWctY2VuYy1zZW5jLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLXNlbmMubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTc2MTk4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLXNlbmMubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtdl9mcmFnLWNlbmMubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAtdl9mcmFnLWNlbmMubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjYzZGQ0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy1jZW5jLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC12X2ZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWQzMGZiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci02NDB4MzYwLXZfZnJhZy5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLTY0MHgzNjAud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhZTM2Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItNjQweDM2MC53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWFfZW5jLWEud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hX2VuYy1hLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkODdiOGUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWFfZW5jLWEud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hYzMtb25seS1mcmFnLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hYzMtb25seS1mcmFnLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY5YzQwNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYWMzLW9ubHktZnJhZy5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8tMTBzLUNCUi1oYXMtVE9DLm1wMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby0xMHMtQ0JSLWhhcy1UT0MubXAzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzcwZTQ2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby0xMHMtQ0JSLWhhcy1UT0MubXAzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLTEwcy1DQlItbm8tVE9DLm1wMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby0xMHMtQ0JSLW5vLVRPQy5tcDMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlOTcyZDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLTEwcy1DQlItbm8tVE9DLm1wMworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby0xMHMtVkJSLWhhcy1UT0MubXAzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLTEwcy1WQlItaGFzLVRPQy5tcDMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGVjNzUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLTEwcy1WQlItaGFzLVRPQy5tcDMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8tMTBzLVZCUi1uby1UT0MubXAzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLTEwcy1WQlItbm8tVE9DLm1wMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNlYTYwYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8tMTBzLVZCUi1uby1UT0MubXAzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLWltcGxpY2l0LWhlLWFhYy12MS5hYWMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8taW1wbGljaXQtaGUtYWFjLXYxLmFhYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFjY2RmMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8taW1wbGljaXQtaGUtYWFjLXYxLmFhYworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby1pbXBsaWNpdC1oZS1hYWMtdjIuYWFjIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLWltcGxpY2l0LWhlLWFhYy12Mi5hYWMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTU1YzEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLWltcGxpY2l0LWhlLWFhYy12Mi5hYWMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItYXVkaW8tbGMtYWFjLmFhYyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby1sYy1hYWMuYWFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODQ2N2U5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby1sYy1hYWMuYWFjCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLW1haW4tYWFjLmFhYyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1hdWRpby1tYWluLWFhYy5hYWMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ODgzZjcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLWF1ZGlvLW1haW4tYWFjLmFhYworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1lYWMzLW9ubHktZnJhZy5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItZWFjMy1vbmx5LWZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTMwZmQxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1lYWMzLW9ubHktZnJhZy5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItaGV2Yy1mcmFnLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1oZXZjLWZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjg1YWJhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1oZXZjLWZyYWcubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW1wZWcyLWFhYy1vbmx5X2ZyYWcubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW1wZWcyLWFhYy1vbmx5X2ZyYWcubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2U3MzFjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1tcGVnMi1hYWMtb25seV9mcmFnLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1vcHVzLWVuZC10cmltbWluZy53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW9wdXMtZW5kLXRyaW1taW5nLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTgxNDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW9wdXMtZW5kLXRyaW1taW5nLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItb3B1cy5vZ2cgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItb3B1cy5vZ2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNGJmNTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW9wdXMub2dnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW9wdXMud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci1vcHVzLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxOTgxNDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLW9wdXMud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDgtd2VidnR0LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA4LXdlYnZ0dC53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGI0ZDE0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDgtd2VidnR0LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA4YS1vZGQtZGltZW5zaW9ucy53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOGEtb2RkLWRpbWVuc2lvbnMud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQzYWI2ZGIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOGEtb2RkLWRpbWVuc2lvbnMud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDhhLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA4YS53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA2MjU3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDhhLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5LWJsb2NrZ3JvdXAud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktYmxvY2tncm91cC53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2ZmYTdkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktYmxvY2tncm91cC53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOS1idDcwOS53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOS1idDcwOS53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Y5NTQ4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktYnQ3MDkud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktb2RkLWRpbWVuc2lvbnMud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktb2RkLWRpbWVuc2lvbnMud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2NWE5MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5LW9kZC1kaW1lbnNpb25zLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5LW9wdXMud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktb3B1cy53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDM1NWNmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDktb3B1cy53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOS5pdmYgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5Lml2ZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MGVhYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5Lml2ZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDkuaXZmLmNvbnRleHQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5Lml2Zi5jb250ZXh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWI5N2RiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDkuaXZmLmNvbnRleHQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNDk3YWUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOWEtb2RkLWRpbWVuc2lvbnMud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDlhLW9kZC1kaW1lbnNpb25zLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MjdmNTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLXZwOWEtb2RkLWRpbWVuc2lvbnMud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDlhLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXItdnA5YS53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDk4Njg3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci12cDlhLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYWMzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmFjMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFmMjg4Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYWMzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmFkdHMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYWR0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY4ZDUyMS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYWR0cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5haWZmIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmFpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDI1NTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmFpZmYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYXNmIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmFzZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5NjdmNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuYXNmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmF2aSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5hdmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NGNmMGMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmF2aQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5lYWMzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmVhYzMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjFiMTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmVhYzMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuZmxhYyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5mbGFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGIxM2Y5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5mbGFjCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmZsdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5mbHYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YzY1OTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmZsdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oMjYxIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmgyNjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMDEzNjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmgyNjEKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuaDI2MyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oMjYzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI1YmFkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oMjYzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLmgyNjQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuaDI2NApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBiYWE2OS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuaDI2NAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oMjY0Lm1kNSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oMjY0Lm1kNQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVjYzQwNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuaDI2NC5tZDUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMgLS10ZXN0X3ZpZGVvX2RhdGE9ImJlYXIuaDI2NDozMjA6MTgwOjMwOjMyOjM1OjE1MDoxIgotIyBJbnRlbCAtIEl2eSBCcmlkZ2UKLTE0NjA3NzZkZTM2YzJlYWI0MjZhNjE5ZmRlMTljZjg3Ci0jIEludGVsIC0gU2FuZHkgQnJpZGdlCi02NDUxZDFjMzVkMGUzMjQwODgyZGNiZDc4MzFhNDQ2ZQotIyBBUk0gLSBFeHlub3MKLWEyNWM5YzhiZDQ5OGM2YmU2YmZlZTVjNDEyN2IxNjA4CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuaGV2YyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oZXZjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmEwNTQ1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5oZXZjCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm0ydHMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIubTJ0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUwOGRjNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIubTJ0cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tM3U4IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm0zdTgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NThkNTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm0zdTgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNFWFRNM1UKLSNFWFQtWC1WRVJTSU9OOjMKLSNFWFQtWC1UQVJHRVREVVJBVElPTjoxCi0jRVhULVgtTUVESUEtU0VRVUVOQ0U6MAotI0VYVElORjowLjkzNDI2NywKLWJlYXIwLnRzCi0jRVhULVgtRU5ETElTVApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm1qcGVnIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm1qcGVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTRhZDJkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tanBlZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzYzYjU5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIubXBlZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tcGVnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTUxYjVhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5tcGVnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm9ndiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5vZ3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZTExMzQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLm9ndgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5ybSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhci5ybQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0YTE1MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIucm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuc3dmIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLnN3ZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2Y2IzNi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIuc3dmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyZGYzZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcjAudHMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXIwLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjQ0YjY3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcjAudHMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfMTkya0h6LndhdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl8xOTJrSHoud2F2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNiYjRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl8xOTJrSHoud2F2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyXzMyMHgxOTJfNDBmcmFtZXMueXV2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyXzMyMHgxOTJfNDBmcmFtZXMueXV2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjcxOGE4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl8zMjB4MTkyXzQwZnJhbWVzLnl1dgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl8za0h6LndhdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl8za0h6LndhdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkNzk4Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfM2tIei53YXYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfYWR0c19pbl9wcml2YXRlX3N0cmVhbV8xLnRzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2FkdHNfaW5fcHJpdmF0ZV9zdHJlYW1fMS50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlMGY0Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfYWR0c19pbl9wcml2YXRlX3N0cmVhbV8xLnRzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2FsYXcud2F2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2FsYXcud2F2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjBkM2RjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9hbGF3LndhdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9hdWRpb19sb25nZXJfdGhhbl92aWRlby5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfYXVkaW9fbG9uZ2VyX3RoYW5fdmlkZW8ub2d2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc1YjE5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9hdWRpb19sb25nZXJfdGhhbl92aWRlby5vZ3YKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfYXVkaW9fc2hvcnRlcl90aGFuX3ZpZGVvLm9ndiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9hdWRpb19zaG9ydGVyX3RoYW5fdmlkZW8ub2d2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmU5Y2M5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9hdWRpb19zaG9ydGVyX3RoYW5fdmlkZW8ub2d2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2RpdnhfbXAzLmF2aSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9kaXZ4X21wMy5hdmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZTFhMzEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2RpdnhfbXAzLmF2aQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9nc21fbXMud2F2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2dzbV9tcy53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzOGU5MGIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2dzbV9tcy53YXYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfaDI2NF9hYWMuM2dwIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX2gyNjRfYWFjLjNncApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYxMTY2Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfaDI2NF9hYWMuM2dwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX21wZWc0X2Ftcm5iLjNncCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9tcGVnNF9hbXJuYi4zZ3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlZDgyNWMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX21wZWc0X2Ftcm5iLjNncAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9tcGVnNF9tcDMuYXZpIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX21wZWc0X21wMy5hdmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNWJlM2QuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX21wZWc0X21wMy5hdmkKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfbXBlZzRhc3BfbXAzLmF2aSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9tcGVnNGFzcF9tcDMuYXZpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTMxZTJkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9tcGVnNGFzcF9tcDMuYXZpCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX211bGF3LndhdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9tdWxhdy53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZDM2MDcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX211bGF3LndhdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9wY20ud2F2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3BjbS53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzBlZWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3BjbS53YXYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcGNtX3MxNmJlLm1vdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9wY21fczE2YmUubW92CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDc2ZGQ4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9wY21fczE2YmUubW92CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3BjbV9zMjRiZS5tb3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcGNtX3MyNGJlLm1vdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyYmU4ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcGNtX3MyNGJlLm1vdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9yb3RhdGVfMC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcm90YXRlXzAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2ZiMjYyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9yb3RhdGVfMC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcm90YXRlXzE4MC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfcm90YXRlXzE4MC5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMTZkMmEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3JvdGF0ZV8xODAubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3JvdGF0ZV8yNzAubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3JvdGF0ZV8yNzAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjU4NWIzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9yb3RhdGVfMjcwLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9yb3RhdGVfOTAubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3JvdGF0ZV85MC5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MjE2NTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3JvdGF0ZV85MC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfc2lsZW50Lm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9zaWxlbnQubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWYwYTlmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9zaWxlbnQubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9iZWFyX3NpbGVudC5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfc2lsZW50Lm9ndgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzMzMxOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfc2lsZW50Lm9ndgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9zaWxlbnQud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmVhcl9zaWxlbnQud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViZjdkOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JlYXJfc2lsZW50LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGUuaHRtbCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzVlNGFkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci0gIDxoZWFkPgotICAgIDxzdHlsZT4KLSAgICAgIGJvZHkgewotICAgICAgICBjb2xvcjogd2hpdGU7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwotICAgICAgfQotICAgIDwvc3R5bGU+Ci0gIDwvaGVhZD4KLSAgPGJvZHkgb25sb2FkPSJtYWluKCkiPgotICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPjwvZGl2PgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPkltYWdlPC90ZD4KLSAgICAgICAgPHRkIGlkPSJ2aWRlb19oZWFkZXIiPjwvdGQ+Ci0gICAgICAgIDx0ZD5BYnNvbHV0ZSBEaWZmPC90ZD4KLSAgICAgICAgPHRkPkRpZmZlcmVudCBQaXhlbHM8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkPjxpbWcgc3JjPSJibGFja3doaXRlLnBuZyI+PC9kaXY+Ci0gICAgICAgIDx0ZD48dmlkZW8gYXV0b3BsYXk+PC92aWRlbz48L2Rpdj4KLSAgICAgICAgPHRkPjxjYW52YXMgaWQ9ImRpZmYiPjwvY2FudmFzPjwvdGQ+Ci0gICAgICAgIDx0ZD48Y2FudmFzIGlkPSJtYXNrIj48L2NhbnZhcz48L3RkPgotICAgICAgPC90cj4KLSAgICA8L2Rpdj4KLQotICAgIDxwIGlkPSJyZXN1bHQiPjwvcD4KLQotICAgIDxzY3JpcHQ+Ci0gICAgICBmdW5jdGlvbiBsb2coc3RyKSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS50ZXh0Q29udGVudCA9IHN0cjsKLSAgICAgICAgY29uc29sZS5sb2coc3RyKTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gbG9hZFZpZGVvKG5hbWUpIHsKLSAgICAgICAgdmFyIHZpZGVvRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7Ci0gICAgICAgIHZpZGVvRWxlbS5zcmMgPSAnYmxhY2t3aGl0ZV8nICsgbmFtZTsKLQotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndmlkZW9faGVhZGVyJykudGV4dENvbnRlbnQgPSBuYW1lOwotICAgICAgICB2aWRlb0VsZW0uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvblZpZGVvRW5kZWQpOwotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBvblZpZGVvRW5kZWQoZSkgewotICAgICAgICBkb2N1bWVudC50aXRsZSA9IHZlcmlmeVZpZGVvKCkgPyAnRU5ERUQnIDogJ0ZBSUxFRCc7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIG9uVmlkZW9FcnJvcihlKSB7Ci0gICAgICAgIGRvY3VtZW50LnRpdGxlID0gJ0VSUk9SJzsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpZmYnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXNrJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwotICAgICAgICBsb2coJ0Vycm9yIHBsYXlpbmcgdmlkZW86ICcgKyBlLnRhcmdldC5lcnJvci5jb2RlICsgJy4nKTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gbWFpbigpIHsKLSAgICAgICAgLy8gUHJvZ3JhbWF0aWNhbGx5IGNyZWF0ZSBidXR0b25zIGZvciBlYWNoIGNsaXAgZm9yIG1hbnVhbCB0ZXN0aW5nLgotICAgICAgICB2YXIgYnV0dG9uc0VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnV0dG9ucycpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbihuYW1lKSB7Ci0gICAgICAgICAgdmFyIGJ1dHRvbkVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKLSAgICAgICAgICBidXR0b25FbGVtLnRleHRDb250ZW50ID0gbmFtZTsKLSAgICAgICAgICBidXR0b25FbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBsb2FkVmlkZW8obmFtZSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgYnV0dG9uc0VsZW0uYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgVklERU9TID0gWwotICAgICAgICAgICd5dXY0MjBwLm9ndicsCi0gICAgICAgICAgJ3l1djQyMnAub2d2JywKLSAgICAgICAgICAneXV2NDQ0cC5vZ3YnLAotICAgICAgICAgICd5dXY0MjBwLndlYm0nLAotICAgICAgICAgICd5dXY0NDRwLndlYm0nLAotICAgICAgICAgICd5dXY0MjBwLm1wNCcsCi0gICAgICAgICAgJ3l1djQyMHBfcmVjNzA5Lm1wNCcsCi0gICAgICAgICAgJ3l1dmo0MjBwLm1wNCcsCi0gICAgICAgICAgJ3l1djQyMnAubXA0JywKLSAgICAgICAgICAneXV2NDQ0cC5tcDQnLAotICAgICAgICAgICd5dXY0MjBwLmF2aScKLSAgICAgICAgXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFZJREVPUy5sZW5ndGg7ICsraSkgewotICAgICAgICAgIGNyZWF0ZUJ1dHRvbihWSURFT1NbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmlkZW8gZXZlbnQgaGFuZGxlcnMuCi0gICAgICAgIHZhciB2aWRlb0VsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlbycpOwotICAgICAgICB2aWRlb0VsZW0uYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvblZpZGVvRXJyb3IpOwotCi0gICAgICAgIC8vIENoZWNrIGlmIGEgcXVlcnkgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCBmb3IgYXV0b21hdGVkIHRlc3RzLgotICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaC5sZW5ndGggPiAxKSB7Ci0gICAgICAgICAgbG9hZFZpZGVvKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYW4gYXV0b21hdGVkIHRlc3QsIGNvbXB1dGUgc29tZSBwcmV0dHkgZGlmZnMuCi0gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVEaWZmcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gZ2V0Q2FudmFzUGl4ZWxzKGNhbnZhcykgewotICAgICAgICB0cnkgewotICAgICAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKQotICAgICAgICAgICAgICAuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCkKLSAgICAgICAgICAgICAgLmRhdGE7Ci0gICAgICAgIH0gY2F0Y2goZSkgewotICAgICAgICAgIHZhciBtZXNzYWdlID0gJ0VSUk9SOiAnICsgZTsKLSAgICAgICAgICBpZiAoZS5uYW1lID09ICdTZWN1cml0eUVycm9yJykgewotICAgICAgICAgICAgbWVzc2FnZSArPSAnIENvdWxkblwndCBnZXQgaW1hZ2UgcGl4ZWxzLCB0cnkgcnVubmluZyB3aXRoICcgKwotICAgICAgICAgICAgICAgICAgICAgICAnLS1hbGxvdy1maWxlLWFjY2Vzcy1mcm9tLWZpbGVzLic7Ci0gICAgICAgICAgfQotICAgICAgICAgIGxvZyhtZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiB2ZXJpZnlWaWRlbygpIHsKLSAgICAgICAgdmFyIHZpZGVvRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7Ci0gICAgICAgIHZhciBvZmZzY3JlZW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKLSAgICAgICAgb2Zmc2NyZWVuLndpZHRoID0gdmlkZW9FbGVtLnZpZGVvV2lkdGg7Ci0gICAgICAgIG9mZnNjcmVlbi5oZWlnaHQgPSB2aWRlb0VsZW0udmlkZW9IZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZSh2aWRlb0VsZW0sIDAsIDAsIG9mZnNjcmVlbi53aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbi5oZWlnaHQpOwotCi0gICAgICAgIHZpZGVvRGF0YSA9IGdldENhbnZhc1BpeGVscyhvZmZzY3JlZW4pOwotICAgICAgICBpZiAoIXZpZGVvRGF0YSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIGNvbG9yIG9mIGEgZ2l2ZWwgcGl4ZWwgfHgseXwgaW4gfGltZ0RhdGF8IGFnYWluc3QgYW4KLSAgICAgICAgLy8gZXhwZWN0ZWQgdmFsdWUsIHxleHBlY3RlZHwsIHdpdGggdXAgdG8gfGFsbG93ZWRFcnJvcnwgZGlmZmVyZW5jZS4KLSAgICAgICAgZnVuY3Rpb24gY2hlY2tDb2xvcihpbWdEYXRhLCB4LCB5LCBzdHJpZGUsIGV4cGVjdGVkLCBhbGxvd2VkRXJyb3IpIHsKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGltZ0RhdGFbKHggKyB5ICogc3RyaWRlKSAqIDQgKyBpXTsKLSAgICAgICAgICAgIGlmIChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPiBhbGxvd2VkRXJyb3IpIHsKLSAgICAgICAgICAgICAgbG9nKCdDb2xvciBkaWRuXCd0IG1hdGNoIGF0ICgnICsgeCArICcsICcgKyB5ICsgJykuIEV4cGVjdGVkOiAnICsKLSAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICsgJywgYWN0dWFsOiAnICsgYWN0dWFsKTsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIG9uZSBwaXhlbCBpbiBlYWNoIHF1YWRyYW50IChpbiB0aGUgdXBwZXIgbGVmdCwgYXdheSBmcm9tCi0gICAgICAgIC8vIGJvdW5kYXJpZXMgYW5kIHRoZSB0ZXh0LCB0byBhdm9pZCBjb21wcmVzc2lvbiBhcnRpZmFjdHMpLgotICAgICAgICAvLyBBbHNvIGFsbG93IGEgc21hbGwgZXJyb3IsIGZvciB0aGUgc2FtZSByZWFzb24uCi0KLSAgICAgICAgLy8gVE9ETyhtdG9tYXN6KTogT25jZSBjb2RlLmdvb2dsZS5jb20vcC9saWJ5dXYvaXNzdWVzL2RldGFpbD9pZD0zMjQgaXMKLSAgICAgICAgLy8gZml4ZWQsIHRoZSBhbGxvd2VkRXJyb3Igc2hvdWxkIGJlIGRlY3JlYXNlZCB0byAxLgotICAgICAgICB2YXIgYWxsb3dlZEVycm9yID0gMjsKLQotICAgICAgICByZXR1cm4gY2hlY2tDb2xvcih2aWRlb0RhdGEsIDMwLCAzMCwgdmlkZW9FbGVtLnZpZGVvV2lkdGgsIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRFcnJvcikgJiYKLSAgICAgICAgICAgICAgIGNoZWNrQ29sb3IodmlkZW9EYXRhLCAxNTAsIDMwLCB2aWRlb0VsZW0udmlkZW9XaWR0aCwgMHgwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZEVycm9yKSAmJgotICAgICAgICAgICAgICAgY2hlY2tDb2xvcih2aWRlb0RhdGEsIDMwLCAxNTAsIHZpZGVvRWxlbS52aWRlb1dpZHRoLCAweDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXJyb3IpICYmCi0gICAgICAgICAgICAgICBjaGVja0NvbG9yKHZpZGVvRGF0YSwgMTUwLCAxNTAsIHZpZGVvRWxlbS52aWRlb1dpZHRoLCAweGVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXJyb3IpOwotICAgICAgfQotCi0gICAgICAvLyBDb21wdXRlIGEgc3RhbmRhcmQgZGlmZiBpbWFnZSwgcGx1cyBhIGhpZ2gtY29udHJhc3QgbWFzayB0aGF0IHNob3dzCi0gICAgICAvLyBlYWNoIGRpZmZlcmluZyBwaXhlbCBtb3JlIHZpc2libHkuCi0gICAgICBmdW5jdGlvbiBjb21wdXRlRGlmZnMoKSB7Ci0gICAgICAgIHZhciBkaWZmRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaWZmJyk7Ci0gICAgICAgIHZhciBtYXNrRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXNrJyk7Ci0gICAgICAgIHZhciB2aWRlb0VsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlbycpOwotICAgICAgICB2YXIgaW1nRWxlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpOwotCi0gICAgICAgIHZhciB3aWR0aCA9IGltZ0VsZW0ud2lkdGg7Ci0gICAgICAgIHZhciBoZWlnaHQgPSBpbWdFbGVtLmhlaWdodDsKLQotICAgICAgICBpZiAodmlkZW9FbGVtLnZpZGVvV2lkdGggIT0gd2lkdGggfHwgdmlkZW9FbGVtLnZpZGVvSGVpZ2h0ICE9IGhlaWdodCkgewotICAgICAgICAgIGxvZygnRVJST1I6IHZpZGVvIGRpbWVuc2lvbnMgZG9uXCd0IG1hdGNoIHJlZmVyZW5jZSBpbWFnZSAnICsKLSAgICAgICAgICAgICAgJ2RpbWVuc2lvbnMnKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIGFuIG9mZnNjcmVlbiBjYW52YXMgdG8gZHVtcCByZWZlcmVuY2UgaW1hZ2UgcGl4ZWxzIGludG8uCi0gICAgICAgIHZhciBvZmZzY3JlZW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKLSAgICAgICAgb2Zmc2NyZWVuLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIG9mZnNjcmVlbi5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAgICAgb2Zmc2NyZWVuLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltZ0VsZW0sIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpbWdEYXRhID0gZ2V0Q2FudmFzUGl4ZWxzKG9mZnNjcmVlbik7Ci0gICAgICAgIGlmICghaW1nRGF0YSkKLSAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gU2NhbGUgYW5kIGNsZWFyIGRpZmYgY2FudmFzZXMuCi0gICAgICAgIGRpZmZFbGVtLndpZHRoID0gbWFza0VsZW0ud2lkdGggPSB3aWR0aDsKLSAgICAgICAgZGlmZkVsZW0uaGVpZ2h0ID0gbWFza0VsZW0uaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICB2YXIgZGlmZkN0eCA9IGRpZmZFbGVtLmdldENvbnRleHQoJzJkJyk7Ci0gICAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0VsZW0uZ2V0Q29udGV4dCgnMmQnKTsKLSAgICAgICAgbWFza0N0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGRpZmZDdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIC8vIENvcHkgdmlkZW8gcGl4ZWxzIGludG8gZGlmZi4KLSAgICAgICAgZGlmZkN0eC5kcmF3SW1hZ2UodmlkZW9FbGVtLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgICB2YXIgZGlmZklEYXRhID0gZGlmZkN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIHZhciBkaWZmRGF0YSA9IGRpZmZJRGF0YS5kYXRhOwotICAgICAgICB2YXIgbWFza0lEYXRhID0gbWFza0N0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIHZhciBtYXNrRGF0YSA9IG1hc2tJRGF0YS5kYXRhOwotCi0gICAgICAgIC8vIE1ha2UgZGlmZnMgYW5kIGNvbGxlY3Qgc3RhdHMuCi0gICAgICAgIHZhciBtZWFuU3F1YXJlZEVycm9yID0gMDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWdEYXRhLmxlbmd0aDsgaSArPSA0KSB7Ci0gICAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAwOwotICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgKytqKSB7Ci0gICAgICAgICAgICBkaWZmRGF0YVtpICsgal0gPSBNYXRoLmFicyhkaWZmRGF0YVtpICsgal0gLSBpbWdEYXRhW2kgKyBqXSk7Ci0gICAgICAgICAgICBtZWFuU3F1YXJlZEVycm9yICs9IGRpZmZEYXRhW2kgKyBqXSAqIGRpZmZEYXRhW2kgKyBqXTsKLSAgICAgICAgICAgIGlmIChkaWZmRGF0YVtpICsgal0gIT0gMCkgewotICAgICAgICAgICAgICBkaWZmZXJlbmNlICs9IGRpZmZEYXRhW2kgKyBqXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA8PSAzKSB7Ci0gICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG9ubHkgb2ZmIGJ5IGEgYml0IHBlciBjaGFubmVsIG9yIHNvLCB1c2UgZGFya2VyIHJlZC4KLSAgICAgICAgICAgICAgbWFza0RhdGFbaV0gPSAxMjg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBCcmlnaHQgcmVkIHRvIGluZGljYXRlIGEgZGlmZmVyZW50IHBpeGVsLgotICAgICAgICAgICAgICBtYXNrRGF0YVtpXSA9IDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2tEYXRhW2krM10gPSAyNTU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWVhblNxdWFyZWRFcnJvciAvPSB3aWR0aCAqIGhlaWdodDsKLSAgICAgICAgbG9nKCdNZWFuIHNxdWFyZWQgZXJyb3I6ICcgKyBtZWFuU3F1YXJlZEVycm9yKTsKLSAgICAgICAgZGlmZkN0eC5wdXRJbWFnZURhdGEoZGlmZklEYXRhLCAwLCAwKTsKLSAgICAgICAgbWFza0N0eC5wdXRJbWFnZURhdGEobWFza0lEYXRhLCAwLCAwKTsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpZmYnKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFzaycpLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7Ci0gICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZS5wbmcgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2QwOGFjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcC5hdmkgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcC5hdmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YzZmOGIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHAuYXZpCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHAubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTZhNDlkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwLm9ndiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwLm9ndgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmYWUxMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcC5vZ3YKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcC53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHAud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTcxM2NiYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcC53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHBfaGkxMHAubXA0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMHBfaGkxMHAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNhYWJiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwX2hpMTBwLm1wNAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwX3JlYzcwOS5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIwcF9yZWM3MDkubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmZmODIyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjBwX3JlYzcwOS5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIycC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDIycC5tcDQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDRkMjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMnAubXA0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMnAub2d2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQyMnAub2d2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2E0ZWFjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0MjJwLm9ndgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0NDRwLm1wNCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0NDRwLm1wNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhkZmI1Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDQ0cC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDQ0cC5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2NDQ0cC5vZ3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOGVlMTcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQ0NHAub2d2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQ0NHAud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXY0NDRwLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZjNjMTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFja3doaXRlX3l1djQ0NHAud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXZqNDIwcC5tcDQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYWNrd2hpdGVfeXV2ajQyMHAubXA0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjUwZDZjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYmxhY2t3aGl0ZV95dXZqNDIwcC5tcDQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYW5rLTF4MS5qcGcgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2JsYW5rLTF4MS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MzE0YzcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ibGFuay0xeDEuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9idXR0ZXJmbHktODUzeDQ4MC53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9idXR0ZXJmbHktODUzeDQ4MC53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc3OTE2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvYnV0dGVyZmx5LTg1M3g0ODAud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvY29sb3VyLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2NvbG91ci53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODBjYjUwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvY29sb3VyLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2NvcnJ1cHQubXAzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9jb3JydXB0Lm1wMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1NmNiOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2NvcnJ1cHQubXAzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9kb3VibGUtYmVhci5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2RvdWJsZS1iZWFyLm9ndgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFjYzJmNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2RvdWJsZS1iZWFyLm9ndgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZG91YmxlLXNmeC5vZ2cgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2RvdWJsZS1zZngub2dnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzEyMTY2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZG91YmxlLXNmeC5vZ2cKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXIuaHRtbCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTg0NTM4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWwgbGFuZz0nZW4tVVMnPgotICA8aGVhZD4KLSAgICA8dGl0bGU+RU1FIHBsYXliYWNrIHRlc3QgYXBwbGljYXRpb248L3RpdGxlPgotICA8L2hlYWQ+Ci0gIDxib2R5IHN0eWxlPSdmb250LWZhbWlseToiTHVjaWRhIENvbnNvbGUiLCBNb25hY28sIG1vbm9zcGFjZTsgZm9udC1zaXplOjE0cHgnIG9ubG9hZD0ic3RhcnQoKSI+Ci0gICAgPGk+Q2xlYXJrZXkgd29ya3Mgb25seSB3aXRoIGNvbnRlbnQgZW5jcnlwdGVkIHVzaW5nIGJlYXIga2V5LjwvaT48YnI+PGJyPgotICAgIDx0YWJsZT4KLSAgICA8dHIgdGl0bGU9J1VSTCBwYXJhbSBtZWRpYUZpbGU9Li4uJz4KLSAgICAgIDx0ZD48bGFiZWwgZm9yPSdtZWRpYUZpbGUnPkVuY3J5cHRlZCB2aWRlbyBVUkw6PC9sYWJlbD48L3RkPgotICAgICAgPHRkPjxpbnB1dCBpZD0nbWVkaWFGaWxlJyB0eXBlPSd0ZXh0JyBzaXplPSc2NCc+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0ciB0aXRsZT0nVVJMIHBhcmFtIGxpY2Vuc2VTZXJ2ZXJVUkw9Li4uJz4KLSAgICAgIDx0ZD48bGFiZWwgZm9yPSdsaWNlbnNlU2VydmVyJz5MaWNlbnNlIHNldmVyIFVSTDo8L2xhYmVsPjwvdGQ+Ci0gICAgICA8dGQ+PGlucHV0IGlkPSdsaWNlbnNlU2VydmVyJyB0eXBlPSd0ZXh0JyBzaXplPSc2NCc+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0ciB0aXRsZT0nVVJMIHBhcmFtIGtleVN5c3RlbT0uLi4nPgotICAgICAgPHRkPjxsYWJlbCBmb3I9J2tleVN5c3RlbUxpc3QnPktleSBzeXN0ZW06PC9sYWJlbD48L3RkPgotICAgICAgPHRkPjxzZWxlY3QgaWQ9J2tleVN5c3RlbUxpc3QnPjwvc2VsZWN0PjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHIgdGl0bGU9J1VSTCBwYXJhbSBtZWRpYVR5cGU9Li4uJz4KLSAgICAgIDx0ZD48bGFiZWwgZm9yPSdtZWRpYVR5cGVMaXN0Jz5NZWRpYSB0eXBlOjwvbGFiZWw+PC90ZD4KLSAgICAgIDx0ZD48c2VsZWN0IGlkPSdtZWRpYVR5cGVMaXN0Jz48L3NlbGVjdD48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyIHRpdGxlPSdVUkwgcGFyYW0gdXNlTVNFPTF8MCc+Ci0gICAgICA8dGQ+PGxhYmVsIGZvcj0ndXNlTVNFJz5Mb2FkIG1lZGlhIGJ5OjwvbGFiZWw+PC90ZD4KLSAgICAgIDx0ZD4KLSAgICAgICAgPHNlbGVjdCBpZD0ndXNlTVNFJz4KLSAgICAgICAgICA8b3B0aW9uIHZhbHVlPSd0cnVlJyBzZWxlY3RlZD0nc2VsZWN0ZWQnPk1TRTwvb3B0aW9uPgotICAgICAgICAgIDxvcHRpb24gdmFsdWU9J2ZhbHNlJz5zcmM8L29wdGlvbj4KLSAgICAgICAgPC9zZWxlY3Q+Ci0gICAgICA8L3RkPgotICAgIDwvdHI+Ci0gICAgPC90YWJsZT4KLSAgICA8YnI+Ci0gICAgPGJ1dHRvbiBvbmNsaWNrPSdzdGFydCgpOyc+UGxheTwvYnV0dG9uPgotICAgIDxicj48YnI+Ci0gICAgRGVjb2RlZCBmcHM6IDxzcGFuIGlkPSdkZWNvZGVkRlBTJz48L3NwYW4+Ci0gICAgPGJyPgotICAgIERyb3BwZWQgZnBzOiA8c3BhbiBpZD0nZHJvcHBlZEZQUyc+PC9zcGFuPgotICAgIDxicj4KLSAgICBUb3RhbCBkcm9wcGVkIGZyYW1lczogPHNwYW4gaWQ9J2Ryb3BwZWRGcmFtZXMnPjwvc3Bhbj4KLSAgICA8YnI+PGJyPgotICAgIDx0YWJsZT4KLSAgICA8dHI+Ci0gICAgICA8dGQgdmFsaWduPSd0b3AnPjxzcGFuIGlkPSd2aWRlbyc+PC9zcGFuPjwvdGQ+Ci0gICAgICA8dGQgdmFsaWduPSd0b3AnPgotICAgICAgICA8bGFiZWwgZm9yPSdsb2dzJyBvbmNsaWNrPSJ0b2dnbGVEaXNwbGF5KCdsb2dzJyk7Ij48aT5DbGljayB0byB0b2dnbGUgbG9ncyB2aXNpYmlsaXR5IChuZXdlc3QgYXQgdG9wKS48L2k+PGJyPjwvbGFiZWw+Ci0gICAgICAgIDxkaXYgaWQ9J2xvZ3MnIHN0eWxlPSdvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA0ODBweDsgd2lkdGg6IDQ4MHB4OyB3aGl0ZS1zcGFjZTogbm93cmFwOyBkaXNwbGF5OiBub25lJz48L2Rpdj4KLSAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxkaXY+PC9kaXY+Ci0gIDwvYm9keT4KLSAgPHNjcmlwdCBzcmM9J2VtZV9wbGF5ZXJfanMvYXBwX2xvYWRlci5qcycgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjcmlwdD4KLSAgPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPgotICAgIHZhciB0ZXN0Q29uZmlnOwotICAgIHZhciBlbWVBcHA7Ci0gICAgdmFyIHBsYXllcjsKLSAgICB2YXIgaGVhcnRiZWF0Q291bnQgPSAwOwotCi0gICAgZnVuY3Rpb24gaW5pdEFwcCgpIHsKLSAgICAgIHRlc3RDb25maWcgPSBuZXcgVGVzdENvbmZpZygpOwotICAgICAgdGVzdENvbmZpZy5sb2FkUXVlcnlQYXJhbXMoKTsKLSAgICAgIC8vIFVwZGF0ZSBkb2N1bWVudCB3aXRoIHRlc3QgY29uZmlndXJhdGlvbiB2YWx1ZXMuCi0gICAgICBlbWVBcHAgPSBuZXcgRU1FQXBwKHRlc3RDb25maWcpOwotICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnRpbWVMb2coJ2hlYXJ0YmVhdCAjJyArICsraGVhcnRiZWF0Q291bnQpOwotICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25UaW1lVXBkYXRlKGUpIHsKLSAgICAgIHZhciB2aWRlbyA9IGUudGFyZ2V0OwotICAgICAgVXRpbHMudGltZUxvZygndGltZXVwZGF0ZSBAICcgKyB2aWRlby5jdXJyZW50VGltZSk7Ci0gICAgICBpZiAodmlkZW8uY3VycmVudFRpbWUgPCAxKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIC8vIFJlbmV3YWwgbWVzc2FnZSBtYXkgYmUgZmlyZWQgYXJvdW5kIHRoZSBzdGFydCBvZiBwbGF5YmFjazsgY2hlY2sgZm9yIGl0Ci0gICAgICAvLyBhZnRlciBhIGRlbGF5IHRvIGF2b2lkIHRpbWluZyBpc3N1ZXMuCi0gICAgICBpZiAodGVzdENvbmZpZy5rZXlTeXN0ZW0gPT0gRVhURVJOQUxfQ0xFQVJLRVlfUkVORVdBTCAmJgotICAgICAgICAgICF2aWRlby5yZWNlaXZlZFJlbmV3YWxNZXNzYWdlKSB7Ci0gICAgICAgIFV0aWxzLmZhaWxUZXN0KCdsaWNlbnNlLXJlbmV3YWwgbWVzc2FnZSBub3QgcmVjZWl2ZWQuJyk7Ci0gICAgICB9Ci0KLSAgICAgIFV0aWxzLnRpbWVMb2coJ3dhaXRpbmcgZm9yIHZpZGVvIHRvIGVuZC4nKTsKLSAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgVXRpbHMuZmFpbFRlc3QpOwotICAgICAgVXRpbHMuaW5zdGFsbFRpdGxlRXZlbnRIYW5kbGVyKHZpZGVvLCAnZW5kZWQnKTsKLSAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCBvblRpbWVVcGRhdGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG9uRmlyc3RQbGF5RW5kZWQoZSkgewotICAgICAgVXRpbHMudGltZUxvZygnRmlyc3QgcGxheSBlbmRlZC4nKTsKLSAgICAgIHZhciB2aWRlbyA9IGUudGFyZ2V0OwotICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvbkZpcnN0UGxheUVuZGVkKTsKLSAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgVXRpbHMuZmFpbFRlc3QpOwotCi0gICAgICAvLyBSZXNldCBzcmMgKHRvIHNhbWUgdmlkZW8gYWdhaW4pLgotICAgICAgUGxheWVyVXRpbHMuc2V0VmlkZW9Tb3VyY2UocGxheWVyKTsKLQotICAgICAgLy8gUGxheSB0aGUgdmlkZW8gYSBzZWNvbmQgdGltZS4KLSAgICAgIFV0aWxzLnRpbWVMb2coJ1BsYXlpbmcgc2Vjb25kIHRpbWUuJyk7Ci0gICAgICBwbGF5KHZpZGVvLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25Mb2dFdmVudChlKSB7Ci0gICAgICBVdGlscy50aW1lTG9nKCdFdmVudDogJyArIGUudHlwZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKGUpIHsKLSAgICAgIFV0aWxzLnRpbWVMb2coJ0V2ZW50OiAnICsgZS50eXBlICsgJywgaGlkZGVuOiAnICsgZG9jdW1lbnQuaGlkZGVuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwbGF5KHZpZGVvLCBwbGF5VHdpY2UpIHsKLSAgICAgIFV0aWxzLnRpbWVMb2coJ1N0YXJ0aW5nIHBsYXksIGhpZGRlbjogJyArIGRvY3VtZW50LmhpZGRlbik7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5Jywgb25Mb2dFdmVudCk7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgb25Mb2dFdmVudCk7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgb25Mb2dFdmVudCk7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5Jywgb25Mb2dFdmVudCk7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIG9uTG9nRXZlbnQpOwotICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIG9uTG9nRXZlbnQpOwotICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignd2FpdGluZycsIG9uTG9nRXZlbnQpOwotICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7Ci0gICAgICBVdGlscy5yZXNldFRpdGxlQ2hhbmdlKCk7Ci0gICAgICBpZiAocGxheVR3aWNlKSB7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBmaXJzdCBwbGF5IHRvIGNvbXBsZXRlLgotICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIG9uRmlyc3RQbGF5RW5kZWQpOwotICAgICAgICB2aWRlby5wbGF5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIC8vIEVuZGVkIHNob3VsZCBub3QgZmlyZSBiZWZvcmUgb25UaW1lVXBkYXRlLgotICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBVdGlscy5mYWlsVGVzdCk7Ci0gICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgb25UaW1lVXBkYXRlKTsKLSAgICAgIHZpZGVvLnBsYXkoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0b2dnbGVEaXNwbGF5KGlkKSB7Ci0gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgaWYgKGVsZW1lbnQuc3R5bGVbJ2Rpc3BsYXknXSAhPSAnbm9uZScpCi0gICAgICAgIGVsZW1lbnQuc3R5bGVbJ2Rpc3BsYXknXSA9ICdub25lJzsKLSAgICAgIGVsc2UKLSAgICAgICAgZWxlbWVudC5zdHlsZVsnZGlzcGxheSddID0gJyc7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc3RhcnQoKSB7Ci0gICAgICBpbml0QXBwKCk7ICAKLSAgICAgIGVtZUFwcC5jcmVhdGVQbGF5ZXIoKQotICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHApIHsKLSAgICAgICAgICAgICAgcGxheWVyID0gcDsKLSAgICAgICAgICAgICAgcGxheShwbGF5ZXIudmlkZW8sIHRlc3RDb25maWcucGxheVR3aWNlKTsKLSAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICBVdGlscy50aW1lTG9nKGVycm9yKTsKLSAgICAgICAgICAgICAgVXRpbHMuZmFpbFRlc3QoJ1VuYWJsZSB0byBwbGF5IHZpZGVvLicpOwotICAgICAgICAgIH0pOwotICAgIH0KLSAgPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvYXBwX2xvYWRlci5qcyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9hcHBfbG9hZGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTA2NzljLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9hcHBfbG9hZGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBBZGRzIGEgSmF2YXNjcmlwdCBzb3VyY2UgdGFnIHRvIHRoZSBkb2N1bWVudC4KLWZ1bmN0aW9uIGFkZFNjcmlwdFRhZyhzcmMpIHsKLSAgZG9jdW1lbnQud3JpdGUoCi0gICAgICAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iZW1lX3BsYXllcl9qcy8nICsgc3JjICsKLSAgICAgICciPjwvc2NyaXB0PicpOwotfQotCi0vLyBMb2FkIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYXBwLgotYWRkU2NyaXB0VGFnKCdnbG9iYWxzLmpzJyk7Ci1hZGRTY3JpcHRUYWcoJ3V0aWxzLmpzJyk7Ci1hZGRTY3JpcHRUYWcoJ3Rlc3RfY29uZmlnLmpzJyk7Ci1hZGRTY3JpcHRUYWcoJ2Zwc19vYnNlcnZlci5qcycpOwotYWRkU2NyaXB0VGFnKCdtZWRpYV9zb3VyY2VfdXRpbHMuanMnKTsKLWFkZFNjcmlwdFRhZygncGxheWVyX3V0aWxzLmpzJyk7Ci1hZGRTY3JpcHRUYWcoJ2NsZWFya2V5X3BsYXllci5qcycpOwotYWRkU2NyaXB0VGFnKCd3aWRldmluZV9wbGF5ZXIuanMnKTsKLWFkZFNjcmlwdFRhZygndW5pdF90ZXN0X3BsYXllci5qcycpOwotYWRkU2NyaXB0VGFnKCdlbWVfYXBwLmpzJyk7CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvY2xlYXJrZXlfcGxheWVyLmpzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2NsZWFya2V5X3BsYXllci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY5YTZhYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvY2xlYXJrZXlfcGxheWVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBDbGVhcktleVBsYXllciByZXNwb25zaWJsZSBmb3IgcGxheWluZyBtZWRpYSB1c2luZyBDbGVhciBLZXkga2V5IHN5c3RlbS4KLWZ1bmN0aW9uIENsZWFyS2V5UGxheWVyKHZpZGVvLCB0ZXN0Q29uZmlnKSB7Ci0gIHRoaXMudmlkZW8gPSB2aWRlbzsKLSAgdGhpcy50ZXN0Q29uZmlnID0gdGVzdENvbmZpZzsKLX0KLQotQ2xlYXJLZXlQbGF5ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHsKLSAgLy8gUmV0dXJucyBhIHByb21pc2UuCi0gIHJldHVybiBQbGF5ZXJVdGlscy5pbml0RU1FUGxheWVyKHRoaXMpOwotfTsKLQotQ2xlYXJLZXlQbGF5ZXIucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHsKLSAgLy8gUmV0dXJucyBhIHByb21pc2UuCi0gIHJldHVybiBQbGF5ZXJVdGlscy5yZWdpc3RlckVNRUV2ZW50TGlzdGVuZXJzKHRoaXMpOwotfTsKLQotQ2xlYXJLZXlQbGF5ZXIucHJvdG90eXBlLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgVXRpbHMudGltZUxvZygnTWVkaWFLZXlTZXNzaW9uIG9uTWVzc2FnZScsIG1lc3NhZ2UpOwotICB2YXIga2V5SWQgPSBVdGlscy5leHRyYWN0Rmlyc3RMaWNlbnNlS2V5SWQobWVzc2FnZS5tZXNzYWdlKTsKLSAgdmFyIGtleSA9IFV0aWxzLmdldERlZmF1bHRLZXkodGhpcy50ZXN0Q29uZmlnLmZvcmNlSW52YWxpZFJlc3BvbnNlKTsKLSAgdmFyIGp3a1NldCA9IFV0aWxzLmNyZWF0ZUpXS0RhdGEoa2V5SWQsIGtleSk7Ci0gIFV0aWxzLnRpbWVMb2coJ0NhbGxpbmcgdXBkYXRlOiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBqd2tTZXQpKTsKLSAgbWVzc2FnZS50YXJnZXQudXBkYXRlKGp3a1NldCkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAvLyBJZ25vcmUgdGhlIGVycm9yIGlmIGEgY3Jhc2ggaXMgZXhwZWN0ZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZWNvZGVyCi0gICAgLy8gYWN0dWFsbHkgZGV0ZWN0cyBhbmQgcmVwb3J0cyB0aGUgZXJyb3IuCi0gICAgaWYgKHRoaXMudGVzdENvbmZpZy5rZXlTeXN0ZW0gIT0gJ29yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5LmNyYXNoJykgewotICAgICAgVXRpbHMuZmFpbFRlc3QoZXJyb3IsIEVNRV9VUERBVEVfRkFJTEVEKTsKLSAgICB9Ci0gIH0pOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9lbWVfYXBwLmpzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2VtZV9hcHAuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2MGI2NDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2VtZV9hcHAuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIEVNRUFwcCBpcyByZXNwb25zaWJsZSBmb3Igc3RhcnRpbmcgcGxheWJhY2sgb24gdGhlIGVtZV9wbGF5ZXIuaHRtbCBwYWdlLgotLy8gSXQgc2VsZWN0cyB0aGUgc3VpdGFibGUgcGxheWVyIGJhc2VkIG9uIGtleSBzeXN0ZW0gYW5kIG90aGVyIHRlc3Qgb3B0aW9ucy4KLWZ1bmN0aW9uIEVNRUFwcCh0ZXN0Q29uZmlnKSB7Ci0gIHRoaXMudmlkZW9fID0gbnVsbDsKLSAgdGhpcy50ZXN0Q29uZmlnXyA9IHRlc3RDb25maWc7Ci0gIHRoaXMudXBkYXRlRG9jdW1lbnQodGVzdENvbmZpZyk7Ci19Ci0KLUVNRUFwcC5wcm90b3R5cGUuY3JlYXRlUGxheWVyID0gZnVuY3Rpb24oKSB7Ci0gIC8vIExvYWQgZG9jdW1lbnQgdGVzdCBjb25maWd1cmF0aW9uLgotICB0aGlzLnVwZGF0ZVRlc3RDb25maWcoKTsKLSAgaWYgKHRoaXMudmlkZW9fKSB7Ci0gICAgVXRpbHMudGltZUxvZygnRGVsZXRlIG9sZCB2aWRlbyB0YWcuJyk7Ci0gICAgdGhpcy52aWRlb18ucGF1c2UoKTsKLSAgICB0aGlzLnZpZGVvXy5yZW1vdmUoKTsKLSAgICBkZWxldGUodGhpcy52aWRlb18pOwotICB9Ci0KLSAgdGhpcy52aWRlb18gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOwotICB0aGlzLnZpZGVvXy5jb250cm9scyA9IHRydWU7Ci0gIHRoaXMudmlkZW9fLnByZWxvYWQgPSB0cnVlOwotICB0aGlzLnZpZGVvXy53aWR0aCA9IDg0ODsKLSAgdGhpcy52aWRlb18uaGVpZ2h0ID0gNDgwOwotICB2YXIgdmlkZW9TcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVklERU9fRUxFTUVOVF9JRCk7Ci0gIGlmICh2aWRlb1NwYW4pCi0gICAgdmlkZW9TcGFuLmFwcGVuZENoaWxkKHRoaXMudmlkZW9fKTsKLSAgZWxzZQotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy52aWRlb18pOwotCi0gIHZhciB2aWRlb1BsYXllciA9IFBsYXllclV0aWxzLmNyZWF0ZVBsYXllcih0aGlzLnZpZGVvXywgdGhpcy50ZXN0Q29uZmlnXyk7Ci0gIGlmICghdmlkZW9QbGF5ZXIpIHsKLSAgICBVdGlscy50aW1lTG9nKCdDYW5ub3QgY3JlYXRlIGEgbWVkaWEgcGxheWVyLicpOwotICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2Fubm90IGNyZWF0ZSBhIG1lZGlhIHBsYXllci4nKTsKLSAgfQotCi0gIFV0aWxzLnRpbWVMb2coJ1VzaW5nICcgKyB2aWRlb1BsYXllci5jb25zdHJ1Y3Rvci5uYW1lKTsKLSAgaWYgKHRoaXMudGVzdENvbmZpZ18ucnVuRlBTKQotICAgIEZQU09ic2VydmVyLm9ic2VydmUodGhpcy52aWRlb18pOwotCi0gIHJldHVybiB2aWRlb1BsYXllci5pbml0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICBpZiAocmVzdWx0ICE9IHZpZGVvUGxheWVyKSB7Ci0gICAgICBVdGlscy50aW1lTG9nKCdNZWRpYSBwbGF5ZXIgbWlzbWF0Y2guJyk7Ci0gICAgfQotICAgIFV0aWxzLnRpbWVMb2coJ01lZGlhIHBsYXllciBjcmVhdGVkLicpOwotICAgIHJldHVybiB2aWRlb1BsYXllcjsKLSAgfSk7Ci19OwotCi1FTUVBcHAucHJvdG90eXBlLnVwZGF0ZURvY3VtZW50ID0gZnVuY3Rpb24odGVzdENvbmZpZykgewotICAvLyBVcGRhdGUgZG9jdW1lbnQgbGlzdHMgd2l0aCB0ZXN0IGNvbmZpZ3VyYXRpb24gdmFsdWVzLgotICBVdGlscy5hZGRPcHRpb25zKEtFWVNZU1RFTV9FTEVNRU5UX0lELCBLRVlfU1lTVEVNUyk7Ci0gIFV0aWxzLmFkZE9wdGlvbnMoTUVESUFfVFlQRV9FTEVNRU5UX0lELCBNRURJQV9UWVBFUyk7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKE1FRElBX0ZJTEVfRUxFTUVOVF9JRCkudmFsdWUgPQotICAgICAgdGVzdENvbmZpZy5tZWRpYUZpbGUgfHwgREVGQVVMVF9NRURJQV9GSUxFOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChMSUNFTlNFX1NFUlZFUl9FTEVNRU5UX0lEKS52YWx1ZSA9Ci0gICAgICB0ZXN0Q29uZmlnLmxpY2Vuc2VTZXJ2ZXJVUkwgfHwgREVGQVVMVF9MSUNFTlNFX1NFUlZFUjsKLSAgaWYgKHRlc3RDb25maWcua2V5U3lzdGVtKQotICAgIFV0aWxzLmVuc3VyZU9wdGlvbkluTGlzdChLRVlTWVNURU1fRUxFTUVOVF9JRCwgdGVzdENvbmZpZy5rZXlTeXN0ZW0pOwotICBpZiAodGVzdENvbmZpZy5tZWRpYVR5cGUpCi0gICAgVXRpbHMuZW5zdXJlT3B0aW9uSW5MaXN0KE1FRElBX1RZUEVfRUxFTUVOVF9JRCwgdGVzdENvbmZpZy5tZWRpYVR5cGUpOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChVU0VfTVNFX0VMRU1FTlRfSUQpLnZhbHVlID0gdGVzdENvbmZpZy51c2VNU0U7Ci19OwotCi1FTUVBcHAucHJvdG90eXBlLnVwZGF0ZVRlc3RDb25maWcgPSBmdW5jdGlvbigpIHsKLSAgLy8gUmVsb2FkIHRlc3QgY29uZmlndXJhdGlvbiBmcm9tIGRvY3VtZW50LgotICB0aGlzLnRlc3RDb25maWdfLm1lZGlhRmlsZSA9Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChNRURJQV9GSUxFX0VMRU1FTlRfSUQpLnZhbHVlOwotICB0aGlzLnRlc3RDb25maWdfLmtleVN5c3RlbSA9Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChLRVlTWVNURU1fRUxFTUVOVF9JRCkudmFsdWU7Ci0gIHRoaXMudGVzdENvbmZpZ18ubWVkaWFUeXBlID0KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKE1FRElBX1RZUEVfRUxFTUVOVF9JRCkudmFsdWU7Ci0gIHRoaXMudGVzdENvbmZpZ18udXNlTVNFID0KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFVTRV9NU0VfRUxFTUVOVF9JRCkudmFsdWUgPT0gJ3RydWUnOwotICB0aGlzLnRlc3RDb25maWdfLmxpY2Vuc2VTZXJ2ZXJVUkwgPQotICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTElDRU5TRV9TRVJWRVJfRUxFTUVOVF9JRCkudmFsdWU7Ci19OwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2Zwc19vYnNlcnZlci5qcyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9mcHNfb2JzZXJ2ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjZkZjguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2Zwc19vYnNlcnZlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gRlBTT2JzZXJ2ZXIgb2JzZXJ2ZXMgYSA8dmlkZW8+IGFuZCByZXBvcnRzIGRlY29kZWQgRlBTLCBkcm9wcGVkIEZQUywgYW5kCi0vLyB0b3RhbCBkcm9wcGVkIGZyYW1lcyBkdXJpbmcgdGhlIHZpZGVvIHBsYXliYWNrLgotdmFyIEZQU09ic2VydmVyID0gbmV3IGZ1bmN0aW9uKCkgewotICB0aGlzLnZpZGVvXyA9IG51bGw7Ci0gIHRoaXMuZGVjb2RlZEZyYW1lc18gPSAwOwotICB0aGlzLmRyb3BwZWRGcmFtZXNfID0gMDsKLSAgdGhpcy5zdGFydFRpbWVfID0gMDsKLSAgdGhpcy5pbnRJRF8gPSBudWxsOwotfQotCi1GUFNPYnNlcnZlci5vYnNlcnZlID0gZnVuY3Rpb24odmlkZW8pIHsKLSAgdGhpcy52aWRlb18gPSB2aWRlbzsKLSAgdmFyIG9ic2VydmVyID0gdGhpczsKLSAgdGhpcy52aWRlb18uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIGZ1bmN0aW9uKCkgewotICAgIG9ic2VydmVyLm9uVmlkZW9QbGF5aW5nKCk7Ci0gIH0pOwotCi0gIHRoaXMudmlkZW9fLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24oKSB7Ci0gICAgb2JzZXJ2ZXIuZW5kVGVzdCgpOwotICB9KTsKLQotICB0aGlzLnZpZGVvXy5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uKCkgewotICAgIG9ic2VydmVyLmVuZFRlc3QoKTsKLSAgfSk7Ci19OwotCi1GUFNPYnNlcnZlci5vblZpZGVvUGxheWluZyA9IGZ1bmN0aW9uKCkgewotICB0aGlzLmRlY29kZWRGcmFtZXNfID0gMDsKLSAgdGhpcy5kcm9wcGVkRnJhbWVzXyA9IDA7Ci0gIHRoaXMuc3RhcnRUaW1lXyA9IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTsKLSAgdGhpcy5lbmRUZXN0KHRydWUpOwotICB2YXIgb2JzZXJ2ZXIgPSB0aGlzOwotICB0aGlzLmludElEXyA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgIG9ic2VydmVyLmNhbGN1bGF0ZVN0YXRzKCk7fSwgMTAwMCk7Ci19OwotCi1GUFNPYnNlcnZlci5jYWxjdWxhdGVTdGF0cyA9IGZ1bmN0aW9uKCkgewotICBpZiAodGhpcy52aWRlb18ucmVhZHlTdGF0ZSA8PSBIVE1MTWVkaWFFbGVtZW50LkhBVkVfQ1VSUkVOVF9EQVRBIHx8Ci0gICAgICB0aGlzLnZpZGVvXy5wYXVzZWQgfHwgdGhpcy52aWRlb18uZW5kZWQpCi0gICAgcmV0dXJuOwotICB2YXIgY3VycmVudFRpbWUgPSB3aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7Ci0gIHZhciBkZWx0YVRpbWUgPSAoY3VycmVudFRpbWUgLSB0aGlzLnN0YXJ0VGltZV8pIC8gMTAwMDsKLSAgdGhpcy5zdGFydFRpbWVfID0gY3VycmVudFRpbWU7Ci0KLSAgLy8gQ2FsY3VsYXRlIGRlY29kZWQgZnJhbWVzIHBlciBzZWMuCi0gIHZhciBmcHMgPSAodGhpcy52aWRlb18ud2Via2l0RGVjb2RlZEZyYW1lQ291bnQgLSB0aGlzLmRlY29kZWRGcmFtZXNfKSAvCi0gICAgICAgICAgICAgZGVsdGFUaW1lOwotICB0aGlzLmRlY29kZWRGcmFtZXNfID0gdGhpcy52aWRlb18ud2Via2l0RGVjb2RlZEZyYW1lQ291bnQ7Ci0gIGZwcyA9IGZwcy50b0ZpeGVkKDIpOwotICBkZWNvZGVkRlBTRWxlbWVudC5pbm5lckhUTUwgPSBmcHM7Ci0KLSAgLy8gQ2FsY3VsYXRlIGRyb3BwZWQgZnJhbWVzIHBlciBzZWMuCi0gIGZwcyA9ICh0aGlzLnZpZGVvXy53ZWJraXREcm9wcGVkRnJhbWVDb3VudCAtIHRoaXMuZHJvcHBlZEZyYW1lc18pIC8gZGVsdGFUaW1lOwotICB0aGlzLmRyb3BwZWRGcmFtZXNfID0gdGhpcy52aWRlb18ud2Via2l0RHJvcHBlZEZyYW1lQ291bnQ7Ci0gIGZwcyA9IGZwcy50b0ZpeGVkKDIpOwotICBkcm9wcGVkRlBTRWxlbWVudC5pbm5lckhUTUwgPSBmcHM7Ci0KLSAgZHJvcHBlZEZyYW1lc0VsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5kcm9wcGVkRnJhbWVzXzsKLX07Ci0KLUZQU09ic2VydmVyLmVuZFRlc3QgPSBmdW5jdGlvbigpIHsKLSAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRJRF8pOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9nbG9iYWxzLmpzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2dsb2JhbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGMwYmMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL2dsb2JhbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIFRoaXMgZmlsZSBjb250YWlucyBnbG9iYWwgY29uc3RhbnQgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgotCi0vLyBSZW5ld2FsIG1lc3NhZ2UgaGVhZGVyLiBFeHRlcm5hbCBDbGVhciBLZXkgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGlzIGFzCi0vLyBwYXJ0IG9mIHJlbmV3YWwgbWVzc2FnZXMuCi12YXIgRU1FX1JFTkVXQUxfTUVTU0FHRV9IRUFERVIgPSAnUkVORVdBTCc7Ci0KLS8vIERlZmF1bHQga2V5IHVzZWQgdG8gZW5jcnlwdCBtYW55IG1lZGlhIGZpbGVzIHVzZWQgaW4gYnJvd3NlciB0ZXN0cy4KLXZhciBLRVkgPSBuZXcgVWludDhBcnJheShbMHhlYiwgMHhkZCwgMHg2MiwgMHhmMSwgMHg2OCwgMHgxNCwgMHhkMiwgMHg3YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OCwgMHhlZiwgMHgxMiwgMHgyYSwgMHhmYywgMHhlNCwgMHhhZSwgMHgzY10pOwotCi12YXIgREVGQVVMVF9MSUNFTlNFX1NFUlZFUiA9IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbiArICcvbGljZW5zZV9zZXJ2ZXInOwotCi12YXIgREVGQVVMVF9NRURJQV9GSUxFID0gJ2h0dHA6Ly9zaGFkaS5raXIvYWxjYXRyYXovQ2hyb21lXzQ0LWVuY19hdi53ZWJtJzsKLQotLy8gS2V5IElEIHVzZWQgZm9yIGluaXQgZGF0YS4KLXZhciBLRVlfSUQgPSAnMDEyMzQ1Njc4OTAxMjM0NSc7Ci0KLS8vIFVuaXF1ZSBzdHJpbmdzIHRvIGlkZW50aWZ5IHRlc3QgcmVzdWx0IGV4cGVjdGF0aW9ucy4KLXZhciBVTklUX1RFU1RfU1VDQ0VTUyA9ICdVTklUX1RFU1RfU1VDQ0VTUyc7Ci12YXIgTk9UU1VQUE9SVEVERVJST1IgPSAnTk9UU1VQUE9SVEVERVJST1InOwotdmFyIEVNRV9HRU5FUkFURVJFUVVFU1RfRkFJTEVEID0gJ0VNRV9HRU5FUkFURVJFUVVFU1RfRkFJTEVEJzsKLXZhciBFTUVfU0VTU0lPTl9OT1RfRk9VTkQgPSAnRU1FX1NFU1NJT05fTk9UX0ZPVU5EJzsKLXZhciBFTUVfTE9BRF9GQUlMRUQgPSAnRU1FX0xPQURfRkFJTEVEJzsKLXZhciBFTUVfVVBEQVRFX0ZBSUxFRCA9ICdFTUVfVVBEQVRFX0ZBSUxFRCc7Ci12YXIgRU1FX0VSUk9SX0VWRU5UID0gJ0VNRV9FUlJPUl9FVkVOVCc7Ci12YXIgRU1FX01FU1NBR0VfVU5FWFBFQ1RFRF9UWVBFID0gJ0VNRV9NRVNTQUdFX1VORVhQRUNURURfVFlQRSc7Ci12YXIgRU1FX1JFTkVXQUxfTUlTU0lOR19IRUFERVIgPSAnRU1FX1JFTkVXQUxfTUlTU0lOR19IRUFERVInOwotCi0vLyBIZWFkZXJzIHVzZWQgd2hlbiBydW5uaW5nIHNvbWUgc3BlY2lmaWMgdW5pdHRlc3RzIGluIHRoZSBleHRlcm5hbCBDRE0uCi12YXIgVU5JVF9URVNUX1JFU1VMVF9IRUFERVIgPSAnVU5JVF9URVNUX1JFU1VMVCc7Ci0KLS8vIEF2YWlsYWJsZSBFTUUga2V5IHN5c3RlbXMgdG8gdXNlLgotdmFyIFdJREVWSU5FX0tFWVNZU1RFTSA9ICdjb20ud2lkZXZpbmUuYWxwaGEnOwotdmFyIENMRUFSS0VZID0gJ29yZy53My5jbGVhcmtleSc7Ci12YXIgRVhURVJOQUxfQ0xFQVJLRVkgPSAnb3JnLmNocm9taXVtLmV4dGVybmFsY2xlYXJrZXknOwotdmFyIEVYVEVSTkFMX0NMRUFSS0VZX1JFTkVXQUwgPSAnb3JnLmNocm9taXVtLmV4dGVybmFsY2xlYXJrZXkucmVuZXdhbCc7Ci12YXIgRklMRV9JT19URVNUX0tFWVNZU1RFTSA9ICdvcmcuY2hyb21pdW0uZXh0ZXJuYWxjbGVhcmtleS5maWxlaW90ZXN0JzsKLXZhciBPVVRQVVRfUFJPVEVDVElPTl9URVNUX0tFWVNZU1RFTSA9Ci0gICAgJ29yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5Lm91dHB1dHByb3RlY3Rpb250ZXN0JzsKLQotLy8gS2V5IHN5c3RlbSBuYW1lOnZhbHVlIG1hcCB0byBzaG93IG9uIHRoZSBkb2N1bWVudCBwYWdlLgotdmFyIEtFWV9TWVNURU1TID0gewotICAnV2lkZXZpbmUnOiBXSURFVklORV9LRVlTWVNURU0sCi0gICdDbGVhcmtleSc6IENMRUFSS0VZLAotICAnRXh0ZXJuYWwgQ2xlYXJrZXknOiBFWFRFUk5BTF9DTEVBUktFWQotfTsKLQotLy8gR2VuZXJhbCBXZWJNIGFuZCBNUDQgbmFtZTpjb250ZW50X3R5cGUgbWFwIHRvIHNob3cgb24gdGhlIGRvY3VtZW50IHBhZ2UuCi12YXIgTUVESUFfVFlQRVMgPSB7Ci0gICdXZWJNIC0gQXVkaW8gVmlkZW8nOiAndmlkZW8vd2VibTsgY29kZWNzPSJ2b3JiaXMsIHZwOCInLAotICAnV2ViTSAtIFZpZGVvIE9ubHknOiAndmlkZW8vd2VibTsgY29kZWNzPSJ2cDgiJywKLSAgJ1dlYk0gLSBBdWRpbyBPbmx5JzogJ3ZpZGVvL3dlYm07IGNvZGVjcz0idm9yYmlzIicsCi0gICdNUDQgLSBWaWRlbyBPbmx5JzogJ3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjREMDAwQyInLAotICAnTVA0IC0gQXVkaW8gT25seSc6ICdhdWRpby9tcDQ7IGNvZGVjcz0ibXA0YS40MC4yIicKLX07Ci0KLS8vIEdsb2JhbCBkb2N1bWVudCBlbGVtZW50cyBJRCdzLgotdmFyIFZJREVPX0VMRU1FTlRfSUQgPSAndmlkZW8nOwotdmFyIE1FRElBX0ZJTEVfRUxFTUVOVF9JRCA9ICdtZWRpYUZpbGUnOwotdmFyIExJQ0VOU0VfU0VSVkVSX0VMRU1FTlRfSUQgPSAnbGljZW5zZVNlcnZlcic7Ci12YXIgS0VZU1lTVEVNX0VMRU1FTlRfSUQgPSAna2V5U3lzdGVtTGlzdCc7Ci12YXIgTUVESUFfVFlQRV9FTEVNRU5UX0lEID0gJ21lZGlhVHlwZUxpc3QnOwotdmFyIFVTRV9NU0VfRUxFTUVOVF9JRCA9ICd1c2VNU0UnOwotdmFyIFVTRV9QTEFZX1RXSUNFX0VMRU1FTlRfSUQgPSAncGxheVR3aWNlJzsKLQotLy8gVGhlc2UgdmFyaWFibGVzIGdldCB1cGRhdGVkIGV2ZXJ5IHNlY29uZCwgc28gYmV0dGVyIHRvIGhhdmUgZ2xvYmFsIHBvaW50ZXJzLgotdmFyIGRlY29kZWRGUFNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlY29kZWRGUFMnKTsKLXZhciBkcm9wcGVkRlBTRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcm9wcGVkRlBTJyk7Ci12YXIgZHJvcHBlZEZyYW1lc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJvcHBlZEZyYW1lcycpOwotdmFyIGRvY0xvZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9ncycpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL21lZGlhX3NvdXJjZV91dGlscy5qcyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9tZWRpYV9zb3VyY2VfdXRpbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ODg1ODIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL21lZGlhX3NvdXJjZV91dGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gTWVkaWFTb3VyY2VVdGlscyBwcm92aWRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGxvYWQgY29udGVudCB1c2luZyBNU0UgQVBJLgotdmFyIE1lZGlhU291cmNlVXRpbHMgPSBuZXcgZnVuY3Rpb24oKSB7Ci19Ci0KLU1lZGlhU291cmNlVXRpbHMubG9hZE1lZGlhU291cmNlRnJvbVRlc3RDb25maWcgPSBmdW5jdGlvbih0ZXN0Q29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZENhbGxiYWNrRm4pIHsKLSAgcmV0dXJuIHRoaXMubG9hZE1lZGlhU291cmNlKHRlc3RDb25maWcubWVkaWFGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZy5tZWRpYVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRDYWxsYmFja0ZuKTsKLX07Ci0KLU1lZGlhU291cmNlVXRpbHMubG9hZE1lZGlhU291cmNlID0gZnVuY3Rpb24obWVkaWFGaWxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2FsbGJhY2tGbikgewotICBpZiAoIW1lZGlhRmlsZXMgfHwgIW1lZGlhVHlwZXMpCi0gICAgVXRpbHMuZmFpbFRlc3QoJ01pc3NpbmcgcGFyYW1ldGVycyBpbiBsb2FkTWVkaWFTb3VyY2UoKS4nKTsKLQotICB2YXIgbWVkaWFGaWxlcyA9IFV0aWxzLmNvbnZlcnRUb0FycmF5KG1lZGlhRmlsZXMpOwotICB2YXIgbWVkaWFUeXBlcyA9IFV0aWxzLmNvbnZlcnRUb0FycmF5KG1lZGlhVHlwZXMpOwotICB2YXIgdG90YWxBcHBlbmRlZCA9IDA7Ci0gIGZ1bmN0aW9uIG9uU291cmNlT3BlbihlKSB7Ci0gICAgVXRpbHMudGltZUxvZygnb25Tb3VyY2VPcGVuJywgZSk7Ci0gICAgLy8gV2UgY2FuIGxvYWQgbXVsdGlwbGUgbWVkaWEgZmlsZXMgdXNpbmcgdGhlIHNhbWUgbWVkaWEgdHlwZS4gSG93ZXZlciwgaWYKLSAgICAvLyBtb3JlIHRoYW4gb25lIG1lZGlhIHR5cGUgaXMgdXNlZCwgd2UgZXhwZWN0IHRvIGhhdmUgYSBtZWRpYSB0eXBlIGVudHJ5Ci0gICAgLy8gZm9yIGVhY2ggY29ycmVzcG9uZGluZyBtZWRpYSBmaWxlLgotICAgIHZhciBzcmNCdWZmZXIgPSBudWxsOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFGaWxlcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGkgPT0gMCB8fCBtZWRpYUZpbGVzLmxlbmd0aCA9PSBtZWRpYVR5cGVzLmxlbmd0aCkgewotICAgICAgICBVdGlscy50aW1lTG9nKCdDcmVhdGluZyBhIHNvdXJjZSBidWZmZXIgZm9yIHR5cGUgJyArIG1lZGlhVHlwZXNbaV0pOwotICAgICAgICB0cnkgewotICAgICAgICAgIHNyY0J1ZmZlciA9IG1lZGlhU291cmNlLmFkZFNvdXJjZUJ1ZmZlcihtZWRpYVR5cGVzW2ldKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KCdFeGNlcHRpb24gYWRkaW5nIHNvdXJjZSBidWZmZXI6ICcgKyBlLm1lc3NhZ2UpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZG9BcHBlbmQobWVkaWFGaWxlc1tpXSwgc3JjQnVmZmVyKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBkb0FwcGVuZChtZWRpYUZpbGUsIHNyY0J1ZmZlcikgewotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICB4aHIub3BlbignR0VUJywgbWVkaWFGaWxlKTsKLSAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJzsKLSAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKGUpIHsKLSAgICAgIHZhciBvblVwZGF0ZUVuZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgVXRpbHMudGltZUxvZygnRW5kIG9mIGFwcGVuZGluZyBidWZmZXIgZnJvbSAnICsgbWVkaWFGaWxlKTsKLSAgICAgICAgc3JjQnVmZmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VwZGF0ZWVuZCcsIG9uVXBkYXRlRW5kKTsKLSAgICAgICAgdG90YWxBcHBlbmRlZCsrOwotICAgICAgICBpZiAodG90YWxBcHBlbmRlZCA9PSBtZWRpYUZpbGVzLmxlbmd0aCkgewotICAgICAgICAgIGlmIChhcHBlbmRDYWxsYmFja0ZuKQotICAgICAgICAgICAgYXBwZW5kQ2FsbGJhY2tGbihtZWRpYVNvdXJjZSk7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVkaWFTb3VyY2UuZW5kT2ZTdHJlYW0oKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIHNyY0J1ZmZlci5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVlbmQnLCBvblVwZGF0ZUVuZCk7Ci0gICAgICBzcmNCdWZmZXIuYXBwZW5kQnVmZmVyKG5ldyBVaW50OEFycmF5KGUudGFyZ2V0LnJlc3BvbnNlKSk7Ci0gICAgfSk7Ci0gICAgeGhyLnNlbmQoKTsKLSAgfQotCi0gIHZhciBtZWRpYVNvdXJjZSA9IG5ldyBNZWRpYVNvdXJjZSgpOwotICBtZWRpYVNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdzb3VyY2VvcGVuJywgb25Tb3VyY2VPcGVuKTsKLSAgcmV0dXJuIG1lZGlhU291cmNlOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9wbGF5ZXJfdXRpbHMuanMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvcGxheWVyX3V0aWxzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZmYWFmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy9wbGF5ZXJfdXRpbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0vLyBUaGUgUGxheWVyVXRpbHMgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gYmluZGluZyBjb21tb24gbWVkaWEgZXZlbnRzCi0vLyB0byBzcGVjaWZpYyBwbGF5ZXIgZnVuY3Rpb25zLiBJdCBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucyB0byBsb2FkIG1lZGlhIHNvdXJjZQotLy8gYmFzZSBvbiB0ZXN0IGNvbmZpZ3VyYXRpb25zLgotdmFyIFBsYXllclV0aWxzID0gbmV3IGZ1bmN0aW9uKCkgewotfQotCi0vLyBQcmVwYXJlcyBhIHZpZGVvIGVsZW1lbnQgZm9yIHBsYXliYWNrIGJ5IHNldHRpbmcgZGVmYXVsdCBldmVudCBoYW5kbGVycwotLy8gYW5kIHNvdXJjZSBhdHRyaWJ1dGUuCi1QbGF5ZXJVdGlscy5yZWdpc3RlckRlZmF1bHRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKHBsYXllcikgewotICBVdGlscy50aW1lTG9nKCdSZWdpc3RlcmluZyB2aWRlbyBldmVudCBoYW5kbGVycy4nKTsKLSAgLy8gTWFwIGZyb20gZXZlbnQgbmFtZSB0byBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBuYW1lLiAgSXQgaXMgY29tbW9uIGZvcgotICAvLyBldmVudCBsaXN0ZW5lcnMgdG8gYmUgbmFtZWQgb25FdmVudE5hbWUuCi0gIHZhciBldmVudExpc3RlbmVyTWFwID0gewotICAgICdlbmNyeXB0ZWQnOiAnb25FbmNyeXB0ZWQnLAotICB9OwotICBmb3IgKGV2ZW50TmFtZSBpbiBldmVudExpc3RlbmVyTWFwKSB7Ci0gICAgdmFyIGV2ZW50TGlzdGVuZXJGdW5jdGlvbiA9IHBsYXllcltldmVudExpc3RlbmVyTWFwW2V2ZW50TmFtZV1dOwotICAgIGlmIChldmVudExpc3RlbmVyRnVuY3Rpb24pIHsKLSAgICAgIHBsYXllci52aWRlby5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24oZSkgewotICAgICAgICBwbGF5ZXJbZXZlbnRMaXN0ZW5lck1hcFtlLnR5cGVdXShlKTsKLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIHBsYXllci52aWRlby5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgLy8gVGhpcyBtb3N0IGxpa2VseSBoYXBwZW5zIG9uIHBpcGVsaW5lIGZhaWx1cmVzIChlLmcuIHdoZW4gdGhlIENETQotICAgIC8vIGNyYXNoZXMpLgotICAgIFV0aWxzLnRpbWVMb2coJ29uSFRNTEVsZW1lbnRFcnJvcicsIGVycm9yKTsKLSAgICBVdGlscy5mYWlsVGVzdChlcnJvcik7Ci0gIH0pOwotfTsKLQotLy8gUmVnaXN0ZXIgdGhlIG5lY2Vzc2FyeSBldmVudCBoYW5kbGVycyBuZWVkZWQgd2hlbiBwbGF5aW5nIGVuY3J5cHRlZCBjb250ZW50LgotLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcGxheWVyLgotUGxheWVyVXRpbHMucmVnaXN0ZXJFTUVFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKHBsYXllcikgewotICBwbGF5ZXIudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5jcnlwdGVkJywgZnVuY3Rpb24obWVzc2FnZSkgewotCi0gICAgZnVuY3Rpb24gYWRkTWVkaWFLZXlTZXNzaW9uTGlzdGVuZXJzKG1lZGlhS2V5U2Vzc2lvbikgewotICAgICAgbWVkaWFLZXlTZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gICAgICAgIHBsYXllci52aWRlby5yZWNlaXZlZEtleU1lc3NhZ2UgPSB0cnVlOwotICAgICAgICBpZiAoVXRpbHMuaXNSZW5ld2FsTWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICAgIFV0aWxzLnRpbWVMb2coJ01lZGlhS2V5U2Vzc2lvbiBvbk1lc3NhZ2UgLSByZW5ld2FsJywgbWVzc2FnZSk7Ci0gICAgICAgICAgcGxheWVyLnZpZGVvLnJlY2VpdmVkUmVuZXdhbE1lc3NhZ2UgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VUeXBlICE9ICdsaWNlbnNlLXJlcXVlc3QnKSB7Ci0gICAgICAgICAgICBVdGlscy5mYWlsVGVzdCgnVW5leHBlY3RlZCBtZXNzYWdlIHR5cGUgIicgKyBtZXNzYWdlLm1lc3NhZ2VUeXBlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiByZWNlaXZlZC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1FX01FU1NBR0VfVU5FWFBFQ1RFRF9UWVBFKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcGxheWVyLm9uTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgIH0pOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBpZiAocGxheWVyLnRlc3RDb25maWcuc2Vzc2lvblRvTG9hZCkgewotICAgICAgICBVdGlscy50aW1lTG9nKCdMb2FkaW5nIHNlc3Npb246ICcgKyBwbGF5ZXIudGVzdENvbmZpZy5zZXNzaW9uVG9Mb2FkKTsKLSAgICAgICAgdmFyIHNlc3Npb24gPQotICAgICAgICAgICAgbWVzc2FnZS50YXJnZXQubWVkaWFLZXlzLmNyZWF0ZVNlc3Npb24oJ3BlcnNpc3RlbnQtbGljZW5zZScpOwotICAgICAgICBhZGRNZWRpYUtleVNlc3Npb25MaXN0ZW5lcnMoc2Vzc2lvbik7Ci0gICAgICAgIHNlc3Npb24ubG9hZChwbGF5ZXIudGVzdENvbmZpZy5zZXNzaW9uVG9Mb2FkKQotICAgICAgICAgICAgLnRoZW4oCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgVXRpbHMuZmFpbFRlc3QoJ1Nlc3Npb24gbm90IGZvdW5kLicsIEVNRV9TRVNTSU9OX05PVF9GT1VORCk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBVdGlscy5mYWlsVGVzdChlcnJvciwgRU1FX0xPQURfRkFJTEVEKTsgfSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBVdGlscy50aW1lTG9nKCdDcmVhdGluZyBuZXcgbWVkaWEga2V5IHNlc3Npb24gZm9yIGluaXREYXRhVHlwZTogJyArCi0gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5pbml0RGF0YVR5cGUgKyAnLCBpbml0RGF0YTogJyArCi0gICAgICAgICAgICAgICAgICAgICAgVXRpbHMuZ2V0SGV4U3RyaW5nKG5ldyBVaW50OEFycmF5KG1lc3NhZ2UuaW5pdERhdGEpKSk7Ci0gICAgICAgIHZhciBzZXNzaW9uID0gbWVzc2FnZS50YXJnZXQubWVkaWFLZXlzLmNyZWF0ZVNlc3Npb24oKTsKLSAgICAgICAgYWRkTWVkaWFLZXlTZXNzaW9uTGlzdGVuZXJzKHNlc3Npb24pOwotICAgICAgICBzZXNzaW9uLmdlbmVyYXRlUmVxdWVzdChtZXNzYWdlLmluaXREYXRhVHlwZSwgbWVzc2FnZS5pbml0RGF0YSkKLSAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIGVycm9yIGlmIGEgY3Jhc2ggaXMgZXhwZWN0ZWQuIFRoaXMgZW5zdXJlcyB0aGF0Ci0gICAgICAgICAgICAgIC8vIHRoZSBkZWNvZGVyIGFjdHVhbGx5IGRldGVjdHMgYW5kIHJlcG9ydHMgdGhlIGVycm9yLgotICAgICAgICAgICAgICBpZiAodGhpcy50ZXN0Q29uZmlnLmtleVN5c3RlbSAhPQotICAgICAgICAgICAgICAgICAgJ29yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5LmNyYXNoJykgewotICAgICAgICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KGVycm9yLCBFTUVfR0VORVJBVEVSRVFVRVNUX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgfQotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgIFV0aWxzLmZhaWxUZXN0KGUpOwotICAgIH0KLSAgfSk7Ci0KLSAgdGhpcy5yZWdpc3RlckRlZmF1bHRFdmVudExpc3RlbmVycyhwbGF5ZXIpOwotICBwbGF5ZXIudmlkZW8ucmVjZWl2ZWRLZXlNZXNzYWdlID0gZmFsc2U7Ci0gIFV0aWxzLnRpbWVMb2coJ1NldHRpbmcgdmlkZW8gbWVkaWEga2V5czogJyArIHBsYXllci50ZXN0Q29uZmlnLmtleVN5c3RlbSk7Ci0KLSAgdmFyIGNvbmZpZyA9IHsKLSAgICBhdWRpb0NhcGFiaWxpdGllczogW10sCi0gICAgdmlkZW9DYXBhYmlsaXRpZXM6IFtdLAotICAgIHBlcnNpc3RlbnRTdGF0ZTogJ29wdGlvbmFsJywKLSAgICBzZXNzaW9uVHlwZXM6IFsndGVtcG9yYXJ5J10sCi0gIH07Ci0KLSAgLy8gcmVxdWVzdE1lZGlhS2V5U3lzdGVtQWNjZXNzKCkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG9mICdhdWRpb0NhcGFiaWxpdGllcycKLSAgLy8gb3IgJ3ZpZGVvQ2FwYWJpbGl0aWVzJyB0byBiZSBzcGVjaWZpZWQuIEl0IGFsc28gcmVxdWlyZXMgb25seSBjb2RlY3MKLSAgLy8gc3BlY2lmaWMgdG8gdGhlIGNhcGFiaWxpdHksIHNvIHVubGlrZSBNU0UgY2Fubm90IGhhdmUgYm90aCBhdWRpbyBhbmQKLSAgLy8gdmlkZW8gY29kZWNzIGluIHRoZSBjb250ZW50VHlwZS4KLSAgaWYgKHBsYXllci50ZXN0Q29uZmlnLm1lZGlhVHlwZSA9PSAndmlkZW8vd2VibTsgY29kZWNzPSJ2cDgiJyB8fAotICAgICAgcGxheWVyLnRlc3RDb25maWcubWVkaWFUeXBlID09ICd2aWRlby93ZWJtOyBjb2RlY3M9InZwOSInIHx8Ci0gICAgICBwbGF5ZXIudGVzdENvbmZpZy5tZWRpYVR5cGUgPT0gJ3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjREMDAwQyInKSB7Ci0gICAgLy8gVmlkZW8gb25seS4KLSAgICBjb25maWcudmlkZW9DYXBhYmlsaXRpZXMgPSBbe2NvbnRlbnRUeXBlOiBwbGF5ZXIudGVzdENvbmZpZy5tZWRpYVR5cGV9XTsKLSAgfSBlbHNlIGlmICgKLSAgICAgIHBsYXllci50ZXN0Q29uZmlnLm1lZGlhVHlwZSA9PSAnYXVkaW8vd2VibTsgY29kZWNzPSJ2b3JiaXMiJyB8fAotICAgICAgcGxheWVyLnRlc3RDb25maWcubWVkaWFUeXBlID09ICdhdWRpby93ZWJtOyBjb2RlY3M9Im9wdXMiJyB8fAotICAgICAgcGxheWVyLnRlc3RDb25maWcubWVkaWFUeXBlID09ICdhdWRpby9tcDQ7IGNvZGVjcz0ibXA0YS40MC4yIicpIHsKLSAgICAvLyBBdWRpbyBvbmx5LgotICAgIGNvbmZpZy5hdWRpb0NhcGFiaWxpdGllcyA9IFt7Y29udGVudFR5cGU6IHBsYXllci50ZXN0Q29uZmlnLm1lZGlhVHlwZX1dOwotICB9IGVsc2UgaWYgKAotICAgICAgcGxheWVyLnRlc3RDb25maWcubWVkaWFUeXBlID09ICd2aWRlby93ZWJtOyBjb2RlY3M9InZvcmJpcywgdnA4IicpIHsKLSAgICAvLyBCb3RoIGF1ZGlvIGFuZCB2aWRlbyBjb2RlY3Mgc3BlY2lmaWVkLgotICAgIGNvbmZpZy5hdWRpb0NhcGFiaWxpdGllcyA9IFt7Y29udGVudFR5cGU6ICdhdWRpby93ZWJtOyBjb2RlY3M9InZvcmJpcyInfV07Ci0gICAgY29uZmlnLnZpZGVvQ2FwYWJpbGl0aWVzID0gW3tjb250ZW50VHlwZTogJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4Iid9XTsKLSAgfSBlbHNlIGlmIChwbGF5ZXIudGVzdENvbmZpZy5tZWRpYVR5cGUgPT0gJ3ZpZGVvL3dlYm07IGNvZGVjcz0ib3B1cywgdnA5IicpIHsKLSAgICAvLyBCb3RoIGF1ZGlvIGFuZCB2aWRlbyBjb2RlY3Mgc3BlY2lmaWVkLgotICAgIGNvbmZpZy5hdWRpb0NhcGFiaWxpdGllcyA9IFt7Y29udGVudFR5cGU6ICdhdWRpby93ZWJtOyBjb2RlY3M9Im9wdXMiJ31dOwotICAgIGNvbmZpZy52aWRlb0NhcGFiaWxpdGllcyA9IFt7Y29udGVudFR5cGU6ICd2aWRlby93ZWJtOyBjb2RlY3M9InZwOSInfV07Ci0gIH0gZWxzZSB7Ci0gICAgLy8gU29tZSB0ZXN0cyAoZS5nLiBtc2VfZGlmZmVyZW50X2NvbnRhaW5lcnMuaHRtbCkgc3BlY2lmeSBhdWRpbyBhbmQKLSAgICAvLyB2aWRlbyBjb2RlY3Mgc2VwYXJhdGVseS4KLSAgICBpZiAocGxheWVyLnRlc3RDb25maWcudmlkZW9Gb3JtYXQgPT0gJ0VOQ1JZUFRFRF9NUDQnIHx8Ci0gICAgICAgIHBsYXllci50ZXN0Q29uZmlnLnZpZGVvRm9ybWF0ID09ICdDTEVBUl9NUDQnKSB7Ci0gICAgICBjb25maWcudmlkZW9DYXBhYmlsaXRpZXMgPQotICAgICAgICAgIFt7Y29udGVudFR5cGU6ICd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40RDAwMEMiJ31dOwotICAgIH0gZWxzZSBpZiAoCi0gICAgICAgIHBsYXllci50ZXN0Q29uZmlnLnZpZGVvRm9ybWF0ID09ICdFTkNSWVBURURfV0VCTScgfHwKLSAgICAgICAgcGxheWVyLnRlc3RDb25maWcudmlkZW9Gb3JtYXQgPT0gJ0NMRUFSX1dFQk0nKSB7Ci0gICAgICBjb25maWcudmlkZW9DYXBhYmlsaXRpZXMgPSBbe2NvbnRlbnRUeXBlOiAndmlkZW8vd2VibTsgY29kZWNzPSJ2cDgiJ31dOwotICAgIH0KLSAgICBpZiAocGxheWVyLnRlc3RDb25maWcuYXVkaW9Gb3JtYXQgPT0gJ0VOQ1JZUFRFRF9NUDQnIHx8Ci0gICAgICAgIHBsYXllci50ZXN0Q29uZmlnLmF1ZGlvRm9ybWF0ID09ICdDTEVBUl9NUDQnKSB7Ci0gICAgICBjb25maWcuYXVkaW9DYXBhYmlsaXRpZXMgPQotICAgICAgICAgIFt7Y29udGVudFR5cGU6ICdhdWRpby9tcDQ7IGNvZGVjcz0ibXA0YS40MC4yIid9XTsKLSAgICB9IGVsc2UgaWYgKAotICAgICAgICBwbGF5ZXIudGVzdENvbmZpZy5hdWRpb0Zvcm1hdCA9PSAnRU5DUllQVEVEX1dFQk0nIHx8Ci0gICAgICAgIHBsYXllci50ZXN0Q29uZmlnLmF1ZGlvRm9ybWF0ID09ICdDTEVBUl9XRUJNJykgewotICAgICAgY29uZmlnLmF1ZGlvQ2FwYWJpbGl0aWVzID0gW3tjb250ZW50VHlwZTogJ2F1ZGlvL3dlYm07IGNvZGVjcz0idm9yYmlzIid9XTsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGUgRmlsZSBJTyB0ZXN0IHJlcXVpcmVzIHBlcnNpc3RlbnQgc3RhdGUgc3VwcG9ydC4KLSAgaWYgKHBsYXllci50ZXN0Q29uZmlnLmtleVN5c3RlbSA9PQotICAgICAgJ29yZy5jaHJvbWl1bS5leHRlcm5hbGNsZWFya2V5LmZpbGVpb3Rlc3QnKSB7Ci0gICAgY29uZmlnLnBlcnNpc3RlbnRTdGF0ZSA9ICdyZXF1aXJlZCc7Ci0gIH0gZWxzZSBpZiAocGxheWVyLnRlc3RDb25maWcuc2Vzc2lvblRvTG9hZCkgewotICAgIGNvbmZpZy5wZXJzaXN0ZW50U3RhdGUgPSAncmVxdWlyZWQnOwotICAgIGNvbmZpZy5zZXNzaW9uVHlwZXMgPSBbJ3RlbXBvcmFyeScsICdwZXJzaXN0ZW50LWxpY2Vuc2UnXTsKLSAgfQotCi0gIHJldHVybiBuYXZpZ2F0b3IKLSAgICAgIC5yZXF1ZXN0TWVkaWFLZXlTeXN0ZW1BY2Nlc3MocGxheWVyLnRlc3RDb25maWcua2V5U3lzdGVtLCBbY29uZmlnXSkKLSAgICAgIC50aGVuKGZ1bmN0aW9uKGFjY2VzcykgeyByZXR1cm4gYWNjZXNzLmNyZWF0ZU1lZGlhS2V5cygpOyB9KQotICAgICAgLnRoZW4oZnVuY3Rpb24obWVkaWFLZXlzKSB7Ci0gICAgICAgIHJldHVybiBwbGF5ZXIudmlkZW8uc2V0TWVkaWFLZXlzKG1lZGlhS2V5cyk7Ci0gICAgICB9KQotICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7IHJldHVybiBwbGF5ZXI7IH0pCi0gICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsgVXRpbHMuZmFpbFRlc3QoZXJyb3IsIE5PVFNVUFBPUlRFREVSUk9SKTsgfSk7Ci19OwotCi1QbGF5ZXJVdGlscy5zZXRWaWRlb1NvdXJjZSA9IGZ1bmN0aW9uKHBsYXllcikgewotICBpZiAocGxheWVyLnRlc3RDb25maWcudXNlTVNFKSB7Ci0gICAgVXRpbHMudGltZUxvZygnTG9hZGluZyBtZWRpYSB1c2luZyBNU0UuJyk7Ci0gICAgdmFyIG1lZGlhU291cmNlID0KLSAgICAgICAgTWVkaWFTb3VyY2VVdGlscy5sb2FkTWVkaWFTb3VyY2VGcm9tVGVzdENvbmZpZyhwbGF5ZXIudGVzdENvbmZpZyk7Ci0gICAgcGxheWVyLnZpZGVvLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG1lZGlhU291cmNlKTsKLSAgfSBlbHNlIHsKLSAgICBVdGlscy50aW1lTG9nKCdMb2FkaW5nIG1lZGlhIHVzaW5nIHNyYy4nKTsKLSAgICBwbGF5ZXIudmlkZW8uc3JjID0gcGxheWVyLnRlc3RDb25maWcubWVkaWFGaWxlOwotICB9Ci0gIFV0aWxzLnRpbWVMb2coJ3ZpZGVvLnNyYyBoYXMgYmVlbiBzZXQgdG8gJyArIHBsYXllci52aWRlby5zcmMpOwotfTsKLQotLy8gSW5pdGlhbGl6ZSB0aGUgcGxheWVyIHRvIHBsYXkgZW5jcnlwdGVkIGNvbnRlbnQuIFJldHVybnMgYSBwcm9taXNlIHRoYXQKLS8vIHJlc29sdmVzIHRvIHRoZSBwbGF5ZXIuCi1QbGF5ZXJVdGlscy5pbml0RU1FUGxheWVyID0gZnVuY3Rpb24ocGxheWVyKSB7Ci0gIHJldHVybiBwbGF5ZXIucmVnaXN0ZXJFdmVudExpc3RlbmVycygpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgUGxheWVyVXRpbHMuc2V0VmlkZW9Tb3VyY2UocGxheWVyKTsKLSAgICBVdGlscy50aW1lTG9nKCdpbml0RU1FUGxheWVyKCkgZG9uZScpOwotICAgIHJldHVybiBwbGF5ZXI7Ci0gIH0pOwotfTsKLQotLy8gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBwbGF5ZXIgYmFzZWQgb24gdGVzdCBjb25maWd1cmF0aW9uLgotUGxheWVyVXRpbHMuY3JlYXRlUGxheWVyID0gZnVuY3Rpb24odmlkZW8sIHRlc3RDb25maWcpIHsKLSAgZnVuY3Rpb24gZ2V0UGxheWVyVHlwZShrZXlTeXN0ZW0pIHsKLSAgICBzd2l0Y2ggKGtleVN5c3RlbSkgewotICAgICAgY2FzZSBXSURFVklORV9LRVlTWVNURU06Ci0gICAgICAgIHJldHVybiBXaWRldmluZVBsYXllcjsKLSAgICAgIGNhc2UgQ0xFQVJLRVk6Ci0gICAgICBjYXNlIEVYVEVSTkFMX0NMRUFSS0VZOgotICAgICAgY2FzZSBFWFRFUk5BTF9DTEVBUktFWV9SRU5FV0FMOgotICAgICAgICByZXR1cm4gQ2xlYXJLZXlQbGF5ZXI7Ci0gICAgICBjYXNlIEZJTEVfSU9fVEVTVF9LRVlTWVNURU06Ci0gICAgICBjYXNlIE9VVFBVVF9QUk9URUNUSU9OX1RFU1RfS0VZU1lTVEVNOgotICAgICAgICByZXR1cm4gVW5pdFRlc3RQbGF5ZXI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVdGlscy50aW1lTG9nKGtleVN5c3RlbSArICcgaXMgbm90IGEga25vd24ga2V5IHN5c3RlbScpOwotICAgICAgICByZXR1cm4gQ2xlYXJLZXlQbGF5ZXI7Ci0gICAgfQotICB9Ci0gIHZhciBQbGF5ZXIgPSBnZXRQbGF5ZXJUeXBlKHRlc3RDb25maWcua2V5U3lzdGVtKTsKLSAgcmV0dXJuIG5ldyBQbGF5ZXIodmlkZW8sIHRlc3RDb25maWcpOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy90ZXN0X2NvbmZpZy5qcyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy90ZXN0X2NvbmZpZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdlODY1OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvdGVzdF9jb25maWcuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIFRlc3QgY29uZmlndXJhdGlvbiB1c2VkIGJ5IHRlc3QgcGFnZSB0byBjb25maWd1cmUgdGhlIHBsYXllciBhcHAgYW5kIG90aGVyCi0vLyB0ZXN0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgotZnVuY3Rpb24gVGVzdENvbmZpZygpIHsKLSAgdGhpcy5tZWRpYUZpbGUgPSBudWxsOwotICB0aGlzLmtleVN5c3RlbSA9IG51bGw7Ci0gIHRoaXMubWVkaWFUeXBlID0gbnVsbDsKLSAgdGhpcy5saWNlbnNlU2VydmVyVVJMID0gbnVsbDsKLSAgdGhpcy51c2VNU0UgPSBmYWxzZTsKLSAgdGhpcy5ydW5GUFMgPSBmYWxzZTsKLSAgdGhpcy5wbGF5VHdpY2UgPSBmYWxzZTsKLX0KLQotVGVzdENvbmZpZy5wcm90b3R5cGUubG9hZFF1ZXJ5UGFyYW1zID0gZnVuY3Rpb24oKSB7Ci0gIC8vIExvYWQgcXVlcnkgcGFyYW1ldGVycyBhbmQgc2V0IGRlZmF1bHQgdmFsdWVzLgotICB2YXIgciA9IC8oW14mPV0rKT0/KFteJl0qKS9nOwotICAvLyBMYW1iZGEgZnVuY3Rpb24gZm9yIGRlY29kaW5nIGV4dHJhY3RlZCBtYXRjaCB2YWx1ZXMuIFJlcGxhY2VzICcrJyB3aXRoCi0gIC8vIHNwYWNlIHNvIGRlY29kZVVSSUNvbXBvbmVudCBmdW5jdGlvbnMgcHJvcGVybHkuCi0gIHZhciBkZWNvZGVVUkkgPSBmdW5jdGlvbiBkZWNvZGVVUkkocykgewotICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzLnJlcGxhY2UoL1wrL2csICcgJykpOwotICB9OwotICB2YXIgbWF0Y2g7Ci0gIHdoaWxlIChtYXRjaCA9IHIuZXhlYyh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKSkpCi0gICAgdGhpc1tkZWNvZGVVUkkobWF0Y2hbMV0pXSA9IGRlY29kZVVSSShtYXRjaFsyXSk7Ci0gIHRoaXMudXNlTVNFID0gdGhpcy51c2VNU0UgPT0gJzEnIHx8IHRoaXMudXNlTVNFID09ICd0cnVlJzsKLSAgdGhpcy5wbGF5VHdpY2UgPSB0aGlzLnBsYXlUd2ljZSA9PSAnMScgfHwgdGhpcy5wbGF5VHdpY2UgPT0gJ3RydWUnOwotfTsKLQotVGVzdENvbmZpZy51cGRhdGVEb2N1bWVudCA9IGZ1bmN0aW9uKCkgewotICB0aGlzLmxvYWRRdWVyeVBhcmFtcygpOwotICBVdGlscy5hZGRPcHRpb25zKEtFWVNZU1RFTV9FTEVNRU5UX0lELCBLRVlfU1lTVEVNUyk7Ci0gIFV0aWxzLmFkZE9wdGlvbnMoTUVESUFfVFlQRV9FTEVNRU5UX0lELCBNRURJQV9UWVBFUyk7Ci0KLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTUVESUFfRklMRV9FTEVNRU5UX0lEKS52YWx1ZSA9Ci0gICAgICB0aGlzLm1lZGlhRmlsZSB8fCBERUZBVUxUX01FRElBX0ZJTEU7Ci0KLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTElDRU5TRV9TRVJWRVJfRUxFTUVOVF9JRCkudmFsdWUgPQotICAgICAgdGhpcy5saWNlbnNlU2VydmVyVVJMIHx8IERFRkFVTFRfTElDRU5TRV9TRVJWRVI7Ci0KLSAgaWYgKHRoaXMua2V5U3lzdGVtKQotICAgIFV0aWxzLmVuc3VyZU9wdGlvbkluTGlzdChLRVlTWVNURU1fRUxFTUVOVF9JRCwgdGhpcy5rZXlTeXN0ZW0pOwotICBpZiAodGhpcy5tZWRpYVR5cGUpCi0gICAgVXRpbHMuZW5zdXJlT3B0aW9uSW5MaXN0KE1FRElBX1RZUEVfRUxFTUVOVF9JRCwgdGhpcy5tZWRpYVR5cGUpOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChVU0VfTVNFX0VMRU1FTlRfSUQpLnZhbHVlID0gdGhpcy51c2VNU0U7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFVTRV9QTEFZX1RXSUNFX0VMRU1FTlRfSUQpLnZhbHVlID0gdGhpcy5wbGF5VHdpY2U7Ci19OwotCi1UZXN0Q29uZmlnLmluaXQgPSBmdW5jdGlvbigpIHsKLSAgLy8gUmVsb2FkIHRlc3QgY29uZmlndXJhdGlvbiBmcm9tIGRvY3VtZW50LgotICB0aGlzLm1lZGlhRmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKE1FRElBX0ZJTEVfRUxFTUVOVF9JRCkudmFsdWU7Ci0gIHRoaXMua2V5U3lzdGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoS0VZU1lTVEVNX0VMRU1FTlRfSUQpLnZhbHVlOwotICB0aGlzLm1lZGlhVHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKE1FRElBX1RZUEVfRUxFTUVOVF9JRCkudmFsdWU7Ci0gIHRoaXMudXNlTVNFID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVVNFX01TRV9FTEVNRU5UX0lEKS52YWx1ZSA9PSAndHJ1ZSc7Ci0gIHRoaXMucGxheVR3aWNlID0KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFVTRV9QTEFZX1RXSUNFX0VMRU1FTlRfSUQpLnZhbHVlID09ICd0cnVlJzsKLSAgdGhpcy5saWNlbnNlU2VydmVyVVJMID0KLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKExJQ0VOU0VfU0VSVkVSX0VMRU1FTlRfSUQpLnZhbHVlOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy91bml0X3Rlc3RfcGxheWVyLmpzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL3VuaXRfdGVzdF9wbGF5ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYzg5NDguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL3VuaXRfdGVzdF9wbGF5ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIENETSB1bml0IHRlc3QgcGxheWVyIGlzIHVzZWQgdG8gcnVuIGEgc3BlY2lmaWMgdGVzdCB3aXRoaW4gdGhlIENETS4gVGhlIHRlc3QKLS8vIHJlc3VsdCBpcyByZXBvcnRlZCB2aWEgYSBzcGVjaWFsIGtleSBtZXNzYWdlIHdpdGggVU5JVF9URVNUX1JFU1VMVF9IRUFERVIKLS8vIGZvbGxvd2VkIGJ5IDEgZm9yIHN1Y2Nlc3MsIGFuZCAwIGZvciBmYWlsdXJlLgotZnVuY3Rpb24gVW5pdFRlc3RQbGF5ZXIodmlkZW8sIHRlc3RDb25maWcpIHsKLSAgdGhpcy52aWRlbyA9IHZpZGVvOwotICB0aGlzLnRlc3RDb25maWcgPSB0ZXN0Q29uZmlnOwotfQotCi1Vbml0VGVzdFBsYXllci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkgewotICAvLyBSZXR1cm5zIGEgcHJvbWlzZS4KLSAgcmV0dXJuIFBsYXllclV0aWxzLmluaXRFTUVQbGF5ZXIodGhpcyk7Ci19OwotCi1Vbml0VGVzdFBsYXllci5wcm90b3R5cGUucmVnaXN0ZXJFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkgewotICAvLyBSZXR1cm5zIGEgcHJvbWlzZS4KLSAgcmV0dXJuIFBsYXllclV0aWxzLnJlZ2lzdGVyRU1FRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci19OwotCi1oYW5kbGVNZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkgewotICAvLyBUaGUgdGVzdCByZXN1bHQgaXMgZWl0aGVyICcwJyBvciAnMScgYXBwZW5kZWQgdG8gdGhlIGhlYWRlci4KLSAgdmFyIG1zZyA9IFV0aWxzLmNvbnZlcnRUb1VpbnQ4QXJyYXkobWVzc2FnZS5tZXNzYWdlKTsKLSAgaWYgKFV0aWxzLmhhc1ByZWZpeChtc2csIFVOSVRfVEVTVF9SRVNVTFRfSEVBREVSKSkgewotICAgIGlmIChtc2cubGVuZ3RoICE9IFVOSVRfVEVTVF9SRVNVTFRfSEVBREVSLmxlbmd0aCArIDEpIHsKLSAgICAgIFV0aWxzLmZhaWxUZXN0KCdVbmV4cGVjdGVkIENETSBVbml0IFRlc3QgbWVzc2FnZScgKyBtc2cpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIgcmVzdWx0X2luZGV4ID0gVU5JVF9URVNUX1JFU1VMVF9IRUFERVIubGVuZ3RoOwotICAgIHZhciBzdWNjZXNzID0gU3RyaW5nLmZyb21DaGFyQ29kZShtc2dbcmVzdWx0X2luZGV4XSkgPT0gMTsKLSAgICBVdGlscy50aW1lTG9nKCdDRE0gdW5pdCB0ZXN0OiAnICsgKHN1Y2Nlc3MgPyAnU3VjY2VzcycgOiAnRmFpbCcpKTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgIFV0aWxzLnNldFJlc3VsdEluVGl0bGUoVU5JVF9URVNUX1NVQ0NFU1MpOwotICAgIGVsc2UKLSAgICAgIFV0aWxzLmZhaWxUZXN0KCdDRE0gdW5pdCB0ZXN0IGZhaWxlZC4nKTsKLSAgfQotfTsKLQotVW5pdFRlc3RQbGF5ZXIucHJvdG90eXBlLm9uTWVzc2FnZSA9IGhhbmRsZU1lc3NhZ2U7CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvdXRpbHMuanMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvdXRpbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MzY3N2YuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbWVfcGxheWVyX2pzL3V0aWxzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotLy8gVXRpbHMgcHJvdmlkZSBsb2dnaW5nIGZ1bmN0aW9ucyBhbmQgb3RoZXIgSlMgZnVuY3Rpb25zIGNvbW1vbmx5IHVzZWQgYnkgdGhlCi0vLyBhcHAgYW5kIG1lZGlhIHBsYXllcnMuCi12YXIgVXRpbHMgPSBuZXcgZnVuY3Rpb24oKSB7Ci0gIHRoaXMudGl0bGVDaGFuZ2VkID0gZmFsc2U7Ci19OwotCi0vLyBBZGRzIG9wdGlvbnMgdG8gZG9jdW1lbnQgZWxlbWVudC4KLVV0aWxzLmFkZE9wdGlvbnMgPSBmdW5jdGlvbihlbGVtZW50SUQsIGtleVZhbHVlT3B0aW9ucywgZGlzYWJsZWRPcHRpb25zKSB7Ci0gIGRpc2FibGVkT3B0aW9ucyA9IGRpc2FibGVkT3B0aW9ucyB8fCBbXTsKLSAgdmFyIHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SUQpOwotICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGtleVZhbHVlT3B0aW9ucyk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotICAgIHZhciBrZXkgPSBrZXlzW2ldOwotICAgIHZhciBvcHRpb24gPSBuZXcgT3B0aW9uKGtleSwga2V5VmFsdWVPcHRpb25zW2tleV0pOwotICAgIG9wdGlvbi50aXRsZSA9IGtleVZhbHVlT3B0aW9uc1trZXldOwotICAgIGlmIChkaXNhYmxlZE9wdGlvbnMuaW5kZXhPZihrZXkpID49IDApCi0gICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlOwotICAgIHNlbGVjdEVsZW1lbnQub3B0aW9ucy5hZGQob3B0aW9uKTsKLSAgfQotfTsKLQotVXRpbHMuY29udmVydFRvQXJyYXkgPSBmdW5jdGlvbihpbnB1dCkgewotICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpCi0gICAgcmV0dXJuIGlucHV0OwotICByZXR1cm4gW2lucHV0XTsKLX07Ci0KLVV0aWxzLmNvbnZlcnRUb1VpbnQ4QXJyYXkgPSBmdW5jdGlvbihtc2cpIHsKLSAgaWYgKHR5cGVvZiBtc2cgPT0gJ3N0cmluZycpIHsKLSAgICB2YXIgYW5zID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHsKLSAgICAgIGFuc1tpXSA9IG1zZy5jaGFyQ29kZUF0KGkpOwotICAgIH0KLSAgICByZXR1cm4gYW5zOwotICB9Ci0gIC8vIEFzc3VtZSBpdCBpcyBhbiBBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcuIElmIGl0IGFscmVhZHkgaXMgYQotICAvLyBVaW50OEFycmF5LCB0aGlzIHdpbGwganVzdCBtYWtlIGEgY29weSBvZiB0aGUgdmlldy4KLSAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG1zZyk7Ci19OwotCi1VdGlscy5jcmVhdGVKV0tEYXRhID0gZnVuY3Rpb24oa2V5SWQsIGtleSkgewotICAvLyBKV0sgcm91dGluZXMgY29waWVkIGZyb20gdGhpcmRfcGFydHkvV2ViS2l0L0xheW91dFRlc3RzL21lZGlhLwotICAvLyAgIGVuY3J5cHRlZC1tZWRpYS9lbmNyeXB0ZWQtbWVkaWEtdXRpbHMuanMKLQotICAvLyBFbmNvZGVzIGRhdGEgKFVpbnQ4QXJyYXkpIGludG8gYmFzZTY0dXJsIHN0cmluZy4gVGhlcmUgaXMgbm8gJz0nIHBhZGRpbmcsCi0gIC8vIGFuZCB0aGUgY2hhcmFjdGVycyAnLScgYW5kICdfJyBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiAnKycgYW5kICcvJywKLSAgLy8gcmVzcGVjdGl2ZWx5LgotICBmdW5jdGlvbiBiYXNlNjR1cmxFbmNvZGUoZGF0YSkgewotICAgIHZhciByZXN1bHQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgZGF0YSkpOwotICAgIHJldHVybiByZXN1bHQucmVwbGFjZSgvPSskL2csICcnKS5yZXBsYWNlKC9cKy9nLCAiLSIpLnJlcGxhY2UoL1wvL2csICJfIik7Ci0gIH0KLQotICAvLyBDcmVhdGVzIGEgSldLIGZyb20gcmF3IGtleSBJRCBhbmQga2V5LgotICBmdW5jdGlvbiBjcmVhdGVKV0soa2V5SWQsIGtleSkgewotICAgIHZhciBqd2sgPSAneyJrdHkiOiJvY3QiLCJhbGciOiJBMTI4S1ciLCJraWQiOiInOwotICAgIGp3ayArPSBiYXNlNjR1cmxFbmNvZGUoa2V5SWQpOwotICAgIGp3ayArPSAnIiwiayI6Iic7Ci0gICAgandrICs9IGJhc2U2NHVybEVuY29kZShrZXkpOwotICAgIGp3ayArPSAnIn0nOwotICAgIHJldHVybiBqd2s7Ci0gIH0KLQotICAvLyBDcmVhdGVzIGEgSldLIFNldCBmcm9tIGFuIGFycmF5IG9mIEpXSyhzKS4KLSAgZnVuY3Rpb24gY3JlYXRlSldLU2V0KCkgewotICAgIHZhciBqd2tTZXQgPSAneyJrZXlzIjpbJzsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgandrU2V0ICs9ICcsJzsKLSAgICAgIGp3a1NldCArPSBhcmd1bWVudHNbaV07Ci0gICAgfQotICAgIGp3a1NldCArPSAnXX0nOwotICAgIHJldHVybiBqd2tTZXQ7Ci0gIH0KLQotICByZXR1cm4gVXRpbHMuY29udmVydFRvVWludDhBcnJheShjcmVhdGVKV0tTZXQoY3JlYXRlSldLKGtleUlkLCBrZXkpKSk7Ci19OwotCi1VdGlscy5leHRyYWN0Rmlyc3RMaWNlbnNlS2V5SWQgPSBmdW5jdGlvbihtZXNzYWdlKSB7Ci0gIC8vIERlY29kZXMgZGF0YSAoVWludDhBcnJheSkgZnJvbSBiYXNlNjR1cmwgc3RyaW5nLgotICBmdW5jdGlvbiBiYXNlNjR1cmxEZWNvZGUoZGF0YSkgewotICAgIHJldHVybiBhdG9iKGRhdGEucmVwbGFjZSgvXC0vZywgIisiKS5yZXBsYWNlKC9cXy9nLCAiLyIpKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyhkYXRhKSB7Ci0gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgVXRpbHMuY29udmVydFRvVWludDhBcnJheShkYXRhKSk7Ci0gIH0KLQotICB0cnkgewotICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShjb252ZXJ0VG9TdHJpbmcobWVzc2FnZSkpOwotICAgIC8vIERlY29kZSB0aGUgZmlyc3QgZWxlbWVudCBvZiAna2lkcycsIHJldHVybiBpdCBhcyBhbiBVaW50OEFycmF5LgotICAgIHJldHVybiBVdGlscy5jb252ZXJ0VG9VaW50OEFycmF5KGJhc2U2NHVybERlY29kZShqc29uLmtpZHNbMF0pKTsKLSAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAvLyBOb3QgdmFsaWQgSlNPTiwgc28gcmV0dXJuIG1lc3NhZ2UgdW50b3VjaGVkIGFzIFVpbnQ4QXJyYXkuCi0gICAgcmV0dXJuIFV0aWxzLmNvbnZlcnRUb1VpbnQ4QXJyYXkobWVzc2FnZSk7Ci0gIH0KLX0KLQotVXRpbHMuZG9jdW1lbnRMb2cgPSBmdW5jdGlvbihsb2csIHN1Y2Nlc3MsIHRpbWUpIHsKLSAgaWYgKCFkb2NMb2dzKQotICAgIHJldHVybjsKLSAgdGltZSA9IHRpbWUgfHwgVXRpbHMuZ2V0Q3VycmVudFRpbWVTdHJpbmcoKTsKLSAgdmFyIHRpbWVMb2cgPSAnPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbiI+JyArIHRpbWUgKyAnPC9zcGFuPic7Ci0gIHZhciBsb2dDb2xvciA9ICFzdWNjZXNzID8gJ3JlZCcgOiAnYmxhY2snOyAvLyBkZWZhdWx0IGlzIHRydWUuCi0gIGxvZyA9ICc8c3BhbiBzdHlsZT0iY29sb3I6ICInICsgbG9nQ29sb3IgKyAnPicgKyBsb2cgKyAnPC9zcGFuPic7Ci0gIGRvY0xvZ3MuaW5uZXJIVE1MID0gdGltZUxvZyArICcgLSAnICsgbG9nICsgJzxicj4nICsgZG9jTG9ncy5pbm5lckhUTUw7Ci19OwotCi1VdGlscy5lbnN1cmVPcHRpb25Jbkxpc3QgPSBmdW5jdGlvbihsaXN0SUQsIG9wdGlvbikgewotICB2YXIgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGxpc3RJRCk7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0RWxlbWVudC5sZW5ndGg7IGkrKykgewotICAgIGlmIChzZWxlY3RFbGVtZW50Lm9wdGlvbnNbaV0udmFsdWUgPT0gb3B0aW9uKSB7Ci0gICAgICBzZWxlY3RFbGVtZW50LnZhbHVlID0gb3B0aW9uOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotICAvLyBUaGUgbGlzdCBkb2VzIG5vdCBoYXZlIHRoZSBvcHRpb24sIGxldCdzIGFkZCBpdCBhbmQgc2VsZWN0IGl0LgotICB2YXIgb3B0aW9uRWxlbWVudCA9IG5ldyBPcHRpb24ob3B0aW9uLCBvcHRpb24pOwotICBvcHRpb25FbGVtZW50LnRpdGxlID0gb3B0aW9uOwotICBzZWxlY3RFbGVtZW50Lm9wdGlvbnMuYWRkKG9wdGlvbkVsZW1lbnQpOwotICBzZWxlY3RFbGVtZW50LnZhbHVlID0gb3B0aW9uOwotfTsKLQotVXRpbHMuZmFpbFRlc3QgPSBmdW5jdGlvbihtc2csIG5ld1RpdGxlKSB7Ci0gIHZhciBmYWlsTWVzc2FnZSA9ICdGQUlMOiAnOwotICB2YXIgdGl0bGUgPSAnRkFJTEVEJzsKLSAgLy8gSGFuZGxlIGV4Y2VwdGlvbiBtZXNzYWdlczsKLSAgaWYgKG1zZy5tZXNzYWdlKSB7Ci0gICAgdGl0bGUgPSBtc2cubmFtZSB8fCAnRXJyb3InOwotICAgIGZhaWxNZXNzYWdlICs9IHRpdGxlICsgJyAnICsgbXNnLm1lc3NhZ2U7Ci0gIH0gZWxzZSBpZiAobXNnIGluc3RhbmNlb2YgRXZlbnQpIHsKLSAgICAvLyBIYW5kbGUgZmFpbGluZyBldmVudHMuCi0gICAgZmFpbE1lc3NhZ2UgPSBtc2cudGFyZ2V0ICsgJy4nICsgbXNnLnR5cGU7Ci0gICAgdGl0bGUgPSBtc2cudHlwZTsKLSAgfSBlbHNlIHsKLSAgICBmYWlsTWVzc2FnZSArPSBtc2c7Ci0gIH0KLSAgLy8gRm9yY2UgbmV3VGl0bGUgaWYgcGFzc2VkLgotICB0aXRsZSA9IG5ld1RpdGxlIHx8IHRpdGxlOwotICAvLyBMb2cgZmFpbHVyZS4KLSAgVXRpbHMuZG9jdW1lbnRMb2coZmFpbE1lc3NhZ2UsIGZhbHNlKTsKLSAgY29uc29sZS5sb2coZmFpbE1lc3NhZ2UsIG1zZyk7Ci0gIFV0aWxzLnNldFJlc3VsdEluVGl0bGUodGl0bGUpOwotfTsKLQotVXRpbHMuZ2V0Q3VycmVudFRpbWVTdHJpbmcgPSBmdW5jdGlvbigpIHsKLSAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwotICB2YXIgaG91cnMgPSAoJzAnICsgZGF0ZS5nZXRIb3VycygpKS5zbGljZSgtMik7Ci0gIHZhciBtaW51dGVzID0gKCcwJyArIGRhdGUuZ2V0TWludXRlcygpKS5zbGljZSgtMik7Ci0gIHZhciBzZWNzID0gKCcwJyArIGRhdGUuZ2V0U2Vjb25kcygpKS5zbGljZSgtMik7Ci0gIHZhciBtaWxsaVNlY3MgPSAoJzAwJyArIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKTsKLSAgcmV0dXJuIGhvdXJzICsgJzonICsgbWludXRlcyArICc6JyArIHNlY3MgKyAnLicgKyBtaWxsaVNlY3M7Ci19OwotCi1VdGlscy5nZXREZWZhdWx0S2V5ID0gZnVuY3Rpb24oZm9yY2VJbnZhbGlkUmVzcG9uc2UpIHsKLSAgaWYgKGZvcmNlSW52YWxpZFJlc3BvbnNlKSB7Ci0gICAgVXRpbHMudGltZUxvZygnRm9yY2luZyBpbnZhbGlkIGtleSBkYXRhLicpOwotICAgIHJldHVybiBuZXcgVWludDhBcnJheShbMHhBQV0pOwotICB9Ci0gIHJldHVybiBLRVk7Ci19OwotCi1VdGlscy5nZXRIZXhTdHJpbmcgPSBmdW5jdGlvbih1aW50QXJyYXkpIHsKLSAgdmFyIGhleF9zdHIgPSAnJzsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCB1aW50QXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICB2YXIgaGV4ID0gdWludEFycmF5W2ldLnRvU3RyaW5nKDE2KTsKLSAgICBpZiAoaGV4Lmxlbmd0aCA9PSAxKQotICAgICAgaGV4ID0gJzAnICsgaGV4OwotICAgIGhleF9zdHIgKz0gaGV4OwotICB9Ci0gIHJldHVybiBoZXhfc3RyOwotfTsKLQotVXRpbHMuaGFzUHJlZml4ID0gZnVuY3Rpb24obXNnLCBwcmVmaXgpIHsKLSAgdmFyIG1lc3NhZ2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIFV0aWxzLmNvbnZlcnRUb1VpbnQ4QXJyYXkobXNnKSk7Ci0gIHJldHVybiBtZXNzYWdlLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSA9PSBwcmVmaXg7Ci19OwotCi1VdGlscy5pbnN0YWxsVGl0bGVFdmVudEhhbmRsZXIgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCkgewotICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmN0aW9uKGUpIHsKLSAgICBVdGlscy5zZXRSZXN1bHRJblRpdGxlKGUudHlwZS50b1VwcGVyQ2FzZSgpKTsKLSAgfSwgZmFsc2UpOwotfTsKLQotVXRpbHMuaXNSZW5ld2FsTWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKLSAgcmV0dXJuIChtZXNzYWdlLm1lc3NhZ2VUeXBlID09ICdsaWNlbnNlLXJlbmV3YWwnKTsKLX07Ci0KLVV0aWxzLnJlc2V0VGl0bGVDaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgdGhpcy50aXRsZUNoYW5nZWQgPSBmYWxzZTsKLSAgZG9jdW1lbnQudGl0bGUgPSAnJzsKLX07Ci0KLVV0aWxzLnNlbmRSZXF1ZXN0ID0gZnVuY3Rpb24oCi0gICAgcmVxdWVzdFR5cGUsIHJlc3BvbnNlVHlwZSwgbWVzc2FnZSwgc2VydmVyVVJMLCBvblJlc3BvbnNlQ2FsbGJhY2tGbiwKLSAgICBmb3JjZUludmFsaWRSZXNwb25zZSkgewotICB2YXIgcmVxdWVzdEF0dGVtcHRDb3VudCA9IDA7Ci0gIHZhciBSRVFVRVNUX1JFVFJZX0RFTEFZX01TID0gMzAwMDsKLSAgdmFyIFJFUVVFU1RfVElNRU9VVF9NUyA9IDEwMDA7Ci0KLSAgZnVuY3Rpb24gc2VuZFJlcXVlc3RBdHRlbXB0KCkgewotICAgIC8vIE5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyB3aWxsIHJldHJ5IG9uIGZhaWx1cmVzCi0gICAgLy8gdW50aWwgdGhlIHRlc3QgZnJhbWV3b3JrIHN0b3BzIHRoZSB0ZXN0LgotICAgIHJlcXVlc3RBdHRlbXB0Q291bnQrKzsKLSAgICB2YXIgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHhtbGh0dHAucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlOwotICAgIHhtbGh0dHAub3BlbihyZXF1ZXN0VHlwZSwgc2VydmVyVVJMLCB0cnVlKTsKLSAgICB4bWxodHRwLm9uZXJyb3IgPSBmdW5jdGlvbihlKSB7Ci0gICAgICBVdGlscy50aW1lTG9nKCdSZXF1ZXN0IHN0YXR1czogJyArIHRoaXMuc3RhdHVzVGV4dCk7Ci0gICAgICBVdGlscy50aW1lTG9nKCdGQUlMRUQ6IExpY2Vuc2UgcmVxdWVzdCBYSFIgZmFpbGVkIHdpdGggbmV0d29yayBlcnJvci4nKTsKLSAgICAgIFV0aWxzLnRpbWVMb2coJ1JldHJ5aW5nIHJlcXVlc3QgaW4gJyArIFJFUVVFU1RfUkVUUllfREVMQVlfTVMgKyAnbXMnKTsKLSAgICAgIHNldFRpbWVvdXQoc2VuZFJlcXVlc3RBdHRlbXB0LCBSRVFVRVNUX1JFVFJZX0RFTEFZX01TKTsKLSAgICB9OwotICAgIHhtbGh0dHAub25sb2FkID0gZnVuY3Rpb24oZSkgewotICAgICAgaWYgKHRoaXMuc3RhdHVzID09IDIwMCkgewotICAgICAgICBvblJlc3BvbnNlQ2FsbGJhY2tGbih0aGlzLnJlc3BvbnNlKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT0gNDA0ICYmIHNlcnZlclVSTCA9PSBERUZBVUxUX0xJQ0VOU0VfU0VSVkVSKSB7Ci0gICAgICAgIC8vIElmIHVzaW5nIHRoZSBkZWZhdWx0IGxpY2Vuc2Ugc2VydmVyLCBubyBwYWdlIGF2YWlsYWJsZSBtZWFucyB0aGVyZQotICAgICAgICAvLyBpcyBubyBsaWNlbnNlIHNlcnZlciBjb25maWd1cmVkLgotICAgICAgICBvblJlc3BvbnNlQ2FsbGJhY2tGbihVdGlscy5jb252ZXJ0VG9VaW50OEFycmF5KCJObyBsaWNlbnNlLiIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIFV0aWxzLnRpbWVMb2coJ0JhZCByZXNwb25zZSBzdGF0dXM6ICcgKyB0aGlzLnN0YXR1cyk7Ci0gICAgICAgIFV0aWxzLnRpbWVMb2coJ0JhZCByZXNwb25zZTogJyArIHRoaXMucmVzcG9uc2UpOwotICAgICAgICBVdGlscy50aW1lTG9nKCdSZXRyeWluZyByZXF1ZXN0IGluICcgKyBSRVFVRVNUX1JFVFJZX0RFTEFZX01TICsgJ21zJyk7Ci0gICAgICAgIHNldFRpbWVvdXQoc2VuZFJlcXVlc3RBdHRlbXB0LCBSRVFVRVNUX1JFVFJZX0RFTEFZX01TKTsKLSAgICAgIH0KLSAgICB9OwotICAgIHhtbGh0dHAudGltZW91dCA9IFJFUVVFU1RfVElNRU9VVF9NUzsKLSAgICB4bWxodHRwLm9udGltZW91dCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgIFV0aWxzLnRpbWVMb2coJ1JlcXVlc3QgdGltZW91dCcpOwotICAgICAgVXRpbHMudGltZUxvZygnUmV0cnlpbmcgcmVxdWVzdCBpbiAnICsgUkVRVUVTVF9SRVRSWV9ERUxBWV9NUyArICdtcycpOwotICAgICAgc2V0VGltZW91dChzZW5kUmVxdWVzdEF0dGVtcHQsIFJFUVVFU1RfUkVUUllfREVMQVlfTVMpOwotICAgIH0KLSAgICBVdGlscy50aW1lTG9nKCdBdHRlbXB0ICgnICsgcmVxdWVzdEF0dGVtcHRDb3VudCArCi0gICAgICAgICAgICAgICAgICAnKTogc2VuZGluZyByZXF1ZXN0IHRvIHNlcnZlcjogJyArIHNlcnZlclVSTCk7Ci0gICAgeG1saHR0cC5zZW5kKG1lc3NhZ2UpOwotICB9Ci0KLSAgaWYgKGZvcmNlSW52YWxpZFJlc3BvbnNlKSB7Ci0gICAgVXRpbHMudGltZUxvZygnTm90IHNlbmRpbmcgcmVxdWVzdCAtIGZvcmNpbmcgYW4gaW52YWxpZCByZXNwb25zZS4nKTsKLSAgICByZXR1cm4gb25SZXNwb25zZUNhbGxiYWNrRm4oVXRpbHMuY29udmVydFRvVWludDhBcnJheSgiSW52YWxpZCByZXNwb25zZS4iKSk7Ci0gIH0KLSAgc2VuZFJlcXVlc3RBdHRlbXB0KCk7Ci19OwotCi1VdGlscy5zZXRSZXN1bHRJblRpdGxlID0gZnVuY3Rpb24odGl0bGUpIHsKLSAgLy8gSWYgZG9jdW1lbnQgdGl0bGUgaXMgJ0VOREVEJywgdGhlbiB1cGRhdGUgaXQgd2l0aCBuZXcgdGl0bGUgdG8gcG9zc2libHkKLSAgLy8gbWFyayBhIHRlc3QgYXMgZmFpbHVyZS4gIE90aGVyd2lzZSwga2VlcCB0aGUgZmlyc3QgdGl0bGUgY2hhbmdlIGluIHBsYWNlLgotICBpZiAoIXRoaXMudGl0bGVDaGFuZ2VkIHx8IGRvY3VtZW50LnRpdGxlID09ICdFTkRFRCcpCi0gICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTsKLSAgVXRpbHMudGltZUxvZygnU2V0IGRvY3VtZW50IHRpdGxlIHRvOiAnICsgdGl0bGUgKyAnLCB1cGRhdGVkIHRpdGxlOiAnICsKLSAgICAgICAgICAgICAgICBkb2N1bWVudC50aXRsZSk7Ci0gIHRoaXMudGl0bGVDaGFuZ2VkID0gdHJ1ZTsKLX07Ci0KLVV0aWxzLnRpbWVMb2cgPSBmdW5jdGlvbigvKiovKSB7Ci0gIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApCi0gICAgcmV0dXJuOwotICB2YXIgdGltZSA9IFV0aWxzLmdldEN1cnJlbnRUaW1lU3RyaW5nKCk7Ci0gIC8vIExvZyB0byBkb2N1bWVudC4KLSAgVXRpbHMuZG9jdW1lbnRMb2coYXJndW1lbnRzWzBdLCB0aW1lKTsKLSAgLy8gTG9nIHRvIEpTIGNvbnNvbGUuCi0gIHZhciBsb2dTdHJpbmcgPSB0aW1lICsgJyAtICc7Ci0gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgbG9nU3RyaW5nICs9ICcgJyArIGFyZ3VtZW50c1tpXTsKLSAgfQotICBjb25zb2xlLmxvZyhsb2dTdHJpbmcpOwotfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy93aWRldmluZV9wbGF5ZXIuanMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VtZV9wbGF5ZXJfanMvd2lkZXZpbmVfcGxheWVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzkzNzIwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZW1lX3BsYXllcl9qcy93aWRldmluZV9wbGF5ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLS8vIFdpZGV2aW5lIHBsYXllciByZXNwb25zaWJsZSBmb3IgcGxheWluZyBtZWRpYSB1c2luZyBXaWRldmluZSBrZXkgc3lzdGVtLgotZnVuY3Rpb24gV2lkZXZpbmVQbGF5ZXIodmlkZW8sIHRlc3RDb25maWcpIHsKLSAgdGhpcy52aWRlbyA9IHZpZGVvOwotICB0aGlzLnRlc3RDb25maWcgPSB0ZXN0Q29uZmlnOwotfQotCi1XaWRldmluZVBsYXllci5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkgewotICAvLyBSZXR1cm5zIGEgcHJvbWlzZS4KLSAgcmV0dXJuIFBsYXllclV0aWxzLmluaXRFTUVQbGF5ZXIodGhpcyk7Ci19OwotCi1XaWRldmluZVBsYXllci5wcm90b3R5cGUucmVnaXN0ZXJFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uKCkgewotICAvLyBSZXR1cm5zIGEgcHJvbWlzZS4KLSAgcmV0dXJuIFBsYXllclV0aWxzLnJlZ2lzdGVyRU1FRXZlbnRMaXN0ZW5lcnModGhpcyk7Ci19OwotCi1XaWRldmluZVBsYXllci5wcm90b3R5cGUub25NZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZSkgewotICBVdGlscy50aW1lTG9nKCdNZWRpYUtleVNlc3Npb24gb25NZXNzYWdlJywgbWVzc2FnZSk7Ci0gIHZhciBtZWRpYUtleVNlc3Npb24gPSBtZXNzYWdlLnRhcmdldDsKLSAgZnVuY3Rpb24gb25TdWNjZXNzKHJlc3BvbnNlKSB7Ci0gICAgdmFyIGtleSA9IG5ldyBVaW50OEFycmF5KHJlc3BvbnNlKTsKLSAgICBVdGlscy50aW1lTG9nKCdVcGRhdGUgbWVkaWEga2V5IHNlc3Npb24gd2l0aCBsaWNlbnNlIHJlc3BvbnNlLicsIGtleSk7Ci0gICAgbWVkaWFLZXlTZXNzaW9uLnVwZGF0ZShrZXkpCi0gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikgeyBVdGlscy5mYWlsVGVzdChlcnJvciwgRU1FX1VQREFURV9GQUlMRUQpOyB9KTsKLSAgfQotICBVdGlscy5zZW5kUmVxdWVzdCgnUE9TVCcsCi0gICAgICAgICAgICAgICAgICAgICdhcnJheWJ1ZmZlcicsCi0gICAgICAgICAgICAgICAgICAgIFV0aWxzLmNvbnZlcnRUb1VpbnQ4QXJyYXkobWVzc2FnZS5tZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXN0Q29uZmlnLmxpY2Vuc2VTZXJ2ZXJVUkwsCi0gICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXN0Q29uZmlnLmZvcmNlSW52YWxpZFJlc3BvbnNlKTsKLX07CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VuY3J5cHRlZF9mcmFtZV9zaXplX2NoYW5nZS5odG1sIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9lbmNyeXB0ZWRfZnJhbWVfc2l6ZV9jaGFuZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiZjBhZS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2VuY3J5cHRlZF9mcmFtZV9zaXplX2NoYW5nZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLSAgPGJvZHkgb25sb2FkPSJsb2FkKCkiPgotICAgIDxwPlRlc3RzIGRlY29kaW5nIGFuZCByZW5kZXJpbmcgZW5jcnlwdGVkIHZpZGVvIGVsZW1lbnQgdGhhdCBoYXMgYSBjaGFuZ2luZwotICAgICAgcmVzb2x1dGlvbi48L3A+Ci0gICAgPHZpZGVvIHdpZHRoPTMyMCBjb250cm9scz48L3ZpZGVvPgotICAgIDx2aWRlbyBjb250cm9scz48L3ZpZGVvPgotICAgIDxzY3JpcHQgc3JjPSdlbWVfcGxheWVyX2pzL2FwcF9sb2FkZXIuanMnIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdD4KLSAgICAgIHZhciBmaXJzdFZpZGVvU2VlayA9IGZhbHNlOwotICAgICAgdmFyIHZpZGVvX2ZpeGVkX3NpemUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlkZW8iKVswXTsKLSAgICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ2aWRlbyIpWzFdOwotICAgICAgdmFyIHRlc3RDb25maWc7Ci0KLSAgICAgIGZ1bmN0aW9uIGluaXRUZXN0Q29uZmlnKCkgewotICAgICAgICB0ZXN0Q29uZmlnID0gbmV3IFRlc3RDb25maWcoKTsKLSAgICAgICAgdGVzdENvbmZpZy5sb2FkUXVlcnlQYXJhbXMoKTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gbG9hZCgpIHsKLSAgICAgICAgaW5pdFRlc3RDb25maWcoKTsKLSAgICAgICAgbG9hZFZpZGVvKHZpZGVvX2ZpeGVkX3NpemUpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgbG9hZFZpZGVvKHZpZGVvKTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIGxvYWRWaWRlbyh2aWRlbykgewotICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB2aWRlbyBwbGF5cyBmb3IgYSBiaXQuCi0gICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKHZpZGVvLmN1cnJlbnRUaW1lID4gMS4wKSB7Ci0gICAgICAgICAgICAgIHZpZGVvLnBhdXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoIWZpcnN0VmlkZW9TZWVrKSB7Ci0gICAgICAgICAgICAgIFV0aWxzLnRpbWVMb2coJ09uZSB2aWRlbyBzZWVrZWQuJyk7Ci0gICAgICAgICAgICAgIGZpcnN0VmlkZW9TZWVrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVXRpbHMuc2V0UmVzdWx0SW5UaXRsZSgnRU5ERUQnKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDAuNTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsIG9uY2FucGxheSk7Ci0KLSAgICAgICAgdmFyIHZpZGVvUGxheWVyID0gUGxheWVyVXRpbHMuY3JlYXRlUGxheWVyKHZpZGVvLCB0ZXN0Q29uZmlnKTsKLSAgICAgICAgcmV0dXJuIHZpZGVvUGxheWVyLmluaXQoKQotICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7IHZpZGVvLnBsYXkoKTsgfSkKLSAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbigpIHsgVXRpbHMuZmFpbFRlc3QoJ1VuYWJsZSB0byBwbGF5IHZpZGVvLicpOyB9KTsKLSAgICAgIH0KLSAgICA8L3NjcmlwdD4KLSAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9mcmFtZV9zaXplX2NoYW5nZS1hdl9lbmMtdi53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9mcmFtZV9zaXplX2NoYW5nZS1hdl9lbmMtdi53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDBiZTU1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZnJhbWVfc2l6ZV9jaGFuZ2UtYXZfZW5jLXYud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZ3JlZW4tYTMwMGh6LndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2dyZWVuLWEzMDBoei53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWJjNDFiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvZ3JlZW4tYTMwMGh6LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2gyNjQtMzIweDE4MC1mcmFtZS0wIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9oMjY0LTMyMHgxODAtZnJhbWUtMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwZDFjMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2gyNjQtMzIweDE4MC1mcmFtZS0wCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9oMjY0LTMyMHgxODAtZnJhbWUtMSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaDI2NC0zMjB4MTgwLWZyYW1lLTEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNGI3MDIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9oMjY0LTMyMHgxODAtZnJhbWUtMQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaDI2NC0zMjB4MTgwLWZyYW1lLTIgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2gyNjQtMzIweDE4MC1mcmFtZS0yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDg1ZGMyLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaDI2NC0zMjB4MTgwLWZyYW1lLTIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2gyNjQtMzIweDE4MC1mcmFtZS0zIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9oMjY0LTMyMHgxODAtZnJhbWUtMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU3OGYyMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2gyNjQtMzIweDE4MC1mcmFtZS0zCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9pY3lfc2Z4Lm1wMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaWN5X3NmeC5tcDMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZmM1YTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9pY3lfc2Z4Lm1wMworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaWQzX3BuZ190ZXN0Lm1wMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaWQzX3BuZ190ZXN0Lm1wMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFlZmEyYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2lkM19wbmdfdGVzdC5tcDMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL2lkM190ZXN0Lm1wMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaWQzX3Rlc3QubXAzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGY0M2I5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvaWQzX3Rlc3QubXAzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9tZWRpYV9zb3VyY2VfcGxheWVyLmh0bWwgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21lZGlhX3NvdXJjZV9wbGF5ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE5OTA3Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21lZGlhX3NvdXJjZV9wbGF5ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci0gIDxoZWFkPgotICAgIDx0aXRsZT5NZWRpYSBTb3VyY2UgUGxheWVyPC90aXRsZT4KLSAgPC9oZWFkPgotICA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgotICAgIDx2aWRlbyBjb250cm9scz48L3ZpZGVvPgotICAgIDxzY3JpcHQgc3JjPSdlbWVfcGxheWVyX2pzL2FwcF9sb2FkZXIuanMnIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKTsKLQotICAgICAgZnVuY3Rpb24gb25UaW1lVXBkYXRlKCkgewotICAgICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgb25UaW1lVXBkYXRlKTsKLSAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSAgMC45ICogdmlkZW8uZHVyYXRpb247Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIG9uU2Vla2VkKCkgewotICAgICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdlbmRlZCcsIFV0aWxzLmZhaWxUZXN0KTsKLSAgICAgICAgVXRpbHMuaW5zdGFsbFRpdGxlRXZlbnRIYW5kbGVyKHZpZGVvLCAnZW5kZWQnKTsKLSAgICAgIH0KLQotICAgICAgLy8gRm9yIHRob3NlIHN0cmVhbXMgd2hvc2Ugc3RhcnQgdGltZSBpcyBncmVhdGVyIHRoYW4KLSAgICAgIC8vIGtTZWVrVG9TdGFydEZ1ZGdlUm9vbSBkZWZpbmVkIGluIHNvdXJjZV9idWZmZXJfc3RyZWFtLmNjLCB3ZQotICAgICAgLy8gbmVlZCB0byBza2lwIHRob3NlIHRpbWUgcmFuZ2UuIE90aGVyd2lzZSBpdCB3b24ndCBwbGF5Ci0gICAgICBmdW5jdGlvbiBvbkxvYWRlZE1ldGFEYXRhKCkgewotICAgICAgICB2YXIgYnVmID0gdmlkZW8uYnVmZmVyZWQ7Ci0gICAgICAgIGlmIChidWYubGVuZ3RoID4gMCkgewotICAgICAgICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gYnVmLnN0YXJ0KDApOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRoZSB0ZXN0IGNvbXBsZXRlcyBhZnRlciBtZWRpYSBzdGFydHMgcGxheWluZywgc2Vla3MgdG8gMC45IG9mCi0gICAgICAvLyBkdXJhdGlvbiBhbmQgZmlyZXMgdGhlIGVuZGVkIGV2ZW50LgotICAgICAgLy8gVGhlIHRlc3Qgc3RvcHMgd2hlbiBhbiBlcnJvciBvciBlbmRlZCBldmVudCBmaXJlIHVuZXhwZWN0ZWRseS4KLSAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgICAgIHZhciB0ZXN0Q29uZmlnID0gbmV3IFRlc3RDb25maWcoKTsKLSAgICAgICAgdGVzdENvbmZpZy5sb2FkUXVlcnlQYXJhbXMoKTsKLSAgICAgICAgVXRpbHMuaW5zdGFsbFRpdGxlRXZlbnRIYW5kbGVyKHZpZGVvLCAnZXJyb3InKTsKLSAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBVdGlscy5mYWlsVGVzdCk7Ci0gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3NlZWtlZCcsIG9uU2Vla2VkKTsKLSAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIG9uVGltZVVwZGF0ZSk7Ci0gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgb25Mb2FkZWRNZXRhRGF0YSk7Ci0gICAgICAgIHZhciBzb3VyY2UgPSBNZWRpYVNvdXJjZVV0aWxzLmxvYWRNZWRpYVNvdXJjZUZyb21UZXN0Q29uZmlnKHRlc3RDb25maWcpOwotICAgICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpOwotICAgICAgICB2aWRlby5wbGF5KCk7Ci0gICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvbWlkc3RyZWFtX2NvbmZpZ19jaGFuZ2UubXAzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9taWRzdHJlYW1fY29uZmlnX2NoYW5nZS5tcDMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZjVhNWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9taWRzdHJlYW1fY29uZmlnX2NoYW5nZS5tcDMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21zZV9jb25maWdfY2hhbmdlLmh0bWwgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21zZV9jb25maWdfY2hhbmdlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMzRiNjUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9tc2VfY29uZmlnX2NoYW5nZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLTxodG1sPgotICA8aGVhZD4KLSAgICA8dGl0bGU+VGVzdCBtZWRpYSBzb3VyY2UgY29uZmlnIGNoYW5nZXMuPC90aXRsZT4KLSAgPC9oZWFkPgotICA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgotICAgIDx2aWRlbyBjb250cm9scz48L3ZpZGVvPgotICAgIDxzY3JpcHQgc3JjPSdlbWVfcGxheWVyX2pzL2FwcF9sb2FkZXIuanMnIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgICAgdmFyIHRlc3RDb25maWc7Ci0KLSAgICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7Ci0gICAgICB2YXIgbWVkaWFUeXBlID0gJ3ZpZGVvL3dlYm07IGNvZGVjcz0idm9yYmlzLCB2cDgiJzsKLQotICAgICAgdmFyIENMRUFSX01FRElBXzEgPSAnYmVhci0zMjB4MjQwLndlYm0nOwotICAgICAgdmFyIENMRUFSX01FRElBXzIgPSAnYmVhci02NDB4MzYwLndlYm0nOwotICAgICAgdmFyIEVOQ1JZUFRFRF9NRURJQV8xID0gJ2JlYXItMzIweDI0MC1hdl9lbmMtYXYud2VibSc7Ci0gICAgICB2YXIgRU5DUllQVEVEX01FRElBXzIgPSAnYmVhci02NDB4MzYwLWF2X2VuYy1hdi53ZWJtJzsKLQotICAgICAgdmFyIE1FRElBXzFfV0lEVEggPSAzMjA7Ci0gICAgICB2YXIgTUVESUFfMV9IRUlHSFQgPSAyNDA7Ci0KLSAgICAgIHZhciBNRURJQV8yX1dJRFRIID0gNjQwOwotICAgICAgdmFyIE1FRElBXzJfSEVJR0hUID0gMzYwOwotICAgICAgdmFyIE1FRElBXzJfTEVOR1RIID0gMi43NTsKLQotICAgICAgLy8gVGhlIHRpbWUgaW4gc2VjcyB0byBhcHBlbmQgdGhlIHNlY29uZCBtZWRpYSBzb3VyY2UuCi0gICAgICB2YXIgQVBQRU5EX1RJTUUgPSAxOwotICAgICAgLy8gREVMVEEgaXMgdGhlIHRpbWUgYWZ0ZXIgQVBQRU5EX1RJTUUgd2hlcmUgdGhlIHNlY29uZCB2aWRlbyBkaW1lbnNpb25zCi0gICAgICAvLyBhcmUgZ3VhcmFudGVlZCB0byB0YWtlIGVmZmVjdC4KLSAgICAgIHZhciBERUxUQSA9IDAuMTsKLSAgICAgIC8vIEFwcGVuZCBNRURJQV8yIHNvdXJjZSBhdCBBUFBFTkRfVElNRSwgc28gZXhwZWN0ZWQgdG90YWwgZHVyYXRpb24gaXM6Ci0gICAgICB2YXIgVE9UQUxfRFVSQVRJT04gPSBBUFBFTkRfVElNRSArIE1FRElBXzJfTEVOR1RIOwotCi0gICAgICBmdW5jdGlvbiBpbml0VGVzdENvbmZpZygpIHsKLSAgICAgICAgdGVzdENvbmZpZyA9IG5ldyBUZXN0Q29uZmlnKCk7Ci0gICAgICAgIHRlc3RDb25maWcubG9hZFF1ZXJ5UGFyYW1zKCk7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIGFwcGVuZE5leHRTb3VyY2UobWVkaWFTb3VyY2UpIHsKLSAgICAgICAgY29uc29sZS5sb2coJ0FwcGVuZGluZyBuZXh0IG1lZGlhIHNvdXJjZSBhdCAnICsgQVBQRU5EX1RJTUUgKyAnc2VjLicpOwotICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgICAgIHZhciBtZWRpYUZpbGUgPQotICAgICAgICAgICAgKHRlc3RDb25maWcucnVuRW5jcnlwdGVkID09IDEpID8gRU5DUllQVEVEX01FRElBXzIgOiBDTEVBUl9NRURJQV8yOwotICAgICAgICB4aHIub3BlbigiR0VUIiwgbWVkaWFGaWxlKTsKLSAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7Ci0gICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oZSkgewotICAgICAgICAgIHZhciBvblVwZGF0ZUVuZCA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWNvbmQgYnVmZmVyIGFwcGVuZCBlbmRlZC4nKTsKLSAgICAgICAgICAgIHNyY0J1ZmZlci5yZW1vdmVFdmVudExpc3RlbmVyKCd1cGRhdGVlbmQnLCBvblVwZGF0ZUVuZCk7Ci0gICAgICAgICAgICBtZWRpYVNvdXJjZS5lbmRPZlN0cmVhbSgpOwotICAgICAgICAgICAgaWYgKCFtZWRpYVNvdXJjZS5kdXJhdGlvbiB8fAotICAgICAgICAgICAgICAgIE1hdGguYWJzKG1lZGlhU291cmNlLmR1cmF0aW9uIC0gVE9UQUxfRFVSQVRJT04pID4gREVMVEEpIHsKLSAgICAgICAgICAgICAgVXRpbHMuZmFpbFRlc3QoJ1VuZXhwZWN0ZWQgbWVkaWFTb3VyY2UuZHVyYXRpb24gPSAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFTb3VyY2UuZHVyYXRpb24gKyAnLCBleHBlY3RlZCBkdXJhdGlvbiA9ICcgKwotICAgICAgICAgICAgICAgICAgICAgICBUT1RBTF9EVVJBVElPTik7Ci0gICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpZGVvLnBsYXkoKTsKLSAgICAgICAgICB9OwotICAgICAgICAgIGNvbnNvbGUubG9nKCdBcHBlbmRpbmcgbmV4dCBtZWRpYSBzb3VyY2UgYXQgJyArIEFQUEVORF9USU1FICsgJ3NlYy4nKTsKLSAgICAgICAgICB2YXIgc3JjQnVmZmVyID0gbWVkaWFTb3VyY2Uuc291cmNlQnVmZmVyc1swXTsKLSAgICAgICAgICBzcmNCdWZmZXIuYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlZW5kJywgb25VcGRhdGVFbmQpOwotICAgICAgICAgIHNyY0J1ZmZlci50aW1lc3RhbXBPZmZzZXQgPSBBUFBFTkRfVElNRTsKLSAgICAgICAgICBzcmNCdWZmZXIuYXBwZW5kQnVmZmVyKG5ldyBVaW50OEFycmF5KGUudGFyZ2V0LnJlc3BvbnNlKSk7Ci0gICAgICAgIH0pOwotICAgICAgICB4aHIuc2VuZCgpOwotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBvblRpbWVVcGRhdGUoKSB7Ci0gICAgICAgIC8vIGNyYnVnLmNvbS8yNDYzMDgKLSAgICAgICAgLy9jaGVja1ZpZGVvUHJvcGVydGllcygpOwotCi0gICAgICAgIC8vIFNlZWsgdG8gQVBQRU5EX1RJTUUgYmVjYXVzZSBhZnRlciBhIHNlZWsgYSB0aW1lVXBkYXRlIGV2ZW50IGlzIGZpcmVkCi0gICAgICAgIC8vIGJlZm9yZSB2aWRlbyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXMgZ2V0IHVwZGF0ZWQuCi0gICAgICAgIGlmICh2aWRlby5jdXJyZW50VGltZSA8IEFQUEVORF9USU1FIC0gREVMVEEpIHsKLSAgICAgICAgICAvLyBTZWVrIHRvIHNhdmUgdGVzdCBleGVjdXRpb24gdGltZSAoYWJvdXQgMSBzZWNzKSBhbmQgdG8gdGVzdCBzZWVrCi0gICAgICAgICAgLy8gb24gdGhlIGZpcnN0IGJ1ZmZlci4KLSAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IEFQUEVORF9USU1FIC0gREVMVEE7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlkZW8uY3VycmVudFRpbWUgPiBBUFBFTkRfVElNRSArIERFTFRBKSB7Ci0gICAgICAgICAgLy8gQ2hlY2sgdmlkZW8gZHVyYXRpb24gaGVyZSB0byBndWFyYW50ZWUgdGhhdCBzZWNvbmQgc2VnbWVudCBoYXMgYmVlbgotICAgICAgICAgIC8vIGFwcGVuZGVkIGFuZCB2aWRlbyB0b3RhbCBkdXJhdGlvbiBpcyB1cGRhdGVkLgotICAgICAgICAgIC8vIFZpZGVvIGR1cmF0aW9uIGlzIGEgZmxvYXQgdmFsdWUgc28gd2UgY2hlY2sgaXQgd2l0aGluIGEgcmFuZ2UuCi0gICAgICAgICAgaWYgKCF2aWRlby5kdXJhdGlvbiB8fAotICAgICAgICAgICAgICBNYXRoLmFicyh2aWRlby5kdXJhdGlvbiAtIFRPVEFMX0RVUkFUSU9OKSA+IERFTFRBKSB7Ci0gICAgICAgICAgICBVdGlscy5mYWlsVGVzdCgnVW5leHBlY3RlZCB2aWRlby5kdXJhdGlvbiA9ICcgKyB2aWRlby5kdXJhdGlvbiArCi0gICAgICAgICAgICAgICAgICAgICAnLCBleHBlY3RlZCBkdXJhdGlvbiA9ICcgKyBUT1RBTF9EVVJBVElPTik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIG9uVGltZVVwZGF0ZSk7Ci0gICAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBVdGlscy5mYWlsVGVzdCk7Ci0gICAgICAgICAgVXRpbHMuaW5zdGFsbFRpdGxlRXZlbnRIYW5kbGVyKHZpZGVvLCAnZW5kZWQnKTsKLSAgICAgICAgICAvLyBTZWVrIHRvIHNhdmUgdGVzdCBleGVjdXRpb24gdGltZSBhbmQgdG8gdGVzdCBzZWVrIG9uIHNlY29uZCBidWZmZXIuCi0gICAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSBBUFBFTkRfVElNRSArIE1FRElBXzJfTEVOR1RIICogMC45OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIGNoZWNrVmlkZW9Qcm9wZXJ0aWVzKCkgewotICAgICAgICBpZiAodmlkZW8uY3VycmVudFRpbWUgPD0gQVBQRU5EX1RJTUUpIHsKLSAgICAgICAgICBpZiAodmlkZW8udmlkZW9XaWR0aCAhPSBNRURJQV8xX1dJRFRIIHx8Ci0gICAgICAgICAgICAgIHZpZGVvLnZpZGVvSGVpZ2h0ICE9IE1FRElBXzFfSEVJR0hUKSB7Ci0gICAgICAgICAgICBsb2dWaWRlb0RpbWVuc2lvbnMoKTsKLSAgICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KCdVbmV4cGVjdGVkIGRpbWVuc2lvbnMgZm9yIGZpcnN0IHZpZGVvIHNlZ21lbnQuJyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZpZGVvLmN1cnJlbnRUaW1lID49IEFQUEVORF9USU1FICsgREVMVEEpIHsKLSAgICAgICAgICBpZiAodmlkZW8udmlkZW9XaWR0aCAhPSBNRURJQV8yX1dJRFRIIHx8Ci0gICAgICAgICAgICAgIHZpZGVvLnZpZGVvSGVpZ2h0ICE9IE1FRElBXzJfSEVJR0hUKSB7Ci0gICAgICAgICAgICBsb2dWaWRlb0RpbWVuc2lvbnMoKTsKLSAgICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KCdVbmV4cGVjdGVkIGRpbWVuc2lvbnMgZm9yIHNlY29uZCB2aWRlbyBzZWdtZW50LicpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBsb2dWaWRlb0RpbWVuc2lvbnMoKSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCd2aWRlby5jdXJyZW50VGltZSA9ICcgKyB2aWRlby5jdXJyZW50VGltZSArCi0gICAgICAgICAgICAgICAgICAgICcsIHZpZGVvIGRpbWVuc2lvbnMgPSAnICsgdmlkZW8udmlkZW9XaWR0aCArICd4JyArCi0gICAgICAgICAgICAgICAgICAgIHZpZGVvLnZpZGVvSGVpZ2h0ICsgJy4nKTsKLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKLSAgICAgICAgaW5pdFRlc3RDb25maWcoKTsKLSAgICAgICAgdGVzdENvbmZpZy5tZWRpYUZpbGUgPQotICAgICAgICAgICAgKHRlc3RDb25maWcucnVuRW5jcnlwdGVkID09IDEpID8gRU5DUllQVEVEX01FRElBXzEgOiBDTEVBUl9NRURJQV8xOwotICAgICAgICB0ZXN0Q29uZmlnLm1lZGlhVHlwZSA9IG1lZGlhVHlwZTsKLSAgICAgICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIG9uVGltZVVwZGF0ZSk7Ci0gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgVXRpbHMuZmFpbFRlc3QpOwotICAgICAgICB2YXIgbWVkaWFTb3VyY2UgPSBNZWRpYVNvdXJjZVV0aWxzLmxvYWRNZWRpYVNvdXJjZUZyb21UZXN0Q29uZmlnKAotICAgICAgICAgICAgdGVzdENvbmZpZywgYXBwZW5kTmV4dFNvdXJjZSk7Ci0gICAgICAgIGlmICh0ZXN0Q29uZmlnLnJ1bkVuY3J5cHRlZCA9PSAxKSB7Ci0gICAgICAgICAgdmFyIGVtZVBsYXllciA9IFBsYXllclV0aWxzLmNyZWF0ZVBsYXllcih2aWRlbywgdGVzdENvbmZpZyk7Ci0gICAgICAgICAgZW1lUGxheWVyLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKQotICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihwbGF5ZXIpIHsKLSAgICAgICAgICAgICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChtZWRpYVNvdXJjZSk7Ci0gICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KCdVbmFibGUgdG8gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLicpOwotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChtZWRpYVNvdXJjZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIDwvc2NyaXB0PgotICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21zZV9kaWZmZXJlbnRfY29udGFpbmVycy5odG1sIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9tc2VfZGlmZmVyZW50X2NvbnRhaW5lcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU5YzhhMy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL21zZV9kaWZmZXJlbnRfY29udGFpbmVycy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTxodG1sPgotICA8aGVhZD4KLSAgICA8dGl0bGU+VGVzdCBtZWRpYSBzb3VyY2UgcGxheWJhY2sgd2l0aCBkaWZmZXJlbnQgY29udGFpbmVycy48L3RpdGxlPgotICA8L2hlYWQ+Ci0gIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+Ci0gICAgPHZpZGVvPjwvdmlkZW8+Ci0gICAgPHNjcmlwdCBzcmM9J2VtZV9wbGF5ZXJfanMvYXBwX2xvYWRlci5qcycgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0gICAgICAvLyBTcGVjaWZ5IHBvc3NpYmxlIGNvbnRlbnQgZm9yIGNsZWFyIGFuZCBlbmNyeXB0ZWQgc3RyZWFtcyBpbiBib3RoIE1QNAotICAgICAgLy8gYW5kIFdFQk0gZm9ybWF0LiBGb3IgdGVzdGluZyB3ZSBkb24ndCBjYXJlIGlmIHRoZSBhdWRpbyBtYXRjaGVzIHRoZQotICAgICAgLy8gdmlkZW8gb3IgaWYgdGhlIGxlbmd0aCBvZiBlYWNoIGNvbnRhaW5lciBpcyB0aGUgc2FtZS4KLSAgICAgIHZhciBWSURFT19NUDRfTUVESUFfVFlQRSA9ICd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40RDQwNDEiJzsKLSAgICAgIHZhciBWSURFT19XRUJNX01FRElBX1RZUEUgPSAndmlkZW8vd2VibTsgY29kZWNzPSJ2cDgiJzsKLSAgICAgIHZhciBWSURFT19NUDRfQ0xFQVJfRklMRSA9ICdiZWFyLTY0MHgzNjAtdl9mcmFnLm1wNCc7Ci0gICAgICB2YXIgVklERU9fV0VCTV9DTEVBUl9GSUxFID0gJ2JlYXItMzIweDI0MC12aWRlby1vbmx5LndlYm0nOwotICAgICAgdmFyIFZJREVPX01QNF9FTkNSWVBURURfRklMRSA9ICdiZWFyLTY0MHgzNjAtdl9mcmFnLWNlbmMubXA0JzsKLSAgICAgIHZhciBWSURFT19XRUJNX0VOQ1JZUFRFRF9GSUxFID0gJ2JlYXItMzIweDI0MC12X2VuYy12LndlYm0nOwotCi0gICAgICB2YXIgQVVESU9fTVA0X01FRElBX1RZUEUgPSAnYXVkaW8vbXA0OyBjb2RlY3M9Im1wNGEuNDAuMiInOwotICAgICAgdmFyIEFVRElPX1dFQk1fTUVESUFfVFlQRSA9ICdhdWRpby93ZWJtOyBjb2RlY3M9InZvcmJpcyInOwotICAgICAgdmFyIEFVRElPX01QNF9DTEVBUl9GSUxFID0gJ2JlYXItNjQweDM2MC1hX2ZyYWcubXA0JzsKLSAgICAgIHZhciBBVURJT19XRUJNX0NMRUFSX0ZJTEUgPSAnYmVhci0zMjB4MjQwLWF1ZGlvLW9ubHkud2VibSc7Ci0gICAgICB2YXIgQVVESU9fTVA0X0VOQ1JZUFRFRF9GSUxFID0gJ2JlYXItNjQweDM2MC1hX2ZyYWctY2VuYy5tcDQnOwotICAgICAgdmFyIEFVRElPX1dFQk1fRU5DUllQVEVEX0ZJTEUgPSAnYmVhci1hX2VuYy1hLndlYm0nOwotCi0gICAgICB2YXIgbWVkaWFfdHlwZXMgPSBbXTsKLSAgICAgIHZhciBtZWRpYV9maWxlcyA9IFtdOwotCi0gICAgICAvLyBUaGUgdGltZSBpbiBzZWNzIHRvIHBsYXkgdGhlIHN0cmVhbXMuCi0gICAgICB2YXIgUExBWV9USU1FX1NFQyA9IDAuMTsKLQotICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8nKTsKLQotICAgICAgZnVuY3Rpb24gb25UaW1lVXBkYXRlKCkgewotICAgICAgICBpZiAodmlkZW8uY3VycmVudFRpbWUgPCBQTEFZX1RJTUVfU0VDKQotICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgb25UaW1lVXBkYXRlKTsKLSAgICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBVdGlscy5mYWlsVGVzdCk7Ci0gICAgICAgIFV0aWxzLmluc3RhbGxUaXRsZUV2ZW50SGFuZGxlcih2aWRlbywgJ2VuZGVkJyk7Ci0KLSAgICAgICAgLy8gU2VlayB0byBlbmQgdG8gc2F2ZSB0ZXN0IGV4ZWN1dGlvbiB0aW1lLgotICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDEwMDA7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIGFkZFZpZGVvU3RyZWFtKGZvcm1hdCkgewotICAgICAgICBpZiAoZm9ybWF0ID09ICdDTEVBUl9NUDQnKSB7Ci0gICAgICAgICAgbWVkaWFfdHlwZXMgPSBtZWRpYV90eXBlcy5jb25jYXQoVklERU9fTVA0X01FRElBX1RZUEUpOwotICAgICAgICAgIG1lZGlhX2ZpbGVzID0gbWVkaWFfZmlsZXMuY29uY2F0KFZJREVPX01QNF9DTEVBUl9GSUxFKTsKLSAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gJ0NMRUFSX1dFQk0nKSB7Ci0gICAgICAgICAgbWVkaWFfdHlwZXMgPSBtZWRpYV90eXBlcy5jb25jYXQoVklERU9fV0VCTV9NRURJQV9UWVBFKTsKLSAgICAgICAgICBtZWRpYV9maWxlcyA9IG1lZGlhX2ZpbGVzLmNvbmNhdChWSURFT19XRUJNX0NMRUFSX0ZJTEUpOwotICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAnRU5DUllQVEVEX01QNCcpIHsKLSAgICAgICAgICBtZWRpYV90eXBlcyA9IG1lZGlhX3R5cGVzLmNvbmNhdChWSURFT19NUDRfTUVESUFfVFlQRSk7Ci0gICAgICAgICAgbWVkaWFfZmlsZXMgPSBtZWRpYV9maWxlcy5jb25jYXQoVklERU9fTVA0X0VOQ1JZUFRFRF9GSUxFKTsKLSAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gJ0VOQ1JZUFRFRF9XRUJNJykgewotICAgICAgICAgIG1lZGlhX3R5cGVzID0gbWVkaWFfdHlwZXMuY29uY2F0KFZJREVPX1dFQk1fTUVESUFfVFlQRSk7Ci0gICAgICAgICAgbWVkaWFfZmlsZXMgPSBtZWRpYV9maWxlcy5jb25jYXQoVklERU9fV0VCTV9FTkNSWVBURURfRklMRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgVXRpbHMuZmFpbFRlc3QoJ1VucmVjb2duaXplZCB2aWRlbyB0eXBlLicpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIGFkZEF1ZGlvU3RyZWFtKGZvcm1hdCkgewotICAgICAgICBpZiAoZm9ybWF0ID09ICdDTEVBUl9NUDQnKSB7Ci0gICAgICAgICAgbWVkaWFfdHlwZXMgPSBtZWRpYV90eXBlcy5jb25jYXQoQVVESU9fTVA0X01FRElBX1RZUEUpOwotICAgICAgICAgIG1lZGlhX2ZpbGVzID0gbWVkaWFfZmlsZXMuY29uY2F0KEFVRElPX01QNF9DTEVBUl9GSUxFKTsKLSAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gJ0NMRUFSX1dFQk0nKSB7Ci0gICAgICAgICAgbWVkaWFfdHlwZXMgPSBtZWRpYV90eXBlcy5jb25jYXQoQVVESU9fV0VCTV9NRURJQV9UWVBFKTsKLSAgICAgICAgICBtZWRpYV9maWxlcyA9IG1lZGlhX2ZpbGVzLmNvbmNhdChBVURJT19XRUJNX0NMRUFSX0ZJTEUpOwotICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSAnRU5DUllQVEVEX01QNCcpIHsKLSAgICAgICAgICBtZWRpYV90eXBlcyA9IG1lZGlhX3R5cGVzLmNvbmNhdChBVURJT19NUDRfTUVESUFfVFlQRSk7Ci0gICAgICAgICAgbWVkaWFfZmlsZXMgPSBtZWRpYV9maWxlcy5jb25jYXQoQVVESU9fTVA0X0VOQ1JZUFRFRF9GSUxFKTsKLSAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gJ0VOQ1JZUFRFRF9XRUJNJykgewotICAgICAgICAgIG1lZGlhX3R5cGVzID0gbWVkaWFfdHlwZXMuY29uY2F0KEFVRElPX1dFQk1fTUVESUFfVFlQRSk7Ci0gICAgICAgICAgbWVkaWFfZmlsZXMgPSBtZWRpYV9maWxlcy5jb25jYXQoQVVESU9fV0VCTV9FTkNSWVBURURfRklMRSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgVXRpbHMuZmFpbFRlc3QoJ1VucmVjb2duaXplZCBhdWRpbyB0eXBlLicpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCBvblRpbWVVcGRhdGUpOwotICAgICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIFV0aWxzLmZhaWxUZXN0KTsKLQotICAgICAgICB2YXIgdGVzdENvbmZpZyA9IG5ldyBUZXN0Q29uZmlnKCk7Ci0gICAgICAgIHRlc3RDb25maWcubG9hZFF1ZXJ5UGFyYW1zKCk7Ci0gICAgICAgIGFkZFZpZGVvU3RyZWFtKHRlc3RDb25maWcudmlkZW9Gb3JtYXQpOwotICAgICAgICBhZGRBdWRpb1N0cmVhbSh0ZXN0Q29uZmlnLmF1ZGlvRm9ybWF0KTsKLQotICAgICAgICB2YXIgbWVkaWFTb3VyY2UgPQotICAgICAgICAgICAgTWVkaWFTb3VyY2VVdGlscy5sb2FkTWVkaWFTb3VyY2UobWVkaWFfZmlsZXMsIG1lZGlhX3R5cGVzKTsKLQotICAgICAgICBpZiAodGVzdENvbmZpZy5ydW5FbmNyeXB0ZWQgPiAwKSB7Ci0gICAgICAgICAgdmFyIGVtZVBsYXllciA9IFBsYXllclV0aWxzLmNyZWF0ZVBsYXllcih2aWRlbywgdGVzdENvbmZpZyk7Ci0gICAgICAgICAgZW1lUGxheWVyLnJlZ2lzdGVyRXZlbnRMaXN0ZW5lcnMoKQotICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihwbGF5ZXIpIHsKLSAgICAgICAgICAgICAgICB2aWRlby5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChtZWRpYVNvdXJjZSk7Ci0gICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICAgIFV0aWxzLmZhaWxUZXN0KCdVbmFibGUgdG8gcmVnaXN0ZXIgRU1FIGV2ZW50IGxpc3RlbmVycy4nKTsKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmlkZW8uc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobWVkaWFTb3VyY2UpOwotICAgICAgICB9Ci0gICAgICAgIHZpZGVvLnBsYXkoKTsKLSAgICAgIH0KLSAgICAgIDwvc2NyaXB0PgotICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL211bHRpdHJhY2stM3ZpZGVvLTJhdWRpby53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9tdWx0aXRyYWNrLTN2aWRlby0yYXVkaW8ud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDczZGI4OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL211bHRpdHJhY2stM3ZpZGVvLTJhdWRpby53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ub19hdWRpb192aWRlby53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ub19hdWRpb192aWRlby53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjRjMDkxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvbm9fYXVkaW9fdmlkZW8ud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvbm9fc3RyZWFtcy53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ub19zdHJlYW1zLndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwYmMzZTguLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ub19zdHJlYW1zLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL25vbnplcm8tc3RhcnQtdGltZS53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ub256ZXJvLXN0YXJ0LXRpbWUud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyOWJjOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL25vbnplcm8tc3RhcnQtdGltZS53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9ucG90LXZpZGVvLmgyNjQgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL25wb3QtdmlkZW8uaDI2NApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlOWZhNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL25wb3QtdmlkZW8uaDI2NAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvbnBvdC12aWRlby5oMjY0Lm1kNSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvbnBvdC12aWRlby5oMjY0Lm1kNQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkYTllOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL25wb3QtdmlkZW8uaDI2NC5tZDUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMgLS10ZXN0X3ZpZGVvX2RhdGE9Im5wb3QtdmlkZW8uaDI2NDozMDA6MTc2OjkwMTo5Nzg6MzU6MTUwOjEiCi0jIEludGVsIC0gSXZ5IEJyaWRnZQotZjhjMGYxM2UzMGQxZjFiNjMxNmQ0ZmE1OTkxM2ZmMDcKLSMgSW50ZWwgLSBTYW5keSBCcmlkZ2UKLTRiNzExOGIwZTczY2ViNzg5ZDIzMTg5OWUyZjFlMzgwCi0jIEFSTSAtIEV4eW5vcwotYWU4NTcwNzNiY2E2Mzk0MTMyYTNhZjZhYWZjZWE5ZjYKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvb3B1cy10cmltbWluZy10ZXN0Lm9nZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvb3B1cy10cmltbWluZy10ZXN0Lm9nZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZlOWU3OC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL29wdXMtdHJpbW1pbmctdGVzdC5vZ2cKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL29wdXMtdHJpbW1pbmctdGVzdC53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9vcHVzLXRyaW1taW5nLXRlc3Qud2VibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI1MzFiMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL29wdXMtdHJpbW1pbmctdGVzdC53ZWJtCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9vcHVzLXRyaW1taW5nLXZpZGVvLXRlc3Qud2VibSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvb3B1cy10cmltbWluZy12aWRlby10ZXN0LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NGZjMTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9vcHVzLXRyaW1taW5nLXZpZGVvLXRlc3Qud2VibQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvcGVhY2hfcGktMTI4MHg3MjAuanBnIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9wZWFjaF9waS0xMjgweDcyMC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmY4OGMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9wZWFjaF9waS0xMjgweDcyMC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3BpeGVsLTEyODB4NzIwLmpwZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvcGl4ZWwtMTI4MHg3MjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNjNzMzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvcGl4ZWwtMTI4MHg3MjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9wbGF5ZXIuaHRtbCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvcGxheWVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExZjQ2MzkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9wbGF5ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi08aHRtbD4KLTxib2R5IG9ubG9hZD0iUnVuVGVzdCgpOyI+Ci08ZGl2IGlkPSJwbGF5ZXJfY29udGFpbmVyIj48L2Rpdj4KLTwvYm9keT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotLy8gPGF1ZGlvPiBvciA8dmlkZW8+IHBsYXllciBlbGVtZW50LgotdmFyIHBsYXllcjsKLQotLy8gTGlzdGVuIGZvciB8ZXZlbnR8IGZyb20gfGVsZW1lbnR8LCBzZXQgZG9jdW1lbnQudGl0bGUgPSB8ZXZlbnR8IHVwb24gZXZlbnQuCi1mdW5jdGlvbiBJbnN0YWxsVGl0bGVFdmVudEhhbmRsZXIoZWxlbWVudCwgZXZlbnQpIHsKLSAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmdW5jdGlvbihlKSB7Ci0gICAgZG9jdW1lbnQudGl0bGUgPSBldmVudC50b1VwcGVyQ2FzZSgpOwotICB9LCBmYWxzZSk7Ci19Ci0KLWZ1bmN0aW9uIEZhaWxlZCgpIHsKLSAgZG9jdW1lbnQudGl0bGUgPSAnRkFJTEVEJzsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBTZWVrVGVzdFN0ZXAoZSkgewotICBwbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBTZWVrVGVzdFN0ZXAsIGZhbHNlKTsKLQotICAvLyBUZXN0IGNvbXBsZXRlcyBvbiB0aGUgbmV4dCBlbmRlZCBldmVudC4KLSAgSW5zdGFsbFRpdGxlRXZlbnRIYW5kbGVyKHBsYXllciwgJ2VuZGVkJyk7Ci0KLSAgcGxheWVyLmN1cnJlbnRUaW1lID0gMC45ICogcGxheWVyLmR1cmF0aW9uOwotICBwbGF5ZXIucGxheSgpOwotfQotCi1mdW5jdGlvbiBTZWVrVGVzdFRpbWVvdXRTZXR1cCgpIHsKLSAgaWYgKHBsYXllci5jdXJyZW50VGltZSA8IDIpCi0gICAgcmV0dXJuOwotCi0gIHBsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgU2Vla1Rlc3RUaW1lb3V0U2V0dXAsIGZhbHNlKTsKLSAgU2Vla1Rlc3RTdGVwKCk7Ci19Ci0KLS8vIFVzZXMgVVJMIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gY3JlYXRlIGFuIGF1ZGlvIG9yIHZpZGVvIGVsZW1lbnQgdXNpbmcgYSBnaXZlbgotLy8gc291cmNlLiAgVVJMIG11c3QgYmUgb2YgdGhlIGZvcm06Ci0vLyAicGxheWVyLmh0bWw/W3RhZ109W21lZGlhX3VybF1bJmxvb3A9W3RydWUvZmFsc2VdXSIuCi0vLwotLy8gUGxheXMgdGhlIG1lZGlhIGFuZCB3YWl0cyBmb3IgWCBzZWNvbmRzIG9mIHBsYXliYWNrIG9yIHRoZSBlbmRlZCBldmVudCwgYXQKLS8vIHdoaWNoIHBvaW50IHRoZSB0ZXN0IHNlZWtzIG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgcmVzdW1lcyBwbGF5YmFjay4KLS8vIFRlc3QgY29tcGxldGVzIHdoZW4gdGhlIHNlY29uZCBlbmRlZCBldmVudCBvY2N1cnMgb3IgYW4gZXJyb3IgZXZlbnQgb2NjdXJzIGF0Ci0vLyBhbnkgdGltZS4KLS8vIFRoZXJlIGlzIGFuIG9wdGlvbmFsIGxvb3AgcXVlcnkgcGFyYW1ldGVyIHdoaWNoIHdoZW4gc2V0IHRvIHRydWUsIHdpbGwgY2F1c2UKLS8vIHRoZSBjcmVhdGVkIG1lZGlhIGVsZW1lbnQgdG8gbG9vcC4KLWZ1bmN0aW9uIFJ1blRlc3QoKSB7Ci0gIHZhciB1cmxfcGFydHMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpOwotICBpZiAodXJsX3BhcnRzLmxlbmd0aCAhPSAyKQotICAgIHJldHVybiBGYWlsZWQoKTsKLQotICB2YXIgdGFnID0gJyc7Ci0gIHZhciBtZWRpYV91cmwgPSAnJzsKLSAgdmFyIGxvb3AgPSBmYWxzZTsKLQotICB2YXIgcXVlcnlfcGFyYW1zID0gdXJsX3BhcnRzWzFdLnNwbGl0KCcmJyk7Ci0gIGZvciAodmFyIHF1ZXJ5X3BhcmFtIGluIHF1ZXJ5X3BhcmFtcykgewotICAgIHZhciBxdWVyeV9wYXJ0cyA9IHF1ZXJ5X3BhcmFtc1txdWVyeV9wYXJhbV0uc3BsaXQoJz0nKTsKLSAgICBpZiAocXVlcnlfcGFydHMubGVuZ3RoICE9IDIpIHsKLSAgICAgIHJldHVybiBGYWlsZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnlfcGFydHNbMF0gPT0gJ2F1ZGlvJyB8fCBxdWVyeV9wYXJ0c1swXSA9PSAndmlkZW8nKSB7Ci0gICAgICB0YWcgPSBxdWVyeV9wYXJ0c1swXTsKLSAgICAgIG1lZGlhX3VybCA9IHF1ZXJ5X3BhcnRzWzFdOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgaWYgKHF1ZXJ5X3BhcnRzWzBdID09ICdsb29wJykgewotICAgICAgbG9vcCA9IChxdWVyeV9wYXJ0c1sxXSA9PSAndHJ1ZScpOwotICAgICAgY29udGludWU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHRhZyAhPSAnYXVkaW8nICYmIHRhZyAhPSAndmlkZW8nKSB7Ci0gICAgcmV0dXJuIEZhaWxlZCgpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIHBsYXllciBhbmQgaW5zZXJ0IGludG8gRE9NLgotICBwbGF5ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7Ci0gIHBsYXllci5jb250cm9scyA9IHRydWU7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXJfY29udGFpbmVyJykuYXBwZW5kQ2hpbGQocGxheWVyKTsKLQotICBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbihlKSB7Ci0gICAgZG9jdW1lbnQudGl0bGUgPSAnJyArIHBsYXllci52aWRlb1dpZHRoICsgJyAnICsgcGxheWVyLnZpZGVvSGVpZ2h0OwotICB9KTsKLQotICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBzZWVrIHRlc3QgYWZ0ZXIgWCBzZWNvbmRzIG9mIHBsYXliYWNrIG9yIHdoZW4gdGhlIGVuZGVkCi0gIC8vIGV2ZW50IG9jY3Vycywgd2hpY2hldmVyIGhhcHBlbnMgZmlyc3QuCi0gIHBsYXllci5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIFNlZWtUZXN0U3RlcCwgZmFsc2UpOwotICBwbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIFNlZWtUZXN0VGltZW91dFNldHVwLCBmYWxzZSk7Ci0KLSAgLy8gRW5zdXJlIHdlIHBlcmNvbGF0ZSB1cCBhbnkgZXJyb3IgZXZlbnRzLgotICBJbnN0YWxsVGl0bGVFdmVudEhhbmRsZXIocGxheWVyLCAnZXJyb3InKTsKLQotICAvLyBTdGFydHMgdGhlIHBsYXllci4KLSAgcGxheWVyLmxvb3AgPSBsb29wOwotICBwbGF5ZXIuc3JjID0gbWVkaWFfdXJsOwotICBwbGF5ZXIucGxheSgpOwotfQotPC9zY3JpcHQ+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JhcGlkX3ZpZGVvX2NoYW5nZV90ZXN0Lmh0bWwgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JhcGlkX3ZpZGVvX2NoYW5nZV90ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYTg1M2IuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9yYXBpZF92aWRlb19jaGFuZ2VfdGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLSAgPGhlYWQ+Ci0gICAgPHRpdGxlPkhUTUwgNSBDaGFuZ2UgSC4yNjQgVmlkZW8gVGVzdDwvdGl0bGU+Ci0gICAgPHNjcmlwdD4KLSAgICAgIHZhciBjaGFuZ2VWaWRlb0ludGVydmFsOwotICAgICAgdmFyIGNoYW5nZVZpZGVvQ291bnRlciA9IDA7Ci0KLSAgICAgIGZ1bmN0aW9uIGNoYW5nZVZpZGVvKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIGlmIChjaGFuZ2VWaWRlb0NvdW50ZXIgPT0gNDApIHsKLSAgICAgICAgICAgIGFsZXJ0KCc0MCB2aWRlbyBjaGFuZ2VzIGRvbmUuIFRlc3Qgb3ZlcicpOwotICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoY2hhbmdlVmlkZW9JbnRlcnZhbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlbycpOwotICAgICAgICAgIHZpZGVvLnBhdXNlKCk7Ci0gICAgICAgICAgdmlkZW8uc3JjID0gJ2JlYXItMTI4MHg3MjAubXA0P2NvdW50ZXI9JyArCi0gICAgICAgICAgICAgIGNoYW5nZVZpZGVvQ291bnRlci50b1N0cmluZygpOwotICAgICAgICAgICsrY2hhbmdlVmlkZW9Db3VudGVyOwotICAgICAgICAgIHZpZGVvLnBsYXkoKTsKLSAgICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXRjaCAoZSkgewotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIG9uTG9hZCgpIHsKLSAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZpZGVvJyk7Ci0gICAgICAgIHZpZGVvLnBsYXkoKTsKLSAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSAxOwotICAgICAgICBjaGFuZ2VWaWRlb0ludGVydmFsID0gc2V0SW50ZXJ2YWwoY2hhbmdlVmlkZW8sIDIwMCk7Ci0gICAgICB9Ci0gICAgPC9zY3JpcHQ+Ci0gIDwvaGVhZD4KLSAgCi0gIDxib2R5IG9ubG9hZD0nb25Mb2FkKCk7Jz4gPGI+IFRoaXMgdGVzdCB0ZXN0cyB0aGUgY2FzZSB3aGVyZSBpbiBILjI2NCBIL1cKLSAgIGRlY29kZWQgdmlkZW9zIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCBhIG51bWJlciBvZiB0aW1lcyBmcm9tIHRoZSBwYWdlLAotICAgd2hpbGUgdGhleSBhcmUgcGxheWluZy4gPGJyPiBUaGlzIHNob3VsZCBub3QgY2F1c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KLSAgIDxkaXYgaWQ9J3ZpZGVvRGl2Jz4KLSAgICAgPHZpZGVvIGlkPSd2aWRlbycgd2lkdGg9MzIwIGhlaWdodD0yNDAgc3JjPSdiZWFyLTEyODB4NzIwLm1wNCcKLSAgICAgICBjb250cm9scz0nY29udHJvbHMnPgotICAgICA8L3ZpZGVvPgotICAgPC9kaXY+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvcmVkLWE1MDBoei53ZWJtIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9yZWQtYTUwMGh6LndlYm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NjMxN2MuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9yZWQtYTUwMGh6LndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JlZC1ncmVlbi5oMjY0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9yZWQtZ3JlZW4uaDI2NApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ3MWViYS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JlZC1ncmVlbi5oMjY0CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9yZWQtZ3JlZW4uaDI2NC5tZDUgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JlZC1ncmVlbi5oMjY0Lm1kNQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQzMjlhNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3JlZC1ncmVlbi5oMjY0Lm1kNQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyAtLXRlc3RfdmlkZW9fZGF0YT0icmVkLWdyZWVuLmgyNjQ6ODA6MTI4OjE1MDoxNTY6MzU6MTUwOjEiCi0jIEludGVsIC0gSXZ5IEJyaWRnZQotMTk3MjQyMjdlNzg3OGM1MDMzOGVkNGExZDQyNjQzYWYKLSMgSW50ZWwgLSBTYW5keSBCcmlkZ2UKLTYzZGJkMjQ1MWQwMGRiN2Q5MmMyZTQ2Y2FhNzM5YjJmCi0jIEFSTSAtIEV4eW5vcwotNjM1ZDQ2MGE0NzMzYjY5MmQ3ZWJjODdkN2RhNzllNTEKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LW9wdXMtNDQxLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC1vcHVzLTQ0MS53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmVhYmNlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LW9wdXMtNDQxLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC1vcHVzLm9nZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LW9wdXMub2dnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTg4NGE5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LW9wdXMub2dnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnguYWR0cyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LmFkdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4OGRkZjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnguYWR0cworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LmZsYWMgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC5mbGFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2U0ZWRlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4LmZsYWMKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC5tNGEgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC5tNGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYzQ2MjEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZngubTRhCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZngubXAzIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZngubXAzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWViMmYzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4Lm1wMworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4Lm9nZyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4Lm9nZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU2OWM4Zi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeC5vZ2cKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeF9mMzJsZS53YXYgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeF9mMzJsZS53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZWE2YTEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfZjMybGUud2F2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfczE2bGUud2F2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfczE2bGUud2F2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGJjOTVmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4X3MxNmxlLndhdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4X3MyNGxlLndhdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4X3MyNGxlLndhdgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkNWQ0Ni4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeF9zMjRsZS53YXYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeF9zMzJsZS53YXYgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NmeF9zMzJsZS53YXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjcwYTkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfczMybGUud2F2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfdTgud2F2IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zZnhfdTgud2F2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGIzOTdjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc2Z4X3U4LndhdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc3BlZWNoXzE2Yl9tb25vXzQ0a0h6LnJhdyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc3BlZWNoXzE2Yl9tb25vXzQ0a0h6LnJhdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjlmNzcwNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWVjaF8xNmJfbW9ub180NGtIei5yYXcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWVjaF8xNmJfbW9ub180OGtIei5yYXcgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWVjaF8xNmJfbW9ub180OGtIei5yYXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNDE3NDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zcGVlY2hfMTZiX21vbm9fNDhrSHoucmF3CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zcGVlY2hfMTZiX3N0ZXJlb180NGtIei5yYXcgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWVjaF8xNmJfc3RlcmVvXzQ0a0h6LnJhdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RiYjY0NC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWVjaF8xNmJfc3RlcmVvXzQ0a0h6LnJhdworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc3BlZWNoXzE2Yl9zdGVyZW9fNDhrSHoucmF3IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zcGVlY2hfMTZiX3N0ZXJlb180OGtIei5yYXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOTQzMmUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zcGVlY2hfMTZiX3N0ZXJlb180OGtIei5yYXcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWV4X2F1ZGlvX3ZvcmJpc192aWRlby5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3NwZWV4X2F1ZGlvX3ZvcmJpc192aWRlby5vZ3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxM2VkZGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zcGVleF9hdWRpb192b3JiaXNfdmlkZW8ub2d2CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS9zeW5jMi5vZ3YgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3N5bmMyLm9ndgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmIzMjhhMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3N5bmMyLm9ndgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc3luY18xOTJwXzIwZnJhbWVzLnl1diBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvc3luY18xOTJwXzIwZnJhbWVzLnl1dgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVjNmU5Mi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3N5bmNfMTkycF8yMGZyYW1lcy55dXYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlbl9ieXRlX2ZpbGUgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlbl9ieXRlX2ZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNDcxMDAuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZW5fYnl0ZV9maWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotMDEyMzQ1Njc4OQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy5oMjY0IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLmgyNjQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzM2ZDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLmgyNjQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMuaDI2NC5tZDUgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMuaDI2NC5tZDUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZmQ1ZGIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLmgyNjQubWQ1CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyAtLXRlc3RfdmlkZW9fZGF0YT0idGVzdC0yNWZwcy5oMjY0OjMyMDoyNDA6MjUwOjI1ODozNToxNTA6MSIKLSMgSW50ZWwgU2FuZHkgQnJpZ2UgLSBFR0wKLTQyZTc4YjhhYzIzMWRjMjRlNmRiNWZhYzJkMjZkYTdiCi0jIEludGVsIC0gQnJvYWR3ZWxsIC8gSGFzd2VsbCAtIEVHTAotMTE4OTljYTU0NWEyNjliNmFmMjgxMTZiMDQ4MGMwYmQKLSMgSW50ZWwgLSBJdnkgQnJpZGdlIC0gRUdMCi1kMTZkMDY2MjQwNmI5ZDRlYmI0MTNlZDNkYTM4OTZlMAotIyBJbnRlbCAtIEhhc3dlbGwgLSBYMTEKLSMgSW50ZWwgLSBJdnkgQnJpZGdlIC0gWDExCi01ZjY5N2IwMTViN2FmMGFmYTdmZjIwMjkwNWY3NDhmYQotIyBJbnRlbCAtIFNhbmR5IEJyaWRnZSAtIFgxMQotMDdiYWM3YWQ5MDdiY2I3NTAwNDMyNDY0NTYzN2EwNmMKLSMgQVJNIC0gRXh5bm9zCi0wNDQzNmNmMWNmMDZiNGJiNmMxZWZkODM4ZTY4MjU3ZAotIyBBUk0gLSBUZWdyYQotYjU1Y2RhN2QxMGMzNzEwNGQ4YzQ5ZDI3YzI2OTllNDAKLSMgQVJNIC0gTWVkaWFUZWsKLWFiOTIwNWVhN2RhOGUwMGZlZmUxMDk0ZDQzNTQyZmIyCi0KLSMgVE9ETyhsbGFuZHdlcmxpbik6IFJlbW92ZSB0aGUgZm9sbG93aW5nIGhhc2hlcyB3aGVuIHRoZSBsaWJ2YS1pbnRlbC1kcml2ZXIKLSMgaXMgdXBkYXRlZC4KLSMgSW50ZWwgSGFzd2VsbCAtIEVHTAotOTJhMGMxNGI0YzFhMTNjYTIxMzE3ZDJlNzVmMTdmNzYKLSMgSW50ZWwgSXZ5IEJyaWRnZSAtIEVHTAotNzVkMmY3MDI3MmRmODY4N2RiZGEzMmUyZWRkZDBhMDAKLSMgSW50ZWwgKHZhcmlvdXMpIGxpYnZhLWludGVsLWRyaXZlciAxLjUuMSB3aXRoIFZBX1BST0NfUElQRUxJTkVfRkFTVAotOGJiYzc0M2M3YWM5MmMyNDQyZDA5ZThiM2ZiOWY0ZjUKLSMgSW50ZWwgLSBTS0wKLTJlYzA1N2IxNWNkMjZkMDg3YjhkZjEwMDAzNDkzMDg1CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA4IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLnZwOApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMyMmQ0My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA4CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLnZwOC5tZDUgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA4Lm1kNQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY5ZmUyZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA4Lm1kNQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMgQVJNIC0gRXh5bm9zCi0xMDE0NDA1M2Q3MTRmNjQyOWVmZDI2NjcxMDUxMzU4NAotIyBBUk0gLSBUZWdyYQotY2QzNTViNTUzY2U3NjYwMjgzYzUyNjc1MjMyZTkyMjcKLSMgQVJNIC0gTWVkaWFUZWsKLTYyMzJjOTljYzU0YWVjY2I0M2FmZjdhN2Y5ZGFhNmFiCi0jIEludGVsIC0gQkRXCi1iZWE4MDM5ZTY5MjFkOTMwYmIxYzg2MTg1ZjYyYjFiMAotCi0jIFRPRE8obGxhbmR3ZXJsaW4pOiBSZW1vdmUgdGhlIGZvbGxvd2luZyBoYXNoIHdoZW4gdGhlIGxpYnZhLWludGVsLWRyaXZlcgotIyBpcyB1cGRhdGVkLgotIyBJbnRlbCAtIEJEVwotNGRhN2VjNTQ4NGE5OTE5NWMyYzA1YjVlNTkxOTQwZjkKLSNJbnRlbCAtU0tMCi0yMDVhNDAwMGIzZmJkZTFmMmY5MjdjODc5MWMyYWZlOQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLnZwOSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy52cDkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWQxYjQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0LTI1ZnBzLnZwOQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy52cDkuY29udGV4dCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy52cDkuY29udGV4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFkZDg0Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA5LmNvbnRleHQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3QtMjVmcHMudnA5Lm1kNSBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy52cDkubWQ1CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDExZTM3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdGVzdC0yNWZwcy52cDkubWQ1CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBBUk0gLSBHTzIwMDEKLTdkYWJhNDJhMTE1ZGEzN2E0NjNlZGMyZmE2ZDJhYjhlCi0jIEFSTSAtIE1lZGlhVGVrCi0yMzBlZWE1NmUxNzE5ODRlOWRhMzc2YmMyNjdkMGE2MgotCi0jIEludGVsIC0gSGFzd2VsbAotOWRjOWMwMDliMDYyZjk4NjkxYTYxNTFlMzIyYzdkZjIKLSMgSW50ZWwgLSBCcm9hZHdlbGwKLWY4NWU1N2RhZGQ1MTdiMTcxMTA5NTgwYTZlYmQ5YjM0Ci0jSW50ZWwgLSBTS0wKLTY3ZGQ3YTVkYjY5MTIzZDMyNTQ4NWE2ZWJlY2JkNmMwCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3Rfa2V5X3N5c3RlbV9pbnN0YW50aWF0aW9uLmh0bWwgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3Rlc3Rfa2V5X3N5c3RlbV9pbnN0YW50aWF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZTk5OTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS90ZXN0X2tleV9zeXN0ZW1faW5zdGFudGlhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPGh0bWw+Ci0gIDxib2R5PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLSAgICAgIC8vIFNpbmNlIHByb21pc2VzIHJ1biBhc3luY2hyb25vdXNseSwgdXNlIHRoZSBwYWdlcyB0aXRsZSB0byBrZWVwIHRyYWNrCi0gICAgICAvLyBvZiB0aGUgcmVzdWx0LgotICAgICAgZnVuY3Rpb24gc2V0UmVzdWx0SW5UaXRsZSh0aXRsZSkgewotICAgICAgICBpZiAodGl0bGUgPT0gIiIgfHwgdGl0bGUgPT0gInN1Y2Nlc3MiIHx8Ci0gICAgICAgICAgICB0aXRsZSA9PSAiVW5zdXBwb3J0ZWQga2V5U3lzdGVtIiB8fAotICAgICAgICAgICAgdGl0bGUgPT0gIk5vbmUgb2YgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9ucyB3ZXJlIHN1cHBvcnRlZC4iKSB7Ci0gICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjb25zb2xlLmxvZygiVW5leHBlY3RlZCByZXN1bHQ6ICIgKyB0aXRsZSk7Ci0gICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSAidW5leHBlY3RlZCByZXN1bHQiOwotICAgICAgICB9Ci0gICAgICB9OwotCi0gICAgICAvLyBDb21wYXJlcyAyIGFycmF5cyBvZiBNZWRpYUtleVN5c3RlbU1lZGlhQ2FwYWJpbGl0eSwgY29tcGFyaW5nIG9ubHkKLSAgICAgIC8vIHxjb250ZW50VHlwZXwuIFRoaXMgYXNzdW1lcyB0aGUgb3JkZXIgaXMgdGhlIHNhbWUuIFJldHVybnMgInN1Y2Nlc3MiCi0gICAgICAvLyBpZiB0aGV5IG1hdGNoLCBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZXkgZG9uJ3QuCi0gICAgICBmdW5jdGlvbiB2ZXJpZnlDYXBhYmlsaXRpZXNBcmVFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSB7Ci0gICAgICAgIGlmIChhY3R1YWwubGVuZ3RoICE9IGV4cGVjdGVkLmxlbmd0aCkKLSAgICAgICAgICByZXR1cm4gIm1pc21hdGNoZWQgbGVuZ3RocyI7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgLy8gT25seSBjb21wYXJlIHxjb250ZW50VHlwZXwuIE90aGVyIHByb3BlcnRpZXMgYXJlIGlnbm9yZWQuCi0gICAgICAgICAgaWYgKGFjdHVhbFtpXS5jb250ZW50VHlwZSAhPT0gZXhwZWN0ZWRbaV0uY29udGVudFR5cGUpCi0gICAgICAgICAgICByZXR1cm4gYWN0dWFsW2ldLmNvbnRlbnRUeXBlICsgIiBkb2VzIG5vdCBtYXRjaCAiICsKLSAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtpXS5jb250ZW50VHlwZSArICIgYXQgaW5kZXggIiArIGk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICJzdWNjZXNzIjsKLSAgICAgIH0KLQotICAgICAgLy8gQ2FsbHMgbmF2aWdhdG9yLnJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2VzcygpIHVzaW5nIHRoZSBzdXBwbGllZCBjb2RlYwotICAgICAgLy8gbGlzdHMsIGFuZCB0aGVuIHZlcmlmaWVzIHRoZSByZXN1bHQuIFNldHMgcGFnZSB0aXRsZSB3aGVuIGRvbmUuCi0gICAgICBmdW5jdGlvbiByZXF1ZXN0TWVkaWFLZXlTeXN0ZW1BY2Nlc3NBbmRWZXJpZnlDb25maWd1cmF0aW9uKAotICAgICAgICAgIGtleVN5c3RlbSwgaW5pdERhdGFUeXBlLCBhdWRpb0NvZGVjTGlzdCwgdmlkZW9Db2RlY0xpc3QpIHsKLSAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSB7Ci0gICAgICAgICAgICBpbml0RGF0YVR5cGVzOiBbaW5pdERhdGFUeXBlXSwKLSAgICAgICAgICAgIGF1ZGlvQ2FwYWJpbGl0aWVzOiBbXSwKLSAgICAgICAgICAgIHZpZGVvQ2FwYWJpbGl0aWVzOiBbXQotICAgICAgICB9OwotICAgICAgICBpZiAoYXVkaW9Db2RlY0xpc3QgIT09IG51bGwpIHsKLSAgICAgICAgICBmb3IgKGVudHJ5IG9mIGF1ZGlvQ29kZWNMaXN0KSB7Ci0gICAgICAgICAgICBjb25maWd1cmF0aW9uLmF1ZGlvQ2FwYWJpbGl0aWVzLnB1c2goe2NvbnRlbnRUeXBlOiBlbnRyeX0pOwotICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZpZGVvQ29kZWNMaXN0ICE9PSBudWxsKSB7Ci0gICAgICAgICAgZm9yIChlbnRyeSBvZiB2aWRlb0NvZGVjTGlzdCkgewotICAgICAgICAgICAgY29uZmlndXJhdGlvbi52aWRlb0NhcGFiaWxpdGllcy5wdXNoKHtjb250ZW50VHlwZTogZW50cnl9KTsKLSAgICAgICAgICB9OwotICAgICAgICB9Ci0gICAgICAgIC8vIFRoaXMgaXMgdXNpbmcgcHJvbWlzZXMgd2hpY2ggd2lsbCBydW4gYXN5bmNocm9ub3VzbHkuCi0gICAgICAgIG5hdmlnYXRvci5yZXF1ZXN0TWVkaWFLZXlTeXN0ZW1BY2Nlc3Moa2V5U3lzdGVtLCBbY29uZmlndXJhdGlvbl0pCi0gICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkgewotICAgICAgICAgICAgICB2YXIgYWxsb3dlZENvbmZpZyA9IHJlc3BvbnNlLmdldENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgICAgICAgaWYgKGFsbG93ZWRDb25maWcuaW5pdERhdGFUeXBlcy5sZW5ndGggIT09IDEpIHsKLSAgICAgICAgICAgICAgICBzZXRSZXN1bHRJblRpdGxlKCJpbml0RGF0YVR5cGUgbGVuZ3RoIG1pc21hdGNoIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmIChhbGxvd2VkQ29uZmlnLmluaXREYXRhVHlwZXNbMF0gIT09IGluaXREYXRhVHlwZSkgewotICAgICAgICAgICAgICAgIHNldFJlc3VsdEluVGl0bGUoImluaXREYXRhVHlwZSByZXR1cm5lZCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWRDb25maWcuaW5pdERhdGFUeXBlc1swXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBleHBlY3RlZCAiICsgaW5pdERhdGFUeXBlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKGF1ZGlvQ29kZWNMaXN0ICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgICAgIHZlcmlmeUNhcGFiaWxpdGllc0FyZUVxdWFsKGFsbG93ZWRDb25maWcuYXVkaW9DYXBhYmlsaXRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uYXVkaW9DYXBhYmlsaXRpZXMpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICJzdWNjZXNzIikgewotICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0SW5UaXRsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxvd2VkQ29uZmlnLmF1ZGlvQ2FwYWJpbGl0aWVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICBzZXRSZXN1bHRJblRpdGxlKCJhdWRpb0NhcGFiaWxpdGllcyBzZXQgd2hlbiBub25lIGV4cGVjdGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIGlmICh2aWRlb0NvZGVjTGlzdCAhPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNldFJlc3VsdEluVGl0bGUoCi0gICAgICAgICAgICAgICAgICAgIHZlcmlmeUNhcGFiaWxpdGllc0FyZUVxdWFsKGFsbG93ZWRDb25maWcudmlkZW9DYXBhYmlsaXRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24udmlkZW9DYXBhYmlsaXRpZXMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxsb3dlZENvbmZpZy52aWRlb0NhcGFiaWxpdGllcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgc2V0UmVzdWx0SW5UaXRsZSgidmlkZW9DYXBhYmlsaXRpZXMgc2V0IHdoZW4gbm9uZSBleHBlY3RlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzZXRSZXN1bHRJblRpdGxlKCJzdWNjZXNzIik7Ci0gICAgICAgICAgICB9KQotICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikgeyBzZXRSZXN1bHRJblRpdGxlKGVyci5tZXNzYWdlKTsgfSk7Ci0gICAgICB9OwotCi0gICAgICBmdW5jdGlvbiBjaGVja0tleVN5c3RlbVdpdGhNZWRpYU1pbWVUeXBlKGtleVN5c3RlbSwgaW5pdERhdGFUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0NvZGVjTGlzdCwgdmlkZW9Db2RlY0xpc3QpIHsKLSAgICAgICAgc2V0UmVzdWx0SW5UaXRsZSgiIik7Ci0gICAgICAgIHJlcXVlc3RNZWRpYUtleVN5c3RlbUFjY2Vzc0FuZFZlcmlmeUNvbmZpZ3VyYXRpb24oCi0gICAgICAgICAgICBrZXlTeXN0ZW0sIGluaXREYXRhVHlwZSwgYXVkaW9Db2RlY0xpc3QsIHZpZGVvQ29kZWNMaXN0KTsKLSAgICAgIH07Ci0gICAgPC9zY3JpcHQ+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdHVsaXAyLndlYm0gYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3R1bGlwMi53ZWJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjc3NGY2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdHVsaXAyLndlYm0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZvcmJpcy1leHRyYWRhdGEgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZvcmJpcy1leHRyYWRhdGEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTUzMDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtZXh0cmFkYXRhCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtcGFja2V0LTAgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZvcmJpcy1wYWNrZXQtMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUzNzM5Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZvcmJpcy1wYWNrZXQtMAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdm9yYmlzLXBhY2tldC0xIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtcGFja2V0LTEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNWNjZGIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtcGFja2V0LTEKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi3sylJk78pSZB8aSwJMGqOKOBgvWc/5OHYntynqfTeikdWikYmTnzdvAQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdm9yYmlzLXBhY2tldC0yIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtcGFja2V0LTIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMWNiNWQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXMtcGFja2V0LTIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZvcmJpcy1wYWNrZXQtMyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdm9yYmlzLXBhY2tldC0zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjIyZTdkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdm9yYmlzLXBhY2tldC0zCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXNfYXVkaW9fd212X3ZpZGVvLm1rdiBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdm9yYmlzX2F1ZGlvX3dtdl92aWRlby5ta3YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMjMxOWYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92b3JiaXNfYXVkaW9fd212X3ZpZGVvLm1rdgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LUktZnJhbWUtMTYweDI0MCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LUktZnJhbWUtMTYweDI0MApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlNDMzNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTE2MHgyNDAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTMyMHgxMjAgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTMyMHgxMjAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNGUxZTIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtSS1mcmFtZS0zMjB4MTIwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtSS1mcmFtZS0zMjB4MjQwIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtSS1mcmFtZS0zMjB4MjQwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjdiZmI5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LUktZnJhbWUtMzIweDI0MAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LUktZnJhbWUtMzIweDQ4MCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LUktZnJhbWUtMzIweDQ4MApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkNTlmMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTMyMHg0ODAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTY0MHgyNDAgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3ZwOC1JLWZyYW1lLTY0MHgyNDAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3Mjk5Y2MuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtSS1mcmFtZS02NDB4MjQwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtY29ycnVwdC1JLWZyYW1lIGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS92cDgtY29ycnVwdC1JLWZyYW1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2FmYTg0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvdnA4LWNvcnJ1cHQtSS1mcmFtZQorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvd2VibV9jb250ZW50X2VuY29kaW5ncyBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvd2VibV9jb250ZW50X2VuY29kaW5ncwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5ZmVkMi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fY29udGVudF9lbmNvZGluZ3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fZWJtbF9lbGVtZW50IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS93ZWJtX2VibWxfZWxlbWVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwZWIxYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fZWJtbF9lbGVtZW50CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS93ZWJtX2luZm9fZWxlbWVudCBiL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvd2VibV9pbmZvX2VsZW1lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwOTdkMTMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS93ZWJtX2luZm9fZWxlbWVudAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvd2VibV92b3JiaXNfdHJhY2tfZW50cnkgYi9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fdm9yYmlzX3RyYWNrX2VudHJ5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODczNTIxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYS90ZXN0L2RhdGEvd2VibV92b3JiaXNfdHJhY2tfZW50cnkKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fdnA4X3RyYWNrX2VudHJ5IGIvY29iYWx0L21lZGlhL3Rlc3QvZGF0YS93ZWJtX3ZwOF90cmFja19lbnRyeQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0NGU5ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC9kYXRhL3dlYm1fdnA4X3RyYWNrX2VudHJ5CisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhL3Rlc3QvdnA4LmRpY3QgYi9jb2JhbHQvbWVkaWEvdGVzdC92cDguZGljdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2OTgyNy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWEvdGVzdC92cDguZGljdAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSJES0lGIgotIlx4MjBceDAwIgotIlx4MDAsXHgxMSIKLSJceDlkXHgwMSoiCi0iXHgwMFx4MDlceDEwIgotIlx4MDBceDA1XHgxMCIKLSJceDAwXHgwZVx4MTAiCi0iXHgwMFx4MGJceDEwIgotIlx4MDBceDA0XHgxMCIKLQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2NhcHR1cmUvZ2V0X3VzZXJfbWVkaWFfdGVzdC5jYyBiL2NvYmFsdC9tZWRpYV9jYXB0dXJlL2dldF91c2VyX21lZGlhX3Rlc3QuY2MKaW5kZXggYTAxNTMyZi4uZmVlOWFkMyAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhX2NhcHR1cmUvZ2V0X3VzZXJfbWVkaWFfdGVzdC5jYworKysgYi9jb2JhbHQvbWVkaWFfY2FwdHVyZS9nZXRfdXNlcl9tZWRpYV90ZXN0LmNjCkBAIC0yMywzNyArMjMsMjkgQEAKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi1uYW1lc3BhY2UgewotCi1zdGQ6OnVuaXF1ZV9wdHI8Y29iYWx0OjpzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3M+IENyZWF0ZURPTVNldHRpbmdzKCkgewotICBjb2JhbHQ6OmRvbTo6RE9NU2V0dGluZ3M6Ok9wdGlvbnMgb3B0aW9uczsKLSNpZiBkZWZpbmVkKEVOQUJMRV9GQUtFX01JQ1JPUEhPTkUpCi0gIG9wdGlvbnMubWljcm9waG9uZV9vcHRpb25zLmVuYWJsZV9mYWtlX21pY3JvcGhvbmUgPSB0cnVlOwotI2VuZGlmICAvLyBkZWZpbmVkKEVOQUJMRV9GQUtFX01JQ1JPUEhPTkUpCi0KLSAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxjb2JhbHQ6OnNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4oCi0gICAgICBuZXcgY29iYWx0Ojpkb206OnRlc3Rpbmc6OlN0dWJFbnZpcm9ubWVudFNldHRpbmdzKG9wdGlvbnMpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlLgotCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBtZWRpYV9jYXB0dXJlIHsKIAogY2xhc3MgR2V0VXNlck1lZGlhVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewogIHByb3RlY3RlZDoKLSAgR2V0VXNlck1lZGlhVGVzdCgpCi0gICAgICA6IHdpbmRvd18oQ3JlYXRlRE9NU2V0dGluZ3MoKSksCi0gICAgICAgIG1lZGlhX2RldmljZXNfKG5ldyBNZWRpYURldmljZXMoCi0gICAgICAgICAgICB3aW5kb3dfLmVudmlyb25tZW50X3NldHRpbmdzKCksCi0gICAgICAgICAgICB3aW5kb3dfLmdsb2JhbF9lbnZpcm9ubWVudCgpLT5zY3JpcHRfdmFsdWVfZmFjdG9yeSgpKSkge30KKyAgR2V0VXNlck1lZGlhVGVzdCgpIHsKKyAgICBjb2JhbHQ6OmRvbTo6RE9NU2V0dGluZ3M6Ok9wdGlvbnMgb3B0aW9uczsKKyNpZiBkZWZpbmVkKEVOQUJMRV9GQUtFX01JQ1JPUEhPTkUpCisgICAgb3B0aW9ucy5taWNyb3Bob25lX29wdGlvbnMuZW5hYmxlX2Zha2VfbWljcm9waG9uZSA9IHRydWU7CisjZW5kaWYgIC8vIGRlZmluZWQoRU5BQkxFX0ZBS0VfTUlDUk9QSE9ORSkKKworICAgIHdpbmRvd18ucmVzZXQobmV3IGRvbTo6dGVzdGluZzo6U3R1YldpbmRvdyhvcHRpb25zKSk7CisgICAgbWVkaWFfZGV2aWNlc18gPQorICAgICAgICBuZXcgTWVkaWFEZXZpY2VzKHdpbmRvd18tPmVudmlyb25tZW50X3NldHRpbmdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Xy0+Z2xvYmFsX2Vudmlyb25tZW50KCktPnNjcmlwdF92YWx1ZV9mYWN0b3J5KCkpOworICB9CiAKICAgbWVkaWFfc3RyZWFtOjpNaWNyb3Bob25lQXVkaW9Tb3VyY2UqIEdldE1pY3JvcGhvbmVBdWRpb1NvdXJjZSgpIHsKICAgICByZXR1cm4gYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8bWVkaWFfc3RyZWFtOjpNaWNyb3Bob25lQXVkaW9Tb3VyY2UqPigKICAgICAgICAgbWVkaWFfZGV2aWNlc18tPmF1ZGlvX3NvdXJjZV8uZ2V0KCkpOwogICB9CiAKLSAgZG9tOjp0ZXN0aW5nOjpTdHViV2luZG93IHdpbmRvd187CisgIHN0ZDo6dW5pcXVlX3B0cjxkb206OnRlc3Rpbmc6OlN0dWJXaW5kb3c+IHdpbmRvd187CiAgIHNjb3BlZF9yZWZwdHI8TWVkaWFEZXZpY2VzPiBtZWRpYV9kZXZpY2VzXzsKIH07CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmUuZ3lwIGIvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfY2FwdHVyZS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5Yjk2ODcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfY2FwdHVyZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV9jYXB0dXJlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZW5jb2RlcnMvYXVkaW9fZW5jb2Rlci5jYycsCi0gICAgICAgICdlbmNvZGVycy9hdWRpb19lbmNvZGVyLmgnLAotICAgICAgICAnZW5jb2RlcnMvZmxhY19hdWRpb19lbmNvZGVyLmNjJywKLSAgICAgICAgJ2VuY29kZXJzL2ZsYWNfYXVkaW9fZW5jb2Rlci5oJywKLSAgICAgICAgJ2VuY29kZXJzL2xpbmVhcjE2X2F1ZGlvX2VuY29kZXIuY2MnLAotICAgICAgICAnZW5jb2RlcnMvbGluZWFyMTZfYXVkaW9fZW5jb2Rlci5oJywKLSAgICAgICAgJ21lZGlhX2RldmljZXMuY2MnLAotICAgICAgICAnbWVkaWFfZGV2aWNlcy5oJywKLSAgICAgICAgJ21lZGlhX2RldmljZV9pbmZvLmNjJywKLSAgICAgICAgJ21lZGlhX2RldmljZV9pbmZvLmgnLAotICAgICAgICAnbWVkaWFfcmVjb3JkZXIuY2MnLAotICAgICAgICAnbWVkaWFfcmVjb3JkZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW0uZ3lwOm1lZGlhX3N0cmVhbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L2VuZ2luZS5neXA6ZW5naW5lJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc3BlZWNoLmd5cDpzcGVlY2gnLAotICAgICAgXSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAjIEFkZGl0aW9uYWxseSwgZW5zdXJlIHRoYXQgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIGdlbmVyYXRlZAotICAgICAgICAjIGhlYWRlcnMgYXJlIHB1dCBvbiB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgdGFyZ2V0cyB0aGF0IGRlcGVuZAotICAgICAgICAjIG9uIHRoaXMgb25lLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnc2JfZGlzYWJsZV9taWNyb3Bob25lX2lkbD09MScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdESVNBQkxFX01JQ1JPUEhPTkVfSURMJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmVfdGVzdC5neXAgYi9jb2JhbHQvbWVkaWFfY2FwdHVyZS9tZWRpYV9jYXB0dXJlX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDMzMGFiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX2NhcHR1cmVfdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV9jYXB0dXJlX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdnZXRfdXNlcl9tZWRpYV90ZXN0LmNjJywKLSAgICAgICAgJ21lZGlhX3JlY29yZGVyX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vdGVzdGluZy9kb21fdGVzdGluZy5neXA6ZG9tX3Rlc3RpbmcnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfY2FwdHVyZS5neXA6bWVkaWFfY2FwdHVyZScsCi0KLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgdGhlIGRlcGVuZGVuY3kgYmVsb3csIGl0IHdvcmtzIGFyb3VuZCB0aGUgZmFjdCB0aGF0Ci0gICAgICAgICMgICAgICAgU2NyaXB0VmFsdWVGYWN0b3J5IGhhcyBub24tdmlydHVhbCBtZXRob2QgQ3JlYXRlUHJvbWlzZSgpLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICAgICMgRm9yIEZha2UgTWljcm9waG9uZS4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zcGVlY2gvc3BlZWNoLmd5cDpzcGVlY2gnLAotCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfY2FwdHVyZV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtZWRpYV9jYXB0dXJlX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbWVkaWFfY2FwdHVyZV90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9jYXB0dXJlL21lZGlhX3JlY29yZGVyLmNjIGIvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfcmVjb3JkZXIuY2MKaW5kZXggNjY0MmJmYy4uMTFkNmQ4NiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfcmVjb3JkZXIuY2MKKysrIGIvY29iYWx0L21lZGlhX2NhcHR1cmUvbWVkaWFfcmVjb3JkZXIuY2MKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y21hdGg+CiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL2JpbmQuaCIKICNpbmNsdWRlICJiYXNlL2NhbGxiYWNrX2hlbHBlcnMuaCIKQEAgLTI4LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS90b2tlbnMuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9leGNlcHRpb24uaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9tZWRpYV9jYXB0dXJlL2Jsb2JfZXZlbnQuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9mbGFjX2F1ZGlvX2VuY29kZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfY2FwdHVyZS9lbmNvZGVycy9saW5lYXIxNl9hdWRpb19lbmNvZGVyLmgiCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW1fdHJhY2suaCIKICNpbmNsdWRlICJjb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3RyYWNrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9hcnJheV9idWZmZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSB7CiAKQEAgLTMxNCw3ICszMTYsOCBAQAogICBEQ0hFQ0tfTEUoYnVmZmVyXy5zaXplKCksIGt1aW50MzJtYXgpOwogCiAgIGF1dG8gYXJyYXlfYnVmZmVyID0gc2NyaXB0OjpBcnJheUJ1ZmZlcjo6TmV3KAotICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzXykKKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KHNldHRpbmdzXykKKyAgICAgICAgICAtPmNvbnRleHQoKQogICAgICAgICAgIC0+Z2xvYmFsX2Vudmlyb25tZW50KCksCiAgICAgICBidWZmZXJfLmRhdGEoKSwgYnVmZmVyXy5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvX2Vudi5weSBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjg5Y2JiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQoJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKSkKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2VuZHVyYW5jZS9fZW52LnB5IGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2VuZHVyYW5jZS9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWQ4M2JmLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9lbmR1cmFuY2UvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZW5kdXJhbmNlL2VuZHVyYW5jZV90ZXN0LnB5IGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2VuZHVyYW5jZS9lbmR1cmFuY2VfdGVzdC5weQppbmRleCBlZGM2NTUyLi4yMTNhZTY1IDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZW5kdXJhbmNlL2VuZHVyYW5jZV90ZXN0LnB5CisrKyBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9lbmR1cmFuY2UvZW5kdXJhbmNlX3Rlc3QucHkKQEAgLTE4LDcgKzE4LDYgQEAKIGltcG9ydCByYW5kb20KIGltcG9ydCB0aW1lCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIGNvYmFsdC5tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy50ZXN0X2FwcCBpbXBvcnQgRmVhdHVyZXMsIE1lZGlhU2Vzc2lvblBsYXliYWNrU3RhdGUKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfY2FzZSBpbXBvcnQgVGVzdENhc2UKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfdXRpbCBpbXBvcnQgUGxheWJhY2tVcmxzCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9fZW52LnB5IGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2Z1bmN0aW9uYWxpdHkvX2Vudi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkODNiZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCi0gIHN5cy5leGl0KDEpCi1sb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9mdW5jdGlvbmFsaXR5L2dlbmVyYWxfcGxheWJhY2sucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9nZW5lcmFsX3BsYXliYWNrLnB5CmluZGV4IDZlZGMwY2EuLjQ2ZDYzM2QgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9mdW5jdGlvbmFsaXR5L2dlbmVyYWxfcGxheWJhY2sucHkKKysrIGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2Z1bmN0aW9uYWxpdHkvZ2VuZXJhbF9wbGF5YmFjay5weQpAQCAtMTUsNyArMTUsNiBAQAogCiBpbXBvcnQgbG9nZ2luZwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF9jYXNlIGltcG9ydCBUZXN0Q2FzZQogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF91dGlsIGltcG9ydCBNaW1lU3RyaW5ncywgUGxheWJhY2tVcmxzCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9mdW5jdGlvbmFsaXR5L2xpdmVfcGxheWJhY2sucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9saXZlX3BsYXliYWNrLnB5CmluZGV4IDczOTAxMTYuLjI1ODI3MWIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9mdW5jdGlvbmFsaXR5L2xpdmVfcGxheWJhY2sucHkKKysrIGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2Z1bmN0aW9uYWxpdHkvbGl2ZV9wbGF5YmFjay5weQpAQCAtMTUsNyArMTUsNiBAQAogCiBpbXBvcnQgdGltZQogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF9jYXNlIGltcG9ydCBUZXN0Q2FzZQogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF91dGlsIGltcG9ydCBQbGF5YmFja1VybHMKIApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2Z1bmN0aW9uYWxpdHkvcGxheWJhY2tfY29udHJvbHMucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9wbGF5YmFja19jb250cm9scy5weQppbmRleCAxM2IxZWM4Li5hZGEwYmVjIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9wbGF5YmFja19jb250cm9scy5weQorKysgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9wbGF5YmFja19jb250cm9scy5weQpAQCAtMTUsNyArMTUsNiBAQAogCiBpbXBvcnQgbG9nZ2luZwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF9jYXNlIGltcG9ydCBUZXN0Q2FzZQogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF91dGlsIGltcG9ydCBQbGF5YmFja1VybHMKIApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL2Z1bmN0aW9uYWxpdHkvc3VzcGVuZF9yZXN1bWUucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9zdXNwZW5kX3Jlc3VtZS5weQppbmRleCA1YjdkZTVlLi41Njk1MmVkIDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9zdXNwZW5kX3Jlc3VtZS5weQorKysgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvZnVuY3Rpb25hbGl0eS9zdXNwZW5kX3Jlc3VtZS5weQpAQCAtMTYsNyArMTYsNiBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB0aW1lCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIGNvYmFsdC5tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy50ZXN0X2FwcCBpbXBvcnQgRmVhdHVyZXMKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfY2FzZSBpbXBvcnQgVGVzdENhc2UKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfdXRpbCBpbXBvcnQgTWltZVN0cmluZ3MsIFBsYXliYWNrVXJscwpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL21lZGlhX2ludGVncmF0aW9uX3Rlc3RzX3J1bm5lci5weSBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0c19ydW5uZXIucHkKaW5kZXggN2RiMmFiMi4uMGM5MThjYiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL21lZGlhX2ludGVncmF0aW9uX3Rlc3RzX3J1bm5lci5weQorKysgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHNfcnVubmVyLnB5CkBAIC0xNSwxMSArMTUsMTEgQEAKIAogVXNhZ2U6CiAgIFRvIHJ1biBhbGwgdGVzdHMgb2YgYSBzcGVjaWZpYyB0eXBlOgotICAgICAgInB5dGhvbiBtZWRpYV9pbnRlZ3JhdGlvbl90ZXN0c19ydW5uZXIucHkKKyAgICAgICJweXRob24zIG1lZGlhX2ludGVncmF0aW9uX3Rlc3RzX3J1bm5lci5weQogICAgICAgLXAgYW5kcm9pZC1hcm02NCAtYyBkZXZlbCAtdyBub2luc3RhbGwgLWxvZy1sZXZlbCBpbmZvCiAgICAgICAtLXR5cGUgZnVuY3Rpb25hbGl0eSIKICAgVG8gcnVuIGEgc3BlY2lmaWMgdGVzdCAoc3VzcGVuZF9yZXN1bWUpOgotICAgICAgcHl0aG9uIG1lZGlhX2ludGVncmF0aW9uX3Rlc3RzX3J1bm5lci5weQorICAgICAgcHl0aG9uMyBtZWRpYV9pbnRlZ3JhdGlvbl90ZXN0c19ydW5uZXIucHkKICAgICAgIC1wIGFuZHJvaWQtYXJtNjQgLWMgZGV2ZWwgLXcgbm9pbnN0YWxsIC1sb2ctbGV2ZWwgaW5mbwogICAgICAgLS10eXBlIGZ1bmN0aW9uYWxpdHkgLS10ZXN0X25hbWUgc3VzcGVuZF9yZXN1bWUiCiAKQEAgLTI4LDExICsyOCwxMSBAQAogaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIGNvYmFsdC5tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy50ZXN0X2FwcCBpbXBvcnQgRmVhdHVyZXMKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfY2FzZSBpbXBvcnQgU2V0TGF1bmNoZXJQYXJhbXMsIFNldFN1cHBvcnRlZEZlYXR1cmVzCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYWJzdHJhY3RfbGF1bmNoZXIKQEAgLTY2LDcgKzY2LDcgQEAKIAogCiBkZWYgR2V0VGVzdFBhY2thZ2VQYXRoKHRlc3RfdHlwZSk6Ci0gIGlmIF9URVNUU19QQVRILmhhc19rZXkodGVzdF90eXBlKToKKyAgaWYgdGVzdF90eXBlIGluIF9URVNUU19QQVRIOgogICAgIHJldHVybiBfVEVTVFNfUEFUSFt0ZXN0X3R5cGVdCiAgIHJldHVybiBOb25lCiAKQEAgLTc0LDkgKzc0LDEyIEBACiBkZWYgR2V0QWxsVGVzdE5hbWVzSW5QYWNrYWdlKHBhY2thZ2VfcGF0aCk6CiAgIHRlc3RfbmFtZXMgPSBbXQogICBsb2FkZXIgPSBwa2d1dGlsLmdldF9sb2FkZXIocGFja2FnZV9wYXRoKQotICBmb3Igc3ViX21vZHVsZSBpbiBwa2d1dGlsLndhbGtfcGFja2FnZXMoW2xvYWRlci5maWxlbmFtZV0pOgorICByYXdfcGF0aCA9IGxvYWRlci5nZXRfZmlsZW5hbWUocGFja2FnZV9wYXRoKQorICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJhd19wYXRoKSBpZiBsb2FkZXIuaXNfcGFja2FnZSgKKyAgICAgIHBhY2thZ2VfcGF0aCkgZWxzZSByYXdfcGF0aAorICBmb3Igc3ViX21vZHVsZSBpbiBwa2d1dGlsLndhbGtfcGFja2FnZXMoW3BhdGhdKToKICAgICBfLCBzdWJfbW9kdWxlX25hbWUsIF8gPSBzdWJfbW9kdWxlCi0gICAgIyBGaWx0ZXIgJ19lbnYnIGFuZCAnX19pbml0X18nLgorICAgICMgRmlsdGVyICdfX2luaXRfXycuCiAgICAgaWYgc3ViX21vZHVsZV9uYW1lWzBdID09ICdfJzoKICAgICAgIGNvbnRpbnVlCiAgICAgaWYgbm90IHN1Yl9tb2R1bGVfbmFtZSBpbiB0ZXN0X25hbWVzOgpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3BlcmZvcm1hbmNlL19lbnYucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvcGVyZm9ybWFuY2UvX2Vudi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkODNiZi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvcGVyZm9ybWFuY2UvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvcGVyZm9ybWFuY2UvY29kZWNfY2FwYWJpbGl0eS5weSBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9jb2RlY19jYXBhYmlsaXR5LnB5CmluZGV4IGMxMTdmZDIuLjQxNzhkMDcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9jb2RlY19jYXBhYmlsaXR5LnB5CisrKyBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9jb2RlY19jYXBhYmlsaXR5LnB5CkBAIC0xNSw3ICsxNSw2IEBACiAKIGltcG9ydCBsb2dnaW5nCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIGNvYmFsdC5tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy50ZXN0X2Nhc2UgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIGNvYmFsdC5tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy50ZXN0X3V0aWwgaW1wb3J0IE1pbWVTdHJpbmdzLCBQbGF5YmFja1VybHMKIApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3BlcmZvcm1hbmNlL2Ryb3BwZWRfZnJhbWVzLnB5IGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3BlcmZvcm1hbmNlL2Ryb3BwZWRfZnJhbWVzLnB5CmluZGV4IDg5ZjQyNmMuLmJjZDAyMTUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9kcm9wcGVkX2ZyYW1lcy5weQorKysgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvcGVyZm9ybWFuY2UvZHJvcHBlZF9mcmFtZXMucHkKQEAgLTE2LDcgKzE2LDYgQEAKIGltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGxvZ2dpbmcKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfY2FzZSBpbXBvcnQgVGVzdENhc2UKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfdXRpbCBpbXBvcnQgTWltZVN0cmluZ3MsIFBsYXliYWNrVXJscwogCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvcGVyZm9ybWFuY2Uvc3RhcnRfbGF0ZW5jeS5weSBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9zdGFydF9sYXRlbmN5LnB5CmluZGV4IDYyYjMyZjEuLmNiM2Y2NDQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9zdGFydF9sYXRlbmN5LnB5CisrKyBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy9wZXJmb3JtYW5jZS9zdGFydF9sYXRlbmN5LnB5CkBAIC0xNyw3ICsxNyw2IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHRpbWUKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfYXBwIGltcG9ydCBBZHNTdGF0ZQogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF9jYXNlIGltcG9ydCBUZXN0Q2FzZQogZnJvbSBjb2JhbHQubWVkaWFfaW50ZWdyYXRpb25fdGVzdHMudGVzdF91dGlsIGltcG9ydCBNaW1lU3RyaW5ncywgUGxheWJhY2tVcmxzCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvdGVzdF9hcHAucHkgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvdGVzdF9hcHAucHkKaW5kZXggYjFmYWM5OC4uYTBmMWIwMiAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3Rlc3RfYXBwLnB5CisrKyBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy90ZXN0X2FwcC5weQpAQCAtMTgsNyArMTgsNiBAQAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0LnRvb2xzLmF1dG9tYXRlZF90ZXN0aW5nIGltcG9ydCBjb2JhbHRfcnVubmVyCiBmcm9tIGNvYmFsdC50b29scy5hdXRvbWF0ZWRfdGVzdGluZyBpbXBvcnQgd2ViZHJpdmVyX3V0aWxzCiAKQEAgLTQxLDcgKzQwLDcgQEAKICAgaWYgbm90IGlzaW5zdGFuY2UocXVlcnlfcmVzdWx0LCBkaWN0KToKICAgICByZXR1cm4gZGVmYXVsdAogCi0gIGlmIG5vdCBxdWVyeV9yZXN1bHQuaGFzX2tleShrZXkpOgorICBpZiBrZXkgbm90IGluIHF1ZXJ5X3Jlc3VsdDoKICAgICByZXR1cm4gZGVmYXVsdAogCiAgIHZhbHVlID0gcXVlcnlfcmVzdWx0W2tleV0KQEAgLTMzMCw3ICszMjksNyBAQAogICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAgICAgbWV0YWRhdGEgPSBOb25lCi0gICAgaWYgaXNpbnN0YW5jZShxdWVyeV9yZXN1bHQsIGRpY3QpIGFuZCBxdWVyeV9yZXN1bHQuaGFzX2tleSgnbWV0YWRhdGEnKToKKyAgICBpZiBpc2luc3RhbmNlKHF1ZXJ5X3Jlc3VsdCwgZGljdCkgYW5kICdtZXRhZGF0YScgaW4gcXVlcnlfcmVzdWx0OgogICAgICAgbWV0YWRhdGEgPSBxdWVyeV9yZXN1bHRbJ21ldGFkYXRhJ10KIAogICAgIHNlbGYudGl0bGUgPSBHZXRWYWx1ZUZyb21RdWVyeVJlc3VsdChtZXRhZGF0YSwgJ3RpdGxlJywgJycpCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvdGVzdF9jYXNlLnB5IGIvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3Rlc3RfY2FzZS5weQppbmRleCAwNGI5NDJhLi5kNzU2NDE4IDEwMDY0NAotLS0gYS9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvdGVzdF9jYXNlLnB5CisrKyBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy90ZXN0X2Nhc2UucHkKQEAgLTE2LDcgKzE2LDYgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gY29iYWx0Lm1lZGlhX2ludGVncmF0aW9uX3Rlc3RzLnRlc3RfYXBwIGltcG9ydCBUZXN0QXBwCiAKICMgR2xvYmFsIHZhcmlhYmxlcwpAQCAtNTcsNyArNTYsNiBAQAogCiAgIEBzdGF0aWNtZXRob2QKICAgZGVmIElzRmVhdHVyZVN1cHBvcnRlZChmZWF0dXJlKToKLSAgICBnbG9iYWwgX3N1cHBvcnRlZF9mZWF0dXJlcwogICAgIHJldHVybiBfc3VwcG9ydGVkX2ZlYXR1cmVzW2ZlYXR1cmVdCiAKICAgQHN0YXRpY21ldGhvZApkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3Rlc3RfdXRpbC5weSBiL2NvYmFsdC9tZWRpYV9pbnRlZ3JhdGlvbl90ZXN0cy90ZXN0X3V0aWwucHkKaW5kZXggNmJkMDhkOS4uODFiOGUyYSAxMDA2NDQKLS0tIGEvY29iYWx0L21lZGlhX2ludGVncmF0aW9uX3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9jb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMvdGVzdF91dGlsLnB5CkBAIC0xNSw4ICsxNSw2IEBACiAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci0KIAogY2xhc3MgTWltZVN0cmluZ3MoKToKICAgIiIiCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfc2Vzc2lvbi9tZWRpYV9zZXNzaW9uLmd5cCBiL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU0ZjU1Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb24uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfc2Vzc2lvbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ21lZGlhX21ldGFkYXRhLmgnLAotICAgICAgICAnbWVkaWFfc2Vzc2lvbi5jYycsCi0gICAgICAgICdtZWRpYV9zZXNzaW9uLmgnLAotICAgICAgICAnbWVkaWFfc2Vzc2lvbl9jbGllbnQuY2MnLAotICAgICAgICAnbWVkaWFfc2Vzc2lvbl9jbGllbnQuaCcsCi0gICAgICAgICdtZWRpYV9zZXNzaW9uX3N0YXRlLmNjJywKLSAgICAgICAgJ21lZGlhX3Nlc3Npb25fc3RhdGUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWF0aC9tYXRoLmd5cDptYXRoJywKLSAgICAgIF0sCi0gICAgICAjIFRoaXMgdGFyZ2V0IGRvZXNuJ3QgZ2VuZXJhdGUgYW55IGhlYWRlcnMsIGJ1dCBpdCBleHBvc2VzIGdlbmVyYXRlZAotICAgICAgIyBoZWFkZXIgZmlsZXMgKGZvciBpZGwgZGljdGlvbmFyaWVzKSB0aHJvdWdoIHRoaXMgbW9kdWxlJ3MgcHVibGljIGhlYWRlcgotICAgICAgIyBmaWxlcy4gU28gbWFyayB0aGlzIHRhcmdldCBhcyBhIGhhcmQgZGVwZW5kZW5jeSB0byBlbnN1cmUgdGhhdCBhbnkKLSAgICAgICMgZGVwZW5kZW50IHRhcmdldHMgd2FpdCB1bnRpbCB0aGlzIHRhcmdldCAoYW5kIGl0cyBoYXJkIGRlcGVuZGVuY2llcykgYXJlCi0gICAgICAjIGJ1aWx0LgotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgIyBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzIGFyZSBwdXQgb24gdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRhcmdldHMgdGhhdCBkZXBlbmQKLSAgICAgICAgIyBvbiB0aGlzIG9uZS4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXQotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfc2Vzc2lvbi9tZWRpYV9zZXNzaW9uX2NsaWVudC5jYyBiL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fY2xpZW50LmNjCmluZGV4IGE1YTJjM2MuLmY2MjQxMWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fY2xpZW50LmNjCisrKyBiL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fY2xpZW50LmNjCkBAIC0zNyw2ICszNywxNCBAQAogY29uc3QgYmFzZTo6VGltZURlbHRhIGtNYXliZUZyZWV6ZURlbGF5ID0KICAgICBiYXNlOjpUaW1lRGVsdGE6OkZyb21NaWxsaXNlY29uZHMoMTUwMCk7CiAKK2ludDY0X3QgR2V0UGxheWJhY2tBcmVhKGNvbnN0IG1lZGlhOjpXZWJNZWRpYVBsYXllciogcGxheWVyKSB7CisgIGludCB3aWR0aCA9IHBsYXllci0+R2V0TmF0dXJhbFdpZHRoKCk7CisgIGludCBoZWlnaHQgPSBwbGF5ZXItPkdldE5hdHVyYWxIZWlnaHQoKTsKKyAgRENIRUNLX0dFKHdpZHRoLCAwKTsKKyAgRENIRUNLX0dFKGhlaWdodCwgMCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih3aWR0aCkgKiBoZWlnaHQ7Cit9CisKIC8vIEd1ZXNzIHRoZSBtZWRpYSBwb3NpdGlvbiBzdGF0ZSBmb3IgdGhlIG1lZGlhIHNlc3Npb24uCiB2b2lkIEd1ZXNzTWVkaWFQb3NpdGlvblN0YXRlKE1lZGlhU2Vzc2lvblN0YXRlKiBzZXNzaW9uX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWRpYTo6V2ViTWVkaWFQbGF5ZXIqKiBndWVzc19wbGF5ZXIsCkBAIC00NSw4ICs1Myw3IEBACiAgIC8vIG1lZGlhIHNlc3Npb24uIFRoaXMgaXNuJ3QgcGVyZmVjdCwgc28gaXQncyBiZXN0IHRoYXQgdGhlIHdlYiBhcHAgc2V0IHRoZQogICAvLyBtZWRpYSBwb3NpdGlvbiBzdGF0ZSBleHBsaWNpdGx5LgogICBpZiAoKmd1ZXNzX3BsYXllciA9PSBudWxscHRyIHx8Ci0gICAgICAoKmd1ZXNzX3BsYXllciktPkdldE5hdHVyYWxTaXplKCkuR2V0QXJlYSgpIDwKLSAgICAgICAgICBjdXJyZW50X3BsYXllci0+R2V0TmF0dXJhbFNpemUoKS5HZXRBcmVhKCkpIHsKKyAgICAgIEdldFBsYXliYWNrQXJlYSgqZ3Vlc3NfcGxheWVyKSA8IEdldFBsYXliYWNrQXJlYShjdXJyZW50X3BsYXllcikpIHsKICAgICAqZ3Vlc3NfcGxheWVyID0gY3VycmVudF9wbGF5ZXI7CiAKICAgICBNZWRpYVBvc2l0aW9uU3RhdGUgcG9zaXRpb25fc3RhdGU7CkBAIC0zMjEsNiArMzI4LDEyIEBACiAgICAgICAgICAgY29uc3QgTWVkaWFJbWFnZSYgbWVkaWFfaW1hZ2UoYXJ0d29yay5hdChpKSk7CiAgICAgICAgICAgQ29iYWx0RXh0ZW5zaW9uTWVkaWFJbWFnZSBleHRfaW1hZ2U7CiAgICAgICAgICAgZXh0X2ltYWdlLnNyYyA9IG1lZGlhX2ltYWdlLnNyYygpLmNfc3RyKCk7CisgICAgICAgICAgaWYgKGV4dF9pbWFnZS5zcmMgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgLy8gc3JjKCkgaXMgcmVxdWlyZWQsIGJ1dCBDb2JhbHQgSURMIHBhcnNlciBkb2Vzbid0IGVuZm9yY2UgaXQuCisgICAgICAgICAgICAvLyBodHRwOi8vY3MvY29iYWx0L2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX2ltYWdlLmlkbD9sPTE5CisgICAgICAgICAgICAvLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL21lZGlhc2Vzc2lvbi8jZGljdGRlZi1tZWRpYWltYWdlCisgICAgICAgICAgICBMT0coRVJST1IpIDw8ICJSZXF1aXJlZCBzcmMgc3RyaW5nIGZvciBNZWRpYUltYWdlIGlzIG1pc3NpbmcuIjsKKyAgICAgICAgICB9CiAgICAgICAgICAgZXh0X2ltYWdlLnNpemUgPSBtZWRpYV9pbWFnZS5zaXplcygpLmNfc3RyKCk7CiAgICAgICAgICAgZXh0X2ltYWdlLnR5cGUgPSBtZWRpYV9pbWFnZS50eXBlKCkuY19zdHIoKTsKICAgICAgICAgICBleHRfYXJ0d29ya1tpXSA9IGV4dF9pbWFnZTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fdGVzdC5neXAgYi9jb2JhbHQvbWVkaWFfc2Vzc2lvbi9tZWRpYV9zZXNzaW9uX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJjOGQ3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9zZXNzaW9uL21lZGlhX3Nlc3Npb25fdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfc2Vzc2lvbl90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbWVkaWFfc2Vzc2lvbl90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L21lZGlhX3Nlc3Npb24vbWVkaWFfc2Vzc2lvbi5neXA6bWVkaWFfc2Vzc2lvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXIuZ3lwOmJyb3dzZXInLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV9zZXNzaW9uX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21lZGlhX3Nlc3Npb25fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdtZWRpYV9zZXNzaW9uX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdCi19Ci0KLQpkaWZmIC0tZ2l0IGEvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW0uZ3lwIGIvY29iYWx0L21lZGlhX3N0cmVhbS9tZWRpYV9zdHJlYW0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTEzNWRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3N0cmVhbScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvX3BhcmFtZXRlcnMuY2MnLAotICAgICAgICAnYXVkaW9fcGFyYW1ldGVycy5oJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbS5oJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV9hdWRpb19kZWxpdmVyZXIuaCcsCi0gICAgICAgICdtZWRpYV9zdHJlYW1fYXVkaW9fc2luay5oJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV9hdWRpb19zb3VyY2UuY2MnLAotICAgICAgICAnbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZS5oJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV9hdWRpb190cmFjay5jYycsCi0gICAgICAgICdtZWRpYV9zdHJlYW1fYXVkaW9fdHJhY2suaCcsCi0gICAgICAgICdtZWRpYV9zdHJlYW1fc291cmNlLmNjJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV9zb3VyY2UuaCcsCi0gICAgICAgICdtZWRpYV9zdHJlYW1fdHJhY2suaCcsCi0gICAgICAgICdtaWNyb3Bob25lX2F1ZGlvX3NvdXJjZS5jYycsCi0gICAgICAgICdtaWNyb3Bob25lX2F1ZGlvX3NvdXJjZS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXA6c3BlZWNoJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQotCmRpZmYgLS1naXQgYS9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbV90ZXN0Lmd5cCBiL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWMxMjdjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9tZWRpYV9zdHJlYW0vbWVkaWFfc3RyZWFtX3Rlc3QuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfc3RyZWFtX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhdWRpb19wYXJhbWV0ZXJzX3Rlc3QuY2MnLAotICAgICAgICAnbWVkaWFfc3RyZWFtX2F1ZGlvX3NvdXJjZV90ZXN0LmNjJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV9hdWRpb190cmFja190ZXN0LmNjJywKLSAgICAgICAgJ21lZGlhX3N0cmVhbV90ZXN0LmNjJywKLSAgICAgICAgJ3Rlc3RpbmcvbW9ja19tZWRpYV9zdHJlYW1fYXVkaW9fc2luay5oJywKLSAgICAgICAgJ3Rlc3RpbmcvbW9ja19tZWRpYV9zdHJlYW1fYXVkaW9fc291cmNlLmgnLAotICAgICAgICAndGVzdGluZy9tb2NrX21lZGlhX3N0cmVhbV9hdWRpb190cmFjay5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPEAoY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyknLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWFfc3RyZWFtL21lZGlhX3N0cmVhbS5neXA6bWVkaWFfc3RyZWFtJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV9zdHJlYW1fdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbWVkaWFfc3RyZWFtX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbWVkaWFfc3RyZWFtX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQotCmRpZmYgLS1naXQgYS9jb2JhbHQvbmV0d29yay9CVUlMRC5nbiBiL2NvYmFsdC9uZXR3b3JrL0JVSUxELmduCmluZGV4IDQ2NThhZDQuLjQ5OWEzMWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9uZXR3b3JrL0JVSUxELmduCisrKyBiL2NvYmFsdC9uZXR3b3JrL0JVSUxELmduCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgIi8vdXJsIiwKICAgXQogCi0gIGlmIChpbl9hcHBfZGlhbCkgeworICBpZiAoZW5hYmxlX2luX2FwcF9kaWFsKSB7CiAgICAgZGVwcyArPSBbCiAgICAgICAjIERpYWxTZXJ2aWNlIGRlcGVuZHMgb24gaHR0cCBzZXJ2ZXIuCiAgICAgICAiLy9uZXQ6aHR0cF9zZXJ2ZXIiLApkaWZmIC0tZ2l0IGEvY29iYWx0L25ldHdvcmsvbG9jYWxfbmV0d29yay5jYyBiL2NvYmFsdC9uZXR3b3JrL2xvY2FsX25ldHdvcmsuY2MKaW5kZXggYjM5ODc4Zi4uMWZkMmUyYiAxMDA2NDQKLS0tIGEvY29iYWx0L25ldHdvcmsvbG9jYWxfbmV0d29yay5jYworKysgYi9jb2JhbHQvbmV0d29yay9sb2NhbF9uZXR3b3JrLmNjCkBAIC00NiwxMyArNDYsOSBAQAogICAgICAgcmV0dXJuIENvbXBhcmVOQnl0ZXNPZkFkZHJlc3MoaXAsIHNvdXJjZV9hZGRyZXNzLCBuZXRtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpJUEFkZHJlc3M6OmtJUHY0QWRkcmVzc1NpemUpOwogICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhJUFY2KQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICBpZiAoU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQoKSkKLSNlbmRpZgogICAgICAgICByZXR1cm4gQ29tcGFyZU5CeXRlc09mQWRkcmVzcyhpcCwgc291cmNlX2FkZHJlc3MsIG5ldG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6SVBBZGRyZXNzOjprSVB2NkFkZHJlc3NTaXplKTsKLSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICBOT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgSVAgdHlwZSAiIDw8IGlwLnR5cGU7CiAgIH0KQEAgLTg4LDE4ICs4NCwxNCBAQAogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFTYlNvY2tldElzSXB2NlN1cHBvcnRlZCgpKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0jZW5kaWYKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoSVBWNikKICAgaWYgKGlwLnR5cGUgPT0ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2KSB7CiAgICAgLy8gVW5pcXVlIExvY2FsIEFkZHJlc3NlcyBmb3IgSVB2NiBhcmUgX2VmZmVjdGl2ZWx5XyBmZDAwOjovOC4KICAgICAvLyBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxOTMjc2VjdGlvbi0zIGZvciBkZXRhaWxzLgogICAgIHJldHVybiBpcC5hZGRyZXNzWzBdID09IDB4ZmQgJiYgaXAuYWRkcmVzc1sxXSA9PSAwOwogICB9Ci0jZW5kaWYKIAogICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cCBiL2NvYmFsdC9uZXR3b3JrL25ldHdvcmsuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjc5YzNhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9uZXR3b3JrL25ldHdvcmsuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsgJy4uL2J1aWxkL2NvbnRlbnRzX2Rpci5neXBpJyBdLAotCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25ldHdvcmsnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzb2NrZXRfYWRkcmVzc19wYXJzZXIuY2MnLAotICAgICAgICAnc29ja2V0X2FkZHJlc3NfcGFyc2VyLmgnLAotICAgICAgICAnY29va2llX2phcl9pbXBsLmNjJywKLSAgICAgICAgJ2Nvb2tpZV9qYXJfaW1wbC5oJywKLSAgICAgICAgJ2pvYl9mYWN0b3J5X2NvbmZpZy5oJywKLSAgICAgICAgJ25ldF9wb3N0ZXIuY2MnLAotICAgICAgICAnbmV0X3Bvc3Rlci5oJywKLSAgICAgICAgJ2xvY2FsX25ldHdvcmsuY2MnLAotICAgICAgICAnbG9jYWxfbmV0d29yay5oJywKLSAgICAgICAgJ25ldHdvcmtfZGVsZWdhdGUuY2MnLAotICAgICAgICAnbmV0d29ya19kZWxlZ2F0ZS5oJywKLSAgICAgICAgJ25ldHdvcmtfZXZlbnQuaCcsCi0gICAgICAgICduZXR3b3JrX21vZHVsZS5jYycsCi0gICAgICAgICduZXR3b3JrX21vZHVsZS5oJywKLSAgICAgICAgJ25ldHdvcmtfc3lzdGVtLmgnLAotICAgICAgICAncGVyc2lzdGVudF9jb29raWVfc3RvcmUuY2MnLAotICAgICAgICAncGVyc2lzdGVudF9jb29raWVfc3RvcmUuaCcsCi0gICAgICAgICdwcm94eV9jb25maWdfc2VydmljZS5oJywKLSAgICAgICAgJ3N0YXJib2FyZC9uZXR3b3JrX3N5c3RlbS5jYycsCi0gICAgICAgICdzdGFyYm9hcmQvcHJveHlfY29uZmlnX3NlcnZpY2UuY2MnLAotICAgICAgICAnc3dpdGNoZXMuY2MnLAotICAgICAgICAnc3dpdGNoZXMuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdF9jb250ZXh0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0X2NvbnRleHQuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdF9jb250ZXh0X2dldHRlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdF9jb250ZXh0X2dldHRlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmd5cDpjb25maWd1cmF0aW9uJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9uZXR3b3JrX2JyaWRnZS9uZXR3b3JrX2JyaWRnZS5neXA6bmV0d29ya19icmlkZ2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N0b3JhZ2Uvc3RvcmFnZS5neXA6c3RvcmFnZScsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2J1aWxkL2NvYmFsdF9idWlsZF9pZC5neXA6Y29iYWx0X2J1aWxkX2lkJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydpbl9hcHBfZGlhbCA9PSAxJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAjIERpYWxTZXJ2aWNlIGRlcGVuZHMgb24gaHR0cCBzZXJ2ZXIuCi0gICAgICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6aHR0cF9zZXJ2ZXInLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2VuYWJsZV9uZXR3b3JrX2xvZ2dpbmcgPT0gMScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjb2JhbHRfbmV0X2xvZy5jYycsCi0gICAgICAgICAgICAnY29iYWx0X25ldF9sb2cuaCcsCi0gICAgICAgICAgICAnbmV0X2xvZ19jb25zdGFudHMuY2MnLAotICAgICAgICAgICAgJ25ldF9sb2dfY29uc3RhbnRzLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnRU5BQkxFX05FVFdPUktfTE9HR0lORycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnZW5hYmxlX2NvbmZpZ3VyZV9yZXF1ZXN0X2pvYl9mYWN0b3J5ID09IDEnLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3NiX2V2ZXJncmVlbiA9PSAwJywgewotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0VOQUJMRV9DT05GSUdVUkVfUkVRVUVTVF9KT0JfRkFDVE9SWScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnRU5BQkxFX0NPTkZJR1VSRV9SRVFVRVNUX0pPQl9GQUNUT1JZJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICMgRm9yIGNvYmFsdF9idWlsZF9pZC5oCi0gICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKScsCi0gICAgICBdLAotICAgICAgJ2NvcGllcyc6IFsKLSAgICAgIHsKLSAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpcikvc3NsJywKLSAgICAgICAgJ2ZpbGVzJzogWyc8KHN0YXRpY19jb250ZW50c19zb3VyY2VfZGlyKS9zc2wvY2VydHMvJ10sCi0gICAgICB9XSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdjb250ZW50X2RlcGxveV9zdWJkaXJzJzogWyAnc3NsL2NlcnRzJyBdCi0gICAgICAgIH0KLSAgICAgIH0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmV0d29ya190ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbG9jYWxfbmV0d29ya190ZXN0LmNjJywKLSAgICAgICAgJ3BlcnNpc3RlbnRfY29va2llX3N0b3JlX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJ25ldHdvcmsnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICduZXR3b3JrX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ25ldHdvcmtfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICduZXR3b3JrX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L25ldHdvcmsvbmV0d29ya19kZWxlZ2F0ZS5jYyBiL2NvYmFsdC9uZXR3b3JrL25ldHdvcmtfZGVsZWdhdGUuY2MKaW5kZXggNWZhODUwYS4uYTRjMTE1OCAxMDA2NDQKLS0tIGEvY29iYWx0L25ldHdvcmsvbmV0d29ya19kZWxlZ2F0ZS5jYworKysgYi9jb2JhbHQvbmV0d29yay9uZXR3b3JrX2RlbGVnYXRlLmNjCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19kZWxlZ2F0ZS5oIgogCiAjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9sb2NhbF9uZXR3b3JrLmgiCiAjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvc29ja2V0X2FkZHJlc3NfcGFyc2VyLmgiCkBAIC02NCwxMiArNjUsNyBAQAogICAvLyBUaGlzIHdpbGwgYmUgb3VyIGhvc3Qgc3RyaW5nIGlmIHdlIGFyZSBub3QgdXNpbmcgSVBWNi4KICAgaG9zdC5hcHBlbmQodmFsaWRfc3BlY19jc3RyICsgcGFyc2VkLmhvc3QuYmVnaW4sCiAgICAgICAgICAgICAgIHZhbGlkX3NwZWNfY3N0ciArIHBhcnNlZC5ob3N0LmJlZ2luICsgcGFyc2VkLmhvc3QubGVuKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoSVBWNikKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICBpZiAoU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQoKSkKLSNlbmRpZgotICAgIGhvc3QgPSB1cmwuSG9zdE5vQnJhY2tldHMoKTsKLSNlbmRpZgorICBpZiAoU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQoKSkgaG9zdCA9IHVybC5Ib3N0Tm9CcmFja2V0cygpOwogICBpZiAobmV0OjpIb3N0U3RyaW5nSXNMb2NhbGhvc3QoaG9zdCkpIHsKICAgICByZXR1cm4gbmV0OjpPSzsKICAgfQpkaWZmIC0tZ2l0IGEvY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuY2MgYi9jb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5jYwppbmRleCBkYmFjZDdhLi40ZWFlOWE4IDEwMDY0NAotLS0gYS9jb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5jYworKysgYi9jb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5jYwpAQCAtNzUsNiArNzUsNyBAQAogfQogCiBzdGQ6OnN0cmluZyBOZXR3b3JrTW9kdWxlOjpHZXRVc2VyQWdlbnQoKSBjb25zdCB7CisgIERDSEVDSyhodHRwX3VzZXJfYWdlbnRfc2V0dGluZ3NfKTsKICAgcmV0dXJuIGh0dHBfdXNlcl9hZ2VudF9zZXR0aW5nc18tPkdldFVzZXJBZ2VudCgpOwogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvbmV0d29yay9zb2NrZXRfYWRkcmVzc19wYXJzZXIuY2MgYi9jb2JhbHQvbmV0d29yay9zb2NrZXRfYWRkcmVzc19wYXJzZXIuY2MKaW5kZXggMDliZDUzOC4uZGRmYTNjYSAxMDA2NDQKLS0tIGEvY29iYWx0L25ldHdvcmsvc29ja2V0X2FkZHJlc3NfcGFyc2VyLmNjCisrKyBiL2NvYmFsdC9uZXR3b3JrL3NvY2tldF9hZGRyZXNzX3BhcnNlci5jYwpAQCAtNDksMTcgKzQ5LDEzIEBACiAgICAgICBvdXRfc29ja2V0X2FkZHJlc3MtPnR5cGUgPSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjQ7CiAgICAgICBEQ0hFQ0tfR0Uoc2l6ZW9mKGFkZHJlc3NfdjQpLAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihudW1faXB2NF9jb21wb25lbnRzKSk7Ci0gICAgICBtZW1jcHkob3V0X3NvY2tldF9hZGRyZXNzLT5hZGRyZXNzLCBhZGRyZXNzX3Y0LAotICAgICAgICAgICAgICAgICAgIG51bV9pcHY0X2NvbXBvbmVudHMpOworICAgICAgbWVtY3B5KG91dF9zb2NrZXRfYWRkcmVzcy0+YWRkcmVzcywgYWRkcmVzc192NCwgbnVtX2lwdjRfY29tcG9uZW50cyk7CiAKICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgdXJsOjpDYW5vbkhvc3RJbmZvOjpORVVUUkFMOgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICBpZiAoIVNiU29ja2V0SXNJcHY2U3VwcG9ydGVkKCkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotI2VuZGlmCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKElQVjYpCiAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NfdjZbbmV0OjpJUEFkZHJlc3M6OmtJUHY2QWRkcmVzc1NpemVdOwogICAgICAgaWYgKCF1cmw6OklQdjZBZGRyZXNzVG9OdW1iZXIoc3BlYywgaG9zdF9jb21wb25lbnQsIGFkZHJlc3NfdjYpKSB7CiAgICAgICAgIGJyZWFrOwpAQCAtNzAsOSArNjYsNiBAQAogICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoYWRkcmVzc192NikgPT0gbmV0OjpJUEFkZHJlc3M6OmtJUHY2QWRkcmVzc1NpemUsICIiKTsKICAgICAgIG1lbWNweShvdXRfc29ja2V0X2FkZHJlc3MtPmFkZHJlc3MsIGFkZHJlc3NfdjYsIHNpemVvZihhZGRyZXNzX3Y2KSk7CiAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKICAgICBjYXNlIHVybDo6Q2Fub25Ib3N0SW5mbzo6QlJPS0VOOgogICAgICAgYnJlYWs7CiAgICAgY2FzZSB1cmw6OkNhbm9uSG9zdEluZm86OklQVjY6CmRpZmYgLS1naXQgYS9jb2JhbHQvbmV0d29yay91cmxfcmVxdWVzdF9jb250ZXh0LmNjIGIvY29iYWx0L25ldHdvcmsvdXJsX3JlcXVlc3RfY29udGV4dC5jYwppbmRleCBlOGNkZjgzLi4wMjA0MTBjIDEwMDY0NAotLS0gYS9jb2JhbHQvbmV0d29yay91cmxfcmVxdWVzdF9jb250ZXh0LmNjCisrKyBiL2NvYmFsdC9uZXR3b3JrL3VybF9yZXF1ZXN0X2NvbnRleHQuY2MKQEAgLTE2LDYgKzE2LDggQEAKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uaCIKQEAgLTE2Nyw4ICsxNjksMjQgQEAKIAogICBzdG9yYWdlXy5zZXRfaHR0cF9uZXR3b3JrX3Nlc3Npb24oCiAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPG5ldDo6SHR0cE5ldHdvcmtTZXNzaW9uPihwYXJhbXMsIGNvbnRleHQpKTsKLSAgc3RvcmFnZV8uc2V0X2h0dHBfdHJhbnNhY3Rpb25fZmFjdG9yeShzdGQ6OnVuaXF1ZV9wdHI8bmV0OjpIdHRwTmV0d29ya0xheWVyPigKLSAgICAgIG5ldyBuZXQ6Okh0dHBOZXR3b3JrTGF5ZXIoc3RvcmFnZV8uaHR0cF9uZXR3b3JrX3Nlc3Npb24oKSkpKTsKKyAgc3RkOjp2ZWN0b3I8Y2hhcj4gcGF0aChrU2JGaWxlTWF4UGF0aCwgMCk7CisgIGlmICghU2JTeXN0ZW1HZXRQYXRoKGtTYlN5c3RlbVBhdGhDYWNoZURpcmVjdG9yeSwgcGF0aC5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgIGtTYkZpbGVNYXhQYXRoKSkgeworICAgIHN0b3JhZ2VfLnNldF9odHRwX3RyYW5zYWN0aW9uX2ZhY3RvcnkoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxuZXQ6Okh0dHBOZXR3b3JrTGF5ZXI+KAorICAgICAgICAgICAgbmV3IG5ldDo6SHR0cE5ldHdvcmtMYXllcihzdG9yYWdlXy5odHRwX25ldHdvcmtfc2Vzc2lvbigpKSkpOworICB9IGVsc2UgeworICAgIC8vIFRPRE86IFNldCBtYXggc2l6ZSBvZiBjYWNoZSBpbiBTdGFyYm9hcmQuCisgICAgY29uc3QgaW50IGNhY2hlX3NpemVfbWIgPSAyNDsKKyAgICBhdXRvIGh0dHBfY2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPG5ldDo6SHR0cENhY2hlPigKKyAgICAgICAgc3RvcmFnZV8uaHR0cF9uZXR3b3JrX3Nlc3Npb24oKSwKKyAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxuZXQ6Okh0dHBDYWNoZTo6RGVmYXVsdEJhY2tlbmQ+KAorICAgICAgICAgICAgbmV0OjpESVNLX0NBQ0hFLCBuZXQ6OkNBQ0hFX0JBQ0tFTkRfQ09CQUxULAorICAgICAgICAgICAgYmFzZTo6RmlsZVBhdGgoc3RkOjpzdHJpbmcocGF0aC5kYXRhKCkpKSwKKyAgICAgICAgICAgIC8qIG1heF9ieXRlcyAqLyAxMDI0ICogMTAyNCAqIGNhY2hlX3NpemVfbWIpLAorICAgICAgICB0cnVlKTsKKyAgICBzdG9yYWdlXy5zZXRfaHR0cF90cmFuc2FjdGlvbl9mYWN0b3J5KHN0ZDo6bW92ZShodHRwX2NhY2hlKSk7CisgIH0KIAogICBhdXRvKiBqb2JfZmFjdG9yeSA9IG5ldyBuZXQ6OlVSTFJlcXVlc3RKb2JGYWN0b3J5SW1wbCgpOwogICBqb2JfZmFjdG9yeS0+U2V0UHJvdG9jb2xIYW5kbGVyKHVybDo6a0RhdGFTY2hlbWUsCmRpZmYgLS1naXQgYS9jb2JhbHQvbmV0d29ya19icmlkZ2UvbmV0d29ya19icmlkZ2UuZ3lwIGIvY29iYWx0L25ldHdvcmtfYnJpZGdlL25ldHdvcmtfYnJpZGdlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJlZDc1ZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvbmV0d29ya19icmlkZ2UvbmV0d29ya19icmlkZ2UuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmV0d29ya19icmlkZ2UnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb29raWVfamFyLmgnLAotICAgICAgICAnbmV0X3Bvc3Rlci5jYycsCi0gICAgICAgICduZXRfcG9zdGVyLmgnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L292ZXJsYXlfaW5mby9CVUlMRC5nbiBiL2NvYmFsdC9vdmVybGF5X2luZm8vQlVJTEQuZ24KaW5kZXggYjQ0NWQ1Ni4uZDIyMDlmZSAxMDA2NDQKLS0tIGEvY29iYWx0L292ZXJsYXlfaW5mby9CVUlMRC5nbgorKysgYi9jb2JhbHQvb3ZlcmxheV9pbmZvL0JVSUxELmduCkBAIC00NCw1ICs0NCw0IEBACiAgICAgIi8vY29iYWx0L3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICBdCi0gIGNvbnRlbnRfZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiIF0KIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9vdmVybGF5X2luZm8vb3ZlcmxheV9pbmZvLmd5cCBiL2NvYmFsdC9vdmVybGF5X2luZm8vb3ZlcmxheV9pbmZvLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhYjdmNS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvb3ZlcmxheV9pbmZvL292ZXJsYXlfaW5mby5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdvdmVybGF5X2luZm8nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdvdmVybGF5X2luZm9fcmVnaXN0cnkuY2MnLAotICAgICAgICAnb3ZlcmxheV9pbmZvX3JlZ2lzdHJ5LmgnLAotICAgICAgICAncXJfY29kZV9vdmVybGF5LmNjJywKLSAgICAgICAgJ3FyX2NvZGVfb3ZlcmxheS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWF0aC9tYXRoLmd5cDptYXRoJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJfdHJlZS9yZW5kZXJfdHJlZS5neXA6cmVuZGVyX3RyZWUnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvUVItQ29kZS1nZW5lcmF0b3IvcXJfY29kZV9nZW5lcmF0b3IuZ3lwOnFyX2NvZGVfZ2VuZXJhdG9yJywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdvdmVybGF5X2luZm9fdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ292ZXJsYXlfaW5mb19yZWdpc3RyeV90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L292ZXJsYXlfaW5mby9vdmVybGF5X2luZm8uZ3lwOm92ZXJsYXlfaW5mbycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnb3ZlcmxheV9pbmZvX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ292ZXJsYXlfaW5mb190ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ292ZXJsYXlfaW5mb190ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICcuLi8uLi9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJfdHJlZS9ub2RlX3Zpc2l0b3JfdGVzdC5jYyBiL2NvYmFsdC9yZW5kZXJfdHJlZS9ub2RlX3Zpc2l0b3JfdGVzdC5jYwppbmRleCAyM2JjNWRkLi4xODQ5NzBjIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyX3RyZWUvbm9kZV92aXNpdG9yX3Rlc3QuY2MKKysrIGIvY29iYWx0L3JlbmRlcl90cmVlL25vZGVfdmlzaXRvcl90ZXN0LmNjCkBAIC0xMDksMTUgKzEwOSwxNCBAQAogfTsKIAogY2xhc3MgRHVtbXlCcnVzaCA6IHB1YmxpYyBCcnVzaCB7Ci0gIHZvaWQgQWNjZXB0KEJydXNoVmlzaXRvciogdmlzaXRvcikgY29uc3Qgb3ZlcnJpZGUgewotICB9CisgIHZvaWQgQWNjZXB0KEJydXNoVmlzaXRvciogdmlzaXRvcikgY29uc3Qgb3ZlcnJpZGUge30KIAogICBiYXNlOjpUeXBlSWQgR2V0VHlwZUlkKCkgY29uc3Qgb3ZlcnJpZGUgewogICAgIHJldHVybiBiYXNlOjpHZXRUeXBlSWQ8RHVtbXlCcnVzaD4oKTsKICAgfQogfTsKIAotYm9vbCBTZXRCb3VuZHMoY29uc3QgY29iYWx0OjptYXRoOjpSZWN0JikgeyByZXR1cm4gZmFsc2U7IH0KK2Jvb2wgU2V0Qm91bmRzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7IHJldHVybiBmYWxzZTsgfQogCiB9ICAvLyBuYW1lc3BhY2UKIApkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcl90cmVlL3B1bmNoX3Rocm91Z2hfdmlkZW9fbm9kZS5oIGIvY29iYWx0L3JlbmRlcl90cmVlL3B1bmNoX3Rocm91Z2hfdmlkZW9fbm9kZS5oCmluZGV4IDkxNmYxMDMuLmExNzJlMmEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJfdHJlZS9wdW5jaF90aHJvdWdoX3ZpZGVvX25vZGUuaAorKysgYi9jb2JhbHQvcmVuZGVyX3RyZWUvcHVuY2hfdGhyb3VnaF92aWRlb19ub2RlLmgKQEAgLTE1LDYgKzE1LDggQEAKICNpZm5kZWYgQ09CQUxUX1JFTkRFUl9UUkVFX1BVTkNIX1RIUk9VR0hfVklERU9fTk9ERV9IXwogI2RlZmluZSBDT0JBTFRfUkVOREVSX1RSRUVfUFVOQ0hfVEhST1VHSF9WSURFT19OT0RFX0hfCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiYmFzZS9jYWxsYmFjay5oIgogI2luY2x1ZGUgImJhc2UvY29tcGlsZXJfc3BlY2lmaWMuaCIKICNpbmNsdWRlICJjb2JhbHQvYmFzZS90eXBlX2lkLmgiCkBAIC0zOSw3ICs0MSw3IEBACiAvLyAgICAgICAgICBzdXBwb3J0IHB1bmNoIG91dCB2aWRlbyByZW5kZXJpbmcuCiBjbGFzcyBQdW5jaFRocm91Z2hWaWRlb05vZGUgOiBwdWJsaWMgTm9kZSB7CiAgcHVibGljOgotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPGJvb2woY29uc3QgbWF0aDo6UmVjdCYpPiBTZXRCb3VuZHNDQjsKKyAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazxib29sKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KT4gU2V0Qm91bmRzQ0I7CiAKICAgc3RydWN0IEJ1aWxkZXIgewogICAgIEJ1aWxkZXIoY29uc3QgQnVpbGRlciYpID0gZGVmYXVsdDsKQEAgLTU3LDcgKzU5LDggQEAKIAogICAvLyBGb3J3YXJkaW5nIGNvbnN0cnVjdG9yIHRvIHRoZSBzZXQgb2YgQnVpbGRlciBjb25zdHJ1Y3RvcnMuCiAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgotICBQdW5jaFRocm91Z2hWaWRlb05vZGUoQXJncyYmLi4uIGFyZ3MpIDogZGF0YV8oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorICBleHBsaWNpdCBQdW5jaFRocm91Z2hWaWRlb05vZGUoQXJncyYmLi4uIGFyZ3MpCisgICAgICA6IGRhdGFfKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KIAogICB2b2lkIEFjY2VwdChOb2RlVmlzaXRvciogdmlzaXRvcikgb3ZlcnJpZGU7CiAgIG1hdGg6OlJlY3RGIEdldEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcl90cmVlL3JlbmRlcl90cmVlLmd5cCBiL2NvYmFsdC9yZW5kZXJfdHJlZS9yZW5kZXJfdHJlZS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkY2VkN2IuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcl90cmVlL3JlbmRlcl90cmVlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotCi0gICd0YXJnZXRzJzogWwotICAgICMgQ29tcGlsZXMgY29kZSByZWxhdGVkIHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSByZW5kZXIgdHJlZS4gIFRoZSByZW5kZXIKLSAgICAjIHRyZWUgaXMgdGhlIG91dHB1dCBvZiB0aGUgbGF5b3V0IHN0YWdlIGFuZCB0aGUgaW5wdXQgdG8gdGhlIHJlbmRlcmluZwotICAgICMgc3RhZ2UuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3JlbmRlcl90cmVlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYmx1cl9maWx0ZXIuaCcsCi0gICAgICAgICdib3JkZXIuY2MnLAotICAgICAgICAnYm9yZGVyLmgnLAotICAgICAgICAnYnJ1c2guY2MnLAotICAgICAgICAnYnJ1c2guaCcsCi0gICAgICAgICdicnVzaF92aXNpdG9yLmgnLAotICAgICAgICAnY2hpbGRfaXRlcmF0b3IuaCcsCi0gICAgICAgICdjb2xvcl9yZ2JhLmgnLAotICAgICAgICAnY2xlYXJfcmVjdF9ub2RlLmNjJywKLSAgICAgICAgJ2NsZWFyX3JlY3Rfbm9kZS5oJywKLSAgICAgICAgJ2NvbXBvc2l0aW9uX25vZGUuY2MnLAotICAgICAgICAnY29tcG9zaXRpb25fbm9kZS5oJywKLSAgICAgICAgJ2R1bXBfcmVuZGVyX3RyZWVfdG9fc3RyaW5nLmNjJywKLSAgICAgICAgJ2ZpbHRlcl9ub2RlLmNjJywKLSAgICAgICAgJ2ZpbHRlcl9ub2RlLmgnLAotICAgICAgICAnZm9udC5oJywKLSAgICAgICAgJ2ZvbnRfcHJvdmlkZXIuaCcsCi0gICAgICAgICdnbHlwaC5oJywKLSAgICAgICAgJ2dseXBoX2J1ZmZlci5oJywKLSAgICAgICAgJ2xvdHRpZV9hbmltYXRpb24uaCcsCi0gICAgICAgICdpbWFnZV9ub2RlLmNjJywKLSAgICAgICAgJ2ltYWdlX25vZGUuaCcsCi0gICAgICAgICdsb3R0aWVfbm9kZS5jYycsCi0gICAgICAgICdsb3R0aWVfbm9kZS5oJywKLSAgICAgICAgJ21hcF90b19tZXNoX2ZpbHRlci5oJywKLSAgICAgICAgJ21hdHJpeF90cmFuc2Zvcm1fM2Rfbm9kZS5jYycsCi0gICAgICAgICdtYXRyaXhfdHJhbnNmb3JtXzNkX25vZGUuaCcsCi0gICAgICAgICdtYXRyaXhfdHJhbnNmb3JtX25vZGUuY2MnLAotICAgICAgICAnbWF0cml4X3RyYW5zZm9ybV9ub2RlLmgnLAotICAgICAgICAnbWVzaC5oJywKLSAgICAgICAgJ25vZGUuaCcsCi0gICAgICAgICdub2RlLmNjJywKLSAgICAgICAgJ25vZGVfdmlzaXRvci5oJywKLSAgICAgICAgJ29wYWNpdHlfZmlsdGVyLmgnLAotICAgICAgICAncHVuY2hfdGhyb3VnaF92aWRlb19ub2RlLmNjJywKLSAgICAgICAgJ3JlY3Rfbm9kZS5jYycsCi0gICAgICAgICdyZWN0X25vZGUuaCcsCi0gICAgICAgICdyZWN0X3NoYWRvd19ub2RlLmNjJywKLSAgICAgICAgJ3JlY3Rfc2hhZG93X25vZGUuaCcsCi0gICAgICAgICdyZXNvdXJjZV9wcm92aWRlci5oJywKLSAgICAgICAgJ3Jlc291cmNlX3Byb3ZpZGVyX3N0dWIuaCcsCi0gICAgICAgICdyb3VuZGVkX2Nvcm5lcnMuaCcsCi0gICAgICAgICdyb3VuZGVkX2Nvcm5lcnMuY2MnLAotICAgICAgICAncm91bmRlZF92aWV3cG9ydF9maWx0ZXIuaCcsCi0gICAgICAgICdzaGFkb3cuaCcsCi0gICAgICAgICd0ZXh0X25vZGUuY2MnLAotICAgICAgICAndGV4dF9ub2RlLmgnLAotICAgICAgICAndHlwZWZhY2UuaCcsCi0gICAgICAgICd2aWV3cG9ydF9maWx0ZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21hdGgvbWF0aC5neXA6bWF0aCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9vdHMvb3RzLmd5cDpvdHMnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgIyBTdXBwb3J0IGZvciBkZXNjcmliaW5nIGFuZCBhcHBseWluZyByZW5kZXIgdHJlZSBhbmltYXRpb25zLgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhbmltYXRpb25zJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYW5pbWF0aW9ucy9hbmltYXRlX25vZGUuY2MnLAotICAgICAgICAnYW5pbWF0aW9ucy9hbmltYXRlX25vZGUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3JlbmRlcl90cmVlJywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgICMgVGVzdHMgdGhlIHJlbmRlciB0cmVlIHV0aWxpdHkgZnVuY3Rpb25hbGl0eS4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncmVuZGVyX3RyZWVfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2FuaW1hdGlvbnMvYW5pbWF0ZV9ub2RlX3Rlc3QuY2MnLAotICAgICAgICAnYnJ1c2hfdmlzaXRvcl90ZXN0LmNjJywKLSAgICAgICAgJ2NvbG9yX3JnYmFfdGVzdC5jYycsCi0gICAgICAgICdub2RlX3Zpc2l0b3JfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJ2FuaW1hdGlvbnMnLAotICAgICAgICAncmVuZGVyX3RyZWUnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgIyBEZXBsb3lzIHRoZSByZW5kZXIgdHJlZSBsaWJyYXJ5IHRlc3Qgb24gYSBjb25zb2xlLgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZW5kZXJfdHJlZV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdyZW5kZXJfdHJlZV90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3JlbmRlcl90cmVlX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL0JVSUxELmduIGIvY29iYWx0L3JlbmRlcmVyL0JVSUxELmduCmluZGV4IDhjZjVmMTguLjJmYmM1OGIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9CVUlMRC5nbgorKysgYi9jb2JhbHQvcmVuZGVyZXIvQlVJTEQuZ24KQEAgLTY0LDYgKzY0LDcgQEAKICAgICAiLy9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhOmhhcmR3YXJlX3Jhc3Rlcml6ZXIiLAogICAgICIvL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWE6c29mdHdhcmVfcmFzdGVyaXplciIsCiAgICAgIi8vY29iYWx0L3N5c3RlbV93aW5kb3ciLAorICAgICIvL2NvYmFsdC93YXRjaGRvZyIsCiAgICAgIi8vbmIiLAogICAgICIvL3N0YXJib2FyZDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5IiwKICAgXQpAQCAtMTI1LDkgKzEyNiw2IEBACiAgIGRlcHMgPSBbCiAgICAgIjpyZW5kZXJfdHJlZV9waXhlbF90ZXN0ZXIiLAogICAgICI6cmVuZGVyZXIiLAotICAgICI6cmVuZGVyZXJfY29weV9sb3R0aWVfdGVzdF9kYXRhIiwKLSAgICAiOnJlbmRlcmVyX2NvcHlfdGVzdF9kYXRhIiwKLSAgICAiOnJlbmRlcmVyX2Rvd25sb2FkX2xvdHRpZV90ZXN0X2RhdGEiLAogICAgICI6cmVuZGVyZXJfaGVhZGVyc19vbmx5IiwKICAgICAiLy9iYXNlOmkxOG4iLAogICAgICIvL2NvYmFsdC9iYXNlIiwKQEAgLTE0MSw5ICsxMzksMjYgQEAKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgICAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1dWMiLAogICBdCisKKyAgZGF0YV9kZXBzID0gWworICAgICI6cmVuZGVyZXJfY29weV9sb3R0aWVfdGVzdF9kYXRhIiwKKyAgICAiOnJlbmRlcmVyX2NvcHlfdGVzdF9kYXRhIiwKKyAgICAiOnJlbmRlcmVyX2Rvd25sb2FkX2xvdHRpZV90ZXN0X2RhdGEiLAorICBdCisKKyAgY29udGVudF9kZXBzID0gZGF0YV9kZXBzCisgIGlmIChjb2JhbHRfZm9udF9wYWNrYWdlID09ICJlbXB0eSIpIHsKKyAgICBjb250ZW50X2RlcHMgKz0gWyAiLy9jb2JhbHQvY29udGVudC9mb250czpjb3B5X2ZvbnRfZGF0YSIgXQorICB9IGVsc2UgeworICAgIGNvbnRlbnRfZGVwcyArPSBbCisgICAgICAiLy9jb2JhbHQvY29udGVudC9mb250czpjb3B5X2ZvbnRzIiwKKyAgICAgICIvL2NvYmFsdC9jb250ZW50L2ZvbnRzOmZvbnRzX3htbCIsCisgICAgXQorICB9CiB9CiAKIGNvcHkoInJlbmRlcmVyX2NvcHlfdGVzdF9kYXRhIikgeworICBpbnN0YWxsX2NvbnRlbnQgPSB0cnVlCiAgIHNvdXJjZXMgPSBbCiAgICAgInJhc3Rlcml6ZXIvdGVzdGRhdGEvMnhTcGVlZExvdHRpZUFuaW1hdGlvblRlc3QtZXhwZWN0ZWQucG5nIiwKICAgICAicmFzdGVyaXplci90ZXN0ZGF0YS9BbG1vc3RDaXJjbGVWaWFSb3VuZGVkQ29ybmVycy1leHBlY3RlZC5wbmciLApAQCAtNDc4LDYgKzQ5Myw4IEBACiBfbG90dGllX3Jlc291cmNlX3BhdGggPSAicmFzdGVyaXplci90ZXN0ZGF0YS9sb3R0aWVfY292ZXJhZ2UiCiAKIGNvcHkoInJlbmRlcmVyX2NvcHlfbG90dGllX3Rlc3RfZGF0YSIpIHsKKyAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorCiAgICMgVE9ETyhiLzIxMTkwOTM0Mik6IExpc3QgdGhlIGluZGl2aWR1YWwgZmlsZXMgdGhhdCBhcmUgdG8gYmUgY29waWVkLgogICBzb3VyY2VzID0gWyBfbG90dGllX3Jlc291cmNlX3BhdGggXQogICBkZXBzID0gWyAiOnJlbmRlcmVyX2Rvd25sb2FkX2xvdHRpZV90ZXN0X2RhdGEiIF0KQEAgLTQ4Niw2ICs1MDMsOCBAQAogfQogCiBhY3Rpb24oInJlbmRlcmVyX2Rvd25sb2FkX2xvdHRpZV90ZXN0X2RhdGEiKSB7CisgIGluc3RhbGxfY29udGVudCA9IHRydWUKKwogICBzY3JpcHQgPSAiLy90b29scy9kb3dubG9hZF9mcm9tX2djcy5weSIKIAogICBpbnB1dHMgPSBbCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9CVUlMRC5nbiBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL0JVSUxELmduCmluZGV4IDkyZjIzNWIuLmJlYjNjYTIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL0JVSUxELmduCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL0JVSUxELmduCkBAIC0zOCw1ICszOCw0IEBACiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvYmFja2VuZC5neXAgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9iYWNrZW5kLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IwMTJlMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9iYWNrZW5kLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZW5kZXJlcl9iYWNrZW5kJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ3JhcGhpY3NfY29udGV4dC5jYycsCi0gICAgICAgICdncmFwaGljc19jb250ZXh0LmgnLAotICAgICAgICAncmVuZGVyX3RhcmdldC5jYycsCi0gICAgICAgICdyZW5kZXJfdGFyZ2V0LmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tYXRoL21hdGguZ3lwOm1hdGgnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvc3RhcmJvYXJkL3BsYXRmb3JtX2JhY2tlbmQuZ3lwOnJlbmRlcmVyX3BsYXRmb3JtX2JhY2tlbmQnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV9tYXBfdG9fbWVzaCAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcycgOiBbCi0gICAgICAgICAgICAnRU5BQkxFX01BUF9UT19NRVNIPTwoZW5hYmxlX21hcF90b19tZXNoKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dyYXBoaWNzX3N5c3RlbV90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ3JhcGhpY3Nfc3lzdGVtX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2JhY2tlbmQuZ3lwOnJlbmRlcmVyX2JhY2tlbmQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5neXA6c3lzdGVtX3dpbmRvdycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dyYXBoaWNzX3N5c3RlbV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdncmFwaGljc19zeXN0ZW1fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdncmFwaGljc19zeXN0ZW1fdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZGlzcGxheS5jYyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9kaXNwbGF5LmNjCmluZGV4IGJkZDg1ZjkuLmU5Mzk4Y2MgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9kaXNwbGF5LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9kaXNwbGF5LmNjCkBAIC0xMyw3ICsxMyw2IEBACiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL2Rpc3BsYXkuaCIKIApAQCAtOTMsNSArOTIsMyBAQAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9lZ2xfYmFja2VuZC5neXAgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZWdsX2JhY2tlbmQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI4OTY3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9lZ2xfYmFja2VuZC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWdsX2JhY2tlbmQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Rpc3BsYXkuY2MnLAotICAgICAgICAnZGlzcGxheS5oJywKLSAgICAgICAgJ2ZyYW1lYnVmZmVyLmgnLAotICAgICAgICAnZnJhbWVidWZmZXIuY2MnLAotICAgICAgICAnZnJhbWVidWZmZXJfcmVuZGVyX3RhcmdldC5oJywKLSAgICAgICAgJ2dyYXBoaWNzX2NvbnRleHQuY2MnLAotICAgICAgICAnZ3JhcGhpY3NfY29udGV4dC5oJywKLSAgICAgICAgJ2dyYXBoaWNzX3N5c3RlbS5jYycsCi0gICAgICAgICdncmFwaGljc19zeXN0ZW0uaCcsCi0gICAgICAgICdwYnVmZmVyX3JlbmRlcl90YXJnZXQuY2MnLAotICAgICAgICAncGJ1ZmZlcl9yZW5kZXJfdGFyZ2V0LmgnLAotICAgICAgICAncmVuZGVyX3RhcmdldC5oJywKLSAgICAgICAgJ3Jlc291cmNlX2NvbnRleHQuY2MnLAotICAgICAgICAncmVzb3VyY2VfY29udGV4dC5oJywKLSAgICAgICAgJ3RleHR1cmUuY2MnLAotICAgICAgICAndGV4dHVyZS5oJywKLSAgICAgICAgJ3RleHR1cmVfZGF0YS5jYycsCi0gICAgICAgICd0ZXh0dXJlX2RhdGEuaCcsCi0gICAgICAgICd0ZXh0dXJlX2RhdGFfY3B1LmNjJywKLSAgICAgICAgJ3RleHR1cmVfZGF0YV9jcHUuaCcsCi0gICAgICAgICd0ZXh0dXJlX2RhdGFfcGJvLmNjJywKLSAgICAgICAgJ3RleHR1cmVfZGF0YV9wYm8uaCcsCi0gICAgICAgICd1dGlscy5jYycsCi0gICAgICAgICd1dGlscy5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5neXA6Y29uZmlndXJhdGlvbicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkX2hlYWRlcnNfb25seS5neXA6c3RhcmJvYXJkX2hlYWRlcnNfb25seScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZnJhbWVidWZmZXIuY2MgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZnJhbWVidWZmZXIuY2MKaW5kZXggMTZhMjBlNy4uNjM0OGU4MSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL2ZyYW1lYnVmZmVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9mcmFtZWJ1ZmZlci5jYwpAQCAtMTMsNyArMTMsNiBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9mcmFtZWJ1ZmZlci5oIgogCkBAIC0zMywxMCArMzIsMTMgQEAKICAgICA6IGdyYXBoaWNzX2NvbnRleHRfKGdyYXBoaWNzX2NvbnRleHQpLCBzaXplXyhzaXplKSwgZXJyb3JfKGZhbHNlKSB7CiAgIEdyYXBoaWNzQ29udGV4dEVHTDo6U2NvcGVkTWFrZUN1cnJlbnQgc2NvcGVkX21ha2VfY3VycmVudChncmFwaGljc19jb250ZXh0Xyk7CiAKKyAgU2JHbEVudW0gZ2xfZXJyb3I7CisKICAgLy8gQ3JlYXRlIHRoZSBmcmFtZWJ1ZmZlciBvYmplY3QuCiAgIEdMX0NBTExfU0lNUExFKGdsR2VuRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcl9oYW5kbGVfKSk7Ci0gIGlmIChHTF9DQUxMX1NJTVBMRShnbEdldEVycm9yKCkpICE9IEdMX05PX0VSUk9SKSB7Ci0gICAgTE9HKEVSUk9SKSA8PCAiRXJyb3IgY3JlYXRpbmcgbmV3IGZyYW1lYnVmZmVyLiI7CisgIGdsX2Vycm9yID0gR0xfQ0FMTF9TSU1QTEUoZ2xHZXRFcnJvcigpKTsKKyAgaWYgKGdsX2Vycm9yICE9IEdMX05PX0VSUk9SKSB7CisgICAgTE9HKEVSUk9SKSA8PCAiRXJyb3IgY3JlYXRpbmcgbmV3IGZyYW1lYnVmZmVyLiBFcnJvciA9ICIgPDwgZ2xfZXJyb3I7CiAgICAgZXJyb3JfID0gdHJ1ZTsKICAgICByZXR1cm47CiAgIH0KQEAgLTQ1LDggKzQ3LDkgQEAKICAgLy8gQ3JlYXRlIGFuZCBhdHRhY2ggYSB0ZXh0dXJlIGZvciBjb2xvci4KICAgR0x1aW50IGNvbG9yX2hhbmRsZSA9IDA7CiAgIEdMX0NBTExfU0lNUExFKGdsR2VuVGV4dHVyZXMoMSwgJmNvbG9yX2hhbmRsZSkpOwotICBpZiAoR0xfQ0FMTF9TSU1QTEUoZ2xHZXRFcnJvcigpKSAhPSBHTF9OT19FUlJPUikgewotICAgIExPRyhFUlJPUikgPDwgIkVycm9yIGNyZWF0aW5nIG5ldyB0ZXh0dXJlLiI7CisgIGdsX2Vycm9yID0gR0xfQ0FMTF9TSU1QTEUoZ2xHZXRFcnJvcigpKTsKKyAgaWYgKGdsX2Vycm9yICE9IEdMX05PX0VSUk9SKSB7CisgICAgTE9HKEVSUk9SKSA8PCAiRXJyb3IgY3JlYXRpbmcgbmV3IHRleHR1cmUuIEVycm9yID0gIiA8PCBnbF9lcnJvcjsKICAgICBlcnJvcl8gPSB0cnVlOwogICAgIEdMX0NBTEwoZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApKTsKICAgICBHTF9DQUxMKGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmcmFtZWJ1ZmZlcl9oYW5kbGVfKSk7CkBAIC0xNDgsNSArMTUxLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSBiYWNrZW5kCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZ3JhcGhpY3NfY29udGV4dC5jYyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19jb250ZXh0LmNjCmluZGV4IDQ4MGFjNmQuLmQ0NjM4OWQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19jb250ZXh0LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19jb250ZXh0LmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgpAQCAtMzMsOCArMzAsOSBAQAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGEuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvZWdsX2FuZF9nbGVzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKIAotI2lmIGRlZmluZWQoR0xFUzNfU1VQUE9SVEVEKSAmJiBTQl9BUElfVkVSU0lPTiA+PSAxMgorI2lmIGRlZmluZWQoR0xFUzNfU1VQUE9SVEVEKQogI2Vycm9yICJTdXBwb3J0IGZvciBnbGVzMyBmZWF0dXJlcyBoYXMgYmVlbiBkZXByZWNhdGVkLiIKICNlbmRpZgogCkBAIC02MSw5ICs1OSw2IEBACiAgICAgICBkaXNwbGF5XyhkaXNwbGF5KSwKICAgICAgIGNvbmZpZ18oY29uZmlnKSwKICAgICAgIGlzX2N1cnJlbnRfKGZhbHNlKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgY29udGV4dF8gPSBDcmVhdGVHTEVTM0NvbnRleHQoZGlzcGxheSwgY29uZmlnLCByZXNvdXJjZV9jb250ZXh0LT5jb250ZXh0KCkpOwotI2Vsc2UKICAgLy8gQ3JlYXRlIGFuIE9wZW5HTCBFUyAyLjAgY29udGV4dC4KICAgRUdMaW50IGNvbnRleHRfYXR0cmliX2xpc3RbXSA9IHsKICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSwKQEAgLTcxLDcgKzY2LDYgQEAKICAgY29udGV4dF8gPSBFR0xfQ0FMTF9TSU1QTEUoCiAgICAgICBlZ2xDcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRfYXR0cmliX2xpc3QpKTsKICAgQ0hFQ0tfRVEoRUdMX1NVQ0NFU1MsIEVHTF9DQUxMX1NJTVBMRShlZ2xHZXRFcnJvcigpKSk7Ci0jZW5kaWYKIAogICAvLyBDcmVhdGUgYSBkdW1teSBFR0xTdXJmYWNlIG9iamVjdCB0byBiZSBhc3NpZ25lZCBhcyB0aGUgdGFyZ2V0IHN1cmZhY2UKICAgLy8gd2hlbiB3ZSBuZWVkIHRvIG1ha2UgT3BlbkdMIGNhbGxzIHRoYXQgZG8gbm90IGRlcGVuZCBvbiBhIHN1cmZhY2UgKGUuZy4KQEAgLTU3Nyw1ICs1NzEsMyBAQAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19zeXN0ZW0uY2MgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZ3JhcGhpY3Nfc3lzdGVtLmNjCmluZGV4IGQyNjQyYTUuLmUyM2NmOWMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19zeXN0ZW0uY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL2dyYXBoaWNzX3N5c3RlbS5jYwpAQCAtMTIsMTkgKzEyLDE1IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQorI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9ncmFwaGljc19zeXN0ZW0uaCIKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx1dGlsaXR5PgogCi0jaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL2dyYXBoaWNzX3N5c3RlbS5oIgotCiAjaW5jbHVkZSAiYmFzZS9kZWJ1Zy9sZWFrX2Fubm90YXRpb25zLmgiCiAjaWYgZGVmaW5lZChFTkFCTEVfR0xJTVBfVFJBQ0lORykKICNpbmNsdWRlICJiYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCiAjZW5kaWYKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL29wdGlvbmFsLmgiCiAKICNpbmNsdWRlICJjb2JhbHQvY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL2Rpc3BsYXkuaCIKQEAgLTM4LDEzICszNCwxMyBAQAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKIAogI2lmIGRlZmluZWQoR0xFUzNfU1VQUE9SVEVEKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjZXJyb3IgIlN1cHBvcnQgZm9yIGdsZXMzIGZlYXR1cmVzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIgotI2VuZGlmCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9wYm8uaCIKICNlbHNlCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9jcHUuaCIKICNlbmRpZgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vb3B0aW9uYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSByZW5kZXJlciB7CkBAIC0xNTMsNiArMTQ5LDcgQEAKICAgICAvLyBtZXNhIGVnbCBkcml2ZXJzIHN0aWxsIGxlYWsgbWVtb3J5LgogICAgIEFOTk9UQVRFX1NDT1BFRF9NRU1PUllfTEVBSzsKICAgICBFR0xfQ0FMTChlZ2xJbml0aWFsaXplKGRpc3BsYXlfLCBOVUxMLCBOVUxMKSk7CisgICAgTE9HKElORk8pIDw8ICJlZ2xJbml0aWFsaXplIHJldHVybmVkICIgPDwgRUdMX0NBTExfU0lNUExFKGVnbEdldEVycm9yKCkpOwogICB9CiAKICAgLy8gU2V0dXAgb3VyIGNvbmZpZ3VyYXRpb24gdG8gc3VwcG9ydCBSR0JBIGFuZCBjb21wYXRpYmlsaXR5IHdpdGggUEJ1ZmZlcgpAQCAtMTYxLDI2ICsxNTgsMTkgQEAKICAgICAgIGNvbmZpZ3VyYXRpb246OkNvbmZpZ3VyYXRpb246OkdldEluc3RhbmNlKCktPkNvYmFsdFJlbmRlckRpcnR5UmVnaW9uT25seSgpCiAgICAgICAgICAgPyBFR0xfV0lORE9XX0JJVCB8IEVHTF9QQlVGRkVSX0JJVCB8IEVHTF9TV0FQX0JFSEFWSU9SX1BSRVNFUlZFRF9CSVQKICAgICAgICAgICA6IEVHTF9XSU5ET1dfQklUIHwgRUdMX1BCVUZGRVJfQklUOwotICBFR0xpbnQgYXR0cmlidXRlX2xpc3RbXSA9IHsKLSAgICBFR0xfU1VSRkFDRV9UWVBFLCAgLy8gdGhpcyBtdXN0IGJlIGZpcnN0Ci0gICAgZWdsX2JpdCwKLSAgICBFR0xfUkVEX1NJWkUsCi0gICAgOCwKLSAgICBFR0xfR1JFRU5fU0laRSwKLSAgICA4LAotICAgIEVHTF9CTFVFX1NJWkUsCi0gICAgOCwKLSAgICBFR0xfQUxQSEFfU0laRSwKLSAgICA4LAotICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgICBFR0xfT1BFTkdMX0VTM19CSVQsCi0jZWxzZQotICAgIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSNlbmRpZiAgLy8gI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYKLSAgICAgICAgLy8gZGVmaW5lZChHTEVTM19TVVBQT1JURUQpCi0gICAgRUdMX05PTkUKLSAgfTsKKyAgRUdMaW50IGF0dHJpYnV0ZV9saXN0W10gPSB7RUdMX1NVUkZBQ0VfVFlQRSwgIC8vIHRoaXMgbXVzdCBiZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2xfYml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfQkxVRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9ORX07CiAKICAgYmFzZTo6T3B0aW9uYWw8Q2hvb3NlQ29uZmlnUmVzdWx0PiBjaG9vc2VfY29uZmlnX3Jlc3VsdHMgPQogICAgICAgQ2hvb3NlQ29uZmlnKGRpc3BsYXlfLCBhdHRyaWJ1dGVfbGlzdCwgc3lzdGVtX3dpbmRvdyk7CkBAIC0yMDcsMTAgKzE5Nyw2IEBACiAgIGNvbmZpZ18gPSBjaG9vc2VfY29uZmlnX3Jlc3VsdHMtPmNvbmZpZzsKICAgc3lzdGVtX3dpbmRvd18gPSBzeXN0ZW1fd2luZG93OwogICB3aW5kb3dfc3VyZmFjZV8gPSBjaG9vc2VfY29uZmlnX3Jlc3VsdHMtPndpbmRvd19zdXJmYWNlOwotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgcmVzb3VyY2VfY29udGV4dF8uZW1wbGFjZShkaXNwbGF5XywgY29uZmlnXyk7Ci0jZW5kaWYKIH0KIAogR3JhcGhpY3NTeXN0ZW1FR0w6On5HcmFwaGljc1N5c3RlbUVHTCgpIHsKQEAgLTIyMSw2ICsyMDcsNyBAQAogICB9CiAKICAgRUdMX0NBTExfU0lNUExFKGVnbFRlcm1pbmF0ZShkaXNwbGF5XykpOworICBMT0coSU5GTykgPDwgImVnbFRlcm1pbmF0ZSByZXR1cm5lZCAiIDw8IEVHTF9DQUxMX1NJTVBMRShlZ2xHZXRFcnJvcigpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPERpc3BsYXk+IEdyYXBoaWNzU3lzdGVtRUdMOjpDcmVhdGVEaXNwbGF5KApAQCAtMjQyLDI5ICsyMjksMjAgQEAKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gR3JhcGhpY3NTeXN0ZW1FR0w6OkNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpIHsKLS8vIElmIEdMRVMzIGlzIHN1cHBvcnRlZCwgd2Ugd2lsbCBtYWtlIHVzZSBvZiBQQk9zIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgZm9yCi0vLyB0ZXh0dXJlIGRhdGEgYW5kIHBvcHVsYXRlIHRoZW0gb24gc2VwYXJhdGUgdGhyZWFkcy4gIEluIG9yZGVyIHRvIGFjY2VzcwotLy8gdGhhdCBkYXRhIGZyb20gZ3JhcGhpY3MgY29udGV4dHMgY3JlYXRlZCB0aHJvdWdoIHRoaXMgbWV0aG9kLCB3ZSBtdXN0Ci0vLyBlbmFibGUgc2hhcmluZyBiZXR3ZWVuIHRoZW0gYW5kIHRoZSByZXNvdXJjZSBjb250ZXh0LCB3aGljaCBpcyB3aHkgd2UKLS8vIG11c3QgcGFzcyBpdCBpbiBoZXJlLgotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgZGVmaW5lZChHTEVTM19TVVBQT1JURUQpCi0gIFJlc291cmNlQ29udGV4dCogcmVzb3VyY2VfY29udGV4dCA9ICYocmVzb3VyY2VfY29udGV4dF8udmFsdWUoKSk7Ci0jZWxzZQorICAvLyBJZiBHTEVTMyBpcyBzdXBwb3J0ZWQsIHdlIHdpbGwgbWFrZSB1c2Ugb2YgUEJPcyB0byBhbGxvY2F0ZSBidWZmZXJzIGZvcgorICAvLyB0ZXh0dXJlIGRhdGEgYW5kIHBvcHVsYXRlIHRoZW0gb24gc2VwYXJhdGUgdGhyZWFkcy4gIEluIG9yZGVyIHRvIGFjY2VzcworICAvLyB0aGF0IGRhdGEgZnJvbSBncmFwaGljcyBjb250ZXh0cyBjcmVhdGVkIHRocm91Z2ggdGhpcyBtZXRob2QsIHdlIG11c3QKKyAgLy8gZW5hYmxlIHNoYXJpbmcgYmV0d2VlbiB0aGVtIGFuZCB0aGUgcmVzb3VyY2UgY29udGV4dCwgd2hpY2ggaXMgd2h5IHdlCisgIC8vIG11c3QgcGFzcyBpdCBpbiBoZXJlLgogICBSZXNvdXJjZUNvbnRleHQqIHJlc291cmNlX2NvbnRleHQgPSBOVUxMOwotI2VuZGlmCiAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PigKICAgICAgIG5ldyBHcmFwaGljc0NvbnRleHRFR0wodGhpcywgZGlzcGxheV8sIGNvbmZpZ18sIHJlc291cmNlX2NvbnRleHQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVEYXRhRUdMPiBHcmFwaGljc1N5c3RlbUVHTDo6QWxsb2NhdGVUZXh0dXJlRGF0YSgKICAgICBjb25zdCBtYXRoOjpTaXplJiBzaXplLCBHTGVudW0gZm9ybWF0KSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVEYXRhRUdMPiB0ZXh0dXJlX2RhdGEoCi0gICAgICBuZXcgVGV4dHVyZURhdGFQQk8oJihyZXNvdXJjZV9jb250ZXh0Xy52YWx1ZSgpKSwgc2l6ZSwgZm9ybWF0KSk7Ci0jZWxzZQogICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZURhdGFFR0w+IHRleHR1cmVfZGF0YSgKICAgICAgIG5ldyBUZXh0dXJlRGF0YUNQVShzaXplLCBmb3JtYXQpKTsKLSNlbmRpZgogICBpZiAodGV4dHVyZV9kYXRhLT5DcmVhdGlvbkVycm9yKCkpIHsKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVEYXRhRUdMPigpOwogICB9IGVsc2UgewpAQCAtMjc1LDEzICsyNTMsOCBAQAogc3RkOjp1bmlxdWVfcHRyPFJhd1RleHR1cmVNZW1vcnlFR0w+CiBHcmFwaGljc1N5c3RlbUVHTDo6QWxsb2NhdGVSYXdUZXh0dXJlTWVtb3J5KHNpemVfdCBzaXplX2luX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ25tZW50KSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSYXdUZXh0dXJlTWVtb3J5RUdMPihuZXcgUmF3VGV4dHVyZU1lbW9yeVBCTygKLSAgICAgICYocmVzb3VyY2VfY29udGV4dF8udmFsdWUoKSksIHNpemVfaW5fYnl0ZXMsIGFsaWdubWVudCkpOwotI2Vsc2UKICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSYXdUZXh0dXJlTWVtb3J5RUdMPigKICAgICAgIG5ldyBSYXdUZXh0dXJlTWVtb3J5Q1BVKHNpemVfaW5fYnl0ZXMsIGFsaWdubWVudCkpOwotI2VuZGlmCiB9CiAKIG1hdGg6OlNpemUgR3JhcGhpY3NTeXN0ZW1FR0w6OkdldFdpbmRvd1NpemUoKSBjb25zdCB7CkBAIC0yOTEsNSArMjY0LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSBiYWNrZW5kCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvcGJ1ZmZlcl9yZW5kZXJfdGFyZ2V0LmNjIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3BidWZmZXJfcmVuZGVyX3RhcmdldC5jYwppbmRleCAzMjQ3NjIxLi40M2MyNDk5IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvcGJ1ZmZlcl9yZW5kZXJfdGFyZ2V0LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9wYnVmZmVyX3JlbmRlcl90YXJnZXQuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvcGJ1ZmZlcl9yZW5kZXJfdGFyZ2V0LmgiCiAKQEAgLTI5LDExICsyOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlNpemUmIGRpbWVuc2lvbnMpCiAgICAgOiBkaXNwbGF5XyhkaXNwbGF5KSwgY29uZmlnXyhjb25maWcpLCBzaXplXyhkaW1lbnNpb25zKSB7CiAgIEVHTGludCBzdXJmYWNlX2F0dHJpYl9saXN0W10gPSB7Ci0gICAgICBFR0xfV0lEVEgsIGRpbWVuc2lvbnMud2lkdGgoKSwKLSAgICAgIEVHTF9IRUlHSFQsIGRpbWVuc2lvbnMuaGVpZ2h0KCksCi0gICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsIEVHTF9URVhUVVJFXzJELAotICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCBFR0xfVEVYVFVSRV9SR0JBLAotICAgICAgRUdMX05PTkUsCisgICAgICBFR0xfV0lEVEgsICAgICAgICAgICBkaW1lbnNpb25zLndpZHRoKCksIEVHTF9IRUlHSFQsCisgICAgICBkaW1lbnNpb25zLmhlaWdodCgpLCBFR0xfVEVYVFVSRV9UQVJHRVQsIEVHTF9URVhUVVJFXzJELAorICAgICAgRUdMX1RFWFRVUkVfRk9STUFULCAgRUdMX1RFWFRVUkVfUkdCQSwgICBFR0xfTk9ORSwKICAgfTsKICAgLy8gV2hlbiBhIGR1bW15IDAtYXJlYSByZW5kZXIgdGFyZ2V0IGlzIHJlcXVlc3RlZCwgaXQgd2lsbCBub3QgYmUgdXNlZCBhcyBhCiAgIC8vIGRyYXdpbmcgdGFyZ2V0IGFuZCB3ZSB0aGVyZWZvcmUgZG9uJ3QgcmVxdWlyZSBmb3IgaXQgdG8gYmUgYSB0ZXh0dXJlLgpAQCAtNDYsMTYgKzQzLDE2IEBACiAKICAgc3VyZmFjZV8gPSBFR0xfQ0FMTF9TSU1QTEUoCiAgICAgICBlZ2xDcmVhdGVQYnVmZmVyU3VyZmFjZShkaXNwbGF5XywgY29uZmlnXywgc3VyZmFjZV9hdHRyaWJfbGlzdCkpOwotICBpZiAoRUdMX0NBTExfU0lNUExFKGVnbEdldEVycm9yKCkpICE9IEVHTF9TVUNDRVNTKSB7CisgIFNiRWdsSW50MzIgZWdsX2Vycm9yID0gRUdMX0NBTExfU0lNUExFKGVnbEdldEVycm9yKCkpOworICBpZiAoZWdsX2Vycm9yICE9IEVHTF9TVUNDRVNTKSB7CiAgICAgc3VyZmFjZV8gPSBFR0xfTk9fU1VSRkFDRTsKKyAgICBMT0coSU5GTykgPDwgImVnbENyZWF0ZVBidWZmZXJTdXJmYWNlIHJldHVybmVkIGVycm9yICIgPDwgZWdsX2Vycm9yOwogICB9CiB9CiAKIGNvbnN0IG1hdGg6OlNpemUmIFBCdWZmZXJSZW5kZXJUYXJnZXRFR0w6OkdldFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQogCi1FR0xTdXJmYWNlIFBCdWZmZXJSZW5kZXJUYXJnZXRFR0w6OkdldFN1cmZhY2UoKSBjb25zdCB7Ci0gIHJldHVybiBzdXJmYWNlXzsKLX0KK0VHTFN1cmZhY2UgUEJ1ZmZlclJlbmRlclRhcmdldEVHTDo6R2V0U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIHN1cmZhY2VfOyB9CiAKIFBCdWZmZXJSZW5kZXJUYXJnZXRFR0w6On5QQnVmZmVyUmVuZGVyVGFyZ2V0RUdMKCkgewogICBpZiAoc3VyZmFjZV8gIT0gRUdMX05PX1NVUkZBQ0UpIHsKQEAgLTY2LDUgKzYzLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSBiYWNrZW5kCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvcmVzb3VyY2VfY29udGV4dC5jYyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9yZXNvdXJjZV9jb250ZXh0LmNjCmluZGV4IDdkMWU4ODYuLmEzOTdlNmQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9yZXNvdXJjZV9jb250ZXh0LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC9yZXNvdXJjZV9jb250ZXh0LmNjCkBAIC0xMyw3ICsxMyw2IEBACiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3Jlc291cmNlX2NvbnRleHQuaCIKIApAQCAtNjAsNyArNTksNyBAQAogICBmdW5jdGlvbi5SdW4oKTsKICAgZXZlbnQtPlNpZ25hbCgpOwogfQotfQorfSAgLy8gbmFtZXNwYWNlCiAKIHZvaWQgUmVzb3VyY2VDb250ZXh0OjpSdW5TeW5jaHJvbm91c2x5V2l0aGluUmVzb3VyY2VDb250ZXh0KAogICAgIGNvbnN0IGJhc2U6OkNsb3N1cmUmIGZ1bmN0aW9uKSB7CkBAIC04NCw4ICs4Myw4IEBACiB9CiAKIHZvaWQgUmVzb3VyY2VDb250ZXh0OjpTaHV0ZG93bk9uUmVzb3VyY2VUaHJlYWQoKSB7Ci0gIEVHTF9DQUxMKGVnbE1ha2VDdXJyZW50KAotICAgICAgZGlzcGxheV8sIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpKTsKKyAgRUdMX0NBTEwoCisgICAgICBlZ2xNYWtlQ3VycmVudChkaXNwbGF5XywgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCkpOwogCiAgIEVHTF9DQUxMKGVnbERlc3Ryb3lTdXJmYWNlKGRpc3BsYXlfLCBudWxsX3N1cmZhY2VfKSk7CiAgIEVHTF9DQUxMKGVnbERlc3Ryb3lDb250ZXh0KGRpc3BsYXlfLCBjb250ZXh0XykpOwpAQCAtOTQsNSArOTMsMyBAQAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlLmNjIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmUuY2MKaW5kZXggYTBlZDA0MC4uOTAzOTM3NyAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmUuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmUuY2MKQEAgLTEyLDExICsxMiwxMCBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlLmgiCiAKKyNpbmNsdWRlIDx1dGlsaXR5PgorCiAjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZnJhbWVidWZmZXJfcmVuZGVyX3RhcmdldC5oIgpAQCAtMjcsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9jcHUuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvZWdsX2FuZF9nbGVzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKwogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSByZW5kZXJlciB7CiBuYW1lc3BhY2UgYmFja2VuZCB7CiAKIG5hbWVzcGFjZSB7Ci12b2lkIERvTm90aGluZygpIHsKLX0KK3ZvaWQgRG9Ob3RoaW5nKCkge30KIH0gIC8vIG5hbWVzcGFjZQogCiBUZXh0dXJlRUdMOjpUZXh0dXJlRUdMKEdyYXBoaWNzQ29udGV4dEVHTCogZ3JhcGhpY3NfY29udGV4dCwKQEAgLTcwLDkgKzcwLDggQEAKICAgICAgIHRhcmdldF8odGFyZ2V0KSwKICAgICAgIGRlbGV0ZV9mdW5jdGlvbl8oc3RkOjptb3ZlKGRlbGV0ZV9mdW5jdGlvbikpIHt9CiAKLVRleHR1cmVFR0w6OlRleHR1cmVFR0woCi0gICAgR3JhcGhpY3NDb250ZXh0RUdMKiBncmFwaGljc19jb250ZXh0LAotICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8UmVuZGVyVGFyZ2V0RUdMPiYgcmVuZGVyX3RhcmdldCkKK1RleHR1cmVFR0w6OlRleHR1cmVFR0woR3JhcGhpY3NDb250ZXh0RUdMKiBncmFwaGljc19jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPFJlbmRlclRhcmdldEVHTD4mIHJlbmRlcl90YXJnZXQpCiAgICAgOiBncmFwaGljc19jb250ZXh0XyhncmFwaGljc19jb250ZXh0KSwKICAgICAgIHNpemVfKHJlbmRlcl90YXJnZXQtPkdldFNpemUoKSksCiAgICAgICBmb3JtYXRfKEdMX1JHQkEpLApAQCAtODQsOCArODMsOCBAQAogICBpZiAocmVuZGVyX3RhcmdldC0+R2V0U3VyZmFjZSgpICE9IEVHTF9OT19TVVJGQUNFKSB7CiAgICAgLy8gVGhpcyBpcyBhIFBCdWZmZXJSZW5kZXJUYXJnZXRFR0wuIE5lZWQgdG8gYmluZCBhIHRleHR1cmUgdG8gdGhlIHN1cmZhY2UuCiAgICAgY29uc3QgUEJ1ZmZlclJlbmRlclRhcmdldEVHTCogcGJ1ZmZlcl90YXJnZXQgPQotICAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxjb25zdCBQQnVmZmVyUmVuZGVyVGFyZ2V0RUdMKj4KLSAgICAgICAgICAgIChyZW5kZXJfdGFyZ2V0LmdldCgpKTsKKyAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8Y29uc3QgUEJ1ZmZlclJlbmRlclRhcmdldEVHTCo+KAorICAgICAgICAgICAgcmVuZGVyX3RhcmdldC5nZXQoKSk7CiAKICAgICAvLyBGaXJzdCB3ZSBjcmVhdGUgdGhlIE9wZW5HTCB0ZXh0dXJlIG9iamVjdCBhbmQgbWFpbnRhaW4gYSBoYW5kbGUgdG8gaXQuCiAgICAgR0xfQ0FMTChnbEdlblRleHR1cmVzKDEsICZnbF9oYW5kbGVfKSk7CkBAIC05NiwxNSArOTUsMTQgQEAKICAgICAvLyB0ZXh0dXJlIG9iamVjdCwgZWZmZWN0aXZlbHkgYWxsb3dpbmcgdGhlIFBCTyByZW5kZXIgdGFyZ2V0IHRvIGJlIHVzZWQKICAgICAvLyBhcyBhIHRleHR1cmUgYnkgcmVmZXJlbmNpbmcgZ2xfaGFuZGxlXyBmcm9tIG5vdyBvbi4KICAgICBFR0xfQ0FMTChlZ2xCaW5kVGV4SW1hZ2UocGJ1ZmZlcl90YXJnZXQtPmRpc3BsYXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1ZmZlcl90YXJnZXQtPkdldFN1cmZhY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0JBQ0tfQlVGRkVSKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZmZXJfdGFyZ2V0LT5HZXRTdXJmYWNlKCksIEVHTF9CQUNLX0JVRkZFUikpOwogCiAgICAgR0xfQ0FMTChnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApKTsKICAgfSBlbHNlIHsKICAgICAvLyBUaGlzIGlzIGEgRnJhbWVidWZmZXJSZW5kZXJUYXJnZXRFR0wuIFdyYXAgaXRzIGNvbG9yIHRleHR1cmUgYXR0YWNobWVudC4KICAgICBjb25zdCBGcmFtZWJ1ZmZlclJlbmRlclRhcmdldEVHTCogZnJhbWVidWZmZXJfdGFyZ2V0ID0KLSAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8Y29uc3QgRnJhbWVidWZmZXJSZW5kZXJUYXJnZXRFR0wqPgotICAgICAgICAgICAgKHJlbmRlcl90YXJnZXQuZ2V0KCkpOworICAgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxjb25zdCBGcmFtZWJ1ZmZlclJlbmRlclRhcmdldEVHTCo+KAorICAgICAgICAgICAgcmVuZGVyX3RhcmdldC5nZXQoKSk7CiAKICAgICBjb25zdCBUZXh0dXJlRUdMKiBjb2xvcl9hdHRhY2htZW50ID0gZnJhbWVidWZmZXJfdGFyZ2V0LT5HZXRDb2xvclRleHR1cmUoKTsKICAgICBmb3JtYXRfID0gY29sb3JfYXR0YWNobWVudC0+R2V0Rm9ybWF0KCk7CkBAIC0xMjIsMTEgKzEyMCwxMCBAQAogICBpZiAoc291cmNlX3JlbmRlcl90YXJnZXRfICYmCiAgICAgICBzb3VyY2VfcmVuZGVyX3RhcmdldF8tPkdldFN1cmZhY2UoKSAhPSBFR0xfTk9fU1VSRkFDRSkgewogICAgIGNvbnN0IFBCdWZmZXJSZW5kZXJUYXJnZXRFR0wqIHBidWZmZXJfdGFyZ2V0ID0KLSAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8Y29uc3QgUEJ1ZmZlclJlbmRlclRhcmdldEVHTCo+Ci0gICAgICAgICAgICAoc291cmNlX3JlbmRlcl90YXJnZXRfLmdldCgpKTsKKyAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8Y29uc3QgUEJ1ZmZlclJlbmRlclRhcmdldEVHTCo+KAorICAgICAgICAgICAgc291cmNlX3JlbmRlcl90YXJnZXRfLmdldCgpKTsKICAgICBFR0xfQ0FMTChlZ2xSZWxlYXNlVGV4SW1hZ2UocGJ1ZmZlcl90YXJnZXQtPmRpc3BsYXkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ1ZmZlcl90YXJnZXQtPkdldFN1cmZhY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0JBQ0tfQlVGRkVSKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWZmZXJfdGFyZ2V0LT5HZXRTdXJmYWNlKCksIEVHTF9CQUNLX0JVRkZFUikpOwogICB9CiAKICAgaWYgKCFkZWxldGVfZnVuY3Rpb25fLmlzX251bGwoKSkgewpAQCAtMTM5LDUgKzEzNiwzIEBACiB9ICAvLyBuYW1lc3BhY2UgYmFja2VuZAogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YS5jYyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGEuY2MKaW5kZXggMmM5NzFjNS4uMzgwNDE1NSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YS5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdGV4dHVyZV9kYXRhLmNjCkBAIC0xMywxMCArMTMsOCBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGEuaCIKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKIApAQCAtMzQsNSArMzIsMyBAQAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfY3B1LmNjIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9jcHUuY2MKaW5kZXggYjI1YWExMi4uNGRmYmRmNiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9jcHUuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9jcHUuY2MKQEAgLTEyLDE1ICsxMiwxNCBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfY3B1LmgiCiAKKyNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSAiYmFzZS9tZW1vcnkvYWxpZ25lZF9tZW1vcnkuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZ3JhcGhpY3NfY29udGV4dC5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC01NCw3ICs1Myw3IEBACiAgICAgICAgIGJhc2U6OkFsaWduZWRBbGxvYyh3aWR0aF9pbl9ieXRlcyAqIHNpemUuaGVpZ2h0KCksIDgpKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplLmhlaWdodCgpOyArK2kpIHsKICAgICAgIG1lbWNweShidWZmZXJfZm9yX3BpdGNoX2FkanVzdG1lbnQuZ2V0KCkgKyBpICogd2lkdGhfaW5fYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgZGF0YSArIGkgKiBwaXRjaF9pbl9ieXRlcywgd2lkdGhfaW5fYnl0ZXMpOworICAgICAgICAgICAgIGRhdGEgKyBpICogcGl0Y2hfaW5fYnl0ZXMsIHdpZHRoX2luX2J5dGVzKTsKICAgICB9CiAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcl9mb3JfcGl0Y2hfYWRqdXN0bWVudC5nZXQoKSk7CiAgIH0KQEAgLTEyMSw1ICsxMjAsMyBAQAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfcGJvLmNjIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9wYm8uY2MKaW5kZXggYTE4ZTE2ZC4uOTE2ODY5ZiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9wYm8uY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9wYm8uY2MKQEAgLTEzLDkgKzEzLDcgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaWYgZGVmaW5lZChHTEVTM19TVVBQT1JURUQpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNlcnJvciAiU3VwcG9ydCBmb3IgZ2xlczMgZmVhdHVyZXMgaGFzIGJlZW4gZGVwcmVjYXRlZC4iCi0jZW5kaWYKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfcGJvLmgiCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfcGJvLmggYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdGV4dHVyZV9kYXRhX3Biby5oCmluZGV4IDgwNDVhZGQuLmZjODZmODggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlX2RhdGFfcGJvLmgKKysrIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YV9wYm8uaApAQCAtMTYsOSArMTYsNyBAQAogI2RlZmluZSBDT0JBTFRfUkVOREVSRVJfQkFDS0VORF9FR0xfVEVYVFVSRV9EQVRBX1BCT19IXwogCiAjaWYgZGVmaW5lZChHTEVTM19TVVBQT1JURUQpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNlcnJvciAiU3VwcG9ydCBmb3IgZ2xlczMgZmVhdHVyZXMgaGFzIGJlZW4gZGVwcmVjYXRlZC4iCi0jZW5kaWYKIAogI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuY2MgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuY2MKaW5kZXggMWE0Nzc4Yy4uZmU1MDgzOCAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3V0aWxzLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5jYwpAQCAtMTMsNyArMTMsNiBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgogCkBAIC02Nyw1ICs2NiwzIEBACiB9ICAvLyBuYW1lc3BhY2UgYmFja2VuZAogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZ3JhcGhpY3NfY29udGV4dC5jYyBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2dyYXBoaWNzX2NvbnRleHQuY2MKaW5kZXggMzQ1NTk4MC4uOTFkY2IwZSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZ3JhcGhpY3NfY29udGV4dC5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9ncmFwaGljc19jb250ZXh0LmNjCkBAIC02MSw3ICs2MSw2IEBACiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc19jb250ZXh0KSB7CiAgIGNvbnN0IENvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpKiBncmFwaGljc19leHQgPQogICAgICAgZ3JhcGhpY3NfY29udGV4dCA/IGdyYXBoaWNzX2NvbnRleHQtPmdyYXBoaWNzX2V4dGVuc2lvbl8gOiBudWxscHRyOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChFTkFCTEVfTUFQX1RPX01FU0gpCiAjZXJyb3IgIkVOQUJMRV9NQVBfVE9fTUVTSCBpcyBkZXByZWNhdGVkIGFmdGVyIFN0YXJib2FyZCB2ZXJzaW9uIDEyLCB1c2UgIgogICAidGhlIENvYmFsdCBncmFwaGljcyBleHRlbnNpb24gZnVuY3Rpb24gSXNNYXBUb01lc2hFbmFibGVkKCkgaW5zdGVhZC4iCkBAIC03MywyNCArNzIsNiBAQAogICAvLyBJZiB0aGVyZSBpcyBhIGNhbGxhYmxlIGdsZXMgaW50ZXJmYWNlLCBhc3N1bWUgbWFwIHRvIG1lc2ggaXMgZW5hYmxlZCwgYXMKICAgLy8gaXQgaXMgZm9yIG1vc3QgcGxhdGZvcm1zLgogICByZXR1cm4gU2JHZXRHbGVzSW50ZXJmYWNlKCkgIT0gbnVsbHB0cjsKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotI2lmIGRlZmluZWQoRU5BQkxFX01BUF9UT19NRVNIKQotICBpZiAoZ3JhcGhpY3NfZXh0ICYmIGdyYXBoaWNzX2V4dC0+dmVyc2lvbiA+PSAzKSB7Ci0gICAgRExPRyhFUlJPUikKLSAgICAgICAgPDwgIkVOQUJMRV9NQVBfVE9fTUVTSCBhbmQgIgotICAgICAgICAgICAiQ29iYWx0RXh0ZW5zaW9uR3JhcGhpY3NBcGk6OklzTWFwVG9NZXNoRW5hYmxlZCgpIGFyZSBib3RoIGRlZmluZWQuICIKLSAgICAgICAgICAgIlJlbW92ZSAnZW5hYmxlX21hcF90b19tZXNoJyBmcm9tIHlvdXIgXCJneXBfY29uZmlndXJhdGlvbi5neXBpXCIgIgotICAgICAgICAgICAiZmlsZSBpbiBmYXZvciBvZiB1c2luZyBJc01hcFRvTWVzaEVuYWJsZWQoKS4iOwotICB9Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihFTkFCTEVfTUFQX1RPX01FU0gpOwotI2VuZGlmCi0KLSAgaWYgKGdyYXBoaWNzX2V4dCAmJiBncmFwaGljc19leHQtPnZlcnNpb24gPj0gMykgewotICAgIHJldHVybiBncmFwaGljc19leHQtPklzTWFwVG9NZXNoRW5hYmxlZCgpOwotICB9Ci0KLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogfQogCiB9ICAvLyBuYW1lc3BhY2UgYmFja2VuZApkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvc3RhcmJvYXJkL2RlZmF1bHRfZ3JhcGhpY3Nfc3lzdGVtLmNjIGIvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvc3RhcmJvYXJkL2RlZmF1bHRfZ3JhcGhpY3Nfc3lzdGVtLmNjCmluZGV4IGRiZDg0OWQuLjhjZTlkMzUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL3N0YXJib2FyZC9kZWZhdWx0X2dyYXBoaWNzX3N5c3RlbS5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9zdGFyYm9hcmQvZGVmYXVsdF9ncmFwaGljc19zeXN0ZW0uY2MKQEAgLTE5LDkgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNvYmFsdC9iYXNlL3BvbHltb3JwaGljX2Rvd25jYXN0LmgiCiAjaW5jbHVkZSAiY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvZ3JhcGhpY3Nfc3lzdGVtLmgiCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9ncmFwaGljc19zeXN0ZW1fc3R1Yi5oIgogI2luY2x1ZGUgImNvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuaCIKIApAQCAtMzEsNyArMjksNiBAQAogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NTeXN0ZW0+IENyZWF0ZURlZmF1bHRHcmFwaGljc1N5c3RlbSgKICAgICBzeXN0ZW1fd2luZG93OjpTeXN0ZW1XaW5kb3cqIHN5c3RlbV93aW5kb3cpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoc3RkOjpzdHJpbmcoY29uZmlndXJhdGlvbjo6Q29uZmlndXJhdGlvbjo6R2V0SW5zdGFuY2UoKQogICAgICAgICAgICAgICAgICAgICAgIC0+Q29iYWx0UmFzdGVyaXplclR5cGUoKSkgPT0gInN0dWIiKSB7CiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc1N5c3RlbT4obmV3IEdyYXBoaWNzU3lzdGVtU3R1YigpKTsKQEAgLTM5LDEzICszNiw2IEBACiAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc1N5c3RlbT4oCiAgICAgICAgIG5ldyBHcmFwaGljc1N5c3RlbUVHTChzeXN0ZW1fd2luZG93KSk7CiAgIH0KLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotI2lmIFNCX0hBUyhHTEVTMikKLSAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc1N5c3RlbT4obmV3IEdyYXBoaWNzU3lzdGVtRUdMKHN5c3RlbV93aW5kb3cpKTsKLSNlbHNlCi0gIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NTeXN0ZW0+KG5ldyBHcmFwaGljc1N5c3RlbVN0dWIoKSk7Ci0jZW5kaWYKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIH0KIAogfSAgLy8gbmFtZXNwYWNlIGJhY2tlbmQKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL3N0YXJib2FyZC9wbGF0Zm9ybV9iYWNrZW5kLmd5cCBiL2NvYmFsdC9yZW5kZXJlci9iYWNrZW5kL3N0YXJib2FyZC9wbGF0Zm9ybV9iYWNrZW5kLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5ZjA5MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9zdGFyYm9hcmQvcGxhdGZvcm1fYmFja2VuZC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncmVuZGVyZXJfcGxhdGZvcm1fYmFja2VuZCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9lZ2wvZWdsX2JhY2tlbmQuZ3lwOmVnbF9iYWNrZW5kJywKLSAgICAgIF0sCi0KLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZGVmYXVsdF9ncmFwaGljc19zeXN0ZW0uY2MnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2RlZmF1bHRfb3B0aW9uc19zdGFyYm9hcmQuZ3lwIGIvY29iYWx0L3JlbmRlcmVyL2RlZmF1bHRfb3B0aW9uc19zdGFyYm9hcmQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWU2NDVkLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9kZWZhdWx0X29wdGlvbnNfc3RhcmJvYXJkLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgJ3RhcmdldF9uYW1lJzogJ2RlZmF1bHRfb3B0aW9ucycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9nZXRfZGVmYXVsdF9yYXN0ZXJpemVyX2Zvcl9wbGF0Zm9ybS5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvZ2V0X2RlZmF1bHRfcmFzdGVyaXplcl9mb3JfcGxhdGZvcm0uY2MgYi9jb2JhbHQvcmVuZGVyZXIvZ2V0X2RlZmF1bHRfcmFzdGVyaXplcl9mb3JfcGxhdGZvcm0uY2MKaW5kZXggOGU2NGNhNy4uNTJjMGNiMCAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL2dldF9kZWZhdWx0X3Jhc3Rlcml6ZXJfZm9yX3BsYXRmb3JtLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9nZXRfZGVmYXVsdF9yYXN0ZXJpemVyX2Zvcl9wbGF0Zm9ybS5jYwpAQCAtMzcsNyArMzcsNiBAQAogICAgICAgbmV3IHJhc3Rlcml6ZXI6OnN0dWI6OlJhc3Rlcml6ZXIoKSk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiBzdGQ6OnVuaXF1ZV9wdHI8cmFzdGVyaXplcjo6UmFzdGVyaXplcj4gQ3JlYXRlR0xFU1NvZnR3YXJlUmFzdGVyaXplcigKICAgICBiYWNrZW5kOjpHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzX2NvbnRleHQsCiAgICAgY29uc3QgUmVuZGVyZXJNb2R1bGU6Ok9wdGlvbnMmIG9wdGlvbnMpIHsKQEAgLTcyLDggKzcxLDYgQEAKICAgICAgICAgICBvcHRpb25zLnB1cmdlX3NraWFfZm9udF9jYWNoZXNfb25fZGVzdHJ1Y3Rpb24sCiAgICAgICAgICAgb3B0aW9ucy5mb3JjZV9kZXRlcm1pbmlzdGljX3JlbmRlcmluZykpOwogfQotI2VuZGlmICAvLyAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKEdMRVMyKQogCiB9ICAvLyBuYW1lc3BhY2UKIApAQCAtODMsNyArODAsNiBAQAogICBpZiAocmFzdGVyaXplcl90eXBlID09ICJzdHViIikgewogICAgIHJldHVybiB7InN0dWIiLCBiYXNlOjpCaW5kKCZDcmVhdGVTdHViUmFzdGVyaXplcil9OwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKFNiR2V0R2xlc0ludGVyZmFjZSgpKSB7CiAgICAgaWYgKHJhc3Rlcml6ZXJfdHlwZSA9PSAiZGlyZWN0LWdsZXMiKSB7CiAgICAgICByZXR1cm4geyJnbGVzIiwgYmFzZTo6QmluZCgmQ3JlYXRlR0xFU0hhcmR3YXJlUmFzdGVyaXplcil9OwpAQCAtOTUsMTggKzkxLDYgQEAKICAgICBTQl9EQ0hFQ0soZmFsc2UpOwogICAgIHJldHVybiB7fTsKICAgfQotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jaWYgU0JfSEFTKEdMRVMyKQotICBpZiAocmFzdGVyaXplcl90eXBlID09ICJkaXJlY3QtZ2xlcyIpIHsKLSAgICByZXR1cm4geyJnbGVzIiwgYmFzZTo6QmluZCgmQ3JlYXRlR0xFU0hhcmR3YXJlUmFzdGVyaXplcil9OwotICB9IGVsc2UgewotICAgIHJldHVybiB7InNraWEiLCBiYXNlOjpCaW5kKCZDcmVhdGVTa2lhSGFyZHdhcmVSYXN0ZXJpemVyKX07Ci0gIH0KLSNlbHNlCi0jZXJyb3IgIkdMRVMyIEFQSSBtdXN0IGJlIGF2YWlsYWJsZS4iCi0gIHJldHVybiB7IiIsIE5VTEx9OwotI2VuZGlmCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiB9CiAKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL2dsaW1wX3NoYWRlcnMvZ2xzbC9zaGFkZXJzLmd5cGkgYi9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsL3NoYWRlcnMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4MDFmOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsL3NoYWRlcnMuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSBkZWZpbmVzICdnbHNsX2tleXMnLCB3aGljaCBpcyBhbiBpbnB1dCB0byBnbGltcCdzCi0jIG1hcF9nbHNsX3NoYWRlcnMuZ3lwaSB0b29sIHVzZWQgdG8gbWFwIEdMU0wgc2hhZGVycyB0byBwbGF0Zm9ybS1zcGVjaWZpYwotIyBzaGFkZXJzLCBtYXBwaW5nIHRoZW0gYnkgZmlsZW5hbWUuICBUaGUgJ2dsc2xfa2V5cycgdmFyaWFibGUgZGVmaW5lZCBoZXJlCi0jIGxpc3RzIGFsbCBHTFNMIHNoYWRlcnMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBDb2JhbHQuICBNYWtlIHN1cmUgdGhhdCB0aGlzCi0jIGlzIGluY2x1ZGVkIGJlZm9yZSBpbmNsdWRpbmcgJ2dsaW1wL21hcF9nbHNsX3NoYWRlcnMuZ3lwaScuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZ2xzbF9zaGFkZXJzX2Rpcic6ICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsJywKLSAgICAnZ2xzbF9zaGFkZXJzXzAnOiBbCi0gICAgICAgICc8IUBweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZ2xvYiA8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvZ2xpbXBfc2hhZGVycy9nbHNsLyAqLmdsc2wpJwotICAgIF0sCi0gICAgJ2dsc2xfc2hhZGVycyc6IFsKLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgYmFzZW5hbWUgPEAoZ2xzbF9zaGFkZXJzXzApICknLAotICAgIF0sCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9waXBlbGluZS5jYyBiL2NvYmFsdC9yZW5kZXJlci9waXBlbGluZS5jYwppbmRleCBjNDllNzJkLi5lYmU1ZTE0IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcGlwZWxpbmUuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3BpcGVsaW5lLmNjCkBAIC0yOSwxNSArMjksMTIgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvY2xlYXJfcmVjdF9ub2RlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcl90cmVlL2NvbXBvc2l0aW9uX25vZGUuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyX3RyZWUvZHVtcF9yZW5kZXJfdHJlZV90b19zdHJpbmcuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2F0Y2hkb2cvd2F0Y2hkb2cuaCIKICNpbmNsdWRlICJuYi9tZW1vcnlfc2NvcGUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCiAKLXVzaW5nIGNvYmFsdDo6cmVuZGVyX3RyZWU6Ok5vZGU7Ci11c2luZyBjb2JhbHQ6OnJlbmRlcl90cmVlOjphbmltYXRpb25zOjpBbmltYXRlTm9kZTsKLQogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgcmVuZGVyZXIgewotCiBuYW1lc3BhY2UgewogCiAjaWYgIWRlZmluZWQoQ09CQUxUX01JTklNVU1fRlJBTUVfVElNRV9JTl9NSUxMSVNFQ09ORFMpCkBAIC03MCw2ICs2NywxNSBAQAogLy8gb2NjdXIgbWFudWFsbHkgd2hlbiB0aGUgYW5pbWF0aW9ucyBleHBpcmUuCiBjb25zdCBzaXplX3Qga1Jhc3Rlcml6ZUFuaW1hdGlvbnNUaW1lck1heEVudHJpZXMgPSA2MDsKIAorLy8gVGhlIHdhdGNoZG9nIGNsaWVudCBuYW1lIHVzZWQgdG8gcmVwcmVzZW50IFBpcGVsaW5lLgorY29uc3QgY2hhciBrV2F0Y2hkb2dOYW1lW10gPSAicmVuZGVyZXIiOworLy8gVGhlIHdhdGNoZG9nIHRpbWUgaW50ZXJ2YWwgaW4gbWljcm9zZWNvbmRzIGFsbG93ZWQgYmV0d2VlbiBwaW5ncyBiZWZvcmUKKy8vIHRyaWdnZXJpbmcgdmlvbGF0aW9ucy4KK2NvbnN0IGludDY0X3Qga1dhdGNoZG9nVGltZUludGVydmFsID0gMTAwMDAwMDsKKy8vIFRoZSB3YXRjaGRvZyB0aW1lIHdhaXQgaW4gbWljcm9zZWNvbmRzIHRvIGluaXRpYWxseSB3YWl0IGJlZm9yZSB0cmlnZ2VyaW5nCisvLyB2aW9sYXRpb25zLgorY29uc3QgaW50NjRfdCBrV2F0Y2hkb2dUaW1lV2FpdCA9IDIwMDAwMDA7CisKIHZvaWQgRGVzdHJ1Y3RTdWJtaXNzaW9uT25NZXNzYWdlTG9vcChiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdWJtaXNzaW9uPiBzdWJtaXNzaW9uKSB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJEZXN0cnVjdFN1Ym1pc3Npb25Pbk1lc3NhZ2VMb29wKCkiKTsKQEAgLTE4Myw2ICsxODksNyBAQAogICAgICAgZW5hYmxlX2Zwc19zdGRvdXRfKG9wdGlvbnMuZW5hYmxlX2Zwc19zdGRvdXQpLAogICAgICAgZW5hYmxlX2Zwc19vdmVybGF5XyhvcHRpb25zLmVuYWJsZV9mcHNfb3ZlcmxheSksCiAgICAgICBmcHNfb3ZlcmxheV91cGRhdGVfcGVuZGluZ18oZmFsc2UpIHsKKwogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6cmVuZGVyZXIiLCAiUGlwZWxpbmU6OlBpcGVsaW5lKCkiKTsKICAgLy8gVGhlIGFjdHVhbCBQaXBlbGluZSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBhbnkgdGhyZWFkLCBidXQgd2Ugd2FudAogICAvLyByYXN0ZXJpemVyX3RocmVhZF9jaGVja2VyXyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJhc3Rlcml6ZXIgdGhyZWFkLApAQCAtMjAyLDYgKzIwOSwxMCBAQAogfQogCiBQaXBlbGluZTo6flBpcGVsaW5lKCkgeworICAvLyBVbnJlZ2lzdGVycyBQaXBlbGluZSBhcyBhIHdhdGNoZG9nIGNsaWVudC4KKyAgd2F0Y2hkb2c6OldhdGNoZG9nKiB3YXRjaGRvZyA9IHdhdGNoZG9nOjpXYXRjaGRvZzo6R2V0SW5zdGFuY2UoKTsKKyAgaWYgKHdhdGNoZG9nKSB3YXRjaGRvZy0+VW5yZWdpc3RlcihzdGQ6OnN0cmluZyhrV2F0Y2hkb2dOYW1lKSk7CisKICAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OnJlbmRlcmVyIiwgIlBpcGVsaW5lOjp+UGlwZWxpbmUoKSIpOwogCiAgIC8vIEZpcnN0IHdlIHNodXRkb3duIHRoZSBzdWJtaXNzaW9uIHF1ZXVlLiAgV2UgZG8gdGhpcyBhcyBhIHNlcGFyYXRlIHN0ZXAgZnJvbQpAQCAtMzIzLDYgKzMzNCwxMyBAQAogCiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJQaXBlbGluZTo6U2V0TmV3UmVuZGVyVHJlZSgpIik7CiAKKyAgLy8gUmVnaXN0ZXJzIFBpcGVsaW5lIGFzIGEgd2F0Y2hkb2cgY2xpZW50LgorICB3YXRjaGRvZzo6V2F0Y2hkb2cqIHdhdGNoZG9nID0gd2F0Y2hkb2c6OldhdGNoZG9nOjpHZXRJbnN0YW5jZSgpOworICBpZiAod2F0Y2hkb2cpCisgICAgd2F0Y2hkb2ctPlJlZ2lzdGVyKHN0ZDo6c3RyaW5nKGtXYXRjaGRvZ05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQsIGtXYXRjaGRvZ1RpbWVJbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAga1dhdGNoZG9nVGltZVdhaXQsIHdhdGNoZG9nOjpQSU5HKTsKKwogICAvLyBJZiBhIHRpbWUgZmVuY2UgaXMgYWN0aXZlLCBzYXZlIHRoZSBzdWJtaXNzaW9uIHRvIGJlIHF1ZXVlZCBvbmx5IGFmdGVyCiAgIC8vIHdlIHBhc3MgdGhlIHRpbWUgZmVuY2UuICBPdmVyd3JpdGUgYW55IGV4aXN0aW5nIHdhaXRpbmcgc3VibWlzc2lvbiBpbiB0aGlzCiAgIC8vIGNhc2UuCkBAIC0zNDYsMjUgKzM2NCwxMCBAQAogICAgICAgICBncmFwaGljc19jb250ZXh0XwogICAgICAgICAgICAgPyBncmFwaGljc19jb250ZXh0Xy0+R2V0TWluaW11bUZyYW1lSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcygpCiAgICAgICAgICAgICA6IC0xLjBmOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIGRlZmluZWQoQ09CQUxUX01JTklNVU1fRlJBTUVfVElNRV9JTl9NSUxMSVNFQ09ORFMpCisjaWYgZGVmaW5lZChDT0JBTFRfTUlOSU1VTV9GUkFNRV9USU1FX0lOX01JTExJU0VDT05EUykKICNlcnJvciBcCiAgICAgIidjb2JhbHRfbWluaW11bV9mcmFtZV90aW1lX2luX21pbGxpc2Vjb25kcycgd2FzIHJlcGxhY2VkIGJ5IiBcCiAgICAgIkNvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpOjpHZXRNaW5pbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzLiIKLSNlbGlmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgZGVmaW5lZChDT0JBTFRfTUlOSU1VTV9GUkFNRV9USU1FX0lOX01JTExJU0VDT05EUykKLSAgICBDT01QSUxFX0FTU0VSVChDT0JBTFRfTUlOSU1VTV9GUkFNRV9USU1FX0lOX01JTExJU0VDT05EUyA+IDAsCi0gICAgICAgICAgICAgICAgICAgZnJhbWVfdGltZV9tdXN0X2JlX3Bvc2l0aXZlKTsKLSAgICBpZiAobWluaW11bV9mcmFtZV9pbnRlcnZhbF9taWxsaXNlY29uZHMgPCAwLjBmKSB7Ci0gICAgICBtaW5pbXVtX2ZyYW1lX2ludGVydmFsX21pbGxpc2Vjb25kcyA9Ci0gICAgICAgICAgQ09CQUxUX01JTklNVU1fRlJBTUVfVElNRV9JTl9NSUxMSVNFQ09ORFM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIERMT0coRVJST1IpCi0gICAgICAgICAgPDwgIkNPQkFMVF9NSU5JTVVNX0ZSQU1FX1RJTUVfSU5fTUlMTElTRUNPTkRTIGFuZCAiCi0gICAgICAgICAgICAgIkNvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpOjpHZXRNaW5pbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzIgotICAgICAgICAgICAgICJhcmUgYm90aCBkZWZpbmVkLiIKLSAgICAgICAgICAgICAiUmVtb3ZlIHRoZSAnY29iYWx0X21pbmltdW1fZnJhbWVfdGltZV9pbl9taWxsaXNlY29uZHMnICI7Ci0gICAgICAiZnJvbSAuLi9neXBfY29uZmlndXJhdGlvbi5neXBpIGluIGZhdm9yIG9mIHRoZSB1c2FnZSBvZiAiCi0gICAgICAiQ29iYWx0RXh0ZW5zaW9uR3JhcGhpY3NBcGk6OkdldE1pbmltdW1GcmFtZUludGVydmFsSW5NaWxsaXNlY29uZHMuIgotICAgIH0KICNlbHNlCiAgICAgaWYgKG1pbmltdW1fZnJhbWVfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzIDwgMC4wZikgewogICAgICAgbWluaW11bV9mcmFtZV9pbnRlcnZhbF9taWxsaXNlY29uZHMgPQpAQCAtMzg1LDYgKzM4OCwxMCBAQAogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRChyYXN0ZXJpemVyX3RocmVhZF9jaGVja2VyXyk7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJQaXBlbGluZTo6Q2xlYXJDdXJyZW50UmVuZGVyVHJlZSgpIik7CiAKKyAgLy8gVW5yZWdpc3RlcnMgUGlwZWxpbmUgYXMgYSB3YXRjaGRvZyBjbGllbnQuCisgIHdhdGNoZG9nOjpXYXRjaGRvZyogd2F0Y2hkb2cgPSB3YXRjaGRvZzo6V2F0Y2hkb2c6OkdldEluc3RhbmNlKCk7CisgIGlmICh3YXRjaGRvZykgd2F0Y2hkb2ctPlVucmVnaXN0ZXIoc3RkOjpzdHJpbmcoa1dhdGNoZG9nTmFtZSkpOworCiAgIFJlc2V0U3VibWlzc2lvblF1ZXVlKCk7CiAgIHJhc3Rlcml6ZV90aW1lcl8gPSBiYXNlOjpudWxsb3B0OwogfQpAQCAtMzk0LDYgKzQwMSwxMCBAQAogICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRChyYXN0ZXJpemVyX3RocmVhZF9jaGVja2VyXyk7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJQaXBlbGluZTo6UmFzdGVyaXplQ3VycmVudFRyZWUoKSIpOwogCisgIC8vIFBpbmdzIHdhdGNoZG9nLgorICB3YXRjaGRvZzo6V2F0Y2hkb2cqIHdhdGNoZG9nID0gd2F0Y2hkb2c6OldhdGNoZG9nOjpHZXRJbnN0YW5jZSgpOworICBpZiAod2F0Y2hkb2cpIHdhdGNoZG9nLT5QaW5nKHN0ZDo6c3RyaW5nKGtXYXRjaGRvZ05hbWUpKTsKKwogICBiYXNlOjpUaW1lVGlja3Mgc3RhcnRfcmFzdGVyaXplX3RpbWUgPSBiYXNlOjpUaW1lVGlja3M6Ok5vdygpOwogICBTdWJtaXNzaW9uIHN1Ym1pc3Npb24gPQogICAgICAgc3VibWlzc2lvbl9xdWV1ZV8tPkdldEN1cnJlbnRTdWJtaXNzaW9uKHN0YXJ0X3Jhc3Rlcml6ZV90aW1lKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2NvbW1vbi9jb21tb24uZ3lwIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvY29tbW9uL2NvbW1vbi5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOTE2NTUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvY29tbW9uL2NvbW1vbi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29tbW9uJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmaW5kX25vZGUuY2MnLAotICAgICAgICAnZmluZF9ub2RlLmgnLAotICAgICAgICAnb2Zmc2NyZWVuX3JlbmRlcl9jb29yZGluYXRlX21hcHBpbmcuY2MnLAotICAgICAgICAnb2Zmc2NyZWVuX3JlbmRlcl9jb29yZGluYXRlX21hcHBpbmcuaCcsCi0gICAgICAgICdzY3JhdGNoX3N1cmZhY2VfY2FjaGUuY2MnLAotICAgICAgICAnc2NyYXRjaF9zdXJmYWNlX2NhY2hlLmgnLAotICAgICAgICAnc3RyZWFtaW5nX2Jlc3RfZml0X2xpbmUuY2MnLAotICAgICAgICAnc3RyZWFtaW5nX2Jlc3RfZml0X2xpbmUuaCcsCi0gICAgICAgICd1dGlscy5oJywKLSAgICAgICAgJ3V0aWxzLmNjJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L21hdGgvbWF0aC5neXA6bWF0aCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19jYWxsYmFjay5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X2NhbGxiYWNrLmNjCmluZGV4IGNkYzBhNzcuLmMxNDVkY2MgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X2NhbGxiYWNrLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X2NhbGxiYWNrLmNjCkBAIC0xMywxMyArMTMsMTEgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KLSNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19jYWxsYmFjay5oIgogCiAjaW5jbHVkZSAiYmFzZS9iYXNpY3R5cGVzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3V0aWxzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2VnbF9hbmRfZ2xlcy5oIgorI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X2NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiZWdsL2dlbmVyYXRlZF9zaGFkZXJfaW1wbC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKIApAQCAtMzIsOCArMzAsNyBAQAogICAgIDogcmFzdGVyaXplX2NhbGxiYWNrXyhyYXN0ZXJpemVfY2FsbGJhY2spIHt9CiAKIHZvaWQgRHJhd0NhbGxiYWNrOjpFeGVjdXRlVXBkYXRlVmVydGV4QnVmZmVyKAotICAgIEdyYXBoaWNzU3RhdGUqIGdyYXBoaWNzX3N0YXRlLCBTaGFkZXJQcm9ncmFtTWFuYWdlciogcHJvZ3JhbV9tYW5hZ2VyKSB7Ci19CisgICAgR3JhcGhpY3NTdGF0ZSogZ3JhcGhpY3Nfc3RhdGUsIFNoYWRlclByb2dyYW1NYW5hZ2VyKiBwcm9ncmFtX21hbmFnZXIpIHt9CiAKIHZvaWQgRHJhd0NhbGxiYWNrOjpFeGVjdXRlUmFzdGVyaXplKEdyYXBoaWNzU3RhdGUqIGdyYXBoaWNzX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyUHJvZ3JhbU1hbmFnZXIqIHByb2dyYW1fbWFuYWdlcikgewpAQCAtNTAsNSArNDcsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X2NsZWFyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfY2xlYXIuY2MKaW5kZXggMWRiMWU0Ny4uYTgwZTUzYyAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfY2xlYXIuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfY2xlYXIuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19jbGVhci5oIgogCkBAIC0zMCw4ICsyOSw3IEBACiAgICAgOiBEcmF3T2JqZWN0KGJhc2Vfc3RhdGUpLCBjbGVhcl9jb2xvcl8oR2V0RHJhd0NvbG9yKGNsZWFyX2NvbG9yKSkge30KIAogdm9pZCBEcmF3Q2xlYXI6OkV4ZWN1dGVVcGRhdGVWZXJ0ZXhCdWZmZXIoCi0gICAgR3JhcGhpY3NTdGF0ZSogZ3JhcGhpY3Nfc3RhdGUsIFNoYWRlclByb2dyYW1NYW5hZ2VyKiBwcm9ncmFtX21hbmFnZXIpIHsKLX0KKyAgICBHcmFwaGljc1N0YXRlKiBncmFwaGljc19zdGF0ZSwgU2hhZGVyUHJvZ3JhbU1hbmFnZXIqIHByb2dyYW1fbWFuYWdlcikge30KIAogdm9pZCBEcmF3Q2xlYXI6OkV4ZWN1dGVSYXN0ZXJpemUoR3JhcGhpY3NTdGF0ZSogZ3JhcGhpY3Nfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJQcm9ncmFtTWFuYWdlciogcHJvZ3JhbV9tYW5hZ2VyKSB7CkBAIC01MSw1ICs0OSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfb2JqZWN0LmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfb2JqZWN0LmNjCmluZGV4IDBhZWEyNjYuLjcxNjMwMjUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X29iamVjdC5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19vYmplY3QuY2MKQEAgLTEyLDkgKzEyLDYgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19vYmplY3QuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTIyLDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3RyYW5zZm9ybV8yZC5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHJlbmRlcmVyIHsKQEAgLTI2OSw1ICsyNjcsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X29iamVjdF9tYW5hZ2VyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfb2JqZWN0X21hbmFnZXIuY2MKaW5kZXggMmRlYWI5Mi4uY2M2MmNlYiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfb2JqZWN0X21hbmFnZXIuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfb2JqZWN0X21hbmFnZXIuY2MKQEAgLTEyLDE2ICsxMiwxNSBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X29iamVjdF9tYW5hZ2VyLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJiYXNlL3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgcmVuZGVyZXIgewpAQCAtNDEyLDUgKzQxMSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcG9seV9jb2xvci5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3BvbHlfY29sb3IuY2MKaW5kZXggNDY3ODgxNC4uMzI3NmYwYyAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcG9seV9jb2xvci5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19wb2x5X2NvbG9yLmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcG9seV9jb2xvci5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjUsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKICNpbmNsdWRlICJlZ2wvZ2VuZXJhdGVkX3NoYWRlcl9pbXBsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtOTQsMTAgKzkyLDkgQEAKICAgICB2ZXJ0ZXhfYnVmZmVyXyA9IGdyYXBoaWNzX3N0YXRlLT5BbGxvY2F0ZVZlcnRleERhdGEoYXR0cmlidXRlc18uc2l6ZSgpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGF0dHJpYnV0ZXNfWzBdKSk7CiAgICAgbWVtY3B5KHZlcnRleF9idWZmZXJfLCAmYXR0cmlidXRlc19bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfLnNpemUoKSAqIHNpemVvZihhdHRyaWJ1dGVzX1swXSkpOworICAgICAgICAgICBhdHRyaWJ1dGVzXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19bMF0pKTsKICAgICBpbmRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4SW5kaWNlcyhpbmRpY2VzXy5zaXplKCkpOwotICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sCi0gICAgICAgICAgICAgICAgIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOworICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOwogICB9CiB9CiAKQEAgLTIxMyw1ICsyMTAsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfYm9yZGVyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9ib3JkZXIuY2MKaW5kZXggZGEyMWJmYy4uZjdmM2IyMCAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9ib3JkZXIuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9ib3JkZXIuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2JvcmRlci5oIgogCkBAIC0yNTQsNSArMjUzLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2NvbG9yX3RleHR1cmUuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2NvbG9yX3RleHR1cmUuY2MKaW5kZXggODcxNDAxMy4uYjc2MzIwZSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9jb2xvcl90ZXh0dXJlLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfY29sb3JfdGV4dHVyZS5jYwpAQCAtMTMsNyArMTMsNiBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfY29sb3JfdGV4dHVyZS5oIgogCkBAIC03Niw3ICs3NSw3IEBACiAgICAgICAiY29sb3JfdHJhbnNmb3JtXyBhbmQgY29sb3JfdHJhbnNmb3JtX2luX2NvbHVtbl9tYWpvciBzaXplIG1pc21hdGNoIik7CiAKICAgbWVtY3B5KGNvbG9yX3RyYW5zZm9ybV8sIGNvbG9yX3RyYW5zZm9ybV9pbl9jb2x1bW5fbWFqb3IsCi0gICAgICAgICAgICAgICBzaXplb2YoY29sb3JfdHJhbnNmb3JtXykpOworICAgICAgICAgc2l6ZW9mKGNvbG9yX3RyYW5zZm9ybV8pKTsKICAgZ3JhcGhpY3Nfc3RhdGUtPlJlc2VydmVWZXJ0ZXhEYXRhKDQgKiBzaXplb2YoVmVydGV4QXR0cmlidXRlcykpOwogfQogCkBAIC0xMzIsNyArMTMxLDcgQEAKIAogICBmb3IgKGludCBpID0gMTsgaSA8IFNCX0FSUkFZX1NJWkVfSU5UKHRleGNvb3JkX2NsYW1wc18pOyArK2kpIHsKICAgICBtZW1jcHkodGV4Y29vcmRfY2xhbXBzX1tpXSwgdGV4Y29vcmRfY2xhbXBzX1swXSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKHRleGNvb3JkX2NsYW1wc19bMF0pKTsKKyAgICAgICAgICAgc2l6ZW9mKHRleGNvb3JkX2NsYW1wc19bMF0pKTsKICAgfQogICBpZiAoY2xhbXBfdGV4Y29vcmRzXykgewogICAgIC8vIEluc2V0IDAuNS1lcHNpbG9uIHNvIHRoZSBib3JkZXIgdGV4ZWxzIGFyZSBzdGlsbCBzYW1wbGVkLCBidXQgbm90aGluZwpAQCAtMjQ2LDUgKzI0NSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9saW5lYXJfZ3JhZGllbnQuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2xpbmVhcl9ncmFkaWVudC5jYwppbmRleCBmYmIyY2QxLi5kNjM4ZjBlIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2xpbmVhcl9ncmFkaWVudC5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X2xpbmVhcl9ncmFkaWVudC5jYwpAQCAtMTIsOSArMTIsNiBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfbGluZWFyX2dyYWRpZW50LmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0yNCw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2VnbF9hbmRfZ2xlcy5oIgogI2luY2x1ZGUgImVnbC9nZW5lcmF0ZWRfc2hhZGVyX2ltcGwuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTY3LDcgKzY1LDcgQEAKICAgdmVydGV4X2J1ZmZlcl8gPSBncmFwaGljc19zdGF0ZS0+QWxsb2NhdGVWZXJ0ZXhEYXRhKGF0dHJpYnV0ZXNfLnNpemUoKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVmVydGV4QXR0cmlidXRlcykpOwogICBtZW1jcHkodmVydGV4X2J1ZmZlcl8sICZhdHRyaWJ1dGVzX1swXSwKLSAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfLnNpemUoKSAqIHNpemVvZihWZXJ0ZXhBdHRyaWJ1dGVzKSk7CisgICAgICAgICBhdHRyaWJ1dGVzXy5zaXplKCkgKiBzaXplb2YoVmVydGV4QXR0cmlidXRlcykpOwogfQogCiB2b2lkIERyYXdSZWN0TGluZWFyR3JhZGllbnQ6OkV4ZWN1dGVSYXN0ZXJpemUoCkBAIC0yMjksNSArMjI3LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X3JhZGlhbF9ncmFkaWVudC5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfcmFkaWFsX2dyYWRpZW50LmNjCmluZGV4IDVmZmQ1NjIuLmNmNjNlNzAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfcmFkaWFsX2dyYWRpZW50LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfcmFkaWFsX2dyYWRpZW50LmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9yYWRpYWxfZ3JhZGllbnQuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTIzLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvZWdsX2FuZF9nbGVzLmgiCiAjaW5jbHVkZSAiZWdsL2dlbmVyYXRlZF9zaGFkZXJfaW1wbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTk3LDcgKzk1LDcgQEAKICAgICB2ZXJ0ZXhfYnVmZmVyXyA9IGdyYXBoaWNzX3N0YXRlLT5BbGxvY2F0ZVZlcnRleERhdGEoCiAgICAgICAgIGF0dHJpYnV0ZXNfLnNpemUoKSAqIHNpemVvZihWZXJ0ZXhBdHRyaWJ1dGVzKSk7CiAgICAgbWVtY3B5KHZlcnRleF9idWZmZXJfLCAmYXR0cmlidXRlc19bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfLnNpemUoKSAqIHNpemVvZihWZXJ0ZXhBdHRyaWJ1dGVzKSk7CisgICAgICAgICAgIGF0dHJpYnV0ZXNfLnNpemUoKSAqIHNpemVvZihWZXJ0ZXhBdHRyaWJ1dGVzKSk7CiAgIH0KIH0KIApAQCAtMjI2LDUgKzIyNCwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9zaGFkb3dfYmx1ci5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3Rfc2hhZG93X2JsdXIuY2MKaW5kZXggYTA2OWU2YS4uMDNkNTExNSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9zaGFkb3dfYmx1ci5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X3NoYWRvd19ibHVyLmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9zaGFkb3dfYmx1ci5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMjMsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9tYXRoL3RyYW5zZm9ybV8yZC5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC0xNTYsMTUgKzE1NCwxNCBAQAogICAgIHZlcnRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4RGF0YSgKICAgICAgICAgYXR0cmlidXRlc19zcXVhcmVfLnNpemUoKSAqIHNpemVvZihhdHRyaWJ1dGVzX3NxdWFyZV9bMF0pKTsKICAgICBtZW1jcHkodmVydGV4X2J1ZmZlcl8sICZhdHRyaWJ1dGVzX3NxdWFyZV9bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfc3F1YXJlXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19zcXVhcmVfWzBdKSk7CisgICAgICAgICAgIGF0dHJpYnV0ZXNfc3F1YXJlXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19zcXVhcmVfWzBdKSk7CiAgIH0gZWxzZSBpZiAoYXR0cmlidXRlc19yb3VuZF8uc2l6ZSgpID4gMCkgewogICAgIHZlcnRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4RGF0YSgKICAgICAgICAgYXR0cmlidXRlc19yb3VuZF8uc2l6ZSgpICogc2l6ZW9mKGF0dHJpYnV0ZXNfcm91bmRfWzBdKSk7CiAgICAgbWVtY3B5KHZlcnRleF9idWZmZXJfLCAmYXR0cmlidXRlc19yb3VuZF9bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfcm91bmRfLnNpemUoKSAqIHNpemVvZihhdHRyaWJ1dGVzX3JvdW5kX1swXSkpOworICAgICAgICAgICBhdHRyaWJ1dGVzX3JvdW5kXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19yb3VuZF9bMF0pKTsKICAgICBpbmRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4SW5kaWNlcyhpbmRpY2VzXy5zaXplKCkpOwotICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sCi0gICAgICAgICAgICAgICAgIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOworICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOwogICB9CiB9CiAKQEAgLTQzMiw1ICs0MjksMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3Rfc2hhZG93X3NwcmVhZC5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3Rfc2hhZG93X3NwcmVhZC5jYwppbmRleCA1MmVlYTFkLi5jZTg0MWY1IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X3NoYWRvd19zcHJlYWQuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9zaGFkb3dfc3ByZWFkLmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF9zaGFkb3dfc3ByZWFkLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0yMiw2ICsxOSw3IEBACiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3V0aWxzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2VnbF9hbmRfZ2xlcy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTgyLDE1ICs4MCwxNCBAQAogICAgIHZlcnRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4RGF0YSgKICAgICAgICAgYXR0cmlidXRlc19zcXVhcmVfLnNpemUoKSAqIHNpemVvZihhdHRyaWJ1dGVzX3NxdWFyZV9bMF0pKTsKICAgICBtZW1jcHkodmVydGV4X2J1ZmZlcl8sICZhdHRyaWJ1dGVzX3NxdWFyZV9bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfc3F1YXJlXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19zcXVhcmVfWzBdKSk7CisgICAgICAgICAgIGF0dHJpYnV0ZXNfc3F1YXJlXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19zcXVhcmVfWzBdKSk7CiAgIH0gZWxzZSBpZiAoYXR0cmlidXRlc19yb3VuZF8uc2l6ZSgpID4gMCkgewogICAgIHZlcnRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4RGF0YSgKICAgICAgICAgYXR0cmlidXRlc19yb3VuZF8uc2l6ZSgpICogc2l6ZW9mKGF0dHJpYnV0ZXNfcm91bmRfWzBdKSk7CiAgICAgbWVtY3B5KHZlcnRleF9idWZmZXJfLCAmYXR0cmlidXRlc19yb3VuZF9bMF0sCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNfcm91bmRfLnNpemUoKSAqIHNpemVvZihhdHRyaWJ1dGVzX3JvdW5kX1swXSkpOworICAgICAgICAgICBhdHRyaWJ1dGVzX3JvdW5kXy5zaXplKCkgKiBzaXplb2YoYXR0cmlidXRlc19yb3VuZF9bMF0pKTsKICAgICBpbmRleF9idWZmZXJfID0gZ3JhcGhpY3Nfc3RhdGUtPkFsbG9jYXRlVmVydGV4SW5kaWNlcyhpbmRpY2VzXy5zaXplKCkpOwotICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sCi0gICAgICAgICAgICAgICAgIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOworICAgIG1lbWNweShpbmRleF9idWZmZXJfLCAmaW5kaWNlc19bMF0sIGluZGljZXNfLnNpemUoKSAqIHNpemVvZihpbmRpY2VzX1swXSkpOwogICB9CiB9CiAKQEAgLTI2NCw1ICsyNjEsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfdGV4dHVyZS5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JlY3RfdGV4dHVyZS5jYwppbmRleCBiZDUzMGRmLi5lMTZiOWNjIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19yZWN0X3RleHR1cmUuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF90ZXh0dXJlLmNjCkBAIC0xMyw3ICsxMyw2IEBACiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcmVjdF90ZXh0dXJlLmgiCiAKQEAgLTY5LDcgKzY4LDcgQEAKICAgICAgICJjb2xvcl90cmFuc2Zvcm1fIGFuZCBjb2xvcl90cmFuc2Zvcm1faW5fY29sdW1uX21ham9yIHNpemUgbWlzbWF0Y2giKTsKIAogICBtZW1jcHkoY29sb3JfdHJhbnNmb3JtXywgY29sb3JfdHJhbnNmb3JtX2luX2NvbHVtbl9tYWpvciwKLSAgICAgICAgICAgICAgIHNpemVvZihjb2xvcl90cmFuc2Zvcm1fKSk7CisgICAgICAgICBzaXplb2YoY29sb3JfdHJhbnNmb3JtXykpOwogICBncmFwaGljc19zdGF0ZS0+UmVzZXJ2ZVZlcnRleERhdGEoNCAqIHNpemVvZihWZXJ0ZXhBdHRyaWJ1dGVzKSk7CiB9CiAKQEAgLTE5MCw1ICsxODksMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JyZWN0X2NvbG9yLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcnJlY3RfY29sb3IuY2MKaW5kZXggZWRiOGIwYS4uYWE0ZjJkZSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcnJlY3RfY29sb3IuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcnJlY3RfY29sb3IuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19ycmVjdF9jb2xvci5oIgogCkBAIC0xMjEsNSArMTIwLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19ycmVjdF9jb2xvcl90ZXh0dXJlLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2RyYXdfcnJlY3RfY29sb3JfdGV4dHVyZS5jYwppbmRleCA5MTYxOTY3Li40ZmFlMmY4IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19ycmVjdF9jb2xvcl90ZXh0dXJlLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9kcmF3X3JyZWN0X2NvbG9yX3RleHR1cmUuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZHJhd19ycmVjdF9jb2xvcl90ZXh0dXJlLmgiCiAKQEAgLTgyLDcgKzgxLDcgQEAKICAgICAgICJjb2xvcl90cmFuc2Zvcm1fIGFuZCBjb2xvcl90cmFuc2Zvcm1faW5fY29sdW1uX21ham9yIHNpemUgbWlzbWF0Y2giKTsKIAogICBtZW1jcHkoY29sb3JfdHJhbnNmb3JtXywgY29sb3JfdHJhbnNmb3JtX2luX2NvbHVtbl9tYWpvciwKLSAgICAgICAgICAgICAgIHNpemVvZihjb2xvcl90cmFuc2Zvcm1fKSk7CisgICAgICAgICBzaXplb2YoY29sb3JfdHJhbnNmb3JtXykpOwogICBncmFwaGljc19zdGF0ZS0+UmVzZXJ2ZVZlcnRleERhdGEoa1ZlcnRleENvdW50ICogc2l6ZW9mKFZlcnRleEF0dHJpYnV0ZXMpKTsKIAogICAvLyBFeHRyYWN0IHNjYWxlIGZyb20gdGhlIHRyYW5zZm9ybSBhbmQgbW92ZSBpdCBpbnRvIHRoZSB2ZXJ0ZXggYXR0cmlidXRlcwpAQCAtMTYzLDcgKzE2Miw3IEBACiAKICAgZm9yIChpbnQgaSA9IDE7IGkgPCBTQl9BUlJBWV9TSVpFX0lOVCh0ZXhjb29yZF9jbGFtcHNfKTsgKytpKSB7CiAgICAgbWVtY3B5KHRleGNvb3JkX2NsYW1wc19baV0sIHRleGNvb3JkX2NsYW1wc19bMF0sCi0gICAgICAgICAgICAgICAgIHNpemVvZih0ZXhjb29yZF9jbGFtcHNfWzBdKSk7CisgICAgICAgICAgIHNpemVvZih0ZXhjb29yZF9jbGFtcHNfWzBdKSk7CiAgIH0KICAgaWYgKGNsYW1wX3RleGNvb3Jkc18pIHsKICAgICAvLyBJbnNldCAwLjUtZXBzaWxvbiBzbyB0aGUgYm9yZGVyIHRleGVscyBhcmUgc3RpbGwgc2FtcGxlZCwgYnV0IG5vdGhpbmcKQEAgLTI4MSw1ICsyODAsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9ncmFwaGljc19zdGF0ZS5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9ncmFwaGljc19zdGF0ZS5jYwppbmRleCA5ZDUwZDU0Li4zMDk2ZGViIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZ3JhcGhpY3Nfc3RhdGUuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2dyYXBoaWNzX3N0YXRlLmNjCkBAIC0xMiwxNCArMTIsMTIgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvZ3JhcGhpY3Nfc3RhdGUuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTQ1Nyw1ICs0NTUsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9oYXJkd2FyZV9yYXN0ZXJpemVyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MKaW5kZXggYTNiNGRlNy4uZDgyNTY1MSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MKQEAgLTEyLDkgKzEyLDYgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvaGFyZHdhcmVfcmFzdGVyaXplci5oIgogCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzYsMTAgKzMzLDE1IEBACiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9jb2JhbHRfc2tpYV90eXBlX2NvbnZlcnNpb25zLmgiICAvLyBub2duY2hlY2sKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2dsX2Zvcm1hdF9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfcmFzdGVyaXplci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDYW52YXMuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1JlZkNudC5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3VyZmFjZS5oIgorI2lmZGVmIFVTRV9TS0lBX05FWFQKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyRGlyZWN0Q29udGV4dC5oIgorI2Vsc2UKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyQ29udGV4dC5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHJlbmRlcmVyIHsKQEAgLTgwLDkgKzgyLDE1IEBACiAgIHZvaWQgUmVsZWFzZUNvbnRleHQoKSB7IGdyYXBoaWNzX2NvbnRleHRfLT5SZWxlYXNlQ3VycmVudENvbnRleHQoKTsgfQogCiAgcHJpdmF0ZToKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIEdyRGlyZWN0Q29udGV4dCogR2V0RmFsbGJhY2tDb250ZXh0KCkgeworICAgIHJldHVybiBmYWxsYmFja19yYXN0ZXJpemVyXy0+R2V0R3JDb250ZXh0KCk7CisgIH0KKyNlbHNlCiAgIEdyQ29udGV4dCogR2V0RmFsbGJhY2tDb250ZXh0KCkgewogICAgIHJldHVybiBmYWxsYmFja19yYXN0ZXJpemVyXy0+R2V0R3JDb250ZXh0KCk7CiAgIH0KKyNlbmRpZgogCiAgIHZvaWQgUmVzZXRGYWxsYmFja0NvbnRleHREdXJpbmdGcmFtZSgpOwogICB2b2lkIEZsdXNoRmFsbGJhY2tPZmZzY3JlZW5EcmF3cygpOwpAQCAtMjI5LDEyICsyMzcsMTggQEAKIH0KIAogdm9pZCBIYXJkd2FyZVJhc3Rlcml6ZXI6OkltcGw6OlJlc2V0RmFsbGJhY2tDb250ZXh0RHVyaW5nRnJhbWUoKSB7Ci0gIC8vIFBlcmZvcm0gYSBtaW5pbWFsIHJlc2V0IG9mIHRoZSBmYWxsYmFjayBjb250ZXh0LiBPbmx5IG5lZWQgdG8gaW52YWxpZGF0ZQotICAvLyBzdGF0ZXMgdGhhdCB0aGlzIHJhc3Rlcml6ZXIgcG9sbHV0ZXMuCisvLyBQZXJmb3JtIGEgbWluaW1hbCByZXNldCBvZiB0aGUgZmFsbGJhY2sgY29udGV4dC4gT25seSBuZWVkIHRvIGludmFsaWRhdGUKKy8vIHN0YXRlcyB0aGF0IHRoaXMgcmFzdGVyaXplciBwb2xsdXRlcy4KKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIHVpbnQzMl90IHVudG91Y2hlZF9zdGF0ZXMgPQorICAgICAga01TQUFFbmFibGVfR3JHTEJhY2tlbmRTdGF0ZSB8IGtTdGVuY2lsX0dyR0xCYWNrZW5kU3RhdGUgfAorICAgICAga1BpeGVsU3RvcmVfR3JHTEJhY2tlbmRTdGF0ZSB8IGtGaXhlZEZ1bmN0aW9uX0dyR0xCYWNrZW5kU3RhdGU7CisjZWxzZQogICB1aW50MzJfdCB1bnRvdWNoZWRfc3RhdGVzID0KICAgICAgIGtNU0FBRW5hYmxlX0dyR0xCYWNrZW5kU3RhdGUgfCBrU3RlbmNpbF9HckdMQmFja2VuZFN0YXRlIHwKICAgICAgIGtQaXhlbFN0b3JlX0dyR0xCYWNrZW5kU3RhdGUgfCBrRml4ZWRGdW5jdGlvbl9HckdMQmFja2VuZFN0YXRlIHwKICAgICAgIGtQYXRoUmVuZGVyaW5nX0dyR0xCYWNrZW5kU3RhdGU7CisjZW5kaWYKIAogICBHZXRGYWxsYmFja0NvbnRleHQoKS0+cmVzZXRDb250ZXh0KH51bnRvdWNoZWRfc3RhdGVzICYga0FsbF9HckJhY2tlbmRTdGF0ZSk7CiB9CkBAIC0zMDgsOCArMzIyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgaW5mbyk7CiAKICAgdWludDMyX3QgZmxhZ3MgPSAwOworI2lmZGVmIFVTRV9TS0lBX05FWFQKKyAgU2tTdXJmYWNlUHJvcHMgc2tpYV9zdXJmYWNlX3Byb3BzKGZsYWdzLCBrVW5rbm93bl9Ta1BpeGVsR2VvbWV0cnkpOworI2Vsc2UKICAgU2tTdXJmYWNlUHJvcHMgc2tpYV9zdXJmYWNlX3Byb3BzKGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTdXJmYWNlUHJvcHM6OmtMZWdhY3lGb250SG9zdF9Jbml0VHlwZSk7CisjZW5kaWYKICAgcmV0dXJuIFNrU3VyZmFjZTo6TWFrZUZyb21CYWNrZW5kUmVuZGVyVGFyZ2V0KAogICAgICAgR2V0RmFsbGJhY2tDb250ZXh0KCksIHNraWFfcmVuZGVyX3RhcmdldCwga0JvdHRvbUxlZnRfR3JTdXJmYWNlT3JpZ2luLAogICAgICAga1JHQkFfODg4OF9Ta0NvbG9yVHlwZSwgbnVsbHB0ciwgJnNraWFfc3VyZmFjZV9wcm9wcyk7CkBAIC0zNTksNSArMzc3LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvb2Zmc2NyZWVuX3RhcmdldF9tYW5hZ2VyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL29mZnNjcmVlbl90YXJnZXRfbWFuYWdlci5jYwppbmRleCA5YmE3MjFmLi43NTlmNDNkIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvb2Zmc2NyZWVuX3RhcmdldF9tYW5hZ2VyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9vZmZzY3JlZW5fdGFyZ2V0X21hbmFnZXIuY2MKQEAgLTEyLDE3ICsxMiwxNiBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9vZmZzY3JlZW5fdGFyZ2V0X21hbmFnZXIuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9yZWN0X2FsbG9jYXRvci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSZWZDbnQuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC01NDQsNSArNTQzLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvcmFzdGVyaXplci5neXAgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvcmFzdGVyaXplci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMDc4MzcuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3Jhc3Rlcml6ZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzb2Z0d2FyZV9yYXN0ZXJpemVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzb2Z0d2FyZV9yYXN0ZXJpemVyLmNjJywKLSAgICAgICAgJ3NvZnR3YXJlX3Jhc3Rlcml6ZXIuaCcsCi0gICAgICAgICd0ZXh0dXJlZF9tZXNoX3JlbmRlcmVyLmNjJywKLSAgICAgICAgJ3RleHR1cmVkX21lc2hfcmVuZGVyZXIuaCcsCi0gICAgICBdLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc29mdHdhcmVfcmFzdGVyaXplci5neXA6c29mdHdhcmVfcmFzdGVyaXplcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc2tpYS5neXA6c2tpYScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2hhcmR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2RyYXdfY2FsbGJhY2suaCcsCi0gICAgICAgICdkcmF3X2NhbGxiYWNrLmNjJywKLSAgICAgICAgJ2RyYXdfY2xlYXIuaCcsCi0gICAgICAgICdkcmF3X2NsZWFyLmNjJywKLSAgICAgICAgJ2RyYXdfb2JqZWN0LmgnLAotICAgICAgICAnZHJhd19vYmplY3QuY2MnLAotICAgICAgICAnZHJhd19vYmplY3RfbWFuYWdlci5oJywKLSAgICAgICAgJ2RyYXdfb2JqZWN0X21hbmFnZXIuY2MnLAotICAgICAgICAnZHJhd19wb2x5X2NvbG9yLmgnLAotICAgICAgICAnZHJhd19wb2x5X2NvbG9yLmNjJywKLSAgICAgICAgJ2RyYXdfcmVjdF9ib3JkZXIuaCcsCi0gICAgICAgICdkcmF3X3JlY3RfYm9yZGVyLmNjJywKLSAgICAgICAgJ2RyYXdfcmVjdF9jb2xvcl90ZXh0dXJlLmgnLAotICAgICAgICAnZHJhd19yZWN0X2NvbG9yX3RleHR1cmUuY2MnLAotICAgICAgICAnZHJhd19yZWN0X2xpbmVhcl9ncmFkaWVudC5oJywKLSAgICAgICAgJ2RyYXdfcmVjdF9saW5lYXJfZ3JhZGllbnQuY2MnLAotICAgICAgICAnZHJhd19yZWN0X3JhZGlhbF9ncmFkaWVudC5oJywKLSAgICAgICAgJ2RyYXdfcmVjdF9yYWRpYWxfZ3JhZGllbnQuY2MnLAotICAgICAgICAnZHJhd19yZWN0X3NoYWRvd19zcHJlYWQuaCcsCi0gICAgICAgICdkcmF3X3JlY3Rfc2hhZG93X3NwcmVhZC5jYycsCi0gICAgICAgICdkcmF3X3JlY3Rfc2hhZG93X2JsdXIuaCcsCi0gICAgICAgICdkcmF3X3JlY3Rfc2hhZG93X2JsdXIuY2MnLAotICAgICAgICAnZHJhd19yZWN0X3RleHR1cmUuaCcsCi0gICAgICAgICdkcmF3X3JlY3RfdGV4dHVyZS5jYycsCi0gICAgICAgICdkcmF3X3JyZWN0X2NvbG9yLmgnLAotICAgICAgICAnZHJhd19ycmVjdF9jb2xvci5jYycsCi0gICAgICAgICdkcmF3X3JyZWN0X2NvbG9yX3RleHR1cmUuaCcsCi0gICAgICAgICdkcmF3X3JyZWN0X2NvbG9yX3RleHR1cmUuY2MnLAotICAgICAgICAnZ3JhcGhpY3Nfc3RhdGUuaCcsCi0gICAgICAgICdncmFwaGljc19zdGF0ZS5jYycsCi0gICAgICAgICdoYXJkd2FyZV9yYXN0ZXJpemVyLmNjJywKLSAgICAgICAgJ2hhcmR3YXJlX3Jhc3Rlcml6ZXIuaCcsCi0gICAgICAgICdvZmZzY3JlZW5fdGFyZ2V0X21hbmFnZXIuaCcsCi0gICAgICAgICdvZmZzY3JlZW5fdGFyZ2V0X21hbmFnZXIuY2MnLAotICAgICAgICAncmVjdF9hbGxvY2F0b3IuaCcsCi0gICAgICAgICdyZWN0X2FsbG9jYXRvci5jYycsCi0gICAgICAgICdyZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuaCcsCi0gICAgICAgICdyZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuY2MnLAotICAgICAgICAnc2hhZGVyX2Jhc2UuaCcsCi0gICAgICAgICdzaGFkZXJfYmFzZS5jYycsCi0gICAgICAgICdzaGFkZXJfcHJvZ3JhbS5oJywKLSAgICAgICAgJ3NoYWRlcl9wcm9ncmFtLmNjJywKLSAgICAgICAgJ3NoYWRlcl9wcm9ncmFtX21hbmFnZXIuaCcsCi0gICAgICAgICdzaGFkZXJfcHJvZ3JhbV9tYW5hZ2VyLmNjJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvc2hhZGVycy5neXA6c2hhZGVycycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3Jhc3Rlcml6ZXIuZ3lwOmhhcmR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWEuZ3lwOnNraWEnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZF9oZWFkZXJzX29ubHkuZ3lwOnN0YXJib2FyZF9oZWFkZXJzX29ubHknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9yZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuY2MKaW5kZXggMjY0NGJhYS4uZTI1OTk5NyAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvcmVuZGVyX3RyZWVfbm9kZV92aXNpdG9yLmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDYsNiArNDMsNyBAQAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfaW1hZ2UuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2ltYWdlLmgiICAgICAgICAgICAgICAvLyBub2duY2hlY2sKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3Nrb3R0aWVfYW5pbWF0aW9uLmgiICAvLyBub2duY2hlY2sKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSByZW5kZXJlciB7CkBAIC03NTAsNyArNzQ4LDggQEAKICAgY29uc3QgcmVuZGVyX3RyZWU6OlB1bmNoVGhyb3VnaFZpZGVvTm9kZTo6QnVpbGRlciYgZGF0YSA9IHZpZGVvX25vZGUtPmRhdGEoKTsKICAgbWF0aDo6UmVjdEYgbWFwcGVkX3JlY3RfZmxvYXQgPSBkcmF3X3N0YXRlXy50cmFuc2Zvcm0uTWFwUmVjdChkYXRhLnJlY3QpOwogICBtYXRoOjpSZWN0IG1hcHBlZF9yZWN0ID0gbWF0aDo6UmVjdDo6Um91bmRGcm9tUmVjdEYobWFwcGVkX3JlY3RfZmxvYXQpOwotICBkYXRhLnNldF9ib3VuZHNfY2IuUnVuKG1hcHBlZF9yZWN0KTsKKyAgZGF0YS5zZXRfYm91bmRzX2NiLlJ1bihtYXBwZWRfcmVjdC54KCksIG1hcHBlZF9yZWN0LnkoKSwgbWFwcGVkX3JlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRfcmVjdC5oZWlnaHQoKSk7CiAKICAgRENIRUNLX0VRKGRhdGEucmVjdCwgdmlkZW9fbm9kZS0+R2V0Qm91bmRzKCkpOwogICBBZGRDbGVhcihkYXRhLnJlY3QsIGtUcmFuc3BhcmVudEJsYWNrKTsKQEAgLTEyODYsNSArMTI4NSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcl9iYXNlLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcl9iYXNlLmNjCmluZGV4IDBkMGJmNjUuLjNhN2U0NTEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJfYmFzZS5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX2Jhc2UuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX2Jhc2UuaCIKIApAQCAtNDYsNSArNDUsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJfcHJvZ3JhbS5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJfcHJvZ3JhbS5jYwppbmRleCBiYWFmYzM5Li43ZjAwZDQ3IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX3Byb2dyYW0uY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcl9wcm9ncmFtLmNjCkBAIC0xMyw3ICsxMyw2IEBACiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcl9wcm9ncmFtLmgiCiAKQEAgLTEwMCw1ICs5OSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcl9wcm9ncmFtX21hbmFnZXIuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX3Byb2dyYW1fbWFuYWdlci5jYwppbmRleCBlYWY5ODM4Li5kZDkyZTAyIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX3Byb2dyYW1fbWFuYWdlci5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVyX3Byb2dyYW1fbWFuYWdlci5jYwpAQCAtMTMsNyArMTMsNiBAQAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKIAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJfcHJvZ3JhbV9tYW5hZ2VyLmgiCiAKQEAgLTY4LDUgKzY3LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJfaW1wbC5weSBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcl9pbXBsLnB5CmluZGV4IGYxZjY4NGQuLmI1ZDNiYTggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcl9pbXBsLnB5CisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcl9pbXBsLnB5CkBAIC0xNDksNyArMTQ5LDYgQEAKIC8vIERvIG5vdCBlZGl0IQogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJ7aGVhZGVyX2ZpbGVuYW1lfSIKIApAQCAtMTYzLDcgKzE2Miw2IEBACiB9fSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9fSAgLy8gbmFtZXNwYWNlIGNvYmFsdAogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKICIiIgogCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL3NoYWRlcnMuZ3lwIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvc2hhZGVycy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjN2EzNDkuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvc2hhZGVycy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3V0cHV0X2Rpcic6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9lZ2wnLAotICAgICdzaGFkZXJfaW1wbF9oZWFkZXInOiAnPChvdXRwdXRfZGlyKS9nZW5lcmF0ZWRfc2hhZGVyX2ltcGwuaCcsCi0gICAgJ3NoYWRlcl9pbXBsX3NvdXJjZSc6ICc8KG91dHB1dF9kaXIpL2dlbmVyYXRlZF9zaGFkZXJfaW1wbC5jYycsCi0gICAgJ2dlbmVyYXRlX2NsYXNzX3NjcmlwdCc6ICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJfaW1wbC5weScsCi0gICAgJ3NoYWRlcl9zb3VyY2VzJzogWwotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X2NvbG9yLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X2NvbG9yX2JsdXIuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvZnJhZ21lbnRfY29sb3JfYmx1cl9ycmVjdHMuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvZnJhZ21lbnRfY29sb3JfaW5jbHVkZS5nbHNsJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9mcmFnbWVudF9jb2xvcl90ZXhjb29yZC5nbHNsJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9mcmFnbWVudF9jb2xvcl90ZXhjb29yZF95dXYzLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X29wYWNpdHlfdGV4Y29vcmQxZC5nbHNsJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9mcmFnbWVudF9yY29ybmVyX2NvbG9yLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X3Jjb3JuZXIyX2NvbG9yLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X3Jjb3JuZXJfdGV4Y29vcmRfY29sb3IuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvZnJhZ21lbnRfcmNvcm5lcl90ZXhjb29yZF9jb2xvcl95dXYzLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X3RleGNvb3JkLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ZyYWdtZW50X3RleGNvb3JkX3l1djMuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvZnVuY3Rpb25fZ2F1c3NpYW5faW50ZWdyYWwuaW5jJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9mdW5jdGlvbl9pc19vdXRzaWRlX3Jjb3JuZXIuaW5jJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9pbWFnZV9zYW1wbGVyX3JnYmEuaW5jJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy9pbWFnZV9zYW1wbGVyX3JnYmFfd2l0aF9jbGFtcC5pbmMnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL2ltYWdlX3NhbXBsZXJfeXV2M193aXRoX2NsYW1wLmluYycsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvaW1hZ2Vfc2FtcGxlcl95dXYzLmluYycsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvdmVydGV4X2NvbG9yLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL3ZlcnRleF9jb2xvcl9vZmZzZXQuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvdmVydGV4X2NvbG9yX3RleGNvb3JkLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL3ZlcnRleF9vZmZzZXQuZ2xzbCcsCi0gICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NoYWRlcnMvdmVydGV4X29mZnNldF9yY29ybmVyLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL3ZlcnRleF9yY29ybmVyLmdsc2wnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zaGFkZXJzL3ZlcnRleF9yY29ybmVyMi5nbHNsJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy92ZXJ0ZXhfcmNvcm5lcl90ZXhjb29yZC5nbHNsJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc2hhZGVycy92ZXJ0ZXhfdGV4Y29vcmQuZ2xzbCcsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfc2hhZGVyX2ltcGwnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAjIEJlY2F1c2Ugd2UgZ2VuZXJhdGUgYSBoZWFkZXIsIHdlIG11c3Qgc2V0IHRoZSBoYXJkX2RlcGVuZGVuY3kgZmxhZy4KLSAgICAgICdoYXJkX2RlcGVuZGVuY3knOiAxLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2lucHV0X3NoYWRlcl9maWxlc19maWxlJzogJzx8KGdlbmVyYXRlX3NoYWRlcl9pbXBsX2lucHV0cy50bXAgPEAoc2hhZGVyX3NvdXJjZXMpKScsCi0gICAgICB9LAotCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICMgUGFyc2Ugc2hhZGVyIGZpbGVzIHRvIGNyZWF0ZSBhIGhlYWRlciBhbmQgc291cmNlIGZpbGUgd2hpY2ggY29udGFpbgotICAgICAgICAgICMgY2xhc3NlcyBlbmNhcHN1bGF0aW5nIHRoZSBzaGFkZXIgYXR0cmlidXRlcywgdW5pZm9ybXMsIGFuZCBzb3VyY2UuCi0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NyZWF0ZV9zaGFkZXJfY2xhc3NlcycsCi0gICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICc8KGdlbmVyYXRlX2NsYXNzX3NjcmlwdCknLAotICAgICAgICAgICAgJzwoaW5wdXRfc2hhZGVyX2ZpbGVzX2ZpbGUpJywKLSAgICAgICAgICAgICc8QChzaGFkZXJfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChzaGFkZXJfaW1wbF9oZWFkZXIpJywKLSAgICAgICAgICAgICc8KHNoYWRlcl9pbXBsX3NvdXJjZSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KGdlbmVyYXRlX2NsYXNzX3NjcmlwdCknLAotICAgICAgICAgICAgJzwoc2hhZGVyX2ltcGxfaGVhZGVyKScsCi0gICAgICAgICAgICAnPChzaGFkZXJfaW1wbF9zb3VyY2UpJywKLSAgICAgICAgICAgICc8KGlucHV0X3NoYWRlcl9maWxlc19maWxlKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIDwoc2hhZGVyX2ltcGxfaGVhZGVyKSBhbmQgPChzaGFkZXJfaW1wbF9zb3VyY2UpJywKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2hhZGVycycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAjIFdlJ3JlIGRlcGVuZGluZyBvbiBhIHRhcmdldCB3aGljaCBnZW5lcmF0ZXMgYSBoZWFkZXIgZmlsZSwgc28gbWFrZSBzdXJlIG90aGVyCi0gICAgICAjIHRhcmdldHMgd2hpY2ggbmVlZCB0aGUgaGVhZGVyIGZpbGUga25vdyB0aGlzLgotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0KLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzwoc2hhZGVyX2ltcGxfaGVhZGVyKScsCi0gICAgICAgICc8KHNoYWRlcl9pbXBsX3NvdXJjZSknLAotICAgICAgXSwKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dlbmVyYXRlX3NoYWRlcl9pbXBsJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgIF0sCi0KLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvc29mdHdhcmVfcmFzdGVyaXplci5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zb2Z0d2FyZV9yYXN0ZXJpemVyLmNjCmluZGV4IGY1OWZjOTMuLjkyMzE2YTggMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zb2Z0d2FyZV9yYXN0ZXJpemVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC9zb2Z0d2FyZV9yYXN0ZXJpemVyLmNjCkBAIC0xMiw5ICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQotCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3NvZnR3YXJlX3Jhc3Rlcml6ZXIuaCIKIAogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTI1LDYgKzIyLDcgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdGV4dHVyZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2NvYmFsdF9za2lhX3R5cGVfY29udmVyc2lvbnMuaCIgIC8vIG5vZ25jaGVjaworI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tCaXRtYXAuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NhbnZhcy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrSW1hZ2VJbmZvLmgiCkBAIC0xMDcsNSArMTA1LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvdGV4dHVyZWRfbWVzaF9yZW5kZXJlci5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC90ZXh0dXJlZF9tZXNoX3JlbmRlcmVyLmNjCmluZGV4IGExZDNmOWIuLjAzOTM3NzEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC90ZXh0dXJlZF9tZXNoX3JlbmRlcmVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2VnbC90ZXh0dXJlZF9tZXNoX3JlbmRlcmVyLmNjCkBAIC0xMiwxMiArMTIsMTAgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9lZ2wvdGV4dHVyZWRfbWVzaF9yZW5kZXJlci5oIgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuaCIKQEAgLTI2LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvbWF0aC9zaXplLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3V0aWxzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2VnbF9hbmRfZ2xlcy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvZ2xtL2dsbS9ndGMvdHlwZV9wdHIuaHBwIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKQEAgLTc1OCw1ICs3NTcsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHJhc3Rlcml6ZXIKIH0gIC8vIG5hbWVzcGFjZSByZW5kZXJlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3BpeGVsX3Rlc3QuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9waXhlbF90ZXN0LmNjCmluZGV4IDc3NTAzNGEuLjIwZmVkYWYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3BpeGVsX3Rlc3QuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvcGl4ZWxfdGVzdC5jYwpAQCAtMTM2LDcgKzEzNiw5IEBACiAKIG5hbWVzcGFjZSB7CiAKLWJvb2wgU2V0Qm91bmRzKGJvb2wgcmVzdWx0LCBjb25zdCBtYXRoOjpSZWN0JikgeyByZXR1cm4gcmVzdWx0OyB9Citib29sIFNldEJvdW5kcyhib29sIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgcmV0dXJuIHJlc3VsdDsKK30KIAogfSAgLy8gbmFtZXNwYWNlCiAKQEAgLTM5NjQsOCArMzk2Niw2IEBACiAgIFRlc3RUcmVlKG5ldyBJbWFnZU5vZGUob2Zmc2NyZWVuX3JlbmRlcmVkX2ltYWdlKSk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBFTkFCTEVfTUFQX1RPX01FU0gKLQogbmFtZXNwYWNlIHsKIHNjb3BlZF9yZWZwdHI8TWVzaD4gQ3JlYXRlQ3ViZU1lc2goUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VfcHJvdmlkZXIpIHsKICAgLy8gRGVmaW5lcyBhIGN1YmUgbWVzaCB3aGVyZSBlYWNoIGZhY2UgZmFjZXMgaW53YXJkLiAgRWFjaCBmYWNlIGhhcyB0aGUgZW50aXJlCkBAIC00MDg4LDkgKzQwODgsNiBAQAogICBUZXN0VHJlZShDcmVhdGVNYXBUb01lc2hUZXN0UmVuZGVyVHJlZShHZXRSZXNvdXJjZVByb3ZpZGVyKCksIGltYWdlKSk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gRU5BQkxFX01BUF9UT19NRVNICi0KIFRFU1RfRihQaXhlbFRlc3QsIERyYXdOdWxsSW1hZ2UpIHsKICAgLy8gQW4gSW1hZ2VOb2RlIHdpdGggbm8gc291cmNlIGlzIGxlZ2FsLCB0aG91Z2ggaXQgc2hvdWxkIHJlc3VsdCBpbiBub3RoaW5nCiAgIC8vIGJlaW5nIGRyYXduLgpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvcmFzdGVyaXplci5neXAgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9yYXN0ZXJpemVyLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlNGU2My4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9yYXN0ZXJpemVyLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncmFzdGVyaXplcicsCi0gICAgICAndHlwZSc6ICdub25lJywKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3N0dWIvcmFzdGVyaXplci5neXA6cmFzdGVyaXplcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3Jhc3Rlcml6ZXIuZ3lwOmhhcmR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3Jhc3Rlcml6ZXIuZ3lwOnNvZnR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvZWdsL3Jhc3Rlcml6ZXIuZ3lwOmhhcmR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9jb21tb24uZ3lwIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9jb21tb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGM5YjY2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvY29tbW9uLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29tbW9uJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb2JhbHRfc2tpYV90eXBlX2NvbnZlcnNpb25zLmNjJywKLSAgICAgICAgJ2NvYmFsdF9za2lhX3R5cGVfY29udmVyc2lvbnMuaCcsCi0gICAgICAgICdmb250LmNjJywKLSAgICAgICAgJ2ZvbnQuaCcsCi0gICAgICAgICdnbHlwaF9idWZmZXIuY2MnLAotICAgICAgICAnZ2x5cGhfYnVmZmVyLmgnLAotICAgICAgICAnaGFyZmJ1enpfZm9udC5jYycsCi0gICAgICAgICdoYXJmYnV6el9mb250LmgnLAotICAgICAgICAnaW1hZ2UuY2MnLAotICAgICAgICAnaW1hZ2UuaCcsCi0gICAgICAgICdyZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuY2MnLAotICAgICAgICAncmVuZGVyX3RyZWVfbm9kZV92aXNpdG9yLmgnLAotICAgICAgICAnc2NyYXRjaF9zdXJmYWNlX2NhY2hlLmNjJywKLSAgICAgICAgJ3NjcmF0Y2hfc3VyZmFjZV9jYWNoZS5oJywKLSAgICAgICAgJ3Nrb3R0aWVfYW5pbWF0aW9uLmNjJywKLSAgICAgICAgJ3Nrb3R0aWVfYW5pbWF0aW9uLmgnLAotICAgICAgICAndGV4dF9zaGFwZXIuY2MnLAotICAgICAgICAndGV4dF9zaGFwZXIuaCcsCi0gICAgICAgICd0eXBlZmFjZS5jYycsCi0gICAgICAgICd0eXBlZmFjZS5oJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWEuZ3lwOnNraWEnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwOmhhcmZidXp6LW5nJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L290cy9vdHMuZ3lwOm90cycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2dsX2Zvcm1hdF9jb252ZXJzaW9ucy5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvZ2xfZm9ybWF0X2NvbnZlcnNpb25zLmNjCmluZGV4IGM2NDdkM2EuLjJlNzFjZjIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvZ2xfZm9ybWF0X2NvbnZlcnNpb25zLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvZ2xfZm9ybWF0X2NvbnZlcnNpb25zLmNjCkBAIC0xMyw3ICsxMyw2IEBACiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9nbF9mb3JtYXRfY29udmVyc2lvbnMuaCIKIApAQCAtMTAxLDUgKzEwMCwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9pbWFnZS5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfaW1hZ2UuY2MKaW5kZXggNmUxZmI4ZS4uYmQ5YTJjMyAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9pbWFnZS5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX2ltYWdlLmNjCkBAIC0xMiwxMiArMTIsMTAgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX2ltYWdlLmgiCiAKICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJiYXNlL2JpbmQuaCIKQEAgLTI4LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdGV4dHVyZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvY29iYWx0X3NraWFfdHlwZV9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvZ2xfZm9ybWF0X2NvbnZlcnNpb25zLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0ltYWdlLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tQaXhlbFJlZi5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9ncHUvR3JCYWNrZW5kU3VyZmFjZS5oIgpAQCAtMzg1LDggKzM4NCw3IEBACiAgIGlmIChyYXN0ZXJpemVyX3Rhc2tfcnVubmVyXykgewogICAgIGlmICghcmFzdGVyaXplcl90YXNrX3J1bm5lcl8tPkJlbG9uZ3NUb0N1cnJlbnRUaHJlYWQoKSB8fAogICAgICAgICAhYmFja2VuZF9pbWFnZV8tPlRyeURlc3Ryb3koKSkgewotICAgICAgcmFzdGVyaXplcl90YXNrX3J1bm5lcl8tPkRlbGV0ZVNvb24oCi0gICAgICAgICAgRlJPTV9IRVJFLCBiYWNrZW5kX2ltYWdlXy5yZWxlYXNlKCkpOworICAgICAgcmFzdGVyaXplcl90YXNrX3J1bm5lcl8tPkRlbGV0ZVNvb24oRlJPTV9IRVJFLCBiYWNrZW5kX2ltYWdlXy5yZWxlYXNlKCkpOwogICAgIH0KICAgfSAgLy8gZWxzZSBsZXQgdGhlIHNjb3BlZCBwb2ludGVyIGNsZWFuIGl0IHVwIGltbWVkaWF0ZWx5LgogfQpAQCAtNDkzLDUgKzQ5MSwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9pbWFnZS5oIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9pbWFnZS5oCmluZGV4IDI5ZTI1ZTkuLjFjYjQ0OTMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfaW1hZ2UuaAorKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX2ltYWdlLmgKQEAgLTI2LDE0ICsyNiwyNCBAQAogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9iYWNrZW5kL2VnbC90ZXh0dXJlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvZWdsL3RleHR1cmVfZGF0YS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaW1hZ2UuaCIKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2dwdS9HckRpcmVjdENvbnRleHQuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyVHlwZXMuaCIgIC8vIGluY2x1ZGVkIGZvciBHck1pcE1hcHBlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpYXMKKyNlbHNlCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2dwdS9HckNvbnRleHQuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyVGV4dHVyZS5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHJlbmRlcmVyIHsKIG5hbWVzcGFjZSByYXN0ZXJpemVyIHsKIG5hbWVzcGFjZSBza2lhIHsKIAorI2lmZGVmIFVTRV9TS0lBX05FWFQKK3VzaW5nIEdyQ29udGV4dCA9IEdyRGlyZWN0Q29udGV4dDsKKyNlbmRpZgorCiAvLyBXZSB1c2UgR0wgUkdCQSBmb3JtYXRzIHRvIGluZGljYXRlIHRoYXQgYSB0ZXh0dXJlIGhhcyA0IGNoYW5uZWxzLCBidXQgdGhvc2UKIC8vIDQgY2hhbm5lbHMgbWF5IG5vdCBhbHdheXMgc3RyaWN0bHkgbWVhbiByZWQsIGdyZWVuLCBibHVlIGFuZCBhbHBoYS4gIFRoaXMKIC8vIGVudW0gaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgZm9ybWF0IHRoZXkgYXJlIHNvIHRoYXQgcG90ZW50aWFsbHkgZGlmZmVyZW50CkBAIC00NywxMSArNTcsMTMgQEAKICAgICBjb25zdCBzY29wZWRfcmVmcHRyPGJhY2tlbmQ6OlJlbmRlclRhcmdldD4mIHJlbmRlcl90YXJnZXQpPgogICAgIFN1Ym1pdE9mZnNjcmVlbkNhbGxiYWNrOwogCisjaWZuZGVmIFVTRV9TS0lBX05FWFQKIC8vIFdyYXBzIGEgQ29iYWx0IGJhY2tlbmQ6OlRleHR1cmVFR0wgd2l0aCBhIFNraWEgR3JUZXh0dXJlLCBhbmQgcmV0dXJucyB0aGUKIC8vIFNraWEgcmVmLWNvdW50ZWQgR3JUZXh0dXJlIG9iamVjdCAodGhhdCB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGNvYmFsdAogLy8gdGV4dHVyZSkuCiBHclRleHR1cmUqIENvYmFsdFRleHR1cmVUb1NraWFUZXh0dXJlKAogICAgIEdyQ29udGV4dCogZ3JfY29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPGJhY2tlbmQ6OlRleHR1cmVFR0w+IGNvYmFsdF90ZXh0dXJlKTsKKyNlbmRpZgogCiAvLyBGb3J3YXJkcyBJbWFnZURhdGEgbWV0aG9kcyBvbiB0byBUZXh0dXJlRGF0YSBtZXRob2RzLgogY2xhc3MgSGFyZHdhcmVJbWFnZURhdGEgOiBwdWJsaWMgcmVuZGVyX3RyZWU6OkltYWdlRGF0YSB7CkBAIC05MiwxNyArMTA0LDE1IEBACiAvLyBhY3R1YWxseSBjb250YWlucyB0aGUgdGV4dHVyZSBkYXRhLgogY2xhc3MgSGFyZHdhcmVGcm9udGVuZEltYWdlIDogcHVibGljIFNpbmdsZVBsYW5lSW1hZ2UgewogIHB1YmxpYzoKLSAgSGFyZHdhcmVGcm9udGVuZEltYWdlKHN0ZDo6dW5pcXVlX3B0cjxIYXJkd2FyZUltYWdlRGF0YT4gaW1hZ2VfZGF0YSwKLSAgICAgIGJhY2tlbmQ6OkdyYXBoaWNzQ29udGV4dEVHTCogY29iYWx0X2NvbnRleHQsCi0gICAgICBHckNvbnRleHQqIGdyX2NvbnRleHQsCisgIEhhcmR3YXJlRnJvbnRlbmRJbWFnZSgKKyAgICAgIHN0ZDo6dW5pcXVlX3B0cjxIYXJkd2FyZUltYWdlRGF0YT4gaW1hZ2VfZGF0YSwKKyAgICAgIGJhY2tlbmQ6OkdyYXBoaWNzQ29udGV4dEVHTCogY29iYWx0X2NvbnRleHQsIEdyQ29udGV4dCogZ3JfY29udGV4dCwKICAgICAgIHNjb3BlZF9yZWZwdHI8YmFzZTo6U2luZ2xlVGhyZWFkVGFza1J1bm5lcj4gcmFzdGVyaXplcl90YXNrX3J1bm5lcik7CiAgIEhhcmR3YXJlRnJvbnRlbmRJbWFnZSgKICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFja2VuZDo6Q29uc3RSYXdUZXh0dXJlTWVtb3J5RUdMPiYKICAgICAgICAgICByYXdfdGV4dHVyZV9tZW1vcnksCi0gICAgICBpbnRwdHJfdCBvZmZzZXQsCi0gICAgICBjb25zdCByZW5kZXJfdHJlZTo6SW1hZ2VEYXRhRGVzY3JpcHRvciYgZGVzY3JpcHRvciwKLSAgICAgIGJhY2tlbmQ6OkdyYXBoaWNzQ29udGV4dEVHTCogY29iYWx0X2NvbnRleHQsCi0gICAgICBHckNvbnRleHQqIGdyX2NvbnRleHQsCisgICAgICBpbnRwdHJfdCBvZmZzZXQsIGNvbnN0IHJlbmRlcl90cmVlOjpJbWFnZURhdGFEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLAorICAgICAgYmFja2VuZDo6R3JhcGhpY3NDb250ZXh0RUdMKiBjb2JhbHRfY29udGV4dCwgR3JDb250ZXh0KiBncl9jb250ZXh0LAogICAgICAgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiByYXN0ZXJpemVyX3Rhc2tfcnVubmVyKTsKICAgSGFyZHdhcmVGcm9udGVuZEltYWdlKAogICAgICAgc3RkOjp1bmlxdWVfcHRyPGJhY2tlbmQ6OlRleHR1cmVFR0w+IHRleHR1cmUsCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX21lc2guY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX21lc2guY2MKaW5kZXggMTlhZDEyNy4uMzlkMDlhZiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9tZXNoLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfbWVzaC5jYwpAQCAtMTQsMTQgKzE0LDE0IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX21lc2guaCIKIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHJlbmRlcmVyIHsKIG5hbWVzcGFjZSByYXN0ZXJpemVyIHsKQEAgLTg2LDUgKzg2LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MKaW5kZXggZGIwYzY5Yy4uMjNkMzk4MiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9yYXN0ZXJpemVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfcmFzdGVyaXplci5jYwpAQCAtMTIsOSArMTIsNiBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfcmFzdGVyaXplci5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMzUsMTUgKzMyLDIyIEBACiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9yZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NjcmF0Y2hfc3VyZmFjZV9jYWNoZS5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2dsbS9nbG0vZ3RjL21hdHJpeF9pbnZlcnNlLmhwcCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9nbG0vZ2xtL2d0eC90cmFuc2Zvcm0uaHBwIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2dsbS9nbG0vbWF0M3gzLmhwcCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NhbnZhcy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3VyZmFjZS5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9ncHUvR3JCYWNrZW5kU3VyZmFjZS5oIgorI2lmZGVmIFVTRV9TS0lBX05FWFQKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyRGlyZWN0Q29udGV4dC5oIgorI2Vsc2UKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyQ29udGV4dC5oIgorI2VuZGlmCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2dwdS9HckNvbnRleHRPcHRpb25zLmgiCisjaWZuZGVmIFVTRV9TS0lBX05FWFQKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyVGV4dHVyZS5oIgorI2VuZGlmCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2dwdS9nbC9HckdMSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyUmVuZGVyVGFyZ2V0LmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyUmVzb3VyY2VQcm92aWRlci5oIgpAQCAtMTUzLDcgKzE1NywxMSBAQAogCiBTa1N1cmZhY2VQcm9wcyBHZXRSZW5kZXJUYXJnZXRTdXJmYWNlUHJvcHMoYm9vbCBmb3JjZV9kZXRlcm1pbmlzdGljX3JlbmRlcmluZykgewogICB1aW50MzJfdCBmbGFncyA9IDA7CisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICByZXR1cm4gU2tTdXJmYWNlUHJvcHMoZmxhZ3MsIGtVbmtub3duX1NrUGl4ZWxHZW9tZXRyeSk7CisjZWxzZQogICByZXR1cm4gU2tTdXJmYWNlUHJvcHMoZmxhZ3MsIFNrU3VyZmFjZVByb3BzOjprTGVnYWN5Rm9udEhvc3RfSW5pdFR5cGUpOworI2VuZGlmCiB9CiAKIC8vIFRha2VzIG1ldGEtZGF0YSBmcm9tIGEgQ29iYWx0IFJlbmRlclRhcmdldCBvYmplY3QgYW5kIHVzZXMgaXQgdG8gZmlsbCBvdXQKQEAgLTUxMywxMSArNTIxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfdmlld19wcm9qZWN0aW9uX21hdHJpeCk7CiAgIH0KIAotICAvLyBMZXQgU2tpYSBrbm93IHRoYXQgd2UndmUgbW9kaWZpZWQgR0wgc3RhdGUuCisvLyBMZXQgU2tpYSBrbm93IHRoYXQgd2UndmUgbW9kaWZpZWQgR0wgc3RhdGUuCisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICB1aW50MzJfdCB1bnRvdWNoZWRfc3RhdGVzID0KKyAgICAgIGtNU0FBRW5hYmxlX0dyR0xCYWNrZW5kU3RhdGUgfCBrU3RlbmNpbF9HckdMQmFja2VuZFN0YXRlIHwKKyAgICAgIGtQaXhlbFN0b3JlX0dyR0xCYWNrZW5kU3RhdGUgfCBrRml4ZWRGdW5jdGlvbl9HckdMQmFja2VuZFN0YXRlOworI2Vsc2UKICAgdWludDMyX3QgdW50b3VjaGVkX3N0YXRlcyA9CiAgICAgICBrTVNBQUVuYWJsZV9HckdMQmFja2VuZFN0YXRlIHwga1N0ZW5jaWxfR3JHTEJhY2tlbmRTdGF0ZSB8CiAgICAgICBrUGl4ZWxTdG9yZV9HckdMQmFja2VuZFN0YXRlIHwga0ZpeGVkRnVuY3Rpb25fR3JHTEJhY2tlbmRTdGF0ZSB8CiAgICAgICBrUGF0aFJlbmRlcmluZ19HckdMQmFja2VuZFN0YXRlOworI2VuZGlmCiAgIGdyX2NvbnRleHRfLT5yZXNldENvbnRleHQofnVudG91Y2hlZF9zdGF0ZXMgJiBrQWxsX0dyQmFja2VuZFN0YXRlKTsKIH0KIApAQCAtOTE0LDUgKzkyOCwzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9yYXN0ZXJpemVyLmggYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuaAppbmRleCBmZjBmYjdiLi42YWU1OGZiIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuaAorKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jhc3Rlcml6ZXIuaApAQCAtMjIsNyArMjIsMTEgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9yZW5kZXJfdGFyZ2V0LmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvcmFzdGVyaXplci5oIgogCisjaWZkZWYgVVNFX1NLSUFfTkVYVAorY2xhc3MgR3JEaXJlY3RDb250ZXh0OworI2Vsc2UKIGNsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgogY2xhc3MgU2tDYW52YXM7CiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNzYsNyArODAsMTEgQEAKICAgICAgIGNvbnN0IHNjb3BlZF9yZWZwdHI8YmFja2VuZDo6UmVuZGVyVGFyZ2V0PiYgcmVuZGVyX3RhcmdldCk7CiAKICAgcmVuZGVyX3RyZWU6OlJlc291cmNlUHJvdmlkZXIqIEdldFJlc291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIEdyRGlyZWN0Q29udGV4dCogR2V0R3JDb250ZXh0KCk7CisjZWxzZQogICBHckNvbnRleHQqIEdldEdyQ29udGV4dCgpOworI2VuZGlmCiAKICAgdm9pZCBNYWtlQ3VycmVudCgpIG92ZXJyaWRlOwogICB2b2lkIFJlbGVhc2VDb250ZXh0KCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9yZXNvdXJjZV9wcm92aWRlci5jYwppbmRleCAwY2NlZTgyLi44NGI1YTcxIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfcmVzb3VyY2VfcHJvdmlkZXIuY2MKQEAgLTEyLDEwICsxMiw2IEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmgiCiAKICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0zNyw2ICszMyw3IEBACiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta1R5cGVmYWNlX2NvYmFsdC5oIgogI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tvdHRpZV9hbmltYXRpb24uaCIKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3R5cGVmYWNlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9vdHMvaW5jbHVkZS9vcGVudHlwZS1zYW5pdGlzZXIuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9vdHMvaW5jbHVkZS9vdHMtbWVtb3J5LXN0cmVhbS5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrRGF0YS5oIgpAQCAtMjA2LDcgKzIwMyw5IEBACiAgICAgICB9CiAgICAgfSBicmVhazsKICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMDoKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERUNPREVfVEFSR0VUX0ZPUk1BVF9ZVVZJNDIwX0NPTVBBQ1RfQVBJX1ZFUlNJT04KICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMENvbXBhY3Q6CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFQ09ERV9UQVJHRVRfRk9STUFUX1lVVkk0MjBfQ09NUEFDVF9BUElfVkVSU0lPTgogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lWVVWSTQyMDogewogICAgICAgRENIRUNLX0xUKHBsYW5lLCAzKTsKICNpZiBkZWZpbmVkKEdMX1JFRF9FWFQpCkBAIC0yMzUsOSArMjM0LDExIEBACiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjA6IHsKICAgICAgIHJldHVybiByZW5kZXJfdHJlZTo6a011bHRpUGxhbmVJbWFnZUZvcm1hdFlVVjNQbGFuZTEwQml0QlQyMDIwOwogICAgIH0gYnJlYWs7CisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVDT0RFX1RBUkdFVF9GT1JNQVRfWVVWSTQyMF9DT01QQUNUX0FQSV9WRVJTSU9OCiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjBDb21wYWN0OiB7CiAgICAgICByZXR1cm4gcmVuZGVyX3RyZWU6OmtNdWx0aVBsYW5lSW1hZ2VGb3JtYXRZVVYzUGxhbmUxMEJpdENvbXBhY3RlZEJUMjAyMDsKICAgICB9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFQ09ERV9UQVJHRVRfRk9STUFUX1lVVkk0MjBfQ09NUEFDVF9BUElfVkVSU0lPTgogICAgIGRlZmF1bHQ6IHsgTk9UUkVBQ0hFRCgpOyB9CiAgIH0KICAgcmV0dXJuIHJlbmRlcl90cmVlOjprTXVsdGlQbGFuZUltYWdlRm9ybWF0WVVWMlBsYW5lQlQ3MDk7CkBAIC01NjksNSArNTcwLDMgQEAKIH0gIC8vIG5hbWVzcGFjZSByYXN0ZXJpemVyCiB9ICAvLyBuYW1lc3BhY2UgcmVuZGVyZXIKIH0gIC8vIG5hbWVzcGFjZSBjb2JhbHQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmggYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmgKaW5kZXggMmE3ZGMzZC4uMjMxY2RkOSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9oYXJkd2FyZV9yZXNvdXJjZV9wcm92aWRlci5oCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvaGFyZHdhcmVfcmVzb3VyY2VfcHJvdmlkZXIuaApAQCAtMjYsNyArMjYsMTEgQEAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2hhcmR3YXJlX2ltYWdlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS90ZXh0X3NoYXBlci5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrRm9udE1nci5oIgorI2lmZGVmIFVTRV9TS0lBX05FWFQKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyRGlyZWN0Q29udGV4dC5oIgorI2Vsc2UKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1L0dyQ29udGV4dC5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHJlbmRlcmVyIHsKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvcmFzdGVyaXplci5neXAgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3Jhc3Rlcml6ZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWUyODk0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvcmFzdGVyaXplci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2hhcmR3YXJlX3Jhc3Rlcml6ZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2dsX2Zvcm1hdF9jb252ZXJzaW9ucy5jYycsCi0gICAgICAgICdoYXJkd2FyZV9pbWFnZS5jYycsCi0gICAgICAgICdoYXJkd2FyZV9pbWFnZS5oJywKLSAgICAgICAgJ2hhcmR3YXJlX21lc2guY2MnLAotICAgICAgICAnaGFyZHdhcmVfbWVzaC5oJywKLSAgICAgICAgJ2hhcmR3YXJlX3Jhc3Rlcml6ZXIuY2MnLAotICAgICAgICAnaGFyZHdhcmVfcmFzdGVyaXplci5oJywKLSAgICAgICAgJ2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmNjJywKLSAgICAgICAgJ2hhcmR3YXJlX3Jlc291cmNlX3Byb3ZpZGVyLmgnLAotICAgICAgICAndmVydGV4X2J1ZmZlcl9vYmplY3QuY2MnLAotICAgICAgICAndmVydGV4X2J1ZmZlcl9vYmplY3QuaCcsCi0gICAgICBdLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL2NvbW1vbi9jb21tb24uZ3lwOmNvbW1vbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhLmd5cDpza2lhJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL2hhcmZidXp6Lmd5cDpoYXJmYnV6ei1uZycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9vdHMvb3RzLmd5cDpvdHMnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9yZW5kZXJfdHJlZV9ub2RlX3Zpc2l0b3IuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5jYwppbmRleCBkZTk0Yzg2Li4yOWRjNjhkIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3JlbmRlcl90cmVlX25vZGVfdmlzaXRvci5jYwpAQCAtNTYsOSArNTYsMTUgQEAKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1JlZ2lvbi5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3VyZmFjZS5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrVHlwZWZhY2UuaCIKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2VmZmVjdHMvU2tJbWFnZUZpbHRlcnMuaCIKKyNlbHNlCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2VmZmVjdHMvU2tCbHVySW1hZ2VGaWx0ZXIuaCIKKyNlbmRpZgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9lZmZlY3RzL1NrQmx1ck1hc2tGaWx0ZXIuaCIKKyNpZm5kZWYgVVNFX1NLSUFfTkVYVAogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9lZmZlY3RzL1NrRHJvcFNoYWRvd0ltYWdlRmlsdGVyLmgiCisjZW5kaWYKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZWZmZWN0cy9Ta0dyYWRpZW50U2hhZGVyLmgiCiAKIC8vIFNldHRpbmcgdGhpcyBkZWZpbmUgdG8gMSB3aWxsIGVuYWJsZSBUUkFDRV9FVkVOVCBjYWxscyB0byBiZSBtYWRlIGZyb20KQEAgLTIxNCw4ICsyMjAsMTIgQEAKICAgICBjb25zdCBtYXRoOjpSZWN0RiYgcmVjdCwKICAgICBjb25zdCByZW5kZXJfdHJlZTo6Um91bmRlZENvcm5lcnMmIHJvdW5kZWRfY29ybmVycykgewogICBTa1BhdGggcGF0aDsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIHBhdGguYWRkUlJlY3QoUm91bmRlZFJlY3RUb1NraWEocmVjdCwgcm91bmRlZF9jb3JuZXJzKSwgU2tQYXRoRGlyZWN0aW9uOjprQ1cpOworI2Vsc2UKICAgcGF0aC5hZGRSUmVjdChSb3VuZGVkUmVjdFRvU2tpYShyZWN0LCByb3VuZGVkX2Nvcm5lcnMpLAogICAgICAgICAgICAgICAgIFNrUGF0aDo6a0NXX0RpcmVjdGlvbik7CisjZW5kaWYKICAgcmV0dXJuIHBhdGg7CiB9CiAKQEAgLTI0Niw4ICsyNTYsMTMgQEAKICAgICBTa1BhaW50KiBwYWludCwKICAgICBjb25zdCBiYXNlOjpPcHRpb25hbDxyZW5kZXJfdHJlZTo6Qmx1ckZpbHRlcj4mIGJsdXJfZmlsdGVyKSB7CiAgIGlmIChibHVyX2ZpbHRlciAmJiBibHVyX2ZpbHRlci0+Ymx1cl9zaWdtYSgpID4gMC4wZikgeworI2lmZGVmIFVTRV9TS0lBX05FWFQKKyAgICBza19zcDxTa0ltYWdlRmlsdGVyPiBza2lhX2JsdXJfZmlsdGVyKFNrSW1hZ2VGaWx0ZXJzOjpCbHVyKAorICAgICAgICBibHVyX2ZpbHRlci0+Ymx1cl9zaWdtYSgpLCBibHVyX2ZpbHRlci0+Ymx1cl9zaWdtYSgpLCBudWxscHRyKSk7CisjZWxzZQogICAgIHNrX3NwPFNrSW1hZ2VGaWx0ZXI+IHNraWFfYmx1cl9maWx0ZXIoU2tCbHVySW1hZ2VGaWx0ZXI6Ok1ha2UoCiAgICAgICAgIGJsdXJfZmlsdGVyLT5ibHVyX3NpZ21hKCksIGJsdXJfZmlsdGVyLT5ibHVyX3NpZ21hKCksIG51bGxwdHIpKTsKKyNlbmRpZgogICAgIHBhaW50LT5zZXRJbWFnZUZpbHRlcihza2lhX2JsdXJfZmlsdGVyKTsKICAgfQogfQpAQCAtMzE4LDkgKzMzMywxMSBAQAogICBpZiAoZmlsdGVyX25vZGUub3BhY2l0eV9maWx0ZXIpIHsKICAgICBwYWludC5zZXRBUkdCKGZpbHRlcl9ub2RlLm9wYWNpdHlfZmlsdGVyLT5vcGFjaXR5KCkgKiAyNTUsIDI1NSwgMjU1LCAyNTUpOwogICB9CisjaWZuZGVmIFVTRV9TS0lBX05FWFQKICAgLy8gVXNlIG5lYXJlc3QgbmVpZ2hib3Igd2hlbiBmaWx0ZXJpbmcgdGV4dHVyZSBkYXRhLCBzaW5jZSB0aGUgc291cmNlIGFuZAogICAvLyBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIHNob3VsZCBiZSBleGFjdGx5IGVxdWFsLgogICBwYWludC5zZXRGaWx0ZXJRdWFsaXR5KGtOb25lX1NrRmlsdGVyUXVhbGl0eSk7CisjZW5kaWYKIAogICAvLyBXZSd2ZSBhbHJlYWR5IHVzZWQgdGhlIGRyYXdfc3RhdGVfLnJlbmRlcl90YXJnZXQncyBzY2FsZSB3aGVuIHJlbmRlcmluZyB0bwogICAvLyB0aGUgb2Zmc2NyZWVuIHN1cmZhY2UsIHNvIHJlc2V0IHRoZSBzY2FsZSBmb3Igbm93LgpAQCAtMzQwLDggKzM1NywxNCBAQAogICBTa1JlY3Qgc291cmNlX3JlY3QgPQogICAgICAgU2tSZWN0OjpNYWtlV0goc3VyZmFjZV9ib3VuZHMud2lkdGgoKSwgc3VyZmFjZV9ib3VuZHMuaGVpZ2h0KCkpOwogCisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICBkcmF3X3N0YXRlXy5yZW5kZXJfdGFyZ2V0LT5kcmF3SW1hZ2VSZWN0KGltYWdlLmdldCgpLCBzb3VyY2VfcmVjdCwgZGVzdF9yZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2FtcGxpbmdPcHRpb25zKCksICZwYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0NhbnZhczo6a1N0cmljdF9TcmNSZWN0Q29uc3RyYWludCk7CisjZWxzZQogICBkcmF3X3N0YXRlXy5yZW5kZXJfdGFyZ2V0LT5kcmF3SW1hZ2VSZWN0KGltYWdlLmdldCgpLCBzb3VyY2VfcmVjdCwgZGVzdF9yZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWludCk7CisjZW5kaWYKIAogICAvLyBGaW5hbGx5IHJlc3RvcmUgb3VyIHBhcmVudCByZW5kZXIgdGFyZ2V0J3Mgb3JpZ2luYWwgdHJhbnNmb3JtIGZvciB0aGUKICAgLy8gbmV4dCBkcmF3IGNhbGwuCkBAIC01NTksOCArNTgyLDEwIEBACiBTa1BhaW50IENyZWF0ZVNrUGFpbnRGb3JJbWFnZVJlbmRlcmluZygKICAgICBjb25zdCBSZW5kZXJUcmVlTm9kZVZpc2l0b3JEcmF3U3RhdGUmIGRyYXdfc3RhdGUsIGJvb2wgaXNfb3BhcXVlKSB7CiAgIFNrUGFpbnQgcGFpbnQ7CisjaWZuZGVmIFVTRV9TS0lBX05FWFQKICAgLy8gfGtMb3dfU2tGaWx0ZXJRdWFsaXR5fCBpcyB1c2VkIGZvciBiaWxpbmVhciBpbnRlcnBvbGF0aW9uIG9mIGltYWdlcy4KICAgcGFpbnQuc2V0RmlsdGVyUXVhbGl0eShrTG93X1NrRmlsdGVyUXVhbGl0eSk7CisjZW5kaWYKIAogICBpZiAoIUlzT3BhcXVlKGRyYXdfc3RhdGUub3BhY2l0eSkpIHsKICAgICBwYWludC5zZXRBbHBoYShkcmF3X3N0YXRlLm9wYWNpdHkgKiAyNTUpOwpAQCAtNjAwLDggKzYyNSwxNSBAQAogCiAgICAgaWYgKGltYWdlKSB7CiAgICAgICBTa1JlY3Qgc3JjID0gU2tSZWN0OjpNYWtlWFlXSCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgICAgICBkcmF3X3N0YXRlLT5yZW5kZXJfdGFyZ2V0LT5kcmF3SW1hZ2VSZWN0KAorICAgICAgICAgIGltYWdlLmdldCgpLCBzcmMsIENvYmFsdFJlY3RGVG9Ta2lhUmVjdChkZXN0aW5hdGlvbl9yZWN0KSwKKyAgICAgICAgICBTa1NhbXBsaW5nT3B0aW9ucyhTa0ZpbHRlck1vZGU6OmtMaW5lYXIsIFNrTWlwbWFwTW9kZTo6a05vbmUpLCAmcGFpbnQsCisgICAgICAgICAgU2tDYW52YXM6OmtTdHJpY3RfU3JjUmVjdENvbnN0cmFpbnQpOworI2Vsc2UKICAgICAgIGRyYXdfc3RhdGUtPnJlbmRlcl90YXJnZXQtPmRyYXdJbWFnZVJlY3QoCiAgICAgICAgICAgaW1hZ2UsIHNyYywgQ29iYWx0UmVjdEZUb1NraWFSZWN0KGRlc3RpbmF0aW9uX3JlY3QpLCAmcGFpbnQpOworI2VuZGlmCiAgICAgfQogICB9IGVsc2UgewogICAgIC8vIFVzZSB0aGUgbW9yZSBnZW5lcmFsIGFwcHJvYWNoIHdoaWNoIGFsbG93cyBhcmJpdHJhcnkgbG9jYWwgdGV4dHVyZQpAQCAtNjEyLDggKzY0NCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2tpYV9sb2NhbF90cmFuc2Zvcm0pOwogCiAgICAgaWYgKGltYWdlKSB7CisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICAgICAgc2tfc3A8U2tTaGFkZXI+IGltYWdlX3NoYWRlciA9IGltYWdlLT5tYWtlU2hhZGVyKAorICAgICAgICAgIFNrVGlsZU1vZGU6OmtSZXBlYXQsIFNrVGlsZU1vZGU6OmtSZXBlYXQsCisgICAgICAgICAgU2tTYW1wbGluZ09wdGlvbnMoU2tGaWx0ZXJNb2RlOjprTGluZWFyLCBTa01pcG1hcE1vZGU6OmtOb25lKSwKKyAgICAgICAgICAmc2tpYV9sb2NhbF90cmFuc2Zvcm0pOworI2Vsc2UKICAgICAgIHNrX3NwPFNrU2hhZGVyPiBpbWFnZV9zaGFkZXIgPSBpbWFnZS0+bWFrZVNoYWRlcigKICAgICAgICAgICBTa1RpbGVNb2RlOjprUmVwZWF0LCBTa1RpbGVNb2RlOjprUmVwZWF0LCAmc2tpYV9sb2NhbF90cmFuc2Zvcm0pOworI2VuZGlmCiAKICAgICAgIHBhaW50LnNldFNoYWRlcihpbWFnZV9zaGFkZXIpOwogCkBAIC03OTMsNyArODMyLDkgQEAKICAgICAgIHNrX3JlY3RfdHJhbnNmb3JtZWQueCgpLCBza19yZWN0X3RyYW5zZm9ybWVkLnkoKSwKICAgICAgIHNrX3JlY3RfdHJhbnNmb3JtZWQud2lkdGgoKSwgc2tfcmVjdF90cmFuc2Zvcm1lZC5oZWlnaHQoKSk7CiAgIG1hdGg6OlJlY3QgdHJhbnNmb3JtZWRfcmVjdCA9IG1hdGg6OlJlY3Q6OlJvdW5kRnJvbVJlY3RGKHRyYW5zZm9ybWVkX3JlY3RmKTsKLSAgcHVuY2hfdGhyb3VnaF92aWRlb19ub2RlLT5kYXRhKCkuc2V0X2JvdW5kc19jYi5SdW4odHJhbnNmb3JtZWRfcmVjdCk7CisgIHB1bmNoX3Rocm91Z2hfdmlkZW9fbm9kZS0+ZGF0YSgpLnNldF9ib3VuZHNfY2IuUnVuKAorICAgICAgdHJhbnNmb3JtZWRfcmVjdC54KCksIHRyYW5zZm9ybWVkX3JlY3QueSgpLCB0cmFuc2Zvcm1lZF9yZWN0LndpZHRoKCksCisgICAgICB0cmFuc2Zvcm1lZF9yZWN0LmhlaWdodCgpKTsKIAogICBEcmF3Q2xlYXJSZWN0KGRyYXdfc3RhdGVfLnJlbmRlcl90YXJnZXQsIG1hdGhfcmVjdCwKICAgICAgICAgICAgICAgICByZW5kZXJfdHJlZTo6Q29sb3JSR0JBKDAsIDAsIDAsIDApKTsKQEAgLTEzMzUsNyArMTM3Niw2IEBACiAgICAgRENIRUNLX0VRKGJvcmRlci50b3Auc3R5bGUsIHJlbmRlcl90cmVlOjprQm9yZGVyU3R5bGVOb25lKTsKICAgfQogCi0KICAgLy8gTGVmdAogICBpZiAoYm9yZGVyLmxlZnQuc3R5bGUgPT0gcmVuZGVyX3RyZWU6OmtCb3JkZXJTdHlsZVNvbGlkKSB7CiAgICAgU2tQb2ludCBsZWZ0X3BvaW50c1s0XSA9IHt0b3BfbGVmdF9vdXRlciwgYm90dG9tX2xlZnRfb3V0ZXIsICAgLy8gQSwgQwpAQCAtMTM0OCw3ICsxMzg4LDYgQEAKICAgICBEQ0hFQ0tfRVEoYm9yZGVyLmxlZnQuc3R5bGUsIHJlbmRlcl90cmVlOjprQm9yZGVyU3R5bGVOb25lKTsKICAgfQogCi0KICAgLy8gQm90dG9tCiAgIGlmIChib3JkZXIuYm90dG9tLnN0eWxlID09IHJlbmRlcl90cmVlOjprQm9yZGVyU3R5bGVTb2xpZCkgewogICAgIFNrUG9pbnQgYm90dG9tX3BvaW50c1s0XSA9IHtib3R0b21fbGVmdF9pbm5lciwgYm90dG9tX2xlZnRfb3V0ZXIsICAvLyBHLCBDCkBAIC0xMzYyLDcgKzE0MDEsNiBAQAogICAgIERDSEVDS19FUShib3JkZXIuYm90dG9tLnN0eWxlLCByZW5kZXJfdHJlZTo6a0JvcmRlclN0eWxlTm9uZSk7CiAgIH0KIAotCiAgIC8vIFJpZ2h0CiAgIGlmIChib3JkZXIucmlnaHQuc3R5bGUgPT0gcmVuZGVyX3RyZWU6OmtCb3JkZXJTdHlsZVNvbGlkKSB7CiAgICAgU2tQb2ludCByaWdodF9wb2ludHNbNF0gPSB7dG9wX3JpZ2h0X2lubmVyLCBib3R0b21fcmlnaHRfaW5uZXIsICAgLy8gRiwgSApAQCAtMTQxOCw5ICsxNDU2LDE2IEBACiAgIGNhbnZhcy5mbHVzaCgpOwogCiAgIFNrUGFpbnQgcmVuZGVyX3RhcmdldF9wYWludDsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIGJpdG1hcC5zZXRJbW11dGFibGUoKTsKKyAgc2tfc3A8U2tJbWFnZT4gaW1hZ2UgPSBTa0ltYWdlOjpNYWtlRnJvbUJpdG1hcChiaXRtYXApOworICBkcmF3X3N0YXRlLT5yZW5kZXJfdGFyZ2V0LT5kcmF3SW1hZ2UoCisgICAgICBpbWFnZSwgcmVjdC54KCksIHJlY3QueSgpLCBTa1NhbXBsaW5nT3B0aW9ucygpLCAmcmVuZGVyX3RhcmdldF9wYWludCk7CisjZWxzZQogICByZW5kZXJfdGFyZ2V0X3BhaW50LnNldEZpbHRlclF1YWxpdHkoa05vbmVfU2tGaWx0ZXJRdWFsaXR5KTsKICAgZHJhd19zdGF0ZS0+cmVuZGVyX3RhcmdldC0+ZHJhd0JpdG1hcChiaXRtYXAsIHJlY3QueCgpLCByZWN0LnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVuZGVyX3RhcmdldF9wYWludCk7CisjZW5kaWYKIH0KIAogdm9pZCBEcmF3U29saWRSb3VuZGVkUmVjdEJvcmRlcigKQEAgLTE3MzksNyArMTc4NCw5IEBACiAgICAgaWYgKGJsdXJfc2lnbWEgPiAwLjBmKSB7CiAgICAgICBza19zcDxTa01hc2tGaWx0ZXI+IG1mKAogICAgICAgICAgIFNrTWFza0ZpbHRlcjo6TWFrZUJsdXIoa05vcm1hbF9Ta0JsdXJTdHlsZSwgYmx1cl9zaWdtYSkpOworI2lmbmRlZiBVU0VfU0tJQV9ORVhUCiAgICAgICBwYWludC5zZXRGaWx0ZXJRdWFsaXR5KFNrRmlsdGVyUXVhbGl0eTo6a0hpZ2hfU2tGaWx0ZXJRdWFsaXR5KTsKKyNlbmRpZgogICAgICAgcGFpbnQuc2V0TWFza0ZpbHRlcihtZik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvQlVJTEQuZ24gYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvQlVJTEQuZ24KaW5kZXggYjQzZWM5Zi4uNjMwNjRiOCAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL0JVSUxELmduCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9CVUlMRC5nbgpAQCAtNDQsOCArNDQsMjAgQEAKICAgc291cmNlcyA9IHNraWFfZWZmZWN0c19pbWFnZWZpbHRlcl9zb3VyY2VzX25vX2FzYW4KICAgaWYgKHVzZV9za2lhX25leHQpIHsKICAgICBpbmNsdWRlX2RpcnMgPSBbIHNraWFfaW5jbHVkZV9kaXIgXQotICAgIGRlZmluZXMgPSBbICJVU0VfU0tJQV9ORVhUIiBdCi0gICAgY2ZsYWdzX2NjID0gWyAiLVduby1jKysxNy1leHRlbnNpb25zIiBdCisgICAgZGVmaW5lcyA9IFsKKyAgICAgICJVU0VfU0tJQV9ORVhUIiwKKyAgICAgICJTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQiLAorICAgIF0KKyAgICBpZiAoaXNfY2xhbmcpIHsKKyAgICAgIGlmICh1c2luZ19vbGRfY29tcGlsZXIpIHsKKyAgICAgICAgY2ZsYWdzX2NjID0gWyAiLVduby1jKysxei1leHRlbnNpb25zIiBdCisgICAgICB9IGVsc2UgeworICAgICAgICBjZmxhZ3NfY2MgPSBbCisgICAgICAgICAgIi1Xbm8tYysrMTctZXh0ZW5zaW9ucyIsCisgICAgICAgICAgIi1Xbm8taW52YWxpZC1vZmZzZXRvZiIsCisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9CiAgIH0KIAogICAjIFRPRE8oYi8yMDczOTgwMjQpOiBJZiB0aGlzIGlzIGEgdGFyZ2V0IHdlIG5lZWQgdG8gYnVpbGQsIHRoZW4gd2UnbGwKQEAgLTgxLDggKzkzLDIwIEBACiAgIGRlZmluZXMgPSBbICJTS19CVUlMRF9OT19PUFRTIiBdCiAKICAgaWYgKHVzZV9za2lhX25leHQpIHsKLSAgICBkZWZpbmVzICs9IFsgIlVTRV9TS0lBX05FWFQiIF0KLSAgICBjZmxhZ3NfY2MgPSBbICItV25vLWMrKzE3LWV4dGVuc2lvbnMiIF0KKyAgICBkZWZpbmVzICs9IFsKKyAgICAgICJVU0VfU0tJQV9ORVhUIiwKKyAgICAgICJTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQiLAorICAgIF0KKyAgICBpZiAoaXNfY2xhbmcpIHsKKyAgICAgIGlmICh1c2luZ19vbGRfY29tcGlsZXIpIHsKKyAgICAgICAgY2ZsYWdzX2NjID0gWyAiLVduby1jKysxei1leHRlbnNpb25zIiBdCisgICAgICB9IGVsc2UgeworICAgICAgICBjZmxhZ3NfY2MgPSBbCisgICAgICAgICAgIi1Xbm8tYysrMTctZXh0ZW5zaW9ucyIsCisgICAgICAgICAgIi1Xbm8taW52YWxpZC1vZmZzZXRvZiIsCisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9CiAgIH0KIH0KIApAQCAtMTMwLDcgKzE1NCw2IEBACiAgICAgInNyYy9wb3J0cy9Ta09TRmlsZV9jb2JhbHQuaCIsCiAgICAgInNyYy9wb3J0cy9Ta1N0cmVhbV9jb2JhbHQuY2MiLAogICAgICJzcmMvcG9ydHMvU2tTdHJlYW1fY29iYWx0LmgiLAotICAgICJzcmMvcG9ydHMvU2tUTFNfY29iYWx0LmNjIiwKICAgICAic3JjL3BvcnRzL1NrVGltZV9jb2JhbHQuY2MiLAogICAgICJzcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuY2MiLAogICAgICJzcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuaCIsCkBAIC0xNDAsNiArMTYzLDEwIEBACiAgICAgc291cmNlcyArPSBbICJzcmMvcG9ydHMvU2tNZW1vcnlfc3RhcmJvYXJkLmNjIiBdCiAgIH0KIAorICBpZiAoIXVzZV9za2lhX25leHQpIHsKKyAgICBzb3VyY2VzICs9IFsgInNyYy9wb3J0cy9Ta1RMU19jb2JhbHQuY2MiIF0KKyAgfQorCiAgIGluY2x1ZGVfZGlycyA9IFsgdGFyZ2V0X2dlbl9kaXIgXQogCiAgIGlmICh1c2Vfc2tpYV9uZXh0KSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvY29uZmlnL1NrVXNlckNvbmZpZy5oIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL2NvbmZpZy9Ta1VzZXJDb25maWcuaAppbmRleCA3YmY3MWM4Li5mM2IzN2EyIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvY29uZmlnL1NrVXNlckNvbmZpZy5oCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9jb25maWcvU2tVc2VyQ29uZmlnLmgKQEAgLTE0LDIwICsxNCwyMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2lmbmRlZiBTa1VzZXJDb25maWdfREVGSU5FRAotI2RlZmluZSBTa1VzZXJDb25maWdfREVGSU5FRAorI2lmbmRlZiBTa1VzZXJDb25maWdfREVGSU5FRCAgLy8gTk9MSU5UCisjZGVmaW5lIFNrVXNlckNvbmZpZ19ERUZJTkVEICAvLyBOT0xJTlQKIAogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorI2lmIGRlZmluZWQoVVNFX1NLSUFfTkVYVCkKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKyNlbmRpZgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAjZW5kaWYKIAorLy8gY2xhbmctZm9ybWF0IG9mZgogLyogIFNrVHlwZXMuaCwgdGhlIHJvb3Qgb2YgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZXMsIGRvZXMgdGhlIGZvbGxvd2luZyB0cmljazoKLQotICAgICNpbmNsdWRlIDxTa1Bvc3RDb25maWcuaD4KICAgICAjaW5jbHVkZSA8U2tQcmVDb25maWcuaD4KICAgICAjaW5jbHVkZSA8U2tVc2VyQ29uZmlnLmg+CisgICAgI2luY2x1ZGUgPFNrUG9zdENvbmZpZy5oPgogCiAgICAgU2tQcmVDb25maWcuaCBydW5zIGZpcnN0LCBhbmQgaXQgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBjZXJ0YWluCiAgICAgc2tpYSBkZWZpbmVzLgpAQCAtNDcsNiArNTAsNyBAQAogICAgIEJ5IGRlZmF1bHQsIHRoaXMgaW5jbHVkZSBmaWxlIHdpbGwgYWx3YXlzIGRlZmF1bHQgdG8gaGF2aW5nIGFsbCBvZiB0aGUgZmxhZ3MKICAgICBjb21tZW50ZWQgb3V0LCBzbyBpbmNsdWRpbmcgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KICovCisvLyBjbGFuZy1mb3JtYXQgb24KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCkBAIC01NCw4ICs1OCw4IEBACiAgICAgZmxvYXRzIG9yIDE2LjE2IGludGVnZXJzIChmaXhlZCkuIEV4YWN0bHkgb25lIG9mIHRoZXNlIHR3byBzeW1ib2xzIG11c3QgYmUKICAgICBkZWZpbmVkLgogKi8KLS8vI2RlZmluZSBTS19TQ0FMQVJfSVNfRkxPQVQKLS8vI2RlZmluZSBTS19TQ0FMQVJfSVNfRklYRUQKKy8vICNkZWZpbmUgU0tfU0NBTEFSX0lTX0ZMT0FUCisvLyAjZGVmaW5lIFNLX1NDQUxBUl9JU19GSVhFRAogCiAKIC8qICBTb21ld2hhdCBpbmRlcGVuZGVudCBvZiBob3cgU2tTY2FsYXIgaXMgaW1wbGVtZW50ZWQsIFNraWEgYWxzbyB3YW50cyB0byBrbm93CkBAIC02MywxNCArNjcsMTQgQEAKICAgICB0aGVuIHNvIG11c2UgU0tfQ0FOX1VTRV9GTE9BVCwgYnV0IGlmIHNjYWxhcnMgYXJlIGZpeGVkLCBTS19DQU5fVVNFX0ZMT0FUCiAgICAgY2FuIGdvIGVpdGhlciB3YXkuCiAgKi8KLS8vI2RlZmluZSBTS19DQU5fVVNFX0ZMT0FUCisvLyAjZGVmaW5lIFNLX0NBTl9VU0VfRkxPQVQKIAogLyogIEZvciBzb21lIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNjYWxhciBvcGVyYXRpb25zLCBza2lhIHdpbGwgb3B0aW9uYWxseSB3b3JrCiAgICAgYXJvdW5kIHRoZSBzdGFuZGFyZCBmbG9hdCBvcGVyYXRvcnMgaWYgaXQga25vd3MgdGhhdCB0aGUgQ1BVIGRvZXMgbm90IGhhdmUKICAgICBuYXRpdmUgc3VwcG9ydCBmb3IgZmxvYXRzLiBJZiB5b3VyIGVudmlyb25tZW50IHVzZXMgc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQsCiAgICAgZGVmaW5lIHRoaXMgZmxhZy4KICAqLwotLy8jZGVmaW5lIFNLX1NPRlRXQVJFX0ZMT0FUCisvLyAjZGVmaW5lIFNLX1NPRlRXQVJFX0ZMT0FUCiAKIAogLyogIFNraWEgaGFzIGxvdHMgb2YgZGVidWctb25seSBjb2RlLiBPZnRlbiB0aGlzIGlzIGp1c3QgbnVsbCBjaGVja3Mgb3Igb3RoZXIKQEAgLTgyLDIyICs4NiwyMiBAQAogICAgIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIE5ERUJVRywgYnV0IHRoYXQgZGVjaXNpb24gY2FuIGJlIGNoYW5nZWQKICAgICBoZXJlLgogICovCi0vLyNkZWZpbmUgU0tfREVCVUcKLS8vI2RlZmluZSBTS19SRUxFQVNFCisvLyAjZGVmaW5lIFNLX0RFQlVHCisvLyAjZGVmaW5lIFNLX1JFTEVBU0UKIAogCiAvKiAgSWYsIGluIGRlYnVnZ2luZyBtb2RlLCBTa2lhIG5lZWRzIHRvIHN0b3AgKHByZXN1bWFibHkgdG8gaW52b2tlIGEgZGVidWdnZXIpCiAgICAgaXQgd2lsbCBjYWxsIFNLX0NSQVNIKCkuIElmIHRoaXMgaXMgbm90IGRlZmluZWQgaXQsIGl0IGlzIGRlZmluZWQgaW4KICAgICBTa1Bvc3RDb25maWcuaCB0byB3cml0ZSB0byBhbiBpbGxlZ2FsIGFkZHJlc3MKICAqLwotLy8jZGVmaW5lIFNLX0NSQVNIKCkgKihpbnQgKikodWludHB0cl90KTAgPSAwCisvLyAjZGVmaW5lIFNLX0NSQVNIKCkgKihpbnQgKikodWludHB0cl90KTAgPSAwCiAKIAogLyogIHByZWNvbmZpZyB3aWxsIGhhdmUgYXR0ZW1wdGVkIHRvIGRldGVybWluZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgc3lzdGVtLAogICAgIGJ1dCB5b3UgY2FuIGNoYW5nZSB0aGVzZSBtdXR1YWxseSBleGNsdXNpdmUgZmxhZ3MgaGVyZS4KICAqLwotLy8jZGVmaW5lIFNLX0NQVV9CRU5ESUFOCi0vLyNkZWZpbmUgU0tfQ1BVX0xFTkRJQU4KKy8vICNkZWZpbmUgU0tfQ1BVX0JFTkRJQU4KKy8vICNkZWZpbmUgU0tfQ1BVX0xFTkRJQU4KIAogLy8gVGhlIGZvbGxvd2luZyBkZWZpbmVzIGRpY3RhdGUgdGhlIG5hdGl2ZSBwaXhlbCBjb2xvciBmb3JtYXQgb2YgU2tpYSBzdXJmYWNlcy4KIC8vIFJlbmRlciB0YXJnZXQgUkdCQSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gZWl0aGVyIFJHQkEgb3IgQkdSQSwgYW5kIG11c3QgYmUKQEAgLTEwOSw3ICsxMTMsNyBAQAogLy8gd291bGQgbGlrZSB0aGVzZSBmb3JtYXRzIHRvIG1hdGNoLgogLy8gQWx3YXlzIHVzZSBPcGVuR0wgYnl0ZS1vcmRlciAoUkdCQSkuCiAKLSNpZiBkZWZpbmVkKFNUQVJCT0FSRCkgJiYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKIGNvbnN0IHVpbnQ4X3QgcjMyX29yX2JlbmRpYW5fYTMyX3NoaWZ0ID0KICAgICBrU2JQcmVmZXJyZWRSZ2JhQnl0ZU9yZGVyID09IFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVJfQkdSQSA/IDE2IDogMDsKIApAQCAtMTYxLDM2ICsxNjUsMzYgQEAKIC8qICBTb21lIGNvbXBpbGVycyBkb24ndCBzdXBwb3J0IGxvbmcgbG9uZyBmb3IgNjRiaXQgaW50ZWdlcnMuIElmIHlvdXJzIGRvZXMKICAgICBub3QsIGRlZmluZSB0aGlzIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgogICovCi0vLyNkZWZpbmUgU2tMT05HTE9ORyBpbnQ2NF90CisvLyAjZGVmaW5lIFNrTE9OR0xPTkcgaW50NjRfdAogCiAKIC8qICBTb21lIGVudmlyb25tZW50cyBkbyBub3Qgc3VwcG9ydCB3cml0YWJsZSBnbG9iYWxzIChlZWshKS4gSWYgeW91cnMgZG9lcyBub3QsCiAgICAgZGVmaW5lIHRoaXMgZmxhZy4KICAqLwotLy8jZGVmaW5lIFNLX1VTRV9SVU5USU1FX0dMT0JBTFMKKy8vICNkZWZpbmUgU0tfVVNFX1JVTlRJTUVfR0xPQkFMUwogCiAvKiAgSWYgemxpYiBpcyBhdmFpbGFibGUgYW5kIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIGZsYXRlIGNvbXByZXNzaW9uCiAgICAgYWxnb3JpdGhtICh1c2VkIGluIFBERiBnZW5lcmF0aW9uKSwgZGVmaW5lIFNLX1pMSUJfSU5DTFVERSB0byBiZSB0aGUKICAgICBpbmNsdWRlIHBhdGguCiAgKi8KLS8vI2RlZmluZSBTS19aTElCX0lOQ0xVREUgPHpsaWIuaD4KKy8vICNkZWZpbmUgU0tfWkxJQl9JTkNMVURFIDx6bGliLmg+CiAjZGVmaW5lIFNLX1pMSUJfSU5DTFVERSAidGhpcmRfcGFydHkvemxpYi96bGliLmgiCiAKIC8qICBEZWZpbmUgdGhpcyB0byBhbGxvdyBQREYgc2NhbGFycyBhYm92ZSAzMmsuICBUaGUgUERGL0Egc3BlYyBkb2Vzbid0IGFsbG93CiAgICAgdGhlbSwgYnV0IG1vZGVybiBQREYgaW50ZXJwcmV0ZXJzIHNob3VsZCBoYW5kbGUgdGhlbSBqdXN0IGZpbmUuCiAgKi8KLS8vI2RlZmluZSBTS19BTExPV19MQVJHRV9QREZfU0NBTEFSUworLy8gI2RlZmluZSBTS19BTExPV19MQVJHRV9QREZfU0NBTEFSUwogCiAvKiAgRGVmaW5lIHRoaXMgdG8gcHJvdmlkZSBmb250IHN1YnNldHRlciBmb3IgZm9udCBzdWJzZXR0aW5nIHdoZW4gZ2VuZXJhdGluZwogICAgIFBERiBkb2N1bWVudHMuCiAgKi8KLS8vI2RlZmluZSBTS19TRk5UTFlfU1VCU0VUVEVSICJzZm50bHkvc3Vic2V0dGVyL2ZvbnRfc3Vic2V0dGVyLmgiCisvLyAjZGVmaW5lIFNLX1NGTlRMWV9TVUJTRVRURVIgInNmbnRseS9zdWJzZXR0ZXIvZm9udF9zdWJzZXR0ZXIuaCIKIAogLyogIFRvIHdyaXRlIGRlYnVnIG1lc3NhZ2VzIHRvIGEgY29uc29sZSwgc2tpYSB3aWxsIGNhbGwgU2tEZWJ1Z2YoLi4uKSBmb2xsb3dpbmcKICAgICBwcmludGYgY29udmVudGlvbnMgKGUuZy4gY29uc3QgY2hhciogZm9ybWF0LCAuLi4pLiBJZiB5b3Ugd2FudCB0byByZWRpcmVjdAogICAgIHRoaXMgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gcHJpbnRmLCBkZWZpbmUgeW91cnMgaGVyZQogICovCi0vLyNkZWZpbmUgU2tEZWJ1Z2YoLi4uKSAgTXlGdW5jdGlvbihfX1ZBX0FSR1NfXykKKy8vICNkZWZpbmUgU2tEZWJ1Z2YoLi4uKSAgTXlGdW5jdGlvbihfX1ZBX0FSR1NfXykKIAogCiAvKiAgSWYgU0tfREVCVUcgaXMgZGVmaW5lZCwgdGhlbiB5b3UgY2FuIG9wdGlvbmFsbHkgZGVmaW5lIFNLX1NVUFBPUlRfVU5JVFRFU1QKQEAgLTI2Niw0ICsyNzAsMTkgQEAKIC8vIGRvIG5vdCBmYWlsIGJ5IHJ1bm5pbmcgb3V0IG9mIG1lbW9yeS4KICNkZWZpbmUgR1JfR0xfQ0hFQ0tfQUxMT0NfV0lUSF9HRVRfRVJST1IgMAogCi0jZW5kaWYgIC8vIFNrVXNlckNvbmZpZ19ERUZJTkVECisvLyBUaGUgYmxvY2sgYmVsb3cgaXMgY29waWVkIGZyb20gU2tpYSBtNzkncyBTa1Bvc3RDb25maWcuaCB0byBwcmVzZXJ2ZSB0aGUKKy8vIGJlaGF2aW9yIG9mIFNLX0dMIGJlaW5nIGRlZmluZWQgYnkgZGVmYXVsdC4KKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisvKioKKyAqIElmIEdQVSBpcyBlbmFibGVkIGJ1dCBubyBHUFUgYmFja2VuZHMgYXJlIGVuYWJsZWQgdGhlbiBlbmFibGUgR0wgYnkgZGVmYXVsdC4KKyAqIFRyYWRpdGlvbmFsbHkgY2xpZW50cyBoYXZlIHJlbGllZCBvbiBTa2lhIGFsd2F5cyBidWlsZGluZyB3aXRoIHRoZSBHTCBiYWNrZW5kCisgKiBhbmQgb3B0aW5nIGluIHRvIGFkZGl0aW9uYWwgYmFja2VuZHMuIFRPRE86IFJlcXVpcmUgZXhwbGljaXQgb3B0IGluIGZvciBHTC4KKyAqLworI2lmIFNLX1NVUFBPUlRfR1BVCisjaWYgIWRlZmluZWQoU0tfR0wpICYmICFkZWZpbmVkKFNLX1ZVTEtBTikgJiYgIWRlZmluZWQoU0tfTUVUQUwpCisjZGVmaW5lIFNLX0dMCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAgLy8gU2tVc2VyQ29uZmlnX0RFRklORUQgIE5PTElOVApkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWEuZ3lwIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWEuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmUxYjIzLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgIyBUaGlzIGlzIHRoZSB0YXJnZXQgdGhhdCBhbGwgQ29iYWx0IG1vZHVsZXMgc2hvdWxkIGRlcGVuZCBvbiBpZiB0aGV5Ci0gICAgICAjIHdpc2ggdG8gdXNlIFNraWEuICBJdCBhdWdtZW50cyBza2lhX2xpYnJhcnkgKFNraWEncyBjb3JlIGNvZGUpIHdpdGgKLSAgICAgICMgQ29iYWx0IHNwZWNpZmljIGNvZGUgZGVmaW5lZCBpbiBzb3VyY2UgZmlsZXMgZnJvbSBza2lhX2NvYmFsdC5neXBpLAotICAgICAgIyBzdWNoIGFzIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBjZXJ0YWluIGZ1bmN0aW9ucy4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdza2lhJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdza2lhX2xpYnJhcnknLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJ3NraWFfY29iYWx0Lmd5cGknLAotICAgICAgICAnc2tpYV9jb21tb24uZ3lwaScsCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICdza2lhX2xpYnJhcnknLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBTa2lhJ3MgY29yZSBjb2RlIGZyb20gdGhlIFNraWEgcmVwb3NpdG9yeS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdza2lhX2xpYnJhcnknLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICdza2lhX2xpYnJhcnlfbm9fYXNhbicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAnc2tpYV9jb21tb24uZ3lwaScsCi0gICAgICAgICdza2lhX2xpYnJhcnkuZ3lwaScsCi0gICAgICAgICdza2lhX3Nrc2wuZ3lwaScsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAjIFNraWEncyBjb3JlIGNvZGUgZnJvbSB0aGUgU2tpYSByZXBvc2l0b3J5IHRoYXQgc2hvdWxkIGJlIGNvbXBpbGVkCi0gICAgICAjIHdpdGhvdXQgQVNBTi4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGRyYXN0aWMgc2xvd2Rvd24gaW4gZGVidWcgdW5pdAotICAgICAgIyB0ZXN0cy4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdza2lhX2xpYnJhcnlfbm9fYXNhbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICdza2lhX2NvbW1vbi5neXBpJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHNfaW1hZ2VmaWx0ZXJzLmd5cGknLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoc2tpYV9lZmZlY3RzX2ltYWdlZmlsdGVyX3NvdXJjZXNfbm9fYXNhbiknLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd1c2VfYXNhbj09MSBhbmQgY29iYWx0X2NvbmZpZz09ImRlYnVnIicsIHsKLSAgICAgICAgICAnY2ZsYWdzISc6IFsKLSAgICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBBIHNtYWxsIHByb2dyYW0gaW1wb3J0ZWQgZnJvbSBDaHJvbWl1bSB0aGF0IHRlc3RzIFNraWEgd2l0aCBmdXp6ZWQKLSAgICAgICMgZmlsdGVycy4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdmaWx0ZXJfZnV6el9zdHViJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3NraWEnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndGVzdC9maWx0ZXJfZnV6el9zdHViL2ZpbHRlcl9mdXp6X3N0dWIuY2MnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ZpbHRlcl9mdXp6X3N0dWJfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2ZpbHRlcl9mdXp6X3N0dWInLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnZmlsdGVyX2Z1enpfc3R1YicsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc2tpYV9jb2JhbHQuZ3lwaSBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2NvYmFsdC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmFjMTJlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2NvYmFsdC5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0KLSMgVGhpcyBneXBpIGZpbGUgY29udGFpbnMgYWxsIHRoZSBDb2JhbHQtc3BlY2lmaWMgZW5oYW5jZW1lbnRzIHRvIFNraWEuCi0jIEluIGNvbXBvbmVudCBtb2RlIChzaGFyZWRfbGliKSBpdCBpcyBmb2xkZWQgaW50byBhIHNpbmdsZSBzaGFyZWQgbGlicmFyeSB3aXRoCi0jIHRoZSBTa2lhIGZpbGVzIGJ1dCBpbiBhbGwgb3RoZXIgY2FzZXMgaXQgaXMgYSBzZXBhcmF0ZSBsaWJyYXJ5LgotewotICAnZGVwZW5kZW5jaWVzJzogWwotICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAnPChERVBUSCkvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5neXA6Y29uZmlndXJhdGlvbicsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZnJlZXR5cGUyL2ZyZWV0eXBlMl9jb2JhbHQuZ3lwOmZyZWV0eXBlMicsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYnhtbC9saWJ4bWwuZ3lwOmxpYnhtbCcsCi0gICAgJ3NraWFfbGlicmFyeScsCi0gIF0sCi0KLSAgJ3NvdXJjZXMnOiBbCi0gICAgJ2NvbmZpZy9Ta1VzZXJDb25maWcuaCcsCi0gICAgJ3NyYy9nb29nbGVfbG9nZ2luZy5jYycsCi0gICAgJ3NyYy9ncHUvZ2wvR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2VfY29iYWx0LmNjJywKLSAgICAnc3JjL3BvcnRzL1NrRm9udENvbmZpZ1BhcnNlcl9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tGb250Q29uZmlnUGFyc2VyX2NvYmFsdC5oJywKLSAgICAnc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tGb250TWdyX2NvYmFsdC5oJywKLSAgICAnc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHRfZmFjdG9yeS5jYycsCi0gICAgJ3NyYy9wb3J0cy9Ta0ZvbnRTdHlsZVNldF9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tGb250U3R5bGVTZXRfY29iYWx0LmgnLAotICAgICdzcmMvcG9ydHMvU2tGb250VXRpbF9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tGb250VXRpbF9jb2JhbHQuaCcsCi0gICAgJ3NyYy9wb3J0cy9Ta0ZyZWVUeXBlX2NvYmFsdC5jYycsCi0gICAgJ3NyYy9wb3J0cy9Ta0ZyZWVUeXBlX2NvYmFsdC5oJywKLSAgICAnc3JjL3BvcnRzL1NrT1NGaWxlX2NvYmFsdC5jYycsCi0gICAgJ3NyYy9wb3J0cy9Ta09TRmlsZV9jb2JhbHQuaCcsCi0gICAgJ3NyYy9wb3J0cy9Ta1N0cmVhbV9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tTdHJlYW1fY29iYWx0LmgnLAotICAgICdzcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuaCcsCi0gICAgJ3NyYy9wb3J0cy9Ta1RMU19jb2JhbHQuY2MnLAotICAgICdzcmMvcG9ydHMvU2tUaW1lX2NvYmFsdC5jYycsCi0gIF0sCi0KLSAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUiknLAotICBdLAotCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PSJzdGFyYm9hcmQiJywgewotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzcmMvcG9ydHMvU2tNZW1vcnlfc3RhcmJvYXJkLmNjJywKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc2tpYV9jb21tb24uZ3lwaSBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2NvbW1vbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTJlYmFiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2NvbW1vbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgZ3lwaSBmaWxlIGhhbmRsZXMgdGhlIHJlbW92YWwgb2YgcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMgZnJvbSB0aGUKLSMgU2tpYSBidWlsZC4KLXsKLSAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYScsCi0gICAgJ2NvbmZpZycsCi0gIF0sCi0KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2tpYV9zdXBwb3J0X3BkZic6ICcwJywKLSAgICAnc2tpYV96bGliX3N0YXRpYyc6ICcxJywKLQotICAgICMgVGhlc2UgdHdvIHNldCB0aGUgcGF0aHMgc28gd2UgY2FuIGluY2x1ZGUgc2tpYS9neXAvY29yZS5neXBpCi0gICAgJ3NraWFfc3JjX3BhdGgnOiAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMnLAotICAgICdza2lhX2luY2x1ZGVfcGF0aCc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUnLAotICAgICdza2lhX21vZHVsZXNfcGF0aCc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMnLAotCi0gICAgIyBUaGlzIGxpc3Qgd2lsbCBjb250YWluIGFsbCBkZWZpbmVzIHRoYXQgYWxzbyBuZWVkIHRvIGJlIGV4cG9ydGVkIHRvCi0gICAgIyBkZXBlbmRlbnQgY29tcG9uZW50cy4KLSAgICAnc2tpYV9leHBvcnRfZGVmaW5lcyc6IFsKLSAgICAgICdTS19ESVNBQkxFX0VGRkVDVF9ERVNFUklBTElaQVRJT049MScsCi0gICAgICAnU0tfU1VQUE9SVF9HUFU9MScsCi0gICAgICAnU0tfVVNFUl9DT05GSUdfSEVBREVSPSI8KERFUFRIKS9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9jb25maWcvU2tVc2VyQ29uZmlnLmgiJywKLSAgICBdLAotCi0gICAgIyBUaGUgfGRlZmF1bHRfZm9udF9jYWNoZV9saW1pdHwgc3BlY2lmaWVzIHRoZSBtYXggc2l6ZSBvZiB0aGUgZ2x5cGggY2FjaGUsCi0gICAgIyB3aGljaCBjb250YWlucyBwYXRoIGFuZCBtZXRyaWNzIGluZm9ybWF0aW9uIGZvciBnbHlwaHMsIGJlZm9yZSBpdCB3aWxsCi0gICAgIyBzdGFydCBwdXJnaW5nIGVudHJpZXMuIFRoZSBjdXJyZW50IHZhbHVlIG1hdGNoZXMgdGhlIGxpbWl0IHVzZWQgYnkKLSAgICAjIEFuZHJvaWQuCi0gICAgJ2RlZmF1bHRfZm9udF9jYWNoZV9saW1pdCUnOiAnKDEqMTAyNCoxMDI0KScsCi0gIH0sCi0gICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgXSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWyd0YXJnZXRfYXJjaCA9PSAid2luIicsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdza2lhX2V4cG9ydF9kZWZpbmVzJzogWwotICAgICAgICAgICMgUmVxdWlyZWQgZGVmaW5lIGJ5IFNraWEgdG8gdGFrZSBjZXJ0YWluIGNvZGUgcGF0aHMsIHN1Y2gKLSAgICAgICAgICAjIGFzIGluY2x1ZGluZyB3aW5kb3dzLmggaW4gdmFyaW91cyBwbGFjZXMuCi0gICAgICAgICAgJ1NLX0JVSUxEX0ZPUl9XSU4zMicsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnY2xhbmcgPT0gMScsIHsKLSAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb21wYXJlJywKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi0KLSAgJ2RlZmluZXMnOiBbCi0gICAgJzxAKHNraWFfZXhwb3J0X2RlZmluZXMpJywKLQotICAgICMgc2tpYSB1c2VzIHN0YXRpYyBpbml0aWFsaXplcnMgdG8gaW5pdGlhbGl6ZSB0aGUgc2VyaWFsaXphdGlvbiBsb2dpYwotICAgICMgb2YgaXRzICJwaWN0dXJlcyIgbGlicmFyeS4gVGhpcyBpcyBjdXJyZW50bHkgbm90IHVzZWQgaW4gQ29iYWx0OyBpZgotICAgICMgaXQgZXZlciBnZXRzIHVzZWQgdGhlIHByb2Nlc3NlcyB0aGF0IHVzZSBpdCBuZWVkIHRvIGNhbGwKLSAgICAjIFNrR3JhcGhpY3M6OkluaXQoKS4KLSAgICAnU0tfQUxMT1dfU1RBVElDX0dMT0JBTF9JTklUSUFMSVpFUlM9MCcsCi0KLSAgICAjIEVUQzEgdGV4dHVyZSBlbmNvZGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIENvYmFsdCBieSBkZWZhdWx0LgotICAgICdTS19JR05PUkVfRVRDMV9TVVBQT1JUJywKLQotICAgICdTS19ERUZBVUxUX0ZPTlRfQ0FDSEVfTElNSVQ9PChkZWZhdWx0X2ZvbnRfY2FjaGVfbGltaXQpJywKLQotICAgICMgVXNlIHNjYWxhciBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgaW5zdGVhZCBvZiBDbGFuZy9HQ0MgdmVjdG9yIGV4dGVuc2lvbnMKLSAgICAjIGluIFNrVnguaCwgYXMgdGhpcyBjYXVzZXMgYW4gaW50ZXJuYWwgY29tcGlsZXIgZXJyb3IgZm9yIHJhc3BpLTIuCi0gICAgJ1NLTlhfTk9fU0lNRCcsCi0gIF0sCi0KLSAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnPEAoc2tpYV9leHBvcnRfZGVmaW5lcyknLAotICAgIF0sCi0gIH0sCi0KLSAgIyBXZSB3b3VsZCBwcmVmZXIgdGhpcyB0byBiZSBkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzLAotICAjIGhvd2V2ZXIgd2UgY3VycmVudGx5IGhhdmUgbm8gbWVhbnMgdG8gZW5mb3JjZSB0aGF0IGRpcmVjdCBkZXBlbmRlbnRzCi0gICMgcmUtZXhwb3J0IGlmIHRoZXkgaW5jbHVkZSBTa2lhIGhlYWRlcnMgaW4gdGhlaXIgcHVibGljIGhlYWRlcnMuCi0gICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAnY29uZmlnJywKLSAgICBdLAotICB9LAotCi0gICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQyNDQsIDQyNjcsIDQzNDEsIDQzNDUsIDQzOTAsIDQ1NTQsIDQ3NDgsIDQ4MDBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbGlicmFyeS5neXBpIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbGlicmFyeS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQ4NjE2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2xpYnJhcnkuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotIyBUaGlzIGd5cGkgZmlsZSBjb250YWlucyB0aGUgU2tpYSBsaWJyYXJ5LgotIwotIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFXQVJOSU5HISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCi0jIHZhcmlhYmxlcyBhbmQgZGVmaW5lcyBzaG91bGQgZ28gaW4gc2tpYV9jb21tb24uZ3lwaSBzbyB0aGV5IGNhbiBiZSBzZWVuCi0jIGJ5IGZpbGVzIGxpc3RlZCBoZXJlIGFuZCBpbiBza2lhX2xpYnJhcnlfb3B0cy5neXBpLgotIyAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISFXQVJOSU5HISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQotewotICAnZGVwZW5kZW5jaWVzJzogWwotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9mcmVldHlwZTIvZnJlZXR5cGUyX2NvYmFsdC5neXA6ZnJlZXR5cGUyJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlicG5nL2xpYnBuZy5neXA6bGlicG5nJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS90aGlyZF9wYXJ0eS9za2Ntcy9za2Ntcy5neXA6c2tjbXMnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICdza2lhX2xpYnJhcnlfb3B0cy5neXA6c2tpYV9vcHRzJywKLSAgXSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2NvcmUuZ3lwaScsCi0gICAgJy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHMuZ3lwaScsCi0gICAgJy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHNfaW1hZ2VmaWx0ZXJzLmd5cGknLAotICAgICcuLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9za2lhL2d5cC9ncHUuZ3lwaScsCi0gICAgJy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L3NraWEvZ3lwL3V0aWxzLmd5cGknLAotICAgICcuLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9za290dGllLmd5cGknLAotICAgICcuLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tzZy9za3NnLmd5cGknLAotICAgICcuLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tzaGFwZXIvc2tzaGFwZXIuZ3lwaScsCi0gIF0sCi0KLSAgJ3NvdXJjZXMnOiBbCi0gICAgIyBmcm9tICJjb3JlLmd5cGkiCi0gICAgJzxAKHNraWFfY29yZV9zb3VyY2VzKScsCi0gICAgJzxAKHNraWFfcGF0aG9wc19zb3VyY2VzKScsCi0gICAgJzxAKHNraWFfc2twaWN0dXJlX3NvdXJjZXMpJywKLQotICAgICc8QChza2lhX2VmZmVjdHNfc291cmNlcyknLAotICAgICc8QChza2lhX2VmZmVjdHNfaW1hZ2VmaWx0ZXJfc291cmNlcyknLAotCi0gICAgIyBmcm9tICJncHUuZ3lwaSIKLSAgICAnPEAoc2tpYV9ncHVfc291cmNlcyknLAotICAgICc8QChza2lhX2NjcHJfc291cmNlcyknLAotICAgICc8QChza2lhX252cHJfc291cmNlcyknLAotCi0gICAgJzxAKHNraWFfdXRpbHNfc291cmNlcyknLAotICAgICc8QChza2lhX3Nrb3R0aWVfc291cmNlcyknLAotICAgICc8QChza2lhX3Nrc2dfc291cmNlcyknLAotICAgICc8QChza2lhX3NoYXBlcl9wcmltaXRpdmVfc291cmNlcyknLAotCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrQm1wQmFzZUNvZGVjLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrQm1wQ29kZWMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tCbXBNYXNrQ29kZWMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tCbXBSTEVDb2RlYy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0JtcFN0YW5kYXJkQ29kZWMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjSW1hZ2VHZW5lcmF0b3IuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2xvclRhYmxlLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrR2lmQ29kZWMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tNYXNrU3dpenpsZXIuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tNYXNrcy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta1NhbXBsZWRDb2RlYy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta1NhbXBsZXIuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tTdHJlYW1CdWZmZXIuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tTd2l6emxlci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta1dibXBDb2RlYy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9pbWFnZXMvU2tJbWFnZUVuY29kZXIuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvcG9ydHMvU2tEaXNjYXJkYWJsZU1lbW9yeV9ub25lLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3BvcnRzL1NrSW1hZ2VHZW5lcmF0b3Jfc2tpYS5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9zZm50L1NrT1RUYWJsZV9uYW1lLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3NmbnQvU2tPVFV0aWxzLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvdGhpcmRfcGFydHkvZ2lmL1NrR2lmSW1hZ2VSZWFkZXIuY3BwJywKLQotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9wb3J0cy9Ta0ZvbnRIb3N0X0ZyZWVUeXBlLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3BvcnRzL1NrRm9udEhvc3RfRnJlZVR5cGVfY29tbW9uLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3BvcnRzL1NrRm9udEhvc3RfRnJlZVR5cGVfY29tbW9uLmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9wb3J0cy9Ta0dsb2JhbEluaXRpYWxpemF0aW9uX2RlZmF1bHQuY3BwJywKLSAgXSwKLSAgIyBFeGNsdWRlIGFsbCB1bnVzZWQgc2tpYSBmaWxlcwotICAnc291cmNlcyEnOiBbCi0gICAgIyBjb2RlYwotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0FuZHJvaWRDb2RlYy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta1NhbXBsZWRDb2RlYy5jcHAnLAotCi0gICAgIyBjb3JlCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tNdWx0aVBpY3R1cmVEcmF3LmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tUaW1lLmNwcCcsCi0KLSAgICAjIGdwdQotICAgICI8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2Vfbm9uZS5jcHAiLAotCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xNZXRhbENvZGVHZW5lcmF0b3IuaCcsCi0KLSAgICAjIHV0aWxzIGNvbmN1cnJlbmN5Ci0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ29uZFZhci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0NvbmRWYXIuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrUnVubmFibGUuaCcsCi0KLSAgICAjIHV0aWxzIHBhaW50Ci0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta0JvdW5kYXJ5UGF0Y2guaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta0NhbWVyYS5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrQ2FudmFzU3RhdGVVdGlscy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrQ3ViaWNJbnRlcnZhbC5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrQ3VsbFBvaW50cy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrRGVidWdVdGlscy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrRXZlbnRUcmFjZXIuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta0Zyb250QnVmZmVyZWRTdHJlYW0uaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta0ludGVycG9sYXRvci5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrTGF5ZXIuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta01lc2hVdGlscy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrTmluZVBhdGNoLmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMvU2tQYXJzZVBhaW50LmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMvU2tQYXJzZVBhdGguaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS91dGlscy9Ta1JhbmRvbS5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3V0aWxzL1NrV0dMLmgnLAotCi0gICAgIyB1dGlscyBiaXRtYXAKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tCaXRtYXBIYXNoZXIuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tCaXRtYXBIYXNoZXIuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQm91bmRhcnlQYXRjaC5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0NhbWVyYS5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0NhbnZhc1N0YWNrLmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0N1YmljSW50ZXJ2YWwuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tDdWxsUG9pbnRzLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrRmxvYXRVdGlscy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tGcm9udEJ1ZmZlcmVkU3RyZWFtLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrR2F0aGVyUGl4ZWxSZWZzQW5kUmVjdHMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tHYXRoZXJQaXhlbFJlZnNBbmRSZWN0cy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tJbnRlcnBvbGF0b3IuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tMYXllci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta01ENS5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta01ENS5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tNZXNoVXRpbHMuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tOaW5lUGF0Y2guY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tQYXJzZUNvbG9yLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrUGFyc2VQYXRoLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrUGF0aFV0aWxzLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrU0hBMS5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta1NIQTEuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrVEZpdHNJbi5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tUTG9naWMuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrVGhyZWFkVXRpbHNfcHRocmVhZC5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta1RocmVhZFV0aWxzX3B0aHJlYWRfbGludXguY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tUaHJlYWRVdGlsc19wdGhyZWFkX21hY2guY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tUaHJlYWRVdGlsc19wdGhyZWFkX290aGVyLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrVGhyZWFkVXRpbHNfd2luLmNwcCcsCi0KLSAgICAjIG1hYwotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMvbWFjL1NrQ0dVdGlscy5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvbWFjL1NrQ3JlYXRlQ0dJbWFnZVJlZi5jcHAnLAotCi0gICAgIyB3aW5kb3dzCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta0F1dG9Db0luaXRpYWxpemUuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta0F1dG9Db0luaXRpYWxpemUuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvd2luL1NrRFdyaXRlLmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy93aW4vU2tEV3JpdGUuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvd2luL1NrRFdyaXRlRm9udEZpbGVTdHJlYW0uY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvd2luL1NrRFdyaXRlRm9udEZpbGVTdHJlYW0uaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta0RXcml0ZUdlb21ldHJ5U2luay5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy93aW4vU2tEV3JpdGVHZW9tZXRyeVNpbmsuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta0hSRVNVTFQuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta0hSRVNVTFQuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvd2luL1NrSVN0cmVhbS5oJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvd2luL1NrSVN0cmVhbS5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy93aW4vU2tUU2NvcGVkQ29tUHRyLmgnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy93aW4vU2tXR0wuaCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL3dpbi9Ta1dHTF93aW4uY3BwJywKLSAgXSwKLQotICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgI3RlbXBvcmFyeSB1bnRpbCB3ZSBjYW4gaGlkZSBTa0ZvbnRIb3N0Ci0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYScsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZScsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMnLAotCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9lZmZlY3RzJywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZ3B1JywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvbGF6eScsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3BhdGhvcHMnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9waXBlJywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvcG9ydHMnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9wcml2YXRlJywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvdXRpbHMnLAotICAgIF0sCi0gIH0sCi0KLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWyd0YXJnZXRfb3M9PSJsaW51eCInLCB7Ci0gICAgICAnY2ZsYWdzJzogWwotICAgICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnT1M9PSJzdGFyYm9hcmQiJywgewotICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvcG9ydHMvU2tNZW1vcnlfbWFsbG9jLmNwcCcsCi0gICAgICBdLAotICAgIH1dLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbGlicmFyeV9vcHRzLmd5cCBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX2xpYnJhcnlfb3B0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YjkyZGQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbGlicmFyeV9vcHRzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi0jIFRoaXMgZ3lwIGZpbGUgY29udGFpbnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbnMgZm9yIFNraWEKLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NraWFfb3B0cycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJ3NraWFfY29tbW9uLmd5cGknLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZWZmZWN0cycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL29wdHMnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdza2lhX29wdHNfbm9uZScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NraWFfb3B0c19ub25lJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJ3NraWFfY29tbW9uLmd5cGknLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZWZmZWN0cycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX25leHQuZ25pIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbmV4dC5nbmkKaW5kZXggN2M2MTEyNS4uMDU0YmJjMSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbmV4dC5nbmkKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfbmV4dC5nbmkKQEAgLTEyLDEwICsxMiw2IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLWRlY2xhcmVfYXJncygpIHsKLSAgdXNlX3NraWFfbmV4dCA9IGZhbHNlCi19Ci0KIHNraWFfc3ViZGlyID0gInNraWEiCiBza2lhX2luY2x1ZGVfZGlyID0gIiIKIApkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfc2tzbC5neXBpIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfc2tzbC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjhiNGRhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX3Nrc2wuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi0jIFRoaXMgZ3lwaSBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgQ29iYWx0LXNwZWNpZmljIGVuaGFuY2VtZW50cyB0byBTa2lhLgotIyBJbiBjb21wb25lbnQgbW9kZSAoc2hhcmVkX2xpYikgaXQgaXMgZm9sZGVkIGludG8gYSBzaW5nbGUgc2hhcmVkIGxpYnJhcnkgd2l0aAotIyB0aGUgU2tpYSBmaWxlcyBidXQgaW4gYWxsIG90aGVyIGNhc2VzIGl0IGlzIGEgc2VwYXJhdGUgbGlicmFyeS4KLXsKLSAgJ3NvdXJjZXMnOiBbCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTEFTVE5vZGUuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMQnl0ZUNvZGUuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMQ0ZHR2VuZXJhdG9yLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTENvbXBpbGVyLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTENQUENvZGVHZW5lcmF0b3IuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMQ1BQVW5pZm9ybUNUeXBlcy5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xHTFNMQ29kZUdlbmVyYXRvci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xIQ29kZUdlbmVyYXRvci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xJUkdlbmVyYXRvci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xMZXhlci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMT3V0cHV0U3RyZWFtLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTFBhcnNlci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xQaXBlbGluZVN0YWdlQ29kZUdlbmVyYXRvci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xTUElSVkNvZGVHZW5lcmF0b3IuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMU2VjdGlvbkFuZFBhcmFtZXRlckhlbHBlci5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xTdHJpbmcuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMVXRpbC5jcHAnLAotICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2lyL1NrU0xTZXR0aW5nLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvaXIvU2tTTFN5bWJvbFRhYmxlLmNwcCcsCi0gICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvaXIvU2tTTFR5cGUuY3BwJywKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9pci9Ta1NMVmFyaWFibGVSZWZlcmVuY2UuY3BwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9za2lhX3NvdXJjZXMuZ25pIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfc291cmNlcy5nbmkKaW5kZXggMDNhOTMxMC4uMjNiNTI4OSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfc291cmNlcy5nbmkKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NraWFfc291cmNlcy5nbmkKQEAgLTY3LDYgKzY3LDEwIEBACiAKICMgZnJvbSAiZ3B1LmduaSIKIGNvbWJpbmVkX3NvdXJjZXMgKz0gc2tpYV9ncHVfc291cmNlcworaWYgKHVzZV9za2lhX25leHQpIHsKKyAgY29tYmluZWRfc291cmNlcyArPSBza2lhX2dsX2dwdV9zb3VyY2VzCisgIGNvbWJpbmVkX3NvdXJjZXMgKz0gc2tpYV9zaGFyZWRfZ3B1X3NvdXJjZXMKK30KIAogY29tYmluZWRfc291cmNlcyArPSBza2lhX3V0aWxzX3NvdXJjZXMKIGNvbWJpbmVkX3NvdXJjZXMgKz0gc2tpYV9za290dGllX3NvdXJjZXMKQEAgLTEyOCwxNSArMTMyLDE1OSBAQAogCiBpZiAodXNlX3NraWFfbmV4dCkgewogICBza3NsX3NvdXJjZXMgPSBbCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL2luY2x1ZGUvc2tzbC9EU0xCbG9jay5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvaW5jbHVkZS9za3NsL0RTTENhc2UuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL2luY2x1ZGUvc2tzbC9EU0xDb3JlLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9pbmNsdWRlL3Nrc2wvRFNMRXhwcmVzc2lvbi5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvaW5jbHVkZS9za3NsL0RTTEZ1bmN0aW9uLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9pbmNsdWRlL3Nrc2wvRFNMTGF5b3V0LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9pbmNsdWRlL3Nrc2wvRFNMU3RhdGVtZW50LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9pbmNsdWRlL3Nrc2wvRFNMU3ltYm9scy5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvaW5jbHVkZS9za3NsL0RTTFR5cGUuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL2luY2x1ZGUvc2tzbC9EU0xWYXIuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xBbmFseXNpcy5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMQW5hbHlzaXMuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xCdWlsdGluVHlwZXMuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTEJ1aWx0aW5UeXBlcy5oIiwKICAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTENvbXBpbGVyLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xDb21waWxlci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTENvbnN0YW50Rm9sZGVyLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xDb25zdGFudEZvbGRlci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTENvbnRleHQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTENvbnRleHQuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xEU0xQYXJzZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTERTTFBhcnNlci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTEVycm9yUmVwb3J0ZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTElubGluZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTElubGluZXIuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xJbnRyaW5zaWNNYXAuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTEludHJpbnNpY01hcC5oIiwKICAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTExleGVyLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xMZXhlci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTE1hbmdsZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTE1hbmdsZXIuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xPcGVyYXRvcnMuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTE9wZXJhdG9ycy5oIiwKICAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTE91dHB1dFN0cmVhbS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMT3V0cHV0U3RyZWFtLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMUG9vbC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMUG9vbC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTFJlaHlkcmF0b3IuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvU2tTTFJlaHlkcmF0b3IuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xTYW1wbGVVc2FnZS5jcHAiLAogICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMU3RyaW5nLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xUaHJlYWRDb250ZXh0LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL1NrU0xUaHJlYWRDb250ZXh0LmgiLAogICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMVXRpbC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9Ta1NMVXRpbC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvYW5hbHlzaXMvU2tTTENhbkV4aXRXaXRob3V0UmV0dXJuaW5nVmFsdWUuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvYW5hbHlzaXMvU2tTTENoZWNrUHJvZ3JhbVVucm9sbGVkU2l6ZS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9hbmFseXNpcy9Ta1NMR2V0TG9vcFVucm9sbEluZm8uY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvYW5hbHlzaXMvU2tTTElzQ29uc3RhbnRFeHByZXNzaW9uLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2FuYWx5c2lzL1NrU0xQcm9ncmFtVXNhZ2UuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvYW5hbHlzaXMvU2tTTFN3aXRjaENhc2VDb250YWluc0V4aXQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMQ29kZUdlbmVyYXRvci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMR0xTTENvZGVHZW5lcmF0b3IuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMR0xTTENvZGVHZW5lcmF0b3IuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2NvZGVnZW4vU2tTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2NvZGVnZW4vU2tTTFBpcGVsaW5lU3RhZ2VDb2RlR2VuZXJhdG9yLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2NvZGVnZW4vU2tTTFBpcGVsaW5lU3RhZ2VDb2RlR2VuZXJhdG9yLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xTUElSVkNvZGVHZW5lcmF0b3IuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMU1BJUlZDb2RlR2VuZXJhdG9yLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xTUElSVnRvSExTTC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xTUElSVnRvSExTTC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMVk1Db2RlR2VuZXJhdG9yLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2NvZGVnZW4vU2tTTFZNQ29kZUdlbmVyYXRvci5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL0RTTEJsb2NrLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2RzbC9EU0xDYXNlLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2RzbC9EU0xDb3JlLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2RzbC9EU0xFeHByZXNzaW9uLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2RzbC9EU0xGdW5jdGlvbi5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9kc2wvRFNMTGF5b3V0LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2RzbC9EU0xTdGF0ZW1lbnQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL0RTTFN5bWJvbHMuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL0RTTFR5cGUuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL0RTTFZhci5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9kc2wvcHJpdi9EU0xGUHMuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL3ByaXYvRFNMRlBzLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9kc2wvcHJpdi9EU0xXcml0ZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvZHNsL3ByaXYvRFNMV3JpdGVyLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQmluYXJ5RXhwcmVzc2lvbi5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQmluYXJ5RXhwcmVzc2lvbi5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTEJsb2NrLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xCbG9jay5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENoaWxkQ2FsbC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ2hpbGRDYWxsLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3IuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JBcnJheS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JBcnJheS5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yQXJyYXlDYXN0LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvckFycmF5Q2FzdC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yQ29tcG91bmQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yQ29tcG91bmQuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvckNvbXBvdW5kQ2FzdC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JDb21wb3VuZENhc3QuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvckRpYWdvbmFsTWF0cml4LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvckRpYWdvbmFsTWF0cml4LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JNYXRyaXhSZXNpemUuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yTWF0cml4UmVzaXplLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JTY2FsYXJDYXN0LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvclNjYWxhckNhc3QuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvclNwbGF0LmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xDb25zdHJ1Y3RvclNwbGF0LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMQ29uc3RydWN0b3JTdHJ1Y3QuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTENvbnN0cnVjdG9yU3RydWN0LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRG9TdGF0ZW1lbnQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTERvU3RhdGVtZW50LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRXhwcmVzc2lvblN0YXRlbWVudC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRXhwcmVzc2lvblN0YXRlbWVudC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTEZpZWxkQWNjZXNzLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xGaWVsZEFjY2Vzcy5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTEZvclN0YXRlbWVudC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRm9yU3RhdGVtZW50LmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRnVuY3Rpb25DYWxsLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xGdW5jdGlvbkNhbGwuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMRnVuY3Rpb25EZWZpbml0aW9uLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xGdW5jdGlvbkRlZmluaXRpb24uaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xJZlN0YXRlbWVudC5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMSWZTdGF0ZW1lbnQuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xJbmRleEV4cHJlc3Npb24uY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTEluZGV4RXhwcmVzc2lvbi5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTE1vZGlmaWVycy5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMUG9zdGZpeEV4cHJlc3Npb24uY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFBvc3RmaXhFeHByZXNzaW9uLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMUHJlZml4RXhwcmVzc2lvbi5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMUHJlZml4RXhwcmVzc2lvbi5oIiwKICAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFNldHRpbmcuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFNldHRpbmcuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xTd2l0Y2hTdGF0ZW1lbnQuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFN3aXRjaFN0YXRlbWVudC5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFN3aXp6bGUuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFN3aXp6bGUuaCIsCiAgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xTeW1ib2xUYWJsZS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMU3ltYm9sVGFibGUuaCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xUZXJuYXJ5RXhwcmVzc2lvbi5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVGVybmFyeUV4cHJlc3Npb24uaCIsCiAgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xUeXBlLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL2lyL1NrU0xUeXBlLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVHlwZVJlZmVyZW5jZS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVHlwZVJlZmVyZW5jZS5oIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFZhckRlY2xhcmF0aW9ucy5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVmFyRGVjbGFyYXRpb25zLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVmFyaWFibGUuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFZhcmlhYmxlLmgiLAogICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC9pci9Ta1NMVmFyaWFibGVSZWZlcmVuY2UuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvaXIvU2tTTFZhcmlhYmxlUmVmZXJlbmNlLmgiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC90cmFuc2Zvcm0vU2tTTEJ1aWx0aW5WYXJpYWJsZVNjYW5uZXIuY3BwIiwKKyAgICAiLy90aGlyZF9wYXJ0eS8kc2tpYV9zdWJkaXIvc3JjL3Nrc2wvdHJhbnNmb3JtL1NrU0xFbGltaW5hdGVEZWFkRnVuY3Rpb25zLmNwcCIsCisgICAgIi8vdGhpcmRfcGFydHkvJHNraWFfc3ViZGlyL3NyYy9za3NsL3RyYW5zZm9ybS9Ta1NMRWxpbWluYXRlRGVhZEdsb2JhbFZhcmlhYmxlcy5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC90cmFuc2Zvcm0vU2tTTEVsaW1pbmF0ZURlYWRMb2NhbFZhcmlhYmxlcy5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC90cmFuc2Zvcm0vU2tTTEVsaW1pbmF0ZVVucmVhY2hhYmxlQ29kZS5jcHAiLAorICAgICIvL3RoaXJkX3BhcnR5LyRza2lhX3N1YmRpci9zcmMvc2tzbC90cmFuc2Zvcm0vU2tTTFRyYW5zZm9ybS5oIiwKICAgXQogfSBlbHNlIHsKICAgc2tzbF9zb3VyY2VzID0gWwpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9ncHUvZ2wvR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2VfY29iYWx0LmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9ncHUvZ2wvR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2VfY29iYWx0LmNjCmluZGV4IGQ1ZGMyZmEuLjIxNmJiYTkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvZ3B1L2dsL0dyR0xNYWtlTmF0aXZlSW50ZXJmYWNlX2NvYmFsdC5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL2dwdS9nbC9HckdMTWFrZU5hdGl2ZUludGVyZmFjZV9jb2JhbHQuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvZWdsX2FuZF9nbGVzLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2dwdS9nbC9HckdMQXNzZW1ibGVJbnRlcmZhY2UuaCIKQEAgLTc0LDkgKzczLDYgQEAKICAgUkVHSVNURVJfR0xfRlVOQ1RJT04oR2V0U2hhZGVySW5mb0xvZyk7CiAgIFJFR0lTVEVSX0dMX0ZVTkNUSU9OKEdldFNoYWRlcml2KTsKICAgUkVHSVNURVJfR0xfRlVOQ1RJT04oR2V0U3RyaW5nKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyICYmIGRlZmluZWQoR0xFUzNfU1VQUE9SVEVEKQotICBSRUdJU1RFUl9HTF9GVU5DVElPTihHZXRTdHJpbmdpKTsKLSNlbmRpZgogICBSRUdJU1RFUl9HTF9GVU5DVElPTihHZXRVbmlmb3JtTG9jYXRpb24pOwogICBSRUdJU1RFUl9HTF9GVU5DVElPTihJc1RleHR1cmUpOwogICBSRUdJU1RFUl9HTF9GVU5DVElPTihMaW5rUHJvZ3JhbSk7CkBAIC0xNDksMTIgKzE0NSwzIEBACiBjb25zdCBHckdMSW50ZXJmYWNlKiBHckdMQ3JlYXRlTmF0aXZlSW50ZXJmYWNlKCkgewogICByZXR1cm4gR3JHTEFzc2VtYmxlSW50ZXJmYWNlKE5VTEwsICZHZXRHTFByb2MpOwogfQotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhHTEVTMikKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9ncHUvZ2wvR3JHTEludGVyZmFjZS5oIgotCi1za19zcDxjb25zdCBHckdMSW50ZXJmYWNlPiBHckdMTWFrZU5hdGl2ZUludGVyZmFjZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLQotY29uc3QgR3JHTEludGVyZmFjZSogR3JHTENyZWF0ZU5hdGl2ZUludGVyZmFjZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuY2MKaW5kZXggOGFkYTNhMi4uN2Q2OTRhZiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta0ZvbnRNZ3JfY29iYWx0LmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvcG9ydHMvU2tGb250TWdyX2NvYmFsdC5jYwpAQCAtNjcsMTYgKzY3LDE1IEBACiAgICAgICAqc3lzdGVtX2ZvbnRfY29uZmlnX2RpcmVjdG9yeSAhPSAnXDAnICYmCiAgICAgICBzeXN0ZW1fZm9udF9maWxlc19kaXJlY3RvcnkgIT0gTlVMTCAmJgogICAgICAgKnN5c3RlbV9mb250X2ZpbGVzX2RpcmVjdG9yeSAhPSAnXDAnICYmCi0gICAgICAoMCAhPSBzdHJjbXAoY29iYWx0X2ZvbnRfZmlsZXNfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9mb250X2ZpbGVzX2RpcmVjdG9yeSkpKSB7CisgICAgICAoMCAhPSBzdHJjbXAoY29iYWx0X2ZvbnRfZmlsZXNfZGlyZWN0b3J5LCBzeXN0ZW1fZm9udF9maWxlc19kaXJlY3RvcnkpKSkgewogICAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJMb2FkU3lzdGVtRm9udEZhbWlsaWVzIik7CiAgICAgUGFyc2VDb25maWdBbmRCdWlsZEZhbWlsaWVzKHN5c3RlbV9mb250X2NvbmZpZ19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9mb250X2ZpbGVzX2RpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByaW9yaXR5X2ZhbGxiYWNrX2ZhbWlsaWVzKTsKICAgfQogCi0vLyBMb2FkIGxvY2FsIGZhbGxiYWNrIGZvbnRzIGlmIGF2YWlsYWJsZS4KLS8vIFRoZSBmb250cyBhcmUgYWRkZWQgaW4gYWRkaXRpb24gdG8gdGhlIENvYmFsdCBhbmQgU3lzdGVtIGZvbnRzLgorICAvLyBMb2FkIGxvY2FsIGZhbGxiYWNrIGZvbnRzIGlmIGF2YWlsYWJsZS4KKyAgLy8gVGhlIGZvbnRzIGFyZSBhZGRlZCBpbiBhZGRpdGlvbiB0byB0aGUgQ29iYWx0IGFuZCBTeXN0ZW0gZm9udHMuCiAgIGNvbnN0IENvYmFsdEV4dGVuc2lvbkZvbnRBcGkqIGZvbnRfZXh0ZW5zaW9uID0KICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvYmFsdEV4dGVuc2lvbkZvbnRBcGkqPigKICAgICAgICAgICBTYlN5c3RlbUdldEV4dGVuc2lvbihrQ29iYWx0RXh0ZW5zaW9uRm9udE5hbWUpKTsKQEAgLTI2Nyw2ICsyNjYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgpOwogfQogCisjaWZkZWYgVVNFX1NLSUFfTkVYVAorc2tfc3A8U2tUeXBlZmFjZT4gU2tGb250TWdyX0NvYmFsdDo6b25NYWtlRnJvbVN0cmVhbUFyZ3MoCisgICAgc3RkOjp1bmlxdWVfcHRyPFNrU3RyZWFtQXNzZXQ+IHN0cmVhbSwgY29uc3QgU2tGb250QXJndW1lbnRzJiBhcmdzKSBjb25zdCB7CisgIHJldHVybiB0aGlzLT5tYWtlRnJvbVN0cmVhbShzdGQ6Om1vdmUoc3RyZWFtKSwgYXJncy5nZXRDb2xsZWN0aW9uSW5kZXgoKSk7Cit9CisjZW5kaWYKKwogc2tfc3A8U2tUeXBlZmFjZT4gU2tGb250TWdyX0NvYmFsdDo6b25NYWtlRnJvbVN0cmVhbUluZGV4KAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTa1N0cmVhbUFzc2V0PiBzdHJlYW0sIGludCBmYWNlX2luZGV4KSBjb25zdCB7CiAgIFRSQUNFX0VWRU5UMCgiY29iYWx0OjpyZW5kZXJlciIsICJTa0ZvbnRNZ3JfQ29iYWx0Ojpvbk1ha2VGcm9tU3RyZWFtSW5kZXgoKSIpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta0ZvbnRNZ3JfY29iYWx0LmggYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuaAppbmRleCAxMGY2YjBjLi4wY2I5OWQ1IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuaAorKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrRm9udE1ncl9jb2JhbHQuaApAQCAtMTAxLDYgKzEwMSwxMiBAQAogICBza19zcDxTa1R5cGVmYWNlPiBvbk1ha2VGcm9tRGF0YShza19zcDxTa0RhdGE+IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWNlX2luZGV4KSBjb25zdCBvdmVycmlkZTsKIAorI2lmZGVmIFVTRV9TS0lBX05FWFQKKyAgLy8gTk9URTogVGhpcyByZXR1cm5zIE5VTEwgaWYgdGhlIHR5cGVmYWNlIGNhbm5vdCBiZSBjcmVhdGVkLgorICBza19zcDxTa1R5cGVmYWNlPiBvbk1ha2VGcm9tU3RyZWFtQXJncyhzdGQ6OnVuaXF1ZV9wdHI8U2tTdHJlYW1Bc3NldD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrRm9udEFyZ3VtZW50cyYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisKICAgLy8gTk9URTogVGhpcyByZXR1cm5zIE5VTEwgaWYgdGhlIHR5cGVmYWNlIGNhbm5vdCBiZSBjcmVhdGVkLgogICBza19zcDxTa1R5cGVmYWNlPiBvbk1ha2VGcm9tU3RyZWFtSW5kZXgoc3RkOjp1bmlxdWVfcHRyPFNrU3RyZWFtQXNzZXQ+IHN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWNlX2luZGV4KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvcG9ydHMvU2tNZW1vcnlfc3RhcmJvYXJkLmNjIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta01lbW9yeV9zdGFyYm9hcmQuY2MKaW5kZXggYzllN2I3OS4uY2ExYzAzYSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta01lbW9yeV9zdGFyYm9hcmQuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta01lbW9yeV9zdGFyYm9hcmQuY2MKQEAgLTEzLDcgKzEzLDYgQEAKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjaW5jbHVkZSAiU2tNYWxsb2MuaCIKLSNpbmNsdWRlICJTa1R5cGVzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKIApAQCAtMjEsOCArMjAsNyBAQAogICBTa0FTU0VSVCgoU2tEZWJ1Z2YoZm10ICJcbiIsIF9fVkFfQVJHU19fKSwgZmFsc2UpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tfb3V0X29mX21lbW9yeShzaXplX3Qgc2l6ZSkgewotICBTS19ERUJVR0ZBSUxGKCJza19vdXRfb2ZfbWVtb3J5IChhc2tlZCBmb3IgIiBTS19TSVpFX1RfU1BFQ0lGSUVSICIgYnl0ZXMpIiwKLSAgICAgICAgICAgICAgICBzaXplKTsKKyAgU0tfREVCVUdGQUlMRigic2tfb3V0X29mX21lbW9yeSAoYXNrZWQgZm9yICV6dSBieXRlcykiLCBzaXplKTsKICAgU2JTeXN0ZW1CcmVha0ludG9EZWJ1Z2dlcigpOwogfQogCkBAIC0zNyw5ICszNSw3IEBACiAKIHZvaWQgc2tfYWJvcnRfbm9fcHJpbnQoKSB7IFNiU3lzdGVtQnJlYWtJbnRvRGVidWdnZXIoKTsgfQogCi12b2lkIHNrX291dF9vZl9tZW1vcnkodm9pZCkgewotICBTYlN5c3RlbUJyZWFrSW50b0RlYnVnZ2VyKCk7Ci19Cit2b2lkIHNrX291dF9vZl9tZW1vcnkodm9pZCkgeyBTYlN5c3RlbUJyZWFrSW50b0RlYnVnZ2VyKCk7IH0KIAogdm9pZCogc2tfcmVhbGxvY190aHJvdyh2b2lkKiBhZGRyLCBzaXplX3Qgc2l6ZSkgewogICByZXR1cm4gdGhyb3dfb25fZmFpbHVyZShzaXplLCBTYk1lbW9yeVJlYWxsb2NhdGUoYWRkciwgc2l6ZSkpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta1R5cGVmYWNlX2NvYmFsdC5jYyBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuY2MKaW5kZXggYTExNmMyYy4uODM3Y2U3NSAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta1R5cGVmYWNlX2NvYmFsdC5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrVHlwZWZhY2VfY29iYWx0LmNjCkBAIC05Myw2ICs5MywxNyBAQAogICByZXR1cm4gc3RyZWFtXy0+Z2V0TGVuZ3RoKCk7CiB9CiAKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCitzdGQ6OnVuaXF1ZV9wdHI8U2tGb250RGF0YT4gU2tUeXBlZmFjZV9Db2JhbHRTdHJlYW06Om9uTWFrZUZvbnREYXRhKCkgY29uc3QgeworICBpbnQgaW5kZXg7CisgIHN0ZDo6dW5pcXVlX3B0cjxTa1N0cmVhbUFzc2V0PiBzdHJlYW0odGhpcy0+b25PcGVuU3RyZWFtKCZpbmRleCkpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBudWxscHRyOworICB9CisgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNrRm9udERhdGE+KHN0ZDo6bW92ZShzdHJlYW0pLCBpbmRleCwgbnVsbHB0ciwgMCk7Cit9CisjZW5kaWYKKwogU2tUeXBlZmFjZV9Db2JhbHRTdHJlYW1Qcm92aWRlcjo6U2tUeXBlZmFjZV9Db2JhbHRTdHJlYW1Qcm92aWRlcigKICAgICBTa0ZpbGVNZW1vcnlDaHVua1N0cmVhbVByb3ZpZGVyKiBzdHJlYW1fcHJvdmlkZXIsIGludCBmYWNlX2luZGV4LAogICAgIFNrRm9udFN0eWxlIHN0eWxlLCBib29sIGlzX2ZpeGVkX3BpdGNoLCBjb25zdCBTa1N0cmluZyYgZmFtaWx5X25hbWUsCkBAIC0xMzIsMyArMTQzLDE1IEBACiAgICAgICBzdHJlYW1fcHJvdmlkZXJfLT5PcGVuU3RyZWFtKCkpOwogICByZXR1cm4gc3RyZWFtLT5nZXRMZW5ndGgoKTsKIH0KKworI2lmZGVmIFVTRV9TS0lBX05FWFQKK3N0ZDo6dW5pcXVlX3B0cjxTa0ZvbnREYXRhPiBTa1R5cGVmYWNlX0NvYmFsdFN0cmVhbVByb3ZpZGVyOjpvbk1ha2VGb250RGF0YSgpCisgICAgY29uc3QgeworICBpbnQgaW5kZXg7CisgIHN0ZDo6dW5pcXVlX3B0cjxTa1N0cmVhbUFzc2V0PiBzdHJlYW0odGhpcy0+b25PcGVuU3RyZWFtKCZpbmRleCkpOworICBpZiAoIXN0cmVhbSkgeworICAgIHJldHVybiBudWxscHRyOworICB9CisgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNrRm9udERhdGE+KHN0ZDo6bW92ZShzdHJlYW0pLCBpbmRleCwgbnVsbHB0ciwgMCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuaCBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvc2tpYS9zcmMvcG9ydHMvU2tUeXBlZmFjZV9jb2JhbHQuaAppbmRleCAyOTFmZjJkLi5mNWVkZTljIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc3JjL3BvcnRzL1NrVHlwZWZhY2VfY29iYWx0LmgKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9za2lhL3NyYy9wb3J0cy9Ta1R5cGVmYWNlX2NvYmFsdC5oCkBAIC02Niw2ICs2Niw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzZXJpYWxpemUpIGNvbnN0IG92ZXJyaWRlOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxTa1N0cmVhbUFzc2V0PiBvbk9wZW5TdHJlYW0oaW50KiBmYWNlX2luZGV4KSBjb25zdCBvdmVycmlkZTsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIHN0ZDo6dW5pcXVlX3B0cjxTa0ZvbnREYXRhPiBvbk1ha2VGb250RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAKICAgc2l6ZV90IEdldFN0cmVhbUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC04Nyw2ICs5MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzZXJpYWxpemUpIGNvbnN0IG92ZXJyaWRlOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjxTa1N0cmVhbUFzc2V0PiBvbk9wZW5TdHJlYW0oaW50KiBmYWNlX2luZGV4KSBjb25zdCBvdmVycmlkZTsKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisgIHN0ZDo6dW5pcXVlX3B0cjxTa0ZvbnREYXRhPiBvbk1ha2VGb250RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCiAKICAgc2l6ZV90IEdldFN0cmVhbUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NvZnR3YXJlX3Jhc3Rlcml6ZXIuZ3lwIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9zb2Z0d2FyZV9yYXN0ZXJpemVyLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4OWE2Ni4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NvZnR3YXJlX3Jhc3Rlcml6ZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzb2Z0d2FyZV9yYXN0ZXJpemVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzb2Z0d2FyZV9pbWFnZS5jYycsCi0gICAgICAgICdzb2Z0d2FyZV9pbWFnZS5oJywKLSAgICAgICAgJ3NvZnR3YXJlX21lc2guaCcsCi0gICAgICAgICdzb2Z0d2FyZV9yYXN0ZXJpemVyLmNjJywKLSAgICAgICAgJ3NvZnR3YXJlX3Jhc3Rlcml6ZXIuaCcsCi0gICAgICAgICdzb2Z0d2FyZV9yZXNvdXJjZV9wcm92aWRlci5jYycsCi0gICAgICAgICdzb2Z0d2FyZV9yZXNvdXJjZV9wcm92aWRlci5oJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS9jb21tb24uZ3lwOmNvbW1vbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc2tpYS5neXA6c2tpYScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6ei5neXA6aGFyZmJ1enotbmcnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvb3RzL290cy5neXA6b3RzJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmNjCmluZGV4IDFhNDcxYTMuLmM1MzBkZWYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuY2MKKysrIGIvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc2tpYS92ZXJ0ZXhfYnVmZmVyX29iamVjdC5jYwpAQCAtMTIsMTYgKzEyLDEzIEBACiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQorI2luY2x1ZGUgImNvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3NraWEvdmVydGV4X2J1ZmZlcl9vYmplY3QuaCIKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3ZlcnRleF9idWZmZXJfb2JqZWN0LmgiCi0KICNpbmNsdWRlICJjb2JhbHQvcmVuZGVyZXIvYmFja2VuZC9lZ2wvdXRpbHMuaCIKLQorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSByZW5kZXJlciB7CiBuYW1lc3BhY2UgcmFzdGVyaXplciB7CkBAIC02Niw1ICs2MywzIEBACiB9ICAvLyBuYW1lc3BhY2UgcmFzdGVyaXplcgogfSAgLy8gbmFtZXNwYWNlIHJlbmRlcmVyCiB9ICAvLyBuYW1lc3BhY2UgY29iYWx0Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc3R1Yi9yYXN0ZXJpemVyLmd5cCBiL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3N0dWIvcmFzdGVyaXplci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NDY2MjYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvc3R1Yi9yYXN0ZXJpemVyLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyYXN0ZXJpemVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdyYXN0ZXJpemVyLmNjJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyX3RyZWVfcGl4ZWxfdGVzdGVyLmNjIGIvY29iYWx0L3JlbmRlcmVyL3JlbmRlcl90cmVlX3BpeGVsX3Rlc3Rlci5jYwppbmRleCBmNjE3YWFiLi40ZmZjMzM4IDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyX3RyZWVfcGl4ZWxfdGVzdGVyLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yZW5kZXJfdHJlZV9waXhlbF90ZXN0ZXIuY2MKQEAgLTMwLDcgKzMwLDExIEBACiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tCaXRtYXAuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NhbnZhcy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUGl4ZWxSZWYuaCIKKyNpZmRlZiBVU0VfU0tJQV9ORVhUCisjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2VmZmVjdHMvU2tJbWFnZUZpbHRlcnMuaCIKKyNlbHNlCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2VmZmVjdHMvU2tCbHVySW1hZ2VGaWx0ZXIuaCIKKyNlbmRpZgogCiAvLyBBdm9pZCBvdmVycmlkaW5nIG9mIFdpbmRvd3MnIENyZWF0ZURpcmVjdG9yeSBtYWNyby4KICN1bmRlZiBDcmVhdGVEaXJlY3RvcnkKQEAgLTEzMywxMyArMTM3LDIzIEBACiAgIERDSEVDSyhibHVycmVkX2JpdG1hcF9hbGxvY2F0ZWQpOwogCiAgIFNrUGFpbnQgcGFpbnQ7CisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICBza19zcDxTa0ltYWdlRmlsdGVyPiBibHVyX2ZpbHRlcihTa0ltYWdlRmlsdGVyczo6Qmx1cihzaWdtYSwgc2lnbWEsIG51bGxwdHIpKTsKKyNlbHNlCiAgIHNrX3NwPFNrSW1hZ2VGaWx0ZXI+IGJsdXJfZmlsdGVyKAogICAgICAgU2tCbHVySW1hZ2VGaWx0ZXI6Ok1ha2Uoc2lnbWEsIHNpZ21hLCBudWxscHRyKSk7CisjZW5kaWYKICAgcGFpbnQuc2V0SW1hZ2VGaWx0ZXIoYmx1cl9maWx0ZXIpOwogCiAgIFNrQ2FudmFzIGNhbnZhcyhibHVycmVkX2JpdG1hcCk7CiAgIGNhbnZhcy5jbGVhcihTa0NvbG9yU2V0QVJHQigwLCAwLCAwLCAwKSk7CisjaWZkZWYgVVNFX1NLSUFfTkVYVAorICBwcmVtdWxfYWxwaGFfYml0bWFwLnNldEltbXV0YWJsZSgpOworICBza19zcDxTa0ltYWdlPiBpbWFnZSA9IFNrSW1hZ2U6Ok1ha2VGcm9tQml0bWFwKHByZW11bF9hbHBoYV9iaXRtYXApOworICBjYW52YXMuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCBTa1NhbXBsaW5nT3B0aW9ucygpLCAmcGFpbnQpOworI2Vsc2UKICAgY2FudmFzLmRyYXdCaXRtYXAocHJlbXVsX2FscGhhX2JpdG1hcCwgMCwgMCwgJnBhaW50KTsKKyNlbmRpZgogCiAgIHJldHVybiBibHVycmVkX2JpdG1hcDsKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci9yZW5kZXJlci5neXAgYi9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWNkOTdjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci9yZW5kZXJlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgVGhpcyB0YXJnZXQgY29udmVuaWVudGx5IGFnZ3JlZ2F0ZXMgYWxsIHN1Yi1tb2R1bGVzIHJlcXVpcmVkIHRvIGRlY2xhcmUKLSAgICAgICMgYW5kIGltcGxlbWVudCByYXN0ZXJpemF0aW9uIGNvbW1hbmRzIGFzIHdlbGwgYXMgZGlzcGxheS9HUFUgcmVzb3VyY2UKLSAgICAgICMgbWFuYWdlbWVudCBhbmQgY29tbXVuaWNhdGlvbi4gIEl0IHdpbGwgZXZlbnR1YWxseSBhbHNvIGNvbnRhaW4gc291cmNlCi0gICAgICAjIGNvZGUgdG8gaGVscCBnbHVlIGFsbCBvZiB0aGUgY29tcG9uZW50cyB0b2dldGhlci4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZW5kZXJlcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2VnbF9hbmRfZ2xlcy5oJywKLSAgICAgICAgJ2Zwc19vdmVybGF5LmNjJywKLSAgICAgICAgJ2Zwc19vdmVybGF5LmgnLAotICAgICAgICAnZ2xlc19leHQuaCcsCi0gICAgICAgICdwaXBlbGluZS5jYycsCi0gICAgICAgICdwaXBlbGluZS5oJywKLSAgICAgICAgJ3JlbmRlcmVyX21vZHVsZS5jYycsCi0gICAgICAgICdyZW5kZXJlcl9tb2R1bGUuaCcsCi0gICAgICAgICdyZW5kZXJlcl9tb2R1bGVfZGVmYXVsdF9vcHRpb25zLmNjJywKLSAgICAgICAgJ3Ntb290aGVkX3ZhbHVlLmNjJywKLSAgICAgICAgJ3Ntb290aGVkX3ZhbHVlLmgnLAotICAgICAgICAnc3VibWlzc2lvbi5oJywKLSAgICAgICAgJ3N1Ym1pc3Npb25fcXVldWUuY2MnLAotICAgICAgICAnc3VibWlzc2lvbl9xdWV1ZS5oJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRzLmd5cDpjb3B5X2ZvbnRfZGF0YScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZGVidWcvZGVidWcuZ3lwOmNvbnNvbGVfY29tbWFuZF9tYW5hZ2VyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9tYXRoL21hdGguZ3lwOm1hdGgnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcl90cmVlL3JlbmRlcl90cmVlLmd5cDphbmltYXRpb25zJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJfdHJlZS9yZW5kZXJfdHJlZS5neXA6cmVuZGVyX3RyZWUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL2JhY2tlbmQvYmFja2VuZC5neXA6cmVuZGVyZXJfYmFja2VuZCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9yYXN0ZXJpemVyLmd5cDpyYXN0ZXJpemVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuZ3lwOnN5c3RlbV93aW5kb3cnLAotICAgICAgICAnPChERVBUSCkvbmIvbmIuZ3lwOm5iJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09InN0YXJib2FyZCInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KGRlZmF1bHRfcmVuZGVyZXJfb3B0aW9uc19kZXBlbmRlbmN5KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY29iYWx0X21pbmltdW1fZnJhbWVfdGltZV9pbl9taWxsaXNlY29uZHMgIT0gLTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ09CQUxUX01JTklNVU1fRlJBTUVfVElNRV9JTl9NSUxMSVNFQ09ORFM9PChjb2JhbHRfbWluaW11bV9mcmFtZV90aW1lX2luX21pbGxpc2Vjb25kcyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBUaGlzIHRhcmdldCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciB0ZXN0aW5nIHRoYXQgcmFzdGVyaXphdGlvbgotICAgICAgIyByZXN1bHRzIGZvciBhIGdpdmVuIHJlbmRlciB0cmVlIG1hdGNoIHVwIHdpdGggYSBwcmUtZXhpc3RpbmcKLSAgICAgICMgImV4cGVjdGVkIG91dHB1dCIgaW1hZ2UgdGhhdCBpcyBzdG9yZWQgb2ZmbGluZSBhcyBhIGZpbGUuCi0gICAgICAndGFyZ2V0X25hbWUnOiAncmVuZGVyX3RyZWVfcGl4ZWxfdGVzdGVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAncmVuZGVyX3RyZWVfcGl4ZWxfdGVzdGVyLmNjJywKLSAgICAgICAgJ3JlbmRlcl90cmVlX3BpeGVsX3Rlc3Rlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci9za2lhL3NraWEvc2tpYS5neXA6c2tpYScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9wbmdfdXRpbHMvcG5nX3V0aWxzLmd5cDpwbmdfdXRpbHMnLAotICAgICAgICAncmVuZGVyZXInLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3JlbmRlcmVyX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbmltYXRpb25zX3Rlc3QuY2MnLAotICAgICAgICAncGlwZWxpbmVfdGVzdC5jYycsCi0gICAgICAgICdyYXN0ZXJpemVyL2xvdHRpZV9jb3ZlcmFnZV9waXhlbF90ZXN0LmNjJywKLSAgICAgICAgJ3Jhc3Rlcml6ZXIvcGl4ZWxfdGVzdC5jYycsCi0gICAgICAgICdyYXN0ZXJpemVyL3BpeGVsX3Rlc3RfZml4dHVyZS5jYycsCi0gICAgICAgICdyYXN0ZXJpemVyL3BpeGVsX3Rlc3RfZml4dHVyZS5oJywKLSAgICAgICAgJ3Jhc3Rlcml6ZXIvc3RyZXNzX3Rlc3QuY2MnLAotICAgICAgICAncmVzb3VyY2VfcHJvdmlkZXJfdGVzdC5jYycsCi0gICAgICAgICdzbW9vdGhlZF92YWx1ZV90ZXN0LmNjJywKLSAgICAgICAgJ3N1Ym1pc3Npb25fcXVldWVfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOmxvYWRlcicsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICdyZW5kZXJfdHJlZV9waXhlbF90ZXN0ZXInLAotICAgICAgICAncmVuZGVyZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV9tYXBfdG9fbWVzaCAhPSAtMScsIHsKLSAgICAgICAgICAnZGVmaW5lcycgOiBbCi0gICAgICAgICAgICAnRU5BQkxFX01BUF9UT19NRVNIPTwoZW5hYmxlX21hcF90b19tZXNoKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3JlbmRlcmVyX2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvdGVzdGRhdGEnLAotICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZ2xvYl9zdWIgPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXIvdGVzdGRhdGEvbG90dGllX2NvdmVyYWdlICouanNvbi5zaGExIGpzb24uc2hhMSBqc29uKScsCi0nPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBmaWxlX2dsb2Jfc3ViIDwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3Rlc3RkYXRhL2xvdHRpZV9jb3ZlcmFnZSAqLnBuZy5zaGExIHBuZy5zaGExIHBuZyknLAotICAgICAgICBdLAotICAgICAgICAnY29udGVudF90ZXN0X291dHB1dF9zdWJkaXInOiAnY29iYWx0L3JlbmRlcmVyL3Jhc3Rlcml6ZXInLAotICAgICAgfSwKLSAgICAgICdhY3Rpb25zJyA6IFsKLSAgICAgICAgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnc2hhX2Rpcic6ICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci90ZXN0ZGF0YS9sb3R0aWVfY292ZXJhZ2UnLAotICAgICAgICAgICAgIyBHWVAgd2lsbCByZW1vdmUgYW4gYXJndW1lbnQgdG8gYW4gYWN0aW9uIHRoYXQgbG9va3MgbGlrZSBhIGR1cGxpY2F0ZSwgc28KLSAgICAgICAgICAgICMgd2UgY2hhbmdlIGl0IHNlbWFudGljYWxseSBoZXJlLgotICAgICAgICAgICAgJ291dF9kaXInOiAnPChERVBUSCkvY29iYWx0Ly4uL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3Rlc3RkYXRhL2xvdHRpZV9jb3ZlcmFnZScsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAncmVuZGVyZXJfZG93bmxvYWRfbG90dGllX3Rlc3RfZGF0YScsCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24nLAotICAgICAgICAgICAgJzwoREVQVEgpL3Rvb2xzL2Rvd25sb2FkX2Zyb21fZ2NzLnB5JywKLSAgICAgICAgICAgICctLWJ1Y2tldCcsICdsb3R0aWUtY292ZXJhZ2UtdGVzdGRhdGEnLAotICAgICAgICAgICAgJy0tc2hhMScsICc8KHNoYV9kaXIpJywKLSAgICAgICAgICAgICctLW91dHB1dCcsICc8KG91dF9kaXIpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBmaWxlX2dsb2IgPChzaGFfZGlyKSAqLmpzb24uc2hhMSknLAotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoc2hhX2RpcikgKi5wbmcuc2hhMSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBmaWxlX2dsb2Jfc3ViIDwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci9yYXN0ZXJpemVyL3Rlc3RkYXRhL2xvdHRpZV9jb3ZlcmFnZSAqLmpzb24uc2hhMSBqc29uLnNoYTEganNvbiknLAotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iX3N1YiA8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvcmFzdGVyaXplci90ZXN0ZGF0YS9sb3R0aWVfY292ZXJhZ2UgKi5wbmcuc2hhMSBwbmcuc2hhMSBwbmcpJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfdGVzdF9kYXRhLmd5cGknXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3JlbmRlcmVyX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3JlbmRlcmVyX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAncmVuZGVyZXJfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlLmNjIGIvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyX21vZHVsZS5jYwppbmRleCBkMjM4YTA4Li4zZmM3YTBmIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlLmNjCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yZW5kZXJlcl9tb2R1bGUuY2MKQEAgLTkxLDE1ICs5MSwxMSBAQAogICAgICAgICBiYXNlOjpCaW5kKG9wdGlvbnNfLmNyZWF0ZV9yYXN0ZXJpemVyX2Z1bmN0aW9uLCBncmFwaGljc19jb250ZXh0Xy5nZXQoKSwKICAgICAgICAgICAgICAgICAgICBvcHRpb25zXyksCiAgICAgICAgIGRpc3BsYXlfLT5HZXRSZW5kZXJUYXJnZXQoKSwgZ3JhcGhpY3NfY29udGV4dF8uZ2V0KCksCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotICAgICAgICBvcHRpb25zXy5zdWJtaXRfZXZlbl9pZl9yZW5kZXJfdHJlZV9pc191bmNoYW5nZWQsCi0jZWxzZQogICAgICAgICAvLyBTQl9NVVNUX0ZSRVFVRU5UTFlfRkxJUF9ESVNQTEFZX0JVRkZFUiBpcyBkZXByZWNhdGVkIGluCiAgICAgICAgIC8vIGZhdm9yIG9mIHRoZSB1c2FnZSBvZiAnQ29iYWx0RXh0ZW5zaW9uR3JhcGhpY3NBcGknLCB1c2UgJ2ZhbHNlJyB0bwogICAgICAgICAvLyBkZXByZWNhdGUgdGhlIHN1Ym1pdF9ldmVuX2lmX3JlbmRlcl90cmVlX2lzX3VuY2hhbmdlZC4KLSAgICAgICAgZmFsc2UsCi0jZW5kaWYKLSAgICAgICAgcmVuZGVyZXI6OlBpcGVsaW5lOjprQ2xlYXJBY2NvcmRpbmdUb1BsYXRmb3JtLCBwaXBlbGluZV9vcHRpb25zKSk7CisgICAgICAgIGZhbHNlLCByZW5kZXJlcjo6UGlwZWxpbmU6OmtDbGVhckFjY29yZGluZ1RvUGxhdGZvcm0sCisgICAgICAgIHBpcGVsaW5lX29wdGlvbnMpKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlLmggYi9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlLmgKaW5kZXggZmQ0OWZmZC4uZTcyM2Q1YiAxMDA2NDQKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyX21vZHVsZS5oCisrKyBiL2NvYmFsdC9yZW5kZXJlci9yZW5kZXJlcl9tb2R1bGUuaApAQCAtNzgsMTQgKzc4LDYgQEAKICAgICAvLyAoZS5nLiBzY3JlZW5zaG90IGRpZmYgdG9vbHMpLgogICAgIGJvb2wgZm9yY2VfZGV0ZXJtaW5pc3RpY19yZW5kZXJpbmc7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0gICAgLy8gSWYgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLCB0aGUgcGlwZWxpbmUgd2lsbCBub3QgcmUtc3VibWl0IGEgcmVuZGVyCi0gICAgLy8gdHJlZSBpZiBpdCBoYXMgbm90IGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgc3VibWlzc2lvbi4gIFRoaXMgY2FuIHNhdmUKLSAgICAvLyBDUFUgdGltZSBzbyBsb25nIGFzIHRoZXJlJ3Mgbm8gcHJvYmxlbSB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlIGRpc3BsYXkKLSAgICAvLyBidWZmZXIgd2lsbCBub3QgYmUgZnJlcXVlbnRseSBzd2FwcGVkLgotICAgIGJvb2wgc3VibWl0X2V2ZW5faWZfcmVuZGVyX3RyZWVfaXNfdW5jaGFuZ2VkOwotI2VuZGlmCi0KICAgICAvLyBJZiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCB0aGVuIGFsbCBvZgogICAgIC8vIFNraWEncyBmb250IGNhY2hlcyBhcmUgcHVyZ2VkIGR1cmluZyBkZXN0cnVjdGlvbi4gVGhlc2UgY2FjaGVzIGhhdmUKICAgICAvLyBsaWZlc3BhbnMgdGhhdCBhcmUgdW5jb3VwbGVkIGZyb20gdGhlIHJlc291cmNlIHByb3ZpZGVyJ3MsIGFuZCB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyX21vZHVsZV9kZWZhdWx0X29wdGlvbnMuY2MgYi9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlX2RlZmF1bHRfb3B0aW9ucy5jYwppbmRleCAyNjU4YTFiLi4wNGI2ODhjIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlX2RlZmF1bHRfb3B0aW9ucy5jYworKysgYi9jb2JhbHQvcmVuZGVyZXIvcmVuZGVyZXJfbW9kdWxlX2RlZmF1bHRfb3B0aW9ucy5jYwpAQCAtMjEsMTQgKzIxLDYgQEAKIG5hbWVzcGFjZSByZW5kZXJlciB7CiAKIHZvaWQgUmVuZGVyZXJNb2R1bGU6Ok9wdGlvbnM6OlNldFBlclBsYXRmb3JtRGVmYXVsdE9wdGlvbnMoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotICAvLyBJZiB0aGVyZSBpcyBubyBuZWVkIHRvIGZyZXF1ZW50bHkgZmxpcCB0aGUgZGlzcGxheSBidWZmZXIsIHRoZW4gZW5hYmxlCi0gIC8vIHN1cHBvcnQgZm9yIGFuIG9wdGltaXphdGlvbiB3aGVyZSB0aGUgc2NlbmUgaXMgbm90IHJlLXJhc3Rlcml6ZWQgZWFjaCBmcmFtZQotICAvLyBpZiBpdCBoYXMgbm90IGNoYW5nZWQgZnJvbSB0aGUgbGFzdCBmcmFtZS4KLSAgc3VibWl0X2V2ZW5faWZfcmVuZGVyX3RyZWVfaXNfdW5jaGFuZ2VkID0KLSAgICAgIFNCX01VU1RfRlJFUVVFTlRMWV9GTElQX0RJU1BMQVlfQlVGRkVSOwotI2VuZGlmCi0KICAgY3JlYXRlX3Jhc3Rlcml6ZXJfZnVuY3Rpb24gPQogICAgICAgR2V0RGVmYXVsdFJhc3Rlcml6ZXJGb3JQbGF0Zm9ybSgpLmNyZWF0ZV9yYXN0ZXJpemVyX2NhbGxiYWNrOwogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3NhbmRib3gvQlVJTEQuZ24gYi9jb2JhbHQvcmVuZGVyZXIvc2FuZGJveC9CVUlMRC5nbgppbmRleCBiYTE3NWEwLi5mYWViZWMzIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvc2FuZGJveC9CVUlMRC5nbgorKysgYi9jb2JhbHQvcmVuZGVyZXIvc2FuZGJveC9CVUlMRC5nbgpAQCAtMzAsNiArMzAsOCBAQAogICAgICIvL2NvYmFsdC9zeXN0ZW1fd2luZG93IiwKICAgICAiLy9jb2JhbHQvdHJhY2VfZXZlbnQiLAogICBdCisKKyAgY29udGVudF9kZXBzID0gWyAiLy9jb2JhbHQvcmVuZGVyZXIvdGVzdC9zY2VuZXM6c2NlbmVzX2NvcHlfdGVzdF9kYXRhIiBdCiB9CiAKICMgVGhpcyB0YXJnZXQgd2lsbCBidWlsZCBhIHNhbmRib3ggYXBwbGljYXRpb24gdGhhdCBhbGxvd3MgZm9yIGVhc3kKQEAgLTQ3LDQgKzQ5LDYgQEAKICAgICAiLy9jb2JhbHQvc3lzdGVtX3dpbmRvdyIsCiAgICAgIi8vY29iYWx0L3RyYWNlX2V2ZW50IiwKICAgXQorCisgIGNvbnRlbnRfZGVwcyA9IFsgIi8vY29iYWx0L3JlbmRlcmVyL3Rlc3Qvc2NlbmVzOnNjZW5lc19jb3B5X3Rlc3RfZGF0YSIgXQogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3NhbmRib3gvc2FuZGJveC5neXAgYi9jb2JhbHQvcmVuZGVyZXIvc2FuZGJveC9zYW5kYm94Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2N2YyYy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvc2FuZGJveC9zYW5kYm94Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgaXMgYSBzYW1wbGUgc2FuZGJveCBhcHBsaWNhdGlvbiBmb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoZSBDb2JhbHQKLSMgcmVuZGVyIHRyZWUvcmVuZGVyZXIgaW50ZXJmYWNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZW5kZXJlcl9zYW5kYm94JywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3JlbmRlcmVyX3NhbmRib3hfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyLmd5cDpyZW5kZXJlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cDpzeXN0ZW1fd2luZG93JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci90ZXN0L3NjZW5lcy9zY2VuZXMuZ3lwOnNjZW5lcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuZ3lwOnRyYWNlX2V2ZW50JywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgICMgVGhpcyB0YXJnZXQgd2lsbCBidWlsZCBhIHNhbmRib3ggYXBwbGljYXRpb24gdGhhdCBhbGxvd3MgZm9yIGVhc3kKLSAgICAjIGV4cGVyaW1lbnRhdGlvbiB3aXRoIHRoZSByZW5kZXJlciBpbnRlcmZhY2Ugb24gYW55IHBsYXRmb3JtLiAgVGhpcyBjYW4KLSAgICAjIGFsc28gYmUgdXNlZnVsIGZvciB2aXN1YWxseSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQgdGhhdCB0aGUgQ29iYWx0Ci0gICAgIyByZW5kZXJlciBpcyBwcm9kdWNpbmcuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3JlbmRlcmVyX3NhbmRib3hfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3JlbmRlcmVyX3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAncmVuZGVyZXJfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2NhbGluZ190ZXh0X3NhbmRib3gnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2NhbGluZ190ZXh0X3NhbmRib3hfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3JlbmRlcmVyL3JlbmRlcmVyLmd5cDpyZW5kZXJlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cDpzeXN0ZW1fd2luZG93JywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci90ZXN0L3NjZW5lcy9zY2VuZXMuZ3lwOnNjZW5lcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuZ3lwOnRyYWNlX2V2ZW50JywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgICMgVGhpcyB0YXJnZXQgd2lsbCBidWlsZCBhIHNhbmRib3ggYXBwbGljYXRpb24gdGhhdCBhbGxvd3MgZm9yIGVhc3kKLSAgICAjIGV4cGVyaW1lbnRhdGlvbiB3aXRoIHRoZSByZW5kZXJlcidzIGhhbmRsaW5nIG9mIHRleHQgd2hlcmUgaXRzIHNjYWxlCi0gICAgIyBpcyBjb25zdGFudGx5IGFuaW1hdGluZywgd2hpY2ggZm9yIG1hbnkgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBhCi0gICAgIyBwZXJmb3JtYW5jZSBwcm9ibGVtLgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzY2FsaW5nX3RleHRfc2FuZGJveF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnc2NhbGluZ190ZXh0X3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnc2NhbGluZ190ZXh0X3NhbmRib3gnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Rlc3QvanBlZ191dGlscy9qcGVnX3V0aWxzLmd5cCBiL2NvYmFsdC9yZW5kZXJlci90ZXN0L2pwZWdfdXRpbHMvanBlZ191dGlscy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNmE1YzIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3JlbmRlcmVyL3Rlc3QvanBlZ191dGlscy9qcGVnX3V0aWxzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAjIFRoaXMgdGFyZ2V0IHByb3ZpZGVzIGNvZGUgdGhhdCBjYW4gZW5jb2RlIGEgSlBFRyBmaWxlLAotICAgICAgIyBvcHRpbWl6ZWQgZm9yIHNwZWVkCi0gICAgICAndGFyZ2V0X25hbWUnOiAnanBlZ191dGlscycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2pwZWdfZW5jb2RlLmNjJywKLSAgICAgICAgJ2pwZWdfZW5jb2RlLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcuZ3lwOmxpYmpwZWcnCi0gICAgICBdLAotICAgIH0sCi0gIF0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9wbmdfdXRpbHMvcG5nX3V0aWxzLmd5cCBiL2NvYmFsdC9yZW5kZXJlci90ZXN0L3BuZ191dGlscy9wbmdfdXRpbHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWIxMmM0Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9yZW5kZXJlci90ZXN0L3BuZ191dGlscy9wbmdfdXRpbHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgVGhpcyB0YXJnZXQgcHJvdmlkZXMgKG5vdCBwcm9kdWN0aW9uIHN1aXRhYmxlKSB1dGlsaXR5IGNvZGUgZm9yIGRlY29kaW5nCi0gICAgICAjIGFuZCBlbmNvZGluZyBQTkcgZmlsZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2FuZGJveGVzIGFuZCB0ZXN0cyBmb3IKLSAgICAgICMgcXVpY2tseSBhbmQgZWFzaWx5IGxvYWRpbmcgaW4gUE5HIGZpbGVzIG9yIHNhdmluZyBQTkcgZmlsZXMgYXMgb3V0cHV0LgotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BuZ191dGlscycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3BuZ19kZWNvZGUuY2MnLAotICAgICAgICAncG5nX2RlY29kZS5oJywKLSAgICAgICAgJ3BuZ19lbmNvZGUuY2MnLAotICAgICAgICAncG5nX2VuY29kZS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyX3RyZWUvcmVuZGVyX3RyZWUuZ3lwOnJlbmRlcl90cmVlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYnBuZy9saWJwbmcuZ3lwOmxpYnBuZycsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncG5nX3V0aWxzX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdwbmdfZGVjb2RlX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJ3BuZ191dGlscycsCi0gICAgICAgICdwbmdfdXRpbHNfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdwbmdfdXRpbHNfY29weV90ZXN0X2RhdGEnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29udGVudF90ZXN0X2lucHV0X2ZpbGVzJzogWwotICAgICAgICAgICdwbmdfYmVuY2htYXJrX2ltYWdlLnBuZycsCi0gICAgICAgICAgJ3BuZ19wcmVtdWx0aXBsaWVkX2FscGhhX3Rlc3RfaW1hZ2UucG5nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ3Rlc3QvcG5nX3V0aWxzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJ10sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9yZW5kZXJlci90ZXN0L3NjZW5lcy9CVUlMRC5nbiBiL2NvYmFsdC9yZW5kZXJlci90ZXN0L3NjZW5lcy9CVUlMRC5nbgppbmRleCBlNDQzYWQyLi40YTg1NGRjIDEwMDY0NAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9zY2VuZXMvQlVJTEQuZ24KKysrIGIvY29iYWx0L3JlbmRlcmVyL3Rlc3Qvc2NlbmVzL0JVSUxELmduCkBAIC00OCw2ICs0OCw4IEBACiB9CiAKIGNvcHkoInNjZW5lc19jb3B5X3Rlc3RfZGF0YSIpIHsKKyAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorCiAgIHNvdXJjZXMgPSBbICJkZW1vX2ltYWdlLnBuZyIgXQogCiAgIG91dHB1dHMgPQpkaWZmIC0tZ2l0IGEvY29iYWx0L3JlbmRlcmVyL3Rlc3Qvc2NlbmVzL3NjZW5lcy5neXAgYi9jb2JhbHQvcmVuZGVyZXIvdGVzdC9zY2VuZXMvc2NlbmVzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZkNmY1Yi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvcmVuZGVyZXIvdGVzdC9zY2VuZXMvc2NlbmVzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgaXMgYSBzYW1wbGUgc2FuZGJveCBhcHBsaWNhdGlvbiBmb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoZSBDb2JhbHQKLSMgcmVuZGVyIHRyZWUvcmVuZGVyZXIgaW50ZXJmYWNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgQ29udGFpbnMgY29kZSB0byBidWlsZCBhIGRlbW9uc3RyYXRpb24gc2NlbmUgdXNlZCB3aXRoaW4gYmVuY2htYXJraW5nCi0gICAgICAjIGNvZGUgYWxvbmcgd2l0aCB0aGUgc2FuZGJveCBhcHBsaWNhdGlvbiBjb2RlLiAgSXMgdXNlZnVsIGluIGdlbmVyYWwKLSAgICAgICMgd2hlcmV2ZXIgYW4gaW50ZXJlc3RpbmcgZGVtbyByZW5kZXJfdHJlZSBpcyByZXF1aXJlZC4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzY2VuZXMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbGxfc2NlbmVzX2NvbWJpbmVkX3NjZW5lLmNjJywKLSAgICAgICAgJ2FsbF9zY2VuZXNfY29tYmluZWRfc2NlbmUuaCcsCi0gICAgICAgICdncm93aW5nX3JlY3Rfc2NlbmUuY2MnLAotICAgICAgICAnZ3Jvd2luZ19yZWN0X3NjZW5lLmgnLAotICAgICAgICAnaW1hZ2Vfd3JhcF9zY2VuZS5jYycsCi0gICAgICAgICdpbWFnZV93cmFwX3NjZW5lLmgnLAotICAgICAgICAnbWFycXVlZV9zY2VuZS5jYycsCi0gICAgICAgICdtYXJxdWVlX3NjZW5lLmgnLAotICAgICAgICAnc2NhbGluZ190ZXh0X3NjZW5lLmNjJywKLSAgICAgICAgJ3NjYWxpbmdfdGV4dF9zY2VuZS5oJywKLSAgICAgICAgJ3NjZW5lX2hlbHBlcnMuY2MnLAotICAgICAgICAnc2NlbmVfaGVscGVycy5oJywKLSAgICAgICAgJ3NwaW5uaW5nX3Nwcml0ZXNfc2NlbmUuY2MnLAotICAgICAgICAnc3Bpbm5pbmdfc3ByaXRlc19zY2VuZS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyX3RyZWUvcmVuZGVyX3RyZWUuZ3lwOnJlbmRlcl90cmVlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9yZW5kZXJlci90ZXN0L3BuZ191dGlscy9wbmdfdXRpbHMuZ3lwOnBuZ191dGlscycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuZ3lwOnRyYWNlX2V2ZW50JywKLSAgICAgICAgJ3NjZW5lc19jb3B5X3Rlc3RfZGF0YScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NjZW5lc19jb3B5X3Rlc3RfZGF0YScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJ2RlbW9faW1hZ2UucG5nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ3Rlc3Qvc2NlbmVzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJ10sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9zYW1wbGVzL3NpbXBsZV9leGFtcGxlL3NpbXBsZV9leGFtcGxlLmd5cCBiL2NvYmFsdC9zYW1wbGVzL3NpbXBsZV9leGFtcGxlL3NpbXBsZV9leGFtcGxlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2MjI2Yy4uMDAwMDAwMAotLS0gYS9jb2JhbHQvc2FtcGxlcy9zaW1wbGVfZXhhbXBsZS9zaW1wbGVfZXhhbXBsZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBpcyBhIHNhbXBsZSBHWVAgZmlsZXMgdGhhdCBzaG93cyB0aGUgY29tbW9uIHBhdHRlcm5zIHRoYXQgc2hvdWxkIGJlIHVzZWQKLSMgdG8gY3JlYXRlIEdZUCBmaWxlcyBpbiBDb2JhbHQuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgIyBJbmRlcGVuZGVudCBjb21wb25lbnRzIHNob3VsZCBiZSBicm9rZW4gaW50byBzZXBhcmF0ZSBhbmQgdGVzdGFibGUKLSAgICAjIGxpYnJhcmllcy4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2ltcGxlX2V4YW1wbGVfbGliJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2ltcGxlX2V4YW1wbGUuY2MnLAotICAgICAgICAnc2ltcGxlX2V4YW1wbGUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgIyBUaGlzIHRhcmdldCBpcyByZXNwb25zaWJsZSBmb3IgY29weWluZyBjb250ZW50IHJlcXVpcmVkIHRvIHJ1bgotICAgICMgc2ltcGxlX2V4YW1wbGUgdG8gKFBST0RVQ1RfRElSKS4gVGhpcyB0YXJnZXQgaXMgb3B0aW9uYWwgYW5kIHNob3VsZAotICAgICMgYmUgYWRkZWQgb25seSBpZiB0aGUgZXhlY3V0YWJsZSBoYXMgY3VzdG9tIGNvbnRlbnQuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NpbXBsZV9leGFtcGxlX2NvbnRlbnQnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAjIEV4ZWN1dGFibGUgc3BlY2lmaWMgY29udGVudCBsb2dpYyBzaG91bGQgYmUgYWRkZWQgaGVyZS4KLSAgICAgICMgLi4uCi0gICAgfSwKLQotICAgICMgQW4gZXhlY3V0YWJsZSB0YXJnZXQgaXMgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIHRoZSBleGVjdXRhYmxlCi0gICAgIyBhbmQgYWxzbyBtYWtpbmcgc3VyZSB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IGRhdGEgbmVlZGVkIHRvIHJ1biB0aGUKLSAgICAjIGV4ZWN1dGFibGUgZnJvbSAoUFJPRFVDVF9ESVIpIHdhcyBjb3BpZWQgb3Zlci4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2ltcGxlX2V4YW1wbGUnLAotICAgICAgIyBVc2luZyAoZmluYWxfZXhlY3V0YWJsZV90eXBlKSBpbnN0ZWFkIG9mIGV4ZWN1dGFibGUgYWxsb3dzIHVzCi0gICAgICAjIHRvIGNvbXBpbGUgdGhlIHRhcmdldCBpbnRvIGEgbGlicmFyeSBvbiBwbGF0Zm9ybXMgdGhhdCBwYWNrYWdlIHRoZQotICAgICAgIyBuYXRpdmUgY29kZSBpbnRvIGEgYnVuZGxlIChleC4gQW5kcm9pZCkuCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgIyBPdmVycmlkZSB0aGUgZGVmYXVsdCBtYWluIHRocmVhZCBzdGFjayBzaXplIGFuZCBzZXQgaXQgdG8gMU1CLgotICAgICAgICAnbWFpbl90aHJlYWRfc3RhY2tfc2l6ZSc6IDEwNDg1NzYsCi0gICAgICB9LAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzaW1wbGVfZXhhbXBsZV9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICdzaW1wbGVfZXhhbXBsZV9jb250ZW50JywKLSAgICAgICAgJ3NpbXBsZV9leGFtcGxlX2xpYicsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICAjIFRoaXMgdGFyZ2V0IHdpbGwgYnVpbGQgc2ltcGxlX2V4YW1wbGUgYW5kIGRlcGxveSB0aGUgcmVxdWlyZWQgZGF0YQotICAgICMgKGV4ZWN1dGFibGUgKyBjb250ZW50KSB0byBhIHBsYXRmb3JtIHNwZWNpZmljIGxvY2F0aW9uIG5lZWRlZCB0byBydW4KLSAgICAjIGV4ZWN1dGFibGUgb24gdGhlIHRhcmdldCBwbGF0Zm9ybS4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2ltcGxlX2V4YW1wbGVfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3NpbXBsZV9leGFtcGxlJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3NpbXBsZV9leGFtcGxlJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICAgICMgVGhpcyB0YXJnZXQgd2lsbCBjcmVhdGUgYSB0ZXN0IGZvciBzaW1wbGVfZXhhbXBsZS4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2ltcGxlX2V4YW1wbGVfdGVzdCcsCi0gICAgICAjIFVzaW5nIChndGVzdF90YXJnZXRfdHlwZSkgaW5zdGVhZCBvZiBleGVjdXRhYmxlIGFsbG93cyB1cyB0byBjb21waWxlCi0gICAgICAjIHRoZSB0YXJnZXQgaW50byBhIGxpYnJhcnkgb24gcGxhdGZvcm1zIHRoYXQgcGFja2FnZSB0aGUgbmF0aXZlIGNvZGUKLSAgICAgICMgaW50byBhIGJ1bmRsZSAoZXguIEFuZHJvaWQpLgotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzaW1wbGVfZXhhbXBsZV90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdzaW1wbGVfZXhhbXBsZV9saWInLAotICAgICAgICAnc2ltcGxlX2V4YW1wbGVfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgIyBUaGlzIHRhcmdldCBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBuZWVkZWQgaWYgdGVzdHMgYXJlIHVzaW5nCi0gICAgIyBleHRlcm5hbCBkYXRhLgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzaW1wbGVfZXhhbXBsZV9jb3B5X3Rlc3RfZGF0YScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJ3Rlc3RkYXRhJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ2NvYmFsdC9zYW1wbGVzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgIyBUaGlzIHRhcmdldCB3aWxsIGRlcGxveSB0aGUgdGVzdCBhbmQgaXRzIGRhdGEgdG8gYSBwbGF0Zm9ybSBzcGVjaWZpYwotICAgICMgbG9jYXRpb24gbmVlZGVkIHRvIHJ1biB0aGUgdGVzdCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzaW1wbGVfZXhhbXBsZV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdzaW1wbGVfZXhhbXBsZV90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3NpbXBsZV9leGFtcGxlX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC9CVUlMRC5nbiBiL2NvYmFsdC9zY3JpcHQvQlVJTEQuZ24KaW5kZXggNDc0NjI1Mi4uZGYxOTZlNiAxMDA2NDQKLS0tIGEvY29iYWx0L3NjcmlwdC9CVUlMRC5nbgorKysgYi9jb2JhbHQvc2NyaXB0L0JVSUxELmduCkBAIC0yMCw2ICsyMCw3IEBACiAgICAgImNhbGxiYWNrX2Z1bmN0aW9uLmgiLAogICAgICJjYWxsYmFja19pbnRlcmZhY2VfdHJhaXRzLmgiLAogICAgICJkYXRhX3ZpZXcuaCIsCisgICAgImVudmlyb25tZW50X3NldHRpbmdzLmNjIiwKICAgICAiZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIsCiAgICAgImVycm9yX3JlcG9ydC5oIiwKICAgICAiZXhjZXB0aW9uX21lc3NhZ2UuY2MiLApAQCAtNTksNiArNjAsNyBAQAogICAgICIvL2NvYmFsdC9iYXNlIiwKICAgICAiLy9uYiIsCiAgICAgIi8vc3RhcmJvYXJkOnN0YXJib2FyZF9oZWFkZXJzX29ubHkiLAorICAgICIvL3VybCIsCiAgIF0KIH0KIApAQCAtNzEsNiArNzMsNyBAQAogICBkZXBzID0gWwogICAgICI6c2NyaXB0IiwKICAgICAiLy9iYXNlIiwKKyAgICAiLy9jb2JhbHQvYmFzZSIsCiAgIF0KIH0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwIGIvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzYwY2FhLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9zY3JpcHQvZW5naW5lLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgVGFyZ2V0IHRoYXQgcmVwcmVzZW50cyB0aGUgSmF2YVNjcmlwdCBlbmdpbmUgaW1wbGVtZW50YXRpb24gYW5kIGFuCi0gICAgICAjIGludGVyZmFjZSB0byBjcmVhdGUgYSBuZXcgZW5naW5lIGluc3RhbmNlLgotICAgICAgJ3RhcmdldF9uYW1lJzogJ2VuZ2luZScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2phdmFzY3JpcHRfZW5naW5lLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3Y4Yy92OGMuZ3lwOmVuZ2luZScsIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZW5naW5lX3NoZWxsJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsndjhjL3Y4Yy5neXA6djhjJywgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC9lbmdpbmVfdmFyaWFibGVzLmd5cGkgYi9jb2JhbHQvc2NyaXB0L2VuZ2luZV92YXJpYWJsZXMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAyODQxYi4uMDAwMDAwMAotLS0gYS9jb2JhbHQvc2NyaXB0L2VuZ2luZV92YXJpYWJsZXMuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAndjhjL3Y4Y192YXJpYWJsZXMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmNjIGIvY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTZhNDBjCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5jYwpAQCAtMCwwICsxLDI0IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHNjcmlwdCB7CisKKy8vIHN0YXRpYworY29uc3QgYmFzZTo6TnVsbERlYnVnZ2VySG9va3MgRW52aXJvbm1lbnRTZXR0aW5nczo6bnVsbF9kZWJ1Z2dlcl9ob29rc187CisKK30gIC8vIG5hbWVzcGFjZSBzY3JpcHQKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCBiL2NvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaAppbmRleCBhYTdlNDgzLi4xNWE2ZGQ0IDEwMDY0NAotLS0gYS9jb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgKKysrIGIvY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oCkBAIC0xOCwyMiArMTgsNDEgQEAKICNpbmNsdWRlIDxtZW1vcnk+CiAKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgorI2luY2x1ZGUgImNvYmFsdC9iYXNlL2RlYnVnZ2VyX2hvb2tzLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2Ugc2NyaXB0IHsKIAogLy8gRW52aXJvbm1lbnQgU2V0dGluZ3Mgb2JqZWN0IGFzIGRlc2NyaWJlZCBpbgotLy8gaHR0cHM6Ly93d3cudzMub3JnL2h0bWwvd2cvZHJhZnRzL2h0bWwvbWFzdGVyL3dlYmFwcGFwaXMuaHRtbCNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3QKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3RzCiBjbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzIHsKICBwdWJsaWM6Ci0gIEVudmlyb25tZW50U2V0dGluZ3MoKSB7fQorICBleHBsaWNpdCBFbnZpcm9ubWVudFNldHRpbmdzKAorICAgICAgY29uc3QgYmFzZTo6RGVidWdnZXJIb29rcyYgZGVidWdnZXJfaG9va3MgPSBudWxsX2RlYnVnZ2VyX2hvb2tzXykKKyAgICAgIDogZGVidWdnZXJfaG9va3NfKGRlYnVnZ2VyX2hvb2tzKSB7fQogICB2aXJ0dWFsIH5FbnZpcm9ubWVudFNldHRpbmdzKCkge30KIAorICAvLyBUaGUgQVBJIGJhc2UgVVJMLgorICAvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNhcGktYmFzZS11cmwKKyAgdm9pZCBzZXRfYmFzZV91cmwoY29uc3QgR1VSTCYgdXJsKSB7IGJhc2VfdXJsXyA9IHVybDsgfQorICBjb25zdCBHVVJMJiBiYXNlX3VybCgpIGNvbnN0IHsgcmV0dXJuIGJhc2VfdXJsXzsgfQorCisgIC8vIFRoZSBBUEkgY3JlYXRpb24gVVJMCisgIC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2NvbmNlcHQtZW52aXJvbm1lbnQtY3JlYXRpb24tdXJsCisgIGNvbnN0IEdVUkwmIGNyZWF0aW9uX3VybCgpIGNvbnN0IHsgcmV0dXJuIGJhc2VfdXJsKCk7IH0KKworICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rcygpIGNvbnN0IHsgcmV0dXJuIGRlYnVnZ2VyX2hvb2tzXzsgfQorCiAgcHJvdGVjdGVkOgogICBmcmllbmQgc3RkOjp1bmlxdWVfcHRyPEVudmlyb25tZW50U2V0dGluZ3M+OjpkZWxldGVyX3R5cGU7CiAKICBwcml2YXRlOgogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRW52aXJvbm1lbnRTZXR0aW5ncyk7CisKKyAgc3RhdGljIGNvbnN0IGJhc2U6Ok51bGxEZWJ1Z2dlckhvb2tzIG51bGxfZGVidWdnZXJfaG9va3NfOworICBjb25zdCBiYXNlOjpEZWJ1Z2dlckhvb2tzJiBkZWJ1Z2dlcl9ob29rc187CisgIEdVUkwgYmFzZV91cmxfOwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNjcmlwdApkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwIGIvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzA5ZTIxLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9zY3JpcHQvc2NyaXB0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgSW50ZXJmYWNlcyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIEphdmFTY3JpcHQgZW5naW5lIGFuZCBleHBvc2luZyBvYmplY3RzCi0gICAgICAjIHRvIGJpbmRpbmdzIHRvIEphdmFTY3JpcHQuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnc2NyaXB0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXJyYXlfYnVmZmVyLmgnLAotICAgICAgICAnYXJyYXlfYnVmZmVyX3ZpZXcuaCcsCi0gICAgICAgICdjYWxsX2ZyYW1lLmgnLAotICAgICAgICAnY2FsbGJhY2tfZnVuY3Rpb24uaCcsCi0gICAgICAgICdjYWxsYmFja19pbnRlcmZhY2VfdHJhaXRzLmgnLAotICAgICAgICAnZGF0YV92aWV3LmgnLAotICAgICAgICAnZW52aXJvbm1lbnRfc2V0dGluZ3MuaCcsCi0gICAgICAgICdlcnJvcl9yZXBvcnQuaCcsCi0gICAgICAgICdleGNlcHRpb25fbWVzc2FnZS5jYycsCi0gICAgICAgICdleGNlcHRpb25fbWVzc2FnZS5oJywKLSAgICAgICAgJ2V4ZWN1dGlvbl9zdGF0ZS5jYycsCi0gICAgICAgICdleGVjdXRpb25fc3RhdGUuaCcsCi0gICAgICAgICdmYWtlX2dsb2JhbF9lbnZpcm9ubWVudC5oJywKLSAgICAgICAgJ2Zha2Vfc2NyaXB0X3J1bm5lci5oJywKLSAgICAgICAgJ2dsb2JhbF9lbnZpcm9ubWVudC5oJywKLSAgICAgICAgJ2dsb2JhbF9vYmplY3RfcHJveHkuaCcsCi0gICAgICAgICdqYXZhc2NyaXB0X2VuZ2luZS5oJywKLSAgICAgICAgJ2xvZ2dpbmdfZXhjZXB0aW9uX3N0YXRlLmgnLAotICAgICAgICAncHJvbWlzZS5oJywKLSAgICAgICAgJ3Byb3BlcnR5X2VudW1lcmF0b3IuaCcsCi0gICAgICAgICdzY29wZS5oJywKLSAgICAgICAgJ3NjcmlwdF9kZWJ1Z2dlci5oJywKLSAgICAgICAgJ3NjcmlwdF9leGNlcHRpb24uaCcsCi0gICAgICAgICdzY3JpcHRfcnVubmVyLmNjJywKLSAgICAgICAgJ3NjcmlwdF9ydW5uZXIuaCcsCi0gICAgICAgICdzY3JpcHRfdmFsdWUuaCcsCi0gICAgICAgICdzY3JpcHRfdmFsdWVfZmFjdG9yeS5oJywKLSAgICAgICAgJ3NjcmlwdF92YWx1ZV9mYWN0b3J5X2luc3RhbnRpYXRpb25zLmgnLAotICAgICAgICAnc2VxdWVuY2UuaCcsCi0gICAgICAgICdzb3VyY2VfY29kZS5oJywKLSAgICAgICAgJ3NvdXJjZV9wcm92aWRlci5oJywKLSAgICAgICAgJ3N0YWNrX2ZyYW1lLmNjJywKLSAgICAgICAgJ3N0YWNrX2ZyYW1lLmgnLAotICAgICAgICAndHJhY2VyLmgnLAotICAgICAgICAndHlwZWRfYXJyYXlzLmgnLAotICAgICAgICAndW5pb25fdHlwZS5oJywKLSAgICAgICAgJ3VuaW9uX3R5cGVfaW50ZXJuYWwuaCcsCi0gICAgICAgICd1dGlsL3N0YWNrX3RyYWNlX2hlbHBlcnMuaCcsCi0gICAgICAgICd2YWx1ZV9oYW5kbGUuaCcsCi0gICAgICAgICd3cmFwcGFibGUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvbmIvbmIuZ3lwOm5iJywKLSAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFuZGFsb25lX2phdmFzY3JpcHRfcnVubmVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3RhbmRhbG9uZV9qYXZhc2NyaXB0X3J1bm5lci5jYycsCi0gICAgICAgICdzdGFuZGFsb25lX2phdmFzY3JpcHRfcnVubmVyLmgnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC9zY3JpcHRfdmFsdWVfZmFjdG9yeS5oIGIvY29iYWx0L3NjcmlwdC9zY3JpcHRfdmFsdWVfZmFjdG9yeS5oCmluZGV4IGE3Y2Y1MzIuLmE1ZDU3MWEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zY3JpcHQvc2NyaXB0X3ZhbHVlX2ZhY3RvcnkuaAorKysgYi9jb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZV9mYWN0b3J5LmgKQEAgLTE1LDEyICsxNSwyNyBAQAogI2lmbmRlZiBDT0JBTFRfU0NSSVBUX1NDUklQVF9WQUxVRV9GQUNUT1JZX0hfCiAjZGVmaW5lIENPQkFMVF9TQ1JJUFRfU0NSSVBUX1ZBTFVFX0ZBQ1RPUllfSF8KIAorI2luY2x1ZGUgPG1lbW9yeT4KKworI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9hcnJheV9idWZmZXIuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3Byb21pc2UuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZS5oIgorCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSBzY3JpcHQgewogCit1c2luZyBTZXF1ZW5jZVdyYXBwYWJsZSA9IFNlcXVlbmNlPHNjb3BlZF9yZWZwdHI8V3JhcHBhYmxlPj47Cit1c2luZyBQcm9taXNlU2VxdWVuY2VXcmFwcGFibGUgPSBQcm9taXNlPFNlcXVlbmNlV3JhcHBhYmxlPjsKKwordXNpbmcgUHJvbWlzZVdyYXBwYWJsZSA9IFByb21pc2U8c2NvcGVkX3JlZnB0cjxXcmFwcGFibGU+PjsKK3VzaW5nIEhhbmRsZVByb21pc2VXcmFwcGFibGUgPSBIYW5kbGU8UHJvbWlzZVdyYXBwYWJsZT47Cit1c2luZyBWYWx1ZVByb21pc2VXcmFwcGFibGUgPSBTY3JpcHRWYWx1ZTxQcm9taXNlV3JhcHBhYmxlPjsKKwordXNpbmcgUHJvbWlzZUJvb2wgPSBQcm9taXNlPGJvb2w+OwordXNpbmcgSGFuZGxlUHJvbWlzZUJvb2wgPSBIYW5kbGU8UHJvbWlzZUJvb2w+OwordXNpbmcgVmFsdWVQcm9taXNlQm9vbCA9IFNjcmlwdFZhbHVlPFByb21pc2VCb29sPjsKKwogY2xhc3MgU2NyaXB0VmFsdWVGYWN0b3J5IHsKICBwdWJsaWM6CiAgIHVzaW5nIFdyYXBwYWJsZVByb21pc2UgPSBzY29wZWRfcmVmcHRyPFdyYXBwYWJsZT47CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3N0YW5kYWxvbmVfamF2YXNjcmlwdF9ydW5uZXIuY2MgYi9jb2JhbHQvc2NyaXB0L3N0YW5kYWxvbmVfamF2YXNjcmlwdF9ydW5uZXIuY2MKaW5kZXggOGYyNmIzNi4uZjk0ZTlhMSAxMDA2NDQKLS0tIGEvY29iYWx0L3NjcmlwdC9zdGFuZGFsb25lX2phdmFzY3JpcHRfcnVubmVyLmNjCisrKyBiL2NvYmFsdC9zY3JpcHQvc3RhbmRhbG9uZV9qYXZhc2NyaXB0X3J1bm5lci5jYwpAQCAtMTUsOSArMTUsMTkgQEAKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3N0YW5kYWxvbmVfamF2YXNjcmlwdF9ydW5uZXIuaCIKIAogI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlICJiYXNlL2JpbmQuaCIKICNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfdXRpbC5oIgorI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgorI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAiYmFzZS90YXNrX3J1bm5lci5oIgorI2luY2x1ZGUgImNvYmFsdC9iYXNlL2RlYnVnZ2VyX2hvb2tzLmgiCisjaW5jbHVkZSAiY29iYWx0L2Jhc2Uvc291cmNlX2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc291cmNlX2NvZGUuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy9CVUlMRC5nbiBiL2NvYmFsdC9zY3JpcHQvdjhjL0JVSUxELmduCmluZGV4IGRlMTg3MmMuLjIzMDUxNmEgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zY3JpcHQvdjhjL0JVSUxELmduCisrKyBiL2NvYmFsdC9zY3JpcHQvdjhjL0JVSUxELmduCkBAIC0zNiw3ICszNiw4IEBACiB9CiAKIGNvbmZpZygiY29tbW9uX3B1YmxpY19jb25maWciKSB7Ci0gIGlmICgoY3VycmVudF9jcHUgPT0gImFybTY0IiB8fCBjdXJyZW50X2NwdSA9PSAieDY0IikgJiYgIWlzX21hYykgeworICBpZiAoKGN1cnJlbnRfY3B1ID09ICJhcm02NCIgfHwgY3VycmVudF9jcHUgPT0gIng2NCIpICYmCisgICAgICB2OF9lbmFibGVfcG9pbnRlcl9jb21wcmVzc2lvbl9vdmVycmlkZSkgewogICAgIGRlZmluZXMgPSBbCiAgICAgICAjIGVuYWJsZXMgcG9pbnRlciBjb21wcmVzc2lvbiBvbiA2NCBiaXQgcGxhdGZvcm1zIGZvciBDb2JhbHQuCiAgICAgICAiVjhfQ09NUFJFU1NfUE9JTlRFUlMiLApkaWZmIC0tZ2l0IGEvY29iYWx0L3NjcmlwdC92OGMvY29udmVyc2lvbl9oZWxwZXJzLmNjIGIvY29iYWx0L3NjcmlwdC92OGMvY29udmVyc2lvbl9oZWxwZXJzLmNjCmluZGV4IDRmYTQyZTMuLjA4OTMxYjYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zY3JpcHQvdjhjL2NvbnZlcnNpb25faGVscGVycy5jYworKysgYi9jb2JhbHQvc2NyaXB0L3Y4Yy9jb252ZXJzaW9uX2hlbHBlcnMuY2MKQEAgLTU2LDYgKzU2LDQxIEBACiAgICAgICAgICAgICAgICAgICAgIHY4OjpTdHJpbmc6OlJFUExBQ0VfSU5WQUxJRF9VVEY4KTsKIH0KIAorLy8gSlNWYWx1ZSAtPiBzdGQ6OnZlY3Rvcjx1aW50OF90Pgordm9pZCBGcm9tSlNWYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsCisgICAgICAgICAgICAgICAgIGludCBjb252ZXJzaW9uX2ZsYWdzLCBFeGNlcHRpb25TdGF0ZSogZXhjZXB0aW9uX3N0YXRlLAorICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1aW50OF90Piogb3V0X3ZlY3RvcikgeworICBEQ0hFQ0tfRVEoY29udmVyc2lvbl9mbGFncyAmIH5rQ29udmVyc2lvbkZsYWdzU3RyaW5nLCAwKQorICAgICAgPDwgIlVuZXhwZWN0ZWQgY29udmVyc2lvbiBmbGFncyBmb3VuZDogIjsKKworICBpZiAodmFsdWUtPklzTnVsbCgpICYmCisgICAgICAoY29udmVyc2lvbl9mbGFncyAmIGtDb252ZXJzaW9uRmxhZ1RyZWF0TnVsbEFzRW1wdHlTdHJpbmcpKSB7CisgICAgKm91dF92ZWN0b3IgPSB7fTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAodmFsdWUtPklzVW5kZWZpbmVkKCkgJiYKKyAgICAgIChjb252ZXJzaW9uX2ZsYWdzICYga0NvbnZlcnNpb25GbGFnVHJlYXRVbmRlZmluZWRBc0VtcHR5U3RyaW5nKSkgeworICAgICpvdXRfdmVjdG9yID0ge307CisgICAgcmV0dXJuOworICB9CisKKyAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaXNvbGF0ZS0+R2V0Q3VycmVudENvbnRleHQoKTsKKyAgdjg6Ok1heWJlTG9jYWw8djg6OlN0cmluZz4gbWF5YmVfc3RyaW5nID0gdmFsdWUtPlRvU3RyaW5nKGNvbnRleHQpOworICB2ODo6TG9jYWw8djg6OlN0cmluZz4gc3RyaW5nOworICBpZiAoIW1heWJlX3N0cmluZy5Ub0xvY2FsKCZzdHJpbmcpKSB7CisgICAgZXhjZXB0aW9uX3N0YXRlLT5TZXRTaW1wbGVFeGNlcHRpb24oa0NvbnZlcnRUb1N0cmluZ0ZhaWxlZCk7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gUmVzaXplIHRoZSBvdXRwdXQgc3RyaW5nIHRvIHRoZSBVVEYtOCBlc3RpbWF0ZWQgc2l6ZS4KKyAgaW50IGxlbmd0aCA9IHN0cmluZy0+VXRmOExlbmd0aChpc29sYXRlKTsKKworICBvdXRfdmVjdG9yLT5yZXNpemUobGVuZ3RoKTsKKyAgRENIRUNLKG91dF92ZWN0b3ItPnNpemUoKSA9PSBsZW5ndGgpOworICBzdHJpbmctPldyaXRlT25lQnl0ZShpc29sYXRlLCBvdXRfdmVjdG9yLT5kYXRhKCksIDAsIGxlbmd0aCk7Cit9CisKIC8vIFZhbHVlSGFuZGxlIC0+IEpTVmFsdWUKIHZvaWQgVG9KU1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLAogICAgICAgICAgICAgICAgY29uc3QgVmFsdWVIYW5kbGVIb2xkZXIqIHZhbHVlX2hhbmRsZV9ob2xkZXIsCmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy9jb252ZXJzaW9uX2hlbHBlcnMuaCBiL2NvYmFsdC9zY3JpcHQvdjhjL2NvbnZlcnNpb25faGVscGVycy5oCmluZGV4IGI1NjczZWEuLmQ4M2MyM2YgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zY3JpcHQvdjhjL2NvbnZlcnNpb25faGVscGVycy5oCisrKyBiL2NvYmFsdC9zY3JpcHQvdjhjL2NvbnZlcnNpb25faGVscGVycy5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCkBAIC0xMTYsNiArMTE3LDExIEBACiAgICpvdXRfdmFsdWUgPSBzdHJpbmc7CiB9CiAKKy8vIEpTVmFsdWUgLT4gc3RkOjp2ZWN0b3I8dWludDhfdD4KK3ZvaWQgRnJvbUpTVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLAorICAgICAgICAgICAgICAgICBpbnQgY29udmVyc2lvbl9mbGFncywgRXhjZXB0aW9uU3RhdGUqIGV4Y2VwdGlvbl9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8dWludDhfdD4qIG91dF92ZWN0b3IpOworCiAvLyBiYXNlOjpUb2tlbiAtPiBKU1ZhbHVlCiBpbmxpbmUgdm9pZCBUb0pTVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGJhc2U6OlRva2VuJiB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiogb3V0X3ZhbHVlKSB7CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGMuZ3lwIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE4NWFmMC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnKHRhcmdldF9hcmNoPT0iYXJtNjQiIG9yIHRhcmdldF9hcmNoPT0ieDY0IikgYW5kIGRpc2FibGVfdjhfcG9pbnRlcl9jb21wcmVzc2lvbj09MCcsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICMgZW5hYmxlcyBwb2ludGVyIGNvbXByZXNzaW9uIG9uIDY0IGJpdCBwbGF0Zm9ybXMgZm9yIENvYmFsdC4KLSAgICAgICAgICAgICdWOF9DT01QUkVTU19QT0lOVEVSUycsCi0gICAgICAgICAgICAnVjhfMzFCSVRfU01JU19PTl82NEJJVF9BUkNIJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1Y4X0NPTVBSRVNTX1BPSU5URVJTJywKLSAgICAgICAgICAgICAgICAnVjhfMzFCSVRfU01JU19PTl82NEJJVF9BUkNIJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2VuZ2luZScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2FsZ29yaXRobV9oZWxwZXJzLmNjJywKLSAgICAgICAgJ2FsZ29yaXRobV9oZWxwZXJzLmgnLAotICAgICAgICAnY2FsbGJhY2tfZnVuY3Rpb25fY29udmVyc2lvbi5oJywKLSAgICAgICAgJ2NvYmFsdF9wbGF0Zm9ybS5jYycsCi0gICAgICAgICdjb2JhbHRfcGxhdGZvcm0uaCcsCi0gICAgICAgICdjb21tb25fdjhjX2JpbmRpbmdzX2NvZGUuY2MnLAotICAgICAgICAnY29tbW9uX3Y4Y19iaW5kaW5nc19jb2RlLmgnLAotICAgICAgICAnY29udmVyc2lvbl9oZWxwZXJzLmNjJywKLSAgICAgICAgJ2NvbnZlcnNpb25faGVscGVycy5oJywKLSAgICAgICAgJ2VudHJ5X3Njb3BlLmgnLAotICAgICAgICAnaW50ZXJmYWNlX2RhdGEuaCcsCi0gICAgICAgICdpc29sYXRlX2ZlbGxvd3NoaXAuY2MnLAotICAgICAgICAnaXNvbGF0ZV9mZWxsb3dzaGlwLmgnLAotICAgICAgICAnbmF0aXZlX3Byb21pc2UuaCcsCi0gICAgICAgICdzY29wZWRfcGVyc2lzdGVudC5oJywKLSAgICAgICAgJ3N0YWNrX3RyYWNlX2hlbHBlcnMuY2MnLAotICAgICAgICAnc3dpdGNoZXMuY2MnLAotICAgICAgICAnc3dpdGNoZXMuaCcsCi0gICAgICAgICd0eXBlX3RyYWl0cy5oJywKLSAgICAgICAgJ3VuaW9uX3R5cGVfY29udmVyc2lvbl9mb3J3YXJkLmgnLAotICAgICAgICAndW5pb25fdHlwZV9jb252ZXJzaW9uX2ltcGwuaCcsCi0gICAgICAgICd2OGNfYXJyYXlfYnVmZmVyLmNjJywKLSAgICAgICAgJ3Y4Y19hcnJheV9idWZmZXIuaCcsCi0gICAgICAgICd2OGNfYXJyYXlfYnVmZmVyX3ZpZXcuY2MnLAotICAgICAgICAndjhjX2FycmF5X2J1ZmZlcl92aWV3LmgnLAotICAgICAgICAndjhjX2NhbGxiYWNrX2Z1bmN0aW9uLmgnLAotICAgICAgICAndjhjX2NhbGxiYWNrX2ludGVyZmFjZS5jYycsCi0gICAgICAgICd2OGNfY2FsbGJhY2tfaW50ZXJmYWNlLmgnLAotICAgICAgICAndjhjX2NhbGxiYWNrX2ludGVyZmFjZV9ob2xkZXIuaCcsCi0gICAgICAgICd2OGNfZGF0YV92aWV3LmNjJywKLSAgICAgICAgJ3Y4Y19kYXRhX3ZpZXcuaCcsCi0gICAgICAgICd2OGNfZW5naW5lLmNjJywKLSAgICAgICAgJ3Y4Y19lbmdpbmUuaCcsCi0gICAgICAgICd2OGNfZXhjZXB0aW9uX3N0YXRlLmNjJywKLSAgICAgICAgJ3Y4Y19leGNlcHRpb25fc3RhdGUuaCcsCi0gICAgICAgICd2OGNfZ2xvYmFsX2Vudmlyb25tZW50LmNjJywKLSAgICAgICAgJ3Y4Y19nbG9iYWxfZW52aXJvbm1lbnQuaCcsCi0gICAgICAgICd2OGNfaGVhcF90cmFjZXIuY2MnLAotICAgICAgICAndjhjX2hlYXBfdHJhY2VyLmgnLAotICAgICAgICAndjhjX3Byb3BlcnR5X2VudW1lcmF0b3IuaCcsCi0gICAgICAgICd2OGNfc2NyaXB0X2RlYnVnZ2VyLmNjJywKLSAgICAgICAgJ3Y4Y19zY3JpcHRfZGVidWdnZXIuaCcsCi0gICAgICAgICd2OGNfc2NyaXB0X3ZhbHVlX2ZhY3RvcnkuY2MnLAotICAgICAgICAndjhjX3NjcmlwdF92YWx1ZV9mYWN0b3J5LmgnLAotICAgICAgICAndjhjX3NvdXJjZV9jb2RlLmNjJywKLSAgICAgICAgJ3Y4Y19zb3VyY2VfY29kZS5oJywKLSAgICAgICAgJ3Y4Y190cmFjaW5nX2NvbnRyb2xsZXIuY2MnLAotICAgICAgICAndjhjX3RyYWNpbmdfY29udHJvbGxlci5oJywKLSAgICAgICAgJ3Y4Y190eXBlZF9hcnJheXMuY2MnLAotICAgICAgICAndjhjX3R5cGVkX2FycmF5cy5oJywKLSAgICAgICAgJ3Y4Y191c2VyX29iamVjdF9ob2xkZXIuaCcsCi0gICAgICAgICd2OGNfdmFsdWVfaGFuZGxlLmNjJywKLSAgICAgICAgJ3Y4Y192YWx1ZV9oYW5kbGUuaCcsCi0gICAgICAgICd2OGNfd3JhcHBlcl9oYW5kbGUuaCcsCi0gICAgICAgICd3cmFwcGVyX2ZhY3RvcnkuY2MnLAotICAgICAgICAnd3JhcHBlcl9mYWN0b3J5LmgnLAotICAgICAgICAnd3JhcHBlcl9wcml2YXRlLmNjJywKLSAgICAgICAgJ3dyYXBwZXJfcHJpdmF0ZS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5neXA6Y29uZmlndXJhdGlvbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c2NyaXB0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Y4L3Y4Lmd5cDp2OCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OC92OC5neXA6djhfbGlicGxhdGZvcm0nLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvdjgvdjguZ3lwOnY4X2Jhc2Vfd2l0aG91dF9jb21waWxlcicsCi0gICAgICAgICdlbWJlZF92OGNfcmVzb3VyY2VzX2FzX2hlYWRlcl9maWxlcycsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdFTkdJTkVfU1VQUE9SVFNfSU5UNjQnLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnRU5HSU5FX1NVUFBPUlRTX0lOREVYRURfREVMRVRFUlMnLAotICAgICAgICAgICdFTkdJTkVfU1VQUE9SVFNfSU5UNjQnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBTdGFuZGFsb25lIHNoZWxsIGV4ZWN1dGFibGUgZm9yIFY4IHdpdGhpbiBDb2JhbHQuCi0gICAgICAndGFyZ2V0X25hbWUnOiAndjhjJywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Y4Yy5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzplbmdpbmUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c3RhbmRhbG9uZV9qYXZhc2NyaXB0X3J1bm5lcicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OC92OC5neXA6djgnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvdjgvdjguZ3lwOnY4X2Jhc2Vfd2l0aG91dF9jb21waWxlcicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OC92OC5neXA6djhfbGlicGxhdGZvcm0nLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBUaGlzIHRhcmdldCB0YWtlcyBzcGVjaWZpZWQgZmlsZXMgYW5kIGVtYmVkcyB0aGVtIGFzIGhlYWRlciBmaWxlcyBmb3IKLSAgICAgICMgaW5jbHVzaW9uIGludG8gdGhlIGJpbmFyeS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdlbWJlZF92OGNfcmVzb3VyY2VzX2FzX2hlYWRlcl9maWxlcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICMgQmVjYXVzZSB3ZSBnZW5lcmF0ZSBhIGhlYWRlciwgd2UgbXVzdCBzZXQgdGhlIGhhcmRfZGVwZW5kZW5jeSBmbGFnLgotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnc2NyaXB0X3BhdGgnOiAnPChERVBUSCkvY29iYWx0L2J1aWxkL2dlbmVyYXRlX2RhdGFfaGVhZGVyLnB5JywKLSAgICAgICAgJ291dHB1dF9wYXRoJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2NvYmFsdC9zY3JpcHQvdjhjL2VtYmVkZGVkX3Jlc291cmNlcy5oJywKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9mZXRjaC9lbWJlZGRlZF9zY3JpcHRzL2ZldGNoLmpzJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zdHJlYW1zL2VtYmVkZGVkX3NjcmlwdHMvYnl0ZV9sZW5ndGhfcXVldWluZ19zdHJhdGVneS5qcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3RyZWFtcy9lbWJlZGRlZF9zY3JpcHRzL2NvdW50X3F1ZXVpbmdfc3RyYXRlZ3kuanMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N0cmVhbXMvZW1iZWRkZWRfc2NyaXB0cy9yZWFkYWJsZV9zdHJlYW0uanMnLAotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2VtYmVkX3Y4Y19yZXNvdXJjZXNfYXNfaGVhZGVyX2ZpbGVzJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAgICc8QChfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChvdXRwdXRfcGF0aCknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsncHl0aG9uMicsICc8KHNjcmlwdF9wYXRoKScsICdWOGNFbWJlZGRlZFJlc291cmNlcycsICc8KG91dHB1dF9wYXRoKScsICc8QChfc291cmNlcyknIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnRW1iZWRkaW5nIHY4YyByZXNvdXJjZXMgaW4gaW50byBoZWFkZXIgZmlsZSwgIjwob3V0cHV0X3BhdGgpIi4nLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfYXJyYXlfYnVmZmVyLmNjIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjX2FycmF5X2J1ZmZlci5jYwppbmRleCA3ZmU4YjNhLi44MzVjMzIwIDEwMDY0NAotLS0gYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfYXJyYXlfYnVmZmVyLmNjCisrKyBiL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y19hcnJheV9idWZmZXIuY2MKQEAgLTQ3LDYgKzQ3LDcgQEAKICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHY4Yzo6VjhjR2xvYmFsRW52aXJvbm1lbnQqPigKICAgICAgICAgICBnbG9iYWxfZW52aXJvbm1lbnQpOwogICB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IHY4Y19nbG9iYWxfZW52aXJvbm1lbnQtPmlzb2xhdGUoKTsKKyAgRENIRUNLKGlzb2xhdGUpOwogICB2OGM6OkVudHJ5U2NvcGUgZW50cnlfc2NvcGUoaXNvbGF0ZSk7CiAgIHY4OjpMb2NhbDx2ODo6QXJyYXlCdWZmZXI+IGFycmF5X2J1ZmZlciA9CiAgICAgICB2ODo6QXJyYXlCdWZmZXI6Ok5ldyhpc29sYXRlLCBieXRlX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfZ2xvYmFsX2Vudmlyb25tZW50LmNjIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjX2dsb2JhbF9lbnZpcm9ubWVudC5jYwppbmRleCA1MWRhYzQ4Li4xZTc5MGQwIDEwMDY0NAotLS0gYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfZ2xvYmFsX2Vudmlyb25tZW50LmNjCisrKyBiL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y19nbG9iYWxfZW52aXJvbm1lbnQuY2MKQEAgLTE0MCw2ICsxNDAsNyBAQAogICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6c2NyaXB0IiwgIlY4Y0dsb2JhbEVudmlyb25tZW50OjpFdmFsdWF0ZVNjcmlwdCgpIik7CiAgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CiAKKyAgRENIRUNLKGlzb2xhdGVfKTsKICAgRW50cnlTY29wZSBlbnRyeV9zY29wZShpc29sYXRlXyk7CiAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGVfLT5HZXRDdXJyZW50Q29udGV4dCgpOwogICB2ODo6VHJ5Q2F0Y2ggdHJ5X2NhdGNoKGlzb2xhdGVfKTsKZGlmZiAtLWdpdCBhL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y19nbG9iYWxfZW52aXJvbm1lbnQuaCBiL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y19nbG9iYWxfZW52aXJvbm1lbnQuaAppbmRleCAwNWM4YjNkLi5jMGY2YTgxIDEwMDY0NAotLS0gYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfZ2xvYmFsX2Vudmlyb25tZW50LmgKKysrIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjX2dsb2JhbF9lbnZpcm9ubWVudC5oCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgc3RhdGljIGNvbnN0IGludCBrSXNvbGF0ZURhdGFJbmRleCA9IDE7CiAKICAgVEhSRUFEX0NIRUNLRVIodGhyZWFkX2NoZWNrZXJfKTsKLSAgdjg6Oklzb2xhdGUqIGlzb2xhdGVfOworICB2ODo6SXNvbGF0ZSogaXNvbGF0ZV8gPSBudWxscHRyOwogCiAgIC8vIEhvbGQgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgd3JhcHBhYmxlIGluIG9yZGVyIHRvIHByb3Blcmx5CiAgIC8vIGRlc3RydWN0LiAgV2VyZSB3ZSB0byBub3QgZG8gdGhpcywgZmluYWxpemVycyBjYW4gcnVuIGluIHRoZSBvcmRlciAoZS5nLikKZGlmZiAtLWdpdCBhL2NvYmFsdC9zY3JpcHQvdjhjL3Y4Y192YXJpYWJsZXMuZ25pIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjX3ZhcmlhYmxlcy5nbmkKaW5kZXggZDliZGEwYi4uYmNmZmJlZSAxMDA2NDQKLS0tIGEvY29iYWx0L3NjcmlwdC92OGMvdjhjX3ZhcmlhYmxlcy5nbmkKKysrIGIvY29iYWx0L3NjcmlwdC92OGMvdjhjX3ZhcmlhYmxlcy5nbmkKQEAgLTEyLDggKzEyLDYgQEAKICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAotIyBNaWdyYXRlZCBmcm9tIGNvYmFsdC9zY3JpcHQvdjhjL3Y4Y192YXJpYWJsZXMuZ3lwaQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZ2VuZXJhdGVkX2JpbmRpbmdzX3ByZWZpeCA9ICJ2OGMiCiAKIGVuZ2luZV9kZXBlbmRlbmNpZXMgPSBbCmRpZmYgLS1naXQgYS9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfdmFyaWFibGVzLmd5cGkgYi9jb2JhbHQvc2NyaXB0L3Y4Yy92OGNfdmFyaWFibGVzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZmFiNmYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3NjcmlwdC92OGMvdjhjX3ZhcmlhYmxlcy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZ2VuZXJhdGVkX2JpbmRpbmdzX3ByZWZpeCc6ICd2OGMnLAotICAgICdlbmdpbmVfaW5jbHVkZV9kaXJzJzogW10sCi0gICAgJ2VuZ2luZV9kZXBlbmRlbmNpZXMnOiBbCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvdjgvdjguZ3lwOnY4JywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OC92OC5neXA6djhfbGlicGxhdGZvcm0nLAotICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOm5ldCcsCi0gICAgXSwKLSAgICAnZW5naW5lX2RlZmluZXMnOiBbXSwKLSAgICAnZW5naW5lX3RlbXBsYXRlc19kaXInOiBbCi0gICAgICAnPChERVBUSCkvY29iYWx0L2JpbmRpbmdzL3Y4Yy90ZW1wbGF0ZXMnLAotICAgIF0sCi0gICAgJ2VuZ2luZV90ZW1wbGF0ZV9maWxlcyc6IFsKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9jYWxsYmFjay1pbnRlcmZhY2UuY2MudGVtcGxhdGUnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvdGVtcGxhdGVzL2NhbGxiYWNrLWludGVyZmFjZS5oLnRlbXBsYXRlJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9kaWN0aW9uYXJ5LWNvbnZlcnNpb24uY2MudGVtcGxhdGUnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvdGVtcGxhdGVzL2VudW1lcmF0aW9uLWNvbnZlcnNpb24uY2MudGVtcGxhdGUnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvdGVtcGxhdGVzL2dlbmVyYXRlZC10eXBlcy5oLnRlbXBsYXRlJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9pbnRlcmZhY2UuY2MudGVtcGxhdGUnLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvdGVtcGxhdGVzL2ludGVyZmFjZS5oLnRlbXBsYXRlJywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvdjhjL3RlbXBsYXRlcy9tYWNyb3MuY2MudGVtcGxhdGUnLAotICAgIF0sCi0gICAgJ2VuZ2luZV9iaW5kaW5nc19zY3JpcHRzJzogWwotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvY29kZV9nZW5lcmF0b3JfdjhjLnB5JywKLSAgICAgICc8KERFUFRIKS9jb2JhbHQvYmluZGluZ3MvdjhjL2lkbF9jb21waWxlcl92OGMucHknLAotICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvZ2VuZXJhdGVfY29udmVyc2lvbl9oZWFkZXJfdjhjLnB5JywKLSAgICBdLAotICAgICdlbmdpbmVfaWRsX2NvbXBpbGVyJzoKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvaWRsX2NvbXBpbGVyX3Y4Yy5weScsCi0gICAgJ2VuZ2luZV9jb252ZXJzaW9uX2hlYWRlcl9nZW5lcmF0b3Jfc2NyaXB0JzoKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iaW5kaW5ncy92OGMvZ2VuZXJhdGVfY29udmVyc2lvbl9oZWFkZXJfdjhjLnB5JywKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3MvY29kZWxhYnMvY29iYWx0X2V4dGVuc2lvbnMvY29kZWxhYi5tZCBiL2NvYmFsdC9zaXRlL2RvY3MvY29kZWxhYnMvY29iYWx0X2V4dGVuc2lvbnMvY29kZWxhYi5tZAppbmRleCA3NmVkYTMxLi5jMzU4Mzc2IDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL2NvZGVsYWJzL2NvYmFsdF9leHRlbnNpb25zL2NvZGVsYWIubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9jb2RlbGFicy9jb2JhbHRfZXh0ZW5zaW9ucy9jb2RlbGFiLm1kCkBAIC03MTUsNyArNzE1LDcgQEAKIHBsYXRmb3JtIGFuZCB0aGVuIHJ1biB0aGUgZXhlY3V0YWJsZSB0byBydW4gdGhlIHRlc3RzLgogCiBgYGAKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgbGludXgteDY0eDExCiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCBsaW51eC14NjR4MTEKIGBgYAogCiBgYGAKZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3MvZGV2ZWxvcG1lbnQvc2V0dXAtYW5kcm9pZC5tZCBiL2NvYmFsdC9zaXRlL2RvY3MvZGV2ZWxvcG1lbnQvc2V0dXAtYW5kcm9pZC5tZAppbmRleCA2MjFmNWYzLi5jNGIyNDFhIDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL2RldmVsb3BtZW50L3NldHVwLWFuZHJvaWQubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9kZXZlbG9wbWVudC9zZXR1cC1hbmRyb2lkLm1kCkBAIC0zOSw3ICszOSw3IEBACiAgICAgYGBgCiAKIDEuICBEb3dubG9hZCBhbmQgaW5zdGFsbCBbQW5kcm9pZCBTdHVkaW9dKGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby8pLgotMS4gIFJ1biBgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgYW5kcm9pZC14ODZgIHRvIGNvbmZpZ3VyZSB0aGUgQ29iYWx0IGJ1aWxkLAorMS4gIFJ1biBgY29iYWx0L2J1aWxkL2duLnB5IC1wIGFuZHJvaWQteDg2YCB0byBjb25maWd1cmUgdGhlIENvYmFsdCBidWlsZCwKICAgICB3aGljaCBhbHNvIGluc3RhbGxzIHRoZSBTREsgYW5kIE5ESy4gKFRoaXMgc3RlcCB3aWxsIGhhdmUgdG8gYmUgcmVwZWF0ZWQKICAgICB3aXRoICdhbmRyb2lkLWFybScgb3IgJ2FuZHJvaWQtYXJtNjQnIHRvIHRhcmdldCB0aG9zZSBhcmNoaXRlY3R1cmVzLikgVGhlCiAgICAgU0RLIGFuZCBOREsgd2lsbCBiZSBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQgaW50byBhIGBzdGFyYm9hcmQtdG9vbGNoYWluc2AKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAqICAgRWRpdCAiQW5kcm9pZCBTREsgbG9jYXRpb24iIGFuZCBzZXQgdGhlIHBhdGggdG86CiAgICAgYCRIT01FL3N0YXJib2FyZC10b29sY2hhaW5zL0FuZHJvaWRTZGtgCiAgICAgICAqICBOT1RFOiBXZSB1c2UgdGhlIHNhbWUgU0RLIGZvciB0aGUgSURFIGFuZCB0aGUgZ3lwL25pbmphIGJ1aWxkLiBUaGlzCi0gICAgICAgICBkaXJlY3Rvcnkgd2lsbCBhbHJlYWR5IGV4aXN0IHNpbmNlIHlvdSd2ZSBhbHJlYWR5IHJ1biBneXBfY29iYWx0IGZvciBhbgorICAgICAgICAgZGlyZWN0b3J5IHdpbGwgYWxyZWFkeSBleGlzdCBzaW5jZSB5b3UndmUgYWxyZWFkeSBydW4gZ24gZ2VuIGZvciBhbgogICAgICAgICAgYW5kcm9pZCB0YXJnZXQsIHNvIHlvdSdsbCBzZWUgYSB3YXJuaW5nIGluIHRoZSBzZXR1cCB3aXphcmQgdGhhdCBhbiBTREsKICAgICAgICAgIHdhcyBkZXRlY3RlZCwgd2hpY2ggaXMgb2theS4KICAgICAgICAgKiAgU2VsZWN0IGJvdGggYEFuZHJvaWQgU0RLYCBhbmQgYEFuZHJvaWQgU0RLIFBsYXRmb3JtYCAod2hhdGV2ZXIKQEAgLTE4MCw3ICsxODAsNyBAQAogCiAjIyBCdWlsZGluZy9ydW5uaW5nL2RlYnVnZ2luZyAoQW5kcm9pZCBTdHVkaW8gSURFKQogCi0xLiAgTWFudWFsbHkgcnVuIGBjb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCBhbmRyb2lkLXg4NmAgaW4gYSBzaGVsbC4gKFlvdSBzaG91bGQKKzEuICBNYW51YWxseSBydW4gYGNvYmFsdC9idWlsZC9nbi5weSAtcCBhbmRyb2lkLXg4NmAgaW4gYSBzaGVsbC4gKFlvdSBzaG91bGQKICAgICBkbyB0aGlzIGFmdGVyIGVhY2ggdGltZSB5b3Ugc3luYyB5b3VyIHJlcG8pCiAxLiAgRnJvbSB0aGUgaW5pdGlhbCBzZXR1cCBhYm92ZSwgeW91IHNob3VsZCBoYXZlIG9wZW5lZCB0aGUgQW5kcm9pZCBTdHVkaW8KICAgICBwcm9qZWN0IGNoZWNrZWQgaW4gYXQgYHN0YXJib2FyZC9hbmRyb2lkL2Fwa2AuCmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2RldmVsb3BtZW50L3NldHVwLWxpbnV4Lm1kIGIvY29iYWx0L3NpdGUvZG9jcy9kZXZlbG9wbWVudC9zZXR1cC1saW51eC5tZAppbmRleCAyMWQwN2U1Li5iZTlmNTY0IDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL2RldmVsb3BtZW50L3NldHVwLWxpbnV4Lm1kCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvZGV2ZWxvcG1lbnQvc2V0dXAtbGludXgubWQKQEAgLTEwMiwxOCArMTAyLDE1IEBACiAgICAgZGlyZWN0b3J5LiBZb3UgbXVzdCBzcGVjaWZ5IGEgcGxhdGZvcm0gd2hlbiBydW5uaW5nIHRoaXMgY29tbWFuZC4gT24gVWJ1bnR1CiAgICAgTGludXgsIHRoZSBjYW5vbmljYWwgcGxhdGZvcm0gaXMgYGxpbnV4LXg2NHgxMWAuCiAKLSAgICBZb3UgY2FuIGFsc28gdXNlIHRoZSBgLUNgIGNvbW1hbmQtbGluZSBmbGFnIHRvIHNwZWNpZnkgYSBgYnVpbGRfdHlwZWAuCisgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgYC1jYCBjb21tYW5kLWxpbmUgZmxhZyB0byBzcGVjaWZ5IGEgYGJ1aWxkX3R5cGVgLgogICAgIFZhbGlkIGJ1aWxkIHR5cGVzIGFyZSBgZGVidWdgLCBgZGV2ZWxgLCBgcWFgLCBhbmQgYGdvbGRgLiBJZiB5b3UKICAgICBzcGVjaWZ5IGEgYnVpbGQgdHlwZSwgdGhlIGNvbW1hbmQgZmluaXNoZXMgc29vbmVyLiBPdGhlcndpc2UsIGFsbCB0eXBlcwogICAgIGFyZSBidWlsdC4KIAogICAgIGBgYAotICAgICQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgWy1DIDxidWlsZF90eXBlPl0gPHBsYXRmb3JtPgorICAgICQgcHl0aG9uIGNvYmFsdC9idWlsZC9nbi5weSBbLWMgPGJ1aWxkX3R5cGU+XSAtcCA8cGxhdGZvcm0+CiAgICAgYGBgCiAKLSAgICA8YXNpZGUgY2xhc3M9Im5vdGUiPjxiPkltcG9ydGFudDo8L2I+IFlvdSBuZWVkIHRvIHJlcnVuIGd5cF9jb2JhbHQgZXZlcnkKLSAgICB0aW1lIGEgY2hhbmdlIGlzIG1hZGUgdG8gYSBgLmd5cGAgZmlsZS48L2FzaWRlPgotCiAxLiAgQ29tcGlsZSB0aGUgY29kZSBmcm9tIHRoZSBgY29iYWx0L2AgZGlyZWN0b3J5OgogCiAgICAgYGBgCkBAIC0xMjgsMTAgKzEyNSw3IEBACiAgICAgICAgIGd1aWRlLCBpdCBjb250YWlucyBhIGBmYW1pbHkgbmFtZWAgKGxpa2UgYGxpbnV4YCkgYW5kIGEKICAgICAgICAgYGJpbmFyeSB2YXJpYW50YCAobGlrZSBgeDY0eDExYCksIHNlcGFyYXRlZCBieSBhIGh5cGhlbi4KICAgICAxLiAgYDxidWlsZF90eXBlPmAgaXMgdGhlIGJ1aWxkIHlvdSBhcmUgY29tcGlsaW5nLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCi0gICAgICAgIGBkZWJ1Z2AsIGBkZXZlbGAsIGBxYWAsIGFuZCBgZ29sZGAuIFRoZXNlIHZhbHVlcyBhcmUgYWxzbyBkZXNjcmliZWQgaW4KLSAgICAgICAgdGhlIFN0YXJib2FyZCBwb3J0aW5nIGd1aWRlIHVuZGVyIHRoZSBbcmVxdWlyZWQgZmlsZSBtb2RpZmljYXRpb25zXSgKLSAgICAgICAgL3N0YXJib2FyZC9wb3J0aW5nLmh0bWwjNC1tYWtlLXJlcXVpcmVkLWZpbGUtbW9kaWZpY2F0aW9ucykgZm9yIHRoZQotICAgICAgICBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAgZmlsZS4KKyAgICAgICAgYGRlYnVnYCwgYGRldmVsYCwgYHFhYCwgYW5kIGBnb2xkYC4KICAgICAxLiAgYDx0YXJnZXRfbmFtZT5gIGlzIHRoZSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBjb21waWxlZCBjb2RlIGFuZCBpdCBpcwogICAgICAgICB1c2VkIHRvIHJ1biB0aGUgY29kZSBjb21waWxlZCBpbiB0aGlzIHN0ZXAuIFRoZSBtb3N0IGNvbW1vbiBuYW1lcyBhcmUKICAgICAgICAgYGNvYmFsdGAsIGBucGxiYCwgYW5kIGBhbGxgOgpkaWZmIC0tZ2l0IGEvY29iYWx0L3NpdGUvZG9jcy9kZXZlbG9wbWVudC9zZXR1cC1yYXNwaS5tZCBiL2NvYmFsdC9zaXRlL2RvY3MvZGV2ZWxvcG1lbnQvc2V0dXAtcmFzcGkubWQKaW5kZXggOGJhZGMwYS4uNTk3MzYxYiAxMDA2NDQKLS0tIGEvY29iYWx0L3NpdGUvZG9jcy9kZXZlbG9wbWVudC9zZXR1cC1yYXNwaS5tZAorKysgYi9jb2JhbHQvc2l0ZS9kb2NzL2RldmVsb3BtZW50L3NldHVwLXJhc3BpLm1kCkBAIC04Myw3ICs4Myw3IEBACiAgICAgZm9sbG93aW5nIGNvbW1hbmQ6CiAKICAgICBgYGAKLSAgICAkIGNvYmFsdC9idWlsZC9neXBfY29iYWx0IHJhc3BpLTIKKyAgICAkIGNvYmFsdC9idWlsZC9nbi5weSAtcCByYXNwaS0yCiAgICAgYGBgCiAKIDEuICBDb21waWxlIHRoZSBjb2RlIGZyb20gdGhlIGBjb2JhbHQvYCBkaXJlY3Rvcnk6CmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9jb2JhbHQvZG9jL3dlYmFwaV9leHRlbnNpb24ubWQgYi9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9jb2JhbHQvZG9jL3dlYmFwaV9leHRlbnNpb24ubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYzdiNDIuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3NpdGUvZG9jcy9nZW4vY29iYWx0L2RvYy93ZWJhcGlfZXh0ZW5zaW9uLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS0tLQotbGF5b3V0OiBkb2MKLXRpdGxlOiAiQ29iYWx0IFdlYiBFeHRlbnNpb24gU3VwcG9ydCIKLS0tLQotIyBDb2JhbHQgV2ViIEV4dGVuc2lvbiBTdXBwb3J0Ci0KLSMjIERlcHJlY2F0aW9uCi1QbGVhc2Ugbm90ZSB0aGF0IFdlYiBFeHRlbnNpb24gc3VwcG9ydCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIFBsYXRmb3JtCi1TZXJ2aWNlcyAoY29iYWx0L2RvYy9wbGF0Zm9ybV9zZXJ2aWNlcy5tZCkgaW5zdGVhZC4gVGhpcyBpcyBhbiBlZmZvcnQgdG8gbW92ZQotYXdheSBmcm9tIGluamVjdGluZyBjb21waWxlLXRpbWUgbW9kdWxlcyBpbnRvIHRoZSBDb2JhbHQgbGF5ZXIgaW4gZmF2b3Igb2YKLXVzaW5nIHJ1bnRpbWUgZXh0ZW5zaW9ucyBwcm92aWRlZCBieSB0aGUgU3RhcmJvYXJkIGxheWVyLgotCi0jIyBPdmVydmlldwotQ29iYWx0IHByb3ZpZGVzIGEgZmFjaWxpdHkgZm9yIGV4dGVuZGluZyB0aGUgSmF2YVNjcmlwdCBXZWIgQVBJLiAgVGhpcyBhbGxvd3MKLWN1c3RvbSB3ZWIgYXBwcyBydW5uaW5nIG9uIENvYmFsdCB0byBtYWtlIGNhbGxzIHRocm91Z2ggYSBjdXN0b20gQVBJIHRvCi1DKysgQ29iYWx0IGNvZGUgZGVmaW5lZCBwZXIgU3RhcmJvYXJkIHBsYXRmb3JtLiAgVGhpcyBjYW4gYWxsb3cgZm9yIGNsb3NlcgotaW50ZWdyYXRpb24gYmV0d2VlbiB0aGUgd2ViIGFwcCBob3N0ZWQgYnkgQ29iYWx0IGFuZCB0aGUgc3lzdGVtIG9uIHdoaWNoIHRoYXQKLXdlYiBhcHAgaXMgcnVubmluZy4KLQotVGhlIENvYmFsdCBXZWIgRXh0ZW5zaW9uIHN1cHBvcnQgd2lsbCBhbGxvdyB5b3UgdG8gYXR0YWNoIGFuIGluc3RhbmNlIG9mIGEKLWN1c3RvbSBjbGFzcyB0byB0aGUgSmF2YVNjcmlwdCBgd2luZG93YCBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlCi1yZWZlcmVuY2VkIGZyb20gYSB3ZWIgYXBwIGluIEphdmFTY3JpcHQgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgotCi1gYGAKLXdpbmRvdy5teUludGVyZmFjZS5SdW5NeUZ1bmN0aW9uKCkKLWBgYAotCi0jIyBCdWlsZC1sZXZlbCBtb2RpZmljYXRpb25zCi0KLUluIG9yZGVyIHRvIGV4dGVuZCB0aGUgaW50ZXJmYWNlLCBvbmUgc2hvdWxkIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHRoZQotYHZhcmlhYmxlc2Agc2VjdGlvbiBvZiBgPHBsYXRmb3JtLWRpcmVjdG9yeT4vY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaWAgKHNlZQotU3RhcmJvYXJkJ3MKLVtBcHBsaWNhdGlvbiBDdXN0b21pemF0aW9uXSguLi8uLi9zdGFyYm9hcmQvZG9jL2J1aWxkaW5nLm1kI2FwcGxpY2F0aW9uLWN1c3RvbWl6YXRpb24pCi1mb3IgbW9yZSBpbmZvcm1hdGlvbik6Ci0KLTEuIGBjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzYAotICAgVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mIFtJREwgZmlsZXNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9JREwpCi0gICB0aGF0IGRlZmluZSB0aGUgY29sbGVjdGlvbiBvZiBuZXcgaW50ZXJmYWNlcyBpbnRyb2R1Y2VkIGJ5IHlvdXIgZXh0ZW5zaW9ucy4KLSAgIE9uZSBvZiB0aGVzZSBuZXcgaW50ZXJmYWNlcyBjYW4gYmUgc2VsZWN0ZWQgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgYHdpbmRvd2AKLSAgIGVsZW1lbnQgKHNlZSAzLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ3lwX3RhcmdldGAgZm9yIGluZm9ybWF0aW9uIG9uIGhvdwotICAgdG8gZG8gdGhpcykuICBFYWNoIElETCBmaWxlIGxpc3RlZCBoZXJlIHNpbXVsdGFuZW91c2x5IGRlZmluZXMgYSBKYXZhU2NyaXB0Ci0gICBhbmQgYSBDKysgaW50ZXJmYWNlLiAgRm9yIGVhY2ggSURMIGZpbGUsIHlvdSB3aWxsIGJlIGV4cGVjdGVkIHRvIGFsc28gcHJvdmlkZQotICAgYSBoZWFkZXIgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgdGhhdCByZS1kZWNsYXJlcyAoaW4gQysrKSB0aGUgaW50ZXJmYWNlCi0gICBkZWNsYXJlZCBpbiB0aGUgSURMIGZpbGUsIGFzIHdlbGwgYXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYWxsIHRoZSBtZXRob2RzCi0gICB3aXRoaW4gaXQgKGVpdGhlciBpbmxpbmUgaW4gdGhlIGhlYWRlciBmaWxlIG9yIGluIGEgY29ycmVzcG9uZGluZyBzb3VyY2UKLSAgIGZpbGUpLgotMi4gYGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzYAotICAgVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIGZpbGVzIHRoYXQgbWF5IHJlc3VsdCBpbiBhdXRvbWF0aWMgaGVhZGVyIGZpbGUKLSAgIGdlbmVyYXRpb24gdGhhdCBtaWdodCBiZSByZWZlcmVuY2VkIGZyb20gb3RoZXIgQysrIGNvZGUuICBBbiBleGFtcGxlIG9mCi0gICB0aGlzIGlzIHRoZSBkZWZpbml0aW9uIG9mIGBlbnVtYHMgdGhhdCBtYXkgdGhlbiBiZSByZWZlcmVuY2VkIGFzIHR5cGVzIGluCi0gICBhIGZpbGUgZnJvbSAxLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fc291cmNlX2lkbF9maWxlc2AuCi0zLiBgY29iYWx0X3dlYmFwaV9leHRlbnNpb25fZ3lwX3RhcmdldGAKLSAgIFRoaXMgaXMgdGhlIGd5cCB0YXJnZXQgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIElETCBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25zLAotICAgYXMgd2VsbCBhcyBhbnkgbmVjZXNzYXJ5IGF1eGlsaWFyeSBjb2RlLiAgSXQgd2lsbCBiZSBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgb2YKLSAgIFticm93c2VyL2NvYmFsdC5neXA6Y29iYWx0XSguLi9icm93c2VyL2NvYmFsdC5neXApLiAgSXQgaXMgZXhwZWN0ZWQgdGhhdAotICAgdGhpcyB0YXJnZXQgd2lsbCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBkZWZpbmVkIGluCi0gICBbYnJvd3Nlci93ZWJhcGlfZXh0ZW5zaW9uLmhdKC4uL2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oKSwgd2hpY2ggbGV0IHlvdQotICAgbmFtZSB0aGUgaW5qZWN0ZWQgd2luZG93IHByb3BlcnR5LCBhbmQgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIGl0Ci0gICAoaS5lLiB0byBsZXQgeW91IHNlbGVjdCB3aGljaCBJREwgb2JqZWN0IGlzIHRoZSAiZW50cnkgcG9pbnQiKS4KLQotVGhlIGZpcnN0IHR3byBsaXN0cyBnZXQgaW5jbHVkZWQgYnkKLVtjb2JhbHQvYnJvd3Nlci9icm93c2VyX2JpbmRpbmdzX2dlbi5neXBdKGNvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cCksCi13aGVyZSB5b3UgY2FuIGxvb2sgdG8gc2VlIG1hbnkgZXhhbXBsZXMgb2YgZXhpc3RpbmcgQ29iYWx0IElETCBmaWxlcyB0aGF0IGRlZmluZQotdGhlIFdlYiBBUEkgYXZhaWxhYmxlIHRocm91Z2ggQ29iYWx0LiAgRm9yIGVhY2ggb2YgdGhlc2UsIHlvdSBjYW4gYWxzbwotZXhhbWluZSB0aGVpciBjb3JyZXNwb25kaW5nIGAuaGAgZmlsZXMgYW5kIGluIG1vc3QgY2FzZXMgdGhlaXIgYC5jY2AgZmlsZXMgYXMKLXdlbGwuCi0KLUFuIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlc2UgdmFyaWFibGVzIGlzIGF2YWlsYWJsZSBhdAotW3N0YXJib2FyZC9zaGFyZWQvdGVzdF93ZWJhcGlfZXh0ZW5zaW9uL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi5neXBpXSguLi8uLi9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi90ZXN0X3dlYmFwaV9leHRlbnNpb24uZ3lwaSksIHdoaWNoCi1jb250YWlucyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGRlZmluaXRpb25zOgotCi1gYGAKLSdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzJzogWwotICAnbXlfbmV3X2ludGVyZmFjZS5pZGwnCi1dLAotJ2NvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzJzogWwotICAnbXlfbmV3X2VudW0uaWRsJwotXSwKLSdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9neXBfdGFyZ2V0JzoKLSAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvdGVzdF93ZWJhcGlfZXh0ZW5zaW9uL3dlYmFwaV9leHRlbnNpb24uZ3lwOmNvYmFsdF90ZXN0X3dlYmFwaV9leHRlbnNpb24nLAotYGBgCi0KLSMjIEltcGxlbWVudGluZyB0aGUgW3dlYmFwaV9leHRlbnNpb24uaF0oLi4vYnJvd3Nlci93ZWJhcGlfZXh0ZW5zaW9uLmgpIGludGVyZmFjZQotCi1BcyBkaXNjdXNzZWQgYWJvdmUgaW4gMy4gYGNvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2d5cF90YXJnZXRgLCB5b3UgbXVzdCBwcm92aWRlCi1hbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHdvIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbgotW2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oXSguLi9icm93c2VyL3dlYmFwaV9leHRlbnNpb24uaCkuCi0KLSMjIyBgR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKClgCi1Zb3Ugc2hvdWxkIGltcGxlbWVudCBgR2V0V2ViQVBJRXh0ZW5zaW9uT2JqZWN0UHJvcGVydHlOYW1lKClgIHRvIHJldHVybiB0aGUgbmFtZQotb2YgdGhlIGluamVjdGVkIGB3aW5kb3dgIHByb3BlcnR5LiAgRm9yIGV4YW1wbGUsIGluIHRoZSBleGFtcGxlIGZyb20gdGhlCi1iZWdpbm5pbmcgb2YgdGhpcyBkb2N1bWVudCwgYHdpbmRvdy5teUludGVyZmFjZS5SdW5NeUZ1bmN0aW9uKClgLCB3ZSB3b3VsZCBoYXZlCi10aGUgZnVuY3Rpb24gcmV0dXJuIGBzdGQ6OnN0cmluZygibXlJbnRlcmZhY2UiKWAuICBJZiB5b3UgcmV0dXJuIGBudWxsb3B0YCBmcm9tCi10aGlzIGZ1bmN0aW9uLCBpdCBpcyBhc3N1bWVkIHRoYXQgeW91IGRvIG5vdCB3aXNoIHRvIGV4dGVuZCB0aGUgd2ViIGludGVyZmFjZS4KLQotTm90ZSB0aGF0IHlvdSBzaG91bGQgTk9UIG5hbWUgeW91ciBgd2luZG93YCBwcm9wZXJ0eSB0aGUgc2FtZSBhcyB5b3VyIGNsYXNzIG5hbWUKLWFzIGRlc2NyaWJlZCBpbiB0aGUgSURMIGZpbGUsIGl0IHdpbGwgcmVzdWx0IGluIGEgbmFtZSBjb2xsaXNpb24gaW4gdGhlCi1KYXZhU2NyaXB0IGVudmlyb25tZW50LgotCi0jIyMgYENyZWF0ZVdlYkFQSUV4dGVuc2lvbk9iamVjdCgpYAotVGhpcyBmdW5jdGlvbiBzaG91bGQgaW5zdGFudGlhdGUgYW5kIHJldHVybiB0aGUgb2JqZWN0IHRvIGJlIGFjY2Vzc2VkIGZyb20KLWB3aW5kb3dgLiAgVGhlIG9iamVjdCBtdXN0IGJlIGRlZmluZWQgYnkgYW4gSURMIGZpbGUuCi0KLSMjIERlYnVnZ2luZwotWW91IG1heSBmaW5kIHRoZSBDb2JhbHQgZGVidWcgY29uc29sZSB0byBiZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLUlETCBhZGRpdGlvbnMgYW5kIGNoYW5nZXMuICBJbiBpdCwgeW91IGNhbiBlbnRlciBhcmJpdHJhcnkgSmF2YVNjcmlwdCBhbmQgdGhlbgotaGl0IGVudGVyIHRvIGV4ZWN1dGUgaXQuICBZb3UgY2FuIHRvZ2dsZSBpdCBvcGVuIGJ5IGhpdHRpbmcgZWl0aGVyIENUUkwrTyBvcgotRjEsIGFuZCB5b3UgbWF5IGhhdmUgdG8gaGl0IHRoZSBrZXkgdHdpY2UgdG8gc2tpcCBwYXN0IHRoZSBIVUQgbW9kZS4KLQotSGVyZSBpcyBhbiBleGFtcGxlIG9mIGFuIGV4YW1wbGUgaW50ZXJmYWNlIGJlaW5nIGV4ZXJjaXNlZCB0aHJvdWdoIHRoZQotZGVidWcgY29uc29sZToKLQotIVtEZWJ1ZyBjb25zb2xlIHdlYiBleHRlbnNpb24gZXhhbXBsZV0ocmVzb3VyY2VzL3dlYmFwaV9leHRlbnNpb25fZXhhbXBsZS5qcGcpCmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvYnVpbGQvZG9jL21pZ3JhdGlvbl9jaGFuZ2VzLm1kIGIvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2J1aWxkL2RvYy9taWdyYXRpb25fY2hhbmdlcy5tZAppbmRleCA4M2YzZGZhLi5kMDBlM2QwIDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvYnVpbGQvZG9jL21pZ3JhdGlvbl9jaGFuZ2VzLm1kCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9idWlsZC9kb2MvbWlncmF0aW9uX2NoYW5nZXMubWQKQEAgLTI1LDYgKzI1LDcgQEAKIGBzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZWAgKDAvMSkgICAgICAgICAgIHwgYHNiX2lzX2V2ZXJncmVlbl9jb21wYXRpYmxlYCAodHJ1ZS9mYWxzZSkgICAgICAgICAgICB8IGAvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaWAKIGBzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmRgICgwLzEpIHwgYHNiX2V2ZXJncmVlbl9jb21wYXRpYmxlX3VzZV9saWJ1bndpbmRgICh0cnVlL2ZhbHNlKSB8IGAvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaWAKIGBzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saXRlYCAoMC8xKSAgICAgIHwgYHNiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2VuYWJsZV9saXRlYCAodHJ1ZS9mYWxzZSkgICB8IGAvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaWAKK2Bpbl9hcHBfZGlhbGAgKDAvMSkgICAgICAgICAgICAgICAgICAgICAgIHwgYGVuYWJsZV9pbl9hcHBfZGlhbGAgKHRydWUvZmFsc2UpICAgICAgICAgICAgICAgICAgICB8IGAvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaWAKIGBzYl9kaXNhYmxlX2NwcDE0X2F1ZGl0YCAgICAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiBgc2JfZGlzYWJsZV9taWNyb3Bob25lX2lkbGAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogYHN0YXJib2FyZF9wYXRoYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvY3Jhc2hfaGFuZGxlcnMubWQgYi9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL2NyYXNoX2hhbmRsZXJzLm1kCmluZGV4IDJmMzA2ODMuLmI3YmQ2ZTIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvY3Jhc2hfaGFuZGxlcnMubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2RvYy9jcmFzaF9oYW5kbGVycy5tZApAQCAtMzYsNyArMzYsNyBAQAogfQogYGBgCiAKLTMuIENhbGxpbmcgdGhlIGB0aGlyZF9wYXJ0eTo6Y3Jhc2hwYWQ6OndyYXBwZXI6Okluc3RhbGxDcmFzaHBhZEhhbmRsZXIoKWAgaG9vaworMy4gQ2FsbGluZyB0aGUgYHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcihib29sIHN0YXJ0X2F0X2NyYXNoKWAgaG9vawogZGlyZWN0bHkgYWZ0ZXIgaW5zdGFsbGluZyBzeXN0ZW0gY3Jhc2ggaGFuZGxlcnMuIE9uIGxpbnV4LCBmb3IgZXhhbXBsZSwgdGhpcwogY291bGQgbG9vayBsaWtlOgogCkBAIC00OCw3ICs0OCw3IEBACiAgIHN0YXJib2FyZDo6c2hhcmVkOjpzaWduYWw6Okluc3RhbGxDcmFzaFNpZ25hbEhhbmRsZXJzKCk7CiAgIHN0YXJib2FyZDo6c2hhcmVkOjpzaWduYWw6Okluc3RhbGxTdXNwZW5kU2lnbmFsSGFuZGxlcnMoKTsKIAotICB0aGlyZF9wYXJ0eTo6Y3Jhc2hwYWQ6OndyYXBwZXI6Okluc3RhbGxDcmFzaHBhZEhhbmRsZXIoKTsKKyAgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKHRydWUpOwogCiAgIGludCByZXN1bHQgPSBhcHBsaWNhdGlvbi5SdW4oYXJnYywgYXJndik7CiAgIC4uLgpkaWZmIC0tZ2l0IGEvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2RvYy9ldmVyZ3JlZW4vY29iYWx0X2V2ZXJncmVlbl9vdmVydmlldy5tZCBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fb3ZlcnZpZXcubWQKaW5kZXggOGQ3NzBjYS4uMDEwNmNkNSAxMDA2NDQKLS0tIGEvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2RvYy9ldmVyZ3JlZW4vY29iYWx0X2V2ZXJncmVlbl9vdmVydmlldy5tZAorKysgYi9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL2V2ZXJncmVlbi9jb2JhbHRfZXZlcmdyZWVuX292ZXJ2aWV3Lm1kCkBAIC0xMDUsOCArMTA1LDggQEAKIENvYmFsdCBFdmVyZ3JlZW4gaXMgYnVpbHQgYnkgYSBzZXBhcmF0ZSBneXAgcGxhdGZvcm0gdXNpbmcgdGhlIEdvb2dsZSB0b29sY2hhaW46CiAKIGBgYAotJCBjb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCBldmVyZ3JlZW4tYXJtLXNvZnRmcC1zYnZlcnNpb24tMTIKLSQgbmluamEgLUMgb3V0L2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMl9xYSBjb2JhbHQKKyQgY29iYWx0L2J1aWxkL2duLnB5IC1wIGV2ZXJncmVlbi1hcm0tc29mdGZwIC1jIHFhCiskIG5pbmphIC1DIG91dC9ldmVyZ3JlZW4tYXJtLXNvZnRmcF9xYSBjb2JhbHQKIGBgYAogCiBXaGljaCBwcm9kdWNlcyBhIHNoYXJlZCBsaWJyYXJ5IGBsaWJjb2JhbHQuc29gIHRhcmdldGVkIGZvciBzcGVjaWZpYwpAQCAtMTE5LDcgKzExOSw3IEBACiBgbGliY29iYWx0LnNvYCwgYW5kIHRoZSBgY3Jhc2hwYWRfaGFuZGxlcmAgd2hpY2ggaGFuZGxlcyBjcmFzaGVzLgogCiBgYGAKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgPHBhcnRuZXJfcG9ydF9uYW1lPgorJCBjb2JhbHQvYnVpbGQvZ24ucHkgLXAgPHBhcnRuZXJfcG9ydF9uYW1lPiAtYyBxYQogJCBuaW5qYSAtQyBvdXQvPHBhcnRuZXJfcG9ydF9uYW1lPl9xYSBsb2FkZXJfYXBwIGNyYXNocGFkX2hhbmRsZXIKIGBgYAogCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogMS4gQnVpbGQgdGhlIGBjcmFzaHBhZF9kYXRhYmFzZV91dGlsYCB0YXJnZXQgYW5kIGRlcGxveSBpdCBvbnRvIHRoZSBkZXZpY2UuCiBgYGAKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgPHBhcnRuZXJfcG9ydF9uYW1lPgorJCBjb2JhbHQvYnVpbGQvZ24ucHkgLXAgPHBhcnRuZXJfcG9ydF9uYW1lPiAtYyBxYQogJCBuaW5qYSAtQyBvdXQvPHBhcnRuZXJfcG9ydF9uYW1lPl9xYSBjcmFzaHBhZF9kYXRhYmFzZV91dGlsCiBgYGAKIDIuIFJlbW92ZSB0aGUgZXhpc3Rpbmcgc3RhdGUgZm9yIGNyYXNocGFkIGFzIGl0IHRocm90dGxlcyB1cGxvYWRzIHRvIDEgcGVyIGhvdXI6CmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL2V2ZXJncmVlbi9jb2JhbHRfZXZlcmdyZWVuX3JlZmVyZW5jZV9wb3J0X3Jhc3BpMi5tZCBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCmluZGV4IDc3NjNjYzIuLjU0OWZlNzAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCkBAIC0xOCwxMiArMTgsMTIgQEAKIAogIyMgQnVpbGQgdGhlIGxvYWRlciBhcHAgKG5ldyBlbnRyeSBwb2ludCkKICQgY2QgY29iYWx0L3NyYwotJCBjb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCAtdiByYXNwaS0yLXNidmVyc2lvbi0xMiAtQyBxYQotJCBuaW5qYSAtQyBvdXQvcmFzcGktMi1zYnZlcnNpb24tMTJfcWEgbG9hZGVyX2FwcCBjcmFzaHBhZF9oYW5kbGVyCiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCByYXNwaS0yIC1jIHFhCiskIG5pbmphIC1DIG91dC9yYXNwaS0yX3FhIGxvYWRlcl9hcHAgY3Jhc2hwYWRfaGFuZGxlcgogCiAjIyBDcmVhdGUgcGFja2FnZSBkaXJlY3RvcnkgZm9yIENvYmFsdCBFdmVyZ3JlZW4KICQgZXhwb3J0IENPRUdfUEFUSD1jb2VnCi0kIGNwIG91dC9yYXNwaS0yLXNidmVyc2lvbi0xMl9xYS9sb2FkZXJfYXBwICRDT0VHX1BBVEgKKyQgY3Agb3V0L3Jhc3BpLTJfcWEvbG9hZGVyX2FwcCAkQ09FR19QQVRICiAKICMjIENyZWF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciB0aGUgaW5pdGlhbCBpbnN0YWxsYXRpb24KIFsyLXNsb3QgY29uZmlndXJhdGlvbl0KQEAgLTUwLDEyICs1MCwxMiBAQAogYGBgCiAjIyBCdWlsZCBDb2JhbHQgY29yZSBsb2NhbGx5CiAkIGNkIGNvYmFsdC9zcmMKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyIC1DIHFhCi0kIG5pbmphIC1DIG91dC9ldmVyZ3JlZW4tYXJtLWhhcmRmcC1zYnZlcnNpb24tMTJfcWEgY29iYWx0CiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCBldmVyZ3JlZW4tYXJtLWhhcmRmcCAtYyBxYQorJCBuaW5qYSAtQyBvdXQvZXZlcmdyZWVuLWFybS1oYXJkZnBfcWEgY29iYWx0CiAKICMjIENvcHkgdGhlIGdlbmVyYXRlZCBmaWxlcyB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkgZm9yIENvYmFsdCBFdmVyZ3JlZW4KLSQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMl9xYS9saWIgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KLSQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMl9xYS9jb250ZW50ICAgJENPRUdfUEFUSC9jb250ZW50L2FwcC9jb2JhbHQvCiskIGNwIC1yIG91dC9ldmVyZ3JlZW4tYXJtLWhhcmRmcF9xYS9saWIgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KKyQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwX3FhL2NvbnRlbnQgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KIAogIyMgQ3JlYXRlIGEgZmlsZSBuYW1lZCBtYW5pZmVzdC5qc29uIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50LCBhbmQgcHV0IGl0IHVuZGVyICRDT0VHX1BBVEgvY29udGVudC9hcHAvY29iYWx0LwogJCBjYXQgPiAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC9tYW5pZmVzdC5qc29uIDw8RU9GCmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS5wbmcgYi9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS5wbmcKaW5kZXggYjJiNGNiNC4uZjA0NzczMCAxMDA2NDQKLS0tIGEvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2RvYy9yZXNvdXJjZXMvZGVjb2RlX3RvX3RleHR1cmVfc2VxdWVuY2UucG5nCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvcmVzb3VyY2VzL2RlY29kZV90b190ZXh0dXJlX3NlcXVlbmNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS50eHQgYi9jb2JhbHQvc2l0ZS9kb2NzL2dlbi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS50eHQKaW5kZXggYWM1MTI3Yi4uMTQ5YjQwNCAxMDA2NDQKLS0tIGEvY29iYWx0L3NpdGUvZG9jcy9nZW4vc3RhcmJvYXJkL2RvYy9yZXNvdXJjZXMvZGVjb2RlX3RvX3RleHR1cmVfc2VxdWVuY2UudHh0CisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvZ2VuL3N0YXJib2FyZC9kb2MvcmVzb3VyY2VzL2RlY29kZV90b190ZXh0dXJlX3NlcXVlbmNlLnR4dApAQCAtMSwxMCArMSwxMCBAQAogcGFydGljaXBhbnQgQXBwbGljYXRpb24gKGUuZy4gQ29iYWx0KSBhcyBhIFtmaWxsY29sb3I9IiNmZmQwZDAiXQogcGFydGljaXBhbnQgU3RhcmJvYXJkIGFzIHMgW2ZpbGxjb2xvcj0iI2QwZDBmZiJdCiAKLWEtPnM6IFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLCAuLi4pCi1zLS0+YTogcmV0dXJucyBib29sCi1Ob3RlIG92ZXIgYTogSWYgU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKClcbnJldHVybnMgdHJ1ZS4uLiBbZmlsbGNvbG9yPSJ3aGl0ZSJdCi1hLT5zOiBTYlBsYXllckNyZWF0ZSguLi4sIGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUsIC4uLikKK2EtPnM6IFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZShjcmVhdGlvbl9wYXJhbS0+b3V0cHV0X21vZGUgPSBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLCAuLi4pCitzLS0+YTogcmV0dXJucyBTYlBsYXllck91dHB1dE1vZGUKK05vdGUgb3ZlciBhOiBJZiBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoKVxucmV0dXJucyBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlIFtmaWxsY29sb3I9IndoaXRlIl0KK2EtPnM6IFNiUGxheWVyQ3JlYXRlKC4uLiwgY3JlYXRpb25fcGFyYW0tPm91dHB1dF9tb2RlID0ga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZSwgLi4uKQogTm90ZSBvdmVyIGE6IFN0YXJ0IG9mIHJlbmRlciBsb29wIFtmaWxsY29sb3I9IiNmZmZmZDAiXQogYS0+czogU2JQbGF5ZXJHZXRDdXJyZW50RnJhbWUoKQogcy0tPmE6IHJldHVybnMgU2JEZWNvZGVUYXJnZXQKZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzLzExL2NvbmZpZ3VyYXRpb24ubWQgYi9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy8xMS9jb25maWd1cmF0aW9uLm1kCmluZGV4IGY2MzJmNTUuLmYzZjUyMmUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzLzExL2NvbmZpZ3VyYXRpb24ubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9yZWZlcmVuY2Uvc3RhcmJvYXJkL21vZHVsZXMvMTEvY29uZmlndXJhdGlvbi5tZApAQCAtMTQ5LDE0ICsxNDksNyBAQAogCiAjIyMgU0JfUkVTVFJJQ1QgIyMjCiAKLUluY2x1ZGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFjcm8gaXMgc2V0IGJ5IEdZUCBpbgotc3RhcmJvYXJkX2Jhc2VfdGFyZ2V0Lmd5cGkgYW5kIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbGwgdGFyZ2V0cyBhbmQKLWFsbCBjb25maWd1cmF0aW9ucy5BZnRlciB2ZXJzaW9uIDEyLCB3ZSBzdGFydCB0byB1c2UgcnVudGltZSBjb25zdGFudHMgaW5zdGVhZAotb2YgbWFjcm9zIGZvciBjZXJ0YWluIHBsYXRmb3JtIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucy4gVGhpcyBmaWxlIHN1YnN0aXR1dGVzCi1jb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBjb25zdGFudHMgc28gd2UgZG9uJ3QKLXJlZmVyZW5jZSB0aGVzZSBjb25zdGFudHMgd2hlbiB0aGV5IGFyZW4ndCBkZWZpbmVkLk1ha2VzIGEgcG9pbnRlci10eXBlZAotcGFyYW1ldGVyIHJlc3RyaWN0ZWQgc28gdGhhdCB0aGUgY29tcGlsZXIgY2FuIG1ha2UgY2VydGFpbiBvcHRpbWl6YXRpb25zIGJlY2F1c2UKLWl0IGtub3dzIHRoZSBwb2ludGVycyBhcmUgdW5pcXVlLgorSW5jbHVkZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KIAogIyMjIFNCX1NJWkVfT0YoREFUQVRZUEUpICMjIwogCmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy8xMi9jb25maWd1cmF0aW9uLm1kIGIvY29iYWx0L3NpdGUvZG9jcy9yZWZlcmVuY2Uvc3RhcmJvYXJkL21vZHVsZXMvMTIvY29uZmlndXJhdGlvbi5tZAppbmRleCA1YzM1MWVmLi4wMzhkOGZmIDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy8xMi9jb25maWd1cmF0aW9uLm1kCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzLzEyL2NvbmZpZ3VyYXRpb24ubWQKQEAgLTEzOSwxMSArMTM5LDcgQEAKIAogIyMjIFNCX1JFU1RSSUNUICMjIwogCi1JbmNsdWRlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIG1hY3JvIGlzIHNldCBieSBHWVAgaW4KLXN0YXJib2FyZF9iYXNlX3RhcmdldC5neXBpIGFuZCBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYWxsIHRhcmdldHMgYW5kCi1hbGwgY29uZmlndXJhdGlvbnMuTWFrZXMgYSBwb2ludGVyLXR5cGVkIHBhcmFtZXRlciByZXN0cmljdGVkIHNvIHRoYXQgdGhlCi1jb21waWxlciBjYW4gbWFrZSBjZXJ0YWluIG9wdGltaXphdGlvbnMgYmVjYXVzZSBpdCBrbm93cyB0aGUgcG9pbnRlcnMgYXJlCi11bmlxdWUuCitJbmNsdWRlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLgogCiAjIyMgU0JfU0laRV9PRihEQVRBVFlQRSkgIyMjCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzLzEzL2NvbmZpZ3VyYXRpb24ubWQgYi9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy8xMy9jb25maWd1cmF0aW9uLm1kCmluZGV4IDRiMmY4ZGIuLjQ3NmUzMTMgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzLzEzL2NvbmZpZ3VyYXRpb24ubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9yZWZlcmVuY2Uvc3RhcmJvYXJkL21vZHVsZXMvMTMvY29uZmlndXJhdGlvbi5tZApAQCAtMTM0LDEyICsxMzQsNyBAQAogCiAjIyMgU0JfUkVTVFJJQ1QgIyMjCiAKLUluY2x1ZGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFjcm8gaXMgc2V0IGJ5IEdZUCBpbgotc3RhcmJvYXJkX2Jhc2VfdGFyZ2V0Lmd5cGkgYW5kIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbGwgdGFyZ2V0cyBhbmQKLWFsbCBjb25maWd1cmF0aW9ucy5NYWtlcyBhIHBvaW50ZXItdHlwZWQgcGFyYW1ldGVyIHJlc3RyaWN0ZWQgc28gdGhhdCB0aGUKLWNvbXBpbGVyIGNhbiBtYWtlIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBiZWNhdXNlIGl0IGtub3dzIHRoZSBwb2ludGVycyBhcmUKLXVuaXF1ZS4KLQorSW5jbHVkZSB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KICMjIyBTQl9TSVpFX09GKERBVEFUWVBFKSAjIyMKIAogRGV0ZXJtaW5lcyBhdCBjb21waWxlLXRpbWUgdGhlIHNpemUgb2YgYSBkYXRhIHR5cGUsIG9yIDAgaWYgdGhlIGRhdGEgdHlwZSB0aGF0CmRpZmYgLS1naXQgYS9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy9jb25maWd1cmF0aW9uLm1kIGIvY29iYWx0L3NpdGUvZG9jcy9yZWZlcmVuY2Uvc3RhcmJvYXJkL21vZHVsZXMvY29uZmlndXJhdGlvbi5tZAppbmRleCA0YjJmOGRiLi4zYmQ3MDY3IDEwMDY0NAotLS0gYS9jb2JhbHQvc2l0ZS9kb2NzL3JlZmVyZW5jZS9zdGFyYm9hcmQvbW9kdWxlcy9jb25maWd1cmF0aW9uLm1kCisrKyBiL2NvYmFsdC9zaXRlL2RvY3MvcmVmZXJlbmNlL3N0YXJib2FyZC9tb2R1bGVzL2NvbmZpZ3VyYXRpb24ubWQKQEAgLTEzNCwxMSArMTM0LDcgQEAKIAogIyMjIFNCX1JFU1RSSUNUICMjIwogCi1JbmNsdWRlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIG1hY3JvIGlzIHNldCBieSBHWVAgaW4KLXN0YXJib2FyZF9iYXNlX3RhcmdldC5neXBpIGFuZCBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYWxsIHRhcmdldHMgYW5kCi1hbGwgY29uZmlndXJhdGlvbnMuTWFrZXMgYSBwb2ludGVyLXR5cGVkIHBhcmFtZXRlciByZXN0cmljdGVkIHNvIHRoYXQgdGhlCi1jb21waWxlciBjYW4gbWFrZSBjZXJ0YWluIG9wdGltaXphdGlvbnMgYmVjYXVzZSBpdCBrbm93cyB0aGUgcG9pbnRlcnMgYXJlCi11bmlxdWUuCitJbmNsdWRlIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLgogCiAjIyMgU0JfU0laRV9PRihEQVRBVFlQRSkgIyMjCiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9zaXRlL2RvY3Mvc3RhcmJvYXJkL3BvcnRpbmcubWQgYi9jb2JhbHQvc2l0ZS9kb2NzL3N0YXJib2FyZC9wb3J0aW5nLm1kCmluZGV4IGM2ZTYzNWEuLmQyNmIzMjcgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zaXRlL2RvY3Mvc3RhcmJvYXJkL3BvcnRpbmcubWQKKysrIGIvY29iYWx0L3NpdGUvZG9jcy9zdGFyYm9hcmQvcG9ydGluZy5tZApAQCAtMTAzLDExICsxMDMsMTEgQEAKIHRoZSBmb2xsb3dpbmcgZmlsZXM6CiAKICogICBgYXRvbWljX3B1YmxpYy5oYAorKiAgIGBCVUlMRC5nbmAKICogICBgY29uZmlndXJhdGlvbl9wdWJsaWMuaGAKLSogICBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAKLSogICBgZ3lwX2NvbmZpZ3VyYXRpb24ucHlgCi0qICAgYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgCi0qICAgYHRocmVhZF90eXBlc19wdWJsaWMuaGAKKyogICBgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbmAKKyogICBgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaWAKKyogICBgdG9vbGNoYWluL0JVSUxELmduYAogCiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgY29weSB0aGUgZmlsZXMgZnJvbSB0aGUgU3R1YiByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sCiBsb2NhdGVkIGF0IGBzdGFyYm9hcmQvc3R1Yi9gIHRvIHlvdXIgYGJpbmFyeS12YXJpYW50YCBkaXJlY3Rvcmllcy4KQEAgLTE2MSw4ICsxNjEsOCBAQAogCiAjIyMgNC4gTWFrZSByZXF1aXJlZCBmaWxlIG1vZGlmaWNhdGlvbnMKIAotVG8gcG9ydCB5b3VyIGNvZGUsIHlvdSBtdXN0IG1ha2UgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcwotdGhhdCB5b3UgY29waWVkIGluIHN0ZXAgMzoKK1RvIHBvcnQgeW91ciBjb2RlLCB5b3UgbXVzdCBhZGQgeW91ciBwbGF0Zm9ybSB0byBgc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3Jtcy5weWAKK3RoZW4gbWFrZSB0aGUgZm9sbG93aW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGZpbGVzIHRoYXQgeW91IGNvcGllZCBpbiBzdGVwIDM6CiAKIAogMS4gICoqYGF0b21pY19wdWJsaWMuaGAqKiAtIEVuc3VyZSB0aGF0IHRoaXMgZmlsZSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlCkBAIC0xNzIsMTM2ICsxNzIsNTMgQEAKICAgICAuLi8uLi9yZWZlcmVuY2Uvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24tcHVibGljLmh0bWwpIGFzIGFwcHJvcHJpYXRlIGZvcgogICAgIHlvdXIgcGxhdGZvcm0uCiAKLTEuICAqKmBneXBfY29uZmlndXJhdGlvbi5weWAqKgotICAgIDEuICBNb2RpZnkgdGhlIGBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpYCBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHBsYXRmb3JtCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3UgZGVmaW5lZCBpbiBzdGVwIDEuIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIHRoYXQKLSAgICAgICAgZnVuY3Rpb24gYXMgaXQgYXBwZWFycyBpbiB0aGUgU3R1YiBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIERlc2t0b3AKLSAgICAgICAgTGludXggcG9ydDoKKzEuICAqKmBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduYCoqCisgICAgMS4gIFVwZGF0ZSB5b3VyIHBsYXRmb3JtIGNvbW1hbmQtbGluZSBmbGFncyBhbmQgbGlicmFyaWVzLiBFbnN1cmUgdGhhdAorICAgICAgICB5b3UgZG8gbm90IGFzc3VtZSBhIHBhcnRpY3VsYXIgd29ya3N0YXRpb24gbGF5b3V0IHNpbmNlIHRoYXQgbGF5b3V0CisgICAgICAgIG1heSB2YXJ5IGZyb20gdXNlciB0byB1c2VyLgogCi0gICAgICAgIDxwcmU+Ci0gICAgICAgICMgU3R1YjoKLSAgICAgICAgZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIFBsYXRmb3JtQ29uZmlnKCc8Yj5zdHViPC9iPicpCi0gICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgotICAgICAgICAgICAgbG9nZ2luZy5jcml0aWNhbChlKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAjIERlc2t0b3AgTGludXgKLSAgICAgICAgZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGd5cF9jb25maWd1cmF0aW9uLlBsYXRmb3JtQ29uZmlnKCc8Yj5saW51eC14NjR4MTE8L2I+JykKLSAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKGUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICA8L3ByZT4KLQotICAgICAgICBOb3RlIHRoYXQgdGhlIHRoaXJkIGxpbmUgaXMgdGhlIG9ubHkgb25lIHRoYXQgaXMgZGlmZmVyZW50LiBUaGUKLSAgICAgICAga2V5IGRpZmZlcmVuY2UgaW4gdGVybXMgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGlzIGNoYW5naW5nIGBzdHViYAotICAgICAgICB0byBgbGludXgteDY0eDExYC4gVGhlIERlc2t0b3AgTGludXggcG9ydCBhbHNvIHVzZXMgYSBzaGFyZWQgY29weQotICAgICAgICBvZiBgZ3lwX2NvbmZpZ3VyYXRpb24ucHlgLCB3aGljaCBpcyB3aHkgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgaXMKLSAgICAgICAgZGlmZmVyZW50LgotCi0gICAgMS4gIEluIHRoZSBgR2V0VmFyaWFibGVzYCBmdW5jdGlvbiwgZW5zdXJlIHRoYXQgdGhlIGBjbGFuZ2AgdmFyaWFibGUKLSAgICAgICAgaXMgc2V0IHRvIGAxYCBpZiB5b3VyIHRvb2xjaGFpbiB1c2VzIGNsYW5nOgotCi0gICAgICAgIDxwcmU+Ci0gICAgICAgIHZhcmlhYmxlcyA9IHN1cGVyKFBsYXRmb3JtQ29uZmlnLCBzZWxmKS5HZXRWYXJpYWJsZXMoY29uZmlndXJhdGlvbikKLSAgICAgICAgPGI+dmFyaWFibGVzLnVwZGF0ZSh7J2NsYW5nJzogMSx9KTwvYj4KLSAgICAgICAgcmV0dXJuIHZhcmlhYmxlcwotICAgICAgICA8L3ByZT4KLQotICAgIDEuICBJbiB0aGUgYEdldEVudmlyb25tZW50VmFyaWFibGVzYCBmdW5jdGlvbiwgc2V0IHRoZXNlIGRpY3Rpb25hcnkgdmFsdWVzCi0gICAgICAgIHRvIHRoZSB0b29sY2hhaW4gYW5hbG9ncyBmb3IgeW91ciBwbGF0Zm9ybS4gTm90ZSB0aGF0ICJ0YXJnZXQgcGxhdGZvcm0iCi0gICAgICAgIHJlZmVycyB0byB0aGUgcGxhdGZvcm0gYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHBvcnQgKGUuZy4gQW5kcm9pZCBUViwKLSAgICAgICAgUmFzcGJlcnJ5IFBpKSBhbmQgImhvc3QgcGxhdGZvcm0iIGlzIHRoZSB3b3Jrc3RhdGlvbiBwbGF0Zm9ybSBydW5uaW5nCi0gICAgICAgIHRoZSBjcm9zcy1jb21waWxlciB0byB0aGUgdGFyZ2V0IChlLmcuIGRlc2t0b3AgTGludXgsIGRlc2t0b3AgV2luZG93cykuCi0gICAgICAgICogICBgQ0NgIC0gdGhlIEMgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uIEV4YW1wbGU6IGBjbGFuZ2AuCi0gICAgICAgICogICBgQ1hYYCAtIHRoZSBDKysgY29tcGlsZXIgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0uCi0gICAgICAgICAgICBFeGFtcGxlOiBgY2xhbmcrK2AuCi0gICAgICAgICogICBgQ0NfSE9TVGAgLSB0aGUgQyBjb21waWxlciBmb3IgdGhlIGhvc3QgcGxhdGZvcm0uIEV4YW1wbGU6IGBjbGFuZ2AuCi0gICAgICAgICogICBgQ1hYX0hPU1RgIC0gdGhlIEMrKyBjb21waWxlciBmb3IgdGhlIGhvc3QgcGxhdGZvcm0uCi0gICAgICAgICAgICBFeGFtcGxlOiBgY2xhbmcrK2AuCi0gICAgICAgICogICBgTERfSE9TVGAgLSB0aGUgQysrIGxpbmtlciBmb3IgdGhlIGhvc3QgcGxhdGZvcm0uCi0gICAgICAgICAgICBFeGFtcGxlOiBgY2xhbmcrK2AuCi0gICAgICAgICogICBgQVJGTEFHU19IT1NUYCAtIEFyY2hpdmVyIGZsYWdzIGZvciB0aGUgaG9zdCBwbGF0Zm9ybS4gVGhlCi0gICAgICAgICAgICBhcmNoaXZlciBpcyB0aGUgdG9vbGNoYWluIHByb2dyYW0gdGhhdCBjcmVhdGVzIHN0YXRpYyBsaWJyYXJpZXMuCi0gICAgICAgICAgICBFeGFtcGxlOiBgcmNzYC4KLSAgICAgICAgKiAgIGBBUlRISU5GTEFHU19IT1NUYCAtIEFyY2hpdmVyIGZsYWdzIGZvciB0aGUgaG9zdCBwbGF0Zm9ybSBmb3IKLSAgICAgICAgICAgIGNyZWF0aW5nICJ0aGluIiBhcmNoaXZlcywgd2hpY2ggYXJlIGZhc3RlciBmb3IgaW50ZXJtZWRpYXRlCi0gICAgICAgICAgICBsaWJyYXJpZXMgdGhhdCBhcmVuJ3QgZm9yIGRpcmVjdCBwdWJsaXNoaW5nLiBFeGFtcGxlOiBgcmNzVGAuCi0KLTEuICAqKmBneXBfY29uZmlndXJhdGlvbi5neXBpYCoqCi0gICAgMS4gIFVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGBkZWZhdWx0X2NvbmZpZ3VyYXRpb25gIHByb3BlcnR5IGFuZCB0aGUga2V5cwotICAgICAgICBpbiB0aGUgYGNvbmZpZ3VyYXRpb25zYCBwcm9wZXJ0eSB0byBiZQotICAgICAgICBgPHBsYXRmb3JtLWNvbmZpZ3VyYXRpb24+XzxidWlsZC10eXBlPmAgd2hlcmU6Ci0gICAgICAgIDEuICBgPHBsYXRmb3JtLWNvbmZpZ3VyYXRpb24+YCBpcyB0aGUgdmFsdWUgdGhhdCB5b3UgZGVmaW5lZCBpbiBzdGVwIDEuCi0gICAgICAgIDEuICBgPGJ1aWxkLXR5cGU+YCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICAgICAgICAgICAqICAgYGRlYnVnYAotICAgICAgICAgICAgKiAgIGBkZXZlbGAKLSAgICAgICAgICAgICogICBgcWFgCi0gICAgICAgICAgICAqICAgYGdvbGRgCi0KLSAgICAgICAgVGhlIGZvbGxvd2luZyBzbmlwcGV0IGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG93cyBob3cgdGhlc2UKLSAgICAgICAgcHJvcGVydGllcyBhcHBlYXIgaW4gdGhlIFN0dWIgaW1wbGVtZW50YXRpb24uIFRoZSBEZXNrdG9wIExpbnV4IHBvcnQKLSAgICAgICAgcmVwbGFjZXMgdGhlIHN0cmluZyBgc3R1YmAgd2l0aCBgbGludXgteDY0eDExYCBldmVyeXdoZXJlIHRoYXQgaXQKLSAgICAgICAgYXBwZWFyczoKLQotICAgICAgICBgYGAKLSAgICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ3N0dWJfZGVidWcnLAotICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICAgICAgICdzdHViX2RlYnVnJzogewotICAgICAgICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3N0dWJfZGV2ZWwnOiB7Ci0gICAgICAgICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnc3R1Yl9xYSc6IHsKLSAgICAgICAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdzdHViX2dvbGQnOiB7Ci0gICAgICAgICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICAgICAgICAgIC4uLgotICAgICAgICB9Ci0gICAgICAgIGBgYAotCi0gICAgMS4gIFVwZGF0ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gdGhlIGB2YXJpYWJsZXNgIGRpY3Rpb25hcnk6Ci0gICAgICAgICogICBgdGFyZ2V0X2FyY2hgIC0gSWRlbnRpZmllcyB5b3VyIGFyY2hpdGVjdHVyZS4gU3VwcG9ydGVkIHZhbHVlcwotICAgICAgICAgICAgYXJlIGBhcm1gLCBgeDY0YCwgYW5kIGB4ODZgLgotICAgICAgICAqICAgYHRhcmdldF9vc2AgLSBTZXQgdG8gYGxpbnV4YCBpZiB5b3VyIHBsYXRmb3JtIGlzIExpbnV4LWJhc2VkLgotICAgICAgICAgICAgT3RoZXJ3aXNlLCByZW1vdmUgdGhpcyB2YXJpYWJsZS4KKzEuICAqKmBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pYCoqCisgICAgMS4gIFVwZGF0ZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiB0aGUgZmlsZSBmcm9tIHRoZWlyIGRlZmF1bHQgaW4KKyAgICAgICAgYHN0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaWAgaWYgbmVjZXNzYXJ5OgogICAgICAgICAqICAgYGdsX3R5cGVgIC0gU2V0IHRvIGBzeXN0ZW1fZ2xlczJgIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5c3RlbSBFR0wKICAgICAgICAgICAgIFwrIEdMRVMyIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSB0byBgbm9uZWAuCi0gICAgICAgICogICBgaW5fYXBwX2RpYWxgIC0gRW5hYmxlcyAob3IgZGlzYWJsZXMpIHRoZSBESUFMIHNlcnZlciB0aGF0IHJ1bnMKLSAgICAgICAgICAgIGluc2lkZSBDb2JhbHQuIChUaGlzIHNlcnZlciBvbmx5IHJ1bnMgd2hlbiBDb2JhbHQgaXMgcnVubmluZy4pCisgICAgICAgICogICBgZW5hYmxlX2luX2FwcF9kaWFsYCAtIEVuYWJsZXMgKG9yIGRpc2FibGVzKSB0aGUgRElBTCBzZXJ2ZXIgdGhhdAorICAgICAgICAgICAgcnVucyBpbnNpZGUgQ29iYWx0LiAoVGhpcyBzZXJ2ZXIgb25seSBydW5zIHdoZW4gQ29iYWx0IGlzIHJ1bm5pbmcuKQogICAgICAgICAgICAgVGhlIFtESUFMIHByb3RvY29sXShodHRwOi8vd3d3LmRpYWwtbXVsdGlzY3JlZW4ub3JnL2hvbWUpIGVuYWJsZXMKICAgICAgICAgICAgIHNlY29uZC1zY3JlZW4gZGV2aWNlcyAobGlrZSB0YWJsZXRzIGFuZCBwaG9uZXMpIHRvIGRpc2NvdmVyLAogICAgICAgICAgICAgbGF1bmNoLCBhbmQgaW50ZXJmYWNlIHdpdGggYXBwbGljYXRpb25zIG9uIGZpcnN0LXNjcmVlbiBkZXZpY2VzCiAgICAgICAgICAgICAobGlrZSB0ZWxldmlzaW9ucywgc2V0LXRvcCBib3hlcywgYW5kIEJsdS1yYXkgcGxheWVycykuCi0gICAgICAgICAgICAqICAgU2V0IHRoaXMgdmFsdWUgdG8gYDBgIGlmIHlvdSBhbHJlYWR5IGhhdmUgc3lzdGVtLXdpZGUgRElBTAotICAgICAgICAgICAgICAgIHN1cHBvcnQuIEluIHRoYXQgY2FzZSwgYSBESUFMIHNlcnZlciBydW5uaW5nIGluc2lkZSBDb2JhbHQgd291bGQKLSAgICAgICAgICAgICAgICBiZSByZWR1bmRhbnQuCi0gICAgICAgICAgICAqICAgU2V0IHRoaXMgdmFsdWUgdG8gYDFgIGlmIHlvdSB3YW50IENvYmFsdCB0byBydW4gYSBESUFMIHNlcnZlcgotICAgICAgICAgICAgICAgIHdoZW5ldmVyIGl0IGlzIHJ1bm5pbmcuIFRoYXQgc2VydmVyIGNvdWxkIG9ubHkgYmUgdXNlZCB0bwotICAgICAgICAgICAgICAgIGNvbm5lY3Qgd2l0aCB0aGUgY3VycmVudCBDb2JhbHQgYXBwbGljYXRpb24gKGUuZy4gWW91VHViZSkuCisgICAgICAgICAgICAqICAgU2V0IHRoaXMgdmFsdWUgdG8gYGZhbHNlYCBpZiB5b3UgYWxyZWFkeSBoYXZlIHN5c3RlbS13aWRlIERJQUwKKyAgICAgICAgICAgICAgICBzdXBwb3J0LiBJbiB0aGF0IGNhc2UsIGEgRElBTCBzZXJ2ZXIgcnVubmluZyBpbnNpZGUgQ29iYWx0CisgICAgICAgICAgICAgICAgd291bGQgYmUgcmVkdW5kYW50LgorICAgICAgICAgICAgKiAgIFNldCB0aGlzIHZhbHVlIHRvIGB0cnVlYCBpZiB5b3Ugd2FudCBDb2JhbHQgdG8gcnVuIGEgRElBTAorICAgICAgICAgICAgICAgIHNlcnZlciB3aGVuZXZlciBpdCBpcyBydW5uaW5nLiBUaGF0IHNlcnZlciBjb3VsZCBvbmx5IGJlIHVzZWQKKyAgICAgICAgICAgICAgICB0byBjb25uZWN0IHdpdGggdGhlIGN1cnJlbnQgQ29iYWx0IGFwcGxpY2F0aW9uIChlLmcuIFlvdVR1YmUpLgogCisxLiAgKipgdG9vbGNoYWluL0JVSUxELmduYCoqCisgICAgMS4gIElmIHlvdXIgcGxhdGZvcm0gdXNlcyBhIHNpbXBsZSBjbGFuZyB0b29sY2hhaW4sIHNpbXBseSBwYXNzIHRoZSBwYXRoIHRvCisgICAgICAgIHRoZSB0b29sY2hhaW4gdG8gdGhlIGBjbGFuZ190b29sY2hhaW5gIHRlbXBsYXRlLiBUaGlzIHRlbXBsYXRlIHdpbGwKKyAgICAgICAgYXNzdW1lIG5hbWVzIGZvciBlYWNoIG9mIHRoZSB0b29scywgaS5lLiB0aGUgYGNsYW5nKytgIGV4ZWN1dGFibGUKKyAgICAgICAgc2hvdWxkIGJlIGF0IGAke2NsYW5nX2Jhc2VfcGF0aH0vY2xhbmcrK2AuCisKKyAgICAgICAgTW9kaWZ5IHRoZSBob3N0J3MgYHRvb2xjaGFpbl9hcmdzYCB0byBwYXNzIHRoZSBjb3JyZWN0IE9TIGFuZCBDUFUgZm9yCisgICAgICAgIHlvdXIgaG9zdCBwbGF0Zm9ybS4KKworICAgICAgICBJZiB5b3VyIHRvb2xjaGFpbiB1c2VzIEdDQyBvciBoYXMgdG9vbCBuYW1lcyB0aGF0IGRpZmZlciBmcm9tIHdoYXQKKyAgICAgICAgdGhlIGBjbGFuZ190b29sY2hhaW5gIHRlbXBsYXRlIGFzc3VtZXMsIHVzZSB0aGUgYGdjY190b29sY2hhaW5gCisgICAgICAgIHRlbXBsYXRlIChhbHNvIHByb3ZpZGVkIGluIGAiLy9idWlsZC90b29sY2hhaW4vZ2NjX3Rvb2xjaGFpbi5nbmkiYCkuCisgICAgICAgIFRvIHVzZSB0aGlzIHRlbXBsYXRlLCBwYXNzIGZ1bGwgcGF0aHMgdG8gZWFjaCBvZiB0aGUgcmVxdWlyZWQgdG9vbHMKKyAgICAgICAgKGBhcmAsIGBjY2AsIGBjeHhgLCBhbmQgYGxkYCksIGFzIHdlbGwgYXMgYW55IG9wdGlvbmFsIHRvb2xzIHlvdSB3YW50CisgICAgICAgIHRvIHVzZS4gSWYgeW91ciB0b29sY2hhaW4gdXNlcyBjbGFuZywgbWFrZSBzdXJlIHlvdSBwYXNzCisgICAgICAgIGBpc19jbGFuZyA9IHRydWVgIGluIGB0b29sY2hhaW5fYXJnc2AuCiAKICAgICAxLiAgVXBkYXRlIHlvdXIgdG9vbGNoYWluIGNvbW1hbmQtbGluZSBmbGFncyBhbmQgbGlicmFyaWVzLiBFbnN1cmUgdGhhdAogICAgICAgICB5b3UgZG8gbm90IGFzc3VtZSBhIHBhcnRpY3VsYXIgd29ya3N0YXRpb24gbGF5b3V0IHNpbmNlIHRoYXQgbGF5b3V0CiAgICAgICAgIG1heSB2YXJ5IGZyb20gdXNlciB0byB1c2VyLgogCi0gICAgMS4gIFVwZGF0ZSB0aGUgZ2xvYmFsIGRlZmluZXMgaW4gdGhlIGB0YXJnZXRfZGVmYXVsdHMuZGVmaW5lc2AgZGljdGlvbmFyeSwKLSAgICAgICAgaWYgbmVjZXNzYXJ5LgotCi0xLiAgKipgdGhyZWFkX3R5cGVzX3B1YmxpYy5oYCoqIC0gRW5zdXJlIHRoYXQgdGhpcyBmaWxlIHBvaW50cyBhdCB0aGUKLSAgICBhcHByb3ByaWF0ZSBzaGFyZWQgb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uLgotCiAjIyMgNS4gUG9ydCBtb2R1bGVzIHRvIHdvcmsgb24geW91ciBwbGF0Zm9ybQogCi1UaGUgYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgIGZpbGUgcG9pbnRzIHRvIGFsbCBvZiB0aGUgc291cmNlIGZpbGVzIGluY2x1ZGVkCitUaGUgYEJVSUxELmduYCBmaWxlIHBvaW50cyB0byBhbGwgb2YgdGhlIHNvdXJjZSBmaWxlcyBpbmNsdWRlZAogaW4geW91ciBuZXcgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9uLiBJZiB5b3UgYXJlIHN0YXJ0aW5nIHdpdGggYSBjb3B5IG9mIHRoZQogU3R1YiBpbXBsZW1lbnRhdGlvbiwgdGhlbiB0aGF0IGZpbGUgd2lsbCBpbml0aWFsbHkgaW5jbHVkZSBhIGxvdCBvZiBmaWxlcwogZnJvbSB0aGUgYHN0YXJib2FyZC9zaGFyZWQvc3R1Yi9gIGRpcmVjdG9yeS4gU2ltaWxhcmx5LCBpZiB5b3UgYXJlIHN0YXJ0aW5nCkBAIC0zMTksNyArMjM2LDcgQEAKIGltcGxlbWVudGF0aW9ucyB3aXRoIGVpdGhlciBjdXN0b20gaW1wbGVtZW50YXRpb25zIG9yIHdpdGggb3RoZXIgcG9ydGVkCiBpbXBsZW1lbnRhdGlvbnMgZnJvbSB0aGUgYHN0YXJib2FyZC9zaGFyZWQvYCBkaXJlY3RvcnkgdW50aWwgeW91IGhhdmUKIGdvbmUgdGhyb3VnaCBhbGwgb2YgdGhlIG1vZHVsZXMuIEFzIHlvdSBkbywgdXBkYXRlIHRoZQotYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgIGZpbGUgdG8gaWRlbnRpZnkgdGhlIGFwcHJvcHJpYXRlIHNvdXJjZSBmaWxlcy4KK2BCVUlMRC5nbmAgZmlsZSB0byBpZGVudGlmeSB0aGUgYXBwcm9wcmlhdGUgc291cmNlIGZpbGVzLgogCiBEdWUgdG8gZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcywgeW91IHdpbGwgZmluZCBpdCBlYXNpZXIgdG8gZ2V0IHNvbWUKIG1vZHVsZXMgdG8gcGFzcyB0aGUgTlBMQiB0ZXN0cyBiZWZvcmUgb3RoZXIgbW9kdWxlcy4gV2UgcmVjb21tZW5kIHBvcnRpbmcKZGlmZiAtLWdpdCBhL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9CVUlMRC5nbiBiL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9CVUlMRC5nbgppbmRleCBiYzhjOTllLi43YTUxMjYwIDEwMDY0NAotLS0gYS9jb2JhbHQvc3BlZWNoL3NhbmRib3gvQlVJTEQuZ24KKysrIGIvY29iYWx0L3NwZWVjaC9zYW5kYm94L0JVSUxELmduCkBAIC0zOSw0ICszOSw2IEBACiAgIF0KIAogICBkZXBzICs9IGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMKKworICBjb250ZW50X2RlcHMgPSBbICIvL2NvYmFsdC9zcGVlY2g6c3BlZWNoX3Rlc3RkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvc3BlZWNoL3NhbmRib3gvYXVkaW9fbG9hZGVyLmNjIGIvY29iYWx0L3NwZWVjaC9zYW5kYm94L2F1ZGlvX2xvYWRlci5jYwppbmRleCAzNTgxMTI3Li5kYTM1YTJjIDEwMDY0NAotLS0gYS9jb2JhbHQvc3BlZWNoL3NhbmRib3gvYXVkaW9fbG9hZGVyLmNjCisrKyBiL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9hdWRpb19sb2FkZXIuY2MKQEAgLTk5LDcgKzk5LDggQEAKICAgZmV0Y2hlcl9mYWN0b3J5Xy5yZXNldChuZXcgbG9hZGVyOjpGZXRjaGVyRmFjdG9yeShuZXR3b3JrX21vZHVsZV8pKTsKICAgbG9hZGVyXyA9IGJhc2U6OldyYXBVbmlxdWUobmV3IGxvYWRlcjo6TG9hZGVyKAogICAgICAgYmFzZTo6QmluZCgmbG9hZGVyOjpGZXRjaGVyRmFjdG9yeTo6Q3JlYXRlRmV0Y2hlciwKLSAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChmZXRjaGVyX2ZhY3RvcnlfLmdldCgpKSwgdXJsKSwKKyAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChmZXRjaGVyX2ZhY3RvcnlfLmdldCgpKSwgdXJsLAorICAgICAgICAgICAgICAgICBkaXNrX2NhY2hlOjprT3RoZXIpLAogICAgICAgYmFzZTo6QmluZCgmRHVtbXlEZWNvZGVyOjpDcmVhdGUsIGJhc2U6OkJpbmQoJkF1ZGlvTG9hZGVyOjpPbkxvYWRpbmdEb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpLAogICAgICAgYmFzZTo6QmluZCgmQXVkaW9Mb2FkZXI6Ok9uTG9hZGluZ0Vycm9yLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpKSkpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3NwZWVjaC9zYW5kYm94L3NhbmRib3guZ3lwIGIvY29iYWx0L3NwZWVjaC9zYW5kYm94L3NhbmRib3guZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWFhZWQwLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9zYW5kYm94Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgaXMgYSBzYW1wbGUgc2FuZGJveCBhcHBsaWNhdGlvbiBmb3IgZXhwZXJpbWVudGluZyB3aXRoIHRoZSBDb2JhbHQKLSMgU3BlZWNoIEFQSS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3BlZWNoX3NhbmRib3gnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXVkaW9fbG9hZGVyLmNjJywKLSAgICAgICAgJ2F1ZGlvX2xvYWRlci5oJywKLSAgICAgICAgJ3NwZWVjaF9zYW5kYm94LmNjJywKLSAgICAgICAgJ3NwZWVjaF9zYW5kYm94LmgnLAotICAgICAgICAnc3BlZWNoX3NhbmRib3hfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9hdWRpby9hdWRpby5neXA6YXVkaW8nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZGVidWcvZGVidWcuZ3lwOmNvbnNvbGVfY29tbWFuZF9tYW5hZ2VyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOmxvYWRlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvZW5naW5lLmd5cDplbmdpbmUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NwZWVjaC9zcGVlY2guZ3lwOnNwZWVjaCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuZ3lwOnRyYWNlX2V2ZW50JywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3BlZWNoX3NhbmRib3hfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3NwZWVjaF9zYW5kYm94JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3NwZWVjaF9zYW5kYm94JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9zcGVlY2hfc2FuZGJveC5jYyBiL2NvYmFsdC9zcGVlY2gvc2FuZGJveC9zcGVlY2hfc2FuZGJveC5jYwppbmRleCBiOTMwYWE5Li43OGUzMzUzIDEwMDY0NAotLS0gYS9jb2JhbHQvc3BlZWNoL3NhbmRib3gvc3BlZWNoX3NhbmRib3guY2MKKysrIGIvY29iYWx0L3NwZWVjaC9zYW5kYm94L3NwZWVjaF9zYW5kYm94LmNjCkBAIC03Niw5ICs3Niw4IEBACiB2b2lkIFNwZWVjaFNhbmRib3g6OlN0YXJ0UmVjb2duaXRpb24oCiAgICAgY29uc3QgZG9tOjpET01TZXR0aW5nczo6T3B0aW9ucyYgZG9tX3NldHRpbmdzX29wdGlvbnMpIHsKICAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncz4gZW52aXJvbm1lbnRfc2V0dGluZ3MoCi0gICAgICBuZXcgZG9tOjpET01TZXR0aW5ncyhrRE9NTWF4RWxlbWVudERlcHRoLCBOVUxMLCBuZXR3b3JrX21vZHVsZV8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbF9kZWJ1Z2dlcl9ob29rc18sIE5VTEwsIGRvbV9zZXR0aW5nc19vcHRpb25zKSk7CisgICAgICBuZXcgZG9tOjpET01TZXR0aW5ncyhudWxsX2RlYnVnZ2VyX2hvb2tzXywga0RPTU1heEVsZW1lbnREZXB0aCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGRvbV9zZXR0aW5nc19vcHRpb25zKSk7CiAgIERDSEVDSyhlbnZpcm9ubWVudF9zZXR0aW5ncyk7CiAKICAgc3BlZWNoX3JlY29nbml0aW9uXyA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbihlbnZpcm9ubWVudF9zZXR0aW5ncy5nZXQoKSk7CmRpZmYgLS1naXQgYS9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXAgYi9jb2JhbHQvc3BlZWNoL3NwZWVjaC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4OWFjM2IuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3NwZWVjaC9zcGVlY2guZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NwZWVjaCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgIyBEZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlciBpbiBnZW5lcmF0ZWQgZmlsZQotICAgICAgICAjIGdvb2dsZV9zdHJlYW1pbmdfYXBpLnBiLmNjLgotICAgICAgICA2MDExLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXVkaW9fZW5jb2Rlcl9mbGFjLmNjJywKLSAgICAgICAgJ2F1ZGlvX2VuY29kZXJfZmxhYy5oJywKLSAgICAgICAgJ2NvYmFsdF9zcGVlY2hfcmVjb2duaXplci5jYycsCi0gICAgICAgICdjb2JhbHRfc3BlZWNoX3JlY29nbml6ZXIuaCcsCi0gICAgICAgICdlbmRwb2ludGVyX2RlbGVnYXRlLmNjJywKLSAgICAgICAgJ2VuZHBvaW50ZXJfZGVsZWdhdGUuaCcsCi0gICAgICAgICdnb29nbGVfc3BlZWNoX3NlcnZpY2UuY2MnLAotICAgICAgICAnZ29vZ2xlX3NwZWVjaF9zZXJ2aWNlLmgnLAotICAgICAgICAnZ29vZ2xlX3N0cmVhbWluZ19hcGkucGIuY2MnLAotICAgICAgICAnZ29vZ2xlX3N0cmVhbWluZ19hcGkucGIuaCcsCi0gICAgICAgICdnb29nbGVfc3RyZWFtaW5nX2FwaS5wYi5wcm90bycsCi0gICAgICAgICdtaWNyb3Bob25lLmgnLAotICAgICAgICAnbWljcm9waG9uZV9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ21pY3JvcGhvbmVfbWFuYWdlci5oJywKLSAgICAgICAgJ3NwZWVjaF9jb25maWd1cmF0aW9uLmgnLAotICAgICAgICAnc3BlZWNoX3JlY29nbml0aW9uLmNjJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbi5oJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9hbHRlcm5hdGl2ZS5oJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9jb25maWcuaCcsCi0gICAgICAgICdzcGVlY2hfcmVjb2duaXRpb25fZXJyb3IuY2MnLAotICAgICAgICAnc3BlZWNoX3JlY29nbml0aW9uX2Vycm9yLmgnLAotICAgICAgICAnc3BlZWNoX3JlY29nbml0aW9uX2V2ZW50LmNjJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9ldmVudC5oJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9tYW5hZ2VyLmgnLAotICAgICAgICAnc3BlZWNoX3JlY29nbml0aW9uX3Jlc3VsdC5jYycsCi0gICAgICAgICdzcGVlY2hfcmVjb2duaXRpb25fcmVzdWx0LmgnLAotICAgICAgICAnc3BlZWNoX3JlY29nbml0aW9uX3Jlc3VsdF9saXN0LmNjJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pdGlvbl9yZXN1bHRfbGlzdC5oJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pemVyLmNjJywKLSAgICAgICAgJ3NwZWVjaF9yZWNvZ25pemVyLmgnLAotICAgICAgICAnc3BlZWNoX3N5bnRoZXNpcy5jYycsCi0gICAgICAgICdzcGVlY2hfc3ludGhlc2lzLmgnLAotICAgICAgICAnc3BlZWNoX3N5bnRoZXNpc19lcnJvcl9ldmVudC5oJywKLSAgICAgICAgJ3NwZWVjaF9zeW50aGVzaXNfZXZlbnQuY2MnLAotICAgICAgICAnc3BlZWNoX3N5bnRoZXNpc19ldmVudC5oJywKLSAgICAgICAgJ3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlLmNjJywKLSAgICAgICAgJ3NwZWVjaF9zeW50aGVzaXNfdXR0ZXJhbmNlLmgnLAotICAgICAgICAnc3BlZWNoX3N5bnRoZXNpc192b2ljZS5oJywKLSAgICAgICAgJ3N0YXJib2FyZF9zcGVlY2hfcmVjb2duaXplci5jYycsCi0gICAgICAgICdzdGFyYm9hcmRfc3BlZWNoX3JlY29nbml6ZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL2NvbnRlbnQvYnJvd3Nlci9zcGVlY2gvc3BlZWNoLmd5cDpzcGVlY2gnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZmxhYy9mbGFjLmd5cDpsaWJmbGFjJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cDpwcm90b2J1Zl9saXRlJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgIyBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBnZW5lcmF0ZWQKLSAgICAgICAgIyBoZWFkZXJzIGFyZSBwdXQgb24gdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRhcmdldHMgdGhhdCBkZXBlbmQKLSAgICAgICAgIyBvbiB0aGlzIG9uZS4KLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICMgR2V0IHByb3RvYnVmIGhlYWRlcnMgZnJvbSB0aGUgY2hyb21pdW0gdHJlZS4KLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYycsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJzdGFyYm9hcmQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ21pY3JvcGhvbmVfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgICAgICdtaWNyb3Bob25lX3N0YXJib2FyZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09InN0YXJib2FyZCIgYW5kIGVuYWJsZV9mYWtlX21pY3JvcGhvbmUgPT0gMScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdtaWNyb3Bob25lX2Zha2UuY2MnLAotICAgICAgICAgICAgJ21pY3JvcGhvbmVfZmFrZS5oJywKLSAgICAgICAgICAgICd1cmxfZmV0Y2hlcl9mYWtlLmNjJywKLSAgICAgICAgICAgICd1cmxfZmV0Y2hlcl9mYWtlLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvYXVkaW8vYXVkaW8uZ3lwOmF1ZGlvJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0VOQUJMRV9GQUtFX01JQ1JPUEhPTkUnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ0VOQUJMRV9GQUtFX01JQ1JPUEhPTkUnLCBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2NvYmFsdF9jb3B5X3Rlc3RfZGF0YSA9PSAxJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnY29udGVudF90ZXN0X2lucHV0X2ZpbGVzJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvY29iYWx0L3NwZWVjaC90ZXN0ZGF0YS8nLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdjb2JhbHQvc3BlZWNoL3Rlc3RkYXRhLycsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaScgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvc3BlZWNoL3NwZWVjaF9jb25maWd1cmF0aW9uLmggYi9jb2JhbHQvc3BlZWNoL3NwZWVjaF9jb25maWd1cmF0aW9uLmgKaW5kZXggNTQ1ODY0MS4uNmQ5Y2Q5MCAxMDA2NDQKLS0tIGEvY29iYWx0L3NwZWVjaC9zcGVlY2hfY29uZmlndXJhdGlvbi5oCisrKyBiL2NvYmFsdC9zcGVlY2gvc3BlZWNoX2NvbmZpZ3VyYXRpb24uaApAQCAtMTgsMTIgKzE4LDEwIEBACiAjaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNSUNST1BIT05FKQogI2RlZmluZSBTQl9VU0VfU0JfTUlDUk9QSE9ORSAxCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNSUNST1BIT05FKQogCiAjaWYgU0JfQVBJX1ZFUlNJT04gPT0gMTIgfHwgKFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikgJiYgU0JfQVBJX1ZFUlNJT04gPCAxMykKICNkZWZpbmUgU0JfVVNFX1NCX1NQRUVDSF9SRUNPR05JWkVSIDEKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQorI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA9PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCiAKICNlbmRpZiAgLy8gQ09CQUxUX1NQRUVDSF9TUEVFQ0hfQ09ORklHVVJBVElPTl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L3NwZWVjaC9zcGVlY2hfcmVjb2duaXRpb24uY2MgYi9jb2JhbHQvc3BlZWNoL3NwZWVjaF9yZWNvZ25pdGlvbi5jYwppbmRleCA4OTU3ZDBhLi4zOGQ2MGYzIDEwMDY0NAotLS0gYS9jb2JhbHQvc3BlZWNoL3NwZWVjaF9yZWNvZ25pdGlvbi5jYworKysgYi9jb2JhbHQvc3BlZWNoL3NwZWVjaF9yZWNvZ25pdGlvbi5jYwpAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHNwZWVjaCB7CkBAIC0yNiwxMyArMjksMTQgQEAKIC8vIG1heCBhbHRlcm5hdGl2ZXM6IDEuCiBTcGVlY2hSZWNvZ25pdGlvbjo6U3BlZWNoUmVjb2duaXRpb24oc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncykKICAgICA6IGRvbTo6RXZlbnRUYXJnZXQoc2V0dGluZ3MpLAotICAgICAgQUxMT1dfVEhJU19JTl9JTklUSUFMSVpFUl9MSVNUKAotICAgICAgICAgIG1hbmFnZXJfKGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihzZXR0aW5ncykKLSAgICAgICAgICAgICAgICAgICAgICAgLT5uZXR3b3JrX21vZHVsZSgpLAotICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmQoJlNwZWVjaFJlY29nbml0aW9uOjpPbkV2ZW50QXZhaWxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSksCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKQotICAgICAgICAgICAgICAgICAgICAgICAtPm1pY3JvcGhvbmVfb3B0aW9ucygpKSksCisgICAgICBBTExPV19USElTX0lOX0lOSVRJQUxJWkVSX0xJU1QobWFuYWdlcl8oCisgICAgICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oc2V0dGluZ3MpCisgICAgICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgICAgIC0+bmV0d29ya19tb2R1bGUoKSwKKyAgICAgICAgICBiYXNlOjpCaW5kKCZTcGVlY2hSZWNvZ25pdGlvbjo6T25FdmVudEF2YWlsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAorICAgICAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihzZXR0aW5ncykKKyAgICAgICAgICAgICAgLT5taWNyb3Bob25lX29wdGlvbnMoKSkpLAogICAgICAgY29uZmlnXygiIiAvKmxhbmcqLywgZmFsc2UgLypjb250aW51b3VzKi8sIGZhbHNlIC8qaW50ZXJpbV9yZXN1bHRzKi8sCiAgICAgICAgICAgICAgIDEgLyptYXggYWx0ZXJuYXRpdmVzKi8pIHt9CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC9zcGVlY2gvc3BlZWNoX3N5bnRoZXNpcy5jYyBiL2NvYmFsdC9zcGVlY2gvc3BlZWNoX3N5bnRoZXNpcy5jYwppbmRleCBlNjI3ODJmLi4xMTUyNmRjIDEwMDY0NAotLS0gYS9jb2JhbHQvc3BlZWNoL3NwZWVjaF9zeW50aGVzaXMuY2MKKysrIGIvY29iYWx0L3NwZWVjaC9zcGVlY2hfc3ludGhlc2lzLmNjCkBAIC0yMywxMSArMjMsNyBAQAogbmFtZXNwYWNlIHNwZWVjaCB7CiAKIGJvb2wgU3BlZWNoU3ludGhlc2lzOjpTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICByZXR1cm4gU2JTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpOwotI2Vsc2UKLSAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKIH0KIAogU3BlZWNoU3ludGhlc2lzOjpTcGVlY2hTeW50aGVzaXMoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKQEAgLTM3LDcgKzMzLDYgQEAKICAgICAgIGxvZ19vdXRwdXRfKGxvZ19vdXRwdXQpLAogICAgICAgcGF1c2VkXyhmYWxzZSksCiAgICAgICBuYXZpZ2F0b3JfKG5hdmlnYXRvcikgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfU1lOVEhFU0lTKQogICBpZiAoU3BlZWNoU3ludGhlc2lzOjpTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpKSB7CiAgICAgY29uc3QgY2hhcioga1ZvaWNlTmFtZSA9ICJDb2JhbHQiOwogICAgIHN0ZDo6c3RyaW5nIHZvaWNlX3VybihrVm9pY2VOYW1lKTsKQEAgLTQ3LDcgKzQyLDYgQEAKICAgICB2b2ljZXNfLnB1c2hfYmFjayhuZXcgU3BlZWNoU3ludGhlc2lzVm9pY2Uodm9pY2VfdXJuLCBrVm9pY2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2ljZV9sYW5nLCBmYWxzZSwgdHJ1ZSkpOwogICB9Ci0jZW5kaWYKIH0KIAogU3BlZWNoU3ludGhlc2lzOjp+U3BlZWNoU3ludGhlc2lzKCkge30KQEAgLTY1LDExICs1OSw5IEBACiAgICAgKCp1dHRlcmFuY2VfaXRlcmF0b3IpLT5EaXNwYXRjaEVycm9yQ2FuY2VsbGVkRXZlbnQoKTsKICAgfQogICB1dHRlcmFuY2VzXy5jbGVhcigpOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfU1lOVEhFU0lTKQogICBpZiAoU3BlZWNoU3ludGhlc2lzOjpTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpKSB7CiAgICAgU2JTcGVlY2hTeW50aGVzaXNDYW5jZWwoKTsKICAgfQotI2VuZGlmCiB9CiAKIHZvaWQgU3BlZWNoU3ludGhlc2lzOjpSZXN1bWUoKSB7CkBAIC0xMTUsNyArMTA3LDYgQEAKICAgICByZXR1cm47CiAgIH0KICAgdXR0ZXJhbmNlLT5TaWduYWxQZW5kaW5nU3BlYWsoKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1NZTlRIRVNJUykKICAgaWYgKFNwZWVjaFN5bnRoZXNpczo6U3BlZWNoU3ludGhlc2lzSXNTdXBwb3J0ZWQoKSkgewogICAgIGlmICghdXR0ZXJhbmNlLT5sYW5nKCkuZW1wdHkoKSAmJgogICAgICAgICB1dHRlcmFuY2UtPmxhbmcoKSAhPSBuYXZpZ2F0b3JfLT5sYW5ndWFnZSgpKSB7CkBAIC0xMzYsNyArMTI3LDYgQEAKICAgICB1dHRlcmFuY2UtPkRpc3BhdGNoRW5kRXZlbnQoKTsKICAgICByZXR1cm47CiAgIH0KLSNlbmRpZgogICBEaXNwYXRjaEVycm9yRXZlbnQodXR0ZXJhbmNlLCBrU3BlZWNoU3ludGhlc2lzRXJyb3JDb2RlU3ludGhlc2lzVW5hdmFpbGFibGUpOwogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvc3BlZWNoL3N0YXJib2FyZF9zcGVlY2hfcmVjb2duaXplci5jYyBiL2NvYmFsdC9zcGVlY2gvc3RhcmJvYXJkX3NwZWVjaF9yZWNvZ25pemVyLmNjCmluZGV4IGFmNzc4MmQuLjczOTA1YzAgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zcGVlY2gvc3RhcmJvYXJkX3NwZWVjaF9yZWNvZ25pemVyLmNjCisrKyBiL2NvYmFsdC9zcGVlY2gvc3RhcmJvYXJkX3NwZWVjaF9yZWNvZ25pemVyLmNjCkBAIC0zMSwxMCArMzEsOCBAQAogYm9vbCBTdGFyYm9hcmRTcGVlY2hSZWNvZ25pemVyOjpJc1N1cHBvcnRlZCgpIHsKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICByZXR1cm4gZmFsc2U7Ci0jZWxpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICByZXR1cm4gU2JTcGVlY2hSZWNvZ25pemVySXNTdXBwb3J0ZWQoKTsKICNlbHNlCi0gIHJldHVybiB0cnVlOworICByZXR1cm4gU2JTcGVlY2hSZWNvZ25pemVySXNTdXBwb3J0ZWQoKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQvc3NvL3Nzby5neXAgYi9jb2JhbHQvc3NvL3Nzby5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDlkMDQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3Nzby9zc28uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3NvJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzc29faW50ZXJmYWNlLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC9zdG9yYWdlL3N0b3JhZ2UuZ3lwIGIvY29iYWx0L3N0b3JhZ2Uvc3RvcmFnZS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMmU4YTYuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3N0b3JhZ2Uvc3RvcmFnZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbICcuLi9idWlsZC9jb250ZW50c19kaXIuZ3lwaScgXSwKLQotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdG9yYWdlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2F2ZWdhbWUuY2MnLAotICAgICAgICAnc2F2ZWdhbWUuaCcsCi0gICAgICAgICdzYXZlZ2FtZV90aHJlYWQuY2MnLAotICAgICAgICAnc2F2ZWdhbWVfdGhyZWFkLmgnLAotICAgICAgICAnc2F2ZWdhbWVfZmFrZS5jYycsCi0gICAgICAgICdzYXZlZ2FtZV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnc3RvcmFnZV9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3N0b3JhZ2VfbWFuYWdlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3N0b3JhZ2Uvc3RvcmUvc3RvcmUuZ3lwOm1lbW9yeV9zdG9yZScsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdG9yYWdlX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdHTU9DS19OT19NT1ZFX01PQ0snLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2F2ZWdhbWVfdGVzdC5jYycsCi0gICAgICAgICdzdG9yYWdlX21hbmFnZXJfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnc3RvcmFnZScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0b3JhZ2VfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnc3RvcmFnZV90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3N0b3JhZ2VfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvc3RvcmFnZS9zdG9yYWdlX2NvbnN0YW50cy5neXAgYi9jb2JhbHQvc3RvcmFnZS9zdG9yYWdlX2NvbnN0YW50cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YTgyZjMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3N0b3JhZ2Uvc3RvcmFnZV9jb25zdGFudHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0b3JhZ2VfY29uc3RhbnRzJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3RvcmFnZV9jb25zdGFudHMuY2MnLAotICAgICAgICAnc3RvcmFnZV9jb25zdGFudHMuaCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvc3RvcmFnZS9zdG9yZS9CVUlMRC5nbiBiL2NvYmFsdC9zdG9yYWdlL3N0b3JlL0JVSUxELmduCmluZGV4IDg1MmQwM2EuLmY5Yzg5NWYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zdG9yYWdlL3N0b3JlL0JVSUxELmduCisrKyBiL2NvYmFsdC9zdG9yYWdlL3N0b3JlL0JVSUxELmduCkBAIC00Niw2ICs0Niw0IEBACiAgICAgIi8vdGhpcmRfcGFydHkvcHJvdG9idWY6cHJvdG9idWZfbGl0ZSIsCiAgICAgIi8vdXJsIiwKICAgXQotCi0gIGNvbnRlbnRfZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiIF0KIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC9zdG9yYWdlL3N0b3JlL3N0b3JlLmd5cCBiL2NvYmFsdC9zdG9yYWdlL3N0b3JlL3N0b3JlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNmOWZjNC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvc3RvcmFnZS9zdG9yZS9zdG9yZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbWVtb3J5X3N0b3JlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbWVtb3J5X3N0b3JlLmgnLAotICAgICAgICAnbWVtb3J5X3N0b3JlLmNjJywKLSAgICAgICAgJ3N0b3JhZ2UucGIuY2MnLAotICAgICAgICAnc3RvcmFnZS5wYi5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9vcmlnaW4uZ3lwOm9yaWdpbicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc3RvcmFnZS9zdG9yYWdlX2NvbnN0YW50cy5neXA6c3RvcmFnZV9jb25zdGFudHMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYuZ3lwOnByb3RvYnVmX2xpdGUnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZW1vcnlfc3RvcmVfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ21lbW9yeV9zdG9yZV90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdtZW1vcnlfc3RvcmUnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZW1vcnlfc3RvcmVfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbWVtb3J5X3N0b3JlX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbWVtb3J5X3N0b3JlX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3N1YnRsZWNyeXB0by9zdWJ0bGVfY3J5cHRvLmNjIGIvY29iYWx0L3N1YnRsZWNyeXB0by9zdWJ0bGVfY3J5cHRvLmNjCmluZGV4IDI4YmRjZTYuLjVmZDZlZGYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC9zdWJ0bGVjcnlwdG8vc3VidGxlX2NyeXB0by5jYworKysgYi9jb2JhbHQvc3VidGxlY3J5cHRvL3N1YnRsZV9jcnlwdG8uY2MKQEAgLTEyLDE1ICsxMiwxNiBAQAogLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKKyNpbmNsdWRlICJjb2JhbHQvc3VidGxlY3J5cHRvL3N1YnRsZV9jcnlwdG8uaCIKKwogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgogCiAjaW5jbHVkZSAiY29iYWx0L2Jhc2UvcG9seW1vcnBoaWNfZG93bmNhc3QuaCIKLSNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9zZXR0aW5ncy5oIgotCiAjaW5jbHVkZSAiY29iYWx0L3N1YnRsZWNyeXB0by9jcnlwdG9faW1wbC5oIgotI2luY2x1ZGUgImNvYmFsdC9zdWJ0bGVjcnlwdG8vc3VidGxlX2NyeXB0by5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2Ugc3VidGxlY3J5cHRvIHsKQEAgLTc5LDkgKzgwLDEwIEBACiB1c2luZyBQcm9taXNlV3JhcHBhYmxlID0gU3VidGxlQ3J5cHRvOjpQcm9taXNlV3JhcHBhYmxlOwogCiBTdWJ0bGVDcnlwdG86OlN1YnRsZUNyeXB0byhzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MgKmVudmlyb25tZW50KSB7Ci0gIGRvbTo6RE9NU2V0dGluZ3MgKmRvbV9zZXR0aW5ncyA9Ci0gICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzICo+KGVudmlyb25tZW50KTsKLSAgZ2xvYmFsX2Vudl8gPSBkb21fc2V0dGluZ3MtPmdsb2JhbF9lbnZpcm9ubWVudCgpOworICBnbG9iYWxfZW52XyA9CisgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MgKj4oZW52aXJvbm1lbnQpCisgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAtPmdsb2JhbF9lbnZpcm9ubWVudCgpOwogICBzY3JpcHRfdmFsdWVfZmFjdG9yeV8gPSBnbG9iYWxfZW52Xy0+c2NyaXB0X3ZhbHVlX2ZhY3RvcnkoKTsKIH0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L3N1YnRsZWNyeXB0by9zdWJ0bGVjcnlwdG8uZ3lwIGIvY29iYWx0L3N1YnRsZWNyeXB0by9zdWJ0bGVjcnlwdG8uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDBiYzk4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC9zdWJ0bGVjcnlwdG8vc3VidGxlY3J5cHRvLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyeXB0b19pbXBsJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY3J5cHRvX2ltcGwuY2MnLAotICAgICAgICAnY3J5cHRvX2ltcGwuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cDpjcnlwdG8nLAotICAgICAgXQotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyeXB0b19pbXBsX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcnlwdG9faW1wbF90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICdjcnlwdG9faW1wbCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N1YnRsZWNyeXB0bycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3N1YnRsZV9jcnlwdG8uY2MnLAotICAgICAgICAnc3VidGxlX2NyeXB0by5oJywKLSAgICAgICAgJ2NyeXB0b19rZXkuY2MnLAotICAgICAgICAnY3J5cHRvX2tleS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L2VuZ2luZS5neXA6ZW5naW5lJywKLSAgICAgICAgJ2NyeXB0b19pbXBsJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvX2ltcGxfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3J5cHRvX2ltcGxfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdjcnlwdG9faW1wbF90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXQotfQotCmRpZmYgLS1naXQgYS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9pbnB1dF9ldmVudC5oIGIvY29iYWx0L3N5c3RlbV93aW5kb3cvaW5wdXRfZXZlbnQuaAppbmRleCAyYzFiMTYxLi5hNGQyNjcwIDEwMDY0NAotLS0gYS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9pbnB1dF9ldmVudC5oCisrKyBiL2NvYmFsdC9zeXN0ZW1fd2luZG93L2lucHV0X2V2ZW50LmgKQEAgLTY0LDEzICs2NCw4IEBACiAgICAgICAgICAgICAgY29uc3QgbWF0aDo6UG9pbnRGJiBwb3NpdGlvbiA9IG1hdGg6OlBvaW50RigpLAogICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlBvaW50RiYgZGVsdGEgPSBtYXRoOjpQb2ludEYoKSwgZmxvYXQgcHJlc3N1cmUgPSAwLAogICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlBvaW50RiYgc2l6ZSA9IG1hdGg6OlBvaW50RigpLAotICAgICAgICAgICAgIGNvbnN0IG1hdGg6OlBvaW50RiYgdGlsdCA9IG1hdGg6OlBvaW50RigpCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLSAgICAgICAgICAgICAgICAgLAotICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dF90ZXh0ID0gIiIsIGJvb2wgaXNfY29tcG9zaW5nID0gZmFsc2UKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotICAgICAgICAgICAgICkKKyAgICAgICAgICAgICBjb25zdCBtYXRoOjpQb2ludEYmIHRpbHQgPSBtYXRoOjpQb2ludEYoKSwKKyAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRfdGV4dCA9ICIiLCBib29sIGlzX2NvbXBvc2luZyA9IGZhbHNlKQogICAgICAgOiB0aW1lc3RhbXBfKHRpbWVzdGFtcCksCiAgICAgICAgIHR5cGVfKHR5cGUpLAogICAgICAgICBkZXZpY2VfaWRfKGRldmljZV9pZCksCkBAIC04MSwxNSArNzYsOSBAQAogICAgICAgICBkZWx0YV8oZGVsdGEpLAogICAgICAgICBwcmVzc3VyZV8ocHJlc3N1cmUpLAogICAgICAgICBzaXplXyhzaXplKSwKLSAgICAgICAgdGlsdF8odGlsdCkKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotICAgICAgICAsCisgICAgICAgIHRpbHRfKHRpbHQpLAogICAgICAgICBpbnB1dF90ZXh0XyhpbnB1dF90ZXh0KSwKLSAgICAgICAgaXNfY29tcG9zaW5nXyhpc19jb21wb3NpbmcpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0gIHsKLSAgfQorICAgICAgICBpc19jb21wb3NpbmdfKGlzX2NvbXBvc2luZykge30KIAogICB+SW5wdXRFdmVudCgpIHt9CiAKQEAgLTEwNCwxMSArOTMsOCBAQAogICBmbG9hdCBwcmVzc3VyZSgpIGNvbnN0IHsgcmV0dXJuIHByZXNzdXJlXzsgfQogICBjb25zdCBtYXRoOjpQb2ludEYmIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQogICBjb25zdCBtYXRoOjpQb2ludEYmIHRpbHQoKSBjb25zdCB7IHJldHVybiB0aWx0XzsgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dF90ZXh0KCkgY29uc3QgeyByZXR1cm4gaW5wdXRfdGV4dF87IH0KICAgYm9vbCBpc19jb21wb3NpbmcoKSBjb25zdCB7IHJldHVybiBpc19jb21wb3NpbmdfOyB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAKICAgQkFTRV9FVkVOVF9TVUJDTEFTUyhJbnB1dEV2ZW50KTsKIApAQCAtMTI0LDExICsxMTAsOCBAQAogICBmbG9hdCBwcmVzc3VyZV87CiAgIG1hdGg6OlBvaW50RiBzaXplXzsKICAgbWF0aDo6UG9pbnRGIHRpbHRfOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIHN0ZDo6c3RyaW5nIGlucHV0X3RleHRfOwogICBib29sIGlzX2NvbXBvc2luZ187Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiB9OwogCiAvLyBUaGUgU3RhcmJvYXJkIEV2ZW50IGhhbmRsZXIgU2JIYW5kbGVFdmVudCBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uCmRpZmYgLS1naXQgYS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93LmNjIGIvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5jYwppbmRleCA4NWRiZTBjLi5kZjg2Zjg2IDEwMDY0NAotLS0gYS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93LmNjCisrKyBiL2NvYmFsdC9zeXN0ZW1fd2luZG93L3N5c3RlbV93aW5kb3cuY2MKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRFdmVudDo6VHlwZSB0eXBlLCBib29sIGlzX3JlcGVhdCkgewogICBEQ0hFQ0soZXZlbnQpOwogICBEQ0hFQ0soZXZlbnQtPmRhdGEpOworICBpZiAoZXZlbnQgPT0gbnVsbHB0cikgeworICAgIExPRyhFUlJPUikgPDwgIlN5c3RlbVdpbmRvdzo6RGlzcGF0Y2hJbnB1dEV2ZW50OiBtaXNzaW5nIGV2ZW50IjsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKGV2ZW50LT5kYXRhID09IG51bGxwdHIpIHsKKyAgICBMT0coRVJST1IpIDw8ICJTeXN0ZW1XaW5kb3c6OkRpc3BhdGNoSW5wdXRFdmVudDogbWlzc2luZyBldmVudCBkYXRhIjsKKyAgICByZXR1cm47CisgIH0KICAgU2JJbnB1dERhdGEqIGlucHV0X2RhdGEgPSBzdGF0aWNfY2FzdDxTYklucHV0RGF0YSo+KGV2ZW50LT5kYXRhKTsKICAgY29uc3QgU2JJbnB1dERhdGEmIGRhdGEgPSAqaW5wdXRfZGF0YTsKIApAQCAtMTE1LDcgKzEyMyw3IEBACiAgIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXAgPSAwOwogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIHRpbWVzdGFtcCA9IGV2ZW50LT50aW1lc3RhbXA7Ci0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgYm9vbCB1c2VfaW5wdXRfdGltZXN0YW1wID0KICAgICAgIFNiU3lzdGVtSGFzQ2FwYWJpbGl0eShrU2JTeXN0ZW1DYXBhYmlsaXR5U2V0c0lucHV0VGltZXN0YW1wKTsKICAgaWYgKHVzZV9pbnB1dF90aW1lc3RhbXApIHsKQEAgLTE2MCw3ICsxNjgsNiBAQAogICAgIH0KICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgc3RkOjp1bmlxdWVfcHRyPElucHV0RXZlbnQ+IGlucHV0X2V2ZW50KAogICAgICAgbmV3IElucHV0RXZlbnQodGltZXN0YW1wLCB0eXBlLCBkYXRhLmRldmljZV9pZCwga2V5X2NvZGUsIG1vZGlmaWVycywKICAgICAgICAgICAgICAgICAgICAgIGlzX3JlcGVhdCwgbWF0aDo6UG9pbnRGKGRhdGEucG9zaXRpb24ueCwgZGF0YS5wb3NpdGlvbi55KSwKQEAgLTE2OSwxNiArMTc2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlBvaW50RihkYXRhLnRpbHQueCwgZGF0YS50aWx0LnkpLAogICAgICAgICAgICAgICAgICAgICAgZGF0YS5pbnB1dF90ZXh0ID8gZGF0YS5pbnB1dF90ZXh0IDogIiIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhLmlzX2NvbXBvc2luZyA/IGRhdGEuaXNfY29tcG9zaW5nIDogZmFsc2UpKTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLSAgc3RkOjp1bmlxdWVfcHRyPElucHV0RXZlbnQ+IGlucHV0X2V2ZW50KAotICAgICAgbmV3IElucHV0RXZlbnQodGltZXN0YW1wLCB0eXBlLCBkYXRhLmRldmljZV9pZCwga2V5X2NvZGUsIG1vZGlmaWVycywKLSAgICAgICAgICAgICAgICAgICAgIGlzX3JlcGVhdCwgbWF0aDo6UG9pbnRGKGRhdGEucG9zaXRpb24ueCwgZGF0YS5wb3NpdGlvbi55KSwKLSAgICAgICAgICAgICAgICAgICAgIG1hdGg6OlBvaW50RihkYXRhLmRlbHRhLngsIGRhdGEuZGVsdGEueSksIHByZXNzdXJlLAotICAgICAgICAgICAgICAgICAgICAgbWF0aDo6UG9pbnRGKGRhdGEuc2l6ZS54LCBkYXRhLnNpemUueSksCi0gICAgICAgICAgICAgICAgICAgICBtYXRoOjpQb2ludEYoZGF0YS50aWx0LngsIGRhdGEudGlsdC55KSkpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICBldmVudF9kaXNwYXRjaGVyKCktPkRpc3BhdGNoRXZlbnQoCiAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8YmFzZTo6RXZlbnQ+KGlucHV0X2V2ZW50LnJlbGVhc2UoKSkpOwogfQpAQCAtMjYzLDEzICsyNjAsMTAgQEAKICAgICAgIERpc3BhdGNoSW5wdXRFdmVudChldmVudCwgSW5wdXRFdmVudDo6a0tleU1vdmUsIGZhbHNlIC8qIGlzX3JlcGVhdCAqLyk7CiAgICAgICBicmVhazsKICAgICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgICBjYXNlIGtTYklucHV0RXZlbnRUeXBlSW5wdXQ6IHsKICAgICAgIERpc3BhdGNoSW5wdXRFdmVudChldmVudCwgSW5wdXRFdmVudDo6a0lucHV0LCBmYWxzZSAvKiBpc19yZXBlYXQgKi8pOwogICAgICAgYnJlYWs7CiAgICAgfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAgIGRlZmF1bHQ6CiAgICAgICBicmVhazsKICAgfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3N5c3RlbV93aW5kb3cvc3lzdGVtX3dpbmRvdy5neXAgYi9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjMTNiOS4uMDAwMDAwMAotLS0gYS9jb2JhbHQvc3lzdGVtX3dpbmRvdy9zeXN0ZW1fd2luZG93Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJzogMSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N5c3RlbV93aW5kb3cnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdrZXlib2FyZF9ldmVudC5oJywKLSAgICAgICAgJ3N5c3RlbV93aW5kb3cuaCcsCi0gICAgICAgICdzeXN0ZW1fd2luZG93LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvdGVzdC9kb2N1bWVudF9sb2FkZXIuaCBiL2NvYmFsdC90ZXN0L2RvY3VtZW50X2xvYWRlci5oCmluZGV4IGRjMGQ5NDguLmJiNmFjMTUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC90ZXN0L2RvY3VtZW50X2xvYWRlci5oCisrKyBiL2NvYmFsdC90ZXN0L2RvY3VtZW50X2xvYWRlci5oCkBAIC03Miw4ICs3Miw3IEBACiAgICAgICAgICAgICBOVUxMIC8qIHJlbW90ZV9mb250X2NhY2hlICovLCBOVUxMIC8qIG1lc2hfY2FjaGUgKi8sCiAgICAgICAgICAgICBkb21fc3RhdF90cmFja2VyXy5nZXQoKSwgIiIgLyogbGFuZ3VhZ2UgKi8sCiAgICAgICAgICAgICBiYXNlOjprQXBwbGljYXRpb25TdGF0ZVN0YXJ0ZWQsCi0gICAgICAgICAgICBOVUxMIC8qIHN5bmNocm9ub3VzX2xvYWRlcl9pbnRlcnJ1cHQgKi8sCi0gICAgICAgICAgICBOVUxMIC8qIHBlcmZvcm1hbmNlICovKSB7fQorICAgICAgICAgICAgTlVMTCAvKiBzeW5jaHJvbm91c19sb2FkZXJfaW50ZXJydXB0ICovLCBOVUxMIC8qIHBlcmZvcm1hbmNlICovKSB7fQogICB2b2lkIExvYWQoY29uc3QgR1VSTCYgdXJsKSB7CiAgICAgLy8gTG9hZCB0aGUgZG9jdW1lbnQgaW4gYSBuZXN0ZWQgbWVzc2FnZSBsb29wLgogICAgIGRvbTo6RG9jdW1lbnQ6Ok9wdGlvbnMgb3B0aW9ucyh1cmwpOwpAQCAtODMsNyArODIsNyBAQAogICAgIGRvY3VtZW50Xy0+QWRkT2JzZXJ2ZXIodGhpcyk7CiAgICAgZG9jdW1lbnRfbG9hZGVyXy5yZXNldChuZXcgbG9hZGVyOjpMb2FkZXIoCiAgICAgICAgIGJhc2U6OkJpbmQoJmxvYWRlcjo6RmV0Y2hlckZhY3Rvcnk6OkNyZWF0ZUZldGNoZXIsCi0gICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCgmZmV0Y2hlcl9mYWN0b3J5XyksIHVybCksCisgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCgmZmV0Y2hlcl9mYWN0b3J5XyksIHVybCwgZGlza19jYWNoZTo6a0hUTUwpLAogICAgICAgICBiYXNlOjpCaW5kKCZkb21fcGFyc2VyOjpQYXJzZXI6OlBhcnNlRG9jdW1lbnRBc3luYywKICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGRvbV9wYXJzZXJfLmdldCgpKSwgZG9jdW1lbnRfLAogICAgICAgICAgICAgICAgICAgIGJhc2U6OlNvdXJjZUxvY2F0aW9uKHVybC5zcGVjKCksIDEsIDEpKSwKZGlmZiAtLWdpdCBhL2NvYmFsdC90ZXN0L3J1bl9hbGxfdW5pdHRlc3RzLmNjIGIvY29iYWx0L3Rlc3QvcnVuX2FsbF91bml0dGVzdHMuY2MKaW5kZXggMGQ2OWYwYy4uNjNjZGUyZiAxMDA2NDQKLS0tIGEvY29iYWx0L3Rlc3QvcnVuX2FsbF91bml0dGVzdHMuY2MKKysrIGIvY29iYWx0L3Rlc3QvcnVuX2FsbF91bml0dGVzdHMuY2MKQEAgLTI5LDcgKzI5LDYgQEAKICAgYmFzZTo6UGF0aFNlcnZpY2U6OlJlZ2lzdGVyUHJvdmlkZXIoJmNvYmFsdDo6UGF0aFByb3ZpZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2JhbHQ6OnBhdGhzOjpQQVRIX0NPQkFMVF9TVEFSVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29iYWx0OjpwYXRoczo6UEFUSF9DT0JBTFRfRU5EKTsKLQogICByZXR1cm4gdGVzdF9zdWl0ZS5SdW4oKTsKIH0KIH0gIC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvY29iYWx0L3Rlc3QvdGVzdC5neXBpIGIvY29iYWx0L3Rlc3QvdGVzdC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGY0ZTM4Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gIF0sCi0gICdzb3VyY2VzJzogWwotICAgICc8KERFUFRIKS9jb2JhbHQvdGVzdC9ydW5fYWxsX3VuaXR0ZXN0cy5jYycsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvdG9vbHMvX2Vudi5weSBiL2NvYmFsdC90b29scy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE5MDhlLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC90b29scy9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCi0gIHN5cy5leGl0KDEpCi1sb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL2NvYmFsdC90b29scy9hdXRvbWF0ZWRfdGVzdGluZy9fZW52LnB5IGIvY29iYWx0L3Rvb2xzL2F1dG9tYXRlZF90ZXN0aW5nL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3Rvb2xzL2F1dG9tYXRlZF90ZXN0aW5nL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWltcG9ydCBzeXMKLQotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvY29iYWx0L3Rvb2xzL2F1dG9tYXRlZF90ZXN0aW5nL2NvYmFsdF9ydW5uZXIucHkgYi9jb2JhbHQvdG9vbHMvYXV0b21hdGVkX3Rlc3RpbmcvY29iYWx0X3J1bm5lci5weQppbmRleCAxYzI2YWUzLi5lZmRjYzA2IDEwMDY0NAotLS0gYS9jb2JhbHQvdG9vbHMvYXV0b21hdGVkX3Rlc3RpbmcvY29iYWx0X3J1bm5lci5weQorKysgYi9jb2JhbHQvdG9vbHMvYXV0b21hdGVkX3Rlc3RpbmcvY29iYWx0X3J1bm5lci5weQpAQCAtMSwzICsxLDE2IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICIiIkxhdW5jaGVzIENvYmFsdCBhbmQgcnVucyB3ZWJkcml2ZXItYmFzZWQgQ29iYWx0IHRlc3RzLiIiIgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApAQCAtOCwxMyArMjEsMTIgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCByZQorZnJvbSBzaXgubW92ZXMgaW1wb3J0IF90aHJlYWQKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgdGhyZWFkCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIGNvYmFsdC50b29scy5hdXRvbWF0ZWRfdGVzdGluZyBpbXBvcnQgY192YWxfbmFtZXMKIGZyb20gY29iYWx0LnRvb2xzLmF1dG9tYXRlZF90ZXN0aW5nIGltcG9ydCB3ZWJkcml2ZXJfdXRpbHMKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBhYnN0cmFjdF9sYXVuY2hlcgpAQCAtMTE2LDcgKzEyOCw3IEBACiAgICAgc2VsZi5sb2dfaGFuZGxlciA9IGxvZ19oYW5kbGVyCiAKICAgICBpZiBsb2dfZmlsZToKLSAgICAgIHNlbGYubG9nX2ZpbGUgPSBvcGVuKGxvZ19maWxlKQorICAgICAgc2VsZi5sb2dfZmlsZSA9IG9wZW4obG9nX2ZpbGUpICAjIHB5bGludDogZGlzYWJsZT1jb25zaWRlci11c2luZy13aXRoCiAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKHN0cmVhbT1zZWxmLmxvZ19maWxlLCBsZXZlbD1sb2dnaW5nLklORk8pCiAgICAgZWxzZToKICAgICAgIHNlbGYubG9nX2ZpbGUgPSBzeXMuc3Rkb3V0CkBAIC0yMTksNyArMjMxLDcgQEAKICAgICAgICAgY29udGludWUKIAogICAgICAgcG9ydCA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICBsb2dnaW5nLmluZm8oJ1dlYkRyaXZlciBwb3J0IG9wZW5lZDonICsgcG9ydCArICdcbicpCisgICAgICBsb2dnaW5nLmluZm8oJ1dlYkRyaXZlciBwb3J0IG9wZW5lZDogJXMnLCBwb3J0KQogICAgICAgc2VsZi5fU3RhcnRXZWJkcml2ZXIocG9ydCkKIAogICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtMjYxLDcgKzI3Myw3IEBACiAgICAgdHJ5OgogICAgICAgc2VsZi5XYWl0Rm9yU3RhcnQoKQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICMgcG90ZW50aWFsbHkgZnJvbSB0aHJlYWQuaW50ZXJydXB0X21haW4oKS4gV2Ugd2lsbCB0cmVhdCBhcworICAgICAgIyBwb3RlbnRpYWxseSBmcm9tIF90aHJlYWQuaW50ZXJydXB0X21haW4oKS4gV2Ugd2lsbCB0cmVhdCBhcwogICAgICAgIyBhIHRpbWVvdXQgcmVnYXJkbGVzcy4KIAogICAgICAgc2VsZi5FeGl0KHNob3VsZF9mYWlsPVRydWUpCkBAIC0yOTEsNyArMzAzLDcgQEAKICAgICBpZiBzZWxmLkNhbkV4ZWN1dGVKYXZhU2NyaXB0KCk6CiAgICAgICB0cnk6CiAgICAgICAgIHNlbGYuRXhlY3V0ZUphdmFTY3JpcHQoJ3dpbmRvdy5jbG9zZSgpOycpCi0gICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgICB3YWl0X2Zvcl9ydW5uZXJfdGhyZWFkID0gRmFsc2UKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKICAgICAgICAgICAgICcqKipBbiBleGNlcHRpb24gd2FzIHJhaXNlZCB3aGlsZSB0cnlpbmcgdG8gY2xvc2UgdGhlIGFwcDonKQpAQCAtMjk5LDcgKzMxMSw3IEBACiAKICAgICBpZiB3YWl0X2Zvcl9ydW5uZXJfdGhyZWFkOgogICAgICAgc2VsZi5ydW5uZXJfdGhyZWFkLmpvaW4oQ09CQUxUX0VYSVRfVElNRU9VVF9TRUNPTkRTKQotICAgIGlmIHNlbGYucnVubmVyX3RocmVhZC5pc0FsaXZlKCk6CisgICAgaWYgc2VsZi5ydW5uZXJfdGhyZWFkLmlzX2FsaXZlKCk6CiAgICAgICBzeXMuc3RkZXJyLndyaXRlKAogICAgICAgICAgICcqKipSdW5uZXIgdGhyZWFkIHN0aWxsIGFsaXZlIGFmdGVyIHNlbmRpbmcgZ3JhY2VmdWwgc2h1dGRvd24gJwogICAgICAgICAgICdjb21tYW5kLCB0cnkgYWdhaW4gYnkga2lsbGluZyBhcHAqKipcbicpCkBAIC0zMDcsNyArMzE5LDcgQEAKICAgICAjIE9uY2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZSBoYXMgYmVlbiBjbG9zZWQgYnkgdGhlIGxhdW5jaGVyLCB0aGUgcmVhZGVyCiAgICAgIyB0aHJlYWQgd2lsbCBnZXQgRU9GIGFuZCBleGl0LgogICAgIHNlbGYucmVhZGVyX3RocmVhZC5qb2luKENPQkFMVF9FWElUX1RJTUVPVVRfU0VDT05EUykKLSAgICBpZiBzZWxmLnJlYWRlcl90aHJlYWQuaXNBbGl2ZSgpOgorICAgIGlmIHNlbGYucmVhZGVyX3RocmVhZC5pc19hbGl2ZSgpOgogICAgICAgc3lzLnN0ZGVyci53cml0ZSgnKioqUmVhZGVyIHRocmVhZCBzdGlsbCBhbGl2ZSwgZXhpdGluZyBhbnl3YXkqKipcbicpCiAgICAgdHJ5OgogICAgICAgc2VsZi5sYXVuY2hlcl9yZWFkX3BpcGUuY2xvc2UoKQpAQCAtMzUyLDcgKzM2NCw3IEBACiAgICAgICBpZiBub3Qgc2VsZi5zaG91bGRfZXhpdC5pc19zZXQoKToKICAgICAgICAgIyBJZiB0aGUgbWFpbiB0aHJlYWQgaXMgbm90IGV4cGVjdGluZyB1cyB0byBleGl0LAogICAgICAgICAjIHdlIG11c3QgaW50ZXJydXB0IGl0LgotICAgICAgICB0aHJlYWQuaW50ZXJydXB0X21haW4oKQorICAgICAgICBfdGhyZWFkLmludGVycnVwdF9tYWluKCkKICAgICByZXR1cm4gMAogCiAgIGRlZiBDYW5FeGVjdXRlSmF2YVNjcmlwdChzZWxmKToKQEAgLTQzNCw3ICs0NDYsNyBAQAogICAgICAgVW5kZXJseWluZyBXZWJEcml2ZXIgZXhjZXB0aW9ucwogICAgICIiIgogICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgIHdoaWxlICgobm90IHNlbGYuRmluZEVsZW1lbnRzKGNzc19zZWxlY3RvcikpIGFuZAorICAgIHdoaWxlIChub3Qgc2VsZi5GaW5kRWxlbWVudHMoY3NzX3NlbGVjdG9yKSBhbmQKICAgICAgICAgICAgKHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IFBBR0VfTE9BRF9XQUlUX1NFQ09ORFMpKToKICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICBpZiBleHBlY3RlZF9udW06CkBAIC00ODksNyArNTAxLDcgQEAKICAgICAgIGlmIHJldHJ5X2NvdW50ID49IEZJTkRfRUxFTUVOVF9SRVRSWV9MSU1JVDoKICAgICAgICAgcmFpc2UgVGltZW91dEV4Y2VwdGlvbigKICAgICAgICAgICAgICdTZWxlbml1bSBlbGVtZW50IG9yIHdpbmRvdyBub3QgZm91bmQgaW4ge30gdHJpZXMnLmZvcm1hdCgKLSAgICAgICAgICAgICAgICBGSU5EX0VMRU1FTlRfUkVUUllfTElNSVQpKQorICAgICAgICAgICAgICAgIHJldHJ5X2NvdW50KSkKICAgICAgIHJldHJ5X2NvdW50ICs9IDEKICAgICAgIHRyeToKICAgICAgICAgZWxlbWVudHMgPSBzZWxmLndlYmRyaXZlci5maW5kX2VsZW1lbnRzX2J5X2Nzc19zZWxlY3Rvcihjc3Nfc2VsZWN0b3IpCkBAIC01MDQsNiArNTE2LDI3IEBACiAgICAgICAgICAgICAgIGNzc19zZWxlY3RvciwgZXhwZWN0ZWRfbnVtLCBsZW4oZWxlbWVudHMpKSkKICAgICByZXR1cm4gZWxlbWVudHMKIAorICBkZWYgV2FpdEZvckFjdGl2ZUVsZW1lbnQoc2VsZik6CisgICAgIiIiV2FpdHMgdW50aWwgdGhlcmUgaXMgYW4gYWN0aXZlIGVsZW1lbnQuIiIiCisgICAgcmV0cnlfY291bnQgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgIGlmIHJldHJ5X2NvdW50ID49IEZJTkRfRUxFTUVOVF9SRVRSWV9MSU1JVDoKKyAgICAgICAgcmFpc2UgVGltZW91dEV4Y2VwdGlvbigKKyAgICAgICAgICAgICdTZWxlbml1bSBhY3RpdmUgZWxlbWVudCBub3QgZm91bmQgaW4ge30gdHJpZXMnLmZvcm1hdChyZXRyeV9jb3VudCkpCisgICAgICByZXRyeV9jb3VudCArPSAxCisgICAgICB0cnk6CisgICAgICAgIGVsZW1lbnQgPSBzZWxmLndlYmRyaXZlci5zd2l0Y2hfdG8uYWN0aXZlX2VsZW1lbnQKKyAgICAgIGV4Y2VwdCAoc2VsZW5pdW1fZXhjZXB0aW9ucy5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uLAorICAgICAgICAgICAgICBzZWxlbml1bV9leGNlcHRpb25zLk5vU3VjaFdpbmRvd0V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgc2VsZW5pdW1fZXhjZXB0aW9ucy5XZWJEcml2ZXJFeGNlcHRpb24pOgorICAgICAgICB0aW1lLnNsZWVwKDAuMikKKyAgICAgICAgY29udGludWUKKyAgICAgIGlmIG5vdCBlbGVtZW50OgorICAgICAgICB0aW1lLnNsZWVwKDAuMikKKyAgICAgICAgY29udGludWUKKyAgICAgIGJyZWFrCisgICAgcmV0dXJuIGVsZW1lbnQKKwogICBkZWYgU2VuZEtleXMoc2VsZiwga2V5X2V2ZW50cyk6CiAgICAgIiIiU2VuZHMga2V5cyB0byB3aGljaGV2ZXIgZWxlbWVudCBjdXJyZW50bHkgaGFzIGZvY3VzLgogCmRpZmYgLS1naXQgYS9jb2JhbHQvdG9vbHMvZGVwc19zdWJzdGl0dXRpb25zLnR4dCBiL2NvYmFsdC90b29scy9kZXBzX3N1YnN0aXR1dGlvbnMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODI0Zjc5Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC90b29scy9kZXBzX3N1YnN0aXR1dGlvbnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08KERFUFRIKS9zdGFyYm9hcmQvZXhhbXBsZXMvZ2xjbGVhci9nbGNsZWFyLmd5cDpzdGFyYm9hcmRfZ2xjbGVhcl9leGFtcGxlCS8vc3RhcmJvYXJkL2V4YW1wbGVzL2dsY2xlYXIKLTwoREVQVEgpL3N0YXJib2FyZC9leGFtcGxlcy93aW5kb3cvd2luZG93Lmd5cDpzdGFyYm9hcmRfd2luZG93X2V4YW1wbGUJLy9zdGFyYm9hcmQvZXhhbXBsZXMvd2luZG93CmRpZmYgLS1naXQgYS9jb2JhbHQvdG9vbHMvZW52X3Rlc3QucHkgYi9jb2JhbHQvdG9vbHMvZW52X3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA5MGRmYTQuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3Rvb2xzL2Vudl90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIlRlc3RzIG91dCBfZW52LiIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotCi1jbGFzcyBFbnZpcm9ubWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiB0ZXN0U3lzUGF0aChzZWxmKToKLSAgICBpbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlLGctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBpbXBvcnQgY29iYWx0LnRvb2xzLnBhdGhzICAjIHB5bGludDogZGlzYWJsZT1nLWltcG9ydC1ub3QtYXQtdG9wCi0gICAgc2VsZi5hc3NlcnRUcnVlKGNvYmFsdC50b29scy5wYXRocy5DT0JBTFRfUk9PVCkKLQotICBkZWYgdGVzdE5vRHVwZXMoc2VsZik6Ci0gICAgaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZSxnLWltcG9ydC1ub3QtYXQtdG9wCi0gICAgdmlzaXRlZCA9IHNldCgpCi0gICAgZGVkdXBlZCA9IFt4IGZvciB4IGluIHN5cy5wYXRoIGlmIG5vdCAoeCBpbiB2aXNpdGVkIG9yIHZpc2l0ZWQuYWRkKHgpKV0KLSAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc3lzLnBhdGgsIGRlZHVwZWQpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9jb2JhbHQvdG9vbHMvcGF0aHMucHkgYi9jb2JhbHQvdG9vbHMvcGF0aHMucHkKaW5kZXggMzUzOTE4Yy4uNTdjYjRjMyAxMDA2NDQKLS0tIGEvY29iYWx0L3Rvb2xzL3BhdGhzLnB5CisrKyBiL2NvYmFsdC90b29scy9wYXRocy5weQpAQCAtMTcsNyArMTcsNiBAQAogCiBmcm9tIG9zIGltcG9ydCBwYXRoCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGF0aHMKIAogU1RBUkJPQVJEX1JPT1QgPSBwYXRocy5TVEFSQk9BUkRfUk9PVApkaWZmIC0tZ2l0IGEvY29iYWx0L3RyYWNlX2V2ZW50L3Njb3BlZF90cmFjZV90b19maWxlLmNjIGIvY29iYWx0L3RyYWNlX2V2ZW50L3Njb3BlZF90cmFjZV90b19maWxlLmNjCmluZGV4IGQ1ZDNkOWQuLmZmYmU5NDggMTAwNjQ0Ci0tLSBhL2NvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5jYworKysgYi9jb2JhbHQvdHJhY2VfZXZlbnQvc2NvcGVkX3RyYWNlX3RvX2ZpbGUuY2MKQEAgLTI4LDEyICsyOCwxNyBAQAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgdHJhY2VfZXZlbnQgewogCisvLyBzdGF0aWMKK2Jhc2U6OkZpbGVQYXRoIFNjb3BlZFRyYWNlVG9GaWxlOjpmaWxlcGF0aF90b19hYnNvbHV0ZSgKKyAgICBjb25zdCBiYXNlOjpGaWxlUGF0aCYgb3V0cHV0X3BhdGhfcmVsYXRpdmVfdG9fbG9ncykgeworICBiYXNlOjpGaWxlUGF0aCByZXN1bHQ7CisgIGJhc2U6OlBhdGhTZXJ2aWNlOjpHZXQoY29iYWx0OjpwYXRoczo6RElSX0NPQkFMVF9ERUJVR19PVVQsICZyZXN1bHQpOworICByZXR1cm4gcmVzdWx0LkFwcGVuZChvdXRwdXRfcGF0aF9yZWxhdGl2ZV90b19sb2dzKTsKK30KKwogU2NvcGVkVHJhY2VUb0ZpbGU6OlNjb3BlZFRyYWNlVG9GaWxlKAogICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBvdXRwdXRfcGF0aF9yZWxhdGl2ZV90b19sb2dzKSB7Ci0gIGJhc2U6OlBhdGhTZXJ2aWNlOjpHZXQoY29iYWx0OjpwYXRoczo6RElSX0NPQkFMVF9ERUJVR19PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmFic29sdXRlX291dHB1dF9wYXRoXyk7Ci0gIGFic29sdXRlX291dHB1dF9wYXRoXyA9Ci0gICAgICBhYnNvbHV0ZV9vdXRwdXRfcGF0aF8uQXBwZW5kKG91dHB1dF9wYXRoX3JlbGF0aXZlX3RvX2xvZ3MpOworICBhYnNvbHV0ZV9vdXRwdXRfcGF0aF8gPSBmaWxlcGF0aF90b19hYnNvbHV0ZShvdXRwdXRfcGF0aF9yZWxhdGl2ZV90b19sb2dzKTsKIAogICBEQ0hFQ0soIWJhc2U6OnRyYWNlX2V2ZW50OjpUcmFjZUxvZzo6R2V0SW5zdGFuY2UoKS0+SXNFbmFibGVkKCkpOwogICBiYXNlOjp0cmFjZV9ldmVudDo6VHJhY2VMb2c6OkdldEluc3RhbmNlKCktPlNldEVuYWJsZWQoCmRpZmYgLS1naXQgYS9jb2JhbHQvdHJhY2VfZXZlbnQvc2NvcGVkX3RyYWNlX3RvX2ZpbGUuaCBiL2NvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5oCmluZGV4IDQ5YzY0MTMuLmQwMzIxNmYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5oCisrKyBiL2NvYmFsdC90cmFjZV9ldmVudC9zY29wZWRfdHJhY2VfdG9fZmlsZS5oCkBAIC0zOCw2ICszOCwxMCBAQAogICAgIHJldHVybiBhYnNvbHV0ZV9vdXRwdXRfcGF0aF87CiAgIH0KIAorICAvLyBSZXR1cm5zIGFic29sdXRlIG91dHB1dCBwYXRoIGZyb20gcmVsYXRpdmUgZmlsZW5hbWUKKyAgc3RhdGljIGJhc2U6OkZpbGVQYXRoIGZpbGVwYXRoX3RvX2Fic29sdXRlKAorICAgICAgY29uc3QgYmFzZTo6RmlsZVBhdGgmIG91dHB1dF9wYXRoX3JlbGF0aXZlX3RvX2xvZ3MpOworCiAgcHJpdmF0ZToKICAgYmFzZTo6RmlsZVBhdGggYWJzb2x1dGVfb3V0cHV0X3BhdGhfOwogfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC90cmFjZV9ldmVudC90cmFjZV9ldmVudC5neXAgYi9jb2JhbHQvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmI0ZWY3Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC90cmFjZV9ldmVudC90cmFjZV9ldmVudC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICAjIENvYmFsdC1zcGVjaWZpYyBzdXBwb3J0IGZvciBkZWFsaW5nIHdpdGggQ2hyb21pdW0ncyB0cmFjaW5nIHN5c3RlbS4KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndHJhY2VfZXZlbnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdqc29uX2ZpbGVfb3V0cHV0dGVyLmNjJywKLSAgICAgICAgJ2pzb25fZmlsZV9vdXRwdXR0ZXIuaCcsCi0gICAgICAgICdzY29wZWRfdHJhY2VfdG9fZmlsZS5jYycsCi0gICAgICAgICdzY29wZWRfdHJhY2VfdG9fZmlsZS5oJywKLSAgICAgICAgJ3N3aXRjaGVzLmNjJywKLSAgICAgICAgJ3N3aXRjaGVzLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3VpX25hdmlnYXRpb24vaW50ZXJmYWNlLmNjIGIvY29iYWx0L3VpX25hdmlnYXRpb24vaW50ZXJmYWNlLmNjCmluZGV4IDMyNmFlNTEuLmQ4MzNkN2QgMTAwNjQ0Ci0tLSBhL2NvYmFsdC91aV9uYXZpZ2F0aW9uL2ludGVyZmFjZS5jYworKysgYi9jb2JhbHQvdWlfbmF2aWdhdGlvbi9pbnRlcmZhY2UuY2MKQEAgLTg2LDggKzg2LDYgQEAKIAogTmF0aXZlSW50ZXJmYWNlIEluaXRpYWxpemVJbnRlcmZhY2UoKSB7CiAgIE5hdGl2ZUludGVyZmFjZSBpbnRlcmZhY2UgPSB7MH07Ci0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBTYlVpTmF2SW50ZXJmYWNlIHNiX3VpX2ludGVyZmFjZSA9IHswfTsKICAgaWYgKFNiVWlOYXZHZXRJbnRlcmZhY2UoJnNiX3VpX2ludGVyZmFjZSkpIHsKICAgICBpbnRlcmZhY2UuY3JlYXRlX2l0ZW0gPSBzYl91aV9pbnRlcmZhY2UuY3JlYXRlX2l0ZW07CkBAIC0xMTQsNyArMTEyLDYgQEAKICNlbmRpZgogICAgIHJldHVybiBpbnRlcmZhY2U7CiAgIH0KLSNlbmRpZgogCiAgIGludGVyZmFjZS5jcmVhdGVfaXRlbSA9ICZDcmVhdGVJdGVtOwogICBpbnRlcmZhY2UuZGVzdHJveV9pdGVtID0gJkRlc3Ryb3lJdGVtOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3VpX25hdmlnYXRpb24vaW50ZXJmYWNlLmggYi9jb2JhbHQvdWlfbmF2aWdhdGlvbi9pbnRlcmZhY2UuaAppbmRleCBjOGIwZDk2Li5lYzhiNzFiIDEwMDY0NAotLS0gYS9jb2JhbHQvdWlfbmF2aWdhdGlvbi9pbnRlcmZhY2UuaAorKysgYi9jb2JhbHQvdWlfbmF2aWdhdGlvbi9pbnRlcmZhY2UuaApAQCAtMjEsOCArMjEsNiBAQAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2UgdWlfbmF2aWdhdGlvbiB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyBBbGlhcyB0aGUgc3RhcmJvYXJkIGludGVyZmFjZS4gU2VlIHN0YXJib2FyZC91aV9uYXZpZ2F0aW9uLmggZm9yIGRldGFpbHMuCiB1c2luZyBOYXRpdmVJdGVtID0gU2JVaU5hdkl0ZW07CiB1c2luZyBOYXRpdmVJdGVtVHlwZSA9IFNiVWlOYXZJdGVtVHlwZTsKQEAgLTM0LDM5ICszMiw2IEBACiB1c2luZyBOYXRpdmVDYWxsYmFja3MgPSBTYlVpTmF2Q2FsbGJhY2tzOwogI2RlZmluZSBrTmF0aXZlSXRlbUludmFsaWQga1NiVWlOYXZJdGVtSW52YWxpZAogCi0jZWxzZQotCi0vLyBNaW1pYyB0aGUgc3RhcmJvYXJkIGludGVyZmFjZS4gU2VlIHN0YXJib2FyZC91aV9uYXZpZ2F0aW9uLmggZm9yIGRldGFpbHMuCi10eXBlZGVmIHZvaWQqIE5hdGl2ZUl0ZW07Ci0KLWVudW0gTmF0aXZlSXRlbVR5cGUgewotICBrTmF0aXZlSXRlbVR5cGVGb2N1cywKLSAga05hdGl2ZUl0ZW1UeXBlQ29udGFpbmVyLAotfTsKLQotc3RydWN0IE5hdGl2ZUl0ZW1EaXIgewotICBib29sIGlzX2xlZnRfdG9fcmlnaHQ7Ci0gIGJvb2wgaXNfdG9wX3RvX2JvdHRvbTsKLX07Ci0KLXN0cnVjdCBOYXRpdmVNYXRyaXgyeDMgewotICBmbG9hdCBtWzZdOwotfTsKLQotc3RydWN0IE5hdGl2ZU1hdHJpeDQgewotICBmbG9hdCBtWzE2XTsKLX07Ci0KLXN0cnVjdCBOYXRpdmVDYWxsYmFja3MgewotICB2b2lkICgqb25ibHVyKShOYXRpdmVJdGVtIGl0ZW0sIHZvaWQqIGNhbGxiYWNrX2NvbnRleHQpOwotICB2b2lkICgqb25mb2N1cykoTmF0aXZlSXRlbSBpdGVtLCB2b2lkKiBjYWxsYmFja19jb250ZXh0KTsKLSAgdm9pZCAoKm9uc2Nyb2xsKShOYXRpdmVJdGVtIGl0ZW0sIHZvaWQqIGNhbGxiYWNrX2NvbnRleHQpOwotfTsKLQotI2RlZmluZSBrTmF0aXZlSXRlbUludmFsaWQgbnVsbHB0cgotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIHN0cnVjdCBOYXRpdmVJbnRlcmZhY2UgewogICBOYXRpdmVJdGVtICgqY3JlYXRlX2l0ZW0pKE5hdGl2ZUl0ZW1UeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmF0aXZlQ2FsbGJhY2tzKiBjYWxsYmFja3MsCmRpZmYgLS1naXQgYS9jb2JhbHQvdWlfbmF2aWdhdGlvbi91aV9uYXZpZ2F0aW9uLmd5cCBiL2NvYmFsdC91aV9uYXZpZ2F0aW9uL3VpX25hdmlnYXRpb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWE5OTNjLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC91aV9uYXZpZ2F0aW9uL3VpX25hdmlnYXRpb24uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndWlfbmF2aWdhdGlvbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2ludGVyZmFjZS5jYycsCi0gICAgICAgICdpbnRlcmZhY2UuaCcsCi0gICAgICAgICduYXZfaXRlbS5jYycsCi0gICAgICAgICduYXZfaXRlbS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9jb2JhbHQvdXBkYXRlci9CVUlMRC5nbiBiL2NvYmFsdC91cGRhdGVyL0JVSUxELmduCmluZGV4IDgzZjY5YzEuLmI3ODIyM2UgMTAwNjQ0Ci0tLSBhL2NvYmFsdC91cGRhdGVyL0JVSUxELmduCisrKyBiL2NvYmFsdC91cGRhdGVyL0JVSUxELmduCkBAIC00OSw2ICs0OSw3IEBACiAgICAgIi8vc3RhcmJvYXJkL2NvbW1vbiIsCiAgICAgIi8vc3RhcmJvYXJkL2xvYWRlcl9hcHA6YXBwX2tleV9maWxlcyIsCiAgICAgIi8vc3RhcmJvYXJkL2xvYWRlcl9hcHA6ZHJhaW5fZmlsZSIsCisgICAgIi8vdGhpcmRfcGFydHkvbHo0X2xpYjpsejQiLAogICAgICIvL3RoaXJkX3BhcnR5L3psaWI6emlwIiwKICAgICAiLy91cmwiLAogICBdCkBAIC04NSwzICs4NiwxNSBAQAogICBzb3VyY2VzID0gWyAibm9vcF9zYW5kYm94LmNjIiBdCiAgIGRlcHMgPSBbICIvL3N0YXJib2FyZCIgXQogfQorCit0YXJnZXQoZmluYWxfZXhlY3V0YWJsZV90eXBlLCAib25lX2FwcF9vbmx5X3NhbmRib3giKSB7CisgIHNvdXJjZXMgPSBbICJvbmVfYXBwX29ubHlfc2FuZGJveC5jYyIgXQorICBkZXBzID0gWworICAgICIvL2NvYmFsdC9iYXNlIiwKKyAgICAiLy9jb2JhbHQvYnJvd3NlciIsCisgICAgIi8vY29iYWx0L2Jyb3dzZXI6YnJvd3Nlcl9zd2l0Y2hlcyIsCisgICAgIi8vbmV0IiwKKyAgICAiLy9zdGFyYm9hcmQiLAorICAgICIvL3N0YXJib2FyZC9sb2FkZXJfYXBwOmFwcF9rZXkiLAorICBdCit9CmRpZmYgLS1naXQgYS9jb2JhbHQvdXBkYXRlci9jb25maWd1cmF0b3IuY2MgYi9jb2JhbHQvdXBkYXRlci9jb25maWd1cmF0b3IuY2MKaW5kZXggZTgyM2JiZi4uMmUwZjk4YyAxMDA2NDQKLS0tIGEvY29iYWx0L3VwZGF0ZXIvY29uZmlndXJhdG9yLmNjCisrKyBiL2NvYmFsdC91cGRhdGVyL2NvbmZpZ3VyYXRvci5jYwpAQCAtNDUsNiArNDUsMTEgQEAKICAgcmV0dXJuIHByb3A7CiB9CiAKK2Jvb2wgQ29tcHJlc3NVcGRhdGUoKSB7CisgIHJldHVybiBiYXNlOjpDb21tYW5kTGluZTo6Rm9yQ3VycmVudFByb2Nlc3MoKS0+SGFzU3dpdGNoKAorICAgICAgY29iYWx0Ojpicm93c2VyOjpzd2l0Y2hlczo6a0NvbXByZXNzVXBkYXRlKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlCiAKIG5hbWVzcGFjZSBjb2JhbHQgewpAQCAtNTUsNyArNjAsNyBAQAogICAgICAgcGVyc2lzdGVkX2RhdGFfKHN0ZDo6bWFrZV91bmlxdWU8dXBkYXRlX2NsaWVudDo6UGVyc2lzdGVkRGF0YT4oCiAgICAgICAgICAgcHJlZl9zZXJ2aWNlXy5nZXQoKSwgbnVsbHB0cikpLAogICAgICAgaXNfY2hhbm5lbF9jaGFuZ2VkXygwKSwKLSAgICAgIHVuemlwX2ZhY3RvcnlfKGJhc2U6Ok1ha2VSZWZDb3VudGVkPFVuemlwcGVyRmFjdG9yeT4oKSksCisgICAgICB1bnppcF9mYWN0b3J5XyhiYXNlOjpNYWtlUmVmQ291bnRlZDxVbnppcHBlckZhY3Rvcnk+KENvbXByZXNzVXBkYXRlKCkpKSwKICAgICAgIG5ldHdvcmtfZmV0Y2hlcl9mYWN0b3J5XygKICAgICAgICAgICBiYXNlOjpNYWtlUmVmQ291bnRlZDxOZXR3b3JrRmV0Y2hlckZhY3RvcnlDb2JhbHQ+KG5ldHdvcmtfbW9kdWxlKSksCiAgICAgICBwYXRjaF9mYWN0b3J5XyhiYXNlOjpNYWtlUmVmQ291bnRlZDxQYXRjaGVyRmFjdG9yeT4oKSkgewpkaWZmIC0tZ2l0IGEvY29iYWx0L3VwZGF0ZXIvY29uZmlndXJhdG9yLmggYi9jb2JhbHQvdXBkYXRlci9jb25maWd1cmF0b3IuaAppbmRleCBiN2VkOWU3Li41NGJiNmMwIDEwMDY0NAotLS0gYS9jb2JhbHQvdXBkYXRlci9jb25maWd1cmF0b3IuaAorKysgYi9jb2JhbHQvdXBkYXRlci9jb25maWd1cmF0b3IuaApAQCAtMTE1LDcgKzExNSw3IEBACiAgIHN0ZDo6c3RyaW5nIHByZXZpb3VzX3VwZGF0ZXJfc3RhdHVzXzsKICAgYmFzZTo6TG9jayBwcmV2aW91c191cGRhdGVyX3N0YXR1c19sb2NrXzsKICAgc3RkOjpzdHJpbmcgdXNlcl9hZ2VudF9zdHJpbmdfOwotICB1aW50NjRfdCBtaW5fZnJlZV9zcGFjZV9ieXRlc18gPSA2NCAqIDEwMjQgKiAxMDI0OworICB1aW50NjRfdCBtaW5fZnJlZV9zcGFjZV9ieXRlc18gPSA0OCAqIDEwMjQgKiAxMDI0OwogICBiYXNlOjpMb2NrIG1pbl9mcmVlX3NwYWNlX2J5dGVzX2xvY2tfOwogCiAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb25maWd1cmF0b3IpOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3VwZGF0ZXIvb25lX2FwcF9vbmx5X3NhbmRib3guZ3lwIGIvY29iYWx0L3VwZGF0ZXIvb25lX2FwcF9vbmx5X3NhbmRib3guZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk5ZDI2Li4wMDAwMDAwCi0tLSBhL2NvYmFsdC91cGRhdGVyL29uZV9hcHBfb25seV9zYW5kYm94Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdvbmVfYXBwX29ubHlfc2FuZGJveCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXIuZ3lwOmJyb3dzZXInLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXkuZ3lwOmFwcF9rZXknLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ29uZV9hcHBfb25seV9zYW5kYm94LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnb25lX2FwcF9vbmx5X3NhbmRib3hfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ29uZV9hcHBfb25seV9zYW5kYm94JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ29uZV9hcHBfb25seV9zYW5kYm94JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXQotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3VwZGF0ZXIvdW56aXBwZXIuY2MgYi9jb2JhbHQvdXBkYXRlci91bnppcHBlci5jYwppbmRleCAxODU1YjNhLi42NGM4MzdmIDEwMDY0NAotLS0gYS9jb2JhbHQvdXBkYXRlci91bnppcHBlci5jYworKysgYi9jb2JhbHQvdXBkYXRlci91bnppcHBlci5jYwpAQCAtMTUsMjIgKzE1LDIyNCBAQAogI2luY2x1ZGUgImNvYmFsdC91cGRhdGVyL3VuemlwcGVyLmgiCiAKICNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImJhc2UvYmluZC5oIgogI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKKyNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGUuaCIKICNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfcGF0aC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9ldmVudC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9sejRfbGliL2x6NGZyYW1lLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvemxpYi9nb29nbGUvemlwLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvemxpYi9nb29nbGUvemlwX3JlYWRlci5oIgogCiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSB1cGRhdGVyIHsKIAogbmFtZXNwYWNlIHsKIAorY29uc3RleHByIHNpemVfdCBrQ2h1bmtTaXplID0gOCAqIDEwMjQ7Citjb25zdGV4cHIgTFo0Rl9wcmVmZXJlbmNlc190IGtQcmVmcyA9IHsKKyAgICB7TFo0Rl9tYXgyNTZLQiwgTFo0Rl9ibG9ja0xpbmtlZCwgTFo0Rl9ub0NvbnRlbnRDaGVja3N1bSwgTFo0Rl9mcmFtZSwKKyAgICAgMCAvKiB1bmtub3duIGNvbnRlbnQgc2l6ZSAqLywgMCAvKiBubyBkaWN0SUQgKi8sIExaNEZfbm9CbG9ja0NoZWNrc3VtfSwKKyAgICAwLAorICAgIC8qIGNvbXByZXNzaW9uIGxldmVsOyAwID09IGRlZmF1bHQgKi8gMCwKKyAgICAvKiBhdXRvZmx1c2ggKi8gMCwKKyAgICAvKiBmYXZvciBkZWNvbXByZXNzaW9uIHNwZWVkICovIHswLCAwLCAwfSwKKyAgICAvKiByZXNlcnZlZCwgbXVzdCBiZSBzZXQgdG8gMCAqL307CisKK2NsYXNzIExaNFdyaXRlckRlbGVnYXRlIDogcHVibGljIHppcDo6V3JpdGVyRGVsZWdhdGUgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgTFo0V3JpdGVyRGVsZWdhdGUoY29uc3QgYmFzZTo6RmlsZVBhdGgmIG91dHB1dF9maWxlX3BhdGgpCisgICAgICA6IG91dHB1dF9maWxlX3BhdGhfKG91dHB1dF9maWxlX3BhdGgpIHt9CisKKyAgYm9vbCBQcmVwYXJlT3V0cHV0KCkgb3ZlcnJpZGUgeworICAgIGlmICghYmFzZTo6Q3JlYXRlRGlyZWN0b3J5KG91dHB1dF9maWxlX3BhdGhfLkRpck5hbWUoKSkpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvdXRwdXRfZmlsZV9wYXRoXyA9IG91dHB1dF9maWxlX3BhdGhfLlJlcGxhY2VFeHRlbnNpb24oImx6NCIpOworCisgICAgTE9HKElORk8pIDw8ICJMWjRXcml0ZXJEZWxlZ2F0ZTo6UHJlcGFyZU91dHB1dDogb3V0cHV0X2ZpbGVfcGF0aF89IgorICAgICAgICAgICAgICA8PCBvdXRwdXRfZmlsZV9wYXRoXy52YWx1ZSgpOworICAgIGZpbGVfLkluaXRpYWxpemUob3V0cHV0X2ZpbGVfcGF0aF8sCisgICAgICAgICAgICAgICAgICAgICBiYXNlOjpGaWxlOjpGTEFHX0NSRUFURV9BTFdBWVMgfCBiYXNlOjpGaWxlOjpGTEFHX1dSSVRFKTsKKyAgICBpZiAoIWZpbGVfLklzVmFsaWQoKSkgeworICAgICAgTE9HKEVSUk9SKSA8PCAiTFo0V3JpdGVyRGVsZWdhdGU6OlByZXBhcmVPdXRwdXQ6IGludmFsaWQgZmlsZSIKKyAgICAgICAgICAgICAgICAgPDwgb3V0cHV0X2ZpbGVfcGF0aF8udmFsdWUoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMWjRGX2Vycm9yQ29kZV90IHJlcyA9IExaNEZfY3JlYXRlQ29tcHJlc3Npb25Db250ZXh0KCZjdHhfLCBMWjRGX1ZFUlNJT04pOworICAgIGlmIChMWjRGX2lzRXJyb3IocmVzKSkgeworICAgICAgTE9HKEVSUk9SKSA8PCAiTFo0V3JpdGVyRGVsZWdhdGU6OlByZXBhcmVPdXRwdXQ6IGx6NCBlcnJvciBjb2RlPSAiIDw8IHJlczsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvdXRfY2FwYWNpdHlfID0gTFo0Rl9jb21wcmVzc0JvdW5kKGtDaHVua1NpemUsICZrUHJlZnMpOworICAgIExPRyhJTkZPKSA8PCAib3V0X2NhcGFjaXR5PSIgPDwgb3V0X2NhcGFjaXR5XzsKKyAgICBvdXRfYnVmZmVyXy5yZXNpemUob3V0X2NhcGFjaXR5Xyk7CisgICAgaWYgKCFXcml0ZUhlYWRlcigpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJMWjRXcml0ZXJEZWxlZ2F0ZTo6UHJlcGFyZU91dHB1dDogRmFpbGVkIHRvIHdyaXRlIGhlYWRlciI7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisKKyAgYm9vbCBXcml0ZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIGludCBudW1fYnl0ZXMpIG92ZXJyaWRlIHsKKyAgICBMT0coSU5GTykgPDwgIkxaNFdyaXRlckRlbGVnYXRlOjpXcml0ZUJ5dGVzOiBudW1fYnl0ZXM9IiA8PCBudW1fYnl0ZXMKKyAgICAgICAgICAgICAgPDwgIiBvdXRfY2FwYWNpdHk9IiA8PCBvdXRfY2FwYWNpdHlfOworICAgIHNpemVfdCBjb21wcmVzc2VkX3NpemUgPSBMWjRGX2NvbXByZXNzVXBkYXRlKAorICAgICAgICBjdHhfLCBvdXRfYnVmZmVyXy5kYXRhKCksIG91dF9idWZmZXJfLnNpemUoKSwgZGF0YSwgbnVtX2J5dGVzLCBudWxscHRyKTsKKyAgICBpZiAoTFo0Rl9pc0Vycm9yKGNvbXByZXNzZWRfc2l6ZSkpIHsKKyAgICAgIExPRyhFUlJPUikgPDwgIkxaNFdyaXRlckRlbGVnYXRlOjpXcml0ZUJ5dGVzOiBDb21wcmVzc2lvbiBmYWlsZWQ6IGVycm9yICIKKyAgICAgICAgICAgICAgICAgPDwgKHVuc2lnbmVkKWNvbXByZXNzZWRfc2l6ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBMT0coSU5GTykgPDwgIkxaNFdyaXRlckRlbGVnYXRlOjpXcml0ZUJ5dGVzOiBXcml0aW5nICIKKyAgICAgICAgICAgICAgPDwgKHVuc2lnbmVkKWNvbXByZXNzZWRfc2l6ZSA8PCAiIGJ5dGVzICIKKyAgICAgICAgICAgICAgPDwgIihpZiB6ZXJvLCBpbnB1dCBkYXRhIGp1c3QgYnVmZmVyZWQgdG8gTFo0IGludGVybmFsIGJ1ZmZlcikiOworICAgIGlmIChjb21wcmVzc2VkX3NpemUgIT0KKyAgICAgICAgZmlsZV8uV3JpdGVBdEN1cnJlbnRQb3Mob3V0X2J1ZmZlcl8uZGF0YSgpLCBjb21wcmVzc2VkX3NpemUpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJMWjRXcml0ZXJEZWxlZ2F0ZTo6V3JpdGVCeXRlczogZmFpbGVkIHRvIHdyaXRlICIKKyAgICAgICAgICAgICAgICAgPDwgY29tcHJlc3NlZF9zaXplIDw8ICIgYnl0ZXMiOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHZvaWQgU2V0VGltZU1vZGlmaWVkKGNvbnN0IGJhc2U6OlRpbWUmIHRpbWUpIG92ZXJyaWRlIHsKKyAgICBzaXplX3QgY29tcHJlc3NlZF9zaXplID0KKyAgICAgICAgTFo0Rl9jb21wcmVzc0VuZChjdHhfLCBvdXRfYnVmZmVyXy5kYXRhKCksIG91dF9idWZmZXJfLnNpemUoKSwgbnVsbHB0cik7CisgICAgaWYgKExaNEZfaXNFcnJvcihjb21wcmVzc2VkX3NpemUpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJMWjRXcml0ZXJEZWxlZ2F0ZTo6U2V0VGltZU1vZGlmaWVkOiBGYWlsZWQgdG8gZW5kICIKKyAgICAgICAgICAgICAgICAgICAgImNvbXByZXNzaW9uOiBlcnJvciAiCisgICAgICAgICAgICAgICAgIDw8ICh1bnNpZ25lZCljb21wcmVzc2VkX3NpemU7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKElORk8pIDw8ICJXcml0aW5nICIgPDwgKHVuc2lnbmVkKWNvbXByZXNzZWRfc2l6ZSA8PCAiIGJ5dGVzIjsKKworICAgIGlmIChjb21wcmVzc2VkX3NpemUgIT0KKyAgICAgICAgZmlsZV8uV3JpdGVBdEN1cnJlbnRQb3Mob3V0X2J1ZmZlcl8uZGF0YSgpLCBjb21wcmVzc2VkX3NpemUpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJMWjRXcml0ZXJEZWxlZ2F0ZTo6U2V0VGltZU1vZGlmaWVkOiBmYWlsZWQgdG8gd3JpdGUgIgorICAgICAgICAgICAgICAgICA8PCBjb21wcmVzc2VkX3NpemUgPDwgIiBieXRlcyI7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3VjY2Vzc18gPSB0cnVlOworICB9CisKKyAgYm9vbCBJc1N1Y2Nlc3NmdWwoKSBvdmVycmlkZSB7IHJldHVybiBzdWNjZXNzXzsgfQorCisgIH5MWjRXcml0ZXJEZWxlZ2F0ZSgpIHsKKyAgICBpZiAoY3R4XykgeworICAgICAgTFo0Rl9mcmVlQ29tcHJlc3Npb25Db250ZXh0KGN0eF8pOworICAgIH0KKyAgICBmaWxlXy5DbG9zZSgpOworICB9CisKKyBwcml2YXRlOgorICBib29sIFdyaXRlSGVhZGVyKCkgeworICAgIHNpemVfdCBoZWFkZXJfc2l6ZSA9IExaNEZfY29tcHJlc3NCZWdpbihjdHhfLCBvdXRfYnVmZmVyXy5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9idWZmZXJfLnNpemUoKSwgJmtQcmVmcyk7CisgICAgaWYgKExaNEZfaXNFcnJvcihoZWFkZXJfc2l6ZSkpIHsKKyAgICAgIExPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBzdGFydCBjb21wcmVzc2lvbjogZXJyb3IgIgorICAgICAgICAgICAgICAgICA8PCAodW5zaWduZWQpaGVhZGVyX3NpemU7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIExPRyhJTkZPKSA8PCAiSGVhZGVyIHNpemUgIiA8PCAodW5zaWduZWQpaGVhZGVyX3NpemU7CisgICAgcmV0dXJuIGhlYWRlcl9zaXplID09CisgICAgICAgICAgIGZpbGVfLldyaXRlQXRDdXJyZW50UG9zKG91dF9idWZmZXJfLmRhdGEoKSwgaGVhZGVyX3NpemUpOworICB9CisKKyAgYmFzZTo6RmlsZVBhdGggb3V0cHV0X2ZpbGVfcGF0aF87CisgIGJhc2U6OkZpbGUgZmlsZV87CisgIExaNEZfY29tcHJlc3Npb25Db250ZXh0X3QgY3R4XyA9IG51bGxwdHI7CisgIHN0ZDo6dmVjdG9yPGNoYXI+IG91dF9idWZmZXJfOworICBzaXplX3Qgb3V0X2NhcGFjaXR5XyA9IDY0ICogMTAyNDsKKyAgYm9vbCBzdWNjZXNzXyA9IGZhbHNlOworfTsKKwogY2xhc3MgVW56aXBwZXJJbXBsIDogcHVibGljIHVwZGF0ZV9jbGllbnQ6OlVuemlwcGVyIHsKICBwdWJsaWM6Ci0gIFVuemlwcGVySW1wbCgpID0gZGVmYXVsdDsKKyAgZXhwbGljaXQgVW56aXBwZXJJbXBsKGJvb2wgdXBkYXRlcl9jb21wcmVzc2lvbikKKyAgICAgIDogY29tcHJlc3NfdXBkYXRlXyh1cGRhdGVyX2NvbXByZXNzaW9uKSB7fQogCiAgIHZvaWQgVW56aXAoY29uc3QgYmFzZTo6RmlsZVBhdGgmIHppcF9wYXRoLCBjb25zdCBiYXNlOjpGaWxlUGF0aCYgb3V0cHV0X3BhdGgsCiAgICAgICAgICAgICAgVW56aXBDb21wbGV0ZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZSB7CisgICAgaWYgKGNvbXByZXNzX3VwZGF0ZV8pIHsKKyAgICAgIFVuemlwQW5kTFo0Q29tcHJlc3MoemlwX3BhdGgsIG91dHB1dF9wYXRoLCBzdGQ6Om1vdmUoY2FsbGJhY2spKTsKKyAgICB9IGVsc2UgeworICAgICAgVW56aXBUb1BhdGgoemlwX3BhdGgsIG91dHB1dF9wYXRoLCBzdGQ6Om1vdmUoY2FsbGJhY2spKTsKKyAgICB9CisgIH0KKworICB2b2lkIFVuemlwQW5kTFo0Q29tcHJlc3MoY29uc3QgYmFzZTo6RmlsZVBhdGgmIHppcF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTo6RmlsZVBhdGgmIG91dHB1dF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVW56aXBDb21wbGV0ZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgU2JUaW1lTW9ub3RvbmljIHRpbWVfYmVmb3JlX3VuemlwID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisKKyAgICAvLyBGaWx0ZXIgdG8gdW56aXAganVzdCBsaWJjb2JhbHQuc28KKyAgICBhdXRvIGZpbHRlciA9IGJhc2U6OkJpbmRSZXBlYXRpbmcoW10oY29uc3QgYmFzZTo6RmlsZVBhdGgmIHBhdGgpIHsKKyAgICAgIHJldHVybiAocGF0aC5CYXNlTmFtZSgpLnZhbHVlKCkgPT0gImxpYmNvYmFsdC5zbyIpOworICAgIH0pOworICAgIGF1dG8gZGlyZWN0b3J5X2NyZWF0b3IgPSBiYXNlOjpCaW5kUmVwZWF0aW5nKAorICAgICAgICBbXShjb25zdCBiYXNlOjpGaWxlUGF0aCYgZXh0cmFjdF9kaXIsCisgICAgICAgICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBlbnRyeV9wYXRoKSB7CisgICAgICAgICAgcmV0dXJuIGJhc2U6OkNyZWF0ZURpcmVjdG9yeShleHRyYWN0X2Rpci5BcHBlbmQoZW50cnlfcGF0aCkpOworICAgICAgICB9LAorICAgICAgICBvdXRwdXRfcGF0aCk7CisgICAgYXV0byB3cml0ZXJfZmFjdG9yeSA9IGJhc2U6OkJpbmRSZXBlYXRpbmcoCisgICAgICAgIFtdKGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBleHRyYWN0X2RpciwgY29uc3QgYmFzZTo6RmlsZVBhdGgmIGVudHJ5X3BhdGgpCisgICAgICAgICAgICAtPiBzdGQ6OnVuaXF1ZV9wdHI8emlwOjpXcml0ZXJEZWxlZ2F0ZT4geworICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExaNFdyaXRlckRlbGVnYXRlPigKKyAgICAgICAgICAgICAgZXh0cmFjdF9kaXIuQXBwZW5kKGVudHJ5X3BhdGgpKTsKKyAgICAgICAgfSwKKyAgICAgICAgb3V0cHV0X3BhdGgpOworCisgICAgaWYgKCF6aXA6OlVuemlwV2l0aEZpbHRlckFuZFdyaXRlcnMoemlwX3BhdGgsIHdyaXRlcl9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9jcmVhdG9yLCBmaWx0ZXIsIHRydWUpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gdW56aXAgbGliY29iYWx0LnNvIjsKKyAgICAgIHN0ZDo6bW92ZShjYWxsYmFjaykuUnVuKGZhbHNlKTsKKyAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgTE9HKElORk8pIDw8ICJTdWNjZXNzZnVsbHkgdW56aXBwZWQgYW5kIGx6NCBjb21wcmVzc2VkIGxpYmNvYmFsdC5zbyI7CisgICAgfQorCisgICAgLy8gRmlsdGVyIHRvIHVuemlwIHRoZSByZXN0IG9mIHRoZSBDUlggcGFja2FnZS4KKyAgICBmaWx0ZXIgPSBiYXNlOjpCaW5kUmVwZWF0aW5nKFtdKGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBwYXRoKSB7CisgICAgICBpZiAocGF0aC5CYXNlTmFtZSgpLnZhbHVlKCkgPT0gImxpYmNvYmFsdC5zbyIpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgcmV0dXJuIHRydWU7CisgICAgfSk7CisKKyAgICBpZiAoIXppcDo6VW56aXBXaXRoRmlsdGVyQ2FsbGJhY2soemlwX3BhdGgsIG91dHB1dF9wYXRoLCBmaWx0ZXIsIHRydWUpKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gdW56aXAgdGhlIENSWCBwYWNrYWdlIjsKKyAgICAgIHN0ZDo6bW92ZShjYWxsYmFjaykuUnVuKGZhbHNlKTsKKyAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgTE9HKElORk8pIDw8ICJTdWNjZXNzZnVsbHkgdW56aXBwZWQgdGhlIENSWCBwYWNrYWdlIjsKKyAgICB9CisKKyAgICBzdGQ6Om1vdmUoY2FsbGJhY2spLlJ1bih0cnVlKTsKKworICAgIFNiVGltZU1vbm90b25pYyB0aW1lX3VuemlwX3Rvb2sgPQorICAgICAgICBTYlRpbWVHZXRNb25vdG9uaWNOb3coKSAtIHRpbWVfYmVmb3JlX3VuemlwOworICAgIExPRyhJTkZPKSA8PCAiVW56aXAgZmlsZSBwYXRoID0gIiA8PCB6aXBfcGF0aDsKKyAgICBMT0coSU5GTykgPDwgIm91dHB1dF9wYXRoID0gIiA8PCBvdXRwdXRfcGF0aDsKKyAgICBMT0coSU5GTykgPDwgIlVuemlwIHRvb2sgIiA8PCB0aW1lX3VuemlwX3Rvb2sgLyBrU2JUaW1lTWlsbGlzZWNvbmQKKyAgICAgICAgICAgICAgPDwgIiBtaWxsaXNlY29uZHMuIjsKKyAgfQorCisgIHZvaWQgVW56aXBUb1BhdGgoY29uc3QgYmFzZTo6RmlsZVBhdGgmIHppcF9wYXRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBvdXRwdXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICBVbnppcENvbXBsZXRlQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgICBTYlRpbWVNb25vdG9uaWMgdGltZV9iZWZvcmVfdW56aXAgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKICAgICBzdGQ6Om1vdmUoY2FsbGJhY2spLlJ1bih6aXA6OlVuemlwKHppcF9wYXRoLCBvdXRwdXRfcGF0aCkpOwogICAgIFNiVGltZU1vbm90b25pYyB0aW1lX3VuemlwX3Rvb2sgPQpAQCAtNDAsMTQgKzI0MiwxOCBAQAogICAgIExPRyhJTkZPKSA8PCAiVW56aXAgdG9vayAiIDw8IHRpbWVfdW56aXBfdG9vayAvIGtTYlRpbWVNaWxsaXNlY29uZAogICAgICAgICAgICAgICA8PCAiIG1pbGxpc2Vjb25kcy4iOwogICB9CisKKyBwcml2YXRlOgorICBib29sIGNvbXByZXNzX3VwZGF0ZV8gPSBmYWxzZTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZQogCi1VbnppcHBlckZhY3Rvcnk6OlVuemlwcGVyRmFjdG9yeSgpID0gZGVmYXVsdDsKK1VuemlwcGVyRmFjdG9yeTo6VW56aXBwZXJGYWN0b3J5KGJvb2wgY29tcHJlc3NfdXBkYXRlKQorICAgIDogY29tcHJlc3NfdXBkYXRlXyhjb21wcmVzc191cGRhdGUpIHt9CiAKIHN0ZDo6dW5pcXVlX3B0cjx1cGRhdGVfY2xpZW50OjpVbnppcHBlcj4gVW56aXBwZXJGYWN0b3J5OjpDcmVhdGUoKSBjb25zdCB7Ci0gIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVuemlwcGVySW1wbD4oKTsKKyAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VW56aXBwZXJJbXBsPihjb21wcmVzc191cGRhdGVfKTsKIH0KIAogVW56aXBwZXJGYWN0b3J5Ojp+VW56aXBwZXJGYWN0b3J5KCkgPSBkZWZhdWx0OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3VwZGF0ZXIvdW56aXBwZXIuaCBiL2NvYmFsdC91cGRhdGVyL3VuemlwcGVyLmgKaW5kZXggNDZkZmI3ZS4uZGY5ZWNmNSAxMDA2NDQKLS0tIGEvY29iYWx0L3VwZGF0ZXIvdW56aXBwZXIuaAorKysgYi9jb2JhbHQvdXBkYXRlci91bnppcHBlci5oCkBAIC0xLDYgKzEsMTYgQEAKLS8vIENvcHlyaWdodCAyMDE5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogI2lmbmRlZiBDT0JBTFRfVVBEQVRFUl9VTlpJUFBFUl9IXwogI2RlZmluZSBDT0JBTFRfVVBEQVRFUl9VTlpJUFBFUl9IXwpAQCAtMTYsNyArMjYsNyBAQAogCiBjbGFzcyBVbnppcHBlckZhY3RvcnkgOiBwdWJsaWMgdXBkYXRlX2NsaWVudDo6VW56aXBwZXJGYWN0b3J5IHsKICBwdWJsaWM6Ci0gIFVuemlwcGVyRmFjdG9yeSgpOworICBleHBsaWNpdCBVbnppcHBlckZhY3RvcnkoYm9vbCBjb21wcmVzc191cGRhdGUpOwogCiAgIHN0ZDo6dW5pcXVlX3B0cjx1cGRhdGVfY2xpZW50OjpVbnppcHBlcj4gQ3JlYXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTI0LDYgKzM0LDcgQEAKICAgflVuemlwcGVyRmFjdG9yeSgpIG92ZXJyaWRlOwogCiAgcHJpdmF0ZToKKyAgYm9vbCBjb21wcmVzc191cGRhdGVfOwogICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVW56aXBwZXJGYWN0b3J5KTsKIH07CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC91cGRhdGVyL3VwZGF0ZXIuZ3lwIGIvY29iYWx0L3VwZGF0ZXIvdXBkYXRlci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MDM3MDMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3VwZGF0ZXIvdXBkYXRlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3VwZGF0ZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb25maWd1cmF0b3IuY2MnLAotICAgICAgICAnY29uZmlndXJhdG9yLmgnLAotICAgICAgICAnbmV0d29ya19mZXRjaGVyLmNjJywKLSAgICAgICAgJ25ldHdvcmtfZmV0Y2hlci5oJywKLSAgICAgICAgJ3BhdGNoZXIuY2MnLAotICAgICAgICAncGF0Y2hlci5oJywKLSAgICAgICAgJ3ByZWZzLmNjJywKLSAgICAgICAgJ3ByZWZzLmgnLAotICAgICAgICAndW56aXBwZXIuY2MnLAotICAgICAgICAndW56aXBwZXIuaCcsCi0gICAgICAgICd1cGRhdGVyX21vZHVsZS5jYycsCi0gICAgICAgICd1cGRhdGVyX21vZHVsZS5oJywKLSAgICAgICAgJ3VwZGF0ZXJfY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ3VwZGF0ZXJfY29uc3RhbnRzLmgnLAotICAgICAgICAndXRpbHMuY2MnLAotICAgICAgICAndXRpbHMuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2xvYWRlci9sb2FkZXIuZ3lwOmxvYWRlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9zY3JpcHQvZW5naW5lLmd5cDplbmdpbmUnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9zY3JpcHQuZ3lwOnNjcmlwdCcsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL3ByZWZzL3ByZWZzLmd5cDpwcmVmcycsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvdXBkYXRlX2NsaWVudC5neXA6dXBkYXRlX2NsaWVudCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9hcHBfa2V5X2ZpbGVzLmd5cDphcHBfa2V5X2ZpbGVzJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2RyYWluX2ZpbGUuZ3lwOmRyYWluX2ZpbGUnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cDp6aXAnLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndXBkYXRlcl9zYW5kYm94JywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAndXBkYXRlcicsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RlYnVnL2RlYnVnLmd5cDpjb25zb2xlX2NvbW1hbmRfbWFuYWdlcicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndXBkYXRlcl9zYW5kYm94LmNjJywKLSAgICAgICAgJ3VwZGF0ZXIuY2MnLAotICAgICAgICAndXBkYXRlci5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndXBkYXRlcl9zYW5kYm94X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd1cGRhdGVyX3NhbmRib3gnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAndXBkYXRlcl9zYW5kYm94JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hfc2FuZGJveCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcmFzaF9zYW5kYm94LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hfc2FuZGJveF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3Jhc2hfc2FuZGJveCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdjcmFzaF9zYW5kYm94JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbm9vcF9zYW5kYm94JywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ25vb3Bfc2FuZGJveC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25vb3Bfc2FuZGJveF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbm9vcF9zYW5kYm94JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ25vb3Bfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0KLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC91cGRhdGVyL3VwZGF0ZXJfbW9kdWxlLmNjIGIvY29iYWx0L3VwZGF0ZXIvdXBkYXRlcl9tb2R1bGUuY2MKaW5kZXggYTlmOWU2Yy4uZGZiYjE0YiAxMDA2NDQKLS0tIGEvY29iYWx0L3VwZGF0ZXIvdXBkYXRlcl9tb2R1bGUuY2MKKysrIGIvY29iYWx0L3VwZGF0ZXIvdXBkYXRlcl9tb2R1bGUuY2MKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjb2JhbHQvdXBkYXRlci9jcmFzaF9yZXBvcnRlci5oIgogI2luY2x1ZGUgImNvYmFsdC91cGRhdGVyL3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tcG9uZW50cy9jcnhfZmlsZS9jcnhfdmVyaWZpZXIuaCIKKyNpbmNsdWRlICJjb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29iYWx0X3Nsb3RfbWFuYWdlbWVudC5oIgogI2luY2x1ZGUgImNvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91dGlscy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vZmlsZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oIgpAQCAtNDQsNiArNDUsNyBAQAogbmFtZXNwYWNlIHsKIAogdXNpbmcgdXBkYXRlX2NsaWVudDo6Q29tcG9uZW50U3RhdGU7Cit1c2luZyB1cGRhdGVfY2xpZW50OjpDb2JhbHRTbG90TWFuYWdlbWVudDsKIAogLy8gVGhlIFNIQTI1NiBoYXNoIG9mIHRoZSAiY29iYWx0X2V2ZXJncmVlbl9wdWJsaWMiIGtleS4KIGNvbnN0ZXhwciB1aW50OF90IGtDb2JhbHRQdWJsaWNLZXlIYXNoW10gPSB7CkBAIC05Miw3ICs5NCw4IEBACiBuYW1lc3BhY2UgY29iYWx0IHsKIG5hbWVzcGFjZSB1cGRhdGVyIHsKIAotY29uc3QgdWludDY0X3Qga0RlZmF1bHRVcGRhdGVDaGVja0RlbGF5U2Vjb25kcyA9IDYwOworLy8gVGhlIGRlbGF5IGluIHNlY29uZHMgYmVmb3JlIHRoZSBmaXJzdCB1cGRhdGUgY2hlY2suCitjb25zdCB1aW50NjRfdCBrRGVmYXVsdFVwZGF0ZUNoZWNrRGVsYXlTZWNvbmRzID0gMTU7CiAKIHZvaWQgT2JzZXJ2ZXI6Ok9uRXZlbnQoRXZlbnRzIGV2ZW50LCBjb25zdCBzdGQ6OnN0cmluZyYgaWQpIHsKICAgTE9HKElORk8pIDw8ICJPYnNlcnZlcjo6T25FdmVudCBpZD0iIDw8IGlkOwpAQCAtMjIwLDYgKzIyMywxNyBAQAogICB9CiAKICAgdXBkYXRlcl9jb25maWd1cmF0b3JfID0gbnVsbHB0cjsKKworICAvLyBDbGVhbnVwIGRyYWluIGZpbGVzCisgIGNvbnN0IGF1dG8gaW5zdGFsbGF0aW9uX21hbmFnZXIgPQorICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29iYWx0RXh0ZW5zaW9uSW5zdGFsbGF0aW9uTWFuYWdlckFwaSo+KAorICAgICAgICAgIFNiU3lzdGVtR2V0RXh0ZW5zaW9uKGtDb2JhbHRFeHRlbnNpb25JbnN0YWxsYXRpb25NYW5hZ2VyTmFtZSkpOworICBpZiAoaW5zdGFsbGF0aW9uX21hbmFnZXIpIHsKKyAgICBDb2JhbHRTbG90TWFuYWdlbWVudCBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50OworICAgIGlmIChjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkluaXQoaW5zdGFsbGF0aW9uX21hbmFnZXIpKSB7CisgICAgICBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkNsZWFudXBBbGxEcmFpbkZpbGVzKCk7CisgICAgfQorICB9CiAgIExPRyhJTkZPKSA8PCAiVXBkYXRlck1vZHVsZTo6RmluYWxpemUgZW5kIjsKIH0KIApkaWZmIC0tZ2l0IGEvY29iYWx0L3VwZGF0ZXIvdXRpbHMuY2MgYi9jb2JhbHQvdXBkYXRlci91dGlscy5jYwppbmRleCBlNWYyZjJjLi42YzljYjNlIDEwMDY0NAotLS0gYS9jb2JhbHQvdXBkYXRlci91dGlscy5jYworKysgYi9jb2JhbHQvdXBkYXRlci91dGlscy5jYwpAQCAtNjIsMjAgKzYyLDEyIEBACiAjZW5kaWYKIAogICBzdGQ6OnZlY3RvcjxjaGFyPiBzdG9yYWdlX2RpcihrU2JGaWxlTWF4UGF0aCk7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFTYlN5c3RlbUdldFBhdGgoa1NiU3lzdGVtUGF0aFN0b3JhZ2VEaXJlY3RvcnksIHN0b3JhZ2VfZGlyLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAga1NiRmlsZU1heFBhdGgpKSB7CiAgICAgTE9HKEVSUk9SKSA8PCAiR2V0UHJvZHVjdERpcmVjdG9yeVBhdGg6IEZhaWxlZCB0byBnZXQgIgogICAgICAgICAgICAgICAgICAgImtTYlN5c3RlbVBhdGhTdG9yYWdlRGlyZWN0b3J5IjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSNlbHNlCi0gIFNCX05PVFJFQUNIRUQoKSA8PCAiR2V0UHJvZHVjdERpcmVjdG9yeVBhdGg6IGtTYlN5c3RlbVBhdGhTdG9yYWdlRGlyZWN0b3J5ICIKLSAgICAgICAgICAgICAgICAgICAgICJpcyBub3QgYXZhaWxhYmxlIGJlZm9yZSAiCi0gICAgICAgICAgICAgICAgICAgICAic3RhcmJvYXJkIHZlcnNpb24gMTIiOwotICByZXR1cm4gZmFsc2U7Ci0KLSNlbmRpZgogICBiYXNlOjpGaWxlUGF0aCBhcHBfZGF0YV9kaXIoc3RvcmFnZV9kaXIuZGF0YSgpKTsKICAgY29uc3QgYXV0byBwcm9kdWN0X2RhdGFfZGlyID0KICAgICAgIGFwcF9kYXRhX2Rpci5BcHBlbmRBU0NJSShQUk9EVUNUX0ZVTExOQU1FX1NUUklORyk7CmRpZmYgLS1naXQgYS9jb2JhbHQvd2F0Y2hkb2cvQlVJTEQuZ24gYi9jb2JhbHQvd2F0Y2hkb2cvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MGY3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93YXRjaGRvZy9CVUlMRC5nbgpAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3RhdGljX2xpYnJhcnkoIndhdGNoZG9nIikgeworICBzb3VyY2VzID0gWworICAgICJ3YXRjaGRvZy5jYyIsCisgICAgIndhdGNoZG9nLmgiLAorICBdCisKKyAgZGVwcyA9IFsgIi8vc3RhcmJvYXJkL2NvbW1vbiIgXQorfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dhdGNoZG9nL1JFQURNRS5tZCBiL2NvYmFsdC93YXRjaGRvZy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyNTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93YXRjaGRvZy9SRUFETUUubWQKQEAgLTAsMCArMSw0NCBAQAorIyBXYXRjaGRvZworCitXYXRjaGRvZyBpcyBDb2JhbHQncyBtb25pdG9yaW5nIHNlcnZpY2UgdXNlZCB0byBkZXRlY3Qgbm9uLXJlc3BvbnNpdmUgZXZlbnRzCithbmQgdHJpZ2dlciBjcmFzaGVzLiBTaW1pbGFyIHRvIEFuZHJvaWQncyBBTlJzLgorCitXYXRjaGRvZyBiZWhhdmVzIGFzIGEgc2luZ2xldG9uIHdoaWNoIHByb3ZpZGVzIGdsb2JhbCBhY2Nlc3MgdG8gdGhlIG9uZQoraW5zdGFuY2Ugb2YgdGhlIGNsYXNzLiBUaGUgb25lIFdhdGNoZG9nIGluc3RhbmNlIGlzIGNyZWF0ZWQgYW5kIGRlbGV0ZWQgYnkKK0FwcGxpY2F0aW9uIHdoaWNoIG5vdCBvbmx5IG1hbmFnZXMgV2F0Y2hkb2cncyBsaWZlY3ljbGUsIGJ1dCBhbHNvIHVwZGF0ZXMKK1dhdGNoZG9nJ3Mgc3RhdGUuCisKK1dhdGNoZG9nIHdvcmtzIGJ5IG1haW50YWluaW5nIGEgZGljdGlvbmFyeSBvZiByZWdpc3RlcmVkIENsaWVudHMgd2l0aCB2YXJpb3VzCittZXRhZGF0YSBpbmNsdWRpbmcgdGltZXN0YW1wcyBvZiB3aGVuIHRoZSBDbGllbnQgbGFzdCBwaW5nZWQgV2F0Y2hkb2cuIFdhdGNoZG9nCit0aGVuIGhhcyBhIHNlcGFyYXRlIHRocmVhZCB0aGF0IG1vbml0b3JzIHRoZXNlIHJlZ2lzdGVyZWQgQ2xpZW50cyBieQorcGVyaW9kaWNhbGx5IGNoZWNraW5nIGlmIHRoZWlyIGxhc3QgcGluZ2VkIHRpbWVzdGFtcHMgZXhjZWVkIGEgdGltZSBjb25zdHJhaW50LgorVGhlIGdvYWwgaXMgdG8gaGF2ZSBXYXRjaGRvZyBhcyBtaW5pbWFsIGFzIHBvc3NpYmxlIHdoaWxlIGVmZmVjdGl2ZWx5IGRldGVjdGluZworbm9uLXJlc3BvbnNpdmUgZXZlbnRzLiBUbyB0aGF0IGVuZCwgY29tcG9uZW50cyB0byBiZSBtb25pdG9yZWQgYXJlIHRoZW1zZWx2ZXMKK3Jlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZywgcGluZ2luZywgYW5kIHVucmVnaXN0ZXJpbmcgdGhlbXNlbHZlcyBieSBjYWxsaW5nCitXYXRjaGRvZyBmdW5jdGlvbnMuCisKKworIyMgUXVpY2sgR3VpZGUgdG8gSW1wbGVtZW50aW5nIFdhdGNoZG9nCisKKyMjIyBJLiBQZXJpb2RpYyBCZWhhdmlvciAvIEludGVybmFsCisKK1RvIGltcGxlbWVudCBwZXJpb2RpYyBiZWhhdmlvciBtb25pdG9yaW5nLCBzaW1wbHkgY2FsbCBSZWdpc3RlcigpIGJlZm9yZSB0aGUKK3BlcmlvZGljIGJlaGF2aW9yIGJlZ2lucywgUGluZygpIGR1cmluZyB0aGUgcGVyaW9kaWMgYmVoYXZpb3IsIGFuZCBVbnJlZ2lzdGVyKCkKK2FmdGVyIHRoZSBwZXJpb2RpYyBiZWhhdmlvci4gUmVnaXN0ZXIoKSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBhZGp1c3RlZAorYWNjb3JkaW5nbHkgd2l0aCB0aGUgdGltZV9pbnRlcnZhbCBvZnRlbiBhIGZldyBvcmRlcnMgb2YgbWFnbml0dWRlIGdyZWF0ZXIgdGhhbgorZXhwZWN0ZWQuCisKK0lmIHRoZXJlIGlzIG5vIHNpbXBsZSBwbGFjZSB0byBjYWxsIFJlZ2lzdGVyKCkgYmVmb3JlIHRoZSBwZXJpb2QgYmVoYXZpb3IKK2JlZ2lucywgaXQgaXMgcG9zc2libGUgdG8gY2FsbCBSZWdpc3RlcigpIGluIHBsYWNlIG9mIGNhbGxpbmcgUGluZygpIGFuZCB0bworc2ltcGx5IGFkanVzdCB0aGUgcmVwbGFjZSBwYXJhbWV0ZXIgYWNjb3JkaW5nbHkuCisKK1dhdGNoZG9nIGltcGxlbWVudGF0aW9ucyBhc3N1bWUgdGhhdCBBcHBsaWNhdGlvbiBoYXMgYWxyZWFkeSBjcmVhdGVkIHRoZSBvbmUKK1dhdGNoZG9nIGluc3RhbmNlLCBidXQgaW1wbGVtZW50YXRpb25zIG9mdGVuIGV4cGVjdCB0aGUgcG9zc2liaWxpdHkgb2YgYQorbnVsbHB0ciBpbiB3aGljaCBjYXNlIG5vIGFjdGlvbiBpcyB0YWtlbi4gVGhpcyBpcyBiZWNhdXNlIHZhcmlvdXMgdW5pdCBhbmQKK2JsYWNrIGJveCB0ZXN0cyBkbyBub3Qgc3RhcnQgQ29iYWx0IHdpdGggbm9ybWFsIHVzYWdlIHBhdHRlcm5zLgorCisjIyMgSUkuIExpdmVuZXNzIGNoZWNrIC8gRXh0ZXJuYWwKKworVG8gaW1wbGVtZW50IGxpdmVuZXNzIGNoZWNrIGJlaGF2aW9yIG1vbml0b3JpbmcsIGEgSmF2YXNjcmlwdCBhZGFwdGVyIGxheWVyCit3aWxsIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQgdGhhdCBoYW5kbGVzIHRoZSBwZXJpb2RpYyBwaW5naW5nIGFuZCBjYWxsYmFja3MKK3JlcXVpcmVkLgpkaWZmIC0tZ2l0IGEvY29iYWx0L3dhdGNoZG9nL3NpbmdsZXRvbi5oIGIvY29iYWx0L3dhdGNoZG9nL3NpbmdsZXRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MDA4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd2F0Y2hkb2cvc2luZ2xldG9uLmgKQEAgLTAsMCArMSw4MiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBBIHNpbmdsZXRvbiB0aGF0IGNhbiBiZSBjcmVhdGVkIGFuZCBkZWxldGVkIHdoaWNoIHByb3ZpZGVzIGdsb2JhbCBhY2Nlc3MgdG8KKy8vIHRoZSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLgorCisjaWZuZGVmIENPQkFMVF9XQVRDSERPR19TSU5HTEVUT05fSF8KKyNkZWZpbmUgQ09CQUxUX1dBVENIRE9HX1NJTkdMRVRPTl9IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd2F0Y2hkb2cgeworCisvLyBTaW5nbGV0b24gaGVscGVyIGNsYXNzLgordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CitjbGFzcyBTaW5nbGV0b24geworIHByb3RlY3RlZDoKKyAgU2luZ2xldG9uKCkge30KKyAgc3RhdGljIFR5cGUqIHNfc2luZ2xldG9uOworCisgcHVibGljOgorICAvLyBUaGlzIGhlbHBlciBjbGFzcyBhc3N1bWVzIHRoYXQgVHlwZSBoYXMgYSBmdW5jdGlvbgorICAvLyAiYm9vbCBJbml0aWFsaXplKCk7IiB0aGF0IHJldHVybnMgZmFsc2Ugd2hlbgorICAvLyBpbml0aWFsaXphdGlvbiBmYWlscyBhbmQgYSBmdW5jdGlvbiAidm9pZCBVbmluaXRpYWxpemUoKTsiLgorCisgIHN0YXRpYyBUeXBlKiBDcmVhdGVJbnN0YW5jZSgpIHsKKyAgICBzdGF0aWMgU2JPbmNlQ29udHJvbCBzX29uY2VfZmxhZyA9IFNCX09OQ0VfSU5JVElBTElaRVI7CisgICAgc3RydWN0IExvY2FsIHsKKyAgICAgIHN0YXRpYyB2b2lkIEluaXQoKSB7CisgICAgICAgIFR5cGUqIHNpbmdsZXRvbiA9IG5ldyBUeXBlKCk7CisgICAgICAgIGlmIChzaW5nbGV0b24gJiYgc2luZ2xldG9uLT5UeXBlOjpJbml0aWFsaXplKCkpIHNfc2luZ2xldG9uID0gc2luZ2xldG9uOworICAgICAgfQorICAgIH07CisgICAgU2JPbmNlKCZzX29uY2VfZmxhZywgTG9jYWw6OkluaXQpOworICAgIHJldHVybiBzX3NpbmdsZXRvbjsKKyAgfQorCisgIHN0YXRpYyBUeXBlKiBDcmVhdGVTdHViSW5zdGFuY2UoKSB7CisgICAgc3RhdGljIFNiT25jZUNvbnRyb2wgc19vbmNlX2ZsYWcgPSBTQl9PTkNFX0lOSVRJQUxJWkVSOworICAgIHN0cnVjdCBMb2NhbCB7CisgICAgICBzdGF0aWMgdm9pZCBJbml0KCkgeworICAgICAgICBUeXBlKiBzaW5nbGV0b24gPSBuZXcgVHlwZSgpOworICAgICAgICBpZiAoc2luZ2xldG9uICYmIHNpbmdsZXRvbi0+VHlwZTo6SW5pdGlhbGl6ZVN0dWIoKSkKKyAgICAgICAgICBzX3NpbmdsZXRvbiA9IHNpbmdsZXRvbjsKKyAgICAgIH0KKyAgICB9OworICAgIFNiT25jZSgmc19vbmNlX2ZsYWcsIExvY2FsOjpJbml0KTsKKyAgICByZXR1cm4gc19zaW5nbGV0b247CisgIH0KKworICBzdGF0aWMgVHlwZSogR2V0SW5zdGFuY2UoKSB7IHJldHVybiBzX3NpbmdsZXRvbjsgfQorCisgIHN0YXRpYyB2b2lkIERlbGV0ZUluc3RhbmNlKCkgeworICAgIHNfc2luZ2xldG9uLT5UeXBlOjpVbmluaXRpYWxpemUoKTsKKyAgICBkZWxldGUgc19zaW5nbGV0b247CisgICAgc19zaW5nbGV0b24gPSBudWxscHRyOworICB9CisKKyAgLy8gUHJldmVudCBjb3B5aW5nIGFuZCBtb3ZpbmcuCisgIFNpbmdsZXRvbihTaW5nbGV0b24gY29uc3QmKSA9IGRlbGV0ZTsKKyAgU2luZ2xldG9uJiBvcGVyYXRvcj0oY29uc3QgU2luZ2xldG9uJikgPSBkZWxldGU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KK1R5cGUqIFNpbmdsZXRvbjxUeXBlPjo6c19zaW5nbGV0b24gPSBudWxscHRyOworCit9ICAvLyBuYW1lc3BhY2Ugd2F0Y2hkb2cKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfV0FUQ0hET0dfU0lOR0xFVE9OX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd2F0Y2hkb2cvd2F0Y2hkb2cuY2MgYi9jb2JhbHQvd2F0Y2hkb2cvd2F0Y2hkb2cuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzNTU4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93YXRjaGRvZy93YXRjaGRvZy5jYwpAQCAtMCwwICsxLDM5MyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJjb2JhbHQvd2F0Y2hkb2cvd2F0Y2hkb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2ZpbGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3YXRjaGRvZyB7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoZSBXYXRjaGRvZyB2aW9sYXRpb25zIGpzb24gZmlsZSBuYW1lcy4KK2NvbnN0IGNoYXIga1dhdGNoZG9nQ3VycmVudFZpb2xhdGlvbnNKc29uW10gPSAid2F0Y2hkb2cuanNvbiI7Citjb25zdCBjaGFyIGtXYXRjaGRvZ1ByZXZpb3VzVmlvbGF0aW9uc0pzb25bXSA9ICJ3YXRjaGRvZ19vbGQuanNvbiI7CisvLyBUaGUgZGVmYXVsdCBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGJldHdlZW4gZWFjaCBtb25pdG9yIGxvb3AuCitjb25zdCBpbnQ2NF90IGtXYXRjaGRvZ1NtYWxsZXN0VGltZUludGVydmFsID0gMTAwMDAwMDsKKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXBlYXRlZCBXYXRjaGRvZyB2aW9sYXRpb25zLiBQcmV2ZW50cyBleGNlc3NpdmUKKy8vIFdhdGNoZG9nIHZpb2xhdGlvbiB1cGRhdGVzLgorY29uc3QgaW50NjRfdCBrV2F0Y2hkb2dNYXhWaW9sYXRpb25zID0gMTAwOworLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1vc3QgcmVjZW50IHBpbmcgaW5mb3MgdG8gc3RvcmUuCitjb25zdCBpbnQ2NF90IGtXYXRjaGRvZ01heFBpbmdJbmZvcyA9IDEwMDsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgV2F0Y2hkb2c6OkluaXRpYWxpemUoKSB7CisgIFNCX0NIRUNLKFNiTXV0ZXhDcmVhdGUoJm11dGV4XykpOworICBzbWFsbGVzdF90aW1lX2ludGVydmFsXyA9IGtXYXRjaGRvZ1NtYWxsZXN0VGltZUludGVydmFsOworCisgIC8vIFN0YXJ0cyBtb25pdG9yIHRocmVhZC4KKyAgaXNfbW9uaXRvcmluZ18gPSB0cnVlOworICBTQl9EQ0hFQ0soIVNiVGhyZWFkSXNWYWxpZCh3YXRjaGRvZ190aHJlYWRfKSk7CisgIHdhdGNoZG9nX3RocmVhZF8gPSBTYlRocmVhZENyZWF0ZSgwLCBrU2JUaHJlYWROb1ByaW9yaXR5LCBrU2JUaHJlYWROb0FmZmluaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgIldhdGNoZG9nIiwgJldhdGNoZG9nOjpNb25pdG9yLCB0aGlzKTsKKyAgU0JfRENIRUNLKFNiVGhyZWFkSXNWYWxpZCh3YXRjaGRvZ190aHJlYWRfKSk7CisgIHJldHVybiB0cnVlOworfQorCitib29sIFdhdGNoZG9nOjpJbml0aWFsaXplU3R1YigpIHsKKyAgaXNfc3R1Yl8gPSB0cnVlOworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXYXRjaGRvZzo6VW5pbml0aWFsaXplKCkgeworICBTQl9DSEVDSyhTYk11dGV4QWNxdWlyZSgmbXV0ZXhfKSA9PSBrU2JNdXRleEFjcXVpcmVkKTsKKyAgaXNfbW9uaXRvcmluZ18gPSBmYWxzZTsKKyAgU0JfQ0hFQ0soU2JNdXRleFJlbGVhc2UoJm11dGV4XykpOworICBTYlRocmVhZEpvaW4od2F0Y2hkb2dfdGhyZWFkXywgbnVsbHB0cik7Cit9CisKK3N0ZDo6c3RyaW5nIFdhdGNoZG9nOjpHZXRXYXRjaGRvZ0ZpbGVQYXRocyhib29sIGN1cnJlbnQpIHsKKyAgLy8gR2V0cyB0aGUgY3VycmVudCBXYXRjaGRvZyB2aW9sYXRpb25zIGZpbGUgcGF0aCBvciB0aGUgcHJldmlvdXMgV2F0Y2hkb2cKKyAgLy8gdmlvbGF0aW9ucyBmaWxlIHBhdGguCisgIGlmICh3YXRjaGRvZ19maWxlXyA9PSAiIikgeworICAgIC8vIFNldHMgV2F0Y2hkb2cgdmlvbGF0aW9ucyBmaWxlIHBhdGhzLgorICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGNhY2hlX2RpcihrU2JGaWxlTWF4UGF0aCArIDEsIDApOworICAgIFNiU3lzdGVtR2V0UGF0aChrU2JTeXN0ZW1QYXRoQ2FjaGVEaXJlY3RvcnksIGNhY2hlX2Rpci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgIGtTYkZpbGVNYXhQYXRoKTsKKyAgICB3YXRjaGRvZ19maWxlXyA9IHN0ZDo6c3RyaW5nKGNhY2hlX2Rpci5kYXRhKCkpICsga1NiRmlsZVNlcFN0cmluZyArCisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyhrV2F0Y2hkb2dDdXJyZW50VmlvbGF0aW9uc0pzb24pOworICAgIFNCX0xPRyhJTkZPKSA8PCAiQ3VycmVudCBXYXRjaGRvZyB2aW9sYXRpb25zIGZpbGUgcGF0aDogIiA8PCB3YXRjaGRvZ19maWxlXzsKKyAgICB3YXRjaGRvZ19vbGRfZmlsZV8gPSBzdGQ6OnN0cmluZyhjYWNoZV9kaXIuZGF0YSgpKSArIGtTYkZpbGVTZXBTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGtXYXRjaGRvZ1ByZXZpb3VzVmlvbGF0aW9uc0pzb24pOworICAgIFNCX0xPRyhJTkZPKSA8PCAiUHJldmlvdXMgV2F0Y2hkb2cgdmlvbGF0aW9ucyBmaWxlIHBhdGg6ICIKKyAgICAgICAgICAgICAgICAgPDwgd2F0Y2hkb2dfb2xkX2ZpbGVfOworICAgIFByZXNlcnZlUHJldmlvdXNXYXRjaGRvZ1Zpb2xhdGlvbnMoKTsKKyAgfQorICBpZiAoY3VycmVudCkgcmV0dXJuIHdhdGNoZG9nX2ZpbGVfOworICByZXR1cm4gd2F0Y2hkb2dfb2xkX2ZpbGVfOworfQorCit2b2lkIFdhdGNoZG9nOjpQcmVzZXJ2ZVByZXZpb3VzV2F0Y2hkb2dWaW9sYXRpb25zKCkgeworICAvLyBDb3BpZXMgdGhlIHByZXZpb3VzIFdhdGNoZG9nIHZpb2xhdGlvbnMgZmlsZSBjb250YWluaW5nIHZpb2xhdGlvbnMgc2luY2UKKyAgLy8gbGFzdCBhcHAgc3RhcnQsIGlmIGl0IGV4aXN0cywgdG8gcHJlc2VydmUgaXQuCisgIHN0YXJib2FyZDo6U2NvcGVkRmlsZSByZWFkX2ZpbGUod2F0Y2hkb2dfZmlsZV8uY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JGaWxlT3Blbk9ubHkgfCBrU2JGaWxlUmVhZCk7CisgIGlmIChyZWFkX2ZpbGUuSXNWYWxpZCgpKSB7CisgICAgaW50NjRfdCBrRmlsZVNpemUgPSByZWFkX2ZpbGUuR2V0U2l6ZSgpOworICAgIHN0ZDo6c3RyaW5nIHdhdGNoZG9nX2NvbnRlbnQoa0ZpbGVTaXplLCAnXDAnKTsKKyAgICByZWFkX2ZpbGUuUmVhZEFsbCgmd2F0Y2hkb2dfY29udGVudFswXSwga0ZpbGVTaXplKTsKKyAgICBzdGFyYm9hcmQ6OlNjb3BlZEZpbGUgd3JpdGVfZmlsZSh3YXRjaGRvZ19vbGRfZmlsZV8uY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JGaWxlQ3JlYXRlQWx3YXlzIHwga1NiRmlsZVdyaXRlKTsKKyAgICB3cml0ZV9maWxlLldyaXRlQWxsKCZ3YXRjaGRvZ19jb250ZW50WzBdLCBrRmlsZVNpemUpOworICAgIHN0YXJib2FyZDo6U2JGaWxlRGVsZXRlUmVjdXJzaXZlKHdhdGNoZG9nX2ZpbGVfLmNfc3RyKCksIHRydWUpOworICB9Cit9CisKK3ZvaWQgV2F0Y2hkb2c6OlVwZGF0ZVN0YXRlKGJhc2U6OkFwcGxpY2F0aW9uU3RhdGUgc3RhdGUpIHsKKyAgU0JfQ0hFQ0soU2JNdXRleEFjcXVpcmUoJm11dGV4XykgPT0ga1NiTXV0ZXhBY3F1aXJlZCk7CisgIHN0YXRlXyA9IHN0YXRlOworICBTQl9DSEVDSyhTYk11dGV4UmVsZWFzZSgmbXV0ZXhfKSk7Cit9CisKK3ZvaWQqIFdhdGNoZG9nOjpNb25pdG9yKHZvaWQqIGNvbnRleHQpIHsKKyAgd2hpbGUgKDEpIHsKKyAgICBTQl9DSEVDSyhTYk11dGV4QWNxdWlyZSgmKHN0YXRpY19jYXN0PFdhdGNoZG9nKj4oY29udGV4dCkpLT5tdXRleF8pID09CisgICAgICAgICAgICAga1NiTXV0ZXhBY3F1aXJlZCk7CisKKyAgICBpZiAoISgoc3RhdGljX2Nhc3Q8V2F0Y2hkb2cqPihjb250ZXh0KSktPmlzX21vbml0b3JpbmdfKSkgeworICAgICAgU0JfQ0hFQ0soU2JNdXRleFJlbGVhc2UoJihzdGF0aWNfY2FzdDxXYXRjaGRvZyo+KGNvbnRleHQpKS0+bXV0ZXhfKSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpbnQ2NF90IGN1cnJlbnRfdGltZSA9IFNiVGltZVRvUG9zaXgoU2JUaW1lR2V0Tm93KCkpOworICAgIFNiVGltZU1vbm90b25pYyBjdXJyZW50X21vbm90b25pY190aW1lID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisgICAgc3RkOjpzdHJpbmcgc2VyaWFsaXplZF93YXRjaGRvZ19pbmRleCA9ICIiOworCisgICAgLy8gSXRlcmF0ZXMgdGhyb3VnaCBXYXRjaGRvZyBpbmRleCB0byBtb25pdG9yIGFsbCByZWdpc3RlcmVkIGNsaWVudHMuCisgICAgYm9vbCBuZXdfd2F0Y2hkb2dfdmlvbGF0aW9uID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBpdCA6IHN0YXRpY19jYXN0PFdhdGNoZG9nKj4oY29udGV4dCktPndhdGNoZG9nX2luZGV4XykgeworICAgICAgLy8gSWdub3JlcyBhbmQgcmVzZXRzIGNsaWVudHMgaW4gaWRsZSBzdGF0ZXMuCisgICAgICBpZiAoc3RhdGljX2Nhc3Q8V2F0Y2hkb2cqPihjb250ZXh0KS0+c3RhdGVfID4gaXQuc2Vjb25kLT5tb25pdG9yX3N0YXRlKSB7CisgICAgICAgIGl0LnNlY29uZC0+dGltZV9yZWdpc3RlcmVkX21vbm90b25pY19taWNyb3NlY29uZHMgPQorICAgICAgICAgICAgY3VycmVudF9tb25vdG9uaWNfdGltZTsKKyAgICAgICAgaXQuc2Vjb25kLT50aW1lX2xhc3RfcGluZ2VkX21pY3Jvc2Vjb25kcyA9IGN1cnJlbnRfbW9ub3RvbmljX3RpbWU7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBTYlRpbWVNb25vdG9uaWMgdGltZV9kZWx0YSA9CisgICAgICAgICAgY3VycmVudF9tb25vdG9uaWNfdGltZSAtIGl0LnNlY29uZC0+dGltZV9sYXN0X3BpbmdlZF9taWNyb3NlY29uZHM7CisgICAgICBTYlRpbWVNb25vdG9uaWMgdGltZV93YWl0ID0KKyAgICAgICAgICBjdXJyZW50X21vbm90b25pY190aW1lIC0KKyAgICAgICAgICBpdC5zZWNvbmQtPnRpbWVfcmVnaXN0ZXJlZF9tb25vdG9uaWNfbWljcm9zZWNvbmRzOworCisgICAgICAvLyBXYXRjaGRvZyB2aW9sYXRpb24KKyAgICAgIGlmICh0aW1lX2RlbHRhID4gaXQuc2Vjb25kLT50aW1lX2ludGVydmFsX21pY3Jvc2Vjb25kcyAmJgorICAgICAgICAgIHRpbWVfd2FpdCA+IGl0LnNlY29uZC0+dGltZV93YWl0X21pY3Jvc2Vjb25kcykgeworICAgICAgICAvLyBSZXNldCB0aW1lIGxhc3QgcGluZ2VkLgorICAgICAgICBpdC5zZWNvbmQtPnRpbWVfbGFzdF9waW5nZWRfbWljcm9zZWNvbmRzID0gY3VycmVudF9tb25vdG9uaWNfdGltZTsKKyAgICAgICAgLy8gR2V0IHNlcmlhbGl6ZWQgV2F0Y2hkb2cgaW5kZXguCisgICAgICAgIGlmIChzZXJpYWxpemVkX3dhdGNoZG9nX2luZGV4ID09ICIiKSB7CisgICAgICAgICAgc2VyaWFsaXplZF93YXRjaGRvZ19pbmRleCA9CisgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdhdGNoZG9nKj4oY29udGV4dCktPkdldFNlcmlhbGl6ZWRXYXRjaGRvZ0luZGV4KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGVzIFdhdGNoZG9nIHZpb2xhdGlvbnMuCisgICAgICAgIGF1dG8gaXRlciA9IChzdGF0aWNfY2FzdDxXYXRjaGRvZyo+KGNvbnRleHQpLT53YXRjaGRvZ192aW9sYXRpb25zXykKKyAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKGl0LnNlY29uZC0+bmFtZSk7CisgICAgICAgIGJvb2wgYWxyZWFkeV92aW9sYXRlZCA9CisgICAgICAgICAgICBpdGVyICE9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8V2F0Y2hkb2cqPihjb250ZXh0KS0+d2F0Y2hkb2dfdmlvbGF0aW9uc18pLmVuZCgpOworCisgICAgICAgIGlmIChhbHJlYWR5X3Zpb2xhdGVkKSB7CisgICAgICAgICAgLy8gUHJldmVudHMgZXhjZXNzaXZlIFdhdGNoZG9nIHZpb2xhdGlvbiB1cGRhdGVzLgorICAgICAgICAgIGlmIChpdGVyLT5zZWNvbmQtPnZpb2xhdGlvbl9jb3VudCA8PSBrV2F0Y2hkb2dNYXhWaW9sYXRpb25zKQorICAgICAgICAgICAgbmV3X3dhdGNoZG9nX3Zpb2xhdGlvbiA9IHRydWU7CisgICAgICAgICAgaXRlci0+c2Vjb25kLT5waW5nX2luZm9zID0gaXQuc2Vjb25kLT5waW5nX2luZm9zOworICAgICAgICAgIGl0ZXItPnNlY29uZC0+dmlvbGF0aW9uX3RpbWVfbWljcm9zZWNvbmRzID0gY3VycmVudF90aW1lOworICAgICAgICAgIGl0ZXItPnNlY29uZC0+dmlvbGF0aW9uX2RlbHRhX21pY3Jvc2Vjb25kcyA9IHRpbWVfZGVsdGE7CisgICAgICAgICAgaXRlci0+c2Vjb25kLT52aW9sYXRpb25fY291bnQrKzsKKyAgICAgICAgICBpdGVyLT5zZWNvbmQtPnNlcmlhbGl6ZWRfd2F0Y2hkb2dfaW5kZXggPSBzZXJpYWxpemVkX3dhdGNoZG9nX2luZGV4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG5ld193YXRjaGRvZ192aW9sYXRpb24gPSB0cnVlOworICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxWaW9sYXRpb24+IHZpb2xhdGlvbihuZXcgVmlvbGF0aW9uKTsKKyAgICAgICAgICAqdmlvbGF0aW9uID0gKihpdC5zZWNvbmQpOworICAgICAgICAgIHZpb2xhdGlvbi0+dmlvbGF0aW9uX3RpbWVfbWljcm9zZWNvbmRzID0gY3VycmVudF90aW1lOworICAgICAgICAgIHZpb2xhdGlvbi0+dmlvbGF0aW9uX2RlbHRhX21pY3Jvc2Vjb25kcyA9IHRpbWVfZGVsdGE7CisgICAgICAgICAgdmlvbGF0aW9uLT52aW9sYXRpb25fY291bnQgPSAxOworICAgICAgICAgIHZpb2xhdGlvbi0+c2VyaWFsaXplZF93YXRjaGRvZ19pbmRleCA9IHNlcmlhbGl6ZWRfd2F0Y2hkb2dfaW5kZXg7CisgICAgICAgICAgKHN0YXRpY19jYXN0PFdhdGNoZG9nKj4oY29udGV4dCktPndhdGNoZG9nX3Zpb2xhdGlvbnNfKQorICAgICAgICAgICAgICAuZW1wbGFjZSh2aW9sYXRpb24tPm5hbWUsIHN0ZDo6bW92ZSh2aW9sYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAobmV3X3dhdGNoZG9nX3Zpb2xhdGlvbikgU2VyaWFsaXplV2F0Y2hkb2dWaW9sYXRpb25zKGNvbnRleHQpOworCisgICAgU0JfQ0hFQ0soU2JNdXRleFJlbGVhc2UoJihzdGF0aWNfY2FzdDxXYXRjaGRvZyo+KGNvbnRleHQpKS0+bXV0ZXhfKSk7CisgICAgU2JUaHJlYWRTbGVlcChzdGF0aWNfY2FzdDxXYXRjaGRvZyo+KGNvbnRleHQpLT5zbWFsbGVzdF90aW1lX2ludGVydmFsXyk7CisgIH0KKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6c3RyaW5nIFdhdGNoZG9nOjpHZXRTZXJpYWxpemVkV2F0Y2hkb2dJbmRleCgpIHsKKyAgLy8gR2V0cyB0aGUgY3VycmVudCBsaXN0IG9mIHJlZ2lzdGVyZWQgY2xpZW50cyBmcm9tIHRoZSBXYXRjaGRvZyBpbmRleCBhbmQKKyAgLy8gcmV0dXJucyBpdCBhcyBhIHNlcmlhbGl6ZWQganNvbiBzdHJpbmcuCisKKyAgLy8gV2F0Y2hkb2cgc3R1YgorICBpZiAoaXNfc3R1Yl8pIHJldHVybiAiIjsKKworICBzdGQ6OnN0cmluZyBzZXJpYWxpemVkX3dhdGNoZG9nX2luZGV4ID0gIlsiOworICBzdGQ6OnN0cmluZyBjb21tYSA9ICIiOworICBmb3IgKGF1dG8mIGl0IDogd2F0Y2hkb2dfaW5kZXhfKSB7CisgICAgc2VyaWFsaXplZF93YXRjaGRvZ19pbmRleCArPSAoY29tbWEgKyAiXCIiICsgaXQuZmlyc3QgKyAiXCIiKTsKKyAgICBjb21tYSA9ICIsICI7CisgIH0KKyAgc2VyaWFsaXplZF93YXRjaGRvZ19pbmRleCArPSAiXSI7CisgIHJldHVybiBzZXJpYWxpemVkX3dhdGNoZG9nX2luZGV4OworfQorCit2b2lkIFdhdGNoZG9nOjpTZXJpYWxpemVXYXRjaGRvZ1Zpb2xhdGlvbnModm9pZCogY29udGV4dCkgeworICAvLyBXcml0ZXMgY3VycmVudCBXYXRjaGRvZyB2aW9sYXRpb25zIHRvIHBlcnNpc3RlbnQgc3RvcmFnZSBhcyBhIGpzb24gZmlsZS4KKyAgc3RkOjpzdHJpbmcgd2F0Y2hkb2dfanNvbiA9ICJ7XG4gIFwid2F0Y2hkb2dfdmlvbGF0aW9uc1wiOiBbXG4iOworICBzdGQ6OnN0cmluZyBjb21tYSA9ICIiOworICBmb3IgKGF1dG8mIGl0IDogc3RhdGljX2Nhc3Q8V2F0Y2hkb2cqPihjb250ZXh0KS0+d2F0Y2hkb2dfdmlvbGF0aW9uc18pIHsKKyAgICBzdGQ6OnN0cmluZyBwaW5nX2luZm9zID0gIlsiOworICAgIHN0ZDo6c3RyaW5nIGlubmVyX2NvbW1hID0gIiI7CisgICAgd2hpbGUgKGl0LnNlY29uZC0+cGluZ19pbmZvcy5zaXplKCkgPiAwKSB7CisgICAgICBwaW5nX2luZm9zICs9IChpbm5lcl9jb21tYSArICJcIiIgKyBpdC5zZWNvbmQtPnBpbmdfaW5mb3MuZnJvbnQoKSArICJcIiIpOworICAgICAgaXQuc2Vjb25kLT5waW5nX2luZm9zLnBvcCgpOworICAgICAgaW5uZXJfY29tbWEgPSAiLCAiOworICAgIH0KKyAgICBwaW5nX2luZm9zICs9ICJdIjsKKworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzczsKKyAgICBzcyA8PCBjb21tYSA8PCAiICAgIHtcbiIKKyAgICAgICA8PCAiICAgICAgXCJuYW1lXCI6IFwiIiA8PCBpdC5zZWNvbmQtPm5hbWUgPDwgIlwiLFxuIgorICAgICAgIDw8ICIgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiIiA8PCBpdC5zZWNvbmQtPmRlc2NyaXB0aW9uIDw8ICJcIixcbiIKKyAgICAgICA8PCAiICAgICAgXCJwaW5nX2luZm9zXCI6ICIgPDwgcGluZ19pbmZvcyA8PCAiLFxuIgorICAgICAgIDw8ICIgICAgICBcIm1vbml0b3Jfc3RhdGVcIjogXCIiCisgICAgICAgPDwgc3RkOjpzdHJpbmcoR2V0QXBwbGljYXRpb25TdGF0ZVN0cmluZyhpdC5zZWNvbmQtPm1vbml0b3Jfc3RhdGUpKQorICAgICAgIDw8ICJcIixcbiIKKyAgICAgICA8PCAiICAgICAgXCJ0aW1lX2ludGVydmFsX21pY3Jvc2Vjb25kc1wiOiAiCisgICAgICAgPDwgaXQuc2Vjb25kLT50aW1lX2ludGVydmFsX21pY3Jvc2Vjb25kcyA8PCAiLFxuIgorICAgICAgIDw8ICIgICAgICBcInRpbWVfd2FpdF9taWNyb3NlY29uZHNcIjogIgorICAgICAgIDw8IGl0LnNlY29uZC0+dGltZV93YWl0X21pY3Jvc2Vjb25kcyA8PCAiLFxuIgorICAgICAgIDw8ICIgICAgICBcInRpbWVfcmVnaXN0ZXJlZF9taWNyb3NlY29uZHNcIjogIgorICAgICAgIDw8IGl0LnNlY29uZC0+dGltZV9yZWdpc3RlcmVkX21pY3Jvc2Vjb25kcyA8PCAiLFxuIgorICAgICAgIDw8ICIgICAgICBcInZpb2xhdGlvbl90aW1lX21pY3Jvc2Vjb25kc1wiOiAiCisgICAgICAgPDwgaXQuc2Vjb25kLT52aW9sYXRpb25fdGltZV9taWNyb3NlY29uZHMgPDwgIixcbiIKKyAgICAgICA8PCAiICAgICAgXCJ2aW9sYXRpb25fZGVsdGFfbWljcm9zZWNvbmRzXCI6ICIKKyAgICAgICA8PCBpdC5zZWNvbmQtPnZpb2xhdGlvbl9kZWx0YV9taWNyb3NlY29uZHMgPDwgIixcbiIKKyAgICAgICA8PCAiICAgICAgXCJ2aW9sYXRpb25fY291bnRcIjogIiA8PCBpdC5zZWNvbmQtPnZpb2xhdGlvbl9jb3VudCA8PCAiLFxuIgorICAgICAgIDw8ICIgICAgICBcIndhdGNoZG9nX2luZGV4XCI6ICIgPDwgaXQuc2Vjb25kLT5zZXJpYWxpemVkX3dhdGNoZG9nX2luZGV4CisgICAgICAgPDwgIlxuIgorICAgICAgIDw8ICIgICAgfSI7CisgICAgd2F0Y2hkb2dfanNvbiArPSBzcy5zdHIoKTsKKyAgICBjb21tYSA9ICIsXG4iOworICB9CisgIHdhdGNoZG9nX2pzb24gKz0gIlxuICBdXG59IjsKKworICBTQl9MT0coSU5GTykgPDwgIldyaXRpbmcgV2F0Y2hkb2cgdmlvbGF0aW9ucyB0bzogIgorICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8V2F0Y2hkb2cqPihjb250ZXh0KS0+R2V0V2F0Y2hkb2dGaWxlUGF0aHModHJ1ZSk7CisgIFNCX0xPRyhJTkZPKSA8PCB3YXRjaGRvZ19qc29uOworCisgIHN0YXJib2FyZDo6U2NvcGVkRmlsZSB3YXRjaGRvZ19maWxlKAorICAgICAgKHN0YXRpY19jYXN0PFdhdGNoZG9nKj4oY29udGV4dCktPkdldFdhdGNoZG9nRmlsZVBhdGhzKHRydWUpKS5jX3N0cigpLAorICAgICAga1NiRmlsZUNyZWF0ZUFsd2F5cyB8IGtTYkZpbGVXcml0ZSk7CisgIHdhdGNoZG9nX2ZpbGUuV3JpdGVBbGwod2F0Y2hkb2dfanNvbi5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4od2F0Y2hkb2dfanNvbi5zaXplKCkpKTsKK30KKworYm9vbCBXYXRjaGRvZzo6UmVnaXN0ZXIoc3RkOjpzdHJpbmcgbmFtZSwgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBtb25pdG9yX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lX2ludGVydmFsLCBpbnQ2NF90IHRpbWVfd2FpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGxhY2UgcmVwbGFjZSkgeworICByZXR1cm4gUmVnaXN0ZXIobmFtZSwgbmFtZSwgbW9uaXRvcl9zdGF0ZSwgdGltZV9pbnRlcnZhbCwgdGltZV93YWl0LCByZXBsYWNlKTsKK30KKworYm9vbCBXYXRjaGRvZzo6UmVnaXN0ZXIoc3RkOjpzdHJpbmcgbmFtZSwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpBcHBsaWNhdGlvblN0YXRlIG1vbml0b3Jfc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVfaW50ZXJ2YWwsIGludDY0X3QgdGltZV93YWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgUmVwbGFjZSByZXBsYWNlKSB7CisgIC8vIFdhdGNoZG9nIHN0dWIKKyAgaWYgKGlzX3N0dWJfKSByZXR1cm4gdHJ1ZTsKKworICBTQl9DSEVDSyhTYk11dGV4QWNxdWlyZSgmbXV0ZXhfKSA9PSBrU2JNdXRleEFjcXVpcmVkKTsKKworICAvLyBJZiByZXBsYWNlIGlzIFBJTkcgb3IgQUxMLCBoYW5kbGVzIGFscmVhZHkgcmVnaXN0ZXJlZCBjYXNlcy4KKyAgaWYgKHJlcGxhY2UgIT0gTk9ORSkgeworICAgIGF1dG8gaXQgPSB3YXRjaGRvZ19pbmRleF8uZmluZChuYW1lKTsKKyAgICBib29sIGFscmVhZHlfcmVnaXN0ZXJlZCA9IGl0ICE9IHdhdGNoZG9nX2luZGV4Xy5lbmQoKTsKKworICAgIGlmIChhbHJlYWR5X3JlZ2lzdGVyZWQpIHsKKyAgICAgIGlmIChyZXBsYWNlID09IFBJTkcpIHsKKyAgICAgICAgaXQtPnNlY29uZC0+dGltZV9sYXN0X3BpbmdlZF9taWNyb3NlY29uZHMgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKyAgICAgICAgU0JfQ0hFQ0soU2JNdXRleFJlbGVhc2UoJm11dGV4XykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChyZXBsYWNlID09IEFMTCkgVW5yZWdpc3RlcihuYW1lLCBmYWxzZSk7CisgICAgfQorICB9CisKKyAgLy8gQ3JlYXRlcyBuZXcgQ2xpZW50LgorICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50PiBjbGllbnQobmV3IENsaWVudCk7CisgIGNsaWVudC0+bmFtZSA9IG5hbWU7CisgIGNsaWVudC0+ZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgY2xpZW50LT5waW5nX2luZm9zID0gc3RkOjpxdWV1ZTxzdGQ6OnN0cmluZz4oKTsKKyAgY2xpZW50LT5tb25pdG9yX3N0YXRlID0gbW9uaXRvcl9zdGF0ZTsKKyAgY2xpZW50LT50aW1lX2ludGVydmFsX21pY3Jvc2Vjb25kcyA9IHRpbWVfaW50ZXJ2YWw7CisgIGNsaWVudC0+dGltZV93YWl0X21pY3Jvc2Vjb25kcyA9IHRpbWVfd2FpdDsKKyAgY2xpZW50LT50aW1lX3JlZ2lzdGVyZWRfbWljcm9zZWNvbmRzID0gU2JUaW1lVG9Qb3NpeChTYlRpbWVHZXROb3coKSk7CisgIGNsaWVudC0+dGltZV9yZWdpc3RlcmVkX21vbm90b25pY19taWNyb3NlY29uZHMgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKyAgY2xpZW50LT50aW1lX2xhc3RfcGluZ2VkX21pY3Jvc2Vjb25kcyA9CisgICAgICBjbGllbnQtPnRpbWVfcmVnaXN0ZXJlZF9tb25vdG9uaWNfbWljcm9zZWNvbmRzOworCisgIC8vIFJlZ2lzdGVycy4KKyAgYXV0byByZXN1bHQgPSB3YXRjaGRvZ19pbmRleF8uZW1wbGFjZShuYW1lLCBzdGQ6Om1vdmUoY2xpZW50KSk7CisgIC8vIENoZWNrcyBmb3IgbmV3IHNtYWxsZXN0X3RpbWVfaW50ZXJ2YWxfLgorICBzbWFsbGVzdF90aW1lX2ludGVydmFsXyA9IHN0ZDo6bWluKHNtYWxsZXN0X3RpbWVfaW50ZXJ2YWxfLCB0aW1lX2ludGVydmFsKTsKKworICBTQl9DSEVDSyhTYk11dGV4UmVsZWFzZSgmbXV0ZXhfKSk7CisKKyAgaWYgKHJlc3VsdC5zZWNvbmQpIHsKKyAgICBTQl9ETE9HKElORk8pIDw8ICJXYXRjaGRvZyBSZWdpc3RlcmVkOiAiIDw8IG5hbWU7CisgIH0gZWxzZSB7CisgICAgU0JfRExPRyhFUlJPUikgPDwgIldhdGNoZG9nIFVuYWJsZSB0byBSZWdpc3RlcjogIiA8PCBuYW1lOworICB9CisgIHJldHVybiByZXN1bHQuc2Vjb25kOworfQorCitib29sIFdhdGNoZG9nOjpVbnJlZ2lzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBib29sIGxvY2spIHsKKyAgLy8gV2F0Y2hkb2cgc3R1YgorICBpZiAoaXNfc3R1Yl8pIHJldHVybiB0cnVlOworCisgIGlmIChsb2NrKSBTQl9DSEVDSyhTYk11dGV4QWNxdWlyZSgmbXV0ZXhfKSA9PSBrU2JNdXRleEFjcXVpcmVkKTsKKyAgLy8gVW5yZWdpc3RlcnMuCisgIGF1dG8gcmVzdWx0ID0gd2F0Y2hkb2dfaW5kZXhfLmVyYXNlKG5hbWUpOworICAvLyBTZXRzIG5ldyBzbWFsbGVzdF90aW1lX2ludGVydmFsXy4KKyAgc21hbGxlc3RfdGltZV9pbnRlcnZhbF8gPSBrV2F0Y2hkb2dTbWFsbGVzdFRpbWVJbnRlcnZhbDsKKyAgZm9yIChhdXRvJiBpdCA6IHdhdGNoZG9nX2luZGV4XykgeworICAgIHNtYWxsZXN0X3RpbWVfaW50ZXJ2YWxfID0gc3RkOjptaW4oc21hbGxlc3RfdGltZV9pbnRlcnZhbF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC5zZWNvbmQtPnRpbWVfaW50ZXJ2YWxfbWljcm9zZWNvbmRzKTsKKyAgfQorICBpZiAobG9jaykgU0JfQ0hFQ0soU2JNdXRleFJlbGVhc2UoJm11dGV4XykpOworCisgIGlmIChyZXN1bHQpIHsKKyAgICBTQl9ETE9HKElORk8pIDw8ICJXYXRjaGRvZyBVbnJlZ2lzdGVyZWQ6ICIgPDwgbmFtZTsKKyAgfSBlbHNlIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCAiV2F0Y2hkb2cgVW5hYmxlIHRvIFVucmVnaXN0ZXI6ICIgPDwgbmFtZTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFdhdGNoZG9nOjpQaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7IHJldHVybiBQaW5nKG5hbWUsICIiKTsgfQorCitib29sIFdhdGNoZG9nOjpQaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgaW5mbykgeworICAvLyBXYXRjaGRvZyBzdHViCisgIGlmIChpc19zdHViXykgcmV0dXJuIHRydWU7CisKKyAgU0JfQ0hFQ0soU2JNdXRleEFjcXVpcmUoJm11dGV4XykgPT0ga1NiTXV0ZXhBY3F1aXJlZCk7CisgIGF1dG8gaXQgPSB3YXRjaGRvZ19pbmRleF8uZmluZChuYW1lKTsKKyAgYm9vbCBjbGllbnRfZXhpc3RzID0gaXQgIT0gd2F0Y2hkb2dfaW5kZXhfLmVuZCgpOworCisgIGlmIChjbGllbnRfZXhpc3RzKSB7CisgICAgLy8gVXBkYXRlcyBsYXN0IHBpbmcuCisgICAgaXQtPnNlY29uZC0+dGltZV9sYXN0X3BpbmdlZF9taWNyb3NlY29uZHMgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKKyAgICBpZiAoaW5mbyAhPSAiIikgeworICAgICAgaW50NjRfdCBjdXJyZW50X3RpbWUgPSBTYlRpbWVUb1Bvc2l4KFNiVGltZUdldE5vdygpKTsKKyAgICAgIGl0LT5zZWNvbmQtPnBpbmdfaW5mb3MucHVzaChzdGQ6OnRvX3N0cmluZyhjdXJyZW50X3RpbWUpICsgIlxuIiArIGluZm8gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIpOworICAgICAgaWYgKGl0LT5zZWNvbmQtPnBpbmdfaW5mb3Muc2l6ZSgpID4ga1dhdGNoZG9nTWF4UGluZ0luZm9zKQorICAgICAgICBpdC0+c2Vjb25kLT5waW5nX2luZm9zLnBvcCgpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCAiV2F0Y2hkb2cgVW5hYmxlIHRvIFBpbmc6ICIgPDwgbmFtZTsKKyAgfQorICBTQl9DSEVDSyhTYk11dGV4UmVsZWFzZSgmbXV0ZXhfKSk7CisgIHJldHVybiBjbGllbnRfZXhpc3RzOworfQorCitzdGQ6OnN0cmluZyBXYXRjaGRvZzo6R2V0V2F0Y2hkb2dWaW9sYXRpb25zKGJvb2wgY3VycmVudCkgeworICAvLyBHZXRzIHRoZSBjdXJyZW50IFdhdGNoZG9nIHZpb2xhdGlvbnMgZmlsZSByZXByZXNlbnRpbmcgb25nb2luZyB2aW9sYXRpb25zCisgIC8vIG9yIGdldHMgdGhlIHByZXZpb3VzIFdhdGNoZG9nIHZpb2xhdGlvbnMgZmlsZSBjb250YWluaW5nIHZpb2xhdGlvbnMgZnJvbQorICAvLyBwcmV2aW91cyBhcHAgc3RhcnRzIGFuZCBzaW5jZSB0aGUgbGFzdCBjYWxsICh1cCB0byBhIGxpbWl0KS4KKworICAvLyBXYXRjaGRvZyBzdHViCisgIGlmIChpc19zdHViXykgcmV0dXJuICIiOworCisgIFNCX0NIRUNLKFNiTXV0ZXhBY3F1aXJlKCZtdXRleF8pID09IGtTYk11dGV4QWNxdWlyZWQpOworICBzdGFyYm9hcmQ6OlNjb3BlZEZpbGUgcmVhZF9maWxlKEdldFdhdGNoZG9nRmlsZVBhdGhzKGN1cnJlbnQpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiRmlsZU9wZW5Pbmx5IHwga1NiRmlsZVJlYWQpOworICBpZiAocmVhZF9maWxlLklzVmFsaWQoKSkgeworICAgIGludDY0X3Qga0ZpbGVTaXplID0gcmVhZF9maWxlLkdldFNpemUoKTsKKyAgICBzdGQ6OnN0cmluZyB3YXRjaGRvZ19jb250ZW50KGtGaWxlU2l6ZSArIDEsICdcMCcpOworICAgIHJlYWRfZmlsZS5SZWFkQWxsKCZ3YXRjaGRvZ19jb250ZW50WzBdLCBrRmlsZVNpemUpOworICAgIFNCX0NIRUNLKFNiTXV0ZXhSZWxlYXNlKCZtdXRleF8pKTsKKyAgICBTQl9MT0coSU5GTykgPDwgIlJlYWRpbmcgV2F0Y2hkb2cgdmlvbGF0aW9uczpcbiIgPDwgd2F0Y2hkb2dfY29udGVudDsKKyAgICByZXR1cm4gd2F0Y2hkb2dfY29udGVudDsKKyAgfSBlbHNlIHsKKyAgICBTQl9DSEVDSyhTYk11dGV4UmVsZWFzZSgmbXV0ZXhfKSk7CisgICAgU0JfTE9HKElORk8pIDw8ICJObyBXYXRjaGRvZyBWaW9sYXRpb25zLiI7CisgICAgcmV0dXJuICIiOworICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3YXRjaGRvZworfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dhdGNoZG9nL3dhdGNoZG9nLmggYi9jb2JhbHQvd2F0Y2hkb2cvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjUxYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dhdGNoZG9nL3dhdGNoZG9nLmgKQEAgLTAsMCArMSwxMzggQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV0FUQ0hET0dfV0FUQ0hET0dfSF8KKyNkZWZpbmUgQ09CQUxUX1dBVENIRE9HX1dBVENIRE9HX0hfCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cXVldWU+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb2JhbHQvYmFzZS9hcHBsaWNhdGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgImNvYmFsdC93YXRjaGRvZy9zaW5nbGV0b24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbXV0ZXguaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd2F0Y2hkb2cgeworCisvLyBDbGllbnQgdG8gbW9uaXRvcgordHlwZWRlZiBzdHJ1Y3QgQ2xpZW50IHsKKyAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb247CisgIC8vIExpc3Qgb2Ygc3RyaW5ncyBvcHRpb25hbGx5IHByb3ZpZGVkIHdpdGggZWFjaCBQaW5nLgorICBzdGQ6OnF1ZXVlPHN0ZDo6c3RyaW5nPiBwaW5nX2luZm9zOworICAvLyBBcHBsaWNhdGlvbiBzdGF0ZSB0byBjb250aW51ZSBtb25pdG9yaW5nIGNsaWVudCB1cCB0by4KKyAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBtb25pdG9yX3N0YXRlOworICBpbnQ2NF90IHRpbWVfaW50ZXJ2YWxfbWljcm9zZWNvbmRzOworICBpbnQ2NF90IHRpbWVfd2FpdF9taWNyb3NlY29uZHM7CisgIGludDY0X3QgdGltZV9yZWdpc3RlcmVkX21pY3Jvc2Vjb25kczsgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIGVwb2NoCisgIFNiVGltZU1vbm90b25pYyB0aW1lX3JlZ2lzdGVyZWRfbW9ub3RvbmljX21pY3Jvc2Vjb25kczsgIC8vIHNpbmNlIChyZWxhdGl2ZSkKKyAgU2JUaW1lTW9ub3RvbmljIHRpbWVfbGFzdF9waW5nZWRfbWljcm9zZWNvbmRzOyAgICAgICAgICAgLy8gc2luY2UgKHJlbGF0aXZlKQorfSBDbGllbnQ7CisKKy8vIFdhdGNoZG9nIHZpb2xhdGlvbgordHlwZWRlZiBzdHJ1Y3QgVmlvbGF0aW9uIHsKKyAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb247CisgIC8vIExpc3Qgb2Ygc3RyaW5ncyBvcHRpb25hbGx5IHByb3ZpZGVkIHdpdGggZWFjaCBQaW5nLgorICBzdGQ6OnF1ZXVlPHN0ZDo6c3RyaW5nPiBwaW5nX2luZm9zOworICAvLyBBcHBsaWNhdGlvbiBzdGF0ZSB0byBjb250aW51ZSBtb25pdG9yaW5nIGNsaWVudCB1cCB0by4KKyAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBtb25pdG9yX3N0YXRlOworICBpbnQ2NF90IHRpbWVfaW50ZXJ2YWxfbWljcm9zZWNvbmRzOworICBpbnQ2NF90IHRpbWVfd2FpdF9taWNyb3NlY29uZHM7CisgIGludDY0X3QgdGltZV9yZWdpc3RlcmVkX21pY3Jvc2Vjb25kczsgIC8vIHNpbmNlIGVwb2NoCisgIGludDY0X3QgdmlvbGF0aW9uX3RpbWVfbWljcm9zZWNvbmRzOyAgIC8vIHNpbmNlIGVwb2NoCisgIGludDY0X3QgdmlvbGF0aW9uX2RlbHRhX21pY3Jvc2Vjb25kczsgIC8vIG92ZXIgdGltZV9pbnRlcnZhbAorICBpbnQ2NF90IHZpb2xhdGlvbl9jb3VudDsKKyAgLy8gV2F0Y2hkb2cgaW5kZXggYXMgYSBzZXJpYWxpemVkIGpzb24gc3RyaW5nCisgIHN0ZDo6c3RyaW5nIHNlcmlhbGl6ZWRfd2F0Y2hkb2dfaW5kZXg7CisKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgQ2xpZW50JiBjKSB7CisgICAgbmFtZSA9IGMubmFtZTsKKyAgICBkZXNjcmlwdGlvbiA9IGMuZGVzY3JpcHRpb247CisgICAgcGluZ19pbmZvcyA9IGMucGluZ19pbmZvczsKKyAgICBtb25pdG9yX3N0YXRlID0gYy5tb25pdG9yX3N0YXRlOworICAgIHRpbWVfaW50ZXJ2YWxfbWljcm9zZWNvbmRzID0gYy50aW1lX3dhaXRfbWljcm9zZWNvbmRzOworICAgIHRpbWVfd2FpdF9taWNyb3NlY29uZHMgPSBjLnRpbWVfd2FpdF9taWNyb3NlY29uZHM7CisgICAgdGltZV9yZWdpc3RlcmVkX21pY3Jvc2Vjb25kcyA9IGMudGltZV9yZWdpc3RlcmVkX21pY3Jvc2Vjb25kczsKKyAgfQorfSBWaW9sYXRpb247CisKKy8vIFJlZ2lzdGVyIGJlaGF2aW9yIHdpdGggcHJldmlvdXNseSByZWdpc3RlcmVkIGNsaWVudHMgb2YgdGhlIHNhbWUgbmFtZS4KK2VudW0gUmVwbGFjZSB7CisgIE5PTkUgPSAwLAorICBQSU5HID0gMSwKKyAgQUxMID0gMiwKK307CisKK2NsYXNzIFdhdGNoZG9nIDogcHVibGljIFNpbmdsZXRvbjxXYXRjaGRvZz4geworIHB1YmxpYzoKKyAgYm9vbCBJbml0aWFsaXplKCk7CisgIGJvb2wgSW5pdGlhbGl6ZVN0dWIoKTsKKyAgdm9pZCBVbmluaXRpYWxpemUoKTsKKyAgdm9pZCBVcGRhdGVTdGF0ZShiYXNlOjpBcHBsaWNhdGlvblN0YXRlIHN0YXRlKTsKKyAgYm9vbCBSZWdpc3RlcihzdGQ6OnN0cmluZyBuYW1lLCBiYXNlOjpBcHBsaWNhdGlvblN0YXRlIG1vbml0b3Jfc3RhdGUsCisgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lX2ludGVydmFsLCBpbnQ2NF90IHRpbWVfd2FpdCA9IDAsCisgICAgICAgICAgICAgICAgUmVwbGFjZSByZXBsYWNlID0gTk9ORSk7CisgIGJvb2wgUmVnaXN0ZXIoc3RkOjpzdHJpbmcgbmFtZSwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgYmFzZTo6QXBwbGljYXRpb25TdGF0ZSBtb25pdG9yX3N0YXRlLCBpbnQ2NF90IHRpbWVfaW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgaW50NjRfdCB0aW1lX3dhaXQgPSAwLCBSZXBsYWNlIHJlcGxhY2UgPSBOT05FKTsKKyAgYm9vbCBVbnJlZ2lzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBib29sIGxvY2sgPSB0cnVlKTsKKyAgYm9vbCBQaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKKyAgYm9vbCBQaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgaW5mbyk7CisgIHN0ZDo6c3RyaW5nIEdldFdhdGNoZG9nVmlvbGF0aW9ucyhib29sIGN1cnJlbnQgPSBmYWxzZSk7CisKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBHZXRXYXRjaGRvZ0ZpbGVQYXRocyhib29sIGN1cnJlbnQpOworICB2b2lkIFByZXNlcnZlUHJldmlvdXNXYXRjaGRvZ1Zpb2xhdGlvbnMoKTsKKyAgc3RhdGljIHZvaWQqIE1vbml0b3Iodm9pZCogY29udGV4dCk7CisgIHN0ZDo6c3RyaW5nIEdldFNlcmlhbGl6ZWRXYXRjaGRvZ0luZGV4KCk7CisgIHN0YXRpYyB2b2lkIFNlcmlhbGl6ZVdhdGNoZG9nVmlvbGF0aW9ucyh2b2lkKiBjb250ZXh0KTsKKworICAvLyBDdXJyZW50IFdhdGNoZG9nIHZpb2xhdGlvbnMgZmlsZSBwYXRoLgorICBzdGQ6OnN0cmluZyB3YXRjaGRvZ19maWxlXzsKKyAgLy8gUHJldmlvdXMgV2F0Y2hkb2cgdmlvbGF0aW9ucyBmaWxlIHBhdGguCisgIHN0ZDo6c3RyaW5nIHdhdGNoZG9nX29sZF9maWxlXzsKKyAgLy8gQ3JlYXRlcyBhIGxvY2sgd2hpY2ggZW5zdXJlcyB0aGF0IGVhY2ggbG9vcCBvZiBtb25pdG9yIGlzIGF0b21pYyBpbiB0aGF0CisgIC8vIG1vZGlmaWNhdGlvbnMgdG8gaXNfbW9uaXRvcmluZ18sIHN0YXRlXywgc21hbGxlc3RfdGltZV9pbnRlcnZhbF8sIGFuZCBtb3N0CisgIC8vIGltcG9ydGFudGx5IHRvIHRoZSBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBXYXRjaGRvZyBjbGllbnRzLAorICAvLyB3YXRjaGRvZ19pbmRleF8gYW5kIHdhdGNoZG9nX3Zpb2xhdGlvbnNfLCBvbmx5IG9jY3VyIGluIGJldHdlZW4gbG9vcHMgb2YKKyAgLy8gbW9uaXRvci4gQVBJIGZ1bmN0aW9ucyBsaWtlIFJlZ2lzdGVyKCksIFVucmVnaXN0ZXIoKSwgUGluZygpLCBhbmQKKyAgLy8gR2V0V2F0Y2hkb2dWaW9sYXRpb25zKCkgd2lsbCBiZSBjYWxsZWQgYnkgdmFyaW91cyB0aHJlYWRzIGFuZCBpbnRlcmFjdAorICAvLyB3aXRoIHRoZXNlIGNsYXNzIHZhcmlhYmxlcy4KKyAgU2JNdXRleCBtdXRleF87CisgIC8vIFRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBtb25pdG9yIGxvb3BzLgorICBpbnQ2NF90IHNtYWxsZXN0X3RpbWVfaW50ZXJ2YWxfOworICAvLyBNb25pdG9yIHRocmVhZC4KKyAgU2JUaHJlYWQgd2F0Y2hkb2dfdGhyZWFkXzsKKyAgLy8gVHJhY2tzIGFwcGxpY2F0aW9uIHN0YXRlLgorICBiYXNlOjpBcHBsaWNhdGlvblN0YXRlIHN0YXRlXyA9IGJhc2U6OmtBcHBsaWNhdGlvblN0YXRlU3RhcnRlZDsKKyAgLy8gRGljdGlvbmFyeSBvZiByZWdpc3RlcmVkIFdhdGNoZG9nIGNsaWVudHMuCisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPENsaWVudD4+IHdhdGNoZG9nX2luZGV4XzsKKyAgLy8gRGljdGlvbmFyeSBvZiBXYXRjaGRvZyB2aW9sYXRpb25zLgorICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxWaW9sYXRpb24+PgorICAgICAgd2F0Y2hkb2dfdmlvbGF0aW9uc187CisgIC8vIEZsYWcgdG8gc3R1YiBvdXQgV2F0Y2hkb2cuCisgIGJvb2wgaXNfc3R1Yl8gPSBmYWxzZTsKKyAgLy8gRmxhZyB0byBzdG9wIG1vbml0b3IgdGhyZWFkLgorICBib29sIGlzX21vbml0b3JpbmdfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdhdGNoZG9nCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dBVENIRE9HX1dBVENIRE9HX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd2ViL0JVSUxELmduIGIvY29iYWx0L3dlYi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDVmYjdjCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dlYi9CVUlMRC5nbgpAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3RhdGljX2xpYnJhcnkoIndlYiIpIHsKKyAgIyBDcmVhdGVzIGN5Y2xlIHdpdGggLy9jb2JhbHQvZG9tCisgIGNoZWNrX2luY2x1ZGVzID0gZmFsc2UKKworICBzb3VyY2VzID0gWworICAgICJhZ2VudC5jYyIsCisgICAgImFnZW50LmgiLAorICAgICJjb250ZXh0LmgiLAorICAgICJlbnZpcm9ubWVudF9zZXR0aW5ncy5oIiwKKyAgICAic3R1Yl93ZWJfY29udGV4dC5oIiwKKyAgXQorCisgIGRlcHMgPSBbCisgICAgIi8vY29iYWx0L2Jhc2UiLAorICAgICIvL2NvYmFsdC9sb2FkZXIiLAorICAgICIvL2NvYmFsdC9zY3JpcHQiLAorICAgICIvL2NvYmFsdC9zY3JpcHQ6ZW5naW5lIiwKKyAgICAiLy9jb2JhbHQvc2NyaXB0L3Y4YzplbmdpbmUiLAorICBdCisKKyAgcHVibGljX2RlcHMgPSBbCisgICAgIyBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IHRoZSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBnZW5lcmF0ZWQKKyAgICAjIGhlYWRlcnMgYXJlIHB1dCBvbiB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgdGFyZ2V0cyB0aGF0IGRlcGVuZAorICAgICMgb24gdGhpcyBvbmUuCisgICAgIi8vY29iYWx0L2Jyb3dzZXI6Z2VuZXJhdGVkX3R5cGVzIiwKKyAgXQorfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYi9hZ2VudC5jYyBiL2NvYmFsdC93ZWIvYWdlbnQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExMTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93ZWIvYWdlbnQuY2MKQEAgLTAsMCArMSw0MjAgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC93ZWIvYWdlbnQuaCIKKworI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL3VybC5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvZmV0Y2hlcl9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L2xvYWRlci9zY3JpcHRfbG9hZGVyX2ZhY3RvcnkuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lcnJvcl9yZXBvcnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2V4ZWN1dGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3J1bm5lci5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX29iamVjdC5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdlYiB7CisvLyBQcml2YXRlIFdlYiBDb250ZXh0IGltcGxlbWVudGF0aW9uLiBFYWNoIEFnZW50IG93bnMgYSBzaW5nbGUgaW5zdGFuY2Ugb2YKKy8vIHRoaXMgY2xhc3MsIHdoaWNoIHBlcmZvcm1zIGFsbCB0aGUgYWN0dWFsIHdvcmsuIEFsbCBmdW5jdGlvbnMgb2YgdGhpcyBjbGFzcworLy8gbXVzdCBiZSBjYWxsZWQgb24gdGhlIG1lc3NhZ2UgbG9vcCBvZiB0aGUgQWdlbnQgdGhyZWFkLCBzbyB0aGV5CisvLyBleGVjdXRlIHN5bmNocm9ub3VzbHkgd2l0aCByZXNwZWN0IHRvIG9uZSBhbm90aGVyLgorbmFtZXNwYWNlIHsKK2NsYXNzIEltcGwgOiBwdWJsaWMgQ29udGV4dCB7CisgcHVibGljOgorICBleHBsaWNpdCBJbXBsKGNvbnN0IEFnZW50OjpPcHRpb25zJiBvcHRpb25zKTsKKyAgdmlydHVhbCB+SW1wbCgpOworCisgIC8vIENvbnRleHQKKyAgLy8KKyAgdm9pZCBzZXRfbWVzc2FnZV9sb29wKGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3ApIHsKKyAgICBtZXNzYWdlX2xvb3BfID0gbWVzc2FnZV9sb29wOworICB9CisgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtZXNzYWdlX2xvb3BfOyB9CisgIHZvaWQgU2h1dERvd25KYXZhU2NyaXB0RW5naW5lKCkgZmluYWw7CisgIHZvaWQgc2V0X2ZldGNoZXJfZmFjdG9yeShsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBmYWN0b3J5KSBmaW5hbCB7CisgICAgZmV0Y2hlcl9mYWN0b3J5Xy5yZXNldChmYWN0b3J5KTsKKyAgfQorICBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnkoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIGZldGNoZXJfZmFjdG9yeV8uZ2V0KCk7CisgIH0KKyAgbG9hZGVyOjpTY3JpcHRMb2FkZXJGYWN0b3J5KiBzY3JpcHRfbG9hZGVyX2ZhY3RvcnkoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIHNjcmlwdF9sb2FkZXJfZmFjdG9yeV8uZ2V0KCk7CisgIH0KKyAgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lKiBqYXZhc2NyaXB0X2VuZ2luZSgpIGNvbnN0IGZpbmFsIHsKKyAgICByZXR1cm4gamF2YXNjcmlwdF9lbmdpbmVfLmdldCgpOworICB9CisgIHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQqIGdsb2JhbF9lbnZpcm9ubWVudCgpIGNvbnN0IGZpbmFsIHsKKyAgICByZXR1cm4gZ2xvYmFsX2Vudmlyb25tZW50Xy5nZXQoKTsKKyAgfQorICBzY3JpcHQ6OkV4ZWN1dGlvblN0YXRlKiBleGVjdXRpb25fc3RhdGUoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIGV4ZWN1dGlvbl9zdGF0ZV8uZ2V0KCk7CisgIH0KKyAgc2NyaXB0OjpTY3JpcHRSdW5uZXIqIHNjcmlwdF9ydW5uZXIoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIHNjcmlwdF9ydW5uZXJfLmdldCgpOworICB9CisgIGRvbTo6QmxvYjo6UmVnaXN0cnkqIGJsb2JfcmVnaXN0cnkoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIGJsb2JfcmVnaXN0cnlfLmdldCgpOworICB9CisgIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlKCkgY29uc3QgZmluYWwgeworICAgIERDSEVDSyhmZXRjaGVyX2ZhY3RvcnlfKTsKKyAgICByZXR1cm4gZmV0Y2hlcl9mYWN0b3J5Xy0+bmV0d29ya19tb2R1bGUoKTsKKyAgfQorCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbmFtZV87IH07CisgIHZvaWQgc2V0dXBfZW52aXJvbm1lbnRfc2V0dGluZ3MoCisgICAgICBFbnZpcm9ubWVudFNldHRpbmdzKiBlbnZpcm9ubWVudF9zZXR0aW5ncykgZmluYWwgeworICAgIGVudmlyb25tZW50X3NldHRpbmdzXy5yZXNldChlbnZpcm9ubWVudF9zZXR0aW5ncyk7CisgICAgaWYgKGVudmlyb25tZW50X3NldHRpbmdzXykgZW52aXJvbm1lbnRfc2V0dGluZ3NfLT5zZXRfY29udGV4dCh0aGlzKTsKKyAgfQorCisgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3MoKSBjb25zdCBmaW5hbCB7CisgICAgRENIRUNLX0VRKGVudmlyb25tZW50X3NldHRpbmdzXy0+Y29udGV4dCgpLCB0aGlzKTsKKyAgICByZXR1cm4gZW52aXJvbm1lbnRfc2V0dGluZ3NfLmdldCgpOworICB9CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3NlcnZpY2Utd29ya2VyLXJlZ2lzdHJhdGlvbi1jcmVhdGlvbgorICBzY29wZWRfcmVmcHRyPHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4gR2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigKKyAgICAgIHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKSBmaW5hbDsKKworIHByaXZhdGU6CisgIC8vIEluamVjdHMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW50byB0aGUgV2ViIENvbnRleHQncyBnbG9iYWwgb2JqZWN0LgorICB2b2lkIEluamVjdEdsb2JhbE9iamVjdEF0dHJpYnV0ZXMoCisgICAgICBjb25zdCBBZ2VudDo6T3B0aW9uczo6SW5qZWN0ZWRHbG9iYWxPYmplY3RBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZ2V0LXRoZS1zZXJ2aWNlLXdvcmtlci1vYmplY3QKKyAgc2NvcGVkX3JlZnB0cjx3b3JrZXI6OlNlcnZpY2VXb3JrZXI+IEdldFNlcnZpY2VXb3JrZXIoCisgICAgICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJPYmplY3QqIHdvcmtlcik7CisKKyAgLy8gVGhyZWFkIGNoZWNrZXIgZW5zdXJlcyBhbGwgY2FsbHMgdG8gdGhlIENvbnRleHQgYXJlIG1hZGUgZnJvbSB0aGUgc2FtZQorICAvLyB0aHJlYWQgdGhhdCBpdCBpcyBjcmVhdGVkIGluLgorICBUSFJFQURfQ0hFQ0tFUih0aHJlYWRfY2hlY2tlcl8pOworCisgIC8vIFRoZSBtZXNzYWdlIGxvb3AgZm9yIHRoZSB3ZWIgY29udGV4dC4KKyAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcF8gPSBudWxscHRyOworCisgIC8vIE5hbWUgb2YgdGhlIHdlYiBpbnN0YW5jZS4KKyAgc3RkOjpzdHJpbmcgbmFtZV87CisgIC8vIEZldGNoZXJGYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBjcmVhdGUgYSBmZXRjaGVyIGFjY29yZGluZyB0byBVUkwuCisgIHN0ZDo6dW5pcXVlX3B0cjxsb2FkZXI6OkZldGNoZXJGYWN0b3J5PiBmZXRjaGVyX2ZhY3RvcnlfOworCisgIC8vIFRvZG86IGIvMjI1NDEwNTg4IFRoaXMgaXMgbm90IHVzZWQgYnkgV2ViTW9kdWxlLiBTaG91bGQgbGl2ZSBpbiBhCisgIC8vIGJldHRlciBwbGFjZS4KKyAgLy8gTG9hZGVyRmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gYWNxdWlyZSByZWZlcmVuY2VzIHRvIHJlc291cmNlcyBmcm9tIGEgVVJMLgorICBzdGQ6OnVuaXF1ZV9wdHI8bG9hZGVyOjpTY3JpcHRMb2FkZXJGYWN0b3J5PiBzY3JpcHRfbG9hZGVyX2ZhY3RvcnlfOworCisgIC8vIEphdmFTY3JpcHQgZW5naW5lIGZvciB0aGUgYnJvd3Nlci4KKyAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6SmF2YVNjcmlwdEVuZ2luZT4gamF2YXNjcmlwdF9lbmdpbmVfOworCisgIC8vIEphdmFTY3JpcHQgR2xvYmFsIE9iamVjdCBmb3IgdGhlIGJyb3dzZXIuIFRoZXJlIHNob3VsZCBiZSBvbmUgcGVyIHdpbmRvdywKKyAgLy8gYnV0IHNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIHdpbmRvdywgd2UgY2FuIGhhdmUgb25lIHBlciBicm93c2VyLgorICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudF87CisKKyAgLy8gVXNlZCBieSB8Q29uc29sZXwgdG8gb2J0YWluIGEgSmF2YVNjcmlwdCBzdGFjayB0cmFjZS4KKyAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6RXhlY3V0aW9uU3RhdGU+IGV4ZWN1dGlvbl9zdGF0ZV87CisKKyAgLy8gSW50ZXJmYWNlIGZvciB0aGUgZG9jdW1lbnQgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGNvZGUuCisgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OlNjcmlwdFJ1bm5lcj4gc2NyaXB0X3J1bm5lcl87CisKKyAgLy8gT2JqZWN0IHRvIHJlZ2lzdGVyIGFuZCByZXRyaWV2ZSBCbG9iIG9iamVjdHMgd2l0aCBhIHN0cmluZyBrZXkuCisgIHN0ZDo6dW5pcXVlX3B0cjxkb206OkJsb2I6OlJlZ2lzdHJ5PiBibG9iX3JlZ2lzdHJ5XzsKKworICAvLyBFbnZpcm9ubWVudCBTZXR0aW5ncyBvYmplY3QKKyAgc3RkOjp1bmlxdWVfcHRyPHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncz4gZW52aXJvbm1lbnRfc2V0dGluZ3NfOworCisgIC8vIFRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gb2JqZWN0IG1hcC4KKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZW52aXJvbm1lbnQtc2V0dGluZ3Mtb2JqZWN0LXNlcnZpY2Utd29ya2VyLXJlZ2lzdHJhdGlvbi1vYmplY3QtbWFwCisgIHN0ZDo6bWFwPHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCosCisgICAgICAgICAgIHNjb3BlZF9yZWZwdHI8d29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPj4KKyAgICAgIHNlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbl9vYmplY3RfbWFwXzsKKworICAvLyBUaGUgc2VydmljZSB3b3JrZXIgb2JqZWN0IG1hcC4KKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZW52aXJvbm1lbnQtc2V0dGluZ3Mtb2JqZWN0LXNlcnZpY2Utd29ya2VyLW9iamVjdC1tYXAKKyAgc3RkOjptYXA8d29ya2VyOjpTZXJ2aWNlV29ya2VyT2JqZWN0Kiwgc2NvcGVkX3JlZnB0cjx3b3JrZXI6OlNlcnZpY2VXb3JrZXI+PgorICAgICAgc2VydmljZV93b3JrZXJfb2JqZWN0X21hcF87Cit9OworCitJbXBsOjpJbXBsKGNvbnN0IEFnZW50OjpPcHRpb25zJiBvcHRpb25zKSA6IG5hbWVfKG9wdGlvbnMubmFtZSkgeworICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6d2ViIiwgIkFnZW50OjpJbXBsOjpJbXBsKCkiKTsKKyAgYmxvYl9yZWdpc3RyeV8ucmVzZXQobmV3IGRvbTo6QmxvYjo6UmVnaXN0cnkpOworCisgIGZldGNoZXJfZmFjdG9yeV8ucmVzZXQobmV3IGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkoCisgICAgICBvcHRpb25zLm5ldHdvcmtfbW9kdWxlLCBvcHRpb25zLmV4dHJhX3dlYl9maWxlX2RpciwKKyAgICAgIGRvbTo6VVJMOjpNYWtlQmxvYlJlc29sdmVyQ2FsbGJhY2soYmxvYl9yZWdpc3RyeV8uZ2V0KCkpLAorICAgICAgb3B0aW9ucy5yZWFkX2NhY2hlX2NhbGxiYWNrKSk7CisgIERDSEVDSyhmZXRjaGVyX2ZhY3RvcnlfKTsKKworICBzY3JpcHRfbG9hZGVyX2ZhY3RvcnlfLnJlc2V0KG5ldyBsb2FkZXI6OlNjcmlwdExvYWRlckZhY3RvcnkoCisgICAgICBvcHRpb25zLm5hbWUuY19zdHIoKSwgZmV0Y2hlcl9mYWN0b3J5Xy5nZXQoKSwgb3B0aW9ucy50aHJlYWRfcHJpb3JpdHkpKTsKKyAgRENIRUNLKHNjcmlwdF9sb2FkZXJfZmFjdG9yeV8pOworCisgIGphdmFzY3JpcHRfZW5naW5lXyA9CisgICAgICBzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU6OkNyZWF0ZUVuZ2luZShvcHRpb25zLmphdmFzY3JpcHRfZW5naW5lX29wdGlvbnMpOworICBEQ0hFQ0soamF2YXNjcmlwdF9lbmdpbmVfKTsKKworICBnbG9iYWxfZW52aXJvbm1lbnRfID0gamF2YXNjcmlwdF9lbmdpbmVfLT5DcmVhdGVHbG9iYWxFbnZpcm9ubWVudCgpOworICBEQ0hFQ0soZ2xvYmFsX2Vudmlyb25tZW50Xyk7CisKKyAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+QWRkUm9vdChibG9iX3JlZ2lzdHJ5Xy5nZXQoKSk7CisKKyAgZXhlY3V0aW9uX3N0YXRlXyA9CisgICAgICBzY3JpcHQ6OkV4ZWN1dGlvblN0YXRlOjpDcmVhdGVFeGVjdXRpb25TdGF0ZShnbG9iYWxfZW52aXJvbm1lbnRfKTsKKyAgRENIRUNLKGV4ZWN1dGlvbl9zdGF0ZV8pOworCisgIHNjcmlwdF9ydW5uZXJfID0KKyAgICAgIHNjcmlwdDo6U2NyaXB0UnVubmVyOjpDcmVhdGVTY3JpcHRSdW5uZXIoZ2xvYmFsX2Vudmlyb25tZW50Xyk7CisgIERDSEVDSyhzY3JpcHRfcnVubmVyXyk7CisKKyAgLy8gU2NoZWR1bGUgdGhlIGluamVjdGVkIGdsb2JhbCBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIGxhdGVyLCB0byBlbnN1cmUgdGhleQorICAvLyBhcmUgYWRkZWQgYWZ0ZXIgdGhlIGdsb2JhbCBvYmplY3QgaXMgY3JlYXRlZC4KKyAgaWYgKCFvcHRpb25zLmluamVjdGVkX2dsb2JhbF9vYmplY3RfYXR0cmlidXRlcy5lbXB0eSgpKSB7CisgICAgRENIRUNLKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCkpOworICAgIGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsCisgICAgICAgIGJhc2U6OkJpbmQoJkltcGw6OkluamVjdEdsb2JhbE9iamVjdEF0dHJpYnV0ZXMsIGJhc2U6OlVucmV0YWluZWQodGhpcyksCisgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbmplY3RlZF9nbG9iYWxfb2JqZWN0X2F0dHJpYnV0ZXMpKTsKKyAgfQorfQorCit2b2lkIEltcGw6OlNodXREb3duSmF2YVNjcmlwdEVuZ2luZSgpIHsKKyAgLy8gVE9ETzogRGlzZW50YW5nbGUgc2h1dGRvd24gb2YgdGhlIEpTIGVuZ2luZSB3aXRoIHRoZSB2YXJpb3VzIHRyYWNraW5nIGFuZAorICAvLyBjYWNoaW5nIGluIHRoZSBXZWJNb2R1bGUuCisgIGlmIChnbG9iYWxfZW52aXJvbm1lbnRfKSB7CisgICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+U2V0UmVwb3J0RXZhbENhbGxiYWNrKGJhc2U6OkNsb3N1cmUoKSk7CisgICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+U2V0UmVwb3J0RXJyb3JDYWxsYmFjaygKKyAgICAgICAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudDo6UmVwb3J0RXJyb3JDYWxsYmFjaygpKTsKKyAgfQorCisgIHNldHVwX2Vudmlyb25tZW50X3NldHRpbmdzKG51bGxwdHIpOworICBibG9iX3JlZ2lzdHJ5Xy5yZXNldCgpOworICBzY3JpcHRfcnVubmVyXy5yZXNldCgpOworICBleGVjdXRpb25fc3RhdGVfLnJlc2V0KCk7CisgIGdsb2JhbF9lbnZpcm9ubWVudF8gPSBOVUxMOworICBqYXZhc2NyaXB0X2VuZ2luZV8ucmVzZXQoKTsKKyAgZmV0Y2hlcl9mYWN0b3J5Xy5yZXNldCgpOworICBzY3JpcHRfbG9hZGVyX2ZhY3RvcnlfLnJlc2V0KCk7Cit9CisKK0ltcGw6On5JbXBsKCkgeyBTaHV0RG93bkphdmFTY3JpcHRFbmdpbmUoKTsgfQorCit2b2lkIEltcGw6OkluamVjdEdsb2JhbE9iamVjdEF0dHJpYnV0ZXMoCisgICAgY29uc3QgQWdlbnQ6Ok9wdGlvbnM6OkluamVjdGVkR2xvYmFsT2JqZWN0QXR0cmlidXRlcyYgYXR0cmlidXRlcykgeworICBEQ0hFQ0tfQ0FMTEVEX09OX1ZBTElEX1RIUkVBRCh0aHJlYWRfY2hlY2tlcl8pOworICBEQ0hFQ0soZ2xvYmFsX2Vudmlyb25tZW50Xyk7CisKKyAgZm9yIChBZ2VudDo6T3B0aW9uczo6SW5qZWN0ZWRHbG9iYWxPYmplY3RBdHRyaWJ1dGVzOjpjb25zdF9pdGVyYXRvciBpdGVyID0KKyAgICAgICAgICAgYXR0cmlidXRlcy5iZWdpbigpOworICAgICAgIGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgZ2xvYmFsX2Vudmlyb25tZW50Xy0+QmluZChpdGVyLT5maXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnNlY29uZC5SdW4oZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkpOworICB9Cit9CisKKworc2NvcGVkX3JlZnB0cjx3b3JrZXI6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+CitJbXBsOjpHZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKAorICAgIHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKSB7CisgIC8vIEFsZ29yaXRobSBmb3IgJ2dldCB0aGUgc2VydmljZSB3b3JrZXIgcmVnaXN0cmF0aW9uIG9iamVjdCc6CisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2dldC10aGUtc2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9uLW9iamVjdAorICBzY29wZWRfcmVmcHRyPHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4gd29ya2VyX3JlZ2lzdHJhdGlvbjsKKyAgaWYgKCFyZWdpc3RyYXRpb24pIHsKKyAgICBOT1RSRUFDSEVEKCk7CisgICAgcmV0dXJuIHdvcmtlcl9yZWdpc3RyYXRpb247CisgIH0KKworICAvLyAxLiBMZXQgb2JqZWN0TWFwIGJlIGVudmlyb25tZW504oCZcyBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gb2JqZWN0IG1hcC4KKyAgLy8gMi4gSWYgb2JqZWN0TWFwW3JlZ2lzdHJhdGlvbl0gZG9lcyBub3QgZXhpc3QsIHRoZW46CisgIGF1dG8gcmVnaXN0cmF0aW9uX2xvb2t1cCA9CisgICAgICBzZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0X21hcF8uZmluZChyZWdpc3RyYXRpb24pOworICBpZiAocmVnaXN0cmF0aW9uX2xvb2t1cCA9PSBzZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0X21hcF8uZW5kKCkpIHsKKyAgICAvLyAyLjEuIExldCByZWdpc3RyYXRpb25PYmplY3QgYmUgYSBuZXcgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiBpbgorICAgIC8vIGVudmlyb25tZW504oCZcyBSZWFsbS4KKyAgICAvLyAyLjIuIFNldCByZWdpc3RyYXRpb25PYmplY3TigJlzIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiB0bworICAgIC8vIHJlZ2lzdHJhdGlvbi4KKyAgICAvLyAyLjMuIFNldCByZWdpc3RyYXRpb25PYmplY3TigJlzIGluc3RhbGxpbmcgYXR0cmlidXRlIHRvIG51bGwuCisgICAgLy8gMi40LiBTZXQgcmVnaXN0cmF0aW9uT2JqZWN04oCZcyB3YWl0aW5nIGF0dHJpYnV0ZSB0byBudWxsLgorICAgIC8vIDIuNS4gU2V0IHJlZ2lzdHJhdGlvbk9iamVjdOKAmXMgYWN0aXZlIGF0dHJpYnV0ZSB0byBudWxsLgorICAgIHdvcmtlcl9yZWdpc3RyYXRpb24gPSBuZXcgd29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKAorICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5ncygpLCByZWdpc3RyYXRpb24pOworCisgICAgLy8gMi42LiBJZiByZWdpc3RyYXRpb27igJlzIGluc3RhbGxpbmcgd29ya2VyIGlzIG5vdCBudWxsLCB0aGVuIHNldAorICAgIC8vIHJlZ2lzdHJhdGlvbk9iamVjdOKAmXMgaW5zdGFsbGluZyBhdHRyaWJ1dGUgdG8gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZQorICAgIC8vIHNlcnZpY2Ugd29ya2VyIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcmVnaXN0cmF0aW9u4oCZcyBpbnN0YWxsaW5nIHdvcmtlciBpbgorICAgIC8vIGVudmlyb25tZW50LgorICAgIGlmIChyZWdpc3RyYXRpb24tPmluc3RhbGxpbmdfd29ya2VyKCkpIHsKKyAgICAgIHdvcmtlcl9yZWdpc3RyYXRpb24tPnNldF9pbnN0YWxsaW5nKAorICAgICAgICAgIEdldFNlcnZpY2VXb3JrZXIocmVnaXN0cmF0aW9uLT5pbnN0YWxsaW5nX3dvcmtlcigpKSk7CisgICAgfQorCisgICAgLy8gMi43LiBJZiByZWdpc3RyYXRpb27igJlzIHdhaXRpbmcgd29ya2VyIGlzIG5vdCBudWxsLCB0aGVuIHNldAorICAgIC8vIHJlZ2lzdHJhdGlvbk9iamVjdOKAmXMgd2FpdGluZyBhdHRyaWJ1dGUgdG8gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZQorICAgIC8vIHNlcnZpY2Ugd29ya2VyIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcmVnaXN0cmF0aW9u4oCZcyB3YWl0aW5nIHdvcmtlciBpbgorICAgIC8vIGVudmlyb25tZW50LgorICAgIGlmIChyZWdpc3RyYXRpb24tPndhaXRpbmdfd29ya2VyKCkpIHsKKyAgICAgIHdvcmtlcl9yZWdpc3RyYXRpb24tPnNldF93YWl0aW5nKAorICAgICAgICAgIEdldFNlcnZpY2VXb3JrZXIocmVnaXN0cmF0aW9uLT53YWl0aW5nX3dvcmtlcigpKSk7CisgICAgfQorCisgICAgLy8gMi44LiBJZiByZWdpc3RyYXRpb27igJlzIGFjdGl2ZSB3b3JrZXIgaXMgbm90IG51bGwsIHRoZW4gc2V0CisgICAgLy8gcmVnaXN0cmF0aW9uT2JqZWN04oCZcyBhY3RpdmUgYXR0cmlidXRlIHRvIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUKKyAgICAvLyBzZXJ2aWNlIHdvcmtlciBvYmplY3QgdGhhdCByZXByZXNlbnRzIHJlZ2lzdHJhdGlvbuKAmXMgYWN0aXZlIHdvcmtlciBpbgorICAgIC8vIGVudmlyb25tZW50LgorICAgIGlmIChyZWdpc3RyYXRpb24tPmFjdGl2ZV93b3JrZXIoKSkgeworICAgICAgd29ya2VyX3JlZ2lzdHJhdGlvbi0+c2V0X2FjdGl2ZSgKKyAgICAgICAgICBHZXRTZXJ2aWNlV29ya2VyKHJlZ2lzdHJhdGlvbi0+YWN0aXZlX3dvcmtlcigpKSk7CisgICAgfQorCisgICAgLy8gMi45LiBTZXQgb2JqZWN0TWFwW3JlZ2lzdHJhdGlvbl0gdG8gcmVnaXN0cmF0aW9uT2JqZWN0LgorICAgIHNlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbl9vYmplY3RfbWFwXy5pbnNlcnQoCisgICAgICAgIHN0ZDo6bWFrZV9wYWlyKHJlZ2lzdHJhdGlvbiwgd29ya2VyX3JlZ2lzdHJhdGlvbikpOworICB9IGVsc2UgeworICAgIHdvcmtlcl9yZWdpc3RyYXRpb24gPSByZWdpc3RyYXRpb25fbG9va3VwLT5zZWNvbmQ7CisgIH0KKyAgLy8gMy4gUmV0dXJuIG9iamVjdE1hcFtyZWdpc3RyYXRpb25dLgorICByZXR1cm4gd29ya2VyX3JlZ2lzdHJhdGlvbjsKK30KKworc2NvcGVkX3JlZnB0cjx3b3JrZXI6OlNlcnZpY2VXb3JrZXI+IEltcGw6OkdldFNlcnZpY2VXb3JrZXIoCisgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VyT2JqZWN0KiB3b3JrZXIpIHsKKyAgLy8gQWxnb3JpdGhtIGZvciAnZ2V0IHRoZSBzZXJ2aWNlIHdvcmtlciBvYmplY3QnOgorICAvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNnZXQtdGhlLXNlcnZpY2Utd29ya2VyLW9iamVjdAorICBzY29wZWRfcmVmcHRyPHdvcmtlcjo6U2VydmljZVdvcmtlcj4gc2VydmljZV93b3JrZXI7CisKKyAgLy8gMS4gTGV0IG9iamVjdE1hcCBiZSBlbnZpcm9ubWVudOKAmXMgc2VydmljZSB3b3JrZXIgb2JqZWN0IG1hcC4KKyAgLy8gMi4gSWYgb2JqZWN0TWFwW3NlcnZpY2VXb3JrZXJdIGRvZXMgbm90IGV4aXN0LCB0aGVuOgorICBhdXRvIHdvcmtlcl9sb29rdXAgPSBzZXJ2aWNlX3dvcmtlcl9vYmplY3RfbWFwXy5maW5kKHdvcmtlcik7CisgIGlmICh3b3JrZXJfbG9va3VwID09IHNlcnZpY2Vfd29ya2VyX29iamVjdF9tYXBfLmVuZCgpKSB7CisgICAgLy8gMi4xLiBMZXQgc2VydmljZVdvcmtlck9iaiBiZSBhIG5ldyBTZXJ2aWNlV29ya2VyIGluIGVudmlyb25tZW504oCZcyBSZWFsbSwKKyAgICAvLyBhbmQgYXNzb2NpYXRlIGl0IHdpdGggc2VydmljZVdvcmtlci4KKyAgICAvLyAyLjIuIFNldCBzZXJ2aWNlV29ya2VyT2Jq4oCZcyBzdGF0ZSB0byBzZXJ2aWNlV29ya2Vy4oCZcyBzdGF0ZS4KKyAgICBzZXJ2aWNlX3dvcmtlciA9IG5ldyB3b3JrZXI6OlNlcnZpY2VXb3JrZXIoZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwgd29ya2VyKTsKKworICAgIC8vIDIuMy4gU2V0IG9iamVjdE1hcFtzZXJ2aWNlV29ya2VyXSB0byBzZXJ2aWNlV29ya2VyT2JqLgorICAgIHNlcnZpY2Vfd29ya2VyX29iamVjdF9tYXBfLmluc2VydChzdGQ6Om1ha2VfcGFpcih3b3JrZXIsIHNlcnZpY2Vfd29ya2VyKSk7CisgIH0gZWxzZSB7CisgICAgc2VydmljZV93b3JrZXIgPSB3b3JrZXJfbG9va3VwLT5zZWNvbmQ7CisgIH0KKworICAvLyAzLiBSZXR1cm4gb2JqZWN0TWFwW3NlcnZpY2VXb3JrZXJdLgorICByZXR1cm4gc2VydmljZV93b3JrZXI7Cit9CisKKy8vIFNpZ25hbHMgdGhlIGdpdmVuIFdhaXRhYmxlRXZlbnQuCit2b2lkIFNpZ25hbFdhaXRhYmxlRXZlbnQoYmFzZTo6V2FpdGFibGVFdmVudCogZXZlbnQpIHsgZXZlbnQtPlNpZ25hbCgpOyB9Cit9ICAvLyBuYW1lc3BhY2UKKwordm9pZCBBZ2VudDo6V2lsbERlc3Ryb3lDdXJyZW50TWVzc2FnZUxvb3AoKSB7IGNvbnRleHRfLnJlc2V0KCk7IH0KKworQWdlbnQ6OkFnZW50KGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIEluaXRpYWxpemVDYWxsYmFjayBpbml0aWFsaXplX2NhbGxiYWNrLAorICAgICAgICAgICAgIERlc3RydWN0aW9uT2JzZXJ2ZXIqIGRlc3RydWN0aW9uX29ic2VydmVyKQorICAgIDogdGhyZWFkXyhvcHRpb25zLm5hbWUpIHsKKyAgLy8gU3RhcnQgdGhlIGRlZGljYXRlZCB0aHJlYWQgYW5kIGNyZWF0ZSB0aGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24KKyAgLy8gb2JqZWN0IG9uIHRoYXQgdGhyZWFkLgorICBiYXNlOjpUaHJlYWQ6Ok9wdGlvbnMgdGhyZWFkX29wdGlvbnMoYmFzZTo6TWVzc2FnZUxvb3A6OlRZUEVfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RhY2tfc2l6ZSk7CisgIHRocmVhZF9vcHRpb25zLnByaW9yaXR5ID0gb3B0aW9ucy50aHJlYWRfcHJpb3JpdHk7CisgIGlmICghdGhyZWFkXy5TdGFydFdpdGhPcHRpb25zKHRocmVhZF9vcHRpb25zKSkgcmV0dXJuOworICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOworCisgIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmQWdlbnQ6OkluaXRpYWxpemUsIGJhc2U6OlVucmV0YWluZWQodGhpcyksIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZV9jYWxsYmFjaykpOworCisgIGlmIChkZXN0cnVjdGlvbl9vYnNlcnZlcikgeworICAgIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZiYXNlOjpNZXNzYWdlTG9vcDo6QWRkRGVzdHJ1Y3Rpb25PYnNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQobWVzc2FnZV9sb29wKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZChkZXN0cnVjdGlvbl9vYnNlcnZlcikpKTsKKyAgfQorICAvLyBSZWdpc3RlciBhcyBhIGRlc3RydWN0aW9uIG9ic2VydmVyIHRvIHNodXQgZG93biB0aGUgV2ViIEFnZW50IG9uY2UgYWxsCisgIC8vIHBlbmRpbmcgdGFza3MgaGF2ZSBiZWVuIGV4ZWN1dGVkIGFuZCB0aGUgbWVzc2FnZSBsb29wIGlzIGFib3V0IHRvIGJlCisgIC8vIGRlc3Ryb3llZC4gVGhpcyBhbGxvd3MgdXMgdG8gc2FmZWx5IHN0b3AgdGhlIHRocmVhZCwgZHJhaW4gdGhlIHRhc2sgcXVldWUsCisgIC8vIHRoZW4gZGVzdHJveSB0aGUgaW50ZXJuYWwgY29tcG9uZW50cyBiZWZvcmUgdGhlIG1lc3NhZ2UgbG9vcCBpcyByZXNldC4KKyAgLy8gTm8gcG9zdGVkIHRhc2tzIHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgdGhyZWFkIGlzIHN0b3BwZWQuCisgIG1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgIEZST01fSEVSRSwKKyAgICAgIGJhc2U6OkJpbmQoJmJhc2U6Ok1lc3NhZ2VMb29wOjpBZGREZXN0cnVjdGlvbk9ic2VydmVyLAorICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKG1lc3NhZ2VfbG9vcCgpKSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOworCisgIC8vIFRoaXMgd29ya3MgYWxtb3N0IGxpa2UgYSBQb3N0QmxvY2tpbmdUYXNrLCBleGNlcHQgdGhhdCBhbnkgYmxvY2tpbmcgdGhhdAorICAvLyBtYXkgYmUgbmVjZXNzYXJ5IGhhcHBlbnMgd2hlbiBTdG9wKCkgaXMgY2FsbGVkIGluc3RlYWQgb2YgcmlnaHQgbm93LgorICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCisgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJlNpZ25hbFdhaXRhYmxlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCgmZGVzdHJ1Y3Rpb25fb2JzZXJ2ZXJfYWRkZWRfKSkpOworfQorCitBZ2VudDo6fkFnZW50KCkgeworICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOworICBEQ0hFQ0sodGhyZWFkXy5Jc1J1bm5pbmcoKSk7CisKKyAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RydWN0aW9uIG9ic2VydmVyIGdvdCBhZGRlZCBiZWZvcmUgc3RvcHBpbmcgdGhlIHRocmVhZC4KKyAgZGVzdHJ1Y3Rpb25fb2JzZXJ2ZXJfYWRkZWRfLldhaXQoKTsKKyAgLy8gU3RvcCB0aGUgdGhyZWFkLiBUaGlzIHdpbGwgY2F1c2UgdGhlIGRlc3RydWN0aW9uIG9ic2VydmVyIHRvIGJlIG5vdGlmaWVkLgorICB0aHJlYWRfLlN0b3AoKTsKK30KKwordm9pZCBBZ2VudDo6SW5pdGlhbGl6ZShjb25zdCBPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlhbGl6ZV9jYWxsYmFjaykgeworICBEQ0hFQ0tfRVEoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSwgbWVzc2FnZV9sb29wKCkpOworICBjb250ZXh0Xy5yZXNldChDcmVhdGVDb250ZXh0KG9wdGlvbnMsIHRocmVhZF8ubWVzc2FnZV9sb29wKCkpKTsKKyAgaW5pdGlhbGl6ZV9jYWxsYmFjay5SdW4oY29udGV4dF8uZ2V0KCkpOworfQorCitDb250ZXh0KiBBZ2VudDo6Q3JlYXRlQ29udGV4dChjb25zdCBPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcCkgeworICBhdXRvKiBjb250ZXh0ID0gbmV3IEltcGwob3B0aW9ucyk7CisgIGNvbnRleHQtPnNldF9tZXNzYWdlX2xvb3AobWVzc2FnZV9sb29wKTsKKyAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK3ZvaWQgQWdlbnQ6OldhaXRVbnRpbERvbmUoKSB7CisgIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7CisgIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7CisgICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RCbG9ja2luZ1Rhc2soCisgICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZCgmQWdlbnQ6OldhaXRVbnRpbERvbmUsIGJhc2U6OlVucmV0YWluZWQodGhpcykpKTsKKyAgICByZXR1cm47CisgIH0KKyAgRENIRUNLX0VRKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIG1lc3NhZ2VfbG9vcCgpKTsKK30KKwordm9pZCBBZ2VudDo6UmVxdWVzdEphdmFTY3JpcHRIZWFwU3RhdGlzdGljcygKKyAgICBjb25zdCBKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3NDYWxsYmFjayYgY2FsbGJhY2spIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndlYiIsICJBZ2VudDo6UmVxdWVzdEphdmFTY3JpcHRIZWFwU3RhdGlzdGljcygpIik7CisgIERDSEVDSyhtZXNzYWdlX2xvb3AoKSk7CisgIGlmIChiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpICE9IG1lc3NhZ2VfbG9vcCgpKSB7CisgICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJkFnZW50OjpSZXF1ZXN0SmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgY2FsbGJhY2spKTsKKyAgICByZXR1cm47CisgIH0KKyAgc2NyaXB0OjpIZWFwU3RhdGlzdGljcyBoZWFwX3N0YXRpc3RpY3MgPQorICAgICAgY29udGV4dF8tPmphdmFzY3JpcHRfZW5naW5lKCktPkdldEhlYXBTdGF0aXN0aWNzKCk7CisgIGNhbGxiYWNrLlJ1bihoZWFwX3N0YXRpc3RpY3MpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2ViCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvd2ViL2FnZW50LmggYi9jb2JhbHQvd2ViL2FnZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAyNmU1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93ZWIvYWdlbnQuaApAQCAtMCwwICsxLDEzNCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XRUJfQUdFTlRfSF8KKyNkZWZpbmUgQ09CQUxUX1dFQl9BR0VOVF9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvY2FsbGJhY2suaCIKKyNpbmNsdWRlICJiYXNlL2ZpbGVzL2ZpbGVfcGF0aC5oIgorI2luY2x1ZGUgImJhc2UvbWVtb3J5L3Njb3BlZF9yZWZwdHIuaCIKKyNpbmNsdWRlICJiYXNlL21lc3NhZ2VfbG9vcC9tZXNzYWdlX2xvb3AuaCIKKyNpbmNsdWRlICJiYXNlL3N5bmNocm9uaXphdGlvbi93YWl0YWJsZV9ldmVudC5oIgorI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZC5oIgorI2luY2x1ZGUgImNvYmFsdC9uZXR3b3JrL25ldHdvcmtfbW9kdWxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3ZWIgeworCitjbGFzcyBBZ2VudCA6IHB1YmxpYyBiYXNlOjpNZXNzYWdlTG9vcDo6RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CisgcHVibGljOgorICBzdHJ1Y3QgT3B0aW9ucyB7CisgICAgZXhwbGljaXQgT3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyBuYW1lKSA6IG5hbWUobmFtZSkge30KKyAgICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpXcmFwcGFibGU+KAorICAgICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqKT4KKyAgICAgICAgQ3JlYXRlT2JqZWN0RnVuY3Rpb247CisgICAgdHlwZWRlZiBiYXNlOjpoYXNoX21hcDxzdGQ6OnN0cmluZywgQ3JlYXRlT2JqZWN0RnVuY3Rpb24+CisgICAgICAgIEluamVjdGVkR2xvYmFsT2JqZWN0QXR0cmlidXRlczsKKworICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBXZWIgQWdlbnQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFzCisgICAgLy8gaW4gdGhlIGNhc2Ugd2hlcmUgbXVsdGlwbGUgV2ViIEFnZW50IG9iamVjdHMgZXhpc3QsIGl0IGNhbiBiZSB1c2VkIHRvCisgICAgLy8gZGlmZmVyZW50aWF0ZSB3aGljaCBvYmplY3RzIGJlbG9uZyB0byB3aGljaCBXZWIgQWdlbnQuICBJdCBpcyB1c2VkCisgICAgLy8gdG8gbmFtZSBzb21lIENWYWxzLgorICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisKKyAgICAvLyBTcGVjaWZpZXMgdGhlIHByaW9yaXR5IG9mIHRoZSB3ZWIgYWdlbnQncyB0aHJlYWQuICBUaGlzIGlzIHRoZSB0aHJlYWQKKyAgICAvLyB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgSmF2YVNjcmlwdC4KKyAgICBiYXNlOjpUaHJlYWRQcmlvcml0eSB0aHJlYWRfcHJpb3JpdHkgPSBiYXNlOjpUaHJlYWRQcmlvcml0eTo6Tk9STUFMOworCisgICAgc2l6ZV90IHN0YWNrX3NpemUgPSAwOworICAgIC8vIGluamVjdGVkX2dsb2JhbF9hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgbWFwIG9mIGF0dHJpYnV0ZXMgdG8gYmUgaW5qZWN0ZWQKKyAgICAvLyBpbnRvIHRoZSBXZWIgQWdlbnQncyB3aW5kb3cgb2JqZWN0IHVwb24gY29uc3RydWN0aW9uLiAgVGhpcyBwcm92aWRlcworICAgIC8vIGEgbWVjaGFuaXNtIHRvIGluamVjdCBjdXN0b20gQVBJcyBpbnRvIHRoZSBXZWIgQWdlbnQgb2JqZWN0LgorICAgIEluamVjdGVkR2xvYmFsT2JqZWN0QXR0cmlidXRlcyBpbmplY3RlZF9nbG9iYWxfb2JqZWN0X2F0dHJpYnV0ZXM7CisKKyAgICBzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU6Ok9wdGlvbnMgamF2YXNjcmlwdF9lbmdpbmVfb3B0aW9uczsKKworICAgIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlID0gbnVsbHB0cjsKKworICAgIC8vIE9wdGlvbmFsIGRpcmVjdG9yeSB0byBhZGQgdG8gdGhlIHNlYXJjaCBwYXRoIGZvciB3ZWIgZmlsZXMgKGZpbGU6Ly8pLgorICAgIGJhc2U6OkZpbGVQYXRoIGV4dHJhX3dlYl9maWxlX2RpcjsKKworICAgIC8vIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBmZXRjaGluZyBmcm9tIGNhY2hlIHZpYSBoNXZjYy1jYWNoZTovLy4KKyAgICBiYXNlOjpDYWxsYmFjazxpbnQoY29uc3Qgc3RkOjpzdHJpbmcmLCBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiopPgorICAgICAgICByZWFkX2NhY2hlX2NhbGxiYWNrOworICB9OworCisgIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBzY3JpcHQ6OkhlYXBTdGF0aXN0aWNzJik+CisgICAgICBKYXZhU2NyaXB0SGVhcFN0YXRpc3RpY3NDYWxsYmFjazsKKworICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoQ29udGV4dCopPiBJbml0aWFsaXplQ2FsbGJhY2s7CisgIEFnZW50KGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIEluaXRpYWxpemVDYWxsYmFjayBpbml0aWFsaXplX2NhbGxiYWNrLAorICAgICAgICBEZXN0cnVjdGlvbk9ic2VydmVyKiBkZXN0cnVjdGlvbl9vYnNlcnZlciA9IG51bGxwdHIpOworICB+QWdlbnQoKTsKKworICBzdGF0aWMgQ29udGV4dCogQ3JlYXRlQ29udGV4dChjb25zdCBPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wID0gbnVsbHB0cik7CisgIHN0YXRpYyBDb250ZXh0KiBDcmVhdGVDb250ZXh0KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7CisgICAgcmV0dXJuIENyZWF0ZUNvbnRleHQoT3B0aW9ucyhuYW1lKSk7CisgIH0KKworICBDb250ZXh0KiBjb250ZXh0KCkgeworICAgIERDSEVDSyhjb250ZXh0Xyk7CisgICAgcmV0dXJuIGNvbnRleHRfLmdldCgpOworICB9CisKKyAgLy8gVGhlIG1lc3NhZ2UgbG9vcCB0aGlzIG9iamVjdCBpcyBydW5uaW5nIG9uLgorICBiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wKCkgY29uc3QgeyByZXR1cm4gdGhyZWFkXy5tZXNzYWdlX2xvb3AoKTsgfQorCisgIC8vIFdhaXQgdW50aWwgYWxsIHBvc3RlZCB0YXNrcyBoYXZlIGV4ZWN1dGVkLgorICB2b2lkIFdhaXRVbnRpbERvbmUoKTsKKworICAvLyBQb3N0IGEgdGFzayB0aGF0IGdldHMgdGhlIGN1cnJlbnQgfHNjcmlwdDo6SGVhcFN0YXRpc3RpY3N8IGZvciBvdXIKKyAgLy8gfEphdmFTY3JpcHRFbmdpbmV8IHRvIHRoZSB3ZWIgbW9kdWxlIHRocmVhZCwgYW5kIHRoZW4gcGFzc2VzIHRoYXQgdG8KKyAgLy8gfGNhbGxiYWNrfC4gIE5vdGUgdGhhdCB8Y2FsbGJhY2t8IHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBtYWluIHdlYiBtb2R1bGUKKyAgLy8gdGhyZWFkLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHxjYWxsYmFja3wgdG8gZ2V0IGJhY2sgdG8gaXRzCisgIC8vIGludGVuZGVkIHRocmVhZCBzaG91bGQgaXQgd2FudCB0by4KKyAgdm9pZCBSZXF1ZXN0SmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzKAorICAgICAgY29uc3QgSmF2YVNjcmlwdEhlYXBTdGF0aXN0aWNzQ2FsbGJhY2smIGNhbGxiYWNrKTsKKworICAvLyBGcm9tIGJhc2U6Ok1lc3NhZ2VMb29wOjpEZXN0cnVjdGlvbk9ic2VydmVyLgorICB2b2lkIFdpbGxEZXN0cm95Q3VycmVudE1lc3NhZ2VMb29wKCkgb3ZlcnJpZGU7CisKKyBwcml2YXRlOgorICAvLyBDYWxsZWQgYnkgdGhlIGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSB0aGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvYmplY3QgYW5kCisgIC8vIHBlcmZvcm0gYW55IG90aGVyIGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIG9uIHRoZSBkZWRpY2F0ZWQgdGhyZWFkLgorICB2b2lkIEluaXRpYWxpemUoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgIEluaXRpYWxpemVDYWxsYmFjayBpbml0aWFsaXplX2NhbGxiYWNrKTsKKworICAvLyBUaGUgdGhyZWFkIGNyZWF0ZWQgYW5kIG93bmVkIGJ5IHRoaXMgV2ViIEFnZW50LgorICAvLyBBbGwgc3ViLW9iamVjdHMgb2YgdGhpcyBvYmplY3QgYXJlIGNyZWF0ZWQgb24gdGhpcyB0aHJlYWQsIGFuZCBhbGwgcHVibGljCisgIC8vIG1lbWJlciBmdW5jdGlvbnMgYXJlIHJlLXBvc3RlZCB0byB0aGlzIHRocmVhZCBpZiBuZWNlc3NhcnkuCisgIGJhc2U6OlRocmVhZCB0aHJlYWRfOworCisgIC8vIEludGVyZmFjZSB0byB0aGUgd2ViIENvbnRleHQKKyAgc3RkOjp1bmlxdWVfcHRyPENvbnRleHQ+IGNvbnRleHRfOworCisgIC8vIFRoaXMgZXZlbnQgaXMgdXNlZCB0byBzaWduYWwgd2hlbiB0aGUgZGVzdHJ1Y3Rpb24gb2JzZXJ2ZXJzIGhhdmUgYmVlbgorICAvLyBhZGRlZCB0byB0aGUgbWVzc2FnZSBsb29wLiBUaGlzIGlzIHRoZW4gdXNlZCBpbiBTdG9wKCkgdG8gZW5zdXJlIHRoYXQKKyAgLy8gcHJvY2Vzc2luZyBkb2Vzbid0IGNvbnRpbnVlIHVudGlsIHRoZSB0aHJlYWQgaXMgY2xlYW5seSBzaHV0ZG93bi4KKyAgYmFzZTo6V2FpdGFibGVFdmVudCBkZXN0cnVjdGlvbl9vYnNlcnZlcl9hZGRlZF8gPSB7CisgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50OjpSZXNldFBvbGljeTo6TUFOVUFMLAorICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6SW5pdGlhbFN0YXRlOjpOT1RfU0lHTkFMRUR9OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdlYgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XRUJfQUdFTlRfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93ZWIvY29udGV4dC5oIGIvY29iYWx0L3dlYi9jb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YmYwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93ZWIvY29udGV4dC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV0VCX0NPTlRFWFRfSF8KKyNkZWZpbmUgQ09CQUxUX1dFQl9DT05URVhUX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2Jsb2IuaCIKKyNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9leGVjdXRpb25fc3RhdGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF9ydW5uZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CitjbGFzcyBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOworY2xhc3MgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdDsKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK25hbWVzcGFjZSB3ZWIgeworCitjbGFzcyBDb250ZXh0IHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgfkNvbnRleHQoKSB7fQorICB2aXJ0dWFsIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgdm9pZCBTaHV0RG93bkphdmFTY3JpcHRFbmdpbmUoKSA9IDA7CisgIHZpcnR1YWwgdm9pZCBzZXRfZmV0Y2hlcl9mYWN0b3J5KGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZhY3RvcnkpID0gMDsKKyAgdmlydHVhbCBsb2FkZXI6OkZldGNoZXJGYWN0b3J5KiBmZXRjaGVyX2ZhY3RvcnkoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgbG9hZGVyOjpTY3JpcHRMb2FkZXJGYWN0b3J5KiBzY3JpcHRfbG9hZGVyX2ZhY3RvcnkoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgc2NyaXB0OjpKYXZhU2NyaXB0RW5naW5lKiBqYXZhc2NyaXB0X2VuZ2luZSgpIGNvbnN0ID0gMDsKKyAgdmlydHVhbCBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50KiBnbG9iYWxfZW52aXJvbm1lbnQoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgc2NyaXB0OjpFeGVjdXRpb25TdGF0ZSogZXhlY3V0aW9uX3N0YXRlKCkgY29uc3QgPSAwOworICB2aXJ0dWFsIHNjcmlwdDo6U2NyaXB0UnVubmVyKiBzY3JpcHRfcnVubmVyKCkgY29uc3QgPSAwOworICB2aXJ0dWFsIGRvbTo6QmxvYjo6UmVnaXN0cnkqIGJsb2JfcmVnaXN0cnkoKSBjb25zdCA9IDA7CisgIHZpcnR1YWwgbmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGUoKSBjb25zdCA9IDA7CisKKyAgdmlydHVhbCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSgpIGNvbnN0ID0gMDsKKyAgdmlydHVhbCB2b2lkIHNldHVwX2Vudmlyb25tZW50X3NldHRpbmdzKEVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzKSA9IDA7CisgIHZpcnR1YWwgRW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3MoKSBjb25zdCA9IDA7CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2dldC10aGUtc2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9uLW9iamVjdAorICB2aXJ0dWFsIHNjb3BlZF9yZWZwdHI8d29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPgorICBHZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKAorICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiByZWdpc3RyYXRpb24pID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3ZWIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfV0VCX0NPTlRFWFRfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCBiL2NvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGY3OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV0VCX0VOVklST05NRU5UX1NFVFRJTkdTX0hfCisjZGVmaW5lIENPQkFMVF9XRUJfRU5WSVJPTk1FTlRfU0VUVElOR1NfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb2JhbHQvYmFzZS9kZWJ1Z2dlcl9ob29rcy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd2ViIHsKKworY2xhc3MgQ29udGV4dDsKKworLy8gRW52aXJvbm1lbnQgU2V0dGluZ3Mgb2JqZWN0IGFzIGRlc2NyaWJlZCBpbgorLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdHMKK2NsYXNzIEVudmlyb25tZW50U2V0dGluZ3MgOiBwdWJsaWMgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzIHsKKyBwdWJsaWM6CisgIEVudmlyb25tZW50U2V0dGluZ3MoKSB7fQorICBleHBsaWNpdCBFbnZpcm9ubWVudFNldHRpbmdzKGNvbnN0IGJhc2U6OkRlYnVnZ2VySG9va3MmIGRlYnVnZ2VyX2hvb2tzKQorICAgICAgOiBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MoZGVidWdnZXJfaG9va3MpIHt9CisgIH5FbnZpcm9ubWVudFNldHRpbmdzKCkgb3ZlcnJpZGUge30KKworICBDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeworICAgIERDSEVDSyhjb250ZXh0Xyk7CisgICAgcmV0dXJuIGNvbnRleHRfOworICB9CisgIHZvaWQgc2V0X2NvbnRleHQoQ29udGV4dCogY29udGV4dCkgeyBjb250ZXh0XyA9IGNvbnRleHQ7IH0KKworIHByb3RlY3RlZDoKKyAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxFbnZpcm9ubWVudFNldHRpbmdzPjo6ZGVsZXRlcl90eXBlOworCisgcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEVudmlyb25tZW50U2V0dGluZ3MpOworCisgIENvbnRleHQqIGNvbnRleHRfID0gbnVsbHB0cjsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3ZWIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfV0VCX0VOVklST05NRU5UX1NFVFRJTkdTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd2ViL3N0dWJfd2ViX2NvbnRleHQuaCBiL2NvYmFsdC93ZWIvc3R1Yl93ZWJfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDNmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd2ViL3N0dWJfd2ViX2NvbnRleHQuaApAQCAtMCwwICsxLDEzMiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XRUJfU1RVQl9XRUJfQ09OVEVYVF9IXworI2RlZmluZSBDT0JBTFRfV0VCX1NUVUJfV0VCX0NPTlRFWFRfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb2JhbHQvbG9hZGVyL2ZldGNoZXJfZmFjdG9yeS5oIgorI2luY2x1ZGUgImNvYmFsdC9sb2FkZXIvc2NyaXB0X2xvYWRlcl9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L25ldHdvcmsvbmV0d29ya19tb2R1bGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2NvbnRleHQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd2ViIHsKK25hbWVzcGFjZSB0ZXN0IHsKKworY2xhc3MgU3R1YlNldHRpbmdzIDogcHVibGljIEVudmlyb25tZW50U2V0dGluZ3MgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgU3R1YlNldHRpbmdzKGNvbnN0IEdVUkwmIGJhc2UpIHsgc2V0X2Jhc2VfdXJsKGJhc2UpOyB9CisKKyBwcml2YXRlOgorfTsKKworY2xhc3MgU3R1YldlYkNvbnRleHQgOiBwdWJsaWMgd2ViOjpDb250ZXh0IHsKKyBwdWJsaWM6CisgIFN0dWJXZWJDb250ZXh0KCkgOiB3ZWI6OkNvbnRleHQoKSwgbmFtZV8oIlN0dWJXZWJJbnN0YW5jZSIpIHsKKyAgICBqYXZhc2NyaXB0X2VuZ2luZV8gPSBzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmU6OkNyZWF0ZUVuZ2luZSgpOworICAgIGdsb2JhbF9lbnZpcm9ubWVudF8gPSBqYXZhc2NyaXB0X2VuZ2luZV8tPkNyZWF0ZUdsb2JhbEVudmlyb25tZW50KCk7CisgIH0KKyAgdmlydHVhbCB+U3R1YldlYkNvbnRleHQoKSB7fQorCisgIC8vIFdlYkluc3RhbmNlCisgIC8vCisgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCBmaW5hbCB7CisgICAgTk9UUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworICB9CisgIHZvaWQgU2h1dERvd25KYXZhU2NyaXB0RW5naW5lKCkgZmluYWwgeyBOT1RSRUFDSEVEKCk7IH0KKyAgdm9pZCBzZXRfZmV0Y2hlcl9mYWN0b3J5KGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZhY3RvcnkpIGZpbmFsIHsKKyAgICBmZXRjaGVyX2ZhY3RvcnlfLnJlc2V0KGZhY3RvcnkpOworICB9CisgIGxvYWRlcjo6RmV0Y2hlckZhY3RvcnkqIGZldGNoZXJfZmFjdG9yeSgpIGNvbnN0IGZpbmFsIHsKKyAgICBEQ0hFQ0soZmV0Y2hlcl9mYWN0b3J5Xyk7CisgICAgcmV0dXJuIGZldGNoZXJfZmFjdG9yeV8uZ2V0KCk7CisgIH0KKworICBsb2FkZXI6OlNjcmlwdExvYWRlckZhY3RvcnkqIHNjcmlwdF9sb2FkZXJfZmFjdG9yeSgpIGNvbnN0IGZpbmFsIHsKKyAgICBEQ0hFQ0soc2NyaXB0X2xvYWRlcl9mYWN0b3J5Xyk7CisgICAgcmV0dXJuIHNjcmlwdF9sb2FkZXJfZmFjdG9yeV8uZ2V0KCk7CisgIH0KKworICBzY3JpcHQ6OkphdmFTY3JpcHRFbmdpbmUqIGphdmFzY3JpcHRfZW5naW5lKCkgY29uc3QgZmluYWwgeworICAgIERDSEVDSyhqYXZhc2NyaXB0X2VuZ2luZV8pOworICAgIHJldHVybiBqYXZhc2NyaXB0X2VuZ2luZV8uZ2V0KCk7CisgIH0KKyAgc2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudCogZ2xvYmFsX2Vudmlyb25tZW50KCkgY29uc3QgZmluYWwgeworICAgIERDSEVDSyhnbG9iYWxfZW52aXJvbm1lbnRfKTsKKyAgICByZXR1cm4gZ2xvYmFsX2Vudmlyb25tZW50Xy5nZXQoKTsKKyAgfQorICBzY3JpcHQ6OkV4ZWN1dGlvblN0YXRlKiBleGVjdXRpb25fc3RhdGUoKSBjb25zdCBmaW5hbCB7CisgICAgTk9UUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworICB9CisgIHNjcmlwdDo6U2NyaXB0UnVubmVyKiBzY3JpcHRfcnVubmVyKCkgY29uc3QgZmluYWwgeworICAgIE5PVFJFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorICBkb206OkJsb2I6OlJlZ2lzdHJ5KiBibG9iX3JlZ2lzdHJ5KCkgY29uc3QgZmluYWwgeworICAgIE5PVFJFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorICB2b2lkIHNldF9uZXR3b3JrX21vZHVsZShuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBtb2R1bGUpIHsKKyAgICBuZXR3b3JrX21vZHVsZV8ucmVzZXQobW9kdWxlKTsKKyAgfQorICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSgpIGNvbnN0IGZpbmFsIHsKKyAgICBEQ0hFQ0sobmV0d29ya19tb2R1bGVfKTsKKyAgICByZXR1cm4gbmV0d29ya19tb2R1bGVfLmdldCgpOworICB9CisKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBuYW1lXzsgfTsKKyAgdm9pZCBzZXR1cF9lbnZpcm9ubWVudF9zZXR0aW5ncygKKyAgICAgIEVudmlyb25tZW50U2V0dGluZ3MqIGVudmlyb25tZW50X3NldHRpbmdzKSBmaW5hbCB7CisgICAgZW52aXJvbm1lbnRfc2V0dGluZ3NfLnJlc2V0KGVudmlyb25tZW50X3NldHRpbmdzKTsKKyAgICBpZiAoZW52aXJvbm1lbnRfc2V0dGluZ3NfKSBlbnZpcm9ubWVudF9zZXR0aW5nc18tPnNldF9jb250ZXh0KHRoaXMpOworICB9CisgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogZW52aXJvbm1lbnRfc2V0dGluZ3MoKSBjb25zdCBmaW5hbCB7CisgICAgcmV0dXJuIGVudmlyb25tZW50X3NldHRpbmdzXy5nZXQoKTsKKyAgfQorCisgIHNjb3BlZF9yZWZwdHI8d29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPiBHZXRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKAorICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiByZWdpc3RyYXRpb24pIGZpbmFsIHsKKyAgICBOT1RJTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBzY29wZWRfcmVmcHRyPHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4oKTsKKyAgfQorCisgIC8vIE90aGVyCisgcHJpdmF0ZToKKyAgLy8gTmFtZSBvZiB0aGUgd2ViIGluc3RhbmNlLgorICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lXzsKKworICBzdGQ6OnVuaXF1ZV9wdHI8bG9hZGVyOjpGZXRjaGVyRmFjdG9yeT4gZmV0Y2hlcl9mYWN0b3J5XzsKKyAgc3RkOjp1bmlxdWVfcHRyPGxvYWRlcjo6U2NyaXB0TG9hZGVyRmFjdG9yeT4gc2NyaXB0X2xvYWRlcl9mYWN0b3J5XzsKKyAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6SmF2YVNjcmlwdEVuZ2luZT4gamF2YXNjcmlwdF9lbmdpbmVfOworICBzY29wZWRfcmVmcHRyPHNjcmlwdDo6R2xvYmFsRW52aXJvbm1lbnQ+IGdsb2JhbF9lbnZpcm9ubWVudF87CisKKyAgc3RkOjp1bmlxdWVfcHRyPG5ldHdvcms6Ok5ldHdvcmtNb2R1bGU+IG5ldHdvcmtfbW9kdWxlXzsKKyAgLy8gRW52aXJvbm1lbnQgU2V0dGluZ3Mgb2JqZWN0CisgIHN0ZDo6dW5pcXVlX3B0cjx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3M+IGVudmlyb25tZW50X3NldHRpbmdzXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2Ugd2ViCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dFQl9TVFVCX1dFQl9DT05URVhUX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd2ViX2FuaW1hdGlvbnMvd2ViX2FuaW1hdGlvbnMuZ3lwIGIvY29iYWx0L3dlYl9hbmltYXRpb25zL3dlYl9hbmltYXRpb25zLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM1MDc0MC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvd2ViX2FuaW1hdGlvbnMvd2ViX2FuaW1hdGlvbnMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2ViX2FuaW1hdGlvbnMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbmltYXRhYmxlLmgnLAotICAgICAgICAnYW5pbWF0aW9uLmNjJywKLSAgICAgICAgJ2FuaW1hdGlvbi5oJywKLSAgICAgICAgJ2FuaW1hdGlvbl9lZmZlY3RfcmVhZF9vbmx5LmgnLAotICAgICAgICAnYW5pbWF0aW9uX2VmZmVjdF90aW1pbmdfcmVhZF9vbmx5LmNjJywKLSAgICAgICAgJ2FuaW1hdGlvbl9lZmZlY3RfdGltaW5nX3JlYWRfb25seS5oJywKLSAgICAgICAgJ2FuaW1hdGlvbl9zZXQuY2MnLAotICAgICAgICAnYW5pbWF0aW9uX3NldC5oJywKLSAgICAgICAgJ2FuaW1hdGlvbl90aW1lbGluZS5jYycsCi0gICAgICAgICdhbmltYXRpb25fdGltZWxpbmUuaCcsCi0gICAgICAgICdiYWtlZF9hbmltYXRpb25fc2V0LmNjJywKLSAgICAgICAgJ2Jha2VkX2FuaW1hdGlvbl9zZXQuaCcsCi0gICAgICAgICdrZXlmcmFtZS5oJywKLSAgICAgICAgJ2tleWZyYW1lX2VmZmVjdF9yZWFkX29ubHkuY2MnLAotICAgICAgICAna2V5ZnJhbWVfZWZmZWN0X3JlYWRfb25seS5oJywKLSAgICAgICAgJ3RpbWVkX3Rhc2tfcXVldWUuY2MnLAotICAgICAgICAndGltZWRfdGFza19xdWV1ZS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3Nzb20vY3Nzb20uZ3lwOmNzc29tJywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd3ZWJfYW5pbWF0aW9uc190ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYW5pbWF0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnYW5pbWF0aW9uX2VmZmVjdF90aW1pbmdfcmVhZF9vbmx5X3Rlc3QuY2MnLAotICAgICAgICAna2V5ZnJhbWVfZWZmZWN0X3JlYWRfb25seV90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnd2ViX2FuaW1hdGlvbnMnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Nzc19wYXJzZXIvY3NzX3BhcnNlci5neXA6Y3NzX3BhcnNlcicsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvY3Nzb20vY3Nzb20uZ3lwOmNzc29tJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd3ZWJfYW5pbWF0aW9uc190ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd3ZWJfYW5pbWF0aW9uc190ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3dlYl9hbmltYXRpb25zX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYmRyaXZlci9CVUlMRC5nbiBiL2NvYmFsdC93ZWJkcml2ZXIvQlVJTEQuZ24KaW5kZXggMjM2N2E5Ni4uZjVhZWU1NCAxMDA2NDQKLS0tIGEvY29iYWx0L3dlYmRyaXZlci9CVUlMRC5nbgorKysgYi9jb2JhbHQvd2ViZHJpdmVyL0JVSUxELmduCkBAIC0xMTYsNiArMTE2LDcgQEAKIH0KIAogY29weSgid2ViZHJpdmVyX2NvcHlfdGVzdF9kYXRhIikgeworICBpbnN0YWxsX2NvbnRlbnQgPSB0cnVlCiAgIHNvdXJjZXMgPSBbCiAgICAgInRlc3RkYXRhL2Rpc3BsYXllZF90ZXN0Lmh0bWwiLAogICAgICJ0ZXN0ZGF0YS9tYXAucG5nIiwKQEAgLTEzNyw3ICsxMzgsNiBAQAogCiAgIGRlcHMgPSBbCiAgICAgIjp3ZWJkcml2ZXIiLAotICAgICI6d2ViZHJpdmVyX2NvcHlfdGVzdF9kYXRhIiwKICAgICAiLy9jb2JhbHQvYmFzZSIsCiAgICAgIi8vY29iYWx0L2Jyb3dzZXIiLAogICAgICIvL2NvYmFsdC9jc3NfcGFyc2VyOmNzc19wYXJzZXIiLApAQCAtMTQ5LDQgKzE0OSwxMSBAQAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICAgICIvL3RoaXJkX3BhcnR5L2RldnRvb2xzOmRldnRvb2xzX2FsbF9maWxlcyIsCiAgIF0KKworICBkYXRhX2RlcHMgPSBbCisgICAgIjpjb3B5X3dlYmRyaXZlcl9kYXRhIiwKKyAgICAiOndlYmRyaXZlcl9jb3B5X3Rlc3RfZGF0YSIsCisgIF0KKworICBjb250ZW50X2RlcHMgPSBkYXRhX2RlcHMKIH0KZGlmZiAtLWdpdCBhL2NvYmFsdC93ZWJkcml2ZXIvZWxlbWVudF9kcml2ZXIuY2MgYi9jb2JhbHQvd2ViZHJpdmVyL2VsZW1lbnRfZHJpdmVyLmNjCmluZGV4IDUyYWJmMTUuLjBmMzZkNGIgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJkcml2ZXIvZWxlbWVudF9kcml2ZXIuY2MKKysrIGIvY29iYWx0L3dlYmRyaXZlci9lbGVtZW50X2RyaXZlci5jYwpAQCAtMjQ4LDggKzI0OCw4IEBACiAgICAgICByZXR1cm4gQ29tbWFuZFJlc3VsdChwcm90b2NvbDo6UmVzcG9uc2U6OmtTdGFsZUVsZW1lbnRSZWZlcmVuY2UpOwogICAgIH0KIAotICAgIGtleWJvYXJkX2V2ZW50X2luamVjdG9yXy5SdW4oZWxlbWVudF8uZ2V0KCksICgqZXZlbnRzKVtpXS5maXJzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZXZlbnRzKVtpXS5zZWNvbmQpOworICAgIGtleWJvYXJkX2V2ZW50X2luamVjdG9yXy5SdW4oKCpldmVudHMpW2ldLmZpcnN0LCAoKmV2ZW50cylbaV0uc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudF8uZ2V0KCkpOwogICB9CiAgIHJldHVybiBDb21tYW5kUmVzdWx0KHByb3RvY29sOjpSZXNwb25zZTo6a1N1Y2Nlc3MpOwogfQpAQCAtMzA4LDE2ICszMDgsMTYgQEAKIAogICBldmVudC5zZXRfYnV0dG9uKDApOwogICBldmVudC5zZXRfYnV0dG9ucygwKTsKLSAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW5zOjpwb2ludGVybW92ZSgpLCBldmVudCk7CisgIHBvaW50ZXJfZXZlbnRfaW5qZWN0b3JfLlJ1bihiYXNlOjpUb2tlbnM6OnBvaW50ZXJtb3ZlKCksIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCkpOwogICBldmVudC5zZXRfYnV0dG9ucygxKTsKICAgZXZlbnQuc2V0X3ByZXNzdXJlKDAuNWYpOwotICBwb2ludGVyX2V2ZW50X2luamVjdG9yXy5SdW4oc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbnM6OnBvaW50ZXJkb3duKCksIGV2ZW50KTsKKyAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKGJhc2U6OlRva2Vuczo6cG9pbnRlcmRvd24oKSwgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiAgIGV2ZW50LnNldF9idXR0b25zKDApOwogICBldmVudC5zZXRfcHJlc3N1cmUoMC4wZik7Ci0gIHBvaW50ZXJfZXZlbnRfaW5qZWN0b3JfLlJ1bihzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRva2Vuczo6cG9pbnRlcnVwKCksIGV2ZW50KTsKKyAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKGJhc2U6OlRva2Vuczo6cG9pbnRlcnVwKCksIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCkpOwogCiAgIHJldHVybiBDb21tYW5kUmVzdWx0KHByb3RvY29sOjpSZXNwb25zZTo6a1N1Y2Nlc3MpOwogfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYmRyaXZlci9lbGVtZW50X2RyaXZlci5oIGIvY29iYWx0L3dlYmRyaXZlci9lbGVtZW50X2RyaXZlci5oCmluZGV4IGY0Y2RlNGIuLjVhMjllNWQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJkcml2ZXIvZWxlbWVudF9kcml2ZXIuaAorKysgYi9jb2JhbHQvd2ViZHJpdmVyL2VsZW1lbnRfZHJpdmVyLmgKQEAgLTUyLDExICs1MiwxMSBAQAogLy8gd2lsbCBtYXAgdG8gYSBtZXRob2Qgb24gdGhpcyBjbGFzcy4KIGNsYXNzIEVsZW1lbnREcml2ZXIgewogIHB1YmxpYzoKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PiwgY29uc3QgYmFzZTo6VG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OktleWJvYXJkRXZlbnRJbml0Jik+CisgIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChjb25zdCBiYXNlOjpUb2tlbiwgY29uc3QgZG9tOjpLZXlib2FyZEV2ZW50SW5pdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4pPgogICAgICAgS2V5Ym9hcmRFdmVudEluamVjdG9yOwotICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+LCBjb25zdCBiYXNlOjpUb2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYpPgorICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgYmFzZTo6VG9rZW4sIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4pPgogICAgICAgUG9pbnRlckV2ZW50SW5qZWN0b3I7CiAKICAgRWxlbWVudERyaXZlcigKZGlmZiAtLWdpdCBhL2NvYmFsdC93ZWJkcml2ZXIvd2ViZHJpdmVyLmd5cCBiL2NvYmFsdC93ZWJkcml2ZXIvd2ViZHJpdmVyLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkxNTMxZC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWyAnLi4vYnVpbGQvY29udGVudHNfZGlyLmd5cGknIF0sCi0KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3dlYmRyaXZlcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydlbmFibGVfd2ViZHJpdmVyPT0xJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2FsZ29yaXRobXMuY2MnLAotICAgICAgICAgICAgJ2FsZ29yaXRobXMuaCcsCi0gICAgICAgICAgICAnZGlzcGF0Y2hlci5jYycsCi0gICAgICAgICAgICAnZGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICdlbGVtZW50X2RyaXZlci5jYycsCi0gICAgICAgICAgICAnZWxlbWVudF9kcml2ZXIuaCcsCi0gICAgICAgICAgICAna2V5Ym9hcmQuY2MnLAotICAgICAgICAgICAgJ2tleWJvYXJkLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2J1dHRvbi5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvYnV0dG9uLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2NhcGFiaWxpdGllcy5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvY2FwYWJpbGl0aWVzLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2Nvb2tpZS5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvY29va2llLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2VsZW1lbnRfaWQuY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2VsZW1lbnRfaWQuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvZnJhbWVfaWQuY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2ZyYW1lX2lkLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2tleXMuY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2tleXMuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvbG9jYXRpb24uY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2xvY2F0aW9uLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2xvZ19lbnRyeS5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvbG9nX2VudHJ5LmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL2xvZ190eXBlLmNjJywKLSAgICAgICAgICAgICdwcm90b2NvbC9sb2dfdHlwZS5oJywKLSAgICAgICAgICAgICdwcm90b2NvbC9tb3ZldG8uY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL21vdmV0by5oJywKLSAgICAgICAgICAgICdwcm90b2NvbC9wcm94eS5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvcHJveHkuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvcmVjdC5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvcmVjdC5oJywKLSAgICAgICAgICAgICdwcm90b2NvbC9yZXNwb25zZS5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvcmVzcG9uc2UuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvc2NyaXB0LmNjJywKLSAgICAgICAgICAgICdwcm90b2NvbC9zY3JpcHQuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvc2VhcmNoX3N0cmF0ZWd5LmNjJywKLSAgICAgICAgICAgICdwcm90b2NvbC9zZWFyY2hfc3RyYXRlZ3kuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvc2VydmVyX3N0YXR1cy5jYycsCi0gICAgICAgICAgICAncHJvdG9jb2wvc2VydmVyX3N0YXR1cy5oJywKLSAgICAgICAgICAgICdwcm90b2NvbC9zZXNzaW9uX2lkLmgnLAotICAgICAgICAgICAgJ3Byb3RvY29sL3NpemUuY2MnLAotICAgICAgICAgICAgJ3Byb3RvY29sL3NpemUuaCcsCi0gICAgICAgICAgICAncHJvdG9jb2wvd2luZG93X2lkLmNjJywKLSAgICAgICAgICAgICdwcm90b2NvbC93aW5kb3dfaWQuaCcsCi0gICAgICAgICAgICAnc2NyZWVuc2hvdC5jYycsCi0gICAgICAgICAgICAnc2NyZWVuc2hvdC5oJywKLSAgICAgICAgICAgICdzY3JpcHRfZXhlY3V0b3IuY2MnLAotICAgICAgICAgICAgJ3NjcmlwdF9leGVjdXRvci5oJywKLSAgICAgICAgICAgICdzY3JpcHRfZXhlY3V0b3JfcGFyYW1zLmNjJywKLSAgICAgICAgICAgICdzY3JpcHRfZXhlY3V0b3JfcGFyYW1zLmgnLAotICAgICAgICAgICAgJ3NjcmlwdF9leGVjdXRvcl9yZXN1bHQuaCcsCi0gICAgICAgICAgICAnc2VhcmNoLmNjJywKLSAgICAgICAgICAgICdzZWFyY2guaCcsCi0gICAgICAgICAgICAnc2VydmVyLmNjJywKLSAgICAgICAgICAgICdzZXJ2ZXIuaCcsCi0gICAgICAgICAgICAnc2Vzc2lvbl9kcml2ZXIuY2MnLAotICAgICAgICAgICAgJ3Nlc3Npb25fZHJpdmVyLmgnLAotICAgICAgICAgICAgJ3dlYl9kcml2ZXJfbW9kdWxlLmNjJywKLSAgICAgICAgICAgICd3ZWJfZHJpdmVyX21vZHVsZS5oJywKLSAgICAgICAgICAgICd3aW5kb3dfZHJpdmVyLmNjJywKLSAgICAgICAgICAgICd3aW5kb3dfZHJpdmVyLmgnLAotICAgICAgICAgICAgJ3NjcmVlbmNhc3Qvc2NyZWVuY2FzdF9tb2R1bGUuY2MnLAotICAgICAgICAgICAgJ3NjcmVlbmNhc3Qvc2NyZWVuY2FzdF9tb2R1bGUuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWyAnY29weV93ZWJkcml2ZXJfZGF0YScsIF0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnRU5BQkxFX1dFQkRSSVZFUicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWyAnRU5BQkxFX1dFQkRSSVZFUicsIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnZW5hYmxlX3dlYmRyaXZlcj09MCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAnc3R1Yl93ZWJfZHJpdmVyX21vZHVsZS5jYycKLSAgICAgICAgICBdCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6aHR0cF9zZXJ2ZXInLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X3dlYmRyaXZlcl9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvcGllcyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIpL3dlYmRyaXZlcicsCi0gICAgICAgICAgJ2ZpbGVzJzogWydjb250ZW50L3dlYmRyaXZlci1pbml0LmpzJ10sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgICAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ2NvbnRlbnRfZGVwbG95X3N1YmRpcnMnOiBbICd3ZWJkcml2ZXInIF0KLSAgICAgICAgfQotICAgICAgfSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYmRyaXZlci93ZWJkcml2ZXJfdGVzdC5neXAgYi9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlcl90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNjOGFiOC4uMDAwMDAwMAotLS0gYS9jb2JhbHQvd2ViZHJpdmVyL3dlYmRyaXZlcl90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3dlYmRyaXZlcl90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV93ZWJkcml2ZXI9PTEnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnZ2V0X2VsZW1lbnRfdGV4dF90ZXN0LmNjJywKLSAgICAgICAgICAgICdpc19kaXNwbGF5ZWRfdGVzdC5jYycsCi0gICAgICAgICAgICAna2V5Ym9hcmRfdGVzdC5jYycsCi0gICAgICAgICAgICAnZXhlY3V0ZV90ZXN0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlci5neXA6YnJvd3NlcicsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICd3ZWJkcml2ZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL2NvYmFsdC90ZXN0L3Rlc3QuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3dlYmRyaXZlcl9jb3B5X3Rlc3RfZGF0YScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC93ZWJkcml2ZXIvdGVzdGRhdGEvJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ2NvYmFsdC93ZWJkcml2ZXJfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaSddLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2ViZHJpdmVyX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3dlYmRyaXZlcl90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3dlYmRyaXZlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXQotfQpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYmRyaXZlci93aW5kb3dfZHJpdmVyLmNjIGIvY29iYWx0L3dlYmRyaXZlci93aW5kb3dfZHJpdmVyLmNjCmluZGV4IDZhMzM1MTguLmRhNGVmYmQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJkcml2ZXIvd2luZG93X2RyaXZlci5jYworKysgYi9jb2JhbHQvd2ViZHJpdmVyL3dpbmRvd19kcml2ZXIuY2MKQEAgLTUwMCw4ICs1MDAsOCBAQAogICB9CiAKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBldmVudHMtPnNpemUoKTsgKytpKSB7Ci0gICAga2V5Ym9hcmRfZXZlbnRfaW5qZWN0b3JfLlJ1bihzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZXZlbnRzKVtpXS5maXJzdCwgKCpldmVudHMpW2ldLnNlY29uZCk7CisgICAga2V5Ym9hcmRfZXZlbnRfaW5qZWN0b3JfLlJ1bigoKmV2ZW50cylbaV0uZmlyc3QsICgqZXZlbnRzKVtpXS5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiAgIH0KICAgcmV0dXJuIENvbW1hbmRSZXN1bHQocHJvdG9jb2w6OlJlc3BvbnNlOjprU3VjY2Vzcyk7CiB9CkBAIC01NTcsMTIgKzU1NywxMiBAQAogICBldmVudC0+c2V0X2lzX3ByaW1hcnkodHJ1ZSk7CiB9CiAKLXZvaWQgV2luZG93RHJpdmVyOjpJbmplY3RQb2ludGVyRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRva2VuIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYgZXZlbnQpIHsKK3ZvaWQgV2luZG93RHJpdmVyOjpJbmplY3RQb2ludGVyRXZlbnQoYmFzZTo6VG9rZW4gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpQb2ludGVyRXZlbnRJbml0JiBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQpIHsKICAgcG9pbnRlcl94XyA9IGV2ZW50LnNjcmVlbl94KCk7CiAgIHBvaW50ZXJfeV8gPSBldmVudC5zY3JlZW5feSgpOwotICBwb2ludGVyX2V2ZW50X2luamVjdG9yXy5SdW4oZWxlbWVudCwgdHlwZSwgZXZlbnQpOworICBwb2ludGVyX2V2ZW50X2luamVjdG9yXy5SdW4odHlwZSwgZXZlbnQsIGVsZW1lbnQpOwogfQogCiB1dGlsOjpDb21tYW5kUmVzdWx0PHZvaWQ+IFdpbmRvd0RyaXZlcjo6TW91c2VNb3ZlVG9JbnRlcm5hbCgKQEAgLTYyMyw4ICs2MjMsOCBAQAogCiAgIGRvbTo6UG9pbnRlckV2ZW50SW5pdCBldmVudDsKICAgSW5pdFBvaW50ZXJFdmVudCgmZXZlbnQpOwotICBwb2ludGVyX2V2ZW50X2luamVjdG9yXy5SdW4oc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbnM6OnBvaW50ZXJtb3ZlKCksIGV2ZW50KTsKKyAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKGJhc2U6OlRva2Vuczo6cG9pbnRlcm1vdmUoKSwgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiAKICAgcmV0dXJuIENvbW1hbmRSZXN1bHQocHJvdG9jb2w6OlJlc3BvbnNlOjprU3VjY2Vzcyk7CiB9CkBAIC02NDIsOCArNjQyLDggQEAKIAogICBJbml0UG9pbnRlckV2ZW50KCZldmVudCk7CiAKLSAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW5zOjpwb2ludGVydXAoKSwgZXZlbnQpOworICBwb2ludGVyX2V2ZW50X2luamVjdG9yXy5SdW4oYmFzZTo6VG9rZW5zOjpwb2ludGVydXAoKSwgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4oKSk7CiB9CiAKIHZvaWQgV2luZG93RHJpdmVyOjpJbmplY3RNb3VzZUJ1dHRvbkRvd24oY29uc3QgcHJvdG9jb2w6OkJ1dHRvbiYgYnV0dG9uKSB7CkBAIC02NTksOCArNjU5LDggQEAKIAogICBJbml0UG9pbnRlckV2ZW50KCZldmVudCk7CiAKLSAgcG9pbnRlcl9ldmVudF9pbmplY3Rvcl8uUnVuKHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW5zOjpwb2ludGVyZG93bigpLCBldmVudCk7CisgIHBvaW50ZXJfZXZlbnRfaW5qZWN0b3JfLlJ1bihiYXNlOjpUb2tlbnM6OnBvaW50ZXJkb3duKCksIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KCkpOwogfQogCiB1dGlsOjpDb21tYW5kUmVzdWx0PHZvaWQ+IFdpbmRvd0RyaXZlcjo6TW91c2VCdXR0b25Eb3duSW50ZXJuYWwoCmRpZmYgLS1naXQgYS9jb2JhbHQvd2ViZHJpdmVyL3dpbmRvd19kcml2ZXIuaCBiL2NvYmFsdC93ZWJkcml2ZXIvd2luZG93X2RyaXZlci5oCmluZGV4IGRkOWIxMjEuLmQ3MmY4YzkgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJkcml2ZXIvd2luZG93X2RyaXZlci5oCisrKyBiL2NvYmFsdC93ZWJkcml2ZXIvd2luZG93X2RyaXZlci5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiYmFzZS9jb250YWluZXJzL2hhc2hfdGFibGVzLmgiCkBAIC01OCwxMSArNTksMTEgQEAKIC8vIHdpbGwgbWFwIHRvIGEgbWV0aG9kIG9uIHRoaXMgY2xhc3MuCiBjbGFzcyBXaW5kb3dEcml2ZXIgOiBwcml2YXRlIEVsZW1lbnRNYXBwaW5nIHsKICBwdWJsaWM6Ci0gIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8dm9pZChzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4sIGNvbnN0IGJhc2U6OlRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tOjpLZXlib2FyZEV2ZW50SW5pdCYpPgorICB0eXBlZGVmIGJhc2U6OkNhbGxiYWNrPHZvaWQoY29uc3QgYmFzZTo6VG9rZW4sIGNvbnN0IGRvbTo6S2V5Ym9hcmRFdmVudEluaXQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KT4KICAgICAgIEtleWJvYXJkRXZlbnRJbmplY3RvcjsKLSAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKHNjb3BlZF9yZWZwdHI8ZG9tOjpFbGVtZW50PiwgY29uc3QgYmFzZTo6VG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb206OlBvaW50ZXJFdmVudEluaXQmKT4KKyAgdHlwZWRlZiBiYXNlOjpDYWxsYmFjazx2b2lkKGNvbnN0IGJhc2U6OlRva2VuLCBjb25zdCBkb206OlBvaW50ZXJFdmVudEluaXQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+KT4KICAgICAgIFBvaW50ZXJFdmVudEluamVjdG9yOwogCiAgIHR5cGVkZWYgYmFzZTo6Q2FsbGJhY2s8c2NvcGVkX3JlZnB0cjxzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50PigpPgpAQCAtMTQ2LDggKzE0Nyw4IEBACiAKICAgLy8gVXNlZCB0byByZWNlaXZlIHBvaW50ZXIgcG9zaXRpb25zIGZyb20gZXZlbnRzIGluamVjdGVkIGZyb20gYW4KICAgLy8gRWxlbWVudERyaXZlci4KLSAgdm9pZCBJbmplY3RQb2ludGVyRXZlbnQoc2NvcGVkX3JlZnB0cjxkb206OkVsZW1lbnQ+IGVsZW1lbnQsIGJhc2U6OlRva2VuIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbTo6UG9pbnRlckV2ZW50SW5pdCYgZXZlbnQpOworICB2b2lkIEluamVjdFBvaW50ZXJFdmVudChiYXNlOjpUb2tlbiB0eXBlLCBjb25zdCBkb206OlBvaW50ZXJFdmVudEluaXQmIGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZWRfcmVmcHRyPGRvbTo6RWxlbWVudD4gZWxlbWVudCk7CiAKICAgdXRpbDo6Q29tbWFuZFJlc3VsdDx2b2lkPiBNb3VzZU1vdmVUb0ludGVybmFsKGNvbnN0IHByb3RvY29sOjpNb3ZldG8mIG1vdmV0byk7CiAKZGlmZiAtLWdpdCBhL2NvYmFsdC93ZWJzb2NrZXQvQlVJTEQuZ24gYi9jb2JhbHQvd2Vic29ja2V0L0JVSUxELmduCmluZGV4IDQ2OWVmMjcuLjI4YTJhODQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJzb2NrZXQvQlVJTEQuZ24KKysrIGIvY29iYWx0L3dlYnNvY2tldC9CVUlMRC5nbgpAQCAtNzAsNiArNzAsNCBAQAogICBpZiAoIWlzX2dvbGQpIHsKICAgICBkZXBzICs9IFsgIi8vY29iYWx0L2RlYnVnIiBdCiAgIH0KLQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXQuY2MgYi9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXQuY2MKaW5kZXggZDgxZGNmNC4uNzY4YTc3YiAxMDA2NDQKLS0tIGEvY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0LmNjCisrKyBiL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldC5jYwpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS93aW5kb3cuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvd2Vic29ja2V0L2Nsb3NlX2V2ZW50LmgiCiAjaW5jbHVkZSAibmV0L2Jhc2UvcG9ydF91dGlsLmgiCiAjaW5jbHVkZSAibmV0L2Jhc2UvdXJsX3V0aWwuaCIKQEAgLTQwLDEyICs0MiwxMiBAQAogCiB0eXBlZGVmIHVpbnQxNiBTZXJpYWxpemVkQ2xvc2VTdGF0dXNDb2RlVHlwZTsKIAotc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGtDb21tYSA9ICIsIjsKK3N0YXRpYyBjb25zdCBjaGFyIGtDb21tYVtdID0gIiwiOwogCi1ib29sIElzVVJMQWJzb2x1dGUoY29iYWx0Ojpkb206OkRPTVNldHRpbmdzKiBkb21fc2V0dGluZ3MsCitib29sIElzVVJMQWJzb2x1dGUoY29iYWx0Ojp3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIHsKICAgLy8gVGhpcyBpcyBhIHJlcXVpcmVtZW50IGZvciBjYWxsaW5nIHNwZWMoKQotICBEQ0hFQ0soZG9tX3NldHRpbmdzLT5iYXNlX3VybCgpLmlzX3ZhbGlkKCkpOworICBEQ0hFQ0soc2V0dGluZ3MtPmJhc2VfdXJsKCkuaXNfdmFsaWQoKSk7CiAKICAgdXJsOjpSYXdDYW5vbk91dHB1dFQ8Y2hhcj4gd2hpdGVzcGFjZV9idWZmZXI7CiAgIGludCByZWxhdGl2ZV9sZW5ndGg7CkBAIC01Niw3ICs1OCw3IEBACiAKICAgdXJsOjpDb21wb25lbnQgcmVsYXRpdmVfY29tcG9uZW50OwogCi0gIGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlX3VybChkb21fc2V0dGluZ3MtPmJhc2VfdXJsKCkuc3BlYygpKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2VfdXJsKHNldHRpbmdzLT5iYXNlX3VybCgpLnNwZWMoKSk7CiAgIHVybDo6UGFyc2VkIHBhcnNlZDsKIAogICB1cmw6OlBhcnNlU3RhbmRhcmRVUkwoYmFzZV91cmwuY19zdHIoKSwgc3RhdGljX2Nhc3Q8aW50PihiYXNlX3VybC5sZW5ndGgoKSksCkBAIC00MTgsOCArNDIwLDggQEAKICAgaWYgKGlzX3RleHRfZnJhbWUpIHsKICAgICByZXNwb25zZV90eXBlX2NvZGUgPSBkb206Ok1lc3NhZ2VFdmVudDo6a1RleHQ7CiAgIH0KLSAgdGhpcy0+RGlzcGF0Y2hFdmVudChuZXcgZG9tOjpNZXNzYWdlRXZlbnQoYmFzZTo6VG9rZW5zOjptZXNzYWdlKCksIHNldHRpbmdzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZV9jb2RlLCBkYXRhKSk7CisgIHRoaXMtPkRpc3BhdGNoRXZlbnQoCisgICAgICBuZXcgZG9tOjpNZXNzYWdlRXZlbnQoYmFzZTo6VG9rZW5zOjptZXNzYWdlKCksIHJlc3BvbnNlX3R5cGVfY29kZSwgZGF0YSkpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6T25Xcml0ZURvbmUodWludDY0X3QgYnl0ZXNfd3JpdHRlbikgewpAQCAtNDM3LDE2ICs0MzksMTcgQEAKICAgcG9ydF8gPSAtMTsKICAgU2V0UmVhZHlTdGF0ZShrQ29ubmVjdGluZyk7CiAKLSAgc2V0dGluZ3NfID0gYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8ZG9tOjpET01TZXR0aW5ncyo+KHNldHRpbmdzKTsKKyAgc2V0dGluZ3NfID0gYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oc2V0dGluZ3MpOwogICBpZiAoIXNldHRpbmdzXykgewotICAgIGRvbTo6RE9NRXhjZXB0aW9uOjpSYWlzZShkb206OkRPTUV4Y2VwdGlvbjo6a05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5hbCBlcnJvcjogVW5hYmxlIHRvIGdldCBET00gc2V0dGluZ3MuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX3N0YXRlKTsKKyAgICBkb206OkRPTUV4Y2VwdGlvbjo6UmFpc2UoCisgICAgICAgIGRvbTo6RE9NRXhjZXB0aW9uOjprTm9uZSwKKyAgICAgICAgIkludGVybmFsIGVycm9yOiBVbmFibGUgdG8gZ2V0IFdlYiBFbnZpcm9ubWVudCBTZXR0aW5ncy4iLAorICAgICAgICBleGNlcHRpb25fc3RhdGUpOwogICAgIE5PVFJFQUNIRUQoKSA8PCAiVW5hYmxlIHRvIGdldCBET00gc2V0dGluZ3MuIjsKICAgICByZXR1cm47CiAgIH0KIAotICBpZiAocmVxdWlyZV9uZXR3b3JrX21vZHVsZV8gJiYgIXNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKSkgeworICBpZiAocmVxdWlyZV9uZXR3b3JrX21vZHVsZV8gJiYgIXNldHRpbmdzXy0+Y29udGV4dCgpLT5uZXR3b3JrX21vZHVsZSgpKSB7CiAgICAgZG9tOjpET01FeGNlcHRpb246OlJhaXNlKGRvbTo6RE9NRXhjZXB0aW9uOjprTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVybmFsIGVycm9yOiBVbmFibGUgdG8gZ2V0IG5ldHdvcmsgbW9kdWxlLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9zdGF0ZSk7CkBAIC01NjMsOCArNTY2LDExIEBACiAgIGlmICghc2V0dGluZ3NfKSB7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSAgaWYgKHNldHRpbmdzXy0+d2luZG93KCkgJiYgc2V0dGluZ3NfLT53aW5kb3coKS0+ZG9jdW1lbnQoKSkgewotICAgIHJldHVybiBzZXR0aW5nc18tPndpbmRvdygpLT5kb2N1bWVudCgpLT5jc3BfZGVsZWdhdGUoKTsKKyAgZG9tOjpET01TZXR0aW5ncyogZG9tX3NldHRpbmdzID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPihzZXR0aW5nc18pOworICBpZiAoZG9tX3NldHRpbmdzICYmIGRvbV9zZXR0aW5ncy0+d2luZG93KCkgJiYKKyAgICAgIGRvbV9zZXR0aW5ncy0+d2luZG93KCktPmRvY3VtZW50KCkpIHsKKyAgICByZXR1cm4gZG9tX3NldHRpbmdzLT53aW5kb3coKS0+ZG9jdW1lbnQoKS0+Y3NwX2RlbGVnYXRlKCk7CiAgIH0gZWxzZSB7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KQEAgLTU3OCw4ICs1ODQsOSBAQAogICBHVVJMIG9yaWdpbl9ndXJsID0gc2V0dGluZ3NfLT5iYXNlX3VybCgpLkdldE9yaWdpbigpOwogICBjb25zdCBzdGQ6OnN0cmluZyYgb3JpZ2luID0gb3JpZ2luX2d1cmwucG9zc2libHlfaW52YWxpZF9zcGVjKCk7CiAKKyAgRENIRUNLKHNldHRpbmdzXy0+Y29udGV4dCgpKTsKICAgaW1wbF8gPSBiYXNlOjpXcmFwUmVmQ291bnRlZCgKLSAgICAgIG5ldyBXZWJTb2NrZXRJbXBsKHNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKSwgdGhpcykpOworICAgICAgbmV3IFdlYlNvY2tldEltcGwoc2V0dGluZ3NfLT5jb250ZXh0KCktPm5ldHdvcmtfbW9kdWxlKCksIHRoaXMpKTsKIAogICBpbXBsXy0+Q29ubmVjdChvcmlnaW4sIHVybCwgc3ViX3Byb3RvY29scyk7CiB9CkBAIC02NTcsNyArNjY0LDcgQEAKICAgICBpZiAocHJldmVudF9nYykgewogICAgICAgcHJldmVudF9nY193aGlsZV9saXN0ZW5pbmdfLnJlc2V0KAogICAgICAgICAgIG5ldyBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50OjpTY29wZWRQcmV2ZW50R2FyYmFnZUNvbGxlY3Rpb24oCi0gICAgICAgICAgICAgIHNldHRpbmdzXy0+Z2xvYmFsX2Vudmlyb25tZW50KCksIHRoaXMpKTsKKyAgICAgICAgICAgICAgc2V0dGluZ3NfLT5jb250ZXh0KCktPmdsb2JhbF9lbnZpcm9ubWVudCgpLCB0aGlzKSk7CiAgICAgfSBlbHNlIHsKICAgICAgIC8vIE5vdGU6IHRoZSBmYWxsIHRocm91Z2ggaW4gdGhpcyBzd2l0Y2ggc3RhdGVtZW50IGlzIG9uIHB1cnBvc2UuCiAgICAgICBzd2l0Y2ggKHJlYWR5X3N0YXRlXykgewpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0LmggYi9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXQuaAppbmRleCAwOWRlMDVkLi43MDk0MGM4IDEwMDY0NAotLS0gYS9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXQuaAorKysgYi9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXQuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vYmxvYi5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vY3NwX2RlbGVnYXRlLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fZXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvYXJyYXlfYnVmZmVyLmgiCkBAIC0zNSw2ICszNCw3IEBACiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC93cmFwcGFibGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0X2ltcGwuaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgc3RkOjpzdHJpbmcgZW50cnlfc2NyaXB0X29yaWdpbl87CiAKICAgYm9vbCByZXF1aXJlX25ldHdvcmtfbW9kdWxlXzsKLSAgZG9tOjpET01TZXR0aW5ncyogc2V0dGluZ3NfOworICB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzXzsKICAgc2NvcGVkX3JlZnB0cjxXZWJTb2NrZXRJbXBsPiBpbXBsXzsKIAogICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpHbG9iYWxFbnZpcm9ubWVudDo6U2NvcGVkUHJldmVudEdhcmJhZ2VDb2xsZWN0aW9uPgpkaWZmIC0tZ2l0IGEvY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0X2ltcGxfdGVzdC5jYyBiL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldF9pbXBsX3Rlc3QuY2MKaW5kZXggODAyYWI3MC4uZjY0NzdhZiAxMDA2NDQKLS0tIGEvY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0X2ltcGxfdGVzdC5jYworKysgYi9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXRfaW1wbF90ZXN0LmNjCkBAIC0xNCw5ICsxNCw4IEBACiAKICNpbmNsdWRlICJjb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXRfaW1wbC5oIgogCi0jaW5jbHVkZSAiY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0LmgiCi0KICNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCkBAIC0yNCwxMSArMjMsMTUgQEAKICNpbmNsdWRlICJjb2JhbHQvYmFzZS9wb2x5bW9ycGhpY19kb3duY2FzdC5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS90ZXN0aW5nL3N0dWJfZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJjb2JhbHQvZG9tL3dpbmRvdy5oIgogI2luY2x1ZGUgImNvYmFsdC9uZXR3b3JrL25ldHdvcmtfbW9kdWxlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9zY3JpcHRfZXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC90ZXN0aW5nL21vY2tfZXhjZXB0aW9uX3N0YXRlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9zdHViX3dlYl9jb250ZXh0LmgiCiAjaW5jbHVkZSAiY29iYWx0L3dlYnNvY2tldC9tb2NrX3dlYnNvY2tldF9jaGFubmVsLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYnNvY2tldC93ZWJfc29ja2V0LmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKIHVzaW5nIDo6dGVzdGluZzo6XzsKQEAgLTQ3LDI4ICs1MCwxMyBAQAogY29uc3QgaW50IGtUb29NdWNoID0ga0RlZmF1bHRTZW5kUXVvdGFIaWdoV2F0ZXJNYXJrICsgMTsKIGNvbnN0IGludCBrV2F5VG9vTXVjaCA9IGtEZWZhdWx0U2VuZFF1b3RhSGlnaFdhdGVyTWFyayAqIDIgKyAxOwogY29uc3QgaW50IGs1MTJLQiA9IDUxMjsKLQotY2xhc3MgRmFrZVNldHRpbmdzIDogcHVibGljIGRvbTo6RE9NU2V0dGluZ3MgewotIHB1YmxpYzoKLSAgRmFrZVNldHRpbmdzKCkKLSAgICAgIDogZG9tOjpET01TZXR0aW5ncygwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxfZGVidWdnZXJfaG9va3NfLCBOVUxMKSwKLSAgICAgICAgYmFzZV8oImh0dHBzOi8vMTI3LjAuMC4xOjEyMzQiKSB7Ci0gICAgbmV0d29ya19tb2R1bGVfLnJlc2V0KG5ldyBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKCkpOwotICAgIHRoaXMtPnNldF9uZXR3b3JrX21vZHVsZShuZXR3b3JrX21vZHVsZV8uZ2V0KCkpOwotICB9Ci0gIGNvbnN0IEdVUkwmIGJhc2VfdXJsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gYmFzZV87IH0KLQotICAvLyBwdWJsaWMgbWVtYmVycywgc28gdGhhdCB0aGV5J3JlIGVhc2llciBmb3IgdGVzdGluZy4KLSAgYmFzZTo6TnVsbERlYnVnZ2VySG9va3MgbnVsbF9kZWJ1Z2dlcl9ob29rc187Ci0gIEdVUkwgYmFzZV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxuZXR3b3JrOjpOZXR3b3JrTW9kdWxlPiBuZXR3b3JrX21vZHVsZV87Ci19OwogfSAgLy8gbmFtZXNwYWNlCiAKIGNsYXNzIFdlYlNvY2tldEltcGxUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7CiAgcHVibGljOgotICBkb206OkRPTVNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIHNldHRpbmdzXy5nZXQoKTsgfQorICB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3QgeworICAgIHJldHVybiB3ZWJfY29udGV4dF8tPmVudmlyb25tZW50X3NldHRpbmdzKCk7CisgIH0KICAgdm9pZCBBZGRRdW90YShpbnQgcXVvdGEpIHsKICAgICBuZXR3b3JrX3Rhc2tfcnVubmVyXy0+UG9zdEJsb2NraW5nVGFzaygKICAgICAgICAgRlJPTV9IRVJFLApAQCAtNzYsMTYgKzY0LDIyIEBACiAgIH0KIAogIHByb3RlY3RlZDoKLSAgV2ViU29ja2V0SW1wbFRlc3QoKSA6IHNldHRpbmdzXyhuZXcgRmFrZVNldHRpbmdzKCkpIHsKKyAgV2ViU29ja2V0SW1wbFRlc3QoKSA6IHdlYl9jb250ZXh0XyhuZXcgd2ViOjp0ZXN0OjpTdHViV2ViQ29udGV4dCgpKSB7CisgICAgd2ViX2NvbnRleHRfLT5zZXRfbmV0d29ya19tb2R1bGUobmV3IG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUoKSk7CisgICAgd2ViX2NvbnRleHRfLT5zZXR1cF9lbnZpcm9ubWVudF9zZXR0aW5ncygKKyAgICAgICAgbmV3IGRvbTo6dGVzdGluZzo6U3R1YkVudmlyb25tZW50U2V0dGluZ3MoKSk7CisgICAgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpLT5zZXRfYmFzZV91cmwoCisgICAgICAgIEdVUkwoImh0dHBzOi8vMTI3LjAuMC4xOjEyMzQiKSk7CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHN1Yl9wcm90b2NvbHM7CiAgICAgc3ViX3Byb3RvY29scy5wdXNoX2JhY2soImNoYXQiKTsKLSAgICBuZXR3b3JrX3Rhc2tfcnVubmVyXyA9IHNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKQorICAgIG5ldHdvcmtfdGFza19ydW5uZXJfID0gd2ViX2NvbnRleHRfLT5uZXR3b3JrX21vZHVsZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT51cmxfcmVxdWVzdF9jb250ZXh0X2dldHRlcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5HZXROZXR3b3JrVGFza1J1bm5lcigpOwogICB9CiAKICAgdm9pZCBTZXRVcCgpIG92ZXJyaWRlIHsKLSAgICB3ZWJzb2NrZXRfaW1wbF8gPSBuZXcgV2ViU29ja2V0SW1wbChzZXR0aW5nc18tPm5ldHdvcmtfbW9kdWxlKCksIG51bGxwdHIpOworICAgIHdlYnNvY2tldF9pbXBsXyA9CisgICAgICAgIG5ldyBXZWJTb2NrZXRJbXBsKHdlYl9jb250ZXh0Xy0+bmV0d29ya19tb2R1bGUoKSwgbnVsbHB0cik7CiAgICAgLy8gU2V0dGluZyB0aGlzIHdhcyB1c3VhbGx5IGRvbmUgYnkgV2ViU29ja2V0SW1wbDo6Q29ubmVjdCwgYnV0IHNpbmNlIHdlIGRvCiAgICAgLy8gbm90IGRvIENvbm5lY3QgZm9yIGV2ZXJ5IHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBzdXJlIGl0cyB0YXNrIHJ1bm5lciBpcwogICAgIC8vIHNldC4KQEAgLTk2LDE0ICs5MCwxNCBAQAogICAgICAgICBGUk9NX0hFUkUsCiAgICAgICAgIGJhc2U6OkJpbmQoCiAgICAgICAgICAgICBbXShzY29wZWRfcmVmcHRyPFdlYlNvY2tldEltcGw+IHdlYnNvY2tldF9pbXBsLAotICAgICAgICAgICAgICAgTW9ja1dlYlNvY2tldENoYW5uZWwqKiBtb2NrX2NoYW5uZWxfc2xvdCwKLSAgICAgICAgICAgICAgIGRvbTo6RE9NU2V0dGluZ3MqIHNldHRpbmdzKSB7CisgICAgICAgICAgICAgICB3ZWI6OkNvbnRleHQqIHdlYl9jb250ZXh0LAorICAgICAgICAgICAgICAgTW9ja1dlYlNvY2tldENoYW5uZWwqKiBtb2NrX2NoYW5uZWxfc2xvdCkgewogICAgICAgICAgICAgICAqbW9ja19jaGFubmVsX3Nsb3QgPSBuZXcgTW9ja1dlYlNvY2tldENoYW5uZWwoCi0gICAgICAgICAgICAgICAgICB3ZWJzb2NrZXRfaW1wbC5nZXQoKSwgc2V0dGluZ3MtPm5ldHdvcmtfbW9kdWxlKCkpOworICAgICAgICAgICAgICAgICAgd2Vic29ja2V0X2ltcGwsIHdlYl9jb250ZXh0LT5uZXR3b3JrX21vZHVsZSgpKTsKICAgICAgICAgICAgICAgd2Vic29ja2V0X2ltcGwtPndlYnNvY2tldF9jaGFubmVsXyA9CiAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8bmV0OjpXZWJTb2NrZXRDaGFubmVsPigqbW9ja19jaGFubmVsX3Nsb3QpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHdlYnNvY2tldF9pbXBsXywgJm1vY2tfY2hhbm5lbF8sIHNldHRpbmdzKCkpKTsKKyAgICAgICAgICAgIHdlYnNvY2tldF9pbXBsXywgd2ViX2NvbnRleHRfLmdldCgpLCAmbW9ja19jaGFubmVsXykpOwogICB9CiAKICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKQEAgLTExNiw3ICsxMTAsNyBAQAogCiAgIGJhc2U6OnRlc3Q6OlNjb3BlZFRhc2tFbnZpcm9ubWVudCBlbnZfOwogCi0gIHN0ZDo6dW5pcXVlX3B0cjxGYWtlU2V0dGluZ3M+IHNldHRpbmdzXzsKKyAgc3RkOjp1bmlxdWVfcHRyPHdlYjo6dGVzdDo6U3R1YldlYkNvbnRleHQ+IHdlYl9jb250ZXh0XzsKICAgc2NvcGVkX3JlZnB0cjxiYXNlOjpTaW5nbGVUaHJlYWRUYXNrUnVubmVyPiBuZXR3b3JrX3Rhc2tfcnVubmVyXzsKICAgc2NvcGVkX3JlZnB0cjxXZWJTb2NrZXRJbXBsPiB3ZWJzb2NrZXRfaW1wbF87CiAgIE1vY2tXZWJTb2NrZXRDaGFubmVsKiBtb2NrX2NoYW5uZWxfOwpAQCAtMjA5LDkgKzIwMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLCBrRGVmYXVsdFNlbmRRdW90YUhpZ2hXYXRlck1hcmspKQogICAgICAgICAuVGltZXMoMSkKICAgICAgICAgLldpbGxPbmNlKFJldHVybihuZXQ6OldlYlNvY2tldENoYW5uZWw6OkNIQU5ORUxfQUxJVkUpKTsKLSAgICBFWFBFQ1RfQ0FMTCgKLSAgICAgICAgKm1vY2tfY2hhbm5lbF8sCi0gICAgICAgIE1vY2tTZW5kRnJhbWUodHJ1ZSwgbmV0OjpXZWJTb2NrZXRGcmFtZUhlYWRlcjo6a09wQ29kZUNvbnRpbnVhdGlvbiwgXywgMSkpCisgICAgRVhQRUNUX0NBTEwoKm1vY2tfY2hhbm5lbF8sCisgICAgICAgICAgICAgICAgTW9ja1NlbmRGcmFtZSgKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgbmV0OjpXZWJTb2NrZXRGcmFtZUhlYWRlcjo6a09wQ29kZUNvbnRpbnVhdGlvbiwgXywgMSkpCiAgICAgICAgIC5UaW1lcygxKQogICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG5ldDo6V2ViU29ja2V0Q2hhbm5lbDo6Q0hBTk5FTF9BTElWRSkpOwogICAgIEVYUEVDVF9DQUxMKCptb2NrX2NoYW5uZWxfLApAQCAtMjE5LDkgKzIxMywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazUxMktCIC0gMSkpCiAgICAgICAgIC5UaW1lcygxKQogICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG5ldDo6V2ViU29ja2V0Q2hhbm5lbDo6Q0hBTk5FTF9BTElWRSkpOwotICAgIEVYUEVDVF9DQUxMKCptb2NrX2NoYW5uZWxfLAotICAgICAgICAgICAgICAgIE1vY2tTZW5kRnJhbWUodHJ1ZSwgbmV0OjpXZWJTb2NrZXRGcmFtZUhlYWRlcjo6a09wQ29kZUNvbnRpbnVhdGlvbiwgXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtUb29NdWNoIC0gKGs1MTJLQiAtIDEpKSkKKyAgICBFWFBFQ1RfQ0FMTCgKKyAgICAgICAgKm1vY2tfY2hhbm5lbF8sCisgICAgICAgIE1vY2tTZW5kRnJhbWUodHJ1ZSwgbmV0OjpXZWJTb2NrZXRGcmFtZUhlYWRlcjo6a09wQ29kZUNvbnRpbnVhdGlvbiwgXywKKyAgICAgICAgICAgICAgICAgICAgICBrVG9vTXVjaCAtIChrNTEyS0IgLSAxKSkpCiAgICAgICAgIC5UaW1lcygxKQogICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKG5ldDo6V2ViU29ja2V0Q2hhbm5lbDo6Q0hBTk5FTF9BTElWRSkpOwogICB9CmRpZmYgLS1naXQgYS9jb2JhbHQvd2Vic29ja2V0L3dlYl9zb2NrZXRfdGVzdC5jYyBiL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldF90ZXN0LmNjCmluZGV4IGM0YWQ4MmMuLmExMzBiZWUgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldF90ZXN0LmNjCisrKyBiL2NvYmFsdC93ZWJzb2NrZXQvd2ViX3NvY2tldF90ZXN0LmNjCkBAIC0yMyw5ICsyMywxMCBAQAogI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9kb20vdGVzdGluZy9zdHViX2Vudmlyb25tZW50X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2RvbS93aW5kb3cuaCIKLSNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvdGVzdGluZy9tb2NrX2V4Y2VwdGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvc3R1Yl93ZWJfY29udGV4dC5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCiB1c2luZyA6OnRlc3Rpbmc6Ol87CkBAIC0zNiwzOCArMzcsMzEgQEAKIG5hbWVzcGFjZSBjb2JhbHQgewogbmFtZXNwYWNlIHdlYnNvY2tldCB7CiAKLW5hbWVzcGFjZSB7Ci1jbGFzcyBGYWtlU2V0dGluZ3MgOiBwdWJsaWMgZG9tOjp0ZXN0aW5nOjpTdHViRW52aXJvbm1lbnRTZXR0aW5ncyB7Ci0gcHVibGljOgotICBGYWtlU2V0dGluZ3MoKSA6IGJhc2VfKCJodHRwczovL2V4YW1wbGUuY29tIikgewotICAgIG5ldHdvcmtfbW9kdWxlXy5yZXNldChuZXcgbmV0d29yazo6TmV0d29ya01vZHVsZSgpKTsKLSAgICB0aGlzLT5zZXRfbmV0d29ya19tb2R1bGUobmV0d29ya19tb2R1bGVfLmdldCgpKTsKLSAgfQotICBjb25zdCBHVVJMJiBiYXNlX3VybCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGJhc2VfOyB9Ci0KLSAgLy8gcHVibGljIG1lbWJlcnMsIHNvIHRoYXQgdGhleSdyZSBlYXNpZXIgZm9yIHRlc3RpbmcuCi0gIEdVUkwgYmFzZV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxuZXR3b3JrOjpOZXR3b3JrTW9kdWxlPiBuZXR3b3JrX21vZHVsZV87Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KIGNsYXNzIFdlYlNvY2tldFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKICBwdWJsaWM6Ci0gIGRvbTo6RE9NU2V0dGluZ3MqIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gc2V0dGluZ3NfLmdldCgpOyB9CisgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7CisgICAgcmV0dXJuIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKTsKKyAgfQogCiAgcHJvdGVjdGVkOgotICBXZWJTb2NrZXRUZXN0KCkgOiBzZXR0aW5nc18obmV3IEZha2VTZXR0aW5ncygpKSB7fQorICBXZWJTb2NrZXRUZXN0KCkgOiB3ZWJfY29udGV4dF8obmV3IHdlYjo6dGVzdDo6U3R1YldlYkNvbnRleHQoKSkgeworICAgIHdlYl9jb250ZXh0Xy0+c2V0X25ldHdvcmtfbW9kdWxlKG5ldyBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKCkpOworICAgIHdlYl9jb250ZXh0Xy0+c2V0dXBfZW52aXJvbm1lbnRfc2V0dGluZ3MoCisgICAgICAgIG5ldyBkb206OnRlc3Rpbmc6OlN0dWJFbnZpcm9ubWVudFNldHRpbmdzKCkpOworICAgIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKS0+c2V0X2Jhc2VfdXJsKAorICAgICAgICBHVVJMKCJodHRwczovL2V4YW1wbGUuY29tIikpOworICB9CiAKICAgYmFzZTo6dGVzdDo6U2NvcGVkVGFza0Vudmlyb25tZW50IGVudl87CiAKLSAgc3RkOjp1bmlxdWVfcHRyPEZha2VTZXR0aW5ncz4gc2V0dGluZ3NfOworICBzdGQ6OnVuaXF1ZV9wdHI8d2ViOjp0ZXN0OjpTdHViV2ViQ29udGV4dD4gd2ViX2NvbnRleHRfOwogICBTdHJpY3RNb2NrPE1vY2tFeGNlcHRpb25TdGF0ZT4gZXhjZXB0aW9uX3N0YXRlXzsKIH07CiAKIFRFU1RfRihXZWJTb2NrZXRUZXN0LCBCYWRPcmlnaW4pIHsKICAgc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OlNjcmlwdEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwogCi0gIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PEZha2VTZXR0aW5ncyo+KHNldHRpbmdzKCkpLT5iYXNlXyA9IEdVUkwoKTsKKyAgc2V0dGluZ3MoKS0+c2V0X2Jhc2VfdXJsKEdVUkwoKSk7CiAKICAgRVhQRUNUX0NBTEwoZXhjZXB0aW9uX3N0YXRlXywgU2V0RXhjZXB0aW9uKF8pKQogICAgICAgLldpbGxPbmNlKFNhdmVBcmc8MD4oJmV4Y2VwdGlvbikpOwpAQCAtOTcsOCArOTEsNyBAQAogICBmb3IgKHN0ZDo6c2l6ZV90IGkoMCk7IGkgIT0gQVJSQVlTSVpFX1VOU0FGRShvcmlnaW5fdGVzdF9jYXNlcyk7ICsraSkgewogICAgIGNvbnN0IE9yaWdpblRlc3RDYXNlJiB0ZXN0X2Nhc2Uob3JpZ2luX3Rlc3RfY2FzZXNbaV0pOwogICAgIHN0ZDo6c3RyaW5nIG5ld19iYXNlID0gdGVzdF9jYXNlLmlucHV0X2Jhc2VfdXJsOwotICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PEZha2VTZXR0aW5ncyo+KHNldHRpbmdzKCkpLT5iYXNlXyA9Ci0gICAgICAgIEdVUkwobmV3X2Jhc2UpOworICAgIHNldHRpbmdzKCktPnNldF9iYXNlX3VybChHVVJMKG5ld19iYXNlKSk7CiAKICAgICBzY29wZWRfcmVmcHRyPFdlYlNvY2tldD4gd3MobmV3IFdlYlNvY2tldChzZXR0aW5ncygpLCAid3M6Ly9leGFtcGxlLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2VwdGlvbl9zdGF0ZV8sIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9jb2JhbHQvd2Vic29ja2V0L3dlYnNvY2tldC5neXAgYi9jb2JhbHQvd2Vic29ja2V0L3dlYnNvY2tldC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYThkOWEuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3dlYnNvY2tldC93ZWJzb2NrZXQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2Vic29ja2V0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYnVmZmVyZWRfYW1vdW50X3RyYWNrZXIuY2MnLAotICAgICAgICAnYnVmZmVyZWRfYW1vdW50X3RyYWNrZXIuaCcsCi0gICAgICAgICdjbG9zZV9ldmVudC5oJywKLSAgICAgICAgJ3NlY193ZWJfc29ja2V0X2tleS5oJywKLSAgICAgICAgJ3dlYl9zb2NrZXQuY2MnLAotICAgICAgICAnd2ViX3NvY2tldC5oJywKLSAgICAgICAgJ2NvYmFsdF93ZWJfc29ja2V0X2V2ZW50X2hhbmRsZXIuY2MnLAotICAgICAgICAnY29iYWx0X3dlYl9zb2NrZXRfZXZlbnRfaGFuZGxlci5oJywKLSAgICAgICAgJ3dlYl9zb2NrZXRfaW1wbC5jYycsCi0gICAgICAgICd3ZWJfc29ja2V0X2ltcGwuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9uZXR3b3JrL25ldHdvcmsuZ3lwOm5ldHdvcmsnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd2Vic29ja2V0X3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd3ZWJfc29ja2V0X3Rlc3QuY2MnLAotICAgICAgICAnbW9ja193ZWJzb2NrZXRfY2hhbm5lbC5jYycsCi0gICAgICAgICd3ZWJfc29ja2V0X2ltcGxfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3dlYnNvY2tldCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvZG9tL2RvbS5neXA6ZG9tJywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0KLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgdGhlIGRlcGVuZGVuY3kgYmVsb3csIGl0IHdvcmtzIGFyb3VuZCB0aGUgZmFjdCB0aGF0Ci0gICAgICAgICMgICAgICAgU2NyaXB0VmFsdWVGYWN0b3J5IGhhcyBub24tdmlydHVhbCBtZXRob2QgQ3JlYXRlUHJvbWlzZSgpLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L3NjcmlwdC9lbmdpbmUuZ3lwOmVuZ2luZScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICMgVGhlIG5ldHdvcmsgZ3lwIHRhcmdldHMgZGVwZW5kcyBvbiAnZGVidWcnIGluIHVuaXQgdGVzdCBidWlsZHMuCi0gICAgICAgIFsnZW5hYmxlX2RlYnVnZ2VyID09IDEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvZGVidWcvZGVidWcuZ3lwOmRlYnVnJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd3ZWJzb2NrZXRfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnd2Vic29ja2V0X3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnd2Vic29ja2V0X3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQotCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL0JVSUxELmduIGIvY29iYWx0L3dvcmtlci9CVUlMRC5nbgppbmRleCA0ZDIzMzZhLi4yY2ZmY2VjIDEwMDY0NAotLS0gYS9jb2JhbHQvd29ya2VyL0JVSUxELmduCisrKyBiL2NvYmFsdC93b3JrZXIvQlVJTEQuZ24KQEAgLTE3LDggKzE3LDMxIEBACiAgIGNoZWNrX2luY2x1ZGVzID0gZmFsc2UKIAogICBzb3VyY2VzID0gWworICAgICJhYnN0cmFjdF93b3JrZXIuaCIsCisgICAgImRlZGljYXRlZF93b3JrZXIuY2MiLAorICAgICJkZWRpY2F0ZWRfd29ya2VyLmgiLAorICAgICJkZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5jYyIsCisgICAgImRlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmgiLAorICAgICJtZXNzYWdlX3BvcnQuY2MiLAorICAgICJtZXNzYWdlX3BvcnQuaCIsCisgICAgIm5hdmlnYXRpb25fcHJlbG9hZF9tYW5hZ2VyLmNjIiwKKyAgICAibmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuaCIsCisgICAgInNlcnZpY2Vfd29ya2VyLmNjIiwKKyAgICAic2VydmljZV93b3JrZXIuaCIsCiAgICAgInNlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5jYyIsCiAgICAgInNlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5oIiwKKyAgICAic2VydmljZV93b3JrZXJfam9icy5jYyIsCisgICAgInNlcnZpY2Vfd29ya2VyX2pvYnMuaCIsCisgICAgInNlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5jYyIsCisgICAgInNlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oIiwKKyAgICAic2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uX29iamVjdC5jYyIsCisgICAgInNlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbl9vYmplY3QuaCIsCisgICAgIndvcmtlci5jYyIsCisgICAgIndvcmtlci5oIiwKKyAgICAid29ya2VyX2dsb2JhbF9zY29wZS5jYyIsCisgICAgIndvcmtlcl9nbG9iYWxfc2NvcGUuaCIsCisgICAgIndvcmtlcl9zZXR0aW5ncy5jYyIsCisgICAgIndvcmtlcl9zZXR0aW5ncy5oIiwKICAgXQogCiAgIHB1YmxpY19kZXBzID0gWwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9hYnN0cmFjdF93b3JrZXIuaCBiL2NvYmFsdC93b3JrZXIvYWJzdHJhY3Rfd29ya2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1MzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvYWJzdHJhY3Rfd29ya2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfQUJTVFJBQ1RfV09SS0VSX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfQUJTVFJBQ1RfV09SS0VSX0hfCisKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0X2xpc3RlbmVyX2luZm8uaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2Vudmlyb25tZW50X3NldHRpbmdzLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIEFic3RyYWN0IFdvcmtlci4KKy8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2Fic3RyYWN0d29ya2VyCisKK2NsYXNzIEFic3RyYWN0V29ya2VyIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKgorICBvbmVycm9yKCkgY29uc3QgPSAwOworICB2aXJ0dWFsIHZvaWQgc2V0X29uZXJyb3IoCisgICAgICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUmCisgICAgICAgICAgZXZlbnRfbGlzdGVuZXIpID0gMDsKKworIHByb3RlY3RlZDoKKyAgdmlydHVhbCB+QWJzdHJhY3RXb3JrZXIoKSB7fQorfTsKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XT1JLRVJfQUJTVFJBQ1RfV09SS0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL2Fic3RyYWN0X3dvcmtlci5pZGwgYi9jb2JhbHQvd29ya2VyL2Fic3RyYWN0X3dvcmtlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1Nzg4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvYWJzdHJhY3Rfd29ya2VyLmlkbApAQCAtMCwwICsxLDE5IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0d29ya2VyCisKK1tOb0ludGVyZmFjZU9iamVjdF0gaW50ZXJmYWNlIEFic3RyYWN0V29ya2VyIHsKKyAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmVycm9yOworfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlci5jYyBiL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGU1YWUzCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyLmNjCkBAIC0wLDAgKzEsMTA1IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXIuaCIKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb2JhbHQvYnJvd3Nlci9zdGFja19zaXplX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworbmFtZXNwYWNlIHsKK2NvbnN0IGNoYXIga0RlZGljYXRlZFdvcmtlck5hbWVbXSA9ICJEZWRpY2F0ZWRXb3JrZXIiOworfSAgLy8gbmFtZXNwYWNlCisKK0RlZGljYXRlZFdvcmtlcjo6RGVkaWNhdGVkV29ya2VyKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0VVJMKQorICAgIDogRXZlbnRUYXJnZXQoc2V0dGluZ3MpLCBzZXR0aW5nc18oc2V0dGluZ3MpLCBzY3JpcHRfdXJsXyhzY3JpcHRVUkwpIHsKKyAgSW5pdGlhbGl6ZSgpOworfQorCitEZWRpY2F0ZWRXb3JrZXI6OkRlZGljYXRlZFdvcmtlcihzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHNjcmlwdFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdvcmtlck9wdGlvbnMmIHdvcmtlcl9vcHRpb25zKQorICAgIDogRXZlbnRUYXJnZXQoc2V0dGluZ3MpLAorICAgICAgc2V0dGluZ3NfKHNldHRpbmdzKSwKKyAgICAgIHNjcmlwdF91cmxfKHNjcmlwdFVSTCksCisgICAgICB3b3JrZXJfb3B0aW9uc18od29ya2VyX29wdGlvbnMpIHsKKyAgSW5pdGlhbGl6ZSgpOworfQorCit2b2lkIERlZGljYXRlZFdvcmtlcjo6SW5pdGlhbGl6ZSgpIHsKKyAgLy8gQWxnb3JpdGhtIGZvciB0aGUgV29ya2VyIGNvbnN0cnVjdG9yLgorICAvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNkb20td29ya2VyCisKKyAgLy8gMS4gVGhlIHVzZXIgYWdlbnQgbWF5IHRocm93IGEgIlNlY3VyaXR5RXJyb3IiIERPTUV4Y2VwdGlvbiBpZiB0aGUgcmVxdWVzdAorICAvLyAgICB2aW9sYXRlcyBhIHBvbGljeSBkZWNpc2lvbiAoZS5nLiBpZiB0aGUgdXNlciBhZ2VudCBpcyBjb25maWd1cmVkIHRvCisgIC8vICAgIG5vdAorICAvLyAgICBhbGxvdyB0aGUgcGFnZSB0byBzdGFydCBkZWRpY2F0ZWQgd29ya2VycykuCisgIC8vIDIuIExldCBvdXRzaWRlIHNldHRpbmdzIGJlIHRoZSBjdXJyZW50IHNldHRpbmdzIG9iamVjdC4KKyAgLy8gMy4gUGFyc2UgdGhlIHNjcmlwdFVSTCBhcmd1bWVudCByZWxhdGl2ZSB0byBvdXRzaWRlIHNldHRpbmdzLgorICBXb3JrZXI6Ok9wdGlvbnMgb3B0aW9ucyhrRGVkaWNhdGVkV29ya2VyTmFtZSk7CisgIGNvbnN0IEdVUkwmIGJhc2VfdXJsID0gZW52aXJvbm1lbnRfc2V0dGluZ3MoKS0+YmFzZV91cmwoKTsKKyAgb3B0aW9ucy51cmwgPSBiYXNlX3VybC5SZXNvbHZlKHNjcmlwdF91cmxfKTsKKworICBMT0dfSUYoV0FSTklORywgIW9wdGlvbnMudXJsLmlzX3ZhbGlkKCkpCisgICAgICA8PCBzY3JpcHRfdXJsXyA8PCAiIGNhbm5vdCBiZSByZXNvbHZlZCBiYXNlZCBvbiAiIDw8IGJhc2VfdXJsIDw8ICIuIjsKKworICAvLyA0LiBJZiB0aGlzIGZhaWxzLCB0aHJvdyBhICJTeW50YXhFcnJvciIgRE9NRXhjZXB0aW9uLgorICAvLyA1LiBMZXQgd29ya2VyIFVSTCBiZSB0aGUgcmVzdWx0aW5nIFVSTCByZWNvcmQuCisgIG9wdGlvbnMud2ViX29wdGlvbnMuc3RhY2tfc2l6ZSA9IGNvYmFsdDo6YnJvd3Nlcjo6a1dvcmtlclN0YWNrU2l6ZTsKKyAgb3B0aW9ucy53ZWJfb3B0aW9ucy5uZXR3b3JrX21vZHVsZSA9CisgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqPihzZXR0aW5nc18pCisgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAtPm5ldHdvcmtfbW9kdWxlKCk7CisgIC8vIDYuIExldCB3b3JrZXIgYmUgYSBuZXcgV29ya2VyIG9iamVjdC4KKyAgd29ya2VyXy5yZXNldChuZXcgV29ya2VyKCkpOworICAvLyA3LiBMZXQgb3V0c2lkZSBwb3J0IGJlIGEgbmV3IE1lc3NhZ2VQb3J0IGluIG91dHNpZGUgc2V0dGluZ3MncyBSZWFsbS4KKyAgLy8gOC4gQXNzb2NpYXRlIHRoZSBvdXRzaWRlIHBvcnQgd2l0aCB3b3JrZXIuCisgIG91dHNpZGVfcG9ydF8gPSBuZXcgTWVzc2FnZVBvcnQodGhpcywgc2V0dGluZ3NfKTsKKyAgLy8gOS4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDoKKyAgLy8gICAgMS4gUnVuIGEgd29ya2VyIGdpdmVuIHdvcmtlciwgd29ya2VyIFVSTCwgb3V0c2lkZSBzZXR0aW5ncywgb3V0c2lkZQorICAvLyAgICBwb3J0LCBhbmQgb3B0aW9ucy4KKyAgb3B0aW9ucy5vdXRzaWRlX3NldHRpbmdzID0gc2V0dGluZ3NfOworICBvcHRpb25zLm91dHNpZGVfcG9ydCA9IG91dHNpZGVfcG9ydF8uZ2V0KCk7CisgIG9wdGlvbnMub3B0aW9ucyA9IHdvcmtlcl9vcHRpb25zXzsKKworICB3b3JrZXJfLT5SdW4ob3B0aW9ucyk7CisgIC8vIDEwLiBSZXR1cm4gd29ya2VyLgorfQorCitEZWRpY2F0ZWRXb3JrZXI6On5EZWRpY2F0ZWRXb3JrZXIoKSB7IFRlcm1pbmF0ZSgpOyB9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyOjpUZXJtaW5hdGUoKSB7fQorCisvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBvYmplY3QgdHJhbnNmZXIpOworLy8gLT4gdm9pZCBQb3N0TWVzc2FnZShjb25zdCBzY3JpcHQ6OlZhbHVlSGFuZGxlSG9sZGVyJiBtZXNzYWdlLAorLy8gICAgICAgICAgICAgICAgICAgICBzY3JpcHQ6OlNlcXVlbmNlPHNjcmlwdDo6VmFsdWVIYW5kbGUqPiB0cmFuc2Zlcikge30KK3ZvaWQgRGVkaWNhdGVkV29ya2VyOjpQb3N0TWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgeworICBEQ0hFQ0sod29ya2VyXyk7CisgIHdvcmtlcl8tPlBvc3RNZXNzYWdlKG1lc3NhZ2UpOworfQorCisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlci5oIGIvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1ZmMzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV09SS0VSX0RFRElDQVRFRF9XT1JLRVJfSF8KKyNkZWZpbmUgQ09CQUxUX1dPUktFUl9ERURJQ0FURURfV09SS0VSX0hfCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiYmFzZS9tZW1vcnkvc2NvcGVkX3JlZnB0ci5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXRfbGlzdGVuZXJfaW5mby5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL2Fic3RyYWN0X3dvcmtlci5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIERlZGljYXRlZCB3b3JrZXJzIGFuZCB0aGUgV29ya2VyIGludGVyZmFjZS4KKy8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2RlZGljYXRlZC13b3JrZXJzLWFuZC10aGUtd29ya2VyLWludGVyZmFjZQorY2xhc3MgRGVkaWNhdGVkV29ya2VyIDogcHVibGljIEFic3RyYWN0V29ya2VyLCBwdWJsaWMgZG9tOjpFdmVudFRhcmdldCB7CisgcHVibGljOgorICBEZWRpY2F0ZWRXb3JrZXIoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHRVUkwpOworICBEZWRpY2F0ZWRXb3JrZXIoc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHRVUkwsIGNvbnN0IFdvcmtlck9wdGlvbnMmIG9wdGlvbnMpOworCisgIC8vIFdlYiBBUEk6IFdvcmtlcgorICAvLworICAvLyBUaGlzIG1heSBoZWxwIGZvciBhZGRpbmcgc3VwcG9ydCBvZiAnb2JqZWN0JworICAvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBvYmplY3QgdHJhbnNmZXIpOworICAvLyAtPiB2b2lkIFBvc3RNZXNzYWdlKGNvbnN0IHNjcmlwdDo6VmFsdWVIYW5kbGVIb2xkZXImIG1lc3NhZ2UsCisgIC8vICAgICAgICAgICAgICAgICAgICAgc2NyaXB0OjpTZXF1ZW5jZTxzY3JpcHQ6OlZhbHVlSGFuZGxlKj4gdHJhbnNmZXIpIHt9CisgIHZvaWQgUG9zdE1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOworCisgIGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSogb25tZXNzYWdlKCkgY29uc3QgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZSgpKTsKKyAgfQorICB2b2lkIHNldF9vbm1lc3NhZ2UoY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJiBldmVudF9saXN0ZW5lcikgeworICAgIFNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorCisgIGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSogb25tZXNzYWdlZXJyb3IoKSBjb25zdCB7CisgICAgcmV0dXJuIEdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlZXJyb3IoKSk7CisgIH0KKyAgdm9pZCBzZXRfb25tZXNzYWdlZXJyb3IoY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJiBldmVudF9saXN0ZW5lcikgeworICAgIFNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlZXJyb3IoKSwgZXZlbnRfbGlzdGVuZXIpOworICB9CisKKyAgdm9pZCBUZXJtaW5hdGUoKTsKKworICAvLyBXZWIgQVBJOiBBYnN0cmFjdCBXb3JrZXIKKyAgLy8KKyAgY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKiBvbmVycm9yKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6ZXJyb3IoKSk7CisgIH0KKyAgdm9pZCBzZXRfb25lcnJvcihjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUmIGV2ZW50X2xpc3RlbmVyKSBvdmVycmlkZSB7CisgICAgU2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OmVycm9yKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorCisgIERFRklORV9XUkFQUEFCTEVfVFlQRShEZWRpY2F0ZWRXb3JrZXIpOworCisgcHJpdmF0ZToKKyAgfkRlZGljYXRlZFdvcmtlcigpIG92ZXJyaWRlOworICB2b2lkIEluaXRpYWxpemUoKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlZGljYXRlZFdvcmtlcik7CisKKyAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5nc187CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHNjcmlwdF91cmxfOworICBjb25zdCBXb3JrZXJPcHRpb25zIHdvcmtlcl9vcHRpb25zXzsKKyAgc2NvcGVkX3JlZnB0cjxNZXNzYWdlUG9ydD4gb3V0c2lkZV9wb3J0XzsKKyAgc3RkOjp1bmlxdWVfcHRyPFdvcmtlcj4gd29ya2VyXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfV09SS0VSX0RFRElDQVRFRF9XT1JLRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGUuY2MgYi9jb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwM2VkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmNjCkBAIC0wLDAgKzEsNzcgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGUuaCIKKworI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyX3NldHRpbmdzLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CitEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUoCisgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKKyAgICBib29sIHBhcmVudF9jcm9zc19vcmlnaW5faXNvbGF0ZWRfY2FwYWJpbGl0eSkKKyAgICA6IFdvcmtlckdsb2JhbFNjb3BlKHNldHRpbmdzKSwgY3Jvc3Nfb3JpZ2luX2lzb2xhdGVkX2NhcGFiaWxpdHlfKGZhbHNlKSB7CisgIC8vIEFsZ29yaXRobSBmb3IgJ3J1biBhIHdvcmtlcicKKyAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2NvbW1pdC1zbmFwc2hvdHMvNDY1YTZiNjcyYzcwMzA1NGRlMjc4YjBmODEzM2ViM2FkMzNkOTNmNC8jcnVuLWEtd29ya2VyCisgIC8vICAgICAxNC45LiBJZiBpcyBzaGFyZWQgaXMgZmFsc2UgYW5kIG93bmVyJ3MgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkCisgIC8vICAgICBjYXBhYmlsaXR5IGlzIGZhbHNlLCB0aGVuIHNldCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgY3Jvc3Mtb3JpZ2luCisgIC8vICAgICBpc29sYXRlZCBjYXBhYmlsaXR5IHRvIGZhbHNlLgorICBpZiAoIXBhcmVudF9jcm9zc19vcmlnaW5faXNvbGF0ZWRfY2FwYWJpbGl0eSkgeworICAgIGNyb3NzX29yaWdpbl9pc29sYXRlZF9jYXBhYmlsaXR5XyA9IGZhbHNlOworICB9Cit9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OkluaXRpYWxpemUoKSB7CisgIC8vIEFsZ29yaXRobSBmb3IgJ3J1biBhIHdvcmtlcicKKyAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2NvbW1pdC1zbmFwc2hvdHMvNDY1YTZiNjcyYzcwMzA1NGRlMjc4YjBmODEzM2ViM2FkMzNkOTNmNC8jcnVuLWEtd29ya2VyCisgIC8vICAgICAxNC40LiBJbml0aWFsaXplIHdvcmtlciBnbG9iYWwgc2NvcGUncyBwb2xpY3kgY29udGFpbmVyIGdpdmVuIHdvcmtlcgorICAvLyAgICAgICAgZ2xvYmFsIHNjb3BlLCByZXNwb25zZSwgYW5kIGluc2lkZSBzZXR0aW5ncy4KKyAgLy8gICAgIDE0LjUuIElmIHRoZSBSdW4gQ1NQIGluaXRpYWxpemF0aW9uIGZvciBhIGdsb2JhbCBvYmplY3QgYWxnb3JpdGhtCisgIC8vICAgICByZXR1cm5zCisgIC8vICAgICAgICAiQmxvY2tlZCIgd2hlbiBleGVjdXRlZCB1cG9uIHdvcmtlciBnbG9iYWwgc2NvcGUsIHNldCByZXNwb25zZSB0byBhCisgIC8vICAgICAgICBuZXR3b3JrIGVycm9yLiBbQ1NQXQorCisgIC8vICAgICAxNC42LiBJZiB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgZW1iZWRkZXIgcG9saWN5J3MgdmFsdWUgaXMgY29tcGF0aWJsZQorICAvLyAgICAgd2l0aAorICAvLyAgICAgICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGlvbiBhbmQgaXMgc2hhcmVkIGlzIHRydWUsIHRoZW4gc2V0IGFnZW50J3MgYWdlbnQKKyAgLy8gICAgICAgIGNsdXN0ZXIncyBjcm9zcy1vcmlnaW4gaXNvbGF0aW9uIG1vZGUgdG8gImxvZ2ljYWwiIG9yICJjb25jcmV0ZSIuCisgIC8vICAgICAgICBUaGUgb25lIGNob3NlbiBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgorICAvLyAgICAgTm8gbmVlZCBmb3IgZGVkaWNhdGVkIHdvcmtlci4KKworICAvLyAgICAgMTQuNy4gSWYgdGhlIHJlc3VsdCBvZiBjaGVja2luZyBhIGdsb2JhbCBvYmplY3QncyBlbWJlZGRlciBwb2xpY3kgd2l0aAorICAvLyAgICAgICAgd29ya2VyIGdsb2JhbCBzY29wZSwgb3V0c2lkZSBzZXR0aW5ncywgYW5kIHJlc3BvbnNlIGlzIGZhbHNlLCB0aGVuCisgIC8vICAgICAgICBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLgorICAvLyAgICAgMTQuOC4gU2V0IHdvcmtlciBnbG9iYWwgc2NvcGUncyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSB0bworICAvLyAgICAgdHJ1ZQorICAvLyAgICAgICAgaWYgYWdlbnQncyBhZ2VudCBjbHVzdGVyJ3MgY3Jvc3Mtb3JpZ2luIGlzb2xhdGlvbiBtb2RlIGlzCisgIC8vICAgICAgICAiY29uY3JldGUiLgorCisgIC8vICAgICAxNC4xMC4gSWYgaXMgc2hhcmVkIGlzIGZhbHNlIGFuZCByZXNwb25zZSdzIHVybCdzIHNjaGVtZSBpcyAiZGF0YSIsCisgIC8vICAgICB0aGVuCisgIC8vICAgICAgICAgc2V0IHdvcmtlciBnbG9iYWwgc2NvcGUncyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSB0bworICAvLyAgICAgICAgIGZhbHNlLgorICBpZiAoIVVybCgpLlNjaGVtZUlzKCJkYXRhIikpIHsKKyAgICBjcm9zc19vcmlnaW5faXNvbGF0ZWRfY2FwYWJpbGl0eV8gPSBmYWxzZTsKKyAgfQorfQorCit2b2lkIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpQb3N0TWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgeworICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3b3JrZXI6OldvcmtlclNldHRpbmdzKj4oZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKKyAgICAgIC0+bWVzc2FnZV9wb3J0KCkKKyAgICAgIC0+UG9zdE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5oIGIvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTJmMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmgKQEAgLTAsMCArMSw4NCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfREVESUNBVEVEX1dPUktFUl9HTE9CQUxfU0NPUEVfSF8KKyNkZWZpbmUgQ09CQUxUX1dPUktFUl9ERURJQ0FURURfV09SS0VSX0dMT0JBTF9TQ09QRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiY29iYWx0L2Jhc2UvdG9rZW5zLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXQuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldF9saXN0ZW5lcl9pbmZvLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3ZhbHVlX2hhbmRsZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXJfZ2xvYmFsX3Njb3BlLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIERlZGljYXRlZCB3b3JrZXJzIGFuZCB0aGUgV29ya2VyIGludGVyZmFjZS4KKy8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2RlZGljYXRlZC13b3JrZXJzLWFuZC10aGUtZGVkaWNhdGVkd29ya2VyZ2xvYmFsc2NvcGUtaW50ZXJmYWNlCisKK2NsYXNzIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIDogcHVibGljIFdvcmtlckdsb2JhbFNjb3BlIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKAorICAgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKKyAgICAgIGJvb2wgcGFyZW50X2Nyb3NzX29yaWdpbl9pc29sYXRlZF9jYXBhYmlsaXR5KTsKKworICAvLyBXZWIgQVBJOiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZQorICAvLworICB2b2lkIHNldF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7IG5hbWVfID0gbmFtZTsgfQorICBzdGQ6OnN0cmluZyBuYW1lKCkgeyByZXR1cm4gbmFtZV87IH0KKworICB2b2lkIEluaXRpYWxpemUoKSBvdmVycmlkZTsKKworICB2b2lkIFBvc3RNZXNzYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKTsKKyAgdm9pZCBDbG9zZSgpIHt9CisKKyAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKiBvbm1lc3NhZ2UoKSB7CisgICAgcmV0dXJuIEdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlKCkpOworICB9CisgIHZvaWQgc2V0X29ubWVzc2FnZSgKKyAgICAgIGNvbnN0IGRvbTo6RXZlbnRUYXJnZXRMaXN0ZW5lckluZm86OkV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYKKyAgICAgICAgICBldmVudF9saXN0ZW5lcikgeworICAgIFNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqCisgIG9ubWVzc2FnZWVycm9yKCkgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZWVycm9yKCkpOworICB9CisgIHZvaWQgc2V0X29ubWVzc2FnZWVycm9yKAorICAgICAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJgorICAgICAgICAgIGV2ZW50X2xpc3RlbmVyKSB7CisgICAgU2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6Om1lc3NhZ2VlcnJvcigpLCBldmVudF9saXN0ZW5lcik7CisgIH0KKworICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUpOworCisgcHJvdGVjdGVkOgorICB+RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUoKSBvdmVycmlkZSB7fQorCisgcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKTsKKyAgYm9vbCBjcm9zc19vcmlnaW5faXNvbGF0ZWRfY2FwYWJpbGl0eV87CisKKyAgc3RkOjpzdHJpbmcgbmFtZV87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9ERURJQ0FURURfV09SS0VSX0dMT0JBTF9TQ09QRV9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5pZGwgYi9jb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjIxZTVmCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5pZGwKQEAgLTAsMCArMSwzMSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93b3JrZXJzLmh0bWwjZGVkaWNhdGVkLXdvcmtlcnMtYW5kLXRoZS1kZWRpY2F0ZWR3b3JrZXJnbG9iYWxzY29wZS1pbnRlcmZhY2UKKworW0dsb2JhbF0gaW50ZXJmYWNlIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIDogV29ya2VyR2xvYmFsU2NvcGUgeworICBbUmVwbGFjZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKworICB2b2lkIHBvc3RNZXNzYWdlKFVTVlN0cmluZyBtZXNzYWdlKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBzZXF1ZW5jZTxvYmplY3Q+OiBiLzIxODUwMTc3NAorICAvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBzZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBvdmVybG9hZHMgd2l0aCBkaWN0aW9uYXJ5IHBhcmFtZXRlcjogYi8yMTg1MDY3MzAKKyAgLy8gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwKKyAgLy8gICAgICAgICAgICAgICAgICBvcHRpb25hbCBTdHJ1Y3R1cmVkU2VyaWFsaXplT3B0aW9ucyBvcHRpb25zID0ge30pOworCisgIHZvaWQgY2xvc2UoKTsKKworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZTsKKyAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2VlcnJvcjsKK307CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL21lc3NhZ2VfcG9ydC5jYyBiL2NvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNzdiNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL21lc3NhZ2VfcG9ydC5jYwpAQCAtMCwwICsxLDY1IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL21lc3NhZ2VfcG9ydC5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCisjaW5jbHVkZSAiYmFzZS9iaW5kX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJiYXNlL21lbW9yeS9wdHJfdXRpbC5oIgorI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9tZXNzYWdlX2V2ZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCitNZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoZG9tOjpFdmVudFRhcmdldCogZXZlbnRfdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpCisgICAgOiBldmVudF90YXJnZXRfKGV2ZW50X3RhcmdldCksCisgICAgICBtZXNzYWdlX2xvb3BfKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCkpLAorICAgICAgc2V0dGluZ3NfKHNldHRpbmdzKSB7fQorCitNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KCkge30KKwordm9pZCBNZXNzYWdlUG9ydDo6UG9zdE1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2VzKSB7CisgIC8vIFRPRE86IEZvcndhcmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBvcmlnYXRpbmcgQVBJIGNhbGwgdG8gdGhlIFBvc3RUYXNrIGNhbGwuCisgIGlmIChtZXNzYWdlX2xvb3BfKSB7CisgICAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93b3JrZXJzLmh0bWwjaGFuZGxlci13b3JrZXItb25tZXNzYWdlCisgICAgLy8gVE9ETzogVXBkYXRlIE1lc3NhZ2VFdmVudCB0byBzdXBwb3J0IG1vcmUgdHlwZXMuIChiLzIyNzY2NTg0NykKKyAgICAvLyBUT0RPOiBSZW1vdmUgZGVwZW5kZW5jeSBvZiBNZXNzYWdlRXZlbnQgb24gbmV0IGlvYnVmZmVyIChiLzIyNzY2NTg0NykKKyAgICBzY29wZWRfcmVmcHRyPG5ldDo6SU9CdWZmZXJXaXRoU2l6ZT4gYnVmID0KKyAgICAgICAgYmFzZTo6V3JhcFJlZkNvdW50ZWQobmV3IG5ldDo6SU9CdWZmZXJXaXRoU2l6ZShtZXNzYWdlcy5sZW5ndGgoKSkpOworICAgIG1lbWNweShidWYtPmRhdGEoKSwgbWVzc2FnZXMuZGF0YSgpLCBtZXNzYWdlcy5sZW5ndGgoKSk7CisgICAgc2NvcGVkX3JlZnB0cjxkb206Ok1lc3NhZ2VFdmVudD4gZXZlbnQobmV3IGRvbTo6TWVzc2FnZUV2ZW50KAorICAgICAgICBiYXNlOjpUb2tlbnM6Om1lc3NhZ2UoKSwgZG9tOjpNZXNzYWdlRXZlbnQ6OmtUZXh0LCBidWYpKTsKKyAgICBtZXNzYWdlX2xvb3BfLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgICAgRlJPTV9IRVJFLAorICAgICAgICBiYXNlOjpCaW5kKCZNZXNzYWdlUG9ydDo6RGlzcGF0Y2hFdmVudCwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgZXZlbnQpKTsKKyAgfQorfQorCit2b2lkIE1lc3NhZ2VQb3J0OjpEaXNwYXRjaEV2ZW50KHNjb3BlZF9yZWZwdHI8ZG9tOjpNZXNzYWdlRXZlbnQ+IGV2ZW50KSB7CisgIGlmIChldmVudF90YXJnZXRfKSBldmVudF90YXJnZXRfLT5EaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgTE9HX0lGKFdBUk5JTkcsICFldmVudF90YXJnZXRfKQorICAgICAgPDwgIk1lc3NhZ2VQb3J0IGV2ZW50IG5vdCBkaXNwYXRjaGVkIGJlY2F1c2UgdGhlcmUgaXMgbm8gRXZlbnRUYXJnZXQuIjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9tZXNzYWdlX3BvcnQuaCBiL2NvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYmMxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmgKQEAgLTAsMCArMSw5NiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfTUVTU0FHRV9QT1JUX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfTUVTU0FHRV9QT1JUX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL21lbW9yeS93ZWFrX3B0ci5oIgorI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgorI2luY2x1ZGUgImNvYmFsdC9iYXNlL3Rva2Vucy5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXRfbGlzdGVuZXJfaW5mby5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vbWVzc2FnZV9ldmVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC92YWx1ZV9oYW5kbGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCitjbGFzcyBNZXNzYWdlUG9ydCA6IHB1YmxpYyBzY3JpcHQ6OldyYXBwYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIGJhc2U6OlN1cHBvcnRzV2Vha1B0cjxNZXNzYWdlUG9ydD4geworIHB1YmxpYzoKKyAgTWVzc2FnZVBvcnQoZG9tOjpFdmVudFRhcmdldCogZXZlbnRfdGFyZ2V0LAorICAgICAgICAgICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzKTsKKyAgfk1lc3NhZ2VQb3J0KCk7CisKKyAgLy8gVGhpcyBtYXkgaGVscCBmb3IgYWRkaW5nIHN1cHBvcnQgb2YgJ29iamVjdCcKKyAgLy8gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb2JqZWN0IHRyYW5zZmVyKTsKKyAgLy8gLT4gdm9pZCBQb3N0TWVzc2FnZShjb25zdCBzY3JpcHQ6OlZhbHVlSGFuZGxlSG9sZGVyJiBtZXNzYWdlLAorICAvLyAgICAgICAgICAgICAgICAgICAgIHNjcmlwdDo6U2VxdWVuY2U8c2NyaXB0OjpWYWx1ZUhhbmRsZSo+IHRyYW5zZmVyKSB7fQorICB2b2lkIFBvc3RNZXNzYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKTsKKworICB2b2lkIFN0YXJ0KCkge30KKyAgdm9pZCBDbG9zZSgpIHt9CisKKyAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKiBvbm1lc3NhZ2UoKQorICAgICAgY29uc3QgeworICAgIHJldHVybiBldmVudF90YXJnZXRfID8gZXZlbnRfdGFyZ2V0Xy0+R2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpUb2tlbnM6Om1lc3NhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxwdHI7CisgIH0KKyAgdm9pZCBzZXRfb25tZXNzYWdlKAorICAgICAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJgorICAgICAgICAgIGV2ZW50X2xpc3RlbmVyKSB7CisgICAgaWYgKGV2ZW50X3RhcmdldF8pCisgICAgICBldmVudF90YXJnZXRfLT5TZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0ZW5lcik7CisgIH0KKworICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9ubWVzc2FnZWVycm9yKCkKKyAgICAgIGNvbnN0IHsKKyAgICByZXR1cm4gZXZlbnRfdGFyZ2V0XyA/IGV2ZW50X3RhcmdldF8tPkdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VG9rZW5zOjptZXNzYWdlZXJyb3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxwdHI7CisgIH0KKyAgdm9pZCBzZXRfb25tZXNzYWdlZXJyb3IoCisgICAgICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUmCisgICAgICAgICAgZXZlbnRfbGlzdGVuZXIpIHsKKyAgICBpZiAoZXZlbnRfdGFyZ2V0XykKKyAgICAgIGV2ZW50X3RhcmdldF8tPlNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjptZXNzYWdlZXJyb3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdGVuZXIpOworICB9CisKKyAgdm9pZCBEaXNwYXRjaEV2ZW50KHNjb3BlZF9yZWZwdHI8ZG9tOjpNZXNzYWdlRXZlbnQ+IGV2ZW50KTsKKworICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoTWVzc2FnZVBvcnQpOworCisgcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE1lc3NhZ2VQb3J0KTsKKworICAvLyBUaGUgZXZlbnQgdGFyZ2V0IHRvIGRpc3BhdGNoIGV2ZW50cyB0by4KKyAgZG9tOjpFdmVudFRhcmdldCogZXZlbnRfdGFyZ2V0XyA9IG51bGxwdHI7CisgIC8vIFRoZSBtZXNzYWdlIGxvb3AgZm9yIHBvc3RpbmcgZXZlbnQgZGlzcGF0Y2hlcyB0by4KKyAgYmFzZTo6TWVzc2FnZUxvb3AqIG1lc3NhZ2VfbG9vcF8gPSBudWxscHRyOworICAvLyBFbnZpcm9ubWVudFNldHRpbmdzIG9mIHRoZSBldmVudCB0YXJnZXQuCisgIHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3NfID0gbnVsbHB0cjsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKKworI2VuZGlmICAvLyBDT0JBTFRfV09SS0VSX01FU1NBR0VfUE9SVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9tZXNzYWdlX3BvcnQuaWRsIGIvY29iYWx0L3dvcmtlci9tZXNzYWdlX3BvcnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYWNhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL21lc3NhZ2VfcG9ydC5pZGwKQEAgLTAsMCArMSwzMiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWItbWVzc2FnaW5nLmh0bWwjbWVzc2FnZXBvcnQKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvZGV2L3dlYi1tZXNzYWdpbmcuaHRtbCNtZXNzYWdlLXBvcnRzCitpbnRlcmZhY2UgTWVzc2FnZVBvcnQgLyogOiBFdmVudFRhcmdldCAqLyB7CisgIC8vIFtSYWlzZXNFeGNlcHRpb25dCisgIHZvaWQgcG9zdE1lc3NhZ2UoVVNWU3RyaW5nIG1lc3NhZ2UpOworICAvLyB2b2lkIHBvc3RNZXNzYWdlKFVTVlN0cmluZyBtZXNzYWdlLCBzZXF1ZW5jZTxVU1ZTdHJpbmc+IHRyYW5zZmVyKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBzZXF1ZW5jZTxvYmplY3Q+OiBiLzIxODUwMTc3NAorICAvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBzZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBvdmVybG9hZHMgd2l0aCBkaWN0aW9uYXJ5IHBhcmFtZXRlcjogYi8yMTg1MDY3MzAKKyAgLy8gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgU3RydWN0dXJlZFNlcmlhbGl6ZU9wdGlvbnMKKyAgLy8gb3B0aW9ucyk7CisgIHZvaWQgc3RhcnQoKTsKKyAgdm9pZCBjbG9zZSgpOworCisgIC8vIGV2ZW50IGhhbmRsZXJzCisgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25tZXNzYWdlOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZWVycm9yOworICB9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5jYyBiL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlYzE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuY2MKQEAgLTAsMCArMSw3NiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5oIgorCisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29iYWx0L2RvbS9kb21fZXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb24uaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworTmF2aWdhdGlvblByZWxvYWRNYW5hZ2VyOjpOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXIoCisgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uLAorICAgIHNjcmlwdDo6U2NyaXB0VmFsdWVGYWN0b3J5KiBzY3JpcHRfdmFsdWVfZmFjdG9yeSkKKyAgICA6IHNjcmlwdF92YWx1ZV9mYWN0b3J5XyhzY3JpcHRfdmFsdWVfZmFjdG9yeSksCisgICAgICByZWdpc3RyYXRpb25fKHJlZ2lzdHJhdGlvbikge30KKworc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlPHZvaWQ+PiBOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXI6OkVuYWJsZSgpIHsKKyAgcmV0dXJuIFNldEVuYWJsZWQodHJ1ZSk7Cit9CisKK3NjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gTmF2aWdhdGlvblByZWxvYWRNYW5hZ2VyOjpEaXNhYmxlKCkgeworICByZXR1cm4gU2V0RW5hYmxlZChmYWxzZSk7Cit9CisKK3NjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gTmF2aWdhdGlvblByZWxvYWRNYW5hZ2VyOjpTZXRIZWFkZXJWYWx1ZSgKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiB2YWx1ZSkgeworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IHByb21pc2UgPQorICAgICAgc2NyaXB0X3ZhbHVlX2ZhY3RvcnlfLT5DcmVhdGVCYXNpY1Byb21pc2U8dm9pZD4oKTsKKworICBpZiAocmVnaXN0cmF0aW9uXy0+YWN0aXZlKCkgPT0gbnVsbHB0cikgeworICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtJbnZhbGlkU3RhdGVFcnIpKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKKyAgfQorCisgIHJlZ2lzdHJhdGlvbl8tPlNldE5hdmlnYXRpb25QcmVsb2FkSGVhZGVyKCk7CisgIHByb21pc2UtPlJlc29sdmUoKTsKKyAgcmV0dXJuIHByb21pc2U7Cit9CisKK3NjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gTmF2aWdhdGlvblByZWxvYWRNYW5hZ2VyOjpTZXRFbmFibGVkKAorICAgIGJvb2wgZW5hYmxlKSB7CisgIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gcHJvbWlzZSA9CisgICAgICBzY3JpcHRfdmFsdWVfZmFjdG9yeV8tPkNyZWF0ZUJhc2ljUHJvbWlzZTx2b2lkPigpOworICBpZiAocmVnaXN0cmF0aW9uXy0+YWN0aXZlKCkgPT0gbnVsbHB0cikgeworICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtJbnZhbGlkU3RhdGVFcnIpKTsKKyAgICByZXR1cm4gcHJvbWlzZTsKKyAgfQorICByZWdpc3RyYXRpb25fLT5FbmFibGVOYXZpZ2F0aW9uUHJlbG9hZChlbmFibGUpOworICBwcm9taXNlLT5SZXNvbHZlKCk7CisgIHJldHVybiBwcm9taXNlOworfQorCitzY3JpcHQ6OkhhbmRsZTxOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXI6Ok5hdmlnYXRpb25QcmVsb2FkU3RhdGVQcm9taXNlPgorTmF2aWdhdGlvblByZWxvYWRNYW5hZ2VyOjpHZXRTdGF0ZSgpIHsKKyAgLy8gVG9kbzogSW1wbGVtZW50IGdldFN0YXRlIGxvZ2ljCisgIHNjcmlwdDo6SGFuZGxlPE5hdmlnYXRpb25QcmVsb2FkU3RhdGVQcm9taXNlPiBwcm9taXNlID0KKyAgICAgIHNjcmlwdF92YWx1ZV9mYWN0b3J5Xy0+Q3JlYXRlSW50ZXJmYWNlUHJvbWlzZTxOYXZpZ2F0aW9uUHJlbG9hZFN0YXRlPigpOworICByZXR1cm4gcHJvbWlzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5oIGIvY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzIyNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL25hdmlnYXRpb25fcHJlbG9hZF9tYW5hZ2VyLmgKQEAgLTAsMCArMSw1OCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfTkFWSUdBVElPTl9QUkVMT0FEX01BTkFHRVJfSF8KKyNkZWZpbmUgQ09CQUxUX1dPUktFUl9OQVZJR0FUSU9OX1BSRUxPQURfTUFOQUdFUl9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZXhjZXB0aW9uX3N0YXRlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9wcm9taXNlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9zY3JpcHRfdmFsdWUuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZV9mYWN0b3J5LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC93cmFwcGFibGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL25hdmlnYXRpb25fcHJlbG9hZF9zdGF0ZS5oIgorCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKK2NsYXNzIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb247CisKK2NsYXNzIE5hdmlnYXRpb25QcmVsb2FkTWFuYWdlciBmaW5hbCA6IHB1YmxpYyBzY3JpcHQ6OldyYXBwYWJsZSB7CisgcHVibGljOgorICB1c2luZyBOYXZpZ2F0aW9uUHJlbG9hZFN0YXRlUHJvbWlzZSA9CisgICAgICBzY3JpcHQ6OlByb21pc2U8c2NvcGVkX3JlZnB0cjxzY3JpcHQ6OldyYXBwYWJsZT4+OworICBOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXIoU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiogcmVnaXN0cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0OjpTY3JpcHRWYWx1ZUZhY3RvcnkqIHNjcmlwdF92YWx1ZV9mYWN0b3J5KTsKKworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IEVuYWJsZSgpOworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IERpc2FibGUoKTsKKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlPHZvaWQ+PiBTZXRIZWFkZXJWYWx1ZSgKKyAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKTsKKyAgc2NyaXB0OjpIYW5kbGU8TmF2aWdhdGlvblByZWxvYWRTdGF0ZVByb21pc2U+IEdldFN0YXRlKCk7CisKKyAgREVGSU5FX1dSQVBQQUJMRV9UWVBFKE5hdmlnYXRpb25QcmVsb2FkTWFuYWdlcik7CisKKyBwcml2YXRlOgorICBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKiByZWdpc3RyYXRpb25fOworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IFNldEVuYWJsZWQoYm9vbCBlbmFibGUpOworICBzY3JpcHQ6OlNjcmlwdFZhbHVlRmFjdG9yeSogc2NyaXB0X3ZhbHVlX2ZhY3RvcnlfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XT1JLRVJfTkFWSUdBVElPTl9QUkVMT0FEX01BTkFHRVJfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuaWRsIGIvY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfbWFuYWdlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwNTMwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuaWRsCkBAIC0wLDAgKzEsMjIgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI25hdmlnYXRpb24tcHJlbG9hZC1tYW5hZ2VyCisKK1tFeHBvc2VkID0gKFdpbmRvdywgU2VydmljZVdvcmtlcildIGludGVyZmFjZSBOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXIgeworICBQcm9taXNlPHZvaWQ+IGVuYWJsZSgpOworICBQcm9taXNlPHZvaWQ+IGRpc2FibGUoKTsKKyAgUHJvbWlzZTx2b2lkPiBzZXRIZWFkZXJWYWx1ZShCeXRlU3RyaW5nIHZhbHVlKTsKKyAgUHJvbWlzZTxOYXZpZ2F0aW9uUHJlbG9hZFN0YXRlPiBnZXRTdGF0ZSgpOworfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX3N0YXRlLmlkbCBiL2NvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX3N0YXRlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRmMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9uYXZpZ2F0aW9uX3ByZWxvYWRfc3RhdGUuaWRsCkBAIC0wLDAgKzEsMTkgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI25hdmlnYXRpb24tcHJlbG9hZC1tYW5hZ2VyCitkaWN0aW9uYXJ5IE5hdmlnYXRpb25QcmVsb2FkU3RhdGUgeworICBib29sZWFuIGVuYWJsZWQgPSBmYWxzZTsKKyAgQnl0ZVN0cmluZyBoZWFkZXJWYWx1ZTsKK307CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3JlZ2lzdHJhdGlvbl9vcHRpb25zLmlkbCBiL2NvYmFsdC93b3JrZXIvcmVnaXN0cmF0aW9uX29wdGlvbnMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzNiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3JlZ2lzdHJhdGlvbl9vcHRpb25zLmlkbApAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkaWN0ZGVmLXJlZ2lzdHJhdGlvbm9wdGlvbnMKK2RpY3Rpb25hcnkgUmVnaXN0cmF0aW9uT3B0aW9ucyB7CisgICAgVVNWU3RyaW5nIHNjb3BlOworICAgIFdvcmtlclR5cGUgdHlwZSA9ICJjbGFzc2ljIjsKKyAgICBTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUgdXBkYXRlVmlhQ2FjaGUgPSAiaW1wb3J0cyI7Cit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlci5jYyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxZDYwYQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuY2MKQEAgLTAsMCArMSwyOSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlci5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfb2JqZWN0LmgiCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworU2VydmljZVdvcmtlcjo6U2VydmljZVdvcmtlcihzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJPYmplY3QqIHdvcmtlcikKKyAgICA6IGRvbTo6RXZlbnRUYXJnZXQoc2V0dGluZ3MpLCB3b3JrZXJfKHdvcmtlciksIHN0YXRlXyh3b3JrZXItPnN0YXRlKCkpIHt9CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuaCBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODk2YzczCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV09SS0VSX1NFUlZJQ0VfV09SS0VSX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0LmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXRfbGlzdGVuZXJfaW5mby5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvYWJzdHJhY3Rfd29ya2VyLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9vYmplY3QuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3N0YXRlLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIFRoZSBTZXJ2aWNlV29ya2VyIGludGVyZmFjZSByZXByZXNlbnRzIGEgc2VydmljZSB3b3JrZXIgd2l0aGluIGEgc2VydmljZQorLy8gd29ya2VyIGNsaWVudCByZWFsbS4KKy8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3NlcnZpY2V3b3JrZXItaW50ZXJmYWNlCitjbGFzcyBTZXJ2aWNlV29ya2VyIDogcHVibGljIEFic3RyYWN0V29ya2VyLCBwdWJsaWMgZG9tOjpFdmVudFRhcmdldCB7CisgcHVibGljOgorICBTZXJ2aWNlV29ya2VyKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MsCisgICAgICAgICAgICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VyT2JqZWN0KiB3b3JrZXIpOworCisgIC8vIFRoZSBzY3JpcHRVUkwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlCisgIC8vIHNlcnZpY2Ugd29ya2VyJ3Mgc2VyaWFsaXplZCBzY3JpcHQgdXJsLgorICBzdGQ6OnN0cmluZyBzY3JpcHRfdXJsKCkgY29uc3QgeyByZXR1cm4gc2NyaXB0X3VybF87IH0KKyAgU2VydmljZVdvcmtlclN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGVfOyB9CisKKyAgY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKiBvbnN0YXRlY2hhbmdlKCkgY29uc3QgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6c3RhdGVjaGFuZ2UoKSk7CisgIH0KKyAgdm9pZCBzZXRfb25zdGF0ZWNoYW5nZShjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUmIGV2ZW50X2xpc3RlbmVyKSB7CisgICAgU2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OnN0YXRlY2hhbmdlKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorCisgIC8vIFdlYiBBUEk6IEFic3RyYWN0IFdvcmtlcgorICAvLworICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9uZXJyb3IoKSBjb25zdCBvdmVycmlkZSB7CisgICAgcmV0dXJuIEdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjplcnJvcigpKTsKKyAgfQorICB2b2lkIHNldF9vbmVycm9yKGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYgZXZlbnRfbGlzdGVuZXIpIG92ZXJyaWRlIHsKKyAgICBTZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6ZXJyb3IoKSwgZXZlbnRfbGlzdGVuZXIpOworICB9CisKKyAgREVGSU5FX1dSQVBQQUJMRV9UWVBFKFNlcnZpY2VXb3JrZXIpOworCisgcHJpdmF0ZToKKyAgflNlcnZpY2VXb3JrZXIoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTZXJ2aWNlV29ya2VyKTsKKworICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJPYmplY3QqIHdvcmtlcl87CisKKyAgY29uc3Qgc3RkOjpzdHJpbmcgc2NyaXB0X3VybF87CisgIFNlcnZpY2VXb3JrZXJTdGF0ZSBzdGF0ZV87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9TRVJWSUNFX1dPUktFUl9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlci5pZGwgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWI3M2E0Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlci5pZGwKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc2VydmljZXdvcmtlci1pbnRlcmZhY2UKKworW0V4cG9zZWQgPSAoV2luZG93LCBTZXJ2aWNlV29ya2VyKV0gaW50ZXJmYWNlIFNlcnZpY2VXb3JrZXIgOiBFdmVudFRhcmdldCB7CisKKyAgLy8gVG9kbzogSW1wbGVtZW50IHBvc3RNZXNzYWdlIGIvMjE5OTg2NDQyCisgIC8vIHZvaWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIHNlcXVlbmNlPG9iamVjdD4gdHJhbnNmZXIpOworICAvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBvcHRpb25hbCBQb3N0TWVzc2FnZU9wdGlvbnMgb3B0aW9ucyA9IHt9KTsKKworICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIHNjcmlwdFVSTDsKKyAgcmVhZG9ubHkgYXR0cmlidXRlIFNlcnZpY2VXb3JrZXJTdGF0ZSBzdGF0ZTsKKworICAvLyBldmVudAorICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uc3RhdGVjaGFuZ2U7Cit9OworCitTZXJ2aWNlV29ya2VyIGltcGxlbWVudHMgQWJzdHJhY3RXb3JrZXI7CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5jYyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmNjCmluZGV4IDdiNDdiNDYuLjIyZmU3NmYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmNjCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmNjCkBAIC0xNCwxOSArMTQsMTk5IEBACiAKICNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5oIgogCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJiYXNlL29wdGlvbmFsLmgiCisjaW5jbHVkZSAiYmFzZS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX3NldHRpbmdzLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9wcm9taXNlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvcmVnaXN0cmF0aW9uX29wdGlvbnMuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3VwZGF0ZV92aWFfY2FjaGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl90eXBlLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKwogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2Ugd29ya2VyIHsKIAogU2VydmljZVdvcmtlckNvbnRhaW5lcjo6U2VydmljZVdvcmtlckNvbnRhaW5lcigKLSAgICBzY3JpcHQ6OlNjcmlwdFZhbHVlRmFjdG9yeSogc2NyaXB0X3ZhbHVlX2ZhY3RvcnkpCi0gICAgOiBzY3JpcHRfdmFsdWVfZmFjdG9yeV8oc2NyaXB0X3ZhbHVlX2ZhY3RvcnkpIHt9CisgICAgc2NyaXB0OjpFbnZpcm9ubWVudFNldHRpbmdzKiBzZXR0aW5ncywKKyAgICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJKb2JzKiBzZXJ2aWNlX3dvcmtlcl9qb2JzKQorICAgIDogZG9tOjpFdmVudFRhcmdldChzZXR0aW5ncykge30KIAotc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlPHZvaWQ+PiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpSZWdpc3RlcigpIHsKLSAgTE9HKElORk8pIDw8ICJUaGUgc2VydmljZSB3b3JrZXIgaXMgcmVnaXN0ZXJlZCI7Ci0gIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gcHJvbWlzZSA9Ci0gICAgICBzY3JpcHRfdmFsdWVfZmFjdG9yeV8tPkNyZWF0ZUJhc2ljUHJvbWlzZTx2b2lkPigpOworLy8gVE9ETzogSW1wbGVtZW50IHRoZSBzZXJ2aWNlIHdvcmtlciByZWFkeSBhbGdvcml0aG0uIGIvMjE5OTcyOTY2CitzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2VXcmFwcGFibGU+IFNlcnZpY2VXb3JrZXJDb250YWluZXI6OnJlYWR5KCkgeworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jbmF2aWdhdG9yLXNlcnZpY2Utd29ya2VyLXJlYWR5CisgIC8vIDEuIElmIHRoaXMncyByZWFkeSBwcm9taXNlIGlzIG51bGwsIHRoZW4gc2V0IHRoaXMncyByZWFkeSBwcm9taXNlIHRvIGEgbmV3CisgIC8vIHByb21pc2UuCisgIC8vIDIuIExldCByZWFkeVByb21pc2UgYmUgdGhpcydzIHJlYWR5IHByb21pc2UuCisgIC8vIDMuIElmIHJlYWR5UHJvbWlzZSBpcyBwZW5kaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwcyBpbiBwYXJhbGxlbDoKKyAgLy8gICAgMS4gTGV0IHJlZ2lzdHJhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgTWF0Y2ggU2VydmljZSBXb3JrZXIKKyAgLy8gICAgUmVnaXN0cmF0aW9uIHdpdGggdGhpcydzIHNlcnZpY2Ugd29ya2VyIGNsaWVudCdzIGNyZWF0aW9uIFVSTC4KKyAgLy8gICAgMi4gSWYgcmVnaXN0cmF0aW9uIGlzIG5vdCBudWxsLCBhbmQgcmVnaXN0cmF0aW9u4oCZcyBhY3RpdmUgd29ya2VyIGlzIG5vdAorICAvLyAgICBudWxsLCBxdWV1ZSBhIHRhc2sgb24gcmVhZHlQcm9taXNl4oCZcyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QncworICAvLyAgICByZXNwb25zaWJsZSBldmVudCBsb29wLCB1c2luZyB0aGUgRE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZSwgdG8KKyAgLy8gICAgcmVzb2x2ZSByZWFkeVByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHNlcnZpY2Ugd29ya2VyCisgIC8vICAgIHJlZ2lzdHJhdGlvbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHJlZ2lzdHJhdGlvbiBpbiByZWFkeVByb21pc2XigJlzCisgIC8vICAgIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC4KKyAgLy8gNC4gUmV0dXJuIHJlYWR5UHJvbWlzZS4KKyAgYXV0byBwcm9taXNlID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KAorICAgICAgICAgIGVudmlyb25tZW50X3NldHRpbmdzKCkpCisgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAtPmdsb2JhbF9lbnZpcm9ubWVudCgpCisgICAgICAgICAgLT5zY3JpcHRfdmFsdWVfZmFjdG9yeSgpCisgICAgICAgICAgLT5DcmVhdGVJbnRlcmZhY2VQcm9taXNlPHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4+KCk7CiAgIHJldHVybiBwcm9taXNlOwogfQogCitzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2VXcmFwcGFibGU+IFNlcnZpY2VXb3JrZXJDb250YWluZXI6OlJlZ2lzdGVyKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIHsKKyAgUmVnaXN0cmF0aW9uT3B0aW9ucyBvcHRpb25zOworICByZXR1cm4gU2VydmljZVdvcmtlckNvbnRhaW5lcjo6UmVnaXN0ZXIodXJsLCBvcHRpb25zKTsKK30KKworc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlV3JhcHBhYmxlPiBTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpSZWdpc3RlcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25zdCBSZWdpc3RyYXRpb25PcHRpb25zJiBvcHRpb25zKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckNvbnRhaW5lcjo6UmVnaXN0ZXIoKSIpOworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jbmF2aWdhdG9yLXNlcnZpY2Utd29ya2VyLXJlZ2lzdGVyCisgIC8vIDEuIExldCBwIGJlIGEgcHJvbWlzZS4KKyAgc2NyaXB0OjpIYW5kbGVQcm9taXNlV3JhcHBhYmxlIHByb21pc2UgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKKyAgICAgICAgICAtPmNvbnRleHQoKQorICAgICAgICAgIC0+Z2xvYmFsX2Vudmlyb25tZW50KCkKKyAgICAgICAgICAtPnNjcmlwdF92YWx1ZV9mYWN0b3J5KCkKKyAgICAgICAgICAtPkNyZWF0ZUludGVyZmFjZVByb21pc2U8c2NvcGVkX3JlZnB0cjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPj4oKTsKKyAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6VmFsdWVQcm9taXNlV3JhcHBhYmxlOjpSZWZlcmVuY2U+IHByb21pc2VfcmVmZXJlbmNlKAorICAgICAgbmV3IHNjcmlwdDo6VmFsdWVQcm9taXNlV3JhcHBhYmxlOjpSZWZlcmVuY2UodGhpcywgcHJvbWlzZSkpOworCisgIC8vIDIuIExldCBjbGllbnQgYmUgdGhpcydzIHNlcnZpY2Ugd29ya2VyIGNsaWVudC4KKyAgd2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKiBjbGllbnQgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CisgIC8vIDMuIExldCBzY3JpcHRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHNjcmlwdFVSTCB3aXRoIHRoaXMncworICAvLyByZWxldmFudCBzZXR0aW5ncyBvYmplY3TigJlzIEFQSSBiYXNlIFVSTC4KKyAgY29uc3QgR1VSTCYgYmFzZV91cmwgPSBlbnZpcm9ubWVudF9zZXR0aW5ncygpLT5iYXNlX3VybCgpOworICBHVVJMIHNjcmlwdF91cmwgPSBiYXNlX3VybC5SZXNvbHZlKHVybCk7CisgIC8vIDQuIExldCBzY29wZVVSTCBiZSBudWxsLgorICBiYXNlOjpPcHRpb25hbDxHVVJMPiBzY29wZV91cmw7CisgIC8vIDUuIElmIG9wdGlvbnNbInNjb3BlIl0gZXhpc3RzLCBzZXQgc2NvcGVVUkwgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nCisgIC8vICAgIG9wdGlvbnNbInNjb3BlIl0gd2l0aCB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN04oCZcyBBUEkgYmFzZSBVUkwuCisgIGlmIChvcHRpb25zLmhhc19zY29wZSgpKSB7CisgICAgc2NvcGVfdXJsID0gYmFzZV91cmwuUmVzb2x2ZShvcHRpb25zLnNjb3BlKCkpOworICB9CisgIC8vIDYuIEludm9rZSBTdGFydCBSZWdpc3RlciB3aXRoIHNjb3BlVVJMLCBzY3JpcHRVUkwsIHAsIGNsaWVudCwgY2xpZW504oCZcworICAvLyAgICBjcmVhdGlvbiBVUkwsIG9wdGlvbnNbInR5cGUiXSwgYW5kIG9wdGlvbnNbInVwZGF0ZVZpYUNhY2hlIl0uCisgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KGVudmlyb25tZW50X3NldHRpbmdzKCkpCisgICAgICAtPmNvbnRleHQoKQorICAgICAgLT5tZXNzYWdlX2xvb3AoKQorICAgICAgLT50YXNrX3J1bm5lcigpCisgICAgICAtPlBvc3RUYXNrKAorICAgICAgICAgIEZST01fSEVSRSwKKyAgICAgICAgICBiYXNlOjpCaW5kT25jZSgKKyAgICAgICAgICAgICAgJlNlcnZpY2VXb3JrZXJKb2JzOjpTdGFydFJlZ2lzdGVyLAorICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PGRvbTo6RE9NU2V0dGluZ3MqPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5zZXJ2aWNlX3dvcmtlcl9qb2JzKCkpLAorICAgICAgICAgICAgICBzY29wZV91cmwsIHNjcmlwdF91cmwsIHN0ZDo6bW92ZShwcm9taXNlX3JlZmVyZW5jZSksIGNsaWVudCwKKyAgICAgICAgICAgICAgb3B0aW9ucy50eXBlKCksIG9wdGlvbnMudXBkYXRlX3ZpYV9jYWNoZSgpKSk7CisgIC8vIDcuIFJldHVybiBwLgorICByZXR1cm4gcHJvbWlzZTsKK30KKworc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlV3JhcHBhYmxlPgorU2VydmljZVdvcmtlckNvbnRhaW5lcjo6R2V0UmVnaXN0cmF0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiB1cmwpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndvcmtlciIsICJTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpHZXRSZWdpc3RyYXRpb24oKSIpOworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jbmF2aWdhdG9yLXNlcnZpY2Utd29ya2VyLWdldFJlZ2lzdHJhdGlvbgorICAvLyAxLiBMZXQgY2xpZW50IGJlIHRoaXMncyBzZXJ2aWNlIHdvcmtlciBjbGllbnQuCisgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogY2xpZW50ID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KAorICAgICAgICAgIGVudmlyb25tZW50X3NldHRpbmdzKCkpOworICAvLyAyLiBMZXQgY2xpZW50VVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBjbGllbnRVUkwgd2l0aCB0aGlzJ3MgcmVsZXZhbnQKKyAgLy8gICAgc2V0dGluZ3Mgb2JqZWN04oCZcyBBUEkgYmFzZSBVUkwuCisgIGNvbnN0IEdVUkwmIGJhc2VfdXJsID0gZW52aXJvbm1lbnRfc2V0dGluZ3MoKS0+YmFzZV91cmwoKTsKKyAgR1VSTCBjbGllbnRfdXJsID0gYmFzZV91cmwuUmVzb2x2ZSh1cmwpOworCisgIC8vIDMuIElmIGNsaWVudFVSTCBpcyBmYWlsdXJlLCByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYSBUeXBlRXJyb3IuCisgIGF1dG8gcHJvbWlzZSA9CisgICAgICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDx3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqPigKKyAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5ncygpKQorICAgICAgICAgIC0+Y29udGV4dCgpCisgICAgICAgICAgLT5nbG9iYWxfZW52aXJvbm1lbnQoKQorICAgICAgICAgIC0+c2NyaXB0X3ZhbHVlX2ZhY3RvcnkoKQorICAgICAgICAgIC0+Q3JlYXRlSW50ZXJmYWNlUHJvbWlzZTxzY29wZWRfcmVmcHRyPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+PigpOworICBpZiAoY2xpZW50X3VybC5pc19lbXB0eSgpKSB7CisgICAgcHJvbWlzZS0+UmVqZWN0KHNjcmlwdDo6a1R5cGVFcnJvcik7CisgICAgcmV0dXJuIHByb21pc2U7CisgIH0KKworICAvLyA0LiBTZXQgY2xpZW50VVJM4oCZcyBmcmFnbWVudCB0byBudWxsLgorICB1cmw6OlJlcGxhY2VtZW50czxjaGFyPiByZXBsYWNlbWVudHM7CisgIHJlcGxhY2VtZW50cy5DbGVhclJlZigpOworICBjbGllbnRfdXJsID0gY2xpZW50X3VybC5SZXBsYWNlQ29tcG9uZW50cyhyZXBsYWNlbWVudHMpOworICBEQ0hFQ0soIWNsaWVudF91cmwuaGFzX3JlZigpIHx8IGNsaWVudF91cmwucmVmKCkuZW1wdHkoKSk7CisKKyAgLy8gNS4gSWYgdGhlIG9yaWdpbiBvZiBjbGllbnRVUkwgaXMgbm90IGNsaWVudOKAmXMgb3JpZ2luLCByZXR1cm4gYSBwcm9taXNlCisgIC8vICAgIHJlamVjdGVkIHdpdGggYSAiU2VjdXJpdHlFcnJvciIgRE9NRXhjZXB0aW9uLgorICBpZiAoY2xpZW50X3VybC5HZXRPcmlnaW4oKSAhPSBiYXNlX3VybC5HZXRPcmlnaW4oKSkgeworICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZG9tOjpET01FeGNlcHRpb246OmtTZWN1cml0eUVycikpOworICAgIHJldHVybiBwcm9taXNlOworICB9CisKKyAgLy8gNi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS4KKyAgLy8gNy4gUnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHMgaW4gcGFyYWxsZWw6CisgIC8vICAgIDEuIExldCByZWdpc3RyYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIE1hdGNoIFNlcnZpY2UgV29ya2VyCisgIC8vICAgICAgIFJlZ2lzdHJhdGlvbiBhbGdvcml0aG0gd2l0aCBjbGllbnRVUkwgYXMgaXRzIGFyZ3VtZW50LgorICAvLyBUT0RPIGhhbmRsZSBwYXJhbGxlbGlzbSwgYW5kIGFkZCBjYWxsYmFjayB0byByZXNvbHZlIHRoZSBwcm9taXNlLgorICBiYXNlOjpwb2x5bW9ycGhpY19kb3duY2FzdDxkb206OkRPTVNldHRpbmdzKj4oZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKKyAgICAgIC0+c2VydmljZV93b3JrZXJfam9icygpCisgICAgICAtPk1hdGNoU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbihjbGllbnRfdXJsKTsKKyAgLy8gICAgMi4gSWYgcmVnaXN0cmF0aW9uIGlzIG51bGwsIHJlc29sdmUgcHJvbWlzZSB3aXRoIHVuZGVmaW5lZCBhbmQgYWJvcnQKKyAgLy8gICAgICAgdGhlc2Ugc3RlcHMuCisgIC8vICAgIDMuIFJlc29sdmUgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgc2VydmljZSB3b3JrZXIKKyAgLy8gICAgICAgcmVnaXN0cmF0aW9uIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgcmVnaXN0cmF0aW9uIGluIHByb21pc2XigJlzCisgIC8vICAgICAgIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC4KKyAgLy8gOC4gUmV0dXJuIHByb21pc2UuCisgIHJldHVybiBwcm9taXNlOworfQorCitzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2VTZXF1ZW5jZVdyYXBwYWJsZT4KK1NlcnZpY2VXb3JrZXJDb250YWluZXI6OkdldFJlZ2lzdHJhdGlvbnMoKSB7CisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNuYXZpZ2F0b3Itc2VydmljZS13b3JrZXItZ2V0UmVnaXN0cmF0aW9ucworICAvLyAxLiBMZXQgY2xpZW50IGJlIHRoaXMncyBzZXJ2aWNlIHdvcmtlciBjbGllbnQuCisgIC8vIDIuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2UuCisgIC8vIDMuIFJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGluIHBhcmFsbGVsOgorICAvLyAgICAxLiBMZXQgcmVnaXN0cmF0aW9ucyBiZSBhIG5ldyBsaXN0LgorICAvLyAgICAyLiBGb3IgZWFjaCBzY29wZSDihpIgcmVnaXN0cmF0aW9uIG9mIHNjb3BlIHRvIHJlZ2lzdHJhdGlvbiBtYXA6CisgIC8vICAgICAgIDEuIElmIHRoZSBvcmlnaW4gb2YgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHNjb3BlIGlzIHRoZSBzYW1lIGFzCisgIC8vICAgICAgICAgIGNsaWVudOKAmXMgb3JpZ2luLCB0aGVuIGFwcGVuZCByZWdpc3RyYXRpb24gdG8gcmVnaXN0cmF0aW9ucy4KKyAgLy8gICAgMy4gUXVldWUgYSB0YXNrIG9uIHByb21pc2XigJlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIHJlc3BvbnNpYmxlCisgIC8vICAgICAgIGV2ZW50IGxvb3AsIHVzaW5nIHRoZSBET00gbWFuaXB1bGF0aW9uIHRhc2sgc291cmNlLCB0byBydW4gdGhlCisgIC8vICAgICAgIGZvbGxvd2luZyBzdGVwczoKKyAgLy8gICAgICAgMS4gTGV0IHJlZ2lzdHJhdGlvbk9iamVjdHMgYmUgYSBuZXcgbGlzdC4KKyAgLy8gICAgICAgMi4gRm9yIGVhY2ggcmVnaXN0cmF0aW9uIG9mIHJlZ2lzdHJhdGlvbnM6CisgIC8vICAgICAgICAgIDEuIExldCByZWdpc3RyYXRpb25PYmogYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzZXJ2aWNlIHdvcmtlcgorICAvLyAgICAgICAgICAgICByZWdpc3RyYXRpb24gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyByZWdpc3RyYXRpb24gaW4gcHJvbWlzZeKAmXMKKyAgLy8gICAgICAgICAgICAgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LgorICAvLyAgICAgICAgICAyLiBBcHBlbmQgcmVnaXN0cmF0aW9uT2JqIHRvIHJlZ2lzdHJhdGlvbk9iamVjdHMuCisgIC8vICAgICAgIDMuIFJlc29sdmUgcHJvbWlzZSB3aXRoIGEgbmV3IGZyb3plbiBhcnJheSBvZiByZWdpc3RyYXRpb25PYmplY3RzIGluCisgIC8vICAgICAgICAgIHByb21pc2XigJlzIHJlbGV2YW50IFJlYWxtLgorICAvLyA0LiBSZXR1cm4gcHJvbWlzZS4KKyAgYXV0byBwcm9taXNlID0gYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF9zZXR0aW5ncygpKQorICAgICAgICAgICAgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgIC0+Z2xvYmFsX2Vudmlyb25tZW50KCkKKyAgICAgICAgICAgICAgICAgICAgIC0+c2NyaXB0X3ZhbHVlX2ZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICAgLT5DcmVhdGVCYXNpY1Byb21pc2U8c2NyaXB0OjpTZXF1ZW5jZVdyYXBwYWJsZT4oKTsKKworICByZXR1cm4gcHJvbWlzZTsKK30KKwordm9pZCBTZXJ2aWNlV29ya2VyQ29udGFpbmVyOjpTdGFydE1lc3NhZ2VzKCkge30KKwogfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgogfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9jb250YWluZXIuaCBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmgKaW5kZXggZWQ1MjNmOC4uNTA5MmE5NiAxMDA2NDQKLS0tIGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9jb250YWluZXIuaAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5oCkBAIC0xNiwyNiArMTYsNzAgQEAKICNkZWZpbmUgQ09CQUxUX1dPUktFUl9TRVJWSUNFX1dPUktFUl9DT05UQUlORVJfSF8KIAogI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CiAKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZXZlbnRfdGFyZ2V0X2xpc3RlbmVyX2luZm8uaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3Byb21pc2UuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZS5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3ZhbHVlX2ZhY3RvcnkuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC93cmFwcGFibGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3JlZ2lzdHJhdGlvbl9vcHRpb25zLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9qb2JzLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb24uaCIKIAogbmFtZXNwYWNlIGNvYmFsdCB7CiBuYW1lc3BhY2Ugd29ya2VyIHsKIAotY2xhc3MgU2VydmljZVdvcmtlckNvbnRhaW5lciA6IHB1YmxpYyBzY3JpcHQ6OldyYXBwYWJsZSB7CisvLyBUaGUgU2VydmljZVdvcmtlckNvbnRhaW5lciBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIHRvIHJlZ2lzdGVyIGFuZAorLy8gYWNjZXNzIHNlcnZpY2Ugd29ya2VycyBmcm9tIGEgc2VydmljZSB3b3JrZXIgY2xpZW50IHJlYWxtLgorLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc2VydmljZXdvcmtlcmNvbnRhaW5lci1pbnRlcmZhY2UKK2NsYXNzIFNlcnZpY2VXb3JrZXJDb250YWluZXIgOiBwdWJsaWMgZG9tOjpFdmVudFRhcmdldCB7CiAgcHVibGljOgotICBleHBsaWNpdCBTZXJ2aWNlV29ya2VyQ29udGFpbmVyKAotICAgICAgc2NyaXB0OjpTY3JpcHRWYWx1ZUZhY3RvcnkqIHNjcmlwdF92YWx1ZV9mYWN0b3J5KTsKKyAgU2VydmljZVdvcmtlckNvbnRhaW5lcihzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcjo6U2VydmljZVdvcmtlckpvYnMqIHNlcnZpY2Vfd29ya2VyX2pvYnMpOwogCi0gIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZTx2b2lkPj4gUmVnaXN0ZXIoKTsKKyAgc2NvcGVkX3JlZnB0cjxTZXJ2aWNlV29ya2VyPiBjb250cm9sbGVyKCkgeyByZXR1cm4gY29udHJvbGxlcl87IH0KKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlV3JhcHBhYmxlPiByZWFkeSgpOworCisgIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZVdyYXBwYWJsZT4gUmVnaXN0ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7CisgIHNjcmlwdDo6SGFuZGxlPHNjcmlwdDo6UHJvbWlzZVdyYXBwYWJsZT4gUmVnaXN0ZXIoCisgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBjb25zdCBSZWdpc3RyYXRpb25PcHRpb25zJiBvcHRpb25zKTsKKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlV3JhcHBhYmxlPiBHZXRSZWdpc3RyYXRpb24oCisgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXJsKTsKKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlU2VxdWVuY2VXcmFwcGFibGU+IEdldFJlZ2lzdHJhdGlvbnMoKTsKKworICB2b2lkIFN0YXJ0TWVzc2FnZXMoKTsKKworICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9uY29udHJvbGxlcmNoYW5nZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gR2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OmNvbnRyb2xsZXJjaGFuZ2UoKSk7CisgIH0KKyAgdm9pZCBzZXRfb25jb250cm9sbGVyY2hhbmdlKGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYgZXZlbnRfbGlzdGVuZXIpIHsKKyAgICBTZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6Y29udHJvbGxlcmNoYW5nZSgpLCBldmVudF9saXN0ZW5lcik7CisgIH0KKworICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9ubWVzc2FnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gR2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6Om1lc3NhZ2UoKSk7CisgIH0KKyAgdm9pZCBzZXRfb25tZXNzYWdlKGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYgZXZlbnRfbGlzdGVuZXIpIHsKKyAgICBTZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZSgpLCBldmVudF9saXN0ZW5lcik7CisgIH0KKworICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9ubWVzc2FnZWVycm9yKCkgY29uc3QgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZWVycm9yKCkpOworICB9CisgIHZvaWQgc2V0X29ubWVzc2FnZWVycm9yKGNvbnN0IEV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYgZXZlbnRfbGlzdGVuZXIpIHsKKyAgICBTZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6bWVzc2FnZWVycm9yKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQogCiAgIERFRklORV9XUkFQUEFCTEVfVFlQRShTZXJ2aWNlV29ya2VyQ29udGFpbmVyKTsKIAogIHByaXZhdGU6Ci0gIHNjcmlwdDo6U2NyaXB0VmFsdWVGYWN0b3J5KiBzY3JpcHRfdmFsdWVfZmFjdG9yeV87CisgIHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gY29udHJvbGxlcl87CisgIHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gcmVhZHlfOworCisgIH5TZXJ2aWNlV29ya2VyQ29udGFpbmVyKCkgb3ZlcnJpZGUgPSBkZWZhdWx0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9jb250YWluZXIuaWRsIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9jb250YWluZXIuaWRsCmluZGV4IDE3MGUyMjYuLjE3YTIyZDQgMTAwNjQ0Ci0tLSBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfY29udGFpbmVyLmlkbAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5pZGwKQEAgLTE0LDcgKzE0LDE5IEBACiAKIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNld29ya2VyY29udGFpbmVyLWludGVyZmFjZQogCi1bRXhwb3NlZD1XaW5kb3ddCi1pbnRlcmZhY2UgU2VydmljZVdvcmtlckNvbnRhaW5lciB7Ci0gICAgUHJvbWlzZTx2b2lkPiByZWdpc3RlcigpOworW0V4cG9zZWQgPSBXaW5kb3ddIGludGVyZmFjZSBTZXJ2aWNlV29ya2VyQ29udGFpbmVyIDogRXZlbnRUYXJnZXQgeworICByZWFkb25seSBhdHRyaWJ1dGUgU2VydmljZVdvcmtlciA/IGNvbnRyb2xsZXI7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQcm9taXNlPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+IHJlYWR5OworCisgIFByb21pc2U8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4gcmVnaXN0ZXIoCisgICAgICBVU1ZTdHJpbmcgdXJsLCBvcHRpb25hbCBSZWdpc3RyYXRpb25PcHRpb25zIG9wdGlvbnMpOworICBQcm9taXNlPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+IGdldFJlZ2lzdHJhdGlvbigKKyAgICAgIG9wdGlvbmFsIFVTVlN0cmluZyBkb2N1bWVudFVSTCA9ICIiKTsKKyAgUHJvbWlzZTxzZXF1ZW5jZTxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPj4gZ2V0UmVnaXN0cmF0aW9ucygpOworCisgIHZvaWQgc3RhcnRNZXNzYWdlcygpOworCisgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25jb250cm9sbGVyY2hhbmdlOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZTsKKyAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2VlcnJvcjsKIH07CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2pvYnMuY2MgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX2pvYnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5OGI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfam9icy5jYwpAQCAtMCwwICsxLDc3MiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9qb2JzLmgiCisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHF1ZXVlPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSAiYmFzZS9iaW5kLmgiCisjaW5jbHVkZSAiYmFzZS9tZXNzYWdlX2xvb3AvbWVzc2FnZV9sb29wLmgiCisjaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vbG9jay5oIgorI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2RvbV9leGNlcHRpb24uaCIKKyNpbmNsdWRlICJjb2JhbHQvbmV0d29yay9uZXR3b3JrX21vZHVsZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvcHJvbWlzZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3ZhbHVlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfdXBkYXRlX3ZpYV9jYWNoZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyX3R5cGUuaCIKKyNpbmNsdWRlICJuZXQvYmFzZS91cmxfdXRpbC5oIgorI2luY2x1ZGUgInVybC9ndXJsLmgiCisjaW5jbHVkZSAidXJsL29yaWdpbi5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCituYW1lc3BhY2UgeworYm9vbCBQYXRoQ29udGFpbnNFc2NhcGVkU2xhc2goY29uc3QgR1VSTCYgdXJsKSB7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOworICByZXR1cm4gKHBhdGguZmluZCgiJTJmIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwKKyAgICAgICAgICBwYXRoLmZpbmQoIiUyRiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zIHx8CisgICAgICAgICAgcGF0aC5maW5kKCIlNWMiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcyB8fAorICAgICAgICAgIHBhdGguZmluZCgiJTVDIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworfQorCitib29sIElzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjb25zdCBHVVJMJiB1cmwpIHsKKyAgLy8gQWxnb3JpdGhtIGZvciAncG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgb3JpZ2luJy4KKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXNlY3VyZS1jb250ZXh0cy8jcG90ZW50aWFsbHktdHJ1c3R3b3J0aHktb3JpZ2luCisKKyAgY29uc3QgdXJsOjpPcmlnaW4gb3JpZ2luKHVybDo6T3JpZ2luOjpDcmVhdGUodXJsKSk7CisgIC8vIDEuIElmIG9yaWdpbiBpcyBhbiBvcGFxdWUgb3JpZ2luLCByZXR1cm4gIk5vdCBUcnVzdHdvcnRoeSIuCisgIGlmIChvcmlnaW4udW5pcXVlKCkpIHJldHVybiBmYWxzZTsKKworICAvLyAyLiBBc3NlcnQ6IG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbi4KKyAgRENIRUNLKCFvcmlnaW4udW5pcXVlKCkpOworICBEQ0hFQ0sodXJsLmlzX3ZhbGlkKCkpOworCisgIC8vIDMuIElmIG9yaWdpbuKAmXMgc2NoZW1lIGlzIGVpdGhlciAiaHR0cHMiIG9yICJ3c3MiLCByZXR1cm4gIlBvdGVudGlhbGx5CisgIC8vIFRydXN0d29ydGh5Ii4KKyAgaWYgKHVybC5TY2hlbWVJc0NyeXB0b2dyYXBoaWMoKSkgcmV0dXJuIHRydWU7CisKKyAgLy8gNC4gSWYgb3JpZ2lu4oCZcyBob3N0IG1hdGNoZXMgb25lIG9mIHRoZSBDSURSIG5vdGF0aW9ucyAxMjcuMC4wLjAvOCBvcgorICAvLyA6OjEvMTI4IFtSRkM0NjMyXSwgcmV0dXJuICJQb3RlbnRpYWxseSBUcnVzdHdvcnRoeSIuCisgIGlmIChuZXQ6OklzTG9jYWxob3N0KHVybCkpIHJldHVybiB0cnVlOworCisgIC8vIDUuIElmIHRoZSB1c2VyIGFnZW50IGNvbmZvcm1zIHRvIHRoZSBuYW1lIHJlc29sdXRpb24gcnVsZXMgaW4KKyAgLy8gW2xldC1sb2NhbGhvc3QtYmUtbG9jYWxob3N0XSBhbmQgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgLy8gICAgb3JpZ2lu4oCZcyBob3N0IGlzICJsb2NhbGhvc3QiIG9yICJsb2NhbGhvc3QuIgorICAvLyAgICBvcmlnaW7igJlzIGhvc3QgZW5kcyB3aXRoICIubG9jYWxob3N0IiBvciAiLmxvY2FsaG9zdC4iCisgIC8vIHRoZW4gcmV0dXJuICJQb3RlbnRpYWxseSBUcnVzdHdvcnRoeSIuCisgIC8vIENvdmVyZWQgYnkgaW1wbGVtZW50YXRpb24gb2Ygc3RlcCA0LgorCisgIC8vIDYuIElmIG9yaWdpbuKAmXMgc2NoZW1lIGlzICJmaWxlIiwgcmV0dXJuICJQb3RlbnRpYWxseSBUcnVzdHdvcnRoeSIuCisgIGlmICh1cmwuU2NoZW1lSXNGaWxlKCkpIHJldHVybiB0cnVlOworCisgIC8vIDcuIElmIG9yaWdpbuKAmXMgc2NoZW1lIGNvbXBvbmVudCBpcyBvbmUgd2hpY2ggdGhlIHVzZXIgYWdlbnQgY29uc2lkZXJzIHRvIGJlCisgIC8vIGF1dGhlbnRpY2F0ZWQsIHJldHVybiAiUG90ZW50aWFsbHkgVHJ1c3R3b3J0aHkiLgorICBpZiAodXJsLlNjaGVtZUlzKCJoNXZjYy1lbWJlZGRlZCIpKSByZXR1cm4gdHJ1ZTsKKworICAvLyA4LiBJZiBvcmlnaW4gaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIHRydXN0d29ydGh5IG9yaWdpbiwgcmV0dXJuCisgIC8vICJQb3RlbnRpYWxseSBUcnVzdHdvcnRoeSIuCisKKyAgLy8gOS4gUmV0dXJuICJOb3QgVHJ1c3R3b3J0aHkiLgorICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgVVJMIGV4Y2x1ZGluZyB0aGUgZnJhZ21lbnQuCitzdGQ6OnN0cmluZyBTZXJpYWxpemVFeGNsdWRpbmdGcmFnbWVudChjb25zdCBHVVJMJiB1cmwpIHsKKyAgdXJsOjpSZXBsYWNlbWVudHM8Y2hhcj4gcmVwbGFjZW1lbnRzOworICByZXBsYWNlbWVudHMuQ2xlYXJSZWYoKTsKKyAgR1VSTCBub19mcmFnbWVudF91cmwgPSB1cmwuUmVwbGFjZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKKyAgRENIRUNLKCFub19mcmFnbWVudF91cmwuaGFzX3JlZigpIHx8IG5vX2ZyYWdtZW50X3VybC5yZWYoKS5lbXB0eSgpKTsKKyAgRENIRUNLKCFub19mcmFnbWVudF91cmwuaXNfZW1wdHkoKSk7CisgIHJldHVybiBub19mcmFnbWVudF91cmwuc3BlYygpOworfQorfSAgLy8gbmFtZXNwYWNlCisKK1NlcnZpY2VXb3JrZXJKb2JzOjpTZXJ2aWNlV29ya2VySm9icyhuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wKQorICAgIDogbmV0d29ya19tb2R1bGVfKG5ldHdvcmtfbW9kdWxlKSwgbWVzc2FnZV9sb29wXyhtZXNzYWdlX2xvb3ApIHt9CisKK1NlcnZpY2VXb3JrZXJKb2JzOjp+U2VydmljZVdvcmtlckpvYnMoKSB7fQorCit2b2lkIFNlcnZpY2VXb3JrZXJKb2JzOjpTdGFydFJlZ2lzdGVyKAorICAgIGNvbnN0IGJhc2U6Ok9wdGlvbmFsPEdVUkw+JiBtYXliZV9zY29wZV91cmwsCisgICAgY29uc3QgR1VSTCYgc2NyaXB0X3VybF93aXRoX2ZyYWdtZW50LAorICAgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OlZhbHVlUHJvbWlzZVdyYXBwYWJsZTo6UmVmZXJlbmNlPiBwcm9taXNlX3JlZmVyZW5jZSwKKyAgICB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqIGNsaWVudCwgY29uc3QgV29ya2VyVHlwZSYgdHlwZSwKKyAgICBjb25zdCBTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUmIHVwZGF0ZV92aWFfY2FjaGUpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndvcmtlciIsICJTZXJ2aWNlV29ya2VySm9iczo6U3RhcnRSZWdpc3RlcigpIik7CisgIC8vIEFsZ29yaXRobSBmb3IgIlN0YXJ0IFJlZ2lzdGVyIjoKKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc3RhcnQtcmVnaXN0ZXItYWxnb3JpdGhtCisgIC8vIDEuIElmIHNjcmlwdFVSTCBpcyBmYWlsdXJlLCByZWplY3QgcHJvbWlzZSB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZQorICAvLyBzdGVwcy4KKyAgaWYgKHNjcmlwdF91cmxfd2l0aF9mcmFnbWVudC5pc19lbXB0eSgpKSB7CisgICAgcHJvbWlzZV9yZWZlcmVuY2UtPnZhbHVlKCkuUmVqZWN0KHNjcmlwdDo6a1R5cGVFcnJvcik7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gMi4gU2V0IHNjcmlwdFVSTOKAmXMgZnJhZ21lbnQgdG8gbnVsbC4KKyAgdXJsOjpSZXBsYWNlbWVudHM8Y2hhcj4gcmVwbGFjZW1lbnRzOworICByZXBsYWNlbWVudHMuQ2xlYXJSZWYoKTsKKyAgR1VSTCBzY3JpcHRfdXJsID0gc2NyaXB0X3VybF93aXRoX2ZyYWdtZW50LlJlcGxhY2VDb21wb25lbnRzKHJlcGxhY2VtZW50cyk7CisgIERDSEVDSyghc2NyaXB0X3VybC5oYXNfcmVmKCkgfHwgc2NyaXB0X3VybC5yZWYoKS5lbXB0eSgpKTsKKyAgRENIRUNLKCFzY3JpcHRfdXJsLmlzX2VtcHR5KCkpOworCisgIC8vIDMuIElmIHNjcmlwdFVSTOKAmXMgc2NoZW1lIGlzIG5vdCBvbmUgb2YgImh0dHAiIGFuZCAiaHR0cHMiLCByZWplY3QgcHJvbWlzZQorICAvLyB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgaWYgKCFzY3JpcHRfdXJsLlNjaGVtZUlzSFRUUE9ySFRUUFMoKSkgeworICAgIHByb21pc2VfcmVmZXJlbmNlLT52YWx1ZSgpLlJlamVjdChzY3JpcHQ6OmtUeXBlRXJyb3IpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIDQuIElmIGFueSBvZiB0aGUgc3RyaW5ncyBpbiBzY3JpcHRVUkzigJlzIHBhdGggY29udGFpbnMgZWl0aGVyIEFTQ0lJCisgIC8vIGNhc2UtaW5zZW5zaXRpdmUgIiUyZiIgb3IgQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSAiJTVjIiwgcmVqZWN0IHByb21pc2Ugd2l0aAorICAvLyBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgIGlmIChQYXRoQ29udGFpbnNFc2NhcGVkU2xhc2goc2NyaXB0X3VybCkpIHsKKyAgICBwcm9taXNlX3JlZmVyZW5jZS0+dmFsdWUoKS5SZWplY3Qoc2NyaXB0OjprVHlwZUVycm9yKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyA1LiBJZiBzY29wZVVSTCBpcyBudWxsLCBzZXQgc2NvcGVVUkwgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBzdHJpbmcKKyAgLy8gIi4vIiB3aXRoIHNjcmlwdFVSTC4KKyAgR1VSTCBzY29wZV91cmwgPSBtYXliZV9zY29wZV91cmwudmFsdWVfb3Ioc2NyaXB0X3VybC5SZXNvbHZlKCIuLyIpKTsKKworICAvLyA2LiBJZiBzY29wZVVSTCBpcyBmYWlsdXJlLCByZWplY3QgcHJvbWlzZSB3aXRoIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZQorICAvLyBzdGVwcy4KKyAgaWYgKHNjb3BlX3VybC5pc19lbXB0eSgpKSB7CisgICAgcHJvbWlzZV9yZWZlcmVuY2UtPnZhbHVlKCkuUmVqZWN0KHNjcmlwdDo6a1R5cGVFcnJvcik7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gNy4gU2V0IHNjb3BlVVJM4oCZcyBmcmFnbWVudCB0byBudWxsLgorICBzY29wZV91cmwgPSBzY29wZV91cmwuUmVwbGFjZUNvbXBvbmVudHMocmVwbGFjZW1lbnRzKTsKKyAgRENIRUNLKCFzY29wZV91cmwuaGFzX3JlZigpIHx8IHNjb3BlX3VybC5yZWYoKS5lbXB0eSgpKTsKKyAgRENIRUNLKCFzY29wZV91cmwuaXNfZW1wdHkoKSk7CisKKyAgLy8gOC4gSWYgc2NvcGVVUkzigJlzIHNjaGVtZSBpcyBub3Qgb25lIG9mICJodHRwIiBhbmQgImh0dHBzIiwgcmVqZWN0IHByb21pc2UKKyAgLy8gd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgIGlmICghc2NvcGVfdXJsLlNjaGVtZUlzSFRUUE9ySFRUUFMoKSkgeworICAgIHByb21pc2VfcmVmZXJlbmNlLT52YWx1ZSgpLlJlamVjdChzY3JpcHQ6OmtUeXBlRXJyb3IpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIDkuIElmIGFueSBvZiB0aGUgc3RyaW5ncyBpbiBzY29wZVVSTOKAmXMgcGF0aCBjb250YWlucyBlaXRoZXIgQVNDSUkKKyAgLy8gY2FzZS1pbnNlbnNpdGl2ZSAiJTJmIiBvciBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlICIlNWMiLCByZWplY3QgcHJvbWlzZSB3aXRoCisgIC8vIGEgVHlwZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgaWYgKFBhdGhDb250YWluc0VzY2FwZWRTbGFzaChzY29wZV91cmwpKSB7CisgICAgcHJvbWlzZV9yZWZlcmVuY2UtPnZhbHVlKCkuUmVqZWN0KHNjcmlwdDo6a1R5cGVFcnJvcik7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gMTAuIExldCBzdG9yYWdlIGtleSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgb2J0YWluIGEgc3RvcmFnZSBrZXkgZ2l2ZW4KKyAgLy8gY2xpZW50LgorICB1cmw6Ok9yaWdpbiBzdG9yYWdlX2tleSA9IHVybDo6T3JpZ2luOjpDcmVhdGUoY2xpZW50LT5jcmVhdGlvbl91cmwoKSk7CisKKyAgLy8gMTEuIExldCBqb2IgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIENyZWF0ZSBKb2Igd2l0aCByZWdpc3Rlciwgc3RvcmFnZSBrZXksCisgIC8vIHNjb3BlVVJMLCBzY3JpcHRVUkwsIHByb21pc2UsIGFuZCBjbGllbnQuCisgIHN0ZDo6dW5pcXVlX3B0cjxKb2I+IGpvYiA9CisgICAgICBDcmVhdGVKb2Ioa1JlZ2lzdGVyLCBzdG9yYWdlX2tleSwgc2NvcGVfdXJsLCBzY3JpcHRfdXJsLAorICAgICAgICAgICAgICAgIEpvYlByb21pc2VUeXBlOjpDcmVhdGUoc3RkOjptb3ZlKHByb21pc2VfcmVmZXJlbmNlKSksIGNsaWVudCk7CisgIERDSEVDSyghcHJvbWlzZV9yZWZlcmVuY2UpOworCisgIC8vIDEyLiBTZXQgam9i4oCZcyB3b3JrZXIgdHlwZSB0byB3b3JrZXJUeXBlLgorICAvLyBDb2JhbHQgb25seSBzdXBwb3J0cyAnY2xhc3NpYycgd29ya2VyIHR5cGUuCisKKyAgLy8gMTMuIFNldCBqb2LigJlzIHVwZGF0ZSB2aWEgY2FjaGUgbW9kZSB0byB1cGRhdGVWaWFDYWNoZS4KKyAgam9iLT51cGRhdGVfdmlhX2NhY2hlID0gdXBkYXRlX3ZpYV9jYWNoZTsKKworICAvLyAxNC4gU2V0IGpvYuKAmXMgcmVmZXJyZXIgdG8gcmVmZXJyZXIuCisgIC8vIFRoaXMgaXMgdGhlIHNhbWUgdmFsdWUgYXMgc2V0IGluIENyZWF0ZUpvYigpLgorCisgIC8vIDE1LiBJbnZva2UgU2NoZWR1bGUgSm9iIHdpdGggam9iLgorICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCisgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJlNlcnZpY2VXb3JrZXJKb2JzOjpTY2hlZHVsZUpvYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBiYXNlOjpQYXNzZWQoJmpvYikpKTsKKyAgRENIRUNLKCFqb2IuZ2V0KCkpOworfQorCit2b2lkIFNlcnZpY2VXb3JrZXJKb2JzOjpNYXRjaFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24oY29uc3QgR1VSTCYgY2xpZW50X3VybCkgeworICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6d29ya2VyIiwKKyAgICAgICAgICAgICAgICJTZXJ2aWNlV29ya2VySm9iczo6TWF0Y2hTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uKCkiKTsKKyAgLy8gVE9ETyB0aGlzIG5lZWQgYSBjYWxsYmFjayB0byByZXR1cm4gdGhlIG1hdGNoaW5nIHJlZ2lzdHJhdGlvbi4KKyAgTk9USU1QTEVNRU5URUQoKTsKK30KKwordm9pZCBTZXJ2aWNlV29ya2VySm9iczo6UHJvbWlzZUVycm9yRGF0YTo6UmVqZWN0KAorICAgIHN0ZDo6dW5pcXVlX3B0cjxKb2JQcm9taXNlVHlwZT4gcHJvbWlzZSkgY29uc3QgeworICBpZiAobWVzc2FnZV90eXBlXyAhPSBzY3JpcHQ6OmtOb0Vycm9yKSB7CisgICAgcHJvbWlzZS0+UmVqZWN0KEdldFNpbXBsZUV4Y2VwdGlvblR5cGUobWVzc2FnZV90eXBlXykpOworICB9IGVsc2UgeworICAgIHByb21pc2UtPlJlamVjdChuZXcgZG9tOjpET01FeGNlcHRpb24oZXhjZXB0aW9uX2NvZGVfLCBtZXNzYWdlXykpOworICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlV29ya2VySm9iczo6Sm9iPiBTZXJ2aWNlV29ya2VySm9iczo6Q3JlYXRlSm9iKAorICAgIEpvYlR5cGUgdHlwZSwgY29uc3QgdXJsOjpPcmlnaW4mIHN0b3JhZ2Vfa2V5LCBjb25zdCBHVVJMJiBzY29wZV91cmwsCisgICAgY29uc3QgR1VSTCYgc2NyaXB0X3VybCwgc3RkOjp1bmlxdWVfcHRyPEpvYlByb21pc2VUeXBlPiBwcm9taXNlLAorICAgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogY2xpZW50KSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckpvYnM6OkNyZWF0ZUpvYigpIik7CisgIC8vIEFsZ29yaXRobSBmb3IgIkNyZWF0ZSBKb2IiOgorICAvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjcmVhdGUtam9iCisgIC8vIDEuIExldCBqb2IgYmUgYSBuZXcgam9iLgorICAvLyAyLiBTZXQgam9i4oCZcyBqb2IgdHlwZSB0byBqb2JUeXBlLgorICAvLyAzLiBTZXQgam9i4oCZcyBzdG9yYWdlIGtleSB0byBzdG9yYWdlIGtleS4KKyAgLy8gNC4gU2V0IGpvYuKAmXMgc2NvcGUgdXJsIHRvIHNjb3BlVVJMLgorICAvLyA1LiBTZXQgam9i4oCZcyBzY3JpcHQgdXJsIHRvIHNjcmlwdFVSTC4KKyAgLy8gNi4gU2V0IGpvYuKAmXMgam9iIHByb21pc2UgdG8gcHJvbWlzZS4KKyAgLy8gNy4gU2V0IGpvYuKAmXMgY2xpZW50IHRvIGNsaWVudC4KKyAgc3RkOjp1bmlxdWVfcHRyPEpvYj4gam9iKG5ldyBKb2Ioa1JlZ2lzdGVyLCBzdG9yYWdlX2tleSwgc2NvcGVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfdXJsLCBzdGQ6Om1vdmUocHJvbWlzZSksIGNsaWVudCkpOworICAvLyA4LiBJZiBjbGllbnQgaXMgbm90IG51bGwsIHNldCBqb2LigJlzIHJlZmVycmVyIHRvIGNsaWVudOKAmXMgY3JlYXRpb24gVVJMLgorICBpZiAoY2xpZW50KSB7CisgICAgam9iLT5yZWZlcnJlciA9IGNsaWVudC0+Y3JlYXRpb25fdXJsKCk7CisgIH0KKyAgLy8gOS4gUmV0dXJuIGpvYi4KKyAgcmV0dXJuIGpvYjsKK30KKwordm9pZCBTZXJ2aWNlV29ya2VySm9iczo6U2NoZWR1bGVKb2Ioc3RkOjp1bmlxdWVfcHRyPEpvYj4gam9iKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckpvYnM6OlNjaGVkdWxlSm9iKCkiKTsKKyAgRENIRUNLX0VRKGJhc2U6Ok1lc3NhZ2VMb29wOjpjdXJyZW50KCksIG1lc3NhZ2VfbG9vcCgpKTsKKyAgRENIRUNLKGpvYik7CisgIC8vIEFsZ29yaXRobSBmb3IgIlNjaGVkdWxlIEpvYiI6CisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3NjaGVkdWxlLWpvYgorICAvLyAxLiBMZXQgam9iUXVldWUgYmUgbnVsbC4KKworICAvLyAyLiBMZXQgam9iU2NvcGUgYmUgam9i4oCZcyBzY29wZSB1cmwsIHNlcmlhbGl6ZWQuCisgIHN0ZDo6c3RyaW5nIGpvYl9zY29wZSA9IGpvYi0+c2NvcGVfdXJsLnNwZWMoKTsKKworICAvLyAzLiBJZiBzY29wZSB0byBqb2IgcXVldWUgbWFwW2pvYlNjb3BlXSBkb2VzIG5vdCBleGlzdCwgc2V0IHNjb3BlIHRvIGpvYgorICAvLyBxdWV1ZSBtYXBbam9iU2NvcGVdIHRvIGEgbmV3IGpvYiBxdWV1ZS4KKyAgaWYgKGpvYl9xdWV1ZV9tYXBfLmZpbmQoam9iX3Njb3BlKSA9PSBqb2JfcXVldWVfbWFwXy5lbmQoKSkgeworICAgIGF1dG8gaW5zZXJ0aW9uID0gam9iX3F1ZXVlX21hcF8uZW1wbGFjZSgKKyAgICAgICAgam9iX3Njb3BlLCBzdGQ6OnVuaXF1ZV9wdHI8Sm9iUXVldWU+KG5ldyBKb2JRdWV1ZSgpKSk7CisgICAgRENIRUNLKGluc2VydGlvbi5zZWNvbmQpOworICB9CisKKyAgLy8gNC4gU2V0IGpvYlF1ZXVlIHRvIHNjb3BlIHRvIGpvYiBxdWV1ZSBtYXBbam9iU2NvcGVdLgorICBEQ0hFQ0soam9iX3F1ZXVlX21hcF8uZmluZChqb2Jfc2NvcGUpICE9IGpvYl9xdWV1ZV9tYXBfLmVuZCgpKTsKKyAgSm9iUXVldWUqIGpvYl9xdWV1ZSA9IGpvYl9xdWV1ZV9tYXBfLmZpbmQoam9iX3Njb3BlKS0+c2Vjb25kLmdldCgpOworCisgIC8vIDUuIElmIGpvYlF1ZXVlIGlzIGVtcHR5LCB0aGVuOgorICBpZiAoam9iX3F1ZXVlLT5lbXB0eSgpKSB7CisgICAgLy8gNS4xLiBTZXQgam9i4oCZcyBjb250YWluaW5nIGpvYiBxdWV1ZSB0byBqb2JRdWV1ZSwgYW5kIGVucXVldWUgam9iIHRvCisgICAgLy8gam9iUXVldWUuCisgICAgam9iLT5jb250YWluaW5nX2pvYl9xdWV1ZSA9IGpvYl9xdWV1ZTsKKyAgICBqb2JfcXVldWUtPkVucXVldWUoc3RkOjptb3ZlKGpvYikpOworCisgICAgLy8gNS4yLiBJbnZva2UgUnVuIEpvYiB3aXRoIGpvYlF1ZXVlLgorICAgIFJ1bkpvYihqb2JfcXVldWUpOworCisgIH0gZWxzZSB7CisgICAgLy8gNi4gRWxzZToKKyAgICAvLyA2LjEuIExldCBsYXN0Sm9iIGJlIHRoZSBlbGVtZW50IGF0IHRoZSBiYWNrIG9mIGpvYlF1ZXVlLgorICAgIHsKKyAgICAgIGF1dG8gbGFzdF9pdGVtID0gam9iX3F1ZXVlLT5MYXN0SXRlbSgpOworICAgICAgSm9iKiBsYXN0X2pvYiA9IGxhc3RfaXRlbS5maXJzdDsKKworICAgICAgLy8gNi4yLiBJZiBqb2IgaXMgZXF1aXZhbGVudCB0byBsYXN0Sm9iIGFuZCBsYXN0Sm9i4oCZcyBqb2IgcHJvbWlzZSBoYXMgbm90CisgICAgICAvLyBzZXR0bGVkLCBhcHBlbmQgam9iIHRvIGxhc3RKb2LigJlzIGxpc3Qgb2YgZXF1aXZhbGVudCBqb2JzLgorICAgICAgRENIRUNLKGxhc3Rfam9iKTsKKyAgICAgIGJhc2U6OkF1dG9Mb2NrIGxvY2sobGFzdF9qb2ItPmVxdWl2YWxlbnRfam9ic19wcm9taXNlX211dGV4KTsKKyAgICAgIGlmIChFcXVpdmFsZW50Sm9icyhqb2IuZ2V0KCksIGxhc3Rfam9iKSAmJiBsYXN0X2pvYi0+cHJvbWlzZSAmJgorICAgICAgICAgIGxhc3Rfam9iLT5wcm9taXNlLT5TdGF0ZSgpID09IHNjcmlwdDo6UHJvbWlzZVN0YXRlOjprUGVuZGluZykgeworICAgICAgICBsYXN0X2pvYi0+ZXF1aXZhbGVudF9qb2JzLnB1c2hfYmFjayhzdGQ6Om1vdmUoam9iKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyA2LjMuIEVsc2UsIHNldCBqb2LigJlzIGNvbnRhaW5pbmcgam9iIHF1ZXVlIHRvIGpvYlF1ZXVlLCBhbmQgZW5xdWV1ZSBqb2IgdG8KKyAgICAvLyBqb2JRdWV1ZS4KKyAgICBqb2ItPmNvbnRhaW5pbmdfam9iX3F1ZXVlID0gam9iX3F1ZXVlOworICAgIGpvYl9xdWV1ZS0+RW5xdWV1ZShzdGQ6Om1vdmUoam9iKSk7CisgIH0KKyAgRENIRUNLKCFqb2IpOworfQorCitib29sIFNlcnZpY2VXb3JrZXJKb2JzOjpFcXVpdmFsZW50Sm9icyhKb2IqIG9uZSwgSm9iKiB0d28pIHsKKyAgLy8gQWxnb3JpdGhtIGZvciAnVHdvIGpvYnMgYXJlIGVxdWl2YWxlbnQnCisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1qb2ItZXF1aXZhbGVudAorICBEQ0hFQ0sob25lKTsKKyAgRENIRUNLKHR3byk7CisgIGlmICghb25lIHx8ICF0d28pIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBUd28gam9icyBhcmUgZXF1aXZhbGVudCB3aGVuIHRoZWlyIGpvYiB0eXBlIGlzIHRoZSBzYW1lIGFuZDoKKyAgaWYgKG9uZS0+dHlwZSAhPSB0d28tPnR5cGUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBGb3IgcmVnaXN0ZXIgYW5kIHVwZGF0ZSBqb2JzLCB0aGVpciBzY29wZSB1cmwsIHNjcmlwdCB1cmwsIHdvcmtlciB0eXBlLCBhbmQKKyAgLy8gdXBkYXRlIHZpYSBjYWNoZSBtb2RlIGFyZSB0aGUgc2FtZS4KKyAgaWYgKChvbmUtPnR5cGUgPT0ga1JlZ2lzdGVyIHx8IG9uZS0+dHlwZSA9PSBrVXBkYXRlKSAmJgorICAgICAgKG9uZS0+c2NvcGVfdXJsID09IHR3by0+c2NvcGVfdXJsKSAmJgorICAgICAgKG9uZS0+c2NyaXB0X3VybCA9PSB0d28tPnNjcmlwdF91cmwpICYmCisgICAgICAob25lLT51cGRhdGVfdmlhX2NhY2hlID09IHR3by0+dXBkYXRlX3ZpYV9jYWNoZSkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIEZvciB1bnJlZ2lzdGVyIGpvYnMsIHRoZWlyIHNjb3BlIHVybCBpcyB0aGUgc2FtZS4KKyAgcmV0dXJuIChvbmUtPnR5cGUgPT0ga1VucmVnaXN0ZXIpICYmIChvbmUtPnNjb3BlX3VybCA9PSB0d28tPnNjb3BlX3VybCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OlJ1bkpvYihKb2JRdWV1ZSogam9iX3F1ZXVlKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckpvYnM6OlJ1bkpvYigpIik7CisgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBtZXNzYWdlX2xvb3AoKSk7CisgIC8vIEFsZ29yaXRobSBmb3IgIlJ1biBKb2IiOgorICAvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNydW4tam9iLWFsZ29yaXRobQorCisgIC8vIDEuIEFzc2VydDogam9iUXVldWUgaXMgbm90IGVtcHR5LgorICBEQ0hFQ0soam9iX3F1ZXVlICYmICFqb2JfcXVldWUtPmVtcHR5KCkpOworICBpZiAoIWpvYl9xdWV1ZSB8fCBqb2JfcXVldWUtPmVtcHR5KCkpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyAyLiBRdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZXNlIHN0ZXBzOgorICBtZXNzYWdlX2xvb3AoKS0+dGFza19ydW5uZXIoKS0+UG9zdFRhc2soCisgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmQoJlNlcnZpY2VXb3JrZXJKb2JzOjpSdW5Kb2JUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQodGhpcyksIGpvYl9xdWV1ZSkpOworfQorCit2b2lkIFNlcnZpY2VXb3JrZXJKb2JzOjpSdW5Kb2JUYXNrKEpvYlF1ZXVlKiBqb2JfcXVldWUpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndvcmtlciIsICJTZXJ2aWNlV29ya2VySm9iczo6UnVuSm9iVGFzaygpIik7CisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIC8vIFRhc2sgZm9yICJSdW4gSm9iIiB0byBydW4gaW4gdGhlIHNlcnZpY2Ugd29ya2VyIHRocmVhZC4KKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcnVuLWpvYi1hbGdvcml0aG0KKyAgRENIRUNLKGpvYl9xdWV1ZSk7CisgIGlmICgham9iX3F1ZXVlKSByZXR1cm47CisgIERDSEVDSygham9iX3F1ZXVlLT5lbXB0eSgpKTsKKworICAvLyAyLjEgTGV0IGpvYiBiZSB0aGUgZmlyc3QgaXRlbSBpbiBqb2JRdWV1ZS4KKyAgSm9iKiBqb2IgPSBqb2JfcXVldWUtPkZpcnN0SXRlbSgpOworCisgIERDSEVDSyhqb2IpOworICBzd2l0Y2ggKGpvYi0+dHlwZSkgeworICAgIC8vIDIuMiBJZiBqb2LigJlzIGpvYiB0eXBlIGlzIHJlZ2lzdGVyLCBydW4gUmVnaXN0ZXIgd2l0aCBqb2IgaW4gcGFyYWxsZWwuCisgICAgY2FzZSBrUmVnaXN0ZXI6CisgICAgICBSZWdpc3Rlcihqb2IpOworICAgICAgYnJlYWs7CisKKyAgICAvLyAyLjMgRWxzZSBpZiBqb2LigJlzIGpvYiB0eXBlIGlzIHVwZGF0ZSwgcnVuIFVwZGF0ZSB3aXRoIGpvYiBpbiBwYXJhbGxlbC4KKyAgICBjYXNlIGtVcGRhdGU6CisgICAgICBVcGRhdGUoam9iKTsKKyAgICAgIGJyZWFrOworCisgICAgLy8gMi40IEVsc2UgaWYgam9i4oCZcyBqb2IgdHlwZSBpcyB1bnJlZ2lzdGVyLCBydW4gVW5yZWdpc3RlciB3aXRoIGpvYiBpbgorICAgIC8vIHBhcmFsbGVsLgorICAgIGNhc2Uga1VucmVnaXN0ZXI6CisgICAgICBVbnJlZ2lzdGVyKGpvYik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgTk9UUkVBQ0hFRCgpOworICB9Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OlJlZ2lzdGVyKEpvYiogam9iKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckpvYnM6OlJlZ2lzdGVyKCkiKTsKKyAgRENIRUNLX0VRKG1lc3NhZ2VfbG9vcCgpLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKKyAgRENIRUNLKGpvYik7CisgIC8vIEFsZ29yaXRobSBmb3IgIlJlZ2lzdGVyIgorICAvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZWdpc3Rlci1hbGdvcml0aG0KKworICAvLyAxLiBJZiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgb3JpZ2luIHdpdGggdGhlIG9yaWdpbgorICAvLyBvZiBqb2LigJlzIHNjcmlwdCB1cmwgYXMgdGhlIGFyZ3VtZW50IGlzIE5vdCBUcnVzdGVkLCB0aGVuOgorICBpZiAoIUlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeShqb2ItPnNjcmlwdF91cmwpKSB7CisgICAgLy8gMS4xLiBJbnZva2UgUmVqZWN0IEpvYiBQcm9taXNlIHdpdGggam9iIGFuZCAiU2VjdXJpdHlFcnJvciIgRE9NRXhjZXB0aW9uLgorICAgIFJlamVjdEpvYlByb21pc2UoCisgICAgICAgIGpvYiwgUHJvbWlzZUVycm9yRGF0YSgKKyAgICAgICAgICAgICAgICAgZG9tOjpET01FeGNlcHRpb246OmtTZWN1cml0eUVyciwKKyAgICAgICAgICAgICAgICAgIlNlcnZpY2UgV29ya2VyIFJlZ2lzdGVyIGZhaWxlZDogU2NyaXB0IFVSTCBpcyBOb3QgVHJ1c3RlZC4iKSk7CisgICAgLy8gMS4yLiBJbnZva2UgRmluaXNoIEpvYiB3aXRoIGpvYiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgRmluaXNoSm9iKGpvYik7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gMi4gSWYgam9i4oCZcyBzY3JpcHQgdXJsJ3Mgb3JpZ2luIGFuZCBqb2LigJlzIHJlZmVycmVyJ3Mgb3JpZ2luIGFyZSBub3Qgc2FtZQorICAvLyBvcmlnaW4sIHRoZW46CisgIGNvbnN0IHVybDo6T3JpZ2luIGpvYl9zY3JpcHRfb3JpZ2luKHVybDo6T3JpZ2luOjpDcmVhdGUoam9iLT5zY3JpcHRfdXJsKSk7CisgIGNvbnN0IHVybDo6T3JpZ2luIGpvYl9yZWZlcnJlcl9vcmlnaW4odXJsOjpPcmlnaW46OkNyZWF0ZShqb2ItPnJlZmVycmVyKSk7CisgIGlmICgham9iX3NjcmlwdF9vcmlnaW4uSXNTYW1lT3JpZ2luV2l0aChqb2JfcmVmZXJyZXJfb3JpZ2luKSkgeworICAgIC8vIDIuMS4gSW52b2tlIFJlamVjdCBKb2IgUHJvbWlzZSB3aXRoIGpvYiBhbmQgIlNlY3VyaXR5RXJyb3IiIERPTUV4Y2VwdGlvbi4KKyAgICBSZWplY3RKb2JQcm9taXNlKAorICAgICAgICBqb2IsIFByb21pc2VFcnJvckRhdGEoCisgICAgICAgICAgICAgICAgIGRvbTo6RE9NRXhjZXB0aW9uOjprU2VjdXJpdHlFcnIsCisgICAgICAgICAgICAgICAgICJTZXJ2aWNlIFdvcmtlciBSZWdpc3RlciBmYWlsZWQ6IFNjcmlwdCBVUkwgYW5kIHJlZmVycmVyICIKKyAgICAgICAgICAgICAgICAgIm9yaWdpbiBhcmUgbm90IHRoZSBzYW1lLiIpKTsKKyAgICAvLyAyLjIuIEludm9rZSBGaW5pc2ggSm9iIHdpdGggam9iIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBGaW5pc2hKb2Ioam9iKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyAzLiBJZiBqb2LigJlzIHNjb3BlIHVybCdzIG9yaWdpbiBhbmQgam9i4oCZcyByZWZlcnJlcidzIG9yaWdpbiBhcmUgbm90IHNhbWUKKyAgLy8gb3JpZ2luLCB0aGVuOgorICBjb25zdCB1cmw6Ok9yaWdpbiBqb2Jfc2NvcGVfb3JpZ2luKHVybDo6T3JpZ2luOjpDcmVhdGUoam9iLT5zY29wZV91cmwpKTsKKyAgaWYgKCFqb2Jfc2NvcGVfb3JpZ2luLklzU2FtZU9yaWdpbldpdGgoam9iX3JlZmVycmVyX29yaWdpbikpIHsKKyAgICAvLyAzLjEuIEludm9rZSBSZWplY3QgSm9iIFByb21pc2Ugd2l0aCBqb2IgYW5kICJTZWN1cml0eUVycm9yIiBET01FeGNlcHRpb24uCisgICAgUmVqZWN0Sm9iUHJvbWlzZSgKKyAgICAgICAgam9iLCBQcm9taXNlRXJyb3JEYXRhKAorICAgICAgICAgICAgICAgICBkb206OkRPTUV4Y2VwdGlvbjo6a1NlY3VyaXR5RXJyLAorICAgICAgICAgICAgICAgICAiU2VydmljZSBXb3JrZXIgUmVnaXN0ZXIgZmFpbGVkOiBTY29wZSBVUkwgYW5kIHJlZmVycmVyICIKKyAgICAgICAgICAgICAgICAgIm9yaWdpbiBhcmUgbm90IHRoZSBzYW1lLiIpKTsKKworICAgIC8vIDMuMi4gSW52b2tlIEZpbmlzaCBKb2Igd2l0aCBqb2IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIEZpbmlzaEpvYihqb2IpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIDQuIExldCByZWdpc3RyYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEdldCBSZWdpc3RyYXRpb24gZ2l2ZW4gam9i4oCZcworICAvLyBzdG9yYWdlIGtleSBhbmQgam9i4oCZcyBzY29wZSB1cmwuCisgIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QqIHJlZ2lzdHJhdGlvbiA9CisgICAgICBHZXRSZWdpc3RyYXRpb24oam9iLT5zdG9yYWdlX2tleSwgam9iLT5zY29wZV91cmwpOworCisgIC8vIDUuIElmIHJlZ2lzdHJhdGlvbiBpcyBub3QgbnVsbCwgdGhlbjoKKyAgaWYgKHJlZ2lzdHJhdGlvbikgeworICAgIC8vIDUuMSBMZXQgbmV3ZXN0V29ya2VyIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgR2V0IE5ld2VzdCBXb3JrZXIKKyAgICAvLyBhbGdvcml0aG0gcGFzc2luZyByZWdpc3RyYXRpb24gYXMgdGhlIGFyZ3VtZW50LgorICAgIFNlcnZpY2VXb3JrZXIqIG5ld2VzdF93b3JrZXIgPSBHZXROZXdlc3RXb3JrZXIocmVnaXN0cmF0aW9uKTsKKworICAgIC8vIDUuMiBJZiBuZXdlc3RXb3JrZXIgaXMgbm90IG51bGwsIGpvYuKAmXMgc2NyaXB0IHVybCBlcXVhbHMgbmV3ZXN0V29ya2Vy4oCZcworICAgIC8vIHNjcmlwdCB1cmwsIGpvYuKAmXMgd29ya2VyIHR5cGUgZXF1YWxzIG5ld2VzdFdvcmtlcuKAmXMgdHlwZSwgYW5kIGpvYuKAmXMKKyAgICAvLyB1cGRhdGUgdmlhIGNhY2hlIG1vZGUncyB2YWx1ZSBlcXVhbHMgcmVnaXN0cmF0aW9u4oCZcyB1cGRhdGUgdmlhIGNhY2hlCisgICAgLy8gbW9kZSwgdGhlbjoKKyAgICBpZiAobmV3ZXN0X3dvcmtlciAmJiBqb2ItPnNjcmlwdF91cmwgPT0gbmV3ZXN0X3dvcmtlci0+c2NyaXB0X3VybCgpKSB7CisgICAgICAvLyA1LjIuMSBJbnZva2UgUmVzb2x2ZSBKb2IgUHJvbWlzZSB3aXRoIGpvYiBhbmQgcmVnaXN0cmF0aW9uLgorICAgICAgUmVzb2x2ZUpvYlByb21pc2Uoam9iLCByZWdpc3RyYXRpb24pOworCisgICAgICAvLyA1LjIuMiBJbnZva2UgRmluaXNoIEpvYiB3aXRoIGpvYiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgICBGaW5pc2hKb2Ioam9iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8gNi4gRWxzZToKKworICAgIC8vIDYuMSBJbnZva2UgU2V0IFJlZ2lzdHJhdGlvbiBhbGdvcml0aG0gd2l0aCBqb2LigJlzIHN0b3JhZ2Uga2V5LCBqb2LigJlzIHNjb3BlCisgICAgLy8gdXJsLCBhbmQgam9i4oCZcyB1cGRhdGUgdmlhIGNhY2hlIG1vZGUuCisgICAgcmVnaXN0cmF0aW9uID0gU2V0UmVnaXN0cmF0aW9uKGpvYi0+c3RvcmFnZV9rZXksIGpvYi0+c2NvcGVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ItPnVwZGF0ZV92aWFfY2FjaGUpOworICB9CisKKyAgLy8gNy4gSW52b2tlIFVwZGF0ZSBhbGdvcml0aG0gcGFzc2luZyBqb2IgYXMgdGhlIGFyZ3VtZW50LgorICBVcGRhdGUoam9iKTsKK30KKwordm9pZCBTZXJ2aWNlV29ya2VySm9iczo6VXBkYXRlKEpvYiogam9iKSB7CisgIFRSQUNFX0VWRU5UMCgiY29iYWx0Ojp3b3JrZXIiLCAiU2VydmljZVdvcmtlckpvYnM6OlVwZGF0ZSgpIik7CisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIERDSEVDSyhqb2IpOworICAvLyBBbGdvcml0aG0gZm9yICJVcGRhdGUiCisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3VwZGF0ZS1hbGdvcml0aG0KKworICAvLyAxLiBMZXQgcmVnaXN0cmF0aW9uIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBHZXQgUmVnaXN0cmF0aW9uIGdpdmVuIGpvYuKAmXMKKyAgLy8gc3RvcmFnZSBrZXkgYW5kIGpvYuKAmXMgc2NvcGUgdXJsLgorICBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiByZWdpc3RyYXRpb24gPQorICAgICAgR2V0UmVnaXN0cmF0aW9uKGpvYi0+c3RvcmFnZV9rZXksIGpvYi0+c2NvcGVfdXJsKTsKKworICAvLyAyLiBJZiByZWdpc3RyYXRpb24gaXMgbnVsbCwgdGhlbjoKKyAgaWYgKCFyZWdpc3RyYXRpb24pIHsKKyAgICAvLyAyLjEuIEludm9rZSBSZWplY3QgSm9iIFByb21pc2Ugd2l0aCBqb2IgYW5kIFR5cGVFcnJvci4KKyAgICBSZWplY3RKb2JQcm9taXNlKGpvYiwgUHJvbWlzZUVycm9yRGF0YShzY3JpcHQ6OmtTaW1wbGVUeXBlRXJyb3IpKTsKKworICAgIC8vIDIuMi4gSW52b2tlIEZpbmlzaCBKb2Igd2l0aCBqb2IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgorICAgIEZpbmlzaEpvYihqb2IpOworICAgIHJldHVybjsKKyAgfQorICBSZXNvbHZlSm9iUHJvbWlzZShqb2IsIHJlZ2lzdHJhdGlvbik7CisgIE5PVElNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OlVucmVnaXN0ZXIoSm9iKiBqb2IpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndvcmtlciIsICJTZXJ2aWNlV29ya2VySm9iczo6VW5yZWdpc3RlcigpIik7CisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIC8vIEFsZ29yaXRobSBmb3IgIlVucmVnaXN0ZXIiCisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3VucmVnaXN0ZXItYWxnb3JpdGhtCisgIE5PVElNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OlJlamVjdEpvYlByb21pc2UoSm9iKiBqb2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb21pc2VFcnJvckRhdGEmIGVycm9yX2RhdGEpIHsKKyAgVFJBQ0VfRVZFTlQwKCJjb2JhbHQ6OndvcmtlciIsICJTZXJ2aWNlV29ya2VySm9iczo6UmVqZWN0Sm9iUHJvbWlzZSgpIik7CisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIC8vIEFsZ29yaXRobSBmb3IgIlJlamVjdCBKb2IgUHJvbWlzZSIKKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVqZWN0LWpvYi1wcm9taXNlCisgIC8vIDEuIElmIGpvYuKAmXMgY2xpZW50IGlzIG5vdCBudWxsLCBxdWV1ZSBhIHRhc2ssIG9uIGpvYuKAmXMgY2xpZW50J3MgcmVzcG9uc2libGUKKyAgLy8gZXZlbnQgbG9vcCB1c2luZyB0aGUgRE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZSwgdG8gcmVqZWN0IGpvYuKAmXMgam9iCisgIC8vIHByb21pc2Ugd2l0aCBhIG5ldyBleGNlcHRpb24gd2l0aCBlcnJvckRhdGEgYW5kIGEgdXNlciBhZ2VudC1kZWZpbmVkCisgIC8vIG1lc3NhZ2UsIGluIGpvYuKAmXMgY2xpZW50J3MgUmVhbG0uCisKKyAgYXV0byByZWplY3RfdGFzayA9IFtdKHN0ZDo6dW5pcXVlX3B0cjxKb2JQcm9taXNlVHlwZT4gcHJvbWlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb21pc2VFcnJvckRhdGEmIGVycm9yX2RhdGEpIHsKKyAgICBlcnJvcl9kYXRhLlJlamVjdChzdGQ6Om1vdmUocHJvbWlzZSkpOworICB9OworCisgIGlmIChqb2ItPmNsaWVudCkgeworICAgIGJhc2U6OkF1dG9Mb2NrIGxvY2soam9iLT5lcXVpdmFsZW50X2pvYnNfcHJvbWlzZV9tdXRleCk7CisgICAgam9iLT5jbGllbnQtPmNvbnRleHQoKS0+bWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsCisgICAgICAgIGJhc2U6OkJpbmQocmVqZWN0X3Rhc2ssIGJhc2U6OlBhc3NlZCgmam9iLT5wcm9taXNlKSwgZXJyb3JfZGF0YSkpOworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBwcm9taXNlIGlzIGNsZWFyZWQsIHNvIHRoYXQgZXF1aXZhbGVudCBqb2JzIHdvbid0IGdldAorICAgIC8vIGFkZGVkIGZyb20gdGhpcyBwb2ludCBvbi4KKyAgICBDSEVDSygham9iLT5wcm9taXNlKTsKKyAgfQorICAvLyAyLiBGb3IgZWFjaCBlcXVpdmFsZW50Sm9iIGluIGpvYuKAmXMgbGlzdCBvZiBlcXVpdmFsZW50IGpvYnM6CisgIGZvciAoYXV0byYgZXF1aXZhbGVudF9qb2IgOiBqb2ItPmVxdWl2YWxlbnRfam9icykgeworICAgIC8vIEVxdWl2YWxlbnQgam9icyBzaG91bGQgbmV2ZXIgaGF2ZSBlcXVpdmFsZW50IGpvYnMgb2YgdGhlaXIgb3duLgorICAgIERDSEVDSyhlcXVpdmFsZW50X2pvYi0+ZXF1aXZhbGVudF9qb2JzLmVtcHR5KCkpOworCisgICAgLy8gMi4xLiBJZiBlcXVpdmFsZW50Sm9i4oCZcyBjbGllbnQgaXMgbnVsbCwgY29udGludWUuCisgICAgaWYgKGVxdWl2YWxlbnRfam9iLT5jbGllbnQpIHsKKyAgICAgIC8vIDIuMi4gUXVldWUgYSB0YXNrLCBvbiBlcXVpdmFsZW50Sm9i4oCZcyBjbGllbnQncyByZXNwb25zaWJsZSBldmVudCBsb29wCisgICAgICAvLyB1c2luZyB0aGUgRE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZSwgdG8gcmVqZWN0IGVxdWl2YWxlbnRKb2LigJlzIGpvYgorICAgICAgLy8gcHJvbWlzZSB3aXRoIGEgbmV3IGV4Y2VwdGlvbiB3aXRoIGVycm9yRGF0YSBhbmQgYSB1c2VyIGFnZW50LWRlZmluZWQKKyAgICAgIC8vIG1lc3NhZ2UsIGluIGVxdWl2YWxlbnRKb2LigJlzIGNsaWVudCdzIFJlYWxtLgorICAgICAgZXF1aXZhbGVudF9qb2ItPmNsaWVudC0+Y29udGV4dCgpCisgICAgICAgICAgLT5tZXNzYWdlX2xvb3AoKQorICAgICAgICAgIC0+dGFza19ydW5uZXIoKQorICAgICAgICAgIC0+UG9zdFRhc2soRlJPTV9IRVJFLAorICAgICAgICAgICAgICAgICAgICAgYmFzZTo6QmluZE9uY2UocmVqZWN0X3Rhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpQYXNzZWQoJmVxdWl2YWxlbnRfam9iLT5wcm9taXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2RhdGEpKTsKKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHByb21pc2UgaXMgY2xlYXJlZC4KKyAgICAgIENIRUNLKCFlcXVpdmFsZW50X2pvYi0+cHJvbWlzZSk7CisgICAgfQorICB9CisgIGpvYi0+ZXF1aXZhbGVudF9qb2JzLmNsZWFyKCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OlJlc29sdmVKb2JQcm9taXNlKAorICAgIEpvYiogam9iLCBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiB2YWx1ZSkgeworICBUUkFDRV9FVkVOVDAoImNvYmFsdDo6d29ya2VyIiwgIlNlcnZpY2VXb3JrZXJKb2JzOjpSZXNvbHZlSm9iUHJvbWlzZSgpIik7CisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIERDSEVDSyhqb2IpOworICBEQ0hFQ0sodmFsdWUpOworICAvLyBBbGdvcml0aG0gZm9yICJSZXNvbHZlIEpvYiBQcm9taXNlIi4KKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVzb2x2ZS1qb2ItcHJvbWlzZS1hbGdvcml0aG0KKworICAvLyAxLiBJZiBqb2LigJlzIGNsaWVudCBpcyBub3QgbnVsbCwgcXVldWUgYSB0YXNrLCBvbiBqb2LigJlzIGNsaWVudCdzIHJlc3BvbnNpYmxlCisgIC8vIGV2ZW50IGxvb3AgdXNpbmcgdGhlIERPTSBtYW5pcHVsYXRpb24gdGFzayBzb3VyY2UsIHRvIHJ1biB0aGUgZm9sbG93aW5nCisgIC8vIHN1YnN0ZXBzOgorICBpZiAoam9iLT5jbGllbnQpIHsKKyAgICBiYXNlOjpBdXRvTG9jayBsb2NrKGpvYi0+ZXF1aXZhbGVudF9qb2JzX3Byb21pc2VfbXV0ZXgpOworICAgIGpvYi0+Y2xpZW50LT5jb250ZXh0KCktPm1lc3NhZ2VfbG9vcCgpLT50YXNrX3J1bm5lcigpLT5Qb3N0VGFzaygKKyAgICAgICAgRlJPTV9IRVJFLCBiYXNlOjpCaW5kKCZTZXJ2aWNlV29ya2VySm9iczo6UmVzb2x2ZUpvYlByb21pc2VUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgam9iLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6UGFzc2VkKCZqb2ItPnByb21pc2UpLCBqb2ItPmNsaWVudCwgdmFsdWUpKTsKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcHJvbWlzZSBpcyBjbGVhcmVkLCBzbyB0aGF0IGVxdWl2YWxlbnQgam9icyB3b24ndCBnZXQKKyAgICAvLyBhZGRlZCBmcm9tIHRoaXMgcG9pbnQgb24uCisgICAgQ0hFQ0soIWpvYi0+cHJvbWlzZSk7CisgIH0KKworICAvLyAyLiBGb3IgZWFjaCBlcXVpdmFsZW50Sm9iIGluIGpvYuKAmXMgbGlzdCBvZiBlcXVpdmFsZW50IGpvYnM6CisgIGZvciAoYXV0byYgZXF1aXZhbGVudF9qb2IgOiBqb2ItPmVxdWl2YWxlbnRfam9icykgeworICAgIC8vIEVxdWl2YWxlbnQgam9icyBzaG91bGQgbmV2ZXIgaGF2ZSBlcXVpdmFsZW50IGpvYnMgb2YgdGhlaXIgb3duLgorICAgIERDSEVDSyhlcXVpdmFsZW50X2pvYi0+ZXF1aXZhbGVudF9qb2JzLmVtcHR5KCkpOworCisgICAgLy8gMi4xLiBJZiBlcXVpdmFsZW50Sm9i4oCZcyBjbGllbnQgaXMgbnVsbCwgY29udGludWUgdG8gdGhlIG5leHQgaXRlcmF0aW9uIG9mCisgICAgLy8gdGhlIGxvb3AuCisgICAgaWYgKGVxdWl2YWxlbnRfam9iLT5jbGllbnQpIHsKKyAgICAgIC8vIDIuMi4gUXVldWUgYSB0YXNrLCBvbiBlcXVpdmFsZW50Sm9i4oCZcyBjbGllbnQncyByZXNwb25zaWJsZSBldmVudCBsb29wCisgICAgICAvLyB1c2luZyB0aGUgRE9NIG1hbmlwdWxhdGlvbiB0YXNrIHNvdXJjZSwgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6CisgICAgICBlcXVpdmFsZW50X2pvYi0+Y2xpZW50LT5jb250ZXh0KCkKKyAgICAgICAgICAtPm1lc3NhZ2VfbG9vcCgpCisgICAgICAgICAgLT50YXNrX3J1bm5lcigpCisgICAgICAgICAgLT5Qb3N0VGFzayhGUk9NX0hFUkUsCisgICAgICAgICAgICAgICAgICAgICBiYXNlOjpCaW5kKCZTZXJ2aWNlV29ya2VySm9iczo6UmVzb2x2ZUpvYlByb21pc2VUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBlcXVpdmFsZW50X2pvYi0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6UGFzc2VkKCZlcXVpdmFsZW50X2pvYi0+cHJvbWlzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRfam9iLT5jbGllbnQsIHZhbHVlKSk7CisgICAgICAvLyBDaGVjayB0aGF0IHRoZSBwcm9taXNlIGlzIGNsZWFyZWQuCisgICAgICBDSEVDSyghZXF1aXZhbGVudF9qb2ItPnByb21pc2UpOworICAgIH0KKyAgfQorICBqb2ItPmVxdWl2YWxlbnRfam9icy5jbGVhcigpOworfQorCit2b2lkIFNlcnZpY2VXb3JrZXJKb2JzOjpSZXNvbHZlSm9iUHJvbWlzZVRhc2soCisgICAgSm9iVHlwZSB0eXBlLCBzdGQ6OnVuaXF1ZV9wdHI8Sm9iUHJvbWlzZVR5cGU+IHByb21pc2UsCisgICAgd2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKiBjbGllbnQsIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QqIHZhbHVlKSB7CisgIERDSEVDS19ORShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisgIERDSEVDS19FUShiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpLCBjbGllbnQtPmNvbnRleHQoKS0+bWVzc2FnZV9sb29wKCkpOworICAvLyAxLjEuLzIuMi4xLiBMZXQgY29udmVydGVkVmFsdWUgYmUgbnVsbC4KKyAgLy8gMS4yLi8yLjIuMi4gSWYgam9i4oCZcyBqb2IgdHlwZSBpcyBlaXRoZXIgcmVnaXN0ZXIgb3IgdXBkYXRlLCBzZXQKKyAgLy8gY29udmVydGVkVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24KKyAgLy8gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB2YWx1ZSBpbiBqb2LigJlzIGNsaWVudC4KKyAgaWYgKHR5cGUgPT0ga1JlZ2lzdGVyIHx8IHR5cGUgPT0ga1VwZGF0ZSkgeworICAgIGF1dG8gY29udmVydGVkX3ZhbHVlID0KKyAgICAgICAgY2xpZW50LT5jb250ZXh0KCktPkdldFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24odmFsdWUpOworICAgIC8vIDEuNC4vMi4yLjQuICBSZXNvbHZlIGpvYuKAmXMgam9iIHByb21pc2Ugd2l0aCBjb252ZXJ0ZWRWYWx1ZS4KKyAgICBwcm9taXNlLT5SZXNvbHZlKGNvbnZlcnRlZF92YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgRENIRUNLX0VRKHR5cGUsIGtVbnJlZ2lzdGVyKTsKKyAgICAvLyAxLjMuLzIuMi4zLiBFbHNlLCBzZXQgY29udmVydGVkVmFsdWUgdG8gdmFsdWUsIGluIGpvYuKAmXMgY2xpZW50J3MgUmVhbG0uCisgICAgYm9vbCBjb252ZXJ0ZWRfdmFsdWUgPSB2YWx1ZSAhPSBudWxscHRyOworICAgIC8vIDEuNC4vMi4yLjQuICBSZXNvbHZlIGpvYuKAmXMgam9iIHByb21pc2Ugd2l0aCBjb252ZXJ0ZWRWYWx1ZS4KKyAgICBwcm9taXNlLT5SZXNvbHZlKGNvbnZlcnRlZF92YWx1ZSk7CisgIH0KK30KKworLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2ZpbmlzaC1qb2ItYWxnb3JpdGhtCit2b2lkIFNlcnZpY2VXb3JrZXJKb2JzOjpGaW5pc2hKb2IoSm9iKiBqb2IpIHsKKyAgRENIRUNLX0VRKG1lc3NhZ2VfbG9vcCgpLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKKyAgLy8gMS4gTGV0IGpvYlF1ZXVlIGJlIGpvYuKAmXMgY29udGFpbmluZyBqb2IgcXVldWUuCisgIEpvYlF1ZXVlKiBqb2JfcXVldWUgPSBqb2ItPmNvbnRhaW5pbmdfam9iX3F1ZXVlOworCisgIC8vIDIuIEFzc2VydDogdGhlIGZpcnN0IGl0ZW0gaW4gam9iUXVldWUgaXMgam9iLgorICBEQ0hFQ0tfRVEoam9iX3F1ZXVlLT5GaXJzdEl0ZW0oKSwgam9iKTsKKworICAvLyAzLiBEZXF1ZXVlIGZyb20gam9iUXVldWUuCisgIGpvYl9xdWV1ZS0+RGVxdWV1ZSgpOworCisgIC8vIDQuIElmIGpvYlF1ZXVlIGlzIG5vdCBlbXB0eSwgaW52b2tlIFJ1biBKb2Igd2l0aCBqb2JRdWV1ZS4KKyAgaWYgKCFqb2JfcXVldWUtPmVtcHR5KCkpIHsKKyAgICBSdW5Kb2Ioam9iX3F1ZXVlKTsKKyAgfQorfQorCitTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiBTZXJ2aWNlV29ya2VySm9iczo6R2V0UmVnaXN0cmF0aW9uKAorICAgIGNvbnN0IHVybDo6T3JpZ2luJiBzdG9yYWdlX2tleSwgY29uc3QgR1VSTCYgc2NvcGUpIHsKKyAgLy8gQWxnb3JpdGhtIGZvciAnR2V0IFJlZ2lzdHJhdGlvbic6CisgIC8vICAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2dldC1yZWdpc3RyYXRpb24tYWxnb3JpdGhtCisgIERDSEVDS19FUShtZXNzYWdlX2xvb3AoKSwgYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSk7CisKKyAgLy8gMS4gUnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXRvbWljYWxseS4KKyAgYmFzZTo6QXV0b0xvY2sgbG9jayhyZWdpc3RyYXRpb25fbWFwX211dGV4Xyk7CisKKyAgLy8gMi4gTGV0IHNjb3BlU3RyaW5nIGJlIHRoZSBlbXB0eSBzdHJpbmcuCisgIHN0ZDo6c3RyaW5nIHNjb3BlX3N0cmluZzsKKworICAvLyAzLiBJZiBzY29wZSBpcyBub3QgbnVsbCwgc2V0IHNjb3BlU3RyaW5nIHRvIHNlcmlhbGl6ZWQgc2NvcGUgd2l0aCB0aGUKKyAgLy8gZXhjbHVkZSBmcmFnbWVudCBmbGFnIHNldC4KKyAgaWYgKCFzY29wZS5pc19lbXB0eSgpKSB7CisgICAgc2NvcGVfc3RyaW5nID0gU2VyaWFsaXplRXhjbHVkaW5nRnJhZ21lbnQoc2NvcGUpOworICB9CisKKyAgUmVnaXN0cmF0aW9uS2V5IHJlZ2lzdHJhdGlvbl9rZXkoc3RvcmFnZV9rZXksIHNjb3BlX3N0cmluZyk7CisgIC8vIDQuIEZvciBlYWNoIChlbnRyeSBzdG9yYWdlIGtleSwgZW50cnkgc2NvcGUpIOKGkiByZWdpc3RyYXRpb24gb2YgcmVnaXN0cmF0aW9uCisgIC8vIG1hcDoKKyAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IHJlZ2lzdHJhdGlvbl9tYXBfKSB7CisgICAgLy8gNC4xLiBJZiBzdG9yYWdlIGtleSBlcXVhbHMgZW50cnkgc3RvcmFnZSBrZXkgYW5kIHNjb3BlU3RyaW5nIG1hdGNoZXMKKyAgICAvLyBlbnRyeSBzY29wZSwgdGhlbiByZXR1cm4gcmVnaXN0cmF0aW9uLgorICAgIGlmIChlbnRyeS5maXJzdCA9PSByZWdpc3RyYXRpb25fa2V5KSB7CisgICAgICByZXR1cm4gZW50cnkuc2Vjb25kLmdldCgpOworICAgIH0KKyAgfQorCisgIC8vIDUuIFJldHVybiBudWxsLgorICByZXR1cm4gbnVsbHB0cjsKK30KKworU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogU2VydmljZVdvcmtlckpvYnM6OlNldFJlZ2lzdHJhdGlvbigKKyAgICBjb25zdCB1cmw6Ok9yaWdpbiYgc3RvcmFnZV9rZXksIGNvbnN0IEdVUkwmIHNjb3BlLAorICAgIGNvbnN0IFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSYgdXBkYXRlX3ZpYV9jYWNoZSkgeworICAvLyBBbGdvcml0aG0gZm9yICdTZXQgUmVnaXN0cmF0aW9uJzoKKyAgLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc2V0LXJlZ2lzdHJhdGlvbi1hbGdvcml0aG0KKyAgRENIRUNLX0VRKG1lc3NhZ2VfbG9vcCgpLCBiYXNlOjpNZXNzYWdlTG9vcDo6Y3VycmVudCgpKTsKKworICAvLyAxLiBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhdG9taWNhbGx5LgorICBiYXNlOjpBdXRvTG9jayBsb2NrKHJlZ2lzdHJhdGlvbl9tYXBfbXV0ZXhfKTsKKworICAvLyAyLiBMZXQgc2NvcGVTdHJpbmcgYmUgc2VyaWFsaXplZCBzY29wZSB3aXRoIHRoZSBleGNsdWRlIGZyYWdtZW50IGZsYWcgc2V0LgorICBzdGQ6OnN0cmluZyBzY29wZV9zdHJpbmcgPSBTZXJpYWxpemVFeGNsdWRpbmdGcmFnbWVudChzY29wZSk7CisKKyAgLy8gMy4gTGV0IHJlZ2lzdHJhdGlvbiBiZSBhIG5ldyBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb24gd2hvc2Ugc3RvcmFnZSBrZXkKKyAgLy8gaXMgc2V0IHRvIHN0b3JhZ2Uga2V5LCBzY29wZSB1cmwgaXMgc2V0IHRvIHNjb3BlLCBhbmQgdXBkYXRlIHZpYSBjYWNoZSBtb2RlCisgIC8vIGlzIHNldCB0byB1cGRhdGVWaWFDYWNoZS4KKyAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKAorICAgICAgbmV3IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3Qoc3RvcmFnZV9rZXksIHNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3ZpYV9jYWNoZSkpOworCisgIC8vIDQuIFNldCByZWdpc3RyYXRpb24gbWFwWyhzdG9yYWdlIGtleSwgc2NvcGVTdHJpbmcpXSB0byByZWdpc3RyYXRpb24uCisgIFJlZ2lzdHJhdGlvbktleSByZWdpc3RyYXRpb25fa2V5KHN0b3JhZ2Vfa2V5LCBzY29wZV9zdHJpbmcpOworICByZWdpc3RyYXRpb25fbWFwXy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoCisgICAgICByZWdpc3RyYXRpb25fa2V5LAorICAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3Q+KHJlZ2lzdHJhdGlvbikpKTsKKworICAvLyA1LiBSZXR1cm4gcmVnaXN0cmF0aW9uLgorICByZXR1cm4gcmVnaXN0cmF0aW9uOworfQorCisvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZ2V0LW5ld2VzdC13b3JrZXIKK1NlcnZpY2VXb3JrZXIqIFNlcnZpY2VXb3JrZXJKb2JzOjpHZXROZXdlc3RXb3JrZXIoCisgICAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKSB7CisgIE5PVElNUExFTUVOVEVEKCk7CisgIHJldHVybiBudWxscHRyOworfQorCitTZXJ2aWNlV29ya2VySm9iczo6Sm9iUHJvbWlzZVR5cGU6OkpvYlByb21pc2VUeXBlKAorICAgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OlZhbHVlUHJvbWlzZUJvb2w6OlJlZmVyZW5jZT4gcHJvbWlzZV9yZWZlcmVuY2UpCisgICAgOiBwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXyhzdGQ6Om1vdmUocHJvbWlzZV9yZWZlcmVuY2UpKSB7fQorU2VydmljZVdvcmtlckpvYnM6OkpvYlByb21pc2VUeXBlOjpKb2JQcm9taXNlVHlwZSgKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpWYWx1ZVByb21pc2VXcmFwcGFibGU6OlJlZmVyZW5jZT4gcHJvbWlzZV9yZWZlcmVuY2UpCisgICAgOiBwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfKHN0ZDo6bW92ZShwcm9taXNlX3JlZmVyZW5jZSkpIHt9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OkpvYlByb21pc2VUeXBlOjpSZXNvbHZlKGNvbnN0IGJvb2wgcmVzdWx0KSB7CisgIERDSEVDSyhwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXyk7CisgIHByb21pc2VfYm9vbF9yZWZlcmVuY2VfLT52YWx1ZSgpLlJlc29sdmUocmVzdWx0KTsKK30KKwordm9pZCBTZXJ2aWNlV29ya2VySm9iczo6Sm9iUHJvbWlzZVR5cGU6OlJlc29sdmUoCisgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uPiYgcmVzdWx0KSB7CisgIERDSEVDSyhwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfKTsKKyAgcHJvbWlzZV93cmFwcGFibGVfcmVmZXJlbmNlXy0+dmFsdWUoKS5SZXNvbHZlKHJlc3VsdCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OkpvYlByb21pc2VUeXBlOjpSZWplY3QoCisgICAgc2NyaXB0OjpTaW1wbGVFeGNlcHRpb25UeXBlIGV4Y2VwdGlvbikgeworICBpZiAocHJvbWlzZV9ib29sX3JlZmVyZW5jZV8pIHsKKyAgICBwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXy0+dmFsdWUoKS5SZWplY3QoZXhjZXB0aW9uKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKHByb21pc2Vfd3JhcHBhYmxlX3JlZmVyZW5jZV8pIHsKKyAgICBwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfLT52YWx1ZSgpLlJlamVjdChleGNlcHRpb24pOworICAgIHJldHVybjsKKyAgfQorICBOT1RSRUFDSEVEKCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlckpvYnM6OkpvYlByb21pc2VUeXBlOjpSZWplY3QoCisgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxzY3JpcHQ6OlNjcmlwdEV4Y2VwdGlvbj4mIHJlc3VsdCkgeworICBpZiAocHJvbWlzZV9ib29sX3JlZmVyZW5jZV8pIHsKKyAgICBwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXy0+dmFsdWUoKS5SZWplY3QocmVzdWx0KTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKHByb21pc2Vfd3JhcHBhYmxlX3JlZmVyZW5jZV8pIHsKKyAgICBwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfLT52YWx1ZSgpLlJlamVjdChyZXN1bHQpOworICAgIHJldHVybjsKKyAgfQorICBOT1RSRUFDSEVEKCk7Cit9CisKK3NjcmlwdDo6UHJvbWlzZVN0YXRlIFNlcnZpY2VXb3JrZXJKb2JzOjpKb2JQcm9taXNlVHlwZTo6U3RhdGUoKSB7CisgIGlmIChwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXykgeworICAgIHJldHVybiBwcm9taXNlX2Jvb2xfcmVmZXJlbmNlXy0+dmFsdWUoKS5TdGF0ZSgpOworICB9CisgIGlmIChwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfKSB7CisgICAgcmV0dXJuIHByb21pc2Vfd3JhcHBhYmxlX3JlZmVyZW5jZV8tPnZhbHVlKCkuU3RhdGUoKTsKKyAgfQorICBOT1RSRUFDSEVEKCk7CisgIHJldHVybiBzY3JpcHQ6OlByb21pc2VTdGF0ZTo6a1BlbmRpbmc7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfam9icy5oIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9qb2JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3YjBlNAotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfam9icy5oCkBAIC0wLDAgKzEsMjY4IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX1dPUktFUl9TRVJWSUNFX1dPUktFUl9KT0JTX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfSk9CU19IXworCisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxxdWV1ZT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAiYmFzZS9zeW5jaHJvbml6YXRpb24vbG9jay5oIgorI2luY2x1ZGUgImJhc2UvdGFzay9zZXF1ZW5jZV9tYW5hZ2VyL21vdmVhYmxlX2F1dG9fbG9jay5oIgorI2luY2x1ZGUgImNvYmFsdC9kb20vZG9tX2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC9uZXR3b3JrL25ldHdvcmtfbW9kdWxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9leGNlcHRpb25fbWVzc2FnZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvcHJvbWlzZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3ZhbHVlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uX29iamVjdC5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfdXBkYXRlX3ZpYV9jYWNoZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyX3R5cGUuaCIKKyNpbmNsdWRlICJ1cmwvZ3VybC5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCisvLyBBbGdvcml0aG1zIGZvciBTZXJ2aWNlIFdvcmtlciBKb2JzLgorLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jYWxnb3JpdGhtcworY2xhc3MgU2VydmljZVdvcmtlckpvYnMgeworIHB1YmxpYzoKKyAgU2VydmljZVdvcmtlckpvYnMobmV0d29yazo6TmV0d29ya01vZHVsZSogbmV0d29ya19tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3ApOworICB+U2VydmljZVdvcmtlckpvYnMoKTsKKworICBiYXNlOjpNZXNzYWdlTG9vcCogbWVzc2FnZV9sb29wKCkgeyByZXR1cm4gbWVzc2FnZV9sb29wXzsgfQorICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZSgpIHsgcmV0dXJuIG5ldHdvcmtfbW9kdWxlXzsgfQorCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzdGFydC1yZWdpc3Rlci1hbGdvcml0aG0KKyAgdm9pZCBTdGFydFJlZ2lzdGVyKGNvbnN0IGJhc2U6Ok9wdGlvbmFsPEdVUkw+JiBzY29wZV91cmwsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBHVVJMJiBzY3JpcHRfdXJsLAorICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHNjcmlwdDo6VmFsdWVQcm9taXNlV3JhcHBhYmxlOjpSZWZlcmVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZV9yZWZlcmVuY2UsCisgICAgICAgICAgICAgICAgICAgICB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MqIGNsaWVudCwgY29uc3QgV29ya2VyVHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSYgdXBkYXRlX3ZpYV9jYWNoZSk7CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3Njb3BlLW1hdGNoLWFsZ29yaXRobQorICB2b2lkIE1hdGNoU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbihjb25zdCBHVVJMJiBjbGllbnRfdXJsKTsKKworIHByaXZhdGU6CisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tam9iLXR5cGUKKyAgZW51bSBKb2JUeXBlIHsga1JlZ2lzdGVyLCBrVXBkYXRlLCBrVW5yZWdpc3RlciB9OworCisgIGNsYXNzIEpvYlF1ZXVlOworCisgIC8vIFRoaXMgdHlwZSBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgcHJvbWlzZSB2YXJpYW50cyB1c2VkIGluIGpvYnMuCisgIGNsYXNzIEpvYlByb21pc2VUeXBlIHsKKyAgIHB1YmxpYzoKKyAgICAvLyBDb25zdHJ1Y3RvcnMgZm9yIGVhY2ggcHJvbWlzZSB2YXJpYW50IHRoYXQgY2FuIGJlIGhlbGQuCisgICAgZXhwbGljaXQgSm9iUHJvbWlzZVR5cGUoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OlZhbHVlUHJvbWlzZUJvb2w6OlJlZmVyZW5jZT4gcHJvbWlzZV9yZWZlcmVuY2UpOworICAgIGV4cGxpY2l0IEpvYlByb21pc2VUeXBlKAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpWYWx1ZVByb21pc2VXcmFwcGFibGU6OlJlZmVyZW5jZT4KKyAgICAgICAgICAgIHByb21pc2VfcmVmZXJlbmNlKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBQcm9taXNlUmVmZXJlbmNlPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Sm9iUHJvbWlzZVR5cGU+IENyZWF0ZSgKKyAgICAgICAgUHJvbWlzZVJlZmVyZW5jZSBwcm9taXNlX3JlZmVyZW5jZSkgeworICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxKb2JQcm9taXNlVHlwZT4oCisgICAgICAgICAgbmV3IEpvYlByb21pc2VUeXBlKHN0ZDo6bW92ZShwcm9taXNlX3JlZmVyZW5jZSkpKTsKKyAgICB9CisKKyAgICB2b2lkIFJlc29sdmUoY29uc3QgYm9vbCByZXN1bHQpOworICAgIHZvaWQgUmVzb2x2ZShjb25zdCBzY29wZWRfcmVmcHRyPFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24+JiByZXN1bHQpOworICAgIHZvaWQgUmVqZWN0KHNjcmlwdDo6U2ltcGxlRXhjZXB0aW9uVHlwZSBleGNlcHRpb24pOworICAgIHZvaWQgUmVqZWN0KGNvbnN0IHNjb3BlZF9yZWZwdHI8c2NyaXB0OjpTY3JpcHRFeGNlcHRpb24+JiByZXN1bHQpOworCisgICAgc2NyaXB0OjpQcm9taXNlU3RhdGUgU3RhdGUoKTsKKworICAgcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8c2NyaXB0OjpWYWx1ZVByb21pc2VCb29sOjpSZWZlcmVuY2U+CisgICAgICAgIHByb21pc2VfYm9vbF9yZWZlcmVuY2VfOworICAgIHN0ZDo6dW5pcXVlX3B0cjxzY3JpcHQ6OlZhbHVlUHJvbWlzZVdyYXBwYWJsZTo6UmVmZXJlbmNlPgorICAgICAgICBwcm9taXNlX3dyYXBwYWJsZV9yZWZlcmVuY2VfOworICB9OworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tam9iCisgIHN0cnVjdCBKb2IgeworICAgIEpvYihKb2JUeXBlIHR5cGUsIGNvbnN0IHVybDo6T3JpZ2luJiBzdG9yYWdlX2tleSwgY29uc3QgR1VSTCYgc2NvcGVfdXJsLAorICAgICAgICBjb25zdCBHVVJMJiBzY3JpcHRfdXJsLCBzdGQ6OnVuaXF1ZV9wdHI8Sm9iUHJvbWlzZVR5cGU+IHByb21pc2UsCisgICAgICAgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogY2xpZW50KQorICAgICAgICA6IHR5cGUodHlwZSksCisgICAgICAgICAgc3RvcmFnZV9rZXkoc3RvcmFnZV9rZXkpLAorICAgICAgICAgIHNjb3BlX3VybChzY29wZV91cmwpLAorICAgICAgICAgIHNjcmlwdF91cmwoc2NyaXB0X3VybCksCisgICAgICAgICAgcHJvbWlzZShzdGQ6Om1vdmUocHJvbWlzZSkpLAorICAgICAgICAgIGNsaWVudChjbGllbnQpIHt9CisgICAgfkpvYigpIHsKKyAgICAgIGNsaWVudCA9IG51bGxwdHI7CisgICAgICBjb250YWluaW5nX2pvYl9xdWV1ZSA9IG51bGxwdHI7CisgICAgfQorICAgIEpvYlR5cGUgdHlwZTsKKyAgICB1cmw6Ok9yaWdpbiBzdG9yYWdlX2tleTsKKyAgICBHVVJMIHNjb3BlX3VybDsKKyAgICBHVVJMIHNjcmlwdF91cmw7CisgICAgc3RkOjp1bmlxdWVfcHRyPEpvYlByb21pc2VUeXBlPiBwcm9taXNlOworICAgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogY2xpZW50OworICAgIFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSB1cGRhdGVfdmlhX2NhY2hlOworICAgIEpvYlF1ZXVlKiBjb250YWluaW5nX2pvYl9xdWV1ZSA9IG51bGxwdHI7CisgICAgc3RkOjpkZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8Sm9iPj4gZXF1aXZhbGVudF9qb2JzOworICAgIEdVUkwgcmVmZXJyZXI7CisKKyAgICAvLyBUaGlzIGxvY2sgaXMgZm9yIHRoZSBsaXN0IG9mIGVxdWl2YWxlbnQgam9icy4gSXQgc2hvdWxkIGFsc28gYmUgaGVsZCB3aGVuCisgICAgLy8gcmVzb2x2aW5nIHRoZSBwcm9taXNlLgorICAgIGJhc2U6OkxvY2sgZXF1aXZhbGVudF9qb2JzX3Byb21pc2VfbXV0ZXg7CisgIH07CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1qb2ItcXVldWUKKyAgY2xhc3MgSm9iUXVldWUgeworICAgcHVibGljOgorICAgIGJvb2wgZW1wdHkoKSB7CisgICAgICBiYXNlOjpBdXRvTG9jayBsb2NrKG11dGV4Xyk7CisgICAgICByZXR1cm4gam9ic18uZW1wdHkoKTsKKyAgICB9CisgICAgdm9pZCBFbnF1ZXVlKHN0ZDo6dW5pcXVlX3B0cjxKb2I+IGpvYikgeworICAgICAgYmFzZTo6QXV0b0xvY2sgbG9jayhtdXRleF8pOworICAgICAgam9ic18ucHVzaChzdGQ6Om1vdmUoam9iKSk7CisgICAgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxKb2I+IERlcXVldWUoKSB7CisgICAgICBiYXNlOjpBdXRvTG9jayBsb2NrKG11dGV4Xyk7CisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Sm9iPiBqb2I7CisgICAgICBqb2Iuc3dhcChqb2JzXy5mcm9udCgpKTsKKyAgICAgIGpvYnNfLnBvcCgpOworICAgICAgcmV0dXJuIGpvYjsKKyAgICB9CisgICAgSm9iKiBGaXJzdEl0ZW0oKSB7CisgICAgICBiYXNlOjpBdXRvTG9jayBsb2NrKG11dGV4Xyk7CisgICAgICByZXR1cm4gam9ic18uZW1wdHkoKSA/IG51bGxwdHIgOiBqb2JzXy5mcm9udCgpLmdldCgpOworICAgIH0KKworICAgIC8vIEFsc28gcmV0dXJuIGEgaGVsZCBhdXRvbG9jaywgdG8gZW5zdXJlIHRoZSBpdGVtIHJlbWFpbnMgYSB2YWxpZCBpdGVtIGluCisgICAgLy8gdGhlIHF1ZXVlIHdoaWxlIGl0J3MgaW4gdXNlLgorICAgIHN0ZDo6cGFpcjxKb2IqLCBiYXNlOjpzZXF1ZW5jZV9tYW5hZ2VyOjpNb3ZlYWJsZUF1dG9Mb2NrPiBMYXN0SXRlbSgpIHsKKyAgICAgIGJhc2U6OnNlcXVlbmNlX21hbmFnZXI6Ok1vdmVhYmxlQXV0b0xvY2sgbG9jayhtdXRleF8pOworICAgICAgSm9iKiBqb2IgPSBqb2JzXy5lbXB0eSgpID8gbnVsbHB0ciA6IGpvYnNfLmJhY2soKS5nZXQoKTsKKyAgICAgIHJldHVybiBzdGQ6OnBhaXI8Sm9iKiwgYmFzZTo6c2VxdWVuY2VfbWFuYWdlcjo6TW92ZWFibGVBdXRvTG9jaz4oCisgICAgICAgICAgam9iLCBzdGQ6Om1vdmUobG9jaykpOworICAgIH0KKworICAgcHJpdmF0ZToKKyAgICBiYXNlOjpMb2NrIG11dGV4XzsKKyAgICBzdGQ6OnF1ZXVlPHN0ZDo6dW5pcXVlX3B0cjxKb2I+PiBqb2JzXzsKKyAgfTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXNjb3BlLXRvLWpvYi1xdWV1ZS1tYXAKKyAgdXNpbmcgSm9iUXVldWVNYXAgPSBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEpvYlF1ZXVlPj47CisKKyAgLy8gVHlwZSB0byBob2xkIHRoZSBlcnJvckRhdGEgZm9yIHJlamVjdGlvbiBvZiBwcm9taXNlcy4KKyAgY2xhc3MgUHJvbWlzZUVycm9yRGF0YSB7CisgICBwdWJsaWM6CisgICAgZXhwbGljaXQgUHJvbWlzZUVycm9yRGF0YShjb25zdCBzY3JpcHQ6Ok1lc3NhZ2VUeXBlJiBtZXNzYWdlX3R5cGUpCisgICAgICAgIDogbWVzc2FnZV90eXBlXyhtZXNzYWdlX3R5cGUpLAorICAgICAgICAgIGV4Y2VwdGlvbl9jb2RlXyhkb206OkRPTUV4Y2VwdGlvbjo6a05vbmUpIHt9CisgICAgUHJvbWlzZUVycm9yRGF0YShjb25zdCBkb206OkRPTUV4Y2VwdGlvbjo6RXhjZXB0aW9uQ29kZSYgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1lc3NhZ2VfdHlwZV8oc2NyaXB0OjprTm9FcnJvciksCisgICAgICAgICAgZXhjZXB0aW9uX2NvZGVfKGNvZGUpLAorICAgICAgICAgIG1lc3NhZ2VfKG1lc3NhZ2UpIHt9CisKKyAgICB2b2lkIFJlamVjdChzdGQ6OnVuaXF1ZV9wdHI8Sm9iUHJvbWlzZVR5cGU+IHByb21pc2UpIGNvbnN0OworCisgICBwcml2YXRlOgorICAgIC8vIFVzZSBzY3JpcHQ6Ok1lc3NhZ2VUeXBlIGJlY2F1c2UgaXQgY2FuIGhvbGQga05vRXJyb3IgdmFsdWUgdG8gZGlzdGluZ3Vpc2gKKyAgICAvLyBiZXR3ZWVuIHNpbXBsZSBleGNlcHRpb25zIGFuZCBET00gZXhjZXB0aW9ucy4KKyAgICBzY3JpcHQ6Ok1lc3NhZ2VUeXBlIG1lc3NhZ2VfdHlwZV87CisgICAgY29uc3QgZG9tOjpET01FeGNlcHRpb246OkV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uX2NvZGVfOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOworICB9OworCisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NyZWF0ZS1qb2IKKyAgc3RkOjp1bmlxdWVfcHRyPEpvYj4gQ3JlYXRlSm9iKEpvYlR5cGUgdHlwZSwgY29uc3QgdXJsOjpPcmlnaW4mIHN0b3JhZ2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1VSTCYgc2NvcGVfdXJsLCBjb25zdCBHVVJMJiBzY3JpcHRfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEpvYlByb21pc2VUeXBlPiBwcm9taXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKiBjbGllbnQpOworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzY2hlZHVsZS1qb2IKKyAgdm9pZCBTY2hlZHVsZUpvYihzdGQ6OnVuaXF1ZV9wdHI8Sm9iPiBqb2IpOworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tam9iLWVxdWl2YWxlbnQKKyAgYm9vbCBFcXVpdmFsZW50Sm9icyhKb2IqIG9uZSwgSm9iKiB0d28pOworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNydW4tam9iLWFsZ29yaXRobQorICB2b2lkIFJ1bkpvYihKb2JRdWV1ZSogam9iX3F1ZXVlKTsKKworICAvLyBUYXNrIGZvciAiUnVuIEpvYiIgdG8gcnVuIGluIHRoZSBzZXJ2aWNlIHdvcmtlciB0aHJlYWQuCisgIHZvaWQgUnVuSm9iVGFzayhKb2JRdWV1ZSogam9iX3F1ZXVlKTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVnaXN0ZXItYWxnb3JpdGhtCisgIHZvaWQgUmVnaXN0ZXIoSm9iKiBqb2IpOworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyN1cGRhdGUtYWxnb3JpdGhtCisgIHZvaWQgVXBkYXRlKEpvYiogam9iKTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jdW5yZWdpc3Rlci1hbGdvcml0aG0KKyAgdm9pZCBVbnJlZ2lzdGVyKEpvYiogam9iKTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVqZWN0LWpvYi1wcm9taXNlCisgIHZvaWQgUmVqZWN0Sm9iUHJvbWlzZShKb2IqIGpvYiwgY29uc3QgUHJvbWlzZUVycm9yRGF0YSYgZXJyb3JfZGF0YSk7CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3Jlc29sdmUtam9iLXByb21pc2UtYWxnb3JpdGhtCisgIHZvaWQgUmVzb2x2ZUpvYlByb21pc2UoSm9iKiBqb2IsIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QqIHZhbHVlKTsKKyAgdm9pZCBSZXNvbHZlSm9iUHJvbWlzZVRhc2soSm9iVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Sm9iUHJvbWlzZVR5cGU+IHByb21pc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiB2YWx1ZSk7CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2ZpbmlzaC1qb2ItYWxnb3JpdGhtCisgIHZvaWQgRmluaXNoSm9iKEpvYiogam9iKTsKKworICAvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZ2V0LXJlZ2lzdHJhdGlvbi1hbGdvcml0aG0KKyAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogR2V0UmVnaXN0cmF0aW9uKAorICAgICAgY29uc3QgdXJsOjpPcmlnaW4mIHN0b3JhZ2Vfa2V5LCBjb25zdCBHVVJMJiBzY29wZSk7CisKKyAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3NldC1yZWdpc3RyYXRpb24tYWxnb3JpdGhtCisgIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QqIFNldFJlZ2lzdHJhdGlvbigKKyAgICAgIGNvbnN0IHVybDo6T3JpZ2luJiBzdG9yYWdlX2tleSwgY29uc3QgR1VSTCYgc2NvcGUsCisgICAgICBjb25zdCBTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUmIHVwZGF0ZV92aWFfY2FjaGUpOworCisgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNnZXQtbmV3ZXN0LXdvcmtlcgorICBTZXJ2aWNlV29ya2VyKiBHZXROZXdlc3RXb3JrZXIoU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKTsKKworICBuZXR3b3JrOjpOZXR3b3JrTW9kdWxlKiBuZXR3b3JrX21vZHVsZV87CisgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3BfOworCisgIEpvYlF1ZXVlTWFwIGpvYl9xdWV1ZV9tYXBfOworCisgIC8vIEEgcmVnaXN0cmF0aW9uIG1hcCBpcyBhbiBvcmRlcmVkIG1hcCB3aGVyZSB0aGUga2V5cyBhcmUgKHN0b3JhZ2Uga2V5LAorICAvLyBzZXJpYWxpemVkIHNjb3BlIHVybHMpIGFuZCB0aGUgdmFsdWVzIGFyZSBzZXJ2aWNlIHdvcmtlciByZWdpc3RyYXRpb25zLgorICAvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tc2NvcGUtdG8tcmVnaXN0cmF0aW9uLW1hcAorICB1c2luZyBSZWdpc3RyYXRpb25LZXkgPSBzdGQ6OnBhaXI8dXJsOjpPcmlnaW4sIHN0ZDo6c3RyaW5nPjsKKyAgc3RkOjptYXA8UmVnaXN0cmF0aW9uS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdD4+CisgICAgICByZWdpc3RyYXRpb25fbWFwXzsKKworICAvLyBUaGlzIGxvY2sgaXMgdG8gYWxsb3cgYXRvbWljIG9wZXJhdGlvbnMgb24gdGhlIHJlZ2lzdHJhdGlvbiBtYXAuCisgIGJhc2U6OkxvY2sgcmVnaXN0cmF0aW9uX21hcF9tdXRleF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9TRVJWSUNFX1dPUktFUl9KT0JTX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX29iamVjdC5jYyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfb2JqZWN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTNkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX29iamVjdC5jYwpAQCAtMCwwICsxLDIzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX29iamVjdC5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCitTZXJ2aWNlV29ya2VyT2JqZWN0OjpTZXJ2aWNlV29ya2VyT2JqZWN0KCkge30KKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9vYmplY3QuaCBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNWUxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfb2JqZWN0LmgKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfT0JKRUNUX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfT0JKRUNUX0hfCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3N0YXRlLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSAnc2VydmljZSB3b3JrZXInLgorLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXNlcnZpY2Utd29ya2VyCisvLyBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgU2VydmljZVdvcmtlciBKYXZhU2NyaXB0IG9iamVjdCwgIHRoaXMgcmVwcmVzZW50cworLy8gdGhlIHNlcnZpY2Ugd29ya2VyIGluIHRoZSBicm93c2VyLCBpbmRlcGVuZGVudCBmcm9tIHRoZSBKYXZhU2NyaXB0IHJlYWxtLgorLy8gVGhlIGxpZmV0aW1lIG9mIGEgc2VydmljZSB3b3JrZXIgaXMgdGllZCB0byB0aGUgZXhlY3V0aW9uIGxpZmV0aW1lIG9mIGV2ZW50cworLy8gYW5kIG5vdCByZWZlcmVuY2VzIGhlbGQgYnkgc2VydmljZSB3b3JrZXIgY2xpZW50cyB0byB0aGUgU2VydmljZVdvcmtlcgorLy8gb2JqZWN0LiBBIHVzZXIgYWdlbnQgbWF5IHRlcm1pbmF0ZSBzZXJ2aWNlIHdvcmtlcnMgYXQgYW55IHRpbWUgaXQgaGFzIG5vCisvLyBldmVudCB0byBoYW5kbGUsIG9yIGRldGVjdHMgYWJub3JtYWwgb3BlcmF0aW9uLgorLy8gICBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc2VydmljZS13b3JrZXItbGlmZXRpbWUKK2NsYXNzIFNlcnZpY2VXb3JrZXJPYmplY3QgeworIHB1YmxpYzoKKyAgU2VydmljZVdvcmtlck9iamVjdCgpOworICB+U2VydmljZVdvcmtlck9iamVjdCgpIHt9CisKKyAgU2VydmljZVdvcmtlclN0YXRlIHN0YXRlKCkgeyByZXR1cm4gc3RhdGVfOyB9CisKKyBwcml2YXRlOgorICBTZXJ2aWNlV29ya2VyU3RhdGUgc3RhdGVfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfT0JKRUNUX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5jYyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWViZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5jYwpAQCAtMCwwICsxLDcyIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oIgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImNvYmFsdC93ZWIvY29udGV4dC5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigKKyAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAorICAgIHdvcmtlcjo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCogcmVnaXN0cmF0aW9uKQorICAgIDogZG9tOjpFdmVudFRhcmdldChzZXR0aW5ncyksIHJlZ2lzdHJhdGlvbl8ocmVnaXN0cmF0aW9uKSB7fQorCitzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246OlVwZGF0ZSgpIHsKKyAgLy8gVG9kbzogQWRkIGxvZ2ljIGZvciB1cGRhdGUoKQorICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IHByb21pc2UgPQorICAgICAgYmFzZTo6cG9seW1vcnBoaWNfZG93bmNhc3Q8d2ViOjpFbnZpcm9ubWVudFNldHRpbmdzKj4oCisgICAgICAgICAgZW52aXJvbm1lbnRfc2V0dGluZ3MoKSkKKyAgICAgICAgICAtPmNvbnRleHQoKQorICAgICAgICAgIC0+Z2xvYmFsX2Vudmlyb25tZW50KCkKKyAgICAgICAgICAtPnNjcmlwdF92YWx1ZV9mYWN0b3J5KCkKKyAgICAgICAgICAtPkNyZWF0ZUJhc2ljUHJvbWlzZTx2b2lkPigpOworICByZXR1cm4gcHJvbWlzZTsKK30KKworc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlPHZvaWQ+PiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uOjpVbnJlZ2lzdGVyKCkgeworICAvLyBUb2RvOiBBZGQgbG9naWMgZm9yIHVucmVnaXN0ZXIKKyAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpQcm9taXNlPHZvaWQ+PiBwcm9taXNlID0KKyAgICAgIGJhc2U6OnBvbHltb3JwaGljX2Rvd25jYXN0PHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncyo+KAorICAgICAgICAgIGVudmlyb25tZW50X3NldHRpbmdzKCkpCisgICAgICAgICAgLT5jb250ZXh0KCkKKyAgICAgICAgICAtPmdsb2JhbF9lbnZpcm9ubWVudCgpCisgICAgICAgICAgLT5zY3JpcHRfdmFsdWVfZmFjdG9yeSgpCisgICAgICAgICAgLT5DcmVhdGVCYXNpY1Byb21pc2U8dm9pZD4oKTsKKyAgcmV0dXJuIHByb21pc2U7Cit9CisKK3N0ZDo6c3RyaW5nIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246OnNjb3BlKCkgY29uc3QgeworICByZXR1cm4gcmVnaXN0cmF0aW9uXy0+c2NvcGVfdXJsKCkuR2V0Q29udGVudCgpOworfQorCitTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjo6dXBkYXRlX3ZpYV9jYWNoZSgpCisgICAgY29uc3QgeworICByZXR1cm4gcmVnaXN0cmF0aW9uXy0+dXBkYXRlX3ZpYV9jYWNoZV9tb2RlKCk7Cit9CisKK3ZvaWQgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjo6RW5hYmxlTmF2aWdhdGlvblByZWxvYWQoYm9vbCBlbmFibGUpIHsKKyAgLy8gVG9kbzogSW1wbGVtZW50IHRoZSBsb2dpYyBmb3Igc2V0IGhlYWRlcgorfQorCit2b2lkIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246OlNldE5hdmlnYXRpb25QcmVsb2FkSGVhZGVyKCkgeworICAvLyBUb2RvOiBJbXBsZW1lbnQgdGhlIGxvZ2ljIGZvciBzZXQgaGVhZGVyCit9CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmggYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2ZkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbi5oCkBAIC0wLDAgKzEsOTAgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBDT0JBTFRfV09SS0VSX1NFUlZJQ0VfV09SS0VSX1JFR0lTVFJBVElPTl9IXworI2RlZmluZSBDT0JBTFRfV09SS0VSX1NFUlZJQ0VfV09SS0VSX1JFR0lTVFJBVElPTl9IXworCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCisjaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3NjcmlwdF92YWx1ZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3ZhbHVlX2ZhY3RvcnkuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3dyYXBwYWJsZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvbmF2aWdhdGlvbl9wcmVsb2FkX21hbmFnZXIuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9zdGF0ZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfdXBkYXRlX3ZpYV9jYWNoZS5oIgorI2luY2x1ZGUgInVybC9ndXJsLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIFRoZSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uIGludGVyZmFjZSByZXByZXNlbnRzIGEgc2VydmljZSB3b3JrZXIKKy8vIHJlZ2lzdHJhdGlvbiB3aXRoaW4gYSBzZXJ2aWNlIHdvcmtlciBjbGllbnQgcmVhbG0uCisvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNld29ya2VyLWludGVyZmFjZQorY2xhc3MgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiA6IHB1YmxpYyBkb206OkV2ZW50VGFyZ2V0IHsKKyBwdWJsaWM6CisgIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24oCisgICAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzLAorICAgICAgd29ya2VyOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT2JqZWN0KiByZWdpc3RyYXRpb24pOworICB+U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbigpIG92ZXJyaWRlID0gZGVmYXVsdDsKKworICB2b2lkIHNldF9pbnN0YWxsaW5nKHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gd29ya2VyKSB7CisgICAgaW5zdGFsbGluZ18gPSB3b3JrZXI7CisgIH0KKyAgc2NvcGVkX3JlZnB0cjxTZXJ2aWNlV29ya2VyPiBpbnN0YWxsaW5nKCkgY29uc3QgeyByZXR1cm4gaW5zdGFsbGluZ187IH0KKyAgdm9pZCBzZXRfd2FpdGluZyhzY29wZWRfcmVmcHRyPFNlcnZpY2VXb3JrZXI+IHdvcmtlcikgeyB3YWl0aW5nXyA9IHdvcmtlcjsgfQorICBzY29wZWRfcmVmcHRyPFNlcnZpY2VXb3JrZXI+IHdhaXRpbmcoKSBjb25zdCB7IHJldHVybiB3YWl0aW5nXzsgfQorICB2b2lkIHNldF9hY3RpdmUoc2NvcGVkX3JlZnB0cjxTZXJ2aWNlV29ya2VyPiB3b3JrZXIpIHsgYWN0aXZlXyA9IHdvcmtlcjsgfQorICBzY29wZWRfcmVmcHRyPFNlcnZpY2VXb3JrZXI+IGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIGFjdGl2ZV87IH0KKyAgc2NvcGVkX3JlZnB0cjxOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXI+IG5hdmlnYXRpb25fcHJlbG9hZCgpIHsKKyAgICByZXR1cm4gbmF2aWdhdGlvbl9wcmVsb2FkXzsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIHNjb3BlKCkgY29uc3Q7CisgIFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSB1cGRhdGVfdmlhX2NhY2hlKCkgY29uc3Q7CisKKyAgdm9pZCBFbmFibGVOYXZpZ2F0aW9uUHJlbG9hZChib29sIGVuYWJsZSk7CisgIHZvaWQgU2V0TmF2aWdhdGlvblByZWxvYWRIZWFkZXIoKTsKKworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IFVwZGF0ZSgpOworICBzY3JpcHQ6OkhhbmRsZTxzY3JpcHQ6OlByb21pc2U8dm9pZD4+IFVucmVnaXN0ZXIoKTsKKworICBjb25zdCBFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqIG9udXBkYXRlZm91bmQoKSBjb25zdCB7CisgICAgcmV0dXJuIEdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjp1cGRhdGVmb3VuZCgpKTsKKyAgfQorCisgIHZvaWQgc2V0X29udXBkYXRlZm91bmQoY29uc3QgRXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJiBldmVudF9saXN0ZW5lcikgeworICAgIFNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjp1cGRhdGVmb3VuZCgpLCBldmVudF9saXN0ZW5lcik7CisgIH0KKworICBERUZJTkVfV1JBUFBBQkxFX1RZUEUoU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbik7CisKKyBwcml2YXRlOgorICB3b3JrZXI6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QqIHJlZ2lzdHJhdGlvbl87CisgIHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gaW5zdGFsbGluZ187CisgIHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gd2FpdGluZ187CisgIHNjb3BlZF9yZWZwdHI8U2VydmljZVdvcmtlcj4gYWN0aXZlXzsKKyAgc2NvcGVkX3JlZnB0cjxOYXZpZ2F0aW9uUHJlbG9hZE1hbmFnZXI+IG5hdmlnYXRpb25fcHJlbG9hZF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9TRVJWSUNFX1dPUktFUl9SRUdJU1RSQVRJT05fSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmlkbCBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNmZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb24uaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3NlcnZpY2V3b3JrZXJyZWdpc3RyYXRpb24taW50ZXJmYWNlCitbCisgICAgRXhwb3NlZD0oV2luZG93LFNlcnZpY2VXb3JrZXIpCitdIGludGVyZmFjZSBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uIDogRXZlbnRUYXJnZXQgeworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJ2aWNlV29ya2VyPyBpbnN0YWxsaW5nOworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJ2aWNlV29ya2VyPyB3YWl0aW5nOworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTZXJ2aWNlV29ya2VyPyBhY3RpdmU7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5hdmlnYXRpb25QcmVsb2FkTWFuYWdlciBuYXZpZ2F0aW9uUHJlbG9hZDsKKworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBVU1ZTdHJpbmcgc2NvcGU7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSB1cGRhdGVWaWFDYWNoZTsKKworICAgIFByb21pc2U8U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbj4gdXBkYXRlKCk7CisgICAgUHJvbWlzZTxib29sZWFuPiB1bnJlZ2lzdGVyKCk7CisKKyAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9udXBkYXRlZm91bmQ7Cit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmNjIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDgxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbl9vYmplY3QuY2MKQEAgLTAsMCArMSwzMiBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmgiCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3VwZGF0ZV92aWFfY2FjaGUuaCIKKyNpbmNsdWRlICJ1cmwvZ3VybC5oIgorI2luY2x1ZGUgInVybC9vcmlnaW4uaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdDo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCgKKyAgICBjb25zdCB1cmw6Ok9yaWdpbiYgc3RvcmFnZV9rZXksIGNvbnN0IEdVUkwmIHNjb3BlX3VybCwKKyAgICBjb25zdCBTZXJ2aWNlV29ya2VyVXBkYXRlVmlhQ2FjaGUmIHVwZGF0ZV92aWFfY2FjaGVfbW9kZSkKKyAgICA6IHN0b3JhZ2Vfa2V5XyhzdG9yYWdlX2tleSksCisgICAgICBzY29wZV91cmxfKHNjb3BlX3VybCksCisgICAgICB1cGRhdGVfdmlhX2NhY2hlX21vZGVfKHVwZGF0ZV92aWFfY2FjaGVfbW9kZSkge30KKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdApkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmggYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3JlZ2lzdHJhdGlvbl9vYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTgwZWFkCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25fb2JqZWN0LmgKQEAgLTAsMCArMSw2MyBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfUkVHSVNUUkFUSU9OX09CSkVDVF9IXworI2RlZmluZSBDT0JBTFRfV09SS0VSX1NFUlZJQ0VfV09SS0VSX1JFR0lTVFJBVElPTl9PQkpFQ1RfSF8KKworI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfb2JqZWN0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl91cGRhdGVfdmlhX2NhY2hlLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKyNpbmNsdWRlICJ1cmwvb3JpZ2luLmgiCisKK25hbWVzcGFjZSBjb2JhbHQgeworbmFtZXNwYWNlIHdvcmtlciB7CisKKy8vIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgJ3NlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbicuCisvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tc2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9uCisvLyBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbiBKYXZhU2NyaXB0IG9iamVjdCwKKy8vIHRoaXMgcmVwcmVzZW50cyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBzZXJ2aWNlIHdvcmtlciBpbiB0aGUgYnJvd3NlciwKKy8vIGluZGVwZW5kZW50IGZyb20gdGhlIEphdmFTY3JpcHQgcmVhbG0uIFRoZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdCBpcyBiZXlvbmQKKy8vIHRoYXQgb2YgdGhlIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb24gSmF2YVNjcmlwdCBvYmplY3QocykgdGhhdCByZXByZXNlbnQKKy8vIHRoaXMgb2JqZWN0IGluIHRoZWlyIHNlcnZpY2Ugd29ya2VyIGNsaWVudHMuCisvLyAgIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNzZXJ2aWNlLXdvcmtlci1yZWdpc3RyYXRpb24tbGlmZXRpbWUKK2NsYXNzIFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PYmplY3QgeworIHB1YmxpYzoKKyAgU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCgKKyAgICAgIGNvbnN0IHVybDo6T3JpZ2luJiBzdG9yYWdlX2tleSwgY29uc3QgR1VSTCYgc2NvcGVfdXJsLAorICAgICAgY29uc3QgU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlJiB1cGRhdGVfdmlhX2NhY2hlX21vZGUpOworICB+U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbk9iamVjdCgpIHt9CisKKyAgY29uc3QgdXJsOjpPcmlnaW4mIHN0b3JhZ2Vfa2V5KCkgY29uc3QgeyByZXR1cm4gc3RvcmFnZV9rZXlfOyB9CisgIGNvbnN0IEdVUkwmIHNjb3BlX3VybCgpIGNvbnN0IHsgcmV0dXJuIHNjb3BlX3VybF87IH0KKyAgY29uc3QgU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlJiB1cGRhdGVfdmlhX2NhY2hlX21vZGUoKSBjb25zdCB7CisgICAgcmV0dXJuIHVwZGF0ZV92aWFfY2FjaGVfbW9kZV87CisgIH0KKworICBTZXJ2aWNlV29ya2VyT2JqZWN0KiBpbnN0YWxsaW5nX3dvcmtlcigpIGNvbnN0IHsgcmV0dXJuIGluc3RhbGxpbmdfd29ya2VyXzsgfQorICBTZXJ2aWNlV29ya2VyT2JqZWN0KiB3YWl0aW5nX3dvcmtlcigpIGNvbnN0IHsgcmV0dXJuIHdhaXRpbmdfd29ya2VyXzsgfQorICBTZXJ2aWNlV29ya2VyT2JqZWN0KiBhY3RpdmVfd29ya2VyKCkgY29uc3QgeyByZXR1cm4gYWN0aXZlX3dvcmtlcl87IH0KKworIHByaXZhdGU6CisgIGNvbnN0IHVybDo6T3JpZ2luJiBzdG9yYWdlX2tleV87CisgIGNvbnN0IEdVUkwmIHNjb3BlX3VybF87CisgIGNvbnN0IFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZSYgdXBkYXRlX3ZpYV9jYWNoZV9tb2RlXzsKKyAgU2VydmljZVdvcmtlck9iamVjdCogaW5zdGFsbGluZ193b3JrZXJfID0gbnVsbHB0cjsKKyAgU2VydmljZVdvcmtlck9iamVjdCogd2FpdGluZ193b3JrZXJfID0gbnVsbHB0cjsKKyAgU2VydmljZVdvcmtlck9iamVjdCogYWN0aXZlX3dvcmtlcl8gPSBudWxscHRyOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XT1JLRVJfU0VSVklDRV9XT1JLRVJfUkVHSVNUUkFUSU9OX09CSkVDVF9IXwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9zdGF0ZS5pZGwgYi9jb2JhbHQvd29ya2VyL3NlcnZpY2Vfd29ya2VyX3N0YXRlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjllZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl9zdGF0ZS5pZGwKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jc2VydmljZS13b3JrZXItc3RhdGUKKworZW51bSBTZXJ2aWNlV29ya2VyU3RhdGUgeworICAicGFyc2VkIiwKKyAgImluc3RhbGxpbmciLAorICAiaW5zdGFsbGVkIiwKKyAgImFjdGl2YXRpbmciLAorICAiYWN0aXZhdGVkIiwKKyAgInJlZHVuZGFudCIsCit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zZXJ2aWNlX3dvcmtlcl91cGRhdGVfdmlhX2NhY2hlLmlkbCBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfdXBkYXRlX3ZpYV9jYWNoZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjZjgyYQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc2VydmljZV93b3JrZXJfdXBkYXRlX3ZpYV9jYWNoZS5pZGwKQEAgLTAsMCArMSwyMCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZW51bWRlZi1zZXJ2aWNld29ya2VydXBkYXRldmlhY2FjaGUKK2VudW0gU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlIHsKKyAgICAiaW1wb3J0cyIsCisgICAgImFsbCIsCisgICAgIm5vbmUiCit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci9zdHJ1Y3R1cmVkX3NlcmlhbGl6ZV9vcHRpb25zLmlkbCBiL2NvYmFsdC93b3JrZXIvc3RydWN0dXJlZF9zZXJpYWxpemVfb3B0aW9ucy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0ZjNmZgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvc3RydWN0dXJlZF9zZXJpYWxpemVfb3B0aW9ucy5pZGwKQEAgLTAsMCArMSw0IEBACitkaWN0aW9uYXJ5IFN0cnVjdHVyZWRTZXJpYWxpemVPcHRpb25zIHsKKyAgLy9zZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyID0gW107CisgIHNlcXVlbmNlPERPTVN0cmluZz4gdHJhbnNmZXI7Cit9OwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9nb29nbGVfbG9nby5wbmcgYi9jb2JhbHQvd29ya2VyL3Rlc3RkYXRhL2dvb2dsZV9sb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhmZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9nb29nbGVfbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9zZXJ2aWNlLXdvcmtlci5odG1sIGIvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9zZXJ2aWNlLXdvcmtlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTkxNmNiLi4wMDAwMDAwCi0tLSBhL2NvYmFsdC93b3JrZXIvdGVzdGRhdGEvc2VydmljZS13b3JrZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIC8vIERlbW9uc3RyYXRlcyBob3cgdGhlIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyIGFwaSBjYW4gYmUgdXNlZAotICAgIGNvbnN0IHNlcnZpY2VXb3JrZXIgPSBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlcjsKLSAgICBzZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCkudGhlbihyZWdpc3RyYXRpb24gPT4gewotICAgICAgICBjb25zb2xlLmxvZygic3VjY2VzcyEiKTsKLSAgICB9LCBlcnIgPT4gewotICAgICAgICBjb25zb2xlLmVycm9yKCJJbnN0YWxsaW5nIHRoZSB3b3JrZXIgZmFpbGVkISIsIGVycik7Ci0gICAgfSk7Ci0gIDwvc2NyaXB0PgotPC9oZWFkPgotCi08Ym9keT4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvdGVzdGRhdGEvc2VydmljZV93b3JrZXIuaHRtbCBiL2NvYmFsdC93b3JrZXIvdGVzdGRhdGEvc2VydmljZV93b3JrZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJhZWNhCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9zZXJ2aWNlX3dvcmtlci5odG1sCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorICA8dGl0bGU+IFNlcnZpY2Ugd29ya2VyIHRlc3QgPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgIDxoMT5TZXJ2aWNlIHdvcmtlciB0ZXN0PC9oMT4KKyAgPHNlY3Rpb24+PC9zZWN0aW9uPgorICA8c2NyaXB0PgorICAgIGNvbnN0IHNlcnZpY2VXb3JrZXIgPSBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlcjsKKyAgICBzZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvdGVzdGRhdGEvc2VydmljZV93b3JrZXIuanMnKS50aGVuKGZ1bmN0aW9uIChyZWdpc3RyYXRpb24pIHsKKyAgICAgIGNvbnNvbGUubG9nKCJzdWNjZXNzISIpOworICAgICAgaWYgKHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCdIb3dkeSBmcm9tIHlvdXIgaW5zdGFsbGluZyBwYWdlLicpOworICAgICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb24uYWN0aXZlKSB7CisgICAgICAgIGNvbnNvbGUubG9nKCdTZXJ2aWNlIHdvcmtlciBpcyBhY3RpdmUgbm93LicpOworICAgICAgfQorICAgIH0sIGVyciA9PiB7CisgICAgICBjb25zb2xlLmVycm9yKCJJbnN0YWxsaW5nIHRoZSB3b3JrZXIgZmFpbGVkISIsIGVycik7CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiBpbWdMb2FkKHVybCkgeworICAgICAgLy8gcmV0dXJuIGEgcHJvbWlzZSBmb3IgYW4gaW1hZ2UgbG9hZGluZworICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwpOworICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJzsKKworICAgICAgICByZXF1ZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT0gMjAwKSB7CisgICAgICAgICAgICByZXNvbHZlKHJlcXVlc3QucmVzcG9uc2UpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWplY3QoRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHRoZSBpbWFnZTogJyArIHJlcXVlc3Quc3RhdHVzVGV4dCkpOworICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdAorICAgICAgICByZXF1ZXN0LnNlbmQoKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICBpbWdMb2FkKCJnb29nbGVfbG9nby5wbmciKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICB2YXIgbXlJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOworICAgICAgICBteUltYWdlLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHJlc3BvbnNlKTsKKyAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbicpLmFwcGVuZENoaWxkKG15SW1hZ2UpOworICAgICAgfSwgZnVuY3Rpb24gKEVycm9yKSB7CisgICAgICAgIGNvbnNvbGUubG9nKEVycm9yKTsKKyAgICAgIH0pOworICAgIH0KKworICA8L3NjcmlwdD4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci90ZXN0ZGF0YS9zZXJ2aWNlX3dvcmtlci5qcyBiL2NvYmFsdC93b3JrZXIvdGVzdGRhdGEvc2VydmljZV93b3JrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyOTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvdGVzdGRhdGEvc2VydmljZV93b3JrZXIuanMKQEAgLTAsMCArMSwyOSBAQAorc2VsZi5hZGRFdmVudExpc3RlbmVyKCdpbnN0YWxsJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgIGV2ZW50LndhaXRVbnRpbCgKKyAgICBjYWNoZXMub3BlbigndjEnKS50aGVuKGZ1bmN0aW9uIChjYWNoZSkgeworICAgICAgY29uc29sZS5sb2coImNhY2hlIiwgY2FjaGUpOworICAgICAgcmV0dXJuIGNhY2hlLmFkZEFsbChbCisgICAgICAgICcvdGVzdGRhdGEvJywKKyAgICAgICAgJy90ZXN0ZGF0YS9zZXJ2aWNlX3dvcmtlci5odG1sJywKKyAgICAgICAgJy90ZXN0ZGF0YS9nb29nbGVfbG9nby5wbmcnLAorICAgICAgXSk7CisgICAgfSkKKyAgKTsKK30pOworCitzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ2ZldGNoJywgZnVuY3Rpb24gKGV2ZW50KSB7CisgIGV2ZW50LnJlc3BvbmRXaXRoKGNhY2hlcy5tYXRjaChldmVudC5yZXF1ZXN0KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBmZXRjaChldmVudC5yZXF1ZXN0KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeworICAgICAgICBsZXQgcmVzcG9uc2VDbG9uZSA9IHJlc3BvbnNlLmNsb25lKCk7CisKKyAgICAgICAgY2FjaGVzLm9wZW4oJ3YxJykudGhlbihmdW5jdGlvbiAoY2FjaGUpIHsKKyAgICAgICAgICBjYWNoZS5wdXQoZXZlbnQucmVxdWVzdCwgcmVzcG9uc2VDbG9uZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICB9KTsKKyAgICB9CisgIH0pKTsKK30pOwpkaWZmIC0tZ2l0IGEvY29iYWx0L3dvcmtlci93b3JrZXIuY2MgYi9jb2JhbHQvd29ya2VyL3dvcmtlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWYzZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci93b3JrZXIuY2MKQEAgLTAsMCArMSwyNjkgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyLmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImJhc2UvbWVzc2FnZV9sb29wL21lc3NhZ2VfbG9vcC5oIgorI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3RocmVhZC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL2RlZGljYXRlZF93b3JrZXJfZ2xvYmFsX3Njb3BlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9tZXNzYWdlX3BvcnQuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl9nbG9iYWxfc2NvcGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXJfc2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworbmFtZXNwYWNlIHsKK2Jvb2wgUGVybWl0QW55VVJMKGNvbnN0IEdVUkwmLCBib29sKSB7IHJldHVybiB0cnVlOyB9Cit9ICAvLyBuYW1lc3BhY2UKKworV29ya2VyOjpXb3JrZXIoKSB7fQorCit2b2lkIFdvcmtlcjo6Q2xlYXJBbGxJbnRlcnZhbHNBbmRUaW1lb3V0cygpIHsKKyAgLy8gVE9ETworfQorCisvLyBBbGdvcml0aG0gZm9yICdydW4gYSB3b3JrZXInCisvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNydW4tYS13b3JrZXIKK2Jvb2wgV29ya2VyOjpSdW4oY29uc3QgT3B0aW9ucyYgb3B0aW9ucykgeworICAvLyAxLiBMZXQgaXMgc2hhcmVkIGJlIHRydWUgaWYgd29ya2VyIGlzIGEgU2hhcmVkV29ya2VyIG9iamVjdCwgYW5kIGZhbHNlCisgIC8vICAgIG90aGVyd2lzZS4KKyAgaXNfc2hhcmVkXyA9IG9wdGlvbnMuaXNfc2hhcmVkOworICAvLyAyLiBMZXQgb3duZXIgYmUgdGhlIHJlbGV2YW50IG93bmVyIHRvIGFkZCBnaXZlbiBvdXRzaWRlIHNldHRpbmdzLgorICAvLyAzLiBMZXQgcGFyZW50IHdvcmtlciBnbG9iYWwgc2NvcGUgYmUgbnVsbC4KKyAgLy8gNC4gSWYgb3duZXIgaXMgYSBXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QgKGkuZS4sIHdlIGFyZSBjcmVhdGluZyBhIG5lc3RlZAorICAvLyAgICBkZWRpY2F0ZWQgd29ya2VyKSwgdGhlbiBzZXQgcGFyZW50IHdvcmtlciBnbG9iYWwgc2NvcGUgdG8gb3duZXIuCisgIC8vIDUuIExldCB1bnNhZmVXb3JrZXJDcmVhdGlvblRpbWUgYmUgdGhlIHVuc2FmZSBzaGFyZWQgY3VycmVudCB0aW1lLgorICAvLyA2LiBMZXQgYWdlbnQgYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBkZWRpY2F0ZWQvc2hhcmVkIHdvcmtlciBhZ2VudAorICAvLyAgICBnaXZlbiBvdXRzaWRlIHNldHRpbmdzIGFuZCBpcyBzaGFyZWQuIFJ1biB0aGUgcmVzdCBvZiB0aGVzZSBzdGVwcyBpbgorICAvLyAgICB0aGF0IGFnZW50LgorICB3ZWJfYWdlbnRfLnJlc2V0KG5ldyB3ZWI6OkFnZW50KAorICAgICAgb3B0aW9ucy53ZWJfb3B0aW9ucywKKyAgICAgIGJhc2U6OkJpbmQoJldvcmtlcjo6SW5pdGlhbGl6ZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSwgb3B0aW9ucyksIHRoaXMpKTsKKyAgcmV0dXJuICEhbWVzc2FnZV9sb29wKCk7Cit9CisKK3ZvaWQgV29ya2VyOjpXaWxsRGVzdHJveUN1cnJlbnRNZXNzYWdlTG9vcCgpIHsKKyAgLy8gRGVzdHJveSBtZW1iZXJzIHRoYXQgd2VyZSBjb25zdHJ1Y3RlZCBpbiB0aGUgd29ya2VyIHRocmVhZC4KKyAgbG9hZGVyXy5yZXNldCgpOworICB3b3JrZXJfZ2xvYmFsX3Njb3BlXyA9IG51bGxwdHI7CisgIG1lc3NhZ2VfcG9ydF8gPSBudWxscHRyOworICBjb250ZW50Xy5yZXNldCgpOworICBlcnJvcl8ucmVzZXQoKTsKK30KKwordm9pZCBXb3JrZXI6OkluaXRpYWxpemUoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgd2ViOjpDb250ZXh0KiBjb250ZXh0KSB7CisgIExPRyhJTkZPKSA8PCAiTG9vayBhdCBtZSwgSSdtIHJ1bm5pbmcgYSB3b3JrZXIgdGhyZWFkIjsKKworICAvLyA3LiBMZXQgcmVhbG0gZXhlY3V0aW9uIGNvbnRleHQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIG5ldworICAvLyBKYXZhU2NyaXB0IHJlYWxtIGdpdmVuIGFnZW50IGFuZCB0aGUgZm9sbG93aW5nIGN1c3RvbWl6YXRpb25zOgorICB3ZWJfY29udGV4dF8gPSBjb250ZXh0OworICAvLyAgICAuIEZvciB0aGUgZ2xvYmFsIG9iamVjdCwgaWYgaXMgc2hhcmVkIGlzIHRydWUsIGNyZWF0ZSBhIG5ldworICAvLyAgICAgIFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlIG9iamVjdC4gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcKKyAgLy8gICAgICBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QuCisgIC8vIFRPRE86IEFjdHVhbCB0eXBlIGhlcmUgc2hvdWxkIGRlcGVuZCBvbiBkZXJpdmVkIGNsYXNzIChlLmcuIGRlZGljYXRlZCwKKyAgLy8gc2hhcmVkLCBzZXJ2aWNlKQorICB3ZWJfY29udGV4dF8tPnNldHVwX2Vudmlyb25tZW50X3NldHRpbmdzKAorICAgICAgbmV3IFdvcmtlclNldHRpbmdzKG9wdGlvbnMub3V0c2lkZV9wb3J0LCBvcHRpb25zLnVybCkpOworICAvLyA4LiBMZXQgd29ya2VyIGdsb2JhbCBzY29wZSBiZSB0aGUgZ2xvYmFsIG9iamVjdCBvZiByZWFsbSBleGVjdXRpb24KKyAgLy8gICAgY29udGV4dCdzIFJlYWxtIGNvbXBvbmVudC4KKyAgc2NvcGVkX3JlZnB0cjxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZT4gZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGUgPQorICAgICAgbmV3IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHdvcmtlcl9nbG9iYWxfc2NvcGVfID0gZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGU7CisgIC8vIDkuIFNldCB1cCBhIHdvcmtlciBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3Qgd2l0aCByZWFsbSBleGVjdXRpb24KKyAgLy8gICAgY29udGV4dCwgb3V0c2lkZSBzZXR0aW5ncywgYW5kIHVuc2FmZVdvcmtlckNyZWF0aW9uVGltZSwgYW5kIGxldAorICAvLyAgICBpbnNpZGUgc2V0dGluZ3MgYmUgdGhlIHJlc3VsdC4KKyAgd2ViX2NvbnRleHRfLT5nbG9iYWxfZW52aXJvbm1lbnQoKS0+Q3JlYXRlR2xvYmFsT2JqZWN0KAorICAgICAgZGVkaWNhdGVkX3dvcmtlcl9nbG9iYWxfc2NvcGUsIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKSk7CisKKyAgLy8gMTAuIFNldCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgbmFtZSB0byB0aGUgdmFsdWUgb2Ygb3B0aW9ucydzIG5hbWUgbWVtYmVyLgorICBkZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS0+c2V0X25hbWUob3B0aW9ucy53ZWJfb3B0aW9ucy5uYW1lKTsKKyAgLy8gMTEuIEFwcGVuZCBvd25lciB0byB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3Mgb3duZXIgc2V0LgorICAvLyAxMi4gSWYgaXMgc2hhcmVkIGlzIHRydWUsIHRoZW46CisgIC8vICAgICAxLiBTZXQgd29ya2VyIGdsb2JhbCBzY29wZSdzIGNvbnN0cnVjdG9yIG9yaWdpbiB0byBvdXRzaWRlIHNldHRpbmdzJ3MKKyAgLy8gICAgICAgIG9yaWdpbi4KKyAgLy8gICAgIDIuIFNldCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgY29uc3RydWN0b3IgdXJsIHRvIHVybC4KKyAgLy8gICAgIDMuIFNldCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgdHlwZSB0byB0aGUgdmFsdWUgb2Ygb3B0aW9ucydzIHR5cGUKKyAgLy8gICAgICAgIG1lbWJlci4KKyAgLy8gICAgIDQuIFNldCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgY3JlZGVudGlhbHMgdG8gdGhlIHZhbHVlIG9mIG9wdGlvbnMncworICAvLyAgICAgICAgY3JlZGVudGlhbHMgbWVtYmVyLgorICAvLyAxMy4gTGV0IGRlc3RpbmF0aW9uIGJlICJzaGFyZWR3b3JrZXIiIGlmIGlzIHNoYXJlZCBpcyB0cnVlLCBhbmQKKyAgLy8gIndvcmtlciIgb3RoZXJ3aXNlLgorICAvLyAxNC4gT2J0YWluIHNjcmlwdAorICBPYnRhaW4oKTsKK30KKworLy8gRmV0Y2ggYW5kIFJ1biBjbGFzc2ljIHNjcmlwdAordm9pZCBXb3JrZXI6Ok9idGFpbigpIHsKKyAgLy8gMTQuIE9idGFpbiBzY3JpcHQgYnkgc3dpdGNoaW5nIG9uIHRoZSB2YWx1ZSBvZiBvcHRpb25zJ3MgdHlwZSBtZW1iZXI6CisgIC8vICAgICAtICJjbGFzc2ljIgorICAvLyAgICAgICAgIEZldGNoIGEgY2xhc3NpYyB3b3JrZXIgc2NyaXB0IGdpdmVuIHVybCwgb3V0c2lkZSBzZXR0aW5ncywKKyAgLy8gICAgICAgICBkZXN0aW5hdGlvbiwgYW5kIGluc2lkZSBzZXR0aW5ncy4KKyAgLy8gICAgIC0gIm1vZHVsZSIKKyAgLy8gICAgICAgICBGZXRjaCBhIG1vZHVsZSB3b3JrZXIgc2NyaXB0IGdyYXBoIGdpdmVuIHVybCwgb3V0c2lkZSBzZXR0aW5ncywKKyAgLy8gICAgICAgICBkZXN0aW5hdGlvbiwgdGhlIHZhbHVlIG9mIHRoZSBjcmVkZW50aWFscyBtZW1iZXIgb2Ygb3B0aW9ucywgYW5kCisgIC8vICAgICAgICAgaW5zaWRlIHNldHRpbmdzLgorCisgIC8vICAgICBJbiBib3RoIGNhc2VzLCB0byBwZXJmb3JtIHRoZSBmZXRjaCBnaXZlbiByZXF1ZXN0LCBwZXJmb3JtIHRoZQorICAvLyAgICAgZm9sbG93aW5nIHN0ZXBzIGlmIHRoZSBpcyB0b3AtbGV2ZWwgZmxhZyBpcyBzZXQ6CisgIC8vICAgICAxLiBTZXQgcmVxdWVzdCdzIHJlc2VydmVkIGNsaWVudCB0byBpbnNpZGUgc2V0dGluZ3MuCisgIC8vICAgICAyLiBGZXRjaCByZXF1ZXN0LCBhbmQgYXN5bmNocm9ub3VzbHkgd2FpdCB0byBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBhcworICAvLyAgICAgICAgcGFydCBvZiBmZXRjaCdzIHByb2Nlc3MgcmVzcG9uc2UgZm9yIHRoZSByZXNwb25zZSByZXNwb25zZS4KKyAgY29uc3QgR1VSTCYgdXJsID0gd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpLT5iYXNlX3VybCgpOworICBsb2FkZXI6Ok9yaWdpbiBvcmlnaW4gPSBsb2FkZXI6Ok9yaWdpbih1cmwuR2V0T3JpZ2luKCkpOworCisgIC8vIFRvZG86IGltcGxlbWVudCBjc3AgY2hlY2sgKGIvMjI1MDM3NDY1KQorICBjc3A6OlNlY3VyaXR5Q2FsbGJhY2sgY3NwX2NhbGxiYWNrID0gYmFzZTo6QmluZCgmUGVybWl0QW55VVJMKTsKKworICBsb2FkZXJfID0gd2ViX2NvbnRleHRfLT5zY3JpcHRfbG9hZGVyX2ZhY3RvcnkoKS0+Q3JlYXRlU2NyaXB0TG9hZGVyKAorICAgICAgdXJsLCBvcmlnaW4sIGNzcF9jYWxsYmFjaywKKyAgICAgIGJhc2U6OkJpbmQoJldvcmtlcjo6T25Db250ZW50UHJvZHVjZWQsIGJhc2U6OlVucmV0YWluZWQodGhpcykpLAorICAgICAgYmFzZTo6QmluZCgmV29ya2VyOjpPbkxvYWRpbmdDb21wbGV0ZSwgYmFzZTo6VW5yZXRhaW5lZCh0aGlzKSkpOworfQorCit2b2lkIFdvcmtlcjo6T25Db250ZW50UHJvZHVjZWQoY29uc3QgbG9hZGVyOjpPcmlnaW4mIGxhc3RfdXJsX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpzdHJpbmc+IGNvbnRlbnQpIHsKKyAgRENIRUNLKGNvbnRlbnQpOworICAvLyAxNC4zLiAiU2V0IHdvcmtlciBnbG9iYWwgc2NvcGUncyB1cmwgdG8gcmVzcG9uc2UncyB1cmwuIgorICB3b3JrZXJfZ2xvYmFsX3Njb3BlXy0+c2V0X3VybCgKKyAgICAgIHdlYl9jb250ZXh0Xy0+ZW52aXJvbm1lbnRfc2V0dGluZ3MoKS0+YmFzZV91cmwoKSk7CisgIC8vIDE0LjQgLSAxNC4xMCBpbml0aWFsaXplIHdvcmtlciBnbG9iYWwgc2NvcGUKKyAgd29ya2VyX2dsb2JhbF9zY29wZV8tPkluaXRpYWxpemUoKTsKKyAgLy8gMTQuMTEuIEFzeW5jaHJvbm91c2x5IGNvbXBsZXRlIHRoZSBwZXJmb3JtIHRoZSBmZXRjaCBzdGVwcyB3aXRoIHJlc3BvbnNlLgorICBjb250ZW50XyA9IHN0ZDo6bW92ZShjb250ZW50KTsKKyAgT25SZWFkeVRvRXhlY3V0ZSgpOworfQorCit2b2lkIFdvcmtlcjo6T25Mb2FkaW5nQ29tcGxldGUoY29uc3QgYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+JiBlcnJvcikgeworICBlcnJvcl8gPSBlcnJvcjsKKyAgLy8gICAgIElmIHRoZSBhbGdvcml0aG0gYXN5bmNocm9ub3VzbHkgY29tcGxldGVzIHdpdGggbnVsbCBvciB3aXRoIGEgc2NyaXB0CisgIC8vICAgICB3aG9zZSBlcnJvciB0byByZXRocm93IGlzIG5vbi1udWxsLCB0aGVuOgorICBpZiAoZXJyb3JfIHx8ICFjb250ZW50XykgeworICAgIC8vICAgICAxLiBRdWV1ZSBhIGdsb2JhbCB0YXNrIG9uIHRoZSBET00gbWFuaXB1bGF0aW9uIHRhc2sgc291cmNlIGdpdmVuCisgICAgLy8gICAgICAgIHdvcmtlcidzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBlcnJvciBhdAorICAgIC8vICAgICAgICB3b3JrZXIuCisgICAgLy8gICAgIDIuIFJ1biB0aGUgZW52aXJvbm1lbnQgZGlzY2FyZGluZyBzdGVwcyBmb3IgaW5zaWRlIHNldHRpbmdzLgorICAgIC8vICAgICAzLiBSZXR1cm4uCisgICAgcmV0dXJuOworICB9CisgIE9uUmVhZHlUb0V4ZWN1dGUoKTsKK30KKwordm9pZCBXb3JrZXI6Ok9uUmVhZHlUb0V4ZWN1dGUoKSB7CisgIERDSEVDSyhjb250ZW50Xyk7CisgIEV4ZWN1dGUoKmNvbnRlbnRfLCBiYXNlOjpTb3VyY2VMb2NhdGlvbigiW29iamVjdCBXb3JrZXI6OlJ1bkxvb3BdIiwgMSwgMSkpOworICBjb250ZW50Xy5yZXNldCgpOworfQorCit2b2lkIFdvcmtlcjo6RXhlY3V0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlNvdXJjZUxvY2F0aW9uJiBzY3JpcHRfbG9jYXRpb24pIHsKKyAgLy8gMTUuIEFzc29jaWF0ZSB3b3JrZXIgd2l0aCB3b3JrZXIgZ2xvYmFsIHNjb3BlLgorICAvLyAxNi4gTGV0IGluc2lkZSBwb3J0IGJlIGEgbmV3IE1lc3NhZ2VQb3J0IG9iamVjdCBpbiBpbnNpZGUgc2V0dGluZ3MncyBSZWFsbS4KKyAgLy8gMTcuIEFzc29jaWF0ZSBpbnNpZGUgcG9ydCB3aXRoIHdvcmtlciBnbG9iYWwgc2NvcGUuCisgIG1lc3NhZ2VfcG9ydF8gPSBuZXcgTWVzc2FnZVBvcnQod29ya2VyX2dsb2JhbF9zY29wZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViX2NvbnRleHRfLT5lbnZpcm9ubWVudF9zZXR0aW5ncygpKTsKKyAgLy8gMTguIEVudGFuZ2xlIG91dHNpZGUgcG9ydCBhbmQgaW5zaWRlIHBvcnQuCisgIC8vIDE5LiBDcmVhdGUgYSBuZXcgV29ya2VyTG9jYXRpb24gb2JqZWN0IGFuZCBhc3NvY2lhdGUgaXQgd2l0aCB3b3JrZXIgZ2xvYmFsCisgIC8vICAgICBzY29wZS4KKyAgLy8gMjAuIENsb3Npbmcgb3JwaGFuIHdvcmtlcnM6IFN0YXJ0IG1vbml0b3JpbmcgdGhlIHdvcmtlciBzdWNoIHRoYXQgbm8gc29vbmVyCisgIC8vICAgICB0aGFuIGl0IHN0b3BzIGJlaW5nIGEgcHJvdGVjdGVkIHdvcmtlciwgYW5kIG5vIGxhdGVyIHRoYW4gaXQgc3RvcHMKKyAgLy8gICAgIGJlaW5nIGEgcGVybWlzc2libGUgd29ya2VyLCB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgY2xvc2luZyBmbGFnIGlzIHNldAorICAvLyAgICAgdG8gdHJ1ZS4KKyAgLy8gMjEuIFN1c3BlbmRpbmcgd29ya2VyczogU3RhcnQgbW9uaXRvcmluZyB0aGUgd29ya2VyLCBzdWNoIHRoYXQgd2hlbmV2ZXIKKyAgLy8gICAgIHdvcmtlciBnbG9iYWwgc2NvcGUncyBjbG9zaW5nIGZsYWcgaXMgZmFsc2UgYW5kIHRoZSB3b3JrZXIgaXMgYQorICAvLyAgICAgc3VzcGVuZGFibGUgd29ya2VyLCB0aGUgdXNlciBhZ2VudCBzdXNwZW5kcyBleGVjdXRpb24gb2Ygc2NyaXB0IGluIHRoYXQKKyAgLy8gICAgIHdvcmtlciB1bnRpbCBzdWNoIHRpbWUgYXMgZWl0aGVyIHRoZSBjbG9zaW5nIGZsYWcgc3dpdGNoZXMgdG8gdHJ1ZSBvcgorICAvLyAgICAgdGhlIHdvcmtlciBzdG9wcyBiZWluZyBhIHN1c3BlbmRhYmxlIHdvcmtlci4KKyAgLy8gMjIuIFNldCBpbnNpZGUgc2V0dGluZ3MncyBleGVjdXRpb24gcmVhZHkgZmxhZy4KKyAgZXhlY3V0aW9uX3JlYWR5Xy5TaWduYWwoKTsKKyAgLy8gMjMuIElmIHNjcmlwdCBpcyBhIGNsYXNzaWMgc2NyaXB0LCB0aGVuIHJ1biB0aGUgY2xhc3NpYyBzY3JpcHQgc2NyaXB0LgorICAvLyAgICAgT3RoZXJ3aXNlLCBpdCBpcyBhIG1vZHVsZSBzY3JpcHQ7IHJ1biB0aGUgbW9kdWxlIHNjcmlwdCBzY3JpcHQuCisKKyAgYm9vbCBtdXRlX2Vycm9ycyA9IGZhbHNlOworICBib29sIHN1Y2NlZWRlZCA9IGZhbHNlOworICBMT0coSU5GTykgPDwgIlNjcmlwdCBFeGVjdXRpbmcgXCIiIDw8IGNvbnRlbnQgPDwgIlwiLiI7CisgIHN0ZDo6c3RyaW5nIHJldHZhbCA9IHdlYl9jb250ZXh0Xy0+c2NyaXB0X3J1bm5lcigpLT5FeGVjdXRlKAorICAgICAgY29udGVudCwgc2NyaXB0X2xvY2F0aW9uLCBtdXRlX2Vycm9ycywgJnN1Y2NlZWRlZCk7CisgIExPRyhJTkZPKSA8PCAiU2NyaXB0IEV4ZWN1dGVkICIgPDwgKHN1Y2NlZWRlZCA/ICJhbmQiIDogIiwgYnV0IG5vdCIpCisgICAgICAgICAgICA8PCAiIHN1Y2NlZWRlZDogXCIiIDw8IHJldHZhbCA8PCAiXCIiOworCisgIC8vIDI0LiBFbmFibGUgb3V0c2lkZSBwb3J0J3MgcG9ydCBtZXNzYWdlIHF1ZXVlLgorICAvLyAyNS4gSWYgaXMgc2hhcmVkIGlzIGZhbHNlLCBlbmFibGUgdGhlIHBvcnQgbWVzc2FnZSBxdWV1ZSBvZiB0aGUgd29ya2VyJ3MKKyAgLy8gICAgIGltcGxpY2l0IHBvcnQuCisgIC8vIDI2LiBJZiBpcyBzaGFyZWQgaXMgdHJ1ZSwgdGhlbiBxdWV1ZSBhIGdsb2JhbCB0YXNrIG9uIERPTSBtYW5pcHVsYXRpb24gdGFzaworICAvLyAgICAgc291cmNlIGdpdmVuIHdvcmtlciBnbG9iYWwgc2NvcGUgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBjb25uZWN0IGF0CisgIC8vICAgICB3b3JrZXIgZ2xvYmFsIHNjb3BlLCB1c2luZyBNZXNzYWdlRXZlbnQsIHdpdGggdGhlIGRhdGEgYXR0cmlidXRlCisgIC8vICAgICBpbml0aWFsaXplZCB0byB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgcG9ydHMgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGEKKyAgLy8gICAgIG5ldyBmcm96ZW4gYXJyYXkgY29udGFpbmluZyBpbnNpZGUgcG9ydCwgYW5kIHRoZSBzb3VyY2UgYXR0cmlidXRlCisgIC8vICAgICBpbml0aWFsaXplZCB0byBpbnNpZGUgcG9ydC4KKyAgLy8gMjcuIEVuYWJsZSB0aGUgY2xpZW50IG1lc3NhZ2UgcXVldWUgb2YgdGhlIFNlcnZpY2VXb3JrZXJDb250YWluZXIgb2JqZWN0CisgIC8vICAgICB3aG9zZSBhc3NvY2lhdGVkIHNlcnZpY2Ugd29ya2VyIGNsaWVudCBpcyB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MKKyAgLy8gICAgIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC4KKyAgLy8gMjguIEV2ZW50IGxvb3A6IFJ1biB0aGUgcmVzcG9uc2libGUgZXZlbnQgbG9vcCBzcGVjaWZpZWQgYnkgaW5zaWRlIHNldHRpbmdzCisgIC8vICAgICB1bnRpbCBpdCBpcyBkZXN0cm95ZWQuCisgIC8vIEZpbmFsaXplKCk7Cit9CisKK1dvcmtlcjo6fldvcmtlcigpIHsKKyAgLy8gMjkuIENsZWFyIHRoZSB3b3JrZXIgZ2xvYmFsIHNjb3BlJ3MgbWFwIG9mIGFjdGl2ZSB0aW1lcnMuCisgIC8vIDMwLiBEaXNlbnRhbmdsZSBhbGwgdGhlIHBvcnRzIGluIHRoZSBsaXN0IG9mIHRoZSB3b3JrZXIncyBwb3J0cy4KKyAgLy8gMzEuIEVtcHR5IHdvcmtlciBnbG9iYWwgc2NvcGUncyBvd25lciBzZXQuCisgIGlmICh3ZWJfYWdlbnRfKSB7CisgICAgRENIRUNLKG1lc3NhZ2VfbG9vcCgpKTsKKyAgICB3ZWJfYWdlbnRfLT5XYWl0VW50aWxEb25lKCk7CisgICAgd2ViX2FnZW50Xy5yZXNldCgpOworICB9Cit9CisKKy8vIEFsZ29yaXRobSBmb3IgJ1Rlcm1pbmF0ZSBhIHdvcmtlcicKKy8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI3Rlcm1pbmF0ZS1hLXdvcmtlcgordm9pZCBXb3JrZXI6OlRlcm1pbmF0ZSgpIHsKKyAgLy8gMS4gU2V0IHRoZSB3b3JrZXIncyBXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QncyBjbG9zaW5nIGZsYWcgdG8gdHJ1ZS4KKyAgLy8gMi4gSWYgdGhlcmUgYXJlIGFueSB0YXNrcyBxdWV1ZWQgaW4gdGhlIFdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCdzIHJlbGV2YW50CisgIC8vICAgIGFnZW50J3MgZXZlbnQgbG9vcCdzIHRhc2sgcXVldWVzLCBkaXNjYXJkIHRoZW0gd2l0aG91dCBwcm9jZXNzaW5nIHRoZW0uCisgIC8vIDMuIEFib3J0IHRoZSBzY3JpcHQgY3VycmVudGx5IHJ1bm5pbmcgaW4gdGhlIHdvcmtlci4KKyAgLy8gNC4gSWYgdGhlIHdvcmtlcidzIFdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCBpcyBhY3R1YWxseSBhCisgIC8vICAgIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCAoaS5lLiB0aGUgd29ya2VyIGlzIGEgZGVkaWNhdGVkCisgIC8vICAgIHdvcmtlciksIHRoZW4gZW1wdHkgdGhlIHBvcnQgbWVzc2FnZSBxdWV1ZSBvZiB0aGUgcG9ydCB0aGF0IHRoZSB3b3JrZXIncworICAvLyAgICBpbXBsaWNpdCBwb3J0IGlzIGVudGFuZ2xlZCB3aXRoLgorfQorCisvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBvYmplY3QgdHJhbnNmZXIpOworLy8gLT4gdm9pZCBQb3N0TWVzc2FnZShjb25zdCBzY3JpcHQ6OlZhbHVlSGFuZGxlSG9sZGVyJiBtZXNzYWdlLAorLy8gICAgICAgICAgICAgICAgICAgICBzY3JpcHQ6OlNlcXVlbmNlPHNjcmlwdDo6VmFsdWVIYW5kbGUqPiB0cmFuc2Zlcikge30KK3ZvaWQgV29ya2VyOjpQb3N0TWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgeworICBEQ0hFQ0sobWVzc2FnZV9sb29wKCkpOworICBpZiAoYmFzZTo6TWVzc2FnZUxvb3A6OmN1cnJlbnQoKSAhPSBtZXNzYWdlX2xvb3AoKSkgeworICAgIC8vIEJsb2NrIHVudGlsIHRoZSB3b3JrZXIgdGhyZWFkIGlzIHJlYWR5IHRvIGV4ZWN1dGUgY29kZSB0byBoYW5kbGUgdGhlCisgICAgLy8gZXZlbnQuCisgICAgZXhlY3V0aW9uX3JlYWR5Xy5XYWl0KCk7CisgICAgbWVzc2FnZV9sb29wKCktPnRhc2tfcnVubmVyKCktPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsCisgICAgICAgIGJhc2U6OkJpbmRPbmNlKCZXb3JrZXI6OlBvc3RNZXNzYWdlLCBiYXNlOjpVbnJldGFpbmVkKHRoaXMpLCBtZXNzYWdlKSk7CisgICAgcmV0dXJuOworICB9IGVsc2UgeworICAgIERDSEVDSyhleGVjdXRpb25fcmVhZHlfLklzU2lnbmFsZWQoKSk7CisgICAgRENIRUNLKG1lc3NhZ2VfcG9ydCgpKTsKKyAgICBpZiAobWVzc2FnZV9wb3J0KCkpIG1lc3NhZ2VfcG9ydCgpLT5Qb3N0TWVzc2FnZShtZXNzYWdlKTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlci5neXAgYi9jb2JhbHQvd29ya2VyL3dvcmtlci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMzQ1OGUuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3dvcmtlci93b3JrZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3dvcmtlcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3NlcnZpY2Vfd29ya2VyX2NvbnRhaW5lci5jYycsCi0gICAgICAgICdzZXJ2aWNlX3dvcmtlcl9jb250YWluZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9icm93c2VyL2Jyb3dzZXJfYmluZGluZ3NfZ2VuLmd5cDpnZW5lcmF0ZWRfdHlwZXMnLAotICAgICAgXSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAjIEFkZGl0aW9uYWxseSwgZW5zdXJlIHRoYXQgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIGdlbmVyYXRlZAotICAgICAgICAjIGhlYWRlcnMgYXJlIHB1dCBvbiB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBmb3IgdGFyZ2V0cyB0aGF0IGRlcGVuZAotICAgICAgICAjIG9uIHRoaXMgb25lLgotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jyb3dzZXIvYnJvd3Nlcl9iaW5kaW5nc19nZW4uZ3lwOmdlbmVyYXRlZF90eXBlcycsCi0gICAgICBdCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvd29ya2VyLmggYi9jb2JhbHQvd29ya2VyL3dvcmtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Yjk3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3dvcmtlci5oCkBAIC0wLDAgKzEsMTMxIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX1dPUktFUl9XT1JLRVJfSF8KKyNkZWZpbmUgQ09CQUxUX1dPUktFUl9XT1JLRVJfSF8KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL2JpbmQuaCIKKyNpbmNsdWRlICJiYXNlL21lbW9yeS9zY29wZWRfcmVmcHRyLmgiCisjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkLmgiCisjaW5jbHVkZSAiY29iYWx0L2NzcC9jb250ZW50X3NlY3VyaXR5X3BvbGljeS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2V4ZWN1dGlvbl9zdGF0ZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2NyaXB0X3J1bm5lci5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvdmFsdWVfaGFuZGxlLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC93cmFwcGFibGUuaCIKKyNpbmNsdWRlICJjb2JhbHQvd2ViL2FnZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci9kZWRpY2F0ZWRfd29ya2VyX2dsb2JhbF9zY29wZS5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvbWVzc2FnZV9wb3J0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXJfZ2xvYmFsX3Njb3BlLmgiCisjaW5jbHVkZSAiY29iYWx0L3dvcmtlci93b3JrZXJfb3B0aW9ucy5oIgorI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyX3NldHRpbmdzLmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworY2xhc3MgV29ya2VyIDogcHVibGljIGJhc2U6Ok1lc3NhZ2VMb29wOjpEZXN0cnVjdGlvbk9ic2VydmVyIHsKKyBwdWJsaWM6CisgIC8vIFdvcmtlciBPcHRpb25zIG5lZWRlZCBhdCB0aHJlYWQgcnVuIHRpbWUuCisgIHN0cnVjdCBPcHRpb25zIHsKKyAgICBleHBsaWNpdCBPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSA6IHdlYl9vcHRpb25zKG5hbWUpIHt9CisKKyAgICB3ZWI6OkFnZW50OjpPcHRpb25zIHdlYl9vcHRpb25zOworCisgICAgLy8gVHJ1ZSBpZiB3b3JrZXIgaXMgYSBTaGFyZWRXb3JrZXIgb2JqZWN0LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgaXNfc2hhcmVkOworCisgICAgLy8gUGFyYW1ldGVycyBmcm9tICdSdW4gYSB3b3JrZXInIHN0ZXAgOS4xIGluIHRoZSBzcGVjLgorICAgIC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI2RvbS13b3JrZXIKKyAgICBHVVJMIHVybDsKKyAgICBzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIG91dHNpZGVfc2V0dGluZ3M7CisgICAgTWVzc2FnZVBvcnQqIG91dHNpZGVfcG9ydDsKKyAgICBXb3JrZXJPcHRpb25zIG9wdGlvbnM7CisgIH07CisKKyAgV29ya2VyKCk7CisgIH5Xb3JrZXIoKTsKKworICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVhZC4gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCisgIGJvb2wgUnVuKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOworCisgIHZvaWQgVGVybWluYXRlKCk7CisKKyAgdm9pZCBDbGVhckFsbEludGVydmFsc0FuZFRpbWVvdXRzKCk7CisKKyAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VfcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1lc3NhZ2VfcG9ydF8uZ2V0KCk7IH0KKworICAvLyBUaGUgbWVzc2FnZSBsb29wIHRoaXMgb2JqZWN0IGlzIHJ1bm5pbmcgb24uCisgIGJhc2U6Ok1lc3NhZ2VMb29wKiBtZXNzYWdlX2xvb3AoKSBjb25zdCB7IHJldHVybiB3ZWJfYWdlbnRfLT5tZXNzYWdlX2xvb3AoKTsgfQorCisgIHZvaWQgUG9zdE1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpOworCisgIC8vIEZyb20gYmFzZTo6TWVzc2FnZUxvb3A6OkRlc3RydWN0aW9uT2JzZXJ2ZXIuCisgIHZvaWQgV2lsbERlc3Ryb3lDdXJyZW50TWVzc2FnZUxvb3AoKSBvdmVycmlkZTsKKworIHByaXZhdGU6CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXb3JrZXIpOworICAvLyBDYWxsZWQgYnkgfFJ1bnwgdG8gcGVyZm9ybSBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBvbiB0aGUgZGVkaWNhdGVkCisgIC8vIHRocmVhZC4KKyAgdm9pZCBJbml0aWFsaXplKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIHdlYjo6Q29udGV4dCogY29udGV4dCk7CisKKyAgdm9pZCBPbkNvbnRlbnRQcm9kdWNlZChjb25zdCBsb2FkZXI6Ok9yaWdpbiYgbGFzdF91cmxfb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnN0cmluZz4gY29udGVudCk7CisgIHZvaWQgT25Mb2FkaW5nQ29tcGxldGUoY29uc3QgYmFzZTo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+JiBlcnJvcik7CisgIHZvaWQgT25SZWFkeVRvRXhlY3V0ZSgpOworCisgIHZvaWQgT2J0YWluKCk7CisgIHZvaWQgRXhlY3V0ZShjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudCwKKyAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OlNvdXJjZUxvY2F0aW9uJiBzY3JpcHRfbG9jYXRpb24pOworCisgIHdlYjo6QWdlbnQqIHdlYl9hZ2VudCgpIGNvbnN0IHsgcmV0dXJuIHdlYl9hZ2VudF8uZ2V0KCk7IH0KKworICAvLyBUaGUgV2ViIENvbnRleHQgaW5jbHVkZXMgdGhlIFNjcmlwdCBBZ2VudCBhbmQgUmVhbG0uCisgIHN0ZDo6dW5pcXVlX3B0cjx3ZWI6OkFnZW50PiB3ZWJfYWdlbnRfOworCisgIHdlYjo6Q29udGV4dCogd2ViX2NvbnRleHRfOworCisgIGJvb2wgaXNfc2hhcmVkXzsKKworICBzY29wZWRfcmVmcHRyPFdvcmtlckdsb2JhbFNjb3BlPiB3b3JrZXJfZ2xvYmFsX3Njb3BlXzsKKworICAvLyBJbm5lciBtZXNzYWdlIHBvcnQuCisgIHNjb3BlZF9yZWZwdHI8TWVzc2FnZVBvcnQ+IG1lc3NhZ2VfcG9ydF87CisKKyAgLy8gVGhlIGxvYWRlciB0aGF0IGlzIHVzZWQgZm9yIGFzeW5jaHJvbm91cyBsb2Fkcy4KKyAgc3RkOjp1bmlxdWVfcHRyPGxvYWRlcjo6TG9hZGVyPiBsb2FkZXJfOworCisgIC8vIENvbnRlbnQgb2YgdGhlIHNjcmlwdC4gUmVsZWFzZWQgYWZ0ZXIgRXhlY3V0ZSBpcyBjYWxsZWQuCisgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnN0cmluZz4gY29udGVudF87CisKKyAgLy8gSWYgdGhlIHNjcmlwdCBmYWlsZWQsIGNvbnRhaW5zIHRoZSBlcnJvciBtZXNzYWdlLgorICBiYXNlOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gZXJyb3JfOworCisgIC8vIFRoZSBleGVjdXRpb24gcmVhZHkgZmxhZy4KKyAgLy8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL2NvbW1pdC1zbmFwc2hvdHMvNDY1YTZiNjcyYzcwMzA1NGRlMjc4YjBmODEzM2ViM2FkMzNkOTNmNC8jY29uY2VwdC1lbnZpcm9ubWVudC1leGVjdXRpb24tcmVhZHktZmxhZworICBiYXNlOjpXYWl0YWJsZUV2ZW50IGV4ZWN1dGlvbl9yZWFkeV8gPSB7CisgICAgICBiYXNlOjpXYWl0YWJsZUV2ZW50OjpSZXNldFBvbGljeTo6TUFOVUFMLAorICAgICAgYmFzZTo6V2FpdGFibGVFdmVudDo6SW5pdGlhbFN0YXRlOjpOT1RfU0lHTkFMRUR9OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdvcmtlcgorfSAgLy8gbmFtZXNwYWNlIGNvYmFsdAorCisjZW5kaWYgIC8vIENPQkFMVF9XT1JLRVJfV09SS0VSX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlci5pZGwgYi9jb2JhbHQvd29ya2VyL3dvcmtlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlkYjEyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvd29ya2VyLmlkbApAQCAtMCwwICsxLDM1IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dvcmtlcnMuaHRtbCNkZWRpY2F0ZWQtd29ya2Vycy1hbmQtdGhlLXdvcmtlci1pbnRlcmZhY2UKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvZGV2L3dvcmtlcnMuaHRtbCN3b3JrZXJzCisKK1tFeHBvc2VkPVdpbmRvdywKKyBJbXBsZW1lbnRlZEFzPURlZGljYXRlZFdvcmtlciwKKyBDb25zdHJ1Y3RvckNhbGxXaXRoPUVudmlyb25tZW50U2V0dGluZ3MsCisgQ29uc3RydWN0b3IoVVNWU3RyaW5nIHNjcmlwdFVSTCwgb3B0aW9uYWwgV29ya2VyT3B0aW9ucyBvcHRpb25zKQorXQoraW50ZXJmYWNlIFdvcmtlciA6IEV2ZW50VGFyZ2V0IHsKKyAgdm9pZCB0ZXJtaW5hdGUoKTsKKworICB2b2lkIHBvc3RNZXNzYWdlKFVTVlN0cmluZyBtZXNzYWdlKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBzZXF1ZW5jZTxvYmplY3Q+OiBiLzIxODUwMTc3NAorICAvLyB2b2lkIHBvc3RNZXNzYWdlKGFueSBtZXNzYWdlLCBzZXF1ZW5jZTxvYmplY3Q+IHRyYW5zZmVyKTsKKyAgLy8gVE9ETzogU3VwcG9ydCBvdmVybG9hZHMgd2l0aCBkaWN0aW9uYXJ5IHBhcmFtZXRlcjogYi8yMTg1MDY3MzAKKyAgLy8gdm9pZCBwb3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgU3RydWN0dXJlZFNlcmlhbGl6ZU9wdGlvbnMgb3B0aW9ucyk7CisgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25tZXNzYWdlOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2FnZWVycm9yOworfTsKKworV29ya2VyIGltcGxlbWVudHMgQWJzdHJhY3RXb3JrZXI7CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlcl9nbG9iYWxfc2NvcGUuY2MgYi9jb2JhbHQvd29ya2VyL3dvcmtlcl9nbG9iYWxfc2NvcGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkNTJlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvd29ya2VyX2dsb2JhbF9zY29wZS5jYwpAQCAtMCwwICsxLDIzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL3dvcmtlcl9nbG9iYWxfc2NvcGUuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKK1dvcmtlckdsb2JhbFNjb3BlOjpXb3JrZXJHbG9iYWxTY29wZShzY3JpcHQ6OkVudmlyb25tZW50U2V0dGluZ3MqIHNldHRpbmdzKQorICAgIDogRXZlbnRUYXJnZXQoc2V0dGluZ3MpIHt9CisKK30gIC8vIG5hbWVzcGFjZSB3b3JrZXIKK30gIC8vIG5hbWVzcGFjZSBjb2JhbHQKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvd29ya2VyX2dsb2JhbF9zY29wZS5oIGIvY29iYWx0L3dvcmtlci93b3JrZXJfZ2xvYmFsX3Njb3BlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkYzQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvd29ya2VyX2dsb2JhbF9zY29wZS5oCkBAIC0wLDAgKzEsMTAwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX1dPUktFUl9XT1JLRVJfR0xPQkFMX1NDT1BFX0hfCisjZGVmaW5lIENPQkFMVF9XT1JLRVJfV09SS0VSX0dMT0JBTF9TQ09QRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgImJhc2UvbWVtb3J5L3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAiY29iYWx0L2Jhc2UvdG9rZW5zLmgiCisjaW5jbHVkZSAiY29iYWx0L2RvbS9ldmVudF90YXJnZXQuaCIKKyNpbmNsdWRlICJjb2JhbHQvZG9tL2V2ZW50X3RhcmdldF9saXN0ZW5lcl9pbmZvLmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L3ZhbHVlX2hhbmRsZS5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvd3JhcHBhYmxlLmgiCisjaW5jbHVkZSAibmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0LmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKKworbmFtZXNwYWNlIGNvYmFsdCB7CituYW1lc3BhY2Ugd29ya2VyIHsKKworLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIFdvcmtlckdsb2JhbFNjb3BlIGNvbW1vbiBpbnRlcmZhY2UuCisvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNkZWRpY2F0ZWQtd29ya2Vycy1hbmQtdGhlLXdvcmtlcmdsb2JhbHNjb3BlLWludGVyZmFjZQorCitjbGFzcyBXb3JrZXJHbG9iYWxTY29wZSA6IHB1YmxpYyBkb206OkV2ZW50VGFyZ2V0IHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFdvcmtlckdsb2JhbFNjb3BlKHNjcmlwdDo6RW52aXJvbm1lbnRTZXR0aW5ncyogc2V0dGluZ3MpOworCisgIC8vIFdlYiBBUEk6IFdvcmtlckdsb2JhbFNjb3BlCisgIC8vCisgIHNjb3BlZF9yZWZwdHI8V29ya2VyR2xvYmFsU2NvcGU+IHNlbGYoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgdm9pZCBJbXBvcnRTY3JpcHRzKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdXJscykge30KKworICB2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZSgpID0gMDsKKworICB2b2lkIHNldF91cmwoY29uc3QgR1VSTCYgdXJsKSB7IHVybF8gPSB1cmw7IH0KKworICBjb25zdCBHVVJMIFVybCgpIGNvbnN0IHsgcmV0dXJuIHVybF87IH0KKworICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUqCisgIG9ubGFuZ3VhZ2VjaGFuZ2UoKSB7CisgICAgcmV0dXJuIEdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjpsYW5ndWFnZWNoYW5nZSgpKTsKKyAgfQorICB2b2lkIHNldF9vbmxhbmd1YWdlY2hhbmdlKAorICAgICAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlJgorICAgICAgICAgIGV2ZW50X2xpc3RlbmVyKSB7CisgICAgU2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6Omxhbmd1YWdlY2hhbmdlKCksIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorCisgIGNvbnN0IGRvbTo6RXZlbnRUYXJnZXRMaXN0ZW5lckluZm86OkV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSoKKyAgb25yZWplY3Rpb25oYW5kbGVkKCkgeworICAgIHJldHVybiBHZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6cmVqZWN0aW9uaGFuZGxlZCgpKTsKKyAgfQorICB2b2lkIHNldF9vbnJlamVjdGlvbmhhbmRsZWQoCisgICAgICBjb25zdCBkb206OkV2ZW50VGFyZ2V0TGlzdGVuZXJJbmZvOjpFdmVudExpc3RlbmVyU2NyaXB0VmFsdWUmCisgICAgICAgICAgZXZlbnRfbGlzdGVuZXIpIHsKKyAgICBTZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGJhc2U6OlRva2Vuczo6cmVqZWN0aW9uaGFuZGxlZCgpLCBldmVudF9saXN0ZW5lcik7CisgIH0KKyAgY29uc3QgZG9tOjpFdmVudFRhcmdldExpc3RlbmVySW5mbzo6RXZlbnRMaXN0ZW5lclNjcmlwdFZhbHVlKgorICBvbnVuaGFuZGxlZHJlamVjdGlvbigpIHsKKyAgICByZXR1cm4gR2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihiYXNlOjpUb2tlbnM6OnVuaGFuZGxlZHJlamVjdGlvbigpKTsKKyAgfQorICB2b2lkIHNldF9vbnVuaGFuZGxlZHJlamVjdGlvbigKKyAgICAgIGNvbnN0IGRvbTo6RXZlbnRUYXJnZXRMaXN0ZW5lckluZm86OkV2ZW50TGlzdGVuZXJTY3JpcHRWYWx1ZSYKKyAgICAgICAgICBldmVudF9saXN0ZW5lcikgeworICAgIFNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoYmFzZTo6VG9rZW5zOjp1bmhhbmRsZWRyZWplY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RlbmVyKTsKKyAgfQorCisgIERFRklORV9XUkFQUEFCTEVfVFlQRShXb3JrZXJHbG9iYWxTY29wZSk7CisKKyBwcm90ZWN0ZWQ6CisgIHZpcnR1YWwgfldvcmtlckdsb2JhbFNjb3BlKCkge30KKworIHByaXZhdGU6CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXb3JrZXJHbG9iYWxTY29wZSk7CisKKyAgLy8gV29ya2VyR2xvYmFsU2NvcGUgQXR0cmlidXRlCisgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvY29tbWl0LXNuYXBzaG90cy80NjVhNmI2NzJjNzAzMDU0ZGUyNzhiMGY4MTMzZWIzYWQzM2Q5M2Y0LyNjb25jZXB0LXdvcmtlcmdsb2JhbHNjb3BlLXVybAorICBHVVJMIHVybF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9XT1JLRVJfR0xPQkFMX1NDT1BFX0hfCmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlcl9nbG9iYWxfc2NvcGUuaWRsIGIvY29iYWx0L3dvcmtlci93b3JrZXJfZ2xvYmFsX3Njb3BlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2MxOThkCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci93b3JrZXJfZ2xvYmFsX3Njb3BlLmlkbApAQCAtMCwwICsxLDMyIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dvcmtlcnMuaHRtbCN0aGUtd29ya2VyZ2xvYmFsc2NvcGUtY29tbW9uLWludGVyZmFjZQorCitbCisgIEV4cG9zZWQgPSBXb3JrZXIsCisgIENvbnN0cnVjdG9yQ2FsbFdpdGg9RW52aXJvbm1lbnRTZXR0aW5ncworXSBpbnRlcmZhY2UgV29ya2VyR2xvYmFsU2NvcGUgOiBFdmVudFRhcmdldCB7CisgIHJlYWRvbmx5IGF0dHJpYnV0ZSBXb3JrZXJHbG9iYWxTY29wZSBzZWxmOworICAvL3JlYWRvbmx5IGF0dHJpYnV0ZSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKKyAgLy9yZWFkb25seSBhdHRyaWJ1dGUgV29ya2VyTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgdm9pZCBpbXBvcnRTY3JpcHRzKFVTVlN0cmluZy4uLiB1cmxzKTsKKworICBhdHRyaWJ1dGUgT25FcnJvckV2ZW50SGFuZGxlciBvbmVycm9yOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubGFuZ3VhZ2VjaGFuZ2U7CisgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25vZmZsaW5lOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ub25saW5lOworICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ucmVqZWN0aW9uaGFuZGxlZDsKKyAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbnVuaGFuZGxlZHJlamVjdGlvbjsKK307CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmlkbCBiL2NvYmFsdC93b3JrZXIvd29ya2VyX29wdGlvbnMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzQzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb2JhbHQvd29ya2VyL3dvcmtlcl9vcHRpb25zLmlkbApAQCAtMCwwICsxLDUgQEAKK2RpY3Rpb25hcnkgV29ya2VyT3B0aW9ucyB7CisgIFdvcmtlclR5cGUgdHlwZSA9ICJjbGFzc2ljIjsKKyAgLy9SZXF1ZXN0Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMgPSAic2FtZS1vcmlnaW4iOyAvLyBjcmVkZW50aWFscyBpcyBvbmx5IHVzZWQgaWYgdHlwZSBpcyAibW9kdWxlIgorICBET01TdHJpbmcgbmFtZSA9ICIiOworfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvd29ya2VyX3NldHRpbmdzLmNjIGIvY29iYWx0L3dvcmtlci93b3JrZXJfc2V0dGluZ3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwYWUwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvd29ya2VyX3NldHRpbmdzLmNjCkBAIC0wLDAgKzEsMzIgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgImNvYmFsdC93b3JrZXIvd29ya2VyX3NldHRpbmdzLmgiCisKKyNpbmNsdWRlICJjb2JhbHQvYmFzZS9kZWJ1Z2dlcl9ob29rcy5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2dsb2JhbF9lbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvamF2YXNjcmlwdF9lbmdpbmUuaCIKKyNpbmNsdWRlICJ1cmwvZ3VybC5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworLy8gVE9ETzogT25seSB1c2UgTnVsbERlYnVnZ2VySG9va3MgaWYgIUVOQUJMRV9ERUJVR0dFUi4KK1dvcmtlclNldHRpbmdzOjpXb3JrZXJTZXR0aW5ncyh3b3JrZXI6Ok1lc3NhZ2VQb3J0KiBtZXNzYWdlX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1VSTCYgYmFzZSkKKyAgICA6IHdlYjo6RW52aXJvbm1lbnRTZXR0aW5ncygpLCBtZXNzYWdlX3BvcnRfKG1lc3NhZ2VfcG9ydCkgeworICBzZXRfYmFzZV91cmwoYmFzZSk7Cit9Cit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CmRpZmYgLS1naXQgYS9jb2JhbHQvd29ya2VyL3dvcmtlcl9zZXR0aW5ncy5oIGIvY29iYWx0L3dvcmtlci93b3JrZXJfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzYzM2ViCi0tLSAvZGV2L251bGwKKysrIGIvY29iYWx0L3dvcmtlci93b3JrZXJfc2V0dGluZ3MuaApAQCAtMCwwICsxLDQzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQ09CQUxUX1dPUktFUl9XT1JLRVJfU0VUVElOR1NfSF8KKyNkZWZpbmUgQ09CQUxUX1dPUktFUl9XT1JLRVJfU0VUVElOR1NfSF8KKworI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCisjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9qYXZhc2NyaXB0X2VuZ2luZS5oIgorI2luY2x1ZGUgImNvYmFsdC93ZWIvZW52aXJvbm1lbnRfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJjb2JhbHQvd29ya2VyL21lc3NhZ2VfcG9ydC5oIgorCituYW1lc3BhY2UgY29iYWx0IHsKK25hbWVzcGFjZSB3b3JrZXIgeworCisvLyBXb3JrZXIgRW52aXJvbm1lbnQgU2V0dGluZ3Mgb2JqZWN0IGFzIGRlc2NyaWJlZCBpbgorLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9jb21taXQtc25hcHNob3RzLzQ2NWE2YjY3MmM3MDMwNTRkZTI3OGIwZjgxMzNlYjNhZDMzZDkzZjQvI3NjcmlwdC1zZXR0aW5ncy1mb3Itd29ya2VycworCitjbGFzcyBXb3JrZXJTZXR0aW5ncyA6IHB1YmxpYyB3ZWI6OkVudmlyb25tZW50U2V0dGluZ3MgeworIHB1YmxpYzoKKyAgV29ya2VyU2V0dGluZ3Mod29ya2VyOjpNZXNzYWdlUG9ydCogbWVzc2FnZV9wb3J0LCBjb25zdCBHVVJMJiBiYXNlKTsKKworICB3b3JrZXI6Ok1lc3NhZ2VQb3J0KiBtZXNzYWdlX3BvcnQoKSBjb25zdCB7IHJldHVybiBtZXNzYWdlX3BvcnRfOyB9CisKKyBwcml2YXRlOgorICAvLyBPdXRlciBtZXNzYWdlIHBvcnQuCisgIHdvcmtlcjo6TWVzc2FnZVBvcnQqIG1lc3NhZ2VfcG9ydF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd29ya2VyCit9ICAvLyBuYW1lc3BhY2UgY29iYWx0CisKKyNlbmRpZiAgLy8gQ09CQUxUX1dPUktFUl9XT1JLRVJfU0VUVElOR1NfSF8KZGlmZiAtLWdpdCBhL2NvYmFsdC93b3JrZXIvd29ya2VyX3R5cGUuaWRsIGIvY29iYWx0L3dvcmtlci93b3JrZXJfdHlwZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxN2Y4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvYmFsdC93b3JrZXIvd29ya2VyX3R5cGUuaWRsCkBAIC0wLDAgKzEgQEAKK2VudW0gV29ya2VyVHlwZSB7ICJjbGFzc2ljIiwgIm1vZHVsZSIgfTsKZGlmZiAtLWdpdCBhL2NvYmFsdC94aHIvQlVJTEQuZ24gYi9jb2JhbHQveGhyL0JVSUxELmduCmluZGV4IDQ1YzQzYTMuLjRjNTUzMmYgMTAwNjQ0Ci0tLSBhL2NvYmFsdC94aHIvQlVJTEQuZ24KKysrIGIvY29iYWx0L3hoci9CVUlMRC5nbgpAQCAtNTcsNiArNTcsNyBAQAogICAgICIvL2NvYmFsdC90ZXN0OnJ1bl9hbGxfdW5pdHRlc3RzIiwKICAgICAiLy90ZXN0aW5nL2dtb2NrIiwKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKKyAgICAiLy91cmwiLAogCiAgICAgIyBUT0RPOiBSZW1vdmUgdGhlIGRlcGVuZGVuY3kgYmVsb3csIGl0IHdvcmtzIGFyb3VuZCB0aGUgZmFjdCB0aGF0CiAgICAgIyAgICAgICBTY3JpcHRWYWx1ZUZhY3RvcnkgaGFzIG5vbi12aXJ0dWFsIG1ldGhvZCBDcmVhdGVQcm9taXNlKCkuCmRpZmYgLS1naXQgYS9jb2JhbHQveGhyL3hoci5neXAgYi9jb2JhbHQveGhyL3hoci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZWJjNGMuLjAwMDAwMDAKLS0tIGEvY29iYWx0L3hoci94aHIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneGhyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndXJsX2ZldGNoZXJfYnVmZmVyX3dyaXRlci5jYycsCi0gICAgICAgICd1cmxfZmV0Y2hlcl9idWZmZXJfd3JpdGVyLmgnLAotICAgICAgICAneG1sX2h0dHBfcmVxdWVzdC5jYycsCi0gICAgICAgICd4bWxfaHR0cF9yZXF1ZXN0LmgnLAotICAgICAgICAneG1sX2h0dHBfcmVxdWVzdF9ldmVudF90YXJnZXQuY2MnLAotICAgICAgICAneG1sX2h0dHBfcmVxdWVzdF9ldmVudF90YXJnZXQuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbV9wYXJzZXIvZG9tX3BhcnNlci5neXA6ZG9tX3BhcnNlcicsCi0gICAgICAgICc8KERFUFRIKS9uZXQvbmV0Lmd5cDpuZXQnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2VuYWJsZV94aHJfaGVhZGVyX2ZpbHRlcmluZyA9PSAxIGFuZCBzYl9ldmVyZ3JlZW4gPT0gMCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd4aHJfbW9kaWZ5X2hlYWRlcnMuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NPQkFMVF9FTkFCTEVfWEhSX0hFQURFUl9GSUxURVJJTkcnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NPQkFMVF9FTkFCTEVfWEhSX0hFQURFUl9GSUxURVJJTkcnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneGhyX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd4bWxfaHR0cF9yZXF1ZXN0X3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kb20vZG9tLmd5cDpkb20nLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAneGhyJywKLQotICAgICAgICAjIFRPRE86IFJlbW92ZSB0aGUgZGVwZW5kZW5jeSBiZWxvdywgaXQgd29ya3MgYXJvdW5kIHRoZSBmYWN0IHRoYXQKLSAgICAgICAgIyAgICAgICBTY3JpcHRWYWx1ZUZhY3RvcnkgaGFzIG5vbi12aXJ0dWFsIG1ldGhvZCBDcmVhdGVQcm9taXNlKCkuCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L2VuZ2luZS5neXA6ZW5naW5lJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9jb2JhbHQvdGVzdC90ZXN0Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneGhyX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3hocl90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3hocl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdC5jYyBiL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdC5jYwppbmRleCA1NjVjZWI2Li5hY2FjZmQyIDEwMDY0NAotLS0gYS9jb2JhbHQveGhyL3htbF9odHRwX3JlcXVlc3QuY2MKKysrIGIvY29iYWx0L3hoci94bWxfaHR0cF9yZXF1ZXN0LmNjCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiY29iYWx0L2xvYWRlci91cmxfZmV0Y2hlcl9zdHJpbmdfd3JpdGVyLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC9nbG9iYWxfZW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJjb2JhbHQvc2NyaXB0L2phdmFzY3JpcHRfZW5naW5lLmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9jb250ZXh0LmgiCisjaW5jbHVkZSAiY29iYWx0L3dlYi9lbnZpcm9ubWVudF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImNvYmFsdC94aHIveGhyX21vZGlmeV9oZWFkZXJzLmgiCiAjaW5jbHVkZSAibmIvbWVtb3J5X3Njb3BlLmgiCiAjaW5jbHVkZSAibmV0L2h0dHAvaHR0cF91dGlsLmgiCkBAIC00OTMsNyArNDk1LDggQEAKICAgLy8gaXNuJ3Qga0RvbmUgaXNuJ3QgZWZmaWNpZW50IGZvciBsYXJnZSByZXNwb25zZXMuICBGb3J0dW5hdGVseSB0aGlzIGZlYXR1cmUKICAgLy8gaXMgcmFyZWx5IHVzZWQuCiAgIGlmIChzdGF0ZV8gPT0ga0xvYWRpbmcpIHsKLSAgICBMT0coV0FSTklORykgPDwgIlJldHJpZXZpbmcgcmVzcG9uc2VUZXh0IHdoaWxlIGxvYWRpbmcgY2FuIGJlIGluZWZmaWNpZW50LiI7CisgICAgTE9HX09OQ0UoV0FSTklORykKKyAgICAgICAgPDwgIlJldHJpZXZpbmcgcmVzcG9uc2VUZXh0IHdoaWxlIGxvYWRpbmcgY2FuIGJlIGluZWZmaWNpZW50LiI7CiAgICAgcmV0dXJuIHJlc3BvbnNlX2JvZHlfLT5HZXRUZW1wb3JhcnlSZWZlcmVuY2VPZlN0cmluZygpOwogICB9CiAgIHJldHVybiByZXNwb25zZV9ib2R5Xy0+R2V0UmVmZXJlbmNlT2ZTdHJpbmdBbmRTZWFsKCk7CkBAIC03MjUsNyArNzI4LDcgQEAKICAgICBzdGQ6OnN0cmluZyBkb3dubG9hZGVkX2RhdGE7CiAgICAgcmVzcG9uc2VfYm9keV8tPkdldEFuZFJlc2V0RGF0YUFuZERvd25sb2FkUHJvZ3Jlc3MoJmRvd25sb2FkZWRfZGF0YSk7CiAgICAgc2NyaXB0OjpIYW5kbGU8c2NyaXB0OjpVaW50OEFycmF5PiBkYXRhID0KLSAgICAgICAgc2NyaXB0OjpVaW50OEFycmF5OjpOZXcoc2V0dGluZ3NfLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwKKyAgICAgICAgc2NyaXB0OjpVaW50OEFycmF5OjpOZXcoc2V0dGluZ3NfLT5jb250ZXh0KCktPmdsb2JhbF9lbnZpcm9ubWVudCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZGVkX2RhdGEuZGF0YSgpLCBkb3dubG9hZGVkX2RhdGEuc2l6ZSgpKTsKICAgICBmZXRjaF9jYWxsYmFja18tPnZhbHVlKCkuUnVuKGRhdGEpOwogICB9CkBAIC05NjMsNyArOTY2LDggQEAKICAgICAgIDw8IF9fRlVOQ1RJT05fXyA8PCAiICgiIDw8IFJlcXVlc3RFcnJvclR5cGVOYW1lKHJlcXVlc3RfZXJyb3JfdHlwZSkKICAgICAgIDw8ICIpICIgPDwgKnRoaXMgPDwgc3RkOjplbmRsCiAgICAgICA8PCBzY3JpcHQ6OlN0YWNrVHJhY2VUb1N0cmluZygKLSAgICAgICAgICAgICBzZXR0aW5nc18tPmdsb2JhbF9lbnZpcm9ubWVudCgpLT5HZXRTdGFja1RyYWNlKDAgLyptYXhfZnJhbWVzKi8pKTsKKyAgICAgICAgICAgICBzZXR0aW5nc18tPmNvbnRleHQoKS0+Z2xvYmFsX2Vudmlyb25tZW50KCktPkdldFN0YWNrVHJhY2UoCisgICAgICAgICAgICAgICAgIDAgLyptYXhfZnJhbWVzKi8pKTsKICAgc3RvcF90aW1lb3V0XyA9IHRydWU7CiAgIC8vIFN0ZXAgMQogICBUZXJtaW5hdGVSZXF1ZXN0KCk7CkBAIC0xMDM5LDcgKzEwNDMsNyBAQAogICAgICAgICBuZXcgc2NyaXB0OjpQcmVhbGxvY2F0ZWRBcnJheUJ1ZmZlckRhdGEoKSk7CiAgICAgcmVzcG9uc2VfYm9keV8tPkdldEFuZFJlc2V0RGF0YShkb3dubG9hZGVkX2RhdGEuZ2V0KCkpOwogICAgIGF1dG8gYXJyYXlfYnVmZmVyID0gc2NyaXB0OjpBcnJheUJ1ZmZlcjo6TmV3KAotICAgICAgICBzZXR0aW5nc18tPmdsb2JhbF9lbnZpcm9ubWVudCgpLCBzdGQ6Om1vdmUoZG93bmxvYWRlZF9kYXRhKSk7CisgICAgICAgIHNldHRpbmdzXy0+Y29udGV4dCgpLT5nbG9iYWxfZW52aXJvbm1lbnQoKSwgc3RkOjptb3ZlKGRvd25sb2FkZWRfZGF0YSkpOwogICAgIHJlc3BvbnNlX2FycmF5X2J1ZmZlcl9yZWZlcmVuY2VfLnJlc2V0KAogICAgICAgICBuZXcgc2NyaXB0OjpTY3JpcHRWYWx1ZTxzY3JpcHQ6OkFycmF5QnVmZmVyPjo6UmVmZXJlbmNlKHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfYnVmZmVyKSk7CkBAIC0xMDc3LDkgKzEwODEsMTEgQEAKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6SW5jcmVtZW50QWN0aXZlUmVxdWVzdHMoKSB7CiAgIGlmIChhY3RpdmVfcmVxdWVzdHNfY291bnRfID09IDApIHsKKyAgICBEQ0hFQ0soc2V0dGluZ3NfKTsKKyAgICBEQ0hFQ0soc2V0dGluZ3NfLT5jb250ZXh0KCkpOwogICAgIHByZXZlbnRfZ2NfdW50aWxfc2VuZF9jb21wbGV0ZV8ucmVzZXQoCiAgICAgICAgIG5ldyBzY3JpcHQ6Okdsb2JhbEVudmlyb25tZW50OjpTY29wZWRQcmV2ZW50R2FyYmFnZUNvbGxlY3Rpb24oCi0gICAgICAgICAgICBzZXR0aW5nc18tPmdsb2JhbF9lbnZpcm9ubWVudCgpLCB0aGlzKSk7CisgICAgICAgICAgICBzZXR0aW5nc18tPmNvbnRleHQoKS0+Z2xvYmFsX2Vudmlyb25tZW50KCksIHRoaXMpKTsKICAgfQogICBhY3RpdmVfcmVxdWVzdHNfY291bnRfKys7CiB9CkBAIC0xMTExLDcgKzExMTcsNyBAQAogICByZXNwb25zZV9hcnJheV9idWZmZXJfcmVmZXJlbmNlXy5yZXNldCgpOwogCiAgIG5ldHdvcms6Ok5ldHdvcmtNb2R1bGUqIG5ldHdvcmtfbW9kdWxlID0KLSAgICAgIHNldHRpbmdzXy0+ZmV0Y2hlcl9mYWN0b3J5KCktPm5ldHdvcmtfbW9kdWxlKCk7CisgICAgICBzZXR0aW5nc18tPmNvbnRleHQoKS0+ZmV0Y2hlcl9mYWN0b3J5KCktPm5ldHdvcmtfbW9kdWxlKCk7CiAgIHVybF9mZXRjaGVyXyA9IG5ldDo6VVJMRmV0Y2hlcjo6Q3JlYXRlKHJlcXVlc3RfdXJsXywgbWV0aG9kXywgdGhpcyk7CiAgICsrdXJsX2ZldGNoZXJfZ2VuZXJhdGlvbl87CiAgIHVybF9mZXRjaGVyXy0+U2V0UmVxdWVzdENvbnRleHQobmV0d29ya19tb2R1bGUtPnVybF9yZXF1ZXN0X2NvbnRleHRfZ2V0dGVyKCkpOwpAQCAtMTE4Myw4ICsxMTg5LDggQEAKICAgfQogICBETE9HX0lGKElORk8sIHZlcmJvc2UoKSkgPDwgX19GVU5DVElPTl9fIDw8ICp0aGlzOwogICBpZiAoIWRvcHJlZmxpZ2h0KSB7Ci0gICAgRENIRUNLKHNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKSk7Ci0gICAgU3RhcnRVUkxGZXRjaGVyKHNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKS0+bWF4X25ldHdvcmtfZGVsYXkoKSwKKyAgICBEQ0hFQ0soc2V0dGluZ3NfLT5jb250ZXh0KCktPm5ldHdvcmtfbW9kdWxlKCkpOworICAgIFN0YXJ0VVJMRmV0Y2hlcihzZXR0aW5nc18tPmNvbnRleHQoKS0+bmV0d29ya19tb2R1bGUoKS0+bWF4X25ldHdvcmtfZGVsYXkoKSwKICAgICAgICAgICAgICAgICAgICAgdXJsX2ZldGNoZXJfZ2VuZXJhdGlvbl8pOwogICB9CiB9CkBAIC0xMTk0LDggKzEyMDAsOCBAQAogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpDT1JTUHJlZmxpZ2h0U3VjY2Vzc0NhbGxiYWNrKCkgewotICBEQ0hFQ0soc2V0dGluZ3NfLT5uZXR3b3JrX21vZHVsZSgpKTsKLSAgU3RhcnRVUkxGZXRjaGVyKHNldHRpbmdzXy0+bmV0d29ya19tb2R1bGUoKS0+bWF4X25ldHdvcmtfZGVsYXkoKSwKKyAgRENIRUNLKHNldHRpbmdzXy0+Y29udGV4dCgpLT5uZXR3b3JrX21vZHVsZSgpKTsKKyAgU3RhcnRVUkxGZXRjaGVyKHNldHRpbmdzXy0+Y29udGV4dCgpLT5uZXR3b3JrX21vZHVsZSgpLT5tYXhfbmV0d29ya19kZWxheSgpLAogICAgICAgICAgICAgICAgICAgdXJsX2ZldGNoZXJfZ2VuZXJhdGlvbl8pOwogfQogCmRpZmYgLS1naXQgYS9jb2JhbHQveGhyL3htbF9odHRwX3JlcXVlc3RfdGVzdC5jYyBiL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdF90ZXN0LmNjCmluZGV4IDUzYzI2MTMuLmYxZTAyM2MgMTAwNjQ0Ci0tLSBhL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdF90ZXN0LmNjCisrKyBiL2NvYmFsdC94aHIveG1sX2h0dHBfcmVxdWVzdF90ZXN0LmNjCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC90ZXN0aW5nL2Zha2Vfc2NyaXB0X3ZhbHVlLmgiCiAjaW5jbHVkZSAiY29iYWx0L3NjcmlwdC90ZXN0aW5nL21vY2tfZXhjZXB0aW9uX3N0YXRlLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCisjaW5jbHVkZSAidXJsL2d1cmwuaCIKIAogdXNpbmcgY29iYWx0Ojpkb206OkV2ZW50TGlzdGVuZXI7CiB1c2luZyBjb2JhbHQ6OmRvbTo6dGVzdGluZzo6TW9ja0V2ZW50TGlzdGVuZXI7CkBAIC05MCwxMSArOTEsNyBAQAogCiBjbGFzcyBGYWtlU2V0dGluZ3MgOiBwdWJsaWMgZG9tOjp0ZXN0aW5nOjpTdHViRW52aXJvbm1lbnRTZXR0aW5ncyB7CiAgcHVibGljOgotICBGYWtlU2V0dGluZ3MoKSA6IGV4YW1wbGVfKCJodHRwOi8vZXhhbXBsZS5jb20iKSB7fQotICBjb25zdCBHVVJMJiBiYXNlX3VybCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGV4YW1wbGVfOyB9Ci0KLSBwcml2YXRlOgotICBHVVJMIGV4YW1wbGVfOworICBGYWtlU2V0dGluZ3MoKSB7IHNldF9iYXNlX3VybChHVVJMKCJodHRwOi8vZXhhbXBsZS5jb20iKSk7IH0KIH07CiAKIGNsYXNzIE1vY2tDc3BEZWxlZ2F0ZSA6IHB1YmxpYyBkb206OkNzcERlbGVnYXRlSW5zZWN1cmUgewpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy9jbGllbnRfdXBkYXRlX3Byb3RvY29sL2NsaWVudF91cGRhdGVfcHJvdG9jb2wuZ3lwIGIvY29tcG9uZW50cy9jbGllbnRfdXBkYXRlX3Byb3RvY29sL2NsaWVudF91cGRhdGVfcHJvdG9jb2wuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDllZWY3Li4wMDAwMDAwCi0tLSBhL2NvbXBvbmVudHMvY2xpZW50X3VwZGF0ZV9wcm90b2NvbC9jbGllbnRfdXBkYXRlX3Byb3RvY29sLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjbGllbnRfdXBkYXRlX3Byb3RvY29sJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZWNkc2EuY2MnLAotICAgICAgICAnZWNkc2EuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2NyeXB0by9jcnlwdG8uZ3lwOmNyeXB0bycsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjbGllbnRfdXBkYXRlX3Byb3RvY29sX3VuaXR0ZXN0cycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2VjZHNhX3VuaXR0ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY2xpZW50X3VwZGF0ZV9wcm90b2NvbCcsCi0gICAgICAgICc8KERFUFRIKS9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgXQotfQpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy9jcnhfZmlsZS9jcnhfZmlsZS5neXAgYi9jb21wb25lbnRzL2NyeF9maWxlL2NyeF9maWxlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmMDAzMS4uMDAwMDAwMAotLS0gYS9jb21wb25lbnRzL2NyeF9maWxlL2NyeF9maWxlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcnhfZmlsZScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NyeF9maWxlLmgnLAotICAgICAgICAnY3J4X3ZlcmlmaWVyLmNjJywKLSAgICAgICAgJ2NyeF92ZXJpZmllci5oJywKLSAgICAgICAgJ2NyeDMucGIuY2MnLAotICAgICAgICAnY3J4My5wYi5oJywKLSAgICAgICAgJ2NyeDMucHJvdG8nLAotICAgICAgICAnaWRfdXRpbC5jYycsCi0gICAgICAgICdpZF91dGlsLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5neXA6cHJvdG9idWZfbGl0ZScsCi0gICAgICAgICc8KERFUFRIKS9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J4X2NyZWF0b3InLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcnhfY3JlYXRvci5jYycsCi0gICAgICAgICdjcnhfY3JlYXRvci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3J4X2ZpbGUnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYuZ3lwOnByb3RvYnVmX2xpdGUnLAotICAgICAgICAnPChERVBUSCkvY3J5cHRvL2NyeXB0by5neXA6Y3J5cHRvJywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgIH0sCi0gIF0KLX0KZGlmZiAtLWdpdCBhL2NvbXBvbmVudHMvcHJlZnMvcHJlZnMuZ3lwIGIvY29tcG9uZW50cy9wcmVmcy9wcmVmcy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZGYxOWMuLjAwMDAwMDAKLS0tIGEvY29tcG9uZW50cy9wcmVmcy9wcmVmcy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncHJlZnMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb21tYW5kX2xpbmVfcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdjb21tYW5kX2xpbmVfcHJlZl9zdG9yZS5oJywKLSAgICAgICAgJ2RlZmF1bHRfcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdkZWZhdWx0X3ByZWZfc3RvcmUuaCcsCi0gICAgICAgICdpbl9tZW1vcnlfcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdpbl9tZW1vcnlfcHJlZl9zdG9yZS5oJywKLSAgICAgICAgJ2pzb25fcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdqc29uX3ByZWZfc3RvcmUuaCcsCi0gICAgICAgICdvdmVybGF5X3VzZXJfcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdvdmVybGF5X3VzZXJfcHJlZl9zdG9yZS5oJywKLSAgICAgICAgJ3BlcnNpc3RlbnRfcHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdwZXJzaXN0ZW50X3ByZWZfc3RvcmUuaCcsCi0gICAgICAgICdwcmVmX2NoYW5nZV9yZWdpc3RyYXIuY2MnLAotICAgICAgICAncHJlZl9jaGFuZ2VfcmVnaXN0cmFyLmgnLAotICAgICAgICAncHJlZl9maWx0ZXIuaCcsCi0gICAgICAgICdwcmVmX21lbWJlci5jYycsCi0gICAgICAgICdwcmVmX21lbWJlci5oJywKLSAgICAgICAgJ3ByZWZfbm90aWZpZXIuaCcsCi0gICAgICAgICdwcmVmX25vdGlmaWVyX2ltcGwuY2MnLAotICAgICAgICAncHJlZl9ub3RpZmllcl9pbXBsLmgnLAotICAgICAgICAncHJlZl9vYnNlcnZlci5oJywKLSAgICAgICAgJ3ByZWZfcmVnaXN0cnkuY2MnLAotICAgICAgICAncHJlZl9yZWdpc3RyeS5oJywKLSAgICAgICAgJ3ByZWZfcmVnaXN0cnlfc2ltcGxlLmNjJywKLSAgICAgICAgJ3ByZWZfcmVnaXN0cnlfc2ltcGxlLmgnLAotICAgICAgICAncHJlZl9zZXJ2aWNlLmNjJywKLSAgICAgICAgJ3ByZWZfc2VydmljZS5oJywKLSAgICAgICAgJ3ByZWZfc2VydmljZV9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3ByZWZfc2VydmljZV9mYWN0b3J5LmgnLAotICAgICAgICAncHJlZl9zdG9yZS5jYycsCi0gICAgICAgICdwcmVmX3N0b3JlLmgnLAotICAgICAgICAncHJlZl92YWx1ZV9tYXAuY2MnLAotICAgICAgICAncHJlZl92YWx1ZV9tYXAuaCcsCi0gICAgICAgICdwcmVmX3ZhbHVlX3N0b3JlLmNjJywKLSAgICAgICAgJ3ByZWZfdmFsdWVfc3RvcmUuaCcsCi0gICAgICAgICdwcmVmc19leHBvcnQuaCcsCi0gICAgICAgICdzY29wZWRfdXNlcl9wcmVmX3VwZGF0ZS5jYycsCi0gICAgICAgICdzY29wZWRfdXNlcl9wcmVmX3VwZGF0ZS5oJywKLSAgICAgICAgJ3ZhbHVlX21hcF9wcmVmX3N0b3JlLmNjJywKLSAgICAgICAgJ3ZhbHVlX21hcF9wcmVmX3N0b3JlLmgnLAotICAgICAgICAnd3JpdGVhYmxlX3ByZWZfc3RvcmUuY2MnLAotICAgICAgICAnd3JpdGVhYmxlX3ByZWZfc3RvcmUuaCcsCi0gICAgICBdLAotICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvdXRpbC92YWx1ZXMvdmFsdWVzX3V0aWwuZ3lwOnZhbHVlc191dGlsJywKLSAgICAgIF0sCi0gICAgICdkZWZpbmVzJzogWwotICAgICAgICdDT01QT05FTlRTX1BSRUZTX0lNUExFTUVOVEFUSU9OJywKLSAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd0ZXN0X3N1cHBvcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdtb2NrX3ByZWZfY2hhbmdlX2NhbGxiYWNrLmNjJywKLSAgICAgICAgJ21vY2tfcHJlZl9jaGFuZ2VfY2FsbGJhY2suaCcsCi0gICAgICAgICdwcmVmX3N0b3JlX29ic2VydmVyX21vY2suY2MnLAotICAgICAgICAncHJlZl9zdG9yZV9vYnNlcnZlcl9tb2NrLmgnLAotICAgICAgICAndGVzdGluZ19wcmVmX3NlcnZpY2UuY2MnLAotICAgICAgICAndGVzdGluZ19wcmVmX3NlcnZpY2UuaCcsCi0gICAgICAgICd0ZXN0aW5nX3ByZWZfc3RvcmUuY2MnLAotICAgICAgICAndGVzdGluZ19wcmVmX3N0b3JlLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdwcmVmcycsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICBdCi19CmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvQlVJTEQuZ24gYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvQlVJTEQuZ24KaW5kZXggZTJjY2Q5Yi4uMWEyZmQ1ZiAxMDA2NDQKLS0tIGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L0JVSUxELmduCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9CVUlMRC5nbgpAQCAtMjQ3LDYgKzI0Nyw0IEBACiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29iYWx0X3Nsb3RfbWFuYWdlbWVudC5jYyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb2JhbHRfc2xvdF9tYW5hZ2VtZW50LmNjCmluZGV4IGQyMjBiNzQuLjZhYmVlNTggMTAwNjQ0Ci0tLSBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb2JhbHRfc2xvdF9tYW5hZ2VtZW50LmNjCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb2JhbHRfc2xvdF9tYW5hZ2VtZW50LmNjCkBAIC04OSwxMSArODksMTUgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgYXBwX2tleV8gPSBhcHBfa2V5OworICBpbml0aWFsaXplZF8gPSB0cnVlOwogICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDb2JhbHRTbG90TWFuYWdlbWVudDo6U2VsZWN0U2xvdChiYXNlOjpGaWxlUGF0aCogZGlyKSB7Ci0gIFNCX0RDSEVDSyhpbnN0YWxsYXRpb25fYXBpXyk7CisgIFNCX0RDSEVDSyhpbml0aWFsaXplZF8pOworICBpZiAoIWluaXRpYWxpemVkXykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQogICBMT0coSU5GTykgPDwgIkNvYmFsdFNsb3RNYW5hZ2VtZW50OjpTZWxlY3RTbG90IjsKICAgaW50IG1heF9zbG90cyA9IGluc3RhbGxhdGlvbl9hcGlfLT5HZXRNYXhOdW1iZXJJbnN0YWxsYXRpb25zKCk7CiAgIGlmIChtYXhfc2xvdHMgPT0gSU1fRVhUX0VSUk9SKSB7CkBAIC0xMjUsMTYgKzEyOSwxOCBAQAogICAgIGJhc2U6OkZpbGVQYXRoIGluc3RhbGxhdGlvbl9kaXIoCiAgICAgICAgIHN0ZDo6c3RyaW5nKGluc3RhbGxhdGlvbl9wYXRoLmJlZ2luKCksIGluc3RhbGxhdGlvbl9wYXRoLmVuZCgpKSk7CiAKLSAgICAvLyBDbGVhbnVwIGV4cGlyZWQgZHJhaW4gZmlsZXMuCi0gICAgRHJhaW5GaWxlQ2xlYXIoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCksIGFwcF9rZXlfLmNfc3RyKCksIHRydWUpOworICAgIC8vIENsZWFudXAgYWxsIGV4cGlyZWQgZmlsZXMgZnJvbSBhbGwgYXBwcy4KKyAgICBEcmFpbkZpbGVDbGVhckV4cGlyZWQoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCkpOwogCiAgICAgLy8gQ2xlYW51cCBhbGwgZHJhaW4gZmlsZXMgZnJvbSB0aGUgY3VycmVudCBhcHAuCi0gICAgRHJhaW5GaWxlUmVtb3ZlKGluc3RhbGxhdGlvbl9kaXIudmFsdWUoKS5jX3N0cigpLCBhcHBfa2V5Xy5jX3N0cigpKTsKKyAgICBEcmFpbkZpbGVDbGVhckZvckFwcChpbnN0YWxsYXRpb25fZGlyLnZhbHVlKCkuY19zdHIoKSwgYXBwX2tleV8uY19zdHIoKSk7CisKICAgICBiYXNlOjpWZXJzaW9uIHZlcnNpb24gPQogICAgICAgICBjb2JhbHQ6OnVwZGF0ZXI6OlJlYWRFdmVyZ3JlZW5WZXJzaW9uKGluc3RhbGxhdGlvbl9kaXIpOwogICAgIGlmICghdmVyc2lvbi5Jc1ZhbGlkKCkpIHsKICAgICAgIExPRyhJTkZPKSA8PCAiQ29iYWx0U2xvdE1hbmFnZW1lbnQ6OlNlbGVjdFNsb3QgaW5zdGFsbGVkIHZlcnNpb24gaW52YWxpZCI7Ci0gICAgICBpZiAoIURyYWluRmlsZURyYWluaW5nKGluc3RhbGxhdGlvbl9kaXIudmFsdWUoKS5jX3N0cigpLCAiIikpIHsKKyAgICAgIGlmICghRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9rZXlfLmNfc3RyKCkpKSB7CiAgICAgICAgIExPRyhJTkZPKSA8PCAiQ29iYWx0U2xvdE1hbmFnZW1lbnQ6OlNlbGVjdFNsb3Qgbm90IGRyYWluaW5nIjsKICAgICAgICAgLy8gRm91bmQgZW1wdHkgc2xvdC4KICAgICAgICAgc2xvdF9jYW5kaWRhdGUgPSBpOwpAQCAtMTQ3LDcgKzE1Myw4IEBACiAgICAgICB9CiAgICAgfSBlbHNlIGlmICgoIXNsb3RfY2FuZGlkYXRlX3ZlcnNpb24uSXNWYWxpZCgpIHx8CiAgICAgICAgICAgICAgICAgc2xvdF9jYW5kaWRhdGVfdmVyc2lvbiA+IHZlcnNpb24pKSB7Ci0gICAgICBpZiAoIURyYWluRmlsZURyYWluaW5nKGluc3RhbGxhdGlvbl9kaXIudmFsdWUoKS5jX3N0cigpLCAiIikpIHsKKyAgICAgIGlmICghRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9rZXlfLmNfc3RyKCkpKSB7CiAgICAgICAgIC8vIEZvdW5kIGEgc2xvdCB3aXRoIG9sZGVyIHZlcnNpb24gdGhhdCdzIG5vdCBkcmFpbmluZy4KICAgICAgICAgTE9HKElORk8pIDw8ICJDb2JhbHRTbG90TWFuYWdlbWVudDo6U2VsZWN0U2xvdCBzbG90IGNhbmRpZGF0ZTogIiA8PCBpOwogICAgICAgICBzbG90X2NhbmRpZGF0ZV92ZXJzaW9uID0gdmVyc2lvbjsKQEAgLTE3NSw3ICsxODIsMTAgQEAKIH0KIAogYm9vbCBDb2JhbHRTbG90TWFuYWdlbWVudDo6Q29uZmlybVNsb3QoY29uc3QgYmFzZTo6RmlsZVBhdGgmIGRpcikgewotICBTQl9EQ0hFQ0soaW5zdGFsbGF0aW9uX2FwaV8pOworICBTQl9EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKKyAgaWYgKCFpbml0aWFsaXplZF8pIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KICAgTE9HKElORk8pIDw8ICJDb2JhbHRTbG90TWFuYWdlbWVudDo6Q29uZmlybVNsb3QgIjsKICAgaWYgKCFEcmFpbkZpbGVSYW5rQW5kQ2hlY2soZGlyLnZhbHVlKCkuY19zdHIoKSwgYXBwX2tleV8uY19zdHIoKSkpIHsKICAgICBMT0coSU5GTykgPDwgIkNvYmFsdFNsb3RNYW5hZ2VtZW50OjpDb25maXJtU2xvdDogZmFpbGVkIHRvIGxvY2sgc2xvdCAiOwpAQCAtMTk4LDEzICsyMDgsNDkgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29iYWx0U2xvdE1hbmFnZW1lbnQ6OkNsZWFudXBBbGxEcmFpbkZpbGVzKGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBkaXIpIHsKLSAgaWYgKCFkaXIuZW1wdHkoKSAmJiAhYXBwX2tleV8uZW1wdHkoKSkgewotICAgIERyYWluRmlsZVJlbW92ZShkaXIudmFsdWUoKS5jX3N0cigpLCBhcHBfa2V5Xy5jX3N0cigpKTsKK3ZvaWQgQ29iYWx0U2xvdE1hbmFnZW1lbnQ6OkNsZWFudXBBbGxEcmFpbkZpbGVzKCkgeworICBTQl9EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKKyAgaWYgKCFpbml0aWFsaXplZF8pIHsKKyAgICByZXR1cm47CisgIH0KKworICBpbnQgbWF4X3Nsb3RzID0gaW5zdGFsbGF0aW9uX2FwaV8tPkdldE1heE51bWJlckluc3RhbGxhdGlvbnMoKTsKKyAgaWYgKG1heF9zbG90cyA9PSBJTV9FWFRfRVJST1IpIHsKKyAgICBMT0coRVJST1IpIDw8ICJDb2JhbHRTbG90TWFuYWdlbWVudDo6Q2xlYW51cEFsbERyYWluRmlsZTogRmFpbGVkIHRvIGdldCAiCisgICAgICAgICAgICAgICAgICAibWF4IG51bWJlciBvZiBzbG90cyI7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gSXRlcmF0ZSBvdmVyIGFsbCB3cml0ZWFibGUgaW5zdGFsbGF0aW9uIHNsb3RzLgorICBmb3IgKGludCBpID0gMTsgaSA8IG1heF9zbG90czsgaSsrKSB7CisgICAgTE9HKElORk8pIDw8ICJDb2JhbHRTbG90TWFuYWdlbWVudDo6Q2xlYW51cEFsbERyYWluRmlsZSBpdGVyYXRpbmcgc2xvdD0iCisgICAgICAgICAgICAgIDw8IGk7CisgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gaW5zdGFsbGF0aW9uX3BhdGgoa1NiRmlsZU1heFBhdGgpOworICAgIGlmIChpbnN0YWxsYXRpb25fYXBpXy0+R2V0SW5zdGFsbGF0aW9uUGF0aChpLCBpbnN0YWxsYXRpb25fcGF0aC5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxhdGlvbl9wYXRoLnNpemUoKSkgPT0KKyAgICAgICAgSU1fRVhUX0VSUk9SKSB7CisgICAgICBMT0coRVJST1IpIDw8ICJDb2JhbHRTbG90TWFuYWdlbWVudDo6Q2xlYW51cEFsbERyYWluRmlsZTogRmFpbGVkIHRvIGdldCAiCisgICAgICAgICAgICAgICAgICAgICJpbnN0YWxsYXRpb24gcGF0aCBmb3Igc2xvdD0iCisgICAgICAgICAgICAgICAgIDw8IGk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBMT0coSU5GTykKKyAgICAgICAgPDwgIkNvYmFsdFNsb3RNYW5hZ2VtZW50OjpDbGVhbnVwQWxsRHJhaW5GaWxlOiBpbnN0YWxsYXRpb25fcGF0aCA9ICIKKyAgICAgICAgPDwgaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpOworCisgICAgYmFzZTo6RmlsZVBhdGggaW5zdGFsbGF0aW9uX2RpcigKKyAgICAgICAgc3RkOjpzdHJpbmcoaW5zdGFsbGF0aW9uX3BhdGguYmVnaW4oKSwgaW5zdGFsbGF0aW9uX3BhdGguZW5kKCkpKTsKKworICAgIERyYWluRmlsZUNsZWFyRm9yQXBwKGluc3RhbGxhdGlvbl9kaXIudmFsdWUoKS5jX3N0cigpLCBhcHBfa2V5Xy5jX3N0cigpKTsKICAgfQogfQogCiBpbnQgQ29iYWx0U2xvdE1hbmFnZW1lbnQ6OkdldEluc3RhbGxhdGlvbkluZGV4KCkgeworICBTQl9EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKKyAgaWYgKCFpbml0aWFsaXplZF8pIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KICAgcmV0dXJuIGluc3RhbGxhdGlvbl9pbmRleF87CiB9CiAKQEAgLTIxOSw3ICsyNjUsNyBAQAogICBpZiAoIXN0YXJib2FyZDo6bG9hZGVyX2FwcDo6Q3JlYXRlQXBwS2V5RmlsZShnb29kX2FwcF9rZXlfZmlsZV9wYXRoKSkgewogICAgIExPRyhXQVJOSU5HKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBnb29kIGFwcCBrZXkgZmlsZSI7CiAgIH0KLSAgRHJhaW5GaWxlUmVtb3ZlKGRpci5jX3N0cigpLCBhcHBfa2V5LmNfc3RyKCkpOworICBEcmFpbkZpbGVDbGVhckZvckFwcChkaXIuY19zdHIoKSwgYXBwX2tleS5jX3N0cigpKTsKICAgaW50IHJldCA9CiAgICAgICBpbnN0YWxsYXRpb25fYXBpLT5SZXF1ZXN0Um9sbEZvcndhcmRUb0luc3RhbGxhdGlvbihpbnN0YWxsYXRpb25faW5kZXgpOwogICBpZiAocmV0ID09IElNX0VYVF9FUlJPUikgewpAQCAtMjc1LDE4ICszMjEsMjQgQEAKICAgICBiYXNlOjpWZXJzaW9uIGluc3RhbGxlZF92ZXJzaW9uID0KICAgICAgICAgY29iYWx0Ojp1cGRhdGVyOjpSZWFkRXZlcmdyZWVuVmVyc2lvbihpbnN0YWxsYXRpb25fZGlyKTsKIAorICAgIHN0ZDo6c3RyaW5nIGdvb2RfYXBwX2tleV9maWxlX3BhdGggPQorICAgICAgICBzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OkdldEdvb2RBcHBLZXlGaWxlUGF0aCgKKyAgICAgICAgICAgIGluc3RhbGxhdGlvbl9kaXIudmFsdWUoKS5jX3N0cigpLCBhcHBfa2V5KTsKICAgICBpZiAoIWluc3RhbGxlZF92ZXJzaW9uLklzVmFsaWQoKSkgewogICAgICAgTE9HKFdBUk5JTkcpIDw8ICJDb2JhbHRRdWlja0luc3RhbGxhdGlvbjogaW52YWxpZCB2ZXJzaW9uICI7CiAgICAgICBjb250aW51ZTsKICAgICB9IGVsc2UgaWYgKHNsb3RfY2FuZGlkYXRlX3ZlcnNpb24gPCBpbnN0YWxsZWRfdmVyc2lvbiAmJgogICAgICAgICAgICAgICAgY3VycmVudF92ZXJzaW9uIDwgaW5zdGFsbGVkX3ZlcnNpb24gJiYKLSAgICAgICAgICAgICAgICFEcmFpbkZpbGVEcmFpbmluZyhpbnN0YWxsYXRpb25fZGlyLnZhbHVlKCkuY19zdHIoKSwgIiIpICYmCisgICAgICAgICAgICAgICAhRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwX2tleSkgJiYKICAgICAgICAgICAgICAgICFDaGVja0JhZEZpbGVFeGlzdHMoaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCksIGFwcF9rZXkpICYmCisgICAgICAgICAgICAgICAhU2JGaWxlRXhpc3RzKGdvb2RfYXBwX2tleV9maWxlX3BhdGguY19zdHIoKSkgJiYKICAgICAgICAgICAgICAgIHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6QW55R29vZEFwcEtleUZpbGUoCiAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uX2Rpci52YWx1ZSgpLmNfc3RyKCkpKSB7CiAgICAgICAvLyBGb3VuZCBhIHNsb3Qgd2l0aCBuZXdlciB2ZXJzaW9uIHRoYW4gdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGF0J3Mgbm90CiAgICAgICAvLyBkcmFpbmluZywgYW5kIG5vIGJhZCBmaWxlIG9mIGN1cnJlbnQgYXBwIGV4aXN0cywgYW5kIGEgZ29vZCBmaWxlCi0gICAgICAvLyBleGlzdHMuIFRoZSBmaW5hbCBjYW5kaWRhdGUgaXMgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIHRoZSB2YWxpZAorICAgICAgLy8gZXhpc3RzIGZyb20gYSBhbm90aGVyIGFwcCwgYnV0IG5vdCBmcm9tIHRoZSBjdXJyZW50IGFwcC4KKyAgICAgIC8vIFRoZSBmaW5hbCBjYW5kaWRhdGUgaXMgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIHRoZSB2YWxpZAogICAgICAgLy8gY2FuZGlkYXRlcy4KICAgICAgIExPRyhJTkZPKSA8PCAiQ29iYWx0UXVpY2tJbnN0YWxsYXRpb246IHNsb3QgY2FuZGlkYXRlOiAiIDw8IGk7CiAgICAgICBzbG90X2NhbmRpZGF0ZV92ZXJzaW9uID0gaW5zdGFsbGVkX3ZlcnNpb247CmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29iYWx0X3Nsb3RfbWFuYWdlbWVudC5oIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NvYmFsdF9zbG90X21hbmFnZW1lbnQuaAppbmRleCAxNjdkNjI4Li44ZWI0MGM5IDEwMDY0NAotLS0gYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29iYWx0X3Nsb3RfbWFuYWdlbWVudC5oCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb2JhbHRfc2xvdF9tYW5hZ2VtZW50LmgKQEAgLTUyLDEyICs1MiwxMyBAQAogICBpbnQgR2V0SW5zdGFsbGF0aW9uSW5kZXgoKTsKIAogICAvLyBDbGVhbnVwIGFsbCBkcmFpbiBmaWxlcyBvZiB0aGUgY3VycmVudCBhcHAuCi0gIHZvaWQgQ2xlYW51cEFsbERyYWluRmlsZXMoY29uc3QgYmFzZTo6RmlsZVBhdGgmIGRpcik7CisgIHZvaWQgQ2xlYW51cEFsbERyYWluRmlsZXMoKTsKIAogIHByaXZhdGU6CiAgIGludCBpbnN0YWxsYXRpb25faW5kZXhfID0gSU1fRVhUX0lOVkFMSURfSU5ERVg7CiAgIGNvbnN0IENvYmFsdEV4dGVuc2lvbkluc3RhbGxhdGlvbk1hbmFnZXJBcGkqIGluc3RhbGxhdGlvbl9hcGlfOwogICBzdGQ6OnN0cmluZyBhcHBfa2V5XzsKKyAgYm9vbCBpbml0aWFsaXplZF8gPSBmYWxzZTsKIH07CiAKIC8vIENyZWF0ZXMgYSBnb29kIGZpbGUgYW5kIHJvbGxzIGZvcndhcmQgdG8gdGhlIGluc3RhbGxhdGlvbiBpbgpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdC5jYyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb2JhbHRfc2xvdF9tYW5hZ2VtZW50X3Rlc3QuY2MKaW5kZXggMDFhZWI5YS4uODU2OGMzMSAxMDA2NDQKLS0tIGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdC5jYworKysgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29iYWx0X3Nsb3RfbWFuYWdlbWVudF90ZXN0LmNjCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2xvYWRlcl9hcHAvc3lzdGVtX2dldF9leHRlbnNpb25fc2hpbS5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIG5hbWVzcGFjZSB1cGRhdGVfY2xpZW50IHsKIG5hbWVzcGFjZSB7CiAKQEAgLTExMyw3ICsxMTIsNyBAQAogICBBU1NFUlRfVFJVRShjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkluaXQoYXBpXykpOwogICBiYXNlOjpGaWxlUGF0aCBkaXI7CiAgIEFTU0VSVF9UUlVFKGNvYmFsdF9zbG90X21hbmFnZW1lbnQuU2VsZWN0U2xvdCgmZGlyKSk7Ci0gIEFTU0VSVF9UUlVFKERyYWluRmlsZURyYWluaW5nKGRpci52YWx1ZSgpLmNfc3RyKCksIGtUZXN0QXBwS2V5MSkpOworICBBU1NFUlRfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKGRpci52YWx1ZSgpLmNfc3RyKCksIGtUZXN0QXBwS2V5MSkpOwogICBBU1NFUlRfVFJVRShiYXNlOjpFbmRzV2l0aChkaXIudmFsdWUoKSwgImluc3RhbGxhdGlvbl8xIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTo6Q29tcGFyZUNhc2U6OlNFTlNJVElWRSkpOwogfQpAQCAtMTUyLDcgKzE1MSw3IEBACiAgIEFTU0VSVF9UUlVFKGNvYmFsdF9zbG90X21hbmFnZW1lbnQuSW5pdChhcGlfKSk7CiAgIGJhc2U6OkZpbGVQYXRoIGRpcjsKICAgY29iYWx0X3Nsb3RfbWFuYWdlbWVudC5TZWxlY3RTbG90KCZkaXIpOwotICBBU1NFUlRfVFJVRShEcmFpbkZpbGVEcmFpbmluZyhkaXIudmFsdWUoKS5jX3N0cigpLCBrVGVzdEFwcEtleTEpKTsKKyAgQVNTRVJUX1RSVUUoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhkaXIudmFsdWUoKS5jX3N0cigpLCBrVGVzdEFwcEtleTEpKTsKICAgTE9HKElORk8pIDw8ICJkaXI9IiA8PCBkaXI7CiAKICAgQVNTRVJUX1RSVUUoYmFzZTo6RW5kc1dpdGgoZGlyLnZhbHVlKCksICJpbnN0YWxsYXRpb25fMiIsCkBAIC0xNzgsNyArMTc3LDcgQEAKICAgQVNTRVJUX1RSVUUoYmFzZTo6RW5kc1dpdGgoZGlyLnZhbHVlKCksICJpbnN0YWxsYXRpb25fMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkNvbXBhcmVDYXNlOjpTRU5TSVRJVkUpKTsKIAotICBBU1NFUlRfVFJVRShEcmFpbkZpbGVEcmFpbmluZyhkaXIudmFsdWUoKS5jX3N0cigpLCBrVGVzdEFwcEtleTEpKTsKKyAgQVNTRVJUX1RSVUUoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhkaXIudmFsdWUoKS5jX3N0cigpLCBrVGVzdEFwcEtleTEpKTsKIAogICBBU1NFUlRfVFJVRShjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkNvbmZpcm1TbG90KGRpcikpOwogCkBAIC0xODYsNiArMTg1LDE5IEBACiAgIEFTU0VSVF9FUShJTV9NQVhfTlVNX1RSSUVTLCBJbUdldEluc3RhbGxhdGlvbk51bVRyaWVzTGVmdCgxKSk7CiB9CiAKK1RFU1RfRihDb2JhbHRTbG90TWFuYWdlbWVudFRlc3QsIENsZWFudXBBbGxEcmFpbkZpbGVzKSB7CisgIGlmICghc3RvcmFnZV9wYXRoX2ltcGxlbWVudGVkXykgeworICAgIHJldHVybjsKKyAgfQorICBDb2JhbHRTbG90TWFuYWdlbWVudCBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50OworICBBU1NFUlRfVFJVRShjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkluaXQoYXBpXykpOworICBiYXNlOjpGaWxlUGF0aCBkaXI7CisgIEFTU0VSVF9UUlVFKGNvYmFsdF9zbG90X21hbmFnZW1lbnQuU2VsZWN0U2xvdCgmZGlyKSk7CisgIEFTU0VSVF9UUlVFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoZGlyLnZhbHVlKCkuY19zdHIoKSwga1Rlc3RBcHBLZXkxKSk7CisgIGNvYmFsdF9zbG90X21hbmFnZW1lbnQuQ2xlYW51cEFsbERyYWluRmlsZXMoKTsKKyAgQVNTRVJUX0ZBTFNFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoZGlyLnZhbHVlKCkuY19zdHIoKSwga1Rlc3RBcHBLZXkxKSk7Cit9CisKIFRFU1RfRihDb2JhbHRTbG90TWFuYWdlbWVudFRlc3QsIENvYmFsdEZpbmlzaEluc3RhbGxhdGlvbikgewogICBzdGQ6OnN0cmluZyBzbG90X3BhdGggPSBzdG9yYWdlX3BhdGhfOwogICBzbG90X3BhdGggKz0ga1NiRmlsZVNlcFN0cmluZzsKQEAgLTI4NSw0ICsyOTcsMyBAQAogfSAgLy8gbmFtZXNwYWNlCiAKIH0gIC8vIG5hbWVzcGFjZSB1cGRhdGVfY2xpZW50Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29tcG9uZW50LmNjIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NvbXBvbmVudC5jYwppbmRleCA2NTcwOTk1Li5hNjgzZDI5IDEwMDY0NAotLS0gYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY29tcG9uZW50LmNjCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jb21wb25lbnQuY2MKQEAgLTE1LDkgKzE1LDYgQEAKICNpbmNsdWRlICJiYXNlL3NpbmdsZV90aHJlYWRfdGFza19ydW5uZXIuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ3Mvc3RyaW5nX251bWJlcl9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgImJhc2UvdGFzay9wb3N0X3Rhc2suaCIKLSNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfaWRfbmFtZV9tYW5hZ2VyLmgiCi0jZW5kaWYKICNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfdGFza19ydW5uZXJfaGFuZGxlLmgiCiAjaW5jbHVkZSAiYmFzZS92YWx1ZXMuaCIKICNpbmNsdWRlICJjb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvYWN0aW9uX3J1bm5lci5oIgpAQCAtODUsOCArODIsNyBAQAogICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiB1bnBhY2tfcGF0aCwKICAgICBjb25zdCBDcnhJbnN0YWxsZXI6OlJlc3VsdCYgcmVzdWx0KSB7CiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0gICAgTE9HKElORk8pIDw8ICJJbnN0YWxsQ29tcGxldGUgdGhyZWFkX25hbWU9IgotICAgICAgICAgICAgICA8PCBiYXNlOjpUaHJlYWRJZE5hbWVNYW5hZ2VyOjpHZXRJbnN0YW5jZSgpLT5HZXROYW1lRm9yQ3VycmVudFRocmVhZCgpOworICAgIExPRyhJTkZPKSA8PCAiSW5zdGFsbENvbXBsZXRlIjsKICNlbmRpZgogICBiYXNlOjpQb3N0VGFza1dpdGhUcmFpdHMoCiAgICAgICBGUk9NX0hFUkUsIHtiYXNlOjpUYXNrUHJpb3JpdHk6OkJFU1RfRUZGT1JULCBiYXNlOjpNYXlCbG9jaygpfSwKQEAgLTk2LDggKzkyLDcgQEAKICAgICAgICAgICAgICBjb25zdCBiYXNlOjpGaWxlUGF0aCYgdW5wYWNrX3BhdGgsCiAgICAgICAgICAgICAgY29uc3QgQ3J4SW5zdGFsbGVyOjpSZXN1bHQmIHJlc3VsdCkgewogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICAgICAgICAgICAgTE9HKElORk8pIDw8ICJDbG9zdXJlIGtpY2tlZCBvZmYgZnJvbSBJbnN0YWxsQ29tcGxldGUgdGhyZWFkX25hbWU9IgotICAgICAgICAgICAgICA8PCBiYXNlOjpUaHJlYWRJZE5hbWVNYW5hZ2VyOjpHZXRJbnN0YW5jZSgpLT5HZXROYW1lRm9yQ3VycmVudFRocmVhZCgpOworICAgICAgICAgICAgTE9HKElORk8pIDw8ICJDbG9zdXJlIGtpY2tlZCBvZmYgZnJvbSBJbnN0YWxsQ29tcGxldGUiOwogI2VuZGlmCiAvLyBGb3IgQ29iYWx0LCBkb24ndCBkZWxldGUgdGhlIHVucGFja19wYXRoLCB3aGljaCBpcyBub3QgYSB0ZW1wIGRpcmVjdG9yeS4KIC8vIENvYmFsdCB1c2VzIGEgZGVkaWNhdGVkIGluc3RhbGxhdGlvbiBzbG90IG9idGFpbmVkIGZyb20gdGhlIEluc3RhbGxhdGlvbgpAQCAtMTIxLDYgKzExNiw5IEBACiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHB1YmxpY19rZXksCiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgY29uc3QgaW50IGluc3RhbGxhdGlvbl9pbmRleCwKKyAgICBQZXJzaXN0ZWREYXRhKiBtZXRhZGF0YSwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgaWQsCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZlcnNpb24sCiAjZW5kaWYKICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmluZ2VycHJpbnQsCiAgICAgc2NvcGVkX3JlZnB0cjxDcnhJbnN0YWxsZXI+IGluc3RhbGxlciwKQEAgLTEyOCw4ICsxMjYsNyBAQAogICBEQ0hFQ0soYmFzZTo6RGlyZWN0b3J5RXhpc3RzKHVucGFja19wYXRoKSk7CiAKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSAgTE9HKElORk8pIDw8ICJJbnN0YWxsT25CbG9ja2luZ1Rhc2tSdW5uZXIgdGhyZWFkX25hbWU9IgotICAgICAgICAgICAgICA8PCBiYXNlOjpUaHJlYWRJZE5hbWVNYW5hZ2VyOjpHZXRJbnN0YW5jZSgpLT5HZXROYW1lRm9yQ3VycmVudFRocmVhZCgpOworICBMT0coSU5GTykgPDwgIkluc3RhbGxPbkJsb2NraW5nVGFza1J1bm5lciI7CiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKQEAgLTE3MCw4ICsxNjcsMTYgQEAKICAgICAgIC8vIFRPRE86IGFkZCBjb3JyZWN0IGVycm9yIGNvZGUuCiAgICAgICBpbnN0YWxsX2Vycm9yID0gSW5zdGFsbEVycm9yOjpHRU5FUklDX0VSUk9SOwogICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIUNvYmFsdEZpbmlzaEluc3RhbGxhdGlvbihpbnN0YWxsYXRpb25fYXBpLCBpbnN0YWxsYXRpb25faW5kZXgsCisgICAgICBpZiAoQ29iYWx0RmluaXNoSW5zdGFsbGF0aW9uKGluc3RhbGxhdGlvbl9hcGksIGluc3RhbGxhdGlvbl9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucGFja19wYXRoLnZhbHVlKCksIGFwcF9rZXkpKSB7CisgICAgICAgIC8vIFdyaXRlIHRoZSB2ZXJzaW9uIG9mIHRoZSB1bnBhY2tlZCB1cGRhdGUgcGFja2FnZSB0byB0aGUgcGVyc2lzdGVkIGRhdGEuCisgICAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxscHRyKSB7CisgICAgICAgICAgbWFpbl90YXNrX3J1bm5lci0+UG9zdFRhc2soCisgICAgICAgICAgICAgIEZST01fSEVSRSwgYmFzZTo6QmluZE9uY2UoJlBlcnNpc3RlZERhdGE6OlNldExhc3RJbnN0YWxsZWRWZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQobWV0YWRhdGEpLCBpZCwgdmVyc2lvbikpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworCiAgICAgICAgIC8vIFRPRE86IGFkZCBjb3JyZWN0IGVycm9yIGNvZGUuCiAgICAgICAgIGluc3RhbGxfZXJyb3IgPSBJbnN0YWxsRXJyb3I6OkdFTkVSSUNfRVJST1I7CiAgICAgICB9CkBAIC0yMDMsOCArMjA4LDcgQEAKICAgICBJbnN0YWxsT25CbG9ja2luZ1Rhc2tSdW5uZXJDb21wbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLAogICAgIGNvbnN0IENvbXBvbmVudFVucGFja2VyOjpSZXN1bHQmIHJlc3VsdCkgewogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICBMT0coSU5GTykgPDwgIlVucGFja0NvbXBsZXRlT25CbG9ja2luZ1Rhc2tSdW5uZXIgdGhyZWFkX25hbWU9IgotICAgICAgICAgICAgICA8PCBiYXNlOjpUaHJlYWRJZE5hbWVNYW5hZ2VyOjpHZXRJbnN0YW5jZSgpLT5HZXROYW1lRm9yQ3VycmVudFRocmVhZCgpOworICBMT0coSU5GTykgPDwgIlVucGFja0NvbXBsZXRlT25CbG9ja2luZ1Rhc2tSdW5uZXIiOwogICBiYXNlOjpEZWxldGVGaWxlKGNyeF9wYXRoLCBmYWxzZSk7CiAjZWxzZQogICB1cGRhdGVfY2xpZW50OjpEZWxldGVGaWxlQW5kRW1wdHlQYXJlbnREaXJlY3RvcnkoY3J4X3BhdGgpOwpAQCAtMjIwLDggKzIyNCw5IEBACiAgICAgICAgICAgU2JTeXN0ZW1HZXRFeHRlbnNpb24oa0NvYmFsdEV4dGVuc2lvbkluc3RhbGxhdGlvbk1hbmFnZXJOYW1lKSk7CiAgICAgICBpZiAoaW5zdGFsbGF0aW9uX2FwaSkgewogICAgICAgICBDb2JhbHRTbG90TWFuYWdlbWVudCBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50OwotICAgICAgICBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LkluaXQoaW5zdGFsbGF0aW9uX2FwaSk7Ci0gICAgICAgIGNvYmFsdF9zbG90X21hbmFnZW1lbnQuQ2xlYW51cEFsbERyYWluRmlsZXMoY3J4X3BhdGguRGlyTmFtZSgpKTsKKyAgICAgICAgaWYgKGNvYmFsdF9zbG90X21hbmFnZW1lbnQuSW5pdChpbnN0YWxsYXRpb25fYXBpKSkgeworICAgICAgICAgIGNvYmFsdF9zbG90X21hbmFnZW1lbnQuQ2xlYW51cEFsbERyYWluRmlsZXMoKTsKKyAgICAgICAgfQogICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMjMyLDIxICsyMzcsMTUgQEAKICAgICByZXR1cm47CiAgIH0KIAotI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICAvLyBXcml0ZSB0aGUgdmVyc2lvbiBvZiB0aGUgdW5wYWNrZWQgdXBkYXRlIHBhY2thZ2UgdG8gdGhlIHBlcnNpc3RlZCBkYXRhLgotICBpZiAobWV0YWRhdGEgIT0gbnVsbHB0cikgewotICAgIG1haW5fdGFza19ydW5uZXItPlBvc3RUYXNrKAotICAgICAgICBGUk9NX0hFUkUsIGJhc2U6OkJpbmRPbmNlKCZQZXJzaXN0ZWREYXRhOjpTZXRMYXN0VW5wYWNrZWRWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlVucmV0YWluZWQobWV0YWRhdGEpLCBpZCwgdmVyc2lvbikpOwotICB9Ci0jZW5kaWYKLQogICBiYXNlOjpQb3N0VGFza1dpdGhUcmFpdHMoCiAgICAgICBGUk9NX0hFUkUsIGtUYXNrVHJhaXRzLAogICAgICAgYmFzZTo6QmluZE9uY2UoJkluc3RhbGxPbkJsb2NraW5nVGFza1J1bm5lciwgbWFpbl90YXNrX3J1bm5lciwKICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bnBhY2tfcGF0aCwgcmVzdWx0LnB1YmxpY19rZXksCiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGlkLAorICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsIGluc3RhbGxlciwgc3RkOjptb3ZlKGNhbGxiYWNrKSkpOwogfQpAQCAtMjY4LDggKzI2Nyw3IEBACiAgICAgY3J4X2ZpbGU6OlZlcmlmaWVyRm9ybWF0IGNyeF9mb3JtYXQsCiAgICAgSW5zdGFsbE9uQmxvY2tpbmdUYXNrUnVubmVyQ29tcGxldGVDYWxsYmFjayBjYWxsYmFjaykgewogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICBMT0coSU5GTykgPDwgIlN0YXJ0SW5zdGFsbE9uQmxvY2tpbmdUYXNrUnVubmVyIHRocmVhZF9uYW1lPSIKLSAgICAgICAgICAgICAgPDwgYmFzZTo6VGhyZWFkSWROYW1lTWFuYWdlcjo6R2V0SW5zdGFuY2UoKS0+R2V0TmFtZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgTE9HKElORk8pIDw8ICJTdGFydEluc3RhbGxPbkJsb2NraW5nVGFza1J1bm5lciI7CiAjZW5kaWYKICAgYXV0byB1bnBhY2tlciA9IGJhc2U6Ok1ha2VSZWZDb3VudGVkPENvbXBvbmVudFVucGFja2VyPigKICAgICAgIHBrX2hhc2gsIGNyeF9wYXRoLCBpbnN0YWxsZXIsIHN0ZDo6bW92ZSh1bnppcHBlcl8pLCBzdGQ6Om1vdmUocGF0Y2hlcl8pLApAQCAtNzIzLDggKzcyMSwxNSBAQAogICBEQ0hFQ0tfTkUoRXJyb3JDYXRlZ29yeTo6a05vbmUsIGNvbXBvbmVudC5lcnJvcl9jYXRlZ29yeV8pOwogICBEQ0hFQ0tfTkUoMCwgY29tcG9uZW50LmVycm9yX2NvZGVfKTsKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAvLyBDcmVhdGUgYW4gZXZlbnQgd2hlbiB0aGUgc2VydmVyIHJlc3BvbnNlIGluY2x1ZGVkIGFuIHVwZGF0ZSwgb3Igd2hlbiBpdCdzCisgIC8vIGFuIHVwZGF0ZSBjaGVjayBlcnJvciwgbGlrZSBxdWljayByb2xsLWZvcndhcmQgb3Igb3V0IG9mIHNwYWNlCisgIGlmIChjb21wb25lbnQuSXNVcGRhdGVBdmFpbGFibGUoKSB8fAorICAgICAgY29tcG9uZW50LmVycm9yX2NhdGVnb3J5XyA9PSBFcnJvckNhdGVnb3J5OjprVXBkYXRlQ2hlY2spCisjZWxzZQogICAvLyBDcmVhdGUgYW4gZXZlbnQgb25seSB3aGVuIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaW5jbHVkZWQgYW4gdXBkYXRlLgogICBpZiAoY29tcG9uZW50LklzVXBkYXRlQXZhaWxhYmxlKCkpCisjZW5kaWYKICAgICBjb21wb25lbnQuQXBwZW5kRXZlbnQoY29tcG9uZW50Lk1ha2VFdmVudFVwZGF0ZUNvbXBsZXRlKCkpOwogCiAgIEVuZFN0YXRlKCk7CkBAIC0xMDMwLDggKzEwMzUsNyBAQAogCiB2b2lkIENvbXBvbmVudDo6U3RhdGVVcGRhdGluZzo6RG9IYW5kbGUoKSB7CiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0gIExPRyhJTkZPKSA8PCAiQ29tcG9uZW50OjpTdGF0ZVVwZGF0aW5nOjpEb0hhbmRsZSgpIHRocmVhZF9uYW1lPSIKLSAgICAgICAgICAgICAgPDwgYmFzZTo6VGhyZWFkSWROYW1lTWFuYWdlcjo6R2V0SW5zdGFuY2UoKS0+R2V0TmFtZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgTE9HKElORk8pIDw8ICJDb21wb25lbnQ6OlN0YXRlVXBkYXRpbmc6OkRvSGFuZGxlKCkiOwogI2VuZGlmCiAgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKIApkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NyeF9kb3dubG9hZGVyLmNjIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L2NyeF9kb3dubG9hZGVyLmNjCmluZGV4IGZiMTg5NTIuLjRhN2MzNmQgMTAwNjQ0Ci0tLSBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9jcnhfZG93bmxvYWRlci5jYworKysgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvY3J4X2Rvd25sb2FkZXIuY2MKQEAgLTEyLDkgKzEyLDYgQEAKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJiYXNlL3Rhc2svcG9zdF90YXNrLmgiCiAjaW5jbHVkZSAiYmFzZS90YXNrL3Rhc2tfdHJhaXRzLmgiCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0jaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2lkX25hbWVfbWFuYWdlci5oIgotI2VuZGlmCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX3Rhc2tfcnVubmVyX2hhbmRsZS5oIgogI2luY2x1ZGUgImJ1aWxkL2J1aWxkX2NvbmZpZy5oIgogI2lmIGRlZmluZWQoT1NfV0lOKQpAQCAtMTc5LDggKzE3Niw3IEBACiAgIERDSEVDS19FUSgwLCBkb3dubG9hZF9tZXRyaWNzLmVycm9yKTsKICAgRENIRUNLKGlzX2hhbmRsZWQpOwogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICBMT0coSU5GTykgPDwgIkNyeERvd25sb2FkZXI6OlZlcmlmeVJlc3BvbnNlIHRocmVhZF9uYW1lPSIKLSAgICA8PCBiYXNlOjpUaHJlYWRJZE5hbWVNYW5hZ2VyOjpHZXRJbnN0YW5jZSgpLT5HZXROYW1lRm9yQ3VycmVudFRocmVhZCgpOworICBMT0coSU5GTykgPDwgIkNyeERvd25sb2FkZXI6OlZlcmlmeVJlc3BvbnNlIjsKICNlbmRpZgogICBpZiAoVmVyaWZ5RmlsZUhhc2gyNTYocmVzdWx0LnJlc3BvbnNlLCBleHBlY3RlZF9oYXNoXykpIHsKICAgICBkb3dubG9hZF9tZXRyaWNzXy5wdXNoX2JhY2soZG93bmxvYWRfbWV0cmljcyk7CmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvcGVyc2lzdGVkX2RhdGEuY2MgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvcGVyc2lzdGVkX2RhdGEuY2MKaW5kZXggMjkyOGIyZS4uMGU4MDc1MCAxMDA2NDQKLS0tIGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3BlcnNpc3RlZF9kYXRhLmNjCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC9wZXJzaXN0ZWRfZGF0YS5jYwpAQCAtODEsNyArODEsNyBAQAogfQogCiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi1zdGQ6OnN0cmluZyBQZXJzaXN0ZWREYXRhOjpHZXRMYXN0VW5wYWNrZWRWZXJzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCkgY29uc3Qgeworc3RkOjpzdHJpbmcgUGVyc2lzdGVkRGF0YTo6R2V0TGFzdEluc3RhbGxlZFZlcnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGlkKSBjb25zdCB7CiAgIHJldHVybiBHZXRTdHJpbmcoaWQsICJ2ZXJzaW9uIik7CiB9CiBzdGQ6OnN0cmluZyBQZXJzaXN0ZWREYXRhOjpHZXRVcGRhdGVyQ2hhbm5lbChjb25zdCBzdGQ6OnN0cmluZyYgaWQpIGNvbnN0IHsKQEAgLTE0NSw3ICsxNDUsNyBAQAogfQogCiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi12b2lkIFBlcnNpc3RlZERhdGE6OlNldExhc3RVbnBhY2tlZFZlcnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGlkLAordm9pZCBQZXJzaXN0ZWREYXRhOjpTZXRMYXN0SW5zdGFsbGVkVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZlcnNpb24pIHsKICAgU2V0U3RyaW5nKGlkLCAidmVyc2lvbiIsIHZlcnNpb24pOwogfQpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3BlcnNpc3RlZF9kYXRhLmggYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvcGVyc2lzdGVkX2RhdGEuaAppbmRleCA4NGVmYTNlLi5hNTliOTJjIDEwMDY0NAotLS0gYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvcGVyc2lzdGVkX2RhdGEuaAorKysgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvcGVyc2lzdGVkX2RhdGEuaApAQCAtNTEsMTAgKzUxLDEwIEBACiAgIGludCBHZXREYXRlTGFzdEFjdGl2ZShjb25zdCBzdGQ6OnN0cmluZyYgaWQpIGNvbnN0OwogCiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0gIC8vIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIHVwZGF0ZSB0aGF0IHdhcyBsYXN0IHN1Y2Nlc3NmdWxseSB1bnBhY2tlZCBmb3IKKyAgLy8gUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgdXBkYXRlIHRoYXQgd2FzIGxhc3Qgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBmb3IKICAgLy8gdGhlIHNwZWNpZmllZCB8aWR8LiAiIiBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyByZWNvcmRlZCB2ZXJzaW9uIHZhbHVlCiAgIC8vIGZvciB0aGUgfGlkfC4KLSAgc3RkOjpzdHJpbmcgR2V0TGFzdFVucGFja2VkVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgaWQpIGNvbnN0OworICBzdGQ6OnN0cmluZyBHZXRMYXN0SW5zdGFsbGVkVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgaWQpIGNvbnN0OwogCiAgIC8vIFJldHVybnMgdGhlIHVwZGF0ZXIgY2hhbm5lbCB0aGF0IGlzIHNldCBmb3IgdGhlIHNwZWNpZmllZCB8aWR8LiAiIgogICAvLyBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBubyByZWNvcmRlZCB1cGRhdGVyIGNoYW5uZWwgdmFsdWUgZm9yIHRoZSB8aWR8LgpAQCAtODIsOSArODIsOSBAQAogICB2b2lkIFNldERhdGVMYXN0QWN0aXZlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgaWRzLCBpbnQgZGF0ZW51bSk7CiAKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSAgLy8gUmVjb3JkcyB0aGUgdmVyc2lvbiBvZiB0aGUgdXBkYXRlIHRoYXQgaXMgc3VjY2Vzc2Z1bGx5IHVucGFja2VkIGZvcgorICAvLyBSZWNvcmRzIHRoZSB2ZXJzaW9uIG9mIHRoZSB1cGRhdGUgdGhhdCBpcyBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkIGZvcgogICAvLyB0aGUgc3BlY2lmaWVkIHxpZHwuCi0gIHZvaWQgU2V0TGFzdFVucGFja2VkVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyYgaWQsCisgIHZvaWQgU2V0TGFzdEluc3RhbGxlZFZlcnNpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZlcnNpb24pOwogCiAgIC8vIFJlY29yZHMgdGhlIHVwZGF0ZXIgY2hhbm5lbCB0aGF0IGlzIHNldCBmb3IgdGhlIHNwZWNpZmllZCB8aWR8LgpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3Rhc2tfdXBkYXRlLmNjIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3Rhc2tfdXBkYXRlLmNjCmluZGV4IGI0ODk0YjcuLmVhMzMxYjQgMTAwNjQ0Ci0tLSBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC90YXNrX3VwZGF0ZS5jYworKysgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvdGFza191cGRhdGUuY2MKQEAgLTQzLDYgKzQzLDEwIEBACiAgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKICAgTE9HKElORk8pIDw8ICJUYXNrVXBkYXRlOjpSdW4gYmVnaW4iOworICBpZihpc19jb21wbGV0ZWRfKSB7CisgICAgTE9HKFdBUk5JTkcpIDw8ICJUYXNrVXBkYXRlOjpSdW4gYWxyZWFkeSBjb21wbGV0ZWQiOworICAgIHJldHVybjsKKyAgfQogI2VuZGlmCiAKICAgaWYgKGlkc18uZW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3VwZGF0ZV9jaGVja2VyLmNjIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3VwZGF0ZV9jaGVja2VyLmNjCmluZGV4IGQwZDc3YTYuLjhjMTg1ODcgMTAwNjQ0Ci0tLSBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2hlY2tlci5jYworKysgYi9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvdXBkYXRlX2NoZWNrZXIuY2MKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJiYXNlL3Rhc2svcG9zdF90YXNrLmgiCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX2NoZWNrZXIuaCIKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfaWRfbmFtZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9mcmVlX3NwYWNlLmgiCiAjZW5kaWYKICNpbmNsdWRlICJiYXNlL3RocmVhZGluZy90aHJlYWRfdGFza19ydW5uZXJfaGFuZGxlLmgiCkBAIC0xNjgsOCArMTY3LDcgQEAKIC8vIFRoaXMgZnVuY3Rpb24gcnVucyBvbiB0aGUgYmxvY2tpbmcgcG9vbCB0YXNrIHJ1bm5lci4KIHZvaWQgVXBkYXRlQ2hlY2tlckltcGw6OlJlYWRVcGRhdGVyU3RhdGVBdHRyaWJ1dGVzKCkgewogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQotICBMT0coSU5GTykgPDwgIlVwZGF0ZUNoZWNrZXJJbXBsOjpSZWFkVXBkYXRlclN0YXRlQXR0cmlidXRlcyBjdXJyZW50X3RocmVhZD0iCi0gICAgPDwgYmFzZTo6VGhyZWFkSWROYW1lTWFuYWdlcjo6R2V0SW5zdGFuY2UoKS0+R2V0TmFtZUZvckN1cnJlbnRUaHJlYWQoKTsKKyAgTE9HKElORk8pIDw8ICJVcGRhdGVDaGVja2VySW1wbDo6UmVhZFVwZGF0ZXJTdGF0ZUF0dHJpYnV0ZXMiOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE9TX1dJTikKQEAgLTI0NiwxNiArMjQ0LDYgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyB1bnBhY2tlZF92ZXJzaW9uID0KLSAgICAgICAgR2V0UGVyc2lzdGVkRGF0YSgpLT5HZXRMYXN0VW5wYWNrZWRWZXJzaW9uKGFwcF9pZCk7Ci0gICAgLy8gSWYgdGhlIHZlcnNpb24gb2YgdGhlIGxhc3QgdW5wYWNrZWQgdXBkYXRlIHBhY2thZ2UgaXMgaGlnaGVyIHRoYW4gdGhlCi0gICAgLy8gdmVyc2lvbiBvZiB0aGUgcnVubmluZyBiaW5hcnksIHVzZSB0aGUgZm9ybWVyIHRvIGluZGljYXRlIHRoZSBjdXJyZW50Ci0gICAgLy8gdXBkYXRlIHZlcnNpb24gaW4gdGhlIHVwZGF0ZSBjaGVjayByZXF1ZXN0LgotICAgIGlmICghdW5wYWNrZWRfdmVyc2lvbi5lbXB0eSgpICYmCi0gICAgICAgIGJhc2U6OlZlcnNpb24odW5wYWNrZWRfdmVyc2lvbikuQ29tcGFyZVRvKGN1cnJlbnRfdmVyc2lvbikgPiAwKSB7Ci0gICAgICBjdXJyZW50X3ZlcnNpb24gPSBiYXNlOjpWZXJzaW9uKHVucGFja2VkX3ZlcnNpb24pOwotICAgIH0KLQogICAgIGlmIChDb2JhbHRRdWlja1VwZGF0ZShpbnN0YWxsYXRpb25fYXBpLCBjdXJyZW50X3ZlcnNpb24pKSB7CiAgICAgICAvLyBUaGUgbGFzdCBwYXJhbWV0ZXIgaW4gVXBkYXRlQ2hlY2tGYWlsZWQgYmVsb3csIHdoaWNoIGlzIHRvIGJlIHBhc3NlZCB0bwogICAgICAgLy8gdXBkYXRlX2NoZWNrX2NhbGxiYWNrXywgaW5kaWNhdGVzIGEgdGhyb3R0bGluZyBieSB0aGUgdXBkYXRlIHNlcnZlci4KQEAgLTI2OCw2ICsyNTYsMTUgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBzdGQ6OnN0cmluZyBsYXN0X2luc3RhbGxlZF92ZXJzaW9uID0KKyAgICAgICAgR2V0UGVyc2lzdGVkRGF0YSgpLT5HZXRMYXN0SW5zdGFsbGVkVmVyc2lvbihhcHBfaWQpOworICAgIC8vIElmIHRoZSB2ZXJzaW9uIG9mIHRoZSBsYXN0IGluc3RhbGxlZCB1cGRhdGUgcGFja2FnZSBpcyBoaWdoZXIgdGhhbiB0aGUKKyAgICAvLyB2ZXJzaW9uIG9mIHRoZSBydW5uaW5nIGJpbmFyeSwgdXNlIHRoZSBmb3JtZXIgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQKKyAgICAvLyB1cGRhdGUgdmVyc2lvbiBpbiB0aGUgdXBkYXRlIGNoZWNrIHJlcXVlc3QuCisgICAgaWYgKCFsYXN0X2luc3RhbGxlZF92ZXJzaW9uLmVtcHR5KCkgJiYKKyAgICAgICAgYmFzZTo6VmVyc2lvbihsYXN0X2luc3RhbGxlZF92ZXJzaW9uKS5Db21wYXJlVG8oY3VycmVudF92ZXJzaW9uKSA+IDApIHsKKyAgICAgIGN1cnJlbnRfdmVyc2lvbiA9IGJhc2U6OlZlcnNpb24obGFzdF9pbnN0YWxsZWRfdmVyc2lvbik7CisgICAgfQogLy8gSWYgdGhlIHF1aWNrIHJvbGwgZm9yd2FyZCB1cGRhdGUgc2xvdCBjYW5kaWRhdGUgZG9lc24ndCBleGlzdCwgY29udGludWUKIC8vIHdpdGggdXBkYXRlIGNoZWNrLgogI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvdXBkYXRlX2NsaWVudC5jYyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50LmNjCmluZGV4IDRkNmRmYjguLjk4MDAzNDggMTAwNjQ0Ci0tLSBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50LmNjCisrKyBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50LmNjCkBAIC0xNzYsNiArMTc2LDEyIEBACiB2b2lkIFVwZGF0ZUNsaWVudEltcGw6Ok5vdGlmeU9ic2VydmVycyhPYnNlcnZlcjo6RXZlbnRzIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkKSB7CiAgIERDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgaWYgKGlzX3N0b3BwZWRfKSB7CisgICAgTE9HKFdBUk5JTkcpIDw8ICJVcGRhdGVDbGllbnRJbXBsOjpOb3RpZnlPYnNlcnZlcnM6IGFscmVhZHkgc3RvcHBlZCI7CisgICAgcmV0dXJuOworICB9CisjZW5kaWYKICAgZm9yIChhdXRvJiBvYnNlcnZlciA6IG9ic2VydmVyX2xpc3RfKQogICAgIG9ic2VydmVyLk9uRXZlbnQoZXZlbnQsIGlkKTsKIH0KZGlmZiAtLWdpdCBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50Lmd5cCBiL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cGRhdGVfY2xpZW50Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExNWVkMC4uMDAwMDAwMAotLS0gYS9jb21wb25lbnRzL3VwZGF0ZV9jbGllbnQvdXBkYXRlX2NsaWVudC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3VwZGF0ZV9jbGllbnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhY3Rpb25fcnVubmVyLmNjJywKLSAgICAgICAgJ2FjdGlvbl9ydW5uZXIuaCcsCi0gICAgICAgICdhY3Rpdml0eV9kYXRhX3NlcnZpY2UuaCcsCi0gICAgICAgICdjb2JhbHRfc2xvdF9tYW5hZ2VtZW50LmNjJywKLSAgICAgICAgJ2NvYmFsdF9zbG90X21hbmFnZW1lbnQuaCcsCi0gICAgICAgICdjb21tYW5kX2xpbmVfY29uZmlnX3BvbGljeS5jYycsCi0gICAgICAgICdjb21tYW5kX2xpbmVfY29uZmlnX3BvbGljeS5oJywKLSAgICAgICAgJ2NvbXBvbmVudC5jYycsCi0gICAgICAgICdjb21wb25lbnQuaCcsCi0gICAgICAgICdjb21wb25lbnRfcGF0Y2hlci5jYycsCi0gICAgICAgICdjb21wb25lbnRfcGF0Y2hlci5oJywKLSAgICAgICAgJ2NvbXBvbmVudF9wYXRjaGVyX29wZXJhdGlvbi5jYycsCi0gICAgICAgICdjb21wb25lbnRfcGF0Y2hlcl9vcGVyYXRpb24uaCcsCi0gICAgICAgICdjb21wb25lbnRfdW5wYWNrZXIuY2MnLAotICAgICAgICAnY29tcG9uZW50X3VucGFja2VyLmgnLAotICAgICAgICAnY29uZmlndXJhdG9yLmgnLAotICAgICAgICAnY3J4X2Rvd25sb2FkZXIuY2MnLAotICAgICAgICAnY3J4X2Rvd25sb2FkZXIuaCcsCi0gICAgICAgICdjcnhfdXBkYXRlX2l0ZW0uaCcsCi0gICAgICAgICduZXR3b3JrLmNjJywKLSAgICAgICAgJ25ldHdvcmsuaCcsCi0gICAgICAgICdwYXRjaGVyLmgnLAotICAgICAgICAncGVyc2lzdGVkX2RhdGEuY2MnLAotICAgICAgICAncGVyc2lzdGVkX2RhdGEuaCcsCi0gICAgICAgICdwaW5nX21hbmFnZXIuY2MnLAotICAgICAgICAncGluZ19tYW5hZ2VyLmgnLAotICAgICAgICAncHJvdG9jb2xfZGVmaW5pdGlvbi5jYycsCi0gICAgICAgICdwcm90b2NvbF9kZWZpbml0aW9uLmgnLAotICAgICAgICAncHJvdG9jb2xfaGFuZGxlci5jYycsCi0gICAgICAgICdwcm90b2NvbF9oYW5kbGVyLmgnLAotICAgICAgICAncHJvdG9jb2xfcGFyc2VyLmNjJywKLSAgICAgICAgJ3Byb3RvY29sX3BhcnNlci5oJywKLSAgICAgICAgJ3Byb3RvY29sX3BhcnNlcl9qc29uLmNjJywKLSAgICAgICAgJ3Byb3RvY29sX3BhcnNlcl9qc29uLmgnLAotICAgICAgICAncHJvdG9jb2xfc2VyaWFsaXplci5jYycsCi0gICAgICAgICdwcm90b2NvbF9zZXJpYWxpemVyLmgnLAotICAgICAgICAncHJvdG9jb2xfc2VyaWFsaXplcl9qc29uLmNjJywKLSAgICAgICAgJ3Byb3RvY29sX3NlcmlhbGl6ZXJfanNvbi5oJywKLSAgICAgICAgJ3JlcXVlc3Rfc2VuZGVyLmNjJywKLSAgICAgICAgJ3JlcXVlc3Rfc2VuZGVyLmgnLAotICAgICAgICAndGFzay5oJywKLSAgICAgICAgJ3Rhc2tfc2VuZF91bmluc3RhbGxfcGluZy5jYycsCi0gICAgICAgICd0YXNrX3NlbmRfdW5pbnN0YWxsX3BpbmcuaCcsCi0gICAgICAgICd0YXNrX3RyYWl0cy5oJywKLSAgICAgICAgJ3Rhc2tfdXBkYXRlLmNjJywKLSAgICAgICAgJ3Rhc2tfdXBkYXRlLmgnLAotICAgICAgICAndW56aXBwZXIuaCcsCi0gICAgICAgICd1cGRhdGVfY2hlY2tlci5jYycsCi0gICAgICAgICd1cGRhdGVfY2hlY2tlci5oJywKLSAgICAgICAgJ3VwZGF0ZV9jbGllbnQuY2MnLAotICAgICAgICAndXBkYXRlX2NsaWVudC5oJywKLSAgICAgICAgJ3VwZGF0ZV9jbGllbnRfZXJyb3JzLmgnLAotICAgICAgICAndXBkYXRlX2NsaWVudF9pbnRlcm5hbC5oJywKLSAgICAgICAgJ3VwZGF0ZV9lbmdpbmUuY2MnLAotICAgICAgICAndXBkYXRlX2VuZ2luZS5oJywKLSAgICAgICAgJ3VwZGF0ZV9xdWVyeV9wYXJhbXMuY2MnLAotICAgICAgICAndXBkYXRlX3F1ZXJ5X3BhcmFtcy5oJywKLSAgICAgICAgJ3VwZGF0ZV9xdWVyeV9wYXJhbXNfZGVsZWdhdGUuY2MnLAotICAgICAgICAndXBkYXRlX3F1ZXJ5X3BhcmFtc19kZWxlZ2F0ZS5oJywKLSAgICAgICAgJ3VwZGF0ZXJfc3RhdGUuY2MnLAotICAgICAgICAndXBkYXRlcl9zdGF0ZS5oJywKLSAgICAgICAgJ3VybF9mZXRjaGVyX2Rvd25sb2FkZXIuY2MnLAotICAgICAgICAndXJsX2ZldGNoZXJfZG93bmxvYWRlci5oJywKLSAgICAgICAgJ3V0aWxzLmNjJywKLSAgICAgICAgJ3V0aWxzLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL2NyeF9maWxlL2NyeF9maWxlLmd5cDpjcnhfZmlsZScsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL2NsaWVudF91cGRhdGVfcHJvdG9jb2wvY2xpZW50X3VwZGF0ZV9wcm90b2NvbC5neXA6Y2xpZW50X3VwZGF0ZV9wcm90b2NvbCcsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL3ByZWZzL3ByZWZzLmd5cDpwcmVmcycsCi0gICAgICAgICc8KERFUFRIKS9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXlfZmlsZXMuZ3lwOmFwcF9rZXlfZmlsZXMnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5neXA6ZHJhaW5fZmlsZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJ4bWwvbGlieG1sLmd5cDpsaWJ4bWwnLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0xJQlhNTF9SRUFERVJfRU5BQkxFRCcsCi0gICAgICAgICdMSUJYTUxfV1JJVEVSX0VOQUJMRUQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd0ZXN0X3N1cHBvcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICduZXQvbmV0d29ya19pbXBsX2NvYmFsdC5jYycsCi0gICAgICAgICduZXQvbmV0d29ya19pbXBsX2NvYmFsdC5oJywKLSAgICAgICAgJ25ldC9uZXR3b3JrX2NvYmFsdC5oJywKLSAgICAgICAgJ25ldC91cmxfcmVxdWVzdF9wb3N0X2ludGVyY2VwdG9yLmNjJywKLSAgICAgICAgJ25ldC91cmxfcmVxdWVzdF9wb3N0X2ludGVyY2VwdG9yLmgnLAotICAgICAgICAncGF0Y2gvcGF0Y2hfaW1wbF9jb2JhbHQuY2MnLAotICAgICAgICAncGF0Y2gvcGF0Y2hfaW1wbF9jb2JhbHQuaCcsCi0gICAgICAgICd0ZXN0X2NvbmZpZ3VyYXRvci5jYycsCi0gICAgICAgICd0ZXN0X2NvbmZpZ3VyYXRvci5oJywKLSAgICAgICAgJ3VuemlwL3VuemlwX2ltcGxfY29iYWx0LmNjJywKLSAgICAgICAgJ3VuemlwL3VuemlwX2ltcGxfY29iYWx0LmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd1cGRhdGVfY2xpZW50JywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbG9hZGVyL2xvYWRlci5neXA6bG9hZGVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9kZWJ1Zy9kZWJ1Zy5neXA6Y29uc29sZV9jb21tYW5kX21hbmFnZXInLAotICAgICAgICAnPChERVBUSCkvY29tcG9uZW50cy9wcmVmcy9wcmVmcy5neXA6cHJlZnMnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6bmV0JywKLSAgICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOnRlc3Rfc3VwcG9ydCcsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbmV0d29yay9uZXR3b3JrLmd5cDpuZXR3b3JrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvemxpYi5neXA6emlwJywKLSAgICAgICAgJzwoREVQVEgpL3VybC91cmwuZ3lwOnVybCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3VwZGF0ZV9jbGllbnRfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvY29tcG9uZW50cy90ZXN0L2RhdGEvdXBkYXRlX2NsaWVudCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcicgOiAnY29tcG9uZW50cy90ZXN0L2RhdGEnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfdGVzdF9kYXRhLmd5cGknXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd1cGRhdGVfY2xpZW50X3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjb21wb25lbnRfdW5wYWNrZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAjIFRPRE86IGVuYWJsZSB0aGUgdGVzdHMgY29tbWVudGVkIG91dAotICAgICAgICAnY3J4X2Rvd25sb2FkZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAncGVyc2lzdGVkX2RhdGFfdW5pdHRlc3QuY2MnLAotICAgICAgICAncGluZ19tYW5hZ2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3RvY29sX3BhcnNlcl9qc29uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAncHJvdG9jb2xfc2VyaWFsaXplcl9qc29uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3RvY29sX3NlcmlhbGl6ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAncmVxdWVzdF9zZW5kZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXBkYXRlX2NoZWNrZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICd1cGRhdGVfY2xpZW50X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VwZGF0ZV9xdWVyeV9wYXJhbXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXBkYXRlcl9zdGF0ZV91bml0dGVzdC5jYycsCi0gICAgICAgICd1dGlsc191bml0dGVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdXBkYXRlci91dGlscy5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3VwZGF0ZV9jbGllbnQnLAotICAgICAgICAndGVzdF9zdXBwb3J0JywKLSAgICAgICAgJ3VwZGF0ZV9jbGllbnRfdGVzdF9kYXRhJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvY29tcG9uZW50cy9wcmVmcy9wcmVmcy5neXA6cHJlZnMnLAotICAgICAgICAnPChERVBUSCkvY29tcG9uZW50cy9wcmVmcy9wcmVmcy5neXA6dGVzdF9zdXBwb3J0JywKLSAgICAgICAgJzwoREVQVEgpL2NvbXBvbmVudHMvY3J4X2ZpbGUvY3J4X2ZpbGUuZ3lwOmNyeF9maWxlJywKLSAgICAgICAgJzwoREVQVEgpL25ldC9uZXQuZ3lwOnRlc3Rfc3VwcG9ydCcsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvY29iYWx0L3Rlc3QvdGVzdC5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3VwZGF0ZV9jbGllbnRfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAndXBkYXRlX2NsaWVudF90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3VwZGF0ZV9jbGllbnRfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvdXBkYXRlci91dGlscy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zeXN0ZW1fZ2V0X2V4dGVuc2lvbl9zaGltLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnOnVwZGF0ZV9jbGllbnQnLAotICAgICAgICAnPChERVBUSCkvY29iYWx0L2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL3ByZWZzL3ByZWZzLmd5cDpwcmVmcycsCi0gICAgICAgICc8KERFUFRIKS9jb21wb25lbnRzL3ByZWZzL3ByZWZzLmd5cDp0ZXN0X3N1cHBvcnQnLAotICAgICAgICAnPChERVBUSCkvY29tcG9uZW50cy9jcnhfZmlsZS9jcnhfZmlsZS5neXA6Y3J4X2ZpbGUnLAotICAgICAgICAnPChERVBUSCkvbmV0L25ldC5neXA6dGVzdF9zdXBwb3J0JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmd5cDppbnN0YWxsYXRpb25fbWFuYWdlcicsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY29iYWx0X3Nsb3RfbWFuYWdlbWVudF90ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2NvYmFsdF9zbG90X21hbmFnZW1lbnRfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0KLX0KZGlmZiAtLWdpdCBhL2NvbXBvbmVudHMvdXBkYXRlX2NsaWVudC91cmxfZmV0Y2hlcl9kb3dubG9hZGVyLmNjIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3VybF9mZXRjaGVyX2Rvd25sb2FkZXIuY2MKaW5kZXggNDUzNmRhNi4uMWFlNjkyYyAxMDA2NDQKLS0tIGEvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3VybF9mZXRjaGVyX2Rvd25sb2FkZXIuY2MKKysrIGIvY29tcG9uZW50cy91cGRhdGVfY2xpZW50L3VybF9mZXRjaGVyX2Rvd25sb2FkZXIuY2MKQEAgLTE5NCw3ICsxOTQsNyBAQAogI2VuZGlmCiAgIERDSEVDS19DQUxMRURfT05fVkFMSURfVEhSRUFEKHRocmVhZF9jaGVja2VyXyk7CiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0gIGNvYmFsdF9zbG90X21hbmFnZW1lbnRfLkNsZWFudXBBbGxEcmFpbkZpbGVzKGRvd25sb2FkX2Rpcl8pOworICBjb2JhbHRfc2xvdF9tYW5hZ2VtZW50Xy5DbGVhbnVwQWxsRHJhaW5GaWxlcygpOwogI2VuZGlmCiAgIFJlc3VsdCByZXN1bHQ7CiAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCmRpZmYgLS1naXQgYS9jb250ZW50L2Jyb3dzZXIvc3BlZWNoL0JVSUxELmduIGIvY29udGVudC9icm93c2VyL3NwZWVjaC9CVUlMRC5nbgppbmRleCAwMTA5NzYwLi42ZTVhZTMwIDEwMDY0NAotLS0gYS9jb250ZW50L2Jyb3dzZXIvc3BlZWNoL0JVSUxELmduCisrKyBiL2NvbnRlbnQvYnJvd3Nlci9zcGVlY2gvQlVJTEQuZ24KQEAgLTMwLDMgKzMwLDE4IEBACiAgICAgIi8vY29iYWx0L21lZGlhIiwKICAgXQogfQorCit0YXJnZXQoZ3Rlc3RfdGFyZ2V0X3R5cGUsICJzcGVlY2hfdGVzdCIpIHsKKyAgdGVzdG9ubHkgPSB0cnVlCisgIHNvdXJjZXMgPSBbCisgICAgImNodW5rZWRfYnl0ZV9idWZmZXJfdW5pdHRlc3QuY2MiLAorICAgICJlbmRwb2ludGVyL2VuZHBvaW50ZXJfdW5pdHRlc3QuY2MiLAorICBdCisgIGRlcHMgPSBbCisgICAgIjpzcGVlY2giLAorICAgICIvL2NvYmFsdC9tZWRpYSIsCisgICAgIi8vY29iYWx0L3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAorICAgICIvL3N0YXJib2FyZCIsCisgICAgIi8vdGVzdGluZy9ndGVzdCIsCisgIF0KK30KZGlmZiAtLWdpdCBhL2NvbnRlbnQvYnJvd3Nlci9zcGVlY2gvc3BlZWNoLmd5cCBiL2NvbnRlbnQvYnJvd3Nlci9zcGVlY2gvc3BlZWNoLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MjE3Ny4uMDAwMDAwMAotLS0gYS9jb250ZW50L2Jyb3dzZXIvc3BlZWNoL3NwZWVjaC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NwZWVjaCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvX2J1ZmZlci5jYycsCi0gICAgICAgICdhdWRpb19idWZmZXIuaCcsCi0gICAgICAgICdjaHVua2VkX2J5dGVfYnVmZmVyLmNjJywKLSAgICAgICAgJ2NodW5rZWRfYnl0ZV9idWZmZXIuaCcsCi0gICAgICAgICdlbmRwb2ludGVyL2VuZHBvaW50ZXIuY2MnLAotICAgICAgICAnZW5kcG9pbnRlci9lbmRwb2ludGVyLmgnLAotICAgICAgICAnZW5kcG9pbnRlci9lbmVyZ3lfZW5kcG9pbnRlci5jYycsCi0gICAgICAgICdlbmRwb2ludGVyL2VuZXJneV9lbmRwb2ludGVyLmgnLAotICAgICAgICAnZW5kcG9pbnRlci9lbmVyZ3lfZW5kcG9pbnRlcl9wYXJhbXMuY2MnLAotICAgICAgICAnZW5kcG9pbnRlci9lbmVyZ3lfZW5kcG9pbnRlcl9wYXJhbXMuaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NwZWVjaF90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY2h1bmtlZF9ieXRlX2J1ZmZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdlbmRwb2ludGVyL2VuZHBvaW50ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdzcGVlY2gnLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvbWVkaWEvbWVkaWEuZ3lwOm1lZGlhJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9iYXNlL3Rlc3QvdGVzdC5neXBpJ10sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzcGVlY2hfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnc3BlZWNoX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnc3BlZWNoX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL0JVSUxELmduIGIvY3J5cHRvL0JVSUxELmduCmluZGV4IDRjNGRlMTUuLjFlZWViY2QgMTAwNjQ0Ci0tLSBhL2NyeXB0by9CVUlMRC5nbgorKysgYi9jcnlwdG8vQlVJTEQuZ24KQEAgLTE4OCw4ICsxODgsNiBAQAogICAgICIvL3Rlc3RpbmcvZ21vY2siLAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICBdCi0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQogCiAjIFRoaXMgaGFzIG5vIHNvdXJjZXMgaW4gc29tZSBjYXNlcyBzbyBjYW4ndCBiZSBhIHN0YXRpYyBsaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0by5neXAgYi9jcnlwdG8vY3J5cHRvLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg2MTBjNi4uMDAwMDAwMAotLS0gYS9jcnlwdG8vY3J5cHRvLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2Nocm9taXVtX2NvZGUnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvJywKLSAgICAgICd0eXBlJzogJzwoY29tcG9uZW50KScsCi0gICAgICAncHJvZHVjdF9uYW1lJzogJ2NyY3J5cHRvJywgICMgQXZvaWQgY29sbGlkaW5nIHdpdGggT3BlblNTTCdzIGxpYmNyeXB0bwotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0NSWVBUT19JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbCi0gICAgICAgIDQwMTgsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhZWFkLmNjJywKLSAgICAgICAgJ2FlYWQuaCcsCi0gICAgICAgICdjcnlwdG9fZXhwb3J0LmgnLAotICAgICAgICAnZWNfcHJpdmF0ZV9rZXkuY2MnLAotICAgICAgICAnZWNfcHJpdmF0ZV9rZXkuaCcsCi0gICAgICAgICdlY19zaWduYXR1cmVfY3JlYXRvci5jYycsCi0gICAgICAgICdlY19zaWduYXR1cmVfY3JlYXRvci5oJywKLSAgICAgICAgJ2VjX3NpZ25hdHVyZV9jcmVhdG9yX2ltcGwuY2MnLAotICAgICAgICAnZWNfc2lnbmF0dXJlX2NyZWF0b3JfaW1wbC5oJywKLSAgICAgICAgJ2VuY3J5cHRvci5jYycsCi0gICAgICAgICdlbmNyeXB0b3IuaCcsCi0gICAgICAgICdoa2RmLmNjJywKLSAgICAgICAgJ2hrZGYuaCcsCi0gICAgICAgICdobWFjLmNjJywKLSAgICAgICAgJ2htYWMuaCcsCi0gICAgICAgICdtYWNfc2VjdXJpdHlfc2VydmljZXNfbG9jay5jYycsCi0gICAgICAgICdtYWNfc2VjdXJpdHlfc2VydmljZXNfbG9jay5oJywKLQotICAgICAgICAjIFRPRE8oYnJldHR3KSB0aGVzZSBtb2NrcyBzaG91bGQgYmUgbW92ZWQgdG8gYSB0ZXN0X3N1cHBvcnRfY3J5cHRvCi0gICAgICAgICMgdGFyZ2V0IGlmIHBvc3NpYmxlLgotICAgICAgICAnb3BlbnNzbF91dGlsLmNjJywKLSAgICAgICAgJ29wZW5zc2xfdXRpbC5oJywKLSAgICAgICAgJ3AyMjQuY2MnLAotICAgICAgICAncDIyNC5oJywKLSAgICAgICAgJ3AyMjRfc3Bha2UuY2MnLAotICAgICAgICAncDIyNF9zcGFrZS5oJywKLSAgICAgICAgJ3JhbmRvbS5jYycsCi0gICAgICAgICdyYW5kb20uaCcsCi0gICAgICAgICdyc2FfcHJpdmF0ZV9rZXkuY2MnLAotICAgICAgICAncnNhX3ByaXZhdGVfa2V5LmgnLAotICAgICAgICAnc2VjdXJlX2hhc2guY2MnLAotICAgICAgICAnc2VjdXJlX2hhc2guaCcsCi0gICAgICAgICdzZWN1cmVfdXRpbC5jYycsCi0gICAgICAgICdzZWN1cmVfdXRpbC5oJywKLSAgICAgICAgJ3NoYTIuY2MnLAotICAgICAgICAnc2hhMi5oJywKLSAgICAgICAgJ3NpZ25hdHVyZV9jcmVhdG9yLmNjJywKLSAgICAgICAgJ3NpZ25hdHVyZV9jcmVhdG9yLmgnLAotICAgICAgICAnc2lnbmF0dXJlX3ZlcmlmaWVyLmNjJywKLSAgICAgICAgJ3NpZ25hdHVyZV92ZXJpZmllci5oJywKLSAgICAgICAgJ3N5bW1ldHJpY19rZXkuY2MnLAotICAgICAgICAnc3ltbWV0cmljX2tleS5oJywKLSAgICAgICAgJ3dpbmNyeXB0X3NoaW0uaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyeXB0b191bml0dGVzdHMnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhZWFkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2VjX3ByaXZhdGVfa2V5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2VjX3NpZ25hdHVyZV9jcmVhdG9yX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2VuY3J5cHRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdobWFjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3AyMjRfc3Bha2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAncDIyNF91bml0dGVzdC5jYycsCi0gICAgICAgICdyYW5kb21fdW5pdHRlc3QuY2MnLAotICAgICAgICAncnNhX3ByaXZhdGVfa2V5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NlY3VyZV9oYXNoX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NoYTJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2lnbmF0dXJlX2NyZWF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2lnbmF0dXJlX3ZlcmlmaWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3N5bW1ldHJpY19rZXlfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvYmFzZS90ZXN0L3Rlc3QuZ3lwaSddLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnY29iYWx0PT0xJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvX3VuaXR0ZXN0c19kZXBsb3knLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnY3J5cHRvX3VuaXR0ZXN0cycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdjcnlwdG9fdW5pdHRlc3RzJywKLSAgICAgICAgICB9LAotICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4uL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9kb2NrZXItY29tcG9zZS55bWwgYi9kb2NrZXItY29tcG9zZS55bWwKaW5kZXggM2Q5YjM0Yi4uMGE4MjQ3NCAxMDA2NDQKLS0tIGEvZG9ja2VyLWNvbXBvc2UueW1sCisrKyBiL2RvY2tlci1jb21wb3NlLnltbApAQCAtMzgsNiArMzgsNyBAQAogICBOSU5KQV9QQVJBTExFTDogJHtOSU5KQV9QQVJBTExFTDotMzJ9CiAgIElTX0NJOiAke0lTX0NJOi0wfQogICBJU19ET0NLRVI6IDEKKyAgUFlUSE9OUEFUSDogL2NvZGUKIAogc2VydmljZXM6CiAjIyMjIFRvb2xzCkBAIC01Miw2ICs1MywxNiBAQAogICAgICAgRlJPTV9SRUY6ICR7RlJPTV9SRUY6LUhFQUReMX0KICAgICAgIFRPX1JFRjogJHtUT19SRUY6LUhFQUR9CiAKKyAgcHl0ZXN0OgorICAgIGJ1aWxkOgorICAgICAgY29udGV4dDogLi9kb2NrZXIvcHl0ZXN0CisgICAgICBkb2NrZXJmaWxlOiBEb2NrZXJmaWxlCisgICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1weXRlc3QKKyAgICB2b2x1bWVzOgorICAgIC0gJHtDT0JBTFRfU1JDOi0ufTovY29kZS8KKyAgICBkZXBlbmRzX29uOgorICAgICAgLSBiYXNlCisKICMjIyMgQ29iYWx0IGJ1aWxkIGNvbnRhaW5lcnMKICAgYmFzZToKICAgICBidWlsZDoKQEAgLTEwOSwxOCArMTIwLDYgQEAKICAgICAgIFBMQVRGT1JNOiBzdHViCiAgICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KIAotICBzdHViLWduOgotICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCi0gICAgYnVpbGQ6Ci0gICAgICBjb250ZXh0OiAuL2RvY2tlci9saW51eAotICAgICAgZG9ja2VyZmlsZTogc3R1Yi9nbi9Eb2NrZXJmaWxlCi0gICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1saW51eC1zdHViLWduCi0gICAgZGVwZW5kc19vbjogWyBzdHViIF0KLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgotICAgICAgUExBVEZPUk06IHN0dWIKLSAgICAgIENPTkZJRzogJHtDT05GSUc6LWRlYnVnfQotCiAgIGxpbnV4LXg2NHgxMToKICAgICA8PDogKmJ1aWxkLWNvbW1vbi1kZWZpbml0aW9ucwogICAgIGJ1aWxkOgpAQCAtMTM0LDE4ICsxMzMsNiBAQAogICAgICAgQ09ORklHOiAke0NPTkZJRzotZGVidWd9CiAgICAgICBUQVJHRVQ6ICR7VEFSR0VUOi1jb2JhbHRfZGVwbG95fQogCi0gIGxpbnV4LXg2NHgxMS1nbjoKLSAgICA8PDogKmJ1aWxkLWNvbW1vbi1kZWZpbml0aW9ucwotICAgIGJ1aWxkOgotICAgICAgY29udGV4dDogLi9kb2NrZXIvbGludXgKLSAgICAgIGRvY2tlcmZpbGU6IGxpbnV4LXg2NHgxMS9nbi9Eb2NrZXJmaWxlCi0gICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1saW51eC1nbgotICAgIGRlcGVuZHNfb246IFsgbGludXgteDY0eDExIF0KLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgotICAgICAgUExBVEZPUk06IGxpbnV4LXg2NHgxMQotICAgICAgQ09ORklHOiAke0NPTkZJRzotZGVidWd9Ci0KICAgbGludXgteDY0eDExLWJpb25pYzoKICAgICA8PDogKmNvbW1vbi1kZWZpbml0aW9ucwogICAgIDw8OiAqYnVpbGQtdm9sdW1lcwpAQCAtMjA0LDE4ICsxOTEsNiBAQAogICAgICAgPDw6ICpzaGFyZWQtYnVpbGQtZW52CiAgICAgICBQTEFURk9STTogYW5kcm9pZC14ODYKICAgICAgIENPTkZJRzogJHtDT05GSUc6LWRlYnVnfQotCi0gIGFuZHJvaWQteDg2LWduOgotICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCi0gICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1hbmRyb2lkLWduCi0gICAgZGVwZW5kc19vbjogWyBhbmRyb2lkLXg4NiBdCi0gICAgYnVpbGQ6Ci0gICAgICBjb250ZXh0OiAuL2RvY2tlci9saW51eC9hbmRyb2lkCi0gICAgICBkb2NrZXJmaWxlOiAuL2duL0RvY2tlcmZpbGUKLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgotICAgICAgUExBVEZPUk06IGFuZHJvaWQteDg2Ci0gICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KICAgICAgIFRBUkdFVF9DUFU6ICR7VEFSR0VUX0NQVToteDg2fQogCiAgIGFuZHJvaWQtYXJtOgpAQCAtMjI2LDE4ICsyMDEsNiBAQAogICAgICAgPDw6ICpzaGFyZWQtYnVpbGQtZW52CiAgICAgICBQTEFURk9STTogYW5kcm9pZC1hcm0KICAgICAgIENPTkZJRzogJHtDT05GSUc6LWRlYnVnfQotCi0gIGFuZHJvaWQtYXJtLWduOgotICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCi0gICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1hbmRyb2lkLWduCi0gICAgZGVwZW5kc19vbjogWyBhbmRyb2lkLWFybSBdCi0gICAgYnVpbGQ6Ci0gICAgICBjb250ZXh0OiAuL2RvY2tlci9saW51eC9hbmRyb2lkCi0gICAgICBkb2NrZXJmaWxlOiAuL2duL0RvY2tlcmZpbGUKLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgotICAgICAgUExBVEZPUk06IGFuZHJvaWQtYXJtCi0gICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KICAgICAgIFRBUkdFVF9DUFU6ICR7VEFSR0VUX0NQVTotYXJtfQogCiAgIGFuZHJvaWQtYXJtNjQ6CkBAIC0yNDgsMTggKzIxMSw2IEBACiAgICAgICA8PDogKnNoYXJlZC1idWlsZC1lbnYKICAgICAgIFBMQVRGT1JNOiBhbmRyb2lkLWFybTY0CiAgICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KLQotICBhbmRyb2lkLWFybTY0LWduOgotICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCi0gICAgaW1hZ2U6IGNvYmFsdC1idWlsZC1hbmRyb2lkLWduCi0gICAgZGVwZW5kc19vbjogWyBhbmRyb2lkLWFybTY0IF0KLSAgICBidWlsZDoKLSAgICAgIGNvbnRleHQ6IC4vZG9ja2VyL2xpbnV4L2FuZHJvaWQKLSAgICAgIGRvY2tlcmZpbGU6IC4vZ24vRG9ja2VyZmlsZQotICAgIGVudmlyb25tZW50OgotICAgICAgPDw6ICpzaGFyZWQtYnVpbGQtZW52Ci0gICAgICBQTEFURk9STTogYW5kcm9pZC1hcm02NAotICAgICAgQ09ORklHOiAke0NPTkZJRzotZGVidWd9CiAgICAgICBUQVJHRVRfQ1BVOiAke1RBUkdFVF9DUFU6LWFybTY0fQogCiAgIHJhc3BpOgpAQCAtMjczLDE3ICsyMjQsNiBAQAogICAgICAgUExBVEZPUk06ICR7UExBVEZPUk06LXJhc3BpLTJ9CiAgICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KIAotICByYXNwaS1nbjoKLSAgICA8PDogKmJ1aWxkLWNvbW1vbi1kZWZpbml0aW9ucwotICAgIGJ1aWxkOgotICAgICAgY29udGV4dDogLi9kb2NrZXIvbGludXgvcmFzcGkKLSAgICAgIGRvY2tlcmZpbGU6IC4vZ24vRG9ja2VyZmlsZQotICAgIGltYWdlOiBjb2JhbHQtYnVpbGQtcmFzcGktZ24KLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgotICAgICAgUExBVEZPUk06ICR7UExBVEZPUk06LXJhc3BpLTJ9Ci0gICAgICBDT05GSUc6ICR7Q09ORklHOi1kZWJ1Z30KLQogICAjIERlZmluZSBjb21tb24gYnVpbGQgY29udGFpbmVyIGZvciBFdmVyZ3JlZW4KICAgYnVpbGQtZXZlcmdyZWVuOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zMDIsNiArMjQyLDcgQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi14NjQKKyAgICAgIFRBUkdFVF9DUFU6ICR7VEFSR0VUX0NQVToteDY0fQogCiAgIGV2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEyOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zMTAsNiArMjUxLDggQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEyCisgICAgICBUQVJHRVRfQ1BVOiAke1RBUkdFVF9DUFU6LXg2NH0KKyAgICAgIFNCX0FQSV9WRVJTSU9OOiAxMgogCiAgIGV2ZXJncmVlbi14ODY6CiAgICAgPDw6ICpidWlsZC1jb21tb24tZGVmaW5pdGlvbnMKQEAgLTMxOCw2ICsyNjEsNyBAQAogICAgIGVudmlyb25tZW50OgogICAgICAgPDw6ICpzaGFyZWQtYnVpbGQtZW52CiAgICAgICBQTEFURk9STTogZXZlcmdyZWVuLXg4NgorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi14ODZ9CiAKICAgZXZlcmdyZWVuLXg4Ni1zYnZlcnNpb24tMTI6CiAgICAgPDw6ICpidWlsZC1jb21tb24tZGVmaW5pdGlvbnMKQEAgLTMyNiw2ICsyNzAsOCBAQAogICAgIGVudmlyb25tZW50OgogICAgICAgPDw6ICpzaGFyZWQtYnVpbGQtZW52CiAgICAgICBQTEFURk9STTogZXZlcmdyZWVuLXg4Ni1zYnZlcnNpb24tMTIKKyAgICAgIFRBUkdFVF9DUFU6ICR7VEFSR0VUX0NQVToteDg2fQorICAgICAgU0JfQVBJX1ZFUlNJT046IDEyCiAKICAgZXZlcmdyZWVuLWFybTY0OgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zMzQsNiArMjgwLDcgQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi1hcm02NAorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi1hcm02NH0KIAogICBldmVyZ3JlZW4tYXJtNjQtc2J2ZXJzaW9uLTEyOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zNDIsNiArMjg5LDggQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi1hcm02NC1zYnZlcnNpb24tMTIKKyAgICAgIFRBUkdFVF9DUFU6ICR7VEFSR0VUX0NQVTotYXJtNjR9CisgICAgICBTQl9BUElfVkVSU0lPTjogMTIKIAogICBldmVyZ3JlZW4tYXJtLWhhcmRmcDoKICAgICA8PDogKmJ1aWxkLWNvbW1vbi1kZWZpbml0aW9ucwpAQCAtMzUwLDYgKzI5OSw3IEBACiAgICAgZW52aXJvbm1lbnQ6CiAgICAgICA8PDogKnNoYXJlZC1idWlsZC1lbnYKICAgICAgIFBMQVRGT1JNOiBldmVyZ3JlZW4tYXJtLWhhcmRmcAorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi1hcm19CiAKICAgZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zNTgsNiArMzA4LDggQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMgorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi1hcm19CisgICAgICBTQl9BUElfVkVSU0lPTjogMTIKIAogICBldmVyZ3JlZW4tYXJtLXNvZnRmcDoKICAgICA8PDogKmJ1aWxkLWNvbW1vbi1kZWZpbml0aW9ucwpAQCAtMzY2LDYgKzMxOCw3IEBACiAgICAgZW52aXJvbm1lbnQ6CiAgICAgICA8PDogKnNoYXJlZC1idWlsZC1lbnYKICAgICAgIFBMQVRGT1JNOiBldmVyZ3JlZW4tYXJtLXNvZnRmcAorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi1hcm19CiAKICAgZXZlcmdyZWVuLWFybS1zb2Z0ZnAtc2J2ZXJzaW9uLTEyOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zNzQsNiArMzI3LDggQEAKICAgICBlbnZpcm9ubWVudDoKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGV2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMgorICAgICAgVEFSR0VUX0NQVTogJHtUQVJHRVRfQ1BVOi1hcm19CisgICAgICBTQl9BUElfVkVSU0lPTjogMTIKIAogICBsaW51eC14NjR4MTEtc2J2ZXJzaW9uMTItZXZlcmdyZWVuOgogICAgIDw8OiAqYnVpbGQtY29tbW9uLWRlZmluaXRpb25zCkBAIC0zODgsNiArMzQzLDcgQEAKICAgICAgIDw8OiAqc2hhcmVkLWJ1aWxkLWVudgogICAgICAgUExBVEZPUk06IGxpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTIKICAgICAgIENPTkZJRzogJHtDT05GSUc6LWRlYnVnfQorICAgICAgU0JfQVBJX1ZFUlNJT046IDEyCiAKICAgIyBFeGFtcGxlIHVzYWdlIG9mIHVuaXR0ZXN0OgogICAjIDEuIEJ1aWxkIHRoZSBjb250YWluZXJzIGZvciB3aGljaCB5b3Ugd2FudCB0byB1bml0dGVzdApkaWZmIC0tZ2l0IGEvZG9ja2VyL2RvY3NpdGUvRG9ja2VyZmlsZSBiL2RvY2tlci9kb2NzaXRlL0RvY2tlcmZpbGUKaW5kZXggYjViNDQzNi4uM2VkNWY5YSAxMDA2NDQKLS0tIGEvZG9ja2VyL2RvY3NpdGUvRG9ja2VyZmlsZQorKysgYi9kb2NrZXIvZG9jc2l0ZS9Eb2NrZXJmaWxlCkBAIC0xMiw4ICsxMiw5IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLUZST00gZ2NyLmlvL2Nsb3VkLW1hcmtldHBsYWNlLWNvbnRhaW5lcnMvZ29vZ2xlL3J1YnkKK0ZST00gcnVieToyLjctYnVzdGVyCiAKK0FSRyBVU0VSCiBBUkcgVUlECiBBUkcgR0lECiAKQEAgLTI2LDEwICsyNyw3IEBACiAKIENPUFkgR2VtZmlsZSAvYXBwL0dlbWZpbGUKIAotIyBJbnN0YWxsIGFuZCB1c2UgdGhlIGxhdGVzdCBSdWJ5IHZlcnNpb24sIGFuZCBpbnN0YWxsIGFsbCBvZiB0aGUgcmVxdWlyZWQgZ2Vtcy4KLVJVTiByYmVudiBpbnN0YWxsIDIuNy4xICYmIHJiZW52IGdsb2JhbCAyLjcuMSBcCi0gICAgJiYgYnVuZGxlIGluc3RhbGwgXAotICAgICYmIGVjaG8gIkRvbmUiCitSVU4gYnVuZGxlIGluc3RhbGwgLS1nZW1maWxlPS9hcHAvR2VtZmlsZQogCiAjIFdlIGNyZWF0ZSBhbmQgdXNlIGEgbm9uLXJvb3QgdXNlciBleHBsaWNpdGx5IHNvIHRoYXQgdGhlIGdlbmVyYXRlZCBhbmQKICMgbW9kaWZpZWQgZmlsZXMgbWFpbnRhaW4gdGhlIHNhbWUgcGVybWlzc2lvbnMgYXMgdGhlIHVzZXIgdGhhdCBsYXVuY2hlZCB0aGUKQEAgLTM3LDYgKzM1LDYgQEAKIFJVTiBhZGRncm91cCAtLWdyb3VwIC0tZ2lkICIke0dJRH0iIGRlZmF1bHRncm91cCBcCiAgICAgJiYgYWRkdXNlciAtLWRpc2FibGVkLXBhc3N3b3JkIC0tZ2Vjb3MgJycgLS11aWQgIiR7VUlEfSIgLS1naWQgIiR7R0lEfSIgZGVmYXVsdHVzZXIKIAotVVNFUiBkZWZhdWx0dXNlcgorVVNFUiAke1VTRVI6LWRlZmF1bHR1c2VyfQogCiBDTUQgL2NvYmFsdC90aGlyZF9wYXJ0eS9yZXBvLXB1Ymxpc2hpbmctdG9vbGtpdC1sb2NhbC9wcmV2aWV3LXNpdGUuc2gKZGlmZiAtLWdpdCBhL2RvY2tlci9saW51eC9hbmRyb2lkL0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvYW5kcm9pZC9Eb2NrZXJmaWxlCmluZGV4IGViMjZmNzguLmYzNzBjNDIgMTAwNjQ0Ci0tLSBhL2RvY2tlci9saW51eC9hbmRyb2lkL0RvY2tlcmZpbGUKKysrIGIvZG9ja2VyL2xpbnV4L2FuZHJvaWQvRG9ja2VyZmlsZQpAQCAtNDYsNiArNDYsNyBAQAogICAmJiBlY2hvIHllcyB8ICR7QU5EUk9JRF9TREtfUk9PVH0vdG9vbHMvYmluL3Nka21hbmFnZXIgXAogICAgICAgLS1zZGtfcm9vdD0ke0FORFJPSURfU0RLX1JPT1R9IFwKICAgICAiYnVpbGQtdG9vbHM7MzAuMC4wIiBcCisgICAgImJ1aWxkLXRvb2xzOzMxLjAuMCIgXAogICAgICJjbWFrZTszLjEwLjIuNDk4ODQwNCIgXAogICAgICJjbWRsaW5lLXRvb2xzOzEuMCIgXAogICAgICJleHRyYXM7YW5kcm9pZDttMnJlcG9zaXRvcnkiIFwKQEAgLTUzLDggKzU0LDkgQEAKICAgICAibmRrOzIxLjEuNjM1MjQ2MiIgXAogICAgICJwYXRjaGVyO3Y0IiBcCiAgICAgInBsYXRmb3JtczthbmRyb2lkLTMwIiBcCisgICAgInBsYXRmb3JtczthbmRyb2lkLTMxIiBcCiAgICAgInBsYXRmb3JtLXRvb2xzIiBcCiAgICYmIGVjaG8gIkFuZHJvaWQgU0RLIGluc3RhbGxlZCIKIAotQ01EIC9jb2RlL2NvYmFsdC9idWlsZC9neXBfY29iYWx0IC12IC1DICR7Q09ORklHfSAke1BMQVRGT1JNfSBcCi0gICAgJiYgbmluamEgLXYgLWogJHtOSU5KQV9QQVJBTExFTH0gLUMgJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAke1RBUkdFVDotY29iYWx0X2RlcGxveX0KK0NNRCBnbiBnZW4gJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAtLWFyZ3M9InRhcmdldF9wbGF0Zm9ybT1cIiR7UExBVEZPUk19XCIgYnVpbGRfdHlwZT1cIiR7Q09ORklHfVwiIHRhcmdldF9vcz1cImFuZHJvaWRcIiB0YXJnZXRfY3B1PVwiJHtUQVJHRVRfQ1BVfVwiIiAmJiBcCisgICAgbmluamEgLXYgLWogJHtOSU5KQV9QQVJBTExFTH0gLUMgJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAke1RBUkdFVDotY29iYWx0X2luc3RhbGx9CmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvYW5kcm9pZC9nbi9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L2FuZHJvaWQvZ24vRG9ja2VyZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MxZWI0MS4uMDAwMDAwMAotLS0gYS9kb2NrZXIvbGludXgvYW5kcm9pZC9nbi9Eb2NrZXJmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLUZST00gY29iYWx0LWJ1aWxkLWFuZHJvaWQKLQotQ01EIGduIGdlbiAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9IC0tYXJncz0idGFyZ2V0X3BsYXRmb3JtPVwiJHtQTEFURk9STX1cIiBidWlsZF90eXBlPVwiJHtDT05GSUd9XCIgdGFyZ2V0X29zPVwiYW5kcm9pZFwiIHRhcmdldF9jcHU9XCIke1RBUkdFVF9DUFV9XCIiICYmIFwKLSAgICBuaW5qYSAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9CmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvYmFzZS9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L2Jhc2UvRG9ja2VyZmlsZQppbmRleCA5Y2RjOGY4Li5kMGMyMWIzIDEwMDY0NAotLS0gYS9kb2NrZXIvbGludXgvYmFzZS9Eb2NrZXJmaWxlCisrKyBiL2RvY2tlci9saW51eC9iYXNlL0RvY2tlcmZpbGUKQEAgLTI3LDEwICsyNywxNCBAQAogICAgICAgICBweXRob24tcmVxdWVzdHMgXAogICAgICAgICBweXRob24tc2V0dXB0b29scyBcCiAgICAgICAgIHB5dGhvbi13aGVlbCBcCisgICAgICAgIHB5dGhvbjMtZGV2IFwKICAgICAgICAgcHl0aG9uMy1waXAgXAogICAgICAgICBweXRob24zLXJlcXVlc3RzIFwKKyAgICAgICAgcHl0aG9uMy1zZXR1cHRvb2xzIFwKICAgICAgICAgZ2l0IGNjYWNoZSBcCiAgICAgICAgIGN1cmwgeHotdXRpbHMgXAogICAgICYmIC9vcHQvY2xlYW4tYWZ0ZXItYXB0LnNoCiAKK1JVTiBweXRob24zIC1tIHBpcCBpbnN0YWxsIC0tdXBncmFkZSBwaXAKKwogQ01EIFsiL3Vzci9iaW4vcHl0aG9uIiwiLS12ZXJzaW9uIl0KZGlmZiAtLWdpdCBhL2RvY2tlci9saW51eC9iYXNlL2J1aWxkL0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvYmFzZS9idWlsZC9Eb2NrZXJmaWxlCmluZGV4IDdjNDY0YmIuLjJhMzgxN2YgMTAwNjQ0Ci0tLSBhL2RvY2tlci9saW51eC9iYXNlL2J1aWxkL0RvY2tlcmZpbGUKKysrIGIvZG9ja2VyL2xpbnV4L2Jhc2UvYnVpbGQvRG9ja2VyZmlsZQpAQCAtNjYsNiArNjYsMTAgQEAKICMgPT0gU2V0IHVwICBjY2FjaGUKIFJVTiBjZCAvdG1wICYmIG1rZGlyICR7SE9NRX0vY2NhY2hlCiAKKyMgPT0gSW5zdGFsbCBhbmQgc2V0IHVwIHN0YXRpY2FsbHkgbGlua2VkIHNjY2FjaGUuCitBREQgaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2NvYmFsdC1kb2NrZXItcmVzb3VyY2VzL2xpbnV4L3NjY2FjaGUgL3Vzci9sb2NhbC9iaW4vc2NjYWNoZQorUlVOIGNobW9kICt4IC91c3IvbG9jYWwvYmluL3NjY2FjaGUgJiYgY2QgL3RtcCAmJiBta2RpciAke0hPTUV9L3NjY2FjaGUKKwogIyA9PT0gSW5zdGFsbCBwaW5uZWQgaG9zdCBDbGFuZyB0b29sY2hhaW4gZm9yIGFsbCBMaW51eC1ob3N0ZWQgYnVpbGRzCiBBUkcgQ0xBTkdfVkVSCiAKQEAgLTgxLDE1ICs4NSw1IEBACiAgICAgJiYgZWNobyAke0NMQU5HX1ZFUn0gPj4gJHtUQ19IT01FfS9jcl9idWlsZF9yZXZpc2lvbiBcCiAgICAgJiYgcm0gY2xhbmctJHtDTEFOR19WRVJ9LnRnegogCi0jICA9PT0gSW5zdGFsbCBwb3J0YWJsZSBzY2NhY2hlIGJpbmFyeQotQVJHIFNDQ0FDSEU9c2NjYWNoZS1kaXN0LXYwLjIuMTUteDg2XzY0LXVua25vd24tbGludXgtbXVzbC50YXIuZ3oKLVJVTiBjZCAvdG1wIFwKLSAgICAmJiBjdXJsIC1MIC1PIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NjY2FjaGUvcmVsZWFzZXMvZG93bmxvYWQvdjAuMi4xNS8ke1NDQ0FDSEV9IFwKLSAgICAmJiB0YXIgeHZ6ZiAke1NDQ0FDSEV9IC1DIC91c3IvbG9jYWwvYmluIC0tc3RyaXAtY29tcG9uZW50cz0xIFwKLSAgICAmJiBtdiAvdXNyL2xvY2FsL2Jpbi9zY2NhY2hlLWRpc3QgL3Vzci9sb2NhbC9iaW4vc2NjYWNoZSBcCi0gICAgJiYgY2htb2QgK3ggL3Vzci9sb2NhbC9iaW4vc2NjYWNoZSBcCi0gICAgJiYgcm0gLXJmICR7U0NDQUNIRX0gXAotICAgICYmIHNjY2FjaGUgLS12ZXJzaW9uCi0KIFdPUktESVIgL2NvZGUKIENNRCBbIi91c3IvYmluL3B5dGhvbiIsIi0tdmVyc2lvbiJdCmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvY2xhbmctMy05L0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvY2xhbmctMy05L0RvY2tlcmZpbGUKaW5kZXggNDViMTI0NS4uZDc5Y2NkMyAxMDA2NDQKLS0tIGEvZG9ja2VyL2xpbnV4L2NsYW5nLTMtOS9Eb2NrZXJmaWxlCisrKyBiL2RvY2tlci9saW51eC9jbGFuZy0zLTkvRG9ja2VyZmlsZQpAQCAtMjAsNyArMjAsNSBAQAogICAgICYmIGFwdCBpbnN0YWxsIC1xcXkgLS1uby1pbnN0YWxsLXJlY29tbWVuZHMgY2xhbmctMy45IFwKICAgICAmJiAvb3B0L2NsZWFuLWFmdGVyLWFwdC5zaAogCi1DTUQgL2NvZGUvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgLUMgJHtDT05GSUd9ICR7UExBVEZPUk19ICYmIFwKLSAgICBjY2FjaGUgLXogJiYgXAotICAgIG5pbmphIC12IC1qICR7TklOSkFfUEFSQUxMRUx9IC1DICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gJHtUQVJHRVQ6LWNvYmFsdF9kZXBsb3l9ICYmIFwKLSAgICBjY2FjaGUgLXMKK0NNRCBnbiBnZW4gJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAtLWFyZ3M9InRhcmdldF9wbGF0Zm9ybT1cIiR7UExBVEZPUk19XCIgYnVpbGRfdHlwZT1cIiR7Q09ORklHfVwiIHVzaW5nX29sZF9jb21waWxlcj10cnVlIiAmJiBcCisgICAgbmluamEgLXYgLWogJHtOSU5KQV9QQVJBTExFTH0gLUMgJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAke1RBUkdFVDotY29iYWx0X2luc3RhbGx9CmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvZXZlcmdyZWVuL0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvZXZlcmdyZWVuL0RvY2tlcmZpbGUKaW5kZXggMjEyMjNkNS4uZjAzZDE4MiAxMDA2NDQKLS0tIGEvZG9ja2VyL2xpbnV4L2V2ZXJncmVlbi9Eb2NrZXJmaWxlCisrKyBiL2RvY2tlci9saW51eC9ldmVyZ3JlZW4vRG9ja2VyZmlsZQpAQCAtMjMsNSArMjMsNSBAQAogICAgICAgICBnKystbXVsdGlsaWIgXAogICAgICYmIC9vcHQvY2xlYW4tYWZ0ZXItYXB0LnNoCiAKLUNNRCAvY29kZS9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCAtdiAtQyAke0NPTkZJRzotZGVidWd9ICR7UExBVEZPUk19ICYmIFwKLSAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUc6LWRlYnVnfSAke1RBUkdFVDotY29iYWx0X2RlcGxveX0KK0NNRCBnbiBnZW4gJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHOi1kZWJ1Z30gLS1hcmdzPSJ0YXJnZXRfcGxhdGZvcm09XCIke1BMQVRGT1JNfVwiIGJ1aWxkX3R5cGU9XCIke0NPTkZJRzotZGVidWd9XCIgdGFyZ2V0X2NwdT1cIiR7VEFSR0VUX0NQVX1cIiBzYl9hcGlfdmVyc2lvbj0ke1NCX0FQSV9WRVJTSU9OOi0xNH0iICYmIFwKKyAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUc6LWRlYnVnfSAke1RBUkdFVDotY29iYWx0X2luc3RhbGx9CmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvZ2NjLTYtMy9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L2djYy02LTMvRG9ja2VyZmlsZQppbmRleCBhZDA5OGU4Li4yZWFkMDdkIDEwMDY0NAotLS0gYS9kb2NrZXIvbGludXgvZ2NjLTYtMy9Eb2NrZXJmaWxlCisrKyBiL2RvY2tlci9saW51eC9nY2MtNi0zL0RvY2tlcmZpbGUKQEAgLTIwLDggKzIwLDUgQEAKICAgICAmJiBhcHQgaW5zdGFsbCAtcXF5IGdjYy02IGcrKy02IFwKICAgICAmJiAvb3B0L2NsZWFuLWFmdGVyLWFwdC5zaAogCi1DTUQgL2NvZGUvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgLUMgJHtDT05GSUd9ICR7UExBVEZPUk19ICYmIFwKLSAgICBjY2FjaGUgLXogJiYgXAotICAgIG5pbmphIC12IC1qICR7TklOSkFfUEFSQUxMRUx9IC1DICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gXAotICAgICAgICAgICAgICAgICR7VEFSR0VUOi1jb2JhbHRfZGVwbG95fSAmJiBcCi0gICAgY2NhY2hlIC1zCitDTUQgZ24gZ2VuICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gLS1hcmdzPSJ0YXJnZXRfcGxhdGZvcm09XCIke1BMQVRGT1JNfVwiIGJ1aWxkX3R5cGU9XCIke0NPTkZJR31cIiBpc19jbGFuZz1mYWxzZSB1c2luZ19vbGRfY29tcGlsZXI9dHJ1ZSIgJiYgXAorICAgIG5pbmphIC12IC1qICR7TklOSkFfUEFSQUxMRUx9IC1DICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gJHtUQVJHRVQ6LWNvYmFsdF9pbnN0YWxsfQpkaWZmIC0tZ2l0IGEvZG9ja2VyL2xpbnV4L2xpbnV4LXg2NHgxMS9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L2xpbnV4LXg2NHgxMS9Eb2NrZXJmaWxlCmluZGV4IGQ1OGI4ZDkuLmY3Nzk1N2YgMTAwNjQ0Ci0tLSBhL2RvY2tlci9saW51eC9saW51eC14NjR4MTEvRG9ja2VyZmlsZQorKysgYi9kb2NrZXIvbGludXgvbGludXgteDY0eDExL0RvY2tlcmZpbGUKQEAgLTI3LDUgKzI3LDcgQEAKICAgICAgICAgbGlieGktZGV2IFwKICAgICAmJiAvb3B0L2NsZWFuLWFmdGVyLWFwdC5zaAogCi1DTUQgL2NvZGUvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgLUMgJHtDT05GSUd9ICR7UExBVEZPUk19ICYmIFwKLSAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9ICR7VEFSR0VUOi1jb2JhbHRfZGVwbG95fQorUlVOIHB5dGhvbjMgLW0gcGlwIGluc3RhbGwgInNlbGVuaXVtPT0zLjE0MS4wIiAiQnJvdGxpPT0xLjAuOSIKKworQ01EIGduIGdlbiAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9IC0tYXJncz0idGFyZ2V0X3BsYXRmb3JtPVwiJHtQTEFURk9STX1cIiBidWlsZF90eXBlPVwiJHtDT05GSUd9XCIgc2JfYXBpX3ZlcnNpb249JHtTQl9BUElfVkVSU0lPTjotMTR9IiAmJiBcCisgICAgbmluamEgLXYgLWogJHtOSU5KQV9QQVJBTExFTH0gLUMgJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfSAke1RBUkdFVDotY29iYWx0X2luc3RhbGx9CmRpZmYgLS1naXQgYS9kb2NrZXIvbGludXgvbGludXgteDY0eDExL2duL0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvbGludXgteDY0eDExL2duL0RvY2tlcmZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NjA0YWYuLjAwMDAwMDAKLS0tIGEvZG9ja2VyL2xpbnV4L2xpbnV4LXg2NHgxMS9nbi9Eb2NrZXJmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1GUk9NIGNvYmFsdC1idWlsZC1saW51eAotCi1DTUQgZ24gZ2VuICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gLS1hcmdzPSJ0YXJnZXRfcGxhdGZvcm09XCIke1BMQVRGT1JNfVwiIGJ1aWxkX3R5cGU9XCIke0NPTkZJR31cIiIgJiYgXAotICAgIG5pbmphIC1qICR7TklOSkFfUEFSQUxMRUx9IC1DICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30KZGlmZiAtLWdpdCBhL2RvY2tlci9saW51eC9yYXNwaS9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L3Jhc3BpL0RvY2tlcmZpbGUKaW5kZXggMGMwMTVmNy4uYWQ0YThlMSAxMDA2NDQKLS0tIGEvZG9ja2VyL2xpbnV4L3Jhc3BpL0RvY2tlcmZpbGUKKysrIGIvZG9ja2VyL2xpbnV4L3Jhc3BpL0RvY2tlcmZpbGUKQEAgLTQwLDUgKzQwLDUgQEAKICAgICAmJiB0YXIgeGp2ZiAvdG1wLyR7cmFzcGlfdG9vbHN9IFwKICAgICAmJiBybSAvdG1wLyR7cmFzcGlfdG9vbHN9CiAKLUNNRCAvY29kZS9jb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCAtdiAtQyAke0NPTkZJR30gJHtQTEFURk9STX0gXAotICAgICYmIG5pbmphIC12IC1qICR7TklOSkFfUEFSQUxMRUx9IC1DICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gJHtUQVJHRVQ6LWNvYmFsdF9kZXBsb3l9CitDTUQgZ24gZ2VuICR7T1VURElSfS8ke1BMQVRGT1JNfV8ke0NPTkZJR30gLS1hcmdzPSJ0YXJnZXRfcGxhdGZvcm09XCIke1BMQVRGT1JNfVwiIGJ1aWxkX3R5cGU9XCIke0NPTkZJR31cIiB0YXJnZXRfY3B1PVwiYXJtXCIgaXNfY2xhbmc9ZmFsc2UiICYmIFwKKyAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9ICR7VEFSR0VUOi1jb2JhbHRfaW5zdGFsbH0KZGlmZiAtLWdpdCBhL2RvY2tlci9saW51eC9yYXNwaS9nbi9Eb2NrZXJmaWxlIGIvZG9ja2VyL2xpbnV4L3Jhc3BpL2duL0RvY2tlcmZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTYxNzkuLjAwMDAwMDAKLS0tIGEvZG9ja2VyL2xpbnV4L3Jhc3BpL2duL0RvY2tlcmZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotRlJPTSBjb2JhbHQtYnVpbGQtcmFzcGkKLQotQ01EIGduIGdlbiAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9IC0tYXJncz0idGFyZ2V0X3BsYXRmb3JtPVwiJHtQTEFURk9STX1cIiBidWlsZF90eXBlPVwiJHtDT05GSUd9XCIgdGFyZ2V0X2NwdT1cImFybVwiIGlzX2NsYW5nPWZhbHNlIiAmJiBcCi0gICAgbmluamEgLWogJHtOSU5KQV9QQVJBTExFTH0gLUMgJHtPVVRESVJ9LyR7UExBVEZPUk19XyR7Q09ORklHfQpkaWZmIC0tZ2l0IGEvZG9ja2VyL2xpbnV4L3N0dWIvRG9ja2VyZmlsZSBiL2RvY2tlci9saW51eC9zdHViL0RvY2tlcmZpbGUKaW5kZXggMDIzN2E3Yy4uNzVkNDI5ZiAxMDA2NDQKLS0tIGEvZG9ja2VyL2xpbnV4L3N0dWIvRG9ja2VyZmlsZQorKysgYi9kb2NrZXIvbGludXgvc3R1Yi9Eb2NrZXJmaWxlCkBAIC0yOCw1ICsyOCw1IEBACiAgICAgICAgIGxpYnhtbDItZGV2IFwKICAgICAmJiAvb3B0L2NsZWFuLWFmdGVyLWFwdC5zaAogCi1DTUQgL2NvZGUvY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgLUMgJHtDT05GSUd9ICR7UExBVEZPUk19ICYmIFwKLSAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9ICR7VEFSR0VUOi1jb2JhbHRfZGVwbG95fQorQ01EIGduIGdlbiAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9IC0tYXJncz0idGFyZ2V0X3BsYXRmb3JtPVwiJHtQTEFURk9STX1cIiBidWlsZF90eXBlPVwiJHtDT05GSUd9XCIiICYmIFwKKyAgICBuaW5qYSAtdiAtaiAke05JTkpBX1BBUkFMTEVMfSAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9ICR7VEFSR0VUOi1jb2JhbHRfaW5zdGFsbH0KZGlmZiAtLWdpdCBhL2RvY2tlci9saW51eC9zdHViL2duL0RvY2tlcmZpbGUgYi9kb2NrZXIvbGludXgvc3R1Yi9nbi9Eb2NrZXJmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjRkZjlhLi4wMDAwMDAwCi0tLSBhL2RvY2tlci9saW51eC9zdHViL2duL0RvY2tlcmZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLUZST00gY29iYWx0LWJ1aWxkLWxpbnV4LXN0dWIKLQotQ01EIGduIGdlbiAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9IC0tYXJncz0idGFyZ2V0X3BsYXRmb3JtPVwiJHtQTEFURk9STX1cIiBidWlsZF90eXBlPVwiJHtDT05GSUd9XCIiICYmIFwKLSAgICBuaW5qYSAtdiAtQyAke09VVERJUn0vJHtQTEFURk9STX1fJHtDT05GSUd9CmRpZmYgLS1naXQgYS9kb2NrZXIvcHl0ZXN0L0RvY2tlcmZpbGUgYi9kb2NrZXIvcHl0ZXN0L0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyMjAxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci9weXRlc3QvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworRlJPTSBjb2JhbHQtYmFzZQorCitDT1BZIHJlcXVpcmVtZW50cy50eHQgL29wdC9yZXF1aXJlbWVudHMudHh0CitSVU4gcGlwMyBpbnN0YWxsIC1yIC9vcHQvcmVxdWlyZW1lbnRzLnR4dAorCitXT1JLRElSIC9jb2RlCisKK0NNRCBweXRlc3QKZGlmZiAtLWdpdCBhL2RvY2tlci9weXRlc3QvcmVxdWlyZW1lbnRzLmluIGIvZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci9weXRlc3QvcmVxdWlyZW1lbnRzLmluCkBAIC0wLDAgKzEsNCBAQAorcHl0ZXN0PDgKK2NvdmVyYWdlPDcKK3JlcXVlc3RzPT0yLjI1LjEKK2pzb25zY2hlbWE8NQpkaWZmIC0tZ2l0IGEvZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMudHh0IGIvZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5M2MzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NrZXIvcHl0ZXN0L3JlcXVpcmVtZW50cy50eHQKQEAgLTAsMCArMSw0MCBAQAorIworIyBUaGlzIGZpbGUgaXMgYXV0b2dlbmVyYXRlZCBieSBwaXAtY29tcGlsZQorIyBUbyB1cGRhdGUsIHJ1bjoKKyMKKyMgICAgcGlwLWNvbXBpbGUgLS1vdXRwdXQtZmlsZT1kb2NrZXIvcHl0ZXN0L3JlcXVpcmVtZW50cy50eHQgZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMuaW4KKyMKK2F0dHJzPT0yMS40LjAKKyAgICAjIHZpYQorICAgICMgICBqc29uc2NoZW1hCisgICAgIyAgIHB5dGVzdAorY2VydGlmaT09MjAyMS4xMC44CisgICAgIyB2aWEgcmVxdWVzdHMKK2NoYXJkZXQ9PTQuMC4wCisgICAgIyB2aWEgcmVxdWVzdHMKK2NvdmVyYWdlPT02LjMuMgorICAgICMgdmlhIC1yIGRvY2tlci9weXRlc3QvcmVxdWlyZW1lbnRzLmluCitpZG5hPT0yLjEwCisgICAgIyB2aWEgcmVxdWVzdHMKK2luaWNvbmZpZz09MS4xLjEKKyAgICAjIHZpYSBweXRlc3QKK2pzb25zY2hlbWE9PTQuNC4wCisgICAgIyB2aWEgLXIgZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMuaW4KK3BhY2thZ2luZz09MjEuMworICAgICMgdmlhIHB5dGVzdAorcGx1Z2d5PT0xLjAuMAorICAgICMgdmlhIHB5dGVzdAorcHk9PTEuMTEuMAorICAgICMgdmlhIHB5dGVzdAorcHlwYXJzaW5nPT0zLjAuNworICAgICMgdmlhIHBhY2thZ2luZworcHlyc2lzdGVudD09MC4xOC4xCisgICAgIyB2aWEganNvbnNjaGVtYQorcHl0ZXN0PT03LjEuMQorICAgICMgdmlhIC1yIGRvY2tlci9weXRlc3QvcmVxdWlyZW1lbnRzLmluCityZXF1ZXN0cz09Mi4yNS4xCisgICAgIyB2aWEgLXIgZG9ja2VyL3B5dGVzdC9yZXF1aXJlbWVudHMuaW4KK3RvbWxpPT0yLjAuMQorICAgICMgdmlhIHB5dGVzdAordXJsbGliMz09MS4yNi45CisgICAgIyB2aWEgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL2RvY2tlci93aW5kb3dzL2Jhc2UvdmlzdWFsc3R1ZGlvMjAxNy9Eb2NrZXJmaWxlIGIvZG9ja2VyL3dpbmRvd3MvYmFzZS92aXN1YWxzdHVkaW8yMDE3L0RvY2tlcmZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1YWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci93aW5kb3dzL2Jhc2UvdmlzdWFsc3R1ZGlvMjAxNy9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsNTIgQEAKKyMgZXNjYXBlPWAKKworIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitBUkcgRlJPTV9JTUFHRQorRlJPTSAke0ZST01fSU1BR0V9CisKKyMgRG9ja2VyZmlsZSBmb3IgaW1hZ2UgdXNlZCB0byBpbnN0YWxsIFZpc3VhbCBTdHVkaW8uCisjIFdBUk5JTkc6IENoYW5nZXMgdG8gdGhpcyBmaWxlIHdpbGwgcmVzdWx0IGluIGFuIGV4dHJlbWVseSBsb25nIGltYWdlIHJlYnVpbGQuCisKK1NIRUxMIFsicG93ZXJzaGVsbCIsICItRXhlY3V0aW9uUG9saWN5IiwgInVucmVzdHJpY3RlZCIsICItQ29tbWFuZCJdCisKK1JVTiBta2RpciBDOlxURU1QO2AKKyAgICBXcml0ZS1Ib3N0ICgnRG93bmxvYWRpbmcgdnNfYnVpbGR0b29scy5leGUnKTtgCisgICAgSW52b2tlLVdlYlJlcXVlc3QgLVVyaSBodHRwczovL2FrYS5tcy92cy8xNS9yZWxlYXNlL3ZzX2J1aWxkdG9vbHMuZXhlIC1PdXRGaWxlIEM6XFRFTVBcdnNfYnVpbGR0b29scy5leGU7YAorICAgIFdyaXRlLUhvc3QgKCdJbnN0YWxsaW5nIHZzX2J1aWxkdG9vbHMuZXhlJyk7YAorICAgIFN0YXJ0LVByb2Nlc3MgQzpcVEVNUFx2c19idWlsZHRvb2xzLmV4ZSAtV2FpdCAtTm9OZXdXaW5kb3dgCisgICAgICAgIC1Bcmd1bWVudExpc3QgJy0tcXVpZXQgLS13YWl0IC0tbm9yZXN0YXJ0IC0tbm9jYWNoZWAKKyAgICAgICAgLS1pbnN0YWxsUGF0aCBDOlxCdWlsZFRvb2xzIGAKKyAgICAgICAgLS1hZGQgTWljcm9zb2Z0LlZpc3VhbFN0dWRpby5Db21wb25lbnQuVkMuQ29yZUlkZSBgCisgICAgICAgIC0tYWRkIE1pY3Jvc29mdC5WaXN1YWxTdHVkaW8uQ29tcG9uZW50LlZDLlRvb2xzLng4Ni54NjQgYAorICAgICAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5XaW5kb3dzMTBTREsuMTc3NjMgYAorICAgICAgICAtLWFkZCBNaWNyb3NvZnQuVmlzdWFsU3R1ZGlvLkNvbXBvbmVudC5WQy5Ub29scy4xNC4xNSc7YAorICAgIFdyaXRlLUhvc3QgKCdDbGVhbmluZyB1cCB2c19idWlsZHRvb2xzLmV4ZScpO2AKKyAgICBSZW1vdmUtSXRlbSAtRm9yY2UgLVJlY3Vyc2UgJHtlbnY6UHJvZ3JhbUZpbGVzKHg4Nil9XCdNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbydcSW5zdGFsbGVyO2AKKyAgICBSZW1vdmUtSXRlbSAtRm9yY2UgLVJlY3Vyc2UgJGVudjpURU1QXCo7YAorICAgIFJlbW92ZS1JdGVtIC1Gb3JjZSAtUmVjdXJzZSAkZW52OlByb2dyYW1EYXRhXCdQYWNrYWdlIENhY2hlJ1w7YAorICAgIFJlbW92ZS1JdGVtIC1Gb3JjZSAtUmVjdXJzZSBDOlxCdWlsZFRvb2xzXENvbW1vbjdcSURFXENvbW1vbkV4dGVuc2lvbnNcTWljcm9zb2Z0XFRleHRNYXRlXFN0YXJ0ZXJraXRcRXh0ZW5zaW9ucztgCisgICAgUmVtb3ZlLUl0ZW0gLUZvcmNlIC1SZWN1cnNlIEM6XEJ1aWxkVG9vbHNcVkNcVG9vbHNcTVNWQ1wxNC4xNS4yNjcyNlxhdGxtZmM7YAorICAgIFJlbW92ZS1JdGVtIC1Gb3JjZSAtUmVjdXJzZSBDOlxCdWlsZFRvb2xzXFZDXFRvb2xzXE1TVkNcMTQuMTUuMjY3MjZcbGliXHNwZWN0cmU7YAorICAgIFJlbW92ZS1JdGVtIEM6XFRFTVBcdnNfYnVpbGR0b29scy5leGUKKworRU5WIFZTSU5TVEFMTERJUiAiQzpcQnVpbGRUb29scyIKK0VOViBWU19JTlNUQUxMX0RJUiAiQzpcQnVpbGRUb29scyIKK0VOViBNU1ZDX1RPT0xTX1ZFUlNJT04gIjE0LjE2LjI3MDIzIgorRU5WIE1TVkNfUkVESVNUX1ZFUlNJT04gIjE0LjE2LjI3MDEyIgorCisjIFRPRE86IHJlbW92ZSB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIHNldHRpbmcsIHNpbmNlIGl0IGlzIG9ubHkgbmVlZGVkIGZvcgorIyBtYW51YWxseSBkZXBsb3lpbmcgZGVidWcgdmVyc2lvbnMgb2YgRExMcy4gVGhpcyBjYW4gYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiBhCisjIGRlZGljYXRlZCBkZXBsb3ltZW50IHRocm91Z2ggZ3lwL25pbmphLgorRU5WIE1TX1dJTl9WRVJTSU9OPSIxMC4wLjE3NzYzLjAiCmRpZmYgLS1naXQgYS9kb2NrZXIvd2luZG93cy93aW4zMi9Eb2NrZXJmaWxlIGIvZG9ja2VyL3dpbmRvd3Mvd2luMzIvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTkzYjllCi0tLSAvZGV2L251bGwKKysrIGIvZG9ja2VyL3dpbmRvd3Mvd2luMzIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDI2IEBACisjIGVzY2FwZT1gCisKKyMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorRlJPTSBjb2JhbHQtYnVpbGQtd2luMzItYmFzZQorCitTSEVMTCBbInBvd2Vyc2hlbGwiLCAiLUV4ZWN1dGlvblBvbGljeSIsICJVbnJlc3RyaWN0ZWQiLCAiLUNvbW1hbmQiLCBgCisgICAgICAgIiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCc7ICRQcm9ncmVzc1ByZWZlcmVuY2UgPSAnU2lsZW50bHlDb250aW51ZSc7Il0KKworV09SS0RJUiAiQzpcY29kZSIKKworQ01EIHB5dGhvbjMgY29iYWx0L2J1aWxkL2duLnB5IC1wICRlbnY6UExBVEZPUk0gLWMgJGVudjpDT05GSUcgb3V0LyR7ZW52OlBMQVRGT1JNfV8ke2VudjpDT05GSUd9O2AKKyAgICBpZiAoJD8pIHtgCisgICAgICBuaW5qYSAkZW52Ok5JTkpBX0ZMQUdTIC1DIG91dC8ke2VudjpQTEFURk9STX1fJGVudjpDT05GSUcgJGVudjpUQVJHRVQ7YAorICAgIH0KZGlmZiAtLWdpdCBhL2RvY2tlci93aW5kb3dzL3dpbjMyL3VuaXR0ZXN0L0RvY2tlcmZpbGUgYi9kb2NrZXIvd2luZG93cy93aW4zMi91bml0dGVzdC9Eb2NrZXJmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MGM1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NrZXIvd2luZG93cy93aW4zMi91bml0dGVzdC9Eb2NrZXJmaWxlCkBAIC0wLDAgKzEsNDAgQEAKKyMgZXNjYXBlPWAKKworIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitGUk9NIG1jci5taWNyb3NvZnQuY29tL3dpbmRvd3M6MTgwOQorCisjIFJlc3RvcmUgdGhlIGRlZmF1bHQgV2luZG93cyBzaGVsbCBmb3IgY29ycmVjdCBiYXRjaCBwcm9jZXNzaW5nLgorU0hFTEwgWyJjbWQiLCAiL1MiLCAiL0MiXQorCitSVU4gcG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IHVucmVzdHJpY3RlZCAtQ29tbWFuZCBgCisgICAgaWV4ICgoTmV3LU9iamVjdCBTeXN0ZW0uTmV0LldlYkNsaWVudCkuRG93bmxvYWRTdHJpbmcoJ2h0dHBzOi8vY2hvY29sYXRleS5vcmcvaW5zdGFsbC5wczEnKSkKKworIyBOZWVkZWQgdG8gZXh0cmFjdCB0aGUgYXBwIGxhdW5jaGVyIHNjcmlwdHMgZm9yIHJ1bm5pbmcgdGVzdHMuCitSVU4gY2hvY28gaW5zdGFsbCAtZiAteSB1bnppcAorCisjIEluc3RhbGwgcHl0aG9uMgorUlVOIGNob2NvIGluc3RhbGwgLWYgLXkgcHl0aG9uMiAtLXBhcmFtcyAnL0luc3RhbGxEaXI6QzpccHl0aG9uMicKK1JVTiBwaXAgaW5zdGFsbCBweXBpd2luMzIKK1JVTiBzZXR4IHBhdGggIiVwYXRoJTtDOlxQeXRob24yIgorUlVOIHNldHggcHl0aG9uMiAiQzpcUHl0aG9uMlxweXRob24uZXhlIgorQUREIC4vcHl0aG9uMi5iYXQgL3B5dGhvbjIvcHl0aG9uMi5iYXQKKworIyBJbnN0YWxsIHZpc3VhbCBDIHJ1bnRpbWUgcmVkaXN0cmlidXRhYmxlcworQUREIGh0dHBzOi8vYWthLm1zL3ZzLzE2L3JlbGVhc2UvdmNfcmVkaXN0Lng2NC5leGUgQzovdmNyZWRpc3RfeDY0LmV4ZQorUlVOIEM6L3ZjcmVkaXN0X3g2NC5leGUgL2luc3RhbGwgL3Bhc3NpdmUgL25vcmVzdGFydCAvbG9nIG91dC50eHQKKworQUREIC4vdW5pdHRlc3QuY21kIC91bml0dGVzdC5jbWQKKworQ01EIFsgIi91bml0dGVzdC5jbWQiLCAiJHtQTEFURk9STX0iLCAiJHtDT05GSUd9IiwgIiR7VEVTVH0iXQpkaWZmIC0tZ2l0IGEvZG9ja2VyL3dpbmRvd3Mvd2luMzIvdW5pdHRlc3QvcHl0aG9uMi5iYXQgYi9kb2NrZXIvd2luZG93cy93aW4zMi91bml0dGVzdC9weXRob24yLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTIxMDFlCi0tLSAvZGV2L251bGwKKysrIGIvZG9ja2VyL3dpbmRvd3Mvd2luMzIvdW5pdHRlc3QvcHl0aG9uMi5iYXQKQEAgLTAsMCArMSwzIEBACitAZWNobyBvZmYNCitzZXRsb2NhbA0KK2M6XHB5dGhvbjJccHl0aG9uLmV4ZSAlKg0KZGlmZiAtLWdpdCBhL2RvY2tlci93aW5kb3dzL3dpbjMyL3VuaXR0ZXN0L3VuaXR0ZXN0LmNtZCBiL2RvY2tlci93aW5kb3dzL3dpbjMyL3VuaXR0ZXN0L3VuaXR0ZXN0LmNtZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmIxNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9ja2VyL3dpbmRvd3Mvd2luMzIvdW5pdHRlc3QvdW5pdHRlc3QuY21kCkBAIC0wLDAgKzEsNyBAQAoraWYgIiUxIiA9PSAiIiBzZXQgIlBMQVRGT1JNPXdpbi13aW4zMiIKK2lmICIlMiIgPT0gIiIgc2V0ICJDT05GSUc9ZGV2ZWwiCitpZiAiJTMiID09ICIiIHNldCAiVEVTVD1lenRpbWVfdGVzdCIKKworY2QgYzpcY29kZVxvdXRcJVBMQVRGT1JNJV8lQ09ORklHJVwKK3VuemlwIGFwcF9sYXVuY2hlci56aXAgLWQgYzpcYXBwX2xhdW5jaGVyX291dFwKKyVweXRob24yJSBjOlxhcHBfbGF1bmNoZXJfb3V0XHN0YXJib2FyZFx0b29sc1x0ZXN0aW5nXHRlc3RfcnVubmVyLnB5IC0tcnVuIC0tcGxhdGZvcm0gJVBMQVRGT1JNJSAtLWNvbmZpZyAlQ09ORklHJSAtbyBjOlxjb2RlXG91dFwlUExBVEZPUk0lXyVDT05GSUclCmRpZmYgLS1naXQgYS9nbGltcC8uZ2l0YXR0cmlidXRlcyBiL2dsaW1wLy5naXRhdHRyaWJ1dGVzCmluZGV4IDBmNzA2MDcuLjEwZGJlMTIgMTAwNjQ0Ci0tLSBhL2dsaW1wLy5naXRhdHRyaWJ1dGVzCisrKyBiL2dsaW1wLy5naXRhdHRyaWJ1dGVzCkBAIC0xOSw3ICsxOSw2IEBACiAqLnkgICAgICAgICAgICAgICAgICAgICB0ZXh0IGVvbD1sZgogLmNsYW5nLWZvcm1hdCAgICAgICAgICAgdGV4dCBlb2w9bGYKIGNvZGVyZXZpZXcuc2V0dGluZ3MgICAgIHRleHQgZW9sPWxmCi1neXBfY29iYWx0ICAgICAgICAgICAgICB0ZXh0IGVvbD1sZgogCiAjIEltYWdlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBiaW5hcnkgZmlsZXMuCiAqLmV4ZSAgICAgICAgICAgICAgICAgICBiaW5hcnkKZGlmZiAtLWdpdCBhL2dsaW1wL0JVSUxELmduIGIvZ2xpbXAvQlVJTEQuZ24KaW5kZXggY2Q3NjcwZi4uZDVjM2E1NyAxMDA2NDQKLS0tIGEvZ2xpbXAvQlVJTEQuZ24KKysrIGIvZ2xpbXAvQlVJTEQuZ24KQEAgLTIwLDggKzIwLDggQEAKICAgICAjIHRoZSBwcmVwcm9jZXNzb3IgdG8gYXNzZW1ibGUgYW4gaW5jbHVkZSBmaWxlIHBhdGgsIHNvIHdlIGhhdmUgdG8gZG8KICAgICAjIHRoZSBjb25jYXRlbmF0aW9uIGhlcmUgaW4gR1lQLgogICAgICMgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTYwMTc4Ni9jLXByZXByb2Nlc3Nvci1idWlsZGluZy1hLXBhdGgtc3RyaW5nCi0gICAgIkdMSU1QX0VHTFBMQVRGT1JNX0lOQ0xVREU9XCIuLi8uLi8kdGFyZ2V0X3BsYXRmb3JtL2VnbHBsYXRmb3JtX3B1YmxpYy5oXCIiLAotICAgICJHTElNUF9LSFJQTEFURk9STV9JTkNMVURFPVwiLi4vLi4vJHRhcmdldF9wbGF0Zm9ybS9raHJwbGF0Zm9ybV9wdWJsaWMuaFwiIiwKKyAgICAiR0xJTVBfRUdMUExBVEZPUk1fSU5DTFVERT1cIi4uLy4uLy4uL3N0YXJib2FyZC8kdGFyZ2V0X3BsYXRmb3JtL2dsaW1wL2VnbHBsYXRmb3JtX3B1YmxpYy5oXCIiLAorICAgICJHTElNUF9LSFJQTEFURk9STV9JTkNMVURFPVwiLi4vLi4vLi4vc3RhcmJvYXJkLyR0YXJnZXRfcGxhdGZvcm0vZ2xpbXAva2hycGxhdGZvcm1fcHVibGljLmhcIiIsCiAKICAgICAjIFVuY29tbWVudCB0aGUgZGVmaW5lIGJlbG93IHRvIGVuYWJsZSBhbmQgdXNlIHRyYWNpbmcgaW5zaWRlIGdsaW1wLgogICAgICMgIkVOQUJMRV9HTElNUF9UUkFDSU5HIiwKQEAgLTMwLDEyICszMCwxMiBAQAogCiBncm91cCgiZ2xpbXAiKSB7CiAgIHB1YmxpY19jb25maWdzID0gWyAiOmdsaW1wX2NvbmZpZyIgXQotICBkZXBzID0gWyAiLy9nbGltcC8ke3RhcmdldF9wbGF0Zm9ybX06Z2xpbXBfcGxhdGZvcm0iIF0KKyAgZGVwcyA9IFsgIi8vc3RhcmJvYXJkLyR7dGFyZ2V0X3BsYXRmb3JtfS9nbGltcDpnbGltcF9wbGF0Zm9ybSIgXQogfQogCiBjb25maWcoImdsaW1wX2NvbW1vbl9zb3VyY2VzX3B1YmxpY19jb25maWciKSB7CiAgIGNvbmZpZ3MgPSBbICI6Z2xpbXBfY29uZmlnIiBdCi0gIGluY2x1ZGVfZGlycyA9IFsgIiR0YXJnZXRfcGxhdGZvcm0vcGxhdGZvcm0iIF0KKyAgaW5jbHVkZV9kaXJzID0gWyAiLy9zdGFyYm9hcmQvJHRhcmdldF9wbGF0Zm9ybS9nbGltcC9wbGF0Zm9ybSIgXQogfQogCiBzb3VyY2Vfc2V0KCJnbGltcF9jb21tb25fc291cmNlcyIpIHsKZGlmZiAtLWdpdCBhL2dsaW1wL2VnbC9kaXNwbGF5LmNjIGIvZ2xpbXAvZWdsL2Rpc3BsYXkuY2MKaW5kZXggZjMzOGI1MS4uMzc0N2Q5YyAxMDA2NDQKLS0tIGEvZ2xpbXAvZWdsL2Rpc3BsYXkuY2MKKysrIGIvZ2xpbXAvZWdsL2Rpc3BsYXkuY2MKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTIyLDEwICsyMiw0NiBAQAogI2luY2x1ZGUgImdsaW1wL2VnbC9jb25maWcuaCIKICNpbmNsdWRlICJnbGltcC9lZ2wvZXJyb3IuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9ldmVudC5oIgogCiBuYW1lc3BhY2UgZ2xpbXAgewogbmFtZXNwYWNlIGVnbCB7CiAKKy8vIHNjZTo6R25tOjpzdWJtaXREb25lKCkgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIG9uY2UgZXZlcnkgNSBzZWNzOgorLy8gaHR0cHM6Ly9wczQuc2llZGV2Lm5ldC9yZXNvdXJjZXMvZG9jdW1lbnRzL1NESy85LjUwMC9Qcm9ncmFtbWluZy1TdGFydHVwX0d1aWRlLzAwMDYuaHRtbCNfX2RvY3VtZW50X3RvY18wMDAwMDAzNAorLy8gc2NlOjpHbm06OnN1Ym1pdERvbmUoKSBnZXRzIGNhbGxlZCByZWd1bGFybHkgaW4gdGhlIHJhc3Rlcml6ZXIgdGhyZWFkIGFuZAorLy8gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCB3aGVuIHRoZSBhcHAgaXMgaW4gc3VzcGVuZGVkIHN0YXRlLgorLy8ga1N1Ym1pdERvbmVEZWxheSBpcyBzZXQgdG8gMS82MHNlYyAoc2FtZSBzY2hlZHVsaW5nIGZyZXF1ZW5jeSBhcworLy8gdGhlIGFwcCBpbiBmb3JlZ3JvdW5kKQorY29uc3QgU2JUaW1lIGtTdWJtaXREb25lRGVsYXkgPSBrU2JUaW1lU2Vjb25kIC8gNjA7CisKKy8vIERvbid0IHJlcGVhdCB0aGUgc3VibWl0RG9uZSBjYWxsYmFjayBkdXJpbmcgc3VzcGVuc2lvbgorLy8gdW50aWwgc3BlY2lmaWVkIGJ5IGVnbFRlcm1pbmF0ZS4KK2Jvb2wgRGlzcGxheTo6cmVwZWF0X3N1Ym1pdF9kb25lX2R1cmluZ19zdXNwZW5kID0gZmFsc2U7CisKK25hbWVzcGFjZSB7Cit2b2lkIFNjaGVkdWxlU3VibWl0RG9uZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpIHsKKyAgaWYgKERpc3BsYXk6OnJlcGVhdF9zdWJtaXRfZG9uZV9kdXJpbmdfc3VzcGVuZCkgeworICAgIFNCX0RDSEVDSyh0cnVlKSA8PCAiU3VzcGVuZCBtb2RlIGlzIGRpc2FibGVkLiBTY2hlZHVsZVN1Ym1pdERvbmVDYWxsYmFjayAiCisgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGRuJ3QgYmUgdHJpZ2dlcmVkLiI7CisgICAgRGlzcGxheUltcGw6OkNhbGxTdWJtaXREb25lKCk7CisgICAgRGlzcGxheTo6UmVwZWF0U3VibWl0RG9uZUR1cmluZ1N1c3BlbmQoKTsKKyAgfQorfQorfSAgLy8gbmFtZXNwYWNlCisKK3ZvaWQgRGlzcGxheTo6UmVwZWF0U3VibWl0RG9uZUR1cmluZ1N1c3BlbmQoKSB7CisgIHN0YXRpYyBTYkV2ZW50SWQgc3VibWl0X2RvbmVfcmVwZWF0aW5nX2NhbGxiYWNrX2V2ZW50ID0ga1NiRXZlbnRJZEludmFsaWQ7CisgIGlmIChEaXNwbGF5OjpyZXBlYXRfc3VibWl0X2RvbmVfZHVyaW5nX3N1c3BlbmQpIHsKKyAgICBzdWJtaXRfZG9uZV9yZXBlYXRpbmdfY2FsbGJhY2tfZXZlbnQgPQorICAgICAgICBTYkV2ZW50U2NoZWR1bGUoJlNjaGVkdWxlU3VibWl0RG9uZUNhbGxiYWNrLCBOVUxMLCBrU3VibWl0RG9uZURlbGF5KTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoc3VibWl0X2RvbmVfcmVwZWF0aW5nX2NhbGxiYWNrX2V2ZW50ICE9IGtTYkV2ZW50SWRJbnZhbGlkKSB7CisgICAgICBTYkV2ZW50Q2FuY2VsKHN1Ym1pdF9kb25lX3JlcGVhdGluZ19jYWxsYmFja19ldmVudCk7CisgICAgfQorICB9Cit9CisKIERpc3BsYXk6OkRpc3BsYXkobmI6OnNjb3BlZF9wdHI8RGlzcGxheUltcGw+IGRpc3BsYXlfaW1wbCkKICAgICA6IGltcGxfKGRpc3BsYXlfaW1wbC5QYXNzKCkpIHt9CiAKZGlmZiAtLWdpdCBhL2dsaW1wL2VnbC9kaXNwbGF5LmggYi9nbGltcC9lZ2wvZGlzcGxheS5oCmluZGV4IDhmYzQzMmQuLmI5MzMzZDYgMTAwNjQ0Ci0tLSBhL2dsaW1wL2VnbC9kaXNwbGF5LmgKKysrIGIvZ2xpbXAvZWdsL2Rpc3BsYXkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMzUsNiArMzUsOSBAQAogLy8gdXBvbiBjb25zdHJ1Y3Rpb24uCiBjbGFzcyBEaXNwbGF5IHsKICBwdWJsaWM6CisgIHN0YXRpYyB2b2lkIFJlcGVhdFN1Ym1pdERvbmVEdXJpbmdTdXNwZW5kKCk7CisgIHN0YXRpYyBib29sIHJlcGVhdF9zdWJtaXRfZG9uZV9kdXJpbmdfc3VzcGVuZDsKKwogICAvLyBJbiBvcmRlciB0byBjcmVhdGUgYSBkaXNwbGF5LCBpdCBtdXN0IGhhdmUgYSBwbGF0Zm9ybS1zcGVjaWZpYwogICAvLyBpbXBsZW1lbnRhdGlvbiBpbmplY3RlZCBpbnRvIGl0LCB3aGVyZSBtYW55IG1ldGhvZHMgd2lsbCBmb3J3YXJkIHRvLgogICBleHBsaWNpdCBEaXNwbGF5KG5iOjpzY29wZWRfcHRyPERpc3BsYXlJbXBsPiBkaXNwbGF5X2ltcGwpOwpkaWZmIC0tZ2l0IGEvZ2xpbXAvZWdsL2Rpc3BsYXlfaW1wbC5oIGIvZ2xpbXAvZWdsL2Rpc3BsYXlfaW1wbC5oCmluZGV4IGQ5OGVmYjkuLmNhZjNjM2EgMTAwNjQ0Ci0tLSBhL2dsaW1wL2VnbC9kaXNwbGF5X2ltcGwuaAorKysgYi9nbGltcC9lZ2wvZGlzcGxheV9pbXBsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTUzLDYgKzUzLDkgQEAKICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBEaXNwbGF5SW1wbCBvYmplY3QuCiAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggaW1wbGVtZW50aW5nIHBsYXRmb3JtLgogICBzdGF0aWMgbmI6OnNjb3BlZF9wdHI8RGlzcGxheUltcGw+IENyZWF0ZShFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5X2lkKTsKKyAgLy8gVGhpcyBtZXRob2QgaXMgZGVjbGFyZWQgaGVyZSBhbmQgZGVmaW5lZCBpbiBwczQvZWdsL2Rpc3BsYXlfaW1wbF9wczQuY2MKKyAgLy8gYW5kIHBzNS9lZ2wvZGlzcGxheV9pbXBsX3BzNS5jYyByZXNwZWN0aXZlbHkuCisgIHN0YXRpYyB2b2lkIENhbGxTdWJtaXREb25lKCk7CiAKICAgLy8gUmV0dXJucyB0aGUgRUdMIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9ucywgaWYgdGhleSBhcmUgbm90IE5VTEwuCiAgIC8vIENhbGxlZCBieSBlZ2xJbml0aWFsaXplKCk6CmRpZmYgLS1naXQgYS9nbGltcC9lbnRyeV9wb2ludHMvZWdsLmNjIGIvZ2xpbXAvZW50cnlfcG9pbnRzL2VnbC5jYwppbmRleCA0YjZkNjQ5Li43MWFkOGJlIDEwMDY0NAotLS0gYS9nbGltcC9lbnRyeV9wb2ludHMvZWdsLmNjCisrKyBiL2dsaW1wL2VudHJ5X3BvaW50cy9lZ2wuY2MKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE5Nyw2ICsxOTcsOCBAQAogICBkaXNwbGF5LT5HZXRWZXJzaW9uSW5mbyhtYWpvciwgbWlub3IpOwogCiAgIGVnbDo6U2V0RXJyb3IoRUdMX1NVQ0NFU1MpOworICBlZ2w6OkRpc3BsYXk6OnJlcGVhdF9zdWJtaXRfZG9uZV9kdXJpbmdfc3VzcGVuZCA9IGZhbHNlOworICBlZ2w6OkRpc3BsYXk6OlJlcGVhdFN1Ym1pdERvbmVEdXJpbmdTdXNwZW5kKCk7CiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNjQsNiArMjY2LDggQEAKICAgZWdsOjpEaXNwbGF5UmVnaXN0cnk6OlRlcm1pbmF0ZURpc3BsYXkoZHB5KTsKIAogICBlZ2w6OlNldEVycm9yKEVHTF9TVUNDRVNTKTsKKyAgZWdsOjpEaXNwbGF5OjpyZXBlYXRfc3VibWl0X2RvbmVfZHVyaW5nX3N1c3BlbmQgPSB0cnVlOworICBlZ2w6OkRpc3BsYXk6OlJlcGVhdFN1Ym1pdERvbmVEdXJpbmdTdXNwZW5kKCk7CiAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9nbGltcC9nbGltcC5neXAgYi9nbGltcC9nbGltcC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmY2YyMTQuLjAwMDAwMDAKLS0tIGEvZ2xpbXAvZ2xpbXAuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbGltcCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgIyBGb3J3YXJkLWRlcGVuZCBvbiB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgZ2xpbXAgaW1wbGVtZW50YXRpb24uCi0gICAgICAgICc8KERFUFRIKS9nbGltcC88KHNiX3RhcmdldF9wbGF0Zm9ybSkvZ2xpbXBfcGxhdGZvcm0uZ3lwOmdsaW1wX3BsYXRmb3JtJywKLSAgICAgIF0sCi0KLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICAgJ2dsaW1wX3NldHRpbmdzLmd5cGknLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvZ2xpbXAvZ2xpbXBfY29tbW9uLmd5cGkgYi9nbGltcC9nbGltcF9jb21tb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk4M2I2OC4uMDAwMDAwMAotLS0gYS9nbGltcC9nbGltcF9jb21tb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnc291cmNlcyc6IFsKLSAgICAnZWdsL2F0dHJpYl9tYXAuY2MnLAotICAgICdlZ2wvYXR0cmliX21hcC5oJywKLSAgICAnZWdsL2NvbmZpZy5jYycsCi0gICAgJ2VnbC9jb25maWcuaCcsCi0gICAgJ2VnbC9kaXNwbGF5LmNjJywKLSAgICAnZWdsL2Rpc3BsYXkuaCcsCi0gICAgJ2VnbC9kaXNwbGF5X2ltcGwuaCcsCi0gICAgJ2VnbC9kaXNwbGF5X3JlZ2lzdHJ5LmNjJywKLSAgICAnZWdsL2Rpc3BsYXlfcmVnaXN0cnkuaCcsCi0gICAgJ2VnbC9lcnJvci5jYycsCi0gICAgJ2VnbC9lcnJvci5oJywKLSAgICAnZWdsL2dldF9wcm9jX2FkZHJlc3NfaW1wbC5oJywKLSAgICAnZWdsL3Njb3BlZF9lZ2xfbG9jay5jYycsCi0gICAgJ2VnbC9zY29wZWRfZWdsX2xvY2suaCcsCi0gICAgJ2VnbC9zdXJmYWNlLmNjJywKLSAgICAnZWdsL3N1cmZhY2UuaCcsCi0gICAgJ2VnbC9zdXJmYWNlX2ltcGwuaCcsCi0gICAgJ2VudHJ5X3BvaW50cy9lZ2wuY2MnLAotICAgICdlbnRyeV9wb2ludHMvZWdsX2V4dC5jYycsCi0gICAgJ2VudHJ5X3BvaW50cy9nbGVzXzJfMC5jYycsCi0gICAgJ2VudHJ5X3BvaW50cy9nbGVzXzJfMF9leHQuY2MnLAotICAgICdlbnRyeV9wb2ludHMvZ2xlc18zXzAuY2MnLAotICAgICdnbGVzL2JsZW5kX3N0YXRlLmgnLAotICAgICdnbGVzL2J1ZmZlci5jYycsCi0gICAgJ2dsZXMvYnVmZmVyLmgnLAotICAgICdnbGVzL2J1ZmZlcl9pbXBsLmgnLAotICAgICdnbGVzL2NvbnRleHQuY2MnLAotICAgICdnbGVzL2NvbnRleHQuaCcsCi0gICAgJ2dsZXMvY29udGV4dF9pbXBsLmgnLAotICAgICdnbGVzL2NvbnZlcnRfcGl4ZWxfZGF0YS5jYycsCi0gICAgJ2dsZXMvY29udmVydF9waXhlbF9kYXRhLmgnLAotICAgICdnbGVzL2N1bGxfZmFjZV9zdGF0ZS5oJywKLSAgICAnZ2xlcy9kcmF3X21vZGUuaCcsCi0gICAgJ2dsZXMvZHJhd19zdGF0ZS5jYycsCi0gICAgJ2dsZXMvZHJhd19zdGF0ZS5oJywKLSAgICAnZ2xlcy9mcmFtZWJ1ZmZlci5jYycsCi0gICAgJ2dsZXMvZnJhbWVidWZmZXIuaCcsCi0gICAgJ2dsZXMvaW5kZXhfZGF0YV90eXBlLmgnLAotICAgICdnbGVzL3BpeGVsX2Zvcm1hdC5jYycsCi0gICAgJ2dsZXMvcGl4ZWxfZm9ybWF0LmgnLAotICAgICdnbGVzL3Byb2dyYW0uY2MnLAotICAgICdnbGVzL3Byb2dyYW0uaCcsCi0gICAgJ2dsZXMvcHJvZ3JhbV9pbXBsLmgnLAotICAgICdnbGVzL3JlZl9jb3VudGVkX3Jlc291cmNlX21hcC5oJywKLSAgICAnZ2xlcy9yZW5kZXJidWZmZXIuY2MnLAotICAgICdnbGVzL3JlbmRlcmJ1ZmZlci5oJywKLSAgICAnZ2xlcy9yZXNvdXJjZV9tYW5hZ2VyLmNjJywKLSAgICAnZ2xlcy9yZXNvdXJjZV9tYW5hZ2VyLmgnLAotICAgICdnbGVzL3NhbXBsZXIuaCcsCi0gICAgJ2dsZXMvc2hhZGVyLmNjJywKLSAgICAnZ2xlcy9zaGFkZXIuaCcsCi0gICAgJ2dsZXMvc2hhZGVyX2ltcGwuaCcsCi0gICAgJ2dsZXMvdGV4dHVyZS5jYycsCi0gICAgJ2dsZXMvdGV4dHVyZS5oJywKLSAgICAnZ2xlcy90ZXh0dXJlX2ltcGwuaCcsCi0gICAgJ2dsZXMvdW5pZm9ybV9pbmZvLmgnLAotICAgICdnbGVzL3VuaXF1ZV9pZF9nZW5lcmF0b3IuY2MnLAotICAgICdnbGVzL3VuaXF1ZV9pZF9nZW5lcmF0b3IuaCcsCi0gICAgJ2dsZXMvdmVydGV4X2F0dHJpYnV0ZS5oJywKLSAgICAnc2hhZGVycy9nbHNsX3NoYWRlcl9tYXBfaGVscGVycy5oJywKLSAgICAnc2hhZGVycy9oYXNoX2dsc2xfc291cmNlLmNjJywKLSAgICAnc2hhZGVycy9oYXNoX2dsc2xfc291cmNlLmgnLAotICBdLAotCi0gICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgJzwoREVQVEgpL2dsaW1wL3RyYWNpbmcvdHJhY2luZy5neXA6dHJhY2luZycsCi0gICAgJzwoREVQVEgpL25iL25iLmd5cDpuYicsCi0gIF0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICdnbGltcF9zZXR0aW5ncy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL2dsaW1wL2dsaW1wX3NldHRpbmdzLmd5cGkgYi9nbGltcC9nbGltcF9zZXR0aW5ncy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmVhNjU5Li4wMDAwMDAwCi0tLSBhL2dsaW1wL2dsaW1wX3NldHRpbmdzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGluIHRoZSBkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzIGZyb20KLSMgZ2xpbXAuZ3lwIGFuZCBpbiBnbGltcF9jb21tb24uZ3lwaS4KLXsKLSAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAnPChERVBUSCkvZ2xpbXAvaW5jbHVkZScsCi0gIF0sCi0gICdkZWZpbmVzJzogWwotICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55IHdheSB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yIHRvIGRvCi0gICAgIyBzdHJpbmcgY29uY2F0ZW5hdGlvbiB3aXRoIHRoZSAvIGNoYXJhY3Rlci4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nCi0gICAgIyB0aGUgcHJlcHJvY2Vzc29yIHRvIGFzc2VtYmxlIGFuIGluY2x1ZGUgZmlsZSBwYXRoLCBzbyB3ZSBoYXZlIHRvIGRvCi0gICAgIyB0aGUgY29uY2F0ZW5hdGlvbiBoZXJlIGluIEdZUC4KLSAgICAjIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjk2MDE3ODYvYy1wcmVwcm9jZXNzb3ItYnVpbGRpbmctYS1wYXRoLXN0cmluZwotICAgICdHTElNUF9FR0xQTEFURk9STV9JTkNMVURFPSIuLi8uLi88KHNiX3RhcmdldF9wbGF0Zm9ybSkvZWdscGxhdGZvcm1fcHVibGljLmgiJywKLSAgICAnR0xJTVBfS0hSUExBVEZPUk1fSU5DTFVERT0iLi4vLi4vPChzYl90YXJnZXRfcGxhdGZvcm0pL2tocnBsYXRmb3JtX3B1YmxpYy5oIicsCi0gICAgIyBVbmNvbW1lbnQgdGhlIGRlZmluZSBiZWxvdyB0byBlbmFibGUgYW5kIHVzZSB0cmFjaW5nIGluc2lkZSBnbGltcC4KLSAgICAjICdFTkFCTEVfR0xJTVBfVFJBQ0lORycsCi1dLAotfQpkaWZmIC0tZ2l0IGEvZ2xpbXAvc2hhZGVycy9nZW5lcmF0ZV9nbHNsX3NoYWRlcl9tYXAucHkgYi9nbGltcC9zaGFkZXJzL2dlbmVyYXRlX2dsc2xfc2hhZGVyX21hcC5weQppbmRleCAyZjRlZmQxLi40ZDFjNmUyIDEwMDY0NAotLS0gYS9nbGltcC9zaGFkZXJzL2dlbmVyYXRlX2dsc2xfc2hhZGVyX21hcC5weQorKysgYi9nbGltcC9zaGFkZXJzL2dlbmVyYXRlX2dsc2xfc2hhZGVyX21hcC5weQpAQCAtNjMsMTQgKzYzLDE0IEBACiAgICAgIyByZXByZXNlbnRpbmcgdGhlIGRhdGEgaW4gdGhlIC5oIGZpbGUgYXJlIGxlc3MgdGhhbiA4MCBjaGFyYWN0ZXJzIGxvbmcuCiAgICAgbGVuZ3RoX29mX291dHB1dF9ieXRlX3N0cmluZyA9IDYKICAgICBtYXhfY2hhcmFjdGVyc19wZXJfbGluZSA9IDgwCi0gICAgY2h1bmtfc2l6ZSA9IG1heF9jaGFyYWN0ZXJzX3Blcl9saW5lIC8gbGVuZ3RoX29mX291dHB1dF9ieXRlX3N0cmluZworICAgIGNodW5rX3NpemUgPSBpbnQobWF4X2NoYXJhY3RlcnNfcGVyX2xpbmUgLyBsZW5ndGhfb2Zfb3V0cHV0X2J5dGVfc3RyaW5nKQogCiAgICAgIyBDb252ZXJ0IGVhY2ggYnl0ZSB0byBBU0NJSSBoZXhhZGVjaW1hbCBmb3JtIGFuZCBvdXRwdXQgdGhhdCB0byB0aGUgQysrCiAgICAgIyBoZWFkZXIgZmlsZSwgbGluZS1ieS1saW5lLgogICAgIGRhdGFfZGVmaW5pdGlvbl9zdHJpbmcgPSAne1xuJwogICAgIGZvciBvdXRwdXRfbGluZV9kYXRhIGluIENodW5rcyhmaWxlX2NvbnRlbnRzLCBjaHVua19zaXplKToKICAgICAgIGRhdGFfZGVmaW5pdGlvbl9zdHJpbmcgKz0gKAotICAgICAgICAgICcgJy5qb2luKFsnMHglMDJ4LCcgJSBvcmQoeSkgZm9yIHkgaW4gb3V0cHV0X2xpbmVfZGF0YV0pICsgJ1xuJykKKyAgICAgICAgICAnICcuam9pbihbJzB4ezA6MDJ4fSwnLmZvcm1hdCh5KSBmb3IgeSBpbiBvdXRwdXRfbGluZV9kYXRhXSkgKyAnXG4nKQogICAgIGRhdGFfZGVmaW5pdGlvbl9zdHJpbmcgKz0gJ307XG5cbicKICAgICByZXR1cm4gZGF0YV9kZWZpbml0aW9uX3N0cmluZwogCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgZ2VuZXJhdGVfbWFwX2Z1bmN0aW9uX3N0cmluZyA9ICgKICAgICAgICdpbmxpbmUgdm9pZCBHZW5lcmF0ZUdMU0xTaGFkZXJNYXAoR0xTTFNoYWRlckhhc2hNYXAqIG91dF9tYXApIHtcbicpCiAKLSAgZm9yIGssIHYgaW4gaGFzaF90b19zaGFkZXJfbWFwLml0ZXJpdGVtcygpOgorICBmb3IgaywgdiBpbiBoYXNoX3RvX3NoYWRlcl9tYXAuaXRlbXMoKToKICAgICBpbnB1dF9maWxlX3ZhcmlhYmxlX25hbWUgPSBHZXRCYXNlbmFtZSh2KQogICAgIGdlbmVyYXRlX21hcF9mdW5jdGlvbl9zdHJpbmcgKz0gKAogICAgICAgICAnICAoKm91dF9tYXApWyV1VV0gPSBTaGFkZXJEYXRhKCVzLCBzaXplb2YoJXMpKTtcbicgJQpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgICAnaW5saW5lIGNvbnN0IGNoYXIgKkdldFNoYWRlck5hbWUodWludDMyX3QgaGFzaF92YWx1ZSkge1xuJwogICAgICAgJyAgc3dpdGNoKGhhc2hfdmFsdWUpIHtcbicpCiAKLSAgZm9yIGssIHYgaW4gaGFzaF90b19zaGFkZXJfbWFwLml0ZXJpdGVtcygpOgorICBmb3IgaywgdiBpbiBoYXNoX3RvX3NoYWRlcl9tYXAuaXRlbXMoKToKICAgICBpbnB1dF9maWxlX3ZhcmlhYmxlX25hbWUgPSBHZXRCYXNlbmFtZSh2KQogICAgIGdldF9zaGFkZXJfbmFtZV9mdW5jdGlvbl9zdHJpbmcgKz0gKCcgICAgY2FzZSAldVU6IHJldHVybiBcIiVzXCI7XG4nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaywgaW5wdXRfZmlsZV92YXJpYWJsZV9uYW1lKSkKQEAgLTI4Niw3ICsyODYsNyBAQAogICAiIiIKICAgaGFzaF90b19nbHNsX21hcCA9IHt9ICAjIFVzZWQgZm9yIHJlcG9ydGluZyBoYXNoIG1hcCBjb2xsaXNpb25zLgogICBoYXNoX3NoYWRlcl9tYXAgPSB7fQotICBmb3IgaywgdiBpbiBnbHNsX3RvX3NoYWRlcl9tYXAuaXRlcml0ZW1zKCk6CisgIGZvciBrLCB2IGluIGdsc2xfdG9fc2hhZGVyX21hcC5pdGVtcygpOgogICAgIGhhc2hlZF9nbHNsID0gSGFzaEdMU0xTaGFkZXJGaWxlKGspCiAgICAgaWYgaGFzaGVkX2dsc2wgaW4gaGFzaF9zaGFkZXJfbWFwOgogICAgICAgcmFpc2UgRXhjZXB0aW9uKCdIYXNoIGNvbGxpc2lvbiBiZXR3ZWVuIEdMU0wgZmlsZXMgJyArIGsgKyAnIGFuZCAnICsKQEAgLTMwNiwxMiArMzA2LDE2IEBACiAgIHdpdGggb3BlbihpbnB1dF9maWxlc19maWxlbmFtZSkgYXMgaW5wdXRfZmlsZXNfZmlsZToKICAgICBmaWxlcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gaW5wdXRfZmlsZXNfZmlsZS5yZWFkbGluZXMoKV0KIAotICAjIFdlIGZpbHRlciBvdXQgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgYSBmdWxsIHBhdGggKHRoZSBjYXNlIGluIEdOKS4KLSAgcmV0dXJuIFtvcy5wYXRoLmpvaW4oaW5wdXRfZmlsZXNfZGlyLCB4KSBmb3IgeCBpbiBmaWxlcyBpZiAnLycgbm90IGluIHhdCisgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAjIFdlIGZpbHRlciBvdXQgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgYSBmdWxsIHBhdGggKHRoZSBjYXNlIGluIEdOKS4KKyAgICBpZiAnLycgaW4gZmlsZW5hbWU6CisgICAgICB5aWVsZCBmaWxlbmFtZQorICAgIGVsc2U6CisgICAgICB5aWVsZCBvcy5wYXRoLmpvaW4oaW5wdXRfZmlsZXNfZGlyLCBmaWxlbmFtZSkKIAogCiBkZWYgbWFpbihvdXRwdXRfcGF0aCwgaW5wdXRfZmlsZXNfZmlsZW5hbWUsIGlucHV0X2ZpbGVzX2Rpcik6Ci0gIGFsbF9zaGFkZXJzID0gR2V0QWxsU2hhZGVyRmlsZXMoaW5wdXRfZmlsZXNfZmlsZW5hbWUsIGlucHV0X2ZpbGVzX2RpcikKKyAgYWxsX3NoYWRlcnMgPSBsaXN0KEdldEFsbFNoYWRlckZpbGVzKGlucHV0X2ZpbGVzX2ZpbGVuYW1lLCBpbnB1dF9maWxlc19kaXIpKQogCiAgIGdsc2xfdG9fc2hhZGVyX21hcCA9IEFzc29jaWF0ZUdMU0xGaWxlc1dpdGhQbGF0Zm9ybUZpbGVzKGFsbF9zaGFkZXJzKQogCmRpZmYgLS1naXQgYS9nbGltcC90cmFjaW5nL3RyYWNpbmcuZ3lwIGIvZ2xpbXAvdHJhY2luZy90cmFjaW5nLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2MzViZC4uMDAwMDAwMAotLS0gYS9nbGltcC90cmFjaW5nL3RyYWNpbmcuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICMgV2hlbiBFTkFCTEVfR0xJTVBfVFJBQ0lORyBpcyBkZWZpbmVkIGluIGdsaW1wX3NldHRpbmdzLmd5cGksIHRoZSBtYW55Ci0gICMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zIHRoYXQgYXJlIGFubm90YXRlZCB3aXRoIEdMSU1QX1RSQUNFX0VWRU5UMCBjYWxscwotICAjIHdpbGwgYWN0aXZhdGUgYW5kIGFsbG93IHByb2ZpbGluZyBhbmQgZmxvdyB2aXN1YWxpemF0aW9uIHdpdGhpbiBnbGltcC4KLSAgIwotICAjIFdpdGggbm8gY29uZmlndXJhdGlvbiBieSB0aGUgY2xpZW50LCBub3RoaW5nIHdpbGwgaGFwcGVuLCBob3dldmVyIGlmIGEKLSAgIyBjbGllbnQgdGhhdCBpcyBhd2FyZSBpdCBpcyB1c2luZyBnbGltcCBjYWxscwotICAjIGdsaW1wOjpTZXRUcmFjZUV2ZW50SW1wbGVtZW50YXRpb24oKSwgaXQgY2FuIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3IgdGhhdAotICAjIHdpbGwgb2NjdXIgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWFjaCB0cmFjZSBjYWxsLiAgRm9yIGV4YW1wbGUsIGlmCi0gICMgQ2hyb21pdW0ncyBiYXNlIHRyYWNlX2V2ZW50IGxpYnJhcnkgaXMgYXZhaWxhYmxlIHRvIHRoYXQgY2xpZW50LCB0aGV5IG1heQotICAjIHdpc2ggdG8gY2FsbCBUUkFDRV9FVkVOVF9CRUdJTjAoKSBhbmQgVFJBQ0VfRVZFTlRfRU5EMCgpIGF0IHRoZSBiZWdpbm5pbmcKLSAgIyBhbmQgZW5kIG9mIHRyYWNlcy4KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotCi0gICAgICAndGFyZ2V0X25hbWUnOiAndHJhY2luZycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0KLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndHJhY2luZy5oJywKLSAgICAgICAgJ3RyYWNpbmcuY2MnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJy4uL2dsaW1wX3NldHRpbmdzLmd5cGknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvbmIvQlVJTEQuZ24gYi9uYi9CVUlMRC5nbgppbmRleCA2ZTljMDM2Li5iZGNjMGVmIDEwMDY0NAotLS0gYS9uYi9CVUlMRC5nbgorKysgYi9uYi9CVUlMRC5nbgpAQCAtMTA1LDcgKzEwNSwyNiBAQAogICAgICAgIi8vdGVzdGluZy9nbW9jazpnbW9jayIsCiAgICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgICBdCi0KLSAgICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiAgIH0KIH0KKwordGFyZ2V0KGd0ZXN0X3RhcmdldF90eXBlLCAicmV1c2VfYWxsb2NhdG9yX2JlbmNobWFyayIpIHsKKyAgdGVzdG9ubHkgPSB0cnVlCisgIHNvdXJjZXMgPSBbICJyZXVzZV9hbGxvY2F0b3JfYmVuY2htYXJrLmNjIiBdCisgIGRlcHMgPSBbCisgICAgIjpuYiIsCisgICAgIjpuYl9jb3B5X3Rlc3RfZGF0YSIsCisgICAgIi8vc3RhcmJvYXJkIiwKKyAgXQorfQorCitjb3B5KCJuYl9jb3B5X3Rlc3RfZGF0YSIpIHsKKyAgc291cmNlcyA9IFsKKyAgICAidGVzdGRhdGEvbWVtX2hpc3RvcnlfY29iYWx0LnR4dCIsCisgICAgInRlc3RkYXRhL21lbV9oaXN0b3J5X2dwdS50eHQiLAorICAgICJ0ZXN0ZGF0YS9tZW1faGlzdG9yeV9tYWluLnR4dCIsCisgIF0KKyAgb3V0cHV0cyA9IFsKKyAgICAiJHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIvdGVzdC9uYi97e3NvdXJjZV90YXJnZXRfcmVsYXRpdmV9fSIsCisgIF0KK30KZGlmZiAtLWdpdCBhL25iL25iLmd5cCBiL25iL25iLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YyNjZiMS4uMDAwMDAwMAotLS0gYS9uYi9uYi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ2hhc19uYl9wbGF0Zm9ybSc6ICc8IXB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9leGlzdHMgPChzYl90YXJnZXRfcGxhdGZvcm0pL25iX3BsYXRmb3JtLmd5cCknCi0gICAgfSwKLSAgICAnbmJfZGVwZW5kZW5jaWVzJzogW10sCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2hhc19uYl9wbGF0Zm9ybT09MScsIHsKLSAgICAgICAgJ25iX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvbmIvPChzYl90YXJnZXRfcGxhdGZvcm0pL25iX3BsYXRmb3JtLmd5cDpuYl9wbGF0Zm9ybScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2luY2x1ZGVzX3N0YXJib2FyZCc6IDEsCi0gICAgICB9LAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJzdGFyYm9hcmQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2FsbG9jYXRvci5jYycsCi0gICAgICAgICAgICAnYWxsb2NhdG9yLmgnLAotICAgICAgICAgICAgJ2FuYWx5dGljcy9tZW1vcnlfdHJhY2tlci5jYycsCi0gICAgICAgICAgICAnYW5hbHl0aWNzL21lbW9yeV90cmFja2VyLmgnLAotICAgICAgICAgICAgJ2FuYWx5dGljcy9tZW1vcnlfdHJhY2tlcl9pbXBsLmNjJywKLSAgICAgICAgICAgICdhbmFseXRpY3MvbWVtb3J5X3RyYWNrZXJfaW1wbC5oJywKLSAgICAgICAgICAgICdhbmFseXRpY3MvbWVtb3J5X3RyYWNrZXJfaGVscGVycy5jYycsCi0gICAgICAgICAgICAnYW5hbHl0aWNzL21lbW9yeV90cmFja2VyX2hlbHBlcnMuaCcsCi0gICAgICAgICAgICAnYXRvbWljLmgnLAotICAgICAgICAgICAgJ2JpdF9jYXN0LmgnLAotICAgICAgICAgICAgJ2JpZGlyZWN0aW9uYWxfZml0X3JldXNlX2FsbG9jYXRvci5oJywKLSAgICAgICAgICAgICdiaWRpcmVjdGlvbmFsX2ZpdF9yZXVzZV9hbGxvY2F0b3IuY2MnLAotICAgICAgICAgICAgJ2NvbmN1cnJlbnRfbWFwLmgnLAotICAgICAgICAgICAgJ2NvbmN1cnJlbnRfcHRyLmgnLAotICAgICAgICAgICAgJ2ZpcnN0X2ZpdF9yZXVzZV9hbGxvY2F0b3IuaCcsCi0gICAgICAgICAgICAnZmlyc3RfZml0X3JldXNlX2FsbG9jYXRvci5jYycsCi0gICAgICAgICAgICAnZml4ZWRfbm9fZnJlZV9hbGxvY2F0b3IuY2MnLAotICAgICAgICAgICAgJ2ZpeGVkX25vX2ZyZWVfYWxsb2NhdG9yLmgnLAotICAgICAgICAgICAgJ2hhc2guY2MnLAotICAgICAgICAgICAgJ2hhc2guaCcsCi0gICAgICAgICAgICAnbWVtb3J5X3Bvb2wuaCcsCi0gICAgICAgICAgICAnbWVtb3J5X3Njb3BlLmNjJywKLSAgICAgICAgICAgICdtZW1vcnlfc2NvcGUuaCcsCi0gICAgICAgICAgICAnbW92ZS5oJywKLSAgICAgICAgICAgICdtdWx0aXBhcnRfYWxsb2NhdG9yLmNjJywKLSAgICAgICAgICAgICdtdWx0aXBhcnRfYWxsb2NhdG9yLmgnLAotICAgICAgICAgICAgJ3BvaW50ZXJfYXJpdGhtZXRpYy5oJywKLSAgICAgICAgICAgICdyZWN0LmgnLAotICAgICAgICAgICAgJ3JlZl9jb3VudGVkLmNjJywKLSAgICAgICAgICAgICdyZWZfY291bnRlZC5oJywKLSAgICAgICAgICAgICdyZXVzZV9hbGxvY2F0b3JfYmFzZS5jYycsCi0gICAgICAgICAgICAncmV1c2VfYWxsb2NhdG9yX2Jhc2UuaCcsCi0gICAgICAgICAgICAncmV3aW5kYWJsZV92ZWN0b3IuaCcsCi0gICAgICAgICAgICAnc3RhcmJvYXJkX21lbW9yeV9hbGxvY2F0b3IuaCcsCi0gICAgICAgICAgICAnc2NvcGVkX3B0ci5oJywKLSAgICAgICAgICAgICdzaW1wbGVfdGhyZWFkLmNjJywKLSAgICAgICAgICAgICdzaW1wbGVfdGhyZWFkLmgnLAotICAgICAgICAgICAgJ3NpbXBsZV9wcm9maWxlci5jYycsCi0gICAgICAgICAgICAnc2ltcGxlX3Byb2ZpbGVyLmgnLAotICAgICAgICAgICAgJ3N0YXJib2FyZF9hbGlnbmVkX21lbW9yeV9kZWxldGVyLmgnLAotICAgICAgICAgICAgJ3N0ZF9hbGxvY2F0b3IuaCcsCi0gICAgICAgICAgICAnc3RyaW5nX2ludGVybmVyLmNjJywKLSAgICAgICAgICAgICdzdHJpbmdfaW50ZXJuZXIuaCcsCi0gICAgICAgICAgICAndGhyZWFkX2NvbGxpc2lvbl93YXJuZXIuY2MnLAotICAgICAgICAgICAgJ3RocmVhZF9jb2xsaXNpb25fd2FybmVyLmgnLAotICAgICAgICAgICAgJ3RocmVhZF9sb2NhbF9vYmplY3QuaCcsCi0gICAgICAgICAgICAndGhyZWFkX2xvY2FsX2Jvb2xlYW4uaCcsCi0gICAgICAgICAgICAndGhyZWFkX2xvY2FsX3BvaW50ZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgICAgICc8QChuYl9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLQotICBdLAotfQpkaWZmIC0tZ2l0IGEvbmIvbmJfdGVzdC5neXAgYi9uYi9uYl90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1YjkzNy4uMDAwMDAwMAotLS0gYS9uYi9uYl90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmJfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09InN0YXJib2FyZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYW5hbHl0aWNzL21lbW9yeV90cmFja2VyX2hlbHBlcnNfdGVzdC5jYycsCi0gICAgICAgICAgICAnYW5hbHl0aWNzL21lbW9yeV90cmFja2VyX2ltcGxfdGVzdC5jYycsCi0gICAgICAgICAgICAnYW5hbHl0aWNzL21lbW9yeV90cmFja2VyX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ2JpZGlyZWN0aW9uYWxfZml0X3JldXNlX2FsbG9jYXRvcl90ZXN0LmNjJywKLSAgICAgICAgICAgICdjb25jdXJyZW50X21hcF90ZXN0LmNjJywKLSAgICAgICAgICAgICdjb25jdXJyZW50X3B0cl90ZXN0LmNjJywKLSAgICAgICAgICAgICdmaXJzdF9maXRfcmV1c2VfYWxsb2NhdG9yX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpeGVkX25vX2ZyZWVfYWxsb2NhdG9yX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ21lbW9yeV9zY29wZV90ZXN0LmNjJywKLSAgICAgICAgICAgICdtdWx0aXBhcnRfYWxsb2NhdG9yX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ3Jld2luZGFibGVfdmVjdG9yX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ3J1bl9hbGxfdW5pdHRlc3RzLmNjJywKLSAgICAgICAgICAgICdzaW1wbGVfcHJvZmlsZXJfdGVzdC5jYycsCi0gICAgICAgICAgICAnc3RkX2FsbG9jYXRvcl90ZXN0LmNjJywKLSAgICAgICAgICAgICdzdHJpbmdfaW50ZXJuZXJfdGVzdC5jYycsCi0gICAgICAgICAgICAndGVzdF90aHJlYWQuaCcsCi0gICAgICAgICAgICAndGhyZWFkX2xvY2FsX29iamVjdF90ZXN0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvbmIvbmIuZ3lwOm5iJywKLSAgICAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0KLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmJfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbmJfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICduYl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZXVzZV9hbGxvY2F0b3JfYmVuY2htYXJrJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAncmV1c2VfYWxsb2NhdG9yX2JlbmNobWFyay5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL25iL25iLmd5cDpuYicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnbmJfY29weV90ZXN0X2RhdGEnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdyZXVzZV9hbGxvY2F0b3JfYmVuY2htYXJrX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdyZXVzZV9hbGxvY2F0b3JfYmVuY2htYXJrJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3JldXNlX2FsbG9jYXRvcl9iZW5jaG1hcmsnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25iX2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvbmIvdGVzdGRhdGEvJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ25iL3Rlc3RkYXRhJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJ10sCi0gICAgfSwKLQotICBdLAotfQpkaWZmIC0tZ2l0IGEvbmV0L0JVSUxELmduIGIvbmV0L0JVSUxELmduCmluZGV4IGQyN2NiMGIuLmM4YzM1ZjYgMTAwNjQ0Ci0tLSBhL25ldC9CVUlMRC5nbgorKysgYi9uZXQvQlVJTEQuZ24KQEAgLTIwLDcgKzIwLDcgQEAKIAogY29uZmlnKCJuZXRfcHVibGljX2RlZmluZXMiKSB7CiAgIGRlZmluZXMgPSBbCi0gICAgIkhUVFBfQ0FDSEVfRElTQUJMRURfRk9SX1NUQVJCT0FSRCIsCisgICAgIkhUVFBfQ0FDSEVfVEVTVElOR19ESVNBQkxFRCIsCiAgICAgIkVOQUJMRV9CVUlMVF9JTl9ETlMiLAogICAgICJRVUlDX1RSQUNFX0RJU0FCTEVEIiwKICAgICAiQ09CQUxUX1FVSUM0NiIsCkBAIC00MzMsMTMgKzQzMywxOSBAQAogICAgICMgImRpc2tfY2FjaGUvY2FjaGVfdXRpbC5oIiwKICAgICAjICJkaXNrX2NhY2hlL2NhY2hlX3V0aWxfc3RhcmJvYXJkLmNjIiwKICAgICAjICJkaXNrX2NhY2hlL2Rpc2tfY2FjaGUuY2MiLAotICAgICMgImRpc2tfY2FjaGUvZGlza19jYWNoZS5oIiwKKyAgICAiZGlza19jYWNoZS9kaXNrX2NhY2hlLmgiLAogICAgICMgImRpc2tfY2FjaGUvbWVtb3J5L21lbV9iYWNrZW5kX2ltcGwuY2MiLAogICAgICMgImRpc2tfY2FjaGUvbWVtb3J5L21lbV9iYWNrZW5kX2ltcGwuaCIsCiAgICAgIyAiZGlza19jYWNoZS9tZW1vcnkvbWVtX2VudHJ5X2ltcGwuY2MiLAogICAgICMgImRpc2tfY2FjaGUvbWVtb3J5L21lbV9lbnRyeV9pbXBsLmgiLAotICAgICMgImRpc2tfY2FjaGUvbmV0X2xvZ19wYXJhbWV0ZXJzLmNjIiwKLSAgICAjICJkaXNrX2NhY2hlL25ldF9sb2dfcGFyYW1ldGVycy5oIiwKKyAgICAiZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2Rpc2tfY2FjaGUuY2MiLAorICAgICJkaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfYmFja2VuZF9pbXBsLmNjIiwKKyAgICAiZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2JhY2tlbmRfaW1wbC5oIiwKKyAgICAiZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2VudHJ5X2ltcGwuY2MiLAorICAgICJkaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfZW50cnlfaW1wbC5oIiwKKyAgICAiZGlza19jYWNoZS9jb2JhbHQvcmVzb3VyY2VfdHlwZS5oIiwKKyAgICAiZGlza19jYWNoZS9uZXRfbG9nX3BhcmFtZXRlcnMuY2MiLAorICAgICJkaXNrX2NhY2hlL25ldF9sb2dfcGFyYW1ldGVycy5oIiwKICAgICAjICJkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfYmFja2VuZF9pbXBsLmNjIiwKICAgICAjICJkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfYmFja2VuZF9pbXBsLmgiLAogICAgICMgImRpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9iYWNrZW5kX3ZlcnNpb24uaCIsCkBAIC01NTksMTUgKzU2NSwxNCBAQAogICAgICJodHRwL2h0dHBfYmFzaWNfc3RyZWFtLmgiLAogICAgICJodHRwL2h0dHBfYnl0ZV9yYW5nZS5jYyIsCiAgICAgImh0dHAvaHR0cF9ieXRlX3JhbmdlLmgiLAotCi0gICAgIyAiaHR0cC9odHRwX2NhY2hlLmNjIiwKLSAgICAjICJodHRwL2h0dHBfY2FjaGUuaCIsCi0gICAgIyAiaHR0cC9odHRwX2NhY2hlX2xvb2t1cF9tYW5hZ2VyLmNjIiwKLSAgICAjICJodHRwL2h0dHBfY2FjaGVfbG9va3VwX21hbmFnZXIuaCIsCi0gICAgIyAiaHR0cC9odHRwX2NhY2hlX3RyYW5zYWN0aW9uLmNjIiwKLSAgICAjICJodHRwL2h0dHBfY2FjaGVfdHJhbnNhY3Rpb24uaCIsCi0gICAgIyAiaHR0cC9odHRwX2NhY2hlX3dyaXRlcnMuY2MiLAotICAgICMgImh0dHAvaHR0cF9jYWNoZV93cml0ZXJzLmgiLAorICAgICJodHRwL2h0dHBfY2FjaGUuY2MiLAorICAgICJodHRwL2h0dHBfY2FjaGUuaCIsCisgICAgImh0dHAvaHR0cF9jYWNoZV9sb29rdXBfbWFuYWdlci5jYyIsCisgICAgImh0dHAvaHR0cF9jYWNoZV9sb29rdXBfbWFuYWdlci5oIiwKKyAgICAiaHR0cC9odHRwX2NhY2hlX3RyYW5zYWN0aW9uLmNjIiwKKyAgICAiaHR0cC9odHRwX2NhY2hlX3RyYW5zYWN0aW9uLmgiLAorICAgICJodHRwL2h0dHBfY2FjaGVfd3JpdGVycy5jYyIsCisgICAgImh0dHAvaHR0cF9jYWNoZV93cml0ZXJzLmgiLAogICAgICJodHRwL2h0dHBfY2h1bmtlZF9kZWNvZGVyLmNjIiwKICAgICAiaHR0cC9odHRwX2NodW5rZWRfZGVjb2Rlci5oIiwKICAgICAiaHR0cC9odHRwX2NvbnRlbnRfZGlzcG9zaXRpb24uY2MiLApAQCAtMTgwNCw2ICsxODA5LDkgQEAKIH0KIAogY29weSgibmV0X3VuaXR0ZXN0X2ZpbGVzIikgeworICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorICB9CiAgIHNvdXJjZXMgPSBbCiAgICAgImRhdGEvdGVzdC5odG1sIiwKICAgICAiZGF0YS9jZXJ0X2lzc3Vlcl9zb3VyY2Vfc3RhdGljX3VuaXR0ZXN0L2MxLnBlbSIsCkBAIC0yODk5LDYgKzI5MDcsOSBAQAogfQogCiBjb3B5KCJ0aGlyZF9wYXJ0eV91bml0dGVzdF9maWxlcyIpIHsKKyAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIGluc3RhbGxfY29udGVudCA9IHRydWUKKyAgfQogICBzb3VyY2VzID0gWwogICAgICJ0aGlyZF9wYXJ0eS9uaXN0LXBraXRzL2NlcnRzL0FsbENlcnRpZmljYXRlc2FueVBvbGljeVRlc3QxMUVFLmNydCIsCiAgICAgInRoaXJkX3BhcnR5L25pc3QtcGtpdHMvY2VydHMvQWxsQ2VydGlmaWNhdGVzTm9Qb2xpY2llc1Rlc3QyRUUuY3J0IiwKQEAgLTM2ODIsOSArMzY5Myw5IEBACiAgICAgImh0dHAvaHR0cF9iYXNpY19zdGF0ZV91bml0dGVzdC5jYyIsCiAgICAgImh0dHAvaHR0cF9ieXRlX3JhbmdlX3VuaXR0ZXN0LmNjIiwKIAotICAgICMgImh0dHAvaHR0cF9jYWNoZV9sb29rdXBfbWFuYWdlcl91bml0dGVzdC5jYyIsCi0gICAgIyAiaHR0cC9odHRwX2NhY2hlX3VuaXR0ZXN0LmNjIiwKLSAgICAjICJodHRwL2h0dHBfY2FjaGVfd3JpdGVyc191bml0dGVzdC5jYyIsCisgICAgImh0dHAvaHR0cF9jYWNoZV9sb29rdXBfbWFuYWdlcl91bml0dGVzdC5jYyIsCisgICAgImh0dHAvaHR0cF9jYWNoZV91bml0dGVzdC5jYyIsCisgICAgImh0dHAvaHR0cF9jYWNoZV93cml0ZXJzX3VuaXR0ZXN0LmNjIiwKICAgICAjICJ1cmxfcmVxdWVzdC92aWV3X2NhY2hlX2hlbHBlcl91bml0dGVzdC5jYyIsCiAgICAgImh0dHAvaHR0cF9jaHVua2VkX2RlY29kZXJfdW5pdHRlc3QuY2MiLAogCkBAIC0zNzE0LDggKzM3MjUsOCBAQAogICAgICJodHRwL21vY2tfYWxsb3dfaHR0cF9hdXRoX3ByZWZlcmVuY2VzLmNjIiwKICAgICAiaHR0cC9tb2NrX2FsbG93X2h0dHBfYXV0aF9wcmVmZXJlbmNlcy5oIiwKIAotICAgICMgImh0dHAvbW9ja19odHRwX2NhY2hlLmNjIiwKLSAgICAjICJodHRwL21vY2tfaHR0cF9jYWNoZS5oIiwKKyAgICAiaHR0cC9tb2NrX2h0dHBfY2FjaGUuY2MiLAorICAgICJodHRwL21vY2tfaHR0cF9jYWNoZS5oIiwKICAgICAjIE1haW4gdGVzdCB0YXJnZXQgbm90IGVuYWJsZWQgeWV0LgogICAgICMgImh0dHAvdHJhbnNwb3J0X3NlY3VyaXR5X3BlcnNpc3Rlcl91bml0dGVzdC5jYyIsCiAgICAgIyAibG9nL2ZpbGVfbmV0X2xvZ19vYnNlcnZlcl91bml0dGVzdC5jYyIsCkBAIC00MTg5LDggKzQyMDAsNyBAQAogICB9CiAKICAgZGVmaW5lcyA9IFsKLSAgICAjIFRvIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHdhbnQgdG8gZW5hYmxlIEhUVFAgY2FjaGUuCi0gICAgIkhUVFBfQ0FDSEVfRElTQUJMRURfRk9SX1NUQVJCT0FSRCIsCisgICAgIkhUVFBfQ0FDSEVfVEVTVElOR19ESVNBQkxFRCIsCiAgICAgIkdNT0NLX05PX01PVkVfTU9DSyIsCiAgIF0KIApAQCAtNDIyMCw2ICs0MjMwLDE0IEBACiAgICAgIi8vdXJsIiwKICAgICAiLy91cmw6dXJsX2ZlYXR1cmVzIiwKICAgXQorCisgIGlmIChpc19zdGFyYm9hcmQpIHsKKyAgICBjb250ZW50X2RlcHMgPSBbCisgICAgICAiOm5ldF91bml0dGVzdF9maWxlcyIsCisgICAgICAiOnRoaXJkX3BhcnR5X3VuaXR0ZXN0X2ZpbGVzIiwKKyAgICAgICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiwKKyAgICBdCisgIH0KIH0KIAogc3RhdGljX2xpYnJhcnkoInRlc3Rfc3VwcG9ydCIpIHsKZGlmZiAtLWdpdCBhL25ldC9iYXNlL2NhY2hlX3R5cGUuaCBiL25ldC9iYXNlL2NhY2hlX3R5cGUuaAppbmRleCAyMzk5NTk0Li5kZWJhZTUxIDEwMDY0NAotLS0gYS9uZXQvYmFzZS9jYWNoZV90eXBlLmgKKysrIGIvbmV0L2Jhc2UvY2FjaGVfdHlwZS5oCkBAIC0yMyw3ICsyMywxMCBAQAogZW51bSBCYWNrZW5kVHlwZSB7CiAgIENBQ0hFX0JBQ0tFTkRfREVGQVVMVCwKICAgQ0FDSEVfQkFDS0VORF9CTE9DS0ZJTEUsICAvLyBUaGUgfEJhY2tlbmRJbXBsfC4KLSAgQ0FDSEVfQkFDS0VORF9TSU1QTEUgIC8vIFRoZSB8U2ltcGxlQmFja2VuZEltcGx8LgorICBDQUNIRV9CQUNLRU5EX1NJTVBMRSwgICAgIC8vIFRoZSB8U2ltcGxlQmFja2VuZEltcGx8LgorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBDQUNIRV9CQUNLRU5EX0NPQkFMVCAgICAgIC8vIFRoZSB8Q29iYWx0QmFja2VuZEltcGx8LAorI2VuZGlmCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgbmV0CmRpZmYgLS1naXQgYS9uZXQvY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9pbl9tZW1vcnlfc3RhcmJvYXJkLmNjIGIvbmV0L2NlcnQvaW50ZXJuYWwvdHJ1c3Rfc3RvcmVfaW5fbWVtb3J5X3N0YXJib2FyZC5jYwppbmRleCBkNTUzOGM5Li41M2U1Zjc5IDEwMDY0NAotLS0gYS9uZXQvY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9pbl9tZW1vcnlfc3RhcmJvYXJkLmNjCisrKyBiL25ldC9jZXJ0L2ludGVybmFsL3RydXN0X3N0b3JlX2luX21lbW9yeV9zdGFyYm9hcmQuY2MKQEAgLTc3LDcgKzc3LDYgQEAKICAgICByZXR1cm4gc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPigpOwogICB9CiAgIHN0ZDo6dW5vcmRlcmVkX3NldDxzdGQ6OnN0cmluZz4gdHJ1c3RlZF9jZXJ0c19vbl9kaXNrOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHN0ZDo6dmVjdG9yPGNoYXI+IGRpcl9lbnRyeShrU2JGaWxlTWF4TmFtZSk7CiAKICAgd2hpbGUgKFNiRGlyZWN0b3J5R2V0TmV4dChzYl9jZXJ0c19kaXJlY3RvcnksIGRpcl9lbnRyeS5kYXRhKCksCkBAIC04NywxNyArODYsNiBAQAogICAgIH0KICAgICB0cnVzdGVkX2NlcnRzX29uX2Rpc2suZW1wbGFjZShkaXJfZW50cnkuZGF0YSgpKTsKICAgfQotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICBTYkRpcmVjdG9yeUVudHJ5IGRpcl9lbnRyeTsKLQotICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KHNiX2NlcnRzX2RpcmVjdG9yeSwgJmRpcl9lbnRyeSkpIHsKLSAgICBpZiAoc3RybGVuKGRpcl9lbnRyeS5uYW1lKSAhPSBrQ2VydEZpbGVOYW1lTGVuZ3RoKSB7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgdHJ1c3RlZF9jZXJ0c19vbl9kaXNrLmVtcGxhY2UoZGlyX2VudHJ5Lm5hbWUpOwotICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KICAgU2JEaXJlY3RvcnlDbG9zZShzYl9jZXJ0c19kaXJlY3RvcnkpOwogICByZXR1cm4gc3RkOjptb3ZlKHRydXN0ZWRfY2VydHNfb25fZGlzayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29va2llcy9jb29raWVfbW9uc3Rlcl91bml0dGVzdC5jYyBiL25ldC9jb29raWVzL2Nvb2tpZV9tb25zdGVyX3VuaXR0ZXN0LmNjCmluZGV4IGMxM2FmODkuLmIxMzdmYjUgMTAwNjQ0Ci0tLSBhL25ldC9jb29raWVzL2Nvb2tpZV9tb25zdGVyX3VuaXR0ZXN0LmNjCisrKyBiL25ldC9jb29raWVzL2Nvb2tpZV9tb25zdGVyX3VuaXR0ZXN0LmNjCkBAIC01MTAsOCArNTEwLDggQEAKICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRfc2VjdXJlLCBudW1fc2VjdXJlKTsKIAogICAgIC8vIFZhbGlkYXRlIGVhY2ggcHJpb3JpdHkuCi0gICAgc2l6ZV90IGV4cGVjdGVkX2NvdW50WzNdID0gewotICAgICAgICBleHBlY3RlZF9sb3dfY291bnQsIGV4cGVjdGVkX21lZGl1bV9jb3VudCwgZXhwZWN0ZWRfaGlnaF9jb3VudH07CisgICAgc2l6ZV90IGV4cGVjdGVkX2NvdW50WzNdID0ge2V4cGVjdGVkX2xvd19jb3VudCwgZXhwZWN0ZWRfbWVkaXVtX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9oaWdoX2NvdW50fTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgc2l6ZV90IG51bV9mb3JfcHJpb3JpdHkgPQogICAgICAgICAgIHN1cnZpdmluZ19pZF9saXN0WzBdW2ldLnNpemUoKSArIHN1cnZpdmluZ19pZF9saXN0WzFdW2ldLnNpemUoKTsKQEAgLTEwNDksNyArMTA0OSw3IEBACiAKIFRFU1RfRihEZWZlcnJlZENvb2tpZVRhc2tUZXN0LCBEZWZlcnJlZEdldENvb2tpZUxpc3QpIHsKICAgRGVjbGFyZUxvYWRlZENvb2tpZShodHRwX3d3d19mb29fLnVybCgpLAotICAgICAgICAgICAgICAgICAgICAgICJYPTE7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgICAgICJYPTE7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiLAogICAgICAgICAgICAgICAgICAgICAgIFRpbWU6Ok5vdygpICsgVGltZURlbHRhOjpGcm9tRGF5cygzKSk7CiAKICAgTW9ja0dldENvb2tpZUxpc3RDYWxsYmFjayBnZXRfY29va2llX2xpc3RfY2FsbGJhY2s7CkBAIC0xMTQxLDcgKzExNDEsNyBAQAogCiBURVNUX0YoRGVmZXJyZWRDb29raWVUYXNrVGVzdCwgRGVmZXJyZWRHZXRBbGxDb29raWVzKSB7CiAgIERlY2xhcmVMb2FkZWRDb29raWUoaHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiWD0xOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAiWD0xOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIiwKICAgICAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoMykpOwogCiAgIE1vY2tHZXRDb29raWVMaXN0Q2FsbGJhY2sgZ2V0X2Nvb2tpZV9saXN0X2NhbGxiYWNrOwpAQCAtMTE2Myw3ICsxMTYzLDcgQEAKIAogVEVTVF9GKERlZmVycmVkQ29va2llVGFza1Rlc3QsIERlZmVycmVkR2V0QWxsRm9yVXJsQ29va2llcykgewogICBEZWNsYXJlTG9hZGVkQ29va2llKGh0dHBfd3d3X2Zvb18udXJsKCksCi0gICAgICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjE0IEdNVCIsCisgICAgICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICAgICAgVGltZTo6Tm93KCkgKyBUaW1lRGVsdGE6OkZyb21EYXlzKDMpKTsKIAogICBNb2NrR2V0Q29va2llTGlzdENhbGxiYWNrIGdldF9jb29raWVfbGlzdF9jYWxsYmFjazsKQEAgLTExODgsNyArMTE4OCw3IEBACiAKIFRFU1RfRihEZWZlcnJlZENvb2tpZVRhc2tUZXN0LCBEZWZlcnJlZEdldEFsbEZvclVybFdpdGhPcHRpb25zQ29va2llcykgewogICBEZWNsYXJlTG9hZGVkQ29va2llKGh0dHBfd3d3X2Zvb18udXJsKCksCi0gICAgICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjE0IEdNVCIsCisgICAgICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICAgICAgVGltZTo6Tm93KCkgKyBUaW1lRGVsdGE6OkZyb21EYXlzKDMpKTsKIAogICBNb2NrR2V0Q29va2llTGlzdENhbGxiYWNrIGdldF9jb29raWVfbGlzdF9jYWxsYmFjazsKQEAgLTEzMTIsNyArMTMxMiw3IEBACiAvLyBiZWluZyBkaXNwYXRjaGVkIGdvIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLgogVEVTVF9GKERlZmVycmVkQ29va2llVGFza1Rlc3QsIERlZmVycmVkVGFza09yZGVyKSB7CiAgIERlY2xhcmVMb2FkZWRDb29raWUoaHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiWD0xOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAiWD0xOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIiwKICAgICAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoMykpOwogCiAgIE1vY2tHZXRDb29raWVMaXN0Q2FsbGJhY2sgZ2V0X2Nvb2tpZV9saXN0X2NhbGxiYWNrOwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKICAgLy8gQ3JlYXRlIGEgcGVyc2lzdGVudCBjb29raWUuCiAgIEVYUEVDVF9UUlVFKFNldENvb2tpZSgKICAgICAgIGNtLmdldCgpLCBodHRwX3d3d19mb29fLnVybCgpLAotICAgICAgc3RkOjpzdHJpbmcoa1ZhbGlkQ29va2llTGluZSkgKyAiOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjEzIEdNVCIpKTsKKyAgICAgIHN0ZDo6c3RyaW5nKGtWYWxpZENvb2tpZUxpbmUpICsgIjsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxMyBHTVQiKSk7CiAgIEFTU0VSVF9FUSgxdSwgc3RvcmUtPmNvbW1hbmRzKCkuc2l6ZSgpKTsKICAgRVhQRUNUX0VRKENvb2tpZVN0b3JlQ29tbWFuZDo6QURELCBzdG9yZS0+Y29tbWFuZHMoKVswXS50eXBlKTsKIApAQCAtMTc2MiwyMCArMTc2MiwyMCBAQAogICAvLyB0aGUgaW1wb3J0LgogCiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPTE7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoMyksICZpbml0aWFsX2Nvb2tpZXMpOwogCiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPTI7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgIlg9MjsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoMSksICZpbml0aWFsX2Nvb2tpZXMpOwogCiAgIC8vID09PT4gVGhpcyBvbmUgaXMgdGhlIFdJTk5FUiAoYmlnZ2VzdCBjcmVhdGlvbiB0aW1lKS4gIDw9PT09CiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPTM7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgIlg9MzsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoNCksICZpbml0aWFsX2Nvb2tpZXMpOwogCiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPTQ7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgIlg9NDsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSwgJmluaXRpYWxfY29va2llcyk7CiAKICAgLy8gSW5zZXJ0IDIgY29va2llcyB3aXRoIG5hbWUgIlgiIG9uIHBhdGggIi8yIiwgd2l0aCB2YXJ5aW5nIGNyZWF0aW9uCkBAIC0xNzgzLDE2ICsxNzgzLDE2IEBACiAKICAgLy8gPT09PiBUaGlzIG9uZSBpcyB0aGUgV0lOTkVSIChiaWdnZXN0IGNyZWF0aW9uIHRpbWUpLiAgPD09PT0KICAgQWRkQ29va2llVG9MaXN0KEdVUkwoImh0dHA6Ly93d3cuZm9vLmNvbSIpLAotICAgICAgICAgICAgICAgICAgIlg9YTE7IHBhdGg9LzI7IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIiwKKyAgICAgICAgICAgICAgICAgICJYPWExOyBwYXRoPS8yOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBUaW1lOjpOb3coKSArIFRpbWVEZWx0YTo6RnJvbURheXMoOSksICZpbml0aWFsX2Nvb2tpZXMpOwogCiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPWEyOyBwYXRoPS8yOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjE0IEdNVCIsCisgICAgICAgICAgICAgICAgICAiWD1hMjsgcGF0aD0vMjsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiLAogICAgICAgICAgICAgICAgICAgVGltZTo6Tm93KCkgKyBUaW1lRGVsdGE6OkZyb21EYXlzKDIpLCAmaW5pdGlhbF9jb29raWVzKTsKIAogICAvLyBJbnNlcnQgMSBjb29raWUgd2l0aCBuYW1lICJZIiBvbiBwYXRoICIvIi4KICAgQWRkQ29va2llVG9MaXN0KEdVUkwoImh0dHA6Ly93d3cuZm9vLmNvbSIpLAotICAgICAgICAgICAgICAgICAgIlk9YTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjE0IEdNVCIsCisgICAgICAgICAgICAgICAgICAiWT1hOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIiwKICAgICAgICAgICAgICAgICAgIFRpbWU6Ok5vdygpICsgVGltZURlbHRhOjpGcm9tRGF5cygxMCksICZpbml0aWFsX2Nvb2tpZXMpOwogCiAgIC8vIEluamVjdCBvdXIgaW5pdGlhbCBjb29raWVzIGludG8gdGhlIG1vY2sgUGVyc2lzdGVudENvb2tpZVN0b3JlLgpAQCAtMjY1NCw3ICsyNjU0LDcgQEAKIAogICAvLyBBZGQgYSBjb29raWUuCiAgIEVYUEVDVF9UUlVFKFNldENvb2tpZShjbS5nZXQoKSwgaHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBPUI7IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTMgR01UIikpOworICAgICAgICAgICAgICAgICAgICAgICAgIkE9QjsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxMyBHTVQiKSk7CiAgIHRoaXMtPk1hdGNoQ29va2llTGluZXMoIkE9QiIsIEdldENvb2tpZXMoY20uZ2V0KCksIGh0dHBfd3d3X2Zvb18udXJsKCkpKTsKICAgQVNTRVJUX0VRKDF1LCBzdG9yZS0+Y29tbWFuZHMoKS5zaXplKCkpOwogICBFWFBFQ1RfRVEoQ29va2llU3RvcmVDb21tYW5kOjpBREQsIHN0b3JlLT5jb21tYW5kcygpWzBdLnR5cGUpOwpAQCAtMjY2NywxMyArMjY2NywxMyBAQAogCiAgIC8vIEFkZCBhIGNvb2tpZS4KICAgRVhQRUNUX1RSVUUoU2V0Q29va2llKGNtLmdldCgpLCBodHRwX3d3d19mb29fLnVybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkE9QjsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxMyBHTVQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiQT1COyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjEzIEdNVCIpKTsKICAgdGhpcy0+TWF0Y2hDb29raWVMaW5lcygiQT1CIiwgR2V0Q29va2llcyhjbS5nZXQoKSwgaHR0cF93d3dfZm9vXy51cmwoKSkpOwogICBBU1NFUlRfRVEoM3UsIHN0b3JlLT5jb21tYW5kcygpLnNpemUoKSk7CiAgIEVYUEVDVF9FUShDb29raWVTdG9yZUNvbW1hbmQ6OkFERCwgc3RvcmUtPmNvbW1hbmRzKClbMl0udHlwZSk7CiAgIC8vIE92ZXJ3cml0ZSBpdC4KICAgRVhQRUNUX1RSVUUoU2V0Q29va2llKGNtLmdldCgpLCBodHRwX3d3d19mb29fLnVybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIkE9Rm9vOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjE0IEdNVCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJBPUZvbzsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiKSk7CiAgIHRoaXMtPk1hdGNoQ29va2llTGluZXMoIkE9Rm9vIiwgR2V0Q29va2llcyhjbS5nZXQoKSwgaHR0cF93d3dfZm9vXy51cmwoKSkpOwogICBBU1NFUlRfRVEoNXUsIHN0b3JlLT5jb21tYW5kcygpLnNpemUoKSk7CiAgIEVYUEVDVF9FUShDb29raWVTdG9yZUNvbW1hbmQ6OlJFTU9WRSwgc3RvcmUtPmNvbW1hbmRzKClbM10udHlwZSk7CkBAIC0zMjgzLDEyICszMjgzLDEyIEBACiAgIC8vIFNldCB1cCBhIHNldCBvZiBjb29raWVzIHdpdGggYSBkdXBsaWNhdGUuCiAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYW5vbmljYWxDb29raWU+PiBpbml0aWFsX2Nvb2tpZXM7CiAgIEFkZENvb2tpZVRvTGlzdChHVVJMKCJodHRwOi8vd3d3LmZvby5jb20iKSwKLSAgICAgICAgICAgICAgICAgICJYPTE7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiLAorICAgICAgICAgICAgICAgICAgIlg9MTsgcGF0aD0vOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjE0IEdNVCIsCiAgICAgICAgICAgICAgICAgICBiYXNlOjpUaW1lOjpOb3coKSArIGJhc2U6OlRpbWVEZWx0YTo6RnJvbURheXMoMyksCiAgICAgICAgICAgICAgICAgICAmaW5pdGlhbF9jb29raWVzKTsKIAogICBBZGRDb29raWVUb0xpc3QoR1VSTCgiaHR0cDovL3d3dy5mb28uY29tIiksCi0gICAgICAgICAgICAgICAgICAiWD0yOyBwYXRoPS87IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIiwKKyAgICAgICAgICAgICAgICAgICJYPTI7IHBhdGg9LzsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiLAogICAgICAgICAgICAgICAgICAgYmFzZTo6VGltZTo6Tm93KCkgKyBiYXNlOjpUaW1lRGVsdGE6OkZyb21EYXlzKDEpLAogICAgICAgICAgICAgICAgICAgJmluaXRpYWxfY29va2llcyk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb29raWVzL2Nvb2tpZV9zdG9yZV91bml0dGVzdC5oIGIvbmV0L2Nvb2tpZXMvY29va2llX3N0b3JlX3VuaXR0ZXN0LmgKaW5kZXggNmQyNGM3OS4uZWQ5OTdmNCAxMDA2NDQKLS0tIGEvbmV0L2Nvb2tpZXMvY29va2llX3N0b3JlX3VuaXR0ZXN0LmgKKysrIGIvbmV0L2Nvb2tpZXMvY29va2llX3N0b3JlX3VuaXR0ZXN0LmgKQEAgLTEyMDcsNyArMTIwNyw3IEBACiAgIC8vIENyZWF0ZSBhIHBlcnNpc3RlbnQgY29va2llLgogICBFWFBFQ1RfVFJVRSh0aGlzLT5TZXRDb29raWUoCiAgICAgICBjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgIHN0ZDo6c3RyaW5nKGtWYWxpZENvb2tpZUxpbmUpICsgIjsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxMyBHTVQiKSk7CisgICAgICBzdGQ6OnN0cmluZyhrVmFsaWRDb29raWVMaW5lKSArICI7IGV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTMgR01UIikpOwogCiAgIHRoaXMtPk1hdGNoQ29va2llTGluZXMoIkE9QiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29va2llcyhjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSkpOwpAQCAtMTIyMCw3ICsxMjIwLDcgQEAKICAgLy8gQ3JlYXRlIGEgcGVyc2lzdGVudCBjb29raWUuCiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZSgKICAgICAgIGNzLCB0aGlzLT5odHRwX3d3d19mb29fLnVybCgpLAotICAgICAgc3RkOjpzdHJpbmcoa1ZhbGlkQ29va2llTGluZSkgKyAiOyBleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjEzIEdNVCIpKTsKKyAgICAgIHN0ZDo6c3RyaW5nKGtWYWxpZENvb2tpZUxpbmUpICsgIjsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxMyBHTVQiKSk7CiAgIHRoaXMtPk1hdGNoQ29va2llTGluZXMoIkE9QiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+R2V0Q29va2llcyhjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSkpOwogICAvLyBEZWxldGUgaXQgdmlhIEV4cGlyZXMuCkBAIC0xMjMzLDEzICsxMjMzLDEzIEBACiAgIC8vIENyZWF0ZSBhIHBlcnNpc3RlbnQgY29va2llLgogICBFWFBFQ1RfVFJVRSh0aGlzLT5TZXRDb29raWUoCiAgICAgICBjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgIHN0ZDo6c3RyaW5nKGtWYWxpZENvb2tpZUxpbmUpICsgIjsgZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxMyBHTVQiKSk7CisgICAgICBzdGQ6OnN0cmluZyhrVmFsaWRDb29raWVMaW5lKSArICI7IGV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTMgR01UIikpOwogICB0aGlzLT5NYXRjaENvb2tpZUxpbmVzKCJBPUIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPkdldENvb2tpZXMoY3MsIHRoaXMtPmh0dHBfd3d3X2Zvb18udXJsKCkpKTsKICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBub3QgZGVsZXRlZCB3aXRoIHNpZ25pZmljYW50IGVub3VnaCBjbG9jayBza2V3LgogICBiYXNlOjpUaW1lIHNlcnZlcl90aW1lOwotICBFWFBFQ1RfVFJVRShiYXNlOjpUaW1lOjpGcm9tU3RyaW5nKCJTdW4sIDE3LUFwci0xOTc3IDIyOjUwOjEzIEdNVCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlcnZlcl90aW1lKSk7CisgIEVYUEVDVF9UUlVFKAorICAgICAgYmFzZTo6VGltZTo6RnJvbVN0cmluZygiU3VuLCAxNy1BcHItMTk3NyAyMjo1MDoxMyBHTVQiLCAmc2VydmVyX3RpbWUpKTsKICAgRVhQRUNUX1RSVUUodGhpcy0+U2V0Q29va2llV2l0aFNlcnZlclRpbWUoCiAgICAgICBjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSwKICAgICAgIHN0ZDo6c3RyaW5nKGtWYWxpZENvb2tpZUxpbmUpICsgIjsgZXhwaXJlcz1Nb24sIDE4LUFwci0xOTc3IDIyOjUwOjEzIEdNVCIsCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogICAvLyBDcmVhdGUgYSBwZXJzaXN0ZW50IGNvb2tpZS4KICAgRVhQRUNUX1RSVUUodGhpcy0+U2V0Q29va2llKAogICAgICAgY3MsIHRoaXMtPmh0dHBfd3d3X2Zvb18udXJsKCksCi0gICAgICBzdGQ6OnN0cmluZyhrVmFsaWRDb29raWVMaW5lKSArICI7IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTMgR01UIikpOworICAgICAgc3RkOjpzdHJpbmcoa1ZhbGlkQ29va2llTGluZSkgKyAiOyBleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjEzIEdNVCIpKTsKICAgdGhpcy0+TWF0Y2hDb29raWVMaW5lcygiQT1CIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb29raWVzKGNzLCB0aGlzLT5odHRwX3d3d19mb29fLnVybCgpKSk7CiAgIC8vIERlbGV0ZSBpdCB2aWEgRXhwaXJlcywgd2l0aCBhIHVuaXggZXBvY2ggb2YgMC4KQEAgLTEyNzAsNyArMTI3MCw3IEBACiAKICAgLy8gU2V0IGEgcGVyc2lzdGVudCBjb29raWUuCiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZShjcywgdGhpcy0+aHR0cF93d3dfZm9vXy51cmwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDPUQ7IGV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTMgR01UIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkM9RDsgZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxMyBHTVQiKSk7CiAKICAgRVhQRUNUX0VRKDJ1LCB0aGlzLT5HZXRBbGxDb29raWVzKGNzKS5zaXplKCkpOwogCkBAIC0xNDIwLDEyICsxNDIwLDEyIEBACiAgIC8vIEluc2VydCBhIGNvb2tpZSAiYSIgZm9yIHBhdGggIi9wYXRoMSIKICAgRVhQRUNUX1RSVUUodGhpcy0+U2V0Q29va2llKGNzLCB1cmxfZm9vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImE9dmFsMTsgcGF0aD0vcGF0aDE7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBpcmVzPU1vbiwgMTgtQXByLTIyIDIyOjUwOjEzIEdNVCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjEzIEdNVCIpKTsKIAogICAvLyBJbnNlcnQgYSBjb29raWUgImIiIGZvciBwYXRoICIvcGF0aDEiCiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZShjcywgdXJsX2ZvbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiPXZhbDE7IHBhdGg9L3BhdGgxOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiKSk7CiAKICAgLy8gSW5zZXJ0IGEgY29va2llICJiIiBmb3IgcGF0aCAiL3BhdGgxIiwgdGhhdCBpcyBodHRwb25seS4gVGhpcyBzaG91bGQKICAgLy8gb3ZlcndyaXRlIHRoZSBub24taHR0cC1vbmx5IHZlcnNpb24uCkBAIC0xNDMzLDI2ICsxNDMzLDI2IEBACiAgIGFsbG93X2h0dHBvbmx5LnNldF9pbmNsdWRlX2h0dHBvbmx5KCk7CiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZVdpdGhPcHRpb25zKGNzLCB1cmxfZm9vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYj12YWwyOyBwYXRoPS9wYXRoMTsgaHR0cG9ubHk7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfaHR0cG9ubHkpKTsKIAogICAvLyBJbnNlcnQgYSBjb29raWUgImEiIGZvciBwYXRoICIvcGF0aDEiLiBUaGlzIHNob3VsZCBvdmVyd3JpdGUuCiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZShjcywgdXJsX2ZvbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhPXZhbDMzOyBwYXRoPS9wYXRoMTsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIikpOwogCiAgIC8vIEluc2VydCBhIGNvb2tpZSAiYSIgZm9yIHBhdGggIi9wYXRoMiIuIFRoaXMgc2hvdWxkIE5PVCBvdmVyd3JpdGUKICAgLy8gY29va2llICJhIiwgc2luY2UgdGhlIHBhdGggaXMgZGlmZmVyZW50LgogICBFWFBFQ1RfVFJVRSh0aGlzLT5TZXRDb29raWUoY3MsIHVybF9mb28sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYT12YWw5OyBwYXRoPS9wYXRoMjsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTQgR01UIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItNjIgMjI6NTA6MTQgR01UIikpOwogCiAgIC8vIEluc2VydCBhIGNvb2tpZSAiYSIgZm9yIHBhdGggIi9wYXRoMSIsIGJ1dCB0aGlzIHRpbWUgZm9yICJjaHJvbWl1bS5vcmciLgogICAvLyBBbHRob3VnaCB0aGUgbmFtZSBhbmQgcGF0aCBtYXRjaCwgdGhlIGhvc3RuYW1lcyBkbyBub3QsIHNvIHNob3VsZG4ndAogICAvLyBvdmVyd3JpdGUuCiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZShjcywgdXJsX2Nocm9taXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImE9dmFsOTk7IHBhdGg9L3BhdGgxOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwaXJlcz1Nb24sIDE4LUFwci0yMiAyMjo1MDoxNCBHTVQiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwaXJlcz1Nb24sIDE4LUFwci02MiAyMjo1MDoxNCBHTVQiKSk7CiAKICAgaWYgKFR5cGVQYXJhbTo6c3VwcG9ydHNfaHR0cF9vbmx5KSB7CiAgICAgdGhpcy0+TWF0Y2hDb29raWVMaW5lcygKQEAgLTE2NTQsNyArMTY1NCw3IEBACiAgIEVYUEVDVF9UUlVFKHRoaXMtPlNldENvb2tpZSgKICAgICAgIGNzLCB0aGlzLT5odHRwX3d3d19mb29fLnVybCgpLAogICAgICAgdGhpcy0+aHR0cF93d3dfZm9vXy5Gb3JtYXQoIkM9RDsgcGF0aD0vOyBkb21haW49JUQ7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGlyZXM9TW9uLCAxOC1BcHItMjIgMjI6NTA6MTMgR01UIikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBpcmVzPU1vbiwgMTgtQXByLTYyIDIyOjUwOjEzIEdNVCIpKSk7CiAgIHRoaXMtPk1hdGNoQ29va2llTGluZXMoIkE9QjsgQz1EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5HZXRDb29raWVzKGNzLCB0aGlzLT5odHRwX3d3d19mb29fLnVybCgpKSk7CiAgIC8vIERlbGV0ZSB0aGUgc2Vzc2lvbiBjb29raWUuCmRpZmYgLS1naXQgYS9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2JhY2tlbmRfaW1wbC5jYyBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfYmFja2VuZF9pbXBsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzU3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2JhY2tlbmRfaW1wbC5jYwpAQCAtMCwwICsxLDE0NCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAibmV0L2Rpc2tfY2FjaGUvY29iYWx0L2NvYmFsdF9iYWNrZW5kX2ltcGwuaCIKKworI2luY2x1ZGUgImJhc2UvdGhyZWFkaW5nL3NlcXVlbmNlZF90YXNrX3J1bm5lcl9oYW5kbGUuaCIKKwordXNpbmcgYmFzZTo6VGltZTsKKworbmFtZXNwYWNlIGRpc2tfY2FjaGUgeworCitDb2JhbHRCYWNrZW5kSW1wbDo6Q29iYWx0QmFja2VuZEltcGwobmV0OjpOZXRMb2cqIG5ldF9sb2cpCisgICAgOiB3ZWFrX2ZhY3RvcnlfKHRoaXMpIHt9CisKK0NvYmFsdEJhY2tlbmRJbXBsOjp+Q29iYWx0QmFja2VuZEltcGwoKSB7CisgIGlmICghcG9zdF9jbGVhbnVwX2NhbGxiYWNrXy5pc19udWxsKCkpCisgICAgYmFzZTo6U2VxdWVuY2VkVGFza1J1bm5lckhhbmRsZTo6R2V0KCktPlBvc3RUYXNrKAorICAgICAgICBGUk9NX0hFUkUsIHN0ZDo6bW92ZShwb3N0X2NsZWFudXBfY2FsbGJhY2tfKSk7Cit9CisKKy8vIHN0YXRpYworc3RkOjp1bmlxdWVfcHRyPENvYmFsdEJhY2tlbmRJbXBsPiBDb2JhbHRCYWNrZW5kSW1wbDo6Q3JlYXRlQmFja2VuZCgKKyAgICBpbnQ2NF90IG1heF9ieXRlcywKKyAgICBuZXQ6Ok5ldExvZyogbmV0X2xvZykgeworICBzdGQ6OnVuaXF1ZV9wdHI8Q29iYWx0QmFja2VuZEltcGw+IGNhY2hlKAorICAgICAgc3RkOjptYWtlX3VuaXF1ZTxDb2JhbHRCYWNrZW5kSW1wbD4obmV0X2xvZykpOworICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQgQ29iYWx0QmFja2VuZEltcGw6OlNldFBvc3RDbGVhbnVwQ2FsbGJhY2soYmFzZTo6T25jZUNsb3N1cmUgY2IpIHsKKyAgRENIRUNLKHBvc3RfY2xlYW51cF9jYWxsYmFja18uaXNfbnVsbCgpKTsKKyAgcG9zdF9jbGVhbnVwX2NhbGxiYWNrXyA9IHN0ZDo6bW92ZShjYik7Cit9CisKK25ldDo6Q2FjaGVUeXBlIENvYmFsdEJhY2tlbmRJbXBsOjpHZXRDYWNoZVR5cGUoKSBjb25zdCB7CisgIHJldHVybiBuZXQ6OkRJU0tfQ0FDSEU7Cit9CisKK2ludDMyX3QgQ29iYWx0QmFja2VuZEltcGw6OkdldEVudHJ5Q291bnQoKSBjb25zdCB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gMDsKK30KKworbmV0OjpFcnJvciBDb2JhbHRCYWNrZW5kSW1wbDo6T3BlbkVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpSZXF1ZXN0UHJpb3JpdHkgcmVxdWVzdF9wcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeSoqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgeworICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgcmV0dXJuIG5ldDo6RVJSX0ZBSUxFRDsKK30KKworbmV0OjpFcnJvciBDb2JhbHRCYWNrZW5kSW1wbDo6Q3JlYXRlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6UmVxdWVzdFByaW9yaXR5IHJlcXVlc3RfcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeSoqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgeworICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgcmV0dXJuIG5ldDo6RVJSX0ZBSUxFRDsKK30KKworbmV0OjpFcnJvciBDb2JhbHRCYWNrZW5kSW1wbDo6RG9vbUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpSZXF1ZXN0UHJpb3JpdHkgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgeworICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgcmV0dXJuIG5ldDo6T0s7Cit9CisKK25ldDo6RXJyb3IgQ29iYWx0QmFja2VuZEltcGw6OkRvb21BbGxFbnRyaWVzKENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgLy8gVE9ETzogSW1wbGVtZW50CisgIHJldHVybiBuZXQ6Ok9LOworfQorCituZXQ6OkVycm9yIENvYmFsdEJhY2tlbmRJbXBsOjpEb29tRW50cmllc0JldHdlZW4oCisgICAgVGltZSBpbml0aWFsX3RpbWUsCisgICAgVGltZSBlbmRfdGltZSwKKyAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gbmV0OjpPSzsKK30KKworbmV0OjpFcnJvciBDb2JhbHRCYWNrZW5kSW1wbDo6RG9vbUVudHJpZXNTaW5jZSgKKyAgICBUaW1lIGluaXRpYWxfdGltZSwKKyAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gbmV0OjpPSzsKK30KKworaW50NjRfdCBDb2JhbHRCYWNrZW5kSW1wbDo6Q2FsY3VsYXRlU2l6ZU9mQWxsRW50cmllcygKKyAgICBJbnQ2NENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgLy8gVE9ETzogSW1wbGVtZW50CisgIHJldHVybiAwOworfQorCitpbnQ2NF90IENvYmFsdEJhY2tlbmRJbXBsOjpDYWxjdWxhdGVTaXplT2ZFbnRyaWVzQmV0d2VlbigKKyAgICBiYXNlOjpUaW1lIGluaXRpYWxfdGltZSwKKyAgICBiYXNlOjpUaW1lIGVuZF90aW1lLAorICAgIEludDY0Q29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgeworICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgcmV0dXJuIDA7Cit9CisKK2NsYXNzIENvYmFsdEJhY2tlbmRJbXBsOjpDb2JhbHRJdGVyYXRvciBmaW5hbCA6IHB1YmxpYyBCYWNrZW5kOjpJdGVyYXRvciB7CisgcHVibGljOgorICBleHBsaWNpdCBDb2JhbHRJdGVyYXRvcihiYXNlOjpXZWFrUHRyPENvYmFsdEJhY2tlbmRJbXBsPiBiYWNrZW5kKQorICAgICAgOiBiYWNrZW5kXyhiYWNrZW5kKSB7fQorCisgIG5ldDo6RXJyb3IgT3Blbk5leHRFbnRyeShFbnRyeSoqIG5leHRfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZSB7CisgICAgLy8gVE9ETzogSW1wbGVtZW50CisgICAgcmV0dXJuIG5ldDo6RVJSX0ZBSUxFRDsKKyAgfQorCisgcHJpdmF0ZToKKyAgYmFzZTo6V2Vha1B0cjxDb2JhbHRCYWNrZW5kSW1wbD4gYmFja2VuZF8gPSBudWxscHRyOworfTsKKworc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmQ6Okl0ZXJhdG9yPiBDb2JhbHRCYWNrZW5kSW1wbDo6Q3JlYXRlSXRlcmF0b3IoKSB7CisgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZDo6SXRlcmF0b3I+KAorICAgICAgbmV3IENvYmFsdEl0ZXJhdG9yKHdlYWtfZmFjdG9yeV8uR2V0V2Vha1B0cigpKSk7Cit9CisKK3ZvaWQgQ29iYWx0QmFja2VuZEltcGw6Ok9uRXh0ZXJuYWxDYWNoZUhpdChjb25zdCBzdGQ6OnN0cmluZyYga2V5KSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorfQorCitzaXplX3QgQ29iYWx0QmFja2VuZEltcGw6OkR1bXBNZW1vcnlTdGF0cygKKyAgICBiYXNlOjp0cmFjZV9ldmVudDo6UHJvY2Vzc01lbW9yeUR1bXAqIHBtZCwKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFyZW50X2Fic29sdXRlX25hbWUpIGNvbnN0IHsKKyAgLy8gVE9ETzogSW1wbGVtZW50CisgIHJldHVybiAwOworfQorCit9ICAvLyBuYW1lc3BhY2UgZGlza19jYWNoZQpkaWZmIC0tZ2l0IGEvbmV0L2Rpc2tfY2FjaGUvY29iYWx0L2NvYmFsdF9iYWNrZW5kX2ltcGwuaCBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfYmFja2VuZF9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxZjk1MgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfYmFja2VuZF9pbXBsLmgKQEAgLTAsMCArMSw4NSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBTZWUgbmV0L2Rpc2tfY2FjaGUvZGlza19jYWNoZS5oIGZvciB0aGUgcHVibGljIGludGVyZmFjZSBvZiB0aGUgY2FjaGUuCisKKyNpZm5kZWYgTkVUX0RJU0tfQ0FDSEVfQ09CQUxUX0NPQkFMVF9CQUNLRU5EX0lNUExfSF8KKyNkZWZpbmUgTkVUX0RJU0tfQ0FDSEVfQ09CQUxUX0NPQkFMVF9CQUNLRU5EX0lNUExfSF8KKworI2luY2x1ZGUgIm5ldC9kaXNrX2NhY2hlL2Rpc2tfY2FjaGUuaCIKKworbmFtZXNwYWNlIGRpc2tfY2FjaGUgeworCisvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIEJhY2tlbmQgaW50ZXJmYWNlLiBBbiBvYmplY3Qgb2YgdGhpcyBjbGFzcyBoYW5kbGVzCisvLyB0aGUgb3BlcmF0aW9ucyBvZiB0aGUgY2FjaGUgd2l0aG91dCB3cml0aW5nIHRvIGRpc2suCitjbGFzcyBORVRfRVhQT1JUX1BSSVZBVEUgQ29iYWx0QmFja2VuZEltcGwgZmluYWwgOiBwdWJsaWMgQmFja2VuZCB7CisgcHVibGljOgorICBleHBsaWNpdCBDb2JhbHRCYWNrZW5kSW1wbChuZXQ6Ok5ldExvZyogbmV0X2xvZyk7CisgIH5Db2JhbHRCYWNrZW5kSW1wbCgpIG92ZXJyaWRlOworCisgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29iYWx0QmFja2VuZEltcGw+IENyZWF0ZUJhY2tlbmQoaW50NjRfdCBtYXhfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpOZXRMb2cqIG5ldF9sb2cpOworCisgIC8vIFNldHMgYSBjYWxsYmFjayB0byBiZSBwb3N0ZWQgYWZ0ZXIgd2UgYXJlIGRlc3Ryb3llZC4gU2hvdWxkIGJlIGNhbGxlZCBhdAorICAvLyBtb3N0IG9uY2UuCisgIHZvaWQgU2V0UG9zdENsZWFudXBDYWxsYmFjayhiYXNlOjpPbmNlQ2xvc3VyZSBjYik7CisKKyAgLy8gQmFja2VuZCBpbnRlcmZhY2UuCisgIG5ldDo6Q2FjaGVUeXBlIEdldENhY2hlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOworICBpbnQzMl90IEdldEVudHJ5Q291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgbmV0OjpFcnJvciBPcGVuRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpSZXF1ZXN0UHJpb3JpdHkgcmVxdWVzdF9wcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgRW50cnkqKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgb3ZlcnJpZGU7CisgIG5ldDo6RXJyb3IgQ3JlYXRlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OlJlcXVlc3RQcmlvcml0eSByZXF1ZXN0X3ByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5KiogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgb3ZlcnJpZGU7CisgIG5ldDo6RXJyb3IgRG9vbUVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6UmVxdWVzdFByaW9yaXR5IHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgbmV0OjpFcnJvciBEb29tQWxsRW50cmllcyhDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgbmV0OjpFcnJvciBEb29tRW50cmllc0JldHdlZW4oYmFzZTo6VGltZSBpbml0aWFsX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWUgZW5kX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIG92ZXJyaWRlOworICBuZXQ6OkVycm9yIERvb21FbnRyaWVzU2luY2UoYmFzZTo6VGltZSBpbml0aWFsX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgaW50NjRfdCBDYWxjdWxhdGVTaXplT2ZBbGxFbnRyaWVzKAorICAgICAgSW50NjRDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgaW50NjRfdCBDYWxjdWxhdGVTaXplT2ZFbnRyaWVzQmV0d2VlbigKKyAgICAgIGJhc2U6OlRpbWUgaW5pdGlhbF90aW1lLAorICAgICAgYmFzZTo6VGltZSBlbmRfdGltZSwKKyAgICAgIEludDY0Q29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgb3ZlcnJpZGU7CisgIHN0ZDo6dW5pcXVlX3B0cjxJdGVyYXRvcj4gQ3JlYXRlSXRlcmF0b3IoKSBvdmVycmlkZTsKKyAgdm9pZCBHZXRTdGF0cyhiYXNlOjpTdHJpbmdQYWlycyogc3RhdHMpIG92ZXJyaWRlIHt9CisgIHZvaWQgT25FeHRlcm5hbENhY2hlSGl0KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICBzaXplX3QgRHVtcE1lbW9yeVN0YXRzKAorICAgICAgYmFzZTo6dHJhY2VfZXZlbnQ6OlByb2Nlc3NNZW1vcnlEdW1wKiBwbWQsCisgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFyZW50X2Fic29sdXRlX25hbWUpIGNvbnN0IG92ZXJyaWRlOworCisgcHJpdmF0ZToKKyAgY2xhc3MgQ29iYWx0SXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyBDb2JhbHRJdGVyYXRvcjsKKworICBiYXNlOjpPbmNlQ2xvc3VyZSBwb3N0X2NsZWFudXBfY2FsbGJhY2tfOworCisgIGJhc2U6OldlYWtQdHJGYWN0b3J5PENvYmFsdEJhY2tlbmRJbXBsPiB3ZWFrX2ZhY3RvcnlfOworCisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb2JhbHRCYWNrZW5kSW1wbCk7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZGlza19jYWNoZQorCisjZW5kaWYgIC8vIE5FVF9ESVNLX0NBQ0hFX0NPQkFMVF9DT0JBTFRfQkFDS0VORF9JTVBMX0hfCmRpZmYgLS1naXQgYS9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2Rpc2tfY2FjaGUuY2MgYi9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2Rpc2tfY2FjaGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzYTY5YQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfZGlza19jYWNoZS5jYwpAQCAtMCwwICsxLDg2IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJiYXNlL21ldHJpY3MvZmllbGRfdHJpYWwuaCIKKyNpbmNsdWRlICJuZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2JhY2tlbmRfaW1wbC5oIgorCituYW1lc3BhY2UgZGlza19jYWNoZSB7CisKK25ldDo6RXJyb3IgQ3JlYXRlQ2FjaGVCYWNrZW5kSW1wbChuZXQ6OkNhY2hlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6QmFja2VuZFR5cGUgYmFja2VuZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgbWF4X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpOZXRMb2cqIG5ldF9sb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmQ+KiBiYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6Ok9uY2VDbG9zdXJlIHBvc3RfY2xlYW51cF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OkNvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgRENIRUNLKCFjYWxsYmFjay5pc19udWxsKCkpOworCisgIHN0ZDo6dW5pcXVlX3B0cjxDb2JhbHRCYWNrZW5kSW1wbD4gY29iYWx0X2JhY2tlbmRfaW1wbCA9CisgICAgICBkaXNrX2NhY2hlOjpDb2JhbHRCYWNrZW5kSW1wbDo6Q3JlYXRlQmFja2VuZChtYXhfYnl0ZXMsIG5ldF9sb2cpOworICBpZiAoY29iYWx0X2JhY2tlbmRfaW1wbCkgeworICAgIGNvYmFsdF9iYWNrZW5kX2ltcGwtPlNldFBvc3RDbGVhbnVwQ2FsbGJhY2soCisgICAgICAgIHN0ZDo6bW92ZShwb3N0X2NsZWFudXBfY2FsbGJhY2spKTsKKyAgICAqYmFja2VuZCA9IHN0ZDo6bW92ZShjb2JhbHRfYmFja2VuZF9pbXBsKTsKKyAgICByZXR1cm4gbmV0OjpPSzsKKyAgfQorCisgIGlmICghcG9zdF9jbGVhbnVwX2NhbGxiYWNrLmlzX251bGwoKSkKKyAgICBiYXNlOjpTZXF1ZW5jZWRUYXNrUnVubmVySGFuZGxlOjpHZXQoKS0+UG9zdFRhc2soCisgICAgICAgIEZST01fSEVSRSwgc3RkOjptb3ZlKHBvc3RfY2xlYW51cF9jYWxsYmFjaykpOworICByZXR1cm4gbmV0OjpFUlJfRkFJTEVEOworfQorCituZXQ6OkVycm9yIENyZWF0ZUNhY2hlQmFja2VuZChuZXQ6OkNhY2hlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpCYWNrZW5kVHlwZSBiYWNrZW5kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlOjpGaWxlUGF0aCYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgbWF4X2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6TmV0TG9nKiBuZXRfbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmQ+KiBiYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgIHJldHVybiBDcmVhdGVDYWNoZUJhY2tlbmRJbXBsKHR5cGUsIGJhY2tlbmRfdHlwZSwgcGF0aCwgbWF4X2J5dGVzLCBmb3JjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2xvZywgYmFja2VuZCwgYmFzZTo6T25jZUNsb3N1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGNhbGxiYWNrKSk7Cit9CisKK25ldDo6RXJyb3IgQ3JlYXRlQ2FjaGVCYWNrZW5kKG5ldDo6Q2FjaGVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OkJhY2tlbmRUeXBlIGJhY2tlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoJiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBtYXhfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpOZXRMb2cqIG5ldF9sb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZD4qIGJhY2tlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlOjpPbmNlQ2xvc3VyZSBwb3N0X2NsZWFudXBfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OkNvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgcmV0dXJuIENyZWF0ZUNhY2hlQmFja2VuZEltcGwoCisgICAgICB0eXBlLCBiYWNrZW5kX3R5cGUsIHBhdGgsIG1heF9ieXRlcywgZm9yY2UsIG5ldF9sb2csIGJhY2tlbmQsCisgICAgICBzdGQ6Om1vdmUocG9zdF9jbGVhbnVwX2NhbGxiYWNrKSwgc3RkOjptb3ZlKGNhbGxiYWNrKSk7Cit9CisKK2ludDY0X3QgQmFja2VuZDo6Q2FsY3VsYXRlU2l6ZU9mRW50cmllc0JldHdlZW4oCisgICAgYmFzZTo6VGltZSBpbml0aWFsX3RpbWUsCisgICAgYmFzZTo6VGltZSBlbmRfdGltZSwKKyAgICBJbnQ2NENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgcmV0dXJuIG5ldDo6RVJSX05PVF9JTVBMRU1FTlRFRDsKK30KKwordWludDhfdCBCYWNrZW5kOjpHZXRFbnRyeUluTWVtb3J5RGF0YShjb25zdCBzdGQ6OnN0cmluZyYga2V5KSB7CisgIHJldHVybiAwOworfQorCit2b2lkIEJhY2tlbmQ6OlNldEVudHJ5SW5NZW1vcnlEYXRhKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIHVpbnQ4X3QgZGF0YSkge30KKworfSAgLy8gbmFtZXNwYWNlIGRpc2tfY2FjaGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2VudHJ5X2ltcGwuY2MgYi9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2VudHJ5X2ltcGwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiZDNhZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfZW50cnlfaW1wbC5jYwpAQCAtMCwwICsxLDEzNCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAibmV0L2Rpc2tfY2FjaGUvY29iYWx0L2NvYmFsdF9lbnRyeV9pbXBsLmgiCisKK3VzaW5nIGJhc2U6OlRpbWU7CisKK25hbWVzcGFjZSBkaXNrX2NhY2hlIHsKKworQ29iYWx0RW50cnlJbXBsOjpDb2JhbHRFbnRyeUltcGwoYmFzZTo6V2Vha1B0cjxDb2JhbHRCYWNrZW5kSW1wbD4gYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6Ok5ldExvZyogbmV0X2xvZykKKyAgICA6IENvYmFsdEVudHJ5SW1wbChiYWNrZW5kLAorICAgICAgICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgLy8gY2hpbGRfaWQKKyAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAgLy8gcGFyZW50CisgICAgICAgICAgICAgICAgICAgICAgbmV0X2xvZykge30KKworQ29iYWx0RW50cnlJbXBsOjpDb2JhbHRFbnRyeUltcGwoYmFzZTo6V2Vha1B0cjxDb2JhbHRCYWNrZW5kSW1wbD4gYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaGlsZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvYmFsdEVudHJ5SW1wbCogcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpOZXRMb2cqIG5ldF9sb2cpCisgICAgOiBDb2JhbHRFbnRyeUltcGwoYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZygpLCAgLy8ga2V5CisgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgIG5ldF9sb2cpIHsKKyAgKCpwYXJlbnRfLT5jaGlsZHJlbl8pW2NoaWxkX2lkXSA9IHRoaXM7Cit9CisKK0NvYmFsdEVudHJ5SW1wbDo6Q29iYWx0RW50cnlJbXBsKGJhc2U6OldlYWtQdHI8Q29iYWx0QmFja2VuZEltcGw+IGJhY2tlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCA6OnN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hpbGRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2JhbHRFbnRyeUltcGwqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6TmV0TG9nKiBuZXRfbG9nKQorICAgIDoga2V5XyhrZXkpLAorICAgICAgcGFyZW50XyhwYXJlbnQpLAorICAgICAgbGFzdF9tb2RpZmllZF8oVGltZTo6Tm93KCkpLAorICAgICAgbGFzdF91c2VkXyhsYXN0X21vZGlmaWVkXykge30KKwordm9pZCBDb2JhbHRFbnRyeUltcGw6OkRvb20oKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorfQorCit2b2lkIENvYmFsdEVudHJ5SW1wbDo6Q2xvc2UoKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorfQorCitzdGQ6OnN0cmluZyBDb2JhbHRFbnRyeUltcGw6OkdldEtleSgpIGNvbnN0IHsKKyAgLy8gQSBjaGlsZCBlbnRyeSBkb2Vzbid0IGhhdmUga2V5IHNvIHRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkLgorICBEQ0hFQ0tfRVEoUEFSRU5UX0VOVFJZLCB0eXBlKCkpOworICByZXR1cm4ga2V5XzsKK30KKworVGltZSBDb2JhbHRFbnRyeUltcGw6OkdldExhc3RVc2VkKCkgY29uc3QgeworICByZXR1cm4gbGFzdF91c2VkXzsKK30KKworVGltZSBDb2JhbHRFbnRyeUltcGw6OkdldExhc3RNb2RpZmllZCgpIGNvbnN0IHsKKyAgcmV0dXJuIGxhc3RfbW9kaWZpZWRfOworfQorCitpbnQzMl90IENvYmFsdEVudHJ5SW1wbDo6R2V0RGF0YVNpemUoaW50IGluZGV4KSBjb25zdCB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gMDsKK30KKworaW50IENvYmFsdEVudHJ5SW1wbDo6UmVhZERhdGEoaW50IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPQnVmZmVyKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgLy8gVE9ETzogSW1wbGVtZW50CisgIHJldHVybiBuZXQ6OkVSUl9GQUlMRUQ7Cit9CisKK2ludCBDb2JhbHRFbnRyeUltcGw6OldyaXRlRGF0YShpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0J1ZmZlciogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0cnVuY2F0ZSkgeworICAvLyBUT0RPOiBJbXBsZW1lbnQKKyAgcmV0dXJuIG5ldDo6RVJSX0ZBSUxFRDsKK30KKworaW50IENvYmFsdEVudHJ5SW1wbDo6UmVhZFNwYXJzZURhdGEoaW50NjRfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0J1ZmZlciogYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gbmV0OjpFUlJfRkFJTEVEOworfQorCitpbnQgQ29iYWx0RW50cnlJbXBsOjpXcml0ZVNwYXJzZURhdGEoaW50NjRfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9CdWZmZXIqIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSB7CisgIC8vIFRPRE86IEltcGxlbWVudAorICByZXR1cm4gbmV0OjpFUlJfRkFJTEVEOworfQorCitpbnQgQ29iYWx0RW50cnlJbXBsOjpHZXRBdmFpbGFibGVSYW5nZShpbnQ2NF90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgLy8gVE9ETzogSW1wbGVtZW50CisgIHJldHVybiAwOworfQorCitib29sIENvYmFsdEVudHJ5SW1wbDo6Q291bGRCZVNwYXJzZSgpIGNvbnN0IHsKKyAgRENIRUNLX0VRKFBBUkVOVF9FTlRSWSwgdHlwZSgpKTsKKyAgcmV0dXJuIChjaGlsZHJlbl8uZ2V0KCkgIT0gbnVsbHB0cik7Cit9CisKK25ldDo6RXJyb3IgQ29iYWx0RW50cnlJbXBsOjpSZWFkeUZvclNwYXJzZUlPKENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgcmV0dXJuIG5ldDo6T0s7Cit9CisKK3ZvaWQgQ29iYWx0RW50cnlJbXBsOjpTZXRMYXN0VXNlZFRpbWVGb3JUZXN0KGJhc2U6OlRpbWUgdGltZSkgeworICBsYXN0X3VzZWRfID0gdGltZTsKK30KK30gIC8vIG5hbWVzcGFjZSBkaXNrX2NhY2hlCmRpZmYgLS1naXQgYS9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2VudHJ5X2ltcGwuaCBiL25ldC9kaXNrX2NhY2hlL2NvYmFsdC9jb2JhbHRfZW50cnlfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMDYwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZGlza19jYWNoZS9jb2JhbHQvY29iYWx0X2VudHJ5X2ltcGwuaApAQCAtMCwwICsxLDEwNSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIE5FVF9ESVNLX0NBQ0hFX0NPQkFMVF9DT0JBTFRfRU5UUllfSU1QTF9IXworI2RlZmluZSBORVRfRElTS19DQUNIRV9DT0JBTFRfQ09CQUxUX0VOVFJZX0lNUExfSF8KKworI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvbWVtb3J5X3VzYWdlX2VzdGltYXRvci5oIgorI2luY2x1ZGUgIm5ldC9kaXNrX2NhY2hlL2Rpc2tfY2FjaGUuaCIKKworbmFtZXNwYWNlIGRpc2tfY2FjaGUgeworCitjbGFzcyBDb2JhbHRCYWNrZW5kSW1wbDsKKworY2xhc3MgTkVUX0VYUE9SVF9QUklWQVRFIENvYmFsdEVudHJ5SW1wbCBmaW5hbAorICAgIDogcHVibGljIEVudHJ5LAorICAgICAgcHVibGljIGJhc2U6OkxpbmtOb2RlPENvYmFsdEVudHJ5SW1wbD4geworIHB1YmxpYzoKKyAgZW51bSBFbnRyeVR5cGUgeworICAgIFBBUkVOVF9FTlRSWSwKKyAgICBDSElMRF9FTlRSWSwKKyAgfTsKKworICAvLyBDb25zdHJ1Y3RvciBmb3IgcGFyZW50IGVudHJpZXMuCisgIENvYmFsdEVudHJ5SW1wbChiYXNlOjpXZWFrUHRyPENvYmFsdEJhY2tlbmRJbXBsPiBiYWNrZW5kLAorICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgIG5ldDo6TmV0TG9nKiBuZXRfbG9nKTsKKworICAvLyBDb25zdHJ1Y3RvciBmb3IgY2hpbGQgZW50cmllcy4KKyAgQ29iYWx0RW50cnlJbXBsKGJhc2U6OldlYWtQdHI8Q29iYWx0QmFja2VuZEltcGw+IGJhY2tlbmQsCisgICAgICAgICAgICAgICAgICBpbnQgY2hpbGRfaWQsCisgICAgICAgICAgICAgICAgICBDb2JhbHRFbnRyeUltcGwqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgIG5ldDo6TmV0TG9nKiBuZXRfbG9nKTsKKworICBFbnRyeVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHBhcmVudF8gPyBDSElMRF9FTlRSWSA6IFBBUkVOVF9FTlRSWTsgfQorCisgIC8vIEZyb20gZGlza19jYWNoZTo6RW50cnk6CisgIHZvaWQgRG9vbSgpIG92ZXJyaWRlOworICB2b2lkIENsb3NlKCkgb3ZlcnJpZGU7CisgIHN0ZDo6c3RyaW5nIEdldEtleSgpIGNvbnN0IG92ZXJyaWRlOworICBiYXNlOjpUaW1lIEdldExhc3RVc2VkKCkgY29uc3Qgb3ZlcnJpZGU7CisgIGJhc2U6OlRpbWUgR2V0TGFzdE1vZGlmaWVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgIGludDMyX3QgR2V0RGF0YVNpemUoaW50IGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgaW50IFJlYWREYXRhKGludCBpbmRleCwKKyAgICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICBJT0J1ZmZlciogYnVmLAorICAgICAgICAgICAgICAgaW50IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICBDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgaW50IFdyaXRlRGF0YShpbnQgaW5kZXgsCisgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICBJT0J1ZmZlciogYnVmLAorICAgICAgICAgICAgICAgIGludCBidWZfbGVuLAorICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgYm9vbCB0cnVuY2F0ZSkgb3ZlcnJpZGU7CisgIGludCBSZWFkU3BhcnNlRGF0YShpbnQ2NF90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIElPQnVmZmVyKiBidWYsCisgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIG92ZXJyaWRlOworICBpbnQgV3JpdGVTcGFyc2VEYXRhKGludDY0X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIElPQnVmZmVyKiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgb3ZlcnJpZGU7CisgIGludCBHZXRBdmFpbGFibGVSYW5nZShpbnQ2NF90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIG92ZXJyaWRlOworICBib29sIENvdWxkQmVTcGFyc2UoKSBjb25zdCBvdmVycmlkZTsKKyAgdm9pZCBDYW5jZWxTcGFyc2VJTygpIG92ZXJyaWRlIHt9CisgIG5ldDo6RXJyb3IgUmVhZHlGb3JTcGFyc2VJTyhDb21wbGV0aW9uT25jZUNhbGxiYWNrIGNhbGxiYWNrKSBvdmVycmlkZTsKKyAgdm9pZCBTZXRMYXN0VXNlZFRpbWVGb3JUZXN0KGJhc2U6OlRpbWUgdGltZSkgb3ZlcnJpZGU7CisKKyBwcml2YXRlOgorICBDb2JhbHRFbnRyeUltcGwoYmFzZTo6V2Vha1B0cjxDb2JhbHRCYWNrZW5kSW1wbD4gYmFja2VuZCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICBpbnQgY2hpbGRfaWQsCisgICAgICAgICAgICAgICAgICBDb2JhbHRFbnRyeUltcGwqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgIG5ldDo6TmV0TG9nKiBuZXRfbG9nKTsKKworICB1c2luZyBFbnRyeU1hcCA9IHN0ZDo6bWFwPGludCwgQ29iYWx0RW50cnlJbXBsKj47CisKKyAgc3RkOjpzdHJpbmcga2V5XzsKKworICAvLyBQb2ludGVyIHRvIHRoZSBwYXJlbnQgZW50cnksIG9yIG51bGxwdHIgaWYgdGhpcyBlbnRyeSBpcyBhIHBhcmVudCBlbnRyeS4KKyAgQ29iYWx0RW50cnlJbXBsKiBwYXJlbnRfID0gbnVsbHB0cjsKKyAgc3RkOjp1bmlxdWVfcHRyPEVudHJ5TWFwPiBjaGlsZHJlbl8gPSBudWxscHRyOworCisgIGJhc2U6OlRpbWUgbGFzdF9tb2RpZmllZF87CisgIGJhc2U6OlRpbWUgbGFzdF91c2VkXzsKKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29iYWx0RW50cnlJbXBsKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBkaXNrX2NhY2hlCisKKyNlbmRpZiAgLy8gTkVUX0RJU0tfQ0FDSEVfQ09CQUxUX0NPQkFMVF9FTlRSWV9JTVBMX0hfCmRpZmYgLS1naXQgYS9uZXQvZGlza19jYWNoZS9jb2JhbHQvcmVzb3VyY2VfdHlwZS5oIGIvbmV0L2Rpc2tfY2FjaGUvY29iYWx0L3Jlc291cmNlX3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2YyNTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2Rpc2tfY2FjaGUvY29iYWx0L3Jlc291cmNlX3R5cGUuaApAQCAtMCwwICsxLDM0IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgUkVTT1VSQ0VfVFlQRV9IXworI2RlZmluZSBSRVNPVVJDRV9UWVBFX0hfCisKK25hbWVzcGFjZSBkaXNrX2NhY2hlIHsKKworZW51bSBSZXNvdXJjZVR5cGUgeworICBrT3RoZXIgPSAwLAorICBrSFRNTCA9IDEsCisgIGtDU1MgPSAyLAorICBrSW1hZ2UgPSAzLAorICBrRm9udCA9IDQsCisgIGtTcGxhc2hTY3JlZW4gPSA1LAorICBrVW5jb21waWxlZFNjcmlwdCA9IDYsCisgIGtDb21waWxlZFNjcmlwdCA9IDcsCisgIGtUeXBlQ291bnQgPSA4Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZGlza19jYWNoZQorCisjZW5kaWYgIC8vIFJFU09VUkNFX1RZUEVfSF8KZGlmZiAtLWdpdCBhL25ldC9kaXNrX2NhY2hlL2Rpc2tfY2FjaGUuaCBiL25ldC9kaXNrX2NhY2hlL2Rpc2tfY2FjaGUuaAppbmRleCA5OGYwMGNjLi41NzJiZjBjIDEwMDY0NAotLS0gYS9uZXQvZGlza19jYWNoZS9kaXNrX2NhY2hlLmgKKysrIGIvbmV0L2Rpc2tfY2FjaGUvZGlza19jYWNoZS5oCkBAIC0xNjUsMTAgKzE2NSwxOCBAQAogICAvLyB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgZW50cnkgaXMgYXZhaWxhYmxlLiBUaGUgcG9pbnRlciB0byByZWNlaXZlIHRoZQogICAvLyB8ZW50cnl8IG11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLiBUaGUgfHByaW9yaXR5fAogICAvLyBvZiB0aGUgZW50cnkgZGV0ZXJtaW5lcyBpdHMgcHJpb3JpdHkgaW4gdGhlIGJhY2tncm91bmQgd29ya2VyIHBvb2xzLgorI2lmZGVmIFNUQVJCT0FSRAorICB2aXJ0dWFsIG5ldDo6RXJyb3IgT3BlbkVudHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpSZXF1ZXN0UHJpb3JpdHkgcHJpb3JpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW50cnkqKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spID0gMDsKKyNlbHNlCiAgIHZpcnR1YWwgbmV0OjpFcnJvciBPcGVuRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OlJlcXVlc3RQcmlvcml0eSBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeSoqIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spID0gMDsKKyNlbmRpZgogCiAgIC8vIENyZWF0ZXMgYSBuZXcgZW50cnkuIFVwb24gc3VjY2VzcywgdGhlIG91dCBwYXJhbSBob2xkcyBhIHBvaW50ZXIgdG8gYW4KICAgLy8gRW50cnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmV3bHkgY3JlYXRlZCBkaXNrIGNhY2hlIGVudHJ5LiBXaGVuIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9pbmRleF9maWxlX3N0YXJib2FyZC5jYyBiL25ldC9kaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfaW5kZXhfZmlsZV9zdGFyYm9hcmQuY2MKaW5kZXggNjQ0ZDdiMC4uYmJhNmNkNCAxMDA2NDQKLS0tIGEvbmV0L2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9pbmRleF9maWxlX3N0YXJib2FyZC5jYworKysgYi9uZXQvZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2luZGV4X2ZpbGVfc3RhcmJvYXJkLmNjCkBAIC0zNCw3ICszNCw3IEBACiAgICAgUExPRyhFUlJPUikgPDwgIm9wZW5kaXIgIiA8PCBjYWNoZV9wYXRoLnZhbHVlKCkgPDwgIiwgZXJyb246ICIgPDwgZXJyb3I7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKKwogICBzdGQ6OnZlY3RvcjxjaGFyPiBlbnRyeShrU2JGaWxlTWF4TmFtZSk7CiAKICAgd2hpbGUgKHRydWUpIHsKQEAgLTQ0LDE3ICs0NCw2IEBACiAgICAgfQogCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZV9uYW1lKGVudHJ5LmRhdGEoKSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIFNiRGlyZWN0b3J5RW50cnkgZW50cnk7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBpZiAoIVNiRGlyZWN0b3J5R2V0TmV4dChkaXIsICZlbnRyeSkpIHsKLSAgICAgIFBMT0coRVJST1IpIDw8ICJyZWFkZGlyICIgPDwgY2FjaGVfcGF0aC52YWx1ZSgpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVfbmFtZShlbnRyeS5uYW1lKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICBpZiAoZmlsZV9uYW1lID09ICIuIiB8fCBmaWxlX25hbWUgPT0gIi4uIikKICAgICAgIGNvbnRpbnVlOwogICAgIGNvbnN0IGJhc2U6OkZpbGVQYXRoIGZpbGVfcGF0aCA9CmRpZmYgLS1naXQgYS9uZXQvaHR0cC9odHRwX2NhY2hlLmNjIGIvbmV0L2h0dHAvaHR0cF9jYWNoZS5jYwppbmRleCA2NTMwNzk1Li5lYTE5Y2E5IDEwMDY0NAotLS0gYS9uZXQvaHR0cC9odHRwX2NhY2hlLmNjCisrKyBiL25ldC9odHRwL2h0dHBfY2FjaGUuY2MKQEAgLTc5LDkgKzc5LDYgQEAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8ZGlza19jYWNoZTo6QmFja2VuZD4qIGJhY2tlbmQsCiAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgewogICBEQ0hFQ0tfR0UobWF4X2J5dGVzXywgMCk7Ci0jaWYgZGVmaW5lZChTVEFSQk9BUkQpCi0gIHJldHVybiBFUlJfRkFJTEVEOwotI2Vsc2UKICNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCiAgIGlmIChhcHBfc3RhdHVzX2xpc3RlbmVyXykgewogICAgIHJldHVybiBkaXNrX2NhY2hlOjpDcmVhdGVDYWNoZUJhY2tlbmQoCkBAIC05Miw3ICs4OSw2IEBACiAgIHJldHVybiBkaXNrX2NhY2hlOjpDcmVhdGVDYWNoZUJhY2tlbmQodHlwZV8sIGJhY2tlbmRfdHlwZV8sIHBhdGhfLCBtYXhfYnl0ZXNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIG5ldF9sb2csIGJhY2tlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGNhbGxiYWNrKSk7Ci0jZW5kaWYKIH0KIAogI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKQEAgLTc4MSwxMCArNzc3LDE4IEBACiAKICAgcGVuZGluZ19vcC0+d3JpdGVyID0gc3RkOjptb3ZlKGl0ZW0pOwogCisjaWZkZWYgU1RBUkJPQVJECisgIGludCBydiA9IGRpc2tfY2FjaGVfLT5PcGVuRW50cnkoCisgICAgICBrZXksIHRyYW5zLT5wcmlvcml0eSgpLCAmKHBlbmRpbmdfb3AtPmRpc2tfZW50cnkpLCAgdHJhbnMtPnR5cGUoKSwKKyAgICAgIGJhc2U6OkJpbmRPbmNlKCZIdHRwQ2FjaGU6Ok9uUGVuZGluZ09wQ29tcGxldGUsIEdldFdlYWtQdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfb3ApKTsKKyNlbHNlCiAgIGludCBydiA9CiAgICAgICBkaXNrX2NhY2hlXy0+T3BlbkVudHJ5KGtleSwgdHJhbnMtPnByaW9yaXR5KCksICYocGVuZGluZ19vcC0+ZGlza19lbnRyeSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OkJpbmRPbmNlKCZIdHRwQ2FjaGU6Ok9uUGVuZGluZ09wQ29tcGxldGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFdlYWtQdHIoKSwgcGVuZGluZ19vcCkpOworI2VuZGlmCisKICAgaWYgKHJ2ID09IEVSUl9JT19QRU5ESU5HKSB7CiAgICAgcGVuZGluZ19vcC0+Y2FsbGJhY2tfd2lsbF9kZWxldGUgPSB0cnVlOwogICAgIHJldHVybiBydjsKZGlmZiAtLWdpdCBhL25ldC9odHRwL2h0dHBfY2FjaGUuaCBiL25ldC9odHRwL2h0dHBfY2FjaGUuaAppbmRleCBlM2YyYmVkLi41OTU4NzFhIDEwMDY0NAotLS0gYS9uZXQvaHR0cC9odHRwX2NhY2hlLmgKKysrIGIvbmV0L2h0dHAvaHR0cF9jYWNoZS5oCkBAIC01NCwxMiArNTQsNiBAQAogCiBuYW1lc3BhY2UgbmV0IHsKIAotI2lmZGVmIEhUVFBfQ0FDSEVfRElTQUJMRURfRk9SX1NUQVJCT0FSRAotCi1jbGFzcyBIdHRwQ2FjaGUge307Ci0KLSNlbHNlCi0KIGNsYXNzIEh0dHBOZXR3b3JrU2Vzc2lvbjsKIGNsYXNzIEh0dHBSZXNwb25zZUluZm87CiBjbGFzcyBJT0J1ZmZlcjsKQEAgLTYyNyw5ICs2MjEsNiBAQAogCiAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihIdHRwQ2FjaGUpOwogfTsKLQotI2VuZGlmICAvLyBIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQKLQogfSAgLy8gbmFtZXNwYWNlIG5ldAogCiAjZW5kaWYgIC8vIE5FVF9IVFRQX0hUVFBfQ0FDSEVfSF8KZGlmZiAtLWdpdCBhL25ldC9odHRwL2h0dHBfY2FjaGVfdHJhbnNhY3Rpb24uY2MgYi9uZXQvaHR0cC9odHRwX2NhY2hlX3RyYW5zYWN0aW9uLmNjCmluZGV4IGRhOTM0ZWUuLjEzMTIzYzggMTAwNjQ0Ci0tLSBhL25ldC9odHRwL2h0dHBfY2FjaGVfdHJhbnNhY3Rpb24uY2MKKysrIGIvbmV0L2h0dHAvaHR0cF9jYWNoZV90cmFuc2FjdGlvbi5jYwpAQCAtMjM1MCw2ICsyMzUwLDEwIEBACiAKICAgaWYgKHJlcXVlc3RfLT5leHRyYV9oZWFkZXJzLkhhc0hlYWRlcihIdHRwUmVxdWVzdEhlYWRlcnM6OmtSYW5nZSkpCiAgICAgcmFuZ2VfZm91bmQgPSB0cnVlOworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBpZiAocmVxdWVzdF8tPmV4dHJhX2hlYWRlcnMuSGFzSGVhZGVyKEh0dHBSZXF1ZXN0SGVhZGVyczo6a1Jlc291cmNlVHlwZSkpCisgICAgcmVxdWVzdF8tPmV4dHJhX2hlYWRlcnMuR2V0SGVhZGVyKEh0dHBSZXF1ZXN0SGVhZGVyczo6a1Jlc291cmNlVHlwZSwgJnR5cGVfKTsKKyNlbmRpZgogCiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGtTcGVjaWFsSGVhZGVycyk7ICsraSkgewogICAgIGlmIChIZWFkZXJNYXRjaGVzKHJlcXVlc3RfLT5leHRyYV9oZWFkZXJzLCBrU3BlY2lhbEhlYWRlcnNbaV0uc2VhcmNoKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2h0dHAvaHR0cF9jYWNoZV90cmFuc2FjdGlvbi5oIGIvbmV0L2h0dHAvaHR0cF9jYWNoZV90cmFuc2FjdGlvbi5oCmluZGV4IDU3MDYzYzcuLjEwMTJiMzkgMTAwNjQ0Ci0tLSBhL25ldC9odHRwL2h0dHBfY2FjaGVfdHJhbnNhY3Rpb24uaAorKysgYi9uZXQvaHR0cC9odHRwX2NhY2hlX3RyYW5zYWN0aW9uLmgKQEAgLTE5NSw2ICsxOTUsMTEgQEAKICAgLy8gdmFsdWUgaGFzIGJlZW4gc2V0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFBBUkFMTEVMX1dSSVRJTkdfTk9ORS4KICAgdm9pZCBNYXliZVNldFBhcmFsbGVsV3JpdGluZ1BhdHRlcm5Gb3JNZXRyaWNzKFBhcmFsbGVsV3JpdGluZ1BhdHRlcm4gcGF0dGVybik7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gUmV0dXJucyByZXNvdXJjZSB0eXBlIG9mIHJlcXVlc3QsIGlmIHNldC4KKyAgc3RkOjpzdHJpbmcgdHlwZSgpIHsgcmV0dXJuIHR5cGVfOyB9CisjZW5kaWYKKwogIHByaXZhdGU6CiAgIHN0YXRpYyBjb25zdCBzaXplX3Qga051bVZhbGlkYXRpb25IZWFkZXJzID0gMjsKICAgLy8gSGVscGVyIHN0cnVjdCB0byBwYWlyIGEgaGVhZGVyIG5hbWUgd2l0aCBpdHMgdmFsdWUsIGZvcgpAQCAtNTgyLDYgKzU4NywxMCBAQAogICAvLyBJZiBleHRyYV9oZWFkZXJzIHNwZWNpZmllZCBhICJpZi1tb2RpZmllZC1zaW5jZSIgb3IgImlmLW5vbmUtbWF0Y2giLAogICAvLyB8ZXh0ZXJuYWxfdmFsaWRhdGlvbl98IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aG9zZSBoZWFkZXJzLgogICBWYWxpZGF0aW9uSGVhZGVycyBleHRlcm5hbF92YWxpZGF0aW9uXzsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gSWYgZXh0cmFfaGVhZGVycyBzcGVjaWZpZWQgYSByZXNvdXJjZSB0eXBlLgorICBzdGQ6OnN0cmluZyB0eXBlXzsKKyNlbmRpZgogICBiYXNlOjpXZWFrUHRyPEh0dHBDYWNoZT4gY2FjaGVfOwogICBIdHRwQ2FjaGU6OkFjdGl2ZUVudHJ5KiBlbnRyeV87CiAgIEh0dHBDYWNoZTo6QWN0aXZlRW50cnkqIG5ld19lbnRyeV87CmRpZmYgLS1naXQgYS9uZXQvaHR0cC9odHRwX2NhY2hlX3VuaXR0ZXN0LmNjIGIvbmV0L2h0dHAvaHR0cF9jYWNoZV91bml0dGVzdC5jYwppbmRleCAwNzQwZGM4Li4xZWNkODc4IDEwMDY0NAotLS0gYS9uZXQvaHR0cC9odHRwX2NhY2hlX3VuaXR0ZXN0LmNjCisrKyBiL25ldC9odHRwL2h0dHBfY2FjaGVfdW5pdHRlc3QuY2MKQEAgLTM3MjUsNiArMzcyNSw4IEBACiAgIEVYUEVDVF9FUSgxLCBjYWNoZS5kaXNrX2NhY2hlKCktPmNyZWF0ZV9jb3VudCgpKTsKIH0KIAorLy8gVE9ETzogRW5hYmxlIHRlc3Qgd2hlbiBIVFRQIENhY2hpbmcgaXMgZnVsbHkgZnVuY3Rpb25hbC4KKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAvLyBUZXN0cyB0aGF0IHdlIGNhbiBkb29tIGFuIGVudHJ5IHdpdGggcGVuZGluZyB0cmFuc2FjdGlvbnMgYW5kIGRlbGV0ZSBvbmUgb2YKIC8vIHRoZSBwZW5kaW5nIHRyYW5zYWN0aW9ucyBiZWZvcmUgdGhlIGZpcnN0IG9uZSBjb21wbGV0ZXMuCiAvLyBTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU1ODgKQEAgLTM3NzUsNiArMzc3Nyw3IEBACiAgICAgUmVhZEFuZFZlcmlmeVRyYW5zYWN0aW9uKGMtPnRyYW5zLmdldCgpLCBrU2ltcGxlR0VUX1RyYW5zYWN0aW9uKTsKICAgfQogfQorI2VuZGlmCiAKIFRFU1RfRihIdHRwQ2FjaGVUZXN0LCBEb29tRG9lc05vdFNldEhpbnRzKSB7CiAgIC8vIFRlc3QgdGhhdCBhIGRvb21lZCB3cml0ZXIgZG9lc24ndCBzZXQgaW4tbWVtb3J5IGluZGV4IGhpbnRzLgpAQCAtNzg1Niw2ICs3ODU5LDggQEAKICAgUmVtb3ZlTW9ja1RyYW5zYWN0aW9uKCZrUmFuZ2VHRVRfVHJhbnNhY3Rpb25PSyk7CiB9CiAKKy8vIFRPRE86IEVuYWJsZSB0ZXN0IHdoZW4gSFRUUCBDYWNoaW5nIGlzIGZ1bGx5IGZ1bmN0aW9uYWwuCisjaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9URVNUSU5HX0RJU0FCTEVEKSAKIC8vIFRlc3RzIHRoYXQgd2UgaGFuZGxlIGxhcmdlIHJhbmdlIHZhbHVlcyBwcm9wZXJseS4KIFRFU1RfRihIdHRwQ2FjaGVUZXN0LCBSYW5nZUdFVF9MYXJnZVZhbHVlcykgewogICAvLyBXZSBuZWVkIGEgcmVhbCBzcGFyc2UgY2FjaGUgZm9yIHRoaXMgdGVzdC4KQEAgLTc4ODcsNiArNzg5Miw3IEBACiAKICAgUmVtb3ZlTW9ja1RyYW5zYWN0aW9uKCZrUmFuZ2VHRVRfVHJhbnNhY3Rpb25PSyk7CiB9CisjZW5kaWYKIAogLy8gVGVzdHMgdGhhdCB3ZSBkb24ndCBjcmFzaCB3aXRoIGEgcmFuZ2UgcmVxdWVzdCBpZiB0aGUgZGlzayBjYWNoZSB3YXMgbm90CiAvLyBpbml0aWFsaXplZCBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL25ldC9odHRwL2h0dHBfcmVxdWVzdF9oZWFkZXJzLmNjIGIvbmV0L2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnMuY2MKaW5kZXggMDgwNzcyZC4uMzgwMTFmNCAxMDA2NDQKLS0tIGEvbmV0L2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnMuY2MKKysrIGIvbmV0L2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnMuY2MKQEAgLTQwLDYgKzQwLDkgQEAKIGNvbnN0IGNoYXIgSHR0cFJlcXVlc3RIZWFkZXJzOjprUHJveHlDb25uZWN0aW9uW10gPSAiUHJveHktQ29ubmVjdGlvbiI7CiBjb25zdCBjaGFyIEh0dHBSZXF1ZXN0SGVhZGVyczo6a1JhbmdlW10gPSAiUmFuZ2UiOwogY29uc3QgY2hhciBIdHRwUmVxdWVzdEhlYWRlcnM6OmtSZWZlcmVyW10gPSAiUmVmZXJlciI7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitjb25zdCBjaGFyIEh0dHBSZXF1ZXN0SGVhZGVyczo6a1Jlc291cmNlVHlwZVtdID0gIlgtUmVzb3VyY2UtVHlwZSI7CisjZW5kaWYKIGNvbnN0IGNoYXIgSHR0cFJlcXVlc3RIZWFkZXJzOjprU2VjT3JpZ2luUG9saWN5W10gPSAiU2VjLU9yaWdpbi1Qb2xpY3kiOwogY29uc3QgY2hhciBIdHRwUmVxdWVzdEhlYWRlcnM6OmtUcmFuc2ZlckVuY29kaW5nW10gPSAiVHJhbnNmZXItRW5jb2RpbmciOwogY29uc3QgY2hhciBIdHRwUmVxdWVzdEhlYWRlcnM6OmtVc2VyQWdlbnRbXSA9ICJVc2VyLUFnZW50IjsKZGlmZiAtLWdpdCBhL25ldC9odHRwL2h0dHBfcmVxdWVzdF9oZWFkZXJzLmggYi9uZXQvaHR0cC9odHRwX3JlcXVlc3RfaGVhZGVycy5oCmluZGV4IDNiYjllNDMuLjE3YTIyM2IgMTAwNjQ0Ci0tLSBhL25ldC9odHRwL2h0dHBfcmVxdWVzdF9oZWFkZXJzLmgKKysrIGIvbmV0L2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnMuaApAQCAtODQsNiArODQsOSBAQAogICBzdGF0aWMgY29uc3QgY2hhciBrUHJveHlDb25uZWN0aW9uW107CiAgIHN0YXRpYyBjb25zdCBjaGFyIGtSYW5nZVtdOwogICBzdGF0aWMgY29uc3QgY2hhciBrUmVmZXJlcltdOworICAjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIHN0YXRpYyBjb25zdCBjaGFyIGtSZXNvdXJjZVR5cGVbXTsKKyAgI2VuZGlmCiAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZWNPcmlnaW5Qb2xpY3lbXTsKICAgc3RhdGljIGNvbnN0IGNoYXIga1RyYW5zZmVyRW5jb2RpbmdbXTsKICAgc3RhdGljIGNvbnN0IGNoYXIga1VzZXJBZ2VudFtdOwpkaWZmIC0tZ2l0IGEvbmV0L2h0dHAvbW9ja19odHRwX2NhY2hlLmNjIGIvbmV0L2h0dHAvbW9ja19odHRwX2NhY2hlLmNjCmluZGV4IDczODNkMmIuLjNlOTAyNzUgMTAwNjQ0Ci0tLSBhL25ldC9odHRwL21vY2tfaHR0cF9jYWNoZS5jYworKysgYi9uZXQvaHR0cC9tb2NrX2h0dHBfY2FjaGUuY2MKQEAgLTQyMCw2ICs0MjAsNyBAQAogbmV0OjpFcnJvciBNb2NrRGlza0NhY2hlOjpPcGVuRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldDo6UmVxdWVzdFByaW9yaXR5IHJlcXVlc3RfcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNrX2NhY2hlOjpFbnRyeSoqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25PbmNlQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgRENIRUNLKCFjYWxsYmFjay5pc19udWxsKCkpOwogICBpZiAoZmFpbF9yZXF1ZXN0c18pCkBAIC03MDQsNyArNzA1LDcgQEAKIGJvb2wgTW9ja0h0dHBDYWNoZTo6T3BlbkJhY2tlbmRFbnRyeShjb25zdCBzdGQ6OnN0cmluZyYga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfY2FjaGU6OkVudHJ5KiogZW50cnkpIHsKICAgVGVzdENvbXBsZXRpb25DYWxsYmFjayBjYjsKLSAgaW50IHJ2ID0gYmFja2VuZCgpLT5PcGVuRW50cnkoa2V5LCBuZXQ6OkhJR0hFU1QsIGVudHJ5LCBjYi5jYWxsYmFjaygpKTsKKyAgaW50IHJ2ID0gYmFja2VuZCgpLT5PcGVuRW50cnkoa2V5LCBuZXQ6OkhJR0hFU1QsIGVudHJ5LCAiMCIsIGNiLmNhbGxiYWNrKCkpOwogICByZXR1cm4gKGNiLkdldFJlc3VsdChydikgPT0gT0spOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaHR0cC9tb2NrX2h0dHBfY2FjaGUuaCBiL25ldC9odHRwL21vY2tfaHR0cF9jYWNoZS5oCmluZGV4IGJmZDA4MjIuLjcwYTkyOGEgMTAwNjQ0Ci0tLSBhL25ldC9odHRwL21vY2tfaHR0cF9jYWNoZS5oCisrKyBiL25ldC9odHRwL21vY2tfaHR0cF9jYWNoZS5oCkBAIC0xNTEsNiArMTUxLDcgQEAKICAgbmV0OjpFcnJvciBPcGVuRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgbmV0OjpSZXF1ZXN0UHJpb3JpdHkgcmVxdWVzdF9wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgZGlza19jYWNoZTo6RW50cnkqKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbk9uY2VDYWxsYmFjayBjYWxsYmFjaykgb3ZlcnJpZGU7CiAgIG5ldDo6RXJyb3IgQ3JlYXRlRW50cnkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQ6OlJlcXVlc3RQcmlvcml0eSByZXF1ZXN0X3ByaW9yaXR5LApkaWZmIC0tZ2l0IGEvbmV0L2xvZy9uZXRfbG9nX3V0aWwuY2MgYi9uZXQvbG9nL25ldF9sb2dfdXRpbC5jYwppbmRleCA2MTM0ZjAyLi43MTZiMzhhIDEwMDY0NAotLS0gYS9uZXQvbG9nL25ldF9sb2dfdXRpbC5jYworKysgYi9uZXQvbG9nL25ldF9sb2dfdXRpbC5jYwpAQCAtMTA2LDkgKzEwNiw2IEBACiAvLyBSZXR1cm5zIHRoZSBkaXNrIGNhY2hlIGJhY2tlbmQgZm9yIHxjb250ZXh0fCBpZiB0aGVyZSBpcyBvbmUsIG9yIE5VTEwuCiAvLyBEZXNwaXRlIHRoZSBuYW1lLCBjYW4gcmV0dXJuIGFuIGluIG1lbW9yeSAiZGlzayBjYWNoZSIuCiBkaXNrX2NhY2hlOjpCYWNrZW5kKiBHZXREaXNrQ2FjaGVCYWNrZW5kKFVSTFJlcXVlc3RDb250ZXh0KiBjb250ZXh0KSB7Ci0jaWZkZWYgSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECi0gIHJldHVybiBOVUxMOwotI2Vsc2UKICAgaWYgKCFjb250ZXh0LT5odHRwX3RyYW5zYWN0aW9uX2ZhY3RvcnkoKSkKICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTE3LDcgKzExNCw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiAKICAgcmV0dXJuIGh0dHBfY2FjaGUtPkdldEN1cnJlbnRCYWNrZW5kKCk7Ci0jZW5kaWYKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHxyZXF1ZXN0MXwgd2FzIGNyZWF0ZWQgYmVmb3JlIHxyZXF1ZXN0MnwuCmRpZmYgLS1naXQgYS9uZXQvbmV0Lmd5cCBiL25ldC9uZXQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkxNTAwLi4wMDAwMDAwCi0tLSBhL25ldC9uZXQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzAyMSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2Nocm9taXVtX2NvZGUnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmV0JywKLSAgICAgICd0eXBlJzogJzwoY29tcG9uZW50KScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ05FVF9JTVBMRU1FTlRBVElPTicsCi0gICAgICAgICdFTkFCTEVfQlVJTFRfSU5fRE5TJywKLSAgICAgICAgIyBUbyBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgd2hlbiB3YW50IHRvIGVuYWJsZSBIVFRQIGNhY2hlLgotICAgICAgICAnSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJEJywKLSAgICAgICAgJ1FVSUNfVFJBQ0VfRElTQUJMRUQnLAotICAgICAgICAnQ09CQUxUX1FVSUM0NicsCi0gICAgICAgICdDT01NT05fQ0VSVF9TRVRfRElTQUJMRURfRk9SX1NUQVJCT0FSRCcsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQnLAotICAgICAgICAgICdFTkFCTEVfQlVJTFRfSU5fRE5TJywKLSAgICAgICAgICAnUVVJQ19UUkFDRV9ESVNBQkxFRCcsCi0gICAgICAgICAgJ0NPQkFMVF9RVUlDNDYnLAotICAgICAgICAgICdDT01NT05fQ0VSVF9TRVRfRElTQUJMRURfRk9SX1NUQVJCT0FSRCcsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpJywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2Jyb3RsaS9jL2RlYycsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9icm90bGkvYy9pbmNsdWRlJywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2VfaTE4bicsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAgICc8KERFUFRIKS9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgICAgJzwoREVQVEgpL25iL25iLmd5cDpuYicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYm9yaW5nc3NsL2JvcmluZ3NzbC5neXA6Y3J5cHRvJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2Jyb3RsaS9icm90bGkuZ3lwOmRlYycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3VpMThuJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cDpwcm90b2J1Zl9saXRlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICAgICduZXRfZ2VuZXJhdGVkX3JlZ2lzdHJ5X2NvbnRyb2xsZWRfZG9tYWlucycsCi0gICAgICAgICduZXRfbnFlX3Byb3RvJywKLSAgICAgICAgJ25ldF9xdWljX3Byb3RvJywKLSAgICAgIF0sCi0gICAgICAjIG5ldCBkZXBlbmRzIG9uIHNvbWUgcHJvdG9idWYgZmlsZXMgdGhhdCBoYXMgdG8gYmUgZ2VuZXJhdGVkIGJlZm9yZWhhbmQuCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2UvYWRkcmVzc19mYW1pbHkuY2MnLAotICAgICAgICAnYmFzZS9hZGRyZXNzX2ZhbWlseS5oJywKLSAgICAgICAgJ2Jhc2UvYWRkcmVzc19saXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvYWRkcmVzc19saXN0LmgnLAotICAgICAgICAnYmFzZS9hdXRoLmNjJywKLSAgICAgICAgJ2Jhc2UvYXV0aC5oJywKLSAgICAgICAgJ2Jhc2UvY29tcGxldGlvbl9jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvY29tcGxldGlvbl9vbmNlX2NhbGxiYWNrLmgnLAotICAgICAgICAnYmFzZS9jb21wbGV0aW9uX3JlcGVhdGluZ19jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvZGF0YWdyYW1fYnVmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvZGF0YWdyYW1fYnVmZmVyLmgnLAotICAgICAgICAnYmFzZS9lc2NhcGUuY2MnLAotICAgICAgICAnYmFzZS9lc2NhcGUuaCcsCi0gICAgICAgICdiYXNlL2ZlYXR1cmVzLmNjJywKLSAgICAgICAgJ2Jhc2UvZmVhdHVyZXMuaCcsCi0gICAgICAgICdiYXNlL2ZpbGVuYW1lX3V0aWxfaWN1LmNjJywKLSAgICAgICAgJ2Jhc2UvaGFzaF92YWx1ZS5jYycsCi0gICAgICAgICdiYXNlL2hhc2hfdmFsdWUuaCcsCi0gICAgICAgICdiYXNlL2hvc3RfcG9ydF9wYWlyLmNjJywKLSAgICAgICAgJ2Jhc2UvaG9zdF9wb3J0X3BhaXIuaCcsCi0gICAgICAgICdiYXNlL2ludGVydmFsLmgnLAotICAgICAgICAnYmFzZS9pbnRlcnZhbF9zZXQuaCcsCi0gICAgICAgICdiYXNlL2lvX2J1ZmZlci5jYycsCi0gICAgICAgICdiYXNlL2lvX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2UvaXBfYWRkcmVzcy5jYycsCi0gICAgICAgICdiYXNlL2lwX2FkZHJlc3MuaCcsCi0gICAgICAgICdiYXNlL2lwX2VuZHBvaW50LmNjJywKLSAgICAgICAgJ2Jhc2UvaXBfZW5kcG9pbnQuaCcsCi0gICAgICAgICdiYXNlL2xvYWRfdGltaW5nX2luZm8uY2MnLAotICAgICAgICAnYmFzZS9sb2FkX3RpbWluZ19pbmZvLmgnLAotICAgICAgICAnYmFzZS9sb29rdXBfc3RyaW5nX2luX2ZpeGVkX3NldC5jYycsCi0gICAgICAgICdiYXNlL2xvb2t1cF9zdHJpbmdfaW5fZml4ZWRfc2V0LmgnLAotICAgICAgICAnYmFzZS9uZXRfZXJyb3JfZGV0YWlscy5oJywKLSAgICAgICAgJ2Jhc2UvbmV0X2Vycm9yX2xpc3QuaCcsCi0gICAgICAgICdiYXNlL25ldF9lcnJvcnMuY2MnLAotICAgICAgICAnYmFzZS9uZXRfZXJyb3JzLmgnLAotICAgICAgICAnYmFzZS9uZXRfZXJyb3JzX3N0YXJib2FyZC5jYycsCi0gICAgICAgICdiYXNlL25ldF9leHBvcnQuaCcsCi0gICAgICAgICdiYXNlL25ldF9tb2R1bGUuY2MnLAotICAgICAgICAnYmFzZS9uZXRfbW9kdWxlLmgnLAotICAgICAgICAnYmFzZS9uZXRfc3RyaW5nX3V0aWwuaCcsCi0gICAgICAgICdiYXNlL25ldF9zdHJpbmdfdXRpbF9pY3UuY2MnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2ludGVyZmFjZXMuY2MnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2ludGVyZmFjZXMuaCcsCi0gICAgICAgICdiYXNlL25ldHdvcmtfaW50ZXJmYWNlc19zdGFyYm9hcmQuY2MnLAotICAgICAgICAnYmFzZS9wYXJzZV9udW1iZXIuY2MnLAotICAgICAgICAnYmFzZS9wYXJzZV9udW1iZXIuaCcsCi0gICAgICAgICdiYXNlL3BvcnRfdXRpbC5jYycsCi0gICAgICAgICdiYXNlL3BvcnRfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvcHJpdmFjeV9tb2RlLmgnLAotICAgICAgICAnYmFzZS9yYW5kX2NhbGxiYWNrLmgnLAotICAgICAgICAnYmFzZS9yZWdpc3RyeV9jb250cm9sbGVkX2RvbWFpbnMvcmVnaXN0cnlfY29udHJvbGxlZF9kb21haW4uY2MnLAotICAgICAgICAnYmFzZS9yZWdpc3RyeV9jb250cm9sbGVkX2RvbWFpbnMvcmVnaXN0cnlfY29udHJvbGxlZF9kb21haW4uaCcsCi0gICAgICAgICdiYXNlL3NvY2thZGRyX3N0b3JhZ2UuaCcsCi0gICAgICAgICdiYXNlL3N5c19hZGRyaW5mby5oJywKLSAgICAgICAgJ2Jhc2UvdXJsX3V0aWwuY2MnLAotICAgICAgICAnYmFzZS91cmxfdXRpbC5oJywKLSAgICAgICAgJ2NlcnQvYXNuMV91dGlsLmNjJywKLSAgICAgICAgJ2NlcnQvYXNuMV91dGlsLmgnLAotICAgICAgICAnY2VydC9jZXJ0X2RhdGFiYXNlLmNjJywKLSAgICAgICAgJ2NlcnQvY2VydF9kYXRhYmFzZS5oJywKLSAgICAgICAgJ2NlcnQvY2VydF9zdGF0dXNfZmxhZ3MuY2MnLAotICAgICAgICAnY2VydC9jZXJ0X3N0YXR1c19mbGFncy5oJywKLSAgICAgICAgJ2NlcnQvY2VydF9zdGF0dXNfZmxhZ3NfbGlzdC5oJywKLSAgICAgICAgJ2NlcnQvY2VydF92ZXJpZmllci5jYycsCi0gICAgICAgICdjZXJ0L2NlcnRfdmVyaWZpZXIuaCcsCi0gICAgICAgICdjZXJ0L2NlcnRfdmVyaWZ5X3Jlc3VsdC5jYycsCi0gICAgICAgICdjZXJ0L2NlcnRfdmVyaWZ5X3Jlc3VsdC5oJywKLSAgICAgICAgJ2NlcnQvY2xpZW50X2NlcnRfdmVyaWZpZXIuaCcsCi0gICAgICAgICdjZXJ0L2NybF9zZXQuY2MnLAotICAgICAgICAnY2VydC9jcmxfc2V0LmgnLAotICAgICAgICAnY2VydC9jdF9wb2xpY3lfZW5mb3JjZXIuY2MnLAotICAgICAgICAnY2VydC9jdF9wb2xpY3lfZW5mb3JjZXIuaCcsCi0gICAgICAgICdjZXJ0L2N0X3BvbGljeV9zdGF0dXMuaCcsCi0gICAgICAgICdjZXJ0L2N0X3ZlcmlmaWVyLmgnLAotICAgICAgICAnY2VydC9jdF92ZXJpZnlfcmVzdWx0LmNjJywKLSAgICAgICAgJ2NlcnQvY3RfdmVyaWZ5X3Jlc3VsdC5oJywKLSAgICAgICAgJ2NlcnQvZG9fbm90aGluZ19jdF92ZXJpZmllci5jYycsCi0gICAgICAgICdjZXJ0L2RvX25vdGhpbmdfY3RfdmVyaWZpZXIuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRfZXJyb3JfaWQuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2Vycm9yX2lkLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2Vycm9yX3BhcmFtcy5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRfZXJyb3JfcGFyYW1zLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2Vycm9ycy5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRfZXJyb3JzLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2lzc3Vlcl9zb3VyY2UuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRfaXNzdWVyX3NvdXJjZV9haWEuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2lzc3Vlcl9zb3VyY2VfYWlhLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2lzc3Vlcl9zb3VyY2Vfc3RhdGljLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvY2VydF9pc3N1ZXJfc291cmNlX3N0YXRpYy5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvY2VydGlmaWNhdGVfcG9saWNpZXMuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0aWZpY2F0ZV9wb2xpY2llcy5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvY29tbW9uX2NlcnRfZXJyb3JzLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvY29tbW9uX2NlcnRfZXJyb3JzLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9leHRlbmRlZF9rZXlfdXNhZ2UuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9leHRlbmRlZF9rZXlfdXNhZ2UuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2dlbmVyYWxfbmFtZXMuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9nZW5lcmFsX25hbWVzLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9uYW1lX2NvbnN0cmFpbnRzLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvbmFtZV9jb25zdHJhaW50cy5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvb2NzcC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL29jc3AuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhcnNlX2NlcnRpZmljYXRlLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvcGFyc2VfY2VydGlmaWNhdGUuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhcnNlX25hbWUuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9wYXJzZV9uYW1lLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9wYXJzZWRfY2VydGlmaWNhdGUuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9wYXJzZWRfY2VydGlmaWNhdGUuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhdGhfYnVpbGRlci5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhdGhfYnVpbGRlci5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvcmV2b2NhdGlvbl9jaGVja2VyLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvcmV2b2NhdGlvbl9jaGVja2VyLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9zaWduYXR1cmVfYWxnb3JpdGhtLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvc2lnbmF0dXJlX2FsZ29yaXRobS5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvc2ltcGxlX3BhdGhfYnVpbGRlcl9kZWxlZ2F0ZS5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3NpbXBsZV9wYXRoX2J1aWxkZXJfZGVsZWdhdGUuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3RydXN0X3N0b3JlLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvdHJ1c3Rfc3RvcmUuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3RydXN0X3N0b3JlX2NvbGxlY3Rpb24uY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9jb2xsZWN0aW9uLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9pbl9tZW1vcnkuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9pbl9tZW1vcnkuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3RydXN0X3N0b3JlX2luX21lbW9yeV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC90cnVzdF9zdG9yZV9pbl9tZW1vcnlfc3RhcmJvYXJkLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC92ZXJpZnlfY2VydGlmaWNhdGVfY2hhaW4uY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC92ZXJpZnlfY2VydGlmaWNhdGVfY2hhaW4uaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3ZlcmlmeV9uYW1lX21hdGNoLmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvdmVyaWZ5X25hbWVfbWF0Y2guaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3ZlcmlmeV9zaWduZWRfZGF0YS5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3ZlcmlmeV9zaWduZWRfZGF0YS5oJywKLSAgICAgICAgJ2NlcnQvb2NzcF9yZXZvY2F0aW9uX3N0YXR1cy5oJywKLSAgICAgICAgJ2NlcnQvb2NzcF92ZXJpZnlfcmVzdWx0LmNjJywKLSAgICAgICAgJ2NlcnQvb2NzcF92ZXJpZnlfcmVzdWx0LmgnLAotICAgICAgICAnY2VydC9wZW1fdG9rZW5pemVyLmNjJywKLSAgICAgICAgJ2NlcnQvcGVtX3Rva2VuaXplci5oJywKLSAgICAgICAgJ2NlcnQvc2N0X3N0YXR1c19mbGFncy5jYycsCi0gICAgICAgICdjZXJ0L3NjdF9zdGF0dXNfZmxhZ3MuaCcsCi0gICAgICAgICdjZXJ0L3NpZ25lZF9jZXJ0aWZpY2F0ZV90aW1lc3RhbXAuY2MnLAotICAgICAgICAnY2VydC9zaWduZWRfY2VydGlmaWNhdGVfdGltZXN0YW1wLmgnLAotICAgICAgICAnY2VydC9zaWduZWRfY2VydGlmaWNhdGVfdGltZXN0YW1wX2FuZF9zdGF0dXMuY2MnLAotICAgICAgICAnY2VydC9zaWduZWRfY2VydGlmaWNhdGVfdGltZXN0YW1wX2FuZF9zdGF0dXMuaCcsCi0gICAgICAgICdjZXJ0L3NpZ25lZF90cmVlX2hlYWQuY2MnLAotICAgICAgICAnY2VydC9zaWduZWRfdHJlZV9oZWFkLmgnLAotICAgICAgICAnY2VydC9zeW1hbnRlY19jZXJ0cy5jYycsCi0gICAgICAgICdjZXJ0L3N5bWFudGVjX2NlcnRzLmgnLAotICAgICAgICAnY2VydC90ZXN0X3Jvb3RfY2VydHMuY2MnLAotICAgICAgICAnY2VydC90ZXN0X3Jvb3RfY2VydHMuaCcsCi0gICAgICAgICdjZXJ0L3Rlc3Rfcm9vdF9jZXJ0c19zdGFyYm9hcmQuY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRfdHlwZXMuY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRfdHlwZXMuaCcsCi0gICAgICAgICdjZXJ0L3g1MDlfY2VydGlmaWNhdGUuY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRpZmljYXRlLmgnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRpZmljYXRlX25ldF9sb2dfcGFyYW0uY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRpZmljYXRlX25ldF9sb2dfcGFyYW0uaCcsCi0gICAgICAgICdjZXJ0L3g1MDlfdXRpbC5jYycsCi0gICAgICAgICdjZXJ0L3g1MDlfdXRpbC5oJywKLSAgICAgICAgJ2Rlci9lbmNvZGVfdmFsdWVzLmNjJywKLSAgICAgICAgJ2Rlci9lbmNvZGVfdmFsdWVzLmgnLAotICAgICAgICAnZGVyL2lucHV0LmNjJywKLSAgICAgICAgJ2Rlci9pbnB1dC5oJywKLSAgICAgICAgJ2Rlci9wYXJzZV92YWx1ZXMuY2MnLAotICAgICAgICAnZGVyL3BhcnNlX3ZhbHVlcy5oJywKLSAgICAgICAgJ2Rlci9wYXJzZXIuY2MnLAotICAgICAgICAnZGVyL3BhcnNlci5oJywKLSAgICAgICAgJ2Rlci90YWcuY2MnLAotICAgICAgICAnZGVyL3RhZy5oJywKLQotICAgICAgICAjIGRpYWwgaXMgYSBsZWdhY3kgQ2hyb21pdW0gY29tcG9uZW50IHdpdGggaGVhdnkgQ29iYWx0IG1vZGlmaWNhdGlvbnMuCi0gICAgICAgICdkaWFsL2RpYWxfaHR0cF9zZXJ2ZXIuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX2h0dHBfc2VydmVyLmgnLAotICAgICAgICAnZGlhbC9kaWFsX3NlcnZpY2UuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX3NlcnZpY2UuaCcsCi0gICAgICAgICdkaWFsL2RpYWxfc2VydmljZV9oYW5kbGVyLmgnLAotICAgICAgICAnZGlhbC9kaWFsX3N5c3RlbV9jb25maWcuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX3N5c3RlbV9jb25maWcuaCcsCi0gICAgICAgICdkaWFsL2RpYWxfc3lzdGVtX2NvbmZpZ19zdGFyYm9hcmQuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX3VkcF9zZXJ2ZXIuY2MnLAotICAgICAgICAnZGlhbC9kaWFsX3VkcF9zZXJ2ZXIuaCcsCi0gICAgICAgICdkaWFsL2RpYWxfdWRwX3NvY2tldF9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2RpYWwvZGlhbF91ZHBfc29ja2V0X2ZhY3RvcnkuaCcsCi0KLSAgICAgICAgJ2V4dHJhcy9wcmVsb2FkX2RhdGEvZGVjb2Rlci5jYycsCi0gICAgICAgICdleHRyYXMvcHJlbG9hZF9kYXRhL2RlY29kZXIuaCcsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9jaGFsbGVuZ2VfdG9rZW5pemVyLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2NoYWxsZW5nZV90b2tlbml6ZXIuaCcsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9zY2hlbWUuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfc2NoZW1lLmgnLAotICAgICAgICAnaHR0cC9odHRwX2J5dGVfcmFuZ2UuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2J5dGVfcmFuZ2UuaCcsCi0gICAgICAgICdodHRwL2h0dHBfbG9nX3V0aWwuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2xvZ191dGlsLmgnLAotICAgICAgICAnaHR0cC9odHRwX3Jhd19yZXF1ZXN0X2hlYWRlcnMuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Jhd19yZXF1ZXN0X2hlYWRlcnMuaCcsCi0gICAgICAgICdodHRwL2h0dHBfcmVxdWVzdF9oZWFkZXJzLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnMuaCcsCi0gICAgICAgICdodHRwL2h0dHBfcmVzcG9uc2VfaGVhZGVycy5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcmVzcG9uc2VfaGVhZGVycy5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXNwb25zZV9pbmZvLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXNwb25zZV9pbmZvLmgnLAotICAgICAgICAnaHR0cC9odHRwX3NlY3VyaXR5X2hlYWRlcnMuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3NlY3VyaXR5X2hlYWRlcnMuaCcsCi0gICAgICAgICdodHRwL2h0dHBfc3RhdHVzX2NvZGVfbGlzdC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF91dGlsLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF91dGlsLmgnLAotICAgICAgICAnaHR0cC9odHRwX3ZhcnlfZGF0YS5jYycsCi0gICAgICAgICdodHRwL2h0dHBfdmFyeV9kYXRhLmgnLAotICAgICAgICAnaHR0cC91cmxfc2VjdXJpdHlfbWFuYWdlci5jYycsCi0gICAgICAgICdodHRwL3VybF9zZWN1cml0eV9tYW5hZ2VyLmgnLAotICAgICAgICAnaHR0cC91cmxfc2VjdXJpdHlfbWFuYWdlcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnaHR0cC90cmFuc3BvcnRfc2VjdXJpdHlfc3RhdGUuY2MnLAotICAgICAgICAnaHR0cC90cmFuc3BvcnRfc2VjdXJpdHlfc3RhdGUuaCcsCi0gICAgICAgICdodHRwL3RyYW5zcG9ydF9zZWN1cml0eV9zdGF0ZV9zb3VyY2UuY2MnLAotICAgICAgICAnaHR0cC90cmFuc3BvcnRfc2VjdXJpdHlfc3RhdGVfc291cmNlLmgnLAotICAgICAgICAnbG9nL25ldF9sb2cuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2cuaCcsCi0gICAgICAgICdsb2cvZmlsZV9uZXRfbG9nX29ic2VydmVyLmNjJywKLSAgICAgICAgJ2xvZy9maWxlX25ldF9sb2dfb2JzZXJ2ZXIuaCcsCi0gICAgICAgICdsb2cvbmV0X2xvZ19jYXB0dXJlX21vZGUuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2dfY2FwdHVyZV9tb2RlLmgnLAotICAgICAgICAnbG9nL25ldF9sb2dfZW50cnkuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2dfZW50cnkuaCcsCi0gICAgICAgICdsb2cvbmV0X2xvZ19ldmVudF90eXBlLmgnLAotICAgICAgICAnbG9nL25ldF9sb2dfZXZlbnRfdHlwZV9saXN0LmgnLAotICAgICAgICAnbG9nL25ldF9sb2dfcGFyYW1ldGVyc19jYWxsYmFjay5oJywKLSAgICAgICAgJ2xvZy9uZXRfbG9nX3NvdXJjZS5jYycsCi0gICAgICAgICdsb2cvbmV0X2xvZ19zb3VyY2UuaCcsCi0gICAgICAgICdsb2cvbmV0X2xvZ19zb3VyY2VfdHlwZS5oJywKLSAgICAgICAgJ2xvZy9uZXRfbG9nX3NvdXJjZV90eXBlX2xpc3QuaCcsCi0gICAgICAgICdsb2cvbmV0X2xvZ193aXRoX3NvdXJjZS5jYycsCi0gICAgICAgICdsb2cvbmV0X2xvZ193aXRoX3NvdXJjZS5oJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X2hhbmRsZS5jYycsCi0gICAgICAgICdzb2NrZXQvY2xpZW50X3NvY2tldF9oYW5kbGUuaCcsCi0gICAgICAgICdzb2NrZXQvY29ubmVjdGlvbl9hdHRlbXB0cy5oJywKLSAgICAgICAgJ3NvY2tldC9uZXh0X3Byb3RvLmNjJywKLSAgICAgICAgJ3NvY2tldC9uZXh0X3Byb3RvLmgnLAotICAgICAgICAnc29ja2V0L3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja2V0LmgnLAotICAgICAgICAnc29ja2V0L3NvY2tldF9iaW9fYWRhcHRlci5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja2V0X2Jpb19hZGFwdGVyLmgnLAotICAgICAgICAnc29ja2V0L3NvY2tldF9wZXJmb3JtYW5jZV93YXRjaGVyLmgnLAotICAgICAgICAnc29ja2V0L3NvY2tldF9wZXJmb3JtYW5jZV93YXRjaGVyX2ZhY3RvcnkuaCcsCi0gICAgICAgICdzb2NrZXQvc3NsX2NsaWVudF9zb2NrZXQuY2MnLAotICAgICAgICAnc29ja2V0L3NzbF9jbGllbnRfc29ja2V0LmgnLAotICAgICAgICAnc29ja2V0L3NzbF9jbGllbnRfc29ja2V0X2ltcGwuY2MnLAotICAgICAgICAnc29ja2V0L3NzbF9jbGllbnRfc29ja2V0X2ltcGwuaCcsCi0gICAgICAgICdzb2NrZXQvc3NsX3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC9zdHJlYW1fc29ja2V0LmNjJywKLSAgICAgICAgJ3NvY2tldC9zdHJlYW1fc29ja2V0LmgnLAotICAgICAgICAnc3NsL2NoYW5uZWxfaWRfc2VydmljZS5jYycsCi0gICAgICAgICdzc2wvY2hhbm5lbF9pZF9zZXJ2aWNlLmgnLAotICAgICAgICAnc3NsL2NoYW5uZWxfaWRfc3RvcmUuY2MnLAotICAgICAgICAnc3NsL2NoYW5uZWxfaWRfc3RvcmUuaCcsCi0gICAgICAgICdzc2wvY2xpZW50X2NlcnRfaWRlbnRpdHkuY2MnLAotICAgICAgICAnc3NsL2NsaWVudF9jZXJ0X2lkZW50aXR5LmgnLAotICAgICAgICAnc3NsL2RlZmF1bHRfY2hhbm5lbF9pZF9zdG9yZS5jYycsCi0gICAgICAgICdzc2wvZGVmYXVsdF9jaGFubmVsX2lkX3N0b3JlLmgnLAotICAgICAgICAnc3NsL29wZW5zc2xfc3NsX3V0aWwuY2MnLAotICAgICAgICAnc3NsL29wZW5zc2xfc3NsX3V0aWwuaCcsCi0gICAgICAgICdzc2wvc3NsX2NlcnRfcmVxdWVzdF9pbmZvLmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY2VydF9yZXF1ZXN0X2luZm8uaCcsCi0gICAgICAgICdzc2wvc3NsX2NpcGhlcl9zdWl0ZV9uYW1lcy5jYycsCi0gICAgICAgICdzc2wvc3NsX2NpcGhlcl9zdWl0ZV9uYW1lcy5oJywKLSAgICAgICAgJ3NzbC9zc2xfY2xpZW50X2F1dGhfY2FjaGUuY2MnLAotICAgICAgICAnc3NsL3NzbF9jbGllbnRfYXV0aF9jYWNoZS5oJywKLSAgICAgICAgJ3NzbC9zc2xfY2xpZW50X2NlcnRfdHlwZS5oJywKLSAgICAgICAgJ3NzbC9zc2xfY2xpZW50X3Nlc3Npb25fY2FjaGUuY2MnLAotICAgICAgICAnc3NsL3NzbF9jbGllbnRfc2Vzc2lvbl9jYWNoZS5oJywKLSAgICAgICAgJ3NzbC9zc2xfY29uZmlnLmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY29uZmlnLmgnLAotICAgICAgICAnc3NsL3NzbF9jb25maWdfc2VydmljZS5jYycsCi0gICAgICAgICdzc2wvc3NsX2NvbmZpZ19zZXJ2aWNlLmgnLAotICAgICAgICAnc3NsL3NzbF9jb25uZWN0aW9uX3N0YXR1c19mbGFncy5oJywKLSAgICAgICAgJ3NzbC9zc2xfaW5mby5jYycsCi0gICAgICAgICdzc2wvc3NsX2luZm8uaCcsCi0gICAgICAgICdzc2wvc3NsX2tleV9sb2dnZXIuaCcsCi0gICAgICAgICdzc2wvc3NsX2tleV9sb2dnZXJfaW1wbC5jYycsCi0gICAgICAgICdzc2wvc3NsX2tleV9sb2dnZXJfaW1wbC5oJywKLSAgICAgICAgJ3NzbC9zc2xfcHJpdmF0ZV9rZXkuY2MnLAotICAgICAgICAnc3NsL3NzbF9wcml2YXRlX2tleS5oJywKLSAgICAgICAgJ3NzbC9zc2xfc2VydmVyX2NvbmZpZy5jYycsCi0gICAgICAgICdzc2wvc3NsX3NlcnZlcl9jb25maWcuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19lcnJvcl9jb2Rlcy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19lcnJvcl9jb2Rlcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3VyaV90ZW1wbGF0ZS91cmlfdGVtcGxhdGUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvdXJpX3RlbXBsYXRlL3VyaV90ZW1wbGF0ZS5oJywKLQotICAgICAgICAnYmFzZS9hcmVuYS5jYycsCi0gICAgICAgICdiYXNlL2FyZW5hLmgnLAotICAgICAgICAnYmFzZS9iYWNrb2ZmX2VudHJ5LmNjJywKLSAgICAgICAgJ2Jhc2UvYmFja29mZl9lbnRyeS5oJywKLSAgICAgICAgJ2Jhc2UvYmFja29mZl9lbnRyeV9zZXJpYWxpemVyLmNjJywKLSAgICAgICAgJ2Jhc2UvYmFja29mZl9lbnRyeV9zZXJpYWxpemVyLmgnLAotICAgICAgICAnYmFzZS9jYWNoZV90eXBlLmgnLAotICAgICAgICAnYmFzZS9jaHVua2VkX3VwbG9hZF9kYXRhX3N0cmVhbS5jYycsCi0gICAgICAgICdiYXNlL2NodW5rZWRfdXBsb2FkX2RhdGFfc3RyZWFtLmgnLAotICAgICAgICAnYmFzZS9kYXRhX3VybC5jYycsCi0gICAgICAgICdiYXNlL2RhdGFfdXJsLmgnLAotICAgICAgICAnYmFzZS9kaXJlY3RvcnlfbGlzdGluZy5jYycsCi0gICAgICAgICdiYXNlL2RpcmVjdG9yeV9saXN0aW5nLmgnLAotICAgICAgICAnYmFzZS9lbGVtZW50c191cGxvYWRfZGF0YV9zdHJlYW0uY2MnLAotICAgICAgICAnYmFzZS9lbGVtZW50c191cGxvYWRfZGF0YV9zdHJlYW0uaCcsCi0gICAgICAgICdiYXNlL2V4cGlyaW5nX2NhY2hlLmgnLAotICAgICAgICAnYmFzZS9maWxlX3N0cmVhbS5jYycsCi0gICAgICAgICdiYXNlL2ZpbGVfc3RyZWFtLmgnLAotICAgICAgICAnYmFzZS9maWxlX3N0cmVhbV9jb250ZXh0LmNjJywKLSAgICAgICAgJ2Jhc2UvZmlsZV9zdHJlYW1fY29udGV4dC5oJywKLSAgICAgICAgJ2Jhc2UvZmlsZV9zdHJlYW1fY29udGV4dF9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnYmFzZS9maWxlbmFtZV91dGlsLmNjJywKLSAgICAgICAgJ2Jhc2UvZmlsZW5hbWVfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvZmlsZW5hbWVfdXRpbF9pbnRlcm5hbC5jYycsCi0gICAgICAgICdiYXNlL2ZpbGVuYW1lX3V0aWxfaW50ZXJuYWwuaCcsCi0gICAgICAgICdiYXNlL2hleF91dGlscy5jYycsCi0gICAgICAgICdiYXNlL2hleF91dGlscy5oJywKLSAgICAgICAgJ2Jhc2UvaG9zdF9tYXBwaW5nX3J1bGVzLmNjJywKLSAgICAgICAgJ2Jhc2UvaG9zdF9tYXBwaW5nX3J1bGVzLmgnLAotICAgICAgICAnYmFzZS9pb3ZlYy5oJywKLSAgICAgICAgJ2Jhc2UvaXBfcGF0dGVybi5jYycsCi0gICAgICAgICdiYXNlL2lwX3BhdHRlcm4uaCcsCi0gICAgICAgICdiYXNlL2xheWVyZWRfbmV0d29ya19kZWxlZ2F0ZS5jYycsCi0gICAgICAgICdiYXNlL2xheWVyZWRfbmV0d29ya19kZWxlZ2F0ZS5oJywKLSAgICAgICAgJ2Jhc2UvbGlua2VkX2hhc2hfbWFwLmgnLAotICAgICAgICAnYmFzZS9sb2FkX2ZsYWdzLmgnLAotICAgICAgICAnYmFzZS9sb2FkX2ZsYWdzX2xpc3QuaCcsCi0gICAgICAgICdiYXNlL2xvYWRfc3RhdGVzLmgnLAotICAgICAgICAnYmFzZS9sb2FkX3N0YXRlc19saXN0LmgnLAotICAgICAgICAnYmFzZS9sb2dnaW5nX25ldHdvcmtfY2hhbmdlX29ic2VydmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvbG9nZ2luZ19uZXR3b3JrX2NoYW5nZV9vYnNlcnZlci5oJywKLSAgICAgICAgJ2Jhc2UvbWltZV9zbmlmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvbWltZV9zbmlmZmVyLmgnLAotICAgICAgICAnYmFzZS9taW1lX3V0aWwuY2MnLAotICAgICAgICAnYmFzZS9taW1lX3V0aWwuaCcsCi0gICAgICAgICdiYXNlL25ldF9pbmZvX3NvdXJjZV9saXN0LmgnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2FjdGl2aXR5X21vbml0b3IuY2MnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2FjdGl2aXR5X21vbml0b3IuaCcsCi0gICAgICAgICdiYXNlL25ldHdvcmtfY2hhbmdlX25vdGlmaWVyLmNjJywKLSAgICAgICAgJ2Jhc2UvbmV0d29ya19jaGFuZ2Vfbm90aWZpZXIuaCcsCi0gICAgICAgICdiYXNlL25ldHdvcmtfY2hhbmdlX25vdGlmaWVyX2ZhY3RvcnkuaCcsCi0gICAgICAgICdiYXNlL25ldHdvcmtfZGVsZWdhdGUuY2MnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2RlbGVnYXRlLmgnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2RlbGVnYXRlX2ltcGwuY2MnLAotICAgICAgICAnYmFzZS9uZXR3b3JrX2RlbGVnYXRlX2ltcGwuaCcsCi0gICAgICAgICdiYXNlL3BsYXRmb3JtX21pbWVfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvcGxhdGZvcm1fbWltZV91dGlsX3N0YXJib2FyZC5jYycsCi0gICAgICAgICdiYXNlL3ByaW9yaXRpemVkX2Rpc3BhdGNoZXIuY2MnLAotICAgICAgICAnYmFzZS9wcmlvcml0aXplZF9kaXNwYXRjaGVyLmgnLAotICAgICAgICAnYmFzZS9wcmlvcml0aXplZF90YXNrX3J1bm5lci5jYycsCi0gICAgICAgICdiYXNlL3ByaW9yaXRpemVkX3Rhc2tfcnVubmVyLmgnLAotICAgICAgICAnYmFzZS9wcmlvcml0eV9xdWV1ZS5oJywKLSAgICAgICAgJ2Jhc2UvcHJveHlfZGVsZWdhdGUuaCcsCi0gICAgICAgICdiYXNlL3Byb3h5X3NlcnZlci5jYycsCi0gICAgICAgICdiYXNlL3Byb3h5X3NlcnZlci5oJywKLSAgICAgICAgJ2Jhc2UvcmVxdWVzdF9wcmlvcml0eS5jYycsCi0gICAgICAgICdiYXNlL3JlcXVlc3RfcHJpb3JpdHkuaCcsCi0gICAgICAgICdiYXNlL3N0YXRpY19jb29raWVfcG9saWN5LmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RhdGljX2Nvb2tpZV9wb2xpY3kuaCcsCi0gICAgICAgICdiYXNlL3RyYWNlX2NvbnN0YW50cy5jYycsCi0gICAgICAgICdiYXNlL3RyYWNlX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ2Jhc2UvdXBsb2FkX2J5dGVzX2VsZW1lbnRfcmVhZGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvdXBsb2FkX2J5dGVzX2VsZW1lbnRfcmVhZGVyLmgnLAotICAgICAgICAnYmFzZS91cGxvYWRfZGF0YV9zdHJlYW0uY2MnLAotICAgICAgICAnYmFzZS91cGxvYWRfZGF0YV9zdHJlYW0uaCcsCi0gICAgICAgICdiYXNlL3VwbG9hZF9lbGVtZW50X3JlYWRlci5jYycsCi0gICAgICAgICdiYXNlL3VwbG9hZF9lbGVtZW50X3JlYWRlci5oJywKLSAgICAgICAgJ2Jhc2UvdXBsb2FkX2ZpbGVfZWxlbWVudF9yZWFkZXIuY2MnLAotICAgICAgICAnYmFzZS91cGxvYWRfZmlsZV9lbGVtZW50X3JlYWRlci5oJywKLSAgICAgICAgJ2Jhc2UvdXBsb2FkX3Byb2dyZXNzLmgnLAotICAgICAgICAnY2VydC9jYWNoaW5nX2NlcnRfdmVyaWZpZXIuY2MnLAotICAgICAgICAnY2VydC9jYWNoaW5nX2NlcnRfdmVyaWZpZXIuaCcsCi0gICAgICAgICdjZXJ0L2NlcnRfbmV0X2ZldGNoZXIuY2MnLAotICAgICAgICAnY2VydC9jZXJ0X25ldF9mZXRjaGVyLmgnLAotICAgICAgICAnY2VydC9jZXJ0X3ZlcmlmeV9wcm9jLmNjJywKLSAgICAgICAgJ2NlcnQvY2VydF92ZXJpZnlfcHJvYy5oJywKLSAgICAgICAgJ2NlcnQvY2VydF92ZXJpZnlfcHJvY19idWlsdGluLmNjJywKLSAgICAgICAgJ2NlcnQvY2VydF92ZXJpZnlfcHJvY19idWlsdGluLmgnLAotICAgICAgICAnY2VydC9jdF9sb2dfcmVzcG9uc2VfcGFyc2VyLmNjJywKLSAgICAgICAgJ2NlcnQvY3RfbG9nX3Jlc3BvbnNlX3BhcnNlci5oJywKLSAgICAgICAgJ2NlcnQvY3RfbG9nX3ZlcmlmaWVyLmNjJywKLSAgICAgICAgJ2NlcnQvY3RfbG9nX3ZlcmlmaWVyLmgnLAotICAgICAgICAnY2VydC9jdF9sb2dfdmVyaWZpZXJfdXRpbC5jYycsCi0gICAgICAgICdjZXJ0L2N0X2xvZ192ZXJpZmllcl91dGlsLmgnLAotICAgICAgICAnY2VydC9jdF9vYmplY3RzX2V4dHJhY3Rvci5jYycsCi0gICAgICAgICdjZXJ0L2N0X29iamVjdHNfZXh0cmFjdG9yLmgnLAotICAgICAgICAnY2VydC9jdF9zY3RfdG9fc3RyaW5nLmNjJywKLSAgICAgICAgJ2NlcnQvY3Rfc2N0X3RvX3N0cmluZy5oJywKLSAgICAgICAgJ2NlcnQvY3Rfc2VyaWFsaXphdGlvbi5jYycsCi0gICAgICAgICdjZXJ0L2N0X3NlcmlhbGl6YXRpb24uaCcsCi0gICAgICAgICdjZXJ0L2N0X3NpZ25lZF9jZXJ0aWZpY2F0ZV90aW1lc3RhbXBfbG9nX3BhcmFtLmNjJywKLSAgICAgICAgJ2NlcnQvY3Rfc2lnbmVkX2NlcnRpZmljYXRlX3RpbWVzdGFtcF9sb2dfcGFyYW0uaCcsCi0gICAgICAgICdjZXJ0L2V2X3Jvb3RfY2FfbWV0YWRhdGEuY2MnLAotICAgICAgICAnY2VydC9ldl9yb290X2NhX21ldGFkYXRhLmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9zeXN0ZW1fdHJ1c3Rfc3RvcmUuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9zeXN0ZW1fdHJ1c3Rfc3RvcmUuaCcsCi0gICAgICAgICdjZXJ0L2p3a19zZXJpYWxpemVyLmNjJywKLSAgICAgICAgJ2NlcnQvandrX3NlcmlhbGl6ZXIuaCcsCi0gICAgICAgICdjZXJ0L2tub3duX3Jvb3RzLmNjJywKLSAgICAgICAgJ2NlcnQva25vd25fcm9vdHMuaCcsCi0gICAgICAgICdjZXJ0L21lcmtsZV9hdWRpdF9wcm9vZi5jYycsCi0gICAgICAgICdjZXJ0L21lcmtsZV9hdWRpdF9wcm9vZi5oJywKLSAgICAgICAgJ2NlcnQvbWVya2xlX2NvbnNpc3RlbmN5X3Byb29mLmNjJywKLSAgICAgICAgJ2NlcnQvbWVya2xlX2NvbnNpc3RlbmN5X3Byb29mLmgnLAotICAgICAgICAnY2VydC9tZXJrbGVfdHJlZV9sZWFmLmNjJywKLSAgICAgICAgJ2NlcnQvbWVya2xlX3RyZWVfbGVhZi5oJywKLSAgICAgICAgJ2NlcnQvbXVsdGlfbG9nX2N0X3ZlcmlmaWVyLmNjJywKLSAgICAgICAgJ2NlcnQvbXVsdGlfbG9nX2N0X3ZlcmlmaWVyLmgnLAotICAgICAgICAnY2VydC9tdWx0aV90aHJlYWRlZF9jZXJ0X3ZlcmlmaWVyLmNjJywKLSAgICAgICAgJ2NlcnQvbXVsdGlfdGhyZWFkZWRfY2VydF92ZXJpZmllci5oJywKLSAgICAgICAgJ2NlcnQvcm9vdF9jZXJ0X2xpc3RfZ2VuZXJhdGVkLmgnLAotICAgICAgICAnY2VydF9uZXQvY2VydF9uZXRfZmV0Y2hlcl9pbXBsLmNjJywKLSAgICAgICAgJ2NlcnRfbmV0L2NlcnRfbmV0X2ZldGNoZXJfaW1wbC5oJywKLSAgICAgICAgJ2Nvb2tpZXMvY2Fub25pY2FsX2Nvb2tpZS5jYycsCi0gICAgICAgICdjb29raWVzL2Nhbm9uaWNhbF9jb29raWUuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9jaGFuZ2VfZGlzcGF0Y2hlci5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9jaGFuZ2VfZGlzcGF0Y2hlci5oJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX2NvbnN0YW50cy5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9jb25zdGFudHMuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9kZWxldGlvbl9pbmZvLmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX2RlbGV0aW9uX2luZm8uaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9tb25zdGVyLmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX21vbnN0ZXIuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9tb25zdGVyX2NoYW5nZV9kaXNwYXRjaGVyLmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX21vbnN0ZXJfY2hhbmdlX2Rpc3BhdGNoZXIuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9tb25zdGVyX25ldGxvZ19wYXJhbXMuY2MnLAotICAgICAgICAnY29va2llcy9jb29raWVfbW9uc3Rlcl9uZXRsb2dfcGFyYW1zLmgnLAotICAgICAgICAnY29va2llcy9jb29raWVfb3B0aW9ucy5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9vcHRpb25zLmgnLAotICAgICAgICAnY29va2llcy9jb29raWVfc3RvcmUuY2MnLAotICAgICAgICAnY29va2llcy9jb29raWVfc3RvcmUuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV91dGlsLmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX3V0aWwuaCcsCi0gICAgICAgICdjb29raWVzL3BhcnNlZF9jb29raWUuY2MnLAotICAgICAgICAnY29va2llcy9wYXJzZWRfY29va2llLmgnLAotICAgICAgICAjIGRpc2tfY2FjaGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIFRoZXkgYXJlIHJlcXVpcmVkIGZvciBodHRwIGNhY2hlLgotICAgICAgICAjIE1heWJlIHdlIHdpbGwgbmVlZCBpdCBpbiB0aGUgZnV0dXJlLgotICAgICAgICAjICdkaXNrX2NhY2hlL2JhY2tlbmRfY2xlYW51cF90cmFja2VyLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9iYWNrZW5kX2NsZWFudXBfdHJhY2tlci5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvYWRkci5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2FkZHIuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2JhY2tlbmRfaW1wbC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2JhY2tlbmRfaW1wbC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvYml0bWFwLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvYml0bWFwLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9ibG9ja19maWxlcy5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2Jsb2NrX2ZpbGVzLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9kaXNrX2Zvcm1hdC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2Rpc2tfZm9ybWF0LmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9kaXNrX2Zvcm1hdF9iYXNlLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9lbnRyeV9pbXBsLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZW50cnlfaW1wbC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZXJyb3JzLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9ldmljdGlvbi5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2V2aWN0aW9uLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9leHBlcmltZW50cy5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZmlsZS5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2ZpbGUuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2ZpbGVfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZmlsZV9ibG9jay5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZmlsZV9sb2NrLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvZmlsZV9sb2NrLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9oaXN0b2dyYW1fbWFjcm9zLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9pbl9mbGlnaHRfYmFja2VuZF9pby5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL2luX2ZsaWdodF9iYWNrZW5kX2lvLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9pbl9mbGlnaHRfaW8uY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9pbl9mbGlnaHRfaW8uaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL21hcHBlZF9maWxlLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvbWFwcGVkX2ZpbGUuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL3JhbmtpbmdzLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvcmFua2luZ3MuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL3NwYXJzZV9jb250cm9sLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvc3BhcnNlX2NvbnRyb2wuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL3N0YXRzLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvc3RhdHMuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL3N0b3JhZ2VfYmxvY2staW5sLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9zdG9yYWdlX2Jsb2NrLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9zdHJlc3Nfc3VwcG9ydC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvdHJhY2UuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS90cmFjZS5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvd2ViZm9udHNfaGlzdG9ncmFtLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvd2ViZm9udHNfaGlzdG9ncmFtLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2NhY2hlX3V0aWwuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2NhY2hlX3V0aWwuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvY2FjaGVfdXRpbF9zdGFyYm9hcmQuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Rpc2tfY2FjaGUuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Rpc2tfY2FjaGUuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvbWVtb3J5L21lbV9iYWNrZW5kX2ltcGwuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL21lbW9yeS9tZW1fYmFja2VuZF9pbXBsLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL21lbW9yeS9tZW1fZW50cnlfaW1wbC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvbWVtb3J5L21lbV9lbnRyeV9pbXBsLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL25ldF9sb2dfcGFyYW1ldGVycy5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvbmV0X2xvZ19wYXJhbWV0ZXJzLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfYmFja2VuZF9pbXBsLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2JhY2tlbmRfaW1wbC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2JhY2tlbmRfdmVyc2lvbi5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2VudHJ5X2Zvcm1hdC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9lbnRyeV9mb3JtYXQuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9lbnRyeV9mb3JtYXRfaGlzdG9yeS5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2VudHJ5X2ltcGwuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfZW50cnlfaW1wbC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2VudHJ5X29wZXJhdGlvbi5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9lbnRyeV9vcGVyYXRpb24uaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9maWxlX3RyYWNrZXIuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfZmlsZV90cmFja2VyLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfaGlzdG9ncmFtX21hY3Jvcy5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2luZGV4LmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2luZGV4LmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfaW5kZXhfZGVsZWdhdGUuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9pbmRleF9maWxlLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2luZGV4X2ZpbGUuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9pbmRleF9maWxlX3N0YXJib2FyZC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV9uZXRfbG9nX3BhcmFtZXRlcnMuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfbmV0X2xvZ19wYXJhbWV0ZXJzLmgnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfc3luY2hyb25vdXNfZW50cnkuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfc3luY2hyb25vdXNfZW50cnkuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV91dGlsLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX3V0aWwuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV91dGlsX3N0YXJib2FyZC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvc2ltcGxlL3NpbXBsZV92ZXJzaW9uX3VwZ3JhZGUuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfdmVyc2lvbl91cGdyYWRlLmgnLAotICAgICAgICAnZG5zL2Ruc191dGlsLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfdXRpbC5oJywKLSAgICAgICAgJ2Rucy9hZGRyZXNzX3NvcnRlci5oJywKLSAgICAgICAgJ2Rucy9kbnNfY29uZmlnLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfY29uZmlnLmgnLAotICAgICAgICAnZG5zL2hvc3RfcmVzb2x2ZXJfbWRuc190YXNrLmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X3Jlc29sdmVyX21kbnNfdGFzay5oJywKLSAgICAgICAgJ2Rucy9ob3N0X3Jlc29sdmVyX3NvdXJjZS5oJywKLSAgICAgICAgJ2Rucy9hZGRyZXNzX3NvcnRlci5oJywKLSAgICAgICAgJ2Rucy9hZGRyZXNzX3NvcnRlcl9zdGFyYm9hcmQuY2MnLAotICAgICAgICAnZG5zL2Ruc19jbGllbnQuY2MnLAotICAgICAgICAnZG5zL2Ruc19jbGllbnQuaCcsCi0gICAgICAgICdkbnMvZG5zX2NvbmZpZ19zZXJ2aWNlLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfY29uZmlnX3NlcnZpY2UuaCcsCi0gICAgICAgICdkbnMvZG5zX2hvc3RzLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfaG9zdHMuaCcsCi0gICAgICAgICdkbnMvZG5zX3Byb3RvY29sLmgnLAotICAgICAgICAnZG5zL2Ruc19xdWVyeS5jYycsCi0gICAgICAgICdkbnMvZG5zX3F1ZXJ5LmgnLAotICAgICAgICAnZG5zL2Ruc19yZWxvYWRlci5jYycsCi0gICAgICAgICdkbnMvZG5zX3JlbG9hZGVyLmgnLAotICAgICAgICAnZG5zL2Ruc19yZXNwb25zZS5jYycsCi0gICAgICAgICdkbnMvZG5zX3Jlc3BvbnNlLmgnLAotICAgICAgICAnZG5zL2Ruc19zZXNzaW9uLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfc2Vzc2lvbi5oJywKLSAgICAgICAgJ2Rucy9kbnNfc29ja2V0X3Bvb2wuY2MnLAotICAgICAgICAnZG5zL2Ruc19zb2NrZXRfcG9vbC5oJywKLSAgICAgICAgJ2Rucy9kbnNfdHJhbnNhY3Rpb24uY2MnLAotICAgICAgICAnZG5zL2Ruc190cmFuc2FjdGlvbi5oJywKLSAgICAgICAgJ2Rucy9ob3N0X2NhY2hlLmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X2NhY2hlLmgnLAotICAgICAgICAnZG5zL2hvc3RfcmVzb2x2ZXIuY2MnLAotICAgICAgICAnZG5zL2hvc3RfcmVzb2x2ZXIuaCcsCi0gICAgICAgICdkbnMvaG9zdF9yZXNvbHZlcl9pbXBsLmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X3Jlc29sdmVyX2ltcGwuaCcsCi0gICAgICAgICdkbnMvaG9zdF9yZXNvbHZlcl9wcm9jLmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X3Jlc29sdmVyX3Byb2MuaCcsCi0gICAgICAgICdkbnMvbWFwcGVkX2hvc3RfcmVzb2x2ZXIuY2MnLAotICAgICAgICAnZG5zL21hcHBlZF9ob3N0X3Jlc29sdmVyLmgnLAotICAgICAgICAnZG5zL21kbnNfY2FjaGUuY2MnLAotICAgICAgICAnZG5zL21kbnNfY2FjaGUuaCcsCi0gICAgICAgICdkbnMvbWRuc19jbGllbnQuY2MnLAotICAgICAgICAnZG5zL21kbnNfY2xpZW50LmgnLAotICAgICAgICAnZG5zL21kbnNfY2xpZW50X2ltcGwuY2MnLAotICAgICAgICAnZG5zL21kbnNfY2xpZW50X2ltcGwuaCcsCi0gICAgICAgICdkbnMvcmVjb3JkX3BhcnNlZC5jYycsCi0gICAgICAgICdkbnMvcmVjb3JkX3BhcnNlZC5oJywKLSAgICAgICAgJ2Rucy9yZWNvcmRfcmRhdGEuY2MnLAotICAgICAgICAnZG5zL3JlY29yZF9yZGF0YS5oJywKLSAgICAgICAgJ2Rucy9zZXJpYWxfd29ya2VyLmNjJywKLSAgICAgICAgJ2Rucy9zZXJpYWxfd29ya2VyLmgnLAotICAgICAgICAnZmlsdGVyL2Jyb3RsaV9zb3VyY2Vfc3RyZWFtLmNjJywKLSAgICAgICAgJ2ZpbHRlci9icm90bGlfc291cmNlX3N0cmVhbS5oJywKLSAgICAgICAgIyAnZmlsdGVyL2Jyb3RsaV9zb3VyY2Vfc3RyZWFtX2Z1enplci5jYycsCi0gICAgICAgICdmaWx0ZXIvZmlsdGVyX3NvdXJjZV9zdHJlYW0uY2MnLAotICAgICAgICAnZmlsdGVyL2ZpbHRlcl9zb3VyY2Vfc3RyZWFtLmgnLAotICAgICAgICAnZmlsdGVyL2d6aXBfaGVhZGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlci9nemlwX2hlYWRlci5oJywKLSAgICAgICAgJ2ZpbHRlci9nemlwX3NvdXJjZV9zdHJlYW0uY2MnLAotICAgICAgICAnZmlsdGVyL2d6aXBfc291cmNlX3N0cmVhbS5oJywKLSAgICAgICAgJ2ZpbHRlci9zb3VyY2Vfc3RyZWFtLmNjJywKLSAgICAgICAgJ2ZpbHRlci9zb3VyY2Vfc3RyZWFtLmgnLAotICAgICAgICAnZmlsdGVyL3NvdXJjZV9zdHJlYW1fdHlwZV9saXN0LmgnLAotICAgICAgICAnaHR0cC9iaWRpcmVjdGlvbmFsX3N0cmVhbS5jYycsCi0gICAgICAgICdodHRwL2JpZGlyZWN0aW9uYWxfc3RyZWFtLmgnLAotICAgICAgICAnaHR0cC9iaWRpcmVjdGlvbmFsX3N0cmVhbV9pbXBsLmNjJywKLSAgICAgICAgJ2h0dHAvYmlkaXJlY3Rpb25hbF9zdHJlYW1faW1wbC5oJywKLSAgICAgICAgJ2h0dHAvYmlkaXJlY3Rpb25hbF9zdHJlYW1fcmVxdWVzdF9pbmZvLmNjJywKLSAgICAgICAgJ2h0dHAvYmlkaXJlY3Rpb25hbF9zdHJlYW1fcmVxdWVzdF9pbmZvLmgnLAotICAgICAgICAnaHR0cC9icm9rZW5fYWx0ZXJuYXRpdmVfc2VydmljZXMuY2MnLAotICAgICAgICAnaHR0cC9icm9rZW5fYWx0ZXJuYXRpdmVfc2VydmljZXMuaCcsCi0gICAgICAgICdodHRwL2ZhaWxpbmdfaHR0cF90cmFuc2FjdGlvbl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2h0dHAvZmFpbGluZ19odHRwX3RyYW5zYWN0aW9uX2ZhY3RvcnkuaCcsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2NhY2hlLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2NhY2hlLmgnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfY29udHJvbGxlci5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9jb250cm9sbGVyLmgnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfZmlsdGVyLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2ZpbHRlci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfYmFzaWMuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlcl9iYXNpYy5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfZGlnZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfZGlnZXN0LmgnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlcl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfZmFjdG9yeS5oJywKLSAgICAgICAgIyBEaXNhYmxlZCBkdWUgdG8gZGVwZW5kZW5jeSBvbiBnc3NhcGkuCi0gICAgICAgICMgJ2h0dHAvaHR0cF9hdXRoX2dzc2FwaV9zdGFyYm9hcmQuY2MnLAotICAgICAgICAjICdodHRwL2h0dHBfYXV0aF9nc3NhcGlfc3RhcmJvYXJkLmgnLAotICAgICAgICAjICdodHRwL2h0dHBfYXV0aF9oYW5kbGVyX25lZ290aWF0ZS5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbmVnb3RpYXRlLmgnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlcl9udGxtLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbnRsbS5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbnRsbV9wb3J0YWJsZS5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9tdWx0aV9yb3VuZF9wYXJzZS5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9tdWx0aV9yb3VuZF9wYXJzZS5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX3ByZWZlcmVuY2VzLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX3ByZWZlcmVuY2VzLmgnLAotICAgICAgICAnaHR0cC9odHRwX2Jhc2ljX3N0YXRlLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9iYXNpY19zdGF0ZS5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9iYXNpY19zdHJlYW0uY2MnLAotICAgICAgICAnaHR0cC9odHRwX2Jhc2ljX3N0cmVhbS5oJywKLSAgICAgICAgIyAnaHR0cC9odHRwX2NhY2hlLmNjJywKLSAgICAgICAgIyAnaHR0cC9odHRwX2NhY2hlLmgnLAotICAgICAgICAjICdodHRwL2h0dHBfY2FjaGVfbG9va3VwX21hbmFnZXIuY2MnLAotICAgICAgICAjICdodHRwL2h0dHBfY2FjaGVfbG9va3VwX21hbmFnZXIuaCcsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jYWNoZV90cmFuc2FjdGlvbi5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jYWNoZV90cmFuc2FjdGlvbi5oJywKLSAgICAgICAgIyAnaHR0cC9odHRwX2NhY2hlX3dyaXRlcnMuY2MnLAotICAgICAgICAjICdodHRwL2h0dHBfY2FjaGVfd3JpdGVycy5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9jaHVua2VkX2RlY29kZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2NodW5rZWRfZGVjb2Rlci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9jb250ZW50X2Rpc3Bvc2l0aW9uLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9jb250ZW50X2Rpc3Bvc2l0aW9uLmgnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfbGF5ZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfbGF5ZXIuaCcsCi0gICAgICAgICdodHRwL2h0dHBfbmV0d29ya19zZXNzaW9uLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9uZXR3b3JrX3Nlc3Npb24uaCcsCi0gICAgICAgICdodHRwL2h0dHBfbmV0d29ya19zZXNzaW9uX3BlZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfc2Vzc2lvbl9wZWVyLmgnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfdHJhbnNhY3Rpb24uY2MnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfdHJhbnNhY3Rpb24uaCcsCi0gICAgICAgICdodHRwL2h0dHBfcHJveHlfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcHJveHlfY2xpZW50X3NvY2tldC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9wcm94eV9jbGllbnRfc29ja2V0X3Bvb2wuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Byb3h5X2NsaWVudF9zb2NrZXRfcG9vbC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9wcm94eV9jbGllbnRfc29ja2V0X3dyYXBwZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Byb3h5X2NsaWVudF9zb2NrZXRfd3JhcHBlci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXF1ZXN0X2luZm8uY2MnLAotICAgICAgICAnaHR0cC9odHRwX3JlcXVlc3RfaW5mby5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXNwb25zZV9ib2R5X2RyYWluZXIuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Jlc3BvbnNlX2JvZHlfZHJhaW5lci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zZXJ2ZXJfcHJvcGVydGllcy5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc2VydmVyX3Byb3BlcnRpZXMuaCcsCi0gICAgICAgICdodHRwL2h0dHBfc2VydmVyX3Byb3BlcnRpZXNfaW1wbC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc2VydmVyX3Byb3BlcnRpZXNfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zZXJ2ZXJfcHJvcGVydGllc19tYW5hZ2VyLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zZXJ2ZXJfcHJvcGVydGllc19tYW5hZ2VyLmgnLAotICAgICAgICAnaHR0cC9odHRwX3N0YXR1c19jb2RlLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdGF0dXNfY29kZS5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW0uaCcsCi0gICAgICAgICdodHRwL2h0dHBfc3RyZWFtX2ZhY3RvcnkuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3N0cmVhbV9mYWN0b3J5LmgnLAotICAgICAgICAnaHR0cC9odHRwX3N0cmVhbV9mYWN0b3J5X2pvYi5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc3RyZWFtX2ZhY3Rvcnlfam9iLmgnLAotICAgICAgICAnaHR0cC9odHRwX3N0cmVhbV9mYWN0b3J5X2pvYl9jb250cm9sbGVyLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fZmFjdG9yeV9qb2JfY29udHJvbGxlci5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fcGFyc2VyLmgnLAotICAgICAgICAnaHR0cC9odHRwX3N0cmVhbV9yZXF1ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fcmVxdWVzdC5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF90cmFuc2FjdGlvbi5oJywKLSAgICAgICAgJ2h0dHAvaHR0cF90cmFuc2FjdGlvbl9mYWN0b3J5LmgnLAotICAgICAgICAnaHR0cC9odHRwX3ZlcnNpb24uaCcsCi0gICAgICAgICdodHRwL3BhcnRpYWxfZGF0YS5jYycsCi0gICAgICAgICdodHRwL3BhcnRpYWxfZGF0YS5oJywKLSAgICAgICAgJ2h0dHAvcHJveHlfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdodHRwL3Byb3h5X2NsaWVudF9zb2NrZXQuaCcsCi0gICAgICAgICdodHRwL3Byb3h5X2Nvbm5lY3RfcmVkaXJlY3RfaHR0cF9zdHJlYW0uY2MnLAotICAgICAgICAnaHR0cC9wcm94eV9jb25uZWN0X3JlZGlyZWN0X2h0dHBfc3RyZWFtLmgnLAotICAgICAgICAnaHR0cC9wcm94eV9mYWxsYmFjay5jYycsCi0gICAgICAgICdodHRwL3Byb3h5X2ZhbGxiYWNrLmgnLAotICAgICAgICAnaHR0cC91cmxfc2VjdXJpdHlfbWFuYWdlci5jYycsCi0gICAgICAgICdodHRwL3VybF9zZWN1cml0eV9tYW5hZ2VyLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9hcnJheXNpemVfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAyL3BsYXRmb3JtL2ltcGwvaHR0cDJfYnVnX3RyYWNrZXJfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAyL3BsYXRmb3JtL2ltcGwvaHR0cDJfY29udGFpbmVyc19pbXBsLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9lc3RpbWF0ZV9tZW1vcnlfdXNhZ2VfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAyL3BsYXRmb3JtL2ltcGwvaHR0cDJfZXhwb3J0X2ltcGwuaCcsCi0gICAgICAgICdodHRwMi9wbGF0Zm9ybS9pbXBsL2h0dHAyX2ZsYWdfdXRpbHNfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAyL3BsYXRmb3JtL2ltcGwvaHR0cDJfZmxhZ3NfaW1wbC5jYycsCi0gICAgICAgICdodHRwMi9wbGF0Zm9ybS9pbXBsL2h0dHAyX2ZsYWdzX2ltcGwuaCcsCi0gICAgICAgICdodHRwMi9wbGF0Zm9ybS9pbXBsL2h0dHAyX21hY3Jvc19pbXBsLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9vcHRpb25hbF9pbXBsLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9wdHJfdXRpbF9pbXBsLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9yZWNvbnN0cnVjdF9vYmplY3RfaW1wbC5oJywKLSAgICAgICAgJ2h0dHAyL3BsYXRmb3JtL2ltcGwvaHR0cDJfc3RyaW5nX2ltcGwuaCcsCi0gICAgICAgICdodHRwMi9wbGF0Zm9ybS9pbXBsL2h0dHAyX3N0cmluZ19waWVjZV9pbXBsLmgnLAotICAgICAgICAnaHR0cDIvcGxhdGZvcm0vaW1wbC9odHRwMl9zdHJpbmdfdXRpbHNfaW1wbC5oJywKLSAgICAgICAgJ2xvZy9uZXRfbG9nX3V0aWwuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2dfdXRpbC5oJywKLSAgICAgICAgJ2xvZy90cmFjZV9uZXRfbG9nX29ic2VydmVyLmNjJywKLSAgICAgICAgJ2xvZy90cmFjZV9uZXRfbG9nX29ic2VydmVyLmgnLAotICAgICAgICAnbnFlL2NhY2hlZF9uZXR3b3JrX3F1YWxpdHkuY2MnLAotICAgICAgICAnbnFlL2NhY2hlZF9uZXR3b3JrX3F1YWxpdHkuaCcsCi0gICAgICAgICducWUvZWZmZWN0aXZlX2Nvbm5lY3Rpb25fdHlwZS5jYycsCi0gICAgICAgICducWUvZWZmZWN0aXZlX2Nvbm5lY3Rpb25fdHlwZS5oJywKLSAgICAgICAgJ25xZS9lZmZlY3RpdmVfY29ubmVjdGlvbl90eXBlX29ic2VydmVyLmgnLAotICAgICAgICAnbnFlL2V2ZW50X2NyZWF0b3IuY2MnLAotICAgICAgICAnbnFlL2V2ZW50X2NyZWF0b3IuaCcsCi0gICAgICAgICducWUvbmV0d29ya19pZC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19pZC5oJywKLSAgICAgICAgJ25xZS9uZXR3b3JrX3F1YWxpdGllc19wcmVmc19tYW5hZ2VyLmNjJywKLSAgICAgICAgJ25xZS9uZXR3b3JrX3F1YWxpdGllc19wcmVmc19tYW5hZ2VyLmgnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eS5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5LmgnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3IuY2MnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3IuaCcsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X2VzdGltYXRvcl9wYXJhbXMuY2MnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3JfcGFyYW1zLmgnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3JfdXRpbC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X2VzdGltYXRvcl91dGlsLmgnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9vYnNlcnZhdGlvbi5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X29ic2VydmF0aW9uLmgnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9vYnNlcnZhdGlvbl9zb3VyY2UuY2MnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9vYnNlcnZhdGlvbl9zb3VyY2UuaCcsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X3Byb3ZpZGVyLmNjJywKLSAgICAgICAgJ25xZS9uZXR3b3JrX3F1YWxpdHlfcHJvdmlkZXIuaCcsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X3N0b3JlLmNjJywKLSAgICAgICAgJ25xZS9uZXR3b3JrX3F1YWxpdHlfc3RvcmUuaCcsCi0gICAgICAgICducWUvb2JzZXJ2YXRpb25fYnVmZmVyLmNjJywKLSAgICAgICAgJ25xZS9vYnNlcnZhdGlvbl9idWZmZXIuaCcsCi0gICAgICAgICducWUvcnR0X3Rocm91Z2hwdXRfZXN0aW1hdGVzX29ic2VydmVyLmgnLAotICAgICAgICAnbnFlL3NvY2tldF93YXRjaGVyLmNjJywKLSAgICAgICAgJ25xZS9zb2NrZXRfd2F0Y2hlci5oJywKLSAgICAgICAgJ25xZS9zb2NrZXRfd2F0Y2hlcl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ25xZS9zb2NrZXRfd2F0Y2hlcl9mYWN0b3J5LmgnLAotICAgICAgICAnbnFlL3Rocm91Z2hwdXRfYW5hbHl6ZXIuY2MnLAotICAgICAgICAnbnFlL3Rocm91Z2hwdXRfYW5hbHl6ZXIuaCcsCi0gICAgICAgICducWUvd2VpZ2h0ZWRfb2JzZXJ2YXRpb24uaCcsCi0gICAgICAgICdudGxtL250bG0uY2MnLAotICAgICAgICAnbnRsbS9udGxtLmgnLAotICAgICAgICAnbnRsbS9udGxtX2J1ZmZlcl9yZWFkZXIuY2MnLAotICAgICAgICAnbnRsbS9udGxtX2J1ZmZlcl9yZWFkZXIuaCcsCi0gICAgICAgICdudGxtL250bG1fYnVmZmVyX3dyaXRlci5jYycsCi0gICAgICAgICdudGxtL250bG1fYnVmZmVyX3dyaXRlci5oJywKLSAgICAgICAgJ250bG0vbnRsbV9jbGllbnQuY2MnLAotICAgICAgICAnbnRsbS9udGxtX2NsaWVudC5oJywKLSAgICAgICAgJ250bG0vbnRsbV9jb25zdGFudHMuY2MnLAotICAgICAgICAnbnRsbS9udGxtX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vZGhjcF9wYWNfZmlsZV9mZXRjaGVyLmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vZGhjcF9wYWNfZmlsZV9mZXRjaGVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9kaGNwX3BhY19maWxlX2ZldGNoZXJfZmFjdG9yeS5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL2RoY3BfcGFjX2ZpbGVfZmV0Y2hlcl9mYWN0b3J5LmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9tdWx0aV90aHJlYWRlZF9wcm94eV9yZXNvbHZlci5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL211bHRpX3RocmVhZGVkX3Byb3h5X3Jlc29sdmVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9uZXR3b3JrX2RlbGVnYXRlX2Vycm9yX29ic2VydmVyLmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vbmV0d29ya19kZWxlZ2F0ZV9lcnJvcl9vYnNlcnZlci5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcGFjX2ZpbGVfZGF0YS5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3BhY19maWxlX2RhdGEuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3BhY19maWxlX2RlY2lkZXIuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wYWNfZmlsZV9kZWNpZGVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wYWNfZmlsZV9mZXRjaGVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wYWNfZmlsZV9mZXRjaGVyX2ltcGwuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wYWNfZmlsZV9mZXRjaGVyX2ltcGwuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3BhY19qc19saWJyYXJ5LmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wb2xsaW5nX3Byb3h5X2NvbmZpZ19zZXJ2aWNlLmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcG9sbGluZ19wcm94eV9jb25maWdfc2VydmljZS5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfYnlwYXNzX3J1bGVzLmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfYnlwYXNzX3J1bGVzLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9jb25maWcuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9jb25maWcuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2NvbmZpZ19zZXJ2aWNlLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9jb25maWdfd2l0aF9hbm5vdGF0aW9uLmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfY29uZmlnX3dpdGhfYW5ub3RhdGlvbi5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfaW5mby5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2luZm8uaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2xpc3QuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9saXN0LmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9jb25maWdfc2VydmljZV9maXhlZC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2NvbmZpZ19zZXJ2aWNlX2ZpeGVkLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXNvbHV0aW9uX3NlcnZpY2UuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXNvbHV0aW9uX3NlcnZpY2UuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X3Jlc29sdmVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXNvbHZlcl9lcnJvcl9vYnNlcnZlci5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfcmVzb2x2ZXJfZmFjdG9yeS5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X3Jlc29sdmVyX2ZhY3RvcnkuaCcsCi0KLSAgICAgICAgIyBXZSBkbyBub3QgbmVlZCB0aGlzIGZsYXZvciBvZiByZXNvbHZlciB5ZXQKLSAgICAgICAgIyAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXNvbHZlcl92OF90cmFjaW5nLmNjJywKLSAgICAgICAgIyAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXNvbHZlcl92OF90cmFjaW5nLmgnLAotICAgICAgICAjICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X3Jlc29sdmVyX3Y4X3RyYWNpbmdfd3JhcHBlci5jYycsCi0gICAgICAgICMgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfcmVzb2x2ZXJfdjhfdHJhY2luZ193cmFwcGVyLmgnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9yZXRyeV9pbmZvLmgnLAotCi0gICAgICAgICdxdWljL2JpZGlyZWN0aW9uYWxfc3RyZWFtX3F1aWNfaW1wbC5jYycsCi0gICAgICAgICdxdWljL2JpZGlyZWN0aW9uYWxfc3RyZWFtX3F1aWNfaW1wbC5oJywKLSAgICAgICAgJ3F1aWMvY3J5cHRvL2NoYW5uZWxfaWRfY2hyb21pdW0uY2MnLAotICAgICAgICAncXVpYy9jcnlwdG8vY2hhbm5lbF9pZF9jaHJvbWl1bS5oJywKLSAgICAgICAgJ3F1aWMvY3J5cHRvL3Byb29mX3NvdXJjZV9jaHJvbWl1bS5jYycsCi0gICAgICAgICdxdWljL2NyeXB0by9wcm9vZl9zb3VyY2VfY2hyb21pdW0uaCcsCi0gICAgICAgICdxdWljL2NyeXB0by9wcm9vZl92ZXJpZmllcl9jaHJvbWl1bS5jYycsCi0gICAgICAgICdxdWljL2NyeXB0by9wcm9vZl92ZXJpZmllcl9jaHJvbWl1bS5oJywKLSAgICAgICAgJ3F1aWMvbmV0d29ya19jb25uZWN0aW9uLmNjJywKLSAgICAgICAgJ3F1aWMvbmV0d29ya19jb25uZWN0aW9uLmgnLAotICAgICAgICAncXVpYy9wcm9wZXJ0aWVzX2Jhc2VkX3F1aWNfc2VydmVyX2luZm8uY2MnLAotICAgICAgICAncXVpYy9wcm9wZXJ0aWVzX2Jhc2VkX3F1aWNfc2VydmVyX2luZm8uaCcsCi0gICAgICAgICdxdWljL3F1aWNfYWRkcmVzc19taXNtYXRjaC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfYWRkcmVzc19taXNtYXRjaC5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9hbGFybV9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9hbGFybV9mYWN0b3J5LmgnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX2NsaWVudF9zZXNzaW9uLmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jbGllbnRfc2Vzc2lvbi5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jbGllbnRfc3RyZWFtLmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jbGllbnRfc3RyZWFtLmgnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX2Nvbm5lY3Rpb25faGVscGVyLmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jb25uZWN0aW9uX2hlbHBlci5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9wYWNrZXRfcmVhZGVyLmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9wYWNrZXRfcmVhZGVyLmgnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX3BhY2tldF93cml0ZXIuY2MnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX3BhY2tldF93cml0ZXIuaCcsCi0gICAgICAgICdxdWljL3F1aWNfY2xvY2tfc2tld19kZXRlY3Rvci5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY2xvY2tfc2tld19kZXRlY3Rvci5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19jb25uZWN0aW9uX2xvZ2dlci5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY29ubmVjdGlvbl9sb2dnZXIuaCcsCi0gICAgICAgICdxdWljL3F1aWNfY29ubmVjdGl2aXR5X3Byb2JpbmdfbWFuYWdlci5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY29ubmVjdGl2aXR5X3Byb2JpbmdfbWFuYWdlci5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19jcnlwdG9fY2xpZW50X3N0cmVhbV9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jcnlwdG9fY2xpZW50X3N0cmVhbV9mYWN0b3J5LmgnLAotICAgICAgICAncXVpYy9xdWljX2ZsYWdzX2xpc3QuaCcsCi0gICAgICAgICdxdWljL3F1aWNfaHR0cF9zdHJlYW0uY2MnLAotICAgICAgICAncXVpYy9xdWljX2h0dHBfc3RyZWFtLmgnLAotICAgICAgICAncXVpYy9xdWljX2h0dHBfdXRpbHMuY2MnLAotICAgICAgICAncXVpYy9xdWljX2h0dHBfdXRpbHMuaCcsCi0gICAgICAgICdxdWljL3F1aWNfcHJveHlfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfcHJveHlfY2xpZW50X3NvY2tldC5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19zZXJ2ZXJfaW5mby5jYycsCi0gICAgICAgICdxdWljL3F1aWNfc2VydmVyX2luZm8uaCcsCi0gICAgICAgICdxdWljL3F1aWNfc2Vzc2lvbl9rZXkuY2MnLAotICAgICAgICAncXVpYy9xdWljX3Nlc3Npb25fa2V5LmgnLAotICAgICAgICAncXVpYy9xdWljX3N0cmVhbV9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19zdHJlYW1fZmFjdG9yeS5oJywKLSAgICAgICAgJ3F1aWMvcXVpY191dGlsc19jaHJvbWl1bS5jYycsCi0gICAgICAgICdxdWljL3F1aWNfdXRpbHNfY2hyb21pdW0uaCcsCi0gICAgICAgICdzb2NrZXQvY2xpZW50X3NvY2tldF9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X2ZhY3RvcnkuaCcsCi0gICAgICAgICdzb2NrZXQvY2xpZW50X3NvY2tldF9wb29sLmNjJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X3Bvb2wuaCcsCi0gICAgICAgICdzb2NrZXQvY2xpZW50X3NvY2tldF9wb29sX2Jhc2UuY2MnLAotICAgICAgICAnc29ja2V0L2NsaWVudF9zb2NrZXRfcG9vbF9iYXNlLmgnLAotICAgICAgICAnc29ja2V0L2NsaWVudF9zb2NrZXRfcG9vbF9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X3Bvb2xfbWFuYWdlci5oJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X3Bvb2xfbWFuYWdlcl9pbXBsLmNjJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X3Bvb2xfbWFuYWdlcl9pbXBsLmgnLAotICAgICAgICAnc29ja2V0L2RhdGFncmFtX2NsaWVudF9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvZGF0YWdyYW1fc2VydmVyX3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC9kYXRhZ3JhbV9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvZGlmZl9zZXJ2X2NvZGVfcG9pbnQuaCcsCi0gICAgICAgICdzb2NrZXQvc2VydmVyX3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvc2VydmVyX3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC9zb2NrZXRfZGVzY3JpcHRvci5oJywKLSAgICAgICAgJ3NvY2tldC9zb2NrZXRfbmV0X2xvZ19wYXJhbXMuY2MnLAotICAgICAgICAnc29ja2V0L3NvY2tldF9uZXRfbG9nX3BhcmFtcy5oJywKLSAgICAgICAgJ3NvY2tldC9zb2NrZXRfb3B0aW9ucy5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja2V0X29wdGlvbnMuaCcsCi0gICAgICAgICdzb2NrZXQvc29ja2V0X3RhZy5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja2V0X3RhZy5oJywKLSAgICAgICAgJ3NvY2tldC9zb2NrczVfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja3M1X2NsaWVudF9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvc29ja3NfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja3NfY2xpZW50X3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC9zb2Nrc19jbGllbnRfc29ja2V0X3Bvb2wuY2MnLAotICAgICAgICAnc29ja2V0L3NvY2tzX2NsaWVudF9zb2NrZXRfcG9vbC5oJywKLSAgICAgICAgJ3NvY2tldC9zc2xfY2xpZW50X3NvY2tldF9wb29sLmNjJywKLSAgICAgICAgJ3NvY2tldC9zc2xfY2xpZW50X3NvY2tldF9wb29sLmgnLAotICAgICAgICAnc29ja2V0L3NzbF9zZXJ2ZXJfc29ja2V0LmgnLAotICAgICAgICAnc29ja2V0L3NzbF9zZXJ2ZXJfc29ja2V0X2ltcGwuY2MnLAotICAgICAgICAnc29ja2V0L3NzbF9zZXJ2ZXJfc29ja2V0X2ltcGwuaCcsCi0gICAgICAgICdzb2NrZXQvdGNwX2NsaWVudF9zb2NrZXQuY2MnLAotICAgICAgICAnc29ja2V0L3RjcF9jbGllbnRfc29ja2V0LmgnLAotICAgICAgICAnc29ja2V0L3RjcF9zZXJ2ZXJfc29ja2V0LmNjJywKLSAgICAgICAgJ3NvY2tldC90Y3Bfc2VydmVyX3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC90Y3Bfc29ja2V0LmgnLAotICAgICAgICAnc29ja2V0L3RjcF9zb2NrZXRfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3NvY2tldC90Y3Bfc29ja2V0X3N0YXJib2FyZC5oJywKLSAgICAgICAgJ3NvY2tldC90cmFuc3BvcnRfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvdHJhbnNwb3J0X2NsaWVudF9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvdHJhbnNwb3J0X2NsaWVudF9zb2NrZXRfcG9vbC5jYycsCi0gICAgICAgICdzb2NrZXQvdHJhbnNwb3J0X2NsaWVudF9zb2NrZXRfcG9vbC5oJywKLSAgICAgICAgJ3NvY2tldC91ZHBfY2xpZW50X3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvdWRwX2NsaWVudF9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvdWRwX25ldF9sb2dfcGFyYW1ldGVycy5jYycsCi0gICAgICAgICdzb2NrZXQvdWRwX25ldF9sb2dfcGFyYW1ldGVycy5oJywKLSAgICAgICAgJ3NvY2tldC91ZHBfc2VydmVyX3NvY2tldC5jYycsCi0gICAgICAgICdzb2NrZXQvdWRwX3NlcnZlcl9zb2NrZXQuaCcsCi0gICAgICAgICdzb2NrZXQvdWRwX3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldC91ZHBfc29ja2V0X3N0YXJib2FyZC5jYycsCi0gICAgICAgICdzb2NrZXQvdWRwX3NvY2tldF9zdGFyYm9hcmQuaCcsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X2VuZHBvaW50X2xvY2tfbWFuYWdlci5jYycsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X2VuZHBvaW50X2xvY2tfbWFuYWdlci5oJywKLSAgICAgICAgJ3NvY2tldC93ZWJzb2NrZXRfdHJhbnNwb3J0X2NsaWVudF9zb2NrZXRfcG9vbC5jYycsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X3RyYW5zcG9ydF9jbGllbnRfc29ja2V0X3Bvb2wuaCcsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X3RyYW5zcG9ydF9jb25uZWN0X3N1Yl9qb2IuY2MnLAotICAgICAgICAnc29ja2V0L3dlYnNvY2tldF90cmFuc3BvcnRfY29ubmVjdF9zdWJfam9iLmgnLAotICAgICAgICAnc3BkeS9iaWRpcmVjdGlvbmFsX3N0cmVhbV9zcGR5X2ltcGwuY2MnLAotICAgICAgICAnc3BkeS9iaWRpcmVjdGlvbmFsX3N0cmVhbV9zcGR5X2ltcGwuaCcsCi0gICAgICAgICdzcGR5L2J1ZmZlcmVkX3NwZHlfZnJhbWVyLmNjJywKLSAgICAgICAgJ3NwZHkvYnVmZmVyZWRfc3BkeV9mcmFtZXIuaCcsCi0gICAgICAgICdzcGR5L2hlYWRlcl9jb2FsZXNjZXIuY2MnLAotICAgICAgICAnc3BkeS9oZWFkZXJfY29hbGVzY2VyLmgnLAotICAgICAgICAnc3BkeS9odHRwMl9wcmlvcml0eV9kZXBlbmRlbmNpZXMuY2MnLAotICAgICAgICAnc3BkeS9odHRwMl9wcmlvcml0eV9kZXBlbmRlbmNpZXMuaCcsCi0gICAgICAgICdzcGR5L2h0dHAyX3B1c2hfcHJvbWlzZV9pbmRleC5jYycsCi0gICAgICAgICdzcGR5L2h0dHAyX3B1c2hfcHJvbWlzZV9pbmRleC5oJywKLSAgICAgICAgJ3NwZHkvbXVsdGlwbGV4ZWRfaHR0cF9zdHJlYW0uY2MnLAotICAgICAgICAnc3BkeS9tdWx0aXBsZXhlZF9odHRwX3N0cmVhbS5oJywKLSAgICAgICAgJ3NwZHkvbXVsdGlwbGV4ZWRfc2Vzc2lvbi5jYycsCi0gICAgICAgICdzcGR5L211bHRpcGxleGVkX3Nlc3Npb24uaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9hcnJheXNpemVfaW1wbC5oJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X2J1Z190cmFja2VyX2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9jb250YWluZXJzX2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9lbmRpYW5uZXNzX3V0aWxfaW1wbC5oJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X2VzdGltYXRlX21lbW9yeV91c2FnZV9pbXBsLmgnLAotICAgICAgICAnc3BkeS9wbGF0Zm9ybS9pbXBsL3NwZHlfZXhwb3J0X2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9mbGFnc19pbXBsLmNjJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X2ZsYWdzX2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9tYWNyb3NfaW1wbC5oJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X21lbV9zbGljZV9pbXBsLmNjJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X21lbV9zbGljZV9pbXBsLmgnLAotICAgICAgICAnc3BkeS9wbGF0Zm9ybS9pbXBsL3NwZHlfcHRyX3V0aWxfaW1wbC5oJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X3N0cmluZ19pbXBsLmgnLAotICAgICAgICAnc3BkeS9wbGF0Zm9ybS9pbXBsL3NwZHlfc3RyaW5nX3BpZWNlX2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9zdHJpbmdfdXRpbHNfaW1wbC5jYycsCi0gICAgICAgICdzcGR5L3BsYXRmb3JtL2ltcGwvc3BkeV9zdHJpbmdfdXRpbHNfaW1wbC5oJywKLSAgICAgICAgJ3NwZHkvcGxhdGZvcm0vaW1wbC9zcGR5X3Rlc3RfdXRpbHNfcHJvZF9pbXBsLmgnLAotICAgICAgICAnc3BkeS9wbGF0Zm9ybS9pbXBsL3NwZHlfdW5zYWZlX2FyZW5hX2ltcGwuY2MnLAotICAgICAgICAnc3BkeS9wbGF0Zm9ybS9pbXBsL3NwZHlfdW5zYWZlX2FyZW5hX2ltcGwuaCcsCi0gICAgICAgICdzcGR5L3NlcnZlcl9wdXNoX2RlbGVnYXRlLmgnLAotICAgICAgICAnc3BkeS9zcGR5X2J1ZmZlci5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfYnVmZmVyLmgnLAotICAgICAgICAnc3BkeS9zcGR5X2J1ZmZlcl9wcm9kdWNlci5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfYnVmZmVyX3Byb2R1Y2VyLmgnLAotICAgICAgICAnc3BkeS9zcGR5X2h0dHBfc3RyZWFtLmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9odHRwX3N0cmVhbS5oJywKLSAgICAgICAgJ3NwZHkvc3BkeV9odHRwX3V0aWxzLmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9odHRwX3V0aWxzLmgnLAotICAgICAgICAnc3BkeS9zcGR5X2xvZ191dGlsLmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9sb2dfdXRpbC5oJywKLSAgICAgICAgJ3NwZHkvc3BkeV9wcm94eV9jbGllbnRfc29ja2V0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9wcm94eV9jbGllbnRfc29ja2V0LmgnLAotICAgICAgICAnc3BkeS9zcGR5X3JlYWRfcXVldWUuY2MnLAotICAgICAgICAnc3BkeS9zcGR5X3JlYWRfcXVldWUuaCcsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbi5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbi5oJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zZXNzaW9uX2tleS5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbl9rZXkuaCcsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbl9wb29sLmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zZXNzaW9uX3Bvb2wuaCcsCi0gICAgICAgICdzcGR5L3NwZHlfc3RyZWFtLmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zdHJlYW0uaCcsCi0gICAgICAgICdzcGR5L3NwZHlfd3JpdGVfcXVldWUuY2MnLAotICAgICAgICAnc3BkeS9zcGR5X3dyaXRlX3F1ZXVlLmgnLAotICAgICAgICAnc3NsL2NsaWVudF9jZXJ0X3N0b3JlLmgnLAotICAgICAgICAnc3NsL3NzbF9jb25maWdfc2VydmljZV9kZWZhdWx0cy5jYycsCi0gICAgICAgICdzc2wvc3NsX2NvbmZpZ19zZXJ2aWNlX2RlZmF1bHRzLmgnLAotICAgICAgICAnc3NsL3NzbF9wbGF0Zm9ybV9rZXlfdXRpbC5jYycsCi0gICAgICAgICdzc2wvc3NsX3BsYXRmb3JtX2tleV91dGlsLmgnLAotICAgICAgICAnc3NsL3RocmVhZGVkX3NzbF9wcml2YXRlX2tleS5jYycsCi0gICAgICAgICdzc2wvdGhyZWFkZWRfc3NsX3ByaXZhdGVfa2V5LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9iYW5kd2lkdGhfc2FtcGxlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL2JhbmR3aWR0aF9zYW1wbGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9iYnJfc2VuZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvYmJyX3NlbmRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvY3ViaWNfYnl0ZXMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9jdWJpY19ieXRlcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvZ2VuZXJhbF9sb3NzX2FsZ29yaXRobS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL2dlbmVyYWxfbG9zc19hbGdvcml0aG0uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL2h5YnJpZF9zbG93X3N0YXJ0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvaHlicmlkX3Nsb3dfc3RhcnQuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL2xvc3NfZGV0ZWN0aW9uX2ludGVyZmFjZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvcGFjaW5nX3NlbmRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3BhY2luZ19zZW5kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3Bycl9zZW5kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9wcnJfc2VuZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9ydHRfc3RhdHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9ydHRfc3RhdHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3NlbmRfYWxnb3JpdGhtX2ludGVyZmFjZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3NlbmRfYWxnb3JpdGhtX2ludGVyZmFjZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvdGNwX2N1YmljX3NlbmRlcl9ieXRlcy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3RjcF9jdWJpY19zZW5kZXJfYnl0ZXMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3ViZXJfbG9zc19hbGdvcml0aG0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC91YmVyX2xvc3NfYWxnb3JpdGhtLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC93aW5kb3dlZF9maWx0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2FlYWRfYmFzZV9kZWNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZWFkX2Jhc2VfZGVjcnlwdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZWFkX2Jhc2VfZW5jcnlwdGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVhZF9iYXNlX2VuY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fMTJfZGVjcnlwdGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fMTJfZGVjcnlwdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMTI4X2djbV8xMl9lbmNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMTI4X2djbV8xMl9lbmNyeXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18xMjhfZ2NtX2RlY3J5cHRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18xMjhfZ2NtX2RlY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fZW5jcnlwdGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fZW5jcnlwdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMjU2X2djbV9kZWNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMjU2X2djbV9kZWNyeXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18yNTZfZ2NtX2VuY3J5cHRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18yNTZfZ2NtX2VuY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2VydF9jb21wcmVzc29yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2VydF9jb21wcmVzc29yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNV9kZWNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNV9kZWNyeXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1X2VuY3J5cHRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1X2VuY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDVfdGxzX2RlY3J5cHRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1X3Rsc19kZWNyeXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1X3Rsc19lbmNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNV90bHNfZW5jcnlwdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jaGFubmVsX2lkLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2hhbm5lbF9pZC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY29tbW9uX2NlcnRfc2V0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY29tbW9uX2NlcnRfc2V0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jcnlwdG9fZnJhbWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX2ZyYW1lci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX2hhbmRzaGFrZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19oYW5kc2hha2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19oYW5kc2hha2VfbWVzc2FnZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19oYW5kc2hha2VfbWVzc2FnZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX21lc3NhZ2VfcGFyc2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jcnlwdG9fcHJvdG9jb2wuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19zZWNyZXRfYm94ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jcnlwdG9fc2VjcmV0X2JveGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jcnlwdG9fdXRpbHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jcnlwdG9fdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2N1cnZlMjU1MTlfa2V5X2V4Y2hhbmdlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3VydmUyNTUxOV9rZXlfZXhjaGFuZ2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2tleV9leGNoYW5nZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vbnVsbF9kZWNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9udWxsX2RlY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vbnVsbF9lbmNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9udWxsX2VuY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcDI1Nl9rZXlfZXhjaGFuZ2UuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9wMjU2X2tleV9leGNoYW5nZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcHJvb2Zfc291cmNlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcHJvb2Zfc291cmNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9wcm9vZl92ZXJpZmllci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19jb21wcmVzc2VkX2NlcnRzX2NhY2hlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19jb21wcmVzc2VkX2NlcnRzX2NhY2hlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL3F1aWNfY3J5cHRvX2NsaWVudF9jb25maWcuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0b19jbGllbnRfY29uZmlnLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0b19wcm9vZi5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL3F1aWNfY3J5cHRvX3Byb29mLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0b19zZXJ2ZXJfY29uZmlnLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19jcnlwdG9fc2VydmVyX2NvbmZpZy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19kZWNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2RlY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19lbmNyeXB0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2VuY3J5cHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19oa2RmLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19oa2RmLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX3JhbmRvbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL3F1aWNfcmFuZG9tLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by90cmFuc3BvcnRfcGFyYW1ldGVycy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL3RyYW5zcG9ydF9wYXJhbWV0ZXJzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2Fja19mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfYWNrX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2FwcGxpY2F0aW9uX2Nsb3NlX2ZyYW1lLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19hcHBsaWNhdGlvbl9jbG9zZV9mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19ibG9ja2VkX2ZyYW1lLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19ibG9ja2VkX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2Nvbm5lY3Rpb25fY2xvc2VfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2Nvbm5lY3Rpb25fY2xvc2VfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfY3J5cHRvX2ZyYW1lLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19jcnlwdG9fZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2dvYXdheV9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfZ29hd2F5X2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX2lubGluZWRfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfbWF4X3N0cmVhbV9pZF9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfbWF4X3N0cmVhbV9pZF9mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19tZXNzYWdlX2ZyYW1lLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19tZXNzYWdlX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX210dV9kaXNjb3ZlcnlfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfbmV3X2Nvbm5lY3Rpb25faWRfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX25ld19jb25uZWN0aW9uX2lkX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX25ld190b2tlbl9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfbmV3X3Rva2VuX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3BhZGRpbmdfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3BhZGRpbmdfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcGF0aF9jaGFsbGVuZ2VfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3BhdGhfY2hhbGxlbmdlX2ZyYW1lLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3BhdGhfcmVzcG9uc2VfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3BhdGhfcmVzcG9uc2VfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcGluZ19mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcGluZ19mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19yZXRpcmVfY29ubmVjdGlvbl9pZF9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcmV0aXJlX2Nvbm5lY3Rpb25faWRfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcnN0X3N0cmVhbV9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfcnN0X3N0cmVhbV9mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19zdG9wX3NlbmRpbmdfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3N0b3Bfc2VuZGluZ19mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19zdG9wX3dhaXRpbmdfZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3N0b3Bfd2FpdGluZ19mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19zdHJlYW1fZnJhbWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2ZyYW1lcy9xdWljX3N0cmVhbV9mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19zdHJlYW1faWRfYmxvY2tlZF9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfc3RyZWFtX2lkX2Jsb2NrZWRfZnJhbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfd2luZG93X3VwZGF0ZV9mcmFtZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvZnJhbWVzL3F1aWNfd2luZG93X3VwZGF0ZV9mcmFtZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL2h0dHBfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9odHRwX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9odHRwX2VuY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvaHR0cF9lbmNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvaHR0cF9mcmFtZXMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX2NsaWVudF9wcm9taXNlZF9pbmZvLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfY2xpZW50X3Byb21pc2VkX2luZm8uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX2NsaWVudF9wdXNoX3Byb21pc2VfaW5kZXguY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19jbGllbnRfcHVzaF9wcm9taXNlX2luZGV4LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19oZWFkZXJfbGlzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX2hlYWRlcl9saXN0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19oZWFkZXJzX3N0cmVhbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX2hlYWRlcnNfc3RyZWFtLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19zZXJ2ZXJfc2Vzc2lvbl9iYXNlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc2VydmVyX3Nlc3Npb25fYmFzZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9jbGllbnRfc3RyZWFtLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9jbGllbnRfc3RyZWFtLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19zcGR5X2NsaWVudF9zZXNzaW9uLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9jbGllbnRfc2Vzc2lvbi5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9jbGllbnRfc2Vzc2lvbl9iYXNlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9jbGllbnRfc2Vzc2lvbl9iYXNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19zcGR5X3Nlc3Npb24uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19zcGR5X3Nlc3Npb24uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX3NwZHlfc3RyZWFtLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9zdHJlYW0uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX3NwZHlfc3RyZWFtX2JvZHlfYnVmZmVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9zdHJlYW1fYm9keV9idWZmZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9zcGR5X3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3NwZHlfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvbGVnYWN5X3F1aWNfc3RyZWFtX2lkX21hbmFnZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2xlZ2FjeV9xdWljX3N0cmVhbV9pZF9tYW5hZ2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3BhY2tldF9udW1iZXJfaW5kZXhlZF9xdWV1ZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19jb25zdGFudHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVkX2hlYWRlcnNfYWNjdW11bGF0b3IuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2RlY29kZWRfaGVhZGVyc19hY2N1bXVsYXRvci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2RlY29kZXJfc3RyZWFtX3JlY2VpdmVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyX3N0cmVhbV9yZWNlaXZlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyX3N0cmVhbV9zZW5kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2RlY29kZXJfc3RyZWFtX3NlbmRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2VuY29kZXJfc3RyZWFtX3JlY2VpdmVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyX3N0cmVhbV9yZWNlaXZlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyX3N0cmVhbV9zZW5kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2VuY29kZXJfc3RyZWFtX3NlbmRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19oZWFkZXJfdGFibGUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2hlYWRlcl90YWJsZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19pbnN0cnVjdGlvbl9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19pbnN0cnVjdGlvbl9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2luc3RydWN0aW9uX2VuY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2luc3RydWN0aW9uX2VuY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfcHJvZ3Jlc3NpdmVfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfcHJvZ3Jlc3NpdmVfZGVjb2Rlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19wcm9ncmVzc2l2ZV9lbmNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19wcm9ncmVzc2l2ZV9lbmNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX3N0YXRpY190YWJsZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfc3RhdGljX3RhYmxlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYWNrX2xpc3RlbmVyX2ludGVyZmFjZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19hY2tfbGlzdGVuZXJfaW50ZXJmYWNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYWxhcm0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYWxhcm0uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19hbGFybV9mYWN0b3J5LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYXJlbmFfc2NvcGVkX3B0ci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2JhbmR3aWR0aC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19iYW5kd2lkdGguaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19ibG9ja2VkX3dyaXRlcl9pbnRlcmZhY2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19idWZmZXJfYWxsb2NhdG9yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2J1ZmZlcl9hbGxvY2F0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19idWZmZXJlZF9wYWNrZXRfc3RvcmUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYnVmZmVyZWRfcGFja2V0X3N0b3JlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29uZmlnLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NvbmZpZy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Nvbm5lY3Rpb24uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29ubmVjdGlvbi5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Nvbm5lY3Rpb25fY2xvc2VfZGVsZWdhdGVfaW50ZXJmYWNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29ubmVjdGlvbl9pZC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jb25uZWN0aW9uX2lkLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29ubmVjdGlvbl9zdGF0cy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jb25uZWN0aW9uX3N0YXRzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NvbnRyb2xfZnJhbWVfbWFuYWdlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jb250cm9sX2ZyYW1lX21hbmFnZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9fY2xpZW50X2hhbmRzaGFrZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX2NsaWVudF9oYW5kc2hha2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX2NsaWVudF9zdHJlYW0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX2NsaWVudF9zdHJlYW0uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9faGFuZHNoYWtlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9faGFuZHNoYWtlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NyeXB0b19zZXJ2ZXJfaGFuZHNoYWtlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9fc2VydmVyX2hhbmRzaGFrZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9fc2VydmVyX3N0cmVhbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9fc2VydmVyX3N0cmVhbS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NyeXB0b19zdHJlYW0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX3N0cmVhbS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2RhdGFfcmVhZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2RhdGFfcmVhZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfZGF0YV93cml0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfZGF0YV93cml0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19mbG93X2NvbnRyb2xsZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfZmxvd19jb250cm9sbGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfZnJhbWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2ZyYW1lci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2ludGVydmFsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfaW50ZXJ2YWxfc2V0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfbHJ1X2NhY2hlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfb25lX2Jsb2NrX2FyZW5hLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfcGFja2V0X2NyZWF0b3IuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfcGFja2V0X2NyZWF0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfZ2VuZXJhdG9yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3BhY2tldF9nZW5lcmF0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfbnVtYmVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3BhY2tldF9udW1iZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfd3JpdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfcGFja2V0cy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfcGVuZGluZ19yZXRyYW5zbWlzc2lvbi5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3JlY2VpdmVkX3BhY2tldF9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3JlY2VpdmVkX3BhY2tldF9tYW5hZ2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc2VudF9wYWNrZXRfbWFuYWdlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zZW50X3BhY2tldF9tYW5hZ2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc2VydmVyX2lkLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3NlcnZlcl9pZC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3Nlc3Npb24uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc2Vzc2lvbi5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3NpbXBsZV9idWZmZXJfYWxsb2NhdG9yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3NpbXBsZV9idWZmZXJfYWxsb2NhdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc29ja2V0X2FkZHJlc3NfY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc29ja2V0X2FkZHJlc3NfY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc3RyZWFtLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc3RyZWFtX2ZyYW1lX2RhdGFfcHJvZHVjZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1faWRfbWFuYWdlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1faWRfbWFuYWdlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N0cmVhbV9zZW5kX2J1ZmZlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1fc2VuZF9idWZmZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1fc2VxdWVuY2VyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N0cmVhbV9zZXF1ZW5jZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1fc2VxdWVuY2VyX2J1ZmZlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1fc2VxdWVuY2VyX2J1ZmZlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N1c3RhaW5lZF9iYW5kd2lkdGhfcmVjb3JkZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc3VzdGFpbmVkX2JhbmR3aWR0aF9yZWNvcmRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3RhZy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190YWcuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190aW1lLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3RpbWUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190cmFuc21pc3Npb25faW5mby5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190cmFuc21pc3Npb25faW5mby5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3R5cGVzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3R5cGVzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfdW5hY2tlZF9wYWNrZXRfbWFwLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3VuYWNrZWRfcGFja2V0X21hcC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3V0aWxzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfdmVyc2lvbl9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3ZlcnNpb25fbWFuYWdlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3ZlcnNpb25zLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3ZlcnNpb25zLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfd3JpdGVfYmxvY2tlZF9saXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3dyaXRlX2Jsb2NrZWRfbGlzdC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS90bHNfY2xpZW50X2hhbmRzaGFrZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3Rsc19jbGllbnRfaGFuZHNoYWtlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS90bHNfaGFuZHNoYWtlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvdGxzX2hhbmRzaGFrZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvdGxzX3NlcnZlcl9oYW5kc2hha2VyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS90bHNfc2VydmVyX2hhbmRzaGFrZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvdWJlcl9xdWljX3N0cmVhbV9pZF9tYW5hZ2VyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS91YmVyX3F1aWNfc3RyZWFtX2lkX21hbmFnZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2FsaWduZWQuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2FycmF5c2l6ZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfYnVnX3RyYWNrZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2NlcnRfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2NsaWVudF9zdGF0cy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfY2xvY2suY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19jbG9jay5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfY29udGFpbmVycy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZW5kaWFuLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19lcnJvcl9jb2RlX3dyYXBwZXJzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19lc3RpbWF0ZV9tZW1vcnlfdXNhZ2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2V4cG9ydC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZXhwb3J0ZWRfc3RhdHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2ZhbGx0aHJvdWdoLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19maWxlX3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZmlsZV91dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZmxhZ191dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZmxhZ3MuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2hvc3RuYW1lX3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfaG9zdG5hbWVfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2lvdmVjLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19pcF9hZGRyZXNzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfaXBfYWRkcmVzcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfaXBfYWRkcmVzc19mYW1pbHkuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX2xvZ2dpbmcuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX21hY3Jvcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfbWFwX3V0aWwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX21lbV9zbGljZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfbWVtX3NsaWNlX3NwYW4uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX21lbV9zbGljZV9zdG9yYWdlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19tdXRleC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX211dGV4LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19wY2Nfc2VuZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19wcmVmZXRjaC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfcHRyX3V0aWwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3JlZmVyZW5jZV9jb3VudGVkLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19zZXJ2ZXJfc3RhdHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3NpbmdsZXRvbi5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfc2xlZXAuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3NvY2tldF9hZGRyZXNzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfc29ja2V0X2FkZHJlc3MuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3N0YWNrX3RyYWNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19zdHJfY2F0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19zdHJpbmcuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3N0cmluZ19waWVjZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfdGV4dF91dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2FsaWduZWRfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2FycmF5c2l6ZV9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfYnVnX3RyYWNrZXJfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2NlcnRfdXRpbHNfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2Nocm9taXVtX2Nsb2NrLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2Nocm9taXVtX2Nsb2NrLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfY2xpZW50X3N0YXRzX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19jb250YWluZXJzX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19lbmRpYW5faW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2Vycm9yX2NvZGVfd3JhcHBlcnNfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2VzdGltYXRlX21lbW9yeV91c2FnZV9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfZXhwb3J0X2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19mYWxsdGhyb3VnaF9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfZmlsZV91dGlsc19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfZmxhZ191dGlsc19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfZmxhZ3NfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19mbGFnc19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfaG9zdG5hbWVfdXRpbHNfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19ob3N0bmFtZV91dGlsc19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfaW92ZWNfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX2lwX2FkZHJlc3NfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19pcF9hZGRyZXNzX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19sb2dnaW5nX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19tYWNyb3NfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX21hcF91dGlsX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19tZW1fc2xpY2VfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19tZW1fc2xpY2VfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX21lbV9zbGljZV9zcGFuX2ltcGwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfbWVtX3NsaWNlX3NwYW5faW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX21lbV9zbGljZV9zdG9yYWdlX2ltcGwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfbWVtX3NsaWNlX3N0b3JhZ2VfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX211dGV4X2ltcGwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfbXV0ZXhfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3BjY19zZW5kZXJfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3ByZWZldGNoX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19wdHJfdXRpbF9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfcmVmZXJlbmNlX2NvdW50ZWRfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3NlcnZlcl9zdGF0c19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfc2luZ2xldG9uX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19zbGVlcF9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfc29ja2V0X2FkZHJlc3NfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19zb2NrZXRfYWRkcmVzc19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfc3RhY2tfdHJhY2VfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3N0cl9jYXRfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3N0cmluZ19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfc3RyaW5nX3BpZWNlX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY190ZXh0X3V0aWxzX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX2J1ZmZlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX2J1ZmZlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9kZWNvZGVfaHR0cDJfc3RydWN0dXJlcy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX2h0dHAyX3N0cnVjdHVyZXMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX3N0YXR1cy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX3N0YXR1cy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9mcmFtZV9kZWNvZGVyX3N0YXRlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9mcmFtZV9kZWNvZGVyX3N0YXRlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2h0dHAyX2ZyYW1lX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2h0dHAyX2ZyYW1lX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvaHR0cDJfZnJhbWVfZGVjb2Rlcl9saXN0ZW5lci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvaHR0cDJfZnJhbWVfZGVjb2Rlcl9saXN0ZW5lci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9odHRwMl9zdHJ1Y3R1cmVfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvaHR0cDJfc3RydWN0dXJlX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9hbHRzdmNfcGF5bG9hZF9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2FsdHN2Y19wYXlsb2FkX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9jb250aW51YXRpb25fcGF5bG9hZF9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2NvbnRpbnVhdGlvbl9wYXlsb2FkX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9kYXRhX3BheWxvYWRfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9kYXRhX3BheWxvYWRfZGVjb2Rlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2dvYXdheV9wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvZ29hd2F5X3BheWxvYWRfZGVjb2Rlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2hlYWRlcnNfcGF5bG9hZF9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2hlYWRlcnNfcGF5bG9hZF9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcGluZ19wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcGluZ19wYXlsb2FkX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9wcmlvcml0eV9wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcHJpb3JpdHlfcGF5bG9hZF9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcHVzaF9wcm9taXNlX3BheWxvYWRfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9wdXNoX3Byb21pc2VfcGF5bG9hZF9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcnN0X3N0cmVhbV9wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvcnN0X3N0cmVhbV9wYXlsb2FkX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9zZXR0aW5nc19wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvc2V0dGluZ3NfcGF5bG9hZF9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvdW5rbm93bl9wYXlsb2FkX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvdW5rbm93bl9wYXlsb2FkX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy93aW5kb3dfdXBkYXRlX3BheWxvYWRfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy93aW5kb3dfdXBkYXRlX3BheWxvYWRfZGVjb2Rlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19ibG9ja19kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19ibG9ja19kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZGVjb2Rlcl9saXN0ZW5lci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZGVjb2Rlcl9saXN0ZW5lci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3N0YXRlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3N0YXRlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2RlY29kZXJfc3RyaW5nX2J1ZmZlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZGVjb2Rlcl9zdHJpbmdfYnVmZmVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2RlY29kZXJfdGFibGVzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3RhYmxlcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19lbnRyeV9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19lbnRyeV9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2VudHJ5X2RlY29kZXJfbGlzdGVuZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2VudHJ5X2RlY29kZXJfbGlzdGVuZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZW50cnlfdHlwZV9kZWNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19lbnRyeV90eXBlX2RlY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfc3RyaW5nX2RlY29kZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX3N0cmluZ19kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX3N0cmluZ19kZWNvZGVyX2xpc3RlbmVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19zdHJpbmdfZGVjb2Rlcl9saXN0ZW5lci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja193aG9sZV9lbnRyeV9idWZmZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX3dob2xlX2VudHJ5X2J1ZmZlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja193aG9sZV9lbnRyeV9saXN0ZW5lci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfd2hvbGVfZW50cnlfbGlzdGVuZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2hwYWNrX3N0YXRpY190YWJsZV9lbnRyaWVzLmluYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2hwYWNrX3N0cmluZy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2hwYWNrX3N0cmluZy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svaHR0cDJfaHBhY2tfY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svaHR0cDJfaHBhY2tfY29uc3RhbnRzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9odWZmbWFuL2hwYWNrX2h1ZmZtYW5fZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2h1ZmZtYW4vaHBhY2tfaHVmZm1hbl9kZWNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9odWZmbWFuL2hwYWNrX2h1ZmZtYW5fZW5jb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2h1ZmZtYW4vaHBhY2tfaHVmZm1hbl9lbmNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9odWZmbWFuL2h1ZmZtYW5fc3BlY190YWJsZXMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9odWZmbWFuL2h1ZmZtYW5fc3BlY190YWJsZXMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3ZhcmludC9ocGFja192YXJpbnRfZGVjb2Rlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3ZhcmludC9ocGFja192YXJpbnRfZGVjb2Rlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svdmFyaW50L2hwYWNrX3ZhcmludF9lbmNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svdmFyaW50L2hwYWNrX3ZhcmludF9lbmNvZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9jb25zdGFudHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9jb25zdGFudHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2h0dHAyX3N0cnVjdHVyZXMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9zdHJ1Y3R1cmVzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfYXJyYXlzaXplLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfYnVnX3RyYWNrZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3BsYXRmb3JtL2FwaS9odHRwMl9leHBvcnQuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3BsYXRmb3JtL2FwaS9odHRwMl9mbGFnX3V0aWxzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfZmxhZ3MuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3BsYXRmb3JtL2FwaS9odHRwMl9vcHRpb25hbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvcGxhdGZvcm0vYXBpL2h0dHAyX3B0cl91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfcmVjb25zdHJ1Y3Rfb2JqZWN0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfc3RyaW5nLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfc3RyaW5nX3BpZWNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfc3RyaW5nX3V0aWxzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvaHBhY2svaHBhY2tfY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2RlY29kZXJfYWRhcHRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19kZWNvZGVyX2FkYXB0ZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19lbmNvZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2VuY29kZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19lbnRyeS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19lbnRyeS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2hlYWRlcl90YWJsZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19oZWFkZXJfdGFibGUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19odWZmbWFuX3RhYmxlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2h1ZmZtYW5fdGFibGUuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19vdXRwdXRfc3RyZWFtLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX291dHB1dF9zdHJlYW0uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19zdGF0aWNfdGFibGUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvaHBhY2svaHBhY2tfc3RhdGljX3RhYmxlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvaHR0cDJfZnJhbWVfZGVjb2Rlcl9hZGFwdGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2h0dHAyX2ZyYW1lX2RlY29kZXJfYWRhcHRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3ByaW9yaXR5X3dyaXRlX3NjaGVkdWxlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfYWx0X3N2Y193aXJlX2Zvcm1hdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2FsdF9zdmNfd2lyZV9mb3JtYXQuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2JpdG1hc2tzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9mcmFtZV9idWlsZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfZnJhbWVfYnVpbGRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfZnJhbWVfcmVhZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfZnJhbWVfcmVhZGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9mcmFtZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9mcmFtZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2hlYWRlcl9ibG9jay5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2hlYWRlcl9ibG9jay5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfaGVhZGVyc19oYW5kbGVyX2ludGVyZmFjZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcGlubmFibGVfYnVmZmVyX3BpZWNlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcGlubmFibGVfYnVmZmVyX3BpZWNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9wcmVmaXhlZF9idWZmZXJfcmVhZGVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcHJlZml4ZWRfYnVmZmVyX3JlYWRlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcHJvdG9jb2wuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9wcm90b2NvbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3dyaXRlX3NjaGVkdWxlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3plcm9fY29weV9vdXRwdXRfYnVmZmVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X2FycmF5c2l6ZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9idWdfdHJhY2tlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9jb250YWluZXJzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X2VuZGlhbm5lc3NfdXRpbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9lc3RpbWF0ZV9tZW1vcnlfdXNhZ2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvcGxhdGZvcm0vYXBpL3NwZHlfZXhwb3J0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X2ZsYWdzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X21hY3Jvcy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9tZW1fc2xpY2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvcGxhdGZvcm0vYXBpL3NwZHlfcHRyX3V0aWwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvcGxhdGZvcm0vYXBpL3NwZHlfc3RyaW5nLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X3N0cmluZ19waWVjZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9zdHJpbmdfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvcGxhdGZvcm0vYXBpL3NwZHlfdGVzdF91dGlsc19wcm9kLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X3Vuc2FmZV9hcmVuYS5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L2RhdGFfcHJvdG9jb2xfaGFuZGxlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC9kYXRhX3Byb3RvY29sX2hhbmRsZXIuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC9odHRwX3VzZXJfYWdlbnRfc2V0dGluZ3MuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC9yZWRpcmVjdF9pbmZvLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3JlZGlyZWN0X2luZm8uaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC9yZWRpcmVjdF91dGlsLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3JlZGlyZWN0X3V0aWwuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC9yZXBvcnRfc2VuZGVyLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3JlcG9ydF9zZW5kZXIuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC9zdGF0aWNfaHR0cF91c2VyX2FnZW50X3NldHRpbmdzLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3N0YXRpY19odHRwX3VzZXJfYWdlbnRfc2V0dGluZ3MuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfZmV0Y2hlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfZmV0Y2hlci5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX2NvcmUuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX2ZldGNoZXJfY29yZS5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX2RlbGVnYXRlLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX2RlbGVnYXRlLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX2ZldGNoZXJfZmFjdG9yeS5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX2ltcGwuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX2ZldGNoZXJfaW1wbC5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX3Jlc3BvbnNlX3dyaXRlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfZmV0Y2hlcl9yZXNwb25zZV93cml0ZXIuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmFuZ2VfcmVxdWVzdF9qb2IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JhbmdlX3JlcXVlc3Rfam9iLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3QuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3QuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2NvbnRleHQuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0X2J1aWxkZXIuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF9idWlsZGVyLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF9nZXR0ZXIuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF9nZXR0ZXIuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0X2dldHRlcl9vYnNlcnZlci5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2NvbnRleHRfc3RvcmFnZS5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0X3N0b3JhZ2UuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9kYXRhX2pvYi5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9kYXRhX2pvYi5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2Vycm9yX2pvYi5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9lcnJvcl9qb2IuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9maWx0ZXIuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfZmlsdGVyLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaHR0cF9qb2IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaHR0cF9qb2IuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9odHRwX2pvYl9oaXN0b2dyYW0uaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9pbnRlcmNlcHRpbmdfam9iX2ZhY3RvcnkuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaW50ZXJjZXB0aW5nX2pvYl9mYWN0b3J5LmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaW50ZXJjZXB0b3IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaW50ZXJjZXB0b3IuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9qb2IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3Rfam9iLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3Rfam9iX2ZhY3RvcnkuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3Rfam9iX2ZhY3RvcnkuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9qb2JfZmFjdG9yeV9pbXBsLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2pvYl9mYWN0b3J5X2ltcGwuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9qb2JfbWFuYWdlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9qb2JfbWFuYWdlci5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X25ldGxvZ19wYXJhbXMuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfbmV0bG9nX3BhcmFtcy5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3JlZGlyZWN0X2pvYi5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9yZWRpcmVjdF9qb2IuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9zaW1wbGVfam9iLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3NpbXBsZV9qb2IuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9zdGF0dXMuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3Rfc3RhdHVzLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfdGhyb3R0bGVyX2VudHJ5LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rocm90dGxlcl9lbnRyeS5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rocm90dGxlcl9lbnRyeV9pbnRlcmZhY2UuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF90aHJvdHRsZXJfbWFuYWdlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF90aHJvdHRsZXJfbWFuYWdlci5oJywKLSAgICAgICAgIyAndXJsX3JlcXVlc3Qvdmlld19jYWNoZV9oZWxwZXIuY2MnLAotICAgICAgICAjICd1cmxfcmVxdWVzdC92aWV3X2NhY2hlX2hlbHBlci5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3dlYnNvY2tldF9oYW5kc2hha2VfdXNlcmRhdGFfa2V5LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3dlYnNvY2tldF9oYW5kc2hha2VfdXNlcmRhdGFfa2V5LmgnLAotCi0gICAgICAgICMgQWRkIHRoZSB3ZWJzb2NrZXRzIHNvdXJjZSBmaWxlcyBhcyB3ZWxsLgotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfYmFzaWNfaGFuZHNoYWtlX3N0cmVhbS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9iYXNpY19oYW5kc2hha2Vfc3RyZWFtLmgnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfYmFzaWNfc3RyZWFtLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2Jhc2ljX3N0cmVhbS5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2Jhc2ljX3N0cmVhbV9hZGFwdGVycy5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9iYXNpY19zdHJlYW1fYWRhcHRlcnMuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9jaGFubmVsLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2NoYW5uZWwuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9kZWZsYXRlX3BhcmFtZXRlcnMuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZGVmbGF0ZV9wYXJhbWV0ZXJzLmgnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZGVmbGF0ZV9wcmVkaWN0b3IuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9kZWZsYXRlX3ByZWRpY3Rvcl9pbXBsLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2RlZmxhdGVfcHJlZGljdG9yX2ltcGwuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9kZWZsYXRlX3N0cmVhbS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9kZWZsYXRlX3N0cmVhbS5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2RlZmxhdGVyLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2RlZmxhdGVyLmgnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZXJyb3JzLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2Vycm9ycy5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2V2ZW50X2ludGVyZmFjZS5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2V4dGVuc2lvbi5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9leHRlbnNpb24uaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9leHRlbnNpb25fcGFyc2VyLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2V4dGVuc2lvbl9wYXJzZXIuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9mcmFtZS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9mcmFtZS5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2ZyYW1lX3BhcnNlci5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9mcmFtZV9wYXJzZXIuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2VfY2hhbGxlbmdlLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2hhbmRzaGFrZV9jaGFsbGVuZ2UuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2VfY29uc3RhbnRzLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2hhbmRzaGFrZV9jb25zdGFudHMuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2VfcmVxdWVzdF9pbmZvLmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2hhbmRzaGFrZV9yZXF1ZXN0X2luZm8uaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2VfcmVzcG9uc2VfaW5mby5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2VfcmVzcG9uc2VfaW5mby5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2hhbmRzaGFrZV9zdHJlYW1fYmFzZS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2Vfc3RyZWFtX2Jhc2UuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2Vfc3RyZWFtX2NyZWF0ZV9oZWxwZXIuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfaGFuZHNoYWtlX3N0cmVhbV9jcmVhdGVfaGVscGVyLmgnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfaHR0cDJfaGFuZHNoYWtlX3N0cmVhbS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9odHRwMl9oYW5kc2hha2Vfc3RyZWFtLmgnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfaW5mbGF0ZXIuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfaW5mbGF0ZXIuaCcsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9zdHJlYW0uY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfc3RyZWFtLmgnLAotCi0gICAgICAgICMgQWRkIHRoZSBuZXR3b3JrIHJlcG9ydGluZyBzb3VyY2UgZmlsZXMgYXMgd2VsbC4KLSAgICAgICAgJ25ldHdvcmtfZXJyb3JfbG9nZ2luZy9uZXR3b3JrX2Vycm9yX2xvZ2dpbmdfc2VydmljZS5jYycsCi0gICAgICAgICduZXR3b3JrX2Vycm9yX2xvZ2dpbmcvbmV0d29ya19lcnJvcl9sb2dnaW5nX3NlcnZpY2UuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvanNvbl9wYXJzZXJfZGVsZWdhdGUuY2MnLAotICAgICAgICAncmVwb3J0aW5nL2pzb25fcGFyc2VyX2RlbGVnYXRlLmgnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19icm93c2luZ19kYXRhX3JlbW92ZXIuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19icm93c2luZ19kYXRhX3JlbW92ZXIuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2NhY2hlLmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfY2FjaGUuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2NsaWVudC5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2NsaWVudC5oJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfY29udGV4dC5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2NvbnRleHQuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2RlbGVnYXRlLmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfZGVsZWdhdGUuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2RlbGl2ZXJ5X2FnZW50LmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfZGVsaXZlcnlfYWdlbnQuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2VuZHBvaW50X21hbmFnZXIuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19lbmRwb2ludF9tYW5hZ2VyLmgnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19nYXJiYWdlX2NvbGxlY3Rvci5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2dhcmJhZ2VfY29sbGVjdG9yLmgnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19oZWFkZXJfcGFyc2VyLmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfaGVhZGVyX3BhcnNlci5oJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfbmV0d29ya19jaGFuZ2Vfb2JzZXJ2ZXIuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19uZXR3b3JrX2NoYW5nZV9vYnNlcnZlci5oJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfb2JzZXJ2ZXIuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19vYnNlcnZlci5oJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfcG9saWN5LmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfcG9saWN5LmgnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19yZXBvcnQuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19yZXBvcnQuaCcsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX3NlcnZpY2UuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19zZXJ2aWNlLmgnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ191cGxvYWRlci5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX3VwbG9hZGVyLmgnLAotICAgICAgICAnbmV0d29ya19lcnJvcl9sb2dnaW5nL25ldHdvcmtfZXJyb3JfbG9nZ2luZ19kZWxlZ2F0ZS5jYycsCi0gICAgICAgICduZXR3b3JrX2Vycm9yX2xvZ2dpbmcvbmV0d29ya19lcnJvcl9sb2dnaW5nX2RlbGVnYXRlLmgnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25ldF9ucWVfcHJvdG8nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0KLSAgICAgICdzb3VyY2VzJzogWyducWUvcHJvdG8vbmV0d29ya19pZF9wcm90by5wcm90byddLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NjX2dlbmVyYXRvcl9vcHRpb25zJzogJ2RsbGV4cG9ydF9kZWNsPU5FVF9FWFBPUlRfUFJJVkFURTonLAotICAgICAgICAnY2NfaW5jbHVkZSc6ICduZXQvYmFzZS9uZXRfZXhwb3J0LmgnLAotCi0gICAgICAgICdwcm90b19pbl9kaXInOiAnbnFlL3Byb3RvJywKLSAgICAgICAgJ3Byb3RvX291dF9kaXInOiAnbmV0L25xZS9wcm90bycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9idWlsZF9neXAvcHJvdG9jLmd5cGknXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICduZXRfcXVpY19wcm90bycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcHJvdG8vY2FjaGVkX25ldHdvcmtfcGFyYW1ldGVycy5wcm90bycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcHJvdG8vc291cmNlX2FkZHJlc3NfdG9rZW4ucHJvdG8nLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3Byb3RvL2NyeXB0b19zZXJ2ZXJfY29uZmlnLnByb3RvJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ05FVF9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NjX2dlbmVyYXRvcl9vcHRpb25zJzogJ2RsbGV4cG9ydF9kZWNsPU5FVF9FWFBPUlRfUFJJVkFURTonLAotICAgICAgICAnY2NfaW5jbHVkZSc6ICduZXQvYmFzZS9uZXRfZXhwb3J0LmgnLAotCi0gICAgICAgICdwcm90b19pbl9kaXInOiAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3Byb3RvLycsCi0gICAgICAgICdwcm90b19vdXRfZGlyJzogJ25ldC90aGlyZF9wYXJ0eS9xdWljL2NvcmUvcHJvdG8vJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL2J1aWxkX2d5cC9wcm90b2MuZ3lwaSddLAotCi0gICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjJywKLSAgICAgICAgXQotICAgICAgfSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25ldF9nZW5lcmF0ZWRfcmVnaXN0cnlfY29udHJvbGxlZF9kb21haW5zJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0KLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdkYXRhX2Rpcic6ICc8KERFUFRIKS9uZXQvYmFzZS9yZWdpc3RyeV9jb250cm9sbGVkX2RvbWFpbnMnLAotICAgICAgICAnb3V0cHV0X2Rpcic6Ci0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbmV0L2Jhc2UvcmVnaXN0cnlfY29udHJvbGxlZF9kb21haW5zJywKLSAgICAgICAgJ3NjcmlwdF9wYXRoJzogJzwoREVQVEgpL25ldC90b29scy9kYWZzYS9tYWtlX2RhZnNhLnB5JywKLSAgICAgICAgJ2dwZXJmX2ZpbGVzJzogWwotICAgICAgICAgICc8KGRhdGFfZGlyKS9lZmZlY3RpdmVfdGxkX25hbWVzLmdwZXJmJywKLSAgICAgICAgICAnPChkYXRhX2RpcikvZWZmZWN0aXZlX3RsZF9uYW1lc191bml0dGVzdDEuZ3BlcmYnLAotICAgICAgICAgICc8KGRhdGFfZGlyKS9lZmZlY3RpdmVfdGxkX25hbWVzX3VuaXR0ZXN0Mi5ncGVyZicsCi0gICAgICAgICAgJzwoZGF0YV9kaXIpL2VmZmVjdGl2ZV90bGRfbmFtZXNfdW5pdHRlc3QzLmdwZXJmJywKLSAgICAgICAgICAnPChkYXRhX2RpcikvZWZmZWN0aXZlX3RsZF9uYW1lc191bml0dGVzdDQuZ3BlcmYnLAotICAgICAgICAgICc8KGRhdGFfZGlyKS9lZmZlY3RpdmVfdGxkX25hbWVzX3VuaXR0ZXN0NS5ncGVyZicsCi0gICAgICAgICAgJzwoZGF0YV9kaXIpL2VmZmVjdGl2ZV90bGRfbmFtZXNfdW5pdHRlc3Q2LmdwZXJmJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgJzxAKGdwZXJmX2ZpbGVzKScsCi0gICAgICBdLAotICAgICAgJ3J1bGVzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3J1bGVfbmFtZSc6ICdidWlsZF9yZWdpc3RyeV9jb250cm9sbGVkX2RvbWFpbnMnLAotICAgICAgICAgICdleHRlbnNpb24nOiAnZ3BlcmYnLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnPChkYXRhX2RpcikvPChSVUxFX0lOUFVUX1JPT1QpLmdwZXJmJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwob3V0cHV0X2RpcikvPChSVUxFX0lOUFVUX1JPT1QpLWluYy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAgICc8KGRhdGFfZGlyKS88KFJVTEVfSU5QVVRfUk9PVCkuZ3BlcmYnLAotICAgICAgICAgICAgJzwob3V0cHV0X2RpcikvPChSVUxFX0lOUFVUX1JPT1QpLWluYy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdCdWlsZCBuZXQgcmVnaXN0cnkgY29udHJvbGxlZCBkb21haW5zIGRhdGEuJywKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICduZXRfdW5pdHRlc3RzJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYmFzZS9hZGRyZXNzX2ZhbWlseV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2FkZHJlc3NfbGlzdF91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2FyZW5hX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvYmFja29mZl9lbnRyeV9zZXJpYWxpemVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvYmFja29mZl9lbnRyeV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2NodW5rZWRfdXBsb2FkX2RhdGFfc3RyZWFtX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZGF0YV91cmxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9kYXRhZ3JhbV9idWZmZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9kaXJlY3RvcnlfbGlzdGluZ191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2VsZW1lbnRzX3VwbG9hZF9kYXRhX3N0cmVhbV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2VzY2FwZV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2V4cGlyaW5nX2NhY2hlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZmlsZV9zdHJlYW1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9maWxlbmFtZV91dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvaGV4X3V0aWxzX3Rlc3QuY2MnLAotICAgICAgICAnYmFzZS9ob3N0X21hcHBpbmdfcnVsZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9ob3N0X3BvcnRfcGFpcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2ludGVydmFsX3NldF90ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvaW50ZXJ2YWxfdGVzdC5jYycsCi0gICAgICAgICdiYXNlL2lwX2FkZHJlc3NfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9pcF9lbmRwb2ludF91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2lwX3BhdHRlcm5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9sYXllcmVkX25ldHdvcmtfZGVsZWdhdGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9sb29rdXBfc3RyaW5nX2luX2ZpeGVkX3NldF91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL21pbWVfc25pZmZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL21pbWVfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL25ldF9zdHJpbmdfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL25ldHdvcmtfYWN0aXZpdHlfbW9uaXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL25ldHdvcmtfY2hhbmdlX25vdGlmaWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvcGFyc2VfbnVtYmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvcG9ydF91dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvcHJpb3JpdGl6ZWRfZGlzcGF0Y2hlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3ByaW9yaXRpemVkX3Rhc2tfcnVubmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvcHJpb3JpdHlfcXVldWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9yZWdpc3RyeV9jb250cm9sbGVkX2RvbWFpbnMvcmVnaXN0cnlfY29udHJvbGxlZF9kb21haW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9zdGF0aWNfY29va2llX3BvbGljeV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3Rlc3RfY29tcGxldGlvbl9jYWxsYmFja191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3VwbG9hZF9ieXRlc19lbGVtZW50X3JlYWRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3VwbG9hZF9maWxlX2VsZW1lbnRfcmVhZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvdXJsX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9jYWNoaW5nX2NlcnRfdmVyaWZpZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9jZXJ0X3ZlcmlmaWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvY2VydF92ZXJpZnlfcHJvY191bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2NybF9zZXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9jdF9sb2dfcmVzcG9uc2VfcGFyc2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvY3RfbG9nX3ZlcmlmaWVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvY3Rfb2JqZWN0c19leHRyYWN0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9jdF9zZXJpYWxpemF0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvZXZfcm9vdF9jYV9tZXRhZGF0YV91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRfaXNzdWVyX3NvdXJjZV9haWFfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9jZXJ0X2lzc3Vlcl9zb3VyY2Vfc3RhdGljX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvY2VydF9pc3N1ZXJfc291cmNlX3N5bmNfdW5pdHRlc3QuaCcsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL2NlcnRpZmljYXRlX3BvbGljaWVzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvZXh0ZW5kZWRfa2V5X3VzYWdlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnY2VydC94NTA5X3V0aWxfbnNzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvZ2VuZXJhbF9uYW1lc191bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL25hbWVfY29uc3RyYWludHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9uaXN0X3BraXRzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvbmlzdF9wa2l0c191bml0dGVzdC5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvb2NzcF91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhcnNlX2NlcnRpZmljYXRlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyA8Y2VydHQuaD4gbm90IGZvdW5kLgotICAgICAgICAjICdjZXJ0X25ldC9uc3Nfb2NzcF91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhcnNlX25hbWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9wYXJzZWRfY2VydGlmaWNhdGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAjIDxjZXJ0Lmg+IG5vdCBmb3VuZC4KLSAgICAgICAgIyAnY2VydC9uc3NfY2VydF9kYXRhYmFzZV91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhdGhfYnVpbGRlcl9wa2l0c191bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhdGhfYnVpbGRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3BhdGhfYnVpbGRlcl92ZXJpZnlfY2VydGlmaWNhdGVfY2hhaW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9yZXZvY2F0aW9uX2NoZWNrZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC9zaWduYXR1cmVfYWxnb3JpdGhtX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvc2ltcGxlX3BhdGhfYnVpbGRlcl9kZWxlZ2F0ZV91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3Rlc3RfaGVscGVycy5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3Rlc3RfaGVscGVycy5oJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvdHJ1c3Rfc3RvcmVfY29sbGVjdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2NlcnQvaW50ZXJuYWwvdHJ1c3Rfc3RvcmVfbnNzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvdmVyaWZ5X2NlcnRpZmljYXRlX2NoYWluX3BraXRzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvaW50ZXJuYWwvdmVyaWZ5X2NlcnRpZmljYXRlX2NoYWluX3R5cGVkX3VuaXR0ZXN0LmgnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC92ZXJpZnlfY2VydGlmaWNhdGVfY2hhaW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9pbnRlcm5hbC92ZXJpZnlfbmFtZV9tYXRjaF91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2ludGVybmFsL3ZlcmlmeV9zaWduZWRfZGF0YV91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L2p3a19zZXJpYWxpemVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQva25vd25fcm9vdHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9tZXJrbGVfYXVkaXRfcHJvb2ZfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9tZXJrbGVfdHJlZV9sZWFmX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvbXVsdGlfdGhyZWFkZWRfY2VydF92ZXJpZmllcl91bml0dGVzdC5jYycsCi0gICAgICAgICdjZXJ0L3BlbV90b2tlbml6ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC9zaWduZWRfY2VydGlmaWNhdGVfdGltZXN0YW1wX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQvc3ltYW50ZWNfY2VydHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC90ZXN0X3Jvb3RfY2VydHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRfdHlwZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY2VydC94NTA5X2NlcnRpZmljYXRlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnQveDUwOV91dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2NlcnRfbmV0L2NlcnRfbmV0X2ZldGNoZXJfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICdkbnMvZG5zX2NvbmZpZ19zZXJ2aWNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9kbnNfY29uZmlnX3NlcnZpY2Vfd2luX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9kbnNfaG9zdHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZG5zL2Ruc19xdWVyeV91bml0dGVzdC5jYycsCi0gICAgICAgICdkbnMvZG5zX3Jlc3BvbnNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9kbnNfc2Vzc2lvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdkbnMvZG5zX3NvY2tldF9wb29sX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9kbnNfdHJhbnNhY3Rpb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZG5zL2Ruc191dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X2NhY2hlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9ob3N0X3Jlc29sdmVyX2ltcGxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZG5zL21hcHBlZF9ob3N0X3Jlc29sdmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9yZWNvcmRfcGFyc2VkX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rucy9yZWNvcmRfcmRhdGFfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZG5zL3NlcmlhbF93b3JrZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29va2llcy9jYW5vbmljYWxfY29va2llX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX2NvbnN0YW50c191bml0dGVzdC5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9tb25zdGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX2RlbGV0aW9uX2luZm9fdW5pdHRlc3QuY2MnLAotICAgICAgICAnY29va2llcy9jb29raWVfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdjb29raWVzL3BhcnNlZF9jb29raWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZGVyL2VuY29kZV92YWx1ZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZGVyL2lucHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Rlci9wYXJzZV92YWx1ZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZGVyL3BhcnNlcl91bml0dGVzdC5jYycsCi0KLSAgICAgICAgIyBkaWFsIGlzIGEgbGVnYWN5IGNvbXBvbmVudCB3ZSBrZXB0IGZyb20gb2xkIENocm9taXVtIG5ldC4KLSAgICAgICAgJ2RpYWwvZGlhbF9odHRwX3NlcnZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdkaWFsL2RpYWxfc2VydmljZV91bml0dGVzdC5jYycsCi0gICAgICAgICdkaWFsL2RpYWxfdGVzdF9oZWxwZXJzLmgnLAotICAgICAgICAnZGlhbC9kaWFsX3VkcF9zZXJ2ZXJfdW5pdHRlc3RzLmNjJywKLQotICAgICAgICAjIGRpc2tfY2FjaGUgY29tcG9uZW50IGlzIGRpc2FibGVkIGJlY2F1c2Ugb25seSBodHRwIGNhY2hlIGRlcGVuZHMgb24KLSAgICAgICAgIyBpdCBhbmQgQ29iYWx0IGRvZXMgbm90IHN1cHBvcnQgaHR0cCBjYWNoZSB5ZXQuCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmFja2VuZF9jbGVhbnVwX3RyYWNrZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2JhY2tlbmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9hZGRyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvYml0bWFwX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvYmxvY2tfZmlsZXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Jsb2NrZmlsZS9tYXBwZWRfZmlsZV91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvYmxvY2tmaWxlL3N0YXRzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9ibG9ja2ZpbGUvc3RvcmFnZV9ibG9ja191bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvY2FjaGVfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvZW50cnlfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfZmlsZV90cmFja2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX2luZGV4X2ZpbGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfaW5kZXhfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfdGVzdF91dGlsLmNjJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgIyAnZGlza19jYWNoZS9zaW1wbGUvc2ltcGxlX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL3NpbXBsZS9zaW1wbGVfdmVyc2lvbl91cGdyYWRlX3VuaXR0ZXN0LmNjJywKLQotICAgICAgICAjICMgQ29iYWx0IHByb2JhYmx5IGRvbid0IG5lZWQgdGhlc2UuCi0gICAgICAgICMgIyAnZXh0cmFzL3NxbGl0ZS9zcWxpdGVfY2hhbm5lbF9pZF9zdG9yZV91bml0dGVzdC5jYycsCi0gICAgICAgICMgIyAnZXh0cmFzL3NxbGl0ZS9zcWxpdGVfcGVyc2lzdGVudF9jb29raWVfc3RvcmVfdW5pdHRlc3QuY2MnLAotCi0gICAgICAgICdmaWx0ZXIvYnJvdGxpX3NvdXJjZV9zdHJlYW1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVyL2ZpbHRlcl9zb3VyY2Vfc3RyZWFtX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlci9nemlwX3NvdXJjZV9zdHJlYW1fdW5pdHRlc3QuY2MnLAotCi0gICAgICAgICMgQ29iYWx0IGRvZXMgbm90IHN1cHBvcnQgZnRwLgotICAgICAgICAjICdmdHAvZnRwX2F1dGhfY2FjaGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdmdHAvZnRwX2N0cmxfcmVzcG9uc2VfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZnRwL2Z0cF9kaXJlY3RvcnlfbGlzdGluZ19wYXJzZXJfbHNfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdmdHAvZnRwX2RpcmVjdG9yeV9saXN0aW5nX3BhcnNlcl91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2Z0cC9mdHBfZGlyZWN0b3J5X2xpc3RpbmdfcGFyc2VyX3VuaXR0ZXN0LmgnLAotICAgICAgICAjICdmdHAvZnRwX2RpcmVjdG9yeV9saXN0aW5nX3BhcnNlcl92bXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdmdHAvZnRwX2RpcmVjdG9yeV9saXN0aW5nX3BhcnNlcl93aW5kb3dzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZnRwL2Z0cF9uZXR3b3JrX3RyYW5zYWN0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAnZnRwL2Z0cF91dGlsX3VuaXR0ZXN0LmNjJywKLQotICAgICAgICAnaHR0cC9iaWRpcmVjdGlvbmFsX3N0cmVhbV91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2Jyb2tlbl9hbHRlcm5hdGl2ZV9zZXJ2aWNlc191bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9jYWNoZV91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9jaGFsbGVuZ2VfdG9rZW5pemVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2NvbnRyb2xsZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfZmlsdGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfYmFzaWNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlcl9kaWdlc3RfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2F1dGhfaGFuZGxlcl9mYWN0b3J5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbW9jay5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9oYW5kbGVyX21vY2suaCcsCi0gICAgICAgICMgQ29iYWx0IGRvZXMgbm90IHN1cHBvcnQgS2VyYmVyb3MoZ3NzYXBpKSB5ZXQuCi0gICAgICAgICMgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbmVnb3RpYXRlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX2hhbmRsZXJfbnRsbV9wb3J0YWJsZV91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYXV0aF9oYW5kbGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX211bHRpX3JvdW5kX3BhcnNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX3ByZWZlcmVuY2VzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX3NzcGlfd2luX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9hdXRoX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9iYXNpY19zdGF0ZV91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfYnl0ZV9yYW5nZV91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jYWNoZV9sb29rdXBfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jYWNoZV91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jYWNoZV93cml0ZXJzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyAndXJsX3JlcXVlc3Qvdmlld19jYWNoZV9oZWxwZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX2NodW5rZWRfZGVjb2Rlcl91bml0dGVzdC5jYycsCi0KLSAgICAgICAgIyBLbm93biBJQ1UgaXNzdWUuCi0gICAgICAgICMgJ2h0dHAvaHR0cF9jb250ZW50X2Rpc3Bvc2l0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9sb2dfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfbmV0d29ya19sYXllcl91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfbmV0d29ya190cmFuc2FjdGlvbl9zc2xfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX25ldHdvcmtfdHJhbnNhY3Rpb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Byb3h5X2NsaWVudF9zb2NrZXRfcG9vbF91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcHJveHlfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcHJveHlfY2xpZW50X3NvY2tldF93cmFwcGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9yZXF1ZXN0X2hlYWRlcnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3Jlc3BvbnNlX2JvZHlfZHJhaW5lcl91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcmVzcG9uc2VfaGVhZGVyc191bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfcmVzcG9uc2VfaW5mb191bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc2VjdXJpdHlfaGVhZGVyc191bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc2VydmVyX3Byb3BlcnRpZXNfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc2VydmVyX3Byb3BlcnRpZXNfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc3RhdHVzX2NvZGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3N0cmVhbV9mYWN0b3J5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fZmFjdG9yeV9qb2JfY29udHJvbGxlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc3RyZWFtX3BhcnNlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL2h0dHBfc3RyZWFtX3JlcXVlc3RfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC9odHRwX3ZhcnlfZGF0YV91bml0dGVzdC5jYycsCi0gICAgICAgICdodHRwL21vY2tfYWxsb3dfaHR0cF9hdXRoX3ByZWZlcmVuY2VzLmNjJywKLSAgICAgICAgJ2h0dHAvbW9ja19hbGxvd19odHRwX2F1dGhfcHJlZmVyZW5jZXMuaCcsCi0gICAgICAgICMgJ2h0dHAvbW9ja19odHRwX2NhY2hlLmNjJywKLSAgICAgICAgIyAnaHR0cC9tb2NrX2h0dHBfY2FjaGUuaCcsCi0gICAgICAgICMgTWFpbiB0ZXN0IHRhcmdldCBub3QgZW5hYmxlZCB5ZXQuCi0gICAgICAgICMgJ2h0dHAvdHJhbnNwb3J0X3NlY3VyaXR5X3BlcnNpc3Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2xvZy9maWxlX25ldF9sb2dfb2JzZXJ2ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC90cmFuc3BvcnRfc2VjdXJpdHlfc3RhdGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnaHR0cC91cmxfc2VjdXJpdHlfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdsb2cvbmV0X2xvZ19jYXB0dXJlX21vZGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2dfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbG9nL25ldF9sb2dfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdsb2cvdHJhY2VfbmV0X2xvZ19vYnNlcnZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvZWZmZWN0aXZlX2Nvbm5lY3Rpb25fdHlwZV91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvZXZlbnRfY3JlYXRvcl91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19pZF91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXRpZXNfcHJlZnNfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X2VzdGltYXRvcl9wYXJhbXNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbnFlL25ldHdvcmtfcXVhbGl0eV9lc3RpbWF0b3JfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X3N0b3JlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ25xZS9vYnNlcnZhdGlvbl9idWZmZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbnFlL3NvY2tldF93YXRjaGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ25xZS90aHJvdWdocHV0X2FuYWx5emVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ250bG0vbnRsbV9idWZmZXJfcmVhZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ250bG0vbnRsbV9idWZmZXJfd3JpdGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ250bG0vbnRsbV9jbGllbnRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnbnRsbS9udGxtX3Rlc3RfZGF0YS5oJywKLSAgICAgICAgJ250bG0vbnRsbV91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ2h0dHAvaHR0cF9hdXRoX2dzc2FwaV9zdGFyYm9hcmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9kaGNwX3BhY19maWxlX2FkYXB0ZXJfZmV0Y2hlcl93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9kaGNwX3BhY19maWxlX2ZldGNoZXJfZmFjdG9yeV91bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL2RoY3BfcGFjX2ZpbGVfZmV0Y2hlcl93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAjIG1vam8gbm90IHVzZWQuCi0gICAgICAgICMgJ3Byb3h5X3Jlc29sdXRpb24vbW9qb19wcm94eV9yZXNvbHZlcl92OF90cmFjaW5nX2JpbmRpbmdzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vbXVsdGlfdGhyZWFkZWRfcHJveHlfcmVzb2x2ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9uZXR3b3JrX2RlbGVnYXRlX2Vycm9yX29ic2VydmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcGFjX2ZpbGVfZGVjaWRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3BhY19maWxlX2ZldGNoZXJfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2J5cGFzc19ydWxlc191bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2NvbmZpZ191bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2luZm9fdW5pdHRlc3QuY2MnLAotICAgICAgICAncHJveHlfcmVzb2x1dGlvbi9wcm94eV9saXN0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfcmVzb2x1dGlvbl9zZXJ2aWNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfc2VydmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgIyBub3QgdXNlZnVsIHRvIHVzLgotICAgICAgICAjICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X3Jlc29sdmVyX3Y4X3RyYWNpbmdfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X3Jlc29sdmVyX3Y4X3RyYWNpbmdfd3JhcHBlcl91bml0dGVzdC5jYycsCi0gICAgICAgICMgJ3Byb3h5X3Jlc29sdXRpb24vcHJveHlfcmVzb2x2ZXJfdjhfdW5pdHRlc3QuY2MnLAotICAgICAgICAncXVpYy9iaWRpcmVjdGlvbmFsX3N0cmVhbV9xdWljX2ltcGxfdW5pdHRlc3QuY2MnLAotICAgICAgICAncXVpYy9jcnlwdG8vcHJvb2ZfdGVzdF9jaHJvbWl1bS5jYycsCi0gICAgICAgICdxdWljL2NyeXB0by9wcm9vZl92ZXJpZmllcl9jaHJvbWl1bV90ZXN0LmNjJywKLSAgICAgICAgJ3F1aWMvbmV0d29ya19jb25uZWN0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3F1aWMvcHJvcGVydGllc19iYXNlZF9xdWljX3NlcnZlcl9pbmZvX3Rlc3QuY2MnLAotICAgICAgICAncXVpYy9xdWljX2FkZHJlc3NfbWlzbWF0Y2hfdGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY2hyb21pdW1fYWxhcm1fZmFjdG9yeV90ZXN0LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jbGllbnRfc2Vzc2lvbl9wZWVyLmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jaHJvbWl1bV9jbGllbnRfc2Vzc2lvbl9wZWVyLmgnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX2NsaWVudF9zZXNzaW9uX3Rlc3QuY2MnLAotICAgICAgICAncXVpYy9xdWljX2Nocm9taXVtX2NsaWVudF9zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY2hyb21pdW1fY29ubmVjdGlvbl9oZWxwZXJfdGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfY2xvY2tfc2tld19kZXRlY3Rvcl90ZXN0LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY19jb25uZWN0aXZpdHlfcHJvYmluZ19tYW5hZ2VyX3Rlc3QuY2MnLAotICAgICAgICAncXVpYy9xdWljX2VuZF90b19lbmRfdW5pdHRlc3QuY2MnLAotICAgICAgICAncXVpYy9xdWljX2h0dHBfc3RyZWFtX3Rlc3QuY2MnLAotICAgICAgICAncXVpYy9xdWljX2h0dHBfdXRpbHNfdGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfbmV0d29ya190cmFuc2FjdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfcHJveHlfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdxdWljL3F1aWNfc3RyZWFtX2ZhY3RvcnlfcGVlci5jYycsCi0gICAgICAgICdxdWljL3F1aWNfc3RyZWFtX2ZhY3RvcnlfcGVlci5oJywKLSAgICAgICAgJ3F1aWMvcXVpY19zdHJlYW1fZmFjdG9yeV90ZXN0LmNjJywKLSAgICAgICAgJ3F1aWMvcXVpY191dGlsc19jaHJvbWl1bV90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldC9jbGllbnRfc29ja2V0X3Bvb2xfYmFzZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvbW9ja19jbGllbnRfc29ja2V0X3Bvb2xfbWFuYWdlci5jYycsCi0gICAgICAgICdzb2NrZXQvbW9ja19jbGllbnRfc29ja2V0X3Bvb2xfbWFuYWdlci5oJywKLSAgICAgICAgJ3NvY2tldC9zZXF1ZW5jZWRfc29ja2V0X2RhdGFfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc29ja2V0L3NvY2tldF9iaW9fYWRhcHRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja2V0X3RhZ191bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja3M1X2NsaWVudF9zb2NrZXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc29ja2V0L3NvY2tzX2NsaWVudF9zb2NrZXRfcG9vbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvc29ja3NfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvc3NsX2NsaWVudF9zb2NrZXRfcG9vbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvc3NsX2NsaWVudF9zb2NrZXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc29ja2V0L3NzbF9zZXJ2ZXJfc29ja2V0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldC90Y3BfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvdGNwX3NlcnZlcl9zb2NrZXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc29ja2V0L3RjcF9zb2NrZXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc29ja2V0L3RyYW5zcG9ydF9jbGllbnRfc29ja2V0X3Bvb2xfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3NvY2tldC90cmFuc3BvcnRfY2xpZW50X3NvY2tldF9wb29sX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3NvY2tldC90cmFuc3BvcnRfY2xpZW50X3NvY2tldF9wb29sX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldC90cmFuc3BvcnRfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvdWRwX3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X2VuZHBvaW50X2xvY2tfbWFuYWdlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzb2NrZXQvd2Vic29ja2V0X3RyYW5zcG9ydF9jbGllbnRfc29ja2V0X3Bvb2xfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3BkeS9iaWRpcmVjdGlvbmFsX3N0cmVhbV9zcGR5X2ltcGxfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3BkeS9idWZmZXJlZF9zcGR5X2ZyYW1lcl91bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L2hlYWRlcl9jb2FsZXNjZXJfdGVzdC5jYycsCi0gICAgICAgICdzcGR5L2h0dHAyX3ByaW9yaXR5X2RlcGVuZGVuY2llc191bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L2h0dHAyX3B1c2hfcHJvbWlzZV9pbmRleF90ZXN0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9idWZmZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3BkeS9zcGR5X2h0dHBfc3RyZWFtX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9odHRwX3V0aWxzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9sb2dfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfbmV0d29ya190cmFuc2FjdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfcHJveHlfY2xpZW50X3NvY2tldF91bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfcmVhZF9xdWV1ZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbl9wb29sX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zZXNzaW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zdHJlYW1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3BkeS9zcGR5X3dyaXRlX3F1ZXVlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9jaGFubmVsX2lkX3NlcnZpY2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3NsL2NsaWVudF9jZXJ0X2lkZW50aXR5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9jbGllbnRfY2VydF9zdG9yZV91bml0dGVzdC1pbmwuaCcsCi0gICAgICAgICdzc2wvZGVmYXVsdF9jaGFubmVsX2lkX3N0b3JlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY2lwaGVyX3N1aXRlX25hbWVzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY2xpZW50X2F1dGhfY2FjaGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3NsL3NzbF9jbGllbnRfc2Vzc2lvbl9jYWNoZV91bml0dGVzdC5jYycsCi0gICAgICAgICdzc2wvc3NsX2NvbmZpZ19zZXJ2aWNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY29uZmlnX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3NzbC9zc2xfY29ubmVjdGlvbl9zdGF0dXNfZmxhZ3NfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc3NsL3NzbF9wbGF0Zm9ybV9rZXlfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdzc2wvc3NsX3BsYXRmb3JtX2tleV93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9lbWJlZGRlZF90ZXN0X3NlcnZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL2h0dHBfcmVxdWVzdF91bml0dGVzdC5jYycsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL2h0dHBfcmVzcG9uc2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAndGVzdC9ydW5fYWxsX3VuaXR0ZXN0cy5jYycsCi0gICAgICAgICd0ZXN0L3RjcF9zb2NrZXRfcHJveHlfdW5pdHRlc3QuY2MnLAotCi0gICAgICAgICd0aGlyZF9wYXJ0eS9uaXN0LXBraXRzL3BraXRzX3Rlc3RjYXNlcy1pbmwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL2JhbmR3aWR0aF9zYW1wbGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9iYnJfc2VuZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2Nvbmdlc3Rpb25fY29udHJvbC9jdWJpY19ieXRlc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvZ2VuZXJhbF9sb3NzX2FsZ29yaXRobV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvaHlicmlkX3Nsb3dfc3RhcnRfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3BhY2luZ19zZW5kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3Bycl9zZW5kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3J0dF9zdGF0c190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jb25nZXN0aW9uX2NvbnRyb2wvc2VuZF9hbGdvcml0aG1fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3ViZXJfbG9zc19hbGdvcml0aG1fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY29uZ2VzdGlvbl9jb250cm9sL3dpbmRvd2VkX2ZpbHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fMTJfZGVjcnlwdGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMTI4X2djbV8xMl9lbmNyeXB0ZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18xMjhfZ2NtX2RlY3J5cHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vYWVzXzEyOF9nY21fZW5jcnlwdGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9hZXNfMjU2X2djbV9kZWNyeXB0ZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2Flc18yNTZfZ2NtX2VuY3J5cHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2VydF9jb21wcmVzc29yX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jaGFjaGEyMF9wb2x5MTMwNV9kZWNyeXB0ZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NoYWNoYTIwX3BvbHkxMzA1X2VuY3J5cHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDVfdGxzX2RlY3J5cHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2hhY2hhMjBfcG9seTEzMDVfdGxzX2VuY3J5cHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY2hhbm5lbF9pZF90ZXN0LmNjJywKLSAgICAgICAgIyAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jb21tb25fY2VydF9zZXRfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19mcmFtZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL2NyeXB0b19oYW5kc2hha2VfbWVzc2FnZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX3NlY3JldF9ib3hlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX3NlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vY3J5cHRvX3V0aWxzX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9jdXJ2ZTI1NTE5X2tleV9leGNoYW5nZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vbnVsbF9kZWNyeXB0ZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL251bGxfZW5jcnlwdGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9wMjU2X2tleV9leGNoYW5nZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9jcnlwdG8vcXVpY19jb21wcmVzc2VkX2NlcnRzX2NhY2hlX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0b19jbGllbnRfY29uZmlnX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2NyeXB0b19zZXJ2ZXJfY29uZmlnX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by9xdWljX2hrZGZfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvY3J5cHRvL3F1aWNfcmFuZG9tX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2NyeXB0by90cmFuc3BvcnRfcGFyYW1ldGVyc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9mcmFtZXMvcXVpY19mcmFtZXNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9odHRwX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9odHRwX2VuY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX2NsaWVudF9wcm9taXNlZF9pbmZvX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19jbGllbnRfcHVzaF9wcm9taXNlX2luZGV4X3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19oZWFkZXJfbGlzdF90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfaGVhZGVyc19zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX3NlcnZlcl9zZXNzaW9uX2Jhc2VfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX3NwZHlfc2Vzc2lvbl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9zdHJlYW1fYm9keV9idWZmZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvaHR0cC9xdWljX3NwZHlfc3RyZWFtX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvc3BkeV91dGlsc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9sZWdhY3lfcXVpY19zdHJlYW1faWRfbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9wYWNrZXRfbnVtYmVyX2luZGV4ZWRfcXVldWVfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfZGVjb2RlZF9oZWFkZXJzX2FjY3VtdWxhdG9yX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2RlY29kZXJfc3RyZWFtX3JlY2VpdmVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2RlY29kZXJfc3RyZWFtX3NlbmRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2VuY29kZXJfc3RyZWFtX3JlY2VpdmVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2VuY29kZXJfc3RyZWFtX3NlbmRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2hlYWRlcl90YWJsZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19pbnN0cnVjdGlvbl9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2luc3RydWN0aW9uX2VuY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfcHJvZ3Jlc3NpdmVfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19yb3VuZF90cmlwX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX3N0YXRpY190YWJsZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2FsYXJtX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfYXJlbmFfc2NvcGVkX3B0cl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2JhbmR3aWR0aF90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2J1ZmZlcmVkX3BhY2tldF9zdG9yZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NvbmZpZ190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Nvbm5lY3Rpb25faWRfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jb25uZWN0aW9uX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY29udHJvbF9mcmFtZV9tYW5hZ2VyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX2NsaWVudF9oYW5kc2hha2VyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfY3J5cHRvX2NsaWVudF9zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19jcnlwdG9fc2VydmVyX3N0cmVhbV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2NyeXB0b19zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19kYXRhX3dyaXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Rpc3BhdGNoZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19lcnJvcl9jb2Rlc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Zsb3dfY29udHJvbGxlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2ZyYW1lcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2lldGZfZnJhbWVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfaW50ZXJ2YWxfc2V0X3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfaW50ZXJ2YWxfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19scnVfY2FjaGVfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19vbmVfYmxvY2tfYXJlbmFfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfY3JlYXRvcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3BhY2tldF9nZW5lcmF0b3JfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfbnVtYmVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfcmVjZWl2ZWRfcGFja2V0X21hbmFnZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zZW50X3BhY2tldF9tYW5hZ2VyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc2VydmVyX2lkX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc2Vzc2lvbl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3NpbXBsZV9idWZmZXJfYWxsb2NhdG9yX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc29ja2V0X2FkZHJlc3NfY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19zdHJlYW1faWRfbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N0cmVhbV9zZW5kX2J1ZmZlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N0cmVhbV9zZXF1ZW5jZXJfYnVmZmVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfc3RyZWFtX3NlcXVlbmNlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N0cmVhbV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3N1c3RhaW5lZF9iYW5kd2lkdGhfcmVjb3JkZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190YWdfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190aW1lX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfdGltZV93YWl0X2xpc3RfbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgIyBUcmFjZVZpc2l0b3IgaXMgbm90IHN1cHBvcnRlZCB5ZXQuCi0gICAgICAgICMgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3RyYWNlX3Zpc2l0b3JfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY191bmFja2VkX3BhY2tldF9tYXBfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY191dGlsc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3ZlcnNpb25fbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3ZlcnNpb25zX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfd3JpdGVfYmxvY2tlZF9saXN0X3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3Rsc19oYW5kc2hha2VyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3ViZXJfcXVpY19zdHJlYW1faWRfbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfY29udGFpbmVyc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfZW5kaWFuX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19ob3N0bmFtZV91dGlsc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfbWVtX3NsaWNlX3NwYW5fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX21lbV9zbGljZV9zdG9yYWdlX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19tZW1fc2xpY2VfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3JlZmVyZW5jZV9jb3VudGVkX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19zaW5nbGV0b25fdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3N0cl9jYXRfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3RleHRfdXRpbHNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY19jaHJvbWl1bV9jbG9ja190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3VpbnQxMjhfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvY3J5cHRvX3Rlc3RfdXRpbHNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19xdWljX3RpbWVfd2FpdF9saXN0X21hbmFnZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfcXVpY190aW1lX3dhaXRfbGlzdF9tYW5hZ2VyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfdGVzdF91dGlsc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW1wbGVfc2Vzc2lvbl9ub3RpZmllcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvcXVpY19lbmRwb2ludF90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3Ivc2ltdWxhdG9yX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2RlY29kZV9idWZmZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZGVjb2RlX2h0dHAyX3N0cnVjdHVyZXNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvZnJhbWVfZGVjb2Rlcl9zdGF0ZV90ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2ZyYW1lX2RlY29kZXJfc3RhdGVfdGVzdF91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2h0dHAyX2ZyYW1lX2RlY29kZXJfbGlzdGVuZXJfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9odHRwMl9mcmFtZV9kZWNvZGVyX2xpc3RlbmVyX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9odHRwMl9mcmFtZV9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2h0dHAyX3N0cnVjdHVyZV9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL2h0dHAyX3N0cnVjdHVyZV9kZWNvZGVyX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvaHR0cDJfc3RydWN0dXJlX2RlY29kZXJfdGVzdF91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvYWx0c3ZjX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2NvbnRpbnVhdGlvbl9wYXlsb2FkX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9kYXRhX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL2dvYXdheV9wYXlsb2FkX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9oZWFkZXJzX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL3BheWxvYWRfZGVjb2Rlcl9iYXNlX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9wYXlsb2FkX2RlY29kZXJfYmFzZV90ZXN0X3V0aWwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9waW5nX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL3ByaW9yaXR5X3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL3B1c2hfcHJvbWlzZV9wYXlsb2FkX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2RlY29kZXIvcGF5bG9hZF9kZWNvZGVycy9yc3Rfc3RyZWFtX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL3NldHRpbmdzX3BheWxvYWRfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvZGVjb2Rlci9wYXlsb2FkX2RlY29kZXJzL3Vua25vd25fcGF5bG9hZF9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9kZWNvZGVyL3BheWxvYWRfZGVjb2RlcnMvd2luZG93X3VwZGF0ZV9wYXlsb2FkX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfYmxvY2tfY29sbGVjdG9yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19ibG9ja19jb2xsZWN0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfYmxvY2tfZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3N0YXRlX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2RlY29kZXJfc3RyaW5nX2J1ZmZlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3RhYmxlc190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svZGVjb2Rlci9ocGFja19kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2VudHJ5X2NvbGxlY3Rvci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZW50cnlfY29sbGVjdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX2VudHJ5X2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfZW50cnlfdHlwZV9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX3N0cmluZ19jb2xsZWN0b3IuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9kZWNvZGVyL2hwYWNrX3N0cmluZ19jb2xsZWN0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfc3RyaW5nX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2RlY29kZXIvaHBhY2tfd2hvbGVfZW50cnlfYnVmZmVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9ocGFja19zdHJpbmdfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2h0dHAyX2hwYWNrX2NvbnN0YW50c190ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svaHVmZm1hbi9ocGFja19odWZmbWFuX2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL2h1ZmZtYW4vaHBhY2tfaHVmZm1hbl9lbmNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay9odWZmbWFuL2hwYWNrX2h1ZmZtYW5fdHJhbnNjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svdG9vbHMvaHBhY2tfYmxvY2tfYnVpbGRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3Rvb2xzL2hwYWNrX2Jsb2NrX2J1aWxkZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3Rvb2xzL2hwYWNrX2Jsb2NrX2J1aWxkZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3Rvb2xzL2hwYWNrX2V4YW1wbGUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay90b29scy9ocGFja19leGFtcGxlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9ocGFjay92YXJpbnQvaHBhY2tfdmFyaW50X2RlY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2hwYWNrL3ZhcmludC9ocGFja192YXJpbnRfZW5jb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvaHBhY2svdmFyaW50L2hwYWNrX3ZhcmludF9yb3VuZF90cmlwX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9jb25zdGFudHNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2h0dHAyX2NvbnN0YW50c190ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9jb25zdGFudHNfdGVzdF91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9zdHJ1Y3R1cmVzX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9odHRwMl9zdHJ1Y3R1cmVzX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL2h0dHAyX3N0cnVjdHVyZXNfdGVzdF91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi9wbGF0Zm9ybS9hcGkvaHR0cDJfbW9ja19sb2cuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3BsYXRmb3JtL2FwaS9odHRwMl9zdHJpbmdfdXRpbHNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3BsYXRmb3JtL2FwaS9odHRwMl90ZXN0X2hlbHBlcnMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rlc3RfdG9vbHMvZnJhbWVfcGFydHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90ZXN0X3Rvb2xzL2ZyYW1lX3BhcnRzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90ZXN0X3Rvb2xzL2ZyYW1lX3BhcnRzX2NvbGxlY3Rvci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rlc3RfdG9vbHMvZnJhbWVfcGFydHNfY29sbGVjdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90ZXN0X3Rvb2xzL2ZyYW1lX3BhcnRzX2NvbGxlY3Rvcl9saXN0ZW5lci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rlc3RfdG9vbHMvZnJhbWVfcGFydHNfY29sbGVjdG9yX2xpc3RlbmVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90ZXN0X3Rvb2xzL2h0dHAyX3JhbmRvbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rlc3RfdG9vbHMvaHR0cDJfcmFuZG9tLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90ZXN0X3Rvb2xzL2h0dHAyX3JhbmRvbV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvaHR0cDIvdG9vbHMvaHR0cDJfZnJhbWVfYnVpbGRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rvb2xzL2h0dHAyX2ZyYW1lX2J1aWxkZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rvb2xzL3JhbmRvbV9kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90b29scy9yYW5kb21fZGVjb2Rlcl90ZXN0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9odHRwMi90b29scy9yYW5kb21fdXRpbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL2h0dHAyL3Rvb2xzL3JhbmRvbV91dGlsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvYXJyYXlfb3V0cHV0X2J1ZmZlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9hcnJheV9vdXRwdXRfYnVmZmVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvYXJyYXlfb3V0cHV0X2J1ZmZlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2RlY29kZXJfYWRhcHRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2VuY29kZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19lbnRyeV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2hlYWRlcl90YWJsZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX2h1ZmZtYW5fdGFibGVfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9ocGFjay9ocGFja19vdXRwdXRfc3RyZWFtX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvaHBhY2svaHBhY2tfcm91bmRfdHJpcF90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL2hwYWNrL2hwYWNrX3N0YXRpY190YWJsZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL21vY2tfc3BkeV9mcmFtZXJfdmlzaXRvci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9tb2NrX3NwZHlfZnJhbWVyX3Zpc2l0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9wcmlvcml0eV93cml0ZV9zY2hlZHVsZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2FsdF9zdmNfd2lyZV9mb3JtYXRfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2RlZnJhbWVyX3Zpc2l0b3IuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9kZWZyYW1lcl92aXNpdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9kZWZyYW1lcl92aXNpdG9yX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9mcmFtZV9idWlsZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9mcmFtZV9yZWFkZXJfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X2ZyYW1lcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfaGVhZGVyX2Jsb2NrX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9ub19vcF92aXNpdG9yLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfbm9fb3BfdmlzaXRvci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcGlubmFibGVfYnVmZmVyX3BpZWNlX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9wcmVmaXhlZF9idWZmZXJfcmVhZGVyX3Rlc3QuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV9wcm90b2NvbF90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9jb3JlL3NwZHlfcHJvdG9jb2xfdGVzdF91dGlscy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X3Byb3RvY29sX3Rlc3RfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvY29yZS9zcGR5X3Rlc3RfdXRpbHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L2NvcmUvc3BkeV90ZXN0X3V0aWxzLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpY2hlL3NyYy9zcGR5L3BsYXRmb3JtL2FwaS9zcGR5X21lbV9zbGljZV90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWNoZS9zcmMvc3BkeS9wbGF0Zm9ybS9hcGkvc3BkeV9zdHJpbmdfdXRpbHNfdGVzdC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljaGUvc3JjL3NwZHkvcGxhdGZvcm0vYXBpL3NwZHlfdGVzdF9oZWxwZXJzLmgnLAotICAgICAgICAndG9vbHMvY29udGVudF9kZWNvZGVyX3Rvb2wvY29udGVudF9kZWNvZGVyX3Rvb2wuY2MnLAotICAgICAgICAndG9vbHMvY29udGVudF9kZWNvZGVyX3Rvb2wvY29udGVudF9kZWNvZGVyX3Rvb2wuaCcsCi0gICAgICAgICd0b29scy9jb250ZW50X2RlY29kZXJfdG9vbC9jb250ZW50X2RlY29kZXJfdG9vbF91bml0dGVzdC5jYycsCi0gICAgICAgICd0b29scy9xdWljL3F1aWNfc2ltcGxlX2NsaWVudF90ZXN0LmNjJywKLSAgICAgICAgIyAndG9vbHMvdGxkX2NsZWFudXAvdGxkX2NsZWFudXBfdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC9yZWRpcmVjdF9pbmZvX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3JlZGlyZWN0X3V0aWxfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvcmVwb3J0X3NlbmRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfZmV0Y2hlcl9pbXBsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9mZXRjaGVyX3Jlc3BvbnNlX3dyaXRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0X2J1aWxkZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9kYXRhX2pvYl91bml0dGVzdC5jYycsCi0gICAgICAgICMgQ29iYWx0IGhhbmRsZXMgRmlsZSBKb2IgaXRzZWxmLgotICAgICAgICAjICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9maWxlX2pvYl91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9maWx0ZXJfdW5pdHRlc3QuY2MnLAotCi0gICAgICAgICMgZnRwIG5vdCBzdXBwb3J0ZWQgYnkgQ29iYWx0LgotICAgICAgICAjICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9maWxlX2Rpcl9qb2JfdW5pdHRlc3QuY2MnLAotICAgICAgICAjICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9mdHBfam9iX3VuaXR0ZXN0LmNjJywKLQotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaHR0cF9qb2JfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3Rfam9iX2ZhY3RvcnlfaW1wbF91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9qb2JfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfcXVpY191bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9zaW1wbGVfam9iX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rocm90dGxlcl9zaW11bGF0aW9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rocm90dGxlcl90ZXN0X3N1cHBvcnQuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfdGhyb3R0bGVyX3Rlc3Rfc3VwcG9ydC5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rocm90dGxlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF91bml0dGVzdC5jYycsCi0KLSAgICAgICAgIyBBbHNvIGluY2x1ZGUgdW5pdHRlc3RzIGZvciB3ZWJzb2NrZXRzLgotICAgICAgICAnc2VydmVyL2h0dHBfY29ubmVjdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXJfcmVzcG9uc2VfaW5mb191bml0dGVzdC5jYycsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnc2VydmVyL3dlYl9zb2NrZXRfZW5jb2Rlcl91bml0dGVzdC5jYycsCi0KLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2Jhc2ljX2hhbmRzaGFrZV9zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9iYXNpY19zdHJlYW1fYWRhcHRlcnNfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9iYXNpY19zdHJlYW1fdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9jaGFubmVsX3Rlc3QuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZGVmbGF0ZV9wYXJhbWV0ZXJzX3Rlc3QuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZGVmbGF0ZV9wcmVkaWN0b3JfaW1wbF90ZXN0LmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2RlZmxhdGVfc3RyZWFtX3Rlc3QuY2MnLAotICAgICAgICAnd2Vic29ja2V0cy93ZWJzb2NrZXRfZGVmbGF0ZXJfdGVzdC5jYycsCi0KLSAgICAgICAgIyBVc2VzIHRoZSB1bnN1cHBvcnRlZCBTcGF3bmVkV2ViU2VydmVyLgotICAgICAgICAjJ3dlYnNvY2tldHMvd2Vic29ja2V0X2VuZF90b19lbmRfdGVzdC5jYycsCi0KLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2Vycm9yc190ZXN0LmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2V4dGVuc2lvbl9wYXJzZXJfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9leHRlbnNpb25fdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9mcmFtZV9wYXJzZXJfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9mcmFtZV90ZXN0LmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X2hhbmRzaGFrZV9jaGFsbGVuZ2VfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9oYW5kc2hha2Vfc3RyZWFtX2NyZWF0ZV9oZWxwZXJfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9pbmZsYXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X3N0cmVhbV9jb29raWVfdGVzdC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9zdHJlYW1fY3JlYXRlX3Rlc3RfYmFzZS5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF9zdHJlYW1fY3JlYXRlX3Rlc3RfYmFzZS5oJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X3N0cmVhbV90ZXN0LmNjJywKLSAgICAgICAgJ3dlYnNvY2tldHMvd2Vic29ja2V0X3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd3ZWJzb2NrZXRzL3dlYnNvY2tldF90ZXN0X3V0aWwuaCcsCi0KLSAgICAgICAgIyBBbHNvIGluY2x1ZGUgdW5pdHRlc3RzIGZvciBuZXR3b3JrIHJlcG9ydGluZy4KLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfYnJvd3NpbmdfZGF0YV9yZW1vdmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfY2FjaGVfdW5pdHRlc3QuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19kZWxpdmVyeV9hZ2VudF91bml0dGVzdC5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2VuZHBvaW50X21hbmFnZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19nYXJiYWdlX2NvbGxlY3Rvcl91bml0dGVzdC5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX2hlYWRlcl9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAncmVwb3J0aW5nL3JlcG9ydGluZ19uZXR3b3JrX2NoYW5nZV9vYnNlcnZlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdyZXBvcnRpbmcvcmVwb3J0aW5nX3NlcnZpY2VfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLQotICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAjIFRPRE86IFJlc3VycmVjdCB0aGVzZSBzZWVtaW5nbHkgdmFsaWQgdGVzdHMuCi0gICAgICAgIFsnZXhjbHVkZScsICd0Y3Bfc2VydmVyX3NvY2tldF91bml0dGVzdCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAndGNwX2NsaWVudF9zb2NrZXRfdW5pdHRlc3QnXSwKLSAgICAgICAgWydleGNsdWRlJywgJ3VkcF9zb2NrZXRfdW5pdHRlc3QnXSwKLQotICAgICAgICAjIFRPRE86IERlbGV0ZSBvciByZW1vdmUgZmFpbGluZyB0ZXN0cyBiZWxvdyBoZXJlLiAtLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICAjIFRoZXNlIHRlc3RzIGRvbid0IGNvbXBpbGUgb3IgbGluawotCi0gICAgICAgICMgVGhpcyB0ZXN0IHJlcXVpcmVzIHRoZSB1c2Ugb2YgYW4gZXh0ZXJuYWwgcHl0aG9uIHRlc3Qgc2VydmVyIHRoYXQgd2UKLSAgICAgICAgIyBkbyBub3Qgc3VwcG9ydCBvbiBDb2JhbHQgb3IgU3RhcmJvYXJkLgotICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3NsX2NsaWVudF9zb2NrZXRfdW5pdHRlc3QnXSwKLQotICAgICAgICAjIFRoZXNlIHRlc3RzIGhhbmcvY3Jhc2gvYXNzZXJ0Ci0gICAgICAgIFsnZXhjbHVkZScsICdiYWNrZW5kX3VuaXR0ZXN0J10sICAjIHJlZi1jb3VudGluZyBwcm9ibGVtcwotICAgICAgICBbJ2V4Y2x1ZGUnLCAnYmxvY2tfZmlsZXNfdW5pdHRlc3QnXSwgICMgdGVzdCBkYXRhIGlzIGxpdHRsZS1lbmRpYW4KLSAgICAgICAgWydleGNsdWRlJywgJ2VudHJ5X3VuaXR0ZXN0J10sCi0gICAgICAgIFsnZXhjbHVkZScsICdjZXJ0X3ZlcmlmeV9wcm9jX3VuaXR0ZXN0J10sCi0KLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIEFMTCBURVNUUyBCRUxPVyBBUkUgUEVSTUFORU5UTFkgRVhDTFVERUQgIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIFsnZXhjbHVkZScsICdhZGRyZXNzX3NvcnRlcl91bml0dGVzdCddLCAgIyBhdCB0aW1lIG9mIGV4Y2x1c2lvbiwgYWRkcmVzcyBzb3J0aW5nIG9ubHkgaGFwcGVucyB3aGVuIElQdjYgaXMgZW5hYmxlZAotICAgICAgXSwKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2VfaTE4bicsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvdGhpcmRfcGFydHkvZHluYW1pY19hbm5vdGF0aW9ucy9keW5hbWljX2Fubm90YXRpb25zLmd5cDpkeW5hbWljX2Fubm90YXRpb25zJywKLSAgICAgICAgJzwoREVQVEgpL2NyeXB0by9jcnlwdG8uZ3lwOmNyeXB0bycsCi0gICAgICAgICc8KERFUFRIKS91cmwvdXJsLmd5cDp1cmwnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cDp6bGliJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2wuZ3lwOmNyeXB0bycsCi0gICAgICAgICduZXRfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAndGhpcmRfcGFydHlfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAnaHR0cF9zZXJ2ZXInLCAgIyBUaGlzIGlzIG5lZWRlZCBieSBkaWFsX2h0dHBfc2VydmVyIGluIG5ldAotICAgICAgICAnbmV0JywKLSAgICAgICAgJ3Rlc3Rfc3VwcG9ydCcsCi0gICAgICAgICdxdWljX3Rlc3RfdG9vbHMnLAotICAgICAgICAnbmV0X25xZV9wcm90bycsCi0gICAgICAgICduZXRfcXVpY19wcm90bycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgIyBUbyBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgd2hlbiB3YW50IHRvIGVuYWJsZSBIVFRQIGNhY2hlLgotICAgICAgICAnSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJEJywKLSAgICAgICAgJ0dNT0NLX05PX01PVkVfTU9DSycsCi0gICAgICAgICdCQVNFX0RPTlRfRU5GT1JDRV9USFJFQURfTkFNRV9MRU5HVEgnLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICMgQXZvaWQgY29tcGlsZXIgZXJyb3JzIGR1ZSB0byBjb252ZXJzaW9uIGZyb20gIjB4MDAiIHRvIGNoYXIgb24gQW5kcm9pZC4KLSAgICAgICAgJy1Xbm8tbmFycm93aW5nJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmV0X2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY29iYWx0X2NvcHlfdGVzdF9kYXRhID09IDEnLCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgICAgICc8KERFUFRIKS9uZXQvZGF0YScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ25ldCcsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaScgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3RoaXJkX3BhcnR5X2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY29iYWx0X2NvcHlfdGVzdF9kYXRhID09IDEnLCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgICAgICc8KERFUFRIKS9uZXQvdGhpcmRfcGFydHkvbmlzdC1wa2l0cy9jZXJ0cycsCi0gICAgICAgICAgICAgICc8KERFUFRIKS9uZXQvdGhpcmRfcGFydHkvbmlzdC1wa2l0cy9jcmxzJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29udGVudF90ZXN0X291dHB1dF9zdWJkaXInOiAnbmV0L3RoaXJkX3BhcnR5L25pc3QtcGtpdHMnLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vc3RhcmJvYXJkL2J1aWxkL2NvcHlfdGVzdF9kYXRhLmd5cGknIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd0ZXN0X3N1cHBvcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdHTU9DS19OT19NT1ZFX01PQ0snLAotICAgICAgICAnQkFTRV9ET05UX0VORk9SQ0VfVEhSRUFEX05BTUVfTEVOR1RIJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgIyAnZGlza19jYWNoZS9kaXNrX2NhY2hlX3Rlc3RfYmFzZS5jYycsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvZGlza19jYWNoZV90ZXN0X2Jhc2UuaCcsCi0gICAgICAgICMgJ2Rpc2tfY2FjaGUvZGlza19jYWNoZV90ZXN0X3V0aWwuY2MnLAotICAgICAgICAjICdkaXNrX2NhY2hlL2Rpc2tfY2FjaGVfdGVzdF91dGlsLmgnLAotCi0gICAgICAgICdxdWljL3F1aWNfdGVzdF9wYWNrZXRfbWFrZXIuY2MnLAotICAgICAgICAncXVpYy9xdWljX3Rlc3RfcGFja2V0X21ha2VyLmgnLAotICAgICAgICAnYmFzZS90ZXN0X2RhdGFfc3RyZWFtLmNjJywKLSAgICAgICAgJ2Jhc2UvdGVzdF9kYXRhX3N0cmVhbS5oJywKLSAgICAgICAgJ3NwZHkvc3BkeV9zZXNzaW9uX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfc2Vzc2lvbl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdzcGR5L3NwZHlfc3RyZWFtX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfc3RyZWFtX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L2ZpbGVfcHJvdG9jb2xfaGFuZGxlci5jYycsCi0gICAgICAgICd1cmxfcmVxdWVzdC9maWxlX3Byb3RvY29sX2hhbmRsZXIuaCcsCi0gICAgICAgICd1cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9maWxlX2Rpcl9qb2IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfZmlsZV9kaXJfam9iLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfZmlsZV9qb2IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfZmlsZV9qb2IuaCcsCi0KLSAgICAgICAgIyBLZXJiZXJvcyhnc3NhcGkpIG5vdCBzdXBwb3J0ZWQgeWV0LgotICAgICAgICAjICdodHRwL21vY2tfZ3NzYXBpX2xpYnJhcnlfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgIyAnaHR0cC9tb2NrX2dzc2FwaV9saWJyYXJ5X3N0YXJib2FyZC5oJywKLQotICAgICAgICAnYmFzZS9sb2FkX3RpbWluZ19pbmZvX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICdiYXNlL2xvYWRfdGltaW5nX2luZm9fdGVzdF91dGlsLmgnLAotICAgICAgICAnYmFzZS9tb2NrX2ZpbGVfc3RyZWFtLmNjJywKLSAgICAgICAgJ2Jhc2UvbW9ja19maWxlX3N0cmVhbS5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19uZXR3b3JrX2NoYW5nZV9ub3RpZmllci5jYycsCi0gICAgICAgICdiYXNlL21vY2tfbmV0d29ya19jaGFuZ2Vfbm90aWZpZXIuaCcsCi0gICAgICAgICdiYXNlL3Rlc3RfY29tcGxldGlvbl9jYWxsYmFjay5jYycsCi0gICAgICAgICdiYXNlL3Rlc3RfY29tcGxldGlvbl9jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvdGVzdF9wcm94eV9kZWxlZ2F0ZS5jYycsCi0gICAgICAgICdiYXNlL3Rlc3RfcHJveHlfZGVsZWdhdGUuaCcsCi0gICAgICAgICdjZXJ0L21vY2tfY2VydF92ZXJpZmllci5jYycsCi0gICAgICAgICdjZXJ0L21vY2tfY2VydF92ZXJpZmllci5oJywKLSAgICAgICAgJ2NlcnQvbW9ja19jbGllbnRfY2VydF92ZXJpZmllci5jYycsCi0gICAgICAgICdjZXJ0L21vY2tfY2xpZW50X2NlcnRfdmVyaWZpZXIuaCcsCi0gICAgICAgICdjb29raWVzL2Nhbm9uaWNhbF9jb29raWVfdGVzdF9oZWxwZXJzLmgnLAotICAgICAgICAnY29va2llcy9jb29raWVfY2hhbmdlX2Rpc3BhdGNoZXJfdGVzdF9oZWxwZXJzLmNjJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX2NoYW5nZV9kaXNwYXRjaGVyX3Rlc3RfaGVscGVycy5oJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX21vbnN0ZXJfc3RvcmVfdGVzdC5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9tb25zdGVyX3N0b3JlX3Rlc3QuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9zdG9yZV9jaGFuZ2VfdW5pdHRlc3QuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9zdG9yZV90ZXN0X2NhbGxiYWNrcy5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9zdG9yZV90ZXN0X2NhbGxiYWNrcy5oJywKLSAgICAgICAgJ2Nvb2tpZXMvY29va2llX3N0b3JlX3Rlc3RfaGVscGVycy5jYycsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9zdG9yZV90ZXN0X2hlbHBlcnMuaCcsCi0gICAgICAgICdjb29raWVzL2Nvb2tpZV9zdG9yZV91bml0dGVzdC5oJywKLSAgICAgICAgJ2Rucy9kbnNfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ2Rucy9kbnNfdGVzdF91dGlsLmgnLAotICAgICAgICAnZG5zL21vY2tfaG9zdF9yZXNvbHZlci5jYycsCi0gICAgICAgICdkbnMvbW9ja19ob3N0X3Jlc29sdmVyLmgnLAotICAgICAgICAnZG5zL21vY2tfbWRuc19jbGllbnQuY2MnLAotICAgICAgICAnZG5zL21vY2tfbWRuc19jbGllbnQuaCcsCi0gICAgICAgICdkbnMvbW9ja19tZG5zX3NvY2tldF9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2Rucy9tb2NrX21kbnNfc29ja2V0X2ZhY3RvcnkuaCcsCi0gICAgICAgICdmaWx0ZXIvZmlsdGVyX3NvdXJjZV9zdHJlYW1fdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ2ZpbHRlci9maWx0ZXJfc291cmNlX3N0cmVhbV90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdmaWx0ZXIvbW9ja19zb3VyY2Vfc3RyZWFtLmNjJywKLSAgICAgICAgJ2ZpbHRlci9tb2NrX3NvdXJjZV9zdHJlYW0uaCcsCi0gICAgICAgICdodHRwL2h0dHBfc3RyZWFtX2ZhY3RvcnlfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF9zdHJlYW1fZmFjdG9yeV90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdodHRwL2h0dHBfdHJhbnNhY3Rpb25fdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ2h0dHAvaHR0cF90cmFuc2FjdGlvbl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdodHRwL3RyYW5zcG9ydF9zZWN1cml0eV9zdGF0ZV90ZXN0X3V0aWwuY2MnLAotICAgICAgICAnaHR0cC90cmFuc3BvcnRfc2VjdXJpdHlfc3RhdGVfdGVzdF91dGlsLmgnLAotICAgICAgICAnbG9nL3Rlc3RfbmV0X2xvZy5jYycsCi0gICAgICAgICdsb2cvdGVzdF9uZXRfbG9nLmgnLAotICAgICAgICAnbG9nL3Rlc3RfbmV0X2xvZ19lbnRyeS5jYycsCi0gICAgICAgICdsb2cvdGVzdF9uZXRfbG9nX2VudHJ5LmgnLAotICAgICAgICAnbG9nL3Rlc3RfbmV0X2xvZ191dGlsLmNjJywKLSAgICAgICAgJ2xvZy90ZXN0X25ldF9sb2dfdXRpbC5oJywKLSAgICAgICAgJ25xZS9uZXR3b3JrX3F1YWxpdHlfZXN0aW1hdG9yX3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICducWUvbmV0d29ya19xdWFsaXR5X2VzdGltYXRvcl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL21vY2tfcGFjX2ZpbGVfZmV0Y2hlci5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL21vY2tfcGFjX2ZpbGVfZmV0Y2hlci5oJywKLSAgICAgICAgJ3Byb3h5X3Jlc29sdXRpb24vbW9ja19wcm94eV9yZXNvbHZlci5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL21vY2tfcHJveHlfcmVzb2x2ZXIuaCcsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2NvbmZpZ19zZXJ2aWNlX2NvbW1vbl91bml0dGVzdC5jYycsCi0gICAgICAgICdwcm94eV9yZXNvbHV0aW9uL3Byb3h5X2NvbmZpZ19zZXJ2aWNlX2NvbW1vbl91bml0dGVzdC5oJywKLSAgICAgICAgJ3F1aWMvbW9ja19xdWljX2RhdGEuY2MnLAotICAgICAgICAncXVpYy9tb2NrX3F1aWNfZGF0YS5oJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3JlcG9ydGluZy9yZXBvcnRpbmdfdGVzdF91dGlsLmgnLAotICAgICAgICAnc29ja2V0L3NvY2tldF90ZXN0X3V0aWwuY2MnLAotICAgICAgICAnc29ja2V0L3NvY2tldF90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdzcGR5L3NwZHlfdGVzdF91dGlsX2NvbW1vbi5jYycsCi0gICAgICAgICdzcGR5L3NwZHlfdGVzdF91dGlsX2NvbW1vbi5oJywKLSAgICAgICAgJ3NzbC9jbGllbnRfY2VydF9pZGVudGl0eV90ZXN0X3V0aWwuY2MnLAotICAgICAgICAnc3NsL2NsaWVudF9jZXJ0X2lkZW50aXR5X3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3NzbC9zc2xfcHJpdmF0ZV9rZXlfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3NzbC9zc2xfcHJpdmF0ZV9rZXlfdGVzdF91dGlsLmgnLAotICAgICAgICAnc3NsL3Rlc3Rfc3NsX3ByaXZhdGVfa2V5LmNjJywKLSAgICAgICAgJ3NzbC90ZXN0X3NzbF9wcml2YXRlX2tleS5oJywKLSAgICAgICAgJ3Rlc3QvY2VydF90ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGVzdC9jZXJ0X3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvY2hhbm5lbF9pZF90ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGVzdC9jaGFubmVsX2lkX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvY3RfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3Rlc3QvY3RfdGVzdF91dGlsLmgnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9jb250cm9sbGFibGVfaHR0cF9yZXNwb25zZS5jYycsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL2NvbnRyb2xsYWJsZV9odHRwX3Jlc3BvbnNlLmgnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9kZWZhdWx0X2hhbmRsZXJzLmNjJywKLSAgICAgICAgJ3Rlc3QvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIvZGVmYXVsdF9oYW5kbGVycy5oJywKLSAgICAgICAgJ3Rlc3QvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIuY2MnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9lbWJlZGRlZF90ZXN0X3NlcnZlci5oJywKLSAgICAgICAgJ3Rlc3QvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIvZW1iZWRkZWRfdGVzdF9zZXJ2ZXJfY29ubmVjdGlvbl9saXN0ZW5lci5oJywKLSAgICAgICAgJ3Rlc3QvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIvaHR0cF9jb25uZWN0aW9uLmNjJywKLSAgICAgICAgJ3Rlc3QvZW1iZWRkZWRfdGVzdF9zZXJ2ZXIvaHR0cF9jb25uZWN0aW9uLmgnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9odHRwX3JlcXVlc3QuY2MnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9odHRwX3JlcXVlc3QuaCcsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL2h0dHBfcmVzcG9uc2UuY2MnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9odHRwX3Jlc3BvbnNlLmgnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9yZXF1ZXN0X2hhbmRsZXJfdXRpbC5jYycsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL3JlcXVlc3RfaGFuZGxlcl91dGlsLmgnLAotICAgICAgICAndGVzdC9lbWJlZGRlZF90ZXN0X3NlcnZlci9zaW1wbGVfY29ubmVjdGlvbl9saXN0ZW5lci5jYycsCi0gICAgICAgICd0ZXN0L2VtYmVkZGVkX3Rlc3Rfc2VydmVyL3NpbXBsZV9jb25uZWN0aW9uX2xpc3RlbmVyLmgnLAotICAgICAgICAndGVzdC9ldmVudF93YWl0ZXIuaCcsCi0gICAgICAgICd0ZXN0L2d0ZXN0X3V0aWwuaCcsCi0gICAgICAgICd0ZXN0L25ldF90ZXN0X3N1aXRlLmNjJywKLSAgICAgICAgJ3Rlc3QvbmV0X3Rlc3Rfc3VpdGUuaCcsCi0gICAgICAgICd0ZXN0L3F1aWNfc2ltcGxlX3Rlc3Rfc2VydmVyLmNjJywKLSAgICAgICAgJ3Rlc3QvcXVpY19zaW1wbGVfdGVzdF9zZXJ2ZXIuaCcsCi0gICAgICAgICd0ZXN0L3Njb3BlZF9kaXNhYmxlX2V4aXRfb25fZGZhdGFsLmNjJywKLSAgICAgICAgJ3Rlc3Qvc2NvcGVkX2Rpc2FibGVfZXhpdF9vbl9kZmF0YWwuaCcsCi0gICAgICAgICd0ZXN0L3RjcF9zb2NrZXRfcHJveHkuY2MnLAotICAgICAgICAndGVzdC90Y3Bfc29ja2V0X3Byb3h5LmgnLAotICAgICAgICAndGVzdC90ZXN0X2NlcnRpZmljYXRlX2RhdGEuaCcsCi0gICAgICAgICd0ZXN0L3Rlc3RfZGF0YV9kaXJlY3RvcnkuY2MnLAotICAgICAgICAndGVzdC90ZXN0X2RhdGFfZGlyZWN0b3J5LmgnLAotICAgICAgICAndGVzdC90ZXN0X3dpdGhfc2NvcGVkX3Rhc2tfZW52aXJvbm1lbnQuaCcsCi0gICAgICAgICd0ZXN0L3VybF9yZXF1ZXN0L3NzbF9jZXJ0aWZpY2F0ZV9lcnJvcl9qb2IuY2MnLAotICAgICAgICAndGVzdC91cmxfcmVxdWVzdC9zc2xfY2VydGlmaWNhdGVfZXJyb3Jfam9iLmgnLAotICAgICAgICAndGVzdC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9mYWlsZWRfam9iLmNjJywKLSAgICAgICAgJ3Rlc3QvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfZmFpbGVkX2pvYi5oJywKLSAgICAgICAgJ3Rlc3QvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaGFuZ2luZ19yZWFkX2pvYi5jYycsCi0gICAgICAgICd0ZXN0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2hhbmdpbmdfcmVhZF9qb2IuaCcsCi0gICAgICAgICd0ZXN0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X21vY2tfZGF0YV9qb2IuY2MnLAotICAgICAgICAndGVzdC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9tb2NrX2RhdGFfam9iLmgnLAotICAgICAgICAndGVzdC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9zbG93X2Rvd25sb2FkX2pvYi5jYycsCi0gICAgICAgICd0ZXN0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Nsb3dfZG93bmxvYWRfam9iLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdGVzdF91cmxfZmV0Y2hlcl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3Rlc3RfdXJsX2ZldGNoZXJfZmFjdG9yeS5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3Rlc3RfdXJsX3JlcXVlc3RfaW50ZXJjZXB0b3IuY2MnLAotICAgICAgICAndXJsX3JlcXVlc3QvdGVzdF91cmxfcmVxdWVzdF9pbnRlcmNlcHRvci5oJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rlc3Rfam9iLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rlc3Rfam9iLmgnLAotICAgICAgICAndXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3Rlc3RfdXRpbC5oJywKLSAgICAgIF0sCi0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAgICc8KERFUFRIKS9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnPChERVBUSCkvdXJsL3VybC5neXA6dXJsJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICAgICduZXQnLAotICAgICAgICAnbmV0X25xZV9wcm90bycsCi0gICAgICAgICduZXRfcXVpY19wcm90bycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgIyBUaGlzIGNvbXBvbmVudCBpcyBjYWxsZWQgdGhlIHNhbWUgbmFtZSBpbiBDaHJvbWl1bSdzIEdOIGZpbGVzLgotICAgICAgJ3RhcmdldF9uYW1lJzogJ3F1aWNfdGVzdF90b29scycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0dNT0NLX05PX01PVkVfTU9DSycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0b29scy9xdWljL3F1aWNfc2ltcGxlX2NsaWVudC5jYycsCi0gICAgICAgICd0b29scy9xdWljL3F1aWNfc2ltcGxlX2NsaWVudC5oJywKLSAgICAgICAgJ3Rvb2xzL3F1aWMvcXVpY19zaW1wbGVfc2VydmVyX3Nlc3Npb25faGVscGVyLmNjJywKLSAgICAgICAgJ3Rvb2xzL3F1aWMvcXVpY19zaW1wbGVfc2VydmVyX3Nlc3Npb25faGVscGVyLmgnLAotICAgICAgICAncXVpYy9jcnlwdG9fdGVzdF91dGlsc19jaHJvbWl1bS5jYycsCi0gICAgICAgICdxdWljL21vY2tfY3J5cHRvX2NsaWVudF9zdHJlYW0uY2MnLAotICAgICAgICAncXVpYy9tb2NrX2NyeXB0b19jbGllbnRfc3RyZWFtLmgnLAotICAgICAgICAncXVpYy9tb2NrX2NyeXB0b19jbGllbnRfc3RyZWFtX2ZhY3RvcnkuY2MnLAotICAgICAgICAncXVpYy9tb2NrX2NyeXB0b19jbGllbnRfc3RyZWFtX2ZhY3RvcnkuaCcsCi0gICAgICAgICdxdWljL21vY2tfZGVjcnlwdGVyLmNjJywKLSAgICAgICAgJ3F1aWMvbW9ja19kZWNyeXB0ZXIuaCcsCi0gICAgICAgICdxdWljL21vY2tfZW5jcnlwdGVyLmNjJywKLSAgICAgICAgJ3F1aWMvbW9ja19lbmNyeXB0ZXIuaCcsCi0gICAgICAgICdxdWljL3Rlc3RfdGFza19ydW5uZXIuY2MnLAotICAgICAgICAncXVpYy90ZXN0X3Rhc2tfcnVubmVyLmgnLAotICAgICAgICAjIFJlcXVpcmVzIHF1aWNfdHJhY2UgdGhpcmQtcGFydHkgbGlicmFyeS4gTm90IHlldCBzdXBwb3J0ZWQuCi0gICAgICAgICMgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3RyYWNlX3Zpc2l0b3IuY2MnLAotICAgICAgICAjICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY190cmFjZV92aXNpdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19leHBlY3RfYnVnLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9hcGkvcXVpY19tb2NrX2xvZy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfdGVzdC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfdGVzdF9sb29wYmFjay5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3Rlc3RfbG9vcGJhY2suaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2FwaS9xdWljX3Rlc3RfbWVtX3NsaWNlX3ZlY3Rvci5oJywKLSAgICAgICAgIyBOb3QgdXNlZCB5ZXQuCi0gICAgICAgICMgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vYXBpL3F1aWNfdGVzdF9vdXRwdXQuaCcsCi0gICAgICAgICMgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3Rlc3Rfb3V0cHV0X2ltcGwuY2MnLAotICAgICAgICAjICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY190ZXN0X291dHB1dF9pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfZXhwZWN0X2J1Z19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfbW9ja19sb2dfaW1wbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19lbmNvZGVyX3Rlc3RfdXRpbHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9jb3JlL3FwYWNrL3FwYWNrX2VuY29kZXJfdGVzdF91dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvcGxhdGZvcm0vaW1wbC9xdWljX3Rlc3RfaW1wbC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY190ZXN0X2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3BsYXRmb3JtL2ltcGwvcXVpY190ZXN0X2xvb3BiYWNrX2ltcGwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfdGVzdF9sb29wYmFja19pbXBsLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfdGVzdF9tZW1fc2xpY2VfdmVjdG9yX2ltcGwuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy9wbGF0Zm9ybS9pbXBsL3F1aWNfdGVzdF9tZW1fc2xpY2VfdmVjdG9yX2ltcGwuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3F1YXJ0Yy9jb3VudGluZ19wYWNrZXRfZmlsdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL2NyeXB0b190ZXN0X3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9jcnlwdG9fdGVzdF91dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9mYWlsaW5nX3Byb29mX3NvdXJjZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvZmFpbGluZ19wcm9vZl9zb3VyY2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvZmFrZV9wcm9vZl9zb3VyY2UuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL2Zha2VfcHJvb2Zfc291cmNlLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfY2xvY2suY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfY2xvY2suaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19xdWljX2NsaWVudF9wcm9taXNlZF9pbmZvLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9tb2NrX3F1aWNfY2xpZW50X3Byb21pc2VkX2luZm8uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfZGVjb2Rlcl90ZXN0X3V0aWxzLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvY29yZS9xcGFjay9xcGFja19kZWNvZGVyX3Rlc3RfdXRpbHMuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19xdWljX2Rpc3BhdGNoZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfcXVpY19kaXNwYXRjaGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfcXVpY19zZXNzaW9uX3Zpc2l0b3IuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL21vY2tfcXVpY19zZXNzaW9uX3Zpc2l0b3IuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19xdWljX3NwZHlfY2xpZW50X3N0cmVhbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19xdWljX3NwZHlfY2xpZW50X3N0cmVhbS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9tb2NrX3JhbmRvbS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvbW9ja19yYW5kb20uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19idWZmZXJlZF9wYWNrZXRfc3RvcmVfcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19idWZmZXJlZF9wYWNrZXRfc3RvcmVfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2NsaWVudF9wcm9taXNlZF9pbmZvX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfY2xpZW50X3Byb21pc2VkX2luZm9fcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2NvbmZpZ19wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2NvbmZpZ19wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfY29ubmVjdGlvbl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2Nvbm5lY3Rpb25fcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2NyeXB0b19zZXJ2ZXJfY29uZmlnX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfY3J5cHRvX3NlcnZlcl9jb25maWdfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2Rpc3BhdGNoZXJfcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19kaXNwYXRjaGVyX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfdGVzdF91dGlscy5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXBhY2svcXBhY2tfdGVzdF91dGlscy5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2Zsb3dfY29udHJvbGxlcl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX2Zsb3dfY29udHJvbGxlcl9wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfZnJhbWVyX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfZnJhbWVyX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19wYWNrZXRfY3JlYXRvcl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3BhY2tldF9jcmVhdG9yX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19wYWNrZXRfZ2VuZXJhdG9yX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfcGFja2V0X2dlbmVyYXRvcl9wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc2VudF9wYWNrZXRfbWFuYWdlcl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3NlbnRfcGFja2V0X21hbmFnZXJfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3NlcnZlcl9zZXNzaW9uX2Jhc2VfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3Nlc3Npb25fcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19zZXNzaW9uX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19zcGR5X3Nlc3Npb25fcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19zcGR5X3Nlc3Npb25fcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3NwZHlfc3RyZWFtX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc3BkeV9zdHJlYW1fcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3N0cmVhbV9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3N0cmVhbV9wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc3RyZWFtX3NlbmRfYnVmZmVyX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc3RyZWFtX3NlbmRfYnVmZmVyX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19zdHJlYW1fc2VxdWVuY2VyX2J1ZmZlcl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3N0cmVhbV9zZXF1ZW5jZXJfYnVmZmVyX3BlZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY19zdHJlYW1fc2VxdWVuY2VyX3BlZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc3RyZWFtX3NlcXVlbmNlcl9wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfc3VzdGFpbmVkX2JhbmR3aWR0aF9yZWNvcmRlcl9wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3N1c3RhaW5lZF9iYW5kd2lkdGhfcmVjb3JkZXJfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3Rlc3RfdXRpbHMuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfdGVzdF91dGlscy5oJywKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3RpbWVfd2FpdF9saXN0X21hbmFnZXIuY2MiLAotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfdGltZV93YWl0X2xpc3RfbWFuYWdlci5oIiwKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9xdWljX3RpbWVfd2FpdF9saXN0X21hbmFnZXJfcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY191bmFja2VkX3BhY2tldF9tYXBfcGVlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvcXVpY191bmFja2VkX3BhY2tldF9tYXBfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19tZW1vcnlfY2FjaGVfYmFja2VuZC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfbWVtb3J5X2NhY2hlX2JhY2tlbmQuaCcsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX2NsaWVudF9zZXNzaW9uLmNjIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19zaW1wbGVfY2xpZW50X3Nlc3Npb24uaCIsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX2NsaWVudF9zdHJlYW0uY2MiLAotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy90b29scy9xdWljX3NpbXBsZV9jbGllbnRfc3RyZWFtLmgiLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3F1aWNfdGltZV93YWl0X2xpc3RfbWFuYWdlcl9wZWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3J0dF9zdGF0c19wZWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9ydHRfc3RhdHNfcGVlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW1wbGVfZGF0YV9wcm9kdWNlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltcGxlX2RhdGFfcHJvZHVjZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltcGxlX3F1aWNfZnJhbWVyLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW1wbGVfcXVpY19mcmFtZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltcGxlX3Nlc3Npb25fbm90aWZpZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXBsZV9zZXNzaW9uX25vdGlmaWVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci9hY3Rvci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL2FjdG9yLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci9hbGFybV9mYWN0b3J5LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvYWxhcm1fZmFjdG9yeS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvbGluay5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL2xpbmsuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL3BhY2tldF9maWx0ZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci9wYWNrZXRfZmlsdGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci9wb3J0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvcG9ydC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvcXVldWUuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci9xdWV1ZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3IvcXVpY19lbmRwb2ludC5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL3F1aWNfZW5kcG9pbnQuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL3NpbXVsYXRvci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rlc3RfdG9vbHMvc2ltdWxhdG9yL3NpbXVsYXRvci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3Ivc3dpdGNoLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdGVzdF90b29scy9zaW11bGF0b3Ivc3dpdGNoLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci90cmFmZmljX3BvbGljZXIuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90ZXN0X3Rvb2xzL3NpbXVsYXRvci90cmFmZmljX3BvbGljZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfYmFja2VuZF9yZXNwb25zZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfYmFja2VuZF9yZXNwb25zZS5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19jbGllbnRfYmFzZS5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfY2xpZW50X2Jhc2UuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX2NyeXB0b19zZXJ2ZXJfc3RyZWFtX2hlbHBlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX2NyeXB0b19zZXJ2ZXJfc3RyZWFtX2hlbHBlci5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19zaW1wbGVfZGlzcGF0Y2hlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX2Rpc3BhdGNoZXIuaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX3NlcnZlcl9zZXNzaW9uLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19zaW1wbGVfc2VydmVyX3Nlc3Npb24uaCcsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfc2ltcGxlX3NlcnZlcl9zdHJlYW0uY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90b29scy9xdWljX3NpbXBsZV9zZXJ2ZXJfc3RyZWFtLmgnLAotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy90b29scy9xdWljX3VybC5jYyIsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfdXJsLmgiLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90b29scy9xdWljX3RjcF9saWtlX3RyYWNlX2NvbnZlcnRlci5jYycsCi0gICAgICAgICd0aGlyZF9wYXJ0eS9xdWljL3Rvb2xzL3F1aWNfdGNwX2xpa2VfdHJhY2VfY29udmVydGVyLmgnLAotICAgICAgICAndGhpcmRfcGFydHkvcXVpYy90b29scy9xdWljX3RjcF9saWtlX3RyYWNlX2NvbnZlcnRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19zcGR5X2NsaWVudF9iYXNlLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L3F1aWMvdG9vbHMvcXVpY19zcGR5X2NsaWVudF9iYXNlLmgnLAotICAgICAgICAndG9vbHMvcXVpYy9xdWljX2NsaWVudF9tZXNzYWdlX2xvb3BfbmV0d29ya19oZWxwZXIuY2MnLAotICAgICAgICAndG9vbHMvcXVpYy9xdWljX2NsaWVudF9tZXNzYWdlX2xvb3BfbmV0d29ya19oZWxwZXIuaCcsCi0gICAgICAgICd0b29scy9xdWljL3F1aWNfc2ltcGxlX3NlcnZlci5jYycsCi0gICAgICAgICd0b29scy9xdWljL3F1aWNfc2ltcGxlX3NlcnZlci5oJywKLSAgICAgICAgJ3Rvb2xzL3F1aWMvcXVpY19zaW1wbGVfc2VydmVyX3BhY2tldF93cml0ZXIuY2MnLAotICAgICAgICAndG9vbHMvcXVpYy9xdWljX3NpbXBsZV9zZXJ2ZXJfcGFja2V0X3dyaXRlci5oJywKLQotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy9jb3JlL2NobG9fZXh0cmFjdG9yLmNjIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9jaGxvX2V4dHJhY3Rvci5oIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9odHRwL3F1aWNfc3BkeV9zZXJ2ZXJfc3RyZWFtX2Jhc2UuY2MiLAotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy9jb3JlL2h0dHAvcXVpY19zcGR5X3NlcnZlcl9zdHJlYW1fYmFzZS5oIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX2Rpc3BhdGNoZXIuY2MiLAotICAgICAgICAidGhpcmRfcGFydHkvcXVpYy9jb3JlL3F1aWNfZGlzcGF0Y2hlci5oIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9xdWljX3BhY2tldF93cml0ZXJfd3JhcHBlci5jYyIsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wYWNrZXRfd3JpdGVyX3dyYXBwZXIuaCIsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL2NvcmUvcXVpY19wcm9jZXNzX3BhY2tldF9pbnRlcmZhY2UuaCIsCi0gICAgICAgICJ0aGlyZF9wYXJ0eS9xdWljL2NvcmUvc3RhdGVsZXNzX3JlamVjdG9yLmNjIiwKLSAgICAgICAgInRoaXJkX3BhcnR5L3F1aWMvY29yZS9zdGF0ZWxlc3NfcmVqZWN0b3IuaCIsCi0gICAgICAgICdodHRwMi9wbGF0Zm9ybS9pbXBsL2h0dHAyX3Rlc3RfaGVscGVyc19pbXBsLmNjJywKLSAgICAgICAgInRvb2xzL3F1aWMvcXVpY19odHRwX3Byb3h5X2JhY2tlbmQuY2MiLAotICAgICAgICAidG9vbHMvcXVpYy9xdWljX2h0dHBfcHJveHlfYmFja2VuZC5oIiwKLSAgICAgICAgInRvb2xzL3F1aWMvcXVpY19odHRwX3Byb3h5X2JhY2tlbmRfc3RyZWFtLmNjIiwKLSAgICAgICAgInRvb2xzL3F1aWMvcXVpY19odHRwX3Byb3h5X2JhY2tlbmRfc3RyZWFtLmgiLAotICAgICAgICAidG9vbHMvcXVpYy9zeW5jaHJvbm91c19ob3N0X3Jlc29sdmVyLmNjIiwKLSAgICAgICAgInRvb2xzL3F1aWMvc3luY2hyb25vdXNfaG9zdF9yZXNvbHZlci5oIiwKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbmV0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2wuZ3lwOmNyeXB0bycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5neXA6cHJvdG9idWZfbGl0ZScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICd0ZXN0X3N1cHBvcnQnLAotICAgICAgICAnbmV0X25xZV9wcm90bycsCi0gICAgICAgICduZXRfcXVpY19wcm90bycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2h0dHBfc2VydmVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnbmV0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3NlcnZlci9odHRwX2Nvbm5lY3Rpb24uY2MnLAotICAgICAgICAnc2VydmVyL2h0dHBfY29ubmVjdGlvbi5oJywKLSAgICAgICAgJ3NlcnZlci9odHRwX3NlcnZlci5jYycsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXIuaCcsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXJfcmVxdWVzdF9pbmZvLmNjJywKLSAgICAgICAgJ3NlcnZlci9odHRwX3NlcnZlcl9yZXF1ZXN0X2luZm8uaCcsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXJfcmVzcG9uc2VfaW5mby5jYycsCi0gICAgICAgICdzZXJ2ZXIvaHR0cF9zZXJ2ZXJfcmVzcG9uc2VfaW5mby5oJywKLSAgICAgICAgJ3NlcnZlci93ZWJfc29ja2V0LmNjJywKLSAgICAgICAgJ3NlcnZlci93ZWJfc29ja2V0LmgnLAotICAgICAgICAnc2VydmVyL3dlYl9zb2NrZXRfZW5jb2Rlci5jYycsCi0gICAgICAgICdzZXJ2ZXIvd2ViX3NvY2tldF9lbmNvZGVyLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgICMgewotICAgICMgICAndGFyZ2V0X25hbWUnOiAnc2ltcGxlX3F1aWNfdG9vbHMnLAotICAgICMgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgIyAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgIyAgICAgJ25ldCcsCi0gICAgIyAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgIyAgICAgJzwoREVQVEgpL2Jhc2UvdGhpcmRfcGFydHkvZHluYW1pY19hbm5vdGF0aW9ucy9keW5hbWljX2Fubm90YXRpb25zLmd5cDpkeW5hbWljX2Fubm90YXRpb25zJywKLSAgICAjICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvcHJvdG9idWYuZ3lwOnByb3RvYnVmX2xpdGUnLAotICAgICMgICAgICc8KERFUFRIKS91cmwvdXJsLmd5cDp1cmwnLAotICAgICMgICBdLAotICAgICMgICAnc291cmNlcyc6IFsKLSAgICAjICAgXSwKLSAgICAjIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25ldF91bml0dGVzdHNfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ25ldF91bml0dGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbmV0X3VuaXR0ZXN0cycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9uZXQvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dC5jYyBiL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0LmNjCmluZGV4IDIyZjE1YmQuLmFkMWYwYjAgMTAwNjQ0Ci0tLSBhL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0LmNjCisrKyBiL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0LmNjCkBAIC0xNzQsMTEgKzE3NCw5IEBACiAgICAgSHR0cE5ldHdvcmtTZXNzaW9uKiBuZXR3b3JrX3Nlc3Npb24gPSB0cmFuc2FjdGlvbl9mYWN0b3J5LT5HZXRTZXNzaW9uKCk7CiAgICAgaWYgKG5ldHdvcmtfc2Vzc2lvbikKICAgICAgIG5ldHdvcmtfc2Vzc2lvbi0+RHVtcE1lbW9yeVN0YXRzKHBtZCwgZHVtcC0+YWJzb2x1dGVfbmFtZSgpKTsKLSNpZm5kZWYgSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECiAgICAgSHR0cENhY2hlKiBodHRwX2NhY2hlID0gdHJhbnNhY3Rpb25fZmFjdG9yeS0+R2V0Q2FjaGUoKTsKICAgICBpZiAoaHR0cF9jYWNoZSkKICAgICAgIGh0dHBfY2FjaGUtPkR1bXBNZW1vcnlTdGF0cyhwbWQsIGR1bXAtPmFic29sdXRlX25hbWUoKSk7Ci0jZW5kaWYKICAgfQogICBpZiAoY29va2llX3N0b3JlXykgewogICAgIGNvb2tpZV9zdG9yZV8tPkR1bXBNZW1vcnlTdGF0cyhwbWQsIGR1bXAtPmFic29sdXRlX25hbWUoKSk7CmRpZmYgLS1naXQgYS9uZXQvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF9idWlsZGVyLmNjIGIvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2NvbnRleHRfYnVpbGRlci5jYwppbmRleCA4NWY0NzIyLi5jNjA0ZDRmIDEwMDY0NAotLS0gYS9uZXQvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfY29udGV4dF9idWlsZGVyLmNjCisrKyBiL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9jb250ZXh0X2J1aWxkZXIuY2MKQEAgLTU4Nyw3ICs1ODcsNiBAQAogICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPEh0dHBOZXR3b3JrTGF5ZXI+KHN0b3JhZ2UtPmh0dHBfbmV0d29ya19zZXNzaW9uKCkpOwogICB9CiAKLSNpZm5kZWYgSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECiAgIGlmIChodHRwX2NhY2hlX2VuYWJsZWRfKSB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEh0dHBDYWNoZTo6QmFja2VuZEZhY3Rvcnk+IGh0dHBfY2FjaGVfYmFja2VuZDsKICAgICBpZiAoaHR0cF9jYWNoZV9wYXJhbXNfLnR5cGUgIT0gSHR0cENhY2hlUGFyYW1zOjpJTl9NRU1PUlkpIHsKQEAgLTYyNCw3ICs2MjMsNiBAQAogICAgICAgICBuZXcgSHR0cENhY2hlKHN0ZDo6bW92ZShodHRwX3RyYW5zYWN0aW9uX2ZhY3RvcnkpLAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShodHRwX2NhY2hlX2JhY2tlbmQpLCB0cnVlKSk7CiAgIH0KLSNlbmRpZiAgLy8gSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECiAgIHN0b3JhZ2UtPnNldF9odHRwX3RyYW5zYWN0aW9uX2ZhY3Rvcnkoc3RkOjptb3ZlKGh0dHBfdHJhbnNhY3Rpb25fZmFjdG9yeSkpOwogCiAgIFVSTFJlcXVlc3RKb2JGYWN0b3J5SW1wbCogam9iX2ZhY3RvcnkgPSBuZXcgVVJMUmVxdWVzdEpvYkZhY3RvcnlJbXBsOwpkaWZmIC0tZ2l0IGEvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2h0dHBfam9iX3VuaXR0ZXN0LmNjIGIvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X2h0dHBfam9iX3VuaXR0ZXN0LmNjCmluZGV4IDI1OTg4M2MuLjdhNGFmZGQgMTAwNjQ0Ci0tLSBhL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9odHRwX2pvYl91bml0dGVzdC5jYworKysgYi9uZXQvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfaHR0cF9qb2JfdW5pdHRlc3QuY2MKQEAgLTI4Miw3ICsyODIsNiBAQAogICAvLyBXaGVuIHJlcXVlc3QgZmFpbHMgZHVlIHRvIHByb3h5IGNvbm5lY3Rpb24gZXJyb3JzLCB0aGUgcHJveHkgc2VydmVyIHNob3VsZAogICAvLyBzdGlsbCBiZSBzZXQgb24gdGhlIHxyZXF1ZXN0fC4KICAgRVhQRUNUX0VRKHByb3h5X3NlcnZlciwgcmVxdWVzdC0+cHJveHlfc2VydmVyKCkpOwotI2lmbmRlZiBIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQKICAgLy8gVGhpcyBib29sIGlzIHNldCBieSBIdHRwTmV0d29ya1RyYW5zYWN0aW9uIGJ1dCBub3QgYnkgSFRUUENhY2hlVHJhbnNhY3Rpb24uCiAgIC8vIElmIENvYmFsdCB1c2UgSFRUUE5ldHdvcmtMYXllciBpbnN0ZWFkIG9mIEhUVFBDYWNoZSBhcyB0aGUgdHJhbnNhY3Rpb24KICAgLy8gZmFjdG9yeSwgdGhlIGJlaGF2aW9yIGlzIHRoZW4gZGlmZmVyZW50IGluIHRoaXMgY2FzZS4KQEAgLTI5Miw3ICsyOTEsNiBAQAogICAvLyBCdXQgc2luY2UgdGhlIHJlcXVlc3QgZmFpbHMgaGVyZSwgd2FzX2ZldGNoZWRfdmlhX3Byb3h5IGlzIG1lYW5pbmdsZXNzIGFuZAogICAvLyB1bmltcG9ydGFudC4KICAgRVhQRUNUX0ZBTFNFKHJlcXVlc3QtPndhc19mZXRjaGVkX3ZpYV9wcm94eSgpKTsKLSNlbmRpZgogICBFWFBFQ1RfRVEoMCwgcmVxdWVzdC0+cmVjZWl2ZWRfcmVzcG9uc2VfY29udGVudF9sZW5ndGgoKSk7CiAgIEVYUEVDVF9FUShDb3VudFdyaXRlQnl0ZXMod3JpdGVzKSwgcmVxdWVzdC0+R2V0VG90YWxTZW50Qnl0ZXMoKSk7CiAgIEVYUEVDVF9FUSgwLCByZXF1ZXN0LT5HZXRUb3RhbFJlY2VpdmVkQnl0ZXMoKSk7CkBAIC00OTEsNyArNDg5LDcgQEAKICAgICAgICAgICAgIG5ldHdvcmtfZGVsZWdhdGVfLnRvdGFsX25ldHdvcmtfYnl0ZXNfcmVjZWl2ZWQoKSk7CiB9CiAKLSNpZiAhZGVmaW5lZChIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQpCisjaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9URVNUSU5HX0RJU0FCTEVEKQogVEVTVF9GKFVSTFJlcXVlc3RIdHRwSm9iV2l0aE1vY2tTb2NrZXRzVGVzdCwgVGVzdFN1Y2Nlc3NmdWxDYWNoZWRIZWFkUmVxdWVzdCkgewogICAvLyBDYWNoZSB0aGUgcmVzcG9uc2UuCiAgIHsKZGlmZiAtLWdpdCBhL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF9xdWljX3VuaXR0ZXN0LmNjIGIvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3F1aWNfdW5pdHRlc3QuY2MKaW5kZXggZWI0YjdjYS4uNDZlNzVhNSAxMDA2NDQKLS0tIGEvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3F1aWNfdW5pdHRlc3QuY2MKKysrIGIvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3F1aWNfdW5pdHRlc3QuY2MKQEAgLTI2OSw3ICsyNjksNyBAQAogICBFWFBFQ1RfRVEoa0hlbGxvQm9keVZhbHVlLCBkZWxlZ2F0ZS5kYXRhX3JlY2VpdmVkKCkpOwogfQogCi0jaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJEKQorI2lmICFkZWZpbmVkKEhUVFBfQ0FDSEVfVEVTVElOR19ESVNBQkxFRCkKIFRFU1RfRihVUkxSZXF1ZXN0UXVpY1Rlc3QsIENhbmNlbFB1c2hJZkNhY2hlZF9Tb21lQ2FjaGVkKSB7CiAgIEluaXQoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3VuaXR0ZXN0LmNjIGIvbmV0L3VybF9yZXF1ZXN0L3VybF9yZXF1ZXN0X3VuaXR0ZXN0LmNjCmluZGV4IDVhNDg5ZWYuLjNmOWY3ZWYgMTAwNjQ0Ci0tLSBhL25ldC91cmxfcmVxdWVzdC91cmxfcmVxdWVzdF91bml0dGVzdC5jYworKysgYi9uZXQvdXJsX3JlcXVlc3QvdXJsX3JlcXVlc3RfdW5pdHRlc3QuY2MKQEAgLTc5MzYsNyArNzkzNiw3IEBACiAgIEVYUEVDVF9FUSgwLCBkLnJlY2VpdmVkX3JlZGlyZWN0X2NvdW50KCkpOwogfQogCi0jaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJEKQorI2lmICFkZWZpbmVkKEhUVFBfQ0FDSEVfVEVTVElOR19ESVNBQkxFRCkKIC8vIE1ha2Ugc3VyZSByZWRpcmVjdHMgYXJlIGNhY2hlZCwgZGVzcGl0ZSBub3QgcmVhZGluZyB0aGVpciBib2RpZXMuCiBURVNUX0YoVVJMUmVxdWVzdFRlc3RIVFRQLCBDYWNoZVJlZGlyZWN0KSB7CiAgIEFTU0VSVF9UUlVFKGh0dHBfdGVzdF9zZXJ2ZXIoKS0+U3RhcnQoKSk7CkBAIC04Mzk4LDcgKzgzOTgsNyBAQAogICB9CiB9CiAKLSNpZiAhZGVmaW5lZChIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQpCisjaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9URVNUSU5HX0RJU0FCTEVEKQogVEVTVF9GKFVSTFJlcXVlc3RUZXN0SFRUUCwgVmFyeUhlYWRlcikgewogICBBU1NFUlRfVFJVRShodHRwX3Rlc3Rfc2VydmVyKCktPlN0YXJ0KCkpOwogCkBAIC04NTYxLDcgKzg1NjEsNyBAQAogICB9CiB9CiAKLSNpZiAhZGVmaW5lZChIVFRQX0NBQ0hFX0RJU0FCTEVEX0ZPUl9TVEFSQk9BUkQpCisjaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9URVNUSU5HX0RJU0FCTEVEKQogLy8gVGVzdHMgdGhhdCBsb2FkIHRpbWluZyB3b3JrcyBhcyBleHBlY3RlZCB3aXRoIGF1dGggYW5kIHRoZSBjYWNoZS4KIFRFU1RfRihVUkxSZXF1ZXN0VGVzdEhUVFAsIEJhc2ljQXV0aExvYWRUaW1pbmcpIHsKICAgQVNTRVJUX1RSVUUoaHR0cF90ZXN0X3NlcnZlcigpLT5TdGFydCgpKTsKQEAgLTkxNTEsMTggKzkxNTEsMTIgQEAKICAgICAgIGRlZmF1bHRfY29udGV4dCgpLmh0dHBfdHJhbnNhY3Rpb25fZmFjdG9yeSgpLT5HZXRTZXNzaW9uKCkpKTsKICAgbmV0d29ya19sYXllci0+T25TdXNwZW5kKCk7CiAKLSNpZm5kZWYgSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECiAgIEh0dHBDYWNoZSBodHRwX2NhY2hlKHN0ZDo6bW92ZShuZXR3b3JrX2xheWVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgSHR0cENhY2hlOjpEZWZhdWx0QmFja2VuZDo6SW5NZW1vcnkoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGlzX21haW5fY2FjaGUgKi8pOwotI2VuZGlmCiAKICAgVGVzdFVSTFJlcXVlc3RDb250ZXh0IGNvbnRleHQodHJ1ZSk7Ci0jaWZkZWYgSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJECi0gIGNvbnRleHQuc2V0X2h0dHBfdHJhbnNhY3Rpb25fZmFjdG9yeShuZXR3b3JrX2xheWVyLmdldCgpKTsKLSNlbHNlCiAgIGNvbnRleHQuc2V0X2h0dHBfdHJhbnNhY3Rpb25fZmFjdG9yeSgmaHR0cF9jYWNoZSk7Ci0jZW5kaWYKICAgY29udGV4dC5Jbml0KCk7CiAKICAgVGVzdERlbGVnYXRlIGQ7CkBAIC05MjU1LDcgKzkyNDksNyBAQAogICBFWFBFQ1RfVFJVRShyZXEtPnJlc3BvbnNlX2luZm8oKS5uZXR3b3JrX2FjY2Vzc2VkKTsKIH0KIAotI2lmICFkZWZpbmVkKEhUVFBfQ0FDSEVfRElTQUJMRURfRk9SX1NUQVJCT0FSRCkKKyNpZiAhZGVmaW5lZChIVFRQX0NBQ0hFX1RFU1RJTkdfRElTQUJMRUQpCiBURVNUX0YoVVJMUmVxdWVzdFRlc3RIVFRQLCBOZXR3b3JrQWNjZXNzZWRDbGVhck9uQ2FjaGVkUmVzcG9uc2UpIHsKICAgQVNTRVJUX1RSVUUoaHR0cF90ZXN0X3NlcnZlcigpLT5TdGFydCgpKTsKIApAQCAtMTIzNDMsNyArMTIzMzcsNyBAQAogICAgIEVYUEVDVF9FUSgiR0VUIC9jYWNoZXRpbWUgSFRUUC8xLjFcclxuIiwgcmF3X3JlcV9oZWFkZXJzLnJlcXVlc3RfbGluZSgpKTsKICAgICBFWFBFQ1RfRVEocmF3X3Jlc3BfaGVhZGVycy5nZXQoKSwgci0+cmVzcG9uc2VfaGVhZGVycygpKTsKICAgfQotI2lmICFkZWZpbmVkKEhUVFBfQ0FDSEVfRElTQUJMRURfRk9SX1NUQVJCT0FSRCkKKyNpZiAhZGVmaW5lZChIVFRQX0NBQ0hFX1RFU1RJTkdfRElTQUJMRUQpCiAgIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VVJMUmVxdWVzdD4gcihjb250ZXh0LkNyZWF0ZVJlcXVlc3QoCiAgICAgICAgIHVybCwgREVGQVVMVF9QUklPUklUWSwgJmRlbGVnYXRlLCBUUkFGRklDX0FOTk9UQVRJT05fRk9SX1RFU1RTKSk7CkBAIC0xMjQ5MCw3ICsxMjQ4NCw3IEBACiAgIEVYUEVDVF9GQUxTRShyMi0+aXNfcGVuZGluZygpKTsKICAgQVNTRVJUX0VRKHJhd19yZXFfaGVhZGVycy5zaXplKCksIDN1KTsKICAgQVNTRVJUX0VRKHJhd19yZXNwX2hlYWRlcnMuc2l6ZSgpLCAzdSk7Ci0jaWYgIWRlZmluZWQoSFRUUF9DQUNIRV9ESVNBQkxFRF9GT1JfU1RBUkJPQVJEKQorI2lmICFkZWZpbmVkKEhUVFBfQ0FDSEVfVEVTVElOR19ESVNBQkxFRCkKICAgLy8gR29vZ2xlIGZvciB0aGUgIklmLU5vbmUtTWF0Y2giIHJlcXVlc3QgaGVhZGVyIHRvIHNlZSBpdHMgcmVsYXRpb24gdG8KICAgLy8gSFRUUCBjYWNoZS4KICAgRVhQRUNUX1RSVUUocmF3X3JlcV9oZWFkZXJzWzJdLT5GaW5kSGVhZGVyRm9yVGVzdCgiSWYtTm9uZS1NYXRjaCIsICZ2YWx1ZSkpOwpkaWZmIC0tZ2l0IGEvcHJlY29tbWl0X2hvb2tzL2djaGVja3N0eWxlX3dyYXBwZXIucHkgYi9wcmVjb21taXRfaG9va3MvZ2NoZWNrc3R5bGVfd3JhcHBlci5weQppbmRleCAzZDI1MzUyLi40MmY4Njc1IDEwMDc1NQotLS0gYS9wcmVjb21taXRfaG9va3MvZ2NoZWNrc3R5bGVfd3JhcHBlci5weQorKysgYi9wcmVjb21taXRfaG9va3MvZ2NoZWNrc3R5bGVfd3JhcHBlci5weQpAQCAtMjYsNiArMjYsOSBAQAogICBnY2hlY2tzdHlsZV9hcmdzID0gc3lzLmFyZ3ZbMTpdCiAgIHRyeToKICAgICBzeXMuZXhpdChzdWJwcm9jZXNzLmNhbGwoW2NoZWNrc3R5bGVfcGF0aF0gKyBnY2hlY2tzdHlsZV9hcmdzKSkKLSAgZXhjZXB0IE9TRXJyb3I6CisgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICBwcmludCgnQ2hlY2tzdHlsZSBub3QgZm91bmQsIHNraXBwaW5nLicpCiAgICAgc3lzLmV4aXQoMCkKKyAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICBwcmludCgnWW91IG1heSBuZWVkIHRvIHJ1biBnY2VydC4nKQorICAgIHJhaXNlIGUKZGlmZiAtLWdpdCBhL3JlcXVpcmVtZW50cy50eHQgYi9yZXF1aXJlbWVudHMudHh0CmluZGV4IGVjZmQ1MTQuLjM1YTQwMzYgMTAwNjQ0Ci0tLSBhL3JlcXVpcmVtZW50cy50eHQKKysrIGIvcmVxdWlyZW1lbnRzLnR4dApAQCAtMywzICszLDQgQEAKIHB5bGludDwzCiB5YXBmPDEKIHJlcXVlc3RzPT0yLjI1LjEKK2pzb25zY2hlbWE8NQpkaWZmIC0tZ2l0IGEvc2V0dXAuY2ZnIGIvc2V0dXAuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWIwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXR1cC5jZmcKQEAgLTAsMCArMSwyNCBAQAorW21ldGFkYXRhXQorbmFtZSA9IGNvYmFsdAorCitbdG9vbDpweXRlc3RdCitub3JlY3Vyc2VkaXJzPQorICAuKgorICBidWlsZAorICBjb2JhbHQvYmluZGluZ3MKKyAgY29iYWx0L2JsYWNrX2JveF90ZXN0cy90ZXN0cworICBjb2JhbHQvbWVkaWFfaW50ZWdyYXRpb25fdGVzdHMKKyAgb3V0CisgIHRlc3RpbmcvYW5kcm9pZAorICB0ZXN0aW5nL2d0ZXN0CisgIHRlc3RpbmcvZ21vY2sKKyAgdGhpcmRfcGFydHkKKyAgdG9vbHMvaWRsX3BhcnNlcgorICB0b29scy9sYnNoZWxsL2NvdmVyYWdlCisKKyMgSWdub3JlIG5vbi10ZXN0IGZpbGVzIHdpdGggdGVzdF8qIG5hbWVzIHRoYXQgcHl0ZXN0IHdvdWxkIG90aGVyd2lzZSBwaWNrIHVwLgorYWRkb3B0cz0KKyAgLS1pZ25vcmUtZ2xvYj0qKi90ZXN0X2ZpbHRlcnMucHkKKyAgLS1pZ25vcmUtZ2xvYj0qKi90ZXN0X2ZpbHRlci5weQorICAtLWlnbm9yZS1nbG9iPSoqL3Rlc3RfcnVubmVyLnB5CisgIC0taWdub3JlLWdsb2I9KiovdGVzdF9lbnYucHkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9CVUlMRC5nbiBiL3N0YXJib2FyZC9CVUlMRC5nbgppbmRleCBlZWZiY2M5Li43NDFiMzM2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL0JVSUxELmduCkBAIC0xNTAsNyArMTUwLDYgQEAKICAgICAic3RyaW5nLmgiLAogICAgICJzeXN0ZW0uaCIsCiAgICAgInRocmVhZC5oIiwKLSAgICAidGhyZWFkX3R5cGVzLmgiLAogICAgICJ0aW1lLmgiLAogICAgICJ0aW1lX3pvbmUuaCIsCiAgICAgInR5cGVzLmgiLApAQCAtMTc1LDcgKzE3NCw1IEBACiAgICAgICAiOnN0YXJib2FyZCIsCiAgICAgICAiLy90ZXN0aW5nL2dtb2NrIiwKICAgICBdCi0KLSAgICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiAgIH0KIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9DSEFOR0VMT0cubWQgYi9zdGFyYm9hcmQvQ0hBTkdFTE9HLm1kCmluZGV4IDQ1MGQ1MTQuLjBkZmRjNDcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9DSEFOR0VMT0cubWQKKysrIGIvc3RhcmJvYXJkL0NIQU5HRUxPRy5tZApAQCAtMTQsNiArMTQsMTYgQEAKIGNhbiBiZSBmb3VuZCBpbiB0aGUgY29tbWVudHMgb2YgdGhlICJFeHBlcmltZW50YWwgRmVhdHVyZSBEZWZpbmVzIiBzZWN0aW9uIG9mCiBbY29uZmlndXJhdGlvbi5oXShjb25maWd1cmF0aW9uLmgpLgogCisjIyMgRGVwcmVjYXRlIHRoZSB1c2FnZSBvZiBTQl9IQVNfUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVC4KK1RoZSBpbXByb3ZlbWVudHMgb24gcGxheWVyIGNyZWF0aW9uIGFuZCBvdXRwdXQgbW9kZSBxdWVyeSAobGlrZQorYFNiUGxheWVyQ3JlYXRpb25QYXJhbWAgYW5kIGBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoKWApIGFyZSBhbHdheXMKK2VuYWJsZWQuICBUaGlzIGNoYW5nZSBhbHNvIGRlcHJlY2F0ZXMgYFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZCgpYC4KKworIyMjIERlcHJlY2F0ZSB0aGUgdXNhZ2Ugb2YgU0JfSEFTX01FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UCitUaGUgZXh0cmEgcGFyYW1ldGVycyAobGlrZSBgcHJvZmlsZWAgYW5kIGBsZXZlbGApIG9uIGBTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCgpYAorYXJlIGFsd2F5cyBlbmFibGVkLiAgVGhpcyBjaGFuZ2UgYWxzbyBkZXByZWNhdGVkCitgU2JNZWRpYUlzVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3NTdXBwb3J0ZWQoKWAuCisKICMjIFZlcnNpb24gMTMKICMjIyBDaGFuZ2VkIGxpZmVjeWNsZSBldmVudHMgdG8gYWRkIHN1cHBvcnQgZm9yIGEgY29uY2VhbGVkIHN0YXRlLgogCkBAIC0yNzYsMTIgKzI4Niw2IEBACiBBIHBsYXRmb3JtIHdpbGwgZGVmaW5lIHRoZSBleHRlcm4gY29uc3RhbnRzIGRlY2xhcmVkIGluCiAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiLiBUaGUgZGVmaW5pdGlvbnMgYXJlIGRvbmUgaW4KICJzdGFyYm9hcmQvPFBMQVRGT1JNX1BBVEg+L2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmNjIi4KLQotVGhlIGV4YWN0IG1hcHBpbmcgYmV0d2VlbiBtYWNyb3MgYW5kIGV4dGVybiB2YXJpYWJsZXMgY2FuIGJlIGZvdW5kIGluCi0ic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHNfY29tcGF0aWJpbGl0eV9kZWZpbmVzLmgiCi10aG91Z2ggdGhlIG5hbWluZyBzY2hlbWUgaXMgdmVyeSBuZWFybHkgdGhlIHNhbWU6IHRoZSBvbGQgU0JfRk9PIG1hY3JvIHdpbGwKLWFsd2F5cyBiZWNvbWUgdGhlIGNvbnN0YW50IGtTYkZvby4KLQogIyMjIEltcHJvdmUgcGxheWVyIGNyZWF0aW9uIGFuZCBvdXRwdXQgbW9kZSBxdWVyeS4KIAogMS4gSW50cm9kdWNlIHRoZSBuZXcgdHlwZSBTYlBsYXllckNyZWF0aW9uUGFyYW0gdGhhdCBob2xkcyB0aGUgY29tbW9uCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvUkVBRE1FLm1kIGIvc3RhcmJvYXJkL1JFQURNRS5tZAppbmRleCBiOGJjM2ZiLi5hOWVhNDFmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvUkVBRE1FLm1kCisrKyBiL3N0YXJib2FyZC9SRUFETUUubWQKQEAgLTcsMjggKzcsMjYgQEAKIAogIyMgR04gTWlncmF0aW9uIE5vdGljZQogCi1Db2JhbHQgYW5kIFN0YXJib2FyZCBhcmUgY3VycmVudGx5IG1pZ3JhdGluZyBmcm9tIHRoZSBHWVAgYnVpbGQgc3lzdGVtIHRvIHRoZSBHTgotYnVpbGQgc3lzdGVtLiBUaGlzIHJlYWRtZSBjb250YWlucyBpbnN0cnVjdGlvbnMgZm9yIGJvdGggc3lzdGVtcy4gQXMgb2Ygbm93LCBHTgotaXMgbm90IHJlYWR5IGZvciBnZW5lcmFsIHVzZSBmb3IgQ29iYWx0L1N0YXJib2FyZC4gSWYgeW91IGFyZSBub3QgYSBjb3JlIENvYmFsdAotZGV2ZWxvcGVyLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGlnbm9yZSB0aGUgc2VjdGlvbnMgdGl0bGVkICJHTiBJbnN0cnVjdGlvbnMiIGZvcgotbm93LgorQ29iYWx0IGFuZCBTdGFyYm9hcmQgaGF2ZSBiZWVuIG1pZ3JhdGVkIGZyb20gdGhlIEdZUCBidWlsZCBzeXN0ZW0gdG8gdGhlIEdOCitidWlsZCBzeXN0ZW0uIFRoaXMgcmVhZG1lIG9ubHkgY29udGFpbnMgaW5zdHJ1Y3Rpb25zIGZvciBHTiwgYXMgR1lQIGlzIG5vCitsb25nZXIgc3VwcG9ydGVkLgogCiAKICMjIERvY3VtZW50YXRpb24KIAotU2VlIFtgc3JjL3N0YXJib2FyZC9kb2NgXShkb2MpIGZvciBtb3JlIGRldGFpbGVkIGRvY3VtZW50YXRpb24uCitTZWUgW2BzdGFyYm9hcmQvZG9jYF0oZG9jKSBmb3IgbW9yZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uLgogCiAKICMjIEludGVyZXN0aW5nIFNvdXJjZSBMb2NhdGlvbnMKIAotQWxsIHNvdXJjZSBsb2NhdGlvbnMgYXJlIHNwZWNpZmllZCByZWxhdGl2ZSB0byBgc3JjL3N0YXJib2FyZC9gICh0aGlzIGRpcmVjdG9yeSkuCitBbGwgc291cmNlIGxvY2F0aW9ucyBhcmUgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIGBzdGFyYm9hcmQvYCAodGhpcyBkaXJlY3RvcnkpLgogCiAgICogW2AuYF0oLikgLSBUaGlzIGlzIHRoZSByb290IGRpcmVjdG9yeSBmb3IgdGhlIFN0YXJib2FyZCBwcm9qZWN0LCBhbmQKICAgICBjb250YWlucyBhbGwgdGhlIHB1YmxpYyBoZWFkZXJzIHRoYXQgU3RhcmJvYXJkIGRlZmluZXMuCiAgICogW2BleGFtcGxlcy9gXShleGFtcGxlcykgLSBFeGFtcGxlIGNvZGUgZGVtb25zdHJhdGluZyB2YXJpb3VzIGFzcGVjdHMgb2YKICAgICBTdGFyYm9hcmQgQVBJIHVzYWdlLgogICAqIFtgc3R1Yi9gXShzdHViKSAtIFRoZSBob21lIG9mIHRoZSBTdHViIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbi4gVGhpcwotICAgIGNvbnRhaW5zIGEgYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgIGZpbGUgdGhhdCBkZWZpbmVzIGEgbGlicmFyeSB3aXRoIGFsbCB0aGUKKyAgICBjb250YWlucyBhIGBCVUlMRC5nbmAgZmlsZSB0aGF0IGRlZmluZXMgYSBsaWJyYXJ5IHdpdGggYWxsIHRoZQogICAgIHNvdXJjZSBmaWxlcyBuZWVkZWQgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIGxpbmthYmxlIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbi4KICAgKiBbYG5wbGIvYF0obnBsYikgLSAiTm8gUGxhdGZvcm0gTGVmdCBCZWhpbmQsIiBTdGFyYm9hcmQncyBwbGF0Zm9ybQogICAgIHZlcmlmaWNhdGlvbiB0ZXN0IHN1aXRlLgpAQCAtNzQsNyArNzIsNyBAQAogCiBUbyBiZSBwZXJmZWN0bHkgY29tcGF0aWJsZSB3aXRoIHRoZSBDb2JhbHQgc291cmNlIHRyZWUgbGF5b3V0LCBhbnkgY29kZSB0aGF0IGlzCiB3cml0dGVuIGJ5IGEgcGFydHkgdGhhdCBpc24ndCB0aGUgQ29iYWx0IHRlYW0gc2hvdWxkIGJlIGluIHRoZQotYHNyYy90aGlyZF9wYXJ0eS9gIGRpcmVjdG9yeS4gVGhlIGNob2ljZSBpcyB1cCB0byB5b3UsIGJ1dCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UKK2B0aGlyZF9wYXJ0eS9gIGRpcmVjdG9yeS4gVGhlIGNob2ljZSBpcyB1cCB0byB5b3UsIGJ1dCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UKIGZvbGxvdyB0aGlzIHByYWN0aWNlLCBldmVuIGlmLCBhcyB3ZSBleHBlY3QgdG8gYmUgY29tbW9uLCB5b3UgZG8gbm90IHBsYW4gb24KIHNoYXJpbmcgeW91ciBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24gd2l0aCBhbnlvbmUuCiAKQEAgLTg1LDgwICs4Myw2MCBAQAogCiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgcGxhY2UgeW91ciBjb2RlIGhlcmUgaW4gdGhlIHNvdXJjZSB0cmVlOgogCi0gICAgc3JjL3RoaXJkX3BhcnR5L3N0YXJib2FyZC88ZmFtaWx5LW5hbWU+LworICAgIHRoaXJkX3BhcnR5L3N0YXJib2FyZC88ZmFtaWx5LW5hbWU+LwogCiBXaXRoIHN1YmRpcmVjdG9yaWVzOgogCiAgICogYHNoYXJlZC9gIC0gRm9yIGNvZGUgc2hhcmVkIGJldHdlZW4gYXJjaGl0ZWN0dXJlcyB3aXRoaW4gYSBwcm9kdWN0IGZhbWlseS4KICAgKiBgPGJpbmFyeS12YXJpYW50Pi9gIC0gRm9yIGFueSBjb2RlIHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBzcGVjaWZpYyBiaW5hcnkKLSAgICB2YXJpYW50LiBFYWNoIG9uZSBvZiB0aGVzZSBtdXN0IGF0IGxlYXN0IGhhdmUgYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgLAotICAgIGBhdG9taWNfcHVibGljLmhgLCBgdGhyZWFkX3R5cGVzX3B1YmxpYy5oYCwgYGd5cF9jb25maWd1cmF0aW9uLnB5YCwKLSAgICBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAsIGFuZCBgc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGAgZmlsZXMuCisgICAgdmFyaWFudC4gRWFjaCBvbmUgb2YgdGhlc2UgbXVzdCBhdCBsZWFzdCBoYXZlIGBCVUlMRC5nbmAsCisgICAgYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgLCBgYXRvbWljX3B1YmxpYy5oYCwKKyAgICBgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbmAsCisgICAgYHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmlgLCBhbmQgYHRvb2xjaGFpbi9CVUlMRC5nbmAgZmlsZXMuCiAKIEluIHRoZSBCb2JDbydzIEJvYkJveCBleGFtcGxlLCB3ZSB3b3VsZCBzZWUgc29tZXRoaW5nIGxpa2U6CiAKLSAgKiBgc3JjL3RoaXJkX3BhcnR5L3N0YXJib2FyZC9ib2Jib3gvYAorICAqIGB0aGlyZF9wYXJ0eS9zdGFyYm9hcmQvYm9iYm94L2AKICAgICAgICogYHNoYXJlZC9gCiAgICAgICAqIGBhcm1lYi9gCisgICAgICAgICAgKiBgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9gCisgICAgICAgICAgICAqIGBCVUlMRC5nbmAKKyAgICAgICAgICAgICogYGNvbmZpZ3VyYXRpb24uZ25pYAorICAgICAgICAgICogYHRvb2xjaGFpbi9gCisgICAgICAgICAgICAqIGBCVUlMRC5nbmAKICAgICAgICAgICAqIGBhdG9taWNfcHVibGljLmhgCisgICAgICAgICAgKiBgQlVJTEQuZ25gCiAgICAgICAgICAgKiBgY29uZmlndXJhdGlvbl9wdWJsaWMuaGAKLSAgICAgICAgICAqIGBneXBfY29uZmlndXJhdGlvbi5neXBpYAotICAgICAgICAgICogYGd5cF9jb25maWd1cmF0aW9uLnB5YAotICAgICAgICAgICogYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgCi0gICAgICAgICAgKiBgdGhyZWFkX3R5cGVzX3B1YmxpYy5oYAogICAgICAgKiBgYXJtZWwvYAorICAgICAgICAgICogYHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24vYAorICAgICAgICAgICAgKiBgQlVJTEQuZ25gCisgICAgICAgICAgICAqIGBjb25maWd1cmF0aW9uLmduaWAKKyAgICAgICAgICAqIGB0b29sY2hhaW4vYAorICAgICAgICAgICAgKiBgQlVJTEQuZ25gCiAgICAgICAgICAgKiBgYXRvbWljX3B1YmxpYy5oYAorICAgICAgICAgICogYEJVSUxELmduYAogICAgICAgICAgICogYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgCi0gICAgICAgICAgKiBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAKLSAgICAgICAgICAqIGBneXBfY29uZmlndXJhdGlvbi5weWAKLSAgICAgICAgICAqIGBzdGFyYm9hcmRfcGxhdGZvcm0uZ3lwYAotICAgICAgICAgICogYHRocmVhZF90eXBlc19wdWJsaWMuaGAKIAogQW5kIHNvIG9uLgogCi0jIyMjIEdOIEluc3RydWN0aW9ucwotCi1FYWNoIGA8YmluYXJ5LXZhcmlhbnQ+L2AgZGlyZWN0b3J5IG11c3QgaGF2ZSBhdCBsZWFzdCBgY29uZmlndXJhdGlvbl9wdWJsaWMuaGAsCi1gYXRvbWljX3B1YmxpYy5oYCwgYHRocmVhZF90eXBlc19wdWJsaWMuaGAsIGBCVUlMRC5nbmAsIGBjb25maWd1cmF0aW9uLmduaWAsCi1hbmQgYGJ1aWxkY29uZmlnLmduaWAuCi0KLUluIHRoZSBCb2JDbydzIEJvYkJveCBleGFtcGxlLCB3ZSB3b3VsZCBzZWUgYSBkaXJlY3RvcnkgdHJlZSBsaWtlOgotCi0gICogYHNyYy90aGlyZF9wYXJ0eS9zdGFyYm9hcmQvYm9iYm94L2AKLSAgICAgICogYHNoYXJlZC9gCi0gICAgICAqIGBhcm1lYi9gCi0gICAgICAgICAgKiBgYnVpbGRjb25maWcuZ25pYAotICAgICAgICAgICogYGNvbmZpZ3VyYXRpb24uZ25pYAotICAgICAgICAgICogYGF0b21pY19wdWJsaWMuaGAKLSAgICAgICAgICAqIGBCVUlMRC5nbmAKLSAgICAgICAgICAqIGBjb25maWd1cmF0aW9uX3B1YmxpYy5oYAotICAgICAgICAgICogYHRocmVhZF90eXBlc19wdWJsaWMuaGAKLSAgICAgICogYGFybWVsL2AKLSAgICAgICAgICAqIGBidWlsZGNvbmZpZy5nbmlgCi0gICAgICAgICAgKiBgY29uZmlndXJhdGlvbi5nbmlgCi0gICAgICAgICAgKiBgYXRvbWljX3B1YmxpYy5oYAotICAgICAgICAgICogYEJVSUxELmduYAotICAgICAgICAgICogYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgCi0gICAgICAgICAgKiBgdGhyZWFkX3R5cGVzX3B1YmxpYy5oYAotCiAKICMjIyBJSUkuIEJhc2UgWW91ciBQb3J0IG9uIGEgUmVmZXJlbmNlIFBvcnQKIAogWW91IGNhbiBzdGFydCBvZmYgYnkgY29weWluZyBmaWxlcyBmcm9tIGEgcmVmZXJlbmNlIHBvcnQgdG8geW91ciBwb3J0J3MKIGxvY2F0aW9uLiBDdXJyZW50bHkgdGhlc2UgcmVmZXJlbmNlIHBvcnRzIGluY2x1ZGU6CiAKLSAgKiBgc3JjL3N0YXJib2FyZC9zdHViYAotICAqIGBzcmMvc3RhcmJvYXJkL2xpbnV4YAotICAqIGBzcmMvc3RhcmJvYXJkL3Jhc3BpYAorICAqIGBzdGFyYm9hcmQvc3R1YmAKKyAgKiBgc3RhcmJvYXJkL2xpbnV4YAorICAqIGBzdGFyYm9hcmQvcmFzcGlgCiAKLVRoZSBgc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGAgY29udGFpbnMgYWJzb2x1dGUgcGF0aHMsIHNvIHRoZSBwYXRocyB3aWxsIHN0aWxsIGJlCitUaGUgcGxhdGZvcm0ncyBgQlVJTEQuZ25gIGNvbnRhaW5zIGFic29sdXRlIHBhdGhzLCBzbyB0aGUgcGF0aHMgd2lsbCBzdGlsbCBiZQogdmFsaWQgaWYgeW91IGNvcHkgaXQgdG8gYSBuZXcgZGlyZWN0b3J5LiBZb3UgY2FuIHRoZW4gaW5jcmVtZW50YWxseSByZXBsYWNlCiBmaWxlcyB3aXRoIG5ldyBpbXBsZW1lbnRhdGlvbnMgYXMgbmVjZXNzYXJ5LgogCiBUaGUgY2xlYW5lc3QsIHNpbXBsZXN0IHN0YXJ0aW5nIHBvaW50IGlzIGZyb20gdGhlIFN0dWIgcmVmZXJlbmNlCiBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyB3aWxsIHdvcmssIGJ1dCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBhbmQgbGluayBpdAogd2l0aCB5b3VyIHRvb2xjaGFpbi4gWW91IGNhbiB0aGVuIHJlcGxhY2Ugc3R1YiBpbXBsZW1lbnRhdGlvbnMgd2l0aAotaW1wbGVtZW50YXRpb25zIGZyb20gYHNyYy9zdGFyYm9hcmQvc2hhcmVkYCBvciB5b3VyIG93biBjdXN0b20gaW1wbGVtZW50YXRpb25zCitpbXBsZW1lbnRhdGlvbnMgZnJvbSBgc3RhcmJvYXJkL3NoYXJlZGAgb3IgeW91ciBvd24gY3VzdG9tIGltcGxlbWVudGF0aW9ucwogbW9kdWxlLWJ5LW1vZHVsZSwgdW50aWwgeW91IGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBtb2R1bGVzLgogCiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIGNvcHkgZWl0aGVyIHRoZSBEZXNrdG9wIExpbnV4IG9yIFJhc3BiZXJyeSBQaSBwb3J0cyBhbmQKQEAgLTE2NiwxNDIgKzE0NCw4MCBAQAogCiBGb3IgZXhhbXBsZSwgZm9yIGBib2Jib3gtYXJtZWxgLCB5b3UgbWlnaHQgZG86CiAKLSAgICBta2RpciAtcCBzcmMvdGhpcmRfcGFydHkvc3RhcmJvYXJkL2JvYmJveAotICAgIGNwIC1SIHNyYy9zdGFyYm9hcmQvc3R1YiBzcmMvdGhpcmRfcGFydHkvc3RhcmJvYXJkL2JvYmJveC9hcm1lbAorICAgIG1rZGlyIC1wIHRoaXJkX3BhcnR5L3N0YXJib2FyZC9ib2Jib3gKKyAgICBjcCAtUiBzdGFyYm9hcmQvc3R1YiB0aGlyZF9wYXJ0eS9zdGFyYm9hcmQvYm9iYm94L2FybWVsCiAKIE1vZGlmeSB0aGUgZmlsZXMgaW4gYDxiaW5hcnktdmFyaWFudD4vYCBhcyBhcHByb3ByaWF0ZSAoeW91IHdpbGwgcHJvYmFibHkgYmUKIGNvbWluZyBiYWNrIHRvIHRoZXNlIGZpbGVzIGEgbG90KS4KIAotVXBkYXRlIGA8YmluYXJ5LXZhcmlhbnQ+L3N0YXJib2FyZF9wbGF0Zm9ybS5neXBgIHRvIHBvaW50IGF0IGFsbCB0aGUgc291cmNlCi1maWxlcyB0aGF0IHlvdSB3YW50IHRvIGJ1aWxkIGFzIHlvdXIgbmV3IFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbi4gVGhlCi1gJzwoREVQVEgpJ2AgZXhwcmVzc2lvbiBpbiBHWVAgZXhwYW5kcyB0byBlbm91Z2ggYC4uL2BzIHRvIHRha2UgeW91IHRvIHRoZQotYHNyYy9gIGRpcmVjdG9yeSBvZiB5b3VyIHNvdXJjZSB0cmVlLiBPdGhlcndpc2UsIGZpbGVzIGFyZSBhc3N1bWVkIHRvIGJlCi1yZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHRoZSBgLmd5cGAgb3IgYC5neXBpYCBmaWxlIGlzIGluLgotCi1JbiBvcmRlciB0byB1c2UgYSBuZXcgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBpbiBhIGJ1aWxkLCB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdAoteW91IGhhdmUgYSBgZ3lwX2NvbmZpZ3VyYXRpb24ucHlgLCBgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaWAsIGFuZAotYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgIGluIHRoZWlyIG93biBkaXJlY3RvcnkgZm9yIGVhY2ggYmluYXJ5IHZhcmlhbnQsIHBsdXMKLXRoZSBoZWFkZXIgZmlsZXMgYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgLCBgYXRvbWljX3B1YmxpYy5oYCwgYW5kCi1gdGhyZWFkX3R5cGVzX3B1YmxpYy5oYC4gYGd5cF9jb2JhbHRgIHdpbGwgc2NhbiB5b3VyIGRpcmVjdG9yaWVzIGZvciB0aGVzZQotZmlsZXMsIGFuZCB0aGVuIGNhbGN1bGF0ZSBhIHBvcnQgbmFtZSBiYXNlZCBvbiB0aGUgZGlyZWN0b3JpZXMgYmV0d2VlbgotYHNyYy90aGlyZF9wYXJ0eS9zdGFyYm9hcmRgIGFuZCB5b3VyIGBneXBfY29uZmlndXJhdGlvbi4qYCBmaWxlcy4gKGUuZy4gZm9yCi1gc3JjL3RoaXJkX3BhcnR5L3N0YXJib2FyZC9ib2Jib3gvYXJtZWIvZ3lwX2NvbmZpZ3VyYXRpb24ucHlgLCBpdCB3b3VsZCBjaG9vc2UKLXRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIG5hbWUgYGJvYmJveC1hcm1lYmAuKQotCi0jIyMjIEdOIEluc3RydWN0aW9ucwotCiBVcGRhdGUgYDxiaW5hcnktdmFyaWFudD4vQlVJTEQuZ25gIHRvIHBvaW50IGF0IGFsbCB0aGUgc291cmNlIGZpbGVzIHRoYXQgeW91CiB3YW50IHRvIGJ1aWxkIGFzIHlvdXIgbmV3IFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbi4gVGhlIGAvL2AgZXhwcmVzc2lvbiBpbiBHTgotcmVmZXJzIHRvIHRoZSBgc3JjL2AgZGlyZWN0b3J5IG9mIHlvdXIgc291cmNlIHRyZWUuIE90aGVyd2lzZSwgZmlsZXMgYXJlIGFzc3VtZWQKLXRvIGJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhlIGBCVUlMRC5nbmAgb3IgYC5nbmlgIGZpbGUgaXMgaW4uIFRoZQotYEJVSUxELmduYCBmaWxlIGNvbnRhaW5zIGFic29sdXRlIHBhdGhzLCBzbyB0aGUgcGF0aHMgd2lsbCBzdGlsbCBiZSB2YWxpZCBpZiB5b3UKLWNvcHkgaXQgdG8gYSBuZXcgZGlyZWN0b3J5LiBZb3UgY2FuIHRoZW4gaW5jcmVtZW50YWxseSByZXBsYWNlIGZpbGVzIHdpdGggbmV3Ci1pbXBsZW1lbnRhdGlvbnMgYXMgbmVjZXNzYXJ5LgorcmVmZXJzIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHlvdXIgc291cmNlIHRyZWUuIE90aGVyd2lzZSwgZmlsZXMgYXJlCithc3N1bWVkIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3RvcnkgdGhlIGBCVUlMRC5nbmAgb3IgYC5nbmlgIGZpbGUgaXMgaW4uCitUaGUgYEJVSUxELmduYCBmaWxlIGNvbnRhaW5zIGFic29sdXRlIHBhdGhzLCBzbyB0aGUgcGF0aHMgd2lsbCBzdGlsbCBiZSB2YWxpZAoraWYgeW91IGNvcHkgaXQgdG8gYSBuZXcgZGlyZWN0b3J5LiBZb3UgY2FuIHRoZW4gaW5jcmVtZW50YWxseSByZXBsYWNlIGZpbGVzCit3aXRoIG5ldyBpbXBsZW1lbnRhdGlvbnMgYXMgbmVjZXNzYXJ5LgogCiBJbiBvcmRlciB0byB1c2UgYSBuZXcgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBpbiBhIGJ1aWxkLCB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdAoteW91IGhhdmUgYSBgQlVJTEQuZ25gLCBgY29uZmlndXJhdGlvbi5nbmlgLCBhbmQgYGJ1aWxkY29uZmlnLmduaWAgaW4gdGhlaXIKLW93biBkaXJlY3RvcnkgZm9yIGVhY2ggYmluYXJ5IHZhcmlhbnQsIHBsdXMgdGhlIGhlYWRlciBmaWxlcwotYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgLCBgYXRvbWljX3B1YmxpYy5oYCwgYW5kIGB0aHJlYWRfdHlwZXNfcHVibGljLmhgLiBUaGUgR04KLWJ1aWxkIHdpbGwgc2NhbiB5b3VyIGRpcmVjdG9yaWVzIGZvciB0aGVzZSBmaWxlcywgYW5kIHRoZW4gY2FsY3VsYXRlIGEgcG9ydCBuYW1lCi1iYXNlZCBvbiB0aGUgZGlyZWN0b3JpZXMgYmV0d2VlbiBgc3JjL3RoaXJkX3BhcnR5L3N0YXJib2FyZGAgYW5kIHlvdXIKLWBjb25maWd1cmF0aW9uLmduaWAgZmlsZXMuIChlLmcuIGZvcgotYHNyYy90aGlyZF9wYXJ0eS9zdGFyYm9hcmQvYm9iYm94L2FybWViL2NvbmZpZ3VyYXRpb24uZ25pYCwgaXQgd291bGQgY2hvb3NlIHRoZQotcGxhdGZvcm0gY29uZmlndXJhdGlvbiBuYW1lIGBib2Jib3gtYXJtZWJgLikKK3lvdSBoYXZlIGEgYEJVSUxELmduYCwgYHRvb2xjaGFpbi9CVUlMRC5nbmAsCitgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaWAsIGFuZAorYHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ25gIGluIHRoZWlyIG93biBkaXJlY3RvcnkgZm9yIGVhY2ggYmluYXJ5Cit2YXJpYW50LCBwbHVzIHRoZSBoZWFkZXIgZmlsZXMgYGNvbmZpZ3VyYXRpb25fcHVibGljLmhgIGFuZCBgYXRvbWljX3B1YmxpYy5oYC4KK1lvdSBtdXN0IGFkZCB5b3VyIHBsYXRmb3JtIG5hbWUgdG8gYHN0YXJib2FyZC9idWlsZC9wbGF0Zm9ybXMucHlgIGFsb25nIHdpdGgKK3RoZSBwYXRoIHRvIHRoZSBwb3J0IHRvIGJlIGFibGUgdG8gYnVpbGQgaXQuCiAKIAogIyMjIElWLiBBIE5ldyBQb3J0LCBTdGVwLWJ5LVN0ZXAKIAotICAxLiBSZWN1cnNpdmVseSBjb3B5IGBzcmMvc3RhcmJvYXJkL3N0dWJgIHRvCi0gICAgIGBzcmMvdGhpcmRfcGFydHkvc3RhcmJvYXJkLzxmYW1pbHktbmFtZT4vPGJpbmFyeS12YXJpYW50PmAuICBZb3UgbWF5IGFsc28KKyAgMS4gUmVjdXJzaXZlbHkgY29weSBgc3RhcmJvYXJkL3N0dWJgIHRvCisgICAgIGB0aGlyZF9wYXJ0eS9zdGFyYm9hcmQvPGZhbWlseS1uYW1lPi88YmluYXJ5LXZhcmlhbnQ+YC4gIFlvdSBtYXkgYWxzbwogICAgICBjb25zaWRlciBjb3B5aW5nIGZyb20gYW5vdGhlciByZWZlcmVuY2UgcGxhdGZvcm0sIGxpa2UgYHJhc3BpLTJgIG9yCiAgICAgIGBsaW51eC14NjR4MTFgLgotICAxLiBJbiBgZ3lwX2NvbmZpZ3VyYXRpb24ucHlgCi0gICAgICAxLiBJbiB0aGUgYENyZWF0ZVBsYXRmb3JtQ29uZmlnKClgIGZ1bmN0aW9uLCBwYXNzIHlvdXIKLSAgICAgICAgIGA8cGxhdGZvcm0tY29uZmlndXJhdGlvbj5gIGFzIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIFBsYXRmb3JtQ29uZmlnCi0gICAgICAgICBjb25zdHJ1Y3RvciwgbGlrZSBgcmV0dXJuIFBsYXRmb3JtQ29uZmlnKCdib2Jib3gtYXJtZWInKWAuCi0gICAgICAxLiBJbiBgR2V0VmFyaWFibGVzYAotICAgICAgICAgIDEuIFNldCBgJ2NsYW5nJzogMWAgaWYgeW91ciB0b29sY2hhaW4gaXMgY2xhbmcuCi0gICAgICAgICAgMS4gRGVsZXRlIG90aGVyIHZhcmlhYmxlcyBpbiB0aGF0IGZ1bmN0aW9uIHRoYXQgYXJlIG5vdCBuZWVkZWQgZm9yCi0gICAgICAgICAgICAgeW91ciBwbGF0Zm9ybS4KLSAgICAgIDEuIEluIGBHZXRFbnZpcm9ubWVudFZhcmlhYmxlc2AsIHNldCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgdG8gcG9pbnQgdG8gdGhlCi0gICAgICAgICB0b29sY2hhaW4gYW5hbG9ncyBmb3IgdGhlIHRvb2xjaGFpbiBmb3IgeW91ciBwbGF0Zm9ybS4KLSAgMS4gSW4gYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgCi0gICAgICAxLiBVcGRhdGUgdGhlIG5hbWVzIG9mIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgdGhlIGRlZmF1bHRfY29uZmlndXJhdGlvbiB0bwotICAgICAgICAgYmUgYDxwbGF0Zm9ybS1jb25maWd1cmF0aW9uPl88YnVpbGQtdHlwZT5gIGZvciB5b3VyIHBsYXRmb3JtCi0gICAgICAgICBjb25maWd1cmF0aW9uIG5hbWUsIHdoZXJlIGA8YnVpbGQtdHlwZT5gIGlzIG9uZSBvZiBgZGVidWdgLCBgZGV2ZWxgLAotICAgICAgICAgYHFhYCwgYGdvbGRgLgotICAgICAgMS4gVXBkYXRlIHlvdXIgcGxhdGZvcm0gdmFyaWFibGVzLgotICAgICAgICAgIDEuIFNldCBgJ3RhcmdldF9hcmNoJ2AgdG8geW91ciBhcmNoaXRlY3R1cmU6IGAnYXJtJ2AsCi0gICAgICAgICAgICAgYCd4NjQnYCwgYCd4ODYnYAotICAgICAgICAgIDEuIFNldCBgJ3RhcmdldF9vcyc6ICdsaW51eCdgIGlmIHlvdXIgcGxhdGZvcm0gaXMgTGludXgtYmFzZWQuCi0gICAgICAgICAgMS4gU2V0IGAnZ2xfdHlwZSc6ICdzeXN0ZW1fZ2xlczInYCBpZiB5b3UgYXJlIHVzaW5nIHRoZSBzeXN0ZW0gRUdMICsKLSAgICAgICAgICAgICBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICAxLiBTZXQgYCdpbl9hcHBfZGlhbCdgIHRvIGAxYCBvciBgMGAuIFRoaXMgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUKLSAgICAgICAgICAgICBESUFMIHNlcnZlciB0aGF0IHJ1bnMgaW5zaWRlIENvYmFsdCwgb25seSB3aGVuIENvYmFsdCBpcwotICAgICAgICAgICAgIHJ1bm5pbmcuIFlvdSBkbyBub3Qgd2FudCBpbi1hcHAgRElBTCBpZiB5b3UgYWxyZWFkeSBoYXZlCi0gICAgICAgICAgICAgc3lzdGVtLXdpZGUgRElBTCBzdXBwb3J0LgorICAxLiBBZGQgeW91ciBwbGF0Zm9ybSBhbmQgcGF0aCB0byBgc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3Jtcy5weWAuCisgIDEuIEluIGBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pYAorICAgICAgMS4gRGVsZXRlIHZhcmlhYmxlcyBpbiB0aGUgZmlsZSB0aGF0IGFyZSBub3QgbmVlZGVkIGZvciB5b3VyIHBsYXRmb3JtLgorICAgICAgMS4gU2V0IGBnbF90eXBlYCB0byB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgaWYgaXQgaXMgbm90IHRoZSBkZWZhdWx0CisgICAgICAgICBgc3lzdGVtX2dsZXMyYC4KKyAgICAgIDEuIFNldCBgZW5hYmxlX2luX2FwcF9kaWFsYCB0byBgdHJ1ZWAgb3IgYGZhbHNlYC4gVGhpcyBlbmFibGVzIG9yCisgICAgICAgICBkaXNhYmxlcyB0aGUgRElBTCBzZXJ2ZXIgdGhhdCBydW5zIGluc2lkZSBDb2JhbHQsIG9ubHkgd2hlbiBDb2JhbHQgaXMKKyAgICAgICAgIHJ1bm5pbmcuIFlvdSBkbyBub3Qgd2FudCBpbi1hcHAgRElBTCBpZiB5b3UgYWxyZWFkeSBoYXZlIHN5c3RlbS13aWRlCisgICAgICAgICBESUFMIHN1cHBvcnQuCisgIDEuIEluIGBwbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduYAogICAgICAgMS4gVXBkYXRlIHlvdXIgdG9vbGNoYWluIGNvbW1hbmQtbGluZSBmbGFncyBhbmQgbGlicmFyaWVzLiBNYWtlIHN1cmUgeW91CiAgICAgICAgICBkb24ndCBhc3N1bWUgYSBwYXJ0aWN1bGFyIHdvcmtzdGF0aW9uIGxheW91dCwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlCiAgICAgICAgICBkaWZmZXJlbnQgZm9yIHNvbWVvbmUgZWxzZS4KLSAgICAgIDEuIFVwZGF0ZSB0aGUgZ2xvYmFsIGRlZmluZXMgaW4gYCd0YXJnZXRfZGVmYXVsdHMnLidkZWZpbmVzJ2AsIGlmCi0gICAgICAgICBuZWNlc3NhcnkuCisgIDEuIEluIGB0b29sY2hhaW4vQlVJTEQuZ25gCisgICAgICAxLiBFaXRoZXIgdXNlIHRoZSBgY2xhbmdfdG9vbGNoYWluYCB0ZW1wbGF0ZSBhbmQgcGFzcyB0aGUgYmFzZSBwYXRoIHRvCisgICAgICAgICB5b3VyIHRvb2xjaGFpbiwgb3IgdXNlIHRoZSBgZ2NjX3Rvb2xjaGFpbmAgYW5kIHBhc3MgdGhlIGZ1bGwgcGF0aCB0bworICAgICAgICAgZWFjaCB0b29sIHlvdSB1c2UuCisgICAgICAxLiBTZXQgYGlzX2NsYW5nID0gdHJ1ZWAgaW4gYHRvb2xjaGFpbl9hcmdzYCBpbiBgZ2NjX3Rvb2xjaGFpbmAgaWYgdGhlCisgICAgICAgICB0b29sY2hhaW4gdXNlcyBjbGFuZy4KICAgMS4gR28gdGhyb3VnaCBgY29uZmlndXJhdGlvbl9wdWJsaWMuaGAgYW5kIGFkanVzdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCiAgICAgIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHBsYXRmb3JtLgotICAxLiBVcGRhdGUgYHN0YXJib2FyZF9wbGF0Zm9ybS5neXBgIHRvIHBvaW50IGF0IGFsbCB0aGUgc291cmNlIGZpbGVzIHlvdSB3YW50Ci0gICAgIHRvIGJ1aWxkIGFzIHBhcnQgb2YgeW91ciBuZXcgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9uIChhcyBtZW50aW9uZWQgYWJvdmUpLgotICAxLiBVcGRhdGUgYGF0b21pY19wdWJsaWMuaGAgYW5kIGB0aHJlYWRfdHlwZXNfcHVibGljLmhgIGFzIG5lY2Vzc2FyeSB0byBwb2ludAorICAxLiBVcGRhdGUgYEJVSUxELmduYCB0byBwb2ludCBhdCBhbGwgdGhlIHNvdXJjZSBmaWxlcyB5b3Ugd2FudCB0byBidWlsZCBhcworICAgICBwYXJ0IG9mIHlvdXIgbmV3IFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiAoYXMgbWVudGlvbmVkIGFib3ZlKS4KKyAgMS4gVXBkYXRlIGBhdG9taWNfcHVibGljLmhgIGFzIG5lY2Vzc2FyeSB0byBwb2ludAogICAgICBhdCB0aGUgYXBwcm9wcmlhdGUgc2hhcmVkIG9yIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMuCiAKK0lmIHlvdSB3YW50IHRvIHVzZSBgY29iYWx0L2J1aWxkL2duLnB5YCwgeW91J2xsIGFsc28gbmVlZCBhCitgdGhpcmRfcGFydHkvc3RhcmJvYXJkLzxmYW1pbHktbmFtZT4vPGJpbmFyeS12YXJpYW50Pi9hcmdzLmduYCBmaWxlLiBUaGlzCitzaG91bGQgY29udGFpbiB0aGUgZ24gYXJndW1lbnRzIG5lY2Vzc2FyeSB0byBidWlsZCB5b3VyIHBsYXRmb3JtLiBQYXkKK3BhcnRpY3VsYXIgYXR0ZW50aW9uIHRvIGB0YXJnZXRfcGxhdGZvcm1gLCBgdGFyZ2V0X29zYCwgYHRhcmdldF9jcHVgLCBhbmQKK2Bpc19jbGFuZ2AuIFRoZSBkZWZhdWx0cyBmb3IgZWFjaCBjYW4gYmUgZm91bmQgaW4KK2BzdGFyYm9hcmQvYnVpbGQvY29uZmlnL0JVSUxEQ09ORklHLmduYC4gSWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdXNpbmcgYGduLnB5YCwKK2FsbCBvZiB0aGVzZSBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB1c2luZyBgZ24gYXJnc2Agb3IgYGduIGdlbmAgd2l0aCBgLS1hcmdzYC4KK0ZvciBleGFtcGxlLCB0aGUgZmlyc3QgY29tbWFuZCBiZWxvdyBtaWdodCBpbnN0ZWFkIGxvb2sgbGlrZQorYGduIGdlbiBvdXQvYm9iYm94LWFybWViX2RlYnVnIC0tYXJncz0ndGFyZ2V0X3BsYXRmb3JtPSJib2Jib3gtYXJtZWIiIGJ1aWxkX3R5cGU9ImRlYnVnIidgLgogCi1Zb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJ1biBneXAgd2l0aCB5b3VyIG5ldyBwb3J0LiBGcm9tIHlvdXIgYHNyYy9gIGRpcmVjdG9yeToKK1lvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gcnVuIEdOIHdpdGggeW91ciBuZXcgcG9ydC4gRnJvbSB5b3VyIHRoZSB0b3AgbGV2ZWwKK2RpcmVjdG9yeToKIAotICAgICQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLUMgZGVidWcgYm9iYm94LWFybWViCisgICAgJCBweXRob24gY29iYWx0L2J1aWxkL2duLnB5IC1jIGRlYnVnIC1wIGJvYmJveC1hcm1lYgogICAgICQgbmluamEgLUMgb3V0L2JvYmJveC1hcm1lYl9kZWJ1ZyBucGxiCiAKIFRoaXMgd2lsbCBhdHRlbXB0IHRvIGJ1aWxkIHRoZSAiTm8gUGxhdGZvcm0gTGVmdCBCZWhpbmQiIHRlc3Qgc3VpdGUgd2l0aCB5b3VyCiBuZXcgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9uLCBhbmQgeW91IGFyZSByZWFkeSB0byBzdGFydCBwb3J0aW5nIQogCi0jIyMjIEdOIEluc3RydWN0aW9ucwotCi1Gb2xsb3cgdGhlIGFib3ZlIGxpc3QsIGV4Y2VwdDoKLQotICAxLiBJZ25vcmUgdGhlIHN0ZXBzIGFib3V0IGBneXBfY29uZmlndXJhdGlvbi5weWAgYW5kIGBneXBfY29uZmlndXJhdGlvbi5neXBpYC4KLSAgMS4gVXBkYXRlIGBCVUlMRC5nbmAgaW5zdGVhZCBvZiBgc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGAuCi0gIDEuIEFsc28gaW4gYEJVSUxELmduYDoKLSAgICAgIDEuIFVwZGF0ZSB5b3VyIHRvb2xjaGFpbiBjb21tYW5kLWxpbmUgZmxhZ3MgYW5kIGxpYnJhcmllcywgZm9yIGFsbAotICAgICAgICAgY29uZmlndXJhdGlvbnMgYXMgd2VsbCBhcyBmb3IgZWFjaCBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24uCi0gICAgICAxLiBJbXBsZW1lbnQgZ2VuZXJpYyBjb21waWxlciBjb25maWdzIHN1Y2ggYXMgYHNiX3BlZGFudGljX3dhcm5pbmdzYAotICAgICAgICAgYW5kIGBydHRpYC4KLSAgICAgIDEuIElmIHlvdSdyZSBub3QgdXNpbmcgYSBwcmVkZWZpbmVkIHRvb2xjaGFpbiwgZGVmaW5lIG9uZS4KLSAgMS4gSW4gYGJ1aWxkY29uZmlnLmduaWA6Ci0gICAgICAxLiBJZiB5b3VyIHBsYXRmb3JtIGlzIExpbnV4LWJhc2VkLCBzZXQgYHRhcmdldF9vc18gPSAibGludXgiYC4KLSAgICAgIDEuIFNldCBgdGFyZ2V0X2NwdV9gIHRvIHlvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoZS5nLiBgYXJtYCwKLSAgICAgICAgIGB4NjRgLCBgeDg2YCkuCi0gICAgICAxLiBTZXQgdGhlIHRhcmdldCBhbmQgaG9zdCB0b29sY2hhaW5zLiBJZiB5b3UgZGVmaW5lZCBhIHRhcmdldAotICAgICAgICAgdG9vbGNoYWluIGluIGBCVUlMRC5nbmAsIHlvdSdsbCB3YW50IHRvIHNldCBpdCB0byB0aGF0LgotICAxLiBJbiBgY29uZmlndXJhdGlvbi5nbmlgLCBzZXQgcGxhdGZvcm0tc3BlY2lmaWMgZGVmYXVsdHMgZm9yIGFueQotICAgICB2YXJpYWJsZXMgdGhhdCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBmb3IgeW91ciBTdGFyYm9hcmQgcGxhdGZvcm0uICBZb3UKLSAgICAgY2FuIGZpbmQgYSBsaXN0IG9mIHN1Y2ggdmFyaWFibGVzIGF0IGAvL2NvYmFsdC9idWlsZC9jb25maWcvYmFzZS5nbmlgCi0gICAgIGFuZCBgLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL2Jhc2UuZ25pYC4KLQotCi1Zb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJ1biBHTiB3aXRoIHlvdXIgbmV3IHBvcnQuIEZyb20geW91ciBgc3JjL2AgZGlyZWN0b3J5OgotCi0gICAgJCBnbiBhcmdzIG91dC9ib2Jib3gtYXJtZWJfZGVidWcKLQotQW4gZWRpdG9yIHdpbGwgb3BlbiB1cC4gVHlwZSBpbnRvIHRoZSBlZGl0b3I6Ci0KLSAgICBjb2JhbHRfY29uZmlnID0gImRlYnVnIgotICAgIHRhcmdldF9wbGF0Zm9ybSA9ICJib2Jib3gtYXJtZWIiCi0KLVNhdmUgYW5kIGNsb3NlIHRoZSBlZGl0b3IuIFRoZW4gcnVuCi0KLSAgICAkIG5pbmphIC1DIG91dC9ib2Jib3gtYXJtZWJfZGVidWcgbnBsYgotCi1UaGlzIHdpbGwgYXR0ZW1wdCB0byBidWlsZCB0aGUgIk5vIFBsYXRmb3JtIExlZnQgQmVoaW5kIiB0ZXN0IHN1aXRlIHdpdGggeW91cgotbmV3IFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiwgYW5kIHlvdSBhcmUgcmVhZHkgdG8gc3RhcnQgcG9ydGluZyEKLQotCiAjIyBTdWdnZXN0ZWQgSW1wbGVtZW50YXRpb24gT3JkZXIKIAogV2hlbiBicmluZ2luZyB1cCBhIG5ldyBTdGFyYm9hcmQgcGxhdGZvcm0sIGl0IGlzIHN1Z2dlc3RlZCB0aGF0IHlvdSB0cnkgdG8gZ2V0CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvX2Vudi5weSBiL3N0YXJib2FyZC9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzJlYWJjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQoJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKSkKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FjY2Vzc2liaWxpdHkuaCBiL3N0YXJib2FyZC9hY2Nlc3NpYmlsaXR5LmgKaW5kZXggNDcwZGQ2NS4uNGE1YzJiYSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FjY2Vzc2liaWxpdHkuaAorKysgYi9zdGFyYm9hcmQvYWNjZXNzaWJpbGl0eS5oCkBAIC02Myw3ICs2Myw2IEBACiBTQl9FWFBPUlQgYm9vbCBTYkFjY2Vzc2liaWxpdHlHZXREaXNwbGF5U2V0dGluZ3MoCiAgICAgU2JBY2Nlc3NpYmlsaXR5RGlzcGxheVNldHRpbmdzKiBvdXRfc2V0dGluZ3MpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQogLy8gRW51bSBmb3IgcG9zc2libGUgY2xvc2VkIGNhcHRpb25pbmcgY2hhcmFjdGVyIGVkZ2Ugc3R5bGVzLgogdHlwZWRlZiBlbnVtIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25DaGFyYWN0ZXJFZGdlU3R5bGUgewogICBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbkNoYXJhY3RlckVkZ2VTdHlsZU5vbmUsCkBAIC0yMjQsOCArMjIzLDYgQEAKIC8vICAgIG9yIG9mZiAoZmFsc2UpLgogU0JfRVhQT1JUIGJvb2wgU2JBY2Nlc3NpYmlsaXR5U2V0Q2FwdGlvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKENBUFRJT05TKQotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gIC8vIGV4dGVybiAiQyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL0JVSUxELmduIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL0JVSUxELmduCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDk1YzEzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2Fway9CVUlMRC5nbgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1hY3Rpb24oImFwa19zb3VyY2VzIikgewotICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvdG91Y2gucHkiCi0gIHNvdXJjZXMgPSBbICJjb2JhbHQtZ3JhZGxlLnNoIiBdCi0gIG91dHB1dHMgPSBbICIkcm9vdF9vdXRfZGlyL2dyYWRsZS9hcGtfc291cmNlcy5zdGFtcCIgXQotICBhcmdzID0gcmViYXNlX3BhdGgob3V0cHV0cywgcm9vdF9idWlsZF9kaXIpCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBrLmd5cCBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcGsuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmU4ZjU0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcGsuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgVGhpcyB0YXJnZXQgZ2VuZXJhdGVzIGEgc3RhbXAgZmlsZSB0aGF0IHRoZSBwbGF0Zm9ybSBkZXBsb3kgYWN0aW9uIGNhbgotICAgICAgIyBkZXBlbmQgb24gdG8gcmUtcnVuIHRoZSBHcmFkbGUgYnVpbGQgb25seSB3aGVuIGFueSBmaWxlIHRoYXQncyBjaGVja2VkCi0gICAgICAjIGludG8gZ2l0IHdpdGhpbiB0aGUgJ2FwaycgZGlyZWN0b3J5IGNoYW5nZXMuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnYXBrX3NvdXJjZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdhcGtfc291cmNlcycsCi0gICAgICAgICAgJ2lucHV0cyc6IFsgJzwhQChnaXQgLUMgPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvYXBrIGxzLWZpbGVzKScgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsgJzwoUFJPRFVDVF9ESVIpL2dyYWRsZS9hcGtfc291cmNlcy5zdGFtcCcgXSwKLSAgICAgICAgICAnYWN0aW9uJzogWyAndG91Y2gnLCAnPEAoX291dHB1dHMpJyBdLAotICAgICAgICB9Ci0gICAgICBdCi0gICAgfQotICBdCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBrX3NvdXJjZXMuZ25pIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2Fwa19zb3VyY2VzLmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDM3OGVhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2Fwa19zb3VyY2VzLmduaQpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBUaGUgamF2YSBmaWxlcyB0aGF0IGFyZSBjb21waWxlZCBhbmQgcGFja2FnZWQgaW50byB0aGUgQ29iYWx0IGFway4KKyMgVGhpcyBsaXN0IGlzIG9ubHkgdXNlZCB0byB0ZWxsIEdOIHdoaWNoIGZpbGVzIGFyZSBpbmNsdWRlZC4gR3JhZGxlIHdpbGwKKyMgcGFja2FnZSBhbGwgZmlsZXMgdW5kZXIgLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwLgorYXBrX3NvdXJjZXMgPSBbCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL2FwcC9qYXZhL2Rldi9jb2JhbHQvYXBwL0NvYmFsdEFwcGxpY2F0aW9uLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9hcHAvamF2YS9kZXYvY29iYWx0L2FwcC9NYWluQWN0aXZpdHkuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2FjY291bnQvQWNjZXNzVG9rZW4uamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2FjY291bnQvTm9vcFVzZXJBdXRob3JpemVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9hY2NvdW50L1VzZXJBdXRob3JpemVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9hY2NvdW50L1VzZXJBdXRob3JpemVySW1wbC5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9BdWRpb1Blcm1pc3Npb25SZXF1ZXN0ZXIuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvQ29iYWx0QTExeUhlbHBlci5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9Db2JhbHRBY3Rpdml0eS5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9Db2JhbHRIdHRwSGVscGVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L0NvYmFsdFNlcnZpY2UuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvQ29iYWx0U3lzdGVtQ29uZmlnQ2hhbmdlUmVjZWl2ZXIuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvQ29iYWx0VGV4dFRvU3BlZWNoSGVscGVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L0Vycm9yRGlhbG9nLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L0tleWJvYXJkRWRpdG9yLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L0tleWJvYXJkSW5wdXRDb25uZWN0aW9uLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L01lZGlhUGxheWJhY2tTZXJ2aWNlLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L05ldHdvcmtTdGF0dXMuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvUGxhdGZvcm1FcnJvci5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9SZXNvdXJjZU92ZXJsYXkuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvU3RhcmJvYXJkQnJpZGdlLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9saWJyYXJpZXMvc2VydmljZXMvY2xpZW50bG9naW5mby9DbGllbnRMb2dJbmZvLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9saWJyYXJpZXMvc2VydmljZXMvY2xpZW50bG9naW5mby9DbGllbnRMb2dJbmZvTW9kdWxlLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9BcnR3b3JrTG9hZGVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9BdWRpb091dHB1dE1hbmFnZXIuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL0F1ZGlvVHJhY2tCcmlkZ2UuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL0NhcHRpb25TZXR0aW5ncy5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvQ29iYWx0TWVkaWFTZXNzaW9uLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9Mb2cuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhQ29kZWNCcmlkZ2UuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhQ29kZWNVdGlsLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYURybUJyaWRnZS5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvTWVkaWFJbWFnZS5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvVmlkZW9GcmFtZVJlbGVhc2VUaW1lSGVscGVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9WaWRlb1N1cmZhY2VUZXh0dXJlLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9WaWRlb1N1cmZhY2VWaWV3LmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9zdG9yYWdlL0NvYmFsdFN0b3JhZ2VMb2FkZXIuamF2YSIsCisgICIvL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L3N0b3JhZ2UvU3RvcmFnZVByb3RvLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC91dGlsL0Rpc3BsYXlVdGlsLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC91dGlsL0hvbGRlci5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvdXRpbC9Jc0VtdWxhdG9yLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC91dGlsL0xvZy5qYXZhIiwKKyAgIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvdXRpbC9TeXN0ZW1Qcm9wZXJ0aWVzSGVscGVyLmphdmEiLAorICAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC91dGlsL1VzZWRCeU5hdGl2ZS5qYXZhIiwKK10KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvQ29iYWx0QWN0aXZpdHkuamF2YSBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvQ29iYWx0QWN0aXZpdHkuamF2YQppbmRleCBkOTA4MmRhLi5hODU4ZWEzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L0NvYmFsdEFjdGl2aXR5LmphdmEKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9Db2JhbHRBY3Rpdml0eS5qYXZhCkBAIC0yNSw2ICsyNSw3IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UGFyZW50OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwpAQCAtMzMsNyArMzQsNiBAQAogaW1wb3J0IGRldi5jb2JhbHQudXRpbC5EaXNwbGF5VXRpbDsKIGltcG9ydCBkZXYuY29iYWx0LnV0aWwuTG9nOwogaW1wb3J0IGRldi5jb2JhbHQudXRpbC5Vc2VkQnlOYXRpdmU7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5UaW1lc3RhbXA7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtMTQzLDYgKzE0MywxMCBAQAogICAgIGlmIChWaWRlb1N1cmZhY2VWaWV3LmdldEN1cnJlbnRTdXJmYWNlKCkgIT0gbnVsbCkgewogICAgICAgZm9yY2VDcmVhdGVOZXdWaWRlb1N1cmZhY2VWaWV3ID0gdHJ1ZTsKICAgICB9CisKKyAgICAvLyBTZXQgdGhlIFN1cmZhY2VWaWV3IHRvIGZ1bGxzY3JlZW4uCisgICAgVmlldyByb290VmlldyA9IGdldFdpbmRvdygpLmdldERlY29yVmlldygpOworICAgIHNldFZpZGVvU3VyZmFjZUJvdW5kcygwLCAwLCByb290Vmlldy5nZXRXaWR0aCgpLCByb290Vmlldy5nZXRIZWlnaHQoKSk7CiAgIH0KIAogICBAT3ZlcnJpZGUKQEAgLTI5OCw2ICszMDIsMTAgQEAKICAgfQogCiAgIHB1YmxpYyB2b2lkIHNldFZpZGVvU3VyZmFjZUJvdW5kcyhmaW5hbCBpbnQgeCwgZmluYWwgaW50IHksIGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCkgeworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7CisgICAgICAvLyBUaGUgU3VyZmFjZVZpZXcgc2hvdWxkIGJlIGNvdmVyZWQgYnkgb3VyIFVJIGxheWVyIGluIHRoaXMgY2FzZS4KKyAgICAgIHJldHVybjsKKyAgICB9CiAgICAgcnVuT25VaVRocmVhZCgKICAgICAgICAgbmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9SZXNvdXJjZU92ZXJsYXkuamF2YSBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvUmVzb3VyY2VPdmVybGF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0YWJlYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvUmVzb3VyY2VPdmVybGF5LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIGRldi5jb2JhbHQuY29hdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGRldi5jb2JhbHQudXRpbC5Vc2VkQnlOYXRpdmU7CisKKy8qKgorICogQSBjbGFzcyBmb3IgbWFuYWdpbmcgdGhlIHJlc291cmNlIG92ZXJsYXlzIG9mIENvYmFsdC4gQ2xpZW50IGNhbiB0dXJuIG9uIGNlcnRhaW4gZmVhdHVyZSBieQorICogc2V0dGluZyB0aGUgcmVzb3VyY2Ugb3ZlcmxheS4KKyAqLworcHVibGljIGNsYXNzIFJlc291cmNlT3ZlcmxheSB7CisgIC8vIFRvIGZhY2lsaXRhdGUgbWFpbnRlbmFuY2UsIHRoZXNlIG1lbWJlciBuYW1lcyBzaG91bGQgbWF0Y2ggd2hhdCBpcyBpbiB0aGUKKyAgLy8gcmVzb3VyY2UgWE1MIGZpbGUuCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJNZW1iZXJOYW1lIikKKyAgQFVzZWRCeU5hdGl2ZQorICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzdXBwb3J0c19zcGhlcmljYWxfdmlkZW9zOworCisgIHB1YmxpYyBmaW5hbCBpbnQgbWF4X3ZpZGVvX2J1ZmZlcl9idWRnZXQ7CisKKyAgcHVibGljIFJlc291cmNlT3ZlcmxheShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAvLyBMb2FkIHRoZSB2YWx1ZXMgZm9yIGFsbCBPdmVybGF5IHZhcmlhYmxlcy4KKyAgICB0aGlzLnN1cHBvcnRzX3NwaGVyaWNhbF92aWRlb3MgPQorICAgICAgICBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLnN1cHBvcnRzX3NwaGVyaWNhbF92aWRlb3MpOworICAgIHRoaXMubWF4X3ZpZGVvX2J1ZmZlcl9idWRnZXQgPQorICAgICAgICBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoUi5pbnRlZ2VyLm1heF92aWRlb19idWZmZXJfYnVkZ2V0KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9TdGFyYm9hcmRCcmlkZ2UuamF2YSBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L2NvYXQvU3RhcmJvYXJkQnJpZGdlLmphdmEKaW5kZXggNDA4YWRhMC4uNjIxNjViMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvY29hdC9TdGFyYm9hcmRCcmlkZ2UuamF2YQorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9jb2F0L1N0YXJib2FyZEJyaWRnZS5qYXZhCkBAIC0zMiw2ICszMiw3IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllczsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2l6ZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2l6ZUY7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CkBAIC01MSw4ICs1MiwxNiBAQAogaW1wb3J0IGRldi5jb2JhbHQudXRpbC5Mb2c7CiBpbXBvcnQgZGV2LmNvYmFsdC51dGlsLlVzZWRCeU5hdGl2ZTsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CitpbXBvcnQgamF2YS5uZXQuSW50ZXJmYWNlQWRkcmVzczsKK2ltcG9ydCBqYXZhLm5ldC5OZXR3b3JrSW50ZXJmYWNlOworaW1wb3J0IGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CiAKIC8qKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVxdWlyZWQgSk5JIG1ldGhvZHMgY2FsbGVkIGJ5IHRoZSBTdGFyYm9hcmQgQysrIGNvZGUuICovCiBwdWJsaWMgY2xhc3MgU3RhcmJvYXJkQnJpZGdlIHsKQEAgLTcyLDYgKzgxLDcgQEAKICAgcHJpdmF0ZSBBdWRpb1Blcm1pc3Npb25SZXF1ZXN0ZXIgYXVkaW9QZXJtaXNzaW9uUmVxdWVzdGVyOwogICBwcml2YXRlIEtleWJvYXJkRWRpdG9yIGtleWJvYXJkRWRpdG9yOwogICBwcml2YXRlIE5ldHdvcmtTdGF0dXMgbmV0d29ya1N0YXR1czsKKyAgcHJpdmF0ZSBSZXNvdXJjZU92ZXJsYXkgcmVzb3VyY2VPdmVybGF5OwogCiAgIHN0YXRpYyB7CiAgICAgLy8gRXZlbiB0aG91Z2ggTmF0aXZlQWN0aXZpdHkgYWxyZWFkeSBsb2FkcyBvdXIgbGlicmFyeSBmcm9tIEMrKywKQEAgLTk3LDggKzEwNywxMyBAQAogICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBDb2JhbHRTZXJ2aWNlLkZhY3Rvcnk+IGNvYmFsdFNlcnZpY2VGYWN0b3JpZXMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIENvYmFsdFNlcnZpY2U+IGNvYmFsdFNlcnZpY2VzID0gbmV3IEhhc2hNYXA8PigpOwogCisgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbWVab25lIERFRkFVTFRfVElNRV9aT05FID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIkFtZXJpY2EvTG9zX0FuZ2VsZXMiKTsKICAgcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVOYW5vc2Vjb25kc1Blck1pY3Jvc2Vjb25kID0gMTAwMDsKIAorICBwcml2YXRlIFNldDxJbnRlZ2VyPiBzdXBwb3J0ZWRIZHJUeXBlc1NldCA9IG5ldyBIYXNoU2V0PEludGVnZXI+KCk7CisgIHByaXZhdGUgbG9uZyBzdXBwb3J0ZWRIZHJUeXBlc1NldFVwZGF0ZWRBdCA9IDA7CisgIHByaXZhdGUgZmluYWwgbG9uZyBzdXBwb3J0ZWRIZHJUeXBlc0NhY2hlVHRsTXMgPSAxMDAwOworCiAgIHB1YmxpYyBTdGFyYm9hcmRCcmlkZ2UoCiAgICAgICBDb250ZXh0IGFwcENvbnRleHQsCiAgICAgICBIb2xkZXI8QWN0aXZpdHk+IGFjdGl2aXR5SG9sZGVyLApAQCAtMTI0LDYgKzEzOSw3IEBACiAgICAgICAgIG5ldyBDb2JhbHRNZWRpYVNlc3Npb24oYXBwQ29udGV4dCwgYWN0aXZpdHlIb2xkZXIsIGF1ZGlvT3V0cHV0TWFuYWdlcik7CiAgICAgdGhpcy5hdWRpb1Blcm1pc3Npb25SZXF1ZXN0ZXIgPSBuZXcgQXVkaW9QZXJtaXNzaW9uUmVxdWVzdGVyKGFwcENvbnRleHQsIGFjdGl2aXR5SG9sZGVyKTsKICAgICB0aGlzLm5ldHdvcmtTdGF0dXMgPSBuZXcgTmV0d29ya1N0YXR1cyhhcHBDb250ZXh0KTsKKyAgICB0aGlzLnJlc291cmNlT3ZlcmxheSA9IG5ldyBSZXNvdXJjZU92ZXJsYXkoYXBwQ29udGV4dCk7CiAgIH0KIAogICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUluaXRpYWxpemUoKTsKQEAgLTM1NywxMyArMzczLDY4IEBACiAgICAgcmV0dXJuIGFwcENvbnRleHQuZ2V0Q2FjaGVEaXIoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKICAgfQogCisgIC8qKgorICAgKiBSZXR1cm5zIG5vbi1sb29wYmFjayBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzIGFuZCBpdHMgbmV0bWFzaywgb3IgbnVsbCBpZiBub25lLgorICAgKgorICAgKiA8cD5BIEphdmEgZnVuY3Rpb24gdG8gaGVscCBpbXBsZW1lbnQgU3RhcmJvYXJkJ3MgU2JTb2NrZXRHZXRMb2NhbEludGVyZmFjZUFkZHJlc3MuCisgICAqLworICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKyAgQFVzZWRCeU5hdGl2ZQorICBQYWlyPGJ5dGVbXSwgYnl0ZVtdPiBnZXRMb2NhbEludGVyZmFjZUFkZHJlc3NBbmROZXRtYXNrKGJvb2xlYW4gd2FudElQdjYpIHsKKyAgICB0cnkgeworICAgICAgRW51bWVyYXRpb248TmV0d29ya0ludGVyZmFjZT4gaXQgPSBOZXR3b3JrSW50ZXJmYWNlLmdldE5ldHdvcmtJbnRlcmZhY2VzKCk7CisKKyAgICAgIHdoaWxlIChpdC5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICBOZXR3b3JrSW50ZXJmYWNlIG5pID0gaXQubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKG5pLmlzTG9vcGJhY2soKSkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbmkuaXNVcCgpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5pLmlzUG9pbnRUb1BvaW50KCkpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSW50ZXJmYWNlQWRkcmVzcyBpYSA6IG5pLmdldEludGVyZmFjZUFkZHJlc3NlcygpKSB7CisgICAgICAgICAgYnl0ZVtdIGFkZHJlc3MgPSBpYS5nZXRBZGRyZXNzKCkuZ2V0QWRkcmVzcygpOworICAgICAgICAgIGJvb2xlYW4gaXNJUHY2ID0gKGFkZHJlc3MubGVuZ3RoID4gNCk7CisgICAgICAgICAgaWYgKGlzSVB2NiA9PSB3YW50SVB2NikgeworICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgbmV0d29yayBwcmVmaXggbGVuZ3RoIHRvIGEgbmV0d29yayBtYXNrLgorICAgICAgICAgICAgaW50IHByZWZpeCA9IGlhLmdldE5ldHdvcmtQcmVmaXhMZW5ndGgoKTsKKyAgICAgICAgICAgIGJ5dGVbXSBuZXRtYXNrID0gbmV3IGJ5dGVbYWRkcmVzcy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXRtYXNrLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgIGlmIChwcmVmaXggPT0gMCkgeworICAgICAgICAgICAgICAgIG5ldG1hc2tbaV0gPSAwOworICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZWZpeCA+PSA4KSB7CisgICAgICAgICAgICAgICAgbmV0bWFza1tpXSA9IChieXRlKSAweEZGOworICAgICAgICAgICAgICAgIHByZWZpeCAtPSA4OworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5ldG1hc2tbaV0gPSAoYnl0ZSkgKDB4RkYgPDwgKDggLSBwcmVmaXgpKTsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IFBhaXI8PihhZGRyZXNzLCBuZXRtYXNrKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGNhdGNoIChTb2NrZXRFeGNlcHRpb24gZXgpIHsKKyAgICAgIC8vIFRPRE8gc2hvdWxkIHdlIGhhdmUgYSBsb2dnaW5nIHN0b3J5IHRoYXQgc3RyaXBzIGxvZ3MgZm9yIHByb2R1Y3Rpb24/CisgICAgICBMb2cudyhUQUcsICJzYlNvY2tldEdldExvY2FsSW50ZXJmYWNlQWRkcmVzcyBleGNlcHRpb24iLCBleCk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIG51bGw7CisgIH0KKwogICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgQFVzZWRCeU5hdGl2ZQogICBDb2JhbHRUZXh0VG9TcGVlY2hIZWxwZXIgZ2V0VGV4dFRvU3BlZWNoSGVscGVyKCkgewogICAgIHJldHVybiB0dHNIZWxwZXI7CiAgIH0KIAotICAvKiogQHJldHVybiBBIG5ldyBDYXB0aW9uU2V0dGluZ3Mgb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgc3lzdGVtIGNhcHRpb24gc2V0dGluZ3MuICovCisgIC8qKgorICAgKiBAcmV0dXJuIEEgbmV3IENhcHRpb25TZXR0aW5ncyBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBzeXN0ZW0gY2FwdGlvbiBzZXR0aW5ncy4KKyAgICovCiAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICBAVXNlZEJ5TmF0aXZlCiAgIENhcHRpb25TZXR0aW5ncyBnZXRDYXB0aW9uU2V0dGluZ3MoKSB7CkBAIC0zODEsNiArNDUyLDE4IEBACiAKICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgIEBVc2VkQnlOYXRpdmUKKyAgU3RyaW5nIGdldFRpbWVab25lSWQoKSB7CisgICAgTG9jYWxlIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CisgICAgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZShsb2NhbGUpOworICAgIFRpbWVab25lIHRpbWVab25lID0gREVGQVVMVF9USU1FX1pPTkU7CisgICAgaWYgKGNhbGVuZGFyICE9IG51bGwpIHsKKyAgICAgIHRpbWVab25lID0gY2FsZW5kYXIuZ2V0VGltZVpvbmUoKTsKKyAgICB9CisgICAgcmV0dXJuIHRpbWVab25lLmdldElEKCk7CisgIH0KKworICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKyAgQFVzZWRCeU5hdGl2ZQogICBTaXplRiBnZXREaXNwbGF5RHBpKCkgewogICAgIHJldHVybiBEaXNwbGF5VXRpbC5nZXREaXNwbGF5RHBpKCk7CiAgIH0KQEAgLTM5MSw2ICs0NzQsMTIgQEAKICAgICByZXR1cm4gRGlzcGxheVV0aWwuZ2V0U3lzdGVtRGlzcGxheVNpemUoKTsKICAgfQogCisgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorICBAVXNlZEJ5TmF0aXZlCisgIHB1YmxpYyBSZXNvdXJjZU92ZXJsYXkgZ2V0UmVzb3VyY2VPdmVybGF5KCkgeworICAgIHJldHVybiByZXNvdXJjZU92ZXJsYXk7CisgIH0KKwogICBATnVsbGFibGUKICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN5c3RlbVByb3BlcnR5KFN0cmluZyBuYW1lKSB7CiAgICAgdHJ5IHsKQEAgLTQ4Niw3ICs1NzUsOSBAQAogICAgIHJldHVybiBhdWRpb01hbmFnZXIuaXNNaWNyb3Bob25lTXV0ZSgpOwogICB9CiAKLSAgLyoqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGFuIGFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kIGl0J3Mgb24gYW4gd2lyZWxlc3MgbmV0d29yay4gKi8KKyAgLyoqCisgICAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGFuIGFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb24gYW5kIGl0J3Mgb24gYW4gd2lyZWxlc3MgbmV0d29yay4KKyAgICovCiAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICBAVXNlZEJ5TmF0aXZlCiAgIGJvb2xlYW4gaXNDdXJyZW50TmV0d29ya1dpcmVsZXNzKCkgewpAQCAtNjQwLDYgKzczMSwzNiBAQAogICAgIH0KICAgfQogCisgIGxvbmcgc3VwcG9ydGVkSGRyVHlwZXNTZXRVcGRhdGVkQXROczsKKworICBwcml2YXRlIHZvaWQgcmVmcmVzaEhkclR5cGVzQ2FjaGVJZk5lY2Vzc2FyeSgpIHsKKyAgICBpZiAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdXBwb3J0ZWRIZHJUeXBlc1NldFVwZGF0ZWRBdCA8IHN1cHBvcnRlZEhkclR5cGVzQ2FjaGVUdGxNcykgeworICAgICAgLy8gQ2FjaGUgaXMgdXAgdG8gZGF0ZS4KKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3VwcG9ydGVkSGRyVHlwZXNTZXQuY2xlYXIoKTsKKyAgICBzdXBwb3J0ZWRIZHJUeXBlc1NldFVwZGF0ZWRBdCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCisgICAgRGlzcGxheSBkZWZhdWx0RGlzcGxheSA9IERpc3BsYXlVdGlsLmdldERlZmF1bHREaXNwbGF5KCk7CisgICAgaWYgKGRlZmF1bHREaXNwbGF5ID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEaXNwbGF5LkhkckNhcGFiaWxpdGllcyBoZHJDYXBhYmlsaXRpZXMgPSBkZWZhdWx0RGlzcGxheS5nZXRIZHJDYXBhYmlsaXRpZXMoKTsKKyAgICBpZiAoaGRyQ2FwYWJpbGl0aWVzID09IG51bGwpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnRbXSBzdXBwb3J0ZWRIZHJUeXBlcyA9IGhkckNhcGFiaWxpdGllcy5nZXRTdXBwb3J0ZWRIZHJUeXBlcygpOworICAgIGlmIChzdXBwb3J0ZWRIZHJUeXBlcyA9PSBudWxsKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChpbnQgc3VwcG9ydGVkVHlwZSA6IHN1cHBvcnRlZEhkclR5cGVzKSB7CisgICAgICBzdXBwb3J0ZWRIZHJUeXBlc1NldC5hZGQoc3VwcG9ydGVkVHlwZSk7CisgICAgfQorICB9CisKICAgLyoqCiAgICAqIENoZWNrIGlmIGhkclR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGRlZmF1bHQgZGlzcGxheS4gU2VlCiAgICAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3ZpZXcvRGlzcGxheS5IZHJDYXBhYmlsaXRpZXMuaHRtbCBmb3IgdmFsaWQKQEAgLTY1MywyNyArNzc0LDEwIEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgRGlzcGxheSBkZWZhdWx0RGlzcGxheSA9IERpc3BsYXlVdGlsLmdldERlZmF1bHREaXNwbGF5KCk7Ci0gICAgaWYgKGRlZmF1bHREaXNwbGF5ID09IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgIHJlZnJlc2hIZHJUeXBlc0NhY2hlSWZOZWNlc3NhcnkoKTsKKyAgICAgIHJldHVybiBzdXBwb3J0ZWRIZHJUeXBlc1NldC5jb250YWlucyhoZHJUeXBlKTsKICAgICB9Ci0KLSAgICBEaXNwbGF5LkhkckNhcGFiaWxpdGllcyBoZHJDYXBhYmlsaXRpZXMgPSBkZWZhdWx0RGlzcGxheS5nZXRIZHJDYXBhYmlsaXRpZXMoKTsKLSAgICBpZiAoaGRyQ2FwYWJpbGl0aWVzID09IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnRbXSBzdXBwb3J0ZWRIZHJUeXBlcyA9IGhkckNhcGFiaWxpdGllcy5nZXRTdXBwb3J0ZWRIZHJUeXBlcygpOwotICAgIGlmIChzdXBwb3J0ZWRIZHJUeXBlcyA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgc3VwcG9ydGVkVHlwZSA6IHN1cHBvcnRlZEhkclR5cGVzKSB7Ci0gICAgICBpZiAoc3VwcG9ydGVkVHlwZSA9PSBoZHJUeXBlKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAogICAvKiogUmV0dXJuIHRoZSBDb2JhbHRNZWRpYVNlc3Npb24uICovCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjQnJpZGdlLmphdmEgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjQnJpZGdlLmphdmEKaW5kZXggNGRkNTY3NC4uOTAxMmRmMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvTWVkaWFDb2RlY0JyaWRnZS5qYXZhCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhQ29kZWNCcmlkZ2UuamF2YQpAQCAtNTg4LDYgKzU4OCw3IEBACiAgICAgICBTdHJpbmcgbWltZSwKICAgICAgIGJvb2xlYW4gbXVzdFN1cHBvcnRTZWN1cmUsCiAgICAgICBib29sZWFuIG11c3RTdXBwb3J0U29mdHdhcmVDb2RlYywKKyAgICAgIGJvb2xlYW4gZm9yY2VJbXByb3ZlZFN1cHBvcnRDaGVjaywKICAgICAgIGludCB3aWR0aCwKICAgICAgIGludCBoZWlnaHQsCiAgICAgICBpbnQgZnBzLApAQCAtNjA5LDEwICs2MTAsMTIgQEAKICAgICAgICAgICAgIG11c3RTdXBwb3J0SGRyLAogICAgICAgICAgICAgbXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjLAogICAgICAgICAgICAgbXVzdFN1cHBvcnRUdW5uZWxlZCwKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDApOworICAgICAgICAgICAgZm9yY2VJbXByb3ZlZFN1cHBvcnRDaGVjaywKKyAgICAgICAgICAgIC0xIC8qIGRlY29kZXJDYWNoZVR0bE1zICovLAorICAgICAgICAgICAgMCAvKiBmcmFtZVdpZHRoICovLAorICAgICAgICAgICAgMCAvKiBmcmFtZUhlaWdodCAqLywKKyAgICAgICAgICAgIDAgLyogYml0cmF0ZSAqLywKKyAgICAgICAgICAgIDAgLyogZnBzICovKTsKICAgICBpZiAoZmluZFZpZGVvRGVjb2RlclJlc3VsdC5uYW1lLmVxdWFscygiIikgJiYgbXVzdFN1cHBvcnRIZHIpIHsKICAgICAgIC8vIE9uIHNlY29uZCBwYXNzLCBmb3JnZXQgSERSLgogICAgICAgZmluZFZpZGVvRGVjb2RlclJlc3VsdCA9CkBAIC02MjIsMTAgKzYyNSwxMiBAQAogICAgICAgICAgICAgICBmYWxzZSAvKiBtdXN0U3VwcG9ydEhkciAqLywKICAgICAgICAgICAgICAgbXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjLAogICAgICAgICAgICAgICBtdXN0U3VwcG9ydFR1bm5lbGVkLAotICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgICAgZm9yY2VJbXByb3ZlZFN1cHBvcnRDaGVjaywKKyAgICAgICAgICAgICAgLTEgLyogZGVjb2RlckNhY2hlVHRsTXMgKi8sCisgICAgICAgICAgICAgIDAgLyogZnJhbWVXaWR0aCAqLywKKyAgICAgICAgICAgICAgMCAvKiBmcmFtZUhlaWdodCAqLywKKyAgICAgICAgICAgICAgMCAvKiBiaXRyYXRlICovLAorICAgICAgICAgICAgICAwIC8qIGZwcyAqLyk7CiAgICAgfQogICAgIHRyeSB7CiAgICAgICBTdHJpbmcgZGVjb2Rlck5hbWUgPSBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0Lm5hbWU7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjVXRpbC5qYXZhIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvTWVkaWFDb2RlY1V0aWwuamF2YQppbmRleCBlMjYzMmRkLi5iZDE0NjFlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjVXRpbC5qYXZhCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhQ29kZWNVdGlsLmphdmEKQEAgLTQzLDcgKzQzLDYgQEAKICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IHZwOUFsbG93TGlzdCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgLy8gQW4gYWxsb3cgbGlzdCBvZiBzb2Z0d2FyZSBjb2RlYyBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkLgogICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBzb2Z0d2FyZUNvZGVjQWxsb3dMaXN0ID0gbmV3IEhhc2hTZXQ8PigpOwotCiAgIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIHJlcG9ydCB2cDkgY29kZWNzIGFzIHN1cHBvcnRlZCBvciBub3QuICBXaWxsIGJlIHNldAogICAvLyBiYXNlZCBvbiB3aGV0aGVyIHZwOUFsbG93TGlzdCBjb250YWlucyBvdXIgYnJhbmQvbW9kZWwuICBJZiB0aGlzIGlzIHNldAogICAvLyB0byB0cnVlLCB0aGVuIHZpZGVvQ29kZWNEZW55TGlzdCB3aWxsIGJlIGlnbm9yZWQuCkBAIC0zOTcsNiArMzk2LDggQEAKICAgICAgIGJvb2xlYW4gbXVzdFN1cHBvcnRTZWN1cmUsCiAgICAgICBib29sZWFuIG11c3RTdXBwb3J0SGRyLAogICAgICAgYm9vbGVhbiBtdXN0U3VwcG9ydFR1bm5lbE1vZGUsCisgICAgICBib29sZWFuIGZvcmNlSW1wcm92ZWRTdXBwb3J0Q2hlY2ssCisgICAgICBpbnQgZGVjb2RlckNhY2hlVHRsTXMsCiAgICAgICBpbnQgZnJhbWVXaWR0aCwKICAgICAgIGludCBmcmFtZUhlaWdodCwKICAgICAgIGludCBiaXRyYXRlLApAQCAtNDA4LDEyICs0MDksMTMgQEAKICAgICAgICAgICAgIG11c3RTdXBwb3J0SGRyLAogICAgICAgICAgICAgZmFsc2UgLyogbXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjICovLAogICAgICAgICAgICAgbXVzdFN1cHBvcnRUdW5uZWxNb2RlLAorICAgICAgICAgICAgZm9yY2VJbXByb3ZlZFN1cHBvcnRDaGVjaywKKyAgICAgICAgICAgIGRlY29kZXJDYWNoZVR0bE1zLAogICAgICAgICAgICAgZnJhbWVXaWR0aCwKICAgICAgICAgICAgIGZyYW1lSGVpZ2h0LAogICAgICAgICAgICAgYml0cmF0ZSwKICAgICAgICAgICAgIGZwcyk7Ci0gICAgcmV0dXJuICFmaW5kVmlkZW9EZWNvZGVyUmVzdWx0Lm5hbWUuZXF1YWxzKCIiKQotICAgICAgICAmJiAoIW11c3RTdXBwb3J0SGRyIHx8IGlzSGRyQ2FwYWJsZVZpZGVvRGVjb2RlcihtaW1lVHlwZSwgZmluZFZpZGVvRGVjb2RlclJlc3VsdCkpOworICAgIHJldHVybiAhZmluZFZpZGVvRGVjb2RlclJlc3VsdC5uYW1lLmlzRW1wdHkoKTsKICAgfQogCiAgIC8qKgpAQCAtNDI3LDEzICs0MjksOSBAQAogICAgIHJldHVybiAhZmluZEF1ZGlvRGVjb2RlcihtaW1lVHlwZSwgYml0cmF0ZSwgbXVzdFN1cHBvcnRUdW5uZWxNb2RlKS5lcXVhbHMoIiIpOwogICB9CiAKLSAgLyoqCi0gICAqIERldGVybWluZSB3aGV0aGVyIHRoZSBzeXN0ZW0gaGFzIGEgZGVjb2RlciBjYXBhYmxlIG9mIHBsYXlpbmcgSERSLiBDdXJyZW50bHkgVlA5IGFuZCBBVjEgYXJlCi0gICAqIEhEUiBzdXBwb3J0ZWQgY29kZWNzCi0gICAqLwotICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgQFVzZWRCeU5hdGl2ZQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzSGRyQ2FwYWJsZVZpZGVvRGVjb2RlcihTdHJpbmcgbWltZVR5cGUpIHsKKyAgLyoqIERldGVybWluZSB3aGV0aGVyIGZpbmRWaWRlb0RlY29kZXJSZXN1bHQgaXMgY2FwYWJsZSBvZiBwbGF5aW5nIEhEUi4gKi8KKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSGRyQ2FwYWJsZVZpZGVvRGVjb2RlcigKKyAgICAgIFN0cmluZyBtaW1lVHlwZSwgRmluZFZpZGVvRGVjb2RlclJlc3VsdCBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0KSB7CiAgICAgLy8gVlA5UHJvZmlsZSogdmFsdWVzIHdlcmUgbm90IGFkZGVkIHVudGlsIEFQSSBsZXZlbCAyNC4gIFNlZQogICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL21lZGlhL01lZGlhQ29kZWNJbmZvLkNvZGVjUHJvZmlsZUxldmVsLmh0bWwuCiAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IDI0KSB7CkBAIC00NDUsMTQgKzQ0Myw2IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgRmluZFZpZGVvRGVjb2RlclJlc3VsdCBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0ID0KLSAgICAgICAgZmluZFZpZGVvRGVjb2RlcihtaW1lVHlwZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0gICAgcmV0dXJuIGlzSGRyQ2FwYWJsZVZpZGVvRGVjb2RlcihtaW1lVHlwZSwgZmluZFZpZGVvRGVjb2RlclJlc3VsdCk7Ci0gIH0KLQotICAvKiogRGV0ZXJtaW5lIHdoZXRoZXIgZmluZFZpZGVvRGVjb2RlclJlc3VsdCBpcyBjYXBhYmxlIG9mIHBsYXlpbmcgSERSICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hkckNhcGFibGVWaWRlb0RlY29kZXIoCi0gICAgICBTdHJpbmcgbWltZVR5cGUsIEZpbmRWaWRlb0RlY29kZXJSZXN1bHQgZmluZFZpZGVvRGVjb2RlclJlc3VsdCkgewogICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNvZGVjQ2FwYWJpbGl0aWVzID0gZmluZFZpZGVvRGVjb2RlclJlc3VsdC5jb2RlY0NhcGFiaWxpdGllczsKICAgICBpZiAoY29kZWNDYXBhYmlsaXRpZXMgPT0gbnVsbCkgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDc4LDggKzQ2OCwxMSBAQAogICB9CiAKICAgLyoqCi0gICAqIFRoZSBzYW1lIGFzIGhhc1ZpZGVvRGVjb2RlckZvciwgb25seSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZpZGVvIGRlY29kZXIgaWYgaXQgaXMgZm91bmQsIGFuZAotICAgKiAiIiBvdGhlcndpc2UuCisgICAqIFRoZSBzYW1lIGFzIGhhc1ZpZGVvRGVjb2RlckZvciwgcmV0dXJucyBhIEZpbmRWaWRlb0RlY29kZXJSZXN1bHQgY29uc3RydWN0ZWQgZnJvbSB0aGUgdmlkZW8KKyAgICogZGVjb2RlciBpZiBpdCBpcyBmb3VuZCwgb3IgYW4gZW1wdHkgaW5zdGFuY2Ugb3RoZXJ3aXNlLgorICAgKgorICAgKiA8cD5OT1RFOiBUaGlzIGNvZGUgcGF0aCBpcyBjYWxsZWQgcmVwZWF0ZWRseSBieSB0aGUgcGxheWVyIHRvIGRldGVybWluZSB0aGUgZGVjb2RpbmcKKyAgICogY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UuIFRvIGVuc3VyZSBzcGVlZHkgcGxheWJhY2sgdGhlIGNvZGUgYmVsb3cgc2hvdWxkIGJlIGtlcHQgcGVyZm9ybWFudC4KICAgICovCiAgIHB1YmxpYyBzdGF0aWMgRmluZFZpZGVvRGVjb2RlclJlc3VsdCBmaW5kVmlkZW9EZWNvZGVyKAogICAgICAgU3RyaW5nIG1pbWVUeXBlLApAQCAtNDg3LDE2ICs0ODAsMTggQEAKICAgICAgIGJvb2xlYW4gbXVzdFN1cHBvcnRIZHIsCiAgICAgICBib29sZWFuIG11c3RTdXBwb3J0U29mdHdhcmVDb2RlYywKICAgICAgIGJvb2xlYW4gbXVzdFN1cHBvcnRUdW5uZWxNb2RlLAorICAgICAgYm9vbGVhbiBmb3JjZUltcHJvdmVkU3VwcG9ydENoZWNrLAorICAgICAgaW50IGRlY29kZXJDYWNoZVR0bE1zLAogICAgICAgaW50IGZyYW1lV2lkdGgsCiAgICAgICBpbnQgZnJhbWVIZWlnaHQsCiAgICAgICBpbnQgYml0cmF0ZSwKICAgICAgIGludCBmcHMpIHsKLSAgICBMb2cudigKLSAgICAgICAgVEFHLAorICAgIFN0cmluZyBkZWNvZGVySW5mbyA9CiAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAiU2VhcmNoaW5nIGZvciB2aWRlbyBkZWNvZGVyIHdpdGggcGFyYW1ldGVycyBtaW1lVHlwZTogJXMsIHNlY3VyZTogJWIsIGZyYW1lV2lkdGg6ICVkLCIKLSAgICAgICAgICAgICAgICArICIgZnJhbWVIZWlnaHQ6ICVkLCBiaXRyYXRlOiAlZCwgZnBzOiAlZCwgbXVzdFN1cHBvcnRIZHI6ICViLCIKLSAgICAgICAgICAgICAgICArICIgbXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjOiAlYiwgbXVzdFN1cHBvcnRUdW5uZWxNb2RlOiAlYiIsCisgICAgICAgICAgICAiU2VhcmNoaW5nIGZvciB2aWRlbyBkZWNvZGVyIHdpdGggcGFyYW1ldGVycyBtaW1lVHlwZTogJXMsIHNlY3VyZTogJWIsIGZyYW1lV2lkdGg6IgorICAgICAgICAgICAgICAgICsgIiAlZCwgZnJhbWVIZWlnaHQ6ICVkLCBiaXRyYXRlOiAlZCwgZnBzOiAlZCwgbXVzdFN1cHBvcnRIZHI6ICViLCIKKyAgICAgICAgICAgICAgICArICIgbXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjOiAlYiwgbXVzdFN1cHBvcnRUdW5uZWxNb2RlOiAlYiwiCisgICAgICAgICAgICAgICAgKyAiIGZvcmNlSW1wcm92ZWRTdXBwb3J0Q2hlY2s6ICViIiwKICAgICAgICAgICAgIG1pbWVUeXBlLAogICAgICAgICAgICAgbXVzdFN1cHBvcnRTZWN1cmUsCiAgICAgICAgICAgICBmcmFtZVdpZHRoLApAQCAtNTA1LDE5NSArNTAwLDE4MiBAQAogICAgICAgICAgICAgZnBzLAogICAgICAgICAgICAgbXVzdFN1cHBvcnRIZHIsCiAgICAgICAgICAgICBtdXN0U3VwcG9ydFNvZnR3YXJlQ29kZWMsCi0gICAgICAgICAgICBtdXN0U3VwcG9ydFR1bm5lbE1vZGUpKTsKLSAgICBMb2cudigKLSAgICAgICAgVEFHLAorICAgICAgICAgICAgbXVzdFN1cHBvcnRUdW5uZWxNb2RlLAorICAgICAgICAgICAgZm9yY2VJbXByb3ZlZFN1cHBvcnRDaGVjayk7CisgICAgTG9nLnYoVEFHLCBkZWNvZGVySW5mbyk7CisgICAgU3RyaW5nIGRldmljZUluZm8gPQogICAgICAgICBTdHJpbmcuZm9ybWF0KAogICAgICAgICAgICAgImJyYW5kOiAlcywgbW9kZWw6ICVzLCB2ZXJzaW9uOiAlcywgQVBJIGxldmVsOiAlZCwgaXNWcDlBbGxvd0xpc3RlZDogJWIiLAogICAgICAgICAgICAgQnVpbGQuQlJBTkQsCiAgICAgICAgICAgICBCdWlsZC5NT0RFTCwKICAgICAgICAgICAgIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSwKICAgICAgICAgICAgIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCwKLSAgICAgICAgICAgIGlzVnA5QWxsb3dMaXN0ZWQpKTsKKyAgICAgICAgICAgIGlzVnA5QWxsb3dMaXN0ZWQpOworICAgIExvZy52KFRBRywgZGV2aWNlSW5mbyk7CiAKLSAgICAvLyBOb3RlOiBNZWRpYUNvZGVjTGlzdCBpcyBzb3J0ZWQgYnkgdGhlIGZyYW1ld29yayBzdWNoIHRoYXQgdGhlIGJlc3QgZGVjb2RlcnMgY29tZSBmaXJzdC4KLSAgICBmb3IgKE1lZGlhQ29kZWNJbmZvIGluZm8gOiBuZXcgTWVkaWFDb2RlY0xpc3QoTWVkaWFDb2RlY0xpc3QuQUxMX0NPREVDUykuZ2V0Q29kZWNJbmZvcygpKSB7Ci0gICAgICBpZiAoaW5mby5pc0VuY29kZXIoKSkgeworICAgIGZvciAoVmlkZW9EZWNvZGVyQ2FjaGUuQ2FjaGVkRGVjb2RlciBkZWNvZGVyIDoKKyAgICAgICAgVmlkZW9EZWNvZGVyQ2FjaGUuZ2V0Q2FjaGVkRGVjb2RlcnMobWltZVR5cGUsIGRlY29kZXJDYWNoZVR0bE1zKSkgeworICAgICAgU3RyaW5nIG5hbWUgPSBkZWNvZGVyLmluZm8uZ2V0TmFtZSgpOworICAgICAgaWYgKG11c3RTdXBwb3J0U29mdHdhcmVDb2RlYyAmJiAhc29mdHdhcmVDb2RlY0FsbG93TGlzdC5jb250YWlucyhuYW1lKSkgeworICAgICAgICBMb2cudihUQUcsICJSZWplY3RpbmcgIiArIG5hbWUgKyAiLCByZWFzb246IHJlcXVpcmUgc29mdHdhcmUgY29kZWMiKTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9Ci0gICAgICBmb3IgKFN0cmluZyBzdXBwb3J0ZWRUeXBlIDogaW5mby5nZXRTdXBwb3J0ZWRUeXBlcygpKSB7Ci0gICAgICAgIGlmICghc3VwcG9ydGVkVHlwZS5lcXVhbHNJZ25vcmVDYXNlKG1pbWVUeXBlKSkgeworICAgICAgaWYgKCFpc1ZwOUFsbG93TGlzdGVkICYmIHZpZGVvQ29kZWNEZW55TGlzdC5jb250YWlucyhuYW1lKSkgeworICAgICAgICBMb2cudihUQUcsICJSZWplY3RpbmcgIiArIG5hbWUgKyAiLCByZWFzb246IGNvZGVjIGlzIG9uIGRlbnkgbGlzdCIpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLy8gTWVkaWFDb2RlY0xpc3QgaXMgc3VwcG9zZWQgdG8gZmVlZCB1cyBuYW1lcyBvZiBkZWNvZGVycyB0aGF0IGRvIE5PVCBlbmQgaW4gIi5zZWN1cmUiLiAgV2UKKyAgICAgIC8vIGFyZSB0aGVuIHN1cHBvc2VkIHRvIGNoZWNrIGlmIEZFQVRVUkVfU2VjdXJlUGxheWJhY2sgaXMgc3VwcG9ydGVkLCBhbmQgaWYgaXQgaXMgYW5kIHdlCisgICAgICAvLyB3YW50IGEgc2VjdXJlIGNvZGVjLCB3ZSBhcHBlbmQgIi5zZWN1cmUiIG91cnNlbHZlcywgYW5kIHRoZW4gcGFzcyB0aGF0IHRvCisgICAgICAvLyBNZWRpYUNvZGVjLmNyZWF0ZURlY29kZXJCeU5hbWUuICBTb21lIGRldmljZXMsIGRvIG5vdCBmb2xsb3cgdGhpcyBzcGVjLCBhbmQgc2hvdyB1cworICAgICAgLy8gZGVjb2RlcnMgdGhhdCBlbmQgaW4gIi5zZWN1cmUiLiAgRW1waXJpY2FsbHksIEZFQVRVUkVfU2VjdXJlUGxheWJhY2sgaGFzIHN0aWxsIGJlZW4KKyAgICAgIC8vIGNvcnJlY3Qgd2hlbiB0aGlzIGhhcHBlbnMuCisgICAgICBpZiAobmFtZS5lbmRzV2l0aChTRUNVUkVfREVDT0RFUl9TVUZGSVgpKSB7CisgICAgICAgIC8vIElmIHdlIGRvbid0IHdhbnQgYSBzZWN1cmUgZGVjb2RlciwgdGhlbiBkb24ndCBib3RoZXIgbWVzc2luZyBhcm91bmQgd2l0aCB0aGlzIHRoaW5nLgorICAgICAgICBpZiAoIW11c3RTdXBwb3J0U2VjdXJlKSB7CisgICAgICAgICAgTG9nLnYoVEFHLCAiUmVqZWN0aW5nICIgKyBuYW1lICsgIiwgcmVhc29uOiB3YW50ICFzZWN1cmUgZGVjb2RlciBhbmQgZW5kcyB3aXRoIC5zZWN1cmUiKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgbmFtZSA9IGluZm8uZ2V0TmFtZSgpOwotICAgICAgICBpZiAobXVzdFN1cHBvcnRTb2Z0d2FyZUNvZGVjICYmICFzb2Z0d2FyZUNvZGVjQWxsb3dMaXN0LmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KCJSZWplY3RpbmcgJXMsIHJlYXNvbjogcmVxdWlyZSBzb2Z0d2FyZSBjb2RlYyIsIG5hbWUpKTsKLSAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gSWYgd2Ugd2FudCBhIHNlY3VyZSBkZWNvZGVyLCB0aGVuIG1ha2Ugc3VyZSB0aGUgdmVyc2lvbiB3aXRob3V0ICIuc2VjdXJlIiBpc24ndAorICAgICAgICAvLyBkZW55bGlzdGVkLgorICAgICAgICBTdHJpbmcgbmFtZVdpdGhvdXRTZWN1cmVTdWZmaXggPQorICAgICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGgoKSAtIFNFQ1VSRV9ERUNPREVSX1NVRkZJWC5sZW5ndGgoKSk7CisgICAgICAgIGlmICghaXNWcDlBbGxvd0xpc3RlZCAmJiB2aWRlb0NvZGVjRGVueUxpc3QuY29udGFpbnMobmFtZVdpdGhvdXRTZWN1cmVTdWZmaXgpKSB7CisgICAgICAgICAgTG9nLnYoVEFHLCAiUmVqZWN0aW5nICIgKyBuYW1lICsgIiwgcmVhc29uOiBkZW55bGlzdGVkIHNlY3VyZSBkZWNvZGVyIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFpc1ZwOUFsbG93TGlzdGVkICYmIHZpZGVvQ29kZWNEZW55TGlzdC5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdCgiUmVqZWN0aW5nICVzLCByZWFzb246IGNvZGVjIGlzIG9uIGRlbnkgbGlzdCIsIG5hbWUpKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBNZWRpYUNvZGVjTGlzdCBpcyBzdXBwb3NlZCB0byBmZWVkIHVzIG5hbWVzIG9mIGRlY29kZXJzIHRoYXQgZG8gTk9UIGVuZCBpbiAiLnNlY3VyZSIuICBXZQotICAgICAgICAvLyBhcmUgdGhlbiBzdXBwb3NlZCB0byBjaGVjayBpZiBGRUFUVVJFX1NlY3VyZVBsYXliYWNrIGlzIHN1cHBvcnRlZCwgYW5kIGl0IGlmIGlzIGFuZCB3ZQotICAgICAgICAvLyB3YW50IGEgc2VjdXJlIGNvZGVjLCB3ZSBhcHBlbmQgIi5zZWN1cmUiIG91cnNlbHZlcywgYW5kIHRoZW4gcGFzcyB0aGF0IHRvCi0gICAgICAgIC8vIE1lZGlhQ29kZWMuY3JlYXRlRGVjb2RlckJ5TmFtZS4gIFNvbWUgZGV2aWNlcywgZG8gbm90IGZvbGxvdyB0aGlzIHNwZWMsIGFuZCBzaG93IHVzCi0gICAgICAgIC8vIGRlY29kZXJzIHRoYXQgZW5kIGluICIuc2VjdXJlIi4gIEVtcGlyaWNhbGx5LCBGRUFUVVJFX1NlY3VyZVBsYXliYWNrIGhhcyBzdGlsbCBiZWVuCi0gICAgICAgIC8vIGNvcnJlY3Qgd2hlbiB0aGlzIGhhcHBlbnMuCi0gICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFNFQ1VSRV9ERUNPREVSX1NVRkZJWCkpIHsKLSAgICAgICAgICAvLyBJZiB3ZSBkb24ndCB3YW50IGEgc2VjdXJlIGRlY29kZXIsIHRoZW4gZG9uJ3QgYm90aGVyIG1lc3NpbmcgYXJvdW5kIHdpdGggdGhpcyB0aGluZy4KLSAgICAgICAgICBpZiAoIW11c3RTdXBwb3J0U2VjdXJlKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0gIlJlamVjdGluZyAlcywgcmVhc29uOiB3YW50ICFzZWN1cmUgZGVjb2RlciBhbmQgZW5kcyB3aXRoIC5zZWN1cmUiOwotICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSkpOworICAgICAgfQorCisgICAgICBib29sZWFuIHJlcXVpcmVzU2VjdXJlUGxheWJhY2sgPQorICAgICAgICAgIGRlY29kZXIuY29kZWNDYXBhYmlsaXRpZXMuaXNGZWF0dXJlUmVxdWlyZWQoCisgICAgICAgICAgICAgIE1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzLkZFQVRVUkVfU2VjdXJlUGxheWJhY2spOworICAgICAgYm9vbGVhbiBzdXBwb3J0c1NlY3VyZVBsYXliYWNrID0KKyAgICAgICAgICBkZWNvZGVyLmNvZGVjQ2FwYWJpbGl0aWVzLmlzRmVhdHVyZVN1cHBvcnRlZCgKKyAgICAgICAgICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuRkVBVFVSRV9TZWN1cmVQbGF5YmFjayk7CisgICAgICBpZiAobXVzdFN1cHBvcnRTZWN1cmUgJiYgc3VwcG9ydHNTZWN1cmVQbGF5YmFjaworICAgICAgICAgIHx8ICFtdXN0U3VwcG9ydFNlY3VyZSAmJiByZXF1aXJlc1NlY3VyZVBsYXliYWNrKSB7CisgICAgICAgIFN0cmluZyBtZXNzYWdlID0KKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgIlJlamVjdGluZyAlcywgcmVhc29uOiBzZWN1cmUgZGVjb2RlciByZXF1ZXN0ZWQ6ICViLCAiCisgICAgICAgICAgICAgICAgICAgICsgImNvZGVjIEZFQVRVUkVfU2VjdXJlUGxheWJhY2sgc3VwcG9ydGVkOiAlYiwgcmVxdWlyZWQ6ICViIiwKKyAgICAgICAgICAgICAgICBuYW1lLCBtdXN0U3VwcG9ydFNlY3VyZSwgc3VwcG9ydHNTZWN1cmVQbGF5YmFjaywgcmVxdWlyZXNTZWN1cmVQbGF5YmFjayk7CisgICAgICAgIExvZy52KFRBRywgbWVzc2FnZSk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBib29sZWFuIHJlcXVpcmVzVHVubmVsZWRQbGF5YmFjayA9CisgICAgICAgICAgZGVjb2Rlci5jb2RlY0NhcGFiaWxpdGllcy5pc0ZlYXR1cmVSZXF1aXJlZCgKKyAgICAgICAgICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuRkVBVFVSRV9UdW5uZWxlZFBsYXliYWNrKTsKKyAgICAgIGJvb2xlYW4gc3VwcG9ydHNUdW5uZWxlZFBsYXliYWNrID0KKyAgICAgICAgICBkZWNvZGVyLmNvZGVjQ2FwYWJpbGl0aWVzLmlzRmVhdHVyZVN1cHBvcnRlZCgKKyAgICAgICAgICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuRkVBVFVSRV9UdW5uZWxlZFBsYXliYWNrKTsKKyAgICAgIGlmIChtdXN0U3VwcG9ydFR1bm5lbE1vZGUgJiYgIXN1cHBvcnRzVHVubmVsZWRQbGF5YmFjaworICAgICAgICAgIHx8ICFtdXN0U3VwcG9ydFR1bm5lbE1vZGUgJiYgcmVxdWlyZXNUdW5uZWxlZFBsYXliYWNrKSB7CisgICAgICAgIFN0cmluZyBtZXNzYWdlID0KKyAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgIlJlamVjdGluZyAlcywgcmVhc29uOiB0dW5uZWxlZCBwbGF5YmFjayByZXF1ZXN0ZWQ6ICViLCAiCisgICAgICAgICAgICAgICAgICAgICsgImNvZGVjIEZFQVRVUkVfVHVubmVsZWRQbGF5YmFjayBzdXBwb3J0ZWQ6ICViLCByZXF1aXJlZDogJWIiLAorICAgICAgICAgICAgICAgIG5hbWUsIG11c3RTdXBwb3J0VHVubmVsTW9kZSwgc3VwcG9ydHNUdW5uZWxlZFBsYXliYWNrLCByZXF1aXJlc1R1bm5lbGVkUGxheWJhY2spOworICAgICAgICBMb2cudihUQUcsIG1lc3NhZ2UpOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLy8gVmlkZW9DYXBhYmlsaXRpZXMgaXMgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseSBvbiB0aGlzIGRldmljZS4KKyAgICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCAyMworICAgICAgICAgICYmIEJ1aWxkLk1PREVMLmVxdWFscygiTUlCT1gzIikKKyAgICAgICAgICAmJiBuYW1lLmVxdWFscygiT01YLmFtbG9naWMudnA5LmRlY29kZXIuYXdlc29tZSIpCisgICAgICAgICAgJiYgKGZyYW1lV2lkdGggPiAxOTIwIHx8IGZyYW1lSGVpZ2h0ID4gMTA4MCkpIHsKKyAgICAgICAgTG9nLnYoVEFHLCAiU2tpcHBpbmcgPjEwODBwIE9NWC5hbWxvZ2ljLnZwOS5kZWNvZGVyLmF3ZXNvbWUgb24gbWlib3guIik7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBWaWRlb0NhcGFiaWxpdGllcyB2aWRlb0NhcGFiaWxpdGllcyA9IGRlY29kZXIudmlkZW9DYXBhYmlsaXRpZXM7CisgICAgICBSYW5nZTxJbnRlZ2VyPiBzdXBwb3J0ZWRXaWR0aHMgPSBkZWNvZGVyLnN1cHBvcnRlZFdpZHRoczsKKyAgICAgIFJhbmdlPEludGVnZXI+IHN1cHBvcnRlZEhlaWdodHMgPSBkZWNvZGVyLnN1cHBvcnRlZEhlaWdodHM7CisKKyAgICAgIC8vIEVuYWJsZSB0aGUgaW1wcm92ZWQgc3VwcG9ydCBjaGVjayBiYXNlZCBvbiBtb3JlIHNwZWNpZmljIEFQSXMsIGxpa2UgaXNTaXplU3VwcG9ydGVkKCkgb3IKKyAgICAgIC8vIGFyZVNpemVBbmRSYXRlU3VwcG9ydGVkKCksIGZvciA4ayBjb250ZW50LiBUaGVzZSBBUElzIGFyZSB0aGVvcmV0aWNhbGx5IG1vcmUgYWNjdXJhdGUsCisgICAgICAvLyBidXQgd2UgYXJlIHVuc3VyZSBhYm91dCB0aGVpciBsZXZlbCBvZiBzdXBwb3J0IG9uIHZhcmlvdXMgQW5kcm9pZCBUViBwbGF0Zm9ybXMuCisgICAgICBmaW5hbCBib29sZWFuIGVuYWJsZUltcHJvdmVkU3VwcG9ydENoZWNrID0KKyAgICAgICAgICBmb3JjZUltcHJvdmVkU3VwcG9ydENoZWNrIHx8IChmcmFtZVdpZHRoID4gMzg0MCB8fCBmcmFtZUhlaWdodCA+IDIxNjApOworICAgICAgaWYgKGVuYWJsZUltcHJvdmVkU3VwcG9ydENoZWNrKSB7CisgICAgICAgIGlmIChmcmFtZVdpZHRoICE9IDAgJiYgZnJhbWVIZWlnaHQgIT0gMCkgeworICAgICAgICAgIGlmICghdmlkZW9DYXBhYmlsaXRpZXMuaXNTaXplU3VwcG9ydGVkKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KSkgeworICAgICAgICAgICAgU3RyaW5nIGZvcm1hdCA9ICJSZWplY3RpbmcgJXMsIHJlYXNvbjogd2lkdGggJXMgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBoZWlnaHQgJWQiOworICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgIH0KLSAgICAgICAgICAvLyBJZiB3ZSB3YW50IGEgc2VjdXJlIGRlY29kZXIsIHRoZW4gbWFrZSBzdXJlIHRoZSB2ZXJzaW9uIHdpdGhvdXQgIi5zZWN1cmUiIGlzbid0Ci0gICAgICAgICAgLy8gZGVueWxpc3RlZC4KLSAgICAgICAgICBTdHJpbmcgbmFtZVdpdGhvdXRTZWN1cmVTdWZmaXggPQotICAgICAgICAgICAgICBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxlbmd0aCgpIC0gU0VDVVJFX0RFQ09ERVJfU1VGRklYLmxlbmd0aCgpKTsKLSAgICAgICAgICBpZiAoIWlzVnA5QWxsb3dMaXN0ZWQgJiYgdmlkZW9Db2RlY0RlbnlMaXN0LmNvbnRhaW5zKG5hbWVXaXRob3V0U2VjdXJlU3VmZml4KSkgewotICAgICAgICAgICAgU3RyaW5nIGZvcm1hdCA9ICJSZWplY3RpbmcgJXMsIHJlYXNvbjogb2ZmcHNlYyBkZW55bGlzdGVkIHNlY3VyZSBkZWNvZGVyIjsKLSAgICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNvZGVjQ2FwYWJpbGl0aWVzID0gaW5mby5nZXRDYXBhYmlsaXRpZXNGb3JUeXBlKHN1cHBvcnRlZFR5cGUpOwotICAgICAgICBib29sZWFuIHJlcXVpcmVzU2VjdXJlUGxheWJhY2sgPQotICAgICAgICAgICAgY29kZWNDYXBhYmlsaXRpZXMuaXNGZWF0dXJlUmVxdWlyZWQoCi0gICAgICAgICAgICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuRkVBVFVSRV9TZWN1cmVQbGF5YmFjayk7Ci0gICAgICAgIGJvb2xlYW4gc3VwcG9ydHNTZWN1cmVQbGF5YmFjayA9Ci0gICAgICAgICAgICBjb2RlY0NhcGFiaWxpdGllcy5pc0ZlYXR1cmVTdXBwb3J0ZWQoCi0gICAgICAgICAgICAgICAgTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXMuRkVBVFVSRV9TZWN1cmVQbGF5YmFjayk7Ci0gICAgICAgIGlmIChtdXN0U3VwcG9ydFNlY3VyZSAmJiAhc3VwcG9ydHNTZWN1cmVQbGF5YmFjawotICAgICAgICAgICAgfHwgIW11c3RTdXBwb3J0U2VjdXJlICYmIHJlcXVpcmVzU2VjdXJlUGxheWJhY2spIHsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9Ci0gICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAiUmVqZWN0aW5nICVzLCByZWFzb246IHNlY3VyZSBkZWNvZGVyIHJlcXVlc3RlZDogJWIsICIKLSAgICAgICAgICAgICAgICAgICAgICArICJjb2RlYyBGRUFUVVJFX1NlY3VyZVBsYXliYWNrIHN1cHBvcnRlZDogJWIsIHJlcXVpcmVkOiAlYiIsCi0gICAgICAgICAgICAgICAgICBuYW1lLCBtdXN0U3VwcG9ydFNlY3VyZSwgc3VwcG9ydHNTZWN1cmVQbGF5YmFjaywgcmVxdWlyZXNTZWN1cmVQbGF5YmFjayk7Ci0gICAgICAgICAgTG9nLnYoVEFHLCBtZXNzYWdlKTsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gcmVxdWlyZXNUdW5uZWxlZFBsYXliYWNrID0KLSAgICAgICAgICAgIGNvZGVjQ2FwYWJpbGl0aWVzLmlzRmVhdHVyZVJlcXVpcmVkKAotICAgICAgICAgICAgICAgIE1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzLkZFQVRVUkVfVHVubmVsZWRQbGF5YmFjayk7Ci0gICAgICAgIGJvb2xlYW4gc3VwcG9ydHNUdW5uZWxlZFBsYXliYWNrID0KLSAgICAgICAgICAgIGNvZGVjQ2FwYWJpbGl0aWVzLmlzRmVhdHVyZVN1cHBvcnRlZCgKLSAgICAgICAgICAgICAgICBNZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxpdGllcy5GRUFUVVJFX1R1bm5lbGVkUGxheWJhY2spOwotICAgICAgICBpZiAobXVzdFN1cHBvcnRUdW5uZWxNb2RlICYmICFzdXBwb3J0c1R1bm5lbGVkUGxheWJhY2sKLSAgICAgICAgICAgIHx8ICFtdXN0U3VwcG9ydFR1bm5lbE1vZGUgJiYgcmVxdWlyZXNUdW5uZWxlZFBsYXliYWNrKSB7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPQotICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgIlJlamVjdGluZyAlcywgcmVhc29uOiB0dW5uZWxlZCBwbGF5YmFjayByZXF1ZXN0ZWQ6ICViLCAiCi0gICAgICAgICAgICAgICAgICAgICAgKyAiY29kZWMgRkVBVFVSRV9UdW5uZWxlZFBsYXliYWNrIHN1cHBvcnRlZDogJWIsIHJlcXVpcmVkOiAlYiIsCi0gICAgICAgICAgICAgICAgICBuYW1lLCBtdXN0U3VwcG9ydFR1bm5lbE1vZGUsIHN1cHBvcnRzVHVubmVsZWRQbGF5YmFjaywgcmVxdWlyZXNUdW5uZWxlZFBsYXliYWNrKTsKLSAgICAgICAgICBMb2cudihUQUcsIG1lc3NhZ2UpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmlkZW9DYXBhYmlsaXRpZXMgaXMgbm90IGltcGxlbWVudGVkIGNvcnJlY3RseSBvbiB0aGlzIGRldmljZS4KLSAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IDIzCi0gICAgICAgICAgICAmJiBCdWlsZC5NT0RFTC5lcXVhbHMoIk1JQk9YMyIpCi0gICAgICAgICAgICAmJiBuYW1lLmVxdWFscygiT01YLmFtbG9naWMudnA5LmRlY29kZXIuYXdlc29tZSIpCi0gICAgICAgICAgICAmJiAoZnJhbWVXaWR0aCA+IDE5MjAgfHwgZnJhbWVIZWlnaHQgPiAxMDgwKSkgewotICAgICAgICAgIExvZy52KFRBRywgIlNraXBwaW5nID4xMDgwcCBPTVguYW1sb2dpYy52cDkuZGVjb2Rlci5hd2Vzb21lIG9uIG1pYm94LiIpOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVmlkZW9DYXBhYmlsaXRpZXMgdmlkZW9DYXBhYmlsaXRpZXMgPSBjb2RlY0NhcGFiaWxpdGllcy5nZXRWaWRlb0NhcGFiaWxpdGllcygpOwotICAgICAgICBSYW5nZTxJbnRlZ2VyPiBzdXBwb3J0ZWRXaWR0aHMgPSB2aWRlb0NhcGFiaWxpdGllcy5nZXRTdXBwb3J0ZWRXaWR0aHMoKTsKLSAgICAgICAgUmFuZ2U8SW50ZWdlcj4gc3VwcG9ydGVkSGVpZ2h0cyA9IHZpZGVvQ2FwYWJpbGl0aWVzLmdldFN1cHBvcnRlZEhlaWdodHMoKTsKLQotICAgICAgICAvLyBFbmFibGUgdGhlIGltcHJvdmVkIHN1cHBvcnQgY2hlY2sgYmFzZWQgb24gbW9yZSBzcGVjaWZpYyBBUElzLCBsaWtlIGlzU2l6ZVN1cHBvcnRlZCgpIG9yCi0gICAgICAgIC8vIGFyZVNpemVBbmRSYXRlU3VwcG9ydGVkKCksIGZvciA4ayBjb250ZW50LiBUaGVzZSBBUElzIGFyZSB0aGVvcmV0aWNhbGx5IG1vcmUgYWNjdXJhdGUsCi0gICAgICAgIC8vIGJ1dCB3ZSBhcmUgdW5zdXJlIGFib3V0IHRoZWlyIGxldmVsIG9mIHN1cHBvcnQgb24gdmFyaW91cyBBbmRyb2lkIFRWIHBsYXRmb3Jtcy4KLSAgICAgICAgZmluYWwgYm9vbGVhbiBlbmFibGVJbXByb3ZlZENoZWNrID0gZnJhbWVXaWR0aCA+IDM4NDAgfHwgZnJhbWVIZWlnaHQgPiAyMTYwOwotICAgICAgICBpZiAoZW5hYmxlSW1wcm92ZWRDaGVjaykgewotICAgICAgICAgIGlmIChmcmFtZVdpZHRoICE9IDAgJiYgZnJhbWVIZWlnaHQgIT0gMCkgewotICAgICAgICAgICAgaWYgKCF2aWRlb0NhcGFiaWxpdGllcy5pc1NpemVTdXBwb3J0ZWQoZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpKSB7Ci0gICAgICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IHdpZHRoICVzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggaGVpZ2h0ICVkIjsKLSAgICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpKTsKLSAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIGlmIChmcmFtZVdpZHRoICE9IDApIHsKLSAgICAgICAgICAgIGlmICghc3VwcG9ydGVkV2lkdGhzLmNvbnRhaW5zKGZyYW1lV2lkdGgpKSB7Ci0gICAgICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IHN1cHBvcnRlZCB3aWR0aHMgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7Ci0gICAgICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUsIHN1cHBvcnRlZFdpZHRocy50b1N0cmluZygpLCBmcmFtZVdpZHRoKSk7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVIZWlnaHQgIT0gMCkgewotICAgICAgICAgICAgaWYgKCFzdXBwb3J0ZWRIZWlnaHRzLmNvbnRhaW5zKGZyYW1lSGVpZ2h0KSkgewotICAgICAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0gIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgaGVpZ2h0cyAlcyBkb2VzIG5vdCBjb250YWluICVkIjsKLSAgICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkSGVpZ2h0cy50b1N0cmluZygpLCBmcmFtZUhlaWdodCkpOwotICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGZyYW1lV2lkdGggIT0gMCAmJiAhc3VwcG9ydGVkV2lkdGhzLmNvbnRhaW5zKGZyYW1lV2lkdGgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVXaWR0aCAhPSAwKSB7CisgICAgICAgICAgaWYgKCFzdXBwb3J0ZWRXaWR0aHMuY29udGFpbnMoZnJhbWVXaWR0aCkpIHsKICAgICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IHN1cHBvcnRlZCB3aWR0aHMgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7CiAgICAgICAgICAgICBMb2cudihUQUcsIFN0cmluZy5mb3JtYXQoZm9ybWF0LCBuYW1lLCBzdXBwb3J0ZWRXaWR0aHMudG9TdHJpbmcoKSwgZnJhbWVXaWR0aCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgfQotICAgICAgICAgIGlmIChmcmFtZUhlaWdodCAhPSAwICYmICFzdXBwb3J0ZWRIZWlnaHRzLmNvbnRhaW5zKGZyYW1lSGVpZ2h0KSkgeworICAgICAgICB9IGVsc2UgaWYgKGZyYW1lSGVpZ2h0ICE9IDApIHsKKyAgICAgICAgICBpZiAoIXN1cHBvcnRlZEhlaWdodHMuY29udGFpbnMoZnJhbWVIZWlnaHQpKSB7CiAgICAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0gIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgaGVpZ2h0cyAlcyBkb2VzIG5vdCBjb250YWluICVkIjsKICAgICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUsIHN1cHBvcnRlZEhlaWdodHMudG9TdHJpbmcoKSwgZnJhbWVIZWlnaHQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIFJhbmdlPEludGVnZXI+IGJpdHJhdGVzID0gdmlkZW9DYXBhYmlsaXRpZXMuZ2V0Qml0cmF0ZVJhbmdlKCk7Ci0gICAgICAgIGlmIChiaXRyYXRlICE9IDAgJiYgIWJpdHJhdGVzLmNvbnRhaW5zKGJpdHJhdGUpKSB7Ci0gICAgICAgICAgU3RyaW5nIGZvcm1hdCA9ICJSZWplY3RpbmcgJXMsIHJlYXNvbjogYml0cmF0ZSByYW5nZSAlcyBkb2VzIG5vdCBjb250YWluICVkIjsKLSAgICAgICAgICBMb2cudihUQUcsIFN0cmluZy5mb3JtYXQoZm9ybWF0LCBuYW1lLCBiaXRyYXRlcy50b1N0cmluZygpLCBiaXRyYXRlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZnJhbWVXaWR0aCAhPSAwICYmICFzdXBwb3J0ZWRXaWR0aHMuY29udGFpbnMoZnJhbWVXaWR0aCkpIHsKKyAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0gIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgd2lkdGhzICVzIGRvZXMgbm90IGNvbnRhaW4gJWQiOworICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUsIHN1cHBvcnRlZFdpZHRocy50b1N0cmluZygpLCBmcmFtZVdpZHRoKSk7CiAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGZyYW1lSGVpZ2h0ICE9IDAgJiYgIXN1cHBvcnRlZEhlaWdodHMuY29udGFpbnMoZnJhbWVIZWlnaHQpKSB7CisgICAgICAgICAgU3RyaW5nIGZvcm1hdCA9ICJSZWplY3RpbmcgJXMsIHJlYXNvbjogc3VwcG9ydGVkIGhlaWdodHMgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7CisgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkSGVpZ2h0cy50b1N0cmluZygpLCBmcmFtZUhlaWdodCkpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CiAKLSAgICAgICAgUmFuZ2U8SW50ZWdlcj4gc3VwcG9ydGVkRnJhbWVSYXRlcyA9IHZpZGVvQ2FwYWJpbGl0aWVzLmdldFN1cHBvcnRlZEZyYW1lUmF0ZXMoKTsKLSAgICAgICAgaWYgKGVuYWJsZUltcHJvdmVkQ2hlY2spIHsKLSAgICAgICAgICBpZiAoZnBzICE9IDApIHsKLSAgICAgICAgICAgIGlmIChmcmFtZUhlaWdodCAhPSAwICYmIGZyYW1lV2lkdGggIT0gMCkgewotICAgICAgICAgICAgICBpZiAoIXZpZGVvQ2FwYWJpbGl0aWVzLmFyZVNpemVBbmRSYXRlU3VwcG9ydGVkKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcHMpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZvcm1hdCA9Ci0gICAgICAgICAgICAgICAgICAgICJSZWplY3RpbmcgJXMsIHJlYXNvbjogc3VwcG9ydGVkIGZyYW1lIHJhdGVzICVzIGRvZXMgbm90IGNvbnRhaW4gJWQiOwotICAgICAgICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUsIHN1cHBvcnRlZEZyYW1lUmF0ZXMudG9TdHJpbmcoKSwgZnBzKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8vIEF0IGxlYXN0IG9uZSBvZiBmcmFtZUhlaWdodCBvciBmcmFtZVdpZHRoIGlzIDAKLSAgICAgICAgICAgICAgaWYgKCFzdXBwb3J0ZWRGcmFtZVJhdGVzLmNvbnRhaW5zKGZwcykpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0KLSAgICAgICAgICAgICAgICAgICAgIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgZnJhbWUgcmF0ZXMgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkRnJhbWVSYXRlcy50b1N0cmluZygpLCBmcHMpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgfQorICAgICAgUmFuZ2U8SW50ZWdlcj4gYml0cmF0ZXMgPSB2aWRlb0NhcGFiaWxpdGllcy5nZXRCaXRyYXRlUmFuZ2UoKTsKKyAgICAgIGlmIChiaXRyYXRlICE9IDAgJiYgIWJpdHJhdGVzLmNvbnRhaW5zKGJpdHJhdGUpKSB7CisgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IGJpdHJhdGUgcmFuZ2UgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7CisgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdChmb3JtYXQsIG5hbWUsIGJpdHJhdGVzLnRvU3RyaW5nKCksIGJpdHJhdGUpKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIFJhbmdlPEludGVnZXI+IHN1cHBvcnRlZEZyYW1lUmF0ZXMgPSB2aWRlb0NhcGFiaWxpdGllcy5nZXRTdXBwb3J0ZWRGcmFtZVJhdGVzKCk7CisgICAgICBpZiAoZW5hYmxlSW1wcm92ZWRTdXBwb3J0Q2hlY2spIHsKKyAgICAgICAgaWYgKGZwcyAhPSAwKSB7CisgICAgICAgICAgaWYgKGZyYW1lSGVpZ2h0ICE9IDAgJiYgZnJhbWVXaWR0aCAhPSAwKSB7CisgICAgICAgICAgICBpZiAoIXZpZGVvQ2FwYWJpbGl0aWVzLmFyZVNpemVBbmRSYXRlU3VwcG9ydGVkKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBmcHMpKSB7CisgICAgICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IHN1cHBvcnRlZCBmcmFtZSByYXRlcyAlcyBkb2VzIG5vdCBjb250YWluICVkIjsKKyAgICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkRnJhbWVSYXRlcy50b1N0cmluZygpLCBmcHMpKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEF0IGxlYXN0IG9uZSBvZiBmcmFtZUhlaWdodCBvciBmcmFtZVdpZHRoIGlzIDAKKyAgICAgICAgICAgIGlmICghc3VwcG9ydGVkRnJhbWVSYXRlcy5jb250YWlucyhmcHMpKSB7CisgICAgICAgICAgICAgIFN0cmluZyBmb3JtYXQgPSAiUmVqZWN0aW5nICVzLCByZWFzb246IHN1cHBvcnRlZCBmcmFtZSByYXRlcyAlcyBkb2VzIG5vdCBjb250YWluICVkIjsKKyAgICAgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkRnJhbWVSYXRlcy50b1N0cmluZygpLCBmcHMpKTsKKyAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChmcHMgIT0gMCAmJiAhc3VwcG9ydGVkRnJhbWVSYXRlcy5jb250YWlucyhmcHMpKSB7Ci0gICAgICAgICAgICBMb2cudigKLSAgICAgICAgICAgICAgICBUQUcsCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgZnJhbWUgcmF0ZXMgJXMgZG9lcyBub3QgY29udGFpbiAlZCIsCi0gICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1cHBvcnRlZEZyYW1lUmF0ZXMudG9TdHJpbmcoKSwgZnBzKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0TmFtZSA9Ci0gICAgICAgICAgICAobXVzdFN1cHBvcnRTZWN1cmUgJiYgIW5hbWUuZW5kc1dpdGgoU0VDVVJFX0RFQ09ERVJfU1VGRklYKSkKLSAgICAgICAgICAgICAgICA/IChuYW1lICsgU0VDVVJFX0RFQ09ERVJfU1VGRklYKQotICAgICAgICAgICAgICAgIDogbmFtZTsKLSAgICAgICAgRmluZFZpZGVvRGVjb2RlclJlc3VsdCBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0ID0KLSAgICAgICAgICAgIG5ldyBGaW5kVmlkZW9EZWNvZGVyUmVzdWx0KHJlc3VsdE5hbWUsIHZpZGVvQ2FwYWJpbGl0aWVzLCBjb2RlY0NhcGFiaWxpdGllcyk7Ci0gICAgICAgIGlmIChtdXN0U3VwcG9ydEhkciAmJiAhaXNIZHJDYXBhYmxlVmlkZW9EZWNvZGVyKG1pbWVUeXBlLCBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0KSkgewotICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdCgiUmVqZWN0aW5nICVzLCByZWFzb246IGNvZGVjIGRvZXMgbm90IHN1cHBvcnQgSERSIiwgbmFtZSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZwcyAhPSAwICYmICFzdXBwb3J0ZWRGcmFtZVJhdGVzLmNvbnRhaW5zKGZwcykpIHsKKyAgICAgICAgICBTdHJpbmcgZm9ybWF0ID0gIlJlamVjdGluZyAlcywgcmVhc29uOiBzdXBwb3J0ZWQgZnJhbWUgcmF0ZXMgJXMgZG9lcyBub3QgY29udGFpbiAlZCI7CisgICAgICAgICAgTG9nLnYoVEFHLCBTdHJpbmcuZm9ybWF0KGZvcm1hdCwgbmFtZSwgc3VwcG9ydGVkRnJhbWVSYXRlcy50b1N0cmluZygpLCBmcHMpKTsKICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBMb2cudihUQUcsIFN0cmluZy5mb3JtYXQoIkZvdW5kIHN1aXRhYmxlIGRlY29kZXIsICVzIiwgbmFtZSkpOwotICAgICAgICByZXR1cm4gZmluZFZpZGVvRGVjb2RlclJlc3VsdDsKICAgICAgIH0KKworICAgICAgU3RyaW5nIHJlc3VsdE5hbWUgPQorICAgICAgICAgIChtdXN0U3VwcG9ydFNlY3VyZSAmJiAhbmFtZS5lbmRzV2l0aChTRUNVUkVfREVDT0RFUl9TVUZGSVgpKQorICAgICAgICAgICAgICA/IChuYW1lICsgU0VDVVJFX0RFQ09ERVJfU1VGRklYKQorICAgICAgICAgICAgICA6IG5hbWU7CisgICAgICBGaW5kVmlkZW9EZWNvZGVyUmVzdWx0IGZpbmRWaWRlb0RlY29kZXJSZXN1bHQgPQorICAgICAgICAgIG5ldyBGaW5kVmlkZW9EZWNvZGVyUmVzdWx0KHJlc3VsdE5hbWUsIHZpZGVvQ2FwYWJpbGl0aWVzLCBkZWNvZGVyLmNvZGVjQ2FwYWJpbGl0aWVzKTsKKyAgICAgIGlmIChtdXN0U3VwcG9ydEhkciAmJiAhaXNIZHJDYXBhYmxlVmlkZW9EZWNvZGVyKG1pbWVUeXBlLCBmaW5kVmlkZW9EZWNvZGVyUmVzdWx0KSkgeworICAgICAgICBMb2cudihUQUcsICJSZWplY3RpbmcgIiArIG5hbWUgKyAiLCByZWFzb246IGNvZGVjIGRvZXMgbm90IHN1cHBvcnQgSERSIik7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgTG9nLnYoVEFHLCAiRm91bmQgc3VpdGFibGUgZGVjb2RlciwgIiArIG5hbWUpOworICAgICAgcmV0dXJuIGZpbmRWaWRlb0RlY29kZXJSZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiBuZXcgRmluZFZpZGVvRGVjb2RlclJlc3VsdCgiIiwgbnVsbCwgbnVsbCk7CiAgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhRHJtQnJpZGdlLmphdmEgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL2phdmEvZGV2L2NvYmFsdC9tZWRpYS9NZWRpYURybUJyaWRnZS5qYXZhCmluZGV4IGFiYjU2YzguLmM2ZGIxMjMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL01lZGlhRHJtQnJpZGdlLmphdmEKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvTWVkaWFEcm1CcmlkZ2UuamF2YQpAQCAtNzYsNiArNzYsMTQgQEAKICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0RSTV9FVkVOVF9LRVlfRVhQSVJFRCA9IE1lZGlhRHJtLkVWRU5UX0tFWV9FWFBJUkVEOwogCisgIC8vIERlcHJlY2F0ZWQgaW4gQVBJIDIzLCBidXQgd2Ugc3RpbGwgbG9nIGl0IG9uIGVhcmxpZXIgZGV2aWNlcy4KKyAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0RSTV9FVkVOVF9QUk9WSVNJT05fUkVRVUlSRUQgPSBNZWRpYURybS5FVkVOVF9QUk9WSVNJT05fUkVRVUlSRUQ7CisKKyAgLy8gQWRkZWQgaW4gQVBJIDIzLgorICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfRFJNX0VWRU5UX1NFU1NJT05fUkVDTEFJTUVEID0KKyAgICAgIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyMyA/IE1lZGlhRHJtLkVWRU5UX1NFU1NJT05fUkVDTEFJTUVEIDogNTsKKwogICBwcml2YXRlIE1lZGlhRHJtIG1NZWRpYURybTsKICAgcHJpdmF0ZSBsb25nIG1OYXRpdmVNZWRpYURybUJyaWRnZTsKICAgcHJpdmF0ZSBVVUlEIG1TY2hlbWVVVUlEOwpAQCAtNDAwLDQ3ICs0MDgsNDggQEAKICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkV2ZW50TGlzdGVuZXI6IEludmFsaWQgc2Vzc2lvbiAlcyIsIGJ5dGVzVG9IZXhTdHJpbmcoc2Vzc2lvbklkKSkpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7Ci0gICAgICAgICAgICAgIGNhc2UgTWVkaWFEcm0uRVZFTlRfS0VZX1JFUVVJUkVEOgotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk1lZGlhRHJtLkVWRU5UX0tFWV9SRVFVSVJFRCIpOwotICAgICAgICAgICAgICAgIFN0cmluZyBtaW1lID0gbVNlc3Npb25JZHMuZ2V0KEJ5dGVCdWZmZXIud3JhcChzZXNzaW9uSWQpKTsKLSAgICAgICAgICAgICAgICBNZWRpYURybS5LZXlSZXF1ZXN0IHJlcXVlc3QgPSBudWxsOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZ2V0S2V5UmVxdWVzdChzZXNzaW9uSWQsIGRhdGEsIG1pbWUpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vdFByb3Zpc2lvbmVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkRldmljZSBub3QgcHJvdmlzaW9uZWQiLCBlKTsKLSAgICAgICAgICAgICAgICAgIGlmICghYXR0ZW1wdFByb3Zpc2lvbmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBwcm92aXNpb24gZGV2aWNlIHdoZW4gcmVzcG9uZGluZyB0byBFVkVOVF9LRVlfUkVRVUlSRUQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3VwcG9zZWRseSBzdWNjZXNzZnVsbHkgcHJvdmlzaW9uZWQgb3Vyc2VsdmVzLCB0aGVuIHRyeSB0byBjcmVhdGUgYQotICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBnZXRLZXlSZXF1ZXN0KHNlc3Npb25JZCwgZGF0YSwgbWltZSk7Ci0gICAgICAgICAgICAgICAgICB9IGNhdGNoIChOb3RQcm92aXNpb25lZEV4Y2VwdGlvbiBlMikgewotICAgICAgICAgICAgICAgICAgICBMb2cuZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIFRBRywKLSAgICAgICAgICAgICAgICAgICAgICAgICJEZXZpY2Ugc3RpbGwgbm90IHByb3Zpc2lvbmVkIGFmdGVyIHN1cHBvc2VkbHkgc3VjY2Vzc2Z1bCBwcm92aXNpb25pbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgZTIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgIG9uU2Vzc2lvbk1lc3NhZ2UoU0JfRFJNX1RJQ0tFVF9JTlZBTElELCBzZXNzaW9uSWQsIHJlcXVlc3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJFdmVudExpc3RlbmVyOiBnZXRLZXlSZXF1ZXN0IGZhaWxlZC4iKTsKKworICAgICAgICAgICAgaWYgKGV2ZW50ID09IE1lZGlhRHJtLkVWRU5UX0tFWV9SRVFVSVJFRCkgeworICAgICAgICAgICAgICBMb2cuZChUQUcsICJNZWRpYURybS5FVkVOVF9LRVlfUkVRVUlSRUQiKTsKKyAgICAgICAgICAgICAgU3RyaW5nIG1pbWUgPSBtU2Vzc2lvbklkcy5nZXQoQnl0ZUJ1ZmZlci53cmFwKHNlc3Npb25JZCkpOworICAgICAgICAgICAgICBNZWRpYURybS5LZXlSZXF1ZXN0IHJlcXVlc3QgPSBudWxsOworICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBnZXRLZXlSZXF1ZXN0KHNlc3Npb25JZCwgZGF0YSwgbWltZSk7CisgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vdFByb3Zpc2lvbmVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJEZXZpY2Ugbm90IHByb3Zpc2lvbmVkIiwgZSk7CisgICAgICAgICAgICAgICAgaWYgKCFhdHRlbXB0UHJvdmlzaW9uaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBwcm92aXNpb24gZGV2aWNlIHdoZW4gcmVzcG9uZGluZyB0byBFVkVOVF9LRVlfUkVRVUlSRUQiKTsKICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgTUVESUFfRFJNX0VWRU5UX0tFWV9FWFBJUkVEOgotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk1lZGlhRHJtLkVWRU5UX0tFWV9FWFBJUkVEIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgTWVkaWFEcm0uRVZFTlRfVkVORE9SX0RFRklORUQ6Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTWVkaWFEcm0uRVZFTlRfVkVORE9SX0RFRklORUQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIERSTSBldmVudCAiICsgZXZlbnQpOworICAgICAgICAgICAgICAgIC8vIElmIHdlIHN1cHBvc2VkbHkgc3VjY2Vzc2Z1bGx5IHByb3Zpc2lvbmVkIG91cnNlbHZlcywgdGhlbiB0cnkgdG8gY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAvLyByZXF1ZXN0IGFnYWluLgorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gZ2V0S2V5UmVxdWVzdChzZXNzaW9uSWQsIGRhdGEsIG1pbWUpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5vdFByb3Zpc2lvbmVkRXhjZXB0aW9uIGUyKSB7CisgICAgICAgICAgICAgICAgICBMb2cuZSgKKyAgICAgICAgICAgICAgICAgICAgICBUQUcsCisgICAgICAgICAgICAgICAgICAgICAgIkRldmljZSBzdGlsbCBub3QgcHJvdmlzaW9uZWQgYWZ0ZXIgc3VwcG9zZWRseSBzdWNjZXNzZnVsIHByb3Zpc2lvbmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgZTIpOworICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAocmVxdWVzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgb25TZXNzaW9uTWVzc2FnZShTQl9EUk1fVElDS0VUX0lOVkFMSUQsIHNlc3Npb25JZCwgcmVxdWVzdCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXZlbnRMaXN0ZW5lcjogZ2V0S2V5UmVxdWVzdCBmYWlsZWQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IE1FRElBX0RSTV9FVkVOVF9LRVlfRVhQSVJFRCkgeworICAgICAgICAgICAgICBMb2cuZChUQUcsICJNZWRpYURybS5FVkVOVF9LRVlfRVhQSVJFRCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBNZWRpYURybS5FVkVOVF9WRU5ET1JfREVGSU5FRCkgeworICAgICAgICAgICAgICBMb2cuZChUQUcsICJNZWRpYURybS5FVkVOVF9WRU5ET1JfREVGSU5FRCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBNRURJQV9EUk1fRVZFTlRfUFJPVklTSU9OX1JFUVVJUkVEKSB7CisgICAgICAgICAgICAgIExvZy5kKFRBRywgIk1lZGlhRHJtLkVWRU5UX1BST1ZJU0lPTl9SRVFVSVJFRCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBNRURJQV9EUk1fRVZFTlRfU0VTU0lPTl9SRUNMQUlNRUQpIHsKKyAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTWVkaWFEcm0uRVZFTlRfU0VTU0lPTl9SRUNMQUlNRUQiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgRFJNIGV2ZW50ICIgKyBldmVudCk7CisgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9qYXZhL2Rldi9jb2JhbHQvbWVkaWEvVmlkZW9EZWNvZGVyQ2FjaGUuamF2YSBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL1ZpZGVvRGVjb2RlckNhY2hlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUxN2RlMwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vamF2YS9kZXYvY29iYWx0L21lZGlhL1ZpZGVvRGVjb2RlckNhY2hlLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBkZXYuY29iYWx0Lm1lZGlhOworCitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzOworaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm8uVmlkZW9DYXBhYmlsaXRpZXM7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjTGlzdDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuUmFuZ2U7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworLyoqIENhY2hlIG1hbmFnZXIgZm9yIG1haW50YWluaW5nIGEgdmlkZW8gZGVjb2RlciBjYWNoZS4gVGhyZWFkc2FmZS4gKi8KK3B1YmxpYyBjbGFzcyBWaWRlb0RlY29kZXJDYWNoZSB7CisgIC8qKgorICAgKiBDYWNoZSBlbnRyeSBpbiBWaWRlb0RlY29kZXJDYWNoZS4gQ2FjaGVkIGV4cGVuc2l2ZSBBUEkgY2FsbHMgdGhhdCBhcmUgcmVwZWF0ZWRseSBtYWRlIHdoaWxlIHRoZQorICAgKiBINSBwbGF5ZXIgZGV0ZXJtaW5lcyBjb2RlYyBzdXBwb3J0LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBjbGFzcyBDYWNoZWREZWNvZGVyIHsKKyAgICBDYWNoZWREZWNvZGVyKE1lZGlhQ29kZWNJbmZvIGluZm8sIENvZGVjQ2FwYWJpbGl0aWVzIGNvZGVjQ2FwYWJpbGl0aWVzLCBTdHJpbmcgbWltZVR5cGUpIHsKKyAgICAgIHRoaXMuaW5mbyA9IGluZm87CisgICAgICB0aGlzLm1pbWVUeXBlID0gbWltZVR5cGU7CisgICAgICB0aGlzLmNvZGVjQ2FwYWJpbGl0aWVzID0gY29kZWNDYXBhYmlsaXRpZXM7CisgICAgICB0aGlzLnZpZGVvQ2FwYWJpbGl0aWVzID0gY29kZWNDYXBhYmlsaXRpZXMuZ2V0VmlkZW9DYXBhYmlsaXRpZXMoKTsKKyAgICAgIHRoaXMuc3VwcG9ydGVkV2lkdGhzID0gdmlkZW9DYXBhYmlsaXRpZXMuZ2V0U3VwcG9ydGVkV2lkdGhzKCk7CisgICAgICB0aGlzLnN1cHBvcnRlZEhlaWdodHMgPSB2aWRlb0NhcGFiaWxpdGllcy5nZXRTdXBwb3J0ZWRIZWlnaHRzKCk7CisgICAgICB0aGlzLmJpdHJhdGVSYW5nZSA9IHZpZGVvQ2FwYWJpbGl0aWVzLmdldEJpdHJhdGVSYW5nZSgpOworICAgIH0KKworICAgIHB1YmxpYyBNZWRpYUNvZGVjSW5mbyBpbmZvOworICAgIHB1YmxpYyBTdHJpbmcgbWltZVR5cGU7CisgICAgcHVibGljIENvZGVjQ2FwYWJpbGl0aWVzIGNvZGVjQ2FwYWJpbGl0aWVzOworICAgIHB1YmxpYyBWaWRlb0NhcGFiaWxpdGllcyB2aWRlb0NhcGFiaWxpdGllczsKKyAgICBwdWJsaWMgUmFuZ2U8SW50ZWdlcj4gc3VwcG9ydGVkV2lkdGhzOworICAgIHB1YmxpYyBSYW5nZTxJbnRlZ2VyPiBzdXBwb3J0ZWRIZWlnaHRzOworICAgIHB1YmxpYyBSYW5nZTxJbnRlZ2VyPiBiaXRyYXRlUmFuZ2U7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9DQUNIRV9UVExfTUlMTElTID0gMTAwMDsKKworICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBMaXN0PENhY2hlZERlY29kZXI+PiBjYWNoZSA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBsYXN0Q2FjaGVVcGRhdGVBdCA9IDA7CisKKyAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gaXNFeHBpcmVkKGludCBjYWNoZVR0bE92ZXJyaWRlKSB7CisgICAgbG9uZyBjYWNoZVR0bCA9IGNhY2hlVHRsT3ZlcnJpZGUgPj0gMCA/IGNhY2hlVHRsT3ZlcnJpZGUgOiBERUZBVUxUX0NBQ0hFX1RUTF9NSUxMSVM7CisgICAgcmV0dXJuIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gbGFzdENhY2hlVXBkYXRlQXQgPj0gY2FjaGVUdGw7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlZnJlc2hEZWNvZGVycygpIHsKKyAgICBjYWNoZS5jbGVhcigpOworICAgIC8vIE5vdGU6IE1lZGlhQ29kZWNMaXN0IGlzIHNvcnRlZCBieSB0aGUgZnJhbWV3b3JrIHN1Y2ggdGhhdCB0aGUgYmVzdCBkZWNvZGVycyBjb21lIGZpcnN0LgorICAgIC8vIFRoaXMgb3JkZXIgaXMgbWFpbnRhaW5lZCBpbiB0aGUgY2FjaGUuCisgICAgZm9yIChNZWRpYUNvZGVjSW5mbyBjb2RlY0luZm8gOiBuZXcgTWVkaWFDb2RlY0xpc3QoTWVkaWFDb2RlY0xpc3QuQUxMX0NPREVDUykuZ2V0Q29kZWNJbmZvcygpKSB7CisgICAgICAvLyBEb24ndCBjYWNoZSBlbmNvZGVycy4KKyAgICAgIGlmIChjb2RlY0luZm8uaXNFbmNvZGVyKCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBmb3IgKFN0cmluZyBtaW1lVHlwZSA6IGNvZGVjSW5mby5nZXRTdXBwb3J0ZWRUeXBlcygpKSB7CisgICAgICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNvZGVjQ2FwYWJpbGl0aWVzID0gY29kZWNJbmZvLmdldENhcGFiaWxpdGllc0ZvclR5cGUobWltZVR5cGUpOworICAgICAgICAvLyBEb24ndCBjYWNoZSBkZWNvZGVycyB0aGF0IGNhbid0IGRvIHZpZGVvLgorICAgICAgICBpZiAoY29kZWNDYXBhYmlsaXRpZXMuZ2V0VmlkZW9DYXBhYmlsaXRpZXMoKSA9PSBudWxsKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgTGlzdDxDYWNoZWREZWNvZGVyPiBkZWNvZGVycyA9IGNhY2hlLmdldChtaW1lVHlwZSk7CisgICAgICAgIGlmIChkZWNvZGVycyA9PSBudWxsKSB7CisgICAgICAgICAgZGVjb2RlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgICBjYWNoZS5wdXQobWltZVR5cGUsIGRlY29kZXJzKTsKKyAgICAgICAgfQorICAgICAgICBkZWNvZGVycy5hZGQobmV3IENhY2hlZERlY29kZXIoY29kZWNJbmZvLCBjb2RlY0NhcGFiaWxpdGllcywgbWltZVR5cGUpKTsKKyAgICAgIH0KKyAgICB9CisgICAgbGFzdENhY2hlVXBkYXRlQXQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBkZWNvZGVycyB0aGF0IGFyZSBjYWJhYmxlIG9mIGRlY29kaW5nIHRoZSBtZWRpYSBkZW5vdGVkIGJ5IHtAY29kZSBtaW1lVHlwZX0uCisgICAqCisgICAqIEBwYXJhbSBtaW1lVHlwZSBUaGUgbWltZSB0eXBlIHRoZSByZXR1cm5lZCBkZWNvZGVycyBzaG91bGQgYmUgYWJsZSB0byBkZWNvZGUuCisgICAqIEBwYXJhbSBjYWNoZVR0bE92ZXJyaWRlIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBjYWNoZSBUVEwgaWYgcGFzc2VkIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gMAorICAgKiAgICAgZGlzYWJsZXMgdGhlIGNhY2hlIGVudGlyZWx5LgorICAgKiBAcmV0dXJuIEEgbGlzdCBvZiBkZWNvZGVycy4KKyAgICovCisgIHN0YXRpYyBMaXN0PENhY2hlZERlY29kZXI+IGdldENhY2hlZERlY29kZXJzKFN0cmluZyBtaW1lVHlwZSwgaW50IGNhY2hlVHRsT3ZlcnJpZGUpIHsKKyAgICBzeW5jaHJvbml6ZWQgKGNhY2hlKSB7CisgICAgICBpZiAoaXNFeHBpcmVkKGNhY2hlVHRsT3ZlcnJpZGUpKSB7CisgICAgICAgIHJlZnJlc2hEZWNvZGVycygpOworICAgICAgfQorICAgICAgcmV0dXJuIGNhY2hlLmdldE9yRGVmYXVsdChtaW1lVHlwZSwgQ29sbGVjdGlvbnMuPENhY2hlZERlY29kZXI+ZW1wdHlMaXN0KCkpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2FwcC9zcmMvbWFpbi9yZXMvdmFsdWVzL292ZXJsYXlhYmxlLnhtbCBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9vdmVybGF5YWJsZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4N2QwYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9vdmVybGF5YWJsZS54bWwKQEAgLTAsMCArMSwzMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6dG9vbHM9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL3Rvb2xzIgorICAgICAgICAgICB0b29sczppZ25vcmU9IkR1cGxpY2F0ZURlZmluaXRpb24iPgorICA8b3ZlcmxheWFibGUgbmFtZT0iQ29iYWx0T3ZlcmxheSI+CisgICAgPHBvbGljeSB0eXBlPSJ2ZW5kb3J8cHJvZHVjdHxzeXN0ZW0iPgorICAgICAgPCEtLSBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgMzYwIHZpZGVvcyBjYW4gYmUgcGxheWVkLiAtLT4KKyAgICAgIDxpdGVtIHR5cGU9ImJvb2wiIG5hbWU9InN1cHBvcnRzX3NwaGVyaWNhbF92aWRlb3MiIC8+CisgICAgICA8IS0tCisgICAgICAgIFdoZW4gc2V0LCB0aGUgcmV0dXJuIHZhbHVlIG9mIFNiTWVkaWFHZXRWaWRlb0J1ZmZlckJ1ZGdldCgpIGlzIGNhcHBlZAorICAgICAgICB0byB0aGlzIHZhbHVlIGluIE1CLiBTZXQgdG8gMCB0byB1c2UgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAtLT4KKyAgICAgIDxpdGVtIHR5cGU9ImludGVnZXIiIG5hbWU9Im1heF92aWRlb19idWZmZXJfYnVkZ2V0IiAvPgorICAgIDwvcG9saWN5PgorICA8L292ZXJsYXlhYmxlPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvcnJvX3ZhcmlhYmxlcy54bWwgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvYXBwL3NyYy9tYWluL3Jlcy92YWx1ZXMvcnJvX3ZhcmlhYmxlcy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3YTk5YwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2Fway9hcHAvc3JjL21haW4vcmVzL3ZhbHVlcy9ycm9fdmFyaWFibGVzLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPHJlc291cmNlcyB4bWxuczp0b29scz0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vdG9vbHMiPgorICA8IS0tIFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciAzNjAgdmlkZW9zIGNhbiBiZSBwbGF5ZWQuIC0tPgorICA8Ym9vbCBuYW1lPSJzdXBwb3J0c19zcGhlcmljYWxfdmlkZW9zIiB0b29sczppZ25vcmU9IkR1cGxpY2F0ZURlZmluaXRpb24iPnRydWU8L2Jvb2w+CisgIDwhLS0KKyAgICBXaGVuIHNldCwgdGhlIHJldHVybiB2YWx1ZSBvZiBTYk1lZGlhR2V0VmlkZW9CdWZmZXJCdWRnZXQoKSBpcyBjYXBwZWQgdG8KKyAgICB0aGlzIHZhbHVlIGluIE1CLiBTZXQgdG8gMCB0byB1c2UgZGVmYXVsdCB2YWx1ZXMuCisgIC0tPgorICA8aW50ZWdlciBuYW1lPSJtYXhfdmlkZW9fYnVmZmVyX2J1ZGdldCIKKyAgICAgICAgICAgdG9vbHM6aWdub3JlPSJEdXBsaWNhdGVEZWZpbml0aW9uIj4wPC9pbnRlZ2VyPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9hbmRyb2lkL2FybS9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YThlZjJkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybS9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnYXJtX3ZlcnNpb24nOiA3LAotICAgICdhcm12Nyc6IDEsCi0gICAgJ2FybV90aHVtYic6IDAsCi0gICAgJ2FybV9uZW9uJzogMCwKLSAgICAnYXJtX2ZwdSc6ICd2ZnB2My1kMTYnLAotICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICctbWFyY2g9YXJtdjctYScsCi0gICAgXSwKLSAgICAnbGlua2VyX2ZsYWdzJzogWwotICAgICAgIyBNaW1pYyBidWlsZC9jbWFrZS9hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSBpbiB0aGUgQW5kcm9pZCBOREsuCi0gICAgICAnLVdsLC0tZXhjbHVkZS1saWJzLGxpYnVud2luZC5hJywKLSAgICBdCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2FuZHJvaWQtYXJtX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnYW5kcm9pZC1hcm1fZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm1fZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm1fcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm1fZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggMGZjZGQyYS4uNmE5ZjBjZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2FybS9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMTcsNyArMTcsNCBAQAogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gc2hhcmVkX2NvbmZpZ3VyYXRpb24uQW5kcm9pZENvbmZpZ3VyYXRpb24oCi0gICAgICAnYW5kcm9pZC1hcm0nLAotICAgICAgJ2FybWVhYmktdjdhJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9hcm0vc29mdGZwL3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBzaGFyZWRfY29uZmlndXJhdGlvbi5BbmRyb2lkQ29uZmlndXJhdGlvbignYW5kcm9pZC1hcm0nKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTExMDI5Mi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbICcuLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGknIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9hbmRyb2lkL2FybS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNkMTA4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsgJy4uL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2FybS90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm0vdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjg0YjU5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybS90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC9jb2JhbHQvX19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi9fX2luaXRfXy5weQpjb3B5IHRvIHN0YXJib2FyZC9hbmRyb2lkL2FybTY0L2NvYmFsdC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC9jb2JhbHQvY29uZmlndXJhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk5NWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJTdGFyYm9hcmQgQW5kcm9pZCBhcm02NCBDb2JhbHQgY29uZmlndXJhdGlvbi4iIiIKKworZnJvbSBzdGFyYm9hcmQuYW5kcm9pZC5zaGFyZWQuY29iYWx0IGltcG9ydCBjb25maWd1cmF0aW9uCitmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgorCisKK2NsYXNzIENvYmFsdEFuZHJvaWRBUk02NENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi5Db2JhbHRBbmRyb2lkQ29uZmlndXJhdGlvbik6CisgICIiIlN0YXJib2FyZCBBbmRyb2lkIGFybTY0IENvYmFsdCBjb25maWd1cmF0aW9uLiIiIgorCisgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKKyAgICBmaWx0ZXJzID0gc3VwZXIoQ29iYWx0QW5kcm9pZEFSTTY0Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19GSUxURVJFRF9URVNUUy5pdGVtcygpOgorICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQorICAgIHJldHVybiBmaWx0ZXJzCisKKyAgIyBweWxpbnQ6ZGlzYWJsZT1saW5lLXRvby1sb25nCisgICMgQSBtYXAgb2YgZmFpbGluZyBvciBjcmFzaGluZyB0ZXN0cyBwZXIgdGFyZ2V0CisgIF9fRklMVEVSRURfVEVTVFMgPSB7ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKKyAgICAgICduZXRfdW5pdHRlc3RzJzogWworICAgICAgICAgICMgTmV0bGlua0Nvbm5lY3Rpb246OlNlbmRSZXF1ZXN0KCkgZmFpbHMsIHNlbmQoKSBmYWlsZWQsIGVycm5vPTEzLgorICAgICAgICAgICdEaWFsSHR0cFNlcnZlclRlc3QuKicsCisgICAgICBdLAorICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzMDA4MC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnYXJtX3ZlcnNpb24nOiA4LAotICAgICdhcm12Nyc6IDAsCi0gICAgJ2FybV90aHVtYic6IDAsCi0gICAgJ2FybV9uZW9uJzogMCwKLSAgICAnYXJtX2ZwdSc6ICd2ZnB2My1kMTYnLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdhbmRyb2lkLWFybTY0X2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnYW5kcm9pZC1hcm02NF9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdhbmRyb2lkLWFybTY0X2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2FuZHJvaWQtYXJtNjRfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm02NF9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggMmUyMTQyNS4uZDY0MjUxZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKQEAgLTE3LDcgKzE3LDQgQEAKIAogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIHNoYXJlZF9jb25maWd1cmF0aW9uLkFuZHJvaWRDb25maWd1cmF0aW9uKAotICAgICAgJ2FuZHJvaWQtYXJtNjQnLAotICAgICAgJ2FybTY0LXY4YScsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtNjQvc2FiaS12e3NiX2FwaV92ZXJzaW9ufS5qc29uJykKKyAgcmV0dXJuIHNoYXJlZF9jb25maWd1cmF0aW9uLkFuZHJvaWRDb25maWd1cmF0aW9uKCdhbmRyb2lkLWFybTY0JykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTEwMjkyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWyAnLi4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpJyBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4Y2QxMDguLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbICcuLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cGknIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC90ZXN0X2ZpbHRlcnMucHkKaW5kZXggZTA0NTRjYS4uM2IzMDFkZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdGVzdF9maWx0ZXJzLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Rlc3RfZmlsdGVycy5weQpAQCAtMTQsNiArMTQsMjIgQEAKICIiIlN0YXJib2FyZCBBbmRyb2lkIEFSTS02NCBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCiAKIGZyb20gc3RhcmJvYXJkLmFuZHJvaWQuc2hhcmVkIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgc2hhcmVkX3Rlc3RfZmlsdGVycworZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKKworIyBweWxpbnQ6ZGlzYWJsZT1saW5lLXRvby1sb25nCisjIEEgbWFwIG9mIGZhaWxpbmcgb3IgY3Jhc2hpbmcgdGVzdHMgcGVyIHRhcmdldC4KK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAnbnBsYic6IFsKKyAgICAgICAgIyBOZXRsaW5rQ29ubmVjdGlvbjo6U2VuZFJlcXVlc3QoKSBmYWlscywgc2VuZCgpIGZhaWxlZCwgZXJybm89MTMuCisgICAgICAgICdTYlNvY2tldEJpbmRUZXN0LlN1bm55RGF5TG9jYWxJbnRlcmZhY2UnLAorICAgICAgICAnU2JTb2NrZXRHZXRJbnRlcmZhY2VBZGRyZXNzVGVzdC5TdW5ueURheScsCisgICAgICAgICdTYlNvY2tldEdldEludGVyZmFjZUFkZHJlc3NUZXN0LlN1bm55RGF5TnVsbERlc3RpbmF0aW9uJywKKyAgICAgICAgJ1NiU29ja2V0R2V0TG9jYWxBZGRyZXNzVGVzdC5TdW5ueURheUJvdW5kU3BlY2lmaWVkJywKKyAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlEZXN0aW5hdGlvbi8qJywKKyAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VGb3JEZXN0aW5hdGlvbi8qJywKKyAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VOb3RMb29wYmFjay8qJywKKyAgICBdLAorfQogCiAKIGRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgpAQCAtMjUsNCArNDEsNiBAQAogCiAgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKICAgICBmaWx0ZXJzID0gc3VwZXIoQW5kcm9pZEFybTY0VGVzdEZpbHRlcnMsIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBfRklMVEVSRURfVEVTVFMuaXRlbXMoKToKKyAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKICAgICByZXR1cm4gZmlsdGVycwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjg0YjU5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmgiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGUyMDZhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnYXJtX3ZlcnNpb24nOiA4LAotICAgICdhcm12Nyc6IDAsCi0gICAgJ2FybV90aHVtYic6IDAsCi0gICAgJ2FybV9uZW9uJzogMCwKLSAgICAnYXJtX2ZwdSc6ICd2ZnB2My1kMTYnLAotCi0gICAgJ2VuYWJsZV92dWxrYW4nOiAxLAotCi0gICAgJ3BsYXRmb3JtX2xpYnJhcmllcyc6IFsKLSAgICAgICctbGMrK19zaGFyZWQnLAotICAgICAgJy1sRUdMX2FuZ2xlJywKLSAgICAgICctbEdMRVN2Ml9hbmdsZScsCi0gICAgICAnLWxHTEVTdjFfQ01fYW5nbGUnLAotICAgICAgJy1sZmVhdHVyZV9zdXBwb3J0X2FuZ2xlJywKLSAgICAgICctbE9wZW5TTEVTJywKLSAgICAgICctbGFuZHJvaWQnLAotICAgICAgJy1sbG9nJywKLSAgICAgICctbG1lZGlhbmRrJywKLSAgICBdLAotCi0gICAgJ2xpbmtlcl9mbGFncyc6IFsKLSAgICAgICctV2wnLAotICAgICAgJy0tdmVyYm9zZScsCi0gICAgICAnLUxsaWInLAotICAgIF0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2FuZHJvaWQtYXJtNjQtdnVsa2FuX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW5fZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW5fZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW5fcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW5fZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggMWMxZGY3Ny4uM2QzOWJmYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdnVsa2FuL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMTcsNyArMTcsNCBAQAogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gc2hhcmVkX2NvbmZpZ3VyYXRpb24uQW5kcm9pZENvbmZpZ3VyYXRpb24oCi0gICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW4nLAotICAgICAgJ2FybTY0LXY4YScsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtNjQvc2FiaS12e3NiX2FwaV92ZXJzaW9ufS5qc29uJykKKyAgcmV0dXJuIHNoYXJlZF9jb25maWd1cmF0aW9uLkFuZHJvaWRDb25maWd1cmF0aW9uKCdhbmRyb2lkLWFybTY0LXZ1bGthbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjA1NzIzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdnVsa2FuL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIyMjZjZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvYW5kcm9pZC9hcm02NC92dWxrYW4vdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDk4MGY3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL2FybTY0L3Z1bGthbi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0FORFJPSURfQVJNNjRfVlVMS0FOX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0FORFJPSURfQVJNNjRfVlVMS0FOX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0FORFJPSURfQVJNNjRfVlVMS0FOX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL2V4YW1wbGVzL292ZXJsYXlzL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9zdGFyYm9hcmQvYW5kcm9pZC9leGFtcGxlcy9vdmVybGF5cy9BbmRyb2lkTWFuaWZlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4OGZlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9leGFtcGxlcy9vdmVybGF5cy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICBwYWNrYWdlPSJkZXYuY29iYWx0LmNvYXQucnJvIj4KKworICA8YXBwbGljYXRpb24gYW5kcm9pZDpoYXNDb2RlPSJmYWxzZSIgLz4KKyAgPG92ZXJsYXkgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJkZXYuY29iYWx0LmNvYXQiCisgICAgICAgICAgIGFuZHJvaWQ6dGFyZ2V0TmFtZT0iQ29iYWx0T3ZlcmxheSIKKyAgICAgICAgICAgYW5kcm9pZDpyZXNvdXJjZXNNYXA9IkB4bWwvb3ZlcmxheXMiLz4KKzwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9leGFtcGxlcy9vdmVybGF5cy9yZXMveG1sL292ZXJsYXlzLnhtbCBiL3N0YXJib2FyZC9hbmRyb2lkL2V4YW1wbGVzL292ZXJsYXlzL3Jlcy94bWwvb3ZlcmxheXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzAwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9leGFtcGxlcy9vdmVybGF5cy9yZXMveG1sL292ZXJsYXlzLnhtbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPG92ZXJsYXk+CisgIDwhLS0gVGhpcyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIDM2MCB2aWRlb3MgY2FuIGJlIHBsYXllZC4gLS0+CisgIDxpdGVtIHRhcmdldD0iYm9vbC9zdXBwb3J0c19zcGhlcmljYWxfdmlkZW9zIiB2YWx1ZT0idHJ1ZSIgLz4KKyAgPCEtLQorICAgIFdoZW4gc2V0LCB0aGUgcmV0dXJuIHZhbHVlIG9mIFNiTWVkaWFHZXRWaWRlb0J1ZmZlckJ1ZGdldCgpIGlzIGNhcHBlZCB0bworICAgIHRoaXMgdmFsdWUgaW4gTUIuIFNldCB0byAwIHRvIHVzZSBkZWZhdWx0IHZhbHVlcy4KKyAgLS0+CisgIDxpdGVtIHRhcmdldD0iaW50ZWdlci9tYXhfdmlkZW9fYnVmZmVyX2J1ZGdldCIgdmFsdWU9IjAiIC8+Cis8L292ZXJsYXk+CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvQlVJTEQuZ24gYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvQlVJTEQuZ24KaW5kZXggZDJhYzZjMi4uNTk5YmQ3ZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9CVUlMRC5nbgpAQCAtMTcsMTYgKzE3LDkgQEAKIGltcG9ydCgiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvYnVpbGRmaWxlcy5nbmkiKQogaW1wb3J0KCIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfdGVzdHMuZ25pIikKIAotY29uZmlnKCJzdGFyYm9hcmRfcGxhdGZvcm1fY29uZmlnIikgewotICBpbmNsdWRlX2RpcnMgPSBbICJiaW9uaWMiIF0KLX0KLQogc3RhdGljX2xpYnJhcnkoInN0YXJib2FyZF9wbGF0Zm9ybSIpIHsKICAgc291cmNlcyA9IFsKICAgICAiJHRhcmdldF9nZW5fZGlyL25kay1zb3VyY2VzL2NwdS1mZWF0dXJlcy5jIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9tYXAuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X3Byb3RlY3QuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X3VubWFwLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2VnbC9zeXN0ZW1fZWdsLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2djYy9hdG9taWNfZ2NjX3B1YmxpYy5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2dsZXMvZ2xfY2FsbC5oIiwKQEAgLTgwLDggKzczLDYgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2J5dGVfc3dhcC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9jcHVfZmVhdHVyZXNfZ2V0LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L21lbW9yeV9nZXRfc3RhY2tfYm91bmRzLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3JhbmRvbV9kYXRhLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfdG90YWxfY3B1X21lbW9yeS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3VzZWRfY3B1X21lbW9yeS5jYyIsCkBAIC05Nyw2ICs4OCw3IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2RpcmVjdG9yeV9jcmVhdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZW52aXJvbm1lbnQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9hdG9taWNfcmVwbGFjZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfY2FuX29wZW4uaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfY2xvc2UuaCIsCkBAIC0xMTIsNiArMTA0LDEwIEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2ZsdXNoLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9mcmVlX2FsaWduZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X21hcC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfcHJvdGVjdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfdW5tYXAuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvcGFnZV9pbnRlcm5hbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zZXRfbm9uX2Jsb2NraW5nX2ludGVybmFsLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9hY2NlcHQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2JpbmQuY2MiLApAQCAtMTc3LDcgKzE3Myw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9qb2luLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NldF9sb2NhbF92YWx1ZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF95aWVsZC5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9jcmFzaF9zaWduYWxzLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL2NyYXNoX3NpZ25hbHNfc2lnYWN0aW9uLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9zdXNwZW5kX3NpZ25hbHMuY2MiLApAQCAtMjI0LDcgKzIxOSw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9wYWRkaW5nLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3N0b3JhZ2VfdHlwZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfdXNpbmdfbWVtb3J5X3Bvb2wuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWltZV90eXBlLmgiLApAQCAtMjQ5LDEyICsyNDMsNiBAQAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9jaGVja2VyLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3dpbmRvd19zZXRfZGVmYXVsdF9vcHRpb25zLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lci5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9kZXN0cm95X3RyYW5zZm9ybWVyLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2RlY29kZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2lzX2RlY29kZV9zdXBwb3J0ZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9zZXRfYXVkaW9fd3JpdGVfZHVyYXRpb24uY2MiLApAQCAtMjk5LDEzICsyODcsNiBAQAogICAgICJhdWRpb190cmFja19hdWRpb19zaW5rX3R5cGUuaCIsCiAgICAgImF1ZGlvX3RyYWNrX2JyaWRnZS5jYyIsCiAgICAgImF1ZGlvX3RyYWNrX2JyaWRnZS5oIiwKLSAgICAiYmlvbmljL2Jpb25pY19uZXRsaW5rLmNwcCIsCi0gICAgImJpb25pYy9iaW9uaWNfbmV0bGluay5oIiwKLSAgICAiYmlvbmljL2lmYWRkcnMuY3BwIiwKLSAgICAiYmlvbmljL2lmYWRkcnMuaCIsCi0gICAgImJpb25pYy9uZXRfaWYuY3BwIiwKLSAgICAiYmlvbmljL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oIiwKLSAgICAiYmlvbmljL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oIiwKICAgICAiY29uZmlndXJhdGlvbi5jYyIsCiAgICAgImNvbmZpZ3VyYXRpb24uaCIsCiAgICAgImNvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmNjIiwKQEAgLTMzOCw2ICszMTksOCBAQAogICAgICJmaWxlX3RydW5jYXRlLmNjIiwKICAgICAiZmlsZV93cml0ZS5jYyIsCiAgICAgImdldF9ob21lX2RpcmVjdG9yeS5jYyIsCisgICAgImdyYXBoaWNzLmNjIiwKKyAgICAiZ3JhcGhpY3MuaCIsCiAgICAgImlucHV0X2V2ZW50c19nZW5lcmF0b3IuY2MiLAogICAgICJpbnB1dF9ldmVudHNfZ2VuZXJhdG9yLmgiLAogICAgICJqbmlfZW52X2V4dC5jYyIsCkBAIC0zNjAsNiArMzQzLDcgQEAKICAgICAibWVkaWFfZ2V0X2F1ZGlvX291dHB1dF9jb3VudC5jYyIsCiAgICAgIm1lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYyIsCiAgICAgIm1lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjIiwKKyAgICAibWVkaWFfZ2V0X3ZpZGVvX2J1ZmZlcl9idWRnZXQuY2MiLAogICAgICJtZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MiLAogICAgICJtZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MiLAogICAgICJtZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MiLApAQCAtMzczLDYgKzM1Nyw3IEBACiAgICAgInBsYXllcl9zZXRfYm91bmRzLmNjIiwKICAgICAicGxheWVyX3NldF9wbGF5YmFja19yYXRlLmNjIiwKICAgICAic2FuaXRpemVyX29wdGlvbnMuY2MiLAorICAgICJzb2NrZXRfZ2V0X2ludGVyZmFjZV9hZGRyZXNzLmNjIiwKICAgICAic3BlZWNoX3N5bnRoZXNpc19jYW5jZWwuY2MiLAogICAgICJzcGVlY2hfc3ludGhlc2lzX2ludGVybmFsLmNjIiwKICAgICAic3BlZWNoX3N5bnRoZXNpc19pc19zdXBwb3J0ZWQuY2MiLApAQCAtMzk0LDcgKzM3OSw2IEBACiAgICAgInRocmVhZF9jcmVhdGUuY2MiLAogICAgICJ0aHJlYWRfY3JlYXRlX3ByaW9yaXR5LmNjIiwKICAgICAidGhyZWFkX2dldF9uYW1lLmNjIiwKLSAgICAidGhyZWFkX3R5cGVzX3B1YmxpYy5oIiwKICAgICAidGltZV96b25lX2dldF9uYW1lLmNjIiwKICAgICAidHJhY2VfdXRpbC5oIiwKICAgICAidmlkZW9fZGVjb2Rlci5jYyIsCkBAIC00MzMsMTAgKzQxNyw3IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9zZXRfcGxheWJhY2tfcmF0ZS5jYyIsCiAgIF0KIAotICBjb25maWdzICs9IFsKLSAgICAiOnN0YXJib2FyZF9wbGF0Zm9ybV9jb25maWciLAotICAgICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c3RhcmJvYXJkX2ltcGxlbWVudGF0aW9uIiwKLSAgXQorICBjb25maWdzICs9IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iIF0KIAogICBwdWJsaWNfZGVwcyA9IFsKICAgICAiOm5ka19zb3VyY2VzIiwKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9hcHBsaWNhdGlvbl9hbmRyb2lkLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FwcGxpY2F0aW9uX2FuZHJvaWQuY2MKaW5kZXggZjI5ODZlNy4uYjJlZWNmNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FwcGxpY2F0aW9uX2FuZHJvaWQuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FwcGxpY2F0aW9uX2FuZHJvaWQuY2MKQEAgLTExNiw5ICsxMTYsMjAgQEAKICAga2V5Ym9hcmRfaW5qZWN0X3dyaXRlZmRfID0gcGlwZWZkWzFdOwogICBBTG9vcGVyX2FkZEZkKGxvb3Blcl8sIGtleWJvYXJkX2luamVjdF9yZWFkZmRfLCBrTG9vcGVySWRLZXlib2FyZEluamVjdCwKICAgICAgICAgICAgICAgICBBTE9PUEVSX0VWRU5UX0lOUFVULCBOVUxMLCBOVUxMKTsKKworICBKbmlFbnZFeHQqIGVudiA9IEpuaUVudkV4dDo6R2V0KCk7CisgIGpvYmplY3QgbG9jYWxfcmVmID0gZW52LT5DYWxsU3RhcmJvYXJkT2JqZWN0TWV0aG9kT3JBYm9ydCgKKyAgICAgICJnZXRSZXNvdXJjZU92ZXJsYXkiLCAiKClMZGV2L2NvYmFsdC9jb2F0L1Jlc291cmNlT3ZlcmxheTsiKTsKKyAgcmVzb3VyY2Vfb3ZlcmxheV8gPSBlbnYtPkNvbnZlcnRMb2NhbFJlZlRvR2xvYmFsUmVmKGxvY2FsX3JlZik7CiB9CiAKIEFwcGxpY2F0aW9uQW5kcm9pZDo6fkFwcGxpY2F0aW9uQW5kcm9pZCgpIHsKKyAgLy8gUmVsZWFzZSB0aGUgZ2xvYmFsIHJlZmVyZW5jZS4KKyAgaWYgKHJlc291cmNlX292ZXJsYXlfKSB7CisgICAgSm5pRW52RXh0KiBlbnYgPSBKbmlFbnZFeHQ6OkdldCgpOworICAgIGVudi0+RGVsZXRlR2xvYmFsUmVmKHJlc291cmNlX292ZXJsYXlfKTsKKyAgICByZXNvdXJjZV9vdmVybGF5XyA9IG51bGxwdHI7CisgIH0KICAgQUxvb3Blcl9yZW1vdmVGZChsb29wZXJfLCBhbmRyb2lkX2NvbW1hbmRfcmVhZGZkXyk7CiAgIGNsb3NlKGFuZHJvaWRfY29tbWFuZF9yZWFkZmRfKTsKICAgY2xvc2UoYW5kcm9pZF9jb21tYW5kX3dyaXRlZmRfKTsKQEAgLTQ3OSwxNyArNDkwLDkgQEAKIEphdmFfZGV2X2NvYmFsdF9jb2F0X0tleWJvYXJkSW5wdXRDb25uZWN0aW9uX25hdGl2ZUhhc09uU2NyZWVuS2V5Ym9hcmQoCiAgICAgSm5pRW52RXh0KiBlbnYsCiAgICAgam9iamVjdCB1bnVzZWRfdGhpcykgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHJldHVybiBTYldpbmRvd09uU2NyZWVuS2V5Ym9hcmRJc1N1cHBvcnRlZCgpID8gSk5JX1RSVUUgOiBKTklfRkFMU0U7Ci0jZWxpZiBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotICByZXR1cm4gSk5JX1RSVUU7Ci0jZWxzZQotICByZXR1cm4gSk5JX0ZBTFNFOwotI2VuZGlmCiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotCiB2b2lkIEFwcGxpY2F0aW9uQW5kcm9pZDo6U2JXaW5kb3dTaG93T25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnB1dF90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpY2tldCkgewpAQCAtNTgxLDkgKzU4NCw2IEBACiAgIHJldHVybjsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotCiBib29sIEFwcGxpY2F0aW9uQW5kcm9pZDo6T25TZWFyY2hSZXF1ZXN0ZWQoKSB7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAgICAgU2JJbnB1dERhdGEqIGRhdGEgPSBuZXcgU2JJbnB1dERhdGEoKTsKQEAgLTY4MSw2ICs2ODEsNDQgQEAKICAgQXBwbGljYXRpb25BbmRyb2lkOjpHZXQoKS0+U2VuZERhdGVUaW1lQ29uZmlndXJhdGlvbkNoYW5nZWRFdmVudCgpOwogfQogCitpbnQgQXBwbGljYXRpb25BbmRyb2lkOjpHZXRPdmVybGF5ZWRJbnRWYWx1ZShjb25zdCBjaGFyKiB2YXJfbmFtZSkgeworICBTY29wZWRMb2NrIGxvY2sob3ZlcmxheV9tdXRleF8pOworICBpZiAob3ZlcmxheWVkX2ludF92YXJpYWJsZXNfLmZpbmQodmFyX25hbWUpICE9CisgICAgICBvdmVybGF5ZWRfaW50X3ZhcmlhYmxlc18uZW5kKCkpIHsKKyAgICByZXR1cm4gb3ZlcmxheWVkX2ludF92YXJpYWJsZXNfW3Zhcl9uYW1lXTsKKyAgfQorICBKbmlFbnZFeHQqIGVudiA9IEpuaUVudkV4dDo6R2V0KCk7CisgIGppbnQgdmFsdWUgPSBlbnYtPkdldEludEZpZWxkT3JBYm9ydChyZXNvdXJjZV9vdmVybGF5XywgdmFyX25hbWUsICJJIik7CisgIG92ZXJsYXllZF9pbnRfdmFyaWFibGVzX1t2YXJfbmFtZV0gPSB2YWx1ZTsKKyAgcmV0dXJuIHZhbHVlOworfQorCitzdGQ6OnN0cmluZyBBcHBsaWNhdGlvbkFuZHJvaWQ6OkdldE92ZXJsYXllZFN0cmluZ1ZhbHVlKGNvbnN0IGNoYXIqIHZhcl9uYW1lKSB7CisgIFNjb3BlZExvY2sgbG9jayhvdmVybGF5X211dGV4Xyk7CisgIGlmIChvdmVybGF5ZWRfc3RyaW5nX3ZhcmlhYmxlc18uZmluZCh2YXJfbmFtZSkgIT0KKyAgICAgIG92ZXJsYXllZF9zdHJpbmdfdmFyaWFibGVzXy5lbmQoKSkgeworICAgIHJldHVybiBvdmVybGF5ZWRfc3RyaW5nX3ZhcmlhYmxlc19bdmFyX25hbWVdOworICB9CisgIEpuaUVudkV4dCogZW52ID0gSm5pRW52RXh0OjpHZXQoKTsKKyAgc3RkOjpzdHJpbmcgdmFsdWUgPSBlbnYtPkdldFN0cmluZ1N0YW5kYXJkVVRGT3JBYm9ydCgKKyAgICAgIGVudi0+R2V0U3RyaW5nRmllbGRPckFib3J0KHJlc291cmNlX292ZXJsYXlfLCB2YXJfbmFtZSkpOworICBvdmVybGF5ZWRfc3RyaW5nX3ZhcmlhYmxlc19bdmFyX25hbWVdID0gdmFsdWU7CisgIHJldHVybiB2YWx1ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbkFuZHJvaWQ6OkdldE92ZXJsYXllZEJvb2xWYWx1ZShjb25zdCBjaGFyKiB2YXJfbmFtZSkgeworICBTY29wZWRMb2NrIGxvY2sob3ZlcmxheV9tdXRleF8pOworICBpZiAob3ZlcmxheWVkX2Jvb2xfdmFyaWFibGVzXy5maW5kKHZhcl9uYW1lKSAhPQorICAgICAgb3ZlcmxheWVkX2Jvb2xfdmFyaWFibGVzXy5lbmQoKSkgeworICAgIHJldHVybiBvdmVybGF5ZWRfYm9vbF92YXJpYWJsZXNfW3Zhcl9uYW1lXTsKKyAgfQorICBKbmlFbnZFeHQqIGVudiA9IEpuaUVudkV4dDo6R2V0KCk7CisgIGpib29sZWFuIHZhbHVlID0KKyAgICAgIGVudi0+R2V0Qm9vbGVhbkZpZWxkT3JBYm9ydChyZXNvdXJjZV9vdmVybGF5XywgdmFyX25hbWUsICJaIik7CisgIG92ZXJsYXllZF9ib29sX3ZhcmlhYmxlc19bdmFyX25hbWVdID0gdmFsdWU7CisgIHJldHVybiB2YWx1ZTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAogfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9hcHBsaWNhdGlvbl9hbmRyb2lkLmggYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYXBwbGljYXRpb25fYW5kcm9pZC5oCmluZGV4IGExYzkyYTYuLjJkMTQ3ZWIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9hcHBsaWNhdGlvbl9hbmRyb2lkLmgKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FwcGxpY2F0aW9uX2FuZHJvaWQuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFuZHJvaWQvbG9vcGVyLmg+CiAjaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93Lmg+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2lucHV0X2V2ZW50c19nZW5lcmF0b3IuaCIKQEAgLTk2LDYgKzk3LDE0IEBACiAKICAgdm9pZCBTZW5kRGF0ZVRpbWVDb25maWd1cmF0aW9uQ2hhbmdlZEV2ZW50KCk7CiAKKyAgLy8gTWV0aG9kcyB0byBnZXQgdGhlIFJ1bnRpbWUgUmVzb3VyY2UgT3ZlcmxheSB2YXJpYWJsZXMuCisgIC8vIEFsbCBSUk8gdmFyaWFibGVzIHdoaWNoIGNhbiBiZSByZXRyaWV2ZWQgaGVyZSBtdXN0IGJlIGRlZmluZWQKKyAgLy8gaW4gcmVzL3ZhbHVlcy9ycm9fdmFyaWFibGVzLnhtbCBhbmQgYmUgbG9hZGVkIGluCisgIC8vIGRldi9jb2JhbHQvY29hdC9SZXNvdXJjZU92ZXJsYXkuamF2YS4KKyAgaW50IEdldE92ZXJsYXllZEludFZhbHVlKGNvbnN0IGNoYXIqIHZhcl9uYW1lKTsKKyAgc3RkOjpzdHJpbmcgR2V0T3ZlcmxheWVkU3RyaW5nVmFsdWUoY29uc3QgY2hhciogdmFyX25hbWUpOworICBib29sIEdldE92ZXJsYXllZEJvb2xWYWx1ZShjb25zdCBjaGFyKiB2YXJfbmFtZSk7CisKICAgLy8gTWV0aG9kcyB0byBzdGFydC9zdG9wIE1lZGlhIHBsYXliYWNrIHNlcnZpY2UuCiAgIHZvaWQgU3RhcnRNZWRpYVBsYXliYWNrU2VydmljZSgpOwogICB2b2lkIFN0b3BNZWRpYVBsYXliYWNrU2VydmljZSgpOwpAQCAtMTM5LDYgKzE0OCwxMyBAQAogCiAgIGJvb2wgbGFzdF9pc19hY2Nlc3NpYmlsaXR5X2hpZ2hfY29udHJhc3RfdGV4dF9lbmFibGVkXzsKIAorICBqb2JqZWN0IHJlc291cmNlX292ZXJsYXlfOworCisgIE11dGV4IG92ZXJsYXlfbXV0ZXhfOworICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG92ZXJsYXllZF9ib29sX3ZhcmlhYmxlc187CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgaW50PiBvdmVybGF5ZWRfaW50X3ZhcmlhYmxlc187CisgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG92ZXJsYXllZF9zdHJpbmdfdmFyaWFibGVzXzsKKwogICAvLyBNZXRob2RzIHRvIHByb2Nlc3MgcGlwZXMgYXR0YWNoZWQgdG8gdGhlIExvb3Blci4KICAgdm9pZCBQcm9jZXNzQW5kcm9pZENvbW1hbmQoKTsKICAgdm9pZCBQcm9jZXNzQW5kcm9pZElucHV0KCk7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL1JFQURNRS5tZCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTRjZmU3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyBpcyBhIHBhcnRpYWwgZm9yayBvZiB0aGUgQW5kcm9pZCBiaW9uaWMgQyBsaWJyYXJ5LCB0YWtlbiBmcm9tOgotCi1odHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9iaW9uaWMvKy81ZTYyYjM0YzBkNmZhNTQ1YjQ4N2I5YjY0ZmI0YTA0YTA1ODliYzEzL2xpYmMKLQotCi1UaGUgcHVycG9zZSBpcyB0byBidWlsZCBpbnRvIHRoZSBBbmRyb2lkIFN0YXJib2FyZCBwb3J0IG5lY2VzYXJ5IHBhcnRzIG9mIGJpb25pYwotdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgdmVyc2lvbnMgb2YgQW5kcm9pZCB0aGF0IHdlIHN1cHBvcnQsIGluY2x1ZGluZzoKLQotKiBgaWZhZGRyc2AgKGFuZCBpdHMgZGVwZW5kZW5jaWVzKSAtIFVzZWQgYnkgYFNiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc2AsIGJ1dAotICBub3QgYXZhaWxhYmxlIHVudGlsIEFQSSAyNC4KLQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9iaW9uaWNfbmV0bGluay5jcHAgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL2Jpb25pY19uZXRsaW5rLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI0NDlkYy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL2Jpb25pY19uZXRsaW5rLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImJpb25pY19uZXRsaW5rLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KLSNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKLQotTmV0bGlua0Nvbm5lY3Rpb246Ok5ldGxpbmtDb25uZWN0aW9uKCkgewotICBmZF8gPSAtMTsKLQotICAvLyBUaGUga2VybmVsIGtlZXBzIHBhY2tldHMgdW5kZXIgOEtpQiAoTkxNU0dfR09PRFNJWkUpLAotICAvLyBidXQgdGhhdCdzIGEgYml0IHRvbyBsYXJnZSB0byBnbyBvbiB0aGUgc3RhY2suCi0gIHNpemVfID0gODE5MjsKLSAgZGF0YV8gPSBuZXcgY2hhcltzaXplX107Ci19Ci0KLU5ldGxpbmtDb25uZWN0aW9uOjp+TmV0bGlua0Nvbm5lY3Rpb24oKSB7Ci0gIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7Ci0gIGlmIChmZF8gIT0gLTEpIGNsb3NlKGZkXyk7Ci0gIGRlbGV0ZVtdIGRhdGFfOwotfQotCi1ib29sIE5ldGxpbmtDb25uZWN0aW9uOjpTZW5kUmVxdWVzdChpbnQgdHlwZSkgewotICAvLyBSYXRoZXIgdGhhbiBmb3JjZSBhbGwgY2FsbGVycyB0byBjaGVjayBmb3IgdGhlIHVubGlrZWx5IGV2ZW50IG9mIGJlaW5nCi0gIC8vIHVuYWJsZSB0byBhbGxvY2F0ZSA4S2lCLCBjaGVjayBoZXJlLgotICBpZiAoZGF0YV8gPT0gbnVsbHB0cikgcmV0dXJuIGZhbHNlOwotCi0gIC8vIERpZCB3ZSBvcGVuIGEgbmV0bGluayBzb2NrZXQgeWV0PwotICBpZiAoZmRfID09IC0xKSB7Ci0gICAgZmRfID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfUkFXIHwgU09DS19DTE9FWEVDLCBORVRMSU5LX1JPVVRFKTsKLSAgICBpZiAoZmRfID09IC0xKSByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDb25zdHJ1Y3QgYW5kIHNlbmQgdGhlIG1lc3NhZ2UuCi0gIHN0cnVjdCBOZXRsaW5rTWVzc2FnZSB7Ci0gICAgbmxtc2doZHIgaGRyOwotICAgIHJ0Z2VubXNnIG1zZzsKLSAgfSByZXF1ZXN0OwotICBtZW1zZXQoJnJlcXVlc3QsIDAsIHNpemVvZihyZXF1ZXN0KSk7Ci0gIHJlcXVlc3QuaGRyLm5sbXNnX2ZsYWdzID0gTkxNX0ZfRFVNUCB8IE5MTV9GX1JFUVVFU1Q7Ci0gIHJlcXVlc3QuaGRyLm5sbXNnX3R5cGUgPSB0eXBlOwotICByZXF1ZXN0Lmhkci5ubG1zZ19sZW4gPSBzaXplb2YocmVxdWVzdCk7Ci0gIHJlcXVlc3QubXNnLnJ0Z2VuX2ZhbWlseSA9IEFGX1VOU1BFQzsgLy8gQWxsIGZhbWlsaWVzLgotICByZXR1cm4gKFRFTVBfRkFJTFVSRV9SRVRSWShzZW5kKGZkXywgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSwgMCkpID09IHNpemVvZihyZXF1ZXN0KSk7Ci19Ci0KLWJvb2wgTmV0bGlua0Nvbm5lY3Rpb246OlJlYWRSZXNwb25zZXModm9pZCBjYWxsYmFjayh2b2lkKiwgbmxtc2doZHIqKSwgdm9pZCogY29udGV4dCkgewotICAvLyBSZWFkIHRocm91Z2ggYWxsIHRoZSByZXNwb25zZXMsIGhhbmRpbmcgaW50ZXJlc3Rpbmcgb25lcyB0byB0aGUgY2FsbGJhY2suCi0gIHNzaXplX3QgYnl0ZXNfcmVhZDsKLSAgd2hpbGUgKChieXRlc19yZWFkID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlY3YoZmRfLCBkYXRhXywgc2l6ZV8sIDApKSkgPiAwKSB7Ci0gICAgbmxtc2doZHIqIGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bmxtc2doZHIqPihkYXRhXyk7Ci0gICAgZm9yICg7IE5MTVNHX09LKGhkciwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc19yZWFkKSk7IGhkciA9IE5MTVNHX05FWFQoaGRyLCBieXRlc19yZWFkKSkgewotICAgICAgaWYgKGhkci0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKSByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChoZHItPm5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IpIHsKLSAgICAgICAgbmxtc2dlcnIqIGVyciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bmxtc2dlcnIqPihOTE1TR19EQVRBKGhkcikpOwotICAgICAgICBlcnJubyA9IChoZHItPm5sbXNnX2xlbiA+PSBOTE1TR19MRU5HVEgoc2l6ZW9mKG5sbXNnZXJyKSkpID8gLWVyci0+ZXJyb3IgOiBFSU87Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGNhbGxiYWNrKGNvbnRleHQsIGhkcik7Ci0gICAgfQotICB9Ci0KLSAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiByZWN2IGZhaWxzIGJlZm9yZSB3ZSBzZWUgYSBOTE1TR19ET05FLgotICByZXR1cm4gZmFsc2U7Ci19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL2Jpb25pY19uZXRsaW5rLmggYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL2Jpb25pY19uZXRsaW5rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMTIwMGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9iaW9uaWNfbmV0bGluay5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgotCi1zdHJ1Y3Qgbmxtc2doZHI7Ci0KLWNsYXNzIE5ldGxpbmtDb25uZWN0aW9uIHsKLSBwdWJsaWM6Ci0gIE5ldGxpbmtDb25uZWN0aW9uKCk7Ci0gIH5OZXRsaW5rQ29ubmVjdGlvbigpOwotCi0gIGJvb2wgU2VuZFJlcXVlc3QoaW50IHR5cGUpOwotICBib29sIFJlYWRSZXNwb25zZXModm9pZCBjYWxsYmFjayh2b2lkKiwgbmxtc2doZHIqKSwgdm9pZCogY29udGV4dCk7Ci0KLSBwcml2YXRlOgotICBpbnQgZmRfOwotICBjaGFyKiBkYXRhXzsKLSAgc2l6ZV90IHNpemVfOwotfTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvaWZhZGRycy5jcHAgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL2lmYWRkcnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWIwODBjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvaWZhZGRycy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8aWZhZGRycy5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgotCi0jaW5jbHVkZSAiYmlvbmljX25ldGxpbmsuaCIKLQotLy8gVGhlIHB1YmxpYyBpZmFkZHJzIHN0cnVjdCBpcyBmdWxsIG9mIHBvaW50ZXJzLiBSYXRoZXIgdGhhbiB0cmFjayBzZXZlcmFsCi0vLyBkaWZmZXJlbnQgYWxsb2NhdGlvbnMsIHdlIHVzZSBhIG1heGltYWxseS1zaXplZCBzdHJ1Y3R1cmUgd2l0aCB0aGUgcHVibGljCi0vLyBwYXJ0IGF0IG9mZnNldCAwLCBhbmQgcG9pbnRlcnMgaW50byBpdHMgaGlkZGVuIHRhaWwuCi1zdHJ1Y3QgaWZhZGRyc19zdG9yYWdlIHsKLSAgLy8gTXVzdCBjb21lIGZpcnN0LCBzbyB0aGF0IGBpZmFkZHJzX3N0b3JhZ2VgIGlzLWEgYGlmYWRkcnNgLgotICBpZmFkZHJzIGlmYTsKLQotICAvLyBUaGUgaW50ZXJmYWNlIGluZGV4LCBzbyB3ZSBjYW4gbWF0Y2ggUlRNX05FV0FERFIgbWVzc2FnZXMgd2l0aAotICAvLyBlYXJsaWVyIFJUTV9ORVdMSU5LIG1lc3NhZ2VzICh0byBjb3B5IHRoZSBpbnRlcmZhY2UgZmxhZ3MpLgotICBpbnQgaW50ZXJmYWNlX2luZGV4OwotCi0gIC8vIFN0b3JhZ2UgZm9yIHRoZSBwb2ludGVycyBpbiBgaWZhYC4KLSAgc29ja2FkZHJfc3RvcmFnZSBhZGRyOwotICBzb2NrYWRkcl9zdG9yYWdlIG5ldG1hc2s7Ci0gIHNvY2thZGRyX3N0b3JhZ2UgaWZhX2lmdTsKLSAgY2hhciBuYW1lW0lGTkFNU0laICsgMV07Ci0KLSAgZXhwbGljaXQgaWZhZGRyc19zdG9yYWdlKGlmYWRkcnMqKiBsaXN0KSB7Ci0gICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOwotCi0gICAgLy8gcHVzaF9mcm9udCBvbnRvIGBsaXN0YC4KLSAgICBpZmEuaWZhX25leHQgPSAqbGlzdDsKLSAgICAqbGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWZhZGRycyo+KHRoaXMpOwotICB9Ci0KLSAgdm9pZCBTZXRBZGRyZXNzKGludCBmYW1pbHksIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBieXRlQ291bnQpIHsKLSAgICAvLyBUaGUga2VybmVsIGN1cnJlbnRseSB1c2VzIHRoZSBvcmRlciBJRkFfQUREUkVTUywgSUZBX0xPQ0FMLCBJRkFfQlJPQURDQVNUCi0gICAgLy8gaW4gaW5ldF9maWxsX2lmYWRkciwgYnV0IGxldCdzIG5vdCBhc3N1bWUgdGhhdCB3aWxsIGFsd2F5cyBiZSB0cnVlLi4uCi0gICAgaWYgKGlmYS5pZmFfYWRkciA9PSBudWxscHRyKSB7Ci0gICAgICAvLyBUaGlzIGlzIGFuIElGQV9BRERSRVNTIGFuZCBoYXZlbid0IHNlZW4gYW4gSUZBX0xPQ0FMIHlldCwgc28gYXNzdW1lIHRoaXMgaXMgdGhlCi0gICAgICAvLyBsb2NhbCBhZGRyZXNzLiBTZXRMb2NhbEFkZHJlc3Mgd2lsbCBmaXggdGhpbmdzIGlmIHdlIGxhdGVyIHNlZSBhbiBJRkFfTE9DQUwuCi0gICAgICBpZmEuaWZhX2FkZHIgPSBDb3B5QWRkcmVzcyhmYW1pbHksIGRhdGEsIGJ5dGVDb3VudCwgJmFkZHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBXZSBhbHJlYWR5IHNhdyBhbiBJRkFfTE9DQUwsIHdoaWNoIGltcGxpZXMgdGhpcyBpcyBhIGRlc3RpbmF0aW9uIGFkZHJlc3MuCi0gICAgICBpZmEuaWZhX2RzdGFkZHIgPSBDb3B5QWRkcmVzcyhmYW1pbHksIGRhdGEsIGJ5dGVDb3VudCwgJmlmYV9pZnUpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgU2V0QnJvYWRjYXN0QWRkcmVzcyhpbnQgZmFtaWx5LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgYnl0ZUNvdW50KSB7Ci0gICAgLy8gaWZhX2Jyb2FkYWRkciBhbmQgaWZhX2RzdGFkZHIgb3ZlcmxhcCBpbiBhIHVuaW9uLiBVbmZvcnR1bmF0ZWx5LCBpdCdzIHBvc3NpYmxlCi0gICAgLy8gdG8gaGF2ZSBhbiBpbnRlcmZhY2Ugd2l0aCBib3RoLiBLZWVwaW5nIHRoZSBsYXN0IHRoaW5nIHRoZSBrZXJuZWwgZ2l2ZXMgdXMgc2VlbXMKLSAgICAvLyB0byBiZSBnbGliYyAyLjE5J3MgYmVoYXZpb3IgdG9vLCBzbyBvdXIgY2hvaWNlIGlzIGJlaW5nIHNvdXJjZSBjb21wYXRpYmxlIHdpdGgKLSAgICAvLyBiYWRseS13cml0dGVuIGNvZGUgdGhhdCBhc3N1bWVzIGlmYV9icm9hZGFkZHIgYW5kIGlmYV9kc3RhZGRyIGFyZSBpbnRlcmNoYW5nZWFibGUKLSAgICAvLyBvciBzdXBwb3J0aW5nIGludGVyZmFjZXMgd2l0aCBib3RoIGFkZHJlc3NlcyBjb25maWd1cmVkLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQKLSAgICAvLyBiYWQgY29kZSBpcyBtb3JlIGNvbW1vbiB0aGFuIHdlaXJkIG5ldHdvcmsgaW50ZXJmYWNlcy4uLgotICAgIGlmYS5pZmFfYnJvYWRhZGRyID0gQ29weUFkZHJlc3MoZmFtaWx5LCBkYXRhLCBieXRlQ291bnQsICZpZmFfaWZ1KTsKLSAgfQotCi0gIHZvaWQgU2V0TG9jYWxBZGRyZXNzKGludCBmYW1pbHksIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBieXRlQ291bnQpIHsKLSAgICAvLyBUaGUga2VybmVsIHNvdXJjZSBzYXlzICJmb3IgcG9pbnQtdG8tcG9pbnQgSUZBX0FERFJFU1MgaXMgREVTVElOQVRJT04gYWRkcmVzcywKLSAgICAvLyBsb2NhbCBhZGRyZXNzIGlzIHN1cHBsaWVkIGluIElGQV9MT0NBTCBhdHRyaWJ1dGUiLgotICAgIC8vICAgLS0gaHR0cDovL2x4ci5mcmVlLWVsZWN0cm9ucy5jb20vc291cmNlL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgjTDE3Ci0KLSAgICAvLyBTbyBjb3B5IGFueSBleGlzdGluZyBJRkFfQUREUkVTUyBpbnRvIGlmYV9kc3RhZGRyLi4uCi0gICAgaWYgKGlmYS5pZmFfYWRkciAhPSBudWxscHRyKSB7Ci0gICAgICBpZmEuaWZhX2RzdGFkZHIgPSByZWludGVycHJldF9jYXN0PHNvY2thZGRyKj4obWVtY3B5KCZpZmFfaWZ1LCAmYWRkciwgc2l6ZW9mKGFkZHIpKSk7Ci0gICAgfQotICAgIC8vIC4uLmFuZCB0aGVuIHB1dCB0aGlzIElGQV9MT0NBTCBpbnRvIGlmYV9hZGRyLgotICAgIGlmYS5pZmFfYWRkciA9IENvcHlBZGRyZXNzKGZhbWlseSwgZGF0YSwgYnl0ZUNvdW50LCAmYWRkcik7Ci0gIH0KLQotICAvLyBOZXRsaW5rIGdpdmVzIHVzIHRoZSBwcmVmaXggbGVuZ3RoIGFzIGEgYml0IGNvdW50LiBXZSBuZWVkIHRvIHR1cm4KLSAgLy8gdGhhdCBpbnRvIGEgQlNELWNvbXBhdGlibGUgbmV0bWFzayByZXByZXNlbnRlZCBieSBhIHNvY2thZGRyKi4KLSAgdm9pZCBTZXROZXRtYXNrKGludCBmYW1pbHksIHNpemVfdCBwcmVmaXhfbGVuZ3RoKSB7Ci0gICAgLy8gLi4uYW5kIHdvcmsgb3V0IHRoZSBuZXRtYXNrIGZyb20gdGhlIHByZWZpeCBsZW5ndGguCi0gICAgbmV0bWFzay5zc19mYW1pbHkgPSBmYW1pbHk7Ci0gICAgdWludDhfdCogZHN0ID0gU29ja2FkZHJCeXRlcyhmYW1pbHksICZuZXRtYXNrKTsKLSAgICBtZW1zZXQoZHN0LCAweGZmLCBwcmVmaXhfbGVuZ3RoIC8gOCk7Ci0gICAgaWYgKChwcmVmaXhfbGVuZ3RoICUgOCkgIT0gMCkgewotICAgICAgZHN0W3ByZWZpeF9sZW5ndGgvOF0gPSAoMHhmZiA8PCAoOCAtIChwcmVmaXhfbGVuZ3RoICUgOCkpKTsKLSAgICB9Ci0gICAgaWZhLmlmYV9uZXRtYXNrID0gcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZuZXRtYXNrKTsKLSAgfQotCi0gIHZvaWQgU2V0UGFja2V0QXR0cmlidXRlcyhpbnQgaWZpbmRleCwgdW5zaWduZWQgc2hvcnQgaGF0eXBlLCB1bnNpZ25lZCBjaGFyIGhhbGVuKSB7Ci0gICAgc29ja2FkZHJfbGwqIHNsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHJfbGwqPigmYWRkcik7Ci0gICAgc2xsLT5zbGxfaWZpbmRleCA9IGlmaW5kZXg7Ci0gICAgc2xsLT5zbGxfaGF0eXBlID0gaGF0eXBlOwotICAgIHNsbC0+c2xsX2hhbGVuID0gaGFsZW47Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHNvY2thZGRyKiBDb3B5QWRkcmVzcyhpbnQgZmFtaWx5LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgYnl0ZUNvdW50LCBzb2NrYWRkcl9zdG9yYWdlKiBzcykgewotICAgIC8vIE5ldGxpbmsgZ2l2ZXMgdXMgdGhlIGFkZHJlc3MgZmFtaWx5IGluIHRoZSBoZWFkZXIsIGFuZCB0aGUKLSAgICAvLyBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYgYnl0ZXMgYXMgdGhlIHBheWxvYWQuIFdlIG5lZWQgdG8KLSAgICAvLyBzdGl0Y2ggdGhlIHR3byBiaXRzIHRvZ2V0aGVyIGludG8gdGhlIHNvY2thZGRyIHRoYXQncyBwYXJ0IG9mCi0gICAgLy8gb3VyIHBvcnRhYmxlIGludGVyZmFjZS4KLSAgICBzcy0+c3NfZmFtaWx5ID0gZmFtaWx5OwotICAgIG1lbWNweShTb2NrYWRkckJ5dGVzKGZhbWlseSwgc3MpLCBkYXRhLCBieXRlQ291bnQpOwotCi0gICAgLy8gRm9yIElQdjYgd2UgbWlnaHQgYWxzbyBoYXZlIHRvIHNldCB0aGUgc2NvcGUgaWQuCi0gICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNiAmJiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGRhdGEpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChkYXRhKSkpIHsKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHJfaW42Kj4oc3MpLT5zaW42X3Njb3BlX2lkID0gaW50ZXJmYWNlX2luZGV4OwotICAgIH0KLQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHNvY2thZGRyKj4oc3MpOwotICB9Ci0KLSAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGFkZHJlc3MgZGF0YSAod2hpY2ggaXMKLSAgLy8gc3RvcmVkIGluIG5ldHdvcmsgYnl0ZSBvcmRlcikuCi0gIHVpbnQ4X3QqIFNvY2thZGRyQnl0ZXMoaW50IGZhbWlseSwgc29ja2FkZHJfc3RvcmFnZSogc3MpIHsKLSAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKLSAgICAgIHNvY2thZGRyX2luKiBzczQgPSByZWludGVycHJldF9jYXN0PHNvY2thZGRyX2luKj4oc3MpOwotICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZzczQtPnNpbl9hZGRyKTsKLSAgICB9IGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgewotICAgICAgc29ja2FkZHJfaW42KiBzczYgPSByZWludGVycHJldF9jYXN0PHNvY2thZGRyX2luNio+KHNzKTsKLSAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmc3M2LT5zaW42X2FkZHIpOwotICAgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX1BBQ0tFVCkgewotICAgICAgc29ja2FkZHJfbGwqIHNsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHJfbGwqPihzcyk7Ci0gICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnNsbC0+c2xsX2FkZHIpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotfTsKLQotc3RhdGljIHZvaWQgX19nZXRpZmFkZHJzX2NhbGxiYWNrKHZvaWQqIGNvbnRleHQsIG5sbXNnaGRyKiBoZHIpIHsKLSAgaWZhZGRycyoqIG91dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWZhZGRycyoqPihjb250ZXh0KTsKLQotICBpZiAoaGRyLT5ubG1zZ190eXBlID09IFJUTV9ORVdMSU5LKSB7Ci0gICAgaWZpbmZvbXNnKiBpZmkgPSByZWludGVycHJldF9jYXN0PGlmaW5mb21zZyo+KE5MTVNHX0RBVEEoaGRyKSk7Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgaWZhZGRyIGVudHJ5LCBhbmQgc2V0IHRoZSBpbnRlcmZhY2UgaW5kZXggYW5kIGZsYWdzLgotICAgIGlmYWRkcnNfc3RvcmFnZSogbmV3X2FkZHIgPSBuZXcgaWZhZGRyc19zdG9yYWdlKG91dCk7Ci0gICAgbmV3X2FkZHItPmludGVyZmFjZV9pbmRleCA9IGlmaS0+aWZpX2luZGV4OwotICAgIG5ld19hZGRyLT5pZmEuaWZhX2ZsYWdzID0gaWZpLT5pZmlfZmxhZ3M7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSB2YXJpb3VzIGJpdHMgb2YgaW5mb3JtYXRpb24gYW5kIGZpbmQgdGhlIG5hbWUuCi0gICAgcnRhdHRyKiBydGEgPSBJRkxBX1JUQShpZmkpOwotICAgIHNpemVfdCBydGFfbGVuID0gSUZMQV9QQVlMT0FEKGhkcik7Ci0gICAgd2hpbGUgKFJUQV9PSyhydGEsIHJ0YV9sZW4pKSB7Ci0gICAgICBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkxBX0FERFJFU1MpIHsKLSAgICAgICAgICBpZiAoUlRBX1BBWUxPQUQocnRhKSA8IHNpemVvZihuZXdfYWRkci0+YWRkcikpIHsKLSAgICAgICAgICAgIG5ld19hZGRyLT5TZXRBZGRyZXNzKEFGX1BBQ0tFVCwgUlRBX0RBVEEocnRhKSwgUlRBX1BBWUxPQUQocnRhKSk7Ci0gICAgICAgICAgICBuZXdfYWRkci0+U2V0UGFja2V0QXR0cmlidXRlcyhpZmktPmlmaV9pbmRleCwgaWZpLT5pZmlfdHlwZSwgUlRBX1BBWUxPQUQocnRhKSk7Ci0gICAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChydGEtPnJ0YV90eXBlID09IElGTEFfQlJPQURDQVNUKSB7Ci0gICAgICAgICAgaWYgKFJUQV9QQVlMT0FEKHJ0YSkgPCBzaXplb2YobmV3X2FkZHItPmlmYV9pZnUpKSB7Ci0gICAgICAgICAgICBuZXdfYWRkci0+U2V0QnJvYWRjYXN0QWRkcmVzcyhBRl9QQUNLRVQsIFJUQV9EQVRBKHJ0YSksIFJUQV9QQVlMT0FEKHJ0YSkpOwotICAgICAgICAgICAgbmV3X2FkZHItPlNldFBhY2tldEF0dHJpYnV0ZXMoaWZpLT5pZmlfaW5kZXgsIGlmaS0+aWZpX3R5cGUsIFJUQV9QQVlMT0FEKHJ0YSkpOwotICAgICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkxBX0lGTkFNRSkgewotICAgICAgICAgIGlmIChSVEFfUEFZTE9BRChydGEpIDwgc2l6ZW9mKG5ld19hZGRyLT5uYW1lKSkgewotICAgICAgICAgICAgbWVtY3B5KG5ld19hZGRyLT5uYW1lLCBSVEFfREFUQShydGEpLCBSVEFfUEFZTE9BRChydGEpKTsKLSAgICAgICAgICAgIG5ld19hZGRyLT5pZmEuaWZhX25hbWUgPSBuZXdfYWRkci0+bmFtZTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBydGEgPSBSVEFfTkVYVChydGEsIHJ0YV9sZW4pOwotICAgIH0KLSAgfSBlbHNlIGlmIChoZHItPm5sbXNnX3R5cGUgPT0gUlRNX05FV0FERFIpIHsKLSAgICBpZmFkZHJtc2cqIG1zZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWZhZGRybXNnKj4oTkxNU0dfREFUQShoZHIpKTsKLQotICAgIC8vIFdlIHNob3VsZCBhbHJlYWR5IGtub3cgYWJvdXQgdGhpcyBmcm9tIGFuIFJUTV9ORVdMSU5LIG1lc3NhZ2UuCi0gICAgY29uc3QgaWZhZGRyc19zdG9yYWdlKiBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpZmFkZHJzX3N0b3JhZ2UqPigqb3V0KTsKLSAgICB3aGlsZSAoYWRkciAhPSBudWxscHRyICYmIGFkZHItPmludGVyZmFjZV9pbmRleCAhPSBzdGF0aWNfY2FzdDxpbnQ+KG1zZy0+aWZhX2luZGV4KSkgewotICAgICAgYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaWZhZGRyc19zdG9yYWdlKj4oYWRkci0+aWZhLmlmYV9uZXh0KTsKLSAgICB9Ci0gICAgLy8gSWYgdGhpcyBpcyBhbiB1bmtub3duIGludGVyZmFjZSwgaWdub3JlIHdoYXRldmVyIHdlJ3JlIGJlaW5nIHRvbGQgYWJvdXQgaXQuCi0gICAgaWYgKGFkZHIgPT0gbnVsbHB0cikgcmV0dXJuOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGlmYWRkciBlbnRyeSBhbmQgY29weSB3aGF0IHdlIGFscmVhZHkga25vdy4KLSAgICBpZmFkZHJzX3N0b3JhZ2UqIG5ld19hZGRyID0gbmV3IGlmYWRkcnNfc3RvcmFnZShvdXQpOwotICAgIC8vIFdlIGNhbiBqdXN0IGNvcHkgdGhlIG5hbWUgcmF0aGVyIHRoYW4gbG9vayBmb3IgSUZBX0xBQkVMLgotICAgIHN0cmNweShuZXdfYWRkci0+bmFtZSwgYWRkci0+bmFtZSk7Ci0gICAgbmV3X2FkZHItPmlmYS5pZmFfbmFtZSA9IG5ld19hZGRyLT5uYW1lOwotICAgIG5ld19hZGRyLT5pZmEuaWZhX2ZsYWdzID0gYWRkci0+aWZhLmlmYV9mbGFnczsKLSAgICBuZXdfYWRkci0+aW50ZXJmYWNlX2luZGV4ID0gYWRkci0+aW50ZXJmYWNlX2luZGV4OwotCi0gICAgLy8gR28gdGhyb3VnaCB0aGUgdmFyaW91cyBiaXRzIG9mIGluZm9ybWF0aW9uIGFuZCBmaW5kIHRoZSBhZGRyZXNzCi0gICAgLy8gYW5kIGFueSBicm9hZGNhc3QvZGVzdGluYXRpb24gYWRkcmVzcy4KLSAgICBydGF0dHIqIHJ0YSA9IElGQV9SVEEobXNnKTsKLSAgICBzaXplX3QgcnRhX2xlbiA9IElGQV9QQVlMT0FEKGhkcik7Ci0gICAgd2hpbGUgKFJUQV9PSyhydGEsIHJ0YV9sZW4pKSB7Ci0gICAgICBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUykgewotICAgICAgICBpZiAobXNnLT5pZmFfZmFtaWx5ID09IEFGX0lORVQgfHwgbXNnLT5pZmFfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgICAgbmV3X2FkZHItPlNldEFkZHJlc3MobXNnLT5pZmFfZmFtaWx5LCBSVEFfREFUQShydGEpLCBSVEFfUEFZTE9BRChydGEpKTsKLSAgICAgICAgICBuZXdfYWRkci0+U2V0TmV0bWFzayhtc2ctPmlmYV9mYW1pbHksIG1zZy0+aWZhX3ByZWZpeGxlbik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfQlJPQURDQVNUKSB7Ci0gICAgICAgIGlmIChtc2ctPmlmYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotICAgICAgICAgIG5ld19hZGRyLT5TZXRCcm9hZGNhc3RBZGRyZXNzKG1zZy0+aWZhX2ZhbWlseSwgUlRBX0RBVEEocnRhKSwgUlRBX1BBWUxPQUQocnRhKSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkFfTE9DQUwpIHsKLSAgICAgICAgaWYgKG1zZy0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUIHx8IG1zZy0+aWZhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotICAgICAgICAgIG5ld19hZGRyLT5TZXRMb2NhbEFkZHJlc3MobXNnLT5pZmFfZmFtaWx5LCBSVEFfREFUQShydGEpLCBSVEFfUEFZTE9BRChydGEpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcnRhID0gUlRBX05FWFQocnRhLCBydGFfbGVuKTsKLSAgICB9Ci0gIH0KLX0KLQotaW50IGdldGlmYWRkcnMoaWZhZGRycyoqIG91dCkgewotICAvLyBXZSBjb25zdHJ1Y3QgdGhlIHJlc3VsdCBkaXJlY3RseSBpbnRvIGBvdXRgLCBzbyB0ZXJtaW5hdGUgdGhlIGxpc3QuCi0gICpvdXQgPSBudWxscHRyOwotCi0gIC8vIE9wZW4gdGhlIG5ldGxpbmsgc29ja2V0IGFuZCBhc2sgZm9yIGFsbCB0aGUgbGlua3MgYW5kIGFkZHJlc3Nlcy4KLSAgTmV0bGlua0Nvbm5lY3Rpb24gbmM7Ci0gIGJvb2wgb2theSA9IG5jLlNlbmRSZXF1ZXN0KFJUTV9HRVRMSU5LKSAmJiBuYy5SZWFkUmVzcG9uc2VzKF9fZ2V0aWZhZGRyc19jYWxsYmFjaywgb3V0KSAmJgotICAgICAgICAgICAgICBuYy5TZW5kUmVxdWVzdChSVE1fR0VUQUREUikgJiYgbmMuUmVhZFJlc3BvbnNlcyhfX2dldGlmYWRkcnNfY2FsbGJhY2ssIG91dCk7Ci0gIGlmICghb2theSkgewotICAgIGZyZWVpZmFkZHJzKCpvdXQpOwotICAgIC8vIEVuc3VyZSB0aGF0IGNhbGxlcnMgY3Jhc2ggaWYgdGhleSBmb3JnZXQgdG8gY2hlY2sgZm9yIHN1Y2Nlc3MuCi0gICAgKm91dCA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZnJlZWlmYWRkcnMoaWZhZGRycyogbGlzdCkgewotICB3aGlsZSAobGlzdCAhPSBudWxscHRyKSB7Ci0gICAgaWZhZGRycyogY3VycmVudCA9IGxpc3Q7Ci0gICAgbGlzdCA9IGxpc3QtPmlmYV9uZXh0OwotICAgIGZyZWUoY3VycmVudCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvaWZhZGRycy5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9pZmFkZHJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYWFiYmQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9pZmFkZHJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0vKioKLSAqIEBmaWxlIGlmYWRkcnMuaAotICogQGJyaWVmIEFjY2VzcyB0byBuZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzZXMuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotLyoqCi0gKiBSZXR1cm5lZCBieSBnZXRpZmFkZHJzKCkgYW5kIGZyZWVkIGJ5IGZyZWVpZmFkZHJzKCkuCi0gKi8KLXN0cnVjdCBpZmFkZHJzIHsKLSAgLyoqIFBvaW50ZXIgdG8gdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgbGlua2VkIGxpc3QuICovCi0gIHN0cnVjdCBpZmFkZHJzKiBpZmFfbmV4dDsKLQotICAvKiogSW50ZXJmYWNlIG5hbWUuICovCi0gIGNoYXIqIGlmYV9uYW1lOwotICAvKiogSW50ZXJmYWNlIGZsYWdzIChsaWtlIGBTSU9DR0lGRkxBR1NgKS4gKi8KLSAgdW5zaWduZWQgaW50IGlmYV9mbGFnczsKLSAgLyoqIEludGVyZmFjZSBhZGRyZXNzLiAqLwotICBzdHJ1Y3Qgc29ja2FkZHIqIGlmYV9hZGRyOwotICAvKiogSW50ZXJmYWNlIG5ldG1hc2suICovCi0gIHN0cnVjdCBzb2NrYWRkciogaWZhX25ldG1hc2s7Ci0KLSAgdW5pb24gewotICAgIC8qKiBJbnRlcmZhY2UgYnJvYWRjYXN0IGFkZHJlc3MgKGlmIElGRl9CUk9BRENBU1QgaXMgc2V0KS4gKi8KLSAgICBzdHJ1Y3Qgc29ja2FkZHIqIGlmdV9icm9hZGFkZHI7Ci0gICAgLyoqIEludGVyZmFjZSBkZXN0aW5hdGlvbiBhZGRyZXNzIChpZiBJRkZfUE9JTlRPUE9JTlQgaXMgc2V0KS4gKi8KLSAgICBzdHJ1Y3Qgc29ja2FkZHIqIGlmdV9kc3RhZGRyOwotICB9IGlmYV9pZnU7Ci0KLSAgLyoqIFVudXNlZC4gKi8KLSAgdm9pZCogaWZhX2RhdGE7Ci19OwotCi0vKiogU3lub255bSBmb3IgYGlmYV9pZnUuaWZ1X2Jyb2FkYWRkcmAgaW4gYHN0cnVjdCBpZmFkZHJzYC4gKi8KLSNkZWZpbmUgaWZhX2Jyb2FkYWRkciBpZmFfaWZ1LmlmdV9icm9hZGFkZHIKLS8qKiBTeW5vbnltIGZvciBgaWZhX2lmdS5pZnVfZHN0YWRkcmAgaW4gYHN0cnVjdCBpZmFkZHJzYC4gKi8KLSNkZWZpbmUgaWZhX2RzdGFkZHIgaWZhX2lmdS5pZnVfZHN0YWRkcgotCi0vKioKLSAqIFtnZXRpZmFkZHJzKDMpXShodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjMvZ2V0aWZhZGRycy4zLmh0bWwpIGNyZWF0ZXMgYSBsaW5rZWQgbGlzdAotICogb2YgYHN0cnVjdCBpZmFkZHJzYC4gVGhlIGxpc3QgbXVzdCBiZSBmcmVlZCBieSBmcmVlaWZhZGRycygpLgotICoKLSAqIFJldHVybnMgMCBhbmQgc3RvcmVzIHRoZSBsaXN0IGluIGAqX19saXN0X3B0cmAgb24gc3VjY2VzcywKLSAqIGFuZCByZXR1cm5zIC0xIGFuZCBzZXRzIGBlcnJub2Agb24gZmFpbHVyZS4KLSAqCi0gKiBBdmFpbGFibGUgc2luY2UgQVBJIGxldmVsIDI0LgotICovCi1pbnQgZ2V0aWZhZGRycyhzdHJ1Y3QgaWZhZGRycyoqIF9fbGlzdF9wdHIpIF9fSU5UUk9EVUNFRF9JTigyNCk7Ci0KLS8qKgotICogW2ZyZWVpZmFkZHJzKDMpXShodHRwOi8vbWFuNy5vcmcvbGludXgvbWFuLXBhZ2VzL21hbjMvZnJlZWlmYWRkcnMuMy5odG1sKSBmcmVlcyBhIGxpbmtlZCBsaXN0Ci0gKiBvZiBgc3RydWN0IGlmYWRkcnNgIHJldHVybmVkIGJ5IGdldGlmYWRkcnMoKS4KLSAqCi0gKiBBdmFpbGFibGUgc2luY2UgQVBJIGxldmVsIDI0LgotICovCi12b2lkIGZyZWVpZmFkZHJzKHN0cnVjdCBpZmFkZHJzKiBfX3B0cikgX19JTlRST0RVQ0VEX0lOKDI0KTsKLQotX19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvbmV0X2lmLmNwcCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvbmV0X2lmLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5YzllYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL25ldF9pZi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGlmYWRkcnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgotCi0jaW5jbHVkZSAiYmlvbmljX25ldGxpbmsuaCIKLQotY2hhciogaWZfaW5kZXh0b25hbWUodW5zaWduZWQgaWZpbmRleCwgY2hhciogaWZuYW1lKSB7Ci0gIGludCBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU18U09DS19DTE9FWEVDLCAwKTsKLSAgaWYgKHMgPT0gLTEpIHJldHVybiBudWxscHRyOwotCi0gIHN0cnVjdCBpZnJlcSBpZnI7Ci0gIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7Ci0gIGlmci5pZnJfaWZpbmRleCA9IGlmaW5kZXg7Ci0KLSAgaW50IHJjID0gaW9jdGwocywgU0lPQ0dJRk5BTUUsICZpZnIpOwotICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOwotICBjbG9zZShzKTsKLSAgcmV0dXJuIChyYyA9PSAtMSkgPyBudWxscHRyIDogc3RybmNweShpZm5hbWUsIGlmci5pZnJfbmFtZSwgSUZOQU1TSVopOwotfQotCi11bnNpZ25lZCBpZl9uYW1ldG9pbmRleChjb25zdCBjaGFyKiBpZm5hbWUpIHsKLSAgaW50IHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTXxTT0NLX0NMT0VYRUMsIDApOwotICBpZiAocyA9PSAtMSkgcmV0dXJuIDA7Ci0KLSAgc3RydWN0IGlmcmVxIGlmcjsKLSAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKLSAgc3RybmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwotICBpZnIuaWZyX25hbWVbSUZOQU1TSVogLSAxXSA9IDA7Ci0KLSAgaW50IHJjID0gaW9jdGwocywgU0lPQ0dJRklOREVYLCAmaWZyKTsKLSAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKLSAgY2xvc2Uocyk7Ci0gIHJldHVybiAocmMgPT0gLTEpID8gMCA6IGlmci5pZnJfaWZpbmRleDsKLX0KLQotc3RydWN0IGlmX2xpc3QgewotICBpZl9saXN0KiBuZXh0OwotICBzdHJ1Y3QgaWZfbmFtZWluZGV4IGRhdGE7Ci0KLSAgZXhwbGljaXQgaWZfbGlzdChpZl9saXN0KiogbGlzdCkgewotICAgIC8vIHB1c2hfZnJvbnQgb250byBgbGlzdGAuCi0gICAgbmV4dCA9ICpsaXN0OwotICAgICpsaXN0ID0gdGhpczsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIEZyZWUoaWZfbGlzdCogbGlzdCwgYm9vbCBuYW1lc190b28pIHsKLSAgICB3aGlsZSAobGlzdCkgewotICAgICAgaWZfbGlzdCogaXQgPSBsaXN0OwotICAgICAgbGlzdCA9IGl0LT5uZXh0OwotICAgICAgaWYgKG5hbWVzX3RvbykgZnJlZShpdC0+ZGF0YS5pZl9uYW1lKTsKLSAgICAgIGZyZWUoaXQpOwotICAgIH0KLSAgfQotfTsKLQotc3RhdGljIHZvaWQgX19pZl9uYW1laW5kZXhfY2FsbGJhY2sodm9pZCogY29udGV4dCwgbmxtc2doZHIqIGhkcikgewotICBpZl9saXN0KiogbGlzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aWZfbGlzdCoqPihjb250ZXh0KTsKLSAgaWYgKGhkci0+bmxtc2dfdHlwZSA9PSBSVE1fTkVXTElOSykgewotICAgIGlmaW5mb21zZyogaWZpID0gcmVpbnRlcnByZXRfY2FzdDxpZmluZm9tc2cqPihOTE1TR19EQVRBKGhkcikpOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGVudHJ5IGFuZCBzZXQgdGhlIGludGVyZmFjZSBpbmRleC4KLSAgICBpZl9saXN0KiBuZXdfbGluayA9IG5ldyBpZl9saXN0KGxpc3QpOwotICAgIG5ld19saW5rLT5kYXRhLmlmX2luZGV4ID0gaWZpLT5pZmlfaW5kZXg7Ci0KLSAgICAvLyBHbyB0aHJvdWdoIHRoZSB2YXJpb3VzIGJpdHMgb2YgaW5mb3JtYXRpb24gYW5kIGZpbmQgdGhlIG5hbWUuCi0gICAgcnRhdHRyKiBydGEgPSBJRkxBX1JUQShpZmkpOwotICAgIHNpemVfdCBydGFfbGVuID0gSUZMQV9QQVlMT0FEKGhkcik7Ci0gICAgd2hpbGUgKFJUQV9PSyhydGEsIHJ0YV9sZW4pKSB7Ci0gICAgICBpZiAocnRhLT5ydGFfdHlwZSA9PSBJRkxBX0lGTkFNRSkgewotICAgICAgICBuZXdfbGluay0+ZGF0YS5pZl9uYW1lID0gc3RybmR1cChyZWludGVycHJldF9jYXN0PGNoYXIqPihSVEFfREFUQShydGEpKSwgUlRBX1BBWUxPQUQocnRhKSk7Ci0gICAgICB9Ci0gICAgICBydGEgPSBSVEFfTkVYVChydGEsIHJ0YV9sZW4pOwotICAgIH0KLSAgfQotfQotCi1zdHJ1Y3QgaWZfbmFtZWluZGV4KiBpZl9uYW1laW5kZXgoKSB7Ci0gIGlmX2xpc3QqIGxpc3QgPSBudWxscHRyOwotCi0gIC8vIE9wZW4gdGhlIG5ldGxpbmsgc29ja2V0IGFuZCBhc2sgZm9yIGFsbCB0aGUgbGlua3M7Ci0gIE5ldGxpbmtDb25uZWN0aW9uIG5jOwotICBib29sIG9rYXkgPSBuYy5TZW5kUmVxdWVzdChSVE1fR0VUTElOSykgJiYgbmMuUmVhZFJlc3BvbnNlcyhfX2lmX25hbWVpbmRleF9jYWxsYmFjaywgJmxpc3QpOwotICBpZiAoIW9rYXkpIHsKLSAgICBpZl9saXN0OjpGcmVlKGxpc3QsIHRydWUpOwotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0KLSAgLy8gQ291bnQgdGhlIGludGVyZmFjZXMuCi0gIHNpemVfdCBpbnRlcmZhY2VfY291bnQgPSAwOwotICBmb3IgKGlmX2xpc3QqIGl0ID0gbGlzdDsgaXQgIT0gbnVsbHB0cjsgaXQgPSBpdC0+bmV4dCkgewotICAgICsraW50ZXJmYWNlX2NvdW50OwotICB9Ci0KLSAgLy8gQnVpbGQgdGhlIGFycmF5IFBPU0lYIHJlcXVpcmVzIHVzIHRvIHJldHVybi4KLSAgc3RydWN0IGlmX25hbWVpbmRleCogcmVzdWx0ID0gbmV3IHN0cnVjdCBpZl9uYW1laW5kZXhbaW50ZXJmYWNlX2NvdW50ICsgMV07Ci0gIGlmIChyZXN1bHQpIHsKLSAgICBzdHJ1Y3QgaWZfbmFtZWluZGV4KiBvdXQgPSByZXN1bHQ7Ci0gICAgZm9yIChpZl9saXN0KiBpdCA9IGxpc3Q7IGl0ICE9IG51bGxwdHI7IGl0ID0gaXQtPm5leHQpIHsKLSAgICAgIG91dC0+aWZfaW5kZXggPSBpdC0+ZGF0YS5pZl9pbmRleDsKLSAgICAgIG91dC0+aWZfbmFtZSA9IGl0LT5kYXRhLmlmX25hbWU7Ci0gICAgICArK291dDsKLSAgICB9Ci0gICAgb3V0LT5pZl9pbmRleCA9IDA7Ci0gICAgb3V0LT5pZl9uYW1lID0gbnVsbHB0cjsKLSAgfQotCi0gIC8vIEZyZWUgdGVtcG9yYXJ5IHN0b3JhZ2UuCi0gIGlmX2xpc3Q6OkZyZWUobGlzdCwgZmFsc2UpOwotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgaWZfZnJlZW5hbWVpbmRleChzdHJ1Y3QgaWZfbmFtZWluZGV4KiBhcnJheSkgewotICBpZiAoYXJyYXkgPT0gbnVsbHB0cikgcmV0dXJuOwotCi0gIHN0cnVjdCBpZl9uYW1laW5kZXgqIHB0ciA9IGFycmF5OwotICB3aGlsZSAocHRyLT5pZl9pbmRleCAhPSAwIHx8IHB0ci0+aWZfbmFtZSAhPSBudWxscHRyKSB7Ci0gICAgZnJlZShwdHItPmlmX25hbWUpOwotICAgICsrcHRyOwotICB9Ci0KLSAgZGVsZXRlW10gYXJyYXk7Ci19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9wcml2YXRlL0Vycm5vUmVzdG9yZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJlMTE1YS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYmlvbmljL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgImJpb25pY19tYWNyb3MuaCIKLQotY2xhc3MgRXJybm9SZXN0b3JlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBFcnJub1Jlc3RvcmVyKCkgOiBzYXZlZF9lcnJub18oZXJybm8pIHsKLSAgfQotCi0gIH5FcnJub1Jlc3RvcmVyKCkgewotICAgIGVycm5vID0gc2F2ZWRfZXJybm9fOwotICB9Ci0KLSAgdm9pZCBvdmVycmlkZShpbnQgbmV3X2Vycm5vKSB7Ci0gICAgc2F2ZWRfZXJybm9fID0gbmV3X2Vycm5vOwotICB9Ci0KLSBwcml2YXRlOgotICBpbnQgc2F2ZWRfZXJybm9fOwotCi0gIEJJT05JQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oRXJybm9SZXN0b3Jlcik7Ci19OwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9wcml2YXRlL2Jpb25pY19tYWNyb3MuaCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMvcHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDBlM2EuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Jpb25pYy9wcml2YXRlL2Jpb25pY19tYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jZGVmaW5lIEJJT05JQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwKLSAgVHlwZU5hbWUoY29uc3QgVHlwZU5hbWUmKSA9IGRlbGV0ZTsgICAgICAgICAgICAgXAotICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpID0gZGVsZXRlCi0KLSNkZWZpbmUgQklPTklDX0RJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhUeXBlTmFtZSkgXAotICBUeXBlTmFtZSgpID0gZGVsZXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIEJJT05JQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpCi0KLSNkZWZpbmUgQklPTklDX1JPVU5EX1VQX1BPV0VSX09GXzIodmFsdWUpIFwKLSAgKChzaXplb2YodmFsdWUpID09IDgpIFwKLSAgICA/ICgxVUwgPDwgKDY0IC0gX19idWlsdGluX2Nsemwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKSkpIFwKLSAgICA6ICgxVUwgPDwgKDMyIC0gX19idWlsdGluX2NseihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSkpKSkKLQotc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgYWxpZ25fZG93bih1aW50cHRyX3QgcCwgc2l6ZV90IGFsaWduKSB7Ci0gIHJldHVybiBwICYgfihhbGlnbiAtIDEpOwotfQotCi1zdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBhbGlnbl91cCh1aW50cHRyX3QgcCwgc2l6ZV90IGFsaWduKSB7Ci0gIHJldHVybiAocCArIGFsaWduIC0gMSkgJiB+KGFsaWduIC0gMSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUKiBhbGlnbl9kb3duKFQqIHAsIHNpemVfdCBhbGlnbikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYWxpZ25fZG93bihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCksIGFsaWduKSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUKiBhbGlnbl91cChUKiBwLCBzaXplX3QgYWxpZ24pIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGFsaWduX3VwKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKSwgYWxpZ24pKTsKLX0KLQotI2lmIGRlZmluZWQoX19hcm1fXykKLS8vIERvIG5vdCBlbWl0IGFueXRoaW5nIGZvciBhcm0sIGNsYW5nIGRvZXMgbm90IGFsbG93IGVtaXRpbmcgYW4gYXJtIHVud2luZAotLy8gZGlyZWN0aXZlLgotLy8gI2RlZmluZSBCSU9OSUNfU1RPUF9VTldJTkQgYXNtIHZvbGF0aWxlKCIuY2FudHVud2luZCIpCi0jZGVmaW5lIEJJT05JQ19TVE9QX1VOV0lORAotI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKLSNkZWZpbmUgQklPTklDX1NUT1BfVU5XSU5EIGFzbSB2b2xhdGlsZSgiLmNmaV91bmRlZmluZWQgeDMwIikKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIEJJT05JQ19TVE9QX1VOV0lORCBhc20gdm9sYXRpbGUoIi5jZmlfdW5kZWZpbmVkIFwlZWlwIikKLSNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKLSNkZWZpbmUgQklPTklDX1NUT1BfVU5XSU5EIGFzbSB2b2xhdGlsZSgiLmNmaV91bmRlZmluZWQgXCVyaXAiKQotI2VsaWYgZGVmaW5lZCAoX19taXBzX18pCi0jZGVmaW5lIEJJT05JQ19TVE9QX1VOV0lORCBhc20gdm9sYXRpbGUoIi5jZmlfdW5kZWZpbmVkICRyYSIpCi0jZW5kaWYKLQotLy8gVGhlIGFycmF5c2l6ZShhcnIpIG1hY3JvIHJldHVybnMgdGhlICMgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXkgYXJyLgotLy8gVGhlIGV4cHJlc3Npb24gaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQsIGFuZCB0aGVyZWZvcmUgY2FuIGJlCi0vLyB1c2VkIGluIGRlZmluaW5nIG5ldyBhcnJheXMsIGZvciBleGFtcGxlLiAgSWYgeW91IHVzZSBhcnJheXNpemUgb24KLS8vIGEgcG9pbnRlciBieSBtaXN0YWtlLCB5b3Ugd2lsbCBnZXQgYSBjb21waWxlLXRpbWUgZXJyb3IuCi0vLwotLy8gT25lIGNhdmVhdCBpcyB0aGF0IGFycmF5c2l6ZSgpIGRvZXNuJ3QgYWNjZXB0IGFueSBhcnJheSBvZiBhbgotLy8gYW5vbnltb3VzIHR5cGUgb3IgYSB0eXBlIGRlZmluZWQgaW5zaWRlIGEgZnVuY3Rpb24uCi0vLwotLy8gVGhpcyB0ZW1wbGF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpcyB1c2VkIGluIGRlZmluaW5nIGFycmF5c2l6ZS4KLS8vIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24ndCBuZWVkIGFuIGltcGxlbWVudGF0aW9uLCBhcyB3ZSBvbmx5Ci0vLyB1c2UgaXRzIHR5cGUuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Ci1jaGFyICgmQXJyYXlTaXplSGVscGVyKFQgKCZhcnJheSlbTl0pKVtOXTsgIC8vIE5PTElOVChyZWFkYWJpbGl0eS9jYXN0aW5nKQotCi0jZGVmaW5lIGFycmF5c2l6ZShhcnJheSkgKHNpemVvZihBcnJheVNpemVIZWxwZXIoYXJyYXkpKSkKLQotLy8gVXNlZCB0byBpbmZvcm0gY2xhbmcncyAtV2ltcGxpY2l0LWZhbGx0aHJvdWdoIHRoYXQgYSBmYWxsdGhyb3VnaCBpcyBpbnRlbmRlZC4gVGhlcmUncyBubyB3YXkgdG8KLS8vIHNpbGVuY2UgKG9yIGVuYWJsZSwgYXBwYXJlbnRseSkgLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCBpbiBDIHlldC4KLSNpZmRlZiBfX2NwbHVzcGx1cwotI2RlZmluZSBfX0JJT05JQ19GQUxMVEhST1VHSCBbW2NsYW5nOjpmYWxsdGhyb3VnaF1dCi0jZWxzZQotI2RlZmluZSBfX0JJT05JQ19GQUxMVEhST1VHSAotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0L2NvYmFsdF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0L2NvYmFsdF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNGJhNWIuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2NvYmFsdC9jb2JhbHRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvYmFsdF9wbGF0Zm9ybScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2FuZHJvaWRfdXNlcl9hdXRob3JpemVyLmgnLAotICAgICAgICAnYW5kcm9pZF91c2VyX2F1dGhvcml6ZXIuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgfQotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljZGJhMC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIENvYmFsdC1vbi1BbmRyb2lkLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIFN0YXJib2FyZC4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdpbl9hcHBfZGlhbCc6IDAsCi0KLSAgICAnZW5hYmxlX2FjY291bnRfbWFuYWdlcic6IDEsCi0KLSAgICAjIFRoZSAnYW5kcm9pZF9zeXN0ZW0nIGZvbnQgcGFja2FnZSBpbnN0YWxscyBvbmx5IG1pbmltYWwgZm9udHMsIHdpdGggYQotICAgICMgZm9udHMueG1sIHJlZmVyZW5jaW5nIHRoZSBzdXBlcnNldCBvZiBmb250IGZpbGVzIHdlIGV4cGVjdCB0byBmaW5kIG9uIGFueQotICAgICMgQW5kcm9pZCBwbGF0Zm9ybS4gVGhlIEFuZHJvaWQgU2JGaWxlT3BlbiBpbXBsZW1lbnRhdGlvbiBmYWxscyBiYWNrIHRvCi0gICAgIyBzeXN0ZW0gZm9udHMgd2hlbiBpdCBjYW4ndCBmaW5kIHRoZSBmb250IGZpbGUgaW4gdGhlIGNvYmFsdCBjb250ZW50LgotICAgICdjb2JhbHRfZm9udF9wYWNrYWdlJzogJ2FuZHJvaWRfc3lzdGVtJywKLQotICAgICMgUGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIGNvbXBpbGUgaW50byBjb2JhbHQuCi0gICAgJ2NvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2NvYmFsdC9jb2JhbHRfcGxhdGZvcm0uZ3lwOmNvYmFsdF9wbGF0Zm9ybScsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weQppbmRleCA3Y2M1Mjk5Li5jNjA2ZDgyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4ICsxMyw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIEFuZHJvaWQgQ29iYWx0IHNoYXJlZCBjb25maWd1cmF0aW9uLiIiIgogCi1pbXBvcnQgb3MKLQogZnJvbSBjb2JhbHQuYnVpbGQgaW1wb3J0IGNvYmFsdF9jb25maWd1cmF0aW9uCiBmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCkBAIC0yMiwyNiArMjAsMTIgQEAKIGNsYXNzIENvYmFsdEFuZHJvaWRDb25maWd1cmF0aW9uKGNvYmFsdF9jb25maWd1cmF0aW9uLkNvYmFsdENvbmZpZ3VyYXRpb24pOgogICAiIiJTdGFyYm9hcmQgQW5kcm9pZCBDb2JhbHQgc2hhcmVkIGNvbmZpZ3VyYXRpb24uIiIiCiAKLSAgZGVmIEdldFBvc3RJbmNsdWRlcyhzZWxmKToKLSAgICAjIElmIHRoZXJlIGlzbid0IGEgY29uZmlndXJhdGlvbi5neXBpIGZvdW5kIGluIHRoZSB1c3VhbCBwbGFjZSwgd2UnbGwKLSAgICAjIHN1cHBsZW1lbnQgd2l0aCBvdXIgc2hhcmVkIGltcGxlbWVudGF0aW9uLgotICAgIGluY2x1ZGVzID0gc3VwZXIoQ29iYWx0QW5kcm9pZENvbmZpZ3VyYXRpb24sIHNlbGYpLkdldFBvc3RJbmNsdWRlcygpCi0gICAgZm9yIGluY2x1ZGUgaW4gaW5jbHVkZXM6Ci0gICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGluY2x1ZGUpID09ICdjb25maWd1cmF0aW9uLmd5cGknOgotICAgICAgICByZXR1cm4gaW5jbHVkZXMKLQotICAgIHNoYXJlZF9neXBpX3BhdGggPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdjb25maWd1cmF0aW9uLmd5cGknKQotICAgIGlmIG9zLnBhdGguaXNmaWxlKHNoYXJlZF9neXBpX3BhdGgpOgotICAgICAgaW5jbHVkZXMuYXBwZW5kKHNoYXJlZF9neXBpX3BhdGgpCi0gICAgcmV0dXJuIGluY2x1ZGVzCi0KICAgZGVmIFdlYmRyaXZlckJlbmNobWFya3NFbmFibGVkKHNlbGYpOgogICAgIHJldHVybiBUcnVlCiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBzdXBlcihDb2JhbHRBbmRyb2lkQ29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19GSUxURVJFRF9URVNUUy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9fRklMVEVSRURfVEVTVFMuaXRlbXMoKToKICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKICAgICByZXR1cm4gZmlsdGVycwogCkBAIC03Miw3ICs1Niw3IEBACiAgICAgcmV0dXJuIGZpbHRlcnMKIAogICAjIEEgbWFwIG9mIGZhaWxpbmcgb3IgY3Jhc2hpbmcgdGVzdHMgcGVyIHRhcmdldC4KLSAgX19GSUxURVJFRF9URVNUUyA9IHsKKyAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgICAgJ2xheW91dF90ZXN0cyc6IFsKICAgICAgICAgICAjIEFuZHJvaWQgcmVsaWVzIG9mIHN5c3RlbSBmb250cyBhbmQgc29tZSBvbGRlciBBbmRyb2lkIGJ1aWxkcyBkbyBub3QKICAgICAgICAgICAjIGhhdmUgdGhlIHVwZGF0ZSAoRW1vamkgMTEuMCkgTm90b0NvbG9yRW1vamkudHRmIGluc3RhbGxlZC4KQEAgLTgwLDYgKzY0LDExIEBACiAgICAgICBdLAogICAgICAgJ2NyeXB0b191bml0dGVzdHMnOiBbJ1AyMjQuKiddLAogICAgICAgJ3JlbmRlcmVyX3Rlc3QnOiBbCisgICAgICAgICAgIyBUT0RPKGIvMjE1NzM5MzIyKTogVXNpbmcgdGhlIGFuZHJvaWQgZm9udHMgYnJlYWtzIHRoZXNlIHRlc3RzLiBUaGV5CisgICAgICAgICAgIyBtYWtlIHVzZSBvZiBmb250cyB0aGF0IGFyZSBub3QgYnVuZGxlZCBvbiBBbmRyb2lkLgorICAgICAgICAgICdQaXhlbFRlc3QuU2ltcGxlVGV4dEluUmVkNDBQdENoaW5lc2VGb250JywKKyAgICAgICAgICAnUGl4ZWxUZXN0LlNpbXBsZVRleHRJblJlZDQwUHRUaGFpRm9udCcsCisKICAgICAgICAgICAjIEluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yIHdoZW4gYWxsb2NhdGluZyB0b28gbXVjaCB0ZXh0dXJlCiAgICAgICAgICAgIyBtZW1vcnksIEFuZHJvaWQgaW5zdGVhZCBqdXN0IHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MuICBTaW5jZSB0aGlzCiAgICAgICAgICAgIyB0ZXN0IGV4cGxpY2l0bHkgdHJpZXMgdG8gYWxsb2NhdGUgdG9vIG11Y2ggdGV4dHVyZSBtZW1vcnksIHdlIGNhbm5vdApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2Rvd25sb2FkX3Nkay5zaCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9kb3dubG9hZF9zZGsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDk2OGY4YgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9kb3dubG9hZF9zZGsuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitzZXQgLWUKKworVE9PTFNfVkVSU0lPTj0iJHsxOi02MjAwODA1fSIKK1RPT0xTX0ZJTEVOQU1FPSJjb21tYW5kbGluZXRvb2xzLWxpbnV4LSR7VE9PTFNfVkVSU0lPTn1fbGF0ZXN0LnppcCIKK0JBU0VfVVJMPSJodHRwczovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9yZXBvc2l0b3J5IgorQU5EUk9JRF9TREtfUk9PVD0iJHtBTkRST0lEX0hPTUU6LSR7SE9NRX0vc3RhcmJvYXJkLXRvb2xjaGFpbnMvQW5kcm9pZFNka30iCitTREtfTUFOQUdFUl9UT09MPSIke0FORFJPSURfU0RLX1JPT1R9L2NtZGxpbmUtdG9vbHMvMS4wL2Jpbi9zZGttYW5hZ2VyIgorQ1VSUkVOVF9XT1JLSU5HX0RJUkVDVE9SWT0iJHtQV0R9IgorCitpZiBbICEgLWYgIiR7U0RLX01BTkFHRVJfVE9PTH0iIF07IHRoZW4KKyAgZWNobyAiRG93bmxvYWRpbmcgdGhlIFNESy4uLiIKKworICBybSAtcmYgIiR7QU5EUk9JRF9TREtfUk9PVH0iCisKKyAgY2QgL3RtcAorICBta2RpciAtcCAke0FORFJPSURfU0RLX1JPT1R9CisgIGN1cmwgLS1zaWxlbnQgLU8gLUogICR7QkFTRV9VUkx9LyR7VE9PTFNfRklMRU5BTUV9CisgIHVuemlwICR7VE9PTFNfRklMRU5BTUV9IC1kICR7QU5EUk9JRF9TREtfUk9PVH0KKyAgcm0gJHtUT09MU19GSUxFTkFNRX0KKyAgbWtkaXIgLXAgJHtBTkRST0lEX1NES19ST09UfS9jbWRsaW5lLXRvb2xzCisgIG12ICR7QU5EUk9JRF9TREtfUk9PVH0vdG9vbHMgJHtBTkRST0lEX1NES19ST09UfS9jbWRsaW5lLXRvb2xzLzEuMAorICBlY2hvICJBbmRyb2lkIFNESyBpbnN0YWxsZWQuIgorZmkKKworY2QgIiR7Q1VSUkVOVF9XT1JLSU5HX0RJUkVDVE9SWX0iCisKK2VjaG8gIlVwZGF0aW5nIHRoZSBTREsuLi4iCisKKyMgVXBkYXRlIHRoZSBpbnN0YWxsYXRpb24KKyR7U0RLX01BTkFHRVJfVE9PTH0gLS1zZGtfcm9vdD0ke0FORFJPSURfU0RLX1JPT1R9IFwKKyAgICAiYnVpbGQtdG9vbHM7MzAuMC4wIiBcCisgICAgImNtYWtlOzMuMTAuMi40OTg4NDA0IiBcCisgICAgImNtZGxpbmUtdG9vbHM7MS4wIiBcCisgICAgImV4dHJhczthbmRyb2lkO20ycmVwb3NpdG9yeSIgXAorICAgICJleHRyYXM7Z29vZ2xlO20ycmVwb3NpdG9yeSIgXAorICAgICJuZGs7MjEuMS42MzUyNDYyIiBcCisgICAgInBhdGNoZXI7djQiIFwKKyAgICAicGxhdGZvcm1zO2FuZHJvaWQtMzAiIFwKKyAgICAicGxhdGZvcm0tdG9vbHMiCisKK2VjaG8gIkFuZHJvaWQgU0RLIHVwZGF0ZWQuIgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2dyYXBoaWNzLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2dyYXBoaWNzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZWVkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3JhcGhpY3MuY2MKQEAgLTAsMCArMSw1OSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2dyYXBoaWNzLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorCisjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9ncmFwaGljcy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9hcHBsaWNhdGlvbl9hbmRyb2lkLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHNoYXJlZCB7CisKK25hbWVzcGFjZSB7CisKK2Zsb2F0IEdldE1heGltdW1GcmFtZUludGVydmFsSW5NaWxsaXNlY29uZHMoKSB7CisgIHJldHVybiAtMS4wZjsKK30KKworZmxvYXQgR2V0TWluaW11bUZyYW1lSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcygpIHsKKyAgcmV0dXJuIDE2LjBmOworfQorCitib29sIElzTWFwVG9NZXNoRW5hYmxlZCgpIHsKKyAgYm9vbCBzdXBwb3J0c19zcGhlcmljYWxfdmlkZW9zID0KKyAgICAgIHN0YXJib2FyZDo6YW5kcm9pZDo6c2hhcmVkOjpBcHBsaWNhdGlvbkFuZHJvaWQ6OkdldCgpCisgICAgICAgICAgLT5HZXRPdmVybGF5ZWRCb29sVmFsdWUoInN1cHBvcnRzX3NwaGVyaWNhbF92aWRlb3MiKTsKKyAgcmV0dXJuIHN1cHBvcnRzX3NwaGVyaWNhbF92aWRlb3M7Cit9CisKK2NvbnN0IENvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpIGtHcmFwaGljc0FwaSA9IHsKKyAgICBrQ29iYWx0RXh0ZW5zaW9uR3JhcGhpY3NOYW1lLAorICAgIDMsCisgICAgJkdldE1heGltdW1GcmFtZUludGVydmFsSW5NaWxsaXNlY29uZHMsCisgICAgJkdldE1pbmltdW1GcmFtZUludGVydmFsSW5NaWxsaXNlY29uZHMsCisgICAgJklzTWFwVG9NZXNoRW5hYmxlZCwKK307CisKK30gIC8vIG5hbWVzcGFjZQorCitjb25zdCB2b2lkKiBHZXRHcmFwaGljc0FwaSgpIHsKKyAgcmV0dXJuICZrR3JhcGhpY3NBcGk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3JhcGhpY3MuaCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9ncmFwaGljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjM0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3JhcGhpY3MuaApAQCAtMCwwICsxLDI4IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX0FORFJPSURfU0hBUkVEX0dSQVBISUNTX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9BTkRST0lEX1NIQVJFRF9HUkFQSElDU19IXworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworCitjb25zdCB2b2lkKiBHZXRHcmFwaGljc0FwaSgpOworCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9BTkRST0lEX1NIQVJFRF9HUkFQSElDU19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiNjVkYi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBQbGF0Zm9ybSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBBbmRyb2lkIG9uIFN0YXJib2FyZC4gIEF1dG9tYXRpY2FsbHkKLSMgaW5jbHVkZWQgYnkgZ3lwX2NvYmFsdCBpbiBhbGwgLmd5cCBmaWxlcyBieSBDb2JhbHQgdG9nZXRoZXIgd2l0aCBiYXNlLmd5cGkuCi0jCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3RhcmdldF9vcyc6ICdhbmRyb2lkJywKLSAgICAnZmluYWxfZXhlY3V0YWJsZV90eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAnZ3Rlc3RfdGFyZ2V0X3R5cGUnOiAnc2hhcmVkX2xpYnJhcnknLAotICAgICdzYl93aWRldmluZV9wbGF0Zm9ybSc6ICdhbmRyb2lkJywKLSAgICAnc2JfZW5hYmxlX2JlbmNobWFyayc6IDEsCi0gICAgJ2NvYmFsdF9saWNlbnNlc19wbGF0Zm9ybSc6ICdhbmRyb2lkJywKLQotICAgICdnbF90eXBlJzogJ3N5c3RlbV9nbGVzMicsCi0gICAgJ2VuYWJsZV9yZW1vdGVfZGVidWdnaW5nJzogMCwKLQotICAgICdlbmFibGVfdnVsa2FuJSc6IDAsCi0KLSAgICAnbGlua2VyX2ZsYWdzJzogWwotICAgICAgIyBUaGUgTkRLIGRlZmF1bHQgImxkIiBpcyBhY3R1YWxseSB0aGUgZ29sZCBsaW5rZXIgZm9yIGFsbCBhcmNoaXRlY3R1cmVzCi0gICAgICAjIGV4Y2VwdCBhcm02NCAoYWFyY2g2NCkgd2hlcmUgaXQncyB0aGUgYmZkIGxpbmtlci4gRG9uJ3QgdXNlIGVpdGhlciBvZgotICAgICAgIyB0aG9zZSwgcmF0aGVyIHVzZSBsbGQgZXZlcnl3aGVyZS4gU2VlIHJlbGVhc2Ugbm90ZXMgZm9yIE5ESyAxOToKLSAgICAgICMgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vbmRrL2Rvd25sb2Fkcy9yZXZpc2lvbl9oaXN0b3J5Ci0gICAgICAnLWZ1c2UtbGQ9bGxkJywKLSAgICBdLAotCi0gICAgIyBEZWZpbmUgcGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncy4KLSAgICAjIFJlZmVyIHRvIGJhc2UuZ3lwaSBmb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdmFyaWFibGVzLgotICAgICdjb21waWxlcl9mbGFnc19ob3N0JzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGVidWcnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICAgICctTzAnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2RldmVsJzogWwotICAgICAgJy1mcnR0aScsCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19xYSc6IFsKLSAgICAgICctZm5vLXJ0dGknLAotICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfcWFfc2l6ZSc6IFsKLSAgICAgICctT3MnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhX3NwZWVkJzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZCc6IFsKLSAgICAgICctZm5vLXJ0dGknLAotICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZF9zaXplJzogWwotICAgICAgJy1PcycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZF9zcGVlZCc6IFsKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ3BsYXRmb3JtX2xpYnJhcmllcyc6IFsKLSAgICAgICctbEVHTCcsCi0gICAgICAnLWxHTEVTdjInLAotICAgICAgJy1sT3BlblNMRVMnLAotICAgICAgJy1sYW5kcm9pZCcsCi0gICAgICAnLWxsb2cnLAotICAgICAgJy1sbWVkaWFuZGsnLAotICAgIF0sCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2NvYmFsdF9mYXN0YnVpbGQ9PTAnLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICAgICAnLWcnLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAgICAgJy1nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZCc6IFsKLSAgICAgICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ3NiX3BlZGFudGljX3dhcm5pbmdzPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctV2FsbCcsCi0gICAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAgICctV3VucmVhY2hhYmxlLWNvZGUnLAotICAgICAgICAgICMgRG9uJ3QgZ2V0IHBlZGFudGljIGFib3V0IHdhcm5pbmdzIGZyb20gYmFzZSBtYWNyb3MuIFRoZXNlIG11c3QgYmUKLSAgICAgICAgICAjIGRpc2FibGVkIGFmdGVyIHRoZSAtV2FsbCBhYm92ZSwgc28gdGhpcyBoYXMgdG8gYmUgZG9uZSBoZXJlIHJhdGhlcgotICAgICAgICAgICMgdGhhbiBpbiB0aGUgcGxhdGZvcm0ncyB0YXJnZXQgdG9vbGNoYWluLgotICAgICAgICAgICMgVE9ETzogUmViYXNlIGJhc2UgYW5kIHVzZSBzdGF0aWNfYXNzZXJ0IGluc3RlYWQgb2YgQ09NUElMRV9BU1NFUlQKLSAgICAgICAgICAnLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZicsICAjIENPTVBJTEVfQVNTRVJUCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLCAgIyBMQVpZX0lOU1RBTkNFX0lOSVRJQUxJWkVSCi0gICAgICAgICAgIyBJdCdzIE9LIG5vdCB0byB1c2Ugc29tZSBpbnB1dCBwYXJhbWV0ZXJzLiBOb3RlIHRoYXQgdGhlIG9yZGVyCi0gICAgICAgICAgIyBtYXR0ZXJzOiBXYWxsIGltcGxpZXMgV3VudXNlZC1wYXJhbWV0ZXIgYW5kIFduby11bnVzZWQtcGFyYW1ldGVyCi0gICAgICAgICAgIyBoYXMgbm8gZWZmZWN0IGlmIHNwZWNpZmllZCBiZWZvcmUgV2FsbC4KLSAgICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydfdHlwZT09ImV4ZWN1dGFibGUiJywgewotICAgICAgICAjIEFuZHJvaWQgTG9sbGlwb3ArIHJlcXVpcmVzIHJlbG9jYXRhYmxlIGV4ZWN1dGFibGVzLgotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctZlBJRScsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctcGllJywKLSAgICAgICAgXSwKLSAgICAgIH0sewotICAgICAgICAjIEFuZHJvaWQgcmVxdWlyZXMgcmVsb2NhdGFibGUgc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWZQSUMnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ3VzZV9hc2FuPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgICctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgICMgRm9yY2UgbGlua2luZyBvZiB0aGUgaGVscGVycyBpbiBzYW5pdGl6ZXJfb3B0aW9ucy5jYwotICAgICAgICAgICctV2wsLXVfc2FuaXRpemVyX29wdGlvbnNfbGlua19oZWxwZXInLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnQUREUkVTU19TQU5JVElaRVInLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ3VzZV90c2FuPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPXRocmVhZCcsCi0gICAgICAgICAgJy1mbm8tb21pdC1mcmFtZS1wb2ludGVyJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mc2FuaXRpemU9dGhyZWFkJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1RIUkVBRF9TQU5JVElaRVInLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwgIyBlbmQgb2YgdGFyZ2V0X2RlZmF1bHRzCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLnB5CmluZGV4IDgzZTU1ZDIuLjU0ZjFhNmUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKQEAgLTE3LDMxOCArMTcsMjQgQEAKIAogaW1wb3J0IGltcCAgIyBweWxpbnQ6IGRpc2FibGU9ZGVwcmVjYXRlZC1tb2R1bGUKIGltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKIAotZnJvbSBzdGFyYm9hcmQuYW5kcm9pZC5zaGFyZWQgaW1wb3J0IHNka191dGlscwotZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IGNsYW5nIGFzIGNsYW5nX2J1aWxkCiBmcm9tIHN0YXJib2FyZC5idWlsZC5wbGF0Zm9ybV9jb25maWd1cmF0aW9uIGltcG9ydCBQbGF0Zm9ybUNvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IHRvdWNoCi0KLV9BUEtfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG9zLnBhdGgucGFyZGlyLCAnYXBrJykKLV9BUEtfQlVJTERfSURfRklMRSA9IG9zLnBhdGguam9pbihfQVBLX0RJUiwgJ2J1aWxkLmlkJykKLV9DT0JBTFRfR1JBRExFID0gb3MucGF0aC5qb2luKF9BUEtfRElSLCAnY29iYWx0LWdyYWRsZS5zaCcpCi0KLSMgVGhlIEFQSSBsZXZlbCBvZiBOREsgdG9vbHMgdG8gdXNlLiBUaGlzIHNob3VsZCBiZSB0aGUgbWluaW11bSBBUEkgbGV2ZWwgb24KLSMgd2hpY2ggdGhlIGFwcCBpcyBleHBlY3RlZCB0byBydW4uIElmIHNvbWUgZmVhdHVyZSBmcm9tIGEgbmV3ZXIgTkRLIGxldmVsIGlzCi0jIG5lZWRlZCwgdGhpcyBtYXkgYmUgaW5jcmVhc2VkIHdpdGggY2F1dGlvbi4KLSMgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vbmRrL2d1aWRlcy9zdGFibGVfYXBpcy5odG1sCi0jCi0jIFVzaW5nIDI0IHdpbGwgbGVhZCB0byBtaXNzaW5nIHN5bWJvbHMgb24gQVBJIDIzIGRldmljZXMuCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyb2lkLW5kay9uZGsvaXNzdWVzLzEyNgotX0FORFJPSURfTkRLX0FQSV9MRVZFTCA9ICcyMScKLQotIyBNYXBzIHRoZSBBbmRyb2lkIEFCSSB0byB0aGUgY2xhbmcgJiBhciBleGVjdXRhYmxlIG5hbWVzLgotX0FCSV9UT09MX05BTUVTID0gewotICAgICd4ODYnOiAoJ2k2ODYtbGludXgtYW5kcm9pZHt9LWNsYW5nJy5mb3JtYXQoX0FORFJPSURfTkRLX0FQSV9MRVZFTCksCi0gICAgICAgICAgICAnaTY4Ni1saW51eC1hbmRyb2lkLWFyJyksCi0gICAgJ3g4Nl82NCc6ICgneDg2XzY0LWxpbnV4LWFuZHJvaWR7fS1jbGFuZycuZm9ybWF0KF9BTkRST0lEX05ES19BUElfTEVWRUwpLAotICAgICAgICAgICAgICAgJ3g4Nl82NC1saW51eC1hbmRyb2lkLWFyJyksCi0gICAgJ2FybWVhYmknOgotICAgICAgICAoJ2FybXY3YS1saW51eC1hbmRyb2lkZWFiaXt9LWNsYW5nJy5mb3JtYXQoX0FORFJPSURfTkRLX0FQSV9MRVZFTCksCi0gICAgICAgICAnYXJtdjdhLWxpbnV4LWFuZHJvaWRlYWJpLWFyJyksCi0gICAgJ2FybWVhYmktdjdhJzoKLSAgICAgICAgKCdhcm12N2EtbGludXgtYW5kcm9pZGVhYml7fS1jbGFuZycuZm9ybWF0KF9BTkRST0lEX05ES19BUElfTEVWRUwpLAotICAgICAgICAgJ2FybS1saW51eC1hbmRyb2lkZWFiaS1hcicpLAotICAgICdhcm02NC12OGEnOgotICAgICAgICAoJ2FhcmNoNjQtbGludXgtYW5kcm9pZHt9LWNsYW5nJy5mb3JtYXQoX0FORFJPSURfTkRLX0FQSV9MRVZFTCksCi0gICAgICAgICAnYWFyY2g2NC1saW51eC1hbmRyb2lkLWFyJyksCi19CiAKIAogY2xhc3MgQW5kcm9pZENvbmZpZ3VyYXRpb24oUGxhdGZvcm1Db25maWd1cmF0aW9uKToKICAgIiIiU3RhcmJvYXJkIEFuZHJvaWQgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKIAotICAjIFRPRE86IG1ha2UgQVNBTiB3b3JrIHdpdGggTkRLIHRvb2xzIGFuZCBlbmFibGUgaXQgYnkgZGVmYXVsdAotICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgIHBsYXRmb3JtLAotICAgICAgICAgICAgICAgYW5kcm9pZF9hYmksCi0gICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9kZWZhdWx0L3NhYmkuanNvbicpOgotICAgIHN1cGVyKEFuZHJvaWRDb25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQpCi0gICAgc2VsZi5fdGFyZ2V0X3Rvb2xjaGFpbiA9IE5vbmUKLSAgICBzZWxmLl9ob3N0X3Rvb2xjaGFpbiA9IE5vbmUKLQorICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0pOgorICAgIHN1cGVyKEFuZHJvaWRDb25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSkKICAgICBzZWxmLkFwcGVuZEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvblBhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIAotICAgIHNlbGYuYW5kcm9pZF9hYmkgPSBhbmRyb2lkX2FiaQotICAgIHNlbGYuc2FiaV9qc29uX3BhdGggPSBzYWJpX2pzb25fcGF0aAotCi0gICAgc2VsZi5hbmRyb2lkX2hvbWUgPSBzZGtfdXRpbHMuR2V0U2RrUGF0aCgpCi0gICAgc2VsZi5hbmRyb2lkX25ka19ob21lID0gc2RrX3V0aWxzLkdldE5ka1BhdGgoKQotCi0gICAgcHJpbnQoJ1VzaW5nIEFuZHJvaWQgU0RLIGF0IHt9Jy5mb3JtYXQoc2VsZi5hbmRyb2lkX2hvbWUpKQotICAgIHByaW50KCdVc2luZyBBbmRyb2lkIE5ESyBhdCB7fScuZm9ybWF0KHNlbGYuYW5kcm9pZF9uZGtfaG9tZSkpCi0KLSAgZGVmIEdldEJ1aWxkRm9ybWF0KHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIGRlc2lyZWQgYnVpbGQgZm9ybWF0LiIiIgotICAgICMgVGhlIGNvbW1hIG1lYW5zIHRoYXQgbmluamEgYW5kIHF0Y3JlYXRvcl9uaW5qYSB3aWxsIGJlIGNoYWluZWQgYW5kIHVzZSB0aGUKLSAgICAjIHNhbWUgaW5wdXQgaW5mb3JtYXRpb24gc28gdGhhdCAuZ3lwIGZpbGVzIHdpbGwgb25seSBoYXZlIHRvIGJlIHBhcnNlZAotICAgICMgb25jZS4KLSAgICByZXR1cm4gJ25pbmphLHF0Y3JlYXRvcl9uaW5qYScKLQotICBkZWYgR2V0VmFyaWFibGVzKHNlbGYsIGNvbmZpZ3VyYXRpb24pOgotICAgIHZhcmlhYmxlcyA9IHN1cGVyKEFuZHJvaWRDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRWYXJpYWJsZXMoCi0gICAgICAgIGNvbmZpZ3VyYXRpb24sIHVzZV9jbGFuZz0xKQotICAgIHZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnQU5EUk9JRF9IT01FJzoKLSAgICAgICAgICAgIHNlbGYuYW5kcm9pZF9ob21lLAotICAgICAgICAnTkRLX0hPTUUnOgotICAgICAgICAgICAgc2VsZi5hbmRyb2lkX25ka19ob21lLAotICAgICAgICAnQU5EUk9JRF9BQkknOgotICAgICAgICAgICAgc2VsZi5hbmRyb2lkX2FiaSwKLSAgICAgICAgJ2luY2x1ZGVfcGF0aF9wbGF0Zm9ybV9kZXBsb3lfZ3lwaSc6Ci0gICAgICAgICAgICAnc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpJywKLSAgICB9KQotICAgIHJldHVybiB2YXJpYWJsZXMKLQogICBkZWYgR2V0RGVwbG95UGF0aFBhdHRlcm5zKHNlbGYpOgogICAgICMgZXhhbXBsZSBzcmMvb3V0L2FuZHJvaWQtYXJtNjQvZGV2ZWwvY29iYWx0LmFwawogICAgIHJldHVybiBbJyouYXBrJ10KIAotICBkZWYgR2V0R2VuZXJhdG9yVmFyaWFibGVzKHNlbGYsIGNvbmZpZ19uYW1lKToKLSAgICBfID0gY29uZmlnX25hbWUKLSAgICBnZW5lcmF0b3JfdmFyaWFibGVzID0gewotICAgICAgICAncXRjcmVhdG9yX3Nlc3Npb25fbmFtZV9wcmVmaXgnOiAnY29iYWx0JywKLSAgICB9Ci0gICAgcmV0dXJuIGdlbmVyYXRvcl92YXJpYWJsZXMKLQotICBkZWYgU2V0dXBQbGF0Zm9ybVRvb2xzKHNlbGYsIGJ1aWxkX251bWJlcik6Ci0gICAgc2RrX3V0aWxzLkluc3RhbGxTZGtJZk5lZWRlZCgpCi0gICAgc3VicHJvY2Vzcy5jYWxsKFtfQ09CQUxUX0dSQURMRSwgJy0tcmVzZXQnXSkKLSAgICB3aXRoIG9wZW4oX0FQS19CVUlMRF9JRF9GSUxFLCAndycpIGFzIGJ1aWxkX2lkX2ZpbGU6Ci0gICAgICBidWlsZF9pZF9maWxlLndyaXRlKCd7fScuZm9ybWF0KGJ1aWxkX251bWJlcikpCi0KLSAgZGVmIEdldEVudmlyb25tZW50VmFyaWFibGVzKHNlbGYpOgotICAgIGVudl92YXJpYWJsZXMgPSB7fQotCi0gICAgIyBBbmRyb2lkIGJ1aWxkcyB0ZW5kIHRvIGNvbnN1bWUgc2lnbmlmaWNhbnRseSBtb3JlIG1lbW9yeSB0aGFuIHRoZQotICAgICMgZGVmYXVsdCBzZXR0aW5ncyBwZXJtaXQsIHNvIGNhcCB0aGlzIGF0IDEgaW4gb3JkZXIgdG8gYXZvaWQgYnVpbGQKLSAgICAjIGlzc3Vlcy4gIFdpdGhvdXQgdGhpcywgMzJHQiBtYWNoaW5lcyBlbmQgdXAgZ2V0dGluZyBhdXRvbWF0aWNhbGx5Ci0gICAgIyBjb25maWd1cmVkIHRvIHJ1biA1IGF0IGEgdGltZSwgd2hpY2ggY2FuIGJlIHRvbyBtdWNoIGZvciBhdCBsZWFzdAotICAgICMgYW5kcm9pZC1hcm02NF9kZWJ1Zy4KLSAgICAjIFRPRE86IEV2ZW50dWFsbHkgcmVwbGFjZSB0aGlzIHdpdGggc29tZXRoaW5nIG1vcmUgcm9idXN0LCBsaWtlIGFuCi0gICAgIyAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWJzdHJhY3QgdG9vbGNoYWluIGZvciBBbmRyb2lkLgotICAgIGVudl92YXJpYWJsZXMudXBkYXRlKHsnR1lQX0xJTktfQ09OQ1VSUkVOQ1knOiAnMSd9KQotCi0gICAgcmV0dXJuIGVudl92YXJpYWJsZXMKLQotICBkZWYgR2V0VGFyZ2V0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICBpZiBub3Qgc2VsZi5fdGFyZ2V0X3Rvb2xjaGFpbjoKLSAgICAgIHRvb2xfcHJlZml4ID0gb3MucGF0aC5qb2luKHNka191dGlscy5HZXROZGtQYXRoKCksICd0b29sY2hhaW5zJywgJ2xsdm0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWJ1aWx0JywgJ2xpbnV4LXg4Nl82NCcsICdiaW4nLCAnJykKLSAgICAgIGNjX3BhdGggPSBzZWxmLmJ1aWxkX2FjY2VsZXJhdG9yICsgJyAnICsgdG9vbF9wcmVmaXggKyBfQUJJX1RPT0xfTkFNRVNbCi0gICAgICAgICAgc2VsZi5hbmRyb2lkX2FiaV1bMF0KLSAgICAgIGN4eF9wYXRoID0gY2NfcGF0aCArICcrKycKLSAgICAgIGFyX3BhdGggPSB0b29sX3ByZWZpeCArIF9BQklfVE9PTF9OQU1FU1tzZWxmLmFuZHJvaWRfYWJpXVsxXQotICAgICAgY2xhbmdfZmxhZ3MgPSBbCi0gICAgICAgICAgIyBsaWJ3ZWJwIHVzZXMgdGhlIGNwdWZlYXR1cmVzIGxpYnJhcnkgdG8gZGV0ZWN0IEFSTSBORU9OIHN1cHBvcnQKLSAgICAgICAgICAnLUl7fS9zb3VyY2VzL2FuZHJvaWQvY3B1ZmVhdHVyZXMnLmZvcm1hdChzZWxmLmFuZHJvaWRfbmRrX2hvbWUpLAotCi0gICAgICAgICAgIyBNaW1pYyBidWlsZC9jbWFrZS9hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSBpbiB0aGUgQW5kcm9pZCBOREsuCi0gICAgICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgICAgICctZnVud2luZC10YWJsZXMnLAotICAgICAgICAgICctZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcnLAotICAgICAgICAgICctbm8tY2Fub25pY2FsLXByZWZpeGVzJywKLQotICAgICAgICAgICMgT3RoZXIgZmxhZ3MKLSAgICAgICAgICAnLWZzaWduZWQtY2hhcicsCi0gICAgICAgICAgJy1mbm8tbGltaXQtZGVidWctaW5mbycsCi0gICAgICAgICAgJy1mbm8tZXhjZXB0aW9ucycsCi0gICAgICAgICAgJy1mY29sb3ItZGlhZ25vc3RpY3MnLAotICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZycsICAjIFNlZSBodHRwOi8vY3JidWcuY29tLzMyMjA0Ci0KLSAgICAgICAgICAjIERlZmF1bHQgdmlzaWJpbGl0eSBpcyBoaWRkZW4gdG8gZW5hYmxlIGRlYWQgc3RyaXBwaW5nLgotICAgICAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKLSAgICAgICAgICAjIEFueSB3YXJuaW5nIHdpbGwgc3RvcCB0aGUgYnVpbGQuCi0gICAgICAgICAgJy1XZXJyb3InLAotCi0gICAgICAgICAgIyBEaXNhYmxlIGVycm9ycyBmb3IgdGhlIHdhcm5pbmcgdGlsbCB0aGUgQW5kcm9pZCBOREsgcjE5IGlzIGZpeGVkLgotICAgICAgICAgICMgVGhlIHdhcm5pbmcgaXMgdHJpZ2dlciB3aGVuIGNvbXBpbGluZyAuYyBmaWxlcyBhbmQgY29tcGxhaW5zIGZvcgotICAgICAgICAgICMgJy1zdGRsaWI9bGliYysrJyB3aGljaCBpcyBhZGRlZCBieSB0aGUgTkRLLgotICAgICAgICAgICctV25vLWVycm9yPXVudXNlZC1jb21tYW5kLWxpbmUtYXJndW1lbnQnLAotCi0gICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHJlZ2lzdGVyIHZhcmlhYmxlcyAoaW4gYmFzZSBhbmQgbmV0KQotICAgICAgICAgICctV25vLWRlcHJlY2F0ZWQtcmVnaXN0ZXInLAotICAgICAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCBkZXByZWNhdGVkIElDVSBtZXRob2RzIChpbiBnb29nbGV1cmwgYW5kIG5ldCkKLSAgICAgICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCi0gICAgICAgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KLSAgICAgICAgICAnLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZScsCi0gICAgICAgICAgIyBzaGlmdGluZyBhIG5lZ2F0aXZlIHNpZ25lZCB2YWx1ZSBpcyB1bmRlZmluZWQKLSAgICAgICAgICAnLVduby1zaGlmdC1uZWdhdGl2ZS12YWx1ZScsCi0gICAgICAgICAgIyBEb24ndCB3YXJuIGZvciBpbXBsaWNpdCBzaWduIGNvbnZlcnNpb25zLiAoaW4gdjggYW5kIHByb3RvYnVmKQotICAgICAgICAgICctV25vLXNpZ24tY29udmVyc2lvbicsCi0gICAgICBdCi0gICAgICBjbGFuZ19kZWZpbmVzID0gWwotICAgICAgICAgICMgRW5hYmxlIGNvbXBpbGUtdGltZSBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIEFCSQotICAgICAgICAgICdBTkRST0lEX0FCST17fScuZm9ybWF0KHNlbGYuYW5kcm9pZF9hYmkpLAotICAgICAgICAgICMgLURBTkRST0lEIGlzIGFuIGFyZ3VtZW50IHRvIHNvbWUgaWZkZWZzIGluIHRoZSBOREsncyBlZ2xwbGF0Zm9ybS5oCi0gICAgICAgICAgJ0FORFJPSUQnLAotICAgICAgICAgICMgQ29iYWx0IG9uIExpbnV4IGZsYWcKLSAgICAgICAgICAnQ09CQUxUX0xJTlVYJywKLSAgICAgICAgICAjIFNvIHRoYXQgd2UgZ2V0IHRoZSBQUkkqIG1hY3JvcyBmcm9tIGludHR5cGVzLmgKLSAgICAgICAgICAnX19TVERDX0ZPUk1BVF9NQUNST1MnLAotICAgICAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICAgICAnX0dOVV9TT1VSQ0U9MScsCi0gICAgICAgICAgIyBVbmRlZmluaW5nIF9fbGludXhfXyBjYXVzZXMgdGhlIHN5c3RlbSBoZWFkZXJzIHRvIG1ha2Ugd3JvbmcKLSAgICAgICAgICAjIGFzc3VtcHRpb25zIGFib3V0IHdoaWNoIEMtbGlicmFyeSBpcyB1c2VkIG9uIHRoZSBwbGF0Zm9ybS4KLSAgICAgICAgICAnX19CSU9OSUNfXycsCi0gICAgICAgICAgIyBVbmRlZmluaW5nIF9fbGludXhfXyBsZWF2ZXMgbGliYysrIHdpdGhvdXQgYSB0aHJlYWRzIGltcGxlbWVudGF0aW9uLgotICAgICAgICAgICMgVE9ETzogU2VlIGlmIHRoZXJlJ3MgYSB3YXkgdG8gbWFrZSBsaWJjcHAgdGhyZWFkaW5nIHVzZSBTdGFyYm9hcmQuCi0gICAgICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfUFRIUkVBRCcsCi0gICAgICBdCi0gICAgICBsaW5rZXJfZmxhZ3MgPSBbCi0gICAgICAgICAgIyBVc2UgdGhlIHN0YXRpYyBMTFZNIGxpYmMrKy4KLSAgICAgICAgICAnLXN0YXRpYy1saWJzdGRjKysnLAotCi0gICAgICAgICAgIyBNaW1pYyBidWlsZC9jbWFrZS9hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSBpbiB0aGUgQW5kcm9pZCBOREssIGJ1dAotICAgICAgICAgICMgZm9yY2UgYnVpbGQtaWQgdG8gc2hhMSwgc28gdGhhdCBvbGRlciBsbGRiIHZlcnNpb25zIGNhbiBzdGlsbCBmaW5kCi0gICAgICAgICAgIyBkZWJ1Z3N5bWJvbHMsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5kcm9pZC1uZGsvbmRrL2lzc3Vlcy84ODUKLSAgICAgICAgICAnLVdsLC0tYnVpbGQtaWQ9c2hhMScsCi0gICAgICAgICAgJy1XbCwtLXdhcm4tc2hhcmVkLXRleHRyZWwnLAotICAgICAgICAgICctV2wsLS1mYXRhbC13YXJuaW5ncycsCi0gICAgICAgICAgJy1XbCwtLWdjLXNlY3Rpb25zJywKLSAgICAgICAgICAnLVdsLC16LG5vY29weXJlbG9jJywKLQotICAgICAgICAgICMgV3JhcHBlciBzeW5jaHJvbml6ZXMgcHVuY2gtb3V0IHZpZGVvIGJvdW5kcyB3aXRoIHRoZSBVSSBmcmFtZS4KLSAgICAgICAgICAnLVdsLC0td3JhcD1lZ2xTd2FwQnVmZmVycycsCi0gICAgICBdCi0gICAgICBzZWxmLl90YXJnZXRfdG9vbGNoYWluID0gWwotICAgICAgICAgIGNsYW5nLkNDb21waWxlcigKLSAgICAgICAgICAgICAgcGF0aD1jY19wYXRoLCBkZWZpbmVzPWNsYW5nX2RlZmluZXMsIGV4dHJhX2ZsYWdzPWNsYW5nX2ZsYWdzKSwKLSAgICAgICAgICBjbGFuZy5DeHhDb21waWxlcigKLSAgICAgICAgICAgICAgcGF0aD1jeHhfcGF0aCwKLSAgICAgICAgICAgICAgZGVmaW5lcz1jbGFuZ19kZWZpbmVzLAotICAgICAgICAgICAgICBleHRyYV9mbGFncz1jbGFuZ19mbGFncyArIFsKLSAgICAgICAgICAgICAgICAgICctc3RkPWMrKzE0JywKLSAgICAgICAgICAgICAgXSksCi0gICAgICAgICAgY2xhbmcuQXNzZW1ibGVyV2l0aENQcmVwcm9jZXNzb3IoCi0gICAgICAgICAgICAgIHBhdGg9Y2NfcGF0aCwgZGVmaW5lcz1jbGFuZ19kZWZpbmVzLCBleHRyYV9mbGFncz1jbGFuZ19mbGFncyksCi0gICAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcihwYXRoPWFyX3BhdGgpLAotICAgICAgICAgIGFyLlN0YXRpY0xpbmtlcihwYXRoPWFyX3BhdGgpLAotICAgICAgICAgIGNsYW5neHguU2hhcmVkTGlicmFyeUxpbmtlcihwYXRoPWN4eF9wYXRoLCBleHRyYV9mbGFncz1saW5rZXJfZmxhZ3MpLAotICAgICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoLCBleHRyYV9mbGFncz1saW5rZXJfZmxhZ3MpLAotICAgICAgXQotICAgIHJldHVybiBzZWxmLl90YXJnZXRfdG9vbGNoYWluCi0KLSAgZGVmIEdldEhvc3RUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIGlmIG5vdCBzZWxmLl9ob3N0X3Rvb2xjaGFpbjoKLSAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Jyk6Ci0gICAgICAgIHNlbGYuaG9zdF9jb21waWxlcl9lbnZpcm9ubWVudCA9IGJ1aWxkLkdldEhvc3RDb21waWxlckVudmlyb25tZW50KAotICAgICAgICAgICAgY2xhbmdfYnVpbGQuR2V0Q2xhbmdTcGVjaWZpY2F0aW9uKCksIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IpCi0gICAgICBjY19wYXRoID0gc2VsZi5ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50WydDQ19ob3N0J10KLSAgICAgIGN4eF9wYXRoID0gc2VsZi5ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50WydDWFhfaG9zdCddCi0gICAgICBzZWxmLl9ob3N0X3Rvb2xjaGFpbiA9IFsKLSAgICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgICBjbGFuZy5DeHhDb21waWxlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgICBjbGFuZy5Bc3NlbWJsZXJXaXRoQ1ByZXByb2Nlc3NvcihwYXRoPWNjX3BhdGgpLAotICAgICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgICBhci5TdGF0aWNMaW5rZXIoKSwKLSAgICAgICAgICBjbGFuZ3h4LkV4ZWN1dGFibGVMaW5rZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICAgIGNwLkNvcHkoKSwKLSAgICAgICAgICB0b3VjaC5TdGFtcCgpLAotICAgICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICAgIF0KLSAgICByZXR1cm4gc2VsZi5faG9zdF90b29sY2hhaW4KLQogICBkZWYgR2V0TGF1bmNoZXIoc2VsZik6CiAgICAgIiIiR2V0cyB0aGUgbW9kdWxlIHVzZWQgdG8gbGF1bmNoIGFwcGxpY2F0aW9ucyBvbiB0aGlzIHBsYXRmb3JtLiIiIgogICAgIG1vZHVsZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAogICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2xhdW5jaGVyLnB5JykpCiAgICAgbGF1bmNoZXJfbW9kdWxlID0gaW1wLmxvYWRfc291cmNlKCdsYXVuY2hlcicsIG1vZHVsZV9wYXRoKQogICAgIHJldHVybiBsYXVuY2hlcl9tb2R1bGUKLQotICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6Ci0gICAgZmlsdGVycyA9IHN1cGVyKEFuZHJvaWRDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgotICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQotICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQuCi0gIF9fRklMVEVSRURfVEVTVFMgPSB7ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKLSAgICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWwotICAgICAgICAgICMgR2V0TWF4TnVtYmVyT2ZDYWNoZWRGcmFtZXMoKSBvbiBBbmRyb2lkIGlzIGRldmljZSBkZXBlbmRlbnQsCi0gICAgICAgICAgIyBhbmQgQW5kcm9pZCBkb2Vzbid0IHByb3ZpZGUgYW4gQVBJIHRvIGdldCBpdC4gU28sIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgICAjIGRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBBbmRyb2lkLiBCdXQgSG9sZEZyYW1lc1VudGlsRnVsbCB0ZXN0cyBkZXBlbmQKLSAgICAgICAgICAjIG9uIHRoaXMgbnVtYmVyIHN0cmljdGx5LgotICAgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkhvbGRGcmFtZXNVbnRpbEZ1bGwvKicsCi0KLSAgICAgICAgICAjIEN1cnJlbnRseSwgaW52YWxpZCBpbnB1dCB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5TaW5nbGVJbnZhbGlkSW5wdXQvKicsCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QnCi0gICAgICAgICAgJy5NdWx0aXBsZVZhbGlkSW5wdXRzQWZ0ZXJJbnZhbGlkS2V5RnJhbWUvKicsCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVJbnZhbGlkSW5wdXQvKicsCi0KLSAgICAgICAgICAjIEFuZHJvaWQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdmlkZW8gcGxheWJhY2ssIHdoaWNoCi0gICAgICAgICAgIyB0aGUgZm9sbG93aW5nIHRlc3RzIGRlcGVuZCB1cG9uLgotICAgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlRocmVlTW9yZURlY29kZXJzLyonLAotCi0gICAgICAgICAgIyBUaGUgdmlkZW8gcGlwZWxpbmUgd2lsbCBoYW5nIGlmIGl0IGRvZXNuJ3QgcmVjZWl2ZSBhbnkgaW5wdXQuCi0gICAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy9QbGF5ZXJDb21wb25lbnRzVGVzdC5FT1NXaXRob3V0SW5wdXQvKicsCi0KLSAgICAgICAgICAjIFRoZSBlL2VhYzMgYXVkaW8gdGltZSByZXBvcnRpbmcgZHVyaW5nIHBhdXNlIHdpbGwgYmUgcmV2aXNpdGllZC4KLSAgICAgICAgICAnUGxheWVyQ29tcG9uZW50c1Rlc3RzL1BsYXllckNvbXBvbmVudHNUZXN0LlBhdXNlLzE1JywKLSAgICAgIF0sCi0gICAgICAnbnBsYic6IFsKLSAgICAgICAgICAjIFRoaXMgdGVzdCBpcyBmYWlsaW5nIGJlY2F1c2UgbG9jYWxob3N0IGlzIG5vdCBkZWZpbmVkIGZvciBJUHY2IGluCi0gICAgICAgICAgIyAvZXRjL2hvc3RzLgotICAgICAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9TYlNvY2tldFJlc29sdmVUZXN0LkxvY2FsaG9zdC8xJywKLQotICAgICAgICAgICMgVGhlc2UgdGVzdHMgYXJlIHRha2luZyBsb25nZXIgZHVlIHRvIGludGVyb3Agb24gYW5kcm9pZC4gV29yayBpcwotICAgICAgICAgICMgdW5kZXJ3YXkgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGlzIGFjY2VwdGFibGUuCi0gICAgICAgICAgJ1NiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbS5WYWxpZGF0ZVBlcmZvcm1hbmNlJywKLSAgICAgICAgICAnU2JNZWRpYUNvbmZpZ3VyYXRpb25UZXN0LlZhbGlkYXRlUGVyZm9ybWFuY2UnLAotCi0gICAgICAgICAgIyBTYkRpcmVjdG9yeSBoYXMgcHJvYmxlbXMgd2l0aCBlbXB0eSBBc3NldCBkaXJzLgotICAgICAgICAgICdTYkRpcmVjdG9yeUNhbk9wZW5UZXN0LlN1bm55RGF5U3RhdGljQ29udGVudCcsCi0gICAgICAgICAgJ1NiRGlyZWN0b3J5R2V0TmV4dFRlc3QuU3VubnlEYXlTdGF0aWNDb250ZW50JywKLSAgICAgICAgICAnU2JEaXJlY3RvcnlPcGVuVGVzdC5TdW5ueURheVN0YXRpY0NvbnRlbnQnLAotICAgICAgICAgICdTYkZpbGVHZXRQYXRoSW5mb1Rlc3QuV29ya3NPblN0YXRpY0NvbnRlbnREaXJlY3RvcmllcycsCi0KLSAgICAgICAgICAjIFRoZXNlIHRlc3RzIGFyZSBkaXNhYmxlZCBkdWUgdG8gbm90IHJlY2VpdmluZyB0aGUga0VuZE9mU3RyZWFtCi0gICAgICAgICAgIyBwbGF5ZXIgc3RhdGUgdXBkYXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuCi0gICAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cy9TYlBsYXllcldyaXRlU2FtcGxlVGVzdC5Ob0lucHV0LyonLAotCi0gICAgICAgICAgIyBBbmRyb2lkIGRvZXMgbm90IHVzZSBTYkRybVNlc3Npb25DbG9zZWRGdW5jLCB3aGljaCB0aGVzZSB0ZXN0cwotICAgICAgICAgICMgZGVwZW5kIG9uLgotICAgICAgICAgICdTYkRybVNlc3Npb25UZXN0LlN1bm55RGF5JywKLSAgICAgICAgICAnU2JEcm1TZXNzaW9uVGVzdC5DbG9zZURybVNlc3Npb25CZWZvcmVVcGRhdGVTZXNzaW9uJywKLQotICAgICAgICAgICMgVGhpcyB0ZXN0IGlzIGZhaWxpbmcgYmVjYXVzZSBBbmRyb2lkIGNhbGxzIHRoZQotICAgICAgICAgICMgU2JEcm1TZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMgd2l0aCBTYkRybVN0YXR1czo6a1NiRHJtU3RhdHVzU3VjY2VzcwotICAgICAgICAgICMgd2hlbiBpbnZhbGlkIGluaXRpYWxpemF0aW9uIGRhdGEgaXMgcGFzc2VkIHRvCi0gICAgICAgICAgIyBTYkRybUdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoKS4KLSAgICAgICAgICAnU2JEcm1TZXNzaW9uVGVzdC5JbnZhbGlkU2Vzc2lvblVwZGF0ZVJlcXVlc3RQYXJhbXMnLAotICAgICAgXSwKLSAgfQotCi0gIGRlZiBHZXRQYXRoVG9TYWJpSnNvbkZpbGUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuc2FiaV9qc29uX3BhdGgKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9pbnN0YWxsX3RhcmdldC5nbmkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pCmluZGV4IGFlZjVmZjIuLjBhNjM1ZTEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9pbnN0YWxsX3RhcmdldC5nbmkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2luc3RhbGxfdGFyZ2V0LmduaQpAQCAtMTIsNiArMTIsNyBAQAogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCitpbXBvcnQoIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2Fwa19zb3VyY2VzLmduaSIpCiBpbXBvcnQoIi8vc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pIikKIGltcG9ydCgiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL2luc3RhbGwuZ25pIikKIApAQCAtMjQsMTMgKzI1LDEwIEBACiAgICAgZm9yd2FyZF92YXJpYWJsZXNfZnJvbShpbnZva2VyLCBbICJ0ZXN0b25seSIgXSkKIAogICAgIGRlcHMgPSBpbnZva2VyLmRlcHMKLSAgICBkZXBzICs9IFsKLSAgICAgICI6JGluc3RhbGxhYmxlX3RhcmdldF9uYW1lIiwKLSAgICAgICIvL3N0YXJib2FyZC9hbmRyb2lkL2FwazphcGtfc291cmNlcyIsCi0gICAgXQorICAgIGRlcHMgKz0gWyAiOiRpbnN0YWxsYWJsZV90YXJnZXRfbmFtZSIgXQogCiAgICAgdGFyZ2V0X291dHB1dCA9ICIkcm9vdF9vdXRfZGlyL2xpYiR7aW5zdGFsbGFibGVfdGFyZ2V0X25hbWV9LnNvIgotICAgIGdyYWRsZV9jb250ZW50X2RpciA9ICIkc2JfaW5zdGFsbF9vdXRwdXRfZGlyLyRzYl9pbnN0YWxsX2NvbnRlbnRfc3ViZGlyIgorICAgIGdyYWRsZV9jb250ZW50X2RpciA9ICIkc2JfaW5zdGFsbF9vdXRwdXRfZGlyLyRpbnN0YWxsYWJsZV90YXJnZXRfbmFtZS8kc2JfaW5zdGFsbF9jb250ZW50X3N1YmRpciIKICAgICBncmFkbGVfZmlsZXNfZGlyID0gIiRyb290X291dF9kaXIvZ3JhZGxlLyRpbnN0YWxsYWJsZV90YXJnZXRfbmFtZSIKICAgICBpZiAoaXNfZ29sZCkgewogICAgICAgZ3JhZGxlX2J1aWxkX3R5cGUgPSAicmVsZWFzZSIKQEAgLTM4LDEwICszNiwxMyBAQAogICAgICAgZ3JhZGxlX2J1aWxkX3R5cGUgPSBidWlsZF90eXBlCiAgICAgfQogCisgICAgYmFzaF9zY3JpcHQgPSAiLy9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvY29iYWx0LWdyYWRsZS5zaCIKKwogICAgIHNvdXJjZXMgPSBbCi0gICAgICAiJHJvb3Rfb3V0X2Rpci9ncmFkbGUvYXBrX3NvdXJjZXMuc3RhbXAiLAorICAgICAgYmFzaF9zY3JpcHQsCiAgICAgICB0YXJnZXRfb3V0cHV0LAogICAgIF0KKyAgICBzb3VyY2VzICs9IGFwa19zb3VyY2VzCiAKICAgICBvdXRwdXRzID0gWyAiJHJvb3Rfb3V0X2Rpci8ke2luc3RhbGxhYmxlX3RhcmdldF9uYW1lfS5hcGsiIF0KIApAQCAtNTMsMTQgKzU0LDEyIEBACiAgICAgY29iYWx0X2xpYnJhcnlfZGlyID0gcmViYXNlX3BhdGgocm9vdF9vdXRfZGlyKQogCiAgICAgc2NyaXB0ID0gIi8vc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5IgotICAgIGJhc2hfc2NyaXB0ID0KLSAgICAgICAgcmViYXNlX3BhdGgoIi8vc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2NvYmFsdC1ncmFkbGUuc2giLCByb290X2J1aWxkX2RpcikKICAgICBhcmdzID0gWwotICAgICAgYmFzaF9zY3JpcHQsCisgICAgICByZWJhc2VfcGF0aChiYXNoX3NjcmlwdCwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgIi0tc2RrIiwKICAgICAgIGFuZHJvaWRfc2RrX3BhdGgsCiAgICAgICAiLS1jYWNoZSIsCi0gICAgICByZWJhc2VfcGF0aChyb290X2J1aWxkX2RpciksCisgICAgICByZWJhc2VfcGF0aCgiJHJvb3RfYnVpbGRfZGlyL2dyYWRsZS8kaW5zdGFsbGFibGVfdGFyZ2V0X25hbWUvY2FjaGUiKSwKICAgICAgICItLXByb2plY3QtZGlyIiwKICAgICAgIGNvYmFsdF9wcm9qZWN0X2RpciwKICAgICAgICItUCIsCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbGF1bmNoZXIucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbGF1bmNoZXIucHkKaW5kZXggMDE3NTE1OS4uZDdiMjIxNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2xhdW5jaGVyLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9sYXVuY2hlci5weQpAQCAtMjIsMTEgKzIyLDkgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCi1pbXBvcnQgUXVldWUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBxdWV1ZQogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCxnLWJhZC1pbXBvcnQtb3JkZXIKLQotZnJvbSBzdGFyYm9hcmQuYW5kcm9pZC5zaGFyZWQgaW1wb3J0IHNka191dGlscworZnJvbSBzdGFyYm9hcmQuYW5kcm9pZC5zaGFyZWQuc2RrX3V0aWxzIGltcG9ydCBTREtfUEFUSAogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGFic3RyYWN0X2xhdW5jaGVyCiAKIF9BUFBfUEFDS0FHRV9OQU1FID0gJ2Rldi5jb2JhbHQuY29hdCcKQEAgLTEzOCw3ICsxMzYsNyBAQAogICAgICAgIyBVc2UgZGVmYXVsdCBhZGIgYmluYXJ5IGZyb20gcGF0aC4KICAgICAgIHNlbGYuYWRiID0gJ2FkYicKICAgICBlbHNlOgotICAgICAgc2VsZi5hZGIgPSBvcy5wYXRoLmpvaW4oc2RrX3V0aWxzLkdldFNka1BhdGgoKSwgJ3BsYXRmb3JtLXRvb2xzJywgJ2FkYicpCisgICAgICBzZWxmLmFkYiA9IG9zLnBhdGguam9pbihTREtfUEFUSCwgJ3BsYXRmb3JtLXRvb2xzJywgJ2FkYicpCiAKICAgICBzZWxmLmFkYl9idWlsZGVyID0gQWRiQ29tbWFuZEJ1aWxkZXIoc2VsZi5hZGIpCiAKQEAgLTMwMyw3ICszMDEsNyBAQAogICAgICAgICBzZWxmLl9DaGVja0NhbGxBZGIoJ3NoZWxsJywgJ3BtJywgJ2dyYW50JywgX0FQUF9QQUNLQUdFX05BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uKQogCi0gICAgZG9uZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICBkb25lX3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgIGFtX21vbml0b3IgPSBBZGJBbU1vbml0b3JXYXRjaGVyKHNlbGYsIGRvbmVfcXVldWUpCiAKICAgICAjIEluY3JlYXNlcyB0aGUgc2l6ZSBvZiB0aGUgbG9nY2F0IGJ1ZmZlci4gIFdpdGhvdXQgdGhpcywgdGhlIGxvZyBidWZmZXIKQEAgLTMyNyw2ICszMjUsNyBAQAogCiAgICAgIyBBY3R1YWxseSBydW5uaW5nIGV4ZWN1dGFibGUKICAgICBydW5fdGltZXIgPSBTdGVwVGltZXIoJ3J1bm5pbmcgZXhlY3V0YWJsZScpCisgICAgYXBwX2NyYXNoZWQgPSBGYWxzZQogICAgIHRyeToKICAgICAgIGFyZ3MgPSBbJ3NoZWxsJywgJ2FtJywgJ3N0YXJ0J10KICAgICAgIGNvbW1hbmRfbGluZV9wYXJhbXMgPSBbCkBAIC0zNDcsNyArMzQ2LDYgQEAKIAogICAgICAgcnVuX2xvb3AgPSBhYnN0cmFjdF9sYXVuY2hlci5BUkdfRFJZUlVOIG5vdCBpbiBzZWxmLmxhdW5jaGVyX2FyZ3MKIAotICAgICAgYXBwX2NyYXNoZWQgPSBGYWxzZQogICAgICAgd2hpbGUgcnVuX2xvb3A6CiAgICAgICAgIGlmIG5vdCBkb25lX3F1ZXVlLmVtcHR5KCk6CiAgICAgICAgICAgZG9uZV9xdWV1ZV9jb2RlID0gZG9uZV9xdWV1ZS5nZXRfbm93YWl0KCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9jb2RlY19icmlkZ2UuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfY29kZWNfYnJpZGdlLmNjCmluZGV4IDU3YWNkYWQuLmQ2NjNmMDggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9jb2RlY19icmlkZ2UuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2NvZGVjX2JyaWRnZS5jYwpAQCAtMjA3LDYgKzIwNyw3IEBACiAgICAgYm9vbCByZXF1aXJlX3NvZnR3YXJlX2NvZGVjLAogICAgIGludCB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkLAogICAgIGJvb2wgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsCisgICAgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLAogICAgIHN0ZDo6c3RyaW5nKiBlcnJvcl9tZXNzYWdlKSB7CiAgIFNCX0RDSEVDSyhlcnJvcl9tZXNzYWdlKTsKIApAQCAtMjU2LDE2ICsyNTcsMTYgQEAKICAgICAgIG5ldyBNZWRpYUNvZGVjQnJpZGdlKGhhbmRsZXIpKTsKICAgZW52LT5DYWxsU3RhdGljVm9pZE1ldGhvZE9yQWJvcnQoCiAgICAgICAiZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjQnJpZGdlIiwgImNyZWF0ZVZpZGVvTWVkaWFDb2RlY0JyaWRnZSIsCi0gICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztaWklJSUxhbmRyb2lkL3ZpZXcvU3VyZmFjZTsiCisgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZztaWlpJSUlMYW5kcm9pZC92aWV3L1N1cmZhY2U7IgogICAgICAgIkxhbmRyb2lkL21lZGlhL01lZGlhQ3J5cHRvOyIKICAgICAgICJMZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjQnJpZGdlJENvbG9ySW5mbzsiCiAgICAgICAiSSIKICAgICAgICJMZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjQnJpZGdlJENyZWF0ZU1lZGlhQ29kZWNCcmlkZ2VSZXN1bHQ7KSIKICAgICAgICJWIiwKICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KG5hdGl2ZV9tZWRpYV9jb2RlY19icmlkZ2UuZ2V0KCkpLCBqX21pbWUuR2V0KCksCi0gICAgICAhIWpfbWVkaWFfY3J5cHRvLCByZXF1aXJlX3NvZnR3YXJlX2NvZGVjLCB3aWR0aCwgaGVpZ2h0LCBmcHMsIGpfc3VyZmFjZSwKLSAgICAgIGpfbWVkaWFfY3J5cHRvLCBqX2NvbG9yX2luZm8uR2V0KCksIHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQsCi0gICAgICBqX2NyZWF0ZV9tZWRpYV9jb2RlY19icmlkZ2VfcmVzdWx0LkdldCgpKTsKKyAgICAgICEhal9tZWRpYV9jcnlwdG8sIHJlcXVpcmVfc29mdHdhcmVfY29kZWMsIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssCisgICAgICB3aWR0aCwgaGVpZ2h0LCBmcHMsIGpfc3VyZmFjZSwgal9tZWRpYV9jcnlwdG8sIGpfY29sb3JfaW5mby5HZXQoKSwKKyAgICAgIHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQsIGpfY3JlYXRlX21lZGlhX2NvZGVjX2JyaWRnZV9yZXN1bHQuR2V0KCkpOwogCiAgIGpvYmplY3Qgal9tZWRpYV9jb2RlY19icmlkZ2UgPSBlbnYtPkNhbGxPYmplY3RNZXRob2RPckFib3J0KAogICAgICAgal9jcmVhdGVfbWVkaWFfY29kZWNfYnJpZGdlX3Jlc3VsdC5HZXQoKSwgIm1lZGlhQ29kZWNCcmlkZ2UiLApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2NvZGVjX2JyaWRnZS5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2NvZGVjX2JyaWRnZS5oCmluZGV4IDYwYTY0ODcuLjc3YjljN2EgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9jb2RlY19icmlkZ2UuaAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfY29kZWNfYnJpZGdlLmgKQEAgLTExMyw2ICsxMTMsNyBAQAogICAgICAgYm9vbCByZXF1aXJlX3NvZnR3YXJlX2NvZGVjLAogICAgICAgaW50IHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQsCiAgICAgICBib29sIGZvcmNlX2JpZ19lbmRpYW5faGRyX21ldGFkYXRhLAorICAgICAgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLAogICAgICAgc3RkOjpzdHJpbmcqIGVycm9yX21lc3NhZ2UpOwogCiAgIH5NZWRpYUNvZGVjQnJpZGdlKCk7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfZGVjb2Rlci5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9kZWNvZGVyLmNjCmluZGV4IDQ0MDk1ZjcuLjY2YmQ0MzcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9kZWNvZGVyLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9kZWNvZGVyLmNjCkBAIC0xMTcsNiArMTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZyYW1lUmVuZGVyZWRDQiYgZnJhbWVfcmVuZGVyZWRfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JfbWVzc2FnZSkKICAgICA6IG1lZGlhX3R5cGVfKGtTYk1lZGlhVHlwZVZpZGVvKSwKICAgICAgIGhvc3RfKGhvc3QpLApAQCAtMTMxLDcgKzEzMiw4IEBACiAgIG1lZGlhX2NvZGVjX2JyaWRnZV8gPSBNZWRpYUNvZGVjQnJpZGdlOjpDcmVhdGVWaWRlb01lZGlhQ29kZWNCcmlkZ2UoCiAgICAgICB2aWRlb19jb2RlYywgd2lkdGgsIGhlaWdodCwgZnBzLCB0aGlzLCBqX291dHB1dF9zdXJmYWNlLCBqX21lZGlhX2NyeXB0bywKICAgICAgIGNvbG9yX21ldGFkYXRhLCByZXF1aXJlX3NvZnR3YXJlX2NvZGVjLCB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkLAotICAgICAgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsIGVycm9yX21lc3NhZ2UpOworICAgICAgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssCisgICAgICBlcnJvcl9tZXNzYWdlKTsKICAgaWYgKCFtZWRpYV9jb2RlY19icmlkZ2VfKSB7CiAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSB2aWRlbyBtZWRpYSBjb2RlYyBicmlkZ2Ugd2l0aCBlcnJvcjogIgogICAgICAgICAgICAgICAgICAgPDwgKmVycm9yX21lc3NhZ2U7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfZGVjb2Rlci5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2RlY29kZXIuaAppbmRleCA0MjNkNmFjLi5kYmU3M2ZjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfZGVjb2Rlci5oCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9kZWNvZGVyLmgKQEAgLTg5LDYgKzg5LDcgQEAKICAgICAgICAgICAgICAgIGNvbnN0IEZyYW1lUmVuZGVyZWRDQiYgZnJhbWVfcmVuZGVyZWRfY2IsCiAgICAgICAgICAgICAgICBpbnQgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCwKICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsCisgICAgICAgICAgICAgICBib29sIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssCiAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JfbWVzc2FnZSk7CiAgIH5NZWRpYURlY29kZXIoKTsKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjY2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfZ2V0X3ZpZGVvX2J1ZmZlcl9idWRnZXQuY2MKQEAgLTAsMCArMSw2OCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FwcGxpY2F0aW9uX2FuZHJvaWQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorCitpbnQgU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KFNiTWVkaWFWaWRlb0NvZGVjIGNvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb2x1dGlvbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25faGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0c19wZXJfcGl4ZWwpIHsKKyAgY29uc3RleHByIGludCBrTWF4VmlkZW9CdWZmZXJCdWRnZXQgPSAzMDAgKiAxMDI0ICogMTAyNDsKKyAgYXV0byBnZXRfb3ZlcmxheWVkX3ZpZGVvX2J1ZmZlcl9idWRnZXQgPSBbXSgpIHsKKyAgICBpbnQgYnVmZmVyX2J1ZGdldCA9IHN0YXJib2FyZDo6YW5kcm9pZDo6c2hhcmVkOjpBcHBsaWNhdGlvbkFuZHJvaWQ6OkdldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5HZXRPdmVybGF5ZWRJbnRWYWx1ZSgibWF4X3ZpZGVvX2J1ZmZlcl9idWRnZXQiKTsKKyAgICBpZiAoYnVmZmVyX2J1ZGdldCA9PSAwKSB7CisgICAgICByZXR1cm4ga01heFZpZGVvQnVmZmVyQnVkZ2V0OworICAgIH0KKyAgICBTQl9MT0coSU5GTykgPDwgIlJSTyBcIm1heF92aWRlb19idWZmZXJfYnVkZ2V0XCIgaXMgc2V0IHRvICIKKyAgICAgICAgICAgICAgICAgPDwgYnVmZmVyX2J1ZGdldCA8PCAiIE1CLiI7CisgICAgcmV0dXJuIGJ1ZmZlcl9idWRnZXQgKiAxMDI0ICogMTAyNDsKKyAgfTsKKworICBzdGF0aWMgY29uc3QgaW50IG92ZXJsYXllZF92aWRlb19idWZmZXJfYnVkZ2V0ID0KKyAgICAgIGdldF9vdmVybGF5ZWRfdmlkZW9fYnVmZmVyX2J1ZGdldCgpOworCisgIGludCB2aWRlb19idWZmZXJfYnVkZ2V0ID0gMDsKKyAgaWYgKChyZXNvbHV0aW9uX3dpZHRoIDw9IDE5MjAgJiYgcmVzb2x1dGlvbl9oZWlnaHQgPD0gMTA4MCkgfHwKKyAgICAgIHJlc29sdXRpb25fd2lkdGggPT0ga1NiTWVkaWFWaWRlb1Jlc29sdXRpb25EaW1lbnNpb25JbnZhbGlkIHx8CisgICAgICByZXNvbHV0aW9uX2hlaWdodCA9PSBrU2JNZWRpYVZpZGVvUmVzb2x1dGlvbkRpbWVuc2lvbkludmFsaWQpIHsKKyAgICAvLyBTcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHZpZGVvIGJ1ZmZlcnMgb2YgbWVkaWEKKyAgICAvLyBzb3VyY2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBnYXJiYWdlIGNvbGxlY3Rpb24gd2hlbiB0aGUgdmlkZW8gcmVzb2x1dGlvbgorICAgIC8vIGlzIGxvd2VyIHRoYW4gMTA4MHAgKDE5MjB4MTA4MCkuCisgICAgdmlkZW9fYnVmZmVyX2J1ZGdldCA9IDMwICogMTAyNCAqIDEwMjQ7CisgIH0gZWxzZSBpZiAocmVzb2x1dGlvbl93aWR0aCA8PSAzODQwICYmIHJlc29sdXRpb25faGVpZ2h0IDw9IDIxNjApIHsKKyAgICBpZiAoYml0c19wZXJfcGl4ZWwgPD0gOCkgeworICAgICAgLy8gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB2aWRlbyBidWZmZXJzIG9mIG1lZGlhCisgICAgICAvLyBzb3VyY2UgYmVmb3JlIHRyaWdnZXJpbmcgYSBnYXJiYWdlIGNvbGxlY3Rpb24gd2hlbiB0aGUgdmlkZW8gcmVzb2x1dGlvbgorICAgICAgLy8gaXMgbG93ZXIgdGhhbiA0ayAoMzg0MHgyMTYwKSBhbmQgYml0IHBlciBwaXhlbCBpcyBsb3dlciB0aGFuIDguCisgICAgICB2aWRlb19idWZmZXJfYnVkZ2V0ID0gMTAwICogMTAyNCAqIDEwMjQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFNwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdmlkZW8gYnVmZmVycyBvZiBtZWRpYQorICAgICAgLy8gc291cmNlIGJlZm9yZSB0cmlnZ2VyaW5nIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHdoZW4gdmlkZW8gcmVzb2x1dGlvbiBpcworICAgICAgLy8gbG93ZXIgdGhhbiA0ayAoMzg0MHgyMTYwKSBhbmQgYml0IHBlciBwaXhlbCBpcyBncmVhdGVyIHRoYW4gOC4KKyAgICAgIHZpZGVvX2J1ZmZlcl9idWRnZXQgPSAxNjAgKiAxMDI0ICogMTAyNDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB2aWRlbyBidWZmZXJzIG9mIG1lZGlhCisgICAgLy8gc291cmNlIGJlZm9yZSB0cmlnZ2VyaW5nIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHdoZW4gdGhlIHZpZGVvIHJlc29sdXRpb24KKyAgICAvLyBpcyBsb3dlciB0aGFuIDhrICg3NjgweDQzMjApLgorICAgIHZpZGVvX2J1ZmZlcl9idWRnZXQgPSBrTWF4VmlkZW9CdWZmZXJCdWRnZXQ7CisgIH0KKworICByZXR1cm4gc3RkOjptaW4odmlkZW9fYnVmZmVyX2J1ZGdldCwgb3ZlcmxheWVkX3ZpZGVvX2J1ZmZlcl9idWRnZXQpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9tZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MKaW5kZXggZDRlOGE0OC4uZmYwYWNkZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCkBAIC0zNSwyNCArMzUsNyBAQAogY29uc3QgamludCBIRFJfVFlQRV9IRFIxMCA9IDI7CiBjb25zdCBqaW50IEhEUl9UWVBFX0hMRyA9IDM7CiAKLWJvb2wgSXNIRFJUcmFuc2ZlckNoYXJhY3RlcmlzdGljc1N1cHBvcnRlZChTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVHJhbnNmZXJJZCB0cmFuc2Zlcl9pZCkgewotICBjb25zdCBjaGFyKiBtaW1lID0gU3VwcG9ydGVkVmlkZW9Db2RlY1RvTWltZVR5cGUodmlkZW9fY29kZWMpOwotICBpZiAoIW1pbWUpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgSm5pRW52RXh0KiBlbnYgPSBKbmlFbnZFeHQ6OkdldCgpOwotICBTY29wZWRMb2NhbEphdmFSZWY8anN0cmluZz4gal9taW1lKGVudi0+TmV3U3RyaW5nU3RhbmRhcmRVVEZPckFib3J0KG1pbWUpKTsKLQotICAvLyBBbiBIRFIgY2FwYWJsZSBWUDkgb3IgQVYxIGRlY29kZXIgaXMgbmVlZGVkIHRvIGhhbmRsZSBIRFIgYXQgYWxsLgotICBib29sIGhhc19oZHJfY2FwYWJsZV9kZWNvZGVyID0KLSAgICAgIEpuaUVudkV4dDo6R2V0KCktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kT3JBYm9ydCgKLSAgICAgICAgICAiZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjVXRpbCIsICJoYXNIZHJDYXBhYmxlVmlkZW9EZWNvZGVyIiwKLSAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nOylaIiwgal9taW1lLkdldCgpKSA9PSBKTklfVFJVRTsKLSAgaWYgKCFoYXNfaGRyX2NhcGFibGVfZGVjb2RlcikgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCitib29sIElzSERSVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3NTdXBwb3J0ZWQoU2JNZWRpYVRyYW5zZmVySWQgdHJhbnNmZXJfaWQpIHsKICAgamludCBoZHJfdHlwZTsKICAgaWYgKHRyYW5zZmVyX2lkID09IGtTYk1lZGlhVHJhbnNmZXJJZFNtcHRlU3QyMDg0KSB7CiAgICAgaGRyX3R5cGUgPSBIRFJfVFlQRV9IRFIxMDsKQEAgLTgzLDE4ICs2NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpIHsKLSAgaWYgKCFJc1NEUlZpZGVvKGJpdF9kZXB0aCwgcHJpbWFyeV9pZCwgdHJhbnNmZXJfaWQsIG1hdHJpeF9pZCkpIHsKLSAgICBpZiAoIUlzSERSVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3NTdXBwb3J0ZWQodmlkZW9fY29kZWMsIHRyYW5zZmVyX2lkKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgY29uc3QgYm9vbCBtdXN0X3N1cHBvcnRfaGRyID0KKyAgICAgICFJc1NEUlZpZGVvKGJpdF9kZXB0aCwgcHJpbWFyeV9pZCwgdHJhbnNmZXJfaWQsIG1hdHJpeF9pZCk7CisgIGlmIChtdXN0X3N1cHBvcnRfaGRyICYmICFJc0hEUlRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzU3VwcG9ydGVkKHRyYW5zZmVyX2lkKSkgeworICAgIHJldHVybiBmYWxzZTsKICAgfQogICAvLyBXaGlsZSBub3QgbmVjZXNzYXJpbHkgdHJ1ZSwgZm9yIG5vdyB3ZSBhc3N1bWUgdGhhdCBhbGwgQW5kcm9pZCBkZXZpY2VzCiAgIC8vIGNhbiBwbGF5IGRlY29kZS10by10ZXh0dXJlIHZpZGVvIGp1c3QgYXMgd2VsbCBhcyBub3JtYWwgdmlkZW8uCiAKLSAgY29uc3QgY2hhciogbWltZSA9IFN1cHBvcnRlZFZpZGVvQ29kZWNUb01pbWVUeXBlKHZpZGVvX2NvZGVjKTsKLSAgaWYgKCFtaW1lKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9CiAgIC8vIENoZWNrIGV4dGVuZGVkIHBhcmFtZXRlcnMgZm9yIGNvcnJlY3RuZXNzIGFuZCByZXR1cm4gZmFsc2UgaWYgYW55IGludmFsaWQKICAgLy8gaW52YWxpZCBwYXJhbXMgYXJlIGZvdW5kLgogICBNaW1lVHlwZSBtaW1lX3R5cGUoY29udGVudF90eXBlKTsKQEAgLTEwNCw2ICs4MywxMyBAQAogICAgIG1pbWVfdHlwZS5SZWdpc3RlckJvb2xQYXJhbWV0ZXIoInR1bm5lbG1vZGUiKTsKICAgICAvLyBPdmVycmlkZSBlbmRpYW5uZXNzIG9uIEhEUiBJbmZvIGhlYWRlci4gRGVmYXVsdHMgdG8gbGl0dGxlLgogICAgIG1pbWVfdHlwZS5SZWdpc3RlclN0cmluZ1BhcmFtZXRlcigiaGRyaW5mb2VuZGlhbm5lc3MiLCAiYmlnfGxpdHRsZSIpOworICAgIC8vIEZvcmNlcyB0aGUgdXNlIG9mIHNwZWNpZmljIEFuZHJvaWQgQVBJcyAoaXNTaXplU3VwcG9ydGVkKCkgYW5kCisgICAgLy8gYXJlU2l6ZUFuZFJhdGVTdXBwb3J0ZWQoKSkgdG8gZGV0ZXJtaW5lIGZvcm1hdCBzdXBwb3J0LgorICAgIG1pbWVfdHlwZS5SZWdpc3RlckJvb2xQYXJhbWV0ZXIoImZvcmNlaW1wcm92ZWRzdXBwb3J0Y2hlY2siKTsKKyAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBkZWNvZGVyIGNhY2hlIFRUTCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICAgIC8vIFRoZSBjYWNoZSB3aWxsIGJlIGRpc2FibGVkIGlmIHRoZSB2YWx1ZSBpcyBub24tcG9zaXRpdmUuCisgICAgLy8gVE9ETyhiLzIyNzM1NjQzNCk6IFJlZ2lzdGVySW50UGFyYW1ldGVyIHJlcXVpcmVzIEFQSSByZXZpZXcuCisgICAgLy8gbWltZV90eXBlLlJlZ2lzdGVySW50UGFyYW1ldGVyKCJkZWNvZGVyX2NhY2hlX3R0bF9tcyIpOwogCiAgICAgaWYgKCFtaW1lX3R5cGUuaXNfdmFsaWQoKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE4LDIwICsxMDQsMjggQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAorICBjb25zdCBjaGFyKiBtaW1lID0gU3VwcG9ydGVkVmlkZW9Db2RlY1RvTWltZVR5cGUodmlkZW9fY29kZWMpOworICBpZiAoIW1pbWUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KICAgSm5pRW52RXh0KiBlbnYgPSBKbmlFbnZFeHQ6OkdldCgpOwogICBTY29wZWRMb2NhbEphdmFSZWY8anN0cmluZz4gal9taW1lKGVudi0+TmV3U3RyaW5nU3RhbmRhcmRVVEZPckFib3J0KG1pbWUpKTsKLSAgY29uc3QgYm9vbCBtdXN0X3N1cHBvcnRfaGRyID0gKHRyYW5zZmVyX2lkICE9IGtTYk1lZGlhVHJhbnNmZXJJZEJ0NzA5ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlcl9pZCAhPSBrU2JNZWRpYVRyYW5zZmVySWRVbnNwZWNpZmllZCk7CiAKICAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgYSBkZXZpY2Ugc3VwcG9ydHMgYSBmb3JtYXQgZm9yIGNsZWFyIHBsYXliYWNrLCBpdCB3aWxsCiAgIC8vIGFsc28gc3VwcG9ydCBpdCBmb3IgZW5jcnlwdGVkIHBsYXliYWNrLiBIb3dldmVyLCBzb21lIGRldmljZXMgcmVxdWlyZQogICAvLyB0dW5uZWxlZCBwbGF5YmFjayB0byBiZSBlbmNyeXB0ZWQsIHNvIHdlIG11c3QgYWxpZ24gdGhlIHR1bm5lbCBtb2RlCiAgIC8vIHJlcXVpcmVtZW50IHdpdGggdGhlIHNlY3VyZSBwbGF5YmFjayByZXF1aXJlbWVudC4KICAgY29uc3QgYm9vbCByZXF1aXJlX3NlY3VyZV9wbGF5YmFjayA9IG11c3Rfc3VwcG9ydF90dW5uZWxfbW9kZTsKKyAgY29uc3QgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrID0KKyAgICAgIG1pbWVfdHlwZS5HZXRQYXJhbUJvb2xWYWx1ZSgiZm9yY2VpbXByb3ZlZHN1cHBvcnRjaGVjayIsIHRydWUpOworICBjb25zdCBpbnQgZGVjb2Rlcl9jYWNoZV90dGxfbXMgPQorICAgICAgbWltZV90eXBlLkdldFBhcmFtSW50VmFsdWUoImRlY29kZXJfY2FjaGVfdHRsX21zIiwgLTEpOworCiAgIHJldHVybiBlbnYtPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kT3JBYm9ydCgKICAgICAgICAgICAgICAiZGV2L2NvYmFsdC9tZWRpYS9NZWRpYUNvZGVjVXRpbCIsICJoYXNWaWRlb0RlY29kZXJGb3IiLAotICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WlpaSUlJSSlaIiwgal9taW1lLkdldCgpLAorICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WlpaWklJSUlJKVoiLCBqX21pbWUuR2V0KCksCiAgICAgICAgICAgICAgcmVxdWlyZV9zZWN1cmVfcGxheWJhY2ssIG11c3Rfc3VwcG9ydF9oZHIsCi0gICAgICAgICAgICAgbXVzdF9zdXBwb3J0X3R1bm5lbF9tb2RlLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0LAorICAgICAgICAgICAgIG11c3Rfc3VwcG9ydF90dW5uZWxfbW9kZSwgZm9yY2VfaW1wcm92ZWRfc3VwcG9ydF9jaGVjaywKKyAgICAgICAgICAgICBkZWNvZGVyX2NhY2hlX3R0bF9tcywgZnJhbWVfd2lkdGgsIGZyYW1lX2hlaWdodCwKICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxqaW50PihiaXRyYXRlKSwgZnBzKSA9PSBKTklfVFJVRTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKaW5kZXggNGVlYmQ2Mi4uNjVlYmQwOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKQEAgLTQ4LDMgKzQ4LDcgQEAKIAogY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyA9CiAgICAgWyAiLy9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29iYWx0OmNvYmFsdF9wbGF0Zm9ybSIgXQorCitjb2JhbHRfZm9udF9wYWNrYWdlID0gImFuZHJvaWRfc3lzdGVtIgorCitzZXBhcmF0ZV9pbnN0YWxsX3RhcmdldHNfZm9yX2J1bmRsaW5nID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTVkZGUyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAndmFyaWFibGVzJzogewotICAgICdHUkFETEVfQlVJTERfVFlQRSc6ICc8KGNvYmFsdF9jb25maWcpJywKLSAgICAnR1JBRExFX0ZJTEVTX0RJUic6ICc8KFBST0RVQ1RfRElSKS9ncmFkbGUvPChleGVjdXRhYmxlX25hbWUpJywKLSAgICAnZXhlY3V0YWJsZV9maWxlJzogJzwoUFJPRFVDVF9ESVIpL2xpYi9saWI8KGV4ZWN1dGFibGVfbmFtZSkuc28nLAotICAgICdhcGsnOiAnPChQUk9EVUNUX0RJUikvPChleGVjdXRhYmxlX25hbWUpLmFwaycsCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsgJ2NvYmFsdF9jb25maWcgPT0gImdvbGQiJywgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgIyBBbmRyb2lkIEdyYWRsZSB3YW50cyBhICJyZWxlYXNlIiBidWlsZCB0eXBlLCBzbyB1c2UgdGhhdCBmb3IgImdvbGQiLgotICAgICAgICAnR1JBRExFX0JVSUxEX1RZUEUnOiAncmVsZWFzZScKLSAgICAgIH0KLSAgICB9XQotICBdLAotICAnZGVwZW5kZW5jaWVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2Fway5neXA6YXBrX3NvdXJjZXMnIF0sCi0gICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGknIF0sCi0gICdhY3Rpb25zJzogWwotICAgIHsKLSAgICAgICdhY3Rpb25fbmFtZSc6ICdidWlsZF9hcGsnLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwoZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAgICc8KFBST0RVQ1RfRElSKS9ncmFkbGUvYXBrX3NvdXJjZXMuc3RhbXAnLAotICAgICAgICAnPChjb250ZW50X2RlcGxveV9zdGFtcF9maWxlKScsCi0gICAgICBdLAotICAgICAgJ291dHB1dHMnOiBbICc8KGFwayknIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvYXBrL2NvYmFsdC1ncmFkbGUuc2gnLAotICAgICAgICAnLS1zZGsnLCAnPChBTkRST0lEX0hPTUUpJywKLSAgICAgICAgJy0tY2FjaGUnLCAnJCR7UFdEfS88KEdSQURMRV9GSUxFU19ESVIpL2NhY2hlJywKLSAgICAgICAgJy0tcHJvamVjdC1kaXInLCAnJCR7UFdEfS88KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9hcGsvJywKLSAgICAgICAgJy1QJywgJ2NvYmFsdEJ1aWxkQWJpPTwoQU5EUk9JRF9BQkkpJywKLSAgICAgICAgJy1QJywgJ2NvYmFsdERlcGxveUFwaz0kJHtQV0R9LzwoYXBrKScsCi0gICAgICAgICctUCcsICdjb2JhbHRDb250ZW50RGlyPSQke1BXRH0vPChjb250ZW50X2RlcGxveV9kaXIpJywKLSAgICAgICAgJy1QJywgJ2NvYmFsdEdyYWRsZURpcj0kJHtQV0R9LzwoR1JBRExFX0ZJTEVTX0RJUiknLAotICAgICAgICAnLVAnLCAnY29iYWx0UHJvZHVjdERpcj0kJHtQV0R9LzwoUFJPRFVDVF9ESVIpJywKLSAgICAgICAgJy1QJywgJ2NvYmFsdExpYnJhcnlEaXI9JCR7UFdEfS88KFBST0RVQ1RfRElSKS9saWInLAotICAgICAgICAnLVAnLCAnY29iYWx0VGFyZ2V0PTwoZXhlY3V0YWJsZV9uYW1lKScsCi0gICAgICAgICctUCcsICdlbmFibGVWdWxrYW49PChlbmFibGVfdnVsa2FuKScsCi0gICAgICAgICdhc3NlbWJsZUNvYmFsdF88KEdSQURMRV9CVUlMRF9UWVBFKScsCi0gICAgICBdLAotICAgICAgJ21lc3NhZ2UnOiAnQnVpbGQgQVBLOiA8KGFwayknLAotICAgIH0sCi0gICAgewotICAgICAgIyBDbGVhbiB0aGUgZ3JhZGxlIGRpcmVjdG9yeSB0byBjb25zZXJ2ZSBzcGFjZSBhZnRlciB3ZSBoYXZlIHRoZSBBUEsKLSAgICAgICdhY3Rpb25fbmFtZSc6ICdkZWxldGVfZ3JhZGxlX2RpcicsCi0gICAgICAnaW5wdXRzJzogWyAnPChhcGspJyBdLAotICAgICAgJ291dHB1dHMnOiBbICc8KEdSQURMRV9GSUxFU19ESVIpLmRlbGV0ZWQuc3RhbXAnIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAnc2gnLCAnLWMnLAotICAgICAgICAncm0gLXJmIDwoR1JBRExFX0ZJTEVTX0RJUikgJiYgdG91Y2ggPChHUkFETEVfRklMRVNfRElSKS5kZWxldGVkLnN0YW1wJywKLSAgICAgIF0sCi0gICAgICAnbWVzc2FnZSc6ICdDbGVhbnVwIEdyYWRsZTogPChleGVjdXRhYmxlX25hbWUpJywKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuaCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF5ZXJfY29tcG9uZW50c19mYWN0b3J5LmgKaW5kZXggZTEyOWIwZi4uM2I2ODNmYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuaAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvcGxheWVyX2NvbXBvbmVudHNfZmFjdG9yeS5oCkBAIC02NCw2ICs2NCwxMCBAQAogLy8gVE9ETzogQWxsb3cgdGhpcyB0byBiZSBjb25maWd1cmVkIHBlciBwbGF5YmFjayBhdCBydW4gdGltZSBmcm9tIHRoZSB3ZWIgYXBwLgogY29uc3RleHByIGJvb2wga0ZvcmNlU2VjdXJlUGlwZWxpbmVJblR1bm5lbE1vZGVXaGVuUmVxdWlyZWQgPSB0cnVlOwogCisvLyBGb3JjZXMgdmlkZW8gc3VyZmFjZSB0byByZXNldCBhZnRlciB0dW5uZWwgbW9kZSBwbGF5YmFja3MuIFRoaXMgcHJldmVudHMKKy8vIHZpZGVvIGRpc3RvcnRpb24gb24gc29tZSBwbGF0Zm9ybXMuCitjb25zdGV4cHIgYm9vbCBrRm9yY2VSZXNldFN1cmZhY2VVbmRlclR1bm5lbE1vZGUgPSB0cnVlOworCiAvLyBUaGlzIGNsYXNzIGFsbG93cyB1cyB0byBmb3JjZSBpbnQxNiBzYW1wbGUgdHlwZSB3aGVuIHR1bm5lbCBtb2RlIGlzIGVuYWJsZWQuCiBjbGFzcyBBdWRpb1JlbmRlcmVyU2lua0FuZHJvaWQgOiBwdWJsaWMgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpwbGF5ZXI6OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjo6QXVkaW9SZW5kZXJlclNpbmtJbXBsIHsKQEAgLTE1OCw2ICsxNjIsNyBAQAogLy8gICAgICAgaW50byAuY2MgZmlsZS4KIGNsYXNzIFBsYXllckNvbXBvbmVudHNGYWN0b3J5IDogcHVibGljIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6OlBsYXllckNvbXBvbmVudHM6OkZhY3RvcnkgeworICB0eXBlZGVmIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6Om1lZGlhOjpNaW1lVHlwZSBNaW1lVHlwZTsKICAgdHlwZWRlZiBzdGFyYm9hcmQ6OnNoYXJlZDo6b3B1czo6T3B1c0F1ZGlvRGVjb2RlciBPcHVzQXVkaW9EZWNvZGVyOwogICB0eXBlZGVmIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6ZmlsdGVyOjpBZGFwdGl2ZUF1ZGlvRGVjb2RlcgogICAgICAgQWRhcHRpdmVBdWRpb0RlY29kZXI7CkBAIC0xOTIsNyArMTk3LDYgQEAKICAgc2NvcGVkX3B0cjxQbGF5ZXJDb21wb25lbnRzPiBDcmVhdGVDb21wb25lbnRzKAogICAgICAgY29uc3QgQ3JlYXRpb25QYXJhbWV0ZXJzJiBjcmVhdGlvbl9wYXJhbWV0ZXJzLAogICAgICAgc3RkOjpzdHJpbmcqIGVycm9yX21lc3NhZ2UpIG92ZXJyaWRlIHsKLSAgICB1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjptZWRpYTo6TWltZVR5cGU7CiAgICAgU0JfRENIRUNLKGVycm9yX21lc3NhZ2UpOwogCiAgICAgaWYgKGNyZWF0aW9uX3BhcmFtZXRlcnMuYXVkaW9fY29kZWMoKSAhPSBrU2JNZWRpYUF1ZGlvQ29kZWNBYzMgJiYKQEAgLTI0MCw5ICsyNDQsMjAgQEAKICAgICAgIGNvbnN0ZXhwciBpbnQga1R1bm5lbE1vZGVBdWRpb1Nlc3Npb25JZCA9IC0xOwogICAgICAgY29uc3RleHByIGJvb2wga0ZvcmNlU2VjdXJlUGlwZWxpbmVVbmRlclR1bm5lbE1vZGUgPSBmYWxzZTsKIAotICAgICAgc2NvcGVkX3B0cjxWaWRlb0RlY29kZXI+IHZpZGVvX2RlY29kZXIgPSBDcmVhdGVWaWRlb0RlY29kZXIoCi0gICAgICAgICAgY3JlYXRpb25fcGFyYW1ldGVycywga1R1bm5lbE1vZGVBdWRpb1Nlc3Npb25JZCwKLSAgICAgICAgICBrRm9yY2VTZWN1cmVQaXBlbGluZVVuZGVyVHVubmVsTW9kZSwgZXJyb3JfbWVzc2FnZSk7CisgICAgICBNaW1lVHlwZSB2aWRlb19taW1lX3R5cGUoY3JlYXRpb25fcGFyYW1ldGVycy52aWRlb19taW1lKCkpOworICAgICAgdmlkZW9fbWltZV90eXBlLlJlZ2lzdGVyQm9vbFBhcmFtZXRlcigiZm9yY2VpbXByb3ZlZHN1cHBvcnRjaGVjayIpOworICAgICAgaWYgKCF2aWRlb19taW1lX3R5cGUuaXNfdmFsaWQoKSkgeworICAgICAgICByZXR1cm4gc2NvcGVkX3B0cjxQbGF5ZXJDb21wb25lbnRzPigpOworICAgICAgfQorICAgICAgY29uc3QgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrID0KKyAgICAgICAgICB2aWRlb19taW1lX3R5cGUuR2V0UGFyYW1Cb29sVmFsdWUoImZvcmNlaW1wcm92ZWRzdXBwb3J0Y2hlY2siLCB0cnVlKTsKKyAgICAgIFNCX0xPR19JRihJTkZPLCAhZm9yY2VfaW1wcm92ZWRfc3VwcG9ydF9jaGVjaykKKyAgICAgICAgICA8PCAiSW1wcm92ZWQgc3VwcG9ydCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgcXVlcmllcyB1bmRlciA0Sy4iOworCisgICAgICBzY29wZWRfcHRyPFZpZGVvRGVjb2Rlcj4gdmlkZW9fZGVjb2RlciA9CisgICAgICAgICAgQ3JlYXRlVmlkZW9EZWNvZGVyKGNyZWF0aW9uX3BhcmFtZXRlcnMsIGtUdW5uZWxNb2RlQXVkaW9TZXNzaW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtGb3JjZVNlY3VyZVBpcGVsaW5lVW5kZXJUdW5uZWxNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLCBlcnJvcl9tZXNzYWdlKTsKICAgICAgIGlmICh2aWRlb19kZWNvZGVyKSB7CiAgICAgICAgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6ZmlsdGVyOjpWaWRlb1JlbmRlcmVySW1wbDsKIApAQCAtMjcwLDcgKzI4NSw2IEBACiAgICAgICBzY29wZWRfcHRyPFZpZGVvUmVuZGVyQWxnb3JpdGhtQmFzZT4qIHZpZGVvX3JlbmRlcl9hbGdvcml0aG0sCiAgICAgICBzY29wZWRfcmVmcHRyPFZpZGVvUmVuZGVyZXJTaW5rPiogdmlkZW9fcmVuZGVyZXJfc2luaywKICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcl9tZXNzYWdlKSBvdmVycmlkZSB7Ci0gICAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6bWVkaWE6Ok1pbWVUeXBlOwogICAgIFNCX0RDSEVDSyhlcnJvcl9tZXNzYWdlKTsKIAogICAgIGNvbnN0IGNoYXIqIGF1ZGlvX21pbWUgPQpAQCAtMjk5LDYgKzMxMyw3IEBACiAgICAgaWYgKGNyZWF0aW9uX3BhcmFtZXRlcnMudmlkZW9fY29kZWMoKSAhPSBrU2JNZWRpYVZpZGVvQ29kZWNOb25lICYmCiAgICAgICAgIHN0cmxlbihjcmVhdGlvbl9wYXJhbWV0ZXJzLnZpZGVvX21pbWUoKSkgPiAwKSB7CiAgICAgICB2aWRlb19taW1lX3R5cGUuUmVnaXN0ZXJCb29sUGFyYW1ldGVyKCJ0dW5uZWxtb2RlIik7CisgICAgICB2aWRlb19taW1lX3R5cGUuUmVnaXN0ZXJCb29sUGFyYW1ldGVyKCJmb3JjZWltcHJvdmVkc3VwcG9ydGNoZWNrIik7CiAKICAgICAgIGlmICghdmlkZW9fbWltZV90eXBlLmlzX3ZhbGlkKCkpIHsKICAgICAgICAgKmVycm9yX21lc3NhZ2UgPQpAQCAtMzQwLDE3ICszNTUsMjYgQEAKICAgICAgIGVuYWJsZV90dW5uZWxfbW9kZSA9IHRydWU7CiAgICAgfQogCisgICAgY29uc3QgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrID0KKyAgICAgICAgdmlkZW9fbWltZV90eXBlLkdldFBhcmFtQm9vbFZhbHVlKCJmb3JjZWltcHJvdmVkc3VwcG9ydGNoZWNrIiwgdHJ1ZSk7CisgICAgU0JfTE9HX0lGKElORk8sICFmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrKQorICAgICAgICA8PCAiSW1wcm92ZWQgc3VwcG9ydCBjaGVjayBpcyBkaXNhYmxlZCBmb3IgcXVlcmllcyB1bmRlciA0Sy4iOwogICAgIGJvb2wgZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlID0gZmFsc2U7CiAgICAgaWYgKGVuYWJsZV90dW5uZWxfbW9kZSAmJgogICAgICAgICBJc1R1bm5lbE1vZGVTdXBwb3J0ZWQoY3JlYXRpb25fcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JjZV9zZWN1cmVfcGlwZWxpbmVfdW5kZXJfdHVubmVsX21vZGUpKSB7Ci0gICAgICB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkID0KLSAgICAgICAgICBHZW5lcmF0ZUF1ZGlvU2Vzc2lvbklkKGNyZWF0aW9uX3BhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2spKSB7CisgICAgICB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkID0gR2VuZXJhdGVBdWRpb1Nlc3Npb25JZCgKKyAgICAgICAgICBjcmVhdGlvbl9wYXJhbWV0ZXJzLCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrKTsKICAgICB9CiAKICAgICBpZiAodHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCA9PSAtMSkgewogICAgICAgU0JfTE9HKElORk8pIDw8ICJDcmVhdGUgbm9uLXR1bm5lbCBtb2RlIHBpcGVsaW5lLiI7CiAgICAgfSBlbHNlIHsKKyAgICAgIFNCX0xPR19JRihJTkZPLCAha0ZvcmNlUmVzZXRTdXJmYWNlVW5kZXJUdW5uZWxNb2RlKQorICAgICAgICAgIDw8ICJga0ZvcmNlUmVzZXRTdXJmYWNlVW5kZXJUdW5uZWxNb2RlYCBpcyBzZXQgdG8gZmFsc2UsIHRoZSB2aWRlbyAiCisgICAgICAgICAgICAgInN1cmZhY2Ugd2lsbCBub3QgYmUgZm9yY2VkIHRvIHJlc2V0IGFmdGVyICIKKyAgICAgICAgICAgICAidHVubmVsZWQgcGxheWJhY2suIjsKICAgICAgIFNCX0xPRyhJTkZPKSA8PCAiQ3JlYXRlIHR1bm5lbCBtb2RlIHBpcGVsaW5lIHdpdGggYXVkaW8gc2Vzc2lvbiBpZCAiCiAgICAgICAgICAgICAgICAgICAgPDwgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCA8PCAnLic7CiAgICAgfQpAQCAtNDIzLDkgKzQ0NywxMCBAQAogICAgICAgICBmb3JjZV9zZWN1cmVfcGlwZWxpbmVfdW5kZXJfdHVubmVsX21vZGUgPSBmYWxzZTsKICAgICAgIH0KIAotICAgICAgc2NvcGVkX3B0cjxWaWRlb0RlY29kZXI+IHZpZGVvX2RlY29kZXJfaW1wbCA9IENyZWF0ZVZpZGVvRGVjb2RlcigKLSAgICAgICAgICBjcmVhdGlvbl9wYXJhbWV0ZXJzLCB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkLAotICAgICAgICAgIGZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwgZXJyb3JfbWVzc2FnZSk7CisgICAgICBzY29wZWRfcHRyPFZpZGVvRGVjb2Rlcj4gdmlkZW9fZGVjb2Rlcl9pbXBsID0KKyAgICAgICAgICBDcmVhdGVWaWRlb0RlY29kZXIoY3JlYXRpb25fcGFyYW1ldGVycywgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLCBlcnJvcl9tZXNzYWdlKTsKICAgICAgIGlmICh2aWRlb19kZWNvZGVyX2ltcGwpIHsKICAgICAgICAgKnZpZGVvX3JlbmRlcl9hbGdvcml0aG0gPSB2aWRlb19kZWNvZGVyX2ltcGwtPkdldFJlbmRlckFsZ29yaXRobSgpOwogICAgICAgICAqdmlkZW9fcmVuZGVyZXJfc2luayA9IHZpZGVvX2RlY29kZXJfaW1wbC0+R2V0U2luaygpOwpAQCAtNDY5LDggKzQ5NCw4IEBACiAgICAgICBjb25zdCBDcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uX3BhcmFtZXRlcnMsCiAgICAgICBpbnQgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZCwKICAgICAgIGJvb2wgZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlLAorICAgICAgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLAogICAgICAgc3RkOjpzdHJpbmcqIGVycm9yX21lc3NhZ2UpIHsKLSAgICB1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjptZWRpYTo6TWltZVR5cGU7CiAgICAgLy8gVXNlIG1pbWUgcGFyYW0gdG8gZGV0ZXJtaW5lIGVuZGlhbm5lc3Mgb2YgSERSIG1ldGFkYXRhLiBJZiBwYXJhbSBpcwogICAgIC8vIG1pc3Npbmcgb3IgaW52YWxpZCBpdCBkZWZhdWx0cyB0byBMaXR0bGUgRW5kaWFuLgogICAgIE1pbWVUeXBlIHZpZGVvX21pbWVfdHlwZShjcmVhdGlvbl9wYXJhbWV0ZXJzLnZpZGVvX21pbWUoKSk7CkBAIC00OTEsNyArNTE2LDggQEAKICAgICAgICAgY3JlYXRpb25fcGFyYW1ldGVycy5kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIoKSwKICAgICAgICAgY3JlYXRpb25fcGFyYW1ldGVycy5tYXhfdmlkZW9fY2FwYWJpbGl0aWVzKCksCiAgICAgICAgIHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQsIGZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwKLSAgICAgICAgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsIGVycm9yX21lc3NhZ2UpKTsKKyAgICAgICAga0ZvcmNlUmVzZXRTdXJmYWNlVW5kZXJUdW5uZWxNb2RlLCBmb3JjZV9iaWdfZW5kaWFuX2hkcl9tZXRhZGF0YSwKKyAgICAgICAgZm9yY2VfaW1wcm92ZWRfc3VwcG9ydF9jaGVjaywgZXJyb3JfbWVzc2FnZSkpOwogICAgIGlmIChjcmVhdGlvbl9wYXJhbWV0ZXJzLnZpZGVvX2NvZGVjKCkgPT0ga1NiTWVkaWFWaWRlb0NvZGVjQXYxIHx8CiAgICAgICAgIHZpZGVvX2RlY29kZXItPmlzX2RlY29kZXJfY3JlYXRlZCgpKSB7CiAgICAgICByZXR1cm4gdmlkZW9fZGVjb2Rlci5QYXNzKCk7CkBAIC01MDIsNyArNTI4LDggQEAKICAgfQogCiAgIGJvb2wgSXNUdW5uZWxNb2RlU3VwcG9ydGVkKGNvbnN0IENyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25fcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrKSB7CiAgICAgU0JfRENIRUNLKGZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSk7CiAgICAgKmZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSA9IGZhbHNlOwogCkBAIC01NDYsOCArNTczLDggQEAKICAgICBib29sIGlzX2VuY3J5cHRlZCA9ICEhal9tZWRpYV9jcnlwdG87CiAgICAgaWYgKGVudi0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2RPckFib3J0KAogICAgICAgICAgICAgImRldi9jb2JhbHQvbWVkaWEvTWVkaWFDb2RlY1V0aWwiLCAiaGFzVmlkZW9EZWNvZGVyRm9yIiwKLSAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WlpaSUlJSSlaIiwgal9taW1lLkdldCgpLCBpc19lbmNyeXB0ZWQsIGZhbHNlLAotICAgICAgICAgICAgdHJ1ZSwgMCwgMCwgMCwgMCkgPT0gSk5JX1RSVUUpIHsKKyAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WlpaWklJSUkpWiIsIGpfbWltZS5HZXQoKSwgaXNfZW5jcnlwdGVkLCBmYWxzZSwKKyAgICAgICAgICAgIHRydWUsIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssIDAsIDAsIDAsIDApID09IEpOSV9UUlVFKSB7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTU1Niw4ICs1ODMsOSBAQAogICAgICAgYXV0byBzdXBwb3J0X3R1bm5lbF9tb2RlX3VuZGVyX3NlY3VyZV9waXBlbGluZSA9CiAgICAgICAgICAgZW52LT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZE9yQWJvcnQoCiAgICAgICAgICAgICAgICJkZXYvY29iYWx0L21lZGlhL01lZGlhQ29kZWNVdGlsIiwgImhhc1ZpZGVvRGVjb2RlckZvciIsCi0gICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WlpaSUlJSSlaIiwgal9taW1lLkdldCgpLCBrSXNFbmNyeXB0ZWQsIGZhbHNlLAotICAgICAgICAgICAgICB0cnVlLCAwLCAwLCAwLCAwKSA9PSBKTklfVFJVRTsKKyAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaWlpaSUlJSSlaIiwgal9taW1lLkdldCgpLCBrSXNFbmNyeXB0ZWQsCisgICAgICAgICAgICAgIGZhbHNlLCB0cnVlLCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLCAwLCAwLCAwLAorICAgICAgICAgICAgICAwKSA9PSBKTklfVFJVRTsKICAgICAgIGlmIChzdXBwb3J0X3R1bm5lbF9tb2RlX3VuZGVyX3NlY3VyZV9waXBlbGluZSkgewogICAgICAgICAqZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NjksMTAgKzU5NywxMiBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIGludCBHZW5lcmF0ZUF1ZGlvU2Vzc2lvbklkKGNvbnN0IENyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25fcGFyYW1ldGVycykgeworICBpbnQgR2VuZXJhdGVBdWRpb1Nlc3Npb25JZChjb25zdCBDcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uX3BhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgZm9yY2VfaW1wcm92ZWRfc3VwcG9ydF9jaGVjaykgewogICAgIGJvb2wgZm9yY2Vfc2VjdXJlX3BpcGVsaW5lX3VuZGVyX3R1bm5lbF9tb2RlID0gZmFsc2U7CiAgICAgU0JfRENIRUNLKElzVHVubmVsTW9kZVN1cHBvcnRlZChjcmVhdGlvbl9wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2spKTsKIAogICAgIEpuaUVudkV4dCogZW52ID0gSm5pRW52RXh0OjpHZXQoKTsKICAgICBTY29wZWRMb2NhbEphdmFSZWY8am9iamVjdD4gal9hdWRpb19vdXRwdXRfbWFuYWdlcigKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZS5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZS5jYwppbmRleCA5NWQ2NzI4Li42NmRmMWU2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGUuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlLmNjCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19kZWNvZGVyX2ludGVybmFsLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3N0cmluZy5oIgogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KIFNiUGxheWVyT3V0cHV0TW9kZSBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoCiAgICAgY29uc3QgU2JQbGF5ZXJDcmVhdGlvblBhcmFtKiBjcmVhdGlvbl9wYXJhbSkgewogICB1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpwbGF5ZXI6OmZpbHRlcjo6VmlkZW9EZWNvZGVyOwpAQCAtOTAsNSArODgsMyBAQAogICAgICAgICAgICAgICAgICAgPDwgIikgaXMgbm90IHN1cHBvcnRlZCI7CiAgIHJldHVybiBrU2JQbGF5ZXJPdXRwdXRNb2RlSW52YWxpZDsKIH0KLQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zZGtfdXRpbHMucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc2RrX3V0aWxzLnB5CmluZGV4IDIzN2U1YzcuLjIyZDdiYmMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zZGtfdXRpbHMucHkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3Nka191dGlscy5weQpAQCAtMSw1ICsxLDMgQEAKLSMgTGludCBhczogcHl0aG9uMgotCiAjIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw1NiArMTMsMTQgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAiIiJVdGlsaXRpZXMgdG8gdXNlIHRoZSB0b29sY2hhaW4gZnJvbSB0aGUgQW5kcm9pZCBOREsuIiIiCiAKLWltcG9ydCBlcnJubwotaW1wb3J0IGZjbnRsCi1pbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotaW1wb3J0IHppcGZpbGUKLWltcG9ydCByZXF1ZXN0cwotCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYnVpbGQKIAotIyBweWxpbnQ6IGRpc2FibGU9Y29uc2lkZXItdXNpbmctd2l0aAotCiAjIFdoaWNoIHZlcnNpb24gb2YgdGhlIEFuZHJvaWQgTkRLIGFuZCBDTWFrZSB0byBpbnN0YWxsIGFuZCBidWlsZCB3aXRoLgogIyBOb3RlIHRoYXQgYnVpbGQuZ3JhZGxlIHBhcnNlcyB0aGVzZSBvdXQgb2YgdGhpcyBmaWxlIHRvby4KIF9OREtfVkVSU0lPTiA9ICcyMS4xLjYzNTI0NjInCiBfQ01BS0VfVkVSU0lPTiA9ICczLjEwLjIuNDk4ODQwNCcKIAotIyBQYWNrYWdlcyB0byBpbnN0YWxsIGluIHRoZSBBbmRyb2lkIFNESy4KLSMgR2V0IGF2YWlsYWJsZSBwYWNrYWdlcyBmcm9tICJzZGttYW5hZ2VyIC0tbGlzdCAtLXZlcmJvc2UiCi1fQU5EUk9JRF9TREtfUEFDS0FHRVMgPSBbCi0gICAgJ2J1aWxkLXRvb2xzOzMwLjAuMCcsCi0gICAgJ2NtYWtlOycgKyBfQ01BS0VfVkVSU0lPTiwKLSAgICAnY21kbGluZS10b29sczsxLjAnLAotICAgICdlbXVsYXRvcicsCi0gICAgJ2V4dHJhczthbmRyb2lkO20ycmVwb3NpdG9yeScsCi0gICAgJ2V4dHJhcztnb29nbGU7bTJyZXBvc2l0b3J5JywKLSAgICAnbmRrOycgKyBfTkRLX1ZFUlNJT04sCi0gICAgJ3BhdGNoZXI7djQnLAotICAgICdwbGF0Zm9ybXM7YW5kcm9pZC0zMCcsCi0gICAgJ3BsYXRmb3JtLXRvb2xzJywKLV0KLQotIyBTZWNvbmRzIHRvIHNsZWVwIGJlZm9yZSB3cml0aW5nICJ5IiBmb3IgYW5kcm9pZCBzZGsgdXBkYXRlIGxpY2Vuc2UgcHJvbXB0LgotX1NES19MSUNFTlNFX1BST01QVF9TTEVFUF9TRUNPTkRTID0gNQotCi0jIExvY2F0aW9uIGZyb20gd2hpY2ggdG8gZG93bmxvYWQgdGhlIFNESyBjb21tYW5kLWxpbmUgdG9vbHMKLSMgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9pbmRleC5odG1sI2NvbW1hbmQtdG9vbHMKLV9TREtfVVJMID0gKCdodHRwczovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9yZXBvc2l0b3J5LycKLSAgICAgICAgICAgICdjb21tYW5kbGluZXRvb2xzLWxpbnV4LTYyMDA4MDVfbGF0ZXN0LnppcCcpCi0KLSMgTG9jYXRpb24gZnJvbSB3aGljaCB0byBkb3dubG9hZCB0aGUgQW5kcm9pZCBOREsuCi0jIHNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9uZGsvZG93bmxvYWRzIChwZXJoYXBzIGluICJOREsgYXJjaGl2ZXMiKQotX05ES19aSVBfUkVWSVNJT04gPSAnYW5kcm9pZC1uZGstcjIwYicKLV9OREtfWklQX0ZJTEUgPSBfTkRLX1pJUF9SRVZJU0lPTiArICctbGludXgteDg2XzY0LnppcCcKLV9OREtfVVJMID0gJ2h0dHBzOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL3JlcG9zaXRvcnkvJyArIF9OREtfWklQX0ZJTEUKLQogX1NUQVJCT0FSRF9UT09MQ0hBSU5TX0RJUiA9IGJ1aWxkLkdldFRvb2xjaGFpbnNEaXIoKQogCiAjIFRoZSBwYXRoIHRvIHRoZSBBbmRyb2lkIFNESywgaWYgcGxhY2VkIGluc2lkZSBvZiBzdGFyYm9hcmQtdG9vbGNoYWlucy4KQEAgLTczLDIwNCArMjksNiBAQAogCiBfQU5EUk9JRF9IT01FID0gb3MuZW52aXJvbi5nZXQoJ0FORFJPSURfSE9NRScpCiBpZiBfQU5EUk9JRF9IT01FOgotICBfU0RLX1BBVEggPSBfQU5EUk9JRF9IT01FCisgIFNES19QQVRIID0gX0FORFJPSURfSE9NRQogZWxzZToKLSAgX1NES19QQVRIID0gX1NUQVJCT0FSRF9UT09MQ0hBSU5TX1NES19ESVIKLQotX05ES19QQVRIID0gb3MucGF0aC5qb2luKF9TREtfUEFUSCwgJ25kaycsIF9OREtfVkVSU0lPTikKLQotX1NES01BTkFHRVJfVE9PTCA9IG9zLnBhdGguam9pbihfU0RLX1BBVEgsICdjbWRsaW5lLXRvb2xzJywgJzEuMCcsICdiaW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2RrbWFuYWdlcicpCi0KLQotZGVmIEdldE5ka1BhdGgoKToKLSAgcmV0dXJuIF9OREtfUEFUSAotCi0KLWRlZiBHZXRTZGtQYXRoKCk6Ci0gIHJldHVybiBfU0RLX1BBVEgKLQotCi1kZWYgX0Rvd25sb2FkQW5kVW56aXBGaWxlKHVybCwgZGVzdGluYXRpb25fcGF0aCk6Ci0gICIiIkRvd25sb2FkIGEgemlwIGZpbGUgZnJvbSBhIHVybCBhbmQgdW5jb21wcmVzcyBpdC4iIiIKLSAgc2h1dGlsLnJtdHJlZShkZXN0aW5hdGlvbl9wYXRoLCBpZ25vcmVfZXJyb3JzPVRydWUpCi0gIHRyeToKLSAgICBvcy5tYWtlZGlycyhkZXN0aW5hdGlvbl9wYXRoKQotICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgcmFpc2UKLSAgZGxfZmlsZSA9IG9zLnBhdGguam9pbihkZXN0aW5hdGlvbl9wYXRoLCAndG1wLnppcCcpCi0gIHJlcXVlc3QgPSByZXF1ZXN0cy5nZXQodXJsLCBhbGxvd19yZWRpcmVjdHM9VHJ1ZSkKLSAgb3BlbihkbF9maWxlLCAnd2InKS53cml0ZShyZXF1ZXN0LmNvbnRlbnQpCi0gIF9VbnppcEZpbGUoZGxfZmlsZSwgZGVzdGluYXRpb25fcGF0aCkKLQotCi1kZWYgX1VuemlwRmlsZSh6aXBfcGF0aCwgZGVzdF9wYXRoKToKLSAgIiIiRXh0cmFjdCBhbGwgZmlsZXMgYW5kIHJlc3RvcmUgcGVybWlzc2lvbnMgZnJvbSBhIHppcCBmaWxlLiIiIgotICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfcGF0aCkKLSAgZm9yIGluZm8gaW4gemlwX2ZpbGUuaW5mb2xpc3QoKToKLSAgICB6aXBfZmlsZS5leHRyYWN0KGluZm8uZmlsZW5hbWUsIGRlc3RfcGF0aCkKLSAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oZGVzdF9wYXRoLCBpbmZvLmZpbGVuYW1lKSwgaW5mby5leHRlcm5hbF9hdHRyID4+IDE2KQotCi0KLWRlZiBJbnN0YWxsU2RrSWZOZWVkZWQoKToKLSAgIiIiRG93bmxvYWQgdGhlIFNESyBhbmQgTkRLIGlmIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4iIiIKLSAgIyBIb2xkIGFuIGV4Y2x1c2l2ZSBhZHZpc29yeSBsb2NrIG9uIHRoZSBfU1RBUkJPQVJEX1RPT0xDSEFJTlNfRElSLCB0bwotICAjIHByZXZlbnQgaXNzdWVzIHdpdGggbW9kaWZpY2F0aW9uIGZvciBtdWx0aXBsZSB2YXJpYW50cy4KLSAgdHJ5OgotICAgIHRvb2xjaGFpbnNfZGlyX2ZkID0gb3Mub3BlbihfU1RBUkJPQVJEX1RPT0xDSEFJTlNfRElSLCBvcy5PX1JET05MWSkKLSAgICBmY250bC5mbG9jayh0b29sY2hhaW5zX2Rpcl9mZCwgZmNudGwuTE9DS19FWCkKLQotICAgIGlmIG9zLmVudmlyb24uZ2V0KCdBTkRST0lEX05ES19IT01FJyk6Ci0gICAgICBsb2dnaW5nLndhcm5pbmcoJ1dhcm5pbmc6IEFORFJPSURfTkRLX0hPTUUgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZC4nKQotCi0gICAgaWYgX0FORFJPSURfSE9NRToKLSAgICAgIGlmIG5vdCBvcy5hY2Nlc3MoX1NES01BTkFHRVJfVE9PTCwgb3MuWF9PSyk6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Vycm9yOiBBTkRST0lEX0hPTUUgaXMgc2V0IGJ1dCBTREsgaXMgbm90IHByZXNlbnQuJykKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgIGxvZ2dpbmcud2FybmluZygnV2FybmluZzogVXNpbmcgQW5kcm9pZCBTREsgaW4gQU5EUk9JRF9IT01FLCcKLSAgICAgICAgICAgICAgICAgICAgICAnIHdoaWNoIGlzIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuXG4nCi0gICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgIFRoZSBmb2xsb3dpbmcgcGFja2FnZSB2ZXJzaW9ucyBhcmUgaW5zdGFsbGVkOicpCi0gICAgICBpbnN0YWxsZWRfcGFja2FnZXMgPSBfR2V0SW5zdGFsbGVkU2RrUGFja2FnZXMoKQotICAgICAgZm9yIHBhY2thZ2UgaW4gX0FORFJPSURfU0RLX1BBQ0tBR0VTOgotICAgICAgICB2ZXJzaW9uID0gaW5zdGFsbGVkX3BhY2thZ2VzLmdldChwYWNrYWdlLCAnPCBOT1QgSU5TVEFMTEVEID4nKQotICAgICAgICBtc2cgPSAnICB7OjMwfSA6IHt9Jy5mb3JtYXQocGFja2FnZSwgdmVyc2lvbikKLSAgICAgICAgbG9nZ2luZy53YXJuaW5nKG1zZykKLQotICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKEdldE5ka1BhdGgoKSk6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Vycm9yOiBBTkRST0lEX0hPTUUgaXMgaXMgbWlzc2luZyBOREsgJXMuJywgX05ES19WRVJTSU9OKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgICAjIHB5bGludDogZGlzYWJsZT11bmRlZmluZWQtdmFyaWFibGUKLSAgICAgIHJlcGx5ID0gcmF3X2lucHV0KAotICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBjb250aW51ZSB1c2luZyB5b3VyIGN1c3RvbSBBbmRyb2lkIHRvb2xzPyBbeS9OXScpCi0gICAgICBpZiByZXBseS51cHBlcigpICE9ICdZJzoKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBlbHNlOgotICAgICAgbG9nZ2luZy53YXJuaW5nKCdDaGVja2luZyBBbmRyb2lkIFNESy4nKQotICAgICAgX0Rvd25sb2FkSW5zdGFsbE9yVXBkYXRlU2RrKCkKLSAgZmluYWxseToKLSAgICBmY250bC5mbG9jayh0b29sY2hhaW5zX2Rpcl9mZCwgZmNudGwuTE9DS19VTikKLSAgICBvcy5jbG9zZSh0b29sY2hhaW5zX2Rpcl9mZCkKLQotCi1kZWYgX0dldEluc3RhbGxlZFNka1BhY2thZ2VzKCk6Ci0gICIiIlJldHVybnMgYSBtYXAgb2YgaW5zdGFsbGVkIHBhY2thZ2UgbmFtZSB0byBwYWNrYWdlIHZlcnNpb24uIiIiCi0gICMgV2UgZGV0ZWN0IGFuZCBwYXJzZSBlaXRoZXIgbmV3LXN0eWxlIG9yIG9sZC1zdHlsZSBvdXRwdXQgZnJvbSBzZGttYW5hZ2VyOgotICAjCi0gICMgW25ldy1zdHlsZV0KLSAgIyBJbnN0YWxsZWQgcGFja2FnZXM6Ci0gICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIyBidWlsZC10b29sczsyNS4wLjIKLSAgIyAgICAgRGVzY3JpcHRpb246ICAgICAgICBBbmRyb2lkIFNESyBCdWlsZC1Ub29scyAyNS4wLjIKLSAgIyAgICAgVmVyc2lvbjogICAgICAgICAgICAyNS4wLjIKLSAgIyAgICAgSW5zdGFsbGVkIExvY2F0aW9uOiA8YWJzIHBhdGg+Ci0gICMgLi4uCi0gICMKLSAgIyBbb2xkLXN0eWxlXQotICAjIEluc3RhbGxlZCBwYWNrYWdlczoKLSAgIyAgIFBhdGggICAgICAgICAgICAgICB8IFZlcnNpb24gfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgfCBMb2NhdGlvbgotICAjICAgLS0tLS0tLSAgICAgICAgICAgIHwgLS0tLS0tLSB8IC0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICB8IC0tLS0tLS0KLSAgIyAgIGJ1aWxkLXRvb2xzOzI1LjAuMiB8IDI1LjAuMiAgfCBBbmRyb2lkIFNESyBCdWlsZC1Ub29scyAyNS4wLjIgfCA8cmVsIHBhdGg+Ci0gICMgLi4uCi0gIHNlY3Rpb25fcmUgPSByZS5jb21waWxlKHInXltBLVpdW146XSo6JCcpCi0gIHZlcnNpb25fcmUgPSByZS5jb21waWxlKHInXlxzK1ZlcnNpb246XHMrKFxTKyknKQotCi0gIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtfU0RLTUFOQUdFUl9UT09MLCAnLS1saXN0JywgJy0tdmVyYm9zZSddLAotICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotCi0gIGluc3RhbGxlZF9wYWNrYWdlX3ZlcnNpb25zID0ge30KLSAgbmV3X3N0eWxlID0gRmFsc2UKLSAgb2xkX3N0eWxlID0gRmFsc2UKLSAgZm9yIGxpbmUgaW4gaXRlcihwLnN0ZG91dC5yZWFkbGluZSwgJycpOgotICAgICMgVGhyb3cgYXdheSBsb2FkaW5nIHByb2dyZXNzIGluZGljYXRvcnMgdXAgdG8gdGhlIGxhc3QgQ1IuCi0gICAgbGluZSA9IGxpbmUuc3BsaXQoJ1xyJylbLTFdCi0gICAgaWYgc2VjdGlvbl9yZS5tYXRjaChsaW5lKToKLSAgICAgIGlmIG5ld19zdHlsZSBvciBvbGRfc3R5bGU6Ci0gICAgICAgICMgV2UgbGVmdCB0aGUgbmV3L29sZCBzdHlsZSBpbnN0YWxsZWQgcGFja2FnZXMgc2VjdGlvbgotICAgICAgICBicmVhawotICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdJbnN0YWxsZWQnKToKLSAgICAgICAgIyBSZWFkIHRoZSBoZWFkZXIgb2YgdGhpcyBzZWN0aW9uIHRvIGRldGVybWluZSBuZXcvb2xkIHN0eWxlCi0gICAgICAgIGxpbmUgPSBwLnN0ZG91dC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgbmV3X3N0eWxlID0gbGluZS5zdGFydHN3aXRoKCctLS0tJykKLSAgICAgICAgb2xkX3N0eWxlID0gbGluZS5zdGFydHN3aXRoKCdQYXRoJykKLSAgICAgICAgaWYgb2xkX3N0eWxlOgotICAgICAgICAgIGxpbmUgPSBwLnN0ZG91dC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnLS0tLScpOgotICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoJ0Vycm9yOiBVbmV4cGVjdGVkIFNESyBwYWNrYWdlIGxpc3RpbmcgZm9ybWF0JykKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIFdlJ3JlIGluIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgc2VjdGlvbiwgYW5kIGl0J3MgbmV3LXN0eWxlCi0gICAgaWYgbmV3X3N0eWxlOgotICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnICcpOgotICAgICAgICBwa2dfbmFtZSA9IGxpbmUuc3RyaXAoKQotICAgICAgZWxzZToKLSAgICAgICAgbSA9IHZlcnNpb25fcmUubWF0Y2gobGluZSkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICBpbnN0YWxsZWRfcGFja2FnZV92ZXJzaW9uc1twa2dfbmFtZV0gPSBtLmdyb3VwKDEpCi0KLSAgICAjIFdlJ3JlIGluIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgc2VjdGlvbiwgYW5kIGl0J3Mgb2xkLXN0eWxlCi0gICAgZWxpZiBvbGRfc3R5bGU6Ci0gICAgICBmaWVsZHMgPSBbZi5zdHJpcCgpIGZvciBmIGluIGxpbmUuc3BsaXQoJ3wnLCAyKV0KLSAgICAgIGlmIGxlbihmaWVsZHMpID49IDI6Ci0gICAgICAgIGluc3RhbGxlZF9wYWNrYWdlX3ZlcnNpb25zW2ZpZWxkc1swXV0gPSBmaWVsZHNbMV0KLQotICAjIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG91dHB1dAotICBwLmNvbW11bmljYXRlKCkKLSAgcmV0dXJuIGluc3RhbGxlZF9wYWNrYWdlX3ZlcnNpb25zCi0KLQotZGVmIF9Jc1VuYXR0ZW5kZWQoKToKLSAgcmV0dXJuICdCVUlMREJPVF9CVUlMREVSTkFNRScgaW4gb3MuZW52aXJvbiBvciAnSVNfRE9DS0VSJyBpbiBvcy5lbnZpcm9uCi0KLQotZGVmIF9Eb3dubG9hZEluc3RhbGxPclVwZGF0ZVNkaygpOgotICAiIiJEb3dubG9hZHMgKGlmIG5lY2Vzc2FyeSkgYW5kIGluc3RhbGxzL3VwZGF0ZXMgdGhlIEFuZHJvaWQgU0RLLiIiIgotCi0gICMgSWYgd2UgY2FuJ3QgYWNjZXNzIHRoZSAic2RrbWFuYWdlciIgdG9vbCwgd2UgbmVlZCB0byBkb3dubG9hZCB0aGUgU0RLCi0gIGlmIG5vdCBvcy5hY2Nlc3MoX1NES01BTkFHRVJfVE9PTCwgb3MuWF9PSyk6Ci0gICAgaWYgb3MuZ2V0ZW52KCdJU19DSScsICcnKSA9PSAnMSc6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ0R5bmFtaWMgdG9vbGNoYWluIGRvd25sb2FkcyBhcmUgZGlzYWJsZWQgaW4gQ0knKQotCi0gICAgbG9nZ2luZy53YXJuaW5nKCdEb3dubG9hZGluZyBBbmRyb2lkIFNESyB0byAlcycsCi0gICAgICAgICAgICAgICAgICAgIF9TVEFSQk9BUkRfVE9PTENIQUlOU19TREtfRElSKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKF9TVEFSQk9BUkRfVE9PTENIQUlOU19TREtfRElSKToKLSAgICAgIHNodXRpbC5ybXRyZWUoX1NUQVJCT0FSRF9UT09MQ0hBSU5TX1NES19ESVIpCi0gICAgX0Rvd25sb2FkQW5kVW56aXBGaWxlKF9TREtfVVJMLCBfU1RBUkJPQVJEX1RPT0xDSEFJTlNfU0RLX0RJUikKLSAgICAjIFRPRE86IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgZm9yIHNka21hbmFnZXIgaW5jb3JyZWN0bHkgcGlja2luZyB1cCB0aGUKLSAgICAjICJ0b29scyIgZGlyZWN0b3J5IGZyb20gdGhlIFpJUCBhcyB0aGUgbmFtZSBvZiBpdHMgY29tcG9uZW50LgotICAgICMgaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvNjc0OTU0NDAjY29tbWVudDMyCi0gICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8xNTA5NDM2MzEKLSAgICBpZiBub3Qgb3MuYWNjZXNzKF9TREtNQU5BR0VSX1RPT0wsIG9zLlhfT0spOgotICAgICAgb2xkX3Rvb2xzX2RpciA9IG9zLnBhdGguam9pbihfU1RBUkJPQVJEX1RPT0xDSEFJTlNfU0RLX0RJUiwgJ3Rvb2xzJykKLSAgICAgIG5ld190b29sc19kaXIgPSBvcy5wYXRoLmpvaW4oX1NUQVJCT0FSRF9UT09MQ0hBSU5TX1NES19ESVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbWRsaW5lLXRvb2xzJywgJzEuMCcpCi0gICAgICBvcy5ta2Rpcihvcy5wYXRoLmRpcm5hbWUobmV3X3Rvb2xzX2RpcikpCi0gICAgICBvcy5yZW5hbWUob2xkX3Rvb2xzX2RpciwgbmV3X3Rvb2xzX2RpcikKLSAgICBpZiBub3Qgb3MuYWNjZXNzKF9TREtNQU5BR0VSX1RPT0wsIG9zLlhfT0spOgotICAgICAgbG9nZ2luZy5lcnJvcignU0RLIGRvd25sb2FkIGZhaWxlZC4nKQotICAgICAgc3lzLmV4aXQoMSkKLQotICAjIFJ1biB0aGUgInNka21hbmFnZXIiIGNvbW1hbmQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGFja2FnZXMKLQotICBpZiBfSXNVbmF0dGVuZGVkKCk6Ci0gICAgc3RkaW4gPSBzdWJwcm9jZXNzLlBJUEUKLSAgZWxzZToKLSAgICBzdGRpbiA9IHN5cy5zdGRpbgotCi0gIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAotICAgICAgW19TREtNQU5BR0VSX1RPT0wsICctLXZlcmJvc2UnXSArIF9BTkRST0lEX1NES19QQUNLQUdFUywgc3RkaW49c3RkaW4pCi0KLSAgaWYgX0lzVW5hdHRlbmRlZCgpOgotICAgIHRyeToKLSAgICAgICMgQWNjZXB0ICJUZXJtcyBhbmQgQ29uZGl0aW9ucyIgKGFuZHJvaWQtc2RrLWxpY2Vuc2UpCi0gICAgICB0aW1lLnNsZWVwKF9TREtfTElDRU5TRV9QUk9NUFRfU0xFRVBfU0VDT05EUykKLSAgICAgIHAuc3RkaW4ud3JpdGUoJ3lcbicpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICBsb2dnaW5nLndhcm5pbmcoJ1RoZXJlIHdlcmUgbm8gU0RLIGxpY2Vuc2VzIHRvIGFjY2VwdC4nKQotCi0gIHAud2FpdCgpCi0gIGlmIHAucmV0dXJuY29kZToKLSAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICdcbkZhaWxlZCB0byBpbnN0YWxsIHBhY2thZ2VzIHdpdGggc2RrbWFuYWdlci4gRXhpdCBzdGF0dXMgPSAlZCcgJQotICAgICAgICBwLnJldHVybmNvZGUpCisgIFNES19QQVRIID0gX1NUQVJCT0FSRF9UT09MQ0hBSU5TX1NES19ESVIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zb2NrZXRfZ2V0X2ludGVyZmFjZV9hZGRyZXNzLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3NvY2tldF9nZXRfaW50ZXJmYWNlX2FkZHJlc3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4NzFiZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zb2NrZXRfZ2V0X2ludGVyZmFjZV9hZGRyZXNzLmNjCkBAIC0wLDAgKzEsODIgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9qbmlfZW52X2V4dC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldC5oIgorCit1c2luZyBzdGFyYm9hcmQ6OmFuZHJvaWQ6OnNoYXJlZDo6Sm5pRW52RXh0OworCituYW1lc3BhY2UgeworCitjb25zdCBzaXplX3Qga0RlZmF1bHRQcmVmaXhMZW5ndGggPSA4OworY29uc3QgaW50IGtJUHY2QWRkcmVzc1NpemUgPSAxNjsKKworYm9vbCBDb3B5U29ja2V0QWRkcmVzcyhqYnl0ZUFycmF5IGFycmF5LCBTYlNvY2tldEFkZHJlc3MqIG91dF9hZGRyZXNzKSB7CisgIEpuaUVudkV4dCogZW52ID0gSm5pRW52RXh0OjpHZXQoKTsKKyAgaWYgKGFycmF5ID09IG51bGxwdHIpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKG91dF9hZGRyZXNzID09IG51bGxwdHIpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJTYlNvY2tldEdldEludGVyZmFjZUFkZHJlc3MgTlVMTCBvdXRfYWRkcmVzcyI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGppbnQgc2l6ZSA9IGVudi0+R2V0QXJyYXlMZW5ndGgoYXJyYXkpOworICBpZiAoc2l6ZSA+IHNpemVvZihvdXRfYWRkcmVzcy0+YWRkcmVzcykpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJTYlNvY2tldEdldEludGVyZmFjZUFkZHJlc3MgYWRkcmVzcyB0b28gbG9uZyI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIG91dF9hZGRyZXNzLT50eXBlID0KKyAgICAgIChzaXplID09IDQpID8ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0IDoga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OworICBqYnl0ZSogYnl0ZXMgPSBlbnYtPkdldEJ5dGVBcnJheUVsZW1lbnRzKGFycmF5LCBOVUxMKTsKKyAgU0JfQ0hFQ0soYnl0ZXMpIDw8ICJHZXRCeXRlQXJyYXlFbGVtZW50cyBmYWlsZWQiOworICBtZW1jcHkob3V0X2FkZHJlc3MtPmFkZHJlc3MsIGJ5dGVzLCBzaXplKTsKKyAgZW52LT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoYXJyYXksIGJ5dGVzLCBKTklfQUJPUlQpOworICByZXR1cm4gdHJ1ZTsKK30KK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzcyhjb25zdCBTYlNvY2tldEFkZHJlc3MqIGNvbnN0IGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JTb2NrZXRBZGRyZXNzKiBvdXRfc291cmNlX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldEFkZHJlc3MqIG91dF9uZXRtYXNrKSB7CisgIGlmIChvdXRfc291cmNlX2FkZHJlc3MgPT0gbnVsbHB0cikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIG1lbXNldChvdXRfc291cmNlX2FkZHJlc3MtPmFkZHJlc3MsIDAsIHNpemVvZihvdXRfc291cmNlX2FkZHJlc3MtPmFkZHJlc3MpKTsKKworICBvdXRfc291cmNlX2FkZHJlc3MtPnBvcnQgPSAwOworCisgIEpuaUVudkV4dCogZW52ID0gSm5pRW52RXh0OjpHZXQoKTsKKworICBqYm9vbGVhbiB3YW50X2lwdjYgPQorICAgICAgKGRlc3RpbmF0aW9uICE9IG51bGxwdHIgJiYgZGVzdGluYXRpb24tPnR5cGUgPT0ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2KTsKKyAgam9iamVjdCBwYWlyID0gKGpieXRlQXJyYXkpZW52LT5DYWxsU3RhcmJvYXJkT2JqZWN0TWV0aG9kT3JBYm9ydCgKKyAgICAgICJnZXRMb2NhbEludGVyZmFjZUFkZHJlc3NBbmROZXRtYXNrIiwgIihaKUxhbmRyb2lkL3V0aWwvUGFpcjsiLAorICAgICAgd2FudF9pcHY2KTsKKworICBqb2JqZWN0IGZpZWxkOworICBmaWVsZCA9IGVudi0+R2V0T2JqZWN0RmllbGRPckFib3J0KHBhaXIsICJmaXJzdCIsICJMamF2YS9sYW5nL09iamVjdDsiKTsKKyAgaWYgKCFDb3B5U29ja2V0QWRkcmVzcyhzdGF0aWNfY2FzdDxqYnl0ZUFycmF5PihmaWVsZCksIG91dF9zb3VyY2VfYWRkcmVzcykpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgZmllbGQgPSBlbnYtPkdldE9iamVjdEZpZWxkT3JBYm9ydChwYWlyLCAic2Vjb25kIiwgIkxqYXZhL2xhbmcvT2JqZWN0OyIpOworICBpZiAob3V0X25ldG1hc2sgJiYKKyAgICAgICFDb3B5U29ja2V0QWRkcmVzcyhzdGF0aWNfY2FzdDxqYnl0ZUFycmF5PihmaWVsZCksIG91dF9uZXRtYXNrKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjCmluZGV4IGVlN2YxYmUuLmRmYmEzM2UgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zcGVlY2hfc3ludGhlc2lzX2lzX3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3BlZWNoX3N5bnRoZXNpc19pc19zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3N5bnRoZXNpcy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYlNwZWVjaFN5bnRoZXNpc0lzU3VwcG9ydGVkKCkgewogICByZXR1cm4gdHJ1ZTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZWVmY2QuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAndmFyaWFibGVzJzogewotICAgICdoYXNfaW5wdXRfZXZlbnRzX2ZpbHRlcicgOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZXhpc3RzIDwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9pbnRlcm5hbC9pbnB1dF9ldmVudHNfZmlsdGVyLmNjKScsCi0gICAgJ2hhc19kcm1fc3lzdGVtX2V4dGVuc2lvbiUnOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZXhpc3RzIDwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9kcm1fc3lzdGVtX2V4dGVuc2lvbi9kcm1fc3lzdGVtX2V4dGVuc2lvbi5neXApJywKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9maWx0ZXIuZ3lwaScsCi0gIF0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfYmFzZV9zeW1ib2xpemUnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L3N5bWJvbGl6ZS9kZW1hbmdsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L3N5bWJvbGl6ZS9zeW1ib2xpemUuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgICMgQ29weSBzb3VyY2VzIHRoYXQgd2UgY29tcGlsZSBmcm9tIHRoZSBOREsgc28gdGhhdCB3ZSBjYW4gcmVmZXJlbmNlIHRoZW0KLSAgICAjIGJ5IGEgcmVsYXRpdmUgcGF0aC4gT3RoZXJ3aXNlLCB3aXRob3V0IEdZUCBwYXRobmFtZSByZWxhdGl2aXphdGlvbgotICAgICMgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gYnVpbGRzIHdvdWxkIGNsb2JiZXIgZWFjaCBvdGhlciBzaW5jZSB0aGV5J2QgYWxsCi0gICAgIyBnZW5lcmF0ZSB0aGVpciAubyBhdCB0aGUgc2FtZSBwYXRoIGluIHRoZSBOREsgc291cmNlcyBkaXJlY3RvcnkuCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25ka19zb3VyY2VzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvcGllcyc6IFt7Ci0gICAgICAgICdkZXN0aW5hdGlvbic6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9uZGstc291cmNlcy8nLAotICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgJzwoTkRLX0hPTUUpL3NvdXJjZXMvYW5kcm9pZC9jcHVmZWF0dXJlcy9jcHUtZmVhdHVyZXMuYycsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm0nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9iaW9uaWMnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9jb21tb25fcGxheWVyX3NvdXJjZXMuZ3lwaScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChjb21tb25fcGxheWVyX3NvdXJjZXMpJywKLSAgICAgICAgJzxAKGZpbHRlcl9iYXNlZF9wbGF5ZXJfc291cmNlcyknLAotICAgICAgICAnYWNjZXNzaWJpbGl0eV9nZXRfY2FwdGlvbl9zZXR0aW5ncy5jYycsCi0gICAgICAgICdhY2Nlc3NpYmlsaXR5X2dldF9kaXNwbGF5X3NldHRpbmdzLmNjJywKLSAgICAgICAgJ2FjY2Vzc2liaWxpdHlfZ2V0X3RleHRfdG9fc3BlZWNoX3NldHRpbmdzLmNjJywKLSAgICAgICAgJ2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MnLAotICAgICAgICAnYW5kcm9pZF9tYWluLmNjJywKLSAgICAgICAgJ2FuZHJvaWRfbWVkaWFfc2Vzc2lvbl9jbGllbnQuY2MnLAotICAgICAgICAnYXBwbGljYXRpb25fYW5kcm9pZC5jYycsCi0gICAgICAgICdhcHBsaWNhdGlvbl9hbmRyb2lkLmgnLAotICAgICAgICAnYXRvbWljX3B1YmxpYy5oJywKLSAgICAgICAgJ2F1ZGlvX2RlY29kZXIuY2MnLAotICAgICAgICAnYXVkaW9fZGVjb2Rlci5oJywKLSAgICAgICAgJ2F1ZGlvX2RlY29kZXJfcGFzc3Rocm91Z2guaCcsCi0gICAgICAgICdhdWRpb19yZW5kZXJlcl9wYXNzdGhyb3VnaC5jYycsCi0gICAgICAgICdhdWRpb19yZW5kZXJlcl9wYXNzdGhyb3VnaC5oJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfZ2V0X21heF9jaGFubmVscy5jYycsCi0gICAgICAgICdhdWRpb19zaW5rX2dldF9taW5fYnVmZmVyX3NpemVfaW5fZnJhbWVzLmNjJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfbWluX3JlcXVpcmVkX2ZyYW1lc190ZXN0ZXIuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19taW5fcmVxdWlyZWRfZnJhbWVzX3Rlc3Rlci5oJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfZ2V0X25lYXJlc3Rfc3VwcG9ydGVkX3NhbXBsZV9mcmVxdWVuY3kuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19pc19hdWRpb19mcmFtZV9zdG9yYWdlX3R5cGVfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfaXNfYXVkaW9fc2FtcGxlX3R5cGVfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJ2F1ZGlvX3RyYWNrX2F1ZGlvX3NpbmtfdHlwZS5jYycsCi0gICAgICAgICdhdWRpb190cmFja19hdWRpb19zaW5rX3R5cGUuaCcsCi0gICAgICAgICdhdWRpb190cmFja19icmlkZ2UuY2MnLAotICAgICAgICAnYXVkaW9fdHJhY2tfYnJpZGdlLmgnLAotICAgICAgICAnYmlvbmljL2Jpb25pY19uZXRsaW5rLmNwcCcsCi0gICAgICAgICdiaW9uaWMvYmlvbmljX25ldGxpbmsuaCcsCi0gICAgICAgICdiaW9uaWMvaWZhZGRycy5jcHAnLAotICAgICAgICAnYmlvbmljL2lmYWRkcnMuaCcsCi0gICAgICAgICdiaW9uaWMvbmV0X2lmLmNwcCcsCi0gICAgICAgICdiaW9uaWMvcHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgnLAotICAgICAgICAnYmlvbmljL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oJywKLSAgICAgICAgJ2NvbmZpZ3VyYXRpb24uY2MnLAotICAgICAgICAnY29uZmlndXJhdGlvbi5oJywKLSAgICAgICAgJ2NvbmZpZ3VyYXRpb25fcHVibGljLmgnLAotICAgICAgICAnY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MnLAotICAgICAgICAnZGVjb2RlX3RhcmdldF9jcmVhdGUuY2MnLAotICAgICAgICAnZGVjb2RlX3RhcmdldF9jcmVhdGUuaCcsCi0gICAgICAgICdkZWNvZGVfdGFyZ2V0X2dldF9pbmZvLmNjJywKLSAgICAgICAgJ2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MnLAotICAgICAgICAnZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oJywKLSAgICAgICAgJ2RlY29kZV90YXJnZXRfcmVsZWFzZS5jYycsCi0gICAgICAgICdkaXJlY3RvcnlfY2xvc2UuY2MnLAotICAgICAgICAnZGlyZWN0b3J5X2dldF9uZXh0LmNjJywKLSAgICAgICAgJ2RpcmVjdG9yeV9pbnRlcm5hbC5oJywKLSAgICAgICAgJ2RpcmVjdG9yeV9vcGVuLmNjJywKLSAgICAgICAgJ2RybV9zeXN0ZW0uY2MnLAotICAgICAgICAnZHJtX3N5c3RlbS5oJywKLSAgICAgICAgJ2VnbF9zd2FwX2J1ZmZlcnMuY2MnLAotICAgICAgICAnZmlsZV9jYW5fb3Blbi5jYycsCi0gICAgICAgICdmaWxlX2Nsb3NlLmNjJywKLSAgICAgICAgJ2ZpbGVfZGVsZXRlLmNjJywKLSAgICAgICAgJ2ZpbGVfZXhpc3RzLmNjJywKLSAgICAgICAgJ2ZpbGVfZmx1c2guY2MnLAotICAgICAgICAnZmlsZV9nZXRfaW5mby5jYycsCi0gICAgICAgICdmaWxlX2dldF9wYXRoX2luZm8uY2MnLAotICAgICAgICAnZmlsZV9pbnRlcm5hbC5jYycsCi0gICAgICAgICdmaWxlX2ludGVybmFsLmgnLAotICAgICAgICAnZmlsZV9vcGVuLmNjJywKLSAgICAgICAgJ2ZpbGVfcmVhZC5jYycsCi0gICAgICAgICdmaWxlX3NlZWsuY2MnLAotICAgICAgICAnZmlsZV90cnVuY2F0ZS5jYycsCi0gICAgICAgICdmaWxlX3dyaXRlLmNjJywKLSAgICAgICAgJ2dldF9ob21lX2RpcmVjdG9yeS5jYycsCi0gICAgICAgICdpbnB1dF9ldmVudHNfZ2VuZXJhdG9yLmNjJywKLSAgICAgICAgJ2lucHV0X2V2ZW50c19nZW5lcmF0b3IuaCcsCi0gICAgICAgICdqbmlfZW52X2V4dC5jYycsCi0gICAgICAgICdqbmlfZW52X2V4dC5oJywKLSAgICAgICAgJ2puaV91dGlscy5oJywKLSAgICAgICAgJ2xvZy5jYycsCi0gICAgICAgICdsb2dfZmx1c2guY2MnLAotICAgICAgICAnbG9nX2Zvcm1hdC5jYycsCi0gICAgICAgICdsb2dfaW50ZXJuYWwuY2MnLAotICAgICAgICAnbG9nX2ludGVybmFsLmgnLAotICAgICAgICAnbG9nX2lzX3R0eS5jYycsCi0gICAgICAgICdsb2dfcmF3LmNjJywKLSAgICAgICAgJ21haW4uY2MnLAotICAgICAgICAnbWVkaWFfY29kZWNfYnJpZGdlLmNjJywKLSAgICAgICAgJ21lZGlhX2NvZGVjX2JyaWRnZS5oJywKLSAgICAgICAgJ21lZGlhX2NvbW1vbi5oJywKLSAgICAgICAgJ21lZGlhX2RlY29kZXIuY2MnLAotICAgICAgICAnbWVkaWFfZGVjb2Rlci5oJywKLSAgICAgICAgJ21lZGlhX2dldF9hdWRpb19jb25maWd1cmF0aW9uLmNjJywKLSAgICAgICAgJ21lZGlhX2dldF9hdWRpb19vdXRwdXRfY291bnQuY2MnLAotICAgICAgICAnbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjJywKLSAgICAgICAgJ21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjJywKLSAgICAgICAgJ21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICdtZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MnLAotICAgICAgICAnbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJ25ldHdvcmtfc3RhdHVzX2ltcGwuY2MnLAotICAgICAgICAnbWljcm9waG9uZV9pbXBsLmNjJywKLSAgICAgICAgJ3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuaCcsCi0gICAgICAgICdwbGF5ZXJfY3JlYXRlLmNjJywKLSAgICAgICAgJ3BsYXllcl9kZXN0cm95LmNjJywKLSAgICAgICAgJ3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlLmNjJywKLSAgICAgICAgJ3BsYXllcl9zZXRfYm91bmRzLmNjJywKLSAgICAgICAgJ3BsYXllcl9zZXRfcGxheWJhY2tfcmF0ZS5jYycsCi0gICAgICAgICdzYW5pdGl6ZXJfb3B0aW9ucy5jYycsCi0gICAgICAgICdzcGVlY2hfc3ludGhlc2lzX2NhbmNlbC5jYycsCi0gICAgICAgICdzcGVlY2hfc3ludGhlc2lzX2ludGVybmFsLmNjJywKLSAgICAgICAgJ3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJ3NwZWVjaF9zeW50aGVzaXNfc3BlYWsuY2MnLAotICAgICAgICAnc3lzdGVtX2dldF9jb25uZWN0aW9uX3R5cGUuY2MnLAotICAgICAgICAnc3lzdGVtX2dldF9kZXZpY2VfdHlwZS5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X2xvY2FsZV9pZC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3BhdGguY2MnLAotICAgICAgICAnc3lzdGVtX2dldF9wcm9wZXJ0eS5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3N0YWNrLmNjJywKLSAgICAgICAgJ3N5c3RlbV9oYXNfY2FwYWJpbGl0eS5jYycsCi0gICAgICAgICdzeXN0ZW1fbmV0d29ya19pc19kaXNjb25uZWN0ZWQuY2MnLAotICAgICAgICAnc3lzdGVtX3BsYXRmb3JtX2Vycm9yLmNjJywKLSAgICAgICAgJ3N5c3RlbV9yZXF1ZXN0X2NvbmNlYWwuY2MnLAotICAgICAgICAnc3lzdGVtX3JlcXVlc3RfZnJlZXplX25vX2ZyZWV6ZWRvbmVfY2FsbGJhY2suY2MnLAotICAgICAgICAnc3lzdGVtX3JlcXVlc3Rfc3RvcC5jYycsCi0gICAgICAgICdzeXN0ZW1fcmVxdWVzdF9zdXNwZW5kLmNjJywKLSAgICAgICAgJ3RocmVhZF9jcmVhdGUuY2MnLAotICAgICAgICAndGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYycsCi0gICAgICAgICd0aHJlYWRfZ2V0X25hbWUuY2MnLAotICAgICAgICAndGhyZWFkX3R5cGVzX3B1YmxpYy5oJywKLSAgICAgICAgJ3RpbWVfem9uZV9nZXRfbmFtZS5jYycsCi0gICAgICAgICd0cmFjZV91dGlsLmgnLAotICAgICAgICAndmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICd2aWRlb19kZWNvZGVyLmgnLAotICAgICAgICAndmlkZW9fZnJhbWVfdHJhY2tlci5jYycsCi0gICAgICAgICd2aWRlb19mcmFtZV90cmFja2VyLmgnLAotICAgICAgICAndmlkZW9fcmVuZGVyX2FsZ29yaXRobS5jYycsCi0gICAgICAgICd2aWRlb19yZW5kZXJfYWxnb3JpdGhtLmgnLAotICAgICAgICAndmlkZW9fd2luZG93LmNjJywKLSAgICAgICAgJ3ZpZGVvX3dpbmRvdy5oJywKLSAgICAgICAgJ3dpbmRvd19jcmVhdGUuY2MnLAotICAgICAgICAnd2luZG93X2Rlc3Ryb3kuY2MnLAotICAgICAgICAnd2luZG93X2dldF9kaWFnb25hbF9zaXplX2luX2luY2hlcy5jYycsCi0gICAgICAgICd3aW5kb3dfZ2V0X3BsYXRmb3JtX2hhbmRsZS5jYycsCi0gICAgICAgICd3aW5kb3dfZ2V0X3NpemUuY2MnLAotICAgICAgICAnd2luZG93X2ludGVybmFsLmgnLAotICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbmRrLXNvdXJjZXMvY3B1LWZlYXR1cmVzLmMnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3BsYXRmb3JtX3NlcnZpY2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfZm9jdXNfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfZ2V0X29uX3NjcmVlbl9rZXlib2FyZF9ib3VuZGluZ19yZWN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfaGlkZV9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9tYXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfcHJvdGVjdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV91bm1hcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2VnbC9zeXN0ZW1fZWdsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2NfcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9nbGVzL2dsX2NhbGwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2dsZXMvc3lzdGVtX2dsZXMyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19hbHBoYW51bWVyaWMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX2RpZ2l0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19oZXhfZGlnaXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX3NwYWNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc191cHBlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfdG9fbG93ZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX3RvX3VwcGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9hYnNvbHV0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9kb3VibGVfZXhwb25lbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2Zsb29yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9pc19maW5pdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2lzX25hbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9pbXBsL2RpcmVjdG9yeV9jbG9zZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2ltcGwvZGlyZWN0b3J5X2dldF9uZXh0LmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vaW1wbC9kaXJlY3Rvcnlfb3Blbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9hbGxvY2F0ZV91bmNoZWNrZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2NvbXBhcmUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2NvcHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2ZpbmRfYnl0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfZnJlZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfbW92ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfcmVhbGxvY2F0ZV91bmNoZWNrZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X3NldC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfY29tcGFyZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfY29tcGFyZV9hbGwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2ZpbmRfY2hhcmFjdGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19maW5kX2xhc3RfY2hhcmFjdGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19maW5kX3N0cmluZy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZ2V0X2xlbmd0aC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZ2V0X2xlbmd0aF93aWRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV9kb3VibGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX3NpZ25lZF9pbnRlZ2VyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV91aW50NjQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX3Vuc2lnbmVkX2ludGVnZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3NjYW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3lzdGVtX2JpbmFyeV9zZWFyY2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3lzdGVtX3NvcnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX2FkZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfcmVtb3ZlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl93YWl0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl93YWl0X3RpbWVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl93YWtlX3VwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvYnl0ZV9zd2FwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvbWVtb3J5X2dldF9zdGFja19ib3VuZHMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9wYWdlX2ludGVybmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3RvdGFsX2NwdV9tZW1vcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3VzZWRfY3B1X21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9zeW1ib2xpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC90aHJlYWRfZ2V0X2lkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvdGhyZWFkX3NldF9uYW1lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfcHJvcGVydHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfc2lnbmVkX2luLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfaW50ZXJuYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9pbnRlcm5hbC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvb3B1cy9vcHVzX2F1ZGlvX2RlY29kZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZGlyZWN0b3J5X2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfYXRvbWljX3JlcGxhY2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfY2FuX29wZW4uaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ltcGwvZmlsZV9jbG9zZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvaW1wbC9maWxlX2RlbGV0ZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvaW1wbC9maWxlX2ZsdXNoLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfZ2V0X2luZm8uaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ltcGwvZmlsZV9nZXRfcGF0aF9pbmZvLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfb3Blbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvaW1wbC9maWxlX3JlYWQuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ltcGwvZmlsZV9zZWVrLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9pbXBsL2ZpbGVfdHJ1bmNhdGUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ltcGwvZmlsZV93cml0ZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2FsbG9jYXRlX2FsaWduZWRfdW5jaGVja2VkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2ZsdXNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2ZyZWVfYWxpZ25lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NldF9ub25fYmxvY2tpbmdfaW50ZXJuYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfYWNjZXB0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2JpbmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfY2xlYXJfbGFzdF9lcnJvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9jb25uZWN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2ZyZWVfcmVzb2x1dGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9nZXRfbGFzdF9lcnJvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9nZXRfbG9jYWxfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pbnRlcm5hbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pc19jb25uZWN0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfY29ubmVjdGVkX2FuZF9pZGxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2lzX2lwdjZfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2pvaW5fbXVsdGljYXN0X2dyb3VwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2xpc3Rlbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9yZWNlaXZlX2Zyb20uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfcmVzb2x2ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZW5kX3RvLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3NldF9icm9hZGNhc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3JldXNlX2FkZHJlc3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3NlbmRfYnVmZmVyX3NpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3RjcF9rZWVwX2FsaXZlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3NldF90Y3Bfbm9fZGVsYXkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3RjcF93aW5kb3dfc2NhbGluZy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0b3JhZ2Vfd3JpdGVfcmVjb3JkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3RyaW5nX2NvbXBhcmVfbm9fY2FzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19jb21wYXJlX25vX2Nhc2Vfbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19jb21wYXJlX3dpZGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zdHJpbmdfZm9ybWF0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3RyaW5nX2Zvcm1hdF93aWRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2JyZWFrX2ludG9fZGVidWdnZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zeXN0ZW1fY2xlYXJfbGFzdF9lcnJvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N5c3RlbV9nZXRfZXJyb3Jfc3RyaW5nLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2dldF9sYXN0X2Vycm9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2dldF9udW1iZXJfb2ZfcHJvY2Vzc29ycy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RocmVhZF9zbGVlcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfZ2V0X21vbm90b25pY19ub3cuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2dldF9tb25vdG9uaWNfdGhyZWFkX25vdy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfZ2V0X25vdy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfaXNfdGltZV90aHJlYWRfbm93X3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfem9uZV9nZXRfY3VycmVudC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvY29uZGl0aW9uX3ZhcmlhYmxlX2Jyb2FkY2FzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvY29uZGl0aW9uX3ZhcmlhYmxlX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvY29uZGl0aW9uX3ZhcmlhYmxlX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9zaWduYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9jb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfYWNxdWlyZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfYWNxdWlyZV90cnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfcmVsZWFzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvb25jZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NyZWF0ZV9sb2NhbF9rZXkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2Rlc3Ryb3lfbG9jYWxfa2V5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZGV0YWNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9nZXRfbG9jYWxfdmFsdWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9pc19lcXVhbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2pvaW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zZXRfbG9jYWxfdmFsdWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF95aWVsZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdHlwZXNfcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvY3Jhc2hfc2lnbmFscy5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL2NyYXNoX3NpZ25hbHNfc2lnYWN0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N1c3BlbmRfc2lnbmFscy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9zdXNwZW5kX3NpZ25hbHMuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pbnRlcm5hbC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pc192YWxpZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3Npbmsvc3R1Yl9hdWRpb19zaW5rX3R5cGUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb21tYW5kX2xpbmUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZGlyZWN0b3J5X2Nhbl9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fY2xvc2Vfc2Vzc2lvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2Rlc3Ryb3lfc3lzdGVtLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fZ2VuZXJhdGVfc2Vzc2lvbl91cGRhdGVfcmVxdWVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2dldF9tZXRyaWNzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX3N5c3RlbV9pbnRlcm5hbC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fdXBkYXRlX3NlcnZlcl9jZXJ0aWZpY2F0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX3VwZGF0ZV9zZXNzaW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2V2ZW50X2NhbmNlbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9ldmVudF9zY2hlZHVsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9hdG9taWNfcmVwbGFjZV93cml0ZV9maWxlLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9tb2RlX3N0cmluZ190b19mbGFncy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9jbG9zZV9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2VfZGVsZXRlX3JlY29yZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9nZXRfcmVjb3JkX3NpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2Vfb3Blbl9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2VfcmVhZF9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbG9nX211dGV4LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xvZ19tdXRleC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xvZ19yYXdfZHVtcF9zdGFjay5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfcmF3X2Zvcm1hdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9hdWRpb19idWZmZXJfYnVkZ2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxpZ25tZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3BhZGRpbmcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3ZpZGVvX2J1ZmZlcl9idWRnZXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfY2xvc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaXNfc2FtcGxlX3JhdGVfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9yZWFkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9uZXcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcXVldWVfYXBwbGljYXRpb24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcXVldWVfYXBwbGljYXRpb24uaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29uY2F0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb25jYXRfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29weS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29weV93aWRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19kdXBsaWNhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX2dldF9yYW5kb21fdWludDY0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvdGhyZWFkX2NoZWNrZXIuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC93aW5kb3dfc2V0X2RlZmF1bHRfb3B0aW9ucy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2NwdV9mZWF0dXJlc19nZXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9jcmVhdGVfdHJhbnNmb3JtZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9kZXN0cm95X3RyYW5zZm9ybWVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZ2V0X3RhZy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3NldF9hdXRoZW50aWNhdGVkX2RhdGEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9pbWFnZV9kZWNvZGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2lzX2RlY29kZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF90b3RhbF9ncHVfbWVtb3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X3VzZWRfZ3B1X21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2hpZGVfc3BsYXNoX3NjcmVlbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfYmx1ci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfZm9jdXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yZXF1ZXN0X3BhdXNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fcmVxdWVzdF9yZXZlYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yZXF1ZXN0X3VucGF1c2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9zaWduX3dpdGhfY2VydGlmaWNhdGlvbl9zZWNyZXRfa2V5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfY29udGV4dF9nZXRfcG9pbnRlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfc2FtcGxlcl9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfc2FtcGxlcl9mcmVlemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zYW1wbGVyX2lzX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfdGhhdy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdWlfbmF2X2dldF9pbnRlcmZhY2UuY2MnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgIyBFeGNsdWRlIHRoZXNlIGZpbGVzIGZyb20gY29tbW9uX3BsYXllcl9zb3VyY2VzLCBiZWNhdXNlIHRoZXkgYXJlIG5vdCB1c2VkIGJ5IGFuZHJvaWQKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGVfcHJlZmVyX3B1bmNob3V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2V0X2JvdW5kcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3NldF9wbGF5YmFja19yYXRlLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgIyBUaGlzIG11c3QgYmUgZGVmaW5lZCB3aGVuIGJ1aWxkaW5nIFN0YXJib2FyZCwgYW5kIG11c3Qgbm90IHdoZW4KLSAgICAgICAgIyBidWlsZGluZyBTdGFyYm9hcmQgY2xpZW50IGNvZGUuCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhLmd5cDptZWRpYV91dGlsJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYmV2ZW50L2xpYmV2ZW50Lmd5cDpsaWJldmVudCcsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9vcHVzL29wdXMuZ3lwOm9wdXMnLAotICAgICAgICAnc3RhcmJvYXJkX2Jhc2Vfc3ltYm9saXplJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydoYXNfaW5wdXRfZXZlbnRzX2ZpbHRlcj09MScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdpbnRlcm5hbC9pbnB1dF9ldmVudHNfZmlsdGVyLmNjJywKLSAgICAgICAgICAgICdpbnRlcm5hbC9pbnB1dF9ldmVudHNfZmlsdGVyLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnU1RBUkJPQVJEX0lOUFVUX0VWRU5UU19GSUxURVInLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2hhc19kcm1fc3lzdGVtX2V4dGVuc2lvbj09MScsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9kcm1fc3lzdGVtX2V4dGVuc2lvbi9kcm1fc3lzdGVtX2V4dGVuc2lvbi5neXA6ZHJtX3N5c3RlbV9leHRlbnNpb24nLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdkcm1fY3JlYXRlX3N5c3RlbS5jYycsCi0gICAgICAgICAgICAnbWVkaWFfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgICAgICdwbGF5ZXJfY29tcG9uZW50c19mYWN0b3J5LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaSBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0NDQ0MC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV90ZXN0cy5neXBpJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfdGVzdHMuZ3lwaScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICAgICc8QChtZWRpYV90ZXN0c19zb3VyY2VzKScsCi0gICAgICAgICdqbmlfZW52X2V4dF90ZXN0LmNjJywKLSAgICAgICAgJ21vZGVsX3llYXJfdGVzdC5jYycsCi0gICAgICAgICd2aWRlb19mcmFtZV90cmFja2VyX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgYWxsb3dzIHRoZSB0ZXN0cyB0byBpbmNsdWRlIGludGVybmFsIG9ubHkgaGVhZGVyIGZpbGVzLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS88KHN0YXJib2FyZF9wYXRoKS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwOnN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MKaW5kZXggN2U2NjFlZC4uOWQ4MTdmMSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3lzdGVtX2dldF9leHRlbnNpb25zLmNjCkBAIC0xNSwxMCArMTUsMTIgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCiAKICNpbmNsdWRlICJjb2JhbHQvZXh0ZW5zaW9uL2NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJjb2JhbHQvZXh0ZW5zaW9uL2dyYXBoaWNzLmgiCiAjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9tZWRpYV9zZXNzaW9uLmgiCiAjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9wbGF0Zm9ybV9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2FuZHJvaWRfbWVkaWFfc2Vzc2lvbl9jbGllbnQuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvY29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9ncmFwaGljcy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9wbGF0Zm9ybV9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgpAQCAtMzMsNSArMzUsOCBAQAogICBpZiAoc3RyY21wKG5hbWUsIGtDb2JhbHRFeHRlbnNpb25NZWRpYVNlc3Npb25OYW1lKSA9PSAwKSB7CiAgICAgcmV0dXJuIHN0YXJib2FyZDo6YW5kcm9pZDo6c2hhcmVkOjpHZXRNZWRpYVNlc3Npb25BcGkoKTsKICAgfQorICBpZiAoc3RyY21wKG5hbWUsIGtDb2JhbHRFeHRlbnNpb25HcmFwaGljc05hbWUpID09IDApIHsKKyAgICByZXR1cm4gc3RhcmJvYXJkOjphbmRyb2lkOjpzaGFyZWQ6OkdldEdyYXBoaWNzQXBpKCk7CisgIH0KICAgcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3lzdGVtX2dldF9wYXRoLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYwppbmRleCBhNmYxNTdjLi5hMjkwYTU2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3lzdGVtX2dldF9wYXRoLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zeXN0ZW1fZ2V0X3BhdGguY2MKQEAgLTc5LDEwICs3OSwxMiBAQAogICAgICAgYnJlYWs7CiAgICAgfQogCisjaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9TWVNURU1fUEFUSF9URVNUX09VVFBVVF9ESVJFQ1RPUllfREVQUkVDQVRFRAogICAgIGNhc2Uga1NiU3lzdGVtUGF0aFRlc3RPdXRwdXREaXJlY3Rvcnk6IHsKICAgICAgIHJldHVybiBTYlN5c3RlbUdldFBhdGgoa1NiU3lzdGVtUGF0aERlYnVnT3V0cHV0RGlyZWN0b3J5LCBvdXRfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9zaXplKTsKICAgICB9CisjZW5kaWYKIAogICAgIC8vIFdlIHJldHVybiB0aGUgbGlicmFyeSBkaXJlY3RvcnkgYXMgdGhlICJleGVjdXRhYmxlIiBzaW5jZToKICAgICAvLyBhKSBVbmxpa2UgdGhlIC5zbyBpdHNlbGYsIGl0IGhhcyBhIHZhbGlkIHRpbWVzdGFtcCBvZiB0aGUgYXBwIGluc3RhbGwuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCmluZGV4IDlkMTdhNjkuLmIwODUyOGYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCkBAIC0xMjEsMTEgKzEyMSw3IEBACiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIHllYXIuY19zdHIoKSk7CiAgICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5U3lzdGVtSW50ZWdyYXRvck5hbWU6Ci0jZWxzZQotICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlPcmlnaW5hbERlc2lnbk1hbnVmYWN0dXJlck5hbWU6Ci0jZW5kaWYKICAgICAgIHJldHVybiBHZXRBbmRyb2lkU3lzdGVtUHJvcGVydHkoInJvLnByb2R1Y3QubWFudWZhY3R1cmVyIiwgb3V0X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9sZW5ndGgsIGtVbmtub3duVmFsdWUpOwogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQppbmRleCBjM2QzOGVmLi5mZjgyNzU4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGVzdF9maWx0ZXJzLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkKQEAgLTE1LDcwICsxNSw3MCBAQAogCiBmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCisjIEEgbWFwIG9mIGZhaWxpbmcgb3IgY3Jhc2hpbmcgdGVzdHMgcGVyIHRhcmdldC4KK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAncGxheWVyX2ZpbHRlcl90ZXN0cyc6IFsKKyAgICAgICAgIyBHZXRNYXhOdW1iZXJPZkNhY2hlZEZyYW1lcygpIG9uIEFuZHJvaWQgaXMgZGV2aWNlIGRlcGVuZGVudCwKKyAgICAgICAgIyBhbmQgQW5kcm9pZCBkb2Vzbid0IHByb3ZpZGUgYW4gQVBJIHRvIGdldCBpdC4gU28sIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgIyBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb24gQW5kcm9pZC4gQnV0IEhvbGRGcmFtZXNVbnRpbEZ1bGwgdGVzdHMgZGVwZW5kCisgICAgICAgICMgb24gdGhpcyBudW1iZXIgc3RyaWN0bHkuCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkhvbGRGcmFtZXNVbnRpbEZ1bGwvKicsCisKKyAgICAgICAgIyBDdXJyZW50bHksIGludmFsaWQgaW5wdXQgdGVzdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlNpbmdsZUludmFsaWRJbnB1dC8qJywKKyAgICAgICAgKCdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0JworICAgICAgICAgJy5NdWx0aXBsZVZhbGlkSW5wdXRzQWZ0ZXJJbnZhbGlkS2V5RnJhbWUvKicpLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZUludmFsaWRJbnB1dC8qJywKKworICAgICAgICAjIEFuZHJvaWQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdmlkZW8gcGxheWJhY2ssIHdoaWNoCisgICAgICAgICMgdGhlIGZvbGxvd2luZyB0ZXN0cyBkZXBlbmQgdXBvbi4KKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuVGhyZWVNb3JlRGVjb2RlcnMvKicsCisKKyAgICAgICAgIyBUaGUgdmlkZW8gcGlwZWxpbmUgd2lsbCBoYW5nIGlmIGl0IGRvZXNuJ3QgcmVjZWl2ZSBhbnkgaW5wdXQuCisgICAgICAgICdQbGF5ZXJDb21wb25lbnRzVGVzdHMvUGxheWVyQ29tcG9uZW50c1Rlc3QuRU9TV2l0aG91dElucHV0LyonLAorCisgICAgICAgICMgVGhlIGUvZWFjMyBhdWRpbyB0aW1lIHJlcG9ydGluZyBkdXJpbmcgcGF1c2Ugd2lsbCBiZSByZXZpc2l0aWVkLgorICAgICAgICAnUGxheWVyQ29tcG9uZW50c1Rlc3RzL1BsYXllckNvbXBvbmVudHNUZXN0LlBhdXNlLzE1JywKKyAgICBdLAorICAgICducGxiJzogWworICAgICAgICAjIFRoaXMgdGVzdCBpcyBmYWlsaW5nIGJlY2F1c2UgbG9jYWxob3N0IGlzIG5vdCBkZWZpbmVkIGZvciBJUHY2IGluCisgICAgICAgICMgL2V0Yy9ob3N0cy4KKyAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0UmVzb2x2ZVRlc3QuTG9jYWxob3N0LzEnLAorCisgICAgICAgICMgVGhlc2UgdGVzdHMgYXJlIHRha2luZyBsb25nZXIgZHVlIHRvIGludGVyb3Agb24gYW5kcm9pZC4gV29yayBpcworICAgICAgICAjIHVuZGVyd2F5IHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBpcyBhY2NlcHRhYmxlLgorICAgICAgICAnU2JNZWRpYUNhblBsYXlNaW1lQW5kS2V5U3lzdGVtLlZhbGlkYXRlUGVyZm9ybWFuY2UnLAorICAgICAgICAnU2JNZWRpYUNvbmZpZ3VyYXRpb25UZXN0LlZhbGlkYXRlUGVyZm9ybWFuY2UnLAorCisgICAgICAgICMgU2JEaXJlY3RvcnkgaGFzIHByb2JsZW1zIHdpdGggZW1wdHkgQXNzZXQgZGlycy4KKyAgICAgICAgJ1NiRGlyZWN0b3J5Q2FuT3BlblRlc3QuU3VubnlEYXlTdGF0aWNDb250ZW50JywKKyAgICAgICAgJ1NiRGlyZWN0b3J5R2V0TmV4dFRlc3QuU3VubnlEYXlTdGF0aWNDb250ZW50JywKKyAgICAgICAgJ1NiRGlyZWN0b3J5T3BlblRlc3QuU3VubnlEYXlTdGF0aWNDb250ZW50JywKKyAgICAgICAgJ1NiRmlsZUdldFBhdGhJbmZvVGVzdC5Xb3Jrc09uU3RhdGljQ29udGVudERpcmVjdG9yaWVzJywKKworICAgICAgICAjIFRoZXNlIHRlc3RzIGFyZSBkaXNhYmxlZCBkdWUgdG8gbm90IHJlY2VpdmluZyB0aGUga0VuZE9mU3RyZWFtCisgICAgICAgICMgcGxheWVyIHN0YXRlIHVwZGF0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lb3V0LgorICAgICAgICAnU2JQbGF5ZXJXcml0ZVNhbXBsZVRlc3RzL1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0Lk5vSW5wdXQvKicsCisKKyAgICAgICAgIyBBbmRyb2lkIGRvZXMgbm90IHVzZSBTYkRybVNlc3Npb25DbG9zZWRGdW5jLCB3aGljaCB0aGVzZSB0ZXN0cworICAgICAgICAjIGRlcGVuZCBvbi4KKyAgICAgICAgJ1NiRHJtU2Vzc2lvblRlc3QuU3VubnlEYXknLAorICAgICAgICAnU2JEcm1TZXNzaW9uVGVzdC5DbG9zZURybVNlc3Npb25CZWZvcmVVcGRhdGVTZXNzaW9uJywKKworICAgICAgICAjIFRoaXMgdGVzdCBpcyBmYWlsaW5nIGJlY2F1c2UgQW5kcm9pZCBjYWxscyB0aGUKKyAgICAgICAgIyBTYkRybVNlc3Npb25VcGRhdGVSZXF1ZXN0RnVuYyB3aXRoIFNiRHJtU3RhdHVzOjprU2JEcm1TdGF0dXNTdWNjZXNzCisgICAgICAgICMgd2hlbiBpbnZhbGlkIGluaXRpYWxpemF0aW9uIGRhdGEgaXMgcGFzc2VkIHRvCisgICAgICAgICMgU2JEcm1HZW5lcmF0ZVNlc3Npb25VcGRhdGVSZXF1ZXN0KCkuCisgICAgICAgICdTYkRybVNlc3Npb25UZXN0LkludmFsaWRTZXNzaW9uVXBkYXRlUmVxdWVzdFBhcmFtcycsCisgICAgXSwKK30KKwogCiBjbGFzcyBUZXN0RmlsdGVycyhvYmplY3QpOgogICAiIiJTdGFyYm9hcmQgQW5kcm9pZCBwbGF0Zm9ybSB0ZXN0IGZpbHRlcnMuIiIiCiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBbXQotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIF9GSUxURVJFRF9URVNUUy5pdGVtcygpOgogICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQogICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQuCi0gIF9GSUxURVJFRF9URVNUUyA9IHsKLSAgICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWwotICAgICAgICAgICMgR2V0TWF4TnVtYmVyT2ZDYWNoZWRGcmFtZXMoKSBvbiBBbmRyb2lkIGlzIGRldmljZSBkZXBlbmRlbnQsCi0gICAgICAgICAgIyBhbmQgQW5kcm9pZCBkb2Vzbid0IHByb3ZpZGUgYW4gQVBJIHRvIGdldCBpdC4gU28sIHRoaXMgZnVuY3Rpb24KLSAgICAgICAgICAjIGRvZXNuJ3QgbWFrZSBzZW5zZSBvbiBBbmRyb2lkLiBCdXQgSG9sZEZyYW1lc1VudGlsRnVsbCB0ZXN0cyBkZXBlbmQKLSAgICAgICAgICAjIG9uIHRoaXMgbnVtYmVyIHN0cmljdGx5LgotICAgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkhvbGRGcmFtZXNVbnRpbEZ1bGwvKicsCi0KLSAgICAgICAgICAjIEN1cnJlbnRseSwgaW52YWxpZCBpbnB1dCB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5TaW5nbGVJbnZhbGlkSW5wdXQvKicsCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QnCi0gICAgICAgICAgJy5NdWx0aXBsZVZhbGlkSW5wdXRzQWZ0ZXJJbnZhbGlkS2V5RnJhbWUvKicsCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVJbnZhbGlkSW5wdXQvKicsCi0KLSAgICAgICAgICAjIEFuZHJvaWQgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdmlkZW8gcGxheWJhY2ssIHdoaWNoCi0gICAgICAgICAgIyB0aGUgZm9sbG93aW5nIHRlc3RzIGRlcGVuZCB1cG9uLgotICAgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlRocmVlTW9yZURlY29kZXJzLyonLAotCi0gICAgICAgICAgIyBUaGUgdmlkZW8gcGlwZWxpbmUgd2lsbCBoYW5nIGlmIGl0IGRvZXNuJ3QgcmVjZWl2ZSBhbnkgaW5wdXQuCi0gICAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy9QbGF5ZXJDb21wb25lbnRzVGVzdC5FT1NXaXRob3V0SW5wdXQvKicsCi0KLSAgICAgICAgICAjIFRoZSBlL2VhYzMgYXVkaW8gdGltZSByZXBvcnRpbmcgZHVyaW5nIHBhdXNlIHdpbGwgYmUgcmV2aXNpdGllZC4KLSAgICAgICAgICAnUGxheWVyQ29tcG9uZW50c1Rlc3RzL1BsYXllckNvbXBvbmVudHNUZXN0LlBhdXNlLzE1JywKLSAgICAgIF0sCi0gICAgICAnbnBsYic6IFsKLSAgICAgICAgICAjIFRoaXMgdGVzdCBpcyBmYWlsaW5nIGJlY2F1c2UgbG9jYWxob3N0IGlzIG5vdCBkZWZpbmVkIGZvciBJUHY2IGluCi0gICAgICAgICAgIyAvZXRjL2hvc3RzLgotICAgICAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9TYlNvY2tldFJlc29sdmVUZXN0LkxvY2FsaG9zdC8xJywKLQotICAgICAgICAgICMgVGhlc2UgdGVzdHMgYXJlIHRha2luZyBsb25nZXIgZHVlIHRvIGludGVyb3Agb24gYW5kcm9pZC4gV29yayBpcwotICAgICAgICAgICMgdW5kZXJ3YXkgdG8gaW52ZXN0aWdhdGUgd2hldGhlciB0aGlzIGlzIGFjY2VwdGFibGUuCi0gICAgICAgICAgJ1NiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbS5WYWxpZGF0ZVBlcmZvcm1hbmNlJywKLSAgICAgICAgICAnU2JNZWRpYUNvbmZpZ3VyYXRpb25UZXN0LlZhbGlkYXRlUGVyZm9ybWFuY2UnLAotCi0gICAgICAgICAgIyBTYkRpcmVjdG9yeSBoYXMgcHJvYmxlbXMgd2l0aCBlbXB0eSBBc3NldCBkaXJzLgotICAgICAgICAgICdTYkRpcmVjdG9yeUNhbk9wZW5UZXN0LlN1bm55RGF5U3RhdGljQ29udGVudCcsCi0gICAgICAgICAgJ1NiRGlyZWN0b3J5R2V0TmV4dFRlc3QuU3VubnlEYXlTdGF0aWNDb250ZW50JywKLSAgICAgICAgICAnU2JEaXJlY3RvcnlPcGVuVGVzdC5TdW5ueURheVN0YXRpY0NvbnRlbnQnLAotICAgICAgICAgICdTYkZpbGVHZXRQYXRoSW5mb1Rlc3QuV29ya3NPblN0YXRpY0NvbnRlbnREaXJlY3RvcmllcycsCi0KLSAgICAgICAgICAjIFRoZXNlIHRlc3RzIGFyZSBkaXNhYmxlZCBkdWUgdG8gbm90IHJlY2VpdmluZyB0aGUga0VuZE9mU3RyZWFtCi0gICAgICAgICAgIyBwbGF5ZXIgc3RhdGUgdXBkYXRlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuCi0gICAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cy9TYlBsYXllcldyaXRlU2FtcGxlVGVzdC5Ob0lucHV0LyonLAotCi0gICAgICAgICAgIyBBbmRyb2lkIGRvZXMgbm90IHVzZSBTYkRybVNlc3Npb25DbG9zZWRGdW5jLCB3aGljaCB0aGVzZSB0ZXN0cwotICAgICAgICAgICMgZGVwZW5kIG9uLgotICAgICAgICAgICdTYkRybVNlc3Npb25UZXN0LlN1bm55RGF5JywKLSAgICAgICAgICAnU2JEcm1TZXNzaW9uVGVzdC5DbG9zZURybVNlc3Npb25CZWZvcmVVcGRhdGVTZXNzaW9uJywKLQotICAgICAgICAgICMgVGhpcyB0ZXN0IGlzIGZhaWxpbmcgYmVjYXVzZSBBbmRyb2lkIGNhbGxzIHRoZQotICAgICAgICAgICMgU2JEcm1TZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMgd2l0aCBTYkRybVN0YXR1czo6a1NiRHJtU3RhdHVzU3VjY2VzcwotICAgICAgICAgICMgd2hlbiBpbnZhbGlkIGluaXRpYWxpemF0aW9uIGRhdGEgaXMgcGFzc2VkIHRvCi0gICAgICAgICAgIyBTYkRybUdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoKS4KLSAgICAgICAgICAnU2JEcm1TZXNzaW9uVGVzdC5JbnZhbGlkU2Vzc2lvblVwZGF0ZVJlcXVlc3RQYXJhbXMnLAotICAgICAgXSwKLSAgfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3RocmVhZF9jcmVhdGUuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX2NyZWF0ZS5jYwppbmRleCAyOGU3N2RiLi41ZjY5YTE2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX2NyZWF0ZS5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX2NyZWF0ZS5jYwpAQCAtMzAsMTEgKzMwLDYgQEAKIG5hbWVzcGFjZSBzaGFyZWQgewogbmFtZXNwYWNlIHB0aHJlYWQgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiAhU0JfSEFTKFRIUkVBRF9QUklPUklUWV9TVVBQT1JUKQotLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHRocmVhZCBwcmlvcml0eSBzdXBwb3J0Ci12b2lkIFRocmVhZFNldFByaW9yaXR5KFNiVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpIHt9Ci0jZW5kaWYKLQogdm9pZCBQcmVUaHJlYWRSdW4oKSB7fQogCiB2b2lkIFBvc3RUaHJlYWRSdW4oKSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfY3JlYXRlX3ByaW9yaXR5LmNjCmluZGV4IGVlOTk3OWIuLjUxMWJiMDQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfY3JlYXRlX3ByaW9yaXR5LmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfY3JlYXRlX3ByaW9yaXR5LmNjCkBAIC0yMyw4ICsyMyw2IEBACiBuYW1lc3BhY2Ugc2hhcmVkIHsKIG5hbWVzcGFjZSBwdGhyZWFkIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSFJFQURfUFJJT1JJVFlfU1VQUE9SVCkKLQogdm9pZCBTZXROaWNlVmFsdWUoaW50IG5pY2UpIHsKICAgaW50IHJlc3VsdCA9IHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgMCwgbmljZSk7CiAgIGlmIChyZXN1bHQgIT0gMCkgewpAQCAtNjQsOCArNjIsNiBAQAogICB9CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKFRIUkVBRF9QUklPUklUWV9TVVBQT1JUKQogfSAgLy8gbmFtZXNwYWNlIHB0aHJlYWQKIH0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjZmNTEzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIEluY2x1ZGVzIHRocmVhZGluZyBwcmltaXRpdmUgdHlwZXMgYW5kIGluaXRpYWxpemVycy4KLQotI2lmbmRlZiBTVEFSQk9BUkRfQU5EUk9JRF9TSEFSRURfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfQU5EUk9JRF9TSEFSRURfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9BTkRST0lEX1NIQVJFRF9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGltZV96b25lX2dldF9uYW1lLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3RpbWVfem9uZV9nZXRfbmFtZS5jYwppbmRleCBiMmI2YzQxLi5mMDU4YzA5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGltZV96b25lX2dldF9uYW1lLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC90aW1lX3pvbmVfZ2V0X25hbWUuY2MKQEAgLTE2LDggKzE2LDIxIEBACiAKICNpbmNsdWRlIDx0aW1lLmg+CiAKLWNvbnN0IGNoYXIqIFNiVGltZVpvbmVHZXROYW1lKCkgewotICAvLyBOb3RlIHR6c2V0KCkgaXMgY2FsbGVkIGluIEFwcGxpY2F0aW9uQW5kcm9pZDo6SW5pdGlhbGl6ZSgpCisjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2puaV9lbnZfZXh0LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL2puaV91dGlscy5oIgogCi0gIHJldHVybiB0em5hbWVbMF07Cit1c2luZyBzdGFyYm9hcmQ6OmFuZHJvaWQ6OnNoYXJlZDo6Sm5pRW52RXh0OwordXNpbmcgc3RhcmJvYXJkOjphbmRyb2lkOjpzaGFyZWQ6OlNjb3BlZExvY2FsSmF2YVJlZjsKKworY29uc3QgY2hhciogU2JUaW1lWm9uZUdldE5hbWUoKSB7CisgIHN0YXRpYyBjaGFyIHNfdGltZV96b25lX2lkWzY0XTsKKyAgLy8gTm90ZSB0enNldCgpIGlzIGNhbGxlZCBpbiBBcHBsaWNhdGlvbkFuZHJvaWQ6OkluaXRpYWxpemUoKQorICBKbmlFbnZFeHQqIGVudiA9IEpuaUVudkV4dDo6R2V0KCk7CisgIFNjb3BlZExvY2FsSmF2YVJlZjxqc3RyaW5nPiByZXN1bHQoZW52LT5DYWxsU3RhcmJvYXJkT2JqZWN0TWV0aG9kT3JBYm9ydCgKKyAgICAgICJnZXRUaW1lWm9uZUlkIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICBzdGQ6OnN0cmluZyB0aW1lX3pvbmVfaWQgPSBlbnYtPkdldFN0cmluZ1N0YW5kYXJkVVRGT3JBYm9ydChyZXN1bHQuR2V0KCkpOworICB0aW1lX3pvbmVfaWQucHVzaF9iYWNrKCdcMCcpOworICBzdHJuY3B5KHNfdGltZV96b25lX2lkLCB0aW1lX3pvbmVfaWQuY19zdHIoKSwgc2l6ZW9mKHNfdGltZV96b25lX2lkKSk7CisgIHNfdGltZV96b25lX2lkW3NpemVvZihzX3RpbWVfem9uZV9pZCkgLSAxXSA9IDA7CisgIHJldHVybiBzX3RpbWVfem9uZV9pZDsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC92aWRlb19kZWNvZGVyLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX2RlY29kZXIuY2MKaW5kZXggNzc1NDk2Yy4uNTA3ODk4OSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX2RlY29kZXIuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX2RlY29kZXIuY2MKQEAgLTIxOCw3ICsyMTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWF4X3ZpZGVvX2NhcGFiaWxpdGllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZV9zZWN1cmVfcGlwZWxpbmVfdW5kZXJfdHVubmVsX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlX3Jlc2V0X3N1cmZhY2VfdW5kZXJfdHVubmVsX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlX2JpZ19lbmRpYW5faGRyX21ldGFkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZV9pbXByb3ZlZF9zdXBwb3J0X2NoZWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yX21lc3NhZ2UpCiAgICAgOiB2aWRlb19jb2RlY18odmlkZW9fY29kZWMpLAogICAgICAgZHJtX3N5c3RlbV8oc3RhdGljX2Nhc3Q8RHJtU3lzdGVtKj4oZHJtX3N5c3RlbSkpLApAQCAtMjI2LDExICsyMjgsMTQgQEAKICAgICAgIGRlY29kZV90YXJnZXRfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8oCiAgICAgICAgICAgZGVjb2RlX3RhcmdldF9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyKSwKICAgICAgIHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWRfKHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQpLAorICAgICAgZm9yY2VfcmVzZXRfc3VyZmFjZV91bmRlcl90dW5uZWxfbW9kZV8oCisgICAgICAgICAgZm9yY2VfcmVzZXRfc3VyZmFjZV91bmRlcl90dW5uZWxfbW9kZSksCiAgICAgICBoYXNfbmV3X3RleHR1cmVfYXZhaWxhYmxlXyhmYWxzZSksCiAgICAgICBzdXJmYWNlX2NvbmRpdGlvbl92YXJpYWJsZV8oc3VyZmFjZV9kZXN0cm95X211dGV4XyksCiAgICAgICByZXF1aXJlX3NvZnR3YXJlX2NvZGVjXyhtYXhfdmlkZW9fY2FwYWJpbGl0aWVzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obWF4X3ZpZGVvX2NhcGFiaWxpdGllcykgPiAwKSwKLSAgICAgIGZvcmNlX2JpZ19lbmRpYW5faGRyX21ldGFkYXRhXyhmb3JjZV9iaWdfZW5kaWFuX2hkcl9tZXRhZGF0YSkgeworICAgICAgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGFfKGZvcmNlX2JpZ19lbmRpYW5faGRyX21ldGFkYXRhKSwKKyAgICAgIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2tfKGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2spIHsKICAgU0JfRENIRUNLKGVycm9yX21lc3NhZ2UpOwogCiAgIGlmICh0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkICE9IC0xKSB7CkBAIC0yNjQsNyArMjY5LDExIEBACiAKIFZpZGVvRGVjb2Rlcjo6flZpZGVvRGVjb2RlcigpIHsKICAgVGVhcmRvd25Db2RlYygpOwotICBDbGVhclZpZGVvV2luZG93KCk7CisgIGlmICh0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkXyAhPSAtMSkgeworICAgIENsZWFyVmlkZW9XaW5kb3coZm9yY2VfcmVzZXRfc3VyZmFjZV91bmRlcl90dW5uZWxfbW9kZV8pOworICB9IGVsc2UgeworICAgIENsZWFyVmlkZW9XaW5kb3coZmFsc2UpOworICB9CiAKICAgaWYgKCFyZXF1aXJlX3NvZnR3YXJlX2NvZGVjXykgewogICAgIG51bWJlcl9vZl9oYXJkd2FyZV9kZWNvZGVyc18tLTsKQEAgLTU1OSw3ICs1NjgsNyBAQAogICAgICAgcmVxdWlyZV9zb2Z0d2FyZV9jb2RlY18sCiAgICAgICBzdGQ6OmJpbmQoJlZpZGVvRGVjb2Rlcjo6T25UdW5uZWxNb2RlRnJhbWVSZW5kZXJlZCwgdGhpcywgXzEpLAogICAgICAgdHVubmVsX21vZGVfYXVkaW9fc2Vzc2lvbl9pZF8sIGZvcmNlX2JpZ19lbmRpYW5faGRyX21ldGFkYXRhXywKLSAgICAgIGVycm9yX21lc3NhZ2UpKTsKKyAgICAgIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2tfLCBlcnJvcl9tZXNzYWdlKSk7CiAgIGlmIChtZWRpYV9kZWNvZGVyXy0+aXNfdmFsaWQoKSkgewogICAgIGlmIChlcnJvcl9jYl8pIHsKICAgICAgIG1lZGlhX2RlY29kZXJfLT5Jbml0aWFsaXplKApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX2RlY29kZXIuaCBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC92aWRlb19kZWNvZGVyLmgKaW5kZXggY2M1ZGMxZS4uNzg1OWFhMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX2RlY29kZXIuaAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdmlkZW9fZGVjb2Rlci5oCkBAIC02Nyw3ICs2Nyw5IEBACiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzLAogICAgICAgICAgICAgICAgaW50IHR1bm5lbF9tb2RlX2F1ZGlvX3Nlc3Npb25faWQsCiAgICAgICAgICAgICAgICBib29sIGZvcmNlX3NlY3VyZV9waXBlbGluZV91bmRlcl90dW5uZWxfbW9kZSwKKyAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfcmVzZXRfc3VyZmFjZV91bmRlcl90dW5uZWxfbW9kZSwKICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGEsCisgICAgICAgICAgICAgICBib29sIGZvcmNlX2ltcHJvdmVkX3N1cHBvcnRfY2hlY2ssCiAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZXJyb3JfbWVzc2FnZSk7CiAgIH5WaWRlb0RlY29kZXIoKSBvdmVycmlkZTsKIApAQCAtMTM2LDEwICsxMzgsMTggQEAKICAgLy8gdGhlIG1haW4gcGxheWVyIGFuZCBTVyBkZWNvZGVyIGZvciBzdWIgcGxheWVycy4KICAgY29uc3QgYm9vbCByZXF1aXJlX3NvZnR3YXJlX2NvZGVjXzsKIAorICAvLyBGb3JjZXMgdGhlIHVzZSBvZiBzcGVjaWZpYyBBbmRyb2lkIEFQSXMgKGlzU2l6ZVN1cHBvcnRlZCgpIGFuZAorICAvLyBhcmVTaXplQW5kUmF0ZVN1cHBvcnRlZCgpKSB0byBkZXRlcm1pbmUgZm9ybWF0IHN1cHBvcnQuCisgIGNvbnN0IGJvb2wgZm9yY2VfaW1wcm92ZWRfc3VwcG9ydF9jaGVja187CisKICAgLy8gRm9yY2UgZW5kaWFubmVzcyBvZiBIRFIgTWV0YWRhdGEuCiAgIGNvbnN0IGJvb2wgZm9yY2VfYmlnX2VuZGlhbl9oZHJfbWV0YWRhdGFfOwogCiAgIGNvbnN0IGludCB0dW5uZWxfbW9kZV9hdWRpb19zZXNzaW9uX2lkXyA9IC0xOworCisgIC8vIEZvcmNlIHJlc2V0dGluZyB0aGUgdmlkZW8gc3VyZmFjZSBhZnRlciB0dW5uZWwgbW9kZSBwbGF5YmFjaywgd2hpY2gKKyAgLy8gcHJldmVudHMgdmlkZW8gZGlzdG9ydGlvbiBvbiBzb21lIGRldmljZXMuCisgIGNvbnN0IGJvb2wgZm9yY2VfcmVzZXRfc3VyZmFjZV91bmRlcl90dW5uZWxfbW9kZV87CiAgIC8vIE9uIHNvbWUgcGxhdGZvcm1zIHR1bm5lbCBtb2RlIGlzIG9ubHkgc3VwcG9ydGVkIGluIHRoZSBzZWN1cmUgcGlwZWxpbmUuICBTbwogICAvLyB3ZSBjcmVhdGUgYSBkdW1teSBkcm0gc3lzdGVtIHRvIGZvcmNlIHRoZSB2aWRlbyBwbGF5aW5nIGluIHNlY3VyZSBwaXBlbGluZQogICAvLyB0byBlbmFibGUgdHVubmVsIG1vZGUuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdmlkZW9fd2luZG93LmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX3dpbmRvdy5jYwppbmRleCA4OGI3MDM3Li44MWQ4OThkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdmlkZW9fd2luZG93LmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC92aWRlb193aW5kb3cuY2MKQEAgLTE0LDEwICsxNCwxMCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX3dpbmRvdy5oIgogCi0jaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93Lmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9uYXRpdmVfd2luZG93X2puaS5oPgogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL25hdGl2ZV93aW5kb3cuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL25hdGl2ZV93aW5kb3dfam5pLmg+CiAjaW5jbHVkZSA8am5pLmg+CiAKICNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvam5pX2Vudl9leHQuaCIKQEAgLTQ1LDYgKzQ1LDg3IEBACiAvLyB2ZXJ0aWNhbCB2aWRlby4KIGJvb2wgZ19yZXNldF9zdXJmYWNlX29uX2NsZWFyX3dpbmRvdyA9IGZhbHNlOwogCit2b2lkIENsZWFyTmF0aXZlV2luZG93KEFOYXRpdmVXaW5kb3cqIG5hdGl2ZV93aW5kb3cpIHsKKyAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKyAgZWdsSW5pdGlhbGl6ZShkaXNwbGF5LCBOVUxMLCBOVUxMKTsKKyAgaWYgKGRpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCAiRm91bmQgbm8gRUdMIGRpc3BsYXkgaW4gQ2xlYXJWaWRlb1dpbmRvdyI7CisgICAgcmV0dXJuOworICB9CisKKyAgY29uc3QgRUdMaW50IGtBdHRyaWJ1dGVMaXN0W10gPSB7CisgICAgICBFR0xfUkVEX1NJWkUsCisgICAgICA4LAorICAgICAgRUdMX0dSRUVOX1NJWkUsCisgICAgICA4LAorICAgICAgRUdMX0JMVUVfU0laRSwKKyAgICAgIDgsCisgICAgICBFR0xfQUxQSEFfU0laRSwKKyAgICAgIDgsCisgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLAorICAgICAgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgRUdMX05PTkUsCisgICAgICAwLAorICAgICAgRUdMX05PTkUsCisgIH07CisKKyAgLy8gRmlyc3QsIHF1ZXJ5IGhvdyBtYW55IGNvbmZpZ3MgbWF0Y2ggdGhlIGdpdmVuIGF0dHJpYnV0ZSBsaXN0LgorICBFR0xpbnQgbnVtX2NvbmZpZ3MgPSAwOworICBFR0xfQ0FMTChlZ2xDaG9vc2VDb25maWcoZGlzcGxheSwga0F0dHJpYnV0ZUxpc3QsIE5VTEwsIDAsICZudW1fY29uZmlncykpOworICBTQl9EQ0hFQ0sobnVtX2NvbmZpZ3MgIT0gMCk7CisKKyAgLy8gQWxsb2NhdGUgc3BhY2UgdG8gcmVjZWl2ZSB0aGUgbWF0Y2hpbmcgY29uZmlncyBhbmQgcmV0cmlldmUgdGhlbS4KKyAgRUdMQ29uZmlnKiBjb25maWdzID0gbmV3IEVHTENvbmZpZ1tudW1fY29uZmlnc107CisgIEVHTF9DQUxMKGVnbENob29zZUNvbmZpZyhkaXNwbGF5LCBrQXR0cmlidXRlTGlzdCwgY29uZmlncywgbnVtX2NvbmZpZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtX2NvbmZpZ3MpKTsKKworICBFR0xOYXRpdmVXaW5kb3dUeXBlIGVnbF9uYXRpdmVfd2luZG93ID0KKyAgICAgIHN0YXRpY19jYXN0PEVHTE5hdGl2ZVdpbmRvd1R5cGU+KG5hdGl2ZV93aW5kb3cpOworICBFR0xDb25maWcgY29uZmlnOworCisgIC8vIEZpbmQgdGhlIGZpcnN0IGNvbmZpZyB0aGF0IHN1Y2Nlc3NmdWxseSBhbGxvdyBhIHdpbmRvdyBzdXJmYWNlIHRvIGJlCisgIC8vIGNyZWF0ZWQuCisgIEVHTFN1cmZhY2Ugc3VyZmFjZTsKKyAgZm9yIChpbnQgY29uZmlnX251bWJlciA9IDA7IGNvbmZpZ19udW1iZXIgPCBudW1fY29uZmlnczsgKytjb25maWdfbnVtYmVyKSB7CisgICAgY29uZmlnID0gY29uZmlnc1tjb25maWdfbnVtYmVyXTsKKyAgICBzdXJmYWNlID0gZWdsQ3JlYXRlV2luZG93U3VyZmFjZShkaXNwbGF5LCBjb25maWcsIGVnbF9uYXRpdmVfd2luZG93LCBOVUxMKTsKKyAgICBpZiAoZWdsR2V0RXJyb3IoKSA9PSBFR0xfU1VDQ0VTUykKKyAgICAgIGJyZWFrOworICB9CisgIGlmIChzdXJmYWNlID09IEVHTF9OT19TVVJGQUNFKSB7CisgICAgU0JfRExPRyhFUlJPUikgPDwgIkZvdW5kIG5vIEVHTCBzdXJmYWNlIGluIENsZWFyVmlkZW9XaW5kb3ciOworICAgIHJldHVybjsKKyAgfQorICBTQl9EQ0hFQ0soc3VyZmFjZSAhPSBFR0xfTk9fU1VSRkFDRSk7CisKKyAgZGVsZXRlW10gY29uZmlnczsKKworICAvLyBDcmVhdGUgYW4gT3BlbkdMIEVTIDIuMCBjb250ZXh0LgorICBFR0xDb250ZXh0IGNvbnRleHQgPSBFR0xfTk9fQ09OVEVYVDsKKyAgRUdMaW50IGNvbnRleHRfYXR0cmliX2xpc3RbXSA9IHsKKyAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0xfTk9ORSwKKyAgfTsKKyAgY29udGV4dCA9CisgICAgICBlZ2xDcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRfYXR0cmliX2xpc3QpOworICBTQl9EQ0hFQ0soZWdsR2V0RXJyb3IoKSA9PSBFR0xfU1VDQ0VTUyk7CisgIFNCX0RDSEVDSyhjb250ZXh0ICE9IEVHTF9OT19DT05URVhUKTsKKworICAvKiBjb25uZWN0IHRoZSBjb250ZXh0IHRvIHRoZSBzdXJmYWNlICovCisgIEVHTF9DQUxMKGVnbE1ha2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsIGNvbnRleHQpKTsKKworICBHTF9DQUxMKGdsQ2xlYXJDb2xvcigwLCAwLCAwLCAxKSk7CisgIEdMX0NBTEwoZ2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKSk7CisgIEdMX0NBTEwoZ2xGbHVzaCgpKTsKKyAgRUdMX0NBTEwoZWdsU3dhcEJ1ZmZlcnMoZGlzcGxheSwgc3VyZmFjZSkpOworCisgIC8vIENsZWFudXAgYWxsIHVzZWQgcmVzb3VyY2VzLgorICBFR0xfQ0FMTCgKKyAgICAgIGVnbE1ha2VDdXJyZW50KGRpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpKTsKKyAgRUdMX0NBTEwoZWdsRGVzdHJveUNvbnRleHQoZGlzcGxheSwgY29udGV4dCkpOworICBFR0xfQ0FMTChlZ2xEZXN0cm95U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlKSk7CisgIEVHTF9DQUxMKGVnbFRlcm1pbmF0ZShkaXNwbGF5KSk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZQogCiBleHRlcm4gIkMiIFNCX0VYUE9SVF9QTEFURk9STSB2b2lkCkBAIC02OCw2ICsxNDksNyBAQAogICBpZiAoc3VyZmFjZSkgewogICAgIGdfal92aWRlb19zdXJmYWNlID0gZW52LT5OZXdHbG9iYWxSZWYoc3VyZmFjZSk7CiAgICAgZ19uYXRpdmVfdmlkZW9fd2luZG93ID0gQU5hdGl2ZVdpbmRvd19mcm9tU3VyZmFjZShlbnYsIHN1cmZhY2UpOworICAgIENsZWFyTmF0aXZlV2luZG93KGdfbmF0aXZlX3ZpZGVvX3dpbmRvdyk7CiAgIH0KIH0KIApAQCAtMTE4LDcgKzIwMCw3IEBACiAgIH0KIH0KIAotdm9pZCBWaWRlb1N1cmZhY2VIb2xkZXI6OkNsZWFyVmlkZW9XaW5kb3coKSB7Cit2b2lkIFZpZGVvU3VyZmFjZUhvbGRlcjo6Q2xlYXJWaWRlb1dpbmRvdyhib29sIGZvcmNlX3Jlc2V0X3N1cmZhY2UpIHsKICAgLy8gTG9jayAqR2V0Vmlld1N1cmZhY2VNdXRleCgpIGhlcmUsIHRvIGF2b2lkIHJlbGVhc2luZyBnX25hdGl2ZV92aWRlb193aW5kb3cKICAgLy8gZHVyaW5nIHBhaW50aW5nLgogICBTY29wZWRMb2NrIGxvY2soKkdldFZpZXdTdXJmYWNlTXV0ZXgoKSk7CkBAIC0xMjgsNyArMjEwLDExIEBACiAgICAgcmV0dXJuOwogICB9CiAKLSAgaWYgKGdfcmVzZXRfc3VyZmFjZV9vbl9jbGVhcl93aW5kb3cpIHsKKyAgaWYgKGZvcmNlX3Jlc2V0X3N1cmZhY2UpIHsKKyAgICBKbmlFbnZFeHQ6OkdldCgpLT5DYWxsU3RhcmJvYXJkVm9pZE1ldGhvZE9yQWJvcnQoInJlc2V0VmlkZW9TdXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpViIpOworICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChnX3Jlc2V0X3N1cmZhY2Vfb25fY2xlYXJfd2luZG93KSB7CiAgICAgaW50IHdpZHRoID0gQU5hdGl2ZVdpbmRvd19nZXRXaWR0aChnX25hdGl2ZV92aWRlb193aW5kb3cpOwogICAgIGludCBoZWlnaHQgPSBBTmF0aXZlV2luZG93X2dldEhlaWdodChnX25hdGl2ZV92aWRlb193aW5kb3cpOwogICAgIGlmICh3aWR0aCA8PSBoZWlnaHQpIHsKQEAgLTEzOCw4NCArMjI0LDcgQEAKICAgICB9CiAgIH0KIAotICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICBlZ2xJbml0aWFsaXplKGRpc3BsYXksIE5VTEwsIE5VTEwpOwotICBpZiAoZGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgewotICAgIFNCX0RMT0coRVJST1IpIDw8ICJGb3VuZCBubyBFR0wgZGlzcGxheSBpbiBDbGVhclZpZGVvV2luZG93IjsKLSAgICByZXR1cm47Ci0gIH0KLQotICBjb25zdCBFR0xpbnQga0F0dHJpYnV0ZUxpc3RbXSA9IHsKLSAgICAgIEVHTF9SRURfU0laRSwKLSAgICAgIDgsCi0gICAgICBFR0xfR1JFRU5fU0laRSwKLSAgICAgIDgsCi0gICAgICBFR0xfQkxVRV9TSVpFLAotICAgICAgOCwKLSAgICAgIEVHTF9BTFBIQV9TSVpFLAotICAgICAgOCwKLSAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsCi0gICAgICBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgICBFR0xfTk9ORSwKLSAgICAgIDAsCi0gICAgICBFR0xfTk9ORSwKLSAgfTsKLQotICAvLyBGaXJzdCwgcXVlcnkgaG93IG1hbnkgY29uZmlncyBtYXRjaCB0aGUgZ2l2ZW4gYXR0cmlidXRlIGxpc3QuCi0gIEVHTGludCBudW1fY29uZmlncyA9IDA7Ci0gIEVHTF9DQUxMKGVnbENob29zZUNvbmZpZyhkaXNwbGF5LCBrQXR0cmlidXRlTGlzdCwgTlVMTCwgMCwgJm51bV9jb25maWdzKSk7Ci0gIFNCX0RDSEVDSyhudW1fY29uZmlncyAhPSAwKTsKLQotICAvLyBBbGxvY2F0ZSBzcGFjZSB0byByZWNlaXZlIHRoZSBtYXRjaGluZyBjb25maWdzIGFuZCByZXRyaWV2ZSB0aGVtLgotICBFR0xDb25maWcqIGNvbmZpZ3MgPSBuZXcgRUdMQ29uZmlnW251bV9jb25maWdzXTsKLSAgRUdMX0NBTEwoZWdsQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGtBdHRyaWJ1dGVMaXN0LCBjb25maWdzLCBudW1fY29uZmlncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1fY29uZmlncykpOwotCi0gIEVHTE5hdGl2ZVdpbmRvd1R5cGUgbmF0aXZlX3dpbmRvdyA9Ci0gICAgICBzdGF0aWNfY2FzdDxFR0xOYXRpdmVXaW5kb3dUeXBlPihnX25hdGl2ZV92aWRlb193aW5kb3cpOwotICBFR0xDb25maWcgY29uZmlnOwotCi0gIC8vIEZpbmQgdGhlIGZpcnN0IGNvbmZpZyB0aGF0IHN1Y2Nlc3NmdWxseSBhbGxvdyBhIHdpbmRvdyBzdXJmYWNlIHRvIGJlCi0gIC8vIGNyZWF0ZWQuCi0gIEVHTFN1cmZhY2Ugc3VyZmFjZTsKLSAgZm9yIChpbnQgY29uZmlnX251bWJlciA9IDA7IGNvbmZpZ19udW1iZXIgPCBudW1fY29uZmlnczsgKytjb25maWdfbnVtYmVyKSB7Ci0gICAgY29uZmlnID0gY29uZmlnc1tjb25maWdfbnVtYmVyXTsKLSAgICBzdXJmYWNlID0gZWdsQ3JlYXRlV2luZG93U3VyZmFjZShkaXNwbGF5LCBjb25maWcsIG5hdGl2ZV93aW5kb3csIE5VTEwpOwotICAgIGlmIChlZ2xHZXRFcnJvcigpID09IEVHTF9TVUNDRVNTKQotICAgICAgYnJlYWs7Ci0gIH0KLSAgaWYgKHN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpIHsKLSAgICBTQl9ETE9HKEVSUk9SKSA8PCAiRm91bmQgbm8gRUdMIHN1cmZhY2UgaW4gQ2xlYXJWaWRlb1dpbmRvdyI7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFNCX0RDSEVDSyhzdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKTsKLQotICBkZWxldGVbXSBjb25maWdzOwotCi0gIC8vIENyZWF0ZSBhbiBPcGVuR0wgRVMgMi4wIGNvbnRleHQuCi0gIEVHTENvbnRleHQgY29udGV4dCA9IEVHTF9OT19DT05URVhUOwotICBFR0xpbnQgY29udGV4dF9hdHRyaWJfbGlzdFtdID0gewotICAgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTF9OT05FLAotICB9OwotICBjb250ZXh0ID0KLSAgICAgIGVnbENyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29udGV4dF9hdHRyaWJfbGlzdCk7Ci0gIFNCX0RDSEVDSyhlZ2xHZXRFcnJvcigpID09IEVHTF9TVUNDRVNTKTsKLSAgU0JfRENIRUNLKGNvbnRleHQgIT0gRUdMX05PX0NPTlRFWFQpOwotCi0gIC8qIGNvbm5lY3QgdGhlIGNvbnRleHQgdG8gdGhlIHN1cmZhY2UgKi8KLSAgRUdMX0NBTEwoZWdsTWFrZUN1cnJlbnQoZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgY29udGV4dCkpOwotCi0gIEdMX0NBTEwoZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDEpKTsKLSAgR0xfQ0FMTChnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpKTsKLSAgR0xfQ0FMTChnbEZsdXNoKCkpOwotICBFR0xfQ0FMTChlZ2xTd2FwQnVmZmVycyhkaXNwbGF5LCBzdXJmYWNlKSk7Ci0KLSAgLy8gQ2xlYW51cCBhbGwgdXNlZCByZXNvdXJjZXMuCi0gIEVHTF9DQUxMKAotICAgICAgZWdsTWFrZUN1cnJlbnQoZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCkpOwotICBFR0xfQ0FMTChlZ2xEZXN0cm95Q29udGV4dChkaXNwbGF5LCBjb250ZXh0KSk7Ci0gIEVHTF9DQUxMKGVnbERlc3Ryb3lTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UpKTsKLSAgRUdMX0NBTEwoZWdsVGVybWluYXRlKGRpc3BsYXkpKTsKKyAgQ2xlYXJOYXRpdmVXaW5kb3coZ19uYXRpdmVfdmlkZW9fd2luZG93KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIHNoYXJlZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX3dpbmRvdy5oIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3ZpZGVvX3dpbmRvdy5oCmluZGV4IDE3ZGI0MDcuLjQxOTZjYjkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC92aWRlb193aW5kb3cuaAorKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdmlkZW9fd2luZG93LmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgYm9vbCBHZXRWaWRlb1dpbmRvd1NpemUoaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOwogCiAgIC8vIENsZWFyIHRoZSB2aWRlbyB3aW5kb3cgYnkgcGFpbnRpbmcgaXQgQmxhY2suCi0gIHZvaWQgQ2xlYXJWaWRlb1dpbmRvdygpOworICB2b2lkIENsZWFyVmlkZW9XaW5kb3coYm9vbCBmb3JjZV9yZXNldF9zdXJmYWNlKTsKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfYmx1cl9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjCmluZGV4IGRkMjA0OGYuLjgzNjk2YmYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfYmx1cl9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19ibHVyX29uX3NjcmVlbl9rZXlib2FyZC5jYwpAQCAtMTQsMTAgKzE0LDcgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiB2b2lkIFNiV2luZG93Qmx1ck9uU2NyZWVuS2V5Ym9hcmQoU2JXaW5kb3cgd2luZG93LCBpbnQgdGlja2V0KSB7CiAgIC8vIFN0dWIuCiAgIHJldHVybjsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfZm9jdXNfb25fc2NyZWVuX2tleWJvYXJkLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19mb2N1c19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKaW5kZXggOGZmZGFiYS4uYmJjYjdhMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19mb2N1c19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19mb2N1c19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKQEAgLTE0LDEwICsxNCw3IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBTYldpbmRvd0ZvY3VzT25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csIGludCB0aWNrZXQpIHsKICAgLy8gU3R1Yi4KICAgcmV0dXJuOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19nZXRfb25fc2NyZWVuX2tleWJvYXJkX2JvdW5kaW5nX3JlY3QuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYwppbmRleCBiNzkzZjViLi4zOGIzNTM2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYwpAQCAtMTQsMTEgKzE0LDggQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiBib29sIFNiV2luZG93R2V0T25TY3JlZW5LZXlib2FyZEJvdW5kaW5nUmVjdChTYldpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYldpbmRvd1JlY3QqIGJvdW5kaW5nX3JlY3QpIHsKICAgLy8gU3R1Yi4KICAgcmV0dXJuIHRydWU7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2hpZGVfb25fc2NyZWVuX2tleWJvYXJkLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19oaWRlX29uX3NjcmVlbl9rZXlib2FyZC5jYwppbmRleCA3Y2YwMDhjLi42NDIwNjBlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X2hpZGVfb25fc2NyZWVuX2tleWJvYXJkLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfaGlkZV9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKQEAgLTE2LDExICsxNiw4IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYXBwbGljYXRpb25fYW5kcm9pZC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIHZvaWQgU2JXaW5kb3dIaWRlT25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csIGludCB0aWNrZXQpIHsKICAgc3RhcmJvYXJkOjphbmRyb2lkOjpzaGFyZWQ6OkFwcGxpY2F0aW9uQW5kcm9pZDo6R2V0KCkKICAgICAgIC0+U2JXaW5kb3dIaWRlT25TY3JlZW5LZXlib2FyZCh3aW5kb3csIHRpY2tldCk7CiAgIHJldHVybjsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfaXNfb25fc2NyZWVuX2tleWJvYXJkX3Nob3duLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKaW5kZXggNzFhYzFhMC4uYzc3NDlhMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKQEAgLTIwLDcgKzIwLDYgQEAKIHVzaW5nIHN0YXJib2FyZDo6YW5kcm9pZDo6c2hhcmVkOjpKbmlFbnZFeHQ7CiB1c2luZyBzdGFyYm9hcmQ6OmFuZHJvaWQ6OnNoYXJlZDo6U2NvcGVkTG9jYWxKYXZhUmVmOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIGJvb2wgU2JXaW5kb3dJc09uU2NyZWVuS2V5Ym9hcmRTaG93bihTYldpbmRvdyB3aW5kb3cpIHsKICAgSm5pRW52RXh0KiBlbnYgPSBKbmlFbnZFeHQ6OkdldCgpOwogCkBAIC0zMSw1ICszMCwzIEBACiAgICAgICBqX2tleWJvYXJkX2VkaXRvci5HZXQoKSwgImlzS2V5Ym9hcmRTaG93aW5nIiwgIigpWiIpOwogICByZXR1cm4gaXNfa2V5Ym9hcmRfc2hvd247CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MKaW5kZXggYWI2M2FmOC4uNTM4ODE4MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfaXNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX2lzX3N1cHBvcnRlZC5jYwpAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JXaW5kb3dPblNjcmVlbktleWJvYXJkSXNTdXBwb3J0ZWQoKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc19zdXBwb3J0ZWQuY2MKaW5kZXggMDUwYTJmOC4uNTQxYWE2YSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zX3N1cHBvcnRlZC5jYwpAQCAtMTQsOSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIGJvb2wgU2JXaW5kb3dPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNTdXBwb3J0ZWQoU2JXaW5kb3cgd2luZG93KSB7CiAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19zZXRfb25fc2NyZWVuX2tleWJvYXJkX2tlZXBfZm9jdXMuY2MgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYwppbmRleCBjOTQwYWFkLi5hMjE2OTM3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYworKysgYi9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYwpAQCAtMTgsNyArMTgsNiBAQAogCiB1c2luZyBzdGFyYm9hcmQ6OmFuZHJvaWQ6OnNoYXJlZDo6Sm5pRW52RXh0OwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIHZvaWQgU2JXaW5kb3dTZXRPblNjcmVlbktleWJvYXJkS2VlcEZvY3VzKFNiV2luZG93IHdpbmRvdywgYm9vbCBrZWVwX2ZvY3VzKSB7CiAgIEpuaUVudkV4dCogZW52ID0gSm5pRW52RXh0OjpHZXQoKTsKICAgam9iamVjdCBqX2tleWJvYXJkX2VkaXRvciA9IGVudi0+Q2FsbFN0YXJib2FyZE9iamVjdE1ldGhvZE9yQWJvcnQoCkBAIC0yNyw1ICsyNiwzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBfZm9jdXMpOwogICByZXR1cm47CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd19zaG93X29uX3NjcmVlbl9rZXlib2FyZC5jYwppbmRleCBhOWY3M2ZhLi5iZDM3OGEwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjCisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfc2hvd19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC9hcHBsaWNhdGlvbl9hbmRyb2lkLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogdm9pZCBTYldpbmRvd1Nob3dPblNjcmVlbktleWJvYXJkKFNiV2luZG93IHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnB1dF90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aWNrZXQpIHsKQEAgLTI0LDUgKzIzLDMgQEAKICAgICAgIC0+U2JXaW5kb3dTaG93T25TY3JlZW5LZXlib2FyZCh3aW5kb3csIGlucHV0X3RleHQsIHRpY2tldCk7CiAgIHJldHVybjsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYyBiL3N0YXJib2FyZC9hbmRyb2lkL3NoYXJlZC93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYwppbmRleCAyMTdjNWFlLi40NGJhZDE0IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvd2luZG93X3VwZGF0ZV9vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnMuY2MKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQvc2hhcmVkL3dpbmRvd191cGRhdGVfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zLmNjCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvYXBwbGljYXRpb25fYW5kcm9pZC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIHZvaWQgU2JXaW5kb3dVcGRhdGVPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnMoU2JXaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWdnZXN0aW9uc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3N1Z2dlc3Rpb25zLApAQCAtMzAsNSArMjksMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXQpOwogICByZXR1cm47CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC94ODYvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC94ODYvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggZmM1NGJhOS4uY2YzYTg4MSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2FuZHJvaWQveDg2L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9jb2JhbHQvY29uZmlndXJhdGlvbi5weQpAQCAtMjIsNyArMjIsNyBAQAogCiAgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKICAgICBmaWx0ZXJzID0gc3VwZXIoQ29iYWx0QW5kcm9pZFg4NkNvbmZpZ3VyYXRpb24sIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CiAgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCiAgICAgcmV0dXJuIGZpbHRlcnMKIApAQCAtMzIsMjQgKzMyLDIyIEBACiAgICAgICAgICAgdGVzdF9maWx0ZXIuRklMVEVSX0FMTAogICAgICAgXSwKICAgICAgICdsYXlvdXRfdGVzdHMnOiBbICAjIE9sZCBBbmRyb2lkIHZlcnNpb25zIGRvbid0IGhhdmUgbWF0Y2hpbmcgZm9udHMKLSAgICAgICAgICAnQ1NTM0ZvbnRzTGF5b3V0VGVzdHMvTGF5b3V0LlRlc3QnCi0gICAgICAgICAgJy81XzJfdXNlX2ZpcnN0X2F2YWlsYWJsZV9saXN0ZWRfZm9udF9mYW1pbHknLAotICAgICAgICAgICdDU1MzRm9udHNMYXlvdXRUZXN0cy9MYXlvdXQuVGVzdCcKLSAgICAgICAgICAnLzVfMl91c2Vfc3BlY2lmaWVkX2ZvbnRfZmFtaWx5X2lmX2F2YWlsYWJsZScsCi0gICAgICAgICAgJ0NTUzNGb250c0xheW91dFRlc3RzL0xheW91dC5UZXN0JwotICAgICAgICAgICcvNV8yX3VzZV9zeXN0ZW1fZmFsbGJhY2tfaWZfbm9fbWF0Y2hpbmdfZmFtaWx5X2lzX2ZvdW5kKicsCi0gICAgICAgICAgJ0NTUzNGb250c0xheW91dFRlc3RzL0xheW91dC5UZXN0JwotICAgICAgICAgICcvc3ludGhldGljX2JvbGRpbmdfc2hvdWxkX25vdF9vY2N1cl9vbl9ib2xkX2ZvbnQnLAotICAgICAgICAgICdDU1MzRm9udHNMYXlvdXRUZXN0cy9MYXlvdXQuVGVzdCcKLSAgICAgICAgICAnL3N5bnRoZXRpY19ib2xkaW5nX3Nob3VsZF9vY2N1cl9vbl9ub25fYm9sZF9mb250JywKKyAgICAgICAgICAoJ0NTUzNGb250c0xheW91dFRlc3RzL0xheW91dC5UZXN0JworICAgICAgICAgICAnLzVfMl91c2VfZmlyc3RfYXZhaWxhYmxlX2xpc3RlZF9mb250X2ZhbWlseScpLAorICAgICAgICAgICgnQ1NTM0ZvbnRzTGF5b3V0VGVzdHMvTGF5b3V0LlRlc3QnCisgICAgICAgICAgICcvNV8yX3VzZV9zcGVjaWZpZWRfZm9udF9mYW1pbHlfaWZfYXZhaWxhYmxlJyksCisgICAgICAgICAgKCdDU1MzRm9udHNMYXlvdXRUZXN0cy9MYXlvdXQuVGVzdCcKKyAgICAgICAgICAgJy81XzJfdXNlX3N5c3RlbV9mYWxsYmFja19pZl9ub19tYXRjaGluZ19mYW1pbHlfaXNfZm91bmQqJyksCisgICAgICAgICAgKCdDU1MzRm9udHNMYXlvdXRUZXN0cy9MYXlvdXQuVGVzdCcKKyAgICAgICAgICAgJy9zeW50aGV0aWNfYm9sZGluZ19zaG91bGRfbm90X29jY3VyX29uX2JvbGRfZm9udCcpLAorICAgICAgICAgICgnQ1NTM0ZvbnRzTGF5b3V0VGVzdHMvTGF5b3V0LlRlc3QnCisgICAgICAgICAgICcvc3ludGhldGljX2JvbGRpbmdfc2hvdWxkX29jY3VyX29uX25vbl9ib2xkX2ZvbnQnKSwKICAgICAgIF0sCiAgICAgICAnbmV0X3VuaXR0ZXN0cyc6IFsgICMgTmV0IHRlc3RzIGFyZSB2ZXJ5IHVuc3RhYmxlIG9uIEFuZHJvaWQgTAogICAgICAgICAgIHRlc3RfZmlsdGVyLkZJTFRFUl9BTEwKICAgICAgIF0sCiAgICAgICAncmVuZGVyZXJfdGVzdCc6IFsKICAgICAgICAgICAnTG90dGllQ292ZXJhZ2VQaXhlbFRlc3Qqc2tvdHRpZV9tYXR0ZV9ibGVuZG1vZGVfanNvbicsCi0gICAgICAgICAgJ1BpeGVsVGVzdC5TaW1wbGVUZXh0SW5SZWQ0MFB0Q2hpbmVzZUZvbnQnLAotICAgICAgICAgICdQaXhlbFRlc3QuU2ltcGxlVGV4dEluUmVkNDBQdFRoYWlGb250JywKICAgICAgICAgICAnUGl4ZWxUZXN0LllVVjQyMlVZVllJbWFnZVNjYWxlZFVwU3VwcG9ydCcsCiAgICAgICAgICAgJ1BpeGVsVGVzdC5ZVVY0MjJVWVZZSW1hZ2VTY2FsZWRBbmRUcmFuc2xhdGVkJywKICAgICAgIF0sCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC94ODYvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzM5YWU2Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIEFuZHJvaWQgeDg2IGRvZXMgbm90IHN1cHBvcnQgdGhlIGluc3RydWN0aW9uIHNldCByZXF1aXJlZCBieSBTU0U0LCB3aGlsZQotICAgICMgT3B1cyBzdGlsbCB0cmllcyB0byBidWlsZCBhbGwgU1NFIGNvZGUgaW4gZm9yIHJ1biB0aW1lIHNlbGVjdGlvbiwgY2F1c2luZwotICAgICMgYnVpbGQgZXJyb3JzLiBFeGNsdWRlIGFsbCBTU0UtcmVsYXRlZCBjb2RlLgotICAgICdzYl9kaXNhYmxlX29wdXNfc3NlJzogMSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnYW5kcm9pZC14ODZfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdhbmRyb2lkLXg4Nl9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdhbmRyb2lkLXg4Nl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdhbmRyb2lkLXg4Nl9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdhbmRyb2lkLXg4Nl9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCAxMGJkNzUyLi5hNzgxZjNiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC94ODYvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQveDg2L2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNCw0NCArMTQsNyBAQAogIiIiU3RhcmJvYXJkIEFuZHJvaWQgeDg2IHBsYXRmb3JtIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIiIiCiAKIGZyb20gc3RhcmJvYXJkLmFuZHJvaWQuc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBzaGFyZWRfY29uZmlndXJhdGlvbgotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKIAogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIEFuZHJvaWR4ODZDb25maWd1cmF0aW9uKAotICAgICAgJ2FuZHJvaWQteDg2JywKLSAgICAgICd4ODYnLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL3g4Ni9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nKQotCi0KLWNsYXNzIEFuZHJvaWR4ODZDb25maWd1cmF0aW9uKHNoYXJlZF9jb25maWd1cmF0aW9uLkFuZHJvaWRDb25maWd1cmF0aW9uKToKLQotICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6Ci0gICAgZmlsdGVycyA9IHN1cGVyKEFuZHJvaWR4ODZDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgotICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQotICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQKLSAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQotICAgICAgJ25wbGInOiBbCi0gICAgICAgICAgJ1NiQWNjZXNzaWJpbGl0eVRlc3QuQ2FsbFNldENhcHRpb25zRW5hYmxlZCcsCi0gICAgICAgICAgJ1NiQWNjZXNzaWJpbGl0eVRlc3QuR2V0Q2FwdGlvblNldHRpbmdzUmV0dXJuSXNWYWxpZCcsCi0gICAgICAgICAgJ1NiQXVkaW9TaW5rVGVzdC4qJywKLSAgICAgICAgICAnU2JNZWRpYUNhblBsYXlNaW1lQW5kS2V5U3lzdGVtLionLAotICAgICAgICAgICdTYk1pY3JvcGhvbmVDbG9zZVRlc3QuKicsCi0gICAgICAgICAgJ1NiTWljcm9waG9uZU9wZW5UZXN0LionLAotICAgICAgICAgICdTYk1pY3JvcGhvbmVSZWFkVGVzdC4qJywKLSAgICAgICAgICAnU2JQbGF5ZXJXcml0ZVNhbXBsZVRlc3RzL1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0LionLAotICAgICAgICAgICdTYk1lZGlhU2V0QXVkaW9Xcml0ZUR1cmF0aW9uVGVzdHMvU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3QnCi0gICAgICAgICAgJy5Xcml0ZUNvbnRpbnVlZExpbWl0ZWRJbnB1dC8qJywKLSAgICAgICAgICAnU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3RzL1NiTWVkaWFTZXRBdWRpb1dyaXRlRHVyYXRpb25UZXN0JwotICAgICAgICAgICcuV3JpdGVMaW1pdGVkSW5wdXQvKicsCi0gICAgICBdLAotICAgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnOiBbCi0gICAgICAgICAgJ0F1ZGlvRGVjb2RlclRlc3RzLyonLAotICAgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy8qJywKLQotICAgICAgICAgICdQbGF5ZXJDb21wb25lbnRzVGVzdHMvKicsCi0gICAgICBdLAotICB9CisgIHJldHVybiBzaGFyZWRfY29uZmlndXJhdGlvbi5BbmRyb2lkQ29uZmlndXJhdGlvbignYW5kcm9pZC14ODYnKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2FuZHJvaWQveDg2L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvYW5kcm9pZC94ODYvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U0Y2RjMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYW5kcm9pZC94ODYvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbICcuLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGknIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYW5kcm9pZC94ODYvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2Y1NWEzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsgJy4uL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvYW5kcm9pZC94ODYvdGVzdF9maWx0ZXJzLnB5CmluZGV4IGE1MTA1MTYuLmMzM2U2Y2YgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni90ZXN0X2ZpbHRlcnMucHkKKysrIGIvc3RhcmJvYXJkL2FuZHJvaWQveDg2L3Rlc3RfZmlsdGVycy5weQpAQCAtMTYsNiArMTYsMjkgQEAKIGZyb20gc3RhcmJvYXJkLmFuZHJvaWQuc2hhcmVkIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgc2hhcmVkX3Rlc3RfZmlsdGVycwogZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKIAorIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQKK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAnbnBsYic6IFsKKyAgICAgICAgJ1NiQWNjZXNzaWJpbGl0eVRlc3QuQ2FsbFNldENhcHRpb25zRW5hYmxlZCcsCisgICAgICAgICdTYkFjY2Vzc2liaWxpdHlUZXN0LkdldENhcHRpb25TZXR0aW5nc1JldHVybklzVmFsaWQnLAorICAgICAgICAnU2JBdWRpb1NpbmtUZXN0LionLAorICAgICAgICAnU2JNZWRpYUNhblBsYXlNaW1lQW5kS2V5U3lzdGVtLionLAorICAgICAgICAnU2JNaWNyb3Bob25lQ2xvc2VUZXN0LionLAorICAgICAgICAnU2JNaWNyb3Bob25lT3BlblRlc3QuKicsCisgICAgICAgICdTYk1pY3JvcGhvbmVSZWFkVGVzdC4qJywKKyAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cy9TYlBsYXllcldyaXRlU2FtcGxlVGVzdC4qJywKKyAgICAgICAgKCdTYk1lZGlhU2V0QXVkaW9Xcml0ZUR1cmF0aW9uVGVzdHMvU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3QnCisgICAgICAgICAnLldyaXRlQ29udGludWVkTGltaXRlZElucHV0LyonKSwKKyAgICAgICAgKCdTYk1lZGlhU2V0QXVkaW9Xcml0ZUR1cmF0aW9uVGVzdHMvU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3QnCisgICAgICAgICAnLldyaXRlTGltaXRlZElucHV0LyonKSwKKyAgICBdLAorICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWworICAgICAgICAnQXVkaW9EZWNvZGVyVGVzdHMvKicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy8qJywKKyAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy8qJywKKyAgICBdLAorfQorCiAKIGRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgogICByZXR1cm4gQW5kcm9pZFg4NlRlc3RGaWx0ZXJzKCkKQEAgLTI2LDI5ICs0OSw2IEBACiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBzdXBlcihBbmRyb2lkWDg2VGVzdEZpbHRlcnMsIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9GSUxURVJFRF9URVNUUy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBfRklMVEVSRURfVEVTVFMuaXRlbXMoKToKICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKICAgICByZXR1cm4gZmlsdGVycwotCi0gICMgQSBtYXAgb2YgZmFpbGluZyBvciBjcmFzaGluZyB0ZXN0cyBwZXIgdGFyZ2V0Ci0gIF9GSUxURVJFRF9URVNUUyA9IHsKLSAgICAgICducGxiJzogWwotICAgICAgICAgICdTYkFjY2Vzc2liaWxpdHlUZXN0LkNhbGxTZXRDYXB0aW9uc0VuYWJsZWQnLAotICAgICAgICAgICdTYkFjY2Vzc2liaWxpdHlUZXN0LkdldENhcHRpb25TZXR0aW5nc1JldHVybklzVmFsaWQnLAotICAgICAgICAgICdTYkF1ZGlvU2lua1Rlc3QuKicsCi0gICAgICAgICAgJ1NiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbS4qJywKLSAgICAgICAgICAnU2JNaWNyb3Bob25lQ2xvc2VUZXN0LionLAotICAgICAgICAgICdTYk1pY3JvcGhvbmVPcGVuVGVzdC4qJywKLSAgICAgICAgICAnU2JNaWNyb3Bob25lUmVhZFRlc3QuKicsCi0gICAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cy9TYlBsYXllcldyaXRlU2FtcGxlVGVzdC4qJywKLSAgICAgICAgICAnU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3RzL1NiTWVkaWFTZXRBdWRpb1dyaXRlRHVyYXRpb25UZXN0JwotICAgICAgICAgICcuV3JpdGVDb250aW51ZWRMaW1pdGVkSW5wdXQvKicsCi0gICAgICAgICAgJ1NiTWVkaWFTZXRBdWRpb1dyaXRlRHVyYXRpb25UZXN0cy9TYk1lZGlhU2V0QXVkaW9Xcml0ZUR1cmF0aW9uVGVzdCcKLSAgICAgICAgICAnLldyaXRlTGltaXRlZElucHV0LyonLAotICAgICAgXSwKLSAgICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWwotICAgICAgICAgICdBdWRpb0RlY29kZXJUZXN0cy8qJywKLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvKicsCi0gICAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy8qJywKLSAgICAgIF0sCi0gIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvYW5kcm9pZC94ODYvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDE2NjU1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9hbmRyb2lkL3g4Ni90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvYW5kcm9pZC9zaGFyZWQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2F1ZGlvX3NpbmsuaCBiL3N0YXJib2FyZC9hdWRpb19zaW5rLmgKaW5kZXggYWU1ZDlkNy4uN2Q2Yzc5NCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2F1ZGlvX3NpbmsuaAorKysgYi9zdGFyYm9hcmQvYXVkaW9fc2luay5oCkBAIC02MywxNyArNjMsOCBAQAogCiAvLyBDYWxsYmFjayB1c2VkIHRvIHJlcG9ydCBmcmFtZXMgY29uc3VtZWQuICBUaGUgY29uc3VtZWQgZnJhbWVzIHdpbGwgYmUKIC8vIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlIGZyYW1lIGJ1ZmZlciB0byBmcmVlIHNwYWNlIGZvciBuZXcgYXVkaW8gZnJhbWVzLgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIHR5cGVkZWYgdm9pZCAoKlNiQXVkaW9TaW5rQ29uc3VtZUZyYW1lc0Z1bmMpKGludCBmcmFtZXNfY29uc3VtZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0KTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gIDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLS8vIFdoZW4gfGZyYW1lc19jb25zdW1lZHwgaXMgdXBkYXRlZCBhc3luY2hub3VzbHkgYW5kIHRoZSBsYXN0IHRpbWUgdGhhdCBpdCBoYXMKLS8vIGJlZW4gdXBkYXRlZCBpcyBrbm93biwgaXQgY2FuIGJlIHBhc3NlZCBpbiB8ZnJhbWVzX2NvbnN1bWVkX2F0fCBzbyB0aGUgYXVkaW8KLS8vIHRpbWUgY2FsY3VsYXRpbmcgY2FuIGJlIG1vcmUgYWNjdXJhdGUuCi10eXBlZGVmIHZvaWQgKCpTYkF1ZGlvU2lua0NvbnN1bWVGcmFtZXNGdW5jKShpbnQgZnJhbWVzX2NvbnN1bWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAgMTIgfHwgIVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQogCiAvLyBXZWxsLWRlZmluZWQgdmFsdWUgZm9yIGFuIGludmFsaWQgYXVkaW8gc2luay4KICNkZWZpbmUga1NiQXVkaW9TaW5rSW52YWxpZCAoKFNiQXVkaW9TaW5rKU5VTEwpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYmVuY2htYXJrL2JlbmNobWFyay5neXAgYi9zdGFyYm9hcmQvYmVuY2htYXJrL2JlbmNobWFyay5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNjI2YTIuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2JlbmNobWFyay9iZW5jaG1hcmsuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2JlbmNobWFyaycsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhpcyBhbGxvd3MgdGhlIGJlbmNobWFya3MgdG8gaW5jbHVkZSBpbnRlcm5hbCBvbmx5IGhlYWRlciBmaWxlcy4KLSAgICAgICAgJ1NUQVJCT0FSRF9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYmVuY2htYXJrL21lbW9yeV9iZW5jaG1hcmsuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2JlbmNobWFyay90aHJlYWRfYmVuY2htYXJrLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vYmVuY2htYXJrX21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZ29vZ2xlX2JlbmNobWFyay9nb29nbGVfYmVuY2htYXJrLmd5cDpnb29nbGVfYmVuY2htYXJrJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYmVuY2htYXJrX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdiZW5jaG1hcmsnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnYmVuY2htYXJrJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9fZW52LnB5IGIvc3RhcmJvYXJkL2J1aWxkL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWltcG9ydCBzeXMKLQotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2Jhc2VfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2J1aWxkL2Jhc2VfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI4ZjgzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9iYXNlX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQzNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlLCBQTEVBU0UgUkVNRU1CRVIgVE8gVVBEQVRFCi0jIC8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9iYXNlLmduaSBBUyBXRUxMCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBUaGlzIGNvbnRhaW5zIHRoZSBkZWZhdWx0cyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgYWxsIFN0YXJib2FyZC1kZWZpbmVkIEdZUAotIyB2YXJpYWJsZXMuIEFwcGxpY2F0aW9ucyB0aGF0IGJ1aWxkIG9uIHRvcCBvZiBTdGFyYm9hcmQgYXJlIGxpa2VseSB0byBoYXZlCi0jIHRoZWlyIG93biBiYXNlIGNvbmZpZ3VyYXRpb24sIGFzIHdlbGwuCi0jCi0jIHN0YXJib2FyZC9idWlsZC9neXBfcnVubmVyIGluY2x1ZGVzIHRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGluIGFsbCAuZ3lwIGZpbGVzCi0jIHRoYXQgaXQgcHJvY2Vzc2VzLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBXZSBuZWVkIHRvIGRlZmluZSBzb21lIHZhcmlhYmxlcyBpbnNpZGUgb2YgYW4gaW5uZXIgJ3ZhcmlhYmxlcycgc2NvcGUKLSAgICAjIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBvdXRlciB2YXJpYWJsZXMgaGVyZS4gIEFsc28sIGl0Ci0gICAgIyBhbGxvd3MgZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGRlZmF1bHQgdmFsdWVzIHRoYXQgZ2V0IHJlZmVyZW5jZWQgYnkKLSAgICAjIGEgdG9wIGxldmVsIHNjb3BlLgotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnc2JfZW5hYmxlX2xpYiUnOiAwLAotICAgICAgIyBUT0RPOiBSZW1vdmUgdGhlICJkYXRhIiBzdWJkaXJlY3RvcnkuCi0gICAgICAnc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpciUnOiAnPChQUk9EVUNUX0RJUikvY29udGVudC9kYXRhJywKLSAgICAgICdzYl9kZXBsb3lfb3V0cHV0X2RpciUnOiAnPChQUk9EVUNUX0RJUikvZGVwbG95JywKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZSUnOiAwLAotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpYnVud2luZCUnOiAwLAotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpdGUlJzogMCwKLSAgICB9LAotCi0gICAgIyBFbmFibGVzIHRoZSB5YXNtIGNvbXBpbGVyIHRvIGJlIHVzZWQgdG8gY29tcGlsZSAuYXNtIGZpbGVzLgotICAgICd5YXNtX2V4aXN0cyUnOiAwLAotCi0gICAgIyBXaGVyZSB5YXNtIGNhbiBiZSBmb3VuZCBvbiB0aGUgdGFyZ2V0IGRldmljZS4KLSAgICAncGF0aF90b195YXNtJSc6ICJ5YXNtIiwKLQotICAgICMgVGhlIFN0YXJib2FyZCBBUEkgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiBUaGUgZGVmYXVsdAotICAgICMgdmFsdWUgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIFN0YXJib2FyZCBBQkkgZmlsZS4KLSAgICAnc2JfYXBpX3ZlcnNpb24lJzogMCwKLQotICAgICMgRW5hYmxpbmcgdGhpcyB2YXJpYWJsZSBlbmFibGVzIHBlZGFudGljIGxldmVscyBvZiB3YXJuaW5ncyBmb3IgdGhlIGN1cnJlbnQKLSAgICAjIHRvb2xjaGFpbi4KLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MlJzogMCwKLQotICAgICMgRW5hYmxlcyBlbWJlZGRpbmcgQ29iYWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkgd2l0aGluIGFub3RoZXIgYXBwLiBUaGlzCi0gICAgIyByZXF1aXJlcyBhICdsaWInIHN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcGxhdGZvcm0uCi0gICAgJ3NiX2VuYWJsZV9saWIlJzogJzwoc2JfZW5hYmxlX2xpYiknLAotCi0gICAgIyBEaXNhYmxlcyBhbiBOUExCIGF1ZGl0IG9mIEMrKzE3IHN1cHBvcnQuCi0gICAgJ3NiX2Rpc2FibGVfY3BwMTdfYXVkaXQnOiAwLAotCi0gICAgIyBXaGVuIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZSB3ZWIgYmluZGluZ3MgZm9yIHRoZSBtaWNyb3Bob25lCi0gICAgIyBhcmUgZGlzYWJsZWQKLSAgICAnc2JfZGlzYWJsZV9taWNyb3Bob25lX2lkbCUnOiAwLAotCi0gICAgIyBEaXJlY3RvcnkgcGF0aCB0byBzdGF0aWMgY29udGVudHMnIGRhdGEuCi0gICAgJ3NiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIlJzogJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpciknLAotCi0gICAgIyBUb3AtbGV2ZWwgZGlyZWN0b3J5IGZvciBzdGFnaW5nIGRlcGxveSBidWlsZCBvdXRwdXQuIFBsYXRmb3JtIGRlcGxveQotICAgICMgYWN0aW9ucyBzaG91bGQgdXNlIDwodGFyZ2V0X2RlcGxveV9kaXIpIGRlZmluZWQgaW4gZGVwbG95Lmd5cGkgdG8gcGxhY2UKLSAgICAjIGFydGlmYWN0cyBmb3IgZWFjaCBkZXBsb3kgdGFyZ2V0IGluIGl0cyBvd24gc3ViZGlyZWN0b3kuCi0gICAgJ3NiX2RlcGxveV9vdXRwdXRfZGlyJSc6ICc8KHNiX2RlcGxveV9vdXRwdXRfZGlyKScsCi0KLSAgICAjIENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBob3N0aW5nIE9TLiBUaGUgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgZ3lwCi0gICAgIyB3cmFwcGVyIHNjcmlwdC4KLSAgICAnaG9zdF9vcyUnOiAnd2luJywKLQotICAgICMgVGhlIHRhcmdldCBwbGF0Zm9ybSBpZCBhcyBhIHN0cmluZywgbGlrZSAnbGludXgteDY0eDExJywgJ3dpbjMyJywgZXRjLi4KLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJycsCi0KLSAgICAjIFdoZXRoZXIgdGhpcyBpcyBhbiBldmVyZ3JlZW4gYnVpbGQuCi0gICAgJ3NiX2V2ZXJncmVlbic6IDAsCi0KLSAgICAjIFdoZXRoZXIgdGhpcyBpcyBhbiBldmVyZ3JlZW4gY29tcGF0aWJsZSBwbGF0Zm9ybS4gQSBjb21wYXRpYmxlIHBsYXRmb3JtCi0gICAgIyBjYW4gcnVuIHRoZSBlbGZfbG9hZGVyIGFuZCBsYXVuY2ggdGhlIGV2ZXJncmVlbiBidWlsZC4KLSAgICAnc2JfZXZlcmdyZWVuX2NvbXBhdGlibGUlJzogJzwoc2JfZXZlcmdyZWVuX2NvbXBhdGlibGUpJywKLQotICAgICMgV2hldGhlciB0byB1c2UgdGhlIGxpYnVud2luZCBsaWJyYXJ5IG9uIGV2ZXJncmVlbiBjb21wYXRpYmxlIHBsYXRmb3JtLgotICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQlJzogJzwoc2JfZXZlcmdyZWVuX2NvbXBhdGlibGVfbGlidW53aW5kKScsCi0KLSAgICAjIFdoZXRoZXIgdG8gYWRvcHQgRXZlcmdyZWVuIExpdGUgb24gdGhlIGV2ZXJncmVlbiBjb21wYXRpYmxlIHBsYXRmb3JtLgotICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saXRlJSc6ICc8KHNiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpdGUpJywKLQotICAgICMgVGhlIG9wZXJhdGluZyBzeXN0ZW0gb2YgdGhlIHRhcmdldCwgc2VwYXJhdGUgZnJvbSB0aGUgdGFyZ2V0X2FyY2guIEluIG1hbnkKLSAgICAjIGNhc2VzLCBhbiAndW5rbm93bicgdmFsdWUgaXMgZmluZSwgYnV0LCBpZiBzZXQgdG8gJ2xpbnV4JywgdGhlbiB3ZSBjYW4KLSAgICAjIGFzc3VtZSBzb21lIHRoaW5ncywgYW5kIGl0J2xsIHNhdmUgdXMgc29tZSBjb25maWd1cmF0aW9uIHRpbWUuCi0gICAgJ3RhcmdldF9vcyUnOiAndW5rbm93bicsCi0KLSAgICAjIFRoZSB2YXJpYWJsZXMgYWxsb3cgY2hhbmdpbmcgdGhlIHRhcmdldCB0eXBlIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUKLSAgICAjIG5hdGl2ZSBjb2RlIG1heSByZXF1aXJlIGFuIGFkZGl0aW9uYWwgcGFja2FnaW5nIHN0ZXAgKGV4LiBBbmRyb2lkKS4KLSAgICAnZ3Rlc3RfdGFyZ2V0X3R5cGUlJzogJ2V4ZWN1dGFibGUnLAotICAgICdmaW5hbF9leGVjdXRhYmxlX3R5cGUlJzogJ2V4ZWN1dGFibGUnLAotCi0gICAgIyBIYWx0IGV4ZWN1dGlvbiBvbiBmYWlsdXJlIHRvIGFsbG9jYXRlIG1lbW9yeS4KLSAgICAnYWJvcnRfb25fYWxsb2NhdGlvbl9mYWlsdXJlJSc6IDEsCi0KLSAgICAjIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gc3JjLyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCi0gICAgIyBzdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGZpbGUuICBJdCBpcyBjdXJyZW50bHkgc2V0IHRvCi0gICAgIyAnc3RhcmJvYXJkLzwodGFyZ2V0X2FyY2gpJyB0byBtYWtlIHNlbWktc3RhcmJvYXJkIHBsYXRmb3JtcyB3b3JrLgotICAgICMgVE9ETzogU2V0IHRoZSBkZWZhdWx0IHZhbHVlIHRvICcnIG9uY2UgYWxsIHNlbWktc3RhcmJvYXJkIHBsYXRmb3JtcyBhcmUKLSAgICAjIG1vdmVkIHRvIHN0YXJib2FyZC4KLSAgICAnc3RhcmJvYXJkX3BhdGglJzogJ3N0YXJib2FyZC88KHRhcmdldF9hcmNoKScsCi0KLSAgICAjIFRoZSBzb3VyY2Ugb2YgRUdMIGFuZCBHTEVTIGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KLSAgICAjIFZhbGlkIHZhbHVlcyAoY2FzZSBhbmQgZXZlcnl0aGluZyBzZW5zaXRpdmUhKToKLSAgICAjICAgJ25vbmUnICAgLSBObyBFR0wgKyBHTEVTIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtLgotICAgICMgICAnc3lzdGVtX2dsZXMzJyAtIERlcHJlY2F0ZWQuIFVzZSBzeXN0ZW1fZ2xlczIgaW5zdGVhZC4KLSAgICAjICAgICAgICAgICAgICAgICAgICBVc2UgdGhlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBvZiBFR0wgKyBHTEVTMy4gVGhlCi0gICAgIyAgICAgICAgICAgICAgICAgICAgaGVhZGVycyBhbmQgbGlicmFyaWVzIG11c3QgYmUgb24gdGhlIHN5c3RlbSBpbmNsdWRlIGFuZAotICAgICMgICAgICAgICAgICAgICAgICAgIGxpbmsgcGF0aHMuCi0gICAgIyAgICdzeXN0ZW1fZ2xlczInIC0gVXNlIHRoZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gb2YgRUdMICsgR0xFUzIuIFRoZQotICAgICMgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgYW5kIGxpYnJhcmllcyBtdXN0IGJlIG9uIHRoZSBzeXN0ZW0gaW5jbHVkZSBhbmQKLSAgICAjICAgICAgICAgICAgICAgICAgICBsaW5rIHBhdGhzLgotICAgICMgICAnZ2xpbXAnICAtIENvYmFsdCdzIG93biBFR0wgKyBHTEVTMiBpbXBsZW1lbnRhdGlvbi4gVGhpcyByZXF1aXJlcyBhCi0gICAgIyAgICAgICAgICAgICAgdmFsaWQgR2xpbXAgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBwbGF0Zm9ybS4KLSAgICAjICAgJ2FuZ2xlJyAgLSBBIERpcmVjdFgtdG8tT3BlbkdMIGFkYXB0YXRpb24gbGF5ZXIuIFRoaXMgcmVxdWlyZXMgYSB2YWxpZAotICAgICMgICAgICAgICAgICAgIEFOR0xFIGltcGxlbWVudGF0aW9uIGZvciB0aGUgcGxhdGZvcm0uCi0gICAgIyBDaG9vc2luZyBhbiB1bnN1cHBvcnRlZCB2YWx1ZSB3aWxsIHJlc3VsdCBpbiBhIEdZUCBlcnJvcjoKLSAgICAjICAgImNvYmFsdC9yZW5kZXJlci9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzXzxnbF90eXBlPi5neXAgbm90IGZvdW5kIgotICAgICdnbF90eXBlJSc6ICdzeXN0ZW1fZ2xlczInLAotCi0gICAgIyBUZW1wb3JhcnkgaW5kaWNhdG9yIGZvciBUaXplbiAtIHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8gZmVhdHVyZSBkZWZpbmVzLgotICAgICd0aXplbl9vcyUnOiAwLAotCi0gICAgIyBUaGUgZXZlbnQgcG9sbGluZyBtZWNoYW5pc20gYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0gdG8gc3VwcG9ydCBsaWJldmVudC4KLSAgICAjIFBsYXRmb3JtcyBtYXkgcmVkZWZpbmUgdG8gJ3BvbGwnIGlmIG5lY2Vzc2FyeS4KLSAgICAjIE90aGVyIG1lY2hhbmlzbXMsIGUuZy4gZGV2cG9sbCwga3F1ZXVlLCBzZWxlY3QsIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4KLSAgICAnc2JfbGliZXZlbnRfbWV0aG9kJSc6ICdlcG9sbCcsCi0KLSAgICAjIFVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGxheWVyIGlzIGZpbHRlciBiYXNlZC4KLSAgICAnc2JfZmlsdGVyX2Jhc2VkX3BsYXllciUnOiAxLAotCi0gICAgIyBVc2VkIHRvIGVuYWJsZSBiZW5jaG1hcmtzLgotICAgICdzYl9lbmFibGVfYmVuY2htYXJrJSc6IDAsCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgZGljdGF0ZXMgd2hldGhlciBhIGdpdmVuIGd5cCB0YXJnZXQgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGgKLSAgICAjIG9wdGltaXphdGlvbiBmbGFncyBmb3Igc2l6ZSB2cy4gc3BlZWQuCi0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQlJzogMCwKLQotICAgICMgQ29tcGlsZXIgY29uZmlndXJhdGlvbi4KLQotICAgICMgVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gc3BlY2lmeSBjb21waWxlciBhbmQgbGlua2VyCi0gICAgIyBmbGFncyBieSBidWlsZCBjb25maWd1cmF0aW9uLiBQbGF0Zm9ybSBzcGVjaWZpYyAuZ3lwaSBpbmNsdWRlcyBhbmQKLSAgICAjIC5neXAgdGFyZ2V0cyBjYW4gdXNlIHRoZW0gdG8gYWRkIGFkZGl0aW9uYWwgZmxhZ3MuCi0KLSAgICAnY29tcGlsZXJfZmxhZ3MlJzogW10sCi0gICAgJ2xpbmtlcl9mbGFncyUnOiBbXSwKLQotICAgICMgVE9ETzogUmVwbGFjZSBsaW5rZXJfZmxhZ3NfKGNvbmZpZykgd2l0aCBsaW5rZXJfc2hhcmVkX2ZsYWdzXyhjb25maWcpCi0gICAgIyBhbmQgbGlua2VyX2V4ZWN1dGFibGVfZmxhZ3NfKGNvbmZpZykgdG8gZGlzdGluZ3Vpc2ggdGhlIGZsYWdzIGZvcgotICAgICMgU2hhcmVkTGlicmFyeUxpbmtlciBhbmQgRXhlY3V0YWJsZUxpbmtlci4KLSAgICAnY29tcGlsZXJfZmxhZ3NfZGVidWclJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NfZGVidWclJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NjX2RlYnVnJSc6IFtdLAotICAgICdsaW5rZXJfZmxhZ3NfZGVidWclJzogW10sCi0gICAgJ2RlZmluZXNfZGVidWclJzogW10sCi0KLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NfZGV2ZWwlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NjX2RldmVsJSc6IFtdLAotICAgICdsaW5rZXJfZmxhZ3NfZGV2ZWwlJzogW10sCi0gICAgJ2RlZmluZXNfZGV2ZWwlJzogW10sCi0KLSAgICAjIEZvciBxYSBhbmQgZ29sZCBjb25maWdzLCBkaWZmZXJlbnQgY29tcGlsZXIgZmxhZ3MgbWF5IGJlIHNwZWNpZmllZCBmb3IKLSAgICAjIGd5cCB0YXJnZXRzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGZvciBzaXplIHRoYW4gZm9yIHNwZWVkLiBUYXJnZXRzIHdoaWNoCi0gICAgIyBzcGVjaWZ5ICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkID09IDEnLCB3aWxsIGNvbXBpbGUgd2l0aCBmbGFnczoKLSAgICAjICAgWydjb21waWxlcl9mbGFnc18qPGNvbmZpZz4nLCAnY29tcGlsZXJfZmxhZ3NfKjxjb25maWc+X3NwZWVkJ10uCi0gICAgIyBPdGhlcndpc2UsIHRhcmdldHMgd2lsbCB1c2UgY29tcGlsZXIgZmxhZ3M6Ci0gICAgIyAgIFsnY29tcGlsZXJfZmxhZ3NfKjxjb25maWc+JywgJ2NvbXBpbGVyX2ZsYWdzXyo8Y29uZmlnPl9zaXplJ10uCi0gICAgIyBQbGF0Zm9ybXMgbWF5IGRlY2lkZSB0byB1c2UgdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZsYWdzIGZvciBib3RoCi0gICAgIyB0YXJnZXQgdHlwZXMgYnkgbGVhdmluZyB0aGUgJypfc2l6ZScgYW5kICcqX3NwZWVkJyB2YXJpYWJsZXMgZW1wdHkuCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19xYV9zaXplJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19xYV9zcGVlZCUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY19xYSUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY19xYV9zaXplJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19jX3FhX3NwZWVkJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19jY19xYSUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfcWFfc2l6ZSUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfcWFfc3BlZWQlJzogW10sCi0gICAgJ2xpbmtlcl9mbGFnc19xYSUnOiBbXSwKLSAgICAnZGVmaW5lc19xYSUnOiBbXSwKLQotICAgICdjb21waWxlcl9mbGFnc19nb2xkJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkX3NpemUlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGRfc3BlZWQlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NfZ29sZCUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY19nb2xkX3NpemUlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NfZ29sZF9zcGVlZCUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfZ29sZCUnOiBbXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfZ29sZF9zaXplJSc6IFtdLAotICAgICdjb21waWxlcl9mbGFnc19jY19nb2xkX3NwZWVkJSc6IFtdLAotICAgICdsaW5rZXJfZmxhZ3NfZ29sZCUnOiBbXSwKLSAgICAnZGVmaW5lc19nb2xkJSc6IFtdLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2hvc3QlJzogW10sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NfaG9zdCUnOiBbXSwKLSAgICAnZGVmaW5lc19ob3N0JSc6IFtdLAotCi0gICAgJ3BsYXRmb3JtX2xpYnJhcmllcyUnOiBbXSwKLQotICAgICMgVE9ETzogUmVtb3ZlIHRoZXNlIGNvbXBhdGliaWxpdHkgdmFyaWFibGVzIGZyb20gU3RhcmJvYXJkLgotCi0gICAgIyBMaXN0IG9mIHBsYXRmb3JtLXNwZWNpZmljIHRhcmdldHMgdGhhdCBnZXQgY29tcGlsZWQgaW50byBjb2JhbHQuCi0gICAgJ2NvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMlJzogW10sCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnaG9zdF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd0YXJnZXRfYXJjaD09ImFybSIgb3IgdGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAgICAgIyBBbGwgdGhlIDMyIGJpdCBDUFUgYXJjaGl0ZWN0dXJlcyB2OCBzdXBwb3J0cy4KLSAgICAgICAgICAgICdjb21waWxlcl9mbGFnc19jY19ob3N0JSc6IFsKLSAgICAgICAgICAgICAgJy1tMzInLAotICAgICAgICAgICAgICAnLS1zdGQ9Z251KysxNCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2hvc3QnOiBbCi0gICAgICAgICAgICAgICctbTMyJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29tcGlsZXJfZmxhZ3NfaG9zdCc6IFsKLSAgICAgICAgICAgICAgJy1tMzInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdsaW5rZXJfZmxhZ3NfaG9zdCUnOiBbCi0gICAgICAgICAgICAgICctdGFyZ2V0JywgJ2kzODYtdW5rbm93bi1saW51eC1nbnUnLAotICAgICAgICAgICAgICAnLXB0aHJlYWQnLAotICAgICAgICAgICAgICAnLWxhdG9taWMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAnY29tcGlsZXJfZmxhZ3NfY2NfaG9zdCUnOiBbCi0gICAgICAgICAgICAgICctLXN0ZD1nbnUrKzE0JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnbGlua2VyX2ZsYWdzX2hvc3QlJzogWwotICAgICAgICAgICAgJy1wdGhyZWFkJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFnc19jY19ob3N0JSc6IFtdLAotICAgICAgICAnbGlua2VyX2ZsYWdzX2hvc3QlJzogW10sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICMgVGhlIGNvbmRpdGlvbiB0aGF0IG9wZXJhdGVzIG9uIHNiX3BlZGFudGljX3dhcm5pbmdzIGlzIGluIGEKLSAgICAgICMgdGFyZ2V0X2NvbmRpdGlvbnMgc2VjdGlvbiwgYW5kIHdpbGwgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBkZWZhdWx0Ci0gICAgICAjIGZhbGxiYWNrIHZhbHVlIG9mIHNiX3BlZGFudGljX3dhcm5pbmdzIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLAotICAgICAgIyBvciB0byB0aGUgc2JfcGVkYW50aWNfd2FybmluZ3MgdmFyaWFibGUgcGxhY2VkIGF0IHRoZSByb290Ci0gICAgICAjIHZhcmlhYmxlcyBzY29wZSBvZiAuZ3lwIGZpbGVzLCBiZWNhdXNlIHRob3NlIHZhcmlhYmxlcyBhcmUgbm90IHNldCBhdAotICAgICAgIyB0YXJnZXQgc2NvcGUuICBBcyBhIHdvcmthcm91bmQsIGlmIHNiX3BlZGFudGljX3dhcm5pbmdzIGlzIG5vdAotICAgICAgIyBzZXQgYXQgdGFyZ2V0IHNjb3BlLCBkZWZpbmUgaXQgaW4gdGFyZ2V0IHNjb3BlIHRvIGNvbnRhaW4gd2hhdGV2ZXIKLSAgICAgICMgdmFsdWUgaXQgaGFzIGR1cmluZyBlYXJseSB2YXJpYWJsZSBleHBhbnNpb24uIFRoYXQncyBlbm91Z2ggdG8gbWFrZQotICAgICAgIyBpdCBhdmFpbGFibGUgZHVyaW5nIHRhcmdldCBjb25kaXRpb25hbCBwcm9jZXNzaW5nLgotICAgICAgJ3NiX3BlZGFudGljX3dhcm5pbmdzJSc6ICc8KHNiX3BlZGFudGljX3dhcm5pbmdzKScsCi0KLSAgICAgICMgVGhpcyB3b3JrYXJvdW5kIGlzIHVzZWQgdG8gc3VyZmFjZSB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgdmFyaWFibGUKLSAgICAgICMgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnIGlmIHRoZSBneXAgdGFyZ2V0IGRvZXMgbm90IGV4cGxpY2l0bHkgc2V0Ci0gICAgICAjIGl0LgotICAgICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQlJzogJzwob3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCknLAotICAgIH0sCi0gICAgJ2NmbGFncyc6IFsgJzxAKGNvbXBpbGVyX2ZsYWdzKScgXSwKLSAgICAnbGRmbGFncyc6IFsgJzxAKGxpbmtlcl9mbGFncyknIF0sCi0gICAgJ2NmbGFnc19ob3N0JzogWyAnPEAoY29tcGlsZXJfZmxhZ3NfaG9zdCknLCBdLAotICAgICdjZmxhZ3NfY19ob3N0JzogWyAnPEAoY29tcGlsZXJfZmxhZ3NfY19ob3N0KScsIF0sCi0gICAgJ2NmbGFnc19jY19ob3N0JzogWyAnPEAoY29tcGlsZXJfZmxhZ3NfY2NfaG9zdCknLCBdLAotICAgICdsZGZsYWdzX2hvc3QnOiBbICc8QChsaW5rZXJfZmxhZ3NfaG9zdCknIF0sCi0KLSAgICAjIEFsbG93cyBhbnkgc291cmNlIGZpbGUgdG8gaW5jbHVkZSBmaWxlcyByZWxhdGl2ZSB0byB0aGUgc291cmNlIHRyZWUuCi0gICAgJ2luY2x1ZGVfZGlycyc6IFsgJzwoREVQVEgpJyBdLAotICAgICdsaWJyYXJpZXMnOiBbICc8QChwbGF0Zm9ybV9saWJyYXJpZXMpJyBdLAotCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2ZpbmFsX2V4ZWN1dGFibGVfdHlwZT09InNoYXJlZF9saWJyYXJ5IicsIHsKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICMgUmV3cml0ZSBtYWluKCkgZnVuY3Rpb25zIGludG8gU3RhcmJvYXJkTWFpbi4gVE9ETzogVGhpcyBpcyBhCi0gICAgICAgICAgICAgICMgaGFjaywgaXQgd291bGQgYmUgYmV0dGVyIHRvIGJlIG1vcmUgc3VyZ2ljYWwsIGhlcmUuCi0gICAgICAgICAgICAgICdtYWluPVN0YXJib2FyZE1haW4nLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICMgVG8gbGluayBpbnRvIGEgc2hhcmVkIGxpYnJhcnkgb24gTGludXggYW5kIHNpbWlsYXIgcGxhdGZvcm1zLAotICAgICAgICAgICAgICAjIHRoZSBjb21waWxlciBtdXN0IGJlIHRvbGQgdG8gZ2VuZXJhdGUgUG9zaXRpb24gSW5kZXBlbmRlbnQgQ29kZS4KLSAgICAgICAgICAgICAgIyBUaGlzIGFwcGVhcnMgdG8gY2F1c2UgZXJyb3JzIHdoZW4gbGlua2luZyB0aGUgY29kZSBzdGF0aWNhbGx5LAotICAgICAgICAgICAgICAjIGhvd2V2ZXIuCi0gICAgICAgICAgICAgICctZlBJQycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ09TID09ICJzdGFyYm9hcmQiJywgewotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAjIEtlZXBzIGNvbW1vbiBTdGFyYm9hcmQgdGFyZ2V0IGNoYW5nZXMgaW4gdGhlIHN0YXJib2FyZCBwcm9qZWN0LgotICAgICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgICAnLi4vLi4vc3RhcmJvYXJkL3N0YXJib2FyZF9iYXNlX3RhcmdldC5neXBpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwgICMgT1MgPT0gInN0YXJib2FyZCIKLSAgICBdLAotCi0gICAgIyBUT0RPOiBSZXZpc2l0IGFuZCByZW1vdmUgdW51c2VkIGNvbmZpZ3VyYXRpb25zLgotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdkZWJ1Z19iYXNlJzogewotICAgICAgICAnYWJzdHJhY3QnOiAxLAotICAgICAgICAjIG5vIG9wdGltaXphdGlvbiwgaW5jbHVkZSBzeW1ib2xzOgotICAgICAgICAnY2ZsYWdzJzogWyAnPEAoY29tcGlsZXJfZmxhZ3NfZGVidWcpJyBdLAotICAgICAgICAnY2ZsYWdzX2MnOiBbICc8QChjb21waWxlcl9mbGFnc19jX2RlYnVnKScgXSwKLSAgICAgICAgJ2NmbGFnc19jYyc6IFsgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX2RlYnVnKScgXSwKLSAgICAgICAgJ2xkZmxhZ3MnOiBbICc8QChsaW5rZXJfZmxhZ3NfZGVidWcpJyBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnPEAoZGVmaW5lc19kZWJ1ZyknLAotICAgICAgICAgICdTVEFSQk9BUkRfQlVJTERfVFlQRV9ERUJVRycsCi0gICAgICAgICAgJ19ERUJVRycsCi0gICAgICAgIF0sCi0gICAgICB9LCAjIGVuZCBvZiBkZWJ1Z19iYXNlCi0gICAgICAnZGV2ZWxfYmFzZSc6IHsKLSAgICAgICAgJ2Fic3RyYWN0JzogMSwKLSAgICAgICAgIyBvcHRpbWl6ZSwgaW5jbHVkZSBzeW1ib2xzOgotICAgICAgICAnY2ZsYWdzJzogWyAnPEAoY29tcGlsZXJfZmxhZ3NfZGV2ZWwpJyBdLAotICAgICAgICAnY2ZsYWdzX2MnOiBbICc8QChjb21waWxlcl9mbGFnc19jX2RldmVsKScgXSwKLSAgICAgICAgJ2NmbGFnc19jYyc6IFsgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX2RldmVsKScgXSwKLSAgICAgICAgJ2xkZmxhZ3MnOiBbICc8QChsaW5rZXJfZmxhZ3NfZGV2ZWwpJyBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnPEAoZGVmaW5lc19kZXZlbCknLAotICAgICAgICAgICdTVEFSQk9BUkRfQlVJTERfVFlQRV9ERVZFTCcsCi0gICAgICAgICAgJ19ERUJVRycsCi0gICAgICAgIF0sCi0gICAgICB9LCAjIGVuZCBvZiBkZXZlbF9iYXNlCi0gICAgICAncWFfYmFzZSc6IHsKLSAgICAgICAgJ2Fic3RyYWN0JzogMSwKLSAgICAgICAgIyBvcHRpbWl6ZToKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZD09MScsIHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19xYSknLAotICAgICAgICAgICAgICAnPEAoY29tcGlsZXJfZmxhZ3NfcWFfc3BlZWQpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX3FhKScsCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX3FhX3NwZWVkKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX3FhKScsCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jY19xYV9zcGVlZCknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnPEAoY29tcGlsZXJfZmxhZ3NfcWEpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX3FhX3NpemUpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX3FhKScsCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX3FhX3NpemUpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgICAgICAgICAnPEAoY29tcGlsZXJfZmxhZ3NfY2NfcWEpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX3FhX3NpemUpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0KLSAgICAgICAgXSwKLSAgICAgICAgJ2xkZmxhZ3MnOiBbICc8QChsaW5rZXJfZmxhZ3NfcWEpJyBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnPEAoZGVmaW5lc19xYSknLAotICAgICAgICAgICdTVEFSQk9BUkRfQlVJTERfVFlQRV9RQScsCi0gICAgICAgICAgJ05ERUJVRycsCi0gICAgICAgIF0sCi0gICAgICB9LCAjIGVuZCBvZiBkZXZlbF9iYXNlCi0gICAgICAnZ29sZF9iYXNlJzogewotICAgICAgICAnYWJzdHJhY3QnOiAxLAotICAgICAgICAjIG9wdGltaXplOgotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkPT0xJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2dvbGQpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2dvbGRfc3BlZWQpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX2dvbGQpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NfZ29sZF9zcGVlZCknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jY19nb2xkKScsCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jY19nb2xkX3NwZWVkKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19nb2xkKScsCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19nb2xkX3NpemUpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAgICAgICAgICc8QChjb21waWxlcl9mbGFnc19jX2dvbGQpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NfZ29sZF9zaXplKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX2dvbGQpJywKLSAgICAgICAgICAgICAgJzxAKGNvbXBpbGVyX2ZsYWdzX2NjX2dvbGRfc2l6ZSknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XQotICAgICAgICBdLAotICAgICAgICAnbGRmbGFncyc6IFsgJzxAKGxpbmtlcl9mbGFnc19nb2xkKScgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJzxAKGRlZmluZXNfZ29sZCknLAotICAgICAgICAgICdTVEFSQk9BUkRfQlVJTERfVFlQRV9HT0xEJywKLSAgICAgICAgICAnTkRFQlVHJywKLSAgICAgICAgXSwKLSAgICAgIH0sICMgZW5kIG9mIGdvbGRfYmFzZQotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sICMgZW5kIG9mIHRhcmdldF9kZWZhdWx0cwotCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnY29iYWx0X2NvbmZpZyAhPSAiZ29sZCInLCB7Ci0gICAgICAndmFyaWFibGVzJyA6IHsKLSAgICAgICAgJ3NiX2FsbG93c19tZW1vcnlfdHJhY2tpbmcnOiAxLAotICAgICAgfSwKLSAgICB9LAotICAgIHsKLSAgICAgICd2YXJpYWJsZXMnIDogewotICAgICAgICAnc2JfYWxsb3dzX21lbW9yeV90cmFja2luZyc6IDAsCi0gICAgICB9LAotICAgIH1dLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2NsYW5nLnB5IGIvc3RhcmJvYXJkL2J1aWxkL2NsYW5nLnB5CmluZGV4IDVlMzVlZDAuLjU5ZjY0ZmMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9idWlsZC9jbGFuZy5weQorKysgYi9zdGFyYm9hcmQvYnVpbGQvY2xhbmcucHkKQEAgLTEzLDcgKzEzLDYgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAiIiJDYW5vbmljYWwgbG9jYXRpb24gZm9yIHRoZSBDbGFuZyBzcGVjaWZpY2F0aW9uLiIiIgogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBzdGFyYm9hcmQudG9vbHMuYnVpbGQgaW1wb3J0IENsYW5nU3BlY2lmaWNhdGlvbgogCiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGkgYi9zdGFyYm9hcmQvYnVpbGQvY29sbGVjdF9kZXBsb3lfY29udGVudC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTk1M2Y1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgaW50byBhIHBsYXRmb3JtIGRlcGxveSBneXBpIHRvIHByb3ZpZGUgYW4KLSMgYWN0aW9uIHRvIGNvbGxlY3Qgc3RhdGljIGNvbnRlbnQgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgd2l0aCBhIGdpdmVuIHRhcmdldC4KLSMKLSMgVGhlIGFjdGlvbiBidWlsZHMgYSBzeW1saW5rIGZhcm0gaW4gdGhlIGNvbnRlbnQvZGVwbG95LzxleGVjdXRhYmxlX25hbWU+Ci0jIGRpcmVjdG9yeSwgcG9pbnRpbmcgdG8gdGhlIHN1YnNldCBvZiBkYXRhIGluIGNvbnRlbnQvZGF0YSB0aGF0IHdhcyBwb3B1bGF0ZWQKLSMgYnkgc29tZSBkZXBlbmRlbmN5IG9mIHRoZSB0YXJnZXQgYmVpbmcgZGVwbG95ZWQuCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBSb290IG9mIHRoZSBjb250ZW50IHRyZWUgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgd2l0aCBhIGdpdmVuIHRhcmdldC4KLSAgICAnY29udGVudF9kZXBsb3lfZGlyJzogJzwodGFyZ2V0X2RlcGxveV9kaXIpL2NvbnRlbnQnLAotCi0gICAgIyBTdGFtcCBmaWxlIHRoYXQgd2lsbCBiZSB1cGRhdGVkIGFmdGVyIHRoZSBjb250ZW50IHN5bWxpbmsgZmFybSBpcyBidWlsdC4KLSAgICAnY29udGVudF9kZXBsb3lfc3RhbXBfZmlsZSc6ICc8KGNvbnRlbnRfZGVwbG95X2Rpcikuc3RhbXAnLAotCi0gICAgIyBUaGlzIGlzIGEgbGlzdCBvZiByZWxhdGl2ZSBwYXRocyB3aXRoaW4gYm90aCBpbnB1dF9kaXIgYW5kIG91dHB1dF9kaXIsCi0gICAgIyBhbmQgaXMgbmFtZWQgc3VjaCB0aGF0IEdZUCBkb2VzIG5vdCByZWxhdGl2aXplIGl0LiBWYWx1ZXMgYXJlIG1lcmdlZCBpbgotICAgICMgZnJvbSB0aGUgYWxsX2RlcGVuZGVudF9zZXR0aW5ncyBibG9ja3Mgb2YgZ3lwaSBmaWxlcyB0aGF0IGNvcHkgc3RhdGljIGRhdGEKLSAgICAjIGludG8gY29udGVudC9kYXRhLgotICAgICdjb250ZW50X2RlcGxveV9zdWJkaXJzJzogW10sCi0KLSAgICAjIFNvbWUgcGxhdGZvcm1zIHdpbGwgc3ltbGluayB0byBhIGZvbGRlciBjb250YWluaW5nIHJlbGF0aXZlIHN5bWxpbmtzLAotICAgICMgYW5kIHRoaXMgd2lsbCBjYXVzZSBhbiBpbnZhbGlkIHBhdGguIFRvIGdldCBhcm91bmQgdGhpcyB0aGVzZSBwbGF0Zm9ybXMKLSAgICAjIHNob3VsZCBzZXQgfGNvbnRlbnRfZGVwbG95X3VzZV9hYnNvbHV0ZV9zeW1saW5rc3wgdG8gMS4KLSAgICAnY29udGVudF9kZXBsb3lfdXNlX2Fic29sdXRlX3N5bWxpbmtzJSc6IDAsCi0KLSAgICAjIFNvbWUgcGxhdGZvcm1zIGNhbiBvbmx5IHN1cHBvcnQgYSBsaW1pdGVkIGRlcHRoIG9mIGRpcmVjdG9yeQotICAgICMgc3RydWN0dXJlLCBhbmQgdGhpcyBhbGxvd3MgdGhlIGRlcHRoIG9mIGRlcGxveSBjb250ZW50IHRvIGJlCi0gICAgIyBjaGVja2VkIG5vdCB0byBleGNlZWQgdGhhdC4KLSAgICAnY29udGVudF9kZXBsb3lfbWF4X2RlcHRoJSc6IDAsCi0KLSAgICAjIEltcGxlbWVudGF0aW9uIGRldGFpbCB0byBhZGQgY29uZGl0aW9uYWwgYXJncy4KLSAgICAnY29sbGVjdF9kZXBsb3lfY29udGVudF9leHRyYV9hcmdzJzogW10sCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnY29udGVudF9kZXBsb3lfdXNlX2Fic29sdXRlX3N5bWxpbmtzID09IDEnLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29sbGVjdF9kZXBsb3lfY29udGVudF9leHRyYV9hcmdzJzogWyAnLS11c2VfYWJzb2x1dGVfc3ltbGlua3MnIF0sCi0gICAgICB9Ci0gICAgfV0sCi0gICAgWydjb2JhbHRfZG9ja2VyX2J1aWxkID09IDEgYW5kIGhvc3Rfb3MgPT0gIndpbiIgYW5kIGNvYmFsdF9mYXN0YnVpbGQgIT0gMScsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb2xsZWN0X2RlcGxveV9jb250ZW50X2V4dHJhX2FyZ3MnOiBbICctLWNvcHlfb3ZlcnJpZGUnIF0sCi0gICAgICB9Ci0gICAgfV0sCi0gIF0sCi0gICdhY3Rpb25zJzogW3sKLSAgICAnYWN0aW9uX25hbWUnOiAnY29sbGVjdF9kZXBsb3lfY29udGVudCcsCi0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdpbnB1dF9kaXInOiAnPChzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyKScsCi0gICAgICAnb3V0cHV0X2Rpcic6ICc8KGNvbnRlbnRfZGVwbG95X2RpciknLAotICAgIH0sCi0gICAgIyBSZS1jb2xsZWN0IHRoZSBjb250ZW50IHdoZW5ldmVyIHRoZSBleGVjdXRhYmxlIGlzIHJlYnVpbHQsIGJ1dCB3YWl0IHVudGlsCi0gICAgIyBjbGVhbmluZyB0aGUgZGVwbG95IGRpciBpcyBkb25lLgotICAgICdpbnB1dHMnOiBbCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgICAnPCh0YXJnZXRfZGVwbG95X3N0YW1wX2ZpbGUpJywKLSAgICBdLAotICAgICdvdXRwdXRzJzogWyAnPChjb250ZW50X2RlcGxveV9zdGFtcF9maWxlKScgXSwKLSAgICAnYWN0aW9uJzogWwotICAgICAgJ3B5dGhvbjInLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50LnB5JywKLSAgICAgICctaScsICc8KGlucHV0X2RpciknLAotICAgICAgJy1vJywgJzwob3V0cHV0X2RpciknLAotICAgICAgJy1zJywgJzwoY29udGVudF9kZXBsb3lfc3RhbXBfZmlsZSknLAotICAgICAgJy0tbWF4X2RlcHRoJywgJzwoY29udGVudF9kZXBsb3lfbWF4X2RlcHRoKScsCi0gICAgICAnPEAoY29sbGVjdF9kZXBsb3lfY29udGVudF9leHRyYV9hcmdzKScsCi0gICAgICAnPkAoY29udGVudF9kZXBsb3lfc3ViZGlycyknLAotICAgIF0sCi0gICAgJ21lc3NhZ2UnOiAnQ29sbGVjdCBjb250ZW50OiA8KGNvbnRlbnRfZGVwbG95X2RpciknLAotICB9XSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50LnB5IGIvc3RhcmJvYXJkL2J1aWxkL2NvbGxlY3RfZGVwbG95X2NvbnRlbnQucHkKaW5kZXggM2I0Y2U3MS4uYjJmN2IxMCAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL2NvbGxlY3RfZGVwbG95X2NvbnRlbnQucHkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL2NvbGxlY3RfZGVwbG95X2NvbnRlbnQucHkKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwb3J0X3N5bWxpbmsKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBsb2dfbGV2ZWwKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9CVUlMRC5nbiBiL3N0YXJib2FyZC9idWlsZC9jb25maWcvQlVJTEQuZ24KaW5kZXggM2Y1ODViZi4uYWEwNmIxZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL0JVSUxELmduCkBAIC0yMiw2ICsyMiw3IEBACiAgICAgICAiU1RBUkJPQVJEX0JVSUxEX1RZUEVfREVCVUciLAogICAgICAgIkNPQkFMVF9CVUlMRF9UWVBFX0RFQlVHIiwKICAgICAgICJfREVCVUciLAorICAgICAgIkNPQkFMVF9MT0dHSU5HX0VOQUJMRUQiLAogICAgIF0KICAgfQogCkBAIC0zMCw2ICszMSw3IEBACiAgICAgICAiU1RBUkJPQVJEX0JVSUxEX1RZUEVfREVWRUwiLAogICAgICAgIkNPQkFMVF9CVUlMRF9UWVBFX0RFVkVMIiwKICAgICAgICJfREVCVUciLAorICAgICAgIkNPQkFMVF9MT0dHSU5HX0VOQUJMRUQiLAogICAgIF0KICAgfQogCkBAIC00Niw4ICs0OCwxNSBAQAogICAgICAgIlNUQVJCT0FSRF9CVUlMRF9UWVBFX0dPTEQiLAogICAgICAgIkNPQkFMVF9CVUlMRF9UWVBFX0dPTEQiLAogICAgICAgIk5ERUJVRyIsCisgICAgICAiT0ZGSUNJQUxfQlVJTEQiLAorICAgICAgIlRSQUNJTkdfRElTQUJMRUQiLAorICAgICAgIkNPQkFMVF9GT1JDRV9DU1AiLAogICAgIF0KICAgfQorCisgIGlmIChlbmFibGVfaW5fYXBwX2RpYWwpIHsKKyAgICBkZWZpbmVzICs9IFsgIkRJQUxfU0VSVkVSIiBdCisgIH0KIH0KIAogY29uZmlnKCJob3N0IikgewpAQCAtMTE0LDYgKzEyMyw3IEBACiAgICAgICAgICJFTkFCTEVfREVCVUdHRVIiLAogICAgICAgICAiRU5BQkxFX0RFQlVHX0NPTU1BTkRfTElORV9TV0lUQ0hFUyIsCiAgICAgICAgICJFTkFCTEVfVEVTVF9SVU5ORVIiLAorICAgICAgICAiRU5BQkxFX0lHTk9SRV9DRVJUSUZJQ0FURV9FUlJPUlMiLAogICAgICAgXQogICAgIH0KIApAQCAtMTQ4LDcgKzE1OCw2IEBACiAgICAgZGVmaW5lcyArPSBbCiAgICAgICAiU1RBUkJPQVJEX0FUT01JQ19JTkNMVURFPVwiJHN0YXJib2FyZF9wYXRoL2F0b21pY19wdWJsaWMuaFwiIiwKICAgICAgICJTVEFSQk9BUkRfQ09ORklHVVJBVElPTl9JTkNMVURFPVwiJHN0YXJib2FyZF9wYXRoL2NvbmZpZ3VyYXRpb25fcHVibGljLmhcIiIsCi0gICAgICAiU1RBUkJPQVJEX1RIUkVBRF9UWVBFU19JTkNMVURFPVwiJHN0YXJib2FyZF9wYXRoL3RocmVhZF90eXBlc19wdWJsaWMuaFwiIiwKICAgICBdCiAgIH0KIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvQlVJTERDT05GSUcuZ24gYi9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL0JVSUxEQ09ORklHLmduCmluZGV4IDllMTBmNWQuLjQxMDg2YzUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvQlVJTERDT05GSUcuZ24KKysrIGIvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9CVUlMRENPTkZJRy5nbgpAQCAtMjAsOCArMjAsNiBAQAogCiAgIGJ1aWxkX3R5cGUgPSAiZGV2ZWwiCiAKLSAgdGFyZ2V0X3BsYXRmb3JtID0gInN0dWIiCi0KICAgaXNfc3RhcmJvYXJkID0gdHJ1ZQogCiAgIGNvYmFsdF9mYXN0YnVpbGQgPSBnZXRlbnYoIklTX0NJIikgPT0gIjEiCkBAIC0yOSw2ICsyNyw4IEBACiAgIGlzX2ludGVybmFsX2J1aWxkID0gZ2V0ZW52KCJDT0JBTFRfVVNFX0lOVEVSTkFMX0JVSUxEIikgPT0gIjEiCiAKICAgaXNfZG9ja2VyX2J1aWxkID0gZ2V0ZW52KCJJU19ET0NLRVIiKSA9PSAiMSIKKworICB1c2luZ19vbGRfY29tcGlsZXIgPSBmYWxzZQogfQogCiBpc19kZWJ1ZyA9IGJ1aWxkX3R5cGUgPT0gImRlYnVnIgpAQCAtNjcsMTQgKzY3LDEwIEBACiAKICMgR2V0IHRoZSBwYXRoIHRvIHRoZSBzdGFyYm9hcmQgaW1wbGVtZW50YXRpb24gYW5kIGluY2x1ZGUgaXRzIEdOCiAjIGNvbmZpZ3VyYXRpb24uCi1zdGFyYm9hcmRfcGF0aCA9IGV4ZWNfc2NyaXB0KCIvL3N0YXJib2FyZC9idWlsZC9wbGF0Zm9ybXMucHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIHRhcmdldF9wbGF0Zm9ybSBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpbSBzdHJpbmciKQotYXNzZXJ0KGRlZmluZWQoc3RhcmJvYXJkX3BhdGgpLAotICAgICAgICJQbGVhc2UgYWRkIHlvdXIgcGxhdGZvcm0gdG8gc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3Jtcy5weSIpCitpbXBvcnQoIi8vc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3JtX3BhdGguZ25pIikKIGhvc3RfdG9vbGNoYWluID0gIi8vJHN0YXJib2FyZF9wYXRoL3Rvb2xjaGFpbjpob3N0IgotX2RlZmF1bHRfdG9vbGNoYWluID0gIi8vJHN0YXJib2FyZF9wYXRoL3Rvb2xjaGFpbjp0YXJnZXQiCi1zZXRfZGVmYXVsdF90b29sY2hhaW4oX2RlZmF1bHRfdG9vbGNoYWluKQordGFyZ2V0X3Rvb2xjaGFpbiA9ICIvLyRzdGFyYm9hcmRfcGF0aC90b29sY2hhaW46dGFyZ2V0Igorc2V0X2RlZmF1bHRfdG9vbGNoYWluKHRhcmdldF90b29sY2hhaW4pCiAKIGltcG9ydCgiLy8kc3RhcmJvYXJkX3BhdGgvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSIpCiBpbXBvcnQoIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9idWlsZF9hc3NlcnRpb25zLmduaSIpCkBAIC04NCw3ICs4MCw3IEBACiB9CiAKIF91c2VfYXNhbl9kZWZhdWx0ID0gKGlzX2RlYnVnIHx8IGlzX2RldmVsKSAmJiAoaXNfbGludXggfHwgaXNfbWFjKSAmJgotICAgICAgICAgICAgICAgICAgICBpc19jbGFuZyAmJiAhc2JfaXNfZXZlcmdyZWVuCisgICAgICAgICAgICAgICAgICAgIGlzX2NsYW5nICYmICFzYl9pc19ldmVyZ3JlZW4gJiYgIXVzaW5nX29sZF9jb21waWxlcgogZGVjbGFyZV9hcmdzKCkgewogICB1c2VfYXNhbiA9IChfdXNlX2FzYW5fZGVmYXVsdCB8fCBnZXRlbnYoIlVTRV9BU0FOIikgPT0gMSkgJiYgIXVzZV90c2FuCiB9CkBAIC0yMjQsMTggKzIyMCwyNCBAQAogICAgICAgb3V0cHV0cyA9IFtdCiAgICAgICBmb3JlYWNoKHNvdXJjZSwgc291cmNlcykgewogICAgICAgICBvdXRwdXRfcGF0aCA9IGluc3RhbGxfY29udGVudF9kaXIgKyAiLyIgKwotICAgICAgICAgICAgICAgICAgICAgIHJlYmFzZV9wYXRoKHNvdXJjZSwgIiRzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyIikKKyAgICAgICAgICAgICAgICAgICAgICByZWJhc2VfcGF0aChzb3VyY2UsIHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIpCiAgICAgICAgIG91dHB1dHMgKz0gWyBvdXRwdXRfcGF0aCBdCiAgICAgICB9CiAKKyAgICAgICMgV3JpdGUgdGhlIGZpbGUgbGlzdCB0byBhIHVuaXF1ZSB0ZW1wIGZpbGUgdG8gYXZvaWQgYmxvd2luZyBvdXQgdGhlCisgICAgICAjIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXQuCisgICAgICBmaWxlc19saXN0ID0gIiRyb290X2dlbl9kaXIvJHt0YXJnZXRfbmFtZX1fZmlsZXMudG1wIgorICAgICAgd3JpdGVfZmlsZShmaWxlc19saXN0LCByZWJhc2VfcGF0aChzb3VyY2VzLCByb290X2J1aWxkX2RpcikpCisKICAgICAgIHNjcmlwdCA9ICIvL3N0YXJib2FyZC9idWlsZC9jb3B5X2luc3RhbGxfY29udGVudC5weSIKICAgICAgIGFyZ3MgPSBbCiAgICAgICAgICItLW91dHB1dF9kaXIiLAogICAgICAgICByZWJhc2VfcGF0aChpbnN0YWxsX2NvbnRlbnRfZGlyLCByb290X2J1aWxkX2RpciksCiAgICAgICAgICItLWJhc2VfZGlyIiwKICAgICAgICAgcmViYXNlX3BhdGgoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpciwgcm9vdF9idWlsZF9kaXIpLAorICAgICAgICAiLS1maWxlc19saXN0IiwKKyAgICAgICAgcmViYXNlX3BhdGgoZmlsZXNfbGlzdCwgcm9vdF9idWlsZF9kaXIpLAogICAgICAgXQotICAgICAgYXJncyArPSByZWJhc2VfcGF0aChzb3VyY2VzLCByb290X2J1aWxkX2RpcikKICAgICB9CiAgIH0KIH0KQEAgLTI3MiwyMSArMjc0LDc2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICB9CiAKLSAgaWYgKCFkZWZpbmVkKGludm9rZXIuaW5zdGFsbF90YXJnZXQpIHx8IGludm9rZXIuaW5zdGFsbF90YXJnZXQpIHsKKyAgaWYgKGN1cnJlbnRfdG9vbGNoYWluID09IGRlZmF1bHRfdG9vbGNoYWluICYmCisgICAgICAoIWRlZmluZWQoaW52b2tlci5pbnN0YWxsX3RhcmdldCkgfHwgaW52b2tlci5pbnN0YWxsX3RhcmdldCkpIHsKICAgICBleGVjdXRhYmxlX3RhcmdldF9uYW1lID0gdGFyZ2V0X25hbWUKKworICAgIGNvbnRlbnRfZGVwcyA9IFtdCisgICAgaWYgKGRlZmluZWQoaW52b2tlci5jb250ZW50X2RlcHMpKSB7CisgICAgICBjb250ZW50X2RlcHMgKz0gaW52b2tlci5jb250ZW50X2RlcHMKKyAgICB9CisgICAgaWYgKGRlZmluZWQocGxhdGZvcm1faTE4bl9jb25maWdfcGF0aCkpIHsKKyAgICAgIGNvbnRlbnRfZGVwcyArPSBbIHBsYXRmb3JtX2kxOG5fY29uZmlnX3BhdGggXQorICAgIH0KKworICAgIGlmIChzZXBhcmF0ZV9pbnN0YWxsX3RhcmdldHNfZm9yX2J1bmRsaW5nKSB7CisgICAgICBidW5kbGVfZGVwcyA9IFtdCisgICAgICBmb3JlYWNoKGNvbnRlbnRfZGVwLCBjb250ZW50X2RlcHMpIHsKKyAgICAgICAgYnVuZGxlX2RlcHMgKz0gWyAiJHtjb250ZW50X2RlcH1faW5zdGFsbF9jb250ZW50IiBdCisgICAgICB9CisKKyAgICAgICMgVE9ETyhiLzIyMDAyNDg0NSk6IE1ha2UgdGhpcyBtdWNoIGJldHRlci4KKyAgICAgIGFjdGlvbigiJHtleGVjdXRhYmxlX3RhcmdldF9uYW1lfV9idW5kbGVfY29udGVudCIpIHsKKyAgICAgICAgZm9yd2FyZF92YXJpYWJsZXNfZnJvbShpbnZva2VyLCBbICJ0ZXN0b25seSIgXSkKKworICAgICAgICBkZXBzID0gWyAiOiRleGVjdXRhYmxlX3RhcmdldF9uYW1lIiBdCisgICAgICAgIGRlcHMgKz0gYnVuZGxlX2RlcHMKKworICAgICAgICBzb3VyY2VzID0gW10KKyAgICAgICAgZm9yZWFjaChidW5kbGVfZGVwLCBidW5kbGVfZGVwcykgeworICAgICAgICAgICMgU3BsaXQgdGhlIHRhcmdldCBwYXRoIGFuZCBuYW1lLiBFLmcuIC8vcGF0aC90bzp0YXJnZXQgLT4gWyAiLy9wYXRoL3RvIiwgInRhcmdldCIgXS4KKyAgICAgICAgICB0YXJnZXRfcGF0aF9hbmRfbmFtZSA9IHN0cmluZ19zcGxpdChidW5kbGVfZGVwLCAiOiIpCisKKyAgICAgICAgICAjIFRoZSBjb250ZW50X2RlcCB0YXJnZXQgd2lsbCBwbGFjZSBpdHMgZmlsZSB1bmRlciB0aGUgcm9vdCBnZW4gZGlyLgorICAgICAgICAgIGNvbnRlbnRfZGVwX2xpc3RfZmlsZSA9IHN0cmluZ19qb2luKCIvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290X2dlbl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGF0aF9hbmRfbmFtZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgIHRhcmdldF9wYXRoX2FuZF9uYW1lID0gW10KKworICAgICAgICAgIHNvdXJjZXMgKz0gWyAiJHtjb250ZW50X2RlcF9saXN0X2ZpbGV9X2ZpbGVzLnRtcCIgXQorICAgICAgICB9CisKKyAgICAgICAgYnVuZGxlX2NvbnRlbnRfZGlyID0gIiRzYl9pbnN0YWxsX291dHB1dF9kaXIvJGV4ZWN1dGFibGVfdGFyZ2V0X25hbWUvJHNiX2luc3RhbGxfY29udGVudF9zdWJkaXIiCisKKyAgICAgICAgIyBUT0RPKGIvMjIwMDI0ODQ1KTogV2UgZG9uJ3QgaGF2ZSB0aGUgbGlzdCBvZiBvdXRwdXQgZmlsZXMuCisgICAgICAgIG91dHB1dHMgPSBbIGJ1bmRsZV9jb250ZW50X2RpciBdCisKKyAgICAgICAgc2NyaXB0ID0gIi8vc3RhcmJvYXJkL2J1aWxkL2NvcHlfYnVuZGxlX2NvbnRlbnQucHkiCisgICAgICAgIGFyZ3MgPSBbCisgICAgICAgICAgIi0tb3V0cHV0X2RpciIsCisgICAgICAgICAgcmViYXNlX3BhdGgoYnVuZGxlX2NvbnRlbnRfZGlyLCByb290X2J1aWxkX2RpciksCisgICAgICAgICAgIi0tYmFzZV9kaXIiLAorICAgICAgICAgIHJlYmFzZV9wYXRoKHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIsIHJvb3RfYnVpbGRfZGlyKSwKKyAgICAgICAgXQorICAgICAgICBhcmdzICs9IHJlYmFzZV9wYXRoKHNvdXJjZXMsIHJvb3RfYnVpbGRfZGlyKQorICAgICAgfQorICAgIH0KKwogICAgIGluc3RhbGxfdGFyZ2V0KHRhcmdldF9uYW1lICsgIl9pbnN0YWxsIikgewogICAgICAgZm9yd2FyZF92YXJpYWJsZXNfZnJvbShpbnZva2VyLCBbICJ0ZXN0b25seSIgXSkKICAgICAgIGluc3RhbGxhYmxlX3RhcmdldF9uYW1lID0gZXhlY3V0YWJsZV90YXJnZXRfbmFtZQogICAgICAgdHlwZSA9ICJleGVjdXRhYmxlIgorICAgICAgZGVwcyA9IFtdCiAgICAgICBpZiAoZGVmaW5lZChpbnZva2VyLmRlcHMpKSB7Ci0gICAgICAgIGRlcHMgPSBpbnZva2VyLmRlcHMKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlcHMgPSBbXQorICAgICAgICBkZXBzICs9IGludm9rZXIuZGVwcwogICAgICAgfQotICAgICAgaWYgKGRlZmluZWQoaW52b2tlci5jb250ZW50X2RlcHMpKSB7Ci0gICAgICAgIGZvcmVhY2goY29udGVudF9kZXAsIGludm9rZXIuY29udGVudF9kZXBzKSB7Ci0gICAgICAgICAgZGVwcyArPSBbICIke2NvbnRlbnRfZGVwfV9pbnN0YWxsX2NvbnRlbnQiIF0KLSAgICAgICAgfQorICAgICAgaWYgKHNlcGFyYXRlX2luc3RhbGxfdGFyZ2V0c19mb3JfYnVuZGxpbmcpIHsKKyAgICAgICAgZGVwcyArPSBbICI6JHtleGVjdXRhYmxlX3RhcmdldF9uYW1lfV9idW5kbGVfY29udGVudCIgXQorICAgICAgfQorICAgICAgZm9yZWFjaChjb250ZW50X2RlcCwgY29udGVudF9kZXBzKSB7CisgICAgICAgIGRlcHMgKz0gWyAiJHtjb250ZW50X2RlcH1faW5zdGFsbF9jb250ZW50IiBdCiAgICAgICB9CiAgICAgfQogICB9CkBAIC0zMDMsMjEgKzM2MCw3NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgfQogCi0gIGlmICghZGVmaW5lZChpbnZva2VyLmluc3RhbGxfdGFyZ2V0KSB8fCBpbnZva2VyLmluc3RhbGxfdGFyZ2V0KSB7CisgIGlmIChjdXJyZW50X3Rvb2xjaGFpbiA9PSBkZWZhdWx0X3Rvb2xjaGFpbiAmJgorICAgICAgKCFkZWZpbmVkKGludm9rZXIuaW5zdGFsbF90YXJnZXQpIHx8IGludm9rZXIuaW5zdGFsbF90YXJnZXQpKSB7CiAgICAgc2hhcmVkX2xpYnJhcnlfdGFyZ2V0X25hbWUgPSB0YXJnZXRfbmFtZQorCisgICAgY29udGVudF9kZXBzID0gW10KKyAgICBpZiAoZGVmaW5lZChpbnZva2VyLmNvbnRlbnRfZGVwcykpIHsKKyAgICAgIGNvbnRlbnRfZGVwcyArPSBpbnZva2VyLmNvbnRlbnRfZGVwcworICAgIH0KKyAgICBpZiAoZGVmaW5lZChwbGF0Zm9ybV9pMThuX2NvbmZpZ19wYXRoKSkgeworICAgICAgY29udGVudF9kZXBzICs9IFsgcGxhdGZvcm1faTE4bl9jb25maWdfcGF0aCBdCisgICAgfQorCisgICAgaWYgKHNlcGFyYXRlX2luc3RhbGxfdGFyZ2V0c19mb3JfYnVuZGxpbmcpIHsKKyAgICAgIGJ1bmRsZV9kZXBzID0gW10KKyAgICAgIGZvcmVhY2goY29udGVudF9kZXAsIGNvbnRlbnRfZGVwcykgeworICAgICAgICBidW5kbGVfZGVwcyArPSBbICIke2NvbnRlbnRfZGVwfV9pbnN0YWxsX2NvbnRlbnQiIF0KKyAgICAgIH0KKworICAgICAgIyBUT0RPKGIvMjIwMDI0ODQ1KTogTWFrZSB0aGlzIG11Y2ggYmV0dGVyLgorICAgICAgYWN0aW9uKCIke3NoYXJlZF9saWJyYXJ5X3RhcmdldF9uYW1lfV9idW5kbGVfY29udGVudCIpIHsKKyAgICAgICAgZm9yd2FyZF92YXJpYWJsZXNfZnJvbShpbnZva2VyLCBbICJ0ZXN0b25seSIgXSkKKworICAgICAgICBkZXBzID0gWyAiOiRzaGFyZWRfbGlicmFyeV90YXJnZXRfbmFtZSIgXQorICAgICAgICBkZXBzICs9IGJ1bmRsZV9kZXBzCisKKyAgICAgICAgc291cmNlcyA9IFtdCisgICAgICAgIGZvcmVhY2goYnVuZGxlX2RlcCwgYnVuZGxlX2RlcHMpIHsKKyAgICAgICAgICAjIFNwbGl0IHRoZSB0YXJnZXQgcGF0aCBhbmQgbmFtZS4gRS5nLiAvL3BhdGgvdG86dGFyZ2V0IC0+IFsgIi8vcGF0aC90byIsICJ0YXJnZXQiIF0uCisgICAgICAgICAgdGFyZ2V0X3BhdGhfYW5kX25hbWUgPSBzdHJpbmdfc3BsaXQoYnVuZGxlX2RlcCwgIjoiKQorCisgICAgICAgICAgIyBUaGUgY29udGVudF9kZXAgdGFyZ2V0IHdpbGwgcGxhY2UgaXRzIGZpbGUgdW5kZXIgdGhlIHJvb3QgZ2VuIGRpci4KKyAgICAgICAgICBjb250ZW50X2RlcF9saXN0X2ZpbGUgPSBzdHJpbmdfam9pbigiLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdF9nZW5fZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BhdGhfYW5kX25hbWVbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICB0YXJnZXRfcGF0aF9hbmRfbmFtZSA9IFtdCisKKyAgICAgICAgICBzb3VyY2VzICs9IFsgIiR7Y29udGVudF9kZXBfbGlzdF9maWxlfV9maWxlcy50bXAiIF0KKyAgICAgICAgfQorCisgICAgICAgIGJ1bmRsZV9jb250ZW50X2RpciA9ICIkc2JfaW5zdGFsbF9vdXRwdXRfZGlyLyRzaGFyZWRfbGlicmFyeV90YXJnZXRfbmFtZS8kc2JfaW5zdGFsbF9jb250ZW50X3N1YmRpciIKKworICAgICAgICAjIFRPRE8oYi8yMjAwMjQ4NDUpOiBXZSBkb24ndCBoYXZlIHRoZSBsaXN0IG9mIG91dHB1dCBmaWxlcy4KKyAgICAgICAgb3V0cHV0cyA9IFsgYnVuZGxlX2NvbnRlbnRfZGlyIF0KKworICAgICAgICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvY29weV9idW5kbGVfY29udGVudC5weSIKKyAgICAgICAgYXJncyA9IFsKKyAgICAgICAgICAiLS1vdXRwdXRfZGlyIiwKKyAgICAgICAgICByZWJhc2VfcGF0aChidW5kbGVfY29udGVudF9kaXIsIHJvb3RfYnVpbGRfZGlyKSwKKyAgICAgICAgICAiLS1iYXNlX2RpciIsCisgICAgICAgICAgcmViYXNlX3BhdGgoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpciwgcm9vdF9idWlsZF9kaXIpLAorICAgICAgICBdCisgICAgICAgIGFyZ3MgKz0gcmViYXNlX3BhdGgoc291cmNlcywgcm9vdF9idWlsZF9kaXIpCisgICAgICB9CisgICAgfQorCiAgICAgaW5zdGFsbF90YXJnZXQodGFyZ2V0X25hbWUgKyAiX2luc3RhbGwiKSB7CiAgICAgICBmb3J3YXJkX3ZhcmlhYmxlc19mcm9tKGludm9rZXIsIFsgInRlc3Rvbmx5IiBdKQogICAgICAgaW5zdGFsbGFibGVfdGFyZ2V0X25hbWUgPSBzaGFyZWRfbGlicmFyeV90YXJnZXRfbmFtZQogICAgICAgdHlwZSA9ICJzaGFyZWRfbGlicmFyeSIKKyAgICAgIGRlcHMgPSBbXQogICAgICAgaWYgKGRlZmluZWQoaW52b2tlci5kZXBzKSkgewotICAgICAgICBkZXBzID0gaW52b2tlci5kZXBzCi0gICAgICB9IGVsc2UgewotICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZGVwcyArPSBpbnZva2VyLmRlcHMKICAgICAgIH0KLSAgICAgIGlmIChkZWZpbmVkKGludm9rZXIuY29udGVudF9kZXBzKSkgewotICAgICAgICBmb3JlYWNoKGNvbnRlbnRfZGVwLCBpbnZva2VyLmNvbnRlbnRfZGVwcykgewotICAgICAgICAgIGRlcHMgKz0gWyAiJHtjb250ZW50X2RlcH1faW5zdGFsbF9jb250ZW50IiBdCi0gICAgICAgIH0KKyAgICAgIGlmIChzZXBhcmF0ZV9pbnN0YWxsX3RhcmdldHNfZm9yX2J1bmRsaW5nKSB7CisgICAgICAgIGRlcHMgKz0gWyAiOiR7c2hhcmVkX2xpYnJhcnlfdGFyZ2V0X25hbWV9X2J1bmRsZV9jb250ZW50IiBdCisgICAgICB9CisgICAgICBmb3JlYWNoKGNvbnRlbnRfZGVwLCBjb250ZW50X2RlcHMpIHsKKyAgICAgICAgZGVwcyArPSBbICIke2NvbnRlbnRfZGVwfV9pbnN0YWxsX2NvbnRlbnQiIF0KICAgICAgIH0KICAgICB9CiAgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaQppbmRleCBhNzg5MzMwLi5mZGY1Y2Y1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL2Jhc2VfY29uZmlndXJhdGlvbi5nbmkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9iYXNlX2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0xMiw2ICsxMiw3IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvY2xhbmcvY2xhbmcuZ25pIikKIGltcG9ydCgiLy9jb2JhbHQvY29udGVudC9mb250cy9mb250X2NvbmZpZ3VyYXRpb24uZ25pIikKIGltcG9ydCgiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL2VuYWJsZV92ci5nbmkiKQogCkBAIC05NywyMiArOTgsMTkgQEAKICAgc291cmNlX3NldF9jb25maWdzID0gW10KICAgbG9hZGFibGVfbW9kdWxlX2NvbmZpZ3MgPSBbXQogCi0gICMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgZHJtIHRlc3Qgc3VpdGVzLgotICBoYXNfZHJtX3N1cHBvcnQgPSB0cnVlCi0KICAgIyBFbmFibGVzIG9wdGltaXphdGlvbnMgb24gU1NFIGNvbXBhdGlibGUgcGxhdGZvcm1zLgogICBzYl9lbmFibGVfb3B1c19zc2UgPSB0cnVlCiAKICAgIyBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBESUFMIHNlcnZlciB0aGF0IHJ1bnMgaW5zaWRlIENvYmFsdC4KICAgIyBOb3RlOiBPbmx5IGVuYWJsZSBpZiB0aGVyZSdzIG5vIHN5c3RlbS13aWRlIERJQUwgc3VwcG9ydC4KLSAgaW5fYXBwX2RpYWwgPSBmYWxzZQorICBlbmFibGVfaW5fYXBwX2RpYWwgPSBmYWxzZQogCiAgICMgT3ZlcnJpZGUgdGhpcyB2YWx1ZSB0byBhZGp1c3QgdGhlIGRlZmF1bHQgcmFzdGVyaXplciBzZXR0aW5nIGZvciB5b3VyCiAgICMgcGxhdGZvcm0uCiAgIGRlZmF1bHRfcmVuZGVyZXJfb3B0aW9uc19kZXBlbmRlbmN5ID0gIi8vY29iYWx0L3JlbmRlcmVyOmRlZmF1bHRfb3B0aW9ucyIKIAogICAjIEEgc3ltYm9saXplciBwYXRoIGZvciBBU0FOIGNhbiBiZSBhZGRlZCB0byBhbGxvdyB0cmFuc2xhdGlvbiBvZiBjYWxsc3RhY2tzLgotICBhc2FuX3N5bWJvbGl6ZXJfcGF0aCA9ICIiCisgIGFzYW5fc3ltYm9saXplcl9wYXRoID0gIiRjbGFuZ19iYXNlX3BhdGgvYmluL2xsdm0tc3ltYm9saXplciIKIAogICAjIFN1Yi1kaXJlY3RvcnkgdG8gY29weSBsaWNlbnNlIGZpbGUgdG8uCiAgIGNvYmFsdF9saWNlbnNlc19wbGF0Zm9ybSA9ICJkZWZhdWx0IgpAQCAtMTMwLDggKzEyOCwyNCBAQAogICAjIExpc3Qgb2YgcGxhdGZvcm0tc3BlY2lmaWMgdGFyZ2V0cyB0aGF0IGdldCBjb21waWxlZCBpbnRvIGNvYmFsdC4KICAgY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyA9IFtdCiAKKyAgIyBTb21lIGNvbXBpbGVyIGNhbiBub3QgY29tcGlsZSB3aXRoIHJhdyBhc3NlbWJseSguUyBmaWxlcykgYW5kIHY4CisgICMgY29udmVydHMgYXNtIHRvIGlubGluZSBhc3NlbWJseSBmb3IgdGhlc2UgcGxhdGZvcm1zLgorICBjb2JhbHRfdjhfZW1pdF9idWlsdGluc19hc19pbmxpbmVfYXNtID0gZmFsc2UKKworICAjIFNldCB0byB0cnVlIHRvIGVuYWJsZSBwb2ludGVyIGNvbXByZXNzaW9uIGZvciB2OC4KKyAgdjhfZW5hYmxlX3BvaW50ZXJfY29tcHJlc3Npb25fb3ZlcnJpZGUgPSB0cnVlCisKICAgIyBXaGV0aGVyIG9yIG5vdCB0byBsaW5rIHdpdGggdGhpbiBhcmNoaXZlcy4KICAgdXNlX3RoaW5fYXJjaGl2ZSA9IHRydWUKIAogICBzYl91c2Vfbm9fcnR0aSA9IGZhbHNlCisKKyAgIyBTZXQgdG8gdHJ1ZSB0byBzZXBhcmF0ZSBpbnN0YWxsIHRhcmdldCBkaXJlY3Rvcmllcy4KKyAgc2VwYXJhdGVfaW5zdGFsbF90YXJnZXRzX2Zvcl9idW5kbGluZyA9IGZhbHNlCisKKyAgIyBFbmFibGVzIGFuIE5QTEIgYXVkaXQgb2YgQysrMTcgc3VwcG9ydC4KKyAgc2JfZW5hYmxlX2NwcDE3X2F1ZGl0ID0gdHJ1ZQorCisgICMgU2V0IHRvIHRydWUgdG8gdXNlIFNraWEgbTk3LgorICB1c2Vfc2tpYV9uZXh0ID0gZmFsc2UKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvaW5zdGFsbC5nbmkgYi9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL2luc3RhbGwuZ25pCmluZGV4IDVjNjRhYzIuLjllZjNmM2QgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvaW5zdGFsbC5nbmkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9pbnN0YWxsLmduaQpAQCAtMTMsOCArMTMsOCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogZGVjbGFyZV9hcmdzKCkgewotICAjIFRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHN0YWdpbmcgZGVwbG95IGJ1aWxkIG91dHB1dC4gUGxhdGZvcm0gZGVwbG95Ci0gICMgYWN0aW9ucyBzaG91bGQgdXNlIDwodGFyZ2V0X2RlcGxveV9kaXIpIGRlZmluZWQgaW4gZGVwbG95Lmd5cGkgdG8gcGxhY2UKKyAgIyBUb3AtbGV2ZWwgZGlyZWN0b3J5IGZvciBzdGFnaW5nIGRlcGxveSBidWlsZCBvdXRwdXQuIFBsYXRmb3JtIGluc3RhbGwKKyAgIyBhY3Rpb25zIHNob3VsZCB1c2UgJHtzYl9pbnN0YWxsX291dHB1dF9kaXJ9IGRlZmluZWQgaW4gdGhpcyBmaWxlIHRvIHBsYWNlCiAgICMgYXJ0aWZhY3RzIGZvciBlYWNoIGRlcGxveSB0YXJnZXQgaW4gaXRzIG93biBzdWJkaXJlY3RveS4KICAgc2JfaW5zdGFsbF9vdXRwdXRfZGlyID0gIiRyb290X291dF9kaXIvaW5zdGFsbCIKIApAQCAtMjIsNiArMjIsMTMgQEAKICAgc2JfaW5zdGFsbF9jb250ZW50X3N1YmRpciA9ICIiCiB9CiAKKyMgVE9ETyhiLzIxODg4OTMxMyk6IGBjb250ZW50YCBpcyBoYXJkY29kZWQgb24gbGludXgvcmFzcGkuIE92ZXJyaWRlIHRoZSBkZWZhdWx0CisjIGNvbnRlbnQgc3ViZGlyIHVudGlsIHRoaXMgaXMgZml4ZWQKK3BsYXRmb3JtX3NwbGl0ID0gc3RyaW5nX3NwbGl0KHRhcmdldF9wbGF0Zm9ybSwgIi0iKQoraWYgKHBsYXRmb3JtX3NwbGl0WzBdID09ICJyYXNwaSIpIHsKKyAgc2JfaW5zdGFsbF9jb250ZW50X3N1YmRpciA9ICJjb250ZW50IgorfQorCiBpZiAoc2JfaW5zdGFsbF9jb250ZW50X3N1YmRpciA9PSAiIikgewogICBzYl9pbnN0YWxsX2NvbnRlbnRfc3ViZGlyID0gInVzci9zaGFyZS9jb2JhbHQiCiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL3NhYmkvQlVJTEQuZ24gYi9zdGFyYm9hcmQvYnVpbGQvY29uZmlnL3NhYmkvQlVJTEQuZ24KaW5kZXggOTZiNDE4NS4uYmM0MzUyMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9zYWJpL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaS9CVUlMRC5nbgpAQCAtMTcsMjYgKzE3LDEyIEBACiAgIHNhYmlfdmFyaWFibGVzID0gc2FiaV9qc29uLnZhcmlhYmxlcwogICBmb3J3YXJkX3ZhcmlhYmxlc19mcm9tKHNhYmlfdmFyaWFibGVzLCAiKiIpCiAKLSAgYXJjaF91cHBlcmNhc2UgPSBleGVjX3NjcmlwdCgiLy9zdGFyYm9hcmQvYnVpbGQvZ3lwX2Z1bmN0aW9ucy5weSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cl91cHBlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cmltIHN0cmluZyIpCisgIGFyY2hfdXBwZXJjYXNlID0KKyAgICAgIGV4ZWNfc2NyaXB0KCJ1cHBlcmNhc2Vfc3RyaW5nLnB5IiwgWyB0YXJnZXRfYXJjaCBdLCAidHJpbSBzdHJpbmciKQogICBjYWxsaW5nX2NvbnZlbnRpb25fdXBwZXJjYXNlID0KLSAgICAgIGV4ZWNfc2NyaXB0KCIvL3N0YXJib2FyZC9idWlsZC9neXBfZnVuY3Rpb25zLnB5IiwKLSAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgInN0cl91cHBlciIsCi0gICAgICAgICAgICAgICAgICAgIGNhbGxpbmdfY29udmVudGlvbiwKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAidHJpbSBzdHJpbmciKQorICAgICAgZXhlY19zY3JpcHQoInVwcGVyY2FzZV9zdHJpbmcucHkiLCBbIGNhbGxpbmdfY29udmVudGlvbiBdLCAidHJpbSBzdHJpbmciKQogICBmbG9hdGluZ19wb2ludF9hYmlfdXBwZXJjYXNlID0KLSAgICAgIGV4ZWNfc2NyaXB0KCIvL3N0YXJib2FyZC9idWlsZC9neXBfZnVuY3Rpb25zLnB5IiwKLSAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgInN0cl91cHBlciIsCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nX3BvaW50X2FiaSwKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAidHJpbSBzdHJpbmciKQorICAgICAgZXhlY19zY3JpcHQoInVwcGVyY2FzZV9zdHJpbmcucHkiLCBbIGZsb2F0aW5nX3BvaW50X2FiaSBdLCAidHJpbSBzdHJpbmciKQogCiAgIHNhYmlfaWQgPSBleGVjX3NjcmlwdCgiLy9zdGFyYm9hcmQvc2FiaS9nZW5lcmF0ZV9zYWJpX2lkLnB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIFsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaS91cHBlcmNhc2Vfc3RyaW5nLnB5IGIvc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9zYWJpL3VwcGVyY2FzZV9zdHJpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlNjc5MwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaS91cHBlcmNhc2Vfc3RyaW5nLnB5CkBAIC0wLDAgKzEsMTggQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVXRpbGl0eSBzY3JpcHQgdG8gY29udmVydCBzdHJpbmdzIHRvIHVwcGVyY2FzZS4iIiIKKworaW1wb3J0IHN5cworCitwcmludCgnICcuam9pbihzeXMuYXJndlsxOl0pLnVwcGVyKCkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEuZ25pIGIvc3RhcmJvYXJkL2J1aWxkL2NvbnZlcnRfaTE4bl9kYXRhLmduaQppbmRleCA2OGExMzAwLi42NmZjZThmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEuZ25pCisrKyBiL3N0YXJib2FyZC9idWlsZC9jb252ZXJ0X2kxOG5fZGF0YS5nbmkKQEAgLTE4LDYgKzE4LDcgQEAKIAogdGVtcGxhdGUoImNvbnZlcnRfaTE4bl9kYXRhIikgewogICBhY3Rpb25fZm9yZWFjaCh0YXJnZXRfbmFtZSkgeworICAgIGZvcndhcmRfdmFyaWFibGVzX2Zyb20oaW52b2tlciwgWyAiaW5zdGFsbF9jb250ZW50IiBdKQogICAgIHNjcmlwdCA9ICIvL3N0YXJib2FyZC9idWlsZC9jb252ZXJ0X2kxOG5fZGF0YS5weSIKIAogICAgIHNvdXJjZXMgPSBpbnZva2VyLnhsYl9maWxlcwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2NvbnZlcnRfaTE4bl9kYXRhLmd5cGkgYi9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgyN2FiYy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGFuIGFjdGlvbiB0byBjb252ZXJ0IGEgc2V0IG9mIFhMQiBmaWxlcwotIyBpbnRvIGZpbGVzIG9mIGEgc2ltcGxlciBmb3JtYXQgKGUuZy4gQ1NWKSBpbiB0aGUgcHJvZHVjdCBkaXJlY3RvcnksIGUuZy4KLSMgZS5nLiBvdXQvc3R1Yl9kZWJ1Zy9jb250ZW50L2RhdGEvaTE4bi4KLSMKLSMgVG8gdXNlIHRoaXMsIGRlZmluZSB0aGUgdmFyaWFibGUgeGxiX2ZpbGVzIGFuZCBpbmNsdWRlIHRoaXMgZmlsZS4KLSMgICd2YXJpYWJsZXMnOiB7Ci0jICAgICd4bGJfZmlsZXMnOgotIyAgICAgICc8IShmaW5kIDwoREVQVEgpL2NvYmFsdC9jb250ZW50L2kxOG4vcGxhdGZvcm0vbGludXgvKi54bGIpJywKLSMgIH0sCi0jCi0jIE1lYW5pbmcgb2YgdGhlIHZhcmlhYmxlczoKLSMgICB4bGJfZmlsZXM6IGxpc3Qgb2YgcGF0aHMgdG8gWExCIGZpbGVzOyBkaXJlY3RvcmllcyBhcmUgbm90IGV4cGFuZGVkLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ291dHB1dF9kaXInOiAnPChzYl9zdGF0aWNfY29udGVudHNfb3V0cHV0X2RhdGFfZGlyKS9pMThuJwotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29udmVydF9pMThuX2RhdGEnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdjb252ZXJ0X2kxOG5fZGF0YScsCi0gICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5jb252ZXJ0X2kxOG5fZGF0YSAtbyA8QChvdXRwdXRfZGlyKSAtLWlucHV0cyA8QCh4bGJfZmlsZXMpKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5jb252ZXJ0X2kxOG5fZGF0YSAtbyA8QChvdXRwdXRfZGlyKSAtLW91dHB1dHMgPEAoeGxiX2ZpbGVzKSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEucHknLAotICAgICAgICAgICAgJy1vJywgJzxAKG91dHB1dF9kaXIpJywKLSAgICAgICAgICAgICc8QCh4bGJfZmlsZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICAgICMgTWFrZXMgY29sbGVjdF9kZXBsb3lfY29udGVudCBhd2FyZSBvZiB0aGUgZGlyZWN0b3J5IHNvIHRoYXQgYWxsIGJpbmFyaWVzCi0gICAgICAjIGRlcGVuZGluZyBvbiB0aGlzIHRhcmdldCB3aWxsIHRoZW4gdHJhbnNpdGl2ZWx5IGluY2x1ZGUgaTE4bi4KLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdjb250ZW50X2RlcGxveV9zdWJkaXJzJzogWyAnaTE4bicgXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9jb3B5X2J1bmRsZV9jb250ZW50LnB5IGIvc3RhcmJvYXJkL2J1aWxkL2NvcHlfYnVuZGxlX2NvbnRlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5ZGQwOAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9idWlsZC9jb3B5X2J1bmRsZV9jb250ZW50LnB5CkBAIC0wLDAgKzEsODcgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIFRPRE8oYi8yMTYzNDE1ODcpOiBSZWZhY3RvciBpbnN0YWxsX2NvbnRlbnQgdG8gZ2V0IHJpZCBvZiB0aGlzIGZpbGUuCisKKyMgVGhpcyBmaWxlIGlzIGxvb3NlbHkgYmFzZWQgb24gc3RhcmJvYXJkL2J1aWxkL2NvcHlfZGF0YS5weQorIiIiQ29waWVzIGFsbCBpbnB1dCBmaWxlcyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KKworVGhlIGZvbGRlciBzdHJ1Y3R1cmUgb2YgdGhlIGlucHV0IGZpbGVzIGlzIG1haW50YWluZWQgaW4gdGhlIG91dHB1dCByZWxhdGl2ZQordG8gdGhlICdiYXNlX2RpcicgcGFyYW1ldGVyLgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKKworY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgIHBhc3MKKworCitkZWYgY29weV9maWxlcyhmaWxlc190b19jb3B5LCBiYXNlX2Rpciwgb3V0cHV0X2Rpcik6CisgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZGlyKToKKyAgICBvcy5tYWtlZGlycyhvdXRwdXRfZGlyKQorCisgIGZvciBwYXRoIGluIGZpbGVzX3RvX2NvcHk6CisgICAgIyBJbiBjZXJ0YWluIGNhc2VzLCBmaWxlcyB3b3VsZCBmYWlsIHRvIG9wZW4gb24gd2luZG93cyBpZiByZWxhdGl2ZSBwYXRocworICAgICMgd2VyZSBwcm92aWRlZC4gIFVzaW5nIGFic29sdXRlIHBhdGhzIGZpeGVzIHRoaXMuCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmFic3BhdGgocGF0aCkKKworICAgICMgR2V0IHRoZSBwYXRoIG9mIHRoZSBmaWxlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgYmFzZV9kaXIuCisgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgYmFzZV9kaXIpCisgICAgb3V0cHV0X2RpciA9IG9zLnBhdGguYWJzcGF0aChvdXRwdXRfZGlyKQorICAgICMgVXNlIHJlbF9wYXRoIHRvIHByZXNlcnZlIHRoZSBpbnB1dCBmb2xkZXIgc3RydWN0dXJlIGluIHRoZSBvdXRwdXQuCisgICAgb3V0cHV0X2ZpbGVuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCByZWxfcGF0aCkpCisKKyAgICAjIEluIGNhc2VzIHdoZXJlIGEgZGlyZWN0b3J5IGhhcyB0dXJuZWQgaW50byBhIGZpbGUgb3IgdmljZSB2ZXJzYSwgZGVsZXRlIGl0CisgICAgIyBiZWZvcmUgY29weWluZyBpdCBiZWxvdy4KKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZGlyKSBhbmQgbm90IG9zLnBhdGguaXNkaXIob3V0cHV0X2Rpcik6CisgICAgICBvcy5yZW1vdmUob3V0cHV0X2RpcikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZmlsZW5hbWUpIGFuZCBvcy5wYXRoLmlzZGlyKG91dHB1dF9maWxlbmFtZSk6CisgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9maWxlbmFtZSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSk6CisgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKKworICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgIHNodXRpbC5jb3B5KGZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUpCisgICAgZWxzZToKKyAgICAgICMgVE9ETyhiLzIxMTkwOTM0Mik6IFJlbW92ZSB0aGlzIGJyYW5jaCBvbmNlIGxvdHRpZSBmaWxlcyBhcmUgbGlzdGVkLgorICAgICAgc2h1dGlsLmNvcHl0cmVlKGZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tb3V0cHV0X2RpcicsIGRlc3Q9J291dHB1dF9kaXInLCByZXF1aXJlZD1UcnVlLCBoZWxwPSdvdXRwdXQgZGlyZWN0b3J5JykKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctLWJhc2VfZGlyJywKKyAgICAgIGRlc3Q9J2Jhc2VfZGlyJywKKyAgICAgIHJlcXVpcmVkPVRydWUsCisgICAgICBoZWxwPSdzb3VyY2UgYmFzZSBkaXJlY3RvcnknKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJ2lucHV0X3BhdGhzJywKKyAgICAgIG1ldGF2YXI9J3BhdGgnLAorICAgICAgbmFyZ3M9JyonLAorICAgICAgaGVscD0ncGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiBmaWxlcyB0byBjb3B5JykKKyAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAjIExvYWQgZmlsZSBuYW1lcyBmcm9tIHRoZSBmaWxlcyBjb250YWluaW5nIHRoZSBsaXN0IG9mIGZpbGUgbmFtZXMuCisgIGZpbGVfbmFtZXMgPSBbXQorICBmb3IgaW5wdXRfcGF0aCBpbiBvcHRpb25zLmlucHV0X3BhdGhzOgorICAgIHdpdGggb3BlbihpbnB1dF9wYXRoLnN0cmlwKCkpIGFzIGZpbGVzX2xpc3Q6CisgICAgICBmaWxlX25hbWVzLmV4dGVuZChbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGZpbGVzX2xpc3RdKQorCisgIGNvcHlfZmlsZXMoZmlsZV9uYW1lcywgb3B0aW9ucy5iYXNlX2Rpciwgb3B0aW9ucy5vdXRwdXRfZGlyKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2NvcHlfaW5zdGFsbF9jb250ZW50LnB5IGIvc3RhcmJvYXJkL2J1aWxkL2NvcHlfaW5zdGFsbF9jb250ZW50LnB5CmluZGV4IGQ2M2U4ODQuLjc2NzA3OWIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9idWlsZC9jb3B5X2luc3RhbGxfY29udGVudC5weQorKysgYi9zdGFyYm9hcmQvYnVpbGQvY29weV9pbnN0YWxsX2NvbnRlbnQucHkKQEAgLTMzLDggKzMzLDkgQEAKIGRlZiBjb3B5X2ZpbGVzKGZpbGVzX3RvX2NvcHksIGJhc2VfZGlyLCBvdXRwdXRfZGlyKToKICAgZm9yIHBhdGggaW4gZmlsZXNfdG9fY29weToKICAgICAjIEFsbCBpbnB1dCBwYXRocyBtdXN0IHBvaW50IGF0IGZpbGVzLgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgIHJhaXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihwYXRoICsgJyBpcyBub3QgYSBmaWxlLicpCisgICAgIyBUT0RPKGIvMjExOTA5MzQyKTogUmUtZW5hYmxlIG9uY2UgbG90dGllIHRlc3QgZmlsZXMgYXJlIGxpc3RlZC4KKyAgICAjIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShwYXRoKToKKyAgICAjICAgcmFpc2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHBhdGggKyAnIGlzIG5vdCBhIGZpbGUuJykKIAogICAgICMgR2V0IHRoZSBwYXRoIG9mIHRoZSBmaWxlIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgYmFzZV9kaXIuCiAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgYmFzZV9kaXIpCkBAIC01NSw3ICs1NiwxMSBAQAogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZGlyKToKICAgICAgIG9zLm1ha2VkaXJzKG91dHB1dF9kaXIpCiAKLSAgICBzaHV0aWwuY29weShmaWxlbmFtZSwgb3V0cHV0X2ZpbGVuYW1lKQorICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgIHNodXRpbC5jb3B5KGZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUpCisgICAgZWxzZToKKyAgICAgICMgVE9ETyhiLzIxMTkwOTM0Mik6IFJlbW92ZSB0aGlzIGJyYW5jaCBvbmNlIGxvdHRpZSBmaWxlcyBhcmUgbGlzdGVkLgorICAgICAgc2h1dGlsLmNvcHl0cmVlKGZpbGVuYW1lLCBvdXRwdXRfZmlsZW5hbWUpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKQEAgLTY4LDcgKzczLDE1IEBACiAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgaGVscD0nc291cmNlIGJhc2UgZGlyZWN0b3J5JykKICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICdpbnB1dF9wYXRocycsIG1ldGF2YXI9J3BhdGgnLCBuYXJncz0nKycsIGhlbHA9J3BhdGggdG8gYW4gaW5wdXQgZmlsZScpCisgICAgICAnLS1maWxlc19saXN0JywKKyAgICAgIGRlc3Q9J2ZpbGVzX2xpc3QnLAorICAgICAgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgIGhlbHA9J3BhdGggdG8gZmlsZSBjb250YWluaW5nIGxpc3Qgb2YgaW5wdXQgZmlsZXMnKQogICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCi0gIGNvcHlfZmlsZXMob3B0aW9ucy5pbnB1dF9wYXRocywgb3B0aW9ucy5iYXNlX2Rpciwgb3B0aW9ucy5vdXRwdXRfZGlyKQorICAjIExvYWQgZmlsZSBuYW1lcyBmcm9tIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgZmlsZSBuYW1lcy4KKyAgIyBUaGUgZmlsZSBuYW1lIGxpc3QgbXVzdCBiZSBwYXNzZWQgaW4gYSBmaWxlIHRvIGR1ZSB0byBjb21tYW5kIGxpbmUgbGltaXRzLgorICB3aXRoIG9wZW4ob3B0aW9ucy5maWxlc19saXN0KSBhcyBpbnB1dF9maWxlOgorICAgIGZpbGVfbmFtZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGlucHV0X2ZpbGVdCisKKyAgY29weV9maWxlcyhmaWxlX25hbWVzLCBvcHRpb25zLmJhc2VfZGlyLCBvcHRpb25zLm91dHB1dF9kaXIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaSBiL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDMyZjhiLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYSB0YXJnZXQgdG8gYWRkIGFuIGFjdGlvbgotIyB0aGF0IGNvcGllcyB0ZXN0IGRhdGEgZmlsZXMgaW50byB0aGUgRElSX1RFU1RfREFUQSBkaXJlY3RvcnksCi0jIGUuZy4gb3V0L2xpbnV4LXg2NHgxMV9kZXZlbC9jb250ZW50L2RhdGEvdGVzdC8uCi0jCi0jIFRvIHVzZSB0aGlzLCBjcmVhdGUgYSBneXAgdGFyZ2V0IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtOgotIyB7Ci0jICAgJ3RhcmdldF9uYW1lJzogJ3RhcmdldF9uYW1lX2NvcHlfdGVzdF9kYXRhJywKLSMgICAndHlwZSc6ICdub25lJywKLSMgICAndmFyaWFibGVzJzogewotIyAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSMgICAgICAgJ3BhdGgvdG8vZGF0YWZpbGUudHh0JywgICAgICMgVGhlIGZpbGUgd2lsbCBiZSBjb3BpZWQuCi0jICAgICAgICdwYXRoL3RvL2RhdGEvZGlyZWN0b3J5JywgICAjIFRoZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50IHdpbGwgYmUgY29waWVkLgotIyAgICAgICAncGF0aC90by9kYXRhL2RpcmVjdG9yeS8nLCAgIyBUaGUgZGlyZWN0b3J5J3MgY29udGVudCB3aWxsIGJlIGNvcGllZC4KLSMgICAgIF0sCi0jICAgICAnY29udGVudF90ZXN0X291dHB1dF9zdWJkaXInIDogJ3BhdGgvdG8vb3V0cHV0L2RpcmVjdG9yeScsCi0jICAgfSwKLSMgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJ10sCi0jIH0sCi0jCi0jIE1lYW5pbmcgb2YgdGhlIHZhcmlhYmxlczoKLSMgICBjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXM6IGxpc3Q6Ci0jICAgICAgIFBhdGhzIHRvIGRhdGEgZmlsZXMgb3IgZGlyZWN0b3JpZXMuIFdoZW4gYW4gaXRlbSBpcyBhIGRpcmVjdG9yeSwKLSMgICAgICAgd2l0aG91dCB0aGUgZmluYWwgIi8iLCB0aGUgZGlyZWN0b3J5IChhbG9uZyB3aXRoIHRoZSBjb250ZW50KSB3aWxsIGJlCi0jICAgICAgIGNvcGllZCwgb3RoZXJ3aXNlIG9ubHkgdGhlIGNvbnRlbnQgd2lsbCBiZSBjb3BpZWQuCi0jCi0jICAgY29udGVudF90ZXN0X291dHB1dF9zdWJkaXI6IHN0cmluZzoKLSMgICAgICAgRGlyZWN0b3J5IHdpdGhpbiB0aGUgdGVzdCBkaXJlY3RvcnkgdGhhdCBhbGwgaW5wdXQgZmlsZXMgd2lsbCBiZQotIyAgICAgICBjb3BpZWQgdG8uIEdlbmVyYWxseSwgdGhpcyBzaG91bGQgYmUgdGhlIGRpcmVjdG9yeSBvZiB0aGUgZ3lwaSBmaWxlCi0jICAgICAgIGNvbnRhaW5pbmcgdGhlIHRhcmdldCAoZS5nLiBpdCBzaG91bGQgYmUgImJhc2UiIGZvciB0aGUgdGFyZ2V0IGluCi0jICAgICAgIGJhc2UvYmFzZS5neXApLgotIwotIyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgY29udGVudF90ZXN0X2lucHV0X2ZpbGVzIGFuZCBjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcgotIyBoYXZlIHNpbWlsYXIgcGF0aHMsIHNvIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGluIGRhdGEvdGVzdC8gd2lsbCByZWZsZWN0Ci0jIHRoYXQgaW4gdGhlIHNvdXJjZSBmb2xkZXIuCi0KLXsKLSAgJ2FjdGlvbnMnOiBbCi0gICAgewotICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NvcHlfdGVzdCcsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuY29weV9kYXRhIC0taW5wdXRzIDwoY29udGVudF90ZXN0X2lucHV0X2ZpbGVzKSknLAotICAgICAgXSwKLSAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuY29weV9kYXRhIC1vIDwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpcikvdGVzdC88KGNvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyKSAtLW91dHB1dHMgPChjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMpKScsCi0gICAgICBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvcHlfZGF0YS5weScsCi0gICAgICAgICctbycsICc8KHNiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIpL3Rlc3QvPChjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpciknLAotICAgICAgICAnPEAoY29udGVudF90ZXN0X2lucHV0X2ZpbGVzKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnY29udGVudF9kZXBsb3lfc3ViZGlycyc6IFsgJ3Rlc3QvPChjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpciknIF0KLSAgICB9Ci0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvZGVmYXVsdF9ub19kZXBsb3kuZ3lwaSBiL3N0YXJib2FyZC9idWlsZC9kZWZhdWx0X25vX2RlcGxveS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGIyODczLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9kZWZhdWx0X25vX2RlcGxveS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYSB0YXJnZXQgdG8gcHJvdmlkZSBhIHJ1bGUKLSMgdG8gZGVwbG95IGEgdGFyZ2V0IG9uIGEgdGFyZ2V0IHBsYXRmb3JtLgotIwotIyBUaGUgcGxhdGZvcm1fZGVwbG95IHRhcmdldCBzaG91bGQgYmUgZGVmaW5lZCBpbgotIyBzdGFyYm9hcmQvPHBvcnRfcGF0aD4vcGxhdGZvcm1fZGVwbG95Lmd5cC4gVGhpcyB0YXJnZXQgc2hvdWxkIHBlcmZvcm0KLSMgYW55IHBlci1leGVjdXRhYmxlIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwKLSMgY29weWluZyBwZXItZXhlY3V0YWJsZSBtZXRhZGF0YSBmaWxlcyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KLQotewotICAjIFRoaXMgc3BhY2UgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjcyYjgxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgaW50byBhIHRhcmdldCB0byBwcm92aWRlIGEgcnVsZQotIyB0byBkZXBsb3kgYSB0YXJnZXQgb24gYSB0YXJnZXQgcGxhdGZvcm0uCi0jCi0jIEEgcGxhdGZvcm0ncyBzdGFyYm9hcmQvPHBvcnRfcGF0aD4vcGxhdGZvcm1fZGVwbG95Lmd5cGkgc2hvdWxkIHBlcmZvcm0gYW55Ci0jIHBlci1leGVjdXRhYmxlIGxvZ2ljIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIHBsYXRmb3JtLiBGb3IgZXhhbXBsZSwgY29weWluZwotIyBwZXItZXhlY3V0YWJsZSBtZXRhZGF0YSBmaWxlcyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeS4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jICd0YXJnZXRzJzogWwotIyAgICB7Ci0jICAgICAgJ3RhcmdldF9uYW1lJzogJ3RhcmdldF9kZXBsb3knLAotIyAgICAgICd0eXBlJzogJ25vbmUnLAotIyAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0jICAgICAgICAndGFyZ2V0JywKLSMgICAgICBdLAotIyAgICAgICd2YXJpYWJsZXMnOiB7Ci0jICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3RhcmdldCcsCi0jICAgICAgfSwKLSMgICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0jICAgIH0sCi0jICAgIC4uLgotIwotIyBGb3IgZXhhbXBsZToKLSMgICd0YXJnZXRzJzogWwotIyAgICB7Ci0jICAgICAgJ3RhcmdldF9uYW1lJzogJ25wbGInLAotIyAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSMgICAgICAnc291cmNlcyc6IFsuLi5dCi0jICAgIH0KLSMgICAgewotIyAgICAgICd0YXJnZXRfbmFtZSc6ICducGxiX2RlcGxveScsCi0jICAgICAgJ3R5cGUnOiAnbm9uZScsCi0jICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSMgICAgICAgICducGxiJywKLSMgICAgICBdLAotIyAgICAgICd2YXJpYWJsZXMnOiB7Ci0jICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ25wbGInLAotIyAgICAgIH0sCi0jICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotIyAgICB9LAotCi17Ci0KLSAgJ3ZhcmlhYmxlcycgOiB7Ci0gICAgIyBGbGFnIHRoYXQgd2lsbCBpbnN0cnVjdCBneXAgdG8gY3JlYXRlIGEgc3BlY2lhbCB0YXJnZXQgaW4gSURFcyBzdWNoIGFzCi0gICAgIyBWaXN1YWwgU3R1ZGlvIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGxhdW5jaGluZyBhIHRhcmdldC4KLSAgICAnaWRlX2RlcGxveV90YXJnZXQnOiAxLAotCi0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHBsYXRmb3JtIGRlcGxveSBhY3Rpb24gc2hvdWxkIHN0YWdlIGl0cyByZXN1bHRzCi0gICAgICAgICMgdG8gdG8gc2VwYXJhdGUgdGhlbSBmcm9tIG90aGVyIHRhcmdldHMuCi0gICAgICAgICd0YXJnZXRfZGVwbG95X2RpciUnOiAnPChzYl9kZXBsb3lfb3V0cHV0X2RpcikvPChleGVjdXRhYmxlX25hbWUpJywKLSAgICB9LAotCi0gICAgJ3RhcmdldF9kZXBsb3lfZGlyJSc6ICc8KHRhcmdldF9kZXBsb3lfZGlyKScsCi0KLSAgICAjIFN0YW1wIGZpbGUgdGhhdCB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIGRlcGxveSBkaXIgaXMgY3JlYXRlZC9jbGVhbmVkLgotICAgICd0YXJnZXRfZGVwbG95X3N0YW1wX2ZpbGUnOiAnPCh0YXJnZXRfZGVwbG95X2Rpcikuc3RhbXAnLAotCi0gICAgJ21ha2VfZGlycyc6ICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvbWFrZV9kaXJzLnB5JywKLSAgfSwKLQotICAnYWN0aW9ucyc6IFsKLSAgICB7Ci0gICAgICAnYWN0aW9uX25hbWUnOiAnY2xlYW5fZGVwbG95X2RpcicsCi0gICAgICAnbWVzc2FnZSc6ICdDbGVhbiBkZXBsb3kgZGlyOiA8KHRhcmdldF9kZXBsb3lfZGlyKScsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAnPChtYWtlX2RpcnMpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgJzwodGFyZ2V0X2RlcGxveV9zdGFtcF9maWxlKScsCi0gICAgICBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAnPChtYWtlX2RpcnMpJywKLSAgICAgICAgJy0tY2xlYW4nLAotICAgICAgICAnLS1zdGFtcD08KHRhcmdldF9kZXBsb3lfc3RhbXBfZmlsZSknLAotICAgICAgICAnPCh0YXJnZXRfZGVwbG95X2RpciknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotCi0gICMgSW5jbHVkZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgZ3lwaSBmaWxlIGluY2x1ZGUuIE5vdGUgdGhhdCB0aGUKLSAgIyBleHBhbmRlZCB2YWx1ZSB3aWxsIGRlZmF1bHQgdG8KLSAgIyAic3RhcmJvYXJkL2J1aWxkL2RlZmF1bHRfbm9fZGVwbG95Lmd5cGkiCi0gICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpLzwoaW5jbHVkZV9wYXRoX3BsYXRmb3JtX2RlcGxveV9neXBpKScgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9lY2hvLnB5IGIvc3RhcmJvYXJkL2J1aWxkL2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3YjVmMAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9idWlsZC9lY2hvLnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiQSBtb2R1bGUgdGhhdCBwcm92aWRlcyBwbGF0Zm9ybS1hZ25vc3RpYyBlY2hvIGZ1bmN0aW9uYWxpdHkgd2l0aCBweXRob24uIiIiCisKK2ltcG9ydCBzeXMKKworcHJpbnQoJyAnLmpvaW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9neXAgYi9zdGFyYm9hcmQvYnVpbGQvZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4ODY2YzE3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLQotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJXcmFwcGVyIHRvIGdlbmVyYXRlIGJ1aWxkIGZpbGVzIGZyb20gLmd5cCBmaWxlcy4iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGV4dHdyYXAKLQotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLWZyb20gc3RhcmJvYXJkLmJ1aWxkLmd5cF9ydW5uZXIgaW1wb3J0IEd5cFJ1bm5lcgotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGJ1aWxkCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgY29tbWFuZF9saW5lCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgY29uZmlnCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgbG9nX2xldmVsCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGF0aHMKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwbGF0Zm9ybQotCi0jIFJldHVybiB2YWx1ZXMgdXNlZCBieSBtYWluKCkuCi1SRVRWQUxfU1VDQ0VTUyA9IDAKLVJFVFZBTF9FUlJPUiA9IDEKLQotCi1kZWYgX0xpc3RBc1N0cmluZyhpdGVtcyk6Ci0gIHJldHVybiAnLCAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBpdGVtcykKLQotCi1kZWYgX1BhcnNlQ29tbWFuZExpbmVBcmd1bWVudHMoYXJndik6Ci0gICIiIlBhcnNlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIiIgotCi0gIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAotICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciwKLSAgICAgIGRlc2NyaXB0aW9uPXRleHR3cmFwLmRlZGVudChfX2RvY19fKSkKLQotICBkZWZhdWx0X2NvbmZpZywgZGVmYXVsdF9wbGF0Zm9ybSA9IGJ1aWxkLkdldERlZmF1bHRDb25maWdBbmRQbGF0Zm9ybSgpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY29uZmlnJywgZGVzdD0nYnVpbGRfY29uZmlncycsIG1ldGF2YXI9J0NPTkZJRycsCi0gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAotICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9Y29uZmlnLkdldEFsbCgpLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9KFtkZWZhdWx0X2NvbmZpZ10gaWYgZGVmYXVsdF9jb25maWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbmZpZy5HZXRBbGwoKSksCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmaWVzIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBTdXBwb3J0ZWQgJwotICAgICAgICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyBhcmUgJXMuIENhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgJwotICAgICAgICAgICAgICAgICAgICAgICd0aW1lcy4gQ3JlYXRlcyBhbGwgY29uZmlndXJhdGlvbnMgaWYgbm90aGluZyBpcyAnCi0gICAgICAgICAgICAgICAgICAgICAgJ2dpdmVuLicgJSBfTGlzdEFzU3RyaW5nKGNvbmZpZy5HZXRBbGwoKSkpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGxhdGZvcm0nLCBjaG9pY2VzPXBsYXRmb3JtLkdldEFsbCgpLAotICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J3BsYXRmb3JtJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHRfcGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9bm90IGRlZmF1bHRfcGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGFyZ2V0IHBsYXRmb3JtLiBTdXBwb3J0ZWQgcGxhdGZvcm1zIGFyZTogJXMuJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX0xpc3RBc1N0cmluZyhwbGF0Zm9ybS5HZXRBbGwoKSkpKQotCi0gIGd5cF9kZWJ1Z19vcHRpb25zID0gYnVpbGQuR3lwRGVidWdPcHRpb25zKCkKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kZWJ1ZycsIGRlc3Q9J2RlYnVnJywgbWV0YXZhcj0nREVCVUdNT0RFJywKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1neXBfZGVidWdfb3B0aW9ucyArIFsnYWxsJ10sCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHVybiBvbiBhIGRlYnVnZ2luZyBtb2RlIGZvciBkZWJ1Z2dpbmcgR1lQLiAnCi0gICAgICAgICAgICAgICAgICAgICAgJ1N1cHBvcnRlZCBtb2RlcyBhcmUgJXMgb3IgImFsbCIgZm9yIGFsbCBvZiAnCi0gICAgICAgICAgICAgICAgICAgICAgJ3RoZW0uJyAlIF9MaXN0QXNTdHJpbmcoZ3lwX2RlYnVnX29wdGlvbnMpKQotCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NoZWNrIGZvcm1hdCBvZiBneXAgZmlsZXMuJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFbmFibGVzIHZlcmJvc2UgbG9nZ2luZy4gRm9yIG1vcmUgY29udHJvbCBvdmVyIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgImxvZ2dpbmcgbGV2ZWwgdXNlICctLWxvZ19sZXZlbCcgaW5zdGVhZC4iKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYScsICctLWFwcGxpY2F0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdhcHBsaWNhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nY29iYWx0JywKLSAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgYXBwbGljYXRpb24gYmVpbmcgYnVpbHQsIGlmIGFueS4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdidWlsZF9maWxlJywgbmFyZ3M9Jz8nLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSb290IEdZUCBidWlsZCBmaWxlLiBEZWZhdWx0OiBzdGFyYm9hcmRfYWxsLmd5cCcpCi0KLSAgY29tbWFuZF9saW5lLkFkZExvZ2dpbmdBcmd1bWVudHMocGFyc2VyLCBkZWZhdWx0PSd3YXJuaW5nJykKLQotICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLQotCi1kZWYgbWFpbihhcmd2KToKLSAgb3B0aW9ucyA9IF9QYXJzZUNvbW1hbmRMaW5lQXJndW1lbnRzKGFyZ3YpCi0KLSAgbG9nX2xldmVsLkluaXRpYWxpemVMb2dnaW5nKG9wdGlvbnMpCi0KLSAgaWYgb3MuZW52aXJvbi5nZXQoJ0dZUF9ERUZJTkVTJyk6Ci0gICAgbG9nZ2luZy5lcnJvcignR1lQX0RFRklORVMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHN1cHBvcnRlZC4nKQotICAgIHJldHVybiBSRVRWQUxfRVJST1IKLQotICB0cnk6Ci0gICAgZ3lwX3J1bm5lciA9IEd5cFJ1bm5lcihvcHRpb25zKQotICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6Ci0gICAgbG9nZ2luZy5leGNlcHRpb24oJ0ZhaWxlZCB0byBjb25zdHJ1Y3QgR3lwUnVubmVyLicpCi0gICAgcmV0dXJuIFJFVFZBTF9FUlJPUgotCi0gIGd5cF9yZXR1cm4gPSBneXBfcnVubmVyLkJ1aWxkQ29uZmlncygpCi0gIGlmIGd5cF9yZXR1cm46Ci0gICAgbG9nZ2luZy5lcnJvcignR3lwIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWQuJywgZ3lwX3JldHVybikKLSAgICByZXR1cm4gZ3lwX3JldHVybgotCi0gIGxvZ2dpbmcuaW5mbygnRG9uZS4nKQotICByZXR1cm4gUkVUVkFMX1NVQ0NFU1MKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvZ3lwX2Z1bmN0aW9ucy5weSBiL3N0YXJib2FyZC9idWlsZC9neXBfZnVuY3Rpb25zLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzc0MjA5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC9neXBfZnVuY3Rpb25zLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiR3lwIGV4dGVuc2lvbnMsIGNhbGxlZCB3aXRoIHB5bW9kX2RvX21haW4uIiIiCi1pbXBvcnQgYXJncGFyc2UKLWltcG9ydCBnbG9iCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotaW1wb3J0IHN5cwotCi0KLSMgbGlmdGVkIGZyb20gc3RhbmRhcmQgbGliIHdlYmJyb3dzZXIucHkKLWRlZiBpc2V4ZWN1dGFibGUoY21kKToKLSAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBpbnB1dCBmaWxlIGlzIGFuIGV4ZWN1dGFibGUuIiIiCi0gIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6Ci0gICAgZXh0ZW5zaW9ucyA9ICgnLmV4ZScsICcuYmF0JywgJy5jbWQnKQotICAgIGNtZCA9IGNtZC5sb3dlcigpCi0gICAgaWYgY21kLmVuZHN3aXRoKGV4dGVuc2lvbnMpIGFuZCBvcy5wYXRoLmlzZmlsZShjbWQpOgotICAgICAgcmV0dXJuIGNtZAotICAgIGZvciBleHQgaW4gZXh0ZW5zaW9uczoKLSAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCArIGV4dCk6Ci0gICAgICAgIHJldHVybiBjbWQgKyBleHQKLSAgZWxzZToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpOgotICAgICAgbW9kZSA9IG9zLnN0YXQoY21kKVtzdGF0LlNUX01PREVdCi0gICAgICBpZiBtb2RlICYgKHN0YXQuU19JWFVTUiB8IHN0YXQuU19JWEdSUCB8IHN0YXQuU19JWE9USCk6Ci0gICAgICAgIHJldHVybiBjbWQKLQotCi1jbGFzcyBFeHRlbnNpb25Db21tYW5kUGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKLSAgIiIiSGVscGVyIGNsYXNzIGZvciBwYXJzaW5nIGFyZ3VtZW50cyB0byBleHRlbmRlZCBneXAgZnVuY3Rpb25zLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBsaXN0X2FyZ3MpOgotICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLl9faW5pdF9fKHNlbGYpCi0gICAgZm9yIGFyZyBpbiBsaXN0X2FyZ3M6Ci0gICAgICBzZWxmLmFkZF9hcmd1bWVudChhcmcpCi0KLSAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgotICAgIHByaW50KCdQYXJzZSBlcnJvciBpbiBneXBfZnVuY3Rpb25zLnB5OicgKyBtZXNzYWdlKQotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1BhcnNlIGVycm9yOicgKyBtZXNzYWdlKQotCi0KLWNsYXNzIEV4dGVuc2lvbnMob2JqZWN0KToKLSAgIiIiQ29udGFpbmVyIGNsYXNzIGZvciBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IGZvciBneXAuCi0KLSAgU3VwcG9ydHMgb3BlcmF0aW9ucyBzdWNoIGFzOgotICAgIC0gZmlsZSBnbG9iYmluZwotICAgIC0gY2hlY2tpbmcgZmlsZSBvciBkaXJlY3RvcnkgZXhpc3RlbmNlCi0gICAgLSBzdHJpbmcgbWFuaXB1bGF0aW9ucwotICAgIC0gcmV0cmlldmluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgICAtIHNlYXJjaGluZyBQQVRIIGFuZCBQWVRIT05QQVRIIGZvciBwcm9ncmFtcy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3YpOgotICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICBhbGxfY21kcyA9IFt4IGZvciB4IGluIGRpcihzZWxmKSBpZiBub3QgeC5zdGFydHN3aXRoKCdfJyldCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnY29tbWFuZCcsIGhlbHA9J0NvbW1hbmQgdG8gcnVuJywgY2hvaWNlcz1hbGxfY21kcykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlswOjFdKQotICAgIHNlbGYuYXJndiA9IGFyZ3ZbMTpdCi0gICAgc2VsZi5jb21tYW5kID0gYXJncy5jb21tYW5kCi0KLSAgZGVmIGNhbGwoc2VsZik6Ci0gICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgc2VsZi5jb21tYW5kKSgpCi0KLSAgZGVmIHdyYXBfd2luZG93c19wYXRoKHNlbGYpOgotICAgICIiIkZpeHVwIGEgd2luZG93cy1zdHlsZSBwYXRoIGJ5IGRlYWxpbmcgd2l0aCBzZXBhcmF0b3JzIGFuZCBzcGFjZXMuIiIiCi0gICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoJy8nLmpvaW4oc2VsZi5hcmd2KSkKLSAgICByZXQgPSBwYXRoLnJlcGxhY2Uob3Muc2VwLCAnLycpCi0gICAgcmV0ID0gJyInICsgcmV0LnN0cmlwKCkgKyAnIicKLSAgICByZXR1cm4gcmV0Ci0KLSAgZGVmIGZpbGVfZ2xvYihzZWxmKToKLSAgICAiIiJHbG9iIGZpbGVzIGluIGRpciwgd2l0aCBwYXR0ZXJuIGdsb2IuIiIiCi0gICAgYXJncyA9IEV4dGVuc2lvbkNvbW1hbmRQYXJzZXIoWydkaXInLCAncGF0dGVybiddKS5wYXJzZV9hcmdzKHNlbGYuYXJndikKLSAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oYXJncy5kaXIsIGFyZ3MucGF0dGVybikpCi0gICAgcmV0ID0gJycKLSAgICBmb3IgZiBpbiBnbG9iLmlnbG9iKHBhdGgpOgotICAgICAgcmV0ICs9IGYucmVwbGFjZShvcy5zZXAsICcvJykgKyAnICcKLSAgICByZXR1cm4gcmV0LnN0cmlwKCkKLQotICBkZWYgYmFzZW5hbWUoc2VsZik6Ci0gICAgIiIiQmFzZW5hbWUgb2YgbGlzdCBvZiBmaWxlcyIiIgotICAgIHBhcnNlciA9IEV4dGVuc2lvbkNvbW1hbmRQYXJzZXIoW10pCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5wdXRfbGlzdCcsIG5hcmdzPScqJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc2VsZi5hcmd2KQotICAgIHJldCA9IFtvcy5wYXRoLmJhc2VuYW1lKHgpIGZvciB4IGluIGFyZ3MuaW5wdXRfbGlzdF0KLSAgICByZXR1cm4gJyAnLmpvaW4ocmV0KQotCi0gIGRlZiByZXBsYWNlX2luX2xpc3Qoc2VsZik6Ci0gICAgIiIiU3RyaW5nIHJlcGxhY2UgaW4gYSBsaXN0IG9mIGFyZ3VtZW50cyIiIgotICAgIHBhcnNlciA9IEV4dGVuc2lvbkNvbW1hbmRQYXJzZXIoWydvbGQnLCAnbmV3J10pCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5wdXRfbGlzdCcsIG5hcmdzPScqJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Moc2VsZi5hcmd2KQotICAgIGlucCA9IGFyZ3MuaW5wdXRfbGlzdAotICAgIHJldHVybiAnICcuam9pbihbeC5yZXBsYWNlKGFyZ3Mub2xkLCBhcmdzLm5ldykgZm9yIHggaW4gaW5wXSkKLQotICBkZWYgZmlsZV9nbG9iX3N1YihzZWxmKToKLSAgICAiIiJHbG9iIGZpbGVzLCBidXQgcmV0dXJuIGZpbGVuYW1lcyB3aXRoIHN0cmluZyByZXBsYWNlIGZyb20tPnRvIGFwcGxpZWQuIiIiCi0gICAgYXJncyA9IEV4dGVuc2lvbkNvbW1hbmRQYXJzZXIoCi0gICAgICAgIFsnZGlyJywgJ3BhdHRlcm4nLCAnZnJvbV9zdHJpbmcnLCAndG9fc3RyaW5nJ10pLnBhcnNlX2FyZ3Moc2VsZi5hcmd2KQotICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihhcmdzLmRpciwgYXJncy5wYXR0ZXJuKSkKLSAgICByZXQgPSAnJwotICAgIGZvciBmIGluIGdsb2IuaWdsb2IocGF0aCk6Ci0gICAgICByZXQgKz0gZi5yZXBsYWNlKG9zLnNlcCwgJy8nKS5yZXBsYWNlKGFyZ3MuZnJvbV9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MudG9fc3RyaW5nKSArICcgJwotICAgIHJldHVybiByZXQuc3RyaXAoKQotCi0gIGRlZiBmaWxlX2V4aXN0cyhzZWxmKToKLSAgICAiIiJDaGVja3MgaWYgYSBmaWxlIGV4aXN0cywgcmV0dXJuaW5nIGEgc3RyaW5nICcxJyBpZiBzbywgb3IgJzAnLiIiIgotICAgIGFyZ3MgPSBFeHRlbnNpb25Db21tYW5kUGFyc2VyKFsnZmlsZSddKS5wYXJzZV9hcmdzKHNlbGYuYXJndikKLSAgICBmaWxlcGF0aCA9IGFyZ3MuZmlsZS5yZXBsYWNlKG9zLnNlcCwgJy8nKQotICAgIHJldCA9IG9zLnBhdGguaXNmaWxlKGZpbGVwYXRoKQotICAgIHJldHVybiBzdHIoaW50KHJldCkpCi0KLSAgZGVmIGRpcl9leGlzdHMoc2VsZik6Ci0gICAgIiIiQ2hlY2tzIGlmIGEgZGlyZWN0b3J5IGV4aXN0cywgcmV0dXJuaW5nIGEgc3RyaW5nICdUcnVlJyBvciAnRmFsc2UnLiIiIgotICAgIGFyZ3MgPSBFeHRlbnNpb25Db21tYW5kUGFyc2VyKFsnZGlyJ10pLnBhcnNlX2FyZ3Moc2VsZi5hcmd2KQotICAgIHJldHVybiBzdHIob3MucGF0aC5pc2RpcihhcmdzLmRpcikpCi0KLSAgZGVmIHN0cl91cHBlcihzZWxmKToKLSAgICAiIiJDb252ZXJ0cyBhbiBpbnB1dCBzdHJpbmcgdG8gdXBwZXIgY2FzZS4iIiIKLSAgICBpZiBzZWxmLmFyZ3Y6Ci0gICAgICBhcmdzID0gRXh0ZW5zaW9uQ29tbWFuZFBhcnNlcihbJ3N0ciddKS5wYXJzZV9hcmdzKHNlbGYuYXJndikKLSAgICAgIHJldHVybiBhcmdzLnN0ci51cHBlcigpCi0gICAgcmV0dXJuICcnCi0KLSAgZGVmIGZpbmRfcHJvZ3JhbShzZWxmKToKLSAgICAiIiJTZWFyY2hlcyBmb3IgdGhlIGlucHV0IHByb2dyYW0gbmFtZSAoLmV4ZSwgLmNtZCBvciAuYmF0KS4iIiIKLSAgICBhcmdzID0gRXh0ZW5zaW9uQ29tbWFuZFBhcnNlcihbJ3Byb2dyYW0nXSkucGFyc2VfYXJncyhzZWxmLmFyZ3YpCi0gICAgcGF0aHNfdG9fY2hlY2sgPSBbXQotICAgICMgQ29sbGVjdCBhbGwgcGF0aHMgaW4gUFlUSE9OUEFUSC4KLSAgICBmb3IgaSBpbiBzeXMucGF0aDoKLSAgICAgIHBhdGhzX3RvX2NoZWNrLmFwcGVuZChpLnJlcGxhY2Uob3Muc2VwLCAnLycpKQotICAgICMgVGhlbiBjb2xsZWN0IGFsbCBwYXRocyBpbiBQQVRILgotICAgIGZvciBpIGluIG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdChvcy5wYXRoc2VwKToKLSAgICAgIHBhdGhzX3RvX2NoZWNrLmFwcGVuZChpLnJlcGxhY2Uob3Muc2VwLCAnLycpKQotICAgICMgQ2hlY2sgYWxsIHRoZSBjb2xsZWN0ZWQgcGF0aHMgZm9yIHRoZSBwcm9ncmFtLgotICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX2NoZWNrOgotICAgICAgZXhlID0gb3MucGF0aC5qb2luKHBhdGgsIGFyZ3MucHJvZ3JhbSkKLSAgICAgIHByb2cgPSBpc2V4ZWN1dGFibGUoZXhlKQotICAgICAgaWYgcHJvZzoKLSAgICAgICAgcmV0dXJuIHByb2cucmVwbGFjZShvcy5zZXAsICcvJykKLSAgICAjIElmIG5vdCBpbiBQWVRIT05QQVRIIGFuZCBQQVRILCBjaGVjayB1cHdhcmRzIHVudGlsIHJvb3QuCi0gICAgIyBOb3RlOiBUaGlzIGlzIGEgcmFyZSBjYXNlLgotICAgIHJvb3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCi0gICAgcHJldmlvdXNfZGlyID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQotICAgIHdoaWxlIHJvb3RfZGlyIGFuZCByb290X2RpciAhPSBwcmV2aW91c19kaXI6Ci0gICAgICBleGUgPSBvcy5wYXRoLmpvaW4ocm9vdF9kaXIsIGFyZ3MucHJvZ3JhbSkKLSAgICAgIHByb2cgPSBpc2V4ZWN1dGFibGUoZXhlKQotICAgICAgaWYgcHJvZzoKLSAgICAgICAgcmV0dXJuIHByb2cucmVwbGFjZShvcy5zZXAsICcvJykKLSAgICAgIHByZXZpb3VzX2RpciA9IHJvb3RfZGlyCi0gICAgICByb290X2RpciA9IG9zLnBhdGguZGlybmFtZShyb290X2RpcikKLSAgICBsb2dnaW5nLmVycm9yKCdGYWlsZWQgdG8gZmluZCBwcm9ncmFtICJ7fSIuJy5mb3JtYXQoYXJncy5wcm9ncmFtKSkKLSAgICByZXR1cm4gTm9uZQotCi0gIGRlZiBnZXRlbnYoc2VsZik6Ci0gICAgIiIiR2V0cyB0aGUgc3RvcmVkIHZhbHVlIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiIiIgotICAgIGFyZ3MgPSBFeHRlbnNpb25Db21tYW5kUGFyc2VyKFsndmFyJ10pLnBhcnNlX2FyZ3Moc2VsZi5hcmd2KQotICAgIHZhbHVlID0gb3MuZ2V0ZW52KGFyZ3MudmFyKQotICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgcmV0dXJuIHZhbHVlLnN0cmlwKCkKLSAgICByZXR1cm4gJycKLQotCi1kZWYgRG9NYWluKGFyZ3YpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0gICIiIlNjcmlwdCBtYWluIGZ1bmN0aW9uLiIiIgotICByZXR1cm4gRXh0ZW5zaW9ucyhhcmd2KS5jYWxsKCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBwcmludChEb01haW4oc3lzLmFyZ3ZbMTpdKSkKLSAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9neXBfcnVubmVyLnB5IGIvc3RhcmJvYXJkL2J1aWxkL2d5cF9ydW5uZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYThmZjcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL2d5cF9ydW5uZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJXcmFwcGVyIHRvIGdlbmVyYXRlIGJ1aWxkIGZpbGVzIGZyb20gLmd5cCBmaWxlcy4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHNobGV4Ci1pbXBvcnQgc3lzCi0KLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYnVpbGQKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBsYXRmb3JtCi0KLQotZGVmIF9EZWR1cGUoc2VxdWVuY2UpOgotICB2aXNpdGVkID0gc2V0KCkKLSAgcmV0dXJuIFt4IGZvciB4IGluIHNlcXVlbmNlIGlmIG5vdCAoeCBpbiB2aXNpdGVkIG9yIHZpc2l0ZWQuYWRkKHgpKV0KLQotCi1kZWYgX0dldEhvc3RPUygpOgotICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBob3N0aW5nIE9TLiIiIgotICBob3N0X29zX25hbWVzID0gewotICAgICAgJ2xpbnV4Mic6ICdsaW51eCcsCi0gICAgICAnbGludXgzJzogJ2xpbnV4JywKLSAgICAgICdkYXJ3aW4nOiAnbWFjJywKLSAgICAgICd3aW4zMic6ICd3aW4nLAotICB9Ci0KLSAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiBob3N0X29zX25hbWVzOgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKLSAgICAgIGxvZ2dpbmcuZXJyb3IoJ1RoZXJlIG1heSBiZSBzZXZlcmFsIGluY29tcGF0aWJpbGl0aWVzIHdoZW4gdHJ5aW5nIHRvICcKLSAgICAgICAgICAgICAgICAgICAgJ2J1aWxkIGZyb20gd2l0aGluIGN5Z3dpbi4gV2hlbiB1c2luZyBhIGJhc2ggc2hlbGwgaXMgJwotICAgICAgICAgICAgICAgICAgICAncHJlZmVycmVkLCBjb25zaWRlciB1c2luZyBtc3lzZ2l0IGluc3RlYWQgKHNlZSAnCi0gICAgICAgICAgICAgICAgICAgICdodHRwczovL21zeXNnaXQuZ2l0aHViLmlvKS4nKQotICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5zdXBwb3J0ZWQgcGxhdGZvcm06ICVzJyAlIHN5cy5wbGF0Zm9ybSkKLQotICByZXR1cm4gaG9zdF9vc19uYW1lc1tzeXMucGxhdGZvcm1dCi0KLQotZGVmIF9BcHBlbmRJbmNsdWRlcyhpbmNsdWRlcywgYXJncyk6Ci0gIGZvciBpbmNsdWRlIGluIGluY2x1ZGVzOgotICAgIGFyZ3MuYXBwZW5kKCctSXt9Jy5mb3JtYXQoaW5jbHVkZSkpCi0KLQotZGVmIF9BcHBlbmRWYXJpYWJsZXModmFyaWFibGVzLCBhcmdzKToKLSAgZm9yIHZhciBpbiB2YXJpYWJsZXM6Ci0gICAgYXJncy5hcHBlbmQoJy1Ee309e30nLmZvcm1hdCh2YXIsIHZhcmlhYmxlc1t2YXJdKSkKLQotCi1kZWYgX0FwcGVuZEdlbmVyYXRvclZhcmlhYmxlcyh2YXJpYWJsZXMsIGFyZ3MpOgotICBmb3IgdmFyIGluIHZhcmlhYmxlczoKLSAgICBhcmdzLmFwcGVuZCgnLUd7fT17fScuZm9ybWF0KHZhciwgdmFyaWFibGVzW3Zhcl0pKQotCi0KLWNsYXNzIEd5cFJ1bm5lcihvYmplY3QpOgotICAiIiJSZXNwb25zaWJsZSBmb3IgcnVubmluZyBHWVAuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgotICAgIG9wdGlvbnMuYnVpbGRfY29uZmlncyA9IF9EZWR1cGUob3B0aW9ucy5idWlsZF9jb25maWdzKQotICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKLSAgICBzZWxmLmNvbW1vbl9hcmdzID0gW10KLSAgICBzZWxmLnBsYXRmb3JtX2NvbmZpZ3VyYXRpb24gPSBidWlsZC5HZXRQbGF0Zm9ybUNvbmZpZyhvcHRpb25zLnBsYXRmb3JtKQotICAgIGlmIG5vdCBzZWxmLnBsYXRmb3JtX2NvbmZpZ3VyYXRpb246Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBsb2FkIFBsYXRmb3JtQ29uZmlndXJhdGlvbi4nKQotCi0gICAgZW52X3ZhcnMgPSBzZWxmLnBsYXRmb3JtX2NvbmZpZ3VyYXRpb24uR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgIHNlbGYuYXBwX2NvbmZpZ3VyYXRpb24gPSAoCi0gICAgICAgIHNlbGYucGxhdGZvcm1fY29uZmlndXJhdGlvbi5HZXRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24oCi0gICAgICAgICAgICBvcHRpb25zLmFwcGxpY2F0aW9uKSkKLQotICAgIGlmIG5vdCBzZWxmLmFwcF9jb25maWd1cmF0aW9uOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmFibGUgdG8gbG9hZCBhbiBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uJykKLQotICAgIHNlbGYucGxhdGZvcm1fY29uZmlndXJhdGlvbi5TZXR1cFBsYXRmb3JtVG9vbHMob3B0aW9ucy5idWlsZF9udW1iZXIpCi0KLSAgICBhcHBfZW52X3ZhcnMgPSBzZWxmLmFwcF9jb25maWd1cmF0aW9uLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICBpZiBhcHBfZW52X3ZhcnM6Ci0gICAgICBlbnZfdmFycy51cGRhdGUoYXBwX2Vudl92YXJzKQotICAgIG9zLmVudmlyb24udXBkYXRlKGVudl92YXJzKQotICAgIHNlbGYuX01ha2VDb21tb25Bcmd1bWVudHMoKQotCi0gIGRlZiBCdWlsZENvbmZpZ3Moc2VsZik6Ci0gICAgIiIiQnVpbGRzIGFsbCBjb25maWdzIHNwZWNpZmllZCBpbiB0aGUgb3B0aW9ucy4iIiIKLSAgICBpZiBub3Qgc2VsZi5vcHRpb25zLmJ1aWxkX2NvbmZpZ3M6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vIGJ1aWxkIGNvbmZpZyB0eXBlcyBzcGVjaWZpZWQuJykKLQotICAgIGZvciBjb25maWdfbmFtZSBpbiBzZWxmLm9wdGlvbnMuYnVpbGRfY29uZmlnczoKLSAgICAgIGxvZ2dpbmcuaW5mbygnQnVpbGRpbmcgY29uZmlnOiAlcycsIGNvbmZpZ19uYW1lKQotICAgICAgcmVzdWx0ID0gc2VsZi5CdWlsZENvbmZpZyhjb25maWdfbmFtZSkKLSAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgIHJldHVybiAwCi0KLSAgZGVmIEJ1aWxkQ29uZmlnKHNlbGYsIGNvbmZpZ19uYW1lKToKLSAgICAiIiJCdWlsZHMgdGhlIEdZUCBmaWxlIGZvciBhIGdpdmVuIGNvbmZpZy4iIiIKLQotICAgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGNvbW1vbiBhcmd1bWVudHMuCi0gICAgYXJncyA9IHNlbGYuY29tbW9uX2FyZ3NbOl0KLQotICAgIGxvZ2dpbmcuaW5mbygnQnVpbGQgTnVtYmVyOiAlZCcsIHNlbGYub3B0aW9ucy5idWlsZF9udW1iZXIpCi0gICAgYnVpbGRfdmFyaWFibGVzID0gewotICAgICAgICAnQlVJTERfTlVNQkVSJzogc2VsZi5vcHRpb25zLmJ1aWxkX251bWJlciwKLSAgICB9Ci0gICAgX0FwcGVuZFZhcmlhYmxlcyhidWlsZF92YXJpYWJsZXMsIGFyZ3MpCi0KLSAgICBjb25maWd1cmF0aW9uX3ZhcmlhYmxlcyA9IHsKLSAgICAgICAgIyBEZWZhdWx0IGRlcGxveSBzY3JpcHQuIENlcnRhaW4gcGxhdGZvcm1zIG1heSBjaG9vc2UgdG8gY2hhbmdlIHRoaXMuCi0gICAgICAgICdpbmNsdWRlX3BhdGhfcGxhdGZvcm1fZGVwbG95X2d5cGknOgotICAgICAgICAgICAgJ3N0YXJib2FyZC9idWlsZC9kZWZhdWx0X25vX2RlcGxveS5neXBpJwotICAgIH0KLSAgICBjb25maWd1cmF0aW9uX3ZhcmlhYmxlcy51cGRhdGUoCi0gICAgICAgIHNlbGYucGxhdGZvcm1fY29uZmlndXJhdGlvbi5HZXRWYXJpYWJsZXMoY29uZmlnX25hbWUpKQotICAgIGFwcF92YXJpYWJsZXMgPSBzZWxmLmFwcF9jb25maWd1cmF0aW9uLkdldFZhcmlhYmxlcyhjb25maWdfbmFtZSkKLSAgICBpZiBhcHBfdmFyaWFibGVzOgotICAgICAgY29uZmlndXJhdGlvbl92YXJpYWJsZXMudXBkYXRlKGFwcF92YXJpYWJsZXMpCi0gICAgX0FwcGVuZFZhcmlhYmxlcyhjb25maWd1cmF0aW9uX3ZhcmlhYmxlcywgYXJncykKLQotICAgICMgQWRkIHRoZSBzeW1ib2xpemVyIHBhdGggZm9yIEFTQU4gdG8gYWxsb3cgdHJhbnNsYXRpb24gb2YgY2FsbHN0YWNrcy4KLSAgICBhc2FuX3N5bWJvbGl6ZXJfcGF0aCA9ICcnCi0gICAgaWYgY29uZmlndXJhdGlvbl92YXJpYWJsZXMuZ2V0KCd1c2VfYXNhbicsIDApID09IDE6Ci0gICAgICBjb21waWxlcl9jb21tYW5kbGluZSA9IHNobGV4LnNwbGl0KG9zLmVudmlyb24uZ2V0KCdDQycsICcnKSkKLSAgICAgIGZvciBwYXRoIGluIGNvbXBpbGVyX2NvbW1hbmRsaW5lOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICB0ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHBhdGgpLCAnbGx2bS1zeW1ib2xpemVyJykKLSAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0ZXN0X3BhdGgpOgotICAgICAgICAgICAgYXNhbl9zeW1ib2xpemVyX3BhdGggPSB0ZXN0X3BhdGgKLSAgICAgICAgICAgIGJyZWFrCi0gICAgYXNhbl92YXJpYWJsZXMgPSB7Ci0gICAgICAgICdhc2FuX3N5bWJvbGl6ZXJfcGF0aCc6IGFzYW5fc3ltYm9saXplcl9wYXRoLAotICAgIH0KLSAgICBfQXBwZW5kVmFyaWFibGVzKGFzYW5fdmFyaWFibGVzLCBhcmdzKQotCi0gICAgIyBBZGQgY29uZmlnIHNwZWNpZmljIGdlbmVyYXRvciB2YXJpYWJsZXMuCi0gICAgZ2VuZXJhdG9yX2NvbmZpZyA9ICd7fV97fScuZm9ybWF0KHNlbGYub3B0aW9ucy5wbGF0Zm9ybSwgY29uZmlnX25hbWUpCi0KLSAgICBnZW5lcmF0b3JfdmFyaWFibGVzID0gewotICAgICAgICAnY29uZmlnJzogZ2VuZXJhdG9yX2NvbmZpZywKLSAgICB9Ci0gICAgZ2VuZXJhdG9yX3ZhcmlhYmxlcy51cGRhdGUoCi0gICAgICAgIHNlbGYucGxhdGZvcm1fY29uZmlndXJhdGlvbi5HZXRHZW5lcmF0b3JWYXJpYWJsZXMoY29uZmlnX25hbWUpKQotICAgIGFwcF9nZW5lcmF0b3JfdmFyaWFibGVzID0gKAotICAgICAgICBzZWxmLmFwcF9jb25maWd1cmF0aW9uLkdldEdlbmVyYXRvclZhcmlhYmxlcyhjb25maWdfbmFtZSkpCi0gICAgaWYgYXBwX2dlbmVyYXRvcl92YXJpYWJsZXM6Ci0gICAgICBnZW5lcmF0b3JfdmFyaWFibGVzLnVwZGF0ZShhcHBfZ2VuZXJhdG9yX3ZhcmlhYmxlcykKLSAgICBfQXBwZW5kR2VuZXJhdG9yVmFyaWFibGVzKGdlbmVyYXRvcl92YXJpYWJsZXMsIGFyZ3MpCi0KLSAgICBidWlsZF9maWxlID0gc2VsZi5vcHRpb25zLmJ1aWxkX2ZpbGUKLSAgICBpZiBub3QgYnVpbGRfZmlsZToKLSAgICAgIGJ1aWxkX2ZpbGUgPSBzZWxmLmFwcF9jb25maWd1cmF0aW9uLkdldERlZmF1bHRUYXJnZXRCdWlsZEZpbGUoKQotCi0gICAgaWYgbm90IGJ1aWxkX2ZpbGU6Ci0gICAgICBidWlsZF9maWxlID0gc2VsZi5wbGF0Zm9ybV9jb25maWd1cmF0aW9uLkdldERlZmF1bHRUYXJnZXRCdWlsZEZpbGUoKQotCi0gICAgaWYgbm90IGJ1aWxkX2ZpbGU6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgdGFyZ2V0IEdZUCBmaWxlLicpCi0KLSAgICAjIFRoYXQgdGFyZ2V0IGJ1aWxkIGZpbGUgZ29lcyBsYXN0LgotICAgIGFyZ3MuYXBwZW5kKGJ1aWxkX2ZpbGUpCi0gICAgbG9nZ2luZy5kZWJ1ZygnR1lQIGFyZ3VtZW50czogJXMnLCBhcmdzKQotICAgIHJldHVybiBidWlsZC5HZXRHeXAoKS5tYWluKGFyZ3MpCi0KLSAgZGVmIF9NYWtlQ29tbW9uQXJndW1lbnRzKHNlbGYpOgotICAgICIiIk1ha2VzIGEgbGlzdCBvZiBHWVAgYXJndW1lbnRzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgY29uZmlndXJhdGlvbnMuIiIiCi0KLSAgICBwbGF0Zm9ybV9uYW1lID0gc2VsZi5wbGF0Zm9ybV9jb25maWd1cmF0aW9uLkdldE5hbWUoKQotICAgIGlmIG5vdCBwbGF0Zm9ybS5Jc1ZhbGlkKHBsYXRmb3JtX25hbWUpOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIHBsYXRmb3JtOiAlcycgJSBwbGF0Zm9ybV9uYW1lKQotCi0gICAgc291cmNlX3RyZWVfZGlyID0gcGF0aHMuUkVQT1NJVE9SWV9ST09UCi0gICAgc2VsZi5jb21tb25fYXJncyA9IFsKLSAgICAgICAgIyBTZXQgdGhlIGJ1aWxkIGZvcm1hdC4KLSAgICAgICAgJy0tZm9ybWF0PXt9LXt9Jy5mb3JtYXQoc2VsZi5wbGF0Zm9ybV9jb25maWd1cmF0aW9uLkdldEJ1aWxkRm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWUpLAotCi0gICAgICAgICMgU2V0IHRoZSBkZXB0aCBhcmd1bWVudCB0byB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeS4gVGhpcyB3aWxsIGRlZmluZQotICAgICAgICAjIHRoZSBERVBUSCB2YXJpYWJsZSB3aGljaCBpcyB0aGUgcmVsYXRpdmUgcGF0aCBiZXR3ZWVuIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgIyBjb250YWluaW5nIHRoZSBwcm9jZXNzZWQgYnVpbGQgZmlsZSBhbmQgdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkuCi0gICAgICAgICctLWRlcHRoPXt9Jy5mb3JtYXQoc291cmNlX3RyZWVfZGlyKSwKLQotICAgICAgICAjIFNldCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAgICAgICAgJy0tdG9wbGV2ZWwtZGlyPXt9Jy5mb3JtYXQoc291cmNlX3RyZWVfZGlyKSwKLSAgICBdCi0KLSAgICAjIFBhc3MgdGhyb3VnaCB0aGUgZGVidWcgb3B0aW9ucy4KLSAgICBmb3IgZGVidWcgaW4gc2VsZi5vcHRpb25zLmRlYnVnOgotICAgICAgc2VsZi5jb21tb25fYXJncy5hcHBlbmQoJy0tZGVidWc9JXMnICUgZGVidWcpCi0KLSAgICBpZiBzZWxmLm9wdGlvbnMuY2hlY2s6Ci0gICAgICBzZWxmLmNvbW1vbl9hcmdzLmFwcGVuZCgnLS1jaGVjaycpCi0KLSAgICAjIEFwcGVuZCBjb21tb24gR1lQIHZhcmlhYmxlcy4KLSAgICBjb21tb25fdmFyaWFibGVzID0gewotICAgICAgICAnT1MnOiAnc3RhcmJvYXJkJywKLSAgICAgICAgJ0NDX0hPU1QnOiBvcy5lbnZpcm9uLmdldCgnQ0NfSE9TVCcsIG9zLmVudmlyb24uZ2V0KCdDQycsICcnKSksCi0gICAgICAgICdob3N0X29zJzogX0dldEhvc3RPUygpLAotICAgICAgICAnc3RhcmJvYXJkX3BhdGgnOiBvcy5wYXRoLnJlbHBhdGgocGxhdGZvcm0uR2V0KHBsYXRmb3JtX25hbWUpLnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdHJlZV9kaXIpLAotICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX25hbWUnOiBwbGF0Zm9ybV9uYW1lLAotICAgIH0KLQotICAgIF9BcHBlbmRWYXJpYWJsZXMoY29tbW9uX3ZhcmlhYmxlcywgc2VsZi5jb21tb25fYXJncykKLQotICAgICMgQXBwZW5kIGdlbmVyYXRvciB2YXJpYWJsZXMuCi0gICAgZ2VuZXJhdG9yX3ZhcmlhYmxlcyA9IHsKLSAgICAgICAgIyBTZXQgdGhlIG91dHB1dCBmb2xkZXIgbmFtZTsgYWZmZWN0cyBhbGwgZ2VuZXJhdG9ycyBidXQgTVNWUy4KLSAgICAgICAgJ291dHB1dF9kaXInOiAnb3V0JywKLSAgICB9Ci0gICAgX0FwcGVuZEdlbmVyYXRvclZhcmlhYmxlcyhnZW5lcmF0b3JfdmFyaWFibGVzLCBzZWxmLmNvbW1vbl9hcmdzKQotCi0gICAgIyBBcHBlbmQgR1lQSSBpbmNsdWRlcyB3aGljaCB3aWxsIGJlIGluY2x1ZGVkIGJ5IEdZUCBiZWZvcmUgYW55IHByb2Nlc3NlZAotICAgICMgYnVpbGQgZmlsZS4KLSAgICBneXBfaW5jbHVkZXMgPSBbCi0gICAgICAgIG9zLnBhdGguam9pbihwYXRocy5SRVBPU0lUT1JZX1JPT1QsICdzdGFyYm9hcmQnLCAnYnVpbGQnLAotICAgICAgICAgICAgICAgICAgICAgJ2Jhc2VfY29uZmlndXJhdGlvbi5neXBpJyksCi0KLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgZGVwZW5kZW5jeSBvbiBjb21tb24uZ3lwaSBieSBtb3ZpbmcgdGhlIHJlcXVpcmVkIGJpdHMKLSAgICAgICAgIyBpbnRvIGJhc2VfY29uZmlndXJhdGlvbi5neXBpLgotICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aHMuUkVQT1NJVE9SWV9ST09ULCAnYnVpbGRfZ3lwJywgJ2NvbW1vbi5neXBpJyksCi0gICAgXQotICAgIGd5cF9pbmNsdWRlcy5leHRlbmQoc2VsZi5wbGF0Zm9ybV9jb25maWd1cmF0aW9uLkdldEluY2x1ZGVzKCkpCi0gICAgaWYgc2VsZi5hcHBfY29uZmlndXJhdGlvbjoKLSAgICAgIGd5cF9pbmNsdWRlc1s6MF0gPSBzZWxmLmFwcF9jb25maWd1cmF0aW9uLkdldFByZUluY2x1ZGVzKCkKLSAgICAgIGd5cF9pbmNsdWRlcy5leHRlbmQoc2VsZi5hcHBfY29uZmlndXJhdGlvbi5HZXRQb3N0SW5jbHVkZXMoKSkKLSAgICBfQXBwZW5kSW5jbHVkZXMoZ3lwX2luY2x1ZGVzLCBzZWxmLmNvbW1vbl9hcmdzKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL21ha2VfZGlycy5weSBiL3N0YXJib2FyZC9idWlsZC9tYWtlX2RpcnMucHkKaW5kZXggZjc3N2MwMy4uNmZiMjY4ZSAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL21ha2VfZGlycy5weQorKysgYi9zdGFyYm9hcmQvYnVpbGQvbWFrZV9kaXJzLnB5CkBAIC0xOCwxOCArMTgsMTkgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCwgcmVsYXRpdmUtaW1wb3J0CiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcG9ydF9zeW1saW5rCiAKIAogZGVmIG1haW4oKToKICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249X19kb2NfXykKICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctYycsICctLWNsZWFuJywKKyAgICAgICctYycsCisgICAgICAnLS1jbGVhbicsCiAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgaGVscD0nRGVsZXRlIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgZGlyZWN0b3J5LicpCiAgIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLXMnLCAnLS1zdGFtcF9maWxlJywKKyAgICAgICctcycsCisgICAgICAnLS1zdGFtcF9maWxlJywKICAgICAgIHR5cGU9c3RyLAogICAgICAgaGVscD0nUGF0aCB0byB0aGUgc3RhbXAgZmlsZSB0byB0b3VjaCBhZnRlciBtYWtpbmcgdGhlIGRpcmVjdG9yeS4nKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdkaXJlY3RvcnknLCBoZWxwPSdQYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gYmUgY3JlYXRlZC4nKQpAQCAtNDIsNyArNDMsNyBAQAogICAgIG9zLm1ha2VkaXJzKGFyZ3VtZW50cy5kaXJlY3RvcnkpCiAKICAgaWYgYXJndW1lbnRzLnN0YW1wX2ZpbGU6Ci0gICAgb3Blbihhcmd1bWVudHMuc3RhbXBfZmlsZSwgJ2EnKS5jbG9zZSgpCisgICAgb3Blbihhcmd1bWVudHMuc3RhbXBfZmlsZSwgJ2EnKS5jbG9zZSgpICAjIHB5bGludDogZGlzYWJsZT1jb25zaWRlci11c2luZy13aXRoCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggYTM2NTQzNi4uY2JkMzI3MyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24ucHkKQEAgLTE4LDE1ICsxOCw4IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0LCByZWxhdGl2ZS1pbXBvcnQKIGZyb20gc3RhcmJvYXJkLmJ1aWxkLmFwcGxpY2F0aW9uX2NvbmZpZ3VyYXRpb24gaW1wb3J0IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbgotZnJvbSBzdGFyYm9hcmQub3B0aW9uYWwgaW1wb3J0IGdldF9vcHRpb25hbF90ZXN0cwotZnJvbSBzdGFyYm9hcmQuc2FiaSBpbXBvcnQgc2FiaQotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNhY2hlCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgZW52aXJvbm1lbnQKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBsYXRmb3JtCi1mcm9tIHN0YXJib2FyZC50b29scy5jb25maWcgaW1wb3J0IENvbmZpZworaW1wb3J0IHN0YXJib2FyZF9jb25maWd1cmF0aW9uICAjIFNob3VsZCBiZSBhdCByb290IG9mIHNvdXJjZSB0cmVlCiAKIAogZGVmIF9HZXRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25DbGFzcyhhcHBsaWNhdGlvbl9wYXRoKToKQEAgLTU4LDM1ICs1MSwxMSBAQAogICBTaG91bGQgYmUgZGVyaXZlZCBieSBwbGF0Zm9ybSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KICAgIiIiCiAKLSAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICBwbGF0Zm9ybV9uYW1lLAotICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBkaXJlY3Rvcnk9Tm9uZSk6CisgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybV9uYW1lKToKICAgICBzZWxmLl9wbGF0Zm9ybV9uYW1lID0gcGxhdGZvcm1fbmFtZQotICAgIHNlbGYuX2FzYW5fZGVmYXVsdCA9IDEgaWYgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQgZWxzZSAwCi0gICAgaWYgZGlyZWN0b3J5OgotICAgICAgc2VsZi5fZGlyZWN0b3J5ID0gZGlyZWN0b3J5Ci0gICAgZWxzZToKLSAgICAgIHNlbGYuX2RpcmVjdG9yeSA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBzZWxmLl9kaXJlY3RvcnkgPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAgICAgc2VsZi5fYXBwbGljYXRpb25fY29uZmlndXJhdGlvbiA9IE5vbmUKICAgICBzZWxmLl9hcHBsaWNhdGlvbl9jb25maWd1cmF0aW9uX3NlYXJjaF9wYXRoID0gW3NlbGYuX2RpcmVjdG9yeV0KLSAgICAjIERlZmF1bHQgYnVpbGQgYWNjZWxlcmF0b3IgaXMgY2NhY2hlLgotICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgPSBzZWxmLkdldEJ1aWxkQWNjZWxlcmF0b3IoY2FjaGUuQWNjZWxlcmF0b3IuQ0NBQ0hFKQotCi0gIGRlZiBHZXRCdWlsZEFjY2VsZXJhdG9yKHNlbGYsIGFjY2VsZXJhdG9yKToKLSAgICAiIiJSZXR1cm5zIHRoZSBidWlsZCBhY2NlbGVyYXRvciBuYW1lLiIiIgotICAgIGJ1aWxkX2FjY2VsZXJhdG9yID0gY2FjaGUuQ2FjaGUoYWNjZWxlcmF0b3IpCi0gICAgbmFtZSA9IGJ1aWxkX2FjY2VsZXJhdG9yLkdldE5hbWUoKQotICAgIGlmIGJ1aWxkX2FjY2VsZXJhdG9yLlVzZSgpOgotICAgICAgbG9nZ2luZy5pbmZvKCdVc2luZyAlcyBidWlsZCBhY2NlbGVyYXRvci4nLCBuYW1lKQotICAgICAgcmV0dXJuIG5hbWUKLSAgICBlbHNlOgotICAgICAgbG9nZ2luZy5pbmZvKCdOb3QgdXNpbmcgJXMgYnVpbGQgYWNjZWxlcmF0b3IuJywgbmFtZSkKLSAgICAgIHJldHVybiAnJwotCi0gIGRlZiBHZXRCdWlsZEZvcm1hdChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkZXNpcmVkIGJ1aWxkIGZvcm1hdC4iIiIKLSAgICByZXR1cm4gJ25pbmphJwogCiAgIGRlZiBHZXROYW1lKHNlbGYpOgogICAgICIiIlJldHVybnMgdGhlIHBsYXRmb3JtIG5hbWUuIiIiCkBAIC0xNDMsNyArMTEyLDggQEAKICAgICAgICAgICBicmVhawogCiAgICAgICBpZiBub3QgY29uZmlndXJhdGlvbl9jbGFzczoKLSAgICAgICAgY29uZmlndXJhdGlvbl9jbGFzcyA9IGVudmlyb25tZW50LkdldEFwcGxpY2F0aW9uQ2xhc3MoYXBwbGljYXRpb25fbmFtZSkKKyAgICAgICAgY29uZmlndXJhdGlvbl9jbGFzcyA9IHN0YXJib2FyZF9jb25maWd1cmF0aW9uLkFQUExJQ0FUSU9OUy5nZXQoCisgICAgICAgICAgICBhcHBsaWNhdGlvbl9uYW1lKQogICAgICAgICBpZiBjb25maWd1cmF0aW9uX2NsYXNzOgogICAgICAgICAgIGxvZ2dpbmcuaW5mbygnVXNpbmcgZGVmYXVsdCBBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZm9yICVzLicsCiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX25hbWUpCkBAIC0xNTgsMTY3ICsxMjgsNiBAQAogICAgIGFzc2VydCBzZWxmLl9hcHBsaWNhdGlvbl9jb25maWd1cmF0aW9uCiAgICAgcmV0dXJuIHNlbGYuX2FwcGxpY2F0aW9uX2NvbmZpZ3VyYXRpb24KIAotICBkZWYgU2V0dXBQbGF0Zm9ybVRvb2xzKHNlbGYsIGJ1aWxkX251bWJlcik6Ci0gICAgIiIiSW5zdGFsbCB0b29scywgU0RLcywgZXRjLgotCi0gICAgbmVlZGVkIHRvIGJ1aWxkIGZvciB0aGUgcGxhdGZvcm0uCi0KLSAgICBJbnN0YWxscyB0b29scyBuZWVkZWQgdG8gYnVpbGQgZm9yIHRoaXMgcGxhdGZvcm0sIHBvc3NpYmx5IGRvd25sb2FkaW5nCi0gICAgYW5kL29yIGludGVyYWN0aW5nIHdpdGggdGhlIHVzZXIgdG8gZG8gc28uIFJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUKLSAgICB0b29scyBjYW4ndCBiZSBpbnN0YWxsZWQgb3Igc29tZXRoaW5nIGlzIHdyb25nIHRoYXQgd2lsbCBwcmV2ZW50IGJ1aWxkaW5nLgotCi0gICAgQXJnczoKLSAgICAgIGJ1aWxkX251bWJlcjogVGhlIG51bWJlciBpZGVudGlmeWluZyB0aGlzIGJ1aWxkLCBnZW5lcmF0ZWQgYXQgR1lQIHRpbWUuCi0gICAgIiIiCi0gICAgcGFzcwotCi0gIGRlZiBHZXRJbmNsdWRlcyhzZWxmKToKLSAgICAiIiJHZXQgYSBsaXN0IG9mIGFic29sdXRlIHBhdGhzIHRvIGd5cGkgZmlsZXMgdG8gaW5jbHVkZSBpbiBvcmRlci4KLQotICAgIFRoZXNlIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgYnkgR1lQIGJlZm9yZSBhbnkgcHJvY2Vzc2VkIC5neXAgZmlsZS4gVGhlCi0gICAgYXBwbGljYXRpb24gbWF5IGFkZCBtb3JlIGd5cGkgZmlsZXMgdG8gYmUgcHJvY2Vzc2VkIGJlZm9yZSBvciBhZnRlciB0aGUKLSAgICBmaWxlcyBzcGVjaWZpZWQgYnkgdGhpcyBmdW5jdGlvbi4KLQotICAgIFJldHVybnM6Ci0gICAgICBBbiBvcmRlcmVkIGxpc3QgY29udGFpbmluZyBhYnNvbHV0ZSBwYXRocyB0byAuZ3lwaSBmaWxlcy4KLSAgICAiIiIKLSAgICBwbGF0Zm9ybV9pbmZvID0gcGxhdGZvcm0uR2V0KHNlbGYuR2V0TmFtZSgpKQotICAgIGlmIG5vdCBwbGF0Zm9ybV9pbmZvOgotICAgICAgcmV0dXJuIFtdCi0KLSAgICByZXR1cm4gW29zLnBhdGguam9pbihwbGF0Zm9ybV9pbmZvLnBhdGgsICdneXBfY29uZmlndXJhdGlvbi5neXBpJyldCi0KLSAgZGVmIEdldEVudmlyb25tZW50VmFyaWFibGVzKHNlbGYpOgotICAgICIiIkdldCBhIE1hcHBpbmcgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzLgotCi0gICAgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBzZXQgYmVmb3JlIGNhbGxpbmcKLSAgICBHWVAgYW5kIGNhbiBiZSB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIEdZUCBiZWhhdmlvci4gVGhleSB3aWxsIG92ZXJyaWRlIGFueQotICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoZSBjYWxsaW5nIGVudmlyb25tZW50LCBvciBhbnkKLSAgICB0aGF0IGFyZSBzZXQgYnkgZGVmYXVsdC4gVGhleSBtYXkgYmUgb3ZlcnJpZGRlbiBmdXJ0aGVyIGJ5IHRoZSBhcHBsaWNhdGlvbgotICAgIGNvbmZpZ3VyYXRpb24uCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICAgICIiIgotICAgIHJldHVybiB7fQotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlnX25hbWUsIHVzZV9jbGFuZz0wKToKLSAgICAiIiJHZXQgYSBNYXBwaW5nIG9mIEdZUCB2YXJpYWJsZSBvdmVycmlkZXMuCi0KLSAgICBHZXQgYSBNYXBwaW5nIG9mIEdZUCB2YXJpYWJsZSBuYW1lcyB0byB2YWx1ZXMuIEFueSBkZWZpbmVkIHZhbHVlcyB3aWxsCi0gICAgb3ZlcnJpZGUgYW55IHZhbHVlcyBkZWZpbmVkIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gdGhlbXNlbHZlcyBieSBvdmVycmlkZGVuIGJ5Ci0gICAgdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIEdZUCBmaWxlcyBjYW4gdGhlbiBoYXZlIGNvbmRpdGlvbmFscyB0aGF0Ci0gICAgY2hlY2sgdGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMuCi0KLSAgICBBcmdzOgotICAgICAgY29uZmlnX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBzdGFyYm9hcmQudG9vbHMuY29uZmlnIGJ1aWxkIHR5cGUuCi0gICAgICB1c2VfY2xhbmc6IFdoZXRoZXIgdGhlIHRvb2xjaGFpbiBpcyBhIGZsYXZvciBvZiBDbGFuZy4KLQotICAgIFJhaXNlczoKLSAgICAgIFJ1bnRpbWVFcnJvcjogV2hlbiBnaXZlbiBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIGlucHV0LgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgTWFwcGluZyBvZiBHWVAgdmFyaWFibGVzIHRvIGJlIG1lcmdlZCBpbnRvIHRoZSBnbG9iYWwgTWFwcGluZyBwcm92aWRlZAotICAgICAgdG8gR1lQLgotICAgICIiIgotICAgIHVzZV9hc2FuID0gMAotICAgIHVzZV90c2FuID0gMAotICAgIHVzZV9zb3VyY2VfY29kZV9jb3ZlcmFnZSA9IDAKLQotICAgIGlmIHVzZV9jbGFuZzoKLSAgICAgICMgRW5hYmxlIHNvdXJjZSBjb3ZlcmFnZSBpbnN0cnVtZW50YXRpb24gaWYgVVNFX1NPVVJDRV9DT0RFX0NPVkVSQUdFCi0gICAgICAjIHdhcyBzZXQgdG8gMSBpbiB0aGUgZW52aXJvbm1lbnQuCi0gICAgICB1c2Vfc291cmNlX2NvZGVfY292ZXJhZ2UgPSBpbnQoCi0gICAgICAgICAgb3MuZW52aXJvbi5nZXQoJ1VTRV9TT1VSQ0VfQ09ERV9DT1ZFUkFHRScsIDApKQotCi0gICAgICAjIEVuYWJsZSBUU0FOIGlmIFVTRV9UU0FOIHdhcyBzZXQgdG8gMSBpbiB0aGUgZW52aXJvbm1lbnQsIHVubGVzcwotICAgICAgIyB1c2Vfc291cmNlX2NvZGVfY292ZXJhZ2UgaXMgc2V0LgotICAgICAgdXNlX3RzYW4gPSBpbnQob3MuZW52aXJvbi5nZXQoJ1VTRV9UU0FOJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSBpZiBub3QgdXNlX3NvdXJjZV9jb2RlX2NvdmVyYWdlIGVsc2UgMAotCi0gICAgICAjIEVuYWJsZSBBU0FOIGJ5IGRlZmF1bHQgZm9yIGRlYnVnIGFuZCBkZXZlbCBidWlsZHMgb25seSBpZiBuZWl0aGVyCi0gICAgICAjIHVzZV90c2FuIG5vciB1c2Vfc291cmNlX2NvZGVfY292ZXJhZ2UgaXMgc2V0LgotICAgICAgdXNlX2FzYW5fZGVmYXVsdCA9IHNlbGYuX2FzYW5fZGVmYXVsdCBpZiAoCi0gICAgICAgICAgbm90IHVzZV90c2FuIGFuZCBub3QgdXNlX3NvdXJjZV9jb2RlX2NvdmVyYWdlIGFuZAotICAgICAgICAgIGNvbmZpZ19uYW1lIGluIChDb25maWcuREVCVUcsIENvbmZpZy5ERVZFTCkpIGVsc2UgMAotICAgICAgdXNlX2FzYW4gPSBpbnQob3MuZW52aXJvbi5nZXQoJ1VTRV9BU0FOJywgdXNlX2FzYW5fZGVmYXVsdCkpCi0gICAgaWYgdXNlX2FzYW4gPT0gMSBhbmQgdXNlX3RzYW4gPT0gMToKLSAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQVNBTiBhbmQgVFNBTiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJykKLQotICAgIGlmIHVzZV9zb3VyY2VfY29kZV9jb3ZlcmFnZToKLSAgICAgIGxvZ2dpbmcuaW5mbygnVXNpbmcgU291cmNlLUJhc2VkIENvZGUgQ292ZXJhZ2UnKQotCi0gICAgaWYgdXNlX2FzYW46Ci0gICAgICBsb2dnaW5nLmluZm8oJ1VzaW5nIEFkZHJlc3MgU2FuaXRpemVyJykKLQotICAgIGlmIHVzZV90c2FuOgotICAgICAgbG9nZ2luZy5pbmZvKCdVc2luZyBUaHJlYWQgU2FuaXRpemVyJykKLQotICAgIHZhcmlhYmxlcyA9IHsKLSAgICAgICAgJ2NsYW5nJzoKLSAgICAgICAgICAgIHVzZV9jbGFuZywKLQotICAgICAgICAjIFdoZXRoZXIgdG8gYnVpbGQgd2l0aCBjbGFuZydzIFNvdXJjZSBCYXNlZCBDb2RlIENvdmVyYWdlCi0gICAgICAgICMgaW5zdHJ1bWVudGF0aW9uLgotICAgICAgICAjIFNlZSBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvU291cmNlQmFzZWRDb2RlQ292ZXJhZ2UuaHRtbAotICAgICAgICAndXNlX3NvdXJjZV9jb2RlX2NvdmVyYWdlJzoKLSAgICAgICAgICAgIHVzZV9zb3VyY2VfY29kZV9jb3ZlcmFnZSwKLQotICAgICAgICAjIFdoZXRoZXIgdG8gYnVpbGQgd2l0aCBjbGFuZydzIEFkZHJlc3MgU2FuaXRpemVyIGluc3RydW1lbnRhdGlvbi4KLSAgICAgICAgJ3VzZV9hc2FuJzoKLSAgICAgICAgICAgIHVzZV9hc2FuLAotICAgICAgICAjIFdoZXRoZXIgdG8gYnVpbGQgd2l0aCBjbGFuZydzIFRocmVhZCBTYW5pdGl6ZXIgaW5zdHJ1bWVudGF0aW9uLgotICAgICAgICAndXNlX3RzYW4nOgotICAgICAgICAgICAgdXNlX3RzYW4sCi0KLSAgICAgICAgIyBJZiB0aGUgcGF0aCB0byB0aGUgU3RhcmJvYXJkIEFCSSBmaWxlIGlzIGFibGUgdG8gYmUgZm9ybWF0dGVkLCBpdCB3aWxsCi0gICAgICAgICMgYmUgdXNpbmcgdGhlIGV4cGVyaW1lbnRhbCBTdGFyYm9hcmQgQVBJIHZlcnNpb24gb2YgdGhlIGZpbGUsIGkuZS4KLSAgICAgICAgIyB8c2FiaS5TQl9BUElfVkVSU0lPTnwuIE90aGVyd2lzZSwgdGhlIHZhbHVlIHByb3ZpZGVkIGlzIGp1c3QgYXNzdW1lZAotICAgICAgICAjIHRvIGJlIGEgY29tcGxldGUgcGF0aCB0byBhIFN0YXJib2FyZCBBQkkgZmlsZS4KLSAgICAgICAgJ3NhYmlfanNvbl9wYXRoJzoKLSAgICAgICAgICAgIHNlbGYuR2V0UGF0aFRvU2FiaUpzb25GaWxlKCkuZm9ybWF0KAotICAgICAgICAgICAgICAgIHNiX2FwaV92ZXJzaW9uPXNhYmkuU0JfQVBJX1ZFUlNJT04pLAotCi0gICAgICAgICMgVE9ETzogUmVtb3ZlIHRoZXNlIGNvbXBhdGliaWxpdHkgdmFyaWFibGVzLgotICAgICAgICAnY29iYWx0X2NvbmZpZyc6Ci0gICAgICAgICAgICBjb25maWdfbmFtZSwKLSAgICAgICAgJ2NvYmFsdF9mYXN0YnVpbGQnOgotICAgICAgICAgICAgMCwKLSAgICAgICAgJ2VuYWJsZV92cic6Ci0gICAgICAgICAgICAwLAotICAgIH0KLSAgICByZXR1cm4gdmFyaWFibGVzCi0KLSAgZGVmIEdldEdlbmVyYXRvclZhcmlhYmxlcyhzZWxmLCBjb25maWdfbmFtZSk6Ci0gICAgIiIiR2V0IGEgTWFwcGluZyBvZiBnZW5lcmF0b3IgdmFyaWFibGUgb3ZlcnJpZGVzLgotCi0gICAgQXJnczoKLSAgICAgIGNvbmZpZ19uYW1lOiBUaGUgbmFtZSBvZiB0aGUgc3RhcmJvYXJkLnRvb2xzLmNvbmZpZyBidWlsZCB0eXBlLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgTWFwcGluZyBvZiBnZW5lcmF0b3IgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcy4KLSAgICAiIiIKLSAgICBkZWwgY29uZmlnX25hbWUKLSAgICByZXR1cm4ge30KLQotICBkZWYgR2V0VG9vbGNoYWluKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSB0b29sY2hhaW4gaW1wbGVtZW50YXRpb24gY2xhc3MuIiIiCi0gICAgcmV0dXJuIE5vbmUKLQotICBkZWYgR2V0VGFyZ2V0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiB0YXJnZXQgdG9vbHMuIiIiCi0gICAgIyBUT0RPOiBJZiB0aGlzIG1ldGhvZCB0aHJvd3MgfE5vdEltcGxlbWVudGVkRXJyb3J8LCBHWVAgd2lsbCBmYWxsIGJhY2sgdG8KLSAgICAjICAgICAgIHRoZSBsZWdhY3kgdG9vbGNoYWluLiBPbmNlIGFsbCBwbGF0Zm9ybXMgYXJlIG1pZ3JhdGVkIHRvIHRoZQotICAgICMgICAgICAgYWJzdHJhY3QgdG9vbGNoYWluLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgbWFkZSB8QGFic3RyYWN0bWV0aG9kfC4KLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICBkZWYgR2V0SG9zdFRvb2xjaGFpbihzZWxmLCAqKmt3YXJncyk6Ci0gICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgaG9zdCB0b29scy4iIiIKLSAgICAjIFRPRE86IElmIHRoaXMgbWV0aG9kIHRocm93cyB8Tm90SW1wbGVtZW50ZWRFcnJvcnwsIEdZUCB3aWxsIGZhbGwgYmFjayB0bwotICAgICMgICAgICAgdGhlIGxlZ2FjeSB0b29sY2hhaW4uIE9uY2UgYWxsIHBsYXRmb3JtcyBhcmUgbWlncmF0ZWQgdG8gdGhlCi0gICAgIyAgICAgICBhYnN0cmFjdCB0b29sY2hhaW4sIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBtYWRlIHxAYWJzdHJhY3RtZXRob2R8LgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCiAgIGRlZiBHZXRMYXVuY2hlclBhdGgoc2VsZik6CiAgICAgIiIiR2V0cyB0aGUgcGF0aCB0byB0aGUgbGF1bmNoZXIgbW9kdWxlIGZvciB0aGlzIHBsYXRmb3JtLiIiIgogICAgIHJldHVybiBzZWxmLkdldERpcmVjdG9yeSgpCkBAIC0zMzgsMTQgKzE0Nyw2IEBACiAgICAgIiIiR2V0cyBhIGRpY3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIG5lZWRlZCBieSB1bml0IHRlc3QgYmluYXJpZXMuIiIiCiAgICAgcmV0dXJuIHt9CiAKLSAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgotICAgICIiIkdldHMgYWxsIHRlc3RzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gYSB1bml0IHRlc3QgcnVuLgotCi0gICAgUmV0dXJuczoKLSAgICAgIEEgbGlzdCBvZiBpbml0aWFsaXplZCBzdGFyYm9hcmQudG9vbHMudGVzdGluZy5UZXN0RmlsdGVyIG9iamVjdHMuCi0gICAgIiIiCi0gICAgcmV0dXJuIFtdCi0KICAgZGVmIEdldERlcGxveVBhdGhQYXR0ZXJucyhzZWxmKToKICAgICAiIiJHZXRzIGRlcGxveW1lbnQgcGF0aHMgcGF0dGVybnMgZm9yIGZpbGVzIHRvIGJlIGluY2x1ZGVkIGZvciBkZXBsb3ltZW50LgogCkBAIC0zNTgsMjkgKzE1OSwxMyBAQAogICAgICIiIgogICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCi0gIGRlZiBHZXRQYXRoVG9TYWJpSnNvbkZpbGUoc2VsZik6Ci0gICAgIiIiR2V0cyB0aGUgcGF0aCB0byB0aGUgSlNPTiBmaWxlIHdpdGggU3RhcmJvYXJkIEFCSSBpbmZvcm1hdGlvbiBmb3IgdGhlCi0gICAgICAgYnVpbGQuCi0KLSAgICBFeGFtcGxlczoKLSAgICAgICAgJ3N0YXJib2FyZC9zYWJpL2FybTY0L3NhYmktdjEyLmpzb24nCi0gICAgICAgICdzdGFyYm9hcmQvc2FiaS9hcm02NC9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBzdHJpbmcgcGF0aCB0byB0aGUgYXBwcm9wcmlhdGUgU3RhcmJvYXJkIEFCSSBKU09OIGZpbGUuIFRoaXMgcGF0aCBjYW4KLSAgICAgIGVpdGhlciBiZSBhIGNvbXBsZXRlIHBhdGgsIG9yIGJlIGNhcGFibGUgb2YgYmVpbmcgZm9ybWF0dGVkIHdpdGggYW4KLSAgICAgIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBkZXNpcmVkIFN0YXJib2FyZCBBUEkgdmVyc2lvbi4gVGhpcyBmaWxlIGlzCi0gICAgICByZXF1aXJlZCBmb3IgYSB2YXJpZXR5IG9mIGRlZmluaXRpb25zIGFuZCB2YXJpYWJsZXMgcGVydGFpbmluZyB0byB0aGUgQUJJLgotICAgICIiIgotICAgIHJldHVybiAnc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nCi0KICAgZGVmIEdldFRlc3RUYXJnZXRzKHNlbGYpOgogICAgICIiIkdldHMgYWxsIHRlc3RzIHRvIGJlIHJ1biBpbiBhIHVuaXQgdGVzdCBydW4uCiAKICAgICBSZXR1cm5zOgogICAgICAgQSBsaXN0IG9mIHN0cmluZ3Mgb2YgdGVzdCB0YXJnZXQgbmFtZXMuCiAgICAgIiIiCi0gICAgdGVzdHMgPSBbCisgICAgcmV0dXJuIFsKICAgICAgICAgJ2FwcF9rZXlfZmlsZXNfdGVzdCcsCiAgICAgICAgICdhcHBfa2V5X3Rlc3QnLAogICAgICAgICAnZHJhaW5fZmlsZV90ZXN0JywKQEAgLTM5MSw5ICsxNzYsMyBAQAogICAgICAgICAnc2xvdF9tYW5hZ2VtZW50X3Rlc3QnLAogICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzJywKICAgICBdCi0gICAgdGVzdHMuZXh0ZW5kKGdldF9vcHRpb25hbF90ZXN0cy5HZXRPcHRpb25hbFRlc3RUYXJnZXRzKCkpCi0gICAgcmV0dXJuIHRlc3RzCi0KLSAgZGVmIEdldERlZmF1bHRUYXJnZXRCdWlsZEZpbGUoc2VsZik6Ci0gICAgIiIiR2V0cyB0aGUgYnVpbGQgZmlsZSB0byBidWlsZCBieSBkZWZhdWx0LiIiIgotICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aHMuU1RBUkJPQVJEX1JPT1QsICdzdGFyYm9hcmRfYWxsLmd5cCcpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvcGxhdGZvcm1fcGF0aC5nbmkgYi9zdGFyYm9hcmQvYnVpbGQvcGxhdGZvcm1fcGF0aC5nbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlYTQxMwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9idWlsZC9wbGF0Zm9ybV9wYXRoLmduaQpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworZGVjbGFyZV9hcmdzKCkgeworICBzdGFyYm9hcmRfcGF0aCA9ICIiCit9CisKK2lmIChzdGFyYm9hcmRfcGF0aCA9PSAiIikgeworICBkZWNsYXJlX2FyZ3MoKSB7CisgICAgdGFyZ2V0X3BsYXRmb3JtID0gInN0dWIiCisgIH0KKworICBzdGFyYm9hcmRfcGF0aCA9IGV4ZWNfc2NyaXB0KCIvL3N0YXJib2FyZC9idWlsZC9wbGF0Zm9ybXMucHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgdGFyZ2V0X3BsYXRmb3JtIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyaW0gc3RyaW5nIikKK30KKworYXNzZXJ0KGRlZmluZWQoc3RhcmJvYXJkX3BhdGgpLAorICAgICAgICJQbGVhc2UgYWRkIHlvdXIgcGxhdGZvcm0gdG8gc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3Jtcy5weSIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvcGxhdGZvcm1zLnB5IGIvc3RhcmJvYXJkL2J1aWxkL3BsYXRmb3Jtcy5weQppbmRleCBkMDkwYzU2Li4yYWJiYWY0IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYnVpbGQvcGxhdGZvcm1zLnB5CisrKyBiL3N0YXJib2FyZC9idWlsZC9wbGF0Zm9ybXMucHkKQEAgLTE4LDEyICsxOCwxOCBAQAogCiBpbXBvcnQgc3lzCiAKK3RyeToKKyAgZnJvbSBzdGFyYm9hcmQuYnVpbGQuaW50ZXJuYWwuaW50ZXJuYWxfcGxhdGZvcm1zIGltcG9ydCBJTlRFUk5BTF9QTEFURk9STVMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgSU5URVJOQUxfUExBVEZPUk1TID0ge30KKwogUExBVEZPUk1TID0gewogICAgICdzdHViJzogJ3N0YXJib2FyZC9zdHViJywKICAgICAnbGludXgteDY0eDExJzogJ3N0YXJib2FyZC9saW51eC94NjR4MTEnLAogICAgICdsaW51eC14NjR4MTEtZWdsJzogJ3N0YXJib2FyZC9saW51eC94NjR4MTEvZWdsJywKKyAgICAnbGludXgteDY0eDExLWdjYy02LTMnOiAnc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zJywKICAgICAnbGludXgteDY0eDExLXNraWEnOiAnc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhJywKLSAgICAnbGludXgteDY0eDExLWNsYW5nLWNyb3NzdG9vbCc6ICdzdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nL2Nyb3NzdG9vbCcsCisgICAgJ2xpbnV4LXg2NHgxMS1jbGFuZy0zLTknOiAnc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjknLAogICAgICdhbmRyb2lkLWFybSc6ICdzdGFyYm9hcmQvYW5kcm9pZC9hcm0nLAogICAgICdhbmRyb2lkLWFybTY0JzogJ3N0YXJib2FyZC9hbmRyb2lkL2FybTY0JywKICAgICAnYW5kcm9pZC1hcm02NC12dWxrYW4nOiAnc3RhcmJvYXJkL2FuZHJvaWQvYXJtNjQvdnVsa2FuJywKQEAgLTMxLDkgKzM3LDEyIEBACiAgICAgJ3Jhc3BpLTInOiAnc3RhcmJvYXJkL3Jhc3BpLzInLAogICAgICdyYXNwaS0yLXNraWEnOiAnc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYScsCiAgICAgJ2V2ZXJncmVlbi14NjQnOiAnc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQnLAorICAgICdldmVyZ3JlZW4teDg2JzogJ3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2JywKICAgICAnZXZlcmdyZWVuLWFybS1oYXJkZnAnOiAnc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwJywKICAgICAnZXZlcmdyZWVuLWFybS1zb2Z0ZnAnOiAnc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwJywKKyAgICAnZXZlcmdyZWVuLWFybTY0JzogJ3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQnLAogfQorUExBVEZPUk1TLnVwZGF0ZShJTlRFUk5BTF9QTEFURk9STVMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgIGlmIGxlbihzeXMuYXJndikgIT0gMjoKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC9ydW5fYmFzaC5weSBiL3N0YXJib2FyZC9idWlsZC9ydW5fYmFzaC5weQppbmRleCBlNzM0MDYzLi5hNTQ4NDEzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5CkBAIC0yNSwxMCArMjUsMTEgQEAKIGltcG9ydCBzeXMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgbG9nZ2luZ19mb3JtYXQgPSAnWyUobGV2ZWxuYW1lKXM6JShmaWxlbmFtZSlzOiUobGluZW5vKXNdICUobWVzc2FnZSlzJwotICBsb2dnaW5nLmJhc2ljQ29uZmlnKAotICAgICAgbGV2ZWw9bG9nZ2luZy5JTkZPLCBmb3JtYXQ9bG9nZ2luZ19mb3JtYXQsIGRhdGVmbXQ9JyVIOiVNOiVTJykKLSAgbG9nZ2luZy53YXJuaW5nKCdDYWxsaW5nIGEgYmFzaCBwcm9jZXNzIGR1cmluZyBHTiBidWlsZC4gJwotICAgICAgICAgICAgICAgICAgJ0F2b2lkIGRvaW5nIHRoaXMgd2hlbmV2ZXIgcG9zc2libGUuJykKLQorICBpZiBzeXMuYXJndlsxXSA9PSAncHl0aG9uMic6CisgICAgbG9nZ2luZ19mb3JtYXQgPSAnWyUobGV2ZWxuYW1lKXM6JShmaWxlbmFtZSlzOiUobGluZW5vKXNdICUobWVzc2FnZSlzJworICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoCisgICAgICAgIGxldmVsPWxvZ2dpbmcuSU5GTywgZm9ybWF0PWxvZ2dpbmdfZm9ybWF0LCBkYXRlZm10PSclSDolTTolUycpCisgICAgbG9nZ2luZy53YXJuaW5nKCdDYWxsaW5nIGEgYmFzaCBwcm9jZXNzIHRoYXQganVzdCBpbnZva2VzIHB5dGhvbjIgZHVyaW5nICcKKyAgICAgICAgICAgICAgICAgICAgJ0dOIGJ1aWxkLiBQbGVhc2UgYXZvaWQgZG9pbmcgdGhpcyB3aGVuZXZlciBwb3NzaWJsZSBhbmQgJworICAgICAgICAgICAgICAgICAgICAnc2VlIGIvMjE5NjAyODQwIGZvciBtb3JlIGNvbnRleHQuJykKICAgc3lzLmV4aXQoc3VicHJvY2Vzcy5jYWxsKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvYnVpbGQvdG9vbGNoYWluL19lbnYucHkgYi9zdGFyYm9hcmQvYnVpbGQvdG9vbGNoYWluL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2J1aWxkL3Rvb2xjaGFpbi9fZW52LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCi0gIHN5cy5leGl0KDEpCi1sb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9idWlsZC90b29sY2hhaW4vZ2V0X2NsYW5nX2Jhc2VfcGF0aC5weSBiL3N0YXJib2FyZC9idWlsZC90b29sY2hhaW4vZ2V0X2NsYW5nX2Jhc2VfcGF0aC5weQppbmRleCA2NmI5OGVjLi4wOTJiYTVkIDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvYnVpbGQvdG9vbGNoYWluL2dldF9jbGFuZ19iYXNlX3BhdGgucHkKKysrIGIvc3RhcmJvYXJkL2J1aWxkL3Rvb2xjaGFpbi9nZXRfY2xhbmdfYmFzZV9wYXRoLnB5CkBAIC0xNywxMyArMTcsMTIgQEAKIElmIENsYW5nIGlzIG5vdCBwcmVzZW50LCBpdCB3aWxsIGJlIGRvd25sb2FkZWQuCiAiIiIKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gc3RhcmJvYXJkLmJ1aWxkIGltcG9ydCBjbGFuZwogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGJ1aWxkCiAKIAogZGVmIG1haW4oKToKLSAgcHJpbnQgYnVpbGQuRW5zdXJlQ2xhbmdBdmFpbGFibGUoY2xhbmcuR2V0Q2xhbmdTcGVjaWZpY2F0aW9uKCkpCisgIHByaW50KGJ1aWxkLkVuc3VyZUNsYW5nQXZhaWxhYmxlKGNsYW5nLkdldENsYW5nU3BlY2lmaWNhdGlvbigpKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2J1aWxkL3RvdWNoLnB5IGIvc3RhcmJvYXJkL2J1aWxkL3RvdWNoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODdlNmE0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9idWlsZC90b3VjaC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0iIiJBbGxvd3MgdG8gdXNlIFBPU0lYIHRvdWNoIGFzIGEgc3RhbXAgdG9vbC4iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLSIiIkNyb3NzLXBsYXRmb3JtIHRvdWNoLiIiIgotCi1mb3IgZm5hbWUgaW4gc3lzLmFyZ3ZbMTpdOgotICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6Ci0gICAgb3MudXRpbWUoZm5hbWUsIE5vbmUpCi0gIGVsc2U6Ci0gICAgb3BlbihmbmFtZSwgJ3cnKS5jbG9zZSgpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL0JVSUxELmduIGIvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2N3cmFwcGVycy9CVUlMRC5nbgppbmRleCA0NTk0ZTY0Li5iNzNmNDNiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9jd3JhcHBlcnMvQlVJTEQuZ24KQEAgLTI5LDUgKzI5LDQgQEAKICAgICAiLy90ZXN0aW5nL2dtb2NrIiwKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgXQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL2N3cmFwcGVycy5neXAgYi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL2N3cmFwcGVycy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5M2I1MDEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2N3cmFwcGVycy9jd3JhcHBlcnMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2N3cmFwcGVycycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Bvd193cmFwcGVyLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZF9oZWFkZXJzX29ubHkuZ3lwOnN0YXJib2FyZF9oZWFkZXJzX29ubHknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2N3cmFwcGVycy9jd3JhcHBlcnNfdGVzdC5neXAgYi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL2N3cmFwcGVyc190ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhZDAyZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL2N3cmFwcGVyc190ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjd3JhcHBlcnNfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Bvd193cmFwcGVyX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi90ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2N3cmFwcGVycy9jd3JhcHBlcnMuZ3lwOmN3cmFwcGVycycsCi0gICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjd3JhcHBlcnNfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3dyYXBwZXJzX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnY3dyYXBwZXJzX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2V6dGltZS9lenRpbWUuZ3lwIGIvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2V6dGltZS9lenRpbWUuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWY2ODZlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9lenRpbWUvZXp0aW1lLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdlenRpbWUnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdlenRpbWUuY2MnLAotICAgICAgICAnZXp0aW1lLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkX2hlYWRlcnNfb25seS5neXA6c3RhcmJvYXJkX2hlYWRlcnNfb25seScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvaWN1X2luaXQvaWN1X2luaXQuZ3lwOmljdV9pbml0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWkxOG4nLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2V6dGltZS9lenRpbWVfdGVzdC5neXAgYi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvZXp0aW1lL2V6dGltZV90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyNzU0Yy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvZXp0aW1lL2V6dGltZV90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdlenRpbWVfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgICAgJ3Rlc3RfY29uc3RhbnRzLmgnLAotICAgICAgICAnZXp0aW1lX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvZXp0aW1lL2V6dGltZS5neXA6ZXp0aW1lJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2V6dGltZV90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdlenRpbWVfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdlenRpbWVfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvaWN1X2luaXQvaWN1X2luaXQuZ3lwIGIvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2ljdV9pbml0L2ljdV9pbml0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk3NmU1ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvaWN1X2luaXQvaWN1X2luaXQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ljdV9pbml0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnaWN1X2luaXQuY2MnLAotICAgICAgICAnaWN1X2luaXQuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWkxOG4nLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL3BvZW0vQlVJTEQuZ24gYi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvcG9lbS9CVUlMRC5nbgppbmRleCBhOTUyNzRkLi5lYjIzZmVmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvcG9lbS9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvcG9lbS9CVUlMRC5nbgpAQCAtMjUsNiArMjUsNCBAQAogICAgICIvL3N0YXJib2FyZCIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvcG9lbS9wb2VtLmd5cCBiL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9wb2VtL3BvZW0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODU5YTY1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9wb2VtL3BvZW0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BvZW1fdW5pdHRlc3RzJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnaW5jbHVkZV9hbGwuYycsCi0gICAgICAgICdtYWluLmNjJywKLSAgICAgICAgJ3N0cmluZ19wb2VtX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdwb2VtX3VuaXR0ZXN0c19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAncG9lbV91bml0dGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAncG9lbV91bml0dGVzdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NvbW1vbi9CVUlMRC5nbiBiL3N0YXJib2FyZC9jb21tb24vQlVJTEQuZ24KaW5kZXggYWI0ZjUzZC4uNDM5YzEyYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2NvbW1vbi9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvY29tbW9uL0JVSUxELmduCkBAIC05Niw1ICs5Niw0IEBACiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NvbW1vbi9jb21tb24uZ3lwIGIvc3RhcmJvYXJkL2NvbW1vbi9jb21tb24uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2JkYjZmLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9jb21tb24vY29tbW9uLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoZSAiY29tbW9uIiB0YXJnZXQgY29udGFpbnMgZmFjaWxpdGllcyBwcm92aWRlZCBieSBTdGFyYm9hcmQgdGhhdCBhcmUgY29tbW9uCi0jIHRvIGFsbCBwbGF0Zm9ybXMuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvbW1vbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaW5jbHVkZXNfc3RhcmJvYXJkJzogMSwKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2J5dGVfc3dhcC5oJywKLSAgICAgICAgJ2NvbW1vbi5jYycsCi0gICAgICAgICdjb25kaXRpb25fdmFyaWFibGUuY2MnLAotICAgICAgICAnY29uZGl0aW9uX3ZhcmlhYmxlLmgnLAotICAgICAgICAnY29uZmlndXJhdGlvbl9kZWZhdWx0cy5jYycsCi0gICAgICAgICdjb25maWd1cmF0aW9uX2RlZmF1bHRzLmgnLAotICAgICAgICAnZmlsZS5jYycsCi0gICAgICAgICdmaWxlLmgnLAotICAgICAgICAnZmxhdF9tYXAuaCcsCi0gICAgICAgICdsb2NrZWRfcHRyLmgnLAotICAgICAgICAnbG9nLmNjJywKLSAgICAgICAgJ2xvZy5oJywKLSAgICAgICAgJ21lZGlhLmNjJywKLSAgICAgICAgJ21lZGlhLmgnLAotICAgICAgICAnbW92ZS5oJywKLSAgICAgICAgJ211cm11cmhhc2gyLmNjJywKLSAgICAgICAgJ211cm11cmhhc2gyLmgnLAotICAgICAgICAnbXV0ZXguY2MnLAotICAgICAgICAnbXV0ZXguaCcsCi0gICAgICAgICduZXcuY2MnLAotICAgICAgICAnb3B0aW9uYWwuY2MnLAotICAgICAgICAnb3B0aW9uYWwuaCcsCi0gICAgICAgICdxdWV1ZS5oJywKLSAgICAgICAgJ3JlY3Vyc2l2ZV9tdXRleC5jYycsCi0gICAgICAgICdyZWN1cnNpdmVfbXV0ZXguaCcsCi0gICAgICAgICdyZWZfY291bnRlZC5jYycsCi0gICAgICAgICdyZWZfY291bnRlZC5oJywKLSAgICAgICAgJ3Jlc2V0X2FuZF9yZXR1cm4uaCcsCi0gICAgICAgICdyd2xvY2suY2MnLAotICAgICAgICAncndsb2NrLmgnLAotICAgICAgICAnc2NvcGVkX3B0ci5oJywKLSAgICAgICAgJ3NlbWFwaG9yZS5jYycsCi0gICAgICAgICdzZW1hcGhvcmUuaCcsCi0gICAgICAgICdzb2NrZXQuY2MnLAotICAgICAgICAnc29ja2V0LmgnLAotICAgICAgICAnc3Bpbl9sb2NrLmNjJywKLSAgICAgICAgJ3NwaW5fbG9jay5oJywKLSAgICAgICAgJ3N0YXRlX21hY2hpbmUuY2MnLAotICAgICAgICAnc3RhdGVfbWFjaGluZS5oJywKLSAgICAgICAgJ3N0b3JhZ2UuY2MnLAotICAgICAgICAnc3RvcmFnZS5oJywKLSAgICAgICAgJ3N0cmluZy5oJywKLSAgICAgICAgJ3RocmVhZF9jb2xsaXNpb25fd2FybmVyLmNjJywKLSAgICAgICAgJ3RocmVhZF9jb2xsaXNpb25fd2FybmVyLmgnLAotICAgICAgICAndGhyZWFkLmNjJywKLSAgICAgICAgJ3RocmVhZC5oJywKLQotICAgICAgICAnZXhwZXJpbWVudGFsL2NvbmN1cnJlbmN5X2RlYnVnLmNjJywKLSAgICAgICAgJ2V4cGVyaW1lbnRhbC9jb25jdXJyZW5jeV9kZWJ1Zy5oJywKLQotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9tZWRpYV9zZXNzaW9uL3BsYXliYWNrX3N0YXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbWVkaWFfc2Vzc2lvbi9wbGF5YmFja19zdGF0ZS5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb21tb24vY29tbW9uX3Rlc3QuZ3lwIGIvc3RhcmJvYXJkL2NvbW1vbi9jb21tb25fdGVzdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZDliNDcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2NvbW1vbi9jb21tb25fdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29tbW9uX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdtZW1vcnlfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfdGVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvbW1vbl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjb21tb25fdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdjb21tb25fdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY29tbW9uL2NvbmRpdGlvbl92YXJpYWJsZS5jYyBiL3N0YXJib2FyZC9jb21tb24vY29uZGl0aW9uX3ZhcmlhYmxlLmNjCmluZGV4IDk3YjZhYzkuLjRkOWY4ZWEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb21tb24vY29uZGl0aW9uX3ZhcmlhYmxlLmNjCisrKyBiL3N0YXJib2FyZC9jb21tb24vY29uZGl0aW9uX3ZhcmlhYmxlLmNjCkBAIC0xNCw4ICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIAogQ29uZGl0aW9uVmFyaWFibGU6OkNvbmRpdGlvblZhcmlhYmxlKGNvbnN0IE11dGV4JiBtdXRleCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb21tb24vZmlsZS5jYyBiL3N0YXJib2FyZC9jb21tb24vZmlsZS5jYwppbmRleCBjMTJiMzk4Li5lYTI5NTVhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY29tbW9uL2ZpbGUuY2MKKysrIGIvc3RhcmJvYXJkL2NvbW1vbi9maWxlLmNjCkBAIC01NSwzMSArNTUsMTYgQEAKIAogICBTYkZpbGVJbmZvIGluZm87CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBzdGQ6OnZlY3RvcjxjaGFyPiBlbnRyeShrU2JGaWxlTWF4TmFtZSk7CiAKICAgd2hpbGUgKFNiRGlyZWN0b3J5R2V0TmV4dChkaXIsIGVudHJ5LmRhdGEoKSwga1NiRmlsZU1heE5hbWUpKSB7Ci0gICAgaWYgKCFzdHJjbXAoZW50cnkuZGF0YSgpLCAiLiIpIHx8Ci0gICAgICAgICFzdHJjbXAoZW50cnkuZGF0YSgpLCAiLi4iKSkgeworICAgIGlmICghc3RyY21wKGVudHJ5LmRhdGEoKSwgIi4iKSB8fCAhc3RyY21wKGVudHJ5LmRhdGEoKSwgIi4uIikpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIGFic3BhdGgocGF0aCk7CiAgICAgYWJzcGF0aC5hcHBlbmQoa1NiRmlsZVNlcFN0cmluZyk7CiAgICAgYWJzcGF0aC5hcHBlbmQoZW50cnkuZGF0YSgpKTsKLSNlbHNlCi0gIFNiRGlyZWN0b3J5RW50cnkgZW50cnk7Ci0KLSAgd2hpbGUgKFNiRGlyZWN0b3J5R2V0TmV4dChkaXIsICZlbnRyeSkpIHsKLSAgICBpZiAoIXN0cmNtcChlbnRyeS5uYW1lLCAiLiIpIHx8Ci0gICAgICAgICFzdHJjbXAoZW50cnkubmFtZSwgIi4uIikpIHsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIGFic3BhdGgocGF0aCk7Ci0gICAgYWJzcGF0aC5hcHBlbmQoa1NiRmlsZVNlcFN0cmluZyk7Ci0gICAgYWJzcGF0aC5hcHBlbmQoZW50cnkubmFtZSk7Ci0jZW5kaWYKIAogICAgIGlmICghU2JGaWxlRGVsZXRlUmVjdXJzaXZlKGFic3BhdGguZGF0YSgpLCBmYWxzZSkpIHsKICAgICAgIERpcmVjdG9yeUNsb3NlTG9nRmFpbHVyZShwYXRoLCBkaXIpOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NvbW1vbi9sb2cuY2MgYi9zdGFyYm9hcmQvY29tbW9uL2xvZy5jYwppbmRleCBjMGU0MzA3Li4wMmNmM2FkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY29tbW9uL2xvZy5jYworKysgYi9zdGFyYm9hcmQvY29tbW9uL2xvZy5jYwpAQCAtMTY3LDkgKzE2NywxMCBAQAogICBpZiAobGFzdF9zbGFzaF9wb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKICAgICBmaWxlbmFtZS5lcmFzZSgwLCBsYXN0X3NsYXNoX3BvcyArIDEpOwogICB9Ci0KKyAgY2hhciBuYW1lWzEyOF0gPSB7MH07CisgIFNiVGhyZWFkR2V0TmFtZShuYW1lLCBTQl9BUlJBWV9TSVpFX0lOVChuYW1lKSk7CiAgIHN0cmVhbV8gPDwgJ1snOwotICBzdHJlYW1fIDw8IFNiVGhyZWFkR2V0SWQoKSA8PCAnOic7CisgIHN0cmVhbV8gPDwgbmFtZSA8PCAnLycgPDwgU2JUaHJlYWRHZXRJZCgpIDw8ICc6JzsKICAgRXpUaW1lVmFsdWUgdGltZV92YWx1ZTsKICAgRXpUaW1lVmFsdWVHZXROb3coJnRpbWVfdmFsdWUsIE5VTEwpOwogICBFelRpbWVUIHQgPSB0aW1lX3ZhbHVlLnR2X3NlYzsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb21tb24vbG9nLmggYi9zdGFyYm9hcmQvY29tbW9uL2xvZy5oCmluZGV4IDk0MzhhMTcuLjQ4Zjc1OTYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb21tb24vbG9nLmgKKysrIGIvc3RhcmJvYXJkL2NvbW1vbi9sb2cuaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAjZW5kaWYgIC8vIFNCX0xPR0dJTkdfSVNfT0ZGSUNJQUxfQlVJTEQKIAogI2lmIFNCX0xPR0dJTkdfSVNfT0ZGSUNJQUxfQlVJTEQgfHwgXAotICAgIChkZWZpbmVkKE5ERUJVRykgJiYgIWRlZmluZWQoX19MQl9TSEVMTF9fRk9SQ0VfTE9HR0lOR19fKSkKKyAgICAoZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKENPQkFMVF9MT0dHSU5HX0VOQUJMRUQpKQogI2RlZmluZSBTQl9ETE9HX0lTX09OKHNldmVyaXR5KSBmYWxzZQogI2RlZmluZSBTQl9ETE9HX0lGKHNldmVyaXR5LCBjb25kaXRpb24pIFNCX0VBVF9TVFJFQU1fUEFSQU1FVEVSUwogI2Vsc2UKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb21tb24vbWVkaWEuY2MgYi9zdGFyYm9hcmQvY29tbW9uL21lZGlhLmNjCmluZGV4IGRiZDE3ODIuLmZlMzc4ZGEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb21tb24vbWVkaWEuY2MKKysrIGIvc3RhcmJvYXJkL2NvbW1vbi9tZWRpYS5jYwpAQCAtMjgsNyArMjgsNiBAQAogICAgICAgcmV0dXJuICJub25lIjsKICAgICBjYXNlIGtTYk1lZGlhQXVkaW9Db2RlY0FhYzoKICAgICAgIHJldHVybiAiYWFjIjsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQUMzX0FVRElPKQogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjQWMzOgogICAgICAgaWYgKCFrU2JIYXNBYzNBdWRpbykgewogICAgICAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIkFDMyBhdWRpbyBpcyBub3QgZW5hYmxlZCBvbiB0aGlzIHBsYXRmb3JtLiBUbyAiCkBAIC00Myw4ICs0Miw2IEBACiAgICAgICAgIHJldHVybiAiaW52YWxpZCI7CiAgICAgICB9CiAgICAgICByZXR1cm4gImVjMyI7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhBQzNfQVVESU8pCiAgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNPcHVzOgogICAgICAgcmV0dXJuICJvcHVzIjsKICAgICBjYXNlIGtTYk1lZGlhQXVkaW9Db2RlY1ZvcmJpczoKQEAgLTI2NywxOSArMjY0LDIxIEBACiAgIGlmIChzYW1wbGVfaW5mby5jb2RlYyA9PSBrU2JNZWRpYVZpZGVvQ29kZWNOb25lKSB7CiAgICAgcmV0dXJuIG9zOwogICB9CisKICAgb3MgPDwgImNvZGVjOiAiIDw8IEdldE1lZGlhVmlkZW9Db2RlY05hbWUoc2FtcGxlX2luZm8uY29kZWMpIDw8ICIsICI7Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIG9zIDw8ICJtaW1lOiAiIDw8IChzYW1wbGVfaW5mby5taW1lID8gc2FtcGxlX2luZm8ubWltZSA6ICI8bnVsbD4iKQogICAgICA8PCAiLCBtYXggdmlkZW8gY2FwYWJpbGl0aWVzOiAiCiAgICAgIDw8IChzYW1wbGVfaW5mby5tYXhfdmlkZW9fY2FwYWJpbGl0aWVzID8gc2FtcGxlX2luZm8ubWF4X3ZpZGVvX2NhcGFiaWxpdGllcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bnVsbD4iKQogICAgICA8PCAiLCAiOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKKwogICBpZiAoc2FtcGxlX2luZm8uaXNfa2V5X2ZyYW1lKSB7CiAgICAgb3MgPDwgImtleSBmcmFtZSwgIjsKICAgfQorCiAgIG9zIDw8IHNhbXBsZV9pbmZvLmZyYW1lX3dpZHRoIDw8ICd4JyA8PCBzYW1wbGVfaW5mby5mcmFtZV9oZWlnaHQgPDwgJyAnOwogICBvcyA8PCAnKCcgPDwgc2FtcGxlX2luZm8uY29sb3JfbWV0YWRhdGEgPDwgJyknOworCiAgIHJldHVybiBvczsKIH0KIApAQCAtMjkxLDEwICsyOTAsOSBAQAogICBpZiAoc2FtcGxlX2luZm8uY29kZWMgPT0ga1NiTWVkaWFBdWRpb0NvZGVjTm9uZSkgewogICAgIHJldHVybiBvczsKICAgfQorCiAgIG9zIDw8ICJjb2RlYzogIiA8PCBHZXRNZWRpYUF1ZGlvQ29kZWNOYW1lKHNhbXBsZV9pbmZvLmNvZGVjKSA8PCAiLCAiOwotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICBvcyA8PCAibWltZTogIiA8PCAoc2FtcGxlX2luZm8ubWltZSA/IHNhbXBsZV9pbmZvLm1pbWUgOiAiPG51bGw+Iik7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICBvcyA8PCAiY2hhbm5lbHM6ICIgPDwgc2FtcGxlX2luZm8ubnVtYmVyX29mX2NoYW5uZWxzCiAgICAgIDw8ICIsIHNhbXBsZSByYXRlOiAiIDw8IHNhbXBsZV9pbmZvLnNhbXBsZXNfcGVyX3NlY29uZAogICAgICA8PCAiLCBjb25maWc6ICIgPDwgc2FtcGxlX2luZm8uYXVkaW9fc3BlY2lmaWNfY29uZmlnX3NpemUgPDwgIiBieXRlcywgIgpAQCAtMzA1LDUgKzMwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAxNiksCiAgICAgICAgICAgICAiICIpCiAgICAgIDw8IChzYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWdfc2l6ZSA+IDE2ID8gIiAuLi5dIiA6ICIgXSIpOworCiAgIHJldHVybiBvczsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb21tb24vbXV0ZXguaCBiL3N0YXJib2FyZC9jb21tb24vbXV0ZXguaAppbmRleCA2MDEyYzU1Li5hZjZiZDJlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY29tbW9uL211dGV4LmgKKysrIGIvc3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUQVJCT0FSRF9DT01NT05fTVVURVhfSF8KIAogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWRfdHlwZXMuaCIKIAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb25kaXRpb25fdmFyaWFibGUuaCBiL3N0YXJib2FyZC9jb25kaXRpb25fdmFyaWFibGUuaAppbmRleCBmYzRjOWM4Li5kZWE5ODk3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY29uZGl0aW9uX3ZhcmlhYmxlLmgKKysrIGIvc3RhcmJvYXJkL2NvbmRpdGlvbl92YXJpYWJsZS5oCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvZXhwb3J0LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aW1lLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAKQEAgLTI5LDggKzI4LDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyBNYXggc2l6ZSBvZiB0aGUgU2JDb25kaXRpb25WYXJpYWJsZSB0eXBlLgogI2RlZmluZSBTQl9DT05ESVRJT05fVkFSSUFCTEVfTUFYX1NJWkUgODAKIApAQCAtNTQsOCArNTEsNiBAQAogICB7IDAgfQogI2VuZGlmCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gRW51bWVyYXRpb24gb2YgcG9zc2libGUgcmVzdWx0cyBmcm9tIHdhaXRpbmcgb24gYSBjb25kdmFyLgogdHlwZWRlZiBlbnVtIFNiQ29uZGl0aW9uVmFyaWFibGVSZXN1bHQgewogICAvLyBUaGUgd2FpdCBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIHdhcyBzaWduYWxlZC4KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jb25maWd1cmF0aW9uLmggYi9zdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oCmluZGV4IDVlZWE2OWMuLjRkMDA5NWEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb25maWd1cmF0aW9uLmgKKysrIGIvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaApAQCAtMzUsNyArMzUsNyBAQAogCiAvLyBUaGUgbWluaW11bSBBUEkgdmVyc2lvbiBhbGxvd2VkIGJ5IHRoaXMgdmVyc2lvbiBvZiB0aGUgU3RhcmJvYXJkIGhlYWRlcnMsCiAvLyBpbmNsdXNpdmUuCi0jZGVmaW5lIFNCX01JTklNVU1fQVBJX1ZFUlNJT04gMTEKKyNkZWZpbmUgU0JfTUlOSU1VTV9BUElfVkVSU0lPTiAxMgogCiAvLyBUaGUgbWF4aW11bSBBUEkgdmVyc2lvbiBhbGxvd2VkIGJ5IHRoaXMgdmVyc2lvbiBvZiB0aGUgU3RhcmJvYXJkIGhlYWRlcnMsCiAvLyBpbmNsdXNpdmUuCkBAIC02NSw2ICs2NSwxNiBAQAogLy8gICAvLyAgIGV4cG9zZXMgZnVuY3Rpb25hbGl0eSBmb3IgbXkgbmV3IGZlYXR1cmUuCiAvLyAgICNkZWZpbmUgU0JfTVlfRVhQRVJJTUVOVEFMX0ZFQVRVUkVfVkVSU0lPTiBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KIAorLy8gSW50cm9kdWNlIGEgbmV3IGZvcm1hdCBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmUxMEJpdFlVVkk0MjBDb21wYWN0LgorLy8gICBBIGRlY29kZXIgdGFyZ2V0IGZvcm1hdCBjb25zaXN0aW5nIG9mIDEwYml0IFksIFUsIGFuZCBWIHBsYW5lcy4KKyNkZWZpbmUgU0JfREVDT0RFX1RBUkdFVF9GT1JNQVRfWVVWSTQyMF9DT01QQUNUX0FQSV9WRVJTSU9OIFwKKyAgU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCisKKyNkZWZpbmUgU0JfU1lTVEVNX1BBVEhfVEVTVF9PVVRQVVRfRElSRUNUT1JZX0RFUFJFQ0FURUQgXAorICBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KKworI2RlZmluZSBTQl9TWVNURU1fREVWSUNFX1BST0pFQ1RPUl9BRERFRCBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KKwogLy8gLS0tIFJlbGVhc2UgQ2FuZGlkYXRlIEZlYXR1cmUgRGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIC0tLSBDb21tb24gRGV0ZWN0ZWQgRmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYzLDE5ICsxNzMsMTEgQEAKIAogLy8gLS0tIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIEluY2x1ZGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFjcm8gaXMgc2V0IGJ5IEdZUCBpbgotLy8gc3RhcmJvYXJkX2Jhc2VfdGFyZ2V0Lmd5cGkgYW5kIHBhc3NlZCBpbiBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbGwgdGFyZ2V0cwotLy8gYW5kIGFsbCBjb25maWd1cmF0aW9ucy4KKy8vIEluY2x1ZGUgdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFjcm8gaXMgc2V0IGJ5IEdOIGluCisvLyBzdGFyYm9hcmQvYnVpbGQvY29uZmlnL0JVSUxELmduIGFuZCBwYXNzZWQgaW4gb24gdGhlIGNvbW1hbmQgbGluZSBmb3IgYWxsCisvLyB0YXJnZXRzIGFuZCBhbGwgY29uZmlndXJhdGlvbnMuCiAjaW5jbHVkZSBTVEFSQk9BUkRfQ09ORklHVVJBVElPTl9JTkNMVURFCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBBZnRlciB2ZXJzaW9uIDEyLCB3ZSBzdGFydCB0byB1c2UgcnVudGltZSBjb25zdGFudHMKLS8vIGluc3RlYWQgb2YgbWFjcm9zIGZvciBjZXJ0YWluIHBsYXRmb3JtIGRlcGVuZGVudCBjb25maWd1cmF0aW9ucy4gVGhpcyBmaWxlCi0vLyBzdWJzdGl0dXRlcyBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBjb25zdGFudHMgc28KLS8vIHdlIGRvbid0IHJlZmVyZW5jZSB0aGVzZSBjb25zdGFudHMgd2hlbiB0aGV5IGFyZW4ndCBkZWZpbmVkLgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzX2NvbXBhdGliaWxpdHlfZGVmaW5lcy5oIgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIC0tLSBPdmVycmlkYWJsZSBIZWxwZXIgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBUaGUgZm9sbG93aW5nIG1hY3JvcyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBTVEFSQk9BUkRfQ09ORklHVVJBVElPTl9JTkNMVURFCkBAIC0zNzUsNTAgKzM3NywxMSBAQAogI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgYmUgZXhhY3RseSBvbmUgb2YgeyAzMi1iaXQsIDY0LWJpdCB9LiIKICNlbmRpZgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogI2lmICFTQl9JUyhCSUdfRU5ESUFOKSAmJiAhU0JfSVMoTElUVExFX0VORElBTikgfHwgXAogICAgIChTQl9JUyhCSUdfRU5ESUFOKSA9PSBTQl9JUyhMSVRUTEVfRU5ESUFOKSkKICNlcnJvciAiWW91ciBwbGF0Zm9ybSdzIGVuZGlhbm5lc3MgbXVzdCBiZSBkZWZpbmVkIGFzIGJpZyBvciBsaXR0bGUuIgogI2VuZGlmCiAKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9JUyhBUkNIX1g4NikgJiYgU0JfSVMoNjRfQklUKQotI3VuZGVmIFNCX0lTX0FSQ0hfWDg2Ci0jZGVmaW5lIFNCX0lTX0FSQ0hfWDY0IDEKLSNlbmRpZiAgLy8gU0JfSVMoQVJDSF9YODYpICYmIFNCX0lTKDY0X0JJVCkKLQotI2lmIFNCX0lTKEFSQ0hfQVJNKSAmJiBTQl9JUyg2NF9CSVQpCi0jdW5kZWYgU0JfSVNfQVJDSF9BUk0KLSNkZWZpbmUgU0JfSVNfQVJDSF9BUk02NCAxCi0jZW5kaWYgIC8vIFNCX0lTKEFSQ0hfQVJNKSAmJiBTQl9JUyg2NF9CSVQpCi0KLSNpZiBTQl9IQVMoMzJfQklUX0xPTkcpCi0jZGVmaW5lIFNCX1NJWkVfT0ZfTE9ORyA0Ci0jZWxpZiBTQl9IQVMoNjRfQklUX0xPTkcpCi0jZGVmaW5lIFNCX1NJWkVfT0ZfTE9ORyA4Ci0jZW5kaWYgIC8vIFNCX0hBUygzMl9CSVRfTE9ORykKLQotI2lmIFNCX0hBUygzMl9CSVRfUE9JTlRFUlMpCi0jZGVmaW5lIFNCX1NJWkVfT0ZfUE9JTlRFUiA0Ci0jZWxpZiBTQl9IQVMoNjRfQklUX1BPSU5URVJTKQotI2RlZmluZSBTQl9TSVpFX09GX1BPSU5URVIgOAotI2VuZGlmICAvLyBTQl9IQVMoMzJfQklUX1BPSU5URVIpCi0KLVNCX0NPTVBJTEVfQVNTRVJUKHNpemVvZihsb25nKSA9PSBTQl9TSVpFX09GX0xPTkcsICAvLyBOT0xJTlQocnVudGltZS9pbnQpCi0gICAgICAgICAgICAgICAgICBTQl9TSVpFX09GX0xPTkdfaXNfaW5jb25zaXN0ZW50X3dpdGhfc2l6ZW9mX2xvbmcpOwotCi0jaWYgIWRlZmluZWQoU0JfSVNfQklHX0VORElBTikKLSNlcnJvciAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9JU19CSUdfRU5ESUFOLiIKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChTQl9JU19MSVRUTEVfRU5ESUFOKQotI2Vycm9yICJTQl9JU19MSVRUTEVfRU5ESUFOIGlzIHNldCBiYXNlZCBvbiBTQl9JU19CSUdfRU5ESUFOLiIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KICNpZiAoU0JfU0laRV9PRihQT0lOVEVSKSAhPSA0KSAmJiAoU0JfU0laRV9PRihQT0lOVEVSKSAhPSA4KQogI2Vycm9yICJZb3VyIHBsYXRmb3JtJ3MgcG9pbnRlciBzaXplcyBtdXN0IGJlIGVpdGhlciAzMiBiaXQgb3IgNjQgYml0LiIKICNlbmRpZgpAQCAtNDczLDggKzQzNiw2IEBACiAKICNlbmRpZiAgLy8gIVNCX0hBUyhTVERfVU5PUkRFUkVEX0hBU0gpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAjaWYgZGVmaW5lZChTQl9ERUZBVUxUX01NQVBfVEhSRVNIT0xEKQogI2Vycm9yIFwKICAgICAiU0JfREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gU3RhcmJvYXJkICIgXApAQCAtNjY0LDk0ICs2MjUsNiBAQAogInN0YXJib2FyZC88UExBVEZPUk1fUEFUSD4vY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MuIgogI2VuZGlmCiAKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jaWYgIWRlZmluZWQoU0JfRklMRV9NQVhfTkFNRSkgfHwgU0JfRklMRV9NQVhfTkFNRSA8IDIKLSNlcnJvciAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9GSUxFX01BWF9OQU1FID4gMS4iCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFNCX0ZJTEVfTUFYX1BBVEgpIHx8IFNCX0ZJTEVfTUFYX1BBVEggPCAyCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfRklMRV9NQVhfUEFUSCA+IDEuIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9IQVNfQUMzX0FVRElPKQotI2RlZmluZSBTQl9IQVNfQUMzX0FVRElPIDEKLSNlbGlmICFTQl9IQVMoQUMzX0FVRElPKQotI2Vycm9yICJTQl9IQVNfQUMzX0FVRElPIGlzIHJlcXVpcmVkIGluIHRoaXMgQVBJIHZlcnNpb24uIgotI2VuZGlmCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotI2lmIGRlZmluZWQoU0JfSEFTX0FTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcpCi0jZXJyb3IgIlNCX0hBU19BU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIgotI2VuZGlmICAvLyBkZWZpbmVkKFNCX0hBU19BU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9IQVNfVEhSRUFEX1BSSU9SSVRZX1NVUFBPUlQpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfSEFTX1RIUkVBRF9QUklPUklUWV9TVVBQT1JULiIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0JfTUFYX1RIUkVBRFMpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfTUFYX1RIUkVBRFMuIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9NQVhfVEhSRUFEX0xPQ0FMX0tFWVMpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfTUFYX1RIUkVBRF9MT0NBTF9LRVlTLiIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0JfRklMRV9BTFRfU0VQX0NIQVIpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfRklMRV9BTFRfU0VQX0NIQVIuIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9GSUxFX0FMVF9TRVBfU1RSSU5HKQotI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgZGVmaW5lIFNCX0ZJTEVfQUxUX1NFUF9TVFJJTkcuIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9GSUxFX1NFUF9DSEFSKQotI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgZGVmaW5lIFNCX0ZJTEVfU0VQX0NIQVIuIgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChTQl9GSUxFX1NFUF9TVFJJTkcpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfRklMRV9TRVBfU1RSSU5HLiIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0JfTUFYX1RIUkVBRF9OQU1FX0xFTkdUSCkKLSNlcnJvciAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9NQVhfVEhSRUFEX05BTUVfTEVOR1RILiIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0JfUEFUSF9TRVBfQ0hBUikKLSNlcnJvciAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9QQVRIX1NFUF9DSEFSLiIKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0JfUEFUSF9TRVBfU1RSSU5HKQotI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgZGVmaW5lIFNCX1BBVEhfU0VQX1NUUklORy4iCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIpCi0vLyBMZWdhbCB2YWx1ZXMgZm9yIFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIgYXJlIGRlZmluZWQgaW4gdGhpcyBmaWxlIGFib3ZlCi0vLyBhcyBTQl9QUkVGRVJSRURfUkdCQV9CWVRFX09SREVSXyouCi0vLyBJZiB5b3VyIHBsYXRmb3JtIHVzZXMgR0xFUywgeW91IHNob3VsZCBzZXQgdGhpcyB0bwotLy8gU0JfUFJFRkVSUkVEX1JHQkFfQllURV9PUkRFUl9SR0JBLgotI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgZGVmaW5lIFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIuIgotI2VuZGlmCi0KLSNpZiBTQl9QUkVGRVJSRURfUkdCQV9CWVRFX09SREVSICE9IFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVJfUkdCQSAmJiBcCi0gICAgU0JfUFJFRkVSUkVEX1JHQkFfQllURV9PUkRFUiAhPSBTQl9QUkVGRVJSRURfUkdCQV9CWVRFX09SREVSX0JHUkEgJiYgXAotICAgIFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIgIT0gU0JfUFJFRkVSUkVEX1JHQkFfQllURV9PUkRFUl9BUkdCCi0jZXJyb3IgIlNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIgaGFzIGJlZW4gYXNzaWduZWQgYW4gaW52YWxpZCB2YWx1ZS4iCi0jZW5kaWYKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jaWYgKFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIWRlZmluZWQoU0JfSEFTX01JQ1JPUEhPTkUpKQotI2Vycm9yIFwKLSAgICAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9IQVNfTUlDUk9QSE9ORSBpbiBBUEkgdmVyc2lvbnMgMTEgb3IgZWFybGllci4iCi0jZW5kaWYKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIWRlZmluZWQoU0JfSEFTX1RJTUVfVEhSRUFEX05PVykKLSNlcnJvciBcCi0gICAgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfSEFTX1RJTUVfVEhSRUFEX05PVyBpbiBBUEkgdmVyc2lvbnMgMyB0byAxMS4iCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoU0JfSVNfUExBWUVSX0NPTVBPU0lURUQpIHx8IGRlZmluZWQoU0JfSVNfUExBWUVSX1BVTkNIRURfT1VUKSB8fCBcCiAgICAgZGVmaW5lZChTQl9JU19QTEFZRVJfUFJPRFVDSU5HX1RFWFRVUkUpCiAjZXJyb3IgIk5ldyB2ZXJzaW9ucyBvZiBTdGFyYm9hcmQgc3BlY2lmeSBwbGF5ZXIgb3V0cHV0IG1vZGUgYXQgcnVudGltZS4iCkBAIC03NjUsMjggKzYzOCwxMSBAQAogI2Vycm9yICJZb3VyIHBsYXRmb3JtIG11c3QgZGVmaW5lIFNCX0hBU19OVjEyX1RFWFRVUkVfU1VQUE9SVC4iCiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAjaWYgZGVmaW5lZChTQl9NVVNUX0ZSRVFVRU5UTFlfRkxJUF9ESVNQTEFZX0JVRkZFUikKICNlcnJvciAiU0JfTVVTVF9GUkVRVUVOVExZX0ZMSVBfRElTUExBWV9CVUZGRVIgaXMgZGVwcmVjYXRlZC4iCiAjZXJyb3IgIlVzZSBgQ29iYWx0RXh0ZW5zaW9uR3JhcGhpY3NBcGlgIGluc3RlYWQuIgogI2Vycm9yICJTZWUgW2BDb2JhbHRFeHRlbnNpb25HcmFwaGljc0FwaWBdKC4uL2V4dGVuc2lvbi9ncmFwaGljcy5oKS4iCiAjZW5kaWYKLSNlbHNlCi0jaWYgIWRlZmluZWQoU0JfTVVTVF9GUkVRVUVOVExZX0ZMSVBfRElTUExBWV9CVUZGRVIpCi0jZXJyb3IgIllvdXIgcGxhdGZvcm0gbXVzdCBkZWZpbmUgU0JfTVVTVF9GUkVRVUVOVExZX0ZMSVBfRElTUExBWV9CVUZGRVIuIgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jaWYgZGVmaW5lZChDT0JBTFRfTUFYX0NQVV9VU0FHRV9JTl9CWVRFUykKLSNlcnJvciAifG1heF9jb2JhbHRfY3B1X3VzYWdlfCBpcyBkZXByZWNhdGVkICIKLSNlcnJvciAiU2JTeXN0ZW1HZXRUb3RhbENQVU1lbW9yeSgpIGluc3RlYWQuIgotI2VuZGlmCi0jaWYgZGVmaW5lZChDT0JBTFRfTUFYX0dQVV9VU0FHRV9JTl9CWVRFUykKLSNlcnJvciAifG1heF9jb2JhbHRfZ3B1X3VzYWdlfCBpcyBkZXByZWNhdGVkLiAiCi0jZXJyb3IgIkltcGxlbWVudCBTYlN5c3RlbUdldFRvdGFsR1BVTWVtb3J5KCkgaW5zdGVhZC4iCi0jZW5kaWYKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogI2lmIGRlZmluZWQoQ09CQUxUX01FRElBX0JVRkZFUl9OT05fVklERU9fQlVER0VUKQogI2Vycm9yICJDT0JBTFRfTUVESUFfQlVGRkVSX05PTl9WSURFT19CVURHRVQgaXMgZGVwcmVjYXRlZC4iCkBAIC04ODMsMjQgKzczOSwxNiBAQAogI2Vycm9yICJTQl9IQVNfQVVESU9MRVNTX1ZJREVPIGlzIGRlcHJlY2F0ZWQuIgogI2VuZGlmICAvLyBkZWZpbmVkKFNCX0hBU19BVURJT0xFU1NfVklERU8pCiAKLSNpZiAhZGVmaW5lZChTQl9IQVNfTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCi0jZGVmaW5lIFNCX0hBU19NRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCAxCi0jZWxpZiAhU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQorI2lmIGRlZmluZWQoU0JfSEFTX01FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQogI2Vycm9yIFwKLSAgICAiU0JfSEFTX01FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UIGlzIHJlcXVpcmVkIGluIHRoaXMgQVBJICIgXAotICAgICAgICAidmVyc2lvbi4iCi0jZW5kaWYKKyAgICAiU0JfSEFTX01FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UIHNob3VsZCBub3QgYmUgZGVmaW5lZCBmb3IgIiBcCisgICAgICAgICAgICJBUEkgdmVyc2lvbiA+PSAxMi4iCisjZW5kaWYgIC8vIGRlZmluZWQoU0JfSEFTX01FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQogCiAjaWYgZGVmaW5lZChTQl9IQVNfRFJNX1NFU1NJT05fQ0xPU0VEKQogI2Vycm9yICJTQl9IQVNfRFJNX1NFU1NJT05fQ0xPU0VEIHNob3VsZCBub3QgYmUgZGVmaW5lZCBmb3IgQVBJIHZlcnNpb24gPj0gMTAuIgogI2VuZGlmICAvLyBkZWZpbmVkKFNCX0hBU19EUk1fU0VTU0lPTl9DTE9TRUQpCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0jaWYgIWRlZmluZWQoU0JfSEFTX09OX1NDUkVFTl9LRVlCT0FSRCkKLSNlcnJvciAiWW91ciBwbGF0Zm9ybSBtdXN0IGRlZmluZSBTQl9IQVNfT05fU0NSRUVOX0tFWUJPQVJELiIKLSNlbmRpZiAgLy8gIWRlZmluZWQoU0JfSEFTX09OX1NDUkVFTl9LRVlCT0FSRCkKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCiAjaWYgZGVmaW5lZChTQl9IQVNfUExBWUVSX0ZJTFRFUl9URVNUUykKICNlcnJvciAiU0JfSEFTX1BMQVlFUl9GSUxURVJfVEVTVFMgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIGluIEFQSSB2ZXJzaW9ucyA+PSAxMC4iCiAjZW5kaWYgIC8vIGRlZmluZWQoU0JfSEFTX1BMQVlFUl9GSUxURVJfVEVTVFMpCkBAIC05MTEsNTAgKzc1OSwyMCBAQAogICAgICAgICI+PSAxMC4iCiAjZW5kaWYgIC8vIGRlZmluZWQoU0JfSEFTX1BMQVlFUl9FUlJPUl9NRVNTQUdFKQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSNpZiAhZGVmaW5lZChTQl9IQVNfUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLSNkZWZpbmUgU0JfSEFTX1BMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQgMQotI2VsaWYgIVNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQorI2lmIGRlZmluZWQoU0JfSEFTX1BMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAjZXJyb3IgXAotICAgICJTQl9IQVNfUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCBpcyByZXF1aXJlZCBpbiIgXAotICAgICIgdGhpcyBBUEkgdmVyc2lvbi4iCi0jZW5kaWYKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKKyAgICAiU0JfSEFTX1BMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQgc2hvdWxkIG5vdCBiZSAiIFwKKyAgICAgICAgImRlZmluZWQgaW4gQVBJIHZlcnNpb25zID49IDEyLiIKKyNlbmRpZiAgLy8gZGVmaW5lZChTQl9IQVNfUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIFNCX0hBU19RVUlSSyhTRUVLX1RPX0tFWUZSQU1FKQorI2lmIFNCX0hBU19RVUlSSyhTRUVLX1RPX0tFWUZSQU1FKQogI2Vycm9yIFwKICAgICAiU0JfSEFTX1FVSVJLX1NFRUtfVE9fS0VZRlJBTUUgaXMgZGVwcmVjYXRlZCBpbiBTdGFyYm9hcmQgMTIgb3IgbGF0ZXIuIiBcCiAgICAgICAgICAiIFBsZWFzZSBzZWUgY29uZmlndXJhdGlvbi1wdWJsaWMubWQgZm9yIG1vcmUgZGV0YWlscy4iCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIFNCX0hBU19RVUlSSyhTRUVLX1RPX0tFWUZSQU1FKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0jaWYgIWRlZmluZWQoU0JfSEFTX0NPTVBBQ1RfMTBCSVRTX0ZSQU1FKQotI2RlZmluZSBTQl9IQVNfQ09NUEFDVF8xMEJJVFNfRlJBTUUgMQotI2VsaWYgIVNCX0hBUyhTQl9IQVNfQ09NUEFDVF8xMEJJVFNfRlJBTUUpCi0jZXJyb3IgIlNCX0hBU19DT01QQUNUXzEwQklUU19GUkFNRSBpcyByZXF1aXJlZCBpbiB0aGlzIEFQSSB2ZXJzaW9uLiIKLSNlbmRpZgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSBTQl9FWFBFUklNRU5UQUxfQVBJX1ZFUlNJT04KLSNpZiBTQl9IQVMoU0JfSEFTX0NPTVBBQ1RfMTBCSVRTX0ZSQU1FKQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0jZXJyb3IgXAotICAgICJTQl9IQVMoU0JfSEFTX0NPTVBBQ1RfMTBCSVRTX0ZSQU1FKSByZXF1aXJlcyAiIFwKLSAgICAgIlNCX0FQSV9WRVJTSU9OIFNCX0VYUEVSSU1FTlRBTF9BUElfVkVSU0lPTiBvciBsYXRlci4iCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCi0jZW5kaWYgIC8vIFNCX0hBUyhTQl9IQVNfQ09NUEFDVF8xMEJJVFNfRlJBTUUpCisjZW5kaWYgIC8vIFNCX0hBU19RVUlSSyhTRUVLX1RPX0tFWUZSQU1FKQogCiAvLyAtLS0gRGVyaXZlZCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpcyBsaXR0bGUgZW5kaWFuLgotI2lmIFNCX0lTKEJJR19FTkRJQU4pCi0jZGVmaW5lIFNCX0lTX0xJVFRMRV9FTkRJQU4gMAotI2Vsc2UKLSNkZWZpbmUgU0JfSVNfTElUVExFX0VORElBTiAxCi0jZW5kaWYKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaGFzIDY0LWJpdCBhdG9taWMgb3BlcmF0aW9ucy4KICNpZiBTQl9JUyg2NF9CSVQpCiAjZGVmaW5lIFNCX0hBU182NF9CSVRfQVRPTUlDUyAxCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuaCBiL3N0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oCmluZGV4IDYzZWQ0NzguLjUyNzNjMzEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oCisrKyBiL3N0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oCkBAIC0yMyw4ICsyMyw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIERldGVybWluZXMgdGhlIHRocmVzaG9sZCBvZiBhbGxvY2F0aW9uIHNpemUgdGhhdCBzaG91bGQgYmUgZG9uZSB3aXRoIG1tYXAKIC8vIChpZiBhdmFpbGFibGUpLCByYXRoZXIgdGhhbiBhbGxvY2F0ZWQgd2l0aGluIHRoZSBjb3JlIGhlYXAuCiBleHRlcm4gY29uc3Qgc2l6ZV90IGtTYkRlZmF1bHRNbWFwVGhyZXNob2xkOwpAQCAtMTQ1LDYgKzE0Myw0IEBACiAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdXNlcnMgdGhhdCBjYW4gYmUgc2lnbmVkIGluIGF0IHRoZSBzYW1lIHRpbWUuCiBleHRlcm4gY29uc3QgdWludDMyX3Qga1NiVXNlck1heFNpZ25lZEluOwogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KICNlbmRpZiAgLy8gU1RBUkJPQVJEX0NPTkZJR1VSQVRJT05fQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvY29udHJpYi9saW51eC9zdGFkaWEvbWFpbi5jYyBiL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3N0YWRpYS9tYWluLmNjCmluZGV4IDYxYzkwYTEuLmFlNDRlOWYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3N0YWRpYS9tYWluLmNjCisrKyBiL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3N0YWRpYS9tYWluLmNjCkBAIC0xOSw2ICsxOSwxMCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc2lnbmFsL2NyYXNoX3NpZ25hbHMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9zdXNwZW5kX3NpZ25hbHMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9saW5rX3JlY2VpdmVyLmgiCisjaWYgU0JfSVMoRVZFUkdSRUVOX0NPTVBBVElCTEUpCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oIgogCkBAIC0yOCw3ICszMiwxMiBAQAogICBzdGFyYm9hcmQ6OnNoYXJlZDo6c2lnbmFsOjpJbnN0YWxsU3VzcGVuZFNpZ25hbEhhbmRsZXJzKCk7CiAKICNpZiBTQl9JUyhFVkVSR1JFRU5fQ09NUEFUSUJMRSkKLSAgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKCk7CisgIGlmIChzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpDb21tYW5kTGluZShhcmdjLCBhcmd2KQorICAgICAgICAgIC5IYXNTd2l0Y2goc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6a1N0YXJ0SGFuZGxlckF0Q3Jhc2gpKSB7CisgICAgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKHRydWUpOworICB9IGVsc2UgeworICAgIHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcihmYWxzZSk7CisgIH0KICNlbmRpZgogCiAjaWYgU0JfSEFTX1FVSVJLKEJBQ0tUUkFDRV9ETE9QRU5fQlVHKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NvbnRyaWIvbGludXgvc3RhZGlhL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9jb250cmliL2xpbnV4L3N0YWRpYS90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NTk5YTAuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2NvbnRyaWIvbGludXgvc3RhZGlhL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIGlzIG1lYW50IHRvIGxpdmUgdW5kZXIgc3RhcmJvYXJkL2xpbnV4L3N0YWRpYS8gKHNlZSAuLi9SRUFETUUubWQpLAotLy8gc28gd2UgZGlzYWJsZSB0aGUgaGVhZGVyIGd1YXJkIGNoZWNrLgotLy8gTk9MSU5UKGJ1aWxkL2hlYWRlcl9ndWFyZCkKLQotI2lmbmRlZiBTVEFSQk9BUkRfTElOVVhfU1RBRElBX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0xJTlVYX1NUQURJQV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfU1RBRElBX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9jcHVfZmVhdHVyZXMuaCBiL3N0YXJib2FyZC9jcHVfZmVhdHVyZXMuaAppbmRleCBkNTI3NDlmLi5mYmNiYWZlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvY3B1X2ZlYXR1cmVzLmgKKysrIGIvc3RhcmJvYXJkL2NwdV9mZWF0dXJlcy5oCkBAIC0xOTQsMTAgKzE5NCw4IEBACiAKICAgLy8gU1NFMyBleHRlbnNpb25zLgogICBib29sIGhhc19zc2UzOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFBDTE1VTFFEUSBpbnN0cnVjdGlvbi4KICAgYm9vbCBoYXNfcGNsbXVscWRxOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAvLyBTdXBwbGVtZW50YWwgU1NFMyBleHRlbnNpb25zLgogICBib29sIGhhc19zc3NlMzsKICAgLy8gU1NFLTQuMSBleHRlbnNpb25zLgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oIGIvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmUzYWFjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIE1vZHVsZSBPdmVydmlldzogU3RhcmJvYXJkIENyeXB0b2dyYXBoeSBtb2R1bGUKLS8vCi0vLyBIYXJkd2FyZS1hY2NlbGVyYXRlZCBjcnlwdG9ncmFwaHkuIFBsYXRmb3JtcyBzaG91bGQgKipvbmx5KiogaW1wbGVtZW50IHRoaXMKLS8vIHdoZW4gdGhlcmUgYXJlICoqaGFyZHdhcmUtYWNjZWxlcmF0ZWQqKiBjcnlwdG9ncmFwaHkgZmFjaWxpdGllcy4gQXBwbGljYXRpb25zCi0vLyBtdXN0IGZhbGwgYmFjayB0byBwbGF0Zm9ybS1pbmRlcGVuZGVudCBDUFUtYmFzZWQgYWxnb3JpdGhtcyBpZiB0aGUgY2lwaGVyCi0vLyBhbGdvcml0aG0gaXNuJ3Qgc3VwcG9ydGVkIGluIGhhcmR3YXJlLgotLy8KLS8vICMgVGlwcyBmb3IgUG9ydGVycwotLy8KLS8vIFlvdSBzaG91bGQgaW1wbGVtZW50IGNpcGhlciBhbGdvcml0aG1zIGluIHRoaXMgZGVzY2VuZGluZyBvcmRlciBvZiBwcmlvcml0eQotLy8gdG8gbWF4aW1pemUgdXNhZ2UgZm9yIFNTTC4KLS8vCi0vLyAgIDEuIEdDTSAtIFRoZSBwcmVmZXJyZWQgYmxvY2sgY2lwaGVyIG1vZGUgZm9yIE9wZW5TU0wsIG1haW5seSBkdWUgdG8gc3BlZWQuCi0vLyAgIDIuIENUUiAtIFRoaXMgY2FuIGJlIHVzZWQgaW50ZXJuYWxseSB3aXRoIEdDTSwgYXMgbG9uZyBhcyB0aGUgQ1RSCi0vLyAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9ubHkgdXNlcyB0aGUgbGFzdCA0IGJ5dGVzIG9mIHRoZSBJViBmb3IgdGhlCi0vLyAgICAgICAgICAgIGNvdW50ZXIuIChpLmUuIDk2LWJpdCBJViwgMzItYml0IGNvdW50ZXIpCi0vLyAgIDMuIEVDQiAtIFRoaXMgY2FuIGJlIHVzZWQgKHdpdGggYSBudWxsIElWKSB3aXRoIGFueSBvZiB0aGUgb3RoZXIgY2lwaGVyCi0vLyAgICAgICAgICAgIGJsb2NrIG1vZGVzIHRvIGFjY2VsZXJhdGUgdGhlIGNvcmUgQUVTIGFsZ29yaXRobSBpZiBub25lIG9mIHRoZQotLy8gICAgICAgICAgICBzdHJlYW1pbmcgbW9kZXMgY2FuIGJlIGFjY2VsZXJhdGVkLgotLy8gICA0LiBDQkMgLSBHQ00gaXMgYWx3YXlzIHByZWZlcnJlZCBpZiB0aGUgc2VydmVyIGFuZCBjbGllbnQgYm90aCBzdXBwb3J0Ci0vLyAgICAgICAgICAgIGl0LiBJZiBub3QsIHRoZXkgd2lsbCBnZW5lcmFsbHkgbmVnb3RpYXRlIGRvd24gdG8gQUVTLUNCQy4gSWYgdGhpcwotLy8gICAgICAgICAgICBoYXBwZW5zLCBhbmQgQ0JDIGlzIHN1cHBvcnRlZCBieSBTYkNyeXB0b2dyYXBoeSwgdGhlbiBpdCB3aWxsIGJlCi0vLyAgICAgICAgICAgIGFjY2VsZXJhdGVkIGFwcHJvcHJpYXRlbHkuIEJ1dCwgbW9zdCBzZXJ2ZXJzIHNob3VsZCBzdXBwb3J0IEdDTSwKLS8vICAgICAgICAgICAgc28gaXQgaXMgbm90IGxpa2VseSB0byBjb21lIHVwIG11Y2gsIHdoaWNoIGlzIHdoeSBpdCBpcyB0aGUgbG93ZXN0Ci0vLyAgICAgICAgICAgIHByaW9yaXR5LgotLy8KLS8vIEZ1cnRoZXIgcmVhZGluZyBvbiBibG9jayBjaXBoZXIgbW9kZXM6Ci0vLwotLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmxvY2tfY2lwaGVyX21vZGVfb2Zfb3BlcmF0aW9uCi0vLwotLy8gaHR0cHM6Ly9jcmJ1Zy5jb20vNDQyNTcyCi0vLwotLy8gaHR0cHM6Ly9jcnlwdG8uc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzEwNzc1L3ByYWN0aWNhbC1kaXNhZHZhbnRhZ2VzLW9mLWdjbS1tb2RlLWVuY3J5cHRpb24KLS8vCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0NSWVBUT0dSQVBIWV9IXwotI2RlZmluZSBTVEFSQk9BUkRfQ1JZUFRPR1JBUEhZX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jZXJyb3IgIlN0YXJib2FyZCBDcnlwdG8gQVBJIGlzIGRlcHJlY2F0ZWQiCi0jZWxzZQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8vIFN0cmluZyBsaXRlcmFsIGZvciB0aGUgQUVTIHN5bW1ldHJpYyBibG9jayBjaXBoZXIuCi0vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BZHZhbmNlZF9FbmNyeXB0aW9uX1N0YW5kYXJkCi0jZGVmaW5lIGtTYkNyeXB0b2dyYXBoeUFsZ29yaXRobUFlcyAiYWVzIgotCi0vLyBUaGUgZGlyZWN0aW9uIG9mIGEgY3J5cHRvZ3JhcGhpYyB0cmFuc2Zvcm1hdGlvbi4KLXR5cGVkZWYgZW51bSBTYkNyeXB0b2dyYXBoeURpcmVjdGlvbiB7Ci0gIC8vIENyeXB0b2dyYXBoaWMgdHJhbnNmb3JtYXRpb25zIHRoYXQgZW5jb2RlL2VuY3J5cHQgZGF0YSBpbnRvIGEKLSAgLy8gdGFyZ2V0IGZvcm1hdC4KLSAga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRW5jb2RlLAotCi0gIC8vIENyeXB0b2dyYXBoaWMgdHJhbnNmb3JtYXRpb25zIHRoYXQgZGVjb2RlL2RlY3J5cHQgZGF0YSBpbnRvCi0gIC8vIGl0cyBvcmlnaW5hbCBmb3JtLgotICBrU2JDcnlwdG9ncmFwaHlEaXJlY3Rpb25EZWNvZGUsCi19IFNiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uOwotCi0vLyBUaGUgbWV0aG9kIG9mIGNoYWluaW5nIGVuY3J5cHRlZCBibG9ja3MgaW4gYSBzZXF1ZW5jZS4KLS8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jsb2NrX2NpcGhlcl9tb2RlX29mX29wZXJhdGlvbgotdHlwZWRlZiBlbnVtIFNiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlIHsKLSAgLy8gQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUuCi0gIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUNiYywKLQotICAvLyBDaXBoZXIgRmVlZGJhY2sgbW9kZS4KLSAga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ2ZiLAotCi0gIC8vIENvdW50ZXIgbW9kZTogQSBub25jZSBpcyBjb21iaW5lZCB3aXRoIGFuIGluY3JlYXNpbmcgY291bnRlci4KLSAga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ3RyLAotCi0gIC8vIEVsZWN0cm9uaWMgQ29kZSBCb29rIG1vZGU6IE5vIGNoYWluaW5nLgotICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVFY2IsCi0KLSAgLy8gT3V0cHV0IEZlZWRiYWNrIG1vZGUuCi0gIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZU9mYiwKLQotICAvLyBHYWxvaXMvQ291bnRlciBNb2RlLgotICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVHY20sCi19IFNiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlOwotCi0vLyBQcml2YXRlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBjcnlwdG9ncmFwaGljIHRyYW5zZm9ybWVyCi0vLyBjb25maWd1cmF0aW9uIGFuZCBzdGF0ZS4KLXR5cGVkZWYgc3RydWN0IFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXJQcml2YXRlCi0gICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lclByaXZhdGU7Ci0KLS8vIEEgaGFuZGxlIHRvIGEgY3J5cHRvZ3JhcGhpYyB0cmFuc2Zvcm1lci4KLXR5cGVkZWYgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lclByaXZhdGUqIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXI7Ci0KLS8vIFdlbGwtZGVmaW5lZCB2YWx1ZSBmb3IgYW4gaW52YWxpZCB0cmFuc2Zvcm1lci4KLSNkZWZpbmUga1NiQ3J5cHRvZ3JhcGh5SW52YWxpZFRyYW5zZm9ybWVyICgoU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lcilOVUxMKQotCi0vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHRyYW5zZm9ybWVyIGhhbmRsZSBpcyB2YWxpZC4KLXN0YXRpYyBTQl9DX0lOTElORSBib29sIFNiQ3J5cHRvZ3JhcGh5SXNUcmFuc2Zvcm1lclZhbGlkKAotICAgIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpIHsKLSAgcmV0dXJuIHRyYW5zZm9ybWVyICE9IGtTYkNyeXB0b2dyYXBoeUludmFsaWRUcmFuc2Zvcm1lcjsKLX0KLQotLy8gQ3JlYXRlcyBhbiBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHdpdGggdGhlIGdpdmVuIGluaXRpYWxpemF0aW9uCi0vLyBkYXRhLiBJdCBjYW4gdGhlbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSBhIHNlcmllcyBvZiBkYXRhIGJsb2Nrcy4KLS8vIFJldHVybnMga1NiQ3J5cHRvZ3JhcGh5SW52YWxpZFRyYW5zZm9ybWVyIGlmIHRoZSBhbGdvcml0aG0gaXNuJ3QKLS8vIHN1cHBvcnRlZCwgb3IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlCi0vLyBhbGdvcml0aG0uCi0vLwotLy8gQW4gU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciBjb250YWlucyBhbGwgc3RhdGUgdG8gc3RhcnQgZGVjcnlwdGluZwotLy8gYSBzZXF1ZW5jZSBvZiBjaXBoZXIgYmxvY2tzIGFjY29yZGluZyB0byB0aGUgY2lwaGVyIGJsb2NrIG1vZGUuIEl0Ci0vLyBpcyBub3QgdGhyZWFkLXNhZmUsIGJ1dCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBhbGxvdyBkaWZmZXJlbnQKLS8vIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgaW5zdGFuY2VzIHRvIG9wZXJhdGUgb24gZGlmZmVyZW50IHRocmVhZHMuCi0vLwotLy8gQWxsIHBhcmFtZXRlcnMgbXVzdCBub3QgYmUgYXNzdW1lZCB0byBsaXZlIGxvbmdlciB0aGFuIHRoZSBjYWxsIHRvCi0vLyB0aGlzIGZ1bmN0aW9uLiBUaGV5IG11c3QgYmUgY29waWVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBiZQotLy8gcmV0YWluZWQuCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHN1Y2Nlc3MgbWFpbmx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIGNvbWJpbmF0aW9uIG9mCi0vLyB8YWxnb3JpdGhtfCwgfGRpcmVjdGlvbnwsIHxibG9ja19zaXplX2JpdHN8LCBhbmQgfG1vZGV8IGlzIHN1cHBvcnRlZCBhbmQKLS8vIHdoZXRoZXIgYWxsIHRoZSBzaXplcyBwYXNzZWQgaW4gYXJlIHN1ZmZpY2llbnQgZm9yIHRoZSBzZWxlY3RlZAotLy8gcGFyYW1ldGVycy4gSW4gcGFydGljdWxhciwgdGhpcyBmdW5jdGlvbiBjYW5ub3QgdmVyaWZ5IHRoYXQgdGhlIGtleSBhbmQgSVYKLS8vIHVzZWQgd2VyZSBjb3JyZWN0IGZvciB0aGUgY2lwaGVydGV4dCwgd2VyZSBpdCB0byBiZSB1c2VkIGluIHRoZSBkZWNvZGUKLS8vIGRpcmVjdGlvbi4gVGhlIGNhbGxlciBtdXN0IG1ha2UgdGhhdCB2ZXJpZmljYXRpb24uCi0vLwotLy8gRm9yIGV4YW1wbGUsIHRvIGRlY3J5cHQgQUVTLTEyOC1DVFI6Ci0vLyAgIFNiQ3J5cHRvZ3JhcGh5Q3JlYXRlVHJhbnNmb3JtZXIoa1NiQ3J5cHRvZ3JhcGh5QWxnb3JpdGhtQWVzLCAxMjgsCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRGVjb2RlLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUN0ciwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwotLy8KLS8vIHxhbGdvcml0aG18OiBBIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNpcGhlciBhbGdvcml0aG0uCi0vLyB8YmxvY2tfc2l6ZV9iaXRzfDogVGhlIGJsb2NrIHNpemUgdmFyaWFudCBvZiB0aGUgYWxnb3JpdGhtIHRvIHVzZSwgaW4gYml0cy4KLS8vIHxkaXJlY3Rpb258OiBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRvIHRyYW5zZm9ybSB0aGUgZGF0YS4KLS8vIHxtb2RlfDogVGhlIGJsb2NrIGNpcGhlciBtb2RlIHRvIHVzZS4KLS8vIHxpbml0aWFsaXphdGlvbl92ZWN0b3J8OiBUaGUgSW5pdGlhbGl6YXRpb24gVmVjdG9yIChJVikgdG8gdXNlLiBNYXkgYmUgTlVMTAotLy8gZm9yIGJsb2NrIGNpcGhlciBtb2RlcyB0aGF0IGRvbid0IHVzZSBpdCwgb3IgZG9uJ3Qgc2V0IGl0IGF0IGluaXQgdGltZS4KLS8vIHxpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZXw6IFRoZSBzaXplLCBpbiBieXRlcywgb2YgdGhlIElWLgotLy8gfGtleXw6IFRoZSBrZXkgdG8gdXNlIGZvciB0aGlzIHRyYW5zZm9ybWF0aW9uLgotLy8gfGtleV9zaXplfDogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUga2V5LgotLy8KLS8vIHByZXN1Ym1pdDogYWxsb3cgc2JfZXhwb3J0IG1pc21hdGNoCi1TQl9FWFBPUlQgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lcgotU2JDcnlwdG9ncmFwaHlDcmVhdGVUcmFuc2Zvcm1lcihjb25zdCBjaGFyKiBhbGdvcml0aG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9ja19zaXplX2JpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGUgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogaW5pdGlhbGl6YXRpb25fdmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleV9zaXplKTsKLQotLy8gRGVzdHJveXMgdGhlIGdpdmVuIHx0cmFuc2Zvcm1lcnwgaW5zdGFuY2UuCi0vLwotLy8gcHJlc3VibWl0OiBhbGxvdyBzYl9leHBvcnQgbWlzbWF0Y2gKLVNCX0VYUE9SVCB2b2lkIFNiQ3J5cHRvZ3JhcGh5RGVzdHJveVRyYW5zZm9ybWVyKAotICAgIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpOwotCi0vLyBUcmFuc2Zvcm1zIG9uZSBvciBtb3JlIHxibG9ja19zaXplX2JpdHN8LXNpemVkIGJsb2NrcyBvZiB8aW5fZGF0YXwsIHdpdGggdGhlCi0vLyBnaXZlbiB8dHJhbnNmb3JtZXJ8LCBwbGFjaW5nIHRoZSByZXN1bHQgaW4gfG91dF9kYXRhfC4gUmV0dXJucyB0aGUgbnVtYmVyIG9mCi0vLyBieXRlcyB0aGF0IHdlcmUgd3JpdHRlbiB0byB8b3V0X2RhdGF8LCB1bmxlc3MgdGhlcmUgd2FzIGFuIGVycm9yLCBpbiB3aGljaAotLy8gY2FzZSBpdCB3aWxsIHJldHVybiBhIG5lZ2F0aXZlIG51bWJlci4KLS8vCi0vLyB8dHJhbnNmb3JtZXJ8OiBBIHRyYW5zZm9ybWVyIGluaXRpYWxpemVkIHdpdGggYW4gYWxnb3JpdGhtLCBJViwgY2lwaGVya2V5LAotLy8gYW5kIHNvIG9uLgotLy8gfGluX2RhdGF8OiBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZC4KLS8vIHxpbl9kYXRhX3NpemV8OiBUaGUgc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZCwgaW4gYnl0ZXMuIE11c3QgYmUgYQotLy8gbXVsdGlwbGUgb2YgdGhlIHRyYW5zZm9ybWVyJ3MgfGJsb2NrLXNpemVfYml0c3wsIG9yIGFuIGVycm9yIHdpbGwgYmUKLS8vIHJldHVybmVkLgotLy8gfG91dF9kYXRhfDogQSBidWZmZXIgd2hlcmUgdGhlIHRyYW5zZm9ybWVkIGRhdGEgc2hvdWxkIGJlIHBsYWNlZC4gTXVzdCBoYXZlCi0vLyBhdCBsZWFzdCBjYXBhY2l0eSBmb3IgfGluX2RhdGFfc2l6ZXwgYnl0ZXMuIE1heSBwb2ludCB0byB0aGUgc2FtZSBtZW1vcnkgYXMKLS8vIHxpbl9kYXRhfC4KLS8vCi0vLyBwcmVzdWJtaXQ6IGFsbG93IHNiX2V4cG9ydCBtaXNtYXRjaAotU0JfRVhQT1JUIGludCBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybSgKLSAgICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyLAotICAgIGNvbnN0IHZvaWQqIGluX2RhdGEsCi0gICAgaW50IGluX2RhdGFfc2l6ZSwKLSAgICB2b2lkKiBvdXRfZGF0YSk7Ci0KLS8vIFNldHMgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpIGZvciBhIHRyYW5zZm9ybWVyLCByZXBsYWNpbmcgdGhlCi0vLyBpbnRlcm5hbGx5LXNldCBJVi4gVGhlIGJsb2NrIGNpcGhlciBtb2RlIGFsZ29yaXRobSB3aWxsIHVwZGF0ZSB0aGUgSVYKLS8vIGFwcHJvcHJpYXRlbHkgYWZ0ZXIgZXZlcnkgYmxvY2ssIHNvIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmVhbQotLy8gaXMgZGlzY29udGlndW91cyBpbiBzb21lIHdheS4gVGhpcyBoYXBwZW5zIHdpdGggQUVTLUdDTSBpbiBUTFMuCi0vLwotLy8gcHJlc3VibWl0OiBhbGxvdyBzYl9leHBvcnQgbWlzbWF0Y2gKLVNCX0VYUE9SVCB2b2lkIFNiQ3J5cHRvZ3JhcGh5U2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoCi0gICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciwKLSAgICBjb25zdCB2b2lkKiBpbml0aWFsaXphdGlvbl92ZWN0b3IsCi0gICAgaW50IGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplKTsKLQotLy8gU2V0cyBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0ZWQgZGF0YSAoQUFEKSBmb3IgYSB0cmFuc2Zvcm1lciwgZm9yIGNoYWluaW5nCi0vLyBtb2RlcyB0aGF0IHN1cHBvcnQgaXQgKEdDTSkuIFJldHVybnMgd2hldGhlciB0aGUgZGF0YSB3YXMgc3VjY2Vzc2Z1bGx5Ci0vLyBzZXQuIFRoaXMgY2FuIGZhaWwgaWYgdGhlIGNoYWluaW5nIG1vZGUgZG9lc24ndCBzdXBwb3J0IEFBRCwgaWYgdGhlCi0vLyBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBvciBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgaXMgaW52YWxpZCBmb3Igc2V0dGluZyBBQUQuCi0vLwotLy8gcHJlc3VibWl0OiBhbGxvdyBzYl9leHBvcnQgbWlzbWF0Y2gKLVNCX0VYUE9SVCBib29sIFNiQ3J5cHRvZ3JhcGh5U2V0QXV0aGVudGljYXRlZERhdGEoCi0gICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciwKLSAgICBjb25zdCB2b2lkKiBkYXRhLAotICAgIGludCBkYXRhX3NpemUpOwotCi0vLyBDYWxjdWxhdGVzIHRoZSBhdXRoZW50aWNhdG9yIHRhZyBmb3IgYSB0cmFuc2Zvcm1lciBhbmQgcGxhY2VzIHVwIHRvCi0vLyB8b3V0X3RhZ19zaXplfCBieXRlcyBvZiBpdCBpbiB8b3V0X3RhZ3wuIFJldHVybnMgd2hldGhlciBpdCB3YXMgYWJsZSB0byBnZXQKLS8vIHRoZSB0YWcsIHdoaWNoIG1haW5seSBoYXMgdG8gZG8gd2l0aCB3aGV0aGVyIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKLS8vIGN1cnJlbnQgYmxvY2sgY2lwaGVyIG1vZGUuCi0vLwotLy8gcHJlc3VibWl0OiBhbGxvdyBzYl9leHBvcnQgbWlzbWF0Y2gKLVNCX0VYUE9SVCBib29sIFNiQ3J5cHRvZ3JhcGh5R2V0VGFnKAotICAgIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIsCi0gICAgdm9pZCogb3V0X3RhZywKLSAgICBpbnQgb3V0X3RhZ19zaXplKTsKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19ICAvLyBleHRlcm4gIkMiCi0jZW5kaWYKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9DUllQVE9HUkFQSFlfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmggYi9zdGFyYm9hcmQvZGVjb2RlX3RhcmdldC5oCmluZGV4IGU4MTgzZjkuLjlkMjRlZmYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmgKKysrIGIvc3RhcmJvYXJkL2RlY29kZV90YXJnZXQuaApAQCAtMTM0LDEwICsxMzQsMTIgQEAKICAgLy8gb3JkZXIuIEVhY2ggcGl4ZWwgaXMgc3RvcmVkIGluIDE2IGJpdHMuCiAgIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMCwKIAorI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFQ09ERV9UQVJHRVRfRk9STUFUX1lVVkk0MjBfQ09NUEFDVF9BUElfVkVSU0lPTgogICAvLyBBIGRlY29kZXIgdGFyZ2V0IGZvcm1hdCBjb25zaXN0aW5nIG9mIDEwYml0IFksIFUsIGFuZCBWIHBsYW5lcywgaW4gdGhhdAogICAvLyBvcmRlci4gVGhlIHBsYW5lIGRhdGEgaXMgc3RvcmVkIGluIGEgY29tcGFjdCBmb3JtYXQuIEV2ZXJ5IHRocmVlIDEwLWJpdAogICAvLyBwaXhlbHMgYXJlIHBhY2tlZCBpbnRvIDMyIGJpdHMuCiAgIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMENvbXBhY3QsCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFQ09ERV9UQVJHRVRfRk9STUFUX1lVVkk0MjBfQ09NUEFDVF9BUElfVkVSU0lPTgogCiAgIC8vIEEgZGVjb2RlciB0YXJnZXQgZm9ybWF0IGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgcGxhbmUgd2l0aCBwaXhlbHMgbGFpZCBvdXQKICAgLy8gaW4gdGhlIGZvcm1hdCBVWVZZLiAgU2luY2UgdGhlcmUgYXJlIHR3byBZIHZhbHVlcyBwZXIgc2FtcGxlLCBidXQgb25seSBvbmUKQEAgLTE3NSw3ICsxNzcsNiBAQAogICBrU2JEZWNvZGVUYXJnZXRQbGFuZVYgPSAyLAogfSBTYkRlY29kZVRhcmdldFBsYW5lOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKEdMRVMyKQogc3RydWN0IFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXI7CiAKIC8vIFNpZ25hdHVyZSBmb3IgYSBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gdGhhdCBpcyB0byBiZSBydW4gYnkgYQpAQCAtMTkxLDcgKzE5Miw2IEBACiAgICAgc3RydWN0IFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIGdyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIsCiAgICAgU2JEZWNvZGVUYXJnZXRHbGVzQ29udGV4dFJ1bm5lclRhcmdldCB0YXJnZXRfZnVuY3Rpb24sCiAgICAgdm9pZCogdGFyZ2V0X2Z1bmN0aW9uX2NvbnRleHQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAKIC8vIEluIGdlbmVyYWwsIHRoZSBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyIHN0cnVjdHVyZSBwcm92aWRlcwogLy8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdyYXBoaWNzIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyCkBAIC0yMDEsNyArMjAxLDYgQEAKIC8vIHNob3VsZCBiZSBwcm92aWRlZCB0byBhbGwgU3RhcmJvYXJkIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGNyZWF0ZQogLy8gU2JEZWNvZGVUYXJnZXRzIChlLmcuIFNiSW1hZ2VEZWNvZGUoKSkuCiB0eXBlZGVmIHN0cnVjdCBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAgIC8vIEEgcmVmZXJlbmNlIHRvIHRoZSBFR0xEaXNwbGF5IG9iamVjdCB0aGF0IGhvc3RzIHRoZSBFR0xDb250ZXh0IHRoYXQgd2lsbAogICAvLyBiZSB1c2VkIHRvIHJlbmRlciBhbnkgcHJvZHVjZWQgU2JEZWNvZGVUYXJnZXRzLiAgTm90ZSB0aGF0IGl0IGhhcyB0aGUKICAgLy8gdHlwZSB8dm9pZCp8IGluIG9yZGVyIHRvIGF2b2lkICNpbmNsdWRpbmcgdGhlIEVHTCBoZWFkZXIgZmlsZXMgaGVyZS4KQEAgLTIyMCw3ICsyMTksNiBAQAogICAvLyBDb250ZXh0IGRhdGEgdGhhdCBpcyB0byBiZSBwYXNzZWQgaW4gdG8gfGdsZXNfY29udGV4dF9ydW5uZXJ8IHdoZW4gaXQgaXMKICAgLy8gaW52b2tlZC4KICAgdm9pZCogZ2xlc19jb250ZXh0X3J1bm5lcl9jb250ZXh0OwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiB9IFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXI7CiAKIC8vIERlZmluZXMgYSByZWN0YW5ndWxhciBjb250ZW50IHJlZ2lvbiB3aXRoaW4gYSBTYkRlY29kZVRhcmdldEluZm9QbGFuZQpAQCAtMjM5LDcgKzIzNyw2IEBACiAKIC8vIERlZmluZXMgYW4gaW1hZ2UgcGxhbmUgd2l0aGluIGEgU2JEZWNvZGVUYXJnZXRJbmZvIG9iamVjdC4KIHR5cGVkZWYgc3RydWN0IFNiRGVjb2RlVGFyZ2V0SW5mb1BsYW5lIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCiAgIC8vIEEgaGFuZGxlIHRvIHRoZSBHTCB0ZXh0dXJlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZy4KICAgdWludDMyX3QgdGV4dHVyZTsKIApAQCAtMjU1LDggKzI1Miw2IEBACiAgIC8vIElnbm9yZWQgZm9yIG90aGVyIHBsYW5lIHR5cGVzLgogICB1aW50MzJfdCBnbF90ZXh0dXJlX2Zvcm1hdDsKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoR0xFUzIpCi0KICAgLy8gVGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlL3N1cmZhY2UgZm9yIHRoaXMgcGFydGljdWxhciBwbGFuZS4KICAgaW50IHdpZHRoOwogICAvLyBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlL3N1cmZhY2UgZm9yIHRoaXMgcGFydGljdWxhciBwbGFuZS4KQEAgLTMyOSw3ICszMjQsOSBAQAogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MlBsYW5lWVVWTlYxMjoKICAgICAgIHJldHVybiAyOwogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwOgorI2lmIFNCX0FQSV9WRVJTSU9OID49IFNCX0RFQ09ERV9UQVJHRVRfRk9STUFUX1lVVkk0MjBfQ09NUEFDVF9BUElfVkVSU0lPTgogICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwQ29tcGFjdDoKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVDT0RFX1RBUkdFVF9GT1JNQVRfWVVWSTQyMF9DT01QQUNUX0FQSV9WRVJTSU9OCiAgICAgY2FzZSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQzUGxhbmVZVVZJNDIwOgogICAgICAgcmV0dXJuIDM7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9kaXJlY3RvcnkuaCBiL3N0YXJib2FyZC9kaXJlY3RvcnkuaAppbmRleCA2NWJlNTRmLi4wODcxMjAxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZGlyZWN0b3J5LmgKKysrIGIvc3RhcmJvYXJkL2RpcmVjdG9yeS5oCkBAIC0zNCwxNCArMzQsNiBAQAogLy8gQSBoYW5kbGUgdG8gYW4gb3BlbiBkaXJlY3Rvcnkgc3RyZWFtLgogdHlwZWRlZiBzdHJ1Y3QgU2JEaXJlY3RvcnlQcml2YXRlKiBTYkRpcmVjdG9yeTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFJlcHJlc2VudHMgYSBkaXJlY3RvcnkgZW50cnkuCi10eXBlZGVmIHN0cnVjdCBTYkRpcmVjdG9yeUVudHJ5IHsKLSAgLy8gVGhlIG5hbWUgb2YgdGhpcyBkaXJlY3RvcnkgZW50cnkuCi0gIGNoYXIgbmFtZVtTQl9GSUxFX01BWF9OQU1FXTsKLX0gU2JEaXJlY3RvcnlFbnRyeTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCiAvLyBXZWxsLWRlZmluZWQgdmFsdWUgZm9yIGFuIGludmFsaWQgZGlyZWN0b3J5IHN0cmVhbSBoYW5kbGUuCiAjZGVmaW5lIGtTYkRpcmVjdG9yeUludmFsaWQgKChTYkRpcmVjdG9yeSlOVUxMKQogCkBAIC02Niw3ICs1OCw2IEBACiAvLyB8ZGlyZWN0b3J5fDogVGhlIGRpcmVjdG9yeSBzdHJlYW0gaGFuZGxlIHRvIGNsb3NlLgogU0JfRVhQT1JUIGJvb2wgU2JEaXJlY3RvcnlDbG9zZShTYkRpcmVjdG9yeSBkaXJlY3RvcnkpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIC8vIFBvcHVsYXRlcyB8b3V0X2VudHJ5fCB3aXRoIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHN0cmVhbSwKIC8vIGFuZCBtb3ZlcyB0aGUgc3RyZWFtIGZvcndhcmQgYnkgb25lIGVudHJ5LgogLy8KQEAgLTg3LDIyICs3OCw2IEBACiBTQl9FWFBPUlQgYm9vbCBTYkRpcmVjdG9yeUdldE5leHQoU2JEaXJlY3RvcnkgZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0X2VudHJ5X3NpemUpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotLy8gUG9wdWxhdGVzIHxvdXRfZW50cnl8IHdpdGggdGhlIG5leHQgZW50cnkgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgc3RyZWFtLAotLy8gYW5kIG1vdmVzIHRoZSBzdHJlYW0gZm9yd2FyZCBieSBvbmUgZW50cnkuCi0vLwotLy8gUGxhdGZvcm1zIG1heSwgYnV0IGFyZSBub3QgcmVxdWlyZWQgdG8sIHJldHVybiB8LnwgKHJlZmVycmluZyB0byB0aGUKLS8vIGRpcmVjdG9yeSBpdHNlbGYpIGFuZC9vciB8Li58IChyZWZlcnJpbmcgdG8gdGhlIGRpcmVjdG9yeSdzIHBhcmVudCBkaXJlY3RvcnkpCi0vLyBhcyBlbnRyaWVzIGluIHRoZSBkaXJlY3Rvcnkgc3RyZWFtLgotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB8dHJ1ZXwgaWYgdGhlcmUgd2FzIGEgbmV4dCBkaXJlY3RvcnksIGFuZCB8ZmFsc2V8Ci0vLyBhdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3Rvcnkgc3RyZWFtLgotLy8KLS8vIHxkaXJlY3Rvcnl8OiBUaGUgZGlyZWN0b3J5IHN0cmVhbSBmcm9tIHdoaWNoIHRvIHJldHJpZXZlIHRoZSBuZXh0IGRpcmVjdG9yeS4KLS8vIHxvdXRfZW50cnl8OiBUaGUgdmFyaWFibGUgdG8gYmUgcG9wdWxhdGVkIHdpdGggdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5LgotU0JfRVhQT1JUIGJvb2wgU2JEaXJlY3RvcnlHZXROZXh0KFNiRGlyZWN0b3J5IGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRpcmVjdG9yeUVudHJ5KiBvdXRfZW50cnkpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAvLyBJbmRpY2F0ZXMgd2hldGhlciBTYkRpcmVjdG9yeU9wZW4gaXMgYWxsb3dlZCBmb3IgdGhlIGdpdmVuIHxwYXRofC4KIC8vCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL2M5OS5tZCBiL3N0YXJib2FyZC9kb2MvYzk5Lm1kCmluZGV4IDc2OWFkM2UuLjg4YzQxYjcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9kb2MvYzk5Lm1kCisrKyBiL3N0YXJib2FyZC9kb2MvYzk5Lm1kCkBAIC0xNSw3ICsxNSw3IEBACiBbc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nXSguLi8uLi9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcpIGRpcmVjdG9yeSBtYW55CiBub24tRXZlcmdyZWVuIHBsYXRmb3JtcyBzdGlsbCBoYXZlIGEgbG90IG9mIGRpcmVjdCBzeXN0ZW0gZGVwZW5kZW5jaWVzLiBUaGVzZQogZGVwZW5kZW5jaWVzIGRvIG5vdCBleGlzdCBmb3IgRXZlcmdyZWVuIHBsYXRmb3JtcyBhcyBDb2JhbHQgaXMgc3RhdGljYWxseQotbGlua2VkIHdpdGggdGhlIFttdXNsXSguLi8uLi90aGlyZF9wYXJ0eS9tdXNsL211c2wuZ3lwKSBsaWJjIGxpYnJhcnkuCitsaW5rZWQgd2l0aCB0aGUgW211c2xdKC4uLy4uL3RoaXJkX3BhcnR5L211c2wvQlVJTEQuZ24pIGxpYmMgbGlicmFyeS4KIAogMy4gU3RhcnRpbmcgd2l0aCBTdGFyYm9hcmQgMTMgYSBsaW1pdGVkIHNldCBvZiBDOTkgc3ltYm9scyB3aWxsIGJlIGFsbG93ZWQuCiBUaGlzIHNldCB3aWxsIGV4cGFuZCBncmFkdWFsbHkgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcgU3RhcmJvYXJkIEFQSXMgd2lsbCBiZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2RvYy9jcmFzaF9oYW5kbGVycy5tZCBiL3N0YXJib2FyZC9kb2MvY3Jhc2hfaGFuZGxlcnMubWQKaW5kZXggOGFhMTFkOC4uMDg2M2JmMSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2RvYy9jcmFzaF9oYW5kbGVycy5tZAorKysgYi9zdGFyYm9hcmQvZG9jL2NyYXNoX2hhbmRsZXJzLm1kCkBAIC0zMiw3ICszMiw3IEBACiB9CiBgYGAKIAotMy4gQ2FsbGluZyB0aGUgYHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcigpYCBob29rCiszLiBDYWxsaW5nIHRoZSBgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKGJvb2wgc3RhcnRfYXRfY3Jhc2gpYCBob29rCiBkaXJlY3RseSBhZnRlciBpbnN0YWxsaW5nIHN5c3RlbSBjcmFzaCBoYW5kbGVycy4gT24gbGludXgsIGZvciBleGFtcGxlLCB0aGlzCiBjb3VsZCBsb29rIGxpa2U6CiAKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgc3RhcmJvYXJkOjpzaGFyZWQ6OnNpZ25hbDo6SW5zdGFsbENyYXNoU2lnbmFsSGFuZGxlcnMoKTsKICAgc3RhcmJvYXJkOjpzaGFyZWQ6OnNpZ25hbDo6SW5zdGFsbFN1c3BlbmRTaWduYWxIYW5kbGVycygpOwogCi0gIHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcigpOworICB0aGlyZF9wYXJ0eTo6Y3Jhc2hwYWQ6OndyYXBwZXI6Okluc3RhbGxDcmFzaHBhZEhhbmRsZXIodHJ1ZSk7CiAKICAgaW50IHJlc3VsdCA9IGFwcGxpY2F0aW9uLlJ1bihhcmdjLCBhcmd2KTsKICAgLi4uCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL2V2ZXJncmVlbi9jb2JhbHRfZXZlcmdyZWVuX292ZXJ2aWV3Lm1kIGIvc3RhcmJvYXJkL2RvYy9ldmVyZ3JlZW4vY29iYWx0X2V2ZXJncmVlbl9vdmVydmlldy5tZAppbmRleCAwMDFmMzI0Li5jYzIxZmEyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZG9jL2V2ZXJncmVlbi9jb2JhbHRfZXZlcmdyZWVuX292ZXJ2aWV3Lm1kCisrKyBiL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fb3ZlcnZpZXcubWQKQEAgLTEwMSw4ICsxMDEsOCBAQAogQ29iYWx0IEV2ZXJncmVlbiBpcyBidWlsdCBieSBhIHNlcGFyYXRlIGd5cCBwbGF0Zm9ybSB1c2luZyB0aGUgR29vZ2xlIHRvb2xjaGFpbjoKIAogYGBgCi0kIGNvYmFsdC9idWlsZC9neXBfY29iYWx0IGV2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMgotJCBuaW5qYSAtQyBvdXQvZXZlcmdyZWVuLWFybS1zb2Z0ZnAtc2J2ZXJzaW9uLTEyX3FhIGNvYmFsdAorJCBjb2JhbHQvYnVpbGQvZ24ucHkgLXAgZXZlcmdyZWVuLWFybS1zb2Z0ZnAgLWMgcWEKKyQgbmluamEgLUMgb3V0L2V2ZXJncmVlbi1hcm0tc29mdGZwX3FhIGNvYmFsdAogYGBgCiAKIFdoaWNoIHByb2R1Y2VzIGEgc2hhcmVkIGxpYnJhcnkgYGxpYmNvYmFsdC5zb2AgdGFyZ2V0ZWQgZm9yIHNwZWNpZmljCkBAIC0xMTUsNyArMTE1LDcgQEAKIGBsaWJjb2JhbHQuc29gLCBhbmQgdGhlIGBjcmFzaHBhZF9oYW5kbGVyYCB3aGljaCBoYW5kbGVzIGNyYXNoZXMuCiAKIGBgYAotJCBjb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCA8cGFydG5lcl9wb3J0X25hbWU+CiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCA8cGFydG5lcl9wb3J0X25hbWU+IC1jIHFhCiAkIG5pbmphIC1DIG91dC88cGFydG5lcl9wb3J0X25hbWU+X3FhIGxvYWRlcl9hcHAgY3Jhc2hwYWRfaGFuZGxlcgogYGBgCiAKQEAgLTI1Nyw5ICsyNTcsOSBAQAogYG5wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0c2AuIFRoZXNlIHRlc3RzIGVuc3VyZSB0aGF0IHRoZSBwbGF0Zm9ybSBpcwogY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5IGZvciBFdmVyZ3JlZW4uCiAKLVRvIGVuYWJsZSB0aGUgdGVzdCwgc2V0IHRoZSBgc2JfZXZlcmdyZWVuX2NvbXBhdGlibGUgZ3lwYCB2YXJpYWJsZSB0byAxIGluIHRoZQotYGd5cF9jb25maWd1cmF0aW9uLmd5cGlgLiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgUmFzcGJlcnJ5Ci1QaSAyIGd5cCBmaWxlcy4KK1RvIGVuYWJsZSB0aGUgdGVzdCwgc2V0IHRoZSBgc2JfaXNfZXZlcmdyZWVuX2NvbXBhdGlibGVgIEdOIHZhcmlhYmxlIHRvIGB0cnVlYAoraW4gdGhlIHBsYXRmb3JtJ3MgYGNvbmZpZ3VyYXRpb24uZ25pYC4gRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgdGFrZSBhIGxvb2sgYXQKK3RoZSBSYXNwYmVycnkgUGkgMiBHTiBmaWxlcy4KIAogVGhlcmUgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIGZvciBSYXNwYmVycnkgUGkgMiB3aXRoCiBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIFtoZXJlXShjb2JhbHRfZXZlcmdyZWVuX3JlZmVyZW5jZV9wb3J0X3Jhc3BpMi5tZCkuCkBAIC0yNjgsNyArMjY4LDcgQEAKIAogMS4gQnVpbGQgdGhlIGBjcmFzaHBhZF9kYXRhYmFzZV91dGlsYCB0YXJnZXQgYW5kIGRlcGxveSBpdCBvbnRvIHRoZSBkZXZpY2UuCiBgYGAKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgPHBhcnRuZXJfcG9ydF9uYW1lPgorJCBjb2JhbHQvYnVpbGQvZ24ucHkgLXAgPHBhcnRuZXJfcG9ydF9uYW1lPiAtYyBxYQogJCBuaW5qYSAtQyBvdXQvPHBhcnRuZXJfcG9ydF9uYW1lPl9xYSBjcmFzaHBhZF9kYXRhYmFzZV91dGlsCiBgYGAKIDIuIFJlbW92ZSB0aGUgZXhpc3Rpbmcgc3RhdGUgZm9yIGNyYXNocGFkIGFzIGl0IHRocm90dGxlcyB1cGxvYWRzIHRvIDEgcGVyIGhvdXI6CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL2V2ZXJncmVlbi9jb2JhbHRfZXZlcmdyZWVuX3JlZmVyZW5jZV9wb3J0X3Jhc3BpMi5tZCBiL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCmluZGV4IGE5ZmVjMjUuLmJjMjU0Y2YgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCisrKyBiL3N0YXJib2FyZC9kb2MvZXZlcmdyZWVuL2NvYmFsdF9ldmVyZ3JlZW5fcmVmZXJlbmNlX3BvcnRfcmFzcGkyLm1kCkBAIC0xNCwxMiArMTQsMTIgQEAKIAogIyMgQnVpbGQgdGhlIGxvYWRlciBhcHAgKG5ldyBlbnRyeSBwb2ludCkKICQgY2QgY29iYWx0L3NyYwotJCBjb2JhbHQvYnVpbGQvZ3lwX2NvYmFsdCAtdiByYXNwaS0yLXNidmVyc2lvbi0xMiAtQyBxYQotJCBuaW5qYSAtQyBvdXQvcmFzcGktMi1zYnZlcnNpb24tMTJfcWEgbG9hZGVyX2FwcCBjcmFzaHBhZF9oYW5kbGVyCiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCByYXNwaS0yIC1jIHFhCiskIG5pbmphIC1DIG91dC9yYXNwaS0yX3FhIGxvYWRlcl9hcHAgY3Jhc2hwYWRfaGFuZGxlcgogCiAjIyBDcmVhdGUgcGFja2FnZSBkaXJlY3RvcnkgZm9yIENvYmFsdCBFdmVyZ3JlZW4KICQgZXhwb3J0IENPRUdfUEFUSD1jb2VnCi0kIGNwIG91dC9yYXNwaS0yLXNidmVyc2lvbi0xMl9xYS9sb2FkZXJfYXBwICRDT0VHX1BBVEgKKyQgY3Agb3V0L3Jhc3BpLTJfcWEvbG9hZGVyX2FwcCAkQ09FR19QQVRICiAKICMjIENyZWF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciB0aGUgaW5pdGlhbCBpbnN0YWxsYXRpb24KIFsyLXNsb3QgY29uZmlndXJhdGlvbl0KQEAgLTQ2LDEyICs0NiwxMiBAQAogYGBgCiAjIyBCdWlsZCBDb2JhbHQgY29yZSBsb2NhbGx5CiAkIGNkIGNvYmFsdC9zcmMKLSQgY29iYWx0L2J1aWxkL2d5cF9jb2JhbHQgLXYgZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyIC1DIHFhCi0kIG5pbmphIC1DIG91dC9ldmVyZ3JlZW4tYXJtLWhhcmRmcC1zYnZlcnNpb24tMTJfcWEgY29iYWx0CiskIGNvYmFsdC9idWlsZC9nbi5weSAtcCBldmVyZ3JlZW4tYXJtLWhhcmRmcCAtYyBxYQorJCBuaW5qYSAtQyBvdXQvZXZlcmdyZWVuLWFybS1oYXJkZnBfcWEgY29iYWx0CiAKICMjIENvcHkgdGhlIGdlbmVyYXRlZCBmaWxlcyB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkgZm9yIENvYmFsdCBFdmVyZ3JlZW4KLSQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMl9xYS9saWIgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KLSQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMl9xYS9jb250ZW50ICAgJENPRUdfUEFUSC9jb250ZW50L2FwcC9jb2JhbHQvCiskIGNwIC1yIG91dC9ldmVyZ3JlZW4tYXJtLWhhcmRmcF9xYS9saWIgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KKyQgY3AgLXIgb3V0L2V2ZXJncmVlbi1hcm0taGFyZGZwX3FhL2NvbnRlbnQgICAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC8KIAogIyMgQ3JlYXRlIGEgZmlsZSBuYW1lZCBtYW5pZmVzdC5qc29uIHdpdGggdGhlIGZvbGxvd2luZyBjb250ZW50LCBhbmQgcHV0IGl0IHVuZGVyICRDT0VHX1BBVEgvY29udGVudC9hcHAvY29iYWx0LwogJCBjYXQgPiAkQ09FR19QQVRIL2NvbnRlbnQvYXBwL2NvYmFsdC9tYW5pZmVzdC5qc29uIDw8RU9GCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL2hvd3RvX2RlY29kZV90b190ZXh0dXJlLm1kIGIvc3RhcmJvYXJkL2RvYy9ob3d0b19kZWNvZGVfdG9fdGV4dHVyZS5tZAppbmRleCA5OTNkNTBhLi5jZjQ4MTNhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZG9jL2hvd3RvX2RlY29kZV90b190ZXh0dXJlLm1kCisrKyBiL3N0YXJib2FyZC9kb2MvaG93dG9fZGVjb2RlX3RvX3RleHR1cmUubWQKQEAgLTIyLDcgKzIyLDcgQEAKIEZyb20gW2BzdGFyYm9hcmQvcGxheWVyLmhgXSguLi9wbGF5ZXIuaCksCiAKICogYFNiUGxheWVyQ3JlYXRlKClgCi0qIGBTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoKWAKKyogYFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZSgpYAogKiBgU2JQbGF5ZXJHZXRDdXJyZW50RnJhbWUoKWAKIAogRnJvbSBbYHN0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmhgXSguLi9kZWNvZGVfdGFyZ2V0LmgpLApAQCAtNDMsMTcgKzQzLDIwIEBACiAhW0RlY29kZS10by10ZXh0dXJlIHNlcXVlbmNlIGRpYWdyYW1dKHJlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS5wbmcpCiAKIDEuIEFuIGFwcGxpY2F0aW9uIHdpdGggdGhlIGRlc2lyZSB0byBtYWtlIHVzZSBvZiBkZWNvZGUtdG8tdGV4dHVyZSB3aWxsIGZpcnN0Ci0gICBjYWxsIGBTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoKWAsIHBhc3NpbmcgaW4KLSAgIGBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlYCBmb3IgaXRzIGBvdXRwdXRfbW9kZWAgcGFyYW1ldGVyLiAgSWYKLSAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgYXBwbGljYXRpb24gbGVhcm5zIHRoYXQgZGVjb2RlLXRvLXRleHR1cmUKLSAgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIGFuZCBpdCB3aWxsIG5vdCBjb250aW51ZSB3aXRoIGEKLSAgIGRlY29kZS10by10ZXh0dXJlIGZsb3cuCisgICBjYWxsIGBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoKWAsIHBhc3NpbmcgaW4KKyAgIGBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlYCBmb3IgaXRzIGBjcmVhdGlvbl9wYXJhbS0+b3V0cHV0X21vZGVgCisgICBwYXJhbWV0ZXIuICBJZiB0aGUgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4KKyAgIGBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlYCwgdGhlIGFwcGxpY2F0aW9uIGxlYXJucyB0aGF0CisgICBkZWNvZGUtdG8tdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSBhbmQgaXQgd2lsbCBub3QgY29udGludWUKKyAgIHdpdGggYSBkZWNvZGUtdG8tdGV4dHVyZSBmbG93LgogCi0yLiBJZiBgU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKClgIHJldHVybnMgdHJ1ZSwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2FsbAorMi4gSWYgYFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZSgpYCByZXR1cm5zCisgICBga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZWAsIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNhbGwKICAgIGBTYlBsYXllckNyZWF0ZSgpYCwgcGFzc2luZyBpbiBga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZWAgZm9yCi0gICB0aGUgYG91dHB1dF9tb2RlYCBwYXJhbWV0ZXIsIGFuZCBhbHNvIHByb3ZpZGluZyBhIHZhbGlkIGBwcm92aWRlcmAKLSAgIHBhcmFtZXRlciAobW9yZSBvbiB0aGlzIGxhdGVyKS4gIEF0IHRoaXMgcG9pbnQsIHRoZSBTdGFyYm9hcmQgcGxhdGZvcm0gaXMKLSAgIGV4cGVjdGVkIHRvIGhhdmUgY3JlYXRlZCBhIHBsYXllciB3aXRoIHRoZSBkZWNvZGUtdG8tdGV4dHVyZSBvdXRwdXQgbW9kZS4KKyAgIHRoZSBgY3JlYXRpb25fcGFyYW0tPm91dHB1dF9tb2RlYCBwYXJhbWV0ZXIsIGFuZCBhbHNvIHByb3ZpZGluZyBhIHZhbGlkCisgICBgcHJvdmlkZXJgIHBhcmFtZXRlciAobW9yZSBvbiB0aGlzIGxhdGVyKS4gIEF0IHRoaXMgcG9pbnQsIHRoZSBTdGFyYm9hcmQKKyAgIHBsYXRmb3JtIGlzIGV4cGVjdGVkIHRvIGhhdmUgY3JlYXRlZCBhIHBsYXllciB3aXRoIHRoZSBkZWNvZGUtdG8tdGV4dHVyZQorICAgIG91dHB1dCBtb2RlLgogCiAzLiBPbmNlIHRoZSBwbGF5ZXIgaXMgc3RhcnRlZCBhbmQgcGxheWJhY2sgaGFzIGJlZ3VuLCB0aGUgYXBwbGljYXRpb24ncwogICAgcmVuZGVyZXIgdGhyZWFkICh0aGlzIG1heSBiZSBhIGRpZmZlcmVudCB0aHJlYWQgdGhhbiB0aGUgb25lIHRoYXQgY2FsbGVkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS5wbmcgYi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS5wbmcKaW5kZXggYjJiNGNiNC4uZjA0NzczMCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2RvYy9yZXNvdXJjZXMvZGVjb2RlX3RvX3RleHR1cmVfc2VxdWVuY2UucG5nCisrKyBiL3N0YXJib2FyZC9kb2MvcmVzb3VyY2VzL2RlY29kZV90b190ZXh0dXJlX3NlcXVlbmNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS50eHQgYi9zdGFyYm9hcmQvZG9jL3Jlc291cmNlcy9kZWNvZGVfdG9fdGV4dHVyZV9zZXF1ZW5jZS50eHQKaW5kZXggYWM1MTI3Yi4uMTQ5YjQwNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2RvYy9yZXNvdXJjZXMvZGVjb2RlX3RvX3RleHR1cmVfc2VxdWVuY2UudHh0CisrKyBiL3N0YXJib2FyZC9kb2MvcmVzb3VyY2VzL2RlY29kZV90b190ZXh0dXJlX3NlcXVlbmNlLnR4dApAQCAtMSwxMCArMSwxMCBAQAogcGFydGljaXBhbnQgQXBwbGljYXRpb24gKGUuZy4gQ29iYWx0KSBhcyBhIFtmaWxsY29sb3I9IiNmZmQwZDAiXQogcGFydGljaXBhbnQgU3RhcmJvYXJkIGFzIHMgW2ZpbGxjb2xvcj0iI2QwZDBmZiJdCiAKLWEtPnM6IFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLCAuLi4pCi1zLS0+YTogcmV0dXJucyBib29sCi1Ob3RlIG92ZXIgYTogSWYgU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKClcbnJldHVybnMgdHJ1ZS4uLiBbZmlsbGNvbG9yPSJ3aGl0ZSJdCi1hLT5zOiBTYlBsYXllckNyZWF0ZSguLi4sIGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUsIC4uLikKK2EtPnM6IFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZShjcmVhdGlvbl9wYXJhbS0+b3V0cHV0X21vZGUgPSBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLCAuLi4pCitzLS0+YTogcmV0dXJucyBTYlBsYXllck91dHB1dE1vZGUKK05vdGUgb3ZlciBhOiBJZiBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoKVxucmV0dXJucyBrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlIFtmaWxsY29sb3I9IndoaXRlIl0KK2EtPnM6IFNiUGxheWVyQ3JlYXRlKC4uLiwgY3JlYXRpb25fcGFyYW0tPm91dHB1dF9tb2RlID0ga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZSwgLi4uKQogTm90ZSBvdmVyIGE6IFN0YXJ0IG9mIHJlbmRlciBsb29wIFtmaWxsY29sb3I9IiNmZmZmZDAiXQogYS0+czogU2JQbGF5ZXJHZXRDdXJyZW50RnJhbWUoKQogcy0tPmE6IHJldHVybnMgU2JEZWNvZGVUYXJnZXQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9kb2Mvc3RhcmJvYXJkX2FiaS5tZCBiL3N0YXJib2FyZC9kb2Mvc3RhcmJvYXJkX2FiaS5tZAppbmRleCBiZDBkMzA5Li5hNmQ2OTU5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZG9jL3N0YXJib2FyZF9hYmkubWQKKysrIGIvc3RhcmJvYXJkL2RvYy9zdGFyYm9hcmRfYWJpLm1kCkBAIC0zOSwyMSArMzksMjAgQEAKIFsvL3N0YXJib2FyZC9zYWJpXSguLi9zYWJpKQogZm9yIGV4YW1wbGVzKS4gU3RhcmJvYXJkIEFCSSBmaWxlcyBhcmUgSlNPTiwgYW5kIHNob3VsZCBhbGwgY29udGFpbiBpZGVudGljYWwKIGtleXMgd2l0aCB0aGUgdmFsdWVzIGJlaW5nIGFwcHJvcHJpYXRlIGZvciB0aGUgYXJjaGl0ZWN0dXJlLiBFYWNoIHBsYXRmb3JtIG11c3QKLW92ZXJyaWRlIHRoZSBuZXcKLVtHZXRQYXRoVG9TYWJpSnNvbkZpbGVdKC4uL2J1aWxkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24ucHkjIzMzOSkKLW1ldGhvZCBpbiBpdHMgcGxhdGZvcm0gY29uZmlndXJhdGlvbiB0byByZXR1cm4gdGhlIHBhdGggdG8gdGhlIGRlc2lyZWQgU3RhcmJvYXJkCi1BQkkgZmlsZSAoZS5nLgotWy8vc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9neXBcX2NvbmZpZ3VyYXRpb24ucHldKC4uL2xpbnV4L3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weSkpLgorc2V0IHRoZSBgc2FiaV9wYXRoYCBHTiB2YXJpYWJsZXMgaW4gaXRzCitgcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaWAgZmlsZSB0byByZXR1cm4gdGhlIHBhdGggdG8gdGhlCitkZXNpcmVkIFN0YXJib2FyZCBBQkkgZmlsZSAoZS5nLgorWy8vc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaV0oLi4vbGludXgveDY0eDExL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pKSkuCiBCeSBkZWZhdWx0LCBhbiBlbXB0eSBhbmQgaW52YWxpZCBTdGFyYm9hcmQgQUJJIGZpbGUgaXMgcHJvdmlkZWQuCiAKLUFkZGl0aW9uYWxseSwgYWxsIHBsYXRmb3JtcyBtdXN0IGluY2x1ZGUgdGhlCi1bc2FiaS5neXBpXSguLi9zYWJpL3NhYmkuZ3lwaSkKLWluIHRoZWlyIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoaXMgZmlsZSB3aWxsIGNvbnN1bWUgdGhlIHNwZWNpZmllZCBTdGFyYm9hcmQgQUJJCi1maWxlLCByZXN1bHRpbmcgaW4gdGhlIGNyZWF0aW9uIG9mIGEgc2V0IG9mIEdZUCB2YXJpYWJsZXMgYW5kIHByZXByb2Nlc3NvcgorQWRkaXRpb25hbGx5LCBhbGwgcGxhdGZvcm1zIG11c3QgaW5jbHVkZSB0aGUgYC8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9zYWJpYAorY29uZmlnIGZyb20gW3NhYmkvQlVJTEQuZ25dKC4uL2J1aWxkL2NvbmZpZy9zYWJpL0JVSUxELmduKQoraW4gdGhlaXIgcGxhdGZvcm0gY29uZmlncy4gVGhpcyBmaWxlIHdpbGwgY29uc3VtZSB0aGUgc3BlY2lmaWVkIFN0YXJib2FyZCBBQkkKK2ZpbGUsIHJlc3VsdGluZyBpbiB0aGUgY3JlYXRpb24gb2YgYSBzZXQgb2YgR04gdmFyaWFibGVzIGFuZCBwcmVwcm9jZXNzb3IKIG1hY3Jvcy4gVGhlIHByZXByb2Nlc3NvciBtYWNyb3MgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIgYW5kIHJlcGxhY2UKIHRoZSBtYWNyb3MgeW91IG1pZ2h0IGJlIGZhbWlsaWFyIHdpdGgsIHN1Y2ggYXMgYFNCX0hBU18zMl9CSVRfTE9OR2AuCiAKLVRoZSBuZXdseSBkZWZpbmVkIEdZUCB2YXJpYWJsZXMgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZCBpbnRvIHRvb2xjaGFpbiBzcGVjaWZpYworVGhlIG5ld2x5IGRlZmluZWQgR04gdmFyaWFibGVzIG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQgaW50byB0b29sY2hhaW4gc3BlY2lmaWMKIGZsYWdzOyB0aGVzZSBmbGFncyBhcmUgd2hhdCBhY3R1YWxseSBtYWtlcyB0aGUgYnVpbGQgcmVzdWx0IGluIGEgYmluYXJ5IGZvciB0aGUKIGRlc2lyZWQgYXJjaGl0ZWN0dXJlLiBUaGVzZSBmbGFncyB3aWxsLCBpbiBtb3N0IGNhc2VzLCBiZSBpZGVudGljYWwgdG8gdGhlIGZsYWdzCiBhbHJlYWR5IGJlaW5nIHVzZWQgZm9yIGJ1aWxkaW5nLgpAQCAtNjQsNyArNjMsNyBAQAogCiAjIyMgUG9zdC1TdGFyYm9hcmQgQUJJIEZpbGUgQ2xlYW51cAogCi1BIG51bWJlciBvZiBHWVAgdmFyaWFibGVzIGFuZCBwcmVwcm9jZXNzb3IgbWFjcm9zIHNob3VsZCBubyBsb25nZXIgYmUgZGVmaW5lZAorQSBudW1iZXIgb2YgR04gdmFyaWFibGVzIGFuZCBwcmVwcm9jZXNzb3IgbWFjcm9zIHNob3VsZCBubyBsb25nZXIgYmUgZGVmaW5lZAogZGlyZWN0bHksIGFuZCBpbnN0ZWFkIHRoZSBTdGFyYm9hcmQgQUJJIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGRlZmluZSB0aGVtLiBUaGVzZQogZGVmaW5pdGlvbnMgbmVlZCB0byBiZSByZW1vdmVkLgogCkBAIC03OSwxMCArNzgsNiBAQAogKiAgIGBTQl9IQVNfMzJfQklUX1BPSU5URVJTYAogKiAgIGBTQl9IQVNfNjRfQklUX1BPSU5URVJTYAogCi1Gcm9tIGBneXBfY29uZmlndXJhdGlvbi5neXBpYDoKLQotKiAgIGB0YXJnZXRfYXJjaGAKLQogIyMgRkFRCiAKICMjIyBXaGF0IFN0YXJib2FyZCBBQkkgZmlsZXMgYXJlIHByb3ZpZGVkPwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2RybS5oIGIvc3RhcmJvYXJkL2RybS5oCmluZGV4IDEzZDQ3YmQuLjZlYjY4ZDAgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9kcm0uaAorKysgYi9zdGFyYm9hcmQvZHJtLmgKQEAgLTgzLDggKzgzLDYgQEAKICAgaW50IGlkZW50aWZpZXJfc2l6ZTsKIH0gU2JEcm1LZXlJZDsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIEVuY3J5cHRpb24gc2NoZW1lIG9mIHRoZSBpbnB1dCBzYW1wbGUsIGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwMSBwYXJ0IDcuCiB0eXBlZGVmIGVudW0gU2JEcm1FbmNyeXB0aW9uU2NoZW1lIHsKICAga1NiRHJtRW5jcnlwdGlvblNjaGVtZUFlc0N0ciwKQEAgLTk3LDE3ICs5NSwxMyBAQAogICB1aW50MzJfdCBza2lwX2J5dGVfYmxvY2s7CiB9IFNiRHJtRW5jcnlwdGlvblBhdHRlcm47CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gQWxsIHRoZSBvcHRpb25hbCBpbmZvcm1hdGlvbiBuZWVkZWQgcGVyIHNhbXBsZSBmb3IgZW5jcnlwdGVkIHNhbXBsZXMuCiB0eXBlZGVmIHN0cnVjdCBTYkRybVNhbXBsZUluZm8gewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFRoZSBlbmNyeXB0aW9uIHNjaGVtZSBvZiB0aGlzIHNhbXBsZS4KICAgU2JEcm1FbmNyeXB0aW9uU2NoZW1lIGVuY3J5cHRpb25fc2NoZW1lOwogCiAgIC8vIFRoZSBlbmNyeXB0aW9uIHBhdHRlcm4gb2YgdGhpcyBzYW1wbGUuCiAgIFNiRHJtRW5jcnlwdGlvblBhdHRlcm4gZW5jcnlwdGlvbl9wYXR0ZXJuOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgIC8vIFRoZSBJbml0aWFsaXphdGlvbiBWZWN0b3IgbmVlZGVkIHRvIGRlY3J5cHQgdGhpcyBzYW1wbGUuCiAgIHVpbnQ4X3QgaW5pdGlhbGl6YXRpb25fdmVjdG9yWzE2XTsKQEAgLTM2NSw3ICszNTksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBjZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRpZmljYXRlX3NpemUpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIC8vIEdldCB0aGUgbWV0cmljcyBvZiB0aGUgdW5kZXJseWluZyBkcm0gc3lzdGVtLgogLy8KIC8vIFdoZW4gaXQgaXMgY2FsbGVkIG9uIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgZHJtIHN5c3RlbSBtZXRyaWNzLCBpdApAQCAtMzg4LDcgKzM4MSw2IEBACiAvLwogLy8gVGhlIGNhbGxlciB3aWxsIG5ldmVyIHNldCB8c2l6ZXwgdG8gTlVMTC4KIFNCX0VYUE9SVCBjb25zdCB2b2lkKiBTYkRybUdldE1ldHJpY3MoU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwgaW50KiBzaXplKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogLy8gRGVzdHJveXMgfGRybV9zeXN0ZW18LCB3aGljaCBpbXBsaWNpdGx5IHJlbW92ZXMgYWxsIGtleXMgaW5zdGFsbGVkIGluIGl0IGFuZAogLy8gaW52YWxpZGF0ZXMgYWxsIG91dHN0YW5kaW5nIHNlc3Npb24gdXBkYXRlIHJlcXVlc3RzLiBBIERSTSBzeXN0ZW0gY2Fubm90IGJlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlcy5neXAgYi9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlcy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZjdkNTIuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhlIGVnbF9hbmRfZ2xlcy5neXA6ZWdsX2FuZF9nbGVzIGd5cCB0YXJnZXQgY2FuIGJlIGRlcGVuZGVkIHVwb24gaW4gb3JkZXIgdG8KLSMgZGVwZW5kIG9uIGEgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgRUdML0dMRVMsIHdoZXRoZXIgdGhhdAotIyB1bHRpbWF0ZWx5IGVuZHMgdXAgYmVpbmcgQW5nbGUgb24gV2luZG93cywgc3lzdGVtIGxpYnJhcmllcyBvbiBMaW51eCwgb3IgYQotIyBjdXN0b20gaW1wbGVtZW50YXRpb24gb2YgRUdML0dMRVMgb24gYW4gZXhvdGljIHBsYXRmb3JtLiBEZXBlbmRpbmcgb24gdGhpcwotIyB0YXJnZXQgd2lsbCBzZXQgZGVwZW5kZW50IHNldHRpbmdzIHRvIGhhdmUgdGhlIEVHTCBhbmQgR0xFUyBzeXN0ZW0gaGVhZGVycyBpbgotIyB0aGVpciBpbmNsdWRlIGRpcmVjdG9yaWVzLgotIwotIyBUaGlzIGRlY2lzaW9uIGlzIHByZWRpY2F0ZWQgb24gdGhlIHZhbHVlIG9mIHRoZSB8Z2xfdHlwZXwgZ3lwIHZhcmlhYmxlIGRlZmluZWQKLSMgaW4gdGhlIGd5cF9jb25maWd1cmF0aW9uLmd5cGkgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLgotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaW1wbGVtZW50YXRpb25fdGFyZ2V0JzogJzwoREVQVEgpL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzXzwoZ2xfdHlwZSkuZ3lwOmVnbF9hbmRfZ2xlc19pbXBsZW1lbnRhdGlvbicsCi0gICAgICB9LAotCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZWdsX2FuZF9nbGVzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChpbXBsZW1lbnRhdGlvbl90YXJnZXQpJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzwoaW1wbGVtZW50YXRpb25fdGFyZ2V0KScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19hbmdsZS5neXAgYi9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19hbmdsZS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2OTliYWUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXNfYW5nbGUuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZW5hYmxlX2QzZDExX2ZlYXR1cmVfbGV2ZWxfMTElJzogMCwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2VnbF9hbmRfZ2xlc19pbXBsZW1lbnRhdGlvbicsCi0gICAgICAndHlwZSc6ICdub25lJywKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2FuZ2xlLmd5cDpsaWJFR0wnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvYW5nbGUuZ3lwOmxpYkdMRVN2MicsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIEFOR0xFIHN1cHBvcnRzIEdMRVMzIG9uIFdpbmRvd3Mgb25seSBpZiBEaXJlY3RYMTEgZmVhdHVyZSBsZXZlbCAxMSBpcwotICAgICAgICAjIHN1cHBvcnRlZC4KLSAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iIGFuZCBlbmFibGVfZDNkMTFfZmVhdHVyZV9sZXZlbF8xMT09MScsIHsKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnR0xfR0xFWFRfUFJPVE9UWVBFUycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dCi0gICAgICBdCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzX2dsaW1wLmd5cCBiL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzX2dsaW1wLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5Y2Q3OS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19nbGltcC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWdsX2FuZF9nbGVzX2ltcGxlbWVudGF0aW9uJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvZ2xpbXAvZ2xpbXAuZ3lwOmdsaW1wJywKLSAgICAgIF0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2dsaW1wL2dsaW1wLmd5cDpnbGltcCcsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdHTF9HTEVYVF9QUk9UT1RZUEVTJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydlbmFibGVfdnI9PTEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9nbGltcC88KHNiX3RhcmdldF9wbGF0Zm9ybSkvZ2xpbXBfcGxhdGZvcm0uZ3lwOmdsaW1wX3BsYXRmb3JtJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzX3N5c3RlbV9nbGVzMi5neXAgYi9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19zeXN0ZW1fZ2xlczIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2RkMGFiLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzX3N5c3RlbV9nbGVzMi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWdsX2FuZF9nbGVzX2ltcGxlbWVudGF0aW9uJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotCi0gICAgICAjIFVzZSB0aGUgc3lzdGVtLXByb3ZpZGVkIGltcGxlbWVudGF0aW9uIG9mIEdMRVMyLgotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19zeXN0ZW1fZ2xlczMuZ3lwIGIvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXNfc3lzdGVtX2dsZXMzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkZGJjYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzL2VnbF9hbmRfZ2xlc19zeXN0ZW1fZ2xlczMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgIyBUaG91Z2ggd2Ugc3VwcG9ydCBhcyBhIHZhbGlkIGdsX3R5cGUgb3B0aW9uLCBpdCB3aWxsIHVzZSBuZWl0aGVyIEdMRVMzCi0gICAgICAjIGZlYXR1cmVzIG5vciBHTEVTMyBlZ2wgY29udGV4dCBjdXJyZW50bHkuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZWdsX2FuZF9nbGVzX2ltcGxlbWVudGF0aW9uJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9CVUlMRC5nbiBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL0JVSUxELmduCmluZGV4IDM0MTgyYzMuLjRjNzA1YjggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL0JVSUxELmduCkBAIC0xMjEsOCArMTIxLDggQEAKICAgICAjIFRvIHByb3Blcmx5IGZ1bmN0aW9uIHRoZSBzeXN0ZW0gbG9hZGVyIHJlcXVpcmVzIHRoZSBzdGFyYm9hcmQKICAgICAjIHN5bWJvbHMgdG8gYmUgZXhwb3J0ZWQgZnJvbSB0aGUgYmluYXJ5LgogICAgICMgVG8gYWxsb3cgc3ltYm9scyB0byBiZSBleHBvcnRlZCByZW1vdmUgdGhlICctZnZpc2liaWxpdHk9aGlkZGVuJyBmbGFnCi0gICAgIyBmcm9tIHlvdXIgY29tcGlsZXJfZmxhZ3MuZ3lwaS4gRm9yIExpbnV4IHRoaXMgd291bGQgYmU6Ci0gICAgIyAgIHN0YXJib2FyZC9saW51eC9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaQorICAgICMgZnJvbSB5b3VyIEJVSUxELmduLiBGb3IgTGludXggdGhpcyB3b3VsZCBiZToKKyAgICAjICAgc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCiAgICAgIyBFeGFtcGxlIHJ1bjoKICAgICAjIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg9LgogICAgICMgLi9lbGZfbG9hZGVyX3N5c19zYW5kYm94IC0tZXZlcmdyZWVuX2xpYnJhcnk9YXBwL2NvYmFsdC9saWIvbGliY29iYWx0LnNvIC0tZXZlcmdyZWVuX2NvbnRlbnQ9YXBwL2NvYmFsdC9jb250ZW50CkBAIC0xNzUsMTAgKzE3NSw4IEBACiAKICAgICAjIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb25jZSBNZWRpYVNlc3Npb24gaXMgbWlncmF0ZWQgdG8gdXNlIENvYmFsdEV4dGVuc2lvbnMuCiAgICAgZGVwcyArPSBjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzCi0gICAgY29udGVudF9kZXBzID0gWwotICAgICAgIjpjb3B5X2VsZl9sb2FkZXJfdGVzdGRhdGEiLAotICAgICAgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiLAotICAgIF0KKworICAgIGNvbnRlbnRfZGVwcyA9IFsgIjpjb3B5X2VsZl9sb2FkZXJfdGVzdGRhdGEiIF0KICAgfQogfQogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9keW5hbWljX3NlY3Rpb25fdGVzdC5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2R5bmFtaWNfc2VjdGlvbl90ZXN0LmNjCmluZGV4IDI1OGE0MTcuLmUxOTZkOGQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2R5bmFtaWNfc2VjdGlvbl90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2R5bmFtaWNfc2VjdGlvbl90ZXN0LmNjCkBAIC0xOCw4ICsxOCw3IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL3N0cmluZy5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgJiYgKFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKSkgJiYgXAotICAgIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjaWYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKIAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgZWxmX2xvYWRlciB7CkBAIC0yMDIsNSArMjAxLDQgQEAKIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIGVsZl9sb2FkZXIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgJiYgKFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgIC8vIHx8IFNCX0hBUyhNTUFQKSkgJiYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNlbmRpZiAgLy8gU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9oZWFkZXJfdGVzdC5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9oZWFkZXJfdGVzdC5jYwppbmRleCBjYjAzZDQyLi41NzE5ZGM4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfaGVhZGVyX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2hlYWRlcl90ZXN0LmNjCkBAIC0yMSw4ICsyMSw3IEBACiAjaW5jbHVkZSAidGVzdGluZy9nbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiAmJiAoU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApKSAmJiBcCi0gICAgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNpZiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgZWxmX2xvYWRlciB7CiAKQEAgLTEzMyw1ICsxMzIsNCBAQAogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2UgZWxmX2xvYWRlcgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiAmJiAoU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICAgLy8gfHwgU0JfSEFTKE1NQVApKSAmJiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQorI2VuZGlmICAvLyBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXIuY2MKaW5kZXggZjc1ZjBmNy4uYWRlYmMxYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5jYworKysgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyLmNjCkBAIC01OSw3ICs1OSw5IEBACiBib29sIEVsZkxvYWRlcjo6TG9hZChjb25zdCBzdGQ6OnN0cmluZyYgbGlicmFyeV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnRfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVsYXRpdmVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICgqY3VzdG9tX2dldF9leHRlbnNpb24pKGNvbnN0IGNoYXIqIG5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAoKmN1c3RvbV9nZXRfZXh0ZW5zaW9uKShjb25zdCBjaGFyKiBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfbWVtb3J5X21hcHBlZF9maWxlKSB7CiAgIGlmIChpc19yZWxhdGl2ZV9wYXRoKSB7CiAgICAgbGlicmFyeV9wYXRoXyA9IE1ha2VSZWxhdGl2ZVRvQ29udGVudFBhdGgobGlicmFyeV9wYXRoKTsKICAgICBjb250ZW50X3BhdGhfID0gTWFrZVJlbGF0aXZlVG9Db250ZW50UGF0aChjb250ZW50X3BhdGgpOwpAQCAtNzYsNyArNzgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21fZ2V0X2V4dGVuc2lvbik7CiAgIFNCX0xPRyhJTkZPKSA8PCAiZXZlcmdyZWVuX2NvbmZpZzogY29udGVudF9wYXRoPSIgPDwgY29udGVudF9wYXRoXzsKICAgU2JUaW1lIHN0YXJ0X3RpbWUgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKLSAgYm9vbCByZXMgPSBpbXBsXy0+TG9hZChsaWJyYXJ5X3BhdGhfLmNfc3RyKCksIGN1c3RvbV9nZXRfZXh0ZW5zaW9uKTsKKyAgYm9vbCByZXMgPSBpbXBsXy0+TG9hZChsaWJyYXJ5X3BhdGhfLmNfc3RyKCksIHVzZV9jb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfbWVtb3J5X21hcHBlZF9maWxlKTsKICAgU2JUaW1lIGVuZF90aW1lID0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CiAgIFNCX0xPRyhJTkZPKSA8PCAiTG9hZGluZyB0b29rOiAiCiAgICAgICAgICAgICAgICA8PCAoZW5kX3RpbWUgLSBzdGFydF90aW1lKSAvIGtTYlRpbWVNaWxsaXNlY29uZCA8PCAiIG1zIjsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXIuZ3lwIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5M2VkMWQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY29tbW9uX2VsZl9sb2FkZXJfc291cmNlcyc6IFsKLSAgICAgICAgJ2VsZl9oZWFkZXIuaCcsCi0gICAgICAgICdlbGZfaGVhZGVyLmNjJywKLSAgICAgICAgJ2VsZl9oYXNoX3RhYmxlLmgnLAotICAgICAgICAnZWxmX2hhc2hfdGFibGUuY2MnLAotICAgICAgICAnZWxmX2xvYWRlci5oJywKLSAgICAgICAgJ2VsZl9sb2FkZXIuY2MnLAotICAgICAgICAnZWxmX2xvYWRlcl9jb25zdGFudHMuaCcsCi0gICAgICAgICdlbGZfbG9hZGVyX2NvbnN0YW50cy5jYycsCi0gICAgICAgICdleHBvcnRlZF9zeW1ib2xzLmNjJywKLSAgICAgICAgJ2ZpbGUuaCcsCi0gICAgICAgICdmaWxlX2ltcGwuaCcsCi0gICAgICAgICdmaWxlX2ltcGwuY2MnLAotICAgICAgICAnbHo0X2ZpbGVfaW1wbC5oJywKLSAgICAgICAgJ2x6NF9maWxlX2ltcGwuY2MnLAotICAgICAgICAnZ251X2hhc2hfdGFibGUuaCcsCi0gICAgICAgICdnbnVfaGFzaF90YWJsZS5jYycsCi0gICAgICAgICdkeW5hbWljX3NlY3Rpb24uaCcsCi0gICAgICAgICdkeW5hbWljX3NlY3Rpb24uY2MnLAotICAgICAgICAncHJvZ3JhbV90YWJsZS5oJywKLSAgICAgICAgJ3Byb2dyYW1fdGFibGUuY2MnLAotICAgICAgICAncmVsb2NhdGlvbnMuaCcsCi0gICAgICAgICdyZWxvY2F0aW9ucy5jYycsCi0gICAgXSwKLSAgICAnZWxmX2xvYWRlcl9pbXBsX3NvdXJjZXMnOiBbCi0gICAgICAgICdlbGZfbG9hZGVyX2ltcGwuaCcsCi0gICAgICAgICdlbGZfbG9hZGVyX2ltcGwuY2MnLAotICAgIF0sCi0gICAgJ2VsZl9sb2FkZXJfc3lzX3NvdXJjZXMnOiBbCi0gICAgICAgICdlbGZfbG9hZGVyX3N5c19pbXBsLmgnLAotICAgICAgICAnZWxmX2xvYWRlcl9zeXNfaW1wbC5jYycsCi0gICAgXQotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWxmX2xvYWRlcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnc3JjL2luY2x1ZGUnLAotICAgICAgICAnc3JjL3NyYy8nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9ldmVyZ3JlZW5fY29uZmlnLmd5cDpldmVyZ3JlZW5fY29uZmlnJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V2ZXJncmVlbl9pbmZvLmd5cDpldmVyZ3JlZW5faW5mbycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbHo0X2xpYi9sejQuZ3lwOmx6NCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChjb21tb25fZWxmX2xvYWRlcl9zb3VyY2VzKScsCi0gICAgICAgICc8QChlbGZfbG9hZGVyX2ltcGxfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICMgU3lzdGVtIGxvYWRlciBiYXNlZCBvbiBkbG9wZW4vZGxzeW0uCi0gICAgICAjIFNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZy90cm91Ymxlc2hvb3RpbmcuCi0gICAgICAndGFyZ2V0X25hbWUnOiAnZWxmX2xvYWRlcl9zeXMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJ3NyYy9pbmNsdWRlJywKLSAgICAgICAgJ3NyYy9zcmMvJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXZlcmdyZWVuX2NvbmZpZy5neXA6ZXZlcmdyZWVuX2NvbmZpZycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoY29tbW9uX2VsZl9sb2FkZXJfc291cmNlcyknLAotICAgICAgICAnPEAoZWxmX2xvYWRlcl9zeXNfc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlID09IDEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuZ3lwOmNyYXNocGFkX3dyYXBwZXInLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5neXA6Y3Jhc2hwYWRfd3JhcHBlcl9zdHViJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWxmX2xvYWRlcl9zYW5kYm94JywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnc3JjL2luY2x1ZGUnLAotICAgICAgICAnc3JjL3NyYy8nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdlbGZfbG9hZGVyJywKLSAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9jb250ZW50L2ZvbnRzL2ZvbnRzLmd5cDpjb3B5X2ZvbnRfZGF0YScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5neXA6c2FiaV9zdHJpbmcnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uY2UgTWVkaWFTZXNzaW9uIGlzIG1pZ3JhdGVkIHRvIHVzZSBDb2JhbHRFeHRlbnNpb25zLgotICAgICAgICAnPEAoY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyknLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2FuZGJveC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2VsZl9sb2FkZXJfc2FuZGJveF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZWxmX2xvYWRlcl9zYW5kYm94JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2VsZl9sb2FkZXJfc2FuZGJveCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgIyBUbyBwcm9wZXJseSBmdW5jdGlvbiB0aGUgc3lzdGVtIGxvYWRlciByZXF1aXJlcyB0aGUgc3RhcmJvYXJkCi0gICAgICAjIHN5bWJvbHMgdG8gYmUgZXhwb3J0ZWQgZnJvbSB0aGUgYmluYXJ5LgotICAgICAgIyBUbyBhbGxvdyBzeW1ib2xzIHRvIGJlIGV4cG9ydGVkIHJlbW92ZSB0aGUgJy1mdmlzaWJpbGl0eT1oaWRkZW4nIGZsYWcKLSAgICAgICMgZnJvbSB5b3VyIGNvbXBpbGVyX2ZsYWdzLmd5cGkuIEZvciBMaW51eCB0aGlzIHdvdWxkIGJlOgotICAgICAgIyAgIHN0YXJib2FyZC9saW51eC9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaQotICAgICAgIyBFeGFtcGxlIHJ1bjoKLSAgICAgICMgZXhwb3J0IExEX0xJQlJBUllfUEFUSD0uCi0gICAgICAjIC4vZWxmX2xvYWRlcl9zeXNfc2FuZGJveCAtLWV2ZXJncmVlbl9saWJyYXJ5PWFwcC9jb2JhbHQvbGliL2xpYmNvYmFsdC5zbyAtLWV2ZXJncmVlbl9jb250ZW50PWFwcC9jb2JhbHQvY29udGVudAotICAgICAgJ3RhcmdldF9uYW1lJzogJ2VsZl9sb2FkZXJfc3lzX3NhbmRib3gnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdzcmMvaW5jbHVkZScsCi0gICAgICAgICdzcmMvc3JjLycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2VsZl9sb2FkZXJfc3lzJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhYmlfc3RyaW5nLmd5cDpzYWJpX3N0cmluZycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2FuZGJveC5jYycsCi0gICAgICBdLAotICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICctV2wsLS1keW5hbWljLWxpc3Q9PChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5zeW1zJywKLSAgICAgICAgJy1sZGwnICwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWxmX2xvYWRlcl90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi90ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAjIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb25jZSBNZWRpYVNlc3Npb24gaXMgbWlncmF0ZWQgdG8gdXNlIENvYmFsdEV4dGVuc2lvbnMuCi0gICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsndGFyZ2V0X2FyY2ggaW4gWyJ4ODYiLCAieDY0IiwgImFybSIsICJhcm02NCJdICcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdkeW5hbWljX3NlY3Rpb25fdGVzdC5jYycsCi0gICAgICAgICAgICAnZWxmX2xvYWRlcl90ZXN0LmNjJywKLSAgICAgICAgICAgICdlbGZfaGVhZGVyX3Rlc3QuY2MnLAotICAgICAgICAgICAgJ2x6NF9maWxlX2ltcGxfdGVzdC5jYycsCi0gICAgICAgICAgICAncHJvZ3JhbV90YWJsZV90ZXN0LmNjJywKLSAgICAgICAgICAgICdyZWxvY2F0aW9uc190ZXN0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnY29weV9lbGZfbG9hZGVyX3Rlc3RkYXRhJywKLSAgICAgICAgICAgICdlbGZfbG9hZGVyJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZWxmX2xvYWRlcl90ZXN0X2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdlbGZfbG9hZGVyX3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnZWxmX2xvYWRlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9lbGZfbG9hZGVyX3Rlc3RkYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VsZl9sb2FkZXIvdGVzdGRhdGEvJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9vdXRwdXRfc3ViZGlyJzogJ3N0YXJib2FyZC9lbGZfbG9hZGVyL3Rlc3RkYXRhJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaScgXSwKLSAgICB9LAotICBdCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyLmggYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyLmgKaW5kZXggNTg3YzdhNi4uZjhmOWUyNiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlci5oCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXIuaApAQCAtMzgsMTEgKzM4LDE1IEBACiAgIC8vIExvYWRzIHRoZSBzaGFyZWQgbGlicmFyeS4gUmV0dXJucyBmYWxzZSBpZiB8bGlicmFyeV9wYXRofCBvciB8Y29udGVudF9wYXRofAogICAvLyBpcyBlbXB0eSwgb3IgaWYgdGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZC4KICAgLy8gQW4gb3B0aW9uYWwgfGN1c3RvbV9nZXRfZXh0ZW5zaW9ufCBmdW5jdGlvbiBwb2ludGVyIGNhbiBiZSBwYXNzZWQgaW4gb3JkZXIKLSAgLy8gdG8gb3ZlcnJpZGUgdGhlIHxTYlN5c3RlbUdldEV4dGVuc2lvbnwgZnVuY3Rpb24uCisgIC8vIHRvIG92ZXJyaWRlIHRoZSB8U2JTeXN0ZW1HZXRFeHRlbnNpb258IGZ1bmN0aW9uLiBUaGUgZmxhZ3MKKyAgLy8gfHVzZV9jb21wcmVzc2lvbnwgYW5kIHx1c2VfbWVtb3J5X21hcHBlZF9maWxlfCBhcmUgbm90IGNvbXBhdGlibGUgc28gb25seQorICAvLyBvbmUgb2YgdGhvc2UgY2FuIGJlIHR1cm5lZCBvbi4KICAgYm9vbCBMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWJyYXJ5X3BhdGgsCiAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudF9wYXRoLAogICAgICAgICAgICAgYm9vbCBpc19yZWxhdGl2ZV9wYXRoLAotICAgICAgICAgICAgY29uc3Qgdm9pZCogKCpjdXN0b21fZ2V0X2V4dGVuc2lvbikoY29uc3QgY2hhciogbmFtZSkgPSBOVUxMKTsKKyAgICAgICAgICAgIGNvbnN0IHZvaWQqICgqY3VzdG9tX2dldF9leHRlbnNpb24pKGNvbnN0IGNoYXIqIG5hbWUpID0gTlVMTCwKKyAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uID0gZmFsc2UsCisgICAgICAgICAgICBib29sIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUgPSBmYWxzZSk7CiAKICAgLy8gTG9va3MgdXAgdGhlIHN5bWJvbCBhZGRyZXNzIGluIHRoZQogICAvLyBzaGFyZWQgbGlicmFyeS4KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfaW1wbC5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfaW1wbC5jYwppbmRleCBjZjM5MmE5Li5mYzdjNjM1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX2ltcGwuY2MKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9pbXBsLmNjCkBAIC00MCwxNyArNDAsMjEgQEAKIH0gIC8vIG5hbWVzcGFjZQogCiBFbGZMb2FkZXJJbXBsOjpFbGZMb2FkZXJJbXBsKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgfHwgIShTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkpIHx8IFwKLSAgICAhU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKLSAgU0JfQ0hFQ0soZmFsc2UpIDw8ICJUaGUgZWxmX2xvYWRlciByZXF1aXJlcyBTQl9BUElfVkVSU0lPTiA+PSAxMiB3aXRoICIKKyNpZiAhU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyAgU0JfQ0hFQ0soZmFsc2UpIDw8ICJUaGUgZWxmX2xvYWRlciByZXF1aXJlcyAiCiAgICAgICAgICAgICAgICAgICAgICAiZXhlY3V0YWJsZSBtZW1vcnkgbWFwIHN1cHBvcnQhIjsKICNlbmRpZgogfQogCi1ib29sIEVsZkxvYWRlckltcGw6OkxvYWQoCi0gICAgY29uc3QgY2hhciogbmFtZSwKLSAgICBjb25zdCB2b2lkKiAoKmN1c3RvbV9nZXRfZXh0ZW5zaW9uKShjb25zdCBjaGFyKiBuYW1lKSkgewotICBpZiAoRW5kc1dpdGgobmFtZSwga0NvbXByZXNzaW9uU3VmZml4KSkgeworYm9vbCBFbGZMb2FkZXJJbXBsOjpMb2FkKGNvbnN0IGNoYXIqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfbWVtb3J5X21hcHBlZF9maWxlcykgeworICBpZiAodXNlX2NvbXByZXNzaW9uICYmIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGVzKSB7CisgICAgU0JfTE9HKEVSUk9SKSA8PCAiTG9hZGluZyAiIDw8IG5hbWUKKyAgICAgICAgICAgICAgICAgIDw8ICIgQ29tcHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCB3aXRoIG1lbW9yeSBtYXBwZWQgZmlsZXMuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHVzZV9jb21wcmVzc2lvbiAmJiBFbmRzV2l0aChuYW1lLCBrQ29tcHJlc3Npb25TdWZmaXgpKSB7CiAgICAgZWxmX2ZpbGVfLnJlc2V0KG5ldyBMWjRGaWxlSW1wbCgpKTsKICAgICBTQl9MT0coSU5GTykgPDwgIkxvYWRpbmcgIiA8PCBuYW1lIDw8ICIgdXNpbmcgY29tcHJlc3Npb24iOwogICB9IGVsc2UgewpAQCAtNjcsMTMgKzcxLDE4IEBACiAKICAgU0JfRExPRyhJTkZPKSA8PCAiTG9hZGVkIEVMRiBoZWFkZXIiOwogCi0gIGNvbnN0IGF1dG8qIG1lbW9yeV9tYXBwZWRfZmlsZV9leHRlbnNpb24gPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb2JhbHRFeHRlbnNpb25NZW1vcnlNYXBwZWRGaWxlQXBpKj4oCi0gICAgICAgICAgU2JTeXN0ZW1HZXRFeHRlbnNpb24oa0NvYmFsdEV4dGVuc2lvbk1lbW9yeU1hcHBlZEZpbGVOYW1lKSk7Ci0gIGlmIChtZW1vcnlfbWFwcGVkX2ZpbGVfZXh0ZW5zaW9uICYmCi0gICAgICBzdHJjbXAobWVtb3J5X21hcHBlZF9maWxlX2V4dGVuc2lvbi0+bmFtZSwKLSAgICAgICAgICAgICBrQ29iYWx0RXh0ZW5zaW9uTWVtb3J5TWFwcGVkRmlsZU5hbWUpID09IDAgJiYKLSAgICAgIG1lbW9yeV9tYXBwZWRfZmlsZV9leHRlbnNpb24tPnZlcnNpb24gPj0gMSkgeworICBpZiAodXNlX21lbW9yeV9tYXBwZWRfZmlsZXMpIHsKKyAgICBjb25zdCBhdXRvKiBtZW1vcnlfbWFwcGVkX2ZpbGVfZXh0ZW5zaW9uID0KKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb2JhbHRFeHRlbnNpb25NZW1vcnlNYXBwZWRGaWxlQXBpKj4oCisgICAgICAgICAgICBTYlN5c3RlbUdldEV4dGVuc2lvbihrQ29iYWx0RXh0ZW5zaW9uTWVtb3J5TWFwcGVkRmlsZU5hbWUpKTsKKworICAgIGlmICghbWVtb3J5X21hcHBlZF9maWxlX2V4dGVuc2lvbiB8fAorICAgICAgICBzdHJjbXAobWVtb3J5X21hcHBlZF9maWxlX2V4dGVuc2lvbi0+bmFtZSwKKyAgICAgICAgICAgICAgIGtDb2JhbHRFeHRlbnNpb25NZW1vcnlNYXBwZWRGaWxlTmFtZSkgIT0gMCB8fAorICAgICAgICBtZW1vcnlfbWFwcGVkX2ZpbGVfZXh0ZW5zaW9uLT52ZXJzaW9uIDwgMSkgeworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiQ29iYWx0RXh0ZW5zaW9uTWVtb3J5TWFwcGVkRmlsZUFwaSBub3QgaW1wbGVtZW50ZWQiOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBwcm9ncmFtX3RhYmxlXy5yZXNldChuZXcgUHJvZ3JhbVRhYmxlKG1lbW9yeV9tYXBwZWRfZmlsZV9leHRlbnNpb24pKTsKICAgfSBlbHNlIHsKICAgICBwcm9ncmFtX3RhYmxlXy5yZXNldChuZXcgUHJvZ3JhbVRhYmxlKG51bGxwdHIpKTsKQEAgLTExNCw3ICsxMjMsNyBAQAogICB9CiAgIFNCX0RMT0coSU5GTykgPDwgIkluaXRpYWxpemVkIGR5bmFtaWMgc2VjdGlvbiI7CiAKLSAgZXhwb3J0ZWRfc3ltYm9sc18ucmVzZXQobmV3IEV4cG9ydGVkU3ltYm9scyhjdXN0b21fZ2V0X2V4dGVuc2lvbikpOworICBleHBvcnRlZF9zeW1ib2xzXy5yZXNldChuZXcgRXhwb3J0ZWRTeW1ib2xzKCkpOwogICByZWxvY2F0aW9uc18ucmVzZXQobmV3IFJlbG9jYXRpb25zKHByb2dyYW1fdGFibGVfLT5HZXRCYXNlTWVtb3J5QWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNfc2VjdGlvbl8uZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRfc3ltYm9sc18uZ2V0KCkpKTsKQEAgLTEzOCwxNCArMTQ3LDEyIEBACiAgIH0KIAogICBpZiAocmVsb2NhdGlvbnNfLT5IYXNUZXh0UmVsb2NhdGlvbnMoKSkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQogICAgIC8vIFJlc3RvcmVzIHRoZSBtZW1vcnkgcHJvdGVjdGlvbiB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCiAgICAgaWYgKHByb2dyYW1fdGFibGVfLT5BZGp1c3RNZW1vcnlQcm90ZWN0aW9uT2ZSZWFkT25seVNlZ21lbnRzKAogICAgICAgICAgICAga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkKSA8IDApIHsKICAgICAgIFNCX0xPRyhFUlJPUikgPDwgIlVuYWJsZSB0byByZXN0b3JlIHNlZ21lbnQgcHJvdGVjdGlvbiI7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotI2VuZGlmCiAgIH0KIAogICBTQl9ETE9HKElORk8pIDw8ICJBcHBsaWVkIHJlbG9jYXRpb25zIjsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfaW1wbC5oIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9pbXBsLmgKaW5kZXggODRjNDNjNy4uMDJlZTdhMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9pbXBsLmgKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9pbXBsLmgKQEAgLTM0LDcgKzM0LDggQEAKICBwdWJsaWM6CiAgIEVsZkxvYWRlckltcGwoKTsKICAgYm9vbCBMb2FkKGNvbnN0IGNoYXIqIGZpbGVfbmFtZSwKLSAgICAgICAgICAgIGNvbnN0IHZvaWQqICgqY3VzdG9tX2dldF9leHRlbnNpb24pKGNvbnN0IGNoYXIqIG5hbWUpKTsKKyAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgYm9vbCB1c2VfbWVtb3J5X21hcHBlZF9maWxlKTsKICAgdm9pZCogTG9va3VwU3ltYm9sKGNvbnN0IGNoYXIqIHN5bWJvbCk7CiAgIH5FbGZMb2FkZXJJbXBsKCk7CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfc3lzX2ltcGwuY2MgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX3N5c19pbXBsLmNjCmluZGV4IGZkMWMwYTIuLmE2NDIzNGEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfc3lzX2ltcGwuY2MKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9zeXNfaW1wbC5jYwpAQCAtMjQsOSArMjQsOSBAQAogCiBFbGZMb2FkZXJJbXBsOjpFbGZMb2FkZXJJbXBsKCkge30KIAotYm9vbCBFbGZMb2FkZXJJbXBsOjpMb2FkKAotICAgIGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgY29uc3Qgdm9pZCogKCpjdXN0b21fZ2V0X2V4dGVuc2lvbikoY29uc3QgY2hhciogbmFtZSkpIHsKK2Jvb2wgRWxmTG9hZGVySW1wbDo6TG9hZChjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkgewogICBTQl9MT0coSU5GTykgPDwgIkxvYWRpbmc6ICIgPDwgbmFtZTsKIAogICAvLyBDcmVhdGluZyB0aGUgaW5zdGFuY2UgZm9yY2VzIHRoZSBiaW5hcnkgdG8ga2VlcCBhbGwgdGhlIHN5bWJvbHMuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX3N5c19pbXBsLmggYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX3N5c19pbXBsLmgKaW5kZXggN2YxNDhhNS4uYjAwNGE1NCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl9zeXNfaW1wbC5oCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfc3lzX2ltcGwuaApAQCAtMjUsNyArMjUsOCBAQAogIHB1YmxpYzoKICAgRWxmTG9hZGVySW1wbCgpOwogICBib29sIExvYWQoY29uc3QgY2hhciogZmlsZV9uYW1lLAotICAgICAgICAgICAgY29uc3Qgdm9pZCogKCpjdXN0b21fZ2V0X2V4dGVuc2lvbikoY29uc3QgY2hhciogbmFtZSkgPSBOVUxMKTsKKyAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uID0gZmFsc2UsCisgICAgICAgICAgICBib29sIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUgPSBmYWxzZSk7CiAgIHZvaWQqIExvb2t1cFN5bWJvbChjb25zdCBjaGFyKiBzeW1ib2wpOwogICB+RWxmTG9hZGVySW1wbCgpOwogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX3Rlc3QuY2MgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyX3Rlc3QuY2MKaW5kZXggMzAzZDBmZi4uYWY1OGIzYyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZWxmX2xvYWRlcl90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXJfdGVzdC5jYwpAQCAtMTcsMTQgKzE3LDEzIEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiAmJiAoU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApKSAmJiBcCi0gICAgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNpZiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgZWxmX2xvYWRlciB7CiAKIG5hbWVzcGFjZSB7CiAKLS8vIFRPRE86IGltcGxlbWVudCB1c2luZyByZWFsIHNoYXJlZCBsaWJyYXJ5IGZybyB0aGUgZmlsZSBzeXN0ZW0uCisvLyBUT0RPOiBpbXBsZW1lbnQgdXNpbmcgcmVhbCBzaGFyZWQgbGlicmFyeSBmb3IgdGhlIGZpbGUgc3lzdGVtLgogY2xhc3MgRWxmTG9hZGVyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewogIHByb3RlY3RlZDoKICAgRWxmTG9hZGVyVGVzdCgpIHt9CkBAIC0zOCw1ICszNyw0IEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBlbGZfbG9hZGVyCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIChTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAvLyB8fCBTQl9IQVMoTU1BUCkpICYmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjZW5kaWYgIC8vIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9ldmVyZ3JlZW5fY29uZmlnLmd5cCBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V2ZXJncmVlbl9jb25maWcuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWYzOTUwLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V2ZXJncmVlbl9jb25maWcuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2V2ZXJncmVlbl9jb25maWcnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdldmVyZ3JlZW5fY29uZmlnLmgnLAotICAgICAgICAnZXZlcmdyZWVuX2NvbmZpZy5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9ldmVyZ3JlZW5faW5mby5neXAgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9ldmVyZ3JlZW5faW5mby5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYTE0YWMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXZlcmdyZWVuX2luZm8uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2V2ZXJncmVlbl9pbmZvJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZXZlcmdyZWVuX2luZm8uaCcsCi0gICAgICAgICdldmVyZ3JlZW5faW5mby5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9leHBvcnRlZF9zeW1ib2xzLmNjIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXhwb3J0ZWRfc3ltYm9scy5jYwppbmRleCAxMTFmNWYwLi42MTJjNDdiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9leHBvcnRlZF9zeW1ib2xzLmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V4cG9ydGVkX3N5bWJvbHMuY2MKQEAgLTU5LDggKzU5LDcgQEAKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIGVsZl9sb2FkZXIgewogCi1FeHBvcnRlZFN5bWJvbHM6OkV4cG9ydGVkU3ltYm9scygKLSAgICBjb25zdCB2b2lkKiAoKmN1c3RvbV9nZXRfZXh0ZW5zaW9uKShjb25zdCBjaGFyKiBuYW1lKSkgeworRXhwb3J0ZWRTeW1ib2xzOjpFeHBvcnRlZFN5bWJvbHMoKSB7CiAgIFJFR0lTVEVSX1NZTUJPTChTYkFjY2Vzc2liaWxpdHlHZXREaXNwbGF5U2V0dGluZ3MpOwogICBSRUdJU1RFUl9TWU1CT0woU2JBY2Nlc3NpYmlsaXR5R2V0VGV4dFRvU3BlZWNoU2V0dGluZ3MpOwogICBSRUdJU1RFUl9TWU1CT0woU2JBdWRpb1NpbmtDcmVhdGUpOwpAQCAtMTA5LDkgKzEwOCw3IEBACiAgIFJFR0lTVEVSX1NZTUJPTChTYkRybUNyZWF0ZVN5c3RlbSk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYkRybURlc3Ryb3lTeXN0ZW0pOwogICBSRUdJU1RFUl9TWU1CT0woU2JEcm1HZW5lcmF0ZVNlc3Npb25VcGRhdGVSZXF1ZXN0KTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBSRUdJU1RFUl9TWU1CT0woU2JEcm1HZXRNZXRyaWNzKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiRHJtVXBkYXRlU2Vzc2lvbik7CiAgIFJFR0lTVEVSX1NZTUJPTChTYkV2ZW50Q2FuY2VsKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiRXZlbnRTY2hlZHVsZSk7CkBAIC0zMjAsMzIgKzMxNywxNyBAQAogICBSRUdJU1RFUl9TWU1CT0woU2JTeXN0ZW1HZXRQYXRoKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiR2V0RWdsSW50ZXJmYWNlKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiR2V0R2xlc0ludGVyZmFjZSk7Ci0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBSRUdJU1RFUl9TWU1CT0woU2JGaWxlQXRvbWljUmVwbGFjZSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKICNpZiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogICBSRUdJU1RFUl9TWU1CT0woU2JNZW1vcnlGbHVzaCk7CiAjZW5kaWYgIC8vIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgUkVHSVNURVJfU1lNQk9MKFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZSk7Ci0jZWxzZQotICBSRUdJU1RFUl9TWU1CT0woU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKTsKLSNlbmRpZgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApCiAgIFJFR0lTVEVSX1NZTUJPTChTYk1lbW9yeU1hcCk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYk1lbW9yeVVubWFwKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiTWVtb3J5UHJvdGVjdCk7Ci0jZW5kaWYgIC8vIFNCX0hBUyhNTUFQKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiVWlOYXZHZXRJbnRlcmZhY2UpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgUkVHSVNURVJfU1lNQk9MKFNiV2luZG93Qmx1ck9uU2NyZWVuS2V5Ym9hcmQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JXaW5kb3dGb2N1c09uU2NyZWVuS2V5Ym9hcmQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JXaW5kb3dHZXRPblNjcmVlbktleWJvYXJkQm91bmRpbmdSZWN0KTsKQEAgLTM1NSwxOSArMzM3LDkgQEAKICAgUkVHSVNURVJfU1lNQk9MKFNiV2luZG93U2hvd09uU2NyZWVuS2V5Ym9hcmQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JXaW5kb3dPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNTdXBwb3J0ZWQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JXaW5kb3dVcGRhdGVPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnMpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiV2luZG93T25TY3JlZW5LZXlib2FyZElzU3VwcG9ydGVkKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgUkVHSVNURVJfU1lNQk9MKFNiQWNjZXNzaWJpbGl0eUdldENhcHRpb25TZXR0aW5ncyk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYkFjY2Vzc2liaWxpdHlTZXRDYXB0aW9uc0VuYWJsZWQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKICAgUkVHSVNURVJfU1lNQk9MKFNiTWljcm9waG9uZUNsb3NlKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiTWljcm9waG9uZUNyZWF0ZSk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYk1pY3JvcGhvbmVEZXN0cm95KTsKQEAgLTM3NSw0NCArMzQ3LDIyIEBACiAgIFJFR0lTVEVSX1NZTUJPTChTYk1pY3JvcGhvbmVJc1NhbXBsZVJhdGVTdXBwb3J0ZWQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JNaWNyb3Bob25lT3Blbik7CiAgIFJFR0lTVEVSX1NZTUJPTChTYk1pY3JvcGhvbmVSZWFkKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBSRUdJU1RFUl9TWU1CT0woU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQpOwotI2VuZGlmCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1NZTlRIRVNJUykKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoU3ludGhlc2lzQ2FuY2VsKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoU3ludGhlc2lzU3BlYWspOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoU1BFRUNIX1NZTlRIRVNJUykKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSU1FX1RIUkVBRF9OT1cpCiAgIFJFR0lTVEVSX1NZTUJPTChTYlRpbWVHZXRNb25vdG9uaWNUaHJlYWROb3cpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotCiAjaWYgU0JfQVBJX1ZFUlNJT04gPT0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoUmVjb2duaXplcklzU3VwcG9ydGVkKTsKICNlbmRpZgotI2lmIFNCX0FQSV9WRVJTSU9OID09IDEyIHx8IChTQl9BUElfVkVSU0lPTiA8IDEyICYmIFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikpCisjaWYgU0JfQVBJX1ZFUlNJT04gPT0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoUmVjb2duaXplckNyZWF0ZSk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYlNwZWVjaFJlY29nbml6ZXJEZXN0cm95KTsKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoUmVjb2duaXplclN0YXJ0KTsKICAgUkVHSVNURVJfU1lNQk9MKFNiU3BlZWNoUmVjb2duaXplclN0b3ApOwogICBSRUdJU1RFUl9TWU1CT0woU2JTcGVlY2hSZWNvZ25pemVyQ2FuY2VsKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gKFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKSkKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID09IDEyCiAgIFJFR0lTVEVSX1NZTUJPTChTYlNwZWVjaFN5bnRoZXNpc0lzU3VwcG9ydGVkKTsKLSNlbmRpZgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgUkVHSVNURVJfU1lNQk9MKFNiVGltZUlzVGltZVRocmVhZE5vd1N1cHBvcnRlZCk7Ci0jZW5kaWYKLQogICBSRUdJU1RFUl9TWU1CT0woU2JEcm1Jc1NlcnZlckNlcnRpZmljYXRlVXBkYXRhYmxlKTsKICAgUkVHSVNURVJfU1lNQk9MKFNiRHJtVXBkYXRlU2VydmVyQ2VydGlmaWNhdGUpOwogICBSRUdJU1RFUl9TWU1CT0woU2JNZWRpYUdldEF1ZGlvQnVmZmVyQnVkZ2V0KTsKQEAgLTQ0NCw4ICszOTQsNiBAQAogICBSRUdJU1RFUl9TWU1CT0woU2JUaHJlYWRTYW1wbGVySXNTdXBwb3J0ZWQpOwogICBSRUdJU1RFUl9TWU1CT0woU2JUaHJlYWRTYW1wbGVyVGhhdyk7CiAgIFJFR0lTVEVSX1NZTUJPTChTYldpbmRvd0dldERpYWdvbmFsU2l6ZUluSW5jaGVzKTsKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIFJFR0lTVEVSX1NZTUJPTChrU2JEZWZhdWx0TW1hcFRocmVzaG9sZCk7CiAgIFJFR0lTVEVSX1NZTUJPTChrU2JGaWxlTWF4TmFtZSk7CiAgIFJFR0lTVEVSX1NZTUJPTChrU2JGaWxlTWF4T3Blbik7CkBAIC00NzEsOCArNDE5LDYgQEAKICAgUkVHSVNURVJfU1lNQk9MKGtTYlBhdGhTZXBTdHJpbmcpOwogICBSRUdJU1RFUl9TWU1CT0woa1NiUHJlZmVycmVkUmdiYUJ5dGVPcmRlcik7CiAgIFJFR0lTVEVSX1NZTUJPTChrU2JVc2VyTWF4U2lnbmVkSW4pOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgUkVHSVNURVJfU1lNQk9MKFNiU3lzdGVtTmV0d29ya0lzRGlzY29ubmVjdGVkKTsKICNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V4cG9ydGVkX3N5bWJvbHMuaCBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V4cG9ydGVkX3N5bWJvbHMuaAppbmRleCBlMjQ2MjE0Li5kMzg1ZTFkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9leHBvcnRlZF9zeW1ib2xzLmgKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXhwb3J0ZWRfc3ltYm9scy5oCkBAIC0zMiwxMCArMzIsNyBAQAogLy8gb3V0c2lkZSBvZiB0aGUgc2V0IHJlcHJlc2VudGVkIGluIHRoaXMgY2xhc3MuCiBjbGFzcyBFeHBvcnRlZFN5bWJvbHMgewogIHB1YmxpYzoKLSAgLy8gQW4gb3B0aW9uYWwgfGN1c3RvbV9nZXRfZXh0ZW5zaW9ufCBmdW5jdGlvbiBwb2ludGVyIGNhbiBiZSBwYXNzZWQgaW4gb3JkZXIKLSAgLy8gdG8gb3ZlcnJpZGUgdGhlIHxTYlN5c3RlbUdldEV4dGVuc2lvbnwgZnVuY3Rpb24uCi0gIGV4cGxpY2l0IEV4cG9ydGVkU3ltYm9scygKLSAgICAgIGNvbnN0IHZvaWQqICgqY3VzdG9tX2dldF9leHRlbnNpb24pKGNvbnN0IGNoYXIqIG5hbWUpID0gTlVMTCk7CisgIEV4cG9ydGVkU3ltYm9scygpOwogICBjb25zdCB2b2lkKiBMb29rdXAoY29uc3QgY2hhciogbmFtZSk7CiAKICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvcHJvZ3JhbV90YWJsZS5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL3Byb2dyYW1fdGFibGUuY2MKaW5kZXggNjFkODIzYy4uODI0YTY4ZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvcHJvZ3JhbV90YWJsZS5jYworKysgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9wcm9ncmFtX3RhYmxlLmNjCkBAIC04MCw3ICs4MCw3IEBACiAgIFNCX0RMT0coSU5GTykgPDwgInBhZ2VfbWF4IC0gcGFnZV9taW49IiA8PCBwYWdlX21heCAtIHBhZ2VfbWluOwogCiAgIGlmIChtZW1vcnlfbWFwcGVkX2ZpbGVfZXh0ZW5zaW9uXykgewotICAgIFNCX0RMT0coSU5GTykgPDwgIk1lbW9yeSBtYXBwZWQgZmlsZSBmb3IgdGhlIHByb2dyYW0gaGVhZGVyIjsKKyAgICBTQl9MT0coSU5GTykgPDwgIlVzaW5nIG1lbW9yeSBtYXBwZWQgZmlsZSBmb3IgdGhlIHByb2dyYW0gaGVhZGVyIjsKICAgICBwaGRyX21tYXBfID0gbWVtb3J5X21hcHBlZF9maWxlX2V4dGVuc2lvbl8tPk1lbW9yeU1hcEZpbGUoCiAgICAgICAgIE5VTEwsIGVsZl9maWxlLT5HZXROYW1lKCkuY19zdHIoKSwga1NiTWVtb3J5TWFwUHJvdGVjdFJlYWQsIHBhZ2VfbWluLAogICAgICAgICBwaGRyX3NpemVfKTsKQEAgLTkxLDcgKzkxLDYgQEAKIAogICAgIFNCX0RMT0coSU5GTykgPDwgIkFsbG9jYXRlZCBhZGRyZXNzPSIgPDwgcGhkcl9tbWFwXzsKICAgfSBlbHNlIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkKICAgICBwaGRyX21tYXBfID0KICAgICAgICAgU2JNZW1vcnlNYXAocGhkcl9zaXplXywga1NiTWVtb3J5TWFwUHJvdGVjdFdyaXRlLCAicHJvZ3JhbV9oZWFkZXIiKTsKICAgICBpZiAoIXBoZHJfbW1hcF8pIHsKQEAgLTEwMCwxNiArOTksMTIgQEAKICAgICB9CiAKICAgICBTQl9ETE9HKElORk8pIDw8ICJBbGxvY2F0ZWQgYWRkcmVzcz0iIDw8IHBoZHJfbW1hcF87Ci0jZWxzZQotICAgIFNCX0NIRUNLKGZhbHNlKTsKLSNlbmRpZgogICAgIGlmICghZWxmX2ZpbGUtPlJlYWRGcm9tT2Zmc2V0KHBhZ2VfbWluLCByZWludGVycHJldF9jYXN0PGNoYXIqPihwaGRyX21tYXBfKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGRyX3NpemVfKSkgewogICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIHJlYWQgcHJvZ3JhbSBoZWFkZXIgZnJvbSBmaWxlIG9mZnNldDogIgogICAgICAgICAgICAgICAgICAgICA8PCBwYWdlX21pbjsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApCiAgICAgYm9vbCBtcF9yZXN1bHQgPQogICAgICAgICBTYk1lbW9yeVByb3RlY3QocGhkcl9tbWFwXywgcGhkcl9zaXplXywga1NiTWVtb3J5TWFwUHJvdGVjdFJlYWQpOwogICAgIFNCX0RMT0coSU5GTykgPDwgIm1wX3Jlc3VsdD0iIDw8IG1wX3Jlc3VsdDsKQEAgLTExNyw5ICsxMTIsNiBAQAogICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIHByb3RlY3QgcHJvZ3JhbSBoZWFkZXIiOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSNlbHNlCi0gICAgU0JfQ0hFQ0soZmFsc2UpOwotI2VuZGlmCiAgIH0KIAogICBwaGRyX3RhYmxlXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGhkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBoZHJfbW1hcF8pICsKQEAgLTE5NSw3ICsxODcsNyBAQAogICAgICAgICAgICAgICAgICAgPDwgIiBmaWxlX2xlbmd0aD0iIDw8IGZpbGVfbGVuZ3RoIDw8ICIgc2VnX3BhZ2Vfc3RhcnQ9MHgiCiAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmhleCA8PCBzZWdfcGFnZV9zdGFydDsKIAotI2lmIChTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkpICYmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjaWYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKICAgICBpZiAoZmlsZV9sZW5ndGggIT0gMCkgewogICAgICAgY29uc3QgaW50IHByb3RfZmxhZ3MgPSBQRkxBR1NfVE9fUFJPVChwaGRyLT5wX2ZsYWdzKTsKICAgICAgIFNCX0RMT0coSU5GTykgPDwgInNlZ21lbnQgcHJvdF9mbGFncz0iIDw8IHN0ZDo6aGV4IDw8IHByb3RfZmxhZ3M7CkBAIC0yNTgsNyArMjUwLDcgQEAKICAgICAvLyBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIHByaXZhdGUgYW5vbnltb3VzCiAgICAgLy8gbWFwIGZvciBhbGwgZXh0cmEgcGFnZXMuCiAgICAgaWYgKHNlZ19wYWdlX2VuZCA+IHNlZ19maWxlX2VuZCkgewotI2lmIChTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkpICYmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjaWYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKICAgICAgIGJvb2wgbXByb3RlY3RfZml4ID0gU2JNZW1vcnlQcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19maWxlX2VuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfZmlsZV9lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JNZW1vcnlNYXBQcm90ZWN0V3JpdGUpOwpAQCAtMjczLDcgKzI2NSw3IEBACiAKICAgICAgIG1lbXNldChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfZmlsZV9lbmQpLCAwLAogICAgICAgICAgICAgIHNlZ19wYWdlX2VuZCAtIHNlZ19maWxlX2VuZCk7Ci0jaWYgKFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKSkgJiYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNpZiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogICAgICAgU2JNZW1vcnlQcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19maWxlX2VuZCksCiAgICAgICAgICAgICAgICAgICAgICAgc2VnX3BhZ2VfZW5kIC0gc2VnX2ZpbGVfZW5kLAogICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpKTsKQEAgLTM2Nyw3ICszNTksNyBAQAogICAgIEFkZHIgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgYmFzZV9tZW1vcnlfYWRkcmVzc187CiAgICAgQWRkciBzZWdfcGFnZV9lbmQgPQogICAgICAgICBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBiYXNlX21lbW9yeV9hZGRyZXNzXzsKLSNpZiAoU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApKSAmJiBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQorI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCiAgICAgaW50IHJldCA9IFNiTWVtb3J5UHJvdGVjdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpIHwgZXh0cmFfcHJvdF9mbGFncyk7CkBAIC0zOTAsNyArMzgyLDYgQEAKIAogICBTQl9ETE9HKElORk8pIDw8ICJMb2FkIHNpemU9IiA8PCBsb2FkX3NpemVfOwogCi0jaWYgKFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKSkKICAgbG9hZF9zdGFydF8gPQogICAgICAgU2JNZW1vcnlNYXAobG9hZF9zaXplXywga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkLCAicmVzZXJ2ZWRfbWVtIik7CiAgIGlmIChsb2FkX3N0YXJ0XyA9PSBNQVBfRkFJTEVEKSB7CkBAIC0zOTgsOSArMzg5LDYgQEAKICAgICAgICAgICAgICAgICAgIDw8ICIgYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZSI7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0jZWxzZQotICBTQl9DSEVDSyhmYWxzZSk7Ci0jZW5kaWYKICAgYmFzZV9tZW1vcnlfYWRkcmVzc18gPSByZWludGVycHJldF9jYXN0PEFkZHI+KGxvYWRfc3RhcnRfKTsKICAgU0JfTE9HKElORk8pIDw8ICJMb2FkIHN0YXJ0PSIgPDwgc3RkOjpoZXggPDwgbG9hZF9zdGFydF8KICAgICAgICAgICAgICAgIDw8ICIgYmFzZV9tZW1vcnlfYWRkcmVzcz0weCIgPDwgYmFzZV9tZW1vcnlfYWRkcmVzc187CkBAIC00MzIsMTYgKzQyMCwxMiBAQAogCiBQcm9ncmFtVGFibGU6On5Qcm9ncmFtVGFibGUoKSB7CiAgIFNldEV2ZXJncmVlbkluZm8oTlVMTCk7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApCiAgIGlmIChsb2FkX3N0YXJ0XykgewogICAgIFNiTWVtb3J5VW5tYXAobG9hZF9zdGFydF8sIGxvYWRfc2l6ZV8pOwogICB9CiAgIGlmIChwaGRyX21tYXBfKSB7CiAgICAgU2JNZW1vcnlVbm1hcChwaGRyX21tYXBfLCBwaGRyX3NpemVfKTsKICAgfQotI2Vsc2UKLSAgU0JfQ0hFQ0soZmFsc2UpOwotI2VuZGlmCiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBlbGZfbG9hZGVyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9wcm9ncmFtX3RhYmxlX3Rlc3QuY2MgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9wcm9ncmFtX3RhYmxlX3Rlc3QuY2MKaW5kZXggM2EyMzcxMS4uYjhjNWMxYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvcHJvZ3JhbV90YWJsZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL3Byb2dyYW1fdGFibGVfdGVzdC5jYwpAQCAtMjIsOCArMjIsNyBAQAogI2luY2x1ZGUgInRlc3RpbmcvZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgJiYgKFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKSkgJiYgXAotICAgIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjaWYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIGVsZl9sb2FkZXIgewogCkBAIC0xOTAsNSArMTg5LDQgQEAKIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIGVsZl9sb2FkZXIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgJiYgKFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgIC8vIHx8IFNCX0hBUyhNTUFQKSkgJiYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNlbmRpZiAgLy8gU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL3JlbG9jYXRpb25zX3Rlc3QuY2MgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9yZWxvY2F0aW9uc190ZXN0LmNjCmluZGV4IDcxZDBkMTIuLmVmNjg0MDYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL3JlbG9jYXRpb25zX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvcmVsb2NhdGlvbnNfdGVzdC5jYwpAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zdHJpbmcuaCIKICNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIChTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkpICYmIFwKLSAgICBTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQorI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBlbGZfbG9hZGVyIHsKIApAQCAtMzgzLDUgKzM4Miw0IEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBlbGZfbG9hZGVyCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyICYmIChTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAvLyB8fCBTQl9IQVMoTU1BUCkpICYmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisjZW5kaWYgIC8vIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5jYyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhYmlfc3RyaW5nLmNjCmluZGV4IGQ4MGViZjUuLjIyMDQxNjAgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhYmlfc3RyaW5nLmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhYmlfc3RyaW5nLmNjCkBAIC0yMiwxNyArMjIsMTIgQEAKIGV4dGVybiAiQyIgewogCiBjb25zdCBjaGFyKiBHZXRFdmVyZ3JlZW5TYWJpU3RyaW5nKCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHJldHVybiBTQl9TQUJJX0pTT05fSUQ7Ci0jZWxzZQotICByZXR1cm4gTlVMTDsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIH0KIAogfSAgLy8gZXh0ZXJuICJDIgogCiBib29sIENoZWNrU2FiaShjb25zdCBjaGFyKiAoKnNhYmlfZnVuY3Rpb24pKCkpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoIXNhYmlfZnVuY3Rpb24pIHsKICAgICBTQl9MT0coRVJST1IpIDw8ICJNaXNzaW5nIHNhYmlfZnVuY3Rpb24iOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0LDcgKzM5LDQgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5neXAgYi9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzOTM5MGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2VsZl9sb2FkZXIvc2FiaV9zdHJpbmcuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NhYmlfc3RyaW5nJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc2FiaV9zdHJpbmcuY2MnLAotICAgICAgICAnc2FiaV9zdHJpbmcuaCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYW5kYm94LmNjIGIvc3RhcmJvYXJkL2VsZl9sb2FkZXIvc2FuZGJveC5jYwppbmRleCA5ZjRlMDQ0Li4wMTkzMDlmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYW5kYm94LmNjCisrKyBiL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhbmRib3guY2MKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbXV0ZXguaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb21tYW5kX2xpbmUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc3RyaW5nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvYW5ub3RhdGlvbnMuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuaCIKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZW50LmggYi9zdGFyYm9hcmQvZXZlbnQuaAppbmRleCAwMjllNjI5Li45ZDZlMzY3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlbnQuaAorKysgYi9zdGFyYm9hcmQvZXZlbnQuaApAQCAtMzcwLDcgKzM3MCw2IEBACiAgIC8vIFNiRXZlbnRXaW5kb3dTaXplQ2hhbmdlZERhdGEuCiAgIGtTYkV2ZW50VHlwZVdpbmRvd1NpemVDaGFuZ2VkLAogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKICAgLy8gVGhlIHBsYXRmb3JtIGhhcyBzaG93biB0aGUgb24gc2NyZWVuIGtleWJvYXJkLiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBieQogICAvLyB0aGUgc3lzdGVtIG9yIGJ5IHRoZSBhcHBsaWNhdGlvbidzIE9uU2NyZWVuS2V5Ym9hcmQgc2hvdyBtZXRob2QuIFRoZSBldmVudAogICAvLyBoYXMgaW50IGRhdGEgcmVwcmVzZW50aW5nIGEgdGlja2V0LiBUaGUgdGlja2V0IGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uCkBAIC00MTcsMjQgKzQxNiwxOCBAQAogICAvLyB0aWNrZXQgdmFsdWUga1NiRXZlbnRPblNjcmVlbktleWJvYXJkSW52YWxpZFRpY2tldC4KICAga1NiRXZlbnRUeXBlT25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zVXBkYXRlZCwKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKICAgLy8gT25lIG9yIG1vcmUgb2YgdGhlIGZpZWxkcyByZXR1cm5lZCBieSBTYkFjY2Vzc2liaWxpdHlHZXRDYXB0aW9uU2V0dGluZ3MKICAgLy8gaGFzIGNoYW5nZWQuCiAgIGtTYkV2ZW50VHlwZUFjY2Vzc2liaWxpdHlDYXB0aW9uU2V0dGluZ3NDaGFuZ2VkLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiAKIC8vIGNsYW5nLWZvcm1hdCBvZmYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFRoZSBwbGF0Zm9ybSdzIHRleHQtdG8tc3BlZWNoIHNldHRpbmdzIGhhdmUgY2hhbmdlZC4KICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICBrU2JFdmVudFR5cGVBY2Nlc3NpYmlsaXR5VGV4dFRvU3BlZWNoU2V0dGluZ3NDaGFuZ2VkLAogI2Vsc2UKICAga1NiRXZlbnRUeXBlQWNjZXNzaWJsaXR5VGV4dFRvU3BlZWNoU2V0dGluZ3NDaGFuZ2VkLAogI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAvLyBjbGFuZy1mb3JtYXQgb24KIApAQCAtNDUyLDcgKzQ0NSw3IEBACiAgIC8vIHRoZSBkZXZpY2UgaXMganVzdCBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LiBUaGlzIGV2ZW50IGlzIHVzZWQKICAgLy8gdG8gaW1wbGVtZW50IHdpbmRvdy5vbm9ubGluZSBET00gZXZlbnQuCiAgIGtTYkV2ZW50VHlwZU9zTmV0d29ya0Nvbm5lY3RlZCwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAKICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICAvLyBUaGUgcGxhdGZvcm0gaGFzIGRldGVjdGVkIGEgZGF0ZSBhbmQvb3IgdGltZSBjb25maWd1cmF0aW9uIGNoYW5nZSAoc3VjaApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvY29uZmlndXJhdGlvbl9wdWJsaWMuaAppbmRleCAyMTIwZDMzLi5kN2FhMjA2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvY29uZmlndXJhdGlvbl9wdWJsaWMuaApAQCAtMTI3LDEyICsxMjcsNiBAQAogCiAvLyAtLS0gTWVtb3J5IENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGhhcyBhbmQgc2hvdWxkIHVzZSBhbiBNTUFQIGZ1bmN0aW9uIHRvIG1hcCBwaHlzaWNhbAotLy8gbWVtb3J5IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotI2RlZmluZSBTQl9IQVNfTU1BUCAxCi0jZW5kaWYKLQogLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGNhbiBtYXAgZXhlY3V0YWJsZSBtZW1vcnkuIEltcGxpZXMgU0JfSEFTX01NQVAuIFRoaXMgaXMKIC8vIHJlcXVpcmVkIGZvciBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIEpJVC4KICNkZWZpbmUgU0JfQ0FOX01BUF9FWEVDVVRBQkxFX01FTU9SWSAxCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmE3NmMxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdldmVyZ3JlZW4tYXJtLWhhcmRmcCcsCi0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdldmVyZ3JlZW4tYXJtLWhhcmRmcF9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwX2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCBkYjNlMmNiLi45ZjYxMTAxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0yMCw2ICsyMCw0IEBACiAKIAogZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uKAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9hcm0vaGFyZGZwL3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uKCdldmVyZ3JlZW4tYXJtLWhhcmRmcCcpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCmluZGV4IGI5NzU4ZTIuLjAyZTc2NDQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0xNSwzICsxNSw0IEBACiBpbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSIpCiAKIHNhYmlfcGF0aCA9ICIvL3N0YXJib2FyZC9zYWJpL2FybS9oYXJkZnAvc2FiaS12JHNiX2FwaV92ZXJzaW9uLmpzb24iCitpbnN0YWxsX3RhcmdldF9wYXRoID0gIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2luc3RhbGxfdGFyZ2V0LmduaSIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNjY0MTYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2F0b21pY19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9IQVJERlBfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlNjliMC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoZSBTdGFyYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgWDg2XzY0LiBPdGhlciBkZXZpY2VzIHdpbGwgaGF2ZQotLy8gc3BlY2lmaWMgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9ucy4KLQotLy8gT3RoZXIgc291cmNlIGZpbGVzIHNob3VsZCBuZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5LCBidXQgc2hvdWxkCi0vLyBpbmNsdWRlIHRoZSBnZW5lcmljICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIiBpbnN0ZWFkLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzY3YmQ1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl90YXJnZXRfcGxhdGZvcm0nOiAnZXZlcmdyZWVuLWFybS1oYXJkZnAnLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLWhhcmRmcC1zYnZlcnNpb24tMTJfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEyX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDk3NDAxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0iIiJTdGFyYm9hcmQgZXZlcmdyZWVuLWFybS1oYXJkZnAgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBmb3IgZ3lwX2NvYmFsdC4iIiIKLQotZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLmFybS5zaGFyZWQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uKAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMicsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtL2hhcmRmcC9zYWJpLXYxMi5qc29uJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk1NjZkMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQotCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvdGVzdF9maWx0ZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTUyMWM4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvdGVzdF9maWx0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgRXZlcmdyZWVuIEFSTSBIYXJkIEZQIFBsYXRmb3JtIFRlc3QgRmlsdGVycy4iIiIKLQotZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLmFybS5oYXJkZnAgaW1wb3J0IHRlc3RfZmlsdGVycyBhcyBwYXJlbnRfdGVzdF9maWx0ZXJzCi0KLQotZGVmIENyZWF0ZVRlc3RGaWx0ZXJzKCk6Ci0gIHJldHVybiBwYXJlbnRfdGVzdF9maWx0ZXJzLkV2ZXJncmVlbkFybUhhcmRGUFRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwM2Q2YmQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9IQVJERlBfU0JWRVJTSU9OXzEyX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNDUwODUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2F0b21pY19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9IQVJERlBfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI4NzY1NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoZSBTdGFyYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgWDg2XzY0LiBPdGhlciBkZXZpY2VzIHdpbGwgaGF2ZQotLy8gc3BlY2lmaWMgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9ucy4KLQotLy8gT3RoZXIgc291cmNlIGZpbGVzIHNob3VsZCBuZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5LCBidXQgc2hvdWxkCi0vLyBpbmNsdWRlIHRoZSBnZW5lcmljICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIiBpbnN0ZWFkLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGZmMWFiLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl90YXJnZXRfcGxhdGZvcm0nOiAnZXZlcmdyZWVuLWFybS1oYXJkZnAnLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEzX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEzX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xM19kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLWhhcmRmcC1zYnZlcnNpb24tMTNfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybS1oYXJkZnAtc2J2ZXJzaW9uLTEzX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2ZhOTFhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0iIiJTdGFyYm9hcmQgZXZlcmdyZWVuLWFybS1oYXJkZnAgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBmb3IgZ3lwX2NvYmFsdC4iIiIKLQotZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLmFybS5zaGFyZWQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uKAotICAgICAgJ2V2ZXJncmVlbi1hcm0taGFyZGZwLXNidmVyc2lvbi0xMycsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtL2hhcmRmcC9zYWJpLXYxMy5qc29uJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmZjIyNy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1MjFjOC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIEV2ZXJncmVlbiBBUk0gSGFyZCBGUCBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi5hcm0uaGFyZGZwIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgcGFyZW50X3Rlc3RfZmlsdGVycwotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gcGFyZW50X3Rlc3RfZmlsdGVycy5FdmVyZ3JlZW5Bcm1IYXJkRlBUZXN0RmlsdGVycygpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODNlMmI1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9IQVJERlBfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzg3ZjYxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQotCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRhMThlYi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX0hBUkRGUF9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fSEFSREZQX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC90b29sY2hhaW4vQlVJTEQuZ24gYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9oYXJkZnAvdG9vbGNoYWluL0JVSUxELmduCmluZGV4IGFjODc5MzMuLjI2NzNhYjIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL2hhcmRmcC90b29sY2hhaW4vQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vaGFyZGZwL3Rvb2xjaGFpbi9CVUlMRC5nbgpAQCAtMTQsNyArMTQsNyBAQAogCiBpbXBvcnQoIi8vYnVpbGQvY29uZmlnL2NsYW5nL2NsYW5nLmduaSIpCiBpbXBvcnQoIi8vYnVpbGQvdG9vbGNoYWluL2djY190b29sY2hhaW4uZ25pIikKLWltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvdG9vbGNoYWluL3Rvb2xjaGFpbi5nbmkiKQoraW1wb3J0KCIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pIikKIAogY2xhbmdfdG9vbGNoYWluKCJob3N0IikgewogICBjbGFuZ19iYXNlX3BhdGggPSBjbGFuZ19iYXNlX3BhdGgKQEAgLTI2LDE0ICsyNiwxNiBAQAogfQogCiBnY2NfdG9vbGNoYWluKCJ0YXJnZXQiKSB7Ci0gIGNjID0gZXZlcmdyZWVuX2FybV90YXJnZXRfY2MKLSAgY3h4ID0gZXZlcmdyZWVuX2FybV90YXJnZXRfY3h4Ci0gIGxkID0gZXZlcmdyZWVuX2FybV90YXJnZXRfbGQKLSAgYXIgPSBldmVyZ3JlZW5fYXJtX3RhcmdldF9hcgotICBubSA9IGV2ZXJncmVlbl9hcm1fdGFyZ2V0X25tCi0gIGV4dHJhX2xkZmxhZ3MgPSBldmVyZ3JlZW5fYXJtX3RhcmdldF9leHRyYV9sZGZsYWdzCisgIGNjID0gZXZlcmdyZWVuX3RhcmdldF9jYworICBjeHggPSBldmVyZ3JlZW5fdGFyZ2V0X2N4eAorICBsZCA9IGV2ZXJncmVlbl90YXJnZXRfbGQKKyAgYXIgPSBldmVyZ3JlZW5fdGFyZ2V0X2FyCisgIG5tID0gZXZlcmdyZWVuX3RhcmdldF9ubQorCisgIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncyArPSBbICItbSBhcm1lbGYiIF0KKyAgZXh0cmFfbGRmbGFncyA9IHN0cmluZ19qb2luKCIgIiwgZXZlcmdyZWVuX3RhcmdldF9leHRyYV9sZGZsYWdzKQogCiAgIHRvb2xjaGFpbl9hcmdzID0gewotICAgIGlzX2NsYW5nID0gZmFsc2UKKyAgICBpc19jbGFuZyA9IHRydWUKICAgfQogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODlhY2E5YS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIENvYmFsdCBFdmVyZ3JlZW4gQVJNIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnaW5fYXBwX2RpYWwlJzogMCwKLSAgfSwgIyBlbmQgb2YgdmFyaWFibGVzCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggYzI3NzZkMy4uNzIxYjI2NSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weQpAQCAtMTMsOCArMTMsNiBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICIiIlN0YXJib2FyZCBDb2JhbHQgRXZlcmdyZWVuIEFSTSBjb25maWd1cmF0aW9uLiIiIgogCi1pbXBvcnQgb3MKLQogZnJvbSBjb2JhbHQuYnVpbGQgaW1wb3J0IGNvYmFsdF9jb25maWd1cmF0aW9uCiBmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCkBAIC0yMiwyNiArMjAsMTIgQEAKIGNsYXNzIENvYmFsdEFSTUNvbmZpZ3VyYXRpb24oY29iYWx0X2NvbmZpZ3VyYXRpb24uQ29iYWx0Q29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBDb2JhbHQgRXZlcmdyZWVuIEFSTSBjb25maWd1cmF0aW9uLiIiIgogCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybV9jb25maWd1cmF0aW9uLCBhcHBsaWNhdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgYXBwbGljYXRpb25fZGlyZWN0b3J5KToKKyAgZGVmIF9faW5pdF9fKCAgIyBweWxpbnQ6ZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KKyAgICAgIHNlbGYsIHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24sIGFwcGxpY2F0aW9uX25hbWUsIGFwcGxpY2F0aW9uX2RpcmVjdG9yeSk6CiAgICAgc3VwZXIoQ29iYWx0QVJNQ29uZmlndXJhdGlvbiwKICAgICAgICAgICBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybV9jb25maWd1cmF0aW9uLCBhcHBsaWNhdGlvbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2RpcmVjdG9yeSkKIAotICBkZWYgR2V0UG9zdEluY2x1ZGVzKHNlbGYpOgotICAgICMgSWYgdGhlcmUgaXNuJ3QgYSBjb25maWd1cmF0aW9uLmd5cGkgZm91bmQgaW4gdGhlIHVzdWFsIHBsYWNlLCB3ZSdsbAotICAgICMgc3VwcGxlbWVudCB3aXRoIG91ciBzaGFyZWQgaW1wbGVtZW50YXRpb24uCi0gICAgaW5jbHVkZXMgPSBzdXBlcihDb2JhbHRBUk1Db25maWd1cmF0aW9uLCBzZWxmKS5HZXRQb3N0SW5jbHVkZXMoKQotICAgIGZvciBpbmNsdWRlIGluIGluY2x1ZGVzOgotICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShpbmNsdWRlKSA9PSAnY29uZmlndXJhdGlvbi5neXBpJzoKLSAgICAgICAgcmV0dXJuIGluY2x1ZGVzCi0KLSAgICBzaGFyZWRfZ3lwaV9wYXRoID0gb3MucGF0aC5qb2luKAotICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnY29uZmlndXJhdGlvbi5neXBpJykKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShzaGFyZWRfZ3lwaV9wYXRoKToKLSAgICAgIGluY2x1ZGVzLmFwcGVuZChzaGFyZWRfZ3lwaV9wYXRoKQotICAgIHJldHVybiBpbmNsdWRlcwotCiAgIGRlZiBXZWJkcml2ZXJCZW5jaG1hcmtzRW5hYmxlZChzZWxmKToKICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTkyYjZjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3lhc21fZXhpc3RzJzogMSwKLQotICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbXVzbC9hcmNoL2FybScsCi0KLSAgICAgICMgRm9yY2UgY2hhciB0byBiZSBzaWduZWQuCi0gICAgICAnLWZzaWduZWQtY2hhcicsCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotCi0gICAgJ2xpbmtlcl9mbGFncyc6IFsKLSAgICAgICctZnVzZS1sZD1sbGQnLAotICAgIF0sCi0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnIDogWwotICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgU3RhcmJvYXJkaXplZCBfX2V4dGVybmFsX3RocmVhZGluZyBmaWxlIGlzIGluY2x1ZGVkLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfRVhURVJOQUwnLAotCi0gICAgICAjIEVuc3VyZSB0aGF0IG9ubHkgdGhlIGZvcndhcmQgZGVjbGFyYXRpb25zIGFuZCB0eXBlIGRlZmluaXRpb25zIGFyZSBpbmNsdWRlZAotICAgICAgIyBpbiBfX2V4dGVybmFsX3RocmVhZGluZy4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfTElCUkFSWV9FWFRFUk5BTCcsCi0KLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCBkMzQ3MjQwLi42ZDQ0ZjUwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNSw4NCArMTUsMTcgQEAKIAogaW1wb3J0IG9zLnBhdGgKIAotZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IGNsYW5nIGFzIGNsYW5nX2J1aWxkCiBmcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBzaGFyZWRfY29uZmlndXJhdGlvbgotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGV2ZXJncmVlbl9saW5rZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgdG91Y2gKIAogCiBjbGFzcyBFdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uKHNoYXJlZF9jb25maWd1cmF0aW9uLkV2ZXJncmVlbkNvbmZpZ3VyYXRpb24pOgogICAiIiJTdGFyYm9hcmQgRXZlcmdyZWVuIEFSTSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgogCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm09J2V2ZXJncmVlbi1hcm0nLAotICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nKToKLSAgICBzdXBlcihFdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aCkKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtKToKKyAgICBzdXBlcihFdmVyZ3JlZW5Bcm1Db25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSkKIAogICAgIHNlbGYuQXBwZW5kQXBwbGljYXRpb25Db25maWd1cmF0aW9uUGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogCi0gIGRlZiBHZXRUYXJnZXRUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIHJldHVybiBzZWxmLkdldEhvc3RUb29sY2hhaW4oKiprd2FyZ3MpCi0KLSAgZGVmIEdldEhvc3RUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaG9zdF90b29sY2hhaW4nKToKLSAgICAgIGVudl92YXJpYWJsZXMgPSBzZWxmLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICAgIGNjX3BhdGggPSBlbnZfdmFyaWFibGVzWydDQ19ob3N0J10KLSAgICAgIGN4eF9wYXRoID0gZW52X3ZhcmlhYmxlc1snQ1hYX2hvc3QnXQotCi0gICAgICAjIFRha2VzIHRoZSBwcm92aWRlZCB2YWx1ZSBvZiBDWFhfSE9TVCB3aXRoIGEgcHJlcGVuZGVkICdjY2FjaGUnIGFuZCBhbgotICAgICAgIyBhcHBlbmRlZCAnYmluL2NsYW5nKysnIGFuZCBzdHJpcHMgdGhlbSBvZmYsIGxlYXZpbmcgdXMgd2l0aCBhbiBhYnNvbHV0ZQotICAgICAgIyBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiBvdXIgdG9vbGNoYWluLgotICAgICAgYmVnaW5fcGF0aF9pbmRleCA9IGN4eF9wYXRoLmZpbmQoJy8nKQotICAgICAgZW5kX3BhdGhfaW5kZXggPSBjeHhfcGF0aC5yZmluZCgnLycsIDAsIGN4eF9wYXRoLnJmaW5kKCcvJykpICsgMQotICAgICAgY3h4X3BhdGhfcm9vdCA9IGN4eF9wYXRoW2JlZ2luX3BhdGhfaW5kZXg6ZW5kX3BhdGhfaW5kZXhdCi0KLSAgICAgIHNlbGYuX2hvc3RfdG9vbGNoYWluID0gWwotICAgICAgICAgIGNsYW5nLkNDb21waWxlcihwYXRoPWNjX3BhdGgpLAotICAgICAgICAgIGNsYW5nLkN4eENvbXBpbGVyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcigpLAotICAgICAgICAgIGFyLlN0YXRpY0xpbmtlcigpLAotICAgICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgICBldmVyZ3JlZW5fbGlua2VyLlNoYXJlZExpYnJhcnlMaW5rZXIoCi0gICAgICAgICAgICAgIHBhdGg9Y3h4X3BhdGhfcm9vdCwgZXh0cmFfZmxhZ3M9WyctbSBhcm1lbGYnXSksCi0gICAgICAgICAgY3AuQ29weSgpLAotICAgICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgICAgXQotICAgIHJldHVybiBzZWxmLl9ob3N0X3Rvb2xjaGFpbgotCi0gIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKLSAgICBmaWx0ZXJzID0gc3VwZXIoRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19GSUxURVJFRF9URVNUUy5pdGVyaXRlbXMoKToKLSAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKLSAgICByZXR1cm4gZmlsdGVycwotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlndXJhdGlvbik6Ci0gICAgdmFyaWFibGVzID0gc3VwZXIoRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5HZXRWYXJpYWJsZXMoY29uZmlndXJhdGlvbikKLSAgICB2YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ2luY2x1ZGVfcGF0aF9wbGF0Zm9ybV9kZXBsb3lfZ3lwaSc6Ci0gICAgICAgICAgICAnc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpJywKLSAgICB9KQotICAgIHJldHVybiB2YXJpYWJsZXMKLQotICBfX0ZJTFRFUkVEX1RFU1RTID0geyAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0gICAgICAnbnBsYic6IFsnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXlTdGFja0RpcmVjdGlvbicsCi0gICAgICAgICAgICAgICAnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXknLAotICAgICAgICAgICAgICAgJ1NiU3lzdGVtR2V0U3RhY2tUZXN0LlN1bm55RGF5U2hvcnRTdGFjaycsCi0gICAgICAgICAgICAgICAnU2JTeXN0ZW1TeW1ib2xpemVUZXN0LlN1bm55RGF5J10sCi0gIH0KLQogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIEV2ZXJncmVlbkFybUNvbmZpZ3VyYXRpb24oKQorICByZXR1cm4gRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbignZXZlcmdyZWVuLWFybScpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2luc3RhbGxfdGFyZ2V0LmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTExZWJmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL2luc3RhbGxfdGFyZ2V0LmduaQpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0KCIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC90b29sY2hhaW4vc3RyaXAuZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9zdHJpcF9pbnN0YWxsX3RhcmdldC5nbmkiKQorCit0ZW1wbGF0ZSgiaW5zdGFsbF90YXJnZXQiKSB7CisgIHN0cmlwX2luc3RhbGxfdGFyZ2V0KHRhcmdldF9uYW1lKSB7CisgICAgZm9yd2FyZF92YXJpYWJsZXNfZnJvbShpbnZva2VyLCAiKiIpCisgICAgc3RyaXBfZXhlY3V0YWJsZSA9IHN0cmlwX2V4ZWN1dGFibGUKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWY5MTY4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2RlcGxveV9leGVjdXRhYmxlX2ZpbGUnOiAnPCh0YXJnZXRfZGVwbG95X2RpcikvbGliL2xpYjwoZXhlY3V0YWJsZV9uYW1lKS5zbycsCi0gICAgJ2V4ZWN1dGFibGVfZmlsZSc6ICc8KFBST0RVQ1RfRElSKS9saWIvbGliPChleGVjdXRhYmxlX25hbWUpLnNvJywKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvbGxlY3RfZGVwbG95X2NvbnRlbnQuZ3lwaScgXSwKLSAgJ2FjdGlvbnMnOiBbCi0gICAgewotICAgICAgJ2FjdGlvbl9uYW1lJzogJ2RlcGxveV9leGVjdXRhYmxlJywKLSAgICAgICdtZXNzYWdlJzogJ1N0cmlwIGV4ZWN1dGFibGU6IDwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwoZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAgICc8KGNvbnRlbnRfZGVwbG95X3N0YW1wX2ZpbGUpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsgJzwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAnYXJtLWxpbnV4LWdudWVhYmktc3RyaXAnLAotICAgICAgICAnLW8nLCAnPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkKaW5kZXggMDBkNTc4YS4uYTAzOGRhMCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rlc3RfZmlsdGVycy5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvdGVzdF9maWx0ZXJzLnB5CkBAIC0xNiw2ICsxNiwxNSBAQAogZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLnNoYXJlZCBpbXBvcnQgdGVzdF9maWx0ZXJzIGFzIHNoYXJlZF90ZXN0X2ZpbHRlcnMKIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAnbnBsYic6IFsKKyAgICAgICAgJ1NiU3lzdGVtR2V0U3RhY2tUZXN0LlN1bm55RGF5U3RhY2tEaXJlY3Rpb24nLAorICAgICAgICAnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXknLAorICAgICAgICAnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXlTaG9ydFN0YWNrJywKKyAgICAgICAgJ1NiU3lzdGVtU3ltYm9saXplVGVzdC5TdW5ueURheScKKyAgICBdLAorfQorCiAKIGRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgogICByZXR1cm4gRXZlcmdyZWVuQXJtVGVzdEZpbHRlcnMoKQpAQCAtMjYsMTUgKzM1LDYgQEAKIAogICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6CiAgICAgZmlsdGVycyA9IHN1cGVyKEV2ZXJncmVlbkFybVRlc3RGaWx0ZXJzLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CiAgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCiAgICAgcmV0dXJuIGZpbHRlcnMKLQotICBfRklMVEVSRURfVEVTVFMgPSB7Ci0gICAgICAnbnBsYic6IFsKLSAgICAgICAgICAnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXlTdGFja0RpcmVjdGlvbicsCi0gICAgICAgICAgJ1NiU3lzdGVtR2V0U3RhY2tUZXN0LlN1bm55RGF5JywKLSAgICAgICAgICAnU2JTeXN0ZW1HZXRTdGFja1Rlc3QuU3VubnlEYXlTaG9ydFN0YWNrJywKLSAgICAgICAgICAnU2JTeXN0ZW1TeW1ib2xpemVUZXN0LlN1bm55RGF5JwotICAgICAgXSwKLSAgfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rvb2xjaGFpbi9zdHJpcC5nbmkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvdG9vbGNoYWluL3N0cmlwLmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE2MzIyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rvb2xjaGFpbi9zdHJpcC5nbmkKQEAgLTAsMCArMSwxNSBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0cmlwX2V4ZWN1dGFibGUgPSAiYXJtLWxpbnV4LWdudWVhYmktc3RyaXAiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvdG9vbGNoYWluL3Rvb2xjaGFpbi5nbmkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvdG9vbGNoYWluL3Rvb2xjaGFpbi5nbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYTdkZTQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLWltcG9ydCgiLy9idWlsZC9jb25maWcvY2xhbmcvY2xhbmcuZ25pIikKLQotcHJlZml4ID0gcmViYXNlX3BhdGgoIiRjbGFuZ19iYXNlX3BhdGgvYmluIiwgcm9vdF9idWlsZF9kaXIpCi1ldmVyZ3JlZW5fYXJtX3RhcmdldF9jYyA9ICIkcHJlZml4L2NsYW5nIgotZXZlcmdyZWVuX2FybV90YXJnZXRfY3h4ID0gIiRwcmVmaXgvY2xhbmcrKyIKLWV2ZXJncmVlbl9hcm1fdGFyZ2V0X2xkID0gIiRwcmVmaXgvbGQubGxkIgotZXZlcmdyZWVuX2FybV90YXJnZXRfYXIgPSAiJHtwcmVmaXh9L2xsdm0tYXIiCi1ldmVyZ3JlZW5fYXJtX3RhcmdldF9ubSA9ICJubSIKLQotIyBUT0RPKGIvMjA2NjQyOTk0KTogc2VlIGlmIGFueSBvZiB0aGVzZSBmbGFncywgbWlncmF0ZWQgZnJvbQotIyBzdGFyYm9hcmQvdG9vbHMvdG9vbGNoYWluL2V2ZXJncmVlbl9saW5rZXIucHksIGNhbiBiZSByZW1vdmVkLgotZXh0cmFfbGRmbGFnc19saXN0ID0gWwotICAiLS1idWlsZC1pZCIsCi0gICItLWdjLXNlY3Rpb25zIiwKLSAgIi1YIiwKLSAgIi12IiwKLSAgIi1laC1mcmFtZS1oZHIiLAotICAiLS1maW5pPV9fY3hhX2ZpbmFsaXplIiwKLSAgIi1tIGFybWVsZiIsCi0gICItc2hhcmVkIiwKLSAgIi1MJGNsYW5nX2Jhc2VfcGF0aCIsCi0gICItTC91c3IvbGliIiwKLSAgIi1ML2xpYiIsCi0gICItbm9zdGRsaWIiLAotICAiLS13aG9sZS1hcmNoaXZlIiwKLSAgIi0tbm8td2hvbGUtYXJjaGl2ZSIsCi0gICItdSBHZXRFdmVyZ3JlZW5TYWJpU3RyaW5nIiwKLV0KLWV2ZXJncmVlbl9hcm1fdGFyZ2V0X2V4dHJhX2xkZmxhZ3MgPSBzdHJpbmdfam9pbigiICIsIGV4dHJhX2xkZmxhZ3NfbGlzdCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKaW5kZXggYjg2YjkyNS4uZGVhMDU4MSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTEzMCwxMiArMTMwLDYgQEAKIAogLy8gLS0tIE1lbW9yeSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBoYXMgYW5kIHNob3VsZCB1c2UgYW4gTU1BUCBmdW5jdGlvbiB0byBtYXAgcGh5c2ljYWwKLS8vIG1lbW9yeSB0byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSNkZWZpbmUgU0JfSEFTX01NQVAgMQotI2VuZGlmCi0KIC8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBjYW4gbWFwIGV4ZWN1dGFibGUgbWVtb3J5LiBJbXBsaWVzIFNCX0hBU19NTUFQLiBUaGlzIGlzCiAvLyByZXF1aXJlZCBmb3IgcGxhdGZvcm1zIHRoYXQgd2FudCB0byBKSVQuCiAjZGVmaW5lIFNCX0NBTl9NQVBfRVhFQ1VUQUJMRV9NRU1PUlkgMQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q5NjNmNy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl90YXJnZXRfcGxhdGZvcm0nOiAnZXZlcmdyZWVuLWFybS1zb2Z0ZnAnLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLWFybS1zb2Z0ZnBfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcF9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcF9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcF9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcF9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggNDY0MThjMS4uYzY3M2Y0OSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMjAsNiArMjAsNCBAQAogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbigKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcCcsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtL3NvZnRmcC9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nKQorICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbignZXZlcmdyZWVuLWFybS1zb2Z0ZnAnKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQppbmRleCA5OGUxZmU2Li5hMTkyYTcwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQpAQCAtMTUsMyArMTUsNCBAQAogaW1wb3J0KCIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkiKQogCiBzYWJpX3BhdGggPSAiLy9zdGFyYm9hcmQvc2FiaS9hcm0vc29mdGZwL3NhYmktdiRzYl9hcGlfdmVyc2lvbi5qc29uIgoraW5zdGFsbF90YXJnZXRfcGF0aCA9ICIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NoYXJlZC9pbnN0YWxsX3RhcmdldC5nbmkiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFkYTI1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fU09GVEZQX1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZjQ1ZjQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGUgU3RhcmJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFg4Nl82NC4gT3RoZXIgZGV2aWNlcyB3aWxsIGhhdmUKLS8vIHNwZWNpZmljIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbnMuCi0KLS8vIE90aGVyIHNvdXJjZSBmaWxlcyBzaG91bGQgbmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlciBkaXJlY3RseSwgYnV0IHNob3VsZAotLy8gaW5jbHVkZSB0aGUgZ2VuZXJpYyAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIgaW5zdGVhZC4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMxZjJiNy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJ2V2ZXJncmVlbi1hcm0tc29mdGZwJywKLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMl9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMl9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcC1zYnZlcnNpb24tMTJfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybS1zb2Z0ZnAtc2J2ZXJzaW9uLTEyX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xMl9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkMWFmZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotIiIiU3RhcmJvYXJkIGV2ZXJncmVlbi1hcm0tc29mdGZwIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIGd5cF9jb2JhbHQuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi5hcm0uc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbigKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcC1zYnZlcnNpb24tMTInLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2FybS9zb2Z0ZnAvc2FiaS12MTIuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWE5NTkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KLQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI4N2Y2Ny4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIEV2ZXJncmVlbiBBUk0gU29mdCBGUCBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi5hcm0uc29mdGZwIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgcGFyZW50X3Rlc3RfZmlsdGVycwotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gcGFyZW50X3Rlc3RfZmlsdGVycy5FdmVyZ3JlZW5Bcm1Tb2Z0RlBUZXN0RmlsdGVycygpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzcyNTUyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEyX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fU09GVEZQX1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2F0b21pY19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdmYzY0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fU09GVEZQX1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MTc0OTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGUgU3RhcmJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFg4Nl82NC4gT3RoZXIgZGV2aWNlcyB3aWxsIGhhdmUKLS8vIHNwZWNpZmljIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbnMuCi0KLS8vIE90aGVyIHNvdXJjZSBmaWxlcyBzaG91bGQgbmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlciBkaXJlY3RseSwgYnV0IHNob3VsZAotLy8gaW5jbHVkZSB0aGUgZ2VuZXJpYyAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIgaW5zdGVhZC4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEzX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjYjRkZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJ2V2ZXJncmVlbi1hcm0tc29mdGZwJywKLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xM19kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xM19kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcC1zYnZlcnNpb24tMTNfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybS1zb2Z0ZnAtc2J2ZXJzaW9uLTEzX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm0tc29mdGZwLXNidmVyc2lvbi0xM19nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJmZGNlZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotIiIiU3RhcmJvYXJkIGV2ZXJncmVlbi1hcm0tc29mdGZwIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIGd5cF9jb2JhbHQuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi5hcm0uc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQXJtQ29uZmlndXJhdGlvbigKLSAgICAgICdldmVyZ3JlZW4tYXJtLXNvZnRmcC1zYnZlcnNpb24tMTMnLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2FybS9zb2Z0ZnAvc2FiaS12MTMuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhYmJhOWMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyODdmNjcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gQVJNIFNvZnQgRlAgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uYXJtLnNvZnRmcCBpbXBvcnQgdGVzdF9maWx0ZXJzIGFzIHBhcmVudF90ZXN0X2ZpbHRlcnMKLQotCi1kZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKLSAgcmV0dXJuIHBhcmVudF90ZXN0X2ZpbHRlcnMuRXZlcmdyZWVuQXJtU29mdEZQVGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1MTUxYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLS8vIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk1fU09GVEZQX1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc4N2Y2MS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgIyBOb3RlIHRoYXQgd2UgYXJlICdpbmNsdWRlcydpbmcgYSAnZ3lwJyBmaWxlLCBub3QgYSAnZ3lwaScgZmlsZS4gIFRoZSBpZGVhCi0gICAgIyBpcyB0aGF0IHdlIGp1c3Qgd2FudCB0aGlzIGZpbGUgdG8gKmJlKiB0aGUgcGFyZW50IGd5cCBmaWxlLgotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KLQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MzkxMTkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLS8vIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTV9TT0ZURlBfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNX1NPRlRGUF9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvdG9vbGNoYWluL0JVSUxELmduIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc29mdGZwL3Rvb2xjaGFpbi9CVUlMRC5nbgppbmRleCBhYzg3OTMzLi4yNjczYWIyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybS9zb2Z0ZnAvdG9vbGNoYWluL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtL3NvZnRmcC90b29sY2hhaW4vQlVJTEQuZ24KQEAgLTE0LDcgKzE0LDcgQEAKIAogaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9jbGFuZy9jbGFuZy5nbmkiKQogaW1wb3J0KCIvL2J1aWxkL3Rvb2xjaGFpbi9nY2NfdG9vbGNoYWluLmduaSIpCi1pbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm0vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC90b29sY2hhaW4vdG9vbGNoYWluLmduaSIpCiAKIGNsYW5nX3Rvb2xjaGFpbigiaG9zdCIpIHsKICAgY2xhbmdfYmFzZV9wYXRoID0gY2xhbmdfYmFzZV9wYXRoCkBAIC0yNiwxNCArMjYsMTYgQEAKIH0KIAogZ2NjX3Rvb2xjaGFpbigidGFyZ2V0IikgewotICBjYyA9IGV2ZXJncmVlbl9hcm1fdGFyZ2V0X2NjCi0gIGN4eCA9IGV2ZXJncmVlbl9hcm1fdGFyZ2V0X2N4eAotICBsZCA9IGV2ZXJncmVlbl9hcm1fdGFyZ2V0X2xkCi0gIGFyID0gZXZlcmdyZWVuX2FybV90YXJnZXRfYXIKLSAgbm0gPSBldmVyZ3JlZW5fYXJtX3RhcmdldF9ubQotICBleHRyYV9sZGZsYWdzID0gZXZlcmdyZWVuX2FybV90YXJnZXRfZXh0cmFfbGRmbGFncworICBjYyA9IGV2ZXJncmVlbl90YXJnZXRfY2MKKyAgY3h4ID0gZXZlcmdyZWVuX3RhcmdldF9jeHgKKyAgbGQgPSBldmVyZ3JlZW5fdGFyZ2V0X2xkCisgIGFyID0gZXZlcmdyZWVuX3RhcmdldF9hcgorICBubSA9IGV2ZXJncmVlbl90YXJnZXRfbm0KKworICBldmVyZ3JlZW5fdGFyZ2V0X2V4dHJhX2xkZmxhZ3MgKz0gWyAiLW0gYXJtZWxmIiBdCisgIGV4dHJhX2xkZmxhZ3MgPSBzdHJpbmdfam9pbigiICIsIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncykKIAogICB0b29sY2hhaW5fYXJncyA9IHsKLSAgICBpc19jbGFuZyA9IGZhbHNlCisgICAgaXNfY2xhbmcgPSB0cnVlCiAgIH0KIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvYXJncy5nbiBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvYXJncy5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTUzOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9hcmdzLmduCkBAIC0wLDAgKzEsMTcgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCit0YXJnZXRfcGxhdGZvcm0gPSAiZXZlcmdyZWVuLWFybTY0IgordGFyZ2V0X2NwdSA9ICJhcm02NCIKK3RhcmdldF9vcyA9ICJsaW51eCIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaAppbmRleCA4YmMyNWVjLi42ZTU3MGVkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCkBAIC0xMzQsMTIgKzEzNCw2IEBACiAvLyByZXF1aXJlZCBmb3IgcGxhdGZvcm1zIHRoYXQgd2FudCB0byBKSVQuCiAjZGVmaW5lIFNCX0NBTl9NQVBfRVhFQ1VUQUJMRV9NRU1PUlkgMQogCi0vLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gaGFzIGFuZCBzaG91bGQgdXNlIGFuIE1NQVAgZnVuY3Rpb24gdG8gbWFwIHBoeXNpY2FsCi0vLyBtZW1vcnkgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0jZGVmaW5lIFNCX0hBU19NTUFQIDEKLSNlbmRpZgotCiAvLyAtLS0gTmV0d29yayBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBzdXBwb3J0cyBJUFY2LgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODg0M2IyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd5YXNtX2V4aXN0cyc6IDEsCi0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdldmVyZ3JlZW4tYXJtNjQnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvYWFyY2g2NCcsCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnIDogWwotICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgU3RhcmJvYXJkaXplZCBfX2V4dGVybmFsX3RocmVhZGluZyBmaWxlIGlzIGluY2x1ZGVkLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfRVhURVJOQUwnLAotICAgICAgIyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQKLSAgICAgICMgaW4gX19leHRlcm5hbF90aHJlYWRpbmcuCi0gICAgICAnX0xJQkNQUF9IQVNfVEhSRUFEX0xJQlJBUllfRVhURVJOQUwnLAotICAgICAgIyBFbmFibGUgR05VIGV4dGVuc2lvbnMgdG8gZ2V0IHByb3RvdHlwZXMgbGlrZSBmZnNsLgotICAgICAgJ19HTlVfU09VUkNFPTEnLAotICAgIF0sCi0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdldmVyZ3JlZW4tYXJtNjRfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdldmVyZ3JlZW4tYXJtNjRfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybTY0X2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm02NF9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtNjRfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggZThiMjgyYS4uMThmMDJjYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw3NCArMTMsMTMgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAiIiJTdGFyYm9hcmQgZXZlcmdyZWVuLWFybTY0IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIGd5cF9jb2JhbHQuIiIiCiAKLWZyb20gc3RhcmJvYXJkLmJ1aWxkIGltcG9ydCBjbGFuZyBhcyBjbGFuZ19idWlsZAogZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLnNoYXJlZCBpbXBvcnQgZ3lwX2NvbmZpZ3VyYXRpb24gYXMgc2hhcmVkX2NvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGV2ZXJncmVlbl9saW5rZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgdG91Y2gKIAogCiBjbGFzcyBFdmVyZ3JlZW5Bcm02NENvbmZpZ3VyYXRpb24oc2hhcmVkX2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQ29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gNjQtYml0IEFSTSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm09J2V2ZXJncmVlbi1hcm02NCcsCi0gICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9kZWZhdWx0L3NhYmkuanNvbicpOgotICAgICMgcHlsaW50OiBkaXNhYmxlPXVzZWxlc3Mtc3VwZXItZGVsZWdhdGlvbgotICAgIHN1cGVyKEV2ZXJncmVlbkFybTY0Q29uZmlndXJhdGlvbiwgc2VsZikuX19pbml0X18ocGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoKQotCi0gIGRlZiBHZXRUYXJnZXRUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIHJldHVybiBzZWxmLkdldEhvc3RUb29sY2hhaW4oKiprd2FyZ3MpCi0KLSAgZGVmIEdldEhvc3RUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaG9zdF90b29sY2hhaW4nKToKLSAgICAgIGVudl92YXJpYWJsZXMgPSBzZWxmLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICAgIGNjX3BhdGggPSBlbnZfdmFyaWFibGVzWydDQ19ob3N0J10KLSAgICAgIGN4eF9wYXRoID0gZW52X3ZhcmlhYmxlc1snQ1hYX2hvc3QnXQotCi0gICAgICAjIFRha2VzIHRoZSBwcm92aWRlZCB2YWx1ZSBvZiBDWFhfSE9TVCB3aXRoIGEgcHJlcGVuZGVkICdjY2FjaGUnIGFuZCBhbgotICAgICAgIyBhcHBlbmRlZCAnYmluL2NsYW5nKysnIGFuZCBzdHJpcHMgdGhlbSBvZmYsIGxlYXZpbmcgdXMgd2l0aCBhbiBhYnNvbHV0ZQotICAgICAgIyBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiBvdXIgdG9vbGNoYWluLgotICAgICAgYmVnaW5fcGF0aF9pbmRleCA9IGN4eF9wYXRoLmZpbmQoJy8nKQotICAgICAgZW5kX3BhdGhfaW5kZXggPSBjeHhfcGF0aC5yZmluZCgnLycsIDAsIGN4eF9wYXRoLnJmaW5kKCcvJykpICsgMQotICAgICAgY3h4X3BhdGhfcm9vdCA9IGN4eF9wYXRoW2JlZ2luX3BhdGhfaW5kZXg6ZW5kX3BhdGhfaW5kZXhdCi0KLSAgICAgIHNlbGYuX2hvc3RfdG9vbGNoYWluID0gWwotICAgICAgICAgIGNsYW5nLkNDb21waWxlcihwYXRoPWNjX3BhdGgpLAotICAgICAgICAgIGNsYW5nLkN4eENvbXBpbGVyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcigpLAotICAgICAgICAgIGFyLlN0YXRpY0xpbmtlcigpLAotICAgICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgICBldmVyZ3JlZW5fbGlua2VyLlNoYXJlZExpYnJhcnlMaW5rZXIoCi0gICAgICAgICAgICAgIHBhdGg9Y3h4X3BhdGhfcm9vdCwgZXh0cmFfZmxhZ3M9WyctbSBhYXJjaDY0ZWxmJ10pLAotICAgICAgICAgIGNwLkNvcHkoKSwKLSAgICAgICAgICB0b3VjaC5TdGFtcCgpLAotICAgICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICAgIF0KLSAgICByZXR1cm4gc2VsZi5faG9zdF90b29sY2hhaW4KLQotICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9dXNlbGVzcy1zdXBlci1kZWxlZ2F0aW9uCi0gICAgcmV0dXJuIHN1cGVyKEV2ZXJncmVlbkFybTY0Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlndXJhdGlvbik6Ci0gICAgdmFyaWFibGVzID0gc3VwZXIoRXZlcmdyZWVuQXJtNjRDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLkdldFZhcmlhYmxlcyhjb25maWd1cmF0aW9uKQotICAgIHZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnaW5jbHVkZV9wYXRoX3BsYXRmb3JtX2RlcGxveV9neXBpJzoKLSAgICAgICAgICAgICdzdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3BsYXRmb3JtX2RlcGxveS5neXBpJywKLSAgICB9KQotICAgIHJldHVybiB2YXJpYWJsZXMKKyAgcGFzcwogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gRXZlcmdyZWVuQXJtNjRDb25maWd1cmF0aW9uKAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2FybTY0L3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBFdmVyZ3JlZW5Bcm02NENvbmZpZ3VyYXRpb24oJ2V2ZXJncmVlbi1hcm02NCcpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L2luc3RhbGxfdGFyZ2V0LmduaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvaW5zdGFsbF90YXJnZXQuZ25pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjUzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L2luc3RhbGxfdGFyZ2V0LmduaQpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0KCIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvdG9vbGNoYWluL3N0cmlwLmduaSIpCitpbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvc3RyaXBfaW5zdGFsbF90YXJnZXQuZ25pIikKKwordGVtcGxhdGUoImluc3RhbGxfdGFyZ2V0IikgeworICBzdHJpcF9pbnN0YWxsX3RhcmdldCh0YXJnZXRfbmFtZSkgeworICAgIGZvcndhcmRfdmFyaWFibGVzX2Zyb20oaW52b2tlciwgIioiKQorICAgIHN0cmlwX2V4ZWN1dGFibGUgPSBzdHJpcF9leGVjdXRhYmxlCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbiBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJkN2U2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitjb25maWcoInNhYmlfZmxhZ3MiKSB7CisgIGNmbGFncyA9IFsKKyAgICAiLW1hcmNoPWFybTY0djhhIiwKKyAgICAiLXRhcmdldCIsCisgICAgImFybTY0djhhLXVua25vd24tdW5rbm93bi1lbGYiLAorCisgICAgIyBjaGFyIGlzIHVuc2lnbmVkIGJ5IGRlZmF1bHQgZm9yIGFybTY0LgorICAgICItZnNpZ25lZC1jaGFyIiwKKyAgXQorfQorCitjb25maWcoInBsYXRmb3JtX2NvbmZpZ3VyYXRpb24iKSB7CisgIGNvbmZpZ3MgPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIgXQorCisgIGlmIChjdXJyZW50X3Rvb2xjaGFpbiA9PSBkZWZhdWx0X3Rvb2xjaGFpbikgeworICAgIGNvbmZpZ3MgKz0gWworICAgICAgIjpzYWJpX2ZsYWdzIiwKKyAgICAgICIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24iLAorICAgIF0KKworICAgIGNmbGFncyA9IFsgIi1pc3lzdGVtIiArCisgICAgICAgICAgICAgICByZWJhc2VfcGF0aCgiLy90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvYWFyY2g2NCIsIHJvb3RfYnVpbGRfZGlyKSBdCisgIH0gZWxzZSB7CisgICAgY2ZsYWdzID0gWyAiLU8yIiBdCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYyNDNjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0wLDAgKzEsMTkgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSIpCisKK3NhYmlfcGF0aCA9ICIvL3N0YXJib2FyZC9zYWJpL2FybTY0L3NhYmktdiRzYl9hcGlfdmVyc2lvbi5qc29uIgorYXJtX3ZlcnNpb24gPSA4CitpbnN0YWxsX3RhcmdldF9wYXRoID0gIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9pbnN0YWxsX3RhcmdldC5nbmkiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3BsYXRmb3JtX2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMyYzc3Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3BsYXRmb3JtX2RlcGxveS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZGVwbG95X2V4ZWN1dGFibGVfZmlsZSc6ICc8KHRhcmdldF9kZXBsb3lfZGlyKS9saWIvbGliPChleGVjdXRhYmxlX25hbWUpLnNvJywKLSAgICAnZXhlY3V0YWJsZV9maWxlJzogJzwoUFJPRFVDVF9ESVIpL2xpYi9saWI8KGV4ZWN1dGFibGVfbmFtZSkuc28nLAotICB9LAotICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29sbGVjdF9kZXBsb3lfY29udGVudC5neXBpJyBdLAotICAnYWN0aW9ucyc6IFsKLSAgICB7Ci0gICAgICAnYWN0aW9uX25hbWUnOiAnZGVwbG95X2V4ZWN1dGFibGUnLAotICAgICAgJ21lc3NhZ2UnOiAnU3RyaXAgZXhlY3V0YWJsZTogPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAnPChleGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgICAgJzwoY29udGVudF9kZXBsb3lfc3RhbXBfZmlsZSknLAotICAgICAgXSwKLSAgICAgICdvdXRwdXRzJzogWyAnPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScgXSwKLSAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICdhYXJjaDY0LWxpbnV4LWdudS1zdHJpcCcsCi0gICAgICAgICctbycsICc8KGRlcGxveV9leGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgICAgJzwoZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDRiN2UuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZjMzZDkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhlIFN0YXJib2FyZCBjb25maWd1cmF0aW9uIGZvciBYODZfNjQuIE90aGVyIGRldmljZXMgd2lsbCBoYXZlCi0vLyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb25zLgotCi0vLyBPdGhlciBzb3VyY2UgZmlsZXMgc2hvdWxkIG5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIgZGlyZWN0bHksIGJ1dCBzaG91bGQKLS8vIGluY2x1ZGUgdGhlIGdlbmVyaWMgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiIGluc3RlYWQuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTTY0X1NCVkVSU0lPTl8xMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0NjBkZTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd5YXNtX2V4aXN0cyc6IDEsCi0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdldmVyZ3JlZW4tYXJtNjQnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvYWFyY2g2NCcsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICMgRW5zdXJlIHRoYXQgdGhlIFN0YXJib2FyZGl6ZWQgX19leHRlcm5hbF90aHJlYWRpbmcgZmlsZSBpcyBpbmNsdWRlZC4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICMgRW5zdXJlIHRoYXQgb25seSB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkCi0gICAgICAjIGluIF9fZXh0ZXJuYWxfdGhyZWFkaW5nLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9MSUJSQVJZX0VYVEVSTkFMJywKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xMl9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi1hcm02NC1zYnZlcnNpb24tMTJfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xMl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtNjQtc2J2ZXJzaW9uLTEyX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm02NC1zYnZlcnNpb24tMTJfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhNDcwOC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIGV2ZXJncmVlbi1hcm02NCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uYXJtNjQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm02NENvbmZpZ3VyYXRpb24oCi0gICAgICAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xMicsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtNjQvc2FiaS12MTIuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI0MzYxZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhY2NmMC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gQVJNNjQgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uYXJtNjQgaW1wb3J0IHRlc3RfZmlsdGVycyBhcyBwYXJlbnRfdGVzdF9maWx0ZXJzCi0KLQotZGVmIENyZWF0ZVRlc3RGaWx0ZXJzKCk6Ci0gIHJldHVybiBwYXJlbnRfdGVzdF9maWx0ZXJzLkV2ZXJncmVlbkFybTY0VGVzdEZpbHRlcnMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlODhiNC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTTY0X1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTTY0X1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2N2Q3YWYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYmQ3MmQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhlIFN0YXJib2FyZCBjb25maWd1cmF0aW9uIGZvciBYODZfNjQuIE90aGVyIGRldmljZXMgd2lsbCBoYXZlCi0vLyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb25zLgotCi0vLyBPdGhlciBzb3VyY2UgZmlsZXMgc2hvdWxkIG5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIgZGlyZWN0bHksIGJ1dCBzaG91bGQKLS8vIGluY2x1ZGUgdGhlIGdlbmVyaWMgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiIGluc3RlYWQuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTTY0X1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ZTcwMDcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd5YXNtX2V4aXN0cyc6IDEsCi0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdldmVyZ3JlZW4tYXJtNjQnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvYWFyY2g2NCcsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICMgRW5zdXJlIHRoYXQgdGhlIFN0YXJib2FyZGl6ZWQgX19leHRlcm5hbF90aHJlYWRpbmcgZmlsZSBpcyBpbmNsdWRlZC4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICMgRW5zdXJlIHRoYXQgb25seSB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkCi0gICAgICAjIGluIF9fZXh0ZXJuYWxfdGhyZWFkaW5nLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9MSUJSQVJZX0VYVEVSTkFMJywKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xM19kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi1hcm02NC1zYnZlcnNpb24tMTNfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xM19kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4tYXJtNjQtc2J2ZXJzaW9uLTEzX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi1hcm02NC1zYnZlcnNpb24tMTNfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjOTZlMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIGV2ZXJncmVlbi1hcm02NCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uYXJtNjQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5Bcm02NENvbmZpZ3VyYXRpb24oCi0gICAgICAnZXZlcmdyZWVuLWFybTY0LXNidmVyc2lvbi0xMycsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvYXJtNjQvc2FiaS12MTMuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlYjI5ZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU4Y2U5YS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gQVJNNjQgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4uYXJtNjQgaW1wb3J0IHRlc3RfZmlsdGVycyBhcyBwYXJlbnRfdGVzdF9maWx0ZXJzCi0KLQotZGVmIENyZWF0ZVRlc3RGaWx0ZXJzKCk6Ci0gIHJldHVybiBwYXJlbnRfdGVzdF9maWx0ZXJzLkV2ZXJncmVlbkFybTY0VGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTNmMjRhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLS8vIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX0FSTTY0X1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhMzNlZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgIyBOb3RlIHRoYXQgd2UgYXJlICdpbmNsdWRlcydpbmcgYSAnZ3lwJyBmaWxlLCBub3QgYSAnZ3lwaScgZmlsZS4gIFRoZSBpZGVhCi0gICAgIyBpcyB0aGF0IHdlIGp1c3Qgd2FudCB0aGlzIGZpbGUgdG8gKmJlKiB0aGUgcGFyZW50IGd5cCBmaWxlLgotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vYXJtNjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNTY1NzkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9BUk02NF9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fQVJNNjRfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90b29sY2hhaW4vQlVJTEQuZ24gYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3Rvb2xjaGFpbi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTcxYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90b29sY2hhaW4vQlVJTEQuZ24KQEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvY2xhbmcvY2xhbmcuZ25pIikKK2ltcG9ydCgiLy9idWlsZC90b29sY2hhaW4vZ2NjX3Rvb2xjaGFpbi5nbmkiKQoraW1wb3J0KCIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pIikKKworY2xhbmdfdG9vbGNoYWluKCJob3N0IikgeworICBjbGFuZ19iYXNlX3BhdGggPSBjbGFuZ19iYXNlX3BhdGgKKworICB0b29sY2hhaW5fYXJncyA9IHsKKyAgICBjdXJyZW50X29zID0gImxpbnV4IgorICAgIGN1cnJlbnRfY3B1ID0gIng2NCIKKyAgfQorfQorCitnY2NfdG9vbGNoYWluKCJ0YXJnZXQiKSB7CisgIGNjID0gZXZlcmdyZWVuX3RhcmdldF9jYworICBjeHggPSBldmVyZ3JlZW5fdGFyZ2V0X2N4eAorICBsZCA9IGV2ZXJncmVlbl90YXJnZXRfbGQKKyAgYXIgPSBldmVyZ3JlZW5fdGFyZ2V0X2FyCisgIG5tID0gZXZlcmdyZWVuX3RhcmdldF9ubQorCisgIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncyArPSBbICItbSBhYXJjaDY0ZWxmIiBdCisgIGV4dHJhX2xkZmxhZ3MgPSBzdHJpbmdfam9pbigiICIsIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncykKKworICB0b29sY2hhaW5fYXJncyA9IHsKKyAgICBpc19jbGFuZyA9IHRydWUKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90b29sY2hhaW4vc3RyaXAuZ25pIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9hcm02NC90b29sY2hhaW4vc3RyaXAuZ25pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTRmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL2FybTY0L3Rvb2xjaGFpbi9zdHJpcC5nbmkKQEAgLTAsMCArMSwxNSBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0cmlwX2V4ZWN1dGFibGUgPSAiYWFyY2g2NC1saW51eC1nbnUtc3RyaXAiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NhYmkvc2FiaV9mbGFncy5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9zYWJpL3NhYmlfZmxhZ3MuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwZWY3Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NhYmkvc2FiaV9mbGFncy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgU3RhcmJvYXJkIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKLSMKLSMgVGhpcyBmaWxlIHRyYW5zbGF0ZXMgdGhlIHNldCBvZiBBQkkgdmFyaWFibGVzLCB3aGljaCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieQotIyBlYWNoIHBsYXRmb3JtLCBpbnRvIHBsYXRmb3JtLXNwZWNpZmljIHNldHMgb2YgY29tcGlsZXIgZmxhZ3MuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICMgYXJtCi0gICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtIicsIHsKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgICAgICctbWFyY2g9YXJtPCh0YXJnZXRfYXJjaF9zdWIpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydmbG9hdGluZ19wb2ludF9hYmk9PSJzb2Z0IicsIHsKLSAgICAgICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAgICAgJy1tZmxvYXQtYWJpPXNvZnQnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctbWZsb2F0LWFiaT08KGZsb2F0aW5nX3BvaW50X2FiaSknLAotICAgICAgICAgICAgICAnLW1mcHU9PChmbG9hdGluZ19wb2ludF9mcHUpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydmbG9hdGluZ19wb2ludF9hYmk9PSJoYXJkIicsIHsKLSAgICAgICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAgICAgJy10YXJnZXQnLCAnYXJtPCh0YXJnZXRfYXJjaF9zdWIpLW5vbmUtZWFiaWhmJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLXRhcmdldCcsICdhcm08KHRhcmdldF9hcmNoX3N1Yiktbm9uZS1lYWJpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgICMgYXJtNjQKLSAgICAgIFsndGFyZ2V0X2FyY2g9PSJhcm02NCInLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAnLW1hcmNoPWFybTY0PCh0YXJnZXRfYXJjaF9zdWIpJywKLSAgICAgICAgICAnLXRhcmdldCcsICdhcm02NDwodGFyZ2V0X2FyY2hfc3ViKS11bmtub3duLXVua25vd24tZWxmJywKLQotICAgICAgICAgICMgVGhlcmUgaXMgbm8gc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBmb3IgYXJtNjQgLyBhYXJjaDY0Ci0gICAgICAgICAgIyBhcmNoaXRlY3R1cmVzLiBUaHVzLCAtbWZsb2F0LWFiaSBhbmQgLW1mcHUgd291bGQgc2ltcGx5IGJlIGlnbm9yZWQuCi0KLSAgICAgICAgICAjIGNoYXIgaXMgdW5zaWduZWQgYnkgZGVmYXVsdCBmb3IgYXJtNjQuCi0gICAgICAgICAgJy1mc2lnbmVkLWNoYXInLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICAjIHg4NgotICAgICAgWyd0YXJnZXRfYXJjaD09Ing4NiInLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAnLW1hcmNoPWk2ODYnLAotICAgICAgICAgICctdGFyZ2V0JywgJ2k2ODYtdW5rbm93bi11bmtub3duLWVsZicsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgICMgeDY0Ci0gICAgICBbJ3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgICAgICctbWFyY2g9eDg2LTY0JywKLSAgICAgICAgICAnLXRhcmdldCcsICd4ODZfNjQtdW5rbm93bi1saW51eC1lbGYnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLX0KLQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zYWJpL3NidmVyc2lvbi8xMi9zYWJpX2ZsYWdzLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NhYmkvc2J2ZXJzaW9uLzEyL3NhYmlfZmxhZ3MuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYwZWY3Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NhYmkvc2J2ZXJzaW9uLzEyL3NhYmlfZmxhZ3MuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFN0YXJib2FyZCBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlCi0jCi0jIFRoaXMgZmlsZSB0cmFuc2xhdGVzIHRoZSBzZXQgb2YgQUJJIHZhcmlhYmxlcywgd2hpY2ggc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkKLSMgZWFjaCBwbGF0Zm9ybSwgaW50byBwbGF0Zm9ybS1zcGVjaWZpYyBzZXRzIG9mIGNvbXBpbGVyIGZsYWdzLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAjIGFybQotICAgICAgWyd0YXJnZXRfYXJjaD09ImFybSInLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAnLW1hcmNoPWFybTwodGFyZ2V0X2FyY2hfc3ViKScsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnZmxvYXRpbmdfcG9pbnRfYWJpPT0ic29mdCInLCB7Ci0gICAgICAgICAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctbWZsb2F0LWFiaT1zb2Z0JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLW1mbG9hdC1hYmk9PChmbG9hdGluZ19wb2ludF9hYmkpJywKLSAgICAgICAgICAgICAgJy1tZnB1PTwoZmxvYXRpbmdfcG9pbnRfZnB1KScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnZmxvYXRpbmdfcG9pbnRfYWJpPT0iaGFyZCInLCB7Ci0gICAgICAgICAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctdGFyZ2V0JywgJ2FybTwodGFyZ2V0X2FyY2hfc3ViKS1ub25lLWVhYmloZicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAgICAgJy10YXJnZXQnLCAnYXJtPCh0YXJnZXRfYXJjaF9zdWIpLW5vbmUtZWFiaScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICAjIGFybTY0Ci0gICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1tYXJjaD1hcm02NDwodGFyZ2V0X2FyY2hfc3ViKScsCi0gICAgICAgICAgJy10YXJnZXQnLCAnYXJtNjQ8KHRhcmdldF9hcmNoX3N1YiktdW5rbm93bi11bmtub3duLWVsZicsCi0KLSAgICAgICAgICAjIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgZm9yIGFybTY0IC8gYWFyY2g2NAotICAgICAgICAgICMgYXJjaGl0ZWN0dXJlcy4gVGh1cywgLW1mbG9hdC1hYmkgYW5kIC1tZnB1IHdvdWxkIHNpbXBseSBiZSBpZ25vcmVkLgotCi0gICAgICAgICAgIyBjaGFyIGlzIHVuc2lnbmVkIGJ5IGRlZmF1bHQgZm9yIGFybTY0LgotICAgICAgICAgICctZnNpZ25lZC1jaGFyJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgIyB4ODYKLSAgICAgIFsndGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1tYXJjaD1pNjg2JywKLSAgICAgICAgICAnLXRhcmdldCcsICdpNjg2LXVua25vd24tdW5rbm93bi1lbGYnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICAjIHg2NAotICAgICAgWyd0YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICAgICAnLW1hcmNoPXg4Ni02NCcsCi0gICAgICAgICAgJy10YXJnZXQnLCAneDg2XzY0LXVua25vd24tbGludXgtZWxmJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi19Ci0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9jb21waWxlcl9mbGFncy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzZlZjRiLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgUGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MgZm9yIEV2ZXJncmVlbi4gSW5jbHVkZWQgZnJvbQotIyBneXBfY29uZmlndXJhdGlvbi5neXBpLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2NvbXBpbGVyX2ZsYWdzX2hvc3QnOiBbCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICctZnJ0dGknLAotICAgICAgJy1PMCcsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19xYV9zaXplJzogWwotICAgICAgJy1PcycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfcWFfc3BlZWQnOiBbCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkX3NpemUnOiBbCi0gICAgICAnLU9zJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkX3NwZWVkJzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAgICdsaW5rZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mdXNlLWxkPWxsZCcsCi0gICAgICAgICAgJy1ub3N0ZGxpYicsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21tb25fY2xhbmdfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mY29sb3ItZGlhZ25vc3RpY3MnLAotICAgICAgICAgICMgRGVmYXVsdCB2aXNpYmlsaXR5IHRvIGhpZGRlbiwgdG8gZW5hYmxlIGRlYWQgc3RyaXBwaW5nLgotICAgICAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKLSAgICAgICAgICAjIFdhcm5zIG9uIHN3aXRjaGVzIG9uIGVudW1zIHRoYXQgY292ZXIgYWxsIGVudW0gdmFsdWVzIGJ1dAotICAgICAgICAgICMgYWxzbyBjb250YWluIGEgZGVmYXVsdDogYnJhbmNoLiBDaHJvbWUgaXMgZnVsbCBvZiB0aGF0LgotICAgICAgICAgICctV25vLWNvdmVyZWQtc3dpdGNoLWRlZmF1bHQnLAotICAgICAgICAgICMgcHJvdG9idWYgdXNlcyBoYXNoX21hcC4KLSAgICAgICAgICAnLVduby1kZXByZWNhdGVkJywKLSAgICAgICAgICAnLWZuby1leGNlcHRpb25zJywKLSAgICAgICAgICAjIEVuYWJsZSB1bndpbmQgdGFibGVzIHVzZWQgYnkgbGlidW53aW5kIGZvciBzdGFjayB0cmFjZXMuCi0gICAgICAgICAgJy1mdW53aW5kLXRhYmxlcycsCi0gICAgICAgICAgIyBEaXNhYmxlIHVzYWdlIG9mIGZyYW1lIHBvaW50ZXJzLgotICAgICAgICAgICctZm9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KLSAgICAgICAgICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycycsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBmb3IgaW1wbGljaXQgc2lnbiBjb252ZXJzaW9ucy4KLSAgICAgICAgICAnLVduby1zaWduLWNvbnZlcnNpb24nLAotICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZycsICAjIFNlZSBodHRwOi8vY3JidWcuY29tLzMyMjA0Ci0gICAgICAgICAgJy1Xbm8tdW5uYW1lZC10eXBlLXRlbXBsYXRlLWFyZ3MnLAotICAgICAgICAgICMgVHJpZ2dlcmVkIGJ5IHRoZSBDT01QSUxFX0FTU0VSVCBtYWNyby4KLSAgICAgICAgICAnLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZicsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBpZiBhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGNhbm5vdCBiZSBpbXBsaWNpdGx5Ci0gICAgICAgICAgIyBpbnN0YW50aWF0ZWQuCi0gICAgICAgICAgJy1Xbm8tdW5kZWZpbmVkLXZhci10ZW1wbGF0ZScsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBhYm91dCBhbiBpbXBsaWNpdCBleGNlcHRpb24gc3BlYyBtaXNtYXRjaC4KLSAgICAgICAgICAnLVduby1pbXBsaWNpdC1leGNlcHRpb24tc3BlYy1taXNtYXRjaCcsCi0gICAgICAgICAgIyBJdCdzIE9LIG5vdCB0byB1c2Ugc29tZSBpbnB1dCBwYXJhbWV0ZXJzLgotICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICctV25vLWNvbnZlcnNpb24nLAotICAgICAgICAgICctV25vLWJpdHdpc2Utb3AtcGFyZW50aGVzZXMnLAotICAgICAgICAgICctV25vLXNoaWZ0LW9wLXBhcmVudGhlc2VzJywKLSAgICAgICAgICAnLVduby1zaG9ydGVuLTY0LXRvLTMyJywKLSAgICAgICAgICAnLWZuby11c2UtY3hhLWF0ZXhpdCcsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsnY29iYWx0X2Zhc3RidWlsZD09MCcsIHsKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2RlYnVnJzogWwotICAgICAgICAgICctZycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19kZXZlbCc6IFsKLSAgICAgICAgICAnLWcnLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfcWEnOiBbCi0gICAgICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19nb2xkJzogWwotICAgICAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJzogWwotICAgICAgIyBCeSBkZWZhdWx0LCA8RUdML2VnbHBsYXRmb3JtLmg+IHB1bGxzIGluIHNvbWUgWDExIGhlYWRlcnMgdGhhdCBoYXZlIHNvbWUKLSAgICAgICMgbmFzdHkgbWFjcm9zICh8U3RhdHVzfCwgZm9yIGV4YW1wbGUpIHRoYXQgY29uZmxpY3Qgd2l0aCBDaHJvbWl1bSBiYXNlLgotICAgICAgJ01FU0FfRUdMX05PX1gxMV9IRUFERVJTJwotICAgIF0sCi0gICAgJ2NmbGFncyc6IFsKLSAgICAgICctZlBJQycsCi0gICAgICAnLW5vc3RkbGliaW5jJywKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eGFiaS9pbmNsdWRlJywKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYnVud2luZC9pbmNsdWRlJywKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eC9pbmNsdWRlJywKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbXVzbC9pbmNsdWRlJywKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbXVzbC9hcmNoL2dlbmVyaWMnLAotICAgIF0sCi0gICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICctbm9zdGRpbmMrKycsCi0gICAgICAnLXN0ZD1jKysxNCcsCi0gICAgXSwKLSAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ3NiX3BlZGFudGljX3dhcm5pbmdzPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctV2FsbCcsCi0gICAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAgICctV3VucmVhY2hhYmxlLWNvZGUnLAotICAgICAgICAgICc8QChjb21tb25fY2xhbmdfZmxhZ3MpJywKLSAgICAgICAgXSwKLSAgICAgIH0sewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICc8QChjb21tb25fY2xhbmdfZmxhZ3MpJywKLSAgICAgICAgICAjICd0aGlzJyBwb2ludGVyIGNhbm5vdCBiZSBOVUxMLi4ucG9pbnRlciBtYXkgYmUgYXNzdW1lZAotICAgICAgICAgICMgdG8gYWx3YXlzIGNvbnZlcnQgdG8gdHJ1ZS4KLSAgICAgICAgICAnLVduby11bmRlZmluZWQtYm9vbC1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIFNraWEgZG9lc24ndCB1c2Ugb3ZlcnJpZGVzLgotICAgICAgICAgICctV25vLWluY29uc2lzdGVudC1taXNzaW5nLW92ZXJyaWRlJywKLSAgICAgICAgICAjIERvIG5vdCB3YXJuIGZvciBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSBhIHZhbHVlLgotICAgICAgICAgICctV25vLWNvbnZlcnNpb24nLAotICAgICAgICAgICMgc2hpZnRpbmcgYSBuZWdhdGl2ZSBzaWduZWQgdmFsdWUgaXMgdW5kZWZpbmVkCi0gICAgICAgICAgJy1Xbm8tc2hpZnQtbmVnYXRpdmUtdmFsdWUnLAotICAgICAgICAgICMgV2lkdGggb2YgYml0LWZpZWxkIGV4Y2VlZHMgd2lkdGggb2YgaXRzIHR5cGUtIHZhbHVlIHdpbGwgYmUgdHJ1bmNhdGVkCi0gICAgICAgICAgJy1Xbm8tYml0ZmllbGQtd2lkdGgnLAotICAgICAgICAgICctV25vLXVuZGVmaW5lZC12YXItdGVtcGxhdGUnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ3VzZV9hc2FuPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgICctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgICMgRm9yY2UgbGlua2luZyBvZiB0aGUgaGVscGVycyBpbiBzYW5pdGl6ZXJfb3B0aW9ucy5jYwotICAgICAgICAgICctV2wsLXVfc2FuaXRpemVyX29wdGlvbnNfbGlua19oZWxwZXInLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnQUREUkVTU19TQU5JVElaRVInLAotICAgICAgICBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ2FzYW5fc3ltYm9saXplcl9wYXRoIT0iIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQVNBTl9TWU1CT0xJWkVSX1BBVEg9IjxAKGFzYW5fc3ltYm9saXplcl9wYXRoKSInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWyd1c2VfdHNhbj09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT10aHJlYWQnLAotICAgICAgICAgICctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPXRocmVhZCcsCi0gICAgICAgIF0sCi0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdUSFJFQURfU0FOSVRJWkVSJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sICMgZW5kIG9mIHRhcmdldF9kZWZhdWx0cwotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOGZiZWQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdzYl9ldmVyZ3JlZW4nOiAxLAotICAgICdzYl9zcGVlY2hfc3VwcG9ydGVkJzogMCwKLQotICAgICdlbmFibGVfdnInOiAwLAotICAgICdkZWZhdWx0X3JlbmRlcmVyX29wdGlvbnNfZGVwZW5kZW5jeSc6ICc8KERFUFRIKS9jb2JhbHQvcmVuZGVyZXIvZGVmYXVsdF9vcHRpb25zX3N0YXJib2FyZC5neXA6ZGVmYXVsdF9vcHRpb25zJywKLQotICAgICdjb2JhbHRfZm9udF9wYWNrYWdlJzogJ2VtcHR5JywKLQotICAgICMgT3ZlcnJpZGUgdGhhdCBvbWl0cyB0aGUgImRhdGEiIHN1YmRpcmVjdG9yeS4KLSAgICAjIFRPRE86IFJlbW92ZSB3aGVuIG9taXR0ZWQgZm9yIGFsbCBwbGF0Zm9ybXMgaW4gYmFzZV9jb25maWd1cmF0aW9uLmd5cGkuCi0gICAgJ3NiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXInOiAnPChQUk9EVUNUX0RJUikvY29udGVudCcsCi0KLSAgICAnZmluYWxfZXhlY3V0YWJsZV90eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAnZ3Rlc3RfdGFyZ2V0X3R5cGUnOiAnc2hhcmVkX2xpYnJhcnknLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICdfTElCQ1BQX0hBU19NVVNMX0xJQkMnLAotICAgICAgJ19fU1REQ19GT1JNQVRfTUFDUk9TJywgIyBzbyB0aGF0IHdlIGdldCBQUkkqCi0KLSAgICAgICMgRmlsZSBmb3JtYXQgb2YgdGhlIHNoYXJlZCBvYmplY3Qgd2Ugd2lsbCBnZW5lcmF0ZS4KLSAgICAgICdfX0VMRl9fJywKLQotICAgICAgIyBVc2Ugc2NhbGFyIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBpbnN0ZWFkIG9mIENsYW5nL0dDQyB2ZWN0b3IKLSAgICAgICMgZXh0ZW5zaW9ucyBpbiBTa1Z4LmguCi0gICAgICAnU0tOWF9OT19TSU1EJywKLSAgICBdLAotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2FiaS9zYWJpX2ZsYWdzLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCA0ZDkyZWZlLi4wY2M1MWE2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMTUsODggKzE1LDE2IEBACiAKIGltcG9ydCBvcwogCi1mcm9tIHN0YXJib2FyZC5idWlsZCBpbXBvcnQgY2xhbmcKIGZyb20gc3RhcmJvYXJkLmJ1aWxkIGltcG9ydCBwbGF0Zm9ybV9jb25maWd1cmF0aW9uCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYnVpbGQKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKIAogCiBjbGFzcyBFdmVyZ3JlZW5Db25maWd1cmF0aW9uKHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24uUGxhdGZvcm1Db25maWd1cmF0aW9uKToKICAgIiIiU3RhcmJvYXJkIEV2ZXJncmVlbiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgogCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm0sCi0gICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdD1UcnVlLAotICAgICAgICAgICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2RlZmF1bHQvc2FiaS5qc29uJyk6Ci0gICAgc3VwZXIoRXZlcmdyZWVuQ29uZmlndXJhdGlvbiwgc2VsZikuX19pbml0X18ocGxhdGZvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQpCi0KLSAgICBzZWxmLnNhYmlfanNvbl9wYXRoID0gc2FiaV9qc29uX3BhdGgKLQotICBkZWYgR2V0QnVpbGRGb3JtYXQoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGVzaXJlZCBidWlsZCBmb3JtYXQuIiIiCi0gICAgIyBUaGUgY29tbWEgbWVhbnMgdGhhdCBuaW5qYSBhbmQgcXRjcmVhdG9yX25pbmphIHdpbGwgYmUgY2hhaW5lZCBhbmQgdXNlIHRoZQotICAgICMgc2FtZSBpbnB1dCBpbmZvcm1hdGlvbiBzbyB0aGF0IC5neXAgZmlsZXMgd2lsbCBvbmx5IGhhdmUgdG8gYmUgcGFyc2VkCi0gICAgIyBvbmNlLgotICAgIHJldHVybiAnbmluamEscXRjcmVhdG9yX25pbmphJwotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlnX25hbWUpOgotICAgIHZhcmlhYmxlcyA9IHN1cGVyKEV2ZXJncmVlbkNvbmZpZ3VyYXRpb24sIHNlbGYpLkdldFZhcmlhYmxlcygKLSAgICAgICAgY29uZmlnX25hbWUsIHVzZV9jbGFuZz0xKQotICAgIHZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnY29iYWx0X3JlcG9fcm9vdCc6Ci0gICAgICAgICAgICBwYXRocy5SRVBPU0lUT1JZX1JPT1QsCi0gICAgICAgICdpbmNsdWRlX3BhdGhfcGxhdGZvcm1fZGVwbG95X2d5cGknOgotICAgICAgICAgICAgJ3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpJywKLSAgICB9KQotICAgIHJldHVybiB2YXJpYWJsZXMKLQogICBkZWYgR2V0TGF1bmNoZXJQYXRoKHNlbGYpOgogICAgICIiIkdldHMgdGhlIHBhdGggdG8gdGhlIGxhdW5jaGVyIG1vZHVsZSBmb3IgdGhpcyBwbGF0Zm9ybS4iIiIKICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogCi0gIGRlZiBHZXRHZW5lcmF0b3JWYXJpYWJsZXMoc2VsZiwgY29uZmlnX25hbWUpOgotICAgIGRlbCBjb25maWdfbmFtZQotICAgIGdlbmVyYXRvcl92YXJpYWJsZXMgPSB7Ci0gICAgICAgICdxdGNyZWF0b3Jfc2Vzc2lvbl9uYW1lX3ByZWZpeCc6ICdjb2JhbHQnLAotICAgIH0KLSAgICByZXR1cm4gZ2VuZXJhdG9yX3ZhcmlhYmxlcwotCi0gIGRlZiBHZXRFbnZpcm9ubWVudFZhcmlhYmxlcyhzZWxmKToKLSAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX2hvc3RfY29tcGlsZXJfZW52aXJvbm1lbnQnKToKLSAgICAgIHNlbGYuX2hvc3RfY29tcGlsZXJfZW52aXJvbm1lbnQgPSBidWlsZC5HZXRIb3N0Q29tcGlsZXJFbnZpcm9ubWVudCgKLSAgICAgICAgICBjbGFuZy5HZXRDbGFuZ1NwZWNpZmljYXRpb24oKSwgc2VsZi5idWlsZF9hY2NlbGVyYXRvcikKLQotICAgIGVudl92YXJpYWJsZXMgPSBzZWxmLl9ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Ci0gICAgZW52X3ZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnQ0MnOiBzZWxmLl9ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50WydDQ19ob3N0J10sCi0gICAgICAgICdDWFgnOiBzZWxmLl9ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50WydDWFhfaG9zdCddLAotICAgIH0pCi0gICAgcmV0dXJuIGVudl92YXJpYWJsZXMKLQotICBkZWYgR2V0UGF0aFRvU2FiaUpzb25GaWxlKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnNhYmlfanNvbl9wYXRoCi0KLSAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgotICAgIGZpbHRlcnMgPSBzdXBlcihFdmVyZ3JlZW5Db25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgotICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQotICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQotICAgICAgJ25wbGInOiBbJ01lbW9yeVJlcG9ydGluZ1Rlc3QuQ2FwdHVyZXNPcGVyYXRvckRlbGV0ZU5vdGhyb3cnLAotICAgICAgICAgICAgICAgJ1NiQXVkaW9TaW5rVGVzdC4qJywKLSAgICAgICAgICAgICAgICdTYkRybVRlc3QuQW55U3VwcG9ydGVkS2V5U3lzdGVtcyddLAotCi0gICAgICAjIHBsYXllcl9maWx0ZXJfdGVzdHMgdGVzdCB0aGUgcGxhdGZvcm0ncyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICMgdGhlIGZpbHRlci1iYXNlZCBwbGF5ZXIsIHdoaWNoIGlzIG5vdCBleHBvc2VkIHRocm91Z2ggdGhlIFN0YXJib2FyZAotICAgICAgIyBpbnRlcmZhY2UuIFNpbmNlIEV2ZXJncmVlbiBoYXMgbm8gdmlzaWJpbGl0eSBvZiB0aGUgcGxhdGZvcm0ncwotICAgICAgIyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24sIHJlbHkgb24gdGhlIHBsYXRmb3JtIHRvIHRlc3QgdGhpcwotICAgICAgIyBkaXJlY3RseSBpbnN0ZWFkLgotICAgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnOiBbdGVzdF9maWx0ZXIuRklMVEVSX0FMTF0sCi0gIH0KLQogICBkZWYgR2V0VGVzdFRhcmdldHMoc2VsZik6CiAgICAgdGVzdHMgPSBzdXBlcihFdmVyZ3JlZW5Db25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0VGFyZ2V0cygpCiAgICAgdGVzdHMuYXBwZW5kKCdjb2JhbHRfc2xvdF9tYW5hZ2VtZW50X3Rlc3QnKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvbGF1bmNoZXIucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9sYXVuY2hlci5weQppbmRleCA3ZTYyMWEyLi5jOGJmMmQ1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9sYXVuY2hlci5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9sYXVuY2hlci5weQpAQCAtMTcsNyArMTcsNiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYWJzdHJhY3RfbGF1bmNoZXIKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBvcnRfc3ltbGluawpAQCAtMTYzLDExICsxNjIsMTUgQEAKICAgICBvcy5tYWtlZGlycyhzZWxmLnN0YWdpbmdfZGlyZWN0b3J5KQogCiAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYubG9hZGVyX291dF9kaXJlY3RvcnksICdpbnN0YWxsJykpOgotICAgICAgc2VsZi5fU3RhZ2VUYXJnZXRzQW5kQ29udGVudHNHbigpCisgICAgICAjIFRPRE86IE1ha2UgdGhlIExpbnV4IGxhdW5jaGVyIHJ1biBmcm9tIHRoZSBpbnN0YWxsX2RpcmVjdG9yeQorICAgICAgaWYgJ2xpbnV4JyBpbiBzZWxmLmxvYWRlcl9wbGF0Zm9ybToKKyAgICAgICAgc2VsZi5fU3RhZ2VUYXJnZXRzQW5kQ29udGVudHNHbkxpbnV4KCkKKyAgICAgIGVsc2U6CisgICAgICAgIHNlbGYuX1N0YWdlVGFyZ2V0c0FuZENvbnRlbnRzR25SYXNwaSgpCiAgICAgZWxzZToKICAgICAgIHNlbGYuX1N0YWdlVGFyZ2V0c0FuZENvbnRlbnRzR3lwKCkKIAotICBkZWYgX1N0YWdlVGFyZ2V0c0FuZENvbnRlbnRzR24oc2VsZik6CisgIGRlZiBfU3RhZ2VUYXJnZXRzQW5kQ29udGVudHNHbkxpbnV4KHNlbGYpOgogICAgIGNvbnRlbnRfc3ViZGlyID0gb3MucGF0aC5qb2luKCd1c3InLCAnc2hhcmUnLCAnY29iYWx0JykKIAogICAgICMgQ29weSBsb2FkZXIgY29udGVudCBhbmQgYmluYXJpZXMKQEAgLTIwMiw2ICsyMDUsNTggQEAKICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGFyZ2V0X3N0YWdpbmdfZGlyLCAnbGliJykpCiAgICAgc2h1dGlsLmNvcHkodGFyZ2V0X2JpbmFyeV9zcmMsIHRhcmdldF9iaW5hcnlfZHN0KQogCisgIGRlZiBfU3RhZ2VUYXJnZXRzQW5kQ29udGVudHNHblJhc3BpKHNlbGYpOgorICAgICMgVE9ETyhiLzIxODg4OTMxMyk6IGBjb250ZW50YCBpcyBoYXJkY29kZWQgb24gcmFzcGkgYW5kIG11c3QgYmUgaW4gdGhlIHNhbWUKKyAgICAjIGRpcmVjdG9yeSBhcyB0aGUgYmluYXJpZXMuCisgICAgaWYgJ3Jhc3BpJyBpbiBzZWxmLmxvYWRlcl9wbGF0Zm9ybToKKyAgICAgIGNvbnRlbnRfc3ViZGlyID0gJ2NvbnRlbnQnCisgICAgICBiaW5fc3ViZGlyID0gJycKKyAgICBlbHNlOgorICAgICAgY29udGVudF9zdWJkaXIgPSBvcy5wYXRoLmpvaW4oJ3VzcicsICdzaGFyZScsICdjb2JhbHQnKQorICAgICAgYmluX3N1YmRpciA9ICdiaW4nCisKKyAgICAjIENvcHkgbG9hZGVyIGNvbnRlbnQgYW5kIGJpbmFyaWVzIHRvCisgICAgbG9hZGVyX2luc3RhbGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmxvYWRlcl9vdXRfZGlyZWN0b3J5LCAnaW5zdGFsbCcpCisgICAgIyByYXNwaSBpcyBhIHBhY2thZ2VkIHBsYXRmb3JtIGFuZCB0aGUgbG9hZGVyIHRhcmdldCBpcyB0aGUgc3RhZ2luZyB0YXJnZXQuCisgICAgc3RhZ2luZ19kaXJlY3RvcnlfbG9hZGVyID0gb3MucGF0aC5qb2luKHNlbGYuc3RhZ2luZ19kaXJlY3RvcnksICdpbnN0YWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXJfdGFyZ2V0KQorCisgICAgbG9hZGVyX2NvbnRlbnRfc3JjID0gb3MucGF0aC5qb2luKGxvYWRlcl9pbnN0YWxsX3BhdGgsIGNvbnRlbnRfc3ViZGlyKQorICAgIGxvYWRlcl9jb250ZW50X2RzdCA9IG9zLnBhdGguam9pbihzdGFnaW5nX2RpcmVjdG9yeV9sb2FkZXIsICdjb250ZW50JykKKyAgICBzaHV0aWwuY29weXRyZWUobG9hZGVyX2NvbnRlbnRfc3JjLCBsb2FkZXJfY29udGVudF9kc3QpCisKKyAgICBsb2FkZXJfYmluYXJ5X3NyYyA9IG9zLnBhdGguam9pbihsb2FkZXJfaW5zdGFsbF9wYXRoLCBiaW5fc3ViZGlyKQorICAgIGxvYWRlcl90YXJnZXRfc3JjID0gb3MucGF0aC5qb2luKGxvYWRlcl9iaW5hcnlfc3JjLCBzZWxmLmxvYWRlcl90YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZXJfdGFyZ2V0KQorICAgIGxvYWRlcl90YXJnZXRfZHN0ID0gb3MucGF0aC5qb2luKHN0YWdpbmdfZGlyZWN0b3J5X2xvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlcl90YXJnZXQpCisgICAgc2h1dGlsLmNvcHkobG9hZGVyX3RhcmdldF9zcmMsIGxvYWRlcl90YXJnZXRfZHN0KQorCisgICAgY3Jhc2hwYWRfdGFyZ2V0X3NyYyA9IG9zLnBhdGguam9pbihsb2FkZXJfYmluYXJ5X3NyYywgX0NSQVNIUEFEX1RBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DUkFTSFBBRF9UQVJHRVQpCisgICAgY3Jhc2hwYWRfdGFyZ2V0X2RzdCA9IG9zLnBhdGguam9pbihzdGFnaW5nX2RpcmVjdG9yeV9sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ1JBU0hQQURfVEFSR0VUKQorICAgIG9zLm1ha2VkaXJzKGNyYXNocGFkX3RhcmdldF9kc3QpCisgICAgc2h1dGlsLmNvcHkoY3Jhc2hwYWRfdGFyZ2V0X3NyYywgY3Jhc2hwYWRfdGFyZ2V0X2RzdCkKKworICAgICMgQ29weSB0YXJnZXQgY29udGVudCBhbmQgYmluYXJ5CisgICAgdGFyZ2V0X2luc3RhbGxfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLm91dF9kaXJlY3RvcnksICdpbnN0YWxsJykKKyAgICB0YXJnZXRfc3RhZ2luZ19kaXIgPSBvcy5wYXRoLmpvaW4oc3RhZ2luZ19kaXJlY3RvcnlfbG9hZGVyLCAnY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHAnLCBzZWxmLnRhcmdldF9uYW1lKQorICAgIG9zLm1ha2VkaXJzKHRhcmdldF9zdGFnaW5nX2RpcikKKworICAgICMgVE9ETyhiLzIxODg4OTMxMyk6IFJlc2V0IHRoZSBjb250ZW50IHBhdGggZm9yIHRoZSBldmVyZ3JlZW4gYXJ0aWZhY3RzLgorICAgIGNvbnRlbnRfc3ViZGlyID0gb3MucGF0aC5qb2luKCd1c3InLCAnc2hhcmUnLCAnY29iYWx0JykKKyAgICB0YXJnZXRfY29udGVudF9zcmMgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2luc3RhbGxfcGF0aCwgY29udGVudF9zdWJkaXIpCisgICAgdGFyZ2V0X2NvbnRlbnRfZHN0ID0gb3MucGF0aC5qb2luKHRhcmdldF9zdGFnaW5nX2RpciwgJ2NvbnRlbnQnKQorICAgIHNodXRpbC5jb3B5dHJlZSh0YXJnZXRfY29udGVudF9zcmMsIHRhcmdldF9jb250ZW50X2RzdCkKKworICAgIHNobGliX25hbWUgPSAnbGlie30uc28nLmZvcm1hdChzZWxmLnRhcmdldF9uYW1lKQorICAgIHRhcmdldF9iaW5hcnlfc3JjID0gb3MucGF0aC5qb2luKHRhcmdldF9pbnN0YWxsX3BhdGgsICdsaWInLCBzaGxpYl9uYW1lKQorICAgIHRhcmdldF9iaW5hcnlfZHN0ID0gb3MucGF0aC5qb2luKHRhcmdldF9zdGFnaW5nX2RpciwgJ2xpYicsIHNobGliX25hbWUpCisgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKHRhcmdldF9zdGFnaW5nX2RpciwgJ2xpYicpKQorICAgIHNodXRpbC5jb3B5KHRhcmdldF9iaW5hcnlfc3JjLCB0YXJnZXRfYmluYXJ5X2RzdCkKKwogICBkZWYgX1N0YWdlVGFyZ2V0c0FuZENvbnRlbnRzR3lwKHNlbGYpOgogICAgICMgPG91dHBhdGg+L2RlcGxveS9lbGZfbG9hZGVyX3NhbmRib3gKICAgICBzdGFnaW5nX2RpcmVjdG9yeV9sb2FkZXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zdGFnaW5nX2RpcmVjdG9yeSwgJ2RlcGxveScsCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWEzZDI5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZGVwbG95X2V4ZWN1dGFibGVfZmlsZSc6ICc8KHRhcmdldF9kZXBsb3lfZGlyKS9saWIvbGliPChleGVjdXRhYmxlX25hbWUpLnNvJywKLSAgICAnZXhlY3V0YWJsZV9maWxlJzogJzwoUFJPRFVDVF9ESVIpL2xpYi9saWI8KGV4ZWN1dGFibGVfbmFtZSkuc28nLAotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGknLAotICBdLAotICAnYWN0aW9ucyc6IFsKLSAgICB7Ci0gICAgICAnYWN0aW9uX25hbWUnOiAnZGVwbG95X2V4ZWN1dGFibGUnLAotICAgICAgJ21lc3NhZ2UnOiAnRGVwbG95IDwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwoY29udGVudF9kZXBsb3lfc3RhbXBfZmlsZSknLAotICAgICAgICAnPChleGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsgJzwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvdG9vbHMvcG9ydF9zeW1saW5rLnB5JywKLSAgICAgICAgJy1mJywKLSAgICAgICAgJy1yJywKLSAgICAgICAgJy0tbGluaycsCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgICAnPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI2YTE0My4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIGlzIGludGVudGlvbmFsbHkgbGVmdCBlbXB0eS4gRWFjaCBwbGF0Zm9ybSBkaXJlY3RvcnkgbXVzdCBoYXZlIGEKLSMgc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBmaWxlIHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBwbGF0Zm9ybSwgYnV0IEV2ZXJncmVlbgotIyBwbGF0Zm9ybXMgYXJlbid0IHR5cGljYWwgcGxhdGZvcm1zIGFuZCBzaW1wbHkgcHJvdmlkZSBhIFN0YXJib2FyZCBpbnRlcmZhY2UsCi0jIHJhdGhlciB0aGFuIGZ1bGwgaW1wbGVtZW50YXRpb24sIGZvciBDb2JhbHQuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkKaW5kZXggYzVhNjU5Mi4uYjE1OTUyNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvdGVzdF9maWx0ZXJzLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3Rlc3RfZmlsdGVycy5weQpAQCAtMTUsMjYgKzE1LDI2IEBACiAKIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAnbnBsYic6IFsKKyAgICAgICAgJ01lbW9yeVJlcG9ydGluZ1Rlc3QuQ2FwdHVyZXNPcGVyYXRvckRlbGV0ZU5vdGhyb3cnLAorICAgICAgICAnU2JBdWRpb1NpbmtUZXN0LionLCAnU2JEcm1UZXN0LkFueVN1cHBvcnRlZEtleVN5c3RlbXMnCisgICAgXSwKKworICAgICMgcGxheWVyX2ZpbHRlcl90ZXN0cyB0ZXN0IHRoZSBwbGF0Zm9ybSdzIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICMgdGhlIGZpbHRlci1iYXNlZCBwbGF5ZXIsIHdoaWNoIGlzIG5vdCBleHBvc2VkIHRocm91Z2ggdGhlIFN0YXJib2FyZAorICAgICMgaW50ZXJmYWNlLiBTaW5jZSBFdmVyZ3JlZW4gaGFzIG5vIHZpc2liaWxpdHkgb2YgdGhlIHBsYXRmb3JtJ3MKKyAgICAjIHNwZWNpZmljIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiwgcmVseSBvbiB0aGUgcGxhdGZvcm0gdG8gdGVzdCB0aGlzCisgICAgIyBkaXJlY3RseSBpbnN0ZWFkLgorICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogW3Rlc3RfZmlsdGVyLkZJTFRFUl9BTExdLAorfQorCiAKIGNsYXNzIFRlc3RGaWx0ZXJzKG9iamVjdCk6CiAgICIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gcGxhdGZvcm0gdGVzdCBmaWx0ZXJzLiIiIgogCiAgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKICAgICBmaWx0ZXJzID0gW10KLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9GSUxURVJFRF9URVNUUy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBfRklMVEVSRURfVEVTVFMuaXRlbXMoKToKICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKICAgICByZXR1cm4gZmlsdGVycwotCi0gIF9GSUxURVJFRF9URVNUUyA9IHsKLSAgICAgICducGxiJzogWwotICAgICAgICAgICdNZW1vcnlSZXBvcnRpbmdUZXN0LkNhcHR1cmVzT3BlcmF0b3JEZWxldGVOb3Rocm93JywKLSAgICAgICAgICAnU2JBdWRpb1NpbmtUZXN0LionLCAnU2JEcm1UZXN0LkFueVN1cHBvcnRlZEtleVN5c3RlbXMnCi0gICAgICBdLAotCi0gICAgICAjIHBsYXllcl9maWx0ZXJfdGVzdHMgdGVzdCB0aGUgcGxhdGZvcm0ncyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICMgdGhlIGZpbHRlci1iYXNlZCBwbGF5ZXIsIHdoaWNoIGlzIG5vdCBleHBvc2VkIHRocm91Z2ggdGhlIFN0YXJib2FyZAotICAgICAgIyBpbnRlcmZhY2UuIFNpbmNlIEV2ZXJncmVlbiBoYXMgbm8gdmlzaWJpbGl0eSBvZiB0aGUgcGxhdGZvcm0ncwotICAgICAgIyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb24sIHJlbHkgb24gdGhlIHBsYXRmb3JtIHRvIHRlc3QgdGhpcwotICAgICAgIyBkaXJlY3RseSBpbnN0ZWFkLgotICAgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnOiBbdGVzdF9maWx0ZXIuRklMVEVSX0FMTF0sCi0gIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvdG9vbGNoYWluL3Rvb2xjaGFpbi5nbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1MmE4NwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3Rvb2xjaGFpbi90b29sY2hhaW4uZ25pCkBAIC0wLDAgKzEsNDEgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL2NsYW5nL2NsYW5nLmduaSIpCisKK3ByZWZpeCA9IHJlYmFzZV9wYXRoKCIkY2xhbmdfYmFzZV9wYXRoL2JpbiIsIHJvb3RfYnVpbGRfZGlyKQorZXZlcmdyZWVuX3RhcmdldF9jYyA9ICIkcHJlZml4L2NsYW5nIgorZXZlcmdyZWVuX3RhcmdldF9jeHggPSAiJHByZWZpeC9jbGFuZysrIgorZXZlcmdyZWVuX3RhcmdldF9sZCA9ICIkcHJlZml4L2xkLmxsZCIKK2V2ZXJncmVlbl90YXJnZXRfYXIgPSAiJHtwcmVmaXh9L2xsdm0tYXIiCitldmVyZ3JlZW5fdGFyZ2V0X25tID0gIm5tIgorCisjIFRPRE8oYi8yMDY2NDI5OTQpOiBzZWUgaWYgYW55IG9mIHRoZXNlIGZsYWdzLCBtaWdyYXRlZCBmcm9tCisjIHN0YXJib2FyZC90b29scy90b29sY2hhaW4vZXZlcmdyZWVuX2xpbmtlci5weSwgY2FuIGJlIHJlbW92ZWQuCitldmVyZ3JlZW5fdGFyZ2V0X2V4dHJhX2xkZmxhZ3MgPSBbCisgICItLWJ1aWxkLWlkIiwKKyAgIi0tZ2Mtc2VjdGlvbnMiLAorICAiLVgiLAorICAiLXYiLAorICAiLWVoLWZyYW1lLWhkciIsCisgICItLWZpbmk9X19jeGFfZmluYWxpemUiLAorICAiLXNoYXJlZCIsCisgICItTCRjbGFuZ19iYXNlX3BhdGgiLAorICAiLUwvdXNyL2xpYiIsCisgICItTC9saWIiLAorICAiLW5vc3RkbGliIiwKKyAgIi0td2hvbGUtYXJjaGl2ZSIsCisgICItLW5vLXdob2xlLWFyY2hpdmUiLAorICAiLXUgR2V0RXZlcmdyZWVuU2FiaVN0cmluZyIsCitdCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvbGludXgvZGVwbG95X2NvYmFsdC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9saW51eC9kZXBsb3lfY29iYWx0LnNoCmluZGV4IDI4YTVkYjYuLjZkYzZlNTkgMTAwNzU1Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9saW51eC9kZXBsb3lfY29iYWx0LnNoCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9saW51eC9kZXBsb3lfY29iYWx0LnNoCkBAIC0yMCwxMSArMjAsMjAgQEAKICAgICBleGl0IDEKICAgZmkKIAotICBlY2hvICIgQ2hlY2tpbmcgJyR7T1VUfSciCisgIGRlY2xhcmUgc3RhZ2luZ19kaXI9IiIKKyAgaWYgW1sgLWUgIiR7T1VUfS9kZXBsb3kvbG9hZGVyX2FwcCIgXV07IHRoZW4KKyAgICAjIEV4cGVjdGVkIGFmdGVyIGxhdW5jaGVyIGlzIHJ1biBmb3IgYSBHWVAgYnVpbGQuCisgICAgc3RhZ2luZ19kaXI9IiR7T1VUfS9kZXBsb3kvbG9hZGVyX2FwcCIKKyAgZWxzZQorICAgICMgRXhwZWN0ZWQgYWZ0ZXIgbGF1bmNoZXIgaXMgcnVuIGZvciBhIEdOIGJ1aWxkLgorICAgIHN0YWdpbmdfZGlyPSIke09VVH0iCisgIGZpCiAKLSAgUEFUSFM9KCIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvbG9hZGVyX2FwcCIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvY29udGVudC9hcHAvY29iYWx0L2xpYi9saWJjb2JhbHQuc28iIFwKLSAgICAgICAgICIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvIikKKyAgZWNobyAiIENoZWNraW5nICcke3N0YWdpbmdfZGlyfSciCisKKyAgUEFUSFM9KCIke3N0YWdpbmdfZGlyfS9sb2FkZXJfYXBwIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIiR7c3RhZ2luZ19kaXJ9L2NvbnRlbnQvYXBwL2NvYmFsdC9saWIvbGliY29iYWx0LnNvIiBcCisgICAgICAgICAiJHtzdGFnaW5nX2Rpcn0vY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvIikKIAogICBmb3IgZmlsZSBpbiAiJHtQQVRIU1tAXX0iOyBkbwogICAgIGlmIFtbICEgLWUgIiR7ZmlsZX0iIF1dOyB0aGVuCkBAIC0zMywxNSArNDIsMTUgQEAKICAgICBmaQogICBkb25lCiAKLSAgZWNobyAiIFJlcXVpcmVkIGZpbGVzIHdlcmUgZm91bmQgd2l0aGluICcke09VVH0nIgorICBlY2hvICIgUmVxdWlyZWQgZmlsZXMgd2VyZSBmb3VuZCB3aXRoaW4gJyR7c3RhZ2luZ19kaXJ9JyIKIAogICBlY2hvICIgRGVwbG95aW5nIENvYmFsdCBvbiBsb2NhbCBkZXZpY2UiCiAKICAgZWNobyAiIEdlbmVyYXRpbmcgSFRNTCB0ZXN0IGRpcmVjdG9yeSIKLSAgZXZhbCAibWtkaXIgLXAgJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy8iIDE+IC9kZXYvbnVsbAorICBldmFsICJta2RpciAtcCAke3N0YWdpbmdfZGlyfS9jb250ZW50L2FwcC9jb2JhbHQvY29udGVudC93ZWIvdGVzdHMvIiAxPiAvZGV2L251bGwKIAogICBlY2hvICIgQ29weWluZyBIVE1MIHRlc3QgZmlsZXMgdG8gSFRNTCB0ZXN0IGRpcmVjdG9yeSIKLSAgZXZhbCAiY3AgJHsxfS8uLi90ZXN0cy8qLmh0bWwgJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy8iIDE+IC9kZXYvbnVsbAorICBldmFsICJjcCAkezF9Ly4uL3Rlc3RzLyouaHRtbCAke3N0YWdpbmdfZGlyfS9jb250ZW50L2FwcC9jb2JhbHQvY29udGVudC93ZWIvdGVzdHMvIiAxPiAvZGV2L251bGwKIAogICBjbGVhcl9zdG9yYWdlCiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9jbGVhcl9zdG9yYWdlLnNoIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2NsZWFyX3N0b3JhZ2Uuc2gKaW5kZXggNGRkYWE0Zi4uZjNmYmJhNCAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2NsZWFyX3N0b3JhZ2Uuc2gKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2NsZWFyX3N0b3JhZ2Uuc2gKQEAgLTE2LDYgKzE2LDUgQEAKIAogZnVuY3Rpb24gY2xlYXJfc3RvcmFnZSgpIHsKICAgZWNobyAiIENsZWFyaW5nIENvYmFsdCBzdG9yYWdlIgotICBldmFsICIke1NTSH1cImZpbmQgJHtTVE9SQUdFX0RJUn0vIC1taW5kZXB0aCAxIC1tYXhkZXB0aCAxICEgLW5hbWUgJ2ljdScgLWV4ZWMgcm0gLXJmIHt9ICtcIiIgMT4gL2Rldi9udWxsCisgIGV2YWwgIiR7U1NIfVwiZmluZCAke1NUT1JBR0VfRElSfS8gLW1pbmRlcHRoIDEgLW1heGRlcHRoIDEgXCEgLW5hbWUgJ2ljdScgLWV4ZWMgcm0gLXJmIHt9ICtcIiIgMT4gL2Rldi9udWxsCiB9Ci0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9kZXBsb3lfY29iYWx0LnNoIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2RlcGxveV9jb2JhbHQuc2gKaW5kZXggNmIxYjgzZC4uOGZkYmMyMiAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2RlcGxveV9jb2JhbHQuc2gKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL2RlcGxveV9jb2JhbHQuc2gKQEAgLTIwLDExICsyMCwyMCBAQAogICAgIGV4aXQgMQogICBmaQogCi0gIGVjaG8gIiBDaGVja2luZyAnJHtPVVR9JyIKKyAgZGVjbGFyZSBzdGFnaW5nX2Rpcj0iIgorICBpZiBbWyAtZSAiJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwIiBdXTsgdGhlbgorICAgICMgRXhwZWN0ZWQgYWZ0ZXIgbGF1bmNoZXIgaXMgcnVuIGZvciBhIEdZUCBidWlsZC4KKyAgICBzdGFnaW5nX2Rpcj0iJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwIgorICBlbHNlCisgICAgIyBFeHBlY3RlZCBhZnRlciBsYXVuY2hlciBpcyBydW4gZm9yIGEgR04gYnVpbGQuCisgICAgc3RhZ2luZ19kaXI9IiR7T1VUfS9pbnN0YWxsL2xvYWRlcl9hcHAiCisgIGZpCiAKLSAgUEFUSFM9KCIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvbG9hZGVyX2FwcCIgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvY29udGVudC9hcHAvY29iYWx0L2xpYi9saWJjb2JhbHQuc28iIFwKLSAgICAgICAgICIke09VVH0vZGVwbG95L2xvYWRlcl9hcHAvY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvIikKKyAgZWNobyAiIENoZWNraW5nICcke3N0YWdpbmdfZGlyfSciCisKKyAgUEFUSFM9KCIke3N0YWdpbmdfZGlyfS9sb2FkZXJfYXBwIiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIiR7c3RhZ2luZ19kaXJ9L2NvbnRlbnQvYXBwL2NvYmFsdC9saWIvbGliY29iYWx0LnNvIiBcCisgICAgICAgICAiJHtzdGFnaW5nX2Rpcn0vY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvIikKIAogICBmb3IgZmlsZSBpbiAiJHtQQVRIU1tAXX0iOyBkbwogICAgIGlmIFtbICEgLWUgIiR7ZmlsZX0iIF1dOyB0aGVuCkBAIC0zOCwzMiArNDcsMzQgQEAKICAgZWNobyAiIERlcGxveWluZyB0byB0aGUgUmFzcGJlcnJ5IFBpIDIgYXQgJHtSQVNQSV9BRERSfSIKIAogICBlY2hvICIgUmVnZW5lcmF0aW5nIENvYmFsdC1vbi1FdmVyZ3JlZW4gZGlyZWN0b3J5IgotICBldmFsICIke1NTSH0gcm0gLXJmIC9ob21lL3BpL2NvZWcvIiAxPiAvZGV2L251bGwKLSAgZXZhbCAiJHtTU0h9IG1rZGlyIC9ob21lL3BpL2NvZWcvIiAxPiAvZGV2L251bGwKKyAgZXZhbCAiJHtTU0h9IFwicm0gLXJmIC9ob21lL3BpL2NvZWcvXCIiCisgIGV2YWwgIiR7U1NIfSBcIm1rZGlyIC9ob21lL3BpL2NvZWcvXCIiCiAKICAgZWNobyAiIENvcHlpbmcgbG9hZGVyX2FwcCB0byBDb2JhbHQtb24tRXZlcmdyZWVuIGRpcmVjdG9yeSIKLSAgZXZhbCAiJHtTQ1B9ICR7T1VUfS9kZXBsb3kvbG9hZGVyX2FwcC9sb2FkZXJfYXBwIHBpQCR7UkFTUElfQUREUn06L2hvbWUvcGkvY29lZy8iIDE+IC9kZXYvbnVsbAorICBldmFsICIke1NDUH0gXCIke3N0YWdpbmdfZGlyfS9sb2FkZXJfYXBwIHBpQCR7UkFTUElfQUREUn06L2hvbWUvcGkvY29lZy9cIiIKIAogICBlY2hvICIgQ29weWluZyBjcmFzaHBhZF9oYW5kbGVyIHRvIENvYmFsdC1vbi1FdmVyZ3JlZW4gZGlyZWN0b3J5IgotICBldmFsICIke1NDUH0gJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwL2NyYXNocGFkX2hhbmRsZXIgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnLyIgMT4gL2Rldi9udWxsCisgIGV2YWwgIiR7U0NQfSBcIiR7c3RhZ2luZ19kaXJ9L2NyYXNocGFkX2hhbmRsZXIgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL1wiIgogCiAgIGVjaG8gIiBSZWdlbmVyYXRpbmcgc3lzdGVtIGltYWdlIGRpcmVjdG9yeSIKLSAgZXZhbCAiJHtTU0h9IG1rZGlyIC1wIC9ob21lL3BpL2NvZWcvY29udGVudC9hcHAvY29iYWx0L2xpYiIgMT4gL2Rldi9udWxsCisgIGV2YWwgIiR7U1NIfSBcIm1rZGlyIC1wIC9ob21lL3BpL2NvZWcvY29udGVudC9hcHAvY29iYWx0L2xpYlwiIgogCiAgIGVjaG8gIiBDb3B5aW5nIGNvYmFsdCB0byBzeXN0ZW0gaW1hZ2UgZGlyZWN0b3J5IgotICBldmFsICIke1NDUH0gJHtPVVR9L2RlcGxveS9sb2FkZXJfYXBwL2NvbnRlbnQvYXBwL2NvYmFsdC9saWIvbGliY29iYWx0LnNvIHBpQCR7UkFTUElfQUREUn06L2hvbWUvcGkvY29lZy9jb250ZW50L2FwcC9jb2JhbHQvbGliLyIgMT4gL2Rldi9udWxsCisgIGV2YWwgIiR7U0NQfSBcIiR7c3RhZ2luZ19kaXJ9L2NvbnRlbnQvYXBwL2NvYmFsdC9saWIvbGliY29iYWx0LnNvIHBpQCR7UkFTUElfQUREUn06L2hvbWUvcGkvY29lZy9jb250ZW50L2FwcC9jb2JhbHQvbGliL1wiIgogCiAgIGVjaG8gIiBDb3B5aW5nIGNvbnRlbnQgdG8gc3lzdGVtIGltYWdlIGRpcmVjdG9yeSIKLSAgZXZhbCAiJHtTQ1B9IC1yICR7T1VUfS9kZXBsb3kvbG9hZGVyX2FwcC9jb250ZW50L2FwcC9jb2JhbHQvY29udGVudC8gcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC8iIDE+IC9kZXYvbnVsbAorICBldmFsICIke1NDUH0gXCItciAke3N0YWdpbmdfZGlyfS9jb250ZW50L2FwcC9jb2JhbHQvY29udGVudC8gcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC9cIiIKIAogICBlY2hvICIgQ29weWluZyBmb250cyB0byBzeXN0ZW0gY29udGVudCBkaXJlY3RvcnkiCi0gIGV2YWwgIiR7U0NQfSAtciAke09VVH0vY29udGVudC9mb250cy8gcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvIiAxPiAvZGV2L251bGwKKyAgZXZhbCAiJHtTQ1B9IFwiLXIgJHtzdGFnaW5nX2Rpcn0vY29udGVudC9mb250cy8gcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvXCIiCiAKICAgZWNobyAiIEdlbmVyYXRpbmcgSFRNTCB0ZXN0IGRpcmVjdG9yeSIKLSAgZXZhbCAiJHtTU0h9IG1rZGlyIC1wIC9ob21lL3BpL2NvZWcvY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvd2ViL3Rlc3RzLyIgMT4gL2Rldi9udWxsCisgIGV2YWwgIiR7U1NIfSBcIm1rZGlyIC1wIC9ob21lL3BpL2NvZWcvY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQvd2ViL3Rlc3RzL1wiIgogCiAgIGVjaG8gIiBDb3B5aW5nIEhUTUwgdGVzdCBmaWxlcyB0byBIVE1MIHRlc3QgZGlyZWN0b3J5IgotICBldmFsICIke1NDUH0gJHsxfS8uLi90ZXN0cy8qLmh0bWwgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy8iIDE+IC9kZXYvbnVsbAorICBldmFsICIke1NDUH0gXCIkezF9Ly4uL3Rlc3RzL2VtcHR5Lmh0bWwgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy9cIiIKKyAgZXZhbCAiJHtTQ1B9IFwiJHsxfS8uLi90ZXN0cy90ZXN0Lmh0bWwgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy9cIiIKKyAgZXZhbCAiJHtTQ1B9IFwiJHsxfS8uLi90ZXN0cy90c2VyaWVzLmh0bWwgcGlAJHtSQVNQSV9BRERSfTovaG9tZS9waS9jb2VnL2NvbnRlbnQvYXBwL2NvYmFsdC9jb250ZW50L3dlYi90ZXN0cy9cIiIKIAogICBlY2hvICIgU3VjY2Vzc2Z1bGx5IGRlcGxveWVkISIKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9zZWN1cmVfY29tbXVuaWNhdGlvbi5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9zZWN1cmVfY29tbXVuaWNhdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTMzMmIxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL3NlY3VyZV9jb21tdW5pY2F0aW9uLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBUT0RPKGIvMTcxMzE0NDg4KTogY29uc2lkZXIgYWxsb3dpbmcgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHRvIGJlIHBhc3NlZCBhcworIyBhcmd1bWVudHMgdG8gcnVuX2FsbF90ZXN0cy5zaC4KK1JBU1BJX1VTRVJOQU1FPSJwaSIKK1JBU1BJX1BBU1NXT1JEPSJyYXNwYmVycnkiCisKKyMgVGhlIGxvbmdlc3QgdGltZW91dCBmb3IgY3ljbGluZyBDb2JhbHQgaXMgMzAwIHNlY29uZHMuIDM2MCBzZWNvbmRzIGlzIHVzZWQgZm9yCisjIHRoZSBleHBlY3QgdGltZW91dCB0byBhbGxvdyBDb2JhbHQgdG8gYmUgY3ljbGVkLCB3aXRoIGEgb25lIG1pbnV0ZSBjdXNoaW9uLgorRVhQRUNUX1RJTUVPVVQ9IjM2MCIKKworZnVuY3Rpb24gc3NoX3dpdGhfcGFzc3dvcmQoKSB7CisgIGV4cGVjdCAtYyAic3Bhd24gLW5vZWNobyBzc2ggJHtSQVNQSV9VU0VSTkFNRX1AJHtSQVNQSV9BRERSfSBcIiRAXCI7IGxvZ191c2VyIDA7IGV4cGVjdCBcInBhc3N3b3JkXCI7IGxvZ191c2VyIDE7IHNlbmQgXCIke1JBU1BJX1BBU1NXT1JEfVxcclwiOyBzZXQgdGltZW91dCAke0VYUEVDVF9USU1FT1VUfTsgIGV4cGVjdCBcImVvZlwiIgorfQorCitmdW5jdGlvbiBzY3Bfd2l0aF9wYXNzd29yZCgpIHsKKyAgZXhwZWN0IC1jICJzcGF3biBzY3AgJEA7IGV4cGVjdCBcInBhc3N3b3JkXCI7IHNlbmQgXCIke1JBU1BJX1BBU1NXT1JEfVxcclwiOyBpbnRlcmFjdCIKK30KKworZnVuY3Rpb24gc3NoX3dpdGhfa2V5KCkgeworICBldmFsICJzc2ggLWkgJHtLRVlQQVRIfSBwaUAke1JBU1BJX0FERFJ9IFwiJEBcIiIKK30KKworZnVuY3Rpb24gc2NwX3dpdGhfa2V5KCkgeworICBldmFsICJzY3AgLWkgJHtLRVlQQVRIfSAkQCIKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9zZXR1cC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9zZXR1cC5zaAppbmRleCAzZjQ4NGRlLi42MmM2NWFhIDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvcmFzcGkvc2V0dXAuc2gKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL3NldHVwLnNoCkBAIC0xNiw2ICsxNiw3IEBACiAKIHNvdXJjZSAkMS8uLi9wcHJpbnQuc2gKIHNvdXJjZSAkMS9ydW5fY29tbWFuZC5zaAorc291cmNlICQxL3NlY3VyZV9jb21tdW5pY2F0aW9uLnNoCiAKIENBQ0hFX0RJUj0iL2hvbWUvcGkvLmNhY2hlL2NvYmFsdCIKIENPTlRFTlQ9Ii9ob21lL3BpL2NvZWcvY29udGVudC9hcHAvY29iYWx0L2NvbnRlbnQiCkBAIC0zNywxOCArMzgsMzAgQEAKICAgZXhpdCAxCiBmaQogCi1LRVlQQVRIPSIke0hPTUV9Ly5zc2gvcmFzcGkiCi0KLWlmIFtbICEgLWYgIiR7S0VZUEFUSH0iIF1dOyB0aGVuCi0gIHNzaC1rZXlnZW4gLXQgcnNhIC1xIC1mICIke0tFWVBBVEh9IiAtTiAiIiAxPiAvZGV2L251bGwKLSAgc3NoLWNvcHktaWQgLWkgIiR7S0VZUEFUSH0ucHViIiBwaUAiJHtSQVNQSV9BRERSfSIgMT4gL2Rldi9udWxsCi0gIGVjaG8gIiBHZW5lcmF0ZWQgU1NIIGtleS1wYWlyIGZvciBSYXNwYmVycnkgUGkgMiBhdCAke0tFWVBBVEh9IgotZWxzZQotICBlY2hvICIgUmUtdXNpbmcgZXhpc3RpbmcgU1NIIGtleS1wYWlyIGZvciBSYXNwYmVycnkgUGkgMiBhdCAke0tFWVBBVEh9IgorZGVjbGFyZSBhdXRoX21ldGhvZHM9KCJwdWJsaWMta2V5IiAicGFzc3dvcmQiKQoraWYgW1sgISAiJHthdXRoX21ldGhvZHNbQF19IiA9fiAiJHtBVVRIX01FVEhPRH0iIF1dIDsgdGhlbgorICBsb2cgImVycm9yIiAiVGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3IgY29ubmVjdGluZyB0byB0aGUgUmFzcGJlcnJ5IFBpIDIgbXVzdCBiZSBvbmUgb2Y6ICR7YXV0aF9tZXRob2RzWypdfSIKKyAgZXhpdCAxCiBmaQorZWNobyAiIFVzaW5nICR7QVVUSF9NRVRIT0R9IGF1dGhlbnRpY2F0aW9uIHdpdGggcmVtb3RlIFJhc3BiZXJyeSBQaSAyIgogCi1TU0g9InNzaCAtaSAke0tFWVBBVEh9IHBpQCR7UkFTUElfQUREUn0gIgotU0NQPSJzY3AgLWkgJHtLRVlQQVRIfSAiCitpZiBbWyAiJHtBVVRIX01FVEhPRH0iID09ICJwYXNzd29yZCIgXV07IHRoZW4KKyAgU1NIPSJzc2hfd2l0aF9wYXNzd29yZCAiCisgIFNDUD0ic2NwX3dpdGhfcGFzc3dvcmQgIgorZWxzZQorICBLRVlQQVRIPSIke0hPTUV9Ly5zc2gvcmFzcGkiCisKKyAgaWYgW1sgISAtZiAiJHtLRVlQQVRIfSIgXV07IHRoZW4KKyAgICBzc2gta2V5Z2VuIC10IHJzYSAtcSAtZiAiJHtLRVlQQVRIfSIgLU4gIiIgMT4gL2Rldi9udWxsCisgICAgc3NoLWNvcHktaWQgLWkgIiR7S0VZUEFUSH0ucHViIiBwaUAiJHtSQVNQSV9BRERSfSIgMT4gL2Rldi9udWxsCisgICAgZWNobyAiIEdlbmVyYXRlZCBTU0gga2V5LXBhaXIgZm9yIFJhc3BiZXJyeSBQaSAyIGF0ICR7S0VZUEFUSH0iCisgIGVsc2UKKyAgICBlY2hvICIgUmUtdXNpbmcgZXhpc3RpbmcgU1NIIGtleS1wYWlyIGZvciBSYXNwYmVycnkgUGkgMiBhdCAke0tFWVBBVEh9IgorICBmaQorCisgIFNTSD0ic3NoX3dpdGhfa2V5ICIKKyAgU0NQPSJzY3Bfd2l0aF9rZXkgIgorZmkKIAogZWNobyAiIFRhcmdldGluZyB0aGUgUmFzcGJlcnJ5IFBpIDIgYXQgJHtSQVNQSV9BRERSfSIKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL3N0YXJ0X2NvYmFsdC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9yYXNwaS9zdGFydF9jb2JhbHQuc2gKaW5kZXggZjY0ZTBkYS4uZDU2MzMxYiAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Jhc3BpL3N0YXJ0X2NvYmFsdC5zaAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvcmFzcGkvc3RhcnRfY29iYWx0LnNoCkBAIC01MywxNSArNTMsMTUgQEAKICAgIyBsb2FkZXIgYXBwLiBUaGlzIGFwcHJvYWNoIGVuYWJsZXMgdGhlIGxvY2FsIG1hY2hpbmUgdG8gb2J0YWluIHRoZSBsb2FkZXIKICAgIyBhcHAncyBwcm9jZXNzIElEIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBpdHMgc3Rkb3V0L3N0ZGVyciwgd2hpY2ggbXVzdCBiZQogICAjIHBpcGVkIHRvIHRlZS4KLSAgZGVjbGFyZSBzdG9yZV9waWRfY21kPSJlY2hvIFxcJFxcJCA+ICR7cGlkX3N0b3JhZ2VfcGF0aH0iCisgIGRlY2xhcmUgc3RvcmVfcGlkX2NtZD0iZWNobyBcXFxcJFxcXFwkID4gJHtwaWRfc3RvcmFnZV9wYXRofSIKICAgZGVjbGFyZSByZXBsYWNlX3dpdGhfbG9hZGVyX2NtZD0iZXhlYyAvaG9tZS9waS9jb2VnL2xvYWRlcl9hcHAgLS11cmw9XCJcIiR7VVJMfVwiXCIgJHtBUkdTfSIKICAgZXZhbCAiJHtTU0h9XCIke3N0b3JlX3BpZF9jbWR9OyR7cmVwbGFjZV93aXRoX2xvYWRlcl9jbWR9XCIgMj4mMSB8IHRlZSBcIiR7TE9HX1BBVEh9LyR7TE9HfVwiIiAmCiAKICAgIyBUaGUgZGV2aWNlJ3MgZmlsZXN5c3RlbSBpcyBwb2xsZWQgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiBzaW5jZSB0aGUKICAgIyBwcmV2aW91cyBldmFsIGNvbW1hbmQgaXMgbmVjZXNzYXJpbHkgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgotICBldmFsICIke1NTSH1cIndoaWxlIFtbICEgLWYgJHtwaWRfc3RvcmFnZV9wYXRofSBdXSA7IGRvIHNsZWVwIDEgOyBkb25lXCIiCisgIGV2YWwgIiR7U1NIfVwid2hpbGUgXFtcWyBcISAtZiAke3BpZF9zdG9yYWdlX3BhdGh9IFxdXF0gXDsgZG8gc2xlZXAgMSBcOyBkb25lXCIiCiAKLSAgbG9hZGVyX3BpZF9yZWY9JChldmFsICIke1NTSH1cImNhdCAke3BpZF9zdG9yYWdlX3BhdGh9XCIiKQorICBsb2FkZXJfcGlkX3JlZj0kKGV2YWwgIiR7U1NIfVwiY2F0ICR7cGlkX3N0b3JhZ2VfcGF0aH1cIiIgfCB0ciAtZCAnWzpzcGFjZTpdJykKIAogICBkZWxldGVfZmlsZSAiJHtwaWRfc3RvcmFnZV9wYXRofSIKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3J1bl9hbGxfdGVzdHMuc2ggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvcnVuX2FsbF90ZXN0cy5zaAppbmRleCAwZDc3YjY0Li44MzE3YTU1IDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvcnVuX2FsbF90ZXN0cy5zaAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvcnVuX2FsbF90ZXN0cy5zaApAQCAtMTksNyArMTksMTkgQEAKICMgYXZhaWxhYmlsaXR5IG9mICJmaW5kIiwgImdyZXAiLCAibG4iLCAibXYiLCBhbmQgInJtIi4KIAogRElSPSIkKGRpcm5hbWUgIiR7MH0iKSIKLURFVklDRV9JRD0iJHsyfSIKKworQVVUSF9NRVRIT0Q9InB1YmxpYy1rZXkiCit3aGlsZSBnZXRvcHRzICJkOmE6IiBvOyBkbworICAgIGNhc2UgIiR7b30iIGluCisgICAgICAgIGQpCisgICAgICAgICAgICBERVZJQ0VfSUQ9JHtPUFRBUkd9CisgICAgICAgICAgICA7OworICAgICAgICBhKQorICAgICAgICAgICAgQVVUSF9NRVRIT0Q9JHtPUFRBUkd9CisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKE9QVElORC0xKSkKIAogaWYgW1sgISAtZiAiJHtESVJ9L3NldHVwLnNoIiBdXTsgdGhlbgogICBlY2hvICJUaGUgc2NyaXB0ICdzZXR1cC5zaCcgaXMgcmVxdWlyZWQiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3Rpbmcvc2V0dXAuc2ggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3Rpbmcvc2V0dXAuc2gKaW5kZXggNGJlZjAyYS4uNTdiZGJjNCAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3NldHVwLnNoCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9zZXR1cC5zaApAQCAtMjYsMTcgKzI2LDE3IEBACiAKIGxvZyAiaW5mbyIgIiBbPT09PT09PT09PV0gUHJlcGFyaW5nIENvYmFsdC4iCiAKLWlmIFtbICQjIC1sdCAxIF1dOyB0aGVuCitpZiBbWyAteiAkezF9IF1dOyB0aGVuCiAgIGxvZyAiZXJyb3IiICJBIHBsYXRmb3JtIG11c3QgYmUgcHJvdmlkZWQiCiAgIGV4aXQgMQogZmkKIAogUExBVEZPUk1TPSgibGludXgiICJyYXNwaSIpCi0KIGlmIFtbICEgIiR7UExBVEZPUk1TW0BdfSIgPX4gIiR7MX0iIF1dICYmIFtbICEgLWQgIiR7RElSfS8kezF9IiBdXTsgdGhlbgogICBsb2cgImVycm9yIiAiVGhlIHBsYXRmb3JtIHByb3ZpZGVkIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6ICR7UExBVEZPUk1TWypdfSIKICAgZXhpdCAxCiBmaQorUExBVEZPUk09IiR7MX0iCiAKICMgTGlzdCBvZiBhbGwgcmVxdWlyZWQgc2NyaXB0cy4KIFNDUklQVFM9KCIke0RJUn0vc2hhcmVkL2FwcF9rZXkuc2giICAgICAgICAgICBcCkBAIC00OCwxNyArNDgsMTcgQEAKIAogICAgICAgICAgIyBFYWNoIG9mIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGUgdGFyZ2V0ZWQKICAgICAgICAgICMgcGxhdGZvcm0uIFRoZSBzY3JpcHQgJ3NldHVwLnNoJyBtdXN0IGJlIHNvdXJjZSdkIGZpcnN0LgotICAgICAgICAgIiR7RElSfS8kezF9L3NldHVwLnNoIiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICIke0RJUn0vJHtQTEFURk9STX0vc2V0dXAuc2giICAgICAgICAgICAgICAgXAogCi0gICAgICAgICAiJHtESVJ9LyR7MX0vY2xlYW5fdXAuc2giICAgICAgICAgICAgXAotICAgICAgICAgIiR7RElSfS8kezF9L2NsZWFyX3N0b3JhZ2Uuc2giICAgICAgIFwKLSAgICAgICAgICIke0RJUn0vJHsxfS9jcmVhdGVfZmlsZS5zaCIgICAgICAgICBcCi0gICAgICAgICAiJHtESVJ9LyR7MX0vZGVsZXRlX2ZpbGUuc2giICAgICAgICAgXAotICAgICAgICAgIiR7RElSfS8kezF9L2RlcGxveV9jb2JhbHQuc2giICAgICAgIFwKLSAgICAgICAgICIke0RJUn0vJHsxfS9ydW5fY29tbWFuZC5zaCIgICAgICAgICBcCi0gICAgICAgICAiJHtESVJ9LyR7MX0vc3RhcnRfY29iYWx0LnNoIiAgICAgICAgXAotICAgICAgICAgIiR7RElSfS8kezF9L3N0b3BfY29iYWx0LnNoIiAgICAgICAgIFwKLSAgICAgICAgICIke0RJUn0vJHsxfS9zdG9wX3Byb2Nlc3Muc2giKQorICAgICAgICAgIiR7RElSfS8ke1BMQVRGT1JNfS9jbGVhbl91cC5zaCIgICAgICAgICAgICBcCisgICAgICAgICAiJHtESVJ9LyR7UExBVEZPUk19L2NsZWFyX3N0b3JhZ2Uuc2giICAgICAgIFwKKyAgICAgICAgICIke0RJUn0vJHtQTEFURk9STX0vY3JlYXRlX2ZpbGUuc2giICAgICAgICAgXAorICAgICAgICAgIiR7RElSfS8ke1BMQVRGT1JNfS9kZWxldGVfZmlsZS5zaCIgICAgICAgICBcCisgICAgICAgICAiJHtESVJ9LyR7UExBVEZPUk19L2RlcGxveV9jb2JhbHQuc2giICAgICAgIFwKKyAgICAgICAgICIke0RJUn0vJHtQTEFURk9STX0vcnVuX2NvbW1hbmQuc2giICAgICAgICAgXAorICAgICAgICAgIiR7RElSfS8ke1BMQVRGT1JNfS9zdGFydF9jb2JhbHQuc2giICAgICAgICBcCisgICAgICAgICAiJHtESVJ9LyR7UExBVEZPUk19L3N0b3BfY29iYWx0LnNoIiAgICAgICAgIFwKKyAgICAgICAgICIke0RJUn0vJHtQTEFURk9STX0vc3RvcF9wcm9jZXNzLnNoIikKIAogZm9yIHNjcmlwdCBpbiAiJHtTQ1JJUFRTW0BdfSI7IGRvCiAgIGlmIFtbICEgLWYgIiR7c2NyaXB0fSIgXV07IHRoZW4KQEAgLTY2LDUgKzY2LDUgQEAKICAgICBleGl0IDEKICAgZmkKIAotICBzb3VyY2UgJHNjcmlwdCAiJHtESVJ9LyR7MX0iCisgIHNvdXJjZSAkc2NyaXB0ICIke0RJUn0vJHtQTEFURk9STX0iCiBkb25lCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3Rpbmcvc2hhcmVkL2N5Y2xlX2NvYmFsdC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9zaGFyZWQvY3ljbGVfY29iYWx0LnNoCmluZGV4IDUwZTg4NGEuLmMwNjc4NjIgMTAwNzU1Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9zaGFyZWQvY3ljbGVfY29iYWx0LnNoCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy9zaGFyZWQvY3ljbGVfY29iYWx0LnNoCkBAIC0xNCw3ICsxNCw3IEBACiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKLVRJTUVPVVQ9MTUwCitUSU1FT1VUPTIwMAogCiAjIFdhdGNoZXMgQ29iYWx0J3MgbG9ncy4KICMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy9jbGVhbl9kcmFpbl9maWxlX29uX3N1c3BlbmRfdGVzdC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy9jbGVhbl9kcmFpbl9maWxlX29uX3N1c3BlbmRfdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZTBlNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nL3Rlc3RzL2NsZWFuX2RyYWluX2ZpbGVfb25fc3VzcGVuZF90ZXN0LnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBVbnNldCB0aGUgcHJldmlvdXMgdGVzdCdzIG5hbWUgYW5kIHJ1bm5lciBmdW5jdGlvbi4KK3Vuc2V0IFRFU1RfTkFNRQordW5zZXQgVEVTVF9GSUxFCit1bnNldCAtZiBydW5fdGVzdAorCitURVNUX05BTUU9IkNsZWFuRHJhaW5GaWxlc09uU3VzcGVuZCIKK1RFU1RfRklMRT0idGVzdC5odG1sIgorCitmdW5jdGlvbiBydW5fdGVzdCgpIHsKKyAgY2xlYXJfc3RvcmFnZQorCisgIExPRz0iJHtURVNUX05BTUV9LjAubG9nIgorICBzdGFydF9jb2JhbHQgImZpbGU6Ly8vdGVzdHMvJHtURVNUX0ZJTEV9P2NoYW5uZWw9dGVzdCIgIiR7TE9HfSIgTE9BREVSIC0tdXBkYXRlX2NoZWNrX2RlbGF5X3NlY29uZHM9MQorCisgIFZBUj0xCisKKyAgZm9yIGkgaW4gezEuLjV9CisgIGRvCisgICAgbG9nICJpbmZvIiAiJHtURVNUX05BTUV9ICMke1ZBUn0iCisgICAgc2xlZXAgJHtWQVJ9CisKKyAgICAjIHN1c3BlbmQKKyAgICBraWxsIC1zIFVTUjEgIiR7TE9BREVSfSIKKyAgICBpZiBbWyAkPyAtbmUgMCBdXTsgdGhlbgorICAgICAgbG9nICJ3YXJuaW5nIiAiRmFpbGVkIHRvIHN1c3BlbmQiCisgICAgICBicmVhaworICAgIGZpCisKKyAgICBzbGVlcCA1CisKKyAgICBpZiBscyAke1NUT1JBR0VfRElSfS9pbnN0YWxsYXRpb25fPy9kXyogMT4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGVjaG8gImRyYWluIGZpbGUgd2Fzbid0IGNsZWFuZWQgdXAgLiIKKyAgICAgIHJldHVybiAxCisgICAgZmkKKworICAgICMgcmVzdW1lCisgICAga2lsbCAtcyBDT05UICIke0xPQURFUn0iCisgICAgaWYgW1sgJD8gLW5lIDAgXV07IHRoZW4KKyAgICAgIGxvZyAid2FybmluZyIgIkZhaWxlZCB0byByZXN1bWUiCisgICAgICBicmVhaworICAgIGZpCisKKyAgICBsZXQgIlZBUj0ke1ZBUn0rMSIKKyAgZG9uZQorICByZXR1cm4gMAorCit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvdGVzdHMvZXZlcmdyZWVuX2xpdGVfdGVzdC5zaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy9ldmVyZ3JlZW5fbGl0ZV90ZXN0LnNoCmluZGV4IDQyZDM3YTMuLjEwNmIxNDUgMTAwNzU1Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy9ldmVyZ3JlZW5fbGl0ZV90ZXN0LnNoCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy9ldmVyZ3JlZW5fbGl0ZV90ZXN0LnNoCkBAIC00Niw1ICs0NiwxMSBAQAogICAgIHJldHVybiAxCiAgIGZpCiAKKyAgY3ljbGVfY29iYWx0ICJmaWxlOi8vL3Rlc3RzLyR7VEVTVF9GSUxFfT9jaGFubmVsPXRlc3QiICIke1RFU1RfTkFNRX0uMi5sb2ciICJMb2FkZWQgV2ViTW9kdWxlIiAiLS1ldmVyZ3JlZW5fbGl0ZSIKKworICBpZiBbWyAkPyAtbmUgMCBdXTsgdGhlbgorICAgIGxvZyAiZXJyb3IiICJGYWlsZWQgdG8gcnVuIHN5c3RlbSBpbnN0YWxsYXRpb24iCisgICAgcmV0dXJuIDEKKyAgZmkKICAgcmV0dXJuIDAKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4vdGVzdGluZy90ZXN0cy91c2VfbW1hcF9maWxlX3Rlc3Quc2ggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvdGVzdHMvdXNlX21tYXBfZmlsZV90ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YjUzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3Rlc3RpbmcvdGVzdHMvdXNlX21tYXBfZmlsZV90ZXN0LnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9iYXNoCisjCisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBVbnNldCB0aGUgcHJldmlvdXMgdGVzdCdzIG5hbWUgYW5kIHJ1bm5lciBmdW5jdGlvbi4KK3Vuc2V0IFRFU1RfTkFNRQordW5zZXQgVEVTVF9GSUxFCit1bnNldCAtZiBydW5fdGVzdAorCitURVNUX05BTUU9IlVzZU1lbW9yeU1hcHBlZEZpbGUiCitURVNUX0ZJTEU9InRlc3QuaHRtbCIKKworZnVuY3Rpb24gcnVuX3Rlc3QoKSB7CisgIGlmIFtbICIke1BMQVRGT1JNfSIgPT0gInJhc3BpIiBdXTsgdGhlbgorICAgIGVjaG8gIiBNZW1vcnlNYXBwZWRGaWxlIGV4dGVuc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yIHJhc3BpLCBza2lwcGluZyIKKyAgICByZXR1cm4gMgorICBmaQorCisgIGNsZWFyX3N0b3JhZ2UKKworICBjeWNsZV9jb2JhbHQgImZpbGU6Ly8vdGVzdHMvJHtURVNUX0ZJTEV9P2NoYW5uZWw9dGVzdCIgIiR7VEVTVF9OQU1FfS4yLmxvZyIgIlVzaW5nIG1lbW9yeSBtYXBwZWQgZmlsZSBmb3IgdGhlIHByb2dyYW0gaGVhZGVyIiAiLS1sb2FkZXJfdXNlX21tYXBfZmlsZSIKKworICBpZiBbWyAkPyAtbmUgMCBdXTsgdGhlbgorICAgIGxvZyAiZXJyb3IiICJGYWlsZWQgdG8gcnVuIHN5c3RlbSBpbnN0YWxsYXRpb24iCisgICAgcmV0dXJuIDEKKyAgZmkKKworICBjeWNsZV9jb2JhbHQgImZpbGU6Ly8vdGVzdHMvJHtURVNUX0ZJTEV9P2NoYW5uZWw9dGVzdCIgIiR7VEVTVF9OQU1FfS4yLmxvZyIgIlVzaW5nIG1lbW9yeSBtYXBwZWQgZmlsZSBmb3IgdGhlIHByb2dyYW0gaGVhZGVyIiAiLS1sb2FkZXJfdXNlX21tYXBfZmlsZSAtLWV2ZXJncmVlbl9saXRlIgorCisgIGlmIFtbICQ/IC1uZSAwIF1dOyB0aGVuCisgICAgbG9nICJlcnJvciIgIkZhaWxlZCB0byBydW4gc3lzdGVtIGluc3RhbGxhdGlvbiIKKyAgICByZXR1cm4gMQorICBmaQorICByZXR1cm4gMAorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmY2JmOWYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIENvYmFsdCBFdmVyZ3JlZW4geDg2XzY0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnaW5fYXBwX2RpYWwlJzogMSwKLSAgfSwgIyBlbmQgb2YgdmFyaWFibGVzCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CmluZGV4IGUyNGUzY2YuLjYxZWFjMzcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4ICsxMyw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIENvYmFsdCBFdmVyZ3JlZW4geDY0IGNvbmZpZ3VyYXRpb24uIiIiCiAKLWltcG9ydCBvcwotCiBmcm9tIGNvYmFsdC5idWlsZCBpbXBvcnQgY29iYWx0X2NvbmZpZ3VyYXRpb24KIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKQEAgLTIyLDMyICsyMCwxMiBAQAogY2xhc3MgQ29iYWx0WDY0Q29uZmlndXJhdGlvbihjb2JhbHRfY29uZmlndXJhdGlvbi5Db2JhbHRDb25maWd1cmF0aW9uKToKICAgIiIiU3RhcmJvYXJkIENvYmFsdCBFdmVyZ3JlZW4geDY0IGNvbmZpZ3VyYXRpb24uIiIiCiAKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24sIGFwcGxpY2F0aW9uX25hbWUsCi0gICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9kaXJlY3RvcnkpOgotICAgIHN1cGVyKENvYmFsdFg2NENvbmZpZ3VyYXRpb24sCi0gICAgICAgICAgc2VsZikuX19pbml0X18ocGxhdGZvcm1fY29uZmlndXJhdGlvbiwgYXBwbGljYXRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9kaXJlY3RvcnkpCi0KLSAgZGVmIEdldFBvc3RJbmNsdWRlcyhzZWxmKToKLSAgICAjIElmIHRoZXJlIGlzbid0IGEgY29uZmlndXJhdGlvbi5neXBpIGZvdW5kIGluIHRoZSB1c3VhbCBwbGFjZSwgd2UnbGwKLSAgICAjIHN1cHBsZW1lbnQgd2l0aCBvdXIgc2hhcmVkIGltcGxlbWVudGF0aW9uLgotICAgIGluY2x1ZGVzID0gc3VwZXIoQ29iYWx0WDY0Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0UG9zdEluY2x1ZGVzKCkKLSAgICBmb3IgaW5jbHVkZSBpbiBpbmNsdWRlczoKLSAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoaW5jbHVkZSkgPT0gJ2NvbmZpZ3VyYXRpb24uZ3lwaSc6Ci0gICAgICAgIHJldHVybiBpbmNsdWRlcwotCi0gICAgc2hhcmVkX2d5cGlfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbmZpZ3VyYXRpb24uZ3lwaScpCi0gICAgaWYgb3MucGF0aC5pc2ZpbGUoc2hhcmVkX2d5cGlfcGF0aCk6Ci0gICAgICBpbmNsdWRlcy5hcHBlbmQoc2hhcmVkX2d5cGlfcGF0aCkKLSAgICByZXR1cm4gaW5jbHVkZXMKLQogICBkZWYgV2ViZHJpdmVyQmVuY2htYXJrc0VuYWJsZWQoc2VsZik6CiAgICAgcmV0dXJuIFRydWUKIAogICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6CiAgICAgZmlsdGVycyA9IHN1cGVyKENvYmFsdFg2NENvbmZpZ3VyYXRpb24sIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CiAgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCiAgICAgcmV0dXJuIGZpbHRlcnMKIApAQCAtNjQsNCArNDIsNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gIF9fRklMVEVSRURfVEVTVFMgPSB7fQorICBfX0ZJTFRFUkVEX1RFU1RTID0ge30gICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvbmZpZ3VyYXRpb25fcHVibGljLmgKaW5kZXggODNjYzIzNC4uMzQzMDY4NSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCkBAIC0xMjcsMTIgKzEyNyw2IEBACiAKIC8vIC0tLSBNZW1vcnkgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gaGFzIGFuZCBzaG91bGQgdXNlIGFuIE1NQVAgZnVuY3Rpb24gdG8gbWFwIHBoeXNpY2FsCi0vLyBtZW1vcnkgdG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0jZGVmaW5lIFNCX0hBU19NTUFQIDEKLSNlbmRpZgotCiAvLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gY2FuIG1hcCBleGVjdXRhYmxlIG1lbW9yeS4gSW1wbGllcyBTQl9IQVNfTU1BUC4gVGhpcyBpcwogLy8gcmVxdWlyZWQgZm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gSklULgogI2RlZmluZSBTQl9DQU5fTUFQX0VYRUNVVEFCTEVfTUVNT1JZIDEKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWYzZWFhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAneWFzbV9leGlzdHMnOiAxLAotICAgICdzYl90YXJnZXRfcGxhdGZvcm0nOiAnZXZlcmdyZWVuLXg2NCcsCi0KLSAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAnLWlzeXN0ZW08KGNvYmFsdF9yZXBvX3Jvb3QpL3RoaXJkX3BhcnR5L211c2wvYXJjaC94ODZfNjQnLAotICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICMgRW5zdXJlIHRoYXQgdGhlIFN0YXJib2FyZGl6ZWQgX19leHRlcm5hbF90aHJlYWRpbmcgZmlsZSBpcyBpbmNsdWRlZC4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICMgRW5zdXJlIHRoYXQgb25seSB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkCi0gICAgICAjIGluIF9fZXh0ZXJuYWxfdGhyZWFkaW5nLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9MSUJSQVJZX0VYVEVSTkFMJywKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLXg2NF9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi14NjRfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLXg2NF9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDY0X3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14NjRfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCBkYmIzMmQ2Li4zOWNlYzY4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMTUsOTEgKzE1LDE3IEBACiAKIGltcG9ydCBvcy5wYXRoCiAKLWZyb20gc3RhcmJvYXJkLmJ1aWxkIGltcG9ydCBjbGFuZyBhcyBjbGFuZ19idWlsZAogZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLnNoYXJlZCBpbXBvcnQgZ3lwX2NvbmZpZ3VyYXRpb24gYXMgc2hhcmVkX2NvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBhcgotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBiYXNoCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5nCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5neHgKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgY3AKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgZXZlcmdyZWVuX2xpbmtlcgotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCB0b3VjaAogCiAKIGNsYXNzIEV2ZXJncmVlblg2NENvbmZpZ3VyYXRpb24oc2hhcmVkX2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuQ29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBFdmVyZ3JlZW4geDY0IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCiAKLSAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICBwbGF0Zm9ybT0nZXZlcmdyZWVuLXg2NCcsCi0gICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9kZWZhdWx0L3NhYmkuanNvbicpOgotICAgIHN1cGVyKEV2ZXJncmVlblg2NENvbmZpZ3VyYXRpb24sIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzYW5fZW5hYmxlZF9ieV9kZWZhdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoKQorICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0pOgorICAgIHN1cGVyKEV2ZXJncmVlblg2NENvbmZpZ3VyYXRpb24sIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtKQogCiAgICAgc2VsZi5BcHBlbmRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25QYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAKLSAgZGVmIEdldFRhcmdldFRvb2xjaGFpbihzZWxmLCAqKmt3YXJncyk6Ci0gICAgcmV0dXJuIHNlbGYuR2V0SG9zdFRvb2xjaGFpbigqKmt3YXJncykKLQotICBkZWYgR2V0SG9zdFRvb2xjaGFpbihzZWxmLCAqKmt3YXJncyk6Ci0gICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19ob3N0X3Rvb2xjaGFpbicpOgotICAgICAgZW52X3ZhcmlhYmxlcyA9IHNlbGYuR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgICAgY2NfcGF0aCA9IGVudl92YXJpYWJsZXNbJ0NDX2hvc3QnXQotICAgICAgY3h4X3BhdGggPSBlbnZfdmFyaWFibGVzWydDWFhfaG9zdCddCi0KLSAgICAgICMgVGFrZXMgdGhlIHByb3ZpZGVkIHZhbHVlIG9mIENYWF9IT1NUIHdpdGggYSBwcmVwZW5kZWQgJ2NjYWNoZScgYW5kIGFuCi0gICAgICAjIGFwcGVuZGVkICdiaW4vY2xhbmcrKycgYW5kIHN0cmlwcyB0aGVtIG9mZiwgbGVhdmluZyB1cyB3aXRoIGFuIGFic29sdXRlCi0gICAgICAjIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIG91ciB0b29sY2hhaW4uCi0gICAgICBiZWdpbl9wYXRoX2luZGV4ID0gY3h4X3BhdGguZmluZCgnLycpCi0gICAgICBlbmRfcGF0aF9pbmRleCA9IGN4eF9wYXRoLnJmaW5kKCcvJywgMCwgY3h4X3BhdGgucmZpbmQoJy8nKSkgKyAxCi0gICAgICBjeHhfcGF0aF9yb290ID0gY3h4X3BhdGhbYmVnaW5fcGF0aF9pbmRleDplbmRfcGF0aF9pbmRleF0KLQotICAgICAgc2VsZi5faG9zdF90b29sY2hhaW4gPSBbCi0gICAgICAgICAgY2xhbmcuQ0NvbXBpbGVyKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgICAgY2xhbmcuQXNzZW1ibGVyV2l0aENQcmVwcm9jZXNzb3IocGF0aD1jY19wYXRoKSwKLSAgICAgICAgICBhci5TdGF0aWNUaGluTGlua2VyKCksCi0gICAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgICAgY2xhbmd4eC5FeGVjdXRhYmxlTGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICAgIGV2ZXJncmVlbl9saW5rZXIuU2hhcmVkTGlicmFyeUxpbmtlcigKLSAgICAgICAgICAgICAgcGF0aD1jeHhfcGF0aF9yb290LCBleHRyYV9mbGFncz1bJy1tIGVsZl94ODZfNjQnXSksCi0gICAgICAgICAgY3AuQ29weSgpLAotICAgICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgICAgXQotICAgIHJldHVybiBzZWxmLl9ob3N0X3Rvb2xjaGFpbgotCi0gIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKLSAgICBmaWx0ZXJzID0gc3VwZXIoRXZlcmdyZWVuWDY0Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotICAgICMgUmVtb3ZlIHRoZSBleGNsdXNpb24gZmlsdGVyIG9uIFNiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zLgotICAgICMgR2VuZXJhbGx5LCBjaGlsZHJlbiBvZiBsaW51eC9zaGFyZWQgZG8gbm90IHN1cHBvcnQgd2lkZXZpbmUsIGJ1dCBjaGlsZHJlbgotICAgICMgb2YgbGludXgveDY0eDExIGRvLCBpZiB0aGUgY29udGVudCBkZWNyeXB0aW9uIG1vZHVsZSBpcyBwcmVzZW50LgotCi0gICAgaGFzX2NkbSA9IG9zLnBhdGguaXNmaWxlKAotICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aHMuUkVQT1NJVE9SWV9ST09ULCAndGhpcmRfcGFydHknLCAnY2RtJywgJ2NkbScsCi0gICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZScsICdjb250ZW50X2RlY3J5cHRpb25fbW9kdWxlLmgnKSkKLQotICAgIGlmIG5vdCBoYXNfY2RtOgotICAgICAgcmV0dXJuIGZpbHRlcnMKLQotICAgIGZvciB0ZXN0X2ZpbHRlciBpbiBmaWx0ZXJzOgotICAgICAgaWYgKHRlc3RfZmlsdGVyLnRhcmdldF9uYW1lID09ICducGxiJyBhbmQKLSAgICAgICAgICB0ZXN0X2ZpbHRlci50ZXN0X25hbWUgPT0gJ1NiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zJyk6Ci0gICAgICAgIGZpbHRlcnMucmVtb3ZlKHRlc3RfZmlsdGVyKQotICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgZGVmIEdldFZhcmlhYmxlcyhzZWxmLCBjb25maWd1cmF0aW9uKToKLSAgICB2YXJpYWJsZXMgPSBzdXBlcihFdmVyZ3JlZW5YNjRDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLkdldFZhcmlhYmxlcyhjb25maWd1cmF0aW9uKQotICAgIHZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnaW5jbHVkZV9wYXRoX3BsYXRmb3JtX2RlcGxveV9neXBpJzoKLSAgICAgICAgICAgICdzdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaScsCi0gICAgfSkKLSAgICByZXR1cm4gdmFyaWFibGVzCi0KIAogZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBFdmVyZ3JlZW5YNjRDb25maWd1cmF0aW9uKAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL3g2NC9zeXN2L3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBFdmVyZ3JlZW5YNjRDb25maWd1cmF0aW9uKCdldmVyZ3JlZW4teDY0JykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24gYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCmluZGV4IGYwNzQxM2EuLjY1OGE5YWMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbgpAQCAtMzEsMTAgKzMxLDYgQEAKIAogICAgIGNmbGFncyA9IFsgIi1pc3lzdGVtIiArCiAgICAgICAgICAgICAgICByZWJhc2VfcGF0aCgiLy90aGlyZF9wYXJ0eS9tdXNsL2FyY2gveDg2XzY0Iiwgcm9vdF9idWlsZF9kaXIpIF0KLQotICAgIGlmIChpc19jbGFuZykgewotICAgICAgbGRmbGFncyA9IFsgIi1mdXNlLWxkPWxsZCIgXQotICAgIH0KICAgfSBlbHNlIHsKICAgICBjZmxhZ3MgPSBbICItTzIiIF0KICAgfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKaW5kZXggM2QyZWI0OC4uYzk3YTQwNyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0xNywzICsxNyw1IEBACiBzYWJpX3BhdGggPSAiLy9zdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXYkc2JfYXBpX3ZlcnNpb24uanNvbiIKIAogaW5zdGFsbF90YXJnZXRfcGF0aCA9ICIvL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2luc3RhbGxfdGFyZ2V0LmduaSIKKworZW5hYmxlX2luX2FwcF9kaWFsID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvcGxhdGZvcm1fZGVwbG95Lmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI1MjRiNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2RlcGxveV9leGVjdXRhYmxlX2ZpbGUnOiAnPCh0YXJnZXRfZGVwbG95X2RpcikvbGliL2xpYjwoZXhlY3V0YWJsZV9uYW1lKS5zbycsCi0gICAgJ2V4ZWN1dGFibGVfZmlsZSc6ICc8KFBST0RVQ1RfRElSKS9saWIvbGliPChleGVjdXRhYmxlX25hbWUpLnNvJywKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2NvbGxlY3RfZGVwbG95X2NvbnRlbnQuZ3lwaScgXSwKLSAgJ2FjdGlvbnMnOiBbCi0gICAgewotICAgICAgJ2FjdGlvbl9uYW1lJzogJ2RlcGxveV9leGVjdXRhYmxlJywKLSAgICAgICdtZXNzYWdlJzogJ1N0cmlwIGV4ZWN1dGFibGU6IDwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwoZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAgICc8KGNvbnRlbnRfZGVwbG95X3N0YW1wX2ZpbGUpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsgJzwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAnc3RyaXAnLAotICAgICAgICAnLW8nLCAnPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZTgyYTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvYXRvbWljX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzQxMWQ3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGUgU3RhcmJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIHg2NC4gT3RoZXIgZGV2aWNlcyB3aWxsIGhhdmUKLS8vIHNwZWNpZmljIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbnMuCi0KLS8vIE90aGVyIHNvdXJjZSBmaWxlcyBzaG91bGQgbmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlciBkaXJlY3RseSwgYnV0IHNob3VsZAotLy8gaW5jbHVkZSB0aGUgZ2VuZXJpYyAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIgaW5zdGVhZC4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9YNjRfU0JWRVJTSU9OXzEyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE0ZTVhMS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0jIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd5YXNtX2V4aXN0cyc6IDEsCi0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdldmVyZ3JlZW4teDY0JywKLQotICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICctaXN5c3RlbTwoY29iYWx0X3JlcG9fcm9vdCkvdGhpcmRfcGFydHkvbXVzbC9hcmNoL3g4Nl82NCcsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICMgRW5zdXJlIHRoYXQgdGhlIFN0YXJib2FyZGl6ZWQgX19leHRlcm5hbF90aHJlYWRpbmcgZmlsZSBpcyBpbmNsdWRlZC4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICMgRW5zdXJlIHRoYXQgb25seSB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkCi0gICAgICAjIGluIF9fZXh0ZXJuYWxfdGhyZWFkaW5nLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9MSUJSQVJZX0VYVEVSTkFMJywKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLXg2NC1zYnZlcnNpb24tMTJfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xMl9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xMl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xMl9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xMl9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwM2U1NzQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgZXZlcmdyZWVuLXg2NCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4ueDY0IGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuWDY0Q29uZmlndXJhdGlvbigKLSAgICAgICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xMicsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkveDY0L3N5c3Yvc2FiaS12MTIuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDkwMzVkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2NDkwYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTIvdGVzdF9maWx0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgRXZlcmdyZWVuIFg2NCBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi54NjQgaW1wb3J0IHRlc3RfZmlsdGVycyBhcyBwYXJlbnRfdGVzdF9maWx0ZXJzCi0KLQotZGVmIENyZWF0ZVRlc3RGaWx0ZXJzKCk6Ci0gIHBhcmVudF90ZXN0X2ZpbHRlcnMuRXZlcmdyZWVuWDY0VGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OTVlNTguLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLS8vIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL2F0b21pY19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhMjNkMy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YNjRfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYjllOGQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoZSBTdGFyYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgeDY0LiBPdGhlciBkZXZpY2VzIHdpbGwgaGF2ZQotLy8gc3BlY2lmaWMgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9ucy4KLQotLy8gT3RoZXIgc291cmNlIGZpbGVzIHNob3VsZCBuZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5LCBidXQgc2hvdWxkCi0vLyBpbmNsdWRlIHRoZSBnZW5lcmljICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIiBpbnN0ZWFkLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4veDY0L2NvbmZpZ3VyYXRpb25fcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YNjRfU0JWRVJTSU9OXzEzX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Njg1OGQxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3lhc21fZXhpc3RzJzogMSwKLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJ2V2ZXJncmVlbi14NjQnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gveDg2XzY0JywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnIDogWwotICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgU3RhcmJvYXJkaXplZCBfX2V4dGVybmFsX3RocmVhZGluZyBmaWxlIGlzIGluY2x1ZGVkLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfRVhURVJOQUwnLAotICAgICAgIyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQKLSAgICAgICMgaW4gX19leHRlcm5hbF90aHJlYWRpbmcuCi0gICAgICAnX0xJQkNQUF9IQVNfVEhSRUFEX0xJQlJBUllfRVhURVJOQUwnLAotICAgICAgIyBFbmFibGUgR05VIGV4dGVuc2lvbnMgdG8gZ2V0IHByb3RvdHlwZXMgbGlrZSBmZnNsLgotICAgICAgJ19HTlVfU09VUkNFPTEnLAotICAgIF0sCi0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdldmVyZ3JlZW4teDY0LXNidmVyc2lvbi0xM19kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEzX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEzX2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEzX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEzX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9jb21waWxlcl9mbGFncy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4YTJkYy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBldmVyZ3JlZW4teDY0IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIGd5cF9jb2JhbHQuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi54NjQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5YNjRDb25maWd1cmF0aW9uKAotICAgICAgJ2V2ZXJncmVlbi14NjQtc2J2ZXJzaW9uLTEzJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXYxMy5qc29uJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MTkwYjYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgIyBOb3RlIHRoYXQgd2UgYXJlICdpbmNsdWRlcydpbmcgYSAnZ3lwJyBmaWxlLCBub3QgYSAnZ3lwaScgZmlsZS4gIFRoZSBpZGVhCi0gICAgIyBpcyB0aGF0IHdlIGp1c3Qgd2FudCB0aGlzIGZpbGUgdG8gKmJlKiB0aGUgcGFyZW50IGd5cCBmaWxlLgotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2IzMGYyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBFdmVyZ3JlZW4gWDY0IFBsYXRmb3JtIFRlc3QgRmlsdGVycy4iIiIKLQotZnJvbSBzdGFyYm9hcmQuZXZlcmdyZWVuLng2NCBpbXBvcnQgdGVzdF9maWx0ZXJzIGFzIHBhcmVudF90ZXN0X2ZpbHRlcnMKLQotCi1kZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKLSAgcmV0dXJuIHBhcmVudF90ZXN0X2ZpbHRlcnMuRXZlcmdyZWVuWDY0VGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDUzOTkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLS8vIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIHNpbmNlIGl0cyBjcmVhdGlvbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDY0X1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhMzNlZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC90ZXN0X2ZpbHRlcnMucHkKaW5kZXggZjRlMzZkNy4uM2YxMTU2MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvdGVzdF9maWx0ZXJzLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3Rlc3RfZmlsdGVycy5weQpAQCAtMzksOCArMzksMTAgQEAKICAgICBpZiBub3QgaGFzX2NkbToKICAgICAgIHJldHVybiBmaWx0ZXJzCiAKKyAgICB0ZXN0X2ZpbHRlcnMgPSBbXQogICAgIGZvciB0ZXN0X2ZpbHRlciBpbiBmaWx0ZXJzOgogICAgICAgaWYgKHRlc3RfZmlsdGVyLnRhcmdldF9uYW1lID09ICducGxiJyBhbmQKICAgICAgICAgICB0ZXN0X2ZpbHRlci50ZXN0X25hbWUgPT0gJ1NiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zJyk6Ci0gICAgICAgIGZpbHRlcnMucmVtb3ZlKHRlc3RfZmlsdGVyKQotICAgIHJldHVybiBmaWx0ZXJzCisgICAgICAgIGNvbnRpbnVlCisgICAgICB0ZXN0X2ZpbHRlcnMuYXBwZW5kKHRlc3RfZmlsdGVyKQorICAgIHJldHVybiB0ZXN0X2ZpbHRlcnMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQyMGE1OC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9YNjRfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g2NF9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YNjRfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvdG9vbGNoYWluL0JVSUxELmduIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94NjQvdG9vbGNoYWluL0JVSUxELmduCmluZGV4IGJlNmZjYmIuLjZmZWRmNjIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDY0L3Rvb2xjaGFpbi9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g2NC90b29sY2hhaW4vQlVJTEQuZ24KQEAgLTE0LDEzICsxNCwyMyBAQAogCiBpbXBvcnQoIi8vYnVpbGQvY29uZmlnL2NsYW5nL2NsYW5nLmduaSIpCiBpbXBvcnQoIi8vYnVpbGQvdG9vbGNoYWluL2djY190b29sY2hhaW4uZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC90b29sY2hhaW4vdG9vbGNoYWluLmduaSIpCiAKIGNsYW5nX3Rvb2xjaGFpbigiaG9zdCIpIHsKICAgY2xhbmdfYmFzZV9wYXRoID0gY2xhbmdfYmFzZV9wYXRoCiB9CiAKLWNsYW5nX3Rvb2xjaGFpbigidGFyZ2V0IikgewotICBjbGFuZ19iYXNlX3BhdGggPSBjbGFuZ19iYXNlX3BhdGgKLSAgIyBUT0RPOiBhZGRpdGlvbmFsIHdvcmsgaXMgbGlrZWx5IG5lZWRlZCB0byBjb25maWd1cmUgdGhlIGxpbmtlciBmb3IKLSAgIyBldmVyZ3JlZW4gKHNlZSAvL3N0YXJib2FyZC90b29scy90b29sY2hhaW4vZXZlcmdyZWVuX2xpbmtlci5weSkuCitnY2NfdG9vbGNoYWluKCJ0YXJnZXQiKSB7CisgIGNjID0gZXZlcmdyZWVuX3RhcmdldF9jYworICBjeHggPSBldmVyZ3JlZW5fdGFyZ2V0X2N4eAorICBsZCA9IGV2ZXJncmVlbl90YXJnZXRfbGQKKyAgYXIgPSBldmVyZ3JlZW5fdGFyZ2V0X2FyCisgIG5tID0gZXZlcmdyZWVuX3RhcmdldF9ubQorCisgIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncyArPSBbICItbSBlbGZfeDg2XzY0IiBdCisgIGV4dHJhX2xkZmxhZ3MgPSBzdHJpbmdfam9pbigiICIsIGV2ZXJncmVlbl90YXJnZXRfZXh0cmFfbGRmbGFncykKKworICB0b29sY2hhaW5fYXJncyA9IHsKKyAgICBpc19jbGFuZyA9IHRydWUKKyAgfQogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvYXJncy5nbiBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2FyZ3MuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiNWVjYgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2FyZ3MuZ24KQEAgLTAsMCArMSwxNyBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3RhcmdldF9wbGF0Zm9ybSA9ICJldmVyZ3JlZW4teDg2IgordGFyZ2V0X29zID0gImxpbnV4IgordGFyZ2V0X2NwdSA9ICJ4ODYiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThlYmFjYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3lhc21fZXhpc3RzJzogMSwKLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJ2V2ZXJncmVlbi14ODYnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvaTM4NicsCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnIDogWwotICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgU3RhcmJvYXJkaXplZCBfX2V4dGVybmFsX3RocmVhZGluZyBmaWxlIGlzIGluY2x1ZGVkLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfRVhURVJOQUwnLAotICAgICAgIyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQKLSAgICAgICMgaW4gX19leHRlcm5hbF90aHJlYWRpbmcuCi0gICAgICAnX0xJQkNQUF9IQVNfVEhSRUFEX0xJQlJBUllfRVhURVJOQUwnLAotICAgICAgIyBFbmFibGUgR05VIGV4dGVuc2lvbnMgdG8gZ2V0IHByb3RvdHlwZXMgbGlrZSBmZnNsLgotICAgICAgJ19HTlVfU09VUkNFPTEnLAotICAgIF0sCi0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdldmVyZ3JlZW4teDg2X2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnZXZlcmdyZWVuLXg4Nl9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDg2X2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14ODZfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnZXZlcmdyZWVuLXg4Nl9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2d5cF9jb25maWd1cmF0aW9uLnB5CmluZGV4IDQ0MWM0ZTMuLmE5YzVlNDUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4MyArMTMsMTMgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAiIiJTdGFyYm9hcmQgZXZlcmdyZWVuLXg4NiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgogCi1pbXBvcnQgb3MucGF0aAotCi1mcm9tIHN0YXJib2FyZC5idWlsZCBpbXBvcnQgY2xhbmcgYXMgY2xhbmdfYnVpbGQKIGZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi5zaGFyZWQgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHNoYXJlZF9jb25maWd1cmF0aW9uCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGF0aHMKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGV2ZXJncmVlbl9saW5rZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgdG91Y2gKIAogCiBjbGFzcyBFdmVyZ3JlZW5YODZDb25maWd1cmF0aW9uKHNoYXJlZF9jb25maWd1cmF0aW9uLkV2ZXJncmVlbkNvbmZpZ3VyYXRpb24pOgogICAiIiJTdGFyYm9hcmQgRXZlcmdyZWVuIHg4NiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm09J2V2ZXJncmVlbi14ODYnLAotICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nKToKLSAgICAjIHB5bGludDogZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KLSAgICBzdXBlcihFdmVyZ3JlZW5YODZDb25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aCkKLQotICBkZWYgR2V0VGFyZ2V0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICByZXR1cm4gc2VsZi5HZXRIb3N0VG9vbGNoYWluKCoqa3dhcmdzKQotCi0gIGRlZiBHZXRIb3N0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnX2hvc3RfdG9vbGNoYWluJyk6Ci0gICAgICBlbnZfdmFyaWFibGVzID0gc2VsZi5HZXRFbnZpcm9ubWVudFZhcmlhYmxlcygpCi0gICAgICBjY19wYXRoID0gZW52X3ZhcmlhYmxlc1snQ0NfaG9zdCddCi0gICAgICBjeHhfcGF0aCA9IGVudl92YXJpYWJsZXNbJ0NYWF9ob3N0J10KLQotICAgICAgIyBUYWtlcyB0aGUgcHJvdmlkZWQgdmFsdWUgb2YgQ1hYX0hPU1Qgd2l0aCBhIHByZXBlbmRlZCAnY2NhY2hlJyBhbmQgYW4KLSAgICAgICMgYXBwZW5kZWQgJ2Jpbi9jbGFuZysrJyBhbmQgc3RyaXBzIHRoZW0gb2ZmLCBsZWF2aW5nIHVzIHdpdGggYW4gYWJzb2x1dGUKLSAgICAgICMgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Ygb3VyIHRvb2xjaGFpbi4KLSAgICAgIGJlZ2luX3BhdGhfaW5kZXggPSBjeHhfcGF0aC5maW5kKCcvJykKLSAgICAgIGVuZF9wYXRoX2luZGV4ID0gY3h4X3BhdGgucmZpbmQoJy8nLCAwLCBjeHhfcGF0aC5yZmluZCgnLycpKSArIDEKLSAgICAgIGN4eF9wYXRoX3Jvb3QgPSBjeHhfcGF0aFtiZWdpbl9wYXRoX2luZGV4OmVuZF9wYXRoX2luZGV4XQotCi0gICAgICBzZWxmLl9ob3N0X3Rvb2xjaGFpbiA9IFsKLSAgICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgICBjbGFuZy5DeHhDb21waWxlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgICBjbGFuZy5Bc3NlbWJsZXJXaXRoQ1ByZXByb2Nlc3NvcihwYXRoPWNjX3BhdGgpLAotICAgICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgICBhci5TdGF0aWNMaW5rZXIoKSwKLSAgICAgICAgICBjbGFuZ3h4LkV4ZWN1dGFibGVMaW5rZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgICAgZXZlcmdyZWVuX2xpbmtlci5TaGFyZWRMaWJyYXJ5TGlua2VyKAotICAgICAgICAgICAgICBwYXRoPWN4eF9wYXRoX3Jvb3QsIGV4dHJhX2ZsYWdzPVsnLW0gZWxmX2k2ODYnXSksCi0gICAgICAgICAgY3AuQ29weSgpLAotICAgICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgICAgXQotICAgIHJldHVybiBzZWxmLl9ob3N0X3Rvb2xjaGFpbgotCi0gIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKLSAgICBmaWx0ZXJzID0gc3VwZXIoRXZlcmdyZWVuWDg2Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotICAgICMgUmVtb3ZlIHRoZSBleGNsdXNpb24gZmlsdGVyIG9uIFNiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zLgotICAgICMgR2VuZXJhbGx5LCBjaGlsZHJlbiBvZiBsaW51eC9zaGFyZWQgZG8gbm90IHN1cHBvcnQgd2lkZXZpbmUsIGJ1dCBjaGlsZHJlbgotICAgICMgb2YgbGludXgveDY0eDExIGRvLCBpZiB0aGUgY29udGVudCBkZWNyeXB0aW9uIG1vZHVsZSBpcyBwcmVzZW50LgotCi0gICAgaGFzX2NkbSA9IG9zLnBhdGguaXNmaWxlKAotICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aHMuUkVQT1NJVE9SWV9ST09ULCAndGhpcmRfcGFydHknLCAnY2RtJywgJ2NkbScsCi0gICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZScsICdjb250ZW50X2RlY3J5cHRpb25fbW9kdWxlLmgnKSkKLQotICAgIGlmIG5vdCBoYXNfY2RtOgotICAgICAgcmV0dXJuIGZpbHRlcnMKLQotICAgIGZvciB0ZXN0X2ZpbHRlciBpbiBmaWx0ZXJzOgotICAgICAgaWYgKHRlc3RfZmlsdGVyLnRhcmdldF9uYW1lID09ICducGxiJyBhbmQKLSAgICAgICAgICB0ZXN0X2ZpbHRlci50ZXN0X25hbWUgPT0gJ1NiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zJyk6Ci0gICAgICAgIGZpbHRlcnMucmVtb3ZlKHRlc3RfZmlsdGVyKQotICAgIHJldHVybiBmaWx0ZXJzCisgIHBhc3MKIAogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIEV2ZXJncmVlblg4NkNvbmZpZ3VyYXRpb24oCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkveDg2L3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBFdmVyZ3JlZW5YODZDb25maWd1cmF0aW9uKCdldmVyZ3JlZW4teDg2JykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2luc3RhbGxfdGFyZ2V0LmduaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2luc3RhbGxfdGFyZ2V0LmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmIxMmJhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvaW5zdGFsbF90YXJnZXQuZ25pCkBAIC0wLDAgKzEsMjMgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvc3RyaXBfaW5zdGFsbF90YXJnZXQuZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90b29sY2hhaW4vc3RyaXAuZ25pIikKKwordGVtcGxhdGUoImluc3RhbGxfdGFyZ2V0IikgeworICBzdHJpcF9pbnN0YWxsX3RhcmdldCh0YXJnZXRfbmFtZSkgeworICAgIGZvcndhcmRfdmFyaWFibGVzX2Zyb20oaW52b2tlciwgIioiKQorICAgIHN0cmlwX2V4ZWN1dGFibGUgPSBzdHJpcF9leGVjdXRhYmxlCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24gYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjZkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitjb25maWcoInNhYmlfZmxhZ3MiKSB7CisgIGNmbGFncyA9IFsKKyAgICAiLW1hcmNoPWk2ODYiLAorICAgICItdGFyZ2V0IiwKKyAgICAiaTY4Ni11bmtub3duLXVua25vd24tZWxmIiwKKyAgXQorfQorCitjb25maWcoInBsYXRmb3JtX2NvbmZpZ3VyYXRpb24iKSB7CisgIGNvbmZpZ3MgPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIgXQorCisgIGlmIChjdXJyZW50X3Rvb2xjaGFpbiA9PSBkZWZhdWx0X3Rvb2xjaGFpbikgeworICAgIGNvbmZpZ3MgKz0gWworICAgICAgIjpzYWJpX2ZsYWdzIiwKKyAgICAgICIvL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24iLAorICAgIF0KKworICAgIGNmbGFncyA9IFsgIi1pc3lzdGVtIiArCisgICAgICAgICAgICAgICByZWJhc2VfcGF0aCgiLy90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvaTM4NiIsIHJvb3RfYnVpbGRfZGlyKSBdCisgIH0gZWxzZSB7CisgICAgY2ZsYWdzID0gWyAiLU8yIiBdCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzFkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0wLDAgKzEsMTggQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSIpCisKK3NhYmlfcGF0aCA9ICIvL3N0YXJib2FyZC9zYWJpL3g4Ni9zYWJpLXYkc2JfYXBpX3ZlcnNpb24uanNvbiIKK2luc3RhbGxfdGFyZ2V0X3BhdGggPSAiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9pbnN0YWxsX3RhcmdldC5nbmkiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2ZDdiNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZGZiODMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoZSBTdGFyYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgeDg2LiBPdGhlciBkZXZpY2VzIHdpbGwgaGF2ZQotLy8gc3BlY2lmaWMgU3RhcmJvYXJkIGltcGxlbWVudGF0aW9ucy4KLQotLy8gT3RoZXIgc291cmNlIGZpbGVzIHNob3VsZCBuZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5LCBidXQgc2hvdWxkCi0vLyBpbmNsdWRlIHRoZSBnZW5lcmljICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIiBpbnN0ZWFkLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfRVZFUkdSRUVOX1g4Nl9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2NvbmZpZ3VyYXRpb25fcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVmYjE0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3lhc21fZXhpc3RzJzogMSwKLSAgICAnc2JfdGFyZ2V0X3BsYXRmb3JtJzogJ2V2ZXJncmVlbi14ODYnLAotCi0gICAgJ2NvbXBpbGVyX2ZsYWdzJzogWwotICAgICAgJy1pc3lzdGVtPChjb2JhbHRfcmVwb19yb290KS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvaTM4NicsCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICMgRW5zdXJlIHRoYXQgdGhlIFN0YXJib2FyZGl6ZWQgX19leHRlcm5hbF90aHJlYWRpbmcgZmlsZSBpcyBpbmNsdWRlZC4KLSAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICMgRW5zdXJlIHRoYXQgb25seSB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgYW5kIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkCi0gICAgICAjIGluIF9fZXh0ZXJuYWxfdGhyZWFkaW5nLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9MSUJSQVJZX0VYVEVSTkFMJywKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnZXZlcmdyZWVuLXg4Ni1zYnZlcnNpb24tMTJfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xMl9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xMl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xMl9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xMl9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkZTQ0YmUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgZXZlcmdyZWVuLXg4NiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4ueDg2IGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uRXZlcmdyZWVuWDg2Q29uZmlndXJhdGlvbigKLSAgICAgICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xMicsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkveDg2L3NhYmktdjEyLmpzb24nKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhMzNlZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZmMxNWUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIEV2ZXJncmVlbiBYODYgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgotCi1mcm9tIHN0YXJib2FyZC5ldmVyZ3JlZW4ueDg2IGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgcGFyZW50X3Rlc3RfZmlsdGVycwotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gcGFyZW50X3Rlc3RfZmlsdGVycy5FdmVyZ3JlZW5YNjRUZXN0RmlsdGVycygpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhOWU0ZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEyX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTczNWU2Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4veDg2L2F0b21pY19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX1g4Nl9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI5NWExOS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhlIFN0YXJib2FyZCBjb25maWd1cmF0aW9uIGZvciB4ODYuIE90aGVyIGRldmljZXMgd2lsbCBoYXZlCi0vLyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb25zLgotCi0vLyBPdGhlciBzb3VyY2UgZmlsZXMgc2hvdWxkIG5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIgZGlyZWN0bHksIGJ1dCBzaG91bGQKLS8vIGluY2x1ZGUgdGhlIGdlbmVyaWMgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiIGluc3RlYWQuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEzX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX1g4Nl9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZmNiNjAuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAneWFzbV9leGlzdHMnOiAxLAotICAgICdzYl90YXJnZXRfcGxhdGZvcm0nOiAnZXZlcmdyZWVuLXg4NicsCi0KLSAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAnLWlzeXN0ZW08KGNvYmFsdF9yZXBvX3Jvb3QpL3RoaXJkX3BhcnR5L211c2wvYXJjaC9pMzg2JywKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnIDogWwotICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgU3RhcmJvYXJkaXplZCBfX2V4dGVybmFsX3RocmVhZGluZyBmaWxlIGlzIGluY2x1ZGVkLgotICAgICAgJ19MSUJDUFBfSEFTX1RIUkVBRF9BUElfRVhURVJOQUwnLAotICAgICAgIyBFbnN1cmUgdGhhdCBvbmx5IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhbmQgdHlwZSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQKLSAgICAgICMgaW4gX19leHRlcm5hbF90aHJlYWRpbmcuCi0gICAgICAnX0xJQkNQUF9IQVNfVEhSRUFEX0xJQlJBUllfRVhURVJOQUwnLAotICAgICAgIyBFbmFibGUgR05VIGV4dGVuc2lvbnMgdG8gZ2V0IHByb3RvdHlwZXMgbGlrZSBmZnNsLgotICAgICAgJ19HTlVfU09VUkNFPTEnLAotICAgIF0sCi0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdldmVyZ3JlZW4teDg2LXNidmVyc2lvbi0xM19kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2V2ZXJncmVlbi14ODYtc2J2ZXJzaW9uLTEzX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14ODYtc2J2ZXJzaW9uLTEzX2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14ODYtc2J2ZXJzaW9uLTEzX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2V2ZXJncmVlbi14ODYtc2J2ZXJzaW9uLTEzX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC9jb21waWxlcl9mbGFncy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzNzQ4Ny4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBldmVyZ3JlZW4teDg2IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZm9yIGd5cF9jb2JhbHQuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi54ODYgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uIGFzIHBhcmVudF9jb25maWd1cmF0aW9uCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBwYXJlbnRfY29uZmlndXJhdGlvbi5FdmVyZ3JlZW5YODZDb25maWd1cmF0aW9uKAotICAgICAgJ2V2ZXJncmVlbi14ODYtc2J2ZXJzaW9uLTEzJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94ODYvc2FiaS12MTMuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmEyOWY3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V2ZXJncmVlbi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmYzE1ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgRXZlcmdyZWVuIFg4NiBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmV2ZXJncmVlbi54ODYgaW1wb3J0IHRlc3RfZmlsdGVycyBhcyBwYXJlbnRfdGVzdF9maWx0ZXJzCi0KLQotZGVmIENyZWF0ZVRlc3RGaWx0ZXJzKCk6Ci0gIHJldHVybiBwYXJlbnRfdGVzdF9maWx0ZXJzLkV2ZXJncmVlblg2NFRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2NkOGUzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfRVZFUkdSRUVOX1g4Nl9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYTMzZWYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9ldmVyZ3JlZW4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdGVzdF9maWx0ZXJzLnB5CmluZGV4IGY4ZTk0NTAuLmNiNTVkMjkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3Rlc3RfZmlsdGVycy5weQorKysgYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90ZXN0X2ZpbHRlcnMucHkKQEAgLTM5LDggKzM5LDEwIEBACiAgICAgaWYgbm90IGhhc19jZG06CiAgICAgICByZXR1cm4gZmlsdGVycwogCisgICAgdGVzdF9maWx0ZXJzID0gW10KICAgICBmb3IgdGVzdF9maWx0ZXIgaW4gZmlsdGVyczoKICAgICAgIGlmICh0ZXN0X2ZpbHRlci50YXJnZXRfbmFtZSA9PSAnbnBsYicgYW5kCiAgICAgICAgICAgdGVzdF9maWx0ZXIudGVzdF9uYW1lID09ICdTYkRybVRlc3QuQW55U3VwcG9ydGVkS2V5U3lzdGVtcycpOgotICAgICAgICBmaWx0ZXJzLnJlbW92ZSh0ZXN0X2ZpbHRlcikKLSAgICByZXR1cm4gZmlsdGVycworICAgICAgICBjb250aW51ZQorICAgICAgdGVzdF9maWx0ZXJzLmFwcGVuZCh0ZXN0X2ZpbHRlcikKKyAgICByZXR1cm4gdGVzdF9maWx0ZXJzCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MWYwNmEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0VWRVJHUkVFTl9YODZfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9FVkVSR1JFRU5fWDg2X1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3Rvb2xjaGFpbi9CVUlMRC5nbiBiL3N0YXJib2FyZC9ldmVyZ3JlZW4veDg2L3Rvb2xjaGFpbi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQ0YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdG9vbGNoYWluL0JVSUxELmduCkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL2NsYW5nL2NsYW5nLmduaSIpCitpbXBvcnQoIi8vYnVpbGQvdG9vbGNoYWluL2djY190b29sY2hhaW4uZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvZXZlcmdyZWVuL3NoYXJlZC90b29sY2hhaW4vdG9vbGNoYWluLmduaSIpCisKK2NsYW5nX3Rvb2xjaGFpbigiaG9zdCIpIHsKKyAgY2xhbmdfYmFzZV9wYXRoID0gY2xhbmdfYmFzZV9wYXRoCit9CisKK2djY190b29sY2hhaW4oInRhcmdldCIpIHsKKyAgY2MgPSBldmVyZ3JlZW5fdGFyZ2V0X2NjCisgIGN4eCA9IGV2ZXJncmVlbl90YXJnZXRfY3h4CisgIGxkID0gZXZlcmdyZWVuX3RhcmdldF9sZAorICBhciA9IGV2ZXJncmVlbl90YXJnZXRfYXIKKyAgbm0gPSBldmVyZ3JlZW5fdGFyZ2V0X25tCisKKyAgZXh0cmFfbGRmbGFncyA9IHN0cmluZ19qb2luKCIgIiwgZXZlcmdyZWVuX3RhcmdldF9leHRyYV9sZGZsYWdzKQorCisgIHRvb2xjaGFpbl9hcmdzID0geworICAgIGlzX2NsYW5nID0gdHJ1ZQorICB9Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvZXZlcmdyZWVuL3g4Ni90b29sY2hhaW4vc3RyaXAuZ25pIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdG9vbGNoYWluL3N0cmlwLmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzFmNGVlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2V2ZXJncmVlbi94ODYvdG9vbGNoYWluL3N0cmlwLmduaQpAQCAtMCwwICsxLDE1IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3RyaXBfZXhlY3V0YWJsZSA9ICJzdHJpcCIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9leGFtcGxlcy9leGFtcGxlcy5neXAgYi9zdGFyYm9hcmQvZXhhbXBsZXMvZXhhbXBsZXMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTc1Njc4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9leGFtcGxlcy9leGFtcGxlcy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZXhhbXBsZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V4YW1wbGVzL3dpbmRvdy93aW5kb3cuZ3lwOnN0YXJib2FyZF93aW5kb3dfZXhhbXBsZScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnZ2xfdHlwZSAhPSAibm9uZSInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZXhhbXBsZXMvZ2xjbGVhci9nbGNsZWFyLmd5cDpzdGFyYm9hcmRfZ2xjbGVhcl9leGFtcGxlJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9leGFtcGxlcy9nbGNsZWFyL2dsY2xlYXIuZ3lwIGIvc3RhcmJvYXJkL2V4YW1wbGVzL2dsY2xlYXIvZ2xjbGVhci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiODE0ZjYzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9leGFtcGxlcy9nbGNsZWFyL2dsY2xlYXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0YXJib2FyZF9nbGNsZWFyX2V4YW1wbGUnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3NiX2V2ZXJncmVlbiAhPSAxJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXMuZ3lwOmVnbF9hbmRfZ2xlcycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdtYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX2dsY2xlYXJfZXhhbXBsZV9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnc3RhcmJvYXJkX2dsY2xlYXJfZXhhbXBsZScsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdzdGFyYm9hcmRfZ2xjbGVhcl9leGFtcGxlJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9leGFtcGxlcy9nbGNsZWFyL21haW4uY2MgYi9zdGFyYm9hcmQvZXhhbXBsZXMvZ2xjbGVhci9tYWluLmNjCmluZGV4IGZjYzU0MzYuLjJhNGUzNjEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9leGFtcGxlcy9nbGNsZWFyL21haW4uY2MKKysrIGIvc3RhcmJvYXJkL2V4YW1wbGVzL2dsY2xlYXIvbWFpbi5jYwpAQCAtMTU1LDExICsxNTUsNyBAQAogICBTYkVnbEludDMyIGNvbnRleHRfYXR0cmliX2xpc3RbXSA9IHsKICAgICAgIFNCX0VHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAzLCBTQl9FR0xfTk9ORSwKICAgfTsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyICYmIGRlZmluZWQoR0xFUzNfU1VQUE9SVEVEKQotICAvLyBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBPcGVuR0wgRVMgMy4wIGNvbnRleHQuCi0gIGNvbnRleHRfID0gRUdMX0NBTExfU0lNUExFKGVnbENyZWF0ZUNvbnRleHQoCi0gICAgICBkaXNwbGF5XywgY29uZmlnLCBTQl9FR0xfTk9fQ09OVEVYVCwgY29udGV4dF9hdHRyaWJfbGlzdCkpOwotI2VuZGlmCisKICAgaWYgKGNvbnRleHRfID09IFNCX0VHTF9OT19DT05URVhUKSB7CiAgICAgLy8gQ3JlYXRlIGFuIE9wZW5HTCBFUyAyLjAgY29udGV4dC4KICAgICBjb250ZXh0X2F0dHJpYl9saXN0WzFdID0gMjsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9leGFtcGxlcy93aW5kb3cvd2luZG93Lmd5cCBiL3N0YXJib2FyZC9leGFtcGxlcy93aW5kb3cvd2luZG93Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E4YTI4Mi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvZXhhbXBsZXMvd2luZG93L3dpbmRvdy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX3dpbmRvd19leGFtcGxlJywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfd2luZG93X2V4YW1wbGVfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3N0YXJib2FyZF93aW5kb3dfZXhhbXBsZScsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdzdGFyYm9hcmRfd2luZG93X2V4YW1wbGUnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2ZpbGUuaCBiL3N0YXJib2FyZC9maWxlLmgKaW5kZXggOWNiNzFkNi4uNDQ0OGY1ZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2ZpbGUuaAorKysgYi9zdGFyYm9hcmQvZmlsZS5oCkBAIC0xNTUsOCArMTU1LDYgQEAKIC8vIHxmaWxlfDogVGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgY2xvc2VkLgogU0JfRVhQT1JUIGJvb2wgU2JGaWxlQ2xvc2UoU2JGaWxlIGZpbGUpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgYXQgfHBhdGh8IHdpdGggfGRhdGF8LiBSZXR1cm5zIHdoZXRoZXIgdGhlCiAvLyBjb250ZW50cyBvZiB0aGUgZmlsZSB3ZXJlIHJlcGxhY2VkLiBUaGUgcmVwbGFjZW1lbnQgb2YgdGhlIGNvbnRlbnQgaXMgYW4KIC8vIGF0b21pYyBvcGVyYXRpb24uIFRoZSBmaWxlIHdpbGwgZWl0aGVyIGhhdmUgYWxsIG9mIHRoZSBkYXRhLCBvciBub25lLgpAQCAtMTY4LDggKzE2Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YV9zaXplKTsKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyBDaGFuZ2VzIHRoZSBjdXJyZW50IHJlYWQvd3JpdGUgcG9zaXRpb24gaW4gfGZpbGV8LiBUaGUgcmV0dXJuIHZhbHVlCiAvLyBpZGVudGlmaWVzIHRoZSByZXN1bHRhbnQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlIChyZWxhdGl2ZQogLy8gdG8gdGhlIHN0YXJ0KSBvciB8LTF8IGluIGNhc2Ugb2YgYW4gZXJyb3IuIFRoaXMgZnVuY3Rpb24gbWlnaHQgbm90IHN1cHBvcnQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9pbnB1dC5oIGIvc3RhcmJvYXJkL2lucHV0LmgKaW5kZXggYzViNjM3OC4uZmM4ZDVmMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2lucHV0LmgKKysrIGIvc3RhcmJvYXJkL2lucHV0LmgKQEAgLTcwLDEzICs3MCwxMCBAQAogICAvLyBQcm9kdWNlcyB8TW92ZXwsIHxQcmVzc3wsIGFuZCB8VW5wcmVzc3wgZXZlbnRzLgogICBrU2JJbnB1dERldmljZVR5cGVUb3VjaFBhZCwKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCiAgIC8vIEtleWJvYXJkIGlucHV0IGZyb20gYW4gb24gc2NyZWVuIGtleWJvYXJkLgogICAvLwogICAvLyBQcm9kdWNlcyB8SW5wdXR8IGV2ZW50cy4KICAga1NiSW5wdXREZXZpY2VUeXBlT25TY3JlZW5LZXlib2FyZCwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIH0gU2JJbnB1dERldmljZVR5cGU7CiAKIC8vIFRoZSBhY3Rpb24gdGhhdCBhbiBpbnB1dCBldmVudCByZXByZXNlbnRzLgpAQCAtMTAwLDExICs5Nyw4IEBACiAgIC8vIFdoZWVsIG1vdmVtZW50LiBQcm92aWRlcyByZWxhdGl2ZSBtb3ZlbWVudHMgb2YgdGhlIHxNb3VzZXwgd2hlZWwuCiAgIGtTYklucHV0RXZlbnRUeXBlV2hlZWwsCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQogICAvLyBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2V2ZW50LXR5cGUtaW5wdXQKICAga1NiSW5wdXRFdmVudFR5cGVJbnB1dCwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIH0gU2JJbnB1dEV2ZW50VHlwZTsKIAogLy8gQSAyLWRpbWVuc2lvbmFsIHZlY3RvciB1c2VkIHRvIHJlcHJlc2VudCBwb2ludHMgYW5kIG1vdGlvbiB2ZWN0b3JzLgpAQCAtMTgxLDEzICsxNzUsMTIgQEAKICAgLy8gdG93YXJkcyB0aGUgdXNlciAoeSkuIFVzZSAoTmFOLCBOYU4pIGZvciBkZXZpY2VzIHRoYXQgZG8gbm90IHJlcG9ydCB0aWx0LgogICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgZm9yIGlucHV0IGV2ZW50cyB3aXRoIGRldmljZSB0eXBlIG1vdXNlIG9yIHRvdWNoIHNjcmVlbi4KICAgU2JJbnB1dFZlY3RvciB0aWx0OwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCisKICAgLy8gVGhlIHRleHQgdG8gaW5wdXQgZm9yIGV2ZW50cyBvZiB0eXBlIHxJbnB1dHwuCiAgIGNvbnN0IGNoYXIqIGlucHV0X3RleHQ7CiAKICAgLy8gU2V0IHRvIHRydWUgaWYgdGhlIGlucHV0IGV2ZW50IGlzIHBhcnQgb2YgYSBjb21wb3NpdGlvbiBldmVudC4KICAgYm9vbCBpc19jb21wb3Npbmc7Ci0jZW5kaWYKIH0gU2JJbnB1dERhdGE7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9CVUlMRC5nbiBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvQlVJTEQuZ24KaW5kZXggNzNlMmE5My4uOGU0YTEwNyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL0JVSUxELmduCkBAIC04Myw5ICs4Myw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfdXRpbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfdXRpbC5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RldmljZWF1dGgvZGV2aWNlYXV0aF9pbnRlcm5hbC5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfbWFwLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV91bm1hcC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9lZ2wvc3lzdGVtX2VnbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9nY2MvYXRvbWljX2djY19wdWJsaWMuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9nbGVzL3N5c3RlbV9nbGVzMi5jYyIsCkBAIC0xNDgsNyArMTQ1LDYgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2Rldl9pbnB1dC9kZXZfaW5wdXQuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9nZXRfaG9tZV9kaXJlY3RvcnkuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvbWVtb3J5X2dldF9zdGFja19ib3VuZHMuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvcGFnZV9pbnRlcm5hbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zb2NrZXRfZ2V0X2ludGVyZmFjZV9hZGRyZXNzLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc3lzdGVtX2dldF9zdGFjay5jYyIsCkBAIC0xNjcsNiArMTYzLDcgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL29wdXMvb3B1c19hdWRpb19kZWNvZGVyLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL29wdXMvb3B1c19hdWRpb19kZWNvZGVyLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZGlyZWN0b3J5X2NyZWF0ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9lbnZpcm9ubWVudC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2F0b21pY19yZXBsYWNlLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfY2FuX29wZW4uY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9jbG9zZS5jYyIsCkBAIC0xOTAsOCArMTg3LDEyIEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2ZsdXNoLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9mcmVlX2FsaWduZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X21hcC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfbWFwcGVkX2ZpbGUuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X21hcHBlZF9maWxlLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3Byb3RlY3QuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3VubWFwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfYWNjZXB0LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9iaW5kLmNjIiwKQEAgLTMzMCwxMiArMzMxLDEyIEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3ZpZGVvX2J1ZmZlcl9idWRnZXQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl9wb29sX2FsbG9jYXRlX29uX2RlbWFuZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZW1vcnkuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9xdWV1ZV9hcHBsaWNhdGlvbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2NvbmNhdC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2NvbmNhdF93aWRlLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29weS5jYyIsCkBAIC0zNTQsMTUgKzM1NSw3IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2Rpc3BsYXlfc2V0dGluZ3MuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X2dldF90ZXh0X3RvX3NwZWVjaF9zZXR0aW5ncy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2Rlc3Ryb3lfdHJhbnNmb3JtZXIuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZ2V0X3RhZy5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3NldF9pbml0aWFsaXphdGlvbl92ZWN0b3IuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfb3V0cHV0X3Byb3RlY3RlZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9vdXRwdXRfcHJvdGVjdGlvbi5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY2xvc2UuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2NyZWF0ZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZGVzdHJveS5jYyIsCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5M2RjOTguLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgQ29iYWx0LW9uLUxpbnV4LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnaW5fYXBwX2RpYWwlJzogMSwKLSAgfSwgIyBlbmQgb2YgdmFyaWFibGVzCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weQppbmRleCBjZTMxMzA2Li43MjUzMmU5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKQEAgLTEzLDggKzEzLDYgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAiIiJTdGFyYm9hcmQgTGludXggQ29iYWx0IHNoYXJlZCBjb25maWd1cmF0aW9uLiIiIgogCi1pbXBvcnQgb3MKLQogZnJvbSBjb2JhbHQuYnVpbGQgaW1wb3J0IGNvYmFsdF9jb25maWd1cmF0aW9uCiBmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCkBAIC0yMiwyNCArMjAsMTEgQEAKIGNsYXNzIENvYmFsdExpbnV4Q29uZmlndXJhdGlvbihjb2JhbHRfY29uZmlndXJhdGlvbi5Db2JhbHRDb25maWd1cmF0aW9uKToKICAgIiIiU3RhcmJvYXJkIExpbnV4IENvYmFsdCBzaGFyZWQgY29uZmlndXJhdGlvbi4iIiIKIAotICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm1fY29uZmlndXJhdGlvbiwgYXBwbGljYXRpb25fbmFtZSwKLSAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2RpcmVjdG9yeSk6Ci0gICAgc3VwZXIoQ29iYWx0TGludXhDb25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXygKLSAgICAgICAgcGxhdGZvcm1fY29uZmlndXJhdGlvbiwgYXBwbGljYXRpb25fbmFtZSwgYXBwbGljYXRpb25fZGlyZWN0b3J5KQotCi0gIGRlZiBHZXRQb3N0SW5jbHVkZXMoc2VsZik6Ci0gICAgIyBJZiB0aGVyZSBpc24ndCBhIGNvbmZpZ3VyYXRpb24uZ3lwaSBmb3VuZCBpbiB0aGUgdXN1YWwgcGxhY2UsIHdlJ2xsCi0gICAgIyBzdXBwbGVtZW50IHdpdGggb3VyIHNoYXJlZCBpbXBsZW1lbnRhdGlvbi4KLSAgICBpbmNsdWRlcyA9IHN1cGVyKENvYmFsdExpbnV4Q29uZmlndXJhdGlvbiwgc2VsZikuR2V0UG9zdEluY2x1ZGVzKCkKLSAgICBmb3IgaW5jbHVkZSBpbiBpbmNsdWRlczoKLSAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoaW5jbHVkZSkgPT0gJ2NvbmZpZ3VyYXRpb24uZ3lwaSc6Ci0gICAgICAgIHJldHVybiBpbmNsdWRlcwotCi0gICAgc2hhcmVkX2d5cGlfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZ3VyYXRpb24uZ3lwaScpCi0gICAgaWYgb3MucGF0aC5pc2ZpbGUoc2hhcmVkX2d5cGlfcGF0aCk6Ci0gICAgICBpbmNsdWRlcy5hcHBlbmQoc2hhcmVkX2d5cGlfcGF0aCkKLSAgICByZXR1cm4gaW5jbHVkZXMKKyAgZGVmIF9faW5pdF9fKCAgIyBweWxpbnQ6ZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KKyAgICAgIHNlbGYsIHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24sIGFwcGxpY2F0aW9uX25hbWUsIGFwcGxpY2F0aW9uX2RpcmVjdG9yeSk6CisgICAgc3VwZXIoQ29iYWx0TGludXhDb25maWd1cmF0aW9uLAorICAgICAgICAgIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24sIGFwcGxpY2F0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25fZGlyZWN0b3J5KQogCiAgIGRlZiBXZWJkcml2ZXJCZW5jaG1hcmtzRW5hYmxlZChzZWxmKToKICAgICByZXR1cm4gVHJ1ZQpAQCAtNTgsNyArNDMsNyBAQAogICAgICAgICAgICAgJ2RlYnVnJyksCiAgICAgICAgIHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIoCiAgICAgICAgICAgICAnd2ViX3BsYXRmb3JtX3Rlc3RzJywKLSAgICAgICAgICAgICdzdHJlYW1zL1dlYlBsYXRmb3JtVGVzdC5SdW4vc3RyZWFtc19yZWFkYWJsZV9zdHJlYW1zX3RlbXBsYXRlZF9odG1sJywKKyAgICAgICAgICAgICdzdHJlYW1zL1dlYlBsYXRmb3JtVGVzdC5SdW4vc3RyZWFtc19yZWFkYWJsZV9zdHJlYW1zX3RlbXBsYXRlZF9odG1sJywgICMgcHlsaW50OmRpc2FibGU9bGluZS10b28tbG9uZwogICAgICAgICAgICAgJ2RlYnVnJyksCiAgICAgICAgIHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIoCiAgICAgICAgICAgICAnd2ViX3BsYXRmb3JtX3Rlc3RzJywKQEAgLTY4LDcgKzUzLDEzIEBACiAKICAgZGVmIEdldFRlc3RFbnZWYXJpYWJsZXMoc2VsZik6CiAgICAgcmV0dXJuIHsKLSAgICAgICAgJ2Jhc2VfdW5pdHRlc3RzJzogeydBU0FOX09QVElPTlMnOiAnZGV0ZWN0X2xlYWtzPTAnfSwKLSAgICAgICAgJ2NyeXB0b191bml0dGVzdHMnOiB7J0FTQU5fT1BUSU9OUyc6ICdkZXRlY3RfbGVha3M9MCd9LAotICAgICAgICAnbmV0X3VuaXR0ZXN0cyc6IHsnQVNBTl9PUFRJT05TJzogJ2RldGVjdF9sZWFrcz0wJ30KKyAgICAgICAgJ2Jhc2VfdW5pdHRlc3RzJzogeworICAgICAgICAgICAgJ0FTQU5fT1BUSU9OUyc6ICdkZXRlY3RfbGVha3M9MCcKKyAgICAgICAgfSwKKyAgICAgICAgJ2NyeXB0b191bml0dGVzdHMnOiB7CisgICAgICAgICAgICAnQVNBTl9PUFRJT05TJzogJ2RldGVjdF9sZWFrcz0wJworICAgICAgICB9LAorICAgICAgICAnbmV0X3VuaXR0ZXN0cyc6IHsKKyAgICAgICAgICAgICdBU0FOX09QVElPTlMnOiAnZGV0ZWN0X2xlYWtzPTAnCisgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZTRiZWEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb21waWxlcl9mbGFncy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGZvciBMaW51eCBvbiBTdGFyYm9hcmQuIEluY2x1ZGVkIGZyb20KLSMgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaS4KLSMKLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY29tcGlsZXJfZmxhZ3NfaG9zdCc6IFsKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2xpbmtlcl9mbGFncyc6IFsKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICctZnJ0dGknLAotICAgICAgJy1PMCcsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19xYV9zaXplJzogWwotICAgICAgJy1PcycsCi0gICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucwotICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfcWFfc3BlZWQnOiBbCi0gICAgICAnLU8yJywKLSAgICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkX3NpemUnOiBbCi0gICAgICAnLU9zJywKLSAgICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19nb2xkX3NwZWVkJzogWwotICAgICAgJy1PMicsCi0gICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucwotICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAgICdsaW5rZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mdXNlLWxkPWxsZCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21tb25fY2xhbmdfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1XZXJyb3InLAotICAgICAgICAgICctZmNvbG9yLWRpYWdub3N0aWNzJywKLSAgICAgICAgICAjIERlZmF1bHQgdmlzaWJpbGl0eSB0byBoaWRkZW4sIHRvIGVuYWJsZSBkZWFkIHN0cmlwcGluZy4KLSAgICAgICAgICAnLWZ2aXNpYmlsaXR5PWhpZGRlbicsCi0gICAgICAgICAgIyBXYXJuIGZvciBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSBhIHZhbHVlLgotICAgICAgICAgICctV2NvbnZlcnNpb24nLAotICAgICAgICAgICMgV2FybnMgb24gc3dpdGNoZXMgb24gZW51bXMgdGhhdCBjb3ZlciBhbGwgZW51bSB2YWx1ZXMgYnV0Ci0gICAgICAgICAgIyBhbHNvIGNvbnRhaW4gYSBkZWZhdWx0OiBicmFuY2guIENocm9tZSBpcyBmdWxsIG9mIHRoYXQuCi0gICAgICAgICAgJy1Xbm8tY292ZXJlZC1zd2l0Y2gtZGVmYXVsdCcsCi0gICAgICAgICAgIyBwcm90b2J1ZiB1c2VzIGhhc2hfbWFwLgotICAgICAgICAgICctV25vLWRlcHJlY2F0ZWQnLAotICAgICAgICAgICctZm5vLWV4Y2VwdGlvbnMnLAotICAgICAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCB0aGUgInN0cnVjdCBmb28gZiA9IHswfTsiIGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gZm9yIGltcGxpY2l0IHNpZ24gY29udmVyc2lvbnMuCi0gICAgICAgICAgJy1Xbm8tc2lnbi1jb252ZXJzaW9uJywKLSAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLCAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8zMjIwNAotICAgICAgICAgICctV25vLXVubmFtZWQtdHlwZS10ZW1wbGF0ZS1hcmdzJywKLSAgICAgICAgICAjIFRyaWdnZXJlZCBieSB0aGUgQ09NUElMRV9BU1NFUlQgbWFjcm8uCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWYnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gaWYgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBjYW5ub3QgYmUgaW1wbGljaXRseQotICAgICAgICAgICMgaW5zdGFudGlhdGVkLgotICAgICAgICAgICctV25vLXVuZGVmaW5lZC12YXItdGVtcGxhdGUnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gYWJvdXQgYW4gaW1wbGljaXQgZXhjZXB0aW9uIHNwZWMgbWlzbWF0Y2guCi0gICAgICAgICAgJy1Xbm8taW1wbGljaXQtZXhjZXB0aW9uLXNwZWMtbWlzbWF0Y2gnLAotICAgICAgICAgICMgSXQncyBPSyBub3QgdG8gdXNlIHNvbWUgaW5wdXQgcGFyYW1ldGVycy4KLSAgICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfZmFzdGJ1aWxkPT0wJywgewotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZGVidWcnOiBbCi0gICAgICAgICAgJy1nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2RldmVsJzogWwotICAgICAgICAgICctZycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19xYSc6IFsKLSAgICAgICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGQnOiBbCi0gICAgICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAjIEJ5IGRlZmF1bHQsIDxFR0wvZWdscGxhdGZvcm0uaD4gcHVsbHMgaW4gc29tZSBYMTEgaGVhZGVycyB0aGF0IGhhdmUgc29tZQotICAgICAgIyBuYXN0eSBtYWNyb3MgKHxTdGF0dXN8LCBmb3IgZXhhbXBsZSkgdGhhdCBjb25mbGljdCB3aXRoIENocm9taXVtIGJhc2UuCi0gICAgICAnTUVTQV9FR0xfTk9fWDExX0hFQURFUlMnCi0gICAgXSwKLSAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAjIExpbWl0IHRvIEM5OS4gVGhpcyBhbGxvd3MgTGludXggdG8gYmUgYSBjYW5hcnkgYnVpbGQgZm9yIGFueQotICAgICAgIyBDMTEgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBvbiBzb21lIHBsYXRmb3JtcycgY29tcGlsZXJzLgotICAgICAgJy1zdGQ9Yzk5JywKLSAgICBdLAotICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAnLXN0ZD1nbnUrKzE0JywKLSAgICBdLAotICAgICdsZGZsYWdzJzogWwotICAgICAgJy1XbCwtcnBhdGg9JE9SSUdJTi9saWInLAotICAgICAgIyBDbGVhbnVwIHVudXNlZCBzZWN0aW9ucwotICAgICAgJy1XbCwtZ2Mtc2VjdGlvbnMnLAotICAgIF0sCi0gICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgWydzYl9wZWRhbnRpY193YXJuaW5ncz09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICctV2V4dHJhJywKLSAgICAgICAgICAnLVd1bnJlYWNoYWJsZS1jb2RlJywKLSAgICAgICAgICAnPEAoY29tbW9uX2NsYW5nX2ZsYWdzKScsCi0gICAgICAgIF0sCi0gICAgICB9LHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnPEAoY29tbW9uX2NsYW5nX2ZsYWdzKScsCi0gICAgICAgICAgIyAndGhpcycgcG9pbnRlciBjYW5ub3QgYmUgTlVMTC4uLnBvaW50ZXIgbWF5IGJlIGFzc3VtZWQKLSAgICAgICAgICAjIHRvIGFsd2F5cyBjb252ZXJ0IHRvIHRydWUuCi0gICAgICAgICAgJy1Xbm8tdW5kZWZpbmVkLWJvb2wtY29udmVyc2lvbicsCi0gICAgICAgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KLSAgICAgICAgICAnLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZScsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBmb3IgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9ucyB0aGF0IG1heSBjaGFuZ2UgYSB2YWx1ZS4KLSAgICAgICAgICAnLVduby1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIHNoaWZ0aW5nIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlIGlzIHVuZGVmaW5lZAotICAgICAgICAgICctV25vLXNoaWZ0LW5lZ2F0aXZlLXZhbHVlJywKLSAgICAgICAgICAjIFdpZHRoIG9mIGJpdC1maWVsZCBleGNlZWRzIHdpZHRoIG9mIGl0cyB0eXBlLSB2YWx1ZSB3aWxsIGJlIHRydW5jYXRlZAotICAgICAgICAgICctV25vLWJpdGZpZWxkLXdpZHRoJywKLSAgICAgICAgICAnLVduby11bmRlZmluZWQtdmFyLXRlbXBsYXRlJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWyd1c2Vfc291cmNlX2NvZGVfY292ZXJhZ2U9PTEnLCB7Ci0gICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgIyBFbmFibGUgU291cmNlIEJhc2VkIENvZGUgQ292ZXJhZ2UgaW5zdHJ1bWVudGF0aW9uLgotICAgICAgICAgICMgU2VlIGh0dHBzOi8vY2xhbmcubGx2bS5vcmcvZG9jcy9Tb3VyY2VCYXNlZENvZGVDb3ZlcmFnZS5odG1sCi0gICAgICAgICAgJy1mcHJvZmlsZS1pbnN0ci1nZW5lcmF0ZScsCi0gICAgICAgICAgJy1mY292ZXJhZ2UtbWFwcGluZycsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICMgRW5hYmxlIFNvdXJjZSBCYXNlZCBDb2RlIENvdmVyYWdlIGluc3RydW1lbnRhdGlvbi4KLSAgICAgICAgICAjIFNlZSBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvU291cmNlQmFzZWRDb2RlQ292ZXJhZ2UuaHRtbAotICAgICAgICAgICctZnByb2ZpbGUtaW5zdHItZ2VuZXJhdGUnLAotICAgICAgICAgICctZmNvdmVyYWdlLW1hcHBpbmcnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVVNFX1NPVVJDRV9DT0RFX0NPVkVSQUdFJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWyd1c2VfYXNhbj09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT1hZGRyZXNzJywKLSAgICAgICAgICAnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInLAotICAgICAgICBdLAotICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT1hZGRyZXNzJywKLSAgICAgICAgICAjIEZvcmNlIGxpbmtpbmcgb2YgdGhlIGhlbHBlcnMgaW4gc2FuaXRpemVyX29wdGlvbnMuY2MKLSAgICAgICAgICAnLVdsLC11X3Nhbml0aXplcl9vcHRpb25zX2xpbmtfaGVscGVyJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0FERFJFU1NfU0FOSVRJWkVSJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydhc2FuX3N5bWJvbGl6ZXJfcGF0aCE9IiInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0FTQU5fU1lNQk9MSVpFUl9QQVRIPSI8QChhc2FuX3N5bWJvbGl6ZXJfcGF0aCkiJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsndXNlX3RzYW49PTEnLCB7Ci0gICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mc2FuaXRpemU9dGhyZWFkJywKLSAgICAgICAgICAnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInLAotICAgICAgICBdLAotICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT10aHJlYWQnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVEhSRUFEX1NBTklUSVpFUicsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LCAjIGVuZCBvZiB0YXJnZXRfZGVmYXVsdHMKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmNjCmluZGV4IGM4ZTU4YzIuLjUyMTBlNzkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5jYwpAQCAtMTYsOSArMTYsNyBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0vLyBEZXRlcm1pbmVzIHRoZSB0aHJlc2hob2xkIG9mIGFsbG9jYXRpb24gc2l6ZSB0aGF0IHNob3VsZCBiZSBkb25lIHdpdGggbW1hcAorLy8gRGV0ZXJtaW5lcyB0aGUgdGhyZXNob2xkIG9mIGFsbG9jYXRpb24gc2l6ZSB0aGF0IHNob3VsZCBiZSBkb25lIHdpdGggbW1hcAogLy8gKGlmIGF2YWlsYWJsZSksIHJhdGhlciB0aGFuIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGNvcmUgaGVhcC4KIGNvbnN0IHNpemVfdCBrU2JEZWZhdWx0TW1hcFRocmVzaG9sZCA9IDI1NiAqIDEwMjRVOwogCkBAIC0xMjksNSArMTI3LDMgQEAKIAogLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHVzZXJzIHRoYXQgY2FuIGJlIHNpZ25lZCBpbiBhdCB0aGUgc2FtZSB0aW1lLgogY29uc3QgdWludDMyX3Qga1NiVXNlck1heFNpZ25lZEluID0gMTsKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmluZGV4IDNkMjRlNzEuLmQyYjQ3MzIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTEwNCwxOTEgKzEwNCwyNCBAQAogLy8gVGhlIGxvY2F0aW9uIHRvIGluY2x1ZGUgaGFzaF9zZXQgb24gdGhpcyBwbGF0Zm9ybS4KICNkZWZpbmUgU0JfSEFTSF9TRVRfSU5DTFVERSA8ZXh0L2hhc2hfc2V0PgogCi0vLyAtLS0gRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgbWF4aW11bSBsZW5ndGggb2YgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5Ci0vLyBlbnRyeSwgbm90IGluY2x1ZGluZyB0aGUgYWJzb2x1dGUgcGF0aC4KLSNkZWZpbmUgU0JfRklMRV9NQVhfTkFNRSA2NAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgY3VycmVudCBwbGF0Zm9ybSdzIG1heGltdW0gbGVuZ3RoIG9mIGFuIGFic29sdXRlIHBhdGguCi0jZGVmaW5lIFNCX0ZJTEVfTUFYX1BBVEggNDA5NgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgY3VycmVudCBwbGF0Zm9ybSdzIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW5lZCBhdCB0aGUKLS8vIHNhbWUgdGltZSBieSBvbmUgcHJvY2Vzcy4KLSNkZWZpbmUgU0JfRklMRV9NQVhfT1BFTiAyNTYKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gVGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBmaWxlIHBhdGggY29tcG9uZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIuIFRoaXMgaXMgdGhlCi0vLyBjaGFyYWN0ZXIgdGhhdCBhcHBlYXJzIGFmdGVyIGEgZGlyZWN0b3J5IGluIGEgZmlsZSBwYXRoLiBGb3IgZXhhbXBsZSwgdGhlCi0vLyBhYnNvbHV0ZSBjYW5vbmljYWwgcGF0aCBvZiB0aGUgZmlsZSAiL3BhdGgvdG8vYS9maWxlLnR4dCIgdXNlcyAnLycgYXMgYSBwYXRoCi0vLyBjb21wb25lbnQgc2VwYXJhdG9yIGNoYXJhY3Rlci4KLSNkZWZpbmUgU0JfRklMRV9TRVBfQ0hBUiAnLycKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gVGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBhbHRlcm5hdGUgZmlsZSBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotLy8gVGhpcyBpcyBsaWtlIFNCX0ZJTEVfU0VQX0NIQVIsIGV4Y2VwdCBpZiB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGFuIGFsdGVybmF0ZQotLy8gY2hhcmFjdGVyLCB0aGVuIHlvdSBjYW4gcGxhY2UgdGhhdCBoZXJlLiBGb3IgZXhhbXBsZSwgb24gd2luZG93cyBtYWNoaW5lcywKLS8vIHRoZSBwcmltYXJ5IHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgcHJvYmFibHkgJ1wnLCBidXQgdGhlIGFsdGVybmF0ZSBpcyAnLycuCi0jZGVmaW5lIFNCX0ZJTEVfQUxUX1NFUF9DSEFSICcvJwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgY3VycmVudCBwbGF0Zm9ybSdzIHNlYXJjaCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLiBXaGVuCi0vLyBzcGVjaWZ5aW5nIGFuIG9yZGVyZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocyBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGEKLS8vIGdpdmVuIHJlYXNvbiwgdGhpcyBpcyB0aGUgY2hhcmFjdGVyIHRoYXQgYXBwZWFycyBiZXR3ZWVuIGVudHJpZXMuIEZvcgotLy8gZXhhbXBsZSwgdGhlIHNlYXJjaCBwYXRoIG9mICIvZXRjL3NlYXJjaC9maXJzdDovZXRjL3NlYXJjaC9zZWNvbmQiIHVzZXMgJzonCi0vLyBhcyBhIHNlYXJjaCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotI2RlZmluZSBTQl9QQVRIX1NFUF9DSEFSICc6JwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgc3RyaW5nIGZvcm0gb2YgU0JfRklMRV9TRVBfQ0hBUi4KLSNkZWZpbmUgU0JfRklMRV9TRVBfU1RSSU5HICIvIgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgc3RyaW5nIGZvcm0gb2YgU0JfRklMRV9BTFRfU0VQX0NIQVIuCi0jZGVmaW5lIFNCX0ZJTEVfQUxUX1NFUF9TVFJJTkcgIi8iCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFRoZSBzdHJpbmcgZm9ybSBvZiBTQl9QQVRIX1NFUF9DSEFSLgotI2RlZmluZSBTQl9QQVRIX1NFUF9TVFJJTkcgIjoiCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQogLy8gLS0tIEdyYXBoaWNzIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBTcGVjaWZpZXMgdGhlIHByZWZlcnJlZCBieXRlIG9yZGVyIG9mIGNvbG9yIGNoYW5uZWxzIGluIGEgcGl4ZWwuIFJlZmVyIHRvCi0vLyBzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIGZvciB0aGUgcG9zc2libGUgdmFsdWVzLiBFR0wvR0xFUyBwbGF0Zm9ybXMgc2hvdWxkCi0vLyBnZW5lcmFsbHkgcHJlZmVyIGEgYnl0ZSBvcmRlciBvZiBSR0JBLCByZWdhcmRsZXNzIG9mIGVuZGlhbm5lc3MuCi0jZGVmaW5lIFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIgU0JfUFJFRkVSUkVEX1JHQkFfQllURV9PUkRFUl9SR0JBCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQogLy8gSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwbGF0Zm9ybSBzdXBwb3J0cyBiaWxpbmVhciBmaWx0ZXJpbmcuCiAvLyBUaGlzIGNhbiBiZSBjaGVja2VkIHRvIGVuYWJsZS9kaXNhYmxlIHJlbmRlcmVyIHRlc3RzIHRoYXQgdmVyaWZ5IHRoYXQgdGhpcyBpcwogLy8gd29ya2luZyBwcm9wZXJseS4KICNkZWZpbmUgU0JfSEFTX0JJTElORUFSX0ZJTFRFUklOR19TVVBQT1JUIDEKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gc2hvdWxkIGZyZXF1ZW50bHkgZmxpcCB0aGVpciBkaXNwbGF5IGJ1ZmZlci4KLS8vIElmIHRoaXMgaXMgbm90IHJlcXVpcmVkIChlLmcuIFNCX01VU1RfRlJFUVVFTlRMWV9GTElQX0RJU1BMQVlfQlVGRkVSIGlzIHNldAotLy8gdG8gMCksIHRoZW4gb3B0aW1pemF0aW9ucyB3aGVyZSB0aGUgZGlzcGxheSBidWZmZXIgaXMgbm90IGZsaXBwZWQgaWYgdGhlCi0vLyBzY2VuZSBoYXNuJ3QgY2hhbmdlZCBhcmUgZW5hYmxlZC4KLSNkZWZpbmUgU0JfTVVTVF9GUkVRVUVOVExZX0ZMSVBfRElTUExBWV9CVUZGRVIgMAotI2VuZGlmCiAvLyAtLS0gSS9PIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBoYXMgc3BlZWNoIHN5bnRoZXNpcy4KICNkZWZpbmUgU0JfSEFTX1NQRUVDSF9TWU5USEVTSVMgMAogCi0vLyAtLS0gTWVkaWEgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIEFsbG93IGFjMyBhbmQgZWMzIHN1cHBvcnQKLSNkZWZpbmUgU0JfSEFTX0FDM19BVURJTyAxCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gdXBkYXRlcyBhdWRpbyBmcmFtZXMgYXN5bmNocm9ub3VzbHkuICBJbiBzdWNoCi0vLyBjYXNlIGFuIGV4dHJhIHBhcmFtZXRlciB3aWxsIGJlIGFkZGVkIHRvIHxTYkF1ZGlvU2lua0NvbnN1bWVGcmFtZXNGdW5jfCB0bwotLy8gaW5kaWNhdGUgdGhlIGFic29sdXRlIHRpbWUgdGhhdCB0aGUgY29uc3VtZWQgYXVkaW8gZnJhbWVzIGFyZSByZXBvcnRlZC4KLS8vIENoZWNrIGRvY3VtZW50IGZvciB8U2JBdWRpb1NpbmtDb25zdW1lRnJhbWVzRnVuY3wgaW4gYXVkaW9fc2luay5oIGZvciBtb3JlCi0vLyBkZXRhaWxzLgotI2RlZmluZSBTQl9IQVNfQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORyAwCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgIDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgbWF4aW11bSBhdWRpbyBiaXRyYXRlIHRoZSBwbGF0Zm9ybSBjYW4gZGVjb2RlLiAgVGhlIGZvbGxvd2luZyB2YWx1ZQotLy8gZXF1YWxzIHRvIDVNIGJ5dGVzIHBlciBzZWNvbmRzIHdoaWNoIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGNvbXByZXNzZWQKLS8vIGF1ZGlvLgotI2RlZmluZSBTQl9NRURJQV9NQVhfQVVESU9fQklUUkFURV9JTl9CSVRTX1BFUl9TRUNPTkQgKDQwICogMTAyNCAqIDEwMjQpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFRoZSBtYXhpbXVtIHZpZGVvIGJpdHJhdGUgdGhlIHBsYXRmb3JtIGNhbiBkZWNvZGUuICBUaGUgZm9sbG93aW5nIHZhbHVlCi0vLyBlcXVhbHMgdG8gMjVNIGJ5dGVzIHBlciBzZWNvbmRzIHdoaWNoIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGNvbXByZXNzZWQKLS8vIHZpZGVvLgotI2RlZmluZSBTQl9NRURJQV9NQVhfVklERU9fQklUUkFURV9JTl9CSVRTX1BFUl9TRUNPTkQgKDIwMCAqIDEwMjQgKiAxMDI0KQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIGhhcyB3ZWJtL3ZwOSBzdXBwb3J0LiAgVGhpcyBzaG91bGQgYmUgc2V0IHRvCi0vLyBub24temVybyBvbiBwbGF0Zm9ybXMgd2l0aCB3ZWJtL3ZwOSBzdXBwb3J0LgotI2RlZmluZSBTQl9IQVNfTUVESUFfV0VCTV9WUDlfU1VQUE9SVCAwCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFNwZWNpZmllcyB0aGUgc3RhY2sgc2l6ZSBmb3IgdGhyZWFkcyBjcmVhdGVkIGluc2lkZSBtZWRpYSBzdGFjay4gIFNldCB0byAwIHRvCi0vLyB1c2UgdGhlIGRlZmF1bHQgdGhyZWFkIHN0YWNrIHNpemUuICBTZXQgdG8gbm9uLXplcm8gdG8gZXhwbGljaXRseSBzZXQgdGhlCi0vLyBzdGFjayBzaXplIGZvciBtZWRpYSBzdGFjayB0aHJlYWRzLgotI2RlZmluZSBTQl9NRURJQV9USFJFQURfU1RBQ0tfU0laRSAwVQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIC0tLSBEZWNvZGVyLW9ubHkgUGFyYW1zIC0tLQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gU3BlY2lmaWVzIGhvdyBtZWRpYSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiB0aGlzIHBsYXRmb3JtIGFzIHNvbWUKLS8vIGRlY29kZXJzIG1heSBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnQgb24gdGhlIGFsaWdubWVudCBvZiBidWZmZXJzIGJlaW5nCi0vLyBkZWNvZGVkLgotI2RlZmluZSBTQl9NRURJQV9CVUZGRVJfQUxJR05NRU5UIDEyOFUKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gU3BlY2lmaWVzIGhvdyB2aWRlbyBmcmFtZSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiB0aGlzIHBsYXRmb3JtLgotI2RlZmluZSBTQl9NRURJQV9WSURFT19GUkFNRV9BTElHTk1FTlQgMjU2VQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLS8vIC0tLSBNZW1vcnkgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gVGhlIG1lbW9yeSBwYWdlIHNpemUsIHdoaWNoIGNvbnRyb2xzIHRoZSBzaXplIG9mIGNodW5rcyBvbiBtZW1vcnkgdGhhdAotLy8gYWxsb2NhdG9ycyBkZWFsIHdpdGgsIGFuZCB0aGUgYWxpZ25tZW50IG9mIHRob3NlIGNodW5rcy4gVGhpcyBkb2Vzbid0IGhhdmUgdG8KLS8vIGJlIHRoZSBoYXJkd2FyZS1kZWZpbmVkIHBoeXNpY2FsIHBhZ2Ugc2l6ZSwgYnV0IGl0IHNob3VsZCBiZSBhIG11bHRpcGxlIG9mCi0vLyBpdC4KLSNkZWZpbmUgU0JfTUVNT1JZX1BBR0VfU0laRSA0MDk2Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGhhcyBhbmQgc2hvdWxkIHVzZSBhbiBNTUFQIGZ1bmN0aW9uIHRvIG1hcCBwaHlzaWNhbAotLy8gbWVtb3J5IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotI2RlZmluZSBTQl9IQVNfTU1BUCAxCi0jZW5kaWYKLQogLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGNhbiBtYXAgZXhlY3V0YWJsZSBtZW1vcnkuIEltcGxpZXMgU0JfSEFTX01NQVAuIFRoaXMgaXMKIC8vIHJlcXVpcmVkIGZvciBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIEpJVC4KICNkZWZpbmUgU0JfQ0FOX01BUF9FWEVDVVRBQkxFX01FTU9SWSAxCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBTcGVjaWZpZXMgdGhlIGFsaWdubWVudCBmb3IgSU8gQnVmZmVycywgaW4gYnl0ZXMuIFNvbWUgbG93LWxldmVsIG5ldHdvcmsgQVBJcwotLy8gbWF5IHJlcXVpcmUgYnVmZmVycyB0byBoYXZlIGEgc3BlY2lmaWMgYWxpZ25tZW50LCBhbmQgdGhpcyBpcyB0aGUgcGxhY2UgdG8KLS8vIHNwZWNpZnkgdGhhdC4KLSNkZWZpbmUgU0JfTkVUV09SS19JT19CVUZGRVJfQUxJR05NRU5UIDE2Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIERldGVybWluZXMgdGhlIGFsaWdubWVudCB0aGF0IGFsbG9jYXRpb25zIHNob3VsZCBoYXZlIG9uIHRoaXMgcGxhdGZvcm0uCi0jZGVmaW5lIFNCX01BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBEZXRlcm1pbmVzIHRoZSB0aHJlc2hvbGQgb2YgYWxsb2NhdGlvbiBzaXplIHRoYXQgc2hvdWxkIGJlIGRvbmUgd2l0aCBtbWFwCi0vLyAoaWYgYXZhaWxhYmxlKSwgcmF0aGVyIHRoYW4gYWxsb2NhdGVkIHdpdGhpbiB0aGUgY29yZSBoZWFwLgotI2RlZmluZSBTQl9ERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KSgyNTYgKiAxMDI0VSkpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIERlZmluZXMgdGhlIHBhdGggd2hlcmUgbWVtb3J5IGRlYnVnZ2luZyBsb2dzIHNob3VsZCBiZSB3cml0dGVuIHRvLgotI2RlZmluZSBTQl9NRU1PUllfTE9HX1BBVEggIi90bXAvc3RhcmJvYXJkIgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIC0tLSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIElQVjYuCkBAIC0yOTcsNTYgKzEzMCw2IEBACiAvLyBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIHBpcGUuCiAjZGVmaW5lIFNCX0hBU19QSVBFIDEKIAotLy8gLS0tIFRocmVhZCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBPbiBkZWZhdWx0IExpbnV4IGRlc2t0b3AsIHlvdSBtdXN0IGJlIGEgc3VwZXJ1c2VyIGluIG9yZGVyIHRvIHNldCByZWFsIHRpbWUKLS8vIHNjaGVkdWxpbmcgb24gdGhyZWFkcy4KLSNkZWZpbmUgU0JfSEFTX1RIUkVBRF9QUklPUklUWV9TVVBQT1JUIDAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gRGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRocmVhZHMgZm9yIHRoaXMgcGxhdGZvcm0uIFNvbWUKLS8vIHBsYXRmb3JtcyByZXF1aXJlIHNoYXJpbmcgdGhyZWFkIGhhbmRsZXMgd2l0aCBvdGhlciBraW5kcyBvZiBzeXN0ZW0gaGFuZGxlcywKLS8vIGxpa2UgbXV0ZXhlcywgc28gd2Ugd2FudCB0byBrZWVwIHRoaXMgbWFuYWdlYWJsZS4KLSNkZWZpbmUgU0JfTUFYX1RIUkVBRFMgOTAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZCBsb2NhbCBzdG9yYWdlIGtleXMgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0uCi0jZGVmaW5lIFNCX01BWF9USFJFQURfTE9DQUxfS0VZUyA1MTIKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBuYW1lIGZvciBhIHRocmVhZCwgaW5jbHVkaW5nIHRoZSBOVUxMLXRlcm1pbmF0b3IuCi0jZGVmaW5lIFNCX01BWF9USFJFQURfTkFNRV9MRU5HVEggMTYKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0vLyAtLS0gVHVuZWFibGUgUGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLS8vIFNwZWNpZmllcyB0aGUgbmV0d29yayByZWNlaXZlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLCBzZXQgdmlhCi0vLyBTYlNvY2tldFNldFJlY2VpdmVCdWZmZXJTaXplKCkuCi0vLwotLy8gU2V0dGluZyB0aGlzIHRvIDAgaW5kaWNhdGVzIHRoYXQgU2JTb2NrZXRTZXRSZWNlaXZlQnVmZmVyU2l6ZSgpIHNob3VsZAotLy8gbm90IGJlIGNhbGxlZC4gVXNlIHRoaXMgZm9yIE9TcyAoc3VjaCBhcyBMaW51eCkgd2hlcmUgcmVjZWl2ZSBidWZmZXIKLS8vIGF1dG8tdHVuaW5nIGlzIGJldHRlci4KLS8vCi0vLyBPbiBzb21lIHBsYXRmb3JtcywgdGhpcyBtYXkgYWZmZWN0IG1heCBUQ1Agd2luZG93IHNpemUgd2hpY2ggbWF5Ci0vLyBkcmFtYXRpY2FsbHkgYWZmZWN0IHRocm91Z2hwdXQgaW4gdGhlIHByZXNlbmNlIG9mIGxhdGVuY3kuCi0vLwotLy8gSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIGEgZ29vZCBUQ1AgYXV0by10dW5pbmcgbWVjaGFuaXNtLAotLy8gYSBzZXR0aW5nIG9mICgxMjggKiAxMDI0KSBoZXJlIGlzIHJlY29tbWVuZGVkLgotI2RlZmluZSBTQl9ORVRXT1JLX1JFQ0VJVkVfQlVGRkVSX1NJWkUgKDApCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotLy8gLS0tIFVzZXIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0vLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdXNlcnMgdGhhdCBjYW4gYmUgc2lnbmVkIGluIGF0IHRoZSBzYW1lIHRpbWUuCi0jZGVmaW5lIFNCX1VTRVJfTUFYX1NJR05FRF9JTiAxCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQogLy8gLS0tIFRpbWluZyBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBoYXMgYW4gQVBJIHRvIHJldHJpZXZlIGhvdyBsb25nIHRoZSBjdXJyZW50IHRocmVhZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9lbmFibGVfZ2x4X3ZpYV9hbmdsZS5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9lbmFibGVfZ2x4X3ZpYV9hbmdsZS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjFlNDUxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvZW5hYmxlX2dseF92aWFfYW5nbGUuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICMgQW5nbGUgY29uZmlndXJhdGlvbiBmb3IgdHJhbnNsYXRpbmcgRUdML0dMRVMgLT4gR0xYL09wZW5HTC4KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIFNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgJ2dsX3R5cGUnIHRvIGFuZ2xlLCBzbyB0aGF0IG90aGVyIExpbnV4Ci0gICAgIyBjb25maWd1cmF0aW9ucyBjb3VsZCBvdmVycmlkZSBpdC4KLSAgICAnZ2xfdHlwZSUnOiAnYW5nbGUnLAotICAgICdhbmdsZV9idWlsZF93aW5ydCc6IDAsCi0gICAgJ2FuZ2xlX2VuYWJsZV9nbCc6IDEsCi0gICAgJ2FuZ2xlX2VuYWJsZV9kM2QxMSc6IDAsCi0gICAgJ2FuZ2xlX2xpbmtfZ2x4JzogMCwKLSAgICAnYW5nbGVfdXNlX2dseCc6IDEsCi0gICAgJ2FuZ2xlX3BsYXRmb3JtX2xpbnV4JzogMSwKLSAgICAnYW5nbGVfcGxhdGZvcm1fcG9zaXgnOiAxLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDE5NzljLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFBsYXRmb3JtIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIExpbnV4IG9uIFN0YXJib2FyZC4gIEF1dG9tYXRpY2FsbHkKLSMgaW5jbHVkZWQgYnkgZ3lwX2NvYmFsdCBpbiBhbGwgLmd5cCBmaWxlcyBieSBDb2JhbHQgdG9nZXRoZXIgd2l0aCBiYXNlLmd5cGkuCi0jCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBPdmVycmlkZSB0aGF0IG9taXRzIHRoZSAiZGF0YSIgc3ViZGlyZWN0b3J5LgotICAgICMgVE9ETzogUmVtb3ZlIHdoZW4gb21pdHRlZCBmb3IgYWxsIHBsYXRmb3JtcyBpbiBiYXNlX2NvbmZpZ3VyYXRpb24uZ3lwaS4KLSAgICAnc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpcic6ICc8KFBST0RVQ1RfRElSKS9jb250ZW50JywKLQotICAgICd0YXJnZXRfb3MnOiAnbGludXgnLAotICAgICd5YXNtX2V4aXN0cyc6IDEsCi0gICAgJ3NiX3dpZGV2aW5lX3BsYXRmb3JtJyA6ICdsaW51eCcsCi0gICAgJ3NiX2Rpc2FibGVfb3B1c19zc2UnOiAxLAotICAgICdzYl9lbmFibGVfYmVuY2htYXJrJzogMSwKLQotICAgICdwbGF0Zm9ybV9saWJyYXJpZXMnOiBbCi0gICAgICAnLWxhc291bmQnLAotICAgICAgJy1sZGwnLAotICAgICAgJy1scHRocmVhZCcsCi0gICAgICAnLWxydCcsCi0gICAgXSwKLQotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydzYl9ldmVyZ3JlZW4gIT0gMScsIHsKLSAgICAgICAgIyBUT0RPOiBhbGxvdyBzdGFyYm9hcmRfcGxhdGZvcm0gdG8gdXNlIHN5c3RlbSBsaWJjL2xpYmMrKyBpbiB0aGUKLSAgICAgICAgIyBmdXR1cmUuIEZvciBub3csIGlmIHRoaXMgZmxhZ3MgaXMgZW5hYmxlZCwgYSB3YXJuaW5nIGVtZXJnZSBzYXlpbmcKLSAgICAgICAgIyBpdCdzIHVudXNlZCBhbnl3YXkuCi0gICAgICAgICdsaW5rZXJfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1zdGF0aWMtbGlic3RkYysrJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICMgQ29iYWx0IG9uIExpbnV4IGZsYWcKLSAgICAgICdDT0JBTFRfTElOVVgnLAotICAgICAgJ19fU1REQ19GT1JNQVRfTUFDUk9TJywgIyBzbyB0aGF0IHdlIGdldCBQUkkqCi0gICAgICAjIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyB0byBnZXQgcHJvdG90eXBlcyBsaWtlIGZmc2wuCi0gICAgICAnX0dOVV9TT1VSQ0U9MScsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY29iYWx0X2NvbmZpZyA9PSAiZGVidWciJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAjIEVuYWJsZSBkZWJ1ZyBtb2RlIGZvciB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkuCi0gICAgICAgICAgIyBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvbGlic3RkYyUyQiUyQi9tYW51YWwvZGVidWdfbW9kZV91c2luZy5odG1sCi0gICAgICAgICAgIyBodHRwczovL2xpYmN4eC5sbHZtLm9yZy9kb2NzL0Rlc2lnbkRvY3MvRGVidWdNb2RlLmh0bWwKLSAgICAgICAgICAnX0dMSUJDWFhfREVCVUcnLAotICAgICAgICAgICdfTElCQ1BQX0RFQlVHPTEnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ2NvYmFsdF9jb25maWcgPT0gImRldmVsIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgIyBFbmFibGUgZGVidWcgbW9kZSBmb3IgdGhlIEMrKyBzdGFuZGFyZCBsaWJyYXJ5LgotICAgICAgICAgICMgaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2xpYnN0ZGMlMkIlMkIvbWFudWFsL2RlYnVnX21vZGVfdXNpbmcuaHRtbAotICAgICAgICAgICMgaHR0cHM6Ly9saWJjeHgubGx2bS5vcmcvZG9jcy9EZXNpZ25Eb2NzL0RlYnVnTW9kZS5odG1sCi0gICAgICAgICAgJ19HTElCQ1hYX0RFQlVHJywKLSAgICAgICAgICAnX0xJQkNQUF9ERUJVRz0wJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sICMgZW5kIG9mIHRhcmdldF9kZWZhdWx0cwotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggMTA5YjMyOC4uNzMyN2YzYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNSw2NCArMTUsMjAgQEAKIAogaW1wb3J0IG9zCiAKLWZyb20gc3RhcmJvYXJkLmJ1aWxkIGltcG9ydCBjbGFuZwogZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBhdGhzCi1mcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCiAKIGNsYXNzIExpbnV4Q29uZmlndXJhdGlvbihwbGF0Zm9ybV9jb25maWd1cmF0aW9uLlBsYXRmb3JtQ29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBMaW51eCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgogCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm0sCi0gICAgICAgICAgICAgICBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdD1UcnVlLAotICAgICAgICAgICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2RlZmF1bHQvc2FiaS5qc29uJyk6Ci0gICAgc3VwZXIoTGludXhDb25maWd1cmF0aW9uLCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQpCi0KLSAgICBzZWxmLnNhYmlfanNvbl9wYXRoID0gc2FiaV9qc29uX3BhdGgKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtKToKKyAgICBzdXBlcihMaW51eENvbmZpZ3VyYXRpb24sIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtKQogICAgIHNlbGYuQXBwZW5kQXBwbGljYXRpb25Db25maWd1cmF0aW9uUGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogCi0gIGRlZiBHZXRCdWlsZEZvcm1hdChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkZXNpcmVkIGJ1aWxkIGZvcm1hdC4iIiIKLSAgICAjIFRoZSBjb21tYSBtZWFucyB0aGF0IG5pbmphIGFuZCBxdGNyZWF0b3JfbmluamEgd2lsbCBiZSBjaGFpbmVkIGFuZCB1c2UgdGhlCi0gICAgIyBzYW1lIGlucHV0IGluZm9ybWF0aW9uIHNvIHRoYXQgLmd5cCBmaWxlcyB3aWxsIG9ubHkgaGF2ZSB0byBiZSBwYXJzZWQKLSAgICAjIG9uY2UuCi0gICAgcmV0dXJuICduaW5qYSxxdGNyZWF0b3JfbmluamEnCi0KLSAgZGVmIEdldFZhcmlhYmxlcyhzZWxmLCBjb25maWdfbmFtZSk6Ci0gICAgdmFyaWFibGVzID0gc3VwZXIoTGludXhDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRWYXJpYWJsZXMoCi0gICAgICAgIGNvbmZpZ19uYW1lLCB1c2VfY2xhbmc9MSkKLSAgICB2YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ2luY2x1ZGVfcGF0aF9wbGF0Zm9ybV9kZXBsb3lfZ3lwaSc6Ci0gICAgICAgICAgICAnc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaScsCi0gICAgfSkKLSAgICByZXR1cm4gdmFyaWFibGVzCi0KICAgZGVmIEdldExhdW5jaGVyUGF0aChzZWxmKToKICAgICAiIiJHZXRzIHRoZSBwYXRoIHRvIHRoZSBsYXVuY2hlciBtb2R1bGUgZm9yIHRoaXMgcGxhdGZvcm0uIiIiCiAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKIAotICBkZWYgR2V0R2VuZXJhdG9yVmFyaWFibGVzKHNlbGYsIGNvbmZpZ19uYW1lKToKLSAgICBkZWwgY29uZmlnX25hbWUKLSAgICBnZW5lcmF0b3JfdmFyaWFibGVzID0gewotICAgICAgICAncXRjcmVhdG9yX3Nlc3Npb25fbmFtZV9wcmVmaXgnOiAnY29iYWx0JywKLSAgICB9Ci0gICAgcmV0dXJuIGdlbmVyYXRvcl92YXJpYWJsZXMKLQotICBkZWYgR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoc2VsZik6Ci0gICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Jyk6Ci0gICAgICBzZWxmLl9ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50ID0gYnVpbGQuR2V0SG9zdENvbXBpbGVyRW52aXJvbm1lbnQoCi0gICAgICAgICAgY2xhbmcuR2V0Q2xhbmdTcGVjaWZpY2F0aW9uKCksIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IpCi0KLSAgICBlbnZfdmFyaWFibGVzID0gc2VsZi5faG9zdF9jb21waWxlcl9lbnZpcm9ubWVudAotICAgIGVudl92YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ0NDJzogc2VsZi5faG9zdF9jb21waWxlcl9lbnZpcm9ubWVudFsnQ0NfaG9zdCddLAotICAgICAgICAnQ1hYJzogc2VsZi5faG9zdF9jb21waWxlcl9lbnZpcm9ubWVudFsnQ1hYX2hvc3QnXSwKLSAgICB9KQotICAgIHJldHVybiBlbnZfdmFyaWFibGVzCi0KICAgZGVmIEdldFRlc3RFbnZWYXJpYWJsZXMoc2VsZik6CiAgICAgIyBEdWUgdG8gZnJhZ2lsZSBuYXR1cmUgb2YgZHluYW1pYyBUTFMgdHJhY2tpbmcsIGluIHBhcnRpY3VsYXIgTFNBTiByZWxpYW5jZQogICAgICMgb24gR0xJQkMgcHJpdmF0ZSBBUElzLCB0cmFja2luZyBUTFMgbGVha3MgaXMgdW5zdGFibGUgYW5kIGNhbiB0cmlnZ2VyCkBAIC04NCw2NiArNDAsMyBAQAogICAgICMgYmUgcHJpbnRlZCBhdCB0ZXN0IHNodXRkb3duLCBhbmQgZW52IHZhciBMU0FOX09QVElPTlM9dmVyYm9zaXR5PTIgd291bGQKICAgICAjIGZ1cnRoZXIgcG9pbnQgdG8gJ1NjYW5uaW5nIERUTFMgcmFuZ2UgLi4nIHByaW9yIHRvIGNyYXNoLgogICAgIHJldHVybiB7J0FTQU5fT1BUSU9OUyc6ICdpbnRlcmNlcHRfdGxzX2dldF9hZGRyPTAnfQotCi0gIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKLSAgICBmaWx0ZXJzID0gc3VwZXIoTGludXhDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0KLSAgICBoYXNfY2RtID0gb3MucGF0aC5pc2ZpbGUoCi0gICAgICAgIG9zLnBhdGguam9pbihwYXRocy5SRVBPU0lUT1JZX1JPT1QsICd0aGlyZF9wYXJ0eScsICdjZV9jZG0nLCAnY2RtJywKLSAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlJywgJ2NkbS5oJykpCi0KLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6Ci0gICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCi0KLSAgICBpZiBoYXNfY2RtOgotICAgICAgcmV0dXJuIGZpbHRlcnMKLQotICAgICMgRmlsdGVyIHRoZSBkcm0gcmVsYXRlZCB0ZXN0cywgYXMgY2VfY2RtIGlzIG5vdCBwcmVzZW50LgotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19EUk1fUkVMQVRFRF9URVNUUy5pdGVyaXRlbXMoKToKLSAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKLSAgICByZXR1cm4gZmlsdGVycwotCi0gIGRlZiBHZXRQYXRoVG9TYWJpSnNvbkZpbGUoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuc2FiaV9qc29uX3BhdGgKLQotICBfX0RSTV9SRUxBVEVEX1RFU1RTID0geyAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0gICAgICAnbnBsYic6IFsKLSAgICAgICAgICAnU2JEcm1UZXN0LkFueVN1cHBvcnRlZEtleVN5c3RlbXMnLAotICAgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uQW55U3VwcG9ydGVkS2V5U3lzdGVtcycsCi0gICAgICBdLAotICB9Ci0KLSAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwotICBfX0ZJTFRFUkVEX1RFU1RTID0geyAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0gICAgICAncGxheWVyX2ZpbHRlcl90ZXN0cyc6IFsKLSAgICAgICAgICAjIGxpYmRhdjFkIGNyYXNoZXMgd2hlbiBmZWQgaW52YWxpZCBkYXRhCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuKkludmFsaWQqJywKLSAgICAgIF0sCi0gIH0KLSAgX19GSUxURVJFRF9URVNUU1snbnBsYiddID0gW10KLSAgIyBDb25kaXRpb25hbGx5IGRpc2FibGVzIHRlc3RzIHRoYXQgcmVxdWlyZSBpcHY2Ci0gIGlmIG9zLmdldGVudignSVBWNl9BVkFJTEFCTEUnLCAnMScpID09ICcwJzoKLSAgICBfX0ZJTFRFUkVEX1RFU1RTWyducGxiJ10uZXh0ZW5kKFsKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlEZXN0aW5hdGlvbi8xJywKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VGb3JEZXN0aW5hdGlvbi8xJywKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VOb3RMb29wYmFjay8xJywKLSAgICBdKQotICAjIFRPRE86IFJlLWVuYWJsZSBvbmNlIHRlc3RzIG9yIGluZnJhIGZpeGVkLgotICBfX0ZJTFRFUkVEX1RFU1RTWyducGxiJ10uZXh0ZW5kKFsKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9TYlNvY2tldEJpbmRUZXN0LlJhaW55RGF5QmFkSW50ZXJmYWNlLzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldEdldExvY2FsQWRkcmVzc1Rlc3QuU3VubnlEYXlDb25uZWN0ZWQvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0SXNDb25uZWN0ZWRBbmRJZGxlVGVzdC5TdW5ueURheS8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRJc0Nvbm5lY3RlZFRlc3QuU3VubnlEYXkvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0UmVjZWl2ZUZyb21UZXN0LlN1bm55RGF5LzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0UmVzb2x2ZVRlc3QuTG9jYWxob3N0LzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0UmVzb2x2ZVRlc3QuU3VubnlEYXlGaWx0ZXJlZC8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRTZW5kVG9UZXN0LlJhaW55RGF5U2VuZFRvQ2xvc2VkU29ja2V0LzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldFNlbmRUb1Rlc3QuUmFpbnlEYXlTZW5kVG9Tb2NrZXRVbnRpbEJsb2NraW5nLzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldFNlbmRUb1Rlc3QuUmFpbnlEYXlTZW5kVG9Tb2NrZXRDb25uZWN0aW9uUmVzZXQvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0V2FpdGVyV2FpdFRlc3QuU3VubnlEYXkvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0V2FpdGVyV2FpdFRlc3QuU3VubnlEYXlBbHJlYWR5UmVhZHkvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0V2FpdGVyV2FpdFRpbWVkVGVzdC5TdW5ueURheS8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXcmFwcGVyVGVzdC5TdW5ueURheS8xJywKLSAgXSkKLQotICAjIHB5bGludDogZW5hYmxlPWxpbmUtdG9vLWxvbmcKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbGF1bmNoZXIucHkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2xhdW5jaGVyLnB5CmluZGV4IDA5MjFkMWEuLjg2N2FkYTggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbGF1bmNoZXIucHkKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9sYXVuY2hlci5weQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBhYnN0cmFjdF9sYXVuY2hlcgogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHNlbmRfbGluawogCkBAIC0zNyw3ICszNiw3IEBACiAgICAgcGlkOiBwcm9jZXNzIGlkIG9mIHNwZWNpZmllZCBjb2JhbHQgaW5zdGFuY2UuCiAgICIiIgogICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbInBzIC1vIHN0YXRlPSAtcCB7fSIuZm9ybWF0KHBpZCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKS5kZWNvZGUoKQogICByZXR1cm4gb3V0cHV0CiAKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9saWJyYXJpZXMuZ3lwaSBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbGlicmFyaWVzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1ZjE2YmEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9saWJyYXJpZXMuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBIb29rIGludG8gdGhlIHN3YXAgYnVmZmVycyBjYWxsIHRvIGZhY2lsaXRhdGUgc3luY2hyb25pemF0aW9uIG9mIHRoZQotICAgICMgT3BlbkdMIG91dHB1dCB3aXRoIHRoZSBwdW5jaC10aHJvdWdoIHZpZGVvIGxheWVyLgotICAgICdsaW5rZXJfZmxhZ3MnOiBbCi0gICAgICAnLVdsLC0td3JhcD1lZ2xTd2FwQnVmZmVycycsCi0gICAgXSwKLQotICAgICdwbGF0Zm9ybV9saWJyYXJpZXMnOiBbCi0gICAgICAnLWxYMTEnLAotICAgICAgJy1sWGNvbXBvc2l0ZScsCi0gICAgICAnLWxYcmVuZGVyJywKLSAgICBdLAotICB9LAotCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnZW5hYmxlX2dseF92aWFfYW5nbGUuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkLmNjCmluZGV4IDgwNTQ2ODQuLjE3ODA2ODQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkLmNjCkBAIC0yMCwxNiArMjAsMTIgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKIAogYm9vbCBTYk1lZGlhSXNBdWRpb1N1cHBvcnRlZChTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50X3R5cGUsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgYml0cmF0ZSkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmICghY29udGVudF90eXBlKSB7CiAgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJ8Y29udGVudF90eXBlfCBjYW5ub3QgYmUgbnVsbHB0ci4iOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgIGlmIChhdWRpb19jb2RlYyA9PSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWMpIHsKICAgICByZXR1cm4gYml0cmF0ZSA8PSBrU2JNZWRpYU1heEF1ZGlvQml0cmF0ZUluQml0c1BlclNlY29uZDsKQEAgLTM5LDE1ICszNSwxMiBAQAogICAgIHJldHVybiBiaXRyYXRlIDw9IGtTYk1lZGlhTWF4QXVkaW9CaXRyYXRlSW5CaXRzUGVyU2Vjb25kOwogICB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBkZWZpbmVkKFNCX0hBU19BQzNfQVVESU8pCiAgIGlmIChrU2JIYXNBYzNBdWRpbykgewogICAgIGlmIChhdWRpb19jb2RlYyA9PSBrU2JNZWRpYUF1ZGlvQ29kZWNBYzMgfHwKICAgICAgICAgYXVkaW9fY29kZWMgPT0ga1NiTWVkaWFBdWRpb0NvZGVjRWFjMykgewogICAgICAgcmV0dXJuIGJpdHJhdGUgPD0ga1NiTWVkaWFNYXhBdWRpb0JpdHJhdGVJbkJpdHNQZXJTZWNvbmQ7CiAgICAgfQogICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIGRlZmluZWQoU0JfSEFTX0FDM19BVURJTykKIAogICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCmluZGV4IDQyM2ZiNzcuLjk4Y2NhY2QgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCkBAIC0yNiwzMCArMjYsMjIgQEAKIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6Om1lZGlhOjpJc1NEUlZpZGVvOwogCiBib29sIFNiTWVkaWFJc1ZpZGVvU3VwcG9ydGVkKFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRfdHlwZSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSNpZiBTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRfZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFQcmltYXJ5SWQgcHJpbWFyeV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVRyYW5zZmVySWQgdHJhbnNmZXJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFNYXRyaXhJZCBtYXRyaXhfaWQsCi0jZW5kaWYgIC8vIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYW1lX3dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpIHsKLSNpZiBTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoIWNvbnRlbnRfdHlwZSkgewogICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAifGNvbnRlbnRfdHlwZXwgY2Fubm90IGJlIG51bGxwdHIuIjsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogICBpZiAoIUlzU0RSVmlkZW8oYml0X2RlcHRoLCBwcmltYXJ5X2lkLCB0cmFuc2Zlcl9pZCwgbWF0cml4X2lkKSkgewogICAgIGlmIChiaXRfZGVwdGggIT0gMTAgJiYgYml0X2RlcHRoICE9IDEyKSB7CkBAIC02MSw3ICs1Myw2IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICB9Ci0jZW5kaWYgIC8vIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKIAogICBpZiAoZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpIHsKICAgICBib29sIGhhc19nbGVzX3N1cHBvcnQgPSBTYkdldEdsZXNJbnRlcmZhY2UoKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbiBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbgppbmRleCBkMjIxZTYzLi4zYzUzMzMwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCkBAIC0xNTcsMjMgKzE1NywyNiBAQAogfQogCiBjb25maWcoInNwZWVkIikgewotICBjZmxhZ3MgPSBbCi0gICAgIi1PMiIsCisgIGNmbGFncyA9IFsgIi1PMiIgXQogCi0gICAgIyBDb21waWxlIHN5bWJvbHMgaW4gc2VwYXJhdGUgc2VjdGlvbnMKLSAgICAiLWZmdW5jdGlvbi1zZWN0aW9ucyIsCi0gICAgIi1mZGF0YS1zZWN0aW9ucyIsCi0gIF0KKyAgaWYgKGlzX3FhIHx8IGlzX2dvbGQpIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIyBDb21waWxlIHN5bWJvbHMgaW4gc2VwYXJhdGUgc2VjdGlvbnMKKyAgICAgICItZmZ1bmN0aW9uLXNlY3Rpb25zIiwKKyAgICAgICItZmRhdGEtc2VjdGlvbnMiLAorICAgIF0KKyAgfQogfQogCiBjb25maWcoInNpemUiKSB7Ci0gIGNmbGFncyA9IFsKLSAgICAiLU9zIiwKLQotICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCi0gICAgIi1mZnVuY3Rpb24tc2VjdGlvbnMiLAotICAgICItZmRhdGEtc2VjdGlvbnMiLAotICBdCisgIGNmbGFncyA9IFsgIi1PcyIgXQorICBpZiAoaXNfcWEgfHwgaXNfZ29sZCkgeworICAgIGNmbGFncyArPSBbCisgICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucworICAgICAgIi1mZnVuY3Rpb24tc2VjdGlvbnMiLAorICAgICAgIi1mZGF0YS1zZWN0aW9ucyIsCisgICAgXQorICB9CiB9CiAKIGNvbmZpZygicGVkYW50aWNfd2FybmluZ3MiKSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKaW5kZXggYWFjZWFjNS4uZWY2ZWJhMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCisrKyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQpAQCAtMzQsNyArMzQsNiBAQAogCiBzYl93aWRldmluZV9wbGF0Zm9ybSA9ICJsaW51eCIKIAotaGFzX2RybV9zdXBwb3J0ID0gaXNfaW50ZXJuYWxfYnVpbGQKIHBsYXRmb3JtX3Rlc3RzX3BhdGggPSAiLy9zdGFyYm9hcmQvbGludXgvc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cyIKIAotaW5fYXBwX2RpYWwgPSB0cnVlCitlbmFibGVfaW5fYXBwX2RpYWwgPSB0cnVlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJiYWM1MC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2V4ZWN1dGFibGVfZmlsZSc6ICc8KFBST0RVQ1RfRElSKS88KGV4ZWN1dGFibGVfbmFtZSknLAotICAgICdkZXBsb3lfZXhlY3V0YWJsZV9maWxlJzogJzwodGFyZ2V0X2RlcGxveV9kaXIpLzwoZXhlY3V0YWJsZV9uYW1lKScsCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGknIF0sCi0gICdhY3Rpb25zJzogWwotICAgIHsKLSAgICAgICdhY3Rpb25fbmFtZSc6ICdkZXBsb3lfZXhlY3V0YWJsZScsCi0gICAgICAnbWVzc2FnZSc6ICdMaW5rIGRlcGxveSBleGVjdXRhYmxlOiA8KGRlcGxveV9leGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgICAnPChjb250ZW50X2RlcGxveV9zdGFtcF9maWxlKScsCi0gICAgICBdLAotICAgICAgJ291dHB1dHMnOiBbICc8KGRlcGxveV9leGVjdXRhYmxlX2ZpbGUpJyBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJ2xuJywKLSAgICAgICAgJy1zZicsCi0gICAgICAgICckJChyZWFscGF0aCAtLXJlbGF0aXZlLXRvPTwodGFyZ2V0X2RlcGxveV9kaXIpIDwoZXhlY3V0YWJsZV9maWxlKSknLAotICAgICAgICAnPChkZXBsb3lfZXhlY3V0YWJsZV9maWxlKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2UuY2MgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2UuY2MKaW5kZXggNmQ5NmY4OC4uMTVmZTQ0MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zb2Z0X21pY19wbGF0Zm9ybV9zZXJ2aWNlLmNjCisrKyBiL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc29mdF9taWNfcGxhdGZvcm1fc2VydmljZS5jYwpAQCAtNDgsNyArNDgsNiBAQAogCiBib29sIEhhcyhjb25zdCBjaGFyKiBuYW1lKSB7CiAgIC8vIENoZWNrIGlmIHBsYXRmb3JtIGhhcyBzZXJ2aWNlIG5hbWUuCi0gIFNCX0xPRyhJTkZPKSA8PCAiSGFzKCk6ICIgPDwgbmFtZTsKICAgcmV0dXJuIHN0cmNtcChuYW1lLCAiY29tLmdvb2dsZS55b3V0dWJlLnR2LlNvZnRNaWMiKSA9PSAwOwogfQogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9iYXNlX3N5bWJvbGl6ZS5neXAgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9iYXNlX3N5bWJvbGl6ZS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYmIzYzEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfYmFzZV9zeW1ib2xpemUuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfYmFzZV9zeW1ib2xpemUnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L3N5bWJvbGl6ZS9kZW1hbmdsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL3RoaXJkX3BhcnR5L3N5bWJvbGl6ZS9zeW1ib2xpemUuY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlID09IDEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9ldmVyZ3JlZW5faW5mby5neXA6ZXZlcmdyZWVuX2luZm8nLAotICAgICAgICAgIF0sfSwKLSAgICAgICAgXSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzNiZWM3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfZmlsdGVyLmd5cGknLAotICBdLAotICAndmFyaWFibGVzJzogewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnaGFzX2NkbSUnOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZXhpc3RzIDwoREVQVEgpL3RoaXJkX3BhcnR5L2NlX2NkbS9jZG0vaW5jbHVkZS9jZG0uaCknLAotICAgIH0sCi0gICAgIyBUaGlzIGhhc19jZG0gZ2V0cyBleHBvcnRlZCB0byBneXAgZmlsZXMgdGhhdCBpbmNsdWRlIHRoaXMgb25lLgotICAgICdoYXNfY2RtJSc6ICc8KGhhc19jZG0pJywKLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCi0gICAgICAnPEAoZmlsdGVyX2Jhc2VkX3BsYXllcl9zb3VyY2VzKScsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9hdG9taWNfcHVibGljLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvYXVkaW9fc2lua190eXBlX2Rpc3BhdGNoZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb24uaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9kZWNvZGVfdGFyZ2V0X2dldF9pbmZvLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2RlY29kZV90YXJnZXRfcmVsZWFzZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL25ldGxpbmsuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbmV0bGluay5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcm91dGVzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3JvdXRlcy5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3NvZnRfbWljX3BsYXRmb3JtX3NlcnZpY2UuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc29mdF9taWNfcGxhdGZvcm1fc2VydmljZS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfY29ubmVjdGlvbl90eXBlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfZGV2aWNlX3R5cGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3lzdGVtX2dldF9leHRlbnNpb25zLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zeXN0ZW1faGFzX2NhcGFiaWxpdHkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX2F1ZGlvX3NpbmtfdHlwZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfYXVkaW9fc2lua190eXBlLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9kZXZpY2VhdXRoL2RldmljZWF1dGhfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X21hcC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfcHJvdGVjdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfdW5tYXAuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZWdsL3N5c3RlbV9lZ2wuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2NfcHVibGljLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZ2xlcy9zeXN0ZW1fZ2xlczIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19hbHBoYW51bWVyaWMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19kaWdpdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX2hleF9kaWdpdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX3NwYWNlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfdXBwZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl90b19sb3dlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX3RvX3VwcGVyLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9kaXJlY3RvcnlfY2xvc2UuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RpcmVjdG9yeV9nZXRfbmV4dC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZGlyZWN0b3J5X29wZW4uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9hYnNvbHV0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2V4cG9uZW50LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9kb3VibGVfZmxvb3IuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9pc19maW5pdGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9pc19uYW4uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9hbGxvY2F0ZV91bmNoZWNrZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9jb21wYXJlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfY29weS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2ZpbmRfYnl0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2ZyZWUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9tb3ZlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfcmVhbGxvY2F0ZV91bmNoZWNrZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9zZXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19jb21wYXJlX2FsbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2NvbXBhcmUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19maW5kX2NoYXJhY3Rlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2ZpbmRfbGFzdF9jaGFyYWN0ZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19maW5kX3N0cmluZy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2dldF9sZW5ndGhfd2lkZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2dldF9sZW5ndGguY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV9kb3VibGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV9zaWduZWRfaW50ZWdlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX3VpbnQ2NC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX3Vuc2lnbmVkX2ludGVnZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19zY2FuLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zeXN0ZW1fYmluYXJ5X3NlYXJjaC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3lzdGVtX3NvcnQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZGF2MWQvZGF2MWRfdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJkYXYxZC9kYXYxZF92aWRlb19kZWNvZGVyLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZGUyNjUvZGUyNjVfbGlicmFyeV9sb2FkZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZGUyNjUvZGUyNjVfbGlicmFyeV9sb2FkZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJkZTI2NS9kZTI2NV92aWRlb19kZWNvZGVyLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmRlMjY1L2RlMjY1X3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX2FkZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX2NyZWF0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX2Rlc3Ryb3kuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX3JlbW92ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX3dhaXRfdGltZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl93YWl0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfd2FrZV91cC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJ2cHgvdnB4X3ZpZGVvX2RlY29kZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGlidnB4L3ZweF92aWRlb19kZWNvZGVyLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvYnl0ZV9zd2FwLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2NwdV9mZWF0dXJlc19nZXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvZGV2X2lucHV0L2Rldl9pbnB1dC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9kZXZfaW5wdXQvZGV2X2lucHV0LmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvZ2V0X2hvbWVfZGlyZWN0b3J5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L21lbW9yeV9nZXRfc3RhY2tfYm91bmRzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3JhbmRvbV9kYXRhLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfc3RhY2suY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc3lzdGVtX2dldF90b3RhbF9jcHVfbWVtb3J5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfdXNlZF9jcHVfbWVtb3J5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fbmV0d29ya19zdGF0dXMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc3lzdGVtX3N5bWJvbGl6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC90aHJlYWRfZ2V0X2lkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3RocmVhZF9nZXRfbmFtZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC90aHJlYWRfc2V0X25hbWUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfZ2V0X3Byb3BlcnR5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL25vdXNlci91c2VyX2dldF9zaWduZWRfaW4uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvb3B1cy9vcHVzX2F1ZGlvX2RlY29kZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvb3B1cy9vcHVzX2F1ZGlvX2RlY29kZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9kaXJlY3RvcnlfY3JlYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfYXRvbWljX3JlcGxhY2UuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9jYW5fb3Blbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2Nsb3NlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfZGVsZXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfZXhpc3RzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfZmx1c2guY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9nZXRfaW5mby5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2dldF9wYXRoX2luZm8uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9vcGVuLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfcmVhZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX3NlZWsuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV90cnVuY2F0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX3dyaXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZyZWVfc3BhY2UuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZnJlZV9zcGFjZS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2xvZ19mbHVzaC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9sb2dfZm9ybWF0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2xvZ19pc190dHkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbG9nX3Jhdy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9sb2cuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2FsbG9jYXRlX2FsaWduZWRfdW5jaGVja2VkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9mbHVzaC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfZnJlZV9hbGlnbmVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9tYXBwZWRfZmlsZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfbWFwcGVkX2ZpbGUuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zZXRfbm9uX2Jsb2NraW5nX2ludGVybmFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9hY2NlcHQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2JpbmQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2NsZWFyX2xhc3RfZXJyb3IuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2Nvbm5lY3QuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2NyZWF0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfZnJlZV9yZXNvbHV0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9nZXRfbGFzdF9lcnJvci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfZ2V0X2xvY2FsX2FkZHJlc3MuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2ludGVybmFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pc19jb25uZWN0ZWRfYW5kX2lkbGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2lzX2Nvbm5lY3RlZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2pvaW5fbXVsdGljYXN0X2dyb3VwLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9saXN0ZW4uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3JlY2VpdmVfZnJvbS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfcmVzb2x2ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2VuZF90by5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X2Jyb2FkY2FzdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3NldF9yZXVzZV9hZGRyZXNzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfc2VuZF9idWZmZXJfc2l6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3RjcF9rZWVwX2FsaXZlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfdGNwX25vX2RlbGF5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfdGNwX3dpbmRvd19zY2FsaW5nLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0b3JhZ2Vfd3JpdGVfcmVjb3JkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19jb21wYXJlX25vX2Nhc2Vfbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zdHJpbmdfY29tcGFyZV9ub19jYXNlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19jb21wYXJlX3dpZGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3RyaW5nX2Zvcm1hdF93aWRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19mb3JtYXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2JyZWFrX2ludG9fZGVidWdnZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2NsZWFyX2xhc3RfZXJyb3IuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2dldF9lcnJvcl9zdHJpbmcuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2dldF9sYXN0X2Vycm9yLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N5c3RlbV9nZXRfbG9jYWxlX2lkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGhyZWFkX3NsZWVwLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfZ2V0X21vbm90b25pY19ub3cuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGltZV9nZXRfbW9ub3RvbmljX3RocmVhZF9ub3cuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGltZV9nZXRfbm93LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3RpbWVfaXNfdGltZV90aHJlYWRfbm93X3N1cHBvcnRlZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX3pvbmVfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGltZV96b25lX2dldF9uYW1lLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvY29uZGl0aW9uX3ZhcmlhYmxlX2Jyb2FkY2FzdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9jcmVhdGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9jb25kaXRpb25fdmFyaWFibGVfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9zaWduYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9jb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfYWNxdWlyZV90cnkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9hY3F1aXJlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfY3JlYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X3JlbGVhc2UuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9vbmNlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NvbnRleHRfZ2V0X3BvaW50ZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY29udGV4dF9pbnRlcm5hbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jb250ZXh0X2ludGVybmFsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY3JlYXRlX2xvY2FsX2tleS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZGVzdHJveV9sb2NhbF9rZXkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZGV0YWNoLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2dldF9jdXJyZW50LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2dldF9sb2NhbF92YWx1ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9pc19lcXVhbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9qb2luLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfY3JlYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zYW1wbGVyX2ZyZWV6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zYW1wbGVyX2ludGVybmFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfaW50ZXJuYWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zYW1wbGVyX2lzX3N1cHBvcnRlZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zYW1wbGVyX3RoYXcuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfc2V0X2xvY2FsX3ZhbHVlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3lpZWxkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B1bHNlL3B1bHNlX2F1ZGlvX3NpbmtfdHlwZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdWxzZS9wdWxzZV9hdWRpb19zaW5rX3R5cGUuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdWxzZS9wdWxzZV9keW5hbWljX2xvYWRfZGlzcGF0Y2hlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdWxzZS9wdWxzZV9keW5hbWljX2xvYWRfZGlzcGF0Y2hlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9jcmFzaF9zaWduYWxzX3NpZ2FjdGlvbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvY3Jhc2hfc2lnbmFscy5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9kZWJ1Z19zaWduYWxzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9kZWJ1Z19zaWduYWxzLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N1c3BlbmRfc2lnbmFscy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvc3VzcGVuZF9zaWduYWxzLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N5c3RlbV9yZXF1ZXN0X2NvbmNlYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N5c3RlbV9yZXF1ZXN0X2ZyZWV6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvc3lzdGVtX3JlcXVlc3Rfc3VzcGVuZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19jcmVhdGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19kZXN0cm95LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfZ2V0X21heF9jaGFubmVsc181XzEuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19nZXRfbWluX2J1ZmZlcl9zaXplX2luX2ZyYW1lcy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2dldF9uZWFyZXN0X3N1cHBvcnRlZF9zYW1wbGVfZnJlcXVlbmN5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pbnRlcm5hbC5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaXNfYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlX3N1cHBvcnRlZF9pbnRlcmxlYXZlZF9vbmx5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaXNfYXVkaW9fc2FtcGxlX3R5cGVfc3VwcG9ydGVkX2Zsb2F0MzJfb25seS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2lzX3ZhbGlkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyYXNoX2hhbmRsZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyYXNoX2hhbmRsZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZGlyZWN0b3J5X2Nhbl9vcGVuLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9ldmVudF9jYW5jZWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2V2ZW50X3NjaGVkdWxlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfYXRvbWljX3JlcGxhY2Vfd3JpdGVfZmlsZS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX21vZGVfc3RyaW5nX3RvX2ZsYWdzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9jbG9zZV9yZWNvcmQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX2RlbGV0ZV9yZWNvcmQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX2dldF9yZWNvcmRfc2l6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2Vfb3Blbl9yZWNvcmQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX3JlYWRfcmVjb3JkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfbXV0ZXguY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xvZ19tdXRleC5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfcmF3X2R1bXBfc3RhY2suY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xvZ19yYXdfZm9ybWF0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fYnVmZmVyX2J1ZGdldC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX2NvbmZpZ3VyYXRpb25fNV8xLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fb3V0cHV0X2NvdW50X3NpbmdsZV9hdWRpb19vdXRwdXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxpZ25tZW50LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2FsbG9jYXRpb25fdW5pdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9nYXJiYWdlX2NvbGxlY3Rpb25fZHVyYXRpb25fdGhyZXNob2xkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3BhZGRpbmcuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfc3RvcmFnZV90eXBlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfaW5pdGlhbF9idWZmZXJfY2FwYWNpdHkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfcHJvZ3Jlc3NpdmVfYnVmZmVyX2J1ZGdldC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3ZpZGVvX2J1ZmZlcl9idWRnZXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl9wb29sX2FsbG9jYXRlX29uX2RlbWFuZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3VzaW5nX21lbW9yeV9wb29sLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZW1vcnkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL25ldy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3F1ZXVlX2FwcGxpY2F0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29uY2F0X3dpZGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb25jYXQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb3B5X3dpZGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb3B5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfZHVwbGljYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fZ2V0X3JhbmRvbV91aW50NjQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X2JsdXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X2ZvY3VzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9wYXVzZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3JlcXVlc3RfcmV2ZWFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9zdG9wLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF91bnBhdXNlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fc3VwcG9ydHNfcmVzdW1lLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC93aW5kb3dfc2V0X2RlZmF1bHRfb3B0aW9ucy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2NhcHRpb25fc2V0dGluZ3MuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X2dldF9kaXNwbGF5X3NldHRpbmdzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfdGV4dF90b19zcGVlY2hfc2V0dGluZ3MuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X3NldF9jYXB0aW9uc19lbmFibGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9kZXN0cm95X3RyYW5zZm9ybWVyLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2RlY29kZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2lzX2RlY29kZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19vdXRwdXRfcHJvdGVjdGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfc2V0X2F1ZGlvX3dyaXRlX2R1cmF0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfc2V0X291dHB1dF9wcm90ZWN0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9jbG9zZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY3JlYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9kZXN0cm95LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX29wZW4uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX3JlYWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2NhbmNlbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19zcGVhay5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfdG90YWxfZ3B1X21lbW9yeS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfdXNlZF9ncHVfbWVtb3J5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2hpZGVfc3BsYXNoX3NjcmVlbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yYWlzZV9wbGF0Zm9ybV9lcnJvci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9zaWduX3dpdGhfY2VydGlmaWNhdGlvbl9zZWNyZXRfa2V5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3VpX25hdl9nZXRfaW50ZXJmYWNlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2ZvY3VzX29uX3NjcmVlbl9rZXlib2FyZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfZGlhZ29uYWxfc2l6ZV9pbl9pbmNoZXMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZ2V0X29uX3NjcmVlbl9rZXlib2FyZF9ib3VuZGluZ19yZWN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2hpZGVfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2lzX29uX3NjcmVlbl9rZXlib2FyZF9zaG93bi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc19zdXBwb3J0ZWQuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2V0X29uX3NjcmVlbl9rZXlib2FyZF9rZWVwX2ZvY3VzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3VwZGF0ZV9vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnMuY2MnLAotCi0gICAgXSwKLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9iYXNlX3N5bWJvbGl6ZS5neXA6c3RhcmJvYXJkX2Jhc2Vfc3ltYm9saXplJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWcuZ3lwOmZmbXBlZ19keW5hbWljX2xvYWQnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhLmd5cDptZWRpYV91dGlsJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDpwbGF5ZXInLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2wuZ3lwOmNyeXB0bycsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZGUyNjVfaW5jbHVkZXMvZGUyNjVfaW5jbHVkZXMuZ3lwOmRlMjY1JywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJldmVudC9saWJldmVudC5neXA6bGliZXZlbnQnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L29wdXMvb3B1cy5neXA6b3B1cycsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHVsc2VhdWRpb19pbmNsdWRlcy9wdWxzZWF1ZGlvX2luY2x1ZGVzLmd5cDpwdWxzZWF1ZGlvJywKLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydoYXNfY2RtPT0xJywgewotICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZTMuZ3lwOm9lbWNyeXB0bycsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvd2lkZXZpbmUvd2lkZXZpbmUzLmd5cDp3aWRldmluZV9jZV9jZG1fc3RhdGljJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9zb3VyY2VzJzogWwotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2RybV9jcmVhdGVfc3lzdGVtLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9pbnRlcm5hbC9vZW1jcnlwdG9fZW5naW5lX2RldmljZV9wcm9wZXJ0aWVzX2xpbnV4LmNjJywKLQotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2Nsb3NlX3Nlc3Npb24uY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2Rlc3Ryb3lfc3lzdGVtLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9nZW5lcmF0ZV9zZXNzaW9uX3VwZGF0ZV9yZXF1ZXN0LmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9nZXRfbWV0cmljcy5jYycsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYycsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fc3lzdGVtX2ludGVybmFsLmgnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX3VwZGF0ZV9zZXJ2ZXJfY2VydGlmaWNhdGUuY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX3VwZGF0ZV9zZXNzaW9uLmNjJywKLQotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL2RybV9zeXN0ZW1fd2lkZXZpbmUuY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL2RybV9zeXN0ZW1fd2lkZXZpbmUuaCcsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvd2lkZXZpbmUvbWVkaWFfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZV9zdG9yYWdlLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZV9zdG9yYWdlLmgnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL3dpZGV2aW5lX3RpbWVyLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZV90aW1lci5oJywKLSAgICAgICAgXSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9zb3VyY2VzJzogWwotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jbG9zZV9zZXNzaW9uLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jcmVhdGVfc3lzdGVtLmNjJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9kZXN0cm95X3N5c3RlbS5jYycsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2VuZXJhdGVfc2Vzc2lvbl91cGRhdGVfcmVxdWVzdC5jYycsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2V0X21ldHJpY3MuY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2lzX3NlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGFibGUuY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXJ2ZXJfY2VydGlmaWNhdGUuY2MnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXNzaW9uLmNjJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZSA9PSAxJywgewotICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXZlcmdyZWVuX2NvbmZpZy5neXA6ZXZlcmdyZWVuX2NvbmZpZycsCi0gICAgICAgXX0sCi0gICAgICBdLAotICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZSA9PSAxJyBhbmQgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpdGUgIT0gMScsIHsKLSAgICAgICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL3BlbmRpbmdfcmVzdGFydC5neXA6cGVuZGluZ19yZXN0YXJ0JywKLSAgICAgICBdfSwKLSAgICAgIF0sCi0gICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpYnVud2luZCA9PSAxJywgewotICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYnVud2luZC9saWJ1bndpbmQuZ3lwOnVud2luZF9zdGFyYm9hcmQnLAotICAgICAgIF19LAotICAgICAgXSwKLSAgICBdLAotICB9LAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ2dsX3R5cGUgIT0gIm5vbmUiJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkva2hyb25vcycsCi0gICAgICAgIF0sCi0gICAgICB9Ci0gICAgfV0KLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cGkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2U5MzcwLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV90ZXN0cy5neXBpJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfdGVzdHMuZ3lwaScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICAgICc8QChtZWRpYV90ZXN0c19zb3VyY2VzKScsCi0gICAgICAgICc8QChwbGF5ZXJfdGVzdHNfc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgYWxsb3dzIHRoZSB0ZXN0cyB0byBpbmNsdWRlIGludGVybmFsIG9ubHkgaGVhZGVyIGZpbGVzLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS88KHN0YXJib2FyZF9wYXRoKS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwOnN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zeXN0ZW1fZ2V0X3BhdGguY2MgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYwppbmRleCBmMzJhNjhhLi4xZjczMTEzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYworKysgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYwpAQCAtMTIzLDggKzEyMyw3IEBACiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgY2hhciogbGFzdF9zbGFzaCA9Ci0gICAgICBjb25zdF9jYXN0PGNoYXIgKj4oc3RycmNocihvdXRfcGF0aCwgJy8nKSk7CisgIGNoYXIqIGxhc3Rfc2xhc2ggPSBjb25zdF9jYXN0PGNoYXIqPihzdHJyY2hyKG91dF9wYXRoLCAnLycpKTsKICAgaWYgKCFsYXN0X3NsYXNoKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0yMjgsOSArMjI3LDExIEBACiAgICAgICBTYkRpcmVjdG9yeUNyZWF0ZShwYXRoLmRhdGEoKSk7CiAgICAgICBicmVhazsKIAorI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfU1lTVEVNX1BBVEhfVEVTVF9PVVRQVVRfRElSRUNUT1JZX0RFUFJFQ0FURUQKICAgICBjYXNlIGtTYlN5c3RlbVBhdGhUZXN0T3V0cHV0RGlyZWN0b3J5OgogICAgICAgcmV0dXJuIFNiU3lzdGVtR2V0UGF0aChrU2JTeXN0ZW1QYXRoRGVidWdPdXRwdXREaXJlY3RvcnksIG91dF9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX3NpemUpOworI2VuZGlmICAvLyAjaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9TWVNURU1fUEFUSF9URVNUX09VVFBVVF9ESVJFQ1RPUllfREVQUkVDQVRFRAogCiAgICAgY2FzZSBrU2JTeXN0ZW1QYXRoRXhlY3V0YWJsZUZpbGU6CiAgICAgICByZXR1cm4gR2V0RXhlY3V0YWJsZVBhdGgob3V0X3BhdGgsIHBhdGhfc2l6ZSk7CkBAIC0yNDksMTcgKzI1MCwxNCBAQAogICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIGNhc2Uga1NiU3lzdGVtUGF0aFN0b3JhZ2VEaXJlY3Rvcnk6CiAgICAgICBpZiAoIUdldFN0b3JhZ2VEaXJlY3RvcnkocGF0aC5kYXRhKCksIGtQYXRoU2l6ZSkpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQogICAgICAgYnJlYWs7Ci0jZW5kaWYKIAogICAgIGRlZmF1bHQ6Ci0gICAgICBTQl9OT1RJTVBMRU1FTlRFRCgpIDw8ICJTYlN5c3RlbUdldFBhdGggbm90IGltcGxlbWVudGVkIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGhfaWQ7CisgICAgICBTQl9OT1RJTVBMRU1FTlRFRCgpIDw8ICJTYlN5c3RlbUdldFBhdGggbm90IGltcGxlbWVudGVkIGZvciAiIDw8IHBhdGhfaWQ7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQppbmRleCA3ZjBkNmVhLi45NTkyZjczIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQorKysgYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQpAQCAtMTksNiArMTksNDIgQEAKIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKIAorIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZworX0ZJTFRFUkVEX1RFU1RTID0geworICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWworICAgICAgICAjIGxpYmRhdjFkIGNyYXNoZXMgd2hlbiBmZWQgaW52YWxpZCBkYXRhCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LipJbnZhbGlkKicsCisgICAgXSwKK30KK19GSUxURVJFRF9URVNUU1snbnBsYiddID0gW10KKyMgQ29uZGl0aW9uYWxseSBkaXNhYmxlcyB0ZXN0cyB0aGF0IHJlcXVpcmUgaXB2NgoraWYgb3MuZ2V0ZW52KCdJUFY2X0FWQUlMQUJMRScsICcxJykgPT0gJzAnOgorICBfRklMVEVSRURfVEVTVFNbJ25wbGInXS5leHRlbmQoWworICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlEZXN0aW5hdGlvbi8xJywKKyAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9TYlNvY2tldEdldEludGVyZmFjZUFkZHJlc3NUZXN0LlN1bm55RGF5U291cmNlRm9yRGVzdGluYXRpb24vMScsCisgICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvU2JTb2NrZXRHZXRJbnRlcmZhY2VBZGRyZXNzVGVzdC5TdW5ueURheVNvdXJjZU5vdExvb3BiYWNrLzEnLAorICBdKQorIyBUT0RPOiBSZS1lbmFibGUgb25jZSB0ZXN0cyBvciBpbmZyYSBmaXhlZC4KK19GSUxURVJFRF9URVNUU1snbnBsYiddLmV4dGVuZChbCisgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0QmluZFRlc3QuUmFpbnlEYXlCYWRJbnRlcmZhY2UvMScsCisgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldEdldExvY2FsQWRkcmVzc1Rlc3QuU3VubnlEYXlDb25uZWN0ZWQvMScsCisgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldElzQ29ubmVjdGVkQW5kSWRsZVRlc3QuU3VubnlEYXkvMScsCisgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldElzQ29ubmVjdGVkVGVzdC5TdW5ueURheS8xJywKKyAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0UmVjZWl2ZUZyb21UZXN0LlN1bm55RGF5LzEnLAorICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9TYlNvY2tldFJlc29sdmVUZXN0LkxvY2FsaG9zdC8xJywKKyAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvU2JTb2NrZXRSZXNvbHZlVGVzdC5TdW5ueURheUZpbHRlcmVkLzEnLAorICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRTZW5kVG9UZXN0LlJhaW55RGF5U2VuZFRvQ2xvc2VkU29ja2V0LzEnLAorICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRTZW5kVG9UZXN0LlJhaW55RGF5U2VuZFRvU29ja2V0VW50aWxCbG9ja2luZy8xJywKKyAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0U2VuZFRvVGVzdC5SYWlueURheVNlbmRUb1NvY2tldENvbm5lY3Rpb25SZXNldC8xJywKKyAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0V2FpdGVyV2FpdFRlc3QuU3VubnlEYXkvMScsCisgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldFdhaXRlcldhaXRUZXN0LlN1bm55RGF5QWxyZWFkeVJlYWR5LzEnLAorICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXYWl0ZXJXYWl0VGltZWRUZXN0LlN1bm55RGF5LzEnLAorICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXcmFwcGVyVGVzdC5TdW5ueURheS8xJywKK10pCisKKyMgcHlsaW50OiBlbmFibGU9bGluZS10b28tbG9uZworCisKIGNsYXNzIFRlc3RGaWx0ZXJzKG9iamVjdCk6CiAgICIiIlN0YXJib2FyZCBMaW51eCBwbGF0Zm9ybSB0ZXN0IGZpbHRlcnMuIiIiCiAKQEAgLTI5LDE0ICs2NSwxNCBAQAogICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aHMuUkVQT1NJVE9SWV9ST09ULCAndGhpcmRfcGFydHknLCAnY2VfY2RtJywgJ2NkbScsCiAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZScsICdjZG0uaCcpKQogCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CiAgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCiAKICAgICBpZiBoYXNfY2RtOgogICAgICAgcmV0dXJuIGZpbHRlcnMKIAogICAgICMgRmlsdGVyIHRoZSBkcm0gcmVsYXRlZCB0ZXN0cywgYXMgY2VfY2RtIGlzIG5vdCBwcmVzZW50LgotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX0RSTV9SRUxBVEVEX1RFU1RTLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX0RSTV9SRUxBVEVEX1RFU1RTLml0ZW1zKCk6CiAgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCiAgICAgcmV0dXJuIGZpbHRlcnMKIApAQCAtNDcsNDEgKzgzLDYgQEAKICAgICAgIF0sCiAgIH0KIAotICAjIHB5bGludDogZGlzYWJsZT1saW5lLXRvby1sb25nCi0gIF9GSUxURVJFRF9URVNUUyA9IHsKLSAgICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWwotICAgICAgICAgICMgbGliZGF2MWQgY3Jhc2hlcyB3aGVuIGZlZCBpbnZhbGlkIGRhdGEKLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC4qSW52YWxpZConLAotICAgICAgXSwKLSAgfQotICBfRklMVEVSRURfVEVTVFNbJ25wbGInXSA9IFtdCi0gICMgQ29uZGl0aW9uYWxseSBkaXNhYmxlcyB0ZXN0cyB0aGF0IHJlcXVpcmUgaXB2NgotICBpZiBvcy5nZXRlbnYoJ0lQVjZfQVZBSUxBQkxFJywgJzEnKSA9PSAnMCc6Ci0gICAgX0ZJTFRFUkVEX1RFU1RTWyducGxiJ10uZXh0ZW5kKFsKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlEZXN0aW5hdGlvbi8xJywKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VGb3JEZXN0aW5hdGlvbi8xJywKLSAgICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0R2V0SW50ZXJmYWNlQWRkcmVzc1Rlc3QuU3VubnlEYXlTb3VyY2VOb3RMb29wYmFjay8xJywKLSAgICBdKQotICAjIFRPRE86IFJlLWVuYWJsZSBvbmNlIHRlc3RzIG9yIGluZnJhIGZpeGVkLgotICBfRklMVEVSRURfVEVTVFNbJ25wbGInXS5leHRlbmQoWwotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1NiU29ja2V0QmluZFRlc3QuUmFpbnlEYXlCYWRJbnRlcmZhY2UvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0R2V0TG9jYWxBZGRyZXNzVGVzdC5TdW5ueURheUNvbm5lY3RlZC8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRJc0Nvbm5lY3RlZEFuZElkbGVUZXN0LlN1bm55RGF5LzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldElzQ29ubmVjdGVkVGVzdC5TdW5ueURheS8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRSZWNlaXZlRnJvbVRlc3QuU3VubnlEYXkvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvU2JTb2NrZXRSZXNvbHZlVGVzdC5Mb2NhbGhvc3QvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvU2JTb2NrZXRSZXNvbHZlVGVzdC5TdW5ueURheUZpbHRlcmVkLzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldFNlbmRUb1Rlc3QuUmFpbnlEYXlTZW5kVG9DbG9zZWRTb2NrZXQvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0U2VuZFRvVGVzdC5SYWlueURheVNlbmRUb1NvY2tldFVudGlsQmxvY2tpbmcvMScsCi0gICAgICAnU2JTb2NrZXRBZGRyZXNzVHlwZXMvUGFpclNiU29ja2V0U2VuZFRvVGVzdC5SYWlueURheVNlbmRUb1NvY2tldENvbm5lY3Rpb25SZXNldC8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXYWl0ZXJXYWl0VGVzdC5TdW5ueURheS8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXYWl0ZXJXYWl0VGVzdC5TdW5ueURheUFscmVhZHlSZWFkeS8xJywKLSAgICAgICdTYlNvY2tldEFkZHJlc3NUeXBlcy9QYWlyU2JTb2NrZXRXYWl0ZXJXYWl0VGltZWRUZXN0LlN1bm55RGF5LzEnLAotICAgICAgJ1NiU29ja2V0QWRkcmVzc1R5cGVzL1BhaXJTYlNvY2tldFdyYXBwZXJUZXN0LlN1bm55RGF5LzEnLAotICBdKQotCi0gICMgcHlsaW50OiBlbmFibGU9bGluZS10b28tbG9uZwotCiAKIGRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgogICByZXR1cm4gVGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlNDMyZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gSW5jbHVkZXMgdGhyZWFkaW5nIHByaW1pdGl2ZSB0eXBlcyBhbmQgaW5pdGlhbGl6ZXJzLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9MSU5VWF9TSEFSRURfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfU0hBUkVEX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfU0hBUkVEX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L0JVSUxELmduIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1NmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L0JVSUxELmduCkBAIC0wLDAgKzEsMjYgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitzdGF0aWNfbGlicmFyeSgic3RhcmJvYXJkX3BsYXRmb3JtIikgeworICBjaGVja19pbmNsdWRlcyA9IGZhbHNlCisKKyAgc291cmNlcyA9IFsgIi8vc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tYWluLmNjIiBdCisKKyAgcHVibGljX2RlcHMgPSBbCisgICAgIi8vc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zaGFyZWQ6c3RhcmJvYXJkX3BsYXRmb3JtIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXI6dmlkZW9fZG1wIiwKKyAgXQorCisgIGNvbmZpZ3MgKz0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnN0YXJib2FyZF9pbXBsZW1lbnRhdGlvbiIgXQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvYXJncy5nbiBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2FyZ3MuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3M2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2FyZ3MuZ24KQEAgLTAsMCArMSwxOCBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3RhcmdldF9wbGF0Zm9ybSA9ICJsaW51eC14NjR4MTEtY2xhbmctMy05IgordGFyZ2V0X29zID0gImxpbnV4IgordGFyZ2V0X2NwdSA9ICJ4NjQiCit1c2luZ19vbGRfY29tcGlsZXIgPSB0cnVlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CmluZGV4IDYwYmZkYWIuLjYzMTY0MDEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4ICsxMyw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIExpbnV4IHg2NHgxMSBDbGFuZyAzLjkgQ29iYWx0IGNvbmZpZ3VyYXRpb24uIiIiCiAKLWltcG9ydCBvcwotCiBmcm9tIHN0YXJib2FyZC5saW51eC5zaGFyZWQuY29iYWx0IGltcG9ydCBjb25maWd1cmF0aW9uIGFzIHNoYXJlZF9jb25maWd1cmF0aW9uCiBmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgogCkBAIC0yNiwxMyArMjQsMjEgQEAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBzdXBlcihDb2JhbHRMaW51eFg2NFgxMUNsYW5nMzlDb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19GSUxURVJFRF9URVNUUy5pdGVtcygpOgogICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQogICAgIHJldHVybiBmaWx0ZXJzCiAKICAgIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQuCi0gIF9fRklMVEVSRURfVEVTVFMgPSB7CisgIF9fRklMVEVSRURfVEVTVFMgPSB7ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICAgICAgICd6aXBfdW5pdHRlc3RzJzogWwogICAgICAgICAgICdaaXBSZWFkZXJUZXN0LkV4dHJhY3RUb0ZpbGVBc3luY19SZWd1bGFyRmlsZScsCiAgICAgICBdLAorICAgICAgIyBUcmFja2VkIGJ5IGIvMjI2OTk5MDc5LgorICAgICAgJ3JlbmRlcmVyX3Rlc3QnOiBbCisgICAgICAgICAgJ0xvdHRpZUNvdmVyYWdlUGl4ZWxUZXN0KnNrb3R0aWVfbGluZWFyX3dpcGVfZWZmZWN0X2pzb24nLAorICAgICAgICAgICdMb3R0aWVDb3ZlcmFnZVBpeGVsVGVzdCpza290dGllX21hdHRlX2JsZW5kbW9kZV9qc29uJywKKyAgICAgICAgICAnTG90dGllQ292ZXJhZ2VQaXhlbFRlc3Qqc2tvdHRpZV9zaGlmdF9jaGFubmVsc19lZmZlY3RfanNvbicsCisgICAgICAgICAgJ0xvdHRpZUNvdmVyYWdlUGl4ZWxUZXN0KnNrb3R0aWVfM2RfMnBsYW5lc19qc29uJywKKyAgICAgICAgICAnTG90dGllQ292ZXJhZ2VQaXhlbFRlc3Qqc2tvdHRpZV92ZW5ldGlhbmJsaW5kc19lZmZlY3RfanNvbicsCisgICAgICBdLAogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9jb21waWxlcl9mbGFncy5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvY29tcGlsZXJfZmxhZ3MuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU1MjU1ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9jb21waWxlcl9mbGFncy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGZvciBMaW51eCBvbiBTdGFyYm9hcmQuIEluY2x1ZGVkIGZyb20KLSMgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaS4KLSMKLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY29tcGlsZXJfZmxhZ3NfaG9zdCc6IFsKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2xpbmtlcl9mbGFncyc6IFsKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICctZnJ0dGknLAotICAgICAgJy1PMCcsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLU8yJywKLSAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGQnOiBbCi0gICAgICAnLWZuby1ydHRpJywKLSAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGRfc2l6ZSc6IFsKLSAgICAgICctT3MnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGRfc3BlZWQnOiBbCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydjbGFuZz09MScsIHsKLSAgICAgICAgJ2NvbW1vbl9jbGFuZ19mbGFncyc6IFsKLSAgICAgICAgICAnLVdlcnJvcicsCi0gICAgICAgICAgJy1mY29sb3ItZGlhZ25vc3RpY3MnLAotICAgICAgICAgICMgRGVmYXVsdCB2aXNpYmlsaXR5IHRvIGhpZGRlbiwgdG8gZW5hYmxlIGRlYWQgc3RyaXBwaW5nLgotICAgICAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKLSAgICAgICAgICAjIFdhcm4gZm9yIGltcGxpY2l0IHR5cGUgY29udmVyc2lvbnMgdGhhdCBtYXkgY2hhbmdlIGEgdmFsdWUuCi0gICAgICAgICAgJy1XY29udmVyc2lvbicsCi0gICAgICAgICAgIyBXYXJucyBvbiBzd2l0Y2hlcyBvbiBlbnVtcyB0aGF0IGNvdmVyIGFsbCBlbnVtIHZhbHVlcyBidXQKLSAgICAgICAgICAjIGFsc28gY29udGFpbiBhIGRlZmF1bHQ6IGJyYW5jaC4gQ2hyb21lIGlzIGZ1bGwgb2YgdGhhdC4KLSAgICAgICAgICAnLVduby1jb3ZlcmVkLXN3aXRjaC1kZWZhdWx0JywKLSAgICAgICAgICAjIHByb3RvYnVmIHVzZXMgaGFzaF9tYXAuCi0gICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZCcsCi0gICAgICAgICAgJy1mbm8tZXhjZXB0aW9ucycsCi0gICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KLSAgICAgICAgICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycycsCi0gICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywgICMgU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIyMDQKLSAgICAgICAgICAjIERvbid0IHdhcm4gZm9yIGludmFsaWQgYWNjZXNzIHRvIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXIgb2YgTlVMTCBvYmplY3QuCi0gICAgICAgICAgJy1Xbm8taW52YWxpZC1vZmZzZXRvZicsCi0gICAgICAgICAgIyBTdXBwcmVzcyAnaW1wbGljaXQgY29udmVyc2lvbiBjaGFuZ2VzIHNpZ25lZG5lc3MnCi0gICAgICAgICAgJy1Xbm8tc2lnbi1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIHNoaWZ0aW5nIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlIGlzIHVuZGVmaW5lZAotICAgICAgICAgICctV25vLXNoaWZ0LXNpZ24tb3ZlcmZsb3cnLAotICAgICAgICAgICMgU3VwcHJlc3MgImNvbXBhcmlzb24gbWF5IGJlIGFzc3VtZWQgdG8gYWx3YXlzIGV2YWx1YXRlIHRvIGZhbHNlIgotICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC11bmRlZmluZWQtY29tcGFyZScsCi0gICAgICAgICAgIyBTdXBwcmVzcyAiY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBlbnVtIGV4cHJlc3Npb24gPCAwIGlzIGFsd2F5cyBmYWxzZSIKLSAgICAgICAgICAnLVduby10YXV0b2xvZ2ljYWwtY29tcGFyZScsCi0gICAgICAgICAgIyBTdXBwcmVzcyAiW3R5cGUxXSBoYXMgQy1saW5rYWdlIHNwZWNpZmllZCwgYnV0IHJldHVybnMgdXNlci1kZWZpbmVkIHR5cGUgW3R5cGUyXSB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBDIgotICAgICAgICAgICctV25vLXJldHVybi10eXBlLWMtbGlua2FnZScsCi0gICAgICAgICAgJy1Xbm8tYXJyYXktYm91bmRzJywKLSAgICAgICAgICAjIFN1cHByZXNzICJ0ZW1wbGF0ZSBhcmd1bWVudCB1c2VzIHVubmFtZWQgdHlwZSIKLSAgICAgICAgICAnLVduby11bm5hbWVkLXR5cGUtdGVtcGxhdGUtYXJncycsCi0gICAgICAgICAgIyAndGhpcycgcG9pbnRlciBjYW5ub3QgYmUgTlVMTC4uLnBvaW50ZXIgbWF5IGJlIGFzc3VtZWQKLSAgICAgICAgICAjIHRvIGFsd2F5cyBjb252ZXJ0IHRvIHRydWUuCi0gICAgICAgICAgJy1Xbm8tdW5kZWZpbmVkLWJvb2wtY29udmVyc2lvbicsCi0gICAgICAgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KLSAgICAgICAgICAnLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZScsCi0gICAgICAgICAgIyBUcmlnZ2VyZWQgYnkgdGhlIENPTVBJTEVfQVNTRVJUIG1hY3JvLgotICAgICAgICAgICctV25vLXVudXNlZC1sb2NhbC10eXBlZGVmJywKLSAgICAgICAgICAjIFN1cHByZXNzICInJiYnIHdpdGhpbiAnfHwnIgotICAgICAgICAgICctV25vLWxvZ2ljYWwtb3AtcGFyZW50aGVzZXMnLAotICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdW5rbm93biBwcmFnbWFzLgotICAgICAgICAgICctV25vLXVua25vd24tcHJhZ21hcycsCi0gICAgICAgICAgIyBTdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBlcXVhbGl0eSBjaGVja3Mgd2l0aGluIGRvdWJsZSBwYXJlbnRoZXNlcy4KLSAgICAgICAgICAnLVduby1wYXJlbnRoZXNlcy1lcXVhbGl0eScsCi0gICAgICAgICAgIyBTdXBwcmVzcyB3YXJuaW5ncyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIGR1ZSB0byBjb25zdGV4cHIgY29uZGl0aW9ucwotICAgICAgICAgICctV25vLXVucmVhY2hhYmxlLWNvZGUnLAotICAgICAgICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdmFsdWVzIGJlaW5nIHdyaXR0ZW4gYnV0IG5vdCByZWFkIGJlZm9yZSB0aGUgbmV4dCB3cml0ZS4KLSAgICAgICAgICAnLVduby11bnVzZWQtdmFsdWUnLAotICAgICAgICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgcmVsYXRlZCB0byB1bnVzZWQgY29tcGlsYXRpb24gZmxhZ3MgaW4gY2xhbmcuCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCcsCi0gICAgICAgICAgIyBTdXBwcmVzcyB3YXJuaW5ncyBpbiBsaWJqcGVnCi0gICAgICAgICAgJy1Xbm8tc2hpZnQtbmVnYXRpdmUtdmFsdWUnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ2NvYmFsdF9mYXN0YnVpbGQ9PTAnLCB7Ci0gICAgICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICAgICAnLWcnLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAgICAgJy1nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZCc6IFsKLSAgICAgICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAjIExpbWl0IHRvIEM5OS4gVGhpcyBhbGxvd3MgTGludXggdG8gYmUgYSBjYW5hcnkgYnVpbGQgZm9yIGFueQotICAgICAgIyBDMTEgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBvbiBzb21lIHBsYXRmb3JtcycgY29tcGlsZXJzLgotICAgICAgJy1zdGQ9Yzk5JywKLSAgICBdLAotICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAnLXN0ZD1jKysxNCcsCi0gICAgXSwKLSAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ3NiX3BlZGFudGljX3dhcm5pbmdzPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctV2FsbCcsCi0gICAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAgICctV3VucmVhY2hhYmxlLWNvZGUnLAotICAgICAgICAgICc8QChjb21tb25fY2xhbmdfZmxhZ3MpJywKLSAgICAgICAgXSwKLSAgICAgIH0sewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICc8QChjb21tb25fY2xhbmdfZmxhZ3MpJywKLSAgICAgICAgICAjICd0aGlzJyBwb2ludGVyIGNhbm5vdCBiZSBOVUxMLi4ucG9pbnRlciBtYXkgYmUgYXNzdW1lZAotICAgICAgICAgICMgdG8gYWx3YXlzIGNvbnZlcnQgdG8gdHJ1ZS4KLSAgICAgICAgICAnLVduby11bmRlZmluZWQtYm9vbC1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIFNraWEgZG9lc24ndCB1c2Ugb3ZlcnJpZGVzLgotICAgICAgICAgICctV25vLWluY29uc2lzdGVudC1taXNzaW5nLW92ZXJyaWRlJywKLSAgICAgICAgICAjIERvIG5vdCB3YXJuIGFib3V0IHVudXNlZCBmdW5jdGlvbiBwYXJhbXMuCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBmb3IgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9ucyB0aGF0IG1heSBjaGFuZ2UgYSB2YWx1ZS4KLSAgICAgICAgICAnLVduby1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIERvIG5vdCB3YXJuIGFib3V0IGFuIGltcGxpY2l0IGV4Y2VwdGlvbiBzcGVjIG1pc21hdGNoLgotICAgICAgICAgICctV25vLWltcGxpY2l0LWV4Y2VwdGlvbi1zcGVjLW1pc21hdGNoJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWyd1c2VfYXNhbj09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT1hZGRyZXNzJywKLSAgICAgICAgICAnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInLAotICAgICAgICBdLAotICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT1hZGRyZXNzJywKLSAgICAgICAgICAjIEZvcmNlIGxpbmtpbmcgb2YgdGhlIGhlbHBlcnMgaW4gc2FuaXRpemVyX29wdGlvbnMuY2MKLSAgICAgICAgICAnLVdsLC11X3Nhbml0aXplcl9vcHRpb25zX2xpbmtfaGVscGVyJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0FERFJFU1NfU0FOSVRJWkVSJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWyd1c2VfdHNhbj09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWZzYW5pdGl6ZT10aHJlYWQnLAotICAgICAgICAgICctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctZnNhbml0aXplPXRocmVhZCcsCi0gICAgICAgIF0sCi0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdUSFJFQURfU0FOSVRJWkVSJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sICMgZW5kIG9mIHRhcmdldF9kZWZhdWx0cwotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZDU4MTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX3RhcmdldF9wbGF0Zm9ybSc6ICdsaW51eC14NjR4MTEtY2xhbmctMy05JywKLSAgICAnY29iYWx0X3Y4X2VtaXRfYnVpbHRpbnNfYXNfaW5saW5lX2FzbSc6IDEsCi0gICAgIyBSZXF1aXJlZCBDKysxNyBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIENsYW5nLTQuMCBhbmQgbmV3ZXIKLSAgICAnc2JfZGlzYWJsZV9jcHAxN19hdWRpdCc6IDEsCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2xpbnV4LXg2NHgxMS1jbGFuZy0zLTlfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdsaW51eC14NjR4MTEtY2xhbmctMy05X2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMS1jbGFuZy0zLTlfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLWNsYW5nLTMtOV9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtY2xhbmctMy05X2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnY29tcGlsZXJfZmxhZ3MuZ3lwaScsCi0gICAgJy4uL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCA0MDk3OWJiLi4xYmJiMzAzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMTQsOTYgKzE0LDE4IEBACiAiIiJTdGFyYm9hcmQgTGludXggWDY0IFgxMSBDbGFuZyAzLjkgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKIAogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKIAogZnJvbSBzdGFyYm9hcmQubGludXguc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBzaGFyZWRfY29uZmlndXJhdGlvbgotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBhcgotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBiYXNoCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5nCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5neHgKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgY3AKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgdG91Y2gKIAogCiBjbGFzcyBMaW51eFg2NFgxMUNsYW5nMzlDb25maWd1cmF0aW9uKHNoYXJlZF9jb25maWd1cmF0aW9uLkxpbnV4Q29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIENsYW5nIDMuOSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgcGxhdGZvcm09J2xpbnV4LXg2NHgxMS1jbGFuZy0zLTknLAotICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nKToKLSAgICBzdXBlcihMaW51eFg2NFgxMUNsYW5nMzlDb25maWd1cmF0aW9uLAotICAgICAgICAgIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtLCBhc2FuX2VuYWJsZWRfYnlfZGVmYXVsdCwgc2FiaV9qc29uX3BhdGgpCi0KLSAgICBzZWxmLnRvb2xjaGFpbl9kaXIgPSAnL3Vzci9saWIvbGx2bS0zLjknCi0KLSAgZGVmIFNldHVwUGxhdGZvcm1Ub29scyhzZWxmLCBidWlsZF9udW1iZXIpOgotICAgIHJldCA9IHN1YnByb2Nlc3MuY2FsbCgnL3Vzci9iaW4vY2xhbmctMy45IC0tdmVyc2lvbicsIHNoZWxsPVRydWUpCi0gICAgaWYgcmV0ICE9IDA6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ2NsYW5nLTMuOSBpcyBub3QgaW5zdGFsbGVkLicpCi0KLSAgZGVmIEdldEVudmlyb25tZW50VmFyaWFibGVzKHNlbGYpOgotICAgIHRvb2xjaGFpbl9iaW5fZGlyID0gb3MucGF0aC5qb2luKHNlbGYudG9vbGNoYWluX2RpciwgJ2JpbicpCi0KLSAgICBlbnZfdmFyaWFibGVzID0gc3VwZXIoTGludXhYNjRYMTFDbGFuZzM5Q29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikuR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgIGVudl92YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ0NDJzoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgKyAnICcgKwotICAgICAgICAgICAgb3MucGF0aC5qb2luKHRvb2xjaGFpbl9iaW5fZGlyLCAnY2xhbmcnKSwKLSAgICAgICAgJ0NYWCc6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2FjY2VsZXJhdG9yICsgJyAnICsKLSAgICAgICAgICAgIG9zLnBhdGguam9pbih0b29sY2hhaW5fYmluX2RpciwgJ2NsYW5nKysnKSwKLSAgICB9KQotICAgIHJldHVybiBlbnZfdmFyaWFibGVzCi0KLSAgZGVmIEdldFZhcmlhYmxlcyhzZWxmLCBjb25maWdfbmFtZSk6Ci0gICAgdmFyaWFibGVzID0gc3VwZXIoTGludXhYNjRYMTFDbGFuZzM5Q29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmKS5HZXRWYXJpYWJsZXMoY29uZmlnX25hbWUpCi0gICAgcmV0dXJuIHZhcmlhYmxlcwotCi0gIGRlZiBHZXRUYXJnZXRUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIGVudmlyb25tZW50X3ZhcmlhYmxlcyA9IHNlbGYuR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgIGNjX3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NDJ10KLSAgICBjeHhfcGF0aCA9IGVudmlyb25tZW50X3ZhcmlhYmxlc1snQ1hYJ10KLQotICAgIHJldHVybiBbCi0gICAgICAgIGNsYW5nLkNDb21waWxlcihwYXRoPWNjX3BhdGgpLAotICAgICAgICBjbGFuZy5DeHhDb21waWxlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgY2xhbmcuQXNzZW1ibGVyV2l0aENQcmVwcm9jZXNzb3IocGF0aD1jY19wYXRoKSwKLSAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcigpLAotICAgICAgICBhci5TdGF0aWNMaW5rZXIoKSwKLSAgICAgICAgY2xhbmd4eC5FeGVjdXRhYmxlTGlua2VyKHBhdGg9Y3h4X3BhdGgsIHdyaXRlX2dyb3VwPVRydWUpLAotICAgICAgICBjbGFuZ3h4LlNoYXJlZExpYnJhcnlMaW5rZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNwLkNvcHkoKSwKLSAgICAgICAgdG91Y2guU3RhbXAoKSwKLSAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgIF0KLQotICBkZWYgR2V0SG9zdFRvb2xjaGFpbihzZWxmLCAqKmt3YXJncyk6Ci0gICAgZW52aXJvbm1lbnRfdmFyaWFibGVzID0gc2VsZi5HZXRFbnZpcm9ubWVudFZhcmlhYmxlcygpCi0gICAgY2NfcGF0aCA9IGVudmlyb25tZW50X3ZhcmlhYmxlc1snQ0NfaG9zdCddCi0gICAgY3h4X3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NYWF9ob3N0J10KLQotICAgIHJldHVybiBbCi0gICAgICAgIGNsYW5nLkNDb21waWxlcihwYXRoPWNjX3BhdGgpLAotICAgICAgICBjbGFuZy5DeHhDb21waWxlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgY2xhbmcuQXNzZW1ibGVyV2l0aENQcmVwcm9jZXNzb3IocGF0aD1jY19wYXRoKSwKLSAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcigpLAotICAgICAgICBhci5TdGF0aWNMaW5rZXIoKSwKLSAgICAgICAgY2xhbmd4eC5FeGVjdXRhYmxlTGlua2VyKHBhdGg9Y3h4X3BhdGgsIHdyaXRlX2dyb3VwPVRydWUpLAotICAgICAgICBjbGFuZ3h4LlNoYXJlZExpYnJhcnlMaW5rZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNwLkNvcHkoKSwKLSAgICAgICAgdG91Y2guU3RhbXAoKSwKLSAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgIF0KKyAgcGFzcwogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgogICB0cnk6Ci0gICAgcmV0dXJuIExpbnV4WDY0WDExQ2xhbmczOUNvbmZpZ3VyYXRpb24oCi0gICAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nKQorICAgIHJldHVybiBMaW51eFg2NFgxMUNsYW5nMzlDb25maWd1cmF0aW9uKCdsaW51eC14NjR4MTEtY2xhbmctMy05JykKICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgogICAgIGxvZ2dpbmcuY3JpdGljYWwoZSkKICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbiBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1ZWVkMgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KQEAgLTAsMCArMSwxOTMgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitjb25maWcoImNvbXBpbGVyX2ZsYWdzIikgeworICBjZmxhZ3MgPSBbXQorICBjZmxhZ3NfYyA9IFtdCisgIGNmbGFnc19jYyA9IFtdCisgIGxkZmxhZ3MgPSBbXQorICBkZWZpbmVzID0gW10KKworICBjZmxhZ3MgKz0gWworICAgICItV2Vycm9yIiwKKyAgICAiLWZjb2xvci1kaWFnbm9zdGljcyIsCisKKyAgICAjIERlZmF1bHQgdmlzaWJpbGl0eSB0byBoaWRkZW4sIHRvIGVuYWJsZSBkZWFkIHN0cmlwcGluZy4KKyAgICAiLWZ2aXNpYmlsaXR5PWhpZGRlbiIsCisKKyAgICAjIFdhcm4gZm9yIGltcGxpY2l0IHR5cGUgY29udmVyc2lvbnMgdGhhdCBtYXkgY2hhbmdlIGEgdmFsdWUuCisgICAgIi1XY29udmVyc2lvbiIsCisKKyAgICAjIFdhcm5zIG9uIHN3aXRjaGVzIG9uIGVudW1zIHRoYXQgY292ZXIgYWxsIGVudW0gdmFsdWVzIGJ1dAorICAgICMgYWxzbyBjb250YWluIGEgZGVmYXVsdDogYnJhbmNoLiBDaHJvbWUgaXMgZnVsbCBvZiB0aGF0LgorICAgICItV25vLWNvdmVyZWQtc3dpdGNoLWRlZmF1bHQiLAorCisgICAgIyBwcm90b2J1ZiB1c2VzIGhhc2hfbWFwLgorICAgICItV25vLWRlcHJlY2F0ZWQiLAorICAgICItZm5vLWV4Y2VwdGlvbnMiLAorCisgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KKyAgICAiLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIsCisgICAgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIiwgICMgU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIyMDQKKworICAgICMgRG9uJ3Qgd2FybiBmb3IgaW52YWxpZCBhY2Nlc3MgdG8gbm9uLXN0YXRpYyBkYXRhIG1lbWJlciBvZiBOVUxMIG9iamVjdC4KKyAgICAiLVduby1pbnZhbGlkLW9mZnNldG9mIiwKKworICAgICMgU3VwcHJlc3MgJ2ltcGxpY2l0IGNvbnZlcnNpb24gY2hhbmdlcyBzaWduZWRuZXNzIgorICAgICItV25vLXNpZ24tY29udmVyc2lvbiIsCisKKyAgICAjIHNoaWZ0aW5nIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlIGlzIHVuZGVmaW5lZAorICAgICItV25vLXNoaWZ0LXNpZ24tb3ZlcmZsb3ciLAorCisgICAgIyBTdXBwcmVzcyAiY29tcGFyaXNvbiBtYXkgYmUgYXNzdW1lZCB0byBhbHdheXMgZXZhbHVhdGUgdG8gZmFsc2UiCisgICAgIi1Xbm8tdGF1dG9sb2dpY2FsLXVuZGVmaW5lZC1jb21wYXJlIiwKKworICAgICMgU3VwcHJlc3MgImNvbXBhcmlzb24gb2YgdW5zaWduZWQgZW51bSBleHByZXNzaW9uIDwgMCBpcyBhbHdheXMgZmFsc2UiCisgICAgIi1Xbm8tdGF1dG9sb2dpY2FsLWNvbXBhcmUiLAorCisgICAgIyBTdXBwcmVzcyAiW3R5cGUxXSBoYXMgQy1saW5rYWdlIHNwZWNpZmllZCwgYnV0IHJldHVybnMgdXNlci1kZWZpbmVkIHR5cGUgW3R5cGUyXSB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBDIgorICAgICItV25vLXJldHVybi10eXBlLWMtbGlua2FnZSIsCisgICAgIi1Xbm8tYXJyYXktYm91bmRzIiwKKworICAgICMgU3VwcHJlc3MgInRlbXBsYXRlIGFyZ3VtZW50IHVzZXMgdW5uYW1lZCB0eXBlIgorICAgICItV25vLXVubmFtZWQtdHlwZS10ZW1wbGF0ZS1hcmdzIiwKKworICAgICMgJ3RoaXMnIHBvaW50ZXIgY2Fubm90IGJlIE5VTEwuLi5wb2ludGVyIG1heSBiZSBhc3N1bWVkCisgICAgIyB0byBhbHdheXMgY29udmVydCB0byB0cnVlLgorICAgICItV25vLXVuZGVmaW5lZC1ib29sLWNvbnZlcnNpb24iLAorCisgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KKyAgICAiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZSIsCisKKyAgICAjIFRyaWdnZXJlZCBieSB0aGUgQ09NUElMRV9BU1NFUlQgbWFjcm8uCisgICAgIi1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWYiLAorCisgICAgIyBTdXBwcmVzcyAiJyYmJyB3aXRoaW4gJ3x8JyIKKyAgICAiLVduby1sb2dpY2FsLW9wLXBhcmVudGhlc2VzIiwKKyAgICAiLVduby11bnVzZWQtcGFyYW1ldGVyIiwKKworICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdW5rbm93biBwcmFnbWFzLgorICAgICItV25vLXVua25vd24tcHJhZ21hcyIsCisKKyAgICAjIFN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGVxdWFsaXR5IGNoZWNrcyB3aXRoaW4gZG91YmxlIHBhcmVudGhlc2VzLgorICAgICItV25vLXBhcmVudGhlc2VzLWVxdWFsaXR5IiwKKworICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdW5yZWFjaGFibGUgY29kZSBkdWUgdG8gY29uc3RleHByIGNvbmRpdGlvbnMKKyAgICAiLVduby11bnJlYWNoYWJsZS1jb2RlIiwKKworICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgdmFsdWVzIGJlaW5nIHdyaXR0ZW4gYnV0IG5vdCByZWFkIGJlZm9yZSB0aGUgbmV4dCB3cml0ZS4KKyAgICAiLVduby11bnVzZWQtdmFsdWUiLAorCisgICAgIyBTdXBwcmVzcyB3YXJuaW5ncyByZWxhdGVkIHRvIHVudXNlZCBjb21waWxhdGlvbiBmbGFncyBpbiBjbGFuZy4KKyAgICAiLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50IiwKKworICAgICMgU3VwcHJlc3Mgd2FybmluZ3MgaW4gbGlianBlZworICAgICItV25vLXNoaWZ0LW5lZ2F0aXZlLXZhbHVlIiwKKyAgXQorCisgIGNmbGFnc19jICs9IFsKKyAgICAjIExpbWl0IHRvIEM5OS4gVGhpcyBhbGxvd3MgTGludXggdG8gYmUgYSBjYW5hcnkgYnVpbGQgZm9yIGFueQorICAgICMgQzExIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgb24gc29tZSBwbGF0Zm9ybXMnIGNvbXBpbGVycy4KKyAgICAiLXN0ZD1jOTkiLAorICBdCisKKyAgY2ZsYWdzX2NjICs9IFsgIi1zdGQ9YysrMTQiIF0KKworICBpZiAoaXNfZGVidWcpIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIi1mcnR0aSIsCisgICAgICAiLU8wIiwKKyAgICBdCisgIH0gZWxzZSBpZiAoaXNfZGV2ZWwpIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIi1mcnR0aSIsCisgICAgICAiLU8yIiwKKyAgICBdCisgIH0gZWxzZSBpZiAoaXNfcWEpIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIi1mbm8tcnR0aSIsCisgICAgICAiLU8yIiwKKyAgICAgICItZ2xpbmUtdGFibGVzLW9ubHkiLAorICAgIF0KKyAgfSBlbHNlIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIi1mbm8tcnR0aSIsCisgICAgICAiLWdsaW5lLXRhYmxlcy1vbmx5IiwKKyAgICBdCisgIH0KKworICBpZiAoIWNvYmFsdF9mYXN0YnVpbGQpIHsKKyAgICBpZiAoaXNfZGVidWcgfHwgaXNfZGV2ZWwpIHsKKyAgICAgIGNmbGFncyArPSBbICItZyIgXQorICAgIH0gZWxzZSB7CisgICAgICBjZmxhZ3MgKz0gWyAiLWdsaW5lLXRhYmxlcy1vbmx5IiBdCisgICAgfQorICB9CisKKyAgaWYgKHVzZV9hc2FuKSB7CisgICAgY2ZsYWdzICs9IFsKKyAgICAgICItZnNhbml0aXplPWFkZHJlc3MiLAorICAgICAgIi1mbm8tb21pdC1mcmFtZS1wb2ludGVyIiwKKyAgICBdCisgICAgbGRmbGFncyArPSBbCisgICAgICAiLWZzYW5pdGl6ZT1hZGRyZXNzIiwKKworICAgICAgIyBGb3JjZSBsaW5raW5nIG9mIHRoZSBoZWxwZXJzIGluIHNhbml0aXplcl9vcHRpb25zLmNjCisgICAgICAiLVdsLC11X3Nhbml0aXplcl9vcHRpb25zX2xpbmtfaGVscGVyIiwKKyAgICBdCisgICAgZGVmaW5lcyArPSBbICJBRERSRVNTX1NBTklUSVpFUiIgXQorICB9CisKKyAgaWYgKHVzZV90c2FuKSB7CisgICAgY2ZsYWdzICs9IFsKKyAgICAgICItZnNhbml0aXplPXRocmVhZCIsCisgICAgICAiLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiLAorICAgIF0KKyAgICBsZGZsYWdzICs9IFsgIi1mc2FuaXRpemU9dGhyZWFkIiBdCisgICAgZGVmaW5lcyArPSBbICJUSFJFQURfU0FOSVRJWkVSIiBdCisgIH0KK30KKworY29uZmlnKCJub19wZWRhbnRpY193YXJuaW5ncyIpIHsKKyAgY2ZsYWdzID0gWworICAgICMgJ3RoaXMnIHBvaW50ZXIgY2Fubm90IGJlIE5VTEwuLi5wb2ludGVyIG1heSBiZSBhc3N1bWVkCisgICAgIyB0byBhbHdheXMgY29udmVydCB0byB0cnVlLgorICAgICItV25vLXVuZGVmaW5lZC1ib29sLWNvbnZlcnNpb24iLAorCisgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KKyAgICAiLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZSIsCisKKyAgICAjIERvIG5vdCB3YXJuIGFib3V0IHVudXNlZCBmdW5jdGlvbiBwYXJhbXMuCisgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIsCisKKyAgICAjIERvIG5vdCB3YXJuIGZvciBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSBhIHZhbHVlLgorICAgICItV25vLWNvbnZlcnNpb24iLAorCisgICAgIyBEbyBub3Qgd2FybiBhYm91dCBhbiBpbXBsaWNpdCBleGNlcHRpb24gc3BlYyBtaXNtYXRjaC4KKyAgICAiLVduby1pbXBsaWNpdC1leGNlcHRpb24tc3BlYy1taXNtYXRjaCIsCisgIF0KK30KKworY29uZmlnKCJwbGF0Zm9ybV9jb25maWd1cmF0aW9uIikgeworICBpZiAoY3VycmVudF90b29sY2hhaW4gPT0gZGVmYXVsdF90b29sY2hhaW4pIHsKKyAgICBjb25maWdzID0gWworICAgICAgIi8vc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uIiwKKyAgICAgICIvL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb246bGlicmFyaWVzIiwKKyAgICAgICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIsCisgICAgICAiOmNvbXBpbGVyX2ZsYWdzIiwKKyAgICBdCisgIH0gZWxzZSB7CisgICAgY2ZsYWdzID0gWyAiLU8yIiBdCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDQ2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0wLDAgKzEsNDkgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9iYXNlX2NvbmZpZ3VyYXRpb24uZ25pIikKKworeWFzbV9leGlzdHMgPSB0cnVlCisKK3NiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXIgPSAiJHJvb3Rfb3V0X2Rpci9jb250ZW50IgorCitzYl9lbmFibGVfYmVuY2htYXJrID0gdHJ1ZQorCitpbnN0YWxsX3RhcmdldF9wYXRoID0gIi8vc3RhcmJvYXJkL2J1aWxkL2luc3RhbGwvaW5zdGFsbF90YXJnZXQuZ25pIgorCitzYl9lbmFibGVfb3B1c19zc2UgPSBmYWxzZQorCitzcGVlZF9jb25maWdfcGF0aCA9ICIvL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbjpzcGVlZCIKK3NpemVfY29uZmlnX3BhdGggPSAiLy9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb246c2l6ZSIKKworcGVkYW50aWNfd2FybmluZ3NfY29uZmlnX3BhdGggPQorICAgICIvL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbjpwZWRhbnRpY193YXJuaW5ncyIKK25vX3BlZGFudGljX3dhcm5pbmdzX2NvbmZpZ19wYXRoID0gIi8vc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jbGFuZy8zLjkvcGxhdGZvcm1fY29uZmlndXJhdGlvbjpub19wZWRhbnRpY193YXJuaW5ncyIKKworc2Jfd2lkZXZpbmVfcGxhdGZvcm0gPSAibGludXgiCisKK3BsYXRmb3JtX3Rlc3RzX3BhdGggPSAiLy9zdGFyYm9hcmQvbGludXgvc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cyIKKworZW5hYmxlX2luX2FwcF9kaWFsID0gdHJ1ZQorCitzYWJpX3BhdGggPSAiLy9zdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXYkc2JfYXBpX3ZlcnNpb24uanNvbiIKKworZ2xfdHlwZSA9ICJhbmdsZSIKK3NiX2FuZ2xlX2VuYWJsZV9nbCA9IHRydWUKKworY29iYWx0X3Y4X2VtaXRfYnVpbHRpbnNfYXNfaW5saW5lX2FzbSA9IHRydWUKKworc2JfZW5hYmxlX2NwcDE3X2F1ZGl0ID0gZmFsc2UKKwordXNlX3NraWFfbmV4dCA9IHRydWUKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDY4NzQ1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWE4NjIyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFmZDQ3MC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9DTEFOR18zXzlfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX0NMQU5HXzNfOV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgveDY0eDExL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX0NMQU5HXzNfOV9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS90b29sY2hhaW4vQlVJTEQuZ24gYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nLzMuOS90b29sY2hhaW4vQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwYmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvMy45L3Rvb2xjaGFpbi9CVUlMRC5nbgpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9jbGFuZy9jbGFuZy5nbmkiKQoraW1wb3J0KCIvL3N0YXJib2FyZC9zaGFyZWQvdG9vbGNoYWluL292ZXJyaWRhYmxlX2djY190b29sY2hhaW4uZ25pIikKKworX3RhcmdldF9sbHZtXzNfOV9iaW5fZGlyID0gIi91c3IvbGliL2xsdm0tMy45L2JpbiIKKworb3ZlcnJpZGFibGVfY2xhbmdfdG9vbGNoYWluKCJob3N0IikgeworICBjbGFuZ19iYXNlX3BhdGggPSBjbGFuZ19iYXNlX3BhdGgKKworICB0b29sY2hhaW5fYXJncyA9IHsKKyAgICB0YXJnZXRfb3MgPSAibGludXgiCisgICAgdGFyZ2V0X2NwdSA9ICJ4NjQiCisgIH0KK30KKworb3ZlcnJpZGFibGVfZ2NjX3Rvb2xjaGFpbigidGFyZ2V0IikgeworICBjYyA9ICIke190YXJnZXRfbGx2bV8zXzlfYmluX2Rpcn0vY2xhbmciCisgIGN4eCA9ICIke190YXJnZXRfbGx2bV8zXzlfYmluX2Rpcn0vY2xhbmcrKyIKKyAgbGQgPSBjeHgKKyAgYXIgPSAiYXIiCisKKyAgdG9vbGNoYWluX2FyZ3MgPSB7CisgICAgaXNfY2xhbmcgPSB0cnVlCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNjViZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL2xpYnJhcmllcy5neXBpJywKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NhYmkvc2FiaS5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1Yzc0Yy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3RhcmdldC5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY2xhbmcvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhODYyMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NsYW5nL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhMDMzNC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NvYmFsdC9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uLy4uL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvY29uZmlndXJhdGlvbl9wdWJsaWMuaAppbmRleCAwMTMzMGUzLi42ZjdiMGFiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9jb25maWd1cmF0aW9uX3B1YmxpYy5oCkBAIC00NSwxMiArNDUsNiBAQAogLy8gSW5jbHVkZSB0aGUgTGludXggY29uZmlndXJhdGlvbiB0aGF0J3MgY29tbW9uIGJldHdlZW4gYWxsIERlc2t0b3AgTGludXhlcy4KICNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb25fcHVibGljLmgiCiAKLS8vIFN0YXJib2FyZCBBUEkgdmVyc2lvbnMgMTEgYW5kIGVhcmxpZXIgbXVzdCBkZWZpbmUgdGhpcyB2YXJpYWJsZSwgYW5kIGhhdmUKLS8vIG1pY3JvcGhvbmUgc3VwcG9ydGVkLgotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSNkZWZpbmUgU0JfSEFTX01JQ1JPUEhPTkUgMQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaW1wbGVtZW50cyB0aGUgb24gc2NyZWVuIGtleWJvYXJkIGludGVyZmFjZS4KICNkZWZpbmUgU0JfSEFTX09OX1NDUkVFTl9LRVlCT0FSRCAwCiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZWdsL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjFlNTY3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZWdsL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnbGludXgteDY0eDExLWVnbF9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2xpbnV4LXg2NHgxMS1lZ2xfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLWVnbF9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtZWdsX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMS1lZ2xfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLQotICAndmFyaWFibGVzJzogewotICAgICdnbF90eXBlJzogJ3N5c3RlbV9nbGVzMicsCi0KLSAgICAncGxhdGZvcm1fbGlicmFyaWVzJzogWwotICAgICAgJy1sRUdMJywKLSAgICAgICctbEdMRVN2MicsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZWdsL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggYTYxN2U3Zi4uNTIxZWYyNiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKQEAgLTE3LDYgKzE3LDQgQEAKIAogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIGxpbnV4X2NvbmZpZ3VyYXRpb24uTGludXhYNjRYMTFDb25maWd1cmF0aW9uKAotICAgICAgJ2xpbnV4LXg2NHgxMS1lZ2wnLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL3g2NC9zeXN2L3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBsaW51eF9jb25maWd1cmF0aW9uLkxpbnV4WDY0WDExQ29uZmlndXJhdGlvbignbGludXgteDY0eDExLWVnbCcpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjNDQzNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnLi4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90YXJnZXQuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhODYyMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2VnbC90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzdjNDcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9lZ2wvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBJbmNsdWRlcyB0aHJlYWRpbmcgcHJpbWl0aXZlIHR5cGVzIGFuZCBpbml0aWFsaXplcnMuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9FR0xfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX0VHTF9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgveDY0eDExL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX0VHTF9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvQlVJTEQuZ24gYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1NmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9CVUlMRC5nbgpAQCAtMCwwICsxLDI2IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3RhdGljX2xpYnJhcnkoInN0YXJib2FyZF9wbGF0Zm9ybSIpIHsKKyAgY2hlY2tfaW5jbHVkZXMgPSBmYWxzZQorCisgIHNvdXJjZXMgPSBbICIvL3N0YXJib2FyZC9saW51eC94NjR4MTEvbWFpbi5jYyIgXQorCisgIHB1YmxpY19kZXBzID0gWworICAgICIvL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybSIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyOnZpZGVvX2RtcCIsCisgIF0KKworICBjb25maWdzICs9IFsgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iIF0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9hcmdzLmduIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2FyZ3MuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5ZTVkYgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9hcmdzLmduCkBAIC0wLDAgKzEsMTkgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCit0YXJnZXRfcGxhdGZvcm0gPSAibGludXgteDY0eDExLWdjYy02LTMiCit0YXJnZXRfb3MgPSAibGludXgiCit0YXJnZXRfY3B1ID0gIng2NCIKK2lzX2NsYW5nID0gZmFsc2UKK3VzaW5nX29sZF9jb21waWxlciA9IHRydWUKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9jb2JhbHQvY29uZmlndXJhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWJhOGJiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0wLDAgKzEsMzUgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiU3RhcmJvYXJkIExpbnV4IHg2NHgxMSBHQ0MgNi4zIENvYmFsdCBjb25maWd1cmF0aW9uLiIiIgorCitmcm9tIHN0YXJib2FyZC5saW51eC5zaGFyZWQuY29iYWx0IGltcG9ydCBjb25maWd1cmF0aW9uIGFzIHNoYXJlZF9jb25maWd1cmF0aW9uCitmcm9tIHN0YXJib2FyZC50b29scy50ZXN0aW5nIGltcG9ydCB0ZXN0X2ZpbHRlcgorCisKK2NsYXNzIENvYmFsdExpbnV4WDY0WDExR2NjNjNDb25maWd1cmF0aW9uKAorICAgIHNoYXJlZF9jb25maWd1cmF0aW9uLkNvYmFsdExpbnV4Q29uZmlndXJhdGlvbik6CisgICIiIlN0YXJib2FyZCBMaW51eCB4NjR4MTEgR0NDIDYuMyBDb2JhbHQgY29uZmlndXJhdGlvbi4iIiIKKworICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6CisgICAgZmlsdGVycyA9IHN1cGVyKENvYmFsdExpbnV4WDY0WDExR2NjNjNDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CisgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCisgICAgcmV0dXJuIGZpbHRlcnMKKworICAjIEEgbWFwIG9mIGZhaWxpbmcgb3IgY3Jhc2hpbmcgdGVzdHMgcGVyIHRhcmdldC4KKyAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorICAgICAgJ3ppcF91bml0dGVzdHMnOiBbCisgICAgICAgICAgJ1ppcFJlYWRlclRlc3QuRXh0cmFjdFRvRmlsZUFzeW5jX1JlZ3VsYXJGaWxlJywKKyAgICAgIF0sCisgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9jb21waWxlcl9mbGFncy5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2NvbXBpbGVyX2ZsYWdzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDlkZWEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2NvbXBpbGVyX2ZsYWdzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgUGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MgZm9yIExpbnV4IG9uIFN0YXJib2FyZC4gSW5jbHVkZWQgZnJvbQotIyBneXBfY29uZmlndXJhdGlvbi5neXBpLgotIwotewotICAndmFyaWFibGVzJzogewotICAgICdjb21waWxlcl9mbGFnc19ob3N0JzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnbGlua2VyX2ZsYWdzJzogWwotICAgICAgJy1XbCwtcnBhdGg9PEAodG9vbGNoYWluX2xpYl9wYXRoKScsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfZGVidWcnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICctTzAnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NjX2RldmVsJzogWwotICAgICAgJy1mcnR0aScsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19jY19xYSc6IFsKLSAgICAgICctZm5vLXJ0dGknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfZ29sZCc6IFsKLSAgICAgICctZm5vLXJ0dGknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGRfc2l6ZSc6IFsKLSAgICAgICctT3MnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGRfc3BlZWQnOiBbCi0gICAgICAnLU8yJywKLSAgICBdLAotICAgICdjb21tb25fY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAjIERlZmF1bHQgdmlzaWJpbGl0eSB0byBoaWRkZW4sIHRvIGVuYWJsZSBkZWFkIHN0cmlwcGluZy4KLSAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKLSAgICAgICMgcHJvdG9idWYgdXNlcyBoYXNoX21hcC4KLSAgICAgICctZm5vLWV4Y2VwdGlvbnMnLAotICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KLSAgICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzJywKLSAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZycsICAjIFNlZSBodHRwOi8vY3JidWcuY29tLzMyMjA0Ci0gICAgICAjIERvbid0IHdhcm4gYWJvdXQgYW55IGNvbnZlcnNpb25zLgotICAgICAgJy1Xbm8tY29udmVyc2lvbicsCi0gICAgICAjIERvbid0IHdhcm4gYWJvdXQgdW5yZWFjaGFibGUgY29kZS4gU2VlCi0gICAgICAjIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDYxNTgKLSAgICAgICctV25vLXVucmVhY2hhYmxlLWNvZGUnLAotICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgIyBEaXNhYmxlIHdhcm5pbmc6Ci0gICAgICAjICdjb21wYXJpc29uIGlzIGFsd2F5cyB0cnVlIGR1ZSB0byBsaW1pdGVkIHJhbmdlIG9mIGRhdGEgdHlwZScKLSAgICAgICctV25vLWV4dHJhJywKLSAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCBpbmxpbmluZwotICAgICAgJy1Xbm8taW5saW5lJywKLSAgICAgICMgRGlzYWJsZSB3YXJuaW5nOiAndHlwZWRlZiBsb2NhbGx5IGRlZmluZWQgYnV0IG5vdCB1c2VkJy4KLSAgICAgICctV25vLXVudXNlZC1sb2NhbC10eXBlZGVmcycsCi0gICAgICAjIERpc2FibGUgd2FybmluZzogJ25hcnJvd2luZyBjb252ZXJzaW9uJwotICAgICAgJy1Xbm8tbmFycm93aW5nJywKLSAgICAgICMgRG8gbm90IHJlbW92ZSBudWxsIHRoaXMgY2hlY2tzLgotICAgICAgJy1mbm8tZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MnLAotICAgICAgIyBEbyBub3Qgd2FybiBhYm91dCB1bnVzZWQgZnVuY3Rpb24gcGFyYW1zLgotICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgICAjIERvIG5vdCB3YXJuIGFib3V0IG11bHRpLWNoYXJhY3RlciBjaGFyYWN0ZXIgY29uc3RhbnQgdmFsdWVzLgotICAgICAgJy1Xbm8tbXVsdGljaGFyJywKLSAgICAgICMgRG8gbm90IHdhcm4gZm9yIGlnbm9yaW5nIHJldHVybiB2YWx1ZSBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0ZSB3YXJuX3VudXNlZF9yZXN1bHQuCi0gICAgICAnLVduby11bnVzZWQtcmVzdWx0JywKLSAgICAgICMgRG8gbm93IHdhcm4gZm9yIHVua25vd24gcHJhZ21hcy4KLSAgICAgICctV25vLXVua25vd24tcHJhZ21hcycsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY29iYWx0X2Zhc3RidWlsZD09MCcsIHsKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2RlYnVnJzogWwotICAgICAgICAgICctZycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19kZXZlbCc6IFsKLSAgICAgICAgICAnLWcnLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfcWEnOiBbCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19nb2xkJzogWwotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdjZmxhZ3NfYyc6IFsKLSAgICAgICMgTGltaXQgdG8gQzk5LiBUaGlzIGFsbG93cyBMaW51eCB0byBiZSBhIGNhbmFyeSBidWlsZCBmb3IgYW55Ci0gICAgICAjIEMxMSBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIG9uIHNvbWUgcGxhdGZvcm1zJyBjb21waWxlcnMuCi0gICAgICAnLXN0ZD1jOTknLAotICAgIF0sCi0gICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICctc3RkPWdudSsrMTQnLAotICAgICAgIyBEb24ndCB3YXJuIGZvciBpbnZhbGlkIGFjY2VzcyB0byBub24tc3RhdGljIGRhdGEgbWVtYmVyIG9mIE5VTEwgb2JqZWN0LgotICAgICAgJy1Xbm8taW52YWxpZC1vZmZzZXRvZicsCi0gICAgICAjIERvbid0IHdhcm4gYWJvdXQgZGVwcmVjYXRlZCB1c2UKLSAgICAgICctV25vLWRlcHJlY2F0ZWQnLAotICAgIF0sCi0gICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgWydzYl9wZWRhbnRpY193YXJuaW5ncz09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICctV2V4dHJhJywKLSAgICAgICAgICAnPEAoY29tbW9uX2NvbXBpbGVyX2ZsYWdzKScsCi0gICAgICAgIF0sCi0gICAgICB9LHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnPEAoY29tbW9uX2NvbXBpbGVyX2ZsYWdzKScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LCAjIGVuZCBvZiB0YXJnZXRfZGVmYXVsdHMKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9kb3dubG9hZF9nY2Muc2ggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvZG93bmxvYWRfZ2NjLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlZmRkODA3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9kb3dubG9hZF9nY2Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0jIS9iaW4vYmFzaAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBzY3JpcHQgZG93bmxvYWRzIGFuZCBjb21waWxlcyBnY2MgdmVyc2lvbiA2LjMuMC4KLQotc2V0IC1lCi0KLXRvb2xjaGFpbl9uYW1lPSJnY2MiCi12ZXJzaW9uPSI2LjMuMCIKLXRvb2xjaGFpbl9mb2xkZXI9Ing4Nl82NC1saW51eC1nbnUtJHt0b29sY2hhaW5fbmFtZX0tJHt2ZXJzaW9ufSIKLQotYmluYXJ5X3BhdGg9ImdjYy9iaW4vZysrIgotYnVpbGRfZHVyYXRpb249ImFib3V0IDQwIG1pbnV0ZXMiCi0KLXNjcmlwdGZvbGRlcj0kKGRpcm5hbWUgJChyZWFscGF0aCAkMCkpCi1jZCAke3NjcmlwdGZvbGRlcn0KLXNvdXJjZSAuLi8uLi90b29sY2hhaW5fcGF0aHMuc2gKLQotKAotICAjIERvd25sb2FkIGdjYwotICBpZiBbICEgLWUgZ2NjLSR7dmVyc2lvbn0vIlJFQURNRSIgXTsgdGhlbgotICAgIGZpbGU9ImdjYy0ke3ZlcnNpb259LnRhci5iejIiCi0gICAgd2dldCAtYyBodHRwOi8vZnRwbWlycm9yLmdudS5vcmcvZ2NjL2djYy0ke3ZlcnNpb259LyR7ZmlsZX0KLSAgICB3Z2V0IC1jIGh0dHA6Ly9mdHBtaXJyb3IuZ251Lm9yZy9nY2MvZ2NjLSR7dmVyc2lvbn0vJHtmaWxlfS5zaWcKLSAgICB3Z2V0IC1jIGh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ251LWtleXJpbmcuZ3BnCi0gICAgc2lnbmF0dXJlX2ludmFsaWQ9YGdwZyAtLXZlcmlmeSAtLW5vLWRlZmF1bHQta2V5cmluZyAtLWtleXJpbmcgLi9nbnUta2V5cmluZy5ncGcgJHtmaWxlfS5zaWdgCi0gICAgaWYgWyAkc2lnbmF0dXJlX2ludmFsaWQgXTsgdGhlbgotICAgICAgZWNobyAiSW52YWxpZCBzaWduYXR1cmUgZm9yICIgJGZpbGUKLSAgICAgIGV4aXQgMQotICAgIGZpCi0gICAgZWNobyAiZjA2YWU3ZjNmNzkwZmJmMGYwMThmNmQ0MGU4NDQ0NTFlNmJjM2I3YmM5NmUxMjhlNjNiMDk4MjVjMWY4YjI5ZiAgZ2NjLTYuMy4wLnRhci5iejIiIHwgc2hhMjU2c3VtIC1jIHx8ICgKLSAgICAgIGVjaG8gIkludmFsaWQgQ2hlY2tzdW0gZm9yICIgJGZpbGUKLSAgICAgIGV4aXQgMQotICAgICkKLSAgICBybSAtcmYgZ2NjLSR7dmVyc2lvbn0KLSAgICB0YXIgLXhqZiAke2ZpbGV9Ci0gICAgY2QgZ2NjLSR7dmVyc2lvbn0KLQotICAgIGlmIFsgLWYgLi9jb250cmliL2Rvd25sb2FkX3ByZXJlcXVpc2l0ZXMgXTsgdGhlbgotICAgICAgLi9jb250cmliL2Rvd25sb2FkX3ByZXJlcXVpc2l0ZXMKLSAgICBmaQotCi0gICAgY2F0IDw8RU9GICB8IHNoYTI1NnN1bSAtYyB8fCAoIGVjaG8gIkludmFsaWQgQ2hlY2tzdW0gZm9yIHByZXJlcXVpc2l0ZXMiOyBleGl0IDEgKQotYzdlNzVhMDhhOGQ0OWQyMDgyZTRjYWVlMTU5MWEwNWQxMWI5ZDU2Mjc1MTRlNjc4ZjAyZDY2YTEyNGJjZjJiYSAgbXBmci0yLjQuMi50YXIuYnoyCi05MzYxNjJjMDMxMjg4NmMyMTU4MTAwMmI3OTkzMjgyOWFhMDQ4Y2ZhZjk5MzdjNjI2NWFlYWExNGYxY2QxNzc1ICBnbXAtNC4zLjIudGFyLmJ6MgotZTY2NDYwMzc1NzI1MWZkOGEzNTI4NDgyNzY0OTdhNGM3OWI3ZjhiMjFmZDhhZWRkNWNjMDU5OGEzOGZlZTNlNCAgbXBjLTAuOC4xLnRhci5negotOGNlZWJiZjRkOWE4MWFmYTJiNDQ0OTExM2NlZTRiN2NiMTRhNjg3ZDdhNTQ5YTk2M2RlYjVlMmE0MTQ1OGI2YiAgaXNsLTAuMTUudGFyLmJ6MgotRU9GCi0gICAgY2QgJHt0b29sY2hhaW5fcGF0aH0KLSAgZmkKLQotICAjIFBhdGNoZXMgZm9yIGNvbXBpbGluZyB3aXRoIGdjYyA3LjIKLSAgcGF0Y2ggLXAxIDwke3NjcmlwdGZvbGRlcn0vdWNvbnRleHQuZGlmZgotICBwYXRjaCAtcDEgPCR7c2NyaXB0Zm9sZGVyfS9ub3Nhbml0aXplci5kaWZmCi0KLSAgIyBDcmVhdGUgY2xlYW4gYnVpbGQgZm9sZGVyIGZvciBnY2MKLSAgcm0gLXJmIGdjYyBnY2MtJHt2ZXJzaW9ufS1idWlsZAotICBta2RpciBnY2MtJHt2ZXJzaW9ufS1idWlsZAotICBjZCBnY2MtJHt2ZXJzaW9ufS1idWlsZAotCi0gIGV4cG9ydCBDX0lOQ0xVREVfUEFUSD0vdXNyL2luY2x1ZGUveDg2XzY0LWxpbnV4LWdudQotICBleHBvcnQgQ1BMVVNfSU5DTFVERV9QQVRIPS91c3IvaW5jbHVkZS94ODZfNjQtbGludXgtZ251Ci0KLSAgZ2NjX2luc3RhbGxfZm9sZGVyPSQocmVhbHBhdGggJHtQV0R9LyIuLiIpLyJnY2MiCi0gICMgQ29uZmlndXJlIGdjYyBmb3IgaW5zdGFsbGF0aW9uIGludG8gJHtnY2NfaW5zdGFsbF9mb2xkZXJ9Ci0gICR7dG9vbGNoYWluX3BhdGh9L2djYy0ke3ZlcnNpb259L2NvbmZpZ3VyZSBcCi0gICAgLS1wcmVmaXg9JHtnY2NfaW5zdGFsbF9mb2xkZXJ9IFwKLSAgICAtLWRpc2FibGUtbXVsdGlsaWIgXAotICAgIC0tZW5hYmxlLWxhbmd1YWdlcz0iYyxjKysiCi0KLSAgIyBCdWlsZCBhbmQgJ2luc3RhbGwnIGdjYwotICBtYWtlIC1qIiQobnByb2MpIiAmJiBtYWtlIGluc3RhbGwtc3RyaXAKLSAgY2QgJHt0b29sY2hhaW5fcGF0aH0KLQotICBscyAtbCAke3Rvb2xjaGFpbl9iaW5hcnl9Ci0gICR7dG9vbGNoYWluX2JpbmFyeX0gLS12ZXJzaW9uCi0pID4ke2xvZ2ZpbGV9IDI+JjEKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMzY3NDkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJyA6IHsKLSAgICAjIFJlcXVpcmVkIEMrKzE3IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gR0NDLTcgYW5kIG5ld2VyCi0gICAgJ3NiX2Rpc2FibGVfY3BwMTdfYXVkaXQnOiAxLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnbGludXgteDY0eDExLWdjYy02LTNfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdsaW51eC14NjR4MTEtZ2NjLTYtM19kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtZ2NjLTYtM19kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtZ2NjLTYtM19xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtZ2NjLTYtM19nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJ2NvbXBpbGVyX2ZsYWdzLmd5cGknLAotICAgICcuLi9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCA5NTQwNDAzLi40ZmNkMjFjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xMywxMTUgKzEzLDEzIEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIExpbnV4IFg2NCBYMTEgZ2NjIDYuMyBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGZvciBneXBfY29iYWx0LiIiIgogCi1pbXBvcnQgb3MKLQogZnJvbSBzdGFyYm9hcmQubGludXguc2hhcmVkIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBzaGFyZWRfY29uZmlndXJhdGlvbgotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IHRvdWNoCi0KLSMgRGlyZWN0b3J5IGZvciBHQ0MgNi4zIGlmIGl0IGlzIGluc3RhbGxlZCBhcyBhIHN5c3RlbSBkZXBlbmRlbmN5LgotX0RFRkFVTFRfR0NDXzZfM19CSU5fRElSID0gJy91c3IvYmluJwotX0RFRkFVTFRfR0NDXzZfM19MSUJfRElSID0gJy91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzYnCiAKIAogY2xhc3MgTGludXhYNjRYMTFHY2M2M0NvbmZpZ3VyYXRpb24oc2hhcmVkX2NvbmZpZ3VyYXRpb24uTGludXhDb25maWd1cmF0aW9uKToKICAgIiIiU3RhcmJvYXJkIExpbnV4IHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICBwbGF0Zm9ybT0nbGludXgteDY0eDExLWdjYy02LTMnLAotICAgICAgICAgICAgICAgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nKToKLSAgICBzdXBlcihMaW51eFg2NFgxMUdjYzYzQ29uZmlndXJhdGlvbiwKLSAgICAgICAgICBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwgYXNhbl9lbmFibGVkX2J5X2RlZmF1bHQsIHNhYmlfanNvbl9wYXRoKQotICAgIHNlbGYudG9vbGNoYWluX2Jpbl9kaXIgPSBfREVGQVVMVF9HQ0NfNl8zX0JJTl9ESVIKLSAgICBzZWxmLnRvb2xjaGFpbl9saWJfZGlyID0gX0RFRkFVTFRfR0NDXzZfM19MSUJfRElSCi0KLSAgZGVmIFNldHVwUGxhdGZvcm1Ub29scyhzZWxmLCBidWlsZF9udW1iZXIpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgaWYgbm90IChvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi50b29sY2hhaW5fYmluX2RpciwgJ2crKy02JykpIGFuZAotICAgICAgICAgICAgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYudG9vbGNoYWluX2Jpbl9kaXIsICdnY2MtNicpKSk6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0dDQyA2LjMgZGVwZW5kZW5jeSBpcyBub3QgcHJlc2VudCBvbiB0aGlzIHN5c3RlbS4nKQotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlnX25hbWUpOgotICAgIHZhcmlhYmxlcyA9IHN1cGVyKExpbnV4WDY0WDExR2NjNjNDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYpLkdldFZhcmlhYmxlcyhjb25maWdfbmFtZSkKLSAgICB2YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ2NsYW5nJzogMCwKLSAgICB9KQotICAgIHZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAndG9vbGNoYWluX2xpYl9wYXRoJzogc2VsZi50b29sY2hhaW5fbGliX2RpciwKLSAgICB9KQotICAgIHJldHVybiB2YXJpYWJsZXMKLQotICBkZWYgR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoc2VsZik6Ci0gICAgZW52X3ZhcmlhYmxlcyA9IHsKLSAgICAgICAgJ0NDJzoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgKyAnICcgKwotICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudG9vbGNoYWluX2Jpbl9kaXIsICdnY2MtNicpLAotICAgICAgICAnQ1hYJzoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgKyAnICcgKwotICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudG9vbGNoYWluX2Jpbl9kaXIsICdnKystNicpLAotICAgICAgICAnQ0NfSE9TVCc6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2FjY2VsZXJhdG9yICsgJyAnICsKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnRvb2xjaGFpbl9iaW5fZGlyLCAnZ2NjLTYnKSwKLSAgICAgICAgJ0NYWF9IT1NUJzoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgKyAnICcgKwotICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYudG9vbGNoYWluX2Jpbl9kaXIsICdnKystNicpLAotICAgIH0KLSAgICByZXR1cm4gZW52X3ZhcmlhYmxlcwotCi0gIGRlZiBHZXRUYXJnZXRUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgZW52aXJvbm1lbnRfdmFyaWFibGVzID0gc2VsZi5HZXRFbnZpcm9ubWVudFZhcmlhYmxlcygpCi0gICAgY2NfcGF0aCA9IGVudmlyb25tZW50X3ZhcmlhYmxlc1snQ0MnXQotICAgIGN4eF9wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDWFgnXQotCi0gICAgcmV0dXJuIFsKLSAgICAgICAgY2xhbmcuQ0NvbXBpbGVyKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGNsYW5nLkN4eENvbXBpbGVyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjbGFuZy5Bc3NlbWJsZXJXaXRoQ1ByZXByb2Nlc3NvcihwYXRoPWNjX3BhdGgpLAotICAgICAgICBhci5TdGF0aWNUaGluTGlua2VyKCksCi0gICAgICAgIGFyLlN0YXRpY0xpbmtlcigpLAotICAgICAgICBjbGFuZ3h4LkV4ZWN1dGFibGVMaW5rZXIocGF0aD1jeHhfcGF0aCwgd3JpdGVfZ3JvdXA9VHJ1ZSksCi0gICAgICAgIGNsYW5neHguU2hhcmVkTGlicmFyeUxpbmtlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgY3AuQ29weSgpLAotICAgICAgICB0b3VjaC5TdGFtcCgpLAotICAgICAgICBiYXNoLlNoZWxsKCksCi0gICAgXQotCi0gIGRlZiBHZXRIb3N0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAotICAgIGVudmlyb25tZW50X3ZhcmlhYmxlcyA9IHNlbGYuR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgIGNjX3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NDX0hPU1QnXQotICAgIGN4eF9wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDWFhfSE9TVCddCi0KLSAgICByZXR1cm4gWwotICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoLCB3cml0ZV9ncm91cD1UcnVlKSwKLSAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjcC5Db3B5KCksCi0gICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICBdCi0KLSAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgotICAgIGZpbHRlcnMgPSBzdXBlcihMaW51eFg2NFgxMUdjYzYzQ29uZmlndXJhdGlvbiwgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgotICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQotICAgIHJldHVybiBmaWx0ZXJzCi0KLSAgX0ZJTFRFUkVEX1RFU1RTID0gewotICAgICAgIyBUT0RPKGIvMjA2MTE3MzYxKTogUmUtZW5hYmxlIHN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cyBvbmNlIGZpeGVkLgotICAgICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cyc6IFsnSm9iUXVldWVUZXN0LkpvYnNBcmVNb3ZlZEFuZE5vdENvcGllZCcsXSwKLSAgfQorICBwYXNzCiAKIAogZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBMaW51eFg2NFgxMUdjYzYzQ29uZmlndXJhdGlvbigKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nKQorICByZXR1cm4gTGludXhYNjRYMTFHY2M2M0NvbmZpZ3VyYXRpb24oJ2xpbnV4LXg2NHgxMS1nY2MtNi0zJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3NjdiMgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCkBAIC0wLDAgKzEsMTEyIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworY29uZmlnKCJjb21waWxlcl9mbGFncyIpIHsKKyAgY2ZsYWdzID0gW10KKyAgY2ZsYWdzX2MgPSBbXQorICBjZmxhZ3NfY2MgPSBbXQorICBsZGZsYWdzID0gW10KKworICAjIGZyb20gY29tbW9uX2NvbXBpbGVyX2ZsYWdzCisgIGNmbGFncyArPSBbCisgICAgIyBEZWZhdWx0IHZpc2liaWxpdHkgdG8gaGlkZGVuLCB0byBlbmFibGUgZGVhZCBzdHJpcHBpbmcuCisgICAgIi1mdmlzaWJpbGl0eT1oaWRkZW4iLAorCisgICAgIyBwcm90b2J1ZiB1c2VzIGhhc2hfbWFwLgorICAgICItZm5vLWV4Y2VwdGlvbnMiLAorCisgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KKyAgICAiLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIsCisgICAgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIiwgICMgU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIyMDQKKworICAgICMgRG9uJ3Qgd2FybiBhYm91dCBhbnkgY29udmVyc2lvbnMuCisgICAgIi1Xbm8tY29udmVyc2lvbiIsCisKKyAgICAjIERvbid0IHdhcm4gYWJvdXQgdW5yZWFjaGFibGUgY29kZS4gU2VlCisgICAgIyBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ2MTU4CisgICAgIi1Xbm8tdW5yZWFjaGFibGUtY29kZSIsCisgICAgIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiLAorCisgICAgIyBEaXNhYmxlIHdhcm5pbmc6CisgICAgIyAnY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBkdWUgdG8gbGltaXRlZCByYW5nZSBvZiBkYXRhIHR5cGUnCisgICAgIi1Xbm8tZXh0cmEiLAorCisgICAgIyBEb24ndCB3YXJuIGFib3V0IGlubGluaW5nCisgICAgIi1Xbm8taW5saW5lIiwKKworICAgICMgRGlzYWJsZSB3YXJuaW5nOiAndHlwZWRlZiBsb2NhbGx5IGRlZmluZWQgYnV0IG5vdCB1c2VkJy4KKyAgICAiLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZnMiLAorCisgICAgIyBEaXNhYmxlIHdhcm5pbmc6ICduYXJyb3dpbmcgY29udmVyc2lvbicKKyAgICAiLVduby1uYXJyb3dpbmciLAorCisgICAgIyBEbyBub3QgcmVtb3ZlIG51bGwgdGhpcyBjaGVja3MuCisgICAgIi1mbm8tZGVsZXRlLW51bGwtcG9pbnRlci1jaGVja3MiLAorCisgICAgIyBEbyBub3Qgd2FybiBhYm91dCB1bnVzZWQgZnVuY3Rpb24gcGFyYW1zLgorICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAorCisgICAgIyBEbyBub3Qgd2FybiBhYm91dCBtdWx0aS1jaGFyYWN0ZXIgY2hhcmFjdGVyIGNvbnN0YW50IHZhbHVlcy4KKyAgICAiLVduby1tdWx0aWNoYXIiLAorCisgICAgIyBEbyBub3Qgd2FybiBmb3IgaWdub3JpbmcgcmV0dXJuIHZhbHVlIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIHdhcm5fdW51c2VkX3Jlc3VsdC4KKyAgICAiLVduby11bnVzZWQtcmVzdWx0IiwKKworICAgICMgRG8gbm93IHdhcm4gZm9yIHVua25vd24gcHJhZ21hcy4KKyAgICAiLVduby11bmtub3duLXByYWdtYXMiLAorICBdCisKKyAgbGRmbGFncyArPSBbICItV2wsLXJwYXRoPS91c3IvbGliL2djYy94ODZfNjQtbGludXgtZ251LzYiIF0KKworICBjZmxhZ3NfYyArPSBbCisgICAgIyBMaW1pdCB0byBDOTkuIFRoaXMgYWxsb3dzIExpbnV4IHRvIGJlIGEgY2FuYXJ5IGJ1aWxkIGZvciBhbnkKKyAgICAjIEMxMSBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIG9uIHNvbWUgcGxhdGZvcm1zJyBjb21waWxlcnMuCisgICAgIi1zdGQ9Yzk5IiwKKyAgXQorCisgIGNmbGFnc19jYyArPSBbCisgICAgIi1zdGQ9Z251KysxNCIsCisKKyAgICAjIERvbid0IHdhcm4gZm9yIGludmFsaWQgYWNjZXNzIHRvIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXIgb2YgTlVMTCBvYmplY3QuCisgICAgIi1Xbm8taW52YWxpZC1vZmZzZXRvZiIsCisKKyAgICAjIERvbid0IHdhcm4gYWJvdXQgZGVwcmVjYXRlZCB1c2UKKyAgICAiLVduby1kZXByZWNhdGVkIiwKKyAgXQorCisgIGlmIChpc19kZWJ1ZykgeworICAgIGNmbGFncyArPSBbICItTzAiIF0KKyAgfSBlbHNlIGlmIChpc19kZXZlbCkgeworICAgIGNmbGFncyArPSBbICItTzIiIF0KKyAgfSBlbHNlIGlmIChpc19xYSkgeworICAgIGNmbGFncyArPSBbICItTzIiIF0KKyAgfQorCisgIGlmICghY29iYWx0X2Zhc3RidWlsZCAmJiAoaXNfZGVidWcgfHwgaXNfZGV2ZWwpKSB7CisgICAgY2ZsYWdzICs9IFsgIi1nIiBdCisgIH0KK30KKworY29uZmlnKCJwbGF0Zm9ybV9jb25maWd1cmF0aW9uIikgeworICBpZiAoY3VycmVudF90b29sY2hhaW4gPT0gZGVmYXVsdF90b29sY2hhaW4pIHsKKyAgICBjb25maWdzID0gWworICAgICAgIi8vc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uIiwKKyAgICAgICIvL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb246bGlicmFyaWVzIiwKKyAgICAgICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIsCisgICAgICAiOmNvbXBpbGVyX2ZsYWdzIiwKKyAgICBdCisgIH0gZWxzZSB7CisgICAgY2ZsYWdzID0gWyAiLU8yIiBdCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiM2EzMwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIikKKworc2FiaV9wYXRoID0gIi8vc3RhcmJvYXJkL3NhYmkveDY0L3N5c3Yvc2FiaS12JHNiX2FwaV92ZXJzaW9uLmpzb24iCitnbF90eXBlID0gImFuZ2xlIgorc2JfYW5nbGVfZW5hYmxlX2dsID0gdHJ1ZQorCitzYl9lbmFibGVfY3BwMTdfYXVkaXQgPSBmYWxzZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2ODc0NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhODYyMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy90ZXN0X2ZpbHRlcnMucHkKaW5kZXggNWYyNDE3MS4uODlkM2MwOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvNi4zL3Rlc3RfZmlsdGVycy5weQorKysgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvdGVzdF9maWx0ZXJzLnB5CkBAIC0xNiw2ICsxNiwxMSBAQAogZnJvbSBzdGFyYm9hcmQubGludXguc2hhcmVkIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgc2hhcmVkX3Rlc3RfZmlsdGVycwogZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKIAorX0ZJTFRFUkVEX1RFU1RTID0geworICAgICMgVE9ETyhiLzIwNjExNzM2MSk6IFJlLWVuYWJsZSBzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMgb25jZSBmaXhlZC4KKyAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzJzogWydKb2JRdWV1ZVRlc3QuSm9ic0FyZU1vdmVkQW5kTm90Q29waWVkJyxdLAorfQorCiAKIGRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgogICByZXR1cm4gTGludXhYNjRYMTFHY2M2M1Rlc3RGaWx0ZXJzKCkKQEAgLTI2LDExICszMSw2IEBACiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBzdXBlcihMaW51eFg2NFgxMUdjYzYzVGVzdEZpbHRlcnMsIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9GSUxURVJFRF9URVNUUy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBfRklMVEVSRURfVEVTVFMuaXRlbXMoKToKICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKICAgICByZXR1cm4gZmlsdGVycwotCi0gIF9GSUxURVJFRF9URVNUUyA9IHsKLSAgICAgICMgVE9ETyhiLzIwNjExNzM2MSk6IFJlLWVuYWJsZSBzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMgb25jZSBmaXhlZC4KLSAgICAgICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMnOiBbJ0pvYlF1ZXVlVGVzdC5Kb2JzQXJlTW92ZWRBbmROb3RDb3BpZWQnLF0sCi0gIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy82LjMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTZkMTYxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ2NjLzYuMy90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9HQ0NfNl8zX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9HQ0NfNl8zX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9saW51eC94NjR4MTEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfR0NDXzZfM19USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2MvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxNjViZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9saWJyYXJpZXMuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9zYWJpL3NhYmkuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2Mvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1Yzc0Yy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnLi4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90YXJnZXQuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9nY2Mvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhODYyMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2djYy9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTVlMDcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlJzogMSwKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQnOiAxLAotICAgIH0KLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2xpbnV4LXg2NHgxMV9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2xpbnV4LXg2NHgxMV9kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTFfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMV9nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggNWY4MDY5YS4uN2RmNzU4NSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNCw0NiArMTQsMTIgQEAKICIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCiAKIGZyb20gc3RhcmJvYXJkLmxpbnV4LnNoYXJlZCBpbXBvcnQgZ3lwX2NvbmZpZ3VyYXRpb24gYXMgc2hhcmVkX2NvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IHRvdWNoCiAKIAogY2xhc3MgTGludXhYNjRYMTFDb25maWd1cmF0aW9uKHNoYXJlZF9jb25maWd1cmF0aW9uLkxpbnV4Q29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICBwbGF0Zm9ybT0nbGludXgteDY0eDExJywKLSAgICAgICAgICAgICAgIGFzYW5fZW5hYmxlZF9ieV9kZWZhdWx0PVRydWUsCi0gICAgICAgICAgICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkvZGVmYXVsdC9zYWJpLmpzb24nKToKLSAgICBzdXBlcihMaW51eFg2NFgxMUNvbmZpZ3VyYXRpb24sCi0gICAgICAgICAgc2VsZikuX19pbml0X18ocGxhdGZvcm0sIGFzYW5fZW5hYmxlZF9ieV9kZWZhdWx0LCBzYWJpX2pzb25fcGF0aCkKLQotICBkZWYgR2V0VGFyZ2V0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICByZXR1cm4gc2VsZi5HZXRIb3N0VG9vbGNoYWluKCoqa3dhcmdzKQotCi0gIGRlZiBHZXRIb3N0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICBlbnZpcm9ubWVudF92YXJpYWJsZXMgPSBzZWxmLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICBjY19wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDQyddCi0gICAgY3h4X3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NYWCddCi0KLSAgICByZXR1cm4gWwotICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjcC5Db3B5KCksCi0gICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICBdCisgIHBhc3MKIAogCiBkZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIExpbnV4WDY0WDExQ29uZmlndXJhdGlvbigKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXZ7c2JfYXBpX3ZlcnNpb259Lmpzb24nKQorICByZXR1cm4gTGludXhYNjRYMTFDb25maWd1cmF0aW9uKCdsaW51eC14NjR4MTEnKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tYWluLmNjIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tYWluLmNjCmluZGV4IGNmMDc2YWYuLmQyYmI2OGEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvbWFpbi5jYworKysgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL21haW4uY2MKQEAgLTE4LDYgKzE4LDEwIEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvY3Jhc2hfc2lnbmFscy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc2lnbmFsL2RlYnVnX3NpZ25hbHMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9zdXNwZW5kX3NpZ25hbHMuaCIKKyNpZiBTQl9JUyhFVkVSR1JFRU5fQ09NUEFUSUJMRSkKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb21tYW5kX2xpbmUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuaCIKKyNlbmRpZgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xpbmtfcmVjZWl2ZXIuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuaCIKIApAQCAtMzAsNyArMzQsMTIgQEAKICAgc3RhcmJvYXJkOjpzaGFyZWQ6OnNpZ25hbDo6SW5zdGFsbFN1c3BlbmRTaWduYWxIYW5kbGVycygpOwogCiAjaWYgU0JfSVMoRVZFUkdSRUVOX0NPTVBBVElCTEUpCi0gIHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcigpOworICBpZiAoc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Q29tbWFuZExpbmUoYXJnYywgYXJndikKKyAgICAgICAgICAuSGFzU3dpdGNoKHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmtTdGFydEhhbmRsZXJBdENyYXNoKSkgeworICAgIHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcih0cnVlKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlyZF9wYXJ0eTo6Y3Jhc2hwYWQ6OndyYXBwZXI6Okluc3RhbGxDcmFzaHBhZEhhbmRsZXIoZmFsc2UpOworICB9CiAjZW5kaWYKIAogI2lmIFNCX0hBU19RVUlSSyhCQUNLVFJBQ0VfRExPUEVOX0JVRykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL2F0b21pY19wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL2F0b21pY19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThhNDYxZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9hdG9taWNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgZmlsZSB3YXMgaW5pdGlhbGx5IGdlbmVyYXRlZCBieSBzdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGQucHksCi0vLyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTFfQVRPTUlDX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xMV9BVE9NSUNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgveDY0eDExL2F0b21pY19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xMV9BVE9NSUNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvY29uZmlndXJhdGlvbl9wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMzMmI3OC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzExX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzExX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0KLSN1bmRlZiBTQl9BUElfVkVSU0lPTgotI2RlZmluZSBTQl9BUElfVkVSU0lPTiAxMQotCi0vLyAtLS0gQXJjaGl0ZWN0dXJlIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpcyBiaWcgZW5kaWFuLiBTQl9JU19MSVRUTEVfRU5ESUFOIHdpbGwgYmUKLS8vIGF1dG9tYXRpY2FsbHkgc2V0IGJhc2VkIG9uIHRoaXMuCi0jZGVmaW5lIFNCX0lTX0JJR19FTkRJQU4gMAotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGlzIGFuIEFSTSBhcmNoaXRlY3R1cmUuCi0jZGVmaW5lIFNCX0lTX0FSQ0hfQVJNIDAKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpcyBhIE1JUFMgYXJjaGl0ZWN0dXJlLgotI2RlZmluZSBTQl9JU19BUkNIX01JUFMgMAotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGlzIGEgUFBDIGFyY2hpdGVjdHVyZS4KLSNkZWZpbmUgU0JfSVNfQVJDSF9QUEMgMAotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGlzIGFuIHg4NiBhcmNoaXRlY3R1cmUuCi0jZGVmaW5lIFNCX0lTX0FSQ0hfWDg2IDEKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpcyBhIDMyLWJpdCBhcmNoaXRlY3R1cmUuCi0jZGVmaW5lIFNCX0lTXzMyX0JJVCAwCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaXMgYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLgotI2RlZmluZSBTQl9JU182NF9CSVQgMQotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgcG9pbnRlcnMgYXJlIDMyLWJpdC4KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBsb25ncyBhcmUgMzItYml0LgotI2RlZmluZSBTQl9IQVNfMzJfQklUX1BPSU5URVJTIDAKLSNkZWZpbmUgU0JfSEFTXzMyX0JJVF9MT05HIDAKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSdzIHBvaW50ZXJzIGFyZSA2NC1iaXQuCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgbG9uZ3MgYXJlIDY0LWJpdC4KLSNkZWZpbmUgU0JfSEFTXzY0X0JJVF9QT0lOVEVSUyAxCi0jZGVmaW5lIFNCX0hBU182NF9CSVRfTE9ORyAxCi0KLS8vIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBtYWtlIHNvbWUgZ2VuZXJhbAotLy8gY29tcGlsZS10aW1lIGRlY2lzaW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHRoZSBudW1iZXIgb2YgY29yZXMgbGlrZWx5IHRvIGJlCi0vLyBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybS4gRm9yIGEgZGVmaW5pdGl2ZSBtZWFzdXJlLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkCi0vLyBzdGlsbCBjYWxsIFNiU3lzdGVtR2V0TnVtYmVyT2ZQcm9jZXNzb3JzIGF0IHJ1bnRpbWUuCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0ncyB0aHJlYWQgc2NoZWR1bGVyIHdpbGwgYXV0b21hdGljYWxseSBiYWxhbmNlCi0vLyB0aHJlYWRzIGJldHdlZW4gY29yZXMsIGFzIG9wcG9zZWQgdG8gc3lzdGVtcyB3aGVyZSB0aHJlYWRzIHdpbGwgb25seSBldmVyIHJ1bgotLy8gb24gdGhlIHNwZWNpZmljYWxseSBwaW5uZWQgY29yZS4KLSNkZWZpbmUgU0JfSEFTX0NST1NTX0NPUkVfU0NIRURVTEVSIDEKLQotLy8gLS0tIEdyYXBoaWNzIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcGxhdGZvcm0gc3VwcG9ydHMgcmVuZGVyaW5nIG9mIE5WMTIKLS8vIHRleHR1cmVzLiBUaGVzZSB0ZXh0dXJlcyB0eXBpY2FsbHkgb3JpZ2luYXRlIGZyb20gdmlkZW8gZGVjb2RlcnMuCi0jZGVmaW5lIFNCX0hBU19OVjEyX1RFWFRVUkVfU1VQUE9SVCAxCi0KLS8vIC0tLSBTaGFyZWQgQ29uZmlndXJhdGlvbiBhbmQgT3ZlcnJpZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbmNsdWRlIHRoZSBMaW51eCBjb25maWd1cmF0aW9uIHRoYXQncyBjb21tb24gYmV0d2VlbiBhbGwgRGVza3RvcCBMaW51eGVzLgotI2luY2x1ZGUgInN0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotLy8gU3RhcmJvYXJkIEFQSSB2ZXJzaW9ucyAxMSBhbmQgZWFybGllciBtdXN0IGRlZmluZSB0aGlzIHZhcmlhYmxlLCBhbmQgaGF2ZQotLy8gbWljcm9waG9uZSBzdXBwb3J0ZWQuCi0jZGVmaW5lIFNCX0hBU19NSUNST1BIT05FIDEKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpbXBsZW1lbnRzIHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgaW50ZXJmYWNlLgotI2RlZmluZSBTQl9IQVNfT05fU0NSRUVOX0tFWUJPQVJEIDAKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBoYXMgc3BlZWNoIHN5bnRoZXNpcy4KLSN1bmRlZiBTQl9IQVNfU1BFRUNIX1NZTlRIRVNJUwotI2RlZmluZSBTQl9IQVNfU1BFRUNIX1NZTlRIRVNJUyAwCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTFfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjdkNjhlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTFfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTExX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTFfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNidmVyc2lvbi0xMV9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTExX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2VuYWJsZV9tYXBfdG9fbWVzaCc6IDEsCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjgyZWUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLWZyb20gc3RhcmJvYXJkLmxpbnV4Lng2NHgxMSBpbXBvcnQgZ3lwX2NvbmZpZ3VyYXRpb24gYXMgcGFyZW50X2NvbmZpZ3VyYXRpb24KLQotCi1kZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIHBhcmVudF9jb25maWd1cmF0aW9uLkxpbnV4WDY0WDExQ29uZmlndXJhdGlvbigKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTExJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWYxYWVjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzExL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotIyB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgY3JlYXRpb24uCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdzdGFyYm9hcmRfcGxhdGZvcm1fc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9jYW5jZWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9zdGFydC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfc3RvcC5jYycsCi0gICAgICBdLAotICB9Ci19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzYzdiMy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBmaWxlIHdhcyBpbml0aWFsbHkgZ2VuZXJhdGVkIGJ5IHN0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weSwKLSMgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCcsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS90ZXN0X2ZpbHRlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjFlMmQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvdGVzdF9maWx0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgTGludXggWDY0IFgxMSBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWZyb20gc3RhcmJvYXJkLmxpbnV4Lng2NHgxMSBpbXBvcnQgdGVzdF9maWx0ZXJzIGFzIHBhcmVudF90ZXN0X2ZpbHRlcnMKLQotCi1kZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKLSAgcmV0dXJuIHBhcmVudF90ZXN0X2ZpbHRlcnMuTGludXhYNjRYMTFUZXN0RmlsdGVycygpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMS90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTczY2MuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkgc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5LAotLy8gdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgc2luY2UgaXRzIGNyZWF0aW9uLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzExX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2xpbnV4L3g2NHgxMS90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTIvYXRvbWljX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjExMGUwLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9saW51eC94NjR4MTEvYXRvbWljX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzEyX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQwMGFjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoZSBTdGFyYm9hcmQgY29uZmlndXJhdGlvbiBmb3IgRGVza3RvcCB4NjQgTGludXguIE90aGVyIGRldmljZXMgd2lsbCBoYXZlCi0vLyBzcGVjaWZpYyBTdGFyYm9hcmQgaW1wbGVtZW50YXRpb25zLCBldmVuIGlmIHRoZXkgdWx0aW1hdGVseSBhcmUgcnVubmluZyBzb21lCi0vLyB2ZXJzaW9uIG9mIExpbnV4LgotCi0vLyBPdGhlciBzb3VyY2UgZmlsZXMgc2hvdWxkIG5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIgZGlyZWN0bHksIGJ1dCBzaG91bGQKLS8vIGluY2x1ZGUgdGhlIGdlbmVyaWMgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiIGluc3RlYWQuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotLy8gLS0tIEdyYXBoaWNzIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcGxhdGZvcm0gc3VwcG9ydHMgcmVuZGVyaW5nIG9mIE5WMTIKLS8vIHRleHR1cmVzLiBUaGVzZSB0ZXh0dXJlcyB0eXBpY2FsbHkgb3JpZ2luYXRlIGZyb20gdmlkZW8gZGVjb2RlcnMuCi0jZGVmaW5lIFNCX0hBU19OVjEyX1RFWFRVUkVfU1VQUE9SVCAxCi0KLS8vIC0tLSBTaGFyZWQgQ29uZmlndXJhdGlvbiBhbmQgT3ZlcnJpZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbmNsdWRlIHRoZSBMaW51eCBjb25maWd1cmF0aW9uIHRoYXQncyBjb21tb24gYmV0d2VlbiBhbGwgRGVza3RvcCBMaW51eGVzLgotI2luY2x1ZGUgInN0YXJib2FyZC9saW51eC9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpbXBsZW1lbnRzIHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgaW50ZXJmYWNlLgotI2RlZmluZSBTQl9IQVNfT05fU0NSRUVOX0tFWUJPQVJEIDAKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBoYXMgc3BlZWNoIHN5bnRoZXNpcy4KLSN1bmRlZiBTQl9IQVNfU1BFRUNIX1NZTlRIRVNJUwotI2RlZmluZSBTQl9IQVNfU1BFRUNIX1NZTlRIRVNJUyAwCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLmd5cGkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzJjMmYxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnc2JfZXZlcmdyZWVuX2NvbXBhdGlibGUnOiAxLAotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpYnVud2luZCc6IDEsCi0gICAgfQotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnbGludXgteDY0eDExLXNidmVyc2lvbi0xMl9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTJfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNidmVyc2lvbi0xMl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTEyX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTJfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NhYmkvc2FiaS5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NWU2NzcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCi0KLWZyb20gc3RhcmJvYXJkLmxpbnV4Lng2NHgxMSBpbXBvcnQgZ3lwX2NvbmZpZ3VyYXRpb24gYXMgcGFyZW50X2NvbmZpZ3VyYXRpb24KLQotCi1kZWYgQ3JlYXRlUGxhdGZvcm1Db25maWcoKToKLSAgcmV0dXJuIHBhcmVudF9jb25maWd1cmF0aW9uLkxpbnV4WDY0WDExQ29uZmlndXJhdGlvbigKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTEyJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS94NjQvc3lzdi9zYWJpLXYxMi5qc29uJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTkwOGExLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBOb3RlLCB0aGF0IGRlc3BpdGUgdGhlIGZpbGUgZXh0ZW5zaW9uICIuZ3lwIiwgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IHNldmVyYWwKLSMgcGxhdGZvcm0gdmFyaWFudHMgb2YgbGludXgteDY0eDExLCBsaWtlIGEgIi5neXBpIiBmaWxlLCBzaW5jZSB0aG9zZSBwbGF0Zm9ybXMKLSMgaGF2ZSBubyBuZWVkIHRvIG1vZGlmeSB0aGlzIGNvZGUuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2lzX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX3N0b3AuY2MnLAotICAgICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTQ0OGFjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMWUyZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIFBsYXRmb3JtIFRlc3QgRmlsdGVycy4iIiIKLQotZnJvbSBzdGFyYm9hcmQubGludXgueDY0eDExIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgcGFyZW50X3Rlc3RfZmlsdGVycwotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gcGFyZW50X3Rlc3RfZmlsdGVycy5MaW51eFg2NFgxMVRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ0YjA2NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgveDY0eDExL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NWNkYjguLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTNfQVRPTUlDX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YjU0M2YuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhlIFN0YXJib2FyZCBjb25maWd1cmF0aW9uIGZvciBEZXNrdG9wIHg2NCBMaW51eC4gT3RoZXIgZGV2aWNlcyB3aWxsIGhhdmUKLS8vIHNwZWNpZmljIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbnMsIGV2ZW4gaWYgdGhleSB1bHRpbWF0ZWx5IGFyZSBydW5uaW5nIHNvbWUKLS8vIHZlcnNpb24gb2YgTGludXguCi0KLS8vIE90aGVyIHNvdXJjZSBmaWxlcyBzaG91bGQgbmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlciBkaXJlY3RseSwgYnV0IHNob3VsZAotLy8gaW5jbHVkZSB0aGUgZ2VuZXJpYyAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIgaW5zdGVhZC4KLQotI2lmbmRlZiBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotCi0vLyAtLS0gR3JhcGhpY3MgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwbGF0Zm9ybSBzdXBwb3J0cyByZW5kZXJpbmcgb2YgTlYxMgotLy8gdGV4dHVyZXMuIFRoZXNlIHRleHR1cmVzIHR5cGljYWxseSBvcmlnaW5hdGUgZnJvbSB2aWRlbyBkZWNvZGVycy4KLSNkZWZpbmUgU0JfSEFTX05WMTJfVEVYVFVSRV9TVVBQT1JUIDEKLQotLy8gLS0tIFNoYXJlZCBDb25maWd1cmF0aW9uIGFuZCBPdmVycmlkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEluY2x1ZGUgdGhlIExpbnV4IGNvbmZpZ3VyYXRpb24gdGhhdCdzIGNvbW1vbiBiZXR3ZWVuIGFsbCBEZXNrdG9wIExpbnV4ZXMuCi0jaW5jbHVkZSAic3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIgotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGltcGxlbWVudHMgdGhlIG9uIHNjcmVlbiBrZXlib2FyZCBpbnRlcmZhY2UuCi0jZGVmaW5lIFNCX0hBU19PTl9TQ1JFRU5fS0VZQk9BUkQgMAotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGhhcyBzcGVlY2ggc3ludGhlc2lzLgotI3VuZGVmIFNCX0hBU19TUEVFQ0hfU1lOVEhFU0lTCi0jZGVmaW5lIFNCX0hBU19TUEVFQ0hfU1lOVEhFU0lTIDAKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0NWFhMDYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZSc6IDEsCi0gICAgICAnc2JfZXZlcmdyZWVuX2NvbXBhdGlibGVfbGlidW53aW5kJzogMSwKLSAgICB9Ci0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTEzX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnbGludXgteDY0eDExLXNidmVyc2lvbi0xM19kZWJ1Zyc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGVidWdfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdsaW51eC14NjR4MTEtc2J2ZXJzaW9uLTEzX2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTNfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNidmVyc2lvbi0xM19nb2xkJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydnb2xkX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgfSwgIyBlbmQgb2YgY29uZmlndXJhdGlvbnMKLSAgfSwKLQotICAnaW5jbHVkZXMnOiBbCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEwMGYzMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiU3RhcmJvYXJkIExpbnV4IFg2NCBYMTEgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKLQotZnJvbSBzdGFyYm9hcmQubGludXgueDY0eDExIGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24uTGludXhYNjRYMTFDb25maWd1cmF0aW9uKAotICAgICAgJ2xpbnV4LXg2NHgxMS1zYnZlcnNpb24tMTMnLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL3g2NC9zeXN2L3NhYmktdjEzLmpzb24nKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2MjNjMTMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIE5vdGUsIHRoYXQgZGVzcGl0ZSB0aGUgZmlsZSBleHRlbnNpb24gIi5neXAiLCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgc2V2ZXJhbAotIyBwbGF0Zm9ybSB2YXJpYW50cyBvZiBsaW51eC14NjR4MTEsIGxpa2UgYSAiLmd5cGkiIGZpbGUsIHNpbmNlIHRob3NlIHBsYXRmb3JtcwotIyBoYXZlIG5vIG5lZWQgdG8gbW9kaWZ5IHRoaXMgY29kZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmYwMDVlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmMWUyZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBMaW51eCBYNjQgWDExIFBsYXRmb3JtIFRlc3QgRmlsdGVycy4iIiIKLQotZnJvbSBzdGFyYm9hcmQubGludXgueDY0eDExIGltcG9ydCB0ZXN0X2ZpbHRlcnMgYXMgcGFyZW50X3Rlc3RfZmlsdGVycwotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gcGFyZW50X3Rlc3RfZmlsdGVycy5MaW51eFg2NFgxMVRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2J2ZXJzaW9uLzEzL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDI2NzZlNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgveDY0eDExL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NCVkVSU0lPTl8xM19USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiYzczNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbXBpbGVyX2ZsYWdzLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2VuYWJsZV9nbHhfdmlhX2FuZ2xlLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9saWJyYXJpZXMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9saWJyYXJpZXMuZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL2xpYnJhcmllcy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmQyNzczLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL2xpYnJhcmllcy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAncGxhdGZvcm1fbGlicmFyaWVzJzogWwotICAgICAgJy4uLy4uL3RoaXJkX3BhcnR5L2xpYmRhdjFkL3BsYXRmb3Jtcy9saW51eC14NjQvbGliZGF2MWQuYScsCi0gICAgICAnLi4vLi4vdGhpcmRfcGFydHkvbGlidnB4L3BsYXRmb3Jtcy9saW51eC14NjQvbGlidnB4LmEnLAotICAgIF0sCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9saWJyYXJpZXMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjM1OTc1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsnLi4vLi4vc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpJ10sCi0KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9tYWluLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3Nhbml0aXplcl9vcHRpb25zLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3lzdGVtX2dldF9wcm9wZXJ0eV9pbXBsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmpwZWcvaW1hZ2VfZGVjb2RlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmpwZWcvaW1hZ2VfaXNfZGVjb2RlX3N1cHBvcnRlZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJqcGVnL2pwZWdfaW1hZ2VfZGVjb2Rlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJqcGVnL2pwZWdfaW1hZ2VfZGVjb2Rlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9saW5rX3JlY2VpdmVyLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS9hcHBsaWNhdGlvbl94MTEuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL2VnbF9zd2FwX2J1ZmZlcnMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL3BsYXllcl9zZXRfYm91bmRzLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS93aW5kb3dfY3JlYXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3gxMS93aW5kb3dfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC94MTEvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQveDExL3dpbmRvd19nZXRfc2l6ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC94MTEvd2luZG93X2ludGVybmFsLmNjJywKLSAgICBdLAotCi0gICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXMuZ3lwOmVnbF9hbmRfZ2xlcycsCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLmd5cDpsaWJqcGVnJywKLSAgICBdLAotCi0gICAgIyBFeGNsdWRlIHNoYXJlZCBpbXBsZW1lbnRhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSBpbmNsdWRlZCAuZ3lwaSBpZiB0aGlzCi0gICAgIyBmaWxlIGFscmVhZHkgc3BlY2lmaWVzIGEgcGxhdGZvcm0tc3BlY2lmaWMgdmVyc2lvbi4KLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMhJzogWwotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2V0X2JvdW5kcy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2RlY29kZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2lzX2RlY29kZV9zdXBwb3J0ZWQuY2MnLAotICAgIF0sCi0KLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ2hhc19wcml2YXRlX3N5c3RlbV9wcm9wZXJ0aWVzJSc6ICc8ISh0ZXN0IC1lIDwoREVQVEgpL3N0YXJib2FyZC9rZXlib3hlcy9saW51eC9zeXN0ZW1fcHJvcGVydGllcy5jYyAmJiBlY2hvIDEgfHwgZWNobyAwKScsCi0gICAgfSwKLSAgICAjIFRoaXMgaGFzX3ByaXZhdGVfc3lzdGVtX3Byb3BlcnRpZXMgZ2V0cyBleHBvcnRlZCB0byBneXAgZmlsZXMgdGhhdCBpbmNsdWRlIHRoaXMgb25lLgotICAgICdoYXNfcHJpdmF0ZV9zeXN0ZW1fcHJvcGVydGllcyUnOiAnPChoYXNfcHJpdmF0ZV9zeXN0ZW1fcHJvcGVydGllcyknLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydoYXNfcHJpdmF0ZV9zeXN0ZW1fcHJvcGVydGllcz09MScsIHsKLSAgICAgICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9zb3VyY2VzJzogWwotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQva2V5Ym94ZXMvbGludXgvc3lzdGVtX3Byb3BlcnRpZXMuY2MnLAotICAgICAgICBdLAotICAgICAgfSwgewotICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC94NjR4MTEvcHVibGljX3N5c3RlbV9wcm9wZXJ0aWVzLmNjJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGFyZ2V0Lmd5cGkgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGFyZ2V0Lmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMzM4N2UuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3RhcmdldC5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGknCi0gIF0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm0nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKHN0YXJib2FyZF9wbGF0Zm9ybV9zb3VyY2VzKScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX2NvbW1vbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX2NvbW1vbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfd3JpdGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfd3JpdGVyLmgnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnU0JfUExBWUVSX0VOQUJMRV9WSURFT19EVU1QRVInLAotICAgICAgICAjIFRoaXMgbXVzdCBiZSBkZWZpbmVkIHdoZW4gYnVpbGRpbmcgU3RhcmJvYXJkLCBhbmQgbXVzdCBub3Qgd2hlbgotICAgICAgICAjIGJ1aWxkaW5nIFN0YXJib2FyZCBjbGllbnQgY29kZS4KLSAgICAgICAgJ1NUQVJCT0FSRF9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzxAKHN0YXJib2FyZF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9jb2JhbHQvY29uZmlndXJhdGlvbi5weQppbmRleCBmZWVlOGEwLi4zMmY0OTA3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4ICsxMyw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIExpbnV4IHg2NHgxMSBTa2lhIENvYmFsdCBjb25maWd1cmF0aW9uLiIiIgogCi1pbXBvcnQgb3MKLQogZnJvbSBzdGFyYm9hcmQubGludXguc2hhcmVkLmNvYmFsdCBpbXBvcnQgY29uZmlndXJhdGlvbiBhcyBzaGFyZWRfY29uZmlndXJhdGlvbgogZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKIApAQCAtMjUsMTIgKzIzLDE5IEBACiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBzdXBlcihDb2JhbHRMaW51eFg2NFgxMVNraWFDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCi0gICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX19GSUxURVJFRF9URVNUUy5pdGVtcygpOgogICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQogICAgIHJldHVybiBmaWx0ZXJzCiAKICAgIyBBIG1hcCBvZiBmYWlsaW5nIG9yIGNyYXNoaW5nIHRlc3RzIHBlciB0YXJnZXQuCi0gIF9fRklMVEVSRURfVEVTVFMgPSB7Ci0gICAgICAjIFRyYWNrZWQgYnkgYi8xODEyNzAwODMKLSAgICAgICdyZW5kZXJlcl90ZXN0JzogWydQaXhlbFRlc3QuUmVjdFdpdGhSb3VuZGVkQ29ybmVyc09uU29saWRDb2xvcicsXSwKKyAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorICAgICAgIyBUcmFja2VkIGJ5IGIvMTgxMjcwMDgzLCBiLzIyNjk5OTA3OS4KKyAgICAgICdyZW5kZXJlcl90ZXN0JzogWworICAgICAgICAgICdQaXhlbFRlc3QuUmVjdFdpdGhSb3VuZGVkQ29ybmVyc09uU29saWRDb2xvcicsCisgICAgICAgICAgJ0xvdHRpZUNvdmVyYWdlUGl4ZWxUZXN0KnNrb3R0aWVfbGluZWFyX3dpcGVfZWZmZWN0X2pzb24nLAorICAgICAgICAgICdMb3R0aWVDb3ZlcmFnZVBpeGVsVGVzdCpza290dGllX21hdHRlX2JsZW5kbW9kZV9qc29uJywKKyAgICAgICAgICAnTG90dGllQ292ZXJhZ2VQaXhlbFRlc3Qqc2tvdHRpZV9zaGlmdF9jaGFubmVsc19lZmZlY3RfanNvbicsCisgICAgICAgICAgJ0xvdHRpZUNvdmVyYWdlUGl4ZWxUZXN0KnNrb3R0aWVfM2RfMnBsYW5lc19qc29uJywKKyAgICAgICAgICAnTG90dGllQ292ZXJhZ2VQaXhlbFRlc3Qqc2tvdHRpZV92ZW5ldGlhbmJsaW5kc19lZmZlY3RfanNvbicsCisgICAgICBdLAogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWEyZjNhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ2xpbnV4LXg2NHgxMS1za2lhX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnbGludXgteDY0eDExLXNraWFfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNraWFfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNraWFfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnbGludXgteDY0eDExLXNraWFfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9neXBfY29uZmlndXJhdGlvbi5weQppbmRleCAzOTY0ZTc1Li41NTdlYzY1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNyw2ICsxNyw0IEBACiAKIAogZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBsaW51eF9jb25maWd1cmF0aW9uLkxpbnV4WDY0WDExQ29uZmlndXJhdGlvbigKLSAgICAgICdsaW51eC14NjR4MTEtc2tpYScsCi0gICAgICBzYWJpX2pzb25fcGF0aD0nc3RhcmJvYXJkL3NhYmkveDY0L3N5c3Yvc2FiaS12e3NiX2FwaV92ZXJzaW9ufS5qc29uJykKKyAgcmV0dXJuIGxpbnV4X2NvbmZpZ3VyYXRpb24uTGludXhYNjRYMTFDb25maWd1cmF0aW9uKCdsaW51eC14NjR4MTEtc2tpYScpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCmluZGV4IGI5NWE2ZDUuLjZkNDUxZjMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0xMywzICsxMyw1IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiBpbXBvcnQoIi8vc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIikKKwordXNlX3NraWFfbmV4dCA9IHRydWUKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMjYwOTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtX3RhcmdldC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnc291cmNlcyc6IFsKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvY29uZmlndXJhdGlvbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL2NvbmZpZ3VyYXRpb24uaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYycsCi0gICAgXSwKLSAgICAnc291cmNlcyEnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb24uaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MnLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWE4NjIyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc2tpYS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9za2lhL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjYWQwNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3NraWEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0tJQV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfU0tJQV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbGludXgvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfTElOVVhfWDY0WDExX1NLSUFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWM5MWEyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIE5vdGUsIHRoYXQgZGVzcGl0ZSB0aGUgZmlsZSBleHRlbnNpb24gIi5neXAiLCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgc2V2ZXJhbAotIyBwbGF0Zm9ybSB2YXJpYW50cyBvZiBsaW51eC14NjR4MTEsIGxpa2UgYSAiLmd5cGkiIGZpbGUsIHNpbmNlIHRob3NlIHBsYXRmb3JtcwotIyBoYXZlIG5vIG5lZWQgdG8gbW9kaWZ5IHRoaXMgY29kZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGFyZ2V0Lmd5cGknCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAgYi9zdGFyYm9hcmQvbGludXgveDY0eDExL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYTg2MjIuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3N5c3RlbV9nZXRfcHJvcGVydHlfaW1wbC5jYyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3lzdGVtX2dldF9wcm9wZXJ0eV9pbXBsLmNjCmluZGV4IGYwOGZhMmMuLjQxNmQxYjAgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3lzdGVtX2dldF9wcm9wZXJ0eV9pbXBsLmNjCisrKyBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvc3lzdGVtX2dldF9wcm9wZXJ0eV9pbXBsLmNjCkBAIC0yNiwxMiArMjYsNyBAQAogY29uc3QgY2hhciBrRnJpZW5kbHlOYW1lW10gPSAiTGludXggRGVza3RvcCI7CiBjb25zdCBjaGFyIGtNb2RlbE5hbWVbXSA9ICJNb2RlbE5hbWUiOwogY29uc3QgY2hhciBrUGxhdGZvcm1OYW1lW10gPSAiWDExOyBMaW51eCB4ODZfNjQiOwotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIGNvbnN0IGNoYXIga1N5c3RlbUludGVncmF0b3JOYW1lW10gPSAiU3lzdGVtSW50ZWdyYXRvck5hbWUiOwotI2Vsc2UKLWNvbnN0IGNoYXIga09yaWdpbmFsRGVzaWduTWFudWZhY3R1cmVyTmFtZVtdID0gIk9yaWdpbmFsRGVzaWduTWFudWZhY3R1cmVyTmFtZSI7Ci0jZW5kaWYKIAogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiBjb25zdCBjaGFyIGtNb2RlbFllYXJbXSA9ICIyMDIyIjsKQEAgLTkzLDE1ICs4OCw5IEBACiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIGtNb2RlbFllYXIpOwogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybU5hbWU6CiAgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIGtQbGF0Zm9ybU5hbWUpOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVN5c3RlbUludGVncmF0b3JOYW1lOgogICAgICAgcmV0dXJuIENvcHlTdHJpbmdBbmRUZXN0SWZTdWNjZXNzKG91dF92YWx1ZSwgdmFsdWVfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTeXN0ZW1JbnRlZ3JhdG9yTmFtZSk7Ci0jZWxzZQotICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlPcmlnaW5hbERlc2lnbk1hbnVmYWN0dXJlck5hbWU6Ci0gICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09yaWdpbmFsRGVzaWduTWFudWZhY3R1cmVyTmFtZSk7Ci0jZW5kaWYKICAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5U3BlZWNoQXBpS2V5OgogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlVc2VyQWdlbnRBdXhGaWVsZDoKICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMjU2ZGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9MSU5VWF9YNjRYMTFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2xpbnV4L3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX0xJTlVYX1g2NFgxMV9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbGludXgveDY0eDExL3Rvb2xjaGFpbl9wYXRocy5zaCBiL3N0YXJib2FyZC9saW51eC94NjR4MTEvdG9vbGNoYWluX3BhdGhzLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDU0YzFkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9saW51eC94NjR4MTEvdG9vbGNoYWluX3BhdGhzLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyEvYmluL2Jhc2gKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgc2NyaXB0IGNvbmZpZ3VyZXMsIHZlcmlmaWVzLCBhbmQgcHJlcGFyZXMgdG9vbGNoYWluIHBhdGhzLgotIyBUaGlzIHNjcmlwdCBpcyBzb3VyY2VkIGZyb20gZG93bmxvYWRfZ2NjLnNoIGFuZCBkb3dubG9hZF9jbGFuZy5zaAotCi1zZXQgLWUKLQotc2NyaXB0X2Rpcj0iJChkaXJuYW1lICIkKHJlYWRsaW5rIC1mICIke0JBU0hfU09VUkNFWzBdfSIpIikiCi1yb290PSIkKHJlYWRsaW5rIC1mICIke3NjcmlwdF9kaXJ9Ly4uLy4uLy4uIikiCi0KLWNhbm9uaWNhbF9wYXRoPSIkKHB5dGhvbiAiJHtyb290fS9zdGFyYm9hcmQvdG9vbHMvZ2V0X3Rvb2xjaGFpbnNfcGF0aC5weSIpIgotYmFzZV9wYXRoPSIke0NPQkFMVF9UT09MQ0hBSU5TX0RJUjo9JHtjYW5vbmljYWxfcGF0aH19IgotdG9vbGNoYWluX3BhdGg9IiR7YmFzZV9wYXRofS8ke3Rvb2xjaGFpbl9mb2xkZXJ9IgotdG9vbGNoYWluX2JpbmFyeT0iJHt0b29sY2hhaW5fcGF0aH0vJHtiaW5hcnlfcGF0aH0iCi10b29sY2hhaW5fc3ltbGlua19wYXRoPSIke3Rvb2xjaGFpbl9wYXRofS8ke3N5bWxpbmtfcGF0aH0iCi0KLWlmIFsgLXggIiR7dG9vbGNoYWluX2JpbmFyeX0iIF07IHRoZW4KLSAgIyBUaGUgdG9vbGNoYWluIGJpbmFyeSBhbHJlYWR5IGV4aXN0LgotICAxPiYyIGVjaG8gIiR7dG9vbGNoYWluX25hbWV9ICR7dmVyc2lvbn0gYWxyZWFkeSBhdmFpbGFibGUuIgotCi0gICMgSWYgYSBzeW1saW5rX3BhdGggaXMgc2V0LCB0aGVuIGFsc28gdmVyaWZ5IHRoYXQgdGhlCi0gICMgdG9vbGNoYWluX3N5bWxpbmtfcGF0aCBhY3R1YWxseSBpcyBhIHN5bWJvbGljIGxpbmsuCi0gIGlmIFsgLW4gIiR7c3ltbGlua19wYXRofSIgLWEgISAtTCAiJHt0b29sY2hhaW5fc3ltbGlua19wYXRofSIgXTsgdGhlbgotICAgIDE+JjIgZWNobyAiJHt0b29sY2hhaW5fc3ltbGlua19wYXRofSBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCB0b29sY2hhaW4gd2lsbCBiZSByZWluaXRpYWxpemVkLiIKLSAgZWxzZQotICAgIGV4aXQgMAotICBmaQotZmkKLQotaWYgWyAtZCAiJHt0b29sY2hhaW5fcGF0aH0iIF07IHRoZW4KLSAgY2F0IDw8RU9GIDE+JjIKLSAgV0FSTklORzogJHt0b29sY2hhaW5fbmFtZX0gJHt2ZXJzaW9ufSBmb2xkZXIgJHt0b29sY2hhaW5fcGF0aH0KLSAgYWxyZWFkeSBleGlzdHMsIGJ1dCBpdCBkb2VzIG5vdCBjb250YWluIGEgYmluYXJ5LiAgUGVyaGFwcyBhIHByZXZpb3VzIGRvd25sb2FkCi0gIHdhcyBpbnRlcnJ1cHRlZCBvciBmYWlsZWQ/Ci1FT0YKLSAgcm0gLXJmICIke3Rvb2xjaGFpbl9wYXRofSIKLWZpCi0KLW1rZGlyIC1wICIke3Rvb2xjaGFpbl9wYXRofSIKLWNkICIke3Rvb2xjaGFpbl9wYXRofSIKLQotbG9nZmlsZT0iJHt0b29sY2hhaW5fcGF0aH0vYnVpbGRfbG9nLnR4dCIKLQotY2F0IDw8RU9GIDE+JjIKLURvd25sb2FkaW5nIGFuZCBjb21waWxpbmcgJHt0b29sY2hhaW5fbmFtZX0gdmVyc2lvbiAke3ZlcnNpb259IGludG8gJHt0b29sY2hhaW5fcGF0aH0KLUxvZyBmaWxlIGNhbiBiZSBmb3VuZCBhdCAke2xvZ2ZpbGV9Ci1UaGlzIG1heSB0YWtlICR7YnVpbGRfZHVyYXRpb259Ci1FT0YKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL0JVSUxELmduIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvQlVJTEQuZ24KaW5kZXggM2QxMTg0Ni4uOTUxODI3ZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvQlVJTEQuZ24KQEAgLTI0LDYgKzI0LDcgQEAKICAgcHVibGljX2RlcHMgPSBbCiAgICAgIjphcHBfa2V5IiwKICAgICAiOmluc3RhbGxhdGlvbl9tYW5hZ2VyIiwKKyAgICAiOm1lbW9yeV90cmFja2VyX3RocmVhZCIsCiAgICAgIjpzbG90X21hbmFnZW1lbnQiLAogICAgICIvL3N0YXJib2FyZCIsCiAgICAgIi8vc3RhcmJvYXJkL2VsZl9sb2FkZXI6ZXZlcmdyZWVuX2luZm8iLApAQCAtOTEsNyArOTIsNiBAQAogICAgICIvL3Rlc3RpbmcvZ21vY2siLAogICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAogICBdCi0gIGNvbnRlbnRfZGVwcyA9IFsgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiIF0KIH0KIAogc3RhdGljX2xpYnJhcnkoImFwcF9rZXkiKSB7CkBAIC0xMTgsNyArMTE4LDYgQEAKICAgICAiLy90ZXN0aW5nL2dtb2NrIiwKICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKICAgXQotICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiBdCiB9CiAKIHN0YXRpY19saWJyYXJ5KCJkcmFpbl9maWxlIikgewpAQCAtMTQyLDcgKzE0MSw2IEBACiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQogCiBzdGF0aWNfbGlicmFyeSgiaW5zdGFsbGF0aW9uX3N0b3JlX3Byb3RvIikgewpAQCAtMTg5LDcgKzE4Nyw2IEBACiAgICAgIi8vdGVzdGluZy9nbW9jayIsCiAgICAgIi8vdGVzdGluZy9ndGVzdCIsCiAgIF0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQogCiBzdGF0aWNfbGlicmFyeSgic2xvdF9tYW5hZ2VtZW50IikgewpAQCAtMjM5LDMgKzIzNiwxNSBAQAogCiAgIHB1YmxpY19kZXBzID0gWyAiLy9zdGFyYm9hcmQ6c3RhcmJvYXJkX2hlYWRlcnNfb25seSIgXQogfQorCitzdGF0aWNfbGlicmFyeSgibWVtb3J5X3RyYWNrZXJfdGhyZWFkIikgeworICBzb3VyY2VzID0gWworICAgICJtZW1vcnlfdHJhY2tlcl90aHJlYWQuY2MiLAorICAgICJtZW1vcnlfdHJhY2tlcl90aHJlYWQuaCIsCisgIF0KKworICBkZXBzID0gWworICAgICIvL3N0YXJib2FyZDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5IiwKKyAgICAiLy9zdGFyYm9hcmQvY29tbW9uIiwKKyAgXQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleS5neXAgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9hcHBfa2V5Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE2YjZiNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9hcHBfa2V5Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhcHBfa2V5JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXBwX2tleS5jYycsCi0gICAgICAgICdhcHBfa2V5LmgnLAotICAgICAgICAnYXBwX2tleV9pbnRlcm5hbC5jYycsCi0gICAgICAgICdhcHBfa2V5X2ludGVybmFsLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbW9kcF9iNjQvbW9kcF9iNjQuZ3lwOm1vZHBfYjY0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYXBwX2tleV90ZXN0JywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXBwX2tleV90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgJzphcHBfa2V5JywKLSAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhcHBfa2V5X3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2FwcF9rZXlfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdhcHBfa2V5X3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleV9maWxlcy5jYyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXlfZmlsZXMuY2MKaW5kZXggMWIyMDRhNi4uZmNhYjgxMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleV9maWxlcy5jYworKysgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9hcHBfa2V5X2ZpbGVzLmNjCkBAIC05MSw3ICs5MSw2IEBACiAgIH0KIAogICBib29sIGZvdW5kID0gZmFsc2U7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gZmlsZW5hbWUoa1NiRmlsZU1heE5hbWUpOwogICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KGRpcmVjdG9yeSwgZmlsZW5hbWUuZGF0YSgpLCBmaWxlbmFtZS5zaXplKCkpKSB7CiAgICAgaWYgKCFzdHJuY21wKGtGaWxlUHJlZml4LCBmaWxlbmFtZS5kYXRhKCksIHNpemVvZihrRmlsZVByZWZpeCkgLSAxKSAmJgpAQCAtMTAwLDE3ICs5OSw2IEBACiAgICAgICBicmVhazsKICAgICB9CiAgIH0KLSNlbHNlCi0gIFNiRGlyZWN0b3J5RW50cnkgZW50cnk7Ci0gIHdoaWxlIChTYkRpcmVjdG9yeUdldE5leHQoZGlyZWN0b3J5LCAmZW50cnkpKSB7Ci0gICAgaWYgKCFzdHJuY21wKGtGaWxlUHJlZml4LCBlbnRyeS5uYW1lLCBzaXplb2Yoa0ZpbGVQcmVmaXgpIC0gMSkgJiYKLSAgICAgICAgRW5kc1dpdGgoZW50cnkubmFtZSwga0dvb2RGaWxlU3VmZml4KSkgewotICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0jZW5kaWYKLQogICBTYkRpcmVjdG9yeUNsb3NlKGRpcmVjdG9yeSk7CiAgIHJldHVybiBmb3VuZDsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXlfZmlsZXMuZ3lwIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleV9maWxlcy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4Mjk3YjEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleV9maWxlcy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYXBwX2tleV9maWxlcycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2FwcF9rZXlfZmlsZXMuaCcsCi0gICAgICAgICdhcHBfa2V5X2ZpbGVzLmNjJywKLSAgICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcycgOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhcHBfa2V5X2ZpbGVzX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhcHBfa2V5X2ZpbGVzX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi90ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAnOmFwcF9rZXlfZmlsZXMnLAotICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2FwcF9rZXlfZmlsZXNfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYXBwX2tleV9maWxlc190ZXN0JywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2FwcF9rZXlfZmlsZXNfdGVzdCcsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlLmNjIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5jYwppbmRleCBiMmE1ZTUwLi5jODRkN2FjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlLmNjCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2RyYWluX2ZpbGUuY2MKQEAgLTgwLDcgKzgwLDYgQEAKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gZmlsZW5hbWUoa1NiRmlsZU1heE5hbWUpOwogCiAgIHdoaWxlIChTYkRpcmVjdG9yeUdldE5leHQoc2xvdCwgZmlsZW5hbWUuZGF0YSgpLCBmaWxlbmFtZS5zaXplKCkpKSB7CkBAIC04OSwxNyArODgsNiBAQAogICAgIGlmICghc3RybmNtcChwcmVmaXguZGF0YSgpLCBmaWxlbmFtZS5kYXRhKCksIHByZWZpeC5zaXplKCkpKQogICAgICAgZmlsZW5hbWVzLnB1c2hfYmFjayhzdGQ6OnN0cmluZyhmaWxlbmFtZS5kYXRhKCkpKTsKICAgfQotI2Vsc2UKLSAgU2JEaXJlY3RvcnlFbnRyeSBlbnRyeTsKLQotICB3aGlsZSAoU2JEaXJlY3RvcnlHZXROZXh0KHNsb3QsICZlbnRyeSkpIHsKLSAgICBpZiAoIXN0cmNtcChlbnRyeS5uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZW50cnkubmFtZSwgIi4uIikpCi0gICAgICBjb250aW51ZTsKLSAgICBpZiAoIXN0cm5jbXAocHJlZml4LmRhdGEoKSwgZW50cnkubmFtZSwgcHJlZml4LnNpemUoKSkpCi0gICAgICBmaWxlbmFtZXMucHVzaF9iYWNrKHN0ZDo6c3RyaW5nKGVudHJ5Lm5hbWUpKTsKLSAgfQotI2VuZGlmCi0KICAgU2JEaXJlY3RvcnlDbG9zZShzbG90KTsKICAgcmV0dXJuIGZpbGVuYW1lczsKIH0KQEAgLTE5NSw3ICsxODMsMjMgQEAKICAgcmV0dXJuICFzdHJjbXAocmFua2luZ19hcHBfa2V5LmRhdGEoKSwgYXBwX2tleSk7CiB9CiAKLWJvb2wgUmVtb3ZlKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSkgewordm9pZCBDbGVhckV4cGlyZWQoY29uc3QgY2hhciogZGlyKSB7CisgIFNCX0RDSEVDSyhkaXIpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzID0gRmluZEFsbFdpdGhQcmVmaXgoZGlyLCBrRHJhaW5GaWxlUHJlZml4KTsKKworICBmb3IgKGNvbnN0IGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKSB7CisgICAgaWYgKCFJc0V4cGlyZWQoZmlsZW5hbWUpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGRpciArIHN0ZDo6c3RyaW5nKGtTYkZpbGVTZXBTdHJpbmcpICsgZmlsZW5hbWU7CisgICAgaWYgKCFTYkZpbGVEZWxldGUocGF0aC5jX3N0cigpKSkgeworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIHJlbW92ZSBleHBpcmVkIGRyYWluIGZpbGUgYXQgJyIgPDwgcGF0aAorICAgICAgICAgICAgICAgICAgICA8PCAiJyI7CisgICAgfQorICB9Cit9CisKK3ZvaWQgQ2xlYXJGb3JBcHAoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KSB7CiAgIFNCX0RDSEVDSyhkaXIpOwogICBTQl9EQ0hFQ0soYXBwX2tleSk7CiAKQEAgLTIwNSwyOSArMjA5LDkgQEAKIAogICBmb3IgKGNvbnN0IGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKSB7CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGRpciArIHN0ZDo6c3RyaW5nKGtTYkZpbGVTZXBTdHJpbmcpICsgZmlsZW5hbWU7Ci0KLSAgICBpZiAoIVNiRmlsZURlbGV0ZShwYXRoLmNfc3RyKCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIENsZWFyKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSwgYm9vbCBleHBpcmVkKSB7Ci0gIFNCX0RDSEVDSyhkaXIpOwotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlbmFtZXMgPSBGaW5kQWxsV2l0aFByZWZpeChkaXIsIGtEcmFpbkZpbGVQcmVmaXgpOwotCi0gIGZvciAoY29uc3QgYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMpIHsKLSAgICBpZiAoZXhwaXJlZCAmJiAhSXNFeHBpcmVkKGZpbGVuYW1lKSkKLSAgICAgIGNvbnRpbnVlOwotICAgIGlmIChhcHBfa2V5ICYmIChmaWxlbmFtZS5maW5kKGFwcF9rZXkpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGRpciArIHN0ZDo6c3RyaW5nKGtTYkZpbGVTZXBTdHJpbmcpICsgZmlsZW5hbWU7Ci0KLSAgICBpZiAoIVNiRmlsZURlbGV0ZShwYXRoLmNfc3RyKCkpKQotICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIHJlbW92ZSBleHBpcmVkIGRyYWluIGZpbGUgYXQgJyIgPDwgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgPDwgIiciOworICAgIGlmICghU2JGaWxlRGVsZXRlKHBhdGguY19zdHIoKSkpIHsKKyAgICAgIFNCX0xPRyhFUlJPUikgPDwgIkZhaWxlZCB0byByZW1vdmUgZHJhaW4gZmlsZSBhdCAnIiA8PCBwYXRoIDw8ICInIjsKKyAgICB9CiAgIH0KIH0KIApAQCAtMjUwLDEzICsyMzQsMTMgQEAKICAgfQogfQogCi1ib29sIERyYWluaW5nKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSkgeworYm9vbCBJc0FwcERyYWluaW5nKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSkgewogICBTQl9EQ0hFQ0soZGlyKTsKKyAgU0JfRENIRUNLKGFwcF9rZXkpOworICBTQl9EQ0hFQ0soc3RybGVuKGFwcF9rZXkpKTsKIAogICBzdGQ6OnN0cmluZyBwcmVmaXgoa0RyYWluRmlsZVByZWZpeCk7Ci0KLSAgaWYgKGFwcF9rZXkpCi0gICAgcHJlZml4LmFwcGVuZChhcHBfa2V5KTsKKyAgcHJlZml4LmFwcGVuZChhcHBfa2V5KTsKIAogICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzID0KICAgICAgIEZpbmRBbGxXaXRoUHJlZml4KGRpciwgcHJlZml4LmNfc3RyKCkpOwpAQCAtMjY4LDYgKzI1MiwyMyBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgSXNBbm90aGVyQXBwRHJhaW5pbmcoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KSB7CisgIFNCX0RDSEVDSyhkaXIpOworICBTQl9EQ0hFQ0soYXBwX2tleSk7CisgIFNCX0RDSEVDSyhzdHJsZW4oYXBwX2tleSkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzID0gRmluZEFsbFdpdGhQcmVmaXgoZGlyLCBrRHJhaW5GaWxlUHJlZml4KTsKKworICBmb3IgKGNvbnN0IGF1dG8mIGZpbGVuYW1lIDogZmlsZW5hbWVzKSB7CisgICAgaWYgKChmaWxlbmFtZS5maW5kKGFwcF9rZXkpICE9IHN0ZDo6c3RyaW5nOjpucG9zKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICghSXNFeHBpcmVkKGZpbGVuYW1lKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIGRyYWluX2ZpbGUKIH0gIC8vIG5hbWVzcGFjZSBsb2FkZXJfYXBwCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCkBAIC0yODQsMjAgKzI4NSwyNCBAQAogICByZXR1cm4gc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpkcmFpbl9maWxlOjpSYW5rQW5kQ2hlY2soZGlyLCBhcHBfa2V5KTsKIH0KIAotYm9vbCBEcmFpbkZpbGVSZW1vdmUoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KSB7Ci0gIHJldHVybiBzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OmRyYWluX2ZpbGU6OlJlbW92ZShkaXIsIGFwcF9rZXkpOwordm9pZCBEcmFpbkZpbGVDbGVhckV4cGlyZWQoY29uc3QgY2hhciogZGlyKSB7CisgIHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6ZHJhaW5fZmlsZTo6Q2xlYXJFeHBpcmVkKGRpcik7CiB9CiAKLXZvaWQgRHJhaW5GaWxlQ2xlYXIoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5LCBib29sIGV4cGlyZWQpIHsKLSAgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpkcmFpbl9maWxlOjpDbGVhcihkaXIsIGFwcF9rZXksIGV4cGlyZWQpOwordm9pZCBEcmFpbkZpbGVDbGVhckZvckFwcChjb25zdCBjaGFyKiBkaXIsIGNvbnN0IGNoYXIqIGFwcF9rZXkpIHsKKyAgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpkcmFpbl9maWxlOjpDbGVhckZvckFwcChkaXIsIGFwcF9rZXkpOwogfQogCiB2b2lkIERyYWluRmlsZVByZXBhcmVEaXJlY3RvcnkoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KSB7CiAgIHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6ZHJhaW5fZmlsZTo6UHJlcGFyZURpcmVjdG9yeShkaXIsIGFwcF9rZXkpOwogfQogCi1ib29sIERyYWluRmlsZURyYWluaW5nKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSkgewotICByZXR1cm4gc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpkcmFpbl9maWxlOjpEcmFpbmluZyhkaXIsIGFwcF9rZXkpOworYm9vbCBEcmFpbkZpbGVJc0FwcERyYWluaW5nKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSkgeworICByZXR1cm4gc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpkcmFpbl9maWxlOjpJc0FwcERyYWluaW5nKGRpciwgYXBwX2tleSk7Cit9CisKK2Jvb2wgRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KSB7CisgIHJldHVybiBzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OmRyYWluX2ZpbGU6OklzQW5vdGhlckFwcERyYWluaW5nKGRpciwgYXBwX2tleSk7CiB9CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5neXAgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU0YWZkMS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkcmFpbl9maWxlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZHJhaW5fZmlsZS5jYycsCi0gICAgICAgICdkcmFpbl9maWxlLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2RyYWluX2ZpbGVfdGVzdCcsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2RyYWluX2ZpbGVfaGVscGVyLmNjJywKLSAgICAgICAgJ2RyYWluX2ZpbGVfaGVscGVyLmgnLAotICAgICAgICAnZHJhaW5fZmlsZV90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgJzpkcmFpbl9maWxlJywKLSAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkcmFpbl9maWxlX3Rlc3RfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2RyYWluX2ZpbGVfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdkcmFpbl9maWxlX3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5oIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5oCmluZGV4IDkyYTlkYmEuLjExZDcyYTUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2RyYWluX2ZpbGUuaAorKysgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlLmgKQEAgLTQyLDI0ICs0MiwyMyBAQAogLy8gbWF0Y2gsIG90aGVyd2lzZSB8ZmFsc2V8LgogYm9vbCBEcmFpbkZpbGVSYW5rQW5kQ2hlY2soY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KTsKIAotLy8gUmVtb3ZlZCB0aGUgZHJhaW4gZmlsZXMgaW4gfGRpcnwgd2hvc2UgYXBwIGtleSBtYXRjaGVzIHxhcHBfa2V5fC4gUmV0dXJucwotLy8gfHRydWV8IGlmIG5vIGZpbGVzIHdlcmUgZm91bmQsIG9yIHRoZXkgd2VyZSByZW1vdmVkLCBvdGhlcndpc2UgcmV0dXJucwotLy8gfGZhbHNlfC4KLWJvb2wgRHJhaW5GaWxlUmVtb3ZlKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSk7CisvLyBDbGVhcnMgYWxsIGV4cGlyZWQgZHJhaW4gZmlsZXMgaW4gfGRpcnwgZm9yIGFsbCBhcHBzLgordm9pZCBEcmFpbkZpbGVDbGVhckV4cGlyZWQoY29uc3QgY2hhciogZGlyKTsKIAotLy8gQ2xlYXJzIHRoZSBkcmFpbiBmaWxlcyBpbiB8ZGlyfC4gSWYgfGFwcF9rZXl8IGlzIHByb3ZpZGVkLCBhbGwgZHJhaW4gZmlsZXMKLS8vIHdpdGggbWF0Y2hpbmcgYXBwIGtleXMgYXJlIGlnbm9yZWQuIElmIHxleHBpcmVkfCBpcyB8dHJ1ZXwsIGFsbCBub24tZXhwaXJlZAotLy8gZHJhaW4gZmlsZXMgYXJlIGlnbm9yZWQuCi12b2lkIERyYWluRmlsZUNsZWFyKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSwgYm9vbCBleHBpcmVkKTsKKy8vIENsZWFycyB0aGUgZHJhaW4gZmlsZXMgaW4gfGRpcnwgd2l0aCBhbiBhcHAga2V5IG1hdGNoaW5nIHxhcHBfa2V5fC4KK3ZvaWQgRHJhaW5GaWxlQ2xlYXJGb3JBcHAoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KTsKIAogLy8gQ2xlYXJzIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gfGRpcnwgZXhjZXB0IGZvciB0aGUgZHJhaW4gZmlsZSB3aXRoIGFuCiAvLyBhcHAga2V5IG1hdGNoaW5nIHxhcHBfa2V5fC4KIHZvaWQgRHJhaW5GaWxlUHJlcGFyZURpcmVjdG9yeShjb25zdCBjaGFyKiBkaXIsIGNvbnN0IGNoYXIqIGFwcF9rZXkpOwogCi0vLyBDaGVja3Mgd2hldGhlciBhIG5vbi1leHBpcmVkIGRyYWluIGZpbGUgZXhpc3RzIGluIHxkaXJ8LiBJZiB8YXBwX2tleXwgaXMKLS8vIHByb3ZpZGVkLCBvbmx5IGRyYWluIGZpbGVzIHdpdGggYSBtYXRjaGluZyB8YXBwX2tleXwgYXJlIGNvbnNpZGVyZWQuIFJldHVybnMKLS8vIHx0cnVlfCBpZiB0aGVyZSBpcywgb3RoZXJ3aXNlIHxmYWxzZXwuCi1ib29sIERyYWluRmlsZURyYWluaW5nKGNvbnN0IGNoYXIqIGRpciwgY29uc3QgY2hhciogYXBwX2tleSk7CisvLyBDaGVja3Mgd2hldGhlciBhIG5vbi1leHBpcmVkIGRyYWluIGZpbGUgZXhpc3RzIGluIHxkaXJ8IGZvciBhbiBhcHAKKy8vIHdpdGgga2V5IHxhcHBfa2V5fC4KK2Jvb2wgRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhjb25zdCBjaGFyKiBkaXIsIGNvbnN0IGNoYXIqIGFwcF9rZXkpOworCisvLyBDaGVja3Mgd2hldGhlciBhIG5vbi1leHBpcmVkIGRyYWluIGZpbGUgZXhpc3RzIGluIHxkaXJ8IGZvciBhbiBhcHAKKy8vIHdpdGgga2V5IGRpZmZlcmVudCBmcm9tIHxhcHBfa2V5fC4KK2Jvb2wgRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoY29uc3QgY2hhciogZGlyLCBjb25zdCBjaGFyKiBhcHBfa2V5KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvLyBleHRlcm4gIkMiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9kcmFpbl9maWxlX3Rlc3QuY2MKaW5kZXggMzVhZTdjZC4uYmYwODYzYyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2RyYWluX2ZpbGVfdGVzdC5jYwpAQCAtMzYsMjkgKzM2LDIwIEBACiAKIGNsYXNzIERyYWluRmlsZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKICBwcm90ZWN0ZWQ6Ci0gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdXNlZCBmb3IgdGVzdGluZyBvbmNlLAotICAvLyBhbmQgdG8gY3JlYXRlIGEgc3ViZGlyIGluIHRoaXMgdGVzdCBkaXJlY3RvcnksIG9uY2UgZm9yIGFsbCB0ZXN0IGNhc2VzLgotICBzdGF0aWMgdm9pZCBTZXRVcFRlc3RDYXNlKCkgewotICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHBhdGgoa1NiRmlsZU1heFBhdGgsIDApOwotCi0gICAgQVNTRVJUX1RSVUUoCi0gICAgICAgIFNiU3lzdGVtR2V0UGF0aChrU2JTeXN0ZW1QYXRoVGVtcERpcmVjdG9yeSwgcGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpKSk7Ci0KLSAgICBkaXJfLmFzc2lnbihwYXRoLmRhdGEoKSk7CisgIHZvaWQgU2V0VXAoKSBvdmVycmlkZSB7CisgICAgdGVtcF9kaXJfLnJlc2l6ZShrU2JGaWxlTWF4UGF0aCk7CisgICAgQVNTRVJUX1RSVUUoU2JTeXN0ZW1HZXRQYXRoKGtTYlN5c3RlbVBhdGhUZW1wRGlyZWN0b3J5LCB0ZW1wX2Rpcl8uZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2Rpcl8uc2l6ZSgpKSk7CiAgIH0KIAotICB2b2lkIFRlYXJEb3duKCkgb3ZlcnJpZGUgewotICAgIERyYWluRmlsZUNsZWFyKEdldFRlbXBEaXIoKSwgTlVMTCwgZmFsc2UpOwotICB9CisgIHZvaWQgVGVhckRvd24oKSBvdmVycmlkZSB7IERyYWluRmlsZUNsZWFyRm9yQXBwKEdldFRlbXBEaXIoKSwgIiIpOyB9CiAKLSAgY29uc3QgY2hhciogR2V0VGVtcERpcigpIGNvbnN0IHsgcmV0dXJuIGRpcl8uY19zdHIoKTsgfQorICBjb25zdCBjaGFyKiBHZXRUZW1wRGlyKCkgY29uc3QgeyByZXR1cm4gdGVtcF9kaXJfLmRhdGEoKTsgfQogCiAgcHJpdmF0ZToKLSAgc3RhdGljIHN0ZDo6c3RyaW5nIGRpcl87CisgIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBfZGlyXzsKIH07CiAKLXN0ZDo6c3RyaW5nIERyYWluRmlsZVRlc3Q6OmRpcl8gPSAiIjsKLQogLy8gVHlwaWNhbCBkcmFpbiBmaWxlIHVzYWdlLgogVEVTVF9GKERyYWluRmlsZVRlc3QsIFN1bm55RGF5KSB7CiAgIEVYUEVDVF9UUlVFKERyYWluRmlsZVRyeURyYWluKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwpAQCAtNzEsOSArNjIsOSBAQAogICBTY29wZWREcmFpbkZpbGUgc3RhbGUoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lLAogICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lR2V0Tm93KCkgLSBrRHJhaW5GaWxlTWF4aW11bUFnZSk7CiAKLSAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZURyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKICAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlVHJ5RHJhaW4oR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7Ci0gIEVYUEVDVF9UUlVFKERyYWluRmlsZURyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwogfQogCiAvLyBQcmV2aW91c2x5IGNyZWF0ZWQgZHJhaW4gZmlsZSBzaG91bGQgYmUgcmV1c2VkIGlmIGl0IGhhcyBub3QgZXhwaXJlZC4KQEAgLTg1LDU2ICs3Niw3NCBAQAogLy8gRHJhaW5pbmcgc3RhdHVzIHNob3VsZCByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGZpbGUgZXhpc3RzIGFuZCBoYXMgbm90IHlldAogLy8gZXhwaXJlZC4KIFRFU1RfRihEcmFpbkZpbGVUZXN0LCBTdW5ueURheURyYWluaW5nKSB7Ci0gIEVYUEVDVF9GQUxTRShEcmFpbkZpbGVEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7CiAgIEVYUEVDVF9UUlVFKERyYWluRmlsZVRyeURyYWluKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwotICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKIAotICBEcmFpbkZpbGVDbGVhcihHZXRUZW1wRGlyKCksIE5VTEwsIGZhbHNlKTsKKyAgRHJhaW5GaWxlQ2xlYXJGb3JBcHAoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKTsKIAotICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7CisgIEVYUEVDVF9GQUxTRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworfQorCisvLyBDaGVjayBpZiBhbm90aGVyIGFwcCBpcyBkcmFpbmluZy4KK1RFU1RfRihEcmFpbkZpbGVUZXN0LCBTdW5ueURheUFub3RoZXJBcHBEcmFpbmluZykgeworICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5VHdvKSk7CisgIEVYUEVDVF9GQUxTRShEcmFpbkZpbGVJc0Fub3RoZXJBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZUlzQW5vdGhlckFwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleVR3bykpOworCisgIEVYUEVDVF9UUlVFKERyYWluRmlsZVRyeURyYWluKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0Fub3RoZXJBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlUd28pKTsKKworICBEcmFpbkZpbGVDbGVhckZvckFwcChHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpOworICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZUlzQW5vdGhlckFwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleVR3bykpOwogfQogCiAvLyBSZW1vdmUgYW4gZXhpc3RpbmcgZHJhaW4gZmlsZS4KIFRFU1RfRihEcmFpbkZpbGVUZXN0LCBTdW5ueURheVJlbW92ZSkgewogICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVUcnlEcmFpbihHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKLSAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7Ci0gIEVYUEVDVF9UUlVFKERyYWluRmlsZVJlbW92ZShHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKLSAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZURyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBEcmFpbkZpbGVDbGVhckZvckFwcChHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpOworICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKIH0KIAotLy8gVHJ5IHRvIHJlbW92ZSBhIGRyYWluIGZpbGUgdGhhdCBkb2VzIG5vdCBleGlzdC4KLVRFU1RfRihEcmFpbkZpbGVUZXN0LCBTdW5ueURheVJlbW92ZU5vbmV4aXN0ZW50RHJhaW5GaWxlKSB7Ci0gIEVYUEVDVF9GQUxTRShEcmFpbkZpbGVEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKLSAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlUmVtb3ZlKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwotfQotCi0vLyBXaGVuIGNsZWFyaW5nIGRyYWluIGZpbGVzIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBwcm92aWRlIGEgZmlsZSB0byBpZ25vcmUsCi0vLyBhbmQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIG9ubHkgY2xlYXIgZXhwaXJlIGZpbGVzIGlmIGRlc2lyZWQuCi1URVNUX0YoRHJhaW5GaWxlVGVzdCwgU3VubnlEYXlDbGVhcikgeworLy8gQ2xlYXIgb25seSBleHBpcmVkIGRyYWluIGZpbGVzLgorVEVTVF9GKERyYWluRmlsZVRlc3QsIFN1bm55RGF5Q2xlYXJFeHBpcmVkKSB7CiAgIEVYUEVDVF9UUlVFKERyYWluRmlsZVRyeURyYWluKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwogCiAgIFNjb3BlZERyYWluRmlsZSB2YWxpZF9maWxlKEdldFRlbXBEaXIoKSwga0FwcEtleVR3bywgU2JUaW1lR2V0Tm93KCkpOwogICBTY29wZWREcmFpbkZpbGUgc3RhbGVfZmlsZShHZXRUZW1wRGlyKCksIGtBcHBLZXlUaHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lR2V0Tm93KCkgLSBrRHJhaW5GaWxlTWF4aW11bUFnZSk7CiAKLSAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7Ci0gIEVYUEVDVF9UUlVFKERyYWluRmlsZURyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleVR3bykpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOworICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVJc0FwcERyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleVR3bykpOwogICBFWFBFQ1RfVFJVRShTYkZpbGVFeGlzdHMoc3RhbGVfZmlsZS5wYXRoKCkuY19zdHIoKSkpOwogCi0gIERyYWluRmlsZUNsZWFyKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSwgdHJ1ZSk7CisgIERyYWluRmlsZUNsZWFyRXhwaXJlZChHZXRUZW1wRGlyKCkpOwogCi0gIEVYUEVDVF9UUlVFKERyYWluRmlsZURyYWluaW5nKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSkpOwotICBFWFBFQ1RfVFJVRShEcmFpbkZpbGVEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlUd28pKTsKICAgRVhQRUNUX0ZBTFNFKFNiRmlsZUV4aXN0cyhzdGFsZV9maWxlLnBhdGgoKS5jX3N0cigpKSk7Cit9CiAKLSAgRHJhaW5GaWxlQ2xlYXIoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lLCBmYWxzZSk7CisvLyBDbGVhcmluZyBkcmFpbiBmaWxlcyBmb3IgYW4gYXBwLgorVEVTVF9GKERyYWluRmlsZVRlc3QsIFN1bm55RGF5Q2xlYXJGb3JBcHApIHsKKyAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlVHJ5RHJhaW4oR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7CiAKLSAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7Ci0gIEVYUEVDVF9GQUxTRShEcmFpbkZpbGVEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlUd28pKTsKKyAgU2NvcGVkRHJhaW5GaWxlIHZhbGlkX2ZpbGUoR2V0VGVtcERpcigpLCBrQXBwS2V5VHdvLCBTYlRpbWVHZXROb3coKSk7CisgIFNjb3BlZERyYWluRmlsZSBzdGFsZV9maWxlKEdldFRlbXBEaXIoKSwga0FwcEtleVRocmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWVHZXROb3coKSAtIGtEcmFpbkZpbGVNYXhpbXVtQWdlKTsKIAotICBEcmFpbkZpbGVDbGVhcihHZXRUZW1wRGlyKCksIE5VTEwsIGZhbHNlKTsKKyAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlPbmUpKTsKKyAgRVhQRUNUX1RSVUUoRHJhaW5GaWxlSXNBcHBEcmFpbmluZyhHZXRUZW1wRGlyKCksIGtBcHBLZXlUd28pKTsKKyAgRVhQRUNUX1RSVUUoU2JGaWxlRXhpc3RzKHN0YWxlX2ZpbGUucGF0aCgpLmNfc3RyKCkpKTsKIAotICBFWFBFQ1RfRkFMU0UoRHJhaW5GaWxlRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7CisgIC8vIGNsZWFuIGFsbCBkcmFpbiBmaWxlcyBmb3IgYW4gYXBwCisgIERyYWluRmlsZUNsZWFyRm9yQXBwKEdldFRlbXBEaXIoKSwga0FwcEtleU9uZSk7CisKKyAgRVhQRUNUX0ZBTFNFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5T25lKSk7CisgIEVYUEVDVF9UUlVFKERyYWluRmlsZUlzQXBwRHJhaW5pbmcoR2V0VGVtcERpcigpLCBrQXBwS2V5VHdvKSk7CisgIEVYUEVDVF9UUlVFKFNiRmlsZUV4aXN0cyhzdGFsZV9maWxlLnBhdGgoKS5jX3N0cigpKSk7CiB9CiAKIC8vIFJhbmtpbmcgZHJhaW4gZmlsZXMgc2hvdWxkIGZpcnN0IGJlIGRvbmUgYnkgdGltZXN0YW1wLCB3aXRoIHRoZSBhcHAga2V5IGJlaW5nCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9pbnN0YWxsYXRpb25fbWFuYWdlci5jYyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmNjCmluZGV4IGJiOTYwMWYuLjYyMjhkOWUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmNjCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmNjCkBAIC01OTUsNyArNTk1LDYgQEAKICAgaW5zdGFsbGF0aW9uX3N0b3JlXy5TZXJpYWxpemVUb0FycmF5KGJ1Zi5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25fc3RvcmVfLkJ5dGVTaXplKCkpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFTYkZpbGVBdG9taWNSZXBsYWNlKHN0b3JlX3BhdGhfLmNfc3RyKCksIGJ1Zi5kYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25fc3RvcmVfLkJ5dGVTaXplKCkpKSB7CiAgICAgU0JfTE9HKEVSUk9SKQpAQCAtNjA1LDMxICs2MDQsMTcgQEAKICAgfQogICBTQl9ETE9HKElORk8pIDw8ICJTYXZlSW5zdGFsbGF0aW9uU3RvcmUgc3VjY2Vzc2Z1bCI7CiAgIHJldHVybiB0cnVlOwotCi0jZWxzZQotICBTQl9OT1RSRUFDSEVEKCkKLSAgICAgIDw8ICJTYkZpbGVBdG9taWNSZXBsYWNlIGlzIG5vdCBhdmFpbGFibGUgYmVmb3JlIHN0YXJib2FyZCB2ZXJzaW9uIDEyIjsKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAKIGJvb2wgSW5zdGFsbGF0aW9uTWFuYWdlcjo6SW5pdEluc3RhbGxhdGlvblN0b3JlUGF0aCgpIHsKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gc3RvcmFnZV9kaXIoa1NiRmlsZU1heFBhdGgpOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCisKICAgaWYgKCFTYlN5c3RlbUdldFBhdGgoa1NiU3lzdGVtUGF0aFN0b3JhZ2VEaXJlY3RvcnksIHN0b3JhZ2VfZGlyLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAga1NiRmlsZU1heFBhdGgpKSB7CiAgICAgU0JfTE9HKEVSUk9SKSA8PCAiSW5pdEluc3RhbGxhdGlvblN0b3JlUGF0aDogRmFpbGVkIHRvIGdldCAiCiAgICAgICAgICAgICAgICAgICAgICAia1NiU3lzdGVtUGF0aFN0b3JhZ2VEaXJlY3RvcnkiOwogICAgIHJldHVybiBmYWxzZTsKICAgfQotI2Vsc2UKLSAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJJbml0SW5zdGFsbGF0aW9uU3RvcmVQYXRoOiBrU2JTeXN0ZW1QYXRoU3RvcmFnZURpcmVjdG9yeSAiCi0gICAgICAgICAgICAgICAgICAgICAiaXMgbm90IGF2YWlsYWJsZSBiZWZvcmUgIgotICAgICAgICAgICAgICAgICAgICAgInN0YXJib2FyZCB2ZXJzaW9uICIKLSAgICAgICAgICAgICAgICAgIDw8IDEyOwotICByZXR1cm4gZmFsc2U7Ci0KLSNlbmRpZgogICBzdG9yYWdlX2Rpcl8gPSBzdG9yYWdlX2Rpci5kYXRhKCk7CiAgIHN0b3JlX3BhdGhfID0gc3RvcmFnZV9kaXIuZGF0YSgpOwogICBzdG9yZV9wYXRoXyArPSBrU2JGaWxlU2VwU3RyaW5nOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvaW5zdGFsbGF0aW9uX21hbmFnZXIuZ3lwIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvaW5zdGFsbGF0aW9uX21hbmFnZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjU0N2M1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnN0YWxsYXRpb25fc3RvcmVfcHJvdG8nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdpbnN0YWxsYXRpb25fc3RvcmUucGIuY2MnLAotICAgICAgICAnaW5zdGFsbGF0aW9uX3N0b3JlX3N0b3JlLnBiLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5neXA6cHJvdG9idWZfbGl0ZScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3RhbGxhdGlvbl9tYW5hZ2VyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnaW5zdGFsbGF0aW9uX21hbmFnZXIuY2MnLAotICAgICAgICAnaW5zdGFsbGF0aW9uX21hbmFnZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzppbnN0YWxsYXRpb25fc3RvcmVfcHJvdG8nLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saXRlICE9IDEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9wZW5kaW5nX3Jlc3RhcnQuZ3lwOnBlbmRpbmdfcmVzdGFydCcsCi0gICAgICAgICAgXSx9LAotICAgICAgICBdLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICMgR2V0IHByb3RvYnVmIGhlYWRlcnMgZnJvbSB0aGUgY2hyb21pdW0gdHJlZS4KLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3NyYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3RhbGxhdGlvbl9tYW5hZ2VyX3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdpbnN0YWxsYXRpb25fbWFuYWdlcl90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saXRlICE9IDEnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAncGVuZGluZ19yZXN0YXJ0X3Rlc3QuY2MnLAotICAgICAgICAgIF0sfSwKLSAgICAgICAgXSwKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgJzppbnN0YWxsYXRpb25fbWFuYWdlcicsCi0gICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zdGFsbGF0aW9uX21hbmFnZXJfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW5zdGFsbGF0aW9uX21hbmFnZXJfdGVzdCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdpbnN0YWxsYXRpb25fbWFuYWdlcl90ZXN0JywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9pbnN0YWxsYXRpb25fbWFuYWdlcl90ZXN0LmNjCmluZGV4IDJkNTU4ZjcuLmI3ZTZjYWQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvaW5zdGFsbGF0aW9uX21hbmFnZXJfdGVzdC5jYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgSW1VbmluaXRpYWxpemUoKTsKICAgICBTYkRpcmVjdG9yeSBkaXIgPSBTYkRpcmVjdG9yeU9wZW4oc3RvcmFnZV9wYXRoXy5jX3N0cigpLCBOVUxMKTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlyXzsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgorCiAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gZGlyX2VudHJ5KGtTYkZpbGVNYXhOYW1lKTsKIAogICAgIHdoaWxlIChTYkRpcmVjdG9yeUdldE5leHQoZGlyLCBkaXJfZW50cnkuZGF0YSgpLCBkaXJfZW50cnkuc2l6ZSgpKSkgewpAQCAtMTgxLDE2ICsxODEsNyBAQAogICAgICAgZnVsbF9wYXRoICs9IGRpcl9lbnRyeS5kYXRhKCk7CiAgICAgICBTYkZpbGVEZWxldGUoZnVsbF9wYXRoLmNfc3RyKCkpOwogICAgIH0KLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICBTYkRpcmVjdG9yeUVudHJ5IGRpcl9lbnRyeTsKIAotICAgIHdoaWxlIChTYkRpcmVjdG9yeUdldE5leHQoZGlyLCAmZGlyX2VudHJ5KSkgewotICAgICAgc3RkOjpzdHJpbmcgZnVsbF9wYXRoID0gc3RvcmFnZV9wYXRoXzsKLSAgICAgIGZ1bGxfcGF0aCArPSBrU2JGaWxlU2VwU3RyaW5nOwotICAgICAgZnVsbF9wYXRoICs9IGRpcl9lbnRyeS5uYW1lOwotICAgICAgU2JGaWxlRGVsZXRlKGZ1bGxfcGF0aC5jX3N0cigpKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgU2JEaXJlY3RvcnlDbG9zZShkaXIpOwogICAgIFNiRmlsZURlbGV0ZShzdG9yYWdlX3BhdGhfLmNfc3RyKCkpOwogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwLmNjIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvbG9hZGVyX2FwcC5jYwppbmRleCAyZmRjZThmLi5lYTk3N2YyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwLmNjCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHAuY2MKQEAgLTI3LDEzICsyNywxMyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHBfc3dpdGNoZXMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbG9hZGVyX2FwcC9tZW1vcnlfdHJhY2tlcl90aHJlYWQuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvbG9hZGVyX2FwcC9zeXN0ZW1fZ2V0X2V4dGVuc2lvbl9zaGltLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zdHJpbmcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkX3R5cGVzLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY3Jhc2hwYWQvd3JhcHBlci9hbm5vdGF0aW9ucy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oIgogCkBAIC00NSw2ICs0NSw5IEBACiAvLyBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBDb2JhbHQncyBzeXN0ZW0gaW1hZ2UgbGlicmFyeS4KIGNvbnN0IGNoYXIga1N5c3RlbUltYWdlTGlicmFyeVBhdGhbXSA9ICJhcHAvY29iYWx0L2xpYi9saWJjb2JhbHQuc28iOwogCisvLyBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBjb21wcmVzc2VkIENvYmFsdCdzIHN5c3RlbSBpbWFnZSBsaWJyYXJ5LgorY29uc3QgY2hhciBrU3lzdGVtSW1hZ2VDb21wcmVzc2VkTGlicmFyeVBhdGhbXSA9ICJhcHAvY29iYWx0L2xpYi9saWJjb2JhbHQubHo0IjsKKwogLy8gQ29iYWx0IGRlZmF1bHQgVVJMLgogY29uc3QgY2hhciBrQ29iYWx0RGVmYXVsdFVybFtdID0gImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3R2IjsKIApAQCAtNTgsOSArNjEsMTIgQEAKIGNsYXNzIENvYmFsdExpYnJhcnlMb2FkZXIgOiBwdWJsaWMgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpMaWJyYXJ5TG9hZGVyIHsKICBwdWJsaWM6CiAgIHZpcnR1YWwgYm9vbCBMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWJyYXJ5X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50X3BhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkgewogICAgIHJldHVybiBnX2VsZl9sb2FkZXIuTG9hZChsaWJyYXJ5X3BhdGgsIGNvbnRlbnRfcGF0aCwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OlNiU3lzdGVtR2V0RXh0ZW5zaW9uU2hpbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OlNiU3lzdGVtR2V0RXh0ZW5zaW9uU2hpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2NvbXByZXNzaW9uLCB1c2VfbWVtb3J5X21hcHBlZF9maWxlKTsKICAgfQogICB2aXJ0dWFsIHZvaWQqIFJlc29sdmUoY29uc3Qgc3RkOjpzdHJpbmcmIHN5bWJvbCkgewogICAgIHJldHVybiBnX2VsZl9sb2FkZXIuTG9va3VwU3ltYm9sKHN5bWJvbC5jX3N0cigpKTsKQEAgLTc5LDcgKzg1LDEzIEBACiAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIExvYWRMaWJyYXJ5QW5kSW5pdGlhbGl6ZShjb25zdCBzdGQ6OnN0cmluZyYgYWx0ZXJuYXRpdmVfY29udGVudF9wYXRoKSB7Cit2b2lkIExvYWRMaWJyYXJ5QW5kSW5pdGlhbGl6ZShjb25zdCBzdGQ6OnN0cmluZyYgYWx0ZXJuYXRpdmVfY29udGVudF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUpIHsKKyAgaWYgKHVzZV9jb21wcmVzc2lvbiAmJiB1c2VfbWVtb3J5X21hcHBlZF9maWxlKSB7CisgICAgU0JfTE9HKEVSUk9SKSA8PCAiVXNpbmcgYm90aCBjb21wcmVzc2lvbiBhbmQgbW1hcCBmaWxlcyBpcyBub3Qgc3VwcG9ydGVkIjsKKyAgICByZXR1cm47CisgIH0KICAgc3RkOjpzdHJpbmcgY29udGVudF9kaXI7CiAgIGlmICghR2V0Q29udGVudERpcigmY29udGVudF9kaXIpKSB7CiAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIGdldCB0aGUgY29udGVudCBkaXIiOwpAQCAtOTUsMTMgKzEwNywxNSBAQAogICB9CiAgIHN0ZDo6c3RyaW5nIGxpYnJhcnlfcGF0aCA9IGNvbnRlbnRfZGlyOwogICBsaWJyYXJ5X3BhdGggKz0ga1NiRmlsZVNlcFN0cmluZzsKLSAgbGlicmFyeV9wYXRoICs9IGtTeXN0ZW1JbWFnZUxpYnJhcnlQYXRoOwotICBpZiAoIVNiRmlsZUV4aXN0cyhsaWJyYXJ5X3BhdGguY19zdHIoKSkpIHsKLSAgICAvLyBUcnkgdGhlIGNvbXByZXNzZWQgcGF0aCBpZiB0aGUgYmluYXJ5IGRvZXNuJ3QgZXhpdHMuCi0gICAgbGlicmFyeV9wYXRoICs9IHN0YXJib2FyZDo6ZWxmX2xvYWRlcjo6a0NvbXByZXNzaW9uU3VmZml4OworCisgIGlmICh1c2VfY29tcHJlc3Npb24pIHsKKyAgICBsaWJyYXJ5X3BhdGggKz0ga1N5c3RlbUltYWdlQ29tcHJlc3NlZExpYnJhcnlQYXRoOworICB9IGVsc2UgeworICAgIGxpYnJhcnlfcGF0aCArPSBrU3lzdGVtSW1hZ2VMaWJyYXJ5UGF0aDsKICAgfQogCi0gIGlmICghZ19lbGZfbG9hZGVyLkxvYWQobGlicmFyeV9wYXRoLCBjb250ZW50X3BhdGgsIGZhbHNlKSkgeworICBpZiAoIWdfZWxmX2xvYWRlci5Mb2FkKGxpYnJhcnlfcGF0aCwgY29udGVudF9wYXRoLCBmYWxzZSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfY29tcHJlc3Npb24sIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUpKSB7CiAgICAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJGYWlsZWQgdG8gbG9hZCBsaWJyYXJ5IGF0ICciCiAgICAgICAgICAgICAgICAgICAgIDw8IGdfZWxmX2xvYWRlci5HZXRMaWJyYXJ5UGF0aCgpIDw8ICInLiI7CiAgICAgcmV0dXJuOwpAQCAtMTc3LDIwICsxOTEsNDAgQEAKICAgICAgICAgY29tbWFuZF9saW5lLkhhc1N3aXRjaChzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OmtFdmVyZ3JlZW5MaXRlKTsKICAgICBTQl9MT0coSU5GTykgPDwgImlzX2V2ZXJncmVlbl9saXRlPSIgPDwgaXNfZXZlcmdyZWVuX2xpdGU7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIGlmIChjb21tYW5kX2xpbmUuSGFzU3dpdGNoKHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6a1Nob3dTQUJJKSkgewogICAgICAgc3RkOjpzdHJpbmcgc2FiaSA9ICJTQUJJPSI7CiAgICAgICBzYWJpICs9IFNCX1NBQklfSlNPTl9JRDsKICAgICAgIFNiTG9nUmF3KHNhYmkuY19zdHIoKSk7CiAgICAgfQotI2VuZGlmCiAKICAgICBzdGQ6OnN0cmluZyBhbHRlcm5hdGl2ZV9jb250ZW50ID0KICAgICAgICAgY29tbWFuZF9saW5lLkdldFN3aXRjaFZhbHVlKHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6a0NvbnRlbnQpOwogICAgIFNCX0xPRyhJTkZPKSA8PCAiYWx0ZXJuYXRpdmVfY29udGVudD0iIDw8IGFsdGVybmF0aXZlX2NvbnRlbnQ7CiAKKyAgICBib29sIHVzZV9jb21wcmVzc2lvbiA9CisgICAgICAgIGNvbW1hbmRfbGluZS5IYXNTd2l0Y2goc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjprTG9hZGVyVXNlQ29tcHJlc3Npb24pOworCisgICAgYm9vbCB1c2VfbWVtb3J5X21hcHBlZF9maWxlID0gY29tbWFuZF9saW5lLkhhc1N3aXRjaCgKKyAgICAgICAgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjprTG9hZGVyVXNlTWVtb3J5TWFwcGVkRmlsZSk7CisgICAgU0JfTE9HKElORk8pIDw8ICJsb2FkZXJfYXBwOiB1c2VfY29tcHJlc3Npb249IiA8PCB1c2VfY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICAgPDwgIiB1c2VfbWVtb3J5X21hcHBlZF9maWxlPSIgPDwgdXNlX21lbW9yeV9tYXBwZWRfZmlsZTsKKworICAgIGlmIChjb21tYW5kX2xpbmUuSGFzU3dpdGNoKHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6a0xvYWRlclRyYWNrTWVtb3J5KSkgeworICAgICAgc3RkOjpzdHJpbmcgcGVyaW9kID0gY29tbWFuZF9saW5lLkdldFN3aXRjaFZhbHVlKAorICAgICAgICAgIHN0YXJib2FyZDo6bG9hZGVyX2FwcDo6a0xvYWRlclRyYWNrTWVtb3J5KTsKKyAgICAgIGlmIChwZXJpb2QuZW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpNZW1vcnlUcmFja2VyVGhyZWFkIG1lbW9yeV90cmFja2VyX3RocmVhZDsKKyAgICAgICAgbWVtb3J5X3RyYWNrZXJfdGhyZWFkLlN0YXJ0KCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpNZW1vcnlUcmFja2VyVGhyZWFkIG1lbW9yeV90cmFja2VyX3RocmVhZCgKKyAgICAgICAgICAgIGF0b2kocGVyaW9kLmNfc3RyKCkpKTsKKyAgICAgICAgbWVtb3J5X3RyYWNrZXJfdGhyZWFkLlN0YXJ0KCk7CisgICAgICB9CisgICAgfQorCiAgICAgaWYgKGlzX2V2ZXJncmVlbl9saXRlKSB7Ci0gICAgICBMb2FkTGlicmFyeUFuZEluaXRpYWxpemUoYWx0ZXJuYXRpdmVfY29udGVudCk7CisgICAgICBMb2FkTGlicmFyeUFuZEluaXRpYWxpemUoYWx0ZXJuYXRpdmVfY29udGVudCwgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUpOwogICAgIH0gZWxzZSB7CiAgICAgICBzdGQ6OnN0cmluZyB1cmwgPQogICAgICAgICAgIGNvbW1hbmRfbGluZS5HZXRTd2l0Y2hWYWx1ZShzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OmtVUkwpOwpAQCAtMjAyLDcgKzIzNiw4IEBACiAKICAgICAgIGdfc2JfZXZlbnRfZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoY29uc3QgU2JFdmVudCopPigKICAgICAgICAgICBzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OkxvYWRTbG90TWFuYWdlZExpYnJhcnkoCi0gICAgICAgICAgICAgIGFwcF9rZXksIGFsdGVybmF0aXZlX2NvbnRlbnQsICZnX2NvYmFsdF9saWJyYXJ5X2xvYWRlcikpOworICAgICAgICAgICAgICBhcHBfa2V5LCBhbHRlcm5hdGl2ZV9jb250ZW50LCAmZ19jb2JhbHRfbGlicmFyeV9sb2FkZXIsCisgICAgICAgICAgICAgIHVzZV9jb21wcmVzc2lvbiwgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkpOwogICAgIH0KICAgICBTQl9DSEVDSyhnX3NiX2V2ZW50X2Z1bmMpOwogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwLmd5cCBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHAuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWY3MTIxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHAuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2NvbW1vbl9sb2FkZXJfYXBwX3NvdXJjZXMnOiBbCi0gICAgICAnbG9hZGVyX2FwcC5jYycsCi0gICAgICAnbG9hZGVyX2FwcF9zd2l0Y2hlcy5oJywKLSAgICAgICdsb2FkZXJfYXBwX3N3aXRjaGVzLmNjJywKLSAgICAgICdzeXN0ZW1fZ2V0X2V4dGVuc2lvbl9zaGltLmgnLAotICAgICAgJ3N5c3RlbV9nZXRfZXh0ZW5zaW9uX3NoaW0uY2MnLAotICAgIF0sCi0gICAgJ2NvbW1vbl9sb2FkZXJfYXBwX2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5neXA6c2FiaV9zdHJpbmcnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXkuZ3lwOmFwcF9rZXknLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2luc3RhbGxhdGlvbl9tYW5hZ2VyLmd5cDppbnN0YWxsYXRpb25fbWFuYWdlcicsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvc2xvdF9tYW5hZ2VtZW50Lmd5cDpzbG90X21hbmFnZW1lbnQnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgXSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xvYWRlcl9hcHAnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3RhcmdldF9hcmNoIGluIFsieDg2IiwgIng2NCIsICJhcm0iLCAiYXJtNjQiXSAnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPEAoY29tbW9uX2xvYWRlcl9hcHBfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvY29udGVudC9mb250cy9mb250cy5neXA6Y29weV9mb250X2RhdGEnLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lbGZfbG9hZGVyL2VsZl9sb2FkZXIuZ3lwOmVsZl9sb2FkZXInLAotICAgICAgICAgICAgJzxAKGNvbW1vbl9sb2FkZXJfYXBwX2RlcGVuZGVuY2llcyknLAotICAgICAgICAgICAgIyBUT0RPOiBSZW1vdmUgdGhpcyBkZXBlbmRlbmN5IG9uY2UgTWVkaWFTZXNzaW9uIGlzIG1pZ3JhdGVkIHRvIHVzZSBDb2JhbHRFeHRlbnNpb25zLgotICAgICAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbG9hZGVyX2FwcF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbG9hZGVyX2FwcCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdsb2FkZXJfYXBwJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbG9hZGVyX2FwcF9zeXMnLAotICAgICAgJ3R5cGUnOiAnPChmaW5hbF9leGVjdXRhYmxlX3R5cGUpJywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3RhcmdldF9hcmNoIGluIFsieDg2IiwgIng2NCIsICJhcm0iLCAiYXJtNjQiXSAnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPEAoY29tbW9uX2xvYWRlcl9hcHBfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyLmd5cDplbGZfbG9hZGVyX3N5cycsCi0gICAgICAgICAgICAnPEAoY29tbW9uX2xvYWRlcl9hcHBfZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICAgICAjIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb25jZSBNZWRpYVNlc3Npb24gaXMgbWlncmF0ZWQgdG8gdXNlIENvYmFsdEV4dGVuc2lvbnMuCi0gICAgICAgICAgICAnPEAoY29iYWx0X3BsYXRmb3JtX2RlcGVuZGVuY2llcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAnLVdsLC0tZHluYW1pYy1saXN0PTwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuc3ltcycsCi0gICAgICAgICAgICAnLWxkbCcgLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsb2FkZXJfYXBwX3N5c19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbG9hZGVyX2FwcCcsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdsb2FkZXJfYXBwX3N5cycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xvYWRlcl9hcHBfdGVzdHNfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2xvYWRlcl9hcHAnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvYXBwX2tleS5neXA6YXBwX2tleV90ZXN0X2RlcGxveScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9hcHBfa2V5X2ZpbGVzLmd5cDphcHBfa2V5X2ZpbGVzX3Rlc3RfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2RyYWluX2ZpbGUuZ3lwOmRyYWluX2ZpbGVfdGVzdF9kZXBsb3knLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvaW5zdGFsbGF0aW9uX21hbmFnZXIuZ3lwOmluc3RhbGxhdGlvbl9tYW5hZ2VyX3Rlc3RfZGVwbG95JywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudC5neXA6c2xvdF9tYW5hZ2VtZW50X3Rlc3RfZGVwbG95JywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHBfc3dpdGNoZXMuY2MgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwX3N3aXRjaGVzLmNjCmluZGV4IDc3NThkZWEuLmUwOTQ3MjEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHBfc3dpdGNoZXMuY2MKKysrIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvbG9hZGVyX2FwcF9zd2l0Y2hlcy5jYwpAQCAtMjIsNiArMjIsOSBAQAogY29uc3QgY2hhciBrRXZlcmdyZWVuTGl0ZVtdID0gImV2ZXJncmVlbl9saXRlIjsKIGNvbnN0IGNoYXIga0xvYWRlckFwcFZlcnNpb25bXSA9ICJsb2FkZXJfYXBwX3ZlcnNpb24iOwogY29uc3QgY2hhciBrU2hvd1NBQklbXSA9ICJzaG93X3NhYmkiOworY29uc3QgY2hhciBrTG9hZGVyVXNlQ29tcHJlc3Npb25bXSA9ICJsb2FkZXJfdXNlX2NvbXByZXNzaW9uIjsKK2NvbnN0IGNoYXIga0xvYWRlclVzZU1lbW9yeU1hcHBlZEZpbGVbXSA9ICJsb2FkZXJfdXNlX21tYXBfZmlsZSI7Citjb25zdCBjaGFyIGtMb2FkZXJUcmFja01lbW9yeVtdID0gImxvYWRlcl90cmFja19tZW1vcnkiOwogCiB9ICAvLyBuYW1lc3BhY2UgbG9hZGVyX2FwcAogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvbG9hZGVyX2FwcF9zd2l0Y2hlcy5oIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvbG9hZGVyX2FwcF9zd2l0Y2hlcy5oCmluZGV4IDIyMDMwYzUuLjFkZGIyZmYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL2xvYWRlcl9hcHBfc3dpdGNoZXMuaAorKysgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9sb2FkZXJfYXBwX3N3aXRjaGVzLmgKQEAgLTM4LDYgKzM4LDE0IEBACiAvLyBQcmludCB0aGUgbG9hZGVyX2FwcCBTdGFyYm9hcmQgQUJJIHN0cmluZyBvbiB0aGUgY29tbWFuZCBsaW5lLgogZXh0ZXJuIGNvbnN0IGNoYXIga1Nob3dTQUJJW107CiAKKy8vIFRoZSBlbGYgbG9hZGVyIHNob3VsZCB1c2UgY29tcHJlc3Npb24uCitleHRlcm4gY29uc3QgY2hhciBrTG9hZGVyVXNlQ29tcHJlc3Npb25bXTsKKworLy8gVGhlIGVsZiBsb2FkZXIgc2hvdWxkIHVzZSBhIE1lbW9yeSBNYXBwZWQgZmlsZS4KK2V4dGVybiBjb25zdCBjaGFyIGtMb2FkZXJVc2VNZW1vcnlNYXBwZWRGaWxlW107CisKKy8vIFRoZSBsb2FkZXIgYXBwIHNob3VsZCBxdWVyeSBmb3IgYW5kIGxvZyBpdHMgbWVtb3J5IHVzYWdlLgorZXh0ZXJuIGNvbnN0IGNoYXIga0xvYWRlclRyYWNrTWVtb3J5W107CiB9ICAvLyBuYW1lc3BhY2UgbG9hZGVyX2FwcAogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9tZW1vcnlfdHJhY2tlcl90aHJlYWQuY2MgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9tZW1vcnlfdHJhY2tlcl90aHJlYWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjMzc4MQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL21lbW9yeV90cmFja2VyX3RocmVhZC5jYwpAQCAtMCwwICsxLDQ0IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbG9hZGVyX2FwcC9tZW1vcnlfdHJhY2tlcl90aHJlYWQuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2UgbG9hZGVyX2FwcCB7CisKK01lbW9yeVRyYWNrZXJUaHJlYWQ6Ok1lbW9yeVRyYWNrZXJUaHJlYWQoaW50IHBlcmlvZF9pbl9taWxsaXMpCisgICAgOiBUaHJlYWQoIk1lbW9yeVRyYWNrZXJUaCIpLCBwZXJpb2RfaW5fbWlsbGlzXyhwZXJpb2RfaW5fbWlsbGlzKSB7fQorCitNZW1vcnlUcmFja2VyVGhyZWFkOjp+TWVtb3J5VHJhY2tlclRocmVhZCgpIHsKKyAgU0JfTE9HKElORk8pIDw8ICJVc2VkIG1heCBvZiAiIDw8IG1heF91c2VkX2NwdV9tZW1vcnlfCisgICAgICAgICAgICAgICA8PCAiIGJ5dGVzIG9mIENQVSBtZW1vcnkiOworICBKb2luKCk7Cit9CisKK3ZvaWQgTWVtb3J5VHJhY2tlclRocmVhZDo6UnVuKCkgeworICBpbnQ2NF90IHVzZWRfY3B1X21lbW9yeSA9IDA7CisgIHdoaWxlICgham9pbl9jYWxsZWQoKSkgeworICAgIHVzZWRfY3B1X21lbW9yeSA9IFNiU3lzdGVtR2V0VXNlZENQVU1lbW9yeSgpOworICAgIFNCX0xPRyhJTkZPKSA8PCAiVXNpbmcgIiA8PCB1c2VkX2NwdV9tZW1vcnkgPDwgIiBvZiAiCisgICAgICAgICAgICAgICAgIDw8IFNiU3lzdGVtR2V0VG90YWxDUFVNZW1vcnkoKSA8PCAiIGJ5dGVzIG9mIGF2YWlsYWJsZSAiCisgICAgICAgICAgICAgICAgIDw8ICJDUFUgTWVtb3J5IjsKKyAgICBpZiAodXNlZF9jcHVfbWVtb3J5ID4gbWF4X3VzZWRfY3B1X21lbW9yeV8pIHsKKyAgICAgIG1heF91c2VkX2NwdV9tZW1vcnlfID0gdXNlZF9jcHVfbWVtb3J5OworICAgIH0KKyAgICBTbGVlcE1pbGxpc2Vjb25kcyhwZXJpb2RfaW5fbWlsbGlzXyk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGxvYWRlcl9hcHAKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL21lbW9yeV90cmFja2VyX3RocmVhZC5oIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvbWVtb3J5X3RyYWNrZXJfdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlOGJjOQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL21lbW9yeV90cmFja2VyX3RocmVhZC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8vIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfTE9BREVSX0FQUF9NRU1PUllfVFJBQ0tFUl9USFJFQURfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX0xPQURFUl9BUFBfTUVNT1JZX1RSQUNLRVJfVEhSRUFEX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3RocmVhZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBsb2FkZXJfYXBwIHsKKworLy8gUGVyaW9kaWNhbGx5IHF1ZXJpZXMgZm9yIGFuZCBsb2dzIHByb2Nlc3MgbWVtb3J5IHVzYWdlIHdoZW4gZW5hYmxlZC4KK2NsYXNzIE1lbW9yeVRyYWNrZXJUaHJlYWQgOiBwdWJsaWMgc3RhcmJvYXJkOjpUaHJlYWQgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgTWVtb3J5VHJhY2tlclRocmVhZChpbnQgcGVyaW9kX2luX21pbGxpcyA9IDEwMCk7CisgIH5NZW1vcnlUcmFja2VyVGhyZWFkKCk7CisKKyBwcml2YXRlOgorICB2b2lkIFJ1bigpIG92ZXJyaWRlOworCisgIGNvbnN0IGludCBwZXJpb2RfaW5fbWlsbGlzXzsKKyAgaW50NjRfdCBtYXhfdXNlZF9jcHVfbWVtb3J5XyA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbG9hZGVyX2FwcAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9MT0FERVJfQVBQX01FTU9SWV9UUkFDS0VSX1RIUkVBRF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvcGVuZGluZ19yZXN0YXJ0Lmd5cCBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL3BlbmRpbmdfcmVzdGFydC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MGU2MWQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvcGVuZGluZ19yZXN0YXJ0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdwZW5kaW5nX3Jlc3RhcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdwZW5kaW5nX3Jlc3RhcnQuaCcsCi0gICAgICAgICdwZW5kaW5nX3Jlc3RhcnQuY2MnLAotICAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudC5jYyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudC5jYwppbmRleCAwZDhjZjNmLi5iODM0ZjA3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuY2MKKysrIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvc2xvdF9tYW5hZ2VtZW50LmNjCkBAIC00MywzMyArNDMsNDEgQEAKIC8vIEZpbGVuYW1lIGZvciB0aGUgQ29iYWx0IGJpbmFyeS4KIGNvbnN0IGNoYXIga0NvYmFsdExpYnJhcnlOYW1lW10gPSAibGliY29iYWx0LnNvIjsKIAorLy8gRmlsZW5hbWUgZm9yIHRoZSBjb21wcmVzc2VkIENvYmFsdCBiaW5hcnkuCitjb25zdCBjaGFyIGtDb21wcmVzc2VkQ29iYWx0TGlicmFyeU5hbWVbXSA9ICJsaWJjb2JhbHQubHo0IjsKKwogLy8gUmVsYXRpdmUgcGF0aCBmb3IgdGhlIGNvbnRlbnQgZGlyZWN0b3J5IG9mCiAvLyB0aGUgQ29iYWx0IGluc3RhbGxhdGlvbi4KIGNvbnN0IGNoYXIga0NvYmFsdENvbnRlbnRQYXRoW10gPSAiY29udGVudCI7CiAKIH0gIC8vIG5hbWVzcGFjZQogCi1pbnQgUmV2ZXJ0QmFjayhpbnQgY3VycmVudF9pbnN0YWxsYXRpb24sIGNvbnN0IHN0ZDo6c3RyaW5nJiBhcHBfa2V5KSB7CitpbnQgUmV2ZXJ0QmFjayhpbnQgY3VycmVudF9pbnN0YWxsYXRpb24sCisgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYXBwX2tleSwKKyAgICAgICAgICAgICAgIGJvb2wgbWFya19iYWQpIHsKICAgU0JfTE9HKElORk8pIDw8ICJSZXZlcnRCYWNrIGN1cnJlbnRfaW5zdGFsbGF0aW9uPSIgPDwgY3VycmVudF9pbnN0YWxsYXRpb247CiAgIFNCX0RDSEVDSyhjdXJyZW50X2luc3RhbGxhdGlvbiAhPSAwKTsKLSAgc3RkOjp2ZWN0b3I8Y2hhcj4gaW5zdGFsbGF0aW9uX3BhdGgoa1NiRmlsZU1heFBhdGgpOwotICBpZiAoSW1HZXRJbnN0YWxsYXRpb25QYXRoKGN1cnJlbnRfaW5zdGFsbGF0aW9uLCBpbnN0YWxsYXRpb25fcGF0aC5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiRmlsZU1heFBhdGgpICE9IElNX0VSUk9SKSB7Ci0gICAgc3RkOjpzdHJpbmcgYmFkX2FwcF9rZXlfZmlsZV9wYXRoID0KLSAgICAgICAgc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpHZXRCYWRBcHBLZXlGaWxlUGF0aChpbnN0YWxsYXRpb25fcGF0aC5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwX2tleSk7Ci0gICAgaWYgKGJhZF9hcHBfa2V5X2ZpbGVfcGF0aC5lbXB0eSgpKSB7Ci0gICAgICBTQl9MT0coV0FSTklORykgPDwgIkZhaWxlZCB0byBnZXQgYmFkIGFwcCBrZXkgZmlsZSBwYXRoIGZvciBwYXRoPSIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBpbnN0YWxsYXRpb25fcGF0aC5kYXRhKCkgPDwgIiBhbmQgYXBwX2tleT0iIDw8IGFwcF9rZXk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpDcmVhdGVBcHBLZXlGaWxlKGJhZF9hcHBfa2V5X2ZpbGVfcGF0aCkpIHsKLSAgICAgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJGYWlsZWQgdG8gY3JlYXRlIGJhZCBhcHAga2V5IGZpbGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IGJhZF9hcHBfa2V5X2ZpbGVfcGF0aDsKKyAgaWYgKG1hcmtfYmFkKSB7CisgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gaW5zdGFsbGF0aW9uX3BhdGgoa1NiRmlsZU1heFBhdGgpOworICAgIGlmIChJbUdldEluc3RhbGxhdGlvblBhdGgoY3VycmVudF9pbnN0YWxsYXRpb24sIGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTYkZpbGVNYXhQYXRoKSAhPSBJTV9FUlJPUikgeworICAgICAgc3RkOjpzdHJpbmcgYmFkX2FwcF9rZXlfZmlsZV9wYXRoID0KKyAgICAgICAgICBzdGFyYm9hcmQ6OmxvYWRlcl9hcHA6OkdldEJhZEFwcEtleUZpbGVQYXRoKGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9rZXkpOworICAgICAgaWYgKGJhZF9hcHBfa2V5X2ZpbGVfcGF0aC5lbXB0eSgpKSB7CisgICAgICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiRmFpbGVkIHRvIGdldCBiYWQgYXBwIGtleSBmaWxlIHBhdGggZm9yIHBhdGg9IgorICAgICAgICAgICAgICAgICAgICAgICAgPDwgaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpCisgICAgICAgICAgICAgICAgICAgICAgICA8PCAiIGFuZCBhcHBfa2V5PSIgPDwgYXBwX2tleTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc3RhcmJvYXJkOjpsb2FkZXJfYXBwOjpDcmVhdGVBcHBLZXlGaWxlKGJhZF9hcHBfa2V5X2ZpbGVfcGF0aCkpIHsKKyAgICAgICAgICBTQl9MT0coV0FSTklORykgPDwgIkZhaWxlZCB0byBjcmVhdGUgYmFkIGFwcCBrZXkgZmlsZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBiYWRfYXBwX2tleV9maWxlX3BhdGg7CisgICAgICAgIH0KICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJGYWlsZWQgdG8gZ2V0IGluc3RhbGxhdGlvbiBwYXRoIGZvciBpbmRleDogIgorICAgICAgICAgICAgICAgICAgICAgIDw8IGN1cnJlbnRfaW5zdGFsbGF0aW9uOwogICAgIH0KLSAgfSBlbHNlIHsKLSAgICBTQl9MT0coV0FSTklORykgPDwgIkZhaWxlZCB0byBnZXQgaW5zdGFsbGF0aW9uIHBhdGggZm9yIGluZGV4OiAiCi0gICAgICAgICAgICAgICAgICAgIDw8IGN1cnJlbnRfaW5zdGFsbGF0aW9uOwogICB9CiAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gSW1SZXZlcnRUb1N1Y2Nlc3NmdWxJbnN0YWxsYXRpb24oKTsKICAgcmV0dXJuIGN1cnJlbnRfaW5zdGFsbGF0aW9uOwpAQCAtMTI0LDcgKzEzMiwxMyBAQAogCiB2b2lkKiBMb2FkU2xvdE1hbmFnZWRMaWJyYXJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBhcHBfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgYWx0ZXJuYXRpdmVfY29udGVudF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5TG9hZGVyKiBsaWJyYXJ5X2xvYWRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5TG9hZGVyKiBsaWJyYXJ5X2xvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkgeworICBpZiAodXNlX2NvbXByZXNzaW9uICYmIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJVc2luZyBib3RoIGNvbXByZXNzaW9uIGFuZCBtbWFwIGZpbGVzIGlzIG5vdCBzdXBwb3J0ZWQiOworICAgIHJldHVybiBOVUxMOworICB9CiAgIC8vIEluaXRpYWxpemUgdGhlIEluc3RhbGxhdGlvbiBNYW5hZ2VyLgogICBTQl9DSEVDSyhJbUluaXRpYWxpemUoa01heE51bUluc3RhbGxhdGlvbnMsIGFwcF9rZXkuY19zdHIoKSkgPT0gSU1fU1VDQ0VTUykKICAgICAgIDw8ICJBYm9ydC4gRmFpbGVkIHRvIGluaXRpYWxpemUgSW5zdGFsbGF0aW9uIE1hbmFnZXIiOwpAQCAtMTUwLDcgKzE2NCw4IEBACiAgICAgICAgIC8vIGRpc2NhcmQgdGhlIGltYWdlIGFuZCBhdXRvIHJvbGxiYWNrLCBidXQgb25seSBpZgogICAgICAgICAvLyB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIHN5c3RlbSBpbWFnZS4KICAgICAgICAgaWYgKGN1cnJlbnRfaW5zdGFsbGF0aW9uICE9IDApIHsKLSAgICAgICAgICBjdXJyZW50X2luc3RhbGxhdGlvbiA9IFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXkpOworICAgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgICAgUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSwgdHJ1ZSAvKiBtYXJrX2JhZCAqLyk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xNjcsNyArMTgyLDggQEAKICAgICAgIC8vIEhhcmQgZmFpbHVyZS4gRGlzY2FyZCB0aGUgaW1hZ2UgYW5kIGF1dG8gcm9sbGJhY2ssIGJ1dCBvbmx5IGlmCiAgICAgICAvLyB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIHN5c3RlbSBpbWFnZS4KICAgICAgIGlmIChjdXJyZW50X2luc3RhbGxhdGlvbiAhPSAwKSB7Ci0gICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSk7CisgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgIFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXksIHRydWUgLyogbWFya19iYWQgKi8pOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzeXN0ZW0gaW1hZ2UgYXQgaW5kZXggMCBmYWlsZWQuCkBAIC0xNzgsNDEgKzE5NCw0OSBAQAogICAgIFNCX0RMT0coSU5GTykgPDwgImluc3RhbGxhdGlvbl9wYXRoPSIgPDwgaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpOwogCiAgICAgaWYgKGN1cnJlbnRfaW5zdGFsbGF0aW9uICE9IDApIHsKLSAgICAgIC8vIENsZWFudXAgZXhwaXJlZCBkcmFpbiBmaWxlcwotICAgICAgRHJhaW5GaWxlQ2xlYXIoaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpLCBhcHBfa2V5LmNfc3RyKCksIHRydWUpOworICAgICAgLy8gQ2xlYW51cCBhbGwgZXhwaXJlZCBmaWxlcyBmcm9tIGFsbCBhcHBzLgorICAgICAgRHJhaW5GaWxlQ2xlYXJFeHBpcmVkKGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSk7CisKKyAgICAgIC8vIENsZWFudXAgYWxsIGRyYWluIGZpbGVzIGZyb20gdGhlIGN1cnJlbnQgYXBwLgorICAgICAgRHJhaW5GaWxlQ2xlYXJGb3JBcHAoaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpLCBhcHBfa2V5LmNfc3RyKCkpOwogCiAgICAgICAvLyBDaGVjayBmb3IgYmFkIGZpbGUuCiAgICAgICBpZiAoQ2hlY2tCYWRGaWxlRXhpc3RzKGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSwgYXBwX2tleS5jX3N0cigpKSkgewogICAgICAgICBTQl9MT0coSU5GTykgPDwgIkJhZCBhcHAga2V5IGZpbGUiOwotICAgICAgICBjdXJyZW50X2luc3RhbGxhdGlvbiA9IFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXkpOworICAgICAgICBjdXJyZW50X2luc3RhbGxhdGlvbiA9CisgICAgICAgICAgICBSZXZlcnRCYWNrKGN1cnJlbnRfaW5zdGFsbGF0aW9uLCBhcHBfa2V5LCB0cnVlIC8qIG1hcmtfYmFkICovKTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICAvLyBJZiB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gaXMgaW4gdXNlIGJ5IGFuIHVwZGF0ZXIgcm9sbCBiYWNrLgotICAgICAgaWYgKERyYWluRmlsZURyYWluaW5nKGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSwgIiIpKSB7CisgICAgICBpZiAoRHJhaW5GaWxlSXNBbm90aGVyQXBwRHJhaW5pbmcoaW5zdGFsbGF0aW9uX3BhdGguZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9rZXkuY19zdHIoKSkpIHsKICAgICAgICAgU0JfTE9HKElORk8pIDw8ICJBY3RpdmUgc2xvdCBkcmFpbmluZyI7Ci0gICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSk7CisgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgIFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXksIGZhbHNlIC8qIG1hcmtfYmFkICovKTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgICAvLyBBZG9wdCBpbnN0YWxsYXRpb24gcGVyZm9ybWVkIGZyb20gZGlmZmVyZW50IGFwcC4KICAgICAgIGlmICghQWRvcHRJbnN0YWxsYXRpb24oY3VycmVudF9pbnN0YWxsYXRpb24sIGluc3RhbGxhdGlvbl9wYXRoLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwX2tleS5jX3N0cigpKSkgewogICAgICAgICBTQl9MT0coSU5GTykgPDwgIlVuYWJsZSB0byBhZG9wdCBpbnN0YWxsYXRpb24iOwotICAgICAgICBjdXJyZW50X2luc3RhbGxhdGlvbiA9IFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXkpOworICAgICAgICBjdXJyZW50X2luc3RhbGxhdGlvbiA9CisgICAgICAgICAgICBSZXZlcnRCYWNrKGN1cnJlbnRfaW5zdGFsbGF0aW9uLCBhcHBfa2V5LCB0cnVlIC8qIG1hcmtfYmFkICovKTsKICAgICAgICAgY29udGludWU7CiAgICAgICB9CiAgICAgfQogCiAgICAgLy8gaW5zdGFsbGF0aW9uX24vbGliL2xpYmNvYmFsdC5zbwogICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGxpYl9wYXRoKGtTYkZpbGVNYXhQYXRoKTsKKyAgICBzdGQ6OnN0cmluZyBsaWJyYXJ5X25hbWU7CisgICAgaWYgKHVzZV9jb21wcmVzc2lvbikgeworICAgICAgbGlicmFyeV9uYW1lID0ga0NvbXByZXNzZWRDb2JhbHRMaWJyYXJ5TmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgbGlicmFyeV9uYW1lID0ga0NvYmFsdExpYnJhcnlOYW1lOworICAgIH0KICAgICBTYlN0cmluZ0Zvcm1hdEYobGliX3BhdGguZGF0YSgpLCBrU2JGaWxlTWF4UGF0aCwgIiVzJXMlcyVzJXMiLAogICAgICAgICAgICAgICAgICAgICBpbnN0YWxsYXRpb25fcGF0aC5kYXRhKCksIGtTYkZpbGVTZXBTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgIGtDb2JhbHRMaWJyYXJ5UGF0aCwga1NiRmlsZVNlcFN0cmluZywga0NvYmFsdExpYnJhcnlOYW1lKTsKLSAgICBpZiAoIVNiRmlsZUV4aXN0cyhsaWJfcGF0aC5kYXRhKCkpKSB7Ci0gICAgICAvLyBUcnkgdGhlIGNvbXByZXNzZWQgcGF0aCBpZiB0aGUgYmluYXJ5IGRvZXNuJ3QgZXhpdHMuCi0gICAgICBzdGFyYm9hcmQ6OnN0cmxjYXQobGliX3BhdGguZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJib2FyZDo6ZWxmX2xvYWRlcjo6a0NvbXByZXNzaW9uU3VmZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGtTYkZpbGVNYXhQYXRoKTsKLSAgICB9CisgICAgICAgICAgICAgICAgICAgIGtDb2JhbHRMaWJyYXJ5UGF0aCwga1NiRmlsZVNlcFN0cmluZywgbGlicmFyeV9uYW1lLmNfc3RyKCkpOworCiAgICAgU0JfTE9HKElORk8pIDw8ICJsaWJfcGF0aD0iIDw8IGxpYl9wYXRoLmRhdGEoKTsKIAogICAgIHN0ZDo6c3RyaW5nIGNvbnRlbnQ7CkBAIC0yMjksMTMgKzI1MywxNSBAQAogCiAgICAgU0JfTE9HKElORk8pIDw8ICJjb250ZW50PSIgPDwgY29udGVudDsKIAotICAgIGlmICghbGlicmFyeV9sb2FkZXItPkxvYWQobGliX3BhdGguZGF0YSgpLCBjb250ZW50LmNfc3RyKCkpKSB7CisgICAgaWYgKCFsaWJyYXJ5X2xvYWRlci0+TG9hZChsaWJfcGF0aC5kYXRhKCksIGNvbnRlbnQuY19zdHIoKSwgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkpIHsKICAgICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiRmFpbGVkIHRvIGxvYWQgQ29iYWx0ISI7CiAKICAgICAgIC8vIEhhcmQgZmFpbHVyZS4gRGlzY2FyZCB0aGUgaW1hZ2UgYW5kIGF1dG8gcm9sbGJhY2ssIGJ1dCBvbmx5IGlmCiAgICAgICAvLyB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIHN5c3RlbSBpbWFnZS4KICAgICAgIGlmIChjdXJyZW50X2luc3RhbGxhdGlvbiAhPSAwKSB7Ci0gICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSk7CisgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgIFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXksIHRydWUgLyogbWFya19iYWQgKi8pOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzeXN0ZW0gaW1hZ2UgYXQgaW5kZXggMCBmYWlsZWQuCkBAIC0yNjEsNyArMjg3LDggQEAKICAgICAgIC8vIEhhcmQgZmFpbHVyZS4gRGlzY2FyZCB0aGUgaW1hZ2UgYW5kIGF1dG8gcm9sbGJhY2ssIGJ1dCBvbmx5IGlmCiAgICAgICAvLyB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIHN5c3RlbSBpbWFnZS4KICAgICAgIGlmIChjdXJyZW50X2luc3RhbGxhdGlvbiAhPSAwKSB7Ci0gICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSk7CisgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgIFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXksIHRydWUgLyogbWFya19iYWQgKi8pOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzeXN0ZW0gaW1hZ2UgYXQgaW5kZXggMCBmYWlsZWQuCkBAIC0yOTQsNyArMzIxLDggQEAKICAgICAgIC8vIEhhcmQgZmFpbHVyZS4gRGlzY2FyZCB0aGUgaW1hZ2UgYW5kIGF1dG8gcm9sbGJhY2ssIGJ1dCBvbmx5IGlmCiAgICAgICAvLyB0aGUgY3VycmVudCBpbWFnZSBpcyBub3QgdGhlIHN5c3RlbSBpbWFnZS4KICAgICAgIGlmIChjdXJyZW50X2luc3RhbGxhdGlvbiAhPSAwKSB7Ci0gICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0gUmV2ZXJ0QmFjayhjdXJyZW50X2luc3RhbGxhdGlvbiwgYXBwX2tleSk7CisgICAgICAgIGN1cnJlbnRfaW5zdGFsbGF0aW9uID0KKyAgICAgICAgICAgIFJldmVydEJhY2soY3VycmVudF9pbnN0YWxsYXRpb24sIGFwcF9rZXksIHRydWUgLyogbWFya19iYWQgKi8pOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzeXN0ZW0gaW1hZ2UgYXQgaW5kZXggMCBmYWlsZWQuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuZ3lwIGIvc3RhcmJvYXJkL2xvYWRlcl9hcHAvc2xvdF9tYW5hZ2VtZW50Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1NjJlMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Nsb3RfbWFuYWdlbWVudCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Nsb3RfbWFuYWdlbWVudC5jYycsCi0gICAgICAgICdzbG90X21hbmFnZW1lbnQuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lbGZfbG9hZGVyL3NhYmlfc3RyaW5nLmd5cDpzYWJpX3N0cmluZycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9lbGZfbG9hZGVyLmd5cDplbGZfbG9hZGVyJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9sb2FkZXJfYXBwL2FwcF9rZXlfZmlsZXMuZ3lwOmFwcF9rZXlfZmlsZXMnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvZHJhaW5fZmlsZS5neXA6ZHJhaW5fZmlsZScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9pbnN0YWxsYXRpb25fbWFuYWdlci5neXA6aW5zdGFsbGF0aW9uX21hbmFnZXInLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2xvdF9tYW5hZ2VtZW50X3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzbG90X21hbmFnZW1lbnRfdGVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICc6c2xvdF9tYW5hZ2VtZW50JywKLSAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzbG90X21hbmFnZW1lbnRfdGVzdF9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnc2xvdF9tYW5hZ2VtZW50X3Rlc3QnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnc2xvdF9tYW5hZ2VtZW50X3Rlc3QnLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xvYWRlcl9hcHAvc2xvdF9tYW5hZ2VtZW50LmggYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuaAppbmRleCAzMTljZWM5Li5iNWEyMjM3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuaAorKysgYi9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnQuaApAQCAtMjYsOSArMjYsMTQgQEAKICAgdmlydHVhbCB+TGlicmFyeUxvYWRlcigpIHt9CiAKICAgLy8gTG9hZCB0aGUgbGlicmFyeSB3aXRoIHRoZSBwcm92aWRlZCBmdWxsIHBhdGggdG8gfGxpYnJhcnlfcGF0aHwgYW5kCi0gIC8vIHxjb250ZW50X3BhdGh8LgorICAvLyB8Y29udGVudF9wYXRofC4gSWYgfHVzZV9jb21wcmVzc2lvbnwgaXMgdHJ1ZSB0aGUgbGlicmFyeSBpcyBhc3N1bWVkCisgIC8vIHRvIGJlIGNvbXByZXNzZWQuIElmIHx1c2VfbWVtb3J5X21hcHBlZF9maWxlfCBpcyB0cnVlIHRoZSBsaWJyYXJ5CisgIC8vIHdvdWxkIGJlIGxvYWRlZCBhcyBhIG1lbW9yeSBtYXBwZWQgZmlsZS4gVGhlIHx1c2VfY29tcHJlc3Npb258IGFuZAorICAvLyB8dXNlX21lbW9yeV9tYXBwZWRfZmlsZXwgIGFyZSBub3QgY29tcGF0aWJsZSBhbmQgY2FuJ3QgYmUgYm90aCBlbmFibGVkLgogICB2aXJ0dWFsIGJvb2wgTG9hZChjb25zdCBzdGQ6OnN0cmluZyYgbGlicmFyeV9wYXRoLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY29udGVudF9wYXRoKSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50X3BhdGgsCisgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX2NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICBib29sIHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGUpID0gMDsKIAogICAvLyBSZXNvbHZlIGEgc3ltYm9sIGJ5IG5hbWUuCiAgIHZpcnR1YWwgdm9pZCogUmVzb2x2ZShjb25zdCBzdGQ6OnN0cmluZyYgc3ltYm9sKSA9IDA7CkBAIC0zOSwxMCArNDQsMTYgQEAKIC8vIFRoZSBhY3R1YWwgbG9hZGluZyBmcm9tIHRoZSBzbG90IGlzIHBlcmZvcm1lZCBieSB0aGUgfGxpYnJhcnlfbG9hZGVyfC4KIC8vIEFuIGFsdGVybmF0aXZlIGNvbnRlbnQgY2FuIGJlIHVzZWQgYnkgc3BlY2lmeWluZyBub24tZW1wdHkKIC8vIHxhbHRlcm5hdGl2ZV9jb250ZW50X3BhdGh8IHdpdGggdGhlIGZ1bGwgcGF0aCB0byB0aGUgY29udGVudC4KKy8vIElmIHx1c2VfY29tcHJlc3Npb258IGlzIHRydWUgdGhlIGxpYnJhcnkgaXMgYXNzdW1lZAorLy8gdG8gYmUgY29tcHJlc3NlZC4gSWYgfHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGV8IGlzIHRydWUgdGhlIGxpYnJhcnkKKy8vIHdvdWxkIGJlIGxvYWRlZCBhcyBhIG1lbW9yeSBtYXBwZWQgZmlsZS4gVGhlIHx1c2VfY29tcHJlc3Npb258IGFuZAorLy8gfHVzZV9tZW1vcnlfbWFwcGVkX2ZpbGV8ICBhcmUgbm90IGNvbXBhdGlibGUgYW5kIGNhbid0IGJlIGJvdGggZW5hYmxlZC4KIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSB8U2JFdmVudEhhbmRsZXwgc3ltYm9sIGluIHRoZSBsaWJyYXJ5Lgogdm9pZCogTG9hZFNsb3RNYW5hZ2VkTGlicmFyeShjb25zdCBzdGQ6OnN0cmluZyYgYXBwX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGFsdGVybmF0aXZlX2NvbnRlbnRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlicmFyeUxvYWRlciogbGlicmFyeV9sb2FkZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJyYXJ5TG9hZGVyKiBsaWJyYXJ5X2xvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSk7CiAKIH0gIC8vIG5hbWVzcGFjZSBsb2FkZXJfYXBwCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbG9hZGVyX2FwcC9zbG90X21hbmFnZW1lbnRfdGVzdC5jYyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudF90ZXN0LmNjCmluZGV4IDlmNjNiMWEuLjFlZDU1ZDIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudF90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9sb2FkZXJfYXBwL3Nsb3RfbWFuYWdlbWVudF90ZXN0LmNjCkBAIC00OCwyNSArNDgsMjMgQEAKIAogY2xhc3MgTW9ja0xpYnJhcnlMb2FkZXIgOiBwdWJsaWMgTGlicmFyeUxvYWRlciB7CiAgcHVibGljOgotICBNT0NLX01FVEhPRDIoTG9hZCwKKyAgTU9DS19NRVRIT0Q0KExvYWQsCiAgICAgICAgICAgICAgICBib29sKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWJyYXJ5X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50X3BhdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgYm9vbCB1c2VfY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlX21lbW9yeV9tYXBwZWRfZmlsZSkpOwogICBNT0NLX01FVEhPRDEoUmVzb2x2ZSwgdm9pZCooY29uc3Qgc3RkOjpzdHJpbmcmIHN5bWJvbCkpOwogfTsKIAotY2xhc3MgU2xvdE1hbmFnZW1lbnRUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgU2xvdE1hbmFnZW1lbnRUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08Ym9vbD4gewogIHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIFNldFVwKCkgewogICAgIHNsb3RfMF9saWJjb2JhbHRfcGF0aF8gPQotICAgICAgICBDcmVhdGVQYXRoKHsiY29udGVudCIsICJhcHAiLCAiY29iYWx0IiwgImxpYiIsICJsaWJjb2JhbHQuc28ubHo0In0pOworICAgICAgICBDcmVhdGVQYXRoKHsiY29udGVudCIsICJhcHAiLCAiY29iYWx0IiwgImxpYiIsICJsaWJjb2JhbHQifSk7CiAgICAgc2xvdF8wX2NvbnRlbnRfcGF0aF8gPSBDcmVhdGVQYXRoKHsiY29udGVudCIsICJhcHAiLCAiY29iYWx0IiwgImNvbnRlbnQifSk7Ci0KLSAgICBzbG90XzFfbGliY29iYWx0X3BhdGhfID0KLSAgICAgICAgQ3JlYXRlUGF0aCh7Imluc3RhbGxhdGlvbl8xIiwgImxpYiIsICJsaWJjb2JhbHQuc28ubHo0In0pOworICAgIHNsb3RfMV9saWJjb2JhbHRfcGF0aF8gPSBDcmVhdGVQYXRoKHsiaW5zdGFsbGF0aW9uXzEiLCAibGliIiwgImxpYmNvYmFsdCJ9KTsKICAgICBzbG90XzFfY29udGVudF9wYXRoXyA9IENyZWF0ZVBhdGgoeyJpbnN0YWxsYXRpb25fMSIsICJjb250ZW50In0pOwotCi0gICAgc2xvdF8yX2xpYmNvYmFsdF9wYXRoXyA9Ci0gICAgICAgIENyZWF0ZVBhdGgoeyJpbnN0YWxsYXRpb25fMiIsICJsaWIiLCAibGliY29iYWx0LnNvLmx6NCJ9KTsKKyAgICBzbG90XzJfbGliY29iYWx0X3BhdGhfID0gQ3JlYXRlUGF0aCh7Imluc3RhbGxhdGlvbl8yIiwgImxpYiIsICJsaWJjb2JhbHQifSk7CiAgICAgc2xvdF8yX2NvbnRlbnRfcGF0aF8gPSBDcmVhdGVQYXRoKHsiaW5zdGFsbGF0aW9uXzIiLCAiY29udGVudCJ9KTsKIAogICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ1ZihrU2JGaWxlTWF4UGF0aCk7CkBAIC03NCw2ICs3MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLmRhdGEoKSwga1NiRmlsZU1heFBhdGgpOwogICB9CiAKKyAgdm9pZCBBZGRGaWxlRXh0ZW5zaW9uKHN0ZDo6c3RyaW5nJiBwYXRoKSB7CisgICAgaWYgKEdldFBhcmFtKCkpIHsKKyAgICAgIHBhdGggKz0gIi5sejQiOworICAgIH0gZWxzZSB7CisgICAgICBwYXRoICs9ICIuc28iOworICAgIH0KKyAgfQorCiAgIHN0ZDo6c3RyaW5nIENyZWF0ZVBhdGgoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6c3RyaW5nPiBwYXRoX2VsZW1lbnRzKSB7CiAgICAgc3RkOjpzdHJpbmcgcmVzdWx0OwogICAgIGZvciAoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGggOiBwYXRoX2VsZW1lbnRzKSB7CkBAIC0xMzUsMTAgKzE0MSwxNCBAQAogICB9CiAKICAgdm9pZCBWZXJpZnlMb2FkKGNvbnN0IHN0ZDo6c3RyaW5nJiBsaWIsIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50KSB7CisgICAgYm9vbCB1c2VfY29tcHJlc3Npb24gPSBHZXRQYXJhbSgpOwogICAgIE1vY2tMaWJyYXJ5TG9hZGVyIGxpYnJhcnlfbG9hZGVyOwogCisgICAgc3RkOjpzdHJpbmcgZnVsbF9saWJfcGF0aCA9IGxpYjsKKyAgICBBZGRGaWxlRXh0ZW5zaW9uKGZ1bGxfbGliX3BhdGgpOwogICAgIEVYUEVDVF9DQUxMKGxpYnJhcnlfbG9hZGVyLAotICAgICAgICAgICAgICAgIExvYWQodGVzdGluZzo6RW5kc1dpdGgobGliKSwgdGVzdGluZzo6RW5kc1dpdGgoY29udGVudCkpKQorICAgICAgICAgICAgICAgIExvYWQodGVzdGluZzo6RW5kc1dpdGgoZnVsbF9saWJfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpFbmRzV2l0aChjb250ZW50KSwgdXNlX2NvbXByZXNzaW9uLCBmYWxzZSkpCiAgICAgICAgIC5UaW1lcygxKQogICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKHRydWUpKTsKICAgICBFWFBFQ1RfQ0FMTChsaWJyYXJ5X2xvYWRlciwgUmVzb2x2ZSgiR2V0RXZlcmdyZWVuU2FiaVN0cmluZyIpKQpAQCAtMTUzLDcgKzE2Myw4IEBACiAgICAgICAgIC5UaW1lcygxKQogICAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZTYkV2ZW50RmFrZSkpKTsKICAgICBBU1NFUlRfRVEoJlNiRXZlbnRGYWtlLAotICAgICAgICAgICAgICBMb2FkU2xvdE1hbmFnZWRMaWJyYXJ5KGtUZXN0QXBwS2V5LCAiIiwgJmxpYnJhcnlfbG9hZGVyKSk7CisgICAgICAgICAgICAgIExvYWRTbG90TWFuYWdlZExpYnJhcnkoa1Rlc3RBcHBLZXksICIiLCAmbGlicmFyeV9sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2NvbXByZXNzaW9uLCBmYWxzZSkpOwogICB9CiAKICBwcm90ZWN0ZWQ6CkBAIC0xNjYsNyArMTc3LDcgQEAKICAgYm9vbCBzdG9yYWdlX3BhdGhfaW1wbGVtZW50ZWRfOwogfTsKIAotVEVTVF9GKFNsb3RNYW5hZ2VtZW50VGVzdCwgU3lzdGVtU2xvdCkgeworVEVTVF9QKFNsb3RNYW5hZ2VtZW50VGVzdCwgU3lzdGVtU2xvdCkgewogICBpZiAoIXN0b3JhZ2VfcGF0aF9pbXBsZW1lbnRlZF8pIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE3OCw3ICsxODksNyBAQAogICBWZXJpZnlCYWRGaWxlKDAsIGtUZXN0QXBwS2V5LCBmYWxzZSk7CiB9CiAKLVRFU1RfRihTbG90TWFuYWdlbWVudFRlc3QsIEFkb3B0U2xvdCkgeworVEVTVF9QKFNsb3RNYW5hZ2VtZW50VGVzdCwgQWRvcHRTbG90KSB7CiAgIGlmICghc3RvcmFnZV9wYXRoX2ltcGxlbWVudGVkXykgewogICAgIHJldHVybjsKICAgfQpAQCAtMTk2LDcgKzIwNyw3IEBACiAgIFZlcmlmeUJhZEZpbGUoMSwga1Rlc3RBcHBLZXksIGZhbHNlKTsKIH0KIAotVEVTVF9GKFNsb3RNYW5hZ2VtZW50VGVzdCwgR29vZFNsb3QpIHsKK1RFU1RfUChTbG90TWFuYWdlbWVudFRlc3QsIEdvb2RTbG90KSB7CiAgIGlmICghc3RvcmFnZV9wYXRoX2ltcGxlbWVudGVkXykgewogICAgIHJldHVybjsKICAgfQpAQCAtMjEzLDcgKzIyNCw3IEBACiAgIFZlcmlmeUJhZEZpbGUoMiwga1Rlc3RBcHBLZXksIGZhbHNlKTsKIH0KIAotVEVTVF9GKFNsb3RNYW5hZ2VtZW50VGVzdCwgTm90QWRvcHRTbG90KSB7CitURVNUX1AoU2xvdE1hbmFnZW1lbnRUZXN0LCBOb3RBZG9wdFNsb3QpIHsKICAgaWYgKCFzdG9yYWdlX3BhdGhfaW1wbGVtZW50ZWRfKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yMzAsNyArMjQxLDcgQEAKICAgVmVyaWZ5QmFkRmlsZSgyLCBrVGVzdEFwcEtleSwgdHJ1ZSk7CiB9CiAKLVRFU1RfRihTbG90TWFuYWdlbWVudFRlc3QsIEJhZFNsb3QpIHsKK1RFU1RfUChTbG90TWFuYWdlbWVudFRlc3QsIEJhZFNsb3QpIHsKICAgaWYgKCFzdG9yYWdlX3BhdGhfaW1wbGVtZW50ZWRfKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yNDUsNyArMjU2LDcgQEAKICAgVmVyaWZ5R29vZEZpbGUoMSwga1Rlc3RBcHBLZXksIGZhbHNlKTsKIH0KIAotVEVTVF9GKFNsb3RNYW5hZ2VtZW50VGVzdCwgRHJhaW5pbmdTbG90KSB7CitURVNUX1AoU2xvdE1hbmFnZW1lbnRUZXN0LCBEcmFpbmluZ1Nsb3QpIHsKICAgaWYgKCFzdG9yYWdlX3BhdGhfaW1wbGVtZW50ZWRfKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yNTgsMTAgKzI2OSwxMCBAQAogICBJbVVuaW5pdGlhbGl6ZSgpOwogICBWZXJpZnlMb2FkKHNsb3RfMF9saWJjb2JhbHRfcGF0aF8sIHNsb3RfMF9jb250ZW50X3BhdGhfKTsKICAgVmVyaWZ5R29vZEZpbGUoMSwga1Rlc3RBcHBLZXksIGZhbHNlKTsKLSAgVmVyaWZ5QmFkRmlsZSgxLCBrVGVzdEFwcEtleSwgdHJ1ZSk7CisgIFZlcmlmeUJhZEZpbGUoMSwga1Rlc3RBcHBLZXksIGZhbHNlKTsKIH0KIAotVEVTVF9GKFNsb3RNYW5hZ2VtZW50VGVzdCwgQWx0ZXJuYXRpdmVDb250ZW50KSB7CitURVNUX1AoU2xvdE1hbmFnZW1lbnRUZXN0LCBBbHRlcm5hdGl2ZUNvbnRlbnQpIHsKICAgaWYgKCFzdG9yYWdlX3BhdGhfaW1wbGVtZW50ZWRfKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC0yNzQsOCArMjg1LDExIEBACiAKICAgTW9ja0xpYnJhcnlMb2FkZXIgbGlicmFyeV9sb2FkZXI7CiAKLSAgRVhQRUNUX0NBTEwobGlicmFyeV9sb2FkZXIsIExvYWQodGVzdGluZzo6RW5kc1dpdGgoc2xvdF8wX2xpYmNvYmFsdF9wYXRoXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rpbmc6OkVuZHNXaXRoKCIvZm9vIikpKQorICBzdGQ6OnN0cmluZyBmdWxsX2xpYl9wYXRoID0gc2xvdF8wX2xpYmNvYmFsdF9wYXRoXzsKKyAgQWRkRmlsZUV4dGVuc2lvbihmdWxsX2xpYl9wYXRoKTsKKyAgRVhQRUNUX0NBTEwobGlicmFyeV9sb2FkZXIsCisgICAgICAgICAgICAgIExvYWQodGVzdGluZzo6RW5kc1dpdGgoZnVsbF9saWJfcGF0aCksIHRlc3Rpbmc6OkVuZHNXaXRoKCIvZm9vIiksCisgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0oKSwgZmFsc2UpKQogICAgICAgLlRpbWVzKDEpCiAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKHRydWUpKTsKICAgRVhQRUNUX0NBTEwobGlicmFyeV9sb2FkZXIsIFJlc29sdmUoIkdldEV2ZXJncmVlblNhYmlTdHJpbmciKSkKQEAgLTI5MSwxMCArMzA1LDExIEBACiAgICAgICAuVGltZXMoMSkKICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJlNiRXZlbnRGYWtlKSkpOwogICBBU1NFUlRfRVEoJlNiRXZlbnRGYWtlLAotICAgICAgICAgICAgTG9hZFNsb3RNYW5hZ2VkTGlicmFyeShrVGVzdEFwcEtleSwgIi9mb28iLCAmbGlicmFyeV9sb2FkZXIpKTsKKyAgICAgICAgICAgIExvYWRTbG90TWFuYWdlZExpYnJhcnkoa1Rlc3RBcHBLZXksICIvZm9vIiwgJmxpYnJhcnlfbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSgpLCBmYWxzZSkpOwogfQogCi1URVNUX0YoU2xvdE1hbmFnZW1lbnRUZXN0LCBCYWRTYWJpKSB7CitURVNUX1AoU2xvdE1hbmFnZW1lbnRUZXN0LCBCYWRTYWJpKSB7CiAgIGlmICghc3RvcmFnZV9wYXRoX2ltcGxlbWVudGVkXykgewogICAgIHJldHVybjsKICAgfQpAQCAtMzE0LDggKzMyOSwxMSBAQAogCiAgIE1vY2tMaWJyYXJ5TG9hZGVyIGxpYnJhcnlfbG9hZGVyOwogCi0gIEVYUEVDVF9DQUxMKGxpYnJhcnlfbG9hZGVyLCBMb2FkKHRlc3Rpbmc6OkVuZHNXaXRoKHNsb3RfMl9saWJjb2JhbHRfcGF0aF8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpFbmRzV2l0aChzbG90XzJfY29udGVudF9wYXRoXykpKQorICBzdGQ6OnN0cmluZyBzbG90Ml9saWJjb2JhbHRfZnVsbCA9IHNsb3RfMl9saWJjb2JhbHRfcGF0aF87CisgIEFkZEZpbGVFeHRlbnNpb24oc2xvdDJfbGliY29iYWx0X2Z1bGwpOworICBFWFBFQ1RfQ0FMTChsaWJyYXJ5X2xvYWRlciwKKyAgICAgICAgICAgICAgTG9hZCh0ZXN0aW5nOjpFbmRzV2l0aChzbG90Ml9saWJjb2JhbHRfZnVsbCksCisgICAgICAgICAgICAgICAgICAgdGVzdGluZzo6RW5kc1dpdGgoc2xvdF8yX2NvbnRlbnRfcGF0aF8pLCBHZXRQYXJhbSgpLCBmYWxzZSkpCiAgICAgICAuVGltZXMoMSkKICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4odHJ1ZSkpOwogCkBAIC0zMjYsOCArMzQ0LDExIEBACiAgICAgICAuV2lsbE9uY2UoCiAgICAgICAgICAgdGVzdGluZzo6UmV0dXJuKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZHZXRFdmVyZ3JlZW5TYWJpU3RyaW5nKSkpOwogCi0gIEVYUEVDVF9DQUxMKGxpYnJhcnlfbG9hZGVyLCBMb2FkKHRlc3Rpbmc6OkVuZHNXaXRoKHNsb3RfMV9saWJjb2JhbHRfcGF0aF8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aW5nOjpFbmRzV2l0aChzbG90XzFfY29udGVudF9wYXRoXykpKQorICBzdGQ6OnN0cmluZyBzbG90MV9saWJjb2JhbHRfZnVsbCA9IHNsb3RfMV9saWJjb2JhbHRfcGF0aF87CisgIEFkZEZpbGVFeHRlbnNpb24oc2xvdDFfbGliY29iYWx0X2Z1bGwpOworICBFWFBFQ1RfQ0FMTChsaWJyYXJ5X2xvYWRlciwKKyAgICAgICAgICAgICAgTG9hZCh0ZXN0aW5nOjpFbmRzV2l0aChzbG90MV9saWJjb2JhbHRfZnVsbCksCisgICAgICAgICAgICAgICAgICAgdGVzdGluZzo6RW5kc1dpdGgoc2xvdF8xX2NvbnRlbnRfcGF0aF8pLCBHZXRQYXJhbSgpLCBmYWxzZSkpCiAgICAgICAuVGltZXMoMSkKICAgICAgIC5XaWxsT25jZSh0ZXN0aW5nOjpSZXR1cm4odHJ1ZSkpOwogCkBAIC0zNDEsOSArMzYyLDE0IEBACiAgICAgICAuV2lsbE9uY2UodGVzdGluZzo6UmV0dXJuKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZTYkV2ZW50RmFrZSkpKTsKIAogICBBU1NFUlRfRVEoJlNiRXZlbnRGYWtlLAotICAgICAgICAgICAgTG9hZFNsb3RNYW5hZ2VkTGlicmFyeShrVGVzdEFwcEtleSwgIiIsICZsaWJyYXJ5X2xvYWRlcikpOworICAgICAgICAgICAgTG9hZFNsb3RNYW5hZ2VkTGlicmFyeShrVGVzdEFwcEtleSwgIiIsICZsaWJyYXJ5X2xvYWRlciwgR2V0UGFyYW0oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTsKIH0KIAorSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoU2xvdE1hbmFnZW1lbnRUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb3RNYW5hZ2VtZW50VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDo6dGVzdGluZzo6Qm9vbCgpKTsKKwogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2UgbG9hZGVyX2FwcAogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL21lZGlhLmggYi9zdGFyYm9hcmQvbWVkaWEuaAppbmRleCBhZmYxNDRmLi4xNjU1Njk2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbWVkaWEuaAorKysgYi9zdGFyYm9hcmQvbWVkaWEuaApAQCAtMzc2LDcgKzM3Niw2IEBACiAgIC8vIFRoZSB2aWRlbyBjb2RlYyBvZiB0aGlzIHNhbXBsZS4KICAgU2JNZWRpYVZpZGVvQ29kZWMgY29kZWM7CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgLy8gVGhlIG1pbWUgb2YgdGhlIHZpZGVvIHN0cmVhbSB3aGVuIHxjb2RlY3wgaXNuJ3Qga1NiTWVkaWFWaWRlb0NvZGVjTm9uZS4gIEl0CiAgIC8vIG1heSBwb2ludCB0byBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIG1pbWUgaXMgbm90IGF2YWlsYWJsZSwgYW5kIGl0IGNhbiBvbmx5CiAgIC8vIGJlIHNldCB0byBOVUxMIHdoZW4gfGNvZGVjfCBpcyBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLgpAQCAtMzkzLDcgKzM5Miw2IEBACiAgIC8vIFdoZW4gdGhlIG1heGltdW1zIGFyZSB1bmtub3duLCB0aGlzIHdpbGwgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4gIEl0IGNhbgogICAvLyBvbmx5IGJlIHNldCB0byBOVUxMIHdoZW4gfGNvZGVjfCBpcyBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLgogICBjb25zdCBjaGFyKiBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYXNzb2NpYXRlZCBzYW1wbGUgaXMgYSBrZXkgZnJhbWUgKEktZnJhbWUpLiBWaWRlbyBrZXkKICAgLy8gZnJhbWVzIG11c3QgYWx3YXlzIHN0YXJ0IHdpdGggU1BTIGFuZCBQUFMgTkFMIHVuaXRzLgpAQCAtNDU0LDEyICs0NTIsMTAgQEAKICAgLy8gVGhlIGF1ZGlvIGNvZGVjIG9mIHRoaXMgc2FtcGxlLgogICBTYk1lZGlhQXVkaW9Db2RlYyBjb2RlYzsKIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAvLyBUaGUgbWltZSBvZiB0aGUgYXVkaW8gc3RyZWFtIHdoZW4gfGNvZGVjfCBpc24ndCBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lLiAgSXQKICAgLy8gbWF5IHBvaW50IHRvIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgbWltZSBpcyBub3QgYXZhaWxhYmxlLCBhbmQgaXQgY2FuIG9ubHkKICAgLy8gYmUgc2V0IHRvIE5VTEwgd2hlbiB8Y29kZWN8IGlzIGtTYk1lZGlhQXVkaW9Db2RlY05vbmUuCiAgIGNvbnN0IGNoYXIqIG1pbWU7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogCiAgIC8vIFRoZSB3YXZlZm9ybS1hdWRpbyBmb3JtYXQgdHlwZSBjb2RlLgogICB1aW50MTZfdCBmb3JtYXRfdGFnOwpAQCAtNTc2LDI4ICs1NzIsNiBAQAogICAgIGludCBvdXRwdXRfaW5kZXgsCiAgICAgU2JNZWRpYUF1ZGlvQ29uZmlndXJhdGlvbiogb3V0X2NvbmZpZ3VyYXRpb24pOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotLy8gSW5kaWNhdGVzIHdoZXRoZXIgb3V0cHV0IGNvcHkgcHJvdGVjdGlvbiBpcyBjdXJyZW50bHkgZW5hYmxlZCBvbiBhbGwgY2FwYWJsZQotLy8gb3V0cHV0cy4gSWYgfHRydWV8LCB0aGVuIG5vbi1wcm90ZWN0aW9uLWNhcGFibGUgb3V0cHV0cyBhcmUgZXhwZWN0ZWQgdG8gYmUKLS8vIGJsYW5rZWQuCi0vLwotLy8gcHJlc3VibWl0OiBhbGxvdyBzYl9leHBvcnQgbWlzbWF0Y2gKLVNCX0VYUE9SVCBib29sIFNiTWVkaWFJc091dHB1dFByb3RlY3RlZCgpOwotCi0vLyBFbmFibGVzIG9yIGRpc2FibGVzIG91dHB1dCBjb3B5IHByb3RlY3Rpb24gb24gYWxsIGNhcGFibGUgb3V0cHV0cy4gSWYKLS8vIGVuYWJsZWQsIHRoZW4gbm9uLXByb3RlY3Rpb24tY2FwYWJsZSBvdXRwdXRzIGFyZSBleHBlY3RlZCB0byBiZSBibGFua2VkLgotLy8KLS8vIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgYW5kIHRoZQotLy8gZnVuY3Rpb24gcmV0dXJucyBhIHN1Y2Nlc3MgZXZlbiBpZiB0aGUgY2FsbCBpcyByZWR1bmRhbnQgaW4gdGhhdCBpdCBkb2Vzbid0Ci0vLyBjaGFuZ2UgdGhlIGN1cnJlbnQgdmFsdWUuCi0vLwotLy8gfGVuYWJsZWR8OiBJbmRpY2F0ZXMgd2hldGhlciBvdXRwdXQgcHJvdGVjdGlvbiBpcyBlbmFibGVkICh8dHJ1ZXwpIG9yCi0vLyAgIGRpc2FibGVkLgotLy8KLS8vIHByZXN1Ym1pdDogYWxsb3cgc2JfZXhwb3J0IG1pc21hdGNoCi1TQl9FWFBPUlQgYm9vbCBTYk1lZGlhU2V0T3V0cHV0UHJvdGVjdGlvbihib29sIGVuYWJsZWQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCi0KIC8vIFZhbHVlIHVzZWQgd2hlbiBhIHZpZGVvJ3MgcmVzb2x1dGlvbiBpcyBub3Qga25vd24uCiAjZGVmaW5lIGtTYk1lZGlhVmlkZW9SZXNvbHV0aW9uRGltZW5zaW9uSW52YWxpZCAwCiAvLyBWYWx1ZSB1c2VkIHdoZW4gYSB2aWRlbydzIGJpdHMgcGVyIHBpeGVsIGlzIG5vdCBrbm93bi4KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9tZW1vcnkuaCBiL3N0YXJib2FyZC9tZW1vcnkuaAppbmRleCAxYzUzN2I5Li5kMzlmZDM1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbWVtb3J5LmgKKysrIGIvc3RhcmJvYXJkL21lbW9yeS5oCkBAIC0zOSwxNCArMzksMTQgQEAKICNpZm5kZWYgU1RBUkJPQVJEX01FTU9SWV9IXwogI2RlZmluZSBTVEFSQk9BUkRfTUVNT1JZX0hfCiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V4cG9ydC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKIAotI2luY2x1ZGUgPHN0cmluZy5oPgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCkBAIC0xNjYsOCArMTY2LDcgQEAKIC8vIHByb3ZpZGVkIGJ5IFN0YXJib2FyZCBwb3J0cy4KIC8vCiAvLyBETyBOT1QgQ0FMTC4gQ2FsbCBTYk1lbW9yeUFsbG9jYXRlKC4uLikgaW5zdGVhZC4KLVNCX0RFUFJFQ0FURURfRVhURVJOQUwoCi0gICAgU0JfRVhQT1JUIHZvaWQqIFNiTWVtb3J5QWxsb2NhdGVVbmNoZWNrZWQoc2l6ZV90IHNpemUpKTsKK1NCX0RFUFJFQ0FURURfRVhURVJOQUwoU0JfRVhQT1JUIHZvaWQqIFNiTWVtb3J5QWxsb2NhdGVVbmNoZWNrZWQoc2l6ZV90IHNpemUpKTsKIAogLy8gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgU2JNZW1vcnlSZWFsbG9jYXRlIHRoYXQgbXVzdCBiZQogLy8gcHJvdmlkZWQgYnkgU3RhcmJvYXJkIHBvcnRzLgpAQCAtMTg4LDE3ICsxODcsMTQgQEAKIC8vIFN0YXJib2FyZCBwb3J0cy4KIC8vCiAvLyBETyBOT1QgQ0FMTC4gQ2FsbCBTYk1lbW9yeURlYWxsb2NhdGUoLi4uKSBpbnN0ZWFkLgotU0JfREVQUkVDQVRFRF9FWFRFUk5BTCgKLSAgICBTQl9FWFBPUlQgdm9pZCBTYk1lbW9yeUZyZWUodm9pZCogbWVtb3J5KSk7CitTQl9ERVBSRUNBVEVEX0VYVEVSTkFMKFNCX0VYUE9SVCB2b2lkIFNiTWVtb3J5RnJlZSh2b2lkKiBtZW1vcnkpKTsKIAogLy8gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgU2JNZW1vcnlGcmVlQWxpZ25lZCB0aGF0IG11c3QgYmUgcHJvdmlkZWQgYnkKIC8vIFN0YXJib2FyZCBwb3J0cy4KIC8vCiAvLyBETyBOT1QgQ0FMTC4gQ2FsbCBTYk1lbW9yeURlYWxsb2NhdGVBbGlnbmVkKC4uLikgaW5zdGVhZC4KLVNCX0RFUFJFQ0FURURfRVhURVJOQUwoCi0gICAgU0JfRVhQT1JUIHZvaWQgU2JNZW1vcnlGcmVlQWxpZ25lZCh2b2lkKiBtZW1vcnkpKTsKK1NCX0RFUFJFQ0FURURfRVhURVJOQUwoU0JfRVhQT1JUIHZvaWQgU2JNZW1vcnlGcmVlQWxpZ25lZCh2b2lkKiBtZW1vcnkpKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQogLy8gQWxsb2NhdGVzIHxzaXplX2J5dGVzfCB3b3J0aCBvZiBwaHlzaWNhbCBtZW1vcnkgcGFnZXMgYW5kIG1hcHMgdGhlbSBpbnRvCiAvLyBhbiBhdmFpbGFibGUgdmlydHVhbCByZWdpb24uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB8U0JfTUVNT1JZX01BUF9GQUlMRUR8CiAvLyBvbiBmYWlsdXJlLiB8TlVMTHwgaXMgYSB2YWxpZCByZXR1cm4gdmFsdWUuCkBAIC0yMzgsNyArMjM0LDYgQEAKIC8vIG1lbW9yeSB0aGF0IGhhcyBiZWVuIHdyaXR0ZW4gdG8gYW5kIG1pZ2h0IGJlIGV4ZWN1dGVkIGluIHRoZSBmdXR1cmUuCiBTQl9FWFBPUlQgdm9pZCBTYk1lbW9yeUZsdXNoKHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgaW50NjRfdCBzaXplX2J5dGVzKTsKICNlbmRpZgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkKIAogLy8gR2V0cyB0aGUgc3RhY2sgYm91bmRzIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCiAvLwpAQCAtMzQ3LDE1ICszNDIsMTQgQEAKIC8vIGFsbG9jYXRpb24gZmFpbHVyZS4KIC8vCiAvLyBETyBOT1QgQ0FMTC4gQ2FsbCBTYk1lbW9yeUFsbG9jYXRlKC4uLikgaW5zdGVhZC4KLVNCX0RFUFJFQ0FURURfRVhURVJOQUwoCi0gICAgU0JfRVhQT1JUIHZvaWQqIFNiTWVtb3J5QWxsb2NhdGVDaGVja2VkKHNpemVfdCBzaXplKSk7CitTQl9ERVBSRUNBVEVEX0VYVEVSTkFMKFNCX0VYUE9SVCB2b2lkKiBTYk1lbW9yeUFsbG9jYXRlQ2hlY2tlZChzaXplX3Qgc2l6ZSkpOwogCiAvLyBTYW1lIGFzIFNiTWVtb3J5UmVhbGxvY2F0ZVVuY2hlY2tlZCwgYnV0IHdpbGwgYWJvcnQoKSBpbiB0aGUgY2FzZSBvZiBhbgogLy8gYWxsb2NhdGlvbiBmYWlsdXJlLgogLy8KIC8vIERPIE5PVCBDQUxMLiBDYWxsIFNiTWVtb3J5UmVhbGxvY2F0ZSguLi4pIGluc3RlYWQuCi1TQl9ERVBSRUNBVEVEX0VYVEVSTkFMKAotICAgIFNCX0VYUE9SVCB2b2lkKiBTYk1lbW9yeVJlYWxsb2NhdGVDaGVja2VkKHZvaWQqIG1lbW9yeSwgc2l6ZV90IHNpemUpKTsKK1NCX0RFUFJFQ0FURURfRVhURVJOQUwoU0JfRVhQT1JUIHZvaWQqIFNiTWVtb3J5UmVhbGxvY2F0ZUNoZWNrZWQodm9pZCogbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSkpOwogCiAvLyBTYW1lIGFzIFNiTWVtb3J5QWxsb2NhdGVBbGlnbmVkVW5jaGVja2VkLCBidXQgd2lsbCBhYm9ydCgpIGluIHRoZSBjYXNlIG9mIGFuCiAvLyBhbGxvY2F0aW9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbWljcm9waG9uZS5oIGIvc3RhcmJvYXJkL21pY3JvcGhvbmUuaAppbmRleCBkMzgyYzJhLi4xNjQ5ZmRhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbWljcm9waG9uZS5oCisrKyBiL3N0YXJib2FyZC9taWNyb3Bob25lLmgKQEAgLTQzLDggKzQzLDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvZXhwb3J0LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogI2RlZmluZSBrU2JNaWNyb3Bob25lTGFiZWxTaXplIDI1NgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTIwMSw3ICsxOTksNCBAQAogfSAgLy8gZXh0ZXJuICJDIgogI2VuZGlmCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KICNlbmRpZiAgLy8gU1RBUkJPQVJEX01JQ1JPUEhPTkVfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9tdXRleC5oIGIvc3RhcmJvYXJkL211dGV4LmgKaW5kZXggNWYyNmRmOS4uMGFiYzYxMCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL211dGV4LmgKKysrIGIvc3RhcmJvYXJkL211dGV4LmgKQEAgLTIzLDE0ICsyMywxMSBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V4cG9ydC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkX3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIE1heCBzaXplIG9mIHRoZSBTYk11dGV4IHR5cGUuCiAjZGVmaW5lIFNCX01VVEVYX01BWF9TSVpFIDgwCiAKQEAgLTU0LDggKzUxLDYgQEAKICAgeyAwIH0KICNlbmRpZgogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIEVudW1lcmF0aW9uIG9mIHBvc3NpYmxlIHJlc3VsdHMgZnJvbSBhY3F1aXJpbmcgYSBtdXRleC4KIHR5cGVkZWYgZW51bSBTYk11dGV4UmVzdWx0IHsKICAgLy8gVGhlIG11dGV4IHdhcyBhY3F1aXJlZCBzdWNjZXNzZnVsbHkuCkBAIC04MiwxNyArNzcsMTAgQEAKIC8vIHxvdXRfbXV0ZXh8OiBUaGUgaGFuZGxlIHRvIHRoZSBuZXdseSBjcmVhdGVkIG11dGV4LgogU0JfRVhQT1JUIGJvb2wgU2JNdXRleENyZWF0ZShTYk11dGV4KiBvdXRfbXV0ZXgpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIC8vIERlc3Ryb3lzIGEgbXV0ZXguIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRlc3RydWN0aW9uIHdhcwogLy8gc3VjY2Vzc2Z1bC4gRGVzdHJveWluZyBhIGxvY2tlZCBtdXRleCByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4KIC8vCiAvLyB8bXV0ZXh8OiBUaGUgbXV0ZXggdG8gYmUgaW52YWxpZGF0ZWQuCi0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0vLyBEZXN0cm95cyBhIG11dGV4LiBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXN0cnVjdGlvbiB3YXMKLS8vIHN1Y2Nlc3NmdWwuCi0vLwotLy8gfG11dGV4fDogVGhlIG11dGV4IHRvIGJlIGludmFsaWRhdGVkLgotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogU0JfRVhQT1JUIGJvb2wgU2JNdXRleERlc3Ryb3koU2JNdXRleCogbXV0ZXgpOwogCiAvLyBBY3F1aXJlcyB8bXV0ZXh8LCBibG9ja2luZyBpbmRlZmluaXRlbHkuIFRoZSByZXR1cm4gdmFsdWUgaWRlbnRpZmllcwpAQCAtMTAyLDE5ICs5MCwxMSBAQAogLy8gfG11dGV4fDogVGhlIG11dGV4IHRvIGJlIGFjcXVpcmVkLgogU0JfRVhQT1JUIFNiTXV0ZXhSZXN1bHQgU2JNdXRleEFjcXVpcmUoU2JNdXRleCogbXV0ZXgpOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIC8vIEFjcXVpcmVzIHxtdXRleHwsIHdpdGhvdXQgYmxvY2tpbmcuIFRoZSByZXR1cm4gdmFsdWUgaWRlbnRpZmllcwogLy8gdGhlIGFjcXVpc2l0aW9uIHJlc3VsdC4gU2JNdXRleGVzIGFyZSBub3QgcmVlbnRyYW50LCBzbyBhIHJlY3Vyc2l2ZQogLy8gYWNxdWlzaXRpb24gaGFzIHVuZGVmaW5lZCBiZWhhdmlvci4KIC8vCiAvLyB8bXV0ZXh8OiBUaGUgbXV0ZXggdG8gYmUgYWNxdWlyZWQuCi0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0vLyBBY3F1aXJlcyB8bXV0ZXh8LCB3aXRob3V0IGJsb2NraW5nLiBUaGUgcmV0dXJuIHZhbHVlIGlkZW50aWZpZXMKLS8vIHRoZSBhY3F1aXNpdGlvbiByZXN1bHQuIFNiTXV0ZXhlcyBhcmUgbm90IHJlZW50cmFudCwgc28gYSByZWN1cnNpdmUKLS8vIGFjcXVpc2l0aW9uIGFsd2F5cyBmYWlscy4KLS8vCi0vLyB8bXV0ZXh8OiBUaGUgbXV0ZXggdG8gYmUgYWNxdWlyZWQuCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiBTQl9FWFBPUlQgU2JNdXRleFJlc3VsdCBTYk11dGV4QWNxdWlyZVRyeShTYk11dGV4KiBtdXRleCk7CiAKIC8vIFJlbGVhc2VzIHxtdXRleHwgaGVsZCBieSB0aGUgY3VycmVudCB0aHJlYWQuIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9CVUlMRC5nbiBiL3N0YXJib2FyZC9ucGxiL0JVSUxELmduCmluZGV4IGE4YzY2OTcuLmM5NmIwZDUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9ucGxiL0JVSUxELmduCkBAIC01NiwxMSArNTYsNiBAQAogICAgICJjb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZF90ZXN0LmNjIiwKICAgICAiY29uZmlndXJhdGlvbl90ZXN0LmNjIiwKICAgICAiY3B1X2ZlYXR1cmVzX2dldF90ZXN0LmNjIiwKLSAgICAiY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lcl90ZXN0LmNjIiwKLSAgICAiY3J5cHRvZ3JhcGh5X2hlbHBlcnMuY2MiLAotICAgICJjcnlwdG9ncmFwaHlfaGVscGVycy5oIiwKLSAgICAiY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybV9nY21fdGVzdC5jYyIsCi0gICAgImNyeXB0b2dyYXBoeV90cmFuc2Zvcm1fdGVzdC5jYyIsCiAgICAgImRpcmVjdG9yeV9jYW5fb3Blbl90ZXN0LmNjIiwKICAgICAiZGlyZWN0b3J5X2Nsb3NlX3Rlc3QuY2MiLAogICAgICJkaXJlY3RvcnlfY3JlYXRlX3Rlc3QuY2MiLApAQCAtMTA5LDcgKzEwNCw5IEBACiAKICAgICAjIFRPRE86IFNlcGFyYXRlIGZ1bmN0aW9ucyB0ZXN0ZWQgYnkgbWVkaWEgYnVmZmVyIHRlc3QgaW50byBtdWx0aXBsZQogICAgICMgZmlsZXMuCisgICAgImRybV9jcmVhdGVfc3lzdGVtX3Rlc3QuY2MiLAogICAgICJtZWRpYV9idWZmZXJfdGVzdC5jYyIsCisgICAgIm1lZGlhX2Nhbl9wbGF5X21pbWVfYW5kX2tleV9zeXN0ZW1fdGVzdC5jYyIsCiAgICAgIm1lZGlhX2NvbmZpZ3VyYXRpb25fdGVzdC5jYyIsCiAgICAgIm1lbW9yeV9hbGlnbl90b19wYWdlX3NpemVfdGVzdC5jYyIsCiAgICAgIm1lbW9yeV9hbGxvY2F0ZV9hbGlnbmVkX3Rlc3QuY2MiLApAQCAtMTQ0LDcgKzE0MSw2IEBACiAgICAgInBsYXllcl9jcmVhdGlvbl9wYXJhbV9oZWxwZXJzLmNjIiwKICAgICAicGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuaCIsCiAgICAgInBsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlX3Rlc3QuY2MiLAotICAgICJwbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkX3Rlc3QuY2MiLAogICAgICJwbGF5ZXJfdGVzdF91dGlsLmNjIiwKICAgICAicGxheWVyX3Rlc3RfdXRpbC5oIiwKICAgICAicGxheWVyX3dyaXRlX3NhbXBsZV90ZXN0LmNjIiwKQEAgLTI2MywyNiArMjU5LDM0IEBACiAgICAgIndpbmRvd19nZXRfc2l6ZV90ZXN0LmNjIiwKICAgXQogCi0gIGlmIChoYXNfZHJtX3N1cHBvcnQpIHsKLSAgICBzb3VyY2VzICs9IFsKLSAgICAgICJkcm1fY3JlYXRlX3N5c3RlbV90ZXN0LmNjIiwKLSAgICAgICJtZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtX3Rlc3QuY2MiLAotICAgIF0KLSAgfQorICBjb25maWdzICs9IFsKKyAgICAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6ZXhjZXB0aW9ucyIsCisgICAgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iLAorICBdCisgIGNvbmZpZ3MgLT0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6bm9fZXhjZXB0aW9ucyIgXQogCi0gIGRlcHMgPSBjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzCisgIGRlcHMgPSBbCisgICAgIi8vc3RhcmJvYXJkIiwKKyAgICAiLy9zdGFyYm9hcmQvY29tbW9uIiwKKyAgICAiLy9zdGFyYm9hcmQvbnBsYi9jb21waWxlcl9jb21wbGlhbmNlOmNwcDE0X3N1cHBvcnRlZCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWE6bWVkaWFfdXRpbCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyOnZpZGVvX2RtcCIsCisgICAgIi8vdGVzdGluZy9nbW9jayIsCisgIF0KKworICBkZXBzICs9IGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMKIAogICBpZiAoaXNfaW50ZXJuYWxfYnVpbGQpIHsKICAgICBkZXBzICs9IFsgIi8vc3RhcmJvYXJkL3ByaXZhdGUvbnBsYjpucGxiX3ByaXZhdGUiIF0KICAgfQogCi0gIHB1YmxpY19kZXBzID0gWwotICAgICIvL3N0YXJib2FyZCIsCi0gICAgIi8vc3RhcmJvYXJkL2NvbW1vbiIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWE6bWVkaWFfdXRpbCIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyOnZpZGVvX2RtcCIsCi0gICAgIi8vdGVzdGluZy9nbW9jayIsCi0gIF0KKyAgaWYgKGdsX3R5cGUgIT0gIm5vbmUiKSB7CisgICAgZGVwcyArPSBbICIvL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMiIF0KKyAgfQorCisgIGlmIChzYl9lbmFibGVfY3BwMTdfYXVkaXQpIHsKKyAgICBkZXBzICs9IFsgIi8vc3RhcmJvYXJkL25wbGIvY29tcGlsZXJfY29tcGxpYW5jZTpjcHAxN19zdXBwb3J0ZWQiIF0KKyAgfQogCiAgIGRhdGFfZGVwcyA9IFsKICAgICAiLy9zdGFyYm9hcmQvbnBsYi90ZXN0ZGF0YS9maWxlX3Rlc3RzOm5wbGJfZmlsZV90ZXN0c19kYXRhIiwKQEAgLTI5NCwxNCArMjk4LDQgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXI6cGxheWVyX2Rvd25sb2FkX3Rlc3RfZGF0YSIsCiAgICAgIi8vdGhpcmRfcGFydHkvaWN1OmljdWRhdGEiLAogICBdCi0KLSAgaWYgKGdsX3R5cGUgIT0gIm5vbmUiKSB7Ci0gICAgcHVibGljX2RlcHMgKz0gWyAiLy9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzIiBdCi0gIH0KLQotICBjb25maWdzICs9IFsKLSAgICAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6ZXhjZXB0aW9ucyIsCi0gICAgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iLAotICBdCi0gIGNvbmZpZ3MgLT0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6bm9fZXhjZXB0aW9ucyIgXQogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvYWNjZXNzaWJpbGl0eV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvYWNjZXNzaWJpbGl0eV90ZXN0LmNjCmluZGV4IDAxZDZhMjYuLjY3NzQ5ZTcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL2FjY2Vzc2liaWxpdHlfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9hY2Nlc3NpYmlsaXR5X3Rlc3QuY2MKQEAgLTQ4LDcgKzQ4LDYgQEAKICAgRVhQRUNUX0ZBTFNFKFNiQWNjZXNzaWJpbGl0eUdldERpc3BsYXlTZXR0aW5ncyhOVUxMKSk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiBURVNUKFNiQWNjZXNzaWJpbGl0eVRlc3QsIENhbGxHZXRDYXB0aW9uU2V0dGluZ3NXaXRoSW52YWxpZEFyZ3VtZW50KSB7CiAgIC8vIHxzZXR0aW5nc3wgc2hvdWxkIGJlIHplcm8taW5pdGlhbGl6ZWQuCiAgIGNvbnN0IGludCBrSW52YWxpZFZhbHVlID0gMHhGRTsKQEAgLTg5LDM2ICs4OCwyOSBAQAogICAgICAgICAgICAgICBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbkNoYXJhY3RlckVkZ2VTdHlsZURyb3BTaGFkb3cpOwogICB9CiAKLSAgaWYgKHNldHRpbmdzLmZvbnRfY29sb3Jfc3RhdGUgIT0KLSAgICAgIGtTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZCkgeworICBpZiAoc2V0dGluZ3MuZm9udF9jb2xvcl9zdGF0ZSAhPSBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQpIHsKICAgICBFWFBFQ1RfR0Uoc2V0dGluZ3MuZm9udF9jb2xvciwga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25Db2xvckJsdWUpOwogICAgIEVYUEVDVF9MRShzZXR0aW5ncy5mb250X2NvbG9yLCBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbkNvbG9yWWVsbG93KTsKICAgfQogCi0gIGlmIChzZXR0aW5ncy5mb250X2ZhbWlseV9zdGF0ZSAhPQotICAgICAga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7Ci0gICAgRVhQRUNUX0dFKHNldHRpbmdzLmZvbnRfZmFtaWx5LAotICAgICAgICAgICAgICBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbkZvbnRGYW1pbHlDYXN1YWwpOworICBpZiAoc2V0dGluZ3MuZm9udF9mYW1pbHlfc3RhdGUgIT0ga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CisgICAgRVhQRUNUX0dFKHNldHRpbmdzLmZvbnRfZmFtaWx5LCBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbkZvbnRGYW1pbHlDYXN1YWwpOwogICAgIEVYUEVDVF9MRShzZXR0aW5ncy5mb250X2ZhbWlseSwKICAgICAgICAgICAgICAga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25Gb250RmFtaWx5U21hbGxDYXBpdGFscyk7CiAgIH0KIAotICBpZiAoc2V0dGluZ3MuZm9udF9vcGFjaXR5X3N0YXRlICE9Ci0gICAgICBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvblN0YXRlVW5zdXBwb3J0ZWQpIHsKLSAgICBFWFBFQ1RfR0Uoc2V0dGluZ3MuZm9udF9vcGFjaXR5LAotICAgICAgICAgICAgICBrU2JBY2Nlc3NpYmlsaXR5Q2FwdGlvbk9wYWNpdHlQZXJjZW50YWdlMCk7CisgIGlmIChzZXR0aW5ncy5mb250X29wYWNpdHlfc3RhdGUgIT0ga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CisgICAgRVhQRUNUX0dFKHNldHRpbmdzLmZvbnRfb3BhY2l0eSwga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25PcGFjaXR5UGVyY2VudGFnZTApOwogICAgIEVYUEVDVF9MRShzZXR0aW5ncy5mb250X29wYWNpdHksCiAgICAgICAgICAgICAgIGtTYkFjY2Vzc2liaWxpdHlDYXB0aW9uT3BhY2l0eVBlcmNlbnRhZ2UxMDApOwogICB9CiAKLSAgaWYgKHNldHRpbmdzLmZvbnRfc2l6ZV9zdGF0ZSAhPQotICAgICAga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CisgIGlmIChzZXR0aW5ncy5mb250X3NpemVfc3RhdGUgIT0ga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CiAgICAgRVhQRUNUX0dFKHNldHRpbmdzLmZvbnRfc2l6ZSwga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25Gb250U2l6ZVBlcmNlbnRhZ2UyNSk7CiAgICAgRVhQRUNUX0xFKHNldHRpbmdzLmZvbnRfc2l6ZSwga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25Gb250U2l6ZVBlcmNlbnRhZ2UzMDApOwogICB9CiAKLSAgaWYgKHNldHRpbmdzLndpbmRvd19jb2xvcl9zdGF0ZSAhPQotICAgICAga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CisgIGlmIChzZXR0aW5ncy53aW5kb3dfY29sb3Jfc3RhdGUgIT0ga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25TdGF0ZVVuc3VwcG9ydGVkKSB7CiAgICAgRVhQRUNUX0dFKHNldHRpbmdzLndpbmRvd19jb2xvciwga1NiQWNjZXNzaWJpbGl0eUNhcHRpb25Db2xvckJsdWUpOwogICAgIEVYUEVDVF9MRShzZXR0aW5ncy53aW5kb3dfY29sb3IsIGtTYkFjY2Vzc2liaWxpdHlDYXB0aW9uQ29sb3JZZWxsb3cpOwogICB9CkBAIC0xNTYsNyArMTQ4LDYgQEAKICAgICBFWFBFQ1RfRVEoc2V0dGluZ3MuaXNfZW5hYmxlZCwgc2V0dGluZ3MzLmlzX2VuYWJsZWQpOwogICB9CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIAogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvYXVkaW9fc2lua19jcmVhdGVfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL2F1ZGlvX3NpbmtfY3JlYXRlX3Rlc3QuY2MKaW5kZXggOWY2MTc0NC4uZWVlYzVlZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvYXVkaW9fc2lua19jcmVhdGVfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2NyZWF0ZV90ZXN0LmNjCkBAIC0zNSwxNCArMzUsNyBAQAogICAqaXNfZW9zX3JlYWNoZWQgPSBmYWxzZTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIHZvaWQgQ29uc3VtZUZyYW1lc0Z1bmNTdHViKGludCBmcmFtZXNfY29uc3VtZWQsIHZvaWQqIGNvbnRleHQpIHt9Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLXZvaWQgQ29uc3VtZUZyYW1lc0Z1bmNTdHViKGludCBmcmFtZXNfY29uc3VtZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWUgZnJhbWVzX2NvbnN1bWVkX2F0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCkge30KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgIVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQotCiB9ICAvLyBuYW1lc3BhY2UKIAogVEVTVChTYkF1ZGlvU2lua0NyZWF0ZVRlc3QsIFN1bm55RGF5KSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2hlbHBlcnMuY2MgYi9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2hlbHBlcnMuY2MKaW5kZXggNTQwMTkxMy4uNzEyNzQyZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvYXVkaW9fc2lua19oZWxwZXJzLmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL2F1ZGlvX3NpbmtfaGVscGVycy5jYwpAQCAtMjA3LDIxICsyMDcsMTEgQEAKICAgY29uZGl0aW9uX3ZhcmlhYmxlXy5TaWduYWwoKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIHZvaWQgQXVkaW9TaW5rVGVzdEVudmlyb25tZW50OjpPbkNvbnN1bWVGcmFtZXMoaW50IGZyYW1lc19jb25zdW1lZCkgewogICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKICAgZnJhbWVzX2NvbnN1bWVkXyArPSBmcmFtZXNfY29uc3VtZWQ7CiAgIGNvbmRpdGlvbl92YXJpYWJsZV8uU2lnbmFsKCk7CiB9Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQotdm9pZCBBdWRpb1NpbmtUZXN0RW52aXJvbm1lbnQ6Ok9uQ29uc3VtZUZyYW1lcyhpbnQgZnJhbWVzX2NvbnN1bWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWUgZnJhbWVzX2NvbnN1bWVkX2F0KSB7Ci0gIFNCX0RDSEVDSyhmcmFtZXNfY29uc3VtZWRfYXQgPD0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCkpOwotICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKLSAgZnJhbWVzX2NvbnN1bWVkXyArPSBmcmFtZXNfY29uc3VtZWQ7Ci0gIGNvbmRpdGlvbl92YXJpYWJsZV8uU2lnbmFsKCk7Ci19Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIAogLy8gc3RhdGljCiB2b2lkIEF1ZGlvU2lua1Rlc3RFbnZpcm9ubWVudDo6VXBkYXRlU291cmNlU3RhdHVzRnVuYyhpbnQqIGZyYW1lc19pbl9idWZmZXIsCkBAIC0yMzUsNyArMjI1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BsYXlpbmcsIGlzX2Vvc19yZWFjaGVkKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIC8vIHN0YXRpYwogdm9pZCBBdWRpb1NpbmtUZXN0RW52aXJvbm1lbnQ6OkNvbnN1bWVGcmFtZXNGdW5jKGludCBmcmFtZXNfY29uc3VtZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCkgewpAQCAtMjQzLDE3ICsyMzIsNiBAQAogICAgICAgcmVpbnRlcnByZXRfY2FzdDxBdWRpb1NpbmtUZXN0RW52aXJvbm1lbnQqPihjb250ZXh0KTsKICAgZW52aXJvbm1lbnQtPk9uQ29uc3VtZUZyYW1lcyhmcmFtZXNfY29uc3VtZWQpOwogfQotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCAhU0JfSEFTKEFTWU5DX0FVRElPX0ZSQU1FU19SRVBPUlRJTkcpCi0vLyBzdGF0aWMKLXZvaWQgQXVkaW9TaW5rVGVzdEVudmlyb25tZW50OjpDb25zdW1lRnJhbWVzRnVuYyhpbnQgZnJhbWVzX2NvbnN1bWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVGltZSBmcmFtZXNfY29uc3VtZWRfYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCkgewotICBBdWRpb1NpbmtUZXN0RW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9TaW5rVGVzdEVudmlyb25tZW50Kj4oY29udGV4dCk7Ci0gIGZyYW1lc19jb25zdW1lZF9hdCA9IFNiVGltZUdldE1vbm90b25pY05vdygpOwotICBlbnZpcm9ubWVudC0+T25Db25zdW1lRnJhbWVzKGZyYW1lc19jb25zdW1lZCwgZnJhbWVzX2NvbnN1bWVkX2F0KTsKLX0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgIVNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQogCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvYXVkaW9fc2lua19oZWxwZXJzLmggYi9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2hlbHBlcnMuaAppbmRleCA2NDRkMjFhLi4yNGM1ZGEwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2hlbHBlcnMuaAorKysgYi9zdGFyYm9hcmQvbnBsYi9hdWRpb19zaW5rX2hlbHBlcnMuaApAQCAtOTUsMjUgKzk1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBvZmZzZXRfaW5fZnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIGlzX3BsYXlpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfZW9zX3JlYWNoZWQpOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKICAgdm9pZCBPbkNvbnN1bWVGcmFtZXMoaW50IGZyYW1lc19jb25zdW1lZCk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLSAgdm9pZCBPbkNvbnN1bWVGcmFtZXMoaW50IGZyYW1lc19jb25zdW1lZCwgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLQogICBzdGF0aWMgdm9pZCBVcGRhdGVTb3VyY2VTdGF0dXNGdW5jKGludCogZnJhbWVzX2luX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG9mZnNldF9pbl9mcmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogaXNfcGxheWluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBpc19lb3NfcmVhY2hlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0KTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKICAgc3RhdGljIHZvaWQgQ29uc3VtZUZyYW1lc0Z1bmMoaW50IGZyYW1lc19jb25zdW1lZCwgdm9pZCogY29udGV4dCk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLSAgc3RhdGljIHZvaWQgQ29uc3VtZUZyYW1lc0Z1bmMoaW50IGZyYW1lc19jb25zdW1lZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8ICFTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKIAogICBTYkF1ZGlvU2luayBzaW5rXzsKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvY29tcGlsZXJfY29tcGxpYW5jZS9CVUlMRC5nbiBiL3N0YXJib2FyZC9ucGxiL2NvbXBpbGVyX2NvbXBsaWFuY2UvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmMWRkMQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9ucGxiL2NvbXBpbGVyX2NvbXBsaWFuY2UvQlVJTEQuZ24KQEAgLTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0YXRpY19saWJyYXJ5KCJjcHAxNF9zdXBwb3J0ZWQiKSB7CisgIHNvdXJjZXMgPSBbCisgICAgImNwcDE0X2NvbnN0ZXhwci5jYyIsCisgICAgImNwcDE0X2luaXRpYWxpemF0aW9uLmNjIiwKKyAgXQorICBjZmxhZ3NfY2MgPSBbICItc3RkPWMrKzE0IiBdCisgIGRlcHMgPSBbICIvL3N0YXJib2FyZCIgXQorfQorCitpZiAoc2JfZW5hYmxlX2NwcDE3X2F1ZGl0KSB7CisgIHN0YXRpY19saWJyYXJ5KCJjcHAxN19zdXBwb3J0ZWQiKSB7CisgICAgc291cmNlcyA9IFsgImNwcDE3X3N1cHBvcnQuY2MiIF0KKyAgICBkZXBzID0gWworICAgICAgIjpjcHAxN19zdXBwb3J0ZWRfY29uZmlnX3NoaW0iLAorICAgICAgIi8vc3RhcmJvYXJkIiwKKyAgICBdCisgIH0KKworICAjIFdlIGRvIHRoaXMgdG8gZW5zdXJlIHRoZSAtc3RkPWMrKzE3IGZsYWcgaXMgYWRkZWQgYWZ0ZXIgYW55IG90aGVyIC1zdGQgZmxhZworICAjIHNvIGl0IG92ZXJyaWRlcyBhbnkgb3RoZXIgb25lLgorICBncm91cCgiY3BwMTdfc3VwcG9ydGVkX2NvbmZpZ19zaGltIikgeworICAgIHB1YmxpY19jb25maWdzID0gWyAiOmNwcDE3X3N1cHBvcnRlZF9jb25maWciIF0KKyAgfQorCisgIGNvbmZpZygiY3BwMTdfc3VwcG9ydGVkX2NvbmZpZyIpIHsKKyAgICBjZmxhZ3NfY2MgPSBbICItc3RkPWMrKzE3IiBdCisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2NvbXBpbGVyX2NvbXBsaWFuY2UvY29tcGlsZXJfY29tcGxpYW5jZS5neXAgYi9zdGFyYm9hcmQvbnBsYi9jb21waWxlcl9jb21wbGlhbmNlL2NvbXBpbGVyX2NvbXBsaWFuY2UuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGNlYTI1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL2NvbXBpbGVyX2NvbXBsaWFuY2UvY29tcGlsZXJfY29tcGxpYW5jZS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3BwMTRfc3VwcG9ydGVkJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICctc3RkPWMrKzE0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NwcDE0X2NvbnN0ZXhwci5jYycsCi0gICAgICAgICdjcHAxNF9pbml0aWFsaXphdGlvbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NwcDE3X3N1cHBvcnRlZCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgICAnLXN0ZD1jKysxNycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcHAxN19zdXBwb3J0LmNjJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2NwdV9mZWF0dXJlc19nZXRfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL2NwdV9mZWF0dXJlc19nZXRfdGVzdC5jYwppbmRleCA4YjM4N2UzLi40NWJmMjExIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9jcHVfZmVhdHVyZXNfZ2V0X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvY3B1X2ZlYXR1cmVzX2dldF90ZXN0LmNjCkBAIC02OCw5ICs2OCw3IEBACiAgIEVYUEVDVF9FUShmYWxzZSwgZmVhdHVyZXMueDg2Lmhhc19zc2UyKTsKICAgRVhQRUNUX0VRKGZhbHNlLCBmZWF0dXJlcy54ODYuaGFzX3RzYyk7CiAgIEVYUEVDVF9FUShmYWxzZSwgZmVhdHVyZXMueDg2Lmhhc19zc2UzKTsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBFWFBFQ1RfRVEoZmFsc2UsIGZlYXR1cmVzLng4Ni5oYXNfcGNsbXVscWRxKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgRVhQRUNUX0VRKGZhbHNlLCBmZWF0dXJlcy54ODYuaGFzX3Nzc2UzKTsKICAgRVhQRUNUX0VRKGZhbHNlLCBmZWF0dXJlcy54ODYuaGFzX3NzZTQxKTsKICAgRVhQRUNUX0VRKGZhbHNlLCBmZWF0dXJlcy54ODYuaGFzX3NzZTQyKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9jcmVhdGVfdHJhbnNmb3JtZXJfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9jcmVhdGVfdHJhbnNmb3JtZXJfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJmNTc5Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oIgotCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBzdGFyYm9hcmQgewotbmFtZXNwYWNlIG5wbGIgewotbmFtZXNwYWNlIHsKLQotY29uc3QgaW50IGtCbG9ja1NpemVCaXRzID0gMTI4OwotY29uc3QgaW50IGtCbG9ja1NpemVCeXRlcyA9IGtCbG9ja1NpemVCaXRzIC8gODsKLQotVEVTVChTYkNyeXB0b2dyYXBoeUNyZWF0ZVRyYW5zZm9ybWVyLCBTdW5ueURheSkgewotICBjaGFyIGluaXRpYWxpemF0aW9uX3ZlY3RvcltrQmxvY2tTaXplQnl0ZXNdID0gezB9OwotICBjaGFyIGtleVtrQmxvY2tTaXplQnl0ZXNdID0gezB9OwotCi0gIC8vIFRyeSB0byBjcmVhdGUgYSB0cmFuc2Zvcm1lciBmb3IgdGhlIG1vc3QgbGlrZWx5IGFsZ29yaXRobSB0byBiZSBzdXBwb3J0ZWQ6Ci0gIC8vIEFFUy0xMjgtQ0JDCi0gIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBTYkNyeXB0b2dyYXBoeUNyZWF0ZVRyYW5zZm9ybWVyKAotICAgICAga1NiQ3J5cHRvZ3JhcGh5QWxnb3JpdGhtQWVzLCBrQmxvY2tTaXplQml0cywKLSAgICAgIGtTYkNyeXB0b2dyYXBoeURpcmVjdGlvbkRlY29kZSwga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ2JjLAotICAgICAgaW5pdGlhbGl6YXRpb25fdmVjdG9yLCBrQmxvY2tTaXplQnl0ZXMsIGtleSwga0Jsb2NrU2l6ZUJ5dGVzKTsKLQotICBpZiAoIVNiQ3J5cHRvZ3JhcGh5SXNUcmFuc2Zvcm1lclZhbGlkKHRyYW5zZm9ybWVyKSkgewotICAgIC8vIFRlc3Qgb3ZlciBpZiB0aGVyZSdzIG5vIGltcGxlbWVudGF0aW9uLgotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFRPRE86IFZhbGlkYXRlIGltcGxlbWVudGF0aW9uLgotICBTYkNyeXB0b2dyYXBoeURlc3Ryb3lUcmFuc2Zvcm1lcih0cmFuc2Zvcm1lcik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotfSAgLy8gbmFtZXNwYWNlIG5wbGIKLX0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfaGVscGVycy5jYyBiL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9oZWxwZXJzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGM4YTM4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9oZWxwZXJzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLy8gTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL25wbGIvY3J5cHRvZ3JhcGh5X2hlbHBlcnMuaCIKLQotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBzdGFyYm9hcmQgewotbmFtZXNwYWNlIG5wbGIgewotCi1uYW1lc3BhY2UgewotaW50IEZyb21IZXgodWludDhfdCogb3V0LCBjaGFyIGluKSB7Ci0gIGlmIChpbiA+PSAnMCcgJiYgaW4gPD0gJzknKSB7Ci0gICAgKm91dCA9IGluIC0gJzAnOwotICAgIHJldHVybiAxOwotICB9Ci0gIGlmIChpbiA+PSAnYScgJiYgaW4gPD0gJ2YnKSB7Ci0gICAgKm91dCA9IGluIC0gJ2EnICsgMTA7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAgaWYgKGluID49ICdBJyAmJiBpbiA8PSAnRicpIHsKLSAgICAqb3V0ID0gaW4gLSAnQScgKyAxMDsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIHJldHVybiAwOwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgRGVjb2RlSGV4KHNjb3BlZF9hcnJheTx1aW50OF90Piogb3V0LAotICAgICAgICAgICAgICAgaW50KiBvdXRfbGVuLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW4sCi0gICAgICAgICAgICAgICBpbnQgdGVzdF9udW0sCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbikgewotICBpZiAoaW4gPT0gTlVMTCkgewotICAgIG91dC0+cmVzZXQoKTsKLSAgICAqb3V0X2xlbiA9IDA7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc2l6ZV90IGxlbiA9IHN0cmxlbihpbik7Ci0gIGlmIChsZW4gJiAxKSB7Ci0gICAgQUREX0ZBSUxVUkUoKSA8PCBkZXNjcmlwdGlvbiA8PCAiOiBPZGQgbGVuZ3RoLiI7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgc2NvcGVkX2FycmF5PHVpbnQ4X3Q+IGJ1ZihuZXcgdWludDhfdFtsZW4gLyAyXSk7Ci0gIGlmICghYnVmKSB7Ci0gICAgQUREX0ZBSUxVUkUoKSA8PCBkZXNjcmlwdGlvbiA8PCAiOiBNZW1vcnkgZmFpbC4iOwotICAgIHJldHVybjsKLSAgfQotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKLSAgICB1aW50OF90IHYsIHYyOwotICAgIGJvb2wgcmVzdWx0ID0gRnJvbUhleCgmdiwgaW5baV0pICYmIEZyb21IZXgoJnYyLCBpbltpICsgMV0pOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICBBRERfRkFJTFVSRSgpIDw8IGRlc2NyaXB0aW9uIDw8ICI6IEludmFsaWQgY2hhcmFjdGVyIGF0ICIgPDwgaSA8PCAiLiI7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICBidWZbaSAvIDJdID0gKHYgPDwgNCkgfCB2MjsKLSAgfQotCi0gICpvdXQgPSBidWYuUGFzcygpOwotICAqb3V0X2xlbiA9IHN0YXRpY19jYXN0PGludD4obGVuIC8gMik7Ci19Ci0KLXN0ZDo6c3RyaW5nIEhleER1bXAoY29uc3Qgdm9pZCogaW4sIGludCBsZW4pIHsKLSAgY29uc3QgdWludDhfdCogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluKTsKLQotICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICBjaGFyIGhleFszXSA9IHswfTsKLSAgICBTYlN0cmluZ0Zvcm1hdEYoaGV4LCAzLCAiJTAyeCIsIGRhdGFbaV0pOwotICAgIHJlc3VsdCArPSBoZXg7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi19ICAvLyBuYW1lc3BhY2UgbnBsYgotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9oZWxwZXJzLmggYi9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfaGVscGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWI5M2M3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9oZWxwZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0gKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotICoKLSAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSAqICAgIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0gKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLS8vIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9OUExCX0NSWVBUT0dSQVBIWV9IRUxQRVJTX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9OUExCX0NSWVBUT0dSQVBIWV9IRUxQRVJTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgotI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2Ugc3RhcmJvYXJkIHsKLW5hbWVzcGFjZSBucGxiIHsKLQotdm9pZCBEZWNvZGVIZXgoc2NvcGVkX2FycmF5PHVpbnQ4X3Q+KiBvdXQsCi0gICAgICAgICAgICAgICBpbnQqIG91dF9sZW4sCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbiwKLSAgICAgICAgICAgICAgIGludCB0ZXN0X251bSwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKTsKLXN0ZDo6c3RyaW5nIEhleER1bXAoY29uc3Qgdm9pZCogaW4sIGludCBsZW4pOwotCi19ICAvLyBuYW1lc3BhY2UgbnBsYgotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9OUExCX0NSWVBUT0dSQVBIWV9IRUxQRVJTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtX2djbV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybV9nY21fdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1OGVjYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtX2djbV90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDUxICswLDAgQEAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLy8gTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIFRoaXMgdGVzdCBpcyBhZGFwdGVkIGZyb20gQm9yaW5nU1NMJ3MgY3J5cHRvL2ZpcHNtb2R1bGUvbW9kZXMvZ2NtX3Rlc3QuY2MKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAidGVzdGluZy9nbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLXVzaW5nIDo6dGVzdGluZzo6Tm90TnVsbDsKLQotbmFtZXNwYWNlIHN0YXJib2FyZCB7Ci1uYW1lc3BhY2UgbnBsYiB7Ci1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQga0Jsb2NrU2l6ZUJpdHMgPSAxMjg7Ci1jb25zdCBpbnQga0Jsb2NrU2l6ZUJ5dGVzID0ga0Jsb2NrU2l6ZUJpdHMgLyA4OwotCi1zdHJ1Y3QgdGVzdF9jYXNlIHsKLSAgY29uc3QgY2hhciAqa2V5OwotICBjb25zdCBjaGFyICpwbGFpbnRleHQ7Ci0gIGNvbnN0IGNoYXIgKmFkZGl0aW9uYWxfZGF0YTsKLSAgY29uc3QgY2hhciAqbm9uY2U7Ci0gIGNvbnN0IGNoYXIgKmNpcGhlcnRleHQ7Ci0gIGNvbnN0IGNoYXIgKnRhZzsKLX07Ci0KLWNvbnN0IHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0gewotICB7Ci0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgTlVMTCwKLSAgICAiNThlMmZjY2VmYTdlMzA2MTM2N2YxZDU3YTRlNzQ1NWEiLAotICB9LAotICB7Ci0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgIE5VTEwsCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgIjAzODhkYWNlNjBiNmEzOTJmMzI4YzJiOTcxYjJmZTc4IiwKLSAgICAiYWI2ZTQ3ZDQyY2VjMTNiZGY1M2E2N2IyMTI1N2JkZGYiLAotICB9LAotICB7Ci0gICAgImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSIsCi0gICAgTlVMTCwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IiwKLSAgICAiNDI4MzFlYzIyMTc3NzQyNDRiNzIyMWI3ODRkMGQ0OWNlM2FhMjEyZjJjMDJhNGUwMzVjMTdlMjMyOWFjYTEyZTIxZDUxNGIyNTQiCi0gICAgIjY2OTMxYzdkOGY2YTVhYWM4NGFhMDUxYmEzMGIzOTZhMGFhYzk3M2Q1OGUwOTE0NzNmNTk4NSIsCi0gICAgIjRkNWMyYWYzMjdjZDY0YTYyY2YzNWFiZDJiYTZmYWI0IiwKLSAgfSwKLSAgewotICAgICJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCIsCi0gICAgImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1IgotICAgICI2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IiwKLSAgICAiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiIsCi0gICAgImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCIsCi0gICAgIjQyODMxZWMyMjE3Nzc0MjQ0YjcyMjFiNzg0ZDBkNDljZTNhYTIxMmYyYzAyYTRlMDM1YzE3ZTIzMjlhY2ExMmUyMWQ1MTRiMjU0IgotICAgICI2NjkzMWM3ZDhmNmE1YWFjODRhYTA1MWJhMzBiMzk2YTBhYWM5NzNkNThlMDkxIiwKLSAgICAiNWJjOTRmYmMzMjIxYTVkYjk0ZmFlOTVhZTcxMjFhNDciLAotICB9LAotICB7Ci0gICAgImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZCIsCi0gICAgIjYxMzUzYjRjMjgwNjkzNGE3NzdmZjUxZmEyMmE0NzU1Njk5YjJhNzE0ZmNkYzZmODM3NjZlNWY5N2I2Yzc0MjM3MzgwNjkwMGU0IgotICAgICI5ZjI0YjIyYjA5NzU0NGQ0ODk2YjQyNDk4OWI1ZTFlYmFjMGYwN2MyM2Y0NTk4IiwKLSAgICAiMzYxMmQyZTc5ZTNiMDc4NTU2MWJlMTRhYWNhMmZjY2IiLAotICB9LAotICB7Ci0gICAgImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTYiCi0gICAgIjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiLAotICAgICI4Y2UyNDk5ODYyNTYxNWI2MDNhMDMzYWNhMTNmYjg5NGJlOTExMmE1YzNhMjExYThiYTI2MmEzY2NhN2UyY2E3MDFlNGE5YTRmYiIKLSAgICAiYTQzYzkwY2NkY2IyODFkNDhjN2M2ZmQ2Mjg3NWQyYWNhNDE3MDM0YzM0YWVlNSIsCi0gICAgIjYxOWNjNWFlZmZmZTBiZmE0NjJhZjQzYzE2OTlkMDUwIiwKLSAgfSwKLSAgewotICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICBOVUxMLAotICAgICJjZDMzYjI4YWM3NzNmNzRiYTAwZWQxZjMxMjU3MjQzNSIsCi0gIH0sCi0gIHsKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgIE5VTEwsCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgIjk4ZTcyNDdjMDdmMGZlNDExYzI2N2U0Mzg0YjBmNjAwIiwKLSAgICAiMmZmNThkODAwMzM5MjdhYjhlZjRkNDU4NzUxNGYwZmIiLAotICB9LAotICB7Ci0gICAgImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyIsCi0gICAgImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1IgotICAgICI2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5MWFhZmQyNTUiLAotICAgIE5VTEwsCi0gICAgImNhZmViYWJlZmFjZWRiYWRkZWNhZjg4OCIsCi0gICAgIjM5ODBjYTBiM2MwMGU4NDFlYjA2ZmFjNDg3MmEyNzU3ODU5ZTFjZWFhNmVmZDk4NDYyODU5M2I0MGNhMWUxOWM3ZDc3M2QwMGMxIgotICAgICI0NGM1MjVhYzYxOWQxOGM4NGEzZjQ3MThlMjQ0OGIyZmUzMjRkOWNjZGEyNzEwYWNhZGUyNTYiLAotICAgICI5OTI0YTdjODU4NzMzNmJmYjExODAyNGRiODY3NGExNCIsCi0gIH0sCi0gIHsKLSAgICAiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IiwKLSAgICAiMzk4MGNhMGIzYzAwZTg0MWViMDZmYWM0ODcyYTI3NTc4NTllMWNlYWE2ZWZkOTg0NjI4NTkzYjQwY2ExZTE5YzdkNzczZDAwYzEiCi0gICAgIjQ0YzUyNWFjNjE5ZDE4Yzg0YTNmNDcxOGUyNDQ4YjJmZTMyNGQ5Y2NkYTI3MTAiLAotICAgICIyNTE5NDk4ZTgwZjE0NzhmMzdiYTU1YmQ2ZDI3NjE4YyIsCi0gIH0sCi0gIHsKLSAgICAiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjIiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZCIsCi0gICAgIjBmMTBmNTk5YWUxNGExNTRlZDI0YjM2ZTI1MzI0ZGI4YzU2NjYzMmVmMmJiYjM0ZjgzNDcyODBmYzQ1MDcwNTdmZGRjMjlkZjlhIgotICAgICI0NzFmNzVjNjY1NDFkNGQ0ZGFkMWM5ZTkzYTE5YTU4ZThiNDczZmEwZjA2MmY3IiwKLSAgICAiNjVkY2M1N2ZjZjYyM2EyNDA5NGZjY2E0MGQzNTMzZjgiLAotICB9LAotICB7Ci0gICAgImZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4ZmVmZmU5OTI4NjY1NzMxYyIsCi0gICAgImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1IgotICAgICI2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IiwKLSAgICAiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiIsCi0gICAgImNhZmViYWJlZmFjZWRiYWQiLAotICAgICIwZjEwZjU5OWFlMTRhMTU0ZWQyNGIzNmUyNTMyNGRiOGM1NjY2MzJlZjJiYmIzNGY4MzQ3MjgwZmM0NTA3MDU3ZmRkYzI5ZGY5YSIKLSAgICAiNDcxZjc1YzY2NTQxZDRkNGRhZDFjOWU5M2ExOWE1OGU4YjQ3M2ZhMGYwNjJmNyIsCi0gICAgIjY1ZGNjNTdmY2Y2MjNhMjQwOTRmY2NhNDBkMzUzM2Y4IiwKLSAgfSwKLSAgewotICAgICJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWMiLAotICAgICJkOTMxMzIyNWY4ODQwNmU1YTU1OTA5YzVhZmY1MjY5YTg2YTdhOTUzMTUzNGY3ZGEyZTRjMzAzZDhhMzE4YTcyMWMzYzBjOTU5NSIKLSAgICAiNjgwOTUzMmZjZjBlMjQ0OWE2YjUyNWIxNmFlZGY1YWEwZGU2NTdiYTYzN2IzOSIsCi0gICAgImZlZWRmYWNlZGVhZGJlZWZmZWVkZmFjZWRlYWRiZWVmYWJhZGRhZDIiLAotICAgICI5MzEzMjI1ZGY4ODQwNmU1NTU5MDljNWFmZjUyNjlhYTZhN2E5NTM4NTM0ZjdkYTFlNGMzMDNkMmEzMThhNzI4YzNjMGM5NTE1NiIKLSAgICAiODA5NTM5ZmNmMGUyNDI5YTZiNTI1NDE2YWVkYmY1YTBkZTZhNTdhNjM3YjM5YiIsCi0gICAgImQyN2U4ODY4MWNlMzI0M2M0ODMwMTY1YThmZGNmOWZmMWRlOWExZDhlNmI0NDdlZjZlZjdiNzk4Mjg2NjZlNDU4MWU3OTAxMmFmIgotICAgICIzNGRkZDllMmYwMzc1ODliMjkyZGIzZTY3YzAzNjc0NWZhMjJlN2U5YjczNzNiIiwKLSAgICAiZGNmNTY2ZmYyOTFjMjViYmI4NTY4ZmMzZDM3NmE2ZDkiLAotICB9LAotICB7Ci0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICBOVUxMLAotICAgICI1MzBmOGFmYmM3NDUzNmI5YTk2M2I0ZjFjNGNiNzM4YiIsCi0gIH0sCi0gIHsKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICBOVUxMLAotICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgICJjZWE3NDAzZDRkNjA2YjZlMDc0ZWM1ZDNiYWYzOWQxOCIsCi0gICAgImQwZDFjOGE3OTk5OTZiZjAyNjViOThiNWQ0OGFiOTE5IiwKLSAgfSwKLSAgewotICAgICJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NSIsCi0gICAgTlVMTCwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IiwKLSAgICAiNTIyZGMxZjA5OTU2N2QwN2Y0N2YzN2EzMmE4NDQyN2Q2NDNhOGNkY2JmZTVjMGM5NzU5OGEyYmQyNTU1ZDFhYThjYjA4ZTQ4NTkiCi0gICAgIjBkYmIzZGE3YjA4YjEwNTY4Mjg4MzhjNWY2MWU2MzkzYmE3YTBhYmNjOWY2NjI4OTgwMTVhZCIsCi0gICAgImIwOTRkYWM1ZDkzNDcxYmRlYzFhNTAyMjcwZTNjYzZjIiwKLSAgfSwKLSAgewotICAgICJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiY2FmZWJhYmVmYWNlZGJhZGRlY2FmODg4IiwKLSAgICAiNTIyZGMxZjA5OTU2N2QwN2Y0N2YzN2EzMmE4NDQyN2Q2NDNhOGNkY2JmZTVjMGM5NzU5OGEyYmQyNTU1ZDFhYThjYjA4ZTQ4NTkiCi0gICAgIjBkYmIzZGE3YjA4YjEwNTY4Mjg4MzhjNWY2MWU2MzkzYmE3YTBhYmNjOWY2NjIiLAotICAgICI3NmZjNmVjZTBmNGUxNzY4Y2RkZjg4NTNiYjJkNTUxYiIsCi0gIH0sCi0gIHsKLSAgICAiZmVmZmU5OTI4NjY1NzMxYzZkNmE4Zjk0NjczMDgzMDhmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOCIsCi0gICAgImQ5MzEzMjI1Zjg4NDA2ZTVhNTU5MDljNWFmZjUyNjlhODZhN2E5NTMxNTM0ZjdkYTJlNGMzMDNkOGEzMThhNzIxYzNjMGM5NTk1IgotICAgICI2ODA5NTMyZmNmMGUyNDQ5YTZiNTI1YjE2YWVkZjVhYTBkZTY1N2JhNjM3YjM5IiwKLSAgICAiZmVlZGZhY2VkZWFkYmVlZmZlZWRmYWNlZGVhZGJlZWZhYmFkZGFkMiIsCi0gICAgImNhZmViYWJlZmFjZWRiYWQiLAotICAgICJjMzc2MmRmMWNhNzg3ZDMyYWU0N2MxM2JmMTk4NDRjYmFmMWFlMTRkMGI5NzZhZmFjNTJmZjdkNzliYmE5ZGUwZmViNTgyZDMzOSIKLSAgICAiMzRhNGYwOTU0Y2MyMzYzYmM3M2Y3ODYyYWM0MzBlNjRhYmU0OTlmNDdjOWIxZiIsCi0gICAgIjNhMzM3ZGJmNDZhNzkyYzQ1ZTQ1NDkxM2ZlMmVhOGYyIiwKLSAgfSwKLSAgewotICAgICJmZWZmZTk5Mjg2NjU3MzFjNmQ2YThmOTQ2NzMwODMwOGZlZmZlOTkyODY2NTczMWM2ZDZhOGY5NDY3MzA4MzA4IiwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkiLAotICAgICJmZWVkZmFjZWRlYWRiZWVmZmVlZGZhY2VkZWFkYmVlZmFiYWRkYWQyIiwKLSAgICAiOTMxMzIyNWRmODg0MDZlNTU1OTA5YzVhZmY1MjY5YWE2YTdhOTUzODUzNGY3ZGExZTRjMzAzZDJhMzE4YTcyOGMzYzBjOTUxNTYiCi0gICAgIjgwOTUzOWZjZjBlMjQyOWE2YjUyNTQxNmFlZGJmNWEwZGU2YTU3YTYzN2IzOWIiLAotICAgICI1YThkZWYyZjBjOWU1M2YxZjc1ZDc4NTM2NTllMmEyMGVlYjJiMjJhYWZkZTY0MTlhMDU4YWI0ZjZmNzQ2YmY0MGZjMGMzYjc4MCIKLSAgICAiZjI0NDQ1MmRhM2ViZjFjNWQ4MmNkZWEyNDE4OTk3MjAwZWY4MmU0NGFlN2UzZiIsCi0gICAgImE0NGE4MjY2ZWUxYzhlYjBjOGI1ZDRjZjVhZTlmMTlhIiwKLSAgfSwKLSAgewotICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgTlVMTCwKLSAgICAiZDkzMTMyMjVmODg0MDZlNWE1NTkwOWM1YWZmNTI2OWE4NmE3YTk1MzE1MzRmN2RhMmU0YzMwM2Q4YTMxOGE3MjFjM2MwYzk1OTUiCi0gICAgIjY4MDk1MzJmY2YwZTI0NDlhNmI1MjViMTZhZWRmNWFhMGRlNjU3YmE2MzdiMzkxYWFmZDI1NTUyMmRjMWYwOTk1NjdkMDdmNDdmIgotICAgICIzN2EzMmE4NDQyN2Q2NDNhOGNkY2JmZTVjMGM5NzU5OGEyYmQyNTU1ZDFhYThjYjA4ZTQ4NTkwZGJiM2RhN2IwOGIxMDU2ODI4OCIKLSAgICAiMzhjNWY2MWU2MzkzYmE3YTBhYmNjOWY2NjI4OTgwMTVhZCIsCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCi0gICAgTlVMTCwKLSAgICAiNWZlYTc5M2EyZDZmOTc0ZDM3ZTY4ZTBjYjhmZjk0OTIiLAotICB9LAotICB7Ci0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgotICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCi0gICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAotICAgIE5VTEwsCi0gICAgLyogVGhpcyBub25jZSByZXN1bHRzIGluIDB4ZmZmIGluIGNvdW50ZXIgTFNCLiAqLwotICAgICJmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKLSAgICAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwKLSAgICAiNTZiMzM3M2NhOWVmNmU0YTJiNjRmZTFlOWExN2I2MTQyNWYxMGQ0N2E3NWE1ZmNlMTNlZmM2YmM3ODRhZjI0ZjQxNDFiZGQ0OGMiCi0gICAgImY3Yzc3MDg4N2FmZDU3M2NjYTU0MThhOWFlZmZjZDdjNWNlZGRmYzZhNzgzOTdiOWE4NWI0OTlkYTU1ODI1NzI2N2NhYWIyYWQwIgotICAgICJiMjNjYTQ3NmE1M2NiMTdmYjQxYzRiOGI0NzVjYjRmM2Y3MTY1MDk0YzIyOWM5ZThjNGRjMGEyYTVmZjE5MDNlNTAxNTExMjIxMyIKLSAgICAiNzZhMWNkYjgzNjRjNTA2MWEyMGNhZTc0YmM0YWNkNzZjZWIwYWJjOWZkMzIxN2VmOWY4YzkwYmU0MDJkZGY2ZDg2OTdmNGY4ODAiCi0gICAgImRmZjE1YmZiN2E2YjI4MjQxZWM4ZmUxODNjMmQ1OWUzZjlkZmZmNjUzYzcxMjZmMGFjYjllNjQyMTFmNDJiYWUxMmFmNDYyYjEwIgotICAgICI3MGJlZjFhYjVlMzYwNjg3MmNhMTBkZWUxNWIzMjQ5YjFhMWI5NThmMjMxMzRjNGJjY2I3ZDAzMjAwYmNlNDIwYTJmOGViNjZkYyIKLSAgICAiZjM2NDRkMTQyM2MxYjU2OTkwMDNjMTNlY2VmNGJmMzhhM2I2MGVlZGMzNDAzM2JhYzE5MDI3ODNkYzZkODllMmU3NzQxODhhNDMiCi0gICAgIjljN2ViY2MwNjcyZGJkYTRkZGNmYjI3OTQ2MTNiMGJlNDEzMTVlZjc3ODcwOGE3MGVlN2Q3NTE2NWMiLAotICAgICI4YjMwN2Y2YjMzMjg2ZDBhYjAyNmE5ZWQzZmUxZTg1ZiIsCi0gIH0sCi19OwotCi1jbGFzcyBHY20KLSAgICA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3RXaXRoUGFyYW08aW50PiB7Ci0gcHVibGljOgotICBpbnQgR2V0VGVzdENhc2UoKSB7IHJldHVybiBHZXRQYXJhbSgpOyB9Ci19OwotCi1URVNUX1AoR2NtLCBUZXN0Q2FzZSkgewotICBpbnQgdGVzdF9udW0gPSBHZXRUZXN0Q2FzZSgpOwotICBjb25zdCBzdHJ1Y3QgdGVzdF9jYXNlICp0ZXN0ID0gJnRlc3RfY2FzZXNbdGVzdF9udW1dOwotCi0gIGludCBrZXlfbGVuOwotICBzY29wZWRfYXJyYXk8dWludDhfdD4ga2V5OwotICBpbnQgcGxhaW50ZXh0X2xlbjsKLSAgc2NvcGVkX2FycmF5PHVpbnQ4X3Q+IHBsYWludGV4dDsKLSAgaW50IGFkZGl0aW9uYWxfZGF0YV9sZW47Ci0gIHNjb3BlZF9hcnJheTx1aW50OF90PiBhZGRpdGlvbmFsX2RhdGE7Ci0gIGludCBub25jZV9sZW47Ci0gIHNjb3BlZF9hcnJheTx1aW50OF90PiBub25jZTsKLSAgaW50IGNpcGhlcnRleHRfbGVuOwotICBzY29wZWRfYXJyYXk8dWludDhfdD4gY2lwaGVydGV4dDsKLSAgaW50IHRhZ19sZW47Ci0gIHNjb3BlZF9hcnJheTx1aW50OF90PiB0YWc7Ci0gIHNjb3BlZF9hcnJheTx1aW50OF90PiBvdXQ7Ci0KLSAgRGVjb2RlSGV4KCZrZXksICZrZXlfbGVuLCB0ZXN0LT5rZXksIHRlc3RfbnVtLCAia2V5Iik7Ci0gIERlY29kZUhleCgmcGxhaW50ZXh0LCAmcGxhaW50ZXh0X2xlbiwgdGVzdC0+cGxhaW50ZXh0LCB0ZXN0X251bSwKLSAgICAgICAgICAgICAicGxhaW50ZXh0Iik7Ci0gIERlY29kZUhleCgmYWRkaXRpb25hbF9kYXRhLCAmYWRkaXRpb25hbF9kYXRhX2xlbiwKLSAgICAgICAgICAgICB0ZXN0LT5hZGRpdGlvbmFsX2RhdGEsIHRlc3RfbnVtLCAiYWRkaXRpb25hbF9kYXRhIik7Ci0gIERlY29kZUhleCgmbm9uY2UsICZub25jZV9sZW4sIHRlc3QtPm5vbmNlLCB0ZXN0X251bSwgIm5vbmNlIik7Ci0gIERlY29kZUhleCgmY2lwaGVydGV4dCwgJmNpcGhlcnRleHRfbGVuLCB0ZXN0LT5jaXBoZXJ0ZXh0LCB0ZXN0X251bSwKLSAgICAgICAgICAgICAiY2lwaGVydGV4dCIpOwotICBEZWNvZGVIZXgoJnRhZywgJnRhZ19sZW4sIHRlc3QtPnRhZywgdGVzdF9udW0sICJ0YWciKTsKLQotICBpZiAocGxhaW50ZXh0X2xlbiAhPSBjaXBoZXJ0ZXh0X2xlbikgewotICAgIEZBSUwoKSA8PCAiUGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0IGhhdmUgZGlmZmVyaW5nIGxlbmd0aHMuIjsKLSAgfQotCi0gIGlmIChrZXlfbGVuICE9IDE2ICYmIGtleV9sZW4gIT0gMjQgJiYga2V5X2xlbiAhPSAzMikgewotICAgIEZBSUwoKSA8PCAiQmFkIGtleSBsZW5ndGguIjsKLSAgfQotCi0gIGlmICh0YWdfbGVuICE9IDE2KSB7Ci0gICAgRkFJTCgpIDw8ICJCYWQgdGFnIGxlbmd0aC4iOwotICB9Ci0KLSAgb3V0LnJlc2V0KG5ldyB1aW50OF90W3BsYWludGV4dF9sZW5dKTsKLSAgaWYgKHBsYWludGV4dF9sZW4gIT0gMCAmJiBvdXQgPT0gTlVMTCkgewotICAgIEZBSUwoKSA8PCAiT3V0IG9mIG1lbW9yeS4iOwotICB9Ci0KLSAgLy8gVGVzdCBlbmNyeXB0aW9uLgotCi0gIC8vIFRyeSB0byBjcmVhdGUgYSB0cmFuc2Zvcm1lciBmb3IgR0NNLgotICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIGVuY3J5cHRlciA9IFNiQ3J5cHRvZ3JhcGh5Q3JlYXRlVHJhbnNmb3JtZXIoCi0gICAgICBrU2JDcnlwdG9ncmFwaHlBbGdvcml0aG1BZXMsIGtCbG9ja1NpemVCaXRzLAotICAgICAga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRW5jb2RlLCBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVHY20sCi0gICAgICBOVUxMLCAwLCBrZXkuZ2V0KCksIGtleV9sZW4pOwotCi0gIGlmICghU2JDcnlwdG9ncmFwaHlJc1RyYW5zZm9ybWVyVmFsaWQoZW5jcnlwdGVyKSkgewotICAgIC8vIFRlc3Qgb3ZlciAoYnV0IG5vIGZhaWx1cmUpIGlmIHRoZXJlJ3Mgbm8gaW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuOwotICB9Ci0KLSAgU2JDcnlwdG9ncmFwaHlTZXRJbml0aWFsaXphdGlvblZlY3RvcihlbmNyeXB0ZXIsIG5vbmNlLmdldCgpLCBub25jZV9sZW4pOwotICBtZW1zZXQob3V0LmdldCgpLCAwLCBwbGFpbnRleHRfbGVuKTsKLSAgaWYgKGFkZGl0aW9uYWxfZGF0YSkgewotICAgIFNiQ3J5cHRvZ3JhcGh5U2V0QXV0aGVudGljYXRlZERhdGEoZW5jcnlwdGVyLCBhZGRpdGlvbmFsX2RhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuKTsKLSAgfQotCi0gIGlmIChwbGFpbnRleHQpIHsKLSAgICBFWFBFQ1RfRVEocGxhaW50ZXh0X2xlbiwKLSAgICAgICAgICAgICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0oZW5jcnlwdGVyLCBwbGFpbnRleHQuZ2V0KCksIHBsYWludGV4dF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5nZXQoKSkpOwotICB9Ci0KLSAgc2NvcGVkX2FycmF5PHVpbnQ4X3Q+IGFjdHVhbF90YWcobmV3IHVpbnQ4X3RbdGFnX2xlbl0pOwotICBtZW1zZXQoYWN0dWFsX3RhZy5nZXQoKSwgMCwgdGFnX2xlbik7Ci0gIFNiQ3J5cHRvZ3JhcGh5R2V0VGFnKGVuY3J5cHRlciwgYWN0dWFsX3RhZy5nZXQoKSwgdGFnX2xlbik7Ci0gIGlmICh0YWcpIHsKLSAgICBFWFBFQ1RfU1RSRVEoSGV4RHVtcCh0YWcuZ2V0KCksIHRhZ19sZW4pLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgIEhleER1bXAoYWN0dWFsX3RhZy5nZXQoKSwgdGFnX2xlbikuY19zdHIoKSk7Ci0gIH0KLQotICBpZiAoY2lwaGVydGV4dCkgewotICAgIEVYUEVDVF9TVFJFUShIZXhEdW1wKGNpcGhlcnRleHQuZ2V0KCksIHBsYWludGV4dF9sZW4pLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgIEhleER1bXAob3V0LmdldCgpLCBwbGFpbnRleHRfbGVuKS5jX3N0cigpKTsKLSAgfQotCi0gIFNiQ3J5cHRvZ3JhcGh5RGVzdHJveVRyYW5zZm9ybWVyKGVuY3J5cHRlcik7Ci0KLSAgLy8gVGVzdCBkZWNyeXB0aW9uLgotCi0gIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgZGVjcnlwdGVyID0gU2JDcnlwdG9ncmFwaHlDcmVhdGVUcmFuc2Zvcm1lcigKLSAgICAgIGtTYkNyeXB0b2dyYXBoeUFsZ29yaXRobUFlcywga0Jsb2NrU2l6ZUJpdHMsCi0gICAgICBrU2JDcnlwdG9ncmFwaHlEaXJlY3Rpb25EZWNvZGUsIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUdjbSwKLSAgICAgIE5VTEwsIDAsIGtleS5nZXQoKSwga2V5X2xlbik7Ci0gIEFTU0VSVF9USEFUKGRlY3J5cHRlciwgTm90TnVsbCgpKTsKLQotICBTYkNyeXB0b2dyYXBoeVNldEluaXRpYWxpemF0aW9uVmVjdG9yKGRlY3J5cHRlciwgbm9uY2UuZ2V0KCksIG5vbmNlX2xlbik7Ci0gIG1lbXNldChvdXQuZ2V0KCksIDAsIHBsYWludGV4dF9sZW4pOwotICBpZiAoYWRkaXRpb25hbF9kYXRhKSB7Ci0gICAgU2JDcnlwdG9ncmFwaHlTZXRBdXRoZW50aWNhdGVkRGF0YShkZWNyeXB0ZXIsIGFkZGl0aW9uYWxfZGF0YS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW4pOwotICB9Ci0KLSAgaWYgKGNpcGhlcnRleHQpIHsKLSAgICBFWFBFQ1RfRVEocGxhaW50ZXh0X2xlbiwKLSAgICAgICAgICAgICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0oZGVjcnlwdGVyLCBjaXBoZXJ0ZXh0LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbnRleHRfbGVuLCBvdXQuZ2V0KCkpKTsKLSAgfQotCi0gIGFjdHVhbF90YWcucmVzZXQobmV3IHVpbnQ4X3RbdGFnX2xlbl0pOwotICBtZW1zZXQoYWN0dWFsX3RhZy5nZXQoKSwgMCwgdGFnX2xlbik7Ci0gIFNiQ3J5cHRvZ3JhcGh5R2V0VGFnKGRlY3J5cHRlciwgYWN0dWFsX3RhZy5nZXQoKSwgdGFnX2xlbik7Ci0gIGlmICh0YWcpIHsKLSAgICBFWFBFQ1RfU1RSRVEoSGV4RHVtcCh0YWcuZ2V0KCksIHRhZ19sZW4pLmNfc3RyKCksCi0gICAgICAgICAgICAgICAgIEhleER1bXAoYWN0dWFsX3RhZy5nZXQoKSwgdGFnX2xlbikuY19zdHIoKSk7Ci0gIH0KLQotICBpZiAocGxhaW50ZXh0KSB7Ci0gICAgRVhQRUNUX1NUUkVRKEhleER1bXAocGxhaW50ZXh0LmdldCgpLCBwbGFpbnRleHRfbGVuKS5jX3N0cigpLAotICAgICAgICAgICAgICAgICBIZXhEdW1wKG91dC5nZXQoKSwgcGxhaW50ZXh0X2xlbikuY19zdHIoKSk7Ci0gIH0KLSAgU2JDcnlwdG9ncmFwaHlEZXN0cm95VHJhbnNmb3JtZXIoZGVjcnlwdGVyKTsKLX0KLQotSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoCi0gICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0sCi0gICAgR2NtLAotICAgIDo6dGVzdGluZzo6UmFuZ2UoMCwgU0JfQVJSQVlfU0laRV9JTlQodGVzdF9jYXNlcykpKTsKLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgbnBsYgotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV90cmFuc2Zvcm1fdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL2NyeXB0b2dyYXBoeV90cmFuc2Zvcm1fdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQxNmQ0Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbnBsYi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jcnlwdG9ncmFwaHkuaCIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL25wbGIvY3J5cHRvZ3JhcGh5X2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ0ZXN0aW5nL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIHN0YXJib2FyZCB7Ci1uYW1lc3BhY2UgbnBsYiB7Ci1uYW1lc3BhY2UgewotCi1jbGFzcyBBZXMgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0V2l0aFBhcmFtPFNiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlPiB7Ci0gcHJvdGVjdGVkOgotICBTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZSBHZXRNb2RlKCkgeyByZXR1cm4gR2V0UGFyYW0oKTsgfQotCi0gIGJvb2wgU2hvdWxkU2V0SXZBdEluaXRpYWxpemF0aW9uKCkgewotICAgIHJldHVybiBHZXRJdk1vZGUoKSA9PSBrSXZNb2RlU2V0QXRJbml0aWFsaXphdGlvbiB8fAotICAgICAgICAgICBHZXRJdk1vZGUoKSA9PSBrSXZNb2RlU2V0QW55VGltZTsKLSAgfQotCi0gIGJvb2wgU2hvdWxkU2V0SXZBZnRlckluaXRpYWxpemF0aW9uKCkgewotICAgIHJldHVybiBHZXRJdk1vZGUoKSA9PSBrSXZNb2RlU2V0QWZ0ZXJJbml0aWFsaXphdGlvbiB8fAotICAgICAgICAgICBHZXRJdk1vZGUoKSA9PSBrSXZNb2RlU2V0QW55VGltZTsKLSAgfQotCi0gIGJvb2wgU2hvdWxkU2V0QXV0aGVudGljYXRlZERhdGEoKSB7Ci0gICAgc3dpdGNoIChHZXRNb2RlKCkpIHsKLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlR2NtOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlRWNiOgotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDdHI6Ci0gICAgICBjYXNlIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUNiYzoKLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ2ZiOgotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVPZmI6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFERF9GQUlMVVJFKCkgPDwgIlVucmVjb2duaXplZCBTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZSAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgR2V0TW9kZSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgY29uc3QgY2hhciogR2V0RXhwZWN0ZWRFbmNyeXB0ZWRWYWx1ZUhleCgpIHsKLSAgICBzd2l0Y2ggKEdldE1vZGUoKSkgewotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVHY206Ci0gICAgICAgIHJldHVybiAiNmE3YjZlODcxZjg1MWRiMjFhMjlmNmFlZjU3OWNmYjc3MjM4ZDM0YjJmMDk5NDA0ZjIwYmI0NGM2YjJkNGQyIgotICAgICAgICAgICAgICAgIjBhMjc4OGY4ZmZjMGEzNmViYTRjZDhlNjllZTk1ZTk3M2I1ZWI1MmQxZTIxOGVlOTkxY2NjMGVlMWJhMmZhNyIKLSAgICAgICAgICAgICAgICJkMWRjODNhNWQyZTNjMzE3ZTU2MzdiNjdjMjUyNGJkMDczZWM2ZmU1NDdlZGY2MDQ0MTExZTJlMTZjMjM5ZWQiCi0gICAgICAgICAgICAgICAiZTg0NWQ0YjdiMjM1ZjI0ZmJkYjI2NzNkYmRkMWM1ZDVjNDZkN2I2OTA1OWZmNGIxNTY2YjAxYmVjNGY0Y2E2IgotICAgICAgICAgICAgICAgImE0YzUwMCI7Ci0KLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlRWNiOgotICAgICAgICByZXR1cm4gIjM2YWE0MDQ5OWRjY2M5ZjI1YmIzYzFhYmNmNGI3M2NmNTk5M2RjNjEyN2M1MzRlNzQ5MWEzMWE1NGYwOWJjNCIKLSAgICAgICAgICAgICAgICI4ZTlmYzE1N2UzODBjYTE0NTdkZWRhYzkxNDdlMTU4YmUxYzhlYmEyZWM2NzlkNmJkYzU0Y2IyODc4Y2QyYWIiCi0gICAgICAgICAgICAgICAiNjczNmFhNDA0OTlkY2NjOWYyNWJiM2MxYWJjZjRiNzNjZjU5OTNkYzYxMjdjNTM0ZTc0OTFhMzFhNTRmMDliIgotICAgICAgICAgICAgICAgImM0OGU5ZmMxNTdlMzgwY2ExNDU3ZGVkYWM5MTQ3ZTE1OGJlYWU2MDJlMDQzZTA1NzJlZDJmNzFhY2Y1NDM4YyIKLSAgICAgICAgICAgICAgICJlNzgyMDAiOwotCi0gICAgICBjYXNlIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUN0cjoKLSAgICAgICAgcmV0dXJuICJmMzJmOGE4MTNjZWEzMGUwZjRjNmUyZWZlYWI1MmFiOTI5NzZjYzA2ZmE1ZjY5NDA5YzMzNThlZjJmMzc4MmQiCi0gICAgICAgICAgICAgICAiZGFmZjIwMWY1NmFjZDliNjFmZWE0YzNlNDczOWRlYWIxNzZhZDc2NGRhMTZkMTI0OGQ1OTMzNzk2MmM3YWIwIgotICAgICAgICAgICAgICAgImYyY2Q0YzI5MmVkMzRhZTQxMjVkOGZiMTQyMzQ0YjJkMmZjNGZmNTMzYjgwZjVlOGUzMTFjZGU3MDBjZWFlZCIKLSAgICAgICAgICAgICAgICJhNjEzYzZmMjdmNzJhMDYwMmU2ZTQ4OTFlNmI0ZjVhMGE2NGU3OTU5OThhNDA1NDRkODgzNjNkMTI0ZDUyOTQiCi0gICAgICAgICAgICAgICAiYzkxNzAwIjsKLQotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDYmM6Ci0gICAgICAgIHJldHVybiAiZWFhOTI5ZDYzN2NkZTU1MTE1ZDQzMjU3ZTkyMGZmOGQzOWQxZGVjODI0MDI1NWE1ZGI3OWEwY2Y3OTUwMWExIgotICAgICAgICAgICAgICAgIjRiYzYyYzRkMTZmYzQ1ZGQ3ZmE5ZDE1YjMzNDZhNzQzMDEyNjBkZmViOTZlMjIyNTk3ODczNDRkN2U0NzA0NyIKLSAgICAgICAgICAgICAgICIzZWI0MTg3ZWVhYzE2YTc0YWZkMWM1ZmRjNjdmYjE0NWNjNDk0NjY3ZWE0YjE2ZGNjYzgzY2MxY2MxYjJjMzYiCi0gICAgICAgICAgICAgICAiMmYyYTAzZTkwZDZjM2E5YWRiZjUzYzRjYjhlNDk4NzcxOTkyOGVmN2M0N2M0NDAzZjBjZmU1YTBmZjc3MzI1IgotICAgICAgICAgICAgICAgIjZlYWEwMCI7Ci0KLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ2ZiOgotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVPZmI6Ci0gICAgICAgIEFERF9GQUlMVVJFKCkgPDwgIlVuc3VwcG9ydGVkIFNiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlICIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBHZXRNb2RlKCk7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFERF9GQUlMVVJFKCkgPDwgIlVucmVjb2duaXplZCBTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZSAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgR2V0TW9kZSgpOwotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0KLSBwcml2YXRlOgotICBlbnVtIEl2TW9kZSB7Ci0gICAga0l2TW9kZU5vdFVzZWQsCi0gICAga0l2TW9kZVNldEF0SW5pdGlhbGl6YXRpb24sCi0gICAga0l2TW9kZVNldEFmdGVySW5pdGlhbGl6YXRpb24sCi0gICAga0l2TW9kZVNldEFueVRpbWUsCi0gIH07Ci0KLSAgSXZNb2RlIEdldEl2TW9kZSgpIHsKLSAgICBzd2l0Y2ggKEdldE1vZGUoKSkgewotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVFY2I6Ci0gICAgICAgIHJldHVybiBrSXZNb2RlTm90VXNlZDsKLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlR2NtOgotICAgICAgICByZXR1cm4ga0l2TW9kZVNldEFmdGVySW5pdGlhbGl6YXRpb247Ci0gICAgICBjYXNlIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUN0cjoKLSAgICAgICAgcmV0dXJuIGtJdk1vZGVTZXRBbnlUaW1lOwotICAgICAgY2FzZSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDYmM6Ci0gICAgICBjYXNlIGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUNmYjoKLSAgICAgIGNhc2Uga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlT2ZiOgotICAgICAgICByZXR1cm4ga0l2TW9kZVNldEF0SW5pdGlhbGl6YXRpb247Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBBRERfRkFJTFVSRSgpIDw8ICJVbnJlY29nbml6ZWQgU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGUgIgotICAgICAgICAgICAgICAgICAgICAgIDw8IEdldE1vZGUoKTsKLSAgICAgICAgcmV0dXJuIGtJdk1vZGVOb3RVc2VkOwotICAgIH0KLSAgfQotfTsKLQotY29uc3QgaW50IGtCbG9ja1NpemVCaXRzID0gMTI4OwotY29uc3QgaW50IGtCbG9ja1NpemVCeXRlcyA9IGtCbG9ja1NpemVCaXRzIC8gODsKLQotY29uc3QgY2hhciBrQ2xlYXJUZXh0W10gPQotICAgICJUaGlzIHRlc3QgdGV4dCBpcyBkZXNpZ25lZCB0byBiZSBhIG11bHRpcGxlIG9mIDEyOCBiaXRzLCBodXp6YWgtIgotICAgICJUaGlzIHRlc3QgdGV4dCBpcyBkZXNpZ25lZCB0byBiZSBhIG11bHRpcGxlIG9mIDEyOCBiaXRzLCBodXp6YWghIjsKLWNvbnN0IGNoYXIga0FkZGl0aW9uYWxEYXRhU3RyaW5nW10gPSAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKLWNvbnN0IGNoYXIga0luaXRpYWxpemF0aW9uVmVjdG9yW2tCbG9ja1NpemVCeXRlcyArIDFdID0gIjAxMjM0NTY3ODlBQkNERUYiOwotY29uc3QgY2hhciBrS2V5W2tCbG9ja1NpemVCeXRlcyArIDFdID0gIlJpam5kYWVsIjsKLQotVEVTVF9QKEFlcywgU3VubnlEYXlJZGVudGl0eSkgewotICBTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZSBtb2RlID0gR2V0TW9kZSgpOwotCi0gIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgZW5jcnlwdGVyID0gU2JDcnlwdG9ncmFwaHlDcmVhdGVUcmFuc2Zvcm1lcigKLSAgICAgIGtTYkNyeXB0b2dyYXBoeUFsZ29yaXRobUFlcywga0Jsb2NrU2l6ZUJpdHMsCi0gICAgICBrU2JDcnlwdG9ncmFwaHlEaXJlY3Rpb25FbmNvZGUsIG1vZGUsCi0gICAgICBTaG91bGRTZXRJdkF0SW5pdGlhbGl6YXRpb24oKSA/IGtJbml0aWFsaXphdGlvblZlY3RvciA6IE5VTEwsCi0gICAgICBTaG91bGRTZXRJdkF0SW5pdGlhbGl6YXRpb24oKSA/IGtCbG9ja1NpemVCeXRlcyA6IDAsIGtLZXksCi0gICAgICBrQmxvY2tTaXplQnl0ZXMpOwotCi0gIGlmICghU2JDcnlwdG9ncmFwaHlJc1RyYW5zZm9ybWVyVmFsaWQoZW5jcnlwdGVyKSkgewotICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiU2tpcHBpbmcgdGVzdCwgYXMgdGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24uIjsKLSAgICAvLyBUZXN0IG92ZXIgaWYgdGhlcmUncyBubyBpbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoU2hvdWxkU2V0SXZBZnRlckluaXRpYWxpemF0aW9uKCkpIHsKLSAgICBTYkNyeXB0b2dyYXBoeVNldEluaXRpYWxpemF0aW9uVmVjdG9yKGVuY3J5cHRlciwga0luaXRpYWxpemF0aW9uVmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0Jsb2NrU2l6ZUJ5dGVzKTsKLSAgfQotCi0gIGlmIChTaG91bGRTZXRBdXRoZW50aWNhdGVkRGF0YSgpKSB7Ci0gICAgc2NvcGVkX2FycmF5PHVpbnQ4X3Q+IGFhZDsKLSAgICBpbnQgYWFkX2xlbiA9IDA7Ci0gICAgRGVjb2RlSGV4KCZhYWQsICZhYWRfbGVuLCBrQWRkaXRpb25hbERhdGFTdHJpbmcsIEdldE1vZGUoKSwgImFhZCIpOwotICAgIFNiQ3J5cHRvZ3JhcGh5U2V0QXV0aGVudGljYXRlZERhdGEoZW5jcnlwdGVyLCBhYWQuZ2V0KCksIGFhZF9sZW4pOwotICB9Ci0KLSAgY29uc3QgaW50IGtJbnB1dFNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihrQ2xlYXJUZXh0KSk7Ci0gIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKGtDbGVhclRleHQpKTsKLSAgY2hhciogY2lwaGVyX3RleHQgPSBuZXcgY2hhcltrQnVmZmVyU2l6ZV07Ci0gIG1lbXNldChjaXBoZXJfdGV4dCwgMCwga0J1ZmZlclNpemUpOwotICBpbnQgY291bnQgPQotICAgICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0oZW5jcnlwdGVyLCBrQ2xlYXJUZXh0LCBrSW5wdXRTaXplLCBjaXBoZXJfdGV4dCk7Ci0gIEVYUEVDVF9FUShrSW5wdXRTaXplLCBjb3VudCk7Ci0gIEVYUEVDVF9ORSgwLCBzdHJuY21wKGtDbGVhclRleHQsIGNpcGhlcl90ZXh0LCBrQnVmZmVyU2l6ZSkpOwotCi0gIEVYUEVDVF9TVFJFUShHZXRFeHBlY3RlZEVuY3J5cHRlZFZhbHVlSGV4KCksCi0gICAgICAgICAgICAgICBIZXhEdW1wKGNpcGhlcl90ZXh0LCBrQnVmZmVyU2l6ZSkuY19zdHIoKSk7Ci0KLSAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciBkZWNyeXB0ZXIgPSBTYkNyeXB0b2dyYXBoeUNyZWF0ZVRyYW5zZm9ybWVyKAotICAgICAga1NiQ3J5cHRvZ3JhcGh5QWxnb3JpdGhtQWVzLCBrQmxvY2tTaXplQml0cywKLSAgICAgIGtTYkNyeXB0b2dyYXBoeURpcmVjdGlvbkRlY29kZSwgbW9kZSwKLSAgICAgIFNob3VsZFNldEl2QXRJbml0aWFsaXphdGlvbigpID8ga0luaXRpYWxpemF0aW9uVmVjdG9yIDogTlVMTCwKLSAgICAgIFNob3VsZFNldEl2QXRJbml0aWFsaXphdGlvbigpID8ga0Jsb2NrU2l6ZUJ5dGVzIDogMCwga0tleSwKLSAgICAgIGtCbG9ja1NpemVCeXRlcyk7Ci0KLSAgQVNTRVJUX1RSVUUoU2JDcnlwdG9ncmFwaHlJc1RyYW5zZm9ybWVyVmFsaWQoZGVjcnlwdGVyKSkKLSAgICAgIDw8ICJDcnlwdG9ncmFwaGljIHN1cHBvcnQgZm9yIGEgc2V0IG9mIHBhcmFtZXRlcnMgbXVzdCBiZSBzeW1tZXRyaWNhbC4iOwotCi0gIGlmIChTaG91bGRTZXRJdkFmdGVySW5pdGlhbGl6YXRpb24oKSkgewotICAgIFNiQ3J5cHRvZ3JhcGh5U2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoZGVjcnlwdGVyLCBrSW5pdGlhbGl6YXRpb25WZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQmxvY2tTaXplQnl0ZXMpOwotICB9Ci0KLSAgaWYgKFNob3VsZFNldEF1dGhlbnRpY2F0ZWREYXRhKCkpIHsKLSAgICBzY29wZWRfYXJyYXk8dWludDhfdD4gYWFkOwotICAgIGludCBhYWRfbGVuID0gMDsKLSAgICBEZWNvZGVIZXgoJmFhZCwgJmFhZF9sZW4sIGtBZGRpdGlvbmFsRGF0YVN0cmluZywgR2V0TW9kZSgpLCAiYWFkIik7Ci0gICAgU2JDcnlwdG9ncmFwaHlTZXRBdXRoZW50aWNhdGVkRGF0YShkZWNyeXB0ZXIsIGFhZC5nZXQoKSwgYWFkX2xlbik7Ci0gIH0KLQotICBjaGFyKiBkZWNyeXB0ZWRfdGV4dCA9IG5ldyBjaGFyW2tCdWZmZXJTaXplXTsKLSAgbWVtc2V0KGRlY3J5cHRlZF90ZXh0LCAwLCBrQnVmZmVyU2l6ZSk7Ci0gIGNvdW50ID0gU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0oZGVjcnlwdGVyLCBjaXBoZXJfdGV4dCwga0lucHV0U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0ZWRfdGV4dCk7Ci0KLSAgRVhQRUNUX0VRKGtJbnB1dFNpemUsIGNvdW50KTsKLSAgRVhQRUNUX0VRKGtJbnB1dFNpemUsIHN0cmxlbihkZWNyeXB0ZWRfdGV4dCkpOwotICBFWFBFQ1RfU1RSRVEoa0NsZWFyVGV4dCwgZGVjcnlwdGVkX3RleHQpOwotCi0gIGRlbGV0ZVtdIGRlY3J5cHRlZF90ZXh0OwotICBkZWxldGVbXSBjaXBoZXJfdGV4dDsKLSAgU2JDcnlwdG9ncmFwaHlEZXN0cm95VHJhbnNmb3JtZXIoZGVjcnlwdGVyKTsKLSAgU2JDcnlwdG9ncmFwaHlEZXN0cm95VHJhbnNmb3JtZXIoZW5jcnlwdGVyKTsKLX0KLQotSU5TVEFOVElBVEVfVEVTVF9DQVNFX1AoU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBBZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICA6OnRlc3Rpbmc6OlZhbHVlcyhrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDYmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDZmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVFY2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVPZmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVHY20pKTsKLQotfSAgLy8gbmFtZXNwYWNlCi19ICAvLyBuYW1lc3BhY2UgbnBsYgotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2RpcmVjdG9yeV9nZXRfbmV4dF90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvZGlyZWN0b3J5X2dldF9uZXh0X3Rlc3QuY2MKaW5kZXggNTc2ZTUwZC4uZWEzYTc0ZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvZGlyZWN0b3J5X2dldF9uZXh0X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvZGlyZWN0b3J5X2dldF9uZXh0X3Rlc3QuY2MKQEAgLTUxLDE5ICs1MSwxMSBAQAogCiAgIFN0cmluZ1NldCBuYW1lc190b19maW5kKG5hbWVzKTsKICAgd2hpbGUgKHRydWUpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGVudHJ5KGtTYkZpbGVNYXhOYW1lLCAwKTsKICAgICBpZiAoIVNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksIGVudHJ5LmRhdGEoKSwgZW50cnkuc2l6ZSgpKSkgewogICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNvbnN0IGNoYXIqIGVudHJ5X25hbWUgPSBlbnRyeS5kYXRhKCk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgU2JEaXJlY3RvcnlFbnRyeSBlbnRyeSA9IHswfTsKLSAgICBpZiAoIVNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksICZlbnRyeSkpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBlbnRyeV9uYW1lID0gZW50cnkubmFtZTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogICAgIC8vIFNiRGlyZWN0b3J5RW50cnkganVzdCBjb250YWlucyB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGFic29sdXRlIHBhdGggdG8KICAgICAvLyB0aGUgZmlsZSwgYnV0IFNjb3BlZFJhbmRvbUZpbGU6OmZpbGVuYW1lKCkgcmV0dXJucyB0aGUgZnVsbCBwYXRoLgpAQCAtMTE3LDE5ICsxMDksMTEgQEAKIAogICAgIC8vIEl0ZXJhdGUgYWxsIGVudHJpZXMgaW4gdGhpcyBkaXJlY3RvcnkuCiAgICAgd2hpbGUgKHRydWUpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gZW50cnkoa1NiRmlsZU1heE5hbWUsIDApOwogICAgICAgaWYgKCFTYkRpcmVjdG9yeUdldE5leHQoZGlyZWN0b3J5LCBlbnRyeS5kYXRhKCksIGVudHJ5LnNpemUoKSkpIHsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgICBzdGQ6OnN0cmluZyBlbnRyeV9uYW1lID0gZW50cnkuZGF0YSgpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgU2JEaXJlY3RvcnlFbnRyeSBlbnRyeSA9IHswfTsKLSAgICAgIGlmICghU2JEaXJlY3RvcnlHZXROZXh0KGRpcmVjdG9yeSwgJmVudHJ5KSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIHN0ZDo6c3RyaW5nIGVudHJ5X25hbWUgPSBlbnRyeS5uYW1lOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgICAgICAvLyBBY2NlcHQgYW5kIGlnbm9yZSAnLicgYW5kICcuLicgZGlyZWN0b3JpZXMuCiAgICAgICBpZiAoZW50cnlfbmFtZSA9PSAiLiIgfHwgZW50cnlfbmFtZSA9PSAiLi4iKSB7CkBAIC0xNjUsMTQgKzE0OSw5IEBACiB9CiAKIFRFU1QoU2JEaXJlY3RvcnlHZXROZXh0VGVzdCwgRmFpbHVyZUludmFsaWRTYkRpcmVjdG9yeSkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHN0ZDo6dmVjdG9yPGNoYXI+IGVudHJ5KGtTYkZpbGVNYXhOYW1lLCAwKTsKICAgRVhQRUNUX0ZBTFNFKAogICAgICAgU2JEaXJlY3RvcnlHZXROZXh0KGtTYkRpcmVjdG9yeUludmFsaWQsIGVudHJ5LmRhdGEoKSwgZW50cnkuc2l6ZSgpKSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIFNiRGlyZWN0b3J5RW50cnkgZW50cnkgPSB7MH07Ci0gIEVYUEVDVF9GQUxTRShTYkRpcmVjdG9yeUdldE5leHQoa1NiRGlyZWN0b3J5SW52YWxpZCwgJmVudHJ5KSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiB9CiAKIFRFU1QoU2JEaXJlY3RvcnlHZXROZXh0VGVzdCwgRmFpbHVyZU51bGxFbnRyeSkgewpAQCAtMTg3LDIzICsxNjYsMTQgQEAKICAgU2JEaXJlY3RvcnkgZGlyZWN0b3J5ID0gU2JEaXJlY3RvcnlPcGVuKHBhdGguY19zdHIoKSwgJmVycm9yKTsKICAgRVhQRUNUX1RSVUUoU2JEaXJlY3RvcnlJc1ZhbGlkKGRpcmVjdG9yeSkpOwogICBFWFBFQ1RfRVEoa1NiRmlsZU9rLCBlcnJvcik7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgRVhQRUNUX0ZBTFNFKFNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksIE5VTEwsIGtTYkZpbGVNYXhOYW1lKSk7Ci0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgRVhQRUNUX0ZBTFNFKFNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksIE5VTEwpKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgRVhQRUNUX1RSVUUoU2JEaXJlY3RvcnlDbG9zZShkaXJlY3RvcnkpKTsKIH0KIAogVEVTVChTYkRpcmVjdG9yeUdldE5leHRUZXN0LCBGYWlsdXJlSW52YWxpZEFuZE51bGwpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBFWFBFQ1RfRkFMU0UoU2JEaXJlY3RvcnlHZXROZXh0KGtTYkRpcmVjdG9yeUludmFsaWQsIE5VTEwsIGtTYkZpbGVNYXhOYW1lKSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIEVYUEVDVF9GQUxTRShTYkRpcmVjdG9yeUdldE5leHQoa1NiRGlyZWN0b3J5SW52YWxpZCwgTlVMTCkpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIFRFU1QoU2JEaXJlY3RvcnlHZXROZXh0VGVzdCwgRmFpbHVyZU9uSW5zdWZmaWNpZW50U2l6ZSkgewogICBTY29wZWRSYW5kb21GaWxlIGZpbGU7CiAgIHN0ZDo6c3RyaW5nIGRpcmVjdG9yeV9uYW1lID0gZmlsZS5maWxlbmFtZSgpOwpAQCAtMjI3LDcgKzE5Nyw2IEBACiAKICAgRVhQRUNUX1RSVUUoU2JEaXJlY3RvcnlDbG9zZShkaXJlY3RvcnkpKTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvZHJtX2dldF9tZXRyaWNzX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9kcm1fZ2V0X21ldHJpY3NfdGVzdC5jYwppbmRleCBhMjZkZDE1Li40ODRjMWJjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9kcm1fZ2V0X21ldHJpY3NfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9kcm1fZ2V0X21ldHJpY3NfdGVzdC5jYwpAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9ucGxiL2RybV9oZWxwZXJzLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CkBAIC01OSw1ICs1NywzIEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2V4dGVybl9jX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9leHRlcm5fY190ZXN0LmNjCmluZGV4IGYyOTVmNTAuLjU1YmQxOTggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL2V4dGVybl9jX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvZXh0ZXJuX2NfdGVzdC5jYwpAQCAtMjMsOSArMjMsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25kaXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jcHVfZmVhdHVyZXMuaCIKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oIgotI2VuZGlmCiAjaW5jbHVkZSAic3RhcmJvYXJkL2RlY29kZV90YXJnZXQuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvZGlyZWN0b3J5LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2RvdWJsZS5oIgpAQCAtNTMsNyArNTAsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zdHJpbmcuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWRfdHlwZXMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aW1lX3pvbmUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2ZpbGVfYXRvbWljX3JlcGxhY2VfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL2ZpbGVfYXRvbWljX3JlcGxhY2VfdGVzdC5jYwppbmRleCBkZmYyNDk5Li43Yzk5YWZlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9maWxlX2F0b21pY19yZXBsYWNlX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvZmlsZV9hdG9taWNfcmVwbGFjZV90ZXN0LmNjCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL25wbGIvZmlsZV9oZWxwZXJzLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CkBAIC05Nyw1ICs5NSwzIEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL2ZsYXRfbWFwX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9mbGF0X21hcF90ZXN0LmNjCmluZGV4IDM0MTcwYjIuLjZmMzUyNDAgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL2ZsYXRfbWFwX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvZmxhdF9tYXBfdGVzdC5jYwpAQCAtOTAsMTIgKzkwLDggQEAKIH0KIAogU2JUaW1lTW9ub3RvbmljIEdldFRocmVhZFRpbWVNb25vdG9uaWNOb3coKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFRJTUVfVEhSRUFEX05PVykKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoU2JUaW1lSXNUaW1lVGhyZWFkTm93U3VwcG9ydGVkKCkpCi0jZW5kaWYKICAgICByZXR1cm4gU2JUaW1lR2V0TW9ub3RvbmljVGhyZWFkTm93KCk7Ci0jZW5kaWYKICAgcmV0dXJuIFNiVGltZUdldE1vbm90b25pY05vdygpOwogfQogCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9pbmNsdWRlX2FsbC5jIGIvc3RhcmJvYXJkL25wbGIvaW5jbHVkZV9hbGwuYwppbmRleCBiYjNlMzBlLi41YmVhMmU4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9pbmNsdWRlX2FsbC5jCisrKyBiL3N0YXJib2FyZC9ucGxiL2luY2x1ZGVfYWxsLmMKQEAgLTIyLDkgKzIyLDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY3B1X2ZlYXR1cmVzLmgiCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotI2luY2x1ZGUgInN0YXJib2FyZC9jcnlwdG9ncmFwaHkuaCIKLSNlbmRpZgogI2luY2x1ZGUgInN0YXJib2FyZC9kZWNvZGVfdGFyZ2V0LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2RpcmVjdG9yeS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9kb3VibGUuaCIKQEAgLTUyLDcgKzQ5LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkX3R5cGVzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGltZV96b25lLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9tZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9tZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtX3Rlc3QuY2MKaW5kZXggODFmODVlMi4uYmVlYThhYyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWVkaWFfY2FuX3BsYXlfbWltZV9hbmRfa2V5X3N5c3RlbV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL21lZGlhX2Nhbl9wbGF5X21pbWVfYW5kX2tleV9zeXN0ZW1fdGVzdC5jYwpAQCAtNzMsOSArNzMsNyBAQAogICAvLyBPcHVzCiAgIHJlc3VsdCA9IFNiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbSgKICAgICAgICJhdWRpby93ZWJtOyBjb2RlY3M9XCJvcHVzXCI7IGNoYW5uZWxzPTIiLCAiIik7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgQVNTRVJUX0VRKHJlc3VsdCwga1NiTWVkaWFTdXBwb3J0VHlwZVByb2JhYmx5KTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIH0KIAogVEVTVChTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0sIEludmFsaWQpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbl90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWVkaWFfc2V0X2F1ZGlvX3dyaXRlX2R1cmF0aW9uX3Rlc3QuY2MKaW5kZXggMzM5NjZiYy4uMjM3ZmU1OCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWVkaWFfc2V0X2F1ZGlvX3dyaXRlX2R1cmF0aW9uX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbWVkaWFfc2V0X2F1ZGlvX3dyaXRlX2R1cmF0aW9uX3Rlc3QuY2MKQEAgLTExMiw3ICsxMTIsNiBAQAogICAgICAgICBkbXBfcmVhZGVyXy5HZXRQbGF5ZXJTYW1wbGVJbmZvKGtTYk1lZGlhVHlwZUF1ZGlvLCAwKS50aW1lc3RhbXA7CiAgICAgZmlyc3RfaW5wdXRfdGltZXN0YW1wXyA9IGxhc3RfaW5wdXRfdGltZXN0YW1wXzsKIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgIFNiUGxheWVyQ3JlYXRpb25QYXJhbSBjcmVhdGlvbl9wYXJhbSA9IENyZWF0ZVBsYXllckNyZWF0aW9uUGFyYW0oCiAgICAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjLCBrU2JNZWRpYVZpZGVvQ29kZWNOb25lKTsKICAgICBjcmVhdGlvbl9wYXJhbS5hdWRpb19zYW1wbGVfaW5mbyA9IGF1ZGlvX3NhbXBsZV9pbmZvOwpAQCAtMTI1LDIyICsxMjQsNiBAQAogICAgICAgICBEdW1teURlYWxsb2NhdGVTYW1wbGVGdW5jLCBEZWNvZGVyU3RhdHVzRnVuYywgUGxheWVyU3RhdHVzRnVuYywKICAgICAgICAgRHVtbXlFcnJvckZ1bmMsIHRoaXMgLyogY29udGV4dCAqLywKICAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy5kZWNvZGVyX3RhcmdldF9wcm92aWRlcigpKTsKLSNlbHNlICAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0gICAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlID0ga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZTsKLQotICAgIGlmICghU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKG91dHB1dF9tb2RlLCBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTYkRybVN5c3RlbUludmFsaWQpKSB7Ci0gICAgICBvdXRwdXRfbW9kZSA9IGtTYlBsYXllck91dHB1dE1vZGVQdW5jaE91dDsKLSAgICB9Ci0KLSAgICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllckNyZWF0ZSgKLSAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy53aW5kb3coKSwga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSwKLSAgICAgICAga0F1ZGlvQ29kZWMsIGtTYkRybVN5c3RlbUludmFsaWQsICZhdWRpb19zYW1wbGVfaW5mbywKLSAgICAgICAgTlVMTCAvKiBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzICovLAotICAgICAgICBEdW1teURlYWxsb2NhdGVTYW1wbGVGdW5jLCBEZWNvZGVyU3RhdHVzRnVuYywgUGxheWVyU3RhdHVzRnVuYywKLSAgICAgICAgRHVtbXlFcnJvckZ1bmMsIHRoaXMgLyogY29udGV4dCAqLywgb3V0cHV0X21vZGUsCi0gICAgICAgIGZha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8uZGVjb2Rlcl90YXJnZXRfcHJvdmlkZXIoKSk7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogCiAgICAgRVhQRUNUX1RSVUUoU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcikpOwogICAgIHJldHVybiBwbGF5ZXI7CkBAIC0yNzksOSArMjYyLDcgQEAKICAgICBjb25zdCBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvKiBhdWRpb19zYW1wbGVfaW5mbyA9CiAgICAgICAgICZkbXBfcmVhZGVyLmF1ZGlvX3NhbXBsZV9pbmZvKCk7CiAgICAgaWYgKFNiTWVkaWFJc0F1ZGlvU3VwcG9ydGVkKGRtcF9yZWFkZXIuYXVkaW9fY29kZWMoKSwKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgIC8vIGNvbnRlbnRfdHlwZQotI2VuZGlmIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtcF9yZWFkZXIuYXVkaW9fYml0cmF0ZSgpKSkgewogICAgICAgdGVzdF9wYXJhbXMucHVzaF9iYWNrKGZpbGVuYW1lKTsKICAgICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9tZW1vcnlfbWFwX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9tZW1vcnlfbWFwX3Rlc3QuY2MKaW5kZXggM2M0MDFmNC4uMTBkMmI5YiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWVtb3J5X21hcF90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL21lbW9yeV9tYXBfdGVzdC5jYwpAQCAtMjMsNyArMjMsNiBAQAogbmFtZXNwYWNlIG5wbGIgewogbmFtZXNwYWNlIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQogY29uc3Qgc2l6ZV90IGtTaXplID0ga1NiTWVtb3J5UGFnZVNpemUgKiA4OwogY29uc3Qgdm9pZCoga0ZhaWxlZCA9IFNCX01FTU9SWV9NQVBfRkFJTEVEOwogCkBAIC0yOTIsOCArMjkxLDYgQEAKICAgfQogfQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQotCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9tZW1vcnlfcmVwb3J0ZXJfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL21lbW9yeV9yZXBvcnRlcl90ZXN0LmNjCmluZGV4IDZkZGUwMmIuLjhiMjYwNGEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL21lbW9yeV9yZXBvcnRlcl90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL21lbW9yeV9yZXBvcnRlcl90ZXN0LmNjCkBAIC00MCw1MyArNDAsNTkgQEAKICAgICBwcmV2X3ZhbCA9IEdldE1lbW9yeVRyYWNraW5nRW5hYmxlZF9UaHJlYWRMb2NhbCgpOwogICAgIFNldE1lbW9yeVRyYWNraW5nRW5hYmxlZF9UaHJlYWRMb2NhbChmYWxzZSk7CiAgIH0KLSAgfk5vTWVtVHJhY2tpbmcoKSB7Ci0gICAgU2V0TWVtb3J5VHJhY2tpbmdFbmFibGVkX1RocmVhZExvY2FsKHByZXZfdmFsKTsKLSAgfQorICB+Tm9NZW1UcmFja2luZygpIHsgU2V0TWVtb3J5VHJhY2tpbmdFbmFibGVkX1RocmVhZExvY2FsKHByZXZfdmFsKTsgfQogfTsKIAogLy8gRVhQRUNUX1hYWCBhbmQgQVNTRVJUX1hYWCBhbGxvY2F0ZSBtZW1vcnksIGEgYmlnIG5vLW5vIHdoZW4KIC8vIGZvciB1bml0IHRlc3RpbmcgYWxsb2NhdGlvbnMuIFRoZXNlIG92ZXJyaWRlcyBkaXNhYmxlIG1lbW9yeQogLy8gdHJhY2tpbmcgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgRVhQRUNUIGFuZCBBU1NFUlQgb3BlcmF0aW9ucy4KLSNkZWZpbmUgRVhQRUNUX0VRX05PX1RSQUNLSU5HKEEsIEIpICAgICAgICAgICAgICAgIFwKLXsgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgIFwKLSAgRVhQRUNUX0VRKEEsIEIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KKyNkZWZpbmUgRVhQRUNUX0VRX05PX1RSQUNLSU5HKEEsIEIpICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5vTWVtVHJhY2tpbmcgbm9fbWVtb3J5X3RyYWNraW5nX2luX3RoaXNfc2NvcGU7IFwKKyAgICBFWFBFQ1RfRVEoQSwgQik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KIAotI2RlZmluZSBFWFBFQ1RfTkVfTk9fVFJBQ0tJTkcoQSwgQikgICAgICAgICAgICAgICAgXAoteyBOb01lbVRyYWNraW5nIG5vX21lbW9yeV90cmFja2luZ19pbl90aGlzX3Njb3BlOyAgXAotICBFWFBFQ1RfTkUoQSwgQik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQorI2RlZmluZSBFWFBFQ1RfTkVfTk9fVFJBQ0tJTkcoQSwgQikgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgXAorICAgIEVYUEVDVF9ORShBLCBCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQogCi0jZGVmaW5lIEVYUEVDVF9UUlVFX05PX1RSQUNLSU5HKEEpICAgICAgICAgICAgICAgICBcCi17IE5vTWVtVHJhY2tpbmcgbm9fbWVtb3J5X3RyYWNraW5nX2luX3RoaXNfc2NvcGU7ICBcCi0gIEVYUEVDVF9UUlVFKEEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19CisjZGVmaW5lIEVYUEVDVF9UUlVFX05PX1RSQUNLSU5HKEEpICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOb01lbVRyYWNraW5nIG5vX21lbW9yeV90cmFja2luZ19pbl90aGlzX3Njb3BlOyBcCisgICAgRVhQRUNUX1RSVUUoQSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CiAKLSNkZWZpbmUgRVhQRUNUX0ZBTFNFX05PX1RSQUNLSU5HKEEpICAgICAgICAgICAgICAgIFwKLXsgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgIFwKLSAgRVhQRUNUX0ZBTFNFKEEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KKyNkZWZpbmUgRVhQRUNUX0ZBTFNFX05PX1RSQUNLSU5HKEEpICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5vTWVtVHJhY2tpbmcgbm9fbWVtb3J5X3RyYWNraW5nX2luX3RoaXNfc2NvcGU7IFwKKyAgICBFWFBFQ1RfRkFMU0UoQSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KIAotI2RlZmluZSBBU1NFUlRfRVFfTk9fVFJBQ0tJTkcoQSwgQikgICAgICAgICAgICAgICAgXAoteyBOb01lbVRyYWNraW5nIG5vX21lbW9yeV90cmFja2luZ19pbl90aGlzX3Njb3BlOyAgXAotICBBU1NFUlRfRVEoQSwgQik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQorI2RlZmluZSBBU1NFUlRfRVFfTk9fVFJBQ0tJTkcoQSwgQikgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgXAorICAgIEFTU0VSVF9FUShBLCBCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQogCi0jZGVmaW5lIEFTU0VSVF9ORV9OT19UUkFDS0lORyhBLCBCKSAgICAgICAgICAgICAgICBcCi17IE5vTWVtVHJhY2tpbmcgbm9fbWVtb3J5X3RyYWNraW5nX2luX3RoaXNfc2NvcGU7ICBcCi0gIEFTU0VSVF9ORShBLCBCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19CisjZGVmaW5lIEFTU0VSVF9ORV9OT19UUkFDS0lORyhBLCBCKSAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBOb01lbVRyYWNraW5nIG5vX21lbW9yeV90cmFja2luZ19pbl90aGlzX3Njb3BlOyBcCisgICAgQVNTRVJUX05FKEEsIEIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CiAKLSNkZWZpbmUgQVNTRVJUX1RSVUVfTk9fVFJBQ0tJTkcoQSkgICAgICAgICAgICAgICAgIFwKLXsgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgIFwKLSAgQVNTRVJUX1RSVUUoQSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KKyNkZWZpbmUgQVNTRVJUX1RSVUVfTk9fVFJBQ0tJTkcoQSkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE5vTWVtVHJhY2tpbmcgbm9fbWVtb3J5X3RyYWNraW5nX2luX3RoaXNfc2NvcGU7IFwKKyAgICBBU1NFUlRfVFJVRShBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KIAotI2RlZmluZSBBU1NFUlRfRkFMU0VfTk9fVFJBQ0tJTkcoQSkgICAgICAgICAgICAgICAgXAoteyBOb01lbVRyYWNraW5nIG5vX21lbW9yeV90cmFja2luZ19pbl90aGlzX3Njb3BlOyAgXAotICBBU1NFUlRfRkFMU0UoQSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQorI2RlZmluZSBBU1NFUlRfRkFMU0VfTk9fVFJBQ0tJTkcoQSkgICAgICAgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTm9NZW1UcmFja2luZyBub19tZW1vcnlfdHJhY2tpbmdfaW5fdGhpc19zY29wZTsgXAorICAgIEFTU0VSVF9GQUxTRShBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQogCiAvLyBBIHN0cnVjdHVyZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQgYmVjYXVzZSBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluIGl0cwogLy8gY29uc3RydWN0b3IuIFRoaXMgaXMgbmVlZGVkIHRvIHRlc3QgdGhlIHN0ZDo6bm90aHJvdyB2ZXJzaW9uIG9mIGRlbGV0ZSBzaW5jZQpAQCAtMTA0LDkgKzExMCw3IEBACiAgcHVibGljOgogICBUZXN0TWVtUmVwb3J0ZXIoKSB7IENvbnN0cnVjdCgpOyB9CiAKLSAgU2JNZW1vcnlSZXBvcnRlciogbWVtb3J5X3JlcG9ydGVyKCkgewotICAgIHJldHVybiAmbWVtb3J5X3JlcG9ydGVyXzsKLSAgfQorICBTYk1lbW9yeVJlcG9ydGVyKiBtZW1vcnlfcmVwb3J0ZXIoKSB7IHJldHVybiAmbWVtb3J5X3JlcG9ydGVyXzsgfQogCiAgIC8vIFJlbW92ZXMgdGhpcyBvYmplY3QgZnJvbSBsaXN0ZW5pbmcgdG8gYWxsb2NhdGlvbnMuCiAgIHZvaWQgUmVtb3ZlR2xvYmFsSG9va3MoKSB7CkBAIC0xMzEsMTggKzEzNSwxMCBAQAogICAgIGxhc3RfbWVtX3VubWFwXyA9IE5VTEw7CiAgIH0KIAotICBjb25zdCB2b2lkKiBsYXN0X2FsbG9jYXRpb24oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxhc3RfYWxsb2NhdGlvbl87Ci0gIH0KLSAgY29uc3Qgdm9pZCogbGFzdF9kZWFsbG9jYXRpb24oKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxhc3RfZGVhbGxvY2F0aW9uXzsKLSAgfQotICBjb25zdCB2b2lkKiBsYXN0X21lbV9tYXAoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxhc3RfbWVtX21hcF87Ci0gIH0KLSAgY29uc3Qgdm9pZCogbGFzdF9tZW1fdW5tYXAoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxhc3RfbWVtX3VubWFwXzsKLSAgfQorICBjb25zdCB2b2lkKiBsYXN0X2FsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBsYXN0X2FsbG9jYXRpb25fOyB9CisgIGNvbnN0IHZvaWQqIGxhc3RfZGVhbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbGFzdF9kZWFsbG9jYXRpb25fOyB9CisgIGNvbnN0IHZvaWQqIGxhc3RfbWVtX21hcCgpIGNvbnN0IHsgcmV0dXJuIGxhc3RfbWVtX21hcF87IH0KKyAgY29uc3Qgdm9pZCogbGFzdF9tZW1fdW5tYXAoKSBjb25zdCB7IHJldHVybiBsYXN0X21lbV91bm1hcF87IH0KIAogIHByaXZhdGU6CiAgIC8vIEJvaWxlcnBsYXRlIHRvIGRlbGVnYXRlIHN0YXRpYyBmdW5jdGlvbiBjYWxsYmFja3MgdG8gdGhlIGNsYXNzIGluc3RhbmNlLgpAQCAtMTY3LDkgKzE2Myw3IEBACiAgIH0KIAogICBzdGF0aWMgU2JNZW1vcnlSZXBvcnRlciBDcmVhdGVTYk1lbW9yeVJlcG9ydGVyKFRlc3RNZW1SZXBvcnRlciogY29udGV4dCkgewotICAgIFNiTWVtb3J5UmVwb3J0ZXIgY2IgPSB7IE9uTWFsbG9jLCBPbkRlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT25NYXBNZW0sIFNiVW5NYXBNZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCB9OworICAgIFNiTWVtb3J5UmVwb3J0ZXIgY2IgPSB7T25NYWxsb2MsIE9uRGVhbGxvYywgT25NYXBNZW0sIFNiVW5NYXBNZW0sIGNvbnRleHR9OwogICAgIHJldHVybiBjYjsKICAgfQogCkBAIC0yNDgsOSArMjQyLDcgQEAKICAgfQogCiAgIC8vIEdsb2JhbCBUZWFyZG93biBhZnRlciBsYXN0IHRlc3QgaGFzIHJ1biBpdCdzIGNvdXJzZS4KLSAgc3RhdGljIHZvaWQgVGVhckRvd25UZXN0Q2FzZSgpIHsKLSAgICBzX3Rlc3RfYWxsb2NfdHJhY2tlcl8tPlJlbW92ZUdsb2JhbEhvb2tzKCk7Ci0gIH0KKyAgc3RhdGljIHZvaWQgVGVhckRvd25UZXN0Q2FzZSgpIHsgc190ZXN0X2FsbG9jX3RyYWNrZXJfLT5SZW1vdmVHbG9iYWxIb29rcygpOyB9CiAKICAgLy8gUGVyIHRlc3Qgc2V0dXAuCiAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKQEAgLTMzNiw3ICszMjgsNiBAQAogICBFWFBFQ1RfRVFfTk9fVFJBQ0tJTkcobWVtX3JlcG9ydGVyKCktPm51bWJlcl9hbGxvY3MoKSwgMCk7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTU1BUCkKIC8vIFRlc3RzIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIFNiTWVtb3J5TWFwIGFuZCBTYk1lbW9yeVVubWFwCiAvLyB3aWxsIHJlcG9ydCBtZW1vcnkgYWxsb2NhdGlvbnMuCiBURVNUX0YoTWVtb3J5UmVwb3J0aW5nVGVzdCwgQ2FwdHVyZXNNZW1NYXBVbm1hcCkgewpAQCAtMzU5LDcgKzM1MCw2IEBACiAgIC8vIENhbGwgQ2xlYXIoKSBleHBsaWNpdGx5IGJlZm9yZSBUZWFyRG93bigpIGNoZWNrcyBudW1iZXJfYWxsb2NzXzsKICAgbWVtX3JlcG9ydGVyKCktPkNsZWFyKCk7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQogCiAvLyBUZXN0cyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBvcGVyYXRvciBuZXcvZGVsZXRlIHdpbGwgcmVwb3J0CiAvLyBtZW1vcnkgYWxsb2NhdGlvbnMuCkBAIC0zNzIsOCArMzYyLDcgQEAKICAgaW50KiBteV9pbnQgPSBuZXcgaW50KCk7CiAgIEVYUEVDVF9UUlVFX05PX1RSQUNLSU5HKG1lbV9yZXBvcnRlcigpLT5udW1iZXJfYWxsb2NzKCkgPT0gMSk7CiAKLSAgYm9vbCBpc19sYXN0X2FsbG9jYXRpb24gPQotICAgICAgbXlfaW50ID09IG1lbV9yZXBvcnRlcigpLT5sYXN0X2FsbG9jYXRpb24oKTsKKyAgYm9vbCBpc19sYXN0X2FsbG9jYXRpb24gPSBteV9pbnQgPT0gbWVtX3JlcG9ydGVyKCktPmxhc3RfYWxsb2NhdGlvbigpOwogCiAgIEVYUEVDVF9UUlVFX05PX1RSQUNLSU5HKGlzX2xhc3RfYWxsb2NhdGlvbik7CiAKQEAgLTM5NSw4ICszODQsNyBAQAogICBpbnQqIG15X2ludCA9IG5ldyAoc3RkOjpub3Rocm93KSBpbnQoKTsKICAgRVhQRUNUX0VRX05PX1RSQUNLSU5HKDEsIG1lbV9yZXBvcnRlcigpLT5udW1iZXJfYWxsb2NzKCkpOwogCi0gIGJvb2wgaXNfbGFzdF9hbGxvY2F0aW9uID0KLSAgICAgIG15X2ludCA9PSBtZW1fcmVwb3J0ZXIoKS0+bGFzdF9hbGxvY2F0aW9uKCk7CisgIGJvb2wgaXNfbGFzdF9hbGxvY2F0aW9uID0gbXlfaW50ID09IG1lbV9yZXBvcnRlcigpLT5sYXN0X2FsbG9jYXRpb24oKTsKIAogICBFWFBFQ1RfVFJVRV9OT19UUkFDS0lORyhpc19sYXN0X2FsbG9jYXRpb24pOwogCkBAIC01MDgsMTcgKzQ5NiwxMSBAQAogICAgIHNsb3RfID0gU2JUaHJlYWRDcmVhdGVMb2NhbEtleShOVUxMKTsKICAgfQogCi0gIH5UaHJlYWRMb2NhbEJvb2woKSB7Ci0gICAgU2JUaHJlYWREZXN0cm95TG9jYWxLZXkoc2xvdF8pOwotICB9CisgIH5UaHJlYWRMb2NhbEJvb2woKSB7IFNiVGhyZWFkRGVzdHJveUxvY2FsS2V5KHNsb3RfKTsgfQogCi0gIHZvaWQgU2V0RW5hYmxlZChib29sIHZhbHVlKSB7Ci0gICAgU2V0RW5hYmxlZFRocmVhZExvY2FsKHZhbHVlKTsKLSAgfQorICB2b2lkIFNldEVuYWJsZWQoYm9vbCB2YWx1ZSkgeyBTZXRFbmFibGVkVGhyZWFkTG9jYWwodmFsdWUpOyB9CiAKLSAgYm9vbCBFbmFibGVkKCkgY29uc3QgewotICAgIHJldHVybiBHZXRFbmFibGVkVGhyZWFkTG9jYWwoKTsKLSAgfQorICBib29sIEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBHZXRFbmFibGVkVGhyZWFkTG9jYWwoKTsgfQogCiAgcHJpdmF0ZToKICAgdm9pZCBTZXRFbmFibGVkVGhyZWFkTG9jYWwoYm9vbCB2YWx1ZSkgewpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9jbG9zZV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9jbG9zZV90ZXN0LmNjCmluZGV4IDViMDU4NTMuLjM0NjI5NWUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfY2xvc2VfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX2Nsb3NlX3Rlc3QuY2MKQEAgLTIwLDggKzIwLDYgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogVEVTVChTYk1pY3JvcGhvbmVDbG9zZVRlc3QsIFN1bm55RGF5Q2xvc2VBcmVDYWxsZWRNdWx0aXBsZVRpbWVzKSB7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mb19hcnJheVtrTWF4TnVtYmVyT2ZNaWNyb3Bob25lXTsKICAgaW50IGF2YWlsYWJsZV9pbmZvX2FycmF5ID0KQEAgLTc0LDkgKzcyLDYgQEAKICAgRVhQRUNUX0ZBTFNFKHN1Y2Nlc3MpOwogfQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhNSUNST1BIT05FKQotCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX2NyZWF0ZV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9jcmVhdGVfdGVzdC5jYwppbmRleCAyZTZhYWE3Li4yY2YyYzI1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX2NyZWF0ZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfY3JlYXRlX3Rlc3QuY2MKQEAgLTIxLDggKzIxLDYgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogVEVTVChTYk1pY3JvcGhvbmVDcmVhdGVUZXN0LCBTdW5ueURheU9ubHlPbmVNaWNyb3Bob25lKSB7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mb19hcnJheVtrTWF4TnVtYmVyT2ZNaWNyb3Bob25lXTsKICAgaW50IGF2YWlsYWJsZV9taWNyb3Bob25lcyA9CkBAIC0xNzUsMTcgKzE3MywxMyBAQAogICAgIC8vIFRoaXMgc2hvdWxkIHdyYXAgYXJvdW5kIHRvIGEgbmVnYXRpdmUgdmFsdWUgZHVlIHRvIGludAogICAgIC8vIG5hcnJvd2luZy4KICAgICBpbnQga0J1ZmZlclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGtCdWZmZXJTaXplNjQpOwotICAgIFNiTWljcm9waG9uZSBtaWNyb3Bob25lID0KLSAgICAgICAgU2JNaWNyb3Bob25lQ3JlYXRlKGluZm9fYXJyYXlbMF0uaWQsIGluZm9fYXJyYXlbMF0ubWF4X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAga0J1ZmZlclNpemUpOworICAgIFNiTWljcm9waG9uZSBtaWNyb3Bob25lID0gU2JNaWNyb3Bob25lQ3JlYXRlKAorICAgICAgICBpbmZvX2FycmF5WzBdLmlkLCBpbmZvX2FycmF5WzBdLm1heF9zYW1wbGVfcmF0ZV9oeiwga0J1ZmZlclNpemUpOwogICAgIEVYUEVDVF9GQUxTRShTYk1pY3JvcGhvbmVJc1ZhbGlkKG1pY3JvcGhvbmUpKTsKICAgICBTYk1pY3JvcGhvbmVEZXN0cm95KG1pY3JvcGhvbmUpOwogICB9CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfZGVzdHJveV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9kZXN0cm95X3Rlc3QuY2MKaW5kZXggMTI0NTZjZS4uNWI5YjgwNSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9kZXN0cm95X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9kZXN0cm95X3Rlc3QuY2MKQEAgLTE5LDE1ICsxOSwxMCBAQAogbmFtZXNwYWNlIG5wbGIgewogbmFtZXNwYWNlIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNSUNST1BIT05FKQotCiBURVNUKFNiTWljcm9waG9uZURlc3Ryb3lUZXN0LCBEZXN0cm95SW52YWxpZE1pY3JvcGhvbmUpIHsKICAgU2JNaWNyb3Bob25lRGVzdHJveShrU2JNaWNyb3Bob25lSW52YWxpZCk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlX3Rlc3QuY2MKaW5kZXggYTc3YWY5Ny4uZjZmYjc5MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlX3Rlc3QuY2MKQEAgLTIwLDggKzIwLDYgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogVEVTVChTYk1pY3JvcGhvbmVHZXRBdmFpbGFibGVUZXN0LCBTdW5ueURheSkgewogICBTYk1pY3JvcGhvbmVJbmZvIGluZm9fYXJyYXlba01heE51bWJlck9mTWljcm9waG9uZV07CiAgIGludCBhdmFpbGFibGVfbWljcm9waG9uZXMgPQpAQCAtNTQsOCArNTIsOCBAQAogICB9CiB9CiAKLXRlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+Ci1ib29sIElzTnVsbFRlcm1pbmF0ZWQoY29uc3QgY2hhcigmc3RyKVtOXSkgewordGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Citib29sIElzTnVsbFRlcm1pbmF0ZWQoY29uc3QgY2hhciAoJnN0cilbTl0pIHsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOOyArK2kpIHsKICAgICBpZiAoc3RyW2ldID09ICdcMCcpIHsKICAgICAgIHJldHVybiB0cnVlOwpAQCAtODUsOSArODMsNiBAQAogICB9CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfaGVscGVycy5oIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9oZWxwZXJzLmgKaW5kZXggODA3YmViMi4uODQzNTAxNiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9oZWxwZXJzLmgKKysrIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9oZWxwZXJzLmgKQEAgLTE3LDggKzE3LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9taWNyb3Bob25lLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CiBjb25zdCBpbnQga01heE51bWJlck9mTWljcm9waG9uZSA9IDIwOwpAQCAtMjcsNyArMjUsNCBAQAogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoTUlDUk9QSE9ORSkKLQogI2VuZGlmICAvLyBTVEFSQk9BUkRfTlBMQl9NSUNST1BIT05FX0hFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfaXNfc2FtcGxlX3JhdGVfc3VwcG9ydGVkX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZF90ZXN0LmNjCmluZGV4IDgwNGJkYzYuLjQyZWU2YzUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfaXNfc2FtcGxlX3JhdGVfc3VwcG9ydGVkX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWRfdGVzdC5jYwpAQCAtMjAsOCArMjAsNiBAQAogbmFtZXNwYWNlIG5wbGIgewogbmFtZXNwYWNlIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNSUNST1BIT05FKQotCiBURVNUKFNiTWljcm9waG9uZUlzU2FtcGxlUmF0ZVN1cHBvcnRlZFRlc3QsIFN1bm55RGF5KSB7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mb19hcnJheVtrTWF4TnVtYmVyT2ZNaWNyb3Bob25lXTsKICAgaW50IGF2YWlsYWJsZV9taWNyb3Bob25lcyA9CkBAIC01MCw5ICs0OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05vcm1hbGx5VXNlZFNhbXBsZVJhdGVJbkh6KSk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE1JQ1JPUEhPTkUpCi0KIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfb3Blbl90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9vcGVuX3Rlc3QuY2MKaW5kZXggZTY2ZDEyYi4uN2I1MjliYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9vcGVuX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbWljcm9waG9uZV9vcGVuX3Rlc3QuY2MKQEAgLTIwLDggKzIwLDYgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoTUlDUk9QSE9ORSkKLQogVEVTVChTYk1pY3JvcGhvbmVPcGVuVGVzdCwgU3VubnlEYXkpIHsKICAgU2JNaWNyb3Bob25lSW5mbyBpbmZvX2FycmF5W2tNYXhOdW1iZXJPZk1pY3JvcGhvbmVdOwogICBpbnQgYXZhaWxhYmxlX21pY3JvcGhvbmVzID0KQEAgLTkzLDkgKzkxLDYgQEAKICAgRVhQRUNUX0ZBTFNFKHN1Y2Nlc3MpOwogfQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhNSUNST1BIT05FKQotCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9taWNyb3Bob25lX3JlYWRfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfcmVhZF90ZXN0LmNjCmluZGV4IDU0OGQyMjkuLjZhNjk5MWMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfcmVhZF90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL21pY3JvcGhvbmVfcmVhZF90ZXN0LmNjCkBAIC0yMSw4ICsyMSw2IEBACiBuYW1lc3BhY2UgbnBsYiB7CiBuYW1lc3BhY2UgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1JQ1JPUEhPTkUpCi0KIFRFU1QoU2JNaWNyb3Bob25lUmVhZFRlc3QsIFN1bm55RGF5KSB7CiAgIFNiTWljcm9waG9uZUluZm8gaW5mb19hcnJheVtrTWF4TnVtYmVyT2ZNaWNyb3Bob25lXTsKICAgaW50IGF2YWlsYWJsZV9taWNyb3Bob25lcyA9CkBAIC0yMzYsOSArMjM0LDYgQEAKICAgRVhQRUNUX0xUKHJlYWRfYnl0ZXMsIDApOwogfQogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8Ci0gICAgICAgIC8vIFNCX0hBUyhNSUNST1BIT05FKQotCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9tdXRleF9hY3F1aXJlX3RyeV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvbXV0ZXhfYWNxdWlyZV90cnlfdGVzdC5jYwppbmRleCBlMzhlODk3Li40YzRiNDcxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9tdXRleF9hY3F1aXJlX3RyeV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL211dGV4X2FjcXVpcmVfdHJ5X3Rlc3QuY2MKQEAgLTE2LDE2ICsxNiwxMyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpbmNsdWRlICJzdGFyYm9hcmQvbnBsYi90aHJlYWRfaGVscGVycy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CiBuYW1lc3BhY2UgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIHN0cnVjdCBUZXN0Q29udGV4dCB7CiAgIGV4cGxpY2l0IFRlc3RDb250ZXh0KFNiTXV0ZXgqIG11dGV4KSA6IHdhc19sb2NrZWRfKGZhbHNlKSwgbXV0ZXhfKG11dGV4KSB7fQogICBib29sIHdhc19sb2NrZWRfOwpAQCAtMzgsNyArMzUsNiBAQAogICAgICAgKFNiTXV0ZXhBY3F1aXJlVHJ5KGNvbnRleHQtPm11dGV4XykgPT0ga1NiTXV0ZXhBY3F1aXJlZCk7CiAgIHJldHVybiBOVUxMOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiBURVNUKFNiTXV0ZXhBY3F1aXJlVHJ5VGVzdCwgU3VubnlEYXlVbmNvbnRlbmRlZCkgewogICBTYk11dGV4IG11dGV4OwpAQCAtNjYsNyArNjIsNiBAQAogICBFWFBFQ1RfRVEocmVzdWx0LCBrU2JNdXRleEFjcXVpcmVkKTsKICAgRVhQRUNUX1RSVUUoU2JNdXRleElzU3VjY2VzcyhyZXN1bHQpKTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIFRlc3RDb250ZXh0IGNvbnRleHQoJm11dGV4KTsKICAgU2JUaHJlYWQgdGhyZWFkID0KICAgICAgIFNiVGhyZWFkQ3JlYXRlKDAsIGtTYlRocmVhZE5vUHJpb3JpdHksIGtTYlRocmVhZE5vQWZmaW5pdHksIHRydWUsCkBAIC03NSwxMiArNzAsNiBAQAogICBFWFBFQ1RfVFJVRShTYlRocmVhZElzVmFsaWQodGhyZWFkKSk7CiAgIEVYUEVDVF9UUlVFKFNiVGhyZWFkSm9pbih0aHJlYWQsIE5VTEwpKTsKICAgRVhQRUNUX0ZBTFNFKGNvbnRleHQud2FzX2xvY2tlZF8pOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICByZXN1bHQgPSBTYk11dGV4QWNxdWlyZVRyeSgmbXV0ZXgpOwotICBFWFBFQ1RfRVEocmVzdWx0LCBrU2JNdXRleEJ1c3kpOwotICBFWFBFQ1RfRkFMU0UoU2JNdXRleElzU3VjY2VzcyhyZXN1bHQpKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogICBFWFBFQ1RfVFJVRShTYk11dGV4UmVsZWFzZSgmbXV0ZXgpKTsKICAgRVhQRUNUX1RSVUUoU2JNdXRleERlc3Ryb3koJm11dGV4KSk7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9tdXRleF9jcmVhdGVfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL211dGV4X2NyZWF0ZV90ZXN0LmNjCmluZGV4IGY1MmJhMDguLjY4Yzk2ZjMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL211dGV4X2NyZWF0ZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL211dGV4X2NyZWF0ZV90ZXN0LmNjCkBAIC0xNiwxMCArMTYsOCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZGl0aW9uX3ZhcmlhYmxlLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKIAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CkBAIC00OSwxMyArNDcsMTMgQEAKIH0KIAogVEVTVChTYk11dGV4Q3JlYXRlVGVzdCwgU3VubnlEYXlBQnVuY2hBdE9uY2UpIHsKLSAgU2JNdXRleCBtdXRpY2VzW2tBQnVuY2hdOworICBTYk11dGV4IG11dGV4ZXNba0FCdW5jaF07CiAgIGZvciAoaW50IGkgPSAwOyBpIDwga0FCdW5jaDsgKytpKSB7Ci0gICAgRVhQRUNUX1RSVUUoU2JNdXRleENyZWF0ZSgmbXV0aWNlc1tpXSkpOworICAgIEVYUEVDVF9UUlVFKFNiTXV0ZXhDcmVhdGUoJm11dGV4ZXNbaV0pKTsKICAgfQogCiAgIGZvciAoaW50IGkgPSAwOyBpIDwga0FCdW5jaDsgKytpKSB7Ci0gICAgRVhQRUNUX1RSVUUoU2JNdXRleERlc3Ryb3koJm11dGljZXNbaV0pKTsKKyAgICBFWFBFQ1RfVFJVRShTYk11dGV4RGVzdHJveSgmbXV0ZXhlc1tpXSkpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL211dGV4X2Rlc3Ryb3lfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL211dGV4X2Rlc3Ryb3lfdGVzdC5jYwppbmRleCA1ZGY4YTNhLi45NmZhMTIwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9tdXRleF9kZXN0cm95X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvbXV0ZXhfZGVzdHJveV90ZXN0LmNjCkBAIC0yNywyNCArMjcsOCBAQAogICBFWFBFQ1RfVFJVRShTYk11dGV4RGVzdHJveSgmbXV0ZXgpKTsKIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAvLyBEZXN0cm95aW5nIGEgbXV0ZXggdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCBpcyB1bmRlZmluZWQgYmVoYXZpb3IKIC8vIGFuZCBjYW5ub3QgYmUgdGVzdGVkLgotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotVEVTVChTYk11dGV4RGVzdHJveVRlc3QsIFJhaW55RGF5RGVzdHJveUhlbGQpIHsKLSAgU2JNdXRleCBtdXRleDsKLSAgRVhQRUNUX1RSVUUoU2JNdXRleENyZWF0ZSgmbXV0ZXgpKTsKLQotICBTYk11dGV4UmVzdWx0IHJlc3VsdCA9IFNiTXV0ZXhBY3F1aXJlKCZtdXRleCk7Ci0gIEVYUEVDVF9FUShyZXN1bHQsIGtTYk11dGV4QWNxdWlyZWQpOwotICBFWFBFQ1RfVFJVRShTYk11dGV4SXNTdWNjZXNzKHJlc3VsdCkpOwotCi0gIEVYUEVDVF9GQUxTRShTYk11dGV4RGVzdHJveSgmbXV0ZXgpKTsKLSAgRVhQRUNUX1RSVUUoU2JNdXRleFJlbGVhc2UoJm11dGV4KSk7Ci0gIEVYUEVDVF9UUlVFKFNiTXV0ZXhEZXN0cm95KCZtdXRleCkpOwotfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBURVNUKFNiTXV0ZXhEZXN0cm95VGVzdCwgUmFpbnlEYXlOdWxsKSB7CiAgIEVYUEVDVF9GQUxTRShTYk11dGV4RGVzdHJveShOVUxMKSk7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9ucGxiLmd5cCBiL3N0YXJib2FyZC9ucGxiL25wbGIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDlmZTY4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL25wbGIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIE5QTEIgaXMgIk5vIFBsYXRmb3JtIExlZnQgQmVoaW5kLCIgdGhlIGNlcnRpZmljYXRpb24gdGVzdCBzdWl0ZSBmb3IgU3RhcmJvYXJkCi0jIGltcGxlbWVudGF0aW9ucy4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFs0MTAwLCA0MTg5LCA0NDU2XSwKLSAgICAgICd0YXJnZXRfbmFtZSc6ICducGxiJywKLSAgICAgICd0eXBlJzogJzwoZ3Rlc3RfdGFyZ2V0X3R5cGUpJywKLSAgICAgICMgRW5hYmxlIGV4Y2VwdGlvbnMgdG8gdGVzdCBub3Rocm93IGRlbGV0ZSBvcGVyYXRvci4KLSAgICAgICdjZmxhZ3NfY2MhJzogWyctZm5vLWV4Y2VwdGlvbnMnIF0sCi0gICAgICAnY2ZsYWdzX2NjJzogWyctZmV4Y2VwdGlvbnMnIF0sCi0gICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAgICAgJy9FSHNjJywgICMgQysrIGV4Y2VwdGlvbnMKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgfSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgYWxsb3dzIHRoZSB0ZXN0cyB0byBpbmNsdWRlIGludGVybmFsIG9ubHkgaGVhZGVyIGZpbGVzLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC90ZXN0aW5nL2Zha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvdGVzdGluZy9mYWtlX2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIuaCcsCi0gICAgICAgICdhY2Nlc3NpYmlsaXR5X3Rlc3QuY2MnLAotICAgICAgICAnYWxpZ25fdGVzdC5jYycsCi0gICAgICAgICdhdG9taWNfYmFzZV90ZXN0LmNjJywKLSAgICAgICAgJ2F0b21pY190ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfY3JlYXRlX3Rlc3QuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19kZXN0cm95X3Rlc3QuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19nZXRfbWF4X2NoYW5uZWxzX3Rlc3QuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19nZXRfbWluX2J1ZmZlcl9zaXplX2luX2ZyYW1lc190ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvX3NpbmtfZ2V0X25lYXJlc3Rfc3VwcG9ydGVkX3NhbXBsZV9mcmVxdWVuY3lfdGVzdC5jYycsCi0gICAgICAgICdhdWRpb19zaW5rX2hlbHBlcnMuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19oZWxwZXJzLmgnLAotICAgICAgICAnYXVkaW9fc2lua19pc19hdWRpb19mcmFtZV9zdG9yYWdlX3R5cGVfc3VwcG9ydGVkX3Rlc3QuY2MnLAotICAgICAgICAnYXVkaW9fc2lua19pc19hdWRpb19zYW1wbGVfdHlwZV9zdXBwb3J0ZWRfdGVzdC5jYycsCi0gICAgICAgICdhdWRpb19zaW5rX3Rlc3QuY2MnLAotICAgICAgICAnYnl0ZV9zd2FwX3Rlc3QuY2MnLAotICAgICAgICAnY2hhcl9pc19zaWduZWRfdGVzdC5jYycsCi0gICAgICAgICdjaGFyYWN0ZXJfaXNfYWxwaGFudW1lcmljX3Rlc3QuY2MnLAotICAgICAgICAnY2hhcmFjdGVyX2lzX2RpZ2l0X3Rlc3QuY2MnLAotICAgICAgICAnY2hhcmFjdGVyX2lzX2hleF9kaWdpdF90ZXN0LmNjJywKLSAgICAgICAgJ2NoYXJhY3Rlcl9pc19zcGFjZV90ZXN0LmNjJywKLSAgICAgICAgJ2NoYXJhY3Rlcl9pc191cHBlcl90ZXN0LmNjJywKLSAgICAgICAgJ2NoYXJhY3Rlcl90b19sb3dlcl90ZXN0LmNjJywKLSAgICAgICAgJ2NoYXJhY3Rlcl90b191cHBlcl90ZXN0LmNjJywKLSAgICAgICAgJ2NvbmRpdGlvbl92YXJpYWJsZV9icm9hZGNhc3RfdGVzdC5jYycsCi0gICAgICAgICdjb25kaXRpb25fdmFyaWFibGVfY3JlYXRlX3Rlc3QuY2MnLAotICAgICAgICAnY29uZGl0aW9uX3ZhcmlhYmxlX2Rlc3Ryb3lfdGVzdC5jYycsCi0gICAgICAgICdjb25kaXRpb25fdmFyaWFibGVfc2lnbmFsX3Rlc3QuY2MnLAotICAgICAgICAnY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXRfdGVzdC5jYycsCi0gICAgICAgICdjb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZF90ZXN0LmNjJywKLSAgICAgICAgJ2NvbmZpZ3VyYXRpb25fdGVzdC5jYycsCi0gICAgICAgICdjcHVfZmVhdHVyZXNfZ2V0X3Rlc3QuY2MnLAotICAgICAgICAnY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lcl90ZXN0LmNjJywKLSAgICAgICAgJ2NyeXB0b2dyYXBoeV9oZWxwZXJzLmNjJywKLSAgICAgICAgJ2NyeXB0b2dyYXBoeV9oZWxwZXJzLmgnLAotICAgICAgICAnY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybV90ZXN0LmNjJywKLSAgICAgICAgJ2NyeXB0b2dyYXBoeV90cmFuc2Zvcm1fZ2NtX3Rlc3QuY2MnLAotICAgICAgICAnZGlyZWN0b3J5X2Nhbl9vcGVuX3Rlc3QuY2MnLAotICAgICAgICAnZGlyZWN0b3J5X2Nsb3NlX3Rlc3QuY2MnLAotICAgICAgICAnZGlyZWN0b3J5X2NyZWF0ZV90ZXN0LmNjJywKLSAgICAgICAgJ2RpcmVjdG9yeV9nZXRfbmV4dF90ZXN0LmNjJywKLSAgICAgICAgJ2RpcmVjdG9yeV9vcGVuX3Rlc3QuY2MnLAotICAgICAgICAnZG91YmxlX2Fic29sdXRlX3Rlc3QuY2MnLAotICAgICAgICAnZG91YmxlX2V4cG9uZW50X3Rlc3QuY2MnLAotICAgICAgICAnZG91YmxlX2Zsb29yX3Rlc3QuY2MnLAotICAgICAgICAnZG91YmxlX2lzX2Zpbml0ZV90ZXN0LmNjJywKLSAgICAgICAgJ2RvdWJsZV9pc19uYW5fdGVzdC5jYycsCi0gICAgICAgICdkcm1fY3JlYXRlX3N5c3RlbV90ZXN0LmNjJywKLSAgICAgICAgJ2RybV9nZXRfbWV0cmljc190ZXN0LmNjJywKLSAgICAgICAgJ2RybV9oZWxwZXJzLmNjJywKLSAgICAgICAgJ2RybV9oZWxwZXJzLmgnLAotICAgICAgICAnZHJtX2lzX3NlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGFibGVfdGVzdC5jYycsCi0gICAgICAgICdkcm1fc2Vzc2lvbl90ZXN0LmNjJywKLSAgICAgICAgJ2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlX3Rlc3QuY2MnLAotICAgICAgICAnZWdsX3Rlc3QuY2MnLAotICAgICAgICAnZXh0ZXJuX2NfdGVzdC5jYycsCi0gICAgICAgICdmaWxlX2F0b21pY19yZXBsYWNlX3Rlc3QuY2MnLAotICAgICAgICAnZmlsZV9jYW5fb3Blbl90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVfY2xvc2VfdGVzdC5jYycsCi0gICAgICAgICdmaWxlX2RlbGV0ZV9yZWN1cnNpdmVfdGVzdC5jYycsCi0gICAgICAgICdmaWxlX2RlbGV0ZV90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVfZ2V0X2luZm9fdGVzdC5jYycsCi0gICAgICAgICdmaWxlX2dldF9wYXRoX2luZm9fdGVzdC5jYycsCi0gICAgICAgICdmaWxlX2hlbHBlcnMuY2MnLAotICAgICAgICAnZmlsZV9tb2RlX3N0cmluZ190b19mbGFnc190ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVfb3Blbl90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVfcmVhZF90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGVfcmVhZF93cml0ZV9hbGxfdGVzdC5jYycsCi0gICAgICAgICdmaWxlX3NlZWtfdGVzdC5jYycsCi0gICAgICAgICdmaWxlX3RydW5jYXRlX3Rlc3QuY2MnLAotICAgICAgICAnZmlsZV93cml0ZV90ZXN0LmNjJywKLSAgICAgICAgJ2ZsYXRfbWFwX3Rlc3QuY2MnLAotICAgICAgICAnZ2xlc190ZXN0LmNjJywKLSAgICAgICAgJ211cm11cmhhc2gyX3Rlc3QuY2MnLAotICAgICAgICAnaW1hZ2VfdGVzdC5jYycsCi0gICAgICAgICdpbmNsdWRlX2FsbC5jJywKLSAgICAgICAgJ2luY2x1ZGVfYWxsX3Rvby5jJywKLSAgICAgICAgJ2tleV90ZXN0LmNjJywKLSAgICAgICAgJ2xvZ19mbHVzaF90ZXN0LmNjJywKLSAgICAgICAgJ2xvZ19mb3JtYXRfdGVzdC5jYycsCi0gICAgICAgICdsb2dfaXNfdHR5X3Rlc3QuY2MnLAotICAgICAgICAnbG9nX3Jhd19kdW1wX3N0YWNrX3Rlc3QuY2MnLAotICAgICAgICAnbG9nX3Jhd190ZXN0LmNjJywKLSAgICAgICAgJ2xvZ190ZXN0LmNjJywKLSAgICAgICAgIyBUT0RPOiBTZXBhcmF0ZSBmdW5jdGlvbnMgdGVzdGVkIGJ5IG1lZGlhIGJ1ZmZlciB0ZXN0IGludG8gbXVsdGlwbGUKLSAgICAgICAgIyBmaWxlcy4KLSAgICAgICAgJ21lZGlhX2J1ZmZlcl90ZXN0LmNjJywKLSAgICAgICAgJ21lZGlhX2Nhbl9wbGF5X21pbWVfYW5kX2tleV9zeXN0ZW1fdGVzdC5jYycsCi0gICAgICAgICdtZWRpYV9jYW5fcGxheV9taW1lX2FuZF9rZXlfc3lzdGVtX3Rlc3RfaGVscGVycy5oJywKLSAgICAgICAgJ21lZGlhX2NvbmZpZ3VyYXRpb25fdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfYWxpZ25fdG9fcGFnZV9zaXplX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X2FsbG9jYXRlX2FsaWduZWRfdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfYWxsb2NhdGVfdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfY29tcGFyZV90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9jb3B5X3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X2RlYWxsb2NhdGVfYWxpZ25lZF90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9kZWFsbG9jYXRlX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X2ZpbmRfYnl0ZV90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9nZXRfc3RhY2tfYm91bmRzX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X2lzX3plcm9fdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfbWFwX3Rlc3QuY2MnLAotICAgICAgICAnbWVtb3J5X21vdmVfdGVzdC5jYycsCi0gICAgICAgICdtZW1vcnlfcmVhbGxvY2F0ZV90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9yZXBvcnRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9zZXRfdGVzdC5jYycsCi0gICAgICAgICdtaWNyb3Bob25lX2Nsb3NlX3Rlc3QuY2MnLAotICAgICAgICAnbWljcm9waG9uZV9jcmVhdGVfdGVzdC5jYycsCi0gICAgICAgICdtaWNyb3Bob25lX2Rlc3Ryb3lfdGVzdC5jYycsCi0gICAgICAgICdtaWNyb3Bob25lX2dldF9hdmFpbGFibGVfdGVzdC5jYycsCi0gICAgICAgICdtaWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZF90ZXN0LmNjJywKLSAgICAgICAgJ21pY3JvcGhvbmVfb3Blbl90ZXN0LmNjJywKLSAgICAgICAgJ21pY3JvcGhvbmVfcmVhZF90ZXN0LmNjJywKLSAgICAgICAgJ211dGV4X2FjcXVpcmVfdGVzdC5jYycsCi0gICAgICAgICdtdXRleF9hY3F1aXJlX3RyeV90ZXN0LmNjJywKLSAgICAgICAgJ211dGV4X2NyZWF0ZV90ZXN0LmNjJywKLSAgICAgICAgJ211dGV4X2Rlc3Ryb3lfdGVzdC5jYycsCi0gICAgICAgICdvbmNlX3Rlc3QuY2MnLAotICAgICAgICAnb3B0aW9uYWxfdGVzdC5jYycsCi0gICAgICAgICdwbGF5ZXJfY3JlYXRlX3Rlc3QuY2MnLAotICAgICAgICAncGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuY2MnLAotICAgICAgICAncGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuaCcsCi0gICAgICAgICdwbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZV90ZXN0LmNjJywKLSAgICAgICAgJ3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWRfdGVzdC5jYycsCi0gICAgICAgICdwbGF5ZXJfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3BsYXllcl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICdwbGF5ZXJfd3JpdGVfc2FtcGxlX3Rlc3QuY2MnLAotICAgICAgICAncmFuZG9tX2hlbHBlcnMuY2MnLAotICAgICAgICAncmVjdXJzaXZlX211dGV4X3Rlc3QuY2MnLAotICAgICAgICAncndsb2NrX3Rlc3QuY2MnLAotICAgICAgICAnc2VtYXBob3JlX3Rlc3QuY2MnLAotICAgICAgICAnc29ja2V0X2FjY2VwdF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9iaW5kX3Rlc3QuY2MnLAotICAgICAgICAnc29ja2V0X2NsZWFyX2xhc3RfZXJyb3JfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfY29ubmVjdF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9jcmVhdGVfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfZGVzdHJveV90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9nZXRfaW50ZXJmYWNlX2FkZHJlc3NfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfZ2V0X2xhc3RfZXJyb3JfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfZ2V0X2xvY2FsX2FkZHJlc3NfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfaGVscGVycy5jYycsCi0gICAgICAgICdzb2NrZXRfaXNfY29ubmVjdGVkX2FuZF9pZGxlX3Rlc3QuY2MnLAotICAgICAgICAnc29ja2V0X2lzX2Nvbm5lY3RlZF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9saXN0ZW5fdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfcmVjZWl2ZV9mcm9tX3Rlc3QuY2MnLAotICAgICAgICAnc29ja2V0X3Jlc29sdmVfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfc2VuZF90b190ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF9zZXRfb3B0aW9uc190ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF93YWl0ZXJfYWRkX3Rlc3QuY2MnLAotICAgICAgICAnc29ja2V0X3dhaXRlcl9jcmVhdGVfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfd2FpdGVyX2Rlc3Ryb3lfdGVzdC5jYycsCi0gICAgICAgICdzb2NrZXRfd2FpdGVyX3JlbW92ZV90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF93YWl0ZXJfd2FpdF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF93YWl0ZXJfd2FpdF90aW1lZF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF93YWl0ZXJfd2FrZV91cF90ZXN0LmNjJywKLSAgICAgICAgJ3NvY2tldF93cmFwcGVyX3Rlc3QuY2MnLAotICAgICAgICAnc3BlZWNoX3N5bnRoZXNpc19iYXNpY190ZXN0LmNjJywKLSAgICAgICAgJ3N0YXRlX21hY2hpbmVfdGVzdC5jYycsCi0gICAgICAgICdzdG9yYWdlX2Nsb3NlX3JlY29yZF90ZXN0LmNjJywKLSAgICAgICAgJ3N0b3JhZ2VfZGVsZXRlX3JlY29yZF90ZXN0LmNjJywKLSAgICAgICAgJ3N0b3JhZ2VfZ2V0X3JlY29yZF9zaXplX3Rlc3QuY2MnLAotICAgICAgICAnc3RvcmFnZV9vcGVuX3JlY29yZF90ZXN0LmNjJywKLSAgICAgICAgJ3N0b3JhZ2VfcmVhZF9yZWNvcmRfdGVzdC5jYycsCi0gICAgICAgICdzdG9yYWdlX3dyaXRlX3JlY29yZF90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19jb21wYXJlX2FsbF90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19jb21wYXJlX25vX2Nhc2Vfbl90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19jb21wYXJlX25vX2Nhc2VfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfY29tcGFyZV90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19jb21wYXJlX3dpZGVfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfY29uY2F0X3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX2NvbmNhdF93aWRlX3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX2NvcHlfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfY29weV93aWRlX3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX2R1cGxpY2F0ZV90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19maW5kX2NoYXJhY3Rlcl90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19maW5kX2xhc3RfY2hhcmFjdGVyX3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX2ZpbmRfc3RyaW5nX3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX2Zvcm1hdF90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19mb3JtYXRfd2lkZV90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZ19wYXJzZV9kb3VibGVfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfcGFyc2Vfc2lnbmVkX2ludGVnZXJfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfcGFyc2VfdWludDY0X3Rlc3QuY2MnLAotICAgICAgICAnc3RyaW5nX3BhcnNlX3Vuc2lnbmVkX2ludGVnZXJfdGVzdC5jYycsCi0gICAgICAgICdzdHJpbmdfc2Nhbl90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9iaW5hcnlfc2VhcmNoX3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX2NsZWFyX2xhc3RfZXJyb3JfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X2Vycm9yX3N0cmluZ190ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9nZXRfY29ubmVjdGlvbl90eXBlX3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX2dldF9leHRlbnNpb25fdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X2xhc3RfZXJyb3JfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X2xvY2FsZV9pZF90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnNfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3BhdGhfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3Byb3BlcnR5X3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX2dldF9yYW5kb21fZGF0YV90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9nZXRfcmFuZG9tX3VpbnQ2NF90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9nZXRfc3RhY2tfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3RvdGFsX2NwdV9tZW1vcnlfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3RvdGFsX2dwdV9tZW1vcnlfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X3VzZWRfY3B1X21lbW9yeV90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9nZXRfdXNlZF9ncHVfbWVtb3J5X3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX2hhc19jYXBhYmlsaXR5X3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX2hpZGVfc3BsYXNoX3NjcmVlbl90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZF90ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9uZXR3b3JrX3N0YXR1c190ZXN0LmNjJywKLSAgICAgICAgJ3N5c3RlbV9zb3J0X3Rlc3QuY2MnLAotICAgICAgICAnc3lzdGVtX3NpZ25fd2l0aF9jZXJ0aWZpY2F0aW9uX3NlY3JldF9rZXlfdGVzdC5jYycsCi0gICAgICAgICdzeXN0ZW1fc3ltYm9saXplX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkX2NyZWF0ZV90ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF9kZXRhY2hfdGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRfZ2V0X2N1cnJlbnRfdGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRfZ2V0X2lkX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkX2dldF9uYW1lX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkX2hlbHBlcnMuY2MnLAotICAgICAgICAndGhyZWFkX2lzX2VxdWFsX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkX2pvaW5fdGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRfbG9jYWxfdmFsdWVfdGVzdC5jYycsCi0gICAgICAgICd0aHJlYWRfc2FtcGxlcl90ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF9zZXRfbmFtZV90ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF9zbGVlcF90ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF90ZXN0LmNjJywKLSAgICAgICAgJ3RocmVhZF95aWVsZF90ZXN0LmNjJywKLSAgICAgICAgJ3RpbWVfZ2V0X21vbm90b25pY19ub3dfdGVzdC5jYycsCi0gICAgICAgICd0aW1lX2dldF9ub3dfdGVzdC5jYycsCi0gICAgICAgICd0aW1lX25hcnJvd190ZXN0LmNjJywKLSAgICAgICAgJ3RpbWVfem9uZV9nZXRfY3VycmVudF90ZXN0LmNjJywKLSAgICAgICAgJ3RpbWVfem9uZV9nZXRfbmFtZV90ZXN0LmNjJywKLSAgICAgICAgJ3VpX25hdmlnYXRpb25fdGVzdC5jYycsCi0gICAgICAgICd1bmRlZmluZWRfYmVoYXZpb3JfdGVzdC5jYycsCi0gICAgICAgICd1bnNhZmVfbWF0aF90ZXN0LmNjJywKLSAgICAgICAgJ3VybF9wbGF5ZXJfY3JlYXRlX3Rlc3QuY2MnLAotICAgICAgICAndXNlcl9nZXRfY3VycmVudF90ZXN0LmNjJywKLSAgICAgICAgJ3VzZXJfZ2V0X3Byb3BlcnR5X3Rlc3QuY2MnLAotICAgICAgICAndXNlcl9nZXRfc2lnbmVkX2luX3Rlc3QuY2MnLAotICAgICAgICAnd2luZG93X2NyZWF0ZV90ZXN0LmNjJywKLSAgICAgICAgJ3dpbmRvd19kZXN0cm95X3Rlc3QuY2MnLAotICAgICAgICAnd2luZG93X2dldF9kaWFnb25hbF9zaXplX2luX2luY2hlc190ZXN0LmNjJywKLSAgICAgICAgJ3dpbmRvd19nZXRfcGxhdGZvcm1faGFuZGxlX3Rlc3QuY2MnLAotICAgICAgICAnd2luZG93X2dldF9zaXplX3Rlc3QuY2MnLAotICAgICAgICAnPEAoc2FiaV9zb3VyY2VzKScsCi0gICAgICAgICMgSW5jbHVkZSBwcml2YXRlIGMgaGVhZGVycywgaWYgcHJlc2VudC4KLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoREVQVEgpL3N0YXJib2FyZC9wcml2YXRlL25wbGIvIGluY2x1ZGVfYWxsX3ByaXZhdGUuYyknLAotICAgICAgICAjIEluY2x1ZGUgcHJpdmF0ZSB0ZXN0cywgaWYgcHJlc2VudC4KLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoREVQVEgpL3N0YXJib2FyZC9wcml2YXRlL25wbGIvICpfdGVzdC5jYyknLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9ucGxiL2NvbXBpbGVyX2NvbXBsaWFuY2UvY29tcGlsZXJfY29tcGxpYW5jZS5neXA6Y3BwMTRfc3VwcG9ydGVkJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhLmd5cDptZWRpYV91dGlsJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXIuZ3lwOnBsYXllcl9jb3B5X3Rlc3RfZGF0YScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDp2aWRlb19kbXAnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJ2NvcHlfbnBsYl9maWxlX3Rlc3RzX2RhdGEnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3NiX2V2ZXJncmVlbiAhPSAxJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgIyBTZWdmYXVsdHMgb3IgY2F1c2VzIHVucmVzb2x2ZWQgc3ltYm9scyBmb3IgQ29iYWx0IEV2ZXJncmVlbi4KLSAgICAgICAgICAgICdtZWRpYV9zZXRfYXVkaW9fd3JpdGVfZHVyYXRpb25fdGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZGlzYWJsZV9jcHAxN19hdWRpdCA9PSAwJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL25wbGIvY29tcGlsZXJfY29tcGxpYW5jZS9jb21waWxlcl9jb21wbGlhbmNlLmd5cDpjcHAxN19zdXBwb3J0ZWQnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2dsX3R5cGUgIT0gIm5vbmUiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIFNiUGxheWVyVGVzdCBkZXBlbmRzIG9uCi0gICAgICAgICAgICAgIyBGYWtlR3JhcGhpY3NDb250ZXh0UHJvdmlkZXIgd2hpY2ggZGVwZW5kcyBvbiBFR0wgYW5kIEdMRVMuCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXMuZ3lwOmVnbF9hbmRfZ2xlcycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL25wbGIvc2FiaS9zYWJpLmd5cGknIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9ucGxiX2ZpbGVfdGVzdHNfZGF0YScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb250ZW50X3Rlc3RfaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9ucGxiL3Rlc3RkYXRhL2ZpbGVfdGVzdHMvZGlyX3dpdGhfZmlsZXMnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi90ZXN0ZGF0YS9maWxlX3Rlc3RzL2Rpcl93aXRoX29ubHlfc3ViZGlyJywKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL25wbGIvdGVzdGRhdGEvZmlsZV90ZXN0cy9maWxlMDEnLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi90ZXN0ZGF0YS9maWxlX3Rlc3RzL2ZpbGVfd2l0aF9sb25nX25hbWVfYW5kX2NvbnRlbnRzX2Zvcl9zZWVrX3Rlc3RpbmdfMTIzNDU2Nzg5MCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdzdGFyYm9hcmQvbnBsYi9maWxlX3Rlc3RzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaScgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICducGxiX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICducGxiJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ25wbGInLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9kZXBsb3kuZ3lwaScgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzL2NoZWNrcy5oIGIvc3RhcmJvYXJkL25wbGIvbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzL2NoZWNrcy5oCmluZGV4IGQxOTcwNjQuLjA0MmU1YzEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cy9jaGVja3MuaAorKysgYi9zdGFyYm9hcmQvbnBsYi9ucGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHMvY2hlY2tzLmgKQEAgLTE5LDIwICsxOSw2IEBACiAKICNpZiBTQl9JUyhFVkVSR1JFRU5fQ09NUEFUSUJMRSkKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSNlcnJvciAiRXZlcmdyZWVuIHJlcXVpcmVzIHN0YXJib2FyZCB2ZXJzaW9uIDEyIG9yIGhpZ2hlciEiCi0jZW5kaWYKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0lTKEVWRVJHUkVFTl9DT01QQVRJQkxFX0xJVEUpCi0jZXJyb3IgXAotICAgICJFdmVyZ3JlZW4gcmVxdWlyZXMgc3VwcG9ydCBmb3IgdGhlIGtTYlN5c3RlbVBhdGhTdG9yYWdlRGlyZWN0b3J5IiBcCi0gICAgIiBzeXN0ZW0gcHJvcGVydHkhIgotI2VuZGlmCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0jZXJyb3IgIkV2ZXJncmVlbiByZXF1aXJlcyBtZW1vcnkgbWFwcGluZyEiCi0jZW5kaWYKLQogI2lmICFTQl9DQU4oTUFQX0VYRUNVVEFCTEVfTUVNT1JZKQogI2Vycm9yICJFdmVyZ3JlZW4gcmVxdWlyZXMgZXhlY3V0YWJsZSBtZW1vcnkgc3VwcG9ydCEiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cy9ucGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHMuZ3lwIGIvc3RhcmJvYXJkL25wbGIvbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzL25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMmI5YTczLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cy9ucGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NoZWNrcy5oJywKLSAgICAgICAgJ2NyYXNocGFkX2NvbmZpZ190ZXN0LmNjJywKLSAgICAgICAgJ2V4ZWN1dGFibGVfbWVtb3J5X3Rlc3QuY2MnLAotICAgICAgICAnZm9udHNfdGVzdC5jYycsCi0gICAgICAgICdzYWJpX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi90ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlX2xpdGUhPTEnLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnaWN1X3Rlc3QuY2MnLAotICAgICAgICAgICAgJ21heF9maWxlX25hbWVfdGVzdC5jYycsCi0gICAgICAgICAgICAnc3RvcmFnZV90ZXN0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICducGxiX2V2ZXJncmVlbl9jb21wYXRfdGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAnbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL29uY2VfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL29uY2VfdGVzdC5jYwppbmRleCA5MGU1NmVkLi42MmY3MzYzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9vbmNlX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvb25jZV90ZXN0LmNjCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL25wbGIvdGhyZWFkX2hlbHBlcnMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogI2luY2x1ZGUgInRlc3RpbmcvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oIgogCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGlvbl9wYXJhbV9oZWxwZXJzLmNjIGIvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuY2MKaW5kZXggMjZjNmMwZi4uNjVlZGRkZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuY2MKQEAgLTIzLDEwICsyMyw3IEBACiAgIFNiTWVkaWFBdWRpb1NhbXBsZUluZm8gYXVkaW9fc2FtcGxlX2luZm8gPSB7fTsKIAogICBhdWRpb19zYW1wbGVfaW5mby5jb2RlYyA9IGNvZGVjOwotCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIGF1ZGlvX3NhbXBsZV9pbmZvLm1pbWUgPSAiIjsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAKICAgc3dpdGNoIChjb2RlYykgewogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjTm9uZToKQEAgLTEwNiwxMSArMTAzLDggQEAKIAogICB2aWRlb19zYW1wbGVfaW5mby5jb2RlYyA9IGNvZGVjOwogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIHZpZGVvX3NhbXBsZV9pbmZvLm1pbWUgPSAiIjsKICAgdmlkZW9fc2FtcGxlX2luZm8ubWF4X3ZpZGVvX2NhcGFiaWxpdGllcyA9ICIiOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogICB2aWRlb19zYW1wbGVfaW5mby5jb2xvcl9tZXRhZGF0YS5wcmltYXJpZXMgPSBrU2JNZWRpYVByaW1hcnlJZEJ0NzA5OwogICB2aWRlb19zYW1wbGVfaW5mby5jb2xvcl9tZXRhZGF0YS50cmFuc2ZlciA9IGtTYk1lZGlhVHJhbnNmZXJJZEJ0NzA5OwogICB2aWRlb19zYW1wbGVfaW5mby5jb2xvcl9tZXRhZGF0YS5tYXRyaXggPSBrU2JNZWRpYU1hdHJpeElkQnQ3MDk7CkBAIC0xMjIsOCArMTE2LDYgQEAKICAgcmV0dXJuIHZpZGVvX3NhbXBsZV9pbmZvOwogfQogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KIFNiUGxheWVyQ3JlYXRpb25QYXJhbSBDcmVhdGVQbGF5ZXJDcmVhdGlvblBhcmFtKFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMpIHsKICAgU2JQbGF5ZXJDcmVhdGlvblBhcmFtIGNyZWF0aW9uX3BhcmFtID0ge307CkBAIC0xMzYsNyArMTI4LDUgQEAKICAgcmV0dXJuIGNyZWF0aW9uX3BhcmFtOwogfQogCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuaCBiL3N0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGlvbl9wYXJhbV9oZWxwZXJzLmgKaW5kZXggOGNiMzI3ZC4uNTA3NTViZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvcGxheWVyX2NyZWF0aW9uX3BhcmFtX2hlbHBlcnMuaAorKysgYi9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfY3JlYXRpb25fcGFyYW1faGVscGVycy5oCkBAIC0yNSwxMSArMjUsOCBAQAogCiBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvIENyZWF0ZUF1ZGlvU2FtcGxlSW5mbyhTYk1lZGlhQXVkaW9Db2RlYyBjb2RlYyk7CiBTYk1lZGlhVmlkZW9TYW1wbGVJbmZvIENyZWF0ZVZpZGVvU2FtcGxlSW5mbyhTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYyk7Ci0KLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIFNiUGxheWVyQ3JlYXRpb25QYXJhbSBDcmVhdGVQbGF5ZXJDcmVhdGlvblBhcmFtKFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMpOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZV90ZXN0LmNjCmluZGV4IDgzNzMwYTIuLjQwZjY4ZjUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGVfdGVzdC5jYwpAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9ucGxiL3BsYXllcl9jcmVhdGlvbl9wYXJhbV9oZWxwZXJzLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2UgbnBsYiB7CiBuYW1lc3BhY2UgewpAQCAtNTEsMTUgKzQ5LDkgQEAKICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY0VhYzMsIGtTYk1lZGlhQXVkaW9Db2RlY09wdXMsIGtTYk1lZGlhQXVkaW9Db2RlY1ZvcmJpcywKICAgfTsKICAgY29uc3QgU2JNZWRpYVZpZGVvQ29kZWMga1ZpZGVvQ29kZWNzW10gPSB7Ci0gICAga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNIMjY0LAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjUsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjTXBlZzIsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVGhlb3JhLAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNBdjEsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVnA4LAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZwOSwKKyAgICAgIGtTYk1lZGlhVmlkZW9Db2RlY05vbmUsICBrU2JNZWRpYVZpZGVvQ29kZWNIMjY0LCAgIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjUsCisgICAgICBrU2JNZWRpYVZpZGVvQ29kZWNNcGVnMiwga1NiTWVkaWFWaWRlb0NvZGVjVGhlb3JhLCBrU2JNZWRpYVZpZGVvQ29kZWNWYzEsCisgICAgICBrU2JNZWRpYVZpZGVvQ29kZWNBdjEsICAga1NiTWVkaWFWaWRlb0NvZGVjVnA4LCAgICBrU2JNZWRpYVZpZGVvQ29kZWNWcDksCiAgIH07CiAgIGNvbnN0IFNiUGxheWVyT3V0cHV0TW9kZSBrT3V0cHV0TW9kZXNbXSA9IHsKICAgICAgIGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUsIGtTYlBsYXllck91dHB1dE1vZGVQdW5jaE91dCwKQEAgLTgxLDUgKzczLDMgQEAKIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWRfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWRfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlNzdmMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvcGxheWVyLmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCi0jaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCi0KLW5hbWVzcGFjZSBzdGFyYm9hcmQgewotbmFtZXNwYWNlIG5wbGIgewotbmFtZXNwYWNlIHsKLQotI2lmICFTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQotVEVTVChTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWRUZXN0LCBTdW5ueURheSkgewotICBTYk1lZGlhVmlkZW9Db2RlYyBrVmlkZW9Db2RlYyA9IGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQ7Ci0gIFNiRHJtU3lzdGVtIGtEcm1TeXN0ZW0gPSBrU2JEcm1TeXN0ZW1JbnZhbGlkOwotCi0gIC8vIFdlIHNob3VsZCBzdXBwb3J0IGVpdGhlciBkZWNvZGUtdG8tdGV4dHVyZSBvciBwdW5jaC1vdXQgbW9kZS4KLSAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlID0ga1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQ7Ci0gIGlmIChTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoa1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrVmlkZW9Db2RlYywga0RybVN5c3RlbSkpIHsKLSAgICBvdXRwdXRfbW9kZSA9IGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmU7Ci0gIH0gZWxzZSBpZiAoU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKGtTYlBsYXllck91dHB1dE1vZGVQdW5jaE91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1ZpZGVvQ29kZWMsIGtEcm1TeXN0ZW0pKSB7Ci0gICAgb3V0cHV0X21vZGUgPSBrU2JQbGF5ZXJPdXRwdXRNb2RlUHVuY2hPdXQ7Ci0gIH0KLSAgQVNTRVJUX05FKGtTYlBsYXllck91dHB1dE1vZGVJbnZhbGlkLCBvdXRwdXRfbW9kZSk7Ci19Ci0KLVRFU1QoU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkVGVzdCwgUmFpbnlEYXlJbnZhbGlkKSB7Ci0gIFNiTWVkaWFWaWRlb0NvZGVjIGtWaWRlb0NvZGVjID0ga1NiTWVkaWFWaWRlb0NvZGVjSDI2NDsKLSAgU2JEcm1TeXN0ZW0ga0RybVN5c3RlbSA9IGtTYkRybVN5c3RlbUludmFsaWQ7Ci0KLSAgYm9vbCByZXN1bHQgPSBTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoa1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtWaWRlb0NvZGVjLCBrRHJtU3lzdGVtKTsKLSAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci19Ci0KLSNlbmRpZiAgLy8gIVNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCi19ICAvLyBuYW1lc3BhY2UKLX0gIC8vIG5hbWVzcGFjZSBucGxiCi19ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfdGVzdF91dGlsLmNjIGIvc3RhcmJvYXJkL25wbGIvcGxheWVyX3Rlc3RfdXRpbC5jYwppbmRleCBkZGNhY2YxLi44YzA2Njc1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfdGVzdF91dGlsLmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL3BsYXllcl90ZXN0X3V0aWwuY2MKQEAgLTE1MSw4ICsxNTEsNiBAQAogICAgIHZvaWQqIGNvbnRleHQsCiAgICAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAogICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIGNvbnRleHRfcHJvdmlkZXIpIHsKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogICBpZiAoYXVkaW9fc2FtcGxlX2luZm8pIHsKICAgICBTQl9DSEVDSyhhdWRpb19zYW1wbGVfaW5mby0+Y29kZWMgPT0gYXVkaW9fY29kZWMpOwogICB9IGVsc2UgewpAQCAtMTcyLDMwICsxNzAsMTUgQEAKICAgcmV0dXJuIFNiUGxheWVyQ3JlYXRlKHdpbmRvdywgJmNyZWF0aW9uX3BhcmFtLCBzYW1wbGVfZGVhbGxvY2F0ZV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlcl9zdGF0dXNfZnVuYywgcGxheWVyX3N0YXR1c19mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyX2Vycm9yX2Z1bmMsIGNvbnRleHQsIGNvbnRleHRfcHJvdmlkZXIpOwotCi0jZWxzZSAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KLSAgcmV0dXJuIFNiUGxheWVyQ3JlYXRlKHdpbmRvdywgdmlkZW9fY29kZWMsIGF1ZGlvX2NvZGVjLCBrU2JEcm1TeXN0ZW1JbnZhbGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxlX2luZm8sIG1heF92aWRlb19jYXBhYmlsaXRpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZGVhbGxvY2F0ZV9mdW5jLCBkZWNvZGVyX3N0YXR1c19mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyX3N0YXR1c19mdW5jLCBwbGF5ZXJfZXJyb3JfZnVuYywgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9tb2RlLCBjb250ZXh0X3Byb3ZpZGVyKTsKLQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIH0KIAogYm9vbCBJc091dHB1dE1vZGVTdXBwb3J0ZWQoU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYykgewotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICBTYlBsYXllckNyZWF0aW9uUGFyYW0gY3JlYXRpb25fcGFyYW0gPQogICAgICAgQ3JlYXRlUGxheWVyQ3JlYXRpb25QYXJhbShhdWRpb19jb2RlYywgdmlkZW9fY29kZWMpOwogICBjcmVhdGlvbl9wYXJhbS5vdXRwdXRfbW9kZSA9IG91dHB1dF9tb2RlOwogICByZXR1cm4gU2JQbGF5ZXJHZXRQcmVmZXJyZWRPdXRwdXRNb2RlKCZjcmVhdGlvbl9wYXJhbSkgPT0gb3V0cHV0X21vZGU7Ci0jZWxzZSAgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotICByZXR1cm4gU2JQbGF5ZXJPdXRwdXRNb2RlU3VwcG9ydGVkKG91dHB1dF9tb2RlLCB2aWRlb19jb2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JEcm1TeXN0ZW1JbnZhbGlkKTsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBucGxiCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfd3JpdGVfc2FtcGxlX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9wbGF5ZXJfd3JpdGVfc2FtcGxlX3Rlc3QuY2MKaW5kZXggMGE1ZDZmZC4uZjgwYmIwZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvcGxheWVyX3dyaXRlX3NhbXBsZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL3BsYXllcl93cml0ZV9zYW1wbGVfdGVzdC5jYwpAQCAtMjk2LDkgKzI5Niw3IEBACiAgIGZha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8uUnVuT25HbGVzQ29udGV4dFRocmVhZChbJl0oKSB7CiAgICAgQVNTRVJUX1RSVUUoU2JQbGF5ZXJJc1ZhbGlkKHBsYXllcl8pKTsKICAgICBpZiAob3V0cHV0X21vZGVfICE9IGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgQVNTRVJUX0VRKFNiUGxheWVyR2V0Q3VycmVudEZyYW1lKHBsYXllcl8pLCBrU2JEZWNvZGVUYXJnZXRJbnZhbGlkKTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX0VRKG91dHB1dF9tb2RlXywga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZSk7CkBAIC0zMTgsMTMgKzMxNiw2IEBACiAgICAgY2FzZSBrU2JQbGF5ZXJEZWNvZGVyU3RhdGVOZWVkc0RhdGE6CiAgICAgICBjYWxsYmFja19ldmVudF9xdWV1ZV8uUHV0KENhbGxiYWNrRXZlbnQocGxheWVyLCBzdGF0ZSwgdGlja2V0KSk7CiAgICAgICBicmVhazsKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0gICAgLy8gTm90ZTogd2UgZG8gbm90IGFkZCB0aGVzZSBldmVudHMgdG8gdGhlIHF1ZXVlIHNpbmNlIHRoZXNlIHN0YXRlcyBhcmUgbm90Ci0gICAgLy8gdXNlZCBpbiBDb2JhbHQgYW5kIGFyZSBiZWluZyBkZXByZWNhdGVkLgotICAgIGNhc2Uga1NiUGxheWVyRGVjb2RlclN0YXRlQnVmZmVyRnVsbDoKLSAgICBjYXNlIGtTYlBsYXllckRlY29kZXJTdGF0ZURlc3Ryb3llZDoKLSAgICAgIGJyZWFrOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc2FiaS9hbGlnbm1lbnRfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3NhYmkvYWxpZ25tZW50X3Rlc3QuY2MKaW5kZXggZDQzOGQyZS4uYzU2OTI5OCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc2FiaS9hbGlnbm1lbnRfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zYWJpL2FsaWdubWVudF90ZXN0LmNjCkBAIC0xNCw4ICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2Ugc2FiaSB7CiBuYW1lc3BhY2UgewpAQCAtMjMsOCArMjEsOSBAQAogU0JfQ09NUElMRV9BU1NFUlQoU0JfQUxJR05PRihjaGFyKSA9PSBTQl9BTElHTk1FTlRfT0ZfQ0hBUiwKICAgICAgICAgICAgICAgICAgIFNCX0FMSUdOTUVOVF9PRl9DSEFSX2lzX2luY29uc2lzdGVudF93aXRoX1NCX0FMSUdOT0ZfY2hhcik7CiAKLVNCX0NPTVBJTEVfQVNTRVJUKFNCX0FMSUdOT0YoZG91YmxlKSA9PSBTQl9BTElHTk1FTlRfT0ZfRE9VQkxFLAotICAgICAgICAgICAgICAgICAgU0JfQUxJR05NRU5UX09GX0RPVUJMRV9pc19pbmNvbnNpc3RlbnRfd2l0aF9TQl9BTElHTk9GX2RvdWJsZSk7CitTQl9DT01QSUxFX0FTU0VSVCgKKyAgICBTQl9BTElHTk9GKGRvdWJsZSkgPT0gU0JfQUxJR05NRU5UX09GX0RPVUJMRSwKKyAgICBTQl9BTElHTk1FTlRfT0ZfRE9VQkxFX2lzX2luY29uc2lzdGVudF93aXRoX1NCX0FMSUdOT0ZfZG91YmxlKTsKIAogU0JfQ09NUElMRV9BU1NFUlQoU0JfQUxJR05PRihmbG9hdCkgPT0gU0JfQUxJR05NRU5UX09GX0ZMT0FULAogICAgICAgICAgICAgICAgICAgU0JfQUxJR05NRU5UX09GX0ZMT0FUX2lzX2luY29uc2lzdGVudF93aXRoX1NCX0FMSUdOT0ZfZmxvYXQpOwpAQCAtMzIsMjAgKzMxLDIyIEBACiBTQl9DT01QSUxFX0FTU0VSVChTQl9BTElHTk9GKGludCkgPT0gU0JfQUxJR05NRU5UX09GX0lOVCwKICAgICAgICAgICAgICAgICAgIFNCX0FMSUdOTUVOVF9PRl9JTlRfaXNfaW5jb25zaXN0ZW50X3dpdGhfU0JfQUxJR05PRl9pbnQpOwogCi1TQl9DT01QSUxFX0FTU0VSVChTQl9BTElHTk9GKGludCopID09IFNCX0FMSUdOTUVOVF9PRl9QT0lOVEVSLAotICAgICAgICAgICAgICAgICAgU0JfQUxJR05NRU5UX09GX1BPSU5URVJfaXNfaW5jb25zaXN0ZW50X3dpdGhfU0JfQUxJR05PRl9wb2ludGVyKTsKK1NCX0NPTVBJTEVfQVNTRVJUKAorICAgIFNCX0FMSUdOT0YoaW50KikgPT0gU0JfQUxJR05NRU5UX09GX1BPSU5URVIsCisgICAgU0JfQUxJR05NRU5UX09GX1BPSU5URVJfaXNfaW5jb25zaXN0ZW50X3dpdGhfU0JfQUxJR05PRl9wb2ludGVyKTsKIAotU0JfQ09NUElMRV9BU1NFUlQoU0JfQUxJR05PRihsb25nKSA9PSBTQl9BTElHTk1FTlRfT0ZfTE9ORywgIC8vIE5PTElOVChydW50aW1lL2ludCkKK1NCX0NPTVBJTEVfQVNTRVJUKFNCX0FMSUdOT0YobG9uZykgPT0gICAgICAgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICAgICAgICAgICAgICAgICAgICBTQl9BTElHTk1FTlRfT0ZfTE9ORywgIC8vIE5PTElOVChydW50aW1lL2ludCkKICAgICAgICAgICAgICAgICAgIFNCX0FMSUdOTUVOVF9PRl9MT05HX2lzX2luY29uc2lzdGVudF93aXRoX1NCX0FMSUdOT0ZfbG9uZyk7CiAKLVNCX0NPTVBJTEVfQVNTRVJUKFNCX0FMSUdOT0YobG9uZyBsb25nKSA9PSBTQl9BTElHTk1FTlRfT0ZfTExPTkcsICAvLyBOT0xJTlQocnVudGltZS9pbnQpCi0gICAgICAgICAgICAgICAgICBTQl9BTElHTk1FTlRfT0ZfTExPTkdfaXNfaW5jb25zaXN0ZW50X3dpdGhfU0JfQUxJR05PRl9sb25nX2xvbmcpOworU0JfQ09NUElMRV9BU1NFUlQoCisgICAgU0JfQUxJR05PRihsb25nIGxvbmcpID09IFNCX0FMSUdOTUVOVF9PRl9MTE9ORywgIC8vIE5PTElOVChydW50aW1lL2ludCkKKyAgICBTQl9BTElHTk1FTlRfT0ZfTExPTkdfaXNfaW5jb25zaXN0ZW50X3dpdGhfU0JfQUxJR05PRl9sb25nX2xvbmcpOwogCi1TQl9DT01QSUxFX0FTU0VSVChTQl9BTElHTk9GKHNob3J0KSA9PSBTQl9BTElHTk1FTlRfT0ZfU0hPUlQsICAvLyBOT0xJTlQocnVudGltZS9pbnQpCitTQl9DT01QSUxFX0FTU0VSVChTQl9BTElHTk9GKHNob3J0KSA9PSAgICAgICAgLy8gTk9MSU5UKHJ1bnRpbWUvaW50KQorICAgICAgICAgICAgICAgICAgICAgIFNCX0FMSUdOTUVOVF9PRl9TSE9SVCwgIC8vIE5PTElOVChydW50aW1lL2ludCkKICAgICAgICAgICAgICAgICAgIFNCX0FMSUdOTUVOVF9PRl9TSE9SVF9pc19pbmNvbnNpc3RlbnRfd2l0aF9TQl9BTElHTk9GX3Nob3J0KTsKIAogfSAgLy8gbmFtZXNwYWNlCiB9ICAvLyBuYW1lc3BhY2Ugc2FiaQogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9zYWJpL2VuZGlhbm5lc3NfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3NhYmkvZW5kaWFubmVzc190ZXN0LmNjCmluZGV4IDU5ZTY5MmMuLjNhYmUyNzUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NhYmkvZW5kaWFubmVzc190ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL3NhYmkvZW5kaWFubmVzc190ZXN0LmNjCkBAIC0xNSw4ICsxNSw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBzYWJpIHsKIG5hbWVzcGFjZSB7CkBAIC0yNSw3ICsyMyw3IEBACiAKICNpZiBTQl9JUyhCSUdfRU5ESUFOKQogc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGtCeXRlc1tdID0gezB4QzAsIDB4QkEsIDB4MTcsIDB4MjF9OwotI2Vsc2UgIC8vICFTQl9JUyhCSUdfRU5ESUFOKQorI2Vsc2UgICAvLyAhU0JfSVMoQklHX0VORElBTikKIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrQnl0ZXNbXSA9IHsweDIxLCAweDE3LCAweEJBLCAweEMwfTsKICNlbmRpZiAgLy8gU0JfSVMoQklHX0VORElBTikKIApAQCAtMzksNSArMzcsMyBAQAogCiB9ICAvLyBuYW1lc3BhY2Ugc2FiaQogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NhYmkuZ3lwaSBiL3N0YXJib2FyZC9ucGxiL3NhYmkvc2FiaS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2OWVkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9ucGxiL3NhYmkvc2FiaS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2FiaV9zb3VyY2VzJzogWwotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9ucGxiL3NhYmkvYWxpZ25tZW50X3Rlc3QuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9ucGxiL3NhYmkvZW5kaWFubmVzc190ZXN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpZ25lZG5lc3NfYW5kX3NpemVfb2ZfZW51bV90ZXN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpZ25lZG5lc3Nfb2ZfY2hhcl90ZXN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpemVfdGVzdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL25wbGIvc2FiaS9zdHJ1Y3RfYWxpZ25tZW50X3Rlc3QuY2MnLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpZ25lZG5lc3NfYW5kX3NpemVfb2ZfZW51bV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zaWduZWRuZXNzX2FuZF9zaXplX29mX2VudW1fdGVzdC5jYwppbmRleCBkYzIzNzYxLi45YjYwYzE1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpZ25lZG5lc3NfYW5kX3NpemVfb2ZfZW51bV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL3NhYmkvc2lnbmVkbmVzc19hbmRfc2l6ZV9vZl9lbnVtX3Rlc3QuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBzYWJpIHsKIG5hbWVzcGFjZSB7CkBAIC0zMyw1ICszMSwzIEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBzYWJpCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3NhYmkvc2lnbmVkbmVzc19vZl9jaGFyX3Rlc3QuY2MgYi9zdGFyYm9hcmQvbnBsYi9zYWJpL3NpZ25lZG5lc3Nfb2ZfY2hhcl90ZXN0LmNjCmluZGV4IDk3ZmZlMjMuLjA4NmY1MDMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NhYmkvc2lnbmVkbmVzc19vZl9jaGFyX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zaWduZWRuZXNzX29mX2NoYXJfdGVzdC5jYwpAQCAtMTQsMTcgKzE0LDE0IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2Ugc2FiaSB7CiBuYW1lc3BhY2UgewogCi1TQl9DT01QSUxFX0FTU0VSVCgoc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpIDwgMCkgPT0gU0JfSEFTX1NJR05FRF9DSEFSLCAgLy8gTk9MSU5UKHJlYWRhYmlsaXR5L2Nhc3RpbmcpCitTQl9DT01QSUxFX0FTU0VSVCgoc3RhdGljX2Nhc3Q8Y2hhcj4oLTEpIDwgMCkgPT0KKyAgICAgICAgICAgICAgICAgICAgICBTQl9IQVNfU0lHTkVEX0NIQVIsICAvLyBOT0xJTlQocmVhZGFiaWxpdHkvY2FzdGluZykKICAgICAgICAgICAgICAgICAgIFNCX0hBU19TSUdORURfQ0hBUl9pc19pbmNvbnNpc3RlbnRfd2l0aF9zaWduX29mX2NoYXIpOwogCiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBzYWJpCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3NhYmkvc2l6ZV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zaXplX3Rlc3QuY2MKaW5kZXggMjg3Njk5OS4uYmYwNzE2YiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc2FiaS9zaXplX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zaXplX3Rlc3QuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBzYWJpIHsKIG5hbWVzcGFjZSB7CkBAIC00Nyw1ICs0NSwzIEBACiB9ICAvLyBuYW1lc3BhY2UKIH0gIC8vIG5hbWVzcGFjZSBzYWJpCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3NhYmkvc3RydWN0X2FsaWdubWVudF90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zdHJ1Y3RfYWxpZ25tZW50X3Rlc3QuY2MKaW5kZXggODFmZjM3My4uNzRmYmE2OSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc2FiaS9zdHJ1Y3RfYWxpZ25tZW50X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc2FiaS9zdHJ1Y3RfYWxpZ25tZW50X3Rlc3QuY2MKQEAgLTE3LDEyICsxNywxMCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAidGVzdGluZy9ndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyA4LWJ5dGUgaW50ZWdlcnMgbWFrZSBzdHJ1Y3RzIDQtYnl0ZSBhbGlnbmVkIG9uIHg4Ni4KICNpZiBTQl9JUyhBUkNIX1g4NikKICNkZWZpbmUgQUxJR05NRU5UXzhfQllURV9JTlQgNAotI2Vsc2UgICAvLyAhU0JfSVMoQVJDSF9YODYpCisjZWxzZSAgLy8gIVNCX0lTKEFSQ0hfWDg2KQogI2RlZmluZSBBTElHTk1FTlRfOF9CWVRFX0lOVCA4CiAjZW5kaWYgIC8vIFNCX0lTKEFSQ0hfWDg2KQogCkBAIC0zMCw3ICsyOCw3IEBACiBuYW1lc3BhY2Ugc2FiaSB7CiBuYW1lc3BhY2UgewogCi1zdGF0aWMgY29uc3QgaW50OF90IGtJbnQ4ICAgPSAweDc0Oworc3RhdGljIGNvbnN0IGludDhfdCBrSW50OCA9IDB4NzQ7CiBzdGF0aWMgY29uc3QgaW50MTZfdCBrSW50MTYgPSAweDJERUY7CiBzdGF0aWMgY29uc3QgaW50MzJfdCBrSW50MzIgPSAweDM1QzdBREQyOwogc3RhdGljIGNvbnN0IGludDY0X3Qga0ludDY0ID0gMHgxNkZFMDg3MEQ0Nzg0MzUyOwpAQCAtMTUzLDcgKzE1MSw3IEBACiB9CiAKIFRFU1QoU2JTYWJpU3RydWN0QWxpZ25tZW50VGVzdCwgTmVzdGVkVW5pb24pIHsKLSAgY29uc3QgU3RydWN0NCBzdHJ1Y3Q0ID0geyBrSW50OCwga0ludDMyLCBrSW50OCB9OworICBjb25zdCBTdHJ1Y3Q0IHN0cnVjdDQgPSB7a0ludDgsIGtJbnQzMiwga0ludDh9OwogICBjb25zdCBpbnQ4X3QqIGJhc2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KCZzdHJ1Y3Q0KTsKIAogICBFWFBFQ1RfRVEoa0ludDgsICpiYXNlKTsKQEAgLTE2NSw1ICsxNjMsMyBAQAogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAogCiAjdW5kZWYgQUxJR05NRU5UXzhfQllURV9JTlQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzc190ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzc190ZXN0LmNjCmluZGV4IDZlYTJlODEuLjlhMDE0ODggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NvY2tldF9nZXRfaW50ZXJmYWNlX2FkZHJlc3NfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zb2NrZXRfZ2V0X2ludGVyZmFjZV9hZGRyZXNzX3Rlc3QuY2MKQEAgLTEyNiw3ICsxMjYsNiBAQAogICBTYlNvY2tldEdldEludGVyZmFjZUFkZHJlc3MoJmRlc3RpbmF0aW9uX2FkZHJlc3MsICZzb3VyY2UsICZuZXRtYXNrKTsKIAogICBFWFBFQ1RfRVEoR2V0QWRkcmVzc1R5cGUoKSwgc291cmNlLnR5cGUpOwotICBFWFBFQ1RfTkUoMCwgc291cmNlLnBvcnQpOwogICAvLyBBIG5ldG1hc2sgdGhhdCBzdGFydHMgd2l0aCAwIGlzIGxpa2VseSBpbmNvcnJlY3QuCiAgIEVYUEVDVF9UUlVFKG5ldG1hc2suYWRkcmVzc1swXSAmIDB4ODApOwogICBFWFBFQ1RfRVEoR2V0QWRkcmVzc1R5cGUoKSwgbmV0bWFzay50eXBlKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2NhbmNlbF90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsX3Rlc3QuY2MKaW5kZXggZjkyZjRhZi4uNWQ1MjA0YiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsX3Rlc3QuY2MKQEAgLTIwLDggKzIwLDYgQEAKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIG5wbGIgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiBURVNUX0YoU3BlZWNoUmVjb2duaXplclRlc3QsIENhbmNlbFRlc3RTdW5ueURheSkgewogICBpZiAoU2tpcExvY2FsZSgpKQogICAgIHJldHVybjsKQEAgLTczLDcgKzcxLDUgQEAKICAgU2JTcGVlY2hSZWNvZ25pemVyQ2FuY2VsKGtTYlNwZWVjaFJlY29nbml6ZXJJbnZhbGlkKTsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCi0KIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGVfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZV90ZXN0LmNjCmluZGV4IDM0NTU1ZTMuLjUyYzVhZjYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZV90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZV90ZXN0LmNjCkBAIC0xOSw4ICsxOSw2IEBACiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBucGxiIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogVEVTVF9GKFNwZWVjaFJlY29nbml6ZXJUZXN0LCBDcmVhdGVUZXN0U3VubnlEYXkpIHsKICAgaWYgKFNraXBMb2NhbGUoKSkKICAgICByZXR1cm47CkBAIC0yOSw3ICsyNyw1IEBACiAgIFNiU3BlZWNoUmVjb2duaXplckRlc3Ryb3kocmVjb2duaXplcik7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveV90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveV90ZXN0LmNjCmluZGV4IDE4ZDk1YTEuLjk0Yzk0YzkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2Rlc3Ryb3lfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfcmVjb2duaXplcl9kZXN0cm95X3Rlc3QuY2MKQEAgLTE5LDggKzE5LDYgQEAKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIG5wbGIgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiBURVNUX0YoU3BlZWNoUmVjb2duaXplclRlc3QsIERlc3Ryb3lJbnZhbGlkU3BlZWNoUmVjb2duaXplcikgewogICBpZiAoU2tpcExvY2FsZSgpKQogICAgIHJldHVybjsKQEAgLTM3LDcgKzM1LDUgQEAKICAgU2JTcGVlY2hSZWNvZ25pemVyRGVzdHJveShyZWNvZ25pemVyKTsKIH0KIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCi0KIH0gIC8vIG5hbWVzcGFjZSBucGxiCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfcmVjb2duaXplcl9oZWxwZXIuaCBiL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2hlbHBlci5oCmluZGV4IDA5YjMyNmQuLmQ0ZTA0ZTggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2hlbHBlci5oCisrKyBiL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX2hlbHBlci5oCkBAIC0yNSw4ICsyNSw2IEBACiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBucGxiIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogY2xhc3MgU3BlZWNoUmVjb2duaXplclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKICBwdWJsaWM6CiAgIFNwZWVjaFJlY29nbml6ZXJUZXN0KCkgOiBoYW5kbGVyXygpIHsKQEAgLTQzLDkgKzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHRzX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzX2ZpbmFsKSB7fQogCi0gIFNiU3BlZWNoUmVjb2duaXplckhhbmRsZXIqIGhhbmRsZXIoKSB7Ci0gICAgcmV0dXJuICZoYW5kbGVyXzsKLSAgfQorICBTYlNwZWVjaFJlY29nbml6ZXJIYW5kbGVyKiBoYW5kbGVyKCkgeyByZXR1cm4gJmhhbmRsZXJfOyB9CiAKICBwcm90ZWN0ZWQ6CiAgIGJvb2wgaXNUZXN0Rml4dHVyZVN1cHBvcnRlZDsKQEAgLTUzLDExICs0OSw3IEBACiAgICAgLy8gV2UgaW5jbHVkZSBhbGwgQVBJIHRlc3RzIGF0IGNvbXBpbGUgdGltZSBhZnRlciBTdGFyYm9hcmQgdmVyc2lvbiAxMiwgc28KICAgICAvLyB3ZSBtdXN0IGRvIGEgcnVudGltZSBjaGVjayB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhhdCBBUEkgKGFuZAogICAgIC8vIHRodXMgdGhlIHRlc3QgZml4dHVyZSkgaXMgc3VwcG9ydGVkLgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgaXNUZXN0Rml4dHVyZVN1cHBvcnRlZCA9IFNiU3BlZWNoUmVjb2duaXplcklzU3VwcG9ydGVkKCk7Ci0jZWxzZQotICAgIGlzVGVzdEZpeHR1cmVTdXBwb3J0ZWQgPSB0cnVlOwotI2VuZGlmCiAgIH0KIAogICAvLyBUT0RPOiBVc2UgR1RFU1RfU0tJUCBpbiB8U2V0VXB8IHdoZW4gd2UgaGF2ZSBhIG5ld2VyIHZlcnNpb24gb2YgZ3Rlc3QuCkBAIC04Miw4ICs3NCw2IEBACiAgIFNiU3BlZWNoUmVjb2duaXplckhhbmRsZXIgaGFuZGxlcl87CiB9OwogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnRfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX3N0YXJ0X3Rlc3QuY2MKaW5kZXggNzQ3YWJiYi4uMWQ1YzExNyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnRfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfcmVjb2duaXplcl9zdGFydF90ZXN0LmNjCkBAIC0xOSw4ICsxOSw2IEBACiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBucGxiIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogVEVTVF9GKFNwZWVjaFJlY29nbml6ZXJUZXN0LCBTdGFydFRlc3RTdW5ueURheSkgewogICBpZiAoU2tpcExvY2FsZSgpKQogICAgIHJldHVybjsKQEAgLTExMyw3ICsxMTEsNSBAQAogICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfc3RvcF90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3JlY29nbml6ZXJfc3RvcF90ZXN0LmNjCmluZGV4IDc5NmJhZDAuLjU4Y2ZiM2UgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9yZWNvZ25pemVyX3N0b3BfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfcmVjb2duaXplcl9zdG9wX3Rlc3QuY2MKQEAgLTE5LDggKzE5LDYgQEAKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIG5wbGIgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiBURVNUX0YoU3BlZWNoUmVjb2duaXplclRlc3QsIFN0b3BJc0NhbGxlZE11bHRpcGxlVGltZXMpIHsKICAgaWYgKFNraXBMb2NhbGUoKSkKICAgICByZXR1cm47CkBAIC0zOSw3ICszNyw1IEBACiAgIFNiU3BlZWNoUmVjb2duaXplckRlc3Ryb3kocmVjb2duaXplcik7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiB9ICAvLyBuYW1lc3BhY2UgbnBsYgogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3N5bnRoZXNpc19iYXNpY190ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc3BlZWNoX3N5bnRoZXNpc19iYXNpY190ZXN0LmNjCmluZGV4IGU5OWUwNjAuLmFhZGYwNmYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9ucGxiL3NwZWVjaF9zeW50aGVzaXNfYmFzaWNfdGVzdC5jYworKysgYi9zdGFyYm9hcmQvbnBsYi9zcGVlY2hfc3ludGhlc2lzX2Jhc2ljX3Rlc3QuY2MKQEAgLTE5LDIyICsxOSwxNSBAQAogbmFtZXNwYWNlIG5wbGIgewogbmFtZXNwYWNlIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfU1lOVEhFU0lTKQotCiBURVNUKFNiU3BlZWNoU3ludGhlc2lzQmFzaWNUZXN0LCBCYXNpYykgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmICghU2JTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpKSB7CiAgICAgU0JfTE9HKElORk8pIDw8ICJTcGVlY2ggc3ludGhlc2lzIG5vdCBzdXBwb3J0ZWQuIFRlc3Qgc2tpcHBlZC4iOwogICAgIHJldHVybjsKICAgfQotI2VuZGlmCiAgIFNiU3BlZWNoU3ludGhlc2lzU3BlYWsoIkhlbGxvIik7CiAgIFNiU3BlZWNoU3ludGhlc2lzQ2FuY2VsKCk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKFNQRUVDSF9TWU5USEVTSVMpCi0KIH0gIC8vIG5hbWVzcGFjZQogfSAgLy8gbmFtZXNwYWNlIG5wbGIKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3N5c3RlbV9nZXRfcGF0aF90ZXN0LmNjIGIvc3RhcmJvYXJkL25wbGIvc3lzdGVtX2dldF9wYXRoX3Rlc3QuY2MKaW5kZXggNDQxMzhhYy4uNzE2Nzc0NiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL25wbGIvc3lzdGVtX2dldF9wYXRoX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc3lzdGVtX2dldF9wYXRoX3Rlc3QuY2MKQEAgLTk0LDcgKzk0LDkgQEAKIFRFU1QoU2JTeXN0ZW1HZXRQYXRoVGVzdCwgRG9lc05vdEJsb3dVcEZvckRlZmluZWRJZHMpIHsKICAgQmFzaWNUZXN0KGtTYlN5c3RlbVBhdGhEZWJ1Z091dHB1dERpcmVjdG9yeSwgZmFsc2UsIGZhbHNlLCBfX0xJTkVfXyk7CiAgIEJhc2ljVGVzdChrU2JTeXN0ZW1QYXRoVGVtcERpcmVjdG9yeSwgZmFsc2UsIGZhbHNlLCBfX0xJTkVfXyk7CisjaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9TWVNURU1fUEFUSF9URVNUX09VVFBVVF9ESVJFQ1RPUllfREVQUkVDQVRFRAogICBCYXNpY1Rlc3Qoa1NiU3lzdGVtUGF0aFRlc3RPdXRwdXREaXJlY3RvcnksIGZhbHNlLCBmYWxzZSwgX19MSU5FX18pOworI2VuZGlmICAvLyAjaWYgU0JfQVBJX1ZFUlNJT04gPCBTQl9TWVNURU1fUEFUSF9URVNUX09VVFBVVF9ESVJFQ1RPUllfREVQUkVDQVRFRAogICBCYXNpY1Rlc3Qoa1NiU3lzdGVtUGF0aENhY2hlRGlyZWN0b3J5LCBmYWxzZSwgZmFsc2UsIF9fTElORV9fKTsKICAgQmFzaWNUZXN0KGtTYlN5c3RlbVBhdGhGb250RGlyZWN0b3J5LCBmYWxzZSwgZmFsc2UsIF9fTElORV9fKTsKICAgQmFzaWNUZXN0KGtTYlN5c3RlbVBhdGhGb250Q29uZmlndXJhdGlvbkRpcmVjdG9yeSwgZmFsc2UsIGZhbHNlLCBfX0xJTkVfXyk7CkBAIC0xMDMsNyArMTA1LDkgQEAKIFRFU1QoU2JTeXN0ZW1HZXRQYXRoVGVzdCwgRG9lc05vdFRvdWNoT3V0cHV0QnVmZmVyT25GYWlsdXJlRm9yRGVmaW5lZElkcykgewogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1QYXRoRGVidWdPdXRwdXREaXJlY3RvcnksIF9fTElORV9fKTsKICAgVW5tb2RpZmllZE9uRmFpbHVyZVRlc3Qoa1NiU3lzdGVtUGF0aFRlbXBEaXJlY3RvcnksIF9fTElORV9fKTsKKyNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX1NZU1RFTV9QQVRIX1RFU1RfT1VUUFVUX0RJUkVDVE9SWV9ERVBSRUNBVEVECiAgIFVubW9kaWZpZWRPbkZhaWx1cmVUZXN0KGtTYlN5c3RlbVBhdGhUZXN0T3V0cHV0RGlyZWN0b3J5LCBfX0xJTkVfXyk7CisjZW5kaWYgIC8vICNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX1NZU1RFTV9QQVRIX1RFU1RfT1VUUFVUX0RJUkVDVE9SWV9ERVBSRUNBVEVECiAgIFVubW9kaWZpZWRPbkZhaWx1cmVUZXN0KGtTYlN5c3RlbVBhdGhDYWNoZURpcmVjdG9yeSwgX19MSU5FX18pOwogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1QYXRoRm9udERpcmVjdG9yeSwgX19MSU5FX18pOwogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1QYXRoRm9udENvbmZpZ3VyYXRpb25EaXJlY3RvcnksIF9fTElORV9fKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3N5c3RlbV9nZXRfcHJvcGVydHlfdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3N5c3RlbV9nZXRfcHJvcGVydHlfdGVzdC5jYwppbmRleCA3ZjU1ZmM5Li41NWU1NTlmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi9zeXN0ZW1fZ2V0X3Byb3BlcnR5X3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvc3lzdGVtX2dldF9wcm9wZXJ0eV90ZXN0LmNjCkBAIC04MSwxMiArODEsNyBAQAogCiAgIEJhc2ljVGVzdChrU2JTeXN0ZW1Qcm9wZXJ0eUNoaXBzZXRNb2RlbE51bWJlciwgZmFsc2UsIHRydWUsIF9fTElORV9fKTsKICAgQmFzaWNUZXN0KGtTYlN5c3RlbVByb3BlcnR5RmlybXdhcmVWZXJzaW9uLCBmYWxzZSwgdHJ1ZSwgX19MSU5FX18pOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIEJhc2ljVGVzdChrU2JTeXN0ZW1Qcm9wZXJ0eVN5c3RlbUludGVncmF0b3JOYW1lLCBmYWxzZSwgdHJ1ZSwgX19MSU5FX18pOwotI2Vsc2UKLSAgQmFzaWNUZXN0KGtTYlN5c3RlbVByb3BlcnR5T3JpZ2luYWxEZXNpZ25NYW51ZmFjdHVyZXJOYW1lLAotICAgICAgICAgICAgZmFsc2UsIHRydWUsIF9fTElORV9fKTsKLSNlbmRpZgogICBCYXNpY1Rlc3Qoa1NiU3lzdGVtUHJvcGVydHlTcGVlY2hBcGlLZXksIGZhbHNlLCB0cnVlLCBfX0xJTkVfXyk7CiAKICAgaWYgKElzQ0VEZXZpY2UoU2JTeXN0ZW1HZXREZXZpY2VUeXBlKCkpKSB7CkBAIC0xMjYsMTIgKzEyMSw3IEBACiAgIFVubW9kaWZpZWRPbkZhaWx1cmVUZXN0KGtTYlN5c3RlbVByb3BlcnR5QnJhbmROYW1lLCBfX0xJTkVfXyk7CiAgIFVubW9kaWZpZWRPbkZhaWx1cmVUZXN0KGtTYlN5c3RlbVByb3BlcnR5TW9kZWxOYW1lLCBfX0xJTkVfXyk7CiAgIFVubW9kaWZpZWRPbkZhaWx1cmVUZXN0KGtTYlN5c3RlbVByb3BlcnR5TW9kZWxZZWFyLCBfX0xJTkVfXyk7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgVW5tb2RpZmllZE9uRmFpbHVyZVRlc3Qoa1NiU3lzdGVtUHJvcGVydHlTeXN0ZW1JbnRlZ3JhdG9yTmFtZSwgX19MSU5FX18pOwotI2Vsc2UKLSAgVW5tb2RpZmllZE9uRmFpbHVyZVRlc3Qoa1NiU3lzdGVtUHJvcGVydHlPcmlnaW5hbERlc2lnbk1hbnVmYWN0dXJlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fKTsKLSNlbmRpZgogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtTmFtZSwgX19MSU5FX18pOwogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1Qcm9wZXJ0eVNwZWVjaEFwaUtleSwgX19MSU5FX18pOwogICBVbm1vZGlmaWVkT25GYWlsdXJlVGVzdChrU2JTeXN0ZW1Qcm9wZXJ0eVVzZXJBZ2VudEF1eEZpZWxkLCBfX0xJTkVfXyk7CkBAIC0xNDksMTggKzEzOSwxNCBAQAogICB9CiAKICAgU2JTeXN0ZW1Qcm9wZXJ0eUlkIGVudW1fdmFsdWVzW10gPSB7Ci0gICAga1NiU3lzdGVtUHJvcGVydHlDaGlwc2V0TW9kZWxOdW1iZXIsCi0gICAga1NiU3lzdGVtUHJvcGVydHlGaXJtd2FyZVZlcnNpb24sCi0gICAga1NiU3lzdGVtUHJvcGVydHlGcmllbmRseU5hbWUsCi0gICAga1NiU3lzdGVtUHJvcGVydHlNYW51ZmFjdHVyZXJOYW1lLAotICAgIGtTYlN5c3RlbVByb3BlcnR5TW9kZWxOYW1lLAotICAgIGtTYlN5c3RlbVByb3BlcnR5TW9kZWxZZWFyLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAga1NiU3lzdGVtUHJvcGVydHlTeXN0ZW1JbnRlZ3JhdG9yTmFtZSwKLSNlbHNlCi0gICAga1NiU3lzdGVtUHJvcGVydHlPcmlnaW5hbERlc2lnbk1hbnVmYWN0dXJlck5hbWUsCi0jZW5kaWYKLSAgICBrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtTmFtZSwKKyAgICAgIGtTYlN5c3RlbVByb3BlcnR5Q2hpcHNldE1vZGVsTnVtYmVyLAorICAgICAga1NiU3lzdGVtUHJvcGVydHlGaXJtd2FyZVZlcnNpb24sCisgICAgICBrU2JTeXN0ZW1Qcm9wZXJ0eUZyaWVuZGx5TmFtZSwKKyAgICAgIGtTYlN5c3RlbVByb3BlcnR5TWFudWZhY3R1cmVyTmFtZSwKKyAgICAgIGtTYlN5c3RlbVByb3BlcnR5TW9kZWxOYW1lLAorICAgICAga1NiU3lzdGVtUHJvcGVydHlNb2RlbFllYXIsCisgICAgICBrU2JTeXN0ZW1Qcm9wZXJ0eVN5c3RlbUludGVncmF0b3JOYW1lLAorICAgICAga1NiU3lzdGVtUHJvcGVydHlQbGF0Zm9ybU5hbWUsCiAgIH07CiAKICAgZm9yIChTYlN5c3RlbVByb3BlcnR5SWQgdmFsIDogZW51bV92YWx1ZXMpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9ucGxiL3VpX25hdmlnYXRpb25fdGVzdC5jYyBiL3N0YXJib2FyZC9ucGxiL3VpX25hdmlnYXRpb25fdGVzdC5jYwppbmRleCAzMjkyNTViLi42MmE0NDY5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvbnBsYi91aV9uYXZpZ2F0aW9uX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL25wbGIvdWlfbmF2aWdhdGlvbl90ZXN0LmNjCkBAIC0xOSwxNiArMTksMTIgQEAKIG5hbWVzcGFjZSBucGxiIHsKIG5hbWVzcGFjZSB7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIFVJIG5hdmlnYXRpb24gQVBJIGlzIG5vdCBpbXBsZW1lbnRlZC4KIFRFU1QoVWlOYXZpZ2F0aW9uVGVzdCwgR2V0SW50ZXJmYWNlKSB7CiAgIFNiVWlOYXZJbnRlcmZhY2UgaW50ZXJmYWNlOwogICBFWFBFQ1RfRkFMU0UoU2JVaU5hdkdldEludGVyZmFjZSgmaW50ZXJmYWNlKSk7CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogfSAgLy8gbmFtZXNwYWNlLgogfSAgLy8gbmFtZXNwYWNlIG5wbGIuCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkLgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL29uY2UuaCBiL3N0YXJib2FyZC9vbmNlLmgKaW5kZXggYmVhYWNiMC4uYWQ4YzI3NCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL29uY2UuaAorKysgYi9zdGFyYm9hcmQvb25jZS5oCkBAIC0yMSwxNSArMjEsMTIgQEAKICNkZWZpbmUgU1RBUkJPQVJEX09OQ0VfSF8KIAogI2luY2x1ZGUgInN0YXJib2FyZC9leHBvcnQuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkX3R5cGVzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIE1heCBzaXplIG9mIHRoZSBTYk9uY2VDb250cm9sIHR5cGUuCiAjZGVmaW5lIFNCX09OQ0VfTUFYX1NJWkUgNjQKIApAQCAtNTMsOCArNTAsNiBAQAogICB7IDAgfQogI2VuZGlmCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gRnVuY3Rpb24gcG9pbnRlciB0eXBlIGZvciBtZXRob2RzIHRoYXQgY2FuIGJlIGNhbGxlZCB2aWEgdGhlIFNiT25jZSgpIHN5c3RlbS4KIHR5cGVkZWYgdm9pZCAoKlNiT25jZUluaXRSb3V0aW5lKSh2b2lkKTsKIApAQCAtODEsMTggKzc2LDE2IEBACiAvLyAgIE15Q2xhc3MqIGluc3RhbmNlID0gR2V0T3JDcmVhdGVNeUNsYXNzKCk7CiAvLyAgIE15Q2xhc3MqIGluc3RhbmNlMiA9IEdldE9yQ3JlYXRlTXlDbGFzcygpOwogLy8gICBEQ0hFQ0tfRVEoaW5zdGFuY2UsIGluc3RhbmNlMik7Ci0jZGVmaW5lIFNCX09OQ0VfSU5JVElBTElaRV9GVU5DVElPTihUeXBlLCBGdW5jdGlvbk5hbWUpICAgIFwKLVR5cGUqIEZ1bmN0aW9uTmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBzdGF0aWMgU2JPbmNlQ29udHJvbCBzX29uY2VfZmxhZyA9IFNCX09OQ0VfSU5JVElBTElaRVI7ICBcCi0gIHN0YXRpYyBUeXBlKiBzX3NpbmdsZXRvbiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgc3RydWN0IExvY2FsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyB2b2lkIEluaXQoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBzX3NpbmdsZXRvbiA9IG5ldyBUeXBlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFNiT25jZSgmc19vbmNlX2ZsYWcsIExvY2FsOjpJbml0KTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgcmV0dXJuIHNfc2luZ2xldG9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQorI2RlZmluZSBTQl9PTkNFX0lOSVRJQUxJWkVfRlVOQ1RJT04oVHlwZSwgRnVuY3Rpb25OYW1lKSAgICAgXAorICBUeXBlKiBGdW5jdGlvbk5hbWUoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBTYk9uY2VDb250cm9sIHNfb25jZV9mbGFnID0gU0JfT05DRV9JTklUSUFMSVpFUjsgXAorICAgIHN0YXRpYyBUeXBlKiBzX3NpbmdsZXRvbiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBMb2NhbCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3RhdGljIHZvaWQgSW5pdCgpIHsgc19zaW5nbGV0b24gPSBuZXcgVHlwZSgpOyB9ICAgICAgXAorICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFNiT25jZSgmc19vbmNlX2ZsYWcsIExvY2FsOjpJbml0KTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiBzX3NpbmdsZXRvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CiAjZW5kaWYgIC8vIF9fY3BsdXNwbHVzCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL29wdGlvbmFsL19lbnYucHkgYi9zdGFyYm9hcmQvb3B0aW9uYWwvX2Vudi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxOTA4ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvb3B0aW9uYWwvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvb3B0aW9uYWwvZ2V0X29wdGlvbmFsX3Rlc3RzLnB5IGIvc3RhcmJvYXJkL29wdGlvbmFsL2dldF9vcHRpb25hbF90ZXN0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4YWJhZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvb3B0aW9uYWwvZ2V0X29wdGlvbmFsX3Rlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlJldHVybnMgb3B0aW9uYWwgdGVzdCB0YXJnZXRzIGZvciB1c2UgaW4gR1lQIG9yIFB5dGhvbi4iIiIKLQotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCBzeXMKLQotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBhdGhzCi0KLQotZGVmIF9Qb3NpeGlmeShwYXRoKToKLSAgIiIiUmV0dXJucyBhIG5vcm1hbGl6ZWQsIFBPU0lYLWlmaWVkIHZlcnNpb24gb2YgfHBhdGh8LgotCi0gIFdoZW4gcHJvdmlkaW5nIGRlcGVuZGVuY2llcyBpbiBHWVAgdGhlIHBhdGhzIG11c3QgYmUgUE9TSVggcGF0aHMuIFRoaXMKLSAgZnVuY3Rpb24gbm9ybWFsaXplcyB8cGF0aHwsIGFuZCByZXBsYWNlcyB0aGUgcGF0aCBzZXBhcmF0b3JzIHdpdGggdGhlIFBPU0lYCi0gIHBhdGggc2VwYXJhdG9yLgotCi0gIEFyZ3M6Ci0gICAgcGF0aDogVGhlIHBhdGggdG8gdHVybiBpbnRvIGEgbm9ybWFsaXplZCwgUE9TSVggcGF0aC4KLQotICBSZXR1cm5zOgotICAgIEEgbm9ybWFsaXplZCwgUE9TSVggcGF0aC4KLSAgIiIiCi0gIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpLnJlcGxhY2Uob3MucGF0aC5zZXAsIHBvc2l4cGF0aC5zZXApCi0KLQotZGVmIEdldE9wdGlvbmFsVGVzdFRhcmdldHMoYXNfZ3lwX2RlcGVuZGVuY2llcz1GYWxzZSwgZGVwdGg9JycpOgotICAiIiJSZXR1cm5zIG9wdGlvbmFsIHRlc3QgdGFyZ2V0cyBmb3IgdXNlIGluIEdZUCBvciBQeXRob24uCi0KLSAgVGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBpbXBvcnQgb3B0aW9uYWwgdGVzdCB0YXJnZXRzLCBhbmQgZmFpbCBncmFjZWZ1bGx5IGlmCi0gIHRoZXkgY2Fubm90IGJlIGltcG9ydGVkLgotCi0gIFdoZW4gdGhlIHRlc3QgdGFyZ2V0cyBzaG91bGQgYmUgcmV0dXJuZWQgaW4gYSBHWVAtZnJpZW5kbHkgZm9ybWF0IHdlIG5lZWQgdG8KLSAgZW5zdXJlIHRoYXQgdGhlIHBhdGhzIGFyZSBQT1NJWCBwYXRocywgYW5kIHRoYXQgdGhleSBhcmUgY29uY2F0ZW5hdGVkIGludG8gYQotICBzaW5nbGUgc3RyaW5nLCBkZWxpbWl0ZWQgYnkgbmV3bGluZXMuCi0KLSAgQXJnczoKLSAgICBhc19neXBfZGVwZW5kZW5jaWVzOiBXaGV0aGVyIG9yIG5vdCB0aGUgdGVzdCB0YXJnZXRzIHNob3VsZCBiZSByZXR1cm5lZCBpbiBhCi0gICAgICBHWVAtZnJpZW5kbHkgZm9ybWF0LgotICAgIGRlcHRoOiBUaGUgPChERVBUSCkgb2YgR1lQLCBpLmUuIHRoZSBwYXRoIHRvIHByZXBlbmQgdG8gZWFjaCB0ZXN0IHRhcmdldAotICAgICAgd2hlbiB8YXNfZ3lwX2RlcGVuZGVuY2llc3wgaXMgfFRydWV8LgotCi0gIFJldHVybnM6Ci0gICAgV2hlbiB8YXNfZ3lwX2RlcGVuZGVuY2llc3wgaXMgfFRydWV8LCBhIHN0cmluZyBvZiBjb25jYXRlbmF0ZWQgcGF0aHMgdG8gdGVzdAotICAgIHRhcmdldHMsIG90aGVyd2lzZSBhIGxpc3Qgb2YgdGVzdCB0YXJnZXRzLiBPbiBmYWlsdXJlLCBlaXRoZXIgYW4gZW1wdHkKLSAgICBzdHJpbmcgb3IgYW4gZW1wdHkgbGlzdC4KLSAgIiIiCi0gIHRyeToKLSAgICAjIHB5bGludDogZGlzYWJsZT1nLWltcG9ydC1ub3QtYXQtdG9wCi0gICAgZnJvbSBzdGFyYm9hcmQub3B0aW9uYWwuaW50ZXJuYWwgaW1wb3J0IHRlc3RfdGFyZ2V0cwotICAgIGlmIGFzX2d5cF9kZXBlbmRlbmNpZXM6Ci0gICAgICByZXR1cm4gJ1xuJy5qb2luKFsKLSAgICAgICAgICBfUG9zaXhpZnkob3MucGF0aC5qb2luKGRlcHRoLCBwYXRoKSkKLSAgICAgICAgICBmb3IgcGF0aCBpbiB0ZXN0X3RhcmdldHMuVEVTVF9UQVJHRVRfR1lQX0RFUEVOREVOQ0lFUwotICAgICAgXSkKLSAgICByZXR1cm4gdGVzdF90YXJnZXRzLlRFU1RfVEFSR0VUX05BTUVTCi0gIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi0gIHJldHVybiAnJyBpZiBhc19neXBfZGVwZW5kZW5jaWVzIGVsc2UgW10KLQotCi1kZWYgRG9NYWluKGFyZ3Y9Tm9uZSk6Ci0gICIiIkZ1bmN0aW9uIHRvIGFsbG93IHRoZSB1c2Ugb2YgdGhpcyBzY3JpcHQgZnJvbSBHWVAncyBweW1vZF9kb19tYWluLiIiIgotICBhcmdfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctZycsCi0gICAgICAnLS1hcy1neXAtZGVwZW5kZW5jaWVzJywKLSAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICBkZWZhdWx0PUZhbHNlLAotICAgICAgaGVscD0nV2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSB0ZXN0IHRhcmdldHMgaW4gYSBHWVAtZnJpZW5kbHkgZm9ybWF0LicKLSAgKQotICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctZCcsCi0gICAgICAnLS1kZXB0aCcsCi0gICAgICBkZWZhdWx0PScnLAotICAgICAgaGVscD0nVGhlIDwoREVQVEgpIG9mIEdZUCwgaS5lLiB0aGUgcGF0aCB0byBwcmVwZW5kIHRvIGVhY2ggdGVzdCB0YXJnZXQuJykKLSAgYXJncywgXyA9IGFyZ19wYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQotCi0gIGlmIGFyZ3MuYXNfZ3lwX2RlcGVuZGVuY2llcyAhPSBib29sKGFyZ3MuZGVwdGgpOgotICAgIGFyZ19wYXJzZXIuZXJyb3IoJ1lvdSBtdXN0IHNwZWNpZnkgYm90aCAtLWFzLWd5cC1kZXBlbmRlbmNpZXMgYW5kIC0tZGVwdGguJykKLSAgcmV0dXJuIEdldE9wdGlvbmFsVGVzdFRhcmdldHMoYXJncy5hc19neXBfZGVwZW5kZW5jaWVzLCBhcmdzLmRlcHRoKQotCi0KLWRlZiBtYWluKCk6Ci0gIHByaW50KERvTWFpbigpKQotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9wbGF5ZXIuaCBiL3N0YXJib2FyZC9wbGF5ZXIuaAppbmRleCA0OTE5YzQzLi5jZGU0YzdhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcGxheWVyLmgKKysrIGIvc3RhcmJvYXJkL3BsYXllci5oCkBAIC0zOCwxNSArMzgsNiBAQAogdHlwZWRlZiBlbnVtIFNiUGxheWVyRGVjb2RlclN0YXRlIHsKICAgLy8gVGhlIGRlY29kZXIgaXMgYXNraW5nIGZvciBvbmUgbW9yZSBzYW1wbGUuCiAgIGtTYlBsYXllckRlY29kZXJTdGF0ZU5lZWRzRGF0YSwKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSAgLy8gVGhlIGRlY29kZXIgaXMgbm90IHJlYWR5IGZvciBhbnkgbW9yZSBzYW1wbGVzLCBzbyBkbyBub3Qgc2VuZCB0aGVtLiAgTm90ZQotICAvLyB0aGF0IHRoaXMgZW51bSB2YWx1ZSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB0aGUgU2JQbGF5ZXIgaW1wbGVtZW50YXRpb24KLSAgLy8gc2hvdWxkIG5vIGxvbmdlciB1c2UgdGhpcyB2YWx1ZS4KLSAga1NiUGxheWVyRGVjb2RlclN0YXRlQnVmZmVyRnVsbCwKLSAgLy8gVGhlIHBsYXllciBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB3aWxsIHNlbmQgbm8gbW9yZSBjYWxsYmFja3MuCi0gIGtTYlBsYXllckRlY29kZXJTdGF0ZURlc3Ryb3llZCwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgogfSBTYlBsYXllckRlY29kZXJTdGF0ZTsKIAogLy8gQW4gaW5kaWNhdG9yIG9mIHRoZSBnZW5lcmFsIHBsYXliYWNrIHN0YXRlLgpAQCAtMTA2LDggKzk3LDYgQEAKICAga1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQsCiB9IFNiUGxheWVyT3V0cHV0TW9kZTsKIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiAvLyBUaGUgcGxheWJhY2sgcmVsYXRlZCBwYXJhbWV0ZXJzIHRvIHBhc3MgaW50byBTYlBsYXllckNyZWF0ZSgpIGFuZAogLy8gU2JQbGF5ZXJHZXRQcmVmZXJyZWRPdXRwdXRNb2RlKCkuCiB0eXBlZGVmIHN0cnVjdCBTYlBsYXllckNyZWF0aW9uUGFyYW0gewpAQCAtMTMyLDggKzEyMSw2IEBACiAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZTsKIH0gU2JQbGF5ZXJDcmVhdGlvblBhcmFtOwogCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiAvLyBJZGVudGlmeSB0aGUgdHlwZSBvZiBzaWRlIGRhdGEgYWNjb21wYW5pZWQgd2l0aCB8U2JQbGF5ZXJTYW1wbGVJbmZvfCwgYXMgc2lkZQogLy8gZGF0YSBtYXkgY29tZSBmcm9tIG11bHRpcGxlIHNvdXJjZXMuCiB0eXBlZGVmIGVudW0gU2JQbGF5ZXJTYW1wbGVTaWRlRGF0YVR5cGUgewpAQCAtNDAwLDggKzM4Nyw2IEBACiAvLyB8ZGVjb2Rlcl9zdGF0dXNfZnVuY3wsIHxwbGF5ZXJfc3RhdHVzX2Z1bmN8LCBvciB8cGxheWVyX2Vycm9yX2Z1bmN8IGlmIGl0CiAvLyBhcHBsaWVzKSwgdGhlbiB8a1NiUGxheWVySW52YWxpZHwgbXVzdCBiZSByZXR1cm5lZC4KIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiBTQl9FWFBPUlQgU2JQbGF5ZXIKIFNiUGxheWVyQ3JlYXRlKFNiV2luZG93IHdpbmRvdywKICAgICAgICAgICAgICAgIGNvbnN0IFNiUGxheWVyQ3JlYXRpb25QYXJhbSogY3JlYXRpb25fcGFyYW0sCkBAIC00MTIsMjYgKzM5Nyw2IEBACiAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LAogICAgICAgICAgICAgICAgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlciogY29udGV4dF9wcm92aWRlcik7CiAKLSNlbHNlICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQotU0JfRVhQT1JUIFNiUGxheWVyCi1TYlBsYXllckNyZWF0ZShTYldpbmRvdyB3aW5kb3csCi0gICAgICAgICAgICAgICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKLSAgICAgICAgICAgICAgIFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAotICAgICAgICAgICAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKLSAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8qIGF1ZGlvX3NhbXBsZV9pbmZvLAotICAgICAgICAgICAgICAgY29uc3QgY2hhciogbWF4X3ZpZGVvX2NhcGFiaWxpdGllcywKLSAgICAgICAgICAgICAgIFNiUGxheWVyRGVhbGxvY2F0ZVNhbXBsZUZ1bmMgc2FtcGxlX2RlYWxsb2NhdGVfZnVuYywKLSAgICAgICAgICAgICAgIFNiUGxheWVyRGVjb2RlclN0YXR1c0Z1bmMgZGVjb2Rlcl9zdGF0dXNfZnVuYywKLSAgICAgICAgICAgICAgIFNiUGxheWVyU3RhdHVzRnVuYyBwbGF5ZXJfc3RhdHVzX2Z1bmMsCi0gICAgICAgICAgICAgICBTYlBsYXllckVycm9yRnVuYyBwbGF5ZXJfZXJyb3JfZnVuYywKLSAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGUsCi0gICAgICAgICAgICAgICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKiBjb250ZXh0X3Byb3ZpZGVyKTsKLQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogLy8gUmV0dXJucyB0aGUgcHJlZmVycmVkIG91dHB1dCBtb2RlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGEgdmlkZW8KIC8vIGRlc2NyaWJlZCBieSB8Y3JlYXRpb25fcGFyYW18IGlzIHBsYXllZC4gIEl0IGlzIGFzc3VtZWQgdGhhdCBpdCBpcyBva2F5IHRvCiAvLyBjYWxsIFNiUGxheWVyQ3JlYXRlKCkgd2l0aCB0aGUgc2FtZSB2aWRlbyBkZXNjcmliZWQgYnkgfGNyZWF0aW9uX3BhcmFtfCwKQEAgLTQ1MiwxNSArNDE3LDYgQEAKIFNCX0VYUE9SVCBTYlBsYXllck91dHB1dE1vZGUKIFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZShjb25zdCBTYlBsYXllckNyZWF0aW9uUGFyYW0qIGNyZWF0aW9uX3BhcmFtKTsKIAotI2Vsc2UgICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gcGxheWVyIG91dHB1dCBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0uCi0vLyBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaXQgaXMgb2theSB0byBjYWxsIFNiUGxheWVyQ3JlYXRlKCkgd2l0aAotLy8gdGhlIGdpdmVuIHxvdXRwdXRfbW9kZXwuCi1TQl9FWFBPUlQgYm9vbCBTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFWaWRlb0NvZGVjIGNvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogLy8gRGVzdHJveXMgfHBsYXllcnwsIGZyZWVpbmcgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgogLy8gICogVXBvbiBjYWxsaW5nIHRoaXMgbWV0aG9kLCB0aGVyZSBzaG91bGQgYmUgb25lIGNhbGwgdG8gdGhlIHBsYXllciBzdGF0dXMKIC8vICAgIGNhbGxiYWNrIChpLmUuIHxwbGF5ZXJfc3RhdHVzX2Z1bmN8IHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHRoZSBwbGF5ZXIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9hcmNoaXRlY3R1cmUuZ3lwaSBiL3N0YXJib2FyZC9yYXNwaS8yL2FyY2hpdGVjdHVyZS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODYzNzBjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL2FyY2hpdGVjdHVyZS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIFJhc1BpIDIgaXMgQVJNdjcKLSAgICAnYXJtX3ZlcnNpb24nOiA3LAotICAgICdhcm12Nyc6IDEsCi0gICAgJ2FybV9mcHUnOiAnbmVvbi12ZnB2NCcsCi0gICAgJ2FybV9uZW9uJzogMSwKLSAgICAnYXJtX2Zsb2F0X2FiaSc6ICdoYXJkJywKLQotICAgICdjb21waWxlcl9mbGFncyc6IFsKLSAgICAgICMgT3B0aW1pemUgZm9yIFJhc3BiZXJyeSBQaSAyIGNoaXBzLgotICAgICAgJy1tYXJjaD1hcm12Ny1hJywKLSAgICAgICctbWZsb2F0LWFiaT1oYXJkJywKLSAgICAgICctbWZwdT1uZW9uLXZmcHY0JywKLSAgICAgICctbWNwdT1jb3J0ZXgtYTgnLAotICAgICAgJy1tdHVuZT1jb3J0ZXgtYTgnLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpLzIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1Zjc4NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlJzogMSwKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQnOiAxLAotICAgIH0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ3Jhc3BpLTJfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdyYXNwaS0yX2RlYnVnJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ3Jhc3BpLTJfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMl9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdyYXNwaS0yX2dvbGQnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfSwKLSAgICB9LCAjIGVuZCBvZiBjb25maWd1cmF0aW9ucwotICB9LAotCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnYXJjaGl0ZWN0dXJlLmd5cGknLAotICAgICcuLi9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9yYXNwaS8yL2d5cF9jb25maWd1cmF0aW9uLnB5CmluZGV4IDVmNWIyNDUuLmQyM2ZhNTggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyBiL3N0YXJib2FyZC9yYXNwaS8yL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xOCwxOSArMTgsOCBAQAogCiBjbGFzcyBSYXNwaTJQbGF0Zm9ybUNvbmZpZyhzaGFyZWRfY29uZmlndXJhdGlvbi5SYXNwaVBsYXRmb3JtQ29uZmlnKToKICAgIiIiU3RhcmJvYXJkIHJhc3BpLTIgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgIHBsYXRmb3JtLAotICAgICAgICAgICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2RlZmF1bHQvc2FiaS5qc29uJyk6Ci0gICAgc3VwZXIoUmFzcGkyUGxhdGZvcm1Db25maWcsIHNlbGYpLl9faW5pdF9fKAotICAgICAgICBwbGF0Zm9ybSwgc2FiaV9qc29uX3BhdGg9c2FiaV9qc29uX3BhdGgpCi0KLSAgZGVmIEdldFZhcmlhYmxlcyhzZWxmLCBjb25maWd1cmF0aW9uKToKLSAgICB2YXJpYWJsZXMgPSBzdXBlcihSYXNwaTJQbGF0Zm9ybUNvbmZpZywgc2VsZikuR2V0VmFyaWFibGVzKGNvbmZpZ3VyYXRpb24pCi0gICAgcmV0dXJuIHZhcmlhYmxlcworICBwYXNzCiAKIAogZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBSYXNwaTJQbGF0Zm9ybUNvbmZpZygKLSAgICAgICdyYXNwaS0yJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9hcm0vaGFyZGZwL3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBSYXNwaTJQbGF0Zm9ybUNvbmZpZygncmFzcGktMicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIGIvc3RhcmJvYXJkL3Jhc3BpLzIvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQppbmRleCA3N2VjNWE5Li4zYjIzNjYxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCisrKyBiL3N0YXJib2FyZC9yYXNwaS8yL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKQEAgLTE4LDMgKzE4LDUgQEAKIAogc2JfZXZlcmdyZWVuX2NvbXBhdGlibGVfdXNlX2xpYnVud2luZCA9IHRydWUKIHNiX2lzX2V2ZXJncmVlbl9jb21wYXRpYmxlID0gdHJ1ZQorCitzZXBhcmF0ZV9pbnN0YWxsX3RhcmdldHNfZm9yX2J1bmRsaW5nID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaCBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9hdG9taWNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWM5YjMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEyL2F0b21pY19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTJfQVRPTUlDX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3Jhc3BpLzIvYXRvbWljX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9SQVNQSV8yX1NCVkVSU0lPTl8xMl9BVE9NSUNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWE1NWRhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gVGhlIFN0YXJib2FyZCBjb25maWd1cmF0aW9uIGZvciBSYXNwYmVycnkgUEkgMiBSYXNwYmlhbi4KLQotI2lmbmRlZiBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCi0KLS8vIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0aGF0IGFsbG93IHRoZSBhcHBsaWNhdGlvbiB0byBtYWtlIHNvbWUgZ2VuZXJhbAotLy8gY29tcGlsZS10aW1lIGRlY2lzaW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIHRoZSBudW1iZXIgb2YgY29yZXMgbGlrZWx5IHRvIGJlCi0vLyBhdmFpbGFibGUgb24gdGhpcyBwbGF0Zm9ybS4gRm9yIGEgZGVmaW5pdGl2ZSBtZWFzdXJlLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkCi0vLyBzdGlsbCBjYWxsIFNiU3lzdGVtR2V0TnVtYmVyT2ZQcm9jZXNzb3JzIGF0IHJ1bnRpbWUuCi0KLS8vIC0tLSBTeXN0ZW0gSGVhZGVyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBBbnkgc3lzdGVtIGhlYWRlcnMgbGlzdGVkIGhlcmUgdGhhdCBhcmUgbm90IHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSB3aWxsIGJlCi0vLyBlbXVsYXRlZCBpbiBzdGFyYm9hcmQvdHlwZXMuaC4KLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBwcm92aWRlcyB0aGUgc3RhbmRhcmQgaGVhZGVyIHN5cy90eXBlcy5oLgotI2RlZmluZSBTQl9IQVNfU1lTX1RZUEVTX0ggMQotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIHByb3ZpZGVzIHNzaXplX3QuCi0jZGVmaW5lIFNCX0hBU19TU0laRV9UIDEKLQotLy8gVHlwZSBkZXRlY3Rpb24gZm9yIHdjaGFyX3QuCi0jaWYgZGVmaW5lZChfX1dDSEFSX01BWF9fKSAmJiBcCi0gICAgKF9fV0NIQVJfTUFYX18gPT0gMHg3ZmZmZmZmZiB8fCBfX1dDSEFSX01BWF9fID09IDB4ZmZmZmZmZmYpCi0jZGVmaW5lIFNCX0lTX1dDSEFSX1RfVVRGMzIgMQotI2VsaWYgZGVmaW5lZChfX1dDSEFSX01BWF9fKSAmJiBcCi0gICAgKF9fV0NIQVJfTUFYX18gPT0gMHg3ZmZmIHx8IF9fV0NIQVJfTUFYX18gPT0gMHhmZmZmKQotI2RlZmluZSBTQl9JU19XQ0hBUl9UX1VURjE2IDEKLSNlbmRpZgotCi0vLyBDaHJvbWUgaGFzIGFuIGV4Y2x1c2lvbiBmb3IgaU9TIGhlcmUsIHdlIHNob3VsZCB0b28gd2hlbiB3ZSBzdXBwb3J0IGlPUy4KLSNkZWZpbmUgU0JfSVNfV0NIQVJfVF9VTlNJR05FRCAxCi0KLS8vIC0tLSBBdHRyaWJ1dGUgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBmb3JjaW5nIGEgQyBmdW5jdGlvbiB0byBiZSBpbmxpbmVkLgotI2RlZmluZSBTQl9DX0ZPUkNFX0lOTElORSBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQotCi0vLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBtYXJraW5nIGEgQyBmdW5jdGlvbiBhcyBzdWdnZXN0ZWQgdG8gYmUKLS8vIGlubGluZWQuCi0jZGVmaW5lIFNCX0NfSU5MSU5FIGlubGluZQotCi0vLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBtYXJraW5nIGEgQyBmdW5jdGlvbiBhcyBmb3JjaWJseSBub3QKLS8vIGlubGluZWQuCi0jZGVmaW5lIFNCX0NfTk9JTkxJTkUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotCi0vLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBtYXJraW5nIGEgc3ltYm9sIGFzIGV4cG9ydGVkIG91dHNpZGUgb2YgdGhlCi0vLyBjdXJyZW50IHNoYXJlZCBsaWJyYXJ5LgotI2RlZmluZSBTQl9FWFBPUlRfUExBVEZPUk0gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotLy8gVGhlIHBsYXRmb3JtJ3MgYW5ub3RhdGlvbiBmb3IgbWFya2luZyBhIHN5bWJvbCBhcyBpbXBvcnRlZCBmcm9tIG91dHNpZGUgb2YKLS8vIHRoZSBjdXJyZW50IGxpbmtpbmcgdW5pdC4KLSNkZWZpbmUgU0JfSU1QT1JUX1BMQVRGT1JNCi0KLS8vIC0tLSBFeHRlbnNpb25zIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBEbyBub3QgdXNlIDx1bm9yZGVyZWRfbWFwPiBhbmQgPHVub3JkZXJlZF9zZXQ+IGZvciB0aGUgaGFzaCB0YWJsZSB0eXBlcy4KLSNkZWZpbmUgU0JfSEFTX1NURF9VTk9SREVSRURfSEFTSCAwCi0KLS8vIEdDQy9DbGFuZyBkb2Vzbid0IGRlZmluZSBhIGxvbmcgbG9uZyBoYXNoIGZ1bmN0aW9uLCBleGNlcHQgZm9yIEFuZHJvaWQgYW5kCi0vLyBHYW1lIGNvbnNvbGVzLgotI2RlZmluZSBTQl9IQVNfTE9OR19MT05HX0hBU0ggMAotCi0vLyBHQ0MvQ2xhbmcgZG9lc24ndCBkZWZpbmUgYSBzdHJpbmcgaGFzaCBmdW5jdGlvbiwgZXhjZXB0IGZvciBHYW1lIENvbnNvbGVzLgotI2RlZmluZSBTQl9IQVNfU1RSSU5HX0hBU0ggMAotCi0vLyBEZXNrdG9wIExpbnV4IG5lZWRzIGEgdXNpbmcgc3RhdGVtZW50IGZvciB0aGUgaGFzaCBmdW5jdGlvbnMuCi0jZGVmaW5lIFNCX0hBU19IQVNIX1VTSU5HIDAKLQotLy8gU2V0IHRoaXMgdG8gMSBpZiBoYXNoIGZ1bmN0aW9ucyBmb3IgY3VzdG9tIHR5cGVzIGNhbiBiZSBkZWZpbmVkIGFzIGEKLS8vIGhhc2hfdmFsdWUoKSBmdW5jdGlvbi4gT3RoZXJ3aXNlLCB0aGV5IG5lZWQgdG8gYmUgcGxhY2VkIGluc2lkZSBhCi0vLyBwYXJ0aWFsbHktc3BlY2lmaWVkIGhhc2ggc3RydWN0IHRlbXBsYXRlIHdpdGggYW4gb3BlcmF0b3IoKS4KLSNkZWZpbmUgU0JfSEFTX0hBU0hfVkFMVUUgMAotCi0vLyBTZXQgdGhpcyB0byAxIGlmIHVzZSBvZiBoYXNoX21hcCBvciBoYXNoX3NldCBjYXVzZXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nCi0vLyAod2hpY2ggdGhlbiBicmVha3MgdGhlIGJ1aWxkKS4KLSNkZWZpbmUgU0JfSEFTX0hBU0hfV0FSTklORyAxCi0KLS8vIFRoZSBsb2NhdGlvbiB0byBpbmNsdWRlIGhhc2hfbWFwIG9uIHRoaXMgcGxhdGZvcm0uCi0jZGVmaW5lIFNCX0hBU0hfTUFQX0lOQ0xVREUgPGV4dC9oYXNoX21hcD4KLQotLy8gQysrJ3MgaGFzaF9tYXAgYW5kIGhhc2hfc2V0IGFyZSBvZnRlbiBmb3VuZCBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcyBkZXBlbmRpbmcKLS8vIG9uIHRoZSBjb21waWxlci4KLSNkZWZpbmUgU0JfSEFTSF9OQU1FU1BBQ0UgX19nbnVfY3h4Ci0KLS8vIFRoZSBsb2NhdGlvbiB0byBpbmNsdWRlIGhhc2hfc2V0IG9uIHRoaXMgcGxhdGZvcm0uCi0jZGVmaW5lIFNCX0hBU0hfU0VUX0lOQ0xVREUgPGV4dC9oYXNoX3NldD4KLQotLy8gRGVmaW5lIHRoaXMgdG8gaG93IHRoaXMgcGxhdGZvcm0gY29waWVzIHZhcmFyZ3MgYmxvY2tzLgotI2RlZmluZSBTQl9WQV9DT1BZKGRlc3QsIHNvdXJjZSkgdmFfY29weShkZXN0LCBzb3VyY2UpCi0KLS8vIC0tLSBHcmFwaGljcyBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBsYXRmb3JtIHN1cHBvcnRzIGJpbGluZWFyIGZpbHRlcmluZy4KLS8vIFRoaXMgY2FuIGJlIGNoZWNrZWQgdG8gZW5hYmxlL2Rpc2FibGUgcmVuZGVyZXIgdGVzdHMgdGhhdCB2ZXJpZnkgdGhhdCB0aGlzIGlzCi0vLyB3b3JraW5nIHByb3Blcmx5LgotI2RlZmluZSBTQl9IQVNfQklMSU5FQVJfRklMVEVSSU5HX1NVUFBPUlQgMQotCi0vLyBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGdpdmVuIHBsYXRmb3JtIHN1cHBvcnRzIHJlbmRlcmluZyBvZiBOVjEyCi0vLyB0ZXh0dXJlcy4gVGhlc2UgdGV4dHVyZXMgdHlwaWNhbGx5IG9yaWdpbmF0ZSBmcm9tIHZpZGVvIGRlY29kZXJzLgotI2RlZmluZSBTQl9IQVNfTlYxMl9URVhUVVJFX1NVUFBPUlQgMQotCi0vLyAtLS0gSS9PIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBpbXBsZW1lbnRzIHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgaW50ZXJmYWNlLgotI2RlZmluZSBTQl9IQVNfT05fU0NSRUVOX0tFWUJPQVJEIDAKLQotLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBoYXMgc3BlZWNoIHJlY29nbml6ZXIuCi0jZGVmaW5lIFNCX0hBU19TUEVFQ0hfUkVDT0dOSVpFUiAwCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaGFzIHNwZWVjaCBzeW50aGVzaXMuCi0jZGVmaW5lIFNCX0hBU19TUEVFQ0hfU1lOVEhFU0lTIDAKLQotLy8gLS0tIE1lbW9yeSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBjYW4gbWFwIGV4ZWN1dGFibGUgbWVtb3J5LiBJbXBsaWVzIFNCX0hBU19NTUFQLiBUaGlzIGlzCi0vLyByZXF1aXJlZCBmb3IgcGxhdGZvcm1zIHRoYXQgd2FudCB0byBKSVQuCi0jZGVmaW5lIFNCX0NBTl9NQVBfRVhFQ1VUQUJMRV9NRU1PUlkgMQotCi0vLyAtLS0gTmV0d29yayBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gU3BlY2lmaWVzIHdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBzdXBwb3J0cyBJUFY2LgotI2RlZmluZSBTQl9IQVNfSVBWNiAxCi0KLS8vIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgcGlwZS4KLSNkZWZpbmUgU0JfSEFTX1BJUEUgMQotCi0vLyAtLS0gVGltaW5nIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGhhcyBhbiBBUEkgdG8gcmV0cmlldmUgaG93IGxvbmcgdGhlIGN1cnJlbnQgdGhyZWFkCi0vLyBoYXMgc3BlbnQgaW4gdGhlIGV4ZWN1dGluZyBzdGF0ZS4KLSNkZWZpbmUgU0JfSEFTX1RJTUVfVEhSRUFEX05PVyAxCi0KLS8vIC0tLSBQbGF0Zm9ybSBTcGVjaWZpYyBBdWRpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgIWRlZmluZWQoX19HTlVDX18pCi0jZXJyb3IgIlJhc1BpIGJ1aWxkcyBuZWVkIGEgR0NDLWxpa2UgY29tcGlsZXIgKGZvciB0aGUgbW9tZW50KS4iCi0jZW5kaWYKLQotLy8gLS0tIFBsYXRmb3JtIFNwZWNpZmljIFF1aXJrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoZSBSYXNwYmVycnkgUGkgZG9lcyBub3QgYXBwYXJlbnRseSBhbGlnbiBmaWVsZHMgaW4gYSBoZWFwLWFsbG9jYXRlZCBzdHJ1Y3QKLS8vIGJ5IG92ZXIgMTYgYnl0ZXMuCi0jZGVmaW5lIFNCX0hBU19RVUlSS19ET0VTX05PVF9BTElHTl9GSUVMRFNfSU5fSEVBUF9PVkVSXzE2X0JZVEVTIDEKLQotLy8gVGhlIFJhc3BiZXJyeSBQaSBkb2VzIG5vdCBhcHBhcmVudGx5IGFsaWduIHN0YWNrIHZhcmlhYmxlcyBieSBvdmVyIDE2IGJ5dGVzLgotI2RlZmluZSBTQl9IQVNfUVVJUktfRE9FU19OT1RfU1RBQ0tfQUxJR05fT1ZFUl8xNl9CWVRFUyAxCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGQ2YTc3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlJzogMSwKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQnOiAxLAotICAgIH0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ3Jhc3BpLTItc2J2ZXJzaW9uLTEyX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTJfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTJfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTJfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTJfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvMi9hcmNoaXRlY3R1cmUuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NWU2ODQuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEyL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgUmFzcGJlcnJ5IFBpIDIgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKLQotaW1wb3J0IGltcG9ydGxpYgotCi0jIER5bmFtaWNhbGx5IGltcG9ydGVkIHRvIGdldCBhcm91bmQgdGhlIG51bWJlciBpbiB0aGUgcGF0aC4KLV9QQVJFTlRfQ09ORklHVVJBVElPTiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKAotICAgICdzdGFyYm9hcmQucmFzcGkuMi5neXBfY29uZmlndXJhdGlvbicpCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBfUEFSRU5UX0NPTkZJR1VSQVRJT04uUmFzcGkyUGxhdGZvcm1Db25maWcoCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTInLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2FybS9oYXJkZnAvc2FiaS12MTIuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTFkYTNjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpLzIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2lzX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX3N0b3AuY2MnLAotICAgICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTIvdGVzdF9maWx0ZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODNlNzdlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi90ZXN0X2ZpbHRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSIiIlN0YXJib2FyZCBSYXNwYmVycnkgUGkgMiBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCi0KLWltcG9ydCBpbXBvcnRsaWIKLQotIyBEeW5hbWljYWxseSBpbXBvcnRlZCB0byBnZXQgYXJvdW5kIHRoZSBudW1iZXIgaW4gdGhlIHBhdGguCi1fUEFSRU5UX1RFU1RfRklMVEVSUyA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdzdGFyYm9hcmQucmFzcGkuMi50ZXN0X2ZpbHRlcnMnKQotCi0KLWRlZiBDcmVhdGVUZXN0RmlsdGVycygpOgotICByZXR1cm4gX1BBUkVOVF9URVNUX0ZJTFRFUlMuUmFzcGkyVGVzdEZpbHRlcnMoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMi90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZTI3YTUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEyL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2lmbmRlZiBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3Jhc3BpLzIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9SQVNQSV8yX1NCVkVSU0lPTl8xMl9USFJFQURfVFlQRVNfUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEzL2F0b21pY19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdlNDRjYS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvYXRvbWljX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9SQVNQSV8yX1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9SQVNQSV8yX1NCVkVSU0lPTl8xM19BVE9NSUNfUFVCTElDX0hfCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvcmFzcGkvMi9hdG9taWNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEzX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZmE4YTAuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGUgU3RhcmJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIFJhc3BiZXJyeSBQSSAyIFJhc3BiaWFuLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9SQVNQSV8yX1NCVkVSU0lPTl8xM19DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTNfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KLQotLy8gLS0tIFN5c3RlbSBIZWFkZXIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEFueSBzeXN0ZW0gaGVhZGVycyBsaXN0ZWQgaGVyZSB0aGF0IGFyZSBub3QgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtIHdpbGwgYmUKLS8vIGVtdWxhdGVkIGluIHN0YXJib2FyZC90eXBlcy5oLgotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBoZWFkZXIgc3lzL3R5cGVzLmguCi0jZGVmaW5lIFNCX0hBU19TWVNfVFlQRVNfSCAxCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gcHJvdmlkZXMgc3NpemVfdC4KLSNkZWZpbmUgU0JfSEFTX1NTSVpFX1QgMQotCi0vLyBUeXBlIGRldGVjdGlvbiBmb3Igd2NoYXJfdC4KLSNkZWZpbmUgU0JfSVNfV0NIQVJfVF9VVEYzMiAxCi0KLS8vIENocm9tZSBoYXMgYW4gZXhjbHVzaW9uIGZvciBpT1MgaGVyZSwgd2Ugc2hvdWxkIHRvbyB3aGVuIHdlIHN1cHBvcnQgaU9TLgotI2RlZmluZSBTQl9JU19XQ0hBUl9UX1VOU0lHTkVEIDEKLQotLy8gLS0tIEF0dHJpYnV0ZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIGZvcmNpbmcgYSBDIGZ1bmN0aW9uIHRvIGJlIGlubGluZWQuCi0jZGVmaW5lIFNCX0NfRk9SQ0VfSU5MSU5FIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCi0KLS8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBDIGZ1bmN0aW9uIGFzIHN1Z2dlc3RlZCB0byBiZQotLy8gaW5saW5lZC4KLSNkZWZpbmUgU0JfQ19JTkxJTkUgaW5saW5lCi0KLS8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBDIGZ1bmN0aW9uIGFzIGZvcmNpYmx5IG5vdAotLy8gaW5saW5lZC4KLSNkZWZpbmUgU0JfQ19OT0lOTElORSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCi0KLS8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBzeW1ib2wgYXMgZXhwb3J0ZWQgb3V0c2lkZSBvZiB0aGUKLS8vIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCi0jZGVmaW5lIFNCX0VYUE9SVF9QTEFURk9STSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotCi0vLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBtYXJraW5nIGEgc3ltYm9sIGFzIGltcG9ydGVkIGZyb20gb3V0c2lkZSBvZgotLy8gdGhlIGN1cnJlbnQgbGlua2luZyB1bml0LgotI2RlZmluZSBTQl9JTVBPUlRfUExBVEZPUk0KLQotLy8gLS0tIEV4dGVuc2lvbnMgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIERvIG5vdCB1c2UgPHVub3JkZXJlZF9tYXA+IGFuZCA8dW5vcmRlcmVkX3NldD4gZm9yIHRoZSBoYXNoIHRhYmxlIHR5cGVzLgotI2RlZmluZSBTQl9IQVNfU1REX1VOT1JERVJFRF9IQVNIIDAKLQotLy8gR0NDL0NsYW5nIGRvZXNuJ3QgZGVmaW5lIGEgbG9uZyBsb25nIGhhc2ggZnVuY3Rpb24sIGV4Y2VwdCBmb3IgQW5kcm9pZCBhbmQKLS8vIEdhbWUgY29uc29sZXMuCi0jZGVmaW5lIFNCX0hBU19MT05HX0xPTkdfSEFTSCAwCi0KLS8vIEdDQy9DbGFuZyBkb2Vzbid0IGRlZmluZSBhIHN0cmluZyBoYXNoIGZ1bmN0aW9uLCBleGNlcHQgZm9yIEdhbWUgQ29uc29sZXMuCi0jZGVmaW5lIFNCX0hBU19TVFJJTkdfSEFTSCAwCi0KLS8vIERlc2t0b3AgTGludXggbmVlZHMgYSB1c2luZyBzdGF0ZW1lbnQgZm9yIHRoZSBoYXNoIGZ1bmN0aW9ucy4KLSNkZWZpbmUgU0JfSEFTX0hBU0hfVVNJTkcgMAotCi0vLyBTZXQgdGhpcyB0byAxIGlmIGhhc2ggZnVuY3Rpb25zIGZvciBjdXN0b20gdHlwZXMgY2FuIGJlIGRlZmluZWQgYXMgYQotLy8gaGFzaF92YWx1ZSgpIGZ1bmN0aW9uLiBPdGhlcndpc2UsIHRoZXkgbmVlZCB0byBiZSBwbGFjZWQgaW5zaWRlIGEKLS8vIHBhcnRpYWxseS1zcGVjaWZpZWQgaGFzaCBzdHJ1Y3QgdGVtcGxhdGUgd2l0aCBhbiBvcGVyYXRvcigpLgotI2RlZmluZSBTQl9IQVNfSEFTSF9WQUxVRSAwCi0KLS8vIFNldCB0aGlzIHRvIDEgaWYgdXNlIG9mIGhhc2hfbWFwIG9yIGhhc2hfc2V0IGNhdXNlcyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcKLS8vICh3aGljaCB0aGVuIGJyZWFrcyB0aGUgYnVpbGQpLgotI2RlZmluZSBTQl9IQVNfSEFTSF9XQVJOSU5HIDEKLQotLy8gVGhlIGxvY2F0aW9uIHRvIGluY2x1ZGUgaGFzaF9tYXAgb24gdGhpcyBwbGF0Zm9ybS4KLSNkZWZpbmUgU0JfSEFTSF9NQVBfSU5DTFVERSA8ZXh0L2hhc2hfbWFwPgotCi0vLyBDKysncyBoYXNoX21hcCBhbmQgaGFzaF9zZXQgYXJlIG9mdGVuIGZvdW5kIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzIGRlcGVuZGluZwotLy8gb24gdGhlIGNvbXBpbGVyLgotI2RlZmluZSBTQl9IQVNIX05BTUVTUEFDRSBfX2dudV9jeHgKLQotLy8gVGhlIGxvY2F0aW9uIHRvIGluY2x1ZGUgaGFzaF9zZXQgb24gdGhpcyBwbGF0Zm9ybS4KLSNkZWZpbmUgU0JfSEFTSF9TRVRfSU5DTFVERSA8ZXh0L2hhc2hfc2V0PgotCi0vLyAtLS0gR3JhcGhpY3MgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwbGF0Zm9ybSBzdXBwb3J0cyBiaWxpbmVhciBmaWx0ZXJpbmcuCi0vLyBUaGlzIGNhbiBiZSBjaGVja2VkIHRvIGVuYWJsZS9kaXNhYmxlIHJlbmRlcmVyIHRlc3RzIHRoYXQgdmVyaWZ5IHRoYXQgdGhpcyBpcwotLy8gd29ya2luZyBwcm9wZXJseS4KLSNkZWZpbmUgU0JfSEFTX0JJTElORUFSX0ZJTFRFUklOR19TVVBQT1JUIDEKLQotLy8gSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBnaXZlbiBwbGF0Zm9ybSBzdXBwb3J0cyByZW5kZXJpbmcgb2YgTlYxMgotLy8gdGV4dHVyZXMuIFRoZXNlIHRleHR1cmVzIHR5cGljYWxseSBvcmlnaW5hdGUgZnJvbSB2aWRlbyBkZWNvZGVycy4KLSNkZWZpbmUgU0JfSEFTX05WMTJfVEVYVFVSRV9TVVBQT1JUIDEKLQotLy8gLS0tIEkvTyBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaW1wbGVtZW50cyB0aGUgb24gc2NyZWVuIGtleWJvYXJkIGludGVyZmFjZS4KLSNkZWZpbmUgU0JfSEFTX09OX1NDUkVFTl9LRVlCT0FSRCAwCi0KLS8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaGFzIHNwZWVjaCByZWNvZ25pemVyLgotI2RlZmluZSBTQl9IQVNfU1BFRUNIX1JFQ09HTklaRVIgMAotCi0vLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIGhhcyBzcGVlY2ggc3ludGhlc2lzLgotI2RlZmluZSBTQl9IQVNfU1BFRUNIX1NZTlRIRVNJUyAwCi0KLS8vIC0tLSBNZW1vcnkgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gY2FuIG1hcCBleGVjdXRhYmxlIG1lbW9yeS4gSW1wbGllcyBTQl9IQVNfTU1BUC4gVGhpcyBpcwotLy8gcmVxdWlyZWQgZm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gSklULgotI2RlZmluZSBTQl9DQU5fTUFQX0VYRUNVVEFCTEVfTUVNT1JZIDEKLQotLy8gLS0tIE5ldHdvcmsgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgSVBWNi4KLSNkZWZpbmUgU0JfSEFTX0lQVjYgMQotCi0vLyBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIHBpcGUuCi0jZGVmaW5lIFNCX0hBU19QSVBFIDEKLQotLy8gLS0tIFRpbWluZyBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBoYXMgYW4gQVBJIHRvIHJldHJpZXZlIGhvdyBsb25nIHRoZSBjdXJyZW50IHRocmVhZAotLy8gaGFzIHNwZW50IGluIHRoZSBleGVjdXRpbmcgc3RhdGUuCi0jZGVmaW5lIFNCX0hBU19USU1FX1RIUkVBRF9OT1cgMQotCi0vLyAtLS0gUGxhdGZvcm0gU3BlY2lmaWMgQXVkaXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmICFkZWZpbmVkKF9fR05VQ19fKQotI2Vycm9yICJSYXNQaSBidWlsZHMgbmVlZCBhIEdDQy1saWtlIGNvbXBpbGVyIChmb3IgdGhlIG1vbWVudCkuIgotI2VuZGlmCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEzX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVhMWRlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlJzogMSwKLSAgICAgICdzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQnOiAxLAotICAgIH0sCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ3Jhc3BpLTItc2J2ZXJzaW9uLTEzX2RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTNfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTNfZGV2ZWwnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RldmVsX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTNfcWEnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ3FhX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTNfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvMi9hcmNoaXRlY3R1cmUuZ3lwaScsCi0gICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YmFmZmYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEzL2d5cF9jb25maWd1cmF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgUmFzcGJlcnJ5IFBpIDIgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKLQotaW1wb3J0IGltcG9ydGxpYgotCi0jIER5bmFtaWNhbGx5IGltcG9ydGVkIHRvIGdldCBhcm91bmQgdGhlIG51bWJlciBpbiB0aGUgcGF0aC4KLV9QQVJFTlRfQ09ORklHVVJBVElPTiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKAotICAgICdzdGFyYm9hcmQucmFzcGkuMi5neXBfY29uZmlndXJhdGlvbicpCi0KLQotZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6Ci0gIHJldHVybiBfUEFSRU5UX0NPTkZJR1VSQVRJT04uUmFzcGkyUGxhdGZvcm1Db25maWcoCi0gICAgICAncmFzcGktMi1zYnZlcnNpb24tMTMnLAotICAgICAgc2FiaV9qc29uX3BhdGg9J3N0YXJib2FyZC9zYWJpL2FybS9oYXJkZnAvc2FiaS12MTMuanNvbicpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzliNGM2Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICMgTm90ZSB0aGF0IHdlIGFyZSAnaW5jbHVkZXMnaW5nIGEgJ2d5cCcgZmlsZSwgbm90IGEgJ2d5cGknIGZpbGUuICBUaGUgaWRlYQotICAgICMgaXMgdGhhdCB3ZSBqdXN0IHdhbnQgdGhpcyBmaWxlIHRvICpiZSogdGhlIHBhcmVudCBneXAgZmlsZS4KLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpLzIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2J2ZXJzaW9uLzEzL3Rlc3RfZmlsdGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgzZTc3ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvdGVzdF9maWx0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJTdGFyYm9hcmQgUmFzcGJlcnJ5IFBpIDIgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgotCi1pbXBvcnQgaW1wb3J0bGliCi0KLSMgRHluYW1pY2FsbHkgaW1wb3J0ZWQgdG8gZ2V0IGFyb3VuZCB0aGUgbnVtYmVyIGluIHRoZSBwYXRoLgotX1BBUkVOVF9URVNUX0ZJTFRFUlMgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnc3RhcmJvYXJkLnJhc3BpLjIudGVzdF9maWx0ZXJzJykKLQotCi1kZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKLSAgcmV0dXJuIF9QQVJFTlRfVEVTVF9GSUxURVJTLlJhc3BpMlRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvcmFzcGkvMi9zYnZlcnNpb24vMTMvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjFiYTQ0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NidmVyc2lvbi8xMy90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX1JBU1BJXzJfU0JWRVJTSU9OXzEzX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9yYXNwaS8yL3RocmVhZF90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfUkFTUElfMl9TQlZFUlNJT05fMTNfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmY2NjE1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdyYXNwaS0yLXNraWFfZGVidWcnLAotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdyYXNwaS0yLXNraWFfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAncmFzcGktMi1za2lhX2RldmVsJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ3Jhc3BpLTItc2tpYV9xYSc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsncWFfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdyYXNwaS0yLXNraWFfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH0sCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9hcmNoaXRlY3R1cmUuZ3lwaScsCi0gICAgJy4uLy4uL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkgYi9zdGFyYm9hcmQvcmFzcGkvMi9za2lhL2d5cF9jb25maWd1cmF0aW9uLnB5CmluZGV4IGJhODY1NGMuLjYxZjI5NTMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMjEsNiArMjEsNCBAQAogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gUmFzcGkyUGxhdGZvcm1Db25maWcoCi0gICAgICAncmFzcGktMi1za2lhJywKLSAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9hcm0vaGFyZGZwL3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicpCisgIHJldHVybiBSYXNwaTJQbGF0Zm9ybUNvbmZpZygncmFzcGktMi1za2lhJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1N2NkMS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9za2lhL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi8uLi9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGknLAotICBdLAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdzb3VyY2VzJzogWwotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvY29uZmlndXJhdGlvbi5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS9jb25maWd1cmF0aW9uLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvc3lzdGVtX2dldF9leHRlbnNpb25zLmNjJywKLSAgICBdLAotICAgICdzb3VyY2VzISc6IFsKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2NvbmZpZ3VyYXRpb24uY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvY29uZmlndXJhdGlvbi5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYycsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS8yL3NraWEvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwN2JjOWIuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc2tpYS90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX1JBU1BJXzJfU0tJQV9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9SQVNQSV8yX1NLSUFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3Jhc3BpLzIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oIgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9SQVNQSV8yX1NLSUFfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpLzIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9yYXNwaS8yL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMWFmN2MuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwIGIvc3RhcmJvYXJkL3Jhc3BpLzIvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAxYmE1Mi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvMi9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaScsCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvMi90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvcmFzcGkvMi90aHJlYWRfdHlwZXNfcHVibGljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjAzYzcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpLzIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9SQVNQSV8yX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX1JBU1BJXzJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1JBU1BJXzJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9CVUlMRC5nbiBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvQlVJTEQuZ24KaW5kZXggNzBkNjBmZi4uYTU2NTNmMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL0JVSUxELmduCkBAIC04MCw5ICs4MCw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfYXVkaW9fc2lua190eXBlLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuaCIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfbWFwLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV91bm1hcC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9lZ2wvc3lzdGVtX2VnbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9nY2MvYXRvbWljX2djY19wdWJsaWMuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX2FscGhhbnVtZXJpYy5jYyIsCkBAIC0xMzUsNyArMTMyLDYgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2Rldl9pbnB1dC9kZXZfaW5wdXQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvZ2V0X2hvbWVfZGlyZWN0b3J5LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L21lbW9yeV9nZXRfc3RhY2tfYm91bmRzLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3JhbmRvbV9kYXRhLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfc3RhY2suY2MiLApAQCAtMTUzLDYgKzE0OSw3IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5oIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2RpcmVjdG9yeV9jcmVhdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZW52aXJvbm1lbnQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9hdG9taWNfcmVwbGFjZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2Nhbl9vcGVuLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfY2xvc2UuY2MiLApAQCAtMTc0LDYgKzE3MSwxMCBAQAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X2FsbG9jYXRlX2FsaWduZWRfdW5jaGVja2VkLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9mbHVzaC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfZnJlZV9hbGlnbmVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9tYXAuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3Byb3RlY3QuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3VubWFwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfYWNjZXB0LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9iaW5kLmNjIiwKQEAgLTMwOSwxMiArMzEwLDEzIEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkX2FhY19hbmRfb3B1cy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3Bvb2xfYWxsb2NhdGVfb25fZGVtYW5kLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfdXNpbmdfbWVtb3J5X3Bvb2wuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljc19zdXBwb3J0ZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWltZV90eXBlLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lbW9yeS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV3LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9xdWV1ZV9hcHBsaWNhdGlvbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2NvbmNhdC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2NvbmNhdF93aWRlLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29weS5jYyIsCkBAIC0zMzMsMTIgKzMzNSw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2Rpc3BsYXlfc2V0dGluZ3MuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X2dldF90ZXh0X3RvX3NwZWVjaF9zZXR0aW5ncy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2Rlc3Ryb3lfdHJhbnNmb3JtZXIuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZ2V0X3RhZy5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3NldF9pbml0aWFsaXphdGlvbl92ZWN0b3IuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2Nsb3NlX3Nlc3Npb24uY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fY3JlYXRlX3N5c3RlbS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9kZXN0cm95X3N5c3RlbS5jYyIsCkBAIC0zOTcsNyArMzkzLDcgQEAKICAgcHVibGljX2RlcHMgPSBbCiAgICAgIjpzdGFyYm9hcmRfYmFzZV9zeW1ib2xpemUiLAogICAgICIvL3N0YXJib2FyZDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5IiwKLSAgICAiLy9zdGFyYm9hcmQvY29tbW9uLyIsCisgICAgIi8vc3RhcmJvYXJkL2NvbW1vbiIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWc6ZmZtcGVnX2xpbmtlZCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWE6bWVkaWFfdXRpbCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlcjpmaWx0ZXJfYmFzZWRfcGxheWVyX3NvdXJjZXMiLApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWM1MmNmLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIENvYmFsdC1vbi1MaW51eC1zcGVjaWZpYyBjb25maWd1cmF0aW9uLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2luX2FwcF9kaWFsJSc6IDAsCi0gIH0sICMgZW5kIG9mIHZhcmlhYmxlcwotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggN2VjYWM0OC4uNWFhN2FlMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb2JhbHQvY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2NvYmFsdC9jb25maWd1cmF0aW9uLnB5CkBAIC0xMyw4ICsxMyw2IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIiIiU3RhcmJvYXJkIFJhc3BiZXJyeSBQaSBzaGFyZWQgQ29iYWx0IGNvbmZpZ3VyYXRpb24uIiIiCiAKLWltcG9ydCBvcwotCiBmcm9tIGNvYmFsdC5idWlsZCBpbXBvcnQgY29iYWx0X2NvbmZpZ3VyYXRpb24KIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKQEAgLTIyLDIwICsyMCw2IEBACiBjbGFzcyBDb2JhbHRSYXNwaUNvbmZpZ3VyYXRpb24oY29iYWx0X2NvbmZpZ3VyYXRpb24uQ29iYWx0Q29uZmlndXJhdGlvbik6CiAgICIiIlN0YXJib2FyZCBSYXNwYmVycnkgUGkgc2hhcmVkIENvYmFsdCBjb25maWd1cmF0aW9uLiIiIgogCi0gIGRlZiBHZXRQb3N0SW5jbHVkZXMoc2VsZik6Ci0gICAgIyBJZiB0aGVyZSBpc24ndCBhIGNvbmZpZ3VyYXRpb24uZ3lwaSBmb3VuZCBpbiB0aGUgdXN1YWwgcGxhY2UsIHdlJ2xsCi0gICAgIyBzdXBwbGVtZW50IHdpdGggb3VyIHNoYXJlZCBpbXBsZW1lbnRhdGlvbi4KLSAgICBpbmNsdWRlcyA9IHN1cGVyKENvYmFsdFJhc3BpQ29uZmlndXJhdGlvbiwgc2VsZikuR2V0UG9zdEluY2x1ZGVzKCkKLSAgICBmb3IgaW5jbHVkZSBpbiBpbmNsdWRlczoKLSAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoaW5jbHVkZSkgPT0gJ2NvbmZpZ3VyYXRpb24uZ3lwaSc6Ci0gICAgICAgIHJldHVybiBpbmNsdWRlcwotCi0gICAgc2hhcmVkX2d5cGlfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2NvbmZpZ3VyYXRpb24uZ3lwaScpCi0gICAgaWYgb3MucGF0aC5pc2ZpbGUoc2hhcmVkX2d5cGlfcGF0aCk6Ci0gICAgICBpbmNsdWRlcy5hcHBlbmQoc2hhcmVkX2d5cGlfcGF0aCkKLSAgICByZXR1cm4gaW5jbHVkZXMKLQogICBkZWYgV2ViZHJpdmVyQmVuY2htYXJrc0VuYWJsZWQoc2VsZik6CiAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oCmluZGV4IGUxMGI3ZjUuLjNjOWVkNjQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaAorKysgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTEyMywxMiArMTIzLDYgQEAKIAogLy8gLS0tIE1lbW9yeSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBoYXMgYW5kIHNob3VsZCB1c2UgYW4gTU1BUCBmdW5jdGlvbiB0byBtYXAgcGh5c2ljYWwKLS8vIG1lbW9yeSB0byB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLSNkZWZpbmUgU0JfSEFTX01NQVAgMQotI2VuZGlmCi0KIC8vIFdoZXRoZXIgdGhpcyBwbGF0Zm9ybSBjYW4gbWFwIGV4ZWN1dGFibGUgbWVtb3J5LiBJbXBsaWVzIFNCX0hBU19NTUFQLiBUaGlzIGlzCiAvLyByZXF1aXJlZCBmb3IgcGxhdGZvcm1zIHRoYXQgd2FudCB0byBKSVQuCiAjZGVmaW5lIFNCX0NBTl9NQVBfRVhFQ1VUQUJMRV9NRU1PUlkgMQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzNmMzE3Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICMgT3ZlcnJpZGUgdGhhdCBvbWl0cyB0aGUgImRhdGEiIHN1YmRpcmVjdG9yeS4KLSAgICAjIFRPRE86IFJlbW92ZSB3aGVuIG9taXR0ZWQgZm9yIGFsbCBwbGF0Zm9ybXMgaW4gYmFzZV9jb25maWd1cmF0aW9uLmd5cGkuCi0gICAgJ3NiX3N0YXRpY19jb250ZW50c19vdXRwdXRfZGF0YV9kaXInOiAnPChQUk9EVUNUX0RJUikvY29udGVudCcsCi0KLSAgICAndGFyZ2V0X29zJzogJ2xpbnV4JywKLQotICAgICdzeXNyb290JSc6ICcvJywKLSAgICAnZ2xfdHlwZSc6ICdzeXN0ZW1fZ2xlczInLAotCi0gICAgIyBEZWZpbmUgcGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZXIgYW5kIGxpbmtlciBmbGFncy4KLSAgICAjIFJlZmVyIHRvIGJhc2UuZ3lwaSBmb3IgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdmFyaWFibGVzLgotICAgICdjb21waWxlcl9mbGFnc19ob3N0JzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3MnOiBbCi0gICAgICAjIEZvcmNlIGNoYXIgdG8gYmUgc2lnbmVkLgotICAgICAgJy1mc2lnbmVkLWNoYXInLAotCi0gICAgICAjIERpc2FibGUgc3RyaWN0IGFsaWFzaW5nLgotICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywKLQotICAgICAgIyBBbGxvdyBTa2lhJ3MgU2tWeC5oIHRvIGNvbnZlcnQgYmV0d2VlbiB2ZWN0b3JzIG9mIGRpZmZlcmVudCBlbGVtZW50Ci0gICAgICAjIHR5cGVzIG9yIG51bWJlciBvZiBzdWJwYXJ0cy4KLSAgICAgICctZmxheC12ZWN0b3ItY29udmVyc2lvbnMnLAotCi0gICAgICAjIFRvIHN1cHBvcnQgbGFyZ2UgZmlsZXMKLSAgICAgICctRF9GSUxFX09GRlNFVF9CSVRTPTY0JywKLQotICAgICAgIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRoYXQgd2lsbCBiZSBoYXJkIHRvIGZpeC4KLSAgICAgICctV25vLXVudXNlZC1sb2NhbC10eXBlZGVmcycsCi0gICAgICAnLVduby11bnVzZWQtcmVzdWx0JywKLSAgICAgICctV25vLXVudXNlZC1mdW5jdGlvbicsCi0gICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCi0gICAgICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycycsCi0gICAgICAnLVduby1leHRyYScsCi0gICAgICAnLVduby1jb21tZW50JywgICMgVGFsayB0byBteSBsYXd5ZXIuCi0gICAgICAnLVduby1uYXJyb3dpbmcnLAotICAgICAgJy1Xbm8tdW5rbm93bi1wcmFnbWFzJywKLSAgICAgICctV25vLXR5cGUtbGltaXRzJywgICMgVE9ETzogV2Ugc2hvdWxkIGFjdHVhbGx5IGxvb2sgaW50byB0aGVzZS4KLSAgICAgICMgSXQncyBPSyBub3QgdG8gdXNlIHNvbWUgaW5wdXQgcGFyYW1ldGVycy4gTm90ZSB0aGF0IHRoZSBvcmRlcgotICAgICAgIyBtYXR0ZXJzOiBXYWxsIGltcGxpZXMgV3VudXNlZC1wYXJhbWV0ZXIgYW5kIFduby11bnVzZWQtcGFyYW1ldGVyCi0gICAgICAjIGhhcyBubyBlZmZlY3QgaWYgc3BlY2lmaWVkIGJlZm9yZSBXYWxsLgotICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0KLSAgICAgICMgU3BlY2lmeSB0aGUgc3lzcm9vdCB3aXRoIGFsbCB5b3VyIGluY2x1ZGUgZGVwZW5kZW5jaWVzLgotICAgICAgJy0tc3lzcm9vdD08KHN5c3Jvb3QpJywKLQotICAgICAgIyBUaGlzIGlzIGEgcXVpcmsgb2YgUmFzcGJpYW4sIHRoZXNlIGFyZSByZXF1aXJlZCB0byBpbmNsdWRlIGFueQotICAgICAgIyBHTC1yZWxhdGVkIGhlYWRlcnMuCi0gICAgICAnLUk8KHN5c3Jvb3QpL29wdC92Yy9pbmNsdWRlJywKLSAgICAgICctSTwoc3lzcm9vdCkvb3B0L3ZjL2luY2x1ZGUvaW50ZXJmYWNlL3Zjb3MvcHRocmVhZHMnLAotICAgICAgJy1JPChzeXNyb290KS9vcHQvdmMvaW5jbHVkZS9pbnRlcmZhY2Uvdm1jc19ob3N0L2xpbnV4JywKLSAgICAgICctSTwoc3lzcm9vdCkvdXNyL2luY2x1ZGUvYXJtLWxpbnV4LWdudWVhYmloZicsCi0gICAgXSwKLSAgICAnbGlua2VyX2ZsYWdzJzogWwotICAgICAgJy0tc3lzcm9vdD08KHN5c3Jvb3QpJywKLSAgICAgICMgVGhpcyBpcyBhIHF1aXJrIG9mIFJhc3BiaWFuLCB0aGVzZSBhcmUgcmVxdWlyZWQgdG8gbGluayBhbnkgR0wtcmVsYXRlZAotICAgICAgIyBsaWJyYXJpZXMuCi0gICAgICAnLUw8KHN5c3Jvb3QpL29wdC92Yy9saWInLAotICAgICAgJy1XbCwtcnBhdGg9PChzeXNyb290KS9vcHQvdmMvbGliJywKLSAgICAgICctTDwoc3lzcm9vdCkvdXNyL2xpYi9hcm0tbGludXgtZ251ZWFiaWhmJywKLSAgICAgICctV2wsLXJwYXRoPTwoc3lzcm9vdCkvdXNyL2xpYi9hcm0tbGludXgtZ251ZWFiaWhmJywKLSAgICAgICctTDwoc3lzcm9vdCkvbGliL2FybS1saW51eC1nbnVlYWJpaGYnLAotICAgICAgJy1XbCwtcnBhdGg9PChzeXNyb290KS9saWIvYXJtLWxpbnV4LWdudWVhYmloZicsCi0gICAgICAjIENsZWFudXAgdW51c2VkIHNlY3Rpb25zCi0gICAgICAnLVdsLC1nYy1zZWN0aW9ucycsCi0gICAgICAnLVdsLC0tdW5yZXNvbHZlZC1zeW1ib2xzPWlnbm9yZS1pbi1zaGFyZWQtbGlicycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGVidWcnOiBbCi0gICAgICAnLU8wJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19jY19kZWJ1Zyc6IFsKLSAgICAgICctZnJ0dGknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2RldmVsJzogWwotICAgICAgJy1PMicsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfY2NfZGV2ZWwnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19xYSc6IFsKLSAgICAgICctV25vLXVudXNlZC1idXQtc2V0LXZhcmlhYmxlJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19xYV9zaXplJzogWwotICAgICAgJy1PcycsCi0gICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucwotICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfcWFfc3BlZWQnOiBbCi0gICAgICAnLU8yJywKLSAgICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCi0gICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19jY19xYSc6IFsKLSAgICAgICctZm5vLXJ0dGknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGQnOiBbCi0gICAgICAnLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZScsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZF9zaXplJzogWwotICAgICAgJy1PcycsCi0gICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucwotICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZ29sZF9zcGVlZCc6IFsKLSAgICAgICctTzInLAotICAgICAgIyBDb21waWxlIHN5bWJvbHMgaW4gc2VwYXJhdGUgc2VjdGlvbnMKLSAgICAgICctZmZ1bmN0aW9uLXNlY3Rpb25zJywKLSAgICAgICctZmRhdGEtc2VjdGlvbnMnLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2NjX2dvbGQnOiBbCi0gICAgICAnLWZuby1ydHRpJywKLSAgICBdLAotICAgICdwbGF0Zm9ybV9saWJyYXJpZXMnOiBbCi0gICAgICAnLWxhc291bmQnLAotICAgICAgJy1sYXZjb2RlYycsCi0gICAgICAnLWxhdmZvcm1hdCcsCi0gICAgICAnLWxhdnV0aWwnLAotICAgICAgJy1sOmxpYnB0aHJlYWQuc28uMCcsCi0gICAgICAnLWxwdGhyZWFkJywKLSAgICAgICctbHJ0JywKLSAgICAgICctbG9wZW5tYXhpbCcsCi0gICAgICAnLWxiY21faG9zdCcsCi0gICAgICAnLWx2Y29zJywKLSAgICAgICctbHZjaGlxX2FybScsCi0gICAgICAnLWxicmNtR0xFU3YyJywKLSAgICAgICctbGJyY21FR0wnLAotICAgICAgIyBTdGF0aWMgbGlicyBtdXN0IGJlIGxhc3QsIHRvIGF2b2lkIF9fZGxvcGVuIGxpbmtlciBlcnJvcnMKLSAgICAgICctbEVHTF9zdGF0aWMnLAotICAgICAgJy1sR0xFU3YyX3N0YXRpYycsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY29iYWx0X2Zhc3RidWlsZD09MCcsIHsKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2RlYnVnJzogWwotICAgICAgICAgICctZycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19kZXZlbCc6IFsKLSAgICAgICAgICAnLWcnLAotICAgICAgICBdLAotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfcWEnOiBbCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19nb2xkJzogWwotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLQotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkZWZpbmVzJzogWwotICAgICAgIyBDb2JhbHQgb24gTGludXggZmxhZwotICAgICAgJ0NPQkFMVF9MSU5VWCcsCi0gICAgICAnX19TVERDX0ZPUk1BVF9NQUNST1MnLCAjIHNvIHRoYXQgd2UgZ2V0IFBSSSoKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICdfR05VX1NPVVJDRT0xJywKLSAgICBdLAotICAgICdjZmxhZ3NfYyc6IFsKLSAgICAgICctc3RkPWMxMScsCi0gICAgXSwKLSAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgJy1zdGQ9Z251KysxNCcsCi0gICAgICAnLVduby1saXRlcmFsLXN1ZmZpeCcsCi0gICAgXSwKLSAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ3NiX3BlZGFudGljX3dhcm5pbmdzPT0xJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctV2FsbCcsCi0gICAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAgICctV3VucmVhY2hhYmxlLWNvZGUnLAotICAgICAgICAgICMgUmFzcGkgdG9vbGNoYWluIGlzIGJhc2VkIG9mZiBhbiBvbGQgdmVyc2lvbiBvZiBnY2MsIHdoaWNoCi0gICAgICAgICAgIyBmYWxzZWx5IGZsYWdzIHNvbWUgY29kZS4gIFRoYXQgc2FtZSBjb2RlIGRvZXMgbm90IHdhcm4gd2l0aCBnY2MgNi4zLgotICAgICAgICAgICMgVGhpcyBkZWNpc2lvbiBzaG91bGQgYmUgcmV2aXNpdGVkIGFmdGVyIHJhc3BpIHRvb2xjaGFpbiBpcyB1cGdyYWRlZC4KLSAgICAgICAgICAnLVduby1tYXliZS11bmluaXRpYWxpemVkJywKLSAgICAgICAgICAjIFR1cm4gd2FybmluZ3MgaW50byBlcnJvcnMuCi0gICAgICAgICAgJy1XZXJyb3InLAotICAgICAgICAgICctV25vLWV4cGFuc2lvbi10by1kZWZpbmVkJywKLSAgICAgICAgICAnLVduby1pbXBsaWNpdC1mYWxsdGhyb3VnaCcsCi0gICAgICAgIF0sCi0gICAgICB9LHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAjIERvIG5vdCB3YXJuIGZvciBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSBhIHZhbHVlLgotICAgICAgICAgICctV25vLWNvbnZlcnNpb24nLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwgIyBlbmQgb2YgdGFyZ2V0X2RlZmF1bHRzCi0KLSAgJ2luY2x1ZGVzJzogWwotICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGknLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggZjY4NDJmZS4uYTJjZWJkOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9neXBfY29uZmlndXJhdGlvbi5weQorKysgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2d5cF9jb25maWd1cmF0aW9uLnB5CkBAIC0xNSwxNzIgKzE1LDE2IEBACiAKIGltcG9ydCBvcwogCi1mcm9tIHN0YXJib2FyZC5idWlsZCBpbXBvcnQgY2xhbmcgYXMgY2xhbmdfc3BlY2lmaWNhdGlvbgogZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAotZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYXIKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYmFzaAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZwotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBjbGFuZ3h4Ci1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNwCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IHRvdWNoCi0KLSMgVXNlIGEgYm9ndXMgcGF0aCBpbnN0ZWFkIG9mIE5vbmUgc28gdGhhdCBhbnl0aGluZyBiYXNlZCBvbiAkUkFTUElfSE9NRSB3b24ndAotIyBpbmFkdmVydGVudGx5IGVuZCB1cCBwb2ludGluZyB0byBzb21ldGhpbmcgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LCBhbmQgdGhpcwotIyB3aWxsIHNob3cgdXAgaW4gYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoYXQgZmFpbHMuCi1fVU5ERUZJTkVEX1JBU1BJX0hPTUUgPSAnL1VOREVGSU5FRC9SQVNQSV9IT01FJwogCiAKIGNsYXNzIFJhc3BpUGxhdGZvcm1Db25maWcocGxhdGZvcm1fY29uZmlndXJhdGlvbi5QbGF0Zm9ybUNvbmZpZ3VyYXRpb24pOgogICAiIiJTdGFyYm9hcmQgUmFzcGJlcnJ5IFBpIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24uIiIiCiAKLSAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICBwbGF0Zm9ybSwKLSAgICAgICAgICAgICAgIHNhYmlfanNvbl9wYXRoPSdzdGFyYm9hcmQvc2FiaS9kZWZhdWx0L3NhYmkuanNvbicpOgorICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0pOgogICAgIHN1cGVyKFJhc3BpUGxhdGZvcm1Db25maWcsIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtKQotCi0gICAgc2VsZi5zYWJpX2pzb25fcGF0aCA9IHNhYmlfanNvbl9wYXRoCiAgICAgc2VsZi5BcHBlbmRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25QYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi0gICAgc2VsZi5yYXNwaV9ob21lID0gb3MuZW52aXJvbi5nZXQoJ1JBU1BJX0hPTUUnLCBfVU5ERUZJTkVEX1JBU1BJX0hPTUUpCi0gICAgc2VsZi5zeXNyb290ID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmpvaW4oc2VsZi5yYXNwaV9ob21lLCAnYnVzdGVycm9vdCcpKQotCi0gIGRlZiBHZXRCdWlsZEZvcm1hdChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkZXNpcmVkIGJ1aWxkIGZvcm1hdC4iIiIKLSAgICAjIFRoZSBjb21tYSBtZWFucyB0aGF0IG5pbmphIGFuZCBxdGNyZWF0b3JfbmluamEgd2lsbCBiZSBjaGFpbmVkIGFuZCB1c2UgdGhlCi0gICAgIyBzYW1lIGlucHV0IGluZm9ybWF0aW9uIHNvIHRoYXQgLmd5cCBmaWxlcyB3aWxsIG9ubHkgaGF2ZSB0byBiZSBwYXJzZWQKLSAgICAjIG9uY2UuCi0gICAgcmV0dXJuICduaW5qYSxxdGNyZWF0b3JfbmluamEnCi0KLSAgZGVmIEdldFZhcmlhYmxlcyhzZWxmLCBjb25maWd1cmF0aW9uKToKLSAgICB2YXJpYWJsZXMgPSBzdXBlcihSYXNwaVBsYXRmb3JtQ29uZmlnLCBzZWxmKS5HZXRWYXJpYWJsZXMoY29uZmlndXJhdGlvbikKLSAgICB2YXJpYWJsZXMudXBkYXRlKHsKLSAgICAgICAgJ2NsYW5nJzoKLSAgICAgICAgICAgIDAsCi0gICAgICAgICdzeXNyb290JzoKLSAgICAgICAgICAgIHNlbGYuc3lzcm9vdCwKLSAgICAgICAgJ2luY2x1ZGVfcGF0aF9wbGF0Zm9ybV9kZXBsb3lfZ3lwaSc6Ci0gICAgICAgICAgICAnc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaScsCi0gICAgICAgICdTVFJJUCc6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uLmdldCgnU1RSSVAnKQotICAgIH0pCi0KLSAgICByZXR1cm4gdmFyaWFibGVzCi0KLSAgZGVmIEdldEVudmlyb25tZW50VmFyaWFibGVzKHNlbGYpOgotICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Jyk6Ci0gICAgICBzZWxmLmhvc3RfY29tcGlsZXJfZW52aXJvbm1lbnQgPSBidWlsZC5HZXRIb3N0Q29tcGlsZXJFbnZpcm9ubWVudCgKLSAgICAgICAgICBjbGFuZ19zcGVjaWZpY2F0aW9uLkdldENsYW5nU3BlY2lmaWNhdGlvbigpLCBzZWxmLmJ1aWxkX2FjY2VsZXJhdG9yKQotCi0gICAgdG9vbGNoYWluID0gb3MucGF0aC5yZWFscGF0aCgKLSAgICAgICAgb3MucGF0aC5qb2luKAotICAgICAgICAgICAgc2VsZi5yYXNwaV9ob21lLCAndG9vbHMvYXJtLWJjbTI3MDgvJwotICAgICAgICAgICAgJ2djYy1saW5hcm8tNy41LjAtMjAxOS4xMi14ODZfNjRfYXJtLWxpbnV4LWdudWVhYmloZicpKQotICAgIHRvb2xjaGFpbl9iaW5fZGlyID0gb3MucGF0aC5qb2luKHRvb2xjaGFpbiwgJ2JpbicpCi0KLSAgICBlbnZfdmFyaWFibGVzID0gc2VsZi5ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Ci0gICAgZW52X3ZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnQ0MnOgotICAgICAgICAgICAgc2VsZi5idWlsZF9hY2NlbGVyYXRvciArICcgJyArCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4odG9vbGNoYWluX2Jpbl9kaXIsICdhcm0tbGludXgtZ251ZWFiaWhmLWdjYycpLAotICAgICAgICAnQ1hYJzoKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfYWNjZWxlcmF0b3IgKyAnICcgKwotICAgICAgICAgICAgb3MucGF0aC5qb2luKHRvb2xjaGFpbl9iaW5fZGlyLCAnYXJtLWxpbnV4LWdudWVhYmloZi1nKysnKSwKLSAgICAgICAgJ1NUUklQJzoKLSAgICAgICAgICAgIG9zLnBhdGguam9pbih0b29sY2hhaW5fYmluX2RpciwgJ2FybS1saW51eC1nbnVlYWJpaGYtc3RyaXAnKSwKLSAgICB9KQotICAgIHJldHVybiBlbnZfdmFyaWFibGVzCi0KLSAgZGVmIFNldHVwUGxhdGZvcm1Ub29scyhzZWxmLCBidWlsZF9udW1iZXIpOgotICAgICMgTm90aGluZyB0byBzZXR1cCwgYnV0IHZhbGlkYXRlIHRoYXQgUkFTUElfSE9NRSBpcyBjb3JyZWN0LgotICAgIGlmIHNlbGYucmFzcGlfaG9tZSA9PSBfVU5ERUZJTkVEX1JBU1BJX0hPTUU6Ci0gICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Jhc1BpIGJ1aWxkcyByZXF1aXJlIHRoZSAiUkFTUElfSE9NRSIgJwotICAgICAgICAgICAgICAgICAgICAgICAgICdlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBiZSBzZXQuJykKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLnN5c3Jvb3QpOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdSYXNQaSBidWlsZHMgcmVxdWlyZSAkUkFTUElfSE9NRS9idXN0ZXJyb290ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAndG8gYmUgYSB2YWxpZCBkaXJlY3RvcnkuJykKLQotICBkZWYgR2V0VGFyZ2V0VG9vbGNoYWluKHNlbGYsICoqa3dhcmdzKToKLSAgICBlbnZpcm9ubWVudF92YXJpYWJsZXMgPSBzZWxmLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICBjY19wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDQyddCi0gICAgY3h4X3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NYWCddCi0KLSAgICByZXR1cm4gWwotICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoLCB3cml0ZV9ncm91cD1UcnVlKSwKLSAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjcC5Db3B5KCksCi0gICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICBdCi0KLSAgZGVmIEdldEhvc3RUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOgotICAgIGVudmlyb25tZW50X3ZhcmlhYmxlcyA9IHNlbGYuR2V0RW52aXJvbm1lbnRWYXJpYWJsZXMoKQotICAgIGNjX3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NDX2hvc3QnXQotICAgIGN4eF9wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDWFhfaG9zdCddCi0KLSAgICByZXR1cm4gWwotICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoLCB3cml0ZV9ncm91cD1UcnVlKSwKLSAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjcC5Db3B5KCksCi0gICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICBdCiAKICAgZGVmIEdldExhdW5jaGVyUGF0aChzZWxmKToKICAgICAiIiJHZXRzIHRoZSBwYXRoIHRvIHRoZSBsYXVuY2hlciBtb2R1bGUgZm9yIHRoaXMgcGxhdGZvcm0uIiIiCiAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLQotICBkZWYgR2V0R2VuZXJhdG9yVmFyaWFibGVzKHNlbGYsIGNvbmZpZ19uYW1lKToKLSAgICBkZWwgY29uZmlnX25hbWUKLSAgICBnZW5lcmF0b3JfdmFyaWFibGVzID0gewotICAgICAgICAncXRjcmVhdG9yX3Nlc3Npb25fbmFtZV9wcmVmaXgnOiAnY29iYWx0JywKLSAgICB9Ci0gICAgcmV0dXJuIGdlbmVyYXRvcl92YXJpYWJsZXMKLQotICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6Ci0gICAgZmlsdGVycyA9IHN1cGVyKFJhc3BpUGxhdGZvcm1Db25maWcsIHNlbGYpLkdldFRlc3RGaWx0ZXJzKCkKLSAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBzZWxmLl9fRklMVEVSRURfVEVTVFMuaXRlcml0ZW1zKCk6Ci0gICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCi0gICAgcmV0dXJuIGZpbHRlcnMKLQotICBfX0ZJTFRFUkVEX1RFU1RTID0geyAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCi0gICAgICAnbnBsYic6IFsKLSAgICAgICAgICAnU2JBdWRpb1NpbmtUZXN0LionLAotCi0gICAgICAgICAgIyBQZXJtYW5lbnRseSBmaWx0ZXIgb3V0IGRybSBzeXN0ZW0gcmVsYXRlZCB0ZXN0cyBhcyByYXNwaSBkb2Vzbid0Ci0gICAgICAgICAgIyBzdXBwb3J0IGFueSBkcm0gc3lzdGVtcyBhbmQgdGhlcmUgaXMgbm8gcGxhbiB0byBpbXBsZW1lbnQgc3VjaAotICAgICAgICAgICMgc3VwcG9ydC4KLSAgICAgICAgICAnU2JEcm1UZXN0LkFueVN1cHBvcnRlZEtleVN5c3RlbXMnLAotICAgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uQW55U3VwcG9ydGVkS2V5U3lzdGVtcycsCi0gICAgICAgICAgJ1NiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbS5LZXlTeXN0ZW1XaXRoQXR0cmlidXRlcycsCi0gICAgICAgICAgJ1NiTWVkaWFDYW5QbGF5TWltZUFuZEtleVN5c3RlbS5NaW5pbXVtU3VwcG9ydCcsCi0KLSAgICAgICAgICAnU2JNZWRpYVNldEF1ZGlvV3JpdGVEdXJhdGlvblRlc3RzLyonLAotICAgICAgICAgICdTYlBsYXllcldyaXRlU2FtcGxlVGVzdHMqJywKLSAgICAgICAgICAnU2JVbmRlZmluZWRCZWhhdmlvclRlc3QuQ2FsbFRoaXNQb2ludGVySXNOdWxsUmFpbnlEYXknLAotICAgICAgICAgICdTYlN5c3RlbUdldFByb3BlcnR5VGVzdC5GTEFLWV9SZXR1cm5zUmVxdWlyZWQnLAotICAgICAgXSwKLSAgICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWwotICAgICAgICAgICMgVGhlIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHJhc3BiZXJyeSBwaSAoMCBhbmQgMikgYXJlIGluY29tcGxldGUKLSAgICAgICAgICAjIGFuZCBub3QgbWVhbnQgdG8gYmUgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIEFzIHN1Y2ggd2Ugd2lsbAotICAgICAgICAgICMgbm90IHJlcGFpciB0aGVzZSBmYWlsaW5nIHRlc3RzIGZvciBub3cuCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuRW5kT2ZTdHJlYW1XaXRob3V0QW55SW5wdXQvMCcsCi0gICAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVSZXNldHMvMCcsCi0gICAgICAgICAgIyBGaWx0ZXIgZmFpbGVkIHRlc3RzLgotICAgICAgICAgICdQbGF5ZXJDb21wb25lbnRzVGVzdHMvUGxheWVyQ29tcG9uZW50c1Rlc3QuKicsCi0KLSAgICAgIF0sCi0gIH0KLQotICBkZWYgR2V0UGF0aFRvU2FiaUpzb25GaWxlKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnNhYmlfanNvbl9wYXRoCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2luc3RhbGxfdGFyZ2V0LmduaSBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pCmluZGV4IDRjNDJjZTEuLjkwYWM3MjUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pCisrKyBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pCkBAIC0xNiw4ICsxNiwxMiBAQAogdGVtcGxhdGUoImluc3RhbGxfdGFyZ2V0IikgewogICBpbnN0YWxsYWJsZV90YXJnZXRfbmFtZSA9IGludm9rZXIuaW5zdGFsbGFibGVfdGFyZ2V0X25hbWUKIAorICAjIFRPRE8oYi8yMTg4ODkzMTMpOiByYXNwaSByZWxpZXMgb24gaW5zdGFsbF9jb250ZW50IGJlaW5nIGFkamFjZW50IHRvIHRoZQorICAjIGV4ZWN1dGFibGUuIEluIG9yZGVyIHRvIG1ha2UgdGVzdHMgcGFzcyB3ZSBuZWVkIHRvIG92ZXJsb2FkIHRoZSBpbnN0YWxsCisgICMgc3ViZGlyIGFuZCBpbnN0YWxsIGNvbnRlbnQgc3ViZGlyLgogICBpZiAoaW52b2tlci50eXBlID09ICJleGVjdXRhYmxlIikgewotICAgIGluc3RhbGxfc3ViZGlyID0gImJpbiIKKyAgICAjIGluc3RhbGxfc3ViZGlyID0gImJpbiIKKyAgICBpbnN0YWxsX3N1YmRpciA9ICIiCiAgICAgc291cmNlX25hbWUgPSBpbnN0YWxsYWJsZV90YXJnZXRfbmFtZQogICB9IGVsc2UgaWYgKGludm9rZXIudHlwZSA9PSAic2hhcmVkX2xpYnJhcnkiKSB7CiAgICAgaW5zdGFsbF9zdWJkaXIgPSAibGliIgpAQCAtNDAsNyArNDQsNyBAQAogICAgIGRlcHMgPSBpbnZva2VyLmRlcHMKICAgICBkZXBzICs9IFsgIjokaW5zdGFsbGFibGVfdGFyZ2V0X25hbWUiIF0KIAotICAgIG91dHB1dHMgPSBbICIkc2JfaW5zdGFsbF9vdXRwdXRfZGlyLyRpbnN0YWxsX3N1YmRpci8kc291cmNlX25hbWUiIF0KKyAgICBvdXRwdXRzID0gWyAiJHNiX2luc3RhbGxfb3V0cHV0X2Rpci8kaW5zdGFsbF9zdWJkaXIvJGluc3RhbGxhYmxlX3RhcmdldF9uYW1lLyRzb3VyY2VfbmFtZSIgXQogCiAgICAgYXJncyA9IFsKICAgICAgIHJlYmFzZV9wYXRoKHN0cmlwX2V4ZWN1dGFibGUsIHJvb3RfYnVpbGRfZGlyKSwKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvbGF1bmNoZXIucHkgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2xhdW5jaGVyLnB5CmluZGV4IGJlZTdmOTAuLjQwNzY5OTcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvbGF1bmNoZXIucHkKKysrIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9sYXVuY2hlci5weQpAQCAtMTksMTEgKzE5LDExIEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNpeAogaW1wb3J0IHN5cwogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKIGltcG9ydCBwZXhwZWN0CiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYWJzdHJhY3RfbGF1bmNoZXIKIApAQCAtNDQsNyArNDQsNyBAQAogIyBGaXJzdCBjYWxsIHJldHVybnMgVHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KIGRlZiBGaXJzdFJ1bigpOgogICB2ID0gZ2xvYmFscygpCi0gIGlmIG5vdCB2Lmhhc19rZXkoJ2ZpcnN0X3J1bicpOgorICBpZiAnZmlyc3RfcnVuJyBub3QgaW4gdjoKICAgICB2WydmaXJzdF9ydW4nXSA9IEZhbHNlCiAgICAgcmV0dXJuIFRydWUKICAgcmV0dXJuIEZhbHNlCkBAIC0xMDcsNyArMTA3LDkgQEAKICAgZGVmIF9Jbml0UGV4cGVjdENvbW1hbmRzKHNlbGYpOgogICAgICIiIkluaXRpYWxpemVzIGFsbCBvZiB0aGUgcGV4cGVjdCBjb21tYW5kcyBuZWVkZWQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QuIiIiCiAKLSAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm91dF9kaXJlY3RvcnksICdpbnN0YWxsJywgJ2JpbicpCisgICAgIyBUT0RPKGIvMjE4ODg5MzEzKTogVGhpcyBzaG91bGQgcmVmZXJlbmNlIHRoZSBiaW4vIHN1YmRpciB3aGVuIHRoYXQncworICAgICMgdXNlZC4KKyAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm91dF9kaXJlY3RvcnksICdpbnN0YWxsJywgc2VsZi50YXJnZXRfbmFtZSkKICAgICAjIFRPRE8oYi8yMTYzNTYwNTgpOiBEZWxldGUgdGhpcyBjb25kaXRpb25hbCB0aGF0J3MganVzdCBmb3IgR1lQLgogICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRlc3RfZGlyKToKICAgICAgIHRlc3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYub3V0X2RpcmVjdG9yeSwgJ2RlcGxveScsIHNlbGYudGFyZ2V0X25hbWUpCkBAIC0xMjUsNyArMTI3LDcgQEAKICAgICByYXNwaV90ZXN0X3BhdGggPSBvcy5wYXRoLmpvaW4ocmFzcGlfdGVzdF9kaXIsIHRlc3RfZmlsZSkKIAogICAgICMgcnN5bmMgY29tbWFuZCBzZXR1cAotICAgIG9wdGlvbnMgPSAnLWF2ekxoJworICAgIG9wdGlvbnMgPSAnLWF2ekxoYycKICAgICBzb3VyY2UgPSB0ZXN0X2RpciArICcvJwogICAgIGRlc3RpbmF0aW9uID0gJ3t9On4ve30vJy5mb3JtYXQocmFzcGlfdXNlcl9ob3N0bmFtZSwgcmFzcGlfdGVzdF9kaXIpCiAgICAgc2VsZi5yc3luY19jb21tYW5kID0gJ3JzeW5jICcgKyBvcHRpb25zICsgJyAnICsgc291cmNlICsgJyAnICsgXApAQCAtMTY0LDggKzE2Niw5IEBACiAgICAgIiIiCiAKICAgICBsb2dnaW5nLmluZm8oJ2V4ZWN1dGluZzogJXMnLCBjb21tYW5kKQorICAgIGt3YXJncyA9IHt9IGlmIHNpeC5QWTIgZWxzZSB7J2VuY29kaW5nJzogJ3V0Zi04J30KICAgICBzZWxmLnBleHBlY3RfcHJvY2VzcyA9IHBleHBlY3Quc3Bhd24oCi0gICAgICAgIGNvbW1hbmQsIHRpbWVvdXQ9TGF1bmNoZXIuX1BFWFBFQ1RfVElNRU9VVCkKKyAgICAgICAgY29tbWFuZCwgdGltZW91dD1MYXVuY2hlci5fUEVYUEVDVF9USU1FT1VULCAqKmt3YXJncykKICAgICAjIExldCBwZXhwZWN0IG91dHB1dCBkaXJlY3RseSB0byBvdXIgb3V0cHV0IHN0cmVhbQogICAgIHNlbGYucGV4cGVjdF9wcm9jZXNzLmxvZ2ZpbGVfcmVhZCA9IHNlbGYub3V0cHV0X2ZpbGUKICAgICByZXRyeV9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvbWFpbi5jYyBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvbWFpbi5jYwppbmRleCBkZmQyMGQ1Li5kOTM1ZGY4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL21haW4uY2MKKysrIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9tYWluLmNjCkBAIC0yMCw2ICsyMCwxMCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc2lnbmFsL2NyYXNoX3NpZ25hbHMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9kZWJ1Z19zaWduYWxzLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvc3VzcGVuZF9zaWduYWxzLmgiCisjaWYgU0JfSVMoRVZFUkdSRUVOX0NPTVBBVElCTEUpCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oIgogCkBAIC0zMyw3ICszNywxMiBAQAogICBzdGFyYm9hcmQ6OnNoYXJlZDo6c2lnbmFsOjpJbnN0YWxsU3VzcGVuZFNpZ25hbEhhbmRsZXJzKCk7CiAKICNpZiBTQl9JUyhFVkVSR1JFRU5fQ09NUEFUSUJMRSkKLSAgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKCk7CisgIGlmIChzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpDb21tYW5kTGluZShhcmdjLCBhcmd2KQorICAgICAgICAgIC5IYXNTd2l0Y2goc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6a1N0YXJ0SGFuZGxlckF0Q3Jhc2gpKSB7CisgICAgdGhpcmRfcGFydHk6OmNyYXNocGFkOjp3cmFwcGVyOjpJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKHRydWUpOworICB9IGVsc2UgeworICAgIHRoaXJkX3BhcnR5OjpjcmFzaHBhZDo6d3JhcHBlcjo6SW5zdGFsbENyYXNocGFkSGFuZGxlcihmYWxzZSk7CisgIH0KICNlbmRpZgogICBzdGFyYm9hcmQ6OnJhc3BpOjpzaGFyZWQ6OkFwcGxpY2F0aW9uRGlzcG1hbnggYXBwbGljYXRpb247CiAgIGludCByZXN1bHQgPSBhcHBsaWNhdGlvbi5SdW4oYXJnYywgYXJndik7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24gYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KaW5kZXggZjNkMjQwMy4uZmZmNmZlOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCisrKyBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbgpAQCAtMjQsMTAgKzI0LDYgQEAKICAgbGRmbGFncyA9IFtdCiAKICAgZGVmaW5lcyArPSBbCi0gICAgIyBCeSBkZWZhdWx0LCA8RUdML2VnbHBsYXRmb3JtLmg+IHB1bGxzIGluIHNvbWUgWDExIGhlYWRlcnMgdGhhdCBoYXZlIHNvbWUKLSAgICAjIG5hc3R5IG1hY3JvcyAofFN0YXR1c3wsIGZvciBleGFtcGxlKSB0aGF0IGNvbmZsaWN0IHdpdGggQ2hyb21pdW0gYmFzZS4KLSAgICAiTUVTQV9FR0xfTk9fWDExX0hFQURFUlMiLAotCiAgICAgIyBDb2JhbHQgb24gTGludXggZmxhZwogICAgICJDT0JBTFRfTElOVVgiLAogICAgICJfX1NURENfRk9STUFUX01BQ1JPUyIsICAjIHNvIHRoYXQgd2UgZ2V0IFBSSSoKQEAgLTE1MiwyMyArMTQ4LDI3IEBACiB9CiAKIGNvbmZpZygic3BlZWQiKSB7Ci0gIGNmbGFncyA9IFsKLSAgICAiLU8yIiwKKyAgY2ZsYWdzID0gWyAiLU8yIiBdCiAKLSAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucwotICAgICItZmZ1bmN0aW9uLXNlY3Rpb25zIiwKLSAgICAiLWZkYXRhLXNlY3Rpb25zIiwKLSAgXQorICBpZiAoaXNfcWEgfHwgaXNfZ29sZCkgeworICAgIGNmbGFncyArPSBbCisgICAgICAjIENvbXBpbGUgc3ltYm9scyBpbiBzZXBhcmF0ZSBzZWN0aW9ucworICAgICAgIi1mZnVuY3Rpb24tc2VjdGlvbnMiLAorICAgICAgIi1mZGF0YS1zZWN0aW9ucyIsCisgICAgXQorICB9CiB9CiAKIGNvbmZpZygic2l6ZSIpIHsKLSAgY2ZsYWdzID0gWwotICAgICItT3MiLAorICBjZmxhZ3MgPSBbICItT3MiIF0KIAotICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCi0gICAgIi1mZnVuY3Rpb24tc2VjdGlvbnMiLAotICAgICItZmRhdGEtc2VjdGlvbnMiLAotICBdCisgIGlmIChpc19xYSB8fCBpc19nb2xkKSB7CisgICAgY2ZsYWdzICs9IFsKKyAgICAgICMgQ29tcGlsZSBzeW1ib2xzIGluIHNlcGFyYXRlIHNlY3Rpb25zCisgICAgICAiLWZmdW5jdGlvbi1zZWN0aW9ucyIsCisgICAgICAiLWZkYXRhLXNlY3Rpb25zIiwKKyAgICBdCisgIH0KIH0KIAogY29uZmlnKCJwZWRhbnRpY193YXJuaW5ncyIpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaSBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQppbmRleCBiNTVjMzZmLi40YTk0ODcxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKKysrIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCkBAIC0xNSw3ICsxNSw2IEBACiBpbXBvcnQoIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZy9iYXNlX2NvbmZpZ3VyYXRpb24uZ25pIikKIAogYXJtX2Zsb2F0X2FiaSA9ICJoYXJkIgotaGFzX2RybV9zdXBwb3J0ID0gZmFsc2UKIAogc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2RpciA9ICIkcm9vdF9vdXRfZGlyL2NvbnRlbnQiCiAKQEAgLTI4LDMgKzI3LDkgQEAKIHBsYXRmb3JtX3Rlc3RzX3BhdGggPSAiLy9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cyIKIAogaW5zdGFsbF90YXJnZXRfcGF0aCA9ICIvL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvaW5zdGFsbF90YXJnZXQuZ25pIgorCitzcGVlZF9jb25maWdfcGF0aCA9ICIvL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbjpzcGVlZCIKK3NpemVfY29uZmlnX3BhdGggPSAiLy9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb246c2l6ZSIKKworIyBUT0RPKGIvMjE5MDczMjUyKTogRW5hYmxlIC1mbm8tZXhjZXB0aW9ucyBhbmQgZG9uJ3QgbWl4IGl0IHdpdGggLWZleGNlcHRpb25zLgorZW5hYmxlX2V4Y2VwdGlvbnNfb3ZlcnJpZGUgPSB0cnVlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9wbGF0Zm9ybV9kZXBsb3kuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk4YTIyYy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXRmb3JtX2RlcGxveS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2V4ZWN1dGFibGVfZmlsZSc6ICc8KFBST0RVQ1RfRElSKS88KGV4ZWN1dGFibGVfbmFtZSknLAotICAgICdkZXBsb3lfZXhlY3V0YWJsZV9maWxlJzogJzwodGFyZ2V0X2RlcGxveV9kaXIpLzwoZXhlY3V0YWJsZV9uYW1lKScsCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb2xsZWN0X2RlcGxveV9jb250ZW50Lmd5cGknIF0sCi0gICdhY3Rpb25zJzogWwotICAgIHsKLSAgICAgICdhY3Rpb25fbmFtZSc6ICdkZXBsb3lfZXhlY3V0YWJsZScsCi0gICAgICAnbWVzc2FnZSc6ICdTdHJpcCBleGVjdXRhYmxlOiA8KGRlcGxveV9leGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICc8KGV4ZWN1dGFibGVfZmlsZSknLAotICAgICAgICAnPChjb250ZW50X2RlcGxveV9zdGFtcF9maWxlKScsCi0gICAgICBdLAotICAgICAgJ291dHB1dHMnOiBbICc8KGRlcGxveV9leGVjdXRhYmxlX2ZpbGUpJyBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJzwoU1RSSVApJywKLSAgICAgICAgJy1vJywgJzwoZGVwbG95X2V4ZWN1dGFibGVfZmlsZSknLAotICAgICAgICAnPChleGVjdXRhYmxlX2ZpbGUpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWU1MDkyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NDMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfZmlsdGVyLmd5cGknLAotICBdLAotICAndmFyaWFibGVzJzogewotICAgICdzYl9wZWRhbnRpY193YXJuaW5ncyc6IDEsCi0gICAgJ3N0YXJib2FyZF9wbGF0Zm9ybV9zb3VyY2VzJSc6IFtdLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX2Jhc2Vfc3ltYm9saXplJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvYmFzZS90aGlyZF9wYXJ0eS9zeW1ib2xpemUvZGVtYW5nbGUuY2MnLAotICAgICAgICAnPChERVBUSCkvYmFzZS90aGlyZF9wYXJ0eS9zeW1ib2xpemUvc3ltYm9saXplLmNjJywKLSAgICAgIF0sCi0gICAgICAnY2ZsYWdzJzogWwotICAgICAgICAjIFRPRE86IGV4YW1pbmUvdXBncmFkZSBjb2RlIHRvIHNlZSBpZiB0aGVzZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgIyBQcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uIHN1Z2dlc3RzIHRoYXQgYSByZWJhc2Ugb2YgdGhlIGxpYnJhcnkKLSAgICAgICAgIyB3aWxsIGdldCByaWQgb2Ygc29tZSBvciBhbGwgb2YgdGhlIHdhcm5pbmdzLgotICAgICAgICAnLVduby1zaWduLWNvbXBhcmUnLAotICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX3BsYXRmb3JtJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoc3RhcmJvYXJkX3BsYXRmb3JtX3NvdXJjZXMpJywKLSAgICAgICAgJzxAKGZpbHRlcl9iYXNlZF9wbGF5ZXJfc291cmNlcyknLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9hdG9taWNfcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL2NvbmZpZ3VyYXRpb25fcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9uZXRsaW5rLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvbmV0bGluay5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcm91dGVzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9saW51eC9zaGFyZWQvcm91dGVzLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xpbnV4L3NoYXJlZC9zeXN0ZW1fZ2V0X2Nvbm5lY3Rpb25fdHlwZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbGludXgvc2hhcmVkL3N5c3RlbV9oYXNfY2FwYWJpbGl0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2FwcGxpY2F0aW9uX2Rpc3BtYW54LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvYXVkaW9fc2lua190eXBlX2Rpc3BhdGNoZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9jb25maWd1cmF0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvY29uZmlndXJhdGlvbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZGlzcG1hbnhfdXRpbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2Rpc3BtYW54X3V0aWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL2dyYXBoaWNzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvZ3JhcGhpY3MuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL21haW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9tZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9kZWNvZGVfdGFyZ2V0X2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L2RlY29kZV90YXJnZXRfY3JlYXRlLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9kZWNvZGVfdGFyZ2V0X2dldF9pbmZvLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvZGVjb2RlX3RhcmdldF9yZWxlYXNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvZGlzcG1hbnhfcmVzb3VyY2VfcG9vbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L2Rpc3BtYW54X3Jlc291cmNlX3Bvb2wuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L2ltYWdlX2RlY29kZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L2ltYWdlX2lzX2RlY29kZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9vcGVuX21heF9jb21wb25lbnRfYmFzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L29wZW5fbWF4X2NvbXBvbmVudF9iYXNlLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9vcGVuX21heF9jb21wb25lbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9vcGVuX21heF9jb21wb25lbnQuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L29wZW5fbWF4X2VnbF9yZW5kZXJfY29tcG9uZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvb3Blbl9tYXhfZWdsX3JlbmRlcl9jb21wb25lbnQuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L29wZW5fbWF4X2ltYWdlX2RlY29kZV9jb21wb25lbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9vcGVuX21heF9pbWFnZV9kZWNvZGVfY29tcG9uZW50LmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9vcGVuX21heC9vcGVuX21heF92aWRlb19kZWNvZGVfY29tcG9uZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvb3Blbl9tYXhfdmlkZW9fZGVjb2RlX2NvbXBvbmVudC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvb3Blbl9tYXgvdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL29wZW5fbWF4L3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9zeXN0ZW1fZ2V0X2RldmljZV90eXBlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3lzdGVtX2dldF9leHRlbnNpb25zLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N5c3RlbV9nbGVzMi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC92aWRlb19yZW5kZXJlcl9zaW5rX2ltcGwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC92aWRlb19yZW5kZXJlcl9zaW5rX2ltcGwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3dpbmRvd19jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC93aW5kb3dfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3dpbmRvd19nZXRfcGxhdGZvcm1faGFuZGxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvd2luZG93X2dldF9zaXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvd2luZG93X2ludGVybmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX2F1ZGlvX3NpbmtfdHlwZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2Fsc2EvYWxzYV9hdWRpb19zaW5rX3R5cGUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2Fsc2EvYWxzYV91dGlsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX3V0aWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9tYXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfcHJvdGVjdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV91bm1hcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2VnbC9zeXN0ZW1fZWdsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZ2NjL2F0b21pY19nY2MuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfYWxwaGFudW1lcmljLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19kaWdpdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfaGV4X2RpZ2l0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19zcGFjZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfdXBwZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX3RvX2xvd2VyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl90b191cHBlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9kaXJlY3RvcnlfY2xvc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZGlyZWN0b3J5X2dldF9uZXh0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RpcmVjdG9yeV9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9hYnNvbHV0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9kb3VibGVfZXhwb25lbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2Zsb29yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9pc19maW5pdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2lzX25hbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfYWxsb2NhdGVfdW5jaGVja2VkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9jb21wYXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9jb3B5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9maW5kX2J5dGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2ZyZWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X21vdmUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X3JlYWxsb2NhdGVfdW5jaGVja2VkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9zZXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2NvbXBhcmVfYWxsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19jb21wYXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19maW5kX2NoYXJhY3Rlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZmluZF9sYXN0X2NoYXJhY3Rlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZmluZF9zdHJpbmcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2dldF9sZW5ndGhfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZ2V0X2xlbmd0aC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfcGFyc2VfZG91YmxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV9zaWduZWRfaW50ZWdlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfcGFyc2VfdWludDY0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19wYXJzZV91bnNpZ25lZF9pbnRlZ2VyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19zY2FuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N5c3RlbV9iaW5hcnlfc2VhcmNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N5c3RlbV9zb3J0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGliZXZlbnQvc29ja2V0X3dhaXRlcl9hZGQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfaW50ZXJuYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saWJldmVudC9zb2NrZXRfd2FpdGVyX3JlbW92ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfd2FpdF90aW1lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfd2FpdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpYmV2ZW50L3NvY2tldF93YWl0ZXJfd2FrZV91cC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2J5dGVfc3dhcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2NwdV9mZWF0dXJlc19nZXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9kZXZfaW5wdXQvZGV2X2lucHV0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvZ2V0X2hvbWVfZGlyZWN0b3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvbWVtb3J5X2dldF9zdGFja19ib3VuZHMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9wYWdlX2ludGVybmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3N0YWNrLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc3lzdGVtX2dldF90b3RhbF9jcHVfbWVtb3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvc3lzdGVtX2dldF91c2VkX2NwdV9tZW1vcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9zeXN0ZW1fZ2V0X3VzZWRfY3B1X21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9pc19kZWJ1Z2dlcl9hdHRhY2hlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3N5c3RlbV9zeW1ib2xpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9saW51eC90aHJlYWRfZ2V0X2lkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvdGhyZWFkX2dldF9uYW1lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbGludXgvdGhyZWFkX3NldF9uYW1lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfcHJvcGVydHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfc2lnbmVkX2luLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfaW50ZXJuYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL29wdXMvb3B1c19hdWRpb19kZWNvZGVyLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9kaXJlY3RvcnlfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9hdG9taWNfcmVwbGFjZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfY2FuX29wZW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2Nsb3NlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9kZWxldGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2V4aXN0cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfZmx1c2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2dldF9pbmZvLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9nZXRfcGF0aF9pbmZvLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9yZWFkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9zZWVrLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV90cnVuY2F0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfd3JpdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9sb2dfZmx1c2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9sb2dfZm9ybWF0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbG9nX2lzX3R0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2xvZ19yYXcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9sb2cuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfZmx1c2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfZnJlZV9hbGlnbmVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9hY2NlcHQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfYmluZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9jbGVhcl9sYXN0X2Vycm9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2Nvbm5lY3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfZnJlZV9yZXNvbHV0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2dldF9sYXN0X2Vycm9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2dldF9sb2NhbF9hZGRyZXNzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2ludGVybmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2lzX2Nvbm5lY3RlZF9hbmRfaWRsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pc19jb25uZWN0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfbGlzdGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3JlY2VpdmVfZnJvbS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9yZXNvbHZlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3NlbmRfdG8uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X2Jyb2FkY2FzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfcmVjZWl2ZV9idWZmZXJfc2l6ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfcmV1c2VfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfc2VuZF9idWZmZXJfc2l6ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfdGNwX2tlZXBfYWxpdmUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2V0X3RjcF9ub19kZWxheS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZXRfdGNwX3dpbmRvd19zY2FsaW5nLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3RvcmFnZV93cml0ZV9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zdHJpbmdfY29tcGFyZV9ub19jYXNlX24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zdHJpbmdfY29tcGFyZV9ub19jYXNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3RyaW5nX2NvbXBhcmVfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19mb3JtYXRfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N0cmluZ19mb3JtYXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zeXN0ZW1fYnJlYWtfaW50b19kZWJ1Z2dlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N5c3RlbV9jbGVhcl9sYXN0X2Vycm9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc3lzdGVtX2dldF9lcnJvcl9zdHJpbmcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zeXN0ZW1fZ2V0X2xhc3RfZXJyb3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zeXN0ZW1fZ2V0X2xvY2FsZV9pZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aHJlYWRfc2xlZXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2dldF9tb25vdG9uaWNfbm93LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGltZV9nZXRfbW9ub3RvbmljX3RocmVhZF9ub3cuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2dldF9ub3cuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2lzX3RpbWVfdGhyZWFkX25vd19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX3pvbmVfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX3pvbmVfZ2V0X25hbWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9icm9hZGNhc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL2NvbmRpdGlvbl92YXJpYWJsZV9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9jb25kaXRpb25fdmFyaWFibGVfc2lnbmFsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9jb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2FjcXVpcmVfdHJ5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9hY3F1aXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X3JlbGVhc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL29uY2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jb250ZXh0X2dldF9wb2ludGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY29udGV4dF9pbnRlcm5hbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NvbnRleHRfaW50ZXJuYWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NyZWF0ZV9sb2NhbF9rZXkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2Rlc3Ryb3lfbG9jYWxfa2V5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZGV0YWNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9nZXRfbG9jYWxfdmFsdWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9pc19lcXVhbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2pvaW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9zYW1wbGVyX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfZnJlZXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfc2FtcGxlcl9pbnRlcm5hbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfaW50ZXJuYWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX3NhbXBsZXJfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfc2FtcGxlcl90aGF3LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfc2V0X2xvY2FsX3ZhbHVlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfeWllbGQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvY3Jhc2hfc2lnbmFscy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9jcmFzaF9zaWduYWxzLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvZGVidWdfc2lnbmFscy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3NpZ25hbC9kZWJ1Z19zaWduYWxzLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvc3VzcGVuZF9zaWduYWxzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N1c3BlbmRfc2lnbmFscy5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N5c3RlbV9yZXF1ZXN0X2NvbmNlYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zaWduYWwvc3lzdGVtX3JlcXVlc3RfZnJlZXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc2lnbmFsL3N5c3RlbV9yZXF1ZXN0X3N1c3BlbmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfZ2V0X21heF9jaGFubmVsc181XzEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2dldF9taW5fYnVmZmVyX3NpemVfaW5fZnJhbWVzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19nZXRfbmVhcmVzdF9zdXBwb3J0ZWRfc2FtcGxlX2ZyZXF1ZW5jeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2lzX2F1ZGlvX2ZyYW1lX3N0b3JhZ2VfdHlwZV9zdXBwb3J0ZWRfaW50ZXJsZWF2ZWRfb25seS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaXNfYXVkaW9fc2FtcGxlX3R5cGVfc3VwcG9ydGVkX2Zsb2F0MzJfb25seS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaXNfdmFsaWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyYXNoX2hhbmRsZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3Jhc2hfaGFuZGxlci5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RpcmVjdG9yeV9jYW5fb3Blbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9ldmVudF9jYW5jZWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZXZlbnRfc2NoZWR1bGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9hdG9taWNfcmVwbGFjZV93cml0ZV9maWxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfYXRvbWljX3JlcGxhY2Vfd3JpdGVfZmlsZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfbW9kZV9zdHJpbmdfdG9fZmxhZ3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2VfY2xvc2VfcmVjb3JkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX2RlbGV0ZV9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2VfZ2V0X3JlY29yZF9zaXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX29wZW5fcmVjb3JkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX3JlYWRfcmVjb3JkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xvZ19tdXRleC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfbXV0ZXguaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfcmF3X2R1bXBfc3RhY2suY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbG9nX3Jhd19mb3JtYXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfY2FuX3BsYXlfbWltZV9hbmRfa2V5X3N5c3RlbS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fYnVmZmVyX2J1ZGdldC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYXVkaW9fY29uZmlndXJhdGlvbl81XzEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX291dHB1dF9jb3VudF9zaW5nbGVfYXVkaW9fb3V0cHV0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxpZ25tZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfZ2FyYmFnZV9jb2xsZWN0aW9uX2R1cmF0aW9uX3RocmVzaG9sZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX3BhZGRpbmcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2luaXRpYWxfYnVmZmVyX2NhcGFjaXR5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZF9hYWNfYW5kX29wdXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYnVmZmVyX3Bvb2xfYWxsb2NhdGVfb25fZGVtYW5kLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl91c2luZ19tZW1vcnlfcG9vbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21pbWVfdHlwZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZW1vcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV3LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3F1ZXVlX2FwcGxpY2F0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb25jYXRfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29uY2F0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb3B5X3dpZGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2NvcHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RyaW5nX2R1cGxpY2F0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fZ2V0X3JhbmRvbV91aW50NjQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3JlcXVlc3RfYmx1ci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9mb2N1cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9wYXVzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9yZXZlYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3lzdGVtX3JlcXVlc3Rfc3RvcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF91bnBhdXNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvd2luZG93X3NldF9kZWZhdWx0X29wdGlvbnMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2NhcHRpb25fc2V0dGluZ3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2Rpc3BsYXlfc2V0dGluZ3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X3RleHRfdG9fc3BlZWNoX3NldHRpbmdzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X3NldF9jYXB0aW9uc19lbmFibGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZGVzdHJveV90cmFuc2Zvcm1lci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2luaXRpYWxpemF0aW9uX3ZlY3Rvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2Nsb3NlX3Nlc3Npb24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jcmVhdGVfc3lzdGVtLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZGVzdHJveV9zeXN0ZW0uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9nZW5lcmF0ZV9zZXNzaW9uX3VwZGF0ZV9yZXF1ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2V0X21ldHJpY3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9pc19zZXJ2ZXJfY2VydGlmaWNhdGVfdXBkYXRhYmxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fdXBkYXRlX3NlcnZlcl9jZXJ0aWZpY2F0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXNzaW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9jbG9zZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX3JlYWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfY2FuY2VsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2lzX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19zcGVhay5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF90b3RhbF9ncHVfbWVtb3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X3VzZWRfZ3B1X21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2hpZGVfc3BsYXNoX3NjcmVlbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX25ldHdvcmtfaXNfZGlzY29ubmVjdGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fcmFpc2VfcGxhdGZvcm1fZXJyb3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9zaWduX3dpdGhfY2VydGlmaWNhdGlvbl9zZWNyZXRfa2V5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi91aV9uYXZfZ2V0X2ludGVyZmFjZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZm9jdXNfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZ2V0X2RpYWdvbmFsX3NpemVfaW5faW5jaGVzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZ2V0X29uX3NjcmVlbl9rZXlib2FyZF9ib3VuZGluZ19yZWN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfaGlkZV9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYycsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhpcyBtdXN0IGJlIGRlZmluZWQgd2hlbiBidWlsZGluZyBTdGFyYm9hcmQsIGFuZCBtdXN0IG5vdCB3aGVuCi0gICAgICAgICMgYnVpbGRpbmcgU3RhcmJvYXJkIGNsaWVudCBjb2RlLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi9jb21tb24uZ3lwOmNvbW1vbicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJldmVudC9saWJldmVudC5neXA6bGliZXZlbnQnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvb3B1cy9vcHVzLmd5cDpvcHVzJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnX2xpbmtlZCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYS5neXA6bWVkaWFfdXRpbCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDpwbGF5ZXInLAotICAgICAgICAnc3RhcmJvYXJkX2Jhc2Vfc3ltYm9saXplJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZSA9PSAxJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VsZl9sb2FkZXIvZXZlcmdyZWVuX2NvbmZpZy5neXA6ZXZlcmdyZWVuX2NvbmZpZycsCi0gICAgICAgICAgXSx9LAotICAgICAgICBdLAotICAgICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlID09IDEnIGFuZCAnc2JfZXZlcmdyZWVuX2NvbXBhdGlibGVfbGl0ZSAhPSAxJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2xvYWRlcl9hcHAvcGVuZGluZ19yZXN0YXJ0Lmd5cDpwZW5kaW5nX3Jlc3RhcnQnLAotICAgICAgICAgIF0sfSwKLSAgICAgICAgXSwKLSAgICAgICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQgPT0gMScsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJ1bndpbmQvbGlidW53aW5kLmd5cDp1bndpbmRfc3RhcmJvYXJkJywKLSAgICAgICAgICBdLH0sCi0gICAgICAgIF0sCi0gICAgICBdLAotICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgIyBHZW5lcmF0ZWQgYnkgQXVkaW8gUmVuZGVyZXIgYW5kIEF1ZGlvIFNpbmsgaW1wbGVtZW50YXRpb25zLgotICAgICAgICAnLVduby1yZW9yZGVyJywKLSAgICAgICAgIyBHZW5lcmF0ZWQgYnkgY29kZSBpbiB0aGUgcmFzcGkvc2hhcmVkL29wZW5fbWF4LgotICAgICAgICAnLVduby1zaWduLWNvbXBhcmUnLAotICAgICAgICAjIEdlbmVyYXRlZCBieSBtYW55IHN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiBmaWxlcy4KLSAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgICAgICctV25vLXVudXNlZC12YXJpYWJsZScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyYzdjZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl90ZXN0cy5neXBpJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgICAgJzxAKHBsYXllcl90ZXN0c19zb3VyY2VzKScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhpcyBhbGxvd3MgdGhlIHRlc3RzIHRvIGluY2x1ZGUgaW50ZXJuYWwgb25seSBoZWFkZXIgZmlsZXMuCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHNfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpLzwoc3RhcmJvYXJkX3BhdGgpL3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cy5neXA6c3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKaW5kZXggM2NkZGQwZi4uYjk0NjkyYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCisrKyBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYwpAQCAtMzIsNyArMzIsNyBAQAogY29uc3QgY2hhcioga0ZyaWVuZGx5TmFtZSA9ICJSYXNwYmVycnkgUGkiOwogCiAvLyBSZWFkIGRldmljZSBtb2RlbCBmcm9tIC9wcm9jL2RldmljZS10cmVlL21vZGVsCi1jb25zdCBjaGFyKiBHZXRNb2RlbE5hbWUoKSB7CitzdGQ6OnN0cmluZyBHZXRNb2RlbE5hbWUoKSB7CiAgIGNvbnN0IGNoYXIqIGZpbGVfcGF0aCA9ICIvcHJvYy9kZXZpY2UtdHJlZS9tb2RlbCI7CiAgIC8vIFNpemUgb2YgdGhlIHJhdyBkYXRhCiAgIHNpemVfdCBmaWxlX2RhdGFfc2l6ZTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAvLyBUcmltIHRyYWlsaW5nIHNwYWNlcwogICBzaXplX3QgZW5kID0gbW9kZWxfbmFtZS5maW5kX2xhc3Rfbm90X29mKCIgXHQiKTsKICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgIHJldHVybiBtb2RlbF9uYW1lLnN1YnN0cigwLCBlbmQgKyAxKS5jX3N0cigpOworICAgIHJldHVybiBtb2RlbF9uYW1lLnN1YnN0cigwLCBlbmQgKyAxKTsKICAgfSBlbHNlIHsKICAgICByZXR1cm4gIiI7CiAgIH0KQEAgLTEzNSwxNiArMTM1LDEyIEBACiAKICAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5TW9kZWxOYW1lOgogICAgICAgcmV0dXJuIENvcHlTdHJpbmdBbmRUZXN0SWZTdWNjZXNzKG91dF92YWx1ZSwgdmFsdWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE1vZGVsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNb2RlbE5hbWUoKS5jX3N0cigpKTsKIAogICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlDaGlwc2V0TW9kZWxOdW1iZXI6CiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eUZpcm13YXJlVmVyc2lvbjoKICAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5TW9kZWxZZWFyOgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVN5c3RlbUludGVncmF0b3JOYW1lOgotI2Vsc2UKLSAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5T3JpZ2luYWxEZXNpZ25NYW51ZmFjdHVyZXJOYW1lOgotI2VuZGlmCiAgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVNwZWVjaEFwaUtleToKICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC90ZXN0X2ZpbHRlcnMucHkgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQppbmRleCBhZWFlZDYxLi5kYTE3MmVjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQorKysgYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3Rlc3RfZmlsdGVycy5weQpAQCAtMTUsNDMgKzE1LDQzIEBACiAKIGZyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCiAKK19GSUxURVJFRF9URVNUUyA9IHsKKyAgICAnbnBsYic6IFsKKyAgICAgICAgJ1NiQXVkaW9TaW5rVGVzdC4qJywKKworICAgICAgICAjIFBlcm1hbmVudGx5IGZpbHRlciBvdXQgZHJtIHN5c3RlbSByZWxhdGVkIHRlc3RzIGFzIHJhc3BpIGRvZXNuJ3QKKyAgICAgICAgIyBzdXBwb3J0IGFueSBkcm0gc3lzdGVtcyBhbmQgdGhlcmUgaXMgbm8gcGxhbiB0byBpbXBsZW1lbnQgc3VjaAorICAgICAgICAjIHN1cHBvcnQuCisgICAgICAgICdTYkRybVRlc3QuQW55U3VwcG9ydGVkS2V5U3lzdGVtcycsCisgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uQW55U3VwcG9ydGVkS2V5U3lzdGVtcycsCisgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uS2V5U3lzdGVtV2l0aEF0dHJpYnV0ZXMnLAorICAgICAgICAnU2JNZWRpYUNhblBsYXlNaW1lQW5kS2V5U3lzdGVtLk1pbmltdW1TdXBwb3J0JywKKyAgICAgICAgJ1NiTWVkaWFTZXRBdWRpb1dyaXRlRHVyYXRpb25UZXN0cy8qJywKKyAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cyonLAorICAgICAgICAnU2JVbmRlZmluZWRCZWhhdmlvclRlc3QuQ2FsbFRoaXNQb2ludGVySXNOdWxsUmFpbnlEYXknLAorICAgICAgICAnU2JTeXN0ZW1HZXRQcm9wZXJ0eVRlc3QuRkxBS1lfUmV0dXJuc1JlcXVpcmVkJywKKyAgICBdLAorICAgICdwbGF5ZXJfZmlsdGVyX3Rlc3RzJzogWworICAgICAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSByYXNwYmVycnkgcGkgKDAgYW5kIDIpIGFyZSBpbmNvbXBsZXRlCisgICAgICAgICMgYW5kIG5vdCBtZWFudCB0byBiZSBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gQXMgc3VjaCB3ZSB3aWxsCisgICAgICAgICMgbm90IHJlcGFpciB0aGVzZSBmYWlsaW5nIHRlc3RzIGZvciBub3cuCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkVuZE9mU3RyZWFtV2l0aG91dEFueUlucHV0LzAnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZVJlc2V0cy8wJywKKyAgICAgICAgIyBGaWx0ZXIgZmFpbGVkIHRlc3RzLgorICAgICAgICAnUGxheWVyQ29tcG9uZW50c1Rlc3RzL1BsYXllckNvbXBvbmVudHNUZXN0LionLAorICAgIF0sCit9CisKIAogY2xhc3MgVGVzdEZpbHRlcnMob2JqZWN0KToKICAgIiIiU3RhcmJvYXJkIFJhc3BiZXJyeSBQaSBwbGF0Zm9ybSB0ZXN0IGZpbHRlcnMuIiIiCiAKICAgZGVmIEdldFRlc3RGaWx0ZXJzKHNlbGYpOgogICAgIGZpbHRlcnMgPSBbXQotICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIHNlbGYuX0ZJTFRFUkVEX1RFU1RTLml0ZXJpdGVtcygpOgorICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIF9GSUxURVJFRF9URVNUUy5pdGVtcygpOgogICAgICAgZmlsdGVycy5leHRlbmQodGVzdF9maWx0ZXIuVGVzdEZpbHRlcih0YXJnZXQsIHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQogICAgIHJldHVybiBmaWx0ZXJzCiAKLSAgX0ZJTFRFUkVEX1RFU1RTID0gewotICAgICAgJ25wbGInOiBbCi0gICAgICAgICAgJ1NiQXVkaW9TaW5rVGVzdC4qJywKLQotICAgICAgICAgICMgUGVybWFuZW50bHkgZmlsdGVyIG91dCBkcm0gc3lzdGVtIHJlbGF0ZWQgdGVzdHMgYXMgcmFzcGkgZG9lc24ndAotICAgICAgICAgICMgc3VwcG9ydCBhbnkgZHJtIHN5c3RlbXMgYW5kIHRoZXJlIGlzIG5vIHBsYW4gdG8gaW1wbGVtZW50IHN1Y2gKLSAgICAgICAgICAjIHN1cHBvcnQuCi0gICAgICAgICAgJ1NiRHJtVGVzdC5BbnlTdXBwb3J0ZWRLZXlTeXN0ZW1zJywKLSAgICAgICAgICAnU2JNZWRpYUNhblBsYXlNaW1lQW5kS2V5U3lzdGVtLkFueVN1cHBvcnRlZEtleVN5c3RlbXMnLAotICAgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uS2V5U3lzdGVtV2l0aEF0dHJpYnV0ZXMnLAotICAgICAgICAgICdTYk1lZGlhQ2FuUGxheU1pbWVBbmRLZXlTeXN0ZW0uTWluaW11bVN1cHBvcnQnLAotICAgICAgICAgICdTYk1lZGlhU2V0QXVkaW9Xcml0ZUR1cmF0aW9uVGVzdHMvKicsCi0gICAgICAgICAgJ1NiUGxheWVyV3JpdGVTYW1wbGVUZXN0cyonLAotICAgICAgICAgICdTYlVuZGVmaW5lZEJlaGF2aW9yVGVzdC5DYWxsVGhpc1BvaW50ZXJJc051bGxSYWlueURheScsCi0gICAgICAgICAgJ1NiU3lzdGVtR2V0UHJvcGVydHlUZXN0LkZMQUtZX1JldHVybnNSZXF1aXJlZCcsCi0gICAgICBdLAotICAgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnOiBbCi0gICAgICAgICAgIyBUaGUgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgcmFzcGJlcnJ5IHBpICgwIGFuZCAyKSBhcmUgaW5jb21wbGV0ZQotICAgICAgICAgICMgYW5kIG5vdCBtZWFudCB0byBiZSBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gQXMgc3VjaCB3ZSB3aWxsCi0gICAgICAgICAgIyBub3QgcmVwYWlyIHRoZXNlIGZhaWxpbmcgdGVzdHMgZm9yIG5vdy4KLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5FbmRPZlN0cmVhbVdpdGhvdXRBbnlJbnB1dC8wJywKLSAgICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZVJlc2V0cy8wJywKLSAgICAgICAgICAjIEZpbHRlciBmYWlsZWQgdGVzdHMuCi0gICAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy9QbGF5ZXJDb21wb25lbnRzVGVzdC4qJywKLSAgICAgIF0sCi0gIH0KLQogCiBkZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKICAgcmV0dXJuIFRlc3RGaWx0ZXJzKCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYyBiL3N0YXJib2FyZC9yYXNwaS9zaGFyZWQvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYwppbmRleCA2ZmNkYjk2Li4yNjgyNDAxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuY2MKKysrIGIvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC90aHJlYWRfY3JlYXRlX3ByaW9yaXR5LmNjCkBAIC0yMyw3ICsyMyw2IEBACiBuYW1lc3BhY2Ugc2hhcmVkIHsKIG5hbWVzcGFjZSBwdGhyZWFkIHsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhUSFJFQURfUFJJT1JJVFlfU1VQUE9SVCkKIC8vIFRoaXMgaXMgdGhlIG1heGltdW0gcHJpb3JpdHkgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBTZXRSb3VuZFJvYmluU2NoZWR1bGVyKCkuCiBjb25zdCBpbnQga01heFJvdW5kUm9iaW5Qcmlvcml0eSA9IDI7CiAKQEAgLTM3LDcgKzM2LDggQEAKIC8vICAgQHBpIHNvZnQgcnRwcmlvIDk5CiAvLyAgIEBwaSBoYXJkIG5pY2UgLTIwCiAvLyAgIEBwaSBzb2Z0IG5pY2UgLTIwCi1jb25zdCBjaGFyIGtTY2hlZHVsZXJFcnJvck1lc3NhZ2VbXSA9ICJVbmFibGUgdG8gc2V0IHNjaGVkdWxlci4gUGxlYXNlIHVwZGF0ZSAiCitjb25zdCBjaGFyIGtTY2hlZHVsZXJFcnJvck1lc3NhZ2VbXSA9CisgICAgIlVuYWJsZSB0byBzZXQgc2NoZWR1bGVyLiBQbGVhc2UgdXBkYXRlICIKICAgICAibGltaXRzLmNvbmYgdG8gc2V0ICdydHByaW8nIGxpbWl0IHRvIDk5IGFuZCAnbmljZScgbGltaXQgdG8gLTIwLiI7CiAKIC8vIE5vdGUgdGhhdCB1c2Ugb2Ygc2NoZWRfc2V0c2NoZWR1bGVyKCkgaGFzIGJlZW4gZm91bmQgdG8gYmUgbW9yZSByZWxpYWJseQpAQCAtNzcsNyArNzcsNyBAQAogICAgIFNCX0xPRyhFUlJPUikgPDwgIlVuYWJsZSB0byB1c2UgcmVhbC10aW1lIHJvdW5kLXJvYmluIHNjaGVkdWxlciBiZWNhdXNlICIKICAgICAgICAgICAgICAgICAgIDw8ICJ0aGUgbWF4aW11bSByZWFsLXRpbWUgc2NoZWR1bGluZyBwcmlvcml0eSBpcyB0b28gbG93ICgiCiAgICAgICAgICAgICAgICAgICA8PCBybGltaXRfcnRwcmlvLnJsaW1fY3VyIDw8ICIgPCAiIDw8IG1heF91c2VkX3ByaW9yaXR5Ci0gICAgICAgICAgICAgICAgICA8PCIpLiBVcGRhdGUgc2V0dGluZyB1c2luZyBgdWxpbWl0IC1yYCBvciBsaW1pdHMuY29uZiBmaWxlLiI7CisgICAgICAgICAgICAgICAgICA8PCAiKS4gVXBkYXRlIHNldHRpbmcgdXNpbmcgYHVsaW1pdCAtcmAgb3IgbGltaXRzLmNvbmYgZmlsZS4iOwogICAgIFNldE90aGVyU2NoZWR1bGVyKCk7CiAgICAgcmV0dXJuOwogICB9CkBAIC05Miw5ICs5Miw4IEBACiAgIH0KIAogICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gdGhyZWFkX3NjaGVkX3BhcmFtOwotICB0aHJlYWRfc2NoZWRfcGFyYW0uc2NoZWRfcHJpb3JpdHkgPQotICAgICAgc3RkOjptaW4obWluX3ByaW9yaXR5ICsgcHJpb3JpdHksCi0gICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJsaW1pdF9ydHByaW8ucmxpbV9jdXIpKTsKKyAgdGhyZWFkX3NjaGVkX3BhcmFtLnNjaGVkX3ByaW9yaXR5ID0gc3RkOjptaW4oCisgICAgICBtaW5fcHJpb3JpdHkgKyBwcmlvcml0eSwgc3RhdGljX2Nhc3Q8aW50PihybGltaXRfcnRwcmlvLnJsaW1fY3VyKSk7CiAgIGludCByZXN1bHQgPSBzY2hlZF9zZXRzY2hlZHVsZXIoMCwgU0NIRURfUlIsICZ0aHJlYWRfc2NoZWRfcGFyYW0pOwogICBTQl9DSEVDSyhyZXN1bHQgPT0gMCkgPDwga1NjaGVkdWxlckVycm9yTWVzc2FnZTsKIH0KQEAgLTEzMCw5ICsxMjksNiBAQAogICB9CiB9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKFRIUkVBRF9QUklPUklUWV9TVVBQT1JUKQotCiB9ICAvLyBuYW1lc3BhY2UgcHRocmVhZAogfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAogfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Jhc3BpL3NoYXJlZC90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRjZmU3Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvcmFzcGkvc2hhcmVkL3RocmVhZF90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gSW5jbHVkZXMgdGhyZWFkaW5nIHByaW1pdGl2ZSB0eXBlcyBhbmQgaW5pdGlhbGl6ZXJzLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9SQVNQSV9TSEFSRURfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfUkFTUElfU0hBUkVEX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90eXBlc19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfUkFTUElfU0hBUkVEX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zYWJpL19lbnYucHkgYi9zdGFyYm9hcmQvc2FiaS9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzJlYWJjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zYWJpL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtbW9kdWxlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCgnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2FiaS9vbWFoYV9yZXF1ZXN0LnB5IGIvc3RhcmJvYXJkL3NhYmkvb21haGFfcmVxdWVzdC5weQppbmRleCAyYWY5MjAyLi4yOThiMjhkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2FiaS9vbWFoYV9yZXF1ZXN0LnB5CisrKyBiL3N0YXJib2FyZC9zYWJpL29tYWhhX3JlcXVlc3QucHkKQEAgLTE1LDEyICsxNSwxMCBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICIiIlBvc3RzIGFuIEV2ZXJncmVlbiB1cGRhdGUgY2hlY2sgYWdhaW5zdCBPbWFoYSBiYWNrZW5kcy4iIiIKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmVxdWVzdHMKLWltcG9ydCBqc29uIGFzIHNpbXBsZWpzb24KK2ltcG9ydCBqc29uCiAKIGZyb20gc3RhcmJvYXJkLnNhYmkgaW1wb3J0IGdlbmVyYXRlX3NhYmlfaWQKIApAQCAtNTAsMTQgKzQ4LDExIEBACiAgICAgICAgICAgICAndXBkYXRlY2hlY2snOiB7fSwKICAgICAgICAgfV0sCiAgICAgICAgICdhcmNoJzogJycsCi0gICAgICAgICdjaGlwc2V0JzogJycsCiAgICAgICAgICdkZWR1cCc6ICdjcicsCi0gICAgICAgICdmaXJtd2FyZSc6ICcnLAogICAgICAgICAnaHcnOiB7fSwKICAgICAgICAgJ2pzZW5naW5lJzogJ3Y4LzguOC4yNzguOC1qaXQnLAogICAgICAgICAnbGFuZyc6ICdlbl9VUycsCiAgICAgICAgICdtYW51ZmFjdHVyZXInOiAnJywKLSAgICAgICAgJ21vZGVsJzogJycsCiAgICAgICAgICduYWNsX2FyY2gnOiAnJywKICAgICAgICAgJ29zJzogewogICAgICAgICAgICAgJ2FyY2gnOiAnJywKQEAgLTY5LDkgKzY0LDYgQEAKICAgICAgICAgJ3JlcXVlc3RpZCc6ICcnLAogICAgICAgICAnc2Vzc2lvbmlkJzogJycsCiAgICAgICAgICd1YXN0cmluZyc6ICcnLAotICAgICAgICAndXBkYXRlcmNoYW5uZWxjaGFuZ2VkJzogJ0ZhbHNlJywKLSAgICAgICAgJ3VwZGF0ZXJ2ZXJzaW9uJzogJzIxJywKLSAgICAgICAgJ3llYXInOiAnJwogICAgIH0KIH0KIApAQCAtOTEsNiArODMsMzIgQEAKICAgICAgIGhlbHA9J1doaWNoIGNoYW5uZWwgdG8gdXNlLicsCiAgICkKICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLWQnLAorICAgICAgJy0tY2hhbm5lbF9jaGFuZ2VkJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgaGVscD0nV2hldGhlciB0aGlzIGlzIGEgcmVxdWVzdCBmcm9tIGNoYW5naW5nIGNoYW5uZWxzLicsCisgICkKKyAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLWknLAorICAgICAgJy0tY2hpcHNldCcsCisgICAgICBkZWZhdWx0PScnLAorICAgICAgaGVscD0nV2hpY2ggZGV2aWNlIGNoaXBzZXQgdG8gdXNlLicsCisgICkKKyAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLW0nLAorICAgICAgJy0tbW9kZWwnLAorICAgICAgZGVmYXVsdD0nJywKKyAgICAgIGhlbHA9J1doaWNoIGRldmljZSBtb2RlbCB0byB1c2UuJywKKyAgKQorICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctcCcsCisgICAgICAnLS1wcmludF9yZXF1ZXN0JywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgaGVscD0nUHJpbnQgdGhlIHJlcXVlc3Qgc2VudCB0byBPbWFoYSwgaW5jbHVkaW5nIHRoZSBzZXJ2ZXIgdXNlZC4nLAorICApCisgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJy1xJywKICAgICAgICctLXFhJywKICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCkBAIC05OCwzMiArMTE2LDU3IEBACiAgICAgICBoZWxwPSdXaGV0aGVyIHRvIHVzZSB0aGUgT21haGEgUUEgYmFja2VuZC4nLAogICApCiAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy1yJywKKyAgICAgICctLWZpcm13YXJlJywKKyAgICAgIGRlZmF1bHQ9JycsCisgICAgICBoZWxwPSdXaGljaCBkZXZpY2UgZmlybXdhcmUgdG8gdXNlLicsCisgICkKKyAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnLXMnLAogICAgICAgJy0tc2J2ZXJzaW9uJywKICAgICAgIGRlZmF1bHQ9JzEyJywKICAgICAgIGhlbHA9J1doaWNoIFN0YXJib2FyZCBBUEkgdmVyc2lvbiB0byB1c2UuJywKICAgKQogICBhcmdfcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctdScsCisgICAgICAnLS11cGRhdGVyX3ZlcnNpb24nLAorICAgICAgZGVmYXVsdD0nMjEnLAorICAgICAgaGVscD0nV2hpY2ggQ29iYWx0ICh1cGRhdGVyKSB2ZXJzaW9uIHRvIHVzZS4gZS5nLiAyMSwgMjInLAorICApCisgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJy12JywKICAgICAgICctLXZlcnNpb24nLAogICAgICAgZGVmYXVsdD0nMS4wLjAnLAogICAgICAgaGVscD0nV2hpY2ggRXZlcmdyZWVuIHZlcnNpb24gdG8gdXNlLicsCiAgICkKKyAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLXknLAorICAgICAgJy0teWVhcicsCisgICAgICBkZWZhdWx0PScyMDIyJywKKyAgICAgIGhlbHA9J1doaWNoIGRldmljZSB5ZWFyIHRvIHVzZS4nLAorICApCiAgIGFyZ3MsIF8gPSBhcmdfcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoKQogCiAgIF9SRVFVRVNUWydyZXF1ZXN0J11bJ1NBQkknXSA9IGdlbmVyYXRlX3NhYmlfaWQuRG9NYWluKCkKICAgX1JFUVVFU1RbJ3JlcXVlc3QnXVsnYnJhbmQnXSA9IGFyZ3MuYnJhbmQKKyAgX1JFUVVFU1RbJ3JlcXVlc3QnXVsnY2hpcHNldCddID0gYXJncy5jaGlwc2V0CisgIF9SRVFVRVNUWydyZXF1ZXN0J11bJ2Zpcm13YXJlJ10gPSBhcmdzLmZpcm13YXJlCisgIF9SRVFVRVNUWydyZXF1ZXN0J11bJ21vZGVsJ10gPSBhcmdzLm1vZGVsCiAgIF9SRVFVRVNUWydyZXF1ZXN0J11bJ3VwZGF0ZXJjaGFubmVsJ10gPSBhcmdzLmNoYW5uZWwKKyAgX1JFUVVFU1RbJ3JlcXVlc3QnXVsndXBkYXRlcmNoYW5uZWxjaGFuZ2VkJ10gPSBhcmdzLmNoYW5uZWxfY2hhbmdlZAogICBfUkVRVUVTVFsncmVxdWVzdCddWydzYnZlcnNpb24nXSA9IGFyZ3Muc2J2ZXJzaW9uCisgIF9SRVFVRVNUWydyZXF1ZXN0J11bJ3VwZGF0ZXJ2ZXJzaW9uJ10gPSBhcmdzLnVwZGF0ZXJfdmVyc2lvbgorICBfUkVRVUVTVFsncmVxdWVzdCddWyd5ZWFyJ10gPSBhcmdzLnllYXIKICAgX1JFUVVFU1RbJ3JlcXVlc3QnXVsnYXBwJ11bMF1bJ3ZlcnNpb24nXSA9IGFyZ3MudmVyc2lvbgogCi0gIHByaW50KCdRdWVyeWluZzogW1sge30gXV0nLmZvcm1hdChfRU5EUE9JTlRfUUEgaWYgYXJncy5xYSBlbHNlIF9FTkRQT0lOVCkpCi0gIHByaW50KCdSZXF1ZXN0OiAgW1sge30gXV0nLmZvcm1hdChzaW1wbGVqc29uLmR1bXBzKF9SRVFVRVNUKSkpCisgIGlmIGFyZ3MucHJpbnRfcmVxdWVzdDoKKyAgICBwcmludCgnUXVlcnlpbmcgc2VydmVyOiB7fScuZm9ybWF0KF9FTkRQT0lOVF9RQSBpZiBhcmdzLnFhIGVsc2UgX0VORFBPSU5UKSkKKyAgICBwcmludCgnU2VuZGluZyByZXF1ZXN0OiB7fScuZm9ybWF0KGpzb24uZHVtcHMoX1JFUVVFU1QpKSkKIAogICBwcmludCgKICAgICAgIHJlcXVlc3RzLnBvc3QoCiAgICAgICAgICAgX0VORFBPSU5UX1FBIGlmIGFyZ3MucWEgZWxzZSBfRU5EUE9JTlQsCi0gICAgICAgICAgZGF0YT1zaW1wbGVqc29uLmR1bXBzKF9SRVFVRVNUKSwKKyAgICAgICAgICBkYXRhPWpzb24uZHVtcHMoX1JFUVVFU1QpLAogICAgICAgICAgIGhlYWRlcnM9X0hFQURFUlMpLnRleHQpCiAKICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zYWJpL3NhYmkuZ3lwaSBiL3N0YXJib2FyZC9zYWJpL3NhYmkuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M3YTJjMi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2FiaS9zYWJpLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgU3RhcmJvYXJkIEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UKLSMKLSMgVGhpcyBmaWxlIGlzIFttb3N0bHldIHBsYXRmb3JtLWFnbm9zdGljIGFuZCB0cmFuc2xhdGVzIHRoZSBzZXQgb2YgQUJJCi0jIHZhcmlhYmxlcywgd2hpY2ggc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCBFdmVyZ3JlZW4gcGxhdGZvcm0sIGludG8gYnVpbGQKLSMgdGltZSBkZWZpbmVzLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgIyBEZWZhdWx0IEFCSSB2YXJpYWJsZXMKLSAgICAnc2JfYXBpX3ZlcnNpb24lJzogMCwKLSAgICAndGFyZ2V0X2FyY2glJzogJycsCi0gICAgJ3RhcmdldF9hcmNoX3N1YiUnOiAnJywKLSAgICAnd29yZF9zaXplJSc6IDAsCi0gICAgJ2VuZGlhbm5lc3MlJzogJycsCi0gICAgJ2NhbGxpbmdfY29udmVudGlvbiUnOiAnJywKLSAgICAnZmxvYXRpbmdfcG9pbnRfYWJpJSc6ICcnLAotICAgICdmbG9hdGluZ19wb2ludF9mcHUlJzogJycsCi0gICAgJ3NpZ25lZG5lc3Nfb2ZfY2hhciUnOiAnJywKLSAgICAnc2lnbmVkbmVzc19vZl9lbnVtJSc6ICcnLAotICAgICdhbGlnbm1lbnRfY2hhciUnOiAgICAwLAotICAgICdhbGlnbm1lbnRfZG91YmxlJSc6ICAwLAotICAgICdhbGlnbm1lbnRfZmxvYXQlJzogICAwLAotICAgICdhbGlnbm1lbnRfaW50JSc6ICAgICAwLAotICAgICdhbGlnbm1lbnRfbGxvbmclJzogICAwLAotICAgICdhbGlnbm1lbnRfbG9uZyUnOiAgICAwLAotICAgICdhbGlnbm1lbnRfcG9pbnRlciUnOiAwLAotICAgICdhbGlnbm1lbnRfc2hvcnQlJzogICAwLAotICAgICdzaXplX29mX2NoYXIlJzogICAgMCwKLSAgICAnc2l6ZV9vZl9lbnVtJSc6ICAgIDAsCi0gICAgJ3NpemVfb2ZfZG91YmxlJSc6ICAwLAotICAgICdzaXplX29mX2Zsb2F0JSc6ICAgMCwKLSAgICAnc2l6ZV9vZl9pbnQlJzogICAgIDAsCi0gICAgJ3NpemVfb2ZfbGxvbmclJzogICAwLAotICAgICdzaXplX29mX2xvbmclJzogICAgMCwKLSAgICAnc2l6ZV9vZl9wb2ludGVyJSc6IDAsCi0gICAgJ3NpemVfb2Zfc2hvcnQlJzogICAwLAotCi0gICAgIyBhcm0gYW5kIGFybTY0Ci0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtIiBvciB0YXJnZXRfYXJjaD09ImFybTY0IicsIHsKLSAgICAgICAgJ2FybV9mbG9hdF9hYmknOiAnPChmbG9hdGluZ19wb2ludF9hYmkpJywKLSAgICAgICAgJ2FybV9mcHUnOiAnPChmbG9hdGluZ19wb2ludF9mcHUpJywKLQotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ3RhcmdldF9hcmNoX3N1Yj09InY3YSInLCB7Ci0gICAgICAgICAgICAnYXJtX3ZlcnNpb24nOiA3LAotICAgICAgICAgICAgJ2FybXY3JzogMSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ3RhcmdldF9hcmNoX3N1Yj09InY4YSInLCB7Ci0gICAgICAgICAgICAnYXJtX3ZlcnNpb24nOiA4LAotICAgICAgICAgICAgJ2FybXY3JzogMCwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnU0JfU0FCSV9KU09OX0lEPVIiKDwhcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuc2FiaS5nZW5lcmF0ZV9zYWJpX2lkIC1mIDwoREVQVEgpLzwoc2FiaV9qc29uX3BhdGgpKSkiJywKLQotICAgICAgJ1NCX0FQSV9WRVJTSU9OPTwoc2JfYXBpX3ZlcnNpb24pJywKLQotICAgICAgJ1NCX1NBQklfVEFSR0VUX0FSQ0g9IjwodGFyZ2V0X2FyY2gpIicsCi0gICAgICAnU0JfU0FCSV9XT1JEX1NJWkU9Ijwod29yZF9zaXplKSInLAotCi0gICAgICAjIElubGluZWQgUHl0aG9uIHVzZWQgdG8gY2FwaXRhbGl6ZSB0aGUgdmFyaWFibGUgdmFsdWVzLgotICAgICAgJ1NCX0lTX0FSQ0hfPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIHN0cl91cHBlciA8KHRhcmdldF9hcmNoKSk9MScsCi0gICAgICAnU0JfSEFTXzwhcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBzdHJfdXBwZXIgPChjYWxsaW5nX2NvbnZlbnRpb24pKV9DQUxMSU5HPTEnLAotICAgICAgJ1NCX0hBU188IXB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgc3RyX3VwcGVyIDwoZmxvYXRpbmdfcG9pbnRfYWJpKSlfRkxPQVRTPTEnLAotCi0gICAgICAnU0JfSVNfPCh3b3JkX3NpemUpX0JJVD0xJywKLSAgICAgICdTQl9BTElHTk1FTlRfT0ZfQ0hBUj08KGFsaWdubWVudF9jaGFyKScsCi0gICAgICAnU0JfQUxJR05NRU5UX09GX0RPVUJMRT08KGFsaWdubWVudF9kb3VibGUpJywKLSAgICAgICdTQl9BTElHTk1FTlRfT0ZfRkxPQVQ9PChhbGlnbm1lbnRfZmxvYXQpJywKLSAgICAgICdTQl9BTElHTk1FTlRfT0ZfSU5UPTwoYWxpZ25tZW50X2ludCknLAotICAgICAgJ1NCX0FMSUdOTUVOVF9PRl9MTE9ORz08KGFsaWdubWVudF9sbG9uZyknLAotICAgICAgJ1NCX0FMSUdOTUVOVF9PRl9MT05HPTwoYWxpZ25tZW50X2xvbmcpJywKLSAgICAgICdTQl9BTElHTk1FTlRfT0ZfUE9JTlRFUj08KGFsaWdubWVudF9wb2ludGVyKScsCi0gICAgICAnU0JfQUxJR05NRU5UX09GX1NIT1JUPTwoYWxpZ25tZW50X3Nob3J0KScsCi0gICAgICAnU0JfU0laRV9PRl9DSEFSPTwoc2l6ZV9vZl9jaGFyKScsCi0gICAgICAnU0JfU0laRV9PRl9FTlVNPTwoc2l6ZV9vZl9lbnVtKScsCi0gICAgICAnU0JfU0laRV9PRl9ET1VCTEU9PChzaXplX29mX2RvdWJsZSknLAotICAgICAgJ1NCX1NJWkVfT0ZfRkxPQVQ9PChzaXplX29mX2Zsb2F0KScsCi0gICAgICAnU0JfU0laRV9PRl9JTlQ9PChzaXplX29mX2ludCknLAotICAgICAgJ1NCX1NJWkVfT0ZfTE9ORz08KHNpemVfb2ZfbG9uZyknLAotICAgICAgJ1NCX1NJWkVfT0ZfTExPTkc9PChzaXplX29mX2xsb25nKScsCi0gICAgICAnU0JfU0laRV9PRl9QT0lOVEVSPTwoc2l6ZV9vZl9wb2ludGVyKScsCi0gICAgICAnU0JfU0laRV9PRl9TSE9SVD08KHNpemVfb2Zfc2hvcnQpJywKLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydlbmRpYW5uZXNzPT0ibGl0dGxlIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1NCX0lTX0JJR19FTkRJQU49MCcsCi0gICAgICAgICAgJ1NCX0lTX0xJVFRMRV9FTkRJQU49MScsCi0gICAgICAgIF0sCi0gICAgICB9LCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdTQl9JU19CSUdfRU5ESUFOPTEnLAotICAgICAgICAgICdTQl9JU19MSVRUTEVfRU5ESUFOPTAnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ3NpZ25lZG5lc3Nfb2ZfY2hhcj09InNpZ25lZCInLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydTQl9IQVNfU0lHTkVEX0NIQVI9MSddLAotICAgICAgfSwgewotICAgICAgICAnZGVmaW5lcyc6IFsnU0JfSEFTX1NJR05FRF9DSEFSPTAnXSwKLSAgICAgIH1dLAotICAgICAgWydzaWduZWRuZXNzX29mX2VudW09PSJzaWduZWQiJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnU0JfSEFTX1NJR05FRF9FTlVNPTEnXSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1NCX0hBU19TSUdORURfRU5VTT0wJ10sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotICAnaW5jbHVkZXMnOiBbCi0gICAgIyBUaGlzIEpTT04gZmlsZSBhbHNvIGhhcHBlbnMgdG8gYmUgdmFsaWQgR1lQIGNvbmZpZ3VyYXRpb24gbGFuZ3VhZ2Ugc28gd2UKLSAgICAjIGluY2x1ZGUgaXQgaGVyZS4gU2xpZ2h0bHkgaGFja3ksIGhpZ2hseSBlZmZlY3RpdmUuCi0gICAgJzwoREVQVEgpLzwoc2FiaV9qc29uX3BhdGgpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvX2Vudi5weSBiL3N0YXJib2FyZC9zaGFyZWQvX2Vudi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDIxOTA4ZS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWltcG9ydCBzeXMKLQotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfYXVkaW9fc2lua190eXBlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9hbHNhL2Fsc2FfYXVkaW9fc2lua190eXBlLmNjCmluZGV4IDdkMDA0OGQuLmZkZDBiZmIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvYWxzYS9hbHNhX2F1ZGlvX3NpbmtfdHlwZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL2Fsc2EvYWxzYV9hdWRpb19zaW5rX3R5cGUuY2MKQEAgLTE5MSw3ICsxOTEsNyBAQAogICBTQl9EQ0hFQ0soU2JBdWRpb1NpbmtJc0F1ZGlvU2FtcGxlVHlwZVN1cHBvcnRlZChzYW1wbGVfdHlwZV8pKTsKIAogICBtZW1zZXQoc2lsZW5jZV9mcmFtZXNfLCAwLAotICAgICAgICAgICAgICBjaGFubmVscyAqIGtGcmFtZXNQZXJSZXF1ZXN0ICogR2V0U2FtcGxlU2l6ZShzYW1wbGVfdHlwZSkpOworICAgICAgICAgY2hhbm5lbHMgKiBrRnJhbWVzUGVyUmVxdWVzdCAqIEdldFNhbXBsZVNpemUoc2FtcGxlX3R5cGUpKTsKIAogICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKICAgYXVkaW9fb3V0X3RocmVhZF8gPQpAQCAtMzg1LDcgKzM4NSw3IEBACiAgICAgICBzb3VyY2VfYWRkciArPSBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldF9pbl9mcmFtZXMgKyBzb3VyY2VfZnJhbWVzKSAlCiAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNfcGVyX2NoYW5uZWxfICogYnl0ZXNfcGVyX2ZyYW1lOwogICAgICAgbWVtY3B5KCZyZXNhbXBsZV9idWZmZXJfWzBdICsgYnl0ZXNfcGVyX2ZyYW1lICogdGFyZ2V0X2ZyYW1lcywKLSAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkciwgYnl0ZXNfcGVyX2ZyYW1lKTsKKyAgICAgICAgICAgICBzb3VyY2VfYWRkciwgYnl0ZXNfcGVyX2ZyYW1lKTsKICAgICAgICsrdGFyZ2V0X2ZyYW1lczsKICAgICAgIHNvdXJjZV9mcmFtZXMgKz0gcGxheWJhY2tfcmF0ZTsKICAgICB9CkBAIC00MDgsOSArNDA4LDcgQEAKICAgICAgIGludCBmcmFtZXNfcGVyX2NoYW5uZWwsCiAgICAgICBTYkF1ZGlvU2lua1VwZGF0ZVNvdXJjZVN0YXR1c0Z1bmMgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKICAgICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6Q29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpFcnJvckZ1bmMgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogCiAgIGJvb2wgSXNWYWxpZChTYkF1ZGlvU2luayBhdWRpb19zaW5rKSBvdmVycmlkZSB7CkBAIC00MzUsOSArNDMzLDcgQEAKICAgICBpbnQgZnJhbWVzX3Blcl9jaGFubmVsLAogICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAogICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6Q29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6RXJyb3JGdW5jIGVycm9yX2Z1bmMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgdm9pZCogY29udGV4dCkgewogICBBbHNhQXVkaW9TaW5rKiBhdWRpb19zaW5rID0gbmV3IEFsc2FBdWRpb1NpbmsoCiAgICAgICB0aGlzLCBjaGFubmVscywgc2FtcGxpbmdfZnJlcXVlbmN5X2h6LCBhdWRpb19zYW1wbGVfdHlwZSwgZnJhbWVfYnVmZmVycywKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X21hcC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X21hcC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4NjdkOS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9tYXAuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVtb3J5X3JlcG9ydGVyX2ludGVybmFsLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9wYWdlX2ludGVybmFsLmgiCi0KLXZvaWQqIFNiTWVtb3J5TWFwKGludDY0X3Qgc2l6ZV9ieXRlcywgaW50IGZsYWdzLCBjb25zdCBjaGFyKiBuYW1lKSB7Ci0gIHZvaWQqIG1lbW9yeSA9IFNiUGFnZU1hcChzaXplX2J5dGVzLCBmbGFncywgbmFtZSk7Ci0gIFNiTWVtb3J5UmVwb3J0ZXJSZXBvcnRNYXBwZWRNZW1vcnkobWVtb3J5LCBzaXplX2J5dGVzKTsKLSAgcmV0dXJuIG1lbW9yeTsKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X3Byb3RlY3QuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL21lbW9yeV9wcm90ZWN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWE0YzU5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X3Byb3RlY3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL3BhZ2VfaW50ZXJuYWwuaCIKLQotYm9vbCBTYk1lbW9yeVByb3RlY3Qodm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMsIGludCBmbGFncykgewotICByZXR1cm4gU2JQYWdlUHJvdGVjdCh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIGZsYWdzKTsKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvbWVtb3J5X3VubWFwLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfdW5tYXAuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YmUwYTYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9tZW1vcnlfdW5tYXAuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVtb3J5X3JlcG9ydGVyX2ludGVybmFsLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9wYWdlX2ludGVybmFsLmgiCi0KLWJvb2wgU2JNZW1vcnlVbm1hcCh2b2lkKiB2aXJ0dWFsX2FkZHJlc3MsIGludDY0X3Qgc2l6ZV9ieXRlcykgewotICBTYk1lbW9yeVJlcG9ydGVyUmVwb3J0VW5tYXBwZWRNZW1vcnkodmlydHVhbF9hZGRyZXNzLCBzaXplX2J5dGVzKTsKLSAgcmV0dXJuIFNiUGFnZVVubWFwKHZpcnR1YWxfYWRkcmVzcywgc2l6ZV9ieXRlcyk7Ci19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL2RsbWFsbG9jL3BhZ2VfaW50ZXJuYWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvcGFnZV9pbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjZkNTA5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvcGFnZV9pbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGludGVybmFsIGhlYWRlciBkZWZpbmVzIGEgY3Jvc3MtcGxhdGZvcm0gaW50ZXJmYWNlIGZvciBpbXBsZW1lbnRpbmcKLS8vIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEEgcGxhdGZvcm0gbXVzdCBpbXBsZW1lbnQgdGhpcyBpZiBpdCB3YW50cyB0byB1c2UKLS8vIGRsbWFsbG9jLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfRExNQUxMT0NfUEFHRV9JTlRFUk5BTF9IXwotI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX0RMTUFMTE9DX1BBR0VfSU5URVJOQUxfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE1NQVApCi0vLyBBbGxvY2F0ZXMgfHNpemVfYnl0ZXN8IHdvcnRoIG9mIHBoeXNpY2FsIG1lbW9yeSBwYWdlcyBhbmQgbWFwcyB0aGVtIGludG8gYW4KLS8vIGF2YWlsYWJsZSB2aXJ0dWFsIHJlZ2lvbi4gT24gc29tZSBwbGF0Zm9ybXMsIHxuYW1lfCBhcHBlYXJzIGluIHRoZSBkZWJ1Z2dlcgotLy8gYW5kIGNhbiBiZSB1cCB0byAzMiBieXRlcy4gUmV0dXJucyBTQl9NRU1PUllfTUFQX0ZBSUxFRCBvbiBmYWlsdXJlLCBhcyBOVUxMCi0vLyBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZS4KLXZvaWQqIFNiUGFnZU1hcChzaXplX3Qgc2l6ZV9ieXRlcywgaW50IGZsYWdzLCBjb25zdCBjaGFyKiBuYW1lKTsKLQotLy8gU2FtZSBhcyBTYk1hcCgpIGJ1dCAidW50cmFja2VkIiBtZWFucyBzaXplIHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbgotLy8gU2JHZXRNYXBwZWRCeXRlcygpLiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBkbG1hbGxvYyBzbyB0aGF0IG1lbW9yeQotLy8gYWxsb2NhdGVkIGJ5IGRsbWFsbG9jIGlzbid0IGNvdW50ZWQgdHdpY2UuCi12b2lkKiBTYlBhZ2VNYXBVbnRyYWNrZWQoc2l6ZV90IHNpemVfYnl0ZXMsIGludCBmbGFncywgY29uc3QgY2hhciogbmFtZSk7Ci0KLS8vIE1lbW9yeSBtYXBzIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIHxhZGRyfCBzdGFydGluZyB3aXRoIHxmaWxlX29mZnNldHwgYW5kCi0vLyBtYXBwaW5nIHxzaXplfCBieXRlcy4gVGhlIHxhZGRyfCBzaG91bGQgYmUgcmVzZXJ2ZWQgYmVmb3JlIGNhbGxpbmcuIElmCi0vLyBOVUxMIHxhZGRyfCBpcyBwYXNzZWQgYSBuZXcgbWVtb3J5IGJsb2NrIHdvdWxkIGJlIGFsbG9jYXRlZCBhbmQgdGhlIGFkZHJlc3MKLS8vIHJldHVybmVkLiBUaGUgZmlsZV9vZmZzZXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHxrU2JNZW1vcnlQYWdlU2l6ZXwuCi0vLyBPbiBlcnJvciByZXR1cm5zIE5VTEwuCi12b2lkKiBTYlBhZ2VNYXBGaWxlKHZvaWQqIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgIFNiTWVtb3J5TWFwRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIGludDY0X3QgZmlsZV9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGludDY0X3Qgc2l6ZSk7Ci0KLS8vIFVubWFwIHxzaXplX2J5dGVzfCBvZiBwaHlzaWNhbCBwYWdlcyBzdGFydGluZyBmcm9tIHx2aXJ0dWFsX2FkZHJlc3N8LAotLy8gcmV0dXJuaW5nIHRydWUgb24gc3VjY2Vzcy4gQWZ0ZXIgdGhpcywgW3ZpcnR1YWxfYWRkcmVzcywgdmlydHVhbF9hZGRyZXNzICsKLS8vIHNpemVfYnl0ZXMpIHdpbGwgbm90IGJlIHJlYWQvd3JpdGFibGUuIFNiVW5tYXAoKSBjYW4gdW5tYXAgbXVsdGlwbGUKLS8vIGNvbnRpZ3VvdXMgcmVnaW9ucyB0aGF0IHdlcmUgbWFwcGVkIHdpdGggc2VwYXJhdGUgY2FsbHMgdG8KLS8vIFNiUGFnZU1hcCgpLiBFLmcuIGlmIG9uZSBjYWxsIHRvIFNiUGFnZU1hcCgweDEwMDApIHJldHVybnMgKHZvaWQqKTB4QTAwMCBhbmQKLS8vIGFub3RoZXIgY2FsbCB0byBTYlBhZ2VNYXAoMHgxMDAwKSByZXR1cm5zICh2b2lkKikweEIwMDAsIFNiUGFnZVVubWFwKDB4QTAwMCwKLS8vIDB4MjAwMCkgc2hvdWxkIGZyZWUgYm90aC4KLWJvb2wgU2JQYWdlVW5tYXAodm9pZCogdmlydHVhbF9hZGRyZXNzLCBzaXplX3Qgc2l6ZV9ieXRlcyk7Ci0KLS8vIFNhbWUgYXMgU2JVbm1hcCgpLCBidXQgc2hvdWxkIGJlIHVzZWQgb25seSBieSBkbG1hbGxvYyB0byB1bm1hcCBwYWdlcwotLy8gYWxsb2NhdGVkIHZpYSBNYXBVbnRyYWNrZWQoKS4KLWJvb2wgU2JQYWdlVW5tYXBVbnRyYWNrZWQodm9pZCogdmlydHVhbF9hZGRyZXNzLCBzaXplX3Qgc2l6ZV9ieXRlcyk7Ci0KLS8vIENoYW5nZSB0aGUgcHJvdGVjdGlvbiBvZiB8c2l6ZV9ieXRlc3wgb2YgcGh5c2ljYWwgcGFnZXMsIHN0YXJ0aW5nIGZyb20KLS8vIHx2aXJ0dWFsX2FkZHJlc3N8LCB0byB8ZmxhZ3N8LCByZXR1cm5pbmcgfHRydWV8IG9uIHN1Y2Nlc3MuCi1ib29sIFNiUGFnZVByb3RlY3Qodm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMsIGludCBmbGFncyk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhNTUFQKQotCi0vLyBSZXR1cm5zIHRoZSB0b3RhbCBhbW91bnQsIGluIGJ5dGVzLCBvZiBwaHlzaWNhbCBtZW1vcnkgYXZhaWxhYmxlLiBTaG91bGQKLS8vIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIGtTYk1lbW9yeVBhZ2VTaXplLgotc2l6ZV90IFNiUGFnZUdldFRvdGFsUGh5c2ljYWxNZW1vcnlCeXRlcygpOwotCi0vLyBSZXR1cm5zIHRoZSBhbW91bnQsIGluIGJ5dGVzLCBvZiBwaHlzaWNhbCBtZW1vcnkgdGhhdCBoYXNuJ3QgeWV0IGJlZW4gbWFwcGVkLgotLy8gU2hvdWxkIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoZSBwbGF0Zm9ybSdzIHBoeXNpY2FsIHBhZ2Ugc2l6ZS4KLWludDY0X3QgU2JQYWdlR2V0VW5hbGxvY2F0ZWRQaHlzaWNhbE1lbW9yeUJ5dGVzKCk7Ci0KLS8vIFJldHVybnMgdGhlIHRvdGFsIGFtb3VudCwgaW4gYnl0ZXMsIGN1cnJlbnRseSBhbGxvY2F0ZWQgdmlhIE1hcCgpLiAgU2hvdWxkCi0vLyBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiBrU2JNZW1vcnlQYWdlU2l6ZS4KLXNpemVfdCBTYlBhZ2VHZXRNYXBwZWRCeXRlcygpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0gIC8vIGV4dGVybiAiQyIKLSNlbmRpZgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfRExNQUxMT0NfUEFHRV9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9lbnZpcm9ubWVudC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9lbnZpcm9ubWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNmY2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL2Vudmlyb25tZW50LmgKQEAgLTAsMCArMSwzMSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBNb2R1bGUgT3ZlcnZpZXc6IFN0YXJib2FyZCBCeXRlIFN3YXAgbW9kdWxlIEMrKyBjb252ZW5pZW5jZSBsYXllcgorLy8KKy8vIEltcGxlbWVudHMgY29udmVuaWVudCB0ZW1wbGF0ZWQgd3JhcHBlcnMgYXJvdW5kIHRoZSBjb3JlIFN0YXJib2FyZCBCeXRlIFN3YXAKKy8vIG1vZHVsZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIHdoZW4gcGVyZm9ybWluZyBJL08uCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9FTlZJUk9OTUVOVF9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX0VOVklST05NRU5UX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworCitzdGQ6OnN0cmluZyBHZXRFbnZpcm9ubWVudChzdGQ6OnN0cmluZyBuYW1lKTsKKworfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfRU5WSVJPTk1FTlRfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZy5neXAgYi9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWcuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTQxNmIyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgfSwKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnZmZtcGVnX3NwZWNpYWxpemF0aW9uX3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl9pbXBsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZ19hdWRpb19kZWNvZGVyX2ltcGwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfY29tbW9uLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX3ZpZGVvX2RlY29kZXJfaW1wbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfdmlkZW9fZGVjb2Rlcl9pbXBsLmgnLAotICAgIF0sCi0gICAgJ2ZmbXBlZ19kaXNwYXRjaF9zb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2F1ZGlvX2RlY29kZXIuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfZGlzcGF0Y2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2Rpc3BhdGNoLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgXSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmF2LjU0LjM1LjEnLAotICAgICAgJ3R5cGUnOiAnPChsaWJyYXJ5KScsCi0gICAgICAnc291cmNlcyc6IFsgJzxAKGZmbXBlZ19zcGVjaWFsaXphdGlvbl9zb3VyY2VzKScgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9mZm1wZWdfaW5jbHVkZXMvZmZtcGVnX2luY2x1ZGVzLmd5cDpsaWJhdi41NC4zNS4xJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGliYXYuNTYuMS4wJywKLSAgICAgICd0eXBlJzogJzwobGlicmFyeSknLAotICAgICAgJ3NvdXJjZXMnOiBbICc8QChmZm1wZWdfc3BlY2lhbGl6YXRpb25fc291cmNlcyknIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvZmZtcGVnX2luY2x1ZGVzL2ZmbXBlZ19pbmNsdWRlcy5neXA6bGliYXYuNTYuMS4wJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZmZtcGVnLjU3LjEwNy4xMDAnLAotICAgICAgJ3R5cGUnOiAnPChsaWJyYXJ5KScsCi0gICAgICAnc291cmNlcyc6IFsgJzxAKGZmbXBlZ19zcGVjaWFsaXphdGlvbl9zb3VyY2VzKScgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9mZm1wZWdfaW5jbHVkZXMvZmZtcGVnX2luY2x1ZGVzLmd5cDpmZm1wZWcuNTcuMTA3LjEwMCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ZmbXBlZy41OC4zNS4xMDAnLAotICAgICAgJ3R5cGUnOiAnPChsaWJyYXJ5KScsCi0gICAgICAnc291cmNlcyc6IFsgJzxAKGZmbXBlZ19zcGVjaWFsaXphdGlvbl9zb3VyY2VzKScgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9mZm1wZWdfaW5jbHVkZXMvZmZtcGVnX2luY2x1ZGVzLmd5cDpmZm1wZWcuNTguMzUuMTAwJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZmZtcGVnX2R5bmFtaWNfbG9hZCcsCi0gICAgICAndHlwZSc6ICc8KGxpYnJhcnkpJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2R5bmFtaWNfbG9hZF9hdWRpb19kZWNvZGVyX2ltcGwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2R5bmFtaWNfbG9hZF9kaXNwYXRjaF9pbXBsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZ19keW5hbWljX2xvYWRfdmlkZW9fZGVjb2Rlcl9pbXBsLmNjJywKLSAgICAgICAgJzxAKGZmbXBlZ19kaXNwYXRjaF9zb3VyY2VzKScsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2ZmbXBlZy41OC4zNS4xMDAnLAotICAgICAgICAnZmZtcGVnLjU3LjEwNy4xMDAnLAotICAgICAgICAnbGliYXYuNTQuMzUuMScsCi0gICAgICAgICdsaWJhdi41Ni4xLjAnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdmZm1wZWdfbGlua2VkJywKLSAgICAgICd0eXBlJzogJzwobGlicmFyeSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfbGlua2VkX2F1ZGlvX2RlY29kZXJfaW1wbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfbGlua2VkX2Rpc3BhdGNoX2ltcGwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2xpbmtlZF92aWRlb19kZWNvZGVyX2ltcGwuY2MnLAotICAgICAgICAnPEAoZmZtcGVnX2Rpc3BhdGNoX3NvdXJjZXMpJywKLSAgICAgICAgJzxAKGZmbXBlZ19zcGVjaWFsaXphdGlvbl9zb3VyY2VzKScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl9pbXBsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9mZm1wZWcvZmZtcGVnX2F1ZGlvX2RlY29kZXJfaW1wbC5jYwppbmRleCBmNGNiMzI3Li4zNGQ2NmZkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL2ZmbXBlZy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl9pbXBsLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvZmZtcGVnL2ZmbXBlZ19hdWRpb19kZWNvZGVyX2ltcGwuY2MKQEAgLTQwLDEzICs0MCwxMCBAQAogICBzd2l0Y2ggKGF1ZGlvX2NvZGVjKSB7CiAgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWM6CiAgICAgICByZXR1cm4gQVZfQ09ERUNfSURfQUFDOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhBQzNfQVVESU8pCiAgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNBYzM6CiAgICAgICByZXR1cm4ga1NiSGFzQWMzQXVkaW8gPyBBVl9DT0RFQ19JRF9BQzMgOiBBVl9DT0RFQ19JRF9OT05FOwogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjRWFjMzoKICAgICAgIHJldHVybiBrU2JIYXNBYzNBdWRpbyA/IEFWX0NPREVDX0lEX0VBQzMgOiBBVl9DT0RFQ19JRF9OT05FOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoQUMzX0FVRElPKQogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjT3B1czoKICAgICAgIHJldHVybiBBVl9DT0RFQ19JRF9PUFVTOwogICAgIGRlZmF1bHQ6CkBAIC0xNjAsMTQgKzE1NywxNCBAQAogICAgICAgICAgICAgc3RhcmJvYXJkOjptZWRpYTo6R2V0Qnl0ZXNQZXJTYW1wbGUoR2V0U2FtcGxlVHlwZSgpKSk7CiAgICAgaWYgKEdldFN0b3JhZ2VUeXBlKCkgPT0ga1NiTWVkaWFBdWRpb0ZyYW1lU3RvcmFnZVR5cGVJbnRlcmxlYXZlZCkgewogICAgICAgbWVtY3B5KGRlY29kZWRfYXVkaW8tPmJ1ZmZlcigpLCAqYXZfZnJhbWVfLT5leHRlbmRlZF9kYXRhLAotICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYXVkaW8tPnNpemUoKSk7CisgICAgICAgICAgICAgZGVjb2RlZF9hdWRpby0+c2l6ZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgU0JfRENIRUNLKEdldFN0b3JhZ2VUeXBlKCkgPT0ga1NiTWVkaWFBdWRpb0ZyYW1lU3RvcmFnZVR5cGVQbGFuYXIpOwogICAgICAgY29uc3QgaW50IHBlcl9jaGFubmVsX3NpemVfaW5fYnl0ZXMgPQogICAgICAgICAgIGRlY29kZWRfYXVkaW8tPnNpemUoKSAvIGRlY29kZWRfYXVkaW8tPmNoYW5uZWxzKCk7CiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY29kZWRfYXVkaW8tPmNoYW5uZWxzKCk7ICsraSkgewogICAgICAgICBtZW1jcHkoZGVjb2RlZF9hdWRpby0+YnVmZmVyKCkgKyBwZXJfY2hhbm5lbF9zaXplX2luX2J5dGVzICogaSwKLSAgICAgICAgICAgICAgICAgICAgIGF2X2ZyYW1lXy0+ZXh0ZW5kZWRfZGF0YVtpXSwgcGVyX2NoYW5uZWxfc2l6ZV9pbl9ieXRlcyk7CisgICAgICAgICAgICAgICBhdl9mcmFtZV8tPmV4dGVuZGVkX2RhdGFbaV0sIHBlcl9jaGFubmVsX3NpemVfaW5fYnl0ZXMpOwogICAgICAgfQogICAgIH0KICAgICBkZWNvZGVkX2F1ZGlvc18ucHVzaChkZWNvZGVkX2F1ZGlvKTsKQEAgLTI4NSwxMSArMjgyLDEwIEBACiAgICAgY29kZWNfY29udGV4dF8tPmV4dHJhZGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmZm1wZWdfLT5hdl9tYWxsb2MoCiAgICAgICAgIGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGFfc2l6ZSArIGtBdklucHV0QnVmZmVyUGFkZGluZ1NpemUpKTsKICAgICBTQl9EQ0hFQ0soY29kZWNfY29udGV4dF8tPmV4dHJhZGF0YSk7Ci0gICAgbWVtY3B5KGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGEsCi0gICAgICAgICAgICAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvXy5hdWRpb19zcGVjaWZpY19jb25maWcsCi0gICAgICAgICAgICAgICAgIGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGFfc2l6ZSk7CisgICAgbWVtY3B5KGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGEsIGF1ZGlvX3NhbXBsZV9pbmZvXy5hdWRpb19zcGVjaWZpY19jb25maWcsCisgICAgICAgICAgIGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGFfc2l6ZSk7CiAgICAgbWVtc2V0KGNvZGVjX2NvbnRleHRfLT5leHRyYWRhdGEgKyBjb2RlY19jb250ZXh0Xy0+ZXh0cmFkYXRhX3NpemUsIDAsCi0gICAgICAgICAgICAgICAga0F2SW5wdXRCdWZmZXJQYWRkaW5nU2l6ZSk7CisgICAgICAgICAgIGtBdklucHV0QnVmZmVyUGFkZGluZ1NpemUpOwogICB9CiAKICAgQVZDb2RlYyogY29kZWMgPSBmZm1wZWdfLT5hdmNvZGVjX2ZpbmRfZGVjb2Rlcihjb2RlY19jb250ZXh0Xy0+Y29kZWNfaWQpOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9pc28vZGlyZWN0b3J5X2dldF9uZXh0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9pc28vZGlyZWN0b3J5X2dldF9uZXh0LmNjCmluZGV4IDM0MjJiMjYuLmIzMWYxZDkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RpcmVjdG9yeV9nZXRfbmV4dC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL2lzby9kaXJlY3RvcnlfZ2V0X25leHQuY2MKQEAgLTE2LDE2ICsxNiw5IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2lzby9pbXBsL2RpcmVjdG9yeV9nZXRfbmV4dC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIGJvb2wgU2JEaXJlY3RvcnlHZXROZXh0KFNiRGlyZWN0b3J5IGRpcmVjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfZW50cnlfc2l6ZSkgewogICByZXR1cm4gOjpzdGFyYm9hcmQ6OnNoYXJlZDo6aXNvOjppbXBsOjpTYkRpcmVjdG9yeUdldE5leHQoCiAgICAgICBkaXJlY3RvcnksIG91dF9lbnRyeSwgb3V0X2VudHJ5X3NpemUpOwogfQotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotYm9vbCBTYkRpcmVjdG9yeUdldE5leHQoU2JEaXJlY3RvcnkgZGlyZWN0b3J5LCBTYkRpcmVjdG9yeUVudHJ5KiBvdXRfZW50cnkpIHsKLSAgcmV0dXJuIDo6c3RhcmJvYXJkOjpzaGFyZWQ6Omlzbzo6aW1wbDo6U2JEaXJlY3RvcnlHZXROZXh0KGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9lbnRyeSk7Ci19Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL2lzby9pbXBsL2RpcmVjdG9yeV9nZXRfbmV4dC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9pc28vaW1wbC9kaXJlY3RvcnlfZ2V0X25leHQuaAppbmRleCAyMWU2ODQ3Li43OTE4YzI2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL2lzby9pbXBsL2RpcmVjdG9yeV9nZXRfbmV4dC5oCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvaXNvL2ltcGwvZGlyZWN0b3J5X2dldF9uZXh0LmgKQEAgLTMzLDE1ICszMywxMiBAQAogbmFtZXNwYWNlIGltcGwgewogCiBib29sIFNiRGlyZWN0b3J5R2V0TmV4dChTYkRpcmVjdG9yeSBkaXJlY3RvcnksCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfZW50cnlfc2l6ZSkgewogICBpZiAob3V0X2VudHJ5X3NpemUgPCBrU2JGaWxlTWF4TmFtZSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgICAgICAgICAgICAgICAgICBTYkRpcmVjdG9yeUVudHJ5KiBvdXRfZW50cnkpIHsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKKwogICBpZiAoIWRpcmVjdG9yeSB8fCAhZGlyZWN0b3J5LT5kaXJlY3RvcnkgfHwgIW91dF9lbnRyeSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtNTMsMTMgKzUwLDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIHN0YXJib2FyZDo6c3RybGNweShvdXRfZW50cnksIGRpcmVudC0+ZF9uYW1lLCBvdXRfZW50cnlfc2l6ZSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIFNiU3RyaW5nQ29weShvdXRfZW50cnktPm5hbWUsIGRpcmVudC0+ZF9uYW1lLAotICAgICAgICAgICAgICAgU0JfQVJSQVlfU0laRV9JTlQob3V0X2VudHJ5LT5uYW1lKSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvbGlianBlZy9qcGVnX2ltYWdlX2RlY29kZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL2xpYmpwZWcvanBlZ19pbWFnZV9kZWNvZGVyLmNjCmluZGV4IDVhMjQwOTcuLmQ4MWE3MzUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvbGlianBlZy9qcGVnX2ltYWdlX2RlY29kZXIuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9saWJqcGVnL2pwZWdfaW1hZ2VfZGVjb2Rlci5jYwpAQCAtMTY1LDcgKzE2NSw5IEBACiAgICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDJQbGFuZVlVVk5WMTI6CiAgICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZVlVVkk0MjA6CiAgICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDNQbGFuZTEwQml0WVVWSTQyMDoKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9ERUNPREVfVEFSR0VUX0ZPUk1BVF9ZVVZJNDIwX0NPTVBBQ1RfQVBJX1ZFUlNJT04KICAgICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0M1BsYW5lMTBCaXRZVVZJNDIwQ29tcGFjdDoKKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfREVDT0RFX1RBUkdFVF9GT1JNQVRfWVVWSTQyMF9DT01QQUNUX0FQSV9WRVJTSU9OCiAgICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDFQbGFuZVVZVlk6CiAgICAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdEludmFsaWQ6CiAgICAgICAgIFNCX05PVFJFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvbGludXgvY3B1X2ZlYXR1cmVzX2dldC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvbGludXgvY3B1X2ZlYXR1cmVzX2dldC5jYwppbmRleCAzZjViOThiLi5kNzQ2NmNjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2NwdV9mZWF0dXJlc19nZXQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9jcHVfZmVhdHVyZXNfZ2V0LmNjCkBAIC02NTIsOSArNjUyLDcgQEAKICAgICBmZWF0dXJlcy0+eDg2Lmhhc190c2MgPSAoY3B1aWRfaW5mb1szXSAmICgxIDw8IDQpKSAhPSAwOwogCiAgICAgZmVhdHVyZXMtPng4Ni5oYXNfc3NlMyA9IChjcHVpZF9pbmZvWzJdICYgKDEgPDwgMCkpICE9IDA7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICBmZWF0dXJlcy0+eDg2Lmhhc19wY2xtdWxxZHEgPSAoY3B1aWRfaW5mb1syXSAmICgxIDw8IDEpKSAhPSAwOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIGZlYXR1cmVzLT54ODYuaGFzX3Nzc2UzID0gKGNwdWlkX2luZm9bMl0gJiAoMSA8PCA5KSkgIT0gMDsKICAgICBmZWF0dXJlcy0+eDg2Lmhhc19zc2U0MSA9IChjcHVpZF9pbmZvWzJdICYgKDEgPDwgMTkpKSAhPSAwOwogICAgIGZlYXR1cmVzLT54ODYuaGFzX3NzZTQyID0gKGNwdWlkX2luZm9bMl0gJiAoMSA8PCAyMCkpICE9IDA7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2Rldl9pbnB1dC9kZXZfaW5wdXQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L2Rldl9pbnB1dC9kZXZfaW5wdXQuY2MKaW5kZXggYTk4NDM3Ny4uNGEwYjU4MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9kZXZfaW5wdXQvZGV2X2lucHV0LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvbGludXgvZGV2X2lucHV0L2Rldl9pbnB1dC5jYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1dGlsaXR5PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCkBAIC03NjksNyArNzcwLDYgQEAKICAgfQogCiAgIHdoaWxlICh0cnVlKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICBzdGQ6OnZlY3RvcjxjaGFyPiBlbnRyeShrU2JGaWxlTWF4TmFtZSk7CiAKICAgICBpZiAoIVNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksIGVudHJ5LmRhdGEoKSwga1NiRmlsZU1heE5hbWUpKSB7CkBAIC03NzksMTcgKzc3OSw2IEBACiAgICAgc3RkOjpzdHJpbmcgcGF0aCA9IGtEZXZpY2VQYXRoOwogICAgIHBhdGggKz0gIi8iOwogICAgIHBhdGggKz0gZW50cnkuZGF0YSgpOwotI2Vsc2UgICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgIFNiRGlyZWN0b3J5RW50cnkgZW50cnk7Ci0KLSAgICBpZiAoIVNiRGlyZWN0b3J5R2V0TmV4dChkaXJlY3RvcnksICZlbnRyeSkpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN0ZDo6c3RyaW5nIHBhdGggPSBrRGV2aWNlUGF0aDsKLSAgICBwYXRoICs9ICIvIjsKLSAgICBwYXRoICs9IGVudHJ5Lm5hbWU7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKICAgICBpZiAoU2JEaXJlY3RvcnlDYW5PcGVuKHBhdGguY19zdHIoKSkpIHsKICAgICAgIC8vIFRoaXMgaXMgYSBzdWJkaXJlY3RvcnkuIFNraXAuCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL2xpbnV4L3BhZ2VfaW50ZXJuYWwuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MDg4MzkuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9saW51eC9wYWdlX2ludGVybmFsLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gQWRhcHRlZCBmcm9tOgotLy8gbGJzaGVsbC9zcmMvcGxhdGZvcm0vbGludXgvcG9zaXhfZW11bGF0aW9uL2xiX3NoZWxsL2xiX21lbW9yeV9wYWdlc19saW51eC5jYwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9kbG1hbGxvYy9wYWdlX2ludGVybmFsLmgiCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9hdG9taWMuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotCi1uYW1lc3BhY2UgewotCi1pbnQzMl90IHNfdHJhY2tlZF9wYWdlX2NvdW50ID0gMDsKLQotaW50MzJfdCBHZXRQYWdlQ291bnQoc2l6ZV90IGJ5dGVfY291bnQpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KAotICAgICAgc3RhcmJvYXJkOjpjb21tb246Ok1lbW9yeUFsaWduVG9QYWdlU2l6ZShieXRlX2NvdW50KSAvIGtTYk1lbW9yeVBhZ2VTaXplKTsKLX0KLQotaW50IFNiTWVtb3J5TWFwRmxhZ3NUb01tYXBQcm90ZWN0KGludCBzYl9mbGFncykgewotICBib29sIGZsYWdfc2V0ID0gZmFsc2U7Ci0gIGludCBtbWFwX3Byb3RlY3QgPSAwOwotICBpZiAoc2JfZmxhZ3MgPT0ga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkKSB7Ci0gICAgcmV0dXJuIFBST1RfTk9ORTsKLSAgfQotICBpZiAoc2JfZmxhZ3MgJiBrU2JNZW1vcnlNYXBQcm90ZWN0UmVhZCkgewotICAgIG1tYXBfcHJvdGVjdCB8PSBQUk9UX1JFQUQ7Ci0gICAgZmxhZ19zZXQgPSB0cnVlOwotICB9Ci0gIGlmIChzYl9mbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RXcml0ZSkgewotICAgIG1tYXBfcHJvdGVjdCB8PSBQUk9UX1dSSVRFOwotICAgIGZsYWdfc2V0ID0gdHJ1ZTsKLSAgfQotI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCi0gIGlmIChzYl9mbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjKSB7Ci0gICAgbW1hcF9wcm90ZWN0IHw9IFBST1RfRVhFQzsKLSAgICBmbGFnX3NldCA9IHRydWU7Ci0gIH0KLSNlbmRpZgotICBpZiAoIWZsYWdfc2V0KSB7Ci0gICAgbW1hcF9wcm90ZWN0ID0gUFJPVF9OT05FOwotICB9Ci0gIHJldHVybiBtbWFwX3Byb3RlY3Q7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lkKiBTYlBhZ2VNYXAoc2l6ZV90IHNpemVfYnl0ZXMsIGludCBmbGFncywgY29uc3QgY2hhciogdW51c2VkX25hbWUpIHsKLSAgdm9pZCogcmV0ID0gU2JQYWdlTWFwVW50cmFja2VkKHNpemVfYnl0ZXMsIGZsYWdzLCBOVUxMKTsKLSAgaWYgKHJldCAhPSBTQl9NRU1PUllfTUFQX0ZBSUxFRCkgewotICAgIFNiQXRvbWljTm9CYXJyaWVyX0luY3JlbWVudCgmc190cmFja2VkX3BhZ2VfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldFBhZ2VDb3VudChzaXplX2J5dGVzKSk7Ci0gIH0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCogU2JQYWdlTWFwVW50cmFja2VkKHNpemVfdCBzaXplX2J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1bnVzZWRfbmFtZSkgewotI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCi0gIGlmIChmbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjKSB7Ci0gICAgLy8gQ29iYWx0IGRvZXMgbm90IGFsbG93IG1hcHBpbmcgZXhlY3V0YWJsZSBtZW1vcnkgZGlyZWN0bHkuCi0gICAgcmV0dXJuIFNCX01FTU9SWV9NQVBfRkFJTEVEOwotICB9Ci0jZW5kaWYKLSAgaW50IG1tYXBfcHJvdGVjdCA9IFNiTWVtb3J5TWFwRmxhZ3NUb01tYXBQcm90ZWN0KGZsYWdzKTsKLSAgdm9pZCogbWVtID0gbW1hcCgwLCBzaXplX2J5dGVzLCBtbWFwX3Byb3RlY3QsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgcmV0dXJuIG1lbTsKLX0KLQotdm9pZCogU2JQYWdlTWFwRmlsZSh2b2lkKiBhZGRyLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAotICAgICAgICAgICAgICAgICAgICBTYk1lbW9yeU1hcEZsYWdzIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGZpbGVfb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHNpemUpIHsKLSAgaW50IGZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7Ci0gIGlmIChmZCA9PSAtMSkgewotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0KLSAgdm9pZCogcCA9IG51bGxwdHI7Ci0gIGlmIChhZGRyICE9IG51bGxwdHIpIHsKLSAgICBwID0gbW1hcChhZGRyLCBzaXplLCBTYk1lbW9yeU1hcEZsYWdzVG9NbWFwUHJvdGVjdChmbGFncyksCi0gICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLCBmaWxlX29mZnNldCk7Ci0gICAgaWYgKHAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgY2xvc2UoZmQpOwotICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHAgPSBtbWFwKGFkZHIsIHNpemUsIFNiTWVtb3J5TWFwRmxhZ3NUb01tYXBQcm90ZWN0KGZsYWdzKSwgTUFQX1BSSVZBVEUsIGZkLAotICAgICAgICAgICAgIGZpbGVfb2Zmc2V0KTsKLSAgICBpZiAocCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICBjbG9zZShmZCk7Ci0gICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gIH0KLSAgLy8gSXQgaXMgT0sgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhcyB0aGUgbWVtb3J5Ci0gIC8vIG1hcHBpbmcga2VlcHMgdGhlIGZpbGUgb3Blbi4KLSAgY2xvc2UoZmQpOwotICByZXR1cm4gcDsKLX0KLQotYm9vbCBTYlBhZ2VVbm1hcCh2b2lkKiBwdHIsIHNpemVfdCBzaXplX2J5dGVzKSB7Ci0gIFNiQXRvbWljTm9CYXJyaWVyX0luY3JlbWVudCgmc190cmFja2VkX3BhZ2VfY291bnQsIC1HZXRQYWdlQ291bnQoc2l6ZV9ieXRlcykpOwotICByZXR1cm4gU2JQYWdlVW5tYXBVbnRyYWNrZWQocHRyLCBzaXplX2J5dGVzKTsKLX0KLQotYm9vbCBTYlBhZ2VVbm1hcFVudHJhY2tlZCh2b2lkKiBwdHIsIHNpemVfdCBzaXplX2J5dGVzKSB7Ci0gIHJldHVybiBtdW5tYXAocHRyLCBzaXplX2J5dGVzKSA9PSAwOwotfQotCi1ib29sIFNiUGFnZVByb3RlY3Qodm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMsIGludCBmbGFncykgewotICBpbnQgbW1hcF9wcm90ZWN0ID0gU2JNZW1vcnlNYXBGbGFnc1RvTW1hcFByb3RlY3QoZmxhZ3MpOwotICByZXR1cm4gbXByb3RlY3QodmlydHVhbF9hZGRyZXNzLCBzaXplX2J5dGVzLCBtbWFwX3Byb3RlY3QpID09IDA7Ci19Ci0KLXNpemVfdCBTYlBhZ2VHZXRUb3RhbFBoeXNpY2FsTWVtb3J5Qnl0ZXMoKSB7Ci0gIC8vIExpbWl0IG91cnNlbHZlcyB0byByZW1haW4gc2ltaWxhciB0byBtb3JlIGNvbnN0cmFpbmVkIHBsYXRmb3Jtcy4KLSAgcmV0dXJuIDEwMjRVICogMTAyNCAqIDEwMjQ7Ci19Ci0KLWludDY0X3QgU2JQYWdlR2V0VW5hbGxvY2F0ZWRQaHlzaWNhbE1lbW9yeUJ5dGVzKCkgewotICAvLyBDb21wdXRlcyB1bmFsbG9jYXRlZCBtZW1vcnkgYXMgdGhlIHRvdGFsIHN5c3RlbSBtZW1vcnkgKG91ciBmYWtlIDFHQiBsaW1pdCkKLSAgLy8gbWludXMgdGhlICMgb2YgcmVzaWRlbnQgcGFnZXMuCi0KLSAgLy8gc3RhdG0gcHJvdmlkZXMgaW5mbyBhYm91dCBvdXIgbWVtb3J5IHVzYWdlLgotICAvLyBDb2x1bW5zIGFyZTogc2l6ZSwgcmVzaWRlbnQsIHNoYXJlLCB0ZXh0LCBsaWIsIGRhdGEsIGFuZCBkdC4KLSAgLy8gSnVzdCBjb25zaWRlciAicmVzaWRlbnQiIHBhZ2VzIGZvciBvdXIgcHVycG9zZXMuCi0gIGNvbnN0IGNoYXIqIGtTdGF0bVBhdGggPSAiL3Byb2Mvc2VsZi9zdGF0bSI7Ci0gIEZJTEUqIGYgPSBmb3BlbihrU3RhdG1QYXRoLCAiciIpOwotICBpZiAoIWYpIHsKLSAgICBTQl9ETE9HKEZBVEFMKSA8PCAiRmFpbGVkIHRvIG9wZW4gIiA8PCBrU3RhdG1QYXRoOwotICAgIHJldHVybiAwOwotICB9Ci0gIHNpemVfdCBwcm9ncmFtX3NpemUgPSAwOwotICBzaXplX3QgcmVzaWRlbnQgPSAwOwotCi0gIGZzY2FuZihmLCAiJXp1ICV6dSIsICZwcm9ncmFtX3NpemUsICZyZXNpZGVudCk7Ci0gIGZjbG9zZShmKTsKLSAgcmV0dXJuIFNiUGFnZUdldFRvdGFsUGh5c2ljYWxNZW1vcnlCeXRlcygpIC0gcmVzaWRlbnQgKiBrU2JNZW1vcnlQYWdlU2l6ZTsKLX0KLQotc2l6ZV90IFNiUGFnZUdldE1hcHBlZEJ5dGVzKCkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihTYkF0b21pY05vQmFycmllcl9Mb2FkKCZzX3RyYWNrZWRfcGFnZV9jb3VudCkgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JNZW1vcnlQYWdlU2l6ZSk7Ci19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2Vudmlyb25tZW50LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9lbnZpcm9ubWVudC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNThiMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9lbnZpcm9ubWVudC5jYwpAQCAtMCwwICsxLDI4IEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvZW52aXJvbm1lbnQuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CisKK3N0ZDo6c3RyaW5nIEdldEVudmlyb25tZW50KHN0ZDo6c3RyaW5nIG5hbWUpIHsKKyAgY29uc3QgY2hhciogZW52aXJvbm1lbnRfc3RyaW5nID0gZ2V0ZW52KG5hbWUuY19zdHIoKSk7CisgIGlmIChlbnZpcm9ubWVudF9zdHJpbmcgIT0gbnVsbHB0cikKKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoZW52aXJvbm1lbnRfc3RyaW5nKTsKKyAgcmV0dXJuICIiOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfYXRvbWljX3JlcGxhY2UuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L2ZpbGVfYXRvbWljX3JlcGxhY2UuY2MKaW5kZXggYjQ1MmY4NC4uMGI2ODUxOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9maWxlX2F0b21pY19yZXBsYWNlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvZmlsZV9hdG9taWNfcmVwbGFjZS5jYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfYXRvbWljX3JlcGxhY2Vfd3JpdGVfZmlsZS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogbmFtZXNwYWNlIHsKIAogY29uc3QgY2hhciBrVGVtcEZpbGVTdWZmaXhbXSA9ICIudGVtcCI7CkBAIC01NSw1ICs1MywzIEBACiAgIH0KICAgcmV0dXJuIHRydWU7CiB9Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X21hcC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X21hcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWIyZDVjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfbWFwLmNjCkBAIC0wLDAgKzEsMjMgQEAKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZW1vcnlfcmVwb3J0ZXJfaW50ZXJuYWwuaCIKKwordm9pZCogU2JNZW1vcnlNYXAoaW50NjRfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgdm9pZCogbWVtb3J5ID0gU2JQYWdlTWFwKHNpemVfYnl0ZXMsIGZsYWdzLCBuYW1lKTsKKyAgU2JNZW1vcnlSZXBvcnRlclJlcG9ydE1hcHBlZE1lbW9yeShtZW1vcnksIHNpemVfYnl0ZXMpOworICByZXR1cm4gbWVtb3J5OworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfbWFwcGVkX2ZpbGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9tYXBwZWRfZmlsZS5jYwppbmRleCBkOWEzZGZiLi5jMTBiYzhjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9tYXBwZWRfZmlsZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV9tYXBwZWRfZmlsZS5jYwpAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9tZW1vcnlfbWFwcGVkX2ZpbGUuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvZGxtYWxsb2MvcGFnZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvcG9zaXgvcGFnZV9pbnRlcm5hbC5oIgogCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBzaGFyZWQgewpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9tZW1vcnlfcHJvdGVjdC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3Byb3RlY3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4NjFmZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3Byb3RlY3QuY2MKQEAgLTAsMCArMSwyMSBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9wYWdlX2ludGVybmFsLmgiCisKK2Jvb2wgU2JNZW1vcnlQcm90ZWN0KHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgaW50NjRfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MpIHsKKyAgcmV0dXJuIFNiUGFnZVByb3RlY3QodmlydHVhbF9hZGRyZXNzLCBzaXplX2J5dGVzLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV91bm1hcC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvbWVtb3J5X3VubWFwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDJkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L21lbW9yeV91bm1hcC5jYwpAQCAtMCwwICsxLDIyIEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9wYWdlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVtb3J5X3JlcG9ydGVyX2ludGVybmFsLmgiCisKK2Jvb2wgU2JNZW1vcnlVbm1hcCh2b2lkKiB2aXJ0dWFsX2FkZHJlc3MsIGludDY0X3Qgc2l6ZV9ieXRlcykgeworICBTYk1lbW9yeVJlcG9ydGVyUmVwb3J0VW5tYXBwZWRNZW1vcnkodmlydHVhbF9hZGRyZXNzLCBzaXplX2J5dGVzKTsKKyAgcmV0dXJuIFNiUGFnZVVubWFwKHZpcnR1YWxfYWRkcmVzcywgc2l6ZV9ieXRlcyk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljYmI4YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvcGFnZV9pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDE0MCBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBBZGFwdGVkIGZyb206CisvLyBsYnNoZWxsL3NyYy9wbGF0Zm9ybS9saW51eC9wb3NpeF9lbXVsYXRpb24vbGJfc2hlbGwvbGJfbWVtb3J5X3BhZ2VzX2xpbnV4LmNjCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2F0b21pYy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisKK25hbWVzcGFjZSB7CisKK2ludDMyX3Qgc190cmFja2VkX3BhZ2VfY291bnQgPSAwOworCitpbnQzMl90IEdldFBhZ2VDb3VudChzaXplX3QgYnl0ZV9jb3VudCkgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oCisgICAgICBzdGFyYm9hcmQ6OmNvbW1vbjo6TWVtb3J5QWxpZ25Ub1BhZ2VTaXplKGJ5dGVfY291bnQpIC8ga1NiTWVtb3J5UGFnZVNpemUpOworfQorCitpbnQgU2JNZW1vcnlNYXBGbGFnc1RvTW1hcFByb3RlY3QoaW50IHNiX2ZsYWdzKSB7CisgIGJvb2wgZmxhZ19zZXQgPSBmYWxzZTsKKyAgaW50IG1tYXBfcHJvdGVjdCA9IDA7CisgIGlmIChzYl9mbGFncyA9PSBrU2JNZW1vcnlNYXBQcm90ZWN0UmVzZXJ2ZWQpIHsKKyAgICByZXR1cm4gUFJPVF9OT05FOworICB9CisgIGlmIChzYl9mbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RSZWFkKSB7CisgICAgbW1hcF9wcm90ZWN0IHw9IFBST1RfUkVBRDsKKyAgICBmbGFnX3NldCA9IHRydWU7CisgIH0KKyAgaWYgKHNiX2ZsYWdzICYga1NiTWVtb3J5TWFwUHJvdGVjdFdyaXRlKSB7CisgICAgbW1hcF9wcm90ZWN0IHw9IFBST1RfV1JJVEU7CisgICAgZmxhZ19zZXQgPSB0cnVlOworICB9CisjaWYgU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyAgaWYgKHNiX2ZsYWdzICYga1NiTWVtb3J5TWFwUHJvdGVjdEV4ZWMpIHsKKyAgICBtbWFwX3Byb3RlY3QgfD0gUFJPVF9FWEVDOworICAgIGZsYWdfc2V0ID0gdHJ1ZTsKKyAgfQorI2VuZGlmCisgIGlmICghZmxhZ19zZXQpIHsKKyAgICBtbWFwX3Byb3RlY3QgPSBQUk9UX05PTkU7CisgIH0KKyAgcmV0dXJuIG1tYXBfcHJvdGVjdDsKK30KKwordm9pZCogU2JQYWdlTWFwVW50cmFja2VkKHNpemVfdCBzaXplX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1bnVzZWRfbmFtZSkgeworI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisgIGlmIChmbGFncyAmIGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjKSB7CisgICAgLy8gQ29iYWx0IGRvZXMgbm90IGFsbG93IG1hcHBpbmcgZXhlY3V0YWJsZSBtZW1vcnkgZGlyZWN0bHkuCisgICAgcmV0dXJuIFNCX01FTU9SWV9NQVBfRkFJTEVEOworICB9CisjZW5kaWYKKyAgaW50IG1tYXBfcHJvdGVjdCA9IFNiTWVtb3J5TWFwRmxhZ3NUb01tYXBQcm90ZWN0KGZsYWdzKTsKKyAgdm9pZCogbWVtID0gbW1hcCgwLCBzaXplX2J5dGVzLCBtbWFwX3Byb3RlY3QsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyAgcmV0dXJuIG1lbTsKK30KKworYm9vbCBTYlBhZ2VVbm1hcFVudHJhY2tlZCh2b2lkKiBwdHIsIHNpemVfdCBzaXplX2J5dGVzKSB7CisgIHJldHVybiBtdW5tYXAocHRyLCBzaXplX2J5dGVzKSA9PSAwOworfQorCit9ICAvLyBuYW1lc3BhY2UKKwordm9pZCogU2JQYWdlTWFwKHNpemVfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIqIHVudXNlZF9uYW1lKSB7CisgIHZvaWQqIHJldCA9IFNiUGFnZU1hcFVudHJhY2tlZChzaXplX2J5dGVzLCBmbGFncywgTlVMTCk7CisgIGlmIChyZXQgIT0gU0JfTUVNT1JZX01BUF9GQUlMRUQpIHsKKyAgICBTYkF0b21pY05vQmFycmllcl9JbmNyZW1lbnQoJnNfdHJhY2tlZF9wYWdlX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRQYWdlQ291bnQoc2l6ZV9ieXRlcykpOworICB9CisgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQqIFNiUGFnZU1hcEZpbGUodm9pZCogYWRkciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgU2JNZW1vcnlNYXBGbGFncyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBmaWxlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBzaXplKSB7CisgIGludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworICBpZiAoZmQgPT0gLTEpIHsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIHZvaWQqIHAgPSBudWxscHRyOworICBpZiAoYWRkciAhPSBudWxscHRyKSB7CisgICAgcCA9IG1tYXAoYWRkciwgc2l6ZSwgU2JNZW1vcnlNYXBGbGFnc1RvTW1hcFByb3RlY3QoZmxhZ3MpLAorICAgICAgICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVELCBmZCwgZmlsZV9vZmZzZXQpOworICAgIGlmIChwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgIGNsb3NlKGZkKTsKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBwID0gbW1hcChhZGRyLCBzaXplLCBTYk1lbW9yeU1hcEZsYWdzVG9NbWFwUHJvdGVjdChmbGFncyksIE1BUF9QUklWQVRFLCBmZCwKKyAgICAgICAgICAgICBmaWxlX29mZnNldCk7CisgICAgaWYgKHAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgY2xvc2UoZmQpOworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICB9CisgIC8vIEl0IGlzIE9LIHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYXMgdGhlIG1lbW9yeQorICAvLyBtYXBwaW5nIGtlZXBzIHRoZSBmaWxlIG9wZW4uCisgIGNsb3NlKGZkKTsKKyAgcmV0dXJuIHA7Cit9CisKK2Jvb2wgU2JQYWdlVW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZV9ieXRlcykgeworICBTYkF0b21pY05vQmFycmllcl9JbmNyZW1lbnQoJnNfdHJhY2tlZF9wYWdlX2NvdW50LCAtR2V0UGFnZUNvdW50KHNpemVfYnl0ZXMpKTsKKyAgcmV0dXJuIFNiUGFnZVVubWFwVW50cmFja2VkKHB0ciwgc2l6ZV9ieXRlcyk7Cit9CisKK2Jvb2wgU2JQYWdlUHJvdGVjdCh2b2lkKiB2aXJ0dWFsX2FkZHJlc3MsIGludDY0X3Qgc2l6ZV9ieXRlcywgaW50IGZsYWdzKSB7CisgIGludCBtbWFwX3Byb3RlY3QgPSBTYk1lbW9yeU1hcEZsYWdzVG9NbWFwUHJvdGVjdChmbGFncyk7CisgIHJldHVybiBtcHJvdGVjdCh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIG1tYXBfcHJvdGVjdCkgPT0gMDsKK30KKworc2l6ZV90IFNiUGFnZUdldE1hcHBlZEJ5dGVzKCkgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihTYkF0b21pY05vQmFycmllcl9Mb2FkKCZzX3RyYWNrZWRfcGFnZV9jb3VudCkgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JNZW1vcnlQYWdlU2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvcGFnZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTM3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3BhZ2VfaW50ZXJuYWwuaApAQCAtMCwwICsxLDY0IEBACisvLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9QT1NJWF9QQUdFX0lOVEVSTkFMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfUE9TSVhfUEFHRV9JTlRFUk5BTF9IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIEFsbG9jYXRlcyB8c2l6ZV9ieXRlc3wgd29ydGggb2YgcGh5c2ljYWwgbWVtb3J5IHBhZ2VzIGFuZCBtYXBzIHRoZW0gaW50byBhbgorLy8gYXZhaWxhYmxlIHZpcnR1YWwgcmVnaW9uLiBPbiBzb21lIHBsYXRmb3JtcywgfG5hbWV8IGFwcGVhcnMgaW4gdGhlIGRlYnVnZ2VyCisvLyBhbmQgY2FuIGJlIHVwIHRvIDMyIGJ5dGVzLiBSZXR1cm5zIFNCX01FTU9SWV9NQVBfRkFJTEVEIG9uIGZhaWx1cmUsIGFzIE5VTEwKKy8vIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlLgordm9pZCogU2JQYWdlTWFwKHNpemVfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIqIG5hbWUpOworCisvLyBNZW1vcnkgbWFwcyBhIGZpbGUgdG8gdGhlIHNwZWNpZmllZCB8YWRkcnwgc3RhcnRpbmcgd2l0aCB8ZmlsZV9vZmZzZXR8IGFuZAorLy8gbWFwcGluZyB8c2l6ZXwgYnl0ZXMuIFRoZSB8YWRkcnwgc2hvdWxkIGJlIHJlc2VydmVkIGJlZm9yZSBjYWxsaW5nLiBJZgorLy8gTlVMTCB8YWRkcnwgaXMgcGFzc2VkIGEgbmV3IG1lbW9yeSBibG9jayB3b3VsZCBiZSBhbGxvY2F0ZWQgYW5kIHRoZSBhZGRyZXNzCisvLyByZXR1cm5lZC4gVGhlIGZpbGVfb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiB8a1NiTWVtb3J5UGFnZVNpemV8LgorLy8gT24gZXJyb3IgcmV0dXJucyBOVUxMLgordm9pZCogU2JQYWdlTWFwRmlsZSh2b2lkKiBhZGRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICAgICBTYk1lbW9yeU1hcEZsYWdzIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGZpbGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHNpemUpOworCisvLyBVbm1hcCB8c2l6ZV9ieXRlc3wgb2YgcGh5c2ljYWwgcGFnZXMgc3RhcnRpbmcgZnJvbSB8dmlydHVhbF9hZGRyZXNzfCwKKy8vIHJldHVybmluZyB0cnVlIG9uIHN1Y2Nlc3MuIEFmdGVyIHRoaXMsIFt2aXJ0dWFsX2FkZHJlc3MsIHZpcnR1YWxfYWRkcmVzcyArCisvLyBzaXplX2J5dGVzKSB3aWxsIG5vdCBiZSByZWFkL3dyaXRhYmxlLiBTYlVubWFwKCkgY2FuIHVubWFwIG11bHRpcGxlCisvLyBjb250aWd1b3VzIHJlZ2lvbnMgdGhhdCB3ZXJlIG1hcHBlZCB3aXRoIHNlcGFyYXRlIGNhbGxzIHRvCisvLyBTYlBhZ2VNYXAoKS4gRS5nLiBpZiBvbmUgY2FsbCB0byBTYlBhZ2VNYXAoMHgxMDAwKSByZXR1cm5zICh2b2lkKikweEEwMDAgYW5kCisvLyBhbm90aGVyIGNhbGwgdG8gU2JQYWdlTWFwKDB4MTAwMCkgcmV0dXJucyAodm9pZCopMHhCMDAwLCBTYlBhZ2VVbm1hcCgweEEwMDAsCisvLyAweDIwMDApIHNob3VsZCBmcmVlIGJvdGguCitib29sIFNiUGFnZVVubWFwKHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgc2l6ZV90IHNpemVfYnl0ZXMpOworCisvLyBDaGFuZ2UgdGhlIHByb3RlY3Rpb24gb2YgfHNpemVfYnl0ZXN8IG9mIHBoeXNpY2FsIHBhZ2VzLCBzdGFydGluZyBmcm9tCisvLyB8dmlydHVhbF9hZGRyZXNzfCwgdG8gfGZsYWdzfCwgcmV0dXJuaW5nIHx0cnVlfCBvbiBzdWNjZXNzLgorYm9vbCBTYlBhZ2VQcm90ZWN0KHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgaW50NjRfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MpOworCisvLyBSZXR1cm5zIHRoZSB0b3RhbCBhbW91bnQsIGluIGJ5dGVzLCBjdXJyZW50bHkgYWxsb2NhdGVkIHZpYSBNYXAoKS4gIFNob3VsZAorLy8gYWx3YXlzIGJlIGEgbXVsdGlwbGUgb2Yga1NiTWVtb3J5UGFnZVNpemUuCitzaXplX3QgU2JQYWdlR2V0TWFwcGVkQnl0ZXMoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1BPU0lYX1BBR0VfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2JpbmQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9iaW5kLmNjCmluZGV4IGZjYjU4NjkuLjQyZjgzMzUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2JpbmQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfYmluZC5jYwpAQCAtMjgsMjEgKzI4LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYlNvY2tldEFkZHJlc3MqIGxvY2FsX2FkZHJlc3MpIHsKICAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgewogICAgIGVycm5vID0gRUJBREY7Ci0gICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEludmFsaWQgc29ja2V0IjsKKyAgICBTQl9MT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBJbnZhbGlkIHNvY2tldCI7CiAgICAgcmV0dXJuIGtTYlNvY2tldEVycm9yRmFpbGVkOwogICB9CiAKICAgc2Jwb3NpeDo6U29ja0FkZHIgc29ja19hZGRyOwogICBpZiAoIXNvY2tfYWRkci5Gcm9tU2JTb2NrZXRBZGRyZXNzKGxvY2FsX2FkZHJlc3MpKSB7Ci0gICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEludmFsaWQgYWRkcmVzcyI7CisgICAgU0JfTE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW52YWxpZCBhZGRyZXNzIjsKICAgICByZXR1cm4gKHNvY2tldC0+ZXJyb3IgPSBzYnBvc2l4OjpUcmFuc2xhdGVTb2NrZXRFcnJubyhFSU5WQUwpKTsKICAgfQogCiAgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9mZCA+PSAwKTsKICAgaWYgKGxvY2FsX2FkZHJlc3MtPnR5cGUgIT0gc29ja2V0LT5hZGRyZXNzX3R5cGUpIHsKLSAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW5jb21wYXRpYmxlIGFkZHJlc3NlczogIgotICAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKLSAgICAgICAgICAgICAgICAgICA8PCAiLCBhcmd1bWVudCB0eXBlID0gIiA8PCBsb2NhbF9hZGRyZXNzLT50eXBlOworICAgIFNCX0xPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEluY29tcGF0aWJsZSBhZGRyZXNzZXM6ICIKKyAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKKyAgICAgICAgICAgICAgICAgIDw8ICIsIGFyZ3VtZW50IHR5cGUgPSAiIDw8IGxvY2FsX2FkZHJlc3MtPnR5cGU7CiAgICAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0gc2Jwb3NpeDo6VHJhbnNsYXRlU29ja2V0RXJybm8oRUFGTk9TVVBQT1JUKSk7CiAgIH0KIApAQCAtNjMsNyArNjMsNyBAQAogICBpbnQgcmVzdWx0ID0gSEFORExFX0VJTlRSKAogICAgICAgYmluZChzb2NrZXQtPnNvY2tldF9mZCwgc29ja19hZGRyLnNvY2thZGRyKCksIHNvY2tfYWRkci5sZW5ndGgpKTsKICAgaWYgKHJlc3VsdCAhPSAwKSB7Ci0gICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEJpbmQgZmFpbGVkLiBlcnJubz0iIDw8IGVycm5vOworICAgIFNCX0xPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEJpbmQgZmFpbGVkLiBlcnJubz0iIDw8IGVycm5vOwogICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IHNicG9zaXg6OlRyYW5zbGF0ZVNvY2tldEVycm5vKGVycm5vKSk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfY29ubmVjdC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2Nvbm5lY3QuY2MKaW5kZXggMDE3MmRhNS4uYWE0N2RlYSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfY29ubmVjdC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9jb25uZWN0LmNjCkBAIC0zMCwxNSArMzAsMTUgQEAKIAogICBzYnBvc2l4OjpTb2NrQWRkciBzb2NrX2FkZHI7CiAgIGlmICghc29ja19hZGRyLkZyb21TYlNvY2tldEFkZHJlc3MoYWRkcmVzcykpIHsKLSAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW52YWxpZCBhZGRyZXNzIjsKKyAgICBTQl9MT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBJbnZhbGlkIGFkZHJlc3MiOwogICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkKTsKICAgfQogCiAgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9mZCA+PSAwKTsKICAgaWYgKGFkZHJlc3MtPnR5cGUgIT0gc29ja2V0LT5hZGRyZXNzX3R5cGUpIHsKLSAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW5jb21wYXRpYmxlIGFkZHJlc3NlczogIgotICAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKLSAgICAgICAgICAgICAgICAgICA8PCAiLCBhcmd1bWVudCB0eXBlID0gIiA8PCBhZGRyZXNzLT50eXBlOworICAgIFNCX0xPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEluY29tcGF0aWJsZSBhZGRyZXNzZXM6ICIKKyAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKKyAgICAgICAgICAgICAgICAgIDw8ICIsIGFyZ3VtZW50IHR5cGUgPSAiIDw8IGFkZHJlc3MtPnR5cGU7CiAgICAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0RXJyb3JGYWlsZWQpOwogICB9CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgfQogCiAgIGlmIChyZXN1bHQgIT0gMCkgewotICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBjb25uZWN0IGZhaWxlZDogIiA8PCBlcnJubzsKKyAgICBTQl9MT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBjb25uZWN0IGZhaWxlZDogIiA8PCBlcnJubzsKICAgICByZXR1cm4gKHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRFcnJvckZhaWxlZCk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pbnRlcm5hbC5jYwppbmRleCAxYjE4MDA3Li4zZTYwZTViIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pbnRlcm5hbC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pbnRlcm5hbC5jYwpAQCAtMzQsNyArMzQsNyBAQAogY29uc3Qgc29ja2xlbl90IGtBZGRyZXNzU3RydWN0TGVuZ3RoSXB2NiA9CiAgICAgc3RhdGljX2Nhc3Q8c29ja2xlbl90PihzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwogI2VuZGlmCi19Cit9ICAvLyBuYW1lc3BhY2UKIAogU2JTb2NrZXRFcnJvciBUcmFuc2xhdGVTb2NrZXRFcnJubyhpbnQgZXJyb3IpIHsKICAgc3dpdGNoIChlcnJvcikgewpAQCAtNzMsOCArNzMsOCBAQAogICBpbnQgcmVzdWx0ID0KICAgICAgIHNldHNvY2tvcHQoc29ja2V0LT5zb2NrZXRfZmQsIGxldmVsLCBvcHRpb25fY29kZSwgJm9uLCBzaXplb2Yob24pKTsKICAgaWYgKHJlc3VsdCAhPSAwKSB7Ci0gICAgU0JfRExPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBzZXQgIiA8PCBvcHRpb25fbmFtZSA8PCAiIG9uIHNvY2tldCAiCi0gICAgICAgICAgICAgICAgICAgPDwgc29ja2V0LT5zb2NrZXRfZmQgPDwgIiwgZXJybm8gPSAiIDw8IGVycm5vOworICAgIFNCX0xPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBzZXQgIiA8PCBvcHRpb25fbmFtZSA8PCAiIG9uIHNvY2tldCAiCisgICAgICAgICAgICAgICAgICA8PCBzb2NrZXQtPnNvY2tldF9mZCA8PCAiLCBlcnJubyA9ICIgPDwgZXJybm87CiAgICAgc29ja2V0LT5lcnJvciA9IFRyYW5zbGF0ZVNvY2tldEVycm5vKGVycm5vKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KQEAgLTk3LDggKzk3LDggQEAKICAgaW50IHJlc3VsdCA9CiAgICAgICBzZXRzb2Nrb3B0KHNvY2tldC0+c29ja2V0X2ZkLCBsZXZlbCwgb3B0aW9uX2NvZGUsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiAgIGlmIChyZXN1bHQgIT0gMCkgewotICAgIFNCX0RMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gc2V0ICIgPDwgb3B0aW9uX25hbWUgPDwgIiBvbiBzb2NrZXQgIgotICAgICAgICAgICAgICAgICAgIDw8IHNvY2tldC0+c29ja2V0X2ZkIDw8ICIsIGVycm5vID0gIiA8PCBlcnJubzsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gc2V0ICIgPDwgb3B0aW9uX25hbWUgPDwgIiBvbiBzb2NrZXQgIgorICAgICAgICAgICAgICAgICAgPDwgc29ja2V0LT5zb2NrZXRfZmQgPDwgIiwgZXJybm8gPSAiIDw8IGVycm5vOwogICAgIHNvY2tldC0+ZXJyb3IgPSBUcmFuc2xhdGVTb2NrZXRFcnJubyhlcnJubyk7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KKy8vIENoZWNrIHRoYXQgd2UgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLgogI2lmIFNCX0hBUyhJUFY2KQogICBTQl9EQ0hFQ0sobGVuZ3RoID09IGtBZGRyZXNzU3RydWN0TGVuZ3RoSXB2NCB8fAogICAgICAgICAgICAgbGVuZ3RoID09IGtBZGRyZXNzU3RydWN0TGVuZ3RoSXB2Nik7CkBAIC0yMDksNyArMjA5LDcgQEAKICNlbmRpZgogICB9CiAKLSAgU0JfRExPRyhXQVJOSU5HKSA8PCAiVW5yZWNvZ25pemVkIGFkZHJlc3MgZmFtaWx5OiAiIDw8IGZhbWlseTsKKyAgU0JfTE9HKFdBUk5JTkcpIDw8ICJVbnJlY29nbml6ZWQgYWRkcmVzcyBmYW1pbHk6ICIgPDwgZmFtaWx5OwogICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X2lzX2lwdjZfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MKaW5kZXggOGFlOTcyYi4uOTY3NWI1MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc29ja2V0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBib29sIFNiU29ja2V0SXNJcHY2U3VwcG9ydGVkKCkgewogICByZXR1cm4gU0JfSEFTX0lQVjY7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cC5jYwppbmRleCA3MmQzNTkzLi4wZGRlNDNmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cC5jYwpAQCAtNDUsOCArNDUsOCBAQAogICBpbnQgcmVzdWx0ID0gc2V0c29ja29wdChzb2NrZXQtPnNvY2tldF9mZCwgSVBQUk9UT19JUCwgSVBfQUREX01FTUJFUlNISVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbXJlcSwgc2l6ZW9mKGltcmVxKSk7CiAgIGlmIChyZXN1bHQgIT0gMCkgewotICAgIFNCX0RMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gSVBfQUREX01FTUJFUlNISVAgb24gc29ja2V0ICIKLSAgICAgICAgICAgICAgICAgICA8PCBzb2NrZXQtPnNvY2tldF9mZCA8PCAiLCBlcnJubyA9ICIgPDwgZXJybm87CisgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIElQX0FERF9NRU1CRVJTSElQIG9uIHNvY2tldCAiCisgICAgICAgICAgICAgICAgICA8PCBzb2NrZXQtPnNvY2tldF9mZCA8PCAiLCBlcnJubyA9ICIgPDwgZXJybm87CiAgICAgc29ja2V0LT5lcnJvciA9IHNicG9zaXg6OlRyYW5zbGF0ZVNvY2tldEVycm5vKGVycm5vKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3JlY2VpdmVfZnJvbS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3JlY2VpdmVfZnJvbS5jYwppbmRleCBkZTFlMmI4Li44YzBiNzc5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9yZWNlaXZlX2Zyb20uY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfcmVjZWl2ZV9mcm9tLmNjCkBAIC00OSwxNCArNDksMTQgQEAKICAgICAgIGludCByZXN1bHQgPSBnZXRwZWVybmFtZShzb2NrZXQtPnNvY2tldF9mZCwgc29ja19hZGRyLnNvY2thZGRyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvY2tfYWRkci5sZW5ndGgpOwogICAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fCi0gICAgICAgICAgICAgICAgICAgICAgIDw8ICI6IGdldHBlZXJuYW1lIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOworICAgICAgICBTQl9MT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXworICAgICAgICAgICAgICAgICAgICAgIDw8ICI6IGdldHBlZXJuYW1lIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOwogICAgICAgICBzb2NrZXQtPmVycm9yID0gc2Jwb3NpeDo6VHJhbnNsYXRlU29ja2V0RXJybm8oZXJybm8pOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CiAKICAgICAgIGlmICghc29ja19hZGRyLlRvU2JTb2NrZXRBZGRyZXNzKG91dF9zb3VyY2UpKSB7Ci0gICAgICAgIFNCX0RMT0coRkFUQUwpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBCYWQgVENQIHNvdXJjZSBhZGRyZXNzLiI7CisgICAgICAgIFNCX0xPRyhGQVRBTCkgPDwgX19GVU5DVElPTl9fIDw8ICI6IEJhZCBUQ1Agc291cmNlIGFkZHJlc3MuIjsKICAgICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CkBAIC03MSw3ICs3MSw3IEBACiAKICAgICBpZiAoSXNSZXBvcnRhYmxlRXJybm8oZXJybm8pICYmCiAgICAgICAgIHNvY2tldC0+ZXJyb3IgIT0gc2Jwb3NpeDo6VHJhbnNsYXRlU29ja2V0RXJybm8oZXJybm8pKSB7Ci0gICAgICBTQl9ETE9HKEVSUk9SKSA8PCAicmVjdiBmYWlsZWQsIGVycm5vID0gIiA8PCBlcnJubzsKKyAgICAgIFNCX0xPRyhFUlJPUikgPDwgInJlY3YgZmFpbGVkLCBlcnJubyA9ICIgPDwgZXJybm87CiAgICAgfQogICAgIHNvY2tldC0+ZXJyb3IgPSBzYnBvc2l4OjpUcmFuc2xhdGVTb2NrZXRFcnJubyhlcnJubyk7CiAgICAgcmV0dXJuIC0xOwpAQCAtODQsNyArODQsNyBAQAogICAgIGlmIChieXRlc19yZWFkID49IDApIHsKICAgICAgIGlmIChvdXRfc291cmNlKSB7CiAgICAgICAgIGlmICghc29ja19hZGRyLlRvU2JTb2NrZXRBZGRyZXNzKG91dF9zb3VyY2UpKSB7Ci0gICAgICAgICAgU0JfRExPRyhGQVRBTCkgPDwgX19GVU5DVElPTl9fIDw8ICI6IEJhZCBVRFAgc291cmNlIGFkZHJlc3MuIjsKKyAgICAgICAgICBTQl9MT0coRkFUQUwpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBCYWQgVURQIHNvdXJjZSBhZGRyZXNzLiI7CiAgICAgICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOwogICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtOTYsNyArOTYsNyBAQAogCiAgICAgaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFV09VTERCTE9DSyAmJgogICAgICAgICBzb2NrZXQtPmVycm9yICE9IHNicG9zaXg6OlRyYW5zbGF0ZVNvY2tldEVycm5vKGVycm5vKSkgewotICAgICAgU0JfRExPRyhFUlJPUikgPDwgInJlY3Zmcm9tIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAicmVjdmZyb20gZmFpbGVkLCBlcnJubyA9ICIgPDwgZXJybm87CiAgICAgfQogICAgIHNvY2tldC0+ZXJyb3IgPSBzYnBvc2l4OjpUcmFuc2xhdGVTb2NrZXRFcnJubyhlcnJubyk7CiAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2VuZF90by5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvc29ja2V0X3NlbmRfdG8uY2MKaW5kZXggY2RlZTQ1OC4uM2U4MWFlMCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC9zb2NrZXRfc2VuZF90by5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9zZW5kX3RvLmNjCkBAIC0zOSw3ICszOSw3IEBACiAgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9mZCA+PSAwKTsKICAgaWYgKHNvY2tldC0+cHJvdG9jb2wgPT0ga1NiU29ja2V0UHJvdG9jb2xUY3ApIHsKICAgICBpZiAoZGVzdGluYXRpb24pIHsKLSAgICAgIFNCX0RMT0coRkFUQUwpIDw8ICJEZXN0aW5hdGlvbiBwYXNzZWQgdG8gVENQIHNlbmQuIjsKKyAgICAgIFNCX0xPRyhGQVRBTCkgPDwgIkRlc3RpbmF0aW9uIHBhc3NlZCB0byBUQ1Agc2VuZC4iOwogICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTUyLDEzICs1MiwxMyBAQAogICAgIH0KIAogICAgIGlmIChlcnJubyAhPSBFQUdBSU4gJiYgZXJybm8gIT0gRVdPVUxEQkxPQ0spIHsKLSAgICAgIFNCX0RMT0coRVJST1IpIDw8ICJzZW5kIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAic2VuZCBmYWlsZWQsIGVycm5vID0gIiA8PCBlcnJubzsKICAgICB9CiAgICAgc29ja2V0LT5lcnJvciA9IHNicG9zaXg6OlRyYW5zbGF0ZVNvY2tldEVycm5vKGVycm5vKTsKICAgICByZXR1cm4gLTE7CiAgIH0gZWxzZSBpZiAoc29ja2V0LT5wcm90b2NvbCA9PSBrU2JTb2NrZXRQcm90b2NvbFVkcCkgewogICAgIGlmICghZGVzdGluYXRpb24pIHsKLSAgICAgIFNCX0RMT0coRkFUQUwpIDw8ICJObyBkZXN0aW5hdGlvbiBwYXNzZWQgdG8gVURQIHNlbmQuIjsKKyAgICAgIFNCX0xPRyhGQVRBTCkgPDwgIk5vIGRlc3RpbmF0aW9uIHBhc3NlZCB0byBVRFAgc2VuZC4iOwogICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY4LDcgKzY4LDcgQEAKICAgICBzb2NrbGVuX3Qgc29ja2FkZHJfbGVuZ3RoID0gMDsKICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgIGlmICghc29ja19hZGRyLkZyb21TYlNvY2tldEFkZHJlc3MoZGVzdGluYXRpb24pKSB7Ci0gICAgICAgIFNCX0RMT0coRkFUQUwpIDw8ICJJbnZhbGlkIGRlc3RpbmF0aW9uIHBhc3NlZCB0byBVRFAgc2VuZC4iOworICAgICAgICBTQl9MT0coRkFUQUwpIDw8ICJJbnZhbGlkIGRlc3RpbmF0aW9uIHBhc3NlZCB0byBVRFAgc2VuZC4iOwogICAgICAgICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0RXJyb3JGYWlsZWQ7CiAgICAgICAgIHJldHVybiAtMTsKICAgICAgIH0KQEAgLTg0LDcgKzg0LDcgQEAKICAgICB9CiAKICAgICBpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVXT1VMREJMT0NLKSB7Ci0gICAgICBTQl9ETE9HKEVSUk9SKSA8PCAic2VuZHRvIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAic2VuZHRvIGZhaWxlZCwgZXJybm8gPSAiIDw8IGVycm5vOwogICAgIH0KICAgICBzb2NrZXQtPmVycm9yID0gc2Jwb3NpeDo6VHJhbnNsYXRlU29ja2V0RXJybm8oZXJybm8pOwogICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcG9zaXgvdGltZV9pc190aW1lX3RocmVhZF9ub3dfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2lzX3RpbWVfdGhyZWFkX25vd19zdXBwb3J0ZWQuY2MKaW5kZXggYTk3ZDJjYy4uYjQ1ZTExNiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2lzX3RpbWVfdGhyZWFkX25vd19zdXBwb3J0ZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wb3NpeC90aW1lX2lzX3RpbWVfdGhyZWFkX25vd19zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYlRpbWVJc1RpbWVUaHJlYWROb3dTdXBwb3J0ZWQoKSB7CiAgIHJldHVybiB0cnVlOwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9hY3F1aXJlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2FjcXVpcmUuY2MKaW5kZXggMzI2NmVkOS4uY2Y5NTFlNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2FjcXVpcmUuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2FjcXVpcmUuY2MKQEAgLTI5LDEyICsyOSwxMSBAQAogICAgIHJldHVybiBrU2JNdXRleERlc3Ryb3llZDsKICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFFbnN1cmVJbml0aWFsaXplZCgmKFNCX0lOVEVSTkFMX01VVEVYKG11dGV4KS0+aW5pdGlhbGl6ZWRfc3RhdGUpKSkgewogICAgICpTQl9QVEhSRUFEX0lOVEVSTkFMX01VVEVYKG11dGV4KSA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiAgICAgU2V0SW5pdGlhbGl6ZWQoJihTQl9JTlRFUk5BTF9NVVRFWChtdXRleCktPmluaXRpYWxpemVkX3N0YXRlKSk7CiAgIH0KLSNlbmRpZgorCiAjaWYgU0JfRU5BQkxFX0NPTkNVUlJFTkNZX0RFQlVHCiAgIHN0YXJib2FyZDo6ZXhwZXJpbWVudGFsOjpTY29wZWRNdXRleFdhaXRUcmFja2VyIHRyYWNrZXIobXV0ZXgpOwogICBpZiAodHJhY2tlci5hY3F1aXJlZCgpKSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfYWNxdWlyZV90cnkuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfYWNxdWlyZV90cnkuY2MKaW5kZXggOGM1YzI0MS4uZjlkODZhMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2FjcXVpcmVfdHJ5LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9hY3F1aXJlX3RyeS5jYwpAQCAtMjgsMTIgKzI4LDEwIEBACiAgICAgcmV0dXJuIGtTYk11dGV4RGVzdHJveWVkOwogICB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBpZiAoIUVuc3VyZUluaXRpYWxpemVkKCYoU0JfSU5URVJOQUxfTVVURVgobXV0ZXgpLT5pbml0aWFsaXplZF9zdGF0ZSkpKSB7CiAgICAgKlNCX1BUSFJFQURfSU5URVJOQUxfTVVURVgobXV0ZXgpID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKICAgICBTZXRJbml0aWFsaXplZCgmKFNCX0lOVEVSTkFMX01VVEVYKG11dGV4KS0+aW5pdGlhbGl6ZWRfc3RhdGUpKTsKICAgfQotI2VuZGlmCiAKICAgaW50IHJlc3VsdCA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhTQl9QVEhSRUFEX0lOVEVSTkFMX01VVEVYKG11dGV4KSk7CiAgIGlmIChJc1N1Y2Nlc3MocmVzdWx0KSkgewpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9jcmVhdGUuY2MKaW5kZXggNTViNmE5NC4uNzQ0Y2FmNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2NyZWF0ZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfY3JlYXRlLmNjCkBAIC0yNCwxNiArMjQsMTIgQEAKIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OlNldEluaXRpYWxpemVkOwogCiBib29sIFNiTXV0ZXhDcmVhdGUoU2JNdXRleCogbXV0ZXgpIHsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICBTQl9DT01QSUxFX0FTU0VSVChzaXplb2YoU2JNdXRleCkgPj0gc2l6ZW9mKFNiTXV0ZXhQcml2YXRlKSwKICAgICAgICAgICAgICAgICAgICAgc2JfbXV0ZXhfcHJpdmF0ZV9sYXJnZXJfdGhhbl9zYl9tdXRleCk7Ci0jZW5kaWYKICAgaWYgKCFtdXRleCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgU2V0SW5pdGlhbGl6ZWQoJihTQl9JTlRFUk5BTF9NVVRFWChtdXRleCktPmluaXRpYWxpemVkX3N0YXRlKSk7Ci0jZW5kaWYKICAgcmV0dXJuIElzU3VjY2VzcyhwdGhyZWFkX211dGV4X2luaXQoU0JfUFRIUkVBRF9JTlRFUk5BTF9NVVRFWChtdXRleCksIE5VTEwpKTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9kZXN0cm95LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2Rlc3Ryb3kuY2MKaW5kZXggZjJkMGIxNS4uM2ZiNTNmNSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2Rlc3Ryb3kuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL211dGV4X2Rlc3Ryb3kuY2MKQEAgLTI5LDI1ICsyOSwxMiBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFJc0luaXRpYWxpemVkKCYoU0JfSU5URVJOQUxfTVVURVgobXV0ZXgpLT5pbml0aWFsaXplZF9zdGF0ZSkpKSB7CiAgICAgLy8gSWYgdGhlIG11dGV4IGlzIG5vdCBpbml0aWFsaXplZCB0aGVyZSBpcyBub3RoaW5nIHRvIGRlc3Ryb3kuCiAgICAgcmV0dXJuIHRydWU7CiAgIH0KLSNlbmRpZgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgLy8gQm90aCB0cnlpbmcgdG8gcmVjdXJzaXZlbHkgYWNxdWlyZSBhIG11dGV4IHRoYXQgaXMgbG9ja2VkIGJ5IHRoZSBjYWxsaW5nCiAgIC8vIHRocmVhZCwgYXMgd2VsbCBhcyBkZWxldGluZyBhIGxvY2tlZCBtdXRleCwgcmVzdWx0IGluIHVuZGVmaW5lZCBiZWhhdmlvci4KICAgcmV0dXJuIElzU3VjY2VzcyhwdGhyZWFkX211dGV4X2Rlc3Ryb3koU0JfUFRIUkVBRF9JTlRFUk5BTF9NVVRFWChtdXRleCkpKTsKLSNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgLy8gRGVzdHJveWluZyBhIGxvY2tlZCBtdXRleCBpcyB1bmRlZmluZWQsIHNvIGZhaWwgaWYgdGhlIG11dGV4IGlzCi0gIC8vIGFscmVhZHkgbG9ja2VkLAotICBpZiAoIUlzU3VjY2VzcyhwdGhyZWFkX211dGV4X3RyeWxvY2soU0JfUFRIUkVBRF9JTlRFUk5BTF9NVVRFWChtdXRleCkpKSkgewotICAgIFNCX0xPRyhFUlJPUikgPDwgIlRyeWluZyB0byBkZXN0cm95IGEgbG9ja2VkIG11dGV4IjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIElzU3VjY2VzcyhwdGhyZWFkX211dGV4X3VubG9jayhTQl9QVEhSRUFEX0lOVEVSTkFMX01VVEVYKG11dGV4KSkpICYmCi0gICAgICAgICBJc1N1Y2Nlc3MocHRocmVhZF9tdXRleF9kZXN0cm95KFNCX1BUSFJFQURfSU5URVJOQUxfTVVURVgobXV0ZXgpKSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvbXV0ZXhfcmVsZWFzZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9yZWxlYXNlLmNjCmluZGV4IGQyY2UxODMuLjg2YjMxOGYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9yZWxlYXNlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9tdXRleF9yZWxlYXNlLmNjCkBAIC0yNywxMiArMjcsOSBAQAogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFJc0luaXRpYWxpemVkKCYoU0JfSU5URVJOQUxfTVVURVgobXV0ZXgpLT5pbml0aWFsaXplZF9zdGF0ZSkpKSB7CiAgICAgLy8gSWYgdGhlIG11dGV4IGlzIG5vdCBpbml0aWFsaXplZCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbGVhc2UuCiAgICAgcmV0dXJuIHRydWU7CiAgIH0KLSNlbmRpZgotCiAgIHJldHVybiBJc1N1Y2Nlc3MocHRocmVhZF9tdXRleF91bmxvY2soU0JfUFRIUkVBRF9JTlRFUk5BTF9NVVRFWChtdXRleCkpKTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC9vbmNlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL29uY2UuY2MKaW5kZXggZTNhODk4ZS4uY2I2ZTc0MyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL29uY2UuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL29uY2UuY2MKQEAgLTI0LDIzICsyNCwxOSBAQAogdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6U2V0SW5pdGlhbGl6ZWQ7CiAKIGJvb2wgU2JPbmNlKFNiT25jZUNvbnRyb2wqIG9uY2VfY29udHJvbCwgU2JPbmNlSW5pdFJvdXRpbmUgaW5pdF9yb3V0aW5lKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgU0JfQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNiT25jZUNvbnRyb2wpID49IHNpemVvZihTYk9uY2VDb250cm9sUHJpdmF0ZSksCiAgICAgICAgICAgICAgICAgICAgIHNiX29uY2VfY29udHJvbF9wcml2YXRlX2xhcmdlcl90aGFuX3NiX29uY2VfY29udHJvbCk7Ci0jZW5kaWYKICAgaWYgKG9uY2VfY29udHJvbCA9PSBOVUxMKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAgIGlmIChpbml0X3JvdXRpbmUgPT0gTlVMTCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmICghRW5zdXJlSW5pdGlhbGl6ZWQoCiAgICAgICAgICAgJihTQl9JTlRFUk5BTF9PTkNFKG9uY2VfY29udHJvbCktPmluaXRpYWxpemVkX3N0YXRlKSkpIHsKICAgICAqU0JfUFRIUkVBRF9JTlRFUk5BTF9PTkNFKG9uY2VfY29udHJvbCkgPSBQVEhSRUFEX09OQ0VfSU5JVDsKICAgICBTZXRJbml0aWFsaXplZCgmKFNCX0lOVEVSTkFMX09OQ0Uob25jZV9jb250cm9sKS0+aW5pdGlhbGl6ZWRfc3RhdGUpKTsKICAgfQotI2VuZGlmCiAKICAgcmV0dXJuIHB0aHJlYWRfb25jZShTQl9QVEhSRUFEX0lOVEVSTkFMX09OQ0Uob25jZV9jb250cm9sKSwgaW5pdF9yb3V0aW5lKSA9PQogICAgICAgICAgMDsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY29udGV4dF9nZXRfcG9pbnRlci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY29udGV4dF9nZXRfcG9pbnRlci5jYwppbmRleCA4MGU5NGEwLi4xNzQzNTViIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdGhyZWFkX2NvbnRleHRfZ2V0X3BvaW50ZXIuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jb250ZXh0X2dldF9wb2ludGVyLmNjCkBAIC0zOSwxMSArMzksOSBAQAogICAgICAgKm91dF92YWx1ZSA9IGNvbnRleHQtPmZwXzsKICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICBjYXNlIGtTYlRocmVhZENvbnRleHRMaW5rUmVnaXN0ZXI6CiAgICAgICAqb3V0X3ZhbHVlID0gY29udGV4dC0+bHJfOwogICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKICAgICBkZWZhdWx0OgogICAgICAgU0JfTk9USU1QTEVNRU5URUQoKSA8PCAiU2JUaHJlYWRDb250ZXh0R2V0UG9pbnRlciBub3QgaW1wbGVtZW50ZWQgZm9yICIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90aHJlYWRfY3JlYXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGUuY2MKaW5kZXggNWRiNWEyMS4uYmFlYzM3ZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGUuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3RocmVhZF9jcmVhdGUuY2MKQEAgLTI3LDE0ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIHNoYXJlZCB7Ci1uYW1lc3BhY2UgcHRocmVhZCB7Ci0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyICYmICFTQl9IQVMoVEhSRUFEX1BSSU9SSVRZX1NVUFBPUlQpCi0vLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpdGhvdXQgdGhyZWFkIHByaW9yaXR5IHN1cHBvcnQKLXZvaWQgVGhyZWFkU2V0UHJpb3JpdHkoU2JUaHJlYWRQcmlvcml0eSBwcmlvcml0eSkge30KLSNlbmRpZgotCi19ICAvLyBuYW1lc3BhY2UgcHRocmVhZAorbmFtZXNwYWNlIHB0aHJlYWQge30gIC8vIG5hbWVzcGFjZSBwdGhyZWFkCiB9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90eXBlc19pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX2ludGVybmFsLmgKaW5kZXggMDY3MGJhZi4uMzAzMGQ2ZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX2ludGVybmFsLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX2ludGVybmFsLmgKQEAgLTExLDEzICsxMSwxMCBAQAogLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25fcHVibGljLmgiCi0KICNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9QVEhSRUFEX1RZUEVTX0lOVEVSTkFMX0hfCiAjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfUFRIUkVBRF9UWVBFU19JTlRFUk5BTF9IXwogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICNkZWZpbmUgU0JfSU5URVJOQUxfTVVURVgobXV0ZXhfdmFyKSBcCiAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2JNdXRleFByaXZhdGUqPigobXV0ZXhfdmFyKS0+bXV0ZXhfYnVmZmVyKQogI2RlZmluZSBTQl9QVEhSRUFEX0lOVEVSTkFMX01VVEVYKG11dGV4X3ZhcikgXApAQCAtMzMsMTUgKzMwLDYgQEAKICNkZWZpbmUgU0JfUFRIUkVBRF9JTlRFUk5BTF9DT05ESVRJT04oY29uZGl0aW9uX3ZhcikgXAogICByZWludGVycHJldF9jYXN0PFNiQ29uZGl0aW9uVmFyaWFibGVQcml2YXRlKj4oICAgICBcCiAgICAgICAoY29uZGl0aW9uX3ZhciktPmNvbmRpdGlvbl9idWZmZXIpCi0jZWxzZQotI2RlZmluZSBTQl9QVEhSRUFEX0lOVEVSTkFMX01VVEVYKG11dGV4X3ZhcikgKG11dGV4X3ZhcikKLSNkZWZpbmUgU0JfUFRIUkVBRF9JTlRFUk5BTF9PTkNFKG9uY2VfdmFyKSAob25jZV92YXIpCi0jZGVmaW5lIFNCX1BUSFJFQURfSU5URVJOQUxfVEhSRUFEKHRocmVhZCkgKHRocmVhZCkKLSNkZWZpbmUgU0JfUFRIUkVBRF9JTlRFUk5BTF9USFJFQURfUFRSKHRocmVhZCkgXAotICByZWludGVycHJldF9jYXN0PHB0aHJlYWRfdCo+KCYodGhyZWFkKSkKLSNkZWZpbmUgU0JfVEhSRUFEKHRocmVhZCkgKHRocmVhZCkKLSNkZWZpbmUgU0JfUFRIUkVBRF9JTlRFUk5BTF9DT05ESVRJT04oY29uZGl0aW9uX3ZhcikgKGNvbmRpdGlvbl92YXIpCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKIC8vIFRyYW5zcGFyZW50IENvbmRpdGlvbiBWYXJpYWJsZSBoYW5kbGUuCiAvLyBJdCBpcyBjdXN0b21pemVkIGZyb20gdGhlIHBsYWluIHB0aHJlYWRfY29udF90IG9iamVjdCBiZWNhdXNlIHdlCkBAIC01Miw3ICs0MCw2IEBACiAgIEluaXRpYWxpemVkU3RhdGUgaW5pdGlhbGl6ZWRfc3RhdGU7CiAgIHB0aHJlYWRfY29uZF90IGNvbmRpdGlvbjsKIH0gU2JDb25kaXRpb25WYXJpYWJsZVByaXZhdGU7Ci0KIC8vIFdyYXBwaW5nIHB0aHJlYWRfbXV0ZXhfdCB0byBhZGQgaW5pdGlhbGl6YXRpb24gc3RhdGUKIC8vIHdoaWNoIGFsbG93cyBmb3IgbGF6eSBpbml0aWFsaXphdGlvbiB0byBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLgogLy8gTk9URTogVGhlIGFjdHVhbCB2YWx1ZSBvZiBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLgpAQCAtNjAsNyArNDcsNiBAQAogICBJbml0aWFsaXplZFN0YXRlIGluaXRpYWxpemVkX3N0YXRlOwogICBwdGhyZWFkX211dGV4X3QgbXV0ZXg7CiB9IFNiTXV0ZXhQcml2YXRlOwotCiAvLyBXcmFwcGluZyBwdGhyZWFkX29uY2VfdCB0byBhZGQgaW5pdGlhbGl6YXRpb24gc3RhdGUKIC8vIHdoaWNoIGFsbG93cyBmb3IgbGF6eSBpbml0aWFsaXphdGlvbiB0byBQVEhSRUFEX09OQ0VfSU5JVC4KIC8vIE5PVEU6IFRoZSBhY3R1YWwgdmFsdWUgb2YgUFRIUkVBRF9PTkNFX0lOSVQuCkBAIC02OCw1ICs1NCw0IEBACiAgIEluaXRpYWxpemVkU3RhdGUgaW5pdGlhbGl6ZWRfc3RhdGU7CiAgIHB0aHJlYWRfb25jZV90IG9uY2U7CiB9IFNiT25jZUNvbnRyb2xQcml2YXRlOwotCiAjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfUFRIUkVBRF9UWVBFU19JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3NoYXJlZC9wdGhyZWFkL3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRlZTcxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvcHRocmVhZC90eXBlc19wdWJsaWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLy8gRGVmaW5lcyB0aGUgcHRocmVhZCB2ZXJzaW9ucyBvZiBTdGFyYm9hcmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHRoZQotLy8gc3RhdGljIGluaXRpYWxpemVycyBmb3IgdGhvc2UgcHJpbWl0aXZlcy4KLQotI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1BUSFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfUFRIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jZXJyb3IgIlRoZSBzdGFyYm9hcmQvc2hhcmVkL3B0aHJlYWQvdHlwZXNfcHVibGljLmggaXMgZGVwcmVjYXRlZC4iCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25fcHVibGljLmgiCi0KLS8vIC0tLSBTYkNvbmRpdGlvblZhcmlhYmxlIC0tLQotCi0vLyBUcmFuc3BhcmVudCBDb25kaXRpb24gVmFyaWFibGUgaGFuZGxlLgotLy8gSXQgaXMgY3VzdG9taXplZCBmcm9tIHRoZSBwbGFpbiBwdGhyZWFkX2NvbnRfdCBvYmplY3QgYmVjYXVzZSB3ZQotLy8gbmVlZCB0byBlbnN1cmUgdGhhdCBlYWNoIGNvbmRpdGlvbiB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byB1c2UKLS8vIENMT0NLX01PTk9UT05JQywgd2hpY2ggaXMgbm90IHRoZSBkZWZhdWx0IChhbmQgdGhlIGRlZmF1bHQgaXMgdXNlZAotLy8gd2hlbiBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIgaXMgc2V0KS4KLXR5cGVkZWYgc3RydWN0IFNiQ29uZGl0aW9uVmFyaWFibGUgewotICBJbml0aWFsaXplZFN0YXRlIGluaXRpYWxpemVkX3N0YXRlOwotICBwdGhyZWFkX2NvbmRfdCBjb25kaXRpb247Ci19IFNiQ29uZGl0aW9uVmFyaWFibGU7Ci0KLS8vIENvbmRpdGlvbiBWYXJpYWJsZSBzdGF0aWMgaW5pdGlhbGl6ZXIuCi0jZGVmaW5lIFNCX0NPTkRJVElPTl9WQVJJQUJMRV9JTklUSUFMSVpFUiBcCi0gIHsgSU5JVElBTElaRURfU1RBVEVfVU5JTklUSUFMSVpFRCwgMCB9Ci0KLS8vIC0tLSBTYk11dGV4IC0tLQotCi0vLyBUcmFuc3BhcmVudCBNdXRleCBoYW5kbGUuCi10eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBTYk11dGV4OwotCi0vLyBNdXRleCBzdGF0aWMgaW5pdGlhbGl6ZXIuCi0jZGVmaW5lIFNCX01VVEVYX0lOSVRJQUxJWkVSIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKLQotLy8gLS0tIFNiT25jZSAtLS0KLQotLy8gVHJhbnNwYXJlbnQgT25jZSBjb250cm9sIGhhbmRsZS4KLXR5cGVkZWYgcHRocmVhZF9vbmNlX3QgU2JPbmNlQ29udHJvbDsKLQotLy8gT25jZSBzdGF0aWMgaW5pdGlhbGl6ZXIuCi0jZGVmaW5lIFNCX09OQ0VfSU5JVElBTElaRVIgUFRIUkVBRF9PTkNFX0lOSVQKLQotLy8gLS0tIFNiVGhyZWFkIC0tLQotCi0vLyBUcmFuc3BhcmVudCBwdGhyZWFkIGhhbmRsZS4KLXR5cGVkZWYgcHRocmVhZF90IFNiVGhyZWFkOwotCi0vLyBXZWxsLWRlZmluZWQgY29uc3RhbnQgdmFsdWUgdG8gbWVhbiAibm8gdGhyZWFkIGhhbmRsZS4iCi0jZGVmaW5lIGtTYlRocmVhZEludmFsaWQgKFNiVGhyZWFkKS0xCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9QVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9wdWxzZS9wdWxzZV9hdWRpb19zaW5rX3R5cGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3B1bHNlL3B1bHNlX2F1ZGlvX3NpbmtfdHlwZS5jYwppbmRleCA1Yzc0NDQyLi4xYjUxYzE4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3B1bHNlL3B1bHNlX2F1ZGlvX3NpbmtfdHlwZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3B1bHNlL3B1bHNlX2F1ZGlvX3NpbmtfdHlwZS5jYwpAQCAtMTMyLDkgKzEzMiw3IEBACiAgICAgICBpbnQgZnJhbWVzX3Blcl9jaGFubmVsLAogICAgICAgU2JBdWRpb1NpbmtVcGRhdGVTb3VyY2VTdGF0dXNGdW5jIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsCiAgICAgICBTYkF1ZGlvU2lua1ByaXZhdGU6OkNvbnN1bWVGcmFtZXNGdW5jIGNvbnN1bWVfZnJhbWVzX2Z1bmMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6RXJyb3JGdW5jIGVycm9yX2Z1bmMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICB2b2lkKiBjb250ZXh0KSBvdmVycmlkZTsKICAgYm9vbCBJc1ZhbGlkKFNiQXVkaW9TaW5rIGF1ZGlvX3NpbmspIG92ZXJyaWRlIHsKICAgICByZXR1cm4gYXVkaW9fc2luayAhPSBrU2JBdWRpb1NpbmtJbnZhbGlkICYmIGF1ZGlvX3NpbmstPklzVHlwZSh0aGlzKTsKQEAgLTM5OSw5ICszOTcsNyBAQAogICAgIGludCBmcmFtZXNfcGVyX2NoYW5uZWwsCiAgICAgU2JBdWRpb1NpbmtVcGRhdGVTb3VyY2VTdGF0dXNGdW5jIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsCiAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpDb25zdW1lRnJhbWVzRnVuYyBjb25zdW1lX2ZyYW1lc19mdW5jLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpFcnJvckZ1bmMgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICB2b2lkKiBjb250ZXh0KSB7CiAgIFB1bHNlQXVkaW9TaW5rKiBhdWRpb19zaW5rID0gbmV3IFB1bHNlQXVkaW9TaW5rKAogICAgICAgdGhpcywgY2hhbm5lbHMsIHNhbXBsaW5nX2ZyZXF1ZW5jeV9oeiwgYXVkaW9fc2FtcGxlX3R5cGUsIGZyYW1lX2J1ZmZlcnMsCkBAIC00NDIsNyArNDM4LDcgQEAKICAgaWYgKCFtYWlubG9vcF8pIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSAgLy8gQ3JlYXRlIHB1bHNlIGNvbnRleHQuCisvLyBDcmVhdGUgcHVsc2UgY29udGV4dC4KICNpZiBIQVNfTEVBS19TQU5JVElaRVIKICAgX19sc2FuX2Rpc2FibGUoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zcGVlY2hkL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zcGVlY2hkL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjCmluZGV4IGVlN2YxYmUuLmRmYmEzM2UgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3BlZWNoZC9zcGVlY2hfc3ludGhlc2lzX2lzX3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3NwZWVjaGQvc3BlZWNoX3N5bnRoZXNpc19pc19zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3N5bnRoZXNpcy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYlNwZWVjaFN5bnRoZXNpc0lzU3VwcG9ydGVkKCkgewogICByZXR1cm4gdHJ1ZTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmNjCmluZGV4IDJkMzRlMTAuLjY1YmM3YWIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmNjCkBAIC02MDAsNiArNjAwLDcgQEAKICAgICBzdGFydF9kYXRhLT5hcmd1bWVudF92YWx1ZXNbaV0gPSBjb25zdF9jYXN0PGNoYXIqPihhcmdzW2ldLmNfc3RyKCkpOwogICB9CiAgIHN0YXJ0X2RhdGEtPmxpbmsgPSBzdGFydF9saW5rXzsKKwogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIHJldHVybiBuZXcgRXZlbnQodHlwZSwgdGltZXN0YW1wLCBzdGFydF9kYXRhLCAmRGVsZXRlU3RhcnREYXRhKTsKICNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmgKaW5kZXggNjI4MWYwMC4uZWFhOGY2YyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uaAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oCkBAIC0xNDUsOCArMTQ1LDEwIEBACiAgIC8vIGRlbGV0ZWQuCiAgIHN0cnVjdCBFdmVudCB7CiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKLSAgICAgRXZlbnQoU2JFdmVudFR5cGUgdHlwZSwgU2JUaW1lTW9ub3RvbmljIHRpbWVzdGFtcCwKLSAgICAgICAgICAgdm9pZCogZGF0YSwgU2JFdmVudERhdGFEZXN0cnVjdG9yIGRlc3RydWN0b3IpCisgICAgRXZlbnQoU2JFdmVudFR5cGUgdHlwZSwKKyAgICAgICAgICBTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wLAorICAgICAgICAgIHZvaWQqIGRhdGEsCisgICAgICAgICAgU2JFdmVudERhdGFEZXN0cnVjdG9yIGRlc3RydWN0b3IpCiAgICAgICAgIDogZXZlbnQobmV3IFNiRXZlbnQoKSksIGRlc3RydWN0b3IoZGVzdHJ1Y3RvciksIGVycm9yX2xldmVsKDApIHsKICAgICAgIGV2ZW50LT50eXBlID0gdHlwZTsKICAgICAgIGV2ZW50LT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CkBAIC0xNjgsNyArMTcwLDcgQEAKICAgICAgIGV2ZW50LT50aW1lc3RhbXAgPSBTYlRpbWVHZXRNb25vdG9uaWNOb3coKTsKICAgICAgIGV2ZW50LT5kYXRhID0gZGF0YTsKICAgICB9Ci0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgICBFdmVudChTYkV2ZW50VHlwZSB0eXBlLCB2b2lkKiBkYXRhLCBTYkV2ZW50RGF0YURlc3RydWN0b3IgZGVzdHJ1Y3RvcikKICAgICAgICAgOiBldmVudChuZXcgU2JFdmVudCgpKSwgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yKSwgZXJyb3JfbGV2ZWwoMCkgewogICAgICAgZXZlbnQtPnR5cGUgPSB0eXBlOwpAQCAtNDczLDExICs0NzUsMTEgQEAKICAgLy8gc29tZSBwb2ludC4KICAgdmlydHVhbCBib29sIElzU3RhcnRJbW1lZGlhdGUoKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaGVzIGEgU3RhcnQgZXZlbnQgdG8gdGhlIHN5c3RlbSBldmVudCBoYW5kbGVyLiBNdXN0IGJlCi0gIC8vIGNhbGxlZCBvbiB0aGUgbWFpbiBkaXNwYXRjaCB0aHJlYWQuCisvLyBTeW5jaHJvbm91c2x5IGRpc3BhdGNoZXMgYSBTdGFydCBldmVudCB0byB0aGUgc3lzdGVtIGV2ZW50IGhhbmRsZXIuIE11c3QgYmUKKy8vIGNhbGxlZCBvbiB0aGUgbWFpbiBkaXNwYXRjaCB0aHJlYWQuCiAjaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTMKICAgdm9pZCBEaXNwYXRjaFN0YXJ0KFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIHZvaWQgRGlzcGF0Y2hTdGFydCgpOwogI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwogCkBAIC00ODgsMTEgKzQ5MCwxMSBAQAogICAvLyB8SXNQcmVsb2FkSW1tZWRpYXRlfCwgaWYgdHJ1ZSwgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHxJc1N0YXJ0SW1tZWRpYXRlfC4KICAgdmlydHVhbCBib29sIElzUHJlbG9hZEltbWVkaWF0ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaGVzIGEgUHJlbG9hZCBldmVudCB0byB0aGUgc3lzdGVtIGV2ZW50IGhhbmRsZXIuIE11c3QKLSAgLy8gYmUgY2FsbGVkIG9uIHRoZSBtYWluIGRpc3BhdGNoIHRocmVhZC4KKy8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2hlcyBhIFByZWxvYWQgZXZlbnQgdG8gdGhlIHN5c3RlbSBldmVudCBoYW5kbGVyLiBNdXN0CisvLyBiZSBjYWxsZWQgb24gdGhlIG1haW4gZGlzcGF0Y2ggdGhyZWFkLgogI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIHZvaWQgRGlzcGF0Y2hQcmVsb2FkKFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIHZvaWQgRGlzcGF0Y2hQcmVsb2FkKCk7CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAKQEAgLTUxMCwxMSArNTEyLDExIEBACiAgIHZvaWQgQ2FsbFRlYXJkb3duQ2FsbGJhY2tzKCk7CiAKICBwcml2YXRlOgotICAvLyBDcmVhdGVzIGFuIGluaXRpYWwgZXZlbnQgdHlwZSBvZiBlaXRoZXIgU3RhcnQgb3IgUHJlbG9hZCB3aXRoIHRoZSBvcmlnaW5hbAotICAvLyBjb21tYW5kIGxpbmUgYW5kIGRlZXAgbGluay4KKy8vIENyZWF0ZXMgYW4gaW5pdGlhbCBldmVudCB0eXBlIG9mIGVpdGhlciBTdGFydCBvciBQcmVsb2FkIHdpdGggdGhlIG9yaWdpbmFsCisvLyBjb21tYW5kIGxpbmUgYW5kIGRlZXAgbGluay4KICNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMwogICBFdmVudCogQ3JlYXRlSW5pdGlhbEV2ZW50KFNiRXZlbnRUeXBlIHR5cGUsIFNiVGltZU1vbm90b25pYyB0aW1lc3RhbXApOwotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCisjZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAgIEV2ZW50KiBDcmVhdGVJbml0aWFsRXZlbnQoU2JFdmVudFR5cGUgdHlwZSk7CiAjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19jcmVhdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfY3JlYXRlLmNjCmluZGV4IGUwZjMwZjUuLjcwNjE3NDUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19jcmVhdGUuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2NyZWF0ZS5jYwpAQCAtMzAsOSArMzAsNiBAQAogICByZXR1cm4gU2JBdWRpb1NpbmtQcml2YXRlOjpDcmVhdGUoCiAgICAgICBjaGFubmVscywgc2FtcGxpbmdfZnJlcXVlbmN5X2h6LCBhdWRpb19zYW1wbGVfdHlwZSwKICAgICAgIGF1ZGlvX2ZyYW1lX3N0b3JhZ2VfdHlwZSwgZnJhbWVfYnVmZmVycywgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKLSAgICAgIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsIGNvbnN1bWVfZnJhbWVzX2Z1bmMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgIE5VTEwgLyplcnJvcl9mdW5jKi8sCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCisgICAgICB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLCBjb25zdW1lX2ZyYW1lc19mdW5jLCBOVUxMIC8qZXJyb3JfZnVuYyovLAogICAgICAgY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuY2MKaW5kZXggMGQ0YWU4My4uNjFiY2RiNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pbnRlcm5hbC5jYwpAQCAtMzksMTYgKzM5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmFtZXNfY29uc3VtZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWUgZnJhbWVzX2NvbnN1bWVkX2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCkgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIFNCX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoZnJhbWVzX2NvbnN1bWVkX2F0KTsKICAgc2JfY29uc3VtZV9mcmFtZXNfZnVuYyhmcmFtZXNfY29uc3VtZWQsIGNvbnRleHQpOwotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIHNiX2NvbnN1bWVfZnJhbWVzX2Z1bmMoZnJhbWVzX2NvbnN1bWVkLAotI2lmIFNCX0hBUyhTQl9IQVNfQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLSAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXNfY29uc3VtZWRfYXQsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gIDEyCiB9CiAKIH0gIC8vIG5hbWVzcGFjZQpAQCAtMTE3LDkgKzEwOSw3IEBACiAgICAgaW50IGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXMsCiAgICAgU2JBdWRpb1NpbmtVcGRhdGVTb3VyY2VTdGF0dXNGdW5jIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsCiAgICAgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIEVycm9yRnVuYyBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIHZvaWQqIGNvbnRleHQpIHsKICAgaWYgKGNoYW5uZWxzIDw9IDAgfHwgY2hhbm5lbHMgPiBTYkF1ZGlvU2lua0dldE1heENoYW5uZWxzKCkpIHsKICAgICBTQl9MT0coV0FSTklORykgPDwgIkludmFsaWQgYXVkaW8gY2hhbm5lbHMgIiA8PCBjaGFubmVsczsKQEAgLTE2OCwxMSArMTU4LDcgQEAKICAgICBhdXRvIGF1ZGlvX3NpbmsgPSBhdWRpb19zaW5rX3R5cGUtPkNyZWF0ZSgKICAgICAgICAgY2hhbm5lbHMsIHNhbXBsaW5nX2ZyZXF1ZW5jeV9oeiwgYXVkaW9fc2FtcGxlX3R5cGUsCiAgICAgICAgIGF1ZGlvX2ZyYW1lX3N0b3JhZ2VfdHlwZSwgZnJhbWVfYnVmZmVycywgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKLSAgICAgICAgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICBjb250ZXh0KTsKKyAgICAgICAgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywgY29uc3VtZV9mcmFtZXNfZnVuYywgZXJyb3JfZnVuYywgY29udGV4dCk7CiAgICAgaWYgKGF1ZGlvX3NpbmtfdHlwZS0+SXNWYWxpZChhdWRpb19zaW5rKSkgewogICAgICAgcmV0dXJuIGF1ZGlvX3Npbms7CiAgICAgfQpAQCAtMTg3LDExICsxNzMsNyBAQAogICAgIGF1dG8gYXVkaW9fc2luayA9IGZhbGxiYWNrX3R5cGUtPkNyZWF0ZSgKICAgICAgICAgY2hhbm5lbHMsIHNhbXBsaW5nX2ZyZXF1ZW5jeV9oeiwgYXVkaW9fc2FtcGxlX3R5cGUsCiAgICAgICAgIGF1ZGlvX2ZyYW1lX3N0b3JhZ2VfdHlwZSwgZnJhbWVfYnVmZmVycywgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKLSAgICAgICAgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICBjb250ZXh0KTsKKyAgICAgICAgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywgY29uc3VtZV9mcmFtZXNfZnVuYywgZXJyb3JfZnVuYywgY29udGV4dCk7CiAgICAgaWYgKGZhbGxiYWNrX3R5cGUtPklzVmFsaWQoYXVkaW9fc2luaykpIHsKICAgICAgIHJldHVybiBhdWRpb19zaW5rOwogICAgIH0KQEAgLTIxMyw5ICsxOTUsNyBAQAogICAgIGludCBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzLAogICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAogICAgIFNiQXVkaW9TaW5rQ29uc3VtZUZyYW1lc0Z1bmMgc2JfY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIEVycm9yRnVuYyBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIHZvaWQqIGNvbnRleHQpIHsKICAgcmV0dXJuIENyZWF0ZShjaGFubmVscywgc2FtcGxpbmdfZnJlcXVlbmN5X2h6LCBhdWRpb19zYW1wbGVfdHlwZSwKICAgICAgICAgICAgICAgICBhdWRpb19mcmFtZV9zdG9yYWdlX3R5cGUsIGZyYW1lX2J1ZmZlcnMsCkBAIC0yMjQsOCArMjA0LDUgQEAKICAgICAgICAgICAgICAgICAgICAgPyBzdGQ6OmJpbmQoJjo6V3JhcENvbnN1bWVGcmFtZXNGdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYl9jb25zdW1lX2ZyYW1lc19mdW5jLCBfMSwgXzIsIF8zKQogICAgICAgICAgICAgICAgICAgICA6IENvbnN1bWVGcmFtZXNGdW5jKCksCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICAgICAgICAgICBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAgICAgICAgIGNvbnRleHQpOworICAgICAgICAgICAgICAgIGVycm9yX2Z1bmMsIGNvbnRleHQpOwogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuaAppbmRleCA2OTIzYTIyLi41N2UyODJhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuaAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfaW50ZXJuYWwuaApAQCAtMjQsMTQgKzI0LDEyIEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9pbnRlcm5hbF9vbmx5LmgiCiAKIHN0cnVjdCBTYkF1ZGlvU2lua1ByaXZhdGUgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFdoZW4gfGNhcGFiaWxpdHlfY2hhbmdlZHwgaXMgdHJ1ZSwgaXQgaGludHMgdGhhdCB0aGUgZXJyb3IgaXMgY2F1c2VkIGJ5IGEKICAgLy8gYSB0cmFuc2llbnQgY2FwYWJpbGl0eSBvbiB0aGUgcGxhdGZvcm0uICBUaGUgYXBwIHNob3VsZCByZXRyeSBwbGF5YmFjayB0bwogICAvLyByZWNvdmVyIGZyb20gdGhlIGVycm9yLgogICB0eXBlZGVmIHZvaWQgKCpFcnJvckZ1bmMpKGJvb2wgY2FwYWJpbGl0eV9jaGFuZ2VkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcl9tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogCiAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjwKICAgICAgIHZvaWQoaW50IGZyYW1lc19jb25zdW1lZCwgU2JUaW1lIGZyYW1lc19jb25zdW1lZF9hdCwgdm9pZCogY29udGV4dCk+CkBAIC01MSw5ICs0OSw3IEBACiAgICAgICAgIGludCBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzLAogICAgICAgICBTYkF1ZGlvU2lua1VwZGF0ZVNvdXJjZVN0YXR1c0Z1bmMgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKICAgICAgICAgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICBFcnJvckZ1bmMgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgdm9pZCogY29udGV4dCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBJc1ZhbGlkKFNiQXVkaW9TaW5rIGF1ZGlvX3NpbmspID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveShTYkF1ZGlvU2luayBhdWRpb19zaW5rKSA9IDA7CkBAIC05NSw5ICs5MSw3IEBACiAgICAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKICAgICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAogICAgICAgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgRXJyb3JGdW5jIGVycm9yX2Z1bmMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICB2b2lkKiBjb250ZXh0KTsKIAogICBzdGF0aWMgU2JBdWRpb1NpbmsgQ3JlYXRlKApAQCAtMTA5LDkgKzEwMyw3IEBACiAgICAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKICAgICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAogICAgICAgU2JBdWRpb1NpbmtDb25zdW1lRnJhbWVzRnVuYyBzYl9jb25zdW1lX2ZyYW1lc19mdW5jLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICBFcnJvckZ1bmMgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIHZvaWQqIGNvbnRleHQpOwogCiAgIC8vIEluZGl2aWR1YWwgaW1wbGVtZW50YXRpb24gaGFzIHRvIHByb3ZpZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvbGxvd2luZwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3Npbmsvc3R1Yl9hdWRpb19zaW5rX3R5cGUuY2MKaW5kZXggZTgyZDZiOC4uMDUxMGM5OCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmNjCkBAIC0zOCwxMiArMzgsOSBAQAogICB+U3R1YkF1ZGlvU2luaygpIG92ZXJyaWRlOwogCiAgIGJvb2wgSXNUeXBlKFR5cGUqIHR5cGUpIG92ZXJyaWRlIHsgcmV0dXJuIHR5cGVfID09IHR5cGU7IH0KLSAgdm9pZCBTZXRQbGF5YmFja1JhdGUoZG91YmxlIHBsYXliYWNrX3JhdGUpIG92ZXJyaWRlIHsKLSAgICBTQl9OT1RJTVBMRU1FTlRFRCgpOwotICB9CisgIHZvaWQgU2V0UGxheWJhY2tSYXRlKGRvdWJsZSBwbGF5YmFja19yYXRlKSBvdmVycmlkZSB7IFNCX05PVElNUExFTUVOVEVEKCk7IH0KIAotICB2b2lkIFNldFZvbHVtZShkb3VibGUgdm9sdW1lKSBvdmVycmlkZSB7Ci0gIH0KKyAgdm9pZCBTZXRWb2x1bWUoZG91YmxlIHZvbHVtZSkgb3ZlcnJpZGUge30KIAogIHByaXZhdGU6CiAgIHN0YXRpYyB2b2lkKiBUaHJlYWRFbnRyeVBvaW50KHZvaWQqIGNvbnRleHQpOwpAQCAtMTM3LDExICsxMzQsOCBAQAogICAgIGludCBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzLAogICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAogICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6Q29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6RXJyb3JGdW5jIGVycm9yX2Z1bmMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgdm9pZCogY29udGV4dCkgewotCiAgIHJldHVybiBuZXcgU3R1YkF1ZGlvU2luayh0aGlzLCBzYW1wbGluZ19mcmVxdWVuY3lfaHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLCBjb25zdW1lX2ZyYW1lc19mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCk7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL3N0dWJfYXVkaW9fc2lua190eXBlLmgKaW5kZXggN2VlODlhOC4uZDFkNTlkZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5oCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3Npbmsvc3R1Yl9hdWRpb19zaW5rX3R5cGUuaApAQCAtMzUsOSArMzUsNyBAQAogICAgICAgaW50IGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXMsCiAgICAgICBTYkF1ZGlvU2lua1VwZGF0ZVNvdXJjZVN0YXR1c0Z1bmMgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKICAgICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6Q29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpFcnJvckZ1bmMgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIHZvaWQqIGNvbnRleHQpIG92ZXJyaWRlOwogCiAgIGJvb2wgSXNWYWxpZChTYkF1ZGlvU2luayBhdWRpb19zaW5rKSBvdmVycmlkZSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50c19jb21wYXRpYmlsaXR5X2RlZmluZXMuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzX2NvbXBhdGliaWxpdHlfZGVmaW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWZmNTE0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzX2NvbXBhdGliaWxpdHlfZGVmaW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0vLyBUaGlzIGZpbGUgZGVmaW5lcyBtYWNyb3MgdG8gcHJvdmlkZSBjb252ZW5pZW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLS8vIGFmdGVyIHRoZSBjaGFuZ2UgdGhhdCBtaWdyYXRlZCBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHRvIGV4dGVybgotLy8gdmFyaWFibGVzLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfU1RBUkJPQVJEX0NPTkZJR1VSQVRJT05fQ09OU1RBTlRTX0NPTVBBVElCSUxJVFlfREVGSU5FU19IXwotI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9DT05GSUdVUkFUSU9OX0NPTlNUQU5UU19DT01QQVRJQklMSVRZX0RFRklORVNfSF8KLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KLSNlcnJvciBcCi0gICAgIlRoaXMgZmlsZSBpcyBvbmx5IHJlbGV2YW50IGZvciBTdGFyYm9hcmQgdmVyc2lvbnMgYmVmb3JlIDEyLiBQbGVhc2UgZG8gIiBcCi0ibm90IGluY2x1ZGUgdGhpcyBmaWxlIG90aGVyd2lzZS4iCi0KLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jZGVmaW5lIGtTYkRlZmF1bHRNbWFwVGhyZXNob2xkIFNCX0RFRkFVTFRfTU1BUF9USFJFU0hPTEQKLQotI2RlZmluZSBrU2JGaWxlTWF4TmFtZSBTQl9GSUxFX01BWF9OQU1FCi0KLSNkZWZpbmUga1NiRmlsZU1heE9wZW4gU0JfRklMRV9NQVhfT1BFTgotCi0jZGVmaW5lIGtTYkZpbGVBbHRTZXBDaGFyIFNCX0ZJTEVfQUxUX1NFUF9DSEFSCi0KLSNkZWZpbmUga1NiRmlsZUFsdFNlcFN0cmluZyBTQl9GSUxFX0FMVF9TRVBfU1RSSU5HCi0KLSNkZWZpbmUga1NiRmlsZU1heFBhdGggU0JfRklMRV9NQVhfUEFUSAotCi0jZGVmaW5lIGtTYkZpbGVTZXBDaGFyIFNCX0ZJTEVfU0VQX0NIQVIKLQotI2RlZmluZSBrU2JGaWxlU2VwU3RyaW5nIFNCX0ZJTEVfU0VQX1NUUklORwotCi0jZGVmaW5lIGtTYkhhc0FjM0F1ZGlvIFNCX0hBU19BQzNfQVVESU8KLQotI2RlZmluZSBrU2JIYXNNZWRpYVdlYm1WcDlTdXBwb3J0IFNCX0hBU19NRURJQV9XRUJNX1ZQOV9TVVBQT1JUCi0KLSNkZWZpbmUga1NiSGFzVGhyZWFkUHJpb3JpdHlTdXBwb3J0IFNCX0hBU19USFJFQURfUFJJT1JJVFlfU1VQUE9SVAotCi0jZGVmaW5lIGtTYk1hbGxvY0FsaWdubWVudCBTQl9NQUxMT0NfQUxJR05NRU5UCi0KLSNkZWZpbmUga1NiTWF4VGhyZWFkTG9jYWxLZXlzIFNCX01BWF9USFJFQURfTE9DQUxfS0VZUwotCi0jZGVmaW5lIGtTYk1heFRocmVhZE5hbWVMZW5ndGggU0JfTUFYX1RIUkVBRF9OQU1FX0xFTkdUSAotCi0jZGVmaW5lIGtTYk1lZGlhTWF4QXVkaW9CaXRyYXRlSW5CaXRzUGVyU2Vjb25kIFwKLSAgU0JfTUVESUFfTUFYX0FVRElPX0JJVFJBVEVfSU5fQklUU19QRVJfU0VDT05ECi0KLSNkZWZpbmUga1NiTWVkaWFNYXhWaWRlb0JpdHJhdGVJbkJpdHNQZXJTZWNvbmQgXAotICBTQl9NRURJQV9NQVhfVklERU9fQklUUkFURV9JTl9CSVRTX1BFUl9TRUNPTkQKLQotI2RlZmluZSBrU2JNZWRpYVZpZGVvRnJhbWVBbGlnbm1lbnQgU0JfTUVESUFfVklERU9fRlJBTUVfQUxJR05NRU5UCi0KLSNkZWZpbmUga1NiTWVtb3J5TG9nUGF0aCBTQl9NRU1PUllfTE9HX1BBVEgKLQotI2RlZmluZSBrU2JNZW1vcnlQYWdlU2l6ZSBTQl9NRU1PUllfUEFHRV9TSVpFCi0KLSNkZWZpbmUga1NiTmV0d29ya1JlY2VpdmVCdWZmZXJTaXplIFNCX05FVFdPUktfUkVDRUlWRV9CVUZGRVJfU0laRQotCi0jZGVmaW5lIGtTYk1heFRocmVhZHMgU0JfTUFYX1RIUkVBRFMKLQotI2RlZmluZSBrU2JQYXRoU2VwQ2hhciBTQl9QQVRIX1NFUF9DSEFSCi0KLSNkZWZpbmUga1NiUGF0aFNlcFN0cmluZyBTQl9QQVRIX1NFUF9TVFJJTkcKLQotI2RlZmluZSBrU2JQcmVmZXJyZWRSZ2JhQnl0ZU9yZGVyIFNCX1BSRUZFUlJFRF9SR0JBX0JZVEVfT1JERVIKLQotI2RlZmluZSBrU2JVc2VyTWF4U2lnbmVkSW4gU0JfVVNFUl9NQVhfU0lHTkVEX0lOCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9DT05GSUdVUkFUSU9OX0NPTlNUQU5UU19DT01QQVRJQklMSVRZX0RFRklORVNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9jcmVhdGVfdHJhbnNmb3JtZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZTBiNzEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9jcmVhdGVfdHJhbnNmb3JtZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvc29mdHdhcmVfYWVzLmgiCi0KLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6QUVTX0tFWTsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6QUVTX2djbTEyOF9pbml0OwotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBbGdvcml0aG07Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OmtBbGdvcml0aG1BZXMxMjhDYmM7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OmtBbGdvcml0aG1BZXMxMjhDdHI7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OmtBbGdvcml0aG1BZXMxMjhFY2I7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OmtBbGdvcml0aG1BZXMxMjhHY207Ci0KLVNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgU2JDcnlwdG9ncmFwaHlDcmVhdGVUcmFuc2Zvcm1lcigKLSAgICBjb25zdCBjaGFyKiBhbGdvcml0aG0sCi0gICAgaW50IGJsb2NrX3NpemVfYml0cywKLSAgICBTYkNyeXB0b2dyYXBoeURpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGUgbW9kZSwKLSAgICBjb25zdCB2b2lkKiBpbml0aWFsaXphdGlvbl92ZWN0b3IsCi0gICAgaW50IGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplLAotICAgIGNvbnN0IHZvaWQqIGtleSwKLSAgICBpbnQga2V5X3NpemUpIHsKLSAgaWYgKHN0cmNtcChhbGdvcml0aG0sIGtTYkNyeXB0b2dyYXBoeUFsZ29yaXRobUFlcykgIT0gMCkgewotICAgIFNCX0RMT0coV0FSTklORykgPDwgIlVuc3VwcG9ydGVkIGFsZ29yaXRobTogIiA8PCBhbGdvcml0aG07Ci0gICAgcmV0dXJuIGtTYkNyeXB0b2dyYXBoeUludmFsaWRUcmFuc2Zvcm1lcjsKLSAgfQotCi0gIGlmIChibG9ja19zaXplX2JpdHMgIT0gMTI4KSB7Ci0gICAgU0JfRExPRyhXQVJOSU5HKSA8PCAiVW5zdXBwb3J0ZWQgYmxvY2sgc2l6ZTogIiA8PCBibG9ja19zaXplX2JpdHM7Ci0gICAgcmV0dXJuIGtTYkNyeXB0b2dyYXBoeUludmFsaWRUcmFuc2Zvcm1lcjsKLSAgfQotCi0gIEFsZ29yaXRobSBjb21iaW5lZF9hbGdvcml0aG07Ci0gIGlmIChtb2RlID09IGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUNiYykgewotICAgIGNvbWJpbmVkX2FsZ29yaXRobSA9IGtBbGdvcml0aG1BZXMxMjhDYmM7Ci0gIH0gZWxzZSBpZiAobW9kZSA9PSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDdHIpIHsKLSAgICBjb21iaW5lZF9hbGdvcml0aG0gPSBrQWxnb3JpdGhtQWVzMTI4Q3RyOwotICB9IGVsc2UgaWYgKG1vZGUgPT0ga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlRWNiKSB7Ci0gICAgY29tYmluZWRfYWxnb3JpdGhtID0ga0FsZ29yaXRobUFlczEyOEVjYjsKLSAgfSBlbHNlIGlmIChtb2RlID09IGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUdjbSkgewotICAgIGNvbWJpbmVkX2FsZ29yaXRobSA9IGtBbGdvcml0aG1BZXMxMjhHY207Ci0gIH0gZWxzZSB7Ci0gICAgU0JfRExPRyhXQVJOSU5HKSA8PCAiVW5zdXBwb3J0ZWQgYmxvY2sgY2lwaGVyIG1vZGU6ICIgPDwgbW9kZTsKLSAgICByZXR1cm4ga1NiQ3J5cHRvZ3JhcGh5SW52YWxpZFRyYW5zZm9ybWVyOwotICB9Ci0KLSAgaWYgKG1vZGUgPT0ga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlR2NtIHx8Ci0gICAgICBtb2RlID09IGtTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZUVjYikgewotICAgIGlmIChpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSAhPSAwKSB7Ci0gICAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJVbnN1cHBvcnRlZCBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTogIgotICAgICAgICAgICAgICAgICAgICAgICA8PCBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTsKLSAgICAgIHJldHVybiBrU2JDcnlwdG9ncmFwaHlJbnZhbGlkVHJhbnNmb3JtZXI7Ci0gICAgfQotICB9IGVsc2UgaWYgKG1vZGUgPT0ga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlQ3RyKSB7Ci0gICAgaWYgKGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplICE9IDAgJiYgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUgIT0gMTIgJiYKLSAgICAgICAgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUgIT0gMTYgJiYgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUgIT0gMzIpIHsKLSAgICAgIFNCX0RMT0coV0FSTklORykgPDwgIlVuc3VwcG9ydGVkIENUUiBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTogIgotICAgICAgICAgICAgICAgICAgICAgICA8PCBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTsKLSAgICAgIHJldHVybiBrU2JDcnlwdG9ncmFwaHlJbnZhbGlkVHJhbnNmb3JtZXI7Ci0gICAgfQotICB9IGVsc2UgaWYgKGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplICE9IGJsb2NrX3NpemVfYml0cyAvIDgpIHsKLSAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJVbnN1cHBvcnRlZCBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTogIgotICAgICAgICAgICAgICAgICAgICAgPDwgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemU7Ci0gICAgcmV0dXJuIGtTYkNyeXB0b2dyYXBoeUludmFsaWRUcmFuc2Zvcm1lcjsKLSAgfQotCi0gIGlmIChrZXlfc2l6ZSAhPSAxNiAmJiBrZXlfc2l6ZSAhPSAyNCAmJiBrZXlfc2l6ZSAhPSAzMikgewotICAgIFNCX0RMT0coV0FSTklORykgPDwgIlVuc3VwcG9ydGVkIGtleV9zaXplOiAiIDw8IGtleV9zaXplOwotICAgIHJldHVybiBrU2JDcnlwdG9ncmFwaHlJbnZhbGlkVHJhbnNmb3JtZXI7Ci0gIH0KLQotICBBRVNfS0VZIGFlc2tleSA9IHswfTsKLSAgaW50IHJlc3VsdCA9IC0xOwotICBpZiAoZGlyZWN0aW9uID09IGtTYkNyeXB0b2dyYXBoeURpcmVjdGlvbkRlY29kZSAmJgotICAgICAgbW9kZSAhPSBrU2JDcnlwdG9ncmFwaHlCbG9ja0NpcGhlck1vZGVDdHIgJiYKLSAgICAgIG1vZGUgIT0ga1NiQ3J5cHRvZ3JhcGh5QmxvY2tDaXBoZXJNb2RlR2NtKSB7Ci0gICAgcmVzdWx0ID0gQUVTX3NldF9kZWNyeXB0X2tleShrZXksIGtleV9zaXplICogOCwgJmFlc2tleSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmVzdWx0ID0gQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleV9zaXplICogOCwgJmFlc2tleSk7Ci0gIH0KLQotICBpZiAocmVzdWx0ICE9IDApIHsKLSAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJFcnJvciBzZXR0aW5nIGtleTogIiA8PCByZXN1bHQ7Ci0gICAgcmV0dXJuIGtTYkNyeXB0b2dyYXBoeUludmFsaWRUcmFuc2Zvcm1lcjsKLSAgfQotCi0gIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQotICAgICAgbmV3IFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXJQcml2YXRlKCk7Ci0gIG1lbXNldCh0cmFuc2Zvcm1lciwgMCwgc2l6ZW9mKHRyYW5zZm9ybWVyKSk7Ci0gIHRyYW5zZm9ybWVyLT5rZXkgPSBhZXNrZXk7Ci0gIHRyYW5zZm9ybWVyLT5hbGdvcml0aG0gPSBjb21iaW5lZF9hbGdvcml0aG07Ci0gIHRyYW5zZm9ybWVyLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247Ci0gIGlmIChpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSkgewotICAgIG1lbWNweSh0cmFuc2Zvcm1lci0+aXZlYywgaW5pdGlhbGl6YXRpb25fdmVjdG9yLAotICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSk7Ci0gIH0KLQotICBpZiAodHJhbnNmb3JtZXItPmFsZ29yaXRobSA9PSBrQWxnb3JpdGhtQWVzMTI4R2NtKSB7Ci0gICAgQUVTX2djbTEyOF9pbml0KCZ0cmFuc2Zvcm1lci0+Z2NtX2NvbnRleHQsICZ0cmFuc2Zvcm1lci0+a2V5LAotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPT0ga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRW5jb2RlID8gMSA6IDApOwotICB9Ci0KLSAgcmV0dXJuIHRyYW5zZm9ybWVyOwotfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfZGVzdHJveV90cmFuc2Zvcm1lci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfZGVzdHJveV90cmFuc2Zvcm1lci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3ZTJlZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5X2Rlc3Ryb3lfdHJhbnNmb3JtZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfaW50ZXJuYWwuaCIKLQotdm9pZCBTYkNyeXB0b2dyYXBoeURlc3Ryb3lUcmFuc2Zvcm1lcihTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKSB7Ci0gIGlmICghdHJhbnNmb3JtZXIpIHsKLSAgICByZXR1cm47Ci0gIH0KLQotICBkZWxldGUgdHJhbnNmb3JtZXI7Ci19Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9nZXRfdGFnLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9nZXRfdGFnLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE5Yjk4Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfZ2V0X3RhZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaCIKLQotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBRVNfZ2NtMTI4X3RhZzsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOEdjbTsKLQotYm9vbCBTYkNyeXB0b2dyYXBoeUdldFRhZygKLSAgICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyLAotICAgIHZvaWQqIG91dF90YWcsCi0gICAgaW50IG91dF90YWdfc2l6ZSkgewotICBpZiAodHJhbnNmb3JtZXItPmFsZ29yaXRobSAhPSBrQWxnb3JpdGhtQWVzMTI4R2NtKSB7Ci0gICAgU0JfRExPRyhFUlJPUikgPDwgIlRyeWluZyB0byBnZXQgdGFnIG9uIG5vbi1HQ00gdHJhbnNmb3JtZXIuIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBBRVNfZ2NtMTI4X3RhZygmdHJhbnNmb3JtZXItPmdjbV9jb250ZXh0LCBvdXRfdGFnLCBvdXRfdGFnX3NpemUpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5X2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5X2ludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMDA5NDcuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9pbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfU1RBUkJPQVJEX0NSWVBUT0dSQVBIWV9DUllQVE9HUkFQSFlfSU5URVJOQUxfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfQ1JZUFRPR1JBUEhZX0NSWVBUT0dSQVBIWV9JTlRFUk5BTF9IXwotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSNlcnJvciAiU3RhcmJvYXJkIENyeXB0byBBUEkgaXMgZGVwcmVjYXRlZCIKLSNlbHNlCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvc29mdHdhcmVfYWVzLmgiCi0KLW5hbWVzcGFjZSBzdGFyYm9hcmQgewotbmFtZXNwYWNlIHNoYXJlZCB7Ci1uYW1lc3BhY2Ugc3RhcmJvYXJkIHsKLW5hbWVzcGFjZSBjcnlwdG9ncmFwaHkgewotCi0vLyBUaGUgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc29mdHdhcmUtb25seSBpbXBsZW1lbnRhdGlvbi4KLWVudW0gQWxnb3JpdGhtIHsKLSAga0FsZ29yaXRobUFlczEyOENiYywKLSAga0FsZ29yaXRobUFlczEyOEN0ciwKLSAga0FsZ29yaXRobUFlczEyOEVjYiwKLSAga0FsZ29yaXRobUFlczEyOEdjbSwKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcnlwdG9ncmFwaHkKLX0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLX0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKLX0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLQotc3RydWN0IFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXJQcml2YXRlIHsKLSAgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBbGdvcml0aG0gYWxnb3JpdGhtOwotICBTYkNyeXB0b2dyYXBoeURpcmVjdGlvbiBkaXJlY3Rpb247Ci0gIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6R0NNMTI4X0NPTlRFWFQgZ2NtX2NvbnRleHQ7Ci0gIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6QUVTX0tFWSBrZXk7Ci0gIHVpbnQ4X3QgaXZlY1tTQl9BRVNfQkxPQ0tfU0laRV07Ci0gIHVpbnQ4X3QgZWNvdW50X2J1ZltTQl9BRVNfQkxPQ0tfU0laRV07Ci0gIHVpbnQzMl90IGNvdW50ZXI7Ci19OwotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfQ1JZUFRPR1JBUEhZX0NSWVBUT0dSQVBIWV9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGM5NzNmLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaCIKLQotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBRVNfZ2NtMTI4X2FhZDsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOEdjbTsKLQotYm9vbCBTYkNyeXB0b2dyYXBoeVNldEF1dGhlbnRpY2F0ZWREYXRhKAotICAgIFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIsCi0gICAgY29uc3Qgdm9pZCogZGF0YSwKLSAgICBpbnQgZGF0YV9zaXplKSB7Ci0gIGlmICh0cmFuc2Zvcm1lci0+YWxnb3JpdGhtICE9IGtBbGdvcml0aG1BZXMxMjhHY20pIHsKLSAgICBTQl9ETE9HKEVSUk9SKSA8PCAiVHJ5aW5nIHRvIHNldCBBQUQgb24gbm9uLUdDTSB0cmFuc2Zvcm1lci4iOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGludCByZXN1bHQgPSBBRVNfZ2NtMTI4X2FhZCgmdHJhbnNmb3JtZXItPmdjbV9jb250ZXh0LCBkYXRhLCBkYXRhX3NpemUpOwotICByZXR1cm4gcmVzdWx0ID09IDE7Ci19Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmRlOWJhLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfc2V0X2luaXRpYWxpemF0aW9uX3ZlY3Rvci5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaCIKLQotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBRVNfZ2NtMTI4X3NldGl2OwotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjprQWxnb3JpdGhtQWVzMTI4R2NtOwotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjprQWxnb3JpdGhtQWVzMTI4Q3RyOwotCi12b2lkIFNiQ3J5cHRvZ3JhcGh5U2V0SW5pdGlhbGl6YXRpb25WZWN0b3IoCi0gICAgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciwKLSAgICBjb25zdCB2b2lkKiBpbml0aWFsaXphdGlvbl92ZWN0b3IsCi0gICAgaW50IGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplKSB7Ci0gIGlmICh0cmFuc2Zvcm1lci0+YWxnb3JpdGhtID09IGtBbGdvcml0aG1BZXMxMjhHY20pIHsKLSAgICBBRVNfZ2NtMTI4X3NldGl2KCZ0cmFuc2Zvcm1lci0+Z2NtX2NvbnRleHQsICZ0cmFuc2Zvcm1lci0+a2V5LAotICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25fdmVjdG9yLCBpbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSk7Ci0gIH0gZWxzZSB7Ci0gICAgbWVtY3B5KHRyYW5zZm9ybWVyLT5pdmVjLCBpbml0aWFsaXphdGlvbl92ZWN0b3IsCi0gICAgICAgICAgICAgICAgIHN0ZDo6bWluKGluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZih0cmFuc2Zvcm1lci0+aXZlYykpKSk7Ci0gIH0KLX0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDQ2NGEyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY3J5cHRvZ3JhcGh5L2NyeXB0b2dyYXBoeV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaCIKLQotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBRVNfY2JjX2VuY3J5cHQ7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OkFFU19jdHIxMjhfZW5jcnlwdDsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6QUVTX2RlY3J5cHQ7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OkFFU19lbmNyeXB0OwotdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6Y3J5cHRvZ3JhcGh5OjpBRVNfZ2NtMTI4X2RlY3J5cHQ7Ci11c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpjcnlwdG9ncmFwaHk6OkFFU19nY20xMjhfZW5jcnlwdDsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOENiYzsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOEN0cjsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOEVjYjsKLXVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OmNyeXB0b2dyYXBoeTo6a0FsZ29yaXRobUFlczEyOEdjbTsKLQotbmFtZXNwYWNlIHsKLWlubGluZSB2b2lkKiBBZGRQdHIodm9pZCogcG9pbnRlciwgaW50IHZhbHVlKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihwb2ludGVyKSArIHZhbHVlOwotfQotCi1pbmxpbmUgY29uc3Qgdm9pZCogQWRkUHRyKGNvbnN0IHZvaWQqIHBvaW50ZXIsIGludCB2YWx1ZSkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocG9pbnRlcikgKyB2YWx1ZTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi1pbnQgU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm0oU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBpbl9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbl9kYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogb3V0X2RhdGEpIHsKLSAgaWYgKCFTYkNyeXB0b2dyYXBoeUlzVHJhbnNmb3JtZXJWYWxpZCh0cmFuc2Zvcm1lcikgfHwgIWluX2RhdGEgfHwgIW91dF9kYXRhKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaWYgKGluX2RhdGFfc2l6ZSA9PSAwKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBzd2l0Y2ggKHRyYW5zZm9ybWVyLT5hbGdvcml0aG0pIHsKLSAgICBjYXNlIGtBbGdvcml0aG1BZXMxMjhDYmM6Ci0gICAgICBBRVNfY2JjX2VuY3J5cHQoaW5fZGF0YSwgb3V0X2RhdGEsIGluX2RhdGFfc2l6ZSwgJih0cmFuc2Zvcm1lci0+a2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lci0+aXZlYywKLSAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lci0+ZGlyZWN0aW9uID09IGtTYkNyeXB0b2dyYXBoeURpcmVjdGlvbkVuY29kZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgU0JfQUVTX0VOQ1JZUFQgOiBTQl9BRVNfREVDUllQVCk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2Uga0FsZ29yaXRobUFlczEyOEN0cjoKLSAgICAgIEFFU19jdHIxMjhfZW5jcnlwdChpbl9kYXRhLCBvdXRfZGF0YSwgaW5fZGF0YV9zaXplLCAmKHRyYW5zZm9ybWVyLT5rZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyLT5pdmVjLCB0cmFuc2Zvcm1lci0+ZWNvdW50X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAmdHJhbnNmb3JtZXItPmNvdW50ZXIpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtBbGdvcml0aG1BZXMxMjhFY2I6Ci0gICAgICBpZiAoaW5fZGF0YV9zaXplICUgMTYgIT0gMCkgewotICAgICAgICBTQl9ETE9HKEVSUk9SKSA8PCAiRUNCIGNhbGxlZCB3aXRoIGEgbm9uLW11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLiI7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRyYW5zZm9ybWVyLT5kaXJlY3Rpb24gPT0ga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRW5jb2RlKSB7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGluID0gaW5fZGF0YTsKLSAgICAgICAgdm9pZCogb3V0ID0gb3V0X2RhdGE7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBibG9ja3MgPSBpbl9kYXRhX3NpemUgLyAxNjsgaSA8IGJsb2NrczsgKytpKSB7Ci0gICAgICAgICAgQUVTX2VuY3J5cHQoaW4sIG91dCwgJnRyYW5zZm9ybWVyLT5rZXkpOwotICAgICAgICAgIGluID0gQWRkUHRyKGluLCAxNik7Ci0gICAgICAgICAgb3V0ID0gQWRkUHRyKG91dCwgMTYpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybWVyLT5kaXJlY3Rpb24gPT0ga1NiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uRGVjb2RlKSB7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGluID0gaW5fZGF0YTsKLSAgICAgICAgdm9pZCogb3V0ID0gb3V0X2RhdGE7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBibG9ja3MgPSBpbl9kYXRhX3NpemUgLyAxNjsgaSA8IGJsb2NrczsgKytpKSB7Ci0gICAgICAgICAgQUVTX2RlY3J5cHQoaW4sIG91dCwgJnRyYW5zZm9ybWVyLT5rZXkpOwotICAgICAgICAgIGluID0gQWRkUHRyKGluLCAxNik7Ci0gICAgICAgICAgb3V0ID0gQWRkUHRyKG91dCwgMTYpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBTQl9OT1RSRUFDSEVEKCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2Uga0FsZ29yaXRobUFlczEyOEdjbToKLSAgICAgIGlmICh0cmFuc2Zvcm1lci0+ZGlyZWN0aW9uID09IGtTYkNyeXB0b2dyYXBoeURpcmVjdGlvbkVuY29kZSkgewotICAgICAgICBBRVNfZ2NtMTI4X2VuY3J5cHQoJnRyYW5zZm9ybWVyLT5nY21fY29udGV4dCwgJnRyYW5zZm9ybWVyLT5rZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9kYXRhLCBvdXRfZGF0YSwgaW5fZGF0YV9zaXplKTsKLSAgICAgIH0gZWxzZSBpZiAodHJhbnNmb3JtZXItPmRpcmVjdGlvbiA9PSBrU2JDcnlwdG9ncmFwaHlEaXJlY3Rpb25EZWNvZGUpIHsKLSAgICAgICAgQUVTX2djbTEyOF9kZWNyeXB0KCZ0cmFuc2Zvcm1lci0+Z2NtX2NvbnRleHQsICZ0cmFuc2Zvcm1lci0+a2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZGF0YSwgb3V0X2RhdGEsIGluX2RhdGFfc2l6ZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBTQl9OT1RSRUFDSEVEKCk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICBTQl9OT1RSRUFDSEVEKCk7Ci0gICAgICByZXR1cm4gLTE7Ci0gIH0KLQotICByZXR1cm4gaW5fZGF0YV9zaXplOwotfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvc29mdHdhcmVfYWVzLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTAxNzkxLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNTg2ICswLDAgQEAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSAqCi0gKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSAqCi0gKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0gKiAgICBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0gKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0vLyBNb2RpZmljYXRpb25zIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvc29mdHdhcmVfYWVzLmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2J5dGVfc3dhcC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotI3ByYWdtYSBtZXNzYWdlICJzb2Z0d2FyZV9hZXMuY2MgaXMgbm90IG1lYW50IGZvciBwcm9kdWN0aW9uIHVzZSEgSW5zdGVhZCwgdXNlICIKLSNwcmFnbWEgbWVzc2FnZSAic3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV8qIGlmIHlvdSBkb24ndCBoYXZlICIKLSNwcmFnbWEgbWVzc2FnZSAiaGFyZHdhcmUtYWNjZWxlcmF0ZWQgQUVTIHN1cHBvcnQuIgotCi1uYW1lc3BhY2Ugc3RhcmJvYXJkIHsKLW5hbWVzcGFjZSBzaGFyZWQgewotbmFtZXNwYWNlIHN0YXJib2FyZCB7Ci1uYW1lc3BhY2UgY3J5cHRvZ3JhcGh5IHsKLQotbmFtZXNwYWNlIHsKLWlubGluZSB1aW50MzJfdCBHRVRVMzIoY29uc3Qgdm9pZCogaW4pIHsKLSAgdWludDMyX3QgdmFsdWU7Ci0gIG1lbWNweSgmdmFsdWUsIGluLCBzaXplb2YodmFsdWUpKTsKLSAgcmV0dXJuIFNiQnl0ZVN3YXBVMzIodmFsdWUpOwotfQotCi1pbmxpbmUgdm9pZCBQVVRVMzIodm9pZCogb3V0LCB1aW50MzJfdCB2YWx1ZSkgewotICB2YWx1ZSA9IFNiQnl0ZVN3YXBVMzIodmFsdWUpOwotICBtZW1jcHkob3V0LCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotfQotCi1pbmxpbmUgdWludDMyX3QgR0VUVTMyX2FsaWduZWQoY29uc3Qgdm9pZCogaW4pIHsKLSAgY29uc3QgY2hhciogYWxpYXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaW4pOwotICByZXR1cm4gU2JCeXRlU3dhcFUzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KGFsaWFzKSk7Ci19Ci0KLWlubGluZSB2b2lkIFBVVFUzMl9hbGlnbmVkKHZvaWQqIGluLCB1aW50MzJfdCB2YWx1ZSkgewotICBjaGFyKiBhbGlhcyA9IHN0YXRpY19jYXN0PGNoYXIqPihpbik7Ci0gICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYWxpYXMpID0gU2JCeXRlU3dhcFUzMih2YWx1ZSk7Ci19Ci0KLS8qIFRlMFt4XSA9IFMgW3hdLlswMiwgMDEsIDAxLCAwM107Ci0gKiBUZTFbeF0gPSBTIFt4XS5bMDMsIDAyLCAwMSwgMDFdOwotICogVGUyW3hdID0gUyBbeF0uWzAxLCAwMywgMDIsIDAxXTsKLSAqIFRlM1t4XSA9IFMgW3hdLlswMSwgMDEsIDAzLCAwMl07Ci0gKgotICogVGQwW3hdID0gU2lbeF0uWzBlLCAwOSwgMGQsIDBiXTsKLSAqIFRkMVt4XSA9IFNpW3hdLlswYiwgMGUsIDA5LCAwZF07Ci0gKiBUZDJbeF0gPSBTaVt4XS5bMGQsIDBiLCAwZSwgMDldOwotICogVGQzW3hdID0gU2lbeF0uWzA5LCAwZCwgMGIsIDBlXTsKLSAqIFRkNFt4XSA9IFNpW3hdLlswMV07ICovCi1zdGF0aWMgY29uc3QgdWludDMyX3QgVGUwWzI1Nl0gPSB7Ci0gICAgMHhjNjYzNjNhNVUsIDB4Zjg3YzdjODRVLCAweGVlNzc3Nzk5VSwgMHhmNjdiN2I4ZFUsIDB4ZmZmMmYyMGRVLAotICAgIDB4ZDY2YjZiYmRVLCAweGRlNmY2ZmIxVSwgMHg5MWM1YzU1NFUsIDB4NjAzMDMwNTBVLCAweDAyMDEwMTAzVSwKLSAgICAweGNlNjc2N2E5VSwgMHg1NjJiMmI3ZFUsIDB4ZTdmZWZlMTlVLCAweGI1ZDdkNzYyVSwgMHg0ZGFiYWJlNlUsCi0gICAgMHhlYzc2NzY5YVUsIDB4OGZjYWNhNDVVLCAweDFmODI4MjlkVSwgMHg4OWM5Yzk0MFUsIDB4ZmE3ZDdkODdVLAotICAgIDB4ZWZmYWZhMTVVLCAweGIyNTk1OWViVSwgMHg4ZTQ3NDdjOVUsIDB4ZmJmMGYwMGJVLCAweDQxYWRhZGVjVSwKLSAgICAweGIzZDRkNDY3VSwgMHg1ZmEyYTJmZFUsIDB4NDVhZmFmZWFVLCAweDIzOWM5Y2JmVSwgMHg1M2E0YTRmN1UsCi0gICAgMHhlNDcyNzI5NlUsIDB4OWJjMGMwNWJVLCAweDc1YjdiN2MyVSwgMHhlMWZkZmQxY1UsIDB4M2Q5MzkzYWVVLAotICAgIDB4NGMyNjI2NmFVLCAweDZjMzYzNjVhVSwgMHg3ZTNmM2Y0MVUsIDB4ZjVmN2Y3MDJVLCAweDgzY2NjYzRmVSwKLSAgICAweDY4MzQzNDVjVSwgMHg1MWE1YTVmNFUsIDB4ZDFlNWU1MzRVLCAweGY5ZjFmMTA4VSwgMHhlMjcxNzE5M1UsCi0gICAgMHhhYmQ4ZDg3M1UsIDB4NjIzMTMxNTNVLCAweDJhMTUxNTNmVSwgMHgwODA0MDQwY1UsIDB4OTVjN2M3NTJVLAotICAgIDB4NDYyMzIzNjVVLCAweDlkYzNjMzVlVSwgMHgzMDE4MTgyOFUsIDB4Mzc5Njk2YTFVLCAweDBhMDUwNTBmVSwKLSAgICAweDJmOWE5YWI1VSwgMHgwZTA3MDcwOVUsIDB4MjQxMjEyMzZVLCAweDFiODA4MDliVSwgMHhkZmUyZTIzZFUsCi0gICAgMHhjZGViZWIyNlUsIDB4NGUyNzI3NjlVLCAweDdmYjJiMmNkVSwgMHhlYTc1NzU5ZlUsIDB4MTIwOTA5MWJVLAotICAgIDB4MWQ4MzgzOWVVLCAweDU4MmMyYzc0VSwgMHgzNDFhMWEyZVUsIDB4MzYxYjFiMmRVLCAweGRjNmU2ZWIyVSwKLSAgICAweGI0NWE1YWVlVSwgMHg1YmEwYTBmYlUsIDB4YTQ1MjUyZjZVLCAweDc2M2IzYjRkVSwgMHhiN2Q2ZDY2MVUsCi0gICAgMHg3ZGIzYjNjZVUsIDB4NTIyOTI5N2JVLCAweGRkZTNlMzNlVSwgMHg1ZTJmMmY3MVUsIDB4MTM4NDg0OTdVLAotICAgIDB4YTY1MzUzZjVVLCAweGI5ZDFkMTY4VSwgMHgwMDAwMDAwMFUsIDB4YzFlZGVkMmNVLCAweDQwMjAyMDYwVSwKLSAgICAweGUzZmNmYzFmVSwgMHg3OWIxYjFjOFUsIDB4YjY1YjViZWRVLCAweGQ0NmE2YWJlVSwgMHg4ZGNiY2I0NlUsCi0gICAgMHg2N2JlYmVkOVUsIDB4NzIzOTM5NGJVLCAweDk0NGE0YWRlVSwgMHg5ODRjNGNkNFUsIDB4YjA1ODU4ZThVLAotICAgIDB4ODVjZmNmNGFVLCAweGJiZDBkMDZiVSwgMHhjNWVmZWYyYVUsIDB4NGZhYWFhZTVVLCAweGVkZmJmYjE2VSwKLSAgICAweDg2NDM0M2M1VSwgMHg5YTRkNGRkN1UsIDB4NjYzMzMzNTVVLCAweDExODU4NTk0VSwgMHg4YTQ1NDVjZlUsCi0gICAgMHhlOWY5ZjkxMFUsIDB4MDQwMjAyMDZVLCAweGZlN2Y3ZjgxVSwgMHhhMDUwNTBmMFUsIDB4NzgzYzNjNDRVLAotICAgIDB4MjU5ZjlmYmFVLCAweDRiYThhOGUzVSwgMHhhMjUxNTFmM1UsIDB4NWRhM2EzZmVVLCAweDgwNDA0MGMwVSwKLSAgICAweDA1OGY4ZjhhVSwgMHgzZjkyOTJhZFUsIDB4MjE5ZDlkYmNVLCAweDcwMzgzODQ4VSwgMHhmMWY1ZjUwNFUsCi0gICAgMHg2M2JjYmNkZlUsIDB4NzdiNmI2YzFVLCAweGFmZGFkYTc1VSwgMHg0MjIxMjE2M1UsIDB4MjAxMDEwMzBVLAotICAgIDB4ZTVmZmZmMWFVLCAweGZkZjNmMzBlVSwgMHhiZmQyZDI2ZFUsIDB4ODFjZGNkNGNVLCAweDE4MGMwYzE0VSwKLSAgICAweDI2MTMxMzM1VSwgMHhjM2VjZWMyZlUsIDB4YmU1ZjVmZTFVLCAweDM1OTc5N2EyVSwgMHg4ODQ0NDRjY1UsCi0gICAgMHgyZTE3MTczOVUsIDB4OTNjNGM0NTdVLCAweDU1YTdhN2YyVSwgMHhmYzdlN2U4MlUsIDB4N2EzZDNkNDdVLAotICAgIDB4Yzg2NDY0YWNVLCAweGJhNWQ1ZGU3VSwgMHgzMjE5MTkyYlUsIDB4ZTY3MzczOTVVLCAweGMwNjA2MGEwVSwKLSAgICAweDE5ODE4MTk4VSwgMHg5ZTRmNGZkMVUsIDB4YTNkY2RjN2ZVLCAweDQ0MjIyMjY2VSwgMHg1NDJhMmE3ZVUsCi0gICAgMHgzYjkwOTBhYlUsIDB4MGI4ODg4ODNVLCAweDhjNDY0NmNhVSwgMHhjN2VlZWUyOVUsIDB4NmJiOGI4ZDNVLAotICAgIDB4MjgxNDE0M2NVLCAweGE3ZGVkZTc5VSwgMHhiYzVlNWVlMlUsIDB4MTYwYjBiMWRVLCAweGFkZGJkYjc2VSwKLSAgICAweGRiZTBlMDNiVSwgMHg2NDMyMzI1NlUsIDB4NzQzYTNhNGVVLCAweDE0MGEwYTFlVSwgMHg5MjQ5NDlkYlUsCi0gICAgMHgwYzA2MDYwYVUsIDB4NDgyNDI0NmNVLCAweGI4NWM1Y2U0VSwgMHg5ZmMyYzI1ZFUsIDB4YmRkM2QzNmVVLAotICAgIDB4NDNhY2FjZWZVLCAweGM0NjI2MmE2VSwgMHgzOTkxOTFhOFUsIDB4MzE5NTk1YTRVLCAweGQzZTRlNDM3VSwKLSAgICAweGYyNzk3OThiVSwgMHhkNWU3ZTczMlUsIDB4OGJjOGM4NDNVLCAweDZlMzczNzU5VSwgMHhkYTZkNmRiN1UsCi0gICAgMHgwMThkOGQ4Y1UsIDB4YjFkNWQ1NjRVLCAweDljNGU0ZWQyVSwgMHg0OWE5YTllMFUsIDB4ZDg2YzZjYjRVLAotICAgIDB4YWM1NjU2ZmFVLCAweGYzZjRmNDA3VSwgMHhjZmVhZWEyNVUsIDB4Y2E2NTY1YWZVLCAweGY0N2E3YThlVSwKLSAgICAweDQ3YWVhZWU5VSwgMHgxMDA4MDgxOFUsIDB4NmZiYWJhZDVVLCAweGYwNzg3ODg4VSwgMHg0YTI1MjU2ZlUsCi0gICAgMHg1YzJlMmU3MlUsIDB4MzgxYzFjMjRVLCAweDU3YTZhNmYxVSwgMHg3M2I0YjRjN1UsIDB4OTdjNmM2NTFVLAotICAgIDB4Y2JlOGU4MjNVLCAweGExZGRkZDdjVSwgMHhlODc0NzQ5Y1UsIDB4M2UxZjFmMjFVLCAweDk2NGI0YmRkVSwKLSAgICAweDYxYmRiZGRjVSwgMHgwZDhiOGI4NlUsIDB4MGY4YThhODVVLCAweGUwNzA3MDkwVSwgMHg3YzNlM2U0MlUsCi0gICAgMHg3MWI1YjVjNFUsIDB4Y2M2NjY2YWFVLCAweDkwNDg0OGQ4VSwgMHgwNjAzMDMwNVUsIDB4ZjdmNmY2MDFVLAotICAgIDB4MWMwZTBlMTJVLCAweGMyNjE2MWEzVSwgMHg2YTM1MzU1ZlUsIDB4YWU1NzU3ZjlVLCAweDY5YjliOWQwVSwKLSAgICAweDE3ODY4NjkxVSwgMHg5OWMxYzE1OFUsIDB4M2ExZDFkMjdVLCAweDI3OWU5ZWI5VSwgMHhkOWUxZTEzOFUsCi0gICAgMHhlYmY4ZjgxM1UsIDB4MmI5ODk4YjNVLCAweDIyMTExMTMzVSwgMHhkMjY5NjliYlUsIDB4YTlkOWQ5NzBVLAotICAgIDB4MDc4ZThlODlVLCAweDMzOTQ5NGE3VSwgMHgyZDliOWJiNlUsIDB4M2MxZTFlMjJVLCAweDE1ODc4NzkyVSwKLSAgICAweGM5ZTllOTIwVSwgMHg4N2NlY2U0OVUsIDB4YWE1NTU1ZmZVLCAweDUwMjgyODc4VSwgMHhhNWRmZGY3YVUsCi0gICAgMHgwMzhjOGM4ZlUsIDB4NTlhMWExZjhVLCAweDA5ODk4OTgwVSwgMHgxYTBkMGQxN1UsIDB4NjViZmJmZGFVLAotICAgIDB4ZDdlNmU2MzFVLCAweDg0NDI0MmM2VSwgMHhkMDY4NjhiOFUsIDB4ODI0MTQxYzNVLCAweDI5OTk5OWIwVSwKLSAgICAweDVhMmQyZDc3VSwgMHgxZTBmMGYxMVUsIDB4N2JiMGIwY2JVLCAweGE4NTQ1NGZjVSwgMHg2ZGJiYmJkNlUsCi0gICAgMHgyYzE2MTYzYVUsCi19Owotc3RhdGljIGNvbnN0IHVpbnQzMl90IFRlMVsyNTZdID0gewotICAgIDB4YTVjNjYzNjNVLCAweDg0Zjg3YzdjVSwgMHg5OWVlNzc3N1UsIDB4OGRmNjdiN2JVLCAweDBkZmZmMmYyVSwKLSAgICAweGJkZDY2YjZiVSwgMHhiMWRlNmY2ZlUsIDB4NTQ5MWM1YzVVLCAweDUwNjAzMDMwVSwgMHgwMzAyMDEwMVUsCi0gICAgMHhhOWNlNjc2N1UsIDB4N2Q1NjJiMmJVLCAweDE5ZTdmZWZlVSwgMHg2MmI1ZDdkN1UsIDB4ZTY0ZGFiYWJVLAotICAgIDB4OWFlYzc2NzZVLCAweDQ1OGZjYWNhVSwgMHg5ZDFmODI4MlUsIDB4NDA4OWM5YzlVLCAweDg3ZmE3ZDdkVSwKLSAgICAweDE1ZWZmYWZhVSwgMHhlYmIyNTk1OVUsIDB4Yzk4ZTQ3NDdVLCAweDBiZmJmMGYwVSwgMHhlYzQxYWRhZFUsCi0gICAgMHg2N2IzZDRkNFUsIDB4ZmQ1ZmEyYTJVLCAweGVhNDVhZmFmVSwgMHhiZjIzOWM5Y1UsIDB4Zjc1M2E0YTRVLAotICAgIDB4OTZlNDcyNzJVLCAweDViOWJjMGMwVSwgMHhjMjc1YjdiN1UsIDB4MWNlMWZkZmRVLCAweGFlM2Q5MzkzVSwKLSAgICAweDZhNGMyNjI2VSwgMHg1YTZjMzYzNlUsIDB4NDE3ZTNmM2ZVLCAweDAyZjVmN2Y3VSwgMHg0ZjgzY2NjY1UsCi0gICAgMHg1YzY4MzQzNFUsIDB4ZjQ1MWE1YTVVLCAweDM0ZDFlNWU1VSwgMHgwOGY5ZjFmMVUsIDB4OTNlMjcxNzFVLAotICAgIDB4NzNhYmQ4ZDhVLCAweDUzNjIzMTMxVSwgMHgzZjJhMTUxNVUsIDB4MGMwODA0MDRVLCAweDUyOTVjN2M3VSwKLSAgICAweDY1NDYyMzIzVSwgMHg1ZTlkYzNjM1UsIDB4MjgzMDE4MThVLCAweGExMzc5Njk2VSwgMHgwZjBhMDUwNVUsCi0gICAgMHhiNTJmOWE5YVUsIDB4MDkwZTA3MDdVLCAweDM2MjQxMjEyVSwgMHg5YjFiODA4MFUsIDB4M2RkZmUyZTJVLAotICAgIDB4MjZjZGViZWJVLCAweDY5NGUyNzI3VSwgMHhjZDdmYjJiMlUsIDB4OWZlYTc1NzVVLCAweDFiMTIwOTA5VSwKLSAgICAweDllMWQ4MzgzVSwgMHg3NDU4MmMyY1UsIDB4MmUzNDFhMWFVLCAweDJkMzYxYjFiVSwgMHhiMmRjNmU2ZVUsCi0gICAgMHhlZWI0NWE1YVUsIDB4ZmI1YmEwYTBVLCAweGY2YTQ1MjUyVSwgMHg0ZDc2M2IzYlUsIDB4NjFiN2Q2ZDZVLAotICAgIDB4Y2U3ZGIzYjNVLCAweDdiNTIyOTI5VSwgMHgzZWRkZTNlM1UsIDB4NzE1ZTJmMmZVLCAweDk3MTM4NDg0VSwKLSAgICAweGY1YTY1MzUzVSwgMHg2OGI5ZDFkMVUsIDB4MDAwMDAwMDBVLCAweDJjYzFlZGVkVSwgMHg2MDQwMjAyMFUsCi0gICAgMHgxZmUzZmNmY1UsIDB4Yzg3OWIxYjFVLCAweGVkYjY1YjViVSwgMHhiZWQ0NmE2YVUsIDB4NDY4ZGNiY2JVLAotICAgIDB4ZDk2N2JlYmVVLCAweDRiNzIzOTM5VSwgMHhkZTk0NGE0YVUsIDB4ZDQ5ODRjNGNVLCAweGU4YjA1ODU4VSwKLSAgICAweDRhODVjZmNmVSwgMHg2YmJiZDBkMFUsIDB4MmFjNWVmZWZVLCAweGU1NGZhYWFhVSwgMHgxNmVkZmJmYlUsCi0gICAgMHhjNTg2NDM0M1UsIDB4ZDc5YTRkNGRVLCAweDU1NjYzMzMzVSwgMHg5NDExODU4NVUsIDB4Y2Y4YTQ1NDVVLAotICAgIDB4MTBlOWY5ZjlVLCAweDA2MDQwMjAyVSwgMHg4MWZlN2Y3ZlUsIDB4ZjBhMDUwNTBVLCAweDQ0NzgzYzNjVSwKLSAgICAweGJhMjU5ZjlmVSwgMHhlMzRiYThhOFUsIDB4ZjNhMjUxNTFVLCAweGZlNWRhM2EzVSwgMHhjMDgwNDA0MFUsCi0gICAgMHg4YTA1OGY4ZlUsIDB4YWQzZjkyOTJVLCAweGJjMjE5ZDlkVSwgMHg0ODcwMzgzOFUsIDB4MDRmMWY1ZjVVLAotICAgIDB4ZGY2M2JjYmNVLCAweGMxNzdiNmI2VSwgMHg3NWFmZGFkYVUsIDB4NjM0MjIxMjFVLCAweDMwMjAxMDEwVSwKLSAgICAweDFhZTVmZmZmVSwgMHgwZWZkZjNmM1UsIDB4NmRiZmQyZDJVLCAweDRjODFjZGNkVSwgMHgxNDE4MGMwY1UsCi0gICAgMHgzNTI2MTMxM1UsIDB4MmZjM2VjZWNVLCAweGUxYmU1ZjVmVSwgMHhhMjM1OTc5N1UsIDB4Y2M4ODQ0NDRVLAotICAgIDB4MzkyZTE3MTdVLCAweDU3OTNjNGM0VSwgMHhmMjU1YTdhN1UsIDB4ODJmYzdlN2VVLCAweDQ3N2EzZDNkVSwKLSAgICAweGFjYzg2NDY0VSwgMHhlN2JhNWQ1ZFUsIDB4MmIzMjE5MTlVLCAweDk1ZTY3MzczVSwgMHhhMGMwNjA2MFUsCi0gICAgMHg5ODE5ODE4MVUsIDB4ZDE5ZTRmNGZVLCAweDdmYTNkY2RjVSwgMHg2NjQ0MjIyMlUsIDB4N2U1NDJhMmFVLAotICAgIDB4YWIzYjkwOTBVLCAweDgzMGI4ODg4VSwgMHhjYThjNDY0NlUsIDB4MjljN2VlZWVVLCAweGQzNmJiOGI4VSwKLSAgICAweDNjMjgxNDE0VSwgMHg3OWE3ZGVkZVUsIDB4ZTJiYzVlNWVVLCAweDFkMTYwYjBiVSwgMHg3NmFkZGJkYlUsCi0gICAgMHgzYmRiZTBlMFUsIDB4NTY2NDMyMzJVLCAweDRlNzQzYTNhVSwgMHgxZTE0MGEwYVUsIDB4ZGI5MjQ5NDlVLAotICAgIDB4MGEwYzA2MDZVLCAweDZjNDgyNDI0VSwgMHhlNGI4NWM1Y1UsIDB4NWQ5ZmMyYzJVLCAweDZlYmRkM2QzVSwKLSAgICAweGVmNDNhY2FjVSwgMHhhNmM0NjI2MlUsIDB4YTgzOTkxOTFVLCAweGE0MzE5NTk1VSwgMHgzN2QzZTRlNFUsCi0gICAgMHg4YmYyNzk3OVUsIDB4MzJkNWU3ZTdVLCAweDQzOGJjOGM4VSwgMHg1OTZlMzczN1UsIDB4YjdkYTZkNmRVLAotICAgIDB4OGMwMThkOGRVLCAweDY0YjFkNWQ1VSwgMHhkMjljNGU0ZVUsIDB4ZTA0OWE5YTlVLCAweGI0ZDg2YzZjVSwKLSAgICAweGZhYWM1NjU2VSwgMHgwN2YzZjRmNFUsIDB4MjVjZmVhZWFVLCAweGFmY2E2NTY1VSwgMHg4ZWY0N2E3YVUsCi0gICAgMHhlOTQ3YWVhZVUsIDB4MTgxMDA4MDhVLCAweGQ1NmZiYWJhVSwgMHg4OGYwNzg3OFUsIDB4NmY0YTI1MjVVLAotICAgIDB4NzI1YzJlMmVVLCAweDI0MzgxYzFjVSwgMHhmMTU3YTZhNlUsIDB4Yzc3M2I0YjRVLCAweDUxOTdjNmM2VSwKLSAgICAweDIzY2JlOGU4VSwgMHg3Y2ExZGRkZFUsIDB4OWNlODc0NzRVLCAweDIxM2UxZjFmVSwgMHhkZDk2NGI0YlUsCi0gICAgMHhkYzYxYmRiZFUsIDB4ODYwZDhiOGJVLCAweDg1MGY4YThhVSwgMHg5MGUwNzA3MFUsIDB4NDI3YzNlM2VVLAotICAgIDB4YzQ3MWI1YjVVLCAweGFhY2M2NjY2VSwgMHhkODkwNDg0OFUsIDB4MDUwNjAzMDNVLCAweDAxZjdmNmY2VSwKLSAgICAweDEyMWMwZTBlVSwgMHhhM2MyNjE2MVUsIDB4NWY2YTM1MzVVLCAweGY5YWU1NzU3VSwgMHhkMDY5YjliOVUsCi0gICAgMHg5MTE3ODY4NlUsIDB4NTg5OWMxYzFVLCAweDI3M2ExZDFkVSwgMHhiOTI3OWU5ZVUsIDB4MzhkOWUxZTFVLAotICAgIDB4MTNlYmY4ZjhVLCAweGIzMmI5ODk4VSwgMHgzMzIyMTExMVUsIDB4YmJkMjY5NjlVLCAweDcwYTlkOWQ5VSwKLSAgICAweDg5MDc4ZThlVSwgMHhhNzMzOTQ5NFUsIDB4YjYyZDliOWJVLCAweDIyM2MxZTFlVSwgMHg5MjE1ODc4N1UsCi0gICAgMHgyMGM5ZTllOVUsIDB4NDk4N2NlY2VVLCAweGZmYWE1NTU1VSwgMHg3ODUwMjgyOFUsIDB4N2FhNWRmZGZVLAotICAgIDB4OGYwMzhjOGNVLCAweGY4NTlhMWExVSwgMHg4MDA5ODk4OVUsIDB4MTcxYTBkMGRVLCAweGRhNjViZmJmVSwKLSAgICAweDMxZDdlNmU2VSwgMHhjNjg0NDI0MlUsIDB4YjhkMDY4NjhVLCAweGMzODI0MTQxVSwgMHhiMDI5OTk5OVUsCi0gICAgMHg3NzVhMmQyZFUsIDB4MTExZTBmMGZVLCAweGNiN2JiMGIwVSwgMHhmY2E4NTQ1NFUsIDB4ZDY2ZGJiYmJVLAotICAgIDB4M2EyYzE2MTZVLAotfTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBUZTJbMjU2XSA9IHsKLSAgICAweDYzYTVjNjYzVSwgMHg3Yzg0Zjg3Y1UsIDB4Nzc5OWVlNzdVLCAweDdiOGRmNjdiVSwgMHhmMjBkZmZmMlUsCi0gICAgMHg2YmJkZDY2YlUsIDB4NmZiMWRlNmZVLCAweGM1NTQ5MWM1VSwgMHgzMDUwNjAzMFUsIDB4MDEwMzAyMDFVLAotICAgIDB4NjdhOWNlNjdVLCAweDJiN2Q1NjJiVSwgMHhmZTE5ZTdmZVUsIDB4ZDc2MmI1ZDdVLCAweGFiZTY0ZGFiVSwKLSAgICAweDc2OWFlYzc2VSwgMHhjYTQ1OGZjYVUsIDB4ODI5ZDFmODJVLCAweGM5NDA4OWM5VSwgMHg3ZDg3ZmE3ZFUsCi0gICAgMHhmYTE1ZWZmYVUsIDB4NTllYmIyNTlVLCAweDQ3Yzk4ZTQ3VSwgMHhmMDBiZmJmMFUsIDB4YWRlYzQxYWRVLAotICAgIDB4ZDQ2N2IzZDRVLCAweGEyZmQ1ZmEyVSwgMHhhZmVhNDVhZlUsIDB4OWNiZjIzOWNVLCAweGE0Zjc1M2E0VSwKLSAgICAweDcyOTZlNDcyVSwgMHhjMDViOWJjMFUsIDB4YjdjMjc1YjdVLCAweGZkMWNlMWZkVSwgMHg5M2FlM2Q5M1UsCi0gICAgMHgyNjZhNGMyNlUsIDB4MzY1YTZjMzZVLCAweDNmNDE3ZTNmVSwgMHhmNzAyZjVmN1UsIDB4Y2M0ZjgzY2NVLAotICAgIDB4MzQ1YzY4MzRVLCAweGE1ZjQ1MWE1VSwgMHhlNTM0ZDFlNVUsIDB4ZjEwOGY5ZjFVLCAweDcxOTNlMjcxVSwKLSAgICAweGQ4NzNhYmQ4VSwgMHgzMTUzNjIzMVUsIDB4MTUzZjJhMTVVLCAweDA0MGMwODA0VSwgMHhjNzUyOTVjN1UsCi0gICAgMHgyMzY1NDYyM1UsIDB4YzM1ZTlkYzNVLCAweDE4MjgzMDE4VSwgMHg5NmExMzc5NlUsIDB4MDUwZjBhMDVVLAotICAgIDB4OWFiNTJmOWFVLCAweDA3MDkwZTA3VSwgMHgxMjM2MjQxMlUsIDB4ODA5YjFiODBVLCAweGUyM2RkZmUyVSwKLSAgICAweGViMjZjZGViVSwgMHgyNzY5NGUyN1UsIDB4YjJjZDdmYjJVLCAweDc1OWZlYTc1VSwgMHgwOTFiMTIwOVUsCi0gICAgMHg4MzllMWQ4M1UsIDB4MmM3NDU4MmNVLCAweDFhMmUzNDFhVSwgMHgxYjJkMzYxYlUsIDB4NmViMmRjNmVVLAotICAgIDB4NWFlZWI0NWFVLCAweGEwZmI1YmEwVSwgMHg1MmY2YTQ1MlUsIDB4M2I0ZDc2M2JVLCAweGQ2NjFiN2Q2VSwKLSAgICAweGIzY2U3ZGIzVSwgMHgyOTdiNTIyOVUsIDB4ZTMzZWRkZTNVLCAweDJmNzE1ZTJmVSwgMHg4NDk3MTM4NFUsCi0gICAgMHg1M2Y1YTY1M1UsIDB4ZDE2OGI5ZDFVLCAweDAwMDAwMDAwVSwgMHhlZDJjYzFlZFUsIDB4MjA2MDQwMjBVLAotICAgIDB4ZmMxZmUzZmNVLCAweGIxYzg3OWIxVSwgMHg1YmVkYjY1YlUsIDB4NmFiZWQ0NmFVLCAweGNiNDY4ZGNiVSwKLSAgICAweGJlZDk2N2JlVSwgMHgzOTRiNzIzOVUsIDB4NGFkZTk0NGFVLCAweDRjZDQ5ODRjVSwgMHg1OGU4YjA1OFUsCi0gICAgMHhjZjRhODVjZlUsIDB4ZDA2YmJiZDBVLCAweGVmMmFjNWVmVSwgMHhhYWU1NGZhYVUsIDB4ZmIxNmVkZmJVLAotICAgIDB4NDNjNTg2NDNVLCAweDRkZDc5YTRkVSwgMHgzMzU1NjYzM1UsIDB4ODU5NDExODVVLCAweDQ1Y2Y4YTQ1VSwKLSAgICAweGY5MTBlOWY5VSwgMHgwMjA2MDQwMlUsIDB4N2Y4MWZlN2ZVLCAweDUwZjBhMDUwVSwgMHgzYzQ0NzgzY1UsCi0gICAgMHg5ZmJhMjU5ZlUsIDB4YThlMzRiYThVLCAweDUxZjNhMjUxVSwgMHhhM2ZlNWRhM1UsIDB4NDBjMDgwNDBVLAotICAgIDB4OGY4YTA1OGZVLCAweDkyYWQzZjkyVSwgMHg5ZGJjMjE5ZFUsIDB4Mzg0ODcwMzhVLCAweGY1MDRmMWY1VSwKLSAgICAweGJjZGY2M2JjVSwgMHhiNmMxNzdiNlUsIDB4ZGE3NWFmZGFVLCAweDIxNjM0MjIxVSwgMHgxMDMwMjAxMFUsCi0gICAgMHhmZjFhZTVmZlUsIDB4ZjMwZWZkZjNVLCAweGQyNmRiZmQyVSwgMHhjZDRjODFjZFUsIDB4MGMxNDE4MGNVLAotICAgIDB4MTMzNTI2MTNVLCAweGVjMmZjM2VjVSwgMHg1ZmUxYmU1ZlUsIDB4OTdhMjM1OTdVLCAweDQ0Y2M4ODQ0VSwKLSAgICAweDE3MzkyZTE3VSwgMHhjNDU3OTNjNFUsIDB4YTdmMjU1YTdVLCAweDdlODJmYzdlVSwgMHgzZDQ3N2EzZFUsCi0gICAgMHg2NGFjYzg2NFUsIDB4NWRlN2JhNWRVLCAweDE5MmIzMjE5VSwgMHg3Mzk1ZTY3M1UsIDB4NjBhMGMwNjBVLAotICAgIDB4ODE5ODE5ODFVLCAweDRmZDE5ZTRmVSwgMHhkYzdmYTNkY1UsIDB4MjI2NjQ0MjJVLCAweDJhN2U1NDJhVSwKLSAgICAweDkwYWIzYjkwVSwgMHg4ODgzMGI4OFUsIDB4NDZjYThjNDZVLCAweGVlMjljN2VlVSwgMHhiOGQzNmJiOFUsCi0gICAgMHgxNDNjMjgxNFUsIDB4ZGU3OWE3ZGVVLCAweDVlZTJiYzVlVSwgMHgwYjFkMTYwYlUsIDB4ZGI3NmFkZGJVLAotICAgIDB4ZTAzYmRiZTBVLCAweDMyNTY2NDMyVSwgMHgzYTRlNzQzYVUsIDB4MGExZTE0MGFVLCAweDQ5ZGI5MjQ5VSwKLSAgICAweDA2MGEwYzA2VSwgMHgyNDZjNDgyNFUsIDB4NWNlNGI4NWNVLCAweGMyNWQ5ZmMyVSwgMHhkMzZlYmRkM1UsCi0gICAgMHhhY2VmNDNhY1UsIDB4NjJhNmM0NjJVLCAweDkxYTgzOTkxVSwgMHg5NWE0MzE5NVUsIDB4ZTQzN2QzZTRVLAotICAgIDB4Nzk4YmYyNzlVLCAweGU3MzJkNWU3VSwgMHhjODQzOGJjOFUsIDB4Mzc1OTZlMzdVLCAweDZkYjdkYTZkVSwKLSAgICAweDhkOGMwMThkVSwgMHhkNTY0YjFkNVUsIDB4NGVkMjljNGVVLCAweGE5ZTA0OWE5VSwgMHg2Y2I0ZDg2Y1UsCi0gICAgMHg1NmZhYWM1NlUsIDB4ZjQwN2YzZjRVLCAweGVhMjVjZmVhVSwgMHg2NWFmY2E2NVUsIDB4N2E4ZWY0N2FVLAotICAgIDB4YWVlOTQ3YWVVLCAweDA4MTgxMDA4VSwgMHhiYWQ1NmZiYVUsIDB4Nzg4OGYwNzhVLCAweDI1NmY0YTI1VSwKLSAgICAweDJlNzI1YzJlVSwgMHgxYzI0MzgxY1UsIDB4YTZmMTU3YTZVLCAweGI0Yzc3M2I0VSwgMHhjNjUxOTdjNlUsCi0gICAgMHhlODIzY2JlOFUsIDB4ZGQ3Y2ExZGRVLCAweDc0OWNlODc0VSwgMHgxZjIxM2UxZlUsIDB4NGJkZDk2NGJVLAotICAgIDB4YmRkYzYxYmRVLCAweDhiODYwZDhiVSwgMHg4YTg1MGY4YVUsIDB4NzA5MGUwNzBVLCAweDNlNDI3YzNlVSwKLSAgICAweGI1YzQ3MWI1VSwgMHg2NmFhY2M2NlUsIDB4NDhkODkwNDhVLCAweDAzMDUwNjAzVSwgMHhmNjAxZjdmNlUsCi0gICAgMHgwZTEyMWMwZVUsIDB4NjFhM2MyNjFVLCAweDM1NWY2YTM1VSwgMHg1N2Y5YWU1N1UsIDB4YjlkMDY5YjlVLAotICAgIDB4ODY5MTE3ODZVLCAweGMxNTg5OWMxVSwgMHgxZDI3M2ExZFUsIDB4OWViOTI3OWVVLCAweGUxMzhkOWUxVSwKLSAgICAweGY4MTNlYmY4VSwgMHg5OGIzMmI5OFUsIDB4MTEzMzIyMTFVLCAweDY5YmJkMjY5VSwgMHhkOTcwYTlkOVUsCi0gICAgMHg4ZTg5MDc4ZVUsIDB4OTRhNzMzOTRVLCAweDliYjYyZDliVSwgMHgxZTIyM2MxZVUsIDB4ODc5MjE1ODdVLAotICAgIDB4ZTkyMGM5ZTlVLCAweGNlNDk4N2NlVSwgMHg1NWZmYWE1NVUsIDB4Mjg3ODUwMjhVLCAweGRmN2FhNWRmVSwKLSAgICAweDhjOGYwMzhjVSwgMHhhMWY4NTlhMVUsIDB4ODk4MDA5ODlVLCAweDBkMTcxYTBkVSwgMHhiZmRhNjViZlUsCi0gICAgMHhlNjMxZDdlNlUsIDB4NDJjNjg0NDJVLCAweDY4YjhkMDY4VSwgMHg0MWMzODI0MVUsIDB4OTliMDI5OTlVLAotICAgIDB4MmQ3NzVhMmRVLCAweDBmMTExZTBmVSwgMHhiMGNiN2JiMFUsIDB4NTRmY2E4NTRVLCAweGJiZDY2ZGJiVSwKLSAgICAweDE2M2EyYzE2VSwKLX07Ci1zdGF0aWMgY29uc3QgdWludDMyX3QgVGUzWzI1Nl0gPSB7Ci0gICAgMHg2MzYzYTVjNlUsIDB4N2M3Yzg0ZjhVLCAweDc3Nzc5OWVlVSwgMHg3YjdiOGRmNlUsIDB4ZjJmMjBkZmZVLAotICAgIDB4NmI2YmJkZDZVLCAweDZmNmZiMWRlVSwgMHhjNWM1NTQ5MVUsIDB4MzAzMDUwNjBVLCAweDAxMDEwMzAyVSwKLSAgICAweDY3NjdhOWNlVSwgMHgyYjJiN2Q1NlUsIDB4ZmVmZTE5ZTdVLCAweGQ3ZDc2MmI1VSwgMHhhYmFiZTY0ZFUsCi0gICAgMHg3Njc2OWFlY1UsIDB4Y2FjYTQ1OGZVLCAweDgyODI5ZDFmVSwgMHhjOWM5NDA4OVUsIDB4N2Q3ZDg3ZmFVLAotICAgIDB4ZmFmYTE1ZWZVLCAweDU5NTllYmIyVSwgMHg0NzQ3Yzk4ZVUsIDB4ZjBmMDBiZmJVLCAweGFkYWRlYzQxVSwKLSAgICAweGQ0ZDQ2N2IzVSwgMHhhMmEyZmQ1ZlUsIDB4YWZhZmVhNDVVLCAweDljOWNiZjIzVSwgMHhhNGE0Zjc1M1UsCi0gICAgMHg3MjcyOTZlNFUsIDB4YzBjMDViOWJVLCAweGI3YjdjMjc1VSwgMHhmZGZkMWNlMVUsIDB4OTM5M2FlM2RVLAotICAgIDB4MjYyNjZhNGNVLCAweDM2MzY1YTZjVSwgMHgzZjNmNDE3ZVUsIDB4ZjdmNzAyZjVVLCAweGNjY2M0ZjgzVSwKLSAgICAweDM0MzQ1YzY4VSwgMHhhNWE1ZjQ1MVUsIDB4ZTVlNTM0ZDFVLCAweGYxZjEwOGY5VSwgMHg3MTcxOTNlMlUsCi0gICAgMHhkOGQ4NzNhYlUsIDB4MzEzMTUzNjJVLCAweDE1MTUzZjJhVSwgMHgwNDA0MGMwOFUsIDB4YzdjNzUyOTVVLAotICAgIDB4MjMyMzY1NDZVLCAweGMzYzM1ZTlkVSwgMHgxODE4MjgzMFUsIDB4OTY5NmExMzdVLCAweDA1MDUwZjBhVSwKLSAgICAweDlhOWFiNTJmVSwgMHgwNzA3MDkwZVUsIDB4MTIxMjM2MjRVLCAweDgwODA5YjFiVSwgMHhlMmUyM2RkZlUsCi0gICAgMHhlYmViMjZjZFUsIDB4MjcyNzY5NGVVLCAweGIyYjJjZDdmVSwgMHg3NTc1OWZlYVUsIDB4MDkwOTFiMTJVLAotICAgIDB4ODM4MzllMWRVLCAweDJjMmM3NDU4VSwgMHgxYTFhMmUzNFUsIDB4MWIxYjJkMzZVLCAweDZlNmViMmRjVSwKLSAgICAweDVhNWFlZWI0VSwgMHhhMGEwZmI1YlUsIDB4NTI1MmY2YTRVLCAweDNiM2I0ZDc2VSwgMHhkNmQ2NjFiN1UsCi0gICAgMHhiM2IzY2U3ZFUsIDB4MjkyOTdiNTJVLCAweGUzZTMzZWRkVSwgMHgyZjJmNzE1ZVUsIDB4ODQ4NDk3MTNVLAotICAgIDB4NTM1M2Y1YTZVLCAweGQxZDE2OGI5VSwgMHgwMDAwMDAwMFUsIDB4ZWRlZDJjYzFVLCAweDIwMjA2MDQwVSwKLSAgICAweGZjZmMxZmUzVSwgMHhiMWIxYzg3OVUsIDB4NWI1YmVkYjZVLCAweDZhNmFiZWQ0VSwgMHhjYmNiNDY4ZFUsCi0gICAgMHhiZWJlZDk2N1UsIDB4MzkzOTRiNzJVLCAweDRhNGFkZTk0VSwgMHg0YzRjZDQ5OFUsIDB4NTg1OGU4YjBVLAotICAgIDB4Y2ZjZjRhODVVLCAweGQwZDA2YmJiVSwgMHhlZmVmMmFjNVUsIDB4YWFhYWU1NGZVLCAweGZiZmIxNmVkVSwKLSAgICAweDQzNDNjNTg2VSwgMHg0ZDRkZDc5YVUsIDB4MzMzMzU1NjZVLCAweDg1ODU5NDExVSwgMHg0NTQ1Y2Y4YVUsCi0gICAgMHhmOWY5MTBlOVUsIDB4MDIwMjA2MDRVLCAweDdmN2Y4MWZlVSwgMHg1MDUwZjBhMFUsIDB4M2MzYzQ0NzhVLAotICAgIDB4OWY5ZmJhMjVVLCAweGE4YThlMzRiVSwgMHg1MTUxZjNhMlUsIDB4YTNhM2ZlNWRVLCAweDQwNDBjMDgwVSwKLSAgICAweDhmOGY4YTA1VSwgMHg5MjkyYWQzZlUsIDB4OWQ5ZGJjMjFVLCAweDM4Mzg0ODcwVSwgMHhmNWY1MDRmMVUsCi0gICAgMHhiY2JjZGY2M1UsIDB4YjZiNmMxNzdVLCAweGRhZGE3NWFmVSwgMHgyMTIxNjM0MlUsIDB4MTAxMDMwMjBVLAotICAgIDB4ZmZmZjFhZTVVLCAweGYzZjMwZWZkVSwgMHhkMmQyNmRiZlUsIDB4Y2RjZDRjODFVLCAweDBjMGMxNDE4VSwKLSAgICAweDEzMTMzNTI2VSwgMHhlY2VjMmZjM1UsIDB4NWY1ZmUxYmVVLCAweDk3OTdhMjM1VSwgMHg0NDQ0Y2M4OFUsCi0gICAgMHgxNzE3MzkyZVUsIDB4YzRjNDU3OTNVLCAweGE3YTdmMjU1VSwgMHg3ZTdlODJmY1UsIDB4M2QzZDQ3N2FVLAotICAgIDB4NjQ2NGFjYzhVLCAweDVkNWRlN2JhVSwgMHgxOTE5MmIzMlUsIDB4NzM3Mzk1ZTZVLCAweDYwNjBhMGMwVSwKLSAgICAweDgxODE5ODE5VSwgMHg0ZjRmZDE5ZVUsIDB4ZGNkYzdmYTNVLCAweDIyMjI2NjQ0VSwgMHgyYTJhN2U1NFUsCi0gICAgMHg5MDkwYWIzYlUsIDB4ODg4ODgzMGJVLCAweDQ2NDZjYThjVSwgMHhlZWVlMjljN1UsIDB4YjhiOGQzNmJVLAotICAgIDB4MTQxNDNjMjhVLCAweGRlZGU3OWE3VSwgMHg1ZTVlZTJiY1UsIDB4MGIwYjFkMTZVLCAweGRiZGI3NmFkVSwKLSAgICAweGUwZTAzYmRiVSwgMHgzMjMyNTY2NFUsIDB4M2EzYTRlNzRVLCAweDBhMGExZTE0VSwgMHg0OTQ5ZGI5MlUsCi0gICAgMHgwNjA2MGEwY1UsIDB4MjQyNDZjNDhVLCAweDVjNWNlNGI4VSwgMHhjMmMyNWQ5ZlUsIDB4ZDNkMzZlYmRVLAotICAgIDB4YWNhY2VmNDNVLCAweDYyNjJhNmM0VSwgMHg5MTkxYTgzOVUsIDB4OTU5NWE0MzFVLCAweGU0ZTQzN2QzVSwKLSAgICAweDc5Nzk4YmYyVSwgMHhlN2U3MzJkNVUsIDB4YzhjODQzOGJVLCAweDM3Mzc1OTZlVSwgMHg2ZDZkYjdkYVUsCi0gICAgMHg4ZDhkOGMwMVUsIDB4ZDVkNTY0YjFVLCAweDRlNGVkMjljVSwgMHhhOWE5ZTA0OVUsIDB4NmM2Y2I0ZDhVLAotICAgIDB4NTY1NmZhYWNVLCAweGY0ZjQwN2YzVSwgMHhlYWVhMjVjZlUsIDB4NjU2NWFmY2FVLCAweDdhN2E4ZWY0VSwKLSAgICAweGFlYWVlOTQ3VSwgMHgwODA4MTgxMFUsIDB4YmFiYWQ1NmZVLCAweDc4Nzg4OGYwVSwgMHgyNTI1NmY0YVUsCi0gICAgMHgyZTJlNzI1Y1UsIDB4MWMxYzI0MzhVLCAweGE2YTZmMTU3VSwgMHhiNGI0Yzc3M1UsIDB4YzZjNjUxOTdVLAotICAgIDB4ZThlODIzY2JVLCAweGRkZGQ3Y2ExVSwgMHg3NDc0OWNlOFUsIDB4MWYxZjIxM2VVLCAweDRiNGJkZDk2VSwKLSAgICAweGJkYmRkYzYxVSwgMHg4YjhiODYwZFUsIDB4OGE4YTg1MGZVLCAweDcwNzA5MGUwVSwgMHgzZTNlNDI3Y1UsCi0gICAgMHhiNWI1YzQ3MVUsIDB4NjY2NmFhY2NVLCAweDQ4NDhkODkwVSwgMHgwMzAzMDUwNlUsIDB4ZjZmNjAxZjdVLAotICAgIDB4MGUwZTEyMWNVLCAweDYxNjFhM2MyVSwgMHgzNTM1NWY2YVUsIDB4NTc1N2Y5YWVVLCAweGI5YjlkMDY5VSwKLSAgICAweDg2ODY5MTE3VSwgMHhjMWMxNTg5OVUsIDB4MWQxZDI3M2FVLCAweDllOWViOTI3VSwgMHhlMWUxMzhkOVUsCi0gICAgMHhmOGY4MTNlYlUsIDB4OTg5OGIzMmJVLCAweDExMTEzMzIyVSwgMHg2OTY5YmJkMlUsIDB4ZDlkOTcwYTlVLAotICAgIDB4OGU4ZTg5MDdVLCAweDk0OTRhNzMzVSwgMHg5YjliYjYyZFUsIDB4MWUxZTIyM2NVLCAweDg3ODc5MjE1VSwKLSAgICAweGU5ZTkyMGM5VSwgMHhjZWNlNDk4N1UsIDB4NTU1NWZmYWFVLCAweDI4Mjg3ODUwVSwgMHhkZmRmN2FhNVUsCi0gICAgMHg4YzhjOGYwM1UsIDB4YTFhMWY4NTlVLCAweDg5ODk4MDA5VSwgMHgwZDBkMTcxYVUsIDB4YmZiZmRhNjVVLAotICAgIDB4ZTZlNjMxZDdVLCAweDQyNDJjNjg0VSwgMHg2ODY4YjhkMFUsIDB4NDE0MWMzODJVLCAweDk5OTliMDI5VSwKLSAgICAweDJkMmQ3NzVhVSwgMHgwZjBmMTExZVUsIDB4YjBiMGNiN2JVLCAweDU0NTRmY2E4VSwgMHhiYmJiZDY2ZFUsCi0gICAgMHgxNjE2M2EyY1UsCi19Owotc3RhdGljIGNvbnN0IHVpbnQzMl90IFRkMFsyNTZdID0gewotICAgIDB4NTFmNGE3NTBVLCAweDdlNDE2NTUzVSwgMHgxYTE3YTRjM1UsIDB4M2EyNzVlOTZVLCAweDNiYWI2YmNiVSwKLSAgICAweDFmOWQ0NWYxVSwgMHhhY2ZhNThhYlUsIDB4NGJlMzAzOTNVLCAweDIwMzBmYTU1VSwgMHhhZDc2NmRmNlUsCi0gICAgMHg4OGNjNzY5MVUsIDB4ZjUwMjRjMjVVLCAweDRmZTVkN2ZjVSwgMHhjNTJhY2JkN1UsIDB4MjYzNTQ0ODBVLAotICAgIDB4YjU2MmEzOGZVLCAweGRlYjE1YTQ5VSwgMHgyNWJhMWI2N1UsIDB4NDVlYTBlOThVLCAweDVkZmVjMGUxVSwKLSAgICAweGMzMmY3NTAyVSwgMHg4MTRjZjAxMlUsIDB4OGQ0Njk3YTNVLCAweDZiZDNmOWM2VSwgMHgwMzhmNWZlN1UsCi0gICAgMHgxNTkyOWM5NVUsIDB4YmY2ZDdhZWJVLCAweDk1NTI1OWRhVSwgMHhkNGJlODMyZFUsIDB4NTg3NDIxZDNVLAotICAgIDB4NDllMDY5MjlVLCAweDhlYzljODQ0VSwgMHg3NWMyODk2YVUsIDB4ZjQ4ZTc5NzhVLCAweDk5NTgzZTZiVSwKLSAgICAweDI3Yjk3MWRkVSwgMHhiZWUxNGZiNlUsIDB4ZjA4OGFkMTdVLCAweGM5MjBhYzY2VSwgMHg3ZGNlM2FiNFUsCi0gICAgMHg2M2RmNGExOFUsIDB4ZTUxYTMxODJVLCAweDk3NTEzMzYwVSwgMHg2MjUzN2Y0NVUsIDB4YjE2NDc3ZTBVLAotICAgIDB4YmI2YmFlODRVLCAweGZlODFhMDFjVSwgMHhmOTA4MmI5NFUsIDB4NzA0ODY4NThVLCAweDhmNDVmZDE5VSwKLSAgICAweDk0ZGU2Yzg3VSwgMHg1MjdiZjhiN1UsIDB4YWI3M2QzMjNVLCAweDcyNGIwMmUyVSwgMHhlMzFmOGY1N1UsCi0gICAgMHg2NjU1YWIyYVUsIDB4YjJlYjI4MDdVLCAweDJmYjVjMjAzVSwgMHg4NmM1N2I5YVUsIDB4ZDMzNzA4YTVVLAotICAgIDB4MzAyODg3ZjJVLCAweDIzYmZhNWIyVSwgMHgwMjAzNmFiYVUsIDB4ZWQxNjgyNWNVLCAweDhhY2YxYzJiVSwKLSAgICAweGE3NzliNDkyVSwgMHhmMzA3ZjJmMFUsIDB4NGU2OWUyYTFVLCAweDY1ZGFmNGNkVSwgMHgwNjA1YmVkNVUsCi0gICAgMHhkMTM0NjIxZlUsIDB4YzRhNmZlOGFVLCAweDM0MmU1MzlkVSwgMHhhMmYzNTVhMFUsIDB4MDU4YWUxMzJVLAotICAgIDB4YTRmNmViNzVVLCAweDBiODNlYzM5VSwgMHg0MDYwZWZhYVUsIDB4NWU3MTlmMDZVLCAweGJkNmUxMDUxVSwKLSAgICAweDNlMjE4YWY5VSwgMHg5NmRkMDYzZFUsIDB4ZGQzZTA1YWVVLCAweDRkZTZiZDQ2VSwgMHg5MTU0OGRiNVUsCi0gICAgMHg3MWM0NWQwNVUsIDB4MDQwNmQ0NmZVLCAweDYwNTAxNWZmVSwgMHgxOTk4ZmIyNFUsIDB4ZDZiZGU5OTdVLAotICAgIDB4ODk0MDQzY2NVLCAweDY3ZDk5ZTc3VSwgMHhiMGU4NDJiZFUsIDB4MDc4OThiODhVLCAweGU3MTk1YjM4VSwKLSAgICAweDc5YzhlZWRiVSwgMHhhMTdjMGE0N1UsIDB4N2M0MjBmZTlVLCAweGY4ODQxZWM5VSwgMHgwMDAwMDAwMFUsCi0gICAgMHgwOTgwODY4M1UsIDB4MzIyYmVkNDhVLCAweDFlMTE3MGFjVSwgMHg2YzVhNzI0ZVUsIDB4ZmQwZWZmZmJVLAotICAgIDB4MGY4NTM4NTZVLCAweDNkYWVkNTFlVSwgMHgzNjJkMzkyN1UsIDB4MGEwZmQ5NjRVLCAweDY4NWNhNjIxVSwKLSAgICAweDliNWI1NGQxVSwgMHgyNDM2MmUzYVUsIDB4MGMwYTY3YjFVLCAweDkzNTdlNzBmVSwgMHhiNGVlOTZkMlUsCi0gICAgMHgxYjliOTE5ZVUsIDB4ODBjMGM1NGZVLCAweDYxZGMyMGEyVSwgMHg1YTc3NGI2OVUsIDB4MWMxMjFhMTZVLAotICAgIDB4ZTI5M2JhMGFVLCAweGMwYTAyYWU1VSwgMHgzYzIyZTA0M1UsIDB4MTIxYjE3MWRVLCAweDBlMDkwZDBiVSwKLSAgICAweGYyOGJjN2FkVSwgMHgyZGI2YThiOVUsIDB4MTQxZWE5YzhVLCAweDU3ZjExOTg1VSwgMHhhZjc1MDc0Y1UsCi0gICAgMHhlZTk5ZGRiYlUsIDB4YTM3ZjYwZmRVLCAweGY3MDEyNjlmVSwgMHg1YzcyZjViY1UsIDB4NDQ2NjNiYzVVLAotICAgIDB4NWJmYjdlMzRVLCAweDhiNDMyOTc2VSwgMHhjYjIzYzZkY1UsIDB4YjZlZGZjNjhVLCAweGI4ZTRmMTYzVSwKLSAgICAweGQ3MzFkY2NhVSwgMHg0MjYzODUxMFUsIDB4MTM5NzIyNDBVLCAweDg0YzYxMTIwVSwgMHg4NTRhMjQ3ZFUsCi0gICAgMHhkMmJiM2RmOFUsIDB4YWVmOTMyMTFVLCAweGM3MjlhMTZkVSwgMHgxZDllMmY0YlUsIDB4ZGNiMjMwZjNVLAotICAgIDB4MGQ4NjUyZWNVLCAweDc3YzFlM2QwVSwgMHgyYmIzMTY2Y1UsIDB4YTk3MGI5OTlVLCAweDExOTQ0OGZhVSwKLSAgICAweDQ3ZTk2NDIyVSwgMHhhOGZjOGNjNFUsIDB4YTBmMDNmMWFVLCAweDU2N2QyY2Q4VSwgMHgyMjMzOTBlZlUsCi0gICAgMHg4NzQ5NGVjN1UsIDB4ZDkzOGQxYzFVLCAweDhjY2FhMmZlVSwgMHg5OGQ0MGIzNlUsIDB4YTZmNTgxY2ZVLAotICAgIDB4YTU3YWRlMjhVLCAweGRhYjc4ZTI2VSwgMHgzZmFkYmZhNFUsIDB4MmMzYTlkZTRVLCAweDUwNzg5MjBkVSwKLSAgICAweDZhNWZjYzliVSwgMHg1NDdlNDY2MlUsIDB4ZjY4ZDEzYzJVLCAweDkwZDhiOGU4VSwgMHgyZTM5Zjc1ZVUsCi0gICAgMHg4MmMzYWZmNVUsIDB4OWY1ZDgwYmVVLCAweDY5ZDA5MzdjVSwgMHg2ZmQ1MmRhOVUsIDB4Y2YyNTEyYjNVLAotICAgIDB4YzhhYzk5M2JVLCAweDEwMTg3ZGE3VSwgMHhlODljNjM2ZVUsIDB4ZGIzYmJiN2JVLCAweGNkMjY3ODA5VSwKLSAgICAweDZlNTkxOGY0VSwgMHhlYzlhYjcwMVUsIDB4ODM0ZjlhYThVLCAweGU2OTU2ZTY1VSwgMHhhYWZmZTY3ZVUsCi0gICAgMHgyMWJjY2YwOFUsIDB4ZWYxNWU4ZTZVLCAweGJhZTc5YmQ5VSwgMHg0YTZmMzZjZVUsIDB4ZWE5ZjA5ZDRVLAotICAgIDB4MjliMDdjZDZVLCAweDMxYTRiMmFmVSwgMHgyYTNmMjMzMVUsIDB4YzZhNTk0MzBVLCAweDM1YTI2NmMwVSwKLSAgICAweDc0NGViYzM3VSwgMHhmYzgyY2FhNlUsIDB4ZTA5MGQwYjBVLCAweDMzYTdkODE1VSwgMHhmMTA0OTg0YVUsCi0gICAgMHg0MWVjZGFmN1UsIDB4N2ZjZDUwMGVVLCAweDE3OTFmNjJmVSwgMHg3NjRkZDY4ZFUsIDB4NDNlZmIwNGRVLAotICAgIDB4Y2NhYTRkNTRVLCAweGU0OTYwNGRmVSwgMHg5ZWQxYjVlM1UsIDB4NGM2YTg4MWJVLCAweGMxMmMxZmI4VSwKLSAgICAweDQ2NjU1MTdmVSwgMHg5ZDVlZWEwNFUsIDB4MDE4YzM1NWRVLCAweGZhODc3NDczVSwgMHhmYjBiNDEyZVUsCi0gICAgMHhiMzY3MWQ1YVUsIDB4OTJkYmQyNTJVLCAweGU5MTA1NjMzVSwgMHg2ZGQ2NDcxM1UsIDB4OWFkNzYxOGNVLAotICAgIDB4MzdhMTBjN2FVLCAweDU5ZjgxNDhlVSwgMHhlYjEzM2M4OVUsIDB4Y2VhOTI3ZWVVLCAweGI3NjFjOTM1VSwKLSAgICAweGUxMWNlNWVkVSwgMHg3YTQ3YjEzY1UsIDB4OWNkMmRmNTlVLCAweDU1ZjI3MzNmVSwgMHgxODE0Y2U3OVUsCi0gICAgMHg3M2M3MzdiZlUsIDB4NTNmN2NkZWFVLCAweDVmZmRhYTViVSwgMHhkZjNkNmYxNFUsIDB4Nzg0NGRiODZVLAotICAgIDB4Y2FhZmYzODFVLCAweGI5NjhjNDNlVSwgMHgzODI0MzQyY1UsIDB4YzJhMzQwNWZVLCAweDE2MWRjMzcyVSwKLSAgICAweGJjZTIyNTBjVSwgMHgyODNjNDk4YlUsIDB4ZmYwZDk1NDFVLCAweDM5YTgwMTcxVSwgMHgwODBjYjNkZVUsCi0gICAgMHhkOGI0ZTQ5Y1UsIDB4NjQ1NmMxOTBVLCAweDdiY2I4NDYxVSwgMHhkNTMyYjY3MFUsIDB4NDg2YzVjNzRVLAotICAgIDB4ZDBiODU3NDJVLAotfTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBUZDFbMjU2XSA9IHsKLSAgICAweDUwNTFmNGE3VSwgMHg1MzdlNDE2NVUsIDB4YzMxYTE3YTRVLCAweDk2M2EyNzVlVSwgMHhjYjNiYWI2YlUsCi0gICAgMHhmMTFmOWQ0NVUsIDB4YWJhY2ZhNThVLCAweDkzNGJlMzAzVSwgMHg1NTIwMzBmYVUsIDB4ZjZhZDc2NmRVLAotICAgIDB4OTE4OGNjNzZVLCAweDI1ZjUwMjRjVSwgMHhmYzRmZTVkN1UsIDB4ZDdjNTJhY2JVLCAweDgwMjYzNTQ0VSwKLSAgICAweDhmYjU2MmEzVSwgMHg0OWRlYjE1YVUsIDB4NjcyNWJhMWJVLCAweDk4NDVlYTBlVSwgMHhlMTVkZmVjMFUsCi0gICAgMHgwMmMzMmY3NVUsIDB4MTI4MTRjZjBVLCAweGEzOGQ0Njk3VSwgMHhjNjZiZDNmOVUsIDB4ZTcwMzhmNWZVLAotICAgIDB4OTUxNTkyOWNVLCAweGViYmY2ZDdhVSwgMHhkYTk1NTI1OVUsIDB4MmRkNGJlODNVLCAweGQzNTg3NDIxVSwKLSAgICAweDI5NDllMDY5VSwgMHg0NDhlYzljOFUsIDB4NmE3NWMyODlVLCAweDc4ZjQ4ZTc5VSwgMHg2Yjk5NTgzZVUsCi0gICAgMHhkZDI3Yjk3MVUsIDB4YjZiZWUxNGZVLCAweDE3ZjA4OGFkVSwgMHg2NmM5MjBhY1UsIDB4YjQ3ZGNlM2FVLAotICAgIDB4MTg2M2RmNGFVLCAweDgyZTUxYTMxVSwgMHg2MDk3NTEzM1UsIDB4NDU2MjUzN2ZVLCAweGUwYjE2NDc3VSwKLSAgICAweDg0YmI2YmFlVSwgMHgxY2ZlODFhMFUsIDB4OTRmOTA4MmJVLCAweDU4NzA0ODY4VSwgMHgxOThmNDVmZFUsCi0gICAgMHg4Nzk0ZGU2Y1UsIDB4Yjc1MjdiZjhVLCAweDIzYWI3M2QzVSwgMHhlMjcyNGIwMlUsIDB4NTdlMzFmOGZVLAotICAgIDB4MmE2NjU1YWJVLCAweDA3YjJlYjI4VSwgMHgwMzJmYjVjMlUsIDB4OWE4NmM1N2JVLCAweGE1ZDMzNzA4VSwKLSAgICAweGYyMzAyODg3VSwgMHhiMjIzYmZhNVUsIDB4YmEwMjAzNmFVLCAweDVjZWQxNjgyVSwgMHgyYjhhY2YxY1UsCi0gICAgMHg5MmE3NzliNFUsIDB4ZjBmMzA3ZjJVLCAweGExNGU2OWUyVSwgMHhjZDY1ZGFmNFUsIDB4ZDUwNjA1YmVVLAotICAgIDB4MWZkMTM0NjJVLCAweDhhYzRhNmZlVSwgMHg5ZDM0MmU1M1UsIDB4YTBhMmYzNTVVLCAweDMyMDU4YWUxVSwKLSAgICAweDc1YTRmNmViVSwgMHgzOTBiODNlY1UsIDB4YWE0MDYwZWZVLCAweDA2NWU3MTlmVSwgMHg1MWJkNmUxMFUsCi0gICAgMHhmOTNlMjE4YVUsIDB4M2Q5NmRkMDZVLCAweGFlZGQzZTA1VSwgMHg0NjRkZTZiZFUsIDB4YjU5MTU0OGRVLAotICAgIDB4MDU3MWM0NWRVLCAweDZmMDQwNmQ0VSwgMHhmZjYwNTAxNVUsIDB4MjQxOTk4ZmJVLCAweDk3ZDZiZGU5VSwKLSAgICAweGNjODk0MDQzVSwgMHg3NzY3ZDk5ZVUsIDB4YmRiMGU4NDJVLCAweDg4MDc4OThiVSwgMHgzOGU3MTk1YlUsCi0gICAgMHhkYjc5YzhlZVUsIDB4NDdhMTdjMGFVLCAweGU5N2M0MjBmVSwgMHhjOWY4ODQxZVUsIDB4MDAwMDAwMDBVLAotICAgIDB4ODMwOTgwODZVLCAweDQ4MzIyYmVkVSwgMHhhYzFlMTE3MFUsIDB4NGU2YzVhNzJVLCAweGZiZmQwZWZmVSwKLSAgICAweDU2MGY4NTM4VSwgMHgxZTNkYWVkNVUsIDB4MjczNjJkMzlVLCAweDY0MGEwZmQ5VSwgMHgyMTY4NWNhNlUsCi0gICAgMHhkMTliNWI1NFUsIDB4M2EyNDM2MmVVLCAweGIxMGMwYTY3VSwgMHgwZjkzNTdlN1UsIDB4ZDJiNGVlOTZVLAotICAgIDB4OWUxYjliOTFVLCAweDRmODBjMGM1VSwgMHhhMjYxZGMyMFUsIDB4Njk1YTc3NGJVLCAweDE2MWMxMjFhVSwKLSAgICAweDBhZTI5M2JhVSwgMHhlNWMwYTAyYVUsIDB4NDMzYzIyZTBVLCAweDFkMTIxYjE3VSwgMHgwYjBlMDkwZFUsCi0gICAgMHhhZGYyOGJjN1UsIDB4YjkyZGI2YThVLCAweGM4MTQxZWE5VSwgMHg4NTU3ZjExOVUsIDB4NGNhZjc1MDdVLAotICAgIDB4YmJlZTk5ZGRVLCAweGZkYTM3ZjYwVSwgMHg5ZmY3MDEyNlUsIDB4YmM1YzcyZjVVLCAweGM1NDQ2NjNiVSwKLSAgICAweDM0NWJmYjdlVSwgMHg3NjhiNDMyOVUsIDB4ZGNjYjIzYzZVLCAweDY4YjZlZGZjVSwgMHg2M2I4ZTRmMVUsCi0gICAgMHhjYWQ3MzFkY1UsIDB4MTA0MjYzODVVLCAweDQwMTM5NzIyVSwgMHgyMDg0YzYxMVUsIDB4N2Q4NTRhMjRVLAotICAgIDB4ZjhkMmJiM2RVLCAweDExYWVmOTMyVSwgMHg2ZGM3MjlhMVUsIDB4NGIxZDllMmZVLCAweGYzZGNiMjMwVSwKLSAgICAweGVjMGQ4NjUyVSwgMHhkMDc3YzFlM1UsIDB4NmMyYmIzMTZVLCAweDk5YTk3MGI5VSwgMHhmYTExOTQ0OFUsCi0gICAgMHgyMjQ3ZTk2NFUsIDB4YzRhOGZjOGNVLCAweDFhYTBmMDNmVSwgMHhkODU2N2QyY1UsIDB4ZWYyMjMzOTBVLAotICAgIDB4Yzc4NzQ5NGVVLCAweGMxZDkzOGQxVSwgMHhmZThjY2FhMlUsIDB4MzY5OGQ0MGJVLCAweGNmYTZmNTgxVSwKLSAgICAweDI4YTU3YWRlVSwgMHgyNmRhYjc4ZVUsIDB4YTQzZmFkYmZVLCAweGU0MmMzYTlkVSwgMHgwZDUwNzg5MlUsCi0gICAgMHg5YjZhNWZjY1UsIDB4NjI1NDdlNDZVLCAweGMyZjY4ZDEzVSwgMHhlODkwZDhiOFUsIDB4NWUyZTM5ZjdVLAotICAgIDB4ZjU4MmMzYWZVLCAweGJlOWY1ZDgwVSwgMHg3YzY5ZDA5M1UsIDB4YTk2ZmQ1MmRVLCAweGIzY2YyNTEyVSwKLSAgICAweDNiYzhhYzk5VSwgMHhhNzEwMTg3ZFUsIDB4NmVlODljNjNVLCAweDdiZGIzYmJiVSwgMHgwOWNkMjY3OFUsCi0gICAgMHhmNDZlNTkxOFUsIDB4MDFlYzlhYjdVLCAweGE4ODM0ZjlhVSwgMHg2NWU2OTU2ZVUsIDB4N2VhYWZmZTZVLAotICAgIDB4MDgyMWJjY2ZVLCAweGU2ZWYxNWU4VSwgMHhkOWJhZTc5YlUsIDB4Y2U0YTZmMzZVLCAweGQ0ZWE5ZjA5VSwKLSAgICAweGQ2MjliMDdjVSwgMHhhZjMxYTRiMlUsIDB4MzEyYTNmMjNVLCAweDMwYzZhNTk0VSwgMHhjMDM1YTI2NlUsCi0gICAgMHgzNzc0NGViY1UsIDB4YTZmYzgyY2FVLCAweGIwZTA5MGQwVSwgMHgxNTMzYTdkOFUsIDB4NGFmMTA0OThVLAotICAgIDB4Zjc0MWVjZGFVLCAweDBlN2ZjZDUwVSwgMHgyZjE3OTFmNlUsIDB4OGQ3NjRkZDZVLCAweDRkNDNlZmIwVSwKLSAgICAweDU0Y2NhYTRkVSwgMHhkZmU0OTYwNFUsIDB4ZTM5ZWQxYjVVLCAweDFiNGM2YTg4VSwgMHhiOGMxMmMxZlUsCi0gICAgMHg3ZjQ2NjU1MVUsIDB4MDQ5ZDVlZWFVLCAweDVkMDE4YzM1VSwgMHg3M2ZhODc3NFUsIDB4MmVmYjBiNDFVLAotICAgIDB4NWFiMzY3MWRVLCAweDUyOTJkYmQyVSwgMHgzM2U5MTA1NlUsIDB4MTM2ZGQ2NDdVLCAweDhjOWFkNzYxVSwKLSAgICAweDdhMzdhMTBjVSwgMHg4ZTU5ZjgxNFUsIDB4ODllYjEzM2NVLCAweGVlY2VhOTI3VSwgMHgzNWI3NjFjOVUsCi0gICAgMHhlZGUxMWNlNVUsIDB4M2M3YTQ3YjFVLCAweDU5OWNkMmRmVSwgMHgzZjU1ZjI3M1UsIDB4NzkxODE0Y2VVLAotICAgIDB4YmY3M2M3MzdVLCAweGVhNTNmN2NkVSwgMHg1YjVmZmRhYVUsIDB4MTRkZjNkNmZVLCAweDg2Nzg0NGRiVSwKLSAgICAweDgxY2FhZmYzVSwgMHgzZWI5NjhjNFUsIDB4MmMzODI0MzRVLCAweDVmYzJhMzQwVSwgMHg3MjE2MWRjM1UsCi0gICAgMHgwY2JjZTIyNVUsIDB4OGIyODNjNDlVLCAweDQxZmYwZDk1VSwgMHg3MTM5YTgwMVUsIDB4ZGUwODBjYjNVLAotICAgIDB4OWNkOGI0ZTRVLCAweDkwNjQ1NmMxVSwgMHg2MTdiY2I4NFUsIDB4NzBkNTMyYjZVLCAweDc0NDg2YzVjVSwKLSAgICAweDQyZDBiODU3VSwKLX07Ci1zdGF0aWMgY29uc3QgdWludDMyX3QgVGQyWzI1Nl0gPSB7Ci0gICAgMHhhNzUwNTFmNFUsIDB4NjU1MzdlNDFVLCAweGE0YzMxYTE3VSwgMHg1ZTk2M2EyN1UsIDB4NmJjYjNiYWJVLAotICAgIDB4NDVmMTFmOWRVLCAweDU4YWJhY2ZhVSwgMHgwMzkzNGJlM1UsIDB4ZmE1NTIwMzBVLCAweDZkZjZhZDc2VSwKLSAgICAweDc2OTE4OGNjVSwgMHg0YzI1ZjUwMlUsIDB4ZDdmYzRmZTVVLCAweGNiZDdjNTJhVSwgMHg0NDgwMjYzNVUsCi0gICAgMHhhMzhmYjU2MlUsIDB4NWE0OWRlYjFVLCAweDFiNjcyNWJhVSwgMHgwZTk4NDVlYVUsIDB4YzBlMTVkZmVVLAotICAgIDB4NzUwMmMzMmZVLCAweGYwMTI4MTRjVSwgMHg5N2EzOGQ0NlUsIDB4ZjljNjZiZDNVLCAweDVmZTcwMzhmVSwKLSAgICAweDljOTUxNTkyVSwgMHg3YWViYmY2ZFUsIDB4NTlkYTk1NTJVLCAweDgzMmRkNGJlVSwgMHgyMWQzNTg3NFUsCi0gICAgMHg2OTI5NDllMFUsIDB4Yzg0NDhlYzlVLCAweDg5NmE3NWMyVSwgMHg3OTc4ZjQ4ZVUsIDB4M2U2Yjk5NThVLAotICAgIDB4NzFkZDI3YjlVLCAweDRmYjZiZWUxVSwgMHhhZDE3ZjA4OFUsIDB4YWM2NmM5MjBVLCAweDNhYjQ3ZGNlVSwKLSAgICAweDRhMTg2M2RmVSwgMHgzMTgyZTUxYVUsIDB4MzM2MDk3NTFVLCAweDdmNDU2MjUzVSwgMHg3N2UwYjE2NFUsCi0gICAgMHhhZTg0YmI2YlUsIDB4YTAxY2ZlODFVLCAweDJiOTRmOTA4VSwgMHg2ODU4NzA0OFUsIDB4ZmQxOThmNDVVLAotICAgIDB4NmM4Nzk0ZGVVLCAweGY4Yjc1MjdiVSwgMHhkMzIzYWI3M1UsIDB4MDJlMjcyNGJVLCAweDhmNTdlMzFmVSwKLSAgICAweGFiMmE2NjU1VSwgMHgyODA3YjJlYlUsIDB4YzIwMzJmYjVVLCAweDdiOWE4NmM1VSwgMHgwOGE1ZDMzN1UsCi0gICAgMHg4N2YyMzAyOFUsIDB4YTViMjIzYmZVLCAweDZhYmEwMjAzVSwgMHg4MjVjZWQxNlUsIDB4MWMyYjhhY2ZVLAotICAgIDB4YjQ5MmE3NzlVLCAweGYyZjBmMzA3VSwgMHhlMmExNGU2OVUsIDB4ZjRjZDY1ZGFVLCAweGJlZDUwNjA1VSwKLSAgICAweDYyMWZkMTM0VSwgMHhmZThhYzRhNlUsIDB4NTM5ZDM0MmVVLCAweDU1YTBhMmYzVSwgMHhlMTMyMDU4YVUsCi0gICAgMHhlYjc1YTRmNlUsIDB4ZWMzOTBiODNVLCAweGVmYWE0MDYwVSwgMHg5ZjA2NWU3MVUsIDB4MTA1MWJkNmVVLAotICAgIDB4OGFmOTNlMjFVLCAweDA2M2Q5NmRkVSwgMHgwNWFlZGQzZVUsIDB4YmQ0NjRkZTZVLCAweDhkYjU5MTU0VSwKLSAgICAweDVkMDU3MWM0VSwgMHhkNDZmMDQwNlUsIDB4MTVmZjYwNTBVLCAweGZiMjQxOTk4VSwgMHhlOTk3ZDZiZFUsCi0gICAgMHg0M2NjODk0MFUsIDB4OWU3NzY3ZDlVLCAweDQyYmRiMGU4VSwgMHg4Yjg4MDc4OVUsIDB4NWIzOGU3MTlVLAotICAgIDB4ZWVkYjc5YzhVLCAweDBhNDdhMTdjVSwgMHgwZmU5N2M0MlUsIDB4MWVjOWY4ODRVLCAweDAwMDAwMDAwVSwKLSAgICAweDg2ODMwOTgwVSwgMHhlZDQ4MzIyYlUsIDB4NzBhYzFlMTFVLCAweDcyNGU2YzVhVSwgMHhmZmZiZmQwZVUsCi0gICAgMHgzODU2MGY4NVUsIDB4ZDUxZTNkYWVVLCAweDM5MjczNjJkVSwgMHhkOTY0MGEwZlUsIDB4YTYyMTY4NWNVLAotICAgIDB4NTRkMTliNWJVLCAweDJlM2EyNDM2VSwgMHg2N2IxMGMwYVUsIDB4ZTcwZjkzNTdVLCAweDk2ZDJiNGVlVSwKLSAgICAweDkxOWUxYjliVSwgMHhjNTRmODBjMFUsIDB4MjBhMjYxZGNVLCAweDRiNjk1YTc3VSwgMHgxYTE2MWMxMlUsCi0gICAgMHhiYTBhZTI5M1UsIDB4MmFlNWMwYTBVLCAweGUwNDMzYzIyVSwgMHgxNzFkMTIxYlUsIDB4MGQwYjBlMDlVLAotICAgIDB4YzdhZGYyOGJVLCAweGE4YjkyZGI2VSwgMHhhOWM4MTQxZVUsIDB4MTk4NTU3ZjFVLCAweDA3NGNhZjc1VSwKLSAgICAweGRkYmJlZTk5VSwgMHg2MGZkYTM3ZlUsIDB4MjY5ZmY3MDFVLCAweGY1YmM1YzcyVSwgMHgzYmM1NDQ2NlUsCi0gICAgMHg3ZTM0NWJmYlUsIDB4Mjk3NjhiNDNVLCAweGM2ZGNjYjIzVSwgMHhmYzY4YjZlZFUsIDB4ZjE2M2I4ZTRVLAotICAgIDB4ZGNjYWQ3MzFVLCAweDg1MTA0MjYzVSwgMHgyMjQwMTM5N1UsIDB4MTEyMDg0YzZVLCAweDI0N2Q4NTRhVSwKLSAgICAweDNkZjhkMmJiVSwgMHgzMjExYWVmOVUsIDB4YTE2ZGM3MjlVLCAweDJmNGIxZDllVSwgMHgzMGYzZGNiMlUsCi0gICAgMHg1MmVjMGQ4NlUsIDB4ZTNkMDc3YzFVLCAweDE2NmMyYmIzVSwgMHhiOTk5YTk3MFUsIDB4NDhmYTExOTRVLAotICAgIDB4NjQyMjQ3ZTlVLCAweDhjYzRhOGZjVSwgMHgzZjFhYTBmMFUsIDB4MmNkODU2N2RVLCAweDkwZWYyMjMzVSwKLSAgICAweDRlYzc4NzQ5VSwgMHhkMWMxZDkzOFUsIDB4YTJmZThjY2FVLCAweDBiMzY5OGQ0VSwgMHg4MWNmYTZmNVUsCi0gICAgMHhkZTI4YTU3YVUsIDB4OGUyNmRhYjdVLCAweGJmYTQzZmFkVSwgMHg5ZGU0MmMzYVUsIDB4OTIwZDUwNzhVLAotICAgIDB4Y2M5YjZhNWZVLCAweDQ2NjI1NDdlVSwgMHgxM2MyZjY4ZFUsIDB4YjhlODkwZDhVLCAweGY3NWUyZTM5VSwKLSAgICAweGFmZjU4MmMzVSwgMHg4MGJlOWY1ZFUsIDB4OTM3YzY5ZDBVLCAweDJkYTk2ZmQ1VSwgMHgxMmIzY2YyNVUsCi0gICAgMHg5OTNiYzhhY1UsIDB4N2RhNzEwMThVLCAweDYzNmVlODljVSwgMHhiYjdiZGIzYlUsIDB4NzgwOWNkMjZVLAotICAgIDB4MThmNDZlNTlVLCAweGI3MDFlYzlhVSwgMHg5YWE4ODM0ZlUsIDB4NmU2NWU2OTVVLCAweGU2N2VhYWZmVSwKLSAgICAweGNmMDgyMWJjVSwgMHhlOGU2ZWYxNVUsIDB4OWJkOWJhZTdVLCAweDM2Y2U0YTZmVSwgMHgwOWQ0ZWE5ZlUsCi0gICAgMHg3Y2Q2MjliMFUsIDB4YjJhZjMxYTRVLCAweDIzMzEyYTNmVSwgMHg5NDMwYzZhNVUsIDB4NjZjMDM1YTJVLAotICAgIDB4YmMzNzc0NGVVLCAweGNhYTZmYzgyVSwgMHhkMGIwZTA5MFUsIDB4ZDgxNTMzYTdVLCAweDk4NGFmMTA0VSwKLSAgICAweGRhZjc0MWVjVSwgMHg1MDBlN2ZjZFUsIDB4ZjYyZjE3OTFVLCAweGQ2OGQ3NjRkVSwgMHhiMDRkNDNlZlUsCi0gICAgMHg0ZDU0Y2NhYVUsIDB4MDRkZmU0OTZVLCAweGI1ZTM5ZWQxVSwgMHg4ODFiNGM2YVUsIDB4MWZiOGMxMmNVLAotICAgIDB4NTE3ZjQ2NjVVLCAweGVhMDQ5ZDVlVSwgMHgzNTVkMDE4Y1UsIDB4NzQ3M2ZhODdVLCAweDQxMmVmYjBiVSwKLSAgICAweDFkNWFiMzY3VSwgMHhkMjUyOTJkYlUsIDB4NTYzM2U5MTBVLCAweDQ3MTM2ZGQ2VSwgMHg2MThjOWFkN1UsCi0gICAgMHgwYzdhMzdhMVUsIDB4MTQ4ZTU5ZjhVLCAweDNjODllYjEzVSwgMHgyN2VlY2VhOVUsIDB4YzkzNWI3NjFVLAotICAgIDB4ZTVlZGUxMWNVLCAweGIxM2M3YTQ3VSwgMHhkZjU5OWNkMlUsIDB4NzMzZjU1ZjJVLCAweGNlNzkxODE0VSwKLSAgICAweDM3YmY3M2M3VSwgMHhjZGVhNTNmN1UsIDB4YWE1YjVmZmRVLCAweDZmMTRkZjNkVSwgMHhkYjg2Nzg0NFUsCi0gICAgMHhmMzgxY2FhZlUsIDB4YzQzZWI5NjhVLCAweDM0MmMzODI0VSwgMHg0MDVmYzJhM1UsIDB4YzM3MjE2MWRVLAotICAgIDB4MjUwY2JjZTJVLCAweDQ5OGIyODNjVSwgMHg5NTQxZmYwZFUsIDB4MDE3MTM5YThVLCAweGIzZGUwODBjVSwKLSAgICAweGU0OWNkOGI0VSwgMHhjMTkwNjQ1NlUsIDB4ODQ2MTdiY2JVLCAweGI2NzBkNTMyVSwgMHg1Yzc0NDg2Y1UsCi0gICAgMHg1NzQyZDBiOFUsCi19Owotc3RhdGljIGNvbnN0IHVpbnQzMl90IFRkM1syNTZdID0gewotICAgIDB4ZjRhNzUwNTFVLCAweDQxNjU1MzdlVSwgMHgxN2E0YzMxYVUsIDB4Mjc1ZTk2M2FVLCAweGFiNmJjYjNiVSwKLSAgICAweDlkNDVmMTFmVSwgMHhmYTU4YWJhY1UsIDB4ZTMwMzkzNGJVLCAweDMwZmE1NTIwVSwgMHg3NjZkZjZhZFUsCi0gICAgMHhjYzc2OTE4OFUsIDB4MDI0YzI1ZjVVLCAweGU1ZDdmYzRmVSwgMHgyYWNiZDdjNVUsIDB4MzU0NDgwMjZVLAotICAgIDB4NjJhMzhmYjVVLCAweGIxNWE0OWRlVSwgMHhiYTFiNjcyNVUsIDB4ZWEwZTk4NDVVLCAweGZlYzBlMTVkVSwKLSAgICAweDJmNzUwMmMzVSwgMHg0Y2YwMTI4MVUsIDB4NDY5N2EzOGRVLCAweGQzZjljNjZiVSwgMHg4ZjVmZTcwM1UsCi0gICAgMHg5MjljOTUxNVUsIDB4NmQ3YWViYmZVLCAweDUyNTlkYTk1VSwgMHhiZTgzMmRkNFUsIDB4NzQyMWQzNThVLAotICAgIDB4ZTA2OTI5NDlVLCAweGM5Yzg0NDhlVSwgMHhjMjg5NmE3NVUsIDB4OGU3OTc4ZjRVLCAweDU4M2U2Yjk5VSwKLSAgICAweGI5NzFkZDI3VSwgMHhlMTRmYjZiZVUsIDB4ODhhZDE3ZjBVLCAweDIwYWM2NmM5VSwgMHhjZTNhYjQ3ZFUsCi0gICAgMHhkZjRhMTg2M1UsIDB4MWEzMTgyZTVVLCAweDUxMzM2MDk3VSwgMHg1MzdmNDU2MlUsIDB4NjQ3N2UwYjFVLAotICAgIDB4NmJhZTg0YmJVLCAweDgxYTAxY2ZlVSwgMHgwODJiOTRmOVUsIDB4NDg2ODU4NzBVLCAweDQ1ZmQxOThmVSwKLSAgICAweGRlNmM4Nzk0VSwgMHg3YmY4Yjc1MlUsIDB4NzNkMzIzYWJVLCAweDRiMDJlMjcyVSwgMHgxZjhmNTdlM1UsCi0gICAgMHg1NWFiMmE2NlUsIDB4ZWIyODA3YjJVLCAweGI1YzIwMzJmVSwgMHhjNTdiOWE4NlUsIDB4MzcwOGE1ZDNVLAotICAgIDB4Mjg4N2YyMzBVLCAweGJmYTViMjIzVSwgMHgwMzZhYmEwMlUsIDB4MTY4MjVjZWRVLCAweGNmMWMyYjhhVSwKLSAgICAweDc5YjQ5MmE3VSwgMHgwN2YyZjBmM1UsIDB4NjllMmExNGVVLCAweGRhZjRjZDY1VSwgMHgwNWJlZDUwNlUsCi0gICAgMHgzNDYyMWZkMVUsIDB4YTZmZThhYzRVLCAweDJlNTM5ZDM0VSwgMHhmMzU1YTBhMlUsIDB4OGFlMTMyMDVVLAotICAgIDB4ZjZlYjc1YTRVLCAweDgzZWMzOTBiVSwgMHg2MGVmYWE0MFUsIDB4NzE5ZjA2NWVVLCAweDZlMTA1MWJkVSwKLSAgICAweDIxOGFmOTNlVSwgMHhkZDA2M2Q5NlUsIDB4M2UwNWFlZGRVLCAweGU2YmQ0NjRkVSwgMHg1NDhkYjU5MVUsCi0gICAgMHhjNDVkMDU3MVUsIDB4MDZkNDZmMDRVLCAweDUwMTVmZjYwVSwgMHg5OGZiMjQxOVUsIDB4YmRlOTk3ZDZVLAotICAgIDB4NDA0M2NjODlVLCAweGQ5OWU3NzY3VSwgMHhlODQyYmRiMFUsIDB4ODk4Yjg4MDdVLCAweDE5NWIzOGU3VSwKLSAgICAweGM4ZWVkYjc5VSwgMHg3YzBhNDdhMVUsIDB4NDIwZmU5N2NVLCAweDg0MWVjOWY4VSwgMHgwMDAwMDAwMFUsCi0gICAgMHg4MDg2ODMwOVUsIDB4MmJlZDQ4MzJVLCAweDExNzBhYzFlVSwgMHg1YTcyNGU2Y1UsIDB4MGVmZmZiZmRVLAotICAgIDB4ODUzODU2MGZVLCAweGFlZDUxZTNkVSwgMHgyZDM5MjczNlUsIDB4MGZkOTY0MGFVLCAweDVjYTYyMTY4VSwKLSAgICAweDViNTRkMTliVSwgMHgzNjJlM2EyNFUsIDB4MGE2N2IxMGNVLCAweDU3ZTcwZjkzVSwgMHhlZTk2ZDJiNFUsCi0gICAgMHg5YjkxOWUxYlUsIDB4YzBjNTRmODBVLCAweGRjMjBhMjYxVSwgMHg3NzRiNjk1YVUsIDB4MTIxYTE2MWNVLAotICAgIDB4OTNiYTBhZTJVLCAweGEwMmFlNWMwVSwgMHgyMmUwNDMzY1UsIDB4MWIxNzFkMTJVLCAweDA5MGQwYjBlVSwKLSAgICAweDhiYzdhZGYyVSwgMHhiNmE4YjkyZFUsIDB4MWVhOWM4MTRVLCAweGYxMTk4NTU3VSwgMHg3NTA3NGNhZlUsCi0gICAgMHg5OWRkYmJlZVUsIDB4N2Y2MGZkYTNVLCAweDAxMjY5ZmY3VSwgMHg3MmY1YmM1Y1UsIDB4NjYzYmM1NDRVLAotICAgIDB4ZmI3ZTM0NWJVLCAweDQzMjk3NjhiVSwgMHgyM2M2ZGNjYlUsIDB4ZWRmYzY4YjZVLCAweGU0ZjE2M2I4VSwKLSAgICAweDMxZGNjYWQ3VSwgMHg2Mzg1MTA0MlUsIDB4OTcyMjQwMTNVLCAweGM2MTEyMDg0VSwgMHg0YTI0N2Q4NVUsCi0gICAgMHhiYjNkZjhkMlUsIDB4ZjkzMjExYWVVLCAweDI5YTE2ZGM3VSwgMHg5ZTJmNGIxZFUsIDB4YjIzMGYzZGNVLAotICAgIDB4ODY1MmVjMGRVLCAweGMxZTNkMDc3VSwgMHhiMzE2NmMyYlUsIDB4NzBiOTk5YTlVLCAweDk0NDhmYTExVSwKLSAgICAweGU5NjQyMjQ3VSwgMHhmYzhjYzRhOFUsIDB4ZjAzZjFhYTBVLCAweDdkMmNkODU2VSwgMHgzMzkwZWYyMlUsCi0gICAgMHg0OTRlYzc4N1UsIDB4MzhkMWMxZDlVLCAweGNhYTJmZThjVSwgMHhkNDBiMzY5OFUsIDB4ZjU4MWNmYTZVLAotICAgIDB4N2FkZTI4YTVVLCAweGI3OGUyNmRhVSwgMHhhZGJmYTQzZlUsIDB4M2E5ZGU0MmNVLCAweDc4OTIwZDUwVSwKLSAgICAweDVmY2M5YjZhVSwgMHg3ZTQ2NjI1NFUsIDB4OGQxM2MyZjZVLCAweGQ4YjhlODkwVSwgMHgzOWY3NWUyZVUsCi0gICAgMHhjM2FmZjU4MlUsIDB4NWQ4MGJlOWZVLCAweGQwOTM3YzY5VSwgMHhkNTJkYTk2ZlUsIDB4MjUxMmIzY2ZVLAotICAgIDB4YWM5OTNiYzhVLCAweDE4N2RhNzEwVSwgMHg5YzYzNmVlOFUsIDB4M2JiYjdiZGJVLCAweDI2NzgwOWNkVSwKLSAgICAweDU5MThmNDZlVSwgMHg5YWI3MDFlY1UsIDB4NGY5YWE4ODNVLCAweDk1NmU2NWU2VSwgMHhmZmU2N2VhYVUsCi0gICAgMHhiY2NmMDgyMVUsIDB4MTVlOGU2ZWZVLCAweGU3OWJkOWJhVSwgMHg2ZjM2Y2U0YVUsIDB4OWYwOWQ0ZWFVLAotICAgIDB4YjA3Y2Q2MjlVLCAweGE0YjJhZjMxVSwgMHgzZjIzMzEyYVUsIDB4YTU5NDMwYzZVLCAweGEyNjZjMDM1VSwKLSAgICAweDRlYmMzNzc0VSwgMHg4MmNhYTZmY1UsIDB4OTBkMGIwZTBVLCAweGE3ZDgxNTMzVSwgMHgwNDk4NGFmMVUsCi0gICAgMHhlY2RhZjc0MVUsIDB4Y2Q1MDBlN2ZVLCAweDkxZjYyZjE3VSwgMHg0ZGQ2OGQ3NlUsIDB4ZWZiMDRkNDNVLAotICAgIDB4YWE0ZDU0Y2NVLCAweDk2MDRkZmU0VSwgMHhkMWI1ZTM5ZVUsIDB4NmE4ODFiNGNVLCAweDJjMWZiOGMxVSwKLSAgICAweDY1NTE3ZjQ2VSwgMHg1ZWVhMDQ5ZFUsIDB4OGMzNTVkMDFVLCAweDg3NzQ3M2ZhVSwgMHgwYjQxMmVmYlUsCi0gICAgMHg2NzFkNWFiM1UsIDB4ZGJkMjUyOTJVLCAweDEwNTYzM2U5VSwgMHhkNjQ3MTM2ZFUsIDB4ZDc2MThjOWFVLAotICAgIDB4YTEwYzdhMzdVLCAweGY4MTQ4ZTU5VSwgMHgxMzNjODllYlUsIDB4YTkyN2VlY2VVLCAweDYxYzkzNWI3VSwKLSAgICAweDFjZTVlZGUxVSwgMHg0N2IxM2M3YVUsIDB4ZDJkZjU5OWNVLCAweGYyNzMzZjU1VSwgMHgxNGNlNzkxOFUsCi0gICAgMHhjNzM3YmY3M1UsIDB4ZjdjZGVhNTNVLCAweGZkYWE1YjVmVSwgMHgzZDZmMTRkZlUsIDB4NDRkYjg2NzhVLAotICAgIDB4YWZmMzgxY2FVLCAweDY4YzQzZWI5VSwgMHgyNDM0MmMzOFUsIDB4YTM0MDVmYzJVLCAweDFkYzM3MjE2VSwKLSAgICAweGUyMjUwY2JjVSwgMHgzYzQ5OGIyOFUsIDB4MGQ5NTQxZmZVLCAweGE4MDE3MTM5VSwgMHgwY2IzZGUwOFUsCi0gICAgMHhiNGU0OWNkOFUsIDB4NTZjMTkwNjRVLCAweGNiODQ2MTdiVSwgMHgzMmI2NzBkNVUsIDB4NmM1Yzc0NDhVLAotICAgIDB4Yjg1NzQyZDBVLAotfTsKLXN0YXRpYyBjb25zdCB1aW50OF90IFRkNFsyNTZdID0gewotICAgIDB4NTJVLCAweDA5VSwgMHg2YVUsIDB4ZDVVLCAweDMwVSwgMHgzNlUsIDB4YTVVLCAweDM4VSwgMHhiZlUsIDB4NDBVLCAweGEzVSwKLSAgICAweDllVSwgMHg4MVUsIDB4ZjNVLCAweGQ3VSwgMHhmYlUsIDB4N2NVLCAweGUzVSwgMHgzOVUsIDB4ODJVLCAweDliVSwgMHgyZlUsCi0gICAgMHhmZlUsIDB4ODdVLCAweDM0VSwgMHg4ZVUsIDB4NDNVLCAweDQ0VSwgMHhjNFUsIDB4ZGVVLCAweGU5VSwgMHhjYlUsIDB4NTRVLAotICAgIDB4N2JVLCAweDk0VSwgMHgzMlUsIDB4YTZVLCAweGMyVSwgMHgyM1UsIDB4M2RVLCAweGVlVSwgMHg0Y1UsIDB4OTVVLCAweDBiVSwKLSAgICAweDQyVSwgMHhmYVUsIDB4YzNVLCAweDRlVSwgMHgwOFUsIDB4MmVVLCAweGExVSwgMHg2NlUsIDB4MjhVLCAweGQ5VSwgMHgyNFUsCi0gICAgMHhiMlUsIDB4NzZVLCAweDViVSwgMHhhMlUsIDB4NDlVLCAweDZkVSwgMHg4YlUsIDB4ZDFVLCAweDI1VSwgMHg3MlUsIDB4ZjhVLAotICAgIDB4ZjZVLCAweDY0VSwgMHg4NlUsIDB4NjhVLCAweDk4VSwgMHgxNlUsIDB4ZDRVLCAweGE0VSwgMHg1Y1UsIDB4Y2NVLCAweDVkVSwKLSAgICAweDY1VSwgMHhiNlUsIDB4OTJVLCAweDZjVSwgMHg3MFUsIDB4NDhVLCAweDUwVSwgMHhmZFUsIDB4ZWRVLCAweGI5VSwgMHhkYVUsCi0gICAgMHg1ZVUsIDB4MTVVLCAweDQ2VSwgMHg1N1UsIDB4YTdVLCAweDhkVSwgMHg5ZFUsIDB4ODRVLCAweDkwVSwgMHhkOFUsIDB4YWJVLAotICAgIDB4MDBVLCAweDhjVSwgMHhiY1UsIDB4ZDNVLCAweDBhVSwgMHhmN1UsIDB4ZTRVLCAweDU4VSwgMHgwNVUsIDB4YjhVLCAweGIzVSwKLSAgICAweDQ1VSwgMHgwNlUsIDB4ZDBVLCAweDJjVSwgMHgxZVUsIDB4OGZVLCAweGNhVSwgMHgzZlUsIDB4MGZVLCAweDAyVSwgMHhjMVUsCi0gICAgMHhhZlUsIDB4YmRVLCAweDAzVSwgMHgwMVUsIDB4MTNVLCAweDhhVSwgMHg2YlUsIDB4M2FVLCAweDkxVSwgMHgxMVUsIDB4NDFVLAotICAgIDB4NGZVLCAweDY3VSwgMHhkY1UsIDB4ZWFVLCAweDk3VSwgMHhmMlUsIDB4Y2ZVLCAweGNlVSwgMHhmMFUsIDB4YjRVLCAweGU2VSwKLSAgICAweDczVSwgMHg5NlUsIDB4YWNVLCAweDc0VSwgMHgyMlUsIDB4ZTdVLCAweGFkVSwgMHgzNVUsIDB4ODVVLCAweGUyVSwgMHhmOVUsCi0gICAgMHgzN1UsIDB4ZThVLCAweDFjVSwgMHg3NVUsIDB4ZGZVLCAweDZlVSwgMHg0N1UsIDB4ZjFVLCAweDFhVSwgMHg3MVUsIDB4MWRVLAotICAgIDB4MjlVLCAweGM1VSwgMHg4OVUsIDB4NmZVLCAweGI3VSwgMHg2MlUsIDB4MGVVLCAweGFhVSwgMHgxOFUsIDB4YmVVLCAweDFiVSwKLSAgICAweGZjVSwgMHg1NlUsIDB4M2VVLCAweDRiVSwgMHhjNlUsIDB4ZDJVLCAweDc5VSwgMHgyMFUsIDB4OWFVLCAweGRiVSwgMHhjMFUsCi0gICAgMHhmZVUsIDB4NzhVLCAweGNkVSwgMHg1YVUsIDB4ZjRVLCAweDFmVSwgMHhkZFUsIDB4YThVLCAweDMzVSwgMHg4OFUsIDB4MDdVLAotICAgIDB4YzdVLCAweDMxVSwgMHhiMVUsIDB4MTJVLCAweDEwVSwgMHg1OVUsIDB4MjdVLCAweDgwVSwgMHhlY1UsIDB4NWZVLCAweDYwVSwKLSAgICAweDUxVSwgMHg3ZlUsIDB4YTlVLCAweDE5VSwgMHhiNVUsIDB4NGFVLCAweDBkVSwgMHgyZFUsIDB4ZTVVLCAweDdhVSwgMHg5ZlUsCi0gICAgMHg5M1UsIDB4YzlVLCAweDljVSwgMHhlZlUsIDB4YTBVLCAweGUwVSwgMHgzYlUsIDB4NGRVLCAweGFlVSwgMHgyYVUsIDB4ZjVVLAotICAgIDB4YjBVLCAweGM4VSwgMHhlYlUsIDB4YmJVLCAweDNjVSwgMHg4M1UsIDB4NTNVLCAweDk5VSwgMHg2MVUsIDB4MTdVLCAweDJiVSwKLSAgICAweDA0VSwgMHg3ZVUsIDB4YmFVLCAweDc3VSwgMHhkNlUsIDB4MjZVLCAweGUxVSwgMHg2OVUsIDB4MTRVLCAweDYzVSwgMHg1NVUsCi0gICAgMHgyMVUsIDB4MGNVLCAweDdkVSwKLX07Ci1zdGF0aWMgY29uc3QgdWludDMyX3QgcmNvbltdID0gewotICAgIDB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MTAwMDAwMDAsCi0gICAgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg4MDAwMDAwMCwgMHgxQjAwMDAwMCwgMHgzNjAwMDAwMCwKLSAgICAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCi19OwotCi1pbmxpbmUgdm9pZCBjdHIxMjhfaW5jKHZvaWQqIGNvdW50ZXJfcG9pbnRlcikgewotICB1aW50OF90KiBjb3VudGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oY291bnRlcl9wb2ludGVyKTsKLSAgdWludDMyX3QgbiA9IDE2OwotICB1aW50OF90IGM7Ci0KLSAgZG8gewotICAgIC0tbjsKLSAgICBjID0gY291bnRlcltuXTsKLSAgICArK2M7Ci0gICAgY291bnRlcltuXSA9IGM7Ci0gICAgaWYgKGMpCi0gICAgICByZXR1cm47Ci0gIH0gd2hpbGUgKG4pOwotfQotCi1pbmxpbmUgdm9pZCBjdHIxMjhfaW5jX2FsaWduZWQodm9pZCogY291bnRlcl9wb2ludGVyKSB7Ci0gIHVpbnQ4X3QqIGNvdW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihjb3VudGVyX3BvaW50ZXIpOwotICBzaXplX3QgKmRhdGEsIGMsIG47Ci0gIGNvbnN0IHVuaW9uIHsKLSAgICB1aW50MzJfdCBvbmU7Ci0gICAgY2hhciBsaXR0bGU7Ci0gIH0gaXNfZW5kaWFuID0gezF9OwotCi0gIGlmIChpc19lbmRpYW4ubGl0dGxlKSB7Ci0gICAgY3RyMTI4X2luYyhjb3VudGVyKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihjb3VudGVyX3BvaW50ZXIpOwotICBuID0gMTYgLyBzaXplb2Yoc2l6ZV90KTsKLSAgZG8gewotICAgIC0tbjsKLSAgICBjID0gZGF0YVtuXTsKLSAgICArK2M7Ci0gICAgZGF0YVtuXSA9IGM7Ci0gICAgaWYgKGMpCi0gICAgICByZXR1cm47Ci0gIH0gd2hpbGUgKG4pOwotfQotCi0vKgotICogVGhlIGlucHV0IGVuY3J5cHRlZCBhcyB0aG91Z2ggMTI4Yml0IGNvdW50ZXIgbW9kZSBpcyBiZWluZyB1c2VkLiAgVGhlCi0gKiBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlIDEyOGJpdCBibG9jayB3ZSBoYXZlCi0gKiB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtLCBhbmQgdGhlIGVuY3J5cHRlZCBjb3VudGVyIGlzIGtlcHQgaW4KLSAqIGVjb3VudF9idWYuICBCb3RoICpudW0gYW5kIGVjb3VudF9idWYgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHplcm9zCi0gKiBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KCkuIFRoaXMgYWxnb3JpdGhtIGFzc3VtZXMKLSAqIHRoYXQgdGhlIGNvdW50ZXIgaXMgaW4gdGhlIHggbG93ZXIgYml0cyBvZiB0aGUgSVYgKGl2ZWMpLCBhbmQgdGhhdCB0aGUKLSAqIGFwcGxpY2F0aW9uIGhhcyBmdWxsIGNvbnRyb2wgb3ZlciBvdmVyZmxvdyBhbmQgdGhlIHJlc3Qgb2YgdGhlIElWLiAgVGhpcwotICogaW1wbGVtZW50YXRpb24gdGFrZXMgTk8gcmVzcG9uc2liaWxpdHkgZm9yIGNoZWNraW5nIHRoYXQgdGhlIGNvdW50ZXIKLSAqIGRvZXNuJ3Qgb3ZlcmZsb3cgaW50byB0aGUgcmVzdCBvZiB0aGUgSVYgd2hlbiBpbmNyZW1lbnRlZC4KLSAqLwotdm9pZCBDUllQVE9fY3RyMTI4X2VuY3J5cHQoY29uc3Qgdm9pZCogaW5fcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG91dF9wb2ludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19LRVkqIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGVjb3VudF9idWZbMTZdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jazEyOF9mIGJsb2NrKSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIGluID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5fcG9pbnRlcik7Ci0gIHVpbnQ4X3QqIG91dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG91dF9wb2ludGVyKTsKLQotICB1aW50MzJfdCBuOwotICBzaXplX3QgbCA9IDA7Ci0KLSAgU0JfRENIRUNLKGluICYmIG91dCAmJiBrZXkgJiYgZWNvdW50X2J1ZiAmJiBudW0pOwotICBTQl9EQ0hFQ0soKm51bSA8IDE2KTsKLQotICBuID0gKm51bTsKLQotICBpZiAoMTYgJSBzaXplb2Yoc2l6ZV90KSA9PSAwKSB7IC8qIGFsd2F5cyB0cnVlIGFjdHVhbGx5ICovCi0gICAgZG8gewotICAgICAgd2hpbGUgKG4gJiYgbGVuKSB7Ci0gICAgICAgICoob3V0KyspID0gKihpbisrKSBeIGVjb3VudF9idWZbbl07Ci0gICAgICAgIC0tbGVuOwotICAgICAgICBuID0gKG4gKyAxKSAlIDE2OwotICAgICAgfQotCi0gICAgICB3aGlsZSAobGVuID49IDE2KSB7Ci0gICAgICAgICgqYmxvY2spKGl2ZWMsIGVjb3VudF9idWYsIGtleSk7Ci0gICAgICAgIGN0cjEyOF9pbmNfYWxpZ25lZChpdmVjKTsKLSAgICAgICAgZm9yICg7IG4gPCAxNjsgbiArPSBzaXplb2Yoc2l6ZV90KSkKLSAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihvdXQgKyBuKSA9Ci0gICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHNpemVfdCo+KGluICsgbikgXgotICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihlY291bnRfYnVmICsgbik7Ci0gICAgICAgIGxlbiAtPSAxNjsKLSAgICAgICAgb3V0ICs9IDE2OwotICAgICAgICBpbiArPSAxNjsKLSAgICAgICAgbiA9IDA7Ci0gICAgICB9Ci0gICAgICBpZiAobGVuKSB7Ci0gICAgICAgICgqYmxvY2spKGl2ZWMsIGVjb3VudF9idWYsIGtleSk7Ci0gICAgICAgIGN0cjEyOF9pbmNfYWxpZ25lZChpdmVjKTsKLSAgICAgICAgd2hpbGUgKGxlbi0tKSB7Ci0gICAgICAgICAgb3V0W25dID0gaW5bbl0gXiBlY291bnRfYnVmW25dOwotICAgICAgICAgICsrbjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgKm51bSA9IG47Ci0gICAgICByZXR1cm47Ci0gICAgfSB3aGlsZSAoMCk7Ci0gIH0KLQotICAvKiB0aGUgcmVzdCB3b3VsZCBiZSBjb21tb25seSBlbGltaW5hdGVkIGJ5IHg4NiogY29tcGlsZXIgKi8KLSAgd2hpbGUgKGwgPCBsZW4pIHsKLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAoKmJsb2NrKShpdmVjLCBlY291bnRfYnVmLCBrZXkpOwotICAgICAgY3RyMTI4X2luYyhpdmVjKTsKLSAgICB9Ci0gICAgb3V0W2xdID0gaW5bbF0gXiBlY291bnRfYnVmW25dOwotICAgICsrbDsKLSAgICBuID0gKG4gKyAxKSAlIDE2OwotICB9Ci0KLSAgKm51bSA9IG47Ci19Ci0KLXZvaWQgQ1JZUFRPX2NiYzEyOF9lbmNyeXB0KGNvbnN0IHZvaWQqIGluX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXRfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZKiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sxMjhfZiBibG9jaykgewotICBjb25zdCB1aW50OF90KiBpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluX3BvaW50ZXIpOwotICB1aW50OF90KiBvdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihvdXRfcG9pbnRlcik7Ci0gIHNpemVfdCBuOwotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpdiA9IGl2ZWM7Ci0KLSAgU0JfRENIRUNLKGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyk7Ci0KLSAgd2hpbGUgKGxlbiA+PSAxNikgewotICAgIGZvciAobiA9IDA7IG4gPCAxNjsgbiArPSBzaXplb2Yoc2l6ZV90KSkKLSAgICAgICpyZWludGVycHJldF9jYXN0PHNpemVfdCo+KG91dCArIG4pID0KLSAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzaXplX3QqPihpbiArIG4pIF4KLSAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzaXplX3QqPihpdiArIG4pOwotICAgICgqYmxvY2spKG91dCwgb3V0LCBrZXkpOwotICAgIGl2ID0gb3V0OwotICAgIGxlbiAtPSAxNjsKLSAgICBpbiArPSAxNjsKLSAgICBvdXQgKz0gMTY7Ci0gIH0KLQotICB3aGlsZSAobGVuKSB7Ci0gICAgZm9yIChuID0gMDsgbiA8IDE2ICYmIG4gPCBsZW47ICsrbikKLSAgICAgIG91dFtuXSA9IGluW25dIF4gaXZbbl07Ci0gICAgZm9yICg7IG4gPCAxNjsgKytuKQotICAgICAgb3V0W25dID0gaXZbbl07Ci0gICAgKCpibG9jaykob3V0LCBvdXQsIGtleSk7Ci0gICAgaXYgPSBvdXQ7Ci0gICAgaWYgKGxlbiA8PSAxNikKLSAgICAgIGJyZWFrOwotICAgIGxlbiAtPSAxNjsKLSAgICBpbiArPSAxNjsKLSAgICBvdXQgKz0gMTY7Ci0gIH0KLSAgbWVtY3B5KGl2ZWMsIGl2LCAxNik7Ci19Ci0KLXZvaWQgQ1JZUFRPX2NiYzEyOF9kZWNyeXB0KGNvbnN0IHZvaWQqIGluX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXRfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZKiBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sxMjhfZiBibG9jaykgewotICBjb25zdCB1aW50OF90KiBpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluX3BvaW50ZXIpOwotICB1aW50OF90KiBvdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihvdXRfcG9pbnRlcik7Ci0gIHNpemVfdCBuOwotICB1bmlvbiB7Ci0gICAgc2l6ZV90IHRbMTYgLyBzaXplb2Yoc2l6ZV90KV07Ci0gICAgdW5zaWduZWQgY2hhciBjWzE2XTsKLSAgfSB0bXA7Ci0KLSAgU0JfRENIRUNLKGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyk7Ci0KLSAgaWYgKGluICE9IG91dCkgewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGl2ID0gaXZlYzsKLQotICAgIGlmICgxNiAlIHNpemVvZihzaXplX3QpID09IDApIHsgLyogYWx3YXlzIHRydWUgKi8KLSAgICAgIHdoaWxlIChsZW4gPj0gMTYpIHsKLSAgICAgICAgc2l6ZV90KiBvdXRfdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4ob3V0KTsKLSAgICAgICAgY29uc3Qgc2l6ZV90KiBpdl90ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzaXplX3QqPihpdik7Ci0KLSAgICAgICAgKCpibG9jaykoaW4sIG91dCwga2V5KTsKLSAgICAgICAgZm9yIChuID0gMDsgbiA8IDE2IC8gc2l6ZW9mKHNpemVfdCk7IG4rKykKLSAgICAgICAgICBvdXRfdFtuXSBePSBpdl90W25dOwotICAgICAgICBpdiA9IGluOwotICAgICAgICBsZW4gLT0gMTY7Ci0gICAgICAgIGluICs9IDE2OwotICAgICAgICBvdXQgKz0gMTY7Ci0gICAgICB9Ci0gICAgfQotICAgIG1lbWNweShpdmVjLCBpdiwgMTYpOwotICB9IGVsc2UgewotICAgIGlmICgxNiAlIHNpemVvZihzaXplX3QpID09IDApIHsgLyogYWx3YXlzIHRydWUgKi8KLSAgICAgIHdoaWxlIChsZW4gPj0gMTYpIHsKLSAgICAgICAgc2l6ZV90IGMsICpvdXRfdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4ob3V0KTsKLSAgICAgICAgc2l6ZV90KiBpdmVjX3QgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+KGl2ZWMpOwotICAgICAgICBjb25zdCBzaXplX3QqIGluX3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHNpemVfdCo+KGluKTsKLQotICAgICAgICAoKmJsb2NrKShpbiwgdG1wLmMsIGtleSk7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCAxNiAvIHNpemVvZihzaXplX3QpOyBuKyspIHsKLSAgICAgICAgICBjID0gaW5fdFtuXTsKLSAgICAgICAgICBvdXRfdFtuXSA9IHRtcC50W25dIF4gaXZlY190W25dOwotICAgICAgICAgIGl2ZWNfdFtuXSA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuIC09IDE2OwotICAgICAgICBpbiArPSAxNjsKLSAgICAgICAgb3V0ICs9IDE2OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHdoaWxlIChsZW4pIHsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0gICAgKCpibG9jaykoaW4sIHRtcC5jLCBrZXkpOwotICAgIGZvciAobiA9IDA7IG4gPCAxNiAmJiBuIDwgbGVuOyArK24pIHsKLSAgICAgIGMgPSBpbltuXTsKLSAgICAgIG91dFtuXSA9IHRtcC5jW25dIF4gaXZlY1tuXTsKLSAgICAgIGl2ZWNbbl0gPSBjOwotICAgIH0KLSAgICBpZiAobGVuIDw9IDE2KSB7Ci0gICAgICBmb3IgKDsgbiA8IDE2OyArK24pCi0gICAgICAgIGl2ZWNbbl0gPSBpbltuXTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBsZW4gLT0gMTY7Ci0gICAgaW4gKz0gMTY7Ci0gICAgb3V0ICs9IDE2OwotICB9Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3Qgdm9pZCoga2V5X3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSogYWVza2V5KSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIGtleSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleV9wb2ludGVyKTsKLSAgdWludDMyX3QqIHJrOwotICBpbnQgaSA9IDA7Ci0gIHVpbnQzMl90IHRlbXA7Ci0gIGlmICgha2V5IHx8ICFhZXNrZXkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgc3dpdGNoIChiaXRzKSB7Ci0gICAgY2FzZSAxMjg6Ci0gICAgICBhZXNrZXktPnJvdW5kcyA9IDEwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOTI6Ci0gICAgICBhZXNrZXktPnJvdW5kcyA9IDEyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyNTY6Ci0gICAgICBhZXNrZXktPnJvdW5kcyA9IDE0OwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiAtMjsKLSAgfQotICByayA9IGFlc2tleS0+cmRfa2V5OwotICBya1swXSA9IEdFVFUzMihrZXkpOwotICBya1sxXSA9IEdFVFUzMihrZXkgKyA0KTsKLSAgcmtbMl0gPSBHRVRVMzIoa2V5ICsgOCk7Ci0gIHJrWzNdID0gR0VUVTMyKGtleSArIDEyKTsKLSAgaWYgKGJpdHMgPT0gMTI4KSB7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgIHRlbXAgPSBya1szXTsKLSAgICAgIHJrWzRdID0gcmtbMF0gXiAoVGUyWyh0ZW1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZjAwMDAwMCkgXgotICAgICAgICAgICAgICAoVGUzWyh0ZW1wID4+IDgpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCi0gICAgICAgICAgICAgIChUZTBbKHRlbXApJjB4ZmZdICYgMHgwMDAwZmYwMCkgXgotICAgICAgICAgICAgICAoVGUxWyh0ZW1wID4+IDI0KV0gJiAweDAwMDAwMGZmKSBeIHJjb25baV07Ci0gICAgICBya1s1XSA9IHJrWzFdIF4gcmtbNF07Ci0gICAgICBya1s2XSA9IHJrWzJdIF4gcmtbNV07Ci0gICAgICBya1s3XSA9IHJrWzNdIF4gcmtbNl07Ci0gICAgICBpZiAoKytpID09IDEwKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgcmsgKz0gNDsKLSAgICB9Ci0gIH0KLSAgcmtbNF0gPSBHRVRVMzIoa2V5ICsgMTYpOwotICBya1s1XSA9IEdFVFUzMihrZXkgKyAyMCk7Ci0gIGlmIChiaXRzID09IDE5MikgewotICAgIHdoaWxlICgxKSB7Ci0gICAgICB0ZW1wID0gcmtbNV07Ci0gICAgICBya1s2XSA9IHJrWzBdIF4gKFRlMlsodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDApIF4KLSAgICAgICAgICAgICAgKFRlM1sodGVtcCA+PiA4KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgotICAgICAgICAgICAgICAoVGUwWyh0ZW1wKSYweGZmXSAmIDB4MDAwMGZmMDApIF4KLSAgICAgICAgICAgICAgKFRlMVsodGVtcCA+PiAyNCldICYgMHgwMDAwMDBmZikgXiByY29uW2ldOwotICAgICAgcmtbN10gPSBya1sxXSBeIHJrWzZdOwotICAgICAgcmtbOF0gPSBya1syXSBeIHJrWzddOwotICAgICAgcmtbOV0gPSBya1szXSBeIHJrWzhdOwotICAgICAgaWYgKCsraSA9PSA4KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgcmtbMTBdID0gcmtbNF0gXiBya1s5XTsKLSAgICAgIHJrWzExXSA9IHJrWzVdIF4gcmtbMTBdOwotICAgICAgcmsgKz0gNjsKLSAgICB9Ci0gIH0KLSAgcmtbNl0gPSBHRVRVMzIoa2V5ICsgMjQpOwotICBya1s3XSA9IEdFVFUzMihrZXkgKyAyOCk7Ci0gIGlmIChiaXRzID09IDI1NikgewotICAgIHdoaWxlICgxKSB7Ci0gICAgICB0ZW1wID0gcmtbN107Ci0gICAgICBya1s4XSA9IHJrWzBdIF4gKFRlMlsodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4ZmYwMDAwMDApIF4KLSAgICAgICAgICAgICAgKFRlM1sodGVtcCA+PiA4KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgotICAgICAgICAgICAgICAoVGUwWyh0ZW1wKSYweGZmXSAmIDB4MDAwMGZmMDApIF4KLSAgICAgICAgICAgICAgKFRlMVsodGVtcCA+PiAyNCldICYgMHgwMDAwMDBmZikgXiByY29uW2ldOwotICAgICAgcmtbOV0gPSBya1sxXSBeIHJrWzhdOwotICAgICAgcmtbMTBdID0gcmtbMl0gXiBya1s5XTsKLSAgICAgIHJrWzExXSA9IHJrWzNdIF4gcmtbMTBdOwotICAgICAgaWYgKCsraSA9PSA3KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotICAgICAgdGVtcCA9IHJrWzExXTsKLSAgICAgIHJrWzEyXSA9IHJrWzRdIF4gKFRlMlsodGVtcCA+PiAyNCldICYgMHhmZjAwMDAwMCkgXgotICAgICAgICAgICAgICAgKFRlM1sodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KLSAgICAgICAgICAgICAgIChUZTBbKHRlbXAgPj4gOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KLSAgICAgICAgICAgICAgIChUZTFbKHRlbXApJjB4ZmZdICYgMHgwMDAwMDBmZik7Ci0gICAgICBya1sxM10gPSBya1s1XSBeIHJrWzEyXTsKLSAgICAgIHJrWzE0XSA9IHJrWzZdIF4gcmtbMTNdOwotICAgICAgcmtbMTVdID0gcmtbN10gXiBya1sxNF07Ci0gICAgICByayArPSA4OwotICAgIH0KLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3Qgdm9pZCoga2V5X3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgQUVTX0tFWSogYWVza2V5KSB7Ci0gIGNvbnN0IHVpbnQ4X3QqIGtleSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleV9wb2ludGVyKTsKLSAgdWludDMyX3QqIHJrOwotICBpbnQgaSwgaiwgc3RhdHVzOwotICB1aW50MzJfdCB0ZW1wOwotICAvKiBmaXJzdCwgc3RhcnQgd2l0aCBhbiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCi0gIHN0YXR1cyA9IEFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBiaXRzLCBhZXNrZXkpOwotICBpZiAoc3RhdHVzIDwgMCkgewotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLSAgcmsgPSBhZXNrZXktPnJkX2tleTsKLSAgLyogaW52ZXJ0IHRoZSBvcmRlciBvZiB0aGUgcm91bmQga2V5czogKi8KLSAgZm9yIChpID0gMCwgaiA9IDQgKiBhZXNrZXktPnJvdW5kczsgaSA8IGo7IGkgKz0gNCwgaiAtPSA0KSB7Ci0gICAgdGVtcCA9IHJrW2ldOwotICAgIHJrW2ldID0gcmtbal07Ci0gICAgcmtbal0gPSB0ZW1wOwotICAgIHRlbXAgPSBya1tpICsgMV07Ci0gICAgcmtbaSArIDFdID0gcmtbaiArIDFdOwotICAgIHJrW2ogKyAxXSA9IHRlbXA7Ci0gICAgdGVtcCA9IHJrW2kgKyAyXTsKLSAgICBya1tpICsgMl0gPSBya1tqICsgMl07Ci0gICAgcmtbaiArIDJdID0gdGVtcDsKLSAgICB0ZW1wID0gcmtbaSArIDNdOwotICAgIHJrW2kgKyAzXSA9IHJrW2ogKyAzXTsKLSAgICBya1tqICsgM10gPSB0ZW1wOwotICB9Ci0gIC8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQKLSAgICogdGhlIGxhc3Q6ICovCi0gIGZvciAoaSA9IDE7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KGFlc2tleS0+cm91bmRzKTsgaSsrKSB7Ci0gICAgcmsgKz0gNDsKLSAgICBya1swXSA9Ci0gICAgICAgIFRkMFtUZTFbKHJrWzBdID4+IDI0KV0gJiAweGZmXSBeIFRkMVtUZTFbKHJrWzBdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgotICAgICAgICBUZDJbVGUxWyhya1swXSA+PiA4KSAmIDB4ZmZdICYgMHhmZl0gXiBUZDNbVGUxWyhya1swXSkgJiAweGZmXSAmIDB4ZmZdOwotICAgIHJrWzFdID0KLSAgICAgICAgVGQwW1RlMVsocmtbMV0gPj4gMjQpXSAmIDB4ZmZdIF4gVGQxW1RlMVsocmtbMV0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCi0gICAgICAgIFRkMltUZTFbKHJrWzFdID4+IDgpICYgMHhmZl0gJiAweGZmXSBeIFRkM1tUZTFbKHJrWzFdKSAmIDB4ZmZdICYgMHhmZl07Ci0gICAgcmtbMl0gPQotICAgICAgICBUZDBbVGUxWyhya1syXSA+PiAyNCldICYgMHhmZl0gXiBUZDFbVGUxWyhya1syXSA+PiAxNikgJiAweGZmXSAmIDB4ZmZdIF4KLSAgICAgICAgVGQyW1RlMVsocmtbMl0gPj4gOCkgJiAweGZmXSAmIDB4ZmZdIF4gVGQzW1RlMVsocmtbMl0pICYgMHhmZl0gJiAweGZmXTsKLSAgICBya1szXSA9Ci0gICAgICAgIFRkMFtUZTFbKHJrWzNdID4+IDI0KV0gJiAweGZmXSBeIFRkMVtUZTFbKHJrWzNdID4+IDE2KSAmIDB4ZmZdICYgMHhmZl0gXgotICAgICAgICBUZDJbVGUxWyhya1szXSA+PiA4KSAmIDB4ZmZdICYgMHhmZl0gXiBUZDNbVGUxWyhya1szXSkgJiAweGZmXSAmIDB4ZmZdOwotICB9Ci0gIHJldHVybiAwOwotfQotCi12b2lkIEFFU19lbmNyeXB0KGNvbnN0IHZvaWQqIGluX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgIHZvaWQqIG91dF9wb2ludGVyLAotICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZKiBrZXkpIHsKLSAgY29uc3QgdWludDhfdCogaW4gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbl9wb2ludGVyKTsKLSAgdWludDhfdCogb3V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ob3V0X3BvaW50ZXIpOwotICBjb25zdCB1aW50MzJfdCogcms7Ci0gIHVpbnQzMl90IHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0MzsKLSAgaW50IHI7Ci0gIFNCX0RDSEVDSyhpbiAmJiBvdXQgJiYga2V5KTsKLSAgcmsgPSBrZXktPnJkX2tleTsKLSAgLyogbWFwIGJ5dGUgYXJyYXkgYmxvY2sgdG8gY2lwaGVyIHN0YXRlCi0gICAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXk6ICovCi0gIHMwID0gR0VUVTMyKGluKSBeIHJrWzBdOwotICBzMSA9IEdFVFUzMihpbiArIDQpIF4gcmtbMV07Ci0gIHMyID0gR0VUVTMyKGluICsgOCkgXiBya1syXTsKLSAgczMgPSBHRVRVMzIoaW4gKyAxMikgXiBya1szXTsKLSAgLyoKLSAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgotICAgKi8KLSAgciA9IGtleS0+cm91bmRzID4+IDE7Ci0gIGZvciAoOzspIHsKLSAgICB0MCA9IFRlMFsoczAgPj4gMjQpXSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGUzWyhzMykmMHhmZl0gXiBya1s0XTsKLSAgICB0MSA9IFRlMFsoczEgPj4gMjQpXSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGUzWyhzMCkmMHhmZl0gXiBya1s1XTsKLSAgICB0MiA9IFRlMFsoczIgPj4gMjQpXSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGUzWyhzMSkmMHhmZl0gXiBya1s2XTsKLSAgICB0MyA9IFRlMFsoczMgPj4gMjQpXSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGUzWyhzMikmMHhmZl0gXiBya1s3XTsKLSAgICByayArPSA4OwotICAgIGlmICgtLXIgPT0gMCkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHMwID0gVGUwWyh0MCA+PiAyNCldIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZTNbKHQzKSYweGZmXSBeIHJrWzBdOwotICAgIHMxID0gVGUwWyh0MSA+PiAyNCldIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZTNbKHQwKSYweGZmXSBeIHJrWzFdOwotICAgIHMyID0gVGUwWyh0MiA+PiAyNCldIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZTNbKHQxKSYweGZmXSBeIHJrWzJdOwotICAgIHMzID0gVGUwWyh0MyA+PiAyNCldIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZTNbKHQyKSYweGZmXSBeIHJrWzNdOwotICB9Ci0KLSAgLyogIGFwcGx5IGxhc3Qgcm91bmQgYW5kIG1hcCBjaXBoZXIgc3RhdGUgdG8gYnl0ZSBhcnJheSBibG9jazogKi8KLSAgczAgPSAoVGUyWyh0MCA+PiAyNCldICYgMHhmZjAwMDAwMCkgXiAoVGUzWyh0MSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KLSAgICAgICAoVGUwWyh0MiA+PiA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXiAoVGUxWyh0MykmMHhmZl0gJiAweDAwMDAwMGZmKSBeCi0gICAgICAgcmtbMF07Ci0gIFBVVFUzMihvdXQsIHMwKTsKLSAgczEgPSAoVGUyWyh0MSA+PiAyNCldICYgMHhmZjAwMDAwMCkgXiAoVGUzWyh0MiA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KLSAgICAgICAoVGUwWyh0MyA+PiA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXiAoVGUxWyh0MCkmMHhmZl0gJiAweDAwMDAwMGZmKSBeCi0gICAgICAgcmtbMV07Ci0gIFBVVFUzMihvdXQgKyA0LCBzMSk7Ci0gIHMyID0gKFRlMlsodDIgPj4gMjQpXSAmIDB4ZmYwMDAwMDApIF4gKFRlM1sodDMgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCi0gICAgICAgKFRlMFsodDAgPj4gOCkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4gKFRlMVsodDEpJjB4ZmZdICYgMHgwMDAwMDBmZikgXgotICAgICAgIHJrWzJdOwotICBQVVRVMzIob3V0ICsgOCwgczIpOwotICBzMyA9IChUZTJbKHQzID4+IDI0KV0gJiAweGZmMDAwMDAwKSBeIChUZTNbKHQwID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMCkgXgotICAgICAgIChUZTBbKHQxID4+IDgpICYgMHhmZl0gJiAweDAwMDBmZjAwKSBeIChUZTFbKHQyKSYweGZmXSAmIDB4MDAwMDAwZmYpIF4KLSAgICAgICBya1szXTsKLSAgUFVUVTMyKG91dCArIDEyLCBzMyk7Ci19Ci0KLXZvaWQgQUVTX2RlY3J5cHQoY29uc3Qgdm9pZCogaW5fcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgdm9pZCogb3V0X3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgIGNvbnN0IEFFU19LRVkqIGtleSkgewotICBjb25zdCB1aW50OF90KiBpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluX3BvaW50ZXIpOwotICB1aW50OF90KiBvdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihvdXRfcG9pbnRlcik7Ci0gIGNvbnN0IHVpbnQzMl90KiByazsKLSAgdWludDMyX3QgczAsIHMxLCBzMiwgczMsIHQwLCB0MSwgdDIsIHQzOwotICBpbnQgcjsKLSAgU0JfRENIRUNLKGluICYmIG91dCAmJiBrZXkpOwotICByayA9IGtleS0+cmRfa2V5OwotCi0gIC8qIG1hcCBieXRlIGFycmF5IGJsb2NrIHRvIGNpcGhlciBzdGF0ZQotICAgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5OiAqLwotICBzMCA9IEdFVFUzMihpbikgXiBya1swXTsKLSAgczEgPSBHRVRVMzIoaW4gKyA0KSBeIHJrWzFdOwotICBzMiA9IEdFVFUzMihpbiArIDgpIF4gcmtbMl07Ci0gIHMzID0gR0VUVTMyKGluICsgMTIpIF4gcmtbM107Ci0KLSAgLyoKLSAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgotICAgKi8KLSAgciA9IGtleS0+cm91bmRzID4+IDE7Ci0gIGZvciAoOzspIHsKLSAgICB0MCA9IFRkMFsoczAgPj4gMjQpXSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGQzWyhzMSkmMHhmZl0gXiBya1s0XTsKLSAgICB0MSA9IFRkMFsoczEgPj4gMjQpXSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGQzWyhzMikmMHhmZl0gXiBya1s1XTsKLSAgICB0MiA9IFRkMFsoczIgPj4gMjQpXSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGQzWyhzMykmMHhmZl0gXiBya1s2XTsKLSAgICB0MyA9IFRkMFsoczMgPj4gMjQpXSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+IDgpICYgMHhmZl0gXgotICAgICAgICAgVGQzWyhzMCkmMHhmZl0gXiBya1s3XTsKLSAgICByayArPSA4OwotICAgIGlmICgtLXIgPT0gMCkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHMwID0gVGQwWyh0MCA+PiAyNCldIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZDNbKHQxKSYweGZmXSBeIHJrWzBdOwotICAgIHMxID0gVGQwWyh0MSA+PiAyNCldIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZDNbKHQyKSYweGZmXSBeIHJrWzFdOwotICAgIHMyID0gVGQwWyh0MiA+PiAyNCldIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZDNbKHQzKSYweGZmXSBeIHJrWzJdOwotICAgIHMzID0gVGQwWyh0MyA+PiAyNCldIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gOCkgJiAweGZmXSBeCi0gICAgICAgICBUZDNbKHQwKSYweGZmXSBeIHJrWzNdOwotICB9Ci0KLSAgLyogYXBwbHkgbGFzdCByb3VuZCBhbmQKLSAgICogbWFwIGNpcGhlciBzdGF0ZSB0byBieXRlIGFycmF5IGJsb2NrOiAqLwotICBzMCA9ICgodWludDMyX3QpVGQ0Wyh0MCA+PiAyNCldIDw8IDI0KSBeCi0gICAgICAgKCh1aW50MzJfdClUZDRbKHQzID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCi0gICAgICAgKCh1aW50MzJfdClUZDRbKHQyID4+IDgpICYgMHhmZl0gPDwgOCkgXiAoKHVpbnQzMl90KVRkNFsodDEpJjB4ZmZdKSBeCi0gICAgICAgcmtbMF07Ci0gIFBVVFUzMihvdXQsIHMwKTsKLSAgczEgPSAoKHVpbnQzMl90KVRkNFsodDEgPj4gMjQpXSA8PCAyNCkgXgotICAgICAgICgodWludDMyX3QpVGQ0Wyh0MCA+PiAxNikgJiAweGZmXSA8PCAxNikgXgotICAgICAgICgodWludDMyX3QpVGQ0Wyh0MyA+PiA4KSAmIDB4ZmZdIDw8IDgpIF4gKCh1aW50MzJfdClUZDRbKHQyKSYweGZmXSkgXgotICAgICAgIHJrWzFdOwotICBQVVRVMzIob3V0ICsgNCwgczEpOwotICBzMiA9ICgodWludDMyX3QpVGQ0Wyh0MiA+PiAyNCldIDw8IDI0KSBeCi0gICAgICAgKCh1aW50MzJfdClUZDRbKHQxID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCi0gICAgICAgKCh1aW50MzJfdClUZDRbKHQwID4+IDgpICYgMHhmZl0gPDwgOCkgXiAoKHVpbnQzMl90KVRkNFsodDMpJjB4ZmZdKSBeCi0gICAgICAgcmtbMl07Ci0gIFBVVFUzMihvdXQgKyA4LCBzMik7Ci0gIHMzID0gKCh1aW50MzJfdClUZDRbKHQzID4+IDI0KV0gPDwgMjQpIF4KLSAgICAgICAoKHVpbnQzMl90KVRkNFsodDIgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KLSAgICAgICAoKHVpbnQzMl90KVRkNFsodDEgPj4gOCkgJiAweGZmXSA8PCA4KSBeICgodWludDMyX3QpVGQ0Wyh0MCkmMHhmZl0pIF4KLSAgICAgICBya1szXTsKLSAgUFVUVTMyKG91dCArIDEyLCBzMyk7Ci19Ci0KLXZvaWQgQUVTX2N0cjEyOF9lbmNyeXB0KGNvbnN0IHZvaWQqIGluLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19LRVkqIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaXZlY1tTQl9BRVNfQkxPQ0tfU0laRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVjb3VudF9idWZbU0JfQUVTX0JMT0NLX1NJWkVdLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBudW0pIHsKLSAgQ1JZUFRPX2N0cjEyOF9lbmNyeXB0KGluLCBvdXQsIGxlbiwga2V5LCBpdmVjLCBlY291bnRfYnVmLCBudW0sIEFFU19lbmNyeXB0KTsKLX0KLQotdm9pZCBBRVNfY2JjX2VuY3J5cHQoY29uc3Qgdm9pZCogaW4sCi0gICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXQsCi0gICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX0tFWSoga2V5LAotICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogaXZlYywKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBlbmMpIHsKLSAgaWYgKGVuYykgewotICAgIENSWVBUT19jYmMxMjhfZW5jcnlwdChpbiwgb3V0LCBsZW4sIGtleSwgaXZlYywgQUVTX2VuY3J5cHQpOwotICB9IGVsc2UgewotICAgIENSWVBUT19jYmMxMjhfZGVjcnlwdChpbiwgb3V0LCBsZW4sIGtleSwgaXZlYywgQUVTX2RlY3J5cHQpOwotICB9Ci19Ci0KLS8vIC0tLSBHQ00gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIEdDTV9NVUwoY3R4LCBYaSkgZ2NtX2dtdWx0XzRiaXQoKGN0eCktPlhpLnUsIChjdHgpLT5IdGFibGUpCi0jZGVmaW5lIFBBQ0socykgKChzaXplX3QpKHMpIDw8IChzaXplb2Yoc2l6ZV90KSAqIDggLSAxNikpCi0jZGVmaW5lIFJFRFVDRTFCSVQoVikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc2l6ZW9mKHNpemVfdCkgPT0gOCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB1aW50NjRfdCBUID0gVUlOVDY0X0MoMHhlMTAwMDAwMDAwMDAwMDAwKSAmICgwIC0gKChWKS5sbyAmIDEpKTsgXAotICAgICAgKFYpLmxvID0gKChWKS5oaSA8PCA2MykgfCAoKFYpLmxvID4+IDEpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIChWKS5oaSA9ICgoVikuaGkgPj4gMSkgXiBUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgdWludDMyX3QgVCA9IDB4ZTEwMDAwMDBVICYgKDAgLSAodWludDMyX3QpKChWKS5sbyAmIDEpKTsgICAgICAgIFwKLSAgICAgIChWKS5sbyA9ICgoVikuaGkgPDwgNjMpIHwgKChWKS5sbyA+PiAxKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAoVikuaGkgPSAoKFYpLmhpID4+IDEpIF4gKCh1aW50NjRfdClUIDw8IDMyKTsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotbmFtZXNwYWNlIHsKLWNvbnN0IHNpemVfdCByZW1fNGJpdFsxNl0gPSB7Ci0gICAgUEFDSygweDAwMDApLCBQQUNLKDB4MUMyMCksIFBBQ0soMHgzODQwKSwgUEFDSygweDI0NjApLAotICAgIFBBQ0soMHg3MDgwKSwgUEFDSygweDZDQTApLCBQQUNLKDB4NDhDMCksIFBBQ0soMHg1NEUwKSwKLSAgICBQQUNLKDB4RTEwMCksIFBBQ0soMHhGRDIwKSwgUEFDSygweEQ5NDApLCBQQUNLKDB4QzU2MCksCi0gICAgUEFDSygweDkxODApLCBQQUNLKDB4OERBMCksIFBBQ0soMHhBOUMwKSwgUEFDSygweEI1RTApfTsKLQotc3RhdGljIHZvaWQgZ2NtX2luaXRfNGJpdCh1MTI4IEh0YWJsZVsxNl0sIHVpbnQ2NF90IEhbMl0pIHsKLSAgdTEyOCBWOwotCi0gIEh0YWJsZVswXS5oaSA9IDA7Ci0gIEh0YWJsZVswXS5sbyA9IDA7Ci0gIFYuaGkgPSBIWzBdOwotICBWLmxvID0gSFsxXTsKLQotICBIdGFibGVbOF0gPSBWOwotICBSRURVQ0UxQklUKFYpOwotICBIdGFibGVbNF0gPSBWOwotICBSRURVQ0UxQklUKFYpOwotICBIdGFibGVbMl0gPSBWOwotICBSRURVQ0UxQklUKFYpOwotICBIdGFibGVbMV0gPSBWOwotICBIdGFibGVbM10uaGkgPSBWLmhpIF4gSHRhYmxlWzJdLmhpLCBIdGFibGVbM10ubG8gPSBWLmxvIF4gSHRhYmxlWzJdLmxvOwotICBWID0gSHRhYmxlWzRdOwotICBIdGFibGVbNV0uaGkgPSBWLmhpIF4gSHRhYmxlWzFdLmhpLCBIdGFibGVbNV0ubG8gPSBWLmxvIF4gSHRhYmxlWzFdLmxvOwotICBIdGFibGVbNl0uaGkgPSBWLmhpIF4gSHRhYmxlWzJdLmhpLCBIdGFibGVbNl0ubG8gPSBWLmxvIF4gSHRhYmxlWzJdLmxvOwotICBIdGFibGVbN10uaGkgPSBWLmhpIF4gSHRhYmxlWzNdLmhpLCBIdGFibGVbN10ubG8gPSBWLmxvIF4gSHRhYmxlWzNdLmxvOwotICBWID0gSHRhYmxlWzhdOwotICBIdGFibGVbOV0uaGkgPSBWLmhpIF4gSHRhYmxlWzFdLmhpLCBIdGFibGVbOV0ubG8gPSBWLmxvIF4gSHRhYmxlWzFdLmxvOwotICBIdGFibGVbMTBdLmhpID0gVi5oaSBeIEh0YWJsZVsyXS5oaSwgSHRhYmxlWzEwXS5sbyA9IFYubG8gXiBIdGFibGVbMl0ubG87Ci0gIEh0YWJsZVsxMV0uaGkgPSBWLmhpIF4gSHRhYmxlWzNdLmhpLCBIdGFibGVbMTFdLmxvID0gVi5sbyBeIEh0YWJsZVszXS5sbzsKLSAgSHRhYmxlWzEyXS5oaSA9IFYuaGkgXiBIdGFibGVbNF0uaGksIEh0YWJsZVsxMl0ubG8gPSBWLmxvIF4gSHRhYmxlWzRdLmxvOwotICBIdGFibGVbMTNdLmhpID0gVi5oaSBeIEh0YWJsZVs1XS5oaSwgSHRhYmxlWzEzXS5sbyA9IFYubG8gXiBIdGFibGVbNV0ubG87Ci0gIEh0YWJsZVsxNF0uaGkgPSBWLmhpIF4gSHRhYmxlWzZdLmhpLCBIdGFibGVbMTRdLmxvID0gVi5sbyBeIEh0YWJsZVs2XS5sbzsKLSAgSHRhYmxlWzE1XS5oaSA9IFYuaGkgXiBIdGFibGVbN10uaGksIEh0YWJsZVsxNV0ubG8gPSBWLmxvIF4gSHRhYmxlWzddLmxvOwotfQotCi12b2lkIGdjbV9nbXVsdF80Yml0KHVpbnQ2NF90IFhpWzJdLCBjb25zdCB1MTI4IEh0YWJsZVsxNl0pIHsKLSAgdTEyOCBaOwotICBpbnQgY250ID0gMTU7Ci0gIHNpemVfdCByZW0sIG5sbywgbmhpOwotCi0gIG5sbyA9ICgoY29uc3QgdWludDhfdCopWGkpWzE1XTsKLSAgbmhpID0gbmxvID4+IDQ7Ci0gIG5sbyAmPSAweGY7Ci0KLSAgWi5oaSA9IEh0YWJsZVtubG9dLmhpOwotICBaLmxvID0gSHRhYmxlW25sb10ubG87Ci0KLSAgd2hpbGUgKDEpIHsKLSAgICByZW0gPSAoc2l6ZV90KVoubG8gJiAweGY7Ci0gICAgWi5sbyA9IChaLmhpIDw8IDYwKSB8IChaLmxvID4+IDQpOwotICAgIFouaGkgPSAoWi5oaSA+PiA0KTsKLSAgICBpZiAoc2l6ZW9mKHNpemVfdCkgPT0gOCkgewotICAgICAgWi5oaSBePSByZW1fNGJpdFtyZW1dOwotICAgIH0gZWxzZSB7Ci0gICAgICBaLmhpIF49ICh1aW50NjRfdClyZW1fNGJpdFtyZW1dIDw8IDMyOwotICAgIH0KLQotICAgIFouaGkgXj0gSHRhYmxlW25oaV0uaGk7Ci0gICAgWi5sbyBePSBIdGFibGVbbmhpXS5sbzsKLQotICAgIGlmICgtLWNudCA8IDApIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG5sbyA9ICgoY29uc3QgdWludDhfdCopWGkpW2NudF07Ci0gICAgbmhpID0gbmxvID4+IDQ7Ci0gICAgbmxvICY9IDB4ZjsKLQotICAgIHJlbSA9IChzaXplX3QpWi5sbyAmIDB4ZjsKLSAgICBaLmxvID0gKFouaGkgPDwgNjApIHwgKFoubG8gPj4gNCk7Ci0gICAgWi5oaSA9IChaLmhpID4+IDQpOwotICAgIGlmIChzaXplb2Yoc2l6ZV90KSA9PSA4KSB7Ci0gICAgICBaLmhpIF49IHJlbV80Yml0W3JlbV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIFouaGkgXj0gKHVpbnQ2NF90KXJlbV80Yml0W3JlbV0gPDwgMzI7Ci0gICAgfQotCi0gICAgWi5oaSBePSBIdGFibGVbbmxvXS5oaTsKLSAgICBaLmxvIF49IEh0YWJsZVtubG9dLmxvOwotICB9Ci0KLSAgWGlbMF0gPSBTYkJ5dGVTd2FwVTY0KFouaGkpOwotICBYaVsxXSA9IFNiQnl0ZVN3YXBVNjQoWi5sbyk7Ci19Ci0KLS8qIFN0cmVhbWVkIGdjbV9tdWx0XzRiaXQsIHNlZSBDUllQVE9fZ2NtMTI4X1tlbnxkZV1jcnlwdCBmb3IKLSAqIGRldGFpbHMuLi4gQ29tcGlsZXItZ2VuZXJhdGVkIGNvZGUgZG9lc24ndCBzZWVtIHRvIGdpdmUgYW55Ci0gKiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCwgYXQgbGVhc3Qgbm90IG9uIHg4NltfNjRdLiBJdCdzIGhlcmUKLSAqIG1vc3RseSBhcyByZWZlcmVuY2UgYW5kIGEgcGxhY2Vob2xkZXIgZm9yIHBvc3NpYmxlIGZ1dHVyZQotICogbm9uLXRyaXZpYWwgb3B0aW1pemF0aW9uW3NdLi4uICovCi12b2lkIGdjbV9naGFzaF80Yml0KHVpbnQ2NF90IFhpWzJdLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB1MTI4IEh0YWJsZVsxNl0sCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGlucCwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgewotICB1MTI4IFo7Ci0gIGludCBjbnQ7Ci0gIHNpemVfdCByZW0sIG5sbywgbmhpOwotCi0gIGRvIHsKLSAgICBjbnQgPSAxNTsKLSAgICBubG8gPSAoKGNvbnN0IHVpbnQ4X3QqKVhpKVsxNV07Ci0gICAgbmxvIF49IGlucFsxNV07Ci0gICAgbmhpID0gbmxvID4+IDQ7Ci0gICAgbmxvICY9IDB4ZjsKLQotICAgIFouaGkgPSBIdGFibGVbbmxvXS5oaTsKLSAgICBaLmxvID0gSHRhYmxlW25sb10ubG87Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgcmVtID0gKHNpemVfdClaLmxvICYgMHhmOwotICAgICAgWi5sbyA9IChaLmhpIDw8IDYwKSB8IChaLmxvID4+IDQpOwotICAgICAgWi5oaSA9IChaLmhpID4+IDQpOwotICAgICAgaWYgKHNpemVvZihzaXplX3QpID09IDgpIHsKLSAgICAgICAgWi5oaSBePSByZW1fNGJpdFtyZW1dOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgWi5oaSBePSAodWludDY0X3QpcmVtXzRiaXRbcmVtXSA8PCAzMjsKLSAgICAgIH0KLQotICAgICAgWi5oaSBePSBIdGFibGVbbmhpXS5oaTsKLSAgICAgIFoubG8gXj0gSHRhYmxlW25oaV0ubG87Ci0KLSAgICAgIGlmICgtLWNudCA8IDApIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIG5sbyA9ICgoY29uc3QgdWludDhfdCopWGkpW2NudF07Ci0gICAgICBubG8gXj0gaW5wW2NudF07Ci0gICAgICBuaGkgPSBubG8gPj4gNDsKLSAgICAgIG5sbyAmPSAweGY7Ci0KLSAgICAgIHJlbSA9IChzaXplX3QpWi5sbyAmIDB4ZjsKLSAgICAgIFoubG8gPSAoWi5oaSA8PCA2MCkgfCAoWi5sbyA+PiA0KTsKLSAgICAgIFouaGkgPSAoWi5oaSA+PiA0KTsKLSAgICAgIGlmIChzaXplb2Yoc2l6ZV90KSA9PSA4KSB7Ci0gICAgICAgIFouaGkgXj0gcmVtXzRiaXRbcmVtXTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIFouaGkgXj0gKHVpbnQ2NF90KXJlbV80Yml0W3JlbV0gPDwgMzI7Ci0gICAgICB9Ci0KLSAgICAgIFouaGkgXj0gSHRhYmxlW25sb10uaGk7Ci0gICAgICBaLmxvIF49IEh0YWJsZVtubG9dLmxvOwotICAgIH0KLQotICAgIFhpWzBdID0gU2JCeXRlU3dhcFU2NChaLmhpKTsKLSAgICBYaVsxXSA9IFNiQnl0ZVN3YXBVNjQoWi5sbyk7Ci0gIH0gd2hpbGUgKGlucCArPSAxNiwgbGVuIC09IDE2KTsKLX0KLX0gIC8vIG5hbWVzcGFjZQotCi12b2lkIENSWVBUT19naGFzaF9pbml0KGdtdWx0X2Z1bmMqIG91dF9tdWx0LAotICAgICAgICAgICAgICAgICAgICAgICBnaGFzaF9mdW5jKiBvdXRfaGFzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgdTEyOCogb3V0X2tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgdTEyOCBvdXRfdGFibGVbMTZdLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG91dF9pc19hdngsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGdjbV9rZXkpIHsKLSAgKm91dF9pc19hdnggPSAwOwotCi0gIHVuaW9uIHsKLSAgICB1aW50NjRfdCB1WzJdOwotICAgIHVpbnQ4X3QgY1sxNl07Ci0gIH0gSDsKLQotICBtZW1jcHkoSC5jLCBnY21fa2V5LCAxNik7Ci0KLSAgLyogSCBpcyBzdG9yZWQgaW4gaG9zdCBieXRlIG9yZGVyICovCi0gIEgudVswXSA9IFNiQnl0ZVN3YXBVNjQoSC51WzBdKTsKLSAgSC51WzFdID0gU2JCeXRlU3dhcFU2NChILnVbMV0pOwotCi0gIG1lbWNweShvdXRfa2V5LCBILmMsIDE2KTsKLQotICBnY21faW5pdF80Yml0KG91dF90YWJsZSwgSC51KTsKLSAgKm91dF9tdWx0ID0gZ2NtX2dtdWx0XzRiaXQ7Ci0gICpvdXRfaGFzaCA9IGdjbV9naGFzaF80Yml0OwotfQotCi12b2lkIEFFU19nY20xMjhfaW5pdChHQ00xMjhfQ09OVEVYVCogY3R4LCBjb25zdCBBRVNfS0VZKiBhZXNfa2V5LCBpbnQgZW5jKSB7Ci0gIG1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7Ci0gIGN0eC0+YmxvY2sgPSBBRVNfZW5jcnlwdDsKLQotICB1aW50OF90IGdjbV9rZXlbMTZdOwotICBtZW1zZXQoZ2NtX2tleSwgMCwgc2l6ZW9mKGdjbV9rZXkpKTsKLSAgKCpjdHgtPmJsb2NrKShnY21fa2V5LCBnY21fa2V5LCBhZXNfa2V5KTsKLQotICBpbnQgaXNfYXZ4OwotICBDUllQVE9fZ2hhc2hfaW5pdCgmY3R4LT5nbXVsdCwgJmN0eC0+Z2hhc2gsICZjdHgtPkgsIGN0eC0+SHRhYmxlLCAmaXNfYXZ4LAotICAgICAgICAgICAgICAgICAgICBnY21fa2V5KTsKLX0KLQotdm9pZCBBRVNfZ2NtMTI4X3NldGl2KEdDTTEyOF9DT05URVhUKiBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX0tFWSoga2V5LAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGl2X3ZvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgewotICB1bnNpZ25lZCBpbnQgY3RyOwotICBjb25zdCB1aW50OF90KiBpdiA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpdl92b2lkKTsKLQotICBjdHgtPllpLnVbMF0gPSAwOwotICBjdHgtPllpLnVbMV0gPSAwOwotICBjdHgtPlhpLnVbMF0gPSAwOwotICBjdHgtPlhpLnVbMV0gPSAwOwotICBjdHgtPmxlbi51WzBdID0gMDsgLyogQUFEIGxlbmd0aCAqLwotICBjdHgtPmxlbi51WzFdID0gMDsgLyogbWVzc2FnZSBsZW5ndGggKi8KLSAgY3R4LT5hcmVzID0gMDsKLSAgY3R4LT5tcmVzID0gMDsKLQotICBpZiAobGVuID09IDEyKSB7Ci0gICAgbWVtY3B5KGN0eC0+WWkuYywgaXYsIDEyKTsKLSAgICBjdHgtPllpLmNbMTVdID0gMTsKLSAgICBjdHIgPSAxOwotICB9IGVsc2UgewotICAgIHVpbnQ2NF90IGxlbjAgPSBsZW47Ci0KLSAgICB3aGlsZSAobGVuID49IDE2KSB7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgY3R4LT5ZaS5jW2ldIF49IGl2W2ldOwotICAgICAgfQotICAgICAgR0NNX01VTChjdHgsIFlpKTsKLSAgICAgIGl2ICs9IDE2OwotICAgICAgbGVuIC09IDE2OwotICAgIH0KLSAgICBpZiAobGVuKSB7Ci0gICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGN0eC0+WWkuY1tpXSBePSBpdltpXTsKLSAgICAgIH0KLSAgICAgIEdDTV9NVUwoY3R4LCBZaSk7Ci0gICAgfQotICAgIGxlbjAgPDw9IDM7Ci0gICAgY3R4LT5ZaS51WzFdIF49IFNiQnl0ZVN3YXBVNjQobGVuMCk7Ci0KLSAgICBHQ01fTVVMKGN0eCwgWWkpOwotICAgIGN0ciA9IEdFVFUzMl9hbGlnbmVkKGN0eC0+WWkuYyArIDEyKTsKLSAgfQotCi0gICgqY3R4LT5ibG9jaykoY3R4LT5ZaS5jLCBjdHgtPkVLMC5jLCBrZXkpOwotICArK2N0cjsKLSAgUFVUVTMyX2FsaWduZWQoY3R4LT5ZaS5jICsgMTIsIGN0cik7Ci19Ci0KLWludCBBRVNfZ2NtMTI4X2FhZChHQ00xMjhfQ09OVEVYVCogY3R4LCBjb25zdCB2b2lkKiBhYWRfdm9pZCwgc2l6ZV90IGxlbikgewotICB1bnNpZ25lZCBpbnQgbjsKLSAgdWludDY0X3QgYWxlbiA9IGN0eC0+bGVuLnVbMF07Ci0gIGNvbnN0IHVpbnQ4X3QqIGFhZCA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhYWRfdm9pZCk7Ci0KLSAgaWYgKGN0eC0+bGVuLnVbMV0pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGFsZW4gKz0gbGVuOwotICBpZiAoYWxlbiA+IChVSU5UNjRfQygxKSA8PCA2MSkgfHwgKHNpemVvZihsZW4pID09IDggJiYgYWxlbiA8IGxlbikpIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBjdHgtPmxlbi51WzBdID0gYWxlbjsKLQotICBuID0gY3R4LT5hcmVzOwotICBpZiAobikgewotICAgIHdoaWxlIChuICYmIGxlbikgewotICAgICAgY3R4LT5YaS5jW25dIF49ICooYWFkKyspOwotICAgICAgLS1sZW47Ci0gICAgICBuID0gKG4gKyAxKSAlIDE2OwotICAgIH0KLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICBHQ01fTVVMKGN0eCwgWGkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjdHgtPmFyZXMgPSBuOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICB9Ci0KLSAgLyogUHJvY2VzcyBhIHdob2xlIG51bWJlciBvZiBibG9ja3MuICovCi0gIHdoaWxlIChsZW4gPj0gMTYpIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgIGN0eC0+WGkuY1tpXSBePSBhYWRbaV07Ci0gICAgfQotICAgIEdDTV9NVUwoY3R4LCBYaSk7Ci0gICAgYWFkICs9IDE2OwotICAgIGxlbiAtPSAxNjsKLSAgfQotCi0gIC8qIFByb2Nlc3MgdGhlIHJlbWFpbmRlci4gKi8KLSAgaWYgKGxlbiAhPSAwKSB7Ci0gICAgbiA9ICh1bnNpZ25lZCBpbnQpbGVuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgIGN0eC0+WGkuY1tpXSBePSBhYWRbaV07Ci0gICAgfQotICB9Ci0KLSAgY3R4LT5hcmVzID0gbjsKLSAgcmV0dXJuIDE7Ci19Ci0KLWludCBBRVNfZ2NtMTI4X2VuY3J5cHQoR0NNMTI4X0NPTlRFWFQqIGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX0tFWSoga2V5LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBpbl92b2lkLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXRfdm9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbikgewotICB1bnNpZ25lZCBpbnQgbiwgY3RyOwotICB1aW50NjRfdCBtbGVuID0gY3R4LT5sZW4udVsxXTsKLSAgYmxvY2sxMjhfZiBibG9jayA9IGN0eC0+YmxvY2s7Ci0gIGNvbnN0IHVpbnQ4X3QqIGluID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluX3ZvaWQpOwotICB1aW50OF90KiBvdXQgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4ob3V0X3ZvaWQpOwotCi0gIG1sZW4gKz0gbGVuOwotICBpZiAobWxlbiA+ICgoVUlOVDY0X0MoMSkgPDwgMzYpIC0gMzIpIHx8IChzaXplb2YobGVuKSA9PSA4ICYmIG1sZW4gPCBsZW4pKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgY3R4LT5sZW4udVsxXSA9IG1sZW47Ci0KLSAgaWYgKGN0eC0+YXJlcykgewotICAgIC8qIEZpcnN0IGNhbGwgdG8gZW5jcnlwdCBmaW5hbGl6ZXMgR0hBU0goQUFEKSAqLwotICAgIEdDTV9NVUwoY3R4LCBYaSk7Ci0gICAgY3R4LT5hcmVzID0gMDsKLSAgfQotCi0gIGN0ciA9IEdFVFUzMl9hbGlnbmVkKGN0eC0+WWkuYyArIDEyKTsKLQotICBuID0gY3R4LT5tcmVzOwotICBpZiAobikgewotICAgIHdoaWxlIChuICYmIGxlbikgewotICAgICAgY3R4LT5YaS5jW25dIF49ICoob3V0KyspID0gKihpbisrKSBeIGN0eC0+RUtpLmNbbl07Ci0gICAgICAtLWxlbjsKLSAgICAgIG4gPSAobiArIDEpICUgMTY7Ci0gICAgfQotICAgIGlmIChuID09IDApIHsKLSAgICAgIEdDTV9NVUwoY3R4LCBYaSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN0eC0+bXJlcyA9IG47Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIH0KLQotICB3aGlsZSAobGVuID49IDE2KSB7Ci0gICAgc2l6ZV90KiBvdXRfdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4ob3V0KTsKLSAgICBjb25zdCBzaXplX3QqIGluX3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHNpemVfdCo+KGluKTsKLQotICAgICgqYmxvY2spKGN0eC0+WWkuYywgY3R4LT5FS2kuYywga2V5KTsKLSAgICArK2N0cjsKLSAgICBQVVRVMzJfYWxpZ25lZChjdHgtPllpLmMgKyAxMiwgY3RyKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2IC8gc2l6ZW9mKHNpemVfdCk7ICsraSkgewotICAgICAgY3R4LT5YaS50W2ldIF49IG91dF90W2ldID0gaW5fdFtpXSBeIGN0eC0+RUtpLnRbaV07Ci0gICAgfQotICAgIEdDTV9NVUwoY3R4LCBYaSk7Ci0gICAgb3V0ICs9IDE2OwotICAgIGluICs9IDE2OwotICAgIGxlbiAtPSAxNjsKLSAgfQotCi0gIGlmIChsZW4pIHsKLSAgICAoKmJsb2NrKShjdHgtPllpLmMsIGN0eC0+RUtpLmMsIGtleSk7Ci0gICAgKytjdHI7Ci0gICAgUFVUVTMyX2FsaWduZWQoY3R4LT5ZaS5jICsgMTIsIGN0cik7Ci0gICAgd2hpbGUgKGxlbi0tKSB7Ci0gICAgICBjdHgtPlhpLmNbbl0gXj0gb3V0W25dID0gaW5bbl0gXiBjdHgtPkVLaS5jW25dOwotICAgICAgKytuOwotICAgIH0KLSAgfQotCi0gIGN0eC0+bXJlcyA9IG47Ci0gIHJldHVybiAxOwotfQotCi1pbnQgQUVTX2djbTEyOF9kZWNyeXB0KEdDTTEyOF9DT05URVhUKiBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19LRVkqIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogaW5fdm9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogb3V0X3ZvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIHsKLSAgdW5zaWduZWQgaW50IG4sIGN0cjsKLSAgdWludDY0X3QgbWxlbiA9IGN0eC0+bGVuLnVbMV07Ci0gIGJsb2NrMTI4X2YgYmxvY2sgPSBjdHgtPmJsb2NrOwotICBjb25zdCB1aW50OF90KiBpbiA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbl92b2lkKTsKLSAgdWludDhfdCogb3V0ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG91dF92b2lkKTsKLQotICBtbGVuICs9IGxlbjsKLSAgaWYgKG1sZW4gPiAoKFVJTlQ2NF9DKDEpIDw8IDM2KSAtIDMyKSB8fCAoc2l6ZW9mKGxlbikgPT0gOCAmJiBtbGVuIDwgbGVuKSkgewotICAgIHJldHVybiAwOwotICB9Ci0gIGN0eC0+bGVuLnVbMV0gPSBtbGVuOwotCi0gIGlmIChjdHgtPmFyZXMpIHsKLSAgICAvKiBGaXJzdCBjYWxsIHRvIGRlY3J5cHQgZmluYWxpemVzIEdIQVNIKEFBRCkgKi8KLSAgICBHQ01fTVVMKGN0eCwgWGkpOwotICAgIGN0eC0+YXJlcyA9IDA7Ci0gIH0KLQotICBjdHIgPSBHRVRVMzJfYWxpZ25lZChjdHgtPllpLmMgKyAxMik7Ci0KLSAgbiA9IGN0eC0+bXJlczsKLSAgaWYgKG4pIHsKLSAgICB3aGlsZSAobiAmJiBsZW4pIHsKLSAgICAgIHVpbnQ4X3QgYyA9ICooaW4rKyk7Ci0gICAgICAqKG91dCsrKSA9IGMgXiBjdHgtPkVLaS5jW25dOwotICAgICAgY3R4LT5YaS5jW25dIF49IGM7Ci0gICAgICAtLWxlbjsKLSAgICAgIG4gPSAobiArIDEpICUgMTY7Ci0gICAgfQotICAgIGlmIChuID09IDApIHsKLSAgICAgIEdDTV9NVUwoY3R4LCBYaSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGN0eC0+bXJlcyA9IG47Ci0gICAgICByZXR1cm4gMTsKLSAgICB9Ci0gIH0KLQotICB3aGlsZSAobGVuID49IDE2KSB7Ci0gICAgc2l6ZV90KiBvdXRfdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4ob3V0KTsKLSAgICBjb25zdCBzaXplX3QqIGluX3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHNpemVfdCo+KGluKTsKLQotICAgICgqYmxvY2spKGN0eC0+WWkuYywgY3R4LT5FS2kuYywga2V5KTsKLSAgICArK2N0cjsKLSAgICBQVVRVMzJfYWxpZ25lZChjdHgtPllpLmMgKyAxMiwgY3RyKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDE2IC8gc2l6ZW9mKHNpemVfdCk7ICsraSkgewotICAgICAgc2l6ZV90IGMgPSBpbl90W2ldOwotICAgICAgb3V0X3RbaV0gPSBjIF4gY3R4LT5FS2kudFtpXTsKLSAgICAgIGN0eC0+WGkudFtpXSBePSBjOwotICAgIH0KLSAgICBHQ01fTVVMKGN0eCwgWGkpOwotICAgIG91dCArPSAxNjsKLSAgICBpbiArPSAxNjsKLSAgICBsZW4gLT0gMTY7Ci0gIH0KLQotICBpZiAobGVuKSB7Ci0gICAgKCpibG9jaykoY3R4LT5ZaS5jLCBjdHgtPkVLaS5jLCBrZXkpOwotICAgICsrY3RyOwotICAgIFBVVFUzMl9hbGlnbmVkKGN0eC0+WWkuYyArIDEyLCBjdHIpOwotICAgIHdoaWxlIChsZW4tLSkgewotICAgICAgdWludDhfdCBjID0gaW5bbl07Ci0gICAgICBjdHgtPlhpLmNbbl0gXj0gYzsKLSAgICAgIG91dFtuXSA9IGMgXiBjdHgtPkVLaS5jW25dOwotICAgICAgKytuOwotICAgIH0KLSAgfQotCi0gIGN0eC0+bXJlcyA9IG47Ci0gIHJldHVybiAxOwotfQotCi12b2lkIEFFU19nY20xMjhfdGFnKEdDTTEyOF9DT05URVhUKiBjdHgsIHZvaWQqIHRhZywgc2l6ZV90IGxlbikgewotICB1aW50NjRfdCBhbGVuID0gY3R4LT5sZW4udVswXSA8PCAzOwotICB1aW50NjRfdCBjbGVuID0gY3R4LT5sZW4udVsxXSA8PCAzOwotCi0gIGlmIChjdHgtPm1yZXMgfHwgY3R4LT5hcmVzKSB7Ci0gICAgR0NNX01VTChjdHgsIFhpKTsKLSAgfQotCi0gIGFsZW4gPSBTYkJ5dGVTd2FwVTY0KGFsZW4pOwotICBjbGVuID0gU2JCeXRlU3dhcFU2NChjbGVuKTsKLQotICBjdHgtPlhpLnVbMF0gXj0gYWxlbjsKLSAgY3R4LT5YaS51WzFdIF49IGNsZW47Ci0gIEdDTV9NVUwoY3R4LCBYaSk7Ci0KLSAgY3R4LT5YaS51WzBdIF49IGN0eC0+RUswLnVbMF07Ci0gIGN0eC0+WGkudVsxXSBePSBjdHgtPkVLMC51WzFdOwotCi0gIG1lbWNweSh0YWcsIGN0eC0+WGkuYywKLSAgICAgICAgICAgICAgIGxlbiA8PSBzaXplb2YoY3R4LT5YaS5jKSA/IGxlbiA6IHNpemVvZihjdHgtPlhpLmMpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNyeXB0b2dyYXBoeQotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAotfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NyeXB0b2dyYXBoeS9zb2Z0d2FyZV9hZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThkNWRhNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jcnlwdG9ncmFwaHkvc29mdHdhcmVfYWVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2LDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0gKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0gKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0gKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0gKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0gKgotICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotICogICAgYWNrbm93bGVkZ21lbnQ6Ci0gKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0gKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotLy8gTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfQ1JZUFRPR1JBUEhZX1NPRlRXQVJFX0FFU19IXwotI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9DUllQVE9HUkFQSFlfU09GVFdBUkVfQUVTX0hfCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotI2Vycm9yICJTdGFyYm9hcmQgQ3J5cHRvIEFQSSBpcyBkZXByZWNhdGVkIgotI2Vsc2UKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKLQotbmFtZXNwYWNlIHN0YXJib2FyZCB7Ci1uYW1lc3BhY2Ugc2hhcmVkIHsKLW5hbWVzcGFjZSBzdGFyYm9hcmQgewotbmFtZXNwYWNlIGNyeXB0b2dyYXBoeSB7Ci0KLS8qIFJhdyBBRVMgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBTQl9BRVNfRU5DUllQVCAxCi0jZGVmaW5lIFNCX0FFU19ERUNSWVBUIDAKLQotLyogQUVTX01BWE5SIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBBRVMgcm91bmRzLiAqLwotI2RlZmluZSBTQl9BRVNfTUFYTlIgMTQKLSNkZWZpbmUgU0JfQUVTX0JMT0NLX1NJWkUgMTYKLQotLyogYWVzX2tleV9zdCBzaG91bGQgYmUgYW4gb3BhcXVlIHR5cGUsIGJ1dCBFVlAgcmVxdWlyZXMgdGhhdCB0aGUgc2l6ZSBiZQotICoga25vd24uICovCi1zdHJ1Y3QgYWVzX2tleV9zdCB7Ci0gIHVpbnQzMl90IHJkX2tleVs0ICogKFNCX0FFU19NQVhOUiArIDEpXTsKLSAgdW5zaWduZWQgcm91bmRzOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgYWVzX2tleV9zdCBBRVNfS0VZOwotCi10eXBlZGVmIHZvaWQgKCpibG9jazEyOF9mKShjb25zdCB2b2lkKiBpbiwgdm9pZCogb3V0LCBjb25zdCBBRVNfS0VZKiBrZXkpOwotCi0vKiBBRVNfc2V0X2VuY3J5cHRfa2V5IGNvbmZpZ3VyZXMgfGFlc2tleXwgdG8gZW5jcnlwdCB3aXRoIHRoZSB8Yml0c3wtYml0IGtleSwKLSAqIHxrZXl8LgotICoKLSAqIFdBUk5JTkc6IHVubGlrZSBvdGhlciBPcGVuU1NMIGZ1bmN0aW9ucywgdGhpcyByZXR1cm5zIHplcm8gb24gc3VjY2VzcyBhbmQgYQotICogbmVnYXRpdmUgbnVtYmVyIG9uIGVycm9yLiAqLwotaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3Qgdm9pZCoga2V5LCB1bnNpZ25lZCBiaXRzLCBBRVNfS0VZKiBhZXNrZXkpOwotCi0vKiBBRVNfc2V0X2RlY3J5cHRfa2V5IGNvbmZpZ3VyZXMgfGFlc2tleXwgdG8gZGVjcnlwdCB3aXRoIHRoZSB8Yml0c3wtYml0IGtleSwKLSAqIHxrZXl8LgotICoKLSAqIFdBUk5JTkc6IHVubGlrZSBvdGhlciBPcGVuU1NMIGZ1bmN0aW9ucywgdGhpcyByZXR1cm5zIHplcm8gb24gc3VjY2VzcyBhbmQgYQotICogbmVnYXRpdmUgbnVtYmVyIG9uIGVycm9yLiAqLwotaW50IEFFU19zZXRfZGVjcnlwdF9rZXkoY29uc3Qgdm9pZCoga2V5LCB1bnNpZ25lZCBiaXRzLCBBRVNfS0VZKiBhZXNrZXkpOwotCi0vKiBBRVNfZW5jcnlwdCBlbmNyeXB0cyBhIHNpbmdsZSBibG9jayBmcm9tIHxpbnwgdG8gfG91dHwgd2l0aCB8a2V5fC4gVGhlIHxpbnwKLSAqIGFuZCB8b3V0fCBwb2ludGVycyBtYXkgb3ZlcmxhcC4gKi8KLXZvaWQgQUVTX2VuY3J5cHQoY29uc3Qgdm9pZCogaW4sIHZvaWQqIG91dCwgY29uc3QgQUVTX0tFWSoga2V5KTsKLQotLyogQUVTX2RlY3J5cHQgZGVjcnlwdHMgYSBzaW5nbGUgYmxvY2sgZnJvbSB8aW58IHRvIHxvdXR8IHdpdGggfGtleXwuIFRoZSB8aW58Ci0gKiBhbmQgfG91dHwgcG9pbnRlcnMgbWF5IG92ZXJsYXAuICovCi12b2lkIEFFU19kZWNyeXB0KGNvbnN0IHZvaWQqIGluLCB2b2lkKiBvdXQsIGNvbnN0IEFFU19LRVkqIGtleSk7Ci0KLS8qIEJsb2NrIGNpcGhlciBtb2Rlcy4gKi8KLS8qIEFFU19jdHIxMjhfZW5jcnlwdCBlbmNyeXB0cyAob3IgZGVjcnlwdHMsIGl0J3MgdGhlIHNhbWUgaW4gQ1RSIG1vZGUpIHxsZW58Ci0gKiBieXRlcyBmcm9tIHxpbnwgdG8gfG91dHwuIFRoZSB8bnVtfCBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gemVybyBvbiB0aGUKLSAqIGZpcnN0IGNhbGwgYW5kIHxpdmVjfCB3aWxsIGJlIGluY3JlbWVudGVkLiAqLwotdm9pZCBBRVNfY3RyMTI4X2VuY3J5cHQoY29uc3Qgdm9pZCogaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUVTX0tFWSoga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBpdmVjW1NCX0FFU19CTE9DS19TSVpFXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZWNvdW50X2J1ZltTQl9BRVNfQkxPQ0tfU0laRV0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogbnVtKTsKLQotLyogQUVTX2NiY19lbmNyeXB0IGVuY3J5cHRzIChvciBkZWNyeXB0cywgaWYgfGVuY3wgPT0gfEFFU19ERUNSWVBUfCkgfGxlbnwKLSAqIGJ5dGVzIGZyb20gfGlufCB0byB8b3V0fC4gVGhlIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuICovCi12b2lkIEFFU19jYmNfZW5jcnlwdChjb25zdCB2b2lkKiBpbiwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG91dCwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfS0VZKiBrZXksCi0gICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBpdmVjLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGVuYyk7Ci0KLS8qIEdDTSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVpbnQ2NF90IGhpOwotICB1aW50NjRfdCBsbzsKLX0gdTEyODsKLQotLyogZ211bHRfZnVuYyBtdWx0aXBsaWVzIHxYaXwgYnkgdGhlIEdDTSBrZXkgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8KLSAqIHxYaXwuICovCi10eXBlZGVmIHZvaWQgKCpnbXVsdF9mdW5jKSh1aW50NjRfdCBYaVsyXSwgY29uc3QgdTEyOCBIdGFibGVbMTZdKTsKLQotLyogZ2hhc2hfZnVuYyByZXBlYXRlZGx5IG11bHRpcGxpZXMgfFhpfCBieSB0aGUgR0NNIGtleSBhbmQgYWRkcyBpbiBibG9ja3MgZnJvbQotICogfGlucHwuIFRoZSByZXN1bHQgaXMgd3JpdHRlbiBiYWNrIHRvIHxYaXwgYW5kIHRoZSB8bGVufCBhcmd1bWVudCBtdXN0IGJlIGEKLSAqIG11bHRpcGxlIG9mIDE2LiAqLwotdHlwZWRlZiB2b2lkICgqZ2hhc2hfZnVuYykodWludDY0X3QgWGlbMl0sIGNvbnN0IHUxMjggSHRhYmxlWzE2XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlucCwgc2l6ZV90IGxlbik7Ci0KLS8qIFRoaXMgZGlmZmVycyBmcm9tIHVwc3RyZWFtJ3MgfGdjbTEyOF9jb250ZXh0fCBpbiB0aGF0IGl0IGRvZXMgbm90IGhhdmUgdGhlCi0gKiB8a2V5fCBwb2ludGVyLCBpbiBvcmRlciB0byBtYWtlIGl0IHxtZW1jcHl8LWZyaWVuZGx5LiBSYXRoZXIgdGhlIGtleSBpcwotICogcGFzc2VkIGludG8gZWFjaCBjYWxsIHRoYXQgbmVlZHMgaXQuICovCi1zdHJ1Y3QgZ2NtMTI4X2NvbnRleHQgewotICAvKiBGb2xsb3dpbmcgNiBuYW1lcyBmb2xsb3cgbmFtZXMgaW4gR0NNIHNwZWNpZmljYXRpb24gKi8KLSAgdW5pb24gewotICAgIHVpbnQ2NF90IHVbMl07Ci0gICAgdWludDMyX3QgZFs0XTsKLSAgICB1aW50OF90IGNbMTZdOwotICAgIHNpemVfdCB0WzE2IC8gc2l6ZW9mKHNpemVfdCldOwotICB9IFlpLCBFS2ksIEVLMCwgbGVuLCBYaTsKLSAgLyogTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB8WGl8LCB8SHwgYW5kIHxIdGFibGV8IGlzIGZpeGVkIGJ5IHRoZSBNT1ZCRS1iYXNlZCwKLSAgICogeDg2LTY0LCBHSEFTSCBhc3NlbWJseS4gKi8KLSAgdTEyOCBIOwotICB1MTI4IEh0YWJsZVsxNl07Ci0gIGdtdWx0X2Z1bmMgZ211bHQ7Ci0gIGdoYXNoX2Z1bmMgZ2hhc2g7Ci0gIHVuc2lnbmVkIGludCBtcmVzLCBhcmVzOwotICBibG9jazEyOF9mIGJsb2NrOwotfTsKLQotLyogVGhpcyBBUEkgZGlmZmVycyBmcm9tIHRoZSB1cHN0cmVhbSBBUEkgc2xpZ2h0bHkuIFRoZSB8R0NNMTI4X0NPTlRFWFR8IGRvZXMKLSAqIG5vdCBoYXZlIGEgfGtleXwgcG9pbnRlciB0aGF0IHBvaW50cyB0byB0aGUga2V5IGFzIHVwc3RyZWFtJ3MgdmVyc2lvbiBkb2VzLgotICogSW5zdGVhZCwgZXZlcnkgZnVuY3Rpb24gdGFrZXMgYSB8a2V5fCBwYXJhbWV0ZXIuIFRoaXMgd2F5IHxHQ00xMjhfQ09OVEVYVHwKLSAqIGNhbiBiZSBzYWZlbHkgY29waWVkLiAqLwotdHlwZWRlZiBzdHJ1Y3QgZ2NtMTI4X2NvbnRleHQgR0NNMTI4X0NPTlRFWFQ7Ci0KLS8qIEFFU19nY20xMjhfaW5pdCBpbml0aWFsaXNlcyB8Y3R4fCB0byB1c2UgdGhlIGdpdmVuIGtleS4gKi8KLXZvaWQgQUVTX2djbTEyOF9pbml0KEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IEFFU19LRVkgKmtleSwgaW50IGVuYyk7Ci0KLS8qIEFFU19nY20xMjhfc2V0aXYgc2V0cyB0aGUgSVYgKG5vbmNlKSBmb3IgfGN0eHwuIFRoZSB8a2V5fCBtdXN0IGJlIHRoZSBzYW1lCi0gKiBrZXkgdGhhdCB3YXMgcGFzc2VkIHRvIHxBRVNfZ2NtMTI4X2luaXR8LiAqLwotdm9pZCBBRVNfZ2NtMTI4X3NldGl2KEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IEFFU19LRVkgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppdiwgc2l6ZV90IGl2X2xlbik7Ci0KLS8qIEFFU19nY20xMjhfYWFkIHNldHMgdGhlIGF1dGhlbnRpY2F0ZWQgZGF0YSBmb3IgYW4gaW5zdGFuY2Ugb2YgR0NNLiAgVGhpcyBtdXN0Ci0gKiBiZSBjYWxsZWQgYmVmb3JlIGFuZCBkYXRhIGlzIGVuY3J5cHRlZC4gSXQgcmV0dXJucyBvbmUgb24gc3VjY2VzcyBhbmQgemVybwotICogb3RoZXJ3aXNlLiAqLwotaW50IEFFU19nY20xMjhfYWFkKEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IHZvaWQgKmFhZCwgc2l6ZV90IGxlbik7Ci0KLS8qIEFFU19nY20xMjhfZW5jcnlwdCBlbmNyeXB0cyB8bGVufCBieXRlcyBmcm9tIHxpbnwgdG8gfG91dHwuIFRoZSB8a2V5fCBtdXN0IGJlCi0gKiB0aGUgc2FtZSBrZXkgdGhhdCB3YXMgcGFzc2VkIHRvIHxBRVNfZ2NtMTI4X2luaXR8LiBJdCByZXR1cm5zIG9uZSBvbiBzdWNjZXNzCi0gKiBhbmQgemVybyBvdGhlcndpc2UuICovCi1pbnQgQUVTX2djbTEyOF9lbmNyeXB0KEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IEFFU19LRVkgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGxlbik7Ci0KLS8qIEFFU19nY20xMjhfZGVjcnlwdCBkZWNyeXB0cyB8bGVufCBieXRlcyBmcm9tIHxpbnwgdG8gfG91dHwuIFRoZSB8a2V5fCBtdXN0IGJlCi0gKiB0aGUgc2FtZSBrZXkgdGhhdCB3YXMgcGFzc2VkIHRvIHxBRVNfZ2NtMTI4X2luaXR8LiBJdCByZXR1cm5zIG9uZSBvbiBzdWNjZXNzCi0gKiBhbmQgemVybyBvdGhlcndpc2UuICovCi1pbnQgQUVTX2djbTEyOF9kZWNyeXB0KEdDTTEyOF9DT05URVhUICpjdHgsIGNvbnN0IEFFU19LRVkgKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGxlbik7Ci0KLS8qIEFFU19nY20xMjhfdGFnIGNhbGN1bGF0ZXMgdGhlIGF1dGhlbnRpY2F0b3IgYW5kIGNvcGllcyBpdCBpbnRvIHx0YWd8LiAgVGhlCi0gKiBtaW5pbXVtIG9mIHxsZW58IGFuZCAxNiBieXRlcyBhcmUgY29waWVkIGludG8gfHRhZ3wuICovCi12b2lkIEFFU19nY20xMjhfdGFnKEdDTTEyOF9DT05URVhUICpjdHgsIHZvaWQgKnRhZywgc2l6ZV90IGxlbik7Ci0KLX0gIC8vIG5hbWVzcGFjZSBjcnlwdG9ncmFwaHkKLX0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLX0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKLX0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotCi0jZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfU1RBUkJPQVJEX0NSWVBUT0dSQVBIWV9TT0ZUV0FSRV9BRVNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fZ2V0X21ldHJpY3MuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2dldF9tZXRyaWNzLmNjCmluZGV4IDQ1NzgzMGIuLjhlZjc4YjIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fZ2V0X21ldHJpY3MuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9nZXRfbWV0cmljcy5jYwpAQCAtMTcsOCArMTcsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9zeXN0ZW1faW50ZXJuYWwuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGNvbnN0IHZvaWQqIFNiRHJtR2V0TWV0cmljcyhTYkRybVN5c3RlbSBkcm1fc3lzdGVtLCBpbnQqIHNpemUpIHsKICAgaWYgKHNpemUgPT0gTlVMTCkgewogICAgIFNCX0RMT0coV0FSTklORykgPDwgInxzaXplfCBjYW5ub3QgYmUgTlVMTC4iOwpAQCAtMzQsNSArMzIsMyBAQAogCiAgIHJldHVybiBkcm1fc3lzdGVtLT5HZXRNZXRyaWNzKHNpemUpOwogfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuY2MKaW5kZXggZGVhY2I3YS4uNjUxNmVjYSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9hdG9taWNfcmVwbGFjZV93cml0ZV9maWxlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfYXRvbWljX3JlcGxhY2Vfd3JpdGVfZmlsZS5jYwpAQCAtMTksOCArMTksNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIG5hbWVzcGFjZSBzdGFyYm9hcmQgewogbmFtZXNwYWNlIHNoYXJlZCB7CiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKQEAgLTY3LDUgKzY1LDMgQEAKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKIH0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9hdG9taWNfcmVwbGFjZV93cml0ZV9maWxlLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuaAppbmRleCBmNDY1N2U2Li45Y2I0OWEzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuaAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuaApAQCAtMTgsOCArMTgsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBuYW1lc3BhY2Ugc3RhcmJvYXJkIHsKIG5hbWVzcGFjZSBzaGFyZWQgewogbmFtZXNwYWNlIHN0YXJib2FyZCB7CkBAIC0zMiw2ICszMCw0IEBACiB9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCiB9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9GSUxFX0FUT01JQ19SRVBMQUNFX1dSSVRFX0ZJTEVfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25faW50ZXJuYWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25faW50ZXJuYWwuaAppbmRleCBlMDk0OTE5Li42NTg4YzQ1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sYXp5X2luaXRpYWxpemF0aW9uX2ludGVybmFsLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbGF6eV9pbml0aWFsaXphdGlvbl9pbnRlcm5hbC5oCkBAIC0yMiwxNCArMjIsOCBAQAogI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKIAogLy8gSU5JVElBTElaRURfU1RBVEVfVU5JTklUSUFMSVpFRCBpcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIuCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2RlZmluZSBJTklUSUFMSVpFRF9TVEFURV9JTklUSUFMSVpJTkcgMQogI2RlZmluZSBJTklUSUFMSVpFRF9TVEFURV9JTklUSUFMSVpFRCAyCi0jZWxzZQotI2RlZmluZSBJTklUSUFMSVpFRF9TVEFURV9JTklUSUFMSVpJTkcgMgotI2RlZmluZSBJTklUSUFMSVpFRF9TVEFURV9JTklUSUFMSVpFRCAzCi0jZW5kaWYKIAogbmFtZXNwYWNlIHN0YXJib2FyZCB7CiBuYW1lc3BhY2Ugc2hhcmVkIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25fcHVibGljLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sYXp5X2luaXRpYWxpemF0aW9uX3B1YmxpYy5oCmluZGV4IGZmMDViYjQuLjkzYjMzZjEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2xhenlfaW5pdGlhbGl6YXRpb25fcHVibGljLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbGF6eV9pbml0aWFsaXphdGlvbl9wdWJsaWMuaApAQCAtMjgsMTAgKzI4LDYgQEAKIC8vICJzdGFyYm9hcmQvYXRvbWljLmgiLgogdHlwZWRlZiBpbnQzMl90IEluaXRpYWxpemVkU3RhdGU7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogI2RlZmluZSBJTklUSUFMSVpFRF9TVEFURV9VTklOSVRJQUxJWkVEIDAKLSNlbHNlCi0jZGVmaW5lIElOSVRJQUxJWkVEX1NUQVRFX1VOSU5JVElBTElaRUQgMQotI2VuZGlmCiAKICNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfTEFaWV9JTklUSUFMSVpBVElPTl9QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9jb2RlY191dGlsLmNjCmluZGV4IGE2YjA5MGIuLmJkM2U4YmEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvY29kZWNfdXRpbC5jYwpAQCAtMjg1LDEzICsyODUsMTEgQEAKIC8vIHNwZWMgYnV0IHRoaXMgZnVuY3Rpb24gb25seSBwYXJzZXMgImF2YzEiIGFuZCAiYXZjMyIuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMKIC8vIGZhbHNlIHdoZW4gfGNvZGVjfCBkb2Vzbid0IGNvbnRhaW4gYSB2YWxpZCBjb2RlYyBzdHJpbmcuCiBib29sIFBhcnNlSDI2NEluZm8oY29uc3QgY2hhciogY29kZWMsIGludCogcHJvZmlsZSwgaW50KiBsZXZlbCkgewotICBpZiAoc3RybmNtcChjb2RlYywgImF2YzEuIiwgNSkgIT0gMCAmJgotICAgICAgc3RybmNtcChjb2RlYywgImF2YzMuIiwgNSkgIT0gMCkgeworICBpZiAoc3RybmNtcChjb2RlYywgImF2YzEuIiwgNSkgIT0gMCAmJiBzdHJuY21wKGNvZGVjLCAiYXZjMy4iLCA1KSAhPSAwKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKLSAgaWYgKHN0cmxlbihjb2RlYykgIT0gMTEgfHwgIWlzeGRpZ2l0KGNvZGVjWzldKSB8fAotICAgICAgIWlzeGRpZ2l0KGNvZGVjWzEwXSkpIHsKKyAgaWYgKHN0cmxlbihjb2RlYykgIT0gMTEgfHwgIWlzeGRpZ2l0KGNvZGVjWzldKSB8fCAhaXN4ZGlnaXQoY29kZWNbMTBdKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC0zMTMsOCArMzExLDcgQEAKIC8vIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnQgaW4gdGhlIGNvZGUgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSB2YXJpb3VzCiAvLyBwYXJ0cy4KIGJvb2wgUGFyc2VIMjY1SW5mbyhjb25zdCBjaGFyKiBjb2RlYywgaW50KiBwcm9maWxlLCBpbnQqIGxldmVsKSB7Ci0gIGlmIChzdHJuY21wKGNvZGVjLCAiaGV2MS4iLCA1KSAhPSAwICYmCi0gICAgICBzdHJuY21wKGNvZGVjLCAiaHZjMS4iLCA1KSAhPSAwKSB7CisgIGlmIChzdHJuY21wKGNvZGVjLCAiaGV2MS4iLCA1KSAhPSAwICYmIHN0cm5jbXAoY29kZWMsICJodmMxLiIsIDUpICE9IDApIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIApAQCAtNjI0LDcgKzYyMSw2IEBACiAgIGlmIChzdHJuY21wKGNvZGVjLCAibXA0YS40MC4iLCA4KSA9PSAwKSB7CiAgICAgcmV0dXJuIGtTYk1lZGlhQXVkaW9Db2RlY0FhYzsKICAgfQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IGRlZmluZWQoU0JfSEFTX0FDM19BVURJTykKICAgaWYgKGtTYkhhc0FjM0F1ZGlvKSB7CiAgICAgaWYgKHN0cmNtcChjb2RlYywgImFjLTMiKSA9PSAwKSB7CiAgICAgICByZXR1cm4ga1NiTWVkaWFBdWRpb0NvZGVjQWMzOwpAQCAtNjMzLDggKzYyOSw2IEBACiAgICAgICByZXR1cm4ga1NiTWVkaWFBdWRpb0NvZGVjRWFjMzsKICAgICB9CiAgIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gZGVmaW5lZChTQl9IQVNfQUMzX0FVRElPKQogICBpZiAoc3RybmNtcChjb2RlYywgIm9wdXMiLCA0KSA9PSAwKSB7CiAgICAgcmV0dXJuIGtTYk1lZGlhQXVkaW9Db2RlY09wdXM7CiAgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhLmd5cCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiYzQzYi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV91dGlsJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvYXZjX3V0aWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvYXZjX3V0aWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9jb2RlY191dGlsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV91dGlsLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3V0aWwuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS92aWRlb19jYXBhYmlsaXRpZXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvdmlkZW9fY2FwYWJpbGl0aWVzLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvdnA5X3V0aWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvdnA5X3V0aWwuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgIyBUaGlzIGFsbG93cyB0aGUgdGVzdHMgdG8gaW5jbHVkZSBpbnRlcm5hbCBvbmx5IGhlYWRlciBmaWxlcy4KLSAgICAgICAgJ1NUQVJCT0FSRF9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX2FuZF9vcHVzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkX2FhY19hbmRfb3B1cy5jYwppbmRleCBjNjVmNjQ3Li42ZDJjNzAxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX2FuZF9vcHVzLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZF9hYWNfYW5kX29wdXMuY2MKQEAgLTE5LDkgKzE5LDcgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKIAogYm9vbCBTYk1lZGlhSXNBdWRpb1N1cHBvcnRlZChTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb250ZW50X3R5cGUsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgYml0cmF0ZSkgewogICBpZiAoYXVkaW9fY29kZWMgPT0ga1NiTWVkaWFBdWRpb0NvZGVjQWFjKSB7CiAgICAgcmV0dXJuIGJpdHJhdGUgPD0ga1NiTWVkaWFNYXhBdWRpb0JpdHJhdGVJbkJpdHNQZXJTZWNvbmQ7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX29ubHkuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWRfYWFjX29ubHkuY2MKaW5kZXggYWZjY2NkNC4uZmM3MjkzNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkX2FhY19vbmx5LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZF9hYWNfb25seS5jYwpAQCAtMTksOSArMTksNyBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgogCiBib29sIFNiTWVkaWFJc0F1ZGlvU3VwcG9ydGVkKFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRfdHlwZSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBiaXRyYXRlKSB7CiAgIHJldHVybiBhdWRpb19jb2RlYyA9PSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWMgJiYKICAgICAgICAgIGJpdHJhdGUgPD0ga1NiTWVkaWFNYXhBdWRpb0JpdHJhdGVJbkJpdHNQZXJTZWNvbmQ7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfaXNfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzX3N1cHBvcnRlZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3ZWJmNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCi0KLSNpZiAhU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQotYm9vbCBTYk1lZGlhSXNUcmFuc2ZlckNoYXJhY3RlcmlzdGljc1N1cHBvcnRlZChTYk1lZGlhVHJhbnNmZXJJZCB0cmFuc2Zlcl9pZCkgewotICByZXR1cm4gdHJhbnNmZXJfaWQgPT0ga1NiTWVkaWFUcmFuc2ZlcklkQnQ3MDkgfHwKLSAgICAgICAgIHRyYW5zZmVyX2lkID09IGtTYk1lZGlhVHJhbnNmZXJJZFVuc3BlY2lmaWVkOwotfQotI2VuZGlmICAvLyAhU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oCmluZGV4IDEzZjk5MDAuLmJmNWZlNzggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3N1cHBvcnRfaW50ZXJuYWwuaAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9zdXBwb3J0X2ludGVybmFsLmgKQEAgLTc1LDggKzc1LDYgQEAKIC8vICAgICAgICBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZnBzIHNob3VsZG4ndCBiZSBjb25zaWRlcmVkLgogLy8gfGRlY29kZV90b190ZXh0dXJlX3JlcXVpcmVkfDogV2hldGhlciBvciBub3QgdGhlIHJlc3VsdGluZyB2aWRlbyBmcmFtZXMgY2FuCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBkZWNvZGVkIGFuZCB1c2VkIGFzIHRleHR1cmVzIGJ5IHRoZSBHUFUuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZChTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29udGVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJvZmlsZSwKQEAgLTkxLDI1ICs4OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpOwogCi0jZWxzZSAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQotYm9vbCBTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZChTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKLSNpZiBTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRfZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFQcmltYXJ5SWQgcHJpbWFyeV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVRyYW5zZmVySWQgdHJhbnNmZXJfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFNYXRyaXhJZCBtYXRyaXhfaWQsCi0jZW5kaWYgIC8vIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYW1lX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpOwotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgfGF1ZGlvX2NvZGVjfCBhdCB8Yml0cmF0ZXwuCiAvLyBJZiB8YXVkaW9fY29kZWN8IGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IGNvbmRpdGlvbiwgdGhpcyBmdW5jdGlvbgogLy8gcmV0dXJucyB8ZmFsc2V8LgpAQCAtMTE5LDI4ICs5OCwxMCBAQAogLy8gICAgICAgICAgICAgICAgIGludGVyZmFjZSBpZiB0aGVyZSBpcyBhbnkuICBPdGhlcndpc2UgaXQgd2lsbCBiZSBzZXQgdG8gIiIuCiAvLyAgICAgICAgICAgICAgICAgSXQgc2hvdWxkIG5ldmVyIHRvIHNldCB0byBOVUxMLgogLy8gfGJpdHJhdGV8OiBUaGUgbWVkaWEncyBiaXRyYXRlLgotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JNZWRpYUlzQXVkaW9TdXBwb3J0ZWQoU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBiaXRyYXRlKTsKIAotI2Vsc2UgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KLWJvb2wgU2JNZWRpYUlzQXVkaW9TdXBwb3J0ZWQoU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsIGludDY0X3QgYml0cmF0ZSk7Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQotI2lmICFTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCi0vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIHx0cmFuc2Zlcl9pZHwgYXMgYSB0cmFuc2ZlcgotLy8gY2hhcmFjdGVyaXN0aWNzLiAgSWYgfHRyYW5zZmVyX2lkfCBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIGFueSBjb25kaXRpb24sIHRoaXMKLS8vIGZ1bmN0aW9uIHJldHVybnMgfGZhbHNlfC4KLS8vCi0vLyB8dHJhbnNmZXJfaWR8OiBUaGUgaWQgb2YgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzIGxpc3RlZCBpbgotLy8gICAgICAgICAgICAgICAgU2JNZWRpYVRyYW5zZmVySWQuCi1ib29sIFNiTWVkaWFJc1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzU3VwcG9ydGVkKFNiTWVkaWFUcmFuc2ZlcklkIHRyYW5zZmVyX2lkKTsKLSNlbmRpZiAgLy8gIVNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvLyBleHRlcm4gIkMiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3Rlc3RzLmd5cGkgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV90ZXN0cy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTgxZjZmLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3Rlc3RzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICMgVGhpcyB3aWxsIGJlIGluY2x1ZGVkIGJ5ICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwJyBzbyBmdWxsIHBhdGggbmFtZXMKLSAgICAjIGhhdmUgdG8gYmUgdXNlZCBoZXJlLgotICAgICdtZWRpYV90ZXN0c19zb3VyY2VzJzogWwotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2F2Y191dGlsX3Rlc3QuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL2NvZGVjX3V0aWxfdGVzdC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWltZV90eXBlX3Rlc3QuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL3ZpZGVvX2NhcGFiaWxpdGllc190ZXN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS92cDlfdXRpbF90ZXN0LmNjJywKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfdXRpbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3V0aWwuY2MKaW5kZXggNzg2ZTI4NC4uMzA4MWQzNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfdXRpbC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV91dGlsLmNjCkBAIC02MSwxMCArNjEsNyBAQAogICBpbnQgYml0cmF0ZSA9IG1pbWVfdHlwZS5HZXRQYXJhbUludFZhbHVlKCJiaXRyYXRlIiwga0RlZmF1bHRCaXRSYXRlKTsKIAogICBpZiAoIVNiTWVkaWFJc0F1ZGlvU3VwcG9ydGVkKGF1ZGlvX2NvZGVjLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLnJhd19jb250ZW50X3R5cGUoKS5jX3N0cigpLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHJhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZV90eXBlLnJhd19jb250ZW50X3R5cGUoKS5jX3N0cigpLCBiaXRyYXRlKSkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQogCkBAIC03NCw3ICs3MSw2IEBACiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWM6CiAgICAgICByZXR1cm4gbWltZV90eXBlLnN1YnR5cGUoKSA9PSAibXA0IjsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQUMzX0FVRElPKQogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjQWMzOgogICAgICAgaWYgKCFrU2JIYXNBYzNBdWRpbykgewogICAgICAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIkFDMyBhdWRpbyBpcyBub3QgZW5hYmxlZCBvbiB0aGlzIHBsYXRmb3JtLiBUbyAiCkBAIC04OSw4ICs4NSw2IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KICAgICAgIHJldHVybiBtaW1lX3R5cGUuc3VidHlwZSgpID09ICJtcDQiOwotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoQUMzX0FVRElPKQogICAgIGNhc2Uga1NiTWVkaWFBdWRpb0NvZGVjT3B1czoKICAgICBjYXNlIGtTYk1lZGlhQXVkaW9Db2RlY1ZvcmJpczoKICAgICAgIHJldHVybiBtaW1lX3R5cGUuc3VidHlwZSgpID09ICJ3ZWJtIjsKQEAgLTEzOSwxMSArMTMzLDYgQEAKICAgICAgICAgICA8PCBjb2RlYyA8PCAiXCIgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZW90ZiBhdHRyaWJ1dGUgIiA8PCBlb3RmOwogICAgIH0KICAgICB0cmFuc2Zlcl9pZCA9IHRyYW5zZmVyX2lkX2Zyb21fZW90ZjsKLSNpZiAhU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQotICAgIGlmICghU2JNZWRpYUlzVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3NTdXBwb3J0ZWQodHJhbnNmZXJfaWQpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotI2VuZGlmICAvLyAhU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQogICB9CiAKICAgc3RkOjpzdHJpbmcgY3J5cHRvYmxvY2tmb3JtYXQgPQpAQCAtMTY0LDIyICsxNTMsMTIgQEAKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KIAotI2lmIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKLSAgaWYgKCFTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCh2aWRlb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVfdHlwZS5yYXdfY29udGVudF90eXBlKCkuY19zdHIoKSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLCBsZXZlbCwgYml0X2RlcHRoLCBwcmltYXJ5X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyX2lkLCBtYXRyaXhfaWQsIHdpZHRoLCBoZWlnaHQsIGJpdHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBzLCBkZWNvZGVfdG9fdGV4dHVyZV9yZXF1aXJlZCkpIHsKKyAgaWYgKCFTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCgKKyAgICAgICAgICB2aWRlb19jb2RlYywgbWltZV90eXBlLnJhd19jb250ZW50X3R5cGUoKS5jX3N0cigpLCBwcm9maWxlLCBsZXZlbCwKKyAgICAgICAgICBiaXRfZGVwdGgsIHByaW1hcnlfaWQsIHRyYW5zZmVyX2lkLCBtYXRyaXhfaWQsIHdpZHRoLCBoZWlnaHQsIGJpdHJhdGUsCisgICAgICAgICAgZnBzLCBkZWNvZGVfdG9fdGV4dHVyZV9yZXF1aXJlZCkpIHsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KLSNlbHNlICAgLy8gIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKLSAgaWYgKCFTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCh2aWRlb19jb2RlYywgd2lkdGgsIGhlaWdodCwgYml0cmF0ZSwgZnBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV90b190ZXh0dXJlX3JlcXVpcmVkKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotI2VuZGlmICAvLyBTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCiAKICAgc3dpdGNoICh2aWRlb19jb2RlYykgewogICAgIGNhc2Uga1NiTWVkaWFWaWRlb0NvZGVjTm9uZToKQEAgLTIyNCw3ICsyMDMsNyBAQAogICAgICAgICAgICBhdWRpb19zcGVjaWZpY19jb25maWdfc2l6ZSk7CiAgICAgYXVkaW9fc3BlY2lmaWNfY29uZmlnID0gYXVkaW9fc3BlY2lmaWNfY29uZmlnX3N0b3JhZ2UuZGF0YSgpOwogICB9Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCisKICAgaWYgKGNvZGVjID09IGtTYk1lZGlhQXVkaW9Db2RlY05vbmUpIHsKICAgICBtaW1lX3N0b3JhZ2UuY2xlYXIoKTsKICAgfSBlbHNlIHsKQEAgLTIzMiw3ICsyMTEsNyBAQAogICAgIG1pbWVfc3RvcmFnZSA9IHRoYXQubWltZTsKICAgfQogICBtaW1lID0gbWltZV9zdG9yYWdlLmNfc3RyKCk7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQorCiAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjQ4LDcgKzIyNyw3IEBACiBWaWRlb1NhbXBsZUluZm8mIFZpZGVvU2FtcGxlSW5mbzo6b3BlcmF0b3I9KAogICAgIGNvbnN0IFNiTWVkaWFWaWRlb1NhbXBsZUluZm8mIHRoYXQpIHsKICAgKnN0YXRpY19jYXN0PFNiTWVkaWFWaWRlb1NhbXBsZUluZm8qPih0aGlzKSA9IHRoYXQ7Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCisKICAgaWYgKGNvZGVjID09IGtTYk1lZGlhVmlkZW9Db2RlY05vbmUpIHsKICAgICBtaW1lX3N0b3JhZ2UuY2xlYXIoKTsKICAgICBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzX3N0b3JhZ2UuY2xlYXIoKTsKQEAgLTI1OSw3ICsyMzgsNyBAQAogICB9CiAgIG1pbWUgPSBtaW1lX3N0b3JhZ2UuY19zdHIoKTsKICAgbWF4X3ZpZGVvX2NhcGFiaWxpdGllcyA9IG1heF92aWRlb19jYXBhYmlsaXRpZXNfc3RvcmFnZS5jX3N0cigpOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKKwogICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTUyNyw3ICs1MDYsNiBAQAogICAgIHJldHVybiB0cnVlOwogICB9CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgaWYgKHN0cmNtcChzYW1wbGVfaW5mb18xLm1pbWUsIHNhbXBsZV9pbmZvXzIubWltZSkgIT0gMCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtNTM1LDcgKzUxMyw2IEBACiAgICAgICAgICAgICAgc2FtcGxlX2luZm9fMi5tYXhfdmlkZW9fY2FwYWJpbGl0aWVzKSAhPSAwKSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogCiAgIGlmIChzYW1wbGVfaW5mb18xLmlzX2tleV9mcmFtZSAhPSBzYW1wbGVfaW5mb18yLmlzX2tleV9mcmFtZSkgewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3V0aWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3V0aWwuaAppbmRleCBhMGVlNzI4Li5hZWYzY2I4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV91dGlsLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfdXRpbC5oCkBAIC0zNCw5ICszNCw3IEBACiAgIEF1ZGlvU2FtcGxlSW5mbyYgb3BlcmF0b3I9KGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8mIHRoYXQpOwogCiAgcHJpdmF0ZToKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgc3RkOjpzdHJpbmcgbWltZV9zdG9yYWdlOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gYXVkaW9fc3BlY2lmaWNfY29uZmlnX3N0b3JhZ2U7CiB9OwogCkBAIC00NiwxMCArNDQsOCBAQAogICBWaWRlb1NhbXBsZUluZm8mIG9wZXJhdG9yPShjb25zdCBTYk1lZGlhVmlkZW9TYW1wbGVJbmZvJiB0aGF0KTsKIAogIHByaXZhdGU6Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIHN0ZDo6c3RyaW5nIG1pbWVfc3RvcmFnZTsKICAgc3RkOjpzdHJpbmcgbWF4X3ZpZGVvX2NhcGFiaWxpdGllc19zdG9yYWdlOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIH07CiAKIGJvb2wgSXNBdWRpb091dHB1dFN1cHBvcnRlZChTYk1lZGlhQXVkaW9Db2RpbmdUeXBlIGNvZGluZ190eXBlLCBpbnQgY2hhbm5lbHMpOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2Nsb3NlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2Nsb3NlLmNjCmluZGV4IDYwMjJiYWQuLmMwOGJhNjcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9jbG9zZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfY2xvc2UuY2MKQEAgLTE2LDExICsxNiw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogYm9vbCBTYk1pY3JvcGhvbmVDbG9zZShTYk1pY3JvcGhvbmUgbWljcm9waG9uZSkgewogICByZXR1cm4gU2JNaWNyb3Bob25lSXNWYWxpZChtaWNyb3Bob25lKSA/IG1pY3JvcGhvbmUtPkNsb3NlKCkgOiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9jcmVhdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfY3JlYXRlLmNjCmluZGV4IGM3ODNkYzAuLjJjMDI4ZWIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9jcmVhdGUuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2NyZWF0ZS5jYwpAQCAtMTYsMTEgKzE2LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9pbnRlcm5hbC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiAhU0JfSEFTKE1JQ1JPUEhPTkUpCi0jZXJyb3IgIlNCX0hBU19NSUNST1BIT05FIG11c3QgYmUgc2V0IHRvIGJ1aWxkIHRoaXMgZmlsZSBiZWZvcmUgU3RhcmJvYXJkIEFQSSBcCi12ZXJzaW9uIDEyLiIKLSNlbmRpZgotCiBTYk1pY3JvcGhvbmUgU2JNaWNyb3Bob25lQ3JlYXRlKFNiTWljcm9waG9uZUlkIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGVfaW5faHosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfc2l6ZSkgewpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2Rlc3Ryb3kuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZGVzdHJveS5jYwppbmRleCA3YzgzOGNlLi4yNmU5NzA4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZGVzdHJveS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZGVzdHJveS5jYwpAQCAtMTYsMTEgKzE2LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9pbnRlcm5hbC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiAhU0JfSEFTKE1JQ1JPUEhPTkUpCi0jZXJyb3IgIlNCX0hBU19NSUNST1BIT05FIG11c3QgYmUgc2V0IHRvIGJ1aWxkIHRoaXMgZmlsZSBiZWZvcmUgU3RhcmJvYXJkIEFQSSBcCi12ZXJzaW9uIDEyLiIKLSNlbmRpZgotCiB2b2lkIFNiTWljcm9waG9uZURlc3Ryb3koU2JNaWNyb3Bob25lIG1pY3JvcGhvbmUpIHsKICAgU2JNaWNyb3Bob25lUHJpdmF0ZTo6RGVzdHJveU1pY3JvcGhvbmUobWljcm9waG9uZSk7CiB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjCmluZGV4IDFhZjAwZjguLmVlMWQ4OTggMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjCkBAIC0xNywxMSArMTcsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogaW50IFNiTWljcm9waG9uZUdldEF2YWlsYWJsZShTYk1pY3JvcGhvbmVJbmZvKiBvdXRfaW5mb19hcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZm9fYXJyYXlfc2l6ZSkgewogICBpZiAob3V0X2luZm9fYXJyYXkgJiYgaW5mb19hcnJheV9zaXplID4gMCkgewpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaAppbmRleCA5ZTk4NGQ1Li5hMzVkYmU5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaApAQCAtMTgsMTEgKzE4LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbWljcm9waG9uZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oIgogCi0jaWYgKFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKSkKLSNlcnJvciAiU0JfSEFTX01JQ1JPUEhPTkUgbXVzdCBiZSBzZXQgdG8gYnVpbGQgdGhpcyBmaWxlIGJlZm9yZSBTdGFyYm9hcmQgQVBJIFwKLXZlcnNpb24gMTIuIgotI2VuZGlmCi0KIHN0cnVjdCBTYk1pY3JvcGhvbmVQcml2YXRlIHsKICAgdmlydHVhbCB+U2JNaWNyb3Bob25lUHJpdmF0ZSgpIHt9CiAgIHZpcnR1YWwgYm9vbCBPcGVuKCkgPSAwOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWQuY2MKaW5kZXggYWVhMThhNy4uYmNlMzc1MiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaXNfc2FtcGxlX3JhdGVfc3VwcG9ydGVkLmNjCkBAIC0xNiwxMSArMTYsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX2ludGVybmFsLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyICYmICFTQl9IQVMoTUlDUk9QSE9ORSkKLSNlcnJvciAiU0JfSEFTX01JQ1JPUEhPTkUgbXVzdCBiZSBzZXQgdG8gYnVpbGQgdGhpcyBmaWxlIGJlZm9yZSBTdGFyYm9hcmQgQVBJIFwKLXZlcnNpb24gMTIuIgotI2VuZGlmCi0KIGJvb2wgU2JNaWNyb3Bob25lSXNTYW1wbGVSYXRlU3VwcG9ydGVkKFNiTWljcm9waG9uZUlkIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZV9yYXRlX2luX2h6KSB7CiAgIHJldHVybiBTYk1pY3JvcGhvbmVQcml2YXRlOjpJc01pY3JvcGhvbmVTYW1wbGVSYXRlU3VwcG9ydGVkKApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX29wZW4uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfb3Blbi5jYwppbmRleCBmNzA4NDk3Li5iZTg0NTBlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfb3Blbi5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfb3Blbi5jYwpAQCAtMTYsMTEgKzE2LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9pbnRlcm5hbC5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiAhU0JfSEFTKE1JQ1JPUEhPTkUpCi0jZXJyb3IgIlNCX0hBU19NSUNST1BIT05FIG11c3QgYmUgc2V0IHRvIGJ1aWxkIHRoaXMgZmlsZSBiZWZvcmUgU3RhcmJvYXJkIEFQSSBcCi12ZXJzaW9uIDEyLiIKLSNlbmRpZgotCiBib29sIFNiTWljcm9waG9uZU9wZW4oU2JNaWNyb3Bob25lIG1pY3JvcGhvbmUpIHsKICAgcmV0dXJuIFNiTWljcm9waG9uZUlzVmFsaWQobWljcm9waG9uZSkgPyBtaWNyb3Bob25lLT5PcGVuKCkgOiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21pY3JvcGhvbmUvbWljcm9waG9uZV9yZWFkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX3JlYWQuY2MKaW5kZXggMGQyODU5Mi4uMGVkMzc1ZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX3JlYWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWljcm9waG9uZS9taWNyb3Bob25lX3JlYWQuY2MKQEAgLTE2LDExICsxNiw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9taWNyb3Bob25lL21pY3JvcGhvbmVfaW50ZXJuYWwuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogaW50IFNiTWljcm9waG9uZVJlYWQoU2JNaWNyb3Bob25lIG1pY3JvcGhvbmUsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXRfYXVkaW9fZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIGludCBhdWRpb19kYXRhX3NpemUpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9jb21tb25fcGxheWVyX3NvdXJjZXMuZ3lwaSBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9jb21tb25fcGxheWVyX3NvdXJjZXMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcxMjFkNC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvY29tbW9uX3BsYXllcl9zb3VyY2VzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdjb21tb25fcGxheWVyX3NvdXJjZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2RlY29kZWRfYXVkaW9faW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9kZWNvZGVkX2F1ZGlvX2ludGVybmFsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9pbnB1dF9idWZmZXJfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9pbnB1dF9idWZmZXJfaW50ZXJuYWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2pvYl9xdWV1ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2pvYl9xdWV1ZS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvam9iX3RocmVhZC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2pvYl90aHJlYWQuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9jcmVhdGUuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZGVzdHJveS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfY3VycmVudF9mcmFtZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfaW5mbzIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGVfcHJlZmVyX3B1bmNob3V0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2ludGVybmFsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2VlazIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfc2V0X2JvdW5kcy5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9zZXRfcGxheWJhY2tfcmF0ZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9zZXRfdm9sdW1lLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dvcmtlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93b3JrZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93cml0ZV9lbmRfb2Zfc3RyZWFtLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dyaXRlX3NhbXBsZTIuY2MnLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX3JlbmRlcmVyX3NpbmtfaW1wbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2lua19pbXBsLmNjCmluZGV4IDQ5NzBhNWIuLmM5MTM2YWUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2lua19pbXBsLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2lua19pbXBsLmNjCkBAIC0zNywyMSArMzcsMTQgQEAKICAgICAgICAgICAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKICAgICAgICAgICAgICBTYkF1ZGlvU2lua1VwZGF0ZVNvdXJjZVN0YXR1c0Z1bmMgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKICAgICAgICAgICAgICBTYkF1ZGlvU2lua1ByaXZhdGU6OkNvbnN1bWVGcmFtZXNGdW5jIGNvbnN1bWVfZnJhbWVzX2Z1bmMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgICBTYkF1ZGlvU2lua1ByaXZhdGU6OkVycm9yRnVuYyBlcnJvcl9mdW5jLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiBTYkF1ZGlvU2lua1ByaXZhdGU6OkNyZWF0ZSgKICAgICAgICAgICAgICAgICBjaGFubmVscywgc2FtcGxpbmdfZnJlcXVlbmN5X2h6LCBhdWRpb19zYW1wbGVfdHlwZSwKICAgICAgICAgICAgICAgICBhdWRpb19mcmFtZV9zdG9yYWdlX3R5cGUsIGZyYW1lX2J1ZmZlcnMsCiAgICAgICAgICAgICAgICAgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKLSAgICAgICAgICAgICAgICBjb25zdW1lX2ZyYW1lc19mdW5jLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgICAgICAgICAgZXJyb3JfZnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICAgICAgICAgICBjb250ZXh0KTsKLSAgICAgICAgICB9KSB7Ci19CisgICAgICAgICAgICAgICAgY29uc3VtZV9mcmFtZXNfZnVuYywgZXJyb3JfZnVuYywgY29udGV4dCk7CisgICAgICAgICAgfSkge30KIAogQXVkaW9SZW5kZXJlclNpbmtJbXBsOjpBdWRpb1JlbmRlcmVyU2lua0ltcGwoCiAgICAgQ3JlYXRlQXVkaW9TaW5rRnVuYyBjcmVhdGVfYXVkaW9fc2lua19mdW5jKQpAQCAtMTEwLDEwICsxMDMsNyBAQAogICAgICAgYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlLCBmcmFtZV9idWZmZXJzLCBmcmFtZXNfcGVyX2NoYW5uZWwsCiAgICAgICAmQXVkaW9SZW5kZXJlclNpbmtJbXBsOjpVcGRhdGVTb3VyY2VTdGF0dXNGdW5jLAogICAgICAgJkF1ZGlvUmVuZGVyZXJTaW5rSW1wbDo6Q29uc3VtZUZyYW1lc0Z1bmMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICZBdWRpb1JlbmRlcmVyU2lua0ltcGw6OkVycm9yRnVuYywKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgIHRoaXMpOworICAgICAgJkF1ZGlvUmVuZGVyZXJTaW5rSW1wbDo6RXJyb3JGdW5jLCB0aGlzKTsKICAgaWYgKCFTYkF1ZGlvU2lua0lzVmFsaWQoYXVkaW9fc2lua18pKSB7CiAgICAgcmV0dXJuOwogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX3JlbmRlcmVyX3NpbmtfaW1wbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19yZW5kZXJlcl9zaW5rX2ltcGwuaAppbmRleCAzMTljYjMyLi5iYzYwYWExIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX3JlbmRlcmVyX3NpbmtfaW1wbC5oCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2lua19pbXBsLmgKQEAgLTQyLDkgKzQyLDcgQEAKICAgICAgIGludCBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzLAogICAgICAgU2JBdWRpb1NpbmtVcGRhdGVTb3VyY2VTdGF0dXNGdW5jIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsCiAgICAgICBTYkF1ZGlvU2lua1ByaXZhdGU6OkNvbnN1bWVGcmFtZXNGdW5jIGNvbnN1bWVfZnJhbWVzX2Z1bmMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIFNiQXVkaW9TaW5rUHJpdmF0ZTo6RXJyb3JGdW5jIGVycm9yX2Z1bmMsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgICB2b2lkKiBjb250ZXh0KT4KICAgICAgIENyZWF0ZUF1ZGlvU2lua0Z1bmM7CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvZmlsdGVyX2Jhc2VkX3BsYXllcl93b3JrZXJfaGFuZGxlci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvZmlsdGVyX2Jhc2VkX3BsYXllcl93b3JrZXJfaGFuZGxlci5jYwppbmRleCA2YTRiMTVlLi5iNWQxZDU5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2ZpbHRlcl9iYXNlZF9wbGF5ZXJfd29ya2VyX2hhbmRsZXIuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9maWx0ZXJfYmFzZWRfcGxheWVyX3dvcmtlcl9oYW5kbGVyLmNjCkBAIC02Nyw3ICs2Nyw2IEBACiAKIH0gIC8vIG5hbWVzcGFjZQogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiBGaWx0ZXJCYXNlZFBsYXllcldvcmtlckhhbmRsZXI6OkZpbHRlckJhc2VkUGxheWVyV29ya2VySGFuZGxlcigKICAgICBjb25zdCBTYlBsYXllckNyZWF0aW9uUGFyYW0qIGNyZWF0aW9uX3BhcmFtLAogICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIHByb3ZpZGVyKQpAQCAtODEsMzQgKzgwLDEzIEBACiAgICAgICB2aWRlb19zYW1wbGVfaW5mb18oY3JlYXRpb25fcGFyYW0tPnZpZGVvX3NhbXBsZV9pbmZvKSB7CiAgIHVwZGF0ZV9qb2JfID0gc3RkOjpiaW5kKCZGaWx0ZXJCYXNlZFBsYXllcldvcmtlckhhbmRsZXI6OlVwZGF0ZSwgdGhpcyk7CiB9Ci0jZWxzZSAgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotRmlsdGVyQmFzZWRQbGF5ZXJXb3JrZXJIYW5kbGVyOjpGaWx0ZXJCYXNlZFBsYXllcldvcmtlckhhbmRsZXIoCi0gICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCi0gICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCi0gICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKLSAgICBjb25zdCBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvKiBhdWRpb19zYW1wbGVfaW5mbywKLSAgICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGUsCi0gICAgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlciogcHJvdmlkZXIpCi0gICAgOiBKb2JPd25lcihrRGV0YWNoZWQpLAotICAgICAgdmlkZW9fY29kZWNfKHZpZGVvX2NvZGVjKSwKLSAgICAgIGF1ZGlvX2NvZGVjXyhhdWRpb19jb2RlYyksCi0gICAgICBkcm1fc3lzdGVtXyhkcm1fc3lzdGVtKSwKLSAgICAgIG91dHB1dF9tb2RlXyhvdXRwdXRfbW9kZSksCi0gICAgICBkZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfKHByb3ZpZGVyKSB7Ci0gIGlmIChhdWRpb19zYW1wbGVfaW5mbykgewotICAgIGF1ZGlvX3NhbXBsZV9pbmZvXyA9ICphdWRpb19zYW1wbGVfaW5mbzsKLSAgfQotICB1cGRhdGVfam9iXyA9IHN0ZDo6YmluZCgmRmlsdGVyQmFzZWRQbGF5ZXJXb3JrZXJIYW5kbGVyOjpVcGRhdGUsIHRoaXMpOwotfQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogYm9vbCBGaWx0ZXJCYXNlZFBsYXllcldvcmtlckhhbmRsZXI6OkluaXQoCiAgICAgU2JQbGF5ZXIgcGxheWVyLAogICAgIFVwZGF0ZU1lZGlhSW5mb0NCIHVwZGF0ZV9tZWRpYV9pbmZvX2NiLAogICAgIEdldFBsYXllclN0YXRlQ0IgZ2V0X3BsYXllcl9zdGF0ZV9jYiwKICAgICBVcGRhdGVQbGF5ZXJTdGF0ZUNCIHVwZGF0ZV9wbGF5ZXJfc3RhdGVfY2IsCi0gICAgVXBkYXRlUGxheWVyRXJyb3JDQiB1cGRhdGVfcGxheWVyX2Vycm9yX2NiLAotICAgIHN0ZDo6c3RyaW5nKiBlcnJvcl9tZXNzYWdlKSB7CisgICAgVXBkYXRlUGxheWVyRXJyb3JDQiB1cGRhdGVfcGxheWVyX2Vycm9yX2NiKSB7CiAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCiAgIFNCX0RDSEVDSyh1cGRhdGVfbWVkaWFfaW5mb19jYl8gPT0gTlVMTCk7CiAKQEAgLTExNyw3ICs5NSw2IEBACiAgIFNCX0RDSEVDSyh1cGRhdGVfbWVkaWFfaW5mb19jYik7CiAgIFNCX0RDSEVDSyhnZXRfcGxheWVyX3N0YXRlX2NiKTsKICAgU0JfRENIRUNLKHVwZGF0ZV9wbGF5ZXJfc3RhdGVfY2IpOwotICBTQl9EQ0hFQ0soZXJyb3JfbWVzc2FnZSk7CiAKICAgQXR0YWNoVG9DdXJyZW50VGhyZWFkKCk7CiAKQEAgLTE0MSwyOCArMTE4LDI4IEBACiAgICAgICBTQl9MT0coRVJST1IpIDw8ICJBdWRpbyBjaGFubmVscyByZXF1ZXN0ZWQgIiA8PCByZXF1aXJlZF9hdWRpb19jaGFubmVscwogICAgICAgICAgICAgICAgICAgICA8PCAiLCBidXQgY3VycmVudGx5IHN1cHBvcnRlZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gIgogICAgICAgICAgICAgICAgICAgICA8PCBzdXBwb3J0ZWRfYXVkaW9fY2hhbm5lbHM7Ci0gICAgICAqZXJyb3JfbWVzc2FnZSA9CisgICAgICBPbkVycm9yKAorICAgICAgICAgIGtTYlBsYXllckVycm9yQ2FwYWJpbGl0eUNoYW5nZWQsCiAgICAgICAgICAgRm9ybWF0U3RyaW5nKCJSZXF1aXJlZCBjaGFubmVsICVkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIGNoYW5uZWwgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZF9hdWRpb19jaGFubmVscywgc3VwcG9ydGVkX2F1ZGlvX2NoYW5uZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRfYXVkaW9fY2hhbm5lbHMsIHN1cHBvcnRlZF9hdWRpb19jaGFubmVscykpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgfQogCiAgIFBsYXllckNvbXBvbmVudHM6OkZhY3Rvcnk6OkNyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvbl9wYXJhbWV0ZXJzKAotICAgICAgYXVkaW9fY29kZWNfLCBhdWRpb19zYW1wbGVfaW5mb18sIHZpZGVvX2NvZGVjXywKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLSAgICAgIHZpZGVvX3NhbXBsZV9pbmZvXywKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCisgICAgICBhdWRpb19jb2RlY18sIGF1ZGlvX3NhbXBsZV9pbmZvXywgdmlkZW9fY29kZWNfLCB2aWRlb19zYW1wbGVfaW5mb18sCiAgICAgICBwbGF5ZXJfLCBvdXRwdXRfbW9kZV8sIGRlY29kZV90YXJnZXRfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8sCiAgICAgICBkcm1fc3lzdGVtXyk7CiAKICAgewogICAgIDo6c3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2socGxheWVyX2NvbXBvbmVudHNfZXhpc3RlbmNlX211dGV4Xyk7CisgICAgc3RkOjpzdHJpbmcgZXJyb3JfbWVzc2FnZTsKICAgICBwbGF5ZXJfY29tcG9uZW50c18gPQotICAgICAgICBmYWN0b3J5LT5DcmVhdGVDb21wb25lbnRzKGNyZWF0aW9uX3BhcmFtZXRlcnMsIGVycm9yX21lc3NhZ2UpOworICAgICAgICBmYWN0b3J5LT5DcmVhdGVDb21wb25lbnRzKGNyZWF0aW9uX3BhcmFtZXRlcnMsICZlcnJvcl9tZXNzYWdlKTsKICAgICBpZiAoIXBsYXllcl9jb21wb25lbnRzXykgewotICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBwbGF5ZXIgY29tcG9uZW50cyB3aXRoIGVycm9yOiAiCi0gICAgICAgICAgICAgICAgICAgIDw8ICplcnJvcl9tZXNzYWdlOworICAgICAgT25FcnJvcihrU2JQbGF5ZXJFcnJvckRlY29kZSwKKyAgICAgICAgICAgICAgRm9ybWF0U3RyaW5nKCJGYWlsZWQgdG8gY3JlYXRlIHBsYXllciBjb21wb25lbnRzIHdpdGggZXJyb3I6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UuY19zdHIoKSkpOwogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtZWRpYV90aW1lX3Byb3ZpZGVyXyA9IHBsYXllcl9jb21wb25lbnRzXy0+R2V0TWVkaWFUaW1lUHJvdmlkZXIoKTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvZmlsdGVyX2Jhc2VkX3BsYXllcl93b3JrZXJfaGFuZGxlci5oIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9maWx0ZXJfYmFzZWRfcGxheWVyX3dvcmtlcl9oYW5kbGVyLmgKaW5kZXggMDA4NTNhMS4uZDZjNTZiMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9maWx0ZXJfYmFzZWRfcGxheWVyX3dvcmtlcl9oYW5kbGVyLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9maWx0ZXJfYmFzZWRfcGxheWVyX3dvcmtlcl9oYW5kbGVyLmgKQEAgLTQzLDI3ICs0MywxNiBAQAogY2xhc3MgRmlsdGVyQmFzZWRQbGF5ZXJXb3JrZXJIYW5kbGVyIDogcHVibGljIFBsYXllcldvcmtlcjo6SGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgSm9iUXVldWU6OkpvYk93bmVyIHsKICBwdWJsaWM6Ci0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIEZpbHRlckJhc2VkUGxheWVyV29ya2VySGFuZGxlcigKICAgICAgIGNvbnN0IFNiUGxheWVyQ3JlYXRpb25QYXJhbSogY3JlYXRpb25fcGFyYW0sCiAgICAgICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKiBwcm92aWRlcik7Ci0jZWxzZSAgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotICBGaWx0ZXJCYXNlZFBsYXllcldvcmtlckhhbmRsZXIoCi0gICAgICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKLSAgICAgIFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAotICAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKLSAgICAgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8qIGF1ZGlvX3NhbXBsZV9pbmZvLAotICAgICAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAotICAgICAgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlciogcHJvdmlkZXIpOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogIHByaXZhdGU6CiAgIGJvb2wgSW5pdChTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICBVcGRhdGVNZWRpYUluZm9DQiB1cGRhdGVfbWVkaWFfaW5mb19jYiwKICAgICAgICAgICAgIEdldFBsYXllclN0YXRlQ0IgZ2V0X3BsYXllcl9zdGF0ZV9jYiwKICAgICAgICAgICAgIFVwZGF0ZVBsYXllclN0YXRlQ0IgdXBkYXRlX3BsYXllcl9zdGF0ZV9jYiwKLSAgICAgICAgICAgIFVwZGF0ZVBsYXllckVycm9yQ0IgdXBkYXRlX3BsYXllcl9lcnJvcl9jYiwKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcl9tZXNzYWdlKSBvdmVycmlkZTsKKyAgICAgICAgICAgIFVwZGF0ZVBsYXllckVycm9yQ0IgdXBkYXRlX3BsYXllcl9lcnJvcl9jYikgb3ZlcnJpZGU7CiAgIGJvb2wgU2VlayhTYlRpbWUgc2Vla190b190aW1lLCBpbnQgdGlja2V0KSBvdmVycmlkZTsKICAgYm9vbCBXcml0ZVNhbXBsZShjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgaW5wdXRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgIGJvb2wqIHdyaXR0ZW4pIG92ZXJyaWRlOwpAQCAtMTI2LDEwICsxMTUsNyBAQAogICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGVfOwogICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKgogICAgICAgZGVjb2RlX3RhcmdldF9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXzsKLQotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICBtZWRpYTo6VmlkZW9TYW1wbGVJbmZvIHZpZGVvX3NhbXBsZV9pbmZvXzsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgZmlsdGVyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9jb21wb25lbnRzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfY29tcG9uZW50cy5jYwppbmRleCBiMDA5OGE5Li5mOGViN2IwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9jb21wb25lbnRzLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuY2MKQEAgLTk1LDE4ICs5NSwxNCBAQAogCiBQbGF5ZXJDb21wb25lbnRzOjpGYWN0b3J5OjpDcmVhdGlvblBhcmFtZXRlcnM6OkNyZWF0aW9uUGFyYW1ldGVycygKICAgICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgICBjb25zdCBTYk1lZGlhVmlkZW9TYW1wbGVJbmZvJiB2aWRlb19zYW1wbGVfaW5mbywKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgU2JQbGF5ZXIgcGxheWVyLAogICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSwKICAgICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKgogICAgICAgICBkZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIsCiAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSkKICAgICA6IHZpZGVvX2NvZGVjXyh2aWRlb19jb2RlYyksCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICB2aWRlb19zYW1wbGVfaW5mb18odmlkZW9fc2FtcGxlX2luZm8pLAotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgICAgIHBsYXllcl8ocGxheWVyKSwKICAgICAgIG91dHB1dF9tb2RlXyhvdXRwdXRfbW9kZSksCiAgICAgICBkZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfKApAQCAtMTIxLDkgKzExNyw3IEBACiAgICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCiAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCiAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgY29uc3QgU2JNZWRpYVZpZGVvU2FtcGxlSW5mbyYgdmlkZW9fc2FtcGxlX2luZm8sCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgIFNiUGxheWVyIHBsYXllciwKICAgICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGUsCiAgICAgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlcioKQEAgLTEzMiw5ICsxMjYsNyBAQAogICAgIDogYXVkaW9fY29kZWNfKGF1ZGlvX2NvZGVjKSwKICAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvXyhhdWRpb19zYW1wbGVfaW5mbyksCiAgICAgICB2aWRlb19jb2RlY18odmlkZW9fY29kZWMpLAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgdmlkZW9fc2FtcGxlX2luZm9fKHZpZGVvX3NhbXBsZV9pbmZvKSwKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICBwbGF5ZXJfKHBsYXllciksCiAgICAgICBvdXRwdXRfbW9kZV8ob3V0cHV0X21vZGUpLAogICAgICAgZGVjb2RlX3RhcmdldF9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXygKQEAgLTE1MCw5ICsxNDIsNyBAQAogICB0aGlzLT5hdWRpb19jb2RlY18gPSB0aGF0LmF1ZGlvX2NvZGVjXzsKICAgdGhpcy0+YXVkaW9fc2FtcGxlX2luZm9fID0gdGhhdC5hdWRpb19zYW1wbGVfaW5mb187CiAgIHRoaXMtPnZpZGVvX2NvZGVjXyA9IHRoYXQudmlkZW9fY29kZWNfOwotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICB0aGlzLT52aWRlb19zYW1wbGVfaW5mb18gPSB0aGF0LnZpZGVvX3NhbXBsZV9pbmZvXzsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIHRoaXMtPnBsYXllcl8gPSB0aGF0LnBsYXllcl87CiAgIHRoaXMtPm91dHB1dF9tb2RlXyA9IHRoYXQub3V0cHV0X21vZGVfOwogICB0aGlzLT5kZWNvZGVfdGFyZ2V0X2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfID0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuaAppbmRleCA3NmQ5YmZmLi4wOTQ4ODQ1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9jb21wb25lbnRzLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfY29tcG9uZW50cy5oCkBAIC02NCw5ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSA9IGtTYkRybVN5c3RlbUludmFsaWQpOwogICAgICAgQ3JlYXRpb25QYXJhbWV0ZXJzKFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjLAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFWaWRlb1NhbXBsZUluZm8mIHZpZGVvX3NhbXBsZV9pbmZvLAotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgICAgICAgICAgICAgICAgICAgICAgICBTYlBsYXllciBwbGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqCkBAIC03NSw5ICs3Myw3IEBACiAgICAgICBDcmVhdGlvblBhcmFtZXRlcnMoU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYVZpZGVvU2FtcGxlSW5mbyYgdmlkZW9fc2FtcGxlX2luZm8sCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyIHBsYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2JEZWNvZGVUYXJnZXRHcmFwaGljc0NvbnRleHRQcm92aWRlcioKQEAgLTk4LDcgKzk0LDYgQEAKIAogICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMoKSBjb25zdCB7IHJldHVybiB2aWRlb19jb2RlY187IH0KIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgY29uc3QgY2hhciogYXVkaW9fbWltZSgpIGNvbnN0IHsKICAgICAgICAgU0JfRENIRUNLKGF1ZGlvX2NvZGVjXyAhPSBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lKTsKICAgICAgICAgcmV0dXJuIGF1ZGlvX3NhbXBsZV9pbmZvXy5taW1lOwpAQCAtMTE4LDcgKzExMyw2IEBACiAgICAgICAgIFNCX0RDSEVDSyh2aWRlb19jb2RlY18gIT0ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSk7CiAgICAgICAgIHJldHVybiB2aWRlb19zYW1wbGVfaW5mb18ubWF4X3ZpZGVvX2NhcGFiaWxpdGllczsKICAgICAgIH0KLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAKICAgICAgIFNiUGxheWVyIHBsYXllcigpIGNvbnN0IHsgcmV0dXJuIHBsYXllcl87IH0KICAgICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1dF9tb2RlXzsgfQpAQCAtMTQ0LDkgKzEzOCw3IEBACiAgICAgICAvLyB8dmlkZW9fY29kZWN8IGNhbiBiZSBzZXQgdG8ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSBmb3IgYXVkaW8gb25seQogICAgICAgLy8gdmlkZW8uCiAgICAgICBTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlY18gPSBrU2JNZWRpYVZpZGVvQ29kZWNOb25lOwotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgbWVkaWE6OlZpZGVvU2FtcGxlSW5mbyB2aWRlb19zYW1wbGVfaW5mb187Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgU2JQbGF5ZXIgcGxheWVyXyA9IGtTYlBsYXllckludmFsaWQ7CiAgICAgICBTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGVfID0ga1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQ7CiAgICAgICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfZmlsdGVyLmd5cGkgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9maWx0ZXIuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ3OTIwNy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3BsYXllcl9maWx0ZXIuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAndmFyaWFibGVzJzogewotICAgICdmaWx0ZXJfYmFzZWRfcGxheWVyX3NvdXJjZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hZGFwdGl2ZV9hdWRpb19kZWNvZGVyX2ludGVybmFsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2FkYXB0aXZlX2F1ZGlvX2RlY29kZXJfaW50ZXJuYWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19jaGFubmVsX2xheW91dF9taXhlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX2NoYW5uZWxfbGF5b3V0X21peGVyX2ltcGwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fZGVjb2Rlcl9pbnRlcm5hbC5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX2ZyYW1lX3RyYWNrZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fZnJhbWVfdHJhY2tlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX3JlbmRlcmVyX2ludGVybmFsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfaW50ZXJuYWxfaW1wbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19yZW5kZXJlcl9pbnRlcm5hbF9pbXBsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2luay5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2F1ZGlvX3JlbmRlcmVyX3NpbmtfaW1wbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19yZW5kZXJlcl9zaW5rX2ltcGwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19yZXNhbXBsZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19yZXNhbXBsZXJfaW1wbC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb190aW1lX3N0cmV0Y2hlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb190aW1lX3N0cmV0Y2hlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2NvbW1vbi5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2NwdV92aWRlb19mcmFtZS5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9jcHVfdmlkZW9fZnJhbWUuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9kZWNvZGVkX2F1ZGlvX3F1ZXVlLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2RlY29kZWRfYXVkaW9fcXVldWUuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9maWx0ZXJfYmFzZWRfcGxheWVyX3dvcmtlcl9oYW5kbGVyLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL2ZpbHRlcl9iYXNlZF9wbGF5ZXJfd29ya2VyX2hhbmRsZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9pbnRlcmxlYXZlZF9zaW5jX3Jlc2FtcGxlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9pbnRlcmxlYXZlZF9zaW5jX3Jlc2FtcGxlci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL21lZGlhX3RpbWVfcHJvdmlkZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9tZWRpYV90aW1lX3Byb3ZpZGVyX2ltcGwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvbWVkaWFfdGltZV9wcm92aWRlcl9pbXBsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvbW9ja19hdWRpb19kZWNvZGVyLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvbW9ja19hdWRpb19yZW5kZXJlcl9zaW5rLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wdW5jaG91dF92aWRlb19yZW5kZXJlcl9zaW5rLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3B1bmNob3V0X3ZpZGVvX3JlbmRlcmVyX3NpbmsuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9zdHViX2F1ZGlvX2RlY29kZXIuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvc3R1Yl9hdWRpb19kZWNvZGVyLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvc3R1Yl9wbGF5ZXJfY29tcG9uZW50c19mYWN0b3J5LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3N0dWJfcGxheWVyX2NvbXBvbmVudHNfZmFjdG9yeS5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3N0dWJfdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9zdHViX3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19kZWNvZGVyX2ludGVybmFsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdmlkZW9fZnJhbWVfY2FkZW5jZV9wYXR0ZXJuX2dlbmVyYXRvci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19mcmFtZV9jYWRlbmNlX3BhdHRlcm5fZ2VuZXJhdG9yLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdmlkZW9fZnJhbWVfaW50ZXJuYWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19mcmFtZV9yYXRlX2VzdGltYXRvci5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19mcmFtZV9yYXRlX2VzdGltYXRvci5oJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX3JlbmRlcl9hbGdvcml0aG0uaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19yZW5kZXJfYWxnb3JpdGhtX2ltcGwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdmlkZW9fcmVuZGVyX2FsZ29yaXRobV9pbXBsLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdmlkZW9fcmVuZGVyZXJfaW50ZXJuYWwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19yZW5kZXJlcl9pbnRlcm5hbF9pbXBsLmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX3JlbmRlcmVyX2ludGVybmFsX2ltcGwuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19yZW5kZXJlcl9zaW5rLmgnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvd3NvbGFfaW50ZXJuYWwuY2MnLAotICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvd3NvbGFfaW50ZXJuYWwuaCcsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9CVUlMRC5nbiBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9CVUlMRC5nbgppbmRleCBkYzVjZGNjLi4xNWNhOGI5IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvQlVJTEQuZ24KKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL0JVSUxELmduCkBAIC00MSwxMCArNDEsOCBAQAogCiAgIGRlcHMgPSBjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzCiAKLSAgY29udGVudF9kZXBzID0gWwotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllcjpwbGF5ZXJfZG93bmxvYWRfdGVzdF9kYXRhIiwKLSAgICAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIsCi0gIF0KKyAgY29udGVudF9kZXBzID0KKyAgICAgIFsgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyOnBsYXllcl9kb3dubG9hZF90ZXN0X2RhdGEiIF0KIH0KIAogaWYgKGhvc3Rfb3MgIT0gIndpbiIpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9hdWRpb19yZW5kZXJlcl9pbnRlcm5hbF90ZXN0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2F1ZGlvX3JlbmRlcmVyX2ludGVybmFsX3Rlc3QuY2MKaW5kZXggZjM2YjVkNy4uYzdiMTVjOSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2F1ZGlvX3JlbmRlcmVyX2ludGVybmFsX3Rlc3QuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2F1ZGlvX3JlbmRlcmVyX2ludGVybmFsX3Rlc3QuY2MKQEAgLTI0Nyw5ICsyNDcsNyBAQAogICAgIHN0YXRpYyBzdGFyYm9hcmQ6Om1lZGlhOjpBdWRpb1NhbXBsZUluZm8gYXVkaW9fc2FtcGxlX2luZm8gPSB7fTsKIAogICAgIGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjID0ga1NiTWVkaWFBdWRpb0NvZGVjQWFjOwotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgIGF1ZGlvX3NhbXBsZV9pbmZvLm1pbWUgPSAiIjsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgYXVkaW9fc2FtcGxlX2luZm8ubnVtYmVyX29mX2NoYW5uZWxzID0ga0RlZmF1bHROdW1iZXJPZkNoYW5uZWxzOwogICAgIGF1ZGlvX3NhbXBsZV9pbmZvLnNhbXBsZXNfcGVyX3NlY29uZCA9IGtEZWZhdWx0U2FtcGxlc1BlclNlY29uZDsKICAgICBhdWRpb19zYW1wbGVfaW5mby5iaXRzX3Blcl9zYW1wbGUgPSAzMjsKQEAgLTI3MywxOSArMjcxLDExIEBACiB9OwogCiBib29sIEhhc0FzeW5jQXVkaW9GcmFtZXNSZXBvcnRpbmcoKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgLy8gVE9ETzogV2hlbiBkZXByZWNhdGluZyBTdGFyYm9hcmQgQVBJIHZlcnNpb25zIGxlc3MgdGhhbgogICAvLyAxMiBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0IGFsbCB0ZXN0cyBjYW4gYmUgcnVuIHJlZ2FyZGxlc3Mgb2YKICAgLy8gd2hldGhlciB0aGUgcGxhdGZvcm0gaGFzIGFzeW5jaHJvbm91cyBhdWRpbyBmcmFtZXMgcmVwb3J0aW5nLgogICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSByZW1vdmVkIHRoZW4uCiAgIHJldHVybiBmYWxzZTsKLSNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAgMTIKLSNpZiBTQl9IQVMoQVNZTkNfQVVESU9fRlJBTUVTX1JFUE9SVElORykKLSAgcmV0dXJuIHRydWU7Ci0jZWxzZSAgIC8vIFNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQotICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgIC8vIFNCX0hBUyhBU1lOQ19BVURJT19GUkFNRVNfUkVQT1JUSU5HKQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAgMTIKIH0KIAogLy8gc3RhdGljCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvcGxheWVyX2NvbXBvbmVudHNfdGVzdC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfY29tcG9uZW50c190ZXN0LmNjCmluZGV4IGFmYTRmYWQuLjBlOWNlMWMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfY29tcG9uZW50c190ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfY29tcG9uZW50c190ZXN0LmNjCkBAIC05MSwxMCArOTEsOCBAQAogICAgICAgQ3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uX3BhcmFtZXRlcnMoCiAgICAgICAgICAgYXVkaW9fcmVhZGVyXy0+YXVkaW9fY29kZWMoKSwgYXVkaW9fcmVhZGVyXy0+YXVkaW9fc2FtcGxlX2luZm8oKSwKICAgICAgICAgICB2aWRlb19yZWFkZXJfLT52aWRlb19jb2RlYygpLAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgICAgIHZpZGVvX3JlYWRlcl8tPkdldFBsYXllclNhbXBsZUluZm8oa1NiTWVkaWFUeXBlVmlkZW8sIDApCiAgICAgICAgICAgICAgIC52aWRlb19zYW1wbGVfaW5mbywKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICAgICAga0R1bW15UGxheWVyLCBvdXRwdXRfbW9kZV8sCiAgICAgICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy5kZWNvZGVyX3RhcmdldF9wcm92aWRlcigpKTsKICAgICAgIHBsYXllcl9jb21wb25lbnRzXyA9CkBAIC0xMTAsMTAgKzEwOCw4IEBACiAgICAgICBBU1NFUlRfVFJVRSh2aWRlb19yZWFkZXJfKTsKICAgICAgIENyZWF0aW9uUGFyYW1ldGVycyBjcmVhdGlvbl9wYXJhbWV0ZXJzKAogICAgICAgICAgIHZpZGVvX3JlYWRlcl8tPnZpZGVvX2NvZGVjKCksCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICAgICAgdmlkZW9fcmVhZGVyXy0+R2V0UGxheWVyU2FtcGxlSW5mbyhrU2JNZWRpYVR5cGVWaWRlbywgMCkKICAgICAgICAgICAgICAgLnZpZGVvX3NhbXBsZV9pbmZvLAotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgICAgICAgICBrRHVtbXlQbGF5ZXIsIG91dHB1dF9tb2RlXywKICAgICAgICAgICBmYWtlX2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfLmRlY29kZXJfdGFyZ2V0X3Byb3ZpZGVyKCkpOwogICAgICAgcGxheWVyX2NvbXBvbmVudHNfID0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfZmlsdGVyX3Rlc3RzLmd5cCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfZmlsdGVyX3Rlc3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVmNmM5NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvcGxheWVyX2ZpbHRlcl90ZXN0cy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl9maWx0ZXJfdGVzdHMnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL3Rlc3RfbWFpbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvYWRhcHRpdmVfYXVkaW9fZGVjb2Rlcl90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9hdWRpb19jaGFubmVsX2xheW91dF9taXhlcl90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9hdWRpb19kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2F1ZGlvX3JlbmRlcmVyX2ludGVybmFsX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2ZpbGVfY2FjaGVfcmVhZGVyX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL21lZGlhX3RpbWVfcHJvdmlkZXJfaW1wbF90ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfY29tcG9uZW50c190ZXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy90ZXN0X3V0aWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy92aWRlb19kZWNvZGVyX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3ZpZGVvX2RlY29kZXJfdGVzdF9maXh0dXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy92aWRlb19kZWNvZGVyX3Rlc3RfZml4dHVyZS5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy92aWRlb19mcmFtZV9jYWRlbmNlX3BhdHRlcm5fZ2VuZXJhdG9yX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3ZpZGVvX2ZyYW1lX3JhdGVfZXN0aW1hdG9yX3Rlc3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Rlc3RpbmcvZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC90ZXN0aW5nL2Zha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlci5oJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydnbF90eXBlICE9ICJub25lIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIFZpZGVvRGVjb2RlclRlc3QgZGVwZW5kcyBvbgotICAgICAgICAgICAgIyBGYWtlR3JhcGhpY3NDb250ZXh0UHJvdmlkZXIgd2hpY2ggZGVwZW5kcyBvbiBFR0wgYW5kIEdMRVMuCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2VnbF9hbmRfZ2xlcy9lZ2xfYW5kX2dsZXMuZ3lwOmVnbF9hbmRfZ2xlcycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhpcyBhbGxvd3MgdGhlIHRlc3RzIHRvIGluY2x1ZGUgaW50ZXJuYWwgb25seSBoZWFkZXIgZmlsZXMuCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8QChjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzKScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDp2aWRlb19kbXAnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllci5neXA6cGxheWVyX2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl9maWx0ZXJfdGVzdHNfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAncGxheWVyX2ZpbHRlcl90ZXN0cycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl9maWx0ZXJfYmVuY2htYXJrcycsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnZ2xfdHlwZSAhPSAibm9uZSInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBWaWRlb0RlY29kZXJUZXN0IGRlcGVuZHMgb24KLSAgICAgICAgICAgICMgRmFrZUdyYXBoaWNzQ29udGV4dFByb3ZpZGVyIHdoaWNoIGRlcGVuZHMgb24gRUdMIGFuZCBHTEVTLgotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lZ2xfYW5kX2dsZXMvZWdsX2FuZF9nbGVzLmd5cDplZ2xfYW5kX2dsZXMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgYWxsb3dzIHRoZSBiZW5jaG1hcmtzIHRvIGluY2x1ZGUgaW50ZXJuYWwgb25seSBoZWFkZXIgZmlsZXMuCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL2F1ZGlvX2RlY29kZXJfYmVuY2htYXJrLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy90ZXN0X3V0aWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NvbW1vbi9iZW5jaG1hcmtfbWFpbi5jYycsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzxAKGNvYmFsdF9wbGF0Zm9ybV9kZXBlbmRlbmNpZXMpJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXIuZ3lwOnZpZGVvX2RtcCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDpwbGF5ZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2dvb2dsZV9iZW5jaG1hcmsvZ29vZ2xlX2JlbmNobWFyay5neXA6Z29vZ2xlX2JlbmNobWFyaycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl9maWx0ZXJfYmVuY2htYXJrc19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAncGxheWVyX2ZpbHRlcl9iZW5jaG1hcmtzJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3BsYXllcl9maWx0ZXJfYmVuY2htYXJrcycsCi0gICAgICB9LAotICAgICAgJ2luY2x1ZGVzJzogWyAnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJyBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdGVzdF91dGlsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3Rlc3RfdXRpbC5jYwppbmRleCAyMTQ0N2E0Li45YmZkYjdlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdGVzdF91dGlsLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy90ZXN0X3V0aWwuY2MKQEAgLTE1NywxMSArMTU3LDkgQEAKICAgICAvLyBGaWx0ZXIgZmlsZXMgb2YgdW5zdXBwb3J0ZWQgY29kZWMuCiAgICAgaWYgKCFTYk1lZGlhSXNBdWRpb1N1cHBvcnRlZCgKICAgICAgICAgICAgIGF1ZGlvX2ZpbGVfaW5mby5hdWRpb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgR2V0Q29udGVudFR5cGVGcm9tQXVkaW9Db2RlYyhhdWRpb19maWxlX2luZm8uYXVkaW9fY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX21pbWVfYXR0cmlidXRlcykKICAgICAgICAgICAgICAgICAuY19zdHIoKSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgIGF1ZGlvX2ZpbGVfaW5mby5iaXRyYXRlKSkgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtMjA3LDE0ICsyMDUsOSBAQAogICAgICAgICAgICAgICAudmlkZW9fc2FtcGxlX2luZm87CiAKICAgICAgIGlmIChTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCgKLSAgICAgICAgICAgICAgZG1wX3JlYWRlci52aWRlb19jb2RlYygpLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgICAgICAgIGRtcF9yZWFkZXIudmlkZW9fbWltZV90eXBlKCkuY19zdHIoKSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSNpZiBTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCisgICAgICAgICAgICAgIGRtcF9yZWFkZXIudmlkZW9fY29kZWMoKSwgZG1wX3JlYWRlci52aWRlb19taW1lX3R5cGUoKS5jX3N0cigpLAogICAgICAgICAgICAgICAtMSwgLTEsIDgsIGtTYk1lZGlhUHJpbWFyeUlkVW5zcGVjaWZpZWQsCiAgICAgICAgICAgICAgIGtTYk1lZGlhVHJhbnNmZXJJZFVuc3BlY2lmaWVkLCBrU2JNZWRpYU1hdHJpeElkVW5zcGVjaWZpZWQsCi0jZW5kaWYgIC8vIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKICAgICAgICAgICAgICAgdmlkZW9fc2FtcGxlX2luZm8uZnJhbWVfd2lkdGgsIHZpZGVvX3NhbXBsZV9pbmZvLmZyYW1lX2hlaWdodCwKICAgICAgICAgICAgICAgZG1wX3JlYWRlci52aWRlb19iaXRyYXRlKCksIGRtcF9yZWFkZXIudmlkZW9fZnBzKCksIGZhbHNlKSkgewogICAgICAgICB0ZXN0X3BhcmFtcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKGZpbGVuYW1lLCBvdXRwdXRfbW9kZSkpOwpAQCAtMjY4LDcgKzI2MSw2IEBACiAgICAgICAgICA8PCAidGltZSAiIDw8IHRpbWUxIDw8ICIgZG9lc24ndCBtYXRjaCB3aXRoIHRpbWUgIiA8PCB0aW1lMjsKIH0KIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogbWVkaWE6OlZpZGVvU2FtcGxlSW5mbyBDcmVhdGVWaWRlb1NhbXBsZUluZm8oU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMpIHsKICAgc2hhcmVkOjpzdGFyYm9hcmQ6Om1lZGlhOjpWaWRlb1NhbXBsZUluZm8gdmlkZW9fc2FtcGxlX2luZm8gPSB7fTsKIApAQCAtMjg2LDcgKzI3OCw2IEBACiAKICAgcmV0dXJuIHZpZGVvX3NhbXBsZV9pbmZvOwogfQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKIH0gIC8vIG5hbWVzcGFjZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy90ZXN0X3V0aWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy90ZXN0X3V0aWwuaAppbmRleCAyMDgwOGVjLi42MjVjY2JhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdGVzdF91dGlsLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3Rlc3RfdXRpbC5oCkBAIC02Miw5ICs2Miw3IEBACiAKIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IEFsbW9zdEVxdWFsVGltZShTYlRpbWUgdGltZTEsIFNiVGltZSB0aW1lMik7CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIG1lZGlhOjpWaWRlb1NhbXBsZUluZm8gQ3JlYXRlVmlkZW9TYW1wbGVJbmZvKFNiTWVkaWFWaWRlb0NvZGVjIGNvZGVjKTsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAKIH0gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCiB9ICAvLyBuYW1lc3BhY2UgZmlsdGVyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdmlkZW9fZGVjb2Rlcl90ZXN0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3ZpZGVvX2RlY29kZXJfdGVzdC5jYwppbmRleCBmNjJmZmU3Li4wM2YwYzA4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdmlkZW9fZGVjb2Rlcl90ZXN0LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy92aWRlb19kZWNvZGVyX3Rlc3QuY2MKQEAgLTkzLDE2ICs5Myw5IEBACiAgIFNiUGxheWVyT3V0cHV0TW9kZSBrT3V0cHV0TW9kZXNbXSA9IHtrU2JQbGF5ZXJPdXRwdXRNb2RlRGVjb2RlVG9UZXh0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiUGxheWVyT3V0cHV0TW9kZVB1bmNoT3V0fTsKICAgU2JNZWRpYVZpZGVvQ29kZWMga1ZpZGVvQ29kZWNzW10gPSB7Ci0gICAga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNIMjY0LAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjUsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjTXBlZzIsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVGhlb3JhLAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNBdjEsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVnA4LAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZwOQotICB9OworICAgICAga1NiTWVkaWFWaWRlb0NvZGVjTm9uZSwgIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQsICAga1NiTWVkaWFWaWRlb0NvZGVjSDI2NSwKKyAgICAgIGtTYk1lZGlhVmlkZW9Db2RlY01wZWcyLCBrU2JNZWRpYVZpZGVvQ29kZWNUaGVvcmEsIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMSwKKyAgICAgIGtTYk1lZGlhVmlkZW9Db2RlY0F2MSwgICBrU2JNZWRpYVZpZGVvQ29kZWNWcDgsICAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZwOX07CiAgIGZvciAoYXV0byBvdXRwdXRfbW9kZSA6IGtPdXRwdXRNb2RlcykgewogICAgIGZvciAoYXV0byB2aWRlb19jb2RlYyA6IGtWaWRlb0NvZGVjcykgewogICAgICAgVmlkZW9EZWNvZGVyOjpPdXRwdXRNb2RlU3VwcG9ydGVkKG91dHB1dF9tb2RlLCB2aWRlb19jb2RlYywKQEAgLTEyOSwxNiArMTIyLDkgQEAKICAgU2JQbGF5ZXJPdXRwdXRNb2RlIGtPdXRwdXRNb2Rlc1tdID0ge2tTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JQbGF5ZXJPdXRwdXRNb2RlUHVuY2hPdXR9OwogICBTYk1lZGlhVmlkZW9Db2RlYyBrVmlkZW9Db2RlY3NbXSA9IHsKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjSDI2NSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNNcGVnMiwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNUaGVvcmEsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVmMxLAotICAgIGtTYk1lZGlhVmlkZW9Db2RlY0F2MSwKLSAgICBrU2JNZWRpYVZpZGVvQ29kZWNWcDgsCi0gICAga1NiTWVkaWFWaWRlb0NvZGVjVnA5Ci0gIH07CisgICAgICBrU2JNZWRpYVZpZGVvQ29kZWNOb25lLCAga1NiTWVkaWFWaWRlb0NvZGVjSDI2NCwgICBrU2JNZWRpYVZpZGVvQ29kZWNIMjY1LAorICAgICAga1NiTWVkaWFWaWRlb0NvZGVjTXBlZzIsIGtTYk1lZGlhVmlkZW9Db2RlY1RoZW9yYSwga1NiTWVkaWFWaWRlb0NvZGVjVmMxLAorICAgICAga1NiTWVkaWFWaWRlb0NvZGVjQXYxLCAgIGtTYk1lZGlhVmlkZW9Db2RlY1ZwOCwgICAga1NiTWVkaWFWaWRlb0NvZGVjVnA5fTsKIAogICBmb3IgKGF1dG8gb3V0cHV0X21vZGUgOiBrT3V0cHV0TW9kZXMpIHsKICAgICBmb3IgKGF1dG8gdmlkZW9fY29kZWMgOiBrVmlkZW9Db2RlY3MpIHsKQEAgLTE1MywxMyArMTM5LDEwIEBACiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrRGVjb2RlcnNUb0NyZWF0ZTsgKytpKSB7CiAgICAgICAgICAgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyBkdW1teV9hdWRpb19zYW1wbGVfaW5mbyA9IHsKLSAgICAgICAgICAgIGtTYk1lZGlhQXVkaW9Db2RlY05vbmUKLSAgICAgICAgICB9OworICAgICAgICAgICAgICBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lfTsKICAgICAgICAgICBQbGF5ZXJDb21wb25lbnRzOjpGYWN0b3J5OjpDcmVhdGlvblBhcmFtZXRlcnMgY3JlYXRpb25fcGFyYW1ldGVycygKICAgICAgICAgICAgICAgZml4dHVyZV8uZG1wX3JlYWRlcigpLnZpZGVvX2NvZGVjKCksCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgICAgICAgICAgIENyZWF0ZVZpZGVvU2FtcGxlSW5mbyhmaXh0dXJlXy5kbXBfcmVhZGVyKCkudmlkZW9fY29kZWMoKSksCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgICAgICAgICAgICAmcGxheWVyc1tpXSwgb3V0cHV0X21vZGUsCiAgICAgICAgICAgICAgIGZha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8uZGVjb2Rlcl90YXJnZXRfcHJvdmlkZXIoKSwKICAgICAgICAgICAgICAgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdmlkZW9fZGVjb2Rlcl90ZXN0X2ZpeHR1cmUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rlc3RpbmcvdmlkZW9fZGVjb2Rlcl90ZXN0X2ZpeHR1cmUuY2MKaW5kZXggMzkzMmE3MS4uZjI3NGEzZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90ZXN0aW5nL3ZpZGVvX2RlY29kZXJfdGVzdF9maXh0dXJlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy92aWRlb19kZWNvZGVyX3Rlc3RfZml4dHVyZS5jYwpAQCAtODYsMTAgKzg2LDcgQEAKICAgICAgIG91dHB1dF9tb2RlLCBkbXBfcmVhZGVyXy52aWRlb19jb2RlYygpLCBrU2JEcm1TeXN0ZW1JbnZhbGlkKSk7CiAKICAgUGxheWVyQ29tcG9uZW50czo6RmFjdG9yeTo6Q3JlYXRpb25QYXJhbWV0ZXJzIGNyZWF0aW9uX3BhcmFtZXRlcnMoCi0gICAgICBkbXBfcmVhZGVyXy52aWRlb19jb2RlYygpLAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotICAgICAgR2V0VmlkZW9JbnB1dEJ1ZmZlcigwKS0+dmlkZW9fc2FtcGxlX2luZm8oKSwKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCisgICAgICBkbXBfcmVhZGVyXy52aWRlb19jb2RlYygpLCBHZXRWaWRlb0lucHV0QnVmZmVyKDApLT52aWRlb19zYW1wbGVfaW5mbygpLAogICAgICAgJnBsYXllcl8sIG91dHB1dF9tb2RlLAogICAgICAgZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXy0+ZGVjb2Rlcl90YXJnZXRfcHJvdmlkZXIoKSwgbnVsbHB0cik7CiAKQEAgLTI2Niw3ICsyNjMsNyBAQAogICAgICAgKytzdGFydF9pbmRleDsKICAgICAgIC0tbnVtYmVyX29mX2lucHV0c190b193cml0ZTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PSBrRXJyb3IgfHwgZXZlbnQuc3RhdHVzID09IGtUaW1lb3V0KSB7Ci0gICAgICAvLyBBc3N1bWUgdGhhdCB0aGUgY2FsbGVyIGRvZXMndCBleHBlY3QgYW4gZXJyb3Igd2hlbiB8ZXZlbnRfY2J8IGlzbid0CisgICAgICAvLyBBc3N1bWUgdGhhdCB0aGUgY2FsbGVyIGRvZXNuJ3QgZXhwZWN0IGFuIGVycm9yIHdoZW4gfGV2ZW50X2NifCBpc24ndAogICAgICAgLy8gcHJvdmlkZWQuCiAgICAgICBBU1NFUlRfVFJVRShldmVudF9jYik7CiAgICAgICBib29sIGNvbnRpbnVlX3Byb2Nlc3MgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90b29scy90b29scy5neXAgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rvb2xzL3Rvb2xzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZlNWRkMS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3Rvb2xzL3Rvb2xzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhdWRpb19kbXBfcGxheWVyJywKLSAgICAgICd0eXBlJzogJzwoZmluYWxfZXhlY3V0YWJsZV90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWxlX2NhY2hlX3JlYWRlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsZV9jYWNoZV9yZWFkZXIuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX2NvbW1vbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX2NvbW1vbi5oJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfcmVhZGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfcmVhZGVyLmgnLAotICAgICAgICAnYXVkaW9fZG1wX3BsYXllci5jYycsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTVEFSQk9BUkRfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cDpwbGF5ZXJfY29weV90ZXN0X2RhdGEnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYXVkaW9fZG1wX3BsYXllcl9kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYXVkaW9fZG1wX3BsYXllcicsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICdhdWRpb19kbXBfcGxheWVyJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9pbnB1dF9idWZmZXJfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvaW5wdXRfYnVmZmVyX2ludGVybmFsLmNjCmluZGV4IDcyOTZmMDAuLmI5YjIyYzIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9pbnB1dF9idWZmZXJfaW50ZXJuYWwuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2lucHV0X2J1ZmZlcl9pbnRlcm5hbC5jYwpAQCAtODcsMjEgKzg3LDE2IEBACiAgICAgIDw8ICIgc2FtcGxlIEAgdGltZXN0YW1wOiAiIDw8IHRpbWVzdGFtcCgpIDw8ICIgaW4gIiA8PCBzaXplKCkKICAgICAgPDwgIiBieXRlcyA9PT09PT09PT09XG4iOwogICBpZiAoc2FtcGxlX3R5cGUoKSA9PSBrU2JNZWRpYVR5cGVBdWRpbykgewotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgIHNzIDw8ICJjb2RlYzogIiA8PCBhdWRpb19zYW1wbGVfaW5mbygpLmNvZGVjIDw8ICIsIG1pbWU6ICciCiAgICAgICAgPDwgYXVkaW9fc2FtcGxlX2luZm8oKS5taW1lIDw8ICInXG4iOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogICAgIHNzIDw8IGF1ZGlvX3NhbXBsZV9pbmZvKCkuc2FtcGxlc19wZXJfc2Vjb25kIDw8ICdcbic7CiAgIH0gZWxzZSB7CiAgICAgU0JfRENIRUNLKHNhbXBsZV90eXBlKCkgPT0ga1NiTWVkaWFUeXBlVmlkZW8pOwogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgICAgc3MgPDwgImNvZGVjOiAiIDw8IHZpZGVvX3NhbXBsZV9pbmZvKCkuY29kZWMgPDwgIiwgbWltZTogJyIKICAgICAgICA8PCB2aWRlb19zYW1wbGVfaW5mbygpLm1pbWUgPDwgIiciCiAgICAgICAgPDwgIiwgbWF4X3ZpZGVvX2NhcGFiaWxpdGllczogJyIKICAgICAgICA8PCB2aWRlb19zYW1wbGVfaW5mbygpLm1heF92aWRlb19jYXBhYmlsaXRpZXMgPDwgIidcbiI7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICAgIHNzIDw8IHZpZGVvX3NhbXBsZV9pbmZvKCkuZnJhbWVfd2lkdGggPDwgIiB4ICIKICAgICAgICA8PCB2aWRlb19zYW1wbGVfaW5mbygpLmZyYW1lX2hlaWdodCA8PCAnXG4nOwogICB9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyLmd5cCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhlODJlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGNvbW1vbl9wbGF5ZXJfc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgbXVzdCBiZSBkZWZpbmVkIHdoZW4gYnVpbGRpbmcgU3RhcmJvYXJkLCBhbmQgbXVzdCBub3Qgd2hlbgotICAgICAgICAjIGJ1aWxkaW5nIFN0YXJib2FyZCBjbGllbnQgY29kZS4KLSAgICAgICAgJ1NUQVJCT0FSRF9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvY29tbW9uX3BsYXllcl9zb3VyY2VzLmd5cGknXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2aWRlb19kbXAnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsZV9jYWNoZV9yZWFkZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbGVfY2FjaGVfcmVhZGVyLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3ZpZGVvX2RtcF9jb21tb24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3ZpZGVvX2RtcF9jb21tb24uaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX3JlYWRlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdmlkZW9fZG1wX3JlYWRlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZF9oZWFkZXJzX29ubHkuZ3lwOnN0YXJib2FyZF9oZWFkZXJzX29ubHknLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIFRoaXMgYWxsb3dzIHRoZSB0ZXN0cyB0byBpbmNsdWRlIGludGVybmFsIG9ubHkgaGVhZGVyIGZpbGVzLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncGxheWVyX2NvcHlfdGVzdF9kYXRhJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2NvbnRlbnRfdGVzdF9pbnB1dF9maWxlcyc6IFsKLSAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBmaWxlX2dsb2Jfc3ViIDwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci90ZXN0ZGF0YSAqLmRtcC5zaGExIGRtcC5zaGExIGRtcCknCi0gICAgICAgIF0sCi0gICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICdzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdGVzdGRhdGEnLAotICAgICAgfSwKLSAgICAgICdhY3Rpb25zJyA6IFsKLSAgICAgICAgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnc2hhX2Rpcic6ICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvdGVzdGRhdGEnLAotICAgICAgICAgICAgIyBHWVAgd2lsbCByZW1vdmUgYW4gYXJndW1lbnQgdG8gYW4gYWN0aW9uIHRoYXQgbG9va3MgbGlrZSBhIGR1cGxpY2F0ZSwgc28KLSAgICAgICAgICAgICMgd2UgY2hhbmdlIGl0IHNlbWFudGljYWxseSBoZXJlLgotICAgICAgICAgICAgJ291dF9kaXInOiAnPChERVBUSCkvc3RhcmJvYXJkLy4uL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci90ZXN0ZGF0YScsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAncGxheWVyX2Rvd25sb2FkX3Rlc3RfZGF0YScsCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KERFUFRIKS90b29scy9kb3dubG9hZF9mcm9tX2djcy5weScsCi0gICAgICAgICAgICAnLS1idWNrZXQnLCAnY29iYWx0LXN0YXRpYy1zdG9yYWdlJywKLSAgICAgICAgICAgICctLXNoYTEnLCAnPChzaGFfZGlyKScsCi0gICAgICAgICAgICAnLS1vdXRwdXQnLCAnPChvdXRfZGlyKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoc2hhX2RpcikgKi5kbXAuc2hhMSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihzdGFyYm9hcmQuYnVpbGQuZ3lwX2Z1bmN0aW9ucyBmaWxlX2dsb2Jfc3ViIDwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci90ZXN0ZGF0YSAqLmRtcC5zaGExIGRtcC5zaGExIGRtcCknLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWyc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvY29weV90ZXN0X2RhdGEuZ3lwaSddLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfY3JlYXRlLmNjCmluZGV4IGRkNTljNjUuLmMyZTBhMDcgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfY3JlYXRlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfY3JlYXRlLmNjCkBAIC0zNyw4ICszNyw2IEBACiAgICAgRmlsdGVyQmFzZWRQbGF5ZXJXb3JrZXJIYW5kbGVyOwogdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpQbGF5ZXJXb3JrZXI7CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogU2JQbGF5ZXIgU2JQbGF5ZXJDcmVhdGUoU2JXaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JQbGF5ZXJDcmVhdGlvblBhcmFtKiBjcmVhdGlvbl9wYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyRGVhbGxvY2F0ZVNhbXBsZUZ1bmMgc2FtcGxlX2RlYWxsb2NhdGVfZnVuYywKQEAgLTEwNiwyMyArMTA0LDYgQEAKICAgICAgICZjcmVhdGlvbl9wYXJhbS0+YXVkaW9fc2FtcGxlX2luZm87CiAgIGNvbnN0IGF1dG8gb3V0cHV0X21vZGUgPSBjcmVhdGlvbl9wYXJhbS0+b3V0cHV0X21vZGU7CiAKLSNlbHNlICAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KLVNiUGxheWVyIFNiUGxheWVyQ3JlYXRlKFNiV2luZG93IHdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyogYXVkaW9fc2FtcGxlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJEZWFsbG9jYXRlU2FtcGxlRnVuYyBzYW1wbGVfZGVhbGxvY2F0ZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJEZWNvZGVyU3RhdHVzRnVuYyBkZWNvZGVyX3N0YXR1c19mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJTdGF0dXNGdW5jIHBsYXllcl9zdGF0dXNfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyRXJyb3JGdW5jIHBsYXllcl9lcnJvcl9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIHByb3ZpZGVyKSB7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCiAgIGlmICghcGxheWVyX2Vycm9yX2Z1bmMpIHsKICAgICBTQl9MT0coRVJST1IpIDw8ICJ8cGxheWVyX2Vycm9yX2Z1bmN8IGNhbm5vdCBiZSBudWxsLiI7CiAgICAgcmV0dXJuIGtTYlBsYXllckludmFsaWQ7CkBAIC0xNTUsMTEgKzEzNiw3IEBACiAKICAgY29uc3QgaW50NjRfdCBrRGVmYXVsdEJpdFJhdGUgPSAwOwogICBpZiAoYXVkaW9fY29kZWMgIT0ga1NiTWVkaWFBdWRpb0NvZGVjTm9uZSAmJgotICAgICAgIVNiTWVkaWFJc0F1ZGlvU3VwcG9ydGVkKGF1ZGlvX2NvZGVjLAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fbWltZSwKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRGVmYXVsdEJpdFJhdGUpKSB7CisgICAgICAhU2JNZWRpYUlzQXVkaW9TdXBwb3J0ZWQoYXVkaW9fY29kZWMsIGF1ZGlvX21pbWUsIGtEZWZhdWx0Qml0UmF0ZSkpIHsKICAgICBTQl9MT0coRVJST1IpIDw8ICJVbnN1cHBvcnRlZCBhdWRpbyBjb2RlYyAiCiAgICAgICAgICAgICAgICAgICA8PCBzdGFyYm9hcmQ6OkdldE1lZGlhQXVkaW9Db2RlY05hbWUoYXVkaW9fY29kZWMpIDw8ICIuIjsKICAgICBwbGF5ZXJfZXJyb3JfZnVuYygKQEAgLTE3OCwxNSArMTU1LDkgQEAKICAgY29uc3QgaW50IGtEZWZhdWx0RnJhbWVSYXRlID0gMDsKICAgaWYgKHZpZGVvX2NvZGVjICE9IGtTYk1lZGlhVmlkZW9Db2RlY05vbmUgJiYKICAgICAgICFTYk1lZGlhSXNWaWRlb1N1cHBvcnRlZCgKLSAgICAgICAgICB2aWRlb19jb2RlYywKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotICAgICAgICAgIHZpZGVvX21pbWUsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0jaWYgU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQotICAgICAgICAgIGtEZWZhdWx0UHJvZmlsZSwga0RlZmF1bHRMZXZlbCwga0RlZmF1bHRDb2xvckRlcHRoLAotICAgICAgICAgIGtTYk1lZGlhUHJpbWFyeUlkVW5zcGVjaWZpZWQsIGtTYk1lZGlhVHJhbnNmZXJJZFVuc3BlY2lmaWVkLAotICAgICAgICAgIGtTYk1lZGlhTWF0cml4SWRVbnNwZWNpZmllZCwKLSNlbmRpZiAgLy8gU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQorICAgICAgICAgIHZpZGVvX2NvZGVjLCB2aWRlb19taW1lLCBrRGVmYXVsdFByb2ZpbGUsIGtEZWZhdWx0TGV2ZWwsCisgICAgICAgICAga0RlZmF1bHRDb2xvckRlcHRoLCBrU2JNZWRpYVByaW1hcnlJZFVuc3BlY2lmaWVkLAorICAgICAgICAgIGtTYk1lZGlhVHJhbnNmZXJJZFVuc3BlY2lmaWVkLCBrU2JNZWRpYU1hdHJpeElkVW5zcGVjaWZpZWQsCiAgICAgICAgICAga0RlZmF1bHRGcmFtZVdpZHRoLCBrRGVmYXVsdEZyYW1lSGVpZ2h0LCBrRGVmYXVsdEJpdFJhdGUsCiAgICAgICAgICAga0RlZmF1bHRGcmFtZVJhdGUsCiAgICAgICAgICAgb3V0cHV0X21vZGUgPT0ga1NiUGxheWVyT3V0cHV0TW9kZURlY29kZVRvVGV4dHVyZSkpIHsKQEAgLTIzNCw3ICsyMDUsNiBAQAogICAgIHJldHVybiBrU2JQbGF5ZXJJbnZhbGlkOwogICB9CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgaWYgKFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZShjcmVhdGlvbl9wYXJhbSkgIT0gb3V0cHV0X21vZGUpIHsKICAgICBlcnJvcl9tZXNzYWdlID0gc3RhcmJvYXJkOjpGb3JtYXRTdHJpbmcoIlVuc3VwcG9ydGVkIHBsYXllciBvdXRwdXQgbW9kZSAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9tb2RlKTsKQEAgLTI0MywyOCArMjEzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZS5jX3N0cigpKTsKICAgICByZXR1cm4ga1NiUGxheWVySW52YWxpZDsKICAgfQotI2Vsc2UgICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLSAgaWYgKCFTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQob3V0cHV0X21vZGUsIHZpZGVvX2NvZGVjLCBkcm1fc3lzdGVtKSkgewotICAgIGVycm9yX21lc3NhZ2UgPSBzdGFyYm9hcmQ6OkZvcm1hdFN0cmluZygiVW5zdXBwb3J0ZWQgcGxheWVyIG91dHB1dCBtb2RlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X21vZGUpOwotICAgIFNCX0xPRyhFUlJPUikgPDwgZXJyb3JfbWVzc2FnZSA8PCAiLiI7Ci0gICAgcGxheWVyX2Vycm9yX2Z1bmMoa1NiUGxheWVySW52YWxpZCwgY29udGV4dCwga1NiUGxheWVyRXJyb3JEZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZS5jX3N0cigpKTsKLSAgICByZXR1cm4ga1NiUGxheWVySW52YWxpZDsKLSAgfQotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogICBVcGRhdGVBY3RpdmVTZXNzaW9uUGxhdGZvcm1QbGF5YmFja1N0YXRlKGtQbGF5aW5nKTsKIAotI2lmIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogICBzdGFyYm9hcmQ6OnNjb3BlZF9wdHI8UGxheWVyV29ya2VyOjpIYW5kbGVyPiBoYW5kbGVyKAogICAgICAgbmV3IEZpbHRlckJhc2VkUGxheWVyV29ya2VySGFuZGxlcihjcmVhdGlvbl9wYXJhbSwgcHJvdmlkZXIpKTsKLSNlbHNlICAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0gIHN0YXJib2FyZDo6c2NvcGVkX3B0cjxQbGF5ZXJXb3JrZXI6OkhhbmRsZXI+IGhhbmRsZXIoCi0gICAgICBuZXcgRmlsdGVyQmFzZWRQbGF5ZXJXb3JrZXJIYW5kbGVyKHZpZGVvX2NvZGVjLCBhdWRpb19jb2RlYywgZHJtX3N5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxlX2luZm8sIG91dHB1dF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcikpOwotI2VuZGlmICAvLyBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKIAogICBTYlBsYXllciBwbGF5ZXIgPSBTYlBsYXllclByaXZhdGU6OkNyZWF0ZUluc3RhbmNlKAogICAgICAgYXVkaW9fY29kZWMsIHZpZGVvX2NvZGVjLCBhdWRpb19zYW1wbGVfaW5mbywgc2FtcGxlX2RlYWxsb2NhdGVfZnVuYywKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZV9wcmVmZXJfcHVuY2hvdXQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGVfcHJlZmVyX3B1bmNob3V0LmNjCmluZGV4IDM3MjAzYTMuLjM1NmRjY2IgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZV9wcmVmZXJfcHVuY2hvdXQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlX3ByZWZlcl9wdW5jaG91dC5jYwpAQCAtMTksOCArMTksNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19kZWNvZGVyX2ludGVybmFsLmgiCiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQogU2JQbGF5ZXJPdXRwdXRNb2RlIFNiUGxheWVyR2V0UHJlZmVycmVkT3V0cHV0TW9kZSgKICAgICBjb25zdCBTYlBsYXllckNyZWF0aW9uUGFyYW0qIGNyZWF0aW9uX3BhcmFtKSB7CiAgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6ZmlsdGVyOjpWaWRlb0RlY29kZXI7CkBAIC03Niw1ICs3NCwzIEBACiAgICAgICAgICAgICAgICAgICA8PCAiKSBpcyBub3Qgc3VwcG9ydGVkIjsKICAgcmV0dXJuIGtTYlBsYXllck91dHB1dE1vZGVJbnZhbGlkOwogfQotCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVhZGZiNy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9wbGF5ZXIuaCIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX2RlY29kZXJfaW50ZXJuYWwuaCIKLQotI2lmICFTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKLQotYm9vbCBTYlBsYXllck91dHB1dE1vZGVTdXBwb3J0ZWQoU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtKSB7Ci0gIHJldHVybiBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpwbGF5ZXI6OmZpbHRlcjo6VmlkZW9EZWNvZGVyOjoKLSAgICAgIE91dHB1dE1vZGVTdXBwb3J0ZWQob3V0cHV0X21vZGUsIGNvZGVjLCBkcm1fc3lzdGVtKTsKLX0KLQotI2VuZGlmICAvLyAhU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3Rlc3RzLmd5cGkgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3Rlc3RzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDM2ZmYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl90ZXN0cy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIFRoaXMgd2lsbCBiZSBpbmNsdWRlZCBieSAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCcgc28gZnVsbCBwYXRoIG5hbWVzCi0gICAgIyBoYXZlIHRvIGJlIHVzZWQgaGVyZS4KLSAgICAncGxheWVyX3Rlc3RzX3NvdXJjZXMnOiBbCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2pvYl9xdWV1ZV90ZXN0LmNjJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvam9iX3RocmVhZF90ZXN0LmNjJywKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93b3JrZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dvcmtlci5jYwppbmRleCA1YWI5YThhLi4yY2VjMWE2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dvcmtlci5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dvcmtlci5jYwpAQCAtMTU5LDE0ICsxNTksMTUgQEAKIAogdm9pZCBQbGF5ZXJXb3JrZXI6OlVwZGF0ZVBsYXllckVycm9yKFNiUGxheWVyRXJyb3IgZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yX21lc3NhZ2UpIHsKLSAgZXJyb3Jfb2NjdXJyZWRfID0gdHJ1ZTsKICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJFbmNvdW50ZXJlZCBwbGF5ZXIgZXJyb3IgIiA8PCBlcnJvcgogICAgICAgICAgICAgICAgICAgPDwgIiB3aXRoIG1lc3NhZ2U6ICIgPDwgZXJyb3JfbWVzc2FnZTsKLQorICAvLyBPbmx5IHJlcG9ydCB0aGUgZmlyc3QgZXJyb3IuCisgIGlmIChlcnJvcl9vY2N1cnJlZF8uZXhjaGFuZ2UodHJ1ZSkpIHsKKyAgICByZXR1cm47CisgIH0KICAgaWYgKCFwbGF5ZXJfZXJyb3JfZnVuY18pIHsKICAgICByZXR1cm47CiAgIH0KLQogICBwbGF5ZXJfZXJyb3JfZnVuY18ocGxheWVyXywgY29udGV4dF8sIGVycm9yLCBlcnJvcl9tZXNzYWdlLmNfc3RyKCkpOwogfQogCkBAIC0xOTgsMTcgKzE5OSwxNSBAQAogICBIYW5kbGVyOjpVcGRhdGVQbGF5ZXJFcnJvckNCIHVwZGF0ZV9wbGF5ZXJfZXJyb3JfY2I7CiAgIHVwZGF0ZV9wbGF5ZXJfZXJyb3JfY2IgPQogICAgICAgc3RkOjpiaW5kKCZQbGF5ZXJXb3JrZXI6OlVwZGF0ZVBsYXllckVycm9yLCB0aGlzLCBfMSwgXzIpOwotICBzdGQ6OnN0cmluZyBlcnJvcl9tZXNzYWdlOwogICBpZiAoaGFuZGxlcl8tPkluaXQoCiAgICAgICAgICAgcGxheWVyXywgc3RkOjpiaW5kKCZQbGF5ZXJXb3JrZXI6OlVwZGF0ZU1lZGlhSW5mbywgdGhpcywgXzEsIF8yLCBfMyksCiAgICAgICAgICAgc3RkOjpiaW5kKCZQbGF5ZXJXb3JrZXI6OnBsYXllcl9zdGF0ZSwgdGhpcyksCiAgICAgICAgICAgc3RkOjpiaW5kKCZQbGF5ZXJXb3JrZXI6OlVwZGF0ZVBsYXllclN0YXRlLCB0aGlzLCBfMSksCi0gICAgICAgICAgdXBkYXRlX3BsYXllcl9lcnJvcl9jYiwgJmVycm9yX21lc3NhZ2UpKSB7CisgICAgICAgICAgdXBkYXRlX3BsYXllcl9lcnJvcl9jYikpIHsKICAgICBVcGRhdGVQbGF5ZXJTdGF0ZShrU2JQbGF5ZXJTdGF0ZUluaXRpYWxpemVkKTsKICAgfSBlbHNlIHsKLSAgICBVcGRhdGVQbGF5ZXJFcnJvcigKLSAgICAgICAga1NiUGxheWVyRXJyb3JEZWNvZGUsCi0gICAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQbGF5ZXJXb3JrZXIgd2l0aCBlcnJvcjogIiArIGVycm9yX21lc3NhZ2UpOworICAgIFVwZGF0ZVBsYXllckVycm9yKGtTYlBsYXllckVycm9yRGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQbGF5ZXJXb3JrZXIgd2l0aCB1bmtub3duIGVycm9yLiIpOwogICB9CiB9CiAKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfd29ya2VyLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvcGxheWVyX3dvcmtlci5oCmluZGV4IGExNTY1YTcuLmRhYzlmOGYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9wbGF5ZXJfd29ya2VyLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3BsYXllcl93b3JrZXIuaApAQCAtMTUsNiArMTUsNyBAQAogI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9QTEFZRVJfUExBWUVSX1dPUktFUl9IXwogI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1NUQVJCT0FSRF9QTEFZRVJfUExBWUVSX1dPUktFUl9IXwogCisjaW5jbHVkZSA8YXRvbWljPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgogCkBAIC04MSw4ICs4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlTWVkaWFJbmZvQ0IgdXBkYXRlX21lZGlhX2luZm9fY2IsCiAgICAgICAgICAgICAgICAgICAgICAgR2V0UGxheWVyU3RhdGVDQiBnZXRfcGxheWVyX3N0YXRlX2NiLAogICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZVBsYXllclN0YXRlQ0IgdXBkYXRlX3BsYXllcl9zdGF0ZV9jYiwKLSAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVQbGF5ZXJFcnJvckNCIHVwZGF0ZV9wbGF5ZXJfZXJyb3JfY2IsCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGVycm9yX21lc3NhZ2UpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVQbGF5ZXJFcnJvckNCIHVwZGF0ZV9wbGF5ZXJfZXJyb3JfY2IpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgU2VlayhTYlRpbWUgc2Vla190b190aW1lLCBpbnQgdGlja2V0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIFdyaXRlU2FtcGxlKGNvbnN0IHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+JiBpbnB1dF9idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHdyaXR0ZW4pID0gMDsKQEAgLTIxMiw3ICsyMTIsNyBAQAogICBTYlBsYXllckRlY29kZXJTdGF0dXNGdW5jIGRlY29kZXJfc3RhdHVzX2Z1bmNfOwogICBTYlBsYXllclN0YXR1c0Z1bmMgcGxheWVyX3N0YXR1c19mdW5jXzsKICAgU2JQbGF5ZXJFcnJvckZ1bmMgcGxheWVyX2Vycm9yX2Z1bmNfOwotICBib29sIGVycm9yX29jY3VycmVkXyA9IGZhbHNlOworICBzdGQ6OmF0b21pY19ib29sIGVycm9yX29jY3VycmVkXyA9IHtmYWxzZX07CiAgIFNiUGxheWVyIHBsYXllcl87CiAgIHZvaWQqIGNvbnRleHRfOwogICBpbnQgdGlja2V0XzsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci92aWRlb19kbXBfY29tbW9uLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3ZpZGVvX2RtcF9jb21tb24uY2MKaW5kZXggZDRhNjVmZi4uYTU0NDBjMSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3ZpZGVvX2RtcF9jb21tb24uY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL3ZpZGVvX2RtcF9jb21tb24uY2MKQEAgLTkyLDkgKzkyLDcgQEAKICAgICAgICAgICBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvV2l0aENvbmZpZyogYXVkaW9fc2FtcGxlX2luZm8pIHsKICAgUmVhZChyZWFkX2NiLCByZXZlcnNlX2J5dGVfb3JkZXIsICZhdWRpb19zYW1wbGVfaW5mby0+Y29kZWMpOwogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAgIGF1ZGlvX3NhbXBsZV9pbmZvLT5taW1lID0gIiI7Ci0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQogCiAgIFJlYWQocmVhZF9jYiwgcmV2ZXJzZV9ieXRlX29yZGVyLCAmYXVkaW9fc2FtcGxlX2luZm8tPmZvcm1hdF90YWcpOwogICBSZWFkKHJlYWRfY2IsIHJldmVyc2VfYnl0ZV9vcmRlciwgJmF1ZGlvX3NhbXBsZV9pbmZvLT5udW1iZXJfb2ZfY2hhbm5lbHMpOwpAQCAtMTcwLDEwICsxNjgsOCBAQAogICAgICAgICAgIFNiTWVkaWFWaWRlb1NhbXBsZUluZm9XaXRoT3B0aW9uYWxDb2xvck1ldGFkYXRhKiB2aWRlb19zYW1wbGVfaW5mbykgewogICBSZWFkKHJlYWRfY2IsIHJldmVyc2VfYnl0ZV9vcmRlciwgJnZpZGVvX3NhbXBsZV9pbmZvLT5jb2RlYyk7CiAKLSNpZiBTQl9IQVMoUExBWUVSX0NSRUFUSU9OX0FORF9PVVRQVVRfTU9ERV9RVUVSWV9JTVBST1ZFTUVOVCkKICAgdmlkZW9fc2FtcGxlX2luZm8tPm1pbWUgPSAiIjsKICAgdmlkZW9fc2FtcGxlX2luZm8tPm1heF92aWRlb19jYXBhYmlsaXRpZXMgPSAiIjsKLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCiAKICAgUmVhZChyZWFkX2NiLCByZXZlcnNlX2J5dGVfb3JkZXIsICZ2aWRlb19zYW1wbGVfaW5mby0+aXNfa2V5X2ZyYW1lKTsKICAgUmVhZChyZWFkX2NiLCByZXZlcnNlX2J5dGVfb3JkZXIsICZ2aWRlb19zYW1wbGVfaW5mby0+ZnJhbWVfd2lkdGgpOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsLmNjCmluZGV4IDliNmI5MjUuLmY4N2VlOWEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2NhbmNlbC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9jYW5jZWwuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pbnRlcm5hbC5oIgogCkBAIC0yNCw1ICsyMiwzIEBACiAgICAgcmVjb2duaXplci0+Q2FuY2VsKCk7CiAgIH0KIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGUuY2MKaW5kZXggMTc4ZjU4ZC4uMjE3ZDE2NiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfY3JlYXRlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZS5jYwpAQCAtMTgsMTMgKzE4LDkgQEAKICNlcnJvciBTcGVlY2ggUmVjb2duaXplciBpcyBkZXByZWNhdGVkLiBJbXBsZW1lbnQgZnVsbCBNaWNyb3Bob25lIGluc3RlYWQuCiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2ludGVybmFsLmgiCiAKIFNiU3BlZWNoUmVjb2duaXplciBTYlNwZWVjaFJlY29nbml6ZXJDcmVhdGUoCiAgICAgY29uc3QgU2JTcGVlY2hSZWNvZ25pemVySGFuZGxlciogaGFuZGxlcikgewogICByZXR1cm4gU2JTcGVlY2hSZWNvZ25pemVyUHJpdmF0ZTo6Q3JlYXRlU3BlZWNoUmVjb2duaXplcihoYW5kbGVyKTsKIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9kZXN0cm95LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveS5jYwppbmRleCAyZWRmYjMwLi5hOGYzYjAzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9kZXN0cm95LmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2Rlc3Ryb3kuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfaW50ZXJuYWwuaCIKIAogdm9pZCBTYlNwZWVjaFJlY29nbml6ZXJEZXN0cm95KFNiU3BlZWNoUmVjb2duaXplciByZWNvZ25pemVyKSB7CkBAIC0yMyw1ICsyMSwzIEBACiAgICAgU2JTcGVlY2hSZWNvZ25pemVyUHJpdmF0ZTo6RGVzdHJveVNwZWVjaFJlY29nbml6ZXIocmVjb2duaXplcik7CiAgIH0KIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfaW50ZXJuYWwuaAppbmRleCBlM2UzZTM0Li4wNDYyNGZiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pbnRlcm5hbC5oCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2ludGVybmFsLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKIHN0cnVjdCBTYlNwZWVjaFJlY29nbml6ZXJQcml2YXRlIHsKICAgdmlydHVhbCB+U2JTcGVlY2hSZWNvZ25pemVyUHJpdmF0ZSgpIHt9CiAgIHZpcnR1YWwgYm9vbCBTdGFydChjb25zdCBTYlNwZWVjaENvbmZpZ3VyYXRpb24qIGNvbmZpZ3VyYXRpb24pID0gMDsKQEAgLTI4LDYgKzI3LDUgQEAKICAgICAgIGNvbnN0IFNiU3BlZWNoUmVjb2duaXplckhhbmRsZXIqIGhhbmRsZXIpOwogICBzdGF0aWMgdm9pZCBEZXN0cm95U3BlZWNoUmVjb2duaXplcihTYlNwZWVjaFJlY29nbml6ZXIgc3BlZWNoX3JlY29nbml6ZXIpOwogfTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQogCiAjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfU1RBUkJPQVJEX1NQRUVDSF9SRUNPR05JWkVSX1NQRUVDSF9SRUNPR05JWkVSX0lOVEVSTkFMX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pc19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pc19zdXBwb3J0ZWQuY2MKaW5kZXggMDNjZDZhYi4uYTJmODJjMSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfaXNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX2lzX3N1cHBvcnRlZC5jYwpAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYlNwZWVjaFJlY29nbml6ZXJJc1N1cHBvcnRlZCgpIHsKICAgcmV0dXJuIHRydWU7CiB9Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX3N0YXJ0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MKaW5kZXggNDA3ZDA4OS4uNzI4MjI2NyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfaW50ZXJuYWwuaCIKIAogYm9vbCBTYlNwZWVjaFJlY29nbml6ZXJTdGFydChTYlNwZWVjaFJlY29nbml6ZXIgcmVjb2duaXplciwKQEAgLTI0LDUgKzIyLDMgQEAKICAgICAgICAgICAgICA/IHJlY29nbml6ZXItPlN0YXJ0KGNvbmZpZ3VyYXRpb24pCiAgICAgICAgICAgICAgOiBmYWxzZTsKIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9zdG9wLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIvc3BlZWNoX3JlY29nbml6ZXJfc3RvcC5jYwppbmRleCA1MGQ1ODAyLi5mMDNjMjM0IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9zdG9wLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyL3NwZWVjaF9yZWNvZ25pemVyX3N0b3AuY2MKQEAgLTE0LDggKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQotCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zcGVlY2hfcmVjb2duaXplci9zcGVlY2hfcmVjb2duaXplcl9pbnRlcm5hbC5oIgogCkBAIC0yNCw1ICsyMiwzIEBACiAgICAgcmVjb2duaXplci0+U3RvcCgpOwogICB9CiB9Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTAyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuY2MKQEAgLTAsMCArMSwyNSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKKworY29uc3QgY2hhciBrU3RhcnRIYW5kbGVyQXRDcmFzaFtdID0gInN0YXJ0X2hhbmRsZXJfYXRfY3Jhc2giOworCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuaCBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0YXJib2FyZF9zd2l0Y2hlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNWUwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdGFyYm9hcmRfc3dpdGNoZXMuaApAQCAtMCwwICsxLDMzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfU1RBUkJPQVJEX1NXSVRDSEVTX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfU1RBUkJPQVJEX1NUQVJCT0FSRF9TV0lUQ0hFU19IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworCisvLyBTdGFydCB0aGUgY3Jhc2ggaGFuZGxlciBvbmx5IHdoZW4gYSBjcmFzaCBoYXBwZW5zLCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIGl0CisvLyBiZWZvcmUgdGhlIGFwcCBydW5zIGFuZCBrZWVwaW5nIGl0IHJ1bm5pbmcgYWxsIHRoZSB0aW1lLiBUaGlzIG9wdGlvbiByZWR1Y2VzCisvLyBtZW1vcnkgY29uc3VtcHRpb24gYnkgdGhlIGNyYXNoIGhhbmRsZXIuCitleHRlcm4gY29uc3QgY2hhciBrU3RhcnRIYW5kbGVyQXRDcmFzaFtdOworCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9TVEFSQk9BUkRfU1RBUkJPQVJEX1NXSVRDSEVTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfbG9jYWxfc3RvcmFnZV9pbnRlcm5hbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9sb2NhbF9zdG9yYWdlX2ludGVybmFsLmNjCmluZGV4IDUwNzExYjQuLjAyYTE3NjMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9sb2NhbF9zdG9yYWdlX2ludGVybmFsLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9sb2NhbF9zdG9yYWdlX2ludGVybmFsLmNjCkBAIC0yMjksMTIgKzIyOSw4IEBACiAgIEtleVJlY29yZCogcmVjb3JkID0gJmRhdGFfLT5rZXlfdGFibGVfW2tleS0+aW5kZXhdOwogCiAgIHJlY29yZC0+ZGVzdHJ1Y3RvciA9IGRlc3RydWN0b3I7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgbWVtc2V0KHJlY29yZC0+dmFsdWVzLmRhdGEoKSwgMCwKLSAgICAgICAgICAgICAgcmVjb3JkLT52YWx1ZXMuc2l6ZSgpICogc2l6ZW9mKHJlY29yZC0+dmFsdWVzWzBdKSk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gIG1lbXNldChyZWNvcmQtPnZhbHVlcywgMCwgc2l6ZW9mKHJlY29yZC0+dmFsdWVzKSk7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCisgICAgICAgICByZWNvcmQtPnZhbHVlcy5zaXplKCkgKiBzaXplb2YocmVjb3JkLT52YWx1ZXNbMF0pKTsKICAgcmVjb3JkLT52YWxpZCA9IHRydWU7CiAKICAgcmV0dXJuIGtleTsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9sb2NhbF9zdG9yYWdlX2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfbG9jYWxfc3RvcmFnZV9pbnRlcm5hbC5oCmluZGV4IDRlMzIyZjQuLmZmYTIyNWEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3RocmVhZF9sb2NhbF9zdG9yYWdlX2ludGVybmFsLmgKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvdGhyZWFkX2xvY2FsX3N0b3JhZ2VfaW50ZXJuYWwuaApAQCAtNTgsMTEgKzU4LDcgQEAKICAgc3RydWN0IEtleVJlY29yZCB7CiAgICAgYm9vbCB2YWxpZDsKICAgICBTYlRocmVhZExvY2FsRGVzdHJ1Y3RvciBkZXN0cnVjdG9yOwotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgc3RkOjp2ZWN0b3I8dm9pZCo+IHZhbHVlcyhrTWF4VGhyZWFkcyk7Ci0jZWxzZSAgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCi0gICAgdm9pZCogdmFsdWVzW2tNYXhUaHJlYWRzXTsKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgfTsKIAogICAvLyBTZXRzIHVwIHRoZSBzcGVjaWZpZWQga2V5LgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2NhcHRpb25fc2V0dGluZ3MuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfY2FwdGlvbl9zZXR0aW5ncy5jYwppbmRleCBkZGFiZjJlLi43OTc1NDY3IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfY2FwdGlvbl9zZXR0aW5ncy5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfY2FwdGlvbl9zZXR0aW5ncy5jYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC9hY2Nlc3NpYmlsaXR5LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tZW1vcnkuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKIGJvb2wgU2JBY2Nlc3NpYmlsaXR5R2V0Q2FwdGlvblNldHRpbmdzKAogICAgIFNiQWNjZXNzaWJpbGl0eUNhcHRpb25TZXR0aW5ncyogY2FwdGlvbl9zZXR0aW5ncykgewogICBpZiAoIWNhcHRpb25fc2V0dGluZ3MgfHwKQEAgLTMwLDQgKzI5LDMgQEAKICAgLy8gZXhwbGljaXRseSBzZXQgc3RhdGVzIHRvIGtTYkFjY2Vzc2liaWxpdHlDYXB0aW9uU3RhdGVVbnN1cHBvcnRlZC4KICAgcmV0dXJuIHRydWU7CiB9Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhDQVBUSU9OUykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X3NldF9jYXB0aW9uc19lbmFibGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MKaW5kZXggMDY2NWZkNS4uM2JkOTViYSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MKQEAgLTE1LDggKzE1LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvYWNjZXNzaWJpbGl0eS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCiBib29sIFNiQWNjZXNzaWJpbGl0eVNldENhcHRpb25zRW5hYmxlZChib29sIGVuYWJsZWQpIHsKICAgcmV0dXJuIGZhbHNlOwogfQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoQ0FQVElPTlMpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGZmMjViLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfY3JlYXRlX3RyYW5zZm9ybWVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jcnlwdG9ncmFwaHkuaCIKLQotU2JDcnlwdG9ncmFwaHlUcmFuc2Zvcm1lciBTYkNyeXB0b2dyYXBoeUNyZWF0ZVRyYW5zZm9ybWVyKAotICAgIGNvbnN0IGNoYXIqIGFsZ29yaXRobSwKLSAgICBpbnQgYmxvY2tfc2l6ZV9iaXRzLAotICAgIFNiQ3J5cHRvZ3JhcGh5RGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICBTYkNyeXB0b2dyYXBoeUJsb2NrQ2lwaGVyTW9kZSBtb2RlLAotICAgIGNvbnN0IHZvaWQqIGluaXRpYWxpemF0aW9uX3ZlY3RvciwKLSAgICBpbnQgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUsCi0gICAgY29uc3Qgdm9pZCoga2V5LAotICAgIGludCBrZXlfc2l6ZSkgewotICByZXR1cm4ga1NiQ3J5cHRvZ3JhcGh5SW52YWxpZFRyYW5zZm9ybWVyOwotfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZGVzdHJveV90cmFuc2Zvcm1lci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfZGVzdHJveV90cmFuc2Zvcm1lci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NTQ4ZC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2Rlc3Ryb3lfdHJhbnNmb3JtZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NyeXB0b2dyYXBoeS5oIgotCi12b2lkIFNiQ3J5cHRvZ3JhcGh5RGVzdHJveVRyYW5zZm9ybWVyKFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIpIHsKLX0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZjcwNjYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9nZXRfdGFnLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jcnlwdG9ncmFwaHkuaCIKLQotYm9vbCBTYkNyeXB0b2dyYXBoeUdldFRhZygKLSAgICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyLAotICAgIHZvaWQqIG91dF90YWcsCi0gICAgaW50IG91dF90YWdfc2l6ZSkgewotICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfYXV0aGVudGljYXRlZF9kYXRhLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWQyZWEyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0KLWJvb2wgU2JDcnlwdG9ncmFwaHlTZXRBdXRoZW50aWNhdGVkRGF0YSgKLSAgICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyLAotICAgIGNvbnN0IHZvaWQqIGRhdGEsCi0gICAgaW50IGRhdGFfc2l6ZSkgewotICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmU3ZjVkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2luaXRpYWxpemF0aW9uX3ZlY3Rvci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvY3J5cHRvZ3JhcGh5LmgiCi0KLXZvaWQgU2JDcnlwdG9ncmFwaHlTZXRJbml0aWFsaXphdGlvblZlY3RvcigKLSAgICBTYkNyeXB0b2dyYXBoeVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyLAotICAgIGNvbnN0IHZvaWQqIGluaXRpYWxpemF0aW9uX3ZlY3RvciwKLSAgICBpbnQgaW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUpIHsKLX0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA8IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjAwODMzLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfdHJhbnNmb3JtLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jcnlwdG9ncmFwaHkuaCIKLQotaW50IFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtKFNiQ3J5cHRvZ3JhcGh5VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogaW5fZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5fZGF0YV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIG91dF9kYXRhKSB7Ci0gIHJldHVybiAwOwotfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2V0X21ldHJpY3MuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2dldF9tZXRyaWNzLmNjCmluZGV4IGRjMTEwMDkuLmNlNDdiZGMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2V0X21ldHJpY3MuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9nZXRfbWV0cmljcy5jYwpAQCAtMTQsOCArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL2RybS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogY29uc3Qgdm9pZCogU2JEcm1HZXRNZXRyaWNzKFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0sIGludCogc2l6ZSkgewogICBpZiAoc2l6ZSAhPSBOVUxMKSB7CiAgICAgKnNpemUgPSAwOwpAQCAtMjMsNSArMjEsMyBAQAogCiAgIHJldHVybiBOVUxMOwogfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZW52aXJvbm1lbnQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZW52aXJvbm1lbnQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxN2M2NQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9lbnZpcm9ubWVudC5jYwpAQCAtMCwwICsxLDIzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2Vudmlyb25tZW50LmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworCitzdGQ6OnN0cmluZyBHZXRFbnZpcm9ubWVudChzdGQ6OnN0cmluZyBuYW1lKSB7CisgIHJldHVybiAiIjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfYXRvbWljX3JlcGxhY2UuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYwppbmRleCBlMzY1ZjBmLi5lN2JkN2JhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYwpAQCAtMTQsMTIgKzE0LDggQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBib29sIFNiRmlsZUF0b21pY1JlcGxhY2UoY29uc3QgY2hhciogcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YV9zaXplKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MKaW5kZXggMDAxODdlZS4uZDljNzBjNSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkLmNjCkBAIC0xNyw5ICsxNyw3IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCiAKIGJvb2wgU2JNZWRpYUlzQXVkaW9TdXBwb3J0ZWQoU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29udGVudF90eXBlLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUpIHsKICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX291dHB1dF9wcm90ZWN0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfb3V0cHV0X3Byb3RlY3RlZC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxMTdhNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfb3V0cHV0X3Byb3RlY3RlZC5jYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLWJvb2wgU2JNZWRpYUlzT3V0cHV0UHJvdGVjdGVkKCkgewotICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljc19zdXBwb3J0ZWQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNzg3MzMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX3RyYW5zZmVyX2NoYXJhY3RlcmlzdGljc19zdXBwb3J0ZWQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9zdXBwb3J0X2ludGVybmFsLmgiCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKLQotI2lmICFTQl9IQVMoTUVESUFfSVNfVklERU9fU1VQUE9SVEVEX1JFRklORU1FTlQpCi1ib29sIFNiTWVkaWFJc1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzU3VwcG9ydGVkKFNiTWVkaWFUcmFuc2ZlcklkIHRyYW5zZmVyX2lkKSB7Ci0gIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZiAgLy8gIVNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCmluZGV4IGU3ZDJmNGMuLmUxNmVlNTMgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYwpAQCAtMTcsMTcgKzE3LDEzIEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCiAKIGJvb2wgU2JNZWRpYUlzVmlkZW9TdXBwb3J0ZWQoU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29udGVudF90eXBlLAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgotI2lmIFNCX0hBUyhNRURJQV9JU19WSURFT19TVVBQT1JURURfUkVGSU5FTUVOVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByb2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdF9kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVByaW1hcnlJZCBwcmltYXJ5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVHJhbnNmZXJJZCB0cmFuc2Zlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYU1hdHJpeElkIG1hdHJpeF9pZCwKLSNlbmRpZiAgLy8gU0JfSEFTKE1FRElBX0lTX1ZJREVPX1NVUFBPUlRFRF9SRUZJTkVNRU5UKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmFtZV9oZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgYml0cmF0ZSwKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9zZXRfb3V0cHV0X3Byb3RlY3Rpb24uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfc2V0X291dHB1dF9wcm90ZWN0aW9uLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTkyMzdkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9zZXRfb3V0cHV0X3Byb3RlY3Rpb24uY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKLQotI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCi0KLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyCi1ib29sIFNiTWVkaWFTZXRPdXRwdXRQcm90ZWN0aW9uKGJvb2wgZW5hYmxlZCkgewotICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2Nsb3NlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY2xvc2UuY2MKaW5kZXggZGYyOWM4NC4uNDM3MTU1MSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY2xvc2UuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY2xvc2UuY2MKQEAgLTE0LDExICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvbWljcm9waG9uZS5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiAhU0JfSEFTKE1JQ1JPUEhPTkUpCi0jZXJyb3IgIlNCX0hBU19NSUNST1BIT05FIG11c3QgYmUgc2V0IHRvIGJ1aWxkIHRoaXMgZmlsZSBiZWZvcmUgU3RhcmJvYXJkIEFQSSBcCi12ZXJzaW9uIDEyLiIKLSNlbmRpZgotCiBib29sIFNiTWljcm9waG9uZUNsb3NlKFNiTWljcm9waG9uZSBtaWNyb3Bob25lKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2NyZWF0ZS5jYwppbmRleCA4YWViMzkzLi5hMDE0YTVhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9jcmVhdGUuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY3JlYXRlLmNjCkBAIC0xNCwxMSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL21pY3JvcGhvbmUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogU2JNaWNyb3Bob25lIFNiTWljcm9waG9uZUNyZWF0ZShTYk1pY3JvcGhvbmVJZCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZV9yYXRlX2luX2h6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX3NpemUpIHsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2Rlc3Ryb3kuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9kZXN0cm95LmNjCmluZGV4IDAyZTQxNWIuLjZlMDJhOTAgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2Rlc3Ryb3kuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZGVzdHJveS5jYwpAQCAtMTQsOSArMTQsNCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL21pY3JvcGhvbmUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogdm9pZCBTYk1pY3JvcGhvbmVEZXN0cm95KFNiTWljcm9waG9uZSBtaWNyb3Bob25lKSB7fQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2dldF9hdmFpbGFibGUuY2MKaW5kZXggMGJiNjM0Yy4uZjEzMjA4ZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjCkBAIC0xNCwxMSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL21pY3JvcGhvbmUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogaW50IFNiTWljcm9waG9uZUdldEF2YWlsYWJsZShTYk1pY3JvcGhvbmVJbmZvKiBvdXRfaW5mb19hcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZm9fYXJyYXlfc2l6ZSkgewogICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2lzX3NhbXBsZV9yYXRlX3N1cHBvcnRlZC5jYwppbmRleCA0MmE2ZmI5Li5kNjU5MWMyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfaXNfc2FtcGxlX3JhdGVfc3VwcG9ydGVkLmNjCkBAIC0xNCwxMSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL21pY3JvcGhvbmUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogYm9vbCBTYk1pY3JvcGhvbmVJc1NhbXBsZVJhdGVTdXBwb3J0ZWQoU2JNaWNyb3Bob25lSWQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGVfaW5faHopIHsKICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfb3Blbi5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX29wZW4uY2MKaW5kZXggMTJiZTYwZS4uYzAxZmU2ZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfb3Blbi5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9vcGVuLmNjCkBAIC0xNCwxMSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL21pY3JvcGhvbmUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIgJiYgIVNCX0hBUyhNSUNST1BIT05FKQotI2Vycm9yICJTQl9IQVNfTUlDUk9QSE9ORSBtdXN0IGJlIHNldCB0byBidWlsZCB0aGlzIGZpbGUgYmVmb3JlIFN0YXJib2FyZCBBUEkgXAotdmVyc2lvbiAxMi4iCi0jZW5kaWYKLQogYm9vbCBTYk1pY3JvcGhvbmVPcGVuKFNiTWljcm9waG9uZSBtaWNyb3Bob25lKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX3JlYWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9yZWFkLmNjCmluZGV4IDZkMTNiZjcuLjBjMzYzNmIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX3JlYWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfcmVhZC5jYwpAQCAtMTQsMTEgKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9taWNyb3Bob25lLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA8IDEyICYmICFTQl9IQVMoTUlDUk9QSE9ORSkKLSNlcnJvciAiU0JfSEFTX01JQ1JPUEhPTkUgbXVzdCBiZSBzZXQgdG8gYnVpbGQgdGhpcyBmaWxlIGJlZm9yZSBTdGFyYm9hcmQgQVBJIFwKLXZlcnNpb24gMTIuIgotI2VuZGlmCi0KIGludCBTYk1pY3JvcGhvbmVSZWFkKFNiTWljcm9waG9uZSBtaWNyb3Bob25lLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCogb3V0X2F1ZGlvX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgYXVkaW9fZGF0YV9zaXplKSB7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfY3JlYXRlLmNjCmluZGV4IGM0NDk3NWQuLjFiNDdmNmUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfY3JlYXRlLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfY3JlYXRlLmNjCkBAIC0xNiw4ICsxNiw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KIFNiUGxheWVyIFNiUGxheWVyQ3JlYXRlKAogICAgIFNiV2luZG93IHdpbmRvdywKICAgICBjb25zdCBTYlBsYXllckNyZWF0aW9uUGFyYW0qIGNyZWF0aW9uX3BhcmFtLApAQCAtMjksMjMgKzI3LDMgQEAKICAgICBTYkRlY29kZVRhcmdldEdyYXBoaWNzQ29udGV4dFByb3ZpZGVyKiBjb250ZXh0X3Byb3ZpZGVyKSB7CiAgIHJldHVybiBrU2JQbGF5ZXJJbnZhbGlkOwogfQotCi0jZWxzZSAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KLVNiUGxheWVyIFNiUGxheWVyQ3JlYXRlKFNiV2luZG93IHdpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyogYXVkaW9fc2FtcGxlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBtYXhfdmlkZW9fY2FwYWJpbGl0aWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJEZWFsbG9jYXRlU2FtcGxlRnVuYyBzYW1wbGVfZGVhbGxvY2F0ZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJEZWNvZGVyU3RhdHVzRnVuYyBkZWNvZGVyX3N0YXR1c19mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgU2JQbGF5ZXJTdGF0dXNGdW5jIHBsYXllcl9zdGF0dXNfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyRXJyb3JGdW5jIHBsYXllcl9lcnJvcl9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIHByb3ZpZGVyKSB7Ci0gIHJldHVybiBrU2JQbGF5ZXJJbnZhbGlkOwotfQotCi0jZW5kaWYgIC8vIFNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfcHJlZmVycmVkX291dHB1dF9tb2RlLmNjCmluZGV4IDhkNTVlNWQuLmM1Mzc4OTIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9wcmVmZXJyZWRfb3V0cHV0X21vZGUuY2MKQEAgLTE2LDExICsxNiw3IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgogCi0jaWYgU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCi0KIFNiUGxheWVyT3V0cHV0TW9kZSBTYlBsYXllckdldFByZWZlcnJlZE91dHB1dE1vZGUoCiAgICAgY29uc3QgU2JQbGF5ZXJDcmVhdGlvblBhcmFtKiBjcmVhdGlvbl9wYXJhbSkgewogICByZXR1cm4ga1NiUGxheWVyT3V0cHV0TW9kZUludmFsaWQ7CiB9Ci0KLSNlbmRpZiAgLy8gU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGU0MTQ5Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfb3V0cHV0X21vZGVfc3VwcG9ydGVkLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jaW5jbHVkZSAic3RhcmJvYXJkL3BsYXllci5oIgotCi0jaWYgIVNCX0hBUyhQTEFZRVJfQ1JFQVRJT05fQU5EX09VVFBVVF9NT0RFX1FVRVJZX0lNUFJPVkVNRU5UKQotCi1ib29sIFNiUGxheWVyT3V0cHV0TW9kZVN1cHBvcnRlZChTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZCAvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVZpZGVvQ29kZWMgY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtKSB7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmICAvLyAhU0JfSEFTKFBMQVlFUl9DUkVBVElPTl9BTkRfT1VUUFVUX01PREVfUVVFUllfSU1QUk9WRU1FTlQpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2lzX2lwdjZfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9pc19pcHY2X3N1cHBvcnRlZC5jYwppbmRleCA2NGNhYzdlLi5kMmUwZmUyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2lzX2lwdjZfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfaXNfaXB2Nl9zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc29ja2V0LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBib29sIFNiU29ja2V0SXNJcHY2U3VwcG9ydGVkKCkgewogICByZXR1cm4gZmFsc2U7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2NhbmNlbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9jYW5jZWwuY2MKaW5kZXggMmViMGQyNC4uNTE3NjU4NSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2NhbmNlbC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfY2FuY2VsLmNjCkBAIC0xNCw4ICsxNCw0IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogdm9pZCBTYlNwZWVjaFJlY29nbml6ZXJDYW5jZWwoU2JTcGVlY2hSZWNvZ25pemVyIHJlY29nbml6ZXIpIHt9Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9jcmVhdGUuY2MKaW5kZXggZWYzNzYxMS4uZTViNzgwNSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2NyZWF0ZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfY3JlYXRlLmNjCkBAIC0xNCwxMSArMTQsNyBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCi0KIFNiU3BlZWNoUmVjb2duaXplciBTYlNwZWVjaFJlY29nbml6ZXJDcmVhdGUoCiAgICAgY29uc3QgU2JTcGVlY2hSZWNvZ25pemVySGFuZGxlciogaGFuZGxlcikgewogICByZXR1cm4ga1NiU3BlZWNoUmVjb2duaXplckludmFsaWQ7CiB9Ci0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9SRUNPR05JWkVSKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2Rlc3Ryb3kuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveS5jYwppbmRleCAyYmVmNmE3Li4xYjczMzllIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfZGVzdHJveS5jYwpAQCAtMTQsOCArMTQsNCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCi0KIHZvaWQgU2JTcGVlY2hSZWNvZ25pemVyRGVzdHJveShTYlNwZWVjaFJlY29nbml6ZXIgcmVjb2duaXplcikge30KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfaXNfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX2lzX3N1cHBvcnRlZC5jYwppbmRleCAzMTIyYjczLi5jOThhNmFkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfaXNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9pc19zdXBwb3J0ZWQuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JTcGVlY2hSZWNvZ25pemVySXNTdXBwb3J0ZWQoKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX3N0YXJ0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9yZWNvZ25pemVyX3N0YXJ0LmNjCmluZGV4IDBjMGJkZjguLjE2YzliMWYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9zdGFydC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfc3RhcnQuY2MKQEAgLTE0LDExICsxNCw3IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogYm9vbCBTYlNwZWVjaFJlY29nbml6ZXJTdGFydChTYlNwZWVjaFJlY29nbml6ZXIgcmVjb2duaXplciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JTcGVlY2hDb25maWd1cmF0aW9uKiBjb25maWd1cmF0aW9uKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3JlY29nbml6ZXJfc3RvcC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9zdG9wLmNjCmluZGV4IDlkNzA0YzMuLjQ0YWMyOWUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9zdG9wLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfcmVjb2duaXplcl9zdG9wLmNjCkBAIC0xNCw4ICsxNCw0IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogdm9pZCBTYlNwZWVjaFJlY29nbml6ZXJTdG9wKFNiU3BlZWNoUmVjb2duaXplciByZWNvZ25pemVyKSB7fQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2NhbmNlbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2NhbmNlbC5jYwppbmRleCBlNjQwNzEzLi45ZjM4MDhlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19jYW5jZWwuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfY2FuY2VsLmNjCkBAIC0xNCw4ICsxNCw0IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvc3BlZWNoX3N5bnRoZXNpcy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9TWU5USEVTSVMpCi0KIHZvaWQgU2JTcGVlY2hTeW50aGVzaXNDYW5jZWwoKSB7fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2lzX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX2lzX3N1cHBvcnRlZC5jYwppbmRleCA4ZDk5OGE3Li4xNmY5ZmQzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19pc19zdXBwb3J0ZWQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjCkBAIC0xNCwxMCArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NwZWVjaF9zeW50aGVzaXMuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JTcGVlY2hTeW50aGVzaXNJc1N1cHBvcnRlZCgpIHsKICAgcmV0dXJuIGZhbHNlOwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX3NwZWFrLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfc3BlYWsuY2MKaW5kZXggMWI1ZmRkZS4uYzA0MzdiZCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfc3BlYWsuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfc3BlYWsuY2MKQEAgLTE0LDggKzE0LDQgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9zcGVlY2hfc3ludGhlc2lzLmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1NZTlRIRVNJUykKLQogdm9pZCBTYlNwZWVjaFN5bnRoZXNpc1NwZWFrKGNvbnN0IGNoYXIqIHRleHQpIHt9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYwppbmRleCA5MjY2ODQ0Li44YzQzMWExIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYwpAQCAtMTgsMTMgKzE4LDkgQEAKIG5hbWVzcGFjZSBzaGFyZWQgewogbmFtZXNwYWNlIHB0aHJlYWQgewogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHRocmVhZCBwcmlvcml0eSBzdXBwb3J0CiB2b2lkIFRocmVhZFNldFByaW9yaXR5KFNiVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpIHt9CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogfSAgLy8gbmFtZXNwYWNlIHB0aHJlYWQKIH0gIC8vIG5hbWVzcGFjZSBzaGFyZWQKIH0gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfdHlwZXNfcHVibGljLmggYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3R5cGVzX3B1YmxpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzk4ZjRkLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIEluY2x1ZGVzIHRocmVhZGluZyBwcmltaXRpdmUgdHlwZXMgYW5kIGluaXRpYWxpemVycy4KLQotI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1NUVUJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1NUVUJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwotCi0vLyAtLS0gU2JDb25kaXRpb25WYXJpYWJsZSAtLS0KLQotLy8gVHJhbnNwYXJlbnQgQ29uZGl0aW9uIFZhcmlhYmxlIGhhbmRsZS4KLXR5cGVkZWYgdm9pZCogU2JDb25kaXRpb25WYXJpYWJsZTsKLQotLy8gQ29uZGl0aW9uIFZhcmlhYmxlIHN0YXRpYyBpbml0aWFsaXplci4KLSNkZWZpbmUgU0JfQ09ORElUSU9OX1ZBUklBQkxFX0lOSVRJQUxJWkVSIE5VTEwKLQotLy8gLS0tIFNiTXV0ZXggLS0tCi0KLS8vIFRyYW5zcGFyZW50IE11dGV4IGhhbmRsZS4KLXR5cGVkZWYgdm9pZCogU2JNdXRleDsKLQotLy8gTXV0ZXggc3RhdGljIGluaXRpYWxpemVyLgotI2RlZmluZSBTQl9NVVRFWF9JTklUSUFMSVpFUiBOVUxMCi0KLS8vIC0tLSBTYk9uY2UgLS0tCi0KLS8vIFRyYW5zcGFyZW50IE9uY2UgY29udHJvbCBoYW5kbGUuCi10eXBlZGVmIHZvaWQqIFNiT25jZUNvbnRyb2w7Ci0KLS8vIE9uY2Ugc3RhdGljIGluaXRpYWxpemVyLgotI2RlZmluZSBTQl9PTkNFX0lOSVRJQUxJWkVSIE5VTEwKLQotLy8gLS0tIFNiVGhyZWFkIC0tLQotCi0vLyBUcmFuc3BhcmVudCBwdGhyZWFkIGhhbmRsZS4KLXR5cGVkZWYgdm9pZCogU2JUaHJlYWQ7Ci0KLS8vIFdlbGwtZGVmaW5lZCBjb25zdGFudCB2YWx1ZSB0byBtZWFuICJubyB0aHJlYWQgaGFuZGxlLiIKLSNkZWZpbmUga1NiVGhyZWFkSW52YWxpZCAoU2JUaHJlYWQpLTEKLQotI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1NUVUJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfaXNfdGltZV90aHJlYWRfbm93X3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aW1lX2lzX3RpbWVfdGhyZWFkX25vd19zdXBwb3J0ZWQuY2MKaW5kZXggNjNlNjhmNy4uMjM0MmExNSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfaXNfdGltZV90aHJlYWRfbm93X3N1cHBvcnRlZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGltZV9pc190aW1lX3RocmVhZF9ub3dfc3VwcG9ydGVkLmNjCkBAIC0xNCwxMCArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3RpbWUuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JUaW1lSXNUaW1lVGhyZWFkTm93U3VwcG9ydGVkKCkgewogICByZXR1cm4gZmFsc2U7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3VpX25hdl9nZXRfaW50ZXJmYWNlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3VpX25hdl9nZXRfaW50ZXJmYWNlLmNjCmluZGV4IGFmZjk1ODIuLjAyMThiZTIgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi91aV9uYXZfZ2V0X2ludGVyZmFjZS5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdWlfbmF2X2dldF9pbnRlcmZhY2UuY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvdWlfbmF2aWdhdGlvbi5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogYm9vbCBTYlVpTmF2R2V0SW50ZXJmYWNlKFNiVWlOYXZJbnRlcmZhY2UqIG91dF9pbnRlcmZhY2UpIHsKICAgcmV0dXJuIGZhbHNlOwogfQotCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19ibHVyX29uX3NjcmVlbl9rZXlib2FyZC5jYwppbmRleCAzNjEyMzU0Li5kNmVjMzRjIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2JsdXJfb25fc2NyZWVuX2tleWJvYXJkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfYmx1cl9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKQEAgLTE0LDggKzE0LDQgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIHZvaWQgU2JXaW5kb3dCbHVyT25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csIGludCB0aWNrZXQpIHt9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19mb2N1c19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2ZvY3VzX29uX3NjcmVlbl9rZXlib2FyZC5jYwppbmRleCA4MWM4OWZhLi45NTc2OGU1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2ZvY3VzX29uX3NjcmVlbl9rZXlib2FyZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2ZvY3VzX29uX3NjcmVlbl9rZXlib2FyZC5jYwpAQCAtMTQsOCArMTQsNCBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogdm9pZCBTYldpbmRvd0ZvY3VzT25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csIGludCB0aWNrZXQpIHt9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfb25fc2NyZWVuX2tleWJvYXJkX2JvdW5kaW5nX3JlY3QuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYwppbmRleCBiNjAwMWE1Li5mNzljZGMxIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2dldF9vbl9zY3JlZW5fa2V5Ym9hcmRfYm91bmRpbmdfcmVjdC5jYwpAQCAtMTQsMTEgKzE0LDcgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JXaW5kb3dHZXRPblNjcmVlbktleWJvYXJkQm91bmRpbmdSZWN0KFNiV2luZG93IHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiV2luZG93UmVjdCogYm91bmRpbmdfcmVjdCkgewogICByZXR1cm4gZmFsc2U7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19oaWRlX29uX3NjcmVlbl9rZXlib2FyZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfaGlkZV9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKaW5kZXggOGY4NDY4Yy4uNDAzZmM3OCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19oaWRlX29uX3NjcmVlbl9rZXlib2FyZC5jYworKysgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2hpZGVfb25fc2NyZWVuX2tleWJvYXJkLmNjCkBAIC0xNCw4ICsxNCw0IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiB2b2lkIFNiV2luZG93SGlkZU9uU2NyZWVuS2V5Ym9hcmQoU2JXaW5kb3cgd2luZG93LCBpbnQgdGlja2V0KSB7fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfaXNfb25fc2NyZWVuX2tleWJvYXJkX3Nob3duLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKaW5kZXggN2Q3ZDczNS4uYzk5MDBhZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19pc19vbl9zY3JlZW5fa2V5Ym9hcmRfc2hvd24uY2MKQEAgLTE0LDEwICsxNCw2IEBACiAKICNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiBib29sIFNiV2luZG93SXNPblNjcmVlbktleWJvYXJkU2hvd24oU2JXaW5kb3cgd2luZG93KSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MKaW5kZXggYWI2M2FmOC4uNTM4ODE4MCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfaXNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX2lzX3N1cHBvcnRlZC5jYwpAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIGJvb2wgU2JXaW5kb3dPblNjcmVlbktleWJvYXJkSXNTdXBwb3J0ZWQoKSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9uc19zdXBwb3J0ZWQuY2MKaW5kZXggY2Q1ZDQ5MS4uZTE4YTdjOCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnNfc3VwcG9ydGVkLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zX3N1cHBvcnRlZC5jYwpAQCAtMTQsOSArMTQsNiBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIGJvb2wgU2JXaW5kb3dPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnNTdXBwb3J0ZWQoU2JXaW5kb3cgd2luZG93KSB7CiAgIHJldHVybiBmYWxzZTsKIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2V0X29uX3NjcmVlbl9rZXlib2FyZF9rZWVwX2ZvY3VzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19zZXRfb25fc2NyZWVuX2tleWJvYXJkX2tlZXBfZm9jdXMuY2MKaW5kZXggMTNhZmE4OS4uNzhiZTk2ZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19zZXRfb25fc2NyZWVuX2tleWJvYXJkX2tlZXBfZm9jdXMuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19zZXRfb25fc2NyZWVuX2tleWJvYXJkX2tlZXBfZm9jdXMuY2MKQEAgLTE0LDggKzE0LDQgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIHZvaWQgU2JXaW5kb3dTZXRPblNjcmVlbktleWJvYXJkS2VlcEZvY3VzKFNiV2luZG93IHdpbmRvdywgYm9vbCBrZWVwX2ZvY3VzKSB7fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2hvd19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjCmluZGV4IDc3NWFhNzYuLjU3OTk3MmYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2hvd19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19zaG93X29uX3NjcmVlbl9rZXlib2FyZC5jYwpAQCAtMTQsMTAgKzE0LDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KIHZvaWQgU2JXaW5kb3dTaG93T25TY3JlZW5LZXlib2FyZChTYldpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXRfdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGlja2V0KSB7fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYyBiL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYwppbmRleCA4ODk0ZTY4Li45NmYzZWEyIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3VwZGF0ZV9vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnMuY2MKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd191cGRhdGVfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zLmNjCkBAIC0xNCwxMCArMTQsNyBAQAogCiAjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKIHZvaWQgU2JXaW5kb3dVcGRhdGVPblNjcmVlbktleWJvYXJkU3VnZ2VzdGlvbnMoU2JXaW5kb3cgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWdnZXN0aW9uc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3N1Z2dlc3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGlja2V0KSB7fQotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoT05fU0NSRUVOX0tFWUJPQVJEKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vQlVJTEQuZ24gYi9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFjZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vQlVJTEQuZ24KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0YXRpY19saWJyYXJ5KCJjb2JhbHRfdGVzdF93ZWJhcGlfZXh0ZW5zaW9uIikgeworICAjIExpc3Qgb2YgYWxsIHNvdXJjZSBmaWxlcyBhbmQgaGVhZGVyIGZpbGVzIG5lZWRlZCB0byBzdXBwb3J0IHRoZSBJREwKKyAgIyBkZWZpbml0aW9ucy4KKyAgc291cmNlcyA9IFsKKyAgICAibXlfbmV3X2ludGVyZmFjZS5jYyIsCisgICAgIm15X25ld19pbnRlcmZhY2UuaCIsCisgICAgIndlYmFwaV9leHRlbnNpb24uY2MiLAorICBdCisKKyAgZGVwcyA9IFsKKyAgICAiLy9iYXNlIiwKKyAgICAiLy9jb2JhbHQvZG9tIiwKKyAgICAiLy9jb2JhbHQvc2NyaXB0IiwKKyAgXQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vdGVzdF93ZWJhcGlfZXh0ZW5zaW9uLmd5cGkgYi9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi90ZXN0X3dlYmFwaV9leHRlbnNpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcxNzBjYi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi90ZXN0X3dlYmFwaV9leHRlbnNpb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgZmlsZSBjYW4gYmUgaW5jbHVkZWQgZnJvbSBhIHBsYXRmb3JtJ3MgZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaSBmaWxlIHRvCi0jIHNldHVwIHRoZSB0ZXN0IGN1c3RvbSB3ZWJhcGlfZXh0ZW5zaW9uIGRlZmluZWQgaW4gdGhpcyBkaXJlY3RvcnkgdG8gYmUKLSMgaW5qZWN0ZWQgaW50byB0aGF0IHBsYXRmb3JtLgotewotICAndmFyaWFibGVzJzogewotICAgICdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9zb3VyY2VfaWRsX2ZpbGVzJzogWwotICAgICAgJ215X25ld19pbnRlcmZhY2UuaWRsJwotICAgIF0sCi0gICAgJ2NvYmFsdF93ZWJhcGlfZXh0ZW5zaW9uX2dlbmVyYXRlZF9oZWFkZXJfaWRsX2ZpbGVzJzogWwotICAgICAgJ215X25ld19lbnVtLmlkbCcKLSAgICBdLAotICAgICdjb2JhbHRfd2ViYXBpX2V4dGVuc2lvbl9neXBfdGFyZ2V0JzoKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi93ZWJhcGlfZXh0ZW5zaW9uLmd5cDpjb2JhbHRfdGVzdF93ZWJhcGlfZXh0ZW5zaW9uJywKLSAgfSwKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi93ZWJhcGlfZXh0ZW5zaW9uLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vd2ViYXBpX2V4dGVuc2lvbi5jYwppbmRleCBiMDE1MWQ1Li4yMzc5MWRkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi93ZWJhcGlfZXh0ZW5zaW9uLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvdGVzdF93ZWJhcGlfZXh0ZW5zaW9uL3dlYmFwaV9leHRlbnNpb24uY2MKQEAgLTEyLDggKzEyLDYgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi0jaW5jbHVkZSAiY29iYWx0L2Jyb3dzZXIvd2ViYXBpX2V4dGVuc2lvbi5oIgotCiAjaW5jbHVkZSAiYmFzZS9jb21waWxlcl9zcGVjaWZpYy5oIgogI2luY2x1ZGUgImNvYmFsdC9zY3JpcHQvZ2xvYmFsX2Vudmlyb25tZW50LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vbXlfbmV3X2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC90ZXN0X3dlYmFwaV9leHRlbnNpb24vd2ViYXBpX2V4dGVuc2lvbi5neXAgYi9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi93ZWJhcGlfZXh0ZW5zaW9uLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxZmU2Ni4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc2hhcmVkL3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbi93ZWJhcGlfZXh0ZW5zaW9uLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29iYWx0X3Rlc3Rfd2ViYXBpX2V4dGVuc2lvbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0KLSAgICAgICMgTGlzdCBvZiBhbGwgc291cmNlIGZpbGVzIGFuZCBoZWFkZXIgZmlsZXMgbmVlZGVkIHRvIHN1cHBvcnQgdGhlIElETAotICAgICAgIyBkZWZpbml0aW9ucy4KLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbXlfbmV3X2ludGVyZmFjZS5oJywKLSAgICAgICAgJ215X25ld19pbnRlcmZhY2UuY2MnLAotICAgICAgICAnd2ViYXBpX2V4dGVuc2lvbi5jYycsCi0gICAgICBdLAotCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvY29iYWx0L2RvbS9kb20uZ3lwOmRvbScsCi0gICAgICAgICc8KERFUFRIKS9jb2JhbHQvc2NyaXB0L3NjcmlwdC5neXA6c2NyaXB0JywKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL2RybV9zeXN0ZW1fd2lkZXZpbmUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL2RybV9zeXN0ZW1fd2lkZXZpbmUuY2MKaW5kZXggMDNiZDQ3Ny4uNTkyOTJlZiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS9kcm1fc3lzdGVtX3dpZGV2aW5lLmNjCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2lkZXZpbmUvZHJtX3N5c3RlbV93aWRldmluZS5jYwpAQCAtNDM1LDEyICs0MzUsOSBAQAogICBpbnB1dC5pdiA9IGluaXRpYWxpemF0aW9uX3ZlY3Rvci5kYXRhKCk7CiAgIGlucHV0Lml2X2xlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihpbml0aWFsaXphdGlvbl92ZWN0b3Iuc2l6ZSgpKTsKICAgaW5wdXQuaXNfdmlkZW8gPSAoYnVmZmVyLT5zYW1wbGVfdHlwZSgpID09IGtTYk1lZGlhVHlwZVZpZGVvKTsKLQotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlucHV0LnBhdHRlcm4uZW5jcnlwdGVkX2Jsb2NrcyA9CiAgICAgICBkcm1faW5mby0+ZW5jcnlwdGlvbl9wYXR0ZXJuLmNyeXB0X2J5dGVfYmxvY2s7CiAgIGlucHV0LnBhdHRlcm4uY2xlYXJfYmxvY2tzID0gZHJtX2luZm8tPmVuY3J5cHRpb25fcGF0dGVybi5za2lwX2J5dGVfYmxvY2s7Ci0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiAKICAgc3RkOjp2ZWN0b3I8dWludDhfdD4gb3V0cHV0X2RhdGEoYnVmZmVyLT5zaXplKCkpOwogICB3djNjZG06Ok91dHB1dEJ1ZmZlciBvdXRwdXQ7CkBAIC00ODIsMTMgKzQ3OSwxMSBAQAogICAgIGlmIChzdWJzYW1wbGUuZW5jcnlwdGVkX2J5dGVfY291bnQpIHsKICAgICAgIGlucHV0Lmxhc3Rfc3Vic2FtcGxlID0gaSArIDEgPT0gYnVmZmVyLT5kcm1faW5mbygpLT5zdWJzYW1wbGVfY291bnQ7CiAgICAgICBpbnB1dC5lbmNyeXB0aW9uX3NjaGVtZSA9IHd2M2NkbTo6RW5jcnlwdGlvblNjaGVtZTo6a0Flc0N0cjsKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgaWYgKGRybV9pbmZvLT5lbmNyeXB0aW9uX3NjaGVtZSA9PSBrU2JEcm1FbmNyeXB0aW9uU2NoZW1lQWVzQ2JjKSB7CiAgICAgICAgIGlucHV0LmVuY3J5cHRpb25fc2NoZW1lID0gd3YzY2RtOjpFbmNyeXB0aW9uU2NoZW1lOjprQWVzQ2JjOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgU0JfRENIRUNLKGRybV9pbmZvLT5lbmNyeXB0aW9uX3NjaGVtZSA9PSBrU2JEcm1FbmNyeXB0aW9uU2NoZW1lQWVzQ3RyKTsKICAgICAgIH0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICAgIGlucHV0LmRhdGFfbGVuZ3RoID0gc3Vic2FtcGxlLmVuY3J5cHRlZF9ieXRlX2NvdW50OwogCiAgICAgICB3djNjZG06OlN0YXR1cyBzdGF0dXMgPSBjZG1fLT5kZWNyeXB0KGlucHV0LCBvdXRwdXQpOwpAQCAtNTkxLDggKzU4Niw3IEBACiAgICAgU0JfRExPRyhFUlJPUikgPDwgIkdlbmVyYXRlS2V5UmVxdWVzdCBzdGF0dXMgIiA8PCBzdGF0dXM7CiAgICAgY29uc3QgY2hhciogc2Vzc2lvbl9pZCA9CiAgICAgICAgIFNiRHJtVGlja2V0SXNWYWxpZCh0aWNrZXQpID8gTlVMTCA6IGtGaXJzdFNiRHJtU2Vzc2lvbklkOwotICAgIGludCBzZXNzaW9uX2lkX3NpemUgPQotICAgICAgICBzZXNzaW9uX2lkID8gc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4oc2Vzc2lvbl9pZCkpIDogMDsKKyAgICBpbnQgc2Vzc2lvbl9pZF9zaXplID0gc2Vzc2lvbl9pZCA/IHN0YXRpY19jYXN0PGludD4oc3RybGVuKHNlc3Npb25faWQpKSA6IDA7CiAgICAgc2Vzc2lvbl91cGRhdGVfcmVxdWVzdF9jYWxsYmFja18oCiAgICAgICAgIHRoaXMsIGNvbnRleHRfLCB0aWNrZXQsIENkbVN0YXR1c1RvU2JEcm1TdGF0dXMoc3RhdHVzKSwKICAgICAgICAga1NiRHJtU2Vzc2lvblJlcXVlc3RUeXBlTGljZW5zZVJlcXVlc3QsICIiLCBzZXNzaW9uX2lkLCBzZXNzaW9uX2lkX3NpemUsCkBAIC02NTIsNyArNjQ2LDcgQEAKICAgICBTYkRybUtleUlkIHNiX2tleV9pZDsKICAgICBTQl9EQ0hFQ0soa2V5X3N0YXR1cy5maXJzdC5zaXplKCkgPD0gc2l6ZW9mKHNiX2tleV9pZC5pZGVudGlmaWVyKSk7CiAgICAgbWVtY3B5KHNiX2tleV9pZC5pZGVudGlmaWVyLCBrZXlfc3RhdHVzLmZpcnN0LmNfc3RyKCksCi0gICAgICAgICAgICAgICAgIGtleV9zdGF0dXMuZmlyc3Quc2l6ZSgpKTsKKyAgICAgICAgICAga2V5X3N0YXR1cy5maXJzdC5zaXplKCkpOwogICAgIHNiX2tleV9pZC5pZGVudGlmaWVyX3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGtleV9zdGF0dXMuZmlyc3Quc2l6ZSgpKTsKICAgICBzYl9rZXlfaWRzLnB1c2hfYmFjayhzYl9rZXlfaWQpOwogICAgIHNiX2tleV9zdGF0dXNlcy5wdXNoX2JhY2soQ2RtS2V5U3RhdHVzVG9TYkRybUtleVN0YXR1cyhrZXlfc3RhdHVzLnNlY29uZCkpOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZTMuZ3lwIGIvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZTMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjg1ZTg1Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC9zaGFyZWQvd2lkZXZpbmUvd2lkZXZpbmUzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbCi0gICAgIyBzZXRzIGRlZmF1bHRzIGZvciB2YXJpYWJsZXMgZXhwZWN0ZWQgYnkgY2RtLmd5cC4KLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvY2VfY2RtL3BsYXRmb3Jtcy94ODYtNjQvc2V0dGluZ3MuZ3lwaScsCi0gICAgIyBjZG0uZ3lwIGRlZmluZXMgd2lkZXZpbmVfY2VfY2RtX3N0YXRpYy4KLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvY2VfY2RtL2NkbS9jZG0uZ3lwJywKLSAgXSwKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb2VtY3J5cHRvX3RhcmdldCc6ICdvZW1jcnlwdG8nLAotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLQotICAgICMgVXNlIHRoZSBwcm90b2Mgc3VwcGxpZWQgaW4gc3JjL3Rvb2xzIGFzIHByZWNvbXBpbGVkIGV4ZWN1dGFibGUuCi0gICAgJ3Byb3RvY19kaXInOiAnPChERVBUSCkvdG9vbHMnLAotICAgICdwcm90b2NfYmluJzogJzwoREVQVEgpL3Rvb2xzLzwoRVhFQ1VUQUJMRV9QUkVGSVgpcHJvdG9jPChFWEVDVVRBQkxFX1NVRkZJWCknLAotICAgICdwcm90b2MnOiAnPChERVBUSCkvdG9vbHMvcHJvdG9jLmV4ZScsCi0KLSAgICAjIFVzZSB0aGUgY2hyb21pdW0gdGFyZ2V0IGZvciBwcm90b2J1Zi4KLSAgICAncHJvdG9idWZfbGliX3R5cGUnOiAndGFyZ2V0JywKLSAgICAncHJvdG9idWZfbGliJzogJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cDpwcm90b2J1Zl9saXRlJywKLQotICAgICdwbGF0Zm9ybV9vZW1fc291cmNlcyc6IFsKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQva2V5Ym94ZXMvPChzYl93aWRldmluZV9wbGF0Zm9ybSkvPChzYl93aWRldmluZV9wbGF0Zm9ybSkuaCcsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2tleWJveGVzLzwoc2Jfd2lkZXZpbmVfcGxhdGZvcm0pLzwoc2Jfd2lkZXZpbmVfcGxhdGZvcm0pX2NsaWVudC5jJywKLSAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3dpZGV2aW5lL2ludGVybmFsL3d2X2tleWJveC5jYycsCi0gICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC93aWRldmluZS93aWRldmluZV9rZXlib3hfaGFzaC5jYycsCi0gICAgXSwKLSAgIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICMgR2V0IHByb3RvYnVmIGhlYWRlcnMgZnJvbSB0aGUgY2hyb21pdW0gdHJlZS4KLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9zcmMnLAotICAgIF0sCi0gICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cDpjcnlwdG8nLAotICAgIF0sCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdvZW1jcnlwdG8nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdDT0JBTFRfV0lERVZJTkVfS0VZQk9YX1RSQU5TRk9STV9GVU5DVElPTj08KHNiX3dpZGV2aW5lX3BsYXRmb3JtKV9jbGllbnQnLAotICAgICAgICAnQ09CQUxUX1dJREVWSU5FX0tFWUJPWF9UUkFOU0ZPUk1fSU5DTFVERT0ic3RhcmJvYXJkL2tleWJveGVzLzwoc2Jfd2lkZXZpbmVfcGxhdGZvcm0pLzwoc2Jfd2lkZXZpbmVfcGxhdGZvcm0pLmgiJywKLSAgICAgICAgJ0NPQkFMVF9XSURFVklORV9LRVlCT1hfSU5DTFVERT0iPChERVBUSCkvc3RhcmJvYXJkL2tleWJveGVzLzwoc2Jfd2lkZXZpbmVfcGxhdGZvcm0pX3dpZGV2aW5lX2tleWJveC5oIicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChwbGF0Zm9ybV9vZW1fc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdvZWNfbW9ja19kaXInOiAnPChERVBUSCkvdGhpcmRfcGFydHkvY2VfY2RtL29lbWNyeXB0by9tb2NrJywKLSAgICAgIH0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvY2VfY2RtL29lbWNyeXB0by9tb2NrL29lY19tb2NrLmd5cDpvZWNfbW9jaycsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2NlX2NkbS9jb3JlL2luY2x1ZGUnLAotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9jZV9jZG0vb2VtY3J5cHRvL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkKY29weSB0byBzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4ZWEyNAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYWRhcHRlcl91dGlscy5jYwpAQCAtMCwwICsxLDg3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSB7Citjb25zdCBVTE9ORyBrRGVmYXVsdEFkYXB0ZXJJbmZvQnVmZmVyU2l6ZUluQnl0ZXMgPSAxNiAqIDEwMjQ7Cit9ICAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2Jvb2wgR2V0QWRhcHRlcnMoY29uc3QgU2JTb2NrZXRBZGRyZXNzVHlwZSBhZGRyZXNzX3R5cGUsCisgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+KiBhZGFwdGVyX2luZm8pIHsKKyAgU0JfRENIRUNLKGFkYXB0ZXJfaW5mbyk7CisKKyAgVUxPTkcgZmFtaWx5ID0gMDsKKyAgaW50IGFkZHJlc3NfbGVuZ3RoX2J5dGVzID0gMDsKKworICBzd2l0Y2ggKGFkZHJlc3NfdHlwZSkgeworICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OgorICAgICAgZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGFkZHJlc3NfbGVuZ3RoX2J5dGVzID0ga0FkZHJlc3NMZW5ndGhJcHY0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjY6CisgICAgICBmYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgIGFkZHJlc3NfbGVuZ3RoX2J5dGVzID0ga0FkZHJlc3NMZW5ndGhJcHY2OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBhZGRyZXNzIHR5cGU6ICIgPDwgYWRkcmVzc190eXBlOworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgVUxPTkcgYWRhcHRlcl9hZGRyZXNzZXNfbnVtYmVyX2J5dGVzID0ga0RlZmF1bHRBZGFwdGVySW5mb0J1ZmZlclNpemVJbkJ5dGVzOworCisgIGZvciAoaW50IHRyeV9jb3VudCA9IDA7IHRyeV9jb3VudCAhPSAyOyArK3RyeV9jb3VudCkgeworICAgIC8vIFVzaW5nIGF1dG8gZm9yIHJldHVybiB2YWx1ZSBoZXJlLCBzaW5jZSBkaWZmZXJlbnQgdmVyc2lvbnMgb2Ygd2luZG93cyB1c2UKKyAgICAvLyBzbGlnaHRseSBkaWZmZXJlbnQgZGF0YXR5cGVzLiAgVGhlc2UgZGlmZmVyZW5jZXMgZG8gbm90IG1hdHRlciB0byB1cywgYnV0CisgICAgLy8gdGhlIGNvbXBpbGVyIG1pZ2h0IHdhcm4gb24gdGhlbS4KKyAgICBhZGFwdGVyX2luZm8tPnJlc2V0KG5ldyBjaGFyW2FkYXB0ZXJfYWRkcmVzc2VzX251bWJlcl9ieXRlc10pOworICAgIFBJUF9BREFQVEVSX0FERFJFU1NFUyBhZGFwdGVyX2FkZHJlc3NlcyA9CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UElQX0FEQVBURVJfQUREUkVTU0VTPihhZGFwdGVyX2luZm8tPmdldCgpKTsKKworICAgIC8vIE5vdGU6IElmIHxHZXRBZGFwdGVyQWRkcmVzc2VzfCBkZWVtcyB0aGF0IGJ1ZmZlciBzdXBwbGllZCBpcyBub3QgZW5vdWdoLAorICAgIC8vIGl0IHdpbGwgcmV0dXJuIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgYnl0ZXMgaW4KKyAgICAvLyB8YWRhcHRlcl9hZGRyZXNzZXNfbnVtYmVyX2J5dGVzfC4KKyAgICBhdXRvIHJldHZhbCA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKAorICAgICAgICBmYW1pbHksIEdBQV9GTEFHX1NLSVBfRlJJRU5ETFlfTkFNRSB8IEdBQV9GTEFHX1NLSVBfRE5TX1NFUlZFUiwgbnVsbHB0ciwKKyAgICAgICAgYWRhcHRlcl9hZGRyZXNzZXMsICZhZGFwdGVyX2FkZHJlc3Nlc19udW1iZXJfYnl0ZXMpOworCisgICAgaWYgKHJldHZhbCA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHJldHZhbCAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpIHsKKyAgICAgIC8vIE9ubHkgcmV0cnkgd2l0aCBtb3JlIG1lbW9yeSBpZiB0aGUgZXJyb3Igc2F5cyBzby4KKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBTQl9MT0coRVJST1IpIDw8ICJHZXRBZGFwdGVyQWRkcmVzc2VzKCkgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAiIDw8IHJldHZhbDsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hZGFwdGVyX3V0aWxzLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFmYjg2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hZGFwdGVyX3V0aWxzLmgKQEAgLTAsMCArMSw1MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQURBUFRFUl9VVElMU19IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FEQVBURVJfVVRJTFNfSF8KKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlIDxpZmRlZi5oPgorI2luY2x1ZGUgPGlwaGxwYXBpLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworLy8gUmV0dXJucyBhbGwgb2YgdGhlIHJlc3VsdHMgZm9yIHdpMzIncworYm9vbCBHZXRBZGFwdGVycyhjb25zdCBTYlNvY2tldEFkZHJlc3NUeXBlIGFkZHJlc3NfdHlwZSwKKyAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4qIGFkYXB0ZXJfaW5mbyk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhIElQX0FEQVBURVJfQUREUkVTU0VTIElmVHlwZSBpcyBhCisvLyBub24tbG9vcGJhY2sgRXRoZXJuZXQgaW50ZXJmYWNlLgoraW5saW5lIGJvb2wgSXNJZlR5cGVFdGhlcm5ldChEV09SRCBpZnR5cGUpIHsKKyAgc3dpdGNoIChpZnR5cGUpIHsKKyAgICBjYXNlIElGX1RZUEVfRVRIRVJORVRfQ1NNQUNEOgorICAgIGNhc2UgSUZfVFlQRV9JRUVFODAyMTE6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIElGX1RZUEVfU09GVFdBUkVfTE9PUEJBQ0s6CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FEQVBURVJfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTA3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyLmNjCkBAIC0wLDAgKzEsMzQxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+ICAgLy8gTk9MSU5UKGJ1aWxkL2luY2x1ZGVfb3JkZXIpCisjaW5jbHVkZSA8d2luZG93c3guaD4gIC8vIE5PTElOVChidWlsZC9pbmNsdWRlX29yZGVyKQorCisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9pbnB1dC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9rZXkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlhbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbWluaWR1bXAuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9wcml2YXRlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpBcHBsaWNhdGlvbjsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkNvbW1hbmRMaW5lOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpBcHBsaWNhdGlvbldpbjMyOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDU3RyaW5nVG9XU3RyaW5nOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpEZWJ1Z0xvZ1dpbkVycm9yOworCituYW1lc3BhY2UgeworCitzdGF0aWMgY29uc3QgaW50IGtTYk1vdXNlRGV2aWNlSWQgPSAxOworCitzdGF0aWMgY29uc3QgVENIQVIga1dpbmRvd0NsYXNzTmFtZVtdID0gTCJ3aW5kb3dfY2xhc3NfbmFtZSI7Citjb25zdCBjaGFyIGtNaW5pRHVtcEZpbGVQYXRoW10gPSAibWluaV9kdW1wX2ZpbGVfcGF0aCI7CisKK0xSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbXNnLCBXUEFSQU0gd19wYXJhbSwgTFBBUkFNIGxfcGFyYW0pIHsKKyAgcmV0dXJuIEFwcGxpY2F0aW9uV2luMzI6OkdldCgpLT5XaW5kb3dQcm9jZXNzKGhXbmQsIG1zZywgd19wYXJhbSwgbF9wYXJhbSk7Cit9CisKK2Jvb2wgUmVnaXN0ZXJXaW5kb3dDbGFzcygpIHsKKyAgV05EQ0xBU1NFWCB3aW5kb3dfY2xhc3M7CisgIHdpbmRvd19jbGFzcy5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2ZmNzI5MTc2KHY9dnMuODUpLmFzcHgKKyAgd2luZG93X2NsYXNzLnN0eWxlID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVcgfCBDU19PV05EQzsKKyAgd2luZG93X2NsYXNzLmxwZm5XbmRQcm9jID0gV25kUHJvYzsKKyAgd2luZG93X2NsYXNzLmNiQ2xzRXh0cmEgPSAwOworICB3aW5kb3dfY2xhc3MuY2JXbmRFeHRyYSA9IDA7CisgIHdpbmRvd19jbGFzcy5oSW5zdGFuY2UgPSBHZXRNb2R1bGVIYW5kbGUobnVsbHB0cik7CisgIC8vIFRPRE86IEFkZCBZb3VUdWJlIGljb24uCisgIHdpbmRvd19jbGFzcy5oSWNvbiA9IExvYWRJY29uKHdpbmRvd19jbGFzcy5oSW5zdGFuY2UsIElESV9BUFBMSUNBVElPTik7CisgIHdpbmRvd19jbGFzcy5oSWNvblNtID0gTG9hZEljb24od2luZG93X2NsYXNzLmhJbnN0YW5jZSwgSURJX0FQUExJQ0FUSU9OKTsKKyAgd2luZG93X2NsYXNzLmhDdXJzb3IgPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7CisgIHdpbmRvd19jbGFzcy5oYnJCYWNrZ3JvdW5kID0gKEhCUlVTSCkoQ09MT1JfV0lORE9XICsgMSk7CisgIHdpbmRvd19jbGFzcy5scHN6TWVudU5hbWUgPSBOVUxMOworICB3aW5kb3dfY2xhc3MubHBzekNsYXNzTmFtZSA9IGtXaW5kb3dDbGFzc05hbWU7CisKKyAgaWYgKCE6OlJlZ2lzdGVyQ2xhc3NFeCgmd2luZG93X2NsYXNzKSkgeworICAgIFNCX0xPRyhFUlJPUikgPDwgIkZhaWxlZCB0byByZWdpc3RlciB3aW5kb3ciOworICAgIERlYnVnTG9nV2luRXJyb3IoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIENyZWF0ZSBhIFdpbmRvd3Mgd2luZG93LgorSFdORCBDcmVhdGVXaW5kb3dJbnN0YW5jZShjb25zdCBTYldpbmRvd09wdGlvbnMmIG9wdGlvbnMpIHsKKyAgRFdPUkQgZHdTdHlsZSA9IFdTX09WRVJMQVBQRUQgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX0NMSVBTSUJMSU5HUyB8CisgICAgICAgICAgICAgICAgICBXU19DTElQQ0hJTERSRU4gfCBXU19NSU5JTUlaRUJPWCB8IFdTX01BWElNSVpFQk9YOworICBpZiAob3B0aW9ucy53aW5kb3dlZCkgeworICAgIGR3U3R5bGUgfD0gV1NfTUFYSU1JWkU7CisgIH0KKyAgY29uc3Qgc3RkOjp3c3RyaW5nIHdpZGVfd2luZG93X25hbWUgPSBDU3RyaW5nVG9XU3RyaW5nKG9wdGlvbnMubmFtZSk7CisgIGNvbnN0IEhXTkQgd2luZG93ID0gQ3JlYXRlV2luZG93KAorICAgICAga1dpbmRvd0NsYXNzTmFtZSwgd2lkZV93aW5kb3dfbmFtZS5jX3N0cigpLCBkd1N0eWxlLCBDV19VU0VERUZBVUxULAorICAgICAgQ1dfVVNFREVGQVVMVCwgb3B0aW9ucy5zaXplLndpZHRoLCBvcHRpb25zLnNpemUuaGVpZ2h0LCBudWxscHRyLCBudWxscHRyLAorICAgICAgR2V0TW9kdWxlSGFuZGxlKG51bGxwdHIpLCBudWxscHRyKTsKKyAgU2V0Rm9yZWdyb3VuZFdpbmRvdyh3aW5kb3cpOworICBpZiAod2luZG93ID09IG51bGxwdHIpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdy4iOworICAgIERlYnVnTG9nV2luRXJyb3IoKTsKKyAgfQorCisgIHJldHVybiB3aW5kb3c7Cit9CisKK3ZvaWQgQXR0YWNoTWluaUR1bXBIYW5kbGVyKGNvbnN0IENvbW1hbmRMaW5lJiBjbWRfbGluZSkgeworICBzdGQ6OnN0cmluZyBmaWxlX3BhdGg7CisgIGlmIChjbWRfbGluZS5IYXNTd2l0Y2goa01pbmlEdW1wRmlsZVBhdGgpKSB7CisgICAgLy8gSWYgdGhlcmUgaXMgYSBtaW5pIGR1bXAgZmlsZSBwYXRoIHRoZW4gdXNlIHRoYXQuCisgICAgZmlsZV9wYXRoID0gY21kX2xpbmUuR2V0U3dpdGNoVmFsdWUoa01pbmlEdW1wRmlsZVBhdGgpOworICB9IGVsc2UgeworICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGZpbGUgcGF0aCBhbmQgYXBwZW5kICIuZG1wIiB0byBpdC4KKyAgICBjb25zdCBhdXRvJiBhcmdzID0gY21kX2xpbmUuYXJndigpOworICAgIGlmICghYXJncy5lbXB0eSgpKSB7CisgICAgICBmaWxlX3BhdGggPSBhcmdzWzBdOworICAgICAgZmlsZV9wYXRoLmFwcGVuZCgiLmRtcCIpOworICAgIH0KKyAgfQorCisgIGlmICghZmlsZV9wYXRoLmVtcHR5KCkpIHsKKyAgICBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkluaXRNaW5pRHVtcEhhbmRsZXIoZmlsZV9wYXRoLmNfc3RyKCkpOworICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworQXBwbGljYXRpb25XaW4zMjo6QXBwbGljYXRpb25XaW4zMigpCisgICAgOiBsb2NhbGl6ZWRfc3RyaW5nc18oU2JTeXN0ZW1HZXRMb2NhbGVJZCgpKSB7fQorQXBwbGljYXRpb25XaW4zMjo6fkFwcGxpY2F0aW9uV2luMzIoKSB7fQorCitTYldpbmRvdyBBcHBsaWNhdGlvbldpbjMyOjpDcmVhdGVXaW5kb3dGb3JXaW4zMigKKyAgICBjb25zdCBTYldpbmRvd09wdGlvbnMqIG9wdGlvbnMpIHsKKyAgaWYgKFNiV2luZG93SXNWYWxpZCh3aW5kb3dfLmdldCgpKSkgeworICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiUmV0dXJuaW5nIGV4aXN0aW5nIHdpbmRvdyBpbnN0YW5jZS4iOworICAgIHJldHVybiB3aW5kb3dfLmdldCgpOworICB9CisKKyAgUmVnaXN0ZXJXaW5kb3dDbGFzcygpOworICBIV05EIHdpbmRvdzsKKyAgaWYgKG9wdGlvbnMpIHsKKyAgICB3aW5kb3cgPSBDcmVhdGVXaW5kb3dJbnN0YW5jZSgqb3B0aW9ucyk7CisgICAgd2luZG93Xy5yZXNldChuZXcgU2JXaW5kb3dQcml2YXRlKG9wdGlvbnMsIHdpbmRvdykpOworICB9IGVsc2UgeworICAgIFNiV2luZG93T3B0aW9ucyBkZWZhdWx0X29wdGlvbnM7CisgICAgU2JXaW5kb3dTZXREZWZhdWx0T3B0aW9ucygmZGVmYXVsdF9vcHRpb25zKTsKKyAgICB3aW5kb3cgPSBDcmVhdGVXaW5kb3dJbnN0YW5jZShkZWZhdWx0X29wdGlvbnMpOworICAgIHdpbmRvd18ucmVzZXQobmV3IFNiV2luZG93UHJpdmF0ZSgmZGVmYXVsdF9vcHRpb25zLCB3aW5kb3cpKTsKKyAgfQorICBTaG93V2luZG93KHdpbmRvdywgU1dfU0hPVyk7CisgIFVwZGF0ZVdpbmRvdyh3aW5kb3cpOworICByZXR1cm4gd2luZG93Xy5nZXQoKTsKK30KKworYm9vbCBBcHBsaWNhdGlvbldpbjMyOjpEZXN0cm95V2luZG93KFNiV2luZG93IHdpbmRvdykgeworICBpZiAoIVNiV2luZG93SXNWYWxpZCh3aW5kb3cpIHx8IHdpbmRvdyAhPSB3aW5kb3dfLmdldCgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgSFdORCB3aW5kb3dfaGFuZGxlID0gd2luZG93Xy0+R2V0V2luZG93SGFuZGxlKCk7CisgIHdpbmRvd18ucmVzZXQoKTsKKworICBpZiAoITo6RGVzdHJveVdpbmRvdyh3aW5kb3dfaGFuZGxlKSkgeworICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiVW5hYmxlIHRvIGRlc3Ryb3kgd2luZG93IjsKKyAgfQorCisgIGlmICghOjpVbnJlZ2lzdGVyQ2xhc3Moa1dpbmRvd0NsYXNzTmFtZSwgTlVMTCkpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gdW5yZWdpc3RlciB3aW5kb3cgY2xhc3MuIjsKKyAgICBEZWJ1Z0xvZ1dpbkVycm9yKCk7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcHBsaWNhdGlvbldpbjMyOjpPblNiU3lzdGVtUmFpc2VQbGF0Zm9ybUVycm9yKAorICAgIFNiU3lzdGVtUGxhdGZvcm1FcnJvclR5cGUgdHlwZSwKKyAgICBTYlN5c3RlbVBsYXRmb3JtRXJyb3JDYWxsYmFjayBjYWxsYmFjaywKKyAgICB2b2lkKiB1c2VyX2RhdGEpIHsKKyAgLy8gVGhpcyB3YXMgbmV2ZXIgYmVpbmcgZGVsZXRlZCwgYnV0IGl0IHNob3VsZCBiZS4KKyAgaWYgKHR5cGUgIT0ga1NiU3lzdGVtUGxhdGZvcm1FcnJvclR5cGVDb25uZWN0aW9uRXJyb3IpCisgICAgU0JfTk9UUkVBQ0hFRCgpOworCisgIEFwcGxpY2F0aW9uV2luMzIqIGFwcCA9IEFwcGxpY2F0aW9uV2luMzI6OkdldCgpOworICBjb25zdCBib29sIGNyZWF0ZWRfZGlhbG9nID0gU2hvd09rQ2FuY2VsRGlhbG9nKAorICAgICAgYXBwLT5HZXRDb3JlV2luZG93KCktPkdldFdpbmRvd0hhbmRsZSgpLAorICAgICAgIiIsICAvLyBObyB0aXRsZS4KKyAgICAgIGFwcC0+R2V0TG9jYWxpemVkU3RyaW5nKCJVTkFCTEVfVE9fQ09OVEFDVF9ZT1VUVUJFXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnJ5LCBjb3VsZCBub3QgY29ubmVjdCB0byBZb3VUdWJlLiIpLAorICAgICAgYXBwLT5HZXRMb2NhbGl6ZWRTdHJpbmcoIlJFVFJZX0JVVFRPTiIsICJSZXRyeSIpLAorICAgICAgW3RoaXMsIGNhbGxiYWNrLCB1c2VyX2RhdGFdKCkgeworICAgICAgICBjYWxsYmFjayhrU2JTeXN0ZW1QbGF0Zm9ybUVycm9yUmVzcG9uc2VQb3NpdGl2ZSwgdXNlcl9kYXRhKTsKKyAgICAgIH0sCisgICAgICBhcHAtPkdldExvY2FsaXplZFN0cmluZygiRVhJVF9CVVRUT04iLCAiRXhpdCIpLAorICAgICAgW3RoaXMsIGNhbGxiYWNrLCB1c2VyX2RhdGFdKCkgeworICAgICAgICBjYWxsYmFjayhrU2JTeXN0ZW1QbGF0Zm9ybUVycm9yUmVzcG9uc2VOZWdhdGl2ZSwgdXNlcl9kYXRhKTsKKyAgICAgIH0pOworICBTQl9EQ0hFQ0soIWNyZWF0ZWRfZGlhbG9nKTsKKyAgaWYgKCFjcmVhdGVkX2RpYWxvZykgeworICAgIFNCX0xPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBjcmVhdGUgZGlhbG9nISI7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK0FwcGxpY2F0aW9uOjpFdmVudCogQXBwbGljYXRpb25XaW4zMjo6V2FpdEZvclN5c3RlbUV2ZW50V2l0aFRpbWVvdXQoCisgICAgU2JUaW1lIHRpbWUpIHsKKyAgUHJvY2Vzc05leHRTeXN0ZW1NZXNzYWdlKCk7CisgIGlmIChwZW5kaW5nX2V2ZW50XykgeworICAgIEV2ZW50KiBvdXQgPSBwZW5kaW5nX2V2ZW50XzsKKyAgICBwZW5kaW5nX2V2ZW50XyA9IG51bGxwdHI7CisgICAgcmV0dXJuIG91dDsKKyAgfQorCisgIFNjb3BlZExvY2sgbG9jayhzdG9wX3dhaXRpbmdfZm9yX3N5c3RlbV9ldmVudHNfbXV0ZXhfKTsKKyAgaWYgKHRpbWUgPD0gU2JUaW1lR2V0TW9ub3RvbmljTm93KCkgfHwgc3RvcF93YWl0aW5nX2Zvcl9zeXN0ZW1fZXZlbnRzXykgeworICAgIHN0b3Bfd2FpdGluZ19mb3Jfc3lzdGVtX2V2ZW50c18gPSBmYWxzZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIHJldHVybiBXYWl0Rm9yU3lzdGVtRXZlbnRXaXRoVGltZW91dCh0aW1lKTsKK30KKworTFJFU1VMVCBBcHBsaWNhdGlvbldpbjMyOjpXaW5kb3dQcm9jZXNzKEhXTkQgaFduZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0gd19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbF9wYXJhbSkgeworICBzd2l0Y2ggKG1zZykgeworICAgIC8vIElucHV0IG1lc3NhZ2UgaGFuZGxpbmcuCisgICAgY2FzZSBXTV9NQlVUVE9ORE9XTjoKKyAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBXTV9NQlVUVE9OVVA6CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgY2FzZSBXTV9SQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NT1VTRU1PVkU6CisgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgorICAgICAgcGVuZGluZ19ldmVudF8gPQorICAgICAgICAgIFByb2Nlc3NXaW5Nb3VzZUV2ZW50KEdldENvcmVXaW5kb3coKSwgbXNnLCB3X3BhcmFtLCBsX3BhcmFtKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgV01fS0VZRE9XTjoKKyAgICBjYXNlIFdNX1NZU0tFWURPV046CisgICAgY2FzZSBXTV9LRVlVUDoKKyAgICBjYXNlIFdNX1NZU0tFWVVQOgorICAgICAgcGVuZGluZ19ldmVudF8gPQorICAgICAgICAgIFByb2Nlc3NXaW5LZXlFdmVudChHZXRDb3JlV2luZG93KCksIG1zZywgd19wYXJhbSwgbF9wYXJhbSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0RFU1RST1k6CisgICAgICBpZiAod2luZG93Xy5nZXQoKSkgeworICAgICAgICAvLyBGcmVlemUgdGhlIGFwcGxpY2F0aW9uIGZpcnN0IHNvIHdlIGNhbiBkbyBzb21lIGNsZWFudXAgYmVmb3JlIHRoZQorICAgICAgICAvLyB3aW5kb3cgaXMgZGVzdHJveWVkIChlLmcuIHN0b3BwaW5nIHJhc3Rlcml6YXRpb24pLgorICAgICAgICBEaXNwYXRjaEFuZERlbGV0ZShuZXcgRXZlbnQoa1NiRXZlbnRUeXBlRnJlZXplLCBOVUxMLCBOVUxMKSk7CisgICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gRGVmV2luZG93UHJvY1coaFduZCwgbXNnLCB3X3BhcmFtLCBsX3BhcmFtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IEFwcGxpY2F0aW9uV2luMzI6OlJ1bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgQ29tbWFuZExpbmUgY21kX2xpbmUoYXJnYywgYXJndik7CisgIEF0dGFjaE1pbmlEdW1wSGFuZGxlcihjbWRfbGluZSk7CisgIGludCByZXR1cm5fdmFsID0gQXBwbGljYXRpb246OlJ1bihhcmdjLCBhcmd2KTsKKyAgcmV0dXJuIHJldHVybl92YWw7Cit9CisKK3ZvaWQgQXBwbGljYXRpb25XaW4zMjo6UHJvY2Vzc05leHRTeXN0ZW1NZXNzYWdlKCkgeworICBNU0cgbXNnOworICBCT09MIHBlZWtfbWVzc2FnZV9yZXR1cm4gPSBQZWVrTWVzc2FnZSgmbXNnLCBOVUxMLCAwLCAwLCBQTV9SRU1PVkUpOworICBpZiAocGVla19tZXNzYWdlX3JldHVybiA9PSAwKSB7ICAvLyAwIGluZGljYXRlcyBubyBtZXNzYWdlcyBhdmFpbGFibGUuCisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCFEaWFsb2dIYW5kbGVNZXNzYWdlKCZtc2cpKSB7CisgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICBEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisgIH0KKyAgaWYgKG1zZy5tZXNzYWdlID09IFdNX1FVSVQpIHsKKyAgICBTQl9MT0coSU5GTykgPDwgIlJlY2VpdmVkIFF1aXQgbWVzc2FnZTsgc3RvcHBpbmcgYXBwbGljYXRpb24iOworICAgIFNiU3lzdGVtUmVxdWVzdFN0b3AobXNnLndQYXJhbSk7CisgIH0KK30KKworQXBwbGljYXRpb246OkV2ZW50KiBBcHBsaWNhdGlvbldpbjMyOjpQcm9jZXNzV2luTW91c2VFdmVudChTYldpbmRvdyB3aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0gd19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBBUkFNIGxfcGFyYW0pIHsKKyAgU2JJbnB1dERhdGEqIGRhdGEgPSBuZXcgU2JJbnB1dERhdGEoKTsKKyAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOworCisgIGRhdGEtPndpbmRvdyA9IHdpbmRvdzsKKyAgZGF0YS0+ZGV2aWNlX3R5cGUgPSBrU2JJbnB1dERldmljZVR5cGVNb3VzZTsKKyAgZGF0YS0+ZGV2aWNlX2lkID0ga1NiTW91c2VEZXZpY2VJZDsKKyAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgICAgZGF0YS0+a2V5ID0ga1NiS2V5TW91c2UxOworICAgICAgZGF0YS0+dHlwZSA9IGtTYklucHV0RXZlbnRUeXBlUHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorICAgICAgZGF0YS0+a2V5ID0ga1NiS2V5TW91c2UyOworICAgICAgZGF0YS0+dHlwZSA9IGtTYklucHV0RXZlbnRUeXBlUHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01CVVRUT05ET1dOOgorICAgICAgZGF0YS0+a2V5ID0ga1NiS2V5TW91c2UzOworICAgICAgZGF0YS0+dHlwZSA9IGtTYklucHV0RXZlbnRUeXBlUHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICAgIGRhdGEtPmtleSA9IGtTYktleU1vdXNlMTsKKyAgICAgIGRhdGEtPnR5cGUgPSBrU2JJbnB1dEV2ZW50VHlwZVVucHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1JCVVRUT05VUDoKKyAgICAgIGRhdGEtPmtleSA9IGtTYktleU1vdXNlMjsKKyAgICAgIGRhdGEtPnR5cGUgPSBrU2JJbnB1dEV2ZW50VHlwZVVucHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAgICAgIGRhdGEtPmtleSA9IGtTYktleU1vdXNlMzsKKyAgICAgIGRhdGEtPnR5cGUgPSBrU2JJbnB1dEV2ZW50VHlwZVVucHJlc3M7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFTU9WRToKKyAgICAgIGRhdGEtPnR5cGUgPSBrU2JJbnB1dEV2ZW50VHlwZU1vdmU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFV0hFRUw6IHsKKyAgICAgIGRhdGEtPnR5cGUgPSBrU2JJbnB1dEV2ZW50VHlwZVdoZWVsOworICAgICAgaW50IHdoZWVsX2RlbHRhID0gR0VUX1dIRUVMX0RFTFRBX1dQQVJBTSh3X3BhcmFtKTsKKyAgICAgIC8vIFBlciBNU0ZULCBzdGFuZGFyZCBtb3VzZSB3aGVlbCBpbmNyZW1lbnRzIGFyZSBtdWx0aXBsZXMgb2YgMTIwLiBGb3IKKyAgICAgIC8vIHNtb290aCBzY3JvbGxpbmcsIHRoaXMgbWF5IGJlIGxlc3MuCisgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY0NTYxNyh2PXZzLjg1KS5hc3B4CisgICAgICBkYXRhLT5kZWx0YS55ID0gd2hlZWxfZGVsdGEgLyAxMjAuMGY7CisgICAgfSBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJSZWNlaXZlZCB1bnJlY29nbml6ZWQgTVNHIGNvZGUgIiA8PCBtc2c7CisgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIGRhdGEtPnByZXNzdXJlID0gTkFOOworICBkYXRhLT5zaXplID0ge05BTiwgTkFOfTsKKyAgZGF0YS0+dGlsdCA9IHtOQU4sIE5BTn07CisgIGRhdGEtPnBvc2l0aW9uLnggPSBHRVRfWF9MUEFSQU0obF9wYXJhbSk7CisgIGRhdGEtPnBvc2l0aW9uLnkgPSBHRVRfWV9MUEFSQU0obF9wYXJhbSk7CisKKyAgcmV0dXJuIG5ldyBBcHBsaWNhdGlvbjo6RXZlbnQoa1NiRXZlbnRUeXBlSW5wdXQsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBcHBsaWNhdGlvbjo6RGVsZXRlRGVzdHJ1Y3RvcjxTYklucHV0RGF0YT4pOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODBjOWYwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hcHBsaWNhdGlvbl93aW4zMi5oCkBAIC0wLDAgKzEsMTM3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9BUFBMSUNBVElPTl9XSU4zMl9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FQUExJQ0FUSU9OX1dJTjMyX0hfCisKKy8vIFdpbmRvd3MgaGVhZGVycy4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2NhbGl6ZWRfc3RyaW5ncy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3F1ZXVlX2FwcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworY2xhc3MgQXBwbGljYXRpb25XaW4zMiA6IHB1YmxpYyBzdGFyYm9hcmQ6OlF1ZXVlQXBwbGljYXRpb24geworIHB1YmxpYzoKKyAgQXBwbGljYXRpb25XaW4zMigpOworICB+QXBwbGljYXRpb25XaW4zMigpIG92ZXJyaWRlOworCisgIHN0YXRpYyBBcHBsaWNhdGlvbldpbjMyKiBHZXQoKSB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFwcGxpY2F0aW9uV2luMzIqPigKKyAgICAgICAgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpBcHBsaWNhdGlvbjo6R2V0KCkpOworICB9CisKKyAgU2JXaW5kb3cgQ3JlYXRlV2luZG93Rm9yV2luMzIoY29uc3QgU2JXaW5kb3dPcHRpb25zKiBvcHRpb25zKTsKKworICBib29sIERlc3Ryb3lXaW5kb3coU2JXaW5kb3cgd2luZG93KTsKKworI2lmIFNCX0FQSV9WRVJTSU9OID49IDEzCisgIHZvaWQgRGlzcGF0Y2hTdGFydChTYlRpbWVNb25vdG9uaWMgdGltZXN0YW1wKSB7CisgICAgc2hhcmVkOjpzdGFyYm9hcmQ6OkFwcGxpY2F0aW9uOjpEaXNwYXRjaFN0YXJ0KHRpbWVzdGFtcCk7CisgIH0KKyNlbHNlICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMwordm9pZCBEaXNwYXRjaFN0YXJ0KCkgeworICAgIHNoYXJlZDo6c3RhcmJvYXJkOjpBcHBsaWNhdGlvbjo6RGlzcGF0Y2hTdGFydCgpOworICB9CisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEzCisKKyAgU2JXaW5kb3cgR2V0Q29yZVdpbmRvdygpIHsKKyAgICByZXR1cm4gU2JXaW5kb3dJc1ZhbGlkKHdpbmRvd18uZ2V0KCkpID8gd2luZG93Xy5nZXQoKSA6IGtTYldpbmRvd0ludmFsaWQ7CisgIH0KKworICBib29sIE9uU2JTeXN0ZW1SYWlzZVBsYXRmb3JtRXJyb3IoU2JTeXN0ZW1QbGF0Zm9ybUVycm9yVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JTeXN0ZW1QbGF0Zm9ybUVycm9yQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiB1c2VyX2RhdGEpOworCisgIHN0ZDo6c3RyaW5nIEdldExvY2FsaXplZFN0cmluZyhjb25zdCBjaGFyKiBpZCwgY29uc3QgY2hhciogZmFsbGJhY2spIGNvbnN0IHsKKyAgICByZXR1cm4gbG9jYWxpemVkX3N0cmluZ3NfLkdldFN0cmluZyhpZCwgZmFsbGJhY2spOworICB9CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGlzIHZhbGlkIHRvIHBvbGwvcXVlcnkgZm9yIHN5c3RlbSBldmVudHMuCisgIGJvb2wgTWF5SGF2ZVN5c3RlbUV2ZW50cygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAvLyBXYWl0cyBmb3IgYW4gZXZlbnQgdW50aWwgdGhlIHRpbWVvdXQgfHRpbWV8IHJ1bnMgb3V0LiAgSWYgYW4gZXZlbnQgb2NjdXJzCisgIC8vIGluIHRoaXMgdGltZSwgaXQgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkLiBJZiB8dGltZXwgaXMgemVybworICAvLyBvciBuZWdhdGl2ZSwgdGhlbiB0aGlzIHNob3VsZCBmdW5jdGlvbiBlZmZlY3RpdmVseSBsaWtlIGEgbm8td2FpdCBwb2xsLgorICBFdmVudCogV2FpdEZvclN5c3RlbUV2ZW50V2l0aFRpbWVvdXQoU2JUaW1lIHRpbWUpIG92ZXJyaWRlOworCisgIC8vIFdha2VzIHVwIGFueSB0aHJlYWQgd2FpdGluZyB3aXRoaW4gYSBjYWxsIHRvCisgIC8vIFdhaXRGb3JTeXN0ZW1FdmVudFdpdGhUaW1lb3V0KCkuCisgIHZvaWQgV2FrZVN5c3RlbUV2ZW50V2FpdCgpIG92ZXJyaWRlIHsKKyAgICBTY29wZWRMb2NrIGxvY2soc3RvcF93YWl0aW5nX2Zvcl9zeXN0ZW1fZXZlbnRzX211dGV4Xyk7CisgICAgc3RvcF93YWl0aW5nX2Zvcl9zeXN0ZW1fZXZlbnRzXyA9IHRydWU7CisgIH0KKworICBMUkVTVUxUIFdpbmRvd1Byb2Nlc3MoSFdORCBoV25kLCBVSU5UIG1zZywgV1BBUkFNIHdfcGFyYW0sIExQQVJBTSBsX3BhcmFtKTsKKyAgVk9JRCBUaW1lZEV2ZW50Q2FsbGJhY2soUFZPSUQgbHAsIEJPT0xFQU4gdGltZXJfb3Jfd2FpdF9maXJlZCk7CisKKyAgLy8gTm9uLXZpcnR1YWwgb3ZlcnJpZGUuIENhbGxzIGludG8gc3VwZXIgY2xhc3MgUnVuKCkuCisgIGludCBSdW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KTsKKworIHByaXZhdGU6CisgIC8vIC0tLSBBcHBsaWNhdGlvbiBvdmVycmlkZXMgLS0tCisgIGJvb2wgSXNTdGFydEltbWVkaWF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgdm9pZCBJbml0aWFsaXplKCkgb3ZlcnJpZGUge30KKyAgdm9pZCBUZWFyZG93bigpIG92ZXJyaWRlIHt9CisKKyAgdm9pZCBQcm9jZXNzTmV4dFN5c3RlbU1lc3NhZ2UoKTsKKyAgU2JUaW1lTW9ub3RvbmljIEdldE5leHRUaW1lZEV2ZW50VGFyZ2V0VGltZSgpIG92ZXJyaWRlIHsKKyAgICByZXR1cm4gU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CisgIH0KKworICAvLyBQcm9jZXNzZXMgd2luZG93IGtleSBldmVudHMsIHJldHVybmluZyBhIGNvcnJlc3BvbmRpbmcgRXZlbnQgaW5zdGFuY2UuCisgIC8vIFRoaXMgdHJhbnNmZXJzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgRXZlbnQuCisgIEV2ZW50KiBQcm9jZXNzV2luS2V5RXZlbnQoU2JXaW5kb3cgd2luZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQQVJBTSB3X3BhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsX3BhcmFtKTsKKworICAvLyBQcm9jZXNzZXMgd2luZG93IG1vdXNlIGV2ZW50cywgcmV0dXJuaW5nIGEgY29ycmVzcG9uZGluZyBFdmVudCBpbnN0YW5jZS4KKyAgLy8gVGhpcyB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIHRoZSByZXR1cm5lZCBFdmVudC4gVGhlIEV2ZW50IG1heSBiZSBudWxscHRyLgorICBFdmVudCogUHJvY2Vzc1dpbk1vdXNlRXZlbnQoU2JXaW5kb3cgd2luZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0gd19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsX3BhcmFtKTsKKworICBFdmVudCogcGVuZGluZ19ldmVudF8gPSBudWxscHRyOworCisgIC8vIFRoZSBzaW5nbGUgb3BlbiB3aW5kb3csIGlmIGFueS4KKyAgc3RkOjp1bmlxdWVfcHRyPFNiV2luZG93UHJpdmF0ZT4gd2luZG93XzsKKworICBzdGFyYm9hcmQ6OkxvY2FsaXplZFN0cmluZ3MgbG9jYWxpemVkX3N0cmluZ3NfOworCisgIE11dGV4IHN0b3Bfd2FpdGluZ19mb3Jfc3lzdGVtX2V2ZW50c19tdXRleF87CisgIGJvb2wgc3RvcF93YWl0aW5nX2Zvcl9zeXN0ZW1fZXZlbnRzXzsKKworICAvLyBUaGUgY3VycmVudCBkZXByZXNzZWQgU2JLZXlNb2RpZmllcnMgLSBpZiB0aGVyZSBhcmUgYW55LgorICB1bnNpZ25lZCBpbnQgY3VycmVudF9rZXlfbW9kaWZpZXJzXyA9IDA7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FQUExJQ0FUSU9OX1dJTjMyX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyX2tleV9ldmVudC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzJfa2V5X2V2ZW50LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDE4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyX2tleV9ldmVudC5jYwpAQCAtMCwwICsxLDI0OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hcHBsaWNhdGlvbl93aW4zMi5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2V2ZW50LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2lucHV0LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2tleS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmgiCisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkFwcGxpY2F0aW9uOworCituYW1lc3BhY2UgeworCitjb25zdCBpbnQga1NiS2V5Ym9hcmREZXZpY2VJZCA9IDE7CisKK1NiS2V5IFZpcnR1YWxLZXlDb2RlVG9TYktleShXUEFSQU0gdmlydHVhbF9rZXlfY29kZSkgeworICAvLyBLZXlib2FyZCBjb2RlIHJlZmVyZW5jZToKKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvZGQzNzU3MzEodj12cy44NSkuYXNweAorICBzd2l0Y2ggKHZpcnR1YWxfa2V5X2NvZGUpIHsKKyAgICBjYXNlIFZLX0NBTkNFTDogcmV0dXJuIGtTYktleUNhbmNlbDsKKyAgICBjYXNlIFZLX0JBQ0s6IHJldHVybiBrU2JLZXlCYWNrOworICAgIGNhc2UgVktfVEFCOiByZXR1cm4ga1NiS2V5VGFiOworICAgIGNhc2UgVktfQ0xFQVI6IHJldHVybiBrU2JLZXlDbGVhcjsKKyAgICBjYXNlIFZLX1JFVFVSTjogcmV0dXJuIGtTYktleVJldHVybjsKKyAgICBjYXNlIFZLX1NISUZUOiByZXR1cm4ga1NiS2V5U2hpZnQ7CisgICAgY2FzZSBWS19DT05UUk9MOiByZXR1cm4ga1NiS2V5Q29udHJvbDsKKyAgICBjYXNlIFZLX01FTlU6IHJldHVybiBrU2JLZXlNZW51OworICAgIGNhc2UgVktfUEFVU0U6IHJldHVybiBrU2JLZXlQYXVzZTsKKyAgICBjYXNlIFZLX0NBUElUQUw6IHJldHVybiBrU2JLZXlDYXBpdGFsOworICAgIC8vIEhhbmd1bCBhbmQgS2FuYSBoYXZlIHRoZSBzYW1lIFZpcnR1YWxLZXkgY29uc3RhbnQKKyAgICBjYXNlIFZLX0tBTkE6IHJldHVybiBrU2JLZXlLYW5hOworICAgIGNhc2UgVktfSlVOSkE6IHJldHVybiBrU2JLZXlKdW5qYTsKKyAgICBjYXNlIFZLX0ZJTkFMOiByZXR1cm4ga1NiS2V5RmluYWw7CisgICAgLy8gSGFuamEgYW5kIEthbmppIGhhdmUgdGhlIHNhbWUgVmlydHVhbEtleSBjb25zdGFudAorICAgIGNhc2UgVktfSEFOSkE6IHJldHVybiBrU2JLZXlIYW5qYTsKKyAgICBjYXNlIFZLX0VTQ0FQRTogcmV0dXJuIGtTYktleUVzY2FwZTsKKyAgICBjYXNlIFZLX0NPTlZFUlQ6IHJldHVybiBrU2JLZXlDb252ZXJ0OworICAgIGNhc2UgVktfTk9OQ09OVkVSVDogcmV0dXJuIGtTYktleU5vbmNvbnZlcnQ7CisgICAgY2FzZSBWS19BQ0NFUFQ6IHJldHVybiBrU2JLZXlBY2NlcHQ7CisgICAgY2FzZSBWS19NT0RFQ0hBTkdFOiByZXR1cm4ga1NiS2V5TW9kZWNoYW5nZTsKKyAgICBjYXNlIFZLX1NQQUNFOiByZXR1cm4ga1NiS2V5U3BhY2U7CisgICAgY2FzZSBWS19QUklPUjogcmV0dXJuIGtTYktleVByaW9yOworICAgIGNhc2UgVktfTkVYVDogcmV0dXJuIGtTYktleU5leHQ7CisgICAgY2FzZSBWS19FTkQ6IHJldHVybiBrU2JLZXlFbmQ7CisgICAgY2FzZSBWS19IT01FOiByZXR1cm4ga1NiS2V5SG9tZTsKKyAgICBjYXNlIFZLX0xFRlQ6IHJldHVybiBrU2JLZXlMZWZ0OworICAgIGNhc2UgVktfVVA6IHJldHVybiBrU2JLZXlVcDsKKyAgICBjYXNlIFZLX1JJR0hUOiByZXR1cm4ga1NiS2V5UmlnaHQ7CisgICAgY2FzZSBWS19ET1dOOiByZXR1cm4ga1NiS2V5RG93bjsKKyAgICBjYXNlIFZLX1NFTEVDVDogcmV0dXJuIGtTYktleVNlbGVjdDsKKyAgICBjYXNlIFZLX1BSSU5UOiByZXR1cm4ga1NiS2V5UHJpbnQ7CisgICAgY2FzZSBWS19FWEVDVVRFOiByZXR1cm4ga1NiS2V5RXhlY3V0ZTsKKyAgICBjYXNlIFZLX1NOQVBTSE9UOiByZXR1cm4ga1NiS2V5U25hcHNob3Q7CisgICAgY2FzZSBWS19JTlNFUlQ6IHJldHVybiBrU2JLZXlJbnNlcnQ7CisgICAgY2FzZSBWS19ERUxFVEU6IHJldHVybiBrU2JLZXlEZWxldGU7CisgICAgY2FzZSBWS19PRU1fUEVSSU9EOiByZXR1cm4ga1NiS2V5T2VtUGVyaW9kOworICAgIGNhc2UgMHgzMDogcmV0dXJuIGtTYktleTA7CisgICAgY2FzZSAweDMxOiByZXR1cm4ga1NiS2V5MTsKKyAgICBjYXNlIDB4MzI6IHJldHVybiBrU2JLZXkyOworICAgIGNhc2UgMHgzMzogcmV0dXJuIGtTYktleTM7CisgICAgY2FzZSAweDM0OiByZXR1cm4ga1NiS2V5NDsKKyAgICBjYXNlIDB4MzU6IHJldHVybiBrU2JLZXk1OworICAgIGNhc2UgMHgzNjogcmV0dXJuIGtTYktleTY7CisgICAgY2FzZSAweDM3OiByZXR1cm4ga1NiS2V5NzsKKyAgICBjYXNlIDB4Mzg6IHJldHVybiBrU2JLZXk4OworICAgIGNhc2UgMHgzOTogcmV0dXJuIGtTYktleTk7CisgICAgY2FzZSAweDQxOiByZXR1cm4ga1NiS2V5QTsKKyAgICBjYXNlIDB4NDI6IHJldHVybiBrU2JLZXlCOworICAgIGNhc2UgMHg0MzogcmV0dXJuIGtTYktleUM7CisgICAgY2FzZSAweDQ0OiByZXR1cm4ga1NiS2V5RDsKKyAgICBjYXNlIDB4NDU6IHJldHVybiBrU2JLZXlFOworICAgIGNhc2UgMHg0NjogcmV0dXJuIGtTYktleUY7CisgICAgY2FzZSAweDQ3OiByZXR1cm4ga1NiS2V5RzsKKyAgICBjYXNlIDB4NDg6IHJldHVybiBrU2JLZXlIOworICAgIGNhc2UgMHg0OTogcmV0dXJuIGtTYktleUk7CisgICAgY2FzZSAweDRBOiByZXR1cm4ga1NiS2V5SjsKKyAgICBjYXNlIDB4NEI6IHJldHVybiBrU2JLZXlLOworICAgIGNhc2UgMHg0QzogcmV0dXJuIGtTYktleUw7CisgICAgY2FzZSAweDREOiByZXR1cm4ga1NiS2V5TTsKKyAgICBjYXNlIDB4NEU6IHJldHVybiBrU2JLZXlOOworICAgIGNhc2UgMHg0RjogcmV0dXJuIGtTYktleU87CisgICAgY2FzZSAweDUwOiByZXR1cm4ga1NiS2V5UDsKKyAgICBjYXNlIDB4NTE6IHJldHVybiBrU2JLZXlROworICAgIGNhc2UgMHg1MjogcmV0dXJuIGtTYktleVI7CisgICAgY2FzZSAweDUzOiByZXR1cm4ga1NiS2V5UzsKKyAgICBjYXNlIDB4NTQ6IHJldHVybiBrU2JLZXlUOworICAgIGNhc2UgMHg1NTogcmV0dXJuIGtTYktleVU7CisgICAgY2FzZSAweDU2OiByZXR1cm4ga1NiS2V5VjsKKyAgICBjYXNlIDB4NTc6IHJldHVybiBrU2JLZXlXOworICAgIGNhc2UgMHg1ODogcmV0dXJuIGtTYktleVg7CisgICAgY2FzZSAweDU5OiByZXR1cm4ga1NiS2V5WTsKKyAgICBjYXNlIDB4NUE6IHJldHVybiBrU2JLZXlaOworICAgIGNhc2UgVktfTFdJTjogcmV0dXJuIGtTYktleUx3aW47CisgICAgY2FzZSBWS19SV0lOOiByZXR1cm4ga1NiS2V5UndpbjsKKyAgICBjYXNlIFZLX0FQUFM6IHJldHVybiBrU2JLZXlBcHBzOworICAgIGNhc2UgVktfU0xFRVA6IHJldHVybiBrU2JLZXlTbGVlcDsKKyAgICBjYXNlIFZLX05VTVBBRDA6IHJldHVybiBrU2JLZXlOdW1wYWQwOworICAgIGNhc2UgVktfTlVNUEFEMTogcmV0dXJuIGtTYktleU51bXBhZDE7CisgICAgY2FzZSBWS19OVU1QQUQyOiByZXR1cm4ga1NiS2V5TnVtcGFkMjsKKyAgICBjYXNlIFZLX05VTVBBRDM6IHJldHVybiBrU2JLZXlOdW1wYWQzOworICAgIGNhc2UgVktfTlVNUEFENDogcmV0dXJuIGtTYktleU51bXBhZDQ7CisgICAgY2FzZSBWS19OVU1QQUQ1OiByZXR1cm4ga1NiS2V5TnVtcGFkNTsKKyAgICBjYXNlIFZLX05VTVBBRDY6IHJldHVybiBrU2JLZXlOdW1wYWQ2OworICAgIGNhc2UgVktfTlVNUEFENzogcmV0dXJuIGtTYktleU51bXBhZDc7CisgICAgY2FzZSBWS19OVU1QQUQ4OiByZXR1cm4ga1NiS2V5TnVtcGFkODsKKyAgICBjYXNlIFZLX05VTVBBRDk6IHJldHVybiBrU2JLZXlOdW1wYWQ5OworICAgIGNhc2UgVktfTVVMVElQTFk6IHJldHVybiBrU2JLZXlNdWx0aXBseTsKKyAgICBjYXNlIFZLX0FERDogcmV0dXJuIGtTYktleUFkZDsKKyAgICBjYXNlIFZLX1NFUEFSQVRPUjogcmV0dXJuIGtTYktleVNlcGFyYXRvcjsKKyAgICBjYXNlIFZLX1NVQlRSQUNUOiByZXR1cm4ga1NiS2V5U3VidHJhY3Q7CisgICAgY2FzZSBWS19ERUNJTUFMOiByZXR1cm4ga1NiS2V5RGVjaW1hbDsKKyAgICBjYXNlIFZLX0RJVklERTogcmV0dXJuIGtTYktleURpdmlkZTsKKyAgICBjYXNlIFZLX0YxOiByZXR1cm4ga1NiS2V5RjE7CisgICAgY2FzZSBWS19GMjogcmV0dXJuIGtTYktleUYyOworICAgIGNhc2UgVktfRjM6IHJldHVybiBrU2JLZXlGMzsKKyAgICBjYXNlIFZLX0Y0OiByZXR1cm4ga1NiS2V5RjQ7CisgICAgY2FzZSBWS19GNTogcmV0dXJuIGtTYktleUY1OworICAgIGNhc2UgVktfRjY6IHJldHVybiBrU2JLZXlGNjsKKyAgICBjYXNlIFZLX0Y3OiByZXR1cm4ga1NiS2V5Rjc7CisgICAgY2FzZSBWS19GODogcmV0dXJuIGtTYktleUY4OworICAgIGNhc2UgVktfRjk6IHJldHVybiBrU2JLZXlGOTsKKyAgICBjYXNlIFZLX0YxMDogcmV0dXJuIGtTYktleUYxMDsKKyAgICBjYXNlIFZLX0YxMTogcmV0dXJuIGtTYktleUYxMTsKKyAgICBjYXNlIFZLX0YxMjogcmV0dXJuIGtTYktleUYxMjsKKyAgICBjYXNlIFZLX0YxMzogcmV0dXJuIGtTYktleUYxMzsKKyAgICBjYXNlIFZLX0YxNDogcmV0dXJuIGtTYktleUYxNDsKKyAgICBjYXNlIFZLX0YxNTogcmV0dXJuIGtTYktleUYxNTsKKyAgICBjYXNlIFZLX0YxNjogcmV0dXJuIGtTYktleUYxNjsKKyAgICBjYXNlIFZLX0YxNzogcmV0dXJuIGtTYktleUYxNzsKKyAgICBjYXNlIFZLX0YxODogcmV0dXJuIGtTYktleUYxODsKKyAgICBjYXNlIFZLX0YxOTogcmV0dXJuIGtTYktleUYxOTsKKyAgICBjYXNlIFZLX0YyMDogcmV0dXJuIGtTYktleUYyMDsKKyAgICBjYXNlIFZLX0YyMTogcmV0dXJuIGtTYktleUYyMTsKKyAgICBjYXNlIFZLX0YyMjogcmV0dXJuIGtTYktleUYyMjsKKyAgICBjYXNlIFZLX0YyMzogcmV0dXJuIGtTYktleUYyMzsKKyAgICBjYXNlIFZLX0YyNDogcmV0dXJuIGtTYktleUYyNDsKKyAgICBjYXNlIFZLX05VTUxPQ0s6IHJldHVybiBrU2JLZXlOdW1sb2NrOworICAgIGNhc2UgVktfU0NST0xMOiByZXR1cm4ga1NiS2V5U2Nyb2xsOworICAgIGNhc2UgVktfTFNISUZUOiByZXR1cm4ga1NiS2V5THNoaWZ0OworICAgIGNhc2UgVktfUlNISUZUOiByZXR1cm4ga1NiS2V5UnNoaWZ0OworICAgIGNhc2UgVktfTENPTlRST0w6IHJldHVybiBrU2JLZXlMY29udHJvbDsKKyAgICBjYXNlIFZLX1JDT05UUk9MOiByZXR1cm4ga1NiS2V5UmNvbnRyb2w7CisgICAgY2FzZSBWS19MTUVOVTogcmV0dXJuIGtTYktleUxtZW51OworICAgIGNhc2UgVktfUk1FTlU6IHJldHVybiBrU2JLZXlSbWVudTsKKyAgICBjYXNlIFZLX0JST1dTRVJfQkFDSzogcmV0dXJuIGtTYktleUJyb3dzZXJCYWNrOworICAgIGNhc2UgVktfQlJPV1NFUl9GT1JXQVJEOiByZXR1cm4ga1NiS2V5QnJvd3NlckZvcndhcmQ7CisgICAgY2FzZSBWS19CUk9XU0VSX1JFRlJFU0g6IHJldHVybiBrU2JLZXlCcm93c2VyUmVmcmVzaDsKKyAgICBjYXNlIFZLX0JST1dTRVJfU1RPUDogcmV0dXJuIGtTYktleUJyb3dzZXJTdG9wOworICAgIGNhc2UgVktfQlJPV1NFUl9TRUFSQ0g6IHJldHVybiBrU2JLZXlCcm93c2VyU2VhcmNoOworICAgIGNhc2UgVktfQlJPV1NFUl9GQVZPUklURVM6IHJldHVybiBrU2JLZXlCcm93c2VyRmF2b3JpdGVzOworICAgIGNhc2UgVktfQlJPV1NFUl9IT01FOiByZXR1cm4ga1NiS2V5QnJvd3NlckhvbWU7CisgICAgY2FzZSBWS19MQlVUVE9OOiByZXR1cm4ga1NiS2V5TW91c2UxOworICAgIGNhc2UgVktfUkJVVFRPTjogcmV0dXJuIGtTYktleU1vdXNlMjsKKyAgICBjYXNlIFZLX01CVVRUT046IHJldHVybiBrU2JLZXlNb3VzZTM7CisgICAgY2FzZSBWS19YQlVUVE9OMTogcmV0dXJuIGtTYktleU1vdXNlNDsKKyAgICBjYXNlIFZLX1hCVVRUT04yOiByZXR1cm4ga1NiS2V5TW91c2U1OworICAgIGRlZmF1bHQ6CisgICAgICBTQl9MT0coV0FSTklORykgPDwgIlVucmVjb2duaXplZCBrZXkgaGl0LiI7CisgICAgICByZXR1cm4ga1NiS2V5VW5rbm93bjsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKKy8vIFRPRE86IFBsdWcgaW50byBYSW5wdXQgQVBJcyBmb3IgWGJveCBjb250cm9sbGVyIGlucHV0PworQXBwbGljYXRpb246OkV2ZW50KiBBcHBsaWNhdGlvbldpbjMyOjpQcm9jZXNzV2luS2V5RXZlbnQoU2JXaW5kb3cgd2luZG93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0gd19wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsX3BhcmFtKSB7CisgIFNiSW5wdXREYXRhKiBkYXRhID0gbmV3IFNiSW5wdXREYXRhKCk7CisgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKworICBkYXRhLT53aW5kb3cgPSB3aW5kb3c7CisgIGRhdGEtPmRldmljZV90eXBlID0ga1NiSW5wdXREZXZpY2VUeXBlS2V5Ym9hcmQ7CisgIC8vIFRPRE86IERvIHNvbWUgbW9yZSBpbnRlbGxpZ2VudCBoYW5kbGluZyBsb2dpYyBoZXJlIHRvIGRldGVybWluZQorICAvLyBhIHVuaXF1ZSBkZXZpY2UgSUQuCisgIGRhdGEtPmRldmljZV9pZCA9IGtTYktleWJvYXJkRGV2aWNlSWQ7CisgIGRhdGEtPmtleSA9IFZpcnR1YWxLZXlDb2RlVG9TYktleSh3X3BhcmFtKTsKKworICBjb25zdCBib29sIHdhc19kb3duID0gKChsX3BhcmFtICYgKDEgPDwgMzApKSAhPSAwKTsKKyAgY29uc3QgYm9vbCB1cCA9IG1zZyAhPSBXTV9LRVlET1dOICYmIG1zZyAhPSBXTV9TWVNLRVlET1dOOworCisgIGRhdGEtPnR5cGUgPSB1cCA/IGtTYklucHV0RXZlbnRUeXBlVW5wcmVzcyA6IGtTYklucHV0RXZlbnRUeXBlUHJlc3M7CisKKyAgU2JLZXlNb2RpZmllcnMgY3VycmVudF9tb2RpZmllciA9IGtTYktleU1vZGlmaWVyc05vbmU7CisgIGlmIChkYXRhLT5rZXkgPT0ga1NiS2V5U2hpZnQgfHwgZGF0YS0+a2V5ID09IGtTYktleVJzaGlmdCB8fAorICAgICAgZGF0YS0+a2V5ID09IGtTYktleUxzaGlmdCkgeworICAgIGN1cnJlbnRfbW9kaWZpZXIgPSBrU2JLZXlNb2RpZmllcnNTaGlmdDsKKyAgfSBlbHNlIGlmIChkYXRhLT5rZXkgPT0ga1NiS2V5TWVudSB8fCBkYXRhLT5rZXkgPT0ga1NiS2V5Um1lbnUgfHwKKyAgICAgICAgICAgICBkYXRhLT5rZXkgPT0ga1NiS2V5TG1lbnUpIHsKKyAgICBjdXJyZW50X21vZGlmaWVyID0ga1NiS2V5TW9kaWZpZXJzQWx0OworICB9IGVsc2UgaWYgKGRhdGEtPmtleSA9PSBrU2JLZXlDb250cm9sIHx8IGRhdGEtPmtleSA9PSBrU2JLZXlSY29udHJvbCB8fAorICAgICAgICAgICAgIGRhdGEtPmtleSA9PSBrU2JLZXlMY29udHJvbCkgeworICAgIGN1cnJlbnRfbW9kaWZpZXIgPSBrU2JLZXlNb2RpZmllcnNDdHJsOworICB9IGVsc2UgaWYgKGRhdGEtPmtleSA9PSBrU2JLZXlSd2luIHx8IGRhdGEtPmtleSA9PSBrU2JLZXlMd2luKSB7CisgICAgY3VycmVudF9tb2RpZmllciA9IGtTYktleU1vZGlmaWVyc01ldGE7CisgIH0KKworICAvLyBFaXRoZXIgYWRkIG9yIHJlbW92ZSB0aGUgY3VycmVudCBtb2RpZmllciBrZXkgYmVpbmcgcHJlc3NlZCBvciByZWxlYXNlZC4KKyAgLy8gVGhpcyBub29wcyBmb3Iga1NiS2V5TW9kaWZpZXJzTm9uZS4KKyAgaWYgKHVwKSB7CisgICAgY3VycmVudF9rZXlfbW9kaWZpZXJzXyAmPSB+Y3VycmVudF9tb2RpZmllcjsKKyAgfSBlbHNlIHsKKyAgICBjdXJyZW50X2tleV9tb2RpZmllcnNfIHw9IGN1cnJlbnRfbW9kaWZpZXI7CisgIH0KKyAgZGF0YS0+a2V5X21vZGlmaWVycyA9IGN1cnJlbnRfa2V5X21vZGlmaWVyc187CisKKyAgc3dpdGNoIChkYXRhLT5rZXkpIHsKKyAgICBjYXNlIGtTYktleUxzaGlmdDoKKyAgICBjYXNlIGtTYktleUxtZW51OgorICAgIGNhc2Uga1NiS2V5TGNvbnRyb2w6CisgICAgY2FzZSBrU2JLZXlMd2luOgorICAgICAgZGF0YS0+a2V5X2xvY2F0aW9uID0ga1NiS2V5TG9jYXRpb25MZWZ0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBrU2JLZXlSc2hpZnQ6CisgICAgY2FzZSBrU2JLZXlSbWVudToKKyAgICBjYXNlIGtTYktleVJjb250cm9sOgorICAgIGNhc2Uga1NiS2V5UndpbjoKKyAgICAgIGRhdGEtPmtleV9sb2NhdGlvbiA9IGtTYktleUxvY2F0aW9uUmlnaHQ7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gbmV3IEFwcGxpY2F0aW9uOjpFdmVudChrU2JFdmVudFR5cGVJbnB1dCwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFwcGxpY2F0aW9uOjpEZWxldGVEZXN0cnVjdG9yPFNiSW5wdXREYXRhPik7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F0b21pY19wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg0MjgxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdG9taWNfcHVibGljLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FUT01JQ19QVUJMSUNfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9BVE9NSUNfUFVCTElDX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gRGVjbGFyYXRpb25zIGZvciBXaW5kb3dzIEludHJpbnNpYyBGdW5jdGlvbnMKKy8vIERlZmluZWQgaGVyZSB0byBhdm9pZCBpbmNsdWRpbmcgV2luZG93cyBoZWFkZXJzCisvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93NTQwNWg5NS5hc3B4CisKK2xvbmcgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKAorICBsb25nIHZvbGF0aWxlICogRGVzdGluYXRpb24sCisgIGxvbmcgRXhjaGFuZ2UsCisgIGxvbmcgQ29tcGFyYW5kCispOworI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQorCitfX2ludDY0IF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0KAorICBfX2ludDY0IHZvbGF0aWxlICogRGVzdGluYXRpb24sCisgIF9faW50NjQgRXhjaGFuZ2UsCisgIF9faW50NjQgQ29tcGFyYW5kCispOworI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQpCisKK2NoYXIgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlOCgKKyAgY2hhciB2b2xhdGlsZSAqIERlc3RpbmF0aW9uLAorICBjaGFyIEV4Y2hhbmdlLAorICBjaGFyIENvbXBhcmFuZAorKTsKKyNwcmFnbWEgaW50cmluc2ljKF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTgpCisKK2xvbmcgX0ludGVybG9ja2VkRXhjaGFuZ2UoCisgIGxvbmcgdm9sYXRpbGUgKiBUYXJnZXQsCisgIGxvbmcgVmFsdWUKKyk7CisjcHJhZ21hIGludHJpbnNpYyhfSW50ZXJsb2NrZWRFeGNoYW5nZSkKKworX19pbnQ2NCBfSW50ZXJsb2NrZWRFeGNoYW5nZTY0KAorICBfX2ludDY0IHZvbGF0aWxlICogVGFyZ2V0LAorICBfX2ludDY0IFZhbHVlCispOworI3ByYWdtYSBpbnRyaW5zaWMoX0ludGVybG9ja2VkRXhjaGFuZ2U2NCkKKworbG9uZyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgKKyAgbG9uZyB2b2xhdGlsZSAqIEFkZGVuZCwKKyAgbG9uZyBWYWx1ZQorKTsKKyNwcmFnbWEgaW50cmluc2ljKF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkKQorCitfX2ludDY0IF9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkNjQoCisgIF9faW50NjQgdm9sYXRpbGUgKiBBZGRlbmQsCisgIF9faW50NjQgVmFsdWUKKyk7CisjcHJhZ21hIGludHJpbnNpYyhfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KQorCit2b2lkIF9SZWFkV3JpdGVCYXJyaWVyKHZvaWQpOworI3ByYWdtYSBpbnRyaW5zaWMoX1JlYWRXcml0ZUJhcnJpZXIpCisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljMzIKK1NiQXRvbWljTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIFNiQXRvbWljMzIqIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgb2xkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWMzMiBuZXdfdmFsdWUpIHsKKyAgLy8gTm90ZSB0aGlzIGRvZXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgIHJldHVybiBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoCisgICAgICAodm9sYXRpbGUgbG9uZyopIHB0ciwgKGxvbmcpIG5ld192YWx1ZSwgKGxvbmcpIG9sZF92YWx1ZSk7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljMzIKK1NiQXRvbWljTm9CYXJyaWVyX0V4Y2hhbmdlKHZvbGF0aWxlIFNiQXRvbWljMzIqIHB0ciwgU2JBdG9taWMzMiBuZXdfdmFsdWUpIHsKKyAgLy8gTm90ZSB0aGlzIGRvZXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgIHJldHVybiBfSW50ZXJsb2NrZWRFeGNoYW5nZSgodm9sYXRpbGUgbG9uZyopcHRyLCAobG9uZyluZXdfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzMyCitTYkF0b21pY05vQmFycmllcl9JbmNyZW1lbnQodm9sYXRpbGUgU2JBdG9taWMzMiogcHRyLCBTYkF0b21pYzMyIGluY3JlbWVudCkgeworICByZXR1cm4gU2JBdG9taWNCYXJyaWVyX0luY3JlbWVudChwdHIsIGluY3JlbWVudCk7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljMzIgU2JBdG9taWNCYXJyaWVyX0luY3JlbWVudCh2b2xhdGlsZSBTYkF0b21pYzMyKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWMzMiBpbmNyZW1lbnQpIHsKKyAgLy8gTm90ZSBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkIGRvZXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgIHJldHVybiBpbmNyZW1lbnQgKyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgKKyAgICAgICh2b2xhdGlsZSBsb25nICopcHRyLCAobG9uZylpbmNyZW1lbnQpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzMyCitTYkF0b21pY0FjcXVpcmVfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgU2JBdG9taWMzMiogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgb2xkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgbmV3X3ZhbHVlKSB7CisgIC8vIE5vdGUgdGhpcyBkb2VzIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICByZXR1cm4gX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKAorICAgICAgKHZvbGF0aWxlIGxvbmcqKSBwdHIsIChsb25nKSBuZXdfdmFsdWUsIChsb25nKSBvbGRfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzMyCitTYkF0b21pY1JlbGVhc2VfQ29tcGFyZUFuZFN3YXAodm9sYXRpbGUgU2JBdG9taWMzMiogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgb2xkX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgbmV3X3ZhbHVlKSB7CisgIC8vIE5vdGUgdGhpcyBkb2VzIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICByZXR1cm4gX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKAorICAgICAgKHZvbGF0aWxlIGxvbmcqKSBwdHIsIChsb25nKSBuZXdfdmFsdWUsIChsb25nKSBvbGRfdmFsdWUpOworfQorCisvLyBOT1RFOiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2YyMHcweDVlLmFzcHgKKy8vIHN0YXRlcyBfUmVhZFdyaXRlQmFycmllcigpIGlzIGRlcHJlY2F0ZWQgYW5kCisvLyByZWNvbW1lbmRzICJhdG9taWNfdGhyZWFkX2ZlbmNlIiwgd2hpY2ggaXMgQysrMTEgYW5kIHZpb2xhdGVzCisvLyBTdGFyYm9hcmQncyAiQy1vbmx5IGhlYWRlciIgcG9saWN5CitTQl9DX0ZPUkNFX0lOTElORSB2b2lkIFNiQXRvbWljTWVtb3J5QmFycmllcigpIHsKKyAgX1JlYWRXcml0ZUJhcnJpZXIoKTsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgdm9pZCBTYkF0b21pY05vQmFycmllcl9TdG9yZSh2b2xhdGlsZSBTYkF0b21pYzMyKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgdmFsdWUpIHsKKyAgKnB0ciA9IHZhbHVlOworfQorCitTQl9DX0ZPUkNFX0lOTElORSB2b2lkIFNiQXRvbWljQWNxdWlyZV9TdG9yZSh2b2xhdGlsZSBTYkF0b21pYzMyKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzMyIHZhbHVlKSB7CisgICpwdHIgPSB2YWx1ZTsKKyAgU2JBdG9taWNNZW1vcnlCYXJyaWVyKCk7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIHZvaWQgU2JBdG9taWNSZWxlYXNlX1N0b3JlKHZvbGF0aWxlIFNiQXRvbWljMzIqIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljMzIgdmFsdWUpIHsKKyAgU2JBdG9taWNNZW1vcnlCYXJyaWVyKCk7CisgICpwdHIgPSB2YWx1ZTsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWMzMgorU2JBdG9taWNOb0JhcnJpZXJfTG9hZCh2b2xhdGlsZSBjb25zdCBTYkF0b21pYzMyKiBwdHIpIHsKKyAgcmV0dXJuICpwdHI7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljMzIKK1NiQXRvbWljQWNxdWlyZV9Mb2FkKHZvbGF0aWxlIGNvbnN0IFNiQXRvbWljMzIqIHB0cikgeworICBTYkF0b21pYzMyIHZhbHVlID0gKnB0cjsKKyAgU2JBdG9taWNNZW1vcnlCYXJyaWVyKCk7CisgIHJldHVybiB2YWx1ZTsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWMzMgorU2JBdG9taWNSZWxlYXNlX0xvYWQodm9sYXRpbGUgY29uc3QgU2JBdG9taWMzMiogcHRyKSB7CisgIFNiQXRvbWljTWVtb3J5QmFycmllcigpOworICByZXR1cm4gKnB0cjsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWM4CitTYkF0b21pY1JlbGVhc2VfQ29tcGFyZUFuZFN3YXA4KHZvbGF0aWxlIFNiQXRvbWljOCogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljOCBvbGRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWM4IG5ld192YWx1ZSkgeworICAvLyBOb3RlIHRoaXMgZG9lcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIKKyAgcmV0dXJuIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTgoKHZvbGF0aWxlIGNoYXIqKXB0ciwgbmV3X3ZhbHVlLCBvbGRfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSB2b2lkCitTYkF0b21pY05vQmFycmllcl9TdG9yZTgodm9sYXRpbGUgU2JBdG9taWM4KiBwdHIsIFNiQXRvbWljOCB2YWx1ZSkgeworICAqcHRyID0gdmFsdWU7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljOAorU2JBdG9taWNOb0JhcnJpZXJfTG9hZDgodm9sYXRpbGUgY29uc3QgU2JBdG9taWM4KiBwdHIpIHsKKyAgcmV0dXJuICpwdHI7Cit9CisKKy8vIDY0LWJpdCBhdG9taWMgb3BlcmF0aW9ucyAob25seSBhdmFpbGFibGUgb24gNjQtYml0IHByb2Nlc3NvcnMpLgorI2lmIFNCX0hBUyg2NF9CSVRfQVRPTUlDUykKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljNjQKK1NiQXRvbWljTm9CYXJyaWVyX0NvbXBhcmVBbmRTd2FwNjQodm9sYXRpbGUgU2JBdG9taWM2NCogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0IG9sZF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWM2NCBuZXdfdmFsdWUpIHsKKyAgcmV0dXJuIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0KHB0ciwgbmV3X3ZhbHVlLCBvbGRfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzY0CitTYkF0b21pY05vQmFycmllcl9FeGNoYW5nZTY0KHZvbGF0aWxlIFNiQXRvbWljNjQqIHB0ciwgU2JBdG9taWM2NCBuZXdfdmFsdWUpIHsKKyAgcmV0dXJuIF9JbnRlcmxvY2tlZEV4Y2hhbmdlNjQocHRyLCBuZXdfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzY0CitTYkF0b21pY05vQmFycmllcl9JbmNyZW1lbnQ2NCh2b2xhdGlsZSBTYkF0b21pYzY0KiBwdHIsIFNiQXRvbWljNjQgaW5jcmVtZW50KSB7CisgIHJldHVybiBpbmNyZW1lbnQgKyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KHB0ciwgaW5jcmVtZW50KTsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWM2NAorU2JBdG9taWNCYXJyaWVyX0luY3JlbWVudDY0KHZvbGF0aWxlIFNiQXRvbWljNjQqIHB0ciwgU2JBdG9taWM2NCBpbmNyZW1lbnQpIHsKKyAgLy8gTm90ZSB0aGlzIGRvZXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgIHJldHVybiBpbmNyZW1lbnQgKyBfSW50ZXJsb2NrZWRFeGNoYW5nZUFkZDY0KHB0ciwgaW5jcmVtZW50KTsKK30KKworU0JfQ19GT1JDRV9JTkxJTkUgU2JBdG9taWM2NAorU2JBdG9taWNBY3F1aXJlX0NvbXBhcmVBbmRTd2FwNjQodm9sYXRpbGUgU2JBdG9taWM2NCogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWM2NCBvbGRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0IG5ld192YWx1ZSkgeworICAvLyBOb3RlIHRoaXMgZG9lcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIKKyAgcmV0dXJuIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0KHB0ciwgbmV3X3ZhbHVlLCBvbGRfdmFsdWUpOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzY0CitTYkF0b21pY1JlbGVhc2VfQ29tcGFyZUFuZFN3YXA2NCh2b2xhdGlsZSBTYkF0b21pYzY0KiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0IG9sZF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiQXRvbWljNjQgbmV3X3ZhbHVlKSB7CisgIC8vIE5vdGUgdGhpcyBkb2VzIGEgZnVsbCBtZW1vcnkgYmFycmllcgorICByZXR1cm4gX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQocHRyLCBuZXdfdmFsdWUsIG9sZF92YWx1ZSk7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIHZvaWQgU2JBdG9taWNOb0JhcnJpZXJfU3RvcmU2NCh2b2xhdGlsZSBTYkF0b21pYzY0KiBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JBdG9taWM2NCB2YWx1ZSkgeworICAqcHRyID0gdmFsdWU7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIHZvaWQgU2JBdG9taWNBY3F1aXJlX1N0b3JlNjQodm9sYXRpbGUgU2JBdG9taWM2NCogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0IHZhbHVlKSB7CisgICpwdHIgPSB2YWx1ZTsKKyAgU2JBdG9taWNNZW1vcnlCYXJyaWVyKCk7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIHZvaWQgU2JBdG9taWNSZWxlYXNlX1N0b3JlNjQodm9sYXRpbGUgU2JBdG9taWM2NCogcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkF0b21pYzY0IHZhbHVlKSB7CisgIFNiQXRvbWljTWVtb3J5QmFycmllcigpOworICAqcHRyID0gdmFsdWU7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljNjQKK1NiQXRvbWljTm9CYXJyaWVyX0xvYWQ2NCh2b2xhdGlsZSBjb25zdCBTYkF0b21pYzY0KiBwdHIpIHsKKyAgcmV0dXJuICpwdHI7Cit9CisKK1NCX0NfRk9SQ0VfSU5MSU5FIFNiQXRvbWljNjQKK1NiQXRvbWljQWNxdWlyZV9Mb2FkNjQodm9sYXRpbGUgY29uc3QgU2JBdG9taWM2NCogcHRyKSB7CisgIFNiQXRvbWljNjQgdmFsdWUgPSAqcHRyOworICBTYkF0b21pY01lbW9yeUJhcnJpZXIoKTsKKyAgcmV0dXJuIHZhbHVlOworfQorCitTQl9DX0ZPUkNFX0lOTElORSBTYkF0b21pYzY0CitTYkF0b21pY1JlbGVhc2VfTG9hZDY0KHZvbGF0aWxlIGNvbnN0IFNiQXRvbWljNjQqIHB0cikgeworICBTYkF0b21pY01lbW9yeUJhcnJpZXIoKTsKKyAgcmV0dXJuICpwdHI7Cit9CisjZW5kaWYgIC8vIFNCX0hBUyg2NF9CSVRfQVRPTUlDUykKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FUT01JQ19QVUJMSUNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXRvbWljX3F1ZXVlLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F0b21pY19xdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjI0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F0b21pY19xdWV1ZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FUT01JQ19RVUVVRV9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FUT01JQ19RVUVVRV9IXworCisjaW5jbHVkZSA8ZGVxdWU+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCisvLyBBIHNpbXBsZSB0aHJlYWQtc2FmZSBwcm9kdWNlciAvIGNvbnN1bWVyIHF1ZXVlLiBFbGVtZW50cyBhcmUgYWRkZWQgdmlhCisvLyBQb3BCYWNrKCkgYW5kIHJlbW92ZWQgdmlhIFBvcEZyb250KCkuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KK2NsYXNzIEF0b21pY1F1ZXVlIHsKKyBwdWJsaWM6CisgIHNpemVfdCBQdXNoQmFjayhEYXRhIGRhdGFfcHRyKSB7CisgICAgU2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgZGF0YV9xdWV1ZV8ucHVzaF9iYWNrKGRhdGFfcHRyKTsKKyAgICByZXR1cm4gZGF0YV9xdWV1ZV8uc2l6ZSgpOworICB9CisKKyAgRGF0YSBQb3BGcm9udCgpIHsKKyAgICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBpZiAoZGF0YV9xdWV1ZV8uZW1wdHkoKSkgeworICAgICAgRGF0YSBlbXB0eSA9IERhdGEoKTsKKyAgICAgIHJldHVybiBlbXB0eTsKKyAgICB9CisgICAgRGF0YSBkYXRhX3B0ciA9IGRhdGFfcXVldWVfLmZyb250KCk7CisgICAgZGF0YV9xdWV1ZV8ucG9wX2Zyb250KCk7CisgICAgcmV0dXJuIGRhdGFfcHRyOworICB9CisKKyAgYm9vbCBJc0VtcHR5KCkgY29uc3QgeworICAgIFNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICAgIHJldHVybiBkYXRhX3F1ZXVlXy5lbXB0eSgpOworICB9CisKKyAgc2l6ZV90IFNpemUoKSBjb25zdCB7CisgICAgU2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgcmV0dXJuIGRhdGFfcXVldWVfLnNpemUoKTsKKyAgfQorCisgIHZvaWQgQ2xlYXIoKSB7CisgICAgU2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgc3RkOjpkZXF1ZTxEYXRhPiBlbXB0eTsKKyAgICBkYXRhX3F1ZXVlXy5zd2FwKGVtcHR5KTsKKyAgfQorCisgcHJpdmF0ZToKKyAgdXNpbmcgTXV0ZXggPSA6OnN0YXJib2FyZDo6TXV0ZXg7CisgIHVzaW5nIFNjb3BlZExvY2sgPSA6OnN0YXJib2FyZDo6U2NvcGVkTG9jazsKKyAgc3RkOjpkZXF1ZTxEYXRhPiBkYXRhX3F1ZXVlXzsKKyAgOjpzdGFyYm9hcmQ6Ok11dGV4IG11dGV4XzsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVRPTUlDX1FVRVVFX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwNDQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlci5jYwpAQCAtMCwwICsxLDE1MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2F1ZGlvX3NpbmsuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2NvbW1vbi5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworY2xhc3MgQXVkaW9EZWNvZGVyOjpDYWxsYmFja1NjaGVkdWxlciA6IHByaXZhdGUgSm9iT3duZXIgeworIHB1YmxpYzoKKyAgQ2FsbGJhY2tTY2hlZHVsZXIoKSA6IGNhbGxiYWNrX3NpZ25hbGVkXyhmYWxzZSkge30KKworICB2b2lkIFNldENhbGxiYWNrT25jZShDb25zdW1lZENCIGNiKSB7CisgICAgU0JfRENIRUNLKGNiKTsKKyAgICA6OnN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgaWYgKCFjYl8pIHsKKyAgICAgIGNiXyA9IGNiOworICAgIH0KKyAgfQorCisgIHZvaWQgU2NoZWR1bGVDYWxsYmFja0lmTmVjZXNzYXJ5KCkgeworICAgIDo6c3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBpZiAoIWNiXyB8fCBjYWxsYmFja19zaWduYWxlZF8pIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FsbGJhY2tfc2lnbmFsZWRfID0gdHJ1ZTsKKyAgICBKb2JPd25lcjo6U2NoZWR1bGUoY2JfKTsKKyAgfQorCisgIHZvaWQgT25DYWxsYmFja1NpZ25hbGVkKCkgeworICAgIDo6c3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBjYWxsYmFja19zaWduYWxlZF8gPSBmYWxzZTsKKyAgfQorCisgIENvbnN1bWVkQ0IgY2JfOworICA6OnN0YXJib2FyZDo6TXV0ZXggbXV0ZXhfOworICBib29sIGNhbGxiYWNrX3NpZ25hbGVkXzsKK307CisKK0F1ZGlvRGVjb2Rlcjo6QXVkaW9EZWNvZGVyKFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtKQorICAgIDogYXVkaW9fY29kZWNfKGF1ZGlvX2NvZGVjKSwKKyAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvXyhhdWRpb19zYW1wbGVfaW5mbyksCisgICAgICBkcm1fc3lzdGVtXyhkcm1fc3lzdGVtKSwKKyAgICAgIHNhbXBsZV90eXBlXyhrU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZUZsb2F0MzIpLAorICAgICAgc3RyZWFtX2VuZGVkXyhmYWxzZSkgeworICBTQl9EQ0hFQ0soYXVkaW9fY29kZWMgPT0ga1NiTWVkaWFBdWRpb0NvZGVjQWFjKTsKK30KKworQXVkaW9EZWNvZGVyOjp+QXVkaW9EZWNvZGVyKCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgZGVjb2Rlcl90aHJlYWRfLnJlc2V0KG51bGxwdHIpOworICBkZWNvZGVyX2ltcGxfLnJlc2V0KG51bGxwdHIpOworICBjYWxsYmFja19zY2hlZHVsZXJfLnJlc2V0KG51bGxwdHIpOworfQorCit2b2lkIEF1ZGlvRGVjb2Rlcjo6SW5pdGlhbGl6ZShjb25zdCBPdXRwdXRDQiYgb3V0cHV0X2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIFNCX0RDSEVDSyhvdXRwdXRfY2IpOworICBTQl9EQ0hFQ0soIW91dHB1dF9jYl8pOworICBvdXRwdXRfY2JfID0gb3V0cHV0X2NiOworICBkZWNvZGVyX2ltcGxfID0gQWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2Rlcjo6Q3JlYXRlKAorICAgICAgYXVkaW9fY29kZWNfLCBrU2JNZWRpYUF1ZGlvRnJhbWVTdG9yYWdlVHlwZUludGVybGVhdmVkLCBzYW1wbGVfdHlwZV8sCisgICAgICBhdWRpb19zYW1wbGVfaW5mb18sIGRybV9zeXN0ZW1fKTsKKyAgZGVjb2Rlcl90aHJlYWRfLnJlc2V0KG5ldyBBdWRpb0RlY29kZXJUaHJlYWQoZGVjb2Rlcl9pbXBsXy5nZXQoKSwgdGhpcykpOworICBjYWxsYmFja19zY2hlZHVsZXJfLnJlc2V0KG5ldyBDYWxsYmFja1NjaGVkdWxlcigpKTsKK30KKwordm9pZCBBdWRpb0RlY29kZXI6OkRlY29kZShjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgaW5wdXRfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25zdW1lZENCJiBjb25zdW1lZF9jYikgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgIFNCX0RDSEVDSyhpbnB1dF9idWZmZXIpOworCisgIGNhbGxiYWNrX3NjaGVkdWxlcl8tPlNldENhbGxiYWNrT25jZShjb25zdW1lZF9jYik7CisgIGNhbGxiYWNrX3NjaGVkdWxlcl8tPk9uQ2FsbGJhY2tTaWduYWxlZCgpOworICBjb25zdCBib29sIGNhbl90YWtlX21vcmVfZGF0YSA9IGRlY29kZXJfdGhyZWFkXy0+UXVldWVJbnB1dChpbnB1dF9idWZmZXIpOworICBpZiAoY2FuX3Rha2VfbW9yZV9kYXRhKSB7CisgICAgY2FsbGJhY2tfc2NoZWR1bGVyXy0+U2NoZWR1bGVDYWxsYmFja0lmTmVjZXNzYXJ5KCk7CisgIH0KKworICBpZiAoc3RyZWFtX2VuZGVkXykgeworICAgIFNCX0xPRyhFUlJPUikgPDwgIkRlY29kZSgpIGlzIGNhbGxlZCBhZnRlciBXcml0ZUVuZE9mU3RyZWFtKCkgaXMgY2FsbGVkLiI7CisgICAgcmV0dXJuOworICB9Cit9CisKK3ZvaWQgQXVkaW9EZWNvZGVyOjpXcml0ZUVuZE9mU3RyZWFtKCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgOjpzdGFyYm9hcmQ6OlNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICBzdHJlYW1fZW5kZWRfID0gdHJ1ZTsKKyAgZGVjb2Rlcl90aHJlYWRfLT5RdWV1ZUVuZE9mU3RyZWFtKCk7Cit9CisKK3Njb3BlZF9yZWZwdHI8QXVkaW9EZWNvZGVyOjpEZWNvZGVkQXVkaW8+IEF1ZGlvRGVjb2Rlcjo6UmVhZCgKKyAgICBpbnQqIHNhbXBsZXNfcGVyX3NlY29uZCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgRGVjb2RlZEF1ZGlvUHRyIGRhdGEgPSBkZWNvZGVkX2RhdGFfLlBvcEZyb250KCk7CisgIFNCX0RDSEVDSyhkYXRhKTsKKyAgKnNhbXBsZXNfcGVyX3NlY29uZCA9IGRlY29kZXJfaW1wbF8tPkdldFNhbXBsZXNQZXJTZWNvbmQoKTsKKyAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgQXVkaW9EZWNvZGVyOjpSZXNldCgpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIGRlY29kZXJfdGhyZWFkXy5yZXNldChudWxscHRyKTsKKyAgZGVjb2Rlcl9pbXBsXy0+UmVzZXQoKTsKKworICBkZWNvZGVkX2RhdGFfLkNsZWFyKCk7CisgIHN0cmVhbV9lbmRlZF8gPSBmYWxzZTsKKyAgY2FsbGJhY2tfc2NoZWR1bGVyXy5yZXNldChuZXcgQ2FsbGJhY2tTY2hlZHVsZXIoKSk7CisgIENhbmNlbFBlbmRpbmdKb2JzKCk7CisKKyAgZGVjb2Rlcl90aHJlYWRfLnJlc2V0KG5ldyBBdWRpb0RlY29kZXJUaHJlYWQoZGVjb2Rlcl9pbXBsXy5nZXQoKSwgdGhpcykpOworfQorCit2b2lkIEF1ZGlvRGVjb2Rlcjo6T25BdWRpb0RlY29kZWQoRGVjb2RlZEF1ZGlvUHRyIGRhdGEpIHsKKyAgZGVjb2RlZF9kYXRhXy5QdXNoQmFjayhkYXRhKTsKKyAgaWYgKG91dHB1dF9jYl8pIHsKKyAgICBTY2hlZHVsZShvdXRwdXRfY2JfKTsKKyAgfQorICBjYWxsYmFja19zY2hlZHVsZXJfLT5TY2hlZHVsZUNhbGxiYWNrSWZOZWNlc3NhcnkoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXIuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjMxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXIuaApAQCAtMCwwICsxLDc5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9BVURJT19ERUNPREVSX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVESU9fREVDT0RFUl9IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9yZWZfY291bnRlZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2RybS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3V0aWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZGVjb2RlZF9hdWRpb19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fZGVjb2Rlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9qb2JfcXVldWUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXRvbWljX3F1ZXVlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyX3RocmVhZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfY29tbW9uLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitjbGFzcyBBdWRpb0RlY29kZXIKKyAgICA6IHB1YmxpYyA6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6ZmlsdGVyOjpBdWRpb0RlY29kZXIsCisgICAgICBwcml2YXRlIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpKb2JRdWV1ZTo6Sm9iT3duZXIsCisgICAgICBwcml2YXRlIEF1ZGlvRGVjb2RlZENhbGxiYWNrIHsKKyBwdWJsaWM6CisgIEF1ZGlvRGVjb2RlcihTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKKyAgICAgICAgICAgICAgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8mIGF1ZGlvX3NhbXBsZV9pbmZvLAorICAgICAgICAgICAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSk7CisgIH5BdWRpb0RlY29kZXIoKSBvdmVycmlkZTsKKworICB2b2lkIEluaXRpYWxpemUoY29uc3QgT3V0cHV0Q0ImIG91dHB1dF9jYiwgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IpIG92ZXJyaWRlOworICB2b2lkIERlY29kZShjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgaW5wdXRfYnVmZmVyLAorICAgICAgICAgICAgICBjb25zdCBDb25zdW1lZENCJiBjb25zdW1lZF9jYikgb3ZlcnJpZGU7CisgIHZvaWQgV3JpdGVFbmRPZlN0cmVhbSgpIG92ZXJyaWRlOworICBzY29wZWRfcmVmcHRyPERlY29kZWRBdWRpbz4gUmVhZChpbnQqIHNhbXBsZXNfcGVyX3NlY29uZCkgb3ZlcnJpZGU7CisgIHZvaWQgUmVzZXQoKSBvdmVycmlkZTsKKyAgdm9pZCBPbkF1ZGlvRGVjb2RlZChEZWNvZGVkQXVkaW9QdHIgZGF0YSkgb3ZlcnJpZGU7CisKKyBwcml2YXRlOgorICBjbGFzcyBDYWxsYmFja1NjaGVkdWxlcjsKKworICA6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOworCisgIGNvbnN0IFNiTWVkaWFBdWRpb0NvZGVjIGF1ZGlvX2NvZGVjXzsKKyAgY29uc3Qgc3RhcmJvYXJkOjptZWRpYTo6QXVkaW9TYW1wbGVJbmZvIGF1ZGlvX3NhbXBsZV9pbmZvXzsKKyAgU2JEcm1TeXN0ZW0gY29uc3QgZHJtX3N5c3RlbV87CisgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZVR5cGUgc2FtcGxlX3R5cGVfOworICBib29sIHN0cmVhbV9lbmRlZF87CisKKyAgQXRvbWljUXVldWU8RGVjb2RlZEF1ZGlvUHRyPiBkZWNvZGVkX2RhdGFfOworICBzY29wZWRfcHRyPEF1ZGlvRGVjb2Rlcjo6Q2FsbGJhY2tTY2hlZHVsZXI+IGNhbGxiYWNrX3NjaGVkdWxlcl87CisgIHNjb3BlZF9wdHI8QWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2Rlcj4gZGVjb2Rlcl9pbXBsXzsKKyAgc2NvcGVkX3B0cjxBdWRpb0RlY29kZXJUaHJlYWQ+IGRlY29kZXJfdGhyZWFkXzsKKyAgT3V0cHV0Q0Igb3V0cHV0X2NiXzsKKworICBNdXRleCBtdXRleF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FVRElPX0RFQ09ERVJfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlcl90aHJlYWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXJfdGhyZWFkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYmRiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXJfdGhyZWFkLmNjCkBAIC0wLDAgKzEsMTMwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXJfdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworbmFtZXNwYWNlIHsKKworLy8gU2l6ZSBvZiB0aGUgcXVldWUgZm9yIGF1ZGlvIHVuaXRzLgorY29uc3Qgc2l6ZV90IGtNYXhQcm9jZXNzaW5nRWxlbWVudHMgPSA2NDsKKworc2l6ZV90IFdyaXRlQXNNdWNoQXNQb3NzaWJsZSgKKyAgICBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+ID4qIGRhdGFfcXVldWUsCisgICAgQWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2RlciogYXVkaW9fZGVjb2RlcikgeworICBjb25zdCBzaXplX3Qgb3JpZ2luYWxfc2l6ZSA9IGRhdGFfcXVldWUtPnNpemUoKTsKKyAgd2hpbGUgKCFkYXRhX3F1ZXVlLT5lbXB0eSgpKSB7CisgICAgc2NvcGVkX3JlZnB0cjxJbnB1dEJ1ZmZlcj4gYnVmZiA9IGRhdGFfcXVldWUtPmZyb250KCk7CisgICAgZGF0YV9xdWV1ZS0+cG9wX2Zyb250KCk7CisKKyAgICBpZiAoYnVmZikgeworICAgICAgaWYgKCFhdWRpb19kZWNvZGVyLT5UcnlXcml0ZShidWZmKSkgeworICAgICAgICBkYXRhX3F1ZXVlLT5wdXNoX2Zyb250KGJ1ZmYpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYXVkaW9fZGVjb2Rlci0+V3JpdGVFbmRPZlN0cmVhbSgpOworICAgIH0KKyAgfQorICByZXR1cm4gb3JpZ2luYWxfc2l6ZSAtIGRhdGFfcXVldWUtPnNpemUoKTsKK30KKworc3RkOjp2ZWN0b3I8RGVjb2RlZEF1ZGlvUHRyPiBSZWFkQWxsRGVjb2RlZEF1ZGlvU2FtcGxlcygKKyAgICBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyKiBhdWRpb19kZWNvZGVyKSB7CisgIHN0ZDo6dmVjdG9yPERlY29kZWRBdWRpb1B0cj4gZGVjb2RlZF9hdWRpb19vdXQ7CisgIHdoaWxlIChEZWNvZGVkQXVkaW9QdHIgZGVjb2RlZF9kYXR1bSA9IGF1ZGlvX2RlY29kZXItPlByb2Nlc3NBbmRSZWFkKCkpIHsKKyAgICBkZWNvZGVkX2F1ZGlvX291dC5wdXNoX2JhY2soZGVjb2RlZF9kYXR1bSk7CisgIH0KKyAgcmV0dXJuIGRlY29kZWRfYXVkaW9fb3V0OworfQorCit9ICAvLyBuYW1lc3BhY2UuCisKK0F1ZGlvRGVjb2RlclRocmVhZDo6QXVkaW9EZWNvZGVyVGhyZWFkKEFic3RyYWN0V2luMzJBdWRpb0RlY29kZXIqIGRlY29kZXJfaW1wbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvRGVjb2RlZENhbGxiYWNrKiBjYWxsYmFjaykKKyAgICA6IFRocmVhZCgiQXVkaW9EZWNvZGVyVGhkIiksCisgICAgICB3aW4zMl9hdWRpb19kZWNvZGVyXyhkZWNvZGVyX2ltcGwpLAorICAgICAgY2FsbGJhY2tfKGNhbGxiYWNrKSB7CisgIFN0YXJ0KCk7Cit9CisKK0F1ZGlvRGVjb2RlclRocmVhZDo6fkF1ZGlvRGVjb2RlclRocmVhZCgpIHsKKyAgSm9pbigpOworfQorCitib29sIEF1ZGlvRGVjb2RlclRocmVhZDo6UXVldWVJbnB1dChjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgYnVmZmVyKSB7CisgIHsKKyAgICA6OnN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKGlucHV0X2J1ZmZlcl9xdWV1ZV9tdXRleF8pOworICAgIGlucHV0X2J1ZmZlcl9xdWV1ZV8ucHVzaF9iYWNrKGJ1ZmZlcik7CisgIH0KKworICAvLyBpbmNyZW1lbnQoKSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZS4KKyAgc2l6ZV90IGVsZW1lbnRfY291bnQgPSBwcm9jZXNzaW5nX2VsZW1lbnRzXy5pbmNyZW1lbnQoKSArIDE7CisgIHNlbWFwaG9yZV8uUHV0KCk7CisgIHJldHVybiBlbGVtZW50X2NvdW50IDwga01heFByb2Nlc3NpbmdFbGVtZW50czsKK30KKwordm9pZCBBdWRpb0RlY29kZXJUaHJlYWQ6OlF1ZXVlRW5kT2ZTdHJlYW0oKSB7CisgIHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+IGVtcHR5OworICBRdWV1ZUlucHV0KGVtcHR5KTsKK30KKwordm9pZCBBdWRpb0RlY29kZXJUaHJlYWQ6OlJ1bigpIHsKKyAgc3RkOjpkZXF1ZTxzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiA+IGxvY2FsX3F1ZXVlOworCisgIHdoaWxlICgham9pbl9jYWxsZWQoKSkgeworICAgIGlmIChsb2NhbF9xdWV1ZS5lbXB0eSgpKSB7CisgICAgICBUcmFuc2ZlclBlbmRpbmdJbnB1dFRvKCZsb2NhbF9xdWV1ZSk7CisgICAgfQorICAgIGJvb2wgd29ya19kb25lID0gZmFsc2U7CisgICAgc2l6ZV90IG51bWJlcl93cml0dGVuID0KKyAgICAgICAgV3JpdGVBc011Y2hBc1Bvc3NpYmxlKCZsb2NhbF9xdWV1ZSwgd2luMzJfYXVkaW9fZGVjb2Rlcl8pOworICAgIGlmIChudW1iZXJfd3JpdHRlbiA+IDApIHsKKyAgICAgIHByb2Nlc3NpbmdfZWxlbWVudHNfLmZldGNoX3N1YihzdGF0aWNfY2FzdDxpbnQzMl90PihudW1iZXJfd3JpdHRlbikpOworICAgICAgd29ya19kb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGQ6OnZlY3RvcjxEZWNvZGVkQXVkaW9QdHI+IGRlY29kZWRfYXVkaW8gPQorICAgICAgICBSZWFkQWxsRGVjb2RlZEF1ZGlvU2FtcGxlcyh3aW4zMl9hdWRpb19kZWNvZGVyXyk7CisKKyAgICBpZiAoIWRlY29kZWRfYXVkaW8uZW1wdHkoKSkgeworICAgICAgd29ya19kb25lID0gdHJ1ZTsKKyAgICAgIGZvciAoYXV0byBpdCA9IGRlY29kZWRfYXVkaW8uYmVnaW4oKTsgaXQgIT0gZGVjb2RlZF9hdWRpby5lbmQoKTsgKytpdCkgeworICAgICAgICBjYWxsYmFja18tPk9uQXVkaW9EZWNvZGVkKCppdCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF3b3JrX2RvbmUpIHsKKyAgICAgIHNlbWFwaG9yZV8uVGFrZVdhaXQoa1NiVGltZU1pbGxpc2Vjb25kKTsKKyAgICB9CisgIH0KK30KKwordm9pZCBBdWRpb0RlY29kZXJUaHJlYWQ6OlRyYW5zZmVyUGVuZGluZ0lucHV0VG8oCisgICAgc3RkOjpkZXF1ZTxzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiA+KiBkZXN0aW5hdGlvbikgeworICA6OnN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKGlucHV0X2J1ZmZlcl9xdWV1ZV9tdXRleF8pOworICB3aGlsZSAoIWlucHV0X2J1ZmZlcl9xdWV1ZV8uZW1wdHkoKSkgeworICAgIGRlc3RpbmF0aW9uLT5wdXNoX2JhY2soaW5wdXRfYnVmZmVyX3F1ZXVlXy5mcm9udCgpKTsKKyAgICBpbnB1dF9idWZmZXJfcXVldWVfLnBvcF9mcm9udCgpOworICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyX3RocmVhZC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyX3RocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjBkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXJfdGhyZWFkLmgKQEAgLTAsMCArMSw3MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVESU9fREVDT0RFUl9USFJFQURfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9BVURJT19ERUNPREVSX1RIUkVBRF9IXworCisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8cXVldWU+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zZW1hcGhvcmUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3RocmVhZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9kZWNvZGVkX2F1ZGlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9hdWRpb19kZWNvZGVyX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbjMyX2F1ZGlvX2RlY29kZXIuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2NsYXNzIEF1ZGlvRGVjb2RlZENhbGxiYWNrIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgfkF1ZGlvRGVjb2RlZENhbGxiYWNrKCkge30KKyAgdmlydHVhbCB2b2lkIE9uQXVkaW9EZWNvZGVkKERlY29kZWRBdWRpb1B0ciBkYXRhKSA9IDA7Cit9OworCisvLyBUaGlzIGRlY29kZXIgdGhyZWFkIHNpbXBsaWZpZXMgZGVjb2RpbmcgbWVkaWEuIERhdGEgaXMgcHVzaGVkIGluIHZpYQorLy8gUXVldWVJbnB1dCgpIGFuZCBRdWV1ZUVuZE9mU3RyZWFtKCkgYW5kIG91dHB1dCBkYXRhIGlzIHB1c2hlZCB2aWEKKy8vIHRoZSBBdWRpb0RlY29kZWRDYWxsYmFjay4KK2NsYXNzIEF1ZGlvRGVjb2RlclRocmVhZCA6IHByaXZhdGUgVGhyZWFkIHsKKyBwdWJsaWM6CisgIEF1ZGlvRGVjb2RlclRocmVhZChBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyKiBkZWNvZGVyX2ltcGwsCisgICAgICAgICAgICAgICAgICAgICBBdWRpb0RlY29kZWRDYWxsYmFjayogY2FsbGJhY2spOworICB+QXVkaW9EZWNvZGVyVGhyZWFkKCkgb3ZlcnJpZGU7CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIG1vcmUgaW5wdXQgY2FuIGJlIHB1c2hlZCB0byB0aGlzIHRocmVhZC4KKyAgYm9vbCBRdWV1ZUlucHV0KGNvbnN0IHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+JiBidWZmZXIpOworICB2b2lkIFF1ZXVlRW5kT2ZTdHJlYW0oKTsKKworIHByaXZhdGU6CisgIHZvaWQgUnVuKCkgb3ZlcnJpZGU7CisgIHZvaWQgVHJhbnNmZXJQZW5kaW5nSW5wdXRUbygKKyAgICAgIHN0ZDo6ZGVxdWU8c2NvcGVkX3JlZnB0cjxJbnB1dEJ1ZmZlcj4gPiogZGVzdGluYXRpb24pOworICBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyKiB3aW4zMl9hdWRpb19kZWNvZGVyXzsKKyAgQXVkaW9EZWNvZGVkQ2FsbGJhY2sqIGNhbGxiYWNrXzsKKworICBzdGQ6OmRlcXVlPHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+ID4gaW5wdXRfYnVmZmVyX3F1ZXVlXzsKKyAgOjpzdGFyYm9hcmQ6Ok11dGV4IGlucHV0X2J1ZmZlcl9xdWV1ZV9tdXRleF87CisgIGF0b21pY19pbnQzMl90IHByb2Nlc3NpbmdfZWxlbWVudHNfOworICBTZW1hcGhvcmUgc2VtYXBob3JlXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVESU9fREVDT0RFUl9USFJFQURfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2luay5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2luay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2QzOGNiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rLmNjCkBAIC0wLDAgKzEsNjE3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlIDxiYXNldHlwcy5oPgorI2luY2x1ZGUgPHdybC5oPgorI2luY2x1ZGUgPHhhdWRpbzIuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8bGlzdD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9hdG9taWMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2NvbmRpdGlvbl92YXJpYWJsZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2pvYl90aHJlYWQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKK25hbWVzcGFjZSB7CisKK3VzaW5nIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI7CisKK2NvbnN0IGludCBrTWF4QnVmZmVyc1N1Ym1pdHRlZFBlckxvb3AgPSAyOworCisvLyBGYWlscyBhbiBTQl9EQ0hFQ0sgaWYgYW4gSFJFU1VMVCBpcyBub3QgU19PSwordm9pZCBDSEVDS19IUkVTVUxUX09LKEhSRVNVTFQgaHIpIHsKKyAgU0JfRENIRUNLKFNVQ0NFRURFRChocikpIDw8IHN0ZDo6aGV4IDw8IGhyOworfQorCitXT1JEIFNhbXBsZVR5cGVUb0Zvcm1hdFRhZyhTYk1lZGlhQXVkaW9TYW1wbGVUeXBlIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7CisjaWYgU0JfSEFTX1FVSVJLKFNVUFBPUlRfSU5UMTZfQVVESU9fU0FNUExFUykKKyAgICBjYXNlIGtTYk1lZGlhQXVkaW9TYW1wbGVUeXBlSW50MTY6CisgICAgICByZXR1cm4gV0FWRV9GT1JNQVRfUENNOworI2VuZGlmICAvLyBTQl9IQVNfUVVJUksoU1VQUE9SVF9JTlQxNl9BVURJT19TQU1QTEVTKQorICAgIGNhc2Uga1NiTWVkaWFBdWRpb1NhbXBsZVR5cGVGbG9hdDMyOgorICAgICAgcmV0dXJuIFdBVkVfRk9STUFUX0lFRUVfRkxPQVQ7CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKTsKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKK1dPUkQgU2FtcGxlVHlwZVRvQml0c1BlclNhbXBsZShTYk1lZGlhQXVkaW9TYW1wbGVUeXBlIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7CisjaWYgU0JfSEFTX1FVSVJLKFNVUFBPUlRfSU5UMTZfQVVESU9fU0FNUExFUykKKyAgICBjYXNlIGtTYk1lZGlhQXVkaW9TYW1wbGVUeXBlSW50MTY6CisgICAgICByZXR1cm4gMTY7CisjZW5kaWYgIC8vIFNCX0hBU19RVUlSSyhTVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVMpCisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZUZsb2F0MzI6CisgICAgICByZXR1cm4gMzI7CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKTsKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKK2NsYXNzIFhBdWRpb0F1ZGlvU2lua1R5cGU7CisKK2NsYXNzIFhBdWRpb0F1ZGlvU2luayA6IHB1YmxpYyBTYkF1ZGlvU2lua1ByaXZhdGUgeworIHB1YmxpYzoKKyAgWEF1ZGlvQXVkaW9TaW5rKFhBdWRpb0F1ZGlvU2lua1R5cGUqIHR5cGUsCisgICAgICAgICAgICAgICAgICBJWEF1ZGlvMlNvdXJjZVZvaWNlKiBzb3VyY2Vfdm9pY2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBXQVZFRk9STUFURVgmIHdmeCwKKyAgICAgICAgICAgICAgICAgIFNiQXVkaW9TaW5rRnJhbWVCdWZmZXJzIGZyYW1lX2J1ZmZlcnMsCisgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKKyAgICAgICAgICAgICAgICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAorICAgICAgICAgICAgICAgICAgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKKyAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpOworICB+WEF1ZGlvQXVkaW9TaW5rKCkgb3ZlcnJpZGV7fTsKKworICB2b2lkIFNldFNvdXJjZVZvaWNlKElYQXVkaW8yU291cmNlVm9pY2UqIHNvdXJjZV92b2ljZSkgeworICAgIHNvdXJjZV92b2ljZV8gPSBzb3VyY2Vfdm9pY2U7CisgICAgc2FtcGxlc19wbGF5ZWRfID0gMDsKKyAgICBzdWJtaXR0ZWRfZnJhbWVzXyA9IDA7CisgICAgaWYgKHNvdXJjZV92b2ljZV8pIHsKKyAgICAgIENIRUNLX0hSRVNVTFRfT0soc291cmNlX3ZvaWNlXy0+U3RhcnQoMCkpOworICAgICAgU2JBdG9taWNSZWxlYXNlX1N0b3JlKCZzdG9wX2NhbGxiYWNrc18sIDApOworICAgIH0KKyAgfQorCisgIGJvb2wgSXNUeXBlKFR5cGUqIHR5cGUpIG92ZXJyaWRlOworICB2b2lkIFNldFBsYXliYWNrUmF0ZShkb3VibGUgcGxheWJhY2tfcmF0ZSkgb3ZlcnJpZGUgeworICAgIFNCX0RDSEVDSyhwbGF5YmFja19yYXRlID49IDAuMCk7CisgICAgaWYgKHBsYXliYWNrX3JhdGUgIT0gMC4wICYmIHBsYXliYWNrX3JhdGUgIT0gMS4wKSB7CisgICAgICBTQl9OT1RJTVBMRU1FTlRFRCgpIDw8ICJUT0RPOiBPbmx5IHBsYXliYWNrIHJhdGVzIG9mIDAuMCBhbmQgMS4wIGFyZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50bHkgc3VwcG9ydGVkLiI7CisgICAgICBwbGF5YmFja19yYXRlID0gKHBsYXliYWNrX3JhdGUgPiAwLjApID8gMS4wIDogMC4wOworICAgIH0KKyAgICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBwbGF5YmFja19yYXRlXyA9IHBsYXliYWNrX3JhdGU7CisgIH0KKyAgdm9pZCBTZXRWb2x1bWUoZG91YmxlIHZvbHVtZSkgb3ZlcnJpZGUgeworICAgIFNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICAgIHZvbHVtZV8gPSB2b2x1bWU7CisgIH0KKyAgdm9pZCBQcm9jZXNzKCk7CisKKyAgdm9pZCBTdG9wQ2FsbGJhY2tzKCkgeworICAgIFNiQXRvbWljQmFycmllcl9JbmNyZW1lbnQoJnN0b3BfY2FsbGJhY2tzXywgMSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IGNhbGwgdG8gUHJvY2VzcygpIHJldHVybnMgc28gd2Uga25vdyB0aGF0CisgICAgLy8gbm8gZnV0dXJlIGNhbGxiYWNrcyB3aWxsIGJlIGludm9rZWQuCisgICAgcHJvY2Vzc19tdXRleF8uQWNxdWlyZSgpOworICAgIHByb2Nlc3NfbXV0ZXhfLlJlbGVhc2UoKTsKKworICAgIC8vIFRoaXMgbXVzdCBoYXBwZW4gb24gYSBub24tWEF1ZGlvIGNhbGxiYWNrIHRocmVhZC4KKyAgICBpZiAoc291cmNlX3ZvaWNlXykgeworICAgICAgc291cmNlX3ZvaWNlXy0+RGVzdHJveVZvaWNlKCk7CisgICAgfQorICB9CisgIGNvbnN0IFdBVkVGT1JNQVRFWCYgR2V0V2F2ZUZvcm1hdEV4KCkgY29uc3QgeyByZXR1cm4gd2Z4XzsgfQorCisgcHJpdmF0ZToKKyAgYm9vbCBBcmVDYWxsYmFja3NTdG9wcGVkKCkgY29uc3QgeworICAgIHJldHVybiBTYkF0b21pY0FjcXVpcmVfTG9hZCgmc3RvcF9jYWxsYmFja3NfKSAhPSAwOworICB9CisgIHZvaWQgU3VibWl0U291cmNlQnVmZmVyKGludCBvZmZzZXRfaW5fZnJhbWVzLCBpbnQgY291bnRfZnJhbWVzKTsKKworICAvLyBJZiB0cnVlLCB0aGlzIGluc3RhbmNlJ3Mgc291cmNlX3ZvaWNlXyBoYXMgYmVlbiBkZXN0cm95ZWQgYW5kCisgIC8vIGZ1dHVyZSBQcm9jZXNzKCkgY2FsbHMgc2hvdWxkIHJldHVybiBpbW1lZGlhdGVseS4KKyAgU2JBdG9taWMzMiBzdG9wX2NhbGxiYWNrc187CisKKyAgWEF1ZGlvQXVkaW9TaW5rVHlwZSogY29uc3QgdHlwZV87CisgIGNvbnN0IFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jXzsKKyAgY29uc3QgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuY187CisgIHZvaWQqIGNvbnN0IGNvbnRleHRfOworCisgIFNiQXVkaW9TaW5rRnJhbWVCdWZmZXJzIGZyYW1lX2J1ZmZlcnNfOworICBjb25zdCBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lc187CisgIGNvbnN0IFdBVkVGT1JNQVRFWCB3ZnhfOworCisgIC8vIE5vdGU6IGRlc3BpdGUgc29tZSBkb2N1bWVudGF0aW9uIHRvIHRoZSBjb250cmFyeSwgaXQgYXBwZWFycworICAvLyB0aGF0IElYQXVkaW8yU291cmNlVm9pY2UgY2Fubm90IGJlIGEgQ29tUHRyLgorICBJWEF1ZGlvMlNvdXJjZVZvaWNlKiBzb3VyY2Vfdm9pY2VfOworCisgIC8vIHxwcm9jZXNzX211dGV4X3wgaXMgaGVsZCBkdXJpbmcgUHJvY2Vzcy4gT3RoZXJzIG1heSByYXBpZGx5CisgIC8vIGFjcXVpcmUvcmVsZWFzZSB0byBlbnN1cmUgdGhleSB3YWl0IHVudGlsIHRoZSBjdXJyZW50IFByb2Nlc3MoKSBlbmRzLgorICBNdXRleCBwcm9jZXNzX211dGV4XzsKKyAgLy8gfG11dGV4X3wgcHJvdGVjdHMgfHBsYXliYWNrX3JhdGVffCBhbmQgfHZvbHVtZV98LgorICBNdXRleCBtdXRleF87CisgIGRvdWJsZSBwbGF5YmFja19yYXRlXzsKKyAgZG91YmxlIHZvbHVtZV87CisgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgaW5zaWRlIFByb2Nlc3MoKS4gIFRvIGtlZXAgaXQgaW4gdGhlCisgIC8vIGNsYXNzIHNpbXBseSB0byBhbGxvdyB0aGVtIHRvIGJlIGtlcHQgYmV0d2VlbiBQcm9jZXNzKCkgY2FsbHMuCisgIGludCBzdWJtaXR0ZWRfZnJhbWVzXzsKKyAgaW50IHNhbXBsZXNfcGxheWVkXzsKKyAgaW50IHF1ZXVlZF9idWZmZXJzXzsKKyAgYm9vbCB3YXNfcGxheWluZ187CisgIGRvdWJsZSBjdXJyZW50X3ZvbHVtZV87Cit9OworCitjbGFzcyBYQXVkaW9BdWRpb1NpbmtUeXBlIDogcHVibGljIFNiQXVkaW9TaW5rUHJpdmF0ZTo6VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIElYQXVkaW8yRW5naW5lQ2FsbGJhY2sgeworIHB1YmxpYzoKKyAgWEF1ZGlvQXVkaW9TaW5rVHlwZSgpOworCisgIENvbVB0cjxJWEF1ZGlvMj4gWEF1ZGlvQ3JlYXRlKCk7CisKKyAgU2JBdWRpb1NpbmsgQ3JlYXRlKAorICAgICAgaW50IGNoYW5uZWxzLAorICAgICAgaW50IHNhbXBsaW5nX2ZyZXF1ZW5jeV9oeiwKKyAgICAgIFNiTWVkaWFBdWRpb1NhbXBsZVR5cGUgYXVkaW9fc2FtcGxlX3R5cGUsCisgICAgICBTYk1lZGlhQXVkaW9GcmFtZVN0b3JhZ2VUeXBlIGF1ZGlvX2ZyYW1lX3N0b3JhZ2VfdHlwZSwKKyAgICAgIFNiQXVkaW9TaW5rRnJhbWVCdWZmZXJzIGZyYW1lX2J1ZmZlcnMsCisgICAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKKyAgICAgIFNiQXVkaW9TaW5rVXBkYXRlU291cmNlU3RhdHVzRnVuYyB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jLAorICAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpDb25zdW1lRnJhbWVzRnVuYyBjb25zdW1lX2ZyYW1lc19mdW5jLAorICAgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpFcnJvckZ1bmMgZXJyb3JfZnVuYywKKyAgICAgIHZvaWQqIGNvbnRleHQpOworCisgIGJvb2wgSXNWYWxpZChTYkF1ZGlvU2luayBhdWRpb19zaW5rKSBvdmVycmlkZSB7CisgICAgcmV0dXJuIGF1ZGlvX3NpbmsgIT0ga1NiQXVkaW9TaW5rSW52YWxpZCAmJiBhdWRpb19zaW5rLT5Jc1R5cGUodGhpcyk7CisgIH0KKworICB2b2lkIERlc3Ryb3koU2JBdWRpb1NpbmsgYXVkaW9fc2luaykgb3ZlcnJpZGU7CisKKyBwcml2YXRlOgorICB2b2lkIFJlc3RhcnRBdWRpb0RldmljZSgpOworICB2b2lkIFRyeUFjcXVpcmVTaW5rVm9pY2VzKCk7CisgIC8vIElYQXVkaW8yRW5naW5lQ2FsbGJhY2sgbWV0aG9kcworICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHBlcmlvZGljYWxseSB3aXRoIGFuIGludGVydmFsIG9mIH4xMG1zLgorICB2b2lkIE9uUHJvY2Vzc2luZ1Bhc3NTdGFydCgpIG92ZXJyaWRlOworICB2b2lkIE9uUHJvY2Vzc2luZ1Bhc3NFbmQoKSBvdmVycmlkZSB7fQorICB2b2lkIE9uQ3JpdGljYWxFcnJvcihIUkVTVUxUIGhyKSB7CisgICAgU0JfTE9HKElORk8pIDw8ICJPbkNyaXRpY2FsRXJyb3IoKSBjYWxsZWQgd2l0aCBjb2RlICIgPDwgaHI7CisKKyAgICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgICAgLy8gVGhlIHRocmVhZCBpZCBvZiBjYWxsYmFja3Mgd2lsbCBiZSBjaGFuZ2VkIGFmdGVyIE9uQ3JpdGljYWxFcnJvcigpIGNhbGwuCisgICAgdGhyZWFkX2NoZWNrZXJfLkRldGFjaCgpOworCisgICAgaWYgKHNpbmtfc2h1dGRvd25faW5fcHJvZ3Jlc3NfKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNpbmtfc2h1dGRvd25faW5fcHJvZ3Jlc3NfID0gdHJ1ZTsKKworICAgIHhfYXVkaW8yXy0+VW5yZWdpc3RlckZvckNhbGxiYWNrcyh0aGlzKTsKKworICAgIGZvciAoWEF1ZGlvQXVkaW9TaW5rKiBzaW5rIDogYXVkaW9fc2lua3Nfb25feGF1ZGlvX2NhbGxiYWNrc18pIHsKKyAgICAgIHNpbmstPlN0b3BDYWxsYmFja3MoKTsKKyAgICB9CisKKyAgICByZXN0YXJ0X2F1ZGlvX3RocmVhZF8uam9iX3F1ZXVlKCktPlNjaGVkdWxlKAorICAgICAgICBzdGQ6OmJpbmQoJlhBdWRpb0F1ZGlvU2lua1R5cGU6OlJlc3RhcnRBdWRpb0RldmljZSwgdGhpcykpOworICB9CisKKyAgdm9pZCBQcm9jZXNzU2lua3NUb0FkZCgpIHsKKyAgICBpZiAoIWF1ZGlvX3NpbmtzX3RvX2FkZF8uZW1wdHkoKSkgeworICAgICAgYXVkaW9fc2lua3Nfb25feGF1ZGlvX2NhbGxiYWNrc18uaW5zZXJ0KAorICAgICAgICAgIGF1ZGlvX3NpbmtzX29uX3hhdWRpb19jYWxsYmFja3NfLmVuZCgpLCBhdWRpb19zaW5rc190b19hZGRfLmJlZ2luKCksCisgICAgICAgICAgYXVkaW9fc2lua3NfdG9fYWRkXy5lbmQoKSk7CisgICAgICBhdWRpb19zaW5rc190b19hZGRfLmNsZWFyKCk7CisgICAgfQorICB9CisKKyAgdm9pZCBQcm9jZXNzU2lua3NUb0RlbGV0ZSgpIHsKKyAgICBpZiAoIWF1ZGlvX3NpbmtzX3RvX2RlbGV0ZV8uZW1wdHkoKSkgeworICAgICAgZm9yIChhdXRvIHNpbmsgOiBhdWRpb19zaW5rc190b19kZWxldGVfKSB7CisgICAgICAgIGF1ZGlvX3NpbmtzX29uX3hhdWRpb19jYWxsYmFja3NfLmVyYXNlKAorICAgICAgICAgICAgc3RkOjpmaW5kKGF1ZGlvX3NpbmtzX29uX3hhdWRpb19jYWxsYmFja3NfLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2lua3Nfb25feGF1ZGlvX2NhbGxiYWNrc18uZW5kKCksIHNpbmspKTsKKyAgICAgICAgZGVsZXRlIHNpbms7CisgICAgICB9CisgICAgICBhdWRpb19zaW5rc190b19kZWxldGVfLmNsZWFyKCk7CisgICAgfQorICB9CisKKyAgQ29tUHRyPElYQXVkaW8yPiB4X2F1ZGlvMl87CisgIE11dGV4IHhfYXVkaW8yX211dGV4XzsKKyAgSVhBdWRpbzJNYXN0ZXJpbmdWb2ljZSogbWFzdGVyaW5nX3ZvaWNlXyA9IG51bGxwdHI7CisKKyAgLy8gVGhpcyBtdXRleCBwcm90ZWN0cyB8YXVkaW9fc2lua3NfdG9fYWRkX3wgYW5kIHxhdWRpb19zaW5rc190b19kZWxldGVffC4KKyAgTXV0ZXggbXV0ZXhfOworICBzdGQ6Omxpc3Q8WEF1ZGlvQXVkaW9TaW5rKj4gYXVkaW9fc2lua3NfdG9fYWRkXzsKKyAgc3RkOjpsaXN0PFNiQXVkaW9TaW5rPiBhdWRpb19zaW5rc190b19kZWxldGVfOworCisgIC8vIFRoaXMgbXVzdCBvbmx5IGJlIGFjY2Vzc2VkIGZyb20gdGhlIE9uUHJvY2Vzc2luZ1Bhc3NTdGFydCBjYWxsYmFjaworICBzdGQ6Omxpc3Q8WEF1ZGlvQXVkaW9TaW5rKj4gYXVkaW9fc2lua3Nfb25feGF1ZGlvX2NhbGxiYWNrc187CisgIHN0YXJib2FyZDo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87CisKKyAgc3RhcmJvYXJkOjpwbGF5ZXI6OkpvYlRocmVhZCByZXN0YXJ0X2F1ZGlvX3RocmVhZF87CisgIHN0ZDo6bGlzdDxYQXVkaW9BdWRpb1NpbmsqPiBhdWRpb19zaW5rc190b19yZXN0YXJ0XzsKKyAgYm9vbCBzaW5rX3NodXRkb3duX2luX3Byb2dyZXNzXzsKK307CisKK1hBdWRpb0F1ZGlvU2luazo6WEF1ZGlvQXVkaW9TaW5rKAorICAgIFhBdWRpb0F1ZGlvU2lua1R5cGUqIHR5cGUsCisgICAgSVhBdWRpbzJTb3VyY2VWb2ljZSogc291cmNlX3ZvaWNlLAorICAgIGNvbnN0IFdBVkVGT1JNQVRFWCYgd2Z4LAorICAgIFNiQXVkaW9TaW5rRnJhbWVCdWZmZXJzIGZyYW1lX2J1ZmZlcnMsCisgICAgaW50IGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXMsCisgICAgU2JBdWRpb1NpbmtVcGRhdGVTb3VyY2VTdGF0dXNGdW5jIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsCisgICAgQ29uc3VtZUZyYW1lc0Z1bmMgY29uc3VtZV9mcmFtZXNfZnVuYywKKyAgICB2b2lkKiBjb250ZXh0KQorICAgIDogc3RvcF9jYWxsYmFja3NfKDApLAorICAgICAgdHlwZV8odHlwZSksCisgICAgICBzb3VyY2Vfdm9pY2VfKHNvdXJjZV92b2ljZSksCisgICAgICB1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jXyh1cGRhdGVfc291cmNlX3N0YXR1c19mdW5jKSwKKyAgICAgIGNvbnN1bWVfZnJhbWVzX2Z1bmNfKGNvbnN1bWVfZnJhbWVzX2Z1bmMpLAorICAgICAgY29udGV4dF8oY29udGV4dCksCisgICAgICBmcmFtZV9idWZmZXJzXyhmcmFtZV9idWZmZXJzKSwKKyAgICAgIGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXNfKGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXMpLAorICAgICAgd2Z4Xyh3ZngpLAorICAgICAgcGxheWJhY2tfcmF0ZV8oMS4wKSwKKyAgICAgIHZvbHVtZV8oMS4wKSwKKyAgICAgIHN1Ym1pdHRlZF9mcmFtZXNfKDApLAorICAgICAgc2FtcGxlc19wbGF5ZWRfKDApLAorICAgICAgcXVldWVkX2J1ZmZlcnNfKDApLAorICAgICAgd2FzX3BsYXlpbmdfKGZhbHNlKSwKKyAgICAgIGN1cnJlbnRfdm9sdW1lXygxLjApIHsKKyAgQ0hFQ0tfSFJFU1VMVF9PSyhzb3VyY2Vfdm9pY2VfLT5TdG9wKDApKTsKK30KKworYm9vbCBYQXVkaW9BdWRpb1Npbms6OklzVHlwZShUeXBlKiB0eXBlKSB7CisgIHJldHVybiB0eXBlXyA9PSB0eXBlOworfQorCit2b2lkIFhBdWRpb0F1ZGlvU2luazo6UHJvY2VzcygpIHsKKyAgU2NvcGVkTG9jayBwcm9jZXNzX2xvY2socHJvY2Vzc19tdXRleF8pOworICBpZiAoQXJlQ2FsbGJhY2tzU3RvcHBlZCgpKSB7CisgICAgLy8gV2UgbXVzdCBub3QgY29udGludWUgaW4gdGhpcyBjYXNlLCBzaW5jZSB8c291cmNlX3ZvaWNlX3wgaGFzIGJlZW4KKyAgICAvLyBkZXN0cm95ZWQuCisgICAgcmV0dXJuOworICB9CisgIGludCBmcmFtZXNfaW5fYnVmZmVyLCBvZmZzZXRfaW5fZnJhbWVzOworICBib29sIGlzX3BsYXlpbmcsIGlzX2Vvc19yZWFjaGVkOworICBib29sIGlzX3BsYXliYWNrX3JhdGVfemVybyA9IGZhbHNlOworICBib29sIHNob3VsZF9zZXRfdm9sdW1lID0gZmFsc2U7CisKKyAgLy8gVGhpcyBmdW5jdGlvbiBpcyBydW4gb24gdGhlIFhBdWRpbyB0aHJlYWQgYW5kIHNob3VsZG4ndCBiZSBibG9ja2VkLgorICBpZiAobXV0ZXhfLkFjcXVpcmVUcnkoKSkgeworICAgIGlzX3BsYXliYWNrX3JhdGVfemVybyA9IHBsYXliYWNrX3JhdGVfID09IDAuMDsKKyAgICBzaG91bGRfc2V0X3ZvbHVtZSA9IGN1cnJlbnRfdm9sdW1lXyAhPSB2b2x1bWVfOworICAgIGN1cnJlbnRfdm9sdW1lXyA9IHZvbHVtZV87CisgICAgbXV0ZXhfLlJlbGVhc2UoKTsKKyAgfQorCisgIGlmIChzaG91bGRfc2V0X3ZvbHVtZSkgeworICAgIENIRUNLX0hSRVNVTFRfT0soc291cmNlX3ZvaWNlXy0+U2V0Vm9sdW1lKGN1cnJlbnRfdm9sdW1lXykpOworICB9CisKKyAgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuY18oJmZyYW1lc19pbl9idWZmZXIsICZvZmZzZXRfaW5fZnJhbWVzLCAmaXNfcGxheWluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzX2Vvc19yZWFjaGVkLCBjb250ZXh0Xyk7CisgIGlmIChpc19wbGF5YmFja19yYXRlX3plcm8pIHsKKyAgICBpc19wbGF5aW5nID0gZmFsc2U7CisgIH0KKworICBpZiAoaXNfcGxheWluZyAhPSB3YXNfcGxheWluZ18pIHsKKyAgICBpZiAoaXNfcGxheWluZykgeworICAgICAgQ0hFQ0tfSFJFU1VMVF9PSyhzb3VyY2Vfdm9pY2VfLT5TdGFydCgwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIENIRUNLX0hSRVNVTFRfT0soc291cmNlX3ZvaWNlXy0+U3RvcCgwKSk7CisgICAgfQorICB9CisgIHdhc19wbGF5aW5nXyA9IGlzX3BsYXlpbmc7CisKKyAgLy8gVE9ETzogbWFrZSBzdXJlIHRoYXQgZnJhbWVzX2luX2J1ZmZlciBpcyBsYXJnZSBlbm91Z2gKKyAgLy8gdGhhdCBpdCBleGNlZWRzIHRoZSB2b2ljZSBzdGF0ZSBwb29sIGludGVydmFsCisgIGlmICghaXNfcGxheWluZyB8fCBmcmFtZXNfaW5fYnVmZmVyID09IDAgfHwgaXNfcGxheWJhY2tfcmF0ZV96ZXJvKSB7CisgICAgcmV0dXJuOworICB9CisgIGludCB1bnN1Ym1pdHRlZF9mcmFtZXMgPSBmcmFtZXNfaW5fYnVmZmVyIC0gc3VibWl0dGVkX2ZyYW1lc187CisgIGludCB1bnN1Ym1pdHRlZF9zdGFydCA9CisgICAgICAob2Zmc2V0X2luX2ZyYW1lcyArIHN1Ym1pdHRlZF9mcmFtZXNfKSAlIGZyYW1lX2J1ZmZlcnNfc2l6ZV9pbl9mcmFtZXNfOworICBpZiAodW5zdWJtaXR0ZWRfZnJhbWVzID09IDAgfHwgcXVldWVkX2J1ZmZlcnNfICsga01heEJ1ZmZlcnNTdWJtaXR0ZWRQZXJMb29wID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQVVESU8yX01BWF9RVUVVRURfQlVGRkVSUykgeworICAgIC8vIHN1Ym1pdCBub3RoaW5nCisgIH0gZWxzZSBpZiAodW5zdWJtaXR0ZWRfc3RhcnQgKyB1bnN1Ym1pdHRlZF9mcmFtZXMgPD0KKyAgICAgICAgICAgICBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzXykgeworICAgIFN1Ym1pdFNvdXJjZUJ1ZmZlcih1bnN1Ym1pdHRlZF9zdGFydCwgdW5zdWJtaXR0ZWRfZnJhbWVzKTsKKyAgfSBlbHNlIHsKKyAgICBpbnQgY291bnRfdGFpbF9mcmFtZXMgPSBmcmFtZV9idWZmZXJzX3NpemVfaW5fZnJhbWVzXyAtIHVuc3VibWl0dGVkX3N0YXJ0OworICAgIC8vIE5vdGUgc2luY2Ugd2UgY2FuIHN1Ym1pdCB1cCB0byB0d28gc291cmNlIGJ1ZmZlcnMgYXQgYSB0aW1lLAorICAgIC8vIGtNYXhCdWZmZXJzU3VibWl0dGVkUGVyTG9vcCA9IDIuCisgICAgU3VibWl0U291cmNlQnVmZmVyKHVuc3VibWl0dGVkX3N0YXJ0LCBjb3VudF90YWlsX2ZyYW1lcyk7CisgICAgU3VibWl0U291cmNlQnVmZmVyKDAsIHVuc3VibWl0dGVkX2ZyYW1lcyAtIGNvdW50X3RhaWxfZnJhbWVzKTsKKyAgfQorICBzdWJtaXR0ZWRfZnJhbWVzXyA9IGZyYW1lc19pbl9idWZmZXI7CisKKyAgWEFVRElPMl9WT0lDRV9TVEFURSB2b2ljZV9zdGF0ZTsKKyAgc291cmNlX3ZvaWNlXy0+R2V0U3RhdGUoJnZvaWNlX3N0YXRlKTsKKworICBpbnQ2NF90IGNvbnN1bWVkX2ZyYW1lcyA9IHZvaWNlX3N0YXRlLlNhbXBsZXNQbGF5ZWQgLSBzYW1wbGVzX3BsYXllZF87CisgIFNCX0RDSEVDSyhjb25zdW1lZF9mcmFtZXMgPj0gMCk7CisgIFNCX0RDSEVDSyhjb25zdW1lZF9mcmFtZXMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7CisgIGludCBjb25zdW1lZF9mcmFtZXNfaW50ID0gc3RhdGljX2Nhc3Q8aW50Pihjb25zdW1lZF9mcmFtZXMpOworCisgIGNvbnN1bWVfZnJhbWVzX2Z1bmNfKGNvbnN1bWVkX2ZyYW1lc19pbnQsIFNiVGltZUdldE1vbm90b25pY05vdygpLCBjb250ZXh0Xyk7CisgIHN1Ym1pdHRlZF9mcmFtZXNfIC09IGNvbnN1bWVkX2ZyYW1lc19pbnQ7CisgIHNhbXBsZXNfcGxheWVkXyA9IHZvaWNlX3N0YXRlLlNhbXBsZXNQbGF5ZWQ7CisgIHF1ZXVlZF9idWZmZXJzXyA9IHZvaWNlX3N0YXRlLkJ1ZmZlcnNRdWV1ZWQ7Cit9CisKK3ZvaWQgWEF1ZGlvQXVkaW9TaW5rOjpTdWJtaXRTb3VyY2VCdWZmZXIoaW50IG9mZnNldF9pbl9mcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudF9mcmFtZXMpIHsKKyAgWEFVRElPMl9CVUZGRVIgYXVkaW9fYnVmZmVyX2luZm87CisKKyAgYXVkaW9fYnVmZmVyX2luZm8uRmxhZ3MgPSAwOworICBhdWRpb19idWZmZXJfaW5mby5BdWRpb0J5dGVzID0gd2Z4Xy5uQ2hhbm5lbHMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lc18gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdmeF8ud0JpdHNQZXJTYW1wbGUgLyA4KTsKKyAgYXVkaW9fYnVmZmVyX2luZm8ucEF1ZGlvRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEJZVEUqPihmcmFtZV9idWZmZXJzX1swXSk7CisgIGF1ZGlvX2J1ZmZlcl9pbmZvLlBsYXlCZWdpbiA9IG9mZnNldF9pbl9mcmFtZXM7CisgIGF1ZGlvX2J1ZmZlcl9pbmZvLlBsYXlMZW5ndGggPSBjb3VudF9mcmFtZXM7CisgIGF1ZGlvX2J1ZmZlcl9pbmZvLkxvb3BCZWdpbiA9IDA7CisgIGF1ZGlvX2J1ZmZlcl9pbmZvLkxvb3BMZW5ndGggPSAwOworICBhdWRpb19idWZmZXJfaW5mby5Mb29wQ291bnQgPSAwOworICBhdWRpb19idWZmZXJfaW5mby5wQ29udGV4dCA9IG51bGxwdHI7CisgIENIRUNLX0hSRVNVTFRfT0soc291cmNlX3ZvaWNlXy0+U3VibWl0U291cmNlQnVmZmVyKCZhdWRpb19idWZmZXJfaW5mbykpOworfQorCitYQXVkaW9BdWRpb1NpbmtUeXBlOjpYQXVkaW9BdWRpb1NpbmtUeXBlKCkKKyAgICA6IHJlc3RhcnRfYXVkaW9fdGhyZWFkXygiUmVzdGFydEF1ZGlvRGV2aWNlIiksCisgICAgICBzaW5rX3NodXRkb3duX2luX3Byb2dyZXNzXyhmYWxzZSksCisgICAgICB0aHJlYWRfY2hlY2tlcl8oc3RhcmJvYXJkOjpUaHJlYWRDaGVja2VyOjprU2V0VGhyZWFkSWRPbkZpcnN0Q2hlY2spIHsKKyAgeF9hdWRpbzJfID0gWEF1ZGlvQ3JlYXRlKCk7CisgIEhSRVNVTFQgaHIgPSB4X2F1ZGlvMl8tPkNyZWF0ZU1hc3RlcmluZ1ZvaWNlKCZtYXN0ZXJpbmdfdm9pY2VfKTsKKyAgU0JfTE9HX0lGKFdBUk5JTkcsIEZBSUxFRChocikpIDw8ICJBdWRpbyBmYWlsZWQgdG8gQ3JlYXRlTWFzdGVyaW5nVm9pY2UoKSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdW5kIHdpbGwgYmUgZGlzYWJsZWQuIjsKK30KKworQ29tUHRyPElYQXVkaW8yPiBYQXVkaW9BdWRpb1NpbmtUeXBlOjpYQXVkaW9DcmVhdGUoKSB7CisgIENvbVB0cjxJWEF1ZGlvMj4geF9hdWRpbzI7CisgIEhSRVNVTFQgaHIgPSBYQXVkaW8yQ3JlYXRlKCZ4X2F1ZGlvMiwgMCwgWEFVRElPMl9ERUZBVUxUX1BST0NFU1NPUik7CisgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgcmV0dXJuIG51bGxwdHI7CisgIH0KKworI2lmICFkZWZpbmVkKENPQkFMVF9CVUlMRF9UWVBFX0dPTEQpCisgIFhBVURJTzJfREVCVUdfQ09ORklHVVJBVElPTiBkZWJ1Z19jb25maWcgPSB7fTsKKyAgZGVidWdfY29uZmlnLlRyYWNlTWFzayA9IFhBVURJTzJfTE9HX0VSUk9SUyB8IFhBVURJTzJfTE9HX1dBUk5JTkdTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhBVURJTzJfTE9HX0lORk8gfCBYQVVESU8yX0xPR19ERVRBSUwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWEFVRElPMl9MT0dfVElNSU5HIHwgWEFVRElPMl9MT0dfTE9DS1M7CisgIGRlYnVnX2NvbmZpZy5Mb2dUaHJlYWRJRCA9IFRSVUU7CisgIGRlYnVnX2NvbmZpZy5Mb2dGaWxlbGluZSA9IFRSVUU7CisgIGRlYnVnX2NvbmZpZy5Mb2dGdW5jdGlvbk5hbWUgPSBUUlVFOworICBkZWJ1Z19jb25maWcuTG9nVGltaW5nID0gVFJVRTsKKyAgeF9hdWRpbzItPlNldERlYnVnQ29uZmlndXJhdGlvbigmZGVidWdfY29uZmlnLCBOVUxMKTsKKyNlbmRpZiAgLy8gIWRlZmluZWQoQ09CQUxUX0JVSUxEX1RZUEVfR09MRCkKKworICB4X2F1ZGlvMi0+UmVnaXN0ZXJGb3JDYWxsYmFja3ModGhpcyk7CisgIHJldHVybiB4X2F1ZGlvMjsKK30KKworU2JBdWRpb1NpbmsgWEF1ZGlvQXVkaW9TaW5rVHlwZTo6Q3JlYXRlKAorICAgIGludCBjaGFubmVscywKKyAgICBpbnQgc2FtcGxpbmdfZnJlcXVlbmN5X2h6LAorICAgIFNiTWVkaWFBdWRpb1NhbXBsZVR5cGUgYXVkaW9fc2FtcGxlX3R5cGUsCisgICAgU2JNZWRpYUF1ZGlvRnJhbWVTdG9yYWdlVHlwZSBhdWRpb19mcmFtZV9zdG9yYWdlX3R5cGUsCisgICAgU2JBdWRpb1NpbmtGcmFtZUJ1ZmZlcnMgZnJhbWVfYnVmZmVycywKKyAgICBpbnQgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKKyAgICBTYkF1ZGlvU2lua1VwZGF0ZVNvdXJjZVN0YXR1c0Z1bmMgdXBkYXRlX3NvdXJjZV9zdGF0dXNfZnVuYywKKyAgICBTYkF1ZGlvU2lua1ByaXZhdGU6OkNvbnN1bWVGcmFtZXNGdW5jIGNvbnN1bWVfZnJhbWVzX2Z1bmMsCisgICAgU2JBdWRpb1NpbmtQcml2YXRlOjpFcnJvckZ1bmMgZXJyb3JfZnVuYywKKyAgICB2b2lkKiBjb250ZXh0KSB7CisgIFNCX0RDSEVDSyhhdWRpb19mcmFtZV9zdG9yYWdlX3R5cGUgPT0KKyAgICAgICAgICAgIGtTYk1lZGlhQXVkaW9GcmFtZVN0b3JhZ2VUeXBlSW50ZXJsZWF2ZWQpOworCisgIFdBVkVGT1JNQVRFWCB3Zng7CisgIHdmeC53Rm9ybWF0VGFnID0gU2FtcGxlVHlwZVRvRm9ybWF0VGFnKGF1ZGlvX3NhbXBsZV90eXBlKTsKKyAgd2Z4Lm5DaGFubmVscyA9IHN0YXRpY19jYXN0PFdPUkQ+KGNoYW5uZWxzKTsKKyAgd2Z4Lm5TYW1wbGVzUGVyU2VjID0gc2FtcGxpbmdfZnJlcXVlbmN5X2h6OworICB3ZngubkF2Z0J5dGVzUGVyU2VjID0gY2hhbm5lbHMgKgorICAgICAgICAgICAgICAgICAgICAgICAgU2FtcGxlVHlwZVRvQml0c1BlclNhbXBsZShhdWRpb19zYW1wbGVfdHlwZSkgKgorICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdfZnJlcXVlbmN5X2h6IC8gODsKKyAgd2Z4LndCaXRzUGVyU2FtcGxlID0gU2FtcGxlVHlwZVRvQml0c1BlclNhbXBsZShhdWRpb19zYW1wbGVfdHlwZSk7CisgIHdmeC5uQmxvY2tBbGlnbiA9IHN0YXRpY19jYXN0PFdPUkQ+KChjaGFubmVscyAqIHdmeC53Qml0c1BlclNhbXBsZSkgLyA4KTsKKyAgd2Z4LmNiU2l6ZSA9IDA7CisKKyAgSVhBdWRpbzJTb3VyY2VWb2ljZSogc291cmNlX3ZvaWNlID0gbnVsbHB0cjsKKyAgSFJFU1VMVCBociA9IEVfRkFJTDsKKyAgeworICAgIFNjb3BlZExvY2sgbG9jayh4X2F1ZGlvMl9tdXRleF8pOworICAgIGlmICgheF9hdWRpbzJfKSB7CisgICAgICB4X2F1ZGlvMl8gPSBYQXVkaW9DcmVhdGUoKTsKKyAgICAgIGlmICgheF9hdWRpbzJfKSB7CisgICAgICAgIFNCX0RMT0coV0FSTklORykgPDwgIkF1ZGlvIGZhaWxlZCB0byBYQXVkaW9DcmVhdGUoKSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VuZCB3aWxsIGJlIGRpc2FibGVkLiI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgfQorICAgICAgaHIgPSB4X2F1ZGlvMl8tPkNyZWF0ZU1hc3RlcmluZ1ZvaWNlKCZtYXN0ZXJpbmdfdm9pY2VfKTsKKyAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIFNCX0RMT0coV0FSTklORykgPDwgIkF1ZGlvIGZhaWxlZCB0byBDcmVhdGVNYXN0ZXJpbmdWb2ljZSgpLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdW5kIHdpbGwgYmUgZGlzYWJsZWQuIjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICB9CisgICAgfQorICAgIGhyID0geF9hdWRpbzJfLT5DcmVhdGVTb3VyY2VWb2ljZSgmc291cmNlX3ZvaWNlLCAmd2Z4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQVVESU8yX1ZPSUNFX05PUElUQ0gsIDEuZik7CisgIH0KKyAgaWYgKEZBSUxFRChocikpIHsKKyAgICBTQl9ETE9HKFdBUk5JTkcpIDw8ICJDb3VsZCBub3QgY3JlYXRlIHNvdXJjZSB2b2ljZSwgZXJyb3IgY29kZTogIiA8PCBocjsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyAgfQorCisgIFhBdWRpb0F1ZGlvU2luayogYXVkaW9fc2luayA9IG5ldyBYQXVkaW9BdWRpb1NpbmsoCisgICAgICB0aGlzLCBzb3VyY2Vfdm9pY2UsIHdmeCwgZnJhbWVfYnVmZmVycywgZnJhbWVfYnVmZmVyc19zaXplX2luX2ZyYW1lcywKKyAgICAgIHVwZGF0ZV9zb3VyY2Vfc3RhdHVzX2Z1bmMsIGNvbnN1bWVfZnJhbWVzX2Z1bmMsIGNvbnRleHQpOworCisgIFNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICBhdWRpb19zaW5rc190b19hZGRfLnB1c2hfYmFjayhhdWRpb19zaW5rKTsKKyAgcmV0dXJuIGF1ZGlvX3Npbms7Cit9CisKK3ZvaWQgWEF1ZGlvQXVkaW9TaW5rVHlwZTo6RGVzdHJveShTYkF1ZGlvU2luayBhdWRpb19zaW5rKSB7CisgIGlmIChhdWRpb19zaW5rID09IGtTYkF1ZGlvU2lua0ludmFsaWQpIHsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCFJc1ZhbGlkKGF1ZGlvX3NpbmspKSB7CisgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJhdWRpb19zaW5rIGlzIGludmFsaWQuIjsKKyAgICByZXR1cm47CisgIH0KKyAgLy8gUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyBjb2RlIHdhaXRlZCBmb3IgdGhlIG5leHQgT25Qcm9jZXNzaW5nUGFzc1N0YXJ0KCkKKyAgLy8gY2FsbCB0byBvY2N1ciBiZWZvcmUgcmV0dXJuaW5nLiBIb3dldmVyLCB2YXJpb3VzIGNpcmN1bXN0YW5jZXMgY291bGQKKyAgLy8gY2F1c2UgdGhhdCBuZXZlciB0byBoYXBwZW4sIGVzcGVjaWFsbHkgZHVyaW5nIFVXUCBzdXNwZW5kLgorICAvLyBJbnN0ZWFkLCB3ZSByZXR1cm4gaW1tZWRpYXRlbHksIGVuc3VyaW5nIG5vIFNiQXVkaW9TaW5rIGNhbGxiYWNrcyBvY2N1cgorICAvLyBhbmQgcG9zdHBvbmUgdGhlIGRlbGV0ZSBpdHNlbGYgdW50aWwgdGhlIG5leHQgT25Qcm9jZXNzaW5nUGFzc1N0YXJ0KCkKKyAgc3RhdGljX2Nhc3Q8WEF1ZGlvQXVkaW9TaW5rKj4oYXVkaW9fc2luayktPlN0b3BDYWxsYmFja3MoKTsKKworICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgYXV0byBpdCA9IHN0ZDo6ZmluZChhdWRpb19zaW5rc190b19yZXN0YXJ0Xy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3NpbmtzX3RvX3Jlc3RhcnRfLmVuZCgpLCBhdWRpb19zaW5rKTsKKyAgaWYgKGl0ID09IGF1ZGlvX3NpbmtzX3RvX3Jlc3RhcnRfLmVuZCgpKSB7CisgICAgYXVkaW9fc2lua3NfdG9fZGVsZXRlXy5wdXNoX2JhY2soYXVkaW9fc2luayk7CisgIH0gZWxzZSB7CisgICAgYXVkaW9fc2lua3NfdG9fcmVzdGFydF8uZXJhc2UoaXQpOworICAgIGRlbGV0ZSBhdWRpb19zaW5rOworICB9Cit9CisKK3ZvaWQgWEF1ZGlvQXVkaW9TaW5rVHlwZTo6UmVzdGFydEF1ZGlvRGV2aWNlKCkgeworICB7CisgICAgU2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgYXVkaW9fc2lua3NfdG9fcmVzdGFydF8uaW5zZXJ0KGF1ZGlvX3NpbmtzX3RvX3Jlc3RhcnRfLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zaW5rc19vbl94YXVkaW9fY2FsbGJhY2tzXy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zaW5rc19vbl94YXVkaW9fY2FsbGJhY2tzXy5lbmQoKSk7CisgICAgYXVkaW9fc2lua3Nfb25feGF1ZGlvX2NhbGxiYWNrc18uY2xlYXIoKTsKKyAgICBhdWRpb19zaW5rc190b19yZXN0YXJ0Xy5pbnNlcnQoYXVkaW9fc2lua3NfdG9fcmVzdGFydF8uZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3NpbmtzX3RvX2FkZF8uYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fc2lua3NfdG9fYWRkXy5lbmQoKSk7CisgICAgYXVkaW9fc2lua3NfdG9fYWRkXy5jbGVhcigpOworCisgICAgUHJvY2Vzc1NpbmtzVG9EZWxldGUoKTsKKyAgICBmb3IgKGF1dG8gc2luayA6IGF1ZGlvX3NpbmtzX3RvX3Jlc3RhcnRfKSB7CisgICAgICBzaW5rLT5TZXRTb3VyY2VWb2ljZShudWxscHRyKTsKKyAgICB9CisgIH0KKyAgaWYgKG1hc3RlcmluZ192b2ljZV8pIHsKKyAgICBtYXN0ZXJpbmdfdm9pY2VfLT5EZXN0cm95Vm9pY2UoKTsKKyAgICBtYXN0ZXJpbmdfdm9pY2VfID0gbnVsbHB0cjsKKyAgfQorICB7CisgICAgU2NvcGVkTG9jayBsb2NrKHhfYXVkaW8yX211dGV4Xyk7CisgICAgeF9hdWRpbzJfLlJlc2V0KCk7CisgIH0KKyAgc2lua19zaHV0ZG93bl9pbl9wcm9ncmVzc18gPSBmYWxzZTsKKworICBUcnlBY3F1aXJlU2lua1ZvaWNlcygpOworfQorCit2b2lkIFhBdWRpb0F1ZGlvU2lua1R5cGU6OlRyeUFjcXVpcmVTaW5rVm9pY2VzKCkgeworICBIUkVTVUxUIGhyID0gRV9GQUlMOworICBTY29wZWRMb2NrIHhfYXVkaW8yX211dGV4X2xvY2soeF9hdWRpbzJfbXV0ZXhfKTsKKyAgaWYgKCF4X2F1ZGlvMl8pIHsKKyAgICBociA9IFhBdWRpbzJDcmVhdGUoJnhfYXVkaW8yXywgMCwgWEFVRElPMl9ERUZBVUxUX1BST0NFU1NPUik7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgIHJlc3RhcnRfYXVkaW9fdGhyZWFkXy5qb2JfcXVldWUoKS0+U2NoZWR1bGUoCisgICAgICAgICAgc3RkOjpiaW5kKCZYQXVkaW9BdWRpb1NpbmtUeXBlOjpUcnlBY3F1aXJlU2lua1ZvaWNlcywgdGhpcykpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB4X2F1ZGlvMl8tPlJlZ2lzdGVyRm9yQ2FsbGJhY2tzKHRoaXMpOworICB9CisKKyAgaWYgKCFtYXN0ZXJpbmdfdm9pY2VfKSB7CisgICAgaHIgPSB4X2F1ZGlvMl8tPkNyZWF0ZU1hc3RlcmluZ1ZvaWNlKCZtYXN0ZXJpbmdfdm9pY2VfKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgcmVzdGFydF9hdWRpb190aHJlYWRfLmpvYl9xdWV1ZSgpLT5TY2hlZHVsZSgKKyAgICAgICAgICBzdGQ6OmJpbmQoJlhBdWRpb0F1ZGlvU2lua1R5cGU6OlRyeUFjcXVpcmVTaW5rVm9pY2VzLCB0aGlzKSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgc3RkOjpsaXN0PFhBdWRpb0F1ZGlvU2luayo+IGF1ZGlvX3NpbmtzX2ZhaWxlZDsKKyAgU2NvcGVkTG9jayBtdXRleF9sb2NrKG11dGV4Xyk7CisgIGZvciAoYXV0byBzaW5rIDogYXVkaW9fc2lua3NfdG9fcmVzdGFydF8pIHsKKyAgICBJWEF1ZGlvMlNvdXJjZVZvaWNlKiBzb3VyY2Vfdm9pY2UgPSBudWxscHRyOworICAgIGhyID0geF9hdWRpbzJfLT5DcmVhdGVTb3VyY2VWb2ljZSgmc291cmNlX3ZvaWNlLCAmc2luay0+R2V0V2F2ZUZvcm1hdEV4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhBVURJTzJfVk9JQ0VfTk9QSVRDSCwgMS5mKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgYXVkaW9fc2lua3NfZmFpbGVkLnB1c2hfYmFjayhzaW5rKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBzaW5rLT5TZXRTb3VyY2VWb2ljZShzb3VyY2Vfdm9pY2UpOworICAgIGF1ZGlvX3NpbmtzX3RvX2FkZF8ucHVzaF9iYWNrKHNpbmspOworICB9CisgIGF1ZGlvX3NpbmtzX3RvX3Jlc3RhcnRfID0gYXVkaW9fc2lua3NfZmFpbGVkOworICBpZiAoYXVkaW9fc2lua3NfdG9fcmVzdGFydF8uZW1wdHkoKSkgeworICAgIHJldHVybjsKKyAgfQorICByZXN0YXJ0X2F1ZGlvX3RocmVhZF8uam9iX3F1ZXVlKCktPlNjaGVkdWxlKAorICAgICAgc3RkOjpiaW5kKCZYQXVkaW9BdWRpb1NpbmtUeXBlOjpUcnlBY3F1aXJlU2lua1ZvaWNlcywgdGhpcykpOworfQorCit2b2lkIFhBdWRpb0F1ZGlvU2lua1R5cGU6Ok9uUHJvY2Vzc2luZ1Bhc3NTdGFydCgpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICBpZiAobXV0ZXhfLkFjcXVpcmVUcnkoKSkgeworICAgIFByb2Nlc3NTaW5rc1RvQWRkKCk7CisgICAgUHJvY2Vzc1NpbmtzVG9EZWxldGUoKTsKKyAgICBtdXRleF8uUmVsZWFzZSgpOworICB9CisKKyAgZm9yIChYQXVkaW9BdWRpb1NpbmsqIHNpbmsgOiBhdWRpb19zaW5rc19vbl94YXVkaW9fY2FsbGJhY2tzXykgeworICAgIHNpbmstPlByb2Nlc3MoKTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCituYW1lc3BhY2UgeworU2JBdWRpb1NpbmtQcml2YXRlOjpUeXBlKiBhdWRpb19zaW5rXzsKK30gIC8vIG5hbWVzcGFjZQorCisvLyBzdGF0aWMKK3ZvaWQgU2JBdWRpb1NpbmtQcml2YXRlOjpQbGF0Zm9ybUluaXRpYWxpemUoKSB7CisgIFNCX0RDSEVDSyghYXVkaW9fc2lua18pOworICBhdWRpb19zaW5rXyA9IG5ldyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlhBdWRpb0F1ZGlvU2lua1R5cGUoKTsKKyAgU2V0UHJpbWFyeVR5cGUoYXVkaW9fc2lua18pOworICBFbmFibGVGYWxsYmFja1RvU3R1YigpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgU2JBdWRpb1NpbmtQcml2YXRlOjpQbGF0Zm9ybVRlYXJEb3duKCkgeworICBTQl9EQ0hFQ0soYXVkaW9fc2lua18gPT0gR2V0UHJpbWFyeVR5cGUoKSk7CisgIFNldFByaW1hcnlUeXBlKG51bGxwdHIpOworICBkZWxldGUgYXVkaW9fc2lua187CisgIGF1ZGlvX3NpbmtfID0gbnVsbHB0cjsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2lua19nZXRfbWF4X2NoYW5uZWxzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2dldF9tYXhfY2hhbm5lbHMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5ZjYyZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2lua19nZXRfbWF4X2NoYW5uZWxzLmNjCkBAIC0wLDAgKzEsMTkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9hdWRpb19zaW5rLmgiCisKK2ludCBTYkF1ZGlvU2lua0dldE1heENoYW5uZWxzKCkgeworICByZXR1cm4gNjsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2lua19nZXRfbmVhcmVzdF9zdXBwb3J0ZWRfc2FtcGxlX2ZyZXF1ZW5jeS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2lua19nZXRfbmVhcmVzdF9zdXBwb3J0ZWRfc2FtcGxlX2ZyZXF1ZW5jeS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTBjNWVjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2dldF9uZWFyZXN0X3N1cHBvcnRlZF9zYW1wbGVfZnJlcXVlbmN5LmNjCkBAIC0wLDAgKzEsMjYgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9hdWRpb19zaW5rLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorCitpbnQgU2JBdWRpb1NpbmtHZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlRnJlcXVlbmN5KGludCBzYW1wbGluZ19mcmVxdWVuY3lfaHopIHsKKyAgaWYgKHNhbXBsaW5nX2ZyZXF1ZW5jeV9oeiA8PSAwKSB7CisgICAgU0JfTE9HKEVSUk9SKSA8PCAiSW52YWxpZCBhdWRpbyBzYW1wbGluZyBmcmVxdWVuY3kgIgorICAgICAgICAgICAgICAgICAgPDwgc2FtcGxpbmdfZnJlcXVlbmN5X2h6OworICAgIHJldHVybiAxOworICB9CisgIHJldHVybiBzYW1wbGluZ19mcmVxdWVuY3lfaHo7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3NpbmtfaXNfYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fc2lua19pc19hdWRpb19mcmFtZV9zdG9yYWdlX3R5cGVfc3VwcG9ydGVkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWY1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3NpbmtfaXNfYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlX3N1cHBvcnRlZC5jYwpAQCAtMCwwICsxLDMwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXVkaW9fc2luay5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworYm9vbCBTYkF1ZGlvU2lua0lzQXVkaW9GcmFtZVN0b3JhZ2VUeXBlU3VwcG9ydGVkKAorICAgIFNiTWVkaWFBdWRpb0ZyYW1lU3RvcmFnZVR5cGUgYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlKSB7CisgIHN3aXRjaCAoYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlKSB7CisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvRnJhbWVTdG9yYWdlVHlwZUludGVybGVhdmVkOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvRnJhbWVTdG9yYWdlVHlwZVBsYW5hcjoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgU0JfTk9UUkVBQ0hFRCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3NpbmtfaXNfYXVkaW9fc2FtcGxlX3R5cGVfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2lzX2F1ZGlvX3NhbXBsZV90eXBlX3N1cHBvcnRlZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JhODQwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2lzX2F1ZGlvX3NhbXBsZV90eXBlX3N1cHBvcnRlZC5jYwpAQCAtMCwwICsxLDMxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXVkaW9fc2luay5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworYm9vbCBTYkF1ZGlvU2lua0lzQXVkaW9TYW1wbGVUeXBlU3VwcG9ydGVkKAorICAgIFNiTWVkaWFBdWRpb1NhbXBsZVR5cGUgYXVkaW9fc2FtcGxlX3R5cGUpIHsKKyAgc3dpdGNoIChhdWRpb19zYW1wbGVfdHlwZSkgeworI2lmIFNCX0hBU19RVUlSSyhTVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVMpCisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZUludDE2OgorICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYgIC8vIFNCX0hBU19RVUlSSyhTVVBQT1JUX0lOVDE2X0FVRElPX1NBTVBMRVMpCisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZUZsb2F0MzI6CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3RyYW5zZm9ybS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fdHJhbnNmb3JtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMDNmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3RyYW5zZm9ybS5jYwpAQCAtMCwwICsxLDEzMyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb190cmFuc2Zvcm0uaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK3VzaW5nIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI7CisKK25hbWVzcGFjZSB7CisKK0dVSUQgQ29udmVydFRvV2luMzJBdWRpb0NvZGVjKFNiTWVkaWFBdWRpb0NvZGVjIGNvZGVjKSB7CisgIHN3aXRjaCAoY29kZWMpIHsKKyAgICBjYXNlIGtTYk1lZGlhQXVkaW9Db2RlY05vbmU6IHsKKyAgICAgIHJldHVybiBNRkF1ZGlvRm9ybWF0X1BDTTsKKyAgICB9CisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNBYWM6IHsKKyAgICAgIHJldHVybiBNRkF1ZGlvRm9ybWF0X0FBQzsKKyAgICB9CisgICAgY2FzZSBrU2JNZWRpYUF1ZGlvQ29kZWNPcHVzOiB7CisgICAgICByZXR1cm4gTUZBdWRpb0Zvcm1hdF9PcHVzOworICAgIH0KKyAgICBkZWZhdWx0OiB7CisgICAgICBTQl9OT1RJTVBMRU1FTlRFRCgpOworICAgICAgcmV0dXJuIE1GQXVkaW9Gb3JtYXRfUENNOworICAgIH0KKyAgfQorfQorCitjbGFzcyBXaW5BdWRpb0Zvcm1hdCB7CisgcHVibGljOgorICBleHBsaWNpdCBXaW5BdWRpb0Zvcm1hdChjb25zdCBTYk1lZGlhQXVkaW9TYW1wbGVJbmZvJiBhdWRpb19zYW1wbGVfaW5mbykgeworICAgIC8vIFRoZSBIRUFBQ1dBVkVGT1JNQVQgc3RydWN0dXJlIGhhcyBtYW55IHNwZWNpYWxpemF0aW9ucyB3aXRoIHZhcnlpbmcgZGF0YQorICAgIC8vIGFwcGVuZGVkIGF0IHRoZSBlbmQuCisgICAgLy8gVGhlICItMSIgaXMgdXNlZCB0byBhY2NvdW50IGZvciBwYkF1ZGlvU3BlY2lmaWNDb25maWdbMV0gYXQgdGhlIGVuZCBvZgorICAgIC8vIEhFQUFDV0FWRUZPUk1BVC4KKyAgICBmb3JtYXRfYnVmZmVyXy5yZXNpemUoc2l6ZW9mKEhFQUFDV0FWRUZPUk1BVCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWdfc2l6ZSAtIDEpOworICAgIEhFQUFDV0FWRUZPUk1BVCogd2F2ZV9mb3JtYXQgPQorICAgICAgICByZWludGVycHJldF9jYXN0PEhFQUFDV0FWRUZPUk1BVCo+KGZvcm1hdF9idWZmZXJfLmRhdGEoKSk7CisKKyAgICB3YXZlX2Zvcm1hdC0+d2ZJbmZvLndmeC5uQXZnQnl0ZXNQZXJTZWMgPSAwOworICAgIHdhdmVfZm9ybWF0LT53ZkluZm8ud2Z4Lm5CbG9ja0FsaWduID0gYXVkaW9fc2FtcGxlX2luZm8uYmxvY2tfYWxpZ25tZW50OworICAgIHdhdmVfZm9ybWF0LT53ZkluZm8ud2Z4Lm5DaGFubmVscyA9IGF1ZGlvX3NhbXBsZV9pbmZvLm51bWJlcl9vZl9jaGFubmVsczsKKyAgICB3YXZlX2Zvcm1hdC0+d2ZJbmZvLndmeC5uU2FtcGxlc1BlclNlYyA9CisgICAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvLnNhbXBsZXNfcGVyX3NlY29uZDsKKyAgICB3YXZlX2Zvcm1hdC0+d2ZJbmZvLndmeC53Qml0c1BlclNhbXBsZSA9IGF1ZGlvX3NhbXBsZV9pbmZvLmJpdHNfcGVyX3NhbXBsZTsKKyAgICB3YXZlX2Zvcm1hdC0+d2ZJbmZvLndmeC53Rm9ybWF0VGFnID0gV0FWRV9GT1JNQVRfTVBFR19IRUFBQzsKKyAgICAvLyBUaGUgIi0xIiBpcyB1c2VkIHRvIGFjY291bnQgZm9yIHBiQXVkaW9TcGVjaWZpY0NvbmZpZ1sxXSBhdCB0aGUgZW5kIG9mCisgICAgLy8gSEVBQUNXQVZFRk9STUFULgorICAgIHdhdmVfZm9ybWF0LT53ZkluZm8ud2Z4LmNiU2l6ZSA9CisgICAgICAgIHNpemVvZihIRUFBQ1dBVkVGT1JNQVQpIC0gc2l6ZW9mKFdBVkVGT1JNQVRFWCkgKworICAgICAgICBhdWRpb19zYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWdfc2l6ZSAtIDE7CisKKyAgICB3YXZlX2Zvcm1hdC0+d2ZJbmZvLndQYXlsb2FkVHlwZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgLy8gUkFXCisgICAgd2F2ZV9mb3JtYXQtPndmSW5mby53QXVkaW9Qcm9maWxlTGV2ZWxJbmRpY2F0aW9uID0gMHhmZTsgIC8vIFVua25vd24gUHJvZmlsZQorICAgIHdhdmVfZm9ybWF0LT53ZkluZm8ud1N0cnVjdFR5cGUgPSAwOyAgLy8gQXVkaW9TcGVjaWZpY0NvbmZpZygpCisKKyAgICBpZiAoYXVkaW9fc2FtcGxlX2luZm8uYXVkaW9fc3BlY2lmaWNfY29uZmlnX3NpemUgPiAwKSB7CisgICAgICBtZW1jcHkod2F2ZV9mb3JtYXQtPnBiQXVkaW9TcGVjaWZpY0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICBhdWRpb19zYW1wbGVfaW5mby5hdWRpb19zcGVjaWZpY19jb25maWcsCisgICAgICAgICAgICAgICAgICAgYXVkaW9fc2FtcGxlX2luZm8uYXVkaW9fc3BlY2lmaWNfY29uZmlnX3NpemUpOworICAgIH0KKyAgfQorCisgIFdBVkVGT1JNQVRFWCogV2F2ZUZvcm1hdERhdGEoKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V0FWRUZPUk1BVEVYKj4oZm9ybWF0X2J1ZmZlcl8uZGF0YSgpKTsKKyAgfQorICBVSU5UMzIgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFVJTlQzMj4oZm9ybWF0X2J1ZmZlcl8uc2l6ZSgpKTsgfQorCisgcHJpdmF0ZToKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gZm9ybWF0X2J1ZmZlcl87Cit9OworCit9ICAvLyBuYW1lc3BhY2UuCisKK3Njb3BlZF9wdHI8TWVkaWFUcmFuc2Zvcm0+IENyZWF0ZUF1ZGlvVHJhbnNmb3JtKAorICAgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8mIGF1ZGlvLAorICAgIFNiTWVkaWFBdWRpb0NvZGVjIGNvZGVjKSB7CisgIENvbVB0cjxJTUZUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKKyAgSFJFU1VMVCBociA9IENyZWF0ZURlY29kZXJUcmFuc2Zvcm0oQ0xTSURfTVNBQUNEZWNNRlQsICZ0cmFuc2Zvcm0pOworICBDaGVja1Jlc3VsdChocik7CisKKyAgQ29tUHRyPElNRk1lZGlhVHlwZT4gaW5wdXRfdHlwZTsKKyAgaHIgPSBNRkNyZWF0ZU1lZGlhVHlwZSgmaW5wdXRfdHlwZSk7CisgIENoZWNrUmVzdWx0KGhyKTsKKworICBXaW5BdWRpb0Zvcm1hdCBhdWRpb19mbXQoYXVkaW8pOworICBociA9IE1GSW5pdE1lZGlhVHlwZUZyb21XYXZlRm9ybWF0RXgoCisgICAgICBpbnB1dF90eXBlLkdldCgpLCBhdWRpb19mbXQuV2F2ZUZvcm1hdERhdGEoKSwgYXVkaW9fZm10LlNpemUoKSk7CisgIENoZWNrUmVzdWx0KGhyKTsKKworICBHVUlEIHdpbjMyX2F1ZGlvX3R5cGUgPSBDb252ZXJ0VG9XaW4zMkF1ZGlvQ29kZWMoY29kZWMpOworCisgIHN0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiBhdmFpbGFibGVfdHlwZXMgPQorICAgICAgR2V0QWxsSW5wdXRNZWRpYVR5cGVzKE1lZGlhVHJhbnNmb3JtOjprU3RyZWFtSWQsIHRyYW5zZm9ybS5HZXQoKSk7CisKKyAgYXZhaWxhYmxlX3R5cGVzID0gRmlsdGVyTWVkaWFCeVN1YlR5cGUoYXZhaWxhYmxlX3R5cGVzLCB3aW4zMl9hdWRpb190eXBlKTsKKyAgU0JfRENIRUNLKGF2YWlsYWJsZV90eXBlcy5zaXplKCkpOworCisgIENvbVB0cjxJTUZNZWRpYVR5cGU+IHNlbGVjdGVkID0gYXZhaWxhYmxlX3R5cGVzWzBdOworICBDb3B5UHJvcGVydGllcyhpbnB1dF90eXBlLkdldCgpLCBzZWxlY3RlZC5HZXQoKSk7CisKKyAgc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4gb3V0cHV0KG5ldyBNZWRpYVRyYW5zZm9ybSh0cmFuc2Zvcm0pKTsKKyAgb3V0cHV0LT5TZXRJbnB1dFR5cGUoc2VsZWN0ZWQpOworICBvdXRwdXQtPlNldE91dHB1dFR5cGVCeVN1YlR5cGUoTUZBdWRpb0Zvcm1hdF9GbG9hdCk7CisKKyAgcmV0dXJuIG91dHB1dC5QYXNzKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb190cmFuc2Zvcm0uaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fdHJhbnNmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4N2Q5NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fdHJhbnNmb3JtLmgKQEAgLTAsMCArMSwzNCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVESU9fVFJBTlNGT1JNX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVESU9fVFJBTlNGT1JNX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3Njb3BlZF9wdHIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX3RyYW5zZm9ybS5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4gQ3JlYXRlQXVkaW9UcmFuc2Zvcm0oCisgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW8sCisgICAgU2JNZWRpYUF1ZGlvQ29kZWMgY29kZWMpOworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FVRElPX1RSQU5TRk9STV9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdXRvX2V2ZW50X2hhbmRsZS5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdXRvX2V2ZW50X2hhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NzFkODcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1dG9fZXZlbnRfaGFuZGxlLmgKQEAgLTAsMCArMSw1NyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQVVUT19FVkVOVF9IQU5ETEVfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9BVVRPX0VWRU5UX0hBTkRMRV9IXworCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2NsYXNzIEF1dG9FdmVudEhhbmRsZSB7CisgcHVibGljOgorICBleHBsaWNpdCBBdXRvRXZlbnRIYW5kbGUoV1NBRVZFTlQgZXZlbnQpIDogZXZlbnRfKGV2ZW50KSB7fQorCisgIH5BdXRvRXZlbnRIYW5kbGUoKSB7IENsZWFudXBFeGlzdGluZ0V2ZW50KCk7IH0KKworICB2b2lkIFJlc2V0KFdTQUVWRU5UIG5ld19ldmVudCkgeworICAgIENsZWFudXBFeGlzdGluZ0V2ZW50KCk7CisgICAgZXZlbnRfID0gbmV3X2V2ZW50OworICB9CisKKyAgYm9vbCBJc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gZXZlbnRfICE9IFdTQV9JTlZBTElEX0VWRU5UOyB9CisKKyAgV1NBRVZFTlQgR2V0RXZlbnQoKSB7IHJldHVybiBldmVudF87IH0KKworIHByaXZhdGU6CisgIEF1dG9FdmVudEhhbmRsZShjb25zdCBBdXRvRXZlbnRIYW5kbGUmKSA9IGRlbGV0ZTsKKyAgQXV0b0V2ZW50SGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgQXV0b0V2ZW50SGFuZGxlJikgPSBkZWxldGU7CisKKyAgdm9pZCBDbGVhbnVwRXhpc3RpbmdFdmVudCgpIHsKKyAgICBpZiAoSXNWYWxpZCgpKSB7CisgICAgICBXU0FDbG9zZUV2ZW50KGV2ZW50Xyk7CisgICAgICBldmVudF8gPSBXU0FfSU5WQUxJRF9FVkVOVDsKKyAgICB9CisgIH0KKworICBXU0FFVkVOVCBldmVudF87Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0FVVE9fRVZFTlRfSEFORExFX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2J5dGVfc3dhcC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYnl0ZV9zd2FwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjhjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2J5dGVfc3dhcC5jYwpAQCAtMCwwICsxLDQ0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIE5vdCBicmVha2luZyB0aGVzZSBmdW5jdGlvbnMgdXAgYmVjYXVzZSBob3dldmVyIG9uZSBpcyBpbXBsZW1lbnRlZCwgdGhlCisvLyBvdGhlcnMgc2hvdWxkIGJlIGltcGxlbWVudGVkIHNpbWlsYXJseS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vYnl0ZV9zd2FwLmgiCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50MTZfdCBTYkJ5dGVTd2FwUzE2KGludDE2X3QgdmFsdWUpIHsKKyAgcmV0dXJuIF9ieXRlc3dhcF91c2hvcnQodmFsdWUpOworfQorCit1aW50MTZfdCBTYkJ5dGVTd2FwVTE2KHVpbnQxNl90IHZhbHVlKSB7CisgIHJldHVybiBfYnl0ZXN3YXBfdXNob3J0KHZhbHVlKTsKK30KKworaW50MzJfdCBTYkJ5dGVTd2FwUzMyKGludDMyX3QgdmFsdWUpIHsKKyAgcmV0dXJuIF9ieXRlc3dhcF91bG9uZyh2YWx1ZSk7Cit9CisKK3VpbnQzMl90IFNiQnl0ZVN3YXBVMzIodWludDMyX3QgdmFsdWUpIHsKKyAgcmV0dXJuIF9ieXRlc3dhcF91bG9uZyh2YWx1ZSk7Cit9CisKK2ludDY0X3QgU2JCeXRlU3dhcFM2NChpbnQ2NF90IHZhbHVlKSB7CisgIHJldHVybiBfYnl0ZXN3YXBfdWludDY0KHZhbHVlKTsKK30KKwordWludDY0X3QgU2JCeXRlU3dhcFU2NCh1aW50NjRfdCB2YWx1ZSkgeworICByZXR1cm4gX2J5dGVzd2FwX3VpbnQ2NCh2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9icm9hZGNhc3QuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9icm9hZGNhc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzODg3ZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX2Jyb2FkY2FzdC5jYwpAQCAtMCwwICsxLDI3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2NvbmRpdGlvbl92YXJpYWJsZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90eXBlc19pbnRlcm5hbC5oIgorCitib29sIFNiQ29uZGl0aW9uVmFyaWFibGVCcm9hZGNhc3QoU2JDb25kaXRpb25WYXJpYWJsZSogY29uZGl0aW9uKSB7CisgIGlmICghY29uZGl0aW9uKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIFdha2VBbGxDb25kaXRpb25WYXJpYWJsZShTQl9XSU4zMl9JTlRFUk5BTF9DT05ESVRJT04oY29uZGl0aW9uKSk7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfY3JlYXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfY3JlYXRlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYzhlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9jcmVhdGUuY2MKQEAgLTAsMCArMSwzMSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90eXBlc19pbnRlcm5hbC5oIgorCitib29sIFNiQ29uZGl0aW9uVmFyaWFibGVDcmVhdGUoU2JDb25kaXRpb25WYXJpYWJsZSogb3V0X2NvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk11dGV4KiBvcHRfbXV0ZXgpIHsKKyAgU0JfQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNiQ29uZGl0aW9uVmFyaWFibGUpID49IHNpemVvZihDT05ESVRJT05fVkFSSUFCTEUpLAorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fdmFyaWFibGVfbGFyZ2VyX3RoYW5fc2JfY29uZGl0aW9uX3ZhcmlhYmxlKTsKKyAgaWYgKCFvdXRfY29uZGl0aW9uKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIEluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZShTQl9XSU4zMl9JTlRFUk5BTF9DT05ESVRJT04ob3V0X2NvbmRpdGlvbikpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX2Rlc3Ryb3kuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9kZXN0cm95LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzQ4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9kZXN0cm95LmNjCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2Jvb2wgU2JDb25kaXRpb25WYXJpYWJsZURlc3Ryb3koU2JDb25kaXRpb25WYXJpYWJsZSogY29uZGl0aW9uKSB7CisgIGlmICghY29uZGl0aW9uKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfc2lnbmFsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfc2lnbmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTNkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9zaWduYWwuY2MKQEAgLTAsMCArMSwyNyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKworYm9vbCBTYkNvbmRpdGlvblZhcmlhYmxlU2lnbmFsKFNiQ29uZGl0aW9uVmFyaWFibGUqIGNvbmRpdGlvbikgeworICBpZiAoIWNvbmRpdGlvbikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBXYWtlQ29uZGl0aW9uVmFyaWFibGUoU0JfV0lOMzJfSU5URVJOQUxfQ09ORElUSU9OKGNvbmRpdGlvbikpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGRjODkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjCkBAIC0wLDAgKzEsMzIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vY29uZGl0aW9uX3ZhcmlhYmxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3R5cGVzX2ludGVybmFsLmgiCisKK1NiQ29uZGl0aW9uVmFyaWFibGVSZXN1bHQgU2JDb25kaXRpb25WYXJpYWJsZVdhaXQoCisgICAgU2JDb25kaXRpb25WYXJpYWJsZSogY29uZGl0aW9uLAorICAgIFNiTXV0ZXgqIG11dGV4KSB7CisgIGlmICghY29uZGl0aW9uIHx8ICFtdXRleCkgeworICAgIHJldHVybiBrU2JDb25kaXRpb25WYXJpYWJsZUZhaWxlZDsKKyAgfQorICBib29sIHJlc3VsdCA9CisgICAgICBTbGVlcENvbmRpdGlvblZhcmlhYmxlU1JXKFNCX1dJTjMyX0lOVEVSTkFMX0NPTkRJVElPTihjb25kaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQl9XSU4zMl9JTlRFUk5BTF9NVVRFWChtdXRleCksIElORklOSVRFLCAwKTsKKworICByZXR1cm4gcmVzdWx0ID8ga1NiQ29uZGl0aW9uVmFyaWFibGVTaWduYWxlZCA6IGtTYkNvbmRpdGlvblZhcmlhYmxlRmFpbGVkOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXRfdGltZWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhNDhmNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXRfdGltZWQuY2MKQEAgLTAsMCArMSw1NCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDb252ZXJ0U2JUaW1lVG9NaWxsaXNSb3VuZFVwOworCitTYkNvbmRpdGlvblZhcmlhYmxlUmVzdWx0IFNiQ29uZGl0aW9uVmFyaWFibGVXYWl0VGltZWQoCisgICAgU2JDb25kaXRpb25WYXJpYWJsZSogY29uZGl0aW9uLAorICAgIFNiTXV0ZXgqIG11dGV4LAorICAgIFNiVGltZSB0aW1lb3V0KSB7CisgIGlmICghY29uZGl0aW9uIHx8ICFtdXRleCkgeworICAgIHJldHVybiBrU2JDb25kaXRpb25WYXJpYWJsZUZhaWxlZDsKKyAgfQorCisgIGlmICh0aW1lb3V0IDwgMCkgeworICAgIHRpbWVvdXQgPSAwOworICB9CisgIGJvb2wgcmVzdWx0ID0gU2xlZXBDb25kaXRpb25WYXJpYWJsZVNSVygKKyAgICAgIFNCX1dJTjMyX0lOVEVSTkFMX0NPTkRJVElPTihjb25kaXRpb24pLCBTQl9XSU4zMl9JTlRFUk5BTF9NVVRFWChtdXRleCksCisgICAgICBDb252ZXJ0U2JUaW1lVG9NaWxsaXNSb3VuZFVwKHRpbWVvdXQpLCAwKTsKKworICBpZiAodGltZW91dCA9PSAwKSB7CisgICAgLy8gUGVyIGRvY3VtZW50YXRpb24sICJJZiB0aGUgfHRpbWVvdXRfZHVyYXRpb258IHZhbHVlIGlzIGxlc3MgdGhhbgorICAgIC8vIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFzIHF1aWNrbHkgYXMgcG9zc2libGUgd2l0aCBhCisgICAgLy8ga1NiQ29uZGl0aW9uVmFyaWFibGVUaW1lZE91dCByZXN1bHQuIgorICAgIHJldHVybiBrU2JDb25kaXRpb25WYXJpYWJsZVRpbWVkT3V0OworICB9CisKKyAgaWYgKHJlc3VsdCkgeworICAgIHJldHVybiBrU2JDb25kaXRpb25WYXJpYWJsZVNpZ25hbGVkOworICB9CisKKyAgaWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX1RJTUVPVVQpIHsKKyAgICByZXR1cm4ga1NiQ29uZGl0aW9uVmFyaWFibGVUaW1lZE91dDsKKyAgfQorICByZXR1cm4ga1NiQ29uZGl0aW9uVmFyaWFibGVGYWlsZWQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmZpZ3VyYXRpb24uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmZpZ3VyYXRpb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0MWNiZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZmlndXJhdGlvbi5jYwpAQCAtMCwwICsxLDcxIEBACisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmZpZ3VyYXRpb24uaCIKKworI2luY2x1ZGUgImNvYmFsdC9leHRlbnNpb24vY29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vY29uZmlndXJhdGlvbl9kZWZhdWx0cy5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhciogQ29iYWx0RmFsbGJhY2tTcGxhc2hTY3JlZW5VcmwoKSB7CisgIHJldHVybiAiZmlsZTovLy9jb2JhbHQvYnJvd3Nlci9zcGxhc2hfc2NyZWVuL3lvdXR1YmVfc3BsYXNoX3NjcmVlbi5odG1sIjsKK30KKworY29uc3QgY2hhciogQ29iYWx0UmFzdGVyaXplclR5cGUoKSB7CisgIC8vIFVzZSBhIGhhcmR3YXJlIHJhc3Rlcml6ZXIgYW5kIGdyYXBoaWNhbCBzZXR1cC4KKyAgcmV0dXJuICJoYXJkd2FyZSI7Cit9CisKK2NvbnN0IENvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25BcGkga0NvbmZpZ3VyYXRpb25BcGkgPSB7CisgICAga0NvYmFsdEV4dGVuc2lvbkNvbmZpZ3VyYXRpb25OYW1lLAorICAgIDIsCisgICAgJmNvbW1vbjo6Q29iYWx0VXNlck9uRXhpdFN0cmF0ZWd5RGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRSZW5kZXJEaXJ0eVJlZ2lvbk9ubHlEZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdEVnbFN3YXBJbnRlcnZhbERlZmF1bHQsCisgICAgJkNvYmFsdEZhbGxiYWNrU3BsYXNoU2NyZWVuVXJsLAorICAgICZjb21tb246OkNvYmFsdEVuYWJsZVF1aWNEZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdFNraWFDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRPZmZzY3JlZW5UYXJnZXRDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRFbmNvZGVkSW1hZ2VDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRJbWFnZUNhY2hlU2l6ZUluQnl0ZXNEZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdExvY2FsVHlwZWZhY2VDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRSZW1vdGVUeXBlZmFjZUNhY2hlU2l6ZUluQnl0ZXNEZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdE1lc2hDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRTb2Z0d2FyZVN1cmZhY2VDYWNoZVNpemVJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRJbWFnZUNhY2hlQ2FwYWNpdHlNdWx0aXBsaWVyV2hlblBsYXlpbmdWaWRlb0RlZmF1bHQsCisgICAgJmNvbW1vbjo6Q29iYWx0U2tpYUdseXBoQXRsYXNXaWR0aERlZmF1bHQsCisgICAgJmNvbW1vbjo6Q29iYWx0U2tpYUdseXBoQXRsYXNIZWlnaHREZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdEpzR2FyYmFnZUNvbGxlY3Rpb25UaHJlc2hvbGRJbkJ5dGVzRGVmYXVsdCwKKyAgICAmY29tbW9uOjpDb2JhbHRSZWR1Y2VDcHVNZW1vcnlCeURlZmF1bHQsCisgICAgJmNvbW1vbjo6Q29iYWx0UmVkdWNlR3B1TWVtb3J5QnlEZWZhdWx0LAorICAgICZjb21tb246OkNvYmFsdEdjWmVhbERlZmF1bHQsCisgICAgJkNvYmFsdFJhc3Rlcml6ZXJUeXBlLAorICAgICZjb21tb246OkNvYmFsdEVuYWJsZUppdERlZmF1bHQsCisgICAgJmNvbW1vbjo6Q29iYWx0RmFsbGJhY2tTcGxhc2hTY3JlZW5Ub3BpY3NEZWZhdWx0LAorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2NvbnN0IHZvaWQqIEdldENvbmZpZ3VyYXRpb25BcGkoKSB7CisgIHJldHVybiAma0NvbmZpZ3VyYXRpb25BcGk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25maWd1cmF0aW9uLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmZpZ3VyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBiMzVlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25maWd1cmF0aW9uLmgKQEAgLTAsMCArMSwyOCBAQAorLy8gQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfQ09ORklHVVJBVElPTl9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0NPTkZJR1VSQVRJT05fSF8KKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2NvbnN0IHZvaWQqIEdldENvbmZpZ3VyYXRpb25BcGkoKTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9DT05GSUdVUkFUSU9OX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlNzA0NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDYwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY29kZV90YXJnZXRfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgorCitTYkRlY29kZVRhcmdldFByaXZhdGU6OlNiRGVjb2RlVGFyZ2V0UHJpdmF0ZSgpIDogcmVmY291bnQoMSkgeworICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Cit9CisKK3ZvaWQgU2JEZWNvZGVUYXJnZXRQcml2YXRlOjpBZGRSZWYoKSB7CisgIFNiQXRvbWljQmFycmllcl9JbmNyZW1lbnQoJnJlZmNvdW50LCAxKTsKK30KKwordm9pZCBTYkRlY29kZVRhcmdldFByaXZhdGU6OlJlbGVhc2UoKSB7CisgIGludCBuZXdfY291bnQgPSBTYkF0b21pY0JhcnJpZXJfSW5jcmVtZW50KCZyZWZjb3VudCwgLTEpOworICBTQl9EQ0hFQ0sobmV3X2NvdW50ID49IDApOworICBpZiAobmV3X2NvdW50ID09IDApIHsKKyAgICBkZWxldGUgdGhpczsKKyAgfQorfQorCit2b2lkIFNiRGVjb2RlVGFyZ2V0UmVsZWFzZShTYkRlY29kZVRhcmdldCBkZWNvZGVfdGFyZ2V0KSB7CisgIGlmIChTYkRlY29kZVRhcmdldElzVmFsaWQoZGVjb2RlX3RhcmdldCkpIHsKKyAgICBkZWNvZGVfdGFyZ2V0LT5SZWxlYXNlKCk7CisgIH0KK30KKworU2JEZWNvZGVUYXJnZXRGb3JtYXQgU2JEZWNvZGVUYXJnZXRHZXRGb3JtYXQoU2JEZWNvZGVUYXJnZXQgZGVjb2RlX3RhcmdldCkgeworICAvLyBOb3RlIHRoYXQga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MlBsYW5lWVVWTlYxMiByZXByZXNlbnRzIERYR0lfRk9STUFUX05WMTIuCisgIC8vIGtTYkRlY29kZVRhcmdldEZvcm1hdDFQbGFuZVJHQkEgcmVwcmVzZW50cyBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STS4KKyAgU0JfRENIRUNLKGtTYkRlY29kZVRhcmdldEZvcm1hdDJQbGFuZVlVVk5WMTIgPT0gZGVjb2RlX3RhcmdldC0+aW5mby5mb3JtYXQgfHwKKyAgICAgICAgICAgIGtTYkRlY29kZVRhcmdldEZvcm1hdDFQbGFuZVJHQkEgPT0gZGVjb2RlX3RhcmdldC0+aW5mby5mb3JtYXQpOworICByZXR1cm4gZGVjb2RlX3RhcmdldC0+aW5mby5mb3JtYXQ7Cit9CisKK2Jvb2wgU2JEZWNvZGVUYXJnZXRHZXRJbmZvKFNiRGVjb2RlVGFyZ2V0IGRlY29kZV90YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRlY29kZVRhcmdldEluZm8qIG91dF9pbmZvKSB7CisgIGlmICghb3V0X2luZm8gfHwKKyAgICAgICFzdGFyYm9hcmQ6OmNvbW1vbjo6TWVtb3J5SXNaZXJvKG91dF9pbmZvLCBzaXplb2YoKm91dF9pbmZvKSkpIHsKKyAgICBTQl9EQ0hFQ0soZmFsc2UpIDw8ICJvdXRfaW5mbyBtdXN0IGJlIHplcm9lZCBvdXQuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgbWVtY3B5KG91dF9pbmZvLCAmZGVjb2RlX3RhcmdldC0+aW5mbywgc2l6ZW9mKCpvdXRfaW5mbykpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNvZGVfdGFyZ2V0X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZTA3NwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0RFQ09ERV9UQVJHRVRfSU5URVJOQUxfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ERUNPREVfVEFSR0VUX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2RlY29kZV90YXJnZXQuaCIKKworc3RydWN0IFNiRGVjb2RlVGFyZ2V0UHJpdmF0ZSB7CisgIFNiQXRvbWljMzIgcmVmY291bnQ7CisKKyAgLy8gUHVibGljbHkgYWNjZXNzaWJsZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVjb2RlIHRhcmdldC4KKyAgU2JEZWNvZGVUYXJnZXRJbmZvIGluZm87CisKKyAgU2JEZWNvZGVUYXJnZXRQcml2YXRlKCk7CisgIHZpcnR1YWwgflNiRGVjb2RlVGFyZ2V0UHJpdmF0ZSgpIHt9CisKKyAgdm9pZCBBZGRSZWYoKTsKKyAgdm9pZCBSZWxlYXNlKCk7Cit9OworCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfREVDT0RFX1RBUkdFVF9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNyeXB0aW5nX2RlY29kZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY3J5cHRpbmdfZGVjb2Rlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I4ODRmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNyeXB0aW5nX2RlY29kZXIuY2MKQEAgLTAsMCArMSwzNjIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjcnlwdGluZ19kZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bnVtZXJpYz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vYnl0ZV9zd2FwLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vcmVmX2NvdW50ZWQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9mb3VuZGF0aW9uX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCituYW1lc3BhY2UgeworCitDb21QdHI8SU1GU2FtcGxlPiBDcmVhdGVTYW1wbGUoY29uc3Qgdm9pZCogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHdpbjMyX3RpbWVzdGFtcCkgeworICBDb21QdHI8SU1GTWVkaWFCdWZmZXI+IGJ1ZmZlcjsKKyAgSFJFU1VMVCBociA9IE1GQ3JlYXRlTWVtb3J5QnVmZmVyKHNpemUsICZidWZmZXIpOworICBDaGVja1Jlc3VsdChocik7CisKKyAgQllURSogYnVmZmVyX3B0cjsKKyAgaHIgPSBidWZmZXItPkxvY2soJmJ1ZmZlcl9wdHIsIDAsIDApOworICBDaGVja1Jlc3VsdChocik7CisKKyAgbWVtY3B5KGJ1ZmZlcl9wdHIsIGRhdGEsIHNpemUpOworCisgIGhyID0gYnVmZmVyLT5VbmxvY2soKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIGhyID0gYnVmZmVyLT5TZXRDdXJyZW50TGVuZ3RoKHNpemUpOworICBDaGVja1Jlc3VsdChocik7CisKKyAgQ29tUHRyPElNRlNhbXBsZT4gaW5wdXQ7CisgIGhyID0gTUZDcmVhdGVTYW1wbGUoJmlucHV0KTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIGhyID0gaW5wdXQtPkFkZEJ1ZmZlcihidWZmZXIuR2V0KCkpOworICBDaGVja1Jlc3VsdChocik7CisKKyAgLy8gc2FtcGxlIHRpbWUgaXMgaW4gMTAwIG5hbm9zZWNvbmRzLgorICBpbnB1dC0+U2V0U2FtcGxlVGltZSh3aW4zMl90aW1lc3RhbXApOworICByZXR1cm4gaW5wdXQ7Cit9CisKK3ZvaWQgQXR0YWNoRHJtRGF0YVRvU2FtcGxlKENvbVB0cjxJTUZTYW1wbGU+IHNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGtleV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfaWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGl2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGl2X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYkRybVN1YlNhbXBsZU1hcHBpbmcqIHN1YnNhbXBsZV9tYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnNhbXBsZV9jb3VudCkgeworICBpZiAoaXZfc2l6ZSA9PSAxNiAmJiA6OnN0YXJib2FyZDo6Y29tbW9uOjpNZW1vcnlJc1plcm8oaXYgKyA4LCA4KSkgeworICAgIC8vIEZvciBpdiB0aGF0IGlzIDE2IGJ5dGVzIGxvbmcgYnV0IHRoZSB0aGUgbGFzdCA4IGJ5dGVzIGlzIDAsIHdlIHRyZWF0CisgICAgLy8gaXQgYXMgYW4gOCBieXRlcyBpdi4KKyAgICBpdl9zaXplID0gODsKKyAgfQorICBzYW1wbGUtPlNldEJsb2IoTUZTYW1wbGVFeHRlbnNpb25fRW5jcnlwdGlvbl9TYW1wbGVJRCwKKyAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUlOVDgqPihpdiksCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxVSU5UMzI+KGl2X3NpemUpKTsKKyAgU0JfRENIRUNLKGtleV9pZF9zaXplID09IHNpemVvZihHVUlEKSk7CisgIEdVSUQgZ3VpZCA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IEdVSUQqPihrZXlfaWQpOworCisgIGd1aWQuRGF0YTEgPSBTYkJ5dGVTd2FwVTMyKGd1aWQuRGF0YTEpOworICBndWlkLkRhdGEyID0gU2JCeXRlU3dhcFUxNihndWlkLkRhdGEyKTsKKyAgZ3VpZC5EYXRhMyA9IFNiQnl0ZVN3YXBVMTYoZ3VpZC5EYXRhMyk7CisKKyAgc2FtcGxlLT5TZXRHVUlEKE1GU2FtcGxlRXh0ZW5zaW9uX0NvbnRlbnRfS2V5SUQsIGd1aWQpOworCisgIFNCX0RDSEVDSyhzaXplb2YoRFdPUkQpICogMiA9PSBzaXplb2YoU2JEcm1TdWJTYW1wbGVNYXBwaW5nKSk7CisKKyAgU2JEcm1TdWJTYW1wbGVNYXBwaW5nIGRlZmF1bHRfc3Vic2FtcGxlID0gezAsIHNhbXBsZV9zaXplfTsKKyAgaWYgKHN1YnNhbXBsZV9jb3VudCA9PSAwKSB7CisgICAgc3Vic2FtcGxlX21hcHBpbmcgPSAmZGVmYXVsdF9zdWJzYW1wbGU7CisgICAgc3Vic2FtcGxlX2NvdW50ID0gMTsKKyAgfQorICBzYW1wbGUtPlNldEJsb2IoCisgICAgICBNRlNhbXBsZUV4dGVuc2lvbl9FbmNyeXB0aW9uX1N1YlNhbXBsZU1hcHBpbmdTcGxpdCwKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUlOVDgqPihzdWJzYW1wbGVfbWFwcGluZyksCisgICAgICBzdGF0aWNfY2FzdDxVSU5UMzI+KHN1YnNhbXBsZV9jb3VudCAqIHNpemVvZihTYkRybVN1YlNhbXBsZU1hcHBpbmcpKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitEZWNyeXB0aW5nRGVjb2Rlcjo6RGVjcnlwdGluZ0RlY29kZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4gZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtKQorICAgIDogdHlwZV8odHlwZSksIGRlY29kZXJfKGRlY29kZXIuUGFzcygpKSB7CisgIFNCX0RDSEVDSyhkZWNvZGVyXy5nZXQoKSk7CisgIGRybV9zeXN0ZW1fID0gc3RhdGljX2Nhc3Q8RHJtU3lzdGVtUGxheXJlYWR5Kj4oZHJtX3N5c3RlbSk7Cit9CisKK0RlY3J5cHRpbmdEZWNvZGVyOjp+RGVjcnlwdGluZ0RlY29kZXIoKSB7CisgIFJlc2V0KCk7Cit9CisKK2Jvb2wgRGVjcnlwdGluZ0RlY29kZXI6OlRyeVdyaXRlSW5wdXRCdWZmZXIoCisgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxJbnB1dEJ1ZmZlcj4mIGlucHV0X2J1ZmZlciwKKyAgICBpbnQgYnl0ZXNfdG9fc2tpcF9pbl9zYW1wbGUpIHsKKyAgU0JfRENIRUNLKGlucHV0X2J1ZmZlcik7CisgIFNCX0RDSEVDSyhieXRlc190b19za2lwX2luX3NhbXBsZSA+PSAwKTsKKworICBDb21QdHI8SU1GU2FtcGxlPiBpbnB1dF9zYW1wbGU7CisKKyAgY29uc3QgU2JEcm1TYW1wbGVJbmZvKiBkcm1faW5mbyA9IGlucHV0X2J1ZmZlci0+ZHJtX2luZm8oKTsKKyAgY29uc3QgdWludDhfdCoga2V5X2lkID0gTlVMTDsKKyAgaW50IGtleV9pZF9zaXplID0gMDsKKyAgYm9vbCBlbmNyeXB0ZWQgPSBmYWxzZTsKKworICBpZiAoZHJtX2luZm8gIT0gTlVMTCAmJiBkcm1faW5mby0+aWRlbnRpZmllcl9zaXplID09IDE2ICYmCisgICAgICAoZHJtX2luZm8tPmluaXRpYWxpemF0aW9uX3ZlY3Rvcl9zaXplID09IDggfHwKKyAgICAgICBkcm1faW5mby0+aW5pdGlhbGl6YXRpb25fdmVjdG9yX3NpemUgPT0gMTYpKSB7CisgICAga2V5X2lkID0gZHJtX2luZm8tPmlkZW50aWZpZXI7CisgICAga2V5X2lkX3NpemUgPSBkcm1faW5mby0+aWRlbnRpZmllcl9zaXplOworICAgIGVuY3J5cHRlZCA9IHRydWU7CisgIH0KKworICBpZiAoaW5wdXRfYnVmZmVyID09IGxhc3RfaW5wdXRfYnVmZmVyXykgeworICAgIFNCX0RDSEVDSyhsYXN0X2lucHV0X3NhbXBsZV8pOworICAgIGlucHV0X3NhbXBsZSA9IGxhc3RfaW5wdXRfc2FtcGxlXzsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaW5wdXRfYnVmZmVyLT5zaXplKCkgPCBieXRlc190b19za2lwX2luX3NhbXBsZSkgeworICAgICAgU0JfTk9UUkVBQ0hFRCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEgPSBpbnB1dF9idWZmZXItPmRhdGEoKSArIGJ5dGVzX3RvX3NraXBfaW5fc2FtcGxlOworICAgIGludCBzaXplID0gaW5wdXRfYnVmZmVyLT5zaXplKCkgLSBieXRlc190b19za2lwX2luX3NhbXBsZTsKKworICAgIHN0ZDo6aW50NjRfdCB3aW4zMl90aW1lc3RhbXAgPQorICAgICAgICBDb252ZXJ0VG9XaW4zMlRpbWUoaW5wdXRfYnVmZmVyLT50aW1lc3RhbXAoKSk7CisgICAgY29uc3QgdWludDhfdCogaXYgPSBOVUxMOworICAgIGludCBpdl9zaXplID0gMDsKKyAgICBjb25zdCBTYkRybVN1YlNhbXBsZU1hcHBpbmcqIHN1YnNhbXBsZV9tYXBwaW5nID0gTlVMTDsKKyAgICBpbnQgc3Vic2FtcGxlX2NvdW50ID0gMDsKKworICAgIGlmIChkcm1faW5mbyAhPSBOVUxMICYmIGRybV9pbmZvLT5pbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSAhPSAwKSB7CisgICAgICBpZiAoYnl0ZXNfdG9fc2tpcF9pbl9zYW1wbGUgIT0gMCkgeworICAgICAgICBpZiAoZHJtX2luZm8tPnN1YnNhbXBsZV9jb3VudCAhPSAwICYmIGRybV9pbmZvLT5zdWJzYW1wbGVfY291bnQgIT0gMSkgeworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHJtX2luZm8tPnN1YnNhbXBsZV9jb3VudCA9PSAxKSB7CisgICAgICAgICAgaWYgKGRybV9pbmZvLT5zdWJzYW1wbGVfbWFwcGluZ1swXS5jbGVhcl9ieXRlX2NvdW50ICE9CisgICAgICAgICAgICAgIGJ5dGVzX3RvX3NraXBfaW5fc2FtcGxlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWJzYW1wbGVfbWFwcGluZyA9IGRybV9pbmZvLT5zdWJzYW1wbGVfbWFwcGluZzsKKyAgICAgICAgc3Vic2FtcGxlX2NvdW50ID0gZHJtX2luZm8tPnN1YnNhbXBsZV9jb3VudDsKKyAgICAgIH0KKworICAgICAgaXYgPSBkcm1faW5mby0+aW5pdGlhbGl6YXRpb25fdmVjdG9yOworICAgICAgaXZfc2l6ZSA9IGRybV9pbmZvLT5pbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZTsKKyAgICB9CisKKyAgICAvLyBNRlNhbXBsZUV4dGVuc2lvbl9DbGVhblBvaW50IGlzIGEga2V5LWZyYW1lIGZvciB0aGUgdmlkZW8gKyBhdWRpby4gSXQgaXMKKyAgICAvLyBub3Qgc2V0IGhlcmUgYmVjYXVzZSB0aGUgd2luMzIgc3lzdGVtIGlzIHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgdGhpcyBvdXQuCisgICAgLy8gSXQgd2lsbCBwcm9iYWJseSBiZSB0b3RhbGx5IG9rIHRvIG5vdCBzZXQgdGhpcyBhdCBhbGwuIFJlc29sdXRpb246IElmCisgICAgLy8gdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggd2luMzIgdmlkZW8gZGVjb2RpbmcsIGNvbWUgYmFjayB0byB0aGlzIGFuZCBzZWUKKyAgICAvLyBpZiBzZXR0aW5nIHRoaXMgd2lsbCBmaXggaXQuIFRIaXMgd2lsbCBiZSB1c2VkIGlmCisgICAgLy8gU2JNZWRpYVZpZGVvU2FtcGxlSW5mbzo6aXNfa2V5X2ZyYW1lIGlzIHRydWUgaW5zaWRlIG9mIHRoZSB0aGlzIGZ1bmN0aW9uCisgICAgLy8gKHdoaWNoIHdpbGwgcmVjZWl2ZSBhbiBJbnB1dEJ1ZmZlcikuCisgICAgaW5wdXRfc2FtcGxlID0gQ3JlYXRlU2FtcGxlKGRhdGEsIHNpemUsIHdpbjMyX3RpbWVzdGFtcCk7CisKKyAgICBpZiAoZW5jcnlwdGVkKSB7CisgICAgICBBdHRhY2hEcm1EYXRhVG9TYW1wbGUoaW5wdXRfc2FtcGxlLCBzaXplLCBrZXlfaWQsIGtleV9pZF9zaXplLCBpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdl9zaXplLCBzdWJzYW1wbGVfbWFwcGluZywgc3Vic2FtcGxlX2NvdW50KTsKKyAgICB9CisgICAgbGFzdF9pbnB1dF9idWZmZXJfID0gaW5wdXRfYnVmZmVyOworICAgIGxhc3RfaW5wdXRfc2FtcGxlXyA9IGlucHV0X3NhbXBsZTsKKyAgfQorCisgIGlmIChlbmNyeXB0ZWQpIHsKKyAgICBpZiAoIWRlY3J5cHRvcl8pIHsKKyAgICAgIGlmIChkZWNvZGVyXy0+ZHJhaW5pbmcoKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBpZiAoIWRlY29kZXJfLT5kcmFpbmVkKCkpIHsKKyAgICAgICAgZGVjb2Rlcl8tPkRyYWluKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIGRlY29kZXJfLT5SZXNldEZyb21EcmFpbmVkKCk7CisgICAgICBzY29wZWRfcmVmcHRyPERybVN5c3RlbVBsYXlyZWFkeTo6TGljZW5zZT4gbGljZW5zZSA9CisgICAgICAgICAgZHJtX3N5c3RlbV8tPkdldExpY2Vuc2Uoa2V5X2lkLCBrZXlfaWRfc2l6ZSk7CisgICAgICBpZiAobGljZW5zZSAmJiBsaWNlbnNlLT51c2FibGUoKSkgeworICAgICAgICBkZWNyeXB0b3JfLnJlc2V0KG5ldyBNZWRpYVRyYW5zZm9ybShsaWNlbnNlLT5kZWNyeXB0b3IoKSkpOworICAgICAgICBib29sIHN1Y2Nlc3MgPSBBY3RpdmF0ZURlY3J5cHRvcigpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICBkZWNyeXB0b3JfLnJlc2V0KCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmICghZGVjcnlwdG9yXykgeworICAgICAgU0JfTk9UUkVBQ0hFRCgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIGlmIChlbmNyeXB0ZWQpIHsKKyAgICByZXR1cm4gZGVjcnlwdG9yXy0+VHJ5V3JpdGUoaW5wdXRfc2FtcGxlKTsKKyAgfQorICByZXR1cm4gZGVjb2Rlcl8tPlRyeVdyaXRlKGlucHV0X3NhbXBsZSk7Cit9CisKK2Jvb2wgRGVjcnlwdGluZ0RlY29kZXI6OlByb2Nlc3NBbmRSZWFkKENvbVB0cjxJTUZTYW1wbGU+KiBvdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21QdHI8SU1GTWVkaWFUeXBlPiogbmV3X3R5cGUpIHsKKyAgYm9vbCBkaWRfc29tZXRoaW5nID0gZmFsc2U7CisKKyAgKm91dHB1dCA9IGRlY29kZXJfLT5UcnlSZWFkKG5ld190eXBlKTsKKyAgZGlkX3NvbWV0aGluZyB8PSAqb3V0cHV0ICE9IE5VTEw7CisKKyAgaWYgKGRlY3J5cHRvcl8pIHsKKyAgICBpZiAoIXBlbmRpbmdfZGVjcnlwdG9yX291dHB1dF8pIHsKKyAgICAgIENvbVB0cjxJTUZNZWRpYVR5cGU+IGlnbm9yZWRfdHlwZTsKKyAgICAgIHBlbmRpbmdfZGVjcnlwdG9yX291dHB1dF8gPSBkZWNyeXB0b3JfLT5UcnlSZWFkKCZpZ25vcmVkX3R5cGUpOworICAgICAgZGlkX3NvbWV0aGluZyB8PSBwZW5kaW5nX2RlY3J5cHRvcl9vdXRwdXRfICE9IE5VTEw7CisgICAgfQorCisgICAgaWYgKHBlbmRpbmdfZGVjcnlwdG9yX291dHB1dF8pIHsKKyAgICAgIGlmIChkZWNvZGVyXy0+VHJ5V3JpdGUocGVuZGluZ19kZWNyeXB0b3Jfb3V0cHV0XykpIHsKKyAgICAgICAgcGVuZGluZ19kZWNyeXB0b3Jfb3V0cHV0Xy5SZXNldCgpOworICAgICAgICBkaWRfc29tZXRoaW5nID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVjcnlwdG9yXy0+ZHJhaW5lZCgpICYmICFkZWNvZGVyXy0+ZHJhaW5pbmcoKSAmJgorICAgICAgICAhZGVjb2Rlcl8tPmRyYWluZWQoKSkgeworICAgICAgZGVjb2Rlcl8tPkRyYWluKCk7CisgICAgICBkaWRfc29tZXRoaW5nID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gZGlkX3NvbWV0aGluZzsKK30KKwordm9pZCBEZWNyeXB0aW5nRGVjb2Rlcjo6RHJhaW4oKSB7CisgIGlmIChkZWNyeXB0b3JfKSB7CisgICAgZGVjcnlwdG9yXy0+RHJhaW4oKTsKKyAgfSBlbHNlIHsKKyAgICBkZWNvZGVyXy0+RHJhaW4oKTsKKyAgfQorfQorCitib29sIERlY3J5cHRpbmdEZWNvZGVyOjpBY3RpdmF0ZURlY3J5cHRvcigpIHsKKyAgU0JfRENIRUNLKGRlY3J5cHRvcl8pOworCisgIENvbVB0cjxJTUZNZWRpYVR5cGU+IGRlY29kZXJfb3V0cHV0X3R5cGUgPSBkZWNvZGVyXy0+R2V0Q3VycmVudE91dHB1dFR5cGUoKTsKKyAgZGVjcnlwdG9yXy0+U2V0SW5wdXRUeXBlKGRlY29kZXJfLT5HZXRDdXJyZW50SW5wdXRUeXBlKCkpOworCisgIEdVSUQgb3JpZ2luYWxfc3ViX3R5cGU7CisgIGRlY29kZXJfb3V0cHV0X3R5cGUtPkdldEdVSUQoTUZfTVRfU1VCVFlQRSwgJm9yaWdpbmFsX3N1Yl90eXBlKTsKKworICAvLyBFbnN1cmUgdGhhdCB0aGUgZGVjcnlwdG9yIGFuZCB0aGUgZGVjb2RlciBhZ3JlZXMgb24gdGhlIHByb3RlY3Rpb24gb2YKKyAgLy8gc2FtcGxlcyB0cmFuc2ZlcnJlZCBiZXR3ZWVuIHRoZW0uCisgIENvbVB0cjxJTUZTYW1wbGVQcm90ZWN0aW9uPiBkZWNyeXB0aW9uX3NhbXBsZV9wcm90ZWN0aW9uID0KKyAgICAgIGRlY3J5cHRvcl8tPkdldFNhbXBsZVByb3RlY3Rpb24oKTsKKyAgU0JfRENIRUNLKGRlY3J5cHRpb25fc2FtcGxlX3Byb3RlY3Rpb24pOworCisgIERXT1JEIGRlY3J5cHRpb25fcHJvdGVjdGlvbl92ZXJzaW9uOworICBIUkVTVUxUIGhyID0gZGVjcnlwdGlvbl9zYW1wbGVfcHJvdGVjdGlvbi0+R2V0T3V0cHV0UHJvdGVjdGlvblZlcnNpb24oCisgICAgICAmZGVjcnlwdGlvbl9wcm90ZWN0aW9uX3ZlcnNpb24pOworICBDaGVja1Jlc3VsdChocik7CisKKyAgQ29tUHRyPElNRlNhbXBsZVByb3RlY3Rpb24+IGRlY29kZXJfc2FtcGxlX3Byb3RlY3Rpb24gPQorICAgICAgZGVjb2Rlcl8tPkdldFNhbXBsZVByb3RlY3Rpb24oKTsKKyAgU0JfRENIRUNLKGRlY29kZXJfc2FtcGxlX3Byb3RlY3Rpb24pOworCisgIERXT1JEIGRlY29kZXJfcHJvdGVjdGlvbl92ZXJzaW9uOworICBociA9IGRlY29kZXJfc2FtcGxlX3Byb3RlY3Rpb24tPkdldElucHV0UHJvdGVjdGlvblZlcnNpb24oCisgICAgICAmZGVjb2Rlcl9wcm90ZWN0aW9uX3ZlcnNpb24pOworICBDaGVja1Jlc3VsdChocik7CisKKyAgRFdPUkQgcHJvdGVjdGlvbl92ZXJzaW9uID0KKyAgICAgIHN0ZDo6bWluKGRlY29kZXJfcHJvdGVjdGlvbl92ZXJzaW9uLCBkZWNyeXB0aW9uX3Byb3RlY3Rpb25fdmVyc2lvbik7CisgIGlmIChwcm90ZWN0aW9uX3ZlcnNpb24gPCBTQU1QTEVfUFJPVEVDVElPTl9WRVJTSU9OX1JDNCkgeworICAgIFNCX05PVFJFQUNIRUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIEJZVEUqIGNlcnRfZGF0YSA9IE5VTEw7CisgIERXT1JEIGNlcnRfZGF0YV9zaXplID0gMDsKKworICBociA9IGRlY29kZXJfc2FtcGxlX3Byb3RlY3Rpb24tPkdldFByb3RlY3Rpb25DZXJ0aWZpY2F0ZSgKKyAgICAgIHByb3RlY3Rpb25fdmVyc2lvbiwgJmNlcnRfZGF0YSwgJmNlcnRfZGF0YV9zaXplKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIEJZVEUqIGNyeXB0X3NlZWQgPSBOVUxMOworICBEV09SRCBjcnlwdF9zZWVkX3NpemUgPSAwOworICBociA9IGRlY3J5cHRpb25fc2FtcGxlX3Byb3RlY3Rpb24tPkluaXRPdXRwdXRQcm90ZWN0aW9uKAorICAgICAgcHJvdGVjdGlvbl92ZXJzaW9uLCAwLCBjZXJ0X2RhdGEsIGNlcnRfZGF0YV9zaXplLCAmY3J5cHRfc2VlZCwKKyAgICAgICZjcnlwdF9zZWVkX3NpemUpOworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBjYWxsIEluaXRPdXRwdXRQcm90ZWN0aW9uIHdoaWxlIHByb2Nlc3NpbmcKKyAgICAvLyBhIFVXUCByZXN1bWUgZXZlbnQgb3Igc2hvcnRseSBhZnRlci4KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIGhyID0gZGVjb2Rlcl9zYW1wbGVfcHJvdGVjdGlvbi0+SW5pdElucHV0UHJvdGVjdGlvbigKKyAgICAgIHByb3RlY3Rpb25fdmVyc2lvbiwgMCwgY3J5cHRfc2VlZCwgY3J5cHRfc2VlZF9zaXplKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIENvVGFza01lbUZyZWUoY2VydF9kYXRhKTsKKyAgQ29UYXNrTWVtRnJlZShjcnlwdF9zZWVkKTsKKworICAvLyBFbnN1cmUgdGhhdCB0aGUgaW5wdXQgdHlwZSBvZiB0aGUgZGVjb2RlciBpcyB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlCisgIC8vIGRlY3J5cHRvci4KKyAgQ29tUHRyPElNRk1lZGlhVHlwZT4gZGVjb2Rlcl9pbnB1dF90eXBlOworICBzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gZGVjcnlwdG9yX291dHB1dF90eXBlcyA9CisgICAgICBkZWNyeXB0b3JfLT5HZXRBdmFpbGFibGVPdXRwdXRUeXBlcygpOworICBTQl9EQ0hFQ0soIWRlY3J5cHRvcl9vdXRwdXRfdHlwZXMuZW1wdHkoKSk7CisKKyAgZGVjcnlwdG9yXy0+U2V0T3V0cHV0VHlwZShkZWNyeXB0b3Jfb3V0cHV0X3R5cGVzWzBdKTsKKyAgZGVjb2Rlcl8tPlNldElucHV0VHlwZShkZWNyeXB0b3Jfb3V0cHV0X3R5cGVzWzBdKTsKKworICBzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gZGVjb2Rlcl9vdXRwdXRfdHlwZXMgPQorICAgICAgZGVjb2Rlcl8tPkdldEF2YWlsYWJsZU91dHB1dFR5cGVzKCk7CisgIGZvciAoYXV0byBvdXRwdXRfdHlwZSA6IGRlY29kZXJfb3V0cHV0X3R5cGVzKSB7CisgICAgR1VJRCBzdWJfdHlwZTsKKyAgICBvdXRwdXRfdHlwZS0+R2V0R1VJRChNRl9NVF9TVUJUWVBFLCAmc3ViX3R5cGUpOworICAgIGlmIChJc0VxdWFsR1VJRChzdWJfdHlwZSwgb3JpZ2luYWxfc3ViX3R5cGUpKSB7CisgICAgICBkZWNvZGVyXy0+U2V0T3V0cHV0VHlwZShvdXRwdXRfdHlwZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRGVjcnlwdGluZ0RlY29kZXI6OlJlc2V0KCkgeworICBpZiAoZGVjcnlwdG9yXykgeworICAgIGRlY3J5cHRvcl8tPlJlc2V0KCk7CisgIH0KKyAgZGVjb2Rlcl8tPlJlc2V0KCk7CisKKyAgbGFzdF9pbnB1dF9idWZmZXJfID0gbnVsbHB0cjsKKyAgbGFzdF9pbnB1dF9zYW1wbGVfID0gbnVsbHB0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY3J5cHRpbmdfZGVjb2Rlci5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNyeXB0aW5nX2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM5ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNyeXB0aW5nX2RlY29kZXIuaApAQCAtMCwwICsxLDg1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ERUNSWVBUSU5HX0RFQ09ERVJfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ERUNSWVBUSU5HX0RFQ09ERVJfSF8KKworI2luY2x1ZGUgPEQzRDExLmg+CisjaW5jbHVkZSA8bWZhcGkuaD4KKyNpbmNsdWRlIDxtZmVycm9yLmg+CisjaW5jbHVkZSA8bWZpZGwuaD4KKyNpbmNsdWRlIDx3cmxcY2xpZW50Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9yZWZfY291bnRlZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9kcm0uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX3RyYW5zZm9ybS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworLy8gVGhpcyBjbGFzcyBtYWludGFpbnMgYSBNZWRpYVRyYW5zZm9ybSBiYXNlZCBkZWNvZGluZyBzdHJlYW0uICBXaGVuIHRoZQorLy8gc3RyZWFtIGlzIGVuY3J5cHRlZCwgaXQgYWxzbyBjb250YWlucyBhIE1lZGlhVHJhbnNmb3JtIGJhc2VkIGRlY3J5cHRvciBhbmQKKy8vIG1hbmFnZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGRlY3J5cHRvciBhbmQgdGhlIGRlY29kZXIuCitjbGFzcyBEZWNyeXB0aW5nRGVjb2RlciB7CisgcHVibGljOgorICBEZWNyeXB0aW5nRGVjb2Rlcihjb25zdCBzdGQ6OnN0cmluZyYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4gZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSk7CisgIH5EZWNyeXB0aW5nRGVjb2RlcigpOworCisgIE1lZGlhVHJhbnNmb3JtKiBHZXREZWNvZGVyKCkgeyByZXR1cm4gZGVjb2Rlcl8uZ2V0KCk7IH0KKworICBib29sIFRyeVdyaXRlSW5wdXRCdWZmZXIoY29uc3Qgc2NvcGVkX3JlZnB0cjxJbnB1dEJ1ZmZlcj4mIGlucHV0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRlc190b19za2lwX2luX3NhbXBsZSk7CisKKyAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYW55IGludGVybmFsIGFjdGlvbnMgc3VjY2VlZGVkLCB0aGlzIGltcGxpZXMgdGhhdAorICAvLyB0aGUgY2FsbGVyIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4gdG8gcHJvY2VzcyBmdXJ0aGVyLgorICAvLyB8b3V0cHV0fCBjb250YWlucyB0aGUgZGVjcnlwdGVkIGFuZCBkZWNvZGVkIG91dHB1dCBpZiB0aGVyZSBpcyBhbnkuCisgIC8vIHxuZXdfdHlwZXwgY29udGFpbnMgdGhlIG5ldyBvdXRwdXQgdHlwZSBpbiBjYXNlIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUKKyAgLy8gZGVjb2Rpbmcgc3RyZWFtIGlzIGNoYW5nZWQuCisgIGJvb2wgUHJvY2Vzc0FuZFJlYWQoQ29tUHRyPElNRlNhbXBsZT4qIG91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICBDb21QdHI8SU1GTWVkaWFUeXBlPiogbmV3X3R5cGUpOworICB2b2lkIERyYWluKCk7CisgIHZvaWQgUmVzZXQoKTsKKworIHByaXZhdGU6CisgIGJvb2wgQWN0aXZhdGVEZWNyeXB0b3IoKTsKKworICAvLyBUT0RPOiBDbGFyaWZ5IHRoZSB0aHJlYWQgcGF0dGVybiBvZiB0aGlzIGNsYXNzLgorICBjb25zdCBzdGQ6OnN0cmluZyB0eXBlXzsgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KKyAgRHJtU3lzdGVtUGxheXJlYWR5KiBkcm1fc3lzdGVtXzsKKworICBzY29wZWRfcHRyPE1lZGlhVHJhbnNmb3JtPiBkZWNyeXB0b3JfOworICBzY29wZWRfcHRyPE1lZGlhVHJhbnNmb3JtPiBkZWNvZGVyXzsKKworICBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiBsYXN0X2lucHV0X2J1ZmZlcl87CisgIENvbVB0cjxJTUZTYW1wbGU+IGxhc3RfaW5wdXRfc2FtcGxlXzsKKworICBDb21QdHI8SU1GU2FtcGxlPiBwZW5kaW5nX2RlY3J5cHRvcl9vdXRwdXRfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ERUNSWVBUSU5HX0RFQ09ERVJfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlhbG9nLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaWFsb2cuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhZmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlhbG9nLmNjCkBAIC0wLDAgKzEsMjUyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpYWxvZy5oIgorCisjaW5jbHVkZSA8d2luZGVmLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmRvd3N4Lmg+CisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaCIKKwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gRGlhbG9nQ2FsbGJhY2s7CisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6RGVidWdMb2dXaW5FcnJvcjsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q1N0cmluZ1RvV1N0cmluZzsKKworbmFtZXNwYWNlIHsKK0hXTkQgZ19jdXJyZW50X2RpYWxvZ19oYW5kbGUgPSBudWxscHRyOworRGlhbG9nQ2FsbGJhY2sgZ19va19jYWxsYmFjazsKK0RpYWxvZ0NhbGxiYWNrIGdfY2FuY2VsX2NhbGxiYWNrOworfSAgLy8gbmFtZXNwYWNlCisKKy8vIFdyYXBzIHRoZSB3aW4zMiBEaWFsb2cgaW50ZXJmYWNlIGZvciBidWlsZGluZyBEaWFsb2dzIGF0IHJ1bnRpbWUuCisvLyBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS9vbGRuZXd0aGluZy8yMDA1MDQyOS0wMC8/cD0zNTc0MworY2xhc3MgRGlhbG9nVGVtcGxhdGVCdWlsZGVyIHsKKyBwdWJsaWM6CisgIExQQ0RMR1RFTVBMQVRFIEJ1aWxkVGVtcGxhdGUoKSB7IHJldHVybiAoTFBDRExHVEVNUExBVEUpJnZbMF07IH0KKyAgdm9pZCBBbGlnblRvRHdvcmQoKSB7CisgICAgaWYgKHYuc2l6ZSgpICUgNCkKKyAgICAgIFdyaXRlKE5VTEwsIDQgLSAodi5zaXplKCkgJSA0KSk7CisgIH0KKyAgdm9pZCBXcml0ZShMUENWT0lEIHB2V3JpdGUsIERXT1JEIGNiV3JpdGUpIHsKKyAgICB2Lmluc2VydCh2LmVuZCgpLCBjYldyaXRlLCAwKTsKKyAgICBpZiAocHZXcml0ZSkKKyAgICAgIENvcHlNZW1vcnkoJnZbdi5zaXplKCkgLSBjYldyaXRlXSwgcHZXcml0ZSwgY2JXcml0ZSk7CisgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHZvaWQgV3JpdGUoVCB0KSB7CisgICAgV3JpdGUoJnQsIHNpemVvZihUKSk7CisgIH0KKyAgdm9pZCBXcml0ZVN0cmluZyhMUENXU1RSIHBzeikgeworICAgIFdyaXRlKHBzeiwgKGxzdHJsZW5XKHBzeikgKyAxKSAqIHNpemVvZihXQ0hBUikpOworICB9CisKKyBwcml2YXRlOgorICBzdGQ6OnZlY3RvcjxCWVRFPiB2OworfTsKKworSU5UX1BUUiBDQUxMQkFDSyBEaWFsb2dQcm9jZWR1cmVDYWxsYmFjayhIV05EIGRpYWxvZ19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BBUkFNIHdfcGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsX3BhcmFtKSB7CisgIFNCX0NIRUNLKCFnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSB8fCBkaWFsb2dfaGFuZGxlID09IGdfY3VycmVudF9kaWFsb2dfaGFuZGxlKQorICAgICAgPDwgIlJlY2VpdmVkIGNhbGxiYWNrIG9uIG5vbi1hY3RpdmUgZGlhbG9nISBPbmx5IG9uZSBkaWFsb2cgYXQgYSB0aW1lIGlzICIKKyAgICAgICAgICJzdXBwb3J0ZWQuIjsKKyAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgY2FzZSBXTV9JTklURElBTE9HOgorICAgICAgcmV0dXJuIFRSVUU7CisgICAgY2FzZSBXTV9DT01NQU5EOgorICAgICAgYXV0byBjb21tYW5kX2lkID0gR0VUX1dNX0NPTU1BTkRfSUQod19wYXJhbSwgbF9wYXJhbSk7CisgICAgICBpZiAoY29tbWFuZF9pZCA9PSBJRENBTkNFTCkgeworICAgICAgICBnX2NhbmNlbF9jYWxsYmFjaygpOworICAgICAgfSBlbHNlIGlmIChjb21tYW5kX2lkID09IElET0spIHsKKyAgICAgICAgZ19va19jYWxsYmFjaygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgRW5kRGlhbG9nKGRpYWxvZ19oYW5kbGUsIDApOworICAgICAgZ19jdXJyZW50X2RpYWxvZ19oYW5kbGUgPSBudWxscHRyOworICAgICAgcmV0dXJuIFRSVUU7CisgIH0KKyAgcmV0dXJuIEZBTFNFOworfQorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworYm9vbCBTaG93T2tDYW5jZWxEaWFsb2coSFdORCBod25kLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb2tfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZ0NhbGxiYWNrIG9rX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNhbmNlbF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgRGlhbG9nQ2FsbGJhY2sgY2FuY2VsX2NhbGxiYWNrKSB7CisgIGlmIChnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSAhPSBudWxscHRyKSB7CisgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJBbHJlYWR5IHNob3dpbmcgYSBkaWFsb2c7IGNhbmNlbGxpbmcgZXhpc3RpbmcgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2luZyB3aXRoIG5ldyBkaWFsb2ciOworICAgIENhbmNlbERpYWxvZygpOworICB9CisgIGdfb2tfY2FsbGJhY2sgPSBva19jYWxsYmFjazsKKyAgZ19jYW5jZWxfY2FsbGJhY2sgPSBjYW5jZWxfY2FsbGJhY2s7CisgIC8vIEdldCB0aGUgZGV2aWNlIGNvbnRleHQgKERDKSBhbmQgZnJvbSB0aGUgc3lzdGVtIHNvIHdlIGNhbiBzY2FsZSBvdXIgZm9udHMKKyAgLy8gY29ycmVjdGx5LgorICBIREMgaGRjID0gR2V0REMoTlVMTCk7CisgIFNCX0NIRUNLKGhkYyk7CisgIE5PTkNMSUVOVE1FVFJJQ1NXIG5jbSA9IHtzaXplb2YobmNtKX07CisgIGJvb2wgcmV0cmlldmVkX3N5c3RlbV9wYXJhbXMgPQorICAgICAgU3lzdGVtUGFyYW1ldGVyc0luZm9XKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCAwLCAmbmNtLCAwKTsKKworICBpZiAoIXJldHJpZXZlZF9zeXN0ZW1fcGFyYW1zKSB7CisgICAgRGVidWdMb2dXaW5FcnJvcigpOworICAgIFJlbGVhc2VEQyhOVUxMLCBoZGMpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBEaWFsb2dUZW1wbGF0ZUJ1aWxkZXIgZGlhbG9nX3RlbXBsYXRlOworICBjb25zdCBpbnQgaGVscF9pZCA9IDA7CisgIGNvbnN0IGludCBleHRlbmRlZF9zdHlsZSA9IDA7CisKKyAgY29uc3QgaW50IHdpbmRvd193aWR0aCA9IDIwMDsKKyAgY29uc3QgaW50IHdpbmRvd19oZWlnaHQgPSA4MDsKKyAgY29uc3QgaW50IHdpbmRvd194ID0gMzI7CisgIGNvbnN0IGludCB3aW5kb3dfeSA9IDMyOworCisgIGNvbnN0IGludCBlZGdlX3BhZGRpbmcgPSA3OworCisgIGNvbnN0IGludCBidXR0b25faGVpZ2h0ID0gMTQ7CisgIGNvbnN0IGludCBidXR0b25fd2lkdGggPSA1MDsKKyAgY29uc3QgaW50IGJ1dHRvbl95ID0gd2luZG93X2hlaWdodCAtIGJ1dHRvbl9oZWlnaHQgLSBlZGdlX3BhZGRpbmc7CisgIGNvbnN0IGludCBsZWZ0X2J1dHRvbl94ID0gd2luZG93X3dpZHRoIC8gMiAtIGJ1dHRvbl93aWR0aCAtIGVkZ2VfcGFkZGluZyAvIDI7CisgIGNvbnN0IGludCByaWdodF9idXR0b25feCA9IHdpbmRvd193aWR0aCAvIDIgKyBlZGdlX3BhZGRpbmcgLyAyOworICBjb25zdCBpbnQgdGV4dF93aWR0aCA9IHdpbmRvd193aWR0aCAtIGVkZ2VfcGFkZGluZyAqIDI7CisgIGNvbnN0IGludCB0ZXh0X2hlaWdodCA9IHdpbmRvd193aWR0aCAtIGVkZ2VfcGFkZGluZyAqIDMgLSBidXR0b25faGVpZ2h0OworICBjb25zdCBpbnQgZXh0cmFfZGF0YSA9IDA7CisKKyAgLy8gQ3JlYXRlIGEgZGlhbG9nIHRlbXBsYXRlLgorICAvLyBUaGUgZm9sbG93aW5nIE1TRE4gYmxvZ3Bvc3RzIGV4cGxhaW5zIGhvdyB0aGlzIGlzIGFsbCBsYWlkIG91dDoKKyAgLy8gaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAwNDA2MjMtMDAvP3A9Mzg3NTMKKyAgLy8gaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAwNTA0MjktMDAvP3A9MzU3NDMKKyAgLy8gTW9yZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uOgorICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY0NDk5Nih2PXZzLjg1KS5hc3B4I21vZGVsZXNzX2JveAorICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oMSk7ICAgICAgIC8vIGRpYWxvZyB2ZXJzaW9uCisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxXT1JEPigweEZGRkYpOyAgLy8gZXh0ZW5kZWQgZGlhbG9nIHRlbXBsYXRlCisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxEV09SRD4oaGVscF9pZCk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxEV09SRD4oZXh0ZW5kZWRfc3R5bGUpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgRFNfU0VURk9OVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNfTU9EQUxGUkFNRSk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxXT1JEPigzKTsgIC8vIG51bWJlciBvZiBjb250cm9scworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4od2luZG93X3gpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4od2luZG93X3kpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4od2luZG93X3dpZHRoKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KHdpbmRvd19oZWlnaHQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGVTdHJpbmcoTCIiKTsgIC8vIG5vIG1lbnUKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlU3RyaW5nKEwiIik7ICAvLyBkZWZhdWx0IGRpYWxvZyBjbGFzcworICAvLyBUaXRsZS4KKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlU3RyaW5nKAorICAgICAgKExQQ1dTVFIpc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDU3RyaW5nVG9XU3RyaW5nKHRpdGxlLmNfc3RyKCkpCisgICAgICAgICAgLmNfc3RyKCkpOworCisgIC8vIFNlZSBmb2xsb3dpbmcgZm9yIGluZm8gb24gaG93IHRoZSBmb250IHN0eWxpbmcgaXMgY2FsY3VsYXRlZDoKKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvZmY2ODQxNzModj12cy44NSkuYXNweAorICBpZiAobmNtLmxmTWVzc2FnZUZvbnQubGZIZWlnaHQgPCAwKSB7CisgICAgbmNtLmxmTWVzc2FnZUZvbnQubGZIZWlnaHQgPQorICAgICAgICAtTXVsRGl2KG5jbS5sZk1lc3NhZ2VGb250LmxmSGVpZ2h0LCA3MiwgR2V0RGV2aWNlQ2FwcyhoZGMsIExPR1BJWEVMU1kpKTsKKyAgfQorICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oKFdPUkQpbmNtLmxmTWVzc2FnZUZvbnQubGZIZWlnaHQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oKFdPUkQpbmNtLmxmTWVzc2FnZUZvbnQubGZXZWlnaHQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8QllURT4obmNtLmxmTWVzc2FnZUZvbnQubGZJdGFsaWMpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8QllURT4obmNtLmxmTWVzc2FnZUZvbnQubGZDaGFyU2V0KTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlU3RyaW5nKG5jbS5sZk1lc3NhZ2VGb250LmxmRmFjZU5hbWUpOworCisgIC8vIE1lc3NhZ2UgdGV4dC4KKyAgZGlhbG9nX3RlbXBsYXRlLkFsaWduVG9Ed29yZCgpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KGhlbHBfaWQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KGV4dGVuZGVkX3N0eWxlKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPERXT1JEPihXU19DSElMRCB8IFdTX1ZJU0lCTEUpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oZWRnZV9wYWRkaW5nKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGVkZ2VfcGFkZGluZyk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxXT1JEPih0ZXh0X3dpZHRoKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KHRleHRfaGVpZ2h0KTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPERXT1JEPigoRFdPUkQpLTEpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KDB4MDA4MkZGRkYpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGVTdHJpbmcoCisgICAgICAoTFBDV1NUUilzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmcobWVzc2FnZS5jX3N0cigpKQorICAgICAgICAgIC5jX3N0cigpKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGV4dHJhX2RhdGEpOworCisgIC8vIENhbmNlbCBidXR0b24uCisgIGRpYWxvZ190ZW1wbGF0ZS5BbGlnblRvRHdvcmQoKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPERXT1JEPihoZWxwX2lkKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPERXT1JEPihleHRlbmRlZF9zdHlsZSk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxEV09SRD4oV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU19ERUZQVVNIQlVUVE9OKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGxlZnRfYnV0dG9uX3gpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oYnV0dG9uX3kpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oYnV0dG9uX3dpZHRoKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGJ1dHRvbl9oZWlnaHQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KElEQ0FOQ0VMKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPERXT1JEPigweDAwODBGRkZGKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlU3RyaW5nKAorICAgICAgKExQQ1dTVFIpc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDU3RyaW5nVG9XU3RyaW5nKAorICAgICAgICAgIGNhbmNlbF9tZXNzYWdlLmNfc3RyKCkpCisgICAgICAgICAgLmNfc3RyKCkpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oZXh0cmFfZGF0YSk7CisKKyAgLy8gT2sgYnV0dG9uLgorICBkaWFsb2dfdGVtcGxhdGUuQWxpZ25Ub0R3b3JkKCk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxEV09SRD4oaGVscF9pZCk7CisgIGRpYWxvZ190ZW1wbGF0ZS5Xcml0ZTxEV09SRD4oZXh0ZW5kZWRfc3R5bGUpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNfREVGUFVTSEJVVFRPTik7ICAvLyBzdHlsZQorICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4ocmlnaHRfYnV0dG9uX3gpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oYnV0dG9uX3kpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8V09SRD4oYnV0dG9uX3dpZHRoKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGJ1dHRvbl9oZWlnaHQpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KElET0spOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGU8RFdPUkQ+KDB4MDA4MEZGRkYpOworICBkaWFsb2dfdGVtcGxhdGUuV3JpdGVTdHJpbmcoCisgICAgICAoTFBDV1NUUilzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmcob2tfbWVzc2FnZS5jX3N0cigpKQorICAgICAgICAgIC5jX3N0cigpKTsKKyAgZGlhbG9nX3RlbXBsYXRlLldyaXRlPFdPUkQ+KGV4dHJhX2RhdGEpOworCisgIFJlbGVhc2VEQyhOVUxMLCBoZGMpOworICAvLyBUZW1wbGF0ZSBpcyByZWFkeSAtIGdvIGRpc3BsYXkgaXQuCisgIGdfY3VycmVudF9kaWFsb2dfaGFuZGxlID0gQ3JlYXRlRGlhbG9nSW5kaXJlY3QoCisgICAgICBHZXRNb2R1bGVIYW5kbGUobnVsbHB0ciksIGRpYWxvZ190ZW1wbGF0ZS5CdWlsZFRlbXBsYXRlKCksIGh3bmQsCisgICAgICBEaWFsb2dQcm9jZWR1cmVDYWxsYmFjayk7CisgIFNob3dXaW5kb3coZ19jdXJyZW50X2RpYWxvZ19oYW5kbGUsIFNXX1NIT1cpOworICByZXR1cm4gZ19jdXJyZW50X2RpYWxvZ19oYW5kbGUgIT0gbnVsbHB0cjsKK30KKworYm9vbCBEaWFsb2dIYW5kbGVNZXNzYWdlKE1TRyogbXNnKSB7CisgIHJldHVybiBJc1dpbmRvdyhnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSkgJiYKKyAgICAgICAgIElzRGlhbG9nTWVzc2FnZShnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSwgbXNnKTsKK30KKwordm9pZCBDYW5jZWxEaWFsb2coKSB7CisgIGlmIChnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSAhPSBudWxscHRyKSB7CisgICAgRW5kRGlhbG9nKGdfY3VycmVudF9kaWFsb2dfaGFuZGxlLCAwKTsKKyAgICBnX2N1cnJlbnRfZGlhbG9nX2hhbmRsZSA9IG51bGxwdHI7CisgIH0KK30KKworfSAgLy8gIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vICBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpYWxvZy5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaWFsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmZmODdlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaWFsb2cuaApAQCAtMCwwICsxLDQ4IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ESUFMT0dfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ESUFMT0dfSF8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gRGlhbG9nQ2FsbGJhY2s7CisKKy8vIFNob3dzIGEgbW9kZWxlc3MgT0svQ2FuY2VsLXN0eWxlIGRpYWxvZy4gT25seSBvbmUgZGlhbG9nIG1heSBiZSBzaG93biBhdCBhCisvLyB0aW1lLgorYm9vbCBTaG93T2tDYW5jZWxEaWFsb2coSFdORCBod25kLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb2tfbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIERpYWxvZ0NhbGxiYWNrIG9rX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNhbmNlbF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgRGlhbG9nQ2FsbGJhY2sgY2FuY2VsX2NhbGxiYWNrKTsKKworLy8gQ2FuY2VscyB0aGUgY3VycmVudCBkaWFsb2cgdGhhdCBpcyBzaG93aW5nLCBpZiB0aGVyZSBpcyBvbmUuCit2b2lkIENhbmNlbERpYWxvZygpOworCitib29sIERpYWxvZ0hhbmRsZU1lc3NhZ2UoTVNHKiBtc2cpOworCit9ICAvLyAgbmFtZXNwYWNlIHdpbjMyCit9ICAvLyAgbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0RJQUxPR19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfY2FuX29wZW4uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9jYW5fb3Blbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhkZTIxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfY2FuX29wZW4uY2MKQEAgLTAsMCArMSw1MyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2RpcmVjdG9yeS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCitib29sIFNiRGlyZWN0b3J5Q2FuT3Blbihjb25zdCBjaGFyKiBwYXRoKSB7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SXNBYnNvbHV0ZVBhdGg7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SXNWYWxpZEhhbmRsZTsKKyAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGg7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6VHJpbUV4dHJhRmlsZVNlcGFyYXRvcnM7CisKKyAgaWYgKChwYXRoID09IG51bGxwdHIpIHx8IChwYXRoWzBdID09ICdcMCcpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp3c3RyaW5nIHBhdGhfd3N0cmluZyA9IE5vcm1hbGl6ZVdpbjMyUGF0aChwYXRoKTsKKyAgVHJpbUV4dHJhRmlsZVNlcGFyYXRvcnMoJnBhdGhfd3N0cmluZyk7CisKKyAgaWYgKCFJc0Fic29sdXRlUGF0aChwYXRoX3dzdHJpbmcpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgV0lOMzJfRklORF9EQVRBIGZpbmRfZGF0YSA9IHswfTsKKworICBIQU5ETEUgc2VhcmNoX2hhbmRsZSA9IEZpbmRGaXJzdEZpbGVFeFcoCisgICAgICBwYXRoX3dzdHJpbmcuY19zdHIoKSwgRmluZEV4SW5mb1N0YW5kYXJkLCAmZmluZF9kYXRhLAorICAgICAgRmluZEV4U2VhcmNoTmFtZU1hdGNoLCBOVUxMLCBGSU5EX0ZJUlNUX0VYX0NBU0VfU0VOU0lUSVZFKTsKKyAgaWYgKCFJc1ZhbGlkSGFuZGxlKHNlYXJjaF9oYW5kbGUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgRmluZENsb3NlKHNlYXJjaF9oYW5kbGUpOworCisgIHJldHVybiBmaW5kX2RhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2Nsb3NlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfY2xvc2UuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkNGU1NQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2Nsb3NlLmNjCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9kaXJlY3RvcnkuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmgiCisKK2Jvb2wgU2JEaXJlY3RvcnlDbG9zZShTYkRpcmVjdG9yeSBkaXJlY3RvcnkpIHsKKyAgaWYgKCFTYkRpcmVjdG9yeUlzVmFsaWQoZGlyZWN0b3J5KSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGJvb2wgc3VjY2VzcyA9IENsb3NlSGFuZGxlKGRpcmVjdG9yeS0+ZGlyZWN0b3J5X2hhbmRsZSk7CisKKyAgZGVsZXRlIGRpcmVjdG9yeTsKKworICByZXR1cm4gc3VjY2VzczsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2NyZWF0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNhZjQxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfY3JlYXRlLmNjCkBAIC0wLDAgKzEsNDMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9kaXJlY3RvcnkuaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpEaXJlY3RvcnlFeGlzdHM7Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkRpcmVjdG9yeUV4aXN0c09yQ3JlYXRlZDsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SXNBYnNvbHV0ZVBhdGg7Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6Ok5vcm1hbGl6ZVdpbjMyUGF0aDsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6VHJpbUV4dHJhRmlsZVNlcGFyYXRvcnM7CisKK2Jvb2wgU2JEaXJlY3RvcnlDcmVhdGUoY29uc3QgY2hhciogcGF0aCkgeworICBpZiAoKHBhdGggPT0gbnVsbHB0cikgfHwgKHBhdGhbMF0gPT0gJ1wwJykpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OndzdHJpbmcgcGF0aF93c3RyaW5nID0gTm9ybWFsaXplV2luMzJQYXRoKHBhdGgpOworICBUcmltRXh0cmFGaWxlU2VwYXJhdG9ycygmcGF0aF93c3RyaW5nKTsKKworICBpZiAoIUlzQWJzb2x1dGVQYXRoKHBhdGhfd3N0cmluZykpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gRGlyZWN0b3J5RXhpc3RzT3JDcmVhdGVkKHBhdGhfd3N0cmluZyk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9nZXRfbmV4dC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2dldF9uZXh0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzI2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9nZXRfbmV4dC5jYwpAQCAtMCwwICsxLDk3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZGlyZWN0b3J5LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK25hbWVzcGFjZSB7CisvLyBPbmUgb2YgdGhlIGVudHJpZXMgb2YgRklMRV9JRF9CT1RIX0RJUl9JTkZPIGlzIGEgZmlsZSBwYXRoLCBzbyBtYWtlIHRoZQorLy8gYnVmZmVyIGF0LWxlYXN0IG9uZSBwYXRoIGJpZy4KK2NvbnN0IHN0ZDo6c2l6ZV90IGtEaXJlY3RvcnlJbmZvQnVmZmVyU2l6ZSA9CisgICAga1NiRmlsZU1heFBhdGggKyBzaXplb2YoRklMRV9JRF9CT1RIX0RJUl9JTkZPKTsKKworc3RkOjpkZXF1ZTxzdGQ6OnN0cmluZz4gR2V0RGlyZWN0b3J5RW50cmllcyhIQU5ETEUgZGlyZWN0b3J5X2hhbmRsZSkgeworICAvLyBBY2NvcmRpbmcgdG8KKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjQyMjYodj12cy44NSkuYXNweCwKKyAgLy8gRklMRV9JRF9CT1RIX0RJUl9JTkZPIG11c3QgYmUgYWxpZ25lZCBvbiBhIERXT1JETE9ORyBib3VuZGFyeS4KKyAgYWxpZ25hcyhzaXplb2YoRFdPUkRMT05HKSkgc3RkOjp2ZWN0b3I8Y2hhcj4gZGlyZWN0b3J5X2luZm9fYnVmZmVyKAorICAgICAga0RpcmVjdG9yeUluZm9CdWZmZXJTaXplKTsKKworICBzdGQ6OmRlcXVlPHN0ZDo6c3RyaW5nPiBlbnRyaWVzOworICBCT09MIGRpcmVjdG9yeV9pbmZvX3N1Y2Nlc3MgPSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZUV4KAorICAgICAgZGlyZWN0b3J5X2hhbmRsZSwgRmlsZUlkQm90aERpcmVjdG9yeUluZm8sIGRpcmVjdG9yeV9pbmZvX2J1ZmZlci5kYXRhKCksCisgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGRpcmVjdG9yeV9pbmZvX2J1ZmZlci5zaXplKCkpKTsKKworICBpZiAoIWRpcmVjdG9yeV9pbmZvX3N1Y2Nlc3MpIHsKKyAgICByZXR1cm4gZW50cmllczsKKyAgfQorCisgIGNvbnN0IGNoYXIqIGRpcmVjdG9yeV9pbmZvX3BvaW50ZXIgPSBkaXJlY3RvcnlfaW5mb19idWZmZXIuZGF0YSgpOworICBEV09SRCBuZXh0X2VudHJ5X29mZnNldCA9IDA7CisKKyAgZG8geworICAgIGF1dG8gZGlyZWN0b3J5X2luZm8gPQorICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IEZJTEVfSURfQk9USF9ESVJfSU5GTyo+KGRpcmVjdG9yeV9pbmZvX3BvaW50ZXIpOworCisgICAgLy8gRmlsZU5hbWUgaXMgaW4gVW5pY29kZSwgc28gZGl2aWRlIGJ5IDIgdG8gZ2V0IHRoZSByZWFsIGxlbmd0aC4KKyAgICBEV09SRCBudW1iZXJfY2hhcmFjdGVyc19pbl9maWxlbmFtZSA9IGRpcmVjdG9yeV9pbmZvLT5GaWxlTmFtZUxlbmd0aCAvIDI7CisgICAgc3RkOjpzdHJpbmcgYXNjaWlfcGF0aCA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6d2NoYXJfdFRvVVRGOCgKKyAgICAgICAgZGlyZWN0b3J5X2luZm8tPkZpbGVOYW1lLCBudW1iZXJfY2hhcmFjdGVyc19pbl9maWxlbmFtZSk7CisgICAgU0JfRENIRUNLKGFzY2lpX3BhdGguc2l6ZSgpID09IG51bWJlcl9jaGFyYWN0ZXJzX2luX2ZpbGVuYW1lKTsKKyAgICBib29sIGlzX2RvdHRlZF9kaXJlY3RvcnkgPQorICAgICAgICAhYXNjaWlfcGF0aC5jb21wYXJlKCIuIikgfHwgIWFzY2lpX3BhdGguY29tcGFyZSgiLi4iKTsKKyAgICBpZiAoIWlzX2RvdHRlZF9kaXJlY3RvcnkpIHsKKyAgICAgIGVudHJpZXMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShhc2NpaV9wYXRoKSk7CisgICAgfQorICAgIG5leHRfZW50cnlfb2Zmc2V0ID0gZGlyZWN0b3J5X2luZm8tPk5leHRFbnRyeU9mZnNldDsKKyAgICBkaXJlY3RvcnlfaW5mb19wb2ludGVyICs9IG5leHRfZW50cnlfb2Zmc2V0OworICB9IHdoaWxlIChuZXh0X2VudHJ5X29mZnNldCAhPSAwKTsKKworICByZXR1cm4gZW50cmllczsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgU2JEaXJlY3RvcnlHZXROZXh0KFNiRGlyZWN0b3J5IGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfZW50cnlfc2l6ZSkgeworICBpZiAoIVNiRGlyZWN0b3J5SXNWYWxpZChkaXJlY3RvcnkpIHx8IG91dF9lbnRyeSA9PSBudWxscHRyIHx8CisgICAgICBvdXRfZW50cnlfc2l6ZSA8IGtTYkZpbGVNYXhOYW1lKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYXV0byYgbmV4dF9kaXJlY3RvcnlfZW50cmllcyA9IGRpcmVjdG9yeS0+bmV4dF9kaXJlY3RvcnlfZW50cmllczsKKyAgaWYgKG5leHRfZGlyZWN0b3J5X2VudHJpZXMuZW1wdHkoKSkgeworICAgIG5leHRfZGlyZWN0b3J5X2VudHJpZXMgPSBHZXREaXJlY3RvcnlFbnRyaWVzKGRpcmVjdG9yeS0+ZGlyZWN0b3J5X2hhbmRsZSk7CisgIH0KKworICBpZiAobmV4dF9kaXJlY3RvcnlfZW50cmllcy5lbXB0eSgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgaWYgKHN0YXJib2FyZDo6c3RybGNweShvdXRfZW50cnksIG5leHRfZGlyZWN0b3J5X2VudHJpZXMucmJlZ2luKCktPmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihvdXRfZW50cnlfc2l6ZSkpID49IG91dF9lbnRyeV9zaXplKSB7CisgICAgc3VjY2VzcyA9IGZhbHNlOworICB9CisgIGRpcmVjdG9yeS0+bmV4dF9kaXJlY3RvcnlfZW50cmllcy5wb3BfYmFjaygpOworICByZXR1cm4gc3VjY2VzczsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfaW50ZXJuYWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyMTkwYQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmNjCkBAIC0wLDAgKzEsMTA2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2RpcmVjdG9yeS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2Jvb2wgSGFzVmFsaWRIYW5kbGUoU2JEaXJlY3RvcnkgZGlyZWN0b3J5KSB7CisgIGlmICghU2JEaXJlY3RvcnlJc1ZhbGlkKGRpcmVjdG9yeSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0dXJuIGRpcmVjdG9yeS0+SGFzVmFsaWRIYW5kbGUoKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBzdHJpcHMgdHJhaWxpbmcgZmlsZSBzZXBhcmF0b3JzIGZyb20gYSBkaXJlY3RvcnkgbmFtZS4KKy8vIEZvciBleGFtcGxlIGlmIHRoZSBkaXJlY3RvcnkgbmFtZSB3YXMgIkM6XFxUZW1wXFxcXFxcIiwgaXQgd291bGQKKy8vIHN0cmlwIHRoZW0sIHNvIHRoYXQgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIG5vdyB0byBiZSAiQzpcXHRlbXAiLgordm9pZCBUcmltRXh0cmFGaWxlU2VwYXJhdG9ycyhzdGQ6OndzdHJpbmcqIGRpcm5hbWVfcG9pbnRlcikgeworICBTQl9EQ0hFQ0soZGlybmFtZV9wb2ludGVyKTsKKyAgc3RkOjp3c3RyaW5nJiBkaXJuYW1lID0gKmRpcm5hbWVfcG9pbnRlcjsKKyAgYXV0byBuZXdfZW5kID0gc3RkOjpmaW5kX2lmX25vdCgKKyAgICAgIGRpcm5hbWUucmJlZ2luKCksIGRpcm5hbWUucmVuZCgpLAorICAgICAgW10od2NoYXJfdCBjKSB7IHJldHVybiBjID09IGtTYkZpbGVTZXBDaGFyIHx8IGMgPT0ga1NiRmlsZUFsdFNlcENoYXI7IH0pOworICBkaXJuYW1lLmVyYXNlKG5ld19lbmQuYmFzZSgpLCBkaXJuYW1lLmVuZCgpKTsKK30KKworYm9vbCBJc0Fic29sdXRlUGF0aChjb25zdCBzdGQ6OndzdHJpbmcmIHBhdGgpIHsKKyAgc3RkOjp2ZWN0b3I8d2NoYXJfdD4gZnVsbF9wYXRoKGtTYkZpbGVNYXhQYXRoKTsKKyAgRFdPUkQgZnVsbF9wYXRoX3NpemUgPQorICAgICAgR2V0RnVsbFBhdGhOYW1lVyhwYXRoLmNfc3RyKCksIHN0YXRpY19jYXN0PERXT1JEPihmdWxsX3BhdGguc2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9wYXRoLmRhdGEoKSwgTlVMTCk7CisgIGlmIChmdWxsX3BhdGhfc2l6ZSA9PSAwKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW50IHBhdGhfc2l6ZSA9IHN0YXRpY19jYXN0PGludD4ocGF0aC5zaXplKCkpOworICByZXR1cm4gQ29tcGFyZVN0cmluZ0V4KExPQ0FMRV9OQU1FX1VTRVJfREVGQVVMVCwgTk9STV9JR05PUkVDQVNFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguY19zdHIoKSwgcGF0aF9zaXplLCBmdWxsX3BhdGguZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aF9zaXplLCBOVUxMLCBOVUxMLCAwKSA9PSBDU1RSX0VRVUFMOworfQorCitib29sIERpcmVjdG9yeUV4aXN0cyhjb25zdCBzdGQ6OndzdHJpbmcmIGRpcl9wYXRoKSB7CisgIGlmIChkaXJfcGF0aC5lbXB0eSgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHN0ZDo6d3N0cmluZyBub3JtX2Rpcl9wYXRoID0gTm9ybWFsaXplV2luMzJQYXRoKGRpcl9wYXRoKTsKKyAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyaWJ1dGVfZGF0YSA9IHswfTsKKyAgaWYgKCFHZXRGaWxlQXR0cmlidXRlc0V4Vyhub3JtX2Rpcl9wYXRoLmNfc3RyKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXR0cmlidXRlX2RhdGEpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiAoYXR0cmlidXRlX2RhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSk7Cit9CisKK2Jvb2wgQ3JlYXRlRGlyZWN0b3J5SGllcmFyY2h5KGNvbnN0IHN0ZDo6d3N0cmluZyYgd2Z1bGxfcGF0aCkgeworICBpZiAoRGlyZWN0b3J5RXhpc3RzT3JDcmVhdGVkKHdmdWxsX3BhdGgpKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgY29uc3Qgd2NoYXJfdCBrUGF0aFNlcGFyYXRvcnNbXSA9IHtzdGF0aWNfY2FzdDx3Y2hhcl90PihrU2JGaWxlU2VwQ2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oa1NiRmlsZUFsdFNlcENoYXIpfTsKKyAgc2l6ZV90IHBhdGhfZW5kID0gMDsKKyAgZG8geworICAgIHBhdGhfZW5kID0gd2Z1bGxfcGF0aC5maW5kX2ZpcnN0X29mKGtQYXRoU2VwYXJhdG9ycywgcGF0aF9lbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0JfQVJSQVlfU0laRShrUGF0aFNlcGFyYXRvcnMpKTsKKyAgICBpZiAocGF0aF9lbmQgPT0gc3RkOjp3c3RyaW5nOjpucG9zKSB7CisgICAgICBwYXRoX2VuZCA9IHdmdWxsX3BhdGguc2l6ZSgpOworICAgIH0KKyAgICBzdGQ6OndzdHJpbmcgdGVtcF9wYXRoID0gd2Z1bGxfcGF0aC5zdWJzdHIoMCwgcGF0aF9lbmQpOworICAgIERpcmVjdG9yeUV4aXN0c09yQ3JlYXRlZCh0ZW1wX3BhdGgpOworICB9IHdoaWxlIChwYXRoX2VuZCA8IHdmdWxsX3BhdGguc2l6ZSgpKTsKKworICByZXR1cm4gRGlyZWN0b3J5RXhpc3RzT3JDcmVhdGVkKHdmdWxsX3BhdGgpOworfQorCitib29sIERpcmVjdG9yeUV4aXN0c09yQ3JlYXRlZChjb25zdCBzdGQ6OndzdHJpbmcmIHdwYXRoKSB7CisgIHJldHVybiBEaXJlY3RvcnlFeGlzdHMod3BhdGgpIHx8IENyZWF0ZURpcmVjdG9yeVcod3BhdGguY19zdHIoKSwgTlVMTCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfaW50ZXJuYWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjZTA0OAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmgKQEAgLTAsMCArMSw4MCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRElSRUNUT1JZX0lOVEVSTkFMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRElSRUNUT1JZX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZGlyZWN0b3J5LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKworLy8gU2JGaWxlUHJpdmF0ZSBpcyBkZWZpbmVkIGFzIGEgc3RydWN0LCBidXQgZm9yIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKy8vIGVub3VnaCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGFkZGVkIHNvIHRoYXQgaXQgd2FycmFudHMgYmVpbmcgYSBjbGFzcworLy8gcGVyIEdvb2dsZSdzIEMrKyBzdHlsZSBndWlkZS4gIFRoaXMgbWlzbWF0Y2ggY2F1c2VzIHRoZSBNaWNyb3NvZnQncyBjb21waWxlcgorLy8gdG8gZ2VuZXJhdGUgYSB3YXJuaW5nLgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MDk5KQorCitjbGFzcyBTYkRpcmVjdG9yeVByaXZhdGUgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgU2JEaXJlY3RvcnlQcml2YXRlKEhBTkRMRSBoYW5kbGUpIDogZGlyZWN0b3J5X2hhbmRsZShoYW5kbGUpIHt9CisKKyAgYm9vbCBIYXNWYWxpZEhhbmRsZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpJc1ZhbGlkSGFuZGxlKGRpcmVjdG9yeV9oYW5kbGUpOworICB9CisKKyAgSEFORExFIGRpcmVjdG9yeV9oYW5kbGU7CisgIHN0ZDo6ZGVxdWU8c3RkOjpzdHJpbmc+IG5leHRfZGlyZWN0b3J5X2VudHJpZXM7CisKKyAgLy8gU2JEaXJlY3RvcnlQcml2YXRlIGlzIG5laXRoZXIgY29weWFibGUgbm9yIG1vdmFibGUuCisgIFNiRGlyZWN0b3J5UHJpdmF0ZShjb25zdCBTYkRpcmVjdG9yeVByaXZhdGUmKSA9IGRlbGV0ZTsKKyAgU2JEaXJlY3RvcnlQcml2YXRlJiBvcGVyYXRvcj0oY29uc3QgU2JEaXJlY3RvcnlQcml2YXRlJikgPSBkZWxldGU7Cit9OworI3ByYWdtYSB3YXJuaW5nKHBvcCkKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2Jvb2wgSGFzVmFsaWRIYW5kbGUoU2JEaXJlY3RvcnkgZGlyZWN0b3J5KTsKKworLy8gVGhpcyBmdW5jdGlvbiBzdHJpcHMgdHJhaWxpbmcgZmlsZSBzZXBhcmF0b3JzIGZyb20gYSBkaXJlY3RvcnkgbmFtZS4KKy8vIEZvciBleGFtcGxlIGlmIHRoZSBkaXJlY3RvcnkgbmFtZSB3YXMgIkM6XFxUZW1wXFxcXFxcIiwgaXQgd291bGQKKy8vIHN0cmlwIHRoZW0sIHNvIHRoYXQgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIG5vdyB0byBiZSAiQzpcXHRlbXAiLgordm9pZCBUcmltRXh0cmFGaWxlU2VwYXJhdG9ycyhzdGQ6OndzdHJpbmcqIGRpcm5hbWVfcG9pbnRlcik7CisKK2Jvb2wgSXNBYnNvbHV0ZVBhdGgoY29uc3Qgc3RkOjp3c3RyaW5nJiBwYXRoKTsKKworYm9vbCBEaXJlY3RvcnlFeGlzdHMoY29uc3Qgc3RkOjp3c3RyaW5nJiBkaXJfcGF0aCk7CisKKy8vIERpcmVjdG9yeSBoaWVyYXJjaHkgaXMgY3JlYXRlZCBmcm9tIHRpcCBkb3duIHRvIHJvb3QuIFRoaXMgaXMgbmVjZXNzYXJ5CisvLyBiZWNhdXNlIFVXUCBoYXMgaXNzdWVzIHdpdGggYm90dG9tIHVwIGRpcmVjdG9yeSBjcmVhdGlvbiBkdWUgdG8gcGVybWlzc2lvbnMuCitib29sIENyZWF0ZURpcmVjdG9yeUhpZXJhcmNoeShjb25zdCBzdGQ6OndzdHJpbmcmIHdmdWxsX3BhdGgpOworCitib29sIERpcmVjdG9yeUV4aXN0c09yQ3JlYXRlZChjb25zdCBzdGQ6OndzdHJpbmcmIHdwYXRoKTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9ESVJFQ1RPUllfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X29wZW4uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9vcGVuLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTU4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9vcGVuLmNjCkBAIC0wLDAgKzEsNjIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9kaXJlY3RvcnkuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCitTYkRpcmVjdG9yeSBTYkRpcmVjdG9yeU9wZW4oY29uc3QgY2hhciogcGF0aCwgU2JGaWxlRXJyb3IqIG91dF9lcnJvcikgeworICB1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmc7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Tm9ybWFsaXplV2luMzJQYXRoOworCisgIGlmICgocGF0aCA9PSBudWxscHRyKSB8fCAocGF0aFswXSA9PSAnXDAnKSkgeworICAgIGlmIChvdXRfZXJyb3IpIHsKKyAgICAgICpvdXRfZXJyb3IgPSBrU2JGaWxlRXJyb3JOb3RGb3VuZDsKKyAgICB9CisgICAgcmV0dXJuIGtTYkRpcmVjdG9yeUludmFsaWQ7CisgIH0KKworICBzdGQ6OndzdHJpbmcgcGF0aF93c3RyaW5nID0gTm9ybWFsaXplV2luMzJQYXRoKHBhdGgpOworCisgIGlmICghc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpJc0Fic29sdXRlUGF0aChwYXRoX3dzdHJpbmcpKSB7CisgICAgaWYgKG91dF9lcnJvcikgeworICAgICAgKm91dF9lcnJvciA9IGtTYkZpbGVFcnJvck5vdEZvdW5kOworICAgIH0KKyAgICByZXR1cm4ga1NiRGlyZWN0b3J5SW52YWxpZDsKKyAgfQorCisgIEhBTkRMRSBkaXJlY3RvcnlfaGFuZGxlID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpPcGVuRmlsZU9yRGlyZWN0b3J5KAorICAgICAgcGF0aCwga1NiRmlsZU9wZW5Pbmx5IHwga1NiRmlsZVJlYWQsIG51bGxwdHIsIG91dF9lcnJvcik7CisKKyAgaWYgKCFzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OklzVmFsaWRIYW5kbGUoZGlyZWN0b3J5X2hhbmRsZSkpIHsKKyAgICByZXR1cm4ga1NiRGlyZWN0b3J5SW52YWxpZDsKKyAgfQorCisgIEZJTEVfQkFTSUNfSU5GTyBiYXNpY19pbmZvID0gezB9OworICBCT09MIGJhc2ljX2luZm9fc3VjY2VzcyA9IEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlRXgoCisgICAgICBkaXJlY3RvcnlfaGFuZGxlLCBGaWxlQmFzaWNJbmZvLCAmYmFzaWNfaW5mbywgc2l6ZW9mKEZJTEVfQkFTSUNfSU5GTykpOworCisgIGlmICghYmFzaWNfaW5mb19zdWNjZXNzIHx8CisgICAgICAhKGJhc2ljX2luZm8uRmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSB7CisgICAgQ2xvc2VIYW5kbGUoZGlyZWN0b3J5X2hhbmRsZSk7CisgICAgaWYgKG91dF9lcnJvcikgeworICAgICAgKm91dF9lcnJvciA9IGtTYkZpbGVFcnJvck5vdEFEaXJlY3Rvcnk7CisgICAgfQorICAgIHJldHVybiBrU2JEaXJlY3RvcnlJbnZhbGlkOworICB9CisKKyAgcmV0dXJuIG5ldyBTYkRpcmVjdG9yeVByaXZhdGUoZGlyZWN0b3J5X2hhbmRsZSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9jcmVhdGVfc3lzdGVtLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fY3JlYXRlX3N5c3RlbS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjczMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fY3JlYXRlX3N5c3RlbS5jYwpAQCAtMCwwICsxLDQ4IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZHJtLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fc3lzdGVtX3BsYXlyZWFkeS5oIgorCitTYkRybVN5c3RlbSBTYkRybUNyZWF0ZVN5c3RlbSgKKyAgICBjb25zdCBjaGFyKiBrZXlfc3lzdGVtLAorICAgIHZvaWQqIGNvbnRleHQsCisgICAgU2JEcm1TZXNzaW9uVXBkYXRlUmVxdWVzdEZ1bmMgdXBkYXRlX3JlcXVlc3RfY2FsbGJhY2ssCisgICAgU2JEcm1TZXNzaW9uVXBkYXRlZEZ1bmMgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrLAorICAgIFNiRHJtU2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZEZ1bmMga2V5X3N0YXR1c2VzX2NoYW5nZWRfY2FsbGJhY2ssCisgICAgU2JEcm1TZXJ2ZXJDZXJ0aWZpY2F0ZVVwZGF0ZWRGdW5jIHNlcnZlcl9jZXJ0aWZpY2F0ZV91cGRhdGVkX2NhbGxiYWNrLAorICAgIFNiRHJtU2Vzc2lvbkNsb3NlZEZ1bmMgc2Vzc2lvbl9jbG9zZWRfY2FsbGJhY2spIHsKKyAgdXNpbmcgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkRybVN5c3RlbVBsYXlyZWFkeTsKKworICBpZiAoIXVwZGF0ZV9yZXF1ZXN0X2NhbGxiYWNrIHx8ICFzZXNzaW9uX3VwZGF0ZWRfY2FsbGJhY2sgfHwKKyAgICAgICFrZXlfc3RhdHVzZXNfY2hhbmdlZF9jYWxsYmFjayB8fCAhc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0ZWRfY2FsbGJhY2sgfHwKKyAgICAgICFzZXNzaW9uX2Nsb3NlZF9jYWxsYmFjaykgeworICAgIFNCX0RMT0coV0FSTklORykgPDwgIkNhbGxiYWNrIGZ1bmN0aW9ucyBub3Qgc2V0IG9uIGtleSBzeXN0ZW06ICIKKyAgICAgICAgICAgICAgICAgICAgIDw8IGtleV9zeXN0ZW07CisgICAgcmV0dXJuIGtTYkRybVN5c3RlbUludmFsaWQ7CisgIH0KKworICBpZiAoRHJtU3lzdGVtUGxheXJlYWR5OjpJc0tleVN5c3RlbVN1cHBvcnRlZChrZXlfc3lzdGVtKSkgeworICAgIHJldHVybiBuZXcgRHJtU3lzdGVtUGxheXJlYWR5KAorICAgICAgICBjb250ZXh0LCBbXSgpIHsgcmV0dXJuIGZhbHNlOyB9LCAgLy8gT3V0cHV0IHByb3RlY3Rpb24gbm90IHN1cHBvcnRlZAorICAgICAgICB1cGRhdGVfcmVxdWVzdF9jYWxsYmFjaywgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrLAorICAgICAgICBrZXlfc3RhdHVzZXNfY2hhbmdlZF9jYWxsYmFjaywgc2Vzc2lvbl9jbG9zZWRfY2FsbGJhY2spOworICB9CisKKyAgU0JfRExPRyhXQVJOSU5HKSA8PCAiSW52YWxpZCBrZXkgc3lzdGVtICIgPDwga2V5X3N5c3RlbTsKKyAgcmV0dXJuIGtTYkRybVN5c3RlbUludmFsaWQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fc3lzdGVtX3BsYXlyZWFkeS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2E1ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fc3lzdGVtX3BsYXlyZWFkeS5jYwpAQCAtMCwwICsxLDM3OCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fc3lzdGVtX3BsYXlyZWFkeS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vaW5zdGFuY2VfY291bnRlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuaCIKKworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhciBrUGxheVJlYWR5S2V5U3lzdGVtW10gPSAiY29tLnlvdXR1YmUucGxheXJlYWR5IjsKK2NvbnN0IGJvb2wga0xvZ1BsYXlyZWFkeUNoYWxsZW5nZVJlc3BvbnNlID0gZmFsc2U7CisKK0RFQ0xBUkVfSU5TVEFOQ0VfQ09VTlRFUihEcm1TeXN0ZW1QbGF5cmVhZHkpOworCitzdGQ6OnN0cmluZyBHZXRIZXhSZXByZXNlbnRhdGlvbihjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCBjaGFyIGtIZXhbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKworICBzdGQ6OnN0cmluZ3N0cmVhbSByZXByZXNlbnRhdGlvbjsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gYXNjaWk7CisgIGNvbnN0IHVpbnQ4X3QqIGJpbmFyeSA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKTsKKyAgYm9vbCBuZXdfbGluZSA9IHRydWU7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgaWYgKG5ld19saW5lKSB7CisgICAgICBuZXdfbGluZSA9IGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICByZXByZXNlbnRhdGlvbiA8PCAnICc7CisgICAgfQorICAgIGFzY2lpIDw8IChzdGQ6OmlzcHJpbnQoYmluYXJ5W2ldKSA/IHN0YXRpY19jYXN0PGNoYXI+KGJpbmFyeVtpXSkgOiAnPycpOworICAgIHJlcHJlc2VudGF0aW9uIDw8IGtIZXhbYmluYXJ5W2ldIC8gMTZdIDw8IGtIZXhbYmluYXJ5W2ldICUgMTZdOworICAgIGlmIChpICUgMTYgPT0gMTUgJiYgaSAhPSBzaXplIC0gMSkgeworICAgICAgcmVwcmVzZW50YXRpb24gPDwgIiAoIiA8PCBhc2NpaS5zdHIoKSA8PCAnKScgPDwgc3RkOjplbmRsOworICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZW1wdHk7CisgICAgICBhc2NpaS5zd2FwKGVtcHR5KTsgIC8vIENsZWFyIHRoZSBhc2NpaSBzdHJlYW0KKyAgICAgIG5ld19saW5lID0gdHJ1ZTsKKyAgICB9CisgIH0KKworICBpZiAoIWFzY2lpLnN0cigpLmVtcHR5KCkpIHsKKyAgICByZXByZXNlbnRhdGlvbiA8PCAnKCcgPDwgYXNjaWkuc3RyKCkgPDwgJyknIDw8IHN0ZDo6ZW5kbDsKKyAgfQorCisgIHJldHVybiByZXByZXNlbnRhdGlvbi5zdHIoKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGQ6OnN0cmluZyBHZXRIZXhSZXByZXNlbnRhdGlvbihjb25zdCBUJiB2YWx1ZSkgeworICByZXR1cm4gR2V0SGV4UmVwcmVzZW50YXRpb24oJnZhbHVlLCBzaXplb2YoVCkpOworfQorCitjbGFzcyBBY3RpdmVEcm1TeXN0ZW1zIHsKKyBwdWJsaWM6CisgIDo6c3RhcmJvYXJkOjpNdXRleCBtdXRleF87CisgIHN0ZDo6dmVjdG9yPHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6RHJtU3lzdGVtUGxheXJlYWR5Kj4gYWN0aXZlX3N5c3RlbXNfOworfTsKKworU0JfT05DRV9JTklUSUFMSVpFX0ZVTkNUSU9OKEFjdGl2ZURybVN5c3RlbXMsIEdldEFjdGl2ZURybVN5c3RlbXMpOworCit9ICAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK3ZvaWQgRHJtU3lzdGVtT25Vd3BSZXN1bWUoKSB7CisgIDo6c3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2soR2V0QWN0aXZlRHJtU3lzdGVtcygpLT5tdXRleF8pOworICBmb3IgKERybVN5c3RlbVBsYXlyZWFkeSogaXRlbSA6IEdldEFjdGl2ZURybVN5c3RlbXMoKS0+YWN0aXZlX3N5c3RlbXNfKSB7CisgICAgaXRlbS0+T25Vd3BSZXN1bWUoKTsKKyAgfQorfQorCitEcm1TeXN0ZW1QbGF5cmVhZHk6OkRybVN5c3RlbVBsYXlyZWFkeSgKKyAgICB2b2lkKiBjb250ZXh0LAorICAgIEVuYWJsZU91dHB1dFByb3RlY3Rpb25GdW5jIGVuYWJsZV9vdXRwdXRfcHJvdGVjdGlvbl9mdW5jLAorICAgIFNiRHJtU2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jIHNlc3Npb25fdXBkYXRlX3JlcXVlc3RfY2FsbGJhY2ssCisgICAgU2JEcm1TZXNzaW9uVXBkYXRlZEZ1bmMgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrLAorICAgIFNiRHJtU2Vzc2lvbktleVN0YXR1c2VzQ2hhbmdlZEZ1bmMga2V5X3N0YXR1c2VzX2NoYW5nZWRfY2FsbGJhY2ssCisgICAgU2JEcm1TZXNzaW9uQ2xvc2VkRnVuYyBzZXNzaW9uX2Nsb3NlZF9jYWxsYmFjaykKKyAgICA6IGNvbnRleHRfKGNvbnRleHQpLAorICAgICAgZW5hYmxlX291dHB1dF9wcm90ZWN0aW9uX2Z1bmNfKGVuYWJsZV9vdXRwdXRfcHJvdGVjdGlvbl9mdW5jKSwKKyAgICAgIHNlc3Npb25fdXBkYXRlX3JlcXVlc3RfY2FsbGJhY2tfKHNlc3Npb25fdXBkYXRlX3JlcXVlc3RfY2FsbGJhY2spLAorICAgICAgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrXyhzZXNzaW9uX3VwZGF0ZWRfY2FsbGJhY2spLAorICAgICAga2V5X3N0YXR1c2VzX2NoYW5nZWRfY2FsbGJhY2tfKGtleV9zdGF0dXNlc19jaGFuZ2VkX2NhbGxiYWNrKSwKKyAgICAgIHNlc3Npb25fY2xvc2VkX2NhbGxiYWNrXyhzZXNzaW9uX2Nsb3NlZF9jYWxsYmFjaykgeworICBTQl9EQ0hFQ0soZW5hYmxlX291dHB1dF9wcm90ZWN0aW9uX2Z1bmMpOworICBTQl9EQ0hFQ0soc2Vzc2lvbl91cGRhdGVfcmVxdWVzdF9jYWxsYmFjayk7CisgIFNCX0RDSEVDSyhzZXNzaW9uX3VwZGF0ZWRfY2FsbGJhY2spOworICBTQl9EQ0hFQ0soa2V5X3N0YXR1c2VzX2NoYW5nZWRfY2FsbGJhY2spOworICBTQl9EQ0hFQ0soc2Vzc2lvbl9jbG9zZWRfY2FsbGJhY2spOworCisgIE9OX0lOU1RBTkNFX0NSRUFURUQoRHJtU3lzdGVtUGxheXJlYWR5KTsKKworICBTY29wZWRMb2NrIGxvY2soR2V0QWN0aXZlRHJtU3lzdGVtcygpLT5tdXRleF8pOworICBHZXRBY3RpdmVEcm1TeXN0ZW1zKCktPmFjdGl2ZV9zeXN0ZW1zXy5wdXNoX2JhY2sodGhpcyk7Cit9CisKK0RybVN5c3RlbVBsYXlyZWFkeTo6fkRybVN5c3RlbVBsYXlyZWFkeSgpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIE9OX0lOU1RBTkNFX1JFTEVBU0VEKERybVN5c3RlbVBsYXlyZWFkeSk7CisKKyAgU2NvcGVkTG9jayBsb2NrKEdldEFjdGl2ZURybVN5c3RlbXMoKS0+bXV0ZXhfKTsKKyAgYXV0byYgYWN0aXZlX3N5c3RlbXMgPSBHZXRBY3RpdmVEcm1TeXN0ZW1zKCktPmFjdGl2ZV9zeXN0ZW1zXzsKKyAgYWN0aXZlX3N5c3RlbXMuZXJhc2Uoc3RkOjpyZW1vdmUoCisgICAgICBhY3RpdmVfc3lzdGVtcy5iZWdpbigpLCBhY3RpdmVfc3lzdGVtcy5lbmQoKSwgdGhpcykpOworfQorCitib29sIERybVN5c3RlbVBsYXlyZWFkeTo6SXNLZXlTeXN0ZW1TdXBwb3J0ZWQoY29uc3QgY2hhcioga2V5X3N5c3RlbSkgeworICBTQl9EQ0hFQ0soa2V5X3N5c3RlbSk7CisKKyAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgfGtleV9zeXN0ZW18IGNvbWVzIHdpdGggZXh0cmEgYXR0cmlidXRlcywgbGlrZQorICAvLyBgY29tLnlvdXR1YmUucGxheXJlYWR5OyBlbmNyeXB0aW9uc2NoZW1lPSJjZW5jImAuICBXZSBwcmVwZW5kICJrZXlfc3lzdGVtLyIKKyAgLy8gdG8gaXQsIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgTWltZVR5cGUuCisgIHN0YXJib2FyZDo6bWVkaWE6Ok1pbWVUeXBlIG1pbWVfdHlwZShzdGQ6OnN0cmluZygia2V5X3N5c3RlbS8iKSArIGtleV9zeXN0ZW0pOworCisgIGlmICghbWltZV90eXBlLmlzX3ZhbGlkKCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgU0JfRENIRUNLKG1pbWVfdHlwZS50eXBlKCkgPT0gImtleV9zeXN0ZW0iKTsKKyAgaWYgKG1pbWVfdHlwZS5zdWJ0eXBlKCkgIT0ga1BsYXlSZWFkeUtleVN5c3RlbSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbWltZV90eXBlLkdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgaWYgKG1pbWVfdHlwZS5HZXRQYXJhbU5hbWUoaSkgPT0gImVuY3J5cHRpb25zY2hlbWUiKSB7CisgICAgICBhdXRvIHZhbHVlID0gbWltZV90eXBlLkdldFBhcmFtU3RyaW5nVmFsdWUoaSk7CisgICAgICBpZiAodmFsdWUgIT0gImNlbmMiKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEcm1TeXN0ZW1QbGF5cmVhZHk6OkdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoCisgICAgaW50IHRpY2tldCwKKyAgICBjb25zdCBjaGFyKiB0eXBlLAorICAgIGNvbnN0IHZvaWQqIGluaXRpYWxpemF0aW9uX2RhdGEsCisgICAgaW50IGluaXRpYWxpemF0aW9uX2RhdGFfc2l6ZSkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgaWYgKHN0cmNtcCgiY2VuYyIsIHR5cGUpICE9IDApIHsKKyAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgaW5pdGlhbGl6YXRpb24gZGF0YSB0eXBlICIgPDwgdHlwZTsKKyAgICByZXR1cm47CisgIH0KKworICBzdGQ6OnN0cmluZyBzZXNzaW9uX2lkID0gR2VuZXJhdGVBbmRBZHZhbmNlU2Vzc2lvbklkKCk7CisgIHNjb3BlZF9yZWZwdHI8TGljZW5zZT4gbGljZW5zZSA9CisgICAgICBMaWNlbnNlOjpDcmVhdGUoaW5pdGlhbGl6YXRpb25fZGF0YSwgaW5pdGlhbGl6YXRpb25fZGF0YV9zaXplKTsKKyAgY29uc3Qgc3RkOjpzdHJpbmcmIGNoYWxsZW5nZSA9IGxpY2Vuc2UtPmxpY2Vuc2VfY2hhbGxlbmdlKCk7CisgIGlmIChjaGFsbGVuZ2UuZW1wdHkoKSkgeworICAgIC8vIFNpZ25hbCBhbiBlcnJvciB3aXRoIHxzZXNzaW9uX2lkfCBhcyBOVUxMLgorICAgIFNCX0xPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBnZW5lcmF0ZSBsaWNlbnNlIGNoYWxsZW5nZSI7CisgICAgc2Vzc2lvbl91cGRhdGVfcmVxdWVzdF9jYWxsYmFja18oCisgICAgICAgIHRoaXMsIGNvbnRleHRfLCB0aWNrZXQsIGtTYkRybVN0YXR1c1Vua25vd25FcnJvciwKKyAgICAgICAga1NiRHJtU2Vzc2lvblJlcXVlc3RUeXBlTGljZW5zZVJlcXVlc3QsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpOworICAgIHJldHVybjsKKyAgfQorCisgIFNCX0xPRyhJTkZPKSA8PCAiU2VuZCBjaGFsbGVuZ2UgZm9yIGtleSBpZCAiCisgICAgICAgICAgICAgICA8PCBHZXRIZXhSZXByZXNlbnRhdGlvbihsaWNlbnNlLT5rZXlfaWQoKSkgPDwgIiBpbiBzZXNzaW9uICIKKyAgICAgICAgICAgICAgIDw8IHNlc3Npb25faWQ7CisgIFNCX0xPR19JRihJTkZPLCBrTG9nUGxheXJlYWR5Q2hhbGxlbmdlUmVzcG9uc2UpCisgICAgICA8PCBHZXRIZXhSZXByZXNlbnRhdGlvbihjaGFsbGVuZ2UuZGF0YSgpLCBjaGFsbGVuZ2Uuc2l6ZSgpKTsKKworICBzZXNzaW9uX3VwZGF0ZV9yZXF1ZXN0X2NhbGxiYWNrXygKKyAgICAgIHRoaXMsIGNvbnRleHRfLCB0aWNrZXQsIGtTYkRybVN0YXR1c1N1Y2Nlc3MsCisgICAgICBrU2JEcm1TZXNzaW9uUmVxdWVzdFR5cGVMaWNlbnNlUmVxdWVzdCwgTlVMTCwgc2Vzc2lvbl9pZC5jX3N0cigpLAorICAgICAgc3RhdGljX2Nhc3Q8aW50PihzZXNzaW9uX2lkLnNpemUoKSksIGNoYWxsZW5nZS5jX3N0cigpLAorICAgICAgc3RhdGljX2Nhc3Q8aW50PihjaGFsbGVuZ2Uuc2l6ZSgpKSwgTlVMTCk7CisgIHBlbmRpbmdfcmVxdWVzdHNfW3Nlc3Npb25faWRdID0gbGljZW5zZTsKK30KKwordm9pZCBEcm1TeXN0ZW1QbGF5cmVhZHk6OlVwZGF0ZVNlc3Npb24oaW50IHRpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vzc2lvbl9pZF9zaXplKSB7CisgIFNCX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKworICBzdGQ6OnN0cmluZyBzZXNzaW9uX2lkX2NvcHkoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHNlc3Npb25faWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZF9zaXplKTsKKyAgYXV0byBpdGVyID0gcGVuZGluZ19yZXF1ZXN0c18uZmluZChzZXNzaW9uX2lkX2NvcHkpOworICBTQl9EQ0hFQ0soaXRlciAhPSBwZW5kaW5nX3JlcXVlc3RzXy5lbmQoKSk7CisgIGlmIChpdGVyID09IHBlbmRpbmdfcmVxdWVzdHNfLmVuZCgpKSB7CisgICAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJJbnZhbGlkIHNlc3Npb24gaWQgIiA8PCBzZXNzaW9uX2lkX2NvcHk7CisgICAgcmV0dXJuOworICB9CisKKyAgc2NvcGVkX3JlZnB0cjxMaWNlbnNlPiBsaWNlbnNlID0gaXRlci0+c2Vjb25kOworCisgIFNCX0xPRyhJTkZPKSA8PCAiQWRkaW5nIHBsYXlyZWFkeSByZXNwb25zZSBmb3Iga2V5IGlkICIKKyAgICAgICAgICAgICAgIDw8IEdldEhleFJlcHJlc2VudGF0aW9uKGxpY2Vuc2UtPmtleV9pZCgpKTsKKyAgU0JfTE9HX0lGKElORk8sIGtMb2dQbGF5cmVhZHlDaGFsbGVuZ2VSZXNwb25zZSkKKyAgICAgIDw8IEdldEhleFJlcHJlc2VudGF0aW9uKGtleSwga2V5X3NpemUpOworCisgIGxpY2Vuc2UtPlVwZGF0ZUxpY2Vuc2Uoa2V5LCBrZXlfc2l6ZSk7CisKKyAgaWYgKGxpY2Vuc2UtPnVzYWJsZSgpKSB7CisgICAgU0JfTE9HKElORk8pIDw8ICJTdWNjZXNzZnVsbHkgYWRkIGtleSBmb3Iga2V5IGlkICIKKyAgICAgICAgICAgICAgICAgPDwgR2V0SGV4UmVwcmVzZW50YXRpb24obGljZW5zZS0+a2V5X2lkKCkpIDw8ICIgaW4gc2Vzc2lvbiAiCisgICAgICAgICAgICAgICAgIDw8IHNlc3Npb25faWRfY29weTsKKyAgICB7CisgICAgICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICAgIHN1Y2Nlc3NmdWxfcmVxdWVzdHNfW2l0ZXItPmZpcnN0XSA9CisgICAgICAgICAgTGljZW5zZUluZm8oa1NiRHJtS2V5U3RhdHVzVXNhYmxlLCBsaWNlbnNlKTsKKyAgICB9CisgICAgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrXyh0aGlzLCBjb250ZXh0XywgdGlja2V0LCBrU2JEcm1TdGF0dXNTdWNjZXNzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZCwgc2Vzc2lvbl9pZF9zaXplKTsKKworICAgIHsKKyAgICAgIFNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICAgICAgUmVwb3J0S2V5U3RhdHVzQ2hhbmdlZF9Mb2NrZWQoc2Vzc2lvbl9pZF9jb3B5KTsKKyAgICB9CisgICAgcGVuZGluZ19yZXF1ZXN0c18uZXJhc2UoaXRlcik7CisgIH0gZWxzZSB7CisgICAgU0JfTE9HKElORk8pIDw8ICJGYWlsZWQgdG8gYWRkIGtleSBmb3Igc2Vzc2lvbiAiIDw8IHNlc3Npb25faWRfY29weTsKKyAgICAvLyBEb24ndCByZXBvcnQgaXQgYXMgYSBmYWlsdXJlIGFzIG90aGVyd2lzZSB0aGUgSlMgcGxheWVyIGlzIGdvaW5nIHRvCisgICAgLy8gdGVybWluYXRlIHRoZSB2aWRlby4KKyAgICBzZXNzaW9uX3VwZGF0ZWRfY2FsbGJhY2tfKHRoaXMsIGNvbnRleHRfLCB0aWNrZXQsIGtTYkRybVN0YXR1c1N1Y2Nlc3MsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkLCBzZXNzaW9uX2lkX3NpemUpOworICAgIC8vIFdoZW4gVXBkYXRlTGljZW5zZSgpIGZhaWxzLCB0aGUgfGxpY2Vuc2V8IG11c3QgaGF2ZSBnZW5lcmF0ZWQgYSBuZXcKKyAgICAvLyBjaGFsbGVuZ2UgaW50ZXJuYWxseS4gIFNlbmQgdGhpcyBjaGFsbGVuZ2UgYWdhaW4uCisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNoYWxsZW5nZSA9IGxpY2Vuc2UtPmxpY2Vuc2VfY2hhbGxlbmdlKCk7CisgICAgaWYgKGNoYWxsZW5nZS5lbXB0eSgpKSB7CisgICAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgU0JfTE9HKElORk8pIDw8ICJTZW5kIGNoYWxsZW5nZSBhZ2FpbiBmb3Iga2V5IGlkICIKKyAgICAgICAgICAgICAgICAgPDwgR2V0SGV4UmVwcmVzZW50YXRpb24obGljZW5zZS0+a2V5X2lkKCkpIDw8ICIgaW4gc2Vzc2lvbiAiCisgICAgICAgICAgICAgICAgIDw8IHNlc3Npb25faWQ7CisgICAgU0JfTE9HX0lGKElORk8sIGtMb2dQbGF5cmVhZHlDaGFsbGVuZ2VSZXNwb25zZSkKKyAgICAgICAgPDwgR2V0SGV4UmVwcmVzZW50YXRpb24oY2hhbGxlbmdlLmRhdGEoKSwgY2hhbGxlbmdlLnNpemUoKSk7CisKKyAgICAvLyBXZSBoYXZlIHRvIHVzZSB8a1NiRHJtVGlja2V0SW52YWxpZHwgYXMgdGhlIGxpY2Vuc2UgY2hhbGxlbmdlIGlzIG5vdCBhCisgICAgLy8gcmVzdWx0IG9mIEdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoKS4KKyAgICBzZXNzaW9uX3VwZGF0ZV9yZXF1ZXN0X2NhbGxiYWNrXygKKyAgICAgICAgdGhpcywgY29udGV4dF8sIGtTYkRybVRpY2tldEludmFsaWQsIGtTYkRybVN0YXR1c1N1Y2Nlc3MsCisgICAgICAgIGtTYkRybVNlc3Npb25SZXF1ZXN0VHlwZUxpY2Vuc2VSZXF1ZXN0LCBOVUxMLCBzZXNzaW9uX2lkLAorICAgICAgICBzZXNzaW9uX2lkX3NpemUsIGNoYWxsZW5nZS5jX3N0cigpLCBzdGF0aWNfY2FzdDxpbnQ+KGNoYWxsZW5nZS5zaXplKCkpLAorICAgICAgICBOVUxMKTsKKyAgfQorfQorCit2b2lkIERybVN5c3RlbVBsYXlyZWFkeTo6Q2xvc2VTZXNzaW9uKGNvbnN0IHZvaWQqIHNlc3Npb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXNzaW9uX2lkX3NpemUpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIGtleV9zdGF0dXNlc19jaGFuZ2VkX2NhbGxiYWNrXyh0aGlzLCBjb250ZXh0Xywgc2Vzc2lvbl9pZCwgc2Vzc2lvbl9pZF9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgc3RkOjpzdHJpbmcgc2Vzc2lvbl9pZF9jb3B5KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzZXNzaW9uX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25faWRfc2l6ZSk7CisgIHBlbmRpbmdfcmVxdWVzdHNfLmVyYXNlKHNlc3Npb25faWRfY29weSk7CisKKyAgU2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgIHN1Y2Nlc3NmdWxfcmVxdWVzdHNfLmVyYXNlKHNlc3Npb25faWRfY29weSk7Cit9CisKK1NiRHJtU3lzdGVtUHJpdmF0ZTo6RGVjcnlwdFN0YXR1cyBEcm1TeXN0ZW1QbGF5cmVhZHk6OkRlY3J5cHQoCisgICAgSW5wdXRCdWZmZXIqIGJ1ZmZlcikgeworICBjb25zdCBTYkRybVNhbXBsZUluZm8qIGRybV9pbmZvID0gYnVmZmVyLT5kcm1faW5mbygpOworCisgIGlmIChkcm1faW5mbyA9PSBOVUxMIHx8IGRybV9pbmZvLT5pbml0aWFsaXphdGlvbl92ZWN0b3Jfc2l6ZSA9PSAwKSB7CisgICAgcmV0dXJuIGtTdWNjZXNzOworICB9CisKKyAgR1VJRCBrZXlfaWQ7CisgIGlmIChkcm1faW5mby0+aWRlbnRpZmllcl9zaXplICE9IHNpemVvZihrZXlfaWQpKSB7CisgICAgcmV0dXJuIGtSZXRyeTsKKyAgfQorICBrZXlfaWQgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHVUlEKj4oZHJtX2luZm8tPmlkZW50aWZpZXIpOworCisgIFNjb3BlZExvY2sgbG9jayhtdXRleF8pOworICBmb3IgKGF1dG8mIGl0ZW0gOiBzdWNjZXNzZnVsX3JlcXVlc3RzXykgeworICAgIGlmIChpdGVtLnNlY29uZC5saWNlbnNlXy0+a2V5X2lkKCkgPT0ga2V5X2lkKSB7CisgICAgICBpZiAoYnVmZmVyLT5zYW1wbGVfdHlwZSgpID09IGtTYk1lZGlhVHlwZUF1ZGlvKSB7CisgICAgICAgIHJldHVybiBrU3VjY2VzczsKKyAgICAgIH0KKworICAgICAgaWYgKGl0ZW0uc2Vjb25kLmxpY2Vuc2VfLT5Jc0hEQ1BSZXF1aXJlZCgpKSB7CisgICAgICAgIGlmICghZW5hYmxlX291dHB1dF9wcm90ZWN0aW9uX2Z1bmNfKCkpIHsKKyAgICAgICAgICBTQl9MT0coSU5GTykgPDwgIkhEQ1AgcmVxdWlyZWQgYnV0IG5vdCBhdmFpbGFibGUiOworICAgICAgICAgIGl0ZW0uc2Vjb25kLnN0YXR1c18gPSBrU2JEcm1LZXlTdGF0dXNSZXN0cmljdGVkOworICAgICAgICAgIFJlcG9ydEtleVN0YXR1c0NoYW5nZWRfTG9ja2VkKGl0ZW0uZmlyc3QpOworICAgICAgICAgIHJldHVybiBrUmV0cnk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIGtTdWNjZXNzOworICAgIH0KKyAgfQorCisgIHJldHVybiBrUmV0cnk7Cit9CisKK3ZvaWQgRHJtU3lzdGVtUGxheXJlYWR5OjpSZXBvcnRLZXlTdGF0dXNDaGFuZ2VkX0xvY2tlZCgKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgc2Vzc2lvbl9pZCkgeworICAvLyBtdXRleF8gbXVzdCBiZSBoZWxkIGJ5IGNhbGxlcgorICA6OnN0YXJib2FyZDo6U2NvcGVkVHJ5TG9jayBsb2NrX3Nob3VsZF9mYWlsKG11dGV4Xyk7CisgIFNCX0RDSEVDSyghbG9ja19zaG91bGRfZmFpbC5pc19sb2NrZWQoKSk7CisKKyAgTGljZW5zZUluZm8mIGl0ZW0gPSBzdWNjZXNzZnVsX3JlcXVlc3RzX1tzZXNzaW9uX2lkXTsKKworICBHVUlEIGtleV9pZCA9IGl0ZW0ubGljZW5zZV8tPmtleV9pZCgpOworICBTYkRybUtleUlkIGRybV9rZXlfaWQ7CisgIFNCX0RDSEVDSyhzaXplb2YoZHJtX2tleV9pZC5pZGVudGlmaWVyKSA+PSBzaXplb2Yoa2V5X2lkKSk7CisgIG1lbWNweSgmKGRybV9rZXlfaWQuaWRlbnRpZmllciksICZrZXlfaWQsIHNpemVvZihrZXlfaWQpKTsKKyAgZHJtX2tleV9pZC5pZGVudGlmaWVyX3NpemUgPSBzaXplb2Yoa2V5X2lkKTsKKworICBrZXlfc3RhdHVzZXNfY2hhbmdlZF9jYWxsYmFja18odGhpcywgY29udGV4dF8sCisgICAgICBzZXNzaW9uX2lkLmRhdGEoKSwgc3RhdGljX2Nhc3Q8aW50PihzZXNzaW9uX2lkLnNpemUoKSksCisgICAgICAxLCAmZHJtX2tleV9pZCwgJihpdGVtLnN0YXR1c18pKTsKK30KKworc2NvcGVkX3JlZnB0cjxEcm1TeXN0ZW1QbGF5cmVhZHk6OkxpY2Vuc2U+IERybVN5c3RlbVBsYXlyZWFkeTo6R2V0TGljZW5zZSgKKyAgICBjb25zdCB1aW50OF90KiBrZXlfaWQsCisgICAgaW50IGtleV9pZF9zaXplKSB7CisgIEdVSUQga2V5X2lkX2NvcHk7CisgIGlmIChrZXlfaWRfc2l6ZSAhPSBzaXplb2Yoa2V5X2lkX2NvcHkpKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAga2V5X2lkX2NvcHkgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHVUlEKj4oa2V5X2lkKTsKKworICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKworICBmb3IgKGF1dG8mIGl0ZW0gOiBzdWNjZXNzZnVsX3JlcXVlc3RzXykgeworICAgIGlmIChpdGVtLnNlY29uZC5saWNlbnNlXy0+a2V5X2lkKCkgPT0ga2V5X2lkX2NvcHkpIHsKKyAgICAgIHJldHVybiBpdGVtLnNlY29uZC5saWNlbnNlXzsKKyAgICB9CisgIH0KKworICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBEcm1TeXN0ZW1QbGF5cmVhZHk6Ok9uVXdwUmVzdW1lKCkgeworICBmb3IgKGF1dG8mIGl0ZW0gOiBzdWNjZXNzZnVsX3JlcXVlc3RzXykgeworICAgIHNlc3Npb25fY2xvc2VkX2NhbGxiYWNrXyh0aGlzLCBjb250ZXh0XywKKyAgICAgICAgaXRlbS5maXJzdC5kYXRhKCksIHN0YXRpY19jYXN0PGludD4oaXRlbS5maXJzdC5zaXplKCkpKTsKKyAgfQorfQorCitzdGQ6OnN0cmluZyBEcm1TeXN0ZW1QbGF5cmVhZHk6OkdlbmVyYXRlQW5kQWR2YW5jZVNlc3Npb25JZCgpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICBzcyA8PCBjdXJyZW50X3Nlc3Npb25faWRfOworICArK2N1cnJlbnRfc2Vzc2lvbl9pZF87CisgIHJldHVybiBzcy5zdHIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjYWRlMQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZHJtX3N5c3RlbV9wbGF5cmVhZHkuaApAQCAtMCwwICsxLDEzMyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRFJNX1NZU1RFTV9QTEFZUkVBRFlfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9EUk1fU1lTVEVNX1BMQVlSRUFEWV9IXworCisjaW5jbHVkZSA8bWZhcGkuaD4KKyNpbmNsdWRlIDxtZmlkbC5oPgorI2luY2x1ZGUgPHdybC5oPgorI2luY2x1ZGUgPHdybC9jbGllbnQuaD4KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbXV0ZXguaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9zeXN0ZW1faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworLy8gQWRhcHRzIFBsYXlSZWFkeSBkZWNyeXB0aW9uIG1vZHVsZSB0byBTdGFyYm9hcmQncyB8U2JEcm1TeXN0ZW18LgorY2xhc3MgRHJtU3lzdGVtUGxheXJlYWR5IDogcHVibGljIFNiRHJtU3lzdGVtUHJpdmF0ZSB7CisgcHVibGljOgorICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiBFbmFibGVPdXRwdXRQcm90ZWN0aW9uRnVuYzsKKworICBjbGFzcyBMaWNlbnNlIDogcHVibGljIFJlZkNvdW50ZWRUaHJlYWRTYWZlPExpY2Vuc2U+IHsKKyAgIHB1YmxpYzoKKyAgICBzdGF0aWMgc2NvcGVkX3JlZnB0cjxMaWNlbnNlPiBDcmVhdGUoY29uc3Qgdm9pZCogaW5pdGlhbGl6YXRpb25fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluaXRpYWxpemF0aW9uX2RhdGFfc2l6ZSk7CisKKyAgICB2aXJ0dWFsIH5MaWNlbnNlKCkge30KKworICAgIHZpcnR1YWwgR1VJRCBrZXlfaWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHVzYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIGxpY2Vuc2VfY2hhbGxlbmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZUcmFuc2Zvcm0+IGRlY3J5cHRvcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgVXBkYXRlTGljZW5zZShjb25zdCB2b2lkKiBsaWNlbnNlLCBpbnQgbGljZW5zZV9zaXplKSA9IDA7CisgICAgdmlydHVhbCBib29sIElzSERDUFJlcXVpcmVkKCkgPSAwOworICB9OworCisgIERybVN5c3RlbVBsYXlyZWFkeSgKKyAgICAgIHZvaWQqIGNvbnRleHQsCisgICAgICBFbmFibGVPdXRwdXRQcm90ZWN0aW9uRnVuYyBlbmFibGVfb3V0cHV0X3Byb3RlY3Rpb25fZnVuYywKKyAgICAgIFNiRHJtU2Vzc2lvblVwZGF0ZVJlcXVlc3RGdW5jIHNlc3Npb25fdXBkYXRlX3JlcXVlc3RfY2FsbGJhY2ssCisgICAgICBTYkRybVNlc3Npb25VcGRhdGVkRnVuYyBzZXNzaW9uX3VwZGF0ZWRfY2FsbGJhY2ssCisgICAgICBTYkRybVNlc3Npb25LZXlTdGF0dXNlc0NoYW5nZWRGdW5jIGtleV9zdGF0dXNlc19jaGFuZ2VkX2NhbGxiYWNrLAorICAgICAgU2JEcm1TZXNzaW9uQ2xvc2VkRnVuYyBzZXNzaW9uX2Nsb3NlZF9jYWxsYmFjayk7CisgIH5Ecm1TeXN0ZW1QbGF5cmVhZHkoKSBvdmVycmlkZTsKKworICBzdGF0aWMgYm9vbCBJc0tleVN5c3RlbVN1cHBvcnRlZChjb25zdCBjaGFyKiBrZXlfc3lzdGVtKTsKKworICAvLyBGcm9tIHxTYkRybVN5c3RlbVByaXZhdGV8LgorICB2b2lkIEdlbmVyYXRlU2Vzc2lvblVwZGF0ZVJlcXVlc3QoaW50IHRpY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBpbml0aWFsaXphdGlvbl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluaXRpYWxpemF0aW9uX2RhdGFfc2l6ZSkgb3ZlcnJpZGU7CisKKyAgdm9pZCBVcGRhdGVTZXNzaW9uKGludCB0aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBrZXksCisgICAgICAgICAgICAgICAgICAgICBpbnQga2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBzZXNzaW9uX2lkLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNlc3Npb25faWRfc2l6ZSkgb3ZlcnJpZGU7CisKKyAgdm9pZCBDbG9zZVNlc3Npb24oY29uc3Qgdm9pZCogc2Vzc2lvbl9pZCwgaW50IHNlc3Npb25faWRfc2l6ZSkgb3ZlcnJpZGU7CisKKyAgRGVjcnlwdFN0YXR1cyBEZWNyeXB0KElucHV0QnVmZmVyKiBidWZmZXIpIG92ZXJyaWRlOworCisgIC8vIFVzZWQgYnkgYXVkaW8gYW5kIHZpZGVvIGRlY29kZXJzIHRvIHJldHJpZXZlIHRoZSBkZWNyeXB0b3JzLgorICBzY29wZWRfcmVmcHRyPExpY2Vuc2U+IEdldExpY2Vuc2UoY29uc3QgdWludDhfdCoga2V5X2lkLCBpbnQga2V5X2lkX3NpemUpOworCisgIHZvaWQgT25Vd3BSZXN1bWUoKTsKKworICBib29sIElzU2VydmVyQ2VydGlmaWNhdGVVcGRhdGFibGUoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICB2b2lkIFVwZGF0ZVNlcnZlckNlcnRpZmljYXRlKGludCB0aWNrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNlcnRpZmljYXRlX3NpemUpIG92ZXJyaWRlIHsKKyAgfQorCisgIGNvbnN0IHZvaWQqIEdldE1ldHJpY3MoaW50KiBzaXplKSBvdmVycmlkZSB7IHJldHVybiBOVUxMOyB9CisKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBHZW5lcmF0ZUFuZEFkdmFuY2VTZXNzaW9uSWQoKTsKKyAgLy8gTm90ZTogcmVxdWlyZXMgbXV0ZXhfIHRvIGJlIGhlbGQKKyAgdm9pZCBSZXBvcnRLZXlTdGF0dXNDaGFuZ2VkX0xvY2tlZChjb25zdCBzdGQ6OnN0cmluZyYgc2Vzc2lvbl9pZCk7CisKKyAgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKKworICB2b2lkKiBjb250ZXh0XzsKKyAgY29uc3QgRW5hYmxlT3V0cHV0UHJvdGVjdGlvbkZ1bmMgZW5hYmxlX291dHB1dF9wcm90ZWN0aW9uX2Z1bmNfOworICBjb25zdCBTYkRybVNlc3Npb25VcGRhdGVSZXF1ZXN0RnVuYyBzZXNzaW9uX3VwZGF0ZV9yZXF1ZXN0X2NhbGxiYWNrXzsKKyAgY29uc3QgU2JEcm1TZXNzaW9uVXBkYXRlZEZ1bmMgc2Vzc2lvbl91cGRhdGVkX2NhbGxiYWNrXzsKKyAgY29uc3QgU2JEcm1TZXNzaW9uS2V5U3RhdHVzZXNDaGFuZ2VkRnVuYyBrZXlfc3RhdHVzZXNfY2hhbmdlZF9jYWxsYmFja187CisgIGNvbnN0IFNiRHJtU2Vzc2lvbkNsb3NlZEZ1bmMgc2Vzc2lvbl9jbG9zZWRfY2FsbGJhY2tfOworICBpbnQgY3VycmVudF9zZXNzaW9uX2lkXyA9IDE7CisKKyAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHNjb3BlZF9yZWZwdHI8TGljZW5zZT4gPiBwZW5kaW5nX3JlcXVlc3RzXzsKKworICAvLyB8c3VjY2Vzc2Z1bF9yZXF1ZXN0c198IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIG1vcmUgdGhhbiBvbmUgdGhyZWFkLiAgR3VhcmQKKyAgLy8gaXQgYnkgYSBtdXRleC4KKyAgTXV0ZXggbXV0ZXhfOworCisgIHN0cnVjdCBMaWNlbnNlSW5mbyB7CisgICAgTGljZW5zZUluZm8oU2JEcm1LZXlTdGF0dXMgc3RhdHVzLCBjb25zdCBzY29wZWRfcmVmcHRyPExpY2Vuc2U+JiBsaWNlbnNlKQorICAgICAgICA6IHN0YXR1c18oc3RhdHVzKSwgbGljZW5zZV8obGljZW5zZSkge30KKyAgICBMaWNlbnNlSW5mbygpIDogc3RhdHVzXyhrU2JEcm1LZXlTdGF0dXNFcnJvcikge30KKworICAgIFNiRHJtS2V5U3RhdHVzIHN0YXR1c187CisgICAgc2NvcGVkX3JlZnB0cjxMaWNlbnNlPiBsaWNlbnNlXzsKKyAgfTsKKworICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTGljZW5zZUluZm8+IHN1Y2Nlc3NmdWxfcmVxdWVzdHNfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9EUk1fU1lTVEVNX1BMQVlSRUFEWV9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9keF9jb250ZXh0X3ZpZGVvX2RlY29kZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2R4X2NvbnRleHRfdmlkZW9fZGVjb2Rlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjkzNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9keF9jb250ZXh0X3ZpZGVvX2RlY29kZXIuY2MKQEAgLTAsMCArMSw3MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9keF9jb250ZXh0X3ZpZGVvX2RlY29kZXIuaCIKKworI2luY2x1ZGUgPEQzRDExLmg+CisjaW5jbHVkZSA8RDNEMTFfNC5oPgorI2luY2x1ZGUgPG1mYXBpLmg+CisKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2wuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2xleHQuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitIYXJkd2FyZURlY29kZXJDb250ZXh0IEdldERpcmVjdFhGb3JIYXJkd2FyZURlY29kaW5nKCkgeworICBIUkVTVUxUIHJlc3VsdCA9IFNfT0s7CisgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisgIFBGTkVHTFFVRVJZRElTUExBWUFUVFJJQkVYVFBST0MgcXVlcnlfZGlzcGxheTsKKworICBxdWVyeV9kaXNwbGF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5FR0xRVUVSWURJU1BMQVlBVFRSSUJFWFRQUk9DPigKKyAgICAgIGVnbEdldFByb2NBZGRyZXNzKCJlZ2xRdWVyeURpc3BsYXlBdHRyaWJFWFQiKSk7CisgIFNCX0RDSEVDSyhxdWVyeV9kaXNwbGF5ICE9IG51bGxwdHIpOworCisgIFBGTkVHTFFVRVJZREVWSUNFQVRUUklCRVhUUFJPQyBxdWVyeV9kZXZpY2U7CisgIHF1ZXJ5X2RldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZORUdMUVVFUllERVZJQ0VBVFRSSUJFWFRQUk9DPigKKyAgICAgIGVnbEdldFByb2NBZGRyZXNzKCJlZ2xRdWVyeURldmljZUF0dHJpYkVYVCIpKTsKKyAgU0JfRENIRUNLKHF1ZXJ5X2RldmljZSAhPSBudWxscHRyKTsKKworICBpbnRwdHJfdCBlZ2xfZGV2aWNlID0gMDsKKyAgcXVlcnlfZGlzcGxheShkaXNwbGF5LCBFR0xfREVWSUNFX0VYVCwgJmVnbF9kZXZpY2UpOworICBTQl9EQ0hFQ0soZWdsX2RldmljZSAhPSAwKTsKKworICBpbnRwdHJfdCBkZXZpY2U7CisgIHF1ZXJ5X2RldmljZShyZWludGVycHJldF9jYXN0PEVHTERldmljZUVYVD4oZWdsX2RldmljZSksCisgICAgICBFR0xfRDNEMTFfREVWSUNFX0FOR0xFLCAmZGV2aWNlKTsKKworICBJRDNEMTFEZXZpY2UqIG91dHB1dF9keF9kZXZpY2UgPSByZWludGVycHJldF9jYXN0PElEM0QxMURldmljZSo+KGRldmljZSk7CisgIElNRkRYR0lEZXZpY2VNYW5hZ2VyKiBkeGdpX2RldmljZV9tZ3IgPSBudWxscHRyOworCisgIFVJTlQgdG9rZW4gPSAwOworICByZXN1bHQgPSBNRkNyZWF0ZURYR0lEZXZpY2VNYW5hZ2VyKCZ0b2tlbiwgJmR4Z2lfZGV2aWNlX21ncik7CisgIFNCX0RDSEVDSyhyZXN1bHQgPT0gU19PSyk7CisgIFNCX0RDSEVDSyhkeGdpX2RldmljZV9tZ3IpOworCisgIHJlc3VsdCA9IGR4Z2lfZGV2aWNlX21nci0+UmVzZXREZXZpY2Uob3V0cHV0X2R4X2RldmljZSwgdG9rZW4pOworICBTQl9EQ0hFQ0soU1VDQ0VFREVEKHJlc3VsdCkpOworCisgIEhhcmR3YXJlRGVjb2RlckNvbnRleHQgb3V0cHV0ID0geworICAgIG91dHB1dF9keF9kZXZpY2UsCisgICAgZHhnaV9kZXZpY2VfbWdyCisgIH07CisgIHJldHVybiBvdXRwdXQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9keF9jb250ZXh0X3ZpZGVvX2RlY29kZXIuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZHhfY29udGV4dF92aWRlb19kZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlMjE3MgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZHhfY29udGV4dF92aWRlb19kZWNvZGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRFhfQ09OVEVYVF9WSURFT19ERUNPREVSX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRFhfQ09OVEVYVF9WSURFT19ERUNPREVSX0hfCisKKyNpbmNsdWRlIDx3cmxcY2xpZW50Lmg+ICAvLyBGb3IgQ29tUHRyLgorCitzdHJ1Y3QgSUQzRDExRGV2aWNlOworc3RydWN0IElEM0QxMURldmljZUNvbnRleHQ7CitzdHJ1Y3QgSU1GRFhHSURldmljZU1hbmFnZXI7CisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitzdHJ1Y3QgSGFyZHdhcmVEZWNvZGVyQ29udGV4dCB7CisgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SUQzRDExRGV2aWNlPiBkeF9kZXZpY2Vfb3V0OworICBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPElNRkRYR0lEZXZpY2VNYW5hZ2VyPiBkeGdpX2RldmljZV9tYW5hZ2VyX291dDsKK307CisKK0hhcmR3YXJlRGVjb2RlckNvbnRleHQgR2V0RGlyZWN0WEZvckhhcmR3YXJlRGVjb2RpbmcoKTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRFhfQ09OVEVYVF9WSURFT19ERUNPREVSX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vudmlyb25tZW50LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lbnZpcm9ubWVudC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmE5YjAwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lbnZpcm9ubWVudC5jYwpAQCAtMCwwICsxLDMzIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2Vudmlyb25tZW50LmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworCitzdGQ6OnN0cmluZyBHZXRFbnZpcm9ubWVudChzdGQ6OnN0cmluZyBuYW1lKSB7CisgIHN0ZDo6d3N0cmluZyB3X25hbWUobmFtZS5iZWdpbigpLCBuYW1lLmVuZCgpKTsKKyAgRFdPUkQgbGVuID0gR2V0RW52aXJvbm1lbnRWYXJpYWJsZSh3X25hbWUuY19zdHIoKSwgbnVsbHB0ciwgMCk7CisgIGlmIChsZW4gPT0gMCkKKyAgICByZXR1cm4gIiI7CisgIHN0ZDo6d3N0cmluZyB3X2Vudmlyb25tZW50X3N0cmluZyhsZW4sIDApOworICBHZXRFbnZpcm9ubWVudFZhcmlhYmxlKHdfbmFtZS5jX3N0cigpLCAmd19lbnZpcm9ubWVudF9zdHJpbmdbMF0sIGxlbik7CisgIHN0ZDo6c3RyaW5nIGVudmlyb25tZW50X3N0cmluZyh3X2Vudmlyb25tZW50X3N0cmluZy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd19lbnZpcm9ubWVudF9zdHJpbmcuZW5kKCkpOworICByZXR1cm4gZW52aXJvbm1lbnRfc3RyaW5nOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTNlN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5jYwpAQCAtMCwwICsxLDE5OCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBOb3QgYnJlYWtpbmcgdGhlc2UgZnVuY3Rpb25zIHVwIGJlY2F1c2UgaG93ZXZlciBvbmUgaXMgaW1wbGVtZW50ZWQsIHRoZQorLy8gb3RoZXJzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBzaW1pbGFybHkuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisKKyNpbmNsdWRlIDxNZmFwaS5oPgorI2luY2x1ZGUgPE1mZXJyb3IuaD4KKyNpbmNsdWRlIDxwcm9wdmFydXRpbC5oPgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKK25hbWVzcGFjZSB7CisKK3N0ZDo6c3RyaW5nIEdldEZvcm1hdEhyZXN1bHRNZXNzYWdlKEhSRVNVTFQgaHIpIHsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIExQV1NUUiBlcnJvcl9tZXNzYWdlOworICBpbnQgbWVzc2FnZV9zaXplID0gRm9ybWF0TWVzc2FnZSgKKyAgICAgIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNIHwgRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKyAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUywKKyAgICAgIG51bGxwdHIsICAvLyBVbnVzZWQgd2l0aCBGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTS4KKyAgICAgIGhyLCBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKKyAgICAgIChMUFRTVFIpJmVycm9yX21lc3NhZ2UsCisgICAgICAwLCAgLy8gTWluaW11bSBzaXplIGZvciBvdXRwdXQgYnVmZmVyLgorICAgICAgbnVsbHB0cik7CisgIFNCX0RDSEVDSyhtZXNzYWdlX3NpemUpOworICBzcyA8PCB3Y2hhcl90VG9VVEY4KGVycm9yX21lc3NhZ2UpOworICBMb2NhbEZyZWUoZXJyb3JfbWVzc2FnZSk7CisgIHJldHVybiBzcy5zdHIoKTsKK30KKworI2RlZmluZSBNQUtFX0hSX1BBSVIoWCkgc3RkOjpwYWlyPEhSRVNVTFQsIHN0ZDo6c3RyaW5nPihYLCAjWCkKK2NvbnN0IHN0ZDo6cGFpcjxIUkVTVUxULCBzdGQ6OnN0cmluZz4ga0hyZXN1bHRWYWx1ZVN0cmluZ3NbXSA9IHsKKyAgTUFLRV9IUl9QQUlSKFNfT0spLAorICBNQUtFX0hSX1BBSVIoTUZfRV9QTEFURk9STV9OT1RfSU5JVElBTElaRUQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9CVUZGRVJUT09TTUFMTCksCisgIE1BS0VfSFJfUEFJUihNRl9FX0lOVkFMSURSRVFVRVNUKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfSU5WQUxJRFNUUkVBTU5VTUJFUiksCisgIE1BS0VfSFJfUEFJUihNRl9FX0lOVkFMSURNRURJQVRZUEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9OT1RBQ0NFUFRJTkcpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9OT1RfSU5JVElBTElaRUQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9SRVBSRVNFTlRBVElPTiksCisgIE1BS0VfSFJfUEFJUihNRl9FX05PX01PUkVfVFlQRVMpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9TRVJWSUNFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVU5FWFBFQ1RFRCksCisgIE1BS0VfSFJfUEFJUihNRl9FX0lOVkFMSUROQU1FKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfSU5WQUxJRFRZUEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9JTlZBTElEX0ZJTEVfRk9STUFUKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfSU5WQUxJRElOREVYKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfSU5WQUxJRF9USU1FU1RBTVApLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9TQ0hFTUUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9CWVRFU1RSRUFNX1RZUEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9USU1FX0ZPUk1BVCksCisgIE1BS0VfSFJfUEFJUihNRl9FX05PX1NBTVBMRV9USU1FU1RBTVApLAorICBNQUtFX0hSX1BBSVIoTUZfRV9OT19TQU1QTEVfRFVSQVRJT04pLAorICBNQUtFX0hSX1BBSVIoTUZfRV9JTlZBTElEX1NUUkVBTV9EQVRBKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfUlRfVU5BVkFJTEFCTEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9SQVRFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVEhJTk5JTkdfVU5TVVBQT1JURUQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9SRVZFUlNFX1VOU1VQUE9SVEVEKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVU5TVVBQT1JURURfUkFURV9UUkFOU0lUSU9OKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfUkFURV9DSEFOR0VfUFJFRU1QVEVEKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfTk9UX0ZPVU5EKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfTk9UX0FWQUlMQUJMRSksCisgIE1BS0VfSFJfUEFJUihNRl9FX05PX0NMT0NLKSwKKyAgTUFLRV9IUl9QQUlSKE1GX1NfTVVMVElQTEVfQkVHSU4pLAorICBNQUtFX0hSX1BBSVIoTUZfRV9NVUxUSVBMRV9CRUdJTiksCisgIE1BS0VfSFJfUEFJUihNRl9FX01VTFRJUExFX1NVQlNDUklCRVJTKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVElNRVJfT1JQSEFORUQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9TVEFURV9UUkFOU0lUSU9OX1BFTkRJTkcpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9TVEFURV9UUkFOU0lUSU9OKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVU5SRUNPVkVSQUJMRV9FUlJPUl9PQ0NVUlJFRCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1NBTVBMRV9IQVNfVE9PX01BTllfQlVGRkVSUyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1NBTVBMRV9OT1RfV1JJVEFCTEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9JTlZBTElEX0tFWSksCisgIE1BS0VfSFJfUEFJUihNRl9FX0JBRF9TVEFSVFVQX1ZFUlNJT04pLAorICBNQUtFX0hSX1BBSVIoTUZfRV9VTlNVUFBPUlRFRF9DQVBUSU9OKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfSU5WQUxJRF9QT1NJVElPTiksCisgIE1BS0VfSFJfUEFJUihNRl9FX0FUVFJJQlVURU5PVEZPVU5EKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfUFJPUEVSVFlfVFlQRV9OT1RfQUxMT1dFRCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RPUE9fSU5WQUxJRF9PUFRJT05BTF9OT0RFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVE9QT19DQU5OT1RfRklORF9ERUNSWVBUT1IpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX0NPREVDX05PVF9GT1VORCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RPUE9fQ0FOTk9UX0NPTk5FQ1QpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX1VOU1VQUE9SVEVEKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVE9QT19JTlZBTElEX1RJTUVfQVRUUklCVVRFUyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RPUE9fTE9PUFNfSU5fVE9QT0xPR1kpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX01JU1NJTkdfUFJFU0VOVEFUSU9OX0RFU0NSSVBUT1IpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX01JU1NJTkdfU1RSRUFNX0RFU0NSSVBUT1IpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX1NUUkVBTV9ERVNDUklQVE9SX05PVF9TRUxFQ1RFRCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RPUE9fTUlTU0lOR19TT1VSQ0UpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UT1BPX1NJTktfQUNUSVZBVEVTX1VOU1VQUE9SVEVEKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX1RZUEVfTk9UX1NFVCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9TVFJFQU1fQ0hBTkdFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX0lOUFVUX1JFTUFJTklORyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9QUk9GSUxFX01JU1NJTkcpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fUFJPRklMRV9JTlZBTElEX09SX0NPUlJVUFQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fUFJPRklMRV9UUlVOQ0FURUQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fUFJPUEVSVFlfUElEX05PVF9SRUNPR05JWkVEKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX1BST1BFUlRZX1ZBUklBTlRfVFlQRV9XUk9ORyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9QUk9QRVJUWV9OT1RfV1JJVEVBQkxFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX1BST1BFUlRZX0FSUkFZX1ZBTFVFX1dST05HX05VTV9ESU0pLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fUFJPUEVSVFlfVkFMVUVfU0laRV9XUk9ORyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9QUk9QRVJUWV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fUFJPUEVSVFlfVkFMVUVfSU5DT01QQVRJQkxFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX05PVF9QT1NTSUJMRV9GT1JfQ1VSUkVOVF9PVVRQVVRfTUVESUFUWVBFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX05PVF9QT1NTSUJMRV9GT1JfQ1VSUkVOVF9JTlBVVF9NRURJQVRZUEUpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fTk9UX1BPU1NJQkxFX0ZPUl9DVVJSRU5UX01FRElBVFlQRV9DT01CSU5BVElPTiksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9DT05GTElDVFNfV0lUSF9PVEhFUl9DVVJSRU5UTFlfRU5BQkxFRF9GRUFUVVJFUyksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQpLAorICBNQUtFX0hSX1BBSVIoTUZfRV9UUkFOU0ZPUk1fTk9UX1BPU1NJQkxFX0ZPUl9DVVJSRU5UX1NQS1JfQ09ORklHKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX0NBTk5PVF9DSEFOR0VfTUVESUFUWVBFX1dISUxFX1BST0NFU1NJTkcpLAorICBNQUtFX0hSX1BBSVIoTUZfU19UUkFOU0ZPUk1fRE9fTk9UX1BST1BBR0FURV9FVkVOVCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1VOU1VQUE9SVEVEX0QzRF9UWVBFKSwKKyAgTUFLRV9IUl9QQUlSKE1GX0VfVFJBTlNGT1JNX0FTWU5DX0xPQ0tFRCksCisgIE1BS0VfSFJfUEFJUihNRl9FX1RSQU5TRk9STV9DQU5OT1RfSU5JVElBTElaRV9BQ01fRFJJVkVSKSwKK307CisjdW5kZWYgTUFLRV9IUl9QQUlSCisKK2Jvb2wgRmluZEhSZXN1bHRFbnVtU3RyaW5nKEhSRVNVTFQgaHIsIHN0ZDo6c3RyaW5nKiBvdXRwdXQpIHsKKyAgY29uc3Qgc2l6ZV90IG4gPSBzaXplb2Yoa0hyZXN1bHRWYWx1ZVN0cmluZ3MpIC8KKyAgICAgICAgICAgICAgICAgICBzaXplb2YoKmtIcmVzdWx0VmFsdWVTdHJpbmdzKTsKKworICBmb3IgKGF1dG8gaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBjb25zdCBhdXRvJiBlbGVtcyA9IGtIcmVzdWx0VmFsdWVTdHJpbmdzW2ldOworICAgIGlmIChociA9PSBlbGVtcy5maXJzdCkgeworICAgICAgKm91dHB1dCA9IGVsZW1zLnNlY29uZDsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgV2luMzJFcnJvckNvZGUmIGVycm9yX2NvZGUpIHsKKyAgTFBXU1RSIGVycm9yX21lc3NhZ2U7CisgIGludCBtZXNzYWdlX3NpemUgPSBGb3JtYXRNZXNzYWdlKAorICAgICAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfCBGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAorICAgICAgICAgIEZPUk1BVF9NRVNTQUdFX0lHTk9SRV9JTlNFUlRTLAorICAgICAgbnVsbHB0ciwgIC8vIFVudXNlZCB3aXRoIEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLgorICAgICAgZXJyb3JfY29kZS5HZXRIUkVTVUxUKCksIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorICAgICAgKExQVFNUUikmZXJyb3JfbWVzc2FnZSwKKyAgICAgIDAsICAvLyBNaW5pbXVtIHNpemUgZm9yIG91dHB1dCBidWZmZXIuCisgICAgICBudWxscHRyKTsKKyAgU0JfRENIRUNLKG1lc3NhZ2Vfc2l6ZSk7CisgIG9zIDw8IHdjaGFyX3RUb1VURjgoZXJyb3JfbWVzc2FnZSk7CisgIExvY2FsRnJlZShlcnJvcl9tZXNzYWdlKTsKKworICByZXR1cm4gb3M7Cit9CisKK3ZvaWQgRGVidWdMb2dXaW5FcnJvcigpIHsKKyNpZiBkZWZpbmVkKF9ERUJVRykKKyAgRFdPUkQgZXJyb3JfY29kZSA9IEdldExhc3RFcnJvcigpOworICBpZiAoIWVycm9yX2NvZGUpCisgICAgcmV0dXJuOworCisgIFNCX0xPRyhFUlJPUikgPDwgV2luMzJFcnJvckNvZGUoZXJyb3JfY29kZSk7CisjZW5kaWYgIC8vIGRlZmluZWQoX0RFQlVHKQorfQorCitzdGQ6OnN0cmluZyBIUmVzdWx0VG9TdHJpbmcoSFJFU1VMVCBocikgeworICBzdGQ6OnN0cmluZyBlbnVtX3N0cjsKKyAgYm9vbCBoYXNfZW51bV9zdHIgPSBGaW5kSFJlc3VsdEVudW1TdHJpbmcoaHIsICZlbnVtX3N0cik7CisgIHN0ZDo6c3RyaW5nIGVycm9yX21lc3NhZ2UgPSBHZXRGb3JtYXRIcmVzdWx0TWVzc2FnZShocik7CisKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3M7CisgIGlmIChoYXNfZW51bV9zdHIpIHsKKyAgICBzcyA8PCBlbnVtX3N0ciA8PCAiOiAiOworICB9CisKKyAgc3MgPDwgIlwiIiA8PCBlcnJvcl9tZXNzYWdlIDw8ICJcIiI7CisgIHJldHVybiBzcy5zdHIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMmY5YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaApAQCAtMCwwICsxLDY2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIE5vdCBicmVha2luZyB0aGVzZSBmdW5jdGlvbnMgdXAgYmVjYXVzZSBob3dldmVyIG9uZSBpcyBpbXBsZW1lbnRlZCwgdGhlCisvLyBvdGhlcnMgc2hvdWxkIGJlIGltcGxlbWVudGVkIHNpbWlsYXJseS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0VSUk9SX1VUSUxTX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRVJST1JfVVRJTFNfSF8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgPG9zdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2NsYXNzIFdpbjMyRXJyb3JDb2RlIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFdpbjMyRXJyb3JDb2RlKERXT1JEIGVycm9yX2NvZGUpIDogZXJyb3JfY29kZV8oZXJyb3JfY29kZSkge30KKworICBIUkVTVUxUIEdldEhSRVNVTFQoKSBjb25zdCB7IHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoZXJyb3JfY29kZV8pOyB9CisKKyBwcml2YXRlOgorICBEV09SRCBlcnJvcl9jb2RlXzsKK307CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBXaW4zMkVycm9yQ29kZSYgZXJyb3JfY29kZSk7CisKKy8vIENoZWNrcyBmb3Igc3lzdGVtIGVycm9ycyBhbmQgbG9ncyBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIGlmIEdldExhc3RFcnJvcigpCisvLyByZXR1cm5zIGFuIGVycm9yIGNvZGUuIE5vb3BzIG9uIG5vbi1kZWJ1ZyBidWlsZHMuCit2b2lkIERlYnVnTG9nV2luRXJyb3IoKTsKKworc3RkOjpzdHJpbmcgSFJlc3VsdFRvU3RyaW5nKEhSRVNVTFQgaHIpOworCisvLyBUaGUgZm9sbG93aW5nIG1hY3JvIGV2YWx1YXRlcyBzdGF0ZW1lbnQgaW4gZXZlcnkgYnVpbGQgY29uZmlnLCBhbmQgY2hlY2tzIHRoZQorLy8gcmVzdWx0IGluIGRlYnVnICYgZGV2ZWwgYnVpbGRzIG9ubHkuCisjZGVmaW5lIENoZWNrUmVzdWx0KHN0YXRlbWVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYXV0byBjaGVja19yZXN1bHRfaHIgPSAoc3RhdGVtZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgU0JfRENIRUNLKFNVQ0NFRURFRChjaGVja19yZXN1bHRfaHIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDw8ICJIUkVTVUxUIHdhcyAiIDw8IHN0ZDo6aGV4IDw8IGNoZWNrX3Jlc3VsdF9ociAgICAgICAgICAgICAgICBcCisgICAgICAgIDw8ICIgd2hpY2ggdHJhbnNsYXRlcyB0b1xuLS0tPiBcIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIDw8IDo6c3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpIUmVzdWx0VG9TdHJpbmcoY2hlY2tfcmVzdWx0X2hyKSBcCisgICAgICAgIDw8ICJcIiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRVJST1JfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjdkZGRjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2F0b21pY19yZXBsYWNlLmNjCkBAIC0wLDAgKzEsNjggQEAKKy8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfYXRvbWljX3JlcGxhY2Vfd3JpdGVfZmlsZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaCIKKworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhciBrVGVtcEZpbGVTdWZmaXhbXSA9ICIudGVtcCI7CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiRmlsZUF0b21pY1JlcGxhY2UoY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YV9zaXplKSB7CisgIGlmICgoZGF0YV9zaXplIDwgMCkgfHwgKChkYXRhX3NpemUgPiAwKSAmJiAhZGF0YSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnZlY3RvcjxjaGFyPiB0ZW1wX3BhdGgoa1NiRmlsZU1heFBhdGggKyAxLCAwKTsKKworICBzdGFyYm9hcmQ6OnN0cmxjcHkodGVtcF9wYXRoLmRhdGEoKSwgcGF0aCwga1NiRmlsZU1heFBhdGgpOworICBzdGFyYm9hcmQ6OnN0cmxjYXQodGVtcF9wYXRoLmRhdGEoKSwga1RlbXBGaWxlU3VmZml4LCBrU2JGaWxlTWF4UGF0aCk7CisKKyAgaWYgKCE6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OlNiRmlsZUF0b21pY1JlcGxhY2VXcml0ZUZpbGUoCisgICAgICAgICAgdGVtcF9wYXRoLmRhdGEoKSwgZGF0YSwgZGF0YV9zaXplKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6d3N0cmluZyBwYXRoX3dzdHJpbmcgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6Ok5vcm1hbGl6ZVdpbjMyUGF0aCgKKyAgICAgIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q1N0cmluZ1RvV1N0cmluZyhwYXRoKSk7CisgIHN0ZDo6d3N0cmluZyB0ZW1wX3BhdGhfd3N0cmluZyA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Tm9ybWFsaXplV2luMzJQYXRoKAorICAgICAgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDU3RyaW5nVG9XU3RyaW5nKHRlbXBfcGF0aC5kYXRhKCkpKTsKKworICAvLyBUcnkgYSBzaW1wbGUgbW92ZSBmaXJzdC4gSXQgd2lsbCBvbmx5IHN1Y2NlZWQgd2hlbiB8dG9fcGF0aHwgZG9lc24ndAorICAvLyBhbHJlYWR5IGV4aXN0LgorICBpZiAoTW92ZUZpbGVFeCh0ZW1wX3BhdGhfd3N0cmluZy5jX3N0cigpLCBwYXRoX3dzdHJpbmcuY19zdHIoKSwgMCkpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIFRyeSB0aGUgZnVsbC1ibG93biByZXBsYWNlIGlmIHRoZSBtb3ZlIGZhaWxzLCBhcyBSZXBsYWNlRmlsZSB3aWxsIG9ubHkKKyAgLy8gc3VjY2VlZCB3aGVuIHx0b19wYXRofCBkb2VzIGV4aXN0LgorICBpZiAoUmVwbGFjZUZpbGUocGF0aF93c3RyaW5nLmNfc3RyKCksIHRlbXBfcGF0aF93c3RyaW5nLmNfc3RyKCksIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKSkgeworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9jYW5fb3Blbi5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9jYW5fb3Blbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc4ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2Nhbl9vcGVuLmNjCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK2Jvb2wgU2JGaWxlQ2FuT3Blbihjb25zdCBjaGFyKiBwYXRoLCBpbnQgZmxhZ3MpIHsKKyAgaWYgKChwYXRoID09IG51bGxwdHIpIHx8IChwYXRoWzBdID09ICdcMCcpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBjYW5fcmVhZCA9IGZsYWdzICYga1NiRmlsZVJlYWQ7CisgIGJvb2wgY2FuX3dyaXRlID0gZmxhZ3MgJiBrU2JGaWxlV3JpdGU7CisgIGlmICghY2FuX3JlYWQgJiYgIWNhbl93cml0ZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6d3N0cmluZyBwYXRoX3dzdHJpbmcgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmcocGF0aCk7CisgIFdJTjMyX0ZJTkRfREFUQSBmaW5kX2RhdGEgPSB7MH07CisKKyAgSEFORExFIHNlYXJjaF9oYW5kbGUgPSBGaW5kRmlyc3RGaWxlRXhXKAorICAgICAgcGF0aF93c3RyaW5nLmNfc3RyKCksIEZpbmRFeEluZm9TdGFuZGFyZCwgJmZpbmRfZGF0YSwKKyAgICAgIEZpbmRFeFNlYXJjaE5hbWVNYXRjaCwgTlVMTCwgRklORF9GSVJTVF9FWF9DQVNFX1NFTlNJVElWRSk7CisgIGlmICghc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpJc1ZhbGlkSGFuZGxlKHNlYXJjaF9oYW5kbGUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBjYW5fb3BlbiA9IHRydWU7CisKKyAgaWYgKCgoZmluZF9kYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgJiYgY2FuX3dyaXRlKSB8fAorICAgICAgIXN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6UGF0aEVuZHNXaXRoKHBhdGhfd3N0cmluZywgZmluZF9kYXRhLmNGaWxlTmFtZSkpIHsKKyAgICBjYW5fb3BlbiA9IGZhbHNlOworICB9CisKKyAgRmluZENsb3NlKHNlYXJjaF9oYW5kbGUpOworCisgIHJldHVybiBjYW5fb3BlbjsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9jbG9zZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9jbG9zZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ5OWFlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2Nsb3NlLmNjCkBAIC0wLDAgKzEsMzggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6RGVidWdMb2dXaW5FcnJvcjsKKworYm9vbCBTYkZpbGVDbG9zZShTYkZpbGUgZmlsZSkgeworICBpZiAoIVNiRmlsZUlzVmFsaWQoZmlsZSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBib29sIHN1Y2Nlc3MgPSBDbG9zZUhhbmRsZShmaWxlLT5maWxlX2hhbmRsZSk7CisKKyAgaWYgKCFzdWNjZXNzKSB7CisgICAgRGVidWdMb2dXaW5FcnJvcigpOworICB9CisKKyAgZGVsZXRlIGZpbGU7CisKKyAgcmV0dXJuIHN1Y2Nlc3M7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfZGVsZXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2RlbGV0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjgyNjNhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2RlbGV0ZS5jYwpAQCAtMCwwICsxLDM5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZmlsZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCitib29sIFNiRmlsZURlbGV0ZShjb25zdCBjaGFyKiBwYXRoKSB7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q1N0cmluZ1RvV1N0cmluZzsKKyAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGg7CisKKyAgaWYgKChwYXRoID09IG51bGxwdHIpIHx8ICpwYXRoID09ICdcMCcpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIVNiRmlsZUV4aXN0cyhwYXRoKSkgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RkOjp3c3RyaW5nIHBhdGhfd3N0cmluZyA9IE5vcm1hbGl6ZVdpbjMyUGF0aChwYXRoKTsKKworICAvLyBSZW1vdmUgZmlsZSBvciBlbXB0eSBkaXJlY3RvcnkuCisgIHJldHVybiBEZWxldGVGaWxlVyhwYXRoX3dzdHJpbmcuY19zdHIoKSkgfHwKKyAgICAgICAgIFJlbW92ZURpcmVjdG9yeVcocGF0aF93c3RyaW5nLmNfc3RyKCkpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2V4aXN0cy5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9leGlzdHMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3ZGRiNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9leGlzdHMuY2MKQEAgLTAsMCArMSw1MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaCIKKworYm9vbCBTYkZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkgeworICB1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmc7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SXNWYWxpZEhhbmRsZTsKKyAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGg7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6UGF0aEVuZHNXaXRoOworCisgIGlmICgocGF0aCA9PSBudWxscHRyKSB8fCAocGF0aFswXSA9PSAnXDAnKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6d3N0cmluZyBwYXRoX3dzdHJpbmcgPSBOb3JtYWxpemVXaW4zMlBhdGgocGF0aCk7CisgIC8vIFdpbjMyIGRvZXMgbm90IGxpa2UgYSB0cmFpbGluZyAiXFwiIG9uIHRoZSBwYXRoIG5hbWVzIGZvciBkaXJlY3RvcmllcywKKyAgLy8gc28gaXQncyBuZWVkcyB0byBiZSBjaG9wcGVkIG9mZi4KKyAgaWYgKCFwYXRoX3dzdHJpbmcuZW1wdHkoKSAmJiAocGF0aF93c3RyaW5nLmJhY2soKSA9PSAnXFwnKSkgeworICAgIHBhdGhfd3N0cmluZy5wb3BfYmFjaygpOworICB9CisKKyAgV0lOMzJfRklORF9EQVRBIGZpbmRfZGF0YSA9IHswfTsKKworICBIQU5ETEUgc2VhcmNoX2hhbmRsZSA9IEZpbmRGaXJzdEZpbGVFeFcoCisgICAgICBwYXRoX3dzdHJpbmcuY19zdHIoKSwgRmluZEV4SW5mb1N0YW5kYXJkLCAmZmluZF9kYXRhLAorICAgICAgRmluZEV4U2VhcmNoTmFtZU1hdGNoLCBOVUxMLCBGSU5EX0ZJUlNUX0VYX0NBU0VfU0VOU0lUSVZFKTsKKworICBpZiAoIUlzVmFsaWRIYW5kbGUoc2VhcmNoX2hhbmRsZSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBGaW5kQ2xvc2Uoc2VhcmNoX2hhbmRsZSk7CisKKyAgcmV0dXJuIFBhdGhFbmRzV2l0aChwYXRoX3dzdHJpbmcsIGZpbmRfZGF0YS5jRmlsZU5hbWUpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ZsdXNoLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ZsdXNoLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MmU2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfZmx1c2guY2MKQEAgLTAsMCArMSwyOCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisKK2Jvb2wgU2JGaWxlRmx1c2goU2JGaWxlIGZpbGUpIHsKKyAgaWYgKCFzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6Okhhc1ZhbGlkSGFuZGxlKGZpbGUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIEZsdXNoRmlsZUJ1ZmZlcnMoZmlsZS0+ZmlsZV9oYW5kbGUpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2dldF9pbmZvLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2dldF9pbmZvLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhY2I2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfZ2V0X2luZm8uY2MKQEAgLTAsMCArMSw1OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX3V0aWxzLmgiCisKK2Jvb2wgU2JGaWxlR2V0SW5mbyhTYkZpbGUgZmlsZSwgU2JGaWxlSW5mbyogb3V0X2luZm8pIHsKKyAgaWYgKCFzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6Okhhc1ZhbGlkSGFuZGxlKGZpbGUpIHx8ICFvdXRfaW5mbykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIEZJTEVfQkFTSUNfSU5GTyBiYXNpY19pbmZvID0gezB9OworICBCT09MIGJhc2ljX2luZm9fc3VjY2VzcyA9IEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlRXgoCisgICAgICBmaWxlLT5maWxlX2hhbmRsZSwgRmlsZUJhc2ljSW5mbywgJmJhc2ljX2luZm8sIHNpemVvZihGSUxFX0JBU0lDX0lORk8pKTsKKyAgaWYgKCFiYXNpY19pbmZvX3N1Y2Nlc3MpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBGSUxFX1NUQU5EQVJEX0lORk8gc3RhbmRhcmRfaW5mbyA9IHswfTsKKyAgQk9PTCBzdGFuZGFyZF9pbmZvX3N1Y2Nlc3MgPQorICAgICAgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGVFeChmaWxlLT5maWxlX2hhbmRsZSwgRmlsZVN0YW5kYXJkSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YW5kYXJkX2luZm8sIHNpemVvZihGSUxFX1NUQU5EQVJEX0lORk8pKTsKKyAgaWYgKCFzdGFuZGFyZF9pbmZvX3N1Y2Nlc3MpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBvdXRfaW5mby0+c2l6ZSA9IHN0YW5kYXJkX2luZm8uRW5kT2ZGaWxlLlF1YWRQYXJ0OworICBTQl9EQ0hFQ0sob3V0X2luZm8tPnNpemUgPj0gMCk7CisKKyAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpDb252ZXJ0RmlsZVRpbWVUaWNrc1RvU2JUaW1lOworCisgIG91dF9pbmZvLT5jcmVhdGlvbl90aW1lID0KKyAgICAgIENvbnZlcnRGaWxlVGltZVRpY2tzVG9TYlRpbWUoYmFzaWNfaW5mby5DcmVhdGlvblRpbWUpOworICBvdXRfaW5mby0+bGFzdF9hY2Nlc3NlZCA9CisgICAgICBDb252ZXJ0RmlsZVRpbWVUaWNrc1RvU2JUaW1lKGJhc2ljX2luZm8uTGFzdEFjY2Vzc1RpbWUpOworICBvdXRfaW5mby0+bGFzdF9tb2RpZmllZCA9CisgICAgICBDb252ZXJ0RmlsZVRpbWVUaWNrc1RvU2JUaW1lKGJhc2ljX2luZm8uTGFzdFdyaXRlVGltZSk7CisKKyAgb3V0X2luZm8tPmlzX3N5bWJvbGljX2xpbmsgPSBmYWxzZTsKKyAgb3V0X2luZm8tPmlzX2RpcmVjdG9yeSA9IHN0YW5kYXJkX2luZm8uRGlyZWN0b3J5OworCisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2dldF9wYXRoX2luZm8uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfZ2V0X3BhdGhfaW5mby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWQxMDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2dldF9wYXRoX2luZm8uY2MKQEAgLTAsMCArMSwxMDQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaCIKKworbmFtZXNwYWNlIHsKKworYm9vbCBJc0RyaXZlTGV0dGVyKHdjaGFyX3QgZHJpdmVfbGV0dGVyKSB7CisgIGlmIChMJ0EnIDw9IGRyaXZlX2xldHRlciAmJiBkcml2ZV9sZXR0ZXIgPD0gJ1onKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBpZiAoTCdhJyA8PSBkcml2ZV9sZXR0ZXIgJiYgZHJpdmVfbGV0dGVyIDw9ICd6JykgeworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJc1Jvb3REaXJlY3Rvcnkoc3RkOjp3c3RyaW5nIHdwYXRoKSB7CisgIGlmICh3cGF0aC5sZW5ndGgoKSA+IDMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBTdHJpcCBvcHRpb25hbCB0cmFpbGluZyBzbGFzaC4KKyAgaWYgKHdwYXRoLmxlbmd0aCgpID09IDMpIHsKKyAgICBpZiAod3BhdGguYmFjaygpICE9IEwnXFwnKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHdwYXRoLnBvcF9iYWNrKCk7CisgIH0KKworICBpZiAod3BhdGgubGVuZ3RoKCkgPT0gMikgeworICAgIGlmIChJc0RyaXZlTGV0dGVyKHdwYXRoWzBdKSAmJiB3cGF0aFsxXSA9PSAnOicpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiRmlsZUdldFBhdGhJbmZvKGNvbnN0IGNoYXIqIHBhdGgsIFNiRmlsZUluZm8qIG91dF9pbmZvKSB7CisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q1N0cmluZ1RvV1N0cmluZzsKKyAgdXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGg7CisKKyAgaWYgKCFwYXRoIHx8IHBhdGhbMF0gPT0gJ1wwJyB8fCAhb3V0X2luZm8pIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OndzdHJpbmcgcGF0aF93c3RyaW5nID0gTm9ybWFsaXplV2luMzJQYXRoKHBhdGgpOworCisgIC8vIEdldEZpbGVBdHRyaWJ1dGVzRXhXKC4uLikgZG9lcyBub3QgaGFuZGxlIHJvb3QgZGlyZWN0b3JpZXMKKyAgLy8gd2Ugd2UgaGF2ZSB0byBoYW5kbGUgaXQgaGVyZS4KKyAgaWYgKElzUm9vdERpcmVjdG9yeShwYXRoX3dzdHJpbmcpKSB7CisgICAgb3V0X2luZm8tPmlzX2RpcmVjdG9yeSA9IHRydWU7CisgICAgb3V0X2luZm8tPmxhc3RfbW9kaWZpZWQgPSAwOworICAgIG91dF9pbmZvLT5sYXN0X2FjY2Vzc2VkID0gMDsKKyAgICBvdXRfaW5mby0+Y3JlYXRpb25fdGltZSA9IDA7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGF0dHJpYnV0ZV9kYXRhID0gezB9OworICBpZiAoIUdldEZpbGVBdHRyaWJ1dGVzRXhXKHBhdGhfd3N0cmluZy5jX3N0cigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJpYnV0ZV9kYXRhKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIG91dF9pbmZvLT5zaXplID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oYXR0cmlidXRlX2RhdGEubkZpbGVTaXplSGlnaCkgPDwgMzIgfAorICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZV9kYXRhLm5GaWxlU2l6ZUxvdzsKKyAgU0JfRENIRUNLKG91dF9pbmZvLT5zaXplID49IDApOworCisgIHVzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q29udmVydEZpbGVUaW1lVG9TYlRpbWU7CisKKyAgb3V0X2luZm8tPmNyZWF0aW9uX3RpbWUgPQorICAgICAgQ29udmVydEZpbGVUaW1lVG9TYlRpbWUoYXR0cmlidXRlX2RhdGEuZnRDcmVhdGlvblRpbWUpOworICBvdXRfaW5mby0+bGFzdF9hY2Nlc3NlZCA9CisgICAgICBDb252ZXJ0RmlsZVRpbWVUb1NiVGltZShhdHRyaWJ1dGVfZGF0YS5mdExhc3RBY2Nlc3NUaW1lKTsKKyAgb3V0X2luZm8tPmxhc3RfbW9kaWZpZWQgPQorICAgICAgQ29udmVydEZpbGVUaW1lVG9TYlRpbWUoYXR0cmlidXRlX2RhdGEuZnRMYXN0V3JpdGVUaW1lKTsKKworICBvdXRfaW5mby0+aXNfc3ltYm9saWNfbGluayA9IGZhbHNlOworICBvdXRfaW5mby0+aXNfZGlyZWN0b3J5ID0KKyAgICAgIChhdHRyaWJ1dGVfZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKTsKKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM5YmNkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmNjCkBAIC0wLDAgKzEsMjExIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworbmFtZXNwYWNlIHsKK2NvbnN0IGNoYXIga1VuaXhTZXBbXSA9ICIvIjsKK2NvbnN0IGNoYXIga1dpbjMyU2VwW10gPSAiXFwiOworY29uc3Qgd2NoYXJfdCBrVW5peFNlcFdbXSA9IEwiLyI7Citjb25zdCB3Y2hhcl90IGtXaW4zMlNlcFdbXSA9IEwiXFwiOworCitib29sIElzUGF0aE5vcm1hbGl6ZWQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykgeworICByZXR1cm4gc3RyaW5nLmZpbmQoa1VuaXhTZXApID09IHN0ZDo6c3RyaW5nOjpucG9zOworfQorCitib29sIElzUGF0aE5vcm1hbGl6ZWQoY29uc3Qgc3RkOjp3c3RyaW5nJiBzdHJpbmcpIHsKKyAgcmV0dXJuIHN0cmluZy5maW5kKGtVbml4U2VwVykgPT0gc3RkOjp3c3RyaW5nOjpucG9zOworfQorCitzdGQ6OnN0cmluZyBOb3JtYWxpemVQYXRoU2VwYXJhdG9yKHN0ZDo6c3RyaW5nIHN0cikgeworICBzaXplX3Qgc3RhcnRfcG9zID0gMDsKKyAgd2hpbGUgKChzdGFydF9wb3MgPSBzdHIuZmluZChrVW5peFNlcCwgc3RhcnRfcG9zKSkgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICBzdHIucmVwbGFjZShzdGFydF9wb3MsIHNpemVvZihrVW5peFNlcCkgLSAxLCBrV2luMzJTZXApOworICAgIHN0YXJ0X3BvcyArPSBzaXplb2Yoa1dpbjMyU2VwKSAtIDE7CisgIH0KKyAgcmV0dXJuIHN0cjsKK30KKworc3RkOjp3c3RyaW5nIE5vcm1hbGl6ZVBhdGhTZXBhcmF0b3Ioc3RkOjp3c3RyaW5nIHN0cikgeworICBzaXplX3Qgc3RhcnRfcG9zID0gMDsKKyAgd2hpbGUgKChzdGFydF9wb3MgPSBzdHIuZmluZChrVW5peFNlcFcsIHN0YXJ0X3BvcykpICE9IHN0ZDo6d3N0cmluZzo6bnBvcykgeworICAgIHN0ci5yZXBsYWNlKHN0YXJ0X3Bvcywgc2l6ZW9mKGtVbml4U2VwVykgLyAyIC0gMSwga1dpbjMyU2VwVyk7CisgICAgc3RhcnRfcG9zICs9IHNpemVvZihrV2luMzJTZXBXKSAvIDIgLSAxOworICB9CisgIHJldHVybiBzdHI7Cit9CisKK2Jvb2wgU3RyaW5nQ2FuTmFycm93KGNvbnN0IHN0ZDo6d3N0cmluZyYgc3RyKSB7CisgIGZvciAod2NoYXJfdCB2YWx1ZSA6IHN0cikgeworICAgIGNoYXIgbmFycm93X3ZhbCA9IHN0YXRpY19jYXN0PGNoYXI+KHZhbHVlKTsKKyAgICBpZiAodmFsdWUgIT0gbmFycm93X3ZhbCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK3N0ZDo6d3N0cmluZyBOb3JtYWxpemVXaW4zMlBhdGgoc3RkOjpzdHJpbmcgc3RyKSB7CisgIHJldHVybiBOb3JtYWxpemVXaW4zMlBhdGgoQ1N0cmluZ1RvV1N0cmluZyhzdHIuY19zdHIoKSkpOworfQorCitzdGQ6OndzdHJpbmcgTm9ybWFsaXplV2luMzJQYXRoKHN0ZDo6d3N0cmluZyBzdHIpIHsKKyAgcmV0dXJuIE5vcm1hbGl6ZVBhdGhTZXBhcmF0b3Ioc3RyKTsKK30KKworSEFORExFIE9wZW5GaWxlT3JEaXJlY3RvcnkoY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dF9jcmVhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JGaWxlRXJyb3IqIG91dF9lcnJvcikgeworICAvLyBOb3RlIHRoYXQgRklMRV9TSEFSRV9ERUxFVEUgYWxsb3dzIGEgZmlsZSB0byBiZSBkZWxldGVkIHdoaWxlIHRoZXJlCisgIC8vIGFyZSBvdGhlciBoYW5kbGVzIG9wZW4gZm9yIHJlYWQvd3JpdGUuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUKKyAgLy8gQXN5bmMgZmlsZSB0ZXN0cyB3aGljaCwgZHVlIHRvIHN5c3RlbSB0aW1pbmcsIHdpbGwgc29tZXRpbWVzIGhhdmUKKyAgLy8gb3V0c3RhbmRpbmcgaGFuZGxlcyBvcGVuIGFuZCBmYWlsIHRvIGRlbGV0ZSwgZmFpbGluZyB0aGUgdGVzdC4KKyAgY29uc3QgRFdPUkQgc2hhcmVfbW9kZSA9IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9TSEFSRV9ERUxFVEU7CisKKyAgRFdPUkQgY3JlYXRpb25fZGlzcG9zaXRpb24gPSAwOworICBpZiAoZmxhZ3MgJiBrU2JGaWxlQ3JlYXRlT25seSkgeworICAgIFNCX0RDSEVDSyghY3JlYXRpb25fZGlzcG9zaXRpb24pOworICAgIFNCX0RDSEVDSyghKGZsYWdzICYga1NiRmlsZUNyZWF0ZUFsd2F5cykpOworICAgIGNyZWF0aW9uX2Rpc3Bvc2l0aW9uID0gQ1JFQVRFX05FVzsKKyAgfQorCisgIGlmIChvdXRfY3JlYXRlZCkgeworICAgICpvdXRfY3JlYXRlZCA9IGZhbHNlOworICB9CisKKyAgaWYgKGZsYWdzICYga1NiRmlsZUNyZWF0ZUFsd2F5cykgeworICAgIFNCX0RDSEVDSyghY3JlYXRpb25fZGlzcG9zaXRpb24pOworICAgIFNCX0RDSEVDSyghKGZsYWdzICYga1NiRmlsZUNyZWF0ZU9ubHkpKTsKKyAgICBjcmVhdGlvbl9kaXNwb3NpdGlvbiA9IENSRUFURV9BTFdBWVM7CisgIH0KKworICBpZiAoZmxhZ3MgJiBrU2JGaWxlT3BlblRydW5jYXRlZCkgeworICAgIFNCX0RDSEVDSyghY3JlYXRpb25fZGlzcG9zaXRpb24pOworICAgIFNCX0RDSEVDSyhmbGFncyAmIGtTYkZpbGVXcml0ZSk7CisgICAgY3JlYXRpb25fZGlzcG9zaXRpb24gPSBUUlVOQ0FURV9FWElTVElORzsKKyAgfQorCisgIGlmIChmbGFncyAmIGtTYkZpbGVPcGVuT25seSkgeworICAgIFNCX0RDSEVDSyghKGZsYWdzICYga1NiRmlsZU9wZW5BbHdheXMpKTsKKyAgICBjcmVhdGlvbl9kaXNwb3NpdGlvbiA9IE9QRU5fRVhJU1RJTkc7CisgIH0KKworICBpZiAoZmxhZ3MgJiBrU2JGaWxlT3BlbkFsd2F5cykgeworICAgIFNCX0RDSEVDSyghKGZsYWdzICYga1NiRmlsZU9wZW5Pbmx5KSk7CisgICAgY3JlYXRpb25fZGlzcG9zaXRpb24gPSBPUEVOX0FMV0FZUzsKKyAgfQorCisgIGlmICghY3JlYXRpb25fZGlzcG9zaXRpb24gJiYgIShmbGFncyAmIGtTYkZpbGVPcGVuT25seSkgJiYKKyAgICAgICEoZmxhZ3MgJiBrU2JGaWxlT3BlbkFsd2F5cykpIHsKKyAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgZXJybm8gPSBFTk9UU1VQOworICAgIGlmIChvdXRfZXJyb3IpIHsKKyAgICAgICpvdXRfZXJyb3IgPSBrU2JGaWxlRXJyb3JGYWlsZWQ7CisgICAgfQorCisgICAgcmV0dXJuIGtTYkZpbGVJbnZhbGlkOworICB9CisKKyAgRFdPUkQgZGVzaXJlZF9hY2Nlc3MgPSAwOworICBpZiAoZmxhZ3MgJiBrU2JGaWxlUmVhZCkgeworICAgIGRlc2lyZWRfYWNjZXNzIHw9IEdFTkVSSUNfUkVBRDsKKyAgfQorCisgIGNvbnN0IGJvb2wgb3Blbl9maWxlX2luX3dyaXRlX21vZGUgPSBmbGFncyAmIGtTYkZpbGVXcml0ZTsKKyAgaWYgKG9wZW5fZmlsZV9pbl93cml0ZV9tb2RlKSB7CisgICAgZGVzaXJlZF9hY2Nlc3MgfD0gR0VORVJJQ19XUklURTsKKyAgfQorCisgIC8vIFRPRE86IFN1cHBvcnQgYXN5bmNocm9ub3VzIElPLCBpZiBuZWNlc3NhcnkuCisgIFNCX0RDSEVDSyghKGZsYWdzICYga1NiRmlsZUFzeW5jKSk7CisKKyAgU0JfRENIRUNLKGRlc2lyZWRfYWNjZXNzICE9IDApIDw8ICJJbnZhbGlkIHBlcm1pc3Npb24gZmxhZy4iOworCisgIHN0ZDo6d3N0cmluZyBwYXRoX3dzdHJpbmcgPSBOb3JtYWxpemVXaW4zMlBhdGgocGF0aCk7CisKKyAgQ1JFQVRFRklMRTJfRVhURU5ERURfUEFSQU1FVEVSUyBjcmVhdGVfZXhfcGFyYW1zID0gezB9OworICAvLyBFbmFibGluZyB8RklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1N8IGFsbG93cyB1cyB0byBmaWd1cmUgb3V0IGlmIHRoZSBwYXRoCisgIC8vIGlzIGEgZGlyZWN0b3J5LgorICBjcmVhdGVfZXhfcGFyYW1zLmR3RmlsZUZsYWdzID0gRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1M7CisgIGNyZWF0ZV9leF9wYXJhbXMuZHdGaWxlRmxhZ3MgfD0gRklMRV9GTEFHX1BPU0lYX1NFTUFOVElDUzsKKyAgY3JlYXRlX2V4X3BhcmFtcy5kd0ZpbGVBdHRyaWJ1dGVzID0gRklMRV9BVFRSSUJVVEVfTk9STUFMOworICBjcmVhdGVfZXhfcGFyYW1zLmR3U2VjdXJpdHlRb3NGbGFncyA9IFNFQ1VSSVRZX0FOT05ZTU9VUzsKKyAgY3JlYXRlX2V4X3BhcmFtcy5kd1NpemUgPSBzaXplb2YoQ1JFQVRFRklMRTJfRVhURU5ERURfUEFSQU1FVEVSUyk7CisKKyAgY29uc3QgYm9vbCBmaWxlX2V4aXN0c19wcmlvcl90b19vcGVuID0gU2JGaWxlRXhpc3RzKHBhdGgpOworCisgIEhBTkRMRSBmaWxlX2hhbmRsZSA9CisgICAgICBDcmVhdGVGaWxlMihwYXRoX3dzdHJpbmcuY19zdHIoKSwgZGVzaXJlZF9hY2Nlc3MsIHNoYXJlX21vZGUsCisgICAgICAgICAgICAgICAgICBjcmVhdGlvbl9kaXNwb3NpdGlvbiwgJmNyZWF0ZV9leF9wYXJhbXMpOworCisgIGNvbnN0IGJvb2wgZmlsZV9leGlzdHNfYWZ0ZXJfb3BlbiA9IFNiRmlsZUV4aXN0cyhwYXRoKTsKKworICBpZiAob3V0X2NyZWF0ZWQgJiYgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpJc1ZhbGlkSGFuZGxlKGZpbGVfaGFuZGxlKSkgeworICAgIGlmIChmbGFncyAmIGtTYkZpbGVDcmVhdGVBbHdheXMpIHsKKyAgICAgICpvdXRfY3JlYXRlZCA9IGZpbGVfZXhpc3RzX2FmdGVyX29wZW47CisgICAgfSBlbHNlIHsKKyAgICAgICpvdXRfY3JlYXRlZCA9ICghZmlsZV9leGlzdHNfcHJpb3JfdG9fb3BlbiAmJiBmaWxlX2V4aXN0c19hZnRlcl9vcGVuKTsKKyAgICB9CisgIH0KKworICBjb25zdCBEV09SRCBsYXN0X2Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisKKyAgaWYgKG91dF9lcnJvcikgeworICAgIGlmIChzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OklzVmFsaWRIYW5kbGUoZmlsZV9oYW5kbGUpKSB7CisgICAgICAqb3V0X2Vycm9yID0ga1NiRmlsZU9rOworICAgIH0gZWxzZSB7CisgICAgICBzd2l0Y2ggKGxhc3RfZXJyb3IpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgorICAgICAgICAgICpvdXRfZXJyb3IgPSBrU2JGaWxlRXJyb3JBY2Nlc3NEZW5pZWQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfRklMRV9FWElTVFM6IHsKKyAgICAgICAgICBpZiAoZmxhZ3MgJiBrU2JGaWxlQ3JlYXRlT25seSkgeworICAgICAgICAgICAgKm91dF9lcnJvciA9IGtTYkZpbGVFcnJvckV4aXN0czsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKm91dF9lcnJvciA9IGtTYkZpbGVFcnJvckFjY2Vzc0RlbmllZDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKKyAgICAgICAgICAqb3V0X2Vycm9yID0ga1NiRmlsZUVycm9yTm90Rm91bmQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgKm91dF9lcnJvciA9IGtTYkZpbGVFcnJvckZhaWxlZDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gZmlsZV9oYW5kbGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYwZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgKQEAgLTAsMCArMSw5OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRklMRV9JTlRFUk5BTF9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0ZJTEVfSU5URVJOQUxfSF8KKworI2luY2x1ZGUgPHd0eXBlcy5oPgorCisjaW5jbHVkZSA8Y3djaGFyPiAgLy8gVGhpcyBmaWxlIGluY2x1ZGVkIGZvciBzdGQ6Ondjc2xlbi4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZmlsZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvaW50ZXJuYWxfb25seS5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworaW5saW5lIGJvb2wgSXNWYWxpZEhhbmRsZShIQU5ETEUgaGFuZGxlKSB7CisgIHJldHVybiBoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKworLy8gU2JGaWxlUHJpdmF0ZSBpcyBkZWZpbmVkIGFzIGEgc3RydWN0LCBidXQgZm9yIHdpbmRvd3MgaW1wbGVtZW50YXRpb24KKy8vIGVub3VnaCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIGFkZGVkIHNvIHRoYXQgaXQgd2FycmFudHMgYmVpbmcgYSBjbGFzcworLy8gcGVyIEdvb2dsZSdzIEMrKyBzdHlsZSBndWlkZS4gIFRoaXMgbWlzbWF0Y2ggY2F1c2VzIHRoZSBNaWNyb3NvZnQncyBjb21waWxlcgorLy8gdG8gZ2VuZXJhdGUgYSB3YXJuaW5nLgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MDk5KQorCitjbGFzcyBTYkZpbGVQcml2YXRlIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFNiRmlsZVByaXZhdGUoSEFORExFIGhhbmRsZSkgOiBmaWxlX2hhbmRsZShoYW5kbGUpIHt9CisKKyAgYm9vbCBIYXNWYWxpZEhhbmRsZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpJc1ZhbGlkSGFuZGxlKGZpbGVfaGFuZGxlKTsKKyAgfQorCisgIEhBTkRMRSBmaWxlX2hhbmRsZTsKKworICAvLyBTYkZpbGVQcml2YXRlIGlzIG5laXRoZXIgY29weWFibGUgbm9yIG1vdmFibGUuCisgIFNiRmlsZVByaXZhdGUoY29uc3QgU2JGaWxlUHJpdmF0ZSYpID0gZGVsZXRlOworICBTYkZpbGVQcml2YXRlJiBvcGVyYXRvcj0oY29uc3QgU2JGaWxlUHJpdmF0ZSYpID0gZGVsZXRlOworfTsKKyNwcmFnbWEgd2FybmluZyhwb3ApCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitpbmxpbmUgYm9vbCBIYXNWYWxpZEhhbmRsZShTYkZpbGUgZmlsZSkgeworICBpZiAoIVNiRmlsZUlzVmFsaWQoZmlsZSkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gZmlsZS0+SGFzVmFsaWRIYW5kbGUoKTsKK30KKworaW5saW5lIGJvb2wgUGF0aEVuZHNXaXRoKGNvbnN0IHN0ZDo6d3N0cmluZyYgcGF0aCwgY29uc3Qgd2NoYXJfdCogZmlsZW5hbWUpIHsKKyAgc2l6ZV90IGZpbGVuYW1lX2xlbmd0aCA9IHN0ZDo6d2NzbGVuKGZpbGVuYW1lKTsKKyAgaWYgKGZpbGVuYW1lX2xlbmd0aCA+IHBhdGguc2l6ZSgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc2l6ZV90IHBhdGhfb2Zmc2V0ID0gcGF0aC5zaXplKCkgLSBmaWxlbmFtZV9sZW5ndGg7CisKKyAgcmV0dXJuIF93Y3NpY21wKHBhdGguY19zdHIoKSArIHBhdGhfb2Zmc2V0LCBmaWxlbmFtZSkgPT0gMDsKK30KKworLy8gUGF0aCdzIGZyb20gY29iYWx0IHVzZSAiLyIgYXMgYSBwYXRoIHNlcGFyYXRvci4gVGhpcyBmdW5jdGlvbiB3aWxsCisvLyByZXBsYWNlIGFsbCBvZiB0aGUgIi8iIHdpdGggIlwiLgorc3RkOjp3c3RyaW5nIE5vcm1hbGl6ZVdpbjMyUGF0aChzdGQ6OnN0cmluZyBzdHIpOworc3RkOjp3c3RyaW5nIE5vcm1hbGl6ZVdpbjMyUGF0aChzdGQ6OndzdHJpbmcgc3RyKTsKKworSEFORExFIE9wZW5GaWxlT3JEaXJlY3RvcnkoY29uc3QgY2hhciogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG91dF9jcmVhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JGaWxlRXJyb3IqIG91dF9lcnJvcik7CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfRklMRV9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX29wZW4uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfb3Blbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDdjMThlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX29wZW4uY2MKQEAgLTAsMCArMSw0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorCitTYkZpbGUgU2JGaWxlT3Blbihjb25zdCBjaGFyKiBwYXRoLAorICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgYm9vbCogb3V0X2NyZWF0ZWQsCisgICAgICAgICAgICAgICAgICBTYkZpbGVFcnJvciogb3V0X2Vycm9yKSB7CisgIGlmICgocGF0aCA9PSBudWxscHRyKSB8fCAocGF0aFswXSA9PSAnXDAnKSkgeworICAgIGlmIChvdXRfY3JlYXRlZCkgeworICAgICAgKm91dF9jcmVhdGVkID0gZmFsc2U7CisgICAgfQorICAgIGlmIChvdXRfZXJyb3IpIHsKKyAgICAgICpvdXRfZXJyb3IgPSBrU2JGaWxlRXJyb3JOb3RBRmlsZTsKKyAgICB9CisgICAgcmV0dXJuIGtTYkZpbGVJbnZhbGlkOworICB9CisKKyAgSEFORExFIGZpbGVfaGFuZGxlID0KKyAgICAgIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6T3BlbkZpbGVPckRpcmVjdG9yeShwYXRoLCBmbGFncywgb3V0X2NyZWF0ZWQsIG91dF9lcnJvcik7CisKKyAgaWYgKCFzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OklzVmFsaWRIYW5kbGUoZmlsZV9oYW5kbGUpKSB7CisgICAgcmV0dXJuIGtTYkZpbGVJbnZhbGlkOworICB9CisKKyAgcmV0dXJuIG5ldyBTYkZpbGVQcml2YXRlKGZpbGVfaGFuZGxlKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9yZWFkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX3JlYWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlZmNlNAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9yZWFkLmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorCitpbnQgU2JGaWxlUmVhZChTYkZpbGUgZmlsZSwgY2hhciogZGF0YSwgaW50IHNpemUpIHsKKyAgU0JfRENIRUNLKChzaXplID09IDApIHx8IChkYXRhICE9IG51bGxwdHIpKTsKKworICBpZiAoIXN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SGFzVmFsaWRIYW5kbGUoZmlsZSkpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoc2l6ZSA8IDApIHsKKyAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKHNpemUgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgRFdPUkQgbnVtYmVyX2J5dGVzX3JlYWQgPSAwOworICBCT09MIHN1Y2Nlc3MgPQorICAgICAgUmVhZEZpbGUoZmlsZS0+ZmlsZV9oYW5kbGUsIGRhdGEsIHNpemUsICZudW1iZXJfYnl0ZXNfcmVhZCwgbnVsbHB0cik7CisKKyAgLy8gU2luY2Ugd2UgYXJlIG9ubHkgZG9pbmcgc3luY2hyb25vdXMgSU8sIHN1Y2Nlc3MgPT0gRkFMU0UgaW1wbGllcyB0aGF0CisgIC8vIHNvbWV0aGluZyBpcyB3cm9uZy4KKyAgaWYgKCFzdWNjZXNzKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIG51bWJlcl9ieXRlc19yZWFkOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX3NlZWsuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfc2Vlay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX3NlZWsuY2MKQEAgLTAsMCArMSwzOCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9pbnRlcm5hbC5oIgorCitpbnQ2NF90IFNiRmlsZVNlZWsoU2JGaWxlIGZpbGUsIFNiRmlsZVdoZW5jZSB3aGVuY2UsIGludDY0X3Qgb2Zmc2V0KSB7CisgIGlmICghc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpIYXNWYWxpZEhhbmRsZShmaWxlKSkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIExBUkdFX0lOVEVHRVIgbmV3X2ZpbGVfcG9pbnRlciA9IHswfTsKKyAgTEFSR0VfSU5URUdFUiBvZmZzZXRfYXJndW1lbnQgPSB7MH07CisgIG9mZnNldF9hcmd1bWVudC5RdWFkUGFydCA9IG9mZnNldDsKKyAgQk9PTCBzdWNjZXNzID0KKyAgICAgIFNldEZpbGVQb2ludGVyRXgoZmlsZS0+ZmlsZV9oYW5kbGUsIG9mZnNldF9hcmd1bWVudCwgJm5ld19maWxlX3BvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PERXT1JEPih3aGVuY2UpKTsKKworICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gbmV3X2ZpbGVfcG9pbnRlci5RdWFkUGFydDsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV90cnVuY2F0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV90cnVuY2F0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc3YWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX3RydW5jYXRlLmNjCkBAIC0wLDAgKzEsMTAyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZmlsZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHsKK3N0YXRpYyBjb25zdCBjaGFyIGs0S1plcm9QYWdlWzQgKiAxMDI0XSA9IHswfTsKKworYm9vbCBXcml0ZVplcm9zVG9GaWxlKEhBTkRMRSBmaWxlX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICBMQVJHRV9JTlRFR0VSIGJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgIExBUkdFX0lOVEVHRVIgZW5kKSB7CisgIFNCX0RDSEVDSyhzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OklzVmFsaWRIYW5kbGUoZmlsZV9oYW5kbGUpKTsKKyAgaW50NjRfdCBieXRlc19sZWZ0X3RvX3dyaXRlID0gZW5kLlF1YWRQYXJ0IC0gYmVnaW4uUXVhZFBhcnQ7CisgIGlmIChieXRlc19sZWZ0X3RvX3dyaXRlIDw9IDApIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIC8vIFNldCB0aGUgZmlsZSBwb2ludGVyIHRvIHxiZWdpbnwuCisgIGlmICghU2V0RmlsZVBvaW50ZXJFeChmaWxlX2hhbmRsZSwgYmVnaW4sIE5VTEwsIEZJTEVfQkVHSU4pKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gV3JpdGUgZnJvbSB6ZXJvcyBmcm9tIHxiZWdpbnwgdG8gfGVuZHwuCisgIHdoaWxlIChieXRlc19sZWZ0X3RvX3dyaXRlID4gMCkgeworICAgIGludDY0X3QgYnl0ZXNfdG9fd3JpdGUgPQorICAgICAgICBzdGQ6Om1pbjxpbnQ2NF90PihTQl9BUlJBWV9TSVpFKGs0S1plcm9QYWdlKSwgYnl0ZXNfbGVmdF90b193cml0ZSk7CisgICAgU0JfRENIRUNLKGJ5dGVzX3RvX3dyaXRlIDw9IGtTYkludDMyTWF4KTsKKworICAgIERXT1JEIGJ5dGVzX3dyaXR0ZW4gPSAwOworICAgIGlmICghV3JpdGVGaWxlKGZpbGVfaGFuZGxlLCBrNEtaZXJvUGFnZSwgc3RhdGljX2Nhc3Q8aW50PihieXRlc190b193cml0ZSksCisgICAgICAgICAgICAgICAgICAgJmJ5dGVzX3dyaXR0ZW4sIE5VTEwpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYnl0ZXNfbGVmdF90b193cml0ZSAtPSBieXRlc193cml0dGVuOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiRmlsZVRydW5jYXRlKFNiRmlsZSBmaWxlLCBpbnQ2NF90IGxlbmd0aCkgeworICBpZiAoIXN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6SGFzVmFsaWRIYW5kbGUoZmlsZSkgfHwgbGVuZ3RoIDwgMCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIEhBTkRMRSBmaWxlX2hhbmRsZSA9IGZpbGUtPmZpbGVfaGFuZGxlOworCisgIC8vIEdldCBjdXJyZW50IHBvc2l0aW9uLgorICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRfcG9zaXRpb24gPSB7MH07CisgIEJPT0wgc3VjY2VzcyA9CisgICAgICBTZXRGaWxlUG9pbnRlckV4KGZpbGVfaGFuZGxlLCB7MH0sICZjdXJyZW50X3Bvc2l0aW9uLCBGSUxFX0NVUlJFTlQpOworCisgIGlmICghc3VjY2VzcykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGJvb2wgcmV0dXJuX3ZhbHVlID0gZmFsc2U7CisgIGRvIHsKKyAgICBMQVJHRV9JTlRFR0VSIG9sZF9lb2YgPSB7MH07CisgICAgaWYgKCFTZXRGaWxlUG9pbnRlckV4KGZpbGVfaGFuZGxlLCB7MH0sICZvbGRfZW9mLCBGSUxFX0VORCkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIExBUkdFX0lOVEVHRVIgbmV3X2VvZiA9IHswfTsKKyAgICBuZXdfZW9mLlF1YWRQYXJ0ID0gbGVuZ3RoOworICAgIGlmICghU2V0RmlsZVBvaW50ZXJFeChmaWxlX2hhbmRsZSwgbmV3X2VvZiwgTlVMTCwgRklMRV9CRUdJTikpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghU2V0RW5kT2ZGaWxlKGZpbGVfaGFuZGxlKSkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgV3JpdGVaZXJvc1RvRmlsZShmaWxlX2hhbmRsZSwgb2xkX2VvZiwgbmV3X2VvZik7CisgICAgcmV0dXJuX3ZhbHVlID0gdHJ1ZTsKKyAgfSB3aGlsZSAoMCk7CisKKyAgLy8gU2V0IHRoZSBmaWxlIHBvaW50ZXIgcG9zaXRpb24gYmFjayB3aGVyZSBpdCB3YXMuCisgIFNldEZpbGVQb2ludGVyRXgoZmlsZV9oYW5kbGUsIGN1cnJlbnRfcG9zaXRpb24sIE5VTEwsIEZJTEVfQkVHSU4pOworCisgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfd3JpdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfd3JpdGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1NmY2OAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV93cml0ZS5jYwpAQCAtMCwwICsxLDQyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZmlsZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKworaW50IFNiRmlsZVdyaXRlKFNiRmlsZSBmaWxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkgeworICAvLyBUT0RPOiBTdXBwb3J0IGFzeW5jaHJvbm91cyBJTywgaWYgbmVjZXNzYXJ5LgorICBTQl9EQ0hFQ0soKHNpemUgPT0gMCkgfHwgKGRhdGEgIT0gbnVsbHB0cikpOworICBpZiAoIVNiRmlsZUlzVmFsaWQoZmlsZSkpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaWYgKHNpemUgPCAwKSB7CisgICAgU0JfTk9UUkVBQ0hFRCgpOworICAgIHJldHVybiAtMTsKKyAgfSBlbHNlIGlmIChzaXplID09IDApIHsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIERXT1JEIGJ5dGVzX3dyaXR0ZW4gPSAwOworICBib29sIHN1Y2Nlc3MgPSBXcml0ZUZpbGUoZmlsZS0+ZmlsZV9oYW5kbGUsIGRhdGEsIHNpemUsICZieXRlc193cml0dGVuLCBOVUxMKTsKKyAgaWYgKCFzdWNjZXNzKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcmV0dXJuIGJ5dGVzX3dyaXR0ZW47Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dldF9ob21lX2RpcmVjdG9yeS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZ2V0X2hvbWVfZGlyZWN0b3J5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlN2NmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dldF9ob21lX2RpcmVjdG9yeS5jYwpAQCAtMCwwICsxLDk2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlIDxvYmpiYXNlLmg+CisjaW5jbHVkZSA8c2hsb2JqLmg+CisjaW5jbHVkZSA8c2hsd2FwaS5oPgorCisvLyBXaW5kb3dzIGRlZmluZXMgR2V0Q29tbWFuZExpbmUgYXMgYSBtYWNybyB0byBHZXRDb21tYW5kTGluZVcgd2hpY2gKKy8vIGJyZWFrcyBvdXIgQXBwbGljYXRpb246OkdldENvbW1hbmRMaW5lIGNhbGwgYmVsb3c7IHRodXMgd2UgdW5kZWZpbmUKKy8vIGl0IGFmdGVyIGluY2x1ZGluZyBvdXIgV2luZG93cyBoZWFkZXJzLgorI3VuZGVmIEdldENvbW1hbmRMaW5lCisKKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hcHBsaWNhdGlvbi5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkNvbW1hbmRMaW5lOworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIG5vdXNlciB7CisKK2Jvb2wgR2V0SG9tZURpcmVjdG9yeShTYlVzZXIgdXNlciwgY2hhciogb3V0X3BhdGgsIGludCBwYXRoX3NpemUpIHsKKyAgaWYgKHVzZXIgIT0gU2JVc2VyR2V0Q3VycmVudCgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgUFdTVFIgbG9jYWxfYXBwX2RhdGFfcGF0aCA9IG51bGxwdHI7CisKKyAgaWYgKFNfT0sgPT0gU0hHZXRLbm93bkZvbGRlclBhdGgoRk9MREVSSURfTG9jYWxBcHBEYXRhLCAwLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxfYXBwX2RhdGFfcGF0aCkpIHsKKyAgICBUQ0hBUiB3aWRlX3BhdGhbTUFYX1BBVEhdOworICAgIHdjc2NweSh3aWRlX3BhdGgsIGxvY2FsX2FwcF9kYXRhX3BhdGgpOworICAgIENvVGFza01lbUZyZWUobG9jYWxfYXBwX2RhdGFfcGF0aCk7CisgICAgLy8gSW5zdGVhZCBvZiB1c2luZyB0aGUgcmF3IGxvY2FsIEFwcERhdGEgZGlyZWN0b3J5LCB3ZSBjcmVhdGUgYSBwcm9ncmFtCisgICAgLy8gYXBwIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGV4aXN0IGFscmVhZHkuCisgICAgVENIQVIgcHJvZ3JhbV9uYW1lW01BWF9QQVRIXTsKKyAgICBEV09SRCBwcm9ncmFtX25hbWVfbGVuZ3RoID0gR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgcHJvZ3JhbV9uYW1lLCBNQVhfUEFUSCk7CisgICAgaWYgKHByb2dyYW1fbmFtZV9sZW5ndGggPT0gMCkgeworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiR2V0TW9kdWxlRmlsZU5hbWUgZmFpbGVkIjsKKyAgICAgIHNid2luMzI6OkRlYnVnTG9nV2luRXJyb3IoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgUGF0aFN0cmlwUGF0aChwcm9ncmFtX25hbWUpOworICAgIFBhdGhBcHBlbmQod2lkZV9wYXRoLCBwcm9ncmFtX25hbWUpOworICAgIGlmICghUGF0aEZpbGVFeGlzdHMod2lkZV9wYXRoKSkgeworICAgICAgU0VDVVJJVFlfQVRUUklCVVRFUyBzZWN1cml0eV9hdHRyaWJ1dGVzID0ge3NpemVvZihTRUNVUklUWV9BVFRSSUJVVEVTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUUlVFfTsKKyAgICAgIGNvbnN0IEJPT0wgY3JlYXRlZF9kaXJlY3RvcnkgPQorICAgICAgICAgIENyZWF0ZURpcmVjdG9yeSh3aWRlX3BhdGgsICZzZWN1cml0eV9hdHRyaWJ1dGVzKTsKKyAgICAgIGlmICghY3JlYXRlZF9kaXJlY3RvcnkpIHsKKyAgICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBob21lIGRpcmVjdG9yeSI7CisgICAgICAgIHNid2luMzI6OkRlYnVnTG9nV2luRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBhY3R1YWxfcGF0aF9sZW5ndGggPSB3Y3NsZW4od2lkZV9wYXRoKTsKKyAgICBpZiAocGF0aF9zaXplIDwgYWN0dWFsX3BhdGhfbGVuZ3RoKSB7CisgICAgICBTQl9MT0coRVJST1IpIDw8ICJIb21lIGRpcmVjdG9yeSBsZW5ndGggZXhjZWVkcyBtYXggcGF0aCBzaXplIjsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgc3RkOjp3Y3N0b21icyhvdXRfcGF0aCwgd2lkZV9wYXRoLCBhY3R1YWxfcGF0aF9sZW5ndGggKyAxKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBTQl9MT0coRVJST1IpIDw8ICJVbmFibGUgdG8gb3BlbiBsb2NhbCBBcHBEYXRhIGFzIGhvbWUgZGlyZWN0b3J5LiI7CisgIHNid2luMzI6OkRlYnVnTG9nV2luRXJyb3IoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugbm91c2VyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dyYXBoaWNzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9ncmFwaGljcy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU5YTYwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9ncmFwaGljcy5jYwpAQCAtMCwwICsxLDUzIEBACisvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dyYXBoaWNzLmgiCisKKyNpbmNsdWRlICJjb2JhbHQvZXh0ZW5zaW9uL2dyYXBoaWNzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCituYW1lc3BhY2UgeworCitmbG9hdCBHZXRNYXhpbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzKCkgeworICAvLyBBbGxvdyB0aGUgcmFzdGVyaXplciB0byBkZWxheSByZW5kZXJpbmcgaW5kZWZpbml0ZWx5IGlmIG5vdGhpbmcgaGFzCisgIC8vIGNoYW5nZWQuCisgIHJldHVybiAtMS4wZjsKK30KKworZmxvYXQgR2V0TWluaW11bUZyYW1lSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcygpIHsKKyAgLy8gRnJhbWUgcHJlc2VudGF0aW9uIGlzIGJsb2NrZWQgb24gdnN5bmMsIHNvIHRoZSByZW5kZXIgdGhyZWFkIHdpbGwgYWxzbworICAvLyBibG9jayBvbiB2c3luYy4gSG93ZXZlciwgdXNlIGEgbm9uLXplcm8gbWluaW11bSBmcmFtZSB0aW1lIHRvIGF2b2lkCisgIC8vIHBvc3NpYmxlIGJ1c3ktbG9vcHMgb24gdW5yZW5kZXJlZCBzdWJtaXNzaW9ucy4KKyAgcmV0dXJuIDEuMGY7Cit9CisKK2NvbnN0IENvYmFsdEV4dGVuc2lvbkdyYXBoaWNzQXBpIGtHcmFwaGljc0FwaSA9IHsKKyAga0NvYmFsdEV4dGVuc2lvbkdyYXBoaWNzTmFtZSwKKyAgMiwKKyAgJkdldE1heGltdW1GcmFtZUludGVydmFsSW5NaWxsaXNlY29uZHMsCisgICZHZXRNaW5pbXVtRnJhbWVJbnRlcnZhbEluTWlsbGlzZWNvbmRzLAorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2NvbnN0IHZvaWQqIEdldEdyYXBoaWNzQXBpKCkgeworICByZXR1cm4gJmtHcmFwaGljc0FwaTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dyYXBoaWNzLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2dyYXBoaWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1YTI0YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZ3JhcGhpY3MuaApAQCAtMCwwICsxLDI4IEBACisvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9HUkFQSElDU19IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0dSQVBISUNTX0hfCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitjb25zdCB2b2lkKiBHZXRHcmFwaGljc0FwaSgpOworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0dSQVBISUNTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9neXBfY29uZmlndXJhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODkzODc1Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlN0YXJib2FyZCB3aW4zMiBzaGFyZWQgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBmb3IgZ3lwX2NvYmFsdC4iIiIKKworZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24KKworTVNWU19WRVJTSU9OID0gMjAxNworCisKK2NsYXNzIFdpbjMyU2hhcmVkQ29uZmlndXJhdGlvbihwbGF0Zm9ybV9jb25maWd1cmF0aW9uLlBsYXRmb3JtQ29uZmlndXJhdGlvbik6CisgICIiIlN0YXJib2FyZCBNaWNyb3NvZnQgV2luZG93cyBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgorICBwYXNzCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2hhcmR3YXJlX2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2hhcmR3YXJlX2RlY29kZV90YXJnZXRfaW50ZXJuYWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4NTlmYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvaGFyZHdhcmVfZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDM4MiBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9oYXJkd2FyZV9kZWNvZGVfdGFyZ2V0X2ludGVybmFsLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2wuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2xleHQuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMi5oIgorI2luY2x1ZGUgInRoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgiCisKK25hbWVzcGFjZSB7CisKK3VzaW5nIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI7CisKKy8vIHszQzNBNDNBQi1DNjlCLTQ2QzktQUE4RC1CMENGRkNENDU5NkR9Citjb25zdCBHVUlEIGtDb2JhbHROdjEyQmluZENocm9tYSA9IHsKKyAgICAweDNjM2E0M2FiLAorICAgIDB4YzY5YiwKKyAgICAweDQ2YzksCisgICAgezB4YWEsIDB4OGQsIDB4YjAsIDB4Y2YsIDB4ZmMsIDB4ZDQsIDB4NTksIDB4NmR9fTsKKworQ29tUHRyPElEM0QxMVRleHR1cmUyRD4gQWxsb2NhdGVUZXh0dXJlKGNvbnN0IENvbVB0cjxJRDNEMTFEZXZpY2U+JiBkM2RfZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0Rm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCkgeworICBDb21QdHI8SUQzRDExVGV4dHVyZTJEPiB0ZXh0dXJlOworICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlX2Rlc2MgPSB7fTsKKyAgdGV4dHVyZV9kZXNjLldpZHRoID0gd2lkdGg7CisgIHRleHR1cmVfZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgIHRleHR1cmVfZGVzYy5NaXBMZXZlbHMgPSAxOworICB0ZXh0dXJlX2Rlc2MuQXJyYXlTaXplID0gMTsKKyAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIGtTYkRlY29kZVRhcmdldEZvcm1hdDJQbGFuZVlVVk5WMTI6CisgICAgICB0ZXh0dXJlX2Rlc2MuRm9ybWF0ID0gRFhHSV9GT1JNQVRfTlYxMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MVBsYW5lUkdCQToKKyAgICAgIHRleHR1cmVfZGVzYy5Gb3JtYXQgPSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBTQl9OT1RSRUFDSEVEKCk7CisgIH0KKworICB0ZXh0dXJlX2Rlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgIHRleHR1cmVfZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICB0ZXh0dXJlX2Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICB0ZXh0dXJlX2Rlc2MuQmluZEZsYWdzID0KKyAgICAgIEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICBDaGVja1Jlc3VsdChkM2RfZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnRleHR1cmVfZGVzYywgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuR2V0QWRkcmVzc09mKCkpKTsKKyAgcmV0dXJuIHRleHR1cmU7Cit9CisKK3ZvaWQgVXBkYXRlVGV4dHVyZSgKKyAgICBjb25zdCBDb21QdHI8SUQzRDExVGV4dHVyZTJEPiYgdGV4dHVyZSwKKyAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9EZXZpY2UxPiYgdmlkZW9fZGV2aWNlLAorICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb0NvbnRleHQ+JiB2aWRlb19jb250ZXh0LAorICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb1Byb2Nlc3NvckVudW1lcmF0b3I+JiB2aWRlb19lbnVtZXJhdG9yLAorICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb1Byb2Nlc3Nvcj4mIHZpZGVvX3Byb2Nlc3NvciwKKyAgICBjb25zdCBDb21QdHI8SU1GU2FtcGxlPiYgdmlkZW9fc2FtcGxlLAorICAgIGNvbnN0IFJFQ1QmIHZpZGVvX2FyZWEpIHsKKyAgQ29tUHRyPElNRk1lZGlhQnVmZmVyPiBtZWRpYV9idWZmZXI7CisgIENoZWNrUmVzdWx0KHZpZGVvX3NhbXBsZS0+R2V0QnVmZmVyQnlJbmRleCgwLCBtZWRpYV9idWZmZXIuR2V0QWRkcmVzc09mKCkpKTsKKworICBDb21QdHI8SU1GRFhHSUJ1ZmZlcj4gZHhnaV9idWZmZXI7CisgIENoZWNrUmVzdWx0KG1lZGlhX2J1ZmZlci5BcygmZHhnaV9idWZmZXIpKTsKKworICBDb21QdHI8SUQzRDExVGV4dHVyZTJEPiBpbnB1dF90ZXh0dXJlOworICBDaGVja1Jlc3VsdChkeGdpX2J1ZmZlci0+R2V0UmVzb3VyY2UoSUlEX1BQVl9BUkdTKCZpbnB1dF90ZXh0dXJlKSkpOworCisgIC8vIFRoZSBWaWRlb1Byb2Nlc3NvciBuZWVkcyB0byBrbm93IHdoYXQgc3Vic2V0IG9mIHRoZSBkZWNvZGVkCisgIC8vIGZyYW1lIGNvbnRhaW5zIGFjdGl2ZSBwaXhlbHMgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorICB2aWRlb19jb250ZXh0LT5WaWRlb1Byb2Nlc3NvclNldFN0cmVhbVNvdXJjZVJlY3QodmlkZW9fcHJvY2Vzc29yLkdldCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgJnZpZGVvX2FyZWEpOworCisgIEQzRDExX1ZJREVPX1BST0NFU1NPUl9JTlBVVF9WSUVXX0RFU0MgaW5wdXRfZGVzYyA9IHt9OworICBpbnB1dF9kZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9WUElWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgIGlucHV0X2Rlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKyAgZHhnaV9idWZmZXItPkdldFN1YnJlc291cmNlSW5kZXgoJmlucHV0X2Rlc2MuVGV4dHVyZTJELkFycmF5U2xpY2UpOworCisgIENvbVB0cjxJRDNEMTFWaWRlb1Byb2Nlc3NvcklucHV0Vmlldz4gaW5wdXRfdmlldzsKKyAgQ2hlY2tSZXN1bHQodmlkZW9fZGV2aWNlLT5DcmVhdGVWaWRlb1Byb2Nlc3NvcklucHV0VmlldygKKyAgICAgIGlucHV0X3RleHR1cmUuR2V0KCksIHZpZGVvX2VudW1lcmF0b3IuR2V0KCksICZpbnB1dF9kZXNjLAorICAgICAgaW5wdXRfdmlldy5HZXRBZGRyZXNzT2YoKSkpOworCisgIEQzRDExX1ZJREVPX1BST0NFU1NPUl9PVVRQVVRfVklFV19ERVNDIG91dHB1dF9kZXNjID0ge307CisgIG91dHB1dF9kZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9WUE9WX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgIG91dHB1dF9kZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CisKKyAgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yT3V0cHV0Vmlldz4gb3V0cHV0X3ZpZXc7CisgIENoZWNrUmVzdWx0KHZpZGVvX2RldmljZS0+Q3JlYXRlVmlkZW9Qcm9jZXNzb3JPdXRwdXRWaWV3KAorICAgICAgdGV4dHVyZS5HZXQoKSwgdmlkZW9fZW51bWVyYXRvci5HZXQoKSwgJm91dHB1dF9kZXNjLAorICAgICAgb3V0cHV0X3ZpZXcuR2V0QWRkcmVzc09mKCkpKTsKKworICAvLyBXZSBoYXZlIGEgc2luZ2xlIHZpZGVvIHN0cmVhbSwgd2hpY2ggaXMgZW5hYmxlZCBmb3IgZGlzcGxheS4KKyAgRDNEMTFfVklERU9fUFJPQ0VTU09SX1NUUkVBTSBzdHJlYW1faW5mbyA9IHt9OworICBzdHJlYW1faW5mby5FbmFibGUgPSBUUlVFOworICBzdHJlYW1faW5mby5wSW5wdXRTdXJmYWNlID0gaW5wdXRfdmlldy5HZXQoKTsKKyAgQ2hlY2tSZXN1bHQodmlkZW9fY29udGV4dC0+VmlkZW9Qcm9jZXNzb3JCbHQoCisgICAgICB2aWRlb19wcm9jZXNzb3IuR2V0KCksIG91dHB1dF92aWV3LkdldCgpLCAwLCAxLCAmc3RyZWFtX2luZm8pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0hhcmR3YXJlRGVjb2RlVGFyZ2V0UHJpdmF0ZTo6SGFyZHdhcmVEZWNvZGVUYXJnZXRQcml2YXRlKAorICAgIGNvbnN0IENvbVB0cjxJRDNEMTFEZXZpY2U+JiBkM2RfZGV2aWNlLAorICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb0RldmljZTE+JiB2aWRlb19kZXZpY2UsCisgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvQ29udGV4dD4mIHZpZGVvX2NvbnRleHQsCisgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yRW51bWVyYXRvcj4mIHZpZGVvX2VudW1lcmF0b3IsCisgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yPiYgdmlkZW9fcHJvY2Vzc29yLAorICAgIGNvbnN0IENvbVB0cjxJTUZTYW1wbGU+JiB2aWRlb19zYW1wbGUsCisgICAgY29uc3QgUkVDVCYgdmlkZW9fYXJlYSwKKyAgICBib29sIHRleHR1cmVfUkdCQSkKKyAgICA6IHRleHR1cmVfUkdCQV8odGV4dHVyZV9SR0JBKSB7CisgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKyAgaW5mby5pc19vcGFxdWUgPSB0cnVlOworICBpbmZvLndpZHRoID0gdmlkZW9fYXJlYS5yaWdodDsKKyAgaW5mby5oZWlnaHQgPSB2aWRlb19hcmVhLmJvdHRvbTsKKworICBpZiAodGV4dHVyZV9SR0JBXykgeworICAgIGluZm8uZm9ybWF0ID0ga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MVBsYW5lUkdCQTsKKyAgfSBlbHNlIHsKKyAgICBpbmZvLmZvcm1hdCA9IGtTYkRlY29kZVRhcmdldEZvcm1hdDJQbGFuZVlVVk5WMTI7CisgIH0KKworICBkM2RfdGV4dHVyZSA9CisgICAgICBBbGxvY2F0ZVRleHR1cmUoZDNkX2RldmljZSwgaW5mby5mb3JtYXQsIGluZm8ud2lkdGgsIGluZm8uaGVpZ2h0KTsKKyAgaWYgKHZpZGVvX3NhbXBsZSkgeworICAgIFVwZGF0ZVRleHR1cmUoZDNkX3RleHR1cmUsIHZpZGVvX2RldmljZSwgdmlkZW9fY29udGV4dCwgdmlkZW9fZW51bWVyYXRvciwKKyAgICAgICAgICAgICAgICAgIHZpZGVvX3Byb2Nlc3NvciwgdmlkZW9fc2FtcGxlLCB2aWRlb19hcmVhKTsKKyAgfQorCisgIGlmICh0ZXh0dXJlX1JHQkFfKSB7CisgICAgSW5pdFRleHR1cmVSR0JBKCk7CisgIH0gZWxzZSB7CisgICAgSW5pdFRleHR1cmVZVVYoKTsKKyAgfQorfQorCit2b2lkIEhhcmR3YXJlRGVjb2RlVGFyZ2V0UHJpdmF0ZTo6SW5pdFRleHR1cmVZVVYoKSB7CisgIFNiRGVjb2RlVGFyZ2V0SW5mb1BsYW5lKiBwbGFuZVkgPSAmKGluZm8ucGxhbmVzW2tTYkRlY29kZVRhcmdldFBsYW5lWV0pOworICBTYkRlY29kZVRhcmdldEluZm9QbGFuZSogcGxhbmVVViA9ICYoaW5mby5wbGFuZXNba1NiRGVjb2RlVGFyZ2V0UGxhbmVVVl0pOworCisgIHBsYW5lWS0+d2lkdGggPSBpbmZvLndpZHRoOworICBwbGFuZVktPmhlaWdodCA9IGluZm8uaGVpZ2h0OworICBwbGFuZVktPmNvbnRlbnRfcmVnaW9uLmxlZnQgPSAwOworICBwbGFuZVktPmNvbnRlbnRfcmVnaW9uLnRvcCA9IGluZm8uaGVpZ2h0OworICBwbGFuZVktPmNvbnRlbnRfcmVnaW9uLnJpZ2h0ID0gaW5mby53aWR0aDsKKyAgcGxhbmVZLT5jb250ZW50X3JlZ2lvbi5ib3R0b20gPSAwOworCisgIHBsYW5lVVYtPndpZHRoID0gaW5mby53aWR0aCAvIDI7CisgIHBsYW5lVVYtPmhlaWdodCA9IGluZm8uaGVpZ2h0IC8gMjsKKyAgcGxhbmVVVi0+Y29udGVudF9yZWdpb24ubGVmdCA9IHBsYW5lWS0+Y29udGVudF9yZWdpb24ubGVmdCAvIDI7CisgIHBsYW5lVVYtPmNvbnRlbnRfcmVnaW9uLnRvcCA9IHBsYW5lWS0+Y29udGVudF9yZWdpb24udG9wIC8gMjsKKyAgcGxhbmVVVi0+Y29udGVudF9yZWdpb24ucmlnaHQgPSBwbGFuZVktPmNvbnRlbnRfcmVnaW9uLnJpZ2h0IC8gMjsKKyAgcGxhbmVVVi0+Y29udGVudF9yZWdpb24uYm90dG9tID0gcGxhbmVZLT5jb250ZW50X3JlZ2lvbi5ib3R0b20gLyAyOworCisgIEVHTGludCBsdW1hX3RleHR1cmVfYXR0cmlidXRlc1tdID0ge0VHTF9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RUdMaW50PihpbmZvLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RUdMaW50PihpbmZvLmhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9URVhUVVJFX1RBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9URVhUVVJFX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfUkdCQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PTkV9OworCisgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgRUdMQ29uZmlnIGNvbmZpZzsKKyAgRUdMaW50IGF0dHJpYnV0ZV9saXN0W10gPSB7RUdMX1NVUkZBQ0VfVFlQRSwgIC8vIHRoaXMgbXVzdCBiZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfV0lORE9XX0JJVCB8IEVHTF9QQlVGRkVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1JFRF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9CSU5EX1RPX1RFWFRVUkVfUkdCQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PTkV9OworCisgIEVHTGludCBudW1fY29uZmlnczsKKyAgYm9vbCBvayA9IGVnbENob29zZUNvbmZpZyhkaXNwbGF5LCBhdHRyaWJ1dGVfbGlzdCwgJmNvbmZpZywgMSwgJm51bV9jb25maWdzKTsKKyAgU0JfRENIRUNLKG9rKTsKKyAgU0JfRENIRUNLKG51bV9jb25maWdzID09IDEpOworCisgIEdMdWludCBnbF90ZXh0dXJlc1syXSA9IHswfTsKKyAgZ2xHZW5UZXh0dXJlcygyLCBnbF90ZXh0dXJlcyk7CisgIFNCX0RDSEVDSyhnbEdldEVycm9yKCkgPT0gR0xfTk9fRVJST1IpOworCisgIC8vIFRoaXMgdGVsbHMgQU5HTEUgdGhhdCB0aGUgdGV4dHVyZSBpdCBjcmVhdGVzIHNob3VsZCBkcmF3CisgIC8vIHRoZSBsdW1hIGNoYW5uZWwgb24gUjguCisgIEhSRVNVTFQgaHIgPSBkM2RfdGV4dHVyZS0+U2V0UHJpdmF0ZURhdGEoa0NvYmFsdE52MTJCaW5kQ2hyb21hLCAwLCBudWxscHRyKTsKKyAgU0JfRENIRUNLKFNVQ0NFRURFRChocikpOworCisgIHN1cmZhY2VbMF0gPSBlZ2xDcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihkaXNwbGF5LCBFR0xfRDNEX1RFWFRVUkVfQU5HTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkM2RfdGV4dHVyZS5HZXQoKSwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVtYV90ZXh0dXJlX2F0dHJpYnV0ZXMpOworCisgIFNCX0RDSEVDSyhzdXJmYWNlWzBdICE9IEVHTF9OT19TVVJGQUNFKTsKKworICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGdsX3RleHR1cmVzWzBdKTsKKyAgU0JfRENIRUNLKGdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUik7CisKKyAgb2sgPSBlZ2xCaW5kVGV4SW1hZ2UoZGlzcGxheSwgc3VyZmFjZVswXSwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgU0JfRENIRUNLKG9rKTsKKworICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgIHBsYW5lWS0+dGV4dHVyZSA9IGdsX3RleHR1cmVzWzBdOworICBwbGFuZVktPmdsX3RleHR1cmVfdGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgcGxhbmVZLT5nbF90ZXh0dXJlX2Zvcm1hdCA9IEdMX1JFRF9FWFQ7CisKKyAgLy8gVGhpcyB0ZWxscyBBTkdMRSB0aGF0IHRoZSB0ZXh0dXJlIGl0IGNyZWF0ZXMgc2hvdWxkIGRyYXcKKyAgLy8gdGhlIGNocm9tYSBjaGFubmVsIG9uIFI4RzguCisgIGJvb2wgYmluZF9jaHJvbWEgPSB0cnVlOworICBociA9IGQzZF90ZXh0dXJlLT5TZXRQcml2YXRlRGF0YShrQ29iYWx0TnYxMkJpbmRDaHJvbWEsIDEsICZiaW5kX2Nocm9tYSk7CisgIFNCX0RDSEVDSyhTVUNDRUVERUQoaHIpKTsKKworICBFR0xpbnQgY2hyb21hX3RleHR1cmVfYXR0cmlidXRlc1tdID0ge0VHTF9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFR0xpbnQ+KGluZm8ud2lkdGgpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVHTGludD4oaW5mby5oZWlnaHQpIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfVEVYVFVSRV9UQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfMkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9URVhUVVJFX1JHQkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX05PTkV9OworICBzdXJmYWNlWzFdID0gZWdsQ3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIoZGlzcGxheSwgRUdMX0QzRF9URVhUVVJFX0FOR0xFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkX3RleHR1cmUuR2V0KCksIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYV90ZXh0dXJlX2F0dHJpYnV0ZXMpOworCisgIFNCX0RDSEVDSyhzdXJmYWNlWzFdICE9IEVHTF9OT19TVVJGQUNFKTsKKworICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGdsX3RleHR1cmVzWzFdKTsKKyAgU0JfRENIRUNLKGdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUik7CisKKyAgb2sgPSBlZ2xCaW5kVGV4SW1hZ2UoZGlzcGxheSwgc3VyZmFjZVsxXSwgRUdMX0JBQ0tfQlVGRkVSKTsKKyAgU0JfRENIRUNLKG9rKTsKKworICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgIHBsYW5lVVYtPnRleHR1cmUgPSBnbF90ZXh0dXJlc1sxXTsKKyAgcGxhbmVVVi0+Z2xfdGV4dHVyZV90YXJnZXQgPSBHTF9URVhUVVJFXzJEOworICBwbGFuZVVWLT5nbF90ZXh0dXJlX2Zvcm1hdCA9IEdMX1JHX0VYVDsKK30KKwordm9pZCBIYXJkd2FyZURlY29kZVRhcmdldFByaXZhdGU6OkluaXRUZXh0dXJlUkdCQSgpIHsKKyAgU2JEZWNvZGVUYXJnZXRJbmZvUGxhbmUqIHBsYW5lUkdCQSA9ICYoaW5mby5wbGFuZXNba1NiRGVjb2RlVGFyZ2V0UGxhbmVSR0JBXSk7CisKKyAgcGxhbmVSR0JBLT53aWR0aCA9IGluZm8ud2lkdGg7CisgIHBsYW5lUkdCQS0+aGVpZ2h0ID0gaW5mby5oZWlnaHQ7CisgIHBsYW5lUkdCQS0+Y29udGVudF9yZWdpb24ubGVmdCA9IDA7CisgIHBsYW5lUkdCQS0+Y29udGVudF9yZWdpb24udG9wID0gaW5mby5oZWlnaHQ7CisgIHBsYW5lUkdCQS0+Y29udGVudF9yZWdpb24ucmlnaHQgPSBpbmZvLndpZHRoOworICBwbGFuZVJHQkEtPmNvbnRlbnRfcmVnaW9uLmJvdHRvbSA9IDA7CisKKyAgRUdMaW50IFJHQkFfdGV4dHVyZV9hdHRyaWJ1dGVzW10gPSB7RUdMX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFR0xpbnQ+KGluZm8ud2lkdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFR0xpbnQ+KGluZm8uaGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfVEVYVFVSRV8yRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1RFWFRVUkVfRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfVEVYVFVSRV9SR0JBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9ORX07CisKKyAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQTEFZKTsKKworICBFR0xDb25maWcgY29uZmlnOworICBFR0xpbnQgYXR0cmlidXRlX2xpc3RbXSA9IHtFR0xfU1VSRkFDRV9UWVBFLCAgLy8gdGhpcyBtdXN0IGJlIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9XSU5ET1dfQklUIHwgRUdMX1BCVUZGRVJfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX0JJTkRfVE9fVEVYVFVSRV9SR0JBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMX09QRU5HTF9FUzJfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xfTk9ORX07CisKKyAgRUdMaW50IG51bV9jb25maWdzOworICBib29sIG9rID0gZWdsQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGF0dHJpYnV0ZV9saXN0LCAmY29uZmlnLCAxLCAmbnVtX2NvbmZpZ3MpOworICBTQl9EQ0hFQ0sob2spOworICBTQl9EQ0hFQ0sobnVtX2NvbmZpZ3MgPT0gMSk7CisKKyAgR0x1aW50IGdsX3RleHR1cmVzWzJdID0gezB9OworICBnbEdlblRleHR1cmVzKDIsIGdsX3RleHR1cmVzKTsKKyAgU0JfRENIRUNLKGdsR2V0RXJyb3IoKSA9PSBHTF9OT19FUlJPUik7CisKKyAgc3VyZmFjZVswXSA9IGVnbENyZWF0ZVBidWZmZXJGcm9tQ2xpZW50QnVmZmVyKGRpc3BsYXksIEVHTF9EM0RfVEVYVFVSRV9BTkdMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzZF90ZXh0dXJlLkdldCgpLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSR0JBX3RleHR1cmVfYXR0cmlidXRlcyk7CisKKyAgU0JfRENIRUNLKHN1cmZhY2VbMF0gIT0gRUdMX05PX1NVUkZBQ0UpOworCisgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgZ2xfdGV4dHVyZXNbMF0pOworICBTQl9EQ0hFQ0soZ2xHZXRFcnJvcigpID09IEdMX05PX0VSUk9SKTsKKworICBvayA9IGVnbEJpbmRUZXhJbWFnZShkaXNwbGF5LCBzdXJmYWNlWzBdLCBFR0xfQkFDS19CVUZGRVIpOworICBTQl9EQ0hFQ0sob2spOworCisgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisKKyAgcGxhbmVSR0JBLT50ZXh0dXJlID0gZ2xfdGV4dHVyZXNbMF07CisgIHBsYW5lUkdCQS0+Z2xfdGV4dHVyZV90YXJnZXQgPSBHTF9URVhUVVJFXzJEOworICBwbGFuZVJHQkEtPmdsX3RleHR1cmVfZm9ybWF0ID0gR0xfUkVEX0VYVDsKK30KKworSGFyZHdhcmVEZWNvZGVUYXJnZXRQcml2YXRlOjp+SGFyZHdhcmVEZWNvZGVUYXJnZXRQcml2YXRlKCkgeworICBpZiAoIXRleHR1cmVfUkdCQV8pIHsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICYoaW5mby5wbGFuZXNba1NiRGVjb2RlVGFyZ2V0UGxhbmVZXS50ZXh0dXJlKSk7CisgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmKGluZm8ucGxhbmVzW2tTYkRlY29kZVRhcmdldFBsYW5lVVZdLnRleHR1cmUpKTsKKyAgfQorCisgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisKKyAgZWdsUmVsZWFzZVRleEltYWdlKGRpc3BsYXksIHN1cmZhY2VbMF0sIEVHTF9CQUNLX0JVRkZFUik7CisgIGVnbERlc3Ryb3lTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2VbMF0pOworCisgIGlmICghdGV4dHVyZV9SR0JBXykgeworICAgIGVnbFJlbGVhc2VUZXhJbWFnZShkaXNwbGF5LCBzdXJmYWNlWzFdLCBFR0xfQkFDS19CVUZGRVIpOworICAgIGVnbERlc3Ryb3lTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2VbMV0pOworICB9Cit9CisKK2Jvb2wgSGFyZHdhcmVEZWNvZGVUYXJnZXRQcml2YXRlOjpVcGRhdGUoCisgICAgY29uc3QgQ29tUHRyPElEM0QxMURldmljZT4mIGQzZF9kZXZpY2UsCisgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvRGV2aWNlMT4mIHZpZGVvX2RldmljZSwKKyAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9Db250ZXh0PiYgdmlkZW9fY29udGV4dCwKKyAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9Qcm9jZXNzb3JFbnVtZXJhdG9yPiYgdmlkZW9fZW51bWVyYXRvciwKKyAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9Qcm9jZXNzb3I+JiB2aWRlb19wcm9jZXNzb3IsCisgICAgY29uc3QgQ29tUHRyPElNRlNhbXBsZT4mIHZpZGVvX3NhbXBsZSwKKyAgICBjb25zdCBSRUNUJiB2aWRlb19hcmVhLAorICAgIGJvb2wgdGV4dHVyZV9SR0JBKSB7CisgIC8vIE9ubHkgYWxsb3cgdXBkYXRpbmcgaWYgdGhpcyBpcyB0aGUgb25seSByZWZlcmVuY2UuIE90aGVyd2lzZSB0aGUgdXBkYXRlCisgIC8vIG1heSBjaGFuZ2Ugc29tZXRoaW5nIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAgaWYgKFNiQXRvbWljTm9CYXJyaWVyX0xvYWQoJnJlZmNvdW50KSA+IDEpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBUaGUgZGVjb2RlIHRhcmdldCBpbmZvIG11c3QgYmUgY29tcGF0aWJsZS4gVGhlIHJlc29sdXRpb24gc2hvdWxkIG1hdGNoCisgIC8vIGV4YWN0bHksIG90aGVyd2lzZSB0aGUgc2hhZGVyIG1heSBzYW1wbGUgaW52YWxpZCB0ZXhlbHMgYWxvbmcgdGhlCisgIC8vIHRleHR1cmUgYm9yZGVyLgorICBpZiAoKHRleHR1cmVfUkdCQSBeIChpbmZvLmZvcm1hdCAhPSBrU2JEZWNvZGVUYXJnZXRGb3JtYXQyUGxhbmVZVVZOVjEyKSkgfHwKKyAgICAgICh0ZXh0dXJlX1JHQkEgXiAoaW5mby5mb3JtYXQgPT0ga1NiRGVjb2RlVGFyZ2V0Rm9ybWF0MVBsYW5lUkdCQSkpIHx8CisgICAgICBpbmZvLmlzX29wYXF1ZSAhPSB0cnVlIHx8IGluZm8ud2lkdGggIT0gdmlkZW9fYXJlYS5yaWdodCB8fAorICAgICAgaW5mby5oZWlnaHQgIT0gdmlkZW9fYXJlYS5ib3R0b20pIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBVcGRhdGVUZXh0dXJlKGQzZF90ZXh0dXJlLCB2aWRlb19kZXZpY2UsIHZpZGVvX2NvbnRleHQsIHZpZGVvX2VudW1lcmF0b3IsCisgICAgICAgICAgICAgICAgdmlkZW9fcHJvY2Vzc29yLCB2aWRlb19zYW1wbGUsIHZpZGVvX2FyZWEpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvaGFyZHdhcmVfZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9oYXJkd2FyZV9kZWNvZGVfdGFyZ2V0X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjY2RiZQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvaGFyZHdhcmVfZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX0hBUkRXQVJFX0RFQ09ERV9UQVJHRVRfSU5URVJOQUxfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9IQVJEV0FSRV9ERUNPREVfVEFSR0VUX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlIDxEM2QxMV8xLmg+CisjaW5jbHVkZSA8bWZpZGwuaD4KKyNpbmNsdWRlIDx3cmwvY2xpZW50Lmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2RlY29kZV90YXJnZXQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY29kZV90YXJnZXRfaW50ZXJuYWwuaCIKKworc3RydWN0IEhhcmR3YXJlRGVjb2RlVGFyZ2V0UHJpdmF0ZSA6IHB1YmxpYyBTYkRlY29kZVRhcmdldFByaXZhdGUgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgdXNpbmcgQ29tUHRyID0gOjpNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPFQ+OworCisgIENvbVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGQzZF90ZXh0dXJlOworICBib29sIHRleHR1cmVfUkdCQV87CisKKyAgLy8gRUdMU3VyZmFjZSBpcyBkZWZpbmVkIGFzIHZvaWQqIGluICJ0aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2wuaCIuCisgIC8vIFVzZSB2b2lkKiBkaXJlY3RseSBoZXJlIHRvIGF2b2lkIGBlZ2wuaGAgYmVpbmcgaW5jbHVkZWQgYnJvYWRseS4KKyAgdm9pZCogc3VyZmFjZVsyXTsKKworICBIYXJkd2FyZURlY29kZVRhcmdldFByaXZhdGUoCisgICAgICBjb25zdCBDb21QdHI8SUQzRDExRGV2aWNlPiYgZDNkX2RldmljZSwKKyAgICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb0RldmljZTE+JiB2aWRlb19kZXZpY2UsCisgICAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9Db250ZXh0PiYgdmlkZW9fY29udGV4dCwKKyAgICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb1Byb2Nlc3NvckVudW1lcmF0b3I+JiB2aWRlb19lbnVtZXJhdG9yLAorICAgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yPiYgdmlkZW9fcHJvY2Vzc29yLAorICAgICAgY29uc3QgQ29tUHRyPElNRlNhbXBsZT4mIHZpZGVvX3NhbXBsZSwKKyAgICAgIGNvbnN0IFJFQ1QmIHZpZGVvX2FyZWEsCisgICAgICBib29sIHRleHR1cmVfUkdCQSk7CisgIH5IYXJkd2FyZURlY29kZVRhcmdldFByaXZhdGUoKSBvdmVycmlkZTsKKworICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHRleHR1cmUgd2l0aCB0aGUgZ2l2ZW4gdmlkZW9fc2FtcGxlJ3MgZGF0YS4KKyAgLy8gSWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG5ldyB2aWRlb19zYW1wbGUsIHRoZW4KKyAgLy8gdGhpcyB3aWxsIHJldHVybiBmYWxzZSwgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGp1c3QgY3JlYXRlIGEgbmV3CisgIC8vIGRlY29kZSB0YXJnZXQgZm9yIHRoZSBzYW1wbGUuCisgIGJvb2wgVXBkYXRlKGNvbnN0IENvbVB0cjxJRDNEMTFEZXZpY2U+JiBkM2RfZGV2aWNlLAorICAgICAgICAgICAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9EZXZpY2UxPiYgdmlkZW9fZGV2aWNlLAorICAgICAgICAgICAgICBjb25zdCBDb21QdHI8SUQzRDExVmlkZW9Db250ZXh0PiYgdmlkZW9fY29udGV4dCwKKyAgICAgICAgICAgICAgY29uc3QgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yRW51bWVyYXRvcj4mIHZpZGVvX2VudW1lcmF0b3IsCisgICAgICAgICAgICAgIGNvbnN0IENvbVB0cjxJRDNEMTFWaWRlb1Byb2Nlc3Nvcj4mIHZpZGVvX3Byb2Nlc3NvciwKKyAgICAgICAgICAgICAgY29uc3QgQ29tUHRyPElNRlNhbXBsZT4mIHZpZGVvX3NhbXBsZSwKKyAgICAgICAgICAgICAgY29uc3QgUkVDVCYgdmlkZW9fYXJlYSwKKyAgICAgICAgICAgICAgYm9vbCB0ZXh0dXJlX1JHQkEpOworICB2b2lkIEluaXRUZXh0dXJlUkdCQSgpOworICB2b2lkIEluaXRUZXh0dXJlWVVWKCk7Cit9OworCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfSEFSRFdBUkVfREVDT0RFX1RBUkdFVF9JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2cuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWViMWQxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2cuY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKwordm9pZCBTYkxvZyhTYkxvZ1ByaW9yaXR5IHByaW9yaXR5LCBjb25zdCBjaGFyKiBtZXNzYWdlKSB7CisgIFNiTG9nUmF3KG1lc3NhZ2UpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmlsZV9pbXBsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmlsZV9pbXBsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTA0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19maWxlX2ltcGwuY2MKQEAgLTAsMCArMSwxMTggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2ZpbGVfaW1wbC5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHsKKworU2JNdXRleCBsb2dfbXV0ZXggPSBTQl9NVVRFWF9JTklUSUFMSVpFUjsKK1NiRmlsZSBsb2dfZmlsZSA9IGtTYkZpbGVJbnZhbGlkOworCisvLyBTYk11dGV4IGlzIG5vdCByZWVudHJhbnQsIHNvIGZhY3RvciBvdXQgY2xvc2UgbG9nIGZpbGUgZnVuY3Rpb25hbGl0eSBmb3IgdXNlCisvLyBieSBvdGhlciBmdW5jdGlvbnMuCit2b2lkIENsb3NlTG9nRmlsZVdpdGhvdXRMb2NrKCkgeworICBpZiAoU2JGaWxlSXNWYWxpZChsb2dfZmlsZSkpIHsKKyAgICBTYkZpbGVGbHVzaChsb2dfZmlsZSk7CisgICAgU2JGaWxlQ2xvc2UobG9nX2ZpbGUpOworICAgIGxvZ19maWxlID0ga1NiRmlsZUludmFsaWQ7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCit2b2lkIENsb3NlTG9nRmlsZSgpIHsKKyAgU2JNdXRleEFjcXVpcmUoJmxvZ19tdXRleCk7CisgIENsb3NlTG9nRmlsZVdpdGhvdXRMb2NrKCk7CisgIFNiTXV0ZXhSZWxlYXNlKCZsb2dfbXV0ZXgpOworfQorCit2b2lkIE9wZW5Mb2dJbkNhY2hlRGlyZWN0b3J5KGNvbnN0IGNoYXIqIGxvZ19maWxlX25hbWUsIGludCBjcmVhdGlvbl9mbGFncykgeworICBTQl9EQ0hFQ0soKGNyZWF0aW9uX2ZsYWdzICYga1NiRmlsZU9wZW5BbHdheXMpIHx8CisgICAgICAgICAgICAoY3JlYXRpb25fZmxhZ3MgJiBrU2JGaWxlQ3JlYXRlQWx3YXlzKSk7CisgIFNCX0RDSEVDSyhzdHJsZW4obG9nX2ZpbGVfbmFtZSkgIT0gMCk7CisgIFNCX0RDSEVDSyhzdHJjaHIobG9nX2ZpbGVfbmFtZSwga1NiRmlsZVNlcENoYXIpID09IG51bGxwdHIpOworICBzdGQ6OnZlY3RvcjxjaGFyPiBvdXRfcGF0aChrU2JGaWxlTWF4UGF0aCArIDEpOworICBvdXRfcGF0aFswXSA9ICdcMCc7CisKKyAgY29uc3QgaW50IHBhdGhfc2l6ZSA9IHN0YXRpY19jYXN0PGludD4ob3V0X3BhdGguc2l6ZSgpKTsKKyAgaWYgKCFTYlN5c3RlbUdldFBhdGgoa1NiU3lzdGVtUGF0aENhY2hlRGlyZWN0b3J5LCBvdXRfcGF0aC5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfc2l6ZSkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoc3RhcmJvYXJkOjpzdHJsY2F0KG91dF9wYXRoLmRhdGEoKSwga1NiRmlsZVNlcFN0cmluZywgcGF0aF9zaXplKSA+PQorICAgICAgcGF0aF9zaXplKSB7CisgICAgcmV0dXJuOworICB9CisgIGlmIChzdGFyYm9hcmQ6OnN0cmxjYXQob3V0X3BhdGguZGF0YSgpLCBsb2dfZmlsZV9uYW1lLCBwYXRoX3NpemUpID49CisgICAgICBwYXRoX3NpemUpIHsKKyAgICByZXR1cm47CisgIH0KKworICBPcGVuTG9nRmlsZShvdXRfcGF0aC5kYXRhKCksIGNyZWF0aW9uX2ZsYWdzKTsKK30KKwordm9pZCBPcGVuTG9nRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBpbnQgY3JlYXRpb25fZmxhZ3MpIHsKKyAgU0JfRENIRUNLKChjcmVhdGlvbl9mbGFncyAmIGtTYkZpbGVPcGVuQWx3YXlzKSB8fAorICAgICAgICAgICAgKGNyZWF0aW9uX2ZsYWdzICYga1NiRmlsZUNyZWF0ZUFsd2F5cykpOworICBTQl9ETE9HKElORk8pIDw8ICJMb2dnaW5nIHRvIFsiIDw8IHBhdGggPDwgIl0iOworCisgIGludCBmbGFncyA9IGNyZWF0aW9uX2ZsYWdzIHwga1NiRmlsZVdyaXRlOworCisgIFNiTXV0ZXhBY3F1aXJlKCZsb2dfbXV0ZXgpOworICBDbG9zZUxvZ0ZpbGVXaXRob3V0TG9jaygpOworICBpZiAoKHBhdGggIT0gbnVsbHB0cikgJiYgKHBhdGhbMF0gIT0gJ1wwJykpIHsKKyAgICBsb2dfZmlsZSA9IFNiRmlsZU9wZW4ocGF0aCwgZmxhZ3MsIG51bGxwdHIsIG51bGxwdHIpOworICAgIFNCX0RDSEVDSyhTYkZpbGVJc1ZhbGlkKGxvZ19maWxlKSk7CisgIH0KKworICBTYk11dGV4UmVsZWFzZSgmbG9nX211dGV4KTsKK30KKwordm9pZCBXcml0ZVRvTG9nRmlsZShjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBpbnQgdGV4dF9sZW5ndGgpIHsKKyAgaWYgKHRleHRfbGVuZ3RoIDw9IDApIHsKKyAgICByZXR1cm47CisgIH0KKyAgU2JNdXRleEFjcXVpcmUoJmxvZ19tdXRleCk7CisgIGlmICghU2JGaWxlSXNWYWxpZChsb2dfZmlsZSkpIHsKKyAgICBTYk11dGV4UmVsZWFzZSgmbG9nX211dGV4KTsKKyAgICByZXR1cm47CisgIH0KKworICBpbnQgYnl0ZXNfd3JpdHRlbiA9IFNiRmlsZVdyaXRlQWxsKGxvZ19maWxlLCB0ZXh0LCB0ZXh0X2xlbmd0aCk7CisgIFNCX0RDSEVDSyh0ZXh0X2xlbmd0aCA9PSBieXRlc193cml0dGVuKTsKKworICBTYkZpbGVGbHVzaChsb2dfZmlsZSk7CisgIFNiTXV0ZXhSZWxlYXNlKCZsb2dfbXV0ZXgpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2ZpbGVfaW1wbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmlsZV9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhMTdhNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2ZpbGVfaW1wbC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gVGhpcyBoZWFkZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG11bHRpcGxlIEFuZHJvaWQgbG9nZ2luZworLy8gZm9ybWF0cyB0byBzaGFyZSBhIHNpbmdsZSBsb2cgZmlsZSBoYW5kbGUuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9MT0dfRklMRV9JTVBMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfTE9HX0ZJTEVfSU1QTF9IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9maWxlLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCisvLyBDbG9zZXMgdGhlIGxvZyBmaWxlLgordm9pZCBDbG9zZUxvZ0ZpbGUoKTsKKworLy8gT3BlbnMgYSBmaWxlIGluIHxrU2JTeXN0ZW1QYXRoQ2FjaGVEaXJlY3Rvcnl8IGRpcmVjdG9yeS4KKy8vIHxsb2dfZmlsZV9uYW1lfDogQy1zdHlsZSBzdHJpbmcgb2YgYSBmaWxlbmFtZQorLy8gfGNyZWF0aW9uX2ZsYWdzfDogTXVzdCBiZSBrU2JGaWxlQ3JlYXRlQWx3YXlzICh3aGljaCB3aWxsIHRydW5jYXRlIHRoZSBmaWxlKQorLy8gICB8a1NiRmlsZU9wZW5BbHdheXN8LCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBlbmQgdG8gdGhlIGZpbGUuCit2b2lkIE9wZW5Mb2dJbkNhY2hlRGlyZWN0b3J5KGNvbnN0IGNoYXIqIGxvZ19maWxlX25hbWUsIGludCBjcmVhdGlvbl9mbGFncyk7CisKKy8vIE9wZW5zIGEgZmlsZSBhdCB8bG9nX2ZpbGVfcGF0aHwgd2l0aCB8Y3JlYXRpb25fZmxhZ3N8LgorLy8gfGxvZ19maWxlX25hbWV8OiBDLXN0eWxlIHN0cmluZyBvZiBhIGZpbGVuYW1lCisvLyB8Y3JlYXRpb25fZmxhZ3N8OiBNdXN0IGJlIGtTYkZpbGVDcmVhdGVBbHdheXMgKHdoaWNoIHdpbGwgdHJ1bmNhdGUgdGhlIGZpbGUpCisvLyAgIHxrU2JGaWxlT3BlbkFsd2F5c3wsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGVuZCB0byB0aGUgZmlsZS4KK3ZvaWQgT3BlbkxvZ0ZpbGUoY29uc3QgY2hhciogbG9nX2ZpbGVfcGF0aCwgaW50IGNyZWF0aW9uX2ZsYWdzKTsKKworLy8gV3JpdGVzIHx0ZXh0X2xlbmd0aHwgYnl0ZXMgc3RhcnRpbmcgZnJvbSB8dGV4dHwgdG8gdGhlIGN1cnJlbnQgbG9nIGZpbGUuCit2b2lkIFdyaXRlVG9Mb2dGaWxlKGNvbnN0IGNoYXIqIHRleHQsIGNvbnN0IGludCB0ZXh0X2xlbmd0aCk7CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfTE9HX0ZJTEVfSU1QTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmx1c2guY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19mbHVzaC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzVhNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmx1c2guY2MKQEAgLTAsMCArMSwyMSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQgU2JMb2dGbHVzaCgpIHsKKyAgZmZsdXNoKHN0ZGVycik7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19mb3JtYXQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19mb3JtYXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1MjY2YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2Zvcm1hdC5jYwpAQCAtMCwwICsxLDE5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorCit2b2lkIFNiTG9nRm9ybWF0KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcmd1bWVudHMpIHsKKyAgU2JMb2dSYXdGb3JtYXQoZm9ybWF0LCBhcmd1bWVudHMpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfaXNfdHR5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfaXNfdHR5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiM2Y1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19pc190dHkuY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworYm9vbCBTYkxvZ0lzVHR5KCkgeworICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19yYXcuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19yYXcuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjM2VmZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX3Jhdy5jYwpAQCAtMCwwICsxLDMzIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL25ldF9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19maWxlX2ltcGwuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK3ZvaWQgU2JMb2dSYXcoY29uc3QgY2hhciogbWVzc2FnZSkgeworICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbWVzc2FnZSk7CisgIE91dHB1dERlYnVnU3RyaW5nQShtZXNzYWdlKTsKKyAgc2J3aW4zMjo6V3JpdGVUb0xvZ0ZpbGUoCisgICAgICBtZXNzYWdlLCBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihtZXNzYWdlKSkpOworCisgIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6Ok5ldExvZ1dyaXRlKG1lc3NhZ2UpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfcmF3X2R1bXBfc3RhY2suY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19yYXdfZHVtcF9zdGFjay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBhMjliCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfcmF3X2R1bXBfc3RhY2suY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKwordm9pZCBTYkxvZ1Jhd0R1bXBTdGFjayhpbnQgZnJhbWVzX3RvX3NraXApIHsKKyAgU2JMb2dSYXcoIlRPRE8gc3RhY2sgZHVtcCBub3QgaW1wbGVtZW50ZWRcbiIpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfcmF3X2Zvcm1hdC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX3Jhd19mb3JtYXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhZTY2NAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX3Jhd19mb3JtYXQuY2MKQEAgLTAsMCArMSwzNCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmlsZV9pbXBsLmgiCisKK3N0YXRpYyBjb25zdCBpbnQga01heExvZ0xpbmVDaGFycyA9IDE2ICogMTAyNDsKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK3ZvaWQgU2JMb2dSYXdGb3JtYXQoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3VtZW50cykgeworICBjaGFyIGxvZ19idWZmZXJba01heExvZ0xpbmVDaGFyc10gPSB7MH07CisgIGludCByZXN1bHQgPSB2c3ByaW50Zl9zKGxvZ19idWZmZXIsIGtNYXhMb2dMaW5lQ2hhcnMtMSwgZm9ybWF0LCBhcmd1bWVudHMpOworICBpZiAocmVzdWx0ID4gMCkgeworICAgIFNiTG9nUmF3KGxvZ19idWZmZXIpOworICB9IGVsc2UgeworICAgIFNiTG9nUmF3KCJbbG9nIGxpbmUgdG9vIGxvbmddIik7CisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfY29tbW9uLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ODQzYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfY29tbW9uLmNjCkBAIC0wLDAgKzEsMTA5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8TWZhcGkuaD4KKyNpbmNsdWRlIDxNZmVycm9yLmg+CisjaW5jbHVkZSA8TWZpZGwuaD4KKyNpbmNsdWRlIDxNZm9iamVjdHMuaD4KKyNpbmNsdWRlIDxScGMuaD4KKyNpbmNsdWRlIDxjb211dGlsLmg+CisjaW5jbHVkZSA8d3JsXGNsaWVudC5oPiAgLy8gRm9yIENvbVB0ci4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vcmVmX2NvdW50ZWQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lZGlhLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfY29tcG9uZW50cy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9pbnB1dF9idWZmZXJfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKKy8vIENvbnZlcnRzIG1pY3Jvc2Vjb25kcyB0byAxME1oeiAoMTAwbnMgdGltZSkuCitpbnQ2NF90IENvbnZlcnRUb1dpbjMyVGltZShTYlRpbWUgaW5wdXQpIHsKKyAgaW50NjRfdCBvdXQgPSBpbnB1dDsKKyAgb3V0ICo9IDEwOworICByZXR1cm4gb3V0OworfQorCisvLyBDb252ZXJ0IHRoZSBvdGhlciB3YXkgYXJvdW5kLgorU2JUaW1lIENvbnZlcnRUb1NiVGltZShpbnQ2NF90IGlucHV0KSB7CisgIFNiVGltZSBvdXQgPSBpbnB1dDsKKyAgb3V0IC89IDEwOworICByZXR1cm4gb3V0OworfQorCitzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gR2V0QWxsT3V0cHV0TWVkaWFUeXBlcygKKyAgICBpbnQgc3RyZWFtX2lkLAorICAgIElNRlRyYW5zZm9ybSogZGVjb2RlcikgeworICBzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gb3V0cHV0OworICBmb3IgKGludCBpbmRleCA9IDA7OyArK2luZGV4KSB7CisgICAgQ29tUHRyPElNRk1lZGlhVHlwZT4gbWVkaWFfdHlwZTsKKyAgICBIUkVTVUxUIGhyID0gZGVjb2Rlci0+R2V0T3V0cHV0QXZhaWxhYmxlVHlwZShzdHJlYW1faWQsIGluZGV4LCAmbWVkaWFfdHlwZSk7CisgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgIG91dHB1dC5wdXNoX2JhY2sobWVkaWFfdHlwZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIFNCX0RDSEVDSyhociA9PSBNRl9FX05PX01PUkVfVFlQRVMpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiBvdXRwdXQ7Cit9CisKK3N0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiBHZXRBbGxJbnB1dE1lZGlhVHlwZXMoCisgICAgaW50IHN0cmVhbV9pZCwKKyAgICBJTUZUcmFuc2Zvcm0qIHRyYW5zZm9ybSkgeworICBzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gaW5wdXRfdHlwZXM7CisKKyAgZm9yIChEV09SRCBpID0gMDs7ICsraSkgeworICAgIENvbVB0cjxJTUZNZWRpYVR5cGU+IGN1cnJfdHlwZTsKKyAgICBIUkVTVUxUIGhyID0gdHJhbnNmb3JtLT5HZXRJbnB1dEF2YWlsYWJsZVR5cGUoc3RyZWFtX2lkLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3R5cGUuR2V0QWRkcmVzc09mKCkpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgaW5wdXRfdHlwZXMucHVzaF9iYWNrKGN1cnJfdHlwZSk7CisgIH0KKyAgcmV0dXJuIGlucHV0X3R5cGVzOworfQorCitzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gRmlsdGVyTWVkaWFCeVN1YlR5cGUoCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Q29tUHRyPElNRk1lZGlhVHlwZT4+JiBpbnB1dCwKKyAgICBHVUlEIHN1Yl90eXBlX2ZpbHRlcikgeworICBzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gb3V0cHV0OworICBmb3IgKGF1dG8gaXQgPSBpbnB1dC5iZWdpbigpOyBpdCAhPSBpbnB1dC5lbmQoKTsgKytpdCkgeworICAgIENvbVB0cjxJTUZNZWRpYVR5cGU+IG1lZGlhX3R5cGUgPSAqaXQ7CisgICAgR1VJRCBtZWRpYV9zdWJfdHlwZSA9IHswfTsKKyAgICBtZWRpYV90eXBlLT5HZXRHVUlEKE1GX01UX1NVQlRZUEUsICZtZWRpYV9zdWJfdHlwZSk7CisgICAgaWYgKElzRXF1YWxHVUlEKG1lZGlhX3N1Yl90eXBlLCBzdWJfdHlwZV9maWx0ZXIpKSB7CisgICAgICBvdXRwdXQucHVzaF9iYWNrKG1lZGlhX3R5cGUpOworICAgIH0KKyAgfQorICByZXR1cm4gb3V0cHV0OworfQorCitIUkVTVUxUIENyZWF0ZURlY29kZXJUcmFuc2Zvcm0oY29uc3QgR1VJRCYgZGVjb2Rlcl9ndWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbVB0cjxJTUZUcmFuc2Zvcm0+KiB0cmFuc2Zvcm0pIHsKKyAgcmV0dXJuIENvQ3JlYXRlSW5zdGFuY2UoZGVjb2Rlcl9ndWlkLCBOVUxMLCBDTFNDVFhfSU5QUk9DX1NFUlZFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSUlEX1BQVl9BUkdTKHRyYW5zZm9ybS0+R2V0QWRkcmVzc09mKCkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2NvbW1vbi5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNlZGZiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaApAQCAtMCwwICsxLDc2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9NRURJQV9DT01NT05fSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9NRURJQV9DT01NT05fSF8KKworI2luY2x1ZGUgPEQzRDExLmg+CisjaW5jbHVkZSA8TWZhcGkuaD4KKyNpbmNsdWRlIDxNZmVycm9yLmg+CisjaW5jbHVkZSA8TWZpZGwuaD4KKyNpbmNsdWRlIDxNZm9iamVjdHMuaD4KKyNpbmNsdWRlIDxScGMuaD4KKyNpbmNsdWRlIDxjb211dGlsLmg+CisjaW5jbHVkZSA8d3JsXGNsaWVudC5oPiAgLy8gRm9yIENvbVB0ci4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbXV0ZXguaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvcGxheWVyX2NvbXBvbmVudHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX2ZyYW1lX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2lucHV0X2J1ZmZlcl9pbnRlcm5hbC5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKwordXNpbmcgRGVjb2RlZEF1ZGlvID0gOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpwbGF5ZXI6OkRlY29kZWRBdWRpbzsKK3VzaW5nIERlY29kZWRBdWRpb1B0ciA9IDo6c3RhcmJvYXJkOjpzY29wZWRfcmVmcHRyPERlY29kZWRBdWRpbz47Cit1c2luZyBJbnB1dEJ1ZmZlciA9IDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpJbnB1dEJ1ZmZlcjsKK3VzaW5nIFBsYXllckNvbXBvbmVudHMgPQorICAgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpmaWx0ZXI6OlBsYXllckNvbXBvbmVudHM7Cit1c2luZyBTdGF0dXMgPQorICAgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpmaWx0ZXI6OlZpZGVvRGVjb2Rlcjo6U3RhdHVzOwordXNpbmcgVmlkZW9GcmFtZSA9IDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6cGxheWVyOjpmaWx0ZXI6OlZpZGVvRnJhbWU7Cit1c2luZyBWaWRlb0ZyYW1lUHRyID0gOjpzdGFyYm9hcmQ6OnNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT47Cit1c2luZyBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyOworCisvLyBDb252ZXJ0cyBtaWNyb3NlY29uZHMgdG8gMTBNaHogKDEwMG5zIHRpbWUpLgoraW50NjRfdCBDb252ZXJ0VG9XaW4zMlRpbWUoU2JUaW1lIGlucHV0KTsKKworLy8gQ29udmVydCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KK1NiVGltZSBDb252ZXJ0VG9TYlRpbWUoaW50NjRfdCBpbnB1dCk7CisKK3N0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiBHZXRBbGxPdXRwdXRNZWRpYVR5cGVzKGludCBzdHJlYW1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUZUcmFuc2Zvcm0qIGRlY29kZXIpOworc3RkOjp2ZWN0b3I8Q29tUHRyPElNRk1lZGlhVHlwZT4+IEdldEFsbElucHV0TWVkaWFUeXBlcygKKyAgICBpbnQgc3RyZWFtX2lkLAorICAgIElNRlRyYW5zZm9ybSogdHJhbnNmb3JtKTsKKworc3RkOjp2ZWN0b3I8Q29tUHRyPElNRk1lZGlhVHlwZT4+IEZpbHRlck1lZGlhQnlTdWJUeXBlKAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiYgaW5wdXQsCisgICAgR1VJRCBzdWJfdHlwZV9maWx0ZXIpOworCitIUkVTVUxUIENyZWF0ZURlY29kZXJUcmFuc2Zvcm0oY29uc3QgR1VJRCYgZGVjb2Rlcl9ndWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbVB0cjxJTUZUcmFuc2Zvcm0+KiB0cmFuc2Zvcm0pOworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX01FRElBX0NPTU1PTl9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9mb3VuZGF0aW9uX3V0aWxzLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9mb3VuZGF0aW9uX3V0aWxzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmIzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuY2MKQEAgLTAsMCArMSwyNzIgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfZm91bmRhdGlvbl91dGlscy5oIgorCisjaW5jbHVkZSA8TWZhcGkuaD4KKyNpbmNsdWRlIDxNZmVycm9yLmg+CisjaW5jbHVkZSA8cHJvcHZhcnV0aWwuaD4KKworI2luY2x1ZGUgPGlvcz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCituYW1lc3BhY2UgeworCisjZGVmaW5lIE1BS0VfR1VJRF9QQUlSKFgpIHN0ZDo6cGFpcjxHVUlELCBzdGQ6OnN0cmluZz4oWCwgI1gpCisKK2NvbnN0IHN0ZDo6cGFpcjxHVUlELCBzdGQ6OnN0cmluZz4ga01mTXRBdWRpb1tdID0geworICBNQUtFX0dVSURfUEFJUihNRl9NVF9BQUNfUEFZTE9BRF9UWVBFKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZfTVRfQVVESU9fQVZHX0JZVEVTX1BFUl9TRUNPTkQpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19CSVRTX1BFUl9TQU1QTEUpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19CTE9DS19BTElHTk1FTlQpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19DSEFOTkVMX01BU0spLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19GTE9BVF9TQU1QTEVTX1BFUl9TRUNPTkQpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19OVU1fQ0hBTk5FTFMpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19TQU1QTEVTX1BFUl9CTE9DSyksCisgIE1BS0VfR1VJRF9QQUlSKE1GX01UX0FVRElPX1NBTVBMRVNfUEVSX1NFQ09ORCksCisgIE1BS0VfR1VJRF9QQUlSKE1GX01UX0FVRElPX05VTV9DSEFOTkVMUyksCisgIE1BS0VfR1VJRF9QQUlSKE1GX01UX01BSk9SX1RZUEUpLAorICBNQUtFX0dVSURfUEFJUihNRl9NVF9BVURJT19QUkVGRVJfV0FWRUZPUk1BVEVYKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZfTVRfVVNFUl9EQVRBKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZfTVRfU1VCVFlQRSksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfQUFDKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9BRFRTKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9BTEFDKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9BTVJfTkIpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X0FNUl9XQiksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfQU1SX1dQKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9Eb2xieV9BQzMpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X0RvbGJ5X0FDM19TUERJRiksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfRG9sYnlfRERQbHVzKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9EUk0pLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X0RUUyksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfRkxBQyksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfRmxvYXQpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X0Zsb2F0X1NwYXRpYWxPYmplY3RzKSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9NUDMpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X01QRUcpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X01TUDEpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X09wdXMpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X1BDTSksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfV01BU1BESUYpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X1dNQXVkaW9fTG9zc2xlc3MpLAorICBNQUtFX0dVSURfUEFJUihNRkF1ZGlvRm9ybWF0X1dNQXVkaW9WOCksCisgIE1BS0VfR1VJRF9QQUlSKE1GQXVkaW9Gb3JtYXRfV01BdWRpb1Y5KSwKKyAgTUFLRV9HVUlEX1BBSVIoTUZBdWRpb0Zvcm1hdF9XTUF1ZGlvVjkpLAorICBNQUtFX0dVSURfUEFJUihNRk1lZGlhVHlwZV9BdWRpbyksCit9OworI3VuZGVmIE1BS0VfR1VJRF9QQUlSCisKK3N0ZDo6c3RyaW5nIEd1aWRUb0ZhbGxiYWNrU3RyaW5nKEdVSUQgZ3VpZCkgeworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgd2NoYXJfdCogZ3VpZF9zdHIgPSBudWxscHRyOworICBTdHJpbmdGcm9tQ0xTSUQoZ3VpZCwgJmd1aWRfc3RyKTsKKyAgc3MgPDwgZ3VpZF9zdHI7CisgIENvVGFza01lbUZyZWUoZ3VpZF9zdHIpOworICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK3N0ZDo6c3RyaW5nIE1mR3VpZFRvU3RyaW5nKEdVSUQgZ3VpZCkgeworICBjb25zdCBzaXplX3QgbiA9IHNpemVvZihrTWZNdEF1ZGlvKSAvIHNpemVvZigqa01mTXRBdWRpbyk7CisgIGZvciAoYXV0byBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGNvbnN0IGF1dG8mIGVsZW1zID0ga01mTXRBdWRpb1tpXTsKKyAgICBpZiAoZ3VpZCA9PSBlbGVtcy5maXJzdCkgeworICAgICAgcmV0dXJuIGVsZW1zLnNlY29uZDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIEd1aWRUb0ZhbGxiYWNrU3RyaW5nKGd1aWQpOworfQorCitzdGQ6OnN0cmluZyBJbWZBdHRyaWJ1dGVzVG9TdHJpbmcoSU1GQXR0cmlidXRlcyogdHlwZSkgeworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgVUlOVDMyIG4gPSAwOworICBIUkVTVUxUIGhyID0gdHlwZS0+R2V0Q291bnQoJm4pOworICBDaGVja1Jlc3VsdChocik7CisgIGZvciAoVUlOVDMyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgR1VJRCBrZXk7CisgICAgUFJPUFZBUklBTlQgdmFsOworICAgIHR5cGUtPkdldEl0ZW1CeUluZGV4KGksICZrZXksICZ2YWwpOworICAgIFByb3BWYXJpYW50Q2xlYXIoJnZhbCk7CisKKyAgICBNRl9BVFRSSUJVVEVfVFlQRSBhdHRyaWJfdHlwZTsKKyAgICBociA9IHR5cGUtPkdldEl0ZW1UeXBlKGtleSwgJmF0dHJpYl90eXBlKTsKKyAgICBDaGVja1Jlc3VsdChocik7CisKKyAgICBzdGQ6OnN0cmluZyBrZXlfc3RyID0gTWZHdWlkVG9TdHJpbmcoa2V5KTsKKyAgICBzcyA8PCBrZXlfc3RyIDw8ICI6ICI7CisKKyAgICBzd2l0Y2ggKGF0dHJpYl90eXBlKSB7CisgICAgICBjYXNlIE1GX0FUVFJJQlVURV9HVUlEOiB7CisgICAgICAgIEdVSUQgdmFsdWVfZ3VpZDsKKyAgICAgICAgaHIgPSB0eXBlLT5HZXRHVUlEKGtleSwgJnZhbHVlX2d1aWQpOworICAgICAgICBzcyA8PCBNZkd1aWRUb1N0cmluZyh2YWx1ZV9ndWlkKSA8PCAiXG4iOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfRE9VQkxFOiB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisgICAgICAgIGhyID0gdHlwZS0+R2V0RG91YmxlKGtleSwgJnZhbHVlKTsKKyAgICAgICAgc3MgPDwgdmFsdWUgPDwgIlxuIjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTUZfQVRUUklCVVRFX0JMT0I6IHsKKyAgICAgICAgLy8gU2tpcC4KKyAgICAgICAgc3MgPDwgIjxCTE9CPiIgPDwgIlxuIjsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTUZfQVRUUklCVVRFX1VJTlQzMjogeworICAgICAgICBVSU5UMzIgaW50X3ZhbCA9IDA7CisgICAgICAgIGhyID0gdHlwZS0+R2V0VUlOVDMyKGtleSwgJmludF92YWwpOworICAgICAgICBzcyA8PCBpbnRfdmFsIDw8ICJcbiI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBjYXNlIE1GX0FUVFJJQlVURV9VSU5UNjQ6IHsKKyAgICAgICAgVUlOVDY0IGludF92YWwgPSAwOworICAgICAgICBociA9IHR5cGUtPkdldFVJTlQ2NChrZXksICZpbnRfdmFsKTsKKyAgICAgICAgc3MgPDwgaW50X3ZhbCA8PCAiXG4iOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfU1RSSU5HOiB7CisgICAgICAgIFVJTlQzMiBsZW5ndGggPSAwOworICAgICAgICBociA9IHR5cGUtPkdldFN0cmluZ0xlbmd0aChrZXksICZsZW5ndGgpOworICAgICAgICBDaGVja1Jlc3VsdChocik7CisgICAgICAgICsrbGVuZ3RoOyAgLy8gRm9yIHRyYWlsaW5nIDAuCisgICAgICAgIHN0ZDo6dmVjdG9yPHdjaGFyX3Q+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBociA9IHR5cGUtPkdldFN0cmluZyhrZXksIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgTlVMTCk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgc3MgPDwgYnVmZmVyLmRhdGEoKSA8PCAiXG4iOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfSVVOS05PV046IHsKKyAgICAgICAgU0JfTk9USU1QTEVNRU5URUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisgIHNzIDw8ICJcbiI7CisgIHJldHVybiBzcy5zdHIoKTsKK30KKworfSAgLy8gbmFtZXNwYWNlLgorCit2b2lkIENvcHlQcm9wZXJ0aWVzKElNRk1lZGlhVHlwZSogc291cmNlLCBJTUZNZWRpYVR5cGUqIGRlc3RpbmF0aW9uKSB7CisgIFVJTlQzMiBhdHRyaWJ1dGVfY291bnQgPSAwOworICBIUkVTVUxUIGhyID0gc291cmNlLT5HZXRDb3VudCgmYXR0cmlidXRlX2NvdW50KTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworICBmb3IgKFVJTlQzMiBpID0gMDsgaSA8IGF0dHJpYnV0ZV9jb3VudDsgKytpKSB7CisgICAgR1VJRCBrZXk7CisgICAgUFJPUFZBUklBTlQgdmFyaWFudDsKKyAgICBociA9IHNvdXJjZS0+R2V0SXRlbUJ5SW5kZXgoaSwgJmtleSwgJnZhcmlhbnQpOworICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICBQcm9wVmFyaWFudENsZWFyKCZ2YXJpYW50KTsKKworICAgIE1GX0FUVFJJQlVURV9UWVBFIGF0dHJpYl90eXBlOworICAgIGhyID0gc291cmNlLT5HZXRJdGVtVHlwZShrZXksICZhdHRyaWJfdHlwZSk7CisgICAgQ2hlY2tSZXN1bHQoaHIpOworCisgICAgc3dpdGNoIChhdHRyaWJfdHlwZSkgeworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfR1VJRDogeworICAgICAgICBHVUlEIHZhbHVlX2d1aWQ7CisgICAgICAgIGhyID0gc291cmNlLT5HZXRHVUlEKGtleSwgJnZhbHVlX2d1aWQpOworICAgICAgICBDaGVja1Jlc3VsdChocik7CisgICAgICAgIGhyID0gZGVzdGluYXRpb24tPlNldEdVSUQoa2V5LCB2YWx1ZV9ndWlkKTsKKyAgICAgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfRE9VQkxFOiB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IDA7CisgICAgICAgIGhyID0gc291cmNlLT5HZXREb3VibGUoa2V5LCAmdmFsdWUpOworICAgICAgICBDaGVja1Jlc3VsdChocik7CisgICAgICAgIGhyID0gZGVzdGluYXRpb24tPlNldERvdWJsZShrZXksIHZhbHVlKTsKKyAgICAgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfQkxPQjogeworICAgICAgICBVSU5UMzIgYmxvYl9zaXplID0gMDsKKyAgICAgICAgaHIgPSBzb3VyY2UtPkdldEJsb2JTaXplKGtleSwgJmJsb2Jfc2l6ZSk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VUlOVDg+IGJsb2IoYmxvYl9zaXplKTsKKyAgICAgICAgaHIgPSBzb3VyY2UtPkdldEJsb2Ioa2V5LCBibG9iLmRhdGEoKSwgYmxvYl9zaXplLCAmYmxvYl9zaXplKTsKKyAgICAgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgICAgICBociA9IGRlc3RpbmF0aW9uLT5TZXRCbG9iKGtleSwgYmxvYi5kYXRhKCksIGJsb2Jfc2l6ZSk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTUZfQVRUUklCVVRFX1VJTlQzMjogeworICAgICAgICBVSU5UMzIgaW50X3ZhbCA9IDA7CisgICAgICAgIGhyID0gc291cmNlLT5HZXRVSU5UMzIoa2V5LCAmaW50X3ZhbCk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgaHIgPSBkZXN0aW5hdGlvbi0+U2V0VUlOVDMyKGtleSwgaW50X3ZhbCk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTUZfQVRUUklCVVRFX1VJTlQ2NDogeworICAgICAgICBVSU5UNjQgaW50X3ZhbCA9IDA7CisgICAgICAgIGhyID0gc291cmNlLT5HZXRVSU5UNjQoa2V5LCAmaW50X3ZhbCk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgaHIgPSBkZXN0aW5hdGlvbi0+U2V0VUlOVDY0KGtleSwgaW50X3ZhbCk7CisgICAgICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAgIGNhc2UgTUZfQVRUUklCVVRFX1NUUklORzogeworICAgICAgICBVSU5UMzIgbGVuZ3RoID0gMDsKKyAgICAgICAgaHIgPSBzb3VyY2UtPkdldFN0cmluZ0xlbmd0aChrZXksICZsZW5ndGgpOworICAgICAgICBDaGVja1Jlc3VsdChocik7CisgICAgICAgICsrbGVuZ3RoOyAgLy8gRm9yIHRyYWlsaW5nIDAuCisgICAgICAgIHN0ZDo6dmVjdG9yPHdjaGFyX3Q+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBociA9IHNvdXJjZS0+R2V0U3RyaW5nKGtleSwgYnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBOVUxMKTsKKyAgICAgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgICAgICBociA9IGRlc3RpbmF0aW9uLT5TZXRTdHJpbmcoa2V5LCBidWZmZXIuZGF0YSgpKTsKKyAgICAgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgY2FzZSBNRl9BVFRSSUJVVEVfSVVOS05PV046IHsKKyAgICAgICAgU0JfTk9USU1QTEVNRU5URUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBJTUZNZWRpYVR5cGUmIG1lZGlhX3R5cGUpIHsKKyAgY29uc3QgSU1GQXR0cmlidXRlcyogYXR0cmlicyA9ICZtZWRpYV90eXBlOyAgLy8gVXBjYXN0LgorICBzdGQ6OnN0cmluZyBvdXRwdXRfc3RyID0KKyAgICAgIEltZkF0dHJpYnV0ZXNUb1N0cmluZyhjb25zdF9jYXN0PElNRkF0dHJpYnV0ZXMqPihhdHRyaWJzKSk7CisgIG9zIDw8IG91dHB1dF9zdHI7CisgIHJldHVybiBvczsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfZm91bmRhdGlvbl91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuaApAQCAtMCwwICsxLDM3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlIDx3cmwvY2xpZW50Lmg+CisjaW5jbHVkZSA8TWZvYmplY3RzLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9NRURJQV9GT1VOREFUSU9OX1VUSUxTX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfTUVESUFfRk9VTkRBVElPTl9VVElMU19IXworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IElNRk1lZGlhVHlwZSYgbWVkaWFfdHlwZSk7CisKK3N0ZDo6c3RyaW5nIFRvU3RyaW5nKElNRkF0dHJpYnV0ZXMqIHR5cGUpOworCit2b2lkIENvcHlQcm9wZXJ0aWVzKElNRk1lZGlhVHlwZSogc291cmNlLCBJTUZNZWRpYVR5cGUqIGRlc3RpbmF0aW9uKTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9NRURJQV9GT1VOREFUSU9OX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTE5MjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9nZXRfbWF4X2J1ZmZlcl9jYXBhY2l0eS5jYwpAQCAtMCwwICsxLDI1IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworaW50IFNiTWVkaWFHZXRNYXhCdWZmZXJDYXBhY2l0eShTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc29sdXRpb25fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvbHV0aW9uX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHNfcGVyX3BpeGVsKSB7CisgIC8vIFRPRE86IHJlZmluZSB0aGlzIHRvIGEgbW9yZSByZWFzb25hYmxlIHZhbHVlLCB0YWtpbmcgaW50byBhY2NvdW50CisgIC8vIHJlc29sdXRpb24uIE9uIG1vc3QgcGxhdGZvcm1zIHRoaXMgaXMgMzYgKiAxMDI0ICogMTAyNCBmb3IgMTA4MHAsIGFuZAorICAvLyA2NSAqIDEwMjQgKiAxMDI0IGZvciA0ay4KKyAgcmV0dXJuIDUwMCAqIDEwMjQgKiAxMDI0OworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2lzX2F1ZGlvX3N1cHBvcnRlZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWM5OWYzCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MKQEAgLTAsMCArMSwyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworYm9vbCBTYk1lZGlhSXNBdWRpb1N1cHBvcnRlZChTYk1lZGlhQXVkaW9Db2RlYyBhdWRpb19jb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29udGVudF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUpIHsKKyAgaWYgKGF1ZGlvX2NvZGVjICE9IGtTYk1lZGlhQXVkaW9Db2RlY0FhYyAmJgorICAgICAgYXVkaW9fY29kZWMgIT0ga1NiTWVkaWFBdWRpb0NvZGVjT3B1cykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gYml0cmF0ZSA8PSBrU2JNZWRpYU1heEF1ZGlvQml0cmF0ZUluQml0c1BlclNlY29uZDsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9pc19zdXBwb3J0ZWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxODBiNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjCkBAIC0wLDAgKzEsMjggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX3N1cHBvcnRfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmgiCisKK2Jvb2wgU2JNZWRpYUlzU3VwcG9ydGVkKFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYUF1ZGlvQ29kZWMgYXVkaW9fY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXlfc3lzdGVtKSB7CisgIHVzaW5nIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpEcm1TeXN0ZW1QbGF5cmVhZHk7CisKKyAgcmV0dXJuIERybVN5c3RlbVBsYXlyZWFkeTo6SXNLZXlTeXN0ZW1TdXBwb3J0ZWQoa2V5X3N5c3RlbSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfaXNfdmlkZW9fc3VwcG9ydGVkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNDliNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYwpAQCAtMCwwICsxLDE0OCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfc3VwcG9ydF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8ZDNkMTEuaD4KKyNpbmNsdWRlIDxtZmFwaS5oPgorI2luY2x1ZGUgPG1maWRsLmg+CisjaW5jbHVkZSA8d3JsL2NsaWVudC5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfdXRpbC5oIgorCituYW1lc3BhY2UgeworCisjaWYgU0JfQVBJX1ZFUlNJT04gPj0gU0JfUlVOVElNRV9DT05GSUdTX1ZFUlNJT04gfHwgXAorICAgIGRlZmluZWQoU0JfSEFTX01FRElBX1dFQk1fVlA5X1NVUFBPUlQpCisvLyBDYWNoZSB0aGUgVlA5IHN1cHBvcnQgc3RhdHVzIHNpbmNlIHRoZSBjaGVjayBtYXkgYmUgZXhwZW5zaXZlLgorZW51bSBWcDlTdXBwb3J0IHsKKyAga1ZwOVN1cHBvcnRVbmtub3duLAorICBrVnA5U3VwcG9ydFllcywKKyAga1ZwOVN1cHBvcnRObworfTsKK1ZwOVN1cHBvcnQgc192cDlfc3VwcG9ydCA9IGtWcDlTdXBwb3J0VW5rbm93bjsKKworLy8gQ2hlY2sgZm9yIFZQOSBzdXBwb3J0LiBTaW5jZSB0aGlzIGlzIHVzZWQgYnkgYSBzdGFyYm9hcmQgZnVuY3Rpb24sIGl0CisvLyBjYW5ub3QgZGVwZW5kIG9uIG90aGVyIG1vZHVsZXMgKGUuZy4gQU5HTEUpLgorYm9vbCBJc1ZwOVN1cHBvcnRlZCgpIHsKKyAgaWYgKCFrU2JIYXNNZWRpYVdlYm1WcDlTdXBwb3J0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKHNfdnA5X3N1cHBvcnQgPT0ga1ZwOVN1cHBvcnRVbmtub3duKSB7CisgICAgLy8gVHJ5IGluaXRpYWxpemluZyB0aGUgVlA5IGRlY29kZXIgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHN1cHBvcnRlZC4KKyAgICBIUkVTVUxUIGhyOworCisgICAgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJRDNEMTFEZXZpY2U+IGQzZF9kZXZpY2U7CisgICAgaHIgPSBEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzZF9kZXZpY2UuR2V0QWRkcmVzc09mKCksIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgVUlOVCByZXNldF90b2tlbiA9IDA7CisgICAgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZEWEdJRGV2aWNlTWFuYWdlcj4gZGV2aWNlX21hbmFnZXI7CisgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgIGhyID0gTUZDcmVhdGVEWEdJRGV2aWNlTWFuYWdlcigmcmVzZXRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlX21hbmFnZXIuR2V0QWRkcmVzc09mKCkpOworICAgIH0KKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgaHIgPSBkZXZpY2VfbWFuYWdlci0+UmVzZXREZXZpY2UoZDNkX2RldmljZS5HZXQoKSwgcmVzZXRfdG9rZW4pOworICAgIH0KKworICAgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GVHJhbnNmb3JtPiB0cmFuc2Zvcm07CisgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgIGhyID0gQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9NU1ZQeERlY29kZXIsIG51bGxwdHIsIENMU0NUWF9JTlBST0NfU0VSVkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElJRF9QUFZfQVJHUyh0cmFuc2Zvcm0uR2V0QWRkcmVzc09mKCkpKTsKKyAgICB9CisKKyAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgaHIgPSB0cmFuc2Zvcm0tPlByb2Nlc3NNZXNzYWdlKE1GVF9NRVNTQUdFX1NFVF9EM0RfTUFOQUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR19QVFIoZGV2aWNlX21hbmFnZXIuR2V0KCkpKTsKKyAgICB9CisKKyAgICBzX3ZwOV9zdXBwb3J0ID0gU1VDQ0VFREVEKGhyKSA/IGtWcDlTdXBwb3J0WWVzIDoga1ZwOVN1cHBvcnRObzsKKyAgfQorICByZXR1cm4gc192cDlfc3VwcG9ydCA9PSBrVnA5U3VwcG9ydFllczsKK30KKyNlbHNlICAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfUlVOVElNRV9DT05GSUdTX1ZFUlNJT04gfHwKKyAgICAgICAgLy8gZGVmaW5lZChTQl9IQVNfTUVESUFfV0VCTV9WUDlfU1VQUE9SVCkKK2Jvb2wgSXNWcDlTdXBwb3J0ZWQoKSB7CisgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gU0JfUlVOVElNRV9DT05GSUdTX1ZFUlNJT04gfHwKKyAgICAgICAgLy8gZGVmaW5lZChTQl9IQVNfTUVESUFfV0VCTV9WUDlfU1VQUE9SVCkKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgU2JNZWRpYUlzVmlkZW9TdXBwb3J0ZWQoU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdF9kZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYVByaW1hcnlJZCBwcmltYXJ5X2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVHJhbnNmZXJJZCB0cmFuc2Zlcl9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYU1hdHJpeElkIG1hdHJpeF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYW1lX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhbWVfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGJpdHJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVjb2RlX3RvX3RleHR1cmVfcmVxdWlyZWQpIHsKKyAgLy8gV2luMzIgcGxhdGZvcm1zIHVzZSBkZWNvZGUtdG8tdGV4dHVyZSBieSBkZWZhdWx0IHNvIHRoZXJlIGlzIG5vIHNwZWNpYWwKKyAgLy8gY29uc3RyYWludHMgaWYgZGVjb2RlLXRvLXRleHR1cmUgc3VwcG9ydCBpcyBzcGVjaWZpY2FsbHkgcmVxdWlyZWQuCisKKyAgaW50IG1heF93aWR0aCA9IDE5MjA7CisgIGludCBtYXhfaGVpZ2h0ID0gMTA4MDsKKworICBpZiAodmlkZW9fY29kZWMgPT0ga1NiTWVkaWFWaWRlb0NvZGVjVnA5KSB7CisgICAgLy8gVnA5IHN1cHBvcnRzIDhrIG9ubHkgaW4gd2hpdGVsaXN0ZWQgcGxhdGZvcm1zLCB1cCB0byA0ayBpbiB0aGUgb3RoZXJzLgorI2lmZGVmIEVOQUJMRV9WUDlfOEtfU1VQUE9SVAorICAgIG1heF93aWR0aCA9IDc2ODA7CisgICAgbWF4X2hlaWdodCA9IDQzMjA7CisjZWxzZSAgLy8gRU5BQkxFX1ZQOV84S19TVVBQT1JUCisgICAgbWF4X3dpZHRoID0gMzg0MDsKKyAgICBtYXhfaGVpZ2h0ID0gMjE2MDsKKyNlbmRpZiAgLy8gRU5BQkxFX1ZQOV84S19TVVBQT1JUCisgIH0gZWxzZSBpZiAodmlkZW9fY29kZWMgPT0ga1NiTWVkaWFWaWRlb0NvZGVjSDI2NCkgeworICAgIC8vIE5vdCBhbGwgZGV2aWNlcyBjYW4gc3VwcG9ydCA0ayBIMjY0OyBzb21lIChlLmcuIHhiMSkgbWF5IGNyYXNoIGluCisgICAgLy8gdGhlIGRlY29kZXIgaWYgcHJvdmlkZWQgdG9vIGhpZ2ggb2YgYSByZXNvbHV0aW9uLiBUaGVyZWZvcmUKKyAgICAvLyBwbGF0Zm9ybXMgbXVzdCBleHBsaWNpdGx5IG9wdC1pbiB0byBzdXBwb3J0IDRrIEgyNjQuCisjaWZkZWYgRU5BQkxFX0gyNjRfNEtfU1VQUE9SVAorICAgIG1heF93aWR0aCA9IDM4NDA7CisgICAgbWF4X2hlaWdodCA9IDIxNjA7CisjZW5kaWYgIC8vIEVOQUJMRV9IMjY0XzRLX1NVUFBPUlQKKyAgfQorCisgIGlmIChmcmFtZV93aWR0aCA+IG1heF93aWR0aCB8fCBmcmFtZV9oZWlnaHQgPiBtYXhfaGVpZ2h0KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gSXMgYml0cmF0ZSBpbiByYW5nZT8KKyAgaWYgKGJpdHJhdGUgPiBrU2JNZWRpYU1heFZpZGVvQml0cmF0ZUluQml0c1BlclNlY29uZCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoZnBzID4gNjApIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgdXNpbmcgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjptZWRpYTo6SXNTRFJWaWRlbzsKKyAgaWYgKCFJc1NEUlZpZGVvKGJpdF9kZXB0aCwgcHJpbWFyeV9pZCwgdHJhbnNmZXJfaWQsIG1hdHJpeF9pZCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKHZpZGVvX2NvZGVjID09IGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBpZiAodmlkZW9fY29kZWMgPT0ga1NiTWVkaWFWaWRlb0NvZGVjVnA5KSB7CisgICAgcmV0dXJuIElzVnA5U3VwcG9ydGVkKCk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV90cmFuc2Zvcm0uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX3RyYW5zZm9ybS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI0MjMxCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV90cmFuc2Zvcm0uY2MKQEAgLTAsMCArMSwzNzkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfdHJhbnNmb3JtLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fdHJhbnNmb3JtLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfY29tbW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9mb3VuZGF0aW9uX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCit1c2luZyBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyOwordXNpbmcgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpUaHJlYWRDaGVja2VyOworCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgUmVsZWFzZUlmTm90TnVsbChUKiogcHRyKSB7CisgIGlmICgqcHRyKSB7CisgICAgKCpwdHIpLT5SZWxlYXNlKCk7CisgICAgKnB0ciA9IE5VTEw7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlCisKK01lZGlhVHJhbnNmb3JtOjpNZWRpYVRyYW5zZm9ybShDTFNJRCBjbHNpZCkKKyAgICA6IHRocmVhZF9jaGVja2VyXyhUaHJlYWRDaGVja2VyOjprU2V0VGhyZWFkSWRPbkZpcnN0Q2hlY2spLAorICAgICAgc3RhdGVfKGtDYW5BY2NlcHRJbnB1dCksCisgICAgICBzdHJlYW1fYmVndW5fKGZhbHNlKSwKKyAgICAgIGRpc2NvbnRpbnVpdHlfKHRydWUpLAorICAgICAgdGhyb3R0bGVfaW5wdXRzXyhmYWxzZSkgeworICB0cmFuc2Zvcm1fID0gbnVsbHB0cjsKKyAgSFJFU1VMVCBociA9IENyZWF0ZURlY29kZXJUcmFuc2Zvcm0oY2xzaWQsICZ0cmFuc2Zvcm1fKTsKKyAgaWYgKEZBSUxFRChocikgfHwgIXRyYW5zZm9ybV8pIHsKKyAgICB0cmFuc2Zvcm1fID0gbnVsbHB0cjsKKyAgICBzdGF0ZV8gPSBrRHJhaW5lZDsKKyAgfQorfQorCitNZWRpYVRyYW5zZm9ybTo6TWVkaWFUcmFuc2Zvcm0oCisgICAgY29uc3QgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZUcmFuc2Zvcm0+JiB0cmFuc2Zvcm0pCisgICAgOiB0cmFuc2Zvcm1fKHRyYW5zZm9ybSksCisgICAgICB0aHJlYWRfY2hlY2tlcl8oVGhyZWFkQ2hlY2tlcjo6a1NldFRocmVhZElkT25GaXJzdENoZWNrKSwKKyAgICAgIHN0YXRlXyhrQ2FuQWNjZXB0SW5wdXQpLAorICAgICAgc3RyZWFtX2JlZ3VuXyhmYWxzZSksCisgICAgICBkaXNjb250aW51aXR5Xyh0cnVlKSwKKyAgICAgIHRocm90dGxlX2lucHV0c18oZmFsc2UpIHsKKyAgU0JfRENIRUNLKHRyYW5zZm9ybV8pOworfQorCitib29sIE1lZGlhVHJhbnNmb3JtOjpUcnlXcml0ZShjb25zdCBDb21QdHI8SU1GU2FtcGxlPiYgaW5wdXQpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgIGlmIChzdGF0ZV8gIT0ga0NhbkFjY2VwdElucHV0IHx8ICF0cmFuc2Zvcm1fKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCFzdHJlYW1fYmVndW5fKSB7CisgICAgU2VuZE1lc3NhZ2UoTUZUX01FU1NBR0VfTk9USUZZX0JFR0lOX1NUUkVBTUlORyk7CisgICAgU2VuZE1lc3NhZ2UoTUZUX01FU1NBR0VfTk9USUZZX1NUQVJUX09GX1NUUkVBTSk7CisgICAgc3RyZWFtX2JlZ3VuXyA9IHRydWU7CisgIH0KKworICBIUkVTVUxUIGhyID0gdHJhbnNmb3JtXy0+UHJvY2Vzc0lucHV0KGtTdHJlYW1JZCwgaW5wdXQuR2V0KCksIDApOworCisgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgLy8gU29tZSB0cmFuc2Zvcm1zIGRvIG5vdCByZXR1cm4gTUZfRV9OT1RBQ0NFUFRJTkcuIFRvIGF2b2lkIGZsb29kaW5nCisgICAgLy8gdGhlc2UgdHJhbnNmb3JtcywgaW5wdXQgaXMgb25seSBhbGxvd2VkIHdoZW4gUHJvY2Vzc091dHB1dCByZXR1cm5zCisgICAgLy8gTUZfRV9UUkFOU0ZPUk1fTkVFRF9NT1JFX0lOUFVULgorICAgIGlmICh0aHJvdHRsZV9pbnB1dHNfKSB7CisgICAgICBzdGF0ZV8gPSBrQ2FuUHJvdmlkZU91dHB1dDsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKGhyID09IE1GX0VfTk9UQUNDRVBUSU5HKSB7CisgICAgc3RhdGVfID0ga0NhblByb3ZpZGVPdXRwdXQ7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIFNCX05PVFJFQUNIRUQoKSA8PCAiVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgIiA8PCBocjsKKyAgcmV0dXJuIGZhbHNlOworfQorCitDb21QdHI8SU1GU2FtcGxlPiBNZWRpYVRyYW5zZm9ybTo6VHJ5UmVhZChDb21QdHI8SU1GTWVkaWFUeXBlPiogbmV3X3R5cGUpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICBTQl9EQ0hFQ0sobmV3X3R5cGUpOworCisgIGlmIChzdGF0ZV8gPT0ga0RyYWluZWQgfHwgIXRyYW5zZm9ybV8pIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIENvbVB0cjxJTUZTYW1wbGU+IHNhbXBsZTsKKyAgSFJFU1VMVCBociA9IFByb2Nlc3NPdXRwdXQoJnNhbXBsZSk7CisKKyAgaWYgKGhyID09IE1GX0VfVFJBTlNGT1JNX1NUUkVBTV9DSEFOR0UpIHsKKyAgICBociA9IHRyYW5zZm9ybV8tPkdldE91dHB1dEF2YWlsYWJsZVR5cGUoa1N0cmVhbUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgLy8gVHlwZUluZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld190eXBlLT5HZXRBZGRyZXNzT2YoKSk7CisgICAgQ2hlY2tSZXN1bHQoaHIpOworICAgIFNldE91dHB1dFR5cGUoKm5ld190eXBlKTsKKworICAgIGhyID0gUHJvY2Vzc091dHB1dCgmc2FtcGxlKTsKKyAgfQorCisgIGlmIChociA9PSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQpIHsKKyAgICBpZiAoc3RhdGVfID09IGtDYW5Qcm92aWRlT3V0cHV0KSB7CisgICAgICBzdGF0ZV8gPSBrQ2FuQWNjZXB0SW5wdXQ7CisgICAgfQorICAgIGlmIChzdGF0ZV8gPT0ga0RyYWluaW5nKSB7CisgICAgICBzdGF0ZV8gPSBrRHJhaW5lZDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIC8vIFNvbWV0aW1lcyB0aGUgZGVjcnlwdG9yIHJlZnVzZSB0byBlbWl0IG91dHB1dCBhZnRlciBzaHV0dGluZyBkb3duLgorICAgIFNCX0RDSEVDSyhociA9PSBNRl9FX0lOVkFMSURSRVFVRVNUKTsKKyAgICBpZiAoc3RhdGVfID09IGtEcmFpbmluZykgeworICAgICAgc3RhdGVfID0ga0RyYWluZWQ7CisgICAgfQorICAgIHJldHVybiBOVUxMOworICB9CisKKyAgU0JfRENIRUNLKHNhbXBsZSk7CisKKyAgaWYgKGRpc2NvbnRpbnVpdHlfKSB7CisgICAgc2FtcGxlLT5TZXRVSU5UMzIoTUZTYW1wbGVFeHRlbnNpb25fRGlzY29udGludWl0eSwgVFJVRSk7CisgICAgZGlzY29udGludWl0eV8gPSBmYWxzZTsKKyAgfQorCisgIHJldHVybiBzYW1wbGU7Cit9CisKK3ZvaWQgTWVkaWFUcmFuc2Zvcm06OkRyYWluKCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgIFNCX0RDSEVDSyhzdGF0ZV8gIT0ga0RyYWluaW5nICYmIHN0YXRlXyAhPSBrRHJhaW5lZCk7CisKKyAgaWYgKHN0YXRlXyA9PSBrRHJhaW5pbmcgfHwgc3RhdGVfID09IGtEcmFpbmVkKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKCFzdHJlYW1fYmVndW5fKSB7CisgICAgc3RhdGVfID0ga0RyYWluZWQ7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gVGhlIFZQOSBjb2RlYyBtYXkgY3Jhc2ggd2hlbiBNRlRfTUVTU0FHRV9OT1RJRllfRU5EX09GX1NUUkVBTSBpcyBwcm9jZXNzZWQKKyAgLy8gYXQgdGhlIHNhbWUgdGltZSBhbiBJTUZTYW1wbGUgaXMgcmVsZWFzZWQuIFBlciBkb2N1bWVudGF0aW9uLCB0aGUgY2xpZW50CisgIC8vIGlzIG5vdCByZXF1aXJlZCB0byBzZW5kIHRoaXMgbWVzc2FnZSBmb3IgSU1GVHJhbnNmb3Jtcy4gQXZvaWQgdGhlIHBvc3NpYmxlCisgIC8vIHJhY2UgY29uZGl0aW9uIGJ5IG5vdCBzZW5kaW5nIHRoaXMgbWVzc2FnZS4KKyAgLy8gU2VuZE1lc3NhZ2UoTUZUX01FU1NBR0VfTk9USUZZX0VORF9PRl9TVFJFQU0pOworICBTZW5kTWVzc2FnZShNRlRfTUVTU0FHRV9DT01NQU5EX0RSQUlOKTsKKyAgc3RhdGVfID0ga0RyYWluaW5nOworfQorCitib29sIE1lZGlhVHJhbnNmb3JtOjpkcmFpbmluZygpIGNvbnN0IHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICByZXR1cm4gc3RhdGVfID09IGtEcmFpbmluZzsKK30KKworYm9vbCBNZWRpYVRyYW5zZm9ybTo6ZHJhaW5lZCgpIGNvbnN0IHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICByZXR1cm4gc3RhdGVfID09IGtEcmFpbmVkOworfQorCitib29sIE1lZGlhVHJhbnNmb3JtOjpIYXNWYWxpZFRyYW5zZm9ybSgpIGNvbnN0IHsKKyAgcmV0dXJuIHRyYW5zZm9ybV8gPyB0cnVlIDogZmFsc2U7Cit9CisKK3ZvaWQgTWVkaWFUcmFuc2Zvcm06OlJlc2V0RnJvbURyYWluZWQoKSB7CisgIFNCX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgU0JfRENIRUNLKGRyYWluZWQoKSk7CisKKyAgc3RhdGVfID0ga0NhbkFjY2VwdElucHV0OworICBzdHJlYW1fYmVndW5fID0gZmFsc2U7CisgIGRpc2NvbnRpbnVpdHlfID0gdHJ1ZTsKK30KKworQ29tUHRyPElNRk1lZGlhVHlwZT4gTWVkaWFUcmFuc2Zvcm06OkdldEN1cnJlbnRJbnB1dFR5cGUoKSB7CisgIENvbVB0cjxJTUZNZWRpYVR5cGU+IHR5cGU7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8tPkdldElucHV0Q3VycmVudFR5cGUoa1N0cmVhbUlkLCB0eXBlLkdldEFkZHJlc3NPZigpKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworICByZXR1cm4gdHlwZTsKK30KKwordm9pZCBNZWRpYVRyYW5zZm9ybTo6U2V0SW5wdXRUeXBlKGNvbnN0IENvbVB0cjxJTUZNZWRpYVR5cGU+JiBpbnB1dF90eXBlKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8tPlNldElucHV0VHlwZSgwLCBpbnB1dF90eXBlLkdldCgpLCAwKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworfQorCitzdGQ6OnZlY3RvcjxDb21QdHI8SU1GTWVkaWFUeXBlPj4gTWVkaWFUcmFuc2Zvcm06OkdldEF2YWlsYWJsZUlucHV0VHlwZXMoKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgcmV0dXJuIEdldEFsbElucHV0TWVkaWFUeXBlcyhrU3RyZWFtSWQsIHRyYW5zZm9ybV8uR2V0KCkpOworfQorCitDb21QdHI8SU1GTWVkaWFUeXBlPiBNZWRpYVRyYW5zZm9ybTo6R2V0Q3VycmVudE91dHB1dFR5cGUoKSB7CisgIENvbVB0cjxJTUZNZWRpYVR5cGU+IHR5cGU7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8tPkdldE91dHB1dEN1cnJlbnRUeXBlKGtTdHJlYW1JZCwgdHlwZS5HZXRBZGRyZXNzT2YoKSk7CisgIENoZWNrUmVzdWx0KGhyKTsKKyAgcmV0dXJuIHR5cGU7Cit9CisKK3ZvaWQgTWVkaWFUcmFuc2Zvcm06OlNldE91dHB1dFR5cGUoY29uc3QgQ29tUHRyPElNRk1lZGlhVHlwZT4mIG91dHB1dF90eXBlKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8tPlNldE91dHB1dFR5cGUoMCwgb3V0cHV0X3R5cGUuR2V0KCksIDApOworICBDaGVja1Jlc3VsdChocik7Cit9CisKK3N0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiBNZWRpYVRyYW5zZm9ybTo6R2V0QXZhaWxhYmxlT3V0cHV0VHlwZXMoKSB7CisgIHN0ZDo6dmVjdG9yPENvbVB0cjxJTUZNZWRpYVR5cGU+PiBvdXRwdXRfdHlwZXM7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKworICBmb3IgKERXT1JEIGkgPSAwOzsgKytpKSB7CisgICAgQ29tUHRyPElNRk1lZGlhVHlwZT4gY3Vycl90eXBlOworICAgIEhSRVNVTFQgaHIgPSB0cmFuc2Zvcm1fLT5HZXRPdXRwdXRBdmFpbGFibGVUeXBlKGtTdHJlYW1JZCwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3R5cGUuR2V0QWRkcmVzc09mKCkpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgb3V0cHV0X3R5cGVzLnB1c2hfYmFjayhjdXJyX3R5cGUpOworICB9CisKKyAgcmV0dXJuIG91dHB1dF90eXBlczsKK30KKwordm9pZCBNZWRpYVRyYW5zZm9ybTo6U2V0T3V0cHV0VHlwZUJ5U3ViVHlwZShHVUlEIHN1YnR5cGUpIHsKKyAgU0JfRENIRUNLKHRyYW5zZm9ybV8pOworICBmb3IgKGludCBpbmRleCA9IDA7OyArK2luZGV4KSB7CisgICAgQ29tUHRyPElNRk1lZGlhVHlwZT4gbWVkaWFfdHlwZTsKKyAgICBIUkVTVUxUIGhyID0KKyAgICAgICAgdHJhbnNmb3JtXy0+R2V0T3V0cHV0QXZhaWxhYmxlVHlwZShrU3RyZWFtSWQsIGluZGV4LCAmbWVkaWFfdHlwZSk7CisgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgIEdVSUQgbWVkaWFfc3ViX3R5cGUgPSB7fTsKKyAgICAgIG1lZGlhX3R5cGUtPkdldEdVSUQoTUZfTVRfU1VCVFlQRSwgJm1lZGlhX3N1Yl90eXBlKTsKKyAgICAgIGlmIChtZWRpYV9zdWJfdHlwZSA9PSBzdWJ0eXBlKSB7CisgICAgICAgIFNldE91dHB1dFR5cGUobWVkaWFfdHlwZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgU0JfRENIRUNLKGhyID09IE1GX0VfTk9fTU9SRV9UWVBFUyk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgU0JfTk9UUkVBQ0hFRCgpOworfQorCitDb21QdHI8SU1GQXR0cmlidXRlcz4gTWVkaWFUcmFuc2Zvcm06OkdldEF0dHJpYnV0ZXMoKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgQ29tUHRyPElNRkF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXM7CisgIEhSRVNVTFQgaHIgPSB0cmFuc2Zvcm1fLT5HZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuR2V0QWRkcmVzc09mKCkpOworICBDaGVja1Jlc3VsdChocik7CisgIHJldHVybiBhdHRyaWJ1dGVzOworfQorCitDb21QdHI8SU1GQXR0cmlidXRlcz4gTWVkaWFUcmFuc2Zvcm06OkdldE91dHB1dFN0cmVhbUF0dHJpYnV0ZXMoKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgQ29tUHRyPElNRkF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXM7CisgIEhSRVNVTFQgaHIgPQorICAgICAgdHJhbnNmb3JtXy0+R2V0T3V0cHV0U3RyZWFtQXR0cmlidXRlcygwLCBhdHRyaWJ1dGVzLkdldEFkZHJlc3NPZigpKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworICByZXR1cm4gYXR0cmlidXRlczsKK30KKworQ29tUHRyPElNRlNhbXBsZVByb3RlY3Rpb24+IE1lZGlhVHJhbnNmb3JtOjpHZXRTYW1wbGVQcm90ZWN0aW9uKCkgeworICBTQl9EQ0hFQ0sodHJhbnNmb3JtXyk7CisgIENvbVB0cjxJTUZTYW1wbGVQcm90ZWN0aW9uPiBzYW1wbGVfcHJvdGVjdGlvbjsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8uQXMoJnNhbXBsZV9wcm90ZWN0aW9uKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworICByZXR1cm4gc2FtcGxlX3Byb3RlY3Rpb247Cit9CisKK3ZvaWQgTWVkaWFUcmFuc2Zvcm06OkdldFN0cmVhbUNvdW50KERXT1JEKiBpbnB1dF9zdHJlYW1fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCogb3V0cHV0X3N0cmVhbV9jb3VudCkgeworICBTQl9EQ0hFQ0sodHJhbnNmb3JtXyk7CisgIFNCX0RDSEVDSyhpbnB1dF9zdHJlYW1fY291bnQpOworICBTQl9EQ0hFQ0sob3V0cHV0X3N0cmVhbV9jb3VudCk7CisgIEhSRVNVTFQgaHIgPQorICAgICAgdHJhbnNmb3JtXy0+R2V0U3RyZWFtQ291bnQoaW5wdXRfc3RyZWFtX2NvdW50LCBvdXRwdXRfc3RyZWFtX2NvdW50KTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworfQorCitIUkVTVUxUIE1lZGlhVHJhbnNmb3JtOjpTZW5kTWVzc2FnZShNRlRfTUVTU0FHRV9UWVBFIG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HX1BUUiBkYXRhIC8qPSAwKi8pIHsKKyAgU0JfRENIRUNLKHRyYW5zZm9ybV8pOworICByZXR1cm4gdHJhbnNmb3JtXy0+UHJvY2Vzc01lc3NhZ2UobXNnLCBkYXRhKTsKK30KKwordm9pZCBNZWRpYVRyYW5zZm9ybTo6UmVzZXQoKSB7CisgIGlmIChzdHJlYW1fYmVndW5fKSB7CisgICAgU2VuZE1lc3NhZ2UoTUZUX01FU1NBR0VfQ09NTUFORF9GTFVTSCk7CisgIH0KKyAgc3RhdGVfID0ga0NhbkFjY2VwdElucHV0OworICBkaXNjb250aW51aXR5XyA9IHRydWU7CisgIHRocmVhZF9jaGVja2VyXy5EZXRhY2goKTsKK30KKwordm9pZCBNZWRpYVRyYW5zZm9ybTo6UHJlcGFyZU91dHB1dERhdGFCdWZmZXIoCisgICAgTUZUX09VVFBVVF9EQVRBX0JVRkZFUiogb3V0cHV0X2RhdGFfYnVmZmVyKSB7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKyAgb3V0cHV0X2RhdGFfYnVmZmVyLT5kd1N0cmVhbUlEID0ga1N0cmVhbUlkOworICBvdXRwdXRfZGF0YV9idWZmZXItPnBTYW1wbGUgPSBOVUxMOworICBvdXRwdXRfZGF0YV9idWZmZXItPmR3U3RhdHVzID0gMDsKKyAgb3V0cHV0X2RhdGFfYnVmZmVyLT5wRXZlbnRzID0gTlVMTDsKKworICBNRlRfT1VUUFVUX1NUUkVBTV9JTkZPIG91dHB1dF9zdHJlYW1faW5mbzsKKyAgSFJFU1VMVCBociA9IHRyYW5zZm9ybV8tPkdldE91dHB1dFN0cmVhbUluZm8oa1N0cmVhbUlkLCAmb3V0cHV0X3N0cmVhbV9pbmZvKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIHN0YXRpYyBjb25zdCBEV09SRCBrRmxhZ0F1dG9BbGxvY2F0ZU1lbW9yeSA9CisgICAgICBNRlRfT1VUUFVUX1NUUkVBTV9QUk9WSURFU19TQU1QTEVTIHwKKyAgICAgIE1GVF9PVVRQVVRfU1RSRUFNX0NBTl9QUk9WSURFX1NBTVBMRVM7CisgIGlmICgob3V0cHV0X3N0cmVhbV9pbmZvLmR3RmxhZ3MgJiBrRmxhZ0F1dG9BbGxvY2F0ZU1lbW9yeSkgIT0gMCkgeworICAgIC8vIFRyeSB0byBsZXQgdGhlIElNRlRyYW5zZm9ybSBhbGxvY2F0ZSB0aGUgbWVtb3J5IGlmIHBvc3NpYmxlLgorICAgIHJldHVybjsKKyAgfQorCisgIENvbVB0cjxJTUZTYW1wbGU+IHNhbXBsZTsKKyAgaHIgPSBNRkNyZWF0ZVNhbXBsZSgmc2FtcGxlKTsKKyAgQ2hlY2tSZXN1bHQoaHIpOworCisgIENvbVB0cjxJTUZNZWRpYUJ1ZmZlcj4gYnVmZmVyOworICBociA9IE1GQ3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlcihvdXRwdXRfc3RyZWFtX2luZm8uY2JTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3RyZWFtX2luZm8uY2JBbGlnbm1lbnQsICZidWZmZXIpOworICBDaGVja1Jlc3VsdChocik7CisKKyAgaHIgPSBzYW1wbGUtPkFkZEJ1ZmZlcihidWZmZXIuR2V0KCkpOworICBDaGVja1Jlc3VsdChocik7CisKKyAgb3V0cHV0X2RhdGFfYnVmZmVyLT5wU2FtcGxlID0gc2FtcGxlLkRldGFjaCgpOworfQorCitIUkVTVUxUIE1lZGlhVHJhbnNmb3JtOjpQcm9jZXNzT3V0cHV0KENvbVB0cjxJTUZTYW1wbGU+KiBzYW1wbGUpIHsKKyAgU0JfRENIRUNLKHNhbXBsZSk7CisgIFNCX0RDSEVDSyh0cmFuc2Zvcm1fKTsKKworICBNRlRfT1VUUFVUX0RBVEFfQlVGRkVSIG91dHB1dF9kYXRhX2J1ZmZlcjsKKyAgUHJlcGFyZU91dHB1dERhdGFCdWZmZXIoJm91dHB1dF9kYXRhX2J1ZmZlcik7CisKKyAgY29uc3QgRFdPUkQga0ZsYWdzID0gMDsKKyAgY29uc3QgRFdPUkQga051bWJlck9mQnVmZmVycyA9IDE7CisgIERXT1JEIHN0YXR1cyA9IDA7CisgIEhSRVNVTFQgaHIgPSB0cmFuc2Zvcm1fLT5Qcm9jZXNzT3V0cHV0KGtGbGFncywga051bWJlck9mQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dF9kYXRhX2J1ZmZlciwgJnN0YXR1cyk7CisKKyAgU0JfRENIRUNLKCFvdXRwdXRfZGF0YV9idWZmZXIucEV2ZW50cyk7CisKKyAgKnNhbXBsZSA9IG91dHB1dF9kYXRhX2J1ZmZlci5wU2FtcGxlOworICBSZWxlYXNlSWZOb3ROdWxsKCZvdXRwdXRfZGF0YV9idWZmZXIucEV2ZW50cyk7CisgIFJlbGVhc2VJZk5vdE51bGwoJm91dHB1dF9kYXRhX2J1ZmZlci5wU2FtcGxlKTsKKworICBpZiAob3V0cHV0X2RhdGFfYnVmZmVyLmR3U3RhdHVzID09IE1GVF9PVVRQVVRfREFUQV9CVUZGRVJfTk9fU0FNUExFKSB7CisgICAgaHIgPSBNRl9FX1RSQU5TRk9STV9ORUVEX01PUkVfSU5QVVQ7CisgIH0KKworICByZXR1cm4gaHI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV90cmFuc2Zvcm0uaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfdHJhbnNmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNzA3MgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfdHJhbnNmb3JtLmgKQEAgLTAsMCArMSwxMDggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX01FRElBX1RSQU5TRk9STV9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX01FRElBX1RSQU5TRk9STV9IXworCisjaW5jbHVkZSA8bWZhcGkuaD4KKyNpbmNsdWRlIDxtZmVycm9yLmg+CisjaW5jbHVkZSA8bWZpZGwuaD4KKyNpbmNsdWRlIDx3cmxcY2xpZW50Lmg+CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworLy8gV3JhcHBlciBjbGFzcyBmb3IgSU1GVHJhbnNmb3JtIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsaXRpZXM6CisvLyAxLiBTdGF0ZSBtYW5hZ2VtZW50OgorLy8gICAgSXQgc3VwcG9ydHMgYSBvbmUgd2F5IGxpZmUgY3ljbGUgZnJvbSAia0NhbkFjY2VwdElucHV0L2tDYW5Qcm92aWRlT3V0cHV0IgorLy8gICAgdG8gImtEcmFpbmluZyIgdGhlbiB0byAia0RyYWluZWQiLgorLy8gMi4gTWFuYWdlcyBzdGF0ZXMgbGlrZSBpbnB1dC9vdXRwdXQgdHlwZXMsIHZhcmlvdXMgYXR0cmlidXRlcywgYW5kIHNhbXBsZQorLy8gICAgcHJvdGVjdGlvbiwgZXRjLgorLy8gMy4gU2VuZCBtZXNzYWdlIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zZm9ybS4KKy8vIFRoaXMgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGlnaGVyIGxldmVsIGRlY29kZXIgbWVjaGFuaXNtIHRoYXQKKy8vIG1heSBkZWFsIHdpdGggdHdvIElNRlRyYW5zZm9ybXM6IG9uZSBkZWNvZGVyIGFuZCBvbmUgZGVjcnlwdG9yLgorY2xhc3MgTWVkaWFUcmFuc2Zvcm0geworIHB1YmxpYzoKKyAgZW51bSB7IGtTdHJlYW1JZCA9IDAgfTsKKyAgZXhwbGljaXQgTWVkaWFUcmFuc2Zvcm0oQ0xTSUQgY2xzaWQpOworICBleHBsaWNpdCBNZWRpYVRyYW5zZm9ybSgKKyAgICAgIGNvbnN0IE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GVHJhbnNmb3JtPiYgdHJhbnNmb3JtKTsKKworICAvLyBCeSBkZWZhdWx0LCB0aGUgaW5wdXQgdGhyb3R0bGUgaXMgZGlzYWJsZWQsIGFuZCBpbnB1dHMgY2FuIGJlIHdyaXR0ZW4gdG8KKyAgLy8gdGhlIHRyYW5zZm9ybSB1bnRpbCByZWplY3RlZDsgaS5lLiB0aGUgdHJhbnNmb3JtIGlzIGtlcHQgZnVsbCBvZiBpbnB1dHMuCisgIC8vIEhvd2V2ZXIsIHNvbWUgdHJhbnNmb3JtcyBtYXkgbmV2ZXIgcmVwb3J0IHRoYXQgdGhleSBhcmUgZnVsbCwgc28gZW5hYmxpbmcKKyAgLy8gdGhlIGlucHV0IHRocm90dGxlIHdpbGwgYWxsb3cgaW5wdXRzIG9ubHkgd2hlbiB0aGUgdHJhbnNmb3JtIHJlcG9ydHMgdGhhdAorICAvLyBpdCBuZWVkcyBtb3JlIGlucHV0LgorICB2b2lkIEVuYWJsZUlucHV0VGhyb3R0bGUoYm9vbCBlbmFibGUpIHsgdGhyb3R0bGVfaW5wdXRzXyA9IGVuYWJsZTsgfQorCisgIGJvb2wgVHJ5V3JpdGUoY29uc3QgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZTYW1wbGU+JiBpbnB1dCk7CisgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GU2FtcGxlPiBUcnlSZWFkKAorICAgICAgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZNZWRpYVR5cGU+KiBuZXdfdHlwZSk7CisgIHZvaWQgRHJhaW4oKTsKKyAgYm9vbCBkcmFpbmluZygpIGNvbnN0OworICBib29sIGRyYWluZWQoKSBjb25zdDsKKyAgLy8gT25jZSB0aGUgdHJhbnNmb3JtIGlzIGRyYWluZWQsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0byBhbGxvdyB0aGUKKyAgLy8gdHJhbnNmb3JtIHRvIGFjY2VwdCBuZXcgaW5wdXQgYXMgYSBuZXdseSBjcmVhdGVkIHRyYW5zZm9ybS4gIFRoaXMgYWxsb3dzCisgIC8vIHRoZSByZXVzZSBvZiBleGlzdGluZyB0cmFuc2Zvcm0gd2l0aG91dCByZS1uZWdvdGlhdGluZyBhbGwgdHlwZXMgYW5kCisgIC8vIGF0dHJpYnV0ZXMuCisgIHZvaWQgUmVzZXRGcm9tRHJhaW5lZCgpOworCisgIGJvb2wgSGFzVmFsaWRUcmFuc2Zvcm0oKSBjb25zdDsKKworICBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPElNRk1lZGlhVHlwZT4gR2V0Q3VycmVudElucHV0VHlwZSgpOworICB2b2lkIFNldElucHV0VHlwZShjb25zdCBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPElNRk1lZGlhVHlwZT4mIHR5cGUpOworICBzdGQ6OnZlY3RvcjxNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPElNRk1lZGlhVHlwZT4+IEdldEF2YWlsYWJsZUlucHV0VHlwZXMoKTsKKworICBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyPElNRk1lZGlhVHlwZT4gR2V0Q3VycmVudE91dHB1dFR5cGUoKTsKKyAgdm9pZCBTZXRPdXRwdXRUeXBlKGNvbnN0IE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GTWVkaWFUeXBlPiYgdHlwZSk7CisgIHN0ZDo6dmVjdG9yPE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GTWVkaWFUeXBlPj4gR2V0QXZhaWxhYmxlT3V0cHV0VHlwZXMoKTsKKyAgdm9pZCBTZXRPdXRwdXRUeXBlQnlTdWJUeXBlKEdVSUQgc3VidHlwZSk7CisKKyAgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZBdHRyaWJ1dGVzPiBHZXRBdHRyaWJ1dGVzKCk7CisgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GQXR0cmlidXRlcz4gR2V0T3V0cHV0U3RyZWFtQXR0cmlidXRlcygpOworCisgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GU2FtcGxlUHJvdGVjdGlvbj4gR2V0U2FtcGxlUHJvdGVjdGlvbigpOworICB2b2lkIEdldFN0cmVhbUNvdW50KERXT1JEKiBpbnB1dF9zdHJlYW1jb3VudCwgRFdPUkQqIG91dHB1dF9zdHJlYW1fY291bnQpOworCisgIEhSRVNVTFQgU2VuZE1lc3NhZ2UoTUZUX01FU1NBR0VfVFlQRSBtc2csIFVMT05HX1BUUiBkYXRhID0gMCk7CisKKyAgLy8gUmVzZXQgdGhlIG1lZGlhIHRyYW5zZm9ybSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisgIHZvaWQgUmVzZXQoKTsKKworIHByaXZhdGU6CisgIGVudW0gU3RhdGUgeyBrQ2FuQWNjZXB0SW5wdXQsIGtDYW5Qcm92aWRlT3V0cHV0LCBrRHJhaW5pbmcsIGtEcmFpbmVkIH07CisKKyAgdm9pZCBQcmVwYXJlT3V0cHV0RGF0YUJ1ZmZlcihNRlRfT1VUUFVUX0RBVEFfQlVGRkVSKiBvdXRwdXRfZGF0YV9idWZmZXIpOworICBIUkVTVUxUIFByb2Nlc3NPdXRwdXQoTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJTUZTYW1wbGU+KiBzYW1wbGUpOworCisgIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8SU1GVHJhbnNmb3JtPiB0cmFuc2Zvcm1fOworCisgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87CisgIFN0YXRlIHN0YXRlXzsKKyAgYm9vbCBzdHJlYW1fYmVndW5fOworICBib29sIGRpc2NvbnRpbnVpdHlfOworICBib29sIHRocm90dGxlX2lucHV0c187Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX01FRElBX1RSQU5TRk9STV9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9hbGxvY2F0ZV9hbGlnbmVkX3VuY2hlY2tlZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjFjN2MzCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MKQEAgLTAsMCArMSwyMSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorCisjaW5jbHVkZSA8bWFsbG9jLmg+CisKK3ZvaWQqIFNiTWVtb3J5QWxsb2NhdGVBbGlnbmVkVW5jaGVja2VkKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7CisgIHJldHVybiBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2FsbG9jYXRlX3VuY2hlY2tlZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2FsbG9jYXRlX3VuY2hlY2tlZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMwNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfYWxsb2NhdGVfdW5jaGVja2VkLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordm9pZCogU2JNZW1vcnlBbGxvY2F0ZVVuY2hlY2tlZChzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksIDAsIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZmx1c2guY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9mbHVzaC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZkODMwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZmx1c2guY2MKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpZiAhU0JfQ0FOKE1BUF9FWEVDVVRBQkxFX01FTU9SWSkKKyNlcnJvciBcCisgICAgIllvdSBzaG91bGRuJ3QgaW1wbGVtZW50IFNiTWVtb3J5Rmx1c2ggdW5sZXNzIHlvdSBjYW4gbWFwICIgXAorICAgICAgICJtZW1vcnkgcGFnZXMgYXMgZXhlY3V0YWJsZSIKKyNlbmRpZgorCit2b2lkIFNiTWVtb3J5Rmx1c2godm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMpIHsKKyAgU0JfTk9USU1QTEVNRU5URUQoKTsKKyAgLy8gVE9ETzogRW5hYmxlIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50YXRpb24gd2hlbiB4YjEgY2FuIGNvbXBpbGUgaXQuCisgIC8vIEZsdXNoSW5zdHJ1Y3Rpb25DYWNoZShHZXRDdXJyZW50UHJvY2VzcygpLCB2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZnJlZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViMjUzNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWUuY2MKQEAgLTAsMCArMSwyMSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCit2b2lkIFNiTWVtb3J5RnJlZSh2b2lkKiBtZW1vcnkpIHsKKyAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbWVtb3J5KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWVfYWxpZ25lZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWVfYWxpZ25lZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE2OTViCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZnJlZV9hbGlnbmVkLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKworI2luY2x1ZGUgPG1hbGxvYy5oPgorCit2b2lkIFNiTWVtb3J5RnJlZUFsaWduZWQodm9pZCogbWVtb3J5KSB7CisgIF9hbGlnbmVkX2ZyZWUobWVtb3J5KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2dldF9zdGFja19ib3VuZHMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9nZXRfc3RhY2tfYm91bmRzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDVlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9nZXRfc3RhY2tfYm91bmRzLmNjCkBAIC0wLDAgKzEsMjMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordm9pZCBTYk1lbW9yeUdldFN0YWNrQm91bmRzKHZvaWQqKiBvdXRfaGlnaCwgdm9pZCoqIG91dF9sb3cpIHsKKyAgX05UX1RJQiogdGliID0gcmVpbnRlcnByZXRfY2FzdDxfTlRfVElCKj4oTnRDdXJyZW50VGViKCkpOworICAqb3V0X2hpZ2ggPSB0aWItPlN0YWNrQmFzZTsKKyAgKm91dF9sb3cgPSB0aWItPlN0YWNrTGltaXQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9tYXAuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9tYXAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzYWE1MgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X21hcC5jYwpAQCAtMCwwICsxLDU1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lbW9yeV9yZXBvcnRlcl9pbnRlcm5hbC5oIgorCit2b2lkKiBTYk1lbW9yeU1hcChpbnQ2NF90IHNpemVfYnl0ZXMsIGludCBmbGFncywgY29uc3QgY2hhciogbmFtZSkgeworICBpZiAoc2l6ZV9ieXRlcyA9PSAwKSB7CisgICAgcmV0dXJuIFNCX01FTU9SWV9NQVBfRkFJTEVEOworICB9CisgIFVMT05HIHByb3RlY3QgPSBQQUdFX05PQUNDRVNTOworICAvLyB8ZmxhZ3N8IGlzIGEgYml0bWFzayBvZiBTYk1lbW9yeU1hcEZsYWdzLCBidXQgfHByb3RlY3R8IGlzIG5vdCBhIGJpdG1hc2suCisgIHN3aXRjaCAoZmxhZ3MpIHsKKyAgICBjYXNlIGtTYk1lbW9yeU1hcFByb3RlY3RSZXNlcnZlZDogeworICAgICAgcHJvdGVjdCA9IFBBR0VfTk9BQ0NFU1M7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBrU2JNZW1vcnlNYXBQcm90ZWN0UmVhZDoKKyAgICAgIHByb3RlY3QgPSBQQUdFX1JFQURPTkxZOworICAgICAgYnJlYWs7CisgICAgY2FzZSBrU2JNZW1vcnlNYXBQcm90ZWN0V3JpdGU6CisgICAgICAvLyBXaW5kb3dzIGRvZXMgbm90IHByb3ZpZGUgd3JpdGUgb25seSBtb2RlIHByaXZpbGVnZXMKKyAgICAgIC8vIGFyZSBlc2NhbGF0ZWQgdG8gcmVhZC93cml0ZS4KKyAgICBjYXNlIGtTYk1lbW9yeU1hcFByb3RlY3RSZWFkV3JpdGU6CisgICAgICBwcm90ZWN0ID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgU0JfTk9USU1QTEVNRU5URUQoKSA8PCAibWVtb3J5IGZsYWcgIiA8PCBmbGFncyA8PCAiIG5vdCBzdXBwb3J0ZWQuIjsKKyAgICAgIHJldHVybiBTQl9NRU1PUllfTUFQX0ZBSUxFRDsKKyAgfQorCisgIHZvaWQqIG1lbW9yeSA9IFZpcnR1YWxBbGxvY0Zyb21BcHAoCisgICAgICBOVUxMLCBzaXplX2J5dGVzLAorICAgICAoZmxhZ3MgPT0ga1NiTWVtb3J5TWFwUHJvdGVjdFJlc2VydmVkKSA/IE1FTV9SRVNFUlZFIDogTUVNX0NPTU1JVCwKKyAgICAgIHByb3RlY3QpOworICBpZiAoUEFHRV9SRUFET05MWSAhPSBwcm90ZWN0KSB7CisgICAgU2JNZW1vcnlSZXBvcnRlclJlcG9ydE1hcHBlZE1lbW9yeShtZW1vcnksIHNpemVfYnl0ZXMpOworICB9CisgIHJldHVybiBtZW1vcnk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9wcm90ZWN0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfcHJvdGVjdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQ5YjVkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfcHJvdGVjdC5jYwpAQCAtMCwwICsxLDU4IEBACisvLyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2Jvb2wgU2JNZW1vcnlQcm90ZWN0KHZvaWQqIHZpcnR1YWxfYWRkcmVzcywgaW50NjRfdCBzaXplX2J5dGVzLCBpbnQgZmxhZ3MpIHsKKyAgVUxPTkcgbmV3X3Byb3RlY3Rpb24gPSAwOworCisgIHN3aXRjaCAoZmxhZ3MpIHsKKyAgICBjYXNlIGtTYk1lbW9yeU1hcFByb3RlY3RSZXNlcnZlZDoKKyAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCwgdGhlIGFkZHJlc3Mgd2lsbCBiZSBpbiByZXNlcnZlZCBzdGF0ZS4KKyAgICAgIHJldHVybiBWaXJ0dWFsRnJlZSh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIE1FTV9ERUNPTU1JVCk7CisgICAgY2FzZSBrU2JNZW1vcnlNYXBQcm90ZWN0UmVhZDoKKyAgICAgIG5ld19wcm90ZWN0aW9uID0gUEFHRV9SRUFET05MWTsKKyAgICAgIGJyZWFrOworCisgICAgLy8gV2luZG93cyBkb2VzIG5vdCBwcm92aWRlIHdyaXRlIG9ubHkgbW9kZSBwcml2aWxlZ2VzCisgICAgLy8gYXJlIGVzY2FsYXRlZCB0byByZWFkL3dyaXRlLgorICAgIGNhc2Uga1NiTWVtb3J5TWFwUHJvdGVjdFdyaXRlOgorICAgIGNhc2Uga1NiTWVtb3J5TWFwUHJvdGVjdFJlYWRXcml0ZToKKyAgICAgIG5ld19wcm90ZWN0aW9uID0gUEFHRV9SRUFEV1JJVEU7CisgICAgICBicmVhazsKKworI2lmIFNCX0NBTihNQVBfRVhFQ1VUQUJMRV9NRU1PUlkpCisgICAgY2FzZSBrU2JNZW1vcnlNYXBQcm90ZWN0RXhlYzoKKyAgICAgIG5ld19wcm90ZWN0aW9uID0gUEFHRV9FWEVDVVRFOworICAgICAgYnJlYWs7CisgICAgY2FzZSBrU2JNZW1vcnlNYXBQcm90ZWN0UmVhZCB8IGtTYk1lbW9yeU1hcFByb3RlY3RFeGVjOgorICAgICAgbmV3X3Byb3RlY3Rpb24gPSBQQUdFX0VYRUNVVEVfUkVBRDsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAvLyBObyBvdGhlciBwcm90ZWN0aW9ucyBhcmUgc3VwcG9ydGVkLCBzZWUKKyAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tdDE2OTg0Ni4KKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgVUxPTkcgb2xkX3Byb3RlY3Rpb247CisgIC8vIENoYW5naW5nIHByb3RlY3Rpb24gZnJvbSBOby1BY2Nlc3MgdG8gb3RoZXJzIG5lZWRzIHRoZSBtZW1vcnkgdG8gYmUKKyAgLy8gY29tbWl0dGVkIGZpcnN0LiBDb21taXQgY29tbWl0dGVkIHBhZ2VzIHdpbGwgbm90IHJlc2V0IHRoZW0gdG8gemVyby4KKyAgVmlydHVhbEFsbG9jRnJvbUFwcCh2aXJ0dWFsX2FkZHJlc3MsIHNpemVfYnl0ZXMsIE1FTV9DT01NSVQsIFBBR0VfUkVBRE9OTFkpOworICByZXR1cm4gVmlydHVhbFByb3RlY3RGcm9tQXBwKHZpcnR1YWxfYWRkcmVzcywgc2l6ZV9ieXRlcywgbmV3X3Byb3RlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZF9wcm90ZWN0aW9uKSAhPSAwOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfcmVhbGxvY2F0ZV91bmNoZWNrZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9yZWFsbG9jYXRlX3VuY2hlY2tlZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzBlNDQzCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfcmVhbGxvY2F0ZV91bmNoZWNrZWQuY2MKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCit2b2lkKiBTYk1lbW9yeVJlYWxsb2NhdGVVbmNoZWNrZWQodm9pZCogbWVtb3J5LCBzaXplX3Qgc2l6ZSkgeworICBpZiAobWVtb3J5ID09IE5VTEwpIHsKKyAgICByZXR1cm4gU2JNZW1vcnlBbGxvY2F0ZVVuY2hlY2tlZChzaXplKTsKKyAgfQorICByZXR1cm4gSGVhcFJlQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbWVtb3J5LCBzaXplKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X3VubWFwLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfdW5tYXAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlZTcxMAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X3VubWFwLmNjCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lbW9yeV9yZXBvcnRlcl9pbnRlcm5hbC5oIgorCitib29sIFNiTWVtb3J5VW5tYXAodm9pZCogdmlydHVhbF9hZGRyZXNzLCBpbnQ2NF90IHNpemVfYnl0ZXMpIHsKKyAgLy8gTm90ZSB0aGF0IFNiTWVtb3J5VW5tYXAgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgIlRoaXMgZnVuY3Rpb24gY2FuCisgIC8vIHVubWFwIG11bHRpcGxlIGNvbnRpZ3VvdXMgcmVnaW9ucyB0aGF0IHdlcmUgbWFwcGVkIHdpdGggc2VwYXJhdGUgY2FsbHMKKyAgLy8gdG8gU2JNZW1vcnlNYXAoKSIuIEJlY2F1c2Ugb2YgdGhhdCwgd2UgY2Fubm90IHVzZSBNRU1fRlJFRSBoZXJlLgorICBTYk1lbW9yeVJlcG9ydGVyUmVwb3J0VW5tYXBwZWRNZW1vcnkodmlydHVhbF9hZGRyZXNzLCBzaXplX2J5dGVzKTsKKyAgcmV0dXJuIFZpcnR1YWxGcmVlKHZpcnR1YWxfYWRkcmVzcywgc2l6ZV9ieXRlcywgTUVNX0RFQ09NTUlUKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWluaV9kdW1wX3ByaW50ZXIucHkgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21pbmlfZHVtcF9wcmludGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmZmODIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21pbmlfZHVtcF9wcmludGVyLnB5CkBAIC0wLDAgKzEsNjAgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCisKKyMgVGhpcyBjZGIgdG9vbCBpcyBwYXJ0IG9mIE1pY3Jvc29mdCdzIGRlYnVnZ2luZyB0b29sc2V0LCBpdCB3aWxsIGFsbG93IG1pbmkKKyMgZHVtcCBhbmFseXNpcyBhbmQgcHJpbnRpbmcuCitfREVGQVVMVF9UT09MX1BBVEggPSAiQzovUHJvZ3JhbSBGaWxlcyAoeDg2KS9XaW5kb3dzIEtpdHMvMTAvRGVidWdnZXJzL3g2NC9jZGIuZXhlIgorCisKK2RlZiBQcmludE1pbmlEdW1wKG1pbmlfZHVtcF9wYXRoLAorICAgICAgICAgICAgICAgICAgZXhlX3BhdGgsCisgICAgICAgICAgICAgICAgICBvdXRfc3RyZWFtPXN5cy5zdGRvdXQsCisgICAgICAgICAgICAgICAgICB0b29sX3BhdGg9X0RFRkFVTFRfVE9PTF9QQVRIKToKKyAgb3V0X3N0cmVhbS53cml0ZSgnXG4qKiogRm91bmQgY3Jhc2ggZHVtcCEgKioqXG5NaW5EdW1wUGF0aDonXAorICAgICAgICAgICAgICAgICAgICsgbWluaV9kdW1wX3BhdGggKyAnXG4nKQorCisgIHRvb2xfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCh0b29sX3BhdGgpCisgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh0b29sX3BhdGgpOgorICAgIG91dF9zdHJlYW0ud3JpdGUoJ0NvdWxkIG5vdCBwZXJmb3JtIGNyYXNoIGFuYWx5c2lzIGJlY2F1c2UgJyArIHRvb2xfcGF0aFwKKyAgICAgICAgICAgICAgICAgICAgICsgJyBkb2VzIG5vdCBleGlzdC5cbicpCisgICAgcmV0dXJuCisKKyAgZHVtcF9sb2cgPSBtaW5pX2R1bXBfcGF0aCArICcubG9nJworICBjbWQgPSAiXCJ7MH1cIiAteiBcInsxfVwiIC1jIFwiIWFuYWx5emUgLXY7cVwiID4gezJ9IiBcCisgICAgICAgIC5mb3JtYXQodG9vbF9wYXRoLCBtaW5pX2R1bXBfcGF0aCwgZHVtcF9sb2cpCisKKyAgdHJ5OgorICAgIG91dF9zdHJlYW0ud3JpdGUoJ1J1bm5pbmcgY29tbWFuZDpcbicgKyBjbWQgKyAnXG4nKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHVtcF9sb2cpOgorICAgICAgb3V0X3N0cmVhbS53cml0ZSgnRXJyb3IgLSBtaW5pIGR1bXAgbG9nICcgKyBkdW1wX2xvZ1wKKyAgICAgICAgICAgICAgICAgICAgICAgKyAnIHdhcyBub3QgZm91bmQuXG4nKQorICAgICAgcmV0dXJuCisgICAgd2l0aCBvcGVuKGR1bXBfbG9nKSBhcyBmOgorICAgICAgb3V0X3N0cmVhbS53cml0ZShmLnJlYWQoKSArICdcbicpCisgICAgICBvdXRfc3RyZWFtLndyaXRlKCcqKiogRmluaXNoZWQgcHJpbnRpbmcgbWluaWR1bXAgJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgKyBtaW5pX2R1bXBfcGF0aCArICcgKioqXG4nXAorICAgICAgICAgICAgICAgICAgICAgICArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdXNlIFZpc3VhbFN0dWRpbyAnXAorICAgICAgICAgICAgICAgICAgICAgICArICd0byBsb2FkIHRoZSBtaW5pZHVtcC5cbicpCisgICAgb3MucmVtb3ZlKGR1bXBfbG9nKQorICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgb3V0X3N0cmVhbS53cml0ZSgnRXJyb3I6ICcgKyBzdHIoZSkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21pbmlkdW1wLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM0NjNmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5jYwpAQCAtMCwwICsxLDEzMyBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5oIgorCisvLyBjbGFuZy1mb3JtYXQgb2ZmCisjaW5jbHVkZSA8d2luZG93cy5oPiAgLy8gSGFzIHRvIGdvIGZpcnN0LgorLy8gY2xhbmctZm9ybWF0IG9uCisjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjaW5jbHVkZSA8ZGJnaGVscC5oPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpNdXRleDsKK3VzaW5nIHN0YXJib2FyZDo6U2NvcGVkTG9jazsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Tm9ybWFsaXplV2luMzJQYXRoOworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRHVtcEhhbmRsZXIgeworIHB1YmxpYzoKKyAgc3RhdGljIER1bXBIYW5kbGVyKiBJbnN0YW5jZSgpOworCisgIHZvaWQgSW5pdChzdGQ6OnN0cmluZyBmaWxlX3BhdGgpIHsKKyAgICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBpZiAoaW5pdGlhbGl6ZWRfKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGZpbGVfcGF0aF8gPSBmaWxlX3BhdGg7CisgICAgLy8gQWZ0ZXIgdGhpcyBjYWxsLCB1bmhhbmRsZWQgZXhjZXB0aW9ucyB3aWxsIHVzZSB0aGUgZXhjZXB0aW9uIGhhbmRsZXIKKyAgICAvLyB3aGVuIGFuIGVycm9yIG9jY3VycyBidXQgb25seSBpZiB0aGUgZGVidWdnZXIgaXMgbm90IGF0dGFjaGVkLgorICAgIFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcihVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyKTsKKworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgIHNzIDw8ICJcbioqKipNaW5pRHVtcEhhbmRsZXIgYWN0aXZhdGVkKioqXG5JZiBhIGNyYXNoIGhhcHBlbnMgdGhlbiBhbiAiCisgICAgICAgPDwgImF0dGVtcHQgdG8gd3JpdGUgYSBNaW5pRHVtcCBmaWxlIHRvOiAiIDw8IGZpbGVfcGF0aCA8PCAiXG5cbiI7CisgICAgU2JMb2dSYXcoc3Muc3RyKCkuY19zdHIoKSk7CisKKyAgICBpbml0aWFsaXplZF8gPSB0cnVlOworICB9CisKKyBwcml2YXRlOgorICBzdGF0aWMgTE9ORyBXSU5BUEkgVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlcihFWENFUFRJT05fUE9JTlRFUlMqIHBlcCkgeworICAgIER1bXBIYW5kbGVyOjpJbnN0YW5jZSgpLT5EdW1wU3RhY2socGVwKTsKKyAgICByZXR1cm4gRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUjsKKyAgfQorICBEdW1wSGFuZGxlcigpIHt9CisKKyAgdm9pZCBEdW1wU3RhY2soRVhDRVBUSU9OX1BPSU5URVJTKiBwZXApIHsKKyAgICBTY29wZWRMb2NrIGxvY2sobXV0ZXhfKTsKKyAgICBpZiAoZmlsZV9wYXRoXy5lbXB0eSgpKSB7CisgICAgICBTYkxvZ1JhdygiQ291bGQgbm90IHdyaXRlIG1pbmlkdW1wIGJlY2F1c2UgdGhlIGR1bXAgcGF0aCBpcyBtaXNzaW5nLiIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBib29sIG91dF9jcmVhdGVkID0gZmFsc2U7CisgICAgU2JGaWxlRXJyb3Igb3V0X2Vycm9yID0ga1NiRmlsZU9rOworCisgICAgSEFORExFIGZpbGVfaGFuZGxlID0gT3BlbkZpbGVPckRpcmVjdG9yeShmaWxlX3BhdGhfLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JGaWxlQ3JlYXRlQWx3YXlzIHwga1NiRmlsZVdyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dF9jcmVhdGVkLCAmb3V0X2Vycm9yKTsKKworICAgIGNvbnN0IGJvb2wgZmlsZV9vayA9IG91dF9jcmVhdGVkICYmIChvdXRfZXJyb3IgPT0ga1NiRmlsZU9rKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX2hhbmRsZSAhPSBOVUxMKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisKKyAgICBpZiAoIWZpbGVfb2spIHsKKyAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgICAgc3MgPDwgIkNyZWF0ZUZpbGUgZmFpbGVkLiBFcnJvcjogIiA8PCBHZXRMYXN0RXJyb3IoKSA8PCAiXG4iOworICAgICAgU2JMb2dSYXcoc3Muc3RyKCkuY19zdHIoKSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSBtaW5pZHVtcC4KKyAgICBNSU5JRFVNUF9FWENFUFRJT05fSU5GT1JNQVRJT04gbWRlaTsKKyAgICBtZGVpLlRocmVhZElkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CisgICAgbWRlaS5FeGNlcHRpb25Qb2ludGVycyA9IHBlcDsKKyAgICBtZGVpLkNsaWVudFBvaW50ZXJzID0gVFJVRTsKKyAgICBNSU5JRFVNUF9UWVBFIG1kdCA9IHN0YXRpY19jYXN0PE1JTklEVU1QX1RZUEU+KAorICAgICAgICBNaW5pRHVtcFdpdGhGdWxsTWVtb3J5IHwgTWluaUR1bXBXaXRoRnVsbE1lbW9yeUluZm8gfAorICAgICAgICBNaW5pRHVtcFdpdGhIYW5kbGVEYXRhIHwgTWluaUR1bXBXaXRoVGhyZWFkSW5mbyB8CisgICAgICAgIE1pbmlEdW1wV2l0aFVubG9hZGVkTW9kdWxlcyk7CisKKyAgICBCT09MIHJ2ID0gTWluaUR1bXBXcml0ZUR1bXAoR2V0Q3VycmVudFByb2Nlc3MoKSwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2hhbmRsZSwgbWR0LCAocGVwICE9IDApID8gJm1kZWkgOiAwLCAwLCAwKTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgICBpZiAoIXJ2KSB7CisgICAgICBzcyA8PCAiTWluaWR1bXAgd3JpdGUgZmFpbGVkLiBFcnJvcjogIiA8PCBHZXRMYXN0RXJyb3IoKSA8PCAiXG4iOworICAgIH0gZWxzZSB7CisgICAgICBzcyA8PCAiTWluaWR1bXAgIiA8PCBmaWxlX3BhdGhfIDw8ICJjcmVhdGVkLlxuIjsKKyAgICB9CisgICAgLy8gTG93ZXIgbGV2ZWwgbG9nZ2luZyB0aGFuIFNiTG9nUmF3KCkuCisgICAgU2JMb2dSYXcoc3Muc3RyKCkuY19zdHIoKSk7CisgICAgQ2xvc2VIYW5kbGUoZmlsZV9oYW5kbGUpOworICB9CisKKyAgc3RkOjpzdHJpbmcgZmlsZV9wYXRoXzsKKyAgc3RhcmJvYXJkOjpNdXRleCBtdXRleF87CisgIGJvb2wgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Cit9OworCitTQl9PTkNFX0lOSVRJQUxJWkVfRlVOQ1RJT04oRHVtcEhhbmRsZXIsIER1bXBIYW5kbGVyOjpJbnN0YW5jZSk7CisKK30gIC8vIG5hbWVzcGFjZQorCit2b2lkIEluaXRNaW5pRHVtcEhhbmRsZXIoY29uc3QgY2hhciogZmlsZV9wYXRoKSB7CisjaWZuZGVmIENPQkFMVF9CVUlMRF9UWVBFX0dPTEQKKyAgRHVtcEhhbmRsZXI6Okluc3RhbmNlKCktPkluaXQoZmlsZV9wYXRoKTsKKyNlbmRpZgorfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWluaWR1bXAuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWluaWR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjAxMzdiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX01JTklEVU1QX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfTUlOSURVTVBfSF8KKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKKy8vIEFmdGVyIHRoaXMgY2FsbCwgYW55IGNyYXNoZXMgd2lsbCBjYXVzZSBhIG1pbmkgZHVtcCBmaWxlIHRvIGJlIHdyaXR0ZW4KKy8vIHRvIHRoZSBmaWxlIHBhdGguIE5vdGUgdGhhdCB0aGUgZHVtcCBmaWxlIHdpbGwgb25seSBiZSB3cml0dGVuIGlmIHRoZQorLy8gcHJvY2VzcyBpcyBub3QgcnVubmluZyBpbiBhIGRlYnVnZ2VyIChlLmcuIGluc2lkZSBvZiBWaXN1YWwgU3R1ZGlvKS4KKy8vCisvLyBFeGFtcGxlIDE6CisvLyAgSW5pdE1pbmlEdW1wSGFuZGxlcigiY29iYWx0LmV4ZS5kbXAiKTsgIC8vIFJlbGF0aXZlIHBhdGggdG8gY3VycmVudCB3b3JraW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdG9yeQorLy8gRXhhbXBsZSAyOgorLy8gIEluaXRNaW5pRHVtcEhhbmRsZXIoIkM6XFwuLi5cXGNvYmFsdC5leGUuZG1wIikgIC8vIEFic29sdXRlIHBhdGguCit2b2lkIEluaXRNaW5pRHVtcEhhbmRsZXIoY29uc3QgY2hhciogZmlsZV9wYXRoKTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9NSU5JRFVNUF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9hY3F1aXJlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9hY3F1aXJlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2N2Q2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X2FjcXVpcmUuY2MKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3R5cGVzX2ludGVybmFsLmgiCisKK1NiTXV0ZXhSZXN1bHQgU2JNdXRleEFjcXVpcmUoU2JNdXRleCogbXV0ZXgpIHsKKyAgQWNxdWlyZVNSV0xvY2tFeGNsdXNpdmUoU0JfV0lOMzJfSU5URVJOQUxfTVVURVgobXV0ZXgpKTsKKyAgcmV0dXJuIGtTYk11dGV4QWNxdWlyZWQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X2FjcXVpcmVfdHJ5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9hY3F1aXJlX3RyeS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE2OTQyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9hY3F1aXJlX3RyeS5jYwpAQCAtMCwwICsxLDI0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbXV0ZXguaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKworU2JNdXRleFJlc3VsdCBTYk11dGV4QWNxdWlyZVRyeShTYk11dGV4KiBtdXRleCkgeworICBib29sIHJlc3VsdCA9IFRyeUFjcXVpcmVTUldMb2NrRXhjbHVzaXZlKFNCX1dJTjMyX0lOVEVSTkFMX01VVEVYKG11dGV4KSk7CisgIHJldHVybiByZXN1bHQgPyBrU2JNdXRleEFjcXVpcmVkIDoga1NiTXV0ZXhCdXN5OworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9jcmVhdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X2NyZWF0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGFlYWQyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9jcmVhdGUuY2MKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKworYm9vbCBTYk11dGV4Q3JlYXRlKFNiTXV0ZXgqIG11dGV4KSB7CisgIFNCX0NPTVBJTEVfQVNTRVJUKHNpemVvZihTYk11dGV4KSA+PSBzaXplb2YoU1JXTE9DSyksCisgICAgICAgICAgICAgICAgICAgIHNyd2xvY2tfbGFyZ2VyX3RoYW5fc2JfbXV0ZXgpOworICBpZiAoIW11dGV4KSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIEluaXRpYWxpemVTUldMb2NrKFNCX1dJTjMyX0lOVEVSTkFMX01VVEVYKG11dGV4KSk7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9kZXN0cm95LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9kZXN0cm95LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDQ2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X2Rlc3Ryb3kuY2MKQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIgorCitib29sIFNiTXV0ZXhEZXN0cm95KFNiTXV0ZXgqIG11dGV4KSB7CisgIGlmICghbXV0ZXgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgLy8gT24gV2luZG93cyBhIFNSV0xPQ0sgaXMgdXNlZCBpbiBwbGFjZSBvZiB0aGUgaGVhdmllciBtdXRleC4gVGhlc2UgbG9ja3MKKyAgLy8gY2Fubm90IGJlIGFjcXVpcmVkIHJlY3Vyc2l2ZWx5LCBhbmQgdGhlIGJlaGF2aW9yIHdoZW4gdGhpcyBpcyBhdHRlbXB0ZWQgaXMKKyAgLy8gbm90IGNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLiBBIE1pY3Jvc29mdCBEZXZCbG9nIHNlZW1zIHRvIHN1Z2dlc3QgdGhpcworICAvLyBpcyB1bmRlZmluZWQgYmVoYXZpb3I6CisgIC8vCisgIC8vICAgSXTigJlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuIEl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgYXMgYSBwcm9ncmFtbWVyIG5vdAorICAvLyAgIHRvIGNhbGwgQWNxdWlyZcKtU1JXwq1Mb2Nrwq1TaGFyZWQgb3IgQWNxdWlyZcKtU1JXwq1Mb2Nrwq1FeGNsdXNpdmUgZnJvbSBhCisgIC8vICAgdGhyZWFkIHRoYXQgaGFzIGFscmVhZHkgYWNxdWlyZWQgdGhlIGxvY2suIEZhaWxpbmcgdG8gY29tcGx5IHdpdGggdGhpcworICAvLyAgIHJ1bGUgd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgorICAvLworICAvLyBodHRwczovL2RldmJsb2dzLm1pY3Jvc29mdC5jb20vb2xkbmV3dGhpbmcvMjAxNjA4MTktMDAvP3A9OTQxMjUKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X3JlbGVhc2UuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL211dGV4X3JlbGVhc2UuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkMzVlMwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbXV0ZXhfcmVsZWFzZS5jYwpAQCAtMCwwICsxLDI0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvbXV0ZXguaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKworYm9vbCBTYk11dGV4UmVsZWFzZShTYk11dGV4KiBtdXRleCkgeworICBSZWxlYXNlU1JXTG9ja0V4Y2x1c2l2ZShTQl9XSU4zMl9JTlRFUk5BTF9NVVRFWChtdXRleCkpOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvb25jZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvb25jZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGNjYzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9vbmNlLmNjCkBAIC0wLDAgKzEsNDAgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9vbmNlLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdHlwZXNfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHsKK0JPT0wgQ0FMTEJBQ0sgT25jZVRyYW1wb2xpbmUoUElOSVRfT05DRSBvbmNlX2NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBhcmFtZXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGNvbnRleHQpIHsKKyAgc3RhdGljX2Nhc3Q8U2JPbmNlSW5pdFJvdXRpbmU+KHBhcmFtZXRlcikoKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiT25jZShTYk9uY2VDb250cm9sKiBvbmNlX2NvbnRyb2wsIFNiT25jZUluaXRSb3V0aW5lIGluaXRfcm91dGluZSkgeworICBTQl9DT01QSUxFX0FTU0VSVChzaXplb2YoU2JPbmNlQ29udHJvbCkgPj0gc2l6ZW9mKElOSVRfT05DRSksCisgICAgICAgICAgICAgICAgICAgIGluaXRfb25jZV9sYXJnZXJfdGhhbl9zYl9vbmNlX2NvbnRyb2wpOworICBpZiAoIW9uY2VfY29udHJvbCB8fCAhaW5pdF9yb3V0aW5lKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBJbml0T25jZUV4ZWN1dGVPbmNlKFNCX1dJTjMyX0lOVEVSTkFMX09OQ0Uob25jZV9jb250cm9sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZVRyYW1wb2xpbmUsIGluaXRfcm91dGluZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwMjRiZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvcGxheWVyX2NvbXBvbmVudHNfZmFjdG9yeS5jYwpAQCAtMCwwICsxLDExNyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci9wbGF5ZXJfY29tcG9uZW50cy5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYWRhcHRpdmVfYXVkaW9fZGVjb2Rlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fZGVjb2Rlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvYXVkaW9fcmVuZGVyZXJfc2lua19pbXBsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19kZWNvZGVyX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19yZW5kZXJfYWxnb3JpdGhtLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci92aWRlb19yZW5kZXJfYWxnb3JpdGhtX2ltcGwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX3JlbmRlcmVyX3NpbmsuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX2RlY29kZXIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3ZpZGVvX2RlY29kZXIuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHBsYXllciB7CituYW1lc3BhY2UgZmlsdGVyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgUGxheWVyQ29tcG9uZW50c0ZhY3RvcnkgOiBwdWJsaWMgUGxheWVyQ29tcG9uZW50czo6RmFjdG9yeSB7CisgIGJvb2wgQ3JlYXRlU3ViQ29tcG9uZW50cygKKyAgICAgIGNvbnN0IENyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25fcGFyYW1ldGVycywKKyAgICAgIHNjb3BlZF9wdHI8QXVkaW9EZWNvZGVyPiogYXVkaW9fZGVjb2RlciwKKyAgICAgIHNjb3BlZF9wdHI8QXVkaW9SZW5kZXJlclNpbms+KiBhdWRpb19yZW5kZXJlcl9zaW5rLAorICAgICAgc2NvcGVkX3B0cjxWaWRlb0RlY29kZXI+KiB2aWRlb19kZWNvZGVyLAorICAgICAgc2NvcGVkX3B0cjxWaWRlb1JlbmRlckFsZ29yaXRobT4qIHZpZGVvX3JlbmRlcl9hbGdvcml0aG0sCisgICAgICBzY29wZWRfcmVmcHRyPFZpZGVvUmVuZGVyZXJTaW5rPiogdmlkZW9fcmVuZGVyZXJfc2luaywKKyAgICAgIHN0ZDo6c3RyaW5nKiBlcnJvcl9tZXNzYWdlKSBvdmVycmlkZSB7CisgICAgU0JfRENIRUNLKGVycm9yX21lc3NhZ2UpOworCisgICAgaWYgKGNyZWF0aW9uX3BhcmFtZXRlcnMuYXVkaW9fY29kZWMoKSAhPSBrU2JNZWRpYUF1ZGlvQ29kZWNOb25lKSB7CisgICAgICBTQl9EQ0hFQ0soYXVkaW9fZGVjb2Rlcik7CisgICAgICBTQl9EQ0hFQ0soYXVkaW9fcmVuZGVyZXJfc2luayk7CisKKyAgICAgIGF1dG8gZGVjb2Rlcl9jcmVhdG9yID0gW10oY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pIHsKKyAgICAgICAgdXNpbmcgQWFjQXVkaW9EZWNvZGVySW1wbCA9IDo6c3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpBdWRpb0RlY29kZXI7CisgICAgICAgIHVzaW5nIE9wdXNBdWRpb0RlY29kZXJJbXBsID0KKyAgICAgICAgICAgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6Om9wdXM6Ok9wdXNBdWRpb0RlY29kZXI7CisKKyAgICAgICAgaWYgKGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjID09IGtTYk1lZGlhQXVkaW9Db2RlY0FhYykgeworICAgICAgICAgIHJldHVybiBzY29wZWRfcHRyPEF1ZGlvRGVjb2Rlcj4obmV3IEFhY0F1ZGlvRGVjb2RlckltcGwoCisgICAgICAgICAgICAgIGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjLCBhdWRpb19zYW1wbGVfaW5mbywgZHJtX3N5c3RlbSkpOworICAgICAgICB9IGVsc2UgaWYgKGF1ZGlvX3NhbXBsZV9pbmZvLmNvZGVjID09IGtTYk1lZGlhQXVkaW9Db2RlY09wdXMpIHsKKyAgICAgICAgICByZXR1cm4gc2NvcGVkX3B0cjxBdWRpb0RlY29kZXI+KAorICAgICAgICAgICAgICBuZXcgT3B1c0F1ZGlvRGVjb2RlckltcGwoYXVkaW9fc2FtcGxlX2luZm8pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjb3BlZF9wdHI8QXVkaW9EZWNvZGVyPigpOworICAgICAgfTsKKworICAgICAgYXVkaW9fZGVjb2Rlci0+cmVzZXQobmV3IEFkYXB0aXZlQXVkaW9EZWNvZGVyKAorICAgICAgICAgIGNyZWF0aW9uX3BhcmFtZXRlcnMuYXVkaW9fc2FtcGxlX2luZm8oKSwKKyAgICAgICAgICBjcmVhdGlvbl9wYXJhbWV0ZXJzLmRybV9zeXN0ZW0oKSwgZGVjb2Rlcl9jcmVhdG9yKSk7CisgICAgICBhdWRpb19yZW5kZXJlcl9zaW5rLT5yZXNldChuZXcgQXVkaW9SZW5kZXJlclNpbmtJbXBsKTsKKyAgICB9CisKKyAgICBpZiAoY3JlYXRpb25fcGFyYW1ldGVycy52aWRlb19jb2RlYygpICE9IGtTYk1lZGlhVmlkZW9Db2RlY05vbmUpIHsKKyAgICAgIHVzaW5nIFZpZGVvRGVjb2RlckltcGwgPSA6OnN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6VmlkZW9EZWNvZGVyOworCisgICAgICBTQl9EQ0hFQ0sodmlkZW9fZGVjb2Rlcik7CisgICAgICBTQl9EQ0hFQ0sodmlkZW9fcmVuZGVyX2FsZ29yaXRobSk7CisgICAgICBTQl9EQ0hFQ0sodmlkZW9fcmVuZGVyZXJfc2luayk7CisKKyAgICAgIHNjb3BlZF9wdHI8VmlkZW9EZWNvZGVySW1wbD4gdmlkZW9fZGVjb2Rlcl9pbXBsKG5ldyBWaWRlb0RlY29kZXJJbXBsKAorICAgICAgICAgIGNyZWF0aW9uX3BhcmFtZXRlcnMudmlkZW9fY29kZWMoKSwgY3JlYXRpb25fcGFyYW1ldGVycy5vdXRwdXRfbW9kZSgpLAorICAgICAgICAgIGNyZWF0aW9uX3BhcmFtZXRlcnMuZGVjb2RlX3RhcmdldF9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyKCksCisgICAgICAgICAgY3JlYXRpb25fcGFyYW1ldGVycy5kcm1fc3lzdGVtKCkpKTsKKyAgICAgICp2aWRlb19yZW5kZXJlcl9zaW5rID0gTlVMTDsKKyAgICAgIHZpZGVvX2RlY29kZXItPnJlc2V0KHZpZGVvX2RlY29kZXJfaW1wbC5yZWxlYXNlKCkpOworICAgICAgdmlkZW9fcmVuZGVyX2FsZ29yaXRobS0+cmVzZXQobmV3IFZpZGVvUmVuZGVyQWxnb3JpdGhtSW1wbCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CisgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCisvLyBzdGF0aWMKK3Njb3BlZF9wdHI8UGxheWVyQ29tcG9uZW50czo6RmFjdG9yeT4gUGxheWVyQ29tcG9uZW50czo6RmFjdG9yeTo6Q3JlYXRlKCkgeworICByZXR1cm4gbWFrZV9zY29wZWRfcHRyPFBsYXllckNvbXBvbmVudHM6OkZhY3Rvcnk+KAorICAgICAgbmV3IFBsYXllckNvbXBvbmVudHNGYWN0b3J5KTsKK30KKworLy8gc3RhdGljCitib29sIFZpZGVvRGVjb2Rlcjo6T3V0cHV0TW9kZVN1cHBvcnRlZChTYlBsYXllck91dHB1dE1vZGUgb3V0cHV0X21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhVmlkZW9Db2RlYyBjb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pIHsKKyAgcmV0dXJuIG91dHB1dF9tb2RlID09IGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBmaWx0ZXIKK30gIC8vIG5hbWVzcGFjZSBwbGF5ZXIKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvcGxheXJlYWR5X2xpY2Vuc2UuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3BsYXlyZWFkeV9saWNlbnNlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMWRmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3BsYXlyZWFkeV9saWNlbnNlLmNjCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZHJtX3N5c3RlbV9wbGF5cmVhZHkuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitzY29wZWRfcmVmcHRyPERybVN5c3RlbVBsYXlyZWFkeTo6TGljZW5zZT4gRHJtU3lzdGVtUGxheXJlYWR5OjpMaWNlbnNlOjpDcmVhdGUoCisgICAgY29uc3Qgdm9pZCogaW5pdGlhbGl6YXRpb25fZGF0YSwKKyAgICBpbnQgaW5pdGlhbGl6YXRpb25fZGF0YV9zaXplKSB7CisgIHJldHVybiBOVUxMOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJlYjNhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zZXRfbm9uX2Jsb2NraW5nX2ludGVybmFsLmNjCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2Jvb2wgU2V0Tm9uQmxvY2tpbmcoU09DS0VUIHNvY2tldF9oYW5kbGUpIHsKKyAgdV9sb25nIGtPbmUgPSAxOworICBib29sIHN1Y2Nlc3MgPSAoaW9jdGxzb2NrZXQoc29ja2V0X2hhbmRsZSwgRklPTkJJTywgJmtPbmUpID09IDApOworICByZXR1cm4gc3VjY2VzczsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NldF9ub25fYmxvY2tpbmdfaW50ZXJuYWwuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NldF9ub25fYmxvY2tpbmdfaW50ZXJuYWwuaApAQCAtMCwwICsxLDMzIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9TRVRfTk9OX0JMT0NLSU5HX0lOVEVSTkFMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU0VUX05PTl9CTE9DS0lOR19JTlRFUk5BTF9IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9pbnRlcm5hbF9vbmx5LmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworLy8gTWFrZXMgdGhlIHNvY2tldCBmaWxlIGRlc2NyaXB0b3Igbm9uLWJsb2NraW5nLgorYm9vbCBTZXROb25CbG9ja2luZyhTT0NLRVQgc29ja2V0X2hhbmRsZSk7CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU0VUX05PTl9CTE9DS0lOR19JTlRFUk5BTF9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfYWNjZXB0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfYWNjZXB0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Y2E3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9hY2NlcHQuY2MKQEAgLTAsMCArMSw1MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitTYlNvY2tldCBTYlNvY2tldEFjY2VwdChTYlNvY2tldCBzb2NrZXQpIHsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIHJldHVybiBrU2JTb2NrZXRJbnZhbGlkOworICB9CisKKyAgU0JfRENIRUNLKHNvY2tldC0+c29ja2V0X2hhbmRsZSAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgU09DS0VUIHNvY2tldF9oYW5kbGUgPSBhY2NlcHQoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBudWxscHRyLCBudWxscHRyKTsKKyAgaWYgKHNvY2tldF9oYW5kbGUgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICBzb2NrZXQtPmVycm9yID0gc2J3aW4zMjo6VHJhbnNsYXRlU29ja2V0RXJyb3JTdGF0dXMoV1NBR2V0TGFzdEVycm9yKCkpOworICAgIHJldHVybiBrU2JTb2NrZXRJbnZhbGlkOworICB9CisKKyAgLy8gQWxsIFN0YXJib2FyZCBzb2NrZXRzIGFyZSBub24tYmxvY2tpbmcsIHNvIGxldCdzIGVuc3VyZSBpdC4KKyAgaWYgKCFzYndpbjMyOjpTZXROb25CbG9ja2luZyhzb2NrZXRfaGFuZGxlKSkgeworICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nLCB3ZSdsbCBjbGVhbiB1cCBhbmQgcmV0dXJuIGZhaWx1cmUuCisgICAgc29ja2V0LT5lcnJvciA9IHNid2luMzI6OlRyYW5zbGF0ZVNvY2tldEVycm9yU3RhdHVzKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICBjbG9zZXNvY2tldChzb2NrZXRfaGFuZGxlKTsKKyAgICByZXR1cm4ga1NiU29ja2V0SW52YWxpZDsKKyAgfQorCisgIHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRPazsKKworICAvLyBBZG9wdCB0aGUgbmV3bHkgYWNjZXB0ZWQgc29ja2V0LgorICByZXR1cm4gbmV3IFNiU29ja2V0UHJpdmF0ZShzb2NrZXQtPmFkZHJlc3NfdHlwZSwgc29ja2V0LT5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JTb2NrZXRQcml2YXRlOjpCaW5kVGFyZ2V0OjprQWNjZXB0ZWQpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfYmluZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2JpbmQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmZDk3YgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2JpbmQuY2MKQEAgLTAsMCArMSw5NSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgSXNJcHY2SW5hZGRyQW55KGNvbnN0IFNiU29ja2V0QWRkcmVzcyogbG9jYWxfYWRkcmVzcykgeworICByZXR1cm4gc3RhcmJvYXJkOjpjb21tb246Ok1lbW9yeUlzWmVybyhsb2NhbF9hZGRyZXNzLT5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYndpbjMyOjprQWRkcmVzc0xlbmd0aElwdjYpOworfQorYm9vbCBJc0lwdjRJbmFkZHJBbnkoY29uc3QgU2JTb2NrZXRBZGRyZXNzKiBsb2NhbF9hZGRyZXNzKSB7CisgIHJldHVybiBzdGFyYm9hcmQ6OmNvbW1vbjo6TWVtb3J5SXNaZXJvKGxvY2FsX2FkZHJlc3MtPmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNid2luMzI6OmtBZGRyZXNzTGVuZ3RoSXB2NCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitTYlNvY2tldEVycm9yIFNiU29ja2V0QmluZChTYlNvY2tldCBzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTYlNvY2tldEFkZHJlc3MqIGxvY2FsX2FkZHJlc3MpIHsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBJbnZhbGlkIHNvY2tldCI7CisgICAgcmV0dXJuIGtTYlNvY2tldEVycm9yRmFpbGVkOworICB9CisKKyAgc2J3aW4zMjo6U29ja0FkZHIgc29ja19hZGRyOworICBpZiAoIXNvY2tfYWRkci5Gcm9tU2JTb2NrZXRBZGRyZXNzKGxvY2FsX2FkZHJlc3MpKSB7CisgICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEludmFsaWQgYWRkcmVzcyI7CisgICAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0gc2J3aW4zMjo6VHJhbnNsYXRlU29ja2V0RXJyb3JTdGF0dXMoRUlOVkFMKSk7CisgIH0KKworICBTQl9EQ0hFQ0soc29ja2V0LT5zb2NrZXRfaGFuZGxlICE9IElOVkFMSURfU09DS0VUKTsKKyAgaWYgKGxvY2FsX2FkZHJlc3MtPnR5cGUgIT0gc29ja2V0LT5hZGRyZXNzX3R5cGUpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW5jb21wYXRpYmxlIGFkZHJlc3NlczogIgorICAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBhcmd1bWVudCB0eXBlID0gIiA8PCBsb2NhbF9hZGRyZXNzLT50eXBlOworICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IHNid2luMzI6OlRyYW5zbGF0ZVNvY2tldEVycm9yU3RhdHVzKEVBRk5PU1VQUE9SVCkpOworICB9CisKKyAgc3dpdGNoIChsb2NhbF9hZGRyZXNzLT50eXBlKSB7CisgICAgY2FzZSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjY6CisgICAgICBpZiAoIUlzSXB2NkluYWRkckFueShsb2NhbF9hZGRyZXNzKSkgeworICAgICAgICBzb2NrZXQtPmJvdW5kX3RvID0gU2JTb2NrZXRQcml2YXRlOjpCaW5kVGFyZ2V0OjprT3RoZXI7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBzb2NrZXQtPmJvdW5kX3RvID0gU2JTb2NrZXRQcml2YXRlOjpCaW5kVGFyZ2V0OjprQW55OworCisgICAgICAvLyBXaGVuIGJpbmRpbmcgdG8gdGhlIElQVjYgYW55IGFkZHJlc3MsIGVuc3VyZSB0aGF0IHRoZSBJUFY2X1Y2T05MWSBmbGFnCisgICAgICAvLyBpcyBvZmYgdG8gYWxsb3cgaW5jb21pbmcgSVBWNCBjb25uZWN0aW9ucyBvbiB0aGUgc2FtZSBzb2NrZXQuCisgICAgICAvLyBTZWUgaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM0OTMudHh0IGZvciBkZXRhaWxzLgorICAgICAgaWYgKCFzYndpbjMyOjpTZXRCb29sZWFuU29ja2V0T3B0aW9uKHNvY2tldCwgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVBWNl9WNk9OTFkiLCBmYWxzZSkpIHsKKyAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGVycm9ycywgYXNzdW1lIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFzIGV4cGVjdGVkLgorICAgICAgICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2s7CisgICAgICB9CisKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OgorICAgICAgc29ja2V0LT5ib3VuZF90byA9IElzSXB2NEluYWRkckFueShsb2NhbF9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFNiU29ja2V0UHJpdmF0ZTo6QmluZFRhcmdldDo6a0FueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFNiU29ja2V0UHJpdmF0ZTo6QmluZFRhcmdldDo6a090aGVyOworICAgICAgYnJlYWs7CisgIH0KKworICBpbnQgcmVzdWx0ID0KKyAgICAgIGJpbmQoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBzb2NrX2FkZHIuc29ja2FkZHIoKSwgc29ja19hZGRyLmxlbmd0aCk7CisgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgaW50IGxhc3RfZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18KKyAgICAgICAgICAgICAgICAgICA8PCAiOiBCaW5kIGZhaWxlZC4gbGFzdF9lcnJvcj0iIDw8IGxhc3RfZXJyb3I7CisgICAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0gc2J3aW4zMjo6VHJhbnNsYXRlU29ja2V0RXJyb3JTdGF0dXMobGFzdF9lcnJvcikpOworICB9CisKKyAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2spOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY2xlYXJfbGFzdF9lcnJvci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2NsZWFyX2xhc3RfZXJyb3IuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2NsZWFyX2xhc3RfZXJyb3IuY2MKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK2Jvb2wgU2JTb2NrZXRDbGVhckxhc3RFcnJvcihTYlNvY2tldCBzb2NrZXQpIHsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRPazsKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9jb25uZWN0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY29ubmVjdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjE4ZWZjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY29ubmVjdC5jYwpAQCAtMCwwICsxLDU5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK1NiU29ja2V0RXJyb3IgU2JTb2NrZXRDb25uZWN0KFNiU29ja2V0IHNvY2tldCwgY29uc3QgU2JTb2NrZXRBZGRyZXNzKiBhZGRyZXNzKSB7CisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICByZXR1cm4ga1NiU29ja2V0RXJyb3JGYWlsZWQ7CisgIH0KKworICBzYndpbjMyOjpTb2NrQWRkciBzb2NrX2FkZHI7CisgIGlmICghc29ja19hZGRyLkZyb21TYlNvY2tldEFkZHJlc3MoYWRkcmVzcykpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW52YWxpZCBhZGRyZXNzIjsKKyAgICByZXR1cm4gKHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRFcnJvckZhaWxlZCk7CisgIH0KKworICBTQl9EQ0hFQ0soc29ja2V0LT5zb2NrZXRfaGFuZGxlICE9IElOVkFMSURfU09DS0VUKTsKKyAgaWYgKGFkZHJlc3MtPnR5cGUgIT0gc29ja2V0LT5hZGRyZXNzX3R5cGUpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogSW5jb21wYXRpYmxlIGFkZHJlc3NlczogIgorICAgICAgICAgICAgICAgICAgIDw8ICJzb2NrZXQgdHlwZSA9ICIgPDwgc29ja2V0LT5hZGRyZXNzX3R5cGUKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBhcmd1bWVudCB0eXBlID0gIiA8PCBhZGRyZXNzLT50eXBlOworICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkKTsKKyAgfQorCisgIGludCByZXN1bHQgPQorICAgICAgY29ubmVjdChzb2NrZXQtPnNvY2tldF9oYW5kbGUsIHNvY2tfYWRkci5zb2NrYWRkcigpLCBzb2NrX2FkZHIubGVuZ3RoKTsKKworICBpZiAocmVzdWx0ICE9IFNPQ0tFVF9FUlJPUikgeworICAgIHNvY2tldC0+Ym91bmRfdG8gPSBTYlNvY2tldFByaXZhdGU6OkJpbmRUYXJnZXQ6OmtBbnk7CisgICAgcmV0dXJuIChzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2spOworICB9CisKKyAgY29uc3QgaW50IGxhc3RfZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgaWYgKGxhc3RfZXJyb3IgPT0gV1NBRVdPVUxEQkxPQ0spIHsKKyAgICBzb2NrZXQtPmJvdW5kX3RvID0gU2JTb2NrZXRQcml2YXRlOjpCaW5kVGFyZ2V0OjprQW55OworICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldFBlbmRpbmcpOworICB9CisKKyAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IGNvbm5lY3QgZmFpbGVkOiAiIDw8IGxhc3RfZXJyb3I7CisgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2NyZWF0ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2NyZWF0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NlYWFmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY3JlYXRlLmNjCkBAIC0wLDAgKzEsMTE5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitTYlNvY2tldCBTYlNvY2tldENyZWF0ZShTYlNvY2tldEFkZHJlc3NUeXBlIGFkZHJlc3NfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0UHJvdG9jb2wgcHJvdG9jb2wpIHsKKyAgaW50IHNvY2tldF9kb21haW47CisgIHN3aXRjaCAoYWRkcmVzc190eXBlKSB7CisgICAgY2FzZSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjQ6CisgICAgICBzb2NrZXRfZG9tYWluID0gQUZfSU5FVDsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OgorICAgICAgc29ja2V0X2RvbWFpbiA9IEFGX0lORVQ2OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKTsKKyAgICAgIHJldHVybiBrU2JTb2NrZXRJbnZhbGlkOworICB9CisKKyAgaW50IHNvY2tldF90eXBlOworICBpbnQgc29ja2V0X3Byb3RvY29sOworICBzd2l0Y2ggKHByb3RvY29sKSB7CisgICAgY2FzZSBrU2JTb2NrZXRQcm90b2NvbFRjcDoKKyAgICAgIHNvY2tldF90eXBlID0gU09DS19TVFJFQU07CisgICAgICBzb2NrZXRfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKyAgICAgIGJyZWFrOworICAgIGNhc2Uga1NiU29ja2V0UHJvdG9jb2xVZHA6CisgICAgICBzb2NrZXRfdHlwZSA9IFNPQ0tfREdSQU07CisgICAgICBzb2NrZXRfcHJvdG9jb2wgPSBJUFBST1RPX1VEUDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgICByZXR1cm4ga1NiU29ja2V0SW52YWxpZDsKKyAgfQorCisgIC8vIFdTQVNvY2tldCB3aXRoIGR3RmxhZ3M9MCwgaW5zdGVhZCBvZiBzb2NrZXQoKSBjcmVhdGVzIHNvY2tldHMgdGhhdCBkbyBub3QKKyAgLy8gc3VwcG9ydCBvdmVybGFwcGVkIElPLgorICBTT0NLRVQgc29ja2V0X2hhbmRsZSA9CisgICAgICBXU0FTb2NrZXRXKHNvY2tldF9kb21haW4sIHNvY2tldF90eXBlLCBzb2NrZXRfcHJvdG9jb2wsIG51bGxwdHIsIDAsIDApOworICBpZiAoc29ja2V0X2hhbmRsZSA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgIHJldHVybiBrU2JTb2NrZXRJbnZhbGlkOworICB9CisKKyAgLy8gRnJvbQorICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9jYzEzNjEwMyh2PXZzLjg1KS5hc3B4OgorICAvLyAiV2hlbiB0aGUgVGFyZ2V0T3NWZXJzaW9uIG1lbWJlciBpcyBzZXQgdG8gYSB2YWx1ZSBmb3IgV2luZG93cyBWaXN0YSBvcgorICAvLyBsYXRlciwgcmVkdWN0aW9ucyB0byB0aGUgVENQIHJlY2VpdmUgYnVmZmVyIHNpemUgb24gdGhpcyBzb2NrZXQgdXNpbmcgdGhlCisgIC8vIFNPX1JDVkJVRiBzb2NrZXQgb3B0aW9uIGFyZSBhbGxvd2VkIGV2ZW4gYWZ0ZXIgYSBUQ1AgY29ubmVjdGlvbiBoYXMgYmVlbgorICAvLyBlc3RhYmxpc2htZW50LiIKKyAgLy8gIldoZW4gdGhlIFRhcmdldE9zVmVyc2lvbiBtZW1iZXIgaXMgc2V0IHRvIGEgdmFsdWUgZm9yIFdpbmRvd3MgVmlzdGEgb3IKKyAgLy8gbGF0ZXIsIHJlY2VpdmUgd2luZG93IGF1dG8tdHVuaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBUQ1Agd2luZG93IHNjYWxlCisgIC8vIGZhY3RvciBpcyByZWR1Y2VkIHRvIDIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA4LiIKKworICAvLyBUaGUgbWFpbiBpbXBldHVzIGZvciB0aGlzIGNoYW5nZToKKworICAvLyAiVGhlIFdzYUJlaGF2aW9yQXV0b1R1bmluZyBvcHRpb24gaXMgbmVlZGVkIG9uIFdpbmRvd3MgVmlzdGEgZm9yIHNvbWUKKyAgLy8gSW50ZXJuZXQgZ2F0ZXdheSBkZXZpY2VzIGFuZCBmaXJld2FsbHMgdGhhdCBkbyBub3QgY29ycmVjdGx5IHN1cHBvcnQgZGF0YQorICAvLyBmbG93cyBmb3IgVENQIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBXU29wdCBleHRlbnNpb24gYW5kIGEgd2luZG93cyBzY2FsZQorICAvLyBmYWN0b3IuIE9uIFdpbmRvd3MgVmlzdGEsIGEgcmVjZWl2ZXIgYnkgZGVmYXVsdCBuZWdvdGlhdGVzIGEgd2luZG93IHNjYWxlCisgIC8vIGZhY3RvciBvZiA4IGZvciBhIG1heGltdW0gdHJ1ZSB3aW5kb3cgc2l6ZSBvZiAxNiw3NzYsOTYwIGJ5dGVzLiBXaGVuIGRhdGEKKyAgLy8gYmVnaW5zIHRvIGZsb3cgb24gYSBmYXN0IGxpbmssIFdpbmRvd3MgaW5pdGlhbGx5IHN0YXJ0cyB3aXRoIGEgNjQgS2lsb2J5dGUKKyAgLy8gdHJ1ZSB3aW5kb3cgc2l6ZSBieSBzZXR0aW5nIHRoZSBXaW5kb3cgZmllbGQgb2YgdGhlIFRDUCBoZWFkZXIgdG8gMjU2IGFuZAorICAvLyBzZXR0aW5nIHRoZSB3aW5kb3cgc2NhbGUgZmFjdG9yIHRvIDggaW4gdGhlIFRDUCBvcHRpb25zICgyNTYqMl44PTY0S0IpLgorICAvLyBTb21lIEludGVybmV0IGdhdGV3YXkgZGV2aWNlcyBhbmQgZmlyZXdhbGxzIGlnbm9yZSB0aGUgd2luZG93IHNjYWxlIGZhY3RvcgorICAvLyBhbmQgb25seSBsb29rIGF0IHRoZSBhZHZlcnRpc2VkIFdpbmRvdyBmaWVsZCBpbiB0aGUgVENQIGhlYWRlciBzcGVjaWZpZWQgYXMKKyAgLy8gMjU2LCBhbmQgZHJvcCBpbmNvbWluZyBwYWNrZXRzIGZvciB0aGUgY29ubmVjdGlvbiB0aGF0IGNvbnRhaW4gbW9yZSB0aGFuCisgIC8vIDI1NiBieXRlcyBvZiBUQ1AgZGF0YS4gVG8gc3VwcG9ydCBUQ1AgcmVjZWl2ZSB3aW5kb3cgc2NhbGluZywgYSBnYXRld2F5CisgIC8vIGRldmljZSBvciBmaXJld2FsbCBtdXN0IG1vbml0b3IgdGhlIFRDUCBoYW5kc2hha2UgYW5kIHRyYWNrIHRoZSBuZWdvdGlhdGVkCisgIC8vIHdpbmRvdyBzY2FsZSBmYWN0b3IgYXMgcGFydCBvZiB0aGUgVENQIGNvbm5lY3Rpb24gZGF0YS4gQWxzbyBzb21lCisgIC8vIGFwcGxpY2F0aW9ucyBhbmQgVENQIHN0YWNrIGltcGxlbWVudGF0aW9ucyBvbiBvdGhlciBwbGF0Zm9ybXMgaWdub3JlIHRoZQorICAvLyBUQ1AgV1NvcHQgZXh0ZW5zaW9uIGFuZCB0aGUgd2luZG93IHNjYWxpbmcgZmFjdG9yLiBTbyB0aGUgcmVtb3RlIGhvc3QKKyAgLy8gc2VuZGluZyB0aGUgZGF0YSBtYXkgc2VuZCBkYXRhIGF0IHRoZSByYXRlIGFkdmVydGlzZWQgaW4gdGhlIFdpbmRvdyBmaWVsZAorICAvLyBvZiB0aGUgVENQIGhlYWRlciAoMjU2IGJ5dGVzKS4gVGhpcyBjYW4gcmVzdWx0IGluIGRhdGEgYmVpbmcgcmVjZWl2ZWQgdmVyeQorICAvLyBzbG93bHkgYnkgdGhlIHJlY2VpdmVyLiIKKworICBpZiAocHJvdG9jb2wgPT0ga1NiU29ja2V0UHJvdG9jb2xUY3ApIHsKKyAgICBXU0FfQ09NUEFUSUJJTElUWV9NT0RFIGNvbXBhdGliaWxpdHlfbW9kZSA9IHtXc2FCZWhhdmlvckFsbCwgTlRERElfVklTVEF9OworCisgICAgRFdPUkQga1plcm8gPSAwOworICAgIGludCByZXR1cm5fdmFsdWUgPSBXU0FJb2N0bCgKKyAgICAgICAgc29ja2V0X2hhbmRsZSwgU0lPX1NFVF9DT01QQVRJQklMSVRZX01PREUsICZjb21wYXRpYmlsaXR5X21vZGUsCisgICAgICAgIHNpemVvZihXU0FfQ09NUEFUSUJJTElUWV9NT0RFKSwgbnVsbHB0ciwgMCwgJmtaZXJvLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAocmV0dXJuX3ZhbHVlID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgY2xvc2Vzb2NrZXQoc29ja2V0X2hhbmRsZSk7CisgICAgICByZXR1cm4ga1NiU29ja2V0SW52YWxpZDsKKyAgICB9CisgIH0KKworICAvLyBBbGwgU3RhcmJvYXJkIHNvY2tldHMgYXJlIG5vbi1ibG9ja2luZywgc28gbGV0J3MgZW5zdXJlIGl0LgorICBpZiAoIXNid2luMzI6OlNldE5vbkJsb2NraW5nKHNvY2tldF9oYW5kbGUpKSB7CisgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIHdlJ2xsIGNsZWFuIHVwIGFuZCByZXR1cm4gZmFpbHVyZS4KKyAgICBjbG9zZXNvY2tldChzb2NrZXRfaGFuZGxlKTsKKyAgICByZXR1cm4ga1NiU29ja2V0SW52YWxpZDsKKyAgfQorCisgIHJldHVybiBuZXcgU2JTb2NrZXRQcml2YXRlKGFkZHJlc3NfdHlwZSwgcHJvdG9jb2wsIHNvY2tldF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0UHJpdmF0ZTo6QmluZFRhcmdldDo6a1VuYm91bmQpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfZGVzdHJveS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2Rlc3Ryb3kuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkYTQxZQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2Rlc3Ryb3kuY2MKQEAgLTAsMCArMSwzOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldF93YWl0ZXIuaCIKKworYm9vbCBTYlNvY2tldERlc3Ryb3koU2JTb2NrZXQgc29ja2V0KSB7CisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBTQl9EQ0hFQ0soc29ja2V0LT5zb2NrZXRfaGFuZGxlICE9IElOVkFMSURfU09DS0VUKTsKKworICBpZiAoc29ja2V0LT53YWl0ZXIgIT0gbnVsbHB0cikgeworICAgIGJvb2wgcmVzdWx0ID0gU2JTb2NrZXRXYWl0ZXJSZW1vdmUoc29ja2V0LT53YWl0ZXIsIHNvY2tldCk7CisgICAgU0JfRENIRUNLKHJlc3VsdCk7CisgIH0KKworICBib29sIHJlc3VsdCA9IGNsb3Nlc29ja2V0KHNvY2tldC0+c29ja2V0X2hhbmRsZSkgIT0gU09DS0VUX0VSUk9SOworCisgIGRlbGV0ZSBzb2NrZXQ7CisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9mcmVlX3Jlc29sdXRpb24uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9mcmVlX3Jlc29sdXRpb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0ZTQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ZyZWVfcmVzb2x1dGlvbi5jYwpAQCAtMCwwICsxLDI5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKwordm9pZCBTYlNvY2tldEZyZWVSZXNvbHV0aW9uKFNiU29ja2V0UmVzb2x1dGlvbiogcmVzb2x1dGlvbikgeworICBpZiAoIXJlc29sdXRpb24pIHsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAocmVzb2x1dGlvbi0+YWRkcmVzc2VzKSB7CisgICAgZGVsZXRlW10gcmVzb2x1dGlvbi0+YWRkcmVzc2VzOworICB9CisKKyAgZGVsZXRlIHJlc29sdXRpb247Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9nZXRfaW50ZXJmYWNlX2FkZHJlc3MuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9nZXRfaW50ZXJmYWNlX2FkZHJlc3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQwOTI5YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYwpAQCAtMCwwICsxLDI4OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlIDxpZmRlZi5oPgorI2luY2x1ZGUgPGlwaGxwYXBpLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bWVtb3J5PgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9ieXRlX3N3YXAuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCituYW1lc3BhY2Ugc2J3aW4zMiA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjsKKworbmFtZXNwYWNlIHsKK2NvbnN0IFVMT05HIGtEZWZhdWx0QWRhcHRlckluZm9CdWZmZXJTaXplSW5CeXRlcyA9IDE2ICogMTAyNDsKKworYm9vbCBJc0FueUFkZHJlc3MoY29uc3QgU2JTb2NrZXRBZGRyZXNzJiBhZGRyZXNzKSB7CisgIHN3aXRjaCAoYWRkcmVzcy50eXBlKSB7CisgICAgY2FzZSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjQ6CisgICAgICByZXR1cm4gKGFkZHJlc3MuYWRkcmVzc1swXSA9PSAwICYmIGFkZHJlc3MuYWRkcmVzc1sxXSA9PSAwICYmCisgICAgICAgICAgICAgIGFkZHJlc3MuYWRkcmVzc1syXSA9PSAwICYmIGFkZHJlc3MuYWRkcmVzc1szXSA9PSAwKTsKKyAgICBjYXNlIGtTYlNvY2tldEFkZHJlc3NUeXBlSXB2NjogeworICAgICAgYm9vbCBmb3VuZF9ub256ZXJvID0gZmFsc2U7CisgICAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IHNid2luMzI6OmtBZGRyZXNzTGVuZ3RoSXB2NjsgKytpKSB7CisgICAgICAgIGZvdW5kX25vbnplcm8gfD0gKGFkZHJlc3MuYWRkcmVzc1tpXSAhPSAwKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiAhZm91bmRfbm9uemVybzsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBhZGRyZXNzIHR5cGUgIiA8PCBhZGRyZXNzLnR5cGU7CisgICAgICBicmVhazsKKyAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHZW5lcmF0ZU5ldE1hc2tGcm9tUHJlZml4TGVuZ3RoKFVJTlQ4IHByZWZpeF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyKiBjb25zdCBhZGRyZXNzX2JlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQzMiogY29uc3QgYWRkcmVzc19lbmQpIHsKKyAgU0JfRENIRUNLKGFkZHJlc3NfZW5kID49IGFkZHJlc3NfYmVnaW4pOworICBTQl9EQ0hFQ0soKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3NfZW5kKSAtCisgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzc19iZWdpbikpICUKKyAgICAgICAgICAgICAgICA0ID09CisgICAgICAgICAgICAwKTsKKyAgVUlOVDggb25lc19sZWZ0ID0gcHJlZml4X2xlbmd0aDsKKyAgY29uc3QgaW50IGtCaXRzSW5PbmVEV09SRCA9IHNpemVvZihVSU5UMzIpICogODsKKyAgZm9yIChVSU5UMzIqIGl0ZXJhdG9yID0gYWRkcmVzc19iZWdpbjsgaXRlcmF0b3IgIT0gYWRkcmVzc19lbmQ7ICsraXRlcmF0b3IpIHsKKyAgICBVSU5UOCBvbmVzX2luX3RoaXNfZHdvcmQgPSBzdGQ6Om1pbjxVSU5UOD4oa0JpdHNJbk9uZURXT1JELCBvbmVzX2xlZnQpOworICAgIFVJTlQ2NCBtYXNrX3ZhbHVlID0KKyAgICAgICAga1NiVUludDY0TWF4IC0gKCgxVUxMIDw8IChrQml0c0luT25lRFdPUkQgLSBvbmVzX2luX3RoaXNfZHdvcmQpKSAtIDEpOworICAgICppdGVyYXRvciA9CisgICAgICAgIFNCX0hPU1RfVE9fTkVUX1UzMihzdGF0aWNfY2FzdDxVSU5UMzI+KG1hc2tfdmFsdWUgJiBrU2JVSW50NjRNYXgpKTsKKyAgICBvbmVzX2xlZnQgLT0gb25lc19pbl90aGlzX2R3b3JkOworICB9Cit9CisKK2Jvb2wgUG9wdWxhdGVJbnRlcmZhY2VBZGRyZXNzKGNvbnN0IElQX0FEQVBURVJfVU5JQ0FTVF9BRERSRVNTJiB1bmljYXN0X2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldEFkZHJlc3MqIG91dF9pbnRlcmZhY2VfaXApIHsKKyAgaWYgKCFvdXRfaW50ZXJmYWNlX2lwKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBjb25zdCBTT0NLRVRfQUREUkVTUyYgYWRkcmVzcyA9IHVuaWNhc3RfYWRkcmVzcy5BZGRyZXNzOworICBzYndpbjMyOjpTb2NrQWRkciBhZGRyOworICByZXR1cm4gYWRkci5Gcm9tU29ja2FkZHIoYWRkcmVzcy5scFNvY2thZGRyKSAmJgorICAgICAgICAgYWRkci5Ub1NiU29ja2V0QWRkcmVzcyhvdXRfaW50ZXJmYWNlX2lwKTsKK30KKworYm9vbCBQb3B1bGF0ZU5ldG1hc2soY29uc3QgSVBfQURBUFRFUl9VTklDQVNUX0FERFJFU1MmIHVuaWNhc3RfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0QWRkcmVzcyogb3V0X25ldG1hc2spIHsKKyAgaWYgKCFvdXRfbmV0bWFzaykgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgY29uc3QgU09DS0VUX0FERFJFU1MmIGFkZHJlc3MgPSB1bmljYXN0X2FkZHJlc3MuQWRkcmVzczsKKyAgaWYgKGFkZHJlc3MubHBTb2NrYWRkciA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGNvbnN0IEFERFJFU1NfRkFNSUxZJiBmYW1pbHkgPSBhZGRyZXNzLmxwU29ja2FkZHItPnNhX2ZhbWlseTsKKworICBzd2l0Y2ggKGZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgIG91dF9uZXRtYXNrLT50eXBlID0ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgIG91dF9uZXRtYXNrLT50eXBlID0ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKSA8PCAiSW52YWxpZCBmYW1pbHkgIiA8PCBmYW1pbHk7CisgICAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBVSU5UMzIqIGNvbnN0IGJlZ2luX25ldG1hc2sgPQorICAgICAgcmVpbnRlcnByZXRfY2FzdDxVSU5UMzIqPigmKG91dF9uZXRtYXNrLT5hZGRyZXNzWzBdKSk7CisgIFVJTlQzMiogY29uc3QgZW5kX25ldG1hc2sgPQorICAgICAgYmVnaW5fbmV0bWFzayArIFNCX0FSUkFZX1NJWkUob3V0X25ldG1hc2stPmFkZHJlc3MpIC8gc2l6ZW9mKFVJTlQzMik7CisKKyAgR2VuZXJhdGVOZXRNYXNrRnJvbVByZWZpeExlbmd0aCh1bmljYXN0X2FkZHJlc3MuT25MaW5rUHJlZml4TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luX25ldG1hc2ssIGVuZF9uZXRtYXNrKTsKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR2V0TmV0bWFza0ZvckludGVyZmFjZUFkZHJlc3MoY29uc3QgU2JTb2NrZXRBZGRyZXNzJiBpbnRlcmZhY2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JTb2NrZXRBZGRyZXNzKiBvdXRfbmV0bWFzaykgeworICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBhZGFwdGVyX2luZm9fbWVtb3J5X2Jsb2NrOworICBpZiAoIXNid2luMzI6OkdldEFkYXB0ZXJzKAorICAgICAgaW50ZXJmYWNlX2FkZHJlc3MudHlwZSwgJmFkYXB0ZXJfaW5mb19tZW1vcnlfYmxvY2spKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGNvbnN0IHZvaWQqIGNvbnN0IGludGVyZmFjZV9hZGRyZXNzX2J1ZmZlciA9CisgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQqIGNvbnN0PihpbnRlcmZhY2VfYWRkcmVzcy5hZGRyZXNzKTsKKyAgZm9yIChQSVBfQURBUFRFUl9BRERSRVNTRVMgYWRhcHRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UElQX0FEQVBURVJfQUREUkVTU0VTPigKKyAgICAgICAgICAgYWRhcHRlcl9pbmZvX21lbW9yeV9ibG9jay5nZXQoKSk7CisgICAgICAgYWRhcHRlciAhPSBudWxscHRyOyBhZGFwdGVyID0gYWRhcHRlci0+TmV4dCkgeworICAgIGlmICgoYWRhcHRlci0+T3BlclN0YXR1cyAhPSBJZk9wZXJTdGF0dXNVcCkgfHwKKyAgICAgICAgIXNid2luMzI6OklzSWZUeXBlRXRoZXJuZXQoYWRhcHRlci0+SWZUeXBlKSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgZm9yIChQSVBfQURBUFRFUl9VTklDQVNUX0FERFJFU1MgdW5pY2FzdF9hZGRyZXNzID0KKyAgICAgICAgICAgICBhZGFwdGVyLT5GaXJzdFVuaWNhc3RBZGRyZXNzOworICAgICAgICAgdW5pY2FzdF9hZGRyZXNzICE9IG51bGxwdHI7IHVuaWNhc3RfYWRkcmVzcyA9IHVuaWNhc3RfYWRkcmVzcy0+TmV4dCkgeworICAgICAgc2J3aW4zMjo6U29ja0FkZHIgYWRkcjsKKyAgICAgIGlmICghYWRkci5Gcm9tU29ja2FkZHIodW5pY2FzdF9hZGRyZXNzLT5BZGRyZXNzLmxwU29ja2FkZHIpKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBjb25zdCB2b2lkKiB1bmljYXN0X2FkZHJlc3NfYnVmZmVyID0gbnVsbHB0cjsKKyAgICAgIGludCBieXRlc190b19jaGVjayA9IDA7CisKKyAgICAgIHN3aXRjaCAoaW50ZXJmYWNlX2FkZHJlc3MudHlwZSkgeworICAgICAgICBjYXNlIGtTYlNvY2tldEFkZHJlc3NUeXBlSXB2NDoKKyAgICAgICAgICB1bmljYXN0X2FkZHJlc3NfYnVmZmVyID0KKyAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJihhZGRyLnNvY2thZGRyX2luKCktPnNpbl9hZGRyKSk7CisgICAgICAgICAgYnl0ZXNfdG9fY2hlY2sgPSBzYndpbjMyOjprQWRkcmVzc0xlbmd0aElwdjQ7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OgorICAgICAgICAgIHVuaWNhc3RfYWRkcmVzc19idWZmZXIgPQorICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPigmKGFkZHIuc29ja2FkZHJfaW42KCktPnNpbjZfYWRkcikpOworICAgICAgICAgIGJ5dGVzX3RvX2NoZWNrID0gc2J3aW4zMjo6a0FkZHJlc3NMZW5ndGhJcHY2OworICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFNCX0RMT0coRVJST1IpIDw8ICJJbnZhbGlkIGludGVyZmFjZSBhZGRyZXNzIHR5cGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGludGVyZmFjZV9hZGRyZXNzLnR5cGU7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAobWVtY21wKHVuaWNhc3RfYWRkcmVzc19idWZmZXIsIGludGVyZmFjZV9hZGRyZXNzX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgYnl0ZXNfdG9fY2hlY2spICE9IDApIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIGlmIChQb3B1bGF0ZU5ldG1hc2soKnVuaWNhc3RfYWRkcmVzcywgb3V0X25ldG1hc2spKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJc1VuaXF1ZUxvY2FsQWRkcmVzcyhjb25zdCB1bnNpZ25lZCBjaGFyIGlwWzE2XSkgeworICAvLyBVbmlxdWUgTG9jYWwgQWRkcmVzc2VzIGFyZSBpbiBmZDA4OjovOC4KKyAgcmV0dXJuIGlwWzBdID09IDB4ZmQgJiYgaXBbMV0gPT0gMHgwODsKK30KKworYm9vbCBGaW5kSW50ZXJmYWNlSVAoY29uc3QgU2JTb2NrZXRBZGRyZXNzVHlwZSBhZGRyZXNzX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldEFkZHJlc3MqIG91dF9pbnRlcmZhY2VfaXAsCisgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldEFkZHJlc3MqIG91dF9uZXRtYXNrKSB7CisgIGlmIChvdXRfaW50ZXJmYWNlX2lwID09IG51bGxwdHIpIHsKKyAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIm91dF9pbnRlcmZhY2VfaXAgbXVzdCBiZSBzcGVjaWZpZWQiOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGFkYXB0ZXJfaW5mb19tZW1vcnlfYmxvY2s7CisgIGlmICghc2J3aW4zMjo6R2V0QWRhcHRlcnMoYWRkcmVzc190eXBlLCAmYWRhcHRlcl9pbmZvX21lbW9yeV9ibG9jaykpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBmb3IgKFBJUF9BREFQVEVSX0FERFJFU1NFUyBhZGFwdGVyID0gcmVpbnRlcnByZXRfY2FzdDxQSVBfQURBUFRFUl9BRERSRVNTRVM+KAorICAgICAgICAgICBhZGFwdGVyX2luZm9fbWVtb3J5X2Jsb2NrLmdldCgpKTsKKyAgICAgICBhZGFwdGVyICE9IG51bGxwdHI7IGFkYXB0ZXIgPSBhZGFwdGVyLT5OZXh0KSB7CisgICAgaWYgKChhZGFwdGVyLT5PcGVyU3RhdHVzICE9IElmT3BlclN0YXR1c1VwKSB8fAorICAgICAgICAhc2J3aW4zMjo6SXNJZlR5cGVFdGhlcm5ldChhZGFwdGVyLT5JZlR5cGUpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBmb3IgKFBJUF9BREFQVEVSX1VOSUNBU1RfQUREUkVTUyB1bmljYXN0X2FkZHJlc3MgPQorICAgICAgICAgICAgIGFkYXB0ZXItPkZpcnN0VW5pY2FzdEFkZHJlc3M7CisgICAgICAgICB1bmljYXN0X2FkZHJlc3MgIT0gbnVsbHB0cjsgdW5pY2FzdF9hZGRyZXNzID0gdW5pY2FzdF9hZGRyZXNzLT5OZXh0KSB7CisgICAgICBpZiAodW5pY2FzdF9hZGRyZXNzLT5GbGFncyAmIChJUF9BREFQVEVSX0FERFJFU1NfVFJBTlNJRU5UKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmICghKHVuaWNhc3RfYWRkcmVzcy0+RmxhZ3MgJiBJUF9BREFQVEVSX0FERFJFU1NfRE5TX0VMSUdJQkxFKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgLy8gVE9ETzogRm9yIElQdjYsIFByaW9yaXRpemUgaW50ZXJmYWNlIHdpdGggaGlnaGVzdCBzY29wZS4KKyAgICAgIC8vIFNraXAgVUxBcyBmb3Igbm93LgorICAgICAgaWYgKGFkZHJlc3NfdHlwZSA9PSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjYpIHsKKyAgICAgICAgLy8gRG9jdW1lbnRhdGlvbiBvbiBNU0ROIHN0YXRlczoKKyAgICAgICAgLy8gIlRoZSBTT0NLQUREUiBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSB0aGUgbHBTb2NrYWRkciBtZW1iZXIgdmFyaWVzCisgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgcHJvdG9jb2wgb3IgYWRkcmVzcyBmYW1pbHkgc2VsZWN0ZWQuIEZvciBleGFtcGxlLAorICAgICAgICAvLyB0aGUgc29ja2FkZHJfaW42IHN0cnVjdHVyZSBpcyB1c2VkIGZvciBhbiBJUHY2IHNvY2tldCBhZGRyZXNzCisgICAgICAgIC8vIHdoaWxlIHRoZSBzb2NrYWRkcl9pbjQgc3RydWN0dXJlIGlzIHVzZWQgZm9yIGFuIElQdjQgc29ja2V0IGFkZHJlc3MuIgorICAgICAgICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczc0MDUwNyh2PXZzLjg1KS5hc3B4CisKKyAgICAgICAgc29ja2FkZHJfaW42KiBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcl9pbjYqPigKKyAgICAgICAgICAgIHVuaWNhc3RfYWRkcmVzcy0+QWRkcmVzcy5scFNvY2thZGRyKTsKKyAgICAgICAgU0JfRENIRUNLKGFkZHItPnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KTsKKyAgICAgICAgaWYgKElzVW5pcXVlTG9jYWxBZGRyZXNzKGFkZHItPnNpbjZfYWRkci51LkJ5dGUpKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKCFQb3B1bGF0ZUludGVyZmFjZUFkZHJlc3MoKnVuaWNhc3RfYWRkcmVzcywgb3V0X2ludGVyZmFjZV9pcCkpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBpZiAoIVBvcHVsYXRlTmV0bWFzaygqdW5pY2FzdF9hZGRyZXNzLCBvdXRfbmV0bWFzaykpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRmluZFNvdXJjZUFkZHJlc3NGb3JEZXN0aW5hdGlvbihjb25zdCBTYlNvY2tldEFkZHJlc3MmIGRlc3RpbmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0QWRkcmVzcyogb3V0X3NvdXJjZV9hZGRyZXNzKSB7CisgIFNiU29ja2V0IHNvY2tldCA9IFNiU29ja2V0Q3JlYXRlKGRlc3RpbmF0aW9uLnR5cGUsIGtTYlNvY2tldFByb3RvY29sVWRwKTsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIFNiU29ja2V0RXJyb3IgY29ubmVjdF9yZXR2YWwgPSBTYlNvY2tldENvbm5lY3Qoc29ja2V0LCAmZGVzdGluYXRpb24pOworICBpZiAoY29ubmVjdF9yZXR2YWwgIT0ga1NiU29ja2V0T2spIHsKKyAgICBib29sIHNvY2tldF9kZXN0cm95ZWQgPSBTYlNvY2tldERlc3Ryb3koc29ja2V0KTsKKyAgICBTQl9EQ0hFQ0soc29ja2V0X2Rlc3Ryb3llZCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgYm9vbCBzdWNjZXNzID0gU2JTb2NrZXRHZXRMb2NhbEFkZHJlc3Moc29ja2V0LCBvdXRfc291cmNlX2FkZHJlc3MpOworICBib29sIHNvY2tldF9kZXN0cm95ZWQgPSBTYlNvY2tldERlc3Ryb3koc29ja2V0KTsKKyAgU0JfRENIRUNLKHNvY2tldF9kZXN0cm95ZWQpOworICByZXR1cm4gc3VjY2VzczsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgU2JTb2NrZXRHZXRJbnRlcmZhY2VBZGRyZXNzKGNvbnN0IFNiU29ja2V0QWRkcmVzcyogY29uc3QgZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldEFkZHJlc3MqIG91dF9zb3VyY2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0QWRkcmVzcyogb3V0X25ldG1hc2spIHsKKyAgaWYgKCFvdXRfc291cmNlX2FkZHJlc3MpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoZGVzdGluYXRpb24gPT0gbnVsbHB0cikgeworICAgIC8vIFJldHVybiBlaXRoZXIgYSB2NCBvciBhIHY2IGFkZHJlc3MuICBQZXIgc3BlYy4KKyAgICByZXR1cm4gKEZpbmRJbnRlcmZhY2VJUChrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjQsIG91dF9zb3VyY2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfbmV0bWFzaykgfHwKKyAgICAgICAgICAgIEZpbmRJbnRlcmZhY2VJUChrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjYsIG91dF9zb3VyY2VfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfbmV0bWFzaykpOworICB9IGVsc2UgaWYgKElzQW55QWRkcmVzcygqZGVzdGluYXRpb24pKSB7CisgICAgcmV0dXJuIEZpbmRJbnRlcmZhY2VJUChkZXN0aW5hdGlvbi0+dHlwZSwgb3V0X3NvdXJjZV9hZGRyZXNzLCBvdXRfbmV0bWFzayk7CisgIH0KKworICByZXR1cm4gKEZpbmRTb3VyY2VBZGRyZXNzRm9yRGVzdGluYXRpb24oKmRlc3RpbmF0aW9uLCBvdXRfc291cmNlX2FkZHJlc3MpICYmCisgICAgICAgICAgR2V0TmV0bWFza0ZvckludGVyZmFjZUFkZHJlc3MoKm91dF9zb3VyY2VfYWRkcmVzcywgb3V0X25ldG1hc2spKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9sYXN0X2Vycm9yLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfZ2V0X2xhc3RfZXJyb3IuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmYTIxZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9sYXN0X2Vycm9yLmNjCkBAIC0wLDAgKzEsMjUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCitTYlNvY2tldEVycm9yIFNiU29ja2V0R2V0TGFzdEVycm9yKFNiU29ja2V0IHNvY2tldCkgeworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIGtTYlNvY2tldEVycm9yRmFpbGVkOworICB9CisKKyAgcmV0dXJuIHNvY2tldC0+ZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9nZXRfbG9jYWxfYWRkcmVzcy5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9sb2NhbF9hZGRyZXNzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTAwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9nZXRfbG9jYWxfYWRkcmVzcy5jYwpAQCAtMCwwICsxLDY2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitib29sIFNiU29ja2V0R2V0TG9jYWxBZGRyZXNzKFNiU29ja2V0IHNvY2tldCwgU2JTb2NrZXRBZGRyZXNzKiBvdXRfYWRkcmVzcykgeworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gd2luc29jazIgY29uc2lkZXJzIGNhbGxpbmcgZ2V0c29ja25hbWUoKSBvbiB1bmJvdW5kIHNvY2tldHMgdG8gYmUgYW4gZXJyb3IuCisgIC8vIFRoZXJlZm9yZSwgU2JTb2NrZXRMaXN0ZW4oKSB3aWxsIGNhbGwgU2JTb2NrZXRCaW5kKCkuCisgIGlmIChzb2NrZXQtPmJvdW5kX3RvID09IFNiU29ja2V0UHJpdmF0ZTo6QmluZFRhcmdldDo6a1VuYm91bmQpIHsKKyAgICBvdXRfYWRkcmVzcy0+dHlwZSA9IHNvY2tldC0+YWRkcmVzc190eXBlOworICAgIHN3aXRjaCAoc29ja2V0LT5hZGRyZXNzX3R5cGUpIHsKKyAgICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OgorICAgICAgICBtZW1zZXQob3V0X2FkZHJlc3MtPmFkZHJlc3MsIDAsIHNid2luMzI6OmtBZGRyZXNzTGVuZ3RoSXB2NCk7CisgICAgICAgIG91dF9hZGRyZXNzLT5wb3J0ID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIGtTYlNvY2tldEFkZHJlc3NUeXBlSXB2NjoKKyAgICAgICAgbWVtc2V0KG91dF9hZGRyZXNzLT5hZGRyZXNzLCAwLCBzYndpbjMyOjprQWRkcmVzc0xlbmd0aElwdjYpOworICAgICAgICBvdXRfYWRkcmVzcy0+cG9ydCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJJbnZhbGlkIGFkZHJlc3MgdHlwZTogIiA8PCBzb2NrZXQtPmFkZHJlc3NfdHlwZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9oYW5kbGUgIT0gSU5WQUxJRF9TT0NLRVQpOworICBzYndpbjMyOjpTb2NrQWRkciBzb2NrX2FkZHI7CisgIGludCByZXN1bHQgPSBnZXRzb2NrbmFtZShzb2NrZXQtPnNvY2tldF9oYW5kbGUsIHNvY2tfYWRkci5zb2NrYWRkcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvY2tfYWRkci5sZW5ndGgpOworICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgeworICAgIGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgU0JfTE9HKEVSUk9SKSA8PCAiZ2V0c29ja25hbWUoKSBmYWlsZWQgd2l0aCBsYXN0X2Vycm9yID0gIiA8PCBsYXN0X2Vycm9yOworICAgIHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgaWYgKCFzb2NrX2FkZHIuVG9TYlNvY2tldEFkZHJlc3Mob3V0X2FkZHJlc3MpKSB7CisgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRPazsKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODA0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDIwNSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK25hbWVzcGFjZSB7Citjb25zdCBzb2NrbGVuX3Qga0FkZHJlc3NTdHJ1Y3RMZW5ndGhJcHY0ID0KKyAgICBzdGF0aWNfY2FzdDxzb2NrbGVuX3Q+KHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKK2NvbnN0IHNvY2tsZW5fdCBrQWRkcmVzc1N0cnVjdExlbmd0aElwdjYgPQorICAgIHN0YXRpY19jYXN0PHNvY2tsZW5fdD4oc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKK30KKworU2JTb2NrZXRFcnJvciBUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhpbnQgZXJyb3IpIHsKKyAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgMDoKKyAgICAgIHJldHVybiBrU2JTb2NrZXRPazsKKworICAgIC8vIE1pY3Jvc29mdCBXaW5zb2NrIGVycm9yIGNvZGVzOgorICAgIC8vICAgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDA2Njgodj12cy44NSkuYXNweAorICAgIGNhc2UgV1NBRUlOUFJPR1JFU1M6CisgICAgY2FzZSBXU0FFV09VTERCTE9DSzoKKyAgICAgIHJldHVybiBrU2JTb2NrZXRQZW5kaW5nOworICAgIGNhc2UgV1NBRUNPTk5SRVNFVDoKKyAgICBjYXNlIFdTQUVORVRSRVNFVDoKKyAgICBjYXNlIFdTQUVDT05OQUJPUlRFRDoKKyAgICAgIHJldHVybiBrU2JTb2NrZXRFcnJvckNvbm5lY3Rpb25SZXNldDsKKworICAgIC8vIE1pY3Jvc29mdCBTeXN0ZW0gRXJyb3IgY29kZXM6CisgICAgLy8gICBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MTM4Mih2PXZzLjg1KS5hc3B4CisgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgIHJldHVybiBrU2JTb2NrZXRFcnJvckNvbm5lY3Rpb25SZXNldDsKKyAgfQorCisgIC8vIEhlcmUncyB3aGVyZSB3ZSB3b3VsZCBiZSBtb3JlIG51YW5jZWQgaWYgd2UgbmVlZCB0byBiZS4KKyAgcmV0dXJuIGtTYlNvY2tldEVycm9yRmFpbGVkOworfQorCitib29sIFNldEJvb2xlYW5Tb2NrZXRPcHRpb24oU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2YWx1ZSkgeworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgU0JfRENIRUNLKHNvY2tldC0+c29ja2V0X2hhbmRsZSAhPSBJTlZBTElEX1NPQ0tFVCk7CisgIGNvbnN0IGludCBvbiA9IHZhbHVlID8gMSA6IDA7CisgIGludCByZXN1bHQgPSBzZXRzb2Nrb3B0KHNvY2tldC0+c29ja2V0X2hhbmRsZSwgbGV2ZWwsIG9wdGlvbl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmb24pLCBzaXplb2Yob24pKTsKKyAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBpbnQgbGFzdF9lcnJvciA9IFdTQUdldExhc3RFcnJvcigpOworICAgIFNCX0RMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gc2V0ICIgPDwgb3B0aW9uX25hbWUgPDwgIiBvbiBzb2NrZXQgIgorICAgICAgICAgICAgICAgICAgIDw8IHNvY2tldC0+c29ja2V0X2hhbmRsZSA8PCAiLCBsYXN0X2Vycm9yID0gIiA8PCBsYXN0X2Vycm9yOworICAgIHNvY2tldC0+ZXJyb3IgPSBUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2s7CisgIHJldHVybiB0cnVlOworfQorCitib29sIFNldEludGVnZXJTb2NrZXRPcHRpb24oU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSB7CisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBTQl9EQ0hFQ0soc29ja2V0LT5zb2NrZXRfaGFuZGxlICE9IElOVkFMSURfU09DS0VUKTsKKyAgaW50IHJlc3VsdCA9IHNldHNvY2tvcHQoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBsZXZlbCwgb3B0aW9uX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZ2YWx1ZSksIHNpemVvZih2YWx1ZSkpOworICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgeworICAgIGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgU0JfRExPRyhFUlJPUikgPDwgIkZhaWxlZCB0byBzZXQgIiA8PCBvcHRpb25fbmFtZSA8PCAiIG9uIHNvY2tldCAiCisgICAgICAgICAgICAgICAgICAgPDwgc29ja2V0LT5zb2NrZXRfaGFuZGxlIDw8ICIsIGxhc3RfZXJyb3IgPSAiIDw8IGxhc3RfZXJyb3I7CisgICAgc29ja2V0LT5lcnJvciA9IFRyYW5zbGF0ZVNvY2tldEVycm9yU3RhdHVzKGxhc3RfZXJyb3IpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRPazsKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja0FkZHI6OkZyb21TYlNvY2tldEFkZHJlc3MoY29uc3QgU2JTb2NrZXRBZGRyZXNzKiBhZGRyZXNzKSB7CisgIGlmICghYWRkcmVzcykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGxlbmd0aCA9IHNpemVvZihzdG9yYWdlXyk7CisgIHN3aXRjaCAoYWRkcmVzcy0+dHlwZSkgeworICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OiB7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4qIGFkZHIgPSBzb2NrYWRkcl9pbigpOworICAgICAgbGVuZ3RoID0ga0FkZHJlc3NTdHJ1Y3RMZW5ndGhJcHY0OworICAgICAgbWVtc2V0KGFkZHIsIDAsIGxlbmd0aCk7CisgICAgICBhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoc3RhdGljX2Nhc3Q8VVNIT1JUPihhZGRyZXNzLT5wb3J0KSk7CisgICAgICBtZW1jcHkoJmFkZHItPnNpbl9hZGRyLCBhZGRyZXNzLT5hZGRyZXNzLCBrQWRkcmVzc0xlbmd0aElwdjQpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Uga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY2OiB7CisgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42KiBhZGRyNiA9IHNvY2thZGRyX2luNigpOworICAgICAgbGVuZ3RoID0ga0FkZHJlc3NTdHJ1Y3RMZW5ndGhJcHY2OworICAgICAgbWVtc2V0KGFkZHI2LCAwLCBsZW5ndGgpOworICAgICAgYWRkcjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICBhZGRyNi0+c2luNl9wb3J0ID0gaHRvbnMoc3RhdGljX2Nhc3Q8VVNIT1JUPihhZGRyZXNzLT5wb3J0KSk7CisgICAgICBtZW1jcHkoJmFkZHI2LT5zaW42X2FkZHIsIGFkZHJlc3MtPmFkZHJlc3MsIGtBZGRyZXNzTGVuZ3RoSXB2Nik7CisgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgIFNCX05PVFJFQUNIRUQoKSA8PCAiVW5yZWNvZ25pemVkIGFkZHJlc3MgdHlwZTogIiA8PCBhZGRyZXNzLT50eXBlOworICAgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja0FkZHI6OlRvU2JTb2NrZXRBZGRyZXNzKFNiU29ja2V0QWRkcmVzcyogb3V0X2FkZHJlc3MpIGNvbnN0IHsKKyAgaWYgKCFvdXRfYWRkcmVzcykgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisvLyBDaGVjayB0aGF0IHdlIGhhdmUgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4KKyAgU0JfRENIRUNLKGxlbmd0aCA9PSBrQWRkcmVzc1N0cnVjdExlbmd0aElwdjQgfHwKKyAgICAgICAgICAgIGxlbmd0aCA9PSBrQWRkcmVzc1N0cnVjdExlbmd0aElwdjYpOworCisgIGlmIChmYW1pbHkoKSA9PSBBRl9JTkVUKSB7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luKiBhZGRyID0gc29ja2FkZHJfaW4oKTsKKyAgICBpZiAobGVuZ3RoIDwga0FkZHJlc3NTdHJ1Y3RMZW5ndGhJcHY0KSB7CisgICAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIkluc3VmZmljaWVudCBJTkVUIHNpemU6ICIgPDwgbGVuZ3RoOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1lbWNweShvdXRfYWRkcmVzcy0+YWRkcmVzcywgJmFkZHItPnNpbl9hZGRyLCBrQWRkcmVzc0xlbmd0aElwdjQpOworICAgIG91dF9hZGRyZXNzLT5wb3J0ID0gbnRvaHMoYWRkci0+c2luX3BvcnQpOworICAgIG91dF9hZGRyZXNzLT50eXBlID0ga1NiU29ja2V0QWRkcmVzc1R5cGVJcHY0OworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaWYgKGZhbWlseSgpID09IEFGX0lORVQ2KSB7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogYWRkcjYgPSBzb2NrYWRkcl9pbjYoKTsKKyAgICBpZiAobGVuZ3RoIDwga0FkZHJlc3NTdHJ1Y3RMZW5ndGhJcHY2KSB7CisgICAgICBTQl9OT1RSRUFDSEVEKCkgPDwgIkluc3VmZmljaWVudCBJTkVUNiBzaXplOiAiIDw8IGxlbmd0aDsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtZW1jcHkob3V0X2FkZHJlc3MtPmFkZHJlc3MsICZhZGRyNi0+c2luNl9hZGRyLCBrQWRkcmVzc0xlbmd0aElwdjYpOworICAgIG91dF9hZGRyZXNzLT5wb3J0ID0gbnRvaHMoYWRkcjYtPnNpbjZfcG9ydCk7CisgICAgb3V0X2FkZHJlc3MtPnR5cGUgPSBrU2JTb2NrZXRBZGRyZXNzVHlwZUlwdjY7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBTQl9OT1RSRUFDSEVEKCkgPDwgIlVucmVjb2duaXplZCBhZGRyZXNzIGZhbWlseTogIiA8PCBmYW1pbHkoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNvY2tBZGRyOjpGcm9tU29ja2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzb2NrX2FkZHIpIHsKKyAgaWYgKCFzb2NrX2FkZHIpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpbnQgZmFtaWx5ID0gc29ja19hZGRyLT5zYV9mYW1pbHk7CisgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgeworICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiogYWRkciA9CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHNvY2thZGRyX2luKj4oc29ja19hZGRyKTsKKyAgICAqc29ja2FkZHJfaW4oKSA9ICphZGRyOworICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PHNvY2tsZW5fdD4oc2l6ZW9mKCphZGRyKSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogYWRkciA9CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHNvY2thZGRyX2luNio+KHNvY2tfYWRkcik7CisgICAgKnNvY2thZGRyX2luNigpID0gKmFkZHI7CisgICAgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c29ja2xlbl90PihzaXplb2YoKmFkZHIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIFNCX0RMT0coV0FSTklORykgPDwgIlVucmVjb2duaXplZCBhZGRyZXNzIGZhbWlseTogIiA8PCBmYW1pbHk7CisgIHJldHVybiBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDMwYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaApAQCAtMCwwICsxLDE2NCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU09DS0VUX0lOVEVSTkFMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU09DS0VUX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlIDxXUzJ0Y3BpcC5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvYXRvbWljLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1dG9fZXZlbnRfaGFuZGxlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldF93YWl0ZXIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK3N0cnVjdCBTYlNvY2tldFByaXZhdGUgeworICBlbnVtIHN0cnVjdCBCaW5kVGFyZ2V0IHsKKyAgICBrVW5ib3VuZCA9IDAsCisgICAga0FueSA9IDEsCisgICAga090aGVyID0gMiwKKyAgICBrQWNjZXB0ZWQgPSAzLAorICB9OworCisgIFNiU29ja2V0UHJpdmF0ZShTYlNvY2tldEFkZHJlc3NUeXBlIGFkZHJlc3NfdHlwZSwKKyAgICAgICAgICAgICAgICAgIFNiU29ja2V0UHJvdG9jb2wgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICBTT0NLRVQgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgQmluZFRhcmdldCBib3VuZF90bykKKyAgICAgIDogYWRkcmVzc190eXBlKGFkZHJlc3NfdHlwZSksCisgICAgICAgIHByb3RvY29sKHByb3RvY29sKSwKKyAgICAgICAgc29ja2V0X2hhbmRsZShoYW5kbGUpLAorICAgICAgICBzb2NrZXRfZXZlbnQoV1NBX0lOVkFMSURfRVZFTlQpLAorICAgICAgICB3cml0YWJsZSgwKSwKKyAgICAgICAgZXJyb3Ioa1NiU29ja2V0T2spLAorICAgICAgICB3YWl0ZXIoa1NiU29ja2V0V2FpdGVySW52YWxpZCksCisgICAgICAgIGJvdW5kX3RvKGJvdW5kX3RvKSB7fQorICB+U2JTb2NrZXRQcml2YXRlKCkge30KKworICAvLyBUaGUgYWRkcmVzcyBkb21haW4gb2YgdGhpcyBzb2NrZXQsIElQdjQgb3IgSVB2Ni4KKyAgU2JTb2NrZXRBZGRyZXNzVHlwZSBhZGRyZXNzX3R5cGU7CisKKyAgLy8gVGhlIHByb3RvY29sIG9mIHRoaXMgc29ja2V0LCBVRFAgb3IgVENQLgorICBTYlNvY2tldFByb3RvY29sIHByb3RvY29sOworCisgIC8vIFRoZSBoYW5kbGUgZm9yIHRoaXMgc29ja2V0LgorICBTT0NLRVQgc29ja2V0X2hhbmRsZTsKKworICAvLyBUaGUgZXZlbnQgcmVsYXRlZCB0byB0aGUgc29ja2V0X2hhbmRsZS4gIFVzZWQgZm9yIFNiU29ja2V0V2FpdGVyLgorICBzYndpbjMyOjpBdXRvRXZlbnRIYW5kbGUgc29ja2V0X2V2ZW50OworCisgIC8vIFNldCB0byB0cnVlIGJldHdlZW4gd2hlbiBzb2NrZXQgaXMgc2hvd24gYXMgd3JpdGFibGUgdmlhIFdTQUV2ZW50U2VsZWN0LworICAvLyBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMgYW5kIHdoZW4gd3JpdGluZyB0byB0aGUgc29ja2V0IHJldHVybnMKKyAgLy8gZmFpbHMgd2l0aCBXU0FFV09VTERCTE9DSy4KKyAgLy8KKyAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0IFdTQUV2ZW50U2VsZWN0IGZvciBGRF9XUklURSBpcworICAvLyBlZGdlLXRyaWdnZXJlZCwgdW5saWtlIG90aGVyIGV2ZW50cy4KKyAgLy8KKyAgLy8gU2VlIE1TRE4gZG9jdW1lbnRhdGlvbiBmb3IgV1NBRXZlbnRTZWxlY3QgRkRfV1JJVEUgZm9yIG1vcmUgaW5mby4KKyAgc3RhcmJvYXJkOjphdG9taWNfYm9vbCB3cml0YWJsZTsKKworICAvLyBUaGUgbGFzdCBlcnJvciB0aGF0IG9jY3VycmVkIG9uIHRoaXMgc29ja2V0LCBvciBrU2JTb2NrZXRPay4KKyAgU2JTb2NrZXRFcnJvciBlcnJvcjsKKworICAvLyBUaGUgd2FpdGVyIHRoaXMgc29ja2V0IGlzIHJlZ2lzdGVyZWQgd2l0aCwgb3Iga1NiU29ja2V0V2FpdGVySW52YWxpZC4KKyAgU2JTb2NrZXRXYWl0ZXIgd2FpdGVyOworCisgIEJpbmRUYXJnZXQgYm91bmRfdG87Cit9OworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworY29uc3Qgc29ja2xlbl90IGtBZGRyZXNzTGVuZ3RoSXB2NCA9IDQ7Citjb25zdCBzb2NrbGVuX3Qga0FkZHJlc3NMZW5ndGhJcHY2ID0gMTY7CisKKy8vIFRyYW5zbGF0ZXMgYW4gbGFzdF9lcnJvciBmcm9tIGEgc29ja2V0IGNhbGwgaW50byBhbiBTYlNvY2tldEVycm9yLgorU2JTb2NrZXRFcnJvciBUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhpbnQgZXJyb3IpOworCisvLyBTZXRzIGEgYm9vbGVhbiBzb2NrZXQgb3B0aW9uLCBkb2luZyBhbGwgYXBwcm9wcmlhdGUgY2hlY2tzLgorYm9vbCBTZXRCb29sZWFuU29ja2V0T3B0aW9uKFNiU29ja2V0IHNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbl9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsdWUpOworCisvLyBTZXRzIGFuIGludGVnZXIgc29ja2V0IG9wdGlvbiwgZG9pbmcgYWxsIGFwcHJvcHJpYXRlIGNoZWNrcy4KK2Jvb2wgU2V0SW50ZWdlclNvY2tldE9wdGlvbihTYlNvY2tldCBzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25fY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpOworCisvLyBBIGhlbHBlciBjbGFzcyBmb3IgY29udmVydGluZyBiYWNrIGFuZCBmb3J0aCBmcm9tIHNvY2thZGRycywgdWdoLgorY2xhc3MgU29ja0FkZHIgeworIHB1YmxpYzoKKyAgU29ja0FkZHIoKSA6IGxlbmd0aChzaXplb2Yoc3RvcmFnZV8pKSB7fQorICB+U29ja0FkZHIoKSB7fQorCisgIC8vIEluaXRpYWxpemVzIHRoaXMgU29ja0FkZHIgd2l0aCB0aGUgZ2l2ZW4gU2JTb2NrZXRBZGRyZXNzLCBvdmVyd3JpdGluZworICAvLyBhbnl0aGluZyBhbnkgYWRkcmVzcyBwcmV2aW91c2x5IGhlbGQuCisgIGJvb2wgRnJvbVNiU29ja2V0QWRkcmVzcyhjb25zdCBTYlNvY2tldEFkZHJlc3MqIGFkZHJlc3MpOworCisgIC8vIEluaXRpYWxpemVzIHRoZSBnaXZlbiBTYlNvY2tldEFkZHJlc3Mgd2l0aCB0aGlzIFNvY2tBZGRyLCB3aGljaCBtdXN0IGhhdmUKKyAgLy8gYmVlbiBwcmV2aW91c2x5IGluaXRpYWxpemVkLgorICBib29sIFRvU2JTb2NrZXRBZGRyZXNzKFNiU29ja2V0QWRkcmVzcyogb3V0X2FkZHJlc3MpIGNvbnN0OworCisgIC8vIEluaXRpYWxpemVzIHRoaXMgU29ja0FkZHIgd2l0aCB8c29ja19hZGRyfCwgYXNzdW1pbmcgaXQgaXMgYXBwcm9wcmlhdGVseQorICAvLyBzaXplZCBmb3IgaXRzIHR5cGUuCisgIGJvb2wgRnJvbVNvY2thZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc29ja19hZGRyKTsKKworICAvLyBUaGUgc29ja2FkZHIgZmFtaWx5LiBXZSBvbmx5IHN1cHBvcnQgSU5FVCBhbmQgSU5FVDYuCisgIHVfc2hvcnQgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gc29ja2FkZHIoKS0+c2FfZmFtaWx5OyB9CisKKyAgc3RydWN0IHNvY2thZGRyKiBzb2NrYWRkcigpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHIqPigmc3RvcmFnZV8pOworICB9CisKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzb2NrYWRkcigpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqPigmc3RvcmFnZV8pOworICB9CisKKyAgc3RydWN0IHNvY2thZGRyX2luKiBzb2NrYWRkcl9pbigpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3Qgc29ja2FkZHJfaW4qPigmc3RvcmFnZV8pOworICB9CisKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luKiBzb2NrYWRkcl9pbigpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4qPigmc3RvcmFnZV8pOworICB9CisKKyAgc3RydWN0IHNvY2thZGRyX2luNiogc29ja2FkZHJfaW42KCkgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHN0cnVjdCBzb2NrYWRkcl9pbjYqPigmc3RvcmFnZV8pOworICB9CisKKyAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiogc29ja2FkZHJfaW42KCkgY29uc3QgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYqPigmc3RvcmFnZV8pOworICB9CisKKyAgLy8gUHVibGljIG9uIHB1cnBvc2UsIGJlY2F1c2UgaXQgd2lsbCBiZSBoYW5keSB0byBiZSBwYXNzZWQgZGlyZWN0bHkgYnkKKyAgLy8gcmVmZXJlbmNlIGludG8gb3RoZXIgZnVuY3Rpb25zLgorICBzb2NrbGVuX3QgbGVuZ3RoOworCisgcHJpdmF0ZToKKyAgc29ja2FkZHJfc3RvcmFnZSBzdG9yYWdlXzsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU09DS0VUX0lOVEVSTkFMX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pc19jb25uZWN0ZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pc19jb25uZWN0ZWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlYzVhYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2lzX2Nvbm5lY3RlZC5jYwpAQCAtMCwwICsxLDQxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworYm9vbCBTYlNvY2tldElzQ29ubmVjdGVkKFNiU29ja2V0IHNvY2tldCkgeworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgU0JfRENIRUNLKHNvY2tldC0+c29ja2V0X2hhbmRsZSAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgLy8gVG8gdGVsbCBpZiBpdCBpcyByZWFsbHkgY29ubmVjdGVkLCB3ZSBwZWVrIGEgYnl0ZSBmcm9tIHRoZSBzdHJlYW0uIFdlCisgIC8vIHNob3VsZCBnZXQgYSBieXRlIGJhY2ssIG9yIGFuIEVBR0FJTi9FV09VTERCTE9DSyB0ZWxsaW5nIHVzIHRoZSBzb2NrZXQgaXMKKyAgLy8gd2FpdGluZyBmb3IgZGF0YS4KKyAgY2hhciBjOworICBjb25zdCBpbnQgcmVzdWx0ID0gcmVjdihzb2NrZXQtPnNvY2tldF9oYW5kbGUsICZjLCAxLCBNU0dfUEVFSyk7CisgIGlmIChyZXN1bHQgPT0gMCkgeworICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCwgdGhlIHJldHVybiB2YWx1ZSBpcyAwLgorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNvbnN0IGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgIHJldHVybiAocmVzdWx0ID4gMCB8fCBsYXN0X2Vycm9yID09IFdTQUVXT1VMREJMT0NLKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2lzX2Nvbm5lY3RlZF9hbmRfaWRsZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2lzX2Nvbm5lY3RlZF9hbmRfaWRsZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTc0ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaXNfY29ubmVjdGVkX2FuZF9pZGxlLmNjCkBAIC0wLDAgKzEsNDAgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCitib29sIFNiU29ja2V0SXNDb25uZWN0ZWRBbmRJZGxlKFNiU29ja2V0IHNvY2tldCkgeworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgU0JfRENIRUNLKHNvY2tldC0+c29ja2V0X2hhbmRsZSAhPSBJTlZBTElEX1NPQ0tFVCk7CisKKyAgLy8gVG8gdGVsbCBpZiBpdCBpcyByZWFsbHkgY29ubmVjdGVkIGFuZCBpZGxlLCB3ZSBwZWVrIGEgYnl0ZSBmcm9tIHRoZQorICAvLyBzdHJlYW0uIFdlIHNob3VsZCBnZXQgYW4gRUFHQUlOL0VXT1VMREJMT0NLIHRlbGxpbmcgdXMgdGhlIHNvY2tldCBpcworICAvLyB3YWl0aW5nIGZvciBkYXRhLgorICBjaGFyIGM7CisgIGludCBydiA9IHJlY3Yoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCAmYywgMSwgTVNHX1BFRUspOworICBpZiAocnYgIT0gU09DS0VUX0VSUk9SKSB7CisgICAgLy8gRWl0aGVyIG5vdCBjb25uZWN0ZWQsIG9yIG5vdCBpZGxlLgorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiAoV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBRVdPVUxEQkxPQ0spOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9qb2luX211bHRpY2FzdF9ncm91cC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmFiZWUwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfam9pbl9tdWx0aWNhc3RfZ3JvdXAuY2MKQEAgLTAsMCArMSw1MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitib29sIFNiU29ja2V0Sm9pbk11bHRpY2FzdEdyb3VwKFNiU29ja2V0IHNvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JTb2NrZXRBZGRyZXNzKiBhZGRyZXNzKSB7CisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIWFkZHJlc3MpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBTQl9EQ0hFQ0soc29ja2V0LT5zb2NrZXRfaGFuZGxlICE9IElOVkFMSURfU09DS0VUKTsKKyAgaXBfbXJlcSBpbXJlcSA9IHswfTsKKyAgSU5fQUREUiBhZGRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSU5fQUREUio+KGFkZHJlc3MtPmFkZHJlc3MpOworICBpbXJlcS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IGFkZHIuU191bi5TX2FkZHI7CisgIGltcmVxLmltcl9pbnRlcmZhY2Uuc19hZGRyID0gSU5BRERSX0FOWTsKKworICBpbnQgcmVzdWx0ID0gc2V0c29ja29wdChzb2NrZXQtPnNvY2tldF9oYW5kbGUsIElQUFJPVE9fSVAsIElQX0FERF9NRU1CRVJTSElQLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmaW1yZXEpLCBzaXplb2YoaW1yZXEpKTsKKyAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBpbnQgbGFzdF9lcnJvciA9IFdTQUdldExhc3RFcnJvcigpOworICAgIFNCX0RMT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gSVBfQUREX01FTUJFUlNISVAgb24gc29ja2V0ICIKKyAgICAgICAgICAgICAgICAgICA8PCBzb2NrZXQtPnNvY2tldF9oYW5kbGUgPDwgIiwgbGFzdF9lcnJvciA9ICIgPDwgbGFzdF9lcnJvcjsKKyAgICBzb2NrZXQtPmVycm9yID0gc2J3aW4zMjo6VHJhbnNsYXRlU29ja2V0RXJyb3JTdGF0dXMobGFzdF9lcnJvcik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldE9rOworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2xpc3Rlbi5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2xpc3Rlbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmJkZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfbGlzdGVuLmNjCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCituYW1lc3BhY2Ugc2J3aW4zMiA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjsKKworU2JTb2NrZXRFcnJvciBTYlNvY2tldExpc3RlbihTYlNvY2tldCBzb2NrZXQpIHsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIHJldHVybiBrU2JTb2NrZXRFcnJvckZhaWxlZDsKKyAgfQorCisgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9oYW5kbGUgIT0gSU5WQUxJRF9TT0NLRVQpOworCisgIC8vIFVuZGVyIHdpbnNvY2ssIGEgc29ja2V0IG11c3QgYmUgYm91bmQgYmVmb3JlIHdlIGNhbiBsaXN0ZW4gb24gaXQuCisgIGlmIChzb2NrZXQtPmJvdW5kX3RvID09IFNiU29ja2V0UHJpdmF0ZTo6QmluZFRhcmdldDo6a1VuYm91bmQpIHsKKyAgICAvLyBCeSBsaXN0ZW5pbmcgb24gOjosIHdlIGNhbiBhY2NlcHQgYm90aCBJUHY0IGFuZCBJUHY2IGNvbm5lY3Rpb25zLgorICAgIFNiU29ja2V0QWRkcmVzcyBhbnlfYWRkcmVzcyA9IHswfTsKKyAgICBhbnlfYWRkcmVzcy50eXBlID0gc29ja2V0LT5hZGRyZXNzX3R5cGU7CisgICAgaWYgKFNiU29ja2V0QmluZChzb2NrZXQsICZhbnlfYWRkcmVzcykgIT0ga1NiU29ja2V0T2spIHsKKyAgICAgIFNCX0RMT0coRVJST1IpIDw8ICJVbmFibGUgdG8gYmluZCBhIHNvY2tldCBkdXJpbmcgU2JMaXN0ZW4uIjsKKyAgICAgIHJldHVybiAoc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkKTsKKyAgICB9CisKKyAgICBzb2NrZXQtPmJvdW5kX3RvID0gU2JTb2NrZXRQcml2YXRlOjpCaW5kVGFyZ2V0OjprQW55OworICB9CisKKyAgLy8gV2Ugc2V0IHRoZSBiYWNrbG9nIHRvIFNPTUFYQ09OTiB0byBlbnN1cmUgdGhhdCBpdCBpcyBhYm92ZSAxLCBhbmQgaGlnaAorICAvLyBlbm91Z2ggdGhhdCBhbGwgdGVzdHMgYXJlIGFibGUgdG8gcGFzcy4gU29tZSB0ZXN0cyB3aWxsIGZhaWwgaWYgYmFja2xvZz09MQorICAvLyBiZWNhdXNlIHRoZXkgZXhwZWN0IHRvIGJlIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IGluaXRpYXRlIG11bHRpcGxlIGNvbm5lY3RzCisgIC8vIGF0IG9uY2UsIGFuZCB0aGVuIGFmdGVyIGFsbCBjb25uZWN0cyBoYXZlIGJlZW4gaW5pdGlhdGVkIHRvIHN1YnNlcXVlbnRseQorICAvLyBpbml0aWF0ZSBjb3JyZXNwb25kaW5nIGFjY2VwdHMuCisgIGludCByZXN1bHQgPSBsaXN0ZW4oc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBTT01BWENPTk4pOworICBpZiAocmVzdWx0ID09IFNPQ0tFVF9FUlJPUikgeworICAgIGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgU0JfTE9HKEVSUk9SKSA8PCAibGlzdGVuKCkgZmFpbGVkIHdpdGggbGFzdF9lcnJvciA9ICIgPDwgbGFzdF9lcnJvcjsKKyAgICByZXR1cm4gKHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKSk7CisgIH0KKworICByZXR1cm4gKHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRPayk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9yZWNlaXZlX2Zyb20uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9yZWNlaXZlX2Zyb20uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4ODI2NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3JlY2VpdmVfZnJvbS5jYwpAQCAtMCwwICsxLDEwNyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCituYW1lc3BhY2UgeworCitib29sIElzUmVwb3J0YWJsZUVycm5vKGludCBjb2RlKSB7CisgIHJldHVybiAoY29kZSAhPSBXU0FFV09VTERCTE9DSyAmJiBjb2RlICE9IFdTQUVDT05OUkVTRVQpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworaW50IFNiU29ja2V0UmVjZWl2ZUZyb20oU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogb3V0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgU2JTb2NrZXRBZGRyZXNzKiBvdXRfc291cmNlKSB7CisgIGNvbnN0IGludCBrUmVjdkZsYWdzID0gMDsKKworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgU0JfRENIRUNLKHNvY2tldC0+c29ja2V0X2hhbmRsZSAhPSBJTlZBTElEX1NPQ0tFVCk7CisgIGlmIChzb2NrZXQtPnByb3RvY29sID09IGtTYlNvY2tldFByb3RvY29sVGNwKSB7CisgICAgaWYgKG91dF9zb3VyY2UpIHsKKyAgICAgIHNid2luMzI6OlNvY2tBZGRyIHNvY2tfYWRkcjsKKyAgICAgIGludCByZXN1bHQgPSBnZXRwZWVybmFtZShzb2NrZXQtPnNvY2tldF9oYW5kbGUsIHNvY2tfYWRkci5zb2NrYWRkcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb2NrX2FkZHIubGVuZ3RoKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgIGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXworICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiBnZXRwZWVybmFtZSBmYWlsZWQsIGxhc3RfZXJyb3IgPSAiIDw8IGxhc3RfZXJyb3I7CisgICAgICAgIHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorCisgICAgICBpZiAoIXNvY2tfYWRkci5Ub1NiU29ja2V0QWRkcmVzcyhvdXRfc291cmNlKSkgeworICAgICAgICBTQl9ETE9HKEZBVEFMKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogQmFkIFRDUCBzb3VyY2UgYWRkcmVzcy4iOworICAgICAgICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0RXJyb3JGYWlsZWQ7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgYnl0ZXNfcmVhZCA9CisgICAgICAgIHJlY3Yoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBvdXRfZGF0YSwgZGF0YV9zaXplLCBrUmVjdkZsYWdzKTsKKyAgICBpZiAoYnl0ZXNfcmVhZCA+PSAwKSB7CisgICAgICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2s7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc19yZWFkKTsKKyAgICB9CisKKyAgICBpbnQgbGFzdF9lcnJvciA9IFdTQUdldExhc3RFcnJvcigpOworICAgIGlmIChJc1JlcG9ydGFibGVFcnJubyhsYXN0X2Vycm9yKSAmJgorICAgICAgICBzb2NrZXQtPmVycm9yICE9IHNid2luMzI6OlRyYW5zbGF0ZVNvY2tldEVycm9yU3RhdHVzKGxhc3RfZXJyb3IpKSB7CisgICAgICBTQl9ETE9HKEVSUk9SKSA8PCAicmVjdiBmYWlsZWQsIGxhc3RfZXJyb3IgPSAiIDw8IGxhc3RfZXJyb3I7CisgICAgfQorICAgIHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICByZXR1cm4gLTE7CisgIH0gZWxzZSBpZiAoc29ja2V0LT5wcm90b2NvbCA9PSBrU2JTb2NrZXRQcm90b2NvbFVkcCkgeworICAgIHNid2luMzI6OlNvY2tBZGRyIHNvY2tfYWRkcjsKKyAgICBzc2l6ZV90IGJ5dGVzX3JlYWQgPQorICAgICAgICByZWN2ZnJvbShzb2NrZXQtPnNvY2tldF9oYW5kbGUsIG91dF9kYXRhLCBkYXRhX3NpemUsIGtSZWN2RmxhZ3MsCisgICAgICAgICAgICAgICAgIHNvY2tfYWRkci5zb2NrYWRkcigpLCAmc29ja19hZGRyLmxlbmd0aCk7CisKKyAgICBpZiAoYnl0ZXNfcmVhZCA+PSAwKSB7CisgICAgICBpZiAob3V0X3NvdXJjZSkgeworICAgICAgICBpZiAoIXNvY2tfYWRkci5Ub1NiU29ja2V0QWRkcmVzcyhvdXRfc291cmNlKSkgeworICAgICAgICAgIFNCX0RMT0coRkFUQUwpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBCYWQgVURQIHNvdXJjZSBhZGRyZXNzLiI7CisgICAgICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzb2NrZXQtPmVycm9yID0ga1NiU29ja2V0T2s7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihieXRlc19yZWFkKTsKKyAgICB9CisKKyAgICBpbnQgbGFzdF9lcnJvciA9IFdTQUdldExhc3RFcnJvcigpOworICAgIGlmIChsYXN0X2Vycm9yICE9IFdTQUVXT1VMREJMT0NLICYmCisgICAgICAgIHNvY2tldC0+ZXJyb3IgIT0gc2J3aW4zMjo6VHJhbnNsYXRlU29ja2V0RXJyb3JTdGF0dXMobGFzdF9lcnJvcikpIHsKKyAgICAgIFNCX0RMT0coRVJST1IpIDw8ICJyZWN2ZnJvbSBmYWlsZWQsIGxhc3RfZXJyb3IgPSAiIDw8IGxhc3RfZXJyb3I7CisgICAgfQorICAgIHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBTQl9OT1RSRUFDSEVEKCkgPDwgIlVucmVjb2duaXplZCBwcm90b2NvbDogIiA8PCBzb2NrZXQtPnByb3RvY29sOworICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9yZXNvbHZlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfcmVzb2x2ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMzMjAwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfcmVzb2x2ZS5jYwpAQCAtMCwwICsxLDkwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitTYlNvY2tldFJlc29sdXRpb24qIFNiU29ja2V0UmVzb2x2ZShjb25zdCBjaGFyKiBob3N0bmFtZSwgaW50IGZpbHRlcnMpIHsKKyAgc3RydWN0IGFkZHJpbmZvKiBhaSA9IG51bGxwdHI7CisgIHN0cnVjdCBhZGRyaW5mbyBoaW50cyA9IHswfTsKKworICBpZiAoZmlsdGVycyAmIGtTYlNvY2tldFJlc29sdmVGaWx0ZXJJcHY0KSB7CisgICAgaWYgKGZpbHRlcnMgJiBrU2JTb2NrZXRSZXNvbHZlRmlsdGVySXB2NikgeworICAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworICAgIH0gZWxzZSB7CisgICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUOworICAgIH0KKyAgfSBlbHNlIGlmIChmaWx0ZXJzICYga1NiU29ja2V0UmVzb2x2ZUZpbHRlcklwdjYpIHsKKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgfSBlbHNlIHsKKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7CisgIH0KKworICBoaW50cy5haV9mbGFncyA9IEFJX0FERFJDT05GSUc7CisgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisKKyAgLy8gQWN0dWFsbHkgbWFrZSB0aGUgY2FsbCB0byBnZXQgdGhlIGRhdGEuCisgIGludCBlcnIgPSBnZXRhZGRyaW5mbyhob3N0bmFtZSwgbnVsbHB0ciwgJmhpbnRzLCAmYWkpOworICBpZiAoZXJyICE9IDAgfHwgYWkgPT0gbnVsbHB0cikgeworICAgIFNCX0RMT0coRVJST1IpIDw8ICJnZXRhZGRyaW5mbyBmYWlsZWQuICBsYXN0X2Vycm9yOiAiIDw8IFdTQUdldExhc3RFcnJvcigpOworICAgIHJldHVybiBudWxscHRyOworICB9CisKKyAgaW50IGFkZHJlc3NfY291bnQgPSAwOworICBmb3IgKGNvbnN0IGF1dG8qIGkgPSBhaTsgaSAhPSBudWxscHRyOyBpID0gaS0+YWlfbmV4dCkgeworICAgICsrYWRkcmVzc19jb3VudDsKKyAgfQorCisgIFNiU29ja2V0UmVzb2x1dGlvbiogcmVzdWx0ID0gbmV3IFNiU29ja2V0UmVzb2x1dGlvbigpOworCisgIC8vIFRyYW5zbGF0ZSBhbGwgdGhlIHNvY2thZGRycy4KKyAgc3RkOjp2ZWN0b3I8c2J3aW4zMjo6U29ja0FkZHI+IHNvY2tfYWRkcnM7CisgIHNvY2tfYWRkcnMucmVzaXplKGFkZHJlc3NfY291bnQpOworCisgIHN0ZDo6dmVjdG9yPGJvb2w+IHBhcnNlZDsKKyAgcGFyc2VkLnJlc2l6ZShhZGRyZXNzX2NvdW50KTsKKworICBpbnQgaW5kZXggPSAwOworICBpbnQgc2tpcCA9IDA7CisgIGZvciAoY29uc3QgYXV0byAqaSA9IGFpOyBpICE9IG51bGxwdHI7IGkgPSBpLT5haV9uZXh0LCArK2luZGV4KSB7CisgICAgLy8gU2tpcCBvdmVyIGFueSBhZGRyZXNzZXMgd2UgY2FuJ3QgcGFyc2UuCisgICAgcGFyc2VkW2luZGV4XSA9IHNvY2tfYWRkcnNbaW5kZXhdLkZyb21Tb2NrYWRkcihpLT5haV9hZGRyKTsKKyAgICBpZiAoIXBhcnNlZFtpbmRleF0pIHsKKyAgICAgICsrc2tpcDsKKyAgICB9CisgIH0KKworICByZXN1bHQtPmFkZHJlc3NfY291bnQgPSBhZGRyZXNzX2NvdW50IC0gc2tpcDsKKyAgcmVzdWx0LT5hZGRyZXNzZXMgPSBuZXcgU2JTb2NrZXRBZGRyZXNzW3Jlc3VsdC0+YWRkcmVzc19jb3VudF07CisKKyAgaW50IHJlc3VsdF9pbmRleCA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgYWRkcmVzc19jb3VudDsgKytpKSB7CisgICAgaWYgKHBhcnNlZFtpXSAmJgorICAgICAgICBzb2NrX2FkZHJzW2ldLlRvU2JTb2NrZXRBZGRyZXNzKCZyZXN1bHQtPmFkZHJlc3Nlc1tyZXN1bHRfaW5kZXhdKSkgeworICAgICAgKytyZXN1bHRfaW5kZXg7CisgICAgfQorICB9CisKKyAgZnJlZWFkZHJpbmZvKGFpKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NlbmRfdG8uY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZW5kX3RvLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZmE1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZW5kX3RvLmNjCkBAIC0wLDAgKzEsMTEwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK25hbWVzcGFjZSB7CitzdGQ6OnN0cmluZyBDcmVhdGVFcnJvclN0cmluZyhjb25zdCBTYlNvY2tldEFkZHJlc3MqIGFkZHIsIGludCBlcnJvcikgeworICBzdGQ6OnN0cmluZ3N0cmVhbSBvdXQ7CisgIGlmIChhZGRyKSB7CisgICAgb3V0IDw8ICJTZW5kdG8gZmFpbGVkIHdoaWxlIHNlbmRpbmcgdG8gcG9ydCAiIDw8IGFkZHItPnBvcnQKKyAgICAgICAgPDwgIi4gTGFzdCBFcnJvcjogMHgiIDw8IHN0ZDo6aGV4IDw8IGVycm9yOworICB9IGVsc2UgeworICAgIG91dCA8PCAiU2VuZHRvIGZhaWxlZCBiZWNhdXNlIG9mIGVycm9yOiAweCIgPDwgc3RkOjpoZXggPDwgZXJyb3I7CisgIH0KKyAgcmV0dXJuIG91dC5zdHIoKTsKK30KK30gIC8vIG5hbWVzcGFjZQorCitpbnQgU2JTb2NrZXRTZW5kVG8oU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgaW50IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBTYlNvY2tldEFkZHJlc3MqIGRlc3RpbmF0aW9uKSB7CisgIGNvbnN0IGludCBrU2VuZEZsYWdzID0gMDsKKyAgaWYgKCFTYlNvY2tldElzVmFsaWQoc29ja2V0KSkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIFNCX0RDSEVDSyhzb2NrZXQtPnNvY2tldF9oYW5kbGUgIT0gSU5WQUxJRF9TT0NLRVQpOworICBpZiAoc29ja2V0LT5wcm90b2NvbCA9PSBrU2JTb2NrZXRQcm90b2NvbFRjcCkgeworICAgIGlmIChkZXN0aW5hdGlvbikgeworICAgICAgU0JfRExPRyhGQVRBTCkgPDwgIkRlc3RpbmF0aW9uIHBhc3NlZCB0byBUQ1Agc2VuZC4iOworICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGludCBieXRlc193cml0dGVuID0KKyAgICAgICAgc2VuZChzb2NrZXQtPnNvY2tldF9oYW5kbGUsIGRhdGEsIGRhdGFfc2l6ZSwga1NlbmRGbGFncyk7CisgICAgaWYgKGJ5dGVzX3dyaXR0ZW4gPj0gMCkgeworICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldE9rOworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNfd3JpdHRlbik7CisgICAgfQorCisgICAgaW50IGxhc3RfZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKworICAgIGlmICgobGFzdF9lcnJvciA9PSBXU0FFV09VTERCTE9DSykgfHwgKGxhc3RfZXJyb3IgPT0gV1NBRUNPTk5BQk9SVEVEKSkgeworICAgICAgc29ja2V0LT53cml0YWJsZS5zdG9yZShmYWxzZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIFNCX0RMT0coRVJST1IpIDw8IENyZWF0ZUVycm9yU3RyaW5nKGRlc3RpbmF0aW9uLCBsYXN0X2Vycm9yKTsKKyAgICB9CisgICAgc29ja2V0LT5lcnJvciA9IHNid2luMzI6OlRyYW5zbGF0ZVNvY2tldEVycm9yU3RhdHVzKGxhc3RfZXJyb3IpOworICAgIHJldHVybiAtMTsKKyAgfSBlbHNlIGlmIChzb2NrZXQtPnByb3RvY29sID09IGtTYlNvY2tldFByb3RvY29sVWRwKSB7CisgICAgaWYgKCFkZXN0aW5hdGlvbikgeworICAgICAgU0JfRExPRyhGQVRBTCkgPDwgIk5vIGRlc3RpbmF0aW9uIHBhc3NlZCB0byBVRFAgc2VuZC4iOworICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldEVycm9yRmFpbGVkOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHNid2luMzI6OlNvY2tBZGRyIHNvY2tfYWRkcjsKKyAgICBjb25zdCBzb2NrYWRkciogc29ja2FkZHIgPSBudWxscHRyOworICAgIHNvY2tsZW5fdCBzb2NrYWRkcl9sZW5ndGggPSAwOworICAgIGlmIChkZXN0aW5hdGlvbikgeworICAgICAgaWYgKCFzb2NrX2FkZHIuRnJvbVNiU29ja2V0QWRkcmVzcyhkZXN0aW5hdGlvbikpIHsKKyAgICAgICAgU0JfRExPRyhGQVRBTCkgPDwgIkludmFsaWQgZGVzdGluYXRpb24gcGFzc2VkIHRvIFVEUCBzZW5kLiI7CisgICAgICAgIHNvY2tldC0+ZXJyb3IgPSBrU2JTb2NrZXRFcnJvckZhaWxlZDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorICAgICAgc29ja2FkZHIgPSBzb2NrX2FkZHIuc29ja2FkZHIoKTsKKyAgICAgIHNvY2thZGRyX2xlbmd0aCA9IHNvY2tfYWRkci5sZW5ndGg7CisgICAgfQorCisgICAgaW50IGJ5dGVzX3dyaXR0ZW4gPSBzZW5kdG8oc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBkYXRhLCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NlbmRGbGFncywgc29ja2FkZHIsIHNvY2thZGRyX2xlbmd0aCk7CisgICAgaWYgKGJ5dGVzX3dyaXR0ZW4gPj0gMCkgeworICAgICAgc29ja2V0LT5lcnJvciA9IGtTYlNvY2tldE9rOworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYnl0ZXNfd3JpdHRlbik7CisgICAgfQorCisgICAgaW50IGxhc3RfZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKworICAgIGlmIChsYXN0X2Vycm9yICE9IFdTQUVXT1VMREJMT0NLKSB7CisgICAgICBTQl9ETE9HKEVSUk9SKSA8PCBDcmVhdGVFcnJvclN0cmluZyhkZXN0aW5hdGlvbiwgbGFzdF9lcnJvcik7CisgICAgfQorICAgIHNvY2tldC0+ZXJyb3IgPSBzYndpbjMyOjpUcmFuc2xhdGVTb2NrZXRFcnJvclN0YXR1cyhsYXN0X2Vycm9yKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBTQl9OT1RSRUFDSEVEKCkgPDwgIlVucmVjb2duaXplZCBwcm90b2NvbDogIiA8PCBzb2NrZXQtPnByb3RvY29sOworICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfYnJvYWRjYXN0LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X2Jyb2FkY2FzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjg2MzYyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X2Jyb2FkY2FzdC5jYwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitib29sIFNiU29ja2V0U2V0QnJvYWRjYXN0KFNiU29ja2V0IHNvY2tldCwgYm9vbCB2YWx1ZSkgeworICByZXR1cm4gc2J3aW4zMjo6U2V0Qm9vbGVhblNvY2tldE9wdGlvbihzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNPX0JST0FEQ0FTVCIsIHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF9yZWNlaXZlX2J1ZmZlcl9zaXplLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1NzFiZQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF9yZWNlaXZlX2J1ZmZlcl9zaXplLmNjCkBAIC0wLDAgKzEsMjYgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK2Jvb2wgU2JTb2NrZXRTZXRSZWNlaXZlQnVmZmVyU2l6ZShTYlNvY2tldCBzb2NrZXQsIGludDMyX3Qgc2l6ZSkgeworICByZXR1cm4gc2J3aW4zMjo6U2V0SW50ZWdlclNvY2tldE9wdGlvbihzb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNPX1JDVkJVRiIsIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3JldXNlX2FkZHJlc3MuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfcmV1c2VfYWRkcmVzcy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQwNDAyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3JldXNlX2FkZHJlc3MuY2MKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zb2NrZXQuaCIKKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCituYW1lc3BhY2Ugc2J3aW4zMiA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjsKKworYm9vbCBTYlNvY2tldFNldFJldXNlQWRkcmVzcyhTYlNvY2tldCBzb2NrZXQsIGJvb2wgdmFsdWUpIHsKKyAgcmV0dXJuIHNid2luMzI6OlNldEJvb2xlYW5Tb2NrZXRPcHRpb24oc29ja2V0LCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTT19SRVVTRUFERFIiLCB2YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfc2VuZF9idWZmZXJfc2l6ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF9zZW5kX2J1ZmZlcl9zaXplLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDJkMDEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfc2VuZF9idWZmZXJfc2l6ZS5jYwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitib29sIFNiU29ja2V0U2V0U2VuZEJ1ZmZlclNpemUoU2JTb2NrZXQgc29ja2V0LCBpbnQzMl90IHNpemUpIHsKKyAgcmV0dXJuIHNid2luMzI6OlNldEludGVnZXJTb2NrZXRPcHRpb24oc29ja2V0LCBTT0xfU09DS0VULCBTT19TTkRCVUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTT19TTkRCVUYiLCBzaXplKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF90Y3Bfa2VlcF9hbGl2ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF90Y3Bfa2VlcF9hbGl2ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY5ODhkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3RjcF9rZWVwX2FsaXZlLmNjCkBAIC0wLDAgKzEsMjkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCituYW1lc3BhY2Ugc2J3aW4zMiA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjsKKworYm9vbCBTYlNvY2tldFNldFRjcEtlZXBBbGl2ZShTYlNvY2tldCBzb2NrZXQsIGJvb2wgdmFsdWUsIFNiVGltZSBwZXJpb2QpIHsKKyAgY29uc3QgRFdPUkQgc2hvdWxkX3NldF9rZWVwYWxpdmUgPSB2YWx1ZTsKKyAgYm9vbCByZXN1bHQgPSBzYndpbjMyOjpTZXRCb29sZWFuU29ja2V0T3B0aW9uKAorICAgICAgc29ja2V0LCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsICJTT19LRUVQQUxJVkUiLCB2YWx1ZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfdGNwX25vX2RlbGF5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3RjcF9ub19kZWxheS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmMzNDA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3RjcF9ub19kZWxheS5jYwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3NvY2tldC5oIgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCitib29sIFNiU29ja2V0U2V0VGNwTm9EZWxheShTYlNvY2tldCBzb2NrZXQsIGJvb2wgdmFsdWUpIHsKKyAgcmV0dXJuIHNid2luMzI6OlNldEJvb2xlYW5Tb2NrZXRPcHRpb24oc29ja2V0LCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUQ1BfTk9ERUxBWSIsIHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF90Y3Bfd2luZG93X3NjYWxpbmcuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfdGNwX3dpbmRvd19zY2FsaW5nLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzMwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfdGNwX3dpbmRvd19zY2FsaW5nLmNjCkBAIC0wLDAgKzEsNDQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKworLy8gTm90ZSB0aGF0IHdpbmRvd3MuaCBhbmQgd2luc29jazIuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSB0aGVzZS4KKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisjaW5jbHVkZSA8c2RrZGRrdmVyLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5oIgorCitib29sIFNiU29ja2V0U2V0VGNwV2luZG93U2NhbGluZyhTYlNvY2tldCBzb2NrZXQsIGJvb2wgZW5hYmxlX3dpbmRvd19zY2FsaW5nKSB7CisgIC8vIEZyb20KKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvY2MxMzYxMDModj12cy44NSkuYXNweDoKKyAgLy8gIldoZW4gdGhlIFRhcmdldE9zVmVyc2lvbiBtZW1iZXIgaXMgc2V0IHRvIGEgdmFsdWUgZm9yIFdpbmRvd3MgVmlzdGEgb3IKKyAgLy8gbGF0ZXIsIHJlY2VpdmUgd2luZG93IGF1dG8tdHVuaW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBUQ1Agd2luZG93IHNjYWxlCisgIC8vIGZhY3RvciBpcyByZWR1Y2VkIHRvIDIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA4LiIKKworICBjb25zdCBVTE9ORyB0YXJnZXRfb3NfdmVyc2lvbiA9CisgICAgICBlbmFibGVfd2luZG93X3NjYWxpbmcgPyBOVERESV9WSVNUQSA6IE5URERJX1dTMDM7CisgIFdTQV9DT01QQVRJQklMSVRZX01PREUgY29tcGF0aWJpbGl0eV9tb2RlID0ge1dzYUJlaGF2aW9yQXV0b1R1bmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X29zX3ZlcnNpb259OworCisgIERXT1JEIGtaZXJvID0gMDsKKyAgaW50IHJldHVybl92YWx1ZSA9IFdTQUlvY3RsKAorICAgICAgc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBTSU9fU0VUX0NPTVBBVElCSUxJVFlfTU9ERSwgJmNvbXBhdGliaWxpdHlfbW9kZSwKKyAgICAgIHNpemVvZihXU0FfQ09NUEFUSUJJTElUWV9NT0RFKSwgbnVsbHB0ciwgMCwgJmtaZXJvLCBudWxscHRyLCBudWxscHRyKTsKKworICByZXR1cm4gcmV0dXJuX3ZhbHVlICE9IFNPQ0tFVF9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9hZGQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfYWRkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzY2RmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfYWRkLmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zb2NrZXRfd2FpdGVyLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oIgorCitib29sIFNiU29ja2V0V2FpdGVyQWRkKFNiU29ja2V0V2FpdGVyIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldFdhaXRlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW50ZXJlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHBlcnNpc3RlbnQpIHsKKyAgaWYgKCFTYlNvY2tldFdhaXRlcklzVmFsaWQod2FpdGVyKSkgeworICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBXYWl0ZXIgKCIgPDwgd2FpdGVyIDw8ICIpIGlzIGludmFsaWQuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIVNiU29ja2V0SXNWYWxpZChzb2NrZXQpKSB7CisgICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IFNvY2tldCAoIiA8PCBzb2NrZXQgPDwgIikgaXMgaW52YWxpZC4iOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmICghY2FsbGJhY2spIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogTm8gY2FsbGJhY2sgcHJvdmlkZWQuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIWludGVyZXN0cykgeworICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBObyBpbnRlcmVzdHMgcHJvdmlkZWQuIjsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gd2FpdGVyLT5BZGQoc29ja2V0LCBjb250ZXh0LCBjYWxsYmFjaywgaW50ZXJlc3RzLCBwZXJzaXN0ZW50KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9jcmVhdGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfY3JlYXRlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMDMyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfY3JlYXRlLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zb2NrZXRfd2FpdGVyLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfaW50ZXJuYWwuaCIKKworU2JTb2NrZXRXYWl0ZXIgU2JTb2NrZXRXYWl0ZXJDcmVhdGUoKSB7CisgIHJldHVybiBuZXcgU2JTb2NrZXRXYWl0ZXJQcml2YXRlKCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfZGVzdHJveS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9kZXN0cm95LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYmFiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfZGVzdHJveS5jYwpAQCAtMCwwICsxLDI1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc29ja2V0X3dhaXRlci5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmgiCisKK2Jvb2wgU2JTb2NrZXRXYWl0ZXJEZXN0cm95KFNiU29ja2V0V2FpdGVyIHdhaXRlcikgeworICBpZiAoIVNiU29ja2V0V2FpdGVySXNWYWxpZCh3YWl0ZXIpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGRlbGV0ZSB3YWl0ZXI7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmODBkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfaW50ZXJuYWwuY2MKQEAgLTAsMCArMSw0ODkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL29wdGlvbmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworbmFtZXNwYWNlIHNid2luMzIgPSBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCB0YWtlcyBkYXRhIGZyb20gfG5ldHdvcmtfZXZlbnRzfCwgYW5kIHRoZW4KKy8vIGFkZHMgdGhlIGJpdHdpc2UgT1JzIHxpbnRlcmVzdF90b19hZGR8IG9udG8gfGludGVyZXN0X291dHwuCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZQorLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDE1NzIodj12cy44NSkuYXNweC4KK3ZvaWQgVHJhbnNsYXRlTmV0d29ya0JpdEludG9JbnRlcmVzdHMoY29uc3QgV1NBTkVUV09SS0VWRU5UUyYgbmV0d29ya19ldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRfdG9fY2hlY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0V2FpdGVySW50ZXJlc3QgaW50ZXJlc3RfdG9fYWRkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlNvY2tldFdhaXRlckludGVyZXN0KiBpbnRlcmVzdHNfb3V0KSB7CisgIFNCX0RDSEVDSyhpbnRlcmVzdHNfb3V0KTsKKworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgc2l6ZW9mKFNiU29ja2V0V2FpdGVySW50ZXJlc3QpID09IHNpemVvZihpbnQpLAorICAgICAgIkFzc3VtaW5nIHNpemUgb2YgZW51bSBpcyBzaXplIG9mIGludCwgZHVlIHRvIHRoZSBiaXRmaWVsZCBsb2dpYyBiZWxvdy4iKTsKKworICBpZiAobmV0d29ya19ldmVudHMubE5ldHdvcmtFdmVudHMgJiAoMSA8PCBiaXRfdG9fY2hlY2spKSB7CisgICAgKihyZWludGVycHJldF9jYXN0PGludCo+KGludGVyZXN0c19vdXQpKSB8PQorICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGludGVyZXN0X3RvX2FkZCk7CisgICAgY29uc3QgaW50IGVycm9yX2NvZGUgPSBuZXR3b3JrX2V2ZW50cy5pRXJyb3JDb2RlW2JpdF90b19jaGVja107CisgICAgaWYgKGVycm9yX2NvZGUgIT0gMCkgeworICAgICAgU0JfRExPRyhFUlJPUikgPDwgIkVycm9yIG9uIG5ldHdvcmsgZXZlbnQgIiA8PCBiaXRfdG9fY2hlY2sgPDwgIiAiCisgICAgICAgICAgICAgICAgICAgICA8PCBzYndpbjMyOjpXaW4zMkVycm9yQ29kZShlcnJvcl9jb2RlKTsKKyAgICB9CisgIH0KK30KKworU2JTb2NrZXRXYWl0ZXJJbnRlcmVzdCBEaXNjb3Zlck5ldHdvcmtFdmVudEludGVyZXN0cyhTT0NLRVQgc29ja2V0X2hhbmRsZSkgeworICAvLyBQbGVhc2UgdGFrZSBub3RlIHRoYXQgV1NBRW51bU5ldHdvcmtFdmVudHMgYmVsb3cgb25seSB3b3JrcyB3aXRoCisgIC8vIFdTQUV2ZW50U2VsZWN0LgorICBTYlNvY2tldFdhaXRlckludGVyZXN0IGludGVyZXN0cyA9IGtTYlNvY2tldFdhaXRlckludGVyZXN0Tm9uZTsKKyAgV1NBTkVUV09SS0VWRU5UUyBuZXR3b3JrX2V2ZW50cyA9IHswfTsKKyAgaW50IHJldHVybl9jb2RlID0KKyAgICAgIFdTQUVudW1OZXR3b3JrRXZlbnRzKHNvY2tldF9oYW5kbGUsIG51bGxwdHIsICZuZXR3b3JrX2V2ZW50cyk7CisgIGlmIChyZXR1cm5fY29kZSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICBpbnQgbGFzdF9lcnJvciA9IFdTQUdldExhc3RFcnJvcigpOworICAgIFNCX0RMT0coRVJST1IpIDw8ICJXU0FFbnVtTmV0d29ya0V2ZW50cyBmYWlsZWQgd2l0aCBsYXN0X2Vycm9yID0gIgorICAgICAgICAgICAgICAgICAgIDw8IHNid2luMzI6OldpbjMyRXJyb3JDb2RlKGxhc3RfZXJyb3IpOworICAgIHJldHVybiBpbnRlcmVzdHM7CisgIH0KKworICAvLyBUcmFuc2xhdGUgaW5mb3JtYXRpb24gZnJvbSBXU0FFbnVtTmV0d29ya0V2ZW50cyB0byBpbnRlcmVzdHM6CisgIC8vIEZyb20gdGhlIE1TRE4gZG9jdW1lbnRhdGlvbjoKKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDE1NzIodj12cy44NSkuYXNweAorICAvLyBUaGUgbE5ldHdvcmtFdmVudHMgbWVtYmVyIG9mIHRoZSBXU0FORVRXT1JLRVZFTlRTIHN0cnVjdHVyZSBpbmRpY2F0ZXMgd2hpY2gKKyAgLy8gb2YgdGhlIEZEX1hYWCBuZXR3b3JrIGV2ZW50cyBoYXZlIG9jY3VycmVkLiBUaGUgaUVycm9yQ29kZSBhcnJheSBpcyB1c2VkIHRvCisgIC8vIGNvbnRhaW4gYW55IGFzc29jaWF0ZWQgZXJyb3IgY29kZXMgd2l0aCB0aGUgYXJyYXkgaW5kZXggY29ycmVzcG9uZGluZyB0bworICAvLyB0aGUgcG9zaXRpb24gb2YgZXZlbnQgYml0cyBpbiBsTmV0d29ya0V2ZW50cy4gSWRlbnRpZmllcnMgc3VjaCBhcworICAvLyBGRF9SRUFEX0JJVCBhbmQgRkRfV1JJVEVfQklUIGNhbiBiZSB1c2VkIHRvIGluZGV4IHRoZSBpRXJyb3JDb2RlIGFycmF5LgorICAvLyBOb3RlIHRoYXQgb25seSB0aG9zZSBlbGVtZW50cyBvZiB0aGUgaUVycm9yQ29kZSBhcnJheSBhcmUgc2V0IHRoYXQKKyAgLy8gY29ycmVzcG9uZCB0byB0aGUgYml0cyBzZXQgaW4gbE5ldHdvcmtFdmVudHMgcGFyYW1ldGVyCisgIFRyYW5zbGF0ZU5ldHdvcmtCaXRJbnRvSW50ZXJlc3RzKG5ldHdvcmtfZXZlbnRzLCBGRF9SRUFEX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiU29ja2V0V2FpdGVySW50ZXJlc3RSZWFkLCAmaW50ZXJlc3RzKTsKKyAgVHJhbnNsYXRlTmV0d29ya0JpdEludG9JbnRlcmVzdHMobmV0d29ya19ldmVudHMsIEZEX0FDQ0VQVF9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTYlNvY2tldFdhaXRlckludGVyZXN0UmVhZCwgJmludGVyZXN0cyk7CisgIFRyYW5zbGF0ZU5ldHdvcmtCaXRJbnRvSW50ZXJlc3RzKG5ldHdvcmtfZXZlbnRzLCBGRF9DTE9TRV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTYlNvY2tldFdhaXRlckludGVyZXN0UmVhZCwgJmludGVyZXN0cyk7CisKKyAgVHJhbnNsYXRlTmV0d29ya0JpdEludG9JbnRlcmVzdHMobmV0d29ya19ldmVudHMsIEZEX0NPTk5FQ1RfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2JTb2NrZXRXYWl0ZXJJbnRlcmVzdFdyaXRlLCAmaW50ZXJlc3RzKTsKKyAgVHJhbnNsYXRlTmV0d29ya0JpdEludG9JbnRlcmVzdHMobmV0d29ya19ldmVudHMsIEZEX1dSSVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1NiU29ja2V0V2FpdGVySW50ZXJlc3RXcml0ZSwgJmludGVyZXN0cyk7CisKKyAgcmV0dXJuIGludGVyZXN0czsKK30KKworLy8gVGhlIGZ1bmN0aW9uIGVyYXNlcyB0aGUgfGluZGV4fHRoIGVsZW1lbnQgZnJvbSB0aGUgY29sbGVjdGlvbiBieSBzd2FwcGluZworLy8gaXQgd2l0aCB0aGUgbGFzdCBlbGVtZW50LiAgVGhpcyBvcGVyYXRpb24gbGVhdmVzIGFsbCB0aGUgb3RoZXIgZWxlbWVudHMgaW4KKy8vIHBsYWNlLCB3aGljaCBpcyB1c2VmdWwgZm9yIHNvbWUgb3BlcmF0aW9ucy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBFcmFzZUluZGV4RnJvbVZlY3RvcihUKiBjb2xsZWN0aW9uX3BvaW50ZXIsIHN0ZDo6c2l6ZV90IGluZGV4KSB7CisgIFNCX0RDSEVDSyhjb2xsZWN0aW9uX3BvaW50ZXIpOworICBUJiBjb2xsZWN0aW9uID0gKmNvbGxlY3Rpb25fcG9pbnRlcjsKKyAgY29uc3Qgc3RkOjpzaXplX3QgY3VycmVudF9zaXplID0gY29sbGVjdGlvbi5zaXplKCk7CisgIGlmIChjdXJyZW50X3NpemUgPD0gMSkgeworICAgIGNvbGxlY3Rpb24uY2xlYXIoKTsKKyAgICByZXR1cm47CisgIH0KKyAgY29uc3Qgc3RkOjpzaXplX3QgbmV3X3NpemUgPSBjb2xsZWN0aW9uLnNpemUoKSAtIDE7CisgIHN0ZDo6c3dhcChjb2xsZWN0aW9uW2luZGV4XSwgY29sbGVjdGlvbltuZXdfc2l6ZV0pOworICBjb2xsZWN0aW9uLnJlc2l6ZShuZXdfc2l6ZSk7Cit9CisKK1NiU29ja2V0V2FpdGVySW50ZXJlc3QgQ29tYmluZUludGVyZXN0cygKKyAgICBTYlNvY2tldFdhaXRlckludGVyZXN0IGEsIFNiU29ja2V0V2FpdGVySW50ZXJlc3QgYikgeworICBpbnQgYV9pbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGEpOworICBpbnQgYl9pbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGIpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8U2JTb2NrZXRXYWl0ZXJJbnRlcmVzdD4oYV9pbnQgfCBiX2ludCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitTYlNvY2tldFdhaXRlclByaXZhdGU6OlNiU29ja2V0V2FpdGVyUHJpdmF0ZSgpCisgICAgOiB0aHJlYWRfKFNiVGhyZWFkR2V0Q3VycmVudCgpKSwKKyAgICAgIHdha2V1cF9ldmVudF90b2tlbl8oLTEpLAorICAgICAgd2FrZXVwX2V2ZW50XyhDcmVhdGVFdmVudChudWxscHRyLCBmYWxzZSwgZmFsc2UsIG51bGxwdHIpKSB7CisgIHsKKyAgICBzdGFyYm9hcmQ6OlNjb3BlZExvY2sgbG9jayh1bmhhbmRsZWRfd2FrZXVwX2NvdW50X211dGV4Xyk7CisgICAgdW5oYW5kbGVkX3dha2V1cF9jb3VudF8gPSAwOworICB9CisgIGlmICh3YWtldXBfZXZlbnRfLklzVmFsaWQoKSA9PSBmYWxzZSkgeworICAgIFNCX0RMT0coRVJST1IpIDw8ICJDb3VsZCBub3QgY3JlYXRlIHdha2V1cCBldmVudDogIgorICAgICAgICAgICAgICAgICAgIDw8IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6V2luMzJFcnJvckNvZGUoR2V0TGFzdEVycm9yKCkpOworICAgIHJldHVybjsKKyAgfQorICB3YWtldXBfZXZlbnRfdG9rZW5fID0KKyAgICAgIHdhaXRlZXNfLkFkZFNvY2tldEV2ZW50QW5kV2FpdGVlKHdha2V1cF9ldmVudF8uR2V0RXZlbnQoKSwgbnVsbHB0cik7Cit9CisKK1NiU29ja2V0V2FpdGVyUHJpdmF0ZTo6flNiU29ja2V0V2FpdGVyUHJpdmF0ZSgpIHsKKyAgZm9yIChhdXRvJiBpdCA6IHdhaXRlZXNfLkdldFdhaXRlZXMoKSkgeworICAgIGlmIChpdCkgeworICAgICAgU0JfRENIRUNLKENoZWNrU29ja2V0V2FpdGVySXNUaGlzKGl0LT5zb2NrZXQpKTsKKyAgICB9CisgIH0KK30KKworYm9vbCBTYlNvY2tldFdhaXRlclByaXZhdGU6OkFkZChTYlNvY2tldCBzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiU29ja2V0V2FpdGVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRlcmVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGVyc2lzdGVudCkgeworICBTQl9EQ0hFQ0soU2JUaHJlYWRJc0N1cnJlbnQodGhyZWFkXykpOworCisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogU29ja2V0ICgiIDw8IHNvY2tldCA8PCAiKSBpcyBpbnZhbGlkLiI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKCFpbnRlcmVzdHMpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogTm8gaW50ZXJlc3RzIHByb3ZpZGVkLiI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gVGhlIHBvbGljeSBpcyBub3QgdG8gYWRkIGEgc29ja2V0IHRvIGEgd2FpdGVyIGlmIGl0IGlzIHJlZ2lzdGVyZWQgd2l0aAorICAvLyBhbm90aGVyIHdhaXRlci4KKworICAvLyBUT0RPOiBJZiBhbnlvbmUgd2VyZSB0byB3YW50IHRvIGFkZCBhIHNvY2tldCB0byBhIGRpZmZlcmVudCB3YWl0ZXIsCisgIC8vIGl0IHdvdWxkIHByb2JhYmx5IGJlIGFub3RoZXIgdGhyZWFkLCBzbyBkb2luZyB0aGlzIGNoZWNrIHdpdGhvdXQgbG9ja2luZyBpcworICAvLyBwcm9iYWJseSB3cm9uZy4gQnV0LCBpdCBpcyBhbHNvIGEgcGFpbiwgYW5kLCBhdCB0aGlzIHByZWNpc2UgbW9tZW50LCBzb2NrZXQKKyAgLy8gYWNjZXNzIGlzIGFsbCBnb2luZyB0byBjb21lIGZyb20gb25lIEkvTyB0aHJlYWQgYW55d2F5LCBhbmQgdGhlcmUgd2lsbCBvbmx5CisgIC8vIGJlIG9uZSB3YWl0ZXIuCisgIGlmIChTYlNvY2tldFdhaXRlcklzVmFsaWQoc29ja2V0LT53YWl0ZXIpKSB7CisgICAgaWYgKHNvY2tldC0+d2FpdGVyID09IHRoaXMpIHsKKyAgICAgIFNCX0RMT0coRVJST1IpIDw8IF9fRlVOQ1RJT05fXyA8PCAiOiBTb2NrZXQgYWxyZWFkeSBoYXMgdGhpcyB3YWl0ZXIgKCIKKyAgICAgICAgICAgICAgICAgICAgIDw8IHRoaXMgPDwgIikuIjsKKyAgICB9IGVsc2UgeworICAgICAgU0JfRExPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IFNvY2tldCBhbHJlYWR5IGhhcyB3YWl0ZXIgKCIKKyAgICAgICAgICAgICAgICAgICAgIDw8IHNvY2tldC0+d2FpdGVyIDw8ICIsIHRoaXM9IiA8PCB0aGlzIDw8ICIpLiI7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGludCBuZXR3b3JrX2V2ZW50X2ludGVyZXN0cyA9IDA7CisgIGlmIChpbnRlcmVzdHMgJiBrU2JTb2NrZXRXYWl0ZXJJbnRlcmVzdFJlYWQpIHsKKyAgICBuZXR3b3JrX2V2ZW50X2ludGVyZXN0cyB8PSBGRF9SRUFEIHwgRkRfQUNDRVBUIHwgRkRfQ0xPU0U7CisgIH0KKworICBpZiAoaW50ZXJlc3RzICYga1NiU29ja2V0V2FpdGVySW50ZXJlc3RXcml0ZSkgeworICAgIG5ldHdvcmtfZXZlbnRfaW50ZXJlc3RzIHw9IEZEX0NPTk5FQ1QgfCBGRF9XUklURTsKKyAgfQorCisgIGNvbnN0IEJPT0wgbWFudWFsX3Jlc2V0ID0gIXBlcnNpc3RlbnQ7CisKKyAgU0JfRENIRUNLKCFzb2NrZXQtPnNvY2tldF9ldmVudC5Jc1ZhbGlkKCkpOworCisgIHNvY2tldC0+c29ja2V0X2V2ZW50LlJlc2V0KAorICAgICAgQ3JlYXRlRXZlbnQobnVsbHB0ciwgbWFudWFsX3Jlc2V0LCBmYWxzZSwgbnVsbHB0cikpOworICBpZiAoc29ja2V0LT5zb2NrZXRfZXZlbnQuR2V0RXZlbnQoKSA9PSBXU0FfSU5WQUxJRF9FVkVOVCkgeworICAgIGludCBsYXN0X2Vycm9yID0gV1NBR2V0TGFzdEVycm9yKCk7CisgICAgU0JfRExPRyhFUlJPUikgPDwgIkVycm9yIGNhbGxpbmcgV1NBQ3JlYXRlRXZlbnQoKSBsYXN0X2Vycm9yID0gIgorICAgICAgICAgICAgICAgICAgIDw8IHNid2luMzI6OldpbjMyRXJyb3JDb2RlKGxhc3RfZXJyb3IpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8vIE5vdGUgdGhhdCBXU0FFbnVtTmV0d29ya0V2ZW50cyB1c2VkIGVsc2V3aGVyZSBvbmx5IHdvcmtzIHdpdGgKKyAgLy8gV1NBRXZlbnRTZWxlY3QuCisgIC8vIFBsZWFzZSBjb25zaWRlciB0aGF0IGJlZm9yZSBjaGFuZ2luZyB0aGlzIGNvZGUuCisgIGludCByZXR1cm5fdmFsdWUgPQorICAgICAgV1NBRXZlbnRTZWxlY3Qoc29ja2V0LT5zb2NrZXRfaGFuZGxlLCBzb2NrZXQtPnNvY2tldF9ldmVudC5HZXRFdmVudCgpLAorICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19ldmVudF9pbnRlcmVzdHMpOworCisgIGlmIChyZXR1cm5fdmFsdWUgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgaW50IGxhc3RfZXJyb3IgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCAiRXJyb3IgY2FsbGluZyBXU0FFdmVudFNlbGVjdCgpIGxhc3RfZXJyb3IgPSAiCisgICAgICAgICAgICAgICAgICAgPDwgc2J3aW4zMjo6V2luMzJFcnJvckNvZGUobGFzdF9lcnJvcik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKHdhaXRlZXNfLkdldEhhbmRsZUFycmF5U2l6ZSgpID49IE1BWElNVU1fV0FJVF9PQkpFQ1RTKSB7CisgICAgU0JfRExPRyhFUlJPUikgPDwgIlJlYWNoZWQgbWF4ZWQgbnVtYmVyIG9mIHNvY2tldCBldmVudHMgKCIKKyAgICAgICAgICAgICAgICAgICA8PCBNQVhJTVVNX1dBSVRfT0JKRUNUUyA8PCAiKSI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp1bmlxdWVfcHRyPFdhaXRlZT4gd2FpdGVlKAorICAgICAgbmV3IFdhaXRlZSh0aGlzLCBzb2NrZXQsIGNvbnRleHQsIGNhbGxiYWNrLCBpbnRlcmVzdHMsIHBlcnNpc3RlbnQpKTsKKyAgd2FpdGVlc18uQWRkU29ja2V0RXZlbnRBbmRXYWl0ZWUoc29ja2V0LT5zb2NrZXRfZXZlbnQuR2V0RXZlbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHdhaXRlZSkpOworICBzb2NrZXQtPndhaXRlciA9IHRoaXM7CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpSZW1vdmUoU2JTb2NrZXQgc29ja2V0KSB7CisgIFNCX0RDSEVDSyhTYlRocmVhZElzQ3VycmVudCh0aHJlYWRfKSk7CisKKyAgaWYgKCFDaGVja1NvY2tldFdhaXRlcklzVGhpcyhzb2NrZXQpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc29ja2V0LT53YWl0ZXIgPSBrU2JTb2NrZXRXYWl0ZXJJbnZhbGlkOworCisgIHNvY2tldC0+c29ja2V0X2V2ZW50LlJlc2V0KG51bGxwdHIpOworICByZXR1cm4gd2FpdGVlc18uUmVtb3ZlU29ja2V0KHNvY2tldCk7Cit9CisKK3ZvaWQgU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpIYW5kbGVXYWtlVXBSZWFkKCkgeworICBTQl9MT0coSU5GTykgPDwgIkhhbmRsZVdha2VVcFJlYWQgaW5jcmVtZW50aW5nIGNvdW50ZXIuLiI7CisgIHN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKHVuaGFuZGxlZF93YWtldXBfY291bnRfbXV0ZXhfKTsKKyAgKyt1bmhhbmRsZWRfd2FrZXVwX2NvdW50XzsKK30KKwordm9pZCBTYlNvY2tldFdhaXRlclByaXZhdGU6OlNpZ25hbFdha2V1cEV2ZW50KCkgeworICBTQl9EQ0hFQ0sod2FrZXVwX2V2ZW50Xy5Jc1ZhbGlkKCkpOworICBXU0FTZXRFdmVudCh3YWtldXBfZXZlbnRfLkdldEV2ZW50KCkpOworfQorCit2b2lkIFNiU29ja2V0V2FpdGVyUHJpdmF0ZTo6UmVzZXRXYWtldXBFdmVudCgpIHsKKyAgU0JfRENIRUNLKHdha2V1cF9ldmVudF8uSXNWYWxpZCgpKTsKKyAgV1NBUmVzZXRFdmVudCh3YWtldXBfZXZlbnRfLkdldEV2ZW50KCkpOworfQorCitib29sIFNiU29ja2V0V2FpdGVyUHJpdmF0ZTo6Q2hlY2tTb2NrZXRXYWl0ZXJJc1RoaXMoU2JTb2NrZXQgc29ja2V0KSB7CisgIGlmICghU2JTb2NrZXRJc1ZhbGlkKHNvY2tldCkpIHsKKyAgICBTQl9ETE9HKEVSUk9SKSA8PCBfX0ZVTkNUSU9OX18gPDwgIjogU29ja2V0ICgiIDw8IHNvY2tldCA8PCAiKSBpcyBpbnZhbGlkLiI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKHNvY2tldC0+d2FpdGVyICE9IHRoaXMpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTYlNvY2tldFdhaXRlclByaXZhdGU6OldhaXQoKSB7CisgIFNCX0RDSEVDSyhTYlRocmVhZElzQ3VycmVudCh0aHJlYWRfKSk7CisKKyAgLy8gV2UgYmFzaWNhbGx5IHdhaXQgZm9yIHRoZSBsYXJnZXN0IGFtb3VudCBvZiB0aW1lIHRvIGFjaGlldmUgYW4gaW5kZWZpbml0ZQorICAvLyBibG9jay4KKyAgV2FpdFRpbWVkKGtTYlRpbWVNYXgpOworfQorCitTYlNvY2tldFdhaXRlclJlc3VsdCBTYlNvY2tldFdhaXRlclByaXZhdGU6OldhaXRUaW1lZChTYlRpbWUgZHVyYXRpb24pIHsKKyAgU0JfRENIRUNLKFNiVGhyZWFkSXNDdXJyZW50KHRocmVhZF8pKTsKKworICBjb25zdCBTYlRpbWVNb25vdG9uaWMgc3RhcnRfdGltZSA9IFNiVGltZUdldE1vbm90b25pY05vdygpOworICBpbnQ2NF90IGR1cmF0aW9uX2xlZnQgPSBkdXJhdGlvbjsKKworICB3aGlsZSAodHJ1ZSkgeworICAgIC8vIHx3YWl0ZWVzX3wgY291bGQgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIHRoZSBsYXN0IGxvb3AgaXRlcmF0aW9uLCBzbworICAgIC8vIHJlLXJlYWQgaXQuCisgICAgY29uc3QgRFdPUkQgbnVtYmVyX2V2ZW50cyA9CisgICAgICAgIHN0YXRpY19jYXN0PERXT1JEPih3YWl0ZWVzXy5HZXRIYW5kbGVBcnJheVNpemUoKSk7CisKKyAgICBjb25zdCBEV09SRCBtaWxsaXMgPSBzYndpbjMyOjpDb252ZXJ0U2JUaW1lVG9NaWxsaXNSb3VuZFVwKGR1cmF0aW9uX2xlZnQpOworCisgICAgeworICAgICAgc3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2sodW5oYW5kbGVkX3dha2V1cF9jb3VudF9tdXRleF8pOworICAgICAgaWYgKHVuaGFuZGxlZF93YWtldXBfY291bnRfID4gMCkgeworICAgICAgICAtLXVuaGFuZGxlZF93YWtldXBfY291bnRfOworICAgICAgICAvLyBUaGUgc2lnbmFsaW5nIHRocmVhZCBhbHNvIHNldCB0aGUgZXZlbnQsIHNvIHJlc2V0IGl0LgorICAgICAgICBSZXNldFdha2V1cEV2ZW50KCk7CisgICAgICAgIHJldHVybiBrU2JTb2NrZXRXYWl0ZXJSZXN1bHRXb2tlblVwOworICAgICAgfQorICAgIH0KKworICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSB3YWtldXAgZXZlbnQuCisgICAgU0JfRENIRUNLKG51bWJlcl9ldmVudHMgPiAwKTsKKworICAgIFNiU29ja2V0IG1heWJlX3dyaXRhYmxlX3NvY2tldCA9IGtTYlNvY2tldEludmFsaWQ7CisgICAgZm9yIChhdXRvJiBpdCA6IHdhaXRlZXNfLkdldFdhaXRlZXMoKSkgeworICAgICAgaWYgKCFpdCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGlmICgoaXQtPmludGVyZXN0cyAmIGtTYlNvY2tldFdhaXRlckludGVyZXN0V3JpdGUpID09IDApIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBpZiAoaXQtPnNvY2tldC0+d3JpdGFibGUubG9hZCgpKSB7CisgICAgICAgIG1heWJlX3dyaXRhYmxlX3NvY2tldCA9IGl0LT5zb2NrZXQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzX3dyaXRhYmxlID0gKG1heWJlX3dyaXRhYmxlX3NvY2tldCAhPSBrU2JTb2NrZXRJbnZhbGlkKTsKKyAgICBEV09SRCByZXR1cm5fdmFsdWUgPSBXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMoCisgICAgICAgIG51bWJlcl9ldmVudHMsIHdhaXRlZXNfLkdldEhhbmRsZUFycmF5KCksCisgICAgICAgIGZhbHNlLCBoYXNfd3JpdGFibGUgPyAwIDogbWlsbGlzLCBmYWxzZSk7CisKKyAgICBpZiAoaGFzX3dyaXRhYmxlIHx8ICgocmV0dXJuX3ZhbHVlID49IFdTQV9XQUlUX0VWRU5UXzApICYmCisgICAgICAgIChyZXR1cm5fdmFsdWUgPCAoV1NBX1dBSVRfRVZFTlRfMCArIG51bWJlcl9ldmVudHMpKSkpIHsKKyAgICAgIGludDY0X3Qgc29ja2V0X2luZGV4OworICAgICAgaWYgKGhhc193cml0YWJsZSkgeworICAgICAgICBzb2NrZXRfaW5kZXggPSB3YWl0ZWVzXy5HZXRJbmRleChtYXliZV93cml0YWJsZV9zb2NrZXQpLnZhbHVlKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzb2NrZXRfaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihyZXR1cm5fdmFsdWUpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oV1NBX1dBSVRfRVZFTlRfMCk7CisgICAgICB9CisgICAgICBTQl9EQ0hFQ0soc29ja2V0X2luZGV4ID49IDApOworICAgICAgaWYgKHNvY2tldF9pbmRleCA8IDApIHsKKyAgICAgICAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJCYWQgc29ja2V0X2luZGV4LiAiIDw8IHNvY2tldF9pbmRleDsKKyAgICAgICAgcmV0dXJuIGtTYlNvY2tldFdhaXRlclJlc3VsdFRpbWVkT3V0OworICAgICAgfQorCisgICAgICAvLyBNYWtlIHN1cmUgd2FrZXVwX2V2ZW50X3Rva2VuXyBpcyBpbml0aWFsaXplZC4KKyAgICAgIFNCX0RDSEVDSyh3YWtldXBfZXZlbnRfdG9rZW5fID49IDApOworCisgICAgICBpZiAoc29ja2V0X2luZGV4ID09IHdha2V1cF9ldmVudF90b2tlbl8pIHsKKyAgICAgICAgc3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2sodW5oYW5kbGVkX3dha2V1cF9jb3VudF9tdXRleF8pOworICAgICAgICBTQl9EQ0hFQ0sodW5oYW5kbGVkX3dha2V1cF9jb3VudF8gPiAwKTsKKworICAgICAgICAtLXVuaGFuZGxlZF93YWtldXBfY291bnRfOworICAgICAgICAvLyBUaGlzIHdhcyBhIGR1bW15IGV2ZW50LiAgV2Ugd2VyZSB3b2tlbiB1cC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHJlc2V0IHRoZSBldmVudCBoZXJlLAorICAgICAgICAvLyBzaW5jZSBpdCB3YXMgY3JlYXRlZCB1c2luZyBhbiBhdXRvLXJlc2V0IGZsYWcuCisgICAgICAgIHJldHVybiBrU2JTb2NrZXRXYWl0ZXJSZXN1bHRXb2tlblVwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgV2FpdGVlKiB3YWl0ZWUgPSB3YWl0ZWVzXy5HZXRXYWl0ZWVCeUluZGV4KHNvY2tldF9pbmRleCk7CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBub24tcGVyc2lzdGVudCB3YWl0ZWUgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrLCBzbworICAgICAgICAvLyB0aGF0IHdlIGNhbiBhZGQgYW5vdGhlciB3YWl0ZWUgaW4gdGhlIGNhbGxiYWNrIGlmIHdlIG5lZWQgdG8uIFRoaXMKKyAgICAgICAgLy8gaXMgYWxzbyB3aHkgd2UgY29weSBhbGwgdGhlIGZpZWxkcyB3ZSBuZWVkIG91dCBvZiB3YWl0ZWUuCisgICAgICAgIGNvbnN0IFNiU29ja2V0IHNvY2tldCA9IHdhaXRlZS0+c29ja2V0OworICAgICAgICBjb25zdCBTYlNvY2tldFdhaXRlckNhbGxiYWNrIGNhbGxiYWNrID0gd2FpdGVlLT5jYWxsYmFjazsKKyAgICAgICAgdm9pZCogY29udGV4dCA9IHdhaXRlZS0+Y29udGV4dDsKKworICAgICAgICAvLyBOb3RlOiB0aGlzIHNob3VsZCBhbHNvIGdvIGJlZm9yZSBSZW1vdmUoKS4KKyAgICAgICAgU2JTb2NrZXRXYWl0ZXJJbnRlcmVzdCBpbnRlcmVzdHMgPQorICAgICAgICAgICAgRGlzY292ZXJOZXR3b3JrRXZlbnRJbnRlcmVzdHMoc29ja2V0LT5zb2NrZXRfaGFuZGxlKTsKKworICAgICAgICBpZiAoKHdhaXRlZS0+aW50ZXJlc3RzICYga1NiU29ja2V0V2FpdGVySW50ZXJlc3RXcml0ZSkgJiYKKyAgICAgICAgICAgICAgc29ja2V0LT53cml0YWJsZS5sb2FkKCkpIHsKKyAgICAgICAgICBpbnRlcmVzdHMgPSBDb21iaW5lSW50ZXJlc3RzKGludGVyZXN0cywga1NiU29ja2V0V2FpdGVySW50ZXJlc3RXcml0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJlc3RzICYga1NiU29ja2V0V2FpdGVySW50ZXJlc3RXcml0ZSkgeworICAgICAgICAgIHNvY2tldC0+d3JpdGFibGUuc3RvcmUodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXdhaXRlZS0+cGVyc2lzdGVudCkgeworICAgICAgICAgIFJlbW92ZSh3YWl0ZWUtPnNvY2tldCk7CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayh0aGlzLCBzb2NrZXQsIGNvbnRleHQsIGludGVyZXN0cyk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChyZXR1cm5fdmFsdWUgPT0gV1NBX1dBSVRfRkFJTEVEKSB7CisgICAgICBTQl9ETE9HKEVSUk9SKSA8PCAiV2FpdCBmYWlsZWQgLS0gIgorICAgICAgICAgICAgICAgICAgICAgPDwgc2J3aW4zMjo6V2luMzJFcnJvckNvZGUoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgcmV0dXJuIGtTYlNvY2tldFdhaXRlclJlc3VsdEludmFsaWQ7CisgICAgfSBlbHNlIGlmIChyZXR1cm5fdmFsdWUgPT0gV1NBX1dBSVRfVElNRU9VVCkgeworICAgICAgLy8gRG8gbm90aGluZywgY2hlY2sgdGltZSBvdXJzZWx2ZXMuCisgICAgfSBlbHNlIHsKKyAgICAgIFNCX05PVFJFQUNIRUQoKSA8PCAiVW5oYW5kbGVkIGNhc2U6ICIgPDwgcmV0dXJuX3ZhbHVlOworICAgICAgcmV0dXJuIGtTYlNvY2tldFdhaXRlclJlc3VsdEludmFsaWQ7CisgICAgfQorCisgICAgY29uc3QgaW50NjRfdCB0aW1lX2VsYXBzZWQgPQorICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6OmludDY0X3Q+KFNiVGltZUdldE1vbm90b25pY05vdygpKSAtCisgICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6aW50NjRfdD4oc3RhcnRfdGltZSk7CisgICAgZHVyYXRpb25fbGVmdCAtPSB0aW1lX2VsYXBzZWQ7CisgICAgaWYgKGR1cmF0aW9uX2xlZnQgPCAwKSB7CisgICAgICByZXR1cm4ga1NiU29ja2V0V2FpdGVyUmVzdWx0VGltZWRPdXQ7CisgICAgfQorICB9CisKKyAgU0JfTk9UUkVBQ0hFRCgpIDw8ICJJbnZhbGlkIHN0YXRlIHJlYWNoZWQiOworICByZXR1cm4ga1NiU29ja2V0V2FpdGVyUmVzdWx0SW52YWxpZDsKK30KKwordm9pZCBTYlNvY2tldFdhaXRlclByaXZhdGU6Oldha2VVcCgpIHsKKyAgLy8gSW5jcmVhc2luZyB1bmhhbmRsZWRfd2FrZXVwX2NvdW50X211dGV4XyBhbmQgY2FsbGluZyBTaWduYWxXYWtldXBFdmVudAorICAvLyBhdG9taWNhbGx5IGhlbHBzIGFkZCBhZGRpdGlvbmFsIGd1YXJhbnRlZXMgb2Ygd2hlbiB0aGUgd2FpdGVyIGNhbiBiZQorICAvLyB3b2tlbiB1cC4gIFdoaWxlIHdlIGNhbiBjb2RlIGFyb3VuZCB0aGlzIGVhc2lseSwgaGF2aW5nIGEgc3Ryb25nZXIKKyAgLy8gY291cGxpbmcgZW5hYmxlcyB1cyB0byBhZGQgRENIRUNLcyBmb3IgfHVuaGFuZGxlZF93YWtldXBfY291bnRffCBpbiBvdGhlcgorICAvLyBwYXJ0cyBvZiB0aGUgY29kZS4KKyAgc3RhcmJvYXJkOjpTY29wZWRMb2NrIGxvY2sodW5oYW5kbGVkX3dha2V1cF9jb3VudF9tdXRleF8pOworICArK3VuaGFuZGxlZF93YWtldXBfY291bnRfOworICBTaWduYWxXYWtldXBFdmVudCgpOworfQorCitTYlNvY2tldFdhaXRlclByaXZhdGU6OldhaXRlZSogU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpXYWl0ZWVSZWdpc3RyeTo6R2V0V2FpdGVlKAorICAgIFNiU29ja2V0IHNvY2tldCkgeworICBzdGFyYm9hcmQ6Om9wdGlvbmFsPGludDY0X3Q+IHRva2VuID0gR2V0SW5kZXgoc29ja2V0KTsKKyAgaWYgKCF0b2tlbikgeworICAgIHJldHVybiBudWxscHRyOworICB9CisgIHJldHVybiB3YWl0ZWVzX1t0b2tlbi52YWx1ZSgpXS5nZXQoKTsKK30KKworc3RhcmJvYXJkOjpvcHRpb25hbDxpbnQ2NF90PgorU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpXYWl0ZWVSZWdpc3RyeTo6R2V0SW5kZXgoU2JTb2NrZXQgc29ja2V0KSB7CisgIGF1dG8gaXRlcmF0b3IgPSBzb2NrZXRfdG9faW5kZXhfbWFwXy5maW5kKHNvY2tldCk7CisgIGlmIChpdGVyYXRvciA9PSBzb2NrZXRfdG9faW5kZXhfbWFwXy5lbmQoKSkgeworICAgIHJldHVybiBzdGFyYm9hcmQ6Om51bGxvcHQ7CisgIH0KKyAgcmV0dXJuIGl0ZXJhdG9yLT5zZWNvbmQ7Cit9CisKK1NiU29ja2V0V2FpdGVyUHJpdmF0ZTo6V2FpdGVlUmVnaXN0cnk6Okxvb2t1cFRva2VuCitTYlNvY2tldFdhaXRlclByaXZhdGU6OldhaXRlZVJlZ2lzdHJ5OjpBZGRTb2NrZXRFdmVudEFuZFdhaXRlZSgKKyAgICBXU0FFVkVOVCBzb2NrZXRfZXZlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPFdhaXRlZT4gd2FpdGVlKSB7CisgIFNCX0RDSEVDSyhzb2NrZXRfZXZlbnQgIT0gV1NBX0lOVkFMSURfRVZFTlQpOworICBTQl9EQ0hFQ0soc29ja2V0X2V2ZW50c18uc2l6ZSgpID09IHdhaXRlZXNfLnNpemUoKSk7CisgIFNiU29ja2V0IHNvY2tldCA9IGtTYlNvY2tldEludmFsaWQ7CisgIGlmICh3YWl0ZWUpIHsKKyAgICBzb2NrZXQgPSB3YWl0ZWUtPnNvY2tldDsKKyAgfQorICBzb2NrZXRfdG9faW5kZXhfbWFwXy5lbXBsYWNlKHNvY2tldCwgc29ja2V0X2V2ZW50c18uc2l6ZSgpKTsKKyAgc29ja2V0X2V2ZW50c18uZW1wbGFjZV9iYWNrKHNvY2tldF9ldmVudCk7CisgIHdhaXRlZXNfLmVtcGxhY2VfYmFjayhzdGQ6Om1vdmUod2FpdGVlKSk7CisKKyAgcmV0dXJuIHNvY2tldF9ldmVudHNfLnNpemUoKSAtIDE7Cit9CisKK2Jvb2wgU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpXYWl0ZWVSZWdpc3RyeTo6UmVtb3ZlU29ja2V0KFNiU29ja2V0IHNvY2tldCkgeworICBhdXRvIGl0ZXJhdG9yID0gc29ja2V0X3RvX2luZGV4X21hcF8uZmluZChzb2NrZXQpOworICBpZiAoaXRlcmF0b3IgPT0gc29ja2V0X3RvX2luZGV4X21hcF8uZW5kKCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBjb25zdCBzdGQ6OnNpemVfdCBjdXJyZW50X3NpemUgPSBzb2NrZXRfZXZlbnRzXy5zaXplKCk7CisgIFNCX0RDSEVDSyhjdXJyZW50X3NpemUgPT0gd2FpdGVlc18uc2l6ZSgpKTsKKworICBjb25zdCBzdGQ6OnNpemVfdCBzb2NrZXRfaW5kZXggPSBpdGVyYXRvci0+c2Vjb25kOworICBTYlNvY2tldCBzb2NrZXRfdG9fc3dhcCA9IHdhaXRlZXNfW2N1cnJlbnRfc2l6ZSAtIDFdLT5zb2NrZXQ7CisKKyAgLy8gU2luY2UgfEVyYXNlSW5kZXhGcm9tVmVjdG9yfCB3aWxsIHN3YXAgdGhlIGxhc3Qgc29ja2V0IGFuZCB0aGUgc29ja2V0CisgIC8vIGF0IGN1cnJlbnQgaW5kZXgsIHxzb2NrZXRfdG9faW5kZXhffCB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgc29ja2V0X3RvX2luZGV4X21hcF9bc29ja2V0X3RvX3N3YXBdID0gc29ja2V0X2luZGV4OworICAvLyBOb3RlIHRoYXQgfEVyYXNlSW5kZXhGcm9tVmVjdG9yfCBvbmx5IHRvdWNoZXMgdGhlIGxhc3QgZWxlbWVudCBhbmQgdGhlCisgIC8vIGVsZW1lbnQgdG8gcmVtb3ZlLgorICBFcmFzZUluZGV4RnJvbVZlY3Rvcigmc29ja2V0X2V2ZW50c18sIHNvY2tldF9pbmRleCk7CisgIEVyYXNlSW5kZXhGcm9tVmVjdG9yKCZ3YWl0ZWVzXywgc29ja2V0X2luZGV4KTsKKworICBzb2NrZXRfdG9faW5kZXhfbWFwXy5lcmFzZShzb2NrZXQpOworCisgIFNCX0RDSEVDSyhzb2NrZXRfZXZlbnRzXy5zaXplKCkgPT0gd2FpdGVlc18uc2l6ZSgpKTsKKyAgU0JfRENIRUNLKHNvY2tldF9ldmVudHNfLnNpemUoKSA9PSBzb2NrZXRfdG9faW5kZXhfbWFwXy5zaXplKCkpOworICByZXR1cm4gdHJ1ZTsKK30KKworU2JTb2NrZXRXYWl0ZXJQcml2YXRlOjpXYWl0ZWUqCitTYlNvY2tldFdhaXRlclByaXZhdGU6OldhaXRlZVJlZ2lzdHJ5OjpHZXRXYWl0ZWVCeUluZGV4KAorICAgIGNvbnN0IFNiU29ja2V0V2FpdGVyUHJpdmF0ZTo6V2FpdGVlUmVnaXN0cnk6Okxvb2t1cFRva2VuIHNvY2tldF9pbmRleCkgeworICBTQl9EQ0hFQ0soc29ja2V0X2luZGV4ID49IDApOworCisgIFNCX0RDSEVDSyhzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oc29ja2V0X2luZGV4KSA8PSBzb2NrZXRfZXZlbnRzXy5zaXplKCkpOworICByZXR1cm4gd2FpdGVlc19bc29ja2V0X2luZGV4XS5nZXQoKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMGU4NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTQ5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9TT0NLRVRfV0FJVEVSX0lOVEVSTkFMX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfU09DS0VUX1dBSVRFUl9JTlRFUk5BTF9IXworCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisKKyNpbmNsdWRlIDxkZXF1ZT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9vcHRpb25hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc29ja2V0LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9pbnRlcm5hbF9vbmx5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdXRvX2V2ZW50X2hhbmRsZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldF93YWl0ZXIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKworLy8gU2JTb2NrZXRXYWl0ZXJQcml2YXRlIGlzIGRlZmluZWQgYXMgYSBzdHJ1Y3QsIGJ1dCBmb3Igd2luZG93cyBpbXBsZW1lbnRhdGlvbgorLy8gZW5vdWdoIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gYWRkZWQgc28gdGhhdCBpdCB3YXJyYW50cyBiZWluZyBhIGNsYXNzCisvLyBwZXIgR29vZ2xlJ3MgQysrIHN0eWxlIGd1aWRlLiAgVGhpcyBtaXNtYXRjaCBjYXVzZXMgdGhlIE1pY3Jvc29mdCdzIGNvbXBpbGVyCisvLyB0byBnZW5lcmF0ZSBhIHdhcm5pbmcuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQwOTkpCitjbGFzcyBTYlNvY2tldFdhaXRlclByaXZhdGUgeworIHB1YmxpYzoKKyAgU2JTb2NrZXRXYWl0ZXJQcml2YXRlKCk7CisgIH5TYlNvY2tldFdhaXRlclByaXZhdGUoKTsKKworICAvLyBUaGVzZSBtZXRob2RzIGltcGxlbWVudCB0aGUgU2JTb2NrZXRXYWl0ZXIgQVBJIGRlZmluZWQgaW4gc29ja2V0X3dhaXRlci5oLgorICBib29sIEFkZChTYlNvY2tldCBzb2NrZXQsCisgICAgICAgICAgIHZvaWQqIGNvbnRleHQsCisgICAgICAgICAgIFNiU29ja2V0V2FpdGVyQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgIGludCBpbnRlcmVzdHMsCisgICAgICAgICAgIGJvb2wgcGVyc2lzdGVudCk7CisgIGJvb2wgUmVtb3ZlKFNiU29ja2V0IHNvY2tldCk7CisgIHZvaWQgV2FpdCgpOworICBTYlNvY2tldFdhaXRlclJlc3VsdCBXYWl0VGltZWQoU2JUaW1lIGR1cmF0aW9uKTsKKyAgdm9pZCBXYWtlVXAoKTsKKyAgdm9pZCBIYW5kbGVXYWtlVXBSZWFkKCk7CisKKyBwcml2YXRlOgorICAvLyBBIHJlZ2lzdHJhdGlvbiBvZiBhIHNvY2tldCB3aXRoIGEgc29ja2V0IHdhaXRlci4KKyAgc3RydWN0IFdhaXRlZSB7CisgICAgV2FpdGVlKFNiU29ja2V0V2FpdGVyIHdhaXRlciwKKyAgICAgICAgICAgU2JTb2NrZXQgc29ja2V0LAorICAgICAgICAgICB2b2lkKiBjb250ZXh0LAorICAgICAgICAgICBTYlNvY2tldFdhaXRlckNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICBpbnQgaW50ZXJlc3RzLAorICAgICAgICAgICBib29sIHBlcnNpc3RlbnQpCisgICAgICAgIDogd2FpdGVyKHdhaXRlciksCisgICAgICAgICAgc29ja2V0KHNvY2tldCksCisgICAgICAgICAgY29udGV4dChjb250ZXh0KSwKKyAgICAgICAgICBjYWxsYmFjayhjYWxsYmFjayksCisgICAgICAgICAgaW50ZXJlc3RzKGludGVyZXN0cyksCisgICAgICAgICAgcGVyc2lzdGVudChwZXJzaXN0ZW50KSB7fQorICAgIC8vIFRoZSB3YWl0ZXIgdGhpcyBldmVudCBpcyByZWdpc3RlcmVkIHdpdGguCisgICAgU2JTb2NrZXRXYWl0ZXIgd2FpdGVyOworCisgICAgLy8gVGhlIHNvY2tldCByZWdpc3RlcmVkIHdpdGggdGhlIHdhaXRlci4KKyAgICBTYlNvY2tldCBzb2NrZXQ7CisKKyAgICAvLyBBIGNvbnRleHQgdmFsdWUgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suCisgICAgdm9pZCogY29udGV4dDsKKworICAgIC8vIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gb25lIG9yIG1vcmUgcmVnaXN0ZXJlZCBpbnRlcmVzdHMgYmVjb21lIHJlYWR5LgorICAgIFNiU29ja2V0V2FpdGVyQ2FsbGJhY2sgY2FsbGJhY2s7CisKKyAgICAvLyBUaGUgc2V0IG9mIGludGVyZXN0cyByZWdpc3RlcmVkIHdpdGggdGhlIHdhaXRlci4KKyAgICBpbnQgaW50ZXJlc3RzOworCisgICAgLy8gV2hldGhlciB0aGlzIFdhaXRlZSBzaG91bGQgc3RheSByZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IGNhbGxiYWNrLgorICAgIGJvb2wgcGVyc2lzdGVudDsKKyAgfTsKKworICBjbGFzcyBXYWl0ZWVSZWdpc3RyeSB7CisgICBwdWJsaWM6CisgICAgdHlwZWRlZiBpbnQ2NF90IExvb2t1cFRva2VuOworICAgIHR5cGVkZWYgc3RkOjpkZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2FpdGVlPj4gV2FpdGVlczsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxTYlNvY2tldCwgc3RkOjpzaXplX3Q+IFNvY2tldFRvSW5kZXg7CisKKyAgICBXU0FFVkVOVCogR2V0SGFuZGxlQXJyYXkoKSB7IHJldHVybiBzb2NrZXRfZXZlbnRzXy5kYXRhKCk7IH0KKyAgICBzdGQ6OnNpemVfdCBHZXRIYW5kbGVBcnJheVNpemUoKSB7IHJldHVybiBzb2NrZXRfZXZlbnRzXy5zaXplKCk7IH0KKyAgICBjb25zdCBXYWl0ZWVzJiBHZXRXYWl0ZWVzKCkgY29uc3QgeyByZXR1cm4gd2FpdGVlc187IH0KKworICAgIC8vIEdldHMgdGhlIFdhaXRlZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHNvY2tldCwgb3IgbnVsbHB0ci4KKyAgICBXYWl0ZWUqIEdldFdhaXRlZShTYlNvY2tldCBzb2NrZXQpOworCisgICAgLy8gR2V0cyB0aGUgaW5kZXggYnkgc29ja2V0CisgICAgc3RhcmJvYXJkOjpvcHRpb25hbDxpbnQ2NF90PiBHZXRJbmRleChTYlNvY2tldCBzb2NrZXQpOworCisgICAgLy8gR2V0cyB0aGUgV2FpdGVlIGJ5IGluZGV4LgorICAgIFdhaXRlZSogR2V0V2FpdGVlQnlJbmRleChMb29rdXBUb2tlbiBzb2NrZXRfaW5kZXgpOworCisgICAgLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGV2ZW50LgorICAgIExvb2t1cFRva2VuIEFkZFNvY2tldEV2ZW50QW5kV2FpdGVlKFdTQUVWRU5UIHNvY2tldF9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FpdGVlPiB3YWl0ZWUpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzb2NrZXQgd2FzIGZvdW5kLCBhbmQgcmVtb3ZlZC4KKyAgICBib29sIFJlbW92ZVNvY2tldChTYlNvY2tldCBzb2NrZXQpOworCisgICBwcml2YXRlOgorICAgIFNvY2tldFRvSW5kZXggc29ja2V0X3RvX2luZGV4X21hcF87CisgICAgc3RkOjp2ZWN0b3I8V1NBRVZFTlQ+IHNvY2tldF9ldmVudHNfOworICAgIHN0ZDo6ZGVxdWU8c3RkOjp1bmlxdWVfcHRyPFdhaXRlZT4+IHdhaXRlZXNfOworICB9OworCisgIHZvaWQgU2lnbmFsV2FrZXVwRXZlbnQoKTsKKyAgdm9pZCBSZXNldFdha2V1cEV2ZW50KCk7CisKKyAgYm9vbCBDaGVja1NvY2tldFdhaXRlcklzVGhpcyhTYlNvY2tldCBzb2NrZXQpOworCisgIC8vIFRoZSB0aHJlYWQgdGhpcyB3YWl0ZXIgd2FzIGNyZWF0ZWQgb24uIEltbXV0YWJsZSwgc28gYWNjZXNzaWJsZSBmcm9tIGFueQorICAvLyB0aHJlYWQuCisgIGNvbnN0IFNiVGhyZWFkIHRocmVhZF87CisKKyAgLy8gVGhlIHJlZ2lzdHJ5IG9mIGN1cnJlbnRseSByZWdpc3RlcmVkIFdhaXRlZXMuCisgIFdhaXRlZVJlZ2lzdHJ5IHdhaXRlZXNfOworICBXYWl0ZWVSZWdpc3RyeTo6TG9va3VwVG9rZW4gd2FrZXVwX2V2ZW50X3Rva2VuXzsKKworICAvLyBUaGlzIG11dGV4IGNvdmVycyB0aGUgbmV4dCB0d28gdmFyaWFibGVzLgorICBzdGFyYm9hcmQ6Ok11dGV4IHVuaGFuZGxlZF93YWtldXBfY291bnRfbXV0ZXhfOworICAvLyBOdW1iZXIgb2YgdGltZXMgd2FrZSB1cCBoYXMgYmVlbiBjYWxsZWQsIGFuZCBub3QgaGFuZGxlZC4KKyAgc3RkOjppbnQzMl90IHVuaGFuZGxlZF93YWtldXBfY291bnRfOworICAvLyBUaGUgV1NBRXZlbnQgdGhhdCBpcyBzZXQgYnkgV2FrZXVwKCk7CisgIHNid2luMzI6OkF1dG9FdmVudEhhbmRsZSB3YWtldXBfZXZlbnRfOworfTsKKyNwcmFnbWEgd2FybmluZyhwb3ApCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9TT0NLRVRfV0FJVEVSX0lOVEVSTkFMX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfcmVtb3ZlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3JlbW92ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjhlMmZhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3JlbW92ZS5jYwpAQCAtMCwwICsxLDI1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc29ja2V0X3dhaXRlci5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmgiCisKK2Jvb2wgU2JTb2NrZXRXYWl0ZXJSZW1vdmUoU2JTb2NrZXRXYWl0ZXIgd2FpdGVyLCBTYlNvY2tldCBzb2NrZXQpIHsKKyAgaWYgKCFTYlNvY2tldFdhaXRlcklzVmFsaWQod2FpdGVyKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB3YWl0ZXItPlJlbW92ZShzb2NrZXQpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dhaXQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfd2FpdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDYwNTJhCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dhaXQuY2MKQEAgLTAsMCArMSwyNSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldF93YWl0ZXIuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oIgorCit2b2lkIFNiU29ja2V0V2FpdGVyV2FpdChTYlNvY2tldFdhaXRlciB3YWl0ZXIpIHsKKyAgaWYgKCFTYlNvY2tldFdhaXRlcklzVmFsaWQod2FpdGVyKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHdhaXRlci0+V2FpdCgpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dhaXRfdGltZWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfd2FpdF90aW1lZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJkNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dhaXRfdGltZWQuY2MKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NvY2tldF93YWl0ZXIuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl9pbnRlcm5hbC5oIgorCitTYlNvY2tldFdhaXRlclJlc3VsdCBTYlNvY2tldFdhaXRlcldhaXRUaW1lZChTYlNvY2tldFdhaXRlciB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlRpbWUgZHVyYXRpb24pIHsKKyAgaWYgKCFTYlNvY2tldFdhaXRlcklzVmFsaWQod2FpdGVyKSkgeworICAgIHJldHVybiBrU2JTb2NrZXRXYWl0ZXJSZXN1bHRJbnZhbGlkOworICB9CisKKyAgcmV0dXJuIHdhaXRlci0+V2FpdFRpbWVkKGR1cmF0aW9uKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl93YWtlX3VwLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dha2VfdXAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjMTNjZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl93YWtlX3VwLmNjCkBAIC0wLDAgKzEsMjUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zb2NrZXRfd2FpdGVyLmgiCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfaW50ZXJuYWwuaCIKKwordm9pZCBTYlNvY2tldFdhaXRlcldha2VVcChTYlNvY2tldFdhaXRlciB3YWl0ZXIpIHsKKyAgaWYgKCFTYlNvY2tldFdhaXRlcklzVmFsaWQod2FpdGVyKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIHdhaXRlci0+V2FrZVVwKCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0YXJib2FyZF9tYWluLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdGFyYm9hcmRfbWFpbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDNmNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdGFyYm9hcmRfbWFpbi5jYwpAQCAtMCwwICsxLDg0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0YXJib2FyZF9tYWluLmgiCisKKyNpbmNsdWRlIDxPYmpiYXNlLmg+CisjaW5jbHVkZSA8V2luU29jazIuaD4KKyNpbmNsdWRlIDxtZmFwaS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvY29tbWFuZF9saW5lLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV0X2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9wcml2YXRlLmgiCisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkNvbW1hbmRMaW5lOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6a05ldExvZ0NvbW1hbmRTd2l0Y2hXYWl0OwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6TmV0TG9nRmx1c2hUaGVuQ2xvc2U7Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpOZXRMb2dXYWl0Rm9yQ2xpZW50Q29ubmVjdGVkOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpBcHBsaWNhdGlvbldpbjMyOworCituYW1lc3BhY2UgeworCit2b2lkIFdhaXRGb3JOZXRMb2dJZk5lY2Vzc2FyeShjb25zdCBDb21tYW5kTGluZSYgY21kX2xpbmUpIHsKKyAgaWYgKGNtZF9saW5lLkhhc1N3aXRjaChrTmV0TG9nQ29tbWFuZFN3aXRjaFdhaXQpKSB7CisgICAgU2JUaW1lIHRpbWVvdXQgPSBrU2JUaW1lU2Vjb25kICogMjsKKyAgICBzdGQ6OnN0cmluZyB2YWwgPSBjbWRfbGluZS5HZXRTd2l0Y2hWYWx1ZShrTmV0TG9nQ29tbWFuZFN3aXRjaFdhaXQpOworICAgIGlmICghdmFsLmVtcHR5KCkpIHsKKyAgICAgIHRpbWVvdXQgPSBhdG9pKHZhbC5jX3N0cigpKTsKKyAgICB9CisgICAgTmV0TG9nV2FpdEZvckNsaWVudENvbm5lY3RlZCh0aW1lb3V0KTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UuCisKK2V4dGVybiAiQyIgaW50IFN0YXJib2FyZE1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIFdTQURhdGEgd3NhRGF0YTsKKyAgY29uc3QgaW50IGtXaW5Tb2NrVmVyc2lvbk1ham9yID0gMjsKKyAgY29uc3QgaW50IGtXaW5Tb2NrVmVyc2lvbk1pbm9yID0gMjsKKyAgY29uc3QgaW50IGluaXRfcmVzdWx0ID0gV1NBU3RhcnR1cCgKKyAgICAgIE1BS0VXT1JEKGtXaW5Tb2NrVmVyc2lvbk1ham9yLCBrV2luU29ja1ZlcnNpb25NYWpvciksICZ3c2FEYXRhKTsKKworICBTQl9DSEVDSyhpbml0X3Jlc3VsdCA9PSAwKTsKKyAgLy8gV1NBU3RhcnR1cCByZXR1cm5zIHRoZSBoaWdoZXN0IHZlcnNpb24gdGhhdCBpcyBzdXBwb3J0ZWQgdXAgdG8gdGhlIHZlcnNpb24KKyAgLy8gd2UgcmVxdWVzdC4KKyAgU0JfQ0hFQ0soTE9CWVRFKHdzYURhdGEud1ZlcnNpb24pID09IGtXaW5Tb2NrVmVyc2lvbk1ham9yICYmCisgICAgICAgICAgIEhJQllURSh3c2FEYXRhLndWZXJzaW9uKSA9PSBrV2luU29ja1ZlcnNpb25NaW5vcik7CisKKyAgLy8gSW5pdGlhbGl6ZSBDT00gZm9yIFhBdWRpbzIgQVBJcy4KKyAgQ29Jbml0aWFsaXplKG51bGxwdHIpOworICBTYkF1ZGlvU2lua1ByaXZhdGU6OkluaXRpYWxpemUoKTsKKyAgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpSZWdpc3Rlck1haW5UaHJlYWQoKTsKKyAgLy8gVE9ETzogRG8gdGhpcyB3aXRoIFNiT25jZSB3aGVuIG1lZGlhIGlzIGZpcnN0IHVzZWQgaW5zdGVhZC4KKyAgSFJFU1VMVCBociA9IE1GU3RhcnR1cChNRl9WRVJTSU9OKTsKKyAgU0JfRENIRUNLKFNVQ0NFRURFRChocikpOworCisgIFdhaXRGb3JOZXRMb2dJZk5lY2Vzc2FyeShDb21tYW5kTGluZShhcmdjLCBhcmd2KSk7CisgIEFwcGxpY2F0aW9uV2luMzIgYXBwbGljYXRpb247CisgIC8vIFRoaXMgd2lsbCBydW4gdGhlIG1lc3NhZ2UgbG9vcC4KKyAgY29uc3QgaW50IG1haW5fcmV0dXJuX3ZhbHVlID0gYXBwbGljYXRpb24uUnVuKGFyZ2MsIGFyZ3YpOworICBOZXRMb2dGbHVzaFRoZW5DbG9zZSgpOworCisgIE1GU2h1dGRvd24oKTsKKyAgV1NBQ2xlYW51cCgpOworICByZXR1cm4gbWFpbl9yZXR1cm5fdmFsdWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0YXJib2FyZF9tYWluLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0YXJib2FyZF9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBjZmYxNQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RhcmJvYXJkX21haW4uaApAQCAtMCwwICsxLDIyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9TVEFSQk9BUkRfTUFJTl9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1NUQVJCT0FSRF9NQUlOX0hfCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvZXhwb3J0LmgiCisKK2V4dGVybiAiQyIgU0JfRVhQT1JUX1BMQVRGT1JNIGludCBTdGFyYm9hcmRNYWluKGludCBhcmdjLCBjaGFyKiogYXJndik7CisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9TVEFSQk9BUkRfTUFJTl9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdG9yYWdlX3dyaXRlX3JlY29yZC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RvcmFnZV93cml0ZV9yZWNvcmQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjYWJkZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RvcmFnZV93cml0ZV9yZWNvcmQuY2MKQEAgLTAsMCArMSwxMDUgQEAKKy8vIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RvcmFnZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvZmlsZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCitjb25zdCBjaGFyIGtUZW1wRmlsZVN1ZmZpeFtdID0gIi50ZW1wIjsKKworYm9vbCBTYlN0b3JhZ2VXcml0ZVJlY29yZChTYlN0b3JhZ2VSZWNvcmQgcmVjb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGRhdGFfc2l6ZSkgeworICBpZiAoIVNiU3RvcmFnZUlzVmFsaWRSZWNvcmQocmVjb3JkKSB8fCAhZGF0YSB8fCBkYXRhX3NpemUgPCAwKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgY29uc3QgY2hhciogbmFtZSA9IHJlY29yZC0+bmFtZS5jX3N0cigpOworICBzdGQ6OnZlY3RvcjxjaGFyPiBvcmlnaW5hbF9maWxlX3BhdGgoa1NiRmlsZU1heFBhdGgpOworICBpZiAoIXN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OkdldFVzZXJTdG9yYWdlRmlsZVBhdGgoCisgICAgICAgICAgcmVjb3JkLT51c2VyLCBuYW1lLCBvcmlnaW5hbF9maWxlX3BhdGguZGF0YSgpLCBrU2JGaWxlTWF4UGF0aCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzdGQ6OnZlY3RvcjxjaGFyPiB0ZW1wX2ZpbGVfcGF0aChrU2JGaWxlTWF4UGF0aCArIDEsIDApOworICBzdGFyYm9hcmQ6OnN0cmxjcHkodGVtcF9maWxlX3BhdGguZGF0YSgpLCBvcmlnaW5hbF9maWxlX3BhdGguZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAga1NiRmlsZU1heFBhdGgpOworICBzdGFyYm9hcmQ6OnN0cmxjYXQodGVtcF9maWxlX3BhdGguZGF0YSgpLCBrVGVtcEZpbGVTdWZmaXgsIGtTYkZpbGVNYXhQYXRoKTsKKworICBTYkZpbGVFcnJvciBlcnJvcjsKKyAgU2JGaWxlIHRlbXBfZmlsZSA9IFNiRmlsZU9wZW4oCisgICAgICB0ZW1wX2ZpbGVfcGF0aC5kYXRhKCksIGtTYkZpbGVDcmVhdGVBbHdheXMgfCBrU2JGaWxlV3JpdGUgfCBrU2JGaWxlUmVhZCwKKyAgICAgIE5VTEwsICZlcnJvcik7CisgIGlmIChlcnJvciAhPSBrU2JGaWxlT2spIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBTYkZpbGVUcnVuY2F0ZSh0ZW1wX2ZpbGUsIDApOworCisgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IGRhdGE7CisgIGludDY0X3QgdG9fd3JpdGUgPSBkYXRhX3NpemU7CisgIHdoaWxlICh0b193cml0ZSA+IDApIHsKKyAgICBpbnQgdG9fd3JpdGVfbWF4ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih0b193cml0ZSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oa1NiSW50MzJNYXgpKSk7CisgICAgaW50IGJ5dGVzX3dyaXR0ZW4gPSBTYkZpbGVXcml0ZSh0ZW1wX2ZpbGUsIHNvdXJjZSwgdG9fd3JpdGVfbWF4KTsKKyAgICBpZiAoYnl0ZXNfd3JpdHRlbiA8IDApIHsKKyAgICAgIFNiRmlsZUNsb3NlKHRlbXBfZmlsZSk7CisgICAgICBTYkZpbGVEZWxldGUodGVtcF9maWxlX3BhdGguZGF0YSgpKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzb3VyY2UgKz0gYnl0ZXNfd3JpdHRlbjsKKyAgICB0b193cml0ZSAtPSBieXRlc193cml0dGVuOworICB9CisKKyAgU2JGaWxlRmx1c2godGVtcF9maWxlKTsKKworICBpZiAoU2JGaWxlSXNWYWxpZChyZWNvcmQtPmZpbGUpICYmICFTYkZpbGVDbG9zZShyZWNvcmQtPmZpbGUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmVjb3JkLT5maWxlID0ga1NiRmlsZUludmFsaWQ7CisKKyAgaWYgKCFTYkZpbGVDbG9zZSh0ZW1wX2ZpbGUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp3c3RyaW5nIG9yaWdpbmFsX3BhdGhfd3N0cmluZyA9CisgICAgICBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6Ok5vcm1hbGl6ZVdpbjMyUGF0aCgKKyAgICAgICAgICBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmcoCisgICAgICAgICAgICAgIG9yaWdpbmFsX2ZpbGVfcGF0aC5kYXRhKCkpKTsKKyAgc3RkOjp3c3RyaW5nIHRlbXBfcGF0aF93c3RyaW5nID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGgoCisgICAgICBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkNTdHJpbmdUb1dTdHJpbmcodGVtcF9maWxlX3BhdGguZGF0YSgpKSk7CisgIGlmIChSZXBsYWNlRmlsZVcob3JpZ2luYWxfcGF0aF93c3RyaW5nLmNfc3RyKCksIHRlbXBfcGF0aF93c3RyaW5nLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCkgPT0gMCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBTYkZpbGUgbmV3X3JlY29yZF9maWxlID0KKyAgICAgIFNiRmlsZU9wZW4ob3JpZ2luYWxfZmlsZV9wYXRoLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAga1NiRmlsZU9wZW5Pbmx5IHwga1NiRmlsZVdyaXRlIHwga1NiRmlsZVJlYWQsIE5VTEwsIE5VTEwpOworICByZWNvcmQtPmZpbGUgPSBuZXdfcmVjb3JkX2ZpbGU7CisKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX25vX2Nhc2UuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX25vX2Nhc2UuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNlMDg2NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2NvbXBhcmVfbm9fY2FzZS5jYwpAQCAtMCwwICsxLDIyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBTYlN0cmluZ0NvbXBhcmVOb0Nhc2UoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgY2hhciogc3RyaW5nMikgeworICByZXR1cm4gX3N0cmljbXAoc3RyaW5nMSwgc3RyaW5nMik7Cit9CisKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2NvbXBhcmVfbm9fY2FzZV9uLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdHJpbmdfY29tcGFyZV9ub19jYXNlX24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzYzY4OAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2NvbXBhcmVfbm9fY2FzZV9uLmNjCkBAIC0wLDAgKzEsMjMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IFNiU3RyaW5nQ29tcGFyZU5vQ2FzZU4oY29uc3QgY2hhciogc3RyaW5nMSwKKyAgY29uc3QgY2hhciogc3RyaW5nMiwgc2l6ZV90IGNvdW50KSB7CisgIHJldHVybiBfc3RybmljbXAoc3RyaW5nMSwgc3RyaW5nMiwgY291bnQpOworfQorCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX3dpZGUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX3dpZGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmYjhiYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2NvbXBhcmVfd2lkZS5jYwpAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBTQl9BUElfVkVSU0lPTiA8IDEzCisKK2ludCBTYlN0cmluZ0NvbXBhcmVXaWRlKGNvbnN0IHdjaGFyX3QqIHN0cmluZzEsIGNvbnN0IHdjaGFyX3QqIHN0cmluZzIsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQpIHsKKyAgcmV0dXJuIHdjc25jbXAoc3RyaW5nMSwgc3RyaW5nMiwgY291bnQpOworfQorCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2Zvcm1hdC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2Zvcm1hdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRkNTViCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdHJpbmdfZm9ybWF0LmNjCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgU2JTdHJpbmdGb3JtYXQoY2hhciogb3V0X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJndW1lbnRzKSB7CisgIHJldHVybiB2c25wcmludGYob3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsIGZvcm1hdCwgYXJndW1lbnRzKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2Zvcm1hdF93aWRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdHJpbmdfZm9ybWF0X3dpZGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyZjY1YgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2Zvcm1hdF93aWRlLmNjCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgU2JTdHJpbmdGb3JtYXRXaWRlKHdjaGFyX3QqIG91dF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3VtZW50cykgeworICByZXR1cm4gX3ZzbndwcmludGYob3V0X2J1ZmZlciwgYnVmZmVyX3NpemUsIGZvcm1hdCwgYXJndW1lbnRzKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2JyZWFrX2ludG9fZGVidWdnZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9icmVha19pbnRvX2RlYnVnZ2VyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9icmVha19pbnRvX2RlYnVnZ2VyLmNjCkBAIC0wLDAgKzEsMjcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPGludHJpbi5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV0X2xvZy5oIgorCit2b2lkIFNiU3lzdGVtQnJlYWtJbnRvRGVidWdnZXIoKSB7CisgIC8vIE5vdGU6IG5laXRoZXIgRGVidWdCcmVhaygpIG5vciBFeGl0UHJvY2VzcygpIGFyZSB2YWxpZAorICAvLyBvbiBzb21lIFdpbmRvd3MgcGxhdGZvcm1zIChlZyBVV1ApIHNvIHdlIHVzZSBfX2RlYnVnYnJlYWsoKQorICAvLyBpbnN0ZWFkLgorICBzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpOZXRMb2dGbHVzaCgpOworICBfX2RlYnVnYnJlYWsoKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2NsZWFyX2xhc3RfZXJyb3IuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9jbGVhcl9sYXN0X2Vycm9yLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDViM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9jbGVhcl9sYXN0X2Vycm9yLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordm9pZCBTYlN5c3RlbUNsZWFyTGFzdEVycm9yKCkgeworICBTZXRMYXN0RXJyb3IoMCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfY29ubmVjdGlvbl90eXBlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2Nvbm5lY3Rpb25fdHlwZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDc0OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2Nvbm5lY3Rpb25fdHlwZS5jYwpAQCAtMCwwICsxLDYyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorCisjaW5jbHVkZSA8aWZkZWYuaD4KKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hZGFwdGVyX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gOjpzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI7CisKK25hbWVzcGFjZSB7CisvLyBSZXR1cm4gdGhlIGNvbm5lY3Rpb24gdHlwZSBvZiB0aGUgZmlyc3QgInVwIiBldGhlcm5ldCBpbnRlcmZhY2UsCisvLyBvciB1bmtub3duIGlmIG5vbmUgZm91bmQuCitTYlN5c3RlbUNvbm5lY3Rpb25UeXBlIEZpbmRDb25uZWN0aW9uVHlwZShQSVBfQURBUFRFUl9BRERSRVNTRVMgYWRhcHRlcikgeworICBmb3IgKDsgYWRhcHRlciAhPSBudWxscHRyOyBhZGFwdGVyID0gYWRhcHRlci0+TmV4dCkgeworICAgIGlmICgoYWRhcHRlci0+T3BlclN0YXR1cyAhPSBJZk9wZXJTdGF0dXNVcCkgfHwKKyAgICAgICAgIXNid2luMzI6OklzSWZUeXBlRXRoZXJuZXQoYWRhcHRlci0+SWZUeXBlKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8vIFNvbWUgZGV2aWNlcyBkbyBub3QgcmVwb3J0IElmVHlwZSBjb3JyZWN0bHkuCisgICAgLy8gU28sIGFuIGV4dHJhIGF0dGVtcHQgYXQgZGV0ZXJtaW5pbmcgaWYgYW4gaW50ZXJmYWNlIGlzIHdpcmVsZXNzIGlzIG1hZGUuCisgICAgaWYgKGFkYXB0ZXItPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSB8fAorICAgICAgKHdjc3N0cihhZGFwdGVyLT5EZXNjcmlwdGlvbiwgTCJXaUZpIikgIT0gbnVsbHB0cikpIHsKKyAgICAgIHJldHVybiBrU2JTeXN0ZW1Db25uZWN0aW9uVHlwZVdpcmVsZXNzOworICAgIH0KKyAgICByZXR1cm4ga1NiU3lzdGVtQ29ubmVjdGlvblR5cGVXaXJlZDsKKyAgfQorICByZXR1cm4ga1NiU3lzdGVtQ29ubmVjdGlvblR5cGVVbmtub3duOworfQorfSAgLy8gbmFtZXNwYWNlCisKK1NiU3lzdGVtQ29ubmVjdGlvblR5cGUgU2JTeXN0ZW1HZXRDb25uZWN0aW9uVHlwZSgpIHsKKyAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gYnVmZmVyOworICBpZiAoIXNid2luMzI6OkdldEFkYXB0ZXJzKGtTYlNvY2tldEFkZHJlc3NUeXBlSXB2NCwgJmJ1ZmZlcikpIHsKKyAgICAgIHJldHVybiBrU2JTeXN0ZW1Db25uZWN0aW9uVHlwZVVua25vd247CisgIH0KKyAgU2JTeXN0ZW1Db25uZWN0aW9uVHlwZSByZXN1bHQgPSBGaW5kQ29ubmVjdGlvblR5cGUoCisgICAgICByZWludGVycHJldF9jYXN0PFBJUF9BREFQVEVSX0FERFJFU1NFUz4oYnVmZmVyLmdldCgpKSk7CisgIGlmIChyZXN1bHQgIT0ga1NiU3lzdGVtQ29ubmVjdGlvblR5cGVVbmtub3duKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBpZiAoIXNid2luMzI6OkdldEFkYXB0ZXJzKGtTYlNvY2tldEFkZHJlc3NUeXBlSXB2NiwgJmJ1ZmZlcikpIHsKKyAgICAgIHJldHVybiBrU2JTeXN0ZW1Db25uZWN0aW9uVHlwZVVua25vd247CisgIH0KKyAgcmV0dXJuIEZpbmRDb25uZWN0aW9uVHlwZSgKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UElQX0FEQVBURVJfQUREUkVTU0VTPihidWZmZXIuZ2V0KCkpKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9kZXZpY2VfdHlwZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9kZXZpY2VfdHlwZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNiNDJkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2RldmljZV90eXBlLmNjCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCitTYlN5c3RlbURldmljZVR5cGUgU2JTeXN0ZW1HZXREZXZpY2VUeXBlKCkgeworICByZXR1cm4ga1NiU3lzdGVtRGV2aWNlVHlwZURlc2t0b3BQQzsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9lcnJvcl9zdHJpbmcuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfZXJyb3Jfc3RyaW5nLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OWUxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfZXJyb3Jfc3RyaW5nLmNjCkBAIC0wLDAgKzEsMzEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHNzdHJlYW0+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKworaW50IFNiU3lzdGVtR2V0RXJyb3JTdHJpbmcoU2JTeXN0ZW1FcnJvciBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyaW5nX2xlbmd0aCkgeworICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3V0OworICBvdXQgPDwgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpXaW4zMkVycm9yQ29kZShlcnJvcik7CisgIGlmIChvdXRfc3RyaW5nICE9IG51bGxwdHIpIHsKKyAgICBzdGFyYm9hcmQ6OnN0cmxjcHkob3V0X3N0cmluZywgb3V0LnN0cigpLmNfc3RyKCksIHN0cmluZ19sZW5ndGgpOworICB9CisgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG91dC5zdHIoKS5zaXplKCkpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfZXh0ZW5zaW9ucy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI4NzUyCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MKQEAgLTAsMCArMSwzMSBAQAorLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCisjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiY29iYWx0L2V4dGVuc2lvbi9ncmFwaGljcy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9ncmFwaGljcy5oIgorCitjb25zdCB2b2lkKiBTYlN5c3RlbUdldEV4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lKSB7CisgIGlmIChzdHJjbXAobmFtZSwga0NvYmFsdEV4dGVuc2lvbkdyYXBoaWNzTmFtZSkgPT0gMCkgeworICAgIHJldHVybiBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkdldEdyYXBoaWNzQXBpKCk7CisgIH0KKyAgaWYgKHN0cmNtcChuYW1lLCBrQ29iYWx0RXh0ZW5zaW9uQ29uZmlndXJhdGlvbk5hbWUpID09IDApIHsKKyAgICByZXR1cm4gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpHZXRDb25maWd1cmF0aW9uQXBpKCk7CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbGFzdF9lcnJvci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9sYXN0X2Vycm9yLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWI2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbGFzdF9lcnJvci5jYwpAQCAtMCwwICsxLDIxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK1NiU3lzdGVtRXJyb3IgU2JTeXN0ZW1HZXRMYXN0RXJyb3IoKSB7CisgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9sb2NhbGVfaWQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbG9jYWxlX2lkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTg2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbG9jYWxlX2lkLmNjCkBAIC0wLDAgKzEsNTQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6RGVidWdMb2dXaW5FcnJvcjsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6d2NoYXJfdFRvVVRGODsKKworbmFtZXNwYWNlIHsKK2NsYXNzIExvY2FsZVN0cmluZyB7CisgcHVibGljOgorICBzdGF0aWMgTG9jYWxlU3RyaW5nKiBHZXQoKTsKKyAgY29uc3QgY2hhciogdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZV8uY19zdHIoKTsgfQorCisgcHJpdmF0ZToKKyAgTG9jYWxlU3RyaW5nKCkgeworICAgIHdjaGFyX3QgbmFtZVtMT0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKKyAgICBpbnQgcmVzdWx0ID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKG5hbWUsIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgdmFsdWVfID0gd2NoYXJfdFRvVVRGOChuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgU0JfTE9HKEVSUk9SKSA8PCAiRXJyb3IgcmV0cmlldmluZyBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUiOworICAgICAgRGVidWdMb2dXaW5FcnJvcigpOworICAgICAgdmFsdWVfID0iZW4tVVMiOworICAgIH0KKyAgfQorICBzdGQ6OnN0cmluZyB2YWx1ZV87Cit9OworCitTQl9PTkNFX0lOSVRJQUxJWkVfRlVOQ1RJT04oTG9jYWxlU3RyaW5nLCBMb2NhbGVTdHJpbmc6OkdldCk7Cit9ICAvLyBuYW1lc3BhY2UKKworY29uc3QgY2hhciogU2JTeXN0ZW1HZXRMb2NhbGVJZCgpIHsKKyAgcmV0dXJuIExvY2FsZVN0cmluZzo6R2V0KCktPnZhbHVlKCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiNjQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9udW1iZXJfb2ZfcHJvY2Vzc29ycy5jYwpAQCAtMCwwICsxLDI0IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK2ludCBTYlN5c3RlbUdldE51bWJlck9mUHJvY2Vzc29ycygpIHsKKyAgLy8gTm90ZSB0aGF0IHRoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvZ2ljYWwgcHJvY2Vzc29ycy4KKyAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm8gPSB7MH07CisgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgcmV0dXJuIHN5c3RlbV9pbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3Byb3BlcnR5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDBhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MKQEAgLTAsMCArMSw2NSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhcioga0ZyaWVuZGx5TmFtZSA9ICJXaW5kb3dzIERlc2t0b3AiOworY29uc3QgY2hhcioga1BsYXRmb3JtTmFtZSA9ICJ3aW4zMjsgV2luZG93cyB4ODZfNjQiOworCitib29sIENvcHlTdHJpbmdBbmRUZXN0SWZTdWNjZXNzKGNoYXIqIG91dF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZnJvbV92YWx1ZSkgeworICBpZiAoc3RybGVuKGZyb21fdmFsdWUpICsgMSA+IHZhbHVlX2xlbmd0aCkKKyAgICByZXR1cm4gZmFsc2U7CisgIHN0YXJib2FyZDo6c3RybGNweShvdXRfdmFsdWUsIGZyb21fdmFsdWUsIHZhbHVlX2xlbmd0aCk7CisgIHJldHVybiB0cnVlOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworYm9vbCBTYlN5c3RlbUdldFByb3BlcnR5KFNiU3lzdGVtUHJvcGVydHlJZCBwcm9wZXJ0eV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBvdXRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlX2xlbmd0aCkgeworICBpZiAoIW91dF92YWx1ZSB8fCAhdmFsdWVfbGVuZ3RoKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3dpdGNoIChwcm9wZXJ0eV9pZCkgeworICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlCcmFuZE5hbWU6CisgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eUNoaXBzZXRNb2RlbE51bWJlcjoKKyAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5RmlybXdhcmVWZXJzaW9uOgorICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlNb2RlbE5hbWU6CisgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eU1vZGVsWWVhcjoKKyAgICBjYXNlIGtTYlN5c3RlbVByb3BlcnR5U3lzdGVtSW50ZWdyYXRvck5hbWU6CisgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVNwZWVjaEFwaUtleToKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2Uga1NiU3lzdGVtUHJvcGVydHlGcmllbmRseU5hbWU6CisgICAgICByZXR1cm4gQ29weVN0cmluZ0FuZFRlc3RJZlN1Y2Nlc3Mob3V0X3ZhbHVlLCB2YWx1ZV9sZW5ndGgsIGtGcmllbmRseU5hbWUpOworCisgICAgY2FzZSBrU2JTeXN0ZW1Qcm9wZXJ0eVBsYXRmb3JtTmFtZToKKyAgICAgIHJldHVybiBDb3B5U3RyaW5nQW5kVGVzdElmU3VjY2VzcyhvdXRfdmFsdWUsIHZhbHVlX2xlbmd0aCwga1BsYXRmb3JtTmFtZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgU0JfRExPRyhXQVJOSU5HKSA8PCBfX0ZVTkNUSU9OX18KKyAgICAgICAgICAgICAgICAgICAgICAgPDwgIjogVW5yZWNvZ25pemVkIHByb3BlcnR5OiAiIDw8IHByb3BlcnR5X2lkOworICAgICAgYnJlYWs7CisgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjYjBlYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9yYW5kb21fZGF0YS5jYwpAQCAtMCwwICsxLDQyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKy8vIFRoaXMgbXVzdCBiZSBpbmNsdWRlZCBhZnRlciB3aW5kb3dzLmgKKyNpbmNsdWRlIDxiY3J5cHQuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorCituYW1lc3BhY2Ugc2J3aW4zMiA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjsKKwordm9pZCBTYlN5c3RlbUdldFJhbmRvbURhdGEodm9pZCogb3V0X2J1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSB7CisgIC8vIE5vdGU6IHRoaXMgbWlnaHQgbm90IGJlIHNlY3VyZSBiZWZvcmUgV2luZG93cyAxMCwgYXMKKyAgLy8gQkNSWVBUX1JOR19EVUFMX0VDX0FMR09SSVRITSBtaWdodCBiZSB1c2VkLiAgU2VlOgorICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM3NTUzNCUyOHY9dnMuODUlMjkuYXNweAorICAvLyAiV2luZG93cyAxMDogIEJlZ2lubmluZyB3aXRoIFdpbmRvd3MgMTAsIHRoZSBkdWFsIGVsbGlwdGljIGN1cnZlIHJhbmRvbQorICAvLyBudW1iZXIgZ2VuZXJhdG9yIGFsZ29yaXRobSBoYXMgYmVlbiByZW1vdmVkLiBFeGlzdGluZyB1c2VzIG9mIHRoaXMKKyAgLy8gYWxnb3JpdGhtIHdpbGwgY29udGludWUgdG8gd29yazsgaG93ZXZlciwgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGlzCisgIC8vIGJhc2VkIG9uIHRoZSBBRVMgY291bnRlciBtb2RlIHNwZWNpZmllZCBpbiB0aGUgTklTVCBTUCA4MDAtOTAgc3RhbmRhcmQuIE5ldworICAvLyBjb2RlIHNob3VsZCB1c2UgQkNSWVBUX1JOR19BTEdPUklUSE0sIGFuZCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGV4aXN0aW5nCisgIC8vIGNvZGUgYmUgY2hhbmdlZCB0byB1c2UgQkNSWVBUX1JOR19BTEdPUklUSE0uIgorICBOVFNUQVRVUyBzdGF0dXMgPQorICAgICAgQkNyeXB0R2VuUmFuZG9tKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8UFVDSEFSPihvdXRfYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZSwgQkNSWVBUX1VTRV9TWVNURU1fUFJFRkVSUkVEX1JORyk7CisgIFNCX0RDSEVDSyhzdGF0dXMgPT0gMCkgPDwgIkVycm9yIHdoaWxlIGNhbGxpbmcgQ3J5cHRHZW5SYW5kb206ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzYndpbjMyOjpXaW4zMkVycm9yQ29kZShHZXRMYXN0RXJyb3IoKSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfcmFuZG9tX3VpbnQ2NC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9yYW5kb21fdWludDY0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OWQ0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfcmFuZG9tX3VpbnQ2NC5jYwpAQCAtMCwwICsxLDIxIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCisKK3VpbnQ2NF90IFNiU3lzdGVtR2V0UmFuZG9tVUludDY0KCkgeworICB1aW50NjRfdCByZXR1cm5fdmFsdWUgPSAwOworICBTYlN5c3RlbUdldFJhbmRvbURhdGEoJnJldHVybl92YWx1ZSwgc2l6ZW9mKHJldHVybl92YWx1ZSkpOworICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3N0YWNrLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3N0YWNrLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTlmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfc3RhY2suY2MKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCisjaW5jbHVkZSA8V2luZG93cy5oPgorCitfX2RlY2xzcGVjKG5vaW5saW5lKSBpbnQgU2JTeXN0ZW1HZXRTdGFjayh2b2lkKiogb3V0X3N0YWNrLCBpbnQgc3RhY2tfc2l6ZSkgeworICBVTE9ORyBmcmFtZXNfdG9fc2tpcCA9IDE7CisgIGludCBudW1fY2FwdHVyZWQgPSBDYXB0dXJlU3RhY2tCYWNrVHJhY2UoZnJhbWVzX3RvX3NraXAsIHN0YWNrX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3N0YWNrLCBudWxscHRyKTsKKyAgcmV0dXJuIG51bV9jYXB0dXJlZDsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF90b3RhbF9jcHVfbWVtb3J5LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3RvdGFsX2NwdV9tZW1vcnkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkNDc4MAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF90b3RhbF9jcHVfbWVtb3J5LmNjCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworaW50NjRfdCBTYlN5c3RlbUdldFRvdGFsQ1BVTWVtb3J5KCkgeworICBNRU1PUllTVEFUVVNFWCBzdGF0ZXggPSB7MH07CisgIHN0YXRleC5kd0xlbmd0aCA9IHNpemVvZihzdGF0ZXgpOworICBHbG9iYWxNZW1vcnlTdGF0dXNFeCgmc3RhdGV4KTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRleC51bGxUb3RhbFBoeXMpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3VzZWRfY3B1X21lbW9yeS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF91c2VkX2NwdV9tZW1vcnkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3NmVhZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF91c2VkX2NwdV9tZW1vcnkuY2MKQEAgLTAsMCArMSwyOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworaW50NjRfdCBTYlN5c3RlbUdldFVzZWRDUFVNZW1vcnkoKSB7CisgIE1FTU9SWVNUQVRVU0VYIHN0YXRleCA9IHswfTsKKyAgc3RhdGV4LmR3TGVuZ3RoID0gc2l6ZW9mKHN0YXRleCk7CisgIEdsb2JhbE1lbW9yeVN0YXR1c0V4KCZzdGF0ZXgpOworICBpbnQ2NF90IHJlbWFpbmluZ19ieXRlcyA9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRleC51bGxUb3RhbFBoeXMpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0ZXgudWxsQXZhaWxQaHlzKTsKKyAgU0JfRENIRUNLKHJlbWFpbmluZ19ieXRlcyA+PSAwKTsKKyAgcmV0dXJuIHJlbWFpbmluZ19ieXRlczsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2lzX2RlYnVnZ2VyX2F0dGFjaGVkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1faXNfZGVidWdnZXJfYXR0YWNoZWQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0MDNhZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2lzX2RlYnVnZ2VyX2F0dGFjaGVkLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zeXN0ZW0uaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworYm9vbCBTYlN5c3RlbUlzRGVidWdnZXJBdHRhY2hlZCgpIHsKKyAgcmV0dXJuIElzRGVidWdnZXJQcmVzZW50KCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9yYWlzZV9wbGF0Zm9ybV9lcnJvci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX3JhaXNlX3BsYXRmb3JtX2Vycm9yLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTUxZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9yYWlzZV9wbGF0Zm9ybV9lcnJvci5jYwpAQCAtMCwwICsxLDI1IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkFwcGxpY2F0aW9uV2luMzI7CisKK2Jvb2wgU2JTeXN0ZW1SYWlzZVBsYXRmb3JtRXJyb3IoU2JTeXN0ZW1QbGF0Zm9ybUVycm9yVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlN5c3RlbVBsYXRmb3JtRXJyb3JDYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogdXNlcl9kYXRhKSB7CisgIHJldHVybiBBcHBsaWNhdGlvbldpbjMyOjpHZXQoKS0+T25TYlN5c3RlbVJhaXNlUGxhdGZvcm1FcnJvcih0eXBlLCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9zeW1ib2xpemUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9zeW1ib2xpemUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjOWRlMgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX3N5bWJvbGl6ZS5jYwpAQCAtMCwwICsxLDEwNyBAQAorLy8gQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCisjaWZuZGVmIENPQkFMVF9CVUlMRF9UWVBFX0dPTEQKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSA8V2luZG93cy5oPiAgLy8gTXVzdCBnbyBiZWZvcmUgZGJnaGVscC5oCisjaW5jbHVkZSA8ZGJnaGVscC5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKworbmFtZXNwYWNlIHsKKwordHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3Qgdm9pZCosIHN0ZDo6c3RyaW5nKik+IFN5bWJvbFJlc29sdmVyRnVuY3Rpb247CisKKy8vIEhhbmRsZXMgZHluYW1pY2FsbHkgbG9hZGluZyBmdW5jdGlvbnMgZnJvbSBkYmdoZWxwLmRsbCB1c2VkCisvLyBmb3Igc3ltYm9sIHJlc29sdXRpb24uCitTeW1ib2xSZXNvbHZlckZ1bmN0aW9uIENyZWF0ZVdpbjMyU3ltYm9sUmVzb2x2ZXIoKSB7CisgIFN5bWJvbFJlc29sdmVyRnVuY3Rpb24gbnVsbF9mdW5jdGlvbiA9IFtdKGNvbnN0IHZvaWQqLCBzdGQ6OnN0cmluZyopIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisKKyAgaWYgKCE6OlN5bUluaXRpYWxpemUoR2V0Q3VycmVudFByb2Nlc3MoKSwgTlVMTCwgVFJVRSkpIHsKKyAgICBhdXRvIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJTeW1Jbml0aWFsaXplIHJldHVybmVkIGVycm9yIDogIiA8PCBlcnJvciA8PCAiXG4iOworICAgIHJldHVybiBudWxsX2Z1bmN0aW9uOworICB9CisKKyAgOjpTeW1TZXRPcHRpb25zKFNZTU9QVF9VTkROQU1FIHwgU1lNT1BUX0RFRkVSUkVEX0xPQURTKTsKKyAgcmV0dXJuIFs9XShjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OnN0cmluZyogZGVzdGluYXRpb24pIHsKKyAgICBjaGFyIHN5bV9idWZbc2l6ZW9mKFNZTUJPTF9JTkZPKSArIE1BWF9TWU1fTkFNRSAqIHNpemVvZihUQ0hBUildOworICAgIFNZTUJPTF9JTkZPKiBzeW1ib2wgPSByZWludGVycHJldF9jYXN0PFNZTUJPTF9JTkZPKj4oc3ltX2J1Zik7CisgICAgc3ltYm9sLT5TaXplT2ZTdHJ1Y3QgPSBzaXplb2YoU1lNQk9MX0lORk8pOworICAgIHN5bWJvbC0+TWF4TmFtZUxlbiA9IE1BWF9TWU1fTkFNRTsKKworICAgIERXT1JENjQgb2Zmc2V0ID0gMDsKKyAgICBib29sIG9rID0KKyAgICAgICAgOjpTeW1Gcm9tQWRkcig6OkdldEN1cnJlbnRQcm9jZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8RFdPUkQ2ND4oYWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgc3ltYm9sKTsKKworICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBzeW1ib2wtPk5hbWU7CisgICAgaWYgKG5hbWVbMF0gPT0gJ18nKSB7CisgICAgICBuYW1lKys7CisgICAgfQorICAgICpkZXN0aW5hdGlvbiA9IG5hbWU7CisgICAgcmV0dXJuIG9rOworICB9OworfQorCitjbGFzcyBTeW1ib2xSZXNvbHZlciB7CisgcHVibGljOgorICBzdGF0aWMgU3ltYm9sUmVzb2x2ZXIqIEluc3RhbmNlKCk7CisKKyAgYm9vbCBSZXNvbHZlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNoYXIqIG91dF9idWZmZXIsIGludCBidWZmZXJfc2l6ZSkgeworICAgIHN0ZDo6c3RyaW5nIHN5bWJvbDsKKworICAgIHN0YXJib2FyZDo6U2NvcGVkTG9jayBsb2NrKG11dGV4Xyk7CisgICAgaWYgKHJlc29sdmVyXyhhZGRyZXNzLCAmc3ltYm9sKSkgeworICAgICAgc3RhcmJvYXJkOjpzdHJsY3B5KG91dF9idWZmZXIsIHN5bWJvbC5jX3N0cigpLCBidWZmZXJfc2l6ZSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgcHJpdmF0ZToKKyAgU3ltYm9sUmVzb2x2ZXIoKSB7IHJlc29sdmVyXyA9IENyZWF0ZVdpbjMyU3ltYm9sUmVzb2x2ZXIoKTsgfQorICBzdGFyYm9hcmQ6Ok11dGV4IG11dGV4XzsKKyAgU3ltYm9sUmVzb2x2ZXJGdW5jdGlvbiByZXNvbHZlcl87Cit9OworCitTQl9PTkNFX0lOSVRJQUxJWkVfRlVOQ1RJT04oU3ltYm9sUmVzb2x2ZXIsIFN5bWJvbFJlc29sdmVyOjpJbnN0YW5jZSk7CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIFNiU3lzdGVtU3ltYm9saXplKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNoYXIqIG91dF9idWZmZXIsIGludCBidWZmZXJfc2l6ZSkgeworICBTeW1ib2xSZXNvbHZlciogZGIgPSBTeW1ib2xSZXNvbHZlcjo6SW5zdGFuY2UoKTsKKyAgYm9vbCBvayA9IGRiLT5SZXNvbHZlKGFkZHJlc3MsIG91dF9idWZmZXIsIGJ1ZmZlcl9zaXplKTsKKyAgcmV0dXJuIG9rOworfQorCisjZWxzZSAgLy8gQ09CQUxUX0JVSUxEX1RZUEVfR09MRAorCitib29sIFNiU3lzdGVtU3ltYm9saXplKGNvbnN0IHZvaWQqLCBjaGFyKiwgaW50KSB7CisgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3Rlc3RfZmlsdGVycy5weSBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGVzdF9maWx0ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTk0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3Rlc3RfZmlsdGVycy5weQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlN0YXJib2FyZCBXaW4zMiBQbGF0Zm9ybSBUZXN0IEZpbHRlcnMuIiIiCisKK2Zyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCisKK19GSUxURVJFRF9URVNUUyA9IHt9CisKKworY2xhc3MgVGVzdEZpbHRlcnMob2JqZWN0KToKKyAgIiIiU3RhcmJvYXJkIFdpbjMyIHBsYXRmb3JtIHRlc3QgZmlsdGVycy4iIiIKKworICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6CisgICAgIiIiR2V0cyBhbGwgdGVzdHMgdG8gYmUgZXhjbHVkZWQgZnJvbSBhIHVuaXQgdGVzdCBydW4uCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBsaXN0IG9mIGluaXRpYWxpemVkIFRlc3RGaWx0ZXIgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBmaWx0ZXJzID0gW10KKyAgICBmb3IgdGFyZ2V0LCB0ZXN0cyBpbiBfRklMVEVSRURfVEVTVFMuaXRlbXMoKToKKyAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKKyAgICByZXR1cm4gZmlsdGVycwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfY3JlYXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfY3JlYXRlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMGQwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9jcmVhdGUuY2MKQEAgLTAsMCArMSwyMDQgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworI2luY2x1ZGUgPHByb2Nlc3MuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9vbmNlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9lcnJvcl91dGlscy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzYndpbjMyID0gc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOworCit1c2luZyBzYndpbjMyOjpEZWJ1Z0xvZ1dpbkVycm9yOwordXNpbmcgc2J3aW4zMjo6R2V0VGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uOwordXNpbmcgc2J3aW4zMjo6U2JUaHJlYWRQcml2YXRlOwordXNpbmcgc2J3aW4zMjo6VGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uOwordXNpbmcgc2J3aW4zMjo6d2NoYXJfdFRvVVRGODsKKworbmFtZXNwYWNlIHsKKwordm9pZCBSZXNldFdpbkVycm9yKCkgeworICBTZXRMYXN0RXJyb3IoMCk7Cit9CisKK2NsYXNzIFRocmVhZENyZWF0ZUluZm8geworIHB1YmxpYzoKKyAgU2JUaHJlYWRQcml2YXRlIHRocmVhZF9wcml2YXRlXzsKKyAgU2JUaHJlYWRFbnRyeVBvaW50IGVudHJ5X3BvaW50XzsKKyAgdm9pZCogdXNlcl9jb250ZXh0XzsKKyAgc3RkOjpzdHJpbmcgbmFtZV87Cit9OworCitpbnQgUnVuVGhyZWFkTG9jYWxEZXN0cnVjdG9ycyhUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24qIHNpbmdsZXRvbikgeworICBpbnQgbnVtX2Rlc3RydWN0b3JzX2NhbGxlZCA9IDA7CisKKyAgZm9yIChhdXRvIGl0ID0gc2luZ2xldG9uLT50aHJlYWRfbG9jYWxfa2V5c18uYmVnaW4oKTsKKyAgICAgICBpdCAhPSBzaW5nbGV0b24tPnRocmVhZF9sb2NhbF9rZXlzXy5lbmQoKTspIHsKKyAgICBhdXRvIGN1cnJfaXQgPSBpdCsrOworCisgICAgaWYgKCFjdXJyX2l0LT5zZWNvbmQtPmRlc3RydWN0b3IpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBhdXRvIGtleSA9IGN1cnJfaXQtPnNlY29uZDsKKyAgICB2b2lkKiBlbnRyeSA9IFNiVGhyZWFkR2V0TG9jYWxWYWx1ZShrZXkpOworICAgIGlmICghZW50cnkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBTYlRocmVhZFNldExvY2FsVmFsdWUoa2V5LCBudWxscHRyKTsKKyAgICArK251bV9kZXN0cnVjdG9yc19jYWxsZWQ7CisgICAgY3Vycl9pdC0+c2Vjb25kLT5kZXN0cnVjdG9yKGVudHJ5KTsKKyAgfQorICByZXR1cm4gbnVtX2Rlc3RydWN0b3JzX2NhbGxlZDsKK30KKworaW50IENvdW50VGxzT2JqZWN0c1JlbWFpbmluZyhUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24qIHNpbmdsZXRvbikgeworICBpbnQgbnVtX29iamVjdHNfcmVtYWluID0gMDsKKyAgZm9yIChhdXRvIGl0ID0gc2luZ2xldG9uLT50aHJlYWRfbG9jYWxfa2V5c18uYmVnaW4oKTsKKyAgICAgICBpdCAhPSBzaW5nbGV0b24tPnRocmVhZF9sb2NhbF9rZXlzXy5lbmQoKTsgKytpdCkgeworICAgIGlmICghaXQtPnNlY29uZC0+ZGVzdHJ1Y3RvcikgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIGF1dG8ga2V5ID0gaXQtPnNlY29uZDsKKyAgICB2b2lkKiBlbnRyeSA9IFNiVGhyZWFkR2V0TG9jYWxWYWx1ZShrZXkpOworICAgIGlmICghZW50cnkpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICArK251bV9vYmplY3RzX3JlbWFpbjsKKyAgfQorICByZXR1cm4gbnVtX29iamVjdHNfcmVtYWluOworfQorCit2b2lkIENhbGxUaHJlYWRMb2NhbERlc3RydWN0b3JzTXVsdGlwbGVUaW1lcygpIHsKKyAgLy8gVGhlIG51bWJlciBvZiBwYXNzZXMgY29uZm9ybXMgdG8gdGhlIGJhc2VfdW5pdHRlc3RzLiBUaGlzIGlzIHVzZWZ1bCBmb3IKKyAgLy8gZGVzdHJ1Y3RvcnMgdGhhdCBpbnNlcnQgbmV3IG9iamVjdHMgaW50byB0aHJlYWQgbG9jYWwgc3RvcmFnZS4gVGhlc2UKKyAgLy8gb2JqZWN0cyB0aGVuIG5lZWQgdG8gYmUgZGVzdHJveWVkIGFzIHdlbGwgaW4gc3Vic2VxdWVudCBwYXNzZXMuIFRoZSB0b3RhbAorICAvLyBudW1iZXIgb2YgcGFzc2VzIGlzIDQsIHdoaWNoIGlzIG9uZSBtb3JlIHRoYW4gd2hhdCBiYXNlX3VuaXR0ZXN0IHRlc3RzCisgIC8vIGZvci4KKyAgY29uc3QgaW50IGtOdW1EZXN0cnVjdG9yUGFzc2VzID0gNDsKKworICBUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24qIHNpbmdsZXRvbiA9IEdldFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbigpOworICBpbnQgbnVtX3Rsc19vYmplY3RzX3JlbWFpbmluZyA9IDA7CisgIC8vIFRPRE8gbm90ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBiZWxvdyBob2xkcyBhIGdsb2JhbCBsb2NrCisgIC8vIHdoaWxlIHByb2Nlc3NpbmcgVExTIGRlc3RydWN0b3JzIG9uIHRocmVhZCBleGl0LiBUaGlzIGNvdWxkCisgIC8vIGJlIGEgYm90dGxlbmVjayBpbiBzb21lIHNjZW5hcmlvcy4gQSBsb2NrbGVzcyBhcHByb2FjaCBtYXkgYmUgcHJlZmVyYWJsZS4KKyAgU2JNdXRleEFjcXVpcmUoJnNpbmdsZXRvbi0+bXV0ZXhfKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1EZXN0cnVjdG9yUGFzc2VzOyArK2kpIHsKKyAgICAvLyBSdW4gdGhyb3VnaCBlYWNoIGRlc3RydWN0b3IgYW5kIGNhbGwgaXQuCisgICAgY29uc3QgaW50IG51bV9kZXN0cnVjdG9yc19jYWxsZWQgPSBSdW5UaHJlYWRMb2NhbERlc3RydWN0b3JzKHNpbmdsZXRvbik7CisgICAgaWYgKDAgPT0gbnVtX2Rlc3RydWN0b3JzX2NhbGxlZCkgeworICAgICAgYnJlYWs7ICAvLyBObyBtb3JlIGRlc3RydWN0b3JzIHRvIGNhbGwuCisgICAgfQorICB9CisgIG51bV90bHNfb2JqZWN0c19yZW1haW5pbmcgPSBDb3VudFRsc09iamVjdHNSZW1haW5pbmcoc2luZ2xldG9uKTsKKyAgU2JNdXRleFJlbGVhc2UoJnNpbmdsZXRvbi0+bXV0ZXhfKTsKKworICBTQl9EQ0hFQ0sobnVtX3Rsc19vYmplY3RzX3JlbWFpbmluZyA9PSAwKSA8PCAiRGFuZ2xpbmcgb2JqZWN0cyBpbiBUTFMgZXhpc3QuIjsKK30KKwordW5zaWduZWQgVGhyZWFkVHJhbXBvbGluZSh2b2lkKiB0aHJlYWRfY3JlYXRlX2luZm9fY29udGV4dCkgeworICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkQ3JlYXRlSW5mbz4gaW5mbygKKyAgICAgIHN0YXRpY19jYXN0PFRocmVhZENyZWF0ZUluZm8qPih0aHJlYWRfY3JlYXRlX2luZm9fY29udGV4dCkpOworCisgIFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbiogc2luZ2xldG9uID0gR2V0VGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKCk7CisgIFNiVGhyZWFkU2V0TG9jYWxWYWx1ZShzaW5nbGV0b24tPnRocmVhZF9wcml2YXRlX2tleV8sICZpbmZvLT50aHJlYWRfcHJpdmF0ZV8pOworICBTYlRocmVhZFNldE5hbWUoaW5mby0+bmFtZV8uY19zdHIoKSk7CisKKyAgdm9pZCogcmVzdWx0ID0gaW5mby0+ZW50cnlfcG9pbnRfKGluZm8tPnVzZXJfY29udGV4dF8pOworCisgIENhbGxUaHJlYWRMb2NhbERlc3RydWN0b3JzTXVsdGlwbGVUaW1lcygpOworCisgIFNiTXV0ZXhBY3F1aXJlKCZpbmZvLT50aHJlYWRfcHJpdmF0ZV8ubXV0ZXhfKTsKKyAgaW5mby0+dGhyZWFkX3ByaXZhdGVfLnJlc3VsdF8gPSByZXN1bHQ7CisgIGluZm8tPnRocmVhZF9wcml2YXRlXy5yZXN1bHRfaXNfdmFsaWRfID0gdHJ1ZTsKKyAgU2JDb25kaXRpb25WYXJpYWJsZVNpZ25hbCgmaW5mby0+dGhyZWFkX3ByaXZhdGVfLmNvbmRpdGlvbl8pOworICB3aGlsZSAoaW5mby0+dGhyZWFkX3ByaXZhdGVfLndhaXRfZm9yX2pvaW5fKSB7CisgICAgU2JDb25kaXRpb25WYXJpYWJsZVdhaXQoJmluZm8tPnRocmVhZF9wcml2YXRlXy5jb25kaXRpb25fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmZvLT50aHJlYWRfcHJpdmF0ZV8ubXV0ZXhfKTsKKyAgfQorICBTYk11dGV4UmVsZWFzZSgmaW5mby0+dGhyZWFkX3ByaXZhdGVfLm11dGV4Xyk7CisKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBTYlRocmVhZFByaW9yaXR5VG9XaW4zMlByaW9yaXR5KFNiVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpIHsKKyAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2Uga1NiVGhyZWFkUHJpb3JpdHlMb3dlc3Q6CisgICAgICByZXR1cm4gVEhSRUFEX1BSSU9SSVRZX0xPV0VTVDsKKyAgICBjYXNlIGtTYlRocmVhZFByaW9yaXR5TG93OgorICAgICAgcmV0dXJuIFRIUkVBRF9QUklPUklUWV9CRUxPV19OT1JNQUw7CisgICAgY2FzZSBrU2JUaHJlYWRQcmlvcml0eU5vcm1hbDoKKyAgICBjYXNlIGtTYlRocmVhZE5vUHJpb3JpdHk6CisgICAgICByZXR1cm4gVEhSRUFEX1BSSU9SSVRZX05PUk1BTDsKKyAgICBjYXNlIGtTYlRocmVhZFByaW9yaXR5SGlnaDoKKyAgICAgIHJldHVybiBUSFJFQURfUFJJT1JJVFlfQUJPVkVfTk9STUFMOworICAgIGNhc2Uga1NiVGhyZWFkUHJpb3JpdHlIaWdoZXN0OgorICAgICAgcmV0dXJuIFRIUkVBRF9QUklPUklUWV9ISUdIRVNUOworICAgIGNhc2Uga1NiVGhyZWFkUHJpb3JpdHlSZWFsVGltZToKKyAgICAgIHJldHVybiBUSFJFQURfUFJJT1JJVFlfVElNRV9DUklUSUNBTDsKKyAgfQorICBTQl9OT1RSRUFDSEVEKCkgPDwgIkludmFsaWQgcHJpb3JpdHkgIiA8PCBwcmlvcml0eTsKKyAgcmV0dXJuIDA7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworLy8gTm90ZSB0aGF0IFNldFRocmVhZEFmZmluaXR5TWFzaygpIGlzIG5vdCBhdmFpbGFibGUgb24gc29tZQorLy8gcGxhdGZvcm1zIChlZyBVV1ApLiBJZiBpdCdzIG5lY2Vzc2FyeSBmb3IgYSBub24tVVdQIHBsYXRmb3JtLAorLy8gcGxlYXNlIGZvcmsgdGhpcyBpbXBsZW1lbnRhdGlvbiBmb3IgVVdQLgorU2JUaHJlYWQgU2JUaHJlYWRDcmVhdGUoaW50NjRfdCBzdGFja19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgU2JUaHJlYWRQcmlvcml0eSBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNiVGhyZWFkQWZmaW5pdHkgYWZmaW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGpvaW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNiVGhyZWFkRW50cnlQb2ludCBlbnRyeV9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNvbnRleHQpIHsKKyAgaWYgKGVudHJ5X3BvaW50ID09IE5VTEwpIHsKKyAgICByZXR1cm4ga1NiVGhyZWFkSW52YWxpZDsKKyAgfQorICBUaHJlYWRDcmVhdGVJbmZvKiBpbmZvID0gbmV3IFRocmVhZENyZWF0ZUluZm8oKTsKKworICBpbmZvLT5lbnRyeV9wb2ludF8gPSBlbnRyeV9wb2ludDsKKyAgaW5mby0+dXNlcl9jb250ZXh0XyA9IGNvbnRleHQ7CisgIGluZm8tPnRocmVhZF9wcml2YXRlXy53YWl0X2Zvcl9qb2luXyA9IGpvaW5hYmxlOworICBpZiAobmFtZSkgeworICAgIGluZm8tPm5hbWVfID0gbmFtZTsKKyAgfQorCisgIC8vIENyZWF0ZSB0aGUgdGhyZWFkIHN1c3BlbmRlZCwgYW5kIHRoZW4gcmVzdW1lIG9uY2UgVGhyZWFkQ3JlYXRlSW5mbzo6aGFuZGxlXworICAvLyBoYXMgYmVlbiBzZXQsIHNvIHRoYXQgaXQncyBhbHdheXMgdmFsaWQgaW4gdGhlIFRocmVhZENyZWF0ZUluZm8KKyAgLy8gZGVzdHJ1Y3Rvci4KKyAgdWludHB0cl90IGhhbmRsZSA9CisgICAgICBfYmVnaW50aHJlYWRleChOVUxMLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0YWNrX3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgVGhyZWFkVHJhbXBvbGluZSwgaW5mbywgQ1JFQVRFX1NVU1BFTkRFRCwgTlVMTCk7CisgIFNCX0RDSEVDSyhoYW5kbGUpOworICBpbmZvLT50aHJlYWRfcHJpdmF0ZV8uaGFuZGxlXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPihoYW5kbGUpOworICBSZXNldFdpbkVycm9yKCk7CisgIGlmIChwcmlvcml0eSAhPSBrU2JUaHJlYWROb1ByaW9yaXR5ICYmCisgICAgICAhU2V0VGhyZWFkUHJpb3JpdHkoaW5mby0+dGhyZWFkX3ByaXZhdGVfLmhhbmRsZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgU2JUaHJlYWRQcmlvcml0eVRvV2luMzJQcmlvcml0eShwcmlvcml0eSkpICYmCisgICAgICAhR2V0TGFzdEVycm9yKCkpIHsKKyAgICBTQl9MT0coRVJST1IpIDw8ICJGYWlsZWQgdG8gc2V0IHByaW9yaXR5IGZvciB0aHJlYWQgIiA8PCAobmFtZSA/IG5hbWUgOiAiIikKKyAgICAgICAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBwcmlvcml0eTsKKyAgICBEZWJ1Z0xvZ1dpbkVycm9yKCk7CisgIH0KKworICBSZXN1bWVUaHJlYWQoaW5mby0+dGhyZWFkX3ByaXZhdGVfLmhhbmRsZV8pOworCisgIHJldHVybiAmaW5mby0+dGhyZWFkX3ByaXZhdGVfOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfY3JlYXRlX2xvY2FsX2tleS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2NyZWF0ZV9sb2NhbF9rZXkuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyMWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2NyZWF0ZV9sb2NhbF9rZXkuY2MKQEAgLTAsMCArMSw3MyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9tdXRleC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9sb2NhbF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b247Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbjsKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK1NiVGhyZWFkTG9jYWxLZXkgU2JUaHJlYWRDcmVhdGVMb2NhbEtleUludGVybmFsKAorICAgIFNiVGhyZWFkTG9jYWxEZXN0cnVjdG9yIGRlc3RydWN0b3IsCisgICAgVGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKiBzaW5nbGV0b24pIHsKKyAgLy8gTm90ZSB0aGF0IGRlc3RydWN0b3IgdXNlZCBoZXJlIHRvIGFsbG93IGRlc3RydWN0aW9uIG9mIG9iamVjdHMgY3JlYXRlZCBieQorICAvLyBUTFMgYWNjZXNzIGJ5IG5vbi1zdGFyYm9hcmQgdGhyZWFkcy4KKyAgLy8gTm90ZSB0aGF0IEZsc0FsbG9jJ3MgZGVzdHJ1Y3RvciBtZWNoYW5pc20gaXMgaW5zdWZmaWNpZW50IHRvIHBhc3MKKyAgLy8gYmFzZV91bml0dGVzdHMsIHdoaWNoIGV4cGVjdHMgdGhhdCBtdWx0aXBsZSBkZXN0cnVjdG9yIHBhc3NlcyBmb3IKKyAgLy8gb2JqZWN0cyB3aGljaCBpbnNlcnQgZGVzdHJ1Y3RhYmxlIFRMUyBwb2ludGVycyBhcyBzaWRlIGVmZmVjdHMuIEZvcgorICAvLyBzdGFyYm9hcmQgdGhyZWFkcywgdGhlIFRMUyBkZXN0cnVjdG9ycyB3aWxsIHJ1biBmaXJzdCBhbmQgc2V0IHRoZQorICAvLyBUTFMgcG9pbnRlcnMgdG8gbnVsbCwgdGhlbiB0aGUgZGVzdHJ1Y3RvcnMgd2lsbCBydW4gYSBzZWNvbmQgdGltZQorICAvLyBidXQgdGhpcyBpcyBva2F5IHNpbmNlIHRoZSBwb2ludGVycyB3aWxsIG5vdyBiZSBudWxscHRycywgd2hpY2ggaXMKKyAgLy8gYSBuby1vcC4gRm9yIG5vbiBzdGFyYm9hcmQgdGhyZWFkcywgb25seSB0aGUgc2Vjb25kYXJ5IGRlc3RydWN0b3IKKyAgLy8gd2lsbCBydW4uCisgIERXT1JEIGluZGV4ID0gVGxzSW50ZXJuYWxBbGxvYyhkZXN0cnVjdG9yKTsKKworICBpZiAoaW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisgICAgcmV0dXJuIGtTYlRocmVhZExvY2FsS2V5SW52YWxpZDsKKyAgfQorCisgIFNiVGhyZWFkTG9jYWxLZXlQcml2YXRlKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxTYlRocmVhZExvY2FsS2V5UHJpdmF0ZSo+KAorICAgICAgU2JNZW1vcnlBbGxvY2F0ZU5vUmVwb3J0KHNpemVvZihTYlRocmVhZExvY2FsS2V5UHJpdmF0ZSkpKTsKKworICBpZiAocmVzdWx0ID09IG51bGxwdHIpIHsKKyAgICByZXR1cm4ga1NiVGhyZWFkTG9jYWxLZXlJbnZhbGlkOworICB9CisKKyAgcmVzdWx0LT50bHNfaW5kZXggPSBpbmRleDsKKyAgcmVzdWx0LT5kZXN0cnVjdG9yID0gZGVzdHJ1Y3RvcjsKKworICBTYk11dGV4QWNxdWlyZSgmc2luZ2xldG9uLT5tdXRleF8pOworICBzaW5nbGV0b24tPnRocmVhZF9sb2NhbF9rZXlzXy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoaW5kZXgsIHJlc3VsdCkpOworICBTYk11dGV4UmVsZWFzZSgmc2luZ2xldG9uLT5tdXRleF8pOworICByZXR1cm4gcmVzdWx0OworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworU2JUaHJlYWRMb2NhbEtleSBTYlRocmVhZENyZWF0ZUxvY2FsS2V5KFNiVGhyZWFkTG9jYWxEZXN0cnVjdG9yIGRlc3RydWN0b3IpIHsKKyAgVGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKiBzaW5nbGV0b24gPSBHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24oKTsKKyAgcmV0dXJuIFNiVGhyZWFkQ3JlYXRlTG9jYWxLZXlJbnRlcm5hbChkZXN0cnVjdG9yLCBzaW5nbGV0b24pOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZGVzdHJveV9sb2NhbF9rZXkuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9kZXN0cm95X2xvY2FsX2tleS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmFiYjNjCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZGVzdHJveV9sb2NhbF9rZXkuY2MKQEAgLTAsMCArMSw0MyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL21lbW9yeS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2xvY2FsX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkdldFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbjsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6VGxzSW50ZXJuYWxGcmVlOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b247CisKK3ZvaWQgU2JUaHJlYWREZXN0cm95TG9jYWxLZXkoU2JUaHJlYWRMb2NhbEtleSBrZXkpIHsKKyAgaWYgKCFTYlRocmVhZElzVmFsaWRMb2NhbEtleShrZXkpKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIFRvIG1hdGNoIHB0aHJlYWRzLCB0aGUgdGhyZWFkIGxvY2FsIHBvaW50ZXIgZm9yIHRoZSBrZXkgaXMgc2V0IHRvIG51bGwKKyAgLy8gc28gdGhhdCBhIHN1cHBsaWVkIGRlc3RydWN0b3IgZG9lc24ndCBydW4uCisgIFNiVGhyZWFkU2V0TG9jYWxWYWx1ZShrZXksIG51bGxwdHIpOworICBEV09SRCB0bHNfaW5kZXggPSBzdGF0aWNfY2FzdDxTYlRocmVhZExvY2FsS2V5UHJpdmF0ZSo+KGtleSktPnRsc19pbmRleDsKKyAgVGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKiBzaW5nbGV0b24gPSBHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24oKTsKKworICBTYk11dGV4QWNxdWlyZSgmc2luZ2xldG9uLT5tdXRleF8pOworICBzaW5nbGV0b24tPnRocmVhZF9sb2NhbF9rZXlzXy5lcmFzZSh0bHNfaW5kZXgpOworICBTYk11dGV4UmVsZWFzZSgmc2luZ2xldG9uLT5tdXRleF8pOworCisgIFRsc0ludGVybmFsRnJlZSh0bHNfaW5kZXgpOworICBTYk1lbW9yeURlYWxsb2NhdGVOb1JlcG9ydChrZXkpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZGV0YWNoLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZGV0YWNoLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmY1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9kZXRhY2guY2MKQEAgLTAsMCArMSwzMyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlNiVGhyZWFkUHJpdmF0ZTsKKwordm9pZCBTYlRocmVhZERldGFjaChTYlRocmVhZCB0aHJlYWQpIHsKKyAgaWYgKHRocmVhZCA9PSBrU2JUaHJlYWRJbnZhbGlkKSB7CisgICAgcmV0dXJuOworICB9CisgIFNiVGhyZWFkUHJpdmF0ZSogdGhyZWFkX3ByaXZhdGUgPSBzdGF0aWNfY2FzdDxTYlRocmVhZFByaXZhdGUqPih0aHJlYWQpOworCisgIFNiTXV0ZXhBY3F1aXJlKCZ0aHJlYWRfcHJpdmF0ZS0+bXV0ZXhfKTsKKyAgdGhyZWFkX3ByaXZhdGUtPndhaXRfZm9yX2pvaW5fID0gZmFsc2U7CisgIFNiQ29uZGl0aW9uVmFyaWFibGVTaWduYWwoJnRocmVhZF9wcml2YXRlLT5jb25kaXRpb25fKTsKKyAgU2JNdXRleFJlbGVhc2UoJnRocmVhZF9wcml2YXRlLT5tdXRleF8pOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2N1cnJlbnQuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9nZXRfY3VycmVudC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhhZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2N1cnJlbnQuY2MKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkdldEN1cnJlbnRTYlRocmVhZFByaXZhdGU7Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlNiVGhyZWFkUHJpdmF0ZTsKKworU2JUaHJlYWQgU2JUaHJlYWRHZXRDdXJyZW50KCkgeworICByZXR1cm4gR2V0Q3VycmVudFNiVGhyZWFkUHJpdmF0ZSgpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2lkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2lkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ODBiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9nZXRfaWQuY2MKQEAgLTAsMCArMSwyMSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitTYlRocmVhZElkIFNiVGhyZWFkR2V0SWQoKSB7CisgIHJldHVybiBHZXRDdXJyZW50VGhyZWFkSWQoKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2dldF9sb2NhbF92YWx1ZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2dldF9sb2NhbF92YWx1ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZjM2JiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2xvY2FsX3ZhbHVlLmNjCkBAIC0wLDAgKzEsMzAgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2xvY2FsX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlRsc0ludGVybmFsR2V0VmFsdWU7CisKK3ZvaWQqIFNiVGhyZWFkR2V0TG9jYWxWYWx1ZShTYlRocmVhZExvY2FsS2V5IGtleSkgeworICBpZiAoIVNiVGhyZWFkSXNWYWxpZExvY2FsS2V5KGtleSkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBEV09SRCB0bHNfaW5kZXggPSBzdGF0aWNfY2FzdDxTYlRocmVhZExvY2FsS2V5UHJpdmF0ZSo+KGtleSktPnRsc19pbmRleDsKKyAgcmV0dXJuIFRsc0ludGVybmFsR2V0VmFsdWUodGxzX2luZGV4KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2dldF9uYW1lLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X25hbWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliMjk5ZAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2dldF9uYW1lLmNjCkBAIC0wLDAgKzEsMjggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OkdldEN1cnJlbnRTYlRocmVhZFByaXZhdGU7Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlNiVGhyZWFkUHJpdmF0ZTsKKwordm9pZCBTYlRocmVhZEdldE5hbWUoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIHsKKyAgU2JUaHJlYWRQcml2YXRlKiB0aHJlYWRfcHJpdmF0ZSA9IEdldEN1cnJlbnRTYlRocmVhZFByaXZhdGUoKTsKKyAgc3RhcmJvYXJkOjpzdHJsY3B5KGJ1ZmZlciwgdGhyZWFkX3ByaXZhdGUtPm5hbWVfLmNfc3RyKCksIGJ1ZmZlcl9zaXplKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2lzX2VxdWFsLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfaXNfZXF1YWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZmMwYwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2lzX2VxdWFsLmNjCkBAIC0wLDAgKzEsMTkgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworYm9vbCBTYlRocmVhZElzRXF1YWwoU2JUaHJlYWQgdGhyZWFkMSwgU2JUaHJlYWQgdGhyZWFkMikgeworICByZXR1cm4gdGhyZWFkMSA9PSB0aHJlYWQyOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfam9pbi5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2pvaW4uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YyZTc2MQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2pvaW4uY2MKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oIgorCit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlNiVGhyZWFkUHJpdmF0ZTsKKworYm9vbCBTYlRocmVhZEpvaW4oU2JUaHJlYWQgdGhyZWFkLCB2b2lkKiogb3V0X3JldHVybikgeworICBpZiAodGhyZWFkID09IGtTYlRocmVhZEludmFsaWQpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBTYlRocmVhZFByaXZhdGUqIHRocmVhZF9wcml2YXRlID0gc3RhdGljX2Nhc3Q8U2JUaHJlYWRQcml2YXRlKj4odGhyZWFkKTsKKworICBTYk11dGV4QWNxdWlyZSgmdGhyZWFkX3ByaXZhdGUtPm11dGV4Xyk7CisgIGlmICghdGhyZWFkX3ByaXZhdGUtPndhaXRfZm9yX2pvaW5fKSB7CisgICAgLy8gVGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gZGV0YWNoZWQuCisgICAgU2JNdXRleFJlbGVhc2UoJnRocmVhZF9wcml2YXRlLT5tdXRleF8pOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB3aGlsZSAoIXRocmVhZF9wcml2YXRlLT5yZXN1bHRfaXNfdmFsaWRfKSB7CisgICAgU2JDb25kaXRpb25WYXJpYWJsZVdhaXQoJnRocmVhZF9wcml2YXRlLT5jb25kaXRpb25fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aHJlYWRfcHJpdmF0ZS0+bXV0ZXhfKTsKKyAgfQorICB0aHJlYWRfcHJpdmF0ZS0+d2FpdF9mb3Jfam9pbl8gPSBmYWxzZTsKKyAgU2JDb25kaXRpb25WYXJpYWJsZVNpZ25hbCgmdGhyZWFkX3ByaXZhdGUtPmNvbmRpdGlvbl8pOworICBpZiAob3V0X3JldHVybiAhPSBOVUxMKSB7CisgICAgKm91dF9yZXR1cm4gPSB0aHJlYWRfcHJpdmF0ZS0+cmVzdWx0XzsKKyAgfQorICBTYk11dGV4UmVsZWFzZSgmdGhyZWFkX3ByaXZhdGUtPm11dGV4Xyk7CisgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfbG9jYWxfaW50ZXJuYWwuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9sb2NhbF9pbnRlcm5hbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzcxMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfbG9jYWxfaW50ZXJuYWwuY2MKQEAgLTAsMCArMSw3MiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfbG9jYWxfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKKy8vIEZsc0FsbG9jKCkgaXMgbGlrZSBUbHNBbGxvYygpLCBidXQgYWxsb3dzIGRlc3RydWN0b3JzLgorLy8gVGhlIGRvd25zaWRlIGlzIHRoYXQgRmxzQWxsb2MoKSBoYXMgYSBzbWFsbCB1cHBlciBsaW1pdCBvZgorLy8gYWJvdXQgfjEwMCBhdmFpbGFibGUga2V5cy4gVG8gcHJvdmlkZSBleHRyYSBrZXlzLCBUbHNBbGxvYygpCisvLyBpcyB1c2VkIHdoZW5ldmVyIGEgZGVzdHJ1Y3RvciBpcyBub3QgbmVjZXNzYXJ5LgorRFdPUkQgVGxzSW50ZXJuYWxBbGxvYyhTYlRocmVhZExvY2FsRGVzdHJ1Y3RvciBkZXN0cnVjdG9yX2ZuKSB7CisgIERXT1JEIG91dHB1dCA9IDA7CisgIGlmIChkZXN0cnVjdG9yX2ZuKSB7CisgICAgb3V0cHV0ID0gRmxzQWxsb2MoZGVzdHJ1Y3Rvcl9mbik7CisgIH0gZWxzZSB7CisgICAgb3V0cHV0ID0gVGxzQWxsb2MoKTsKKyAgfQorICBpZiAob3V0cHV0ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworICAgIHJldHVybiBUTFNfT1VUX09GX0lOREVYRVM7CisgIH0KKyAgcmV0dXJuIChvdXRwdXQgPDwgMSkgfCAoZGVzdHJ1Y3Rvcl9mbiA/IDB4MSA6IDB4MCk7Cit9CisKK3ZvaWQgVGxzSW50ZXJuYWxGcmVlKERXT1JEIGtleSkgeworICBib29sIGhhc19kZXN0cnVjdG9yID0ga2V5ICYgMHgxOworICBEV09SRCBpbmRleCA9IGtleSA+PiAxOworICBpZiAoaGFzX2Rlc3RydWN0b3IpIHsKKyAgICBGbHNGcmVlKGluZGV4KTsKKyAgfSBlbHNlIHsKKyAgICBUbHNGcmVlKGluZGV4KTsKKyAgfQorfQorCit2b2lkKiBUbHNJbnRlcm5hbEdldFZhbHVlKERXT1JEIGtleSkgeworICBib29sIGhhc19kZXN0cnVjdG9yID0ga2V5ICYgMHgxOworICBEV09SRCBpbmRleCA9IGtleSA+PiAxOworICBpZiAoaGFzX2Rlc3RydWN0b3IpIHsKKyAgICByZXR1cm4gRmxzR2V0VmFsdWUoaW5kZXgpOworICB9IGVsc2UgeworICAgIHJldHVybiBUbHNHZXRWYWx1ZShpbmRleCk7CisgIH0KK30KKworYm9vbCBUbHNJbnRlcm5hbFNldFZhbHVlKERXT1JEIGtleSwgdm9pZCogdmFsdWUpIHsKKyAgYm9vbCBoYXNfZGVzdHJ1Y3RvciA9IGtleSAmIDB4MTsKKyAgRFdPUkQgaW5kZXggPSBrZXkgPj4gMTsKKyAgaWYgKGhhc19kZXN0cnVjdG9yKSB7CisgICAgcmV0dXJuIEZsc1NldFZhbHVlKGluZGV4LCB2YWx1ZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIFRsc1NldFZhbHVlKGluZGV4LCB2YWx1ZSk7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9sb2NhbF9pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfbG9jYWxfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDc5OTdmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfbG9jYWxfaW50ZXJuYWwuaApAQCAtMCwwICsxLDM2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9USFJFQURfTE9DQUxfSU5URVJOQUxfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9USFJFQURfTE9DQUxfSU5URVJOQUxfSF8KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK0RXT1JEIFRsc0ludGVybmFsQWxsb2MoU2JUaHJlYWRMb2NhbERlc3RydWN0b3IgZGVzdHJ1Y3Rvcl9mbik7Cit2b2lkIFRsc0ludGVybmFsRnJlZShEV09SRCBrZXkpOworCit2b2lkKiBUbHNJbnRlcm5hbEdldFZhbHVlKERXT1JEIGtleSk7Citib29sIFRsc0ludGVybmFsU2V0VmFsdWUoRFdPUkQga2V5LCB2b2lkKiB2YWx1ZSk7CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfVEhSRUFEX0xPQ0FMX0lOVEVSTkFMX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9wcml2YXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZlYTNiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5jYwpAQCAtMCwwICsxLDcwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCisKKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvb25jZS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b247Cit1c2luZyBzdGFyYm9hcmQ6OnNoYXJlZDo6d2luMzI6OlNiVGhyZWFkUHJpdmF0ZTsKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6VGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uOworCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworU0JfT05DRV9JTklUSUFMSVpFX0ZVTkNUSU9OKFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24pOworCit2b2lkIFJlZ2lzdGVyTWFpblRocmVhZCgpIHsKKyAgc3RkOjp1bmlxdWVfcHRyPFNiVGhyZWFkUHJpdmF0ZT4gdGhyZWFkX3ByaXZhdGUobmV3IFNiVGhyZWFkUHJpdmF0ZSgpKTsKKworICAvLyBHZXRDdXJyZW50VGhyZWFkKCkgcmV0dXJucyBhIHBzZXVkby1oYW5kbGUgdGhhdCBtdXN0IGJlIGR1cGxpY2F0ZWQKKyAgLy8gdG8gYmUgdXNlZCBpbiBnZW5lcmFsIGNhc2VzLgorICBIQU5ETEUgcHNldWRvX2hhbmRsZSA9IEdldEN1cnJlbnRUaHJlYWQoKTsKKyAgSEFORExFIGhhbmRsZTsKKyAgQk9PTCBzdWNjZXNzID0KKyAgICAgIER1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2VzcygpLCBwc2V1ZG9faGFuZGxlLCBHZXRDdXJyZW50UHJvY2VzcygpLAorICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsIDAsIGZhbHNlLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOworICBTQl9EQ0hFQ0soc3VjY2VzcykgPDwgIkR1cGxpY2F0ZUhhbmRsZSBmYWlsZWQiOworCisgIHRocmVhZF9wcml2YXRlLT5oYW5kbGVfID0gaGFuZGxlOworICB0aHJlYWRfcHJpdmF0ZS0+d2FpdF9mb3Jfam9pbl8gPSBmYWxzZTsKKworICBTYlRocmVhZFNldExvY2FsVmFsdWUoR2V0VGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKCktPnRocmVhZF9wcml2YXRlX2tleV8sCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWRfcHJpdmF0ZS5yZWxlYXNlKCkpOworfQorCitTYlRocmVhZFByaXZhdGUqIEdldEN1cnJlbnRTYlRocmVhZFByaXZhdGUoKSB7CisgIFNiVGhyZWFkUHJpdmF0ZSogc2JfdGhyZWFkX3ByaXZhdGUgPQorICAgICAgc3RhdGljX2Nhc3Q8U2JUaHJlYWRQcml2YXRlKj4oU2JUaHJlYWRHZXRMb2NhbFZhbHVlKAorICAgICAgICAgIEdldFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbigpLT50aHJlYWRfcHJpdmF0ZV9rZXlfKSk7CisgIGlmIChzYl90aHJlYWRfcHJpdmF0ZSA9PSBudWxscHRyKSB7CisgICAgLy8gV2UgYXJlIGxpa2VseSBvbiBhIHRocmVhZCB3ZSBkaWQgbm90IGNyZWF0ZSwgc28gVExTIG5lZWRzIHRvIGJlIHNldHVwLgorICAgIFJlZ2lzdGVyTWFpblRocmVhZCgpOworICAgIHNiX3RocmVhZF9wcml2YXRlID0gc3RhdGljX2Nhc3Q8U2JUaHJlYWRQcml2YXRlKj4oU2JUaHJlYWRHZXRMb2NhbFZhbHVlKAorICAgICAgICBHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24oKS0+dGhyZWFkX3ByaXZhdGVfa2V5XykpOworICAgIC8vIFRPRE86IENsZWFuIHVwIFRMUyBzdG9yYWdlIGZvciB0aHJlYWRzIHdlIGRvIG5vdCBjcmVhdGUuCisgIH0KKyAgcmV0dXJuIHNiX3RocmVhZF9wcml2YXRlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkxMDExCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMTExIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9USFJFQURfUFJJVkFURV9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1RIUkVBRF9QUklWQVRFX0hfCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9jb25kaXRpb25fdmFyaWFibGUuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL2ludGVybmFsX29ubHkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCisKK3N0cnVjdCBTYlRocmVhZExvY2FsS2V5UHJpdmF0ZSB7CisgIERXT1JEIHRsc19pbmRleDsKKyAgU2JUaHJlYWRMb2NhbERlc3RydWN0b3IgZGVzdHJ1Y3RvcjsKK307CisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitjbGFzcyBUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b247CisKKy8vIENyZWF0ZXMgYSBTYlRocmVhZExvY2FsS2V5IGdpdmVuIGEgVGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uLiBVc2VkCisvLyB0byBjcmVhdGUgdGhlIGZpcnN0IFNiVGhyZWFkTG9jYWxLZXkuCitTYlRocmVhZExvY2FsS2V5IFNiVGhyZWFkQ3JlYXRlTG9jYWxLZXlJbnRlcm5hbCgKKyAgICBTYlRocmVhZExvY2FsRGVzdHJ1Y3RvciBkZXN0cnVjdG9yLAorICAgIFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbiogc2luZ2xldG9uKTsKKworLy8gU2luZ2xldG9uIHN0YXRlIGZvciB0aGUgdGhyZWFkIHN1YnN5c3RlbS4KK2NsYXNzIFRocmVhZFN1YnN5c3RlbVNpbmdsZXRvbiB7CisgcHVibGljOgorICBUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24oKQorICAgICAgOiBtdXRleF8oU0JfTVVURVhfSU5JVElBTElaRVIpLAorICAgICAgICB0aHJlYWRfcHJpdmF0ZV9rZXlfKFNiVGhyZWFkQ3JlYXRlTG9jYWxLZXlJbnRlcm5hbChOVUxMLCB0aGlzKSkge30KKyAgLy8gVGhpcyBtdXRleCBwcm90ZWN0cyBhbGwgY2xhc3MgbWVtYmVycworICBTYk11dGV4IG11dGV4XzsKKyAgLy8gQWxsb2NhdGVkIHRocmVhZF9sb2NhbF9rZXlzLiBOb3RlIHRoYXQgc3RkOjptYXAgaXMgdXNlZAorICAvLyBzbyB0aGF0IGVsZW1lbnRzIGNhbiBiZSBkZWxldGVkIHdpdGhvdXQgdHJpZ2dlcmluZyBhbiBhbGxvY2F0aW9uLgorICBzdGQ6Om1hcDxEV09SRCwgU2JUaHJlYWRMb2NhbEtleVByaXZhdGUqPiB0aHJlYWRfbG9jYWxfa2V5c187CisgIC8vIFRocmVhZC1sb2NhbCBrZXkgZm9yIHRoZSB0aHJlYWQncyBTYlRocmVhZFByaXZhdGUKKyAgU2JUaHJlYWRMb2NhbEtleSB0aHJlYWRfcHJpdmF0ZV9rZXlfOworfTsKKworLy8gT2J0YWlucyB0aGUgVGhyZWFkc1N1YnN5c3RlbVNpbmdsZXRvbigpOworVGhyZWFkU3Vic3lzdGVtU2luZ2xldG9uKiBHZXRUaHJlYWRTdWJzeXN0ZW1TaW5nbGV0b24oKTsKKworLy8gUmVnaXN0ZXJzIHRoZSBtYWluIHRocmVhZC4gc2V0dGluZyBpdCdzIFNiVGhyZWFkUHJpdmF0ZSoKK3ZvaWQgUmVnaXN0ZXJNYWluVGhyZWFkKCk7CisKKy8vIFByaXZhdGUgdGhyZWFkIHN0YXRlLCBzdG9yZWQgaW4gdGhyZWFkIGxvY2FsIHN0b3JhZ2UgYW5kCisvLyBjbGVhbmVkIHVwIHdoZW4gdGhyZWFkIGV4aXRzLgorY2xhc3MgU2JUaHJlYWRQcml2YXRlIHsKKyBwdWJsaWM6CisgIFNiVGhyZWFkUHJpdmF0ZSgpCisgICAgICA6IG11dGV4XyhTQl9NVVRFWF9JTklUSUFMSVpFUiksCisgICAgICAgIGNvbmRpdGlvbl8oU0JfQ09ORElUSU9OX1ZBUklBQkxFX0lOSVRJQUxJWkVSKSwKKyAgICAgICAgaGFuZGxlXyhOVUxMKSwKKyAgICAgICAgcmVzdWx0XyhOVUxMKSwKKyAgICAgICAgd2FpdF9mb3Jfam9pbl8oZmFsc2UpLAorICAgICAgICByZXN1bHRfaXNfdmFsaWRfKGZhbHNlKSB7fQorCisgIH5TYlRocmVhZFByaXZhdGUoKSB7CisgICAgaWYgKGhhbmRsZV8pIHsKKyAgICAgIENsb3NlSGFuZGxlKGhhbmRsZV8pOworICAgIH0KKworICAgIFNiTXV0ZXhEZXN0cm95KCZtdXRleF8pOworICAgIFNiQ29uZGl0aW9uVmFyaWFibGVEZXN0cm95KCZjb25kaXRpb25fKTsKKyAgfQorCisgIC8vIFRoaXMgbXV0ZXggcHJvdGVjdHMgYWxsIGNsYXNzIG1lbWJlcnMKKyAgU2JNdXRleCBtdXRleF87CisgIFNiQ29uZGl0aW9uVmFyaWFibGUgY29uZGl0aW9uXzsKKyAgc3RkOjpzdHJpbmcgbmFtZV87CisgIEhBTkRMRSBoYW5kbGVfOworICAvLyBUaGUgcmVzdWx0IG9mIHRoZSB0aHJlYWQuIFRoZSByZXR1cm4gdmFsdWUgb2YgU2JUaHJlYWRFbnRyeVBvaW50CisgIC8vIHRvIHJldHVybiB0byBTYlRocmVhZEpvaW4uCisgIHZvaWQqIHJlc3VsdF87CisgIC8vIFRydWUgaWYgYSB0aHJlYWQgbXVzdCB3YWl0IHRvIGJlIGpvaW5lZCBiZWZvcmUgY29tcGxldGVseSBleGl0aW5nLgorICAvLyBDaGFuZ2VzIHRvIHRoaXMgbXVzdCBzaWduYWwgfGNvbmRpdGlvbl98LgorICBib29sIHdhaXRfZm9yX2pvaW5fOworICAvLyBUcnVlIGlmIHxyZXN1bHRffCBpcyB2YWxpZCAodGhlIHRocmVhZCBoYXMgY29tcGxldGVkIGFuZCBpcyB3YWl0aW5nCisgIC8vIHRvIGV4aXQpLiBDaGFuZ2VzIHRvIHRoaXMgbXVzdCBzaWduYWwgfGNvbmRpdGlvbl98LgorICBib29sIHJlc3VsdF9pc192YWxpZF87Cit9OworCisvLyBPYnRhaW5zIHRoZSBjdXJyZW50IHRocmVhZCdzIFNiVGhyZWFkUHJpdmF0ZSogZnJvbSB0aHJlYWQtbG9jYWwgc3RvcmFnZS4KK1NiVGhyZWFkUHJpdmF0ZSogR2V0Q3VycmVudFNiVGhyZWFkUHJpdmF0ZSgpOworCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1RIUkVBRF9QUklWQVRFX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9zZXRfbG9jYWxfdmFsdWUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9zZXRfbG9jYWxfdmFsdWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg1N2RiMAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3NldF9sb2NhbF92YWx1ZS5jYwpAQCAtMCwwICsxLDMwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9sb2NhbF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpUbHNJbnRlcm5hbFNldFZhbHVlOworCitib29sIFNiVGhyZWFkU2V0TG9jYWxWYWx1ZShTYlRocmVhZExvY2FsS2V5IGtleSwgdm9pZCogdmFsdWUpIHsKKyAgaWYgKCFTYlRocmVhZElzVmFsaWRMb2NhbEtleShrZXkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIERXT1JEIHRsc19pbmRleCA9IHN0YXRpY19jYXN0PFNiVGhyZWFkTG9jYWxLZXlQcml2YXRlKj4oa2V5KS0+dGxzX2luZGV4OworICByZXR1cm4gVGxzSW50ZXJuYWxTZXRWYWx1ZSh0bHNfaW5kZXgsIHZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3NldF9uYW1lLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfc2V0X25hbWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhYWZlZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3NldF9uYW1lLmNjCkBAIC0wLDAgKzEsNjYgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3ByaXZhdGUuaCIKKwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpHZXRDdXJyZW50U2JUaHJlYWRQcml2YXRlOwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpTYlRocmVhZFByaXZhdGU7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoZSBjb2RlIGJlbG93IGlzIGZyb20KKy8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveGNiMno4aHMuYXNweAorLy8gQSB8ZHdUaHJlYWRJRHwgb2YgLTEgbWVhbnMgImN1cnJlbnQgdGhyZWFkIjsKKy8vCisvLyBVc2FnZTogU2V0VGhyZWFkTmFtZSAoKERXT1JEKS0xLCAiTWFpblRocmVhZCIpOworLy8KK2NvbnN0IERXT1JEIE1TX1ZDX0VYQ0VQVElPTiA9IDB4NDA2RDEzODg7CisjcHJhZ21hIHBhY2socHVzaCwgOCkKK3R5cGVkZWYgc3RydWN0IHRhZ1RIUkVBRE5BTUVfSU5GIHsKKyAgRFdPUkQgZHdUeXBlOyAgICAgIC8vIE11c3QgYmUgMHgxMDAwLgorICBMUENTVFIgc3pOYW1lOyAgICAgLy8gUG9pbnRlciB0byBuYW1lIChpbiB1c2VyIGFkZHIgc3BhY2UpLgorICBEV09SRCBkd1RocmVhZElEOyAgLy8gVGhyZWFkIElEICgtMT1jYWxsZXIgdGhyZWFkKS4KKyAgRFdPUkQgZHdGbGFnczsgICAgIC8vIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8uCit9IFRIUkVBRE5BTUVfSU5GTzsKKyNwcmFnbWEgcGFjayhwb3ApCit2b2lkIFNldFRocmVhZE5hbWUoRFdPUkQgZHdUaHJlYWRJRCwgY29uc3QgY2hhciogdGhyZWFkTmFtZSkgeworICBUSFJFQUROQU1FX0lORk8gaW5mbzsKKyAgaW5mby5kd1R5cGUgPSAweDEwMDA7CisgIGluZm8uc3pOYW1lID0gdGhyZWFkTmFtZTsKKyAgaW5mby5kd1RocmVhZElEID0gZHdUaHJlYWRJRDsKKyAgaW5mby5kd0ZsYWdzID0gMDsKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA2MzIwIDYzMjIpCisgIF9fdHJ5IHsKKyAgICBSYWlzZUV4Y2VwdGlvbihNU19WQ19FWENFUFRJT04sIDAsIHNpemVvZihpbmZvKSAvIHNpemVvZihVTE9OR19QVFIpLAorICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VUxPTkdfUFRSKj4oJmluZm8pKTsKKyAgfSBfX2V4Y2VwdChFWENFUFRJT05fRVhFQ1VURV9IQU5ETEVSKSB7CisgIH0KKyNwcmFnbWEgd2FybmluZyhwb3ApCit9CisKK30gIC8vIG5hbWVzcGFjZQorCit2b2lkIFNiVGhyZWFkU2V0TmFtZShjb25zdCBjaGFyKiBuYW1lKSB7CisgIFNiVGhyZWFkUHJpdmF0ZSogdGhyZWFkX3ByaXZhdGUgPSBHZXRDdXJyZW50U2JUaHJlYWRQcml2YXRlKCk7CisKKyAgLy8gV2Ugc3RvcmUgdGhlIHRocmVhZCBuYW1lIGluIG91ciBvd24gVExTIGNvbnRleHQgYXMgd2VsbCBhcyB0ZWxsaW5nCisgIC8vIHRoZSBPUyBiZWNhdXNlIGl0J3MgbXVjaCBlYXNpZXIgdG8gcmV0cmlldmUgZnJvbSBvdXIgb3duIFRMUyBjb250ZXh0LgorICB0aHJlYWRfcHJpdmF0ZS0+bmFtZV8gPSBuYW1lOworICBTZXRUaHJlYWROYW1lKHN0YXRpY19jYXN0PERXT1JEPigtMSksIG5hbWUpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfc2xlZXAuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9zbGVlcC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjgwNjdiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfc2xlZXAuY2MKQEAgLTAsMCArMSwyOCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX3V0aWxzLmgiCisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q29udmVydFNiVGltZVRvTWlsbGlzUm91bmRVcDsKKwordm9pZCBTYlRocmVhZFNsZWVwKFNiVGltZSBkdXJhdGlvbikgeworICBpZiAoZHVyYXRpb24gPCAwKSB7CisgICAgcmV0dXJuOworICB9CisgIFNsZWVwKENvbnZlcnRTYlRpbWVUb01pbGxpc1JvdW5kVXAoZHVyYXRpb24pKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3lpZWxkLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfeWllbGQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlYjhjZgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3lpZWxkLmNjCkBAIC0wLDAgKzEsMjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWQuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwordm9pZCBTYlRocmVhZFlpZWxkKCkgeworICBTbGVlcCgwKTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV9nZXRfbW9ub3RvbmljX25vdy5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV9nZXRfbW9ub3RvbmljX25vdy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE0M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX2dldF9tb25vdG9uaWNfbm93LmNjCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aW1lLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorCitTYlRpbWVNb25vdG9uaWMgU2JUaW1lR2V0TW9ub3RvbmljTm93KCkgeworICBMQVJHRV9JTlRFR0VSIGNvdW50czsKKyAgYm9vbCBzdWNjZXNzOworCisgIHN1Y2Nlc3MgPSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmY291bnRzKTsKKworICAvLyAiT24gc3lzdGVtcyB0aGF0IHJ1biBXaW5kb3dzIFhQIG9yIGxhdGVyLAorICAvLyB0aGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgc3VjY2VlZCBhbmQgd2lsbCB0aHVzIG5ldmVyIHJldHVybiB6ZXJvLiIKKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDQ5MDQodj12cy44NSkuYXNweAorICBTQl9EQ0hFQ0soc3VjY2Vzcyk7CisKKyAgTEFSR0VfSU5URUdFUiBjb3VudHNQZXJTZWNvbmQ7CisgIHN1Y2Nlc3MgPSBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZjb3VudHNQZXJTZWNvbmQpOworICAvLyAiT24gc3lzdGVtcyB0aGF0IHJ1biBXaW5kb3dzIFhQIG9yIGxhdGVyLAorICAvLyB0aGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgc3VjY2VlZCBhbmQgd2lsbCB0aHVzIG5ldmVyIHJldHVybiB6ZXJvLiIKKyAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDQ5MDUodj12cy44NSkuYXNweAorICBTQl9EQ0hFQ0soc3VjY2Vzcyk7CisKKyAgLy8gQW4gb2JzZXJ2ZWQgdmFsdWUgb2YgY291bnRzUGVyU2Vjb25kIG9uIGEgZGVza3RvcCB4ODYgbWFjaGluZSBpcworICAvLyB+Mi41ZTYuIFdpdGggdGhpcyBmcmVxdWVuY3ksIGl0IHdpbGwgdGFrZSB+Mzc1MDAgZGF5cyB0byBleGNlZWQKKyAgLy8gMl41Mywgd2hpY2ggaXMgdGhlIG1hbnRpc3NhIHByZWNpc2lvbiBvZiBhIGRvdWJsZS4KKyAgLy8gSGVuY2UsIHdlIGNhbiBzYWZlbHkgY29udmVydCB0byBhIGRvdWJsZSBoZXJlIHdpdGhvdXQgbG9zaW5nIHByZWNpc2lvbi4KKyAgZG91YmxlIHJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oY291bnRzLlF1YWRQYXJ0KTsKKyAgcmVzdWx0ICo9ICgxMDAwLjAgKiAxMDAwLjApIC8gY291bnRzUGVyU2Vjb25kLlF1YWRQYXJ0OworCisgIHJldHVybiBzdGF0aWNfY2FzdDxTYlRpbWVNb25vdG9uaWM+KHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfZ2V0X25vdy5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV9nZXRfbm93LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmY3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfZ2V0X25vdy5jYwpAQCAtMCwwICsxLDMwIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCitTYlRpbWUgU2JUaW1lR2V0Tm93KCkgeworICBTWVNURU1USU1FIHN5c3RlbV90aW1lOworICBHZXRTeXN0ZW1UaW1lKCZzeXN0ZW1fdGltZSk7CisKKyAgRklMRVRJTUUgZmlsZV90aW1lOworICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3lzdGVtX3RpbWUsICZmaWxlX3RpbWUpOworCisgIFVMQVJHRV9JTlRFR0VSIGxhcmdlX2ludDsKKyAgbGFyZ2VfaW50Lkxvd1BhcnQgPSBmaWxlX3RpbWUuZHdMb3dEYXRlVGltZTsKKyAgbGFyZ2VfaW50LkhpZ2hQYXJ0ID0gZmlsZV90aW1lLmR3SGlnaERhdGVUaW1lOworICByZXR1cm4gc3RhdGljX2Nhc3Q8U2JUaW1lPihsYXJnZV9pbnQuUXVhZFBhcnQpIC8gMTA7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfdXRpbHMuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV91dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODM4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfdXRpbHMuaApAQCAtMCwwICsxLDYzIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9USU1FX1VUSUxTX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfVElNRV9VVElMU19IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK2lubGluZSBTYlRpbWUgQ29udmVydEZpbGVUaW1lVGlja3NUb1NiVGltZShjb25zdCBMQVJHRV9JTlRFR0VSIHRpY2tzKSB7CisgIC8vIEFjY29yZGluZyB0bworICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczcyNDI4NCh2PXZzLjg1KS5hc3B4CisgIC8vIEZJTEVUSU1FIGZvcm1hdCBpcyAiQ29udGFpbnMgYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YKKyAgLy8gMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIHNpbmNlIEphbnVhcnkgMSwgMTYwMSAoVVRDKSIKKyAgY29uc3QgdWludDY0X3Qga051bWJlcjEwMG5hbm9zZWNvbmRUaWNrc0luTWljcm9zZWNvbmQgPSAxMDsKKyAgcmV0dXJuIHRpY2tzLlF1YWRQYXJ0IC8ga051bWJlcjEwMG5hbm9zZWNvbmRUaWNrc0luTWljcm9zZWNvbmQ7Cit9CisKK2lubGluZSBTYlRpbWUgQ29udmVydEZpbGVUaW1lVG9TYlRpbWUoY29uc3QgRklMRVRJTUUgZmlsZV90aW1lKSB7CisgIC8vIEFjY29yZGluZyB0bworICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczcyNDI4NCh2PXZzLjg1KS5hc3B4CisgIC8vIEZJTEVUSU1FIGZvcm1hdCBpcyAiQ29udGFpbnMgYSA2NC1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YKKyAgLy8gMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIHNpbmNlIEphbnVhcnkgMSwgMTYwMSAoVVRDKSIKKyAgTEFSR0VfSU5URUdFUiB0aWNrczsKKyAgdGlja3MuUXVhZFBhcnQgPSAoc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KGZpbGVfdGltZS5kd0hpZ2hEYXRlVGltZSkgPDwgMzIpIHwKKyAgICAgICAgICAgICAgICAgICBmaWxlX3RpbWUuZHdMb3dEYXRlVGltZTsKKyAgcmV0dXJuIENvbnZlcnRGaWxlVGltZVRpY2tzVG9TYlRpbWUodGlja3MpOworfQorCitpbmxpbmUgU2JUaW1lIENvbnZlcnRTeXN0ZW1UaW1lVG9TYlRpbWUoY29uc3QgU1lTVEVNVElNRSBzeXN0ZW1fdGltZSkgeworICBGSUxFVElNRSBmaWxlX3RpbWUgPSB7MH07CisgIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZzeXN0ZW1fdGltZSwgJmZpbGVfdGltZSk7CisgIHJldHVybiBDb252ZXJ0RmlsZVRpbWVUb1NiVGltZShmaWxlX3RpbWUpOworfQorCisvLyBNYW55IFdpbjMyIGNhbGxzIHRha2UgbWlsbGlzLCBidXQgU2JUaW1lIGlzIG1pY3Jvc2Vjb25kcy4KKy8vIE1hbnkgbnBsYiB0ZXN0cyBhc3N1bWUgd2FpdHMgYXJlIGF0IGxlYXN0IGFzIGxvbmcgYXMgcmVxdWVzdGVkLCBzbworLy8gcm91bmQgdXAuCitpbmxpbmUgRFdPUkQgQ29udmVydFNiVGltZVRvTWlsbGlzUm91bmRVcChTYlRpbWUgZHVyYXRpb24pIHsKKyAgY29uc3QgaW50NjRfdCBtaWxsaXNlY29uZHNfdG9fc2xlZXAgPQorICAgICAgKGR1cmF0aW9uICsga1NiVGltZU1pbGxpc2Vjb25kIC0gMSkgLyBrU2JUaW1lTWlsbGlzZWNvbmQ7CisgIHJldHVybiBzdGF0aWNfY2FzdDxEV09SRD4obWlsbGlzZWNvbmRzX3RvX3NsZWVwKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9USU1FX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfem9uZV9nZXRfY3VycmVudC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV96b25lX2dldF9jdXJyZW50LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTU0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfem9uZV9nZXRfY3VycmVudC5jYwpAQCAtMCwwICsxLDM2IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGltZV96b25lLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorU2JUaW1lWm9uZSBTYlRpbWVab25lR2V0Q3VycmVudCgpIHsKKyAgRFlOQU1JQ19USU1FX1pPTkVfSU5GT1JNQVRJT04gdGltZV96b25lX2luZm87CisKKyAgRFdPUkQgem9uZV9pZCA9IEdldER5bmFtaWNUaW1lWm9uZUluZm9ybWF0aW9uKCZ0aW1lX3pvbmVfaW5mbyk7CisKKyAgc3dpdGNoICh6b25lX2lkKSB7CisgIGNhc2UgVElNRV9aT05FX0lEX1VOS05PV046CisgICAgcmV0dXJuIHRpbWVfem9uZV9pbmZvLkJpYXM7CisgIGNhc2UgVElNRV9aT05FX0lEX1NUQU5EQVJEOgorICAgIHJldHVybiB0aW1lX3pvbmVfaW5mby5CaWFzICsgdGltZV96b25lX2luZm8uU3RhbmRhcmRCaWFzOworICBjYXNlIFRJTUVfWk9ORV9JRF9EQVlMSUdIVDoKKyAgICByZXR1cm4gdGltZV96b25lX2luZm8uQmlhcyArIHRpbWVfem9uZV9pbmZvLkRheWxpZ2h0QmlhczsKKyAgZGVmYXVsdDoKKyAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CisgIH0KK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV96b25lX2dldF9uYW1lLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX3pvbmVfZ2V0X25hbWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5MmUzYgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV96b25lX2dldF9uYW1lLmNjCkBAIC0wLDAgKzEsNTggQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC90aW1lX3pvbmUuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9vbmNlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIgorCituYW1lc3BhY2UgeworY2xhc3MgVGltZVpvbmVTdHJpbmcgeworIHB1YmxpYzoKKyAgc3RhdGljIFRpbWVab25lU3RyaW5nKiBHZXQoKTsKKyAgY29uc3QgY2hhciogdmFsdWUoKSBjb25zdCB7IHJldHVybiB2YWx1ZV8uY19zdHIoKTsgfQorCisgcHJpdmF0ZToKKyAgVGltZVpvbmVTdHJpbmcoKSB7CisgICAgRFlOQU1JQ19USU1FX1pPTkVfSU5GT1JNQVRJT04gdGltZV96b25lX2luZm87CisgICAgRFdPUkQgem9uZV9pZCA9IEdldER5bmFtaWNUaW1lWm9uZUluZm9ybWF0aW9uKCZ0aW1lX3pvbmVfaW5mbyk7CisKKyAgICBzdGQ6OndzdHJpbmcgd2lkZV9zdHJpbmc7CisgICAgc3dpdGNoICh6b25lX2lkKSB7CisgICAgICBjYXNlIFRJTUVfWk9ORV9JRF9VTktOT1dOOgorICAgICAgY2FzZSBUSU1FX1pPTkVfSURfU1RBTkRBUkQ6CisgICAgICAgIHdpZGVfc3RyaW5nID0gdGltZV96b25lX2luZm8uU3RhbmRhcmROYW1lOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVElNRV9aT05FX0lEX0RBWUxJR0hUOgorICAgICAgICB3aWRlX3N0cmluZyA9IHRpbWVfem9uZV9pbmZvLkRheWxpZ2h0TmFtZTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBTQl9OT1RSRUFDSEVEKCk7CisgICAgfQorICAgIHZhbHVlXyA9IHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6d2NoYXJfdFRvVVRGOCh3aWRlX3N0cmluZy5jX3N0cigpKTsKKyAgfQorICBzdGQ6OnN0cmluZyB2YWx1ZV87Cit9OworCitTQl9PTkNFX0lOSVRJQUxJWkVfRlVOQ1RJT04oVGltZVpvbmVTdHJpbmcsIFRpbWVab25lU3RyaW5nOjpHZXQpOworfSAgLy8gbmFtZXNwYWNlLgorCitjb25zdCBjaGFyKiBTYlRpbWVab25lR2V0TmFtZSgpIHsKKyAgY29uc3QgY2hhciogb3V0cHV0ID0gVGltZVpvbmVTdHJpbmc6OkdldCgpLT52YWx1ZSgpOworICByZXR1cm4gb3V0cHV0OworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90eXBlc19pbnRlcm5hbC5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90eXBlc19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzEwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3R5cGVzX2ludGVybmFsLmgKQEAgLTAsMCArMSwzMyBAQAorLy8gQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBEZWZpbmVzIHRoZSBwdGhyZWFkIHZlcnNpb25zIG9mIFN0YXJib2FyZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhbmQgdGhlCisvLyBzdGF0aWMgaW5pdGlhbGl6ZXJzIGZvciB0aG9zZSBwcmltaXRpdmVzLgorCisjaWZuZGVmIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfVFlQRVNfSU5URVJOQUxfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9UWVBFU19JTlRFUk5BTF9IXworCisjZGVmaW5lIFNCX1dJTjMyX0lOVEVSTkFMX01VVEVYKG11dGV4X3B0cikgXAorICByZWludGVycHJldF9jYXN0PFBTUldMT0NLPigobXV0ZXhfcHRyKS0+bXV0ZXhfYnVmZmVyKQorI2RlZmluZSBTQl9XSU4zMl9JTlRFUk5BTF9DT05ESVRJT04oY29uZGl0aW9uX3B0cikgXAorICByZWludGVycHJldF9jYXN0PFBDT05ESVRJT05fVkFSSUFCTEU+KChjb25kaXRpb25fcHRyKS0+Y29uZGl0aW9uX2J1ZmZlcikKKyNkZWZpbmUgU0JfV0lOMzJfSU5URVJOQUxfT05DRShvbmNlX3B0cikgXAorICByZWludGVycHJldF9jYXN0PFBJTklUX09OQ0U+KChvbmNlX3B0ciktPm9uY2VfYnVmZmVyKQorI2Vsc2UKKyNkZWZpbmUgU0JfV0lOMzJfSU5URVJOQUxfTVVURVgobXV0ZXhfcHRyKSByZWludGVycHJldF9jYXN0PFBTUldMT0NLPihtdXRleF9wdHIpCisjZGVmaW5lIFNCX1dJTjMyX0lOVEVSTkFMX0NPTkRJVElPTihjb25kaXRpb25fcHRyKSBcCisgIHJlaW50ZXJwcmV0X2Nhc3Q8UENPTkRJVElPTl9WQVJJQUJMRT4oY29uZGl0aW9uX3B0cikKKyNkZWZpbmUgU0JfV0lOMzJfSU5URVJOQUxfT05DRShvbmNlX3B0cikgcmVpbnRlcnByZXRfY2FzdDxQSU5JVF9PTkNFPihvbmNlX3B0cikKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1RZUEVTX0lOVEVSTkFMX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3ZpZGVvX2RlY29kZXIuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3ZpZGVvX2RlY29kZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMzBjNAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdmlkZW9fZGVjb2Rlci5jYwpAQCAtMCwwICsxLDc0NSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi92aWRlb19kZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2R4X2NvbnRleHRfdmlkZW9fZGVjb2Rlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2hhcmR3YXJlX2RlY29kZV90YXJnZXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgorCisvLyBJbmNsdWRlIHRoaXMgYWZ0ZXIgYWxsIG90aGVyIGhlYWRlcnMgdG8gYXZvaWQgaW50cm9kdWNpbmcgcmVkdW5kYW50CisvLyBkZWZpbml0aW9ucyBmcm9tIG90aGVyIGhlYWRlciBmaWxlcy4KKyNpbmNsdWRlIDxjb2RlY2FwaS5oPiAgLy8gRm9yIENPREVDQVBJXyoKKyNpbmNsdWRlIDxpbml0Z3VpZC5oPiAgLy8gRm9yIERYVkFfTW9kZVZQOV9WTERfUHJvZmlsZTAKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK25hbWVzcGFjZSB7CisKK3VzaW5nIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI7Cit1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OnBsYXllcjo6ZmlsdGVyOjpWaWRlb0ZyYW1lOwordXNpbmcgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xOwordXNpbmcgc3RkOjpwbGFjZWhvbGRlcnM6Ol8yOworCisvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBvdXRwdXQgc2FtcGxlcyB0byBjb250cm9sIG1lbW9yeSB1c2FnZS4KKy8vIE5PVEU6IEhpZ2hlciBudW1iZXJzIG1heSByZXN1bHQgaW4gaW5jcmVhc2VkIGRyb3BwZWQgZnJhbWVzIHdoZW4gdGhlIHZpZGVvCisvLyByZXNvbHV0aW9uIGNoYW5nZXMgZHVyaW5nIHBsYXliYWNrIChpZiB0aGUgZGVjb2RlciBpcyBub3QgZm9yY2VkIHRvIHVzZQorLy8gbWF4IHJlc29sdXRpb24gcmVzb3VyY2VzKS4KK2NvbnN0IGludCBrTWF4T3V0cHV0U2FtcGxlcyA9IDEwOworCisvLyBUaHJvdHRsZSB0aGUgbnVtYmVyIG9mIHF1ZXVlZCBpbnB1dHMgdG8gY29udHJvbCBtZW1vcnkgdXNhZ2UuCitjb25zdCBpbnQga01heElucHV0U2FtcGxlcyA9IDE1OworCisvLyBQcmltZSB0aGUgVlA5IGRlY29kZXIgZm9yIGEgY2VydGFpbiBudW1iZXIgb2Ygb3V0cHV0IGZyYW1lcyB0byByZWR1Y2UKKy8vIGhpdGNoaW5nIGF0IHRoZSBzdGFydCBvZiBwbGF5YmFjay4KK2NvbnN0IGludCBrVnA5UHJpbWluZ0ZyYW1lQ291bnQgPSAxMDsKKworLy8gRGVjb2RlIHRhcmdldHMgYXJlIGNhY2hlZCBmb3IgcmV1c2UuIEVuc3VyZSB0aGUgY2FjaGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2gKKy8vIHRvIGFjY29tbW9kYXRlIHRoZSBkZXB0aCBvZiB0aGUgcHJlc2VudGF0aW9uIHN3YXAgY2hhaW4sIG90aGVyd2lzZSB0aGUKKy8vIHZpZGVvIHRleHR1cmVzIG1heSBiZSB1cGRhdGVkIGJlZm9yZSBvciB3aGlsZSB0aGV5IGFyZSBhY3R1YWxseSByZW5kZXJlZC4KK2NvbnN0IGludCBrRGVjb2RlVGFyZ2V0Q2FjaGVTaXplID0gMjsKKworLy8gQWxsb2NhdGUgZGVjb2RlIHRhcmdldHMgYXQgdGhlIG1heGltdW0gc2l6ZSB0byBhbGxvdyB0aGVtIHRvIGJlIHJldXNlZCBmb3IKKy8vIGFsbCByZXNvbHV0aW9ucy4gVGhpcyBtaW5pbWl6ZXMgaGl0Y2hpbmcgZHVyaW5nIHJlc29sdXRpb24gY2hhbmdlcy4KKyNpZmRlZiBFTkFCTEVfVlA5XzhLX1NVUFBPUlQKK2NvbnN0IGludCBrTWF4RGVjb2RlVGFyZ2V0V2lkdGggPSA3NjgwOworY29uc3QgaW50IGtNYXhEZWNvZGVUYXJnZXRIZWlnaHQgPSA0MzIwOworI2Vsc2UgICAvLyBFTkFCTEVfVlA5XzhLX1NVUFBPUlQKK2NvbnN0IGludCBrTWF4RGVjb2RlVGFyZ2V0V2lkdGggPSAzODQwOworY29uc3QgaW50IGtNYXhEZWNvZGVUYXJnZXRIZWlnaHQgPSAyMTYwOworI2VuZGlmICAvLyBFTkFCTEVfVlA5XzhLX1NVUFBPUgorCitERUZJTkVfR1VJRChEWFZBX01vZGVWUDlfVkxEX1Byb2ZpbGUwLAorICAgICAgICAgICAgMHg0NjM3MDdmOCwKKyAgICAgICAgICAgIDB4YTFkMCwKKyAgICAgICAgICAgIDB4NDU4NSwKKyAgICAgICAgICAgIDB4ODcsCisgICAgICAgICAgICAweDZkLAorICAgICAgICAgICAgMHg4MywKKyAgICAgICAgICAgIDB4YWEsCisgICAgICAgICAgICAweDZkLAorICAgICAgICAgICAgMHg2MCwKKyAgICAgICAgICAgIDB4YjgsCisgICAgICAgICAgICAweDllKTsKKworREVGSU5FX0dVSUQoRFhWQV9Nb2RlVlA5X1ZMRF8xMGJpdF9Qcm9maWxlMiwKKyAgICAgICAgICAgIDB4YTRjNzQ5ZWYsCisgICAgICAgICAgICAweDZlY2YsCisgICAgICAgICAgICAweDQ4YWEsCisgICAgICAgICAgICAweDg0LAorICAgICAgICAgICAgMHg0OCwKKyAgICAgICAgICAgIDB4NTAsCisgICAgICAgICAgICAweGE3LAorICAgICAgICAgICAgMHhhMSwKKyAgICAgICAgICAgIDB4MTYsCisgICAgICAgICAgICAweDVmLAorICAgICAgICAgICAgMHhmNyk7CisKK3Njb3BlZF9wdHI8TWVkaWFUcmFuc2Zvcm0+IENyZWF0ZVZpZGVvVHJhbnNmb3JtKAorICAgIGNvbnN0IEdVSUQmIGRlY29kZXJfZ3VpZCwKKyAgICBjb25zdCBHVUlEJiBpbnB1dF9ndWlkLAorICAgIGNvbnN0IEdVSUQmIG91dHB1dF9ndWlkLAorICAgIGNvbnN0IElNRkRYR0lEZXZpY2VNYW5hZ2VyKiBkZXZpY2VfbWFuYWdlcikgeworICBzY29wZWRfcHRyPE1lZGlhVHJhbnNmb3JtPiBtZWRpYV90cmFuc2Zvcm0obmV3IE1lZGlhVHJhbnNmb3JtKGRlY29kZXJfZ3VpZCkpOworICBpZiAoIW1lZGlhX3RyYW5zZm9ybS0+SGFzVmFsaWRUcmFuc2Zvcm0oKSkgeworICAgIC8vIERlY29kZXIgVHJhbnNmb3JtIHNldHVwIGZhaWxlZAorICAgIHJldHVybiBzY29wZWRfcHRyPE1lZGlhVHJhbnNmb3JtPigpLlBhc3MoKTsKKyAgfQorICBtZWRpYV90cmFuc2Zvcm0tPkVuYWJsZUlucHV0VGhyb3R0bGUodHJ1ZSk7CisKKyAgQ29tUHRyPElNRkF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMgPSBtZWRpYV90cmFuc2Zvcm0tPkdldEF0dHJpYnV0ZXMoKTsKKyAgaWYgKCFhdHRyaWJ1dGVzKSB7CisgICAgLy8gRGVjb2RlciBUcmFuc2Zvcm0gc2V0dXAgZmFpbGVkCisgICAgcmV0dXJuIHNjb3BlZF9wdHI8TWVkaWFUcmFuc2Zvcm0+KCkuUGFzcygpOworICB9CisKKyAgVUlOVDMyIGlzX2QzZF9hd2FyZV9hdHRyaWJ1dGUgPSBmYWxzZTsKKyAgSFJFU1VMVCBociA9IGF0dHJpYnV0ZXMtPkdldFVJTlQzMihNRl9TQV9EM0RfQVdBUkUsICZpc19kM2RfYXdhcmVfYXR0cmlidXRlKTsKKyAgaWYgKFNVQ0NFRURFRChocikgJiYgaXNfZDNkX2F3YXJlX2F0dHJpYnV0ZSkgeworICAgIC8vIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLCBhbiBlcnJvciBpcyBleHBlY3RlZCB3aGVuIHJ1bm5pbmcgaW4gU2Vzc2lvbiAwLgorICAgIGhyID0gbWVkaWFfdHJhbnNmb3JtLT5TZW5kTWVzc2FnZShNRlRfTUVTU0FHRV9TRVRfRDNEX01BTkFHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HX1BUUihkZXZpY2VfbWFuYWdlcikpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICBTQl9MT0coV0FSTklORykgPDwgIlVuYWJsZSB0byBzZXQgZGV2aWNlIG1hbmFnZXIgZm9yIGQzZCBhd2FyZSBkZWNvZGVyLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImRpc2FibGluZyBEWFZBLiI7CisgICAgICBociA9IGF0dHJpYnV0ZXMtPlNldFVJTlQzMihDT0RFQ0FQSV9BVkRlY1ZpZGVvQWNjZWxlcmF0aW9uX0gyNjQsIEZBTFNFKTsKKyAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiVW5hYmxlIHRvIGRpc2FibGUgRFhWQS4iOworICAgICAgICByZXR1cm4gc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4oKS5QYXNzKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGhyID0gYXR0cmlidXRlcy0+U2V0VUlOVDMyKENPREVDQVBJX0FWRGVjVmlkZW9BY2NlbGVyYXRpb25fSDI2NCwgVFJVRSk7CisgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBTQl9MT0coSU5GTykgPDwgIlVuYWJsZSB0byBlbmFibGUgRFhWQSBmb3IgdmlkZW8gZGVjb2Rlci4iOworICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBTQl9MT0coV0FSTklORykgPDwgIlZpZGVvIGRlY29kZXIgaXMgbm90IEQzRCBhd2FyZSwgZGVjb2RpbmcgbWF5IGJlIHNsb3cuIjsKKyAgfQorCisgIC8vIFRlbGwgdGhlIGRlY29kZXIgdG8gYWxsb2NhdGUgcmVzb3VyY2VzIGZvciB0aGUgbWF4aW11bSByZXNvbHV0aW9uIGluCisgIC8vIG9yZGVyIHRvIG1pbmltaXplIGdsaXRjaGluZyBvbiByZXNvbHV0aW9uIGNoYW5nZXMuCisgIGlmIChGQUlMRUQoYXR0cmlidXRlcy0+U2V0VUlOVDMyKE1GX01UX0RFQ09ERVJfVVNFX01BWF9SRVNPTFVUSU9OLCAxKSkpIHsKKyAgICByZXR1cm4gc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4oKS5QYXNzKCk7CisgIH0KKworICBDb21QdHI8SU1GTWVkaWFUeXBlPiBpbnB1dF90eXBlOworICBpZiAoRkFJTEVEKE1GQ3JlYXRlTWVkaWFUeXBlKCZpbnB1dF90eXBlKSkgfHwgIWlucHV0X3R5cGUpIHsKKyAgICByZXR1cm4gc2NvcGVkX3B0cjxNZWRpYVRyYW5zZm9ybT4oKS5QYXNzKCk7CisgIH0KKyAgQ2hlY2tSZXN1bHQoaW5wdXRfdHlwZS0+U2V0R1VJRChNRl9NVF9NQUpPUl9UWVBFLCBNRk1lZGlhVHlwZV9WaWRlbykpOworICBDaGVja1Jlc3VsdChpbnB1dF90eXBlLT5TZXRHVUlEKE1GX01UX1NVQlRZUEUsIGlucHV0X2d1aWQpKTsKKyAgQ2hlY2tSZXN1bHQoaW5wdXRfdHlwZS0+U2V0VUlOVDMyKE1GX01UX0lOVEVSTEFDRV9NT0RFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUZWaWRlb0ludGVybGFjZV9Qcm9ncmVzc2l2ZSkpOworICBpZiAoaW5wdXRfZ3VpZCA9PSBNRlZpZGVvRm9ybWF0X1ZQOTApIHsKKyAgICAvLyBTZXQgdGhlIGV4cGVjdGVkIHZpZGVvIHJlc29sdXRpb24uIFNldHRpbmcgdGhlIHByb3BlciByZXNvbHV0aW9uIGNhbgorICAgIC8vIG1pdGlnYXRlIGEgZm9ybWF0IGNoYW5nZSwgYnV0IHRoZSBkZWNvZGVyIHdpbGwgYWRqdXN0IHRvIHRoZSByZWFsCisgICAgLy8gcmVzb2x1dGlvbiByZWdhcmRsZXNzLgorICAgIENoZWNrUmVzdWx0KE1GU2V0QXR0cmlidXRlU2l6ZShpbnB1dF90eXBlLkdldCgpLCBNRl9NVF9GUkFNRV9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4RGVjb2RlVGFyZ2V0V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhEZWNvZGVUYXJnZXRIZWlnaHQpKTsKKyAgfQorICBtZWRpYV90cmFuc2Zvcm0tPlNldElucHV0VHlwZShpbnB1dF90eXBlKTsKKworICBtZWRpYV90cmFuc2Zvcm0tPlNldE91dHB1dFR5cGVCeVN1YlR5cGUob3V0cHV0X2d1aWQpOworCisgIHJldHVybiBtZWRpYV90cmFuc2Zvcm0uUGFzcygpOworfQorCitjbGFzcyBWaWRlb0ZyYW1lSW1wbCA6IHB1YmxpYyBWaWRlb0ZyYW1lIHsKKyBwdWJsaWM6CisgIFZpZGVvRnJhbWVJbXBsKFNiVGltZSB0aW1lc3RhbXAsIHN0ZDo6ZnVuY3Rpb248dm9pZChWaWRlb0ZyYW1lKik+IHJlbGVhc2VfY2IpCisgICAgICA6IFZpZGVvRnJhbWUodGltZXN0YW1wKSwgcmVsZWFzZV9jYl8ocmVsZWFzZV9jYikgeworICAgIFNCX0RDSEVDSyhyZWxlYXNlX2NiXyk7CisgIH0KKyAgflZpZGVvRnJhbWVJbXBsKCkgeyByZWxlYXNlX2NiXyh0aGlzKTsgfQorCisgcHJpdmF0ZToKKyAgc3RkOjpmdW5jdGlvbjx2b2lkKFZpZGVvRnJhbWUqKT4gcmVsZWFzZV9jYl87Cit9OworCit9ICAvLyBuYW1lc3BhY2UKKworVmlkZW9EZWNvZGVyOjpWaWRlb0RlY29kZXIoCisgICAgU2JNZWRpYVZpZGVvQ29kZWMgdmlkZW9fY29kZWMsCisgICAgU2JQbGF5ZXJPdXRwdXRNb2RlIG91dHB1dF9tb2RlLAorICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIGdyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIsCisgICAgU2JEcm1TeXN0ZW0gZHJtX3N5c3RlbSwKKyAgICBib29sIGlzX2hkcl9zdXBwb3J0ZWQpCisgICAgOiB2aWRlb19jb2RlY18odmlkZW9fY29kZWMpLAorICAgICAgZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8oZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlciksCisgICAgICBkcm1fc3lzdGVtXyhkcm1fc3lzdGVtKSwKKyAgICAgIGlzX2hkcl9zdXBwb3J0ZWRfKGlzX2hkcl9zdXBwb3J0ZWQpIHsKKyAgU0JfRENIRUNLKG91dHB1dF9tb2RlID09IGtTYlBsYXllck91dHB1dE1vZGVEZWNvZGVUb1RleHR1cmUpOworCisgIEhhcmR3YXJlRGVjb2RlckNvbnRleHQgaGFyZHdhcmVfY29udGV4dCA9IEdldERpcmVjdFhGb3JIYXJkd2FyZURlY29kaW5nKCk7CisgIGQzZF9kZXZpY2VfID0gaGFyZHdhcmVfY29udGV4dC5keF9kZXZpY2Vfb3V0OworICBkZXZpY2VfbWFuYWdlcl8gPSBoYXJkd2FyZV9jb250ZXh0LmR4Z2lfZGV2aWNlX21hbmFnZXJfb3V0OworICBIUkVTVUxUIGhyID0gZDNkX2RldmljZV8uQXMoJnZpZGVvX2RldmljZV8pOworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIENvbVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0PiBkM2RfY29udGV4dDsKKyAgZDNkX2RldmljZV8tPkdldEltbWVkaWF0ZUNvbnRleHQoZDNkX2NvbnRleHQuR2V0QWRkcmVzc09mKCkpOworICBkM2RfY29udGV4dC5BcygmdmlkZW9fY29udGV4dF8pOworfQorCitWaWRlb0RlY29kZXI6On5WaWRlb0RlY29kZXIoKSB7CisgIFNCX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgUmVzZXQoKTsKKyAgU2h1dGRvd25Db2RlYygpOworfQorCisvLyBzdGF0aWMKK2Jvb2wgVmlkZW9EZWNvZGVyOjpJc0hhcmR3YXJlVnA5RGVjb2RlclN1cHBvcnRlZChib29sIGlzX2hkcl9yZXF1aXJlZCkgeworICBzdGF0aWMgYm9vbCBzX2ZpcnN0X3RpbWVfdXBkYXRlID0gdHJ1ZTsKKyAgc3RhdGljIGJvb2wgc19pc192cDlfc3VwcG9ydGVkID0gZmFsc2U7CisgIHN0YXRpYyBib29sIHNfaXNfaGRyX3N1cHBvcnRlZCA9IGZhbHNlOworCisgIGNvbnN0IFVJTlQgRDNEMTFfVklERU9fREVDT0RFUl9DQVBTX1VOU1VQUE9SVEVEID0gMHgxMDsKKworICBpZiAoc19maXJzdF90aW1lX3VwZGF0ZSkgeworICAgIENvbVB0cjxJRDNEMTFEZXZpY2U+IGQzZDExX2RldmljZTsKKyAgICBIUkVTVUxUIGhyID0gRDNEMTFDcmVhdGVEZXZpY2UoCisgICAgICAgIG51bGxwdHIsIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgMCwKKyAgICAgICAgRDNEMTFfU0RLX1ZFUlNJT04sIGQzZDExX2RldmljZS5HZXRBZGRyZXNzT2YoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgQ29tUHRyPElEM0QxMVZpZGVvRGV2aWNlMT4gdmlkZW9fZGV2aWNlOworICAgIGlmIChGQUlMRUQoZDNkMTFfZGV2aWNlLkFzKCZ2aWRlb19kZXZpY2UpKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBEWEdJX1JBVElPTkFMIGtGcHMgPSB7MzAsIDF9OyAgLy8gMzAgZnBzID0gMzAvMQorICAgIGNvbnN0IFVJTlQga0JpdHJhdGUgPSAwOworICAgIFVJTlQgY2Fwc19wcm9maWxlXzAgPSAwOworICAgIGlmIChTVUNDRUVERUQodmlkZW9fZGV2aWNlLT5HZXRWaWRlb0RlY29kZXJDYXBzKCZEWFZBX01vZGVWUDlfVkxEX1Byb2ZpbGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4NDAsIDIxNjAsICZrRnBzLCBrQml0cmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmY2Fwc19wcm9maWxlXzApKSkgeworICAgICAgc19pc192cDlfc3VwcG9ydGVkID0KKyAgICAgICAgICBjYXBzX3Byb2ZpbGVfMCAhPSBEM0QxMV9WSURFT19ERUNPREVSX0NBUFNfVU5TVVBQT1JURUQ7CisgICAgfQorCisgICAgVUlOVCBjYXBzX3Byb2ZpbGVfMiA9IDA7CisgICAgaWYgKFNVQ0NFRURFRCh2aWRlb19kZXZpY2UtPkdldFZpZGVvRGVjb2RlckNhcHMoCisgICAgICAgICAgICAmRFhWQV9Nb2RlVlA5X1ZMRF8xMGJpdF9Qcm9maWxlMiwgMzg0MCwgMjE2MCwgJmtGcHMsIGtCaXRyYXRlLCBOVUxMLAorICAgICAgICAgICAgJmNhcHNfcHJvZmlsZV8yKSkpIHsKKyAgICAgIHNfaXNfaGRyX3N1cHBvcnRlZCA9CisgICAgICAgICAgY2Fwc19wcm9maWxlXzIgIT0gRDNEMTFfVklERU9fREVDT0RFUl9DQVBTX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICBzX2ZpcnN0X3RpbWVfdXBkYXRlID0gZmFsc2U7CisgIH0KKyAgcmV0dXJuIGlzX2hkcl9yZXF1aXJlZCA/IHNfaXNfdnA5X3N1cHBvcnRlZCAmJiBzX2lzX2hkcl9zdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHNfaXNfdnA5X3N1cHBvcnRlZDsKK30KKworc2l6ZV90IFZpZGVvRGVjb2Rlcjo6R2V0UHJlcm9sbEZyYW1lQ291bnQoKSBjb25zdCB7CisgIHJldHVybiBrTWF4T3V0cHV0U2FtcGxlczsKK30KKworc2l6ZV90IFZpZGVvRGVjb2Rlcjo6R2V0TWF4TnVtYmVyT2ZDYWNoZWRGcmFtZXMoKSBjb25zdCB7CisgIHJldHVybiBrTWF4T3V0cHV0U2FtcGxlczsKK30KKwordm9pZCBWaWRlb0RlY29kZXI6OkluaXRpYWxpemUoY29uc3QgRGVjb2RlclN0YXR1c0NCJiBkZWNvZGVyX3N0YXR1c19jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVycm9yQ0ImIGVycm9yX2NiKSB7CisgIFNCX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgU0JfRENIRUNLKCFkZWNvZGVyX3N0YXR1c19jYl8pOworICBTQl9EQ0hFQ0soZGVjb2Rlcl9zdGF0dXNfY2IpOworICBTQl9EQ0hFQ0soIWVycm9yX2NiXyk7CisgIFNCX0RDSEVDSyhlcnJvcl9jYik7CisgIGRlY29kZXJfc3RhdHVzX2NiXyA9IGRlY29kZXJfc3RhdHVzX2NiOworICBlcnJvcl9jYl8gPSBlcnJvcl9jYjsKKyAgaWYgKHZpZGVvX2RldmljZV8pIHsKKyAgICBJbml0aWFsaXplQ29kZWMoKTsKKyAgfQorICBpZiAoIWRlY29kZXJfKSB7CisgICAgZXJyb3JfY2JfKGtTYlBsYXllckVycm9yRGVjb2RlLCAiQ2Fubm90IGluaXRpYWxpemUgY29kZWMuIik7CisgIH0KK30KKwordm9pZCBWaWRlb0RlY29kZXI6OldyaXRlSW5wdXRCdWZmZXIoCisgICAgY29uc3Qgc2NvcGVkX3JlZnB0cjxJbnB1dEJ1ZmZlcj4mIGlucHV0X2J1ZmZlcikgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgIFNCX0RDSEVDSyhpbnB1dF9idWZmZXIpOworICBTQl9EQ0hFQ0soZGVjb2Rlcl9zdGF0dXNfY2JfKTsKKyAgRW5zdXJlRGVjb2RlclRocmVhZFJ1bm5pbmcoKTsKKworICBpZiAoVHJ5VXBkYXRlT3V0cHV0Rm9ySGRyVmlkZW8oaW5wdXRfYnVmZmVyLT52aWRlb19zYW1wbGVfaW5mbygpKSkgeworICAgIFNjb3BlZExvY2sgbG9jayh0aHJlYWRfbG9ja18pOworICAgIHRocmVhZF9ldmVudHNfLmVtcGxhY2VfYmFjaygKKyAgICAgICAgbmV3IEV2ZW50e0V2ZW50OjprV3JpdGVJbnB1dEJ1ZmZlciwgaW5wdXRfYnVmZmVyfSk7CisgIH0gZWxzZSB7CisgICAgZXJyb3JfY2JfKGtTYlBsYXllckVycm9yQ2FwYWJpbGl0eUNoYW5nZWQsCisgICAgICAgICAgICAgICJIRFIgc2luayBsb3N0IHdoaWxlIEhEUiB2aWRlbyBwbGF5aW5nLiIpOworICB9Cit9CisKK3ZvaWQgVmlkZW9EZWNvZGVyOjpXcml0ZUVuZE9mU3RyZWFtKCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisgIFNCX0RDSEVDSyhkZWNvZGVyX3N0YXR1c19jYl8pOworICBFbnN1cmVEZWNvZGVyVGhyZWFkUnVubmluZygpOworCisgIFNjb3BlZExvY2sgbG9jayh0aHJlYWRfbG9ja18pOworICB0aHJlYWRfZXZlbnRzXy5lbXBsYWNlX2JhY2sobmV3IEV2ZW50e0V2ZW50OjprV3JpdGVFbmRPZlN0cmVhbX0pOworfQorCit2b2lkIFZpZGVvRGVjb2Rlcjo6UmVzZXQoKSB7CisgIFNCX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKKyAgU3RvcERlY29kZXJUaHJlYWQoKTsKKworICAvLyBNYWtlIHN1cmUgYWxsIG91dHB1dCBzYW1wbGVzIGhhdmUgYmVlbiByZWxlYXNlZCBiZWZvcmUgZmx1c2hpbmcgdGhlCisgIC8vIGRlY29kZXIuIEJlIHN1cmUgdG8gQWNxdWlyZSB0aGUgbXV0ZXhlcyBpbiB0aGUgc2FtZSBvcmRlciBhcworICAvLyBDcmVhdGVEZWNvZGVUYXJnZXQgdG8gYXZvaWQgcG9zc2libGUgZGVhZGxvY2suCisgIG91dHB1dHNfcmVzZXRfbG9ja18uQWNxdWlyZSgpOworICB0aHJlYWRfbG9ja18uQWNxdWlyZSgpOworICB0aHJlYWRfb3V0cHV0c18uY2xlYXIoKTsKKyAgdGhyZWFkX2xvY2tfLlJlbGVhc2UoKTsKKyAgb3V0cHV0c19yZXNldF9sb2NrXy5SZWxlYXNlKCk7CisKKyAgLy8gSWYgdGhlIHByZXZpb3VzIHByaW1pbmcgaGFzbid0IGZpbmlzaGVkLCByZXN0YXJ0IGl0LiAgVGhpcyBoYXBwZW5zIHJhcmVseQorICAvLyBhcyBpdCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIGEgc2VlayBpcyByZXF1ZXN0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdmlkZW8gaXMKKyAgLy8gc3RhcnRlZC4KKyAgaWYgKHByaW1pbmdfb3V0cHV0X2NvdW50XyA+IDApIHsKKyAgICBwcmltaW5nX291dHB1dF9jb3VudF8gPSBrVnA5UHJpbWluZ0ZyYW1lQ291bnQ7CisgIH0KKworICBkZWNvZGVyX3N0YXR1c19jYl8oa1JlbGVhc2VBbGxGcmFtZXMsIG51bGxwdHIpOworICBpZiAoZGVjb2Rlcl8pIHsKKyAgICBkZWNvZGVyXy0+UmVzZXQoKTsKKyAgfQorfQorCitTYkRlY29kZVRhcmdldCBWaWRlb0RlY29kZXI6OkdldEN1cnJlbnREZWNvZGVUYXJnZXQoKSB7CisgIGF1dG8gZGVjb2RlX3RhcmdldCA9IENyZWF0ZURlY29kZVRhcmdldCgpOworCisgIGlmIChTYkRlY29kZVRhcmdldElzVmFsaWQoZGVjb2RlX3RhcmdldCkpIHsKKyAgICBpZiAoU2JEZWNvZGVUYXJnZXRJc1ZhbGlkKGN1cnJlbnRfZGVjb2RlX3RhcmdldF8pKSB7CisgICAgICBwcmV2X2RlY29kZV90YXJnZXRzXy5lbXBsYWNlX2JhY2soY3VycmVudF9kZWNvZGVfdGFyZ2V0Xyk7CisgICAgfQorICAgIGN1cnJlbnRfZGVjb2RlX3RhcmdldF8gPSBkZWNvZGVfdGFyZ2V0OworICB9CisgIGlmIChTYkRlY29kZVRhcmdldElzVmFsaWQoY3VycmVudF9kZWNvZGVfdGFyZ2V0XykpIHsKKyAgICAvLyBBZGQgYSByZWZlcmVuY2UgZm9yIHRoZSBjYWxsZXIuCisgICAgY3VycmVudF9kZWNvZGVfdGFyZ2V0Xy0+QWRkUmVmKCk7CisgIH0KKyAgcmV0dXJuIGN1cnJlbnRfZGVjb2RlX3RhcmdldF87Cit9CisKK1NiRGVjb2RlVGFyZ2V0IFZpZGVvRGVjb2Rlcjo6Q3JlYXRlRGVjb2RlVGFyZ2V0KCkgeworICBSRUNUIHZpZGVvX2FyZWE7CisgIENvbVB0cjxJTUZTYW1wbGU+IHZpZGVvX3NhbXBsZTsKKworICAvLyBEb24ndCBhbGxvdyBhIGRlY29kZXIgcmVzZXQgKGZsdXNoKSB3aGlsZSBhbiBJTUZTYW1wbGUgaXMKKyAgLy8gYWxpdmUuIEhvd2V2ZXIsIHRoZSBkZWNvZGVyIHRocmVhZCBzaG91bGQgYmUgYWxsb3dlZCB0byBjb250aW51ZQorICAvLyB3aGlsZSB0aGUgU2JEZWNvZGVUYXJnZXQgaXMgYmVpbmcgY3JlYXRlZC4KKyAgU2NvcGVkTG9jayByZXNldF9sb2NrKG91dHB1dHNfcmVzZXRfbG9ja18pOworCisgIC8vIFVzZSB0aGUgb2xkZXN0IG91dHB1dC4KKyAgdGhyZWFkX2xvY2tfLkFjcXVpcmUoKTsKKyAgaWYgKCF0aHJlYWRfb3V0cHV0c18uZW1wdHkoKSkgeworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCByZW1vdmUgb3V0cHV0IGZyYW1lcy4gSG93ZXZlciwgaXQncyBwb3NzaWJsZQorICAgIC8vIGZvciB0aGUgc2FtZSBmcmFtZSB0byBiZSByZXF1ZXN0ZWQgbXVsdGlwbGUgdGltZXMuIFRvIGF2b2lkIHJlLWNyZWF0aW5nCisgICAgLy8gU2JEZWNvZGVUYXJnZXRzLCByZWxlYXNlIHRoZSB2aWRlb19zYW1wbGUgb25jZSBpdCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgIC8vIGFuIG91dHB1dCBmcmFtZS4gVGhlIG5leHQgY2FsbCB0byBDcmVhdGVEZWNvZGVUYXJnZXQgZm9yIHRoZSBzYW1lIGZyYW1lCisgICAgLy8gd2lsbCByZXR1cm4ga1NiRGVjb2RlVGFyZ2V0SW52YWxpZCwgYW5kIHxjdXJyZW50X2RlY29kZV90YXJnZXRffCB3aWxsCisgICAgLy8gYmUgcmV1c2VkLgorICAgIE91dHB1dCYgb3V0cHV0ID0gdGhyZWFkX291dHB1dHNfLmZyb250KCk7CisgICAgdmlkZW9fYXJlYSA9IG91dHB1dC52aWRlb19hcmVhOworICAgIHZpZGVvX3NhbXBsZS5Td2FwKG91dHB1dC52aWRlb19zYW1wbGUpOworICB9CisgIHRocmVhZF9sb2NrXy5SZWxlYXNlKCk7CisKKyAgU2JEZWNvZGVUYXJnZXQgZGVjb2RlX3RhcmdldCA9IGtTYkRlY29kZVRhcmdldEludmFsaWQ7CisgIGlmICh2aWRlb19zYW1wbGUgIT0gbnVsbHB0cikgeworICAgIC8vIFRyeSByZXVzaW5nIHRoZSBwcmV2aW91cyBkZWNvZGUgdGFyZ2V0IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBoaXQgb2YKKyAgICAvLyBjcmVhdGluZyBhIG5ldyB0ZXh0dXJlLgorICAgIFNCX0RDSEVDSyhwcmV2X2RlY29kZV90YXJnZXRzXy5zaXplKCkgPD0ga0RlY29kZVRhcmdldENhY2hlU2l6ZSArIDEpOworICAgIGlmIChwcmV2X2RlY29kZV90YXJnZXRzXy5zaXplKCkgPj0ga0RlY29kZVRhcmdldENhY2hlU2l6ZSkgeworICAgICAgZGVjb2RlX3RhcmdldCA9IHByZXZfZGVjb2RlX3RhcmdldHNfLmZyb250KCk7CisgICAgICBwcmV2X2RlY29kZV90YXJnZXRzXy5wb3BfZnJvbnQoKTsKKyAgICAgIGF1dG8gaGFyZHdhcmVfZGVjb2RlX3RhcmdldCA9CisgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxIYXJkd2FyZURlY29kZVRhcmdldFByaXZhdGUqPihkZWNvZGVfdGFyZ2V0KTsKKyAgICAgIGlmICghaGFyZHdhcmVfZGVjb2RlX3RhcmdldC0+VXBkYXRlKAorICAgICAgICAgICAgICBkM2RfZGV2aWNlXywgdmlkZW9fZGV2aWNlXywgdmlkZW9fY29udGV4dF8sIHZpZGVvX2VudW1lcmF0b3JfLAorICAgICAgICAgICAgICB2aWRlb19wcm9jZXNzb3JfLCB2aWRlb19zYW1wbGUsIHZpZGVvX2FyZWEsIGlzX2hkcl9zdXBwb3J0ZWRfKSkgeworICAgICAgICAvLyBUaGUgY2FjaGVkIGRlY29kZSB0YXJnZXQgd2FzIG5vdCBjb21wYXRpYmxlOyBqdXN0IHJlbGVhc2UgaXQuCisgICAgICAgIFNiRGVjb2RlVGFyZ2V0UmVsZWFzZShkZWNvZGVfdGFyZ2V0KTsKKyAgICAgICAgZGVjb2RlX3RhcmdldCA9IGtTYkRlY29kZVRhcmdldEludmFsaWQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFTYkRlY29kZVRhcmdldElzVmFsaWQoZGVjb2RlX3RhcmdldCkpIHsKKyAgICAgIGRlY29kZV90YXJnZXQgPSBuZXcgSGFyZHdhcmVEZWNvZGVUYXJnZXRQcml2YXRlKAorICAgICAgICAgIGQzZF9kZXZpY2VfLCB2aWRlb19kZXZpY2VfLCB2aWRlb19jb250ZXh0XywgdmlkZW9fZW51bWVyYXRvcl8sCisgICAgICAgICAgdmlkZW9fcHJvY2Vzc29yXywgdmlkZW9fc2FtcGxlLCB2aWRlb19hcmVhLCBpc19oZHJfc3VwcG9ydGVkXyk7CisgICAgfQorCisgICAgLy8gUmVsZWFzZSB0aGUgdmlkZW9fc2FtcGxlIGJlZm9yZSByZWxlYXNpbmcgdGhlIHJlc2V0IGxvY2suCisgICAgdmlkZW9fc2FtcGxlLlJlc2V0KCk7CisgIH0KKyAgcmV0dXJuIGRlY29kZV90YXJnZXQ7Cit9CisKK3ZvaWQgVmlkZW9EZWNvZGVyOjpJbml0aWFsaXplQ29kZWMoKSB7CisgIHNjb3BlZF9wdHI8TWVkaWFUcmFuc2Zvcm0+IG1lZGlhX3RyYW5zZm9ybTsKKworICAvLyBJZiB0aGlzIGlzIHVwZGF0ZWQgdGhlbiBtZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MgYWxzbyBuZWVkcyB0byBiZQorICAvLyB1cGRhdGVkLgorICBzd2l0Y2ggKHZpZGVvX2NvZGVjXykgeworICAgIGNhc2Uga1NiTWVkaWFWaWRlb0NvZGVjSDI2NDogeworICAgICAgbWVkaWFfdHJhbnNmb3JtID0KKyAgICAgICAgICBDcmVhdGVWaWRlb1RyYW5zZm9ybShDTFNJRF9NU0gyNjREZWNvZGVyTUZULCBNRlZpZGVvRm9ybWF0X0gyNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUZWaWRlb0Zvcm1hdF9OVjEyLCBkZXZpY2VfbWFuYWdlcl8uR2V0KCkpOworICAgICAgcHJpbWluZ19vdXRwdXRfY291bnRfID0gMDsKKyAgICAgIGlmICghbWVkaWFfdHJhbnNmb3JtKSB7CisgICAgICAgIFNCX0xPRyhXQVJOSU5HKSA8PCAiSDI2NCBoYXJkd2FyZSBkZWNvZGVyIGNyZWF0aW9uIGZhaWxlZC4iOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBrU2JNZWRpYVZpZGVvQ29kZWNWcDk6IHsKKyAgICAgIGlmIChJc0hhcmR3YXJlVnA5RGVjb2RlclN1cHBvcnRlZCgpKSB7CisgICAgICAgIG1lZGlhX3RyYW5zZm9ybSA9CisgICAgICAgICAgICBDcmVhdGVWaWRlb1RyYW5zZm9ybShDTFNJRF9NU1ZQeERlY29kZXIsIE1GVmlkZW9Gb3JtYXRfVlA5MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1GVmlkZW9Gb3JtYXRfTlYxMiwgZGV2aWNlX21hbmFnZXJfLkdldCgpKTsKKyAgICAgICAgcHJpbWluZ19vdXRwdXRfY291bnRfID0ga1ZwOVByaW1pbmdGcmFtZUNvdW50OworICAgICAgfQorICAgICAgaWYgKCFtZWRpYV90cmFuc2Zvcm0pIHsKKyAgICAgICAgU0JfTE9HKFdBUk5JTkcpIDw8ICJWUDkgaGFyZHdhcmUgZGVjb2RlciBjcmVhdGlvbiBmYWlsZWQuIjsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHsgU0JfTk9UUkVBQ0hFRCgpOyB9CisgIH0KKworICBkZWNvZGVyXy5yZXNldCgKKyAgICAgIG5ldyBEZWNyeXB0aW5nRGVjb2RlcigidmlkZW8iLCBtZWRpYV90cmFuc2Zvcm0uUGFzcygpLCBkcm1fc3lzdGVtXykpOworICBNZWRpYVRyYW5zZm9ybSogdHJhbnNmb3JtID0gZGVjb2Rlcl8tPkdldERlY29kZXIoKTsKKworICBEV09SRCBpbnB1dF9zdHJlYW1fY291bnQgPSAwOworICBEV09SRCBvdXRwdXRfc3RyZWFtX2NvdW50ID0gMDsKKyAgU0JfRENIRUNLKHRyYW5zZm9ybSk7CisgIHRyYW5zZm9ybS0+R2V0U3RyZWFtQ291bnQoJmlucHV0X3N0cmVhbV9jb3VudCwgJm91dHB1dF9zdHJlYW1fY291bnQpOworICBTQl9EQ0hFQ0soMSA9PSBpbnB1dF9zdHJlYW1fY291bnQpOworICBTQl9EQ0hFQ0soMSA9PSBvdXRwdXRfc3RyZWFtX2NvdW50KTsKKworICBDb21QdHI8SU1GQXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IHRyYW5zZm9ybS0+R2V0QXR0cmlidXRlcygpOworICBTQl9EQ0hFQ0soYXR0cmlidXRlcyk7CisgIENoZWNrUmVzdWx0KGF0dHJpYnV0ZXMtPlNldFVJTlQzMihNRl9TQV9NSU5JTVVNX09VVFBVVF9TQU1QTEVfQ09VTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4T3V0cHV0U2FtcGxlcykpOworCisgIFVwZGF0ZVZpZGVvQXJlYSh0cmFuc2Zvcm0tPkdldEN1cnJlbnRPdXRwdXRUeXBlKCkpOworCisgIC8vIFRoZSB0cmFuc2Zvcm0gbXVzdCBvdXRwdXQgdGV4dHVyZXMgdGhhdCBhcmUgYm91bmQgdG8gc2hhZGVyIHJlc291cmNlcywKKyAgLy8gb3Igd2UgY2FuJ3QgZHJhdyB0aGVtIGxhdGVyIHZpYSBBTkdMRS4KKyAgQ29tUHRyPElNRkF0dHJpYnV0ZXM+IG91dHB1dF9hdHRyaWJ1dGVzID0KKyAgICAgIHRyYW5zZm9ybS0+R2V0T3V0cHV0U3RyZWFtQXR0cmlidXRlcygpOworICBTQl9EQ0hFQ0sob3V0cHV0X2F0dHJpYnV0ZXMpOworICBDaGVja1Jlc3VsdChvdXRwdXRfYXR0cmlidXRlcy0+U2V0VUlOVDMyKAorICAgICAgTUZfU0FfRDNEMTFfQklOREZMQUdTLCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfREVDT0RFUikpOworCisgIC8vIFRoZSByZXNvbHV0aW9uIGFuZCBmcmFtZXJhdGUgd2lsbCBhZGp1c3QgdG8gdGhlIGFjdHVhbCBjb250ZW50IGRhdGEuCisgIEQzRDExX1ZJREVPX1BST0NFU1NPUl9DT05URU5UX0RFU0MgY29udGVudF9kZXNjID0ge307CisgIGNvbnRlbnRfZGVzYy5JbnB1dEZyYW1lRm9ybWF0ID0gRDNEMTFfVklERU9fRlJBTUVfRk9STUFUX1BST0dSRVNTSVZFOworICBjb250ZW50X2Rlc2MuSW5wdXRGcmFtZVJhdGUuTnVtZXJhdG9yID0gNjA7CisgIGNvbnRlbnRfZGVzYy5JbnB1dEZyYW1lUmF0ZS5EZW5vbWluYXRvciA9IDE7CisgIGNvbnRlbnRfZGVzYy5JbnB1dFdpZHRoID0ga01heERlY29kZVRhcmdldFdpZHRoOworICBjb250ZW50X2Rlc2MuSW5wdXRIZWlnaHQgPSBrTWF4RGVjb2RlVGFyZ2V0SGVpZ2h0OworICBjb250ZW50X2Rlc2MuT3V0cHV0RnJhbWVSYXRlLk51bWVyYXRvciA9IDYwOworICBjb250ZW50X2Rlc2MuT3V0cHV0RnJhbWVSYXRlLkRlbm9taW5hdG9yID0gMTsKKyAgY29udGVudF9kZXNjLk91dHB1dFdpZHRoID0ga01heERlY29kZVRhcmdldFdpZHRoOworICBjb250ZW50X2Rlc2MuT3V0cHV0SGVpZ2h0ID0ga01heERlY29kZVRhcmdldEhlaWdodDsKKyAgY29udGVudF9kZXNjLlVzYWdlID0gRDNEMTFfVklERU9fVVNBR0VfUExBWUJBQ0tfTk9STUFMOworICBDaGVja1Jlc3VsdCh2aWRlb19kZXZpY2VfLT5DcmVhdGVWaWRlb1Byb2Nlc3NvckVudW1lcmF0b3IoCisgICAgICAmY29udGVudF9kZXNjLCB2aWRlb19lbnVtZXJhdG9yXy5HZXRBZGRyZXNzT2YoKSkpOworICBDaGVja1Jlc3VsdCh2aWRlb19kZXZpY2VfLT5DcmVhdGVWaWRlb1Byb2Nlc3NvcigKKyAgICAgIHZpZGVvX2VudW1lcmF0b3JfLkdldCgpLCAwLCB2aWRlb19wcm9jZXNzb3JfLkdldEFkZHJlc3NPZigpKSk7CisgIFNCX0RDSEVDSyh2aWRlb19jb250ZXh0Xyk7CisgIHZpZGVvX2NvbnRleHRfLT5WaWRlb1Byb2Nlc3NvclNldFN0cmVhbUZyYW1lRm9ybWF0KAorICAgICAgdmlkZW9fcHJvY2Vzc29yXy5HZXQoKSwgTWVkaWFUcmFuc2Zvcm06OmtTdHJlYW1JZCwKKyAgICAgIEQzRDExX1ZJREVPX0ZSQU1FX0ZPUk1BVF9QUk9HUkVTU0lWRSk7CisgIHZpZGVvX2NvbnRleHRfLT5WaWRlb1Byb2Nlc3NvclNldFN0cmVhbUF1dG9Qcm9jZXNzaW5nTW9kZSgKKyAgICAgIHZpZGVvX3Byb2Nlc3Nvcl8uR2V0KCksIDAsIGZhbHNlKTsKK30KKwordm9pZCBWaWRlb0RlY29kZXI6OlNodXRkb3duQ29kZWMoKSB7CisgIFNCX0RDSEVDSyghU2JUaHJlYWRJc1ZhbGlkKGRlY29kZXJfdGhyZWFkXykpOworICBTQl9EQ0hFQ0sodGhyZWFkX291dHB1dHNfLmVtcHR5KCkpOworICBpZiAoIWRlY29kZXJfKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gV29yayBhcm91bmQgYSBWUDkgZGVjb2RlciBjcmFzaC4gQWxsIElNRlNhbXBsZXMgYW5kIGFueXRoaW5nIHRoYXQgbWF5CisgIC8vIHJlZmVyZW5jZSB0aGVtIGluZGlyZWN0bHkgKHRoZSBkM2QgdGV4dHVyZSBpbiBTYkRlY29kZVRhcmdldCkgbXVzdCBiZQorICAvLyByZWxlYXNlZCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBJTUZUcmFuc2Zvcm0uIERvIHRoaXMgb24gdGhlIHJlbmRlciB0aHJlYWQKKyAgLy8gc2luY2UgZ3JhcGhpY3MgcmVzb3VyY2VzIGFyZSBiZWluZyByZWxlYXNlZC4KKyAgZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlcl8tPmdsZXNfY29udGV4dF9ydW5uZXIoCisgICAgICBncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyXywgJlZpZGVvRGVjb2Rlcjo6UmVsZWFzZURlY29kZVRhcmdldHMsIHRoaXMpOworCisgIC8vIE1pY3Jvc29mdCByZWNvbW1lbmRzIHN0YWxsaW5nIHRvIGxldCBvdGhlciBzeXN0ZW1zIHJlbGVhc2UgdGhlaXIKKyAgLy8gcmVmZXJlbmNlcyB0byB0aGUgSU1GU2FtcGxlcy4KKyAgaWYgKHZpZGVvX2NvZGVjXyA9PSBrU2JNZWRpYVZpZGVvQ29kZWNWcDkpIHsKKyAgICBTYlRocmVhZFNsZWVwKDE1MCAqIGtTYlRpbWVNaWxsaXNlY29uZCk7CisgIH0KKyAgZGVjb2Rlcl8ucmVzZXQoKTsKKyAgdmlkZW9fcHJvY2Vzc29yXy5SZXNldCgpOworICB2aWRlb19lbnVtZXJhdG9yXy5SZXNldCgpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgVmlkZW9EZWNvZGVyOjpSZWxlYXNlRGVjb2RlVGFyZ2V0cyh2b2lkKiBjb250ZXh0KSB7CisgIFZpZGVvRGVjb2RlciogdGhpc19wdHIgPSBzdGF0aWNfY2FzdDxWaWRlb0RlY29kZXIqPihjb250ZXh0KTsKKyAgd2hpbGUgKCF0aGlzX3B0ci0+cHJldl9kZWNvZGVfdGFyZ2V0c18uZW1wdHkoKSkgeworICAgIFNiRGVjb2RlVGFyZ2V0UmVsZWFzZSh0aGlzX3B0ci0+cHJldl9kZWNvZGVfdGFyZ2V0c18uZnJvbnQoKSk7CisgICAgdGhpc19wdHItPnByZXZfZGVjb2RlX3RhcmdldHNfLnBvcF9mcm9udCgpOworICB9CisgIGlmIChTYkRlY29kZVRhcmdldElzVmFsaWQodGhpc19wdHItPmN1cnJlbnRfZGVjb2RlX3RhcmdldF8pKSB7CisgICAgU2JEZWNvZGVUYXJnZXRSZWxlYXNlKHRoaXNfcHRyLT5jdXJyZW50X2RlY29kZV90YXJnZXRfKTsKKyAgICB0aGlzX3B0ci0+Y3VycmVudF9kZWNvZGVfdGFyZ2V0XyA9IGtTYkRlY29kZVRhcmdldEludmFsaWQ7CisgIH0KK30KKwordm9pZCBWaWRlb0RlY29kZXI6OkVuc3VyZURlY29kZXJUaHJlYWRSdW5uaW5nKCkgeworICBTQl9EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7CisKKyAgLy8gTk9URTogVGhlIHZpZGVvIGRlY29kZXIgdGhyZWFkIHdpbGwgZXhpdCBhZnRlciBwcm9jZXNzaW5nIHRoZQorICAvLyBrV3JpdGVFbmRPZlN0cmVhbSBldmVudC4gSW4gdGhpcyBjYXNlLCBSZXNldCBtdXN0IGJlIGNhbGxlZCAod2hpY2ggd2lsbAorICAvLyB0aGVuIFN0b3BEZWNvZGVyVGhyZWFkKSBiZWZvcmUgV3JpdGVJbnB1dEJ1ZmZlciBvciBXcml0ZUVuZE9mU3RyZWFtIGFnYWluLgorICBTQl9EQ0hFQ0soIWRlY29kZXJfdGhyZWFkX3N0b3BwZWRfKTsKKworICBpZiAoIVNiVGhyZWFkSXNWYWxpZChkZWNvZGVyX3RocmVhZF8pKSB7CisgICAgaWYgKCFkZWNvZGVyXykgeworICAgICAgZXJyb3JfY2JfKGtTYlBsYXllckVycm9yRGVjb2RlLCAiRGVjb2RlciBpcyBub3QgdmFsaWQuIik7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFNCX0RDSEVDSyhkZWNvZGVyXyAhPSBudWxscHRyKTsKKyAgICBTQl9EQ0hFQ0sodGhyZWFkX2V2ZW50c18uZW1wdHkoKSk7CisgICAgZGVjb2Rlcl90aHJlYWRfc3RvcF9yZXF1ZXN0ZWRfID0gZmFsc2U7CisgICAgZGVjb2Rlcl90aHJlYWRfID0KKyAgICAgICAgU2JUaHJlYWRDcmVhdGUoMCwga1NiVGhyZWFkUHJpb3JpdHlIaWdoLCBrU2JUaHJlYWROb0FmZmluaXR5LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAiVmlkZW9EZWNvZGVyIiwgJlZpZGVvRGVjb2Rlcjo6RGVjb2RlclRocmVhZEVudHJ5LCB0aGlzKTsKKyAgICBTQl9EQ0hFQ0soU2JUaHJlYWRJc1ZhbGlkKGRlY29kZXJfdGhyZWFkXykpOworICB9Cit9CisKK3ZvaWQgVmlkZW9EZWNvZGVyOjpTdG9wRGVjb2RlclRocmVhZCgpIHsKKyAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworICBpZiAoU2JUaHJlYWRJc1ZhbGlkKGRlY29kZXJfdGhyZWFkXykpIHsKKyAgICBkZWNvZGVyX3RocmVhZF9zdG9wX3JlcXVlc3RlZF8gPSB0cnVlOworICAgIFNiVGhyZWFkSm9pbihkZWNvZGVyX3RocmVhZF8sIG51bGxwdHIpOworICAgIFNCX0RDSEVDSyhkZWNvZGVyX3RocmVhZF9zdG9wcGVkXyk7CisgICAgZGVjb2Rlcl90aHJlYWRfc3RvcHBlZF8gPSBmYWxzZTsKKyAgICBkZWNvZGVyX3RocmVhZF8gPSBrU2JUaHJlYWRJbnZhbGlkOworICB9CisgIHRocmVhZF9ldmVudHNfLmNsZWFyKCk7Cit9CisKK3ZvaWQgVmlkZW9EZWNvZGVyOjpVcGRhdGVWaWRlb0FyZWEoY29uc3QgQ29tUHRyPElNRk1lZGlhVHlwZT4mIG1lZGlhKSB7CisgIE1GVmlkZW9BcmVhIHZpZGVvX2FyZWE7CisgIEhSRVNVTFQgaHIgPSBtZWRpYS0+R2V0QmxvYihNRl9NVF9NSU5JTVVNX0RJU1BMQVlfQVBFUlRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFVJTlQ4Kj4oJnZpZGVvX2FyZWEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZpZGVvX2FyZWEpLCBudWxscHRyKTsKKyAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICB2aWRlb19hcmVhXy5sZWZ0ID0gdmlkZW9fYXJlYS5PZmZzZXRYLnZhbHVlOworICAgIHZpZGVvX2FyZWFfLnRvcCA9IHZpZGVvX2FyZWEuT2Zmc2V0WS52YWx1ZTsKKyAgICB2aWRlb19hcmVhXy5yaWdodCA9IHZpZGVvX2FyZWFfLmxlZnQgKyB2aWRlb19hcmVhLkFyZWEuY3g7CisgICAgdmlkZW9fYXJlYV8uYm90dG9tID0gdmlkZW9fYXJlYV8udG9wICsgdmlkZW9fYXJlYS5BcmVhLmN5OworICAgIHJldHVybjsKKyAgfQorCisgIFVJTlQzMiB3aWR0aDsKKyAgVUlOVDMyIGhlaWdodDsKKyAgaHIgPSBNRkdldEF0dHJpYnV0ZVNpemUobWVkaWEuR2V0KCksIE1GX01UX0ZSQU1FX1NJWkUsICZ3aWR0aCwgJmhlaWdodCk7CisgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgdmlkZW9fYXJlYV8ubGVmdCA9IDA7CisgICAgdmlkZW9fYXJlYV8udG9wID0gMDsKKyAgICB2aWRlb19hcmVhXy5yaWdodCA9IHdpZHRoOworICAgIHZpZGVvX2FyZWFfLmJvdHRvbSA9IGhlaWdodDsKKyAgICByZXR1cm47CisgIH0KKworICBTQl9OT1RSRUFDSEVEKCkgPDwgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbmV3IHZpZGVvIG91dHB1dCByZXNvbHV0aW9uIjsKK30KKworc2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lPiBWaWRlb0RlY29kZXI6OkNyZWF0ZVZpZGVvRnJhbWUoCisgICAgY29uc3QgQ29tUHRyPElNRlNhbXBsZT4mIHNhbXBsZSkgeworICAvLyBOT1RFOiBBbGwgc2FtcGxlcyBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBmbHVzaGluZyB0aGUgZGVjb2Rlci4gU2luY2UKKyAgLy8gdGhlIGhvc3QgbWF5IGhhbmcgb250byBWaWRlb0ZyYW1lcyB0aGF0IGFyZSBjcmVhdGVkIGhlcmUsIG1ha2UgdGhlbQorICAvLyB3ZWFrIHJlZmVyZW5jZXMgdG8gdGhlIGFjdHVhbCBzYW1wbGUuCisgIExPTkdMT05HIHdpbjMyX3NhbXBsZV90aW1lID0gMDsKKyAgQ2hlY2tSZXN1bHQoc2FtcGxlLT5HZXRTYW1wbGVUaW1lKCZ3aW4zMl9zYW1wbGVfdGltZSkpOworICBTYlRpbWUgc2FtcGxlX3RpbWUgPSBDb252ZXJ0VG9TYlRpbWUod2luMzJfc2FtcGxlX3RpbWUpOworCisgIHRocmVhZF9sb2NrXy5BY3F1aXJlKCk7CisgIHRocmVhZF9vdXRwdXRzXy5lbXBsYWNlX2JhY2soc2FtcGxlX3RpbWUsIHZpZGVvX2FyZWFfLCBzYW1wbGUpOworICB0aHJlYWRfbG9ja18uUmVsZWFzZSgpOworCisgIC8vIFRoZSAibmF0aXZlIHRleHR1cmUiIGZvciB0aGUgVmlkZW9GcmFtZSBpcyBhY3R1YWxseSBqdXN0IHRoZSB0aW1lc3RhbXAKKyAgLy8gZm9yIHRoZSBvdXRwdXQgc2FtcGxlLgorICByZXR1cm4gbmV3IFZpZGVvRnJhbWVJbXBsKAorICAgICAgc2FtcGxlX3RpbWUsIHN0ZDo6YmluZCgmVmlkZW9EZWNvZGVyOjpEZWxldGVWaWRlb0ZyYW1lLCB0aGlzLCBfMSkpOworfQorCit2b2lkIFZpZGVvRGVjb2Rlcjo6RGVsZXRlVmlkZW9GcmFtZShWaWRlb0ZyYW1lKiB2aWRlb19mcmFtZSkgeworICBTY29wZWRMb2NrIGxvY2sodGhyZWFkX2xvY2tfKTsKKyAgZm9yIChhdXRvIGl0ZXIgPSB0aHJlYWRfb3V0cHV0c18uYmVnaW4oKTsgaXRlciAhPSB0aHJlYWRfb3V0cHV0c18uZW5kKCk7CisgICAgICAgKytpdGVyKSB7CisgICAgaWYgKGl0ZXItPnRpbWUgPT0gdmlkZW9fZnJhbWUtPnRpbWVzdGFtcCgpKSB7CisgICAgICB0aHJlYWRfb3V0cHV0c18uZXJhc2UoaXRlcik7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKwordm9pZCBWaWRlb0RlY29kZXI6OkRlY29kZXJUaHJlYWRSdW4oKSB7CisgIHN0ZDo6bGlzdDxzdGQ6OnVuaXF1ZV9wdHI8RXZlbnQ+ID4gcHJpbWluZ19ldmVudHM7CisgIHN0ZDo6dW5pcXVlX3B0cjxFdmVudD4gZXZlbnQ7CisgIGJvb2wgaXNfZW5kX29mX3N0cmVhbSA9IGZhbHNlOworCisgIHdoaWxlICghZGVjb2Rlcl90aHJlYWRfc3RvcF9yZXF1ZXN0ZWRfKSB7CisgICAgaW50IG91dHB1dHNfdG9fcHJvY2VzcyA9IDE7CisgICAgYm9vbCB3cm90ZV9pbnB1dCA9IGZhbHNlOworICAgIGJvb2wgcmVhZF9vdXRwdXQgPSBmYWxzZTsKKworICAgIC8vIFByb2Nlc3MgYSBuZXcgZXZlbnQgb3IgcmUtdHJ5IHRoZSBwcmV2aW91cyBldmVudC4KKyAgICBpZiAoZXZlbnQgPT0gbnVsbHB0cikgeworICAgICAgU2NvcGVkTG9jayBsb2NrKHRocmVhZF9sb2NrXyk7CisgICAgICBpZiAoIXRocmVhZF9ldmVudHNfLmVtcHR5KCkpIHsKKyAgICAgICAgZXZlbnQuc3dhcCh0aHJlYWRfZXZlbnRzXy5mcm9udCgpKTsKKyAgICAgICAgdGhyZWFkX2V2ZW50c18ucG9wX2Zyb250KCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGV2ZW50ID09IG51bGxwdHIpIHsKKyAgICAgIFNiVGhyZWFkU2xlZXAoa1NiVGltZU1pbGxpc2Vjb25kKTsKKyAgICB9IGVsc2UgeworICAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgeworICAgICAgICBjYXNlIEV2ZW50OjprV3JpdGVJbnB1dEJ1ZmZlcjoKKyAgICAgICAgICBTQl9EQ0hFQ0soZXZlbnQtPmlucHV0X2J1ZmZlciAhPSBudWxscHRyKTsKKyAgICAgICAgICBpZiAoZGVjb2Rlcl8tPlRyeVdyaXRlSW5wdXRCdWZmZXIoZXZlbnQtPmlucHV0X2J1ZmZlciwgMCkpIHsKKyAgICAgICAgICAgIGlmIChwcmltaW5nX291dHB1dF9jb3VudF8gPiAwKSB7CisgICAgICAgICAgICAgIC8vIFNhdmUgdGhpcyBldmVudCBmb3IgdGhlIGFjdHVhbCBwbGF5YmFjay4KKyAgICAgICAgICAgICAgcHJpbWluZ19ldmVudHMuZW1wbGFjZV9iYWNrKGV2ZW50LnJlbGVhc2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgZXZlbnQgd2FzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQuIERpc2NhcmQgaXQuCisgICAgICAgICAgICBldmVudC5yZXNldCgpOworICAgICAgICAgICAgd3JvdGVfaW5wdXQgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgZGVjb2RlciBtdXN0IGJlIGZ1bGwuIFJlLXRyeSB0aGUgZXZlbnQgb24gdGhlIG5leHQKKyAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi4gQWRkaXRpb25hbGx5LCB0cnkgcmVhZGluZyBhbiBleHRyYSBvdXRwdXQgZnJhbWUgdG8KKyAgICAgICAgICAgIC8vIHN0YXJ0IGRyYWluaW5nIHRoZSBkZWNvZGVyLgorICAgICAgICAgICAgKytvdXRwdXRzX3RvX3Byb2Nlc3M7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV2ZW50OjprV3JpdGVFbmRPZlN0cmVhbToKKyAgICAgICAgICBpZiAocHJpbWluZ19vdXRwdXRfY291bnRfID4gMCkgeworICAgICAgICAgICAgLy8gRmluaXNoIHByaW1pbmcgd2hlbiBlb3MgaXMgZW5jb3VudGVyZWQuCisgICAgICAgICAgICBwcmltaW5nX291dHB1dF9jb3VudF8gPSAwOworICAgICAgICAgICAgdGhyZWFkX2xvY2tfLkFjcXVpcmUoKTsKKyAgICAgICAgICAgIHdoaWxlICghcHJpbWluZ19ldmVudHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICB0aHJlYWRfZXZlbnRzXy5lbXBsYWNlX2Zyb250KHByaW1pbmdfZXZlbnRzLmJhY2soKS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICBwcmltaW5nX2V2ZW50cy5wb3BfYmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQWxzbyBhcHBlbmQgdGhlIGVvcyBldmVudC4KKyAgICAgICAgICAgIHRocmVhZF9ldmVudHNfLmVtcGxhY2VfYmFjayhldmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgdGhyZWFkX2xvY2tfLlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRlY29kZXJfLT5SZXNldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICAgIGV2ZW50LnJlc2V0KCk7CisgICAgICAgICAgZGVjb2Rlcl8tPkRyYWluKCk7CisgICAgICAgICAgaXNfZW5kX29mX3N0cmVhbSA9IHRydWU7CisgICAgICAgICAgd3JvdGVfaW5wdXQgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIC8vIFByb2Nlc3Mgb3V0cHV0IGZyYW1lKHMpLgorICAgIGZvciAoaW50IG91dHB1dHMgPSAwOyBvdXRwdXRzIDwgb3V0cHV0c190b19wcm9jZXNzOyArK291dHB1dHMpIHsKKyAgICAgIC8vIE5PVEU6IElNRlRyYW5zZm9ybTo6UHJvY2Vzc091dHB1dCAoY2FsbGVkIGJ5IGRlY29kZXJfLT5Qcm9jZXNzQW5kUmVhZCkKKyAgICAgIC8vIG1heSBzdGFsbCBpZiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBJTUZTYW1wbGVzIHdvdWxkIGV4Y2VlZCB0aGUgdmFsdWUgb2YKKyAgICAgIC8vIE1GX1NBX01JTklNVU1fT1VUUFVUX1NBTVBMRV9DT1VOVC4KKyAgICAgIHRocmVhZF9sb2NrXy5BY3F1aXJlKCk7CisgICAgICBib29sIGlucHV0X2Z1bGwgPSB0aHJlYWRfZXZlbnRzXy5zaXplKCkgPj0ga01heElucHV0U2FtcGxlczsKKyAgICAgIGJvb2wgb3V0cHV0X2Z1bGwgPSB0aHJlYWRfb3V0cHV0c18uc2l6ZSgpID49IGtNYXhPdXRwdXRTYW1wbGVzOworICAgICAgdGhyZWFkX2xvY2tfLlJlbGVhc2UoKTsKKworICAgICAgU3RhdHVzIHN0YXR1cyA9IGlucHV0X2Z1bGwgPyBrQnVmZmVyRnVsbCA6IGtOZWVkTW9yZUlucHV0OworICAgICAgZGVjb2Rlcl9zdGF0dXNfY2JfKHN0YXR1cywgbnVsbHB0cik7CisKKyAgICAgIGlmIChvdXRwdXRfZnVsbCkgeworICAgICAgICAvLyBXYWl0IGZvciB0aGUgYWN0aXZlIHNhbXBsZXMgdG8gYmUgY29uc3VtZWQgYmVmb3JlIHBvbGxpbmcgZm9yIG1vcmUuCisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBDb21QdHI8SU1GU2FtcGxlPiBzYW1wbGU7CisgICAgICBDb21QdHI8SU1GTWVkaWFUeXBlPiBtZWRpYV90eXBlOworICAgICAgZGVjb2Rlcl8tPlByb2Nlc3NBbmRSZWFkKCZzYW1wbGUsICZtZWRpYV90eXBlKTsKKyAgICAgIGlmIChtZWRpYV90eXBlKSB7CisgICAgICAgIFVwZGF0ZVZpZGVvQXJlYShtZWRpYV90eXBlKTsKKyAgICAgIH0KKyAgICAgIGlmIChzYW1wbGUpIHsKKyAgICAgICAgaWYgKHByaW1pbmdfb3V0cHV0X2NvdW50XyA+IDApIHsKKyAgICAgICAgICAvLyBJZ25vcmUgdGhlIG91dHB1dCBzYW1wbGVzIHdoaWxlIHByaW1pbmcgdGhlIGRlY29kZXIuCisgICAgICAgICAgaWYgKC0tcHJpbWluZ19vdXRwdXRfY291bnRfID09IDApIHsKKyAgICAgICAgICAgIC8vIFJlcGxheSBhbGwgdGhlIHByaW1pbmcgZXZlbnRzIG9uY2UgcHJpbWluZyBpcyBmaW5pc2hlZC4KKyAgICAgICAgICAgIGlmIChldmVudCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICAgIHByaW1pbmdfZXZlbnRzLmVtcGxhY2VfYmFjayhldmVudC5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkX2xvY2tfLkFjcXVpcmUoKTsKKyAgICAgICAgICAgIHdoaWxlICghcHJpbWluZ19ldmVudHMuZW1wdHkoKSkgeworICAgICAgICAgICAgICB0aHJlYWRfZXZlbnRzXy5lbXBsYWNlX2Zyb250KHByaW1pbmdfZXZlbnRzLmJhY2soKS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICBwcmltaW5nX2V2ZW50cy5wb3BfYmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyZWFkX2xvY2tfLlJlbGVhc2UoKTsKKyAgICAgICAgICAgIGRlY29kZXJfLT5SZXNldCgpOworICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkZWNvZGVyX3N0YXR1c19jYl8oc3RhdHVzLCBDcmVhdGVWaWRlb0ZyYW1lKHNhbXBsZSkpOworICAgICAgICB9CisgICAgICAgIHJlYWRfb3V0cHV0ID0gdHJ1ZTsKKyAgICAgIH0gZWxzZSBpZiAoaXNfZW5kX29mX3N0cmVhbSkgeworICAgICAgICBkZWNvZGVyX3N0YXR1c19jYl8oa0J1ZmZlckZ1bGwsIFZpZGVvRnJhbWU6OkNyZWF0ZUVPU0ZyYW1lKCkpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCF3cm90ZV9pbnB1dCAmJiAhcmVhZF9vdXRwdXQpIHsKKyAgICAgIC8vIFRocm90dGxlIGRlY29kZSBsb29wIHNpbmNlIG5vIEkvTyB3YXMgcG9zc2libGUuCisgICAgICBTYlRocmVhZFNsZWVwKGtTYlRpbWVNaWxsaXNlY29uZCk7CisgICAgfQorICB9Cit9CisKKy8vIHN0YXRpYwordm9pZCogVmlkZW9EZWNvZGVyOjpEZWNvZGVyVGhyZWFkRW50cnkodm9pZCogY29udGV4dCkgeworICBTQl9EQ0hFQ0soY29udGV4dCk7CisgIFZpZGVvRGVjb2RlciogZGVjb2RlciA9IHN0YXRpY19jYXN0PFZpZGVvRGVjb2Rlcio+KGNvbnRleHQpOworICBkZWNvZGVyLT5EZWNvZGVyVGhyZWFkUnVuKCk7CisgIGRlY29kZXItPmRlY29kZXJfdGhyZWFkX3N0b3BwZWRfID0gdHJ1ZTsKKyAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi92aWRlb19kZWNvZGVyLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3ZpZGVvX2RlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg2OTYzCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi92aWRlb19kZWNvZGVyLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1ZJREVPX0RFQ09ERVJfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9WSURFT19ERUNPREVSX0hfCisKKyNpbmNsdWRlIDxEM2QxMV8xLmg+CisjaW5jbHVkZSA8d3JsL2NsaWVudC5oPgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL211dGV4LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9yZWZfY291bnRlZC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc2NvcGVkX3B0ci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2RlY29kZV90YXJnZXQuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyL3ZpZGVvX2RlY29kZXJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjcnlwdGluZ19kZWNvZGVyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZC5oIgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworY2xhc3MgVmlkZW9EZWNvZGVyCisgICAgOiBwdWJsaWMgOjpzdGFyYm9hcmQ6OnNoYXJlZDo6c3RhcmJvYXJkOjpwbGF5ZXI6OmZpbHRlcjo6VmlkZW9EZWNvZGVyIHsKKyBwdWJsaWM6CisgIFZpZGVvRGVjb2RlcihTYk1lZGlhVmlkZW9Db2RlYyB2aWRlb19jb2RlYywKKyAgICAgICAgICAgICAgIFNiUGxheWVyT3V0cHV0TW9kZSBvdXRwdXRfbW9kZSwKKyAgICAgICAgICAgICAgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIGdyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIsCisgICAgICAgICAgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtLAorICAgICAgICAgICAgICAgYm9vbCBpc19oZHJfc3VwcG9ydGVkID0gZmFsc2UpOworICB+VmlkZW9EZWNvZGVyKCkgb3ZlcnJpZGU7CisKKyAgLy8gUXVlcmllcyBmb3Igc3VwcG9ydCB3aXRob3V0IGNyZWF0aW5nIHRoZSB2cDkgZGVjb2Rlci4gVGhlIGZ1bmN0aW9uIGNhY2hlcworICAvLyB0aGUgcmVzdWx0IGZvciB0aGUgZmlyc3QgY2FsbC4gIE5vdGUgdGhhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uCisgIC8vIGlzbid0IHRocmVhZCBzYWZlIGFuZCBpcyBzdXBwb3NlZCB0byBiZSBjYWxsZWQgb24gc3RhcnR1cC4KKyAgc3RhdGljIGJvb2wgSXNIYXJkd2FyZVZwOURlY29kZXJTdXBwb3J0ZWQoYm9vbCBpc19oZHJfcmVxdWlyZWQgPSBmYWxzZSk7CisKKyAgYm9vbCBJc0hkclN1cHBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIGlzX2hkcl9zdXBwb3J0ZWRfOyB9CisKKyAgLy8gSW1wbGVtZW50IFZpZGVvRGVjb2RlciBpbnRlcmZhY2UuCisgIHZvaWQgSW5pdGlhbGl6ZShjb25zdCBEZWNvZGVyU3RhdHVzQ0ImIGRlY29kZXJfc3RhdHVzX2NiLAorICAgICAgICAgICAgICAgICAgY29uc3QgRXJyb3JDQiYgZXJyb3JfY2IpIG92ZXJyaWRlOworICBzaXplX3QgR2V0UHJlcm9sbEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgU2JUaW1lIEdldFByZXJvbGxUaW1lb3V0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4ga1NiVGltZU1heDsgfQorICBzaXplX3QgR2V0TWF4TnVtYmVyT2ZDYWNoZWRGcmFtZXMoKSBjb25zdCBvdmVycmlkZTsKKworICB2b2lkIFdyaXRlSW5wdXRCdWZmZXIoCisgICAgICBjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgaW5wdXRfYnVmZmVyKSBvdmVycmlkZTsKKyAgdm9pZCBXcml0ZUVuZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CisgIHZvaWQgUmVzZXQoKSBvdmVycmlkZTsKKyAgU2JEZWNvZGVUYXJnZXQgR2V0Q3VycmVudERlY29kZVRhcmdldCgpIG92ZXJyaWRlOworCisgcHJpdmF0ZToKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHVzaW5nIENvbVB0ciA9IE1pY3Jvc29mdDo6V1JMOjpDb21QdHI8VD47CisKKyAgc3RydWN0IEV2ZW50IHsKKyAgICBlbnVtIFR5cGUgeworICAgICAga1dyaXRlSW5wdXRCdWZmZXIsCisgICAgICBrV3JpdGVFbmRPZlN0cmVhbSwKKyAgICB9OworICAgIFR5cGUgdHlwZTsKKyAgICBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiBpbnB1dF9idWZmZXI7CisgIH07CisKKyAgc3RydWN0IE91dHB1dCB7CisgICAgT3V0cHV0KFNiVGltZSB0aW1lLAorICAgICAgICAgICBjb25zdCBSRUNUJiB2aWRlb19hcmVhLAorICAgICAgICAgICBjb25zdCBDb21QdHI8SU1GU2FtcGxlPiYgdmlkZW9fc2FtcGxlKQorICAgICAgICA6IHRpbWUodGltZSksIHZpZGVvX2FyZWEodmlkZW9fYXJlYSksIHZpZGVvX3NhbXBsZSh2aWRlb19zYW1wbGUpIHt9CisgICAgU2JUaW1lIHRpbWU7CisgICAgUkVDVCB2aWRlb19hcmVhOworICAgIENvbVB0cjxJTUZTYW1wbGU+IHZpZGVvX3NhbXBsZTsKKyAgfTsKKworICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYgSERSIHZpZGVvIGlzIHBsYXllZCwgYnV0IEhEUiBzdXBwb3J0IGlzCisgIC8vIGxvc3QuIE90aGVyd2lzZSBpdCByZXR1cm5zIHRydWUuIEZvciBpbmhlcml0ZWQgY2xhc3MgaXQgYWxzbyB1cGRhdGVzIEhETUkKKyAgLy8gY29sb3IgbWV0YWRhdGEgYW5kIHNldHMgSERSIG1vZGUgZm9yIEFuZ2xlLCBpZiB0aGUgdmlkZW8gc3RyZWFtIGlzIEhEUgorICAvLyBzdHJlYW0uCisgIHZpcnR1YWwgYm9vbCBUcnlVcGRhdGVPdXRwdXRGb3JIZHJWaWRlbyhjb25zdCBTYk1lZGlhVmlkZW9TYW1wbGVJbmZvJikgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgdm9pZCBJbml0aWFsaXplQ29kZWMoKTsKKyAgdm9pZCBTaHV0ZG93bkNvZGVjKCk7CisgIHN0YXRpYyB2b2lkIFJlbGVhc2VEZWNvZGVUYXJnZXRzKHZvaWQqIGNvbnRleHQpOworCisgIHZvaWQgVXBkYXRlVmlkZW9BcmVhKGNvbnN0IENvbVB0cjxJTUZNZWRpYVR5cGU+JiBtZWRpYSk7CisgIHNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZT4gQ3JlYXRlVmlkZW9GcmFtZShjb25zdCBDb21QdHI8SU1GU2FtcGxlPiYgc2FtcGxlKTsKKyAgdm9pZCBEZWxldGVWaWRlb0ZyYW1lKFZpZGVvRnJhbWUqIHZpZGVvX2ZyYW1lKTsKKyAgU2JEZWNvZGVUYXJnZXQgQ3JlYXRlRGVjb2RlVGFyZ2V0KCk7CisKKyAgdm9pZCBFbnN1cmVEZWNvZGVyVGhyZWFkUnVubmluZygpOworICB2b2lkIFN0b3BEZWNvZGVyVGhyZWFkKCk7CisgIHZvaWQgRGVjb2RlclRocmVhZFJ1bigpOworICBzdGF0aWMgdm9pZCogRGVjb2RlclRocmVhZEVudHJ5KHZvaWQqIGNvbnRleHQpOworCisgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87CisKKyAgLy8gVGhlc2UgdmFyaWFibGVzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW5zaWRlIGN0b3Igb3IgSW5pdGlhbGl6ZSgpIGFuZCB3aWxsCisgIC8vIG5vdCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZSB0aW1lIG9mIHRoaXMgY2xhc3MuCisgIGNvbnN0IFNiTWVkaWFWaWRlb0NvZGVjIHZpZGVvX2NvZGVjXzsKKyAgRGVjb2RlclN0YXR1c0NCIGRlY29kZXJfc3RhdHVzX2NiXzsKKyAgRXJyb3JDQiBlcnJvcl9jYl87CisgIFNiRGVjb2RlVGFyZ2V0R3JhcGhpY3NDb250ZXh0UHJvdmlkZXIqIGdyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXJfOworICBTYkRybVN5c3RlbSBjb25zdCBkcm1fc3lzdGVtXzsKKworICAvLyBUaGVzZSBhcmUgcGxhdGZvcm0tc3BlY2lmaWMgb2JqZWN0cyByZXF1aXJlZCB0byBjcmVhdGUgYW5kIHVzZSBhIGNvZGVjLgorICBDb21QdHI8SUQzRDExRGV2aWNlPiBkM2RfZGV2aWNlXzsKKyAgQ29tUHRyPElNRkRYR0lEZXZpY2VNYW5hZ2VyPiBkZXZpY2VfbWFuYWdlcl87CisgIENvbVB0cjxJRDNEMTFWaWRlb0RldmljZTE+IHZpZGVvX2RldmljZV87CisgIENvbVB0cjxJRDNEMTFWaWRlb0NvbnRleHQ+IHZpZGVvX2NvbnRleHRfOworICBDb21QdHI8SUQzRDExVmlkZW9Qcm9jZXNzb3JFbnVtZXJhdG9yPiB2aWRlb19lbnVtZXJhdG9yXzsKKyAgQ29tUHRyPElEM0QxMVZpZGVvUHJvY2Vzc29yPiB2aWRlb19wcm9jZXNzb3JfOworCisgIHNjb3BlZF9wdHI8RGVjcnlwdGluZ0RlY29kZXI+IGRlY29kZXJfOworICBSRUNUIHZpZGVvX2FyZWFfOworCisgIFNiVGhyZWFkIGRlY29kZXJfdGhyZWFkXyA9IGtTYlRocmVhZEludmFsaWQ7CisgIHZvbGF0aWxlIGJvb2wgZGVjb2Rlcl90aHJlYWRfc3RvcF9yZXF1ZXN0ZWRfID0gZmFsc2U7CisgIGJvb2wgZGVjb2Rlcl90aHJlYWRfc3RvcHBlZF8gPSBmYWxzZTsKKyAgTXV0ZXggdGhyZWFkX2xvY2tfOworICBzdGQ6Omxpc3Q8c3RkOjp1bmlxdWVfcHRyPEV2ZW50PiA+IHRocmVhZF9ldmVudHNfOworCisgIC8vIFRoaXMgc3RydWN0dXJlIHNoYWRvd3MgdGhlIGxpc3Qgb2Ygb3V0c3RhbmRpbmcgZnJhbWVzIGhlbGQgYnkgdGhlIGhvc3QuCisgIC8vIFdoZW4gYSBuZXcgb3V0cHV0IGlzIGFkZGVkIHRvIHRoaXMgc3RydWN0dXJlLCB0aGUgaG9zdCBzaG91bGQgYmUgbm90aWZpZWQKKyAgLy8gb2YgYSBuZXcgVmlkZW9GcmFtZS4gV2hlbiB0aGUgaG9zdCBkZWxldGVzIHRoZSBWaWRlb0ZyYW1lLCB0aGUgZGVsZXRlCisgIC8vIGNhbGxiYWNrIGlzIHVzZWQgdG8gdXBkYXRlIHRoaXMgc3RydWN0dXJlLiBUaGUgVmlkZW9EZWNvZGVyIG1heSBuZWVkIHRvCisgIC8vIGRlbGV0ZSBvdXRwdXRzIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBob3N0LiBJbiBzdWNoIGEgc2l0dWF0aW9uLCB0aGUgaG9zdCdzCisgIC8vIFZpZGVvRnJhbWVzIHdpbGwgYmUgaW52YWxpZCBpZiB0aGV5IHN0aWxsIHJlcXVpcmUgdGhlIElNRlNhbXBsZTsgaXQncworICAvLyBwb3NzaWJsZSB0aGF0IHRoZSBWaWRlb0ZyYW1lIHdhcyBjb252ZXJ0ZWQgdG8gYSB0ZXh0dXJlIGFscmVhZHksIHNvIGl0CisgIC8vIHdpbGwgY29udGludWUgdG8gYmUgdmFsaWQgc2luY2UgdGhlIElNRlNhbXBsZSBpcyBubyBsb25nZXIgbmVlZGVkLgorICBNdXRleCBvdXRwdXRzX3Jlc2V0X2xvY2tfOworICBzdGQ6Omxpc3Q8T3V0cHV0PiB0aHJlYWRfb3V0cHV0c187CisKKyAgLy8gVG8gd29ya2Fyb3VuZCB0aGUgc3RhcnR1cCBoaXRjaCBmb3IgVlA5LCBleGVyY2lzZSB0aGUgZGVjb2RlciBmb3IgYQorICAvLyBjZXJ0YWluIG51bWJlciBvZiBmcmFtZXMgd2hpbGUgcHJlcm9sbGluZyB0aGUgaW5pdGlhbCBwbGF5YmFjay4KKyAgaW50IHByaW1pbmdfb3V0cHV0X2NvdW50XzsKKworICBTYkRlY29kZVRhcmdldCBjdXJyZW50X2RlY29kZV90YXJnZXRfID0ga1NiRGVjb2RlVGFyZ2V0SW52YWxpZDsKKyAgc3RkOjpsaXN0PFNiRGVjb2RlVGFyZ2V0PiBwcmV2X2RlY29kZV90YXJnZXRzXzsKKworICBib29sIGlzX2hkcl9zdXBwb3J0ZWRfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9WSURFT19ERUNPREVSX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlMDk2MAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2NoYXJfdXRpbHMuaApAQCAtMCwwICsxLDU4IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9XQ0hBUl9VVElMU19IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1dDSEFSX1VUSUxTX0hfCisKKyNpbmNsdWRlIDxjb2RlY3Z0PgorI2luY2x1ZGUgPGN3Y2hhcj4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2Ugc3RhcmJvYXJkIHsKK25hbWVzcGFjZSBzaGFyZWQgeworbmFtZXNwYWNlIHdpbjMyIHsKKworaW5saW5lIHN0ZDo6c3RyaW5nIHdjaGFyX3RUb1VURjgoY29uc3Qgd2NoYXJfdCogY29uc3Qgc3RyKSB7CisgIHN0ZDo6d3N0cmluZ19jb252ZXJ0PHN0ZDo6Y29kZWN2dF91dGY4PHdjaGFyX3Q+LCB3Y2hhcl90PiBjb252ZXJ0ZXI7CisgIHJldHVybiBjb252ZXJ0ZXIudG9fYnl0ZXMoc3RyKTsKK30KKworaW5saW5lIHN0ZDo6c3RyaW5nIHdjaGFyX3RUb1VURjgoY29uc3Qgd2NoYXJfdCogY29uc3Qgc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaXplX3Qgc2l6ZSkgeworICBzdGQ6OndzdHJpbmdfY29udmVydDxzdGQ6OmNvZGVjdnRfdXRmODx3Y2hhcl90Piwgd2NoYXJfdD4gY29udmVydGVyOworICByZXR1cm4gY29udmVydGVyLnRvX2J5dGVzKHN0ciwgc3RyICsgc2l6ZSk7Cit9CisKK2lubGluZSBzdGQ6OndzdHJpbmcgQ1N0cmluZ1RvV1N0cmluZyhjb25zdCBjaGFyKiBzdHIpIHsKKyAgc3RkOjp3c3RyaW5nX2NvbnZlcnQ8c3RkOjpjb2RlY3Z0X3V0Zjg8d2NoYXJfdD4sIHdjaGFyX3Q+IGNvbnZlcnRlcjsKKyAgcmV0dXJuIGNvbnZlcnRlci5mcm9tX2J5dGVzKHN0cik7Cit9CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzX3dpbnJ0KQoraW5saW5lIHN0ZDo6c3RyaW5nIHBsYXRmb3JtU3RyaW5nVG9TdHJpbmcoUGxhdGZvcm06OlN0cmluZ14gdG9fY29udmVydCkgeworICBzdGQ6OndzdHJpbmcgd3ModG9fY29udmVydC0+QmVnaW4oKSwgdG9fY29udmVydC0+RW5kKCkpOworICByZXR1cm4gd2NoYXJfdFRvVVRGOCh3cy5kYXRhKCksIHdzLnNpemUoKSk7Cit9CisKK2lubGluZSBQbGF0Zm9ybTo6U3RyaW5nXiBzdHJpbmdUb1BsYXRmb3JtU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiB0b19jb252ZXJ0KSB7CisgIHJldHVybiByZWYgbmV3IFBsYXRmb3JtOjpTdHJpbmcoQ1N0cmluZ1RvV1N0cmluZyh0b19jb252ZXJ0LmNfc3RyKCkpLmNfc3RyKCkpOworfQorI2VuZGlmCisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfV0NIQVJfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luMzJfYXVkaW9fZGVjb2Rlci5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luMzJfYXVkaW9fZGVjb2Rlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQ5Mzc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW4zMl9hdWRpb19kZWNvZGVyLmNjCkBAIC0wLDAgKzEsMjAyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbjMyX2F1ZGlvX2RlY29kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KKworI2luY2x1ZGUgInN0YXJib2FyZC9hdG9taWMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC90aHJlYWRfY2hlY2tlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXRvbWljX3F1ZXVlLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb190cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY3J5cHRpbmdfZGVjb2Rlci5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvZXJyb3JfdXRpbHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKK3VzaW5nIE1pY3Jvc29mdDo6V1JMOjpDb21QdHI7Cit1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjpzdGFyYm9hcmQ6OlRocmVhZENoZWNrZXI7Cit1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q3JlYXRlQXVkaW9UcmFuc2Zvcm07CisKK2NvbnN0IHNpemVfdCBrQWFjU2FtcGxlc1BlckZyYW1lID0gMTAyNDsKKy8vIFdlIGFyZSB1c2luZyBmbG9hdCBzYW1wbGVzIG9uIFhiMS4KK2NvbnN0IHNpemVfdCBrQnl0ZXNQZXJTYW1wbGUgPSBzaXplb2YoZmxvYXQpOworCituYW1lc3BhY2UgeworCitjbGFzcyBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVySW1wbCA6IHB1YmxpYyBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyIHsKKyBwdWJsaWM6CisgIEFic3RyYWN0V2luMzJBdWRpb0RlY29kZXJJbXBsKFNiTWVkaWFBdWRpb0NvZGVjIGNvZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYk1lZGlhQXVkaW9GcmFtZVN0b3JhZ2VUeXBlIGF1ZGlvX2ZyYW1lX2ZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZSBzYW1wbGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pCisgICAgICA6IHRocmVhZF9jaGVja2VyXyhUaHJlYWRDaGVja2VyOjprU2V0VGhyZWFkSWRPbkZpcnN0Q2hlY2spLAorICAgICAgICBjb2RlY18oY29kZWMpLAorICAgICAgICBhdWRpb19mcmFtZV9mbXRfKGF1ZGlvX2ZyYW1lX2ZtdCksCisgICAgICAgIHNhbXBsZV90eXBlXyhzYW1wbGVfdHlwZSksCisgICAgICAgIG51bWJlcl9vZl9jaGFubmVsc18oYXVkaW9fc2FtcGxlX2luZm8ubnVtYmVyX29mX2NoYW5uZWxzKSwKKyAgICAgICAgaGVhYWNfZGV0ZWN0ZWRfKGZhbHNlKSwKKyAgICAgICAgc2FtcGxlc19wZXJfc2Vjb25kXygKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYXVkaW9fc2FtcGxlX2luZm8uc2FtcGxlc19wZXJfc2Vjb25kKSkgeworICAgIHNjb3BlZF9wdHI8TWVkaWFUcmFuc2Zvcm0+IGF1ZGlvX2RlY29kZXIgPQorICAgICAgICBDcmVhdGVBdWRpb1RyYW5zZm9ybShhdWRpb19zYW1wbGVfaW5mbywgY29kZWNfKTsKKyAgICBpbXBsXy5yZXNldCgKKyAgICAgICAgbmV3IERlY3J5cHRpbmdEZWNvZGVyKCJhdWRpbyIsIGF1ZGlvX2RlY29kZXIuUGFzcygpLCBkcm1fc3lzdGVtKSk7CisgIH0KKworICB2b2lkIENvbnN1bWUoQ29tUHRyPElNRlNhbXBsZT4gc2FtcGxlKSB7CisgICAgRFdPUkQgYnVmZl9jb3VudCA9IDA7CisgICAgSFJFU1VMVCBociA9IHNhbXBsZS0+R2V0QnVmZmVyQ291bnQoJmJ1ZmZfY291bnQpOworICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICBTQl9EQ0hFQ0soYnVmZl9jb3VudCA9PSAxKTsKKworICAgIENvbVB0cjxJTUZNZWRpYUJ1ZmZlcj4gbWVkaWFfYnVmZmVyOworICAgIGhyID0gc2FtcGxlLT5HZXRCdWZmZXJCeUluZGV4KDAsICZtZWRpYV9idWZmZXIpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9OR0xPTkcgd2luMzJfdGltZXN0YW1wID0gMDsKKyAgICBociA9IHNhbXBsZS0+R2V0U2FtcGxlVGltZSgmd2luMzJfdGltZXN0YW1wKTsKKyAgICBDaGVja1Jlc3VsdChocik7CisKKyAgICBCWVRFKiBidWZmZXI7CisgICAgRFdPUkQgbGVuZ3RoOworICAgIGhyID0gbWVkaWFfYnVmZmVyLT5Mb2NrKCZidWZmZXIsIE5VTEwsICZsZW5ndGgpOworICAgIENoZWNrUmVzdWx0KGhyKTsKKyAgICBTQl9EQ0hFQ0sobGVuZ3RoKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpOworICAgIGNvbnN0IHNpemVfdCBkYXRhX3NpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICBjb25zdCBzaXplX3QgZXhwZWN0X3NpemVfaW5fYnl0ZXMgPQorICAgICAgICBudW1iZXJfb2ZfY2hhbm5lbHNfICoga0FhY1NhbXBsZXNQZXJGcmFtZSAqIGtCeXRlc1BlclNhbXBsZTsKKyAgICBpZiAoZGF0YV9zaXplIC8gZXhwZWN0X3NpemVfaW5fYnl0ZXMgPT0gMikgeworICAgICAgaGVhYWNfZGV0ZWN0ZWRfLnN0b3JlKHRydWUpOworICAgIH0KKworICAgIGNvbnN0IHNpemVfdCBkZWNvZGVkX2RhdGFfc2l6ZSA9IHN0ZDo6bWF4KGV4cGVjdF9zaXplX2luX2J5dGVzLCBkYXRhX3NpemUpOworCisgICAgRGVjb2RlZEF1ZGlvUHRyIGRhdGFfcHRyKAorICAgICAgICBuZXcgRGVjb2RlZEF1ZGlvKG51bWJlcl9vZl9jaGFubmVsc18sIHNhbXBsZV90eXBlXywgYXVkaW9fZnJhbWVfZm10XywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0VG9TYlRpbWUod2luMzJfdGltZXN0YW1wKSwgZGVjb2RlZF9kYXRhX3NpemUpKTsKKworICAgIHN0ZDo6Y29weShkYXRhLCBkYXRhICsgZGF0YV9zaXplLCBkYXRhX3B0ci0+YnVmZmVyKCkpOworICAgIHN0ZDo6bWVtc2V0KGRhdGFfcHRyLT5idWZmZXIoKSArIGRhdGFfc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICBkZWNvZGVkX2RhdGFfc2l6ZSAtIGRhdGFfc2l6ZSk7CisKKyAgICBvdXRwdXRfcXVldWVfLnB1c2goZGF0YV9wdHIpOworICAgIG1lZGlhX2J1ZmZlci0+VW5sb2NrKCk7CisgIH0KKworICBib29sIFRyeVdyaXRlKGNvbnN0IHNjb3BlZF9yZWZwdHI8SW5wdXRCdWZmZXI+JiBidWZmKSBvdmVycmlkZSB7CisgICAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgLy8gVGhlIGluY29taW5nIGF1ZGlvIGlzIGluIEFEVFMgZm9ybWF0IHdoaWNoIGhhcyBhIDcgYnl0ZXMgaGVhZGVyLiAgQnV0CisgICAgLy8gdGhlIGF1ZGlvIGRlY29kZXIgaXMgY29uZmlndXJlZCB0byBhY2NlcHQgcmF3IEFBQy4gIFNvIHdlIGhhdmUgdG8gYWRqdXN0CisgICAgLy8gdGhlIGRhdGEsIHNpemUsIGFuZCBzdWJzYW1wbGUgbWFwcGluZyB0byBza2lwIHRoZSBBRFRTIGhlYWRlci4KKyAgICBjb25zdCBpbnQga0FEVFNIZWFkZXJTaXplID0gNzsKKyAgICBjb25zdCBib29sIHdyaXRlX29rID0gaW1wbF8tPlRyeVdyaXRlSW5wdXRCdWZmZXIoYnVmZiwga0FEVFNIZWFkZXJTaXplKTsKKyAgICByZXR1cm4gd3JpdGVfb2s7CisgIH0KKworICB2b2lkIFdyaXRlRW5kT2ZTdHJlYW0oKSBvdmVycmlkZSB7CisgICAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgaW1wbF8tPkRyYWluKCk7CisgICAgQ29tUHRyPElNRlNhbXBsZT4gc2FtcGxlOworICAgIENvbVB0cjxJTUZNZWRpYVR5cGU+IG1lZGlhX3R5cGU7CisgICAgd2hpbGUgKGltcGxfLT5Qcm9jZXNzQW5kUmVhZCgmc2FtcGxlLCAmbWVkaWFfdHlwZSkpIHsKKyAgICAgIGlmIChzYW1wbGUpIHsKKyAgICAgICAgQ29uc3VtZShzYW1wbGUpOworICAgICAgfQorICAgIH0KKyAgICBvdXRwdXRfcXVldWVfLnB1c2gobmV3IERlY29kZWRBdWRpbyk7CisgIH0KKworICBzY29wZWRfcmVmcHRyPERlY29kZWRBdWRpbz4gUHJvY2Vzc0FuZFJlYWQoKSBvdmVycmlkZSB7CisgICAgU0JfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOworCisgICAgQ29tUHRyPElNRlNhbXBsZT4gc2FtcGxlOworICAgIENvbVB0cjxJTUZNZWRpYVR5cGU+IG1lZGlhX3R5cGU7CisgICAgd2hpbGUgKGltcGxfLT5Qcm9jZXNzQW5kUmVhZCgmc2FtcGxlLCAmbWVkaWFfdHlwZSkpIHsKKyAgICAgIGlmIChzYW1wbGUpIHsKKyAgICAgICAgQ29uc3VtZShzYW1wbGUpOworICAgICAgfQorICAgIH0KKyAgICBpZiAob3V0cHV0X3F1ZXVlXy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2NvcGVkX3JlZnB0cjxEZWNvZGVkQXVkaW8+IG91dHB1dCA9IG91dHB1dF9xdWV1ZV8uZnJvbnQoKTsKKyAgICBvdXRwdXRfcXVldWVfLnBvcCgpOworICAgIHJldHVybiBvdXRwdXQ7CisgIH0KKworICB2b2lkIFJlc2V0KCkgb3ZlcnJpZGUgeworICAgIGltcGxfLT5SZXNldCgpOworICAgIHN0ZDo6cXVldWU8RGVjb2RlZEF1ZGlvUHRyPiBlbXB0eTsKKyAgICBvdXRwdXRfcXVldWVfLnN3YXAoZW1wdHkpOworICAgIHRocmVhZF9jaGVja2VyXy5EZXRhY2goKTsKKyAgfQorCisgIGludCBHZXRTYW1wbGVzUGVyU2Vjb25kKCkgY29uc3Qgb3ZlcnJpZGUgeworICAgIGlmIChoZWFhY19kZXRlY3RlZF8ubG9hZCgpKSB7CisgICAgICByZXR1cm4gc2FtcGxlc19wZXJfc2Vjb25kXyAqIDI7CisgICAgfQorICAgIHJldHVybiBzYW1wbGVzX3Blcl9zZWNvbmRfOworICB9CisKKyAgLy8gVGhlIG9iamVjdCBpcyBzaW5nbGUtdGhyZWFkZWQgYW5kIGlzIGRyaXZlbiBieSBhIGRlZGljYXRlZCB0aHJlYWQuCisgIC8vIEhvd2V2ZXIgdGhlIHRocmVhZCBtYXkgZ2V0cyBkZXN0cm95ZWQgYW5kIHJlLWNyZWF0ZWQgb3ZlciB0aGUgbGlmZSB0aW1lIG9mCisgIC8vIHRoaXMgb2JqZWN0LiAgV2UgZW5mb3JjZSB0aGF0IGNlcnRhaW4gbWVtYmVyIGZ1bmN0aW9ucyBjYW4gb25seSBjYWxsZWQKKyAgLy8gZnJvbSBvbmUgdGhyZWFkIHdoaWxlIHN0aWxsIGFsbG93cyB0aGlzIG9iamVjdCB0byBiZSBkcml2ZW4gYnkgZGlmZmVyZW50CisgIC8vIHRocmVhZHMgYnk6CisgIC8vIDEuIFRoZSB8dGhyZWFkX2NoZWNrZXJffCBpcyBpbml0aWFsbHkgY3JlYXRlZCB3aXRob3V0IGF0dGFjaGluZyB0byBhbnkKKyAgLy8gICAgdGhyZWFkLgorICAvLyAyLiBXaGVuIGEgdGhyZWFkIGlzIGRlc3Ryb3llZCwgUmVzZXQoKSB3aWxsIGJlIGNhbGxlZCB3aGljaCBpbiB0dXJuIGNhbGxzCisgIC8vICAgIERldGFjaCgpIG9uIHRoZSB8dGhyZWFkX2NoZWNrZXJffCB0byBhbGxvdyB0aGUgb2JqZWN0IHRvIGF0dGFjaCB0byBhCisgIC8vICAgIG5ldyB0aHJlYWQuCisgIDo6c3RhcmJvYXJkOjpzaGFyZWQ6OnN0YXJib2FyZDo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87CisgIGNvbnN0IFNiTWVkaWFBdWRpb0NvZGVjIGNvZGVjXzsKKyAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZSBzYW1wbGVfdHlwZV87CisgIGNvbnN0IFNiTWVkaWFBdWRpb0ZyYW1lU3RvcmFnZVR5cGUgYXVkaW9fZnJhbWVfZm10XzsKKyAgc2NvcGVkX3B0cjxEZWNyeXB0aW5nRGVjb2Rlcj4gaW1wbF87CisgIHN0ZDo6cXVldWU8RGVjb2RlZEF1ZGlvUHRyPiBvdXRwdXRfcXVldWVfOworICB1aW50MTZfdCBudW1iZXJfb2ZfY2hhbm5lbHNfOworICBhdG9taWNfYm9vbCBoZWFhY19kZXRlY3RlZF87CisgIGludCBzYW1wbGVzX3Blcl9zZWNvbmRfOworfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZS4KKworc2NvcGVkX3B0cjxBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyPiBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyOjpDcmVhdGUoCisgICAgU2JNZWRpYUF1ZGlvQ29kZWMgY29kZSwKKyAgICBTYk1lZGlhQXVkaW9GcmFtZVN0b3JhZ2VUeXBlIGF1ZGlvX2ZyYW1lX2ZtdCwKKyAgICBTYk1lZGlhQXVkaW9TYW1wbGVUeXBlIHNhbXBsZV90eXBlLAorICAgIGNvbnN0IFNiTWVkaWFBdWRpb1NhbXBsZUluZm8mIGF1ZGlvX3NhbXBsZV9pbmZvLAorICAgIFNiRHJtU3lzdGVtIGRybV9zeXN0ZW0pIHsKKyAgcmV0dXJuIHNjb3BlZF9wdHI8QWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2Rlcj4oCisgICAgICBuZXcgQWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2RlckltcGwoY29kZSwgYXVkaW9fZnJhbWVfZm10LCBzYW1wbGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19zYW1wbGVfaW5mbywgZHJtX3N5c3RlbSkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugd2luMzIKK30gIC8vIG5hbWVzcGFjZSBzaGFyZWQKK30gIC8vIG5hbWVzcGFjZSBzdGFyYm9hcmQKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luMzJfYXVkaW9fZGVjb2Rlci5oIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW4zMl9hdWRpb19kZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3NDMxMAotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luMzJfYXVkaW9fZGVjb2Rlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1dJTjMyX0FVRElPX0RFQ09ERVJfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9XSU4zMl9BVURJT19ERUNPREVSX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL3JlZl9jb3VudGVkLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zY29wZWRfcHRyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2RybS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZWRpYS5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9kZWNvZGVkX2F1ZGlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9jb21tb24uaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKKworbmFtZXNwYWNlIHN0YXJib2FyZCB7CituYW1lc3BhY2Ugc2hhcmVkIHsKK25hbWVzcGFjZSB3aW4zMiB7CisKKy8vIEF1ZGlvRGVjb2RlciBmb3IgV2luMzIuCitjbGFzcyBBYnN0cmFjdFdpbjMyQXVkaW9EZWNvZGVyIHsKKyBwdWJsaWM6CisgIHN0YXRpYyBzY29wZWRfcHRyPEFic3RyYWN0V2luMzJBdWRpb0RlY29kZXI+IENyZWF0ZSgKKyAgICAgIFNiTWVkaWFBdWRpb0NvZGVjIGNvZGVjLAorICAgICAgU2JNZWRpYUF1ZGlvRnJhbWVTdG9yYWdlVHlwZSBhdWRpb19mcmFtZV9mbXQsCisgICAgICBTYk1lZGlhQXVkaW9TYW1wbGVUeXBlIHNhbXBsZV90eXBlLAorICAgICAgY29uc3QgU2JNZWRpYUF1ZGlvU2FtcGxlSW5mbyYgYXVkaW9fc2FtcGxlX2luZm8sCisgICAgICBTYkRybVN5c3RlbSBkcm1fc3lzdGVtKTsKKyAgdmlydHVhbCB+QWJzdHJhY3RXaW4zMkF1ZGlvRGVjb2RlcigpIHt9CisKKyAgLy8gSU5QVVQ6CisgIC8vCisgIHZpcnR1YWwgYm9vbCBUcnlXcml0ZShjb25zdCBzY29wZWRfcmVmcHRyPElucHV0QnVmZmVyPiYgYnVmZikgPSAwOworICB2aXJ0dWFsIHZvaWQgV3JpdGVFbmRPZlN0cmVhbSgpID0gMDsKKyAgLy8gT1VUUFVUCisgIC8vCisgIHZpcnR1YWwgRGVjb2RlZEF1ZGlvUHRyIFByb2Nlc3NBbmRSZWFkKCkgPSAwOworICAvLyBSZXNldAorICB2aXJ0dWFsIHZvaWQgUmVzZXQoKSA9IDA7CisKKyAgLy8gRHluYW1pY2FsbHkgcXVlcnkgdGhlIGF1ZGlvIGZyZXF1ZW5jeSB0byBzdXBwb3J0IEhFLUFBQy4KKyAgdmlydHVhbCBpbnQgR2V0U2FtcGxlc1BlclNlY29uZCgpIGNvbnN0ID0gMDsKK307CisKK30gIC8vIG5hbWVzcGFjZSB3aW4zMgorfSAgLy8gbmFtZXNwYWNlIHNoYXJlZAorfSAgLy8gbmFtZXNwYWNlIHN0YXJib2FyZAorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfV0lOMzJfQVVESU9fREVDT0RFUl9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfY3JlYXRlLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfY3JlYXRlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzAwOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19jcmVhdGUuY2MKQEAgLTAsMCArMSwyMyBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hcHBsaWNhdGlvbl93aW4zMi5oIgorCit1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6QXBwbGljYXRpb25XaW4zMjsKKworU2JXaW5kb3cgU2JXaW5kb3dDcmVhdGUoY29uc3QgU2JXaW5kb3dPcHRpb25zKiBvcHRpb25zKSB7CisgIHJldHVybiBBcHBsaWNhdGlvbldpbjMyOjpHZXQoKS0+Q3JlYXRlV2luZG93Rm9yV2luMzIob3B0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19kZXN0cm95LmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZGVzdHJveS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGE4YzU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZGVzdHJveS5jYwpAQCAtMCwwICsxLDIyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FwcGxpY2F0aW9uX3dpbjMyLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgorCit1c2luZyA6OnN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6QXBwbGljYXRpb25XaW4zMjsKKworYm9vbCBTYldpbmRvd0Rlc3Ryb3koU2JXaW5kb3cgd2luZG93KSB7CisgIHJldHVybiBBcHBsaWNhdGlvbldpbjMyOjpHZXQoKS0+RGVzdHJveVdpbmRvdyh3aW5kb3cpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZ2V0X3BsYXRmb3JtX2hhbmRsZS5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2Y2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2dldF9wbGF0Zm9ybV9oYW5kbGUuY2MKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSA8RUdML2VnbC5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCisKK3ZvaWQqIFNiV2luZG93R2V0UGxhdGZvcm1IYW5kbGUoU2JXaW5kb3cgd2luZG93KSB7CisgIGlmICghU2JXaW5kb3dJc1ZhbGlkKHdpbmRvdykpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiByZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZVdpbmRvd1R5cGU+KHdpbmRvdy0+R2V0V2luZG93SGFuZGxlKCkpOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZ2V0X3NpemUuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19nZXRfc2l6ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2E1ODFiCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZ2V0X3NpemUuY2MKQEAgLTAsMCArMSwzMCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9sb2cuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKKworYm9vbCBTYldpbmRvd0dldFNpemUoU2JXaW5kb3cgd2luZG93LCBTYldpbmRvd1NpemUqIHNpemUpIHsKKyAgaWYgKCFTYldpbmRvd0lzVmFsaWQod2luZG93KSkgeworICAgIFNCX0xPRyhFUlJPUikgPDwgX19GVU5DVElPTl9fIDw8ICI6IEludmFsaWQgd2luZG93LiI7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc2l6ZS0+d2lkdGggPSB3aW5kb3ctPndpZHRoOworICBzaXplLT5oZWlnaHQgPSB3aW5kb3ctPmhlaWdodDsKKyAgLy8gVGhlIHZpZGVvIHJlc29sdXRpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGdyYXBoaWNzIHJlc29sdXRpb24uCisgIHNpemUtPnZpZGVvX3BpeGVsX3JhdGlvID0gMS4wZjsKKyAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5jYyBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2ludGVybmFsLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTM5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5jYwpAQCAtMCwwICsxLDMyIEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5oIgorCisvLyBUT0RPOiBNYWtlIHN1cmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaGVyZSBiZWhhdmUgd2VsbCBnaXZlbiB0aGF0IHdlIHdhbnQKKy8vIDEwODAgdmlkZW8sIGJ1dCBwZXJoYXBzIDRrIFVJIHdoZXJlIGFwcGxpY2FibGUuCitTYldpbmRvd1ByaXZhdGU6OlNiV2luZG93UHJpdmF0ZShjb25zdCBTYldpbmRvd09wdGlvbnMqIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIV05EIHdpbmRvd19oYW5kbGUpCisgICAgOiB3aWR0aChvcHRpb25zLT5zaXplLndpZHRoKSwKKyAgICAgIGhlaWdodChvcHRpb25zLT5zaXplLmhlaWdodCksCisgICAgICB3aW5kb3dfaGFuZGxlXyh3aW5kb3dfaGFuZGxlKSB7CisgIFJFQ1Qgd2luZG93X2NsaWVudF9yZWN0OworCisgIGlmIChHZXRDbGllbnRSZWN0KHdpbmRvd19oYW5kbGVfLCAmd2luZG93X2NsaWVudF9yZWN0KSkgeworICAgIHdpZHRoID0gd2luZG93X2NsaWVudF9yZWN0LnJpZ2h0IC0gd2luZG93X2NsaWVudF9yZWN0LmxlZnQ7CisgICAgaGVpZ2h0ID0gd2luZG93X2NsaWVudF9yZWN0LmJvdHRvbSAtIHdpbmRvd19jbGllbnRfcmVjdC50b3A7CisgIH0KK30KKworU2JXaW5kb3dQcml2YXRlOjp+U2JXaW5kb3dQcml2YXRlKCkge30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2ludGVybmFsLmggYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTZjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2lmbmRlZiBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1dJTkRPV19JTlRFUk5BTF9IXworI2RlZmluZSBTVEFSQk9BUkRfU0hBUkVEX1dJTjMyX1dJTkRPV19JTlRFUk5BTF9IXworCisjaW5jbHVkZSA8RUdML2VnbC5oPgorCisvLyBXaW5kb3dzIGhlYWRlcnMuCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2F0b21pYy5oIgorI2luY2x1ZGUgInN0YXJib2FyZC90aW1lLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3dpbmRvdy5oIgorCitzdHJ1Y3QgU2JXaW5kb3dQcml2YXRlIHsKKyAgU2JXaW5kb3dQcml2YXRlKGNvbnN0IFNiV2luZG93T3B0aW9ucyogb3B0aW9ucywgSFdORCB3aW5kb3dfaGFuZGxlKTsKKyAgflNiV2luZG93UHJpdmF0ZSgpOworCisgIEhXTkQgR2V0V2luZG93SGFuZGxlKCkgeyByZXR1cm4gd2luZG93X2hhbmRsZV87IH0KKworICAvLyBUaGUgd2lkdGggb2YgdGhpcyB3aW5kb3cuCisgIGludCB3aWR0aDsKKworICAvLyBUaGUgaGVpZ2h0IG9mIHRoaXMgd2luZG93LgorICBpbnQgaGVpZ2h0OworCisgcHJpdmF0ZToKKyAgSFdORCB3aW5kb3dfaGFuZGxlXzsKK307CisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9XSU5ET1dfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X3NldF9kZWZhdWx0X29wdGlvbnMuY2MgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19zZXRfZGVmYXVsdF9vcHRpb25zLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZjEyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19zZXRfZGVmYXVsdF9vcHRpb25zLmNjCkBAIC0wLDAgKzEsMjMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvd2luZG93LmgiCisKK3ZvaWQgU2JXaW5kb3dTZXREZWZhdWx0T3B0aW9ucyhTYldpbmRvd09wdGlvbnMqIG9wdGlvbnMpIHsKKyAgbWVtc2V0KG9wdGlvbnMsIDAsIHNpemVvZigqb3B0aW9ucykpOworICBvcHRpb25zLT5zaXplLndpZHRoID0gMTkyMDsKKyAgb3B0aW9ucy0+c2l6ZS5oZWlnaHQgPSAxMDgwOworICBvcHRpb25zLT5uYW1lID0gIllvdVR1YmUiOworfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93cm1faGVhZGVyLmNjIGIvc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93cm1faGVhZGVyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDAzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dybV9oZWFkZXIuY2MKQEAgLTAsMCArMSwzOTUgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvd3JtX2hlYWRlci5oIgorCisjaW5jbHVkZSA8Z3VpZGRlZi5oPgorI2luY2x1ZGUgPGluaXRndWlkLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2J5dGVfc3dhcC5oIgorI2luY2x1ZGUgInN0YXJib2FyZC9tZW1vcnkuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCit1c2luZyBNaWNyb3NvZnQ6OldSTDo6Q29tUHRyOworCituYW1lc3BhY2UgeworCisvLyBUaGUgcGxheXJlYWR5IHN5c3RlbSBpZCB1c2VkIHRvIGNyZWF0ZSB0aGUgY29udGVudCBoZWFkZXIuCitERUZJTkVfR1VJRChrUGxheXJlYWR5Q29udGVudEhlYWRlckNMU0lELAorICAgICAgICAgICAgMHhGNDYzNzAxMCwKKyAgICAgICAgICAgIDB4MDNDMywKKyAgICAgICAgICAgIDB4NDJDRCwKKyAgICAgICAgICAgIDB4QjksCisgICAgICAgICAgICAweDMyLAorICAgICAgICAgICAgMHhCNCwKKyAgICAgICAgICAgIDB4OEEsCisgICAgICAgICAgICAweERGLAorICAgICAgICAgICAgMHgzQSwKKyAgICAgICAgICAgIDB4NkEsCisgICAgICAgICAgICAweDU0KTsKKworLy8gVGhlIHBsYXlyZWFkeSBzeXN0ZW0gaWQgdXNlZCB0byBpZGVudGlmeSB0aGUgd3JtIGhlYWRlciBpbiB0aGUKKy8vIGluaXRpYWxpemF0aW9uIGRhdGEuCitERUZJTkVfR1VJRChrUGxheXJlYWR5SW5pdGlhbGl6YXRpb25EYXRhQ0xTSUQsCisgICAgICAgICAgICAweDc5ZjAwNDlhLAorICAgICAgICAgICAgMHg0MDk4LAorICAgICAgICAgICAgMHg4NjQyLAorICAgICAgICAgICAgMHhhYiwKKyAgICAgICAgICAgIDB4OTIsCisgICAgICAgICAgICAweGU2LAorICAgICAgICAgICAgMHg1YiwKKyAgICAgICAgICAgIDB4ZTAsCisgICAgICAgICAgICAweDg4LAorICAgICAgICAgICAgMHg1ZiwKKyAgICAgICAgICAgIDB4OTUpOworCitjb25zdCB1aW50MTZfdCBrUGxheXJlYWR5V1JNVGFnID0gMHgwMDAxOworCitjbGFzcyBSZWFkZXIgeworIHB1YmxpYzoKKyAgUmVhZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCisgICAgICA6IHN0YXJ0XyhkYXRhKSwgY3Vycl8oZGF0YSksIGVuZF8oZGF0YSArIGxlbmd0aCkge30KKworICBzaXplX3QgR2V0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBjdXJyXyAtIHN0YXJ0XzsgfQorICBzaXplX3QgR2V0UmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4gZW5kXyAtIGN1cnJfOyB9CisKKyAgY29uc3QgdWludDhfdCogY3VycigpIGNvbnN0IHsgY3Vycl87IH0KKworICBib29sIFNraXAoc2l6ZV90IGRpc3RhbmNlKSB7CisgICAgaWYgKGRpc3RhbmNlID4gR2V0UmVtYWluaW5nKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgY3Vycl8gKz0gZGlzdGFuY2U7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBib29sIFJlYWRHVUlEKEdVSUQqIGd1aWQpIHsKKyAgICBpZiAoc2l6ZW9mKCpndWlkKSA+IEdldFJlbWFpbmluZygpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShndWlkLCBjdXJyXywgc2l6ZW9mKCpndWlkKSk7CisgICAgY3Vycl8gKz0gc2l6ZW9mKCpndWlkKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGJvb2wgUmVhZEJpZ0VuZGlhblUzMih1aW50MzJfdCogaSkgeworICAgIGlmIChzaXplb2YoKmkpID4gR2V0UmVtYWluaW5nKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgKmkgPQorICAgICAgICBjdXJyX1swXSAqIDB4MTAwMDAwMCArIGN1cnJfWzFdICogMHgxMDAwMCArIGN1cnJfWzJdICogMHgxMDAgKyBjdXJyX1szXTsKKyAgICBjdXJyXyArPSBzaXplb2YoKmkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgYm9vbCBSZWFkTGl0dGxlRW5kaWFuVTE2KHVpbnQxNl90KiBpKSB7CisgICAgaWYgKHNpemVvZigqaSkgPiBHZXRSZW1haW5pbmcoKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqaSA9IGN1cnJfWzBdICsgY3Vycl9bMV0gKiAweDEwMDsKKyAgICBjdXJyXyArPSBzaXplb2YoKmkpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyBwcml2YXRlOgorICBjb25zdCB1aW50OF90KiBjb25zdCBzdGFydF87CisgIGNvbnN0IHVpbnQ4X3QqIGN1cnJfOworICBjb25zdCB1aW50OF90KiBjb25zdCBlbmRfOworfTsKKworc3RkOjp2ZWN0b3I8dWludDhfdD4gUGFyc2VXcm1IZWFkZXJGcm9tSW5pdGlhbGl6YXRpb25EYXRhKAorICAgIGNvbnN0IHZvaWQqIGluaXRpYWxpemF0aW9uX2RhdGEsCisgICAgaW50IGluaXRpYWxpemF0aW9uX2RhdGFfc2l6ZSkgeworICBpZiAoaW5pdGlhbGl6YXRpb25fZGF0YV9zaXplID09IDApIHsKKyAgICBTQl9OT1RJTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBzdGQ6OnZlY3Rvcjx1aW50OF90PigpOworICB9CisKKyAgc3RkOjp2ZWN0b3I8dWludDhfdD4gb3V0cHV0OworICBjb25zdCB1aW50OF90KiBkYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluaXRpYWxpemF0aW9uX2RhdGEpOworCisgIFJlYWRlciByZWFkZXIoZGF0YSwgaW5pdGlhbGl6YXRpb25fZGF0YV9zaXplKTsKKyAgd2hpbGUgKHJlYWRlci5HZXRSZW1haW5pbmcoKSA+IDApIHsKKyAgICAvLyBQYXJzZSBwc3NoIGF0b20gKGJpZyBlbmRpYW4pCisgICAgLy8KKyAgICAvLyA0IGJ5dGVzIC0tIHNpemUKKyAgICAvLyA0IGJ5dGVzIC0tICJwc3NoIgorICAgIC8vIDQgYnl0ZXMgLS0gZmxhZ3MKKyAgICAvLyAxNiBieXRlcyAtLSBndWlkCisgICAgdWludDMyX3QgcHNzaF9zaXplOworICAgIGlmICghcmVhZGVyLlJlYWRCaWdFbmRpYW5VMzIoJnBzc2hfc2l6ZSkpIHsKKyAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgfQorCisgICAgLy8gU2tpcHBpbmcgcHNzaCBhbmQgZmxhZ3MKKyAgICBpZiAoIXJlYWRlci5Ta2lwKDgpKSB7CisgICAgICByZXR1cm4gb3V0cHV0OworICAgIH0KKyAgICBHVUlEIHN5c3RlbV9pZDsKKyAgICBpZiAoIXJlYWRlci5SZWFkR1VJRCgmc3lzdGVtX2lkKSkgeworICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9CisgICAgaWYgKHN5c3RlbV9pZCAhPSBrUGxheXJlYWR5SW5pdGlhbGl6YXRpb25EYXRhQ0xTSUQpIHsKKyAgICAgIC8vIFNraXAgZW50aXJlIHBzc2ggYXRvbQorICAgICAgaWYgKCFyZWFkZXIuU2tpcChwc3NoX3NpemUgLSAyOCkpIHsKKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8vIDQgYnl0ZXMgLS0gc2l6ZSBvZiBQbGF5cmVhZHlPYmplY3QKKyAgICAvLyBmb2xsb3dlZCBieSBQbGF5cmVhZHlPYmplY3QKKworICAgIC8vIFNraXAgc2l6ZSwgYW5kIGNvbnRpbnVlIHBhcnNpbmcKKyAgICBpZiAoIXJlYWRlci5Ta2lwKDQpKSB7CisgICAgICByZXR1cm4gb3V0cHV0OworICAgIH0KKworICAgIC8vIFBhcnNlIFBsYXlyZWFkeSBvYmplY3QgKGxpdHRsZSBlbmRpYW4pCisgICAgLy8gNCBieXRlcyAtLSBzaXplCisgICAgLy8gMiBieXRlcyAtLSByZWNvcmQgY291bnQKKyAgICAvLworICAgIC8vIFBsYXlyZWFkeSBSZWNvcmQKKyAgICAvLyAyIGJ5dGVzIC0tIHR5cGUKKyAgICAvLyAyIGJ5dGVzIC0tIHNpemUgb2YgcmVjb3JkCisgICAgLy8gbiBieXRlcyAtLSByZWNvcmQKKyAgICBpZiAoIXJlYWRlci5Ta2lwKDQpKSB7CisgICAgICByZXR1cm4gb3V0cHV0OworICAgIH0KKyAgICB1aW50MTZfdCBudW1fcmVjb3JkczsKKyAgICBpZiAoIXJlYWRlci5SZWFkTGl0dGxlRW5kaWFuVTE2KCZudW1fcmVjb3JkcykpIHsKKyAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVjb3JkczsgaSsrKSB7CisgICAgICB1aW50MTZfdCByZWNvcmRfdHlwZTsKKyAgICAgIGlmICghcmVhZGVyLlJlYWRMaXR0bGVFbmRpYW5VMTYoJnJlY29yZF90eXBlKSkgeworICAgICAgICByZXR1cm4gb3V0cHV0OworICAgICAgfQorICAgICAgdWludDE2X3QgcmVjb3JkX3NpemU7CisgICAgICBpZiAoIXJlYWRlci5SZWFkTGl0dGxlRW5kaWFuVTE2KCZyZWNvcmRfc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgIH0KKyAgICAgIGlmICgocmVjb3JkX3R5cGUgJiBrUGxheXJlYWR5V1JNVGFnKSA9PSBrUGxheXJlYWR5V1JNVGFnKSB7CisgICAgICAgIHN0ZDo6Y29weShkYXRhICsgcmVhZGVyLkdldFBvc2l0aW9uKCksCisgICAgICAgICAgICAgICAgICBkYXRhICsgcmVhZGVyLkdldFBvc2l0aW9uKCkgKyByZWNvcmRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcihvdXRwdXQpKTsKKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICAgIH0KKyAgICAgIGlmICghcmVhZGVyLlNraXAocmVjb3JkX3NpemUpKSB7CisgICAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIG91dHB1dDsKK30KKwordWludDMyX3QgQmFzZTY0VG9WYWx1ZSh1aW50OF90IGJ5dGUpIHsKKyAgaWYgKGJ5dGUgPj0gJ0EnICYmIGJ5dGUgPD0gJ1onKSB7CisgICAgcmV0dXJuIGJ5dGUgLSAnQSc7CisgIH0KKyAgaWYgKGJ5dGUgPj0gJ2EnICYmIGJ5dGUgPD0gJ3onKSB7CisgICAgcmV0dXJuIGJ5dGUgLSAnYScgKyAyNjsKKyAgfQorICBpZiAoYnl0ZSA+PSAnMCcgJiYgYnl0ZSA8PSAnOScpIHsKKyAgICByZXR1cm4gYnl0ZSAtICcwJyArIDUyOworICB9CisgIGlmIChieXRlID09ICcrJykgeworICAgIHJldHVybiA2MjsKKyAgfQorICBpZiAoYnl0ZSA9PSAnLycpIHsKKyAgICByZXR1cm4gNjM7CisgIH0KKyAgU0JfRENIRUNLKGJ5dGUgPT0gJz0nKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0ZDo6c3RyaW5nIEJhc2U2NERlY29kZShjb25zdCBzdGQ6OndzdHJpbmcmIGlucHV0KSB7CisgIFNCX0RDSEVDSyhpbnB1dC5zaXplKCkgJSA0ID09IDApOworCisgIHN0ZDo6c3RyaW5nIG91dHB1dDsKKworICBvdXRwdXQucmVzZXJ2ZShpbnB1dC5zaXplKCkgLyA0ICogMyk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXQuc2l6ZSgpIC0gMzsgaSArPSA0KSB7CisgICAgdWludDMyX3QgZGVjb2RlZCA9CisgICAgICAgIEJhc2U2NFRvVmFsdWUoaW5wdXRbaV0pICogNCArIEJhc2U2NFRvVmFsdWUoaW5wdXRbaSArIDFdKSAvIDE2OworICAgIG91dHB1dCArPSBzdGF0aWNfY2FzdDxjaGFyPihkZWNvZGVkKTsKKyAgICBpZiAoaW5wdXRbaSArIDJdICE9ICc9JykgeworICAgICAgZGVjb2RlZCA9IEJhc2U2NFRvVmFsdWUoaW5wdXRbaSArIDFdKSAlIDE2ICogMTYgKworICAgICAgICAgICAgICAgIEJhc2U2NFRvVmFsdWUoaW5wdXRbaSArIDJdKSAvIDQ7CisgICAgICBvdXRwdXQgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oZGVjb2RlZCk7CisgICAgICBpZiAoaW5wdXRbaSArIDNdICE9ICc9JykgeworICAgICAgICBkZWNvZGVkID0KKyAgICAgICAgICAgIEJhc2U2NFRvVmFsdWUoaW5wdXRbaSArIDJdKSAlIDQgKiA2NCArIEJhc2U2NFRvVmFsdWUoaW5wdXRbaSArIDNdKTsKKyAgICAgICAgb3V0cHV0ICs9IHN0YXRpY19jYXN0PGNoYXI+KGRlY29kZWQpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiBvdXRwdXQ7Cit9CisKK0dVSUQgUGFyc2VLZXlJZEZyb21Xcm1IZWFkZXIoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHdybV9oZWFkZXIpIHsKKyAgLy8gVGhlIHdybV9oZWFkZXIgaXMgYW4gWE1MIGluIHdjaGFyX3QgdGhhdCBjb250YWlucyB0aGUgYmFzZTY0IGVuY29kZWQga2V5CisgIC8vIGlkIGluIDxLSUQ+IG5vZGUgaW4gYmFzZTY0LiAgVGhlIG9yaWdpbmFsIGtleSBpZCBzaG91bGQgYmUgMTYgY2hhcmFjdGVycywKKyAgLy8gc28gaXQgaXMgMjQgY2hhcmFjdGVycyBhZnRlciBiYXNlZDY0IGVuY29kZWQuCisgIGNvbnN0IHNpemVfdCBrRW5jb2RlZEtleUlkTGVuZ3RoID0gMjQ7CisKKyAgU0JfRENIRUNLKHdybV9oZWFkZXIuc2l6ZSgpICUgMiA9PSAwKTsKKyAgc3RkOjp3c3RyaW5nIHdybV9oZWFkZXJfY29weSgKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KHdybV9oZWFkZXIuZGF0YSgpKSwKKyAgICAgIHdybV9oZWFkZXIuc2l6ZSgpIC8gMik7CisgIHN0ZDo6d3N0cmluZzo6c2l6ZV90eXBlIGJlZ2luID0gd3JtX2hlYWRlcl9jb3B5LmZpbmQoTCI8S0lEPiIpOworICBpZiAoYmVnaW4gPT0gd3JtX2hlYWRlcl9jb3B5Lm5wb3MpIHsKKyAgICByZXR1cm4gV3JtSGVhZGVyOjprSW52YWxpZEtleUlkOworICB9CisgIHN0ZDo6d3N0cmluZzo6c2l6ZV90eXBlIGVuZCA9IHdybV9oZWFkZXJfY29weS5maW5kKEwiPC9LSUQ+IiwgYmVnaW4pOworICBpZiAoZW5kID09IHdybV9oZWFkZXJfY29weS5ucG9zKSB7CisgICAgcmV0dXJuIFdybUhlYWRlcjo6a0ludmFsaWRLZXlJZDsKKyAgfQorICBiZWdpbiArPSA1OworICBpZiAoZW5kIC0gYmVnaW4gIT0ga0VuY29kZWRLZXlJZExlbmd0aCkgeworICAgIHJldHVybiBXcm1IZWFkZXI6OmtJbnZhbGlkS2V5SWQ7CisgIH0KKworICBzdGQ6OnN0cmluZyBrZXlfaWRfaW5fc3RyaW5nID0KKyAgICAgIEJhc2U2NERlY29kZSh3cm1faGVhZGVyX2NvcHkuc3Vic3RyKGJlZ2luLCBrRW5jb2RlZEtleUlkTGVuZ3RoKSk7CisgIGlmIChrZXlfaWRfaW5fc3RyaW5nLnNpemUoKSAhPSBzaXplb2YoR1VJRCkpIHsKKyAgICByZXR1cm4gV3JtSGVhZGVyOjprSW52YWxpZEtleUlkOworICB9CisKKyAgR1VJRCBrZXlfaWQgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHVUlEKj4oa2V5X2lkX2luX3N0cmluZy5kYXRhKCkpOworCisgIGtleV9pZC5EYXRhMSA9IFNiQnl0ZVN3YXAoa2V5X2lkLkRhdGExKTsKKyAga2V5X2lkLkRhdGEyID0gU2JCeXRlU3dhcChrZXlfaWQuRGF0YTIpOworICBrZXlfaWQuRGF0YTMgPSBTYkJ5dGVTd2FwKGtleV9pZC5EYXRhMyk7CisKKyAgcmV0dXJuIGtleV9pZDsKK30KKworQ29tUHRyPElTdHJlYW0+IENyZWF0ZVdybUhlYWRlclN0cmVhbShjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgd3JtX2hlYWRlcikgeworICBDb21QdHI8SVN0cmVhbT4gc3RyZWFtOworICBIUkVTVUxUIGhyID0gQ3JlYXRlU3RyZWFtT25IR2xvYmFsKE5VTEwsIFRSVUUsICZzdHJlYW0pOworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgRFdPUkQgd3JtX2hlYWRlcl9zaXplID0gc3RhdGljX2Nhc3Q8RFdPUkQ+KHdybV9oZWFkZXIuc2l6ZSgpKTsKKyAgVUxPTkcgYnl0ZXNfd3JpdHRlbiA9IDA7CisKKyAgaWYgKHdybV9oZWFkZXJfc2l6ZSAhPSAwKSB7CisgICAgaHIgPSBzdHJlYW0tPldyaXRlKHdybV9oZWFkZXIuZGF0YSgpLCB3cm1faGVhZGVyX3NpemUsICZieXRlc193cml0dGVuKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHN0cmVhbTsKK30KKworQ29tUHRyPElTdHJlYW0+IENyZWF0ZUNvbnRlbnRIZWFkZXJGcm9tV3JtSGVhZGVyKAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiB3cm1faGVhZGVyKSB7CisgIENvbVB0cjxJU3RyZWFtPiBjb250ZW50X2hlYWRlcjsKKyAgLy8gQXNzdW1lIHdlIHVzZSBvbmUgbGljZW5zZSBmb3Igb25lIHN0cmVhbS4KKyAgY29uc3QgRFdPUkQga051bVN0cmVhbXMgPSAxOworICBjb25zdCBEV09SRCBrTmV4dFN0cmVhbUlkID0gc3RhdGljX2Nhc3Q8RFdPUkQ+KC0xKTsKKworICBIUkVTVUxUIGhyID0gQ3JlYXRlU3RyZWFtT25IR2xvYmFsKE5VTEwsIFRSVUUsICZjb250ZW50X2hlYWRlcik7CisgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBJbml0aWFsaXplIHNwSW5pdFN0bSB3aXRoIHRoZSByZXF1aXJlZCBkYXRhCisgIC8vIEZvcm1hdDogKEFsbCBEV09SRCB2YWx1ZXMgYXJlIHNlcmlhbGl6ZWQgaW4gbGl0dGxlLWVuZGlhbiBvcmRlcikKKyAgLy8gW0dVSUQgKGNvbnRlbnQgcHJvdGVjdGlvbiBzeXN0ZW0gZ3VpZCwgc2VlIG1zcHJpdGEuaWRsKV0KKyAgLy8gW0RXT1JEIChzdHJlYW0gY291bnQsIHVzZSB0aGUgYWN0dWFsIHN0cmVhbSBjb3VudCBldmVuIGlmIGFsbCBzdHJlYW1zIGFyZQorICAvLyBlbmNyeXB0ZWQgdXNpbmcgdGhlIHNhbWUgZGF0YSwgbm90ZSB0aGF0IHplcm8gaXMgaW52YWxpZCldIFtEV09SRCAobmV4dAorICAvLyBzdHJlYW0gSUQsIHVzZSAtMSBpZiBhbGwgcmVtYWluaW5nIHN0cmVhbXMgYXJlIGVuY3J5cHRlZCB1c2luZyB0aGUgc2FtZQorICAvLyBkYXRhKV0gW0RXT1JEIChuZXh0IHN0cmVhbSdzIGJpbmFyeSBkYXRhIHNpemUpXSBbQllURSogKG5leHQgc3RyZWFtJ3MKKyAgLy8gYmluYXJ5IGRhdGEpXSB7IFJlcGVhdCBmcm9tICJuZXh0IHN0cmVhbSBJRCIgYWJvdmUgZm9yIGVhY2ggc3RyZWFtIH0KKyAgRFdPUkQgd3JtX2hlYWRlcl9zaXplID0gc3RhdGljX2Nhc3Q8RFdPUkQ+KHdybV9oZWFkZXIuc2l6ZSgpKTsKKyAgVUxPTkcgYnl0ZXNfd3JpdHRlbiA9IDA7CisgIGhyID0gY29udGVudF9oZWFkZXItPldyaXRlKCZrUGxheXJlYWR5Q29udGVudEhlYWRlckNMU0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa1BsYXlyZWFkeUNvbnRlbnRIZWFkZXJDTFNJRCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc193cml0dGVuKTsKKyAgaWYgKEZBSUxFRChocikpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGhyID0gY29udGVudF9oZWFkZXItPldyaXRlKCZrTnVtU3RyZWFtcywgc2l6ZW9mKGtOdW1TdHJlYW1zKSwgJmJ5dGVzX3dyaXR0ZW4pOworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaHIgPSBjb250ZW50X2hlYWRlci0+V3JpdGUoJmtOZXh0U3RyZWFtSWQsIHNpemVvZihrTmV4dFN0cmVhbUlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzX3dyaXR0ZW4pOworICBpZiAoRkFJTEVEKGhyKSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaHIgPSBjb250ZW50X2hlYWRlci0+V3JpdGUoJndybV9oZWFkZXJfc2l6ZSwgc2l6ZW9mKHdybV9oZWFkZXJfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc193cml0dGVuKTsKKyAgaWYgKEZBSUxFRChocikpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmICgwICE9IHdybV9oZWFkZXJfc2l6ZSkgeworICAgIGhyID0gY29udGVudF9oZWFkZXItPldyaXRlKHdybV9oZWFkZXIuZGF0YSgpLCB3cm1faGVhZGVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzX3dyaXR0ZW4pOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICByZXR1cm4gY29udGVudF9oZWFkZXI7Cit9CisKK0NvbVB0cjxJU3RyZWFtPiBSZXNldFN0cmVhbVBvc2l0aW9uKGNvbnN0IENvbVB0cjxJU3RyZWFtPiYgc3RyZWFtKSB7CisgIGlmIChzdHJlYW0gPT0gTlVMTCkgeworICAgIHJldHVybiBOVUxMOworICB9CisgIExBUkdFX0lOVEVHRVIgc2Vla19wb3NpdGlvbiA9IHswfTsKKyAgSFJFU1VMVCBociA9IHN0cmVhbS0+U2VlayhzZWVrX3Bvc2l0aW9uLCBTVFJFQU1fU0VFS19TRVQsIE5VTEwpOworICBDaGVja1Jlc3VsdChocik7CisgIHJldHVybiBzdHJlYW07Cit9CisKK30gIC8vIG5hbWVzcGFjZS4KKworLy8gc3RhdGljCitHVUlEIFdybUhlYWRlcjo6a0ludmFsaWRLZXlJZDsKKworV3JtSGVhZGVyOjpXcm1IZWFkZXIoY29uc3Qgdm9pZCogaW5pdGlhbGl6YXRpb25fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsaXphdGlvbl9kYXRhX3NpemUpIHsKKyAgd3JtX2hlYWRlcl8gPSBQYXJzZVdybUhlYWRlckZyb21Jbml0aWFsaXphdGlvbkRhdGEoaW5pdGlhbGl6YXRpb25fZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb25fZGF0YV9zaXplKTsKKyAga2V5X2lkXyA9IFBhcnNlS2V5SWRGcm9tV3JtSGVhZGVyKHdybV9oZWFkZXJfKTsKK30KKworQ29tUHRyPElTdHJlYW0+IFdybUhlYWRlcjo6Y29udGVudF9oZWFkZXIoKSBjb25zdCB7CisgIFNCX0RDSEVDSyhpc192YWxpZCgpKTsKKworICBpZiAoa2V5X2lkXyA9PSBrSW52YWxpZEtleUlkKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIFJlc2V0U3RyZWFtUG9zaXRpb24oQ3JlYXRlQ29udGVudEhlYWRlckZyb21Xcm1IZWFkZXIod3JtX2hlYWRlcl8pKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dybV9oZWFkZXIuaCBiL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd3JtX2hlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxM2NmNjkKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dybV9oZWFkZXIuaApAQCAtMCwwICsxLDU3IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9XUk1fSEVBREVSX0hfCisjZGVmaW5lIFNUQVJCT0FSRF9TSEFSRURfV0lOMzJfV1JNX0hFQURFUl9IXworCisjaW5jbHVkZSA8b2JqaWRsLmg+CisjaW5jbHVkZSA8d3JsLmg+CisjaW5jbHVkZSA8d3JsL2NsaWVudC5oPgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3R5cGVzLmgiCisKK25hbWVzcGFjZSBzdGFyYm9hcmQgeworbmFtZXNwYWNlIHNoYXJlZCB7CituYW1lc3BhY2Ugd2luMzIgeworCitjbGFzcyBXcm1IZWFkZXIgeworIHB1YmxpYzoKKyAgV3JtSGVhZGVyKGNvbnN0IHZvaWQqIGluaXRpYWxpemF0aW9uX2RhdGEsIGludCBpbml0aWFsaXphdGlvbl9kYXRhX3NpemUpOworCisgIHN0YXRpYyBHVUlEIGtJbnZhbGlkS2V5SWQ7CisKKyAgYm9vbCBpc192YWxpZCgpIGNvbnN0IHsKKyAgICByZXR1cm4ga2V5X2lkXyAhPSBrSW52YWxpZEtleUlkICYmICF3cm1faGVhZGVyXy5lbXB0eSgpOworICB9CisgIGNvbnN0IEdVSUQmIGtleV9pZCgpIGNvbnN0IHsKKyAgICBTQl9EQ0hFQ0soaXNfdmFsaWQoKSk7CisgICAgcmV0dXJuIGtleV9pZF87CisgIH0KKyAgTWljcm9zb2Z0OjpXUkw6OkNvbVB0cjxJU3RyZWFtPiBjb250ZW50X2hlYWRlcigpIGNvbnN0OworICBjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgd3JtX2hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIHdybV9oZWFkZXJfOyB9CisKKyBwcml2YXRlOgorICBHVUlEIGtleV9pZF87CisgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHdybV9oZWFkZXJfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIHdpbjMyCit9ICAvLyBuYW1lc3BhY2Ugc2hhcmVkCit9ICAvLyBuYW1lc3BhY2Ugc3RhcmJvYXJkCisKKyNlbmRpZiAgLy8gU1RBUkJPQVJEX1NIQVJFRF9XSU4zMl9XUk1fSEVBREVSX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc29ja2V0LmggYi9zdGFyYm9hcmQvc29ja2V0LmgKaW5kZXggY2M2YjkxNS4uMDM5OGU3NSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3NvY2tldC5oCisrKyBiL3N0YXJib2FyZC9zb2NrZXQuaApAQCAtMTMxLDEwICsxMzEsOCBAQAogICByZXR1cm4gc29ja2V0ICE9IGtTYlNvY2tldEludmFsaWQ7CiB9CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogLy8gUmV0dXJucyB3aGV0aGVyIElQVjYgaXMgc3VwcG9ydGVkIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLgogU0JfRVhQT1JUIGJvb2wgU2JTb2NrZXRJc0lwdjZTdXBwb3J0ZWQoKTsKLSNlbmRpZgogCiAvLyBDcmVhdGVzIGEgbmV3IG5vbi1ibG9ja2luZyBzb2NrZXQgZm9yIHByb3RvY29sIHxwcm90b2NvbHwgdXNpbmcgYWRkcmVzcwogLy8gZmFtaWx5IHxhZGRyZXNzX3R5cGV8LgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3NwZWVjaF9yZWNvZ25pemVyLmggYi9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaAppbmRleCA2ZDVkNzQxLi41NmJjYTdhIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaAorKysgYi9zdGFyYm9hcmQvc3BlZWNoX3JlY29nbml6ZXIuaApAQCAtMzksOCArMzksNiBAQAogI2Vycm9yIFNwZWVjaCBSZWNvZ25pemVyIGlzIGRlcHJlY2F0ZWQsIHN3aXRjaCB0byBtaWNyb3Bob25lIGltcGxlbWVudGF0aW9uLgogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoU1BFRUNIX1JFQ09HTklaRVIpCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTE0OSwxMCArMTQ3LDggQEAKICAgdm9pZCogY29udGV4dDsKIH07CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBTYlNwZWVjaFJlY29nbml6ZXIuCiBTQl9FWFBPUlQgYm9vbCBTYlNwZWVjaFJlY29nbml6ZXJJc1N1cHBvcnRlZCgpOwotI2VuZGlmCiAKIC8vIENyZWF0ZXMgYSBzcGVlY2ggcmVjb2duaXplciB3aXRoIGEgc3BlZWNoIHJlY29nbml6ZXIgaGFuZGxlci4KIC8vCkBAIC0yMDMsNiArMTk5LDQgQEAKIH0gIC8vIGV4dGVybiAiQyIKICNlbmRpZgogCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhTUEVFQ0hfUkVDT0dOSVpFUikKLQogI2VuZGlmICAvLyBTVEFSQk9BUkRfU1BFRUNIX1JFQ09HTklaRVJfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zcGVlY2hfc3ludGhlc2lzLmggYi9zdGFyYm9hcmQvc3BlZWNoX3N5bnRoZXNpcy5oCmluZGV4IDhkYzcwODUuLjVhYmRiNDUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zcGVlY2hfc3ludGhlc2lzLmgKKysrIGIvc3RhcmJvYXJkL3NwZWVjaF9zeW50aGVzaXMuaApAQCAtMjksMTYgKzI5LDEyIEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL2V4cG9ydC5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTKFNQRUVDSF9TWU5USEVTSVMpCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHNwZWVjaCBzeW50aGVzaXMKIFNCX0VYUE9SVCBib29sIFNiU3BlZWNoU3ludGhlc2lzSXNTdXBwb3J0ZWQoKTsKLSNlbmRpZgogCiAvLyBFbnF1ZXVlcyB8dGV4dHwsIGEgVVRGLTggc3RyaW5nLCB0byBiZSBzcG9rZW4uCiAvLyBSZXR1cm5zIGltbWVkaWF0ZWx5LgpAQCAtNTksNyArNTUsNCBAQAogfSAgLy8gZXh0ZXJuICJDIgogI2VuZGlmCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKFNQRUVDSF9TWU5USEVTSVMpCi0KICNlbmRpZiAgLy8gU1RBUkJPQVJEX1NQRUVDSF9TWU5USEVTSVNfSF8KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwIGIvc3RhcmJvYXJkL3N0YXJib2FyZC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZGFkOWMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3N0YXJib2FyZC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGUgY29tbW9uICJzdGFyYm9hcmQiIHRhcmdldC4gQW55IHRhcmdldCB0aGF0IGRlcGVuZHMgb24gU3RhcmJvYXJkIHNob3VsZAotIyBkZXBlbmQgb24gdGhpcyBjb21tb24gdGFyZ2V0LCBhbmQgbm90IGFueSBvZiB0aGUgc3BlY2lmaWMgInN0YXJib2FyZF9wbGF0Zm9ybSIKLSMgdGFyZ2V0cy4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnc2JfZXZlcmdyZWVuID09IDEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvY3dyYXBwZXJzL2N3cmFwcGVycy5neXA6Y3dyYXBwZXJzJywKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY2xpZW50X3BvcnRpbmcvZXp0aW1lL2V6dGltZS5neXA6ZXp0aW1lJywKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvZWxmX2xvYWRlci9zYWJpX3N0cmluZy5neXA6c2FiaV9zdHJpbmcnLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvY29tcGlsZXItcnQvY29tcGlsZXItcnQuZ3lwOmNvbXBpbGVyX3J0JywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGliY3h4L2xpYmN4eC5neXA6Y3h4JywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGliY3h4YWJpL2xpYmN4eGFiaS5neXA6Y3h4YWJpJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2xpYnVud2luZC5neXA6dW53aW5kX2V2ZXJncmVlbicsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbXVzbC9tdXNsLmd5cDpjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdzdGFyYm9hcmRfZnVsbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJyA6IFsKLSAgICAjIEV2ZXJncmVlbiBwbGF0Zm9ybXMgYXJlbid0IGJ1aWx0IHdpdGggYSBzdGFyYm9hcmRfcGxhdGZvcm0gc3RhdGljIGxpYnJhcnkKLSAgICAjIGJ1dCByYXRoZXIganVzdCB0aGUgU3RhcmJvYXJkIGhlYWRlcnMuIEV2ZW4gdGhvdWdoIHRhcmdldHMgZG9uJ3QgZGVwZW5kIG9uCi0gICAgIyBzdGFyYm9hcmRfZnVsbCB3aGVuIHNiX2V2ZXJncmVlbiBpcyBUcnVlLCBHWVAgd2lsbCBzdGlsbCB0cnkgdG8gZGVmaW5lIGl0Ci0gICAgIyBpZiBpdCdzIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgZGljdGlvbmFyeSBkZWZpbmVkIGJ5IHRoaXMgZmlsZS4gU28sIHRoaXMKLSAgICAjIGNvbmRpdGlvbiBpcyB1c2VkIHRvIG9ubHkgaW5jbHVkZSBpdCB3aGVuIHNiX2V2ZXJncmVlbiBpcyBGYWxzZS4KLSAgICBbJ3NiX2V2ZXJncmVlbiA9PSAwJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX2Z1bGwnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvPChzdGFyYm9hcmRfcGF0aCkvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cDpzdGFyYm9hcmRfcGxhdGZvcm0nLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9jd3JhcHBlcnMvY3dyYXBwZXJzLmd5cDpjd3JhcHBlcnMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9lenRpbWUvZXp0aW1lLmd5cDplenRpbWUnLAotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgICAgICdjb21tb24vY29tbW9uLmd5cDpjb21tb24nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvPChzdGFyYm9hcmRfcGF0aCkvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cDpzdGFyYm9hcmRfcGxhdGZvcm0nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlID09IDEnLCB7Ci0gICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5neXA6Y3Jhc2hwYWRfd3JhcHBlcicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5neXA6Y3Jhc2hwYWRfd3JhcHBlcl9zdHViJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydmaW5hbF9leGVjdXRhYmxlX3R5cGU9PSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgIFsnX3R5cGU9PSJleGVjdXRhYmxlIiBhbmQgX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc2hhcmVkX21haW5fYWRhcHRlci5jYycsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc3RhcmJvYXJkX2FsbC5neXAgYi9zdGFyYm9hcmQvc3RhcmJvYXJkX2FsbC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTc3YzMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3N0YXJib2FyZF9hbGwuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoZSBTdGFyYm9hcmQgImFsbCIgdGFyZ2V0LCB3aGljaCBpbmNsdWRlcyBhbGwgaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgdGhlCi0jIFN0YXJib2FyZCBwcm9qZWN0LgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2hhc19wbGF0Zm9ybV90ZXN0cyUnOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZXhpc3RzIFwnPChERVBUSCkvPChzdGFyYm9hcmRfcGF0aCkvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cFwnKScsCi0gICAgJ2hhc19wbGF0Zm9ybV90YXJnZXRzJSc6ICc8IXB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9leGlzdHMgXCc8KERFUFRIKS88KHN0YXJib2FyZF9wYXRoKS9wbGF0Zm9ybV90YXJnZXRzLmd5cFwnKScsCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgICMgSWYgJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycgaXMgbm90IGRlZmluZWQgYnkgdGhlIHBsYXRmb3JtLCB0aGVuIGFuCi0gICAgIyBlbXB0eSAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzJyB0YXJnZXQgaXMgZGVmaW5lZC4KLSAgICBbJ2hhc19wbGF0Zm9ybV90ZXN0cz09MCcsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vdGVzdF9tYWluLmNjJywKLSAgICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOnN0YXJib2FyZCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0c19kZXBsb3knLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzJywKLSAgICAgICAgICBdLAotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ3N0YXJib2FyZF9wbGF0Zm9ybV90ZXN0cycsCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH1dLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAjIE5vdGUgdGhhdCB0aGlzIHRhcmdldCBtdXN0IGJlIGluIGEgc2VwYXJhdGUgR1lQIGZpbGUgZnJvbSBzdGFyYm9hcmQuZ3lwLAotICAgICAgIyBvciBlbHNlIGl0IHByb2R1Y2VzIGEgR1lQIGZpbGUgbG9vcCAod2hpY2ggaXMgbm90IGFsbG93ZWQgYnkgR1lQKS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdGFyYm9hcmRfYWxsJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9lenRpbWUvZXp0aW1lLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9lenRpbWUvZXp0aW1lX3Rlc3QuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2ljdV9pbml0L2ljdV9pbml0Lmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jbGllbnRfcG9ydGluZy9wb2VtL3BvZW0uZ3lwOionLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2V4YW1wbGVzL3dpbmRvdy93aW5kb3cuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL25wbGIvbnBsYl9ldmVyZ3JlZW5fY29tcGF0X3Rlc3RzL25wbGJfZXZlcmdyZWVuX2NvbXBhdF90ZXN0cy5neXA6KicsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvbnBsYi9ucGxiLmd5cDoqJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmQuZ3lwOionLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3Rvb2xzL3Rvb2xzLmd5cDoqJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydnbF90eXBlICE9ICJub25lIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9leGFtcGxlcy9nbGNsZWFyL2dsY2xlYXIuZ3lwOnN0YXJib2FyZF9nbGNsZWFyX2V4YW1wbGUnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2hhc19wbGF0Zm9ybV90YXJnZXRzPT0xJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvPChzdGFyYm9hcmRfcGF0aCkvcGxhdGZvcm1fdGFyZ2V0cy5neXA6KicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaGFzX3BsYXRmb3JtX3Rlc3RzPT0xJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvPChzdGFyYm9hcmRfcGF0aCkvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cDoqJywKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkX2FsbC5neXA6c3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzX2RlcGxveScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZmlsdGVyX2Jhc2VkX3BsYXllcj09MScsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3BsYXllci9maWx0ZXIvdGVzdGluZy9wbGF5ZXJfZmlsdGVyX3Rlc3RzLmd5cDpwbGF5ZXJfZmlsdGVyX3Rlc3RzX2RlcGxveScsCi0gICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcGxheWVyL2ZpbHRlci90b29scy90b29scy5neXA6KicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZW5hYmxlX2JlbmNobWFyaz09MScsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9iZW5jaG1hcmsvYmVuY2htYXJrLmd5cDoqJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydzYl9ldmVyZ3JlZW49PTAnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jcmFzaHBhZC5neXA6KicsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbHo0X2xpYi9sejQuZ3lwOmx6NCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0KLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdGFyYm9hcmRfYmFzZV90YXJnZXQuZ3lwaSBiL3N0YXJib2FyZC9zdGFyYm9hcmRfYmFzZV90YXJnZXQuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM1ZWI0NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc3RhcmJvYXJkX2Jhc2VfdGFyZ2V0Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gdGhlIHRhcmdldCBkZWZhdWx0cyBmcm9tCi0jIGNvYmFsdC9idWlsZC9jb25maWcvYmFzZS5neXBpCi17Ci0gICdkZWZpbmVzJzogWwotICAgICMgVGhlIGNhbm9uaWNhbCB3YXkgdG8gZGV0ZWN0IFN0YXJib2FyZCBpcyAjaWYgZGVmaW5lZChTVEFSQk9BUkQpLiBUaGlzCi0gICAgIyBzaG91bGQgYmUgZGVmaW5lZCBib3RoIHdoZW4gYnVpbGRpbmcgU3RhcmJvYXJkIGl0c2VsZiwgYW5kIHdoZW4gYnVpbGRpbmcKLSAgICAjIGFueSBvdGhlciBzb3VyY2UgZmlsZSBpbiBhIFN0YXJib2FyZC1iYXNlZCBwcm9qZWN0LgotICAgICdTVEFSQk9BUkQnLAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ2dsX3R5cGUgPT0gIm5vbmUiJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTQl9HWVBfR0xfVFlQRV9JU19OT05FPTEnLAotICAgICAgXSwKLSAgICB9LCB7Ci0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1NCX0dZUF9HTF9UWVBFX0lTX05PTkU9MCcsCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnYWJvcnRfb25fYWxsb2NhdGlvbl9mYWlsdXJlPT0xJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTQl9BQk9SVF9PTl9BTExPQ0FUSU9OX0ZBSUxVUkUnLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ3NiX2FsbG93c19tZW1vcnlfdHJhY2tpbmc9PTEnLCB7Ci0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1NUQVJCT0FSRF9BTExPV1NfTUVNT1JZX1RSQUNLSU5HJywKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydzYl9lbmFibGVfbGliPT0xJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTQl9JU19MSUJSQVJZPTEnLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ3NiX2V2ZXJncmVlbj09MScsIHsKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnU0JfSVNfRVZFUkdSRUVOPTEnLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ3NiX2V2ZXJncmVlbl9jb21wYXRpYmxlPT0xJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTQl9JU19FVkVSR1JFRU5fQ09NUEFUSUJMRT0xJywKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saWJ1bndpbmQ9PTEnLCB7Ci0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1NCX0lTX0VWRVJHUkVFTl9DT01QQVRJQkxFX0xJQlVOV0lORD0xJywKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydzYl9ldmVyZ3JlZW5fY29tcGF0aWJsZV9saXRlPT0xJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdTQl9JU19FVkVSR1JFRU5fQ09NUEFUSUJMRV9MSVRFPTEnLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ3N0YXJib2FyZF9wYXRoID09ICIiJywgewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55IHdheSB0byB1c2UgdGhlIEMgcHJlcHJvY2Vzc29yIHRvIGRvCi0gICAgICAgICMgc3RyaW5nIGNvbmNhdGVuYXRpb24gd2l0aCB0aGUgLyBjaGFyYWN0ZXIuIFRoaXMgcHJldmVudHMgdXMgZnJvbSB1c2luZwotICAgICAgICAjIHRoZSBwcmVwcm9jZXNzb3IgdG8gYXNzZW1ibGUgYW4gaW5jbHVkZSBmaWxlIHBhdGgsIHNvIHdlIGhhdmUgdG8gZG8KLSAgICAgICAgIyB0aGUgY29uY2F0ZW5hdGlvbiBoZXJlIGluIEdZUC4KLSAgICAgICAgIyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI5NjAxNzg2L2MtcHJlcHJvY2Vzc29yLWJ1aWxkaW5nLWEtcGF0aC1zdHJpbmcKLSAgICAgICAgJ1NUQVJCT0FSRF9BVE9NSUNfSU5DTFVERT0ic3RhcmJvYXJkLzwodGFyZ2V0X2FyY2gpL2F0b21pY19wdWJsaWMuaCInLAotICAgICAgICAnU1RBUkJPQVJEX0NPTkZJR1VSQVRJT05fSU5DTFVERT0ic3RhcmJvYXJkLzwodGFyZ2V0X2FyY2gpL2NvbmZpZ3VyYXRpb25fcHVibGljLmgiJywKLSAgICAgICAgJ1NUQVJCT0FSRF9USFJFQURfVFlQRVNfSU5DTFVERT0ic3RhcmJvYXJkLzwodGFyZ2V0X2FyY2gpL3RocmVhZF90eXBlc19wdWJsaWMuaCInLAotICAgICAgXSwKLSAgICB9LCB7Ci0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1NUQVJCT0FSRF9BVE9NSUNfSU5DTFVERT0iPChzdGFyYm9hcmRfcGF0aCkvYXRvbWljX3B1YmxpYy5oIicsCi0gICAgICAgICdTVEFSQk9BUkRfQ09ORklHVVJBVElPTl9JTkNMVURFPSI8KHN0YXJib2FyZF9wYXRoKS9jb25maWd1cmF0aW9uX3B1YmxpYy5oIicsCi0gICAgICAgICdTVEFSQk9BUkRfVEhSRUFEX1RZUEVTX0lOQ0xVREU9Ijwoc3RhcmJvYXJkX3BhdGgpL3RocmVhZF90eXBlc19wdWJsaWMuaCInLAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cCBiL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyYTA5Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc3RhcmJvYXJkX2hlYWRlcnNfb25seS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUaGUgY29tbW9uICJzdGFyYm9hcmRfaGVhZGVyc19vbmx5IiB0YXJnZXQsIGxpa2UgdGhlIGNvbW1vbiAic3RhcmJvYXJkIiB0YXJnZXQKLSMgYnV0IHdpdGhvdXQgdGhlIHN0YXJib2FyZF9wbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbi4gSWYgYSBub24tZXhlY3V0YWJsZSB0YXJnZXQKLSMgZGVwZW5kcyBvbiBTdGFyYm9hcmQsIGJ1dCBpcyBhbHNvIHVzZWQgYnkgU3RhcmJvYXJkIHBvcnRzLCB0aGUgdGFyZ2V0IHNob3VsZAotIyBkZXBlbmQgb24gdGhpcyBjb21tb24gaGVhZGVyIHRhcmdldC4gVGhpcyBhdm9pZHMgZmlsZSBkZXBlbmRlbmN5IGN5Y2xlcyBmb3IKLSMgdGFyZ2V0cyBzaW11bHRhbmVvdXNseSBhYm92ZSBhbmQgYmVsb3cgc3RhcmJvYXJkLiBJbiBjb250cmFzdCwgZXhlY3V0YWJsZQotIyB0YXJnZXRzIHN1Y2ggYXMgdGVzdCB0YXJnZXRzLCBtdXN0IGluIHNvbWUgd2F5IGRlcGVuZCBvbiB0aGUgY29tbW9uCi0jICJzdGFyYm9hcmQiIHRhcmdldC4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX2hlYWRlcnNfb25seScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXRvbWljLmgnLAotICAgICAgICAnYXVkaW9fc2luay5oJywKLSAgICAgICAgJ2J5dGVfc3dhcC5oJywKLSAgICAgICAgJ2NoYXJhY3Rlci5oJywKLSAgICAgICAgJ2NvbmRpdGlvbl92YXJpYWJsZS5oJywKLSAgICAgICAgJ2NvbmZpZ3VyYXRpb24uaCcsCi0gICAgICAgICdjb25maWd1cmF0aW9uX2NvbnN0YW50cy5oJywKLSAgICAgICAgJ2NwdV9mZWF0dXJlcy5oJywKLSAgICAgICAgJ2RlY29kZV90YXJnZXQuaCcsCi0gICAgICAgICdkaXJlY3RvcnkuaCcsCi0gICAgICAgICdkb3VibGUuaCcsCi0gICAgICAgICdkcm0uaCcsCi0gICAgICAgICdlZ2wuaCcsCi0gICAgICAgICdldmVudC5oJywKLSAgICAgICAgJ2V4cG9ydC5oJywKLSAgICAgICAgJ2ZpbGUuaCcsCi0gICAgICAgICdnbGVzLmgnLAotICAgICAgICAnaW5wdXQuaCcsCi0gICAgICAgICdrZXkuaCcsCi0gICAgICAgICdsb2cuaCcsCi0gICAgICAgICdtZWRpYS5oJywKLSAgICAgICAgJ21lbW9yeS5oJywKLSAgICAgICAgJ21pY3JvcGhvbmUuaCcsCi0gICAgICAgICdtdXRleC5oJywKLSAgICAgICAgJ29uY2UuaCcsCi0gICAgICAgICdwbGF5ZXIuaCcsCi0gICAgICAgICdxdWV1ZS5oJywKLSAgICAgICAgJ3NvY2tldC5oJywKLSAgICAgICAgJ3NvY2tldF93YWl0ZXIuaCcsCi0gICAgICAgICdzcGluX2xvY2suaCcsCi0gICAgICAgICdzdG9yYWdlLmgnLAotICAgICAgICAnc3RyaW5nLmgnLAotICAgICAgICAnc3lzdGVtLmgnLAotICAgICAgICAndGhyZWFkLmgnLAotICAgICAgICAndGhyZWFkX3R5cGVzLmgnLAotICAgICAgICAndGltZS5oJywKLSAgICAgICAgJ3RpbWVfem9uZS5oJywKLSAgICAgICAgJ3R5cGVzLmgnLAotICAgICAgICAndXNlci5oJywKLSAgICAgICAgJ3dpbmRvdy5oJywKLSAgICAgICAgIyBJbmNsdWRlIHByaXZhdGUgaGVhZGVycywgaWYgcHJlc2VudC4KLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLmJ1aWxkLmd5cF9mdW5jdGlvbnMgZmlsZV9nbG9iIDwoREVQVEgpL3N0YXJib2FyZC9wcml2YXRlICouaCknLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3N0dWIvQlVJTEQuZ24gYi9zdGFyYm9hcmQvc3R1Yi9CVUlMRC5nbgppbmRleCBmYTM5ZTE5Li4yZTcxM2JkIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc3R1Yi9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvc3R1Yi9CVUlMRC5nbgpAQCAtMjYsNyArMjYsNiBAQAogICAgICJqYXZhc2NyaXB0X2NhY2hlLmgiLAogICAgICJtYWluLmNjIiwKICAgICAic3lzdGVtX2dldF9leHRlbnNpb25zLmNjIiwKLSAgICAidGhyZWFkX3R5cGVzX3B1YmxpYy5oIiwKICAgXQogCiAgIHB1YmxpY19kZXBzID0gWyAiOnN0dWJfc291cmNlcyIgXQpAQCAtNDIsNiArNDEsOCBAQAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfbW9kZV9zdHJpbmdfdG9fZmxhZ3MuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lbW9yeS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcXVldWVfYXBwbGljYXRpb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0YXJib2FyZF9zd2l0Y2hlcy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvc3RhcmJvYXJkX3N3aXRjaGVzLmgiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X2dldF9jYXB0aW9uX3NldHRpbmdzLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfZGlzcGxheV9zZXR0aW5ncy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X3RleHRfdG9fc3BlZWNoX3NldHRpbmdzLmNjIiwKQEAgLTcwLDEyICs3MSw2IEBACiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXRfdGltZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcHVfZmVhdHVyZXNfZ2V0LmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lci5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9kZXN0cm95X3RyYW5zZm9ybWVyLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2dldF90YWcuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9zZXRfaW5pdGlhbGl6YXRpb25fdmVjdG9yLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3RyYW5zZm9ybS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RlY29kZV90YXJnZXRfZ2V0X2luZm8uY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kZWNvZGVfdGFyZ2V0X3JlbGVhc2UuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kaXJlY3RvcnlfY2FuX29wZW4uY2MiLApAQCAtOTYsNiArOTEsNyBAQAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXNzaW9uLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZW52aXJvbm1lbnQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9maWxlX2F0b21pY19yZXBsYWNlLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9jYW5fb3Blbi5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfY2xvc2UuY2MiLApAQCAtMTM0LDEyICsxMzAsOSBAQAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfdXNpbmdfbWVtb3J5X3Bvb2wuY2MiLAotICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19vdXRwdXRfcHJvdGVjdGVkLmNjIiwKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjIiwKLSAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzX3N1cHBvcnRlZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9vdXRwdXRfcHJvdGVjdGlvbi5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9hbGxvY2F0ZV9hbGlnbmVkX3VuY2hlY2tlZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9hbGxvY2F0ZV91bmNoZWNrZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfY29tcGFyZS5jYyIsCkBAIC0xNzQsNyArMTY3LDYgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9pbmZvMi5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9nZXRfbWF4aW11bV9udW1iZXJfb2Zfc2FtcGxlc19wZXJfd3JpdGUuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZS5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9vdXRwdXRfbW9kZV9zdXBwb3J0ZWQuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2VlazIuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2V0X2JvdW5kcy5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl9zZXRfcGxheWJhY2tfcmF0ZS5jYyIsCkBAIC0zMDIsNyArMjk0LDYgQEAKICAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NldF9sb2NhbF92YWx1ZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zZXRfbmFtZS5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zbGVlcC5jYyIsCi0gICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF90eXBlc19wdWJsaWMuaCIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF95aWVsZC5jYyIsCiAgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfZ2V0X21vbm90b25pY19ub3cuY2MiLAogICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aW1lX2dldF9tb25vdG9uaWNfdGhyZWFkX25vdy5jYyIsCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc3R1Yi9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3N0dWIvY29uZmlndXJhdGlvbl9wdWJsaWMuaAppbmRleCBlNjE4ZWY3Li4wNzAwZmNiIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvc3R1Yi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCisrKyBiL3N0YXJib2FyZC9zdHViL2NvbmZpZ3VyYXRpb25fcHVibGljLmgKQEAgLTE3MSwxMSArMTcxLDYgQEAKIC8vIGZvbGxvd2luZyBtYWNybyBpcyBkZWZpbmVkLCB0aGUgYXBwIHdpbGwgYXBwZW5kIGF1ZGlvIGZyYW1lcyBzdGFydCBmcm9tIHRoZQogLy8gdGltZXN0YW1wIHRoYXQgaXMgYmVmb3JlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHZpZGVvIGtleSBmcmFtZSBiZWluZyBhcHBlbmRlZC4KIC8vCi0vLyBUaGlzIHF1aXJrIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gU3RhcmJvYXJkIHZlcnNpb24gMTIgb3IgbGF0ZXIuICBQbGVhc2Ugc2VlCi0vLyBgY29uZmlndXJhdGlvbl9wdWJsaWMubWRgIGZvciBtb3JlIGRldGFpbHMuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotI3VuZGVmIFNCX0hBU19RVUlSS19TRUVLX1RPX0tFWUZSQU1FCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OIDwgMTIKIAogLy8gVGhlIGltcGxlbWVudGF0aW9uIGlzIGFsbG93ZWQgdG8gc3VwcG9ydCBrU2JNZWRpYUF1ZGlvU2FtcGxlVHlwZUludDE2IG9ubHkKIC8vIHdoZW4gdGhpcyBtYWNybyBpcyBkZWZpbmVkLgpAQCAtMTg1LDEyICsxODAsNiBAQAogCiAvLyAtLS0gTWVtb3J5IENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGhhcyBhbmQgc2hvdWxkIHVzZSBhbiBNTUFQIGZ1bmN0aW9uIHRvIG1hcCBwaHlzaWNhbAotLy8gbWVtb3J5IHRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMgotI2RlZmluZSBTQl9IQVNfTU1BUCAxCi0jZW5kaWYKLQogLy8gV2hldGhlciB0aGlzIHBsYXRmb3JtIGNhbiBtYXAgZXhlY3V0YWJsZSBtZW1vcnkuIEltcGxpZXMgU0JfSEFTX01NQVAuIFRoaXMgaXMKIC8vIHJlcXVpcmVkIGZvciBwbGF0Zm9ybXMgdGhhdCB3YW50IHRvIEpJVC4KICNkZWZpbmUgU0JfQ0FOX01BUF9FWEVDVVRBQkxFX01FTU9SWSAxCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvc3R1Yi9neXBfY29uZmlndXJhdGlvbi5neXBpIGIvc3RhcmJvYXJkL3N0dWIvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjOWYwNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc3R1Yi9neXBfY29uZmlndXJhdGlvbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAndmFyaWFibGVzJzogewotICAgICMgU3R1YiBkb2VzIG5vdCB1c2UgYSBmaWx0ZXItYmFzZWQgcGxheWVyLgotICAgICdzYl9maWx0ZXJfYmFzZWRfcGxheWVyJzogMCwKLQotICAgICd0YXJnZXRfb3MnOiAnbGludXgnLAotCi0gICAgIyBObyBHTCBkcml2ZXJzIGF2YWlsYWJsZS4KLSAgICAnZ2xfdHlwZSc6ICdub25lJywKLQotICAgICMgRGVmaW5lIHBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MuCi0gICAgIyBSZWZlciB0byBiYXNlLmd5cGkgZm9yIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHZhcmlhYmxlcy4KLSAgICAnY29tcGlsZXJfZmxhZ3NfaG9zdCc6IFsKLSAgICAgICctTzInLAotICAgICAgIyBEbyBub3Qgd2FybiBhYm91dCB1bnVzZWQgZnVuY3Rpb24gcGFyYW1zLgotICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgIF0sCi0gICAgJ2xpbmtlcl9mbGFncyc6IFsKLSAgICAgICctc3RhdGljLWxpYnN0ZGMrKycKLSAgICBdLAotICAgICdjb21waWxlcl9mbGFnc19kZWJ1Zyc6IFsKLSAgICAgICctZnJ0dGknLAotICAgICAgJy1PMCcsCi0gICAgXSwKLSAgICAnY29tcGlsZXJfZmxhZ3NfZGV2ZWwnOiBbCi0gICAgICAnLWZydHRpJywKLSAgICAgICctTzInLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX3FhJzogWwotICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAnLU8yJywKLSAgICAgICctZ2xpbmUtdGFibGVzLW9ubHknLAotICAgIF0sCi0gICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGQnOiBbCi0gICAgICAnLWZuby1ydHRpJywKLSAgICAgICctTzInLAotICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAgICdjb21tb25fY2xhbmdfZmxhZ3MnOiBbCi0gICAgICAgICAgJy1XZXJyb3InLAotICAgICAgICAgICctZmNvbG9yLWRpYWdub3N0aWNzJywKLSAgICAgICAgICAjIERlZmF1bHQgdmlzaWJpbGl0eSB0byBoaWRkZW4sIHRvIGVuYWJsZSBkZWFkIHN0cmlwcGluZy4KLSAgICAgICAgICAnLWZ2aXNpYmlsaXR5PWhpZGRlbicsCi0gICAgICAgICAgIyBXYXJuIGZvciBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb25zIHRoYXQgbWF5IGNoYW5nZSBhIHZhbHVlLgotICAgICAgICAgICctV2NvbnZlcnNpb24nLAotICAgICAgICAgICMgV2FybnMgb24gc3dpdGNoZXMgb24gZW51bXMgdGhhdCBjb3ZlciBhbGwgZW51bSB2YWx1ZXMgYnV0Ci0gICAgICAgICAgIyBhbHNvIGNvbnRhaW4gYSBkZWZhdWx0OiBicmFuY2guIENocm9tZSBpcyBmdWxsIG9mIHRoYXQuCi0gICAgICAgICAgJy1Xbm8tY292ZXJlZC1zd2l0Y2gtZGVmYXVsdCcsCi0gICAgICAgICAgIyBwcm90b2J1ZiB1c2VzIGhhc2hfbWFwLgotICAgICAgICAgICctV25vLWRlcHJlY2F0ZWQnLAotICAgICAgICAgICctZm5vLWV4Y2VwdGlvbnMnLAotICAgICAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCB0aGUgInN0cnVjdCBmb28gZiA9IHswfTsiIGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gZm9yIGltcGxpY2l0IHNpZ24gY29udmVyc2lvbnMuCi0gICAgICAgICAgJy1Xbm8tc2lnbi1jb252ZXJzaW9uJywKLSAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLCAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8zMjIwNAotICAgICAgICAgICMgVE9ETyhwa2FzdGluZyk6IEluIEMrKzExIHRoaXMgaXMgbGVnYWwsIHNvIHRoaXMgc2hvdWxkIGJlCi0gICAgICAgICAgIyByZW1vdmVkIHdoZW4gd2UgY2hhbmdlIHRvIHRoYXQuICAoVGhpcyBpcyBhbHNvIHdoeSB3ZSBkb24ndAotICAgICAgICAgICMgYm90aGVyIGZpeGluZyBhbGwgdGhlc2UgY2FzZXMgdG9kYXkuKQotICAgICAgICAgICctV25vLXVubmFtZWQtdHlwZS10ZW1wbGF0ZS1hcmdzJywKLSAgICAgICAgICAjIFRyaWdnZXJlZCBieSB0aGUgQ09NUElMRV9BU1NFUlQgbWFjcm8uCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWYnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gaWYgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSBjYW5ub3QgYmUgaW1wbGljaXRseQotICAgICAgICAgICMgaW5zdGFudGlhdGVkLgotICAgICAgICAgICctV25vLXVuZGVmaW5lZC12YXItdGVtcGxhdGUnLAotICAgICAgICAgICMgRG8gbm90IHdhcm4gYWJvdXQgdW51c2VkIGZ1bmN0aW9uIHBhcmFtcy4KLSAgICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb2JhbHRfZmFzdGJ1aWxkPT0wJywgewotICAgICAgICAnY29tcGlsZXJfZmxhZ3NfZGVidWcnOiBbCi0gICAgICAgICAgJy1nJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2RldmVsJzogWwotICAgICAgICAgICctZycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb21waWxlcl9mbGFnc19xYSc6IFsKLSAgICAgICAgICAnLWdsaW5lLXRhYmxlcy1vbmx5JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbXBpbGVyX2ZsYWdzX2dvbGQnOiBbCi0gICAgICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnX19TVERDX0ZPUk1BVF9NQUNST1MnLCAjIHNvIHRoYXQgd2UgZ2V0IFBSSSoKLSAgICAgICMgRW5hYmxlIEdOVSBleHRlbnNpb25zIHRvIGdldCBwcm90b3R5cGVzIGxpa2UgZmZzbC4KLSAgICAgICMnX0dOVV9TT1VSQ0U9MScsCi0gICAgXSwKLSAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAjIExpbWl0IHRvIEM5OS4gVGhpcyBhbGxvd3Mgc3R1YiB0byBiZSBhIGNhbmFyeSBidWlsZCBmb3IgYW55Ci0gICAgICAjIEMxMSBmZWF0dXJlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIG9uIHNvbWUgcGxhdGZvcm1zJyBjb21waWxlcnMuCi0gICAgICAjJy1zdGQ9Yzk5JywKLSAgICBdLAotICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAnLXN0ZD1nbnUrKzE0JywKLSAgICBdLAotICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiAnc3R1Yl9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ3N0dWJfZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2RlYnVnX2Jhc2UnXSwKLSAgICAgIH0sCi0gICAgICAnc3R1Yl9kZXZlbCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZGV2ZWxfYmFzZSddLAotICAgICAgfSwKLSAgICAgICdzdHViX3FhJzogewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9LAotICAgICAgJ3N0dWJfZ29sZCc6IHsKLSAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnZ29sZF9iYXNlJ10sCi0gICAgICB9LAotICAgIH0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgWydzYl9wZWRhbnRpY193YXJuaW5ncz09MScsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICctV2V4dHJhJywKLSAgICAgICAgICAnLVd1bnJlYWNoYWJsZS1jb2RlJywKLSAgICAgICAgICAnPEAoY29tbW9uX2NsYW5nX2ZsYWdzKScsCi0gICAgICAgIF0sCi0gICAgICB9LHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnPEAoY29tbW9uX2NsYW5nX2ZsYWdzKScsCi0gICAgICAgICAgIyAndGhpcycgcG9pbnRlciBjYW5ub3QgYmUgTlVMTC4uLnBvaW50ZXIgbWF5IGJlIGFzc3VtZWQKLSAgICAgICAgICAjIHRvIGFsd2F5cyBjb252ZXJ0IHRvIHRydWUuCi0gICAgICAgICAgJy1Xbm8tdW5kZWZpbmVkLWJvb2wtY29udmVyc2lvbicsCi0gICAgICAgICAgIyBTa2lhIGRvZXNuJ3QgdXNlIG92ZXJyaWRlcy4KLSAgICAgICAgICAnLVduby1pbmNvbnNpc3RlbnQtbWlzc2luZy1vdmVycmlkZScsCi0gICAgICAgICAgIyBEbyBub3Qgd2FybiBmb3IgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9ucyB0aGF0IG1heSBjaGFuZ2UgYSB2YWx1ZS4KLSAgICAgICAgICAnLVduby1jb252ZXJzaW9uJywKLSAgICAgICAgICAjIHNoaWZ0aW5nIGEgbmVnYXRpdmUgc2lnbmVkIHZhbHVlIGlzIHVuZGVmaW5lZAotICAgICAgICAgICctV25vLXNoaWZ0LW5lZ2F0aXZlLXZhbHVlJywKLSAgICAgICAgICAjIFdpZHRoIG9mIGJpdC1maWVsZCBleGNlZWRzIHdpZHRoIG9mIGl0cyB0eXBlLSB2YWx1ZSB3aWxsIGJlIHRydW5jYXRlZAotICAgICAgICAgICctV25vLWJpdGZpZWxkLXdpZHRoJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sICMgZW5kIG9mIHRhcmdldF9kZWZhdWx0cwotCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NhYmkvc2FiaS5neXBpJywKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdHViL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL3N0dWIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKaW5kZXggZGMyYTRiMi4uNTgxYzFmOSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3N0dWIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKKysrIGIvc3RhcmJvYXJkL3N0dWIvZ3lwX2NvbmZpZ3VyYXRpb24ucHkKQEAgLTE1LDE3ICsxNSw3IEBACiAKIGltcG9ydCBsb2dnaW5nCiAKLWltcG9ydCBjb25maWcuYmFzZQotZnJvbSBzdGFyYm9hcmQuYnVpbGQgaW1wb3J0IGNsYW5nIGFzIGNsYW5nX3NwZWNpZmljYXRpb24KLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBhcgotZnJvbSBzdGFyYm9hcmQudG9vbHMudG9vbGNoYWluIGltcG9ydCBiYXNoCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5nCi1mcm9tIHN0YXJib2FyZC50b29scy50b29sY2hhaW4gaW1wb3J0IGNsYW5neHgKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgY3AKLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgdG91Y2gKLQotX1NBQklfSlNPTl9QQVRIID0gJ3N0YXJib2FyZC9zYWJpL3g2NC9zeXN2L3NhYmktdntzYl9hcGlfdmVyc2lvbn0uanNvbicKK2Zyb20gc3RhcmJvYXJkLmJ1aWxkLnBsYXRmb3JtX2NvbmZpZ3VyYXRpb24gaW1wb3J0IFBsYXRmb3JtQ29uZmlndXJhdGlvbgogCiAKIGRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgpAQCAtMzYsNjkgKzI2LDYgQEAKICAgICByZXR1cm4gTm9uZQogCiAKLWNsYXNzIFN0dWJDb25maWd1cmF0aW9uKGNvbmZpZy5iYXNlLlBsYXRmb3JtQ29uZmlnQmFzZSk6CitjbGFzcyBTdHViQ29uZmlndXJhdGlvbihQbGF0Zm9ybUNvbmZpZ3VyYXRpb24pOgogICAiIiJTdGFyYm9hcmQgc3R1YiBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLiIiIgotCi0gIGRlZiBHZXRWYXJpYWJsZXMoc2VsZiwgY29uZmlndXJhdGlvbik6Ci0gICAgdmFyaWFibGVzID0gc3VwZXIoU3R1YkNvbmZpZ3VyYXRpb24sIHNlbGYpLkdldFZhcmlhYmxlcygKLSAgICAgICAgY29uZmlndXJhdGlvbiwgdXNlX2NsYW5nPTEpCi0gICAgcmV0dXJuIHZhcmlhYmxlcwotCi0gIGRlZiBHZXRFbnZpcm9ubWVudFZhcmlhYmxlcyhzZWxmKToKLSAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnaG9zdF9jb21waWxlcl9lbnZpcm9ubWVudCcpOgotICAgICAgc2VsZi5ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50ID0gYnVpbGQuR2V0SG9zdENvbXBpbGVyRW52aXJvbm1lbnQoCi0gICAgICAgICAgY2xhbmdfc3BlY2lmaWNhdGlvbi5HZXRDbGFuZ1NwZWNpZmljYXRpb24oKSwgJ2NjYWNoZScpCi0KLSAgICBlbnZfdmFyaWFibGVzID0gc2VsZi5ob3N0X2NvbXBpbGVyX2Vudmlyb25tZW50Ci0gICAgZW52X3ZhcmlhYmxlcy51cGRhdGUoewotICAgICAgICAnQ0MnOiBzZWxmLmhvc3RfY29tcGlsZXJfZW52aXJvbm1lbnRbJ0NDX2hvc3QnXSwKLSAgICAgICAgJ0NYWCc6IHNlbGYuaG9zdF9jb21waWxlcl9lbnZpcm9ubWVudFsnQ1hYX2hvc3QnXSwKLSAgICB9KQotICAgIHJldHVybiBlbnZfdmFyaWFibGVzCi0KLSAgZGVmIEdldFRhcmdldFRvb2xjaGFpbihzZWxmLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgICBlbnZpcm9ubWVudF92YXJpYWJsZXMgPSBzZWxmLkdldEVudmlyb25tZW50VmFyaWFibGVzKCkKLSAgICBjY19wYXRoID0gZW52aXJvbm1lbnRfdmFyaWFibGVzWydDQyddCi0gICAgY3h4X3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NYWCddCi0KLSAgICByZXR1cm4gWwotICAgICAgICBjbGFuZy5DQ29tcGlsZXIocGF0aD1jY19wYXRoKSwKLSAgICAgICAgY2xhbmcuQ3h4Q29tcGlsZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNsYW5nLkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yKHBhdGg9Y2NfcGF0aCksCi0gICAgICAgIGFyLlN0YXRpY1RoaW5MaW5rZXIoKSwKLSAgICAgICAgYXIuU3RhdGljTGlua2VyKCksCi0gICAgICAgIGNsYW5neHguRXhlY3V0YWJsZUxpbmtlcihwYXRoPWN4eF9wYXRoLCB3cml0ZV9ncm91cD1UcnVlKSwKLSAgICAgICAgY2xhbmd4eC5TaGFyZWRMaWJyYXJ5TGlua2VyKHBhdGg9Y3h4X3BhdGgpLAotICAgICAgICBjcC5Db3B5KCksCi0gICAgICAgIHRvdWNoLlN0YW1wKCksCi0gICAgICAgIGJhc2guU2hlbGwoKSwKLSAgICBdCi0KLSAgZGVmIEdldEhvc3RUb29sY2hhaW4oc2VsZiwgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50Ci0gICAgZW52aXJvbm1lbnRfdmFyaWFibGVzID0gc2VsZi5HZXRFbnZpcm9ubWVudFZhcmlhYmxlcygpCi0gICAgY2NfcGF0aCA9IGVudmlyb25tZW50X3ZhcmlhYmxlc1snQ0NfaG9zdCddCi0gICAgY3h4X3BhdGggPSBlbnZpcm9ubWVudF92YXJpYWJsZXNbJ0NYWF9ob3N0J10KLQotICAgIHJldHVybiBbCi0gICAgICAgIGNsYW5nLkNDb21waWxlcihwYXRoPWNjX3BhdGgpLAotICAgICAgICBjbGFuZy5DeHhDb21waWxlcihwYXRoPWN4eF9wYXRoKSwKLSAgICAgICAgY2xhbmcuQXNzZW1ibGVyV2l0aENQcmVwcm9jZXNzb3IocGF0aD1jY19wYXRoKSwKLSAgICAgICAgYXIuU3RhdGljVGhpbkxpbmtlcigpLAotICAgICAgICBhci5TdGF0aWNMaW5rZXIoKSwKLSAgICAgICAgY2xhbmd4eC5FeGVjdXRhYmxlTGlua2VyKHBhdGg9Y3h4X3BhdGgsIHdyaXRlX2dyb3VwPVRydWUpLAotICAgICAgICBjbGFuZ3h4LlNoYXJlZExpYnJhcnlMaW5rZXIocGF0aD1jeHhfcGF0aCksCi0gICAgICAgIGNwLkNvcHkoKSwKLSAgICAgICAgdG91Y2guU3RhbXAoKSwKLSAgICAgICAgYmFzaC5TaGVsbCgpLAotICAgIF0KLQotICBkZWYgR2V0VGVzdEZpbHRlcnMoc2VsZik6Ci0gICAgIiIiR2V0cyBhbGwgdGVzdHMgdG8gYmUgZXhjbHVkZWQgZnJvbSBhIHVuaXQgdGVzdCBydW4uCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IG9mIGluaXRpYWxpemVkIFRlc3RGaWx0ZXIgb2JqZWN0cy4KLSAgICAiIiIKLSAgICByZXR1cm4gW10KLQotICBkZWYgR2V0UGF0aFRvU2FiaUpzb25GaWxlKHNlbGYpOgotICAgIHJldHVybiBfU0FCSV9KU09OX1BBVEgKKyAgcGFzcwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3N0dWIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCBiL3N0YXJib2FyZC9zdHViL3N0YXJib2FyZF9wbGF0Zm9ybS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyY2NlZWYuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3N0dWIvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJ3N0dWJfc291cmNlcy5neXBpJwotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc3RhcmJvYXJkX3BsYXRmb3JtJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoc3R1Yl9zb3VyY2VzKScsCi0gICAgICAgICdhcHBsaWNhdGlvbl9zdHViLmNjJywKLSAgICAgICAgJ2FwcGxpY2F0aW9uX3N0dWIuaCcsCi0gICAgICAgICdhdG9taWNfcHVibGljLmgnLAotICAgICAgICAnY29uZmlndXJhdGlvbi5jYycsCi0gICAgICAgICdjb25maWd1cmF0aW9uLmgnLAotICAgICAgICAnY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MnLAotICAgICAgICAnZm9udC5jYycsCi0gICAgICAgICdmb250LmgnLAotICAgICAgICAnamF2YXNjcmlwdF9jYWNoZS5oJywKLSAgICAgICAgJ2phdmFzY3JpcHRfY2FjaGUuY2MnLAotICAgICAgICAnbWFpbi5jYycsCi0gICAgICAgICdzeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MnLAotICAgICAgICAndGhyZWFkX3R5cGVzX3B1YmxpYy5oJywKLSAgICAgICAgIyBJbmNsdWRlIHByaXZhdGUgc3R1YnMsIGlmIHByZXNlbnQuCi0gICAgICAgICc8IUBweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGZpbGVfZ2xvYiA8KERFUFRIKS9zdGFyYm9hcmQvcHJpdmF0ZS9zaGFyZWQvc3R1YiAqLmNjKScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGhpcyBtdXN0IGJlIGRlZmluZWQgd2hlbiBidWlsZGluZyBTdGFyYm9hcmQsIGFuZCBtdXN0IG5vdCB3aGVuCi0gICAgICAgICMgYnVpbGRpbmcgU3RhcmJvYXJkIGNsaWVudCBjb2RlLgotICAgICAgICAnU1RBUkJPQVJEX0lNUExFTUVOVEFUSU9OJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdHViL3N0dWJfc291cmNlcy5neXBpIGIvc3RhcmJvYXJkL3N0dWIvc3R1Yl9zb3VyY2VzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZWY2NTEuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3N0dWIvc3R1Yl9zb3VyY2VzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwzMTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3N0dWJfc291cmNlcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2FwcGxpY2F0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb21tYW5kX2xpbmUuaCcsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9ldmVudF9jYW5jZWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZXZlbnRfc2NoZWR1bGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9tb2RlX3N0cmluZ190b19mbGFncy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZW1vcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcXVldWVfYXBwbGljYXRpb24uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2NhcHRpb25fc2V0dGluZ3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2Rpc3BsYXlfc2V0dGluZ3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X3RleHRfdG9fc3BlZWNoX3NldHRpbmdzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X3NldF9jYXB0aW9uc19lbmFibGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hdG9taWNfcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2F1ZGlvX3NpbmtfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hdWRpb19zaW5rX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2F1ZGlvX3NpbmtfZ2V0X21heF9jaGFubmVscy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXVkaW9fc2lua19nZXRfbWluX2J1ZmZlcl9zaXplX2luX2ZyYW1lcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXVkaW9fc2lua19nZXRfbmVhcmVzdF9zdXBwb3J0ZWRfc2FtcGxlX2ZyZXF1ZW5jeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXVkaW9fc2lua19pc19hdWRpb19mcmFtZV9zdG9yYWdlX3R5cGVfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hdWRpb19zaW5rX2lzX2F1ZGlvX3NhbXBsZV90eXBlX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYXVkaW9fc2lua19pc192YWxpZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYnl0ZV9zd2FwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jaGFyYWN0ZXJfaXNfYWxwaGFudW1lcmljLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jaGFyYWN0ZXJfaXNfZGlnaXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NoYXJhY3Rlcl9pc19oZXhfZGlnaXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NoYXJhY3Rlcl9pc19zcGFjZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY2hhcmFjdGVyX2lzX3VwcGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jaGFyYWN0ZXJfdG9fbG93ZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NoYXJhY3Rlcl90b191cHBlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY29uZGl0aW9uX3ZhcmlhYmxlX2Jyb2FkY2FzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY29uZGl0aW9uX3ZhcmlhYmxlX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY29uZGl0aW9uX3ZhcmlhYmxlX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NvbmRpdGlvbl92YXJpYWJsZV9zaWduYWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NvbmRpdGlvbl92YXJpYWJsZV93YWl0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jb25kaXRpb25fdmFyaWFibGVfd2FpdF90aW1lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3B1X2ZlYXR1cmVzX2dldC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2NyZWF0ZV90cmFuc2Zvcm1lci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X2Rlc3Ryb3lfdHJhbnNmb3JtZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV9nZXRfdGFnLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcnlwdG9ncmFwaHlfc2V0X2F1dGhlbnRpY2F0ZWRfZGF0YS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvY3J5cHRvZ3JhcGh5X3NldF9pbml0aWFsaXphdGlvbl92ZWN0b3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2NyeXB0b2dyYXBoeV90cmFuc2Zvcm0uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RlY29kZV90YXJnZXRfZ2V0X2luZm8uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RlY29kZV90YXJnZXRfcmVsZWFzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZGlyZWN0b3J5X2Nhbl9vcGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kaXJlY3RvcnlfY2xvc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RpcmVjdG9yeV9jcmVhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RpcmVjdG9yeV9nZXRfbmV4dC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZGlyZWN0b3J5X29wZW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RvdWJsZV9hYnNvbHV0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZG91YmxlX2V4cG9uZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kb3VibGVfZmxvb3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RvdWJsZV9pc19maW5pdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RvdWJsZV9pc19uYW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV9jbG9zZV9zZXNzaW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fY3JlYXRlX3N5c3RlbS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2Rlc3Ryb3lfc3lzdGVtLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1fZ2VuZXJhdGVfc2Vzc2lvbl91cGRhdGVfcmVxdWVzdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX2dldF9tZXRyaWNzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZHJtX3VwZGF0ZV9zZXJ2ZXJfY2VydGlmaWNhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV91cGRhdGVfc2Vzc2lvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9jYW5fb3Blbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9jbG9zZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9kZWxldGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfZXhpc3RzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9maWxlX2ZsdXNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9maWxlX2dldF9pbmZvLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9maWxlX2dldF9wYXRoX2luZm8uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfb3Blbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvZmlsZV9yZWFkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9maWxlX3NlZWsuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfdHJ1bmNhdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ZpbGVfd3JpdGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2ltYWdlX2RlY29kZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvaW1hZ2VfaXNfZGVjb2RlX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbG9nLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9sb2dfZmx1c2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2xvZ19mb3JtYXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2xvZ19pc190dHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2xvZ19yYXcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL2xvZ19yYXdfZHVtcF9zdGFjay5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbG9nX3Jhd19mb3JtYXQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2Nhbl9wbGF5X21pbWVfYW5kX2tleV9zeXN0ZW0uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9hdWRpb19idWZmZXJfYnVkZ2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYXVkaW9fY29uZmlndXJhdGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2F1ZGlvX291dHB1dF9jb3VudC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9hbGlnbm1lbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfYnVmZmVyX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfZ2V0X21heF9idWZmZXJfY2FwYWNpdHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2dldF9wcm9ncmVzc2l2ZV9idWZmZXJfYnVkZ2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9nZXRfdmlkZW9fYnVmZmVyX2J1ZGdldC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfYXVkaW9fc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX2lzX2J1ZmZlcl91c2luZ19tZW1vcnlfcG9vbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfb3V0cHV0X3Byb3RlY3RlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc190cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Nfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZWRpYV9pc192aWRlb19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVkaWFfc2V0X291dHB1dF9wcm90ZWN0aW9uLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9hbGxvY2F0ZV91bmNoZWNrZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9jb21wYXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfY29weS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X2ZpbmRfYnl0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X2ZsdXNoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfZnJlZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X2ZyZWVfYWxpZ25lZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X2dldF9zdGFja19ib3VuZHMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9tYXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lbW9yeV9tb3ZlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfcHJvdGVjdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWVtb3J5X3JlYWxsb2NhdGVfdW5jaGVja2VkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfc2V0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tZW1vcnlfdW5tYXAuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY2xvc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfZ2V0X2F2YWlsYWJsZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfb3Blbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9yZWFkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tdXRleF9hY3F1aXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tdXRleF9hY3F1aXJlX3RyeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbXV0ZXhfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tdXRleF9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9tdXRleF9yZWxlYXNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9vbmNlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX2dldF9jdXJyZW50X2ZyYW1lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X2luZm8yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X21heGltdW1fbnVtYmVyX29mX3NhbXBsZXNfcGVyX3dyaXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfZ2V0X3ByZWZlcnJlZF9vdXRwdXRfbW9kZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX291dHB1dF9tb2RlX3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NlZWsyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2V0X2JvdW5kcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3NldF9wbGF5YmFja19yYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9wbGF5ZXJfc2V0X3ZvbHVtZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvcGxheWVyX3dyaXRlX2VuZF9vZl9zdHJlYW0uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3BsYXllcl93cml0ZV9zYW1wbGUyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfYWNjZXB0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfYmluZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2NsZWFyX2xhc3RfZXJyb3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9jb25uZWN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfY3JlYXRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2ZyZWVfcmVzb2x1dGlvbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2dldF9sYXN0X2Vycm9yLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfZ2V0X2xvY2FsX2FkZHJlc3MuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9pc19jb25uZWN0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9pc19jb25uZWN0ZWRfYW5kX2lkbGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9pc19pcHY2X3N1cHBvcnRlZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X2pvaW5fbXVsdGljYXN0X2dyb3VwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfbGlzdGVuLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfcmVjZWl2ZV9mcm9tLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfcmVzb2x2ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X3NlbmRfdG8uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9zZXRfYnJvYWRjYXN0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF9zZXRfcmV1c2VfYWRkcmVzcy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X3NldF9zZW5kX2J1ZmZlcl9zaXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfc2V0X3RjcF9rZWVwX2FsaXZlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfc2V0X3RjcF9ub19kZWxheS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X3NldF90Y3Bfd2luZG93X3NjYWxpbmcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF93YWl0ZXJfYWRkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfd2FpdGVyX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X3dhaXRlcl9kZXN0cm95LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfd2FpdGVyX3JlbW92ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc29ja2V0X3dhaXRlcl93YWl0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zb2NrZXRfd2FpdGVyX3dhaXRfdGltZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NvY2tldF93YWl0ZXJfd2FrZV91cC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19jYW5jZWwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfaXNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX3NwZWFrLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdG9yYWdlX2Nsb3NlX3JlY29yZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RvcmFnZV9kZWxldGVfcmVjb3JkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdG9yYWdlX2dldF9yZWNvcmRfc2l6ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RvcmFnZV9vcGVuX3JlY29yZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RvcmFnZV9yZWFkX3JlY29yZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RvcmFnZV93cml0ZV9yZWNvcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19jb21wYXJlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfY29tcGFyZV9hbGwuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19jb21wYXJlX25vX2Nhc2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19jb21wYXJlX25vX2Nhc2Vfbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2NvbXBhcmVfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2NvbmNhdC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2NvbmNhdF93aWRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfY29weS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2NvcHlfd2lkZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2R1cGxpY2F0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2ZpbmRfY2hhcmFjdGVyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfZmluZF9sYXN0X2NoYXJhY3Rlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3RyaW5nX2ZpbmRfc3RyaW5nLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfZm9ybWF0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfZm9ybWF0X3dpZGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19nZXRfbGVuZ3RoLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfZ2V0X2xlbmd0aF93aWRlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfcGFyc2VfZG91YmxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfcGFyc2Vfc2lnbmVkX2ludGVnZXIuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19wYXJzZV91aW50NjQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N0cmluZ19wYXJzZV91bnNpZ25lZF9pbnRlZ2VyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zdHJpbmdfc2Nhbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2JpbmFyeV9zZWFyY2guY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9icmVha19pbnRvX2RlYnVnZ2VyLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fY2xlYXJfbGFzdF9lcnJvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2VnbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF9jb25uZWN0aW9uX3R5cGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfZGV2aWNlX3R5cGUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfZXJyb3Jfc3RyaW5nLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X2xhc3RfZXJyb3IuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfbG9jYWxlX2lkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X251bWJlcl9vZl9wcm9jZXNzb3JzLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X3BhdGguY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfcHJvcGVydHkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfcmFuZG9tX2RhdGEuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfcmFuZG9tX3VpbnQ2NC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF9zdGFjay5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF90b3RhbF9jcHVfbWVtb3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X3RvdGFsX2dwdV9tZW1vcnkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9nZXRfdXNlZF9jcHVfbWVtb3J5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fZ2V0X3VzZWRfZ3B1X21lbW9yeS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dsZXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9oYXNfY2FwYWJpbGl0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2hpZGVfc3BsYXNoX3NjcmVlbi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX25ldHdvcmtfaXNfZGlzY29ubmVjdGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1faXNfZGVidWdnZXJfYXR0YWNoZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yYWlzZV9wbGF0Zm9ybV9lcnJvci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfYmx1ci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfY29uY2VhbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfZm9jdXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yZXF1ZXN0X2ZyZWV6ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfcGF1c2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9yZXF1ZXN0X3JldmVhbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3Rfc3RvcC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3Rfc3VzcGVuZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3JlcXVlc3RfdW5wYXVzZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3NpZ25fd2l0aF9jZXJ0aWZpY2F0aW9uX3NlY3JldF9rZXkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3N5c3RlbV9zb3J0LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fc3VwcG9ydHNfcmVzdW1lLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1fc3ltYm9saXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfY29udGV4dF9nZXRfcG9pbnRlci5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9wcmlvcml0eS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2NyZWF0ZV9sb2NhbF9rZXkuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9kZXN0cm95X2xvY2FsX2tleS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2RldGFjaC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2dldF9jdXJyZW50LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfZ2V0X2lkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfZ2V0X2xvY2FsX3ZhbHVlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfZ2V0X25hbWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9pc19lcXVhbC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX2pvaW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zYW1wbGVyX2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfZGVzdHJveS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfZnJlZXplLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfc2FtcGxlcl9pc19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zYW1wbGVyX3RoYXcuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zZXRfbG9jYWxfdmFsdWUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9zZXRfbmFtZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NsZWVwLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfdHlwZXNfcHVibGljLmgnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF95aWVsZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGltZV9nZXRfbW9ub3RvbmljX25vdy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGltZV9nZXRfbW9ub3RvbmljX3RocmVhZF9ub3cuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfZ2V0X25vdy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGltZV9pc190aW1lX3RocmVhZF9ub3dfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aW1lX3pvbmVfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfem9uZV9nZXRfbmFtZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdWlfbmF2X2dldF9pbnRlcmZhY2UuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3VzZXJfZ2V0X2N1cnJlbnQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3VzZXJfZ2V0X3Byb3BlcnR5LmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi91c2VyX2dldF9zaWduZWRfaW4uY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19ibHVyX29uX3NjcmVlbl9rZXlib2FyZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2NyZWF0ZS5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2Rlc3Ryb3kuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19mb2N1c19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfZGlhZ29uYWxfc2l6ZV9pbl9pbmNoZXMuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfb25fc2NyZWVuX2tleWJvYXJkX2JvdW5kaW5nX3JlY3QuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfcGxhdGZvcm1faGFuZGxlLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZ2V0X3NpemUuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19oaWRlX29uX3NjcmVlbl9rZXlib2FyZC5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2lzX29uX3NjcmVlbl9rZXlib2FyZF9zaG93bi5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19vbl9zY3JlZW5fa2V5Ym9hcmRfc3VnZ2VzdGlvbnNfc3VwcG9ydGVkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2V0X2RlZmF1bHRfb3B0aW9ucy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3NldF9vbl9zY3JlZW5fa2V5Ym9hcmRfa2VlcF9mb2N1cy5jYycsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X3Nob3dfb25fc2NyZWVuX2tleWJvYXJkLmNjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYycsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC9zdHViL3RocmVhZF90eXBlc19wdWJsaWMuaCBiL3N0YXJib2FyZC9zdHViL3RocmVhZF90eXBlc19wdWJsaWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkZDkzZi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvc3R1Yi90aHJlYWRfdHlwZXNfcHVibGljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIEluY2x1ZGVzIHRocmVhZGluZyBwcmltaXRpdmUgdHlwZXMgYW5kIGluaXRpYWxpemVycy4KLQotI2lmbmRlZiBTVEFSQk9BUkRfU1RVQl9USFJFQURfVFlQRVNfUFVCTElDX0hfCi0jZGVmaW5lIFNUQVJCT0FSRF9TVFVCX1RIUkVBRF9UWVBFU19QVUJMSUNfSF8KLQotI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8gU1RBUkJPQVJEX1NUVUJfVEhSRUFEX1RZUEVTX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3N5c3RlbS5oIGIvc3RhcmJvYXJkL3N5c3RlbS5oCmluZGV4IDU5ZWZjZWQuLmViZDEwMDUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC9zeXN0ZW0uaAorKysgYi9zdGFyYm9hcmQvc3lzdGVtLmgKQEAgLTU4LDE4ICs1OCwxOCBAQAogICAvLyBQYXRoIHRvIGEgZGlyZWN0b3J5IHdoZXJlIHRlbXBvcmFyeSBmaWxlcyBjYW4gYmUgd3JpdHRlbi4KICAga1NiU3lzdGVtUGF0aFRlbXBEaXJlY3RvcnksCiAKKyNpZiBTQl9BUElfVkVSU0lPTiA8IFNCX1NZU1RFTV9QQVRIX1RFU1RfT1VUUFVUX0RJUkVDVE9SWV9ERVBSRUNBVEVECiAgIC8vIFBhdGggdG8gYSBkaXJlY3Rvcnkgd2hlcmUgdGVzdCByZXN1bHRzIGNhbiBiZSB3cml0dGVuLgogICBrU2JTeXN0ZW1QYXRoVGVzdE91dHB1dERpcmVjdG9yeSwKKyNlbmRpZiAgLy8gI2lmIFNCX0FQSV9WRVJTSU9OIDwgU0JfU1lTVEVNX1BBVEhfVEVTVF9PVVRQVVRfRElSRUNUT1JZX0RFUFJFQ0FURUQKIAogICAvLyBGdWxsIHBhdGggdG8gdGhlIGV4ZWN1dGFibGUgZmlsZS4KICAga1NiU3lzdGVtUGF0aEV4ZWN1dGFibGVGaWxlLAogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgLy8gUGF0aCB0byBhIGRpcmVjdG9yeSBmb3IgcGVybWFuZW50IGZpbGUgc3RvcmFnZS4gQm90aCByZWFkIGFuZCB3cml0ZQogICAvLyBhY2Nlc3MgaXMgcmVxdWlyZWQuIFRoaXMgaXMgd2hlcmUgYW4gYXBwIG1heSBzdG9yZSBpdHMgcGVyc2lzdGVudCBzZXR0aW5ncy4KICAgLy8gVGhlIGxvY2F0aW9uIHNob3VsZCBiZSB1c2VyIGFnbm9zdGljIGlmIHBvc3NpYmxlLgogICBrU2JTeXN0ZW1QYXRoU3RvcmFnZURpcmVjdG9yeSwKLSNlbmRpZgogfSBTYlN5c3RlbVBhdGhJZDsKIAogLy8gU3lzdGVtIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgcXVlcmllZCBmb3IuIE1hbnkgb2YgdGhlc2UgYXJlIHVzZWQgaW4KQEAgLTEwOSwxNiArMTA5LDkgQEAKICAgLy8gVGhlIHllYXIgdGhlIGRldmljZSB3YXMgbGF1bmNoZWQsIGUuZy4gIjIwMTYiLgogICBrU2JTeXN0ZW1Qcm9wZXJ0eU1vZGVsWWVhciwKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIC8vIFRoZSBjb3Jwb3JhdGUgZW50aXR5IHJlc3BvbnNpYmxlIGZvciBzdWJtaXR0aW5nIHRoZSBkZXZpY2UgdG8gWW91VHViZQogICAvLyBjZXJ0aWZpY2F0aW9uIGFuZCBmb3IgdGhlIGRldmljZSBtYWludGVuYW5jZS91cGRhdGVzLgogICBrU2JTeXN0ZW1Qcm9wZXJ0eVN5c3RlbUludGVncmF0b3JOYW1lLAotI2Vsc2UKLSAgLy8gVGhlIGNvcnBvcmF0ZSBlbnRpdHkgcmVzcG9uc2libGUgZm9yIHRoZSBtYW51ZmFjdHVyaW5nL2Fzc2VtYmx5IG9mIHRoZQotICAvLyBkZXZpY2Ugb24gYmVoYWxmIG9mIHRoZSBidXNpbmVzcyBlbnRpdHkgb3duaW5nIHRoZSBicmFuZC4gIFRoaXMgaXMgb2Z0ZW4KLSAgLy8gYWJicmV2aWF0ZWQgYXMgT0RNLgotICBrU2JTeXN0ZW1Qcm9wZXJ0eU9yaWdpbmFsRGVzaWduTWFudWZhY3R1cmVyTmFtZSwKLSNlbmRpZgogCiAgIC8vIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBwbGF0Zm9ybSwgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbiBhCiAgIC8vIFVzZXItQWdlbnQsIHNheS4KQEAgLTE2MCw2ICsxNTMsMTEgQEAKICAgLy8gQW4gQW5kcm9pZCBUViBEZXZpY2UuCiAgIGtTYlN5c3RlbURldmljZVR5cGVBbmRyb2lkVFYsCiAKKyNpZiBTQl9BUElfVkVSU0lPTiA+PSBTQl9TWVNURU1fREVWSUNFX1BST0pFQ1RPUl9BRERFRAorICAvLyBBIHdhbGwgdmlkZW8gcHJvamVjdG9yLgorICBrU2JTeXN0ZW1EZXZpY2VUeXBlVmlkZW9Qcm9qZWN0b3IsCisjZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IFNCX1NZU1RFTV9ERVZJQ0VfUFJPSkVDVE9SX0FEREVECisKICAgLy8gVW5rbm93biBkZXZpY2UuCiAgIGtTYlN5c3RlbURldmljZVR5cGVVbmtub3duLAogfSBTYlN5c3RlbURldmljZVR5cGU7CkBAIC02MjksMTAgKzYyNyw2IEBACiAvLyBDb21wdXRlcyBhIEhNQUMtU0hBMjU2IGRpZ2VzdCBvZiB8bWVzc2FnZXwgaW50byB8ZGlnZXN0fCB1c2luZyB0aGUKIC8vIGFwcGxpY2F0aW9uJ3MgY2VydGlmaWNhdGlvbiBzZWNyZXQuCiAvLwotLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW1wbGVtZW50ZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gaW1wbGVtZW50aW5nCi0vLyBTYlN5c3RlbUdldFByb3BlcnR5KGtTYlN5c3RlbVByb3BlcnR5QmFzZTY0RW5jb2RlZENlcnRpZmljYXRpb25TZWNyZXQpLAotLy8gaG93ZXZlciBib3RoIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQuCi0vLwogLy8gVGhlIG91dHB1dCB3aWxsIGJlIHdyaXR0ZW4gaW50byB8ZGlnZXN0fC4gIHxkaWdlc3Rfc2l6ZV9pbl9ieXRlc3wgbXVzdCBiZSAzMgogLy8gKG9yIGdyZWF0ZXIpLCBzaW5jZSAzMi1ieXRlcyB3aWxsIGJlIHdyaXR0ZW4gaW50byBpdC4KIC8vIFJldHVybnMgZmFsc2UgaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsIG9yIGlmIGl0IGlzIG5vdCBpbXBsZW1lbnRlZC4gIEluIHRoaXMKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90ZXN0aW5nL2Zha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlci5jYyBiL3N0YXJib2FyZC90ZXN0aW5nL2Zha2VfZ3JhcGhpY3NfY29udGV4dF9wcm92aWRlci5jYwppbmRleCBiOWU4Mjc5Li4yMzdkMzJlIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdGVzdGluZy9mYWtlX2dyYXBoaWNzX2NvbnRleHRfcHJvdmlkZXIuY2MKKysrIGIvc3RhcmJvYXJkL3Rlc3RpbmcvZmFrZV9ncmFwaGljc19jb250ZXh0X3Byb3ZpZGVyLmNjCkBAIC0yMzEsMTEgKzIzMSw2IEBACiAgIEVHTGludCBjb250ZXh0X2F0dHJpYl9saXN0W10gPSB7CiAgICAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMywgRUdMX05PTkUsCiAgIH07Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPCAxMiAmJiBkZWZpbmVkKEdMRVMzX1NVUFBPUlRFRCkKLSAgLy8gQXR0ZW1wdCB0byBjcmVhdGUgYW4gT3BlbkdMIEVTIDMuMCBjb250ZXh0LgotICBjb250ZXh0XyA9IEVHTF9DQUxMX1NJTVBMRSgKLSAgICAgIGVnbENyZWF0ZUNvbnRleHQoZGlzcGxheV8sIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRfYXR0cmliX2xpc3QpKTsKLSNlbmRpZgogICBpZiAoY29udGV4dF8gPT0gRUdMX05PX0NPTlRFWFQpIHsKICAgICAvLyBDcmVhdGUgYW4gT3BlbkdMIEVTIDIuMCBjb250ZXh0LgogICAgIGNvbnRleHRfYXR0cmliX2xpc3RbMV0gPSAyOwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3RocmVhZC5oIGIvc3RhcmJvYXJkL3RocmVhZC5oCmluZGV4IGEwNGUzOGEuLmJmNWM4MWQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90aHJlYWQuaAorKysgYi9zdGFyYm9hcmQvdGhyZWFkLmgKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2V4cG9ydC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWRfdHlwZXMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGltZS5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgogCkBAIC0yOSwxNSArMjgsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgotCiAvLyBBbiBvcGFxdWUgaGFuZGxlIHRvIGEgdGhyZWFkIHR5cGUuCiB0eXBlZGVmIHZvaWQqIFNiVGhyZWFkOwogCiAjZGVmaW5lIGtTYlRocmVhZEludmFsaWQgKFNiVGhyZWFkKSBOVUxMCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogLy8gQSBzcGVjdHJ1bSBvZiB0aHJlYWQgcHJpb3JpdGllcy4gUGxhdGZvcm1zIG1hcCB0aGVtIGFwcHJvcHJpYXRlbHkgdG8gdGhlaXIKIC8vIG93biBwcmlvcml0eSBzeXN0ZW0uIE5vdGUgdGhhdCBzY2hlZHVsaW5nIGlzIHBsYXRmb3JtLXNwZWNpZmljLCBhbmQgd2hhdAogLy8gdGhlc2UgcHJpb3JpdGllcyBtZWFuLCBpZiB0aGV5IG1lYW4gYW55dGhpbmcgYXQgYWxsLCBpcyBhbHNvCkBAIC0yOTMsMTEgKzI4OCw5IEBACiAgIC8vIFBvaW50ZXIgdG8gdGhlIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgogICBrU2JUaHJlYWRDb250ZXh0RnJhbWVQb2ludGVyLAogCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgLy8gUG9pbnRlciB0byB3aGVyZSB0byByZXR1cm4gdG8gd2hlbiB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsIGNvbXBsZXRlcywgb3IKICAgLy8gbnVsbHB0ciBvbiBwbGF0Zm9ybXMgd2l0aG91dCBhIGxpbmsgcmVnaXN0ZXIuCiAgIGtTYlRocmVhZENvbnRleHRMaW5rUmVnaXN0ZXIsCi0jZW5kaWYgIC8vIFNCX0FQSV9WRVJTSU9OID49IDEyCiB9IFNiVGhyZWFkQ29udGV4dFByb3BlcnR5OwogCiAvLyBHZXRzIHRoZSBzcGVjaWZpZWQgcG9pbnRlci10eXBlIHxwcm9wZXJ0eXwgZnJvbSB0aGUgc3BlY2lmaWVkIHxjb250ZXh0fC4KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90aHJlYWRfdHlwZXMuaCBiL3N0YXJib2FyZC90aHJlYWRfdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3NjA4NS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdGhyZWFkX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS8vIE1vZHVsZSBPdmVydmlldzogU3RhcmJvYXJkIFRocmVhZCBUeXBlcyBtb2R1bGUKLS8vCi0vLyBEZWZpbmVzIHBsYXRmb3JtLXNwZWNpZmljIHRocmVhZGluZyBhbmQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB0eXBlcyBhbmQKLS8vIGluaXRpYWxpemVycy4gV2UgaGlkZSwgYnV0IHBhc3MgdGhyb3VnaCwgdGhlIHBsYXRmb3JtJ3MgcHJpbWl0aXZlcyB0byBhdm9pZAotLy8gZG9pbmcgYSBsb3Qgb2Ygd29yayB0byByZXBsaWNhdGUgaW5pdGlhbGl6YXRpb24tbGVzcyBzeW5jaHJvbml6YXRpb24KLS8vIHByaW1pdGl2ZXMuCi0KLS8vIFRPRE86IEltcGxlbWVudCBhIGNyb3NzLXBsYXRmb3JtIGluaXRsZXNzIHN5bmNocm9uaXphdGlvbiBtb2RlbCwgYW5kCi0vLyB0aGVuIHByb3Blcmx5IGhpZGUgdGhyZWFkIHByaW1pdGl2ZXMuIFRoaXMgY291bGQgbG9vayBsaWtlIGltcGxlbWVudGluZyBvdXIKLS8vIG93biBoaWdoLXBlcmZvcm1hbmNlIGluaXQtbGVzcyBsb2NrIChlLmcuIE1DUyBvciBDTEgpIHVzaW5nIHRoZSBBdG9taWNzCi0vLyBhYnN0cmFjdGlvbiwgYW5kIHVzZSB0aGF0IG9uIGFsbCBwbGF0Zm9ybXMgYW5kIGhvcGUgcmVhbGx5IGhhcmQgdGhhdCB3ZQotLy8gZGlkbid0IG1lc3MgaXQgdXAgYW5kIHRoZW4gdXNlIHRoYXQgdG8gYXV0by1pbml0IHVuaW5pdGlhbGl6ZWQgc3RhdGljCi0vLyBvYmplY3RzLgotCi0jaWZuZGVmIFNUQVJCT0FSRF9USFJFQURfVFlQRVNfSF8KLSNkZWZpbmUgU1RBUkJPQVJEX1RIUkVBRF9UWVBFU19IXwotCi0jaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKLQotI2lmIFNCX0FQSV9WRVJTSU9OIDwgMTIKLQotLy8gVGhpcyBwbGF0Zm9ybS1zcGVjaWZpYyBpbmNsdWRlIGZpbGUgbXVzdCBkZWZpbmU6Ci0vLwotLy8gICBTYkNvbmRpdGlvblZhcmlhYmxlCi0vLyAgIFNCX0NPTkRJVElPTl9WQVJJQUJMRV9JTklUSUFMSVpFUgotLy8KLS8vICAgU2JNdXRleAotLy8gICBTQl9NVVRFWF9JTklUSUFMSVpFUgotLy8KLS8vICAgU2JUaHJlYWQKLS8vICAgU2JUaHJlYWRJc1ZhbGlkKCkKLS8vICAga1NiVGhyZWFkSW52YWxpZAotLy8KLS8vICAgU2JPbmNlCi0vLyAgIFNCX09OQ0VfSU5JVElBTElJRVIKLQotI2luY2x1ZGUgU1RBUkJPQVJEX1RIUkVBRF9UWVBFU19JTkNMVURFCi0KLSNpZm5kZWYgU0JfQ09ORElUSU9OX1ZBUklBQkxFX0lOSVRJQUxJWkVSCi0jZXJyb3IgIlNCX0NPTkRJVElPTl9WQVJJQUJMRV9JTklUSUFMSVpFUiBub3QgZGVmaW5lZCBieSBwbGF0Zm9ybS4iCi0jZW5kaWYKLQotI2lmbmRlZiBTQl9NVVRFWF9JTklUSUFMSVpFUgotI2Vycm9yICJTQl9NVVRFWF9JTklUSUFMSVpFUiBub3QgZGVmaW5lZCBieSBwbGF0Zm9ybS4iCi0jZW5kaWYKLQotI2lmbmRlZiBTQl9PTkNFX0lOSVRJQUxJWkVSCi0jZXJyb3IgIlNCX09OQ0VfSU5JVElBTElaRVIgbm90IGRlZmluZWQgYnkgcGxhdGZvcm0uIgotI2VuZGlmCi0KLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPCAxMgotI2VuZGlmICAvLyBTVEFSQk9BUkRfVEhSRUFEX1RZUEVTX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdGltZS5oIGIvc3RhcmJvYXJkL3RpbWUuaAppbmRleCBjNzFhNzAwLi5lNTEyN2ZmIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdGltZS5oCisrKyBiL3N0YXJib2FyZC90aW1lLmgKQEAgLTkxLDEyICs5MSw4IEBACiAvLyBHZXRzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHRpbWUgcmVwcmVzZW50aW5nIHJpZ2h0IG5vdy4KIFNCX0VYUE9SVCBTYlRpbWVNb25vdG9uaWMgU2JUaW1lR2V0TW9ub3RvbmljTm93KCk7CiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotCi0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKIC8vIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBzdXBwb3J0cyB0aW1lIHRocmVhZCBub3cKIFNCX0VYUE9SVCBib29sIFNiVGltZUlzVGltZVRocmVhZE5vd1N1cHBvcnRlZCgpOwotI2VuZGlmCiAKIC8vIEdldHMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdGltZSByZXByZXNlbnRpbmcgaG93IGxvbmcgdGhlIGN1cnJlbnQKIC8vIHRocmVhZCBoYXMgYmVlbiBpbiB0aGUgZXhlY3V0aW5nIHN0YXRlIChpLmUuIG5vdCBwcmUtZW1wdGVkIG5vciB3YWl0aW5nCkBAIC0xMDUsOSArMTAxLDYgQEAKIC8vIGF2YWlsYWJsZSB0aGVuIFNiVGltZUdldE1vbm90b25pY05vdygpIHNob3VsZCBiZSB1c2VkLgogU0JfRVhQT1JUIFNiVGltZU1vbm90b25pYyBTYlRpbWVHZXRNb25vdG9uaWNUaHJlYWROb3coKTsKIAotI2VuZGlmICAvLyBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fAotICAgICAgICAvLyBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0gIC8vIGV4dGVybiAiQyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL0JVSUxELmduIGIvc3RhcmJvYXJkL3Rvb2xzL0JVSUxELmduCmluZGV4IGI0ZjFmZmQuLjI3ZGNhMTQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90b29scy9CVUlMRC5nbgorKysgYi9zdGFyYm9hcmQvdG9vbHMvQlVJTEQuZ24KQEAgLTEzLDI0ICsxMywxMyBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogYWN0aW9uKCJidWlsZF9hcHBfbGF1bmNoZXJfemlwIikgewotICBzY3JpcHQgPSAiLy9zdGFyYm9hcmQvYnVpbGQvcnVuX2Jhc2gucHkiCi0gIHB5X3NjcmlwdCA9ICIvL3N0YXJib2FyZC90b29scy9hcHBfbGF1bmNoZXJfcGFja2FnZXIucHkiCisgIHNjcmlwdCA9ICIvL3N0YXJib2FyZC90b29scy9hcHBfbGF1bmNoZXJfcGFja2FnZXIucHkiCiAKLSAgZmlsZV9saXN0ID0gZXhlY19zY3JpcHQoIi8vc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWJhc2VfcGF0aChweV9zY3JpcHQsIHJvb3RfYnVpbGRfZGlyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpbSBzdHJpbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbIHB5X3NjcmlwdCBdKQorICBmaWxlX2xpc3QgPSBleGVjX3NjcmlwdChzY3JpcHQsIFsgIi1sIiBdLCAidHJpbSBzdHJpbmciKQogICBpbnB1dHMgPSBzdHJpbmdfc3BsaXQoZmlsZV9saXN0KQotICBpbnB1dHMgKz0gWyBweV9zY3JpcHQgXQogICBvdXRwdXRzID0gWyAiJHJvb3Rfb3V0X2Rpci9hcHBfbGF1bmNoZXIuemlwIiBdCiAKICAgYXJncyA9IFsKLSAgICAicHl0aG9uMiIsCi0gICAgcmViYXNlX3BhdGgocHlfc2NyaXB0LCByb290X2J1aWxkX2RpciksCiAgICAgIi16IiwKICAgICByZWJhc2VfcGF0aChvdXRwdXRzWzBdLCByb290X2J1aWxkX2RpciksCiAgIF0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9fZW52LnB5IGIvc3RhcmJvYXJkL3Rvb2xzL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWltcG9ydCBzeXMKLQotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2Fic3RyYWN0X2xhdW5jaGVyLnB5IGIvc3RhcmJvYXJkL3Rvb2xzL2Fic3RyYWN0X2xhdW5jaGVyLnB5CmluZGV4IDg1OTYzY2IuLmEzODVhZDQgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90b29scy9hYnN0cmFjdF9sYXVuY2hlci5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvYWJzdHJhY3RfbGF1bmNoZXIucHkKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGJ1aWxkCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGF0aHMKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2FwcF9sYXVuY2hlcl9wYWNrYWdlci5weSBiL3N0YXJib2FyZC90b29scy9hcHBfbGF1bmNoZXJfcGFja2FnZXIucHkKaW5kZXggYzIyOGE5NS4uMWU5Y2RhMCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL2FwcF9sYXVuY2hlcl9wYWNrYWdlci5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvYXBwX2xhdW5jaGVyX3BhY2thZ2VyLnB5CkBAIC0yNCwyNyArMjQsMTkgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzdHJpbmcKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAotZnJvbSBwYXRocyBpbXBvcnQgUkVQT1NJVE9SWV9ST09UCi1mcm9tIHBhdGhzIGltcG9ydCBUSElSRF9QQVJUWV9ST09UCi0KLXN5cy5wYXRoLmFwcGVuZChUSElSRF9QQVJUWV9ST09UKQotIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcCxnLWJhZC1pbXBvcnQtb3JkZXIsd3JvbmctaW1wb3J0LXBvc2l0aW9uCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgY29tbWFuZF9saW5lCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgbG9nX2xldmVsCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcG9ydF9zeW1saW5rCi1pbXBvcnQgc3RhcmJvYXJkLnRvb2xzLnBsYXRmb3JtCitmcm9tIHN0YXJib2FyZC50b29scy5wYXRocyBpbXBvcnQgUkVQT1NJVE9SWV9ST09UCiAKICMgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBhcHAgbGF1bmNoZXIgcmVzb3VyY2VzLgogX0lOQ0xVREVfRklMRV9QQVRURVJOUyA9IFsKICAgICAoJ2NvYmFsdCcsICcqLnB5JyksCiAgICAgKCdzdGFyYm9hcmQnLCAnKi5weScpLAogICAgICgnc3RhcmJvYXJkJywgJyoucGZ4JyksCi0gICAgKCdzdGFyYm9hcmQvdG9vbHMnLCAncGxhdGZvcm0ucHkudGVtcGxhdGUnKSwKICAgICAjIEp1c3QgbWF0Y2ggZXZlcnl0aGluZyBzaW5jZSB0aGUgRXZlcmdyZWVuIHRlc3RzIGFyZSB3cml0dGVuIHVzaW5nIHNoZWxsCiAgICAgIyBzY3JpcHRzIGFuZCBodG1sIGZpbGVzLgogICAgICgnc3RhcmJvYXJkL2V2ZXJncmVlbi90ZXN0aW5nJywgJyonKQpAQCAtMTA3LDQwICs5OSw2IEBACiAgIHJldHVybiBmaWxlX2xpc3QKIAogCi1kZWYgX1dyaXRlUGxhdGZvcm1zSW5mbyhyZXBvX3Jvb3QsIGRlc3Rfcm9vdCk6Ci0gICIiIkdldCBwbGF0Zm9ybXMnIGluZm9ybWF0aW9uIGFuZCB3cml0ZSB0aGUgcGxhdGZvcm0ucHkgYmFzZWQgb24gYSB0ZW1wbGF0ZS4KLQotICBQbGF0Zm9ybS5weSBpcyByZXNwb25zaWJsZSBmb3IgZW51bWVyYXRpbmcgYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMgaW4gdGhlCi0gIENvYmFsdCBzb3VyY2UgdHJlZS4gIFNpbmNlIHdlIGFyZSBleHRyYWN0aW5nIHRoZSBhcHAgbGF1bmNoZXIgc2NyaXB0IGZyb20gdGhlCi0gIENvYmFsdCBzb3VyY2UgdHJlZSwgdGhpcyBmdW5jdGlvbiByZWNvcmRzIHdoaWNoIHBsYXRmb3JtcyBhcmUgc3VwcG9ydGVkIHdoaWxlCi0gIHRoZSBDb2JhbHQgc291cmNlIHRyZWUgaXMgc3RpbGwgYXZhaWxhYmxlIGFuZCBiYWtlcyB0aGVtIGluIHRvIGEgbmV3bHkgY3JlYXRlZAotICBwbGF0Zm9ybS5weSBmaWxlIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBDb2JhbHQgc291cmNlIHRyZWUuCi0KLSAgQXJnczoKLSAgICByZXBvX3Jvb3Q6IEFic29sdXRlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkgd2hlcmUgcGxhdGZvcm1zJwotICAgICAgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkLgotICAgIGRlc3Rfcm9vdDogQWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgbmV3IHJlcG9zaXRvcnkgaW50byB3aGljaAotICAgICAgcGxhdGZvcm1zJyBpbmZvcm1hdGlvbiB0byBiZSB3cml0dGVuLgotICAiIiIKLSAgbG9nZ2luZy5pbmZvKCdCYWtpbmcgcGxhdGZvcm0gaW5mbyBmaWxlcy4nKQotICBjdXJyZW50X2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCi0gIGN1cnJlbnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKGN1cnJlbnRfZmlsZSkKLSAgZGVzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdF9yb290LCAnc3RhcmJvYXJkJywgJ3Rvb2xzJykKLSAgcGxhdGZvcm1zX21hcCA9IHt9Ci0gIGZvciBwIGluIHN0YXJib2FyZC50b29scy5wbGF0Zm9ybS5HZXRBbGwoKToKLSAgICBwbGF0Zm9ybV9wYXRoID0gb3MucGF0aC5yZWxwYXRoKAotICAgICAgICBzdGFyYm9hcmQudG9vbHMucGxhdGZvcm0uR2V0KHApLnBhdGgsIHJlcG9fcm9vdCkKLSAgICAjIFN0b3JlIHBvc2l4IHBhdGhzIGV2ZW4gb24gV2luZG93cyBzbyBNSCBMaW51eCBob3N0cyBjYW4gdXNlIHRoZW0uCi0gICAgIyBUaGUgdGVtcGxhdGUgaGFzIGNvZGUgdG8gcmUtbm9ybWFsaXplIHRoZW0gd2hlbiB1c2VkIG9uIFdpbmRvd3MgaG9zdHMuCi0gICAgcGxhdGZvcm1zX21hcFtwXSA9IHBsYXRmb3JtX3BhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0gIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oY3VycmVudF9kaXIsICdwbGF0Zm9ybS5weS50ZW1wbGF0ZScpKSBhcyBjOgotICAgIHRlbXBsYXRlID0gc3RyaW5nLlRlbXBsYXRlKGMucmVhZCgpKQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVzdF9kaXIsICdwbGF0Zm9ybS5weScpLCAndysnKSBhcyBmOgotICAgICAgc3ViID0gdGVtcGxhdGUuc3Vic3RpdHV0ZShwbGF0Zm9ybXNfbWFwPXBsYXRmb3Jtc19tYXApCi0gICAgICBmLndyaXRlKHN1Yi5lbmNvZGUoJ3V0Zi04JykpCi0gIGxvZ2dpbmcuaW5mbygnRmluaXNoZWQgYmFraW5nIGluIHBsYXRmb3JtIGluZm8gZmlsZXMuJykKLQotCiBkZWYgQ29weUFwcExhdW5jaGVyVG9vbHMocmVwb19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2dsb2JfcGF0dGVybnM9Tm9uZSwKQEAgLTIxNiw4ICsxNzQsNiBAQAogICAgICAgZm9sZGVyc19sb2dnZWQuYWRkKHNyY19mb2xkZXIpCiAgICAgICBsb2dnaW5nLmluZm8oc3JjX2ZvbGRlciArICcgLT4gJyArIG9zLnBhdGguZGlybmFtZShkc3QpKQogICAgIHNodXRpbC5jb3B5MihzcmMsIGRzdCkKLSAgIyBSZS13cml0ZSB0aGUgcGxhdGZvcm0gaW5mb3MgZmlsZSBpbiB0aGUgbmV3IHJlcG8gY29weS4KLSAgX1dyaXRlUGxhdGZvcm1zSW5mbyhyZXBvX3Jvb3QsIGRlc3Rfcm9vdCkKIAogCiBkZWYgTWFrZVppcEFyY2hpdmUoc3JjLCBvdXRwdXRfemlwKToKQEAgLTI4Nyw4ICsyNDMsNiBAQAogICAgICAgIyBTa2lwIHBhdGhzIHdpdGggJyQnIHNpbmNlIHRoZXkgd29uJ3QgZ2V0IHRocm91Z2ggdGhlIE5pbmphIGdlbmVyYXRvci4KICAgICAgIGlmICckJyBpbiBzcmNfZmlsZToKICAgICAgICAgY29udGludWUKLSAgICAgICMgUmVsYXRpdmUgdG8gQ1dEIHdoZXJlIGd5cCByYW4gdGhpczsgc2FtZSBhcyAnPChERVBUSCknIGluIGd5cCBmaWxlLgotICAgICAgc3JjX2ZpbGUgPSBvcy5wYXRoLnJlbHBhdGgoc3JjX2ZpbGUpCiAgICAgICAjIEZvcndhcmQgc2xhc2hlcyBmb3IgZ3lwLCBldmVuIG9uIFdpbmRvd3MuCiAgICAgICBzcmNfZmlsZSA9IHNyY19maWxlLnJlcGxhY2UoJ1xcJywgJy8nKQogICAgICAgc3JjX2ZpbGVzLmFwcGVuZChzcmNfZmlsZSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9idWlsZC5weSBiL3N0YXJib2FyZC90b29scy9idWlsZC5weQppbmRleCA2NGVjYTQyLi42NTY2ZTU1IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvYnVpbGQucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL2J1aWxkLnB5CkBAIC0yMSwxMCArMjEsOSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Citmcm9tIHN0YXJib2FyZC5idWlsZC5wbGF0Zm9ybXMgaW1wb3J0IFBMQVRGT1JNUwogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNvbmZpZwogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBhdGhzCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGxhdGZvcm0KIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBkb3dubG9hZF9jbGFuZwogCiBfU1RBUkJPQVJEX1RPT0xDSEFJTlNfRElSX0tFWSA9ICdTVEFSQk9BUkRfVE9PTENIQUlOU19ESVInCkBAIC01NywxMiArNTYsMTIgQEAKIAogCiBkZWYgX0NoZWNrUGxhdGZvcm0oa2V5LCByYXdfdmFsdWUsIHZhbHVlKToKLSAgaWYgcGxhdGZvcm0uSXNWYWxpZCh2YWx1ZSk6CisgIGlmIHZhbHVlIGluIFBMQVRGT1JNUzoKICAgICByZXR1cm4gVHJ1ZQogCiAgIGxvZ2dpbmcud2FybmluZygiRW52aXJvbm1lbnQgdmFyaWFibGUgJyVzJyBpcyAnJXMnLCB3aGljaCBpcyBpbnZhbGlkLiIsIGtleSwKICAgICAgICAgICAgICAgICAgIHJhd192YWx1ZSkKLSAgbG9nZ2luZy53YXJuaW5nKCdWYWxpZCBwbGF0Zm9ybXM6ICVzJywgcGxhdGZvcm0uR2V0QWxsKCkpCisgIGxvZ2dpbmcud2FybmluZygnVmFsaWQgcGxhdGZvcm1zOiAlcycsIGxpc3QoUExBVEZPUk1TLmtleXMoKSkpCiAgIHJldHVybiBGYWxzZQogCiAKQEAgLTIxNiw5ICsyMTUsOSBAQAogICAiIiIKICAgdHJ5OgogICAgIGxvZ2dpbmcuZGVidWcoJ0xvYWRpbmcgcGxhdGZvcm0gJXMgZm9yICIlcyIuJywgZmlsZV9uYW1lLCBwbGF0Zm9ybV9uYW1lKQotICAgIGlmIHBsYXRmb3JtLklzVmFsaWQocGxhdGZvcm1fbmFtZSk6CisgICAgaWYgcGxhdGZvcm1fbmFtZSBpbiBQTEFURk9STVM6CiAgICAgICBwbGF0Zm9ybV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGhzLlJFUE9TSVRPUllfUk9PVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0uR2V0KHBsYXRmb3JtX25hbWUpLnBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMQVRGT1JNU1twbGF0Zm9ybV9uYW1lXSkKICAgICAgIG1vZHVsZV9wYXRoID0gb3MucGF0aC5qb2luKHBsYXRmb3JtX3BhdGgsIGZpbGVfbmFtZSkKICAgICAgIGlmIG5vdCBfTW9kdWxlTG9hZGVkKCdwbGF0Zm9ybV9tb2R1bGUnLCBtb2R1bGVfcGF0aCk6CiAgICAgICAgIHBsYXRmb3JtX21vZHVsZSA9IGltcC5sb2FkX3NvdXJjZSgncGxhdGZvcm1fbW9kdWxlJywgbW9kdWxlX3BhdGgpCkBAIC0yNTQsNyArMjUzLDcgQEAKICAgICBwbGF0Zm9ybV9uYW1lOiBQbGF0Zm9ybSBuYW1lLgogCiAgIFJldHVybnM6Ci0gICAgSW5zdGFuY2Ugb2YgYSBjbGFzcyBkZXJpdmVkIGZyb20gUGxhdGZvcm1Db25maWdCYXNlLgorICAgIEluc3RhbmNlIG9mIGEgY2xhc3MgZGVyaXZlZCBmcm9tIFBsYXRmb3JtQ29uZmlndXJhdGlvbi4KICAgIiIiCiAgIHBsYXRmb3JtX2NvbmZpZ3VyYXRpb24sIHBsYXRmb3JtX3BhdGggPSBfTG9hZFBsYXRmb3JtTW9kdWxlKAogICAgICAgcGxhdGZvcm1fbmFtZSwgJ2d5cF9jb25maWd1cmF0aW9uLnB5JywgJ0NyZWF0ZVBsYXRmb3JtQ29uZmlnJykKQEAgLTI5Nyw3ICsyOTYsNyBAQAogICAgIHBsYXRmb3JtX25hbWU6IFBsYXRmb3JtIG5hbWUuCiAKICAgUmV0dXJuczoKLSAgICBJbnN0YW5jZSBvZiBhIGNsYXNzIGRlcml2ZWQgZnJvbSBQbGF0Zm9ybUNvbmZpZ0Jhc2UuCisgICAgSW5zdGFuY2Ugb2YgYSBjbGFzcyBkZXJpdmVkIGZyb20gUGxhdGZvcm1Db25maWd1cmF0aW9uLgogICAiIiIKIAogICBpZiBwbGF0Zm9ybV9uYW1lIG5vdCBpbiBfUExBVEZPUk1fQ09ORklHX0RJQ1Q6CkBAIC0zMjAsNCArMzE5LDQgQEAKICAgICBfUExBVEZPUk1fVEVTVF9GSUxURVJTX0RJQ1RbcGxhdGZvcm1fbmFtZV0gPSBfTG9hZFBsYXRmb3JtVGVzdEZpbHRlcnMoCiAgICAgICAgIHBsYXRmb3JtX25hbWUpCiAKLSAgcmV0dXJuIF9QTEFURk9STV9DT05GSUdfRElDVFtwbGF0Zm9ybV9uYW1lXQorICByZXR1cm4gX1BMQVRGT1JNX1RFU1RfRklMVEVSU19ESUNUW3BsYXRmb3JtX25hbWVdCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvY29tbWFuZF9saW5lLnB5IGIvc3RhcmJvYXJkL3Rvb2xzL2NvbW1hbmRfbGluZS5weQppbmRleCBhZmViMWEzLi44OGY5MTk2IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY29tbWFuZF9saW5lLnB5CisrKyBiL3N0YXJib2FyZC90b29scy9jb21tYW5kX2xpbmUucHkKQEAgLTE2LDExICsxNiwxMCBAQAogIiIiQWRkcyBjb21tb24gY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBhIHByb3ZpZGVkIGFyZ3VtZW50IHBhcnNlci4iIiIKIAogaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAorZnJvbSBzdGFyYm9hcmQuYnVpbGQucGxhdGZvcm1zIGltcG9ydCBQTEFURk9STVMKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBhcmFtcwogaW1wb3J0IHN0YXJib2FyZC50b29scy5jb25maWcKLWltcG9ydCBzdGFyYm9hcmQudG9vbHMucGxhdGZvcm0KIAogCiBkZWYgQWRkTG9nZ2luZ0FyZ3VtZW50cyhhcmdfcGFyc2VyLCBkZWZhdWx0PSdpbmZvJyk6CkBAIC00NiwxMSArNDUsMTEgQEAKICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnLXAnLAogICAgICAgJy0tcGxhdGZvcm0nLAotICAgICAgY2hvaWNlcz1zdGFyYm9hcmQudG9vbHMucGxhdGZvcm0uR2V0QWxsKCksCisgICAgICBjaG9pY2VzPWxpc3QoUExBVEZPUk1TLmtleXMoKSksCiAgICAgICBkZWZhdWx0PWRlZmF1bHRfcGxhdGZvcm0sCiAgICAgICByZXF1aXJlZD1ub3QgZGVmYXVsdF9wbGF0Zm9ybSwKICAgICAgIGhlbHA9IkRldmljZSBwbGF0Zm9ybSwgZWcgJ2xpbnV4LXg2NHgxMScuIFJlcXVpcmVzIHRoYXQgeW91IGhhdmUgIgotICAgICAgJ2FscmVhZHkgcnVuIGd5cF9jb2JhbHQgZm9yIHRoZSBkZXNpcmVkIHBsYXRmb3JtLicpCisgICAgICAnYWxyZWFkeSBydW4gZ24ucHkgZm9yIHRoZSBkZXNpcmVkIHBsYXRmb3JtLicpCiAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJy1jJywKICAgICAgICctLWNvbmZpZycsCkBAIC02NSw3ICs2NCw3IEBACiAgICAgICBoZWxwPSdTcGVjaWZpZXMgdGhlIHBsYXRmb3JtIHRvIGJ1aWxkIHRoZSBsb2FkZXIgd2l0aC4gVGhpcyBmbGFnIGlzIG9ubHkgJwogICAgICAgJ3JlbGV2YW50IGZvciBFdmVyZ3JlZW4gYnVpbGRzLCBhbmQgc2hvdWxkIGJlIHRoZSBwbGF0Zm9ybSB5b3UgaW50ZW5kIHRvICcKICAgICAgICJydW4geW91ciB0ZXN0cyBvbiAoZWcgJ2xpbnV4LXg2NHgxMScsIG9yICdyYXNwaS0yJykuIFJlcXVpcmVzIHRoYXQgIgotICAgICAgJy0tbG9hZGVyX2NvbmZpZyBiZSBnaXZlbiwgYW5kIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBydW4gZ3lwX2NvYmFsdCBmb3IgJworICAgICAgJy0tbG9hZGVyX2NvbmZpZyBiZSBnaXZlbiwgYW5kIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBydW4gZ24ucHkgZm9yICcKICAgICAgICd0aGUgZGVzaXJlZCBsb2FkZXIgcGxhdGZvcm0uJykKICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnLUMnLApAQCAtNzcsNyArNzYsMTAgQEAKIAogCiBkZWYgQWRkTGF1bmNoZXJBcmd1bWVudHMoYXJnX3BhcnNlcik6Ci0gICIiIkFkZHMgdGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gYW5kIGRldmljZSBpbmZvcm1hdGlvbiBhcmd1bWVudHMgcmVxdWlyZSBieSBsYXVuY2hlcnMuIiIiCisgICIiIgorICBBZGRzIHRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24gYXJndW1lbnRzIHJlcXVpcmUgYnkKKyAgbGF1bmNoZXJzLgorICAiIiIKICAgQWRkUGxhdGZvcm1Db25maWdBcmd1bWVudHMoYXJnX3BhcnNlcikKICAgYXJnX3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnLWQnLCAnLS1kZXZpY2VfaWQnLCBoZWxwPSdEZXZraXQgb3IgSVAgYWRkcmVzcyBmb3IgdGhlIHRhcmdldCBkZXZpY2UuJykKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9jb21tYW5kX2xpbmVfdGVzdC5weSBiL3N0YXJib2FyZC90b29scy9jb21tYW5kX2xpbmVfdGVzdC5weQppbmRleCBjMjQ4MmJkLi44MzkzMTYzIDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY29tbWFuZF9saW5lX3Rlc3QucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL2NvbW1hbmRfbGluZV90ZXN0LnB5CkBAIC0yMCwxOCArMjAsMTcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Citmcm9tIHN0YXJib2FyZC5idWlsZC5wbGF0Zm9ybXMgaW1wb3J0IFBMQVRGT1JNUwogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNvbW1hbmRfbGluZQogaW1wb3J0IHN0YXJib2FyZC50b29scy5jb25maWcKLWltcG9ydCBzdGFyYm9hcmQudG9vbHMucGxhdGZvcm0KIAogX0FfQ09ORklHID0gc3RhcmJvYXJkLnRvb2xzLmNvbmZpZy5HZXRBbGwoKVswXQotX0FfUExBVEZPUk0gPSBzdGFyYm9hcmQudG9vbHMucGxhdGZvcm0uR2V0QWxsKClbMF0KK19BX1BMQVRGT1JNID0gbGlzdChQTEFURk9STVMua2V5cygpKVswXQogCiAKIGRlZiBfUmVzdG9yZU1hcHBpbmcodGFyZ2V0LCBzb3VyY2UpOgogICB0YXJnZXQuY2xlYXIoKQotICBmb3Iga2V5LCB2YWx1ZSBpbiBzb3VyY2UuaXRlcml0ZW1zKCk6CisgIGZvciBrZXksIHZhbHVlIGluIHNvdXJjZS5pdGVtcygpOgogICAgIHRhcmdldFtrZXldID0gdmFsdWUKIAogCkBAIC03MSwxMSArNzAsMTMgQEAKIGNsYXNzIENvbW1hbmRMaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgZGVmIHNldFVwKHNlbGYpOgorICAgIHN1cGVyKENvbW1hbmRMaW5lVGVzdCwgc2VsZikuc2V0VXAoKQogICAgIHNlbGYuZW52aXJvbiA9IG9zLmVudmlyb24uY29weSgpCiAgICAgX0NsZWFyRW52aXJvbigpCiAKICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgIF9SZXN0b3JlTWFwcGluZyhvcy5lbnZpcm9uLCBzZWxmLmVudmlyb24pCisgICAgc3VwZXIoQ29tbWFuZExpbmVUZXN0LCBzZWxmKS50ZWFyRG93bigpCiAKICAgZGVmIHRlc3ROb0Vudmlyb25tZW50UmFpbnlEYXlOb0FyZ3Moc2VsZik6CiAgICAgYXJnX3BhcnNlciA9IF9DcmVhdGVQYXJzZXIoKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2NvbmZpZ190ZXN0LnB5IGIvc3RhcmJvYXJkL3Rvb2xzL2NvbmZpZ190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4OWFmMTYwLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9jb25maWdfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJUZXN0cyB0aGUgY29uZmlnIG1vZHVsZS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWltcG9ydCBjb25maWcKLQotCi1jbGFzcyBDb25maWdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICBkZWYgdGVzdEdldEFsbChzZWxmKToKLSAgICBjb25maWdfbmFtZXMgPSBjb25maWcuR2V0QWxsKCkKLSAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAsIGxlbihjb25maWdfbmFtZXMpKQotCi0gIGRlZiB0ZXN0SXNWYWxpZChzZWxmKToKLSAgICBjb25maWdfbmFtZXMgPSBjb25maWcuR2V0QWxsKCkKLSAgICBmb3IgY29uZmlnX25hbWUgaW4gY29uZmlnX25hbWVzOgotICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmZpZy5Jc1ZhbGlkKGNvbmZpZ19uYW1lKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25maWcuSXNWYWxpZChjb25maWdfbmFtZS5sb3dlcigpKSkKLSAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZmlnLklzVmFsaWQoY29uZmlnX25hbWUudXBwZXIoKSkpCi0gICAgc2VsZi5hc3NlcnRGYWxzZShjb25maWcuSXNWYWxpZCgnaW52YWxpZGNvbmZpZycpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5IGIvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTRiYWFjLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJUb29sIHRvIGNyZWF0ZSBhIG5ldyBTdGFyYm9hcmQgYnVpbGQgZGVyaXZpbmcgZnJvbSBhbiBleGlzdGluZyBvbmUuCi0KLVdoZW4gdGhpcyB0b29sIGlzIHByb3ZpZGVkIHdpdGggaW5wdXQgZ2l2aW5nIHRoZSBkZXNpcmVkIGV4aXN0aW5nIGJ1aWxkIHBhdGggdG8KLWRlcml2ZSBmcm9tIGFzIHdlbGwgYXMgYSBkZXN0aW5hdGlvbiBidWlsZCBwYXRoIHRvIGNyZWF0ZSwgaXQgd2lsbCBnZW5lcmF0ZQotdGhlIGZpbGVzIG5lY2Vzc2FyeSBmb3IgYSBuZXcgYnVpbGQgdG8gYmUgY3JlYXRlZCBpbiB0aGUgZGVzdGluYXRpb24gYnVpbGQKLXBhdGguICBUaGUgZ2VuZXJhdGVkIGJ1aWxkIHdpbGwgYmUgaWRlbnRpY2FsIHRvIHRoZSBwcmV2aW91cyBidWlsZCBzaW5jZSBpdAotZGVyaXZlcyBhbGwgY29uZmlndXJhdGlvbiBmcm9tIGl0LiAgVGhlIGludGVuZGVkIHVzYWdlIG9mIHRoaXMgc2NyaXB0IGlzIHRvCi1tYWtlIGl0IGVhc3kgdG8gaW5pdGlhbGl6ZSBuZXcgU3RhcmJvYXJkIGJ1aWxkcyB0aGF0IGFyZSBsYXRlciBtYW51YWxseSB0d2Vha2VkCi1ieSBoYW5kLgotIiIiCi0KLWltcG9ydCBhcmdwYXJzZQotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGV4dHdyYXAKLQotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBsb2dfbGV2ZWwKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotaW1wb3J0IHN0YXJib2FyZC50b29scy5lbnZpcm9ubWVudCBhcyBlbnZpcm9ubWVudAotCi1URU1QTEFURV9ESVJFQ1RPUlkgPSAoCi0gICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdjcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMnKSkKLQotIyBUaGUgbGlzdCBvZiBmaWxlcyB3ZSB3aWxsIGdlbmVyYXRlIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiAgRm9yIGVhY2ggb2YKLSMgdGhlc2UgZmlsZXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGVyZSBleGlzdHMgYSBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGZpbGUgaW4KLSMgdGhlIGRpcmVjdG9yeSBURU1QTEFURV9ESVJFQ1RPUlkuCi1GSUxFU19UT19HRU5FUkFURSA9IFsKLSAgICAnYXRvbWljX3B1YmxpYy5oJywKLSAgICAnY29uZmlndXJhdGlvbl9wdWJsaWMuaCcsCi0gICAgJ2d5cF9jb25maWd1cmF0aW9uLmd5cGknLAotICAgICdneXBfY29uZmlndXJhdGlvbi5weScsCi0gICAgJ3N0YXJib2FyZF9wbGF0Zm9ybS5neXAnLAotICAgICdzdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwJywKLSAgICAndGhyZWFkX3R5cGVzX3B1YmxpYy5oJywKLV0KLQotCi1kZWYgX0dlbmVyYXRlRmlsZShvdXRwdXRfZmlsZV9wYXRoLCB0ZW1wbGF0ZV9maWxlX3BhdGgsIHRlbXBsYXRlX2RpY3Rpb25hcnkpOgotICAiIiJBcHBsaWVzIHRoZSBkaWN0aW9uYXJ5IHRvIHRoZSB0ZW1wbGF0ZSBmaWxlIGFuZCBvdXRwdXRzIHRvIG91dHB1dCBmaWxlLiIiIgotICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5kaXJuYW1lKG91dHB1dF9maWxlX3BhdGgpKToKLSAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVfcGF0aCkpCi0KLSAgd2l0aCBvcGVuKHRlbXBsYXRlX2ZpbGVfcGF0aCwgJ3InKSBhcyBmOgotICAgIHRlbXBsYXRlX2ZpbGVfY29udGVudHMgPSBmLnJlYWQoKQotCi0gIHdpdGggb3BlbihvdXRwdXRfZmlsZV9wYXRoLCAndycpIGFzIGY6Ci0gICAgZi53cml0ZSh0ZW1wbGF0ZV9maWxlX2NvbnRlbnRzLmZvcm1hdCgqKnRlbXBsYXRlX2RpY3Rpb25hcnkpKQotCi0KLWRlZiBfR2V0Q29weXJpZ2h0WWVhcigpOgotICAiIiJSZXR1cm5zIHRoZSB5ZWFyIHRvIGJlIHVzZWQgaW4gdGhlIGNvcHlyaWdodCBoZWFkZXIgY29tbWVudC4iIiIKLSAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnllYXIKLQotCi1kZWYgX0dldEF1dG9HZW5lcmF0ZWRQcmVhbWJsZUNvbW1lbnQobGFuZ3VhZ2UpOgotICAiIiJSZXR1cm5zIHRoZSBjb21tZW50IGFib3V0IGhvdyBhIGN1cnJlbnQgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZC4iIiIKLSAgaWYgbGFuZ3VhZ2UgPT0gJ2NjJzoKLSAgICBjb21tZW50X3N0YXJ0ID0gJy8vJwotICBlbGlmIGxhbmd1YWdlID09ICdweXRob24nOgotICAgIGNvbW1lbnRfc3RhcnQgPSAnIycKLSAgc2NyaXB0X3BhdGhfcmVsYXRpdmVfdG9fcmVwb3NpdG9yeSA9ICgKLSAgICAgIF9HZXRQYXRoUmVsYXRpdmVUb1JlcG9zaXRvcnkob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpCi0gIHJldHVybiAoJ3tjb21tZW50X3N0YXJ0fSBUaGlzIGZpbGUgd2FzIGluaXRpYWxseSBnZW5lcmF0ZWQgYnkge30sXG4nCi0gICAgICAgICAgJ3tjb21tZW50X3N0YXJ0fSB0aG91Z2ggaXQgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBzaW5jZSBpdHMgJwotICAgICAgICAgICdjcmVhdGlvbi4nLmZvcm1hdCgKLSAgICAgICAgICAgICAgc2NyaXB0X3BhdGhfcmVsYXRpdmVfdG9fcmVwb3NpdG9yeSwgY29tbWVudF9zdGFydD1jb21tZW50X3N0YXJ0KSkKLQotCi1kZWYgX0dldFBhdGhSZWxhdGl2ZVRvU3RhcmJvYXJkUm9vdChwYXRoKToKLSAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQotICAjIFRoaXMgaXMgYSBiaXQgdHJpY2t5IGJlY2F1c2UgdGhlcmUgY2FuIGJlIG11bHRpcGxlIFN0YXJib2FyZCByb290cy4KLSAgZm9yIHJvb3QgaW4gZW52aXJvbm1lbnQuR2V0U3RhcmJvYXJkUG9ydFJvb3RzKCk6Ci0gICAgYWJzcm9vdCA9IG9zLnBhdGguYWJzcGF0aChyb290KQotICAgIGlmIG9zLnBhdGguY29tbW9ucHJlZml4KFthYnNyb290LCBhYnNwYXRoXSkgPT0gYWJzcm9vdDoKLSAgICAgIHJldHVybiBvcy5wYXRoLnJlbHBhdGgoYWJzcGF0aCwgc3RhcnQ9YWJzcm9vdCkKLQotICByYWlzZSBFeGNlcHRpb24oJ1BhdGggbm90IHJlbGF0aXZlIHRvIGFueSBTdGFyYm9hcmQgcm9vdC4nKQotCi0KLWRlZiBfR2V0UGF0aFJlbGF0aXZlVG9SZXBvc2l0b3J5KHBhdGgpOgotICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguYWJzcGF0aChwYXRoKSwgc3RhcnQ9cGF0aHMuUkVQT1NJVE9SWV9ST09UKQotCi0KLWRlZiBfR2V0SW5jbHVkZUd1YXJkKG91dHB1dF9maWxlX3BhdGgpOgotICAiIiJSZXR1cm5zIHRoZSBpbmNsdWRlIGd1YXJkIGRlZmluZSB0byBiZSB1c2VkIGluIGdlbmVyYXRlZCBDKysgaGVhZGVycy4iIiIKLSAgcmVwb3NpdG9yeV9yZWxhdGl2ZV9wYXRoID0gX0dldFBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeShvdXRwdXRfZmlsZV9wYXRoKQotICByZXR1cm4gKHJlcG9zaXRvcnlfcmVsYXRpdmVfcGF0aC51cHBlcigpLnJlcGxhY2Uob3Muc2VwLCAnXycpLnJlcGxhY2UoCi0gICAgICAnLicsICdfJykgKyAnXycpCi0KLQotZGVmIF9HZXRCdWlsZE5hbWUob3V0cHV0X2J1aWxkX3BhdGgpOgotICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBidWlsZCAoZS5nLiBob3cgeW91IGlkZW50aWZ5IHRoZSBidWlsZCB0byBneXApLiIiIgotICBzdGFyYm9hcmRfcmVsYXRpdmVfcGF0aCA9IF9HZXRQYXRoUmVsYXRpdmVUb1N0YXJib2FyZFJvb3Qob3V0cHV0X2J1aWxkX3BhdGgpCi0gIHJldHVybiBzdGFyYm9hcmRfcmVsYXRpdmVfcGF0aC5sb3dlcigpLnJlcGxhY2Uob3Muc2VwLCAnLScpCi0KLQotZGVmIF9HZXRQYXJlbnRJbXBvcnRQYXRoKHBhcmVudF9idWlsZF9wYXRoKToKLSAgcmVwb3NpdG9yeV9yZWxhdGl2ZV9wYXRoID0gX0dldFBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeShwYXJlbnRfYnVpbGRfcGF0aCkKLSAgcmV0dXJuIHJlcG9zaXRvcnlfcmVsYXRpdmVfcGF0aC5yZXBsYWNlKG9zLnNlcCwgJy4nKQotCi0KLWRlZiBfQ3JlYXRlRGVyaXZlZEJ1aWxkKHBhcmVudF9idWlsZF9wYXRoLCBwYXJlbnRfY29uZmlndXJhdGlvbl9jbGFzc19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2J1aWxkX3BhdGgpOgotICBnZW5lcmFsX3RlbXBsYXRlX2RpY3Rpb25hcnkgPSB7Ci0gICAgICAnY29weXJpZ2h0X3llYXInOgotICAgICAgICAgIF9HZXRDb3B5cmlnaHRZZWFyKCksCi0gICAgICAnYXV0b19nZW5lcmF0ZWRfY2NfcHJlYW1ibGVfY29tbWVudCc6Ci0gICAgICAgICAgX0dldEF1dG9HZW5lcmF0ZWRQcmVhbWJsZUNvbW1lbnQoJ2NjJyksCi0gICAgICAnYXV0b19nZW5lcmF0ZWRfcHl0aG9uX3ByZWFtYmxlX2NvbW1lbnQnOgotICAgICAgICAgIF9HZXRBdXRvR2VuZXJhdGVkUHJlYW1ibGVDb21tZW50KCdweXRob24nKSwKLSAgICAgICdwYXJlbnRfYnVpbGRfcGF0aCc6Ci0gICAgICAgICAgX0dldFBhdGhSZWxhdGl2ZVRvUmVwb3NpdG9yeShwYXJlbnRfYnVpbGRfcGF0aCksCi0gICAgICAnYnVpbGRfbmFtZSc6Ci0gICAgICAgICAgX0dldEJ1aWxkTmFtZShvdXRwdXRfYnVpbGRfcGF0aCksCi0gICAgICAncGFyZW50X2ltcG9ydF9wYXRoJzoKLSAgICAgICAgICBfR2V0UGFyZW50SW1wb3J0UGF0aChwYXJlbnRfYnVpbGRfcGF0aCksCi0gICAgICAncGFyZW50X2NvbmZpZ3VyYXRpb25fY2xhc3NfbmFtZSc6Ci0gICAgICAgICAgcGFyZW50X2NvbmZpZ3VyYXRpb25fY2xhc3NfbmFtZSwKLSAgfQotCi0gICMgR28gdGhyb3VnaCBlYWNoIGZpbGUgaW4gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gZ2VuZXJhdGUgYW5kIGZvciBlYWNoIG9uZQotICAjIGFwcGx5IHRoZSBkaWN0aW9uYXJ5IHRvIHRoZSB0ZW1wbGF0ZSB0byBwcm9kdWNlIHRoZSBnZW5lcmF0ZWQgZmlsZS4KLSAgZm9yIGdlbl9maWxlIGluIEZJTEVTX1RPX0dFTkVSQVRFOgotICAgIG91dHB1dF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2J1aWxkX3BhdGgsIGdlbl9maWxlKQotCi0gICAgIyBBcHBseSBwZXItZmlsZSBjdXN0b21pemF0aW9ucyB0byB0aGUgdGVtcGxhdGUgZGljdGlvbmFyeS4KLSAgICBmaWxlX3RlbXBsYXRlX2RpY3Rpb25hcnkgPSBnZW5lcmFsX3RlbXBsYXRlX2RpY3Rpb25hcnkKLSAgICBmaWxlX3RlbXBsYXRlX2RpY3Rpb25hcnlbJ2luY2x1ZGVfZ3VhcmQnXSA9ICgKLSAgICAgICAgX0dldEluY2x1ZGVHdWFyZChvdXRwdXRfZmlsZV9wYXRoKSkKLQotICAgIF9HZW5lcmF0ZUZpbGUob3V0cHV0X2ZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihURU1QTEFURV9ESVJFQ1RPUlksIGdlbl9maWxlKSArICcudGVtcGxhdGUnLAotICAgICAgICAgICAgICAgICAgZmlsZV90ZW1wbGF0ZV9kaWN0aW9uYXJ5KQotCi0KLWRlZiBtYWluKCk6Ci0gIGxvZ19sZXZlbC5Jbml0aWFsaXplTG9nZ2luZ1dpdGhMZXZlbChsb2dnaW5nLklORk8pCi0KLSAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCi0gICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsCi0gICAgICBkZXNjcmlwdGlvbj10ZXh0d3JhcC5kZWRlbnQoX19kb2NfXykpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLXAnLAotICAgICAgJy0tcGFyZW50X2J1aWxkX3BhdGgnLAotICAgICAgcmVxdWlyZWQ9VHJ1ZSwKLSAgICAgIHR5cGU9c3RyLAotICAgICAgaGVscD0nUGF0aCB0byB0aGUgYnVpbGQgdGhhdCB0aGUgZGVzdGluYXRpb24gYnVpbGQgd2lsbCBpbmhlcml0IGZyb20uJykKLSAgcGFyc2VyLmFkZF9hcmd1bWVudCgKLSAgICAgICctYycsCi0gICAgICAnLS1wYXJlbnRfY29uZmlndXJhdGlvbl9jbGFzc19uYW1lJywKLSAgICAgIHJlcXVpcmVkPVRydWUsCi0gICAgICB0eXBlPXN0ciwKLSAgICAgIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBjbGFzcyBpbiB0aGUgcGFyZW50IGJ1aWxkXCdzIGd5cF9jb25maWd1cmF0aW9uLnB5ICcKLSAgICAgICdmaWxlIHRoYXQgdGhlIGRlcml2ZWQgYnVpbGRcJ3MgZ3lwX2NvbmZpZ3VyYXRpb24ucHkgc2hvdWxkICcKLSAgICAgICdkZXJpdmUgZnJvbS4gIFlvdSBtYXkgaGF2ZSB0byBvcGVuIHRoZSBwYXJlbnQgYnVpbGRcJ3MgJwotICAgICAgJ2d5cF9jb25maWd1cmF0aW9uLnB5IGZpbGUgdG8ga25vdyB3aGF0IHRvIHBhc3MgaW4gZm9yIHRoaXMgJwotICAgICAgJ3BhcmFtZXRlci4nKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy1vJywKLSAgICAgICctLW91dHB1dF9idWlsZF9wYXRoJywKLSAgICAgIHJlcXVpcmVkPVRydWUsCi0gICAgICB0eXBlPXN0ciwKLSAgICAgIGhlbHA9J1BhdGggdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgZGVzdGluYXRpb24gYnVpbGRcJ3MgZmlsZXMgd2lsbCAnCi0gICAgICAnYmUgY3JlYXRlZC4nKQotICBhcmd1bWVudHMgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgcmV0dXJuIF9DcmVhdGVEZXJpdmVkQnVpbGQoCi0gICAgICBvcy5wYXRoLm5vcm1wYXRoKGFyZ3VtZW50cy5wYXJlbnRfYnVpbGRfcGF0aCksCi0gICAgICBhcmd1bWVudHMucGFyZW50X2NvbmZpZ3VyYXRpb25fY2xhc3NfbmFtZSwKLSAgICAgIG9zLnBhdGgubm9ybXBhdGgoYXJndW1lbnRzLm91dHB1dF9idWlsZF9wYXRoKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL2F0b21pY19wdWJsaWMuaC50ZW1wbGF0ZSBiL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvYXRvbWljX3B1YmxpYy5oLnRlbXBsYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmVkY2YyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvYXRvbWljX3B1YmxpYy5oLnRlbXBsYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IHtjb3B5cmlnaHRfeWVhcn0gVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17YXV0b19nZW5lcmF0ZWRfY2NfcHJlYW1ibGVfY29tbWVudH0KLQotI2lmbmRlZiB7aW5jbHVkZV9ndWFyZH0KLSNkZWZpbmUge2luY2x1ZGVfZ3VhcmR9Ci0KLSNpbmNsdWRlICJ7cGFyZW50X2J1aWxkX3BhdGh9L2F0b21pY19wdWJsaWMuaCIKLQotI2VuZGlmICAvLyB7aW5jbHVkZV9ndWFyZH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbl9wdWJsaWMuaC50ZW1wbGF0ZSBiL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvY29uZmlndXJhdGlvbl9wdWJsaWMuaC50ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE1YjhlNi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL2NvbmZpZ3VyYXRpb25fcHVibGljLmgudGVtcGxhdGUKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vLyBDb3B5cmlnaHQge2NvcHlyaWdodF95ZWFyfSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXthdXRvX2dlbmVyYXRlZF9jY19wcmVhbWJsZV9jb21tZW50fQotCi0jaWZuZGVmIHtpbmNsdWRlX2d1YXJkfQotI2RlZmluZSB7aW5jbHVkZV9ndWFyZH0KLQotI2luY2x1ZGUgIntwYXJlbnRfYnVpbGRfcGF0aH0vY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKLQotI2VuZGlmICAvLyB7aW5jbHVkZV9ndWFyZH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaS50ZW1wbGF0ZSBiL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaS50ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxNmI4Zi4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL2d5cF9jb25maWd1cmF0aW9uLmd5cGkudGVtcGxhdGUKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCB7Y29weXJpZ2h0X3llYXJ9IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQote2F1dG9fZ2VuZXJhdGVkX3B5dGhvbl9wcmVhbWJsZV9jb21tZW50fQotCi17ewotICAndGFyZ2V0X2RlZmF1bHRzJzoge3sKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ3tidWlsZF9uYW1lfV9kZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzoge3sKLSAgICAgICd7YnVpbGRfbmFtZX1fZGVidWcnOiB7ewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZWJ1Z19iYXNlJ10sCi0gICAgICB9fSwKLSAgICAgICd7YnVpbGRfbmFtZX1fZGV2ZWwnOiB7ewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydkZXZlbF9iYXNlJ10sCi0gICAgICB9fSwKLSAgICAgICd7YnVpbGRfbmFtZX1fcWEnOiB7ewotICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydxYV9iYXNlJ10sCi0gICAgICB9fSwKLSAgICAgICd7YnVpbGRfbmFtZX1fZ29sZCc6IHt7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ2dvbGRfYmFzZSddLAotICAgICAgfX0sCi0gICAgfX0sICMgZW5kIG9mIGNvbmZpZ3VyYXRpb25zCi0gIH19LAotCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnPChERVBUSCkve3BhcmVudF9idWlsZF9wYXRofS9neXBfY29uZmlndXJhdGlvbi5neXBpJywKLSAgXSwKLX19CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL2d5cF9jb25maWd1cmF0aW9uLnB5LnRlbXBsYXRlIGIvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy9neXBfY29uZmlndXJhdGlvbi5weS50ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJkNjhhYy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL2d5cF9jb25maWd1cmF0aW9uLnB5LnRlbXBsYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBDb3B5cmlnaHQge2NvcHlyaWdodF95ZWFyfSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXthdXRvX2dlbmVyYXRlZF9weXRob25fcHJlYW1ibGVfY29tbWVudH0KLQotCi1mcm9tIHtwYXJlbnRfaW1wb3J0X3BhdGh9IGltcG9ydCBneXBfY29uZmlndXJhdGlvbiBhcyBwYXJlbnRfY29uZmlndXJhdGlvbgotCi0KLWRlZiBDcmVhdGVQbGF0Zm9ybUNvbmZpZygpOgotICByZXR1cm4gcGFyZW50X2NvbmZpZ3VyYXRpb24ue3BhcmVudF9jb25maWd1cmF0aW9uX2NsYXNzX25hbWV9KCd7YnVpbGRfbmFtZX0nKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwLnRlbXBsYXRlIGIvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy9zdGFyYm9hcmRfcGxhdGZvcm0uZ3lwLnRlbXBsYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzNkODA0Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvc3RhcmJvYXJkX3BsYXRmb3JtLmd5cC50ZW1wbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgQ29weXJpZ2h0IHtjb3B5cmlnaHRfeWVhcn0gVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17YXV0b19nZW5lcmF0ZWRfcHl0aG9uX3ByZWFtYmxlX2NvbW1lbnR9Ci0KLXt7Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3twYXJlbnRfYnVpbGRfcGF0aH0vc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gIF0sCi19fQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwLnRlbXBsYXRlIGIvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy9zdGFyYm9hcmRfcGxhdGZvcm1fdGVzdHMuZ3lwLnRlbXBsYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTRlMDI2Li4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9jcmVhdGVfZGVyaXZlZF9idWlsZF90ZW1wbGF0ZXMvc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cC50ZW1wbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgQ29weXJpZ2h0IHtjb3B5cmlnaHRfeWVhcn0gVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17YXV0b19nZW5lcmF0ZWRfcHl0aG9uX3ByZWFtYmxlX2NvbW1lbnR9Ci0KLXt7Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAjIE5vdGUgdGhhdCB3ZSBhcmUgJ2luY2x1ZGVzJ2luZyBhICdneXAnIGZpbGUsIG5vdCBhICdneXBpJyBmaWxlLiAgVGhlIGlkZWEKLSAgICAjIGlzIHRoYXQgd2UganVzdCB3YW50IHRoaXMgZmlsZSB0byAqYmUqIHRoZSBwYXJlbnQgZ3lwIGZpbGUuCi0gICAgJzwoREVQVEgpL3twYXJlbnRfYnVpbGRfcGF0aH0vc3RhcmJvYXJkX3BsYXRmb3JtX3Rlc3RzLmd5cCcsCi0gIF0sCi19fQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2NyZWF0ZV9kZXJpdmVkX2J1aWxkX3RlbXBsYXRlcy90aHJlYWRfdHlwZXNfcHVibGljLmgudGVtcGxhdGUgYi9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL3RocmVhZF90eXBlc19wdWJsaWMuaC50ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODliY2M0NC4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvY3JlYXRlX2Rlcml2ZWRfYnVpbGRfdGVtcGxhdGVzL3RocmVhZF90eXBlc19wdWJsaWMuaC50ZW1wbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8vIENvcHlyaWdodCB7Y29weXJpZ2h0X3llYXJ9IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQote2F1dG9fZ2VuZXJhdGVkX2NjX3ByZWFtYmxlX2NvbW1lbnR9Ci0KLSNpZm5kZWYge2luY2x1ZGVfZ3VhcmR9Ci0jZGVmaW5lIHtpbmNsdWRlX2d1YXJkfQotCi0jaW5jbHVkZSAie3BhcmVudF9idWlsZF9wYXRofS90aHJlYWRfdHlwZXNfcHVibGljLmgiCi0KLSNlbmRpZiAgLy8ge2luY2x1ZGVfZ3VhcmR9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvZG9jL3Rlc3RpbmcubWQgYi9zdGFyYm9hcmQvdG9vbHMvZG9jL3Rlc3RpbmcubWQKaW5kZXggZTI2ZTZmYi4uNmE3ZDBkMyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL2RvYy90ZXN0aW5nLm1kCisrKyBiL3N0YXJib2FyZC90b29scy9kb2MvdGVzdGluZy5tZApAQCAtNjEsOSArNjEsOSBAQAogIyMgRmlsdGVyaW5nIFRlc3RzCiAKIFRvIGZpbHRlciBvdXQgdGVzdHMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdG8gcnVuIGZvciBhIHNwZWNpZmljIHBsYXRmb3JtLAotaW1wbGVtZW50IGEgbWV0aG9kIHdpdGhpbiB0aGUgcGxhdGZvcm0ncyBgUGxhdGZvcm1Db25maWd1cmF0aW9uYCBzdWJjbGFzcyBjYWxsZWQKLWBHZXRUZXN0RmlsdGVycygpYC4gVGhlIGBQbGF0Zm9ybUNvbmZpZ3VyYXRpb25gIHN1YmNsYXNzIGxpdmVzIGluIHRoZQotYGd5cF9jb25maWd1cmF0aW9uLnB5YCBmaWxlIGZvciBlYWNoIHBsYXRmb3JtLiBJZiB0aGUgdGVzdHMgYXJlCitpbXBsZW1lbnQgYSBtZXRob2Qgd2l0aGluIHRoZSBwbGF0Zm9ybSdzIGBUZXN0RmlsdGVyc2Agc3ViY2xhc3MgY2FsbGVkCitgR2V0VGVzdEZpbHRlcnMoKWAuIFRoZSBgVGVzdEZpbHRlcnNgIHN1YmNsYXNzIGxpdmVzIGluIHRoZQorYHRlc3RfZmlsdGVycy5weWAgZmlsZSBmb3IgZWFjaCBwbGF0Zm9ybS4gSWYgdGhlIHRlc3RzIGFyZQogYXBwbGljYXRpb24tc3BlY2lmaWMsIHlvdSBtYXkgZGVmaW5lIGBHZXRUZXN0RmlsdGVycygpYCBvbiBhbiBvcHRpb25hbAogYEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbmAgc3ViY2xhc3MsIHdoaWNoIHdpbGwgYmUgZm91bmQgaW4gdGhlCiBgPHBsYXRmb3JtLWRpcmVjdG9yeT4vPGFwcGxpY2F0aW9uLW5hbWU+L2NvbmZpZ3VyYXRpb24ucHlgIHN1YmRpcmVjdG9yeS4gU2VlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvZG93bmxvYWRfY2xhbmcuc2ggYi9zdGFyYm9hcmQvdG9vbHMvZG93bmxvYWRfY2xhbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTMyZDMyNwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC90b29scy9kb3dubG9hZF9jbGFuZy5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKworIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3NldCAtZQorCitDTEFOR19WRVJTSU9OPSIkezE6LTM2NTA5Ny1mN2U1MmZiZC04fSIKK1RPT0xDSEFJTl9ST09UPSIke0hPTUV9L3N0YXJib2FyZC10b29sY2hhaW5zLyIKK1RPT0xDSEFJTl9IT01FPSIke1RPT0xDSEFJTl9ST09UfS94ODZfNjQtbGludXgtZ251LWNsYW5nLWNocm9taXVtLSR7Q0xBTkdfVkVSU0lPTn0iCisKK2lmIFsgLWQgIiR7VE9PTENIQUlOX0hPTUV9IiBdOyB0aGVuCisgIGVjaG8gIkNsYW5nIGlzIGFscmVhZHkgZG93bmxvYWRlZCwgZXhpdGluZy4iCisgIGV4aXQgMAorZmkKKworQkFTRV9VUkw9Imh0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vY2hyb21pdW0tYnJvd3Nlci1jbGFuZyIKKworY2QgL3RtcAorbWtkaXIgLXAgJHtUT09MQ0hBSU5fSE9NRX0KK2N1cmwgLS1zaWxlbnQgLU8gLUogJHtCQVNFX1VSTH0vTGludXhfeDY0L2NsYW5nLSR7Q0xBTkdfVkVSU0lPTn0udGd6Cit0YXIgeGYgY2xhbmctJHtDTEFOR19WRVJTSU9OfS50Z3ogLUMgJHtUT09MQ0hBSU5fSE9NRX0KK2VjaG8gJHtDTEFOR19WRVJTSU9OfSA+PiAke1RPT0xDSEFJTl9IT01FfS9jcl9idWlsZF9yZXZpc2lvbgorcm0gY2xhbmctJHtDTEFOR19WRVJTSU9OfS50Z3oKKworZWNobyAiRG93bmxvYWRlZCBjbGFuZy4iCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvZW52aXJvbm1lbnQucHkgYi9zdGFyYm9hcmQvdG9vbHMvZW52aXJvbm1lbnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZjgyYjguLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL2Vudmlyb25tZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIiIgotIiIiU2V0cyB1cCBhIFN0YXJib2FyZCBlbnZpcm9ubWVudCBmb3IgdXNlIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uLgotCi1BcHBsaWNhdGlvbnMgdGhhdCB1c2UgU3RhcmJvYXJkIHNob3VsZCBjb250YWluIGEgUHl0aG9uIGZpbGUsIGNhbGxlZAotInN0YXJib2FyZF9jb25maWd1cmF0aW9uLnB5Iiwgc29tZXdoZXJlIGluIHRoZSBhbmNlc3RvciBwYXRoIG9mIHRoZWlyCi0ic3RhcmJvYXJkIiBkaXJlY3RvcnkuCi0KLVRoZSBmaWxlIHNob3VsZCBjb250YWluIGEgdmFyaWFibGUsIGNhbGxlZCBQT1JUX1JPT1RTLiBBc3NpZ24gdG8gaXQgYQotbGlzdCBvZiBwYXRocyB0byBkaXJlY3RvcmllcyBpbiB3aGljaCBTdGFyYm9hcmQgcG9ydHMgYXJlIGxvY2F0ZWQuCi1FYWNoIHBhdGggc2hvdWxkIGJlIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBvZiBkaXJlY3RvcnkgbmFtZXMgd2hvc2UgbG9jYXRpb25zCi1hcmUgcmVsYXRpdmUgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEV4YW1wbGU6Ci0KLVBPUlRfUk9PVFMgPSBbCi0gICAgWyJzb21lX2RpcmVjdG9yeSIsICJzdGFyYm9hcmQiXQotICAgIFsic29tZXdoZXJlX2Vsc2UiLCAic3RhcmJvYXJkIl0KLV0KLQotSXQgc2hvdWxkIGFsc28gY29udGFpbiBhbm90aGVyIHZhcmlhYmxlLCBjYWxsZWQgQVBQTElDQVRJT05TLiAgVGhpcyB2YXJpYWJsZQotc2hvdWxkIGJlIGEgUHl0aG9uIE1hcHBpbmcgY29udGFpbmluZyBuYW1lcyBvZiBhcHBsaWNhdGlvbnMgeW91IHdhbnQgdG8gc3VwcG9ydAotbWFwcGVkIHRvIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29uc3RydWN0IHRoZWlyIEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBzdWJjbGFzcwotd2l0aCBhbGwgYXBwcm9wcmlhdGUgZGlzY292ZXJ5IGFuZCBmYWxsYmFjayBsb2dpYy4KLQotRXhhbXBsZToKLQotQVBQTElDQVRJT05TID0gewotICAgICdjb2JhbHQnOiBjb2JhbHQuYnVpbGQuQ3JlYXRlQ29iYWx0Q29uZmlndXJhdGlvbiwKLX0KLQotSUYgWU9VIEFSRSBHT0lORyBUTyBVU0UgU1RBUkJPQVJEIEZJTEVTIE9VVFNJREUgT0YgU1RBUkJPQVJELCBZT1UgTkVFRCBUTyBJTVBPUlQKLVRISVMgTU9EVUxFIEZJUlNULiAgT3RoZXJ3aXNlLCBzeXMucGF0aCB3aWxsIG5vdCBiZSBjb25maWd1cmVkIHByb3Blcmx5LCBub25lIG9mCi15b3VyIGNvZGUgd2lsbCB3b3JrLCBhbmQgeW91J2xsIGJlIHNhZC4KLSIiIgotCi1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotX1NSQ19ST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhcmRpcikpCi0KLVBBVEhTID0gWwotICAgICMgTmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGd5cF9jb25maWd1cmF0aW9uIGZvciBsaW51eC14NjR4MTEgaW1wb3J0cwotICAgICMgZGlyZWN0bHkgZnJvbSAic3RhcmJvYXJkLyIuCi0gICAgX1NSQ19ST09ULAotCi0gICAgIyBOZWNlc3NhcnkgYmVjYXVzZSBneXBfY29uZmlndXJhdGlvbiBtb2R1bGVzIHVzZSByZWxhdGl2ZSBpbXBvcnRzLgotICAgICMgImNvYmFsdC9idWlsZCIgbmVlZHMgdG8gYmUgaW4gc3lzLnBhdGggdG8ga2VlcCB0aGUgaW1wb3J0cyB3b3JraW5nCi0gICAgb3MucGF0aC5qb2luKF9TUkNfUk9PVCwgJ2NvYmFsdCcsICdidWlsZCcpLAotXQotCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGFkZCB0aGUgYWJvdmUgcGF0aHMgdG8gc3lzLnBhdGggd2hlbiB0aGV5IGFyZSBub3QKLSMgcHJlc2VudCBpbiB0aGUgbGlzdCBhbHJlYWR5LgotZm9yIG5ld19wYXRoIGluIFBBVEhTOgotICBpZiBuZXdfcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIG5ld19wYXRoKQotCi0jIFNhdmVkIGluIGdsb2JhbCBzdGF0ZSBzbyB3ZSBvbmx5IGV2ZXIgc2VhcmNoIGZvciBpdCBvbmNlLgotX0NPTkZJR19QQVRIID0gTm9uZQotCi0KLWRlZiBfR2V0U3RhcmJvYXJkQ29uZmlnUGF0aCgpOgotICAiIiJHZXRzIHRoZSBwYXRoIHRvIHRoZSAic3RhcmJvYXJkX2NvbmZpZ3VyYXRpb24ucHkiIGZpbGUgZnJvbSB0aGUgaG9zdCBhcHAuCi0KLSAgUmV0dXJuczoKLSAgICBQYXRoIHRvIHRoZSAic3RhcmJvYXJkX2NvbmZpZ3VyYXRpb24ucHkiIGZpbGUgZnJvbSB0aGUgaG9zdCBhcHAKLQotICBSYWlzZXM6Ci0gICAgUnVudGltZUVycm9yOiBUaGVyZSBpcyBubyBjb25maWd1cmF0aW9uIGZpbGUuCi0gICIiIgotICBnbG9iYWwgX0NPTkZJR19QQVRICi0KLSAgaWYgX0NPTkZJR19QQVRIOgotICAgIHJldHVybiBfQ09ORklHX1BBVEgKLQotICBlbHNlOgotICAgIGN1cnJlbnRfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLSAgICB3aGlsZSBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGN1cnJlbnRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFyYm9hcmRfY29uZmlndXJhdGlvbi5weSIpKToKLSAgICAgIG5leHRfcGF0aCA9IG9zLnBhdGguZGlybmFtZShjdXJyZW50X3BhdGgpCi0gICAgICBpZiBuZXh0X3BhdGggPT0gY3VycmVudF9wYXRoOgotICAgICAgICBjdXJyZW50X3BhdGggPSBOb25lCi0gICAgICAgIGJyZWFrCi0gICAgICBjdXJyZW50X3BhdGggPSBuZXh0X3BhdGgKLSAgICBjb25maWdfcGF0aCA9IGN1cnJlbnRfcGF0aAotCi0gICAgaWYgbm90IGNvbmZpZ19wYXRoOgotICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJObyBzdGFyYm9hcmQgY29uZmlndXJhdGlvbiBkZWNsYXJlZC4iKQotCi0gICAgX0NPTkZJR19QQVRIID0gY29uZmlnX3BhdGgKLSAgICByZXR1cm4gY29uZmlnX3BhdGgKLQotCi1kZWYgX0ltcG9ydENvbmZpZ01vZHVsZSgpOgotICBpZiAic3RhcmJvYXJkX2NvbmZpZ3VyYXRpb24iIGluIHN5cy5tb2R1bGVzOgotICAgIHJldHVybiBzeXMubW9kdWxlc1sic3RhcmJvYXJkX2NvbmZpZ3VyYXRpb24iXQotICBlbHNlOgotICAgIGNvbmZpZ19wYXRoID0gX0dldFN0YXJib2FyZENvbmZpZ1BhdGgoKQotICAgIGlmIGNvbmZpZ19wYXRoIG5vdCBpbiBzeXMucGF0aDoKLSAgICAgIHN5cy5wYXRoLmFwcGVuZChjb25maWdfcGF0aCkKLSAgICByZXR1cm4gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoInN0YXJib2FyZF9jb25maWd1cmF0aW9uIikKLQotCi1kZWYgR2V0U3RhcmJvYXJkUG9ydFJvb3RzKCk6Ci0gICIiIkdldHMgcGF0aHMgdG8gdGhlIGhvc3QgYXBwJ3MgU3RhcmJvYXJkIHBvcnQgZGlyZWN0b3JpZXMuIiIiCi0gIGNvbmZpZ19wYXRoID0gX0dldFN0YXJib2FyZENvbmZpZ1BhdGgoKQotICBjb25maWdfbW9kdWxlID0gX0ltcG9ydENvbmZpZ01vZHVsZSgpCi0gIHBvcnRfcm9vdHMgPSBjb25maWdfbW9kdWxlLlBPUlRfUk9PVFMKLSAgcG9ydF9yb290X3BhdGhzID0gW29zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgICBjb25maWdfcGF0aCwgb3Muc2VwLmpvaW4ocm9vdCkpKSBmb3Igcm9vdCBpbiBwb3J0X3Jvb3RzXQotICByZXR1cm4gcG9ydF9yb290X3BhdGhzCi0KLQotZGVmIEdldEFwcGxpY2F0aW9uQ2xhc3MoYXBwbGljYXRpb25fbmFtZSk6Ci0gICIiIkdldHMgdGhlIGNsYXNzIG9yIGZ1bmN0aW9uIHRoYXQgY29uc3RydWN0cyB0aGUgQXBwbGljYXRpb25Db25maWd1cmF0aW9uLiIiIgotICBjb25maWdfbW9kdWxlID0gX0ltcG9ydENvbmZpZ01vZHVsZSgpCi0gIHJldHVybiBjb25maWdfbW9kdWxlLkFQUExJQ0FUSU9OUy5nZXQoYXBwbGljYXRpb25fbmFtZSkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9leGFtcGxlL19lbnYucHkgYi9zdGFyYm9hcmQvdG9vbHMvZXhhbXBsZS9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE5MDhlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9leGFtcGxlL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkFzayB0aGUgcGFyZW50IGRpcmVjdG9yeSB0byBsb2FkIHRoZSBwcm9qZWN0IGVudmlyb25tZW50LiIiIgotCi1mcm9tIGltcCBpbXBvcnQgbG9hZF9zb3VyY2UKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWltcG9ydCBzeXMKLQotX0VOViA9IHBhdGguYWJzcGF0aChwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgcGF0aC5wYXJkaXIsICdfZW52LnB5JykpCi1pZiBub3QgcGF0aC5leGlzdHMoX0VOVik6Ci0gIHByaW50ICclczogQ2FuXCd0IGZpbmQgcmVwbyByb290LlxuTWlzc2luZyBwYXJlbnQ6ICVzJyAlIChfX2ZpbGVfXywgX0VOVikKLSAgc3lzLmV4aXQoMSkKLWxvYWRfc291cmNlKCcnLCBfRU5WKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2V4YW1wbGUvYXBwX2xhdW5jaGVyX2NsaWVudC5weSBiL3N0YXJib2FyZC90b29scy9leGFtcGxlL2FwcF9sYXVuY2hlcl9jbGllbnQucHkKaW5kZXggNTMyMzFmYy4uMmFiYzc3ZSAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL2V4YW1wbGUvYXBwX2xhdW5jaGVyX2NsaWVudC5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvZXhhbXBsZS9hcHBfbGF1bmNoZXJfY2xpZW50LnB5CkBAIC0xNiwxMSArMTYsOSBAQAogIiIiQ2xpZW50IHRvIGxhdW5jaCBleGVjdXRhYmxlcyB2aWEgdGhlIG5ldyBsYXVuY2hlciBsb2dpYy4iIiIKIAogaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgbG9nZ2luZwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCwgcmVsYXRpdmUtaW1wb3J0CiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYWJzdHJhY3RfbGF1bmNoZXIKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBjb21tYW5kX2xpbmUKIGZyb20gc3RhcmJvYXJkLnRvb2xzLnV0aWwgaW1wb3J0IFNldHVwRGVmYXVsdExvZ2dpbmdDb25maWcKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9leHRyYWN0X3N0YXJib2FyZF92ZXJzaW9ucy5weSBiL3N0YXJib2FyZC90b29scy9leHRyYWN0X3N0YXJib2FyZF92ZXJzaW9ucy5weQppbmRleCBmODExN2NlLi4zNjVjYWJiIDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvdG9vbHMvZXh0cmFjdF9zdGFyYm9hcmRfdmVyc2lvbnMucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL2V4dHJhY3Rfc3RhcmJvYXJkX3ZlcnNpb25zLnB5CkBAIC0yNiwxNSArMjYsMTQgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAorZnJvbSBzdGFyYm9hcmQuYnVpbGQucGxhdGZvcm1zIGltcG9ydCBQTEFURk9STVMKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBwYXRocwotZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBsYXRmb3JtCiAKIAogIyBTb21ldGltZXMgZmlsZXMgaGF2ZSB3ZWlyZCBlbmNvZGluZ3MuIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgYSB2YXJpZXR5IG9mCiAjIGhhbmQgc2VsZWN0ZWQgZW5jb2RlcnMgdGhhdCB3b3JrIG9uIHRoZSBzdGFyYm9hcmQgY29kZWJhc2UuCiBkZWYgQXV0b0RlY29kZVN0cmluZyhmaWxlX2RhdGEpOgotICBmb3IgZW5jb2RpbmcgaW4geydVVEYtOCcsICd1dGZfMTYnLCAnd2luZG93cy0xMjUzJywgJ2lzby04ODU5LTcnLCAnbWFjZ3JlZWsnfToKKyAgZm9yIGVuY29kaW5nIGluIFsnVVRGLTgnLCAndXRmXzE2JywgJ3dpbmRvd3MtMTI1MycsICdpc28tODg1OS03JywgJ21hY2dyZWVrJ106CiAgICAgdHJ5OgogICAgICAgcmV0dXJuIGZpbGVfZGF0YS5kZWNvZGUoZW5jb2RpbmcpCiAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC0xMjEsMTMgKzEyMCwxNyBAQAogZGVmIEdlbmVyYXRlUGxhdGZvcm1QYXRoTWFwKCk6CiAgICIiIlJldHVybiBhIG1hcCBvZiBwbGF0Zm9ybS1uYW1lIC0+IGZ1bGwtcGF0aC10by1wbGF0Zm9ybS1jb25maWctaGVhZGVyLiIiIgogCi0gIGRlZiBHZW5QYXRoKHApOgotICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocC5wYXRoLCAnY29uZmlndXJhdGlvbl9wdWJsaWMuaCcpKQorICBkZWYgR2VuUGF0aChwbGF0Zm9ybV9wYXRoKToKKyAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgIG9zLnBhdGguam9pbihwbGF0Zm9ybV9wYXRoLCAnY29uZmlndXJhdGlvbl9wdWJsaWMuaCcpKQogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmdWxsX3BhdGgpOgogICAgICAgcmFpc2UgSU9FcnJvcignQ291bGQgbm90IGZpbmQgcGF0aCAnICsgZnVsbF9wYXRoKQogICAgIHJldHVybiBmdWxsX3BhdGgKIAotICByZXR1cm4ge3AubmFtZTogR2VuUGF0aChwKSBmb3IgcCBpbiBwbGF0Zm9ybS5HZXRBbGxJbmZvcygpfQorICByZXR1cm4geworICAgICAgcGxhdGZvcm1fbmFtZTogR2VuUGF0aChwbGF0Zm9ybV9wYXRoKQorICAgICAgZm9yIHBsYXRmb3JtX25hbWUsIHBsYXRmb3JtX3BhdGggaW4gUExBVEZPUk1TLml0ZW1zKCkKKyAgfQogCiAKICMgR2l2ZW4gdGhlIHJvb3Qgc3RhcmJvYXJkIGRpcmVjdG9yeSwgYW5kIHRoZSBmdWxsIHBhdGggdG8gdGhlIHBsYXRmb3JtLApAQCAtMTY1LDEzICsxNjgsMTMgQEAKIAogICBwcmludCgnRXhwZXJpbWVudGFsIEFQSSBWZXJzaW9uOiAnICsgc3RyKGV4cGVyaW1lbnRhbF9hcGlfdmVyc2lvbikgKyAnXG4nKQogCi0gIGZvciBwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9wYXRoIGluIHBvcnRfZGljdC5pdGVyaXRlbXMoKToKKyAgZm9yIHBsYXRmb3JtX25hbWUsIHBsYXRmb3JtX3BhdGggaW4gcG9ydF9kaWN0Lml0ZW1zKCk6CiAgICAgdmVyc2lvbl9zdHIgPSBGaW5kVmVyc2lvblJlY3Vyc2l2ZShwYXRocy5TVEFSQk9BUkRfUk9PVCwgcGxhdGZvcm1fcGF0aCkKICAgICBpZiAnU0JfRVhQRVJJTUVOVEFMX0FQSV9WRVJTSU9OJyBpbiB2ZXJzaW9uX3N0cjoKICAgICAgIHZlcnNpb25fc3RyID0gc3RyKGV4cGVyaW1lbnRhbF9hcGlfdmVyc2lvbikKICAgICBwYXRoX21hcFtwbGF0Zm9ybV9uYW1lXSA9IHZlcnNpb25fc3RyCiAKLSAgZm9yIHBsYXRmb3JtX25hbWUsIGFwaV92ZXJzaW9uIGluIHNvcnRlZChwYXRoX21hcC5pdGVyaXRlbXMoKSk6CisgIGZvciBwbGF0Zm9ybV9uYW1lLCBhcGlfdmVyc2lvbiBpbiBzb3J0ZWQocGF0aF9tYXAuaXRlbXMoKSk6CiAgICAgcHJpbnQocGxhdGZvcm1fbmFtZSArICc6ICcgKyBhcGlfdmVyc2lvbikKIAogICByZXR1cm4gMApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL2dldF90b29sY2hhaW5zX3BhdGgucHkgYi9zdGFyYm9hcmQvdG9vbHMvZ2V0X3Rvb2xjaGFpbnNfcGF0aC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDEyZjJhNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvZ2V0X3Rvb2xjaGFpbnNfcGF0aC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0KLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIiIiUHJpbnRzIHRoZSBjYW5vbmljYWwgcGF0aCB0byB0aGUgdG9vbGNoYWlucyBkaXJlY3RvcnkgdG8gc3Rkb3V0LiIiIgotCi1pbXBvcnQgc3lzCi0KLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYnVpbGQKLQotCi1kZWYgbWFpbihhcmd2KToKLSAgZGVsIGFyZ3YgICMgTm90IHVzZWQuCi0gIHByaW50ICclcycgJSBidWlsZC5HZXRUb29sY2hhaW5zRGlyKCkKLSAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvbG9nX2xldmVsLnB5IGIvc3RhcmJvYXJkL3Rvb2xzL2xvZ19sZXZlbC5weQppbmRleCA2YmIwNWUwLi42N2Y1YzgzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvbG9nX2xldmVsLnB5CisrKyBiL3N0YXJib2FyZC90b29scy9sb2dfbGV2ZWwucHkKQEAgLTE2LDcgKzE2LDYgQEAKICIiIlByb3ZpZGVzIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHRoZSBpbml0aWFsaXplIG9mIGxvZ2dpbmcuIiIiCiAKIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogCiBfTkFNRV9UT19MRVZFTCA9IHsKICAgICAnaW5mbyc6IGxvZ2dpbmcuSU5GTywKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9sb2dfbGV2ZWxfdGVzdC5weSBiL3N0YXJib2FyZC90b29scy9sb2dfbGV2ZWxfdGVzdC5weQppbmRleCA4MTY3YzE0Li4yNzNkNzc1IDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvdG9vbHMvbG9nX2xldmVsX3Rlc3QucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL2xvZ19sZXZlbF90ZXN0LnB5CkBAIC0xOCwxMiArMTgsMTYgQEAKIAogaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG1vY2sKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKKwordHJ5OgorICBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCitleGNlcHQgSW1wb3J0RXJyb3I6CisgIGltcG9ydCBtb2NrCisKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBsb2dfbGV2ZWwKIAotX0lOSVRJQUxJWkVfTE9HR0lOR19NT0NLID0gJ3N0YXJib2FyZC50b29scy5sb2dfbGV2ZWwuSW5pdGlhbGl6ZUxvZ2dpbmdXaXRoTGV2ZWwnCitfSU5JVElBTElaRV9MT0dHSU5HX01PQ0sgPSAnc3RhcmJvYXJkLnRvb2xzLmxvZ19sZXZlbC5Jbml0aWFsaXplTG9nZ2luZ1dpdGhMZXZlbCcgICMgcHlsaW50OmRpc2FibGU9bGluZS10b28tbG9uZwogCiAKIGNsYXNzIExvZ0xldmVsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00MCw3ICs0NCw3IEBACiAKICAgQG1vY2sucGF0Y2goX0lOSVRJQUxJWkVfTE9HR0lOR19NT0NLKQogICBkZWYgdGVzdFN1bm55RGF5Q29ycmVjdExldmVscyhzZWxmLCBpbml0aWFsaXplX2xvZ2dpbmdfbW9jayk6Ci0gICAgZm9yIG5hbWUsIGxldmVsIGluIGxvZ19sZXZlbC5fTkFNRV9UT19MRVZFTC5pdGVtcygpOgorICAgIGZvciBuYW1lLCBsZXZlbCBpbiBsb2dfbGV2ZWwuX05BTUVfVE9fTEVWRUwuaXRlbXMoKTogICMgcHlsaW50OmRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgYXJncyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCiAgICAgICBhcmdzLmxvZ19sZXZlbCA9IG5hbWUKICAgICAgIGxvZ19sZXZlbC5Jbml0aWFsaXplTG9nZ2luZyhhcmdzKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3BhY2thZ2UucHkgYi9zdGFyYm9hcmQvdG9vbHMvcGFja2FnZS5weQppbmRleCA3MTY1OTZiLi4yMjc3OGEzIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvcGFja2FnZS5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvcGFja2FnZS5weQpAQCAtMjAsNDggKzIwLDMzIEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiAKLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Ci1pbXBvcnQgc3RhcmJvYXJkCi1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcGxhdGZvcm0KK2Zyb20gc3RhcmJvYXJkLmJ1aWxkLnBsYXRmb3JtcyBpbXBvcnQgUExBVEZPUk1TCiAKIAotZGVmIF9JbXBvcnRNb2R1bGUocGF0aCwgcm9vdF9tb2R1bGUsIG1vZHVsZV9uYW1lPU5vbmUpOgotICAiIiJMb2FkIGEgcGxhdGZvcm0gc3BlY2lmaWMgcHl0aG9uIG1vZHVsZSB1c2luZyBpbXBvcnRsaWIuCi0KLSAgTG9hZCB0aGUgcHl0aG9uIG1vZHVsZSBuYW1lZCB8bW9kdWxlX25hbWV8IHJlbGF0aXZlIHRvIHxyb290X21vZHVsZXwuCi0gIEFyZ3M6Ci0gICAgcGF0aDogUGF0aCB0byB0aGUgcGxhdGZvcm0KLSAgICByb290X21vZHVsZTogQW4gYWxyZWFkeS1sb2FkZWQgbW9kdWxlCi0gICAgbW9kdWxlX25hbWU6IE5hbWUgb2YgYSBweXRob24gbW9kdWxlIHRvIGxvYWQuIElmIE5vbmUsIGxvYWQgdGhlIHBsYXRmb3JtCi0gICAgICBkaXJlY3RvcnkgYXMgYSBweXRob24gbW9kdWxlLgorZGVmIF9JbXBvcnRNb2R1bGUocGF0aCwgbW9kdWxlX25hbWU9Tm9uZSk6CisgICIiIkNvbnZlcnQgYSBmaWxlcGF0aCB0byBhIHB5dGhvbi1zdHlsZSBpbXBvcnQgcGF0aCBhbmQgaW1wb3J0IGl0LgogCiAgIFJldHVybnM6CiAgICAgQSBtb2R1bGUgbG9hZGVkIHdpdGggaW1wb3J0bGliLmltcG9ydF9tb2R1bGUKICAgVGhyb3dzOgogICAgIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgZmFpbHMgdG8gYmUgbG9hZGVkLgogICAiIiIKLSAgIyBGcm9tIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB8cm9vdF9tb2R1bGV8J3MgZGlyZWN0b3J5LCBjb25zdHJ1Y3QgYSBmdWxsCi0gICMgcHl0aG9uIHBhY2thZ2UgbmFtZSBhbmQgYXR0ZW1wdCB0byBsb2FkIGl0LgotICByZWxhdGl2ZV9wYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIG9zLnBhdGguZGlybmFtZShyb290X21vZHVsZS5fX2ZpbGVfXykpCi0gIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihyb290X21vZHVsZS5fX25hbWVfXywgcmVsYXRpdmVfcGF0aCkKLQotICAjIFRoaXMgbm9ybXBhdGggbWF5IGNvbGxhcHNlIG91dCB0aGUgcm9vdCBtb2R1bGUuIFRoaXMgaXMgZ2VuZXJhbGx5IE9LIGFzIGxvbmcKLSAgIyBhcyB3ZSBzdGF5IHdpdGhpbiB0aGUgd29ya3NwYWNlLCBhcyBfZW52IHdpbGwgYWRkIHRoZSB3b3Jrc3BhY2Ugcm9vdCB0byB0aGUKLSAgIyBzeXN0ZW0gaW1wb3J0IHBhdGguCi0gIGNvbXBvbmVudHMgPSBvcy5wYXRoLm5vcm1wYXRoKGZ1bGxfcGF0aCkuc3BsaXQob3Muc2VwKQorICBjb21wb25lbnRzID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKS5zcGxpdChvcy5zZXApCiAgIGlmIG1vZHVsZV9uYW1lOgogICAgIGNvbXBvbmVudHMuYXBwZW5kKG1vZHVsZV9uYW1lKQogICBmdWxsX3BhY2thZ2VfbmFtZSA9ICcuJy5qb2luKGNvbXBvbmVudHMpCiAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShmdWxsX3BhY2thZ2VfbmFtZSkKIAogCi1kZWYgX0dldFBhY2thZ2VDbGFzcyhwbGF0Zm9ybV9pbmZvKToKLSAgIiIiTG9hZHMgdGhlIHBhY2thZ2UgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwbGF0Zm9ybS5QbGF0Zm9ybUluZm8uIiIiCitkZWYgX0dldFBhY2thZ2VDbGFzcyhwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9wYXRoKToKKyAgIiIiCisgIExvYWRzIHRoZSBwYWNrYWdlIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGxhdGZvcm0uCisgICIiIgogICB0cnk6Ci0gICAgbW9kdWxlID0gX0ltcG9ydE1vZHVsZShwbGF0Zm9ybV9pbmZvLnBhdGgsIHN0YXJib2FyZCkKKyAgICBtb2R1bGUgPSBfSW1wb3J0TW9kdWxlKHBsYXRmb3JtX3BhdGgpCiAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgIGxvZ2dpbmcuZGVidWcoJ0ZhaWxlZCB0byBpbXBvcnQgbW9kdWxlIGZvciBwbGF0Zm9ybSAlcyB3aXRoIGVycm9yOiAlcycsCi0gICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9pbmZvLm5hbWUsIGUpCisgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9uYW1lLCBlKQogICAgIHJldHVybiBOb25lCiAKICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnUGFja2FnZScpOgpAQCAtNzcsMTEgKzYyLDEwIEBACiAgICAgQSBkaWN0IG9mIFtwbGF0Zm9ybV9uYW1lLCBDbGFzc10gd2hlcmUgQ2xhc3MgaW5oZXJpdHMgZnJvbSBQYWNrYWdlQmFzZQogICAiIiIKICAgcGFja2FnZXJfbW9kdWxlcyA9IHt9Ci0gIGZvciBwbGF0Zm9ybV9uYW1lIGluIHBsYXRmb3JtLkdldEFsbCgpOgotICAgIHBsYXRmb3JtX2luZm8gPSBwbGF0Zm9ybS5HZXQocGxhdGZvcm1fbmFtZSkKKyAgZm9yIHBsYXRmb3JtX25hbWUsIHBsYXRmb3JtX3BhdGggaW4gUExBVEZPUk1TLml0ZW1zKCk6CiAgICAgIyBGcm9tIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBzdGFyYm9hcmQgZGlyZWN0b3J5LCBjb25zdHJ1Y3QgYSBmdWxsCiAgICAgIyBweXRob24gcGFja2FnZSBuYW1lIGFuZCBhdHRlbXB0IHRvIGxvYWQgaXQuCi0gICAgcGFja2FnZV9jbGFzcyA9IF9HZXRQYWNrYWdlQ2xhc3MocGxhdGZvcm1faW5mbykKKyAgICBwYWNrYWdlX2NsYXNzID0gX0dldFBhY2thZ2VDbGFzcyhwbGF0Zm9ybV9uYW1lLCBwbGF0Zm9ybV9wYXRoKQogICAgIGlmIG5vdCBwYWNrYWdlX2NsYXNzOgogICAgICAgY29udGludWUKICAgICAjIFBvcHVsYXRlIGEgbWFwcGluZyBmcm9tIHBsYXRmb3JtIG5hbWUgdG8gdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZQpAQCAtOTIsMTMgKzc2LDEzIEBACiAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdQYWNrYWdlciBmb3IgJXMgaXMgZGVmaW5lZCBpbiBtdWx0aXBsZSBtb2R1bGVzLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF9uYW1lKQogICAgICAgICBlbHNlOgotICAgICAgICAgIHBhY2thZ2VyX21vZHVsZXNbc3VwcG9ydGVkX25hbWVdID0gcGxhdGZvcm1faW5mbworICAgICAgICAgIHBhY2thZ2VyX21vZHVsZXNbc3VwcG9ydGVkX25hbWVdID0gcGxhdGZvcm1fcGF0aAogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIyBDYXRjaCBhbGwgZXhjZXB0aW9ucyB0byBhdm9pZCBhbiBlcnJvciBpbiBvbmUgcGxhdGZvcm0ncyBQYWNrYWdlcgogICAgICAgIyBoYWx0aW5nIHRoZSBzY3JpcHQgZm9yIG90aGVyIHBsYXRmb3JtcycgcGFja2FnZXJzLgogICAgICAgbG9nZ2luZy53YXJuaW5nKAogICAgICAgICAgICdFeGNlcHRpb24gaXRlcmF0aW5nIHN1cHBvcnRlZCBwbGF0Zm9ybSBmb3IgcGxhdGZvcm0gJwotICAgICAgICAgICclczogJXMuJywgcGxhdGZvcm1faW5mby5uYW1lLCBlKQorICAgICAgICAgICclczogJXMuJywgcGxhdGZvcm1fbmFtZSwgZSkKIAogICByZXR1cm4gcGFja2FnZXJfbW9kdWxlcwogCkBAIC0xNzIsMTAgKzE1Niw5IEBACiAKICAgZGVmIEdldEFwcGxpY2F0aW9uUGFja2FnZUluZm8oc2VsZiwgcGxhdGZvcm1fbmFtZSwgYXBwbGljYXRpb25fbmFtZSk6CiAgICAgIiIiR2V0IGFwcGxpY2F0aW9uLXNwZWNpZmljIHBhY2thZ2luZyBpbmZvcm1hdGlvbi4iIiIKLSAgICBwbGF0Zm9ybV9pbmZvID0gc2VsZi5HZXRQbGF0Zm9ybUluZm8ocGxhdGZvcm1fbmFtZSkKKyAgICBwbGF0Zm9ybV9wYXRoID0gc2VsZi5HZXRQbGF0Zm9ybUluZm8ocGxhdGZvcm1fbmFtZSkKICAgICB0cnk6Ci0gICAgICByZXR1cm4gX0ltcG9ydE1vZHVsZShwbGF0Zm9ybV9pbmZvLnBhdGgsIHN0YXJib2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICclcy5wYWNrYWdlJyAlIGFwcGxpY2F0aW9uX25hbWUpCisgICAgICByZXR1cm4gX0ltcG9ydE1vZHVsZShwbGF0Zm9ybV9wYXRoLCAne30ucGFja2FnZScuZm9ybWF0KGFwcGxpY2F0aW9uX25hbWUpKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgICAgIyBObyBwYWNrYWdlIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGZvciB0aGlzIHBsYXRmb3JtLgogICAgICAgbG9nZ2luZy5kZWJ1ZygnRmFpbGVkIHRvIGltcG9ydCBjb2JhbHQucGFja2FnZTogJXMnLCBlKQpAQCAtMTkzLDEzICsxNzYsMTYgQEAKICAgICBSZXR1cm5zOgogICAgICAgQSBQYWNrYWdlQmFzZSBpbnN0YW5jZS4KICAgICAiIiIKLSAgICBwYWNrYWdlX2NsYXNzID0gX0dldFBhY2thZ2VDbGFzcyhzZWxmLnBsYXRmb3JtX2luZm9zW3BsYXRmb3JtX25hbWVdKQorICAgIHBhY2thZ2VfY2xhc3MgPSBfR2V0UGFja2FnZUNsYXNzKHBsYXRmb3JtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybV9pbmZvc1twbGF0Zm9ybV9uYW1lXSkKICAgICByZXR1cm4gcGFja2FnZV9jbGFzcyhzb3VyY2VfZGlyPXNvdXJjZV9kaXIsIG91dHB1dF9kaXI9b3V0cHV0X2RpciwgKiprd2FyZ3MpCiAKICAgZGVmIEFkZFBsYXRmb3JtQXJndW1lbnRzKHNlbGYsIHBsYXRmb3JtX25hbWUsIGFyZ3BhcnNlcik6Ci0gICAgcGFja2FnZV9jbGFzcyA9IF9HZXRQYWNrYWdlQ2xhc3Moc2VsZi5wbGF0Zm9ybV9pbmZvc1twbGF0Zm9ybV9uYW1lXSkKKyAgICBwYWNrYWdlX2NsYXNzID0gX0dldFBhY2thZ2VDbGFzcyhwbGF0Zm9ybV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm1faW5mb3NbcGxhdGZvcm1fbmFtZV0pCiAgICAgcGFja2FnZV9jbGFzcy5BZGRBcmd1bWVudHMoYXJncGFyc2VyKQogCiAgIGRlZiBFeHRyYWN0UGxhdGZvcm1Bcmd1bWVudHMoc2VsZiwgcGxhdGZvcm1fbmFtZSwgb3B0aW9ucyk6Ci0gICAgcGFja2FnZV9jbGFzcyA9IF9HZXRQYWNrYWdlQ2xhc3Moc2VsZi5wbGF0Zm9ybV9pbmZvc1twbGF0Zm9ybV9uYW1lXSkKKyAgICBwYWNrYWdlX2NsYXNzID0gX0dldFBhY2thZ2VDbGFzcyhwbGF0Zm9ybV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhdGZvcm1faW5mb3NbcGxhdGZvcm1fbmFtZV0pCiAgICAgcmV0dXJuIHBhY2thZ2VfY2xhc3MuRXh0cmFjdEFyZ3VtZW50cyhvcHRpb25zKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3BsYXRmb3JtLnB5IGIvc3RhcmJvYXJkL3Rvb2xzL3BsYXRmb3JtLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ4ZDMyLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9wbGF0Zm9ybS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkZ1bmN0aW9uYWxpdHkgdG8gZW51bWVyYXRlIGFuZCByZXByZXNlbnQgc3RhcmJvYXJkIHBvcnRzLiIiIgotCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLQotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLWZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBlbnZpcm9ubWVudAotCi0jIFRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIGEgZGlyZWN0b3J5IHRvIGFsbG93IGl0IHRvIGJlCi0jIGNvbnNpZGVyZWQgYSB2YWxpZCBwbGF0Zm9ybS4KLV9QTEFURk9STV9GSUxFUyA9IFsKLSAgICAnZ3lwX2NvbmZpZ3VyYXRpb24uZ3lwaScsCi0gICAgJ2d5cF9jb25maWd1cmF0aW9uLnB5JywKLSAgICAnc3RhcmJvYXJkX3BsYXRmb3JtLmd5cCcsCi0gICAgJ2NvbmZpZ3VyYXRpb25fcHVibGljLmgnLAotICAgICdhdG9taWNfcHVibGljLmgnLAotICAgICd0aHJlYWRfdHlwZXNfcHVibGljLmgnLAotXQotCi0KLSMgV2hldGhlciB0byBlbWl0IHdhcm5pbmdzIGlmIGl0IGZpbmRzIGEgZGlyZWN0b3J5IHRoYXQgYWxtb3N0IGhhcyBhIHBsYXRmb3JtLgotIyBUT0RPOiBFbmFibGUgd2hlbiB0cmVlIGlzIGNsZWFuLgotX1dBUk5fT05fQUxNT1NUID0gRmFsc2UKLQotCi1kZWYgX0lzVmFsaWRQbGF0Zm9ybUZpbGVuYW1lTGlzdChkaXJlY3RvcnksIGZpbGVuYW1lcyk6Ci0gICIiIkRldGVybWluZXMgaWYgfGZpbGVuYW1lc3wgY29udGFpbnMgdGhlIHJlcXVpcmVkIGZpbGVzIGZvciBhIHZhbGlkIHBvcnQuIiIiCi0gIG1pc3NpbmcgPSBzZXQoX1BMQVRGT1JNX0ZJTEVTKSAtIHNldChmaWxlbmFtZXMpCi0gIGlmIG1pc3Npbmc6Ci0gICAgaWYgbGVuKG1pc3NpbmcpIDwgKGxlbihfUExBVEZPUk1fRklMRVMpIC8gMikgYW5kIF9XQVJOX09OX0FMTU9TVDoKLSAgICAgIGxvZ2dpbmcud2FybmluZygnRGlyZWN0b3J5ICVzIGNvbnRhaW5zIHNldmVyYWwgZmlsZXMgbmVlZGVkIGZvciBhICcKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0sIGJ1dCBub3QgYWxsIG9mIHRoZW0uIEluIHBhcnRpY3VsYXIsIGl0IGlzICcKLSAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZzogJXMnLCBkaXJlY3RvcnksICcsICcuam9pbihtaXNzaW5nKSkKLSAgcmV0dXJuIG5vdCBtaXNzaW5nCi0KLQotZGVmIF9HZXRQbGF0Zm9ybU5hbWUocm9vdCwgZGlyZWN0b3J5KToKLSAgIiIiR2V0cyB0aGUgbmFtZSBvZiBhIHBsYXRmb3JtIGZvdW5kIGF0IHxkaXJlY3Rvcnl8IG9mZiBvZiB8cm9vdHwuIiIiCi0gIGFzc2VydCBkaXJlY3Rvcnkuc3RhcnRzd2l0aChyb290KQotICBzdGFydCA9IGxlbihyb290KSArIDEgICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSByb290LgotCi0gIGFzc2VydCBzdGFydCA8IGxlbihkaXJlY3RvcnkpCi0KLSAgIyBDYWxjdWxhdGUgdGhlIG5hbWUgYmFzZWQgb24gcmVsYXRpdmUgcGF0aCBmcm9tIHNlYXJjaCByb290IHRvIGRpcmVjdG9yeS4KLSAgcmV0dXJuIHJlLnN1YihyJ1teYS16QS1aMC05X10nLCByJy0nLCBkaXJlY3Rvcnlbc3RhcnQ6XSkKLQotCi1kZWYgX0VudW1lcmF0ZVBsYXRmb3Jtcyhyb290X3BhdGgsIGV4Y2x1c2lvbl9zZXQ9Tm9uZSk6Ci0gICIiIkdlbmVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgU3RhcmJvYXJkIHBsYXRmb3JtcyBmb3VuZCB1bmRlciB8cGF0aHwuIiIiCi0gIGlmIG5vdCBleGNsdXNpb25fc2V0OgotICAgIGV4Y2x1c2lvbl9zZXQgPSBzZXQoKQotCi0gIGZvciBjdXJyZW50X3BhdGgsIGRpcmVjdG9yaWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhyb290X3BhdGgpOgotICAgICMgRG9uJ3Qgd2FsayBpbnRvIGFueSBkaXJlY3RvcmllcyBpbiB0aGUgZXhjbHVzaW9uIHNldC4KLSAgICBkaXJlY3Rvcmllc1s6XSA9ICh4IGZvciB4IGluIGRpcmVjdG9yaWVzCi0gICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5qb2luKGN1cnJlbnRfcGF0aCwgeCkgbm90IGluIGV4Y2x1c2lvbl9zZXQpCi0KLSAgICAjIERldGVybWluZSBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYSB2YWxpZCBwb3J0IGRpcmVjdG9yeS4KLSAgICBpZiBfSXNWYWxpZFBsYXRmb3JtRmlsZW5hbWVMaXN0KGN1cnJlbnRfcGF0aCwgZmlsZW5hbWVzKToKLSAgICAgIGlmIGN1cnJlbnRfcGF0aCA9PSByb290X3BhdGg6Ci0gICAgICAgIGxvZ2dpbmcud2FybmluZygnRm91bmQgcGxhdGZvcm0gYXQgc2VhcmNoIHBhdGggcm9vdDogJXMnLCBjdXJyZW50X3BhdGgpCi0gICAgICBuYW1lID0gX0dldFBsYXRmb3JtTmFtZShyb290X3BhdGgsIGN1cnJlbnRfcGF0aCkKLSAgICAgIHlpZWxkIFBsYXRmb3JtSW5mbyhuYW1lLCBjdXJyZW50X3BhdGgpCi0KLQotZGVmIF9GaW5kQWxsUGxhdGZvcm1zKCk6Ci0gICIiIlNlYXJjaCB0aGUgZmlsZXN5c3RlbSBmb3IgYWxsIHZhbGlkIFN0YXJib2FyZCBwbGF0Zm9ybXMuCi0KLSAgUmV0dXJuczoKLSAgICBBIE1hcHBpbmcgb2YgbmFtZS0+UGxhdGZvcm1JbmZvLgotICAiIiIKLQotICByZXN1bHQgPSB7fQotICBzZWFyY2hfcGF0aCA9IGVudmlyb25tZW50LkdldFN0YXJib2FyZFBvcnRSb290cygpCi0KLSAgIyBJZ25vcmUgc2VhcmNoIHBhdGggZGlyZWN0b3JpZXMgaW5zaWRlIG90aGVyIHNlYXJjaCBwYXRoIGRpcmVjdG9yaWVzLgotICBleGNsdXNpb25fc2V0ID0gc2V0KHNlYXJjaF9wYXRoKQotCi0gIGZvciBlbnRyeSBpbiBzZWFyY2hfcGF0aDoKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihlbnRyeSk6Ci0gICAgICBjb250aW51ZQotICAgIGZvciBwbGF0Zm9ybV9pbmZvIGluIF9FbnVtZXJhdGVQbGF0Zm9ybXMoZW50cnksIGV4Y2x1c2lvbl9zZXQpOgotICAgICAgaWYgcGxhdGZvcm1faW5mby5uYW1lIGluIHJlc3VsdDoKLSAgICAgICAgbG9nZ2luZy5lcnJvcignRm91bmQgZHVwbGljYXRlIHBvcnQgbmFtZSAiJXMiIGF0ICIlcyIgYW5kICIlcyInLAotICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2luZm8ubmFtZSwgcmVzdWx0W3BsYXRmb3JtX2luZm8ubmFtZV0sCi0gICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1faW5mby5wYXRoKQotICAgICAgcmVzdWx0W3BsYXRmb3JtX2luZm8ubmFtZV0gPSBwbGF0Zm9ybV9pbmZvCi0KLSAgcmV0dXJuIHJlc3VsdAotCi0KLSMgQ2FjaGUgb2YgbmFtZS0+UGxhdGZvcm1JbmZvIG1hcHBpbmcuCi1fSU5GT19NQVAgPSBOb25lCi0KLQotZGVmIF9HZXRJbmZvTWFwKCk6Ci0gICIiIkdldHMgbWFwcGluZyBvZiBwbGF0Zm9ybSBuYW1lcyB0byBQbGF0Zm9ybUluZm8gb2JqZWN0cy4iIiIKLSAgZ2xvYmFsIF9JTkZPX01BUAotICBpZiBub3QgX0lORk9fTUFQOgotICAgIF9JTkZPX01BUCA9IF9GaW5kQWxsUGxhdGZvcm1zKCkKLSAgcmV0dXJuIF9JTkZPX01BUAotCi0KLSMgQ2FjaGUgb2YgdGhlIHNvcnRlZCBsaXN0IG9mIGFsbCBwbGF0Zm9ybSBuYW1lcy4KLV9BTEwgPSBOb25lCi0KLQotZGVmIEdldEFsbCgpOgotICAiIiJHZXRzIGEgc29ydGVkIGxpc3Qgb2YgYWxsIHZhbGlkIFN0YXJib2FyZCBwbGF0Zm9ybSBuYW1lcy4iIiIKLSAgZ2xvYmFsIF9BTEwKLSAgaWYgbm90IF9BTEw6Ci0gICAgX0FMTCA9IHNvcnRlZChfR2V0SW5mb01hcCgpLmtleXMoKSkKLSAgcmV0dXJuIF9BTEwKLQotCi1kZWYgR2V0KHBsYXRmb3JtX25hbWUpOgotICAiIiJHZXRzIHRoZSBQbGF0Zm9ybUluZm8gZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybSBuYW1lLCBvciBOb25lLiIiIgotICByZXR1cm4gX0dldEluZm9NYXAoKS5nZXQocGxhdGZvcm1fbmFtZSkKLQotCi1kZWYgR2V0QWxsSW5mb3MoKToKLSAgIiIiR2V0cyBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBQbGF0Zm9ybUluZm8gb2JqZWN0cyBmb3IgYWxsIHZhbGlkIHBsYXRmb3Jtcy4iIiIKLSAgcmV0dXJuIChHZXQocCkgZm9yIHAgaW4gR2V0QWxsKCkpCi0KLQotZGVmIElzVmFsaWQocGxhdGZvcm1fbmFtZSk6Ci0gICIiIkRldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gcGxhdGZvcm0gbmFtZSBpcyB2YWxpZC4iIiIKLSAgcmV0dXJuIHBsYXRmb3JtX25hbWUgaW4gX0dldEluZm9NYXAoKQotCi0KLWNsYXNzIFBsYXRmb3JtSW5mbyhvYmplY3QpOgotICAiIiJJbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIFN0YXJib2FyZCBwbGF0Zm9ybS4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGF0aCk6Ci0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYucGF0aCA9IHBhdGgKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy9wbGF0Zm9ybS5weS50ZW1wbGF0ZSBiL3N0YXJib2FyZC90b29scy9wbGF0Zm9ybS5weS50ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0ZDQxNS4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvcGxhdGZvcm0ucHkudGVtcGxhdGUKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLSIiIkZ1bmN0aW9uYWxpdHkgdG8gZW51bWVyYXRlIGFuZCByZXByZXNlbnQgc3RhcmJvYXJkIHBvcnRzLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBfZW52Ci1mcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgZW52aXJvbm1lbnQKLQotIyBUaGUgbmFtZS0+cGxhdGZvcm0gcGF0aCBtYXBwaW5nLgotX1BBVEhfTUFQID0gJHBsYXRmb3Jtc19tYXAKLV9QQVRIX01BUCA9IHtrOm9zLnBhdGgubm9ybXBhdGgodikgZm9yIGssdiBpbiBfUEFUSF9NQVAuaXRlcml0ZW1zKCl9Ci0KLQotIyBDYWNoZSBvZiB0aGUgbmFtZS0+UGxhdGZvcm1JbmZvIG1hcHBpbmcuCi1fSU5GT19NQVAgPSBOb25lCi0KLQotZGVmIF9Db25zdHJ1Y3RJbmZvTWFwKCk6Ci0gICIiIkNvbnN0cnVjdHMgbWFwcGluZyBvZiBwbGF0Zm9ybSBuYW1lcyB0byBQbGF0Zm9ybUluZm8gb2JqZWN0cy4KLQotICBSZXR1cm5zOgotICAgIEEgTWFwcGluZyBvZiBuYW1lLT5QbGF0Zm9ybUluZm8uCi0gICIiIgotICByZXN1bHQgPSB7fQotICBmb3IgbmFtZSwgcGF0aCBpbiBfUEFUSF9NQVAuaXRlcml0ZW1zKCk6Ci0gICAgcmVzdWx0W25hbWVdID0gUGxhdGZvcm1JbmZvKG5hbWUsIHBhdGgpCi0gIHJldHVybiByZXN1bHQKLQotCi1kZWYgX0dldEluZm9NYXAoKToKLSAgIiIiR2V0cyBtYXBwaW5nIG9mIHBsYXRmb3JtIG5hbWVzIHRvIFBsYXRmb3JtSW5mbyBvYmplY3RzLiIiIgotICBnbG9iYWwgX0lORk9fTUFQCi0gIGlmIG5vdCBfSU5GT19NQVA6Ci0gICAgX0lORk9fTUFQID0gX0NvbnN0cnVjdEluZm9NYXAoKQotICByZXR1cm4gX0lORk9fTUFQCi0KLQotIyBDYWNoZSBvZiB0aGUgc29ydGVkIGxpc3Qgb2YgYWxsIHBsYXRmb3JtIG5hbWVzLgotX0FMTCA9IE5vbmUKLQotCi1kZWYgR2V0QWxsKCk6Ci0gICIiIkdldHMgYSBzb3J0ZWQgbGlzdCBvZiBhbGwgdmFsaWQgU3RhcmJvYXJkIHBsYXRmb3JtIG5hbWVzLiIiIgotICBnbG9iYWwgX0FMTAotICBpZiBub3QgX0FMTDoKLSAgICBfQUxMID0gc29ydGVkKF9HZXRJbmZvTWFwKCkua2V5cygpKQotICByZXR1cm4gX0FMTAotCi0KLWRlZiBHZXQocGxhdGZvcm1fbmFtZSk6Ci0gICIiIkdldHMgdGhlIFBsYXRmb3JtSW5mbyBmb3IgdGhlIGdpdmVuIHBsYXRmb3JtIG5hbWUsIG9yIE5vbmUuIiIiCi0gIHJldHVybiBfR2V0SW5mb01hcCgpLmdldChwbGF0Zm9ybV9uYW1lKQotCi0KLWRlZiBHZXRBbGxJbmZvcygpOgotICAiIiJHZXRzIGEgc29ydGVkIHNlcXVlbmNlIG9mIFBsYXRmb3JtSW5mbyBvYmplY3RzIGZvciBhbGwgdmFsaWQgcGxhdGZvcm1zLiIiIgotICByZXR1cm4gKEdldChwKSBmb3IgcCBpbiBHZXRBbGwoKSkKLQotCi1kZWYgSXNWYWxpZChwbGF0Zm9ybV9uYW1lKToKLSAgIiIiRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBwbGF0Zm9ybSBuYW1lIGlzIHZhbGlkLiIiIgotICByZXR1cm4gcGxhdGZvcm1fbmFtZSBpbiBfR2V0SW5mb01hcCgpCi0KLQotY2xhc3MgUGxhdGZvcm1JbmZvKG9iamVjdCk6Ci0gICIiIkluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgU3RhcmJvYXJkIHBsYXRmb3JtLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoKToKLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgc2VsZi5wYXRoID0gcGF0aApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3BsYXRmb3JtX3Rlc3QucHkgYi9zdGFyYm9hcmQvdG9vbHMvcGxhdGZvcm1fdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTgxNDJmMy4uMDAwMDAwMAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvcGxhdGZvcm1fdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJUZXN0cyB0aGUgcGxhdGZvcm0gbW9kdWxlLiIiIgotCi1pbXBvcnQgcGxhdGZvcm0KLWltcG9ydCB1bml0dGVzdAotCi0KLWNsYXNzIFBsYXRmb3JtVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHRlc3RHZXRBbGwoc2VsZik6Ci0gICAgcGxhdGZvcm1fbmFtZXMgPSBwbGF0Zm9ybS5HZXRBbGwoKQotICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgbGVuKHBsYXRmb3JtX25hbWVzKSkKLQotICBkZWYgdGVzdEdldChzZWxmKToKLSAgICBwbGF0Zm9ybV9uYW1lcyA9IHBsYXRmb3JtLkdldEFsbCgpCi0gICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLCBsZW4ocGxhdGZvcm1fbmFtZXMpKQotICAgIHBsYXRmb3JtX25hbWUgPSBwbGF0Zm9ybV9uYW1lc1swXQotICAgIHBsYXRmb3JtX2luZm8gPSBwbGF0Zm9ybS5HZXQocGxhdGZvcm1fbmFtZSkKLSAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm1faW5mbykKLSAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtX25hbWUsIHBsYXRmb3JtX2luZm8ubmFtZSkKLSAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm1faW5mby5wYXRoKQotCi0gIGRlZiB0ZXN0SXNWYWxpZChzZWxmKToKLSAgICBwbGF0Zm9ybV9uYW1lcyA9IHBsYXRmb3JtLkdldEFsbCgpCi0gICAgZm9yIHBsYXRmb3JtX25hbWUgaW4gcGxhdGZvcm1fbmFtZXM6Ci0gICAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm0uSXNWYWxpZChwbGF0Zm9ybV9uYW1lKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0Zm9ybS5Jc1ZhbGlkKHBsYXRmb3JtX25hbWUubG93ZXIoKSkpCi0gICAgICBzZWxmLmFzc2VydEZhbHNlKHBsYXRmb3JtLklzVmFsaWQocGxhdGZvcm1fbmFtZS51cHBlcigpKSkKLSAgICBzZWxmLmFzc2VydEZhbHNlKHBsYXRmb3JtLklzVmFsaWQoJ2ludmFsaWRwbGF0Zm9ybScpKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3BvcnRfc3ltbGluay5weSBiL3N0YXJib2FyZC90b29scy9wb3J0X3N5bWxpbmsucHkKaW5kZXggZjI0OGFiYy4uYjc3YTgxNyAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3BvcnRfc3ltbGluay5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvcG9ydF9zeW1saW5rLnB5CkBAIC0xNiwxNCArMTYsMTIgQEAKICIiIkEgcG9ydGFibGUgaW50ZXJmYWNlIGZvciBzeW1saW5raW5nLiIiIgogCiBpbXBvcnQgYXJncGFyc2UKLWltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXJlbGF0aXZlLWltcG9ydCx1bnVzZWQtaW1wb3J0Ci0KIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCB1dGlsCitmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmsKIAogCiBkZWYgSXNXaW5kb3dzKCk6CkBAIC0zMyw4ICszMSw2IEBACiBkZWYgVG9Mb25nUGF0aChwYXRoKToKICAgIiIiQ29udmVydHMgdG8gYSBwYXRoIHRoYXQgc3VwcG9ydHMgbG9uZyBmaWxlbmFtZXMuIiIiCiAgIGlmIElzV2luZG93cygpOgotICAgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmsKICAgICByZXR1cm4gd2luX3N5bWxpbmsuVG9EZXZpY2VQYXRoKHBhdGgpCiAgIGVsc2U6CiAgICAgcmV0dXJuIHBhdGgKQEAgLTQzLDggKzM5LDYgQEAKIGRlZiBJc1N5bUxpbmsocGF0aCk6CiAgICIiIlBsYXRmb3JtIG5ldXRyYWwgdmVyc2lvbiBvcyBvcy5wYXRoLmlzbGluaygpLiIiIgogICBpZiBJc1dpbmRvd3MoKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1nLWltcG9ydC1ub3QtYXQtdG9wCi0gICAgZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHdpbl9zeW1saW5rCiAgICAgcmV0dXJuIHdpbl9zeW1saW5rLklzUmVwYXJzZVBvaW50KHBhdGgpCiAgIGVsc2U6CiAgICAgcmV0dXJuIG9zLnBhdGguaXNsaW5rKHBhdGgpCkBAIC02MSw4ICs1NSw2IEBACiAgICAgTm9uZQogICAiIiIKICAgaWYgSXNXaW5kb3dzKCk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCB3aW5fc3ltbGluawogICAgIHdpbl9zeW1saW5rLkNyZWF0ZVJlcGFyc2VQb2ludCh0YXJnZXRfcGF0aCwgbGlua19wYXRoKQogICBlbHNlOgogICAgIHV0aWwuTWFrZURpcnMob3MucGF0aC5kaXJuYW1lKGxpbmtfcGF0aCkpCkBAIC03Miw4ICs2NCw2IEBACiBkZWYgUmVhZFN5bUxpbmsobGlua19wYXRoKToKICAgIiIiUmV0dXJucyB0aGUgcGF0aCAoYWJzLiBvciByZWwuKSB0byB0aGUgZm9sZGVyIHJlZmVycmVkIHRvIGJ5IGxpbmtfcGF0aC4iIiIKICAgaWYgSXNXaW5kb3dzKCk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCB3aW5fc3ltbGluawogICAgIHBhdGggPSB3aW5fc3ltbGluay5SZWFkUmVwYXJzZVBvaW50KGxpbmtfcGF0aCkKICAgZWxzZToKICAgICB0cnk6CkBAIC04NSw4ICs3NSw2IEBACiAKIGRlZiBEZWxTeW1MaW5rKGxpbmtfcGF0aCk6CiAgIGlmIElzV2luZG93cygpOgotICAgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKLSAgICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmsKICAgICB3aW5fc3ltbGluay5VbmxpbmtSZXBhcnNlUG9pbnQobGlua19wYXRoKQogICBlbHNlOgogICAgIG9zLnVubGluayhsaW5rX3BhdGgpCkBAIC05NSw4ICs4Myw2IEBACiBkZWYgUm10cmVlKHBhdGgpOgogICAiIiJTZWUgUm10cmVlKCkgZm9yIGRvY3VtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4iIiIKICAgaWYgSXNXaW5kb3dzKCk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCB3aW5fc3ltbGluawogICAgIGZ1bmMgPSB3aW5fc3ltbGluay5SbXRyZWVTaGFsbG93CiAgIGVsaWYgbm90IG9zLnBhdGguaXNsaW5rKHBhdGgpOgogICAgIGZ1bmMgPSBzaHV0aWwucm10cmVlCkBAIC0xMDksOCArOTUsNiBAQAogCiBkZWYgT3NXYWxrKHJvb3RfZGlyLCB0b3Bkb3duPVRydWUsIG9uZXJyb3I9Tm9uZSwgZm9sbG93bGlua3M9RmFsc2UpOgogICBpZiBJc1dpbmRvd3MoKToKLSAgICAjIHB5bGludDogZGlzYWJsZT1nLWltcG9ydC1ub3QtYXQtdG9wCi0gICAgZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHdpbl9zeW1saW5rCiAgICAgcmV0dXJuIHdpbl9zeW1saW5rLk9zV2Fsayhyb290X2RpciwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpCiAgIGVsc2U6CiAgICAgcmV0dXJuIG9zLndhbGsocm9vdF9kaXIsIHRvcGRvd24sIG9uZXJyb3IsIGZvbGxvd2xpbmtzKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3BvcnRfc3ltbGlua190ZXN0LnB5IGIvc3RhcmJvYXJkL3Rvb2xzL3BvcnRfc3ltbGlua190ZXN0LnB5CmluZGV4IDE5MzJlOWQuLjVlYjQzMjYgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90b29scy9wb3J0X3N5bWxpbmtfdGVzdC5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvcG9ydF9zeW1saW5rX3Rlc3QucHkKQEAgLTEzLDE0ICsxMywxMyBAQAogIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlVuaXQgdGVzdHMgZm9yIHBvcnRfc3ltbGluay5weS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9cmVsYXRpdmUtaW1wb3J0LHVudXNlZC1pbXBvcnQKLQogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHBvcnRfc3ltbGluawogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHV0aWwKIApAQCAtNTMsMTQgKzUyLDExIEBACiAKICAgZGVmIHNldFVwKHNlbGYpOgogICAgIHN1cGVyKFBvcnRTeW1saW5rVGVzdCwgc2VsZikuc2V0VXAoKQotICAgIHNlbGYudG1wX2RpciA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksICdwb3J0X3N5bWxpbmsnKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudG1wX2Rpcik6Ci0gICAgICBSbXRyZWUoc2VsZi50bXBfZGlyKQorICAgIHNlbGYudG1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdwb3J0X3N5bWxpbmtfJykKICAgICBzZWxmLnRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAndGFyZ2V0JykKICAgICBzZWxmLmlubmVyX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9kaXIsICdpbm5lcicpCiAgICAgc2VsZi5saW5rX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdsaW5rJykKICAgICBzZWxmLnRhcmdldF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X2RpciwgX1RBUkdFVF9GSUxFTkFNRSkKLSAgICBfTWFrZURpcnMoc2VsZi50bXBfZGlyKQogICAgIF9NYWtlRGlycyhzZWxmLnRhcmdldF9kaXIpCiAgICAgX01ha2VEaXJzKHNlbGYuaW5uZXJfZGlyKQogICAgIHdpdGggb3BlbihzZWxmLnRhcmdldF9maWxlLCAndycpIGFzIGZkOgpAQCAtMTM1LDEzICsxMzEsMTMgQEAKICAgZGVmIHRlc3RPc1dhbGsoc2VsZik6CiAgICAgcGF0aHNfbm9mb2xsb3dfbGlua3MgPSBfR2V0QWxsUGF0aHMoc2VsZi50bXBfZGlyLCBmb2xsb3dsaW5rcz1GYWxzZSkKICAgICBwYXRoc19mb2xsb3dfbGlua3MgPSBfR2V0QWxsUGF0aHMoc2VsZi50bXBfZGlyLCBmb2xsb3dsaW5rcz1UcnVlKQotICAgIHByaW50ICdcbk9zV2FsayBGb2xsb3cgbGlua3M6JworICAgIHByaW50KCdcbk9zV2FsayBGb2xsb3cgbGlua3M6JykKICAgICBmb3IgcGF0aCBpbiBwYXRoc19mb2xsb3dfbGlua3M6Ci0gICAgICBwcmludCAnICAnICsgcGF0aCArICcgKCcgKyBfUGF0aFR5cGVUb1N0cmluZyhwYXRoKSArICcpJwotICAgIHByaW50ICdcbk9zV2FsayBOby1Gb2xsb3cgbGlua3M6JworICAgICAgcHJpbnQoJyAgJyArIHBhdGggKyAnICgnICsgX1BhdGhUeXBlVG9TdHJpbmcocGF0aCkgKyAnKScpCisgICAgcHJpbnQoJ1xuT3NXYWxrIE5vLUZvbGxvdyBsaW5rczonKQogICAgIGZvciBwYXRoIGluIHBhdGhzX25vZm9sbG93X2xpbmtzOgotICAgICAgcHJpbnQgJyAgJyArIHBhdGggKyAnICgnICsgX1BhdGhUeXBlVG9TdHJpbmcocGF0aCkgKyAnKScKLSAgICBwcmludCAnJworICAgICAgcHJpbnQoJyAgJyArIHBhdGggKyAnICgnICsgX1BhdGhUeXBlVG9TdHJpbmcocGF0aCkgKyAnKScpCisgICAgcHJpbnQoJycpCiAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmxpbmtfZGlyLCBwYXRoc19ub2ZvbGxvd19saW5rcykKICAgICBzZWxmLmFzc2VydEluKHNlbGYubGlua19kaXIsIHBhdGhzX2ZvbGxvd19saW5rcykKICAgICBzZWxmLmFzc2VydEluKApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3NlbmRfbGluay5weSBiL3N0YXJib2FyZC90b29scy9zZW5kX2xpbmsucHkKaW5kZXggMTBhNWE1ZC4uNDA3MmM5ZSAxMDA3NTUKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3NlbmRfbGluay5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvc2VuZF9saW5rLnB5CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgIGlmIG5vdCBfQ29ubmVjdFdpdGhSZXRyeShzLCBwb3J0LCBjb25uZWN0aW9uX2F0dGVtcHRzKToKICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ0NvdWxkIG5vdCBjb25uZWN0IHRvIHBvcnQ6ICVkJywgcG9ydCkKICAgICAgICAgcmV0dXJuIDEKLSAgICAgIHRlcm1pbmF0ZWRfbGluayA9IGxpbmsgKyAnXHgwMCcKKyAgICAgIHRlcm1pbmF0ZWRfbGluayA9IChsaW5rICsgJ1x4MDAnKS5lbmNvZGUoKQogICAgICAgYnl0ZXNfc2VudCA9IDAKICAgICAgIHdoaWxlIGJ5dGVzX3NlbnQgPCBsZW4odGVybWluYXRlZF9saW5rKToKICAgICAgICAgc2VudCA9IHMuc2VuZCh0ZXJtaW5hdGVkX2xpbmtbYnl0ZXNfc2VudDpdKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3N5bWJvbGl6ZS9fZW52LnB5IGIvc3RhcmJvYXJkL3Rvb2xzL3N5bWJvbGl6ZS9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjE5MDhlLi4wMDAwMDAwCi0tLSBhL3N0YXJib2FyZC90b29scy9zeW1ib2xpemUvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvc3ltYm9saXplL3N5bWJvbGl6ZS5weSBiL3N0YXJib2FyZC90b29scy9zeW1ib2xpemUvc3ltYm9saXplLnB5CmluZGV4IGNkMTM1YTYuLmJjNzYxMWEgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90b29scy9zeW1ib2xpemUvc3ltYm9saXplLnB5CisrKyBiL3N0YXJib2FyZC90b29scy9zeW1ib2xpemUvc3ltYm9saXplLnB5CkBAIC0zNCw4ICszNCw2IEBACiB3aWxsIGFsd2F5cyBvdXRwdXQgdGhlIHJlc3VsdHMgb2YgdGhlIHN5bWJvbGl6ZXIuCiAiIiIKIAotaW1wb3J0IF9lbnYgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKLQogaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtMTEzLDggKzExMSw5IEBACiAgICAgb2Zmc2V0OiAgVGhlIG9mZnNldCBpbnRvIHRoZSBsaWJyYXJ5IG9mIHRoZSBzeW1ib2wgd2UgYXJlIGxvb2tpbmcgZm9yLgogICAiIiIKICAgaWYgaW50KG9mZnNldCkgPj0gMDoKLSAgICBjb21tYW5kID0gc3VicHJvY2Vzcy5Qb3BlbihbX1NZTUJPTElaRVIsICctZScsIGxpYnJhcnksIG9mZnNldCwgJy1mJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICBjb21tYW5kID0gc3VicHJvY2Vzcy5Qb3BlbiggICMgcHlsaW50OmRpc2FibGU9Y29uc2lkZXItdXNpbmctd2l0aAorICAgICAgICBbX1NZTUJPTElaRVIsICctZScsIGxpYnJhcnksIG9mZnNldCwgJy1mJ10sCisgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAgICAgcmVzdWx0cyA9IGNvbW1hbmQuY29tbXVuaWNhdGUoKQogICAgIGlmIGNvbW1hbmQucmV0dXJuY29kZSA9PSAwOgogICAgICAgcmV0dXJuIHJlc3VsdHNbMF0uc3BsaXQob3MubGluZXNlcCkKQEAgLTEyNyw4ICsxMjYsOCBAQAogICAgICAgJy1mJywKICAgICAgICctLWZpbGVuYW1lJywKICAgICAgIHJlcXVpcmVkPVRydWUsCi0gICAgICBoZWxwPSdUaGUgcGF0aCB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzdGFjayB0cmFjZXMsIGNyYXNoZXMsIG9yIHJhdyBhZGRyZXNzZXMuJwotICApCisgICAgICBoZWxwPSdUaGUgcGF0aCB0byB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBzdGFjayB0cmFjZXMsIGNyYXNoZXMsIG9yICcKKyAgICAgICdyYXcgYWRkcmVzc2VzLicpCiAgIGFyZ19wYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgJy1sJywKICAgICAgICctLWxpYnJhcnknLApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3Rlc3RpbmcvX2Vudi5weSBiL3N0YXJib2FyZC90b29scy90ZXN0aW5nL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3Rlc3RpbmcvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvdGVzdGluZy9idWlsZF90ZXN0cy5weSBiL3N0YXJib2FyZC90b29scy90ZXN0aW5nL2J1aWxkX3Rlc3RzLnB5CmluZGV4IGJhMmRkOWIuLmZjMzVmNTUgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC90b29scy90ZXN0aW5nL2J1aWxkX3Rlc3RzLnB5CisrKyBiL3N0YXJib2FyZC90b29scy90ZXN0aW5nL2J1aWxkX3Rlc3RzLnB5CkBAIC0xNiwxNCArMTYsMTQgQEAKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3VicHJvY2VzcwogCi1BUFBfTEFVTkNIRVJfVEFSR0VUID0gJ2FwcF9sYXVuY2hlcl96aXAnCitBUFBfTEFVTkNIRVJfVEFSR0VUID0gJ2J1aWxkX2FwcF9sYXVuY2hlcl96aXAnCiAKIAogZGVmIEJ1aWxkVGFyZ2V0cyh0YXJnZXRzLCBvdXRfZGlyZWN0b3J5LCBkcnlfcnVuPUZhbHNlLCBleHRyYV9idWlsZF9mbGFncz1Ob25lKToKICAgIiIiQnVpbGRzIGFsbCBzcGVjaWZpZWQgdGFyZ2V0cy4KIAogICBBcmdzOgotICAgIHRhcmdldHM6IEd5cCB0YXJnZXRzIHRvIGJlIGJ1aWx0CisgICAgdGFyZ2V0czogR04gdGFyZ2V0cyB0byBiZSBidWlsdAogICAgIG91dF9kaXJlY3Rvcnk6IERpcmVjdG9yeSB0byBidWlsZCB0bwogICAgIGRyeV9ydW46IFdoZXRoZXIgdG8gcnVuIG5pbmphIHdpdGggLW4gKGRyeSBydW4pCiAgICAgZXh0cmFfYnVpbGRfZmxhZ3M6IEFycmF5IG9mIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGZsYWdzIHRvIHBhc3MgdG8gbmluamEKQEAgLTQwLDcgKzQwLDcgQEAKICAgICBhcmdzX2xpc3QuYXBwZW5kKCctbicpCiAKICAgYXJnc19saXN0LmFwcGVuZChBUFBfTEFVTkNIRVJfVEFSR0VUKQotICBhcmdzX2xpc3QuZXh0ZW5kKFsne31fZGVwbG95Jy5mb3JtYXQodGVzdF9uYW1lKSBmb3IgdGVzdF9uYW1lIGluIHRhcmdldHNdKQorICBhcmdzX2xpc3QuZXh0ZW5kKFsne31faW5zdGFsbCcuZm9ybWF0KHRlc3RfbmFtZSkgZm9yIHRlc3RfbmFtZSBpbiB0YXJnZXRzXSkKICAgaWYgZXh0cmFfYnVpbGRfZmxhZ3M6CiAgICAgYXJnc19saXN0LmV4dGVuZChleHRyYV9idWlsZF9mbGFncykKIApkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3Rlc3RpbmcvdGVzdF9ydW5uZXIucHkgYi9zdGFyYm9hcmQvdG9vbHMvdGVzdGluZy90ZXN0X3J1bm5lci5weQppbmRleCBhNTFmNWNhLi4wYTcyMWQ1IDEwMDc1NQotLS0gYS9zdGFyYm9hcmQvdG9vbHMvdGVzdGluZy90ZXN0X3J1bm5lci5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvdGVzdGluZy90ZXN0X3J1bm5lci5weQpAQCAtMjYsOCArMjYsNyBAQAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRyYWNlYmFjawogCi1pbXBvcnQgX2VudiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydCwgcmVsYXRpdmUtaW1wb3J0Ci1pbXBvcnQgY1N0cmluZ0lPCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgY1N0cmluZ0lPIGFzIFN0cmluZ0lPCiBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgYWJzdHJhY3RfbGF1bmNoZXIKIGZyb20gc3RhcmJvYXJkLnRvb2xzIGltcG9ydCBidWlsZAogZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGNvbW1hbmRfbGluZQpAQCAtNzksMTAgKzc4LDkgQEAKICAgcmV0dXJuIHRhcmdldHMKIAogCi1kZWYgX1ZlcmlmeUNvbmZpZyhjb25maWcpOgorZGVmIF9WZXJpZnlDb25maWcoY29uZmlnLCBmaWx0ZXJzKToKICAgIiIiRW5zdXJlcyBhIHBsYXRmb3JtIG9yIGFwcCBjb25maWcgaXMgc2VsZi1jb25zaXN0ZW50LiIiIgogICB0YXJnZXRzID0gY29uZmlnLkdldFRlc3RUYXJnZXRzKCkKLSAgZmlsdGVycyA9IGNvbmZpZy5HZXRUZXN0RmlsdGVycygpCiAgIGZpbHRlcl90YXJnZXRzID0gWwogICAgICAgZi50YXJnZXRfbmFtZSBmb3IgZiBpbiBmaWx0ZXJzIGlmIGYgIT0gdGVzdF9maWx0ZXIuRElTQUJMRV9URVNUSU5HCiAgIF0KQEAgLTEwNSw3ICsxMDMsNyBAQAogCiAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkX3BpcGUpOgogICAgIHNlbGYucmVhZF9waXBlID0gcmVhZF9waXBlCi0gICAgc2VsZi5vdXRwdXRfbGluZXMgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIHNlbGYub3V0cHV0X2xpbmVzID0gU3RyaW5nSU8oKQogICAgIHNlbGYuc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgc2VsZi5yZWFkZXJfdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fUmVhZExpbmVzKQogCkBAIC0yNTksMTMgKzI1NywxNSBAQAogICAgIHNlbGYudGhyZWFkcyA9IFtdCiAKICAgICBfRW5zdXJlQnVpbGREaXJlY3RvcnlFeGlzdHMoc2VsZi5vdXRfZGlyZWN0b3J5KQotICAgIF9WZXJpZnlDb25maWcoc2VsZi5fcGxhdGZvcm1fY29uZmlnKQorICAgIF9WZXJpZnlDb25maWcoc2VsZi5fcGxhdGZvcm1fY29uZmlnLAorICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm1fdGVzdF9maWx0ZXJzLkdldFRlc3RGaWx0ZXJzKCkpCiAKICAgICBpZiBzZWxmLmxvYWRlcl9wbGF0Zm9ybToKICAgICAgIF9FbnN1cmVCdWlsZERpcmVjdG9yeUV4aXN0cyhzZWxmLmxvYWRlcl9vdXRfZGlyZWN0b3J5KQotICAgICAgX1ZlcmlmeUNvbmZpZyhzZWxmLl9sb2FkZXJfcGxhdGZvcm1fY29uZmlnKQorICAgICAgX1ZlcmlmeUNvbmZpZyhzZWxmLl9sb2FkZXJfcGxhdGZvcm1fY29uZmlnLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2FkZXJfcGxhdGZvcm1fdGVzdF9maWx0ZXJzLkdldFRlc3RGaWx0ZXJzKCkpCiAKLSAgICBfVmVyaWZ5Q29uZmlnKHNlbGYuX2FwcF9jb25maWcpCisgICAgX1ZlcmlmeUNvbmZpZyhzZWxmLl9hcHBfY29uZmlnLCBzZWxmLl9hcHBfY29uZmlnLkdldFRlc3RGaWx0ZXJzKCkpCiAKICAgICAjIElmIGEgcGFydGljdWxhciB0ZXN0IGJpbmFyeSBoYXMgYmVlbiBwcm92aWRlZCwgY29uZmlndXJlIG9ubHkgdGhhdCBvbmUuCiAgICAgbG9nZ2luZy5pbmZvKCJHZXR0aW5nIHRlc3QgdGFyZ2V0cyIpCkBAIC0zNzMsNyArMzczLDcgQEAKICAgZGVmIF9HZXRBbGxUZXN0RW52VmFyaWFibGVzKHNlbGYpOgogICAgICIiIkdldHMgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkIGZvciB0ZXN0cyBvbiB0aGUgZ2l2ZW4gcGxhdGZvcm0uIiIiCiAgICAgZW52X3ZhcmlhYmxlcyA9IHt9Ci0gICAgZm9yIHRlc3QsIHRlc3RfZW52IGluIHNlbGYuX2FwcF9jb25maWcuR2V0VGVzdEVudlZhcmlhYmxlcygpLml0ZXJpdGVtcygpOgorICAgIGZvciB0ZXN0LCB0ZXN0X2VudiBpbiBzZWxmLl9hcHBfY29uZmlnLkdldFRlc3RFbnZWYXJpYWJsZXMoKS5pdGVtcygpOgogICAgICAgaWYgdGVzdCBpbiBlbnZfdmFyaWFibGVzOgogICAgICAgICBlbnZfdmFyaWFibGVzW3Rlc3RdLnVwZGF0ZSh0ZXN0X2VudikKICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvdG9vbHMvdG9vbGNoYWluX2RlcHJlY2F0ZWQucHkgYi9zdGFyYm9hcmQvdG9vbHMvdG9vbGNoYWluX2RlcHJlY2F0ZWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZGU0NGUuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3Rvb2xjaGFpbl9kZXByZWNhdGVkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiJTdGFyYm9hcmQncyBhYnN0cmFjdCBUb29sY2hhaW4gd2hpY2ggaXMgaW1wbGVtZW50ZWQgZm9yIGVhY2ggcGxhdGZvcm0uIiIiCi0KLWltcG9ydCBhYmMKLQotCi1jbGFzcyBBQkNNZXRhU2luZ2xldG9uKGFiYy5BQkNNZXRhKToKLSAgaW5zdGFuY2VzID0ge30KLQotICBkZWYgX19jYWxsX18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgotICAgIGlmIGNscyBub3QgaW4gY2xzLmluc3RhbmNlczoKLSAgICAgIGNscy5pbnN0YW5jZXNbY2xzXSA9IHN1cGVyKEFCQ01ldGFTaW5nbGV0b24sIGNscykuX19jYWxsX18oCi0gICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQotICAgIHJldHVybiBjbHMuaW5zdGFuY2VzW2Nsc10KLQotCi1jbGFzcyBUb29sY2hhaW4ob2JqZWN0KToKLSAgIiIiVGhpcyBpcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2Ugb2YgdGhlIFRvb2xjaGFpbi4iIiIKLSAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGFTaW5nbGV0b24KLQotICAjIFRPRE86IG1vdmUgdmFyaWFibGVzIC8gY29tbWFuZHMKLSAgIyAgIEFSIC8gX0hPU1QKLSAgIyAgIEFSRkxBR1MgLyBfSE9TVAotICAjICAgQVJUSElORkxBR1MgLyBfSE9TVAotICAjICAgQ0MgLyBDQ19IT1NUCi0gICMgICBDWFggLyBDWFhfSE9TVAotICAjICAgTEQgLyBMRF9IT1NUCi0gICMgICBSQyAvIFJDX0hPU1QKLSAgIyBBbmQgLyBvciBpbXBsZW1lbnQgTmluamFXcml0ZXIuV3JpdGVTb3VyY2VzICYgR2VuZXJhdGVPdXRwdXRGb3JDb25maWcgYm9keQotICAjIGhlcmUuCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgRGVmaW5lKHNlbGYsIGQpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBFbmNvZGVSc3BGaWxlTGlzdChzZWxmLCBhcmdzKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgRXhwYW5kRW52VmFycyhzZWxmLCBwYXRoLCBlbnYpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBFeHBhbmRSdWxlVmFyaWFibGVzKHNlbGYsIHBhdGgsIHJvb3QsIGRpcm5hbWUsIHNvdXJjZSwgZXh0LCBuYW1lKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2VuZXJhdGVFbnZpcm9ubWVudEZpbGVzKHNlbGYsIHRvcGxldmVsX2J1aWxkX2RpciwgZ2VuZXJhdG9yX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5fb3V0KToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2V0Q29tcGlsZXJTZXR0aW5ncyhzZWxmKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2V0UHJlY29tcGlsZWRIZWFkZXIoc2VsZiwgKiprd2FyZ3MpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBJbml0Q29tcGlsZXJTZXR0aW5ncyhzZWxmLCBzcGVjLCAqKmt3YXJncyk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIFNldEFkZGl0aW9uYWxHeXBWYXJpYWJsZXMoc2VsZiwgZGVmYXVsdF92YXJpYWJsZXMsICoqa3dhcmdzKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgVmVyaWZ5TWlzc2luZ1NvdXJjZXMoc2VsZiwgc291cmNlcywgKiprd2FyZ3MpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBRdW90ZUZvclJzcEZpbGUoc2VsZiwgYXJnKToKLSAgICBwYXNzCi0KLQotY2xhc3MgUHJlY29tcGlsZWRIZWFkZXI6Ci0gICIiIkFic3RyYWN0IHByZWNvbXBpbGVkIGhlYWRlciBzZXR0aW5ncyBjbGFzcy4iIiIKLSAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldEZsYWdzTW9kaWZpY2F0aW9ucyhzZWxmLCBpbnB1dF9mbGFncywgb3V0cHV0LCBpbXBsaWNpdCwgY29tbWFuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmxhZ3NfYywgY2ZsYWdzX2NjLCBleHBhbmRfc3BlY2lhbCk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldFBjaEJ1aWxkQ29tbWFuZHMoc2VsZik6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldEluY2x1ZGUoc2VsZik6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldE9iakRlcGVuZGVuY2llcyhzZWxmLCBzb3VyY2VzLCBvdXRwdXQpOgotICAgIHBhc3MKLQotCi1jbGFzcyBDb21waWxlclNldHRpbmdzOgotICAiIiJBYnN0cmFjdCBDb21waWxlciBTZXR0aW5ncyBjbGFzcy4iIiIKLSAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldEFyY2goc2VsZiwgY29uZmlnKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2V0Q2ZsYWdzKHNlbGYsIGNvbmZpZyk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldENmbGFnc0Moc2VsZiwgY29uZmlnKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2V0Q2ZsYWdzQ0Moc2VsZiwgY29uZmlnKToKLSAgICBwYXNzCi0KLSAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICBkZWYgR2V0Q2ZsYWdzT2JqZWN0aXZlQyhzZWxmLCBjb25maWcpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBHZXRDZmxhZ3NPYmplY3RpdmVDQyhzZWxmLCBjb25maWcpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBHZXREZWZpbmVzKHNlbGYsIGNvbmZpZyk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldExkRmxhZ3Moc2VsZiwgY29uZmlnLCAqKmt3YXJncyk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIEdldExpYkZsYWdzKHNlbGYsIGNvbmZpZywgZ3lwX3BhdGhfdG9fbmluamEpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBHZXRSY0ZsYWdzKHNlbGYsIGNvbmZpZywgZ3lwX3BhdGhfdG9fbmluamEpOgotICAgIHBhc3MKLQotICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gIGRlZiBQcm9jZXNzSW5jbHVkZURpcnMoc2VsZiwgaW5jbHVkZV9kaXJzLCBjb25maWdfbmFtZSk6Ci0gICAgcGFzcwotCi0gIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgZGVmIFByb2Nlc3NMaWJyYXJpZXMoc2VsZiwgbGlicmFyaWVzLCBjb25maWdfbmFtZSk6Ci0gICAgcGFzcwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3Rvb2xzLmd5cCBiL3N0YXJib2FyZC90b29scy90b29scy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZmU5MTMuLjAwMDAwMDAKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3Rvb2xzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoZSBTdGFyYm9hcmQgImFsbCIgdGFyZ2V0LCB3aGljaCBpbmNsdWRlcyBhbGwgaW50ZXJlc3RpbmcgdGFyZ2V0cyBmb3IgdGhlCi0jIFN0YXJib2FyZCBwcm9qZWN0LgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhcHBfbGF1bmNoZXJfemlwJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2FwcF9sYXVuY2hlcl9wYWNrYWdlcl9wYXRoJzogJ2FwcF9sYXVuY2hlcl9wYWNrYWdlci5weScsCi0gICAgICAgICdhcHBfbGF1bmNoZXJfemlwX2ZpbGUnOiAnPChQUk9EVUNUX0RJUikvYXBwX2xhdW5jaGVyLnppcCcsCi0gICAgICB9LAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAncGFja2FnZV9hcHBfbGF1bmNoZXInLAotICAgICAgICAgICdtZXNzYWdlJzogJ1ppcHBpbmcgPChhcHBfbGF1bmNoZXJfemlwX2ZpbGUpJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oc3RhcmJvYXJkLnRvb2xzLmFwcF9sYXVuY2hlcl9wYWNrYWdlciAtbCAtLXJldHVybl9saXN0KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KGFwcF9sYXVuY2hlcl96aXBfZmlsZSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KGFwcF9sYXVuY2hlcl9wYWNrYWdlcl9wYXRoKScsCi0gICAgICAgICAgICAnLXonLAotICAgICAgICAgICAgJzwoYXBwX2xhdW5jaGVyX3ppcF9maWxlKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXQotfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3V0aWwucHkgYi9zdGFyYm9hcmQvdG9vbHMvdXRpbC5weQppbmRleCBiM2RlNWM2Li5lYWIzNjQ0IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvdXRpbC5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvdXRpbC5weQpAQCAtMzIsNiArMzIsNyBAQAogICAgICAgcmV0dXJuIGZ1bGxfbmFtZQogICByZXR1cm4gTm9uZQogCisKIGRlZiBNYWtlRGlycyhkZXN0aW5hdGlvbl9kaXIpOgogICAiIiJXcmFwcGVyIGFyb3VuZCBvcy5tYWtlZGlycyB0aGF0IGlzIGEgbm9vcCBpZiB0aGUgZGlyZWN0b3J5IGV4aXN0cy4iIiIKICAgaWYgb3MucGF0aC5pc2RpcihkZXN0aW5hdGlvbl9kaXIpOgpAQCAtODIsMzkgKzgzLDE0IEBACiAKICAgbG9nZ2luZy5kZWJ1Zygnc2hlbGwgaXMgJXInLCBzaGVsbCkKIAotICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9c2hlbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWN3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCi0KLQotZGVmIEV4ZWN1dGUoY21kX2xpbmUsIGVudj1Ob25lLCBjd2Q9Tm9uZSwgc2hlbGw9Tm9uZSk6Ci0gICIiIlJ1biB0aGUgc3BlY2lmaWMgY29tbWFuZCBsaW5lIGFuZCBoYW5kbGUgZXJyb3IuCi0KLSAgQXJnczoKLSAgICBjbWRfbGluZTogQ29tbWFuZCBsaW5lLiBDYW4gZWl0aGVyIGJlIGEgbGlzdCBvZiBhcmdzIG9yIGEgc3RyaW5nLgotICAgIGVudjogRGljdCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0gICAgY3dkOiBXb3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHByb2Nlc3MuCi0gICAgc2hlbGw6IFNldCB0byBUcnVlIHRvIHNwYXduIGEgc2hlbGwgZm9yIHRoZSBwcm9jZXNzLgotICBSYWlzZXM6Ci0gICAgUnVudGltZUVycm9yOiBpZiBwcm9jZXNzIHJldHVybnMgYW4gZXJyb3IuCi0gIFJldHVybnM6Ci0gICAgYnl0ZWFycmF5IGNvbnRhaW5pbmcgYW55IGNvbW1hbmQgb3V0cHV0LgotICAiIiIKLQotICBwcm9jID0gU3Bhd25Qcm9jZXNzKGNtZF9saW5lLCBlbnYsIGN3ZCwgc2hlbGwpCi0gIG91dHB1dCA9IGJ5dGVhcnJheSgpCi0gIGZvciBsaW5lIGluIHByb2Muc3Rkb3V0OgotICAgIGxvZ2dpbmcuaW5mbyhsaW5lLnJzdHJpcCgpKQotICAgIG91dHB1dCArPSBsaW5lCi0KLSAgaWYgcHJvYy53YWl0KCkgIT0gMDoKLSAgICBtc2cgPSAnJXMgZmFpbGVkICglZCk6XG4lcycgJSAoY21kX2xpbmUsIHByb2MucmV0dXJuY29kZSwgb3V0cHV0KQotICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cpCi0gIHJldHVybiBvdXRwdXQKKyAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICBjbWRfbGluZSwKKyAgICAgIHNoZWxsPXNoZWxsLAorICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgIGVudj1lbnYsCisgICAgICBjd2Q9Y3dkLAorICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAKIAogZGVmIEV4ZWN1dGVNdWx0aXBsZShjbWRfbGluZV9saXN0LApAQCAtMTkwLDcgKzE2Niw3IEBACiAgICIiIgogICBNYWtlQ2xlYW5EaXJzKGRlc3RpbmF0aW9uX2RpcikKICAgbG9nZ2luZy5pbmZvKCdEZWNvbXByZXNzaW5nICVzIC0+ICVzJywgYXJjaGl2ZV9maWxlLCBkZXN0aW5hdGlvbl9kaXIpCi0gIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGFyY2hpdmVfZmlsZSwgbW9kZT0ncicpCisgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGFyY2hpdmVfZmlsZSwgbW9kZT0ncicpICAjIHB5bGludDogZGlzYWJsZT1jb25zaWRlci11c2luZy13aXRoCiAgIHppcF9maWxlLmV4dHJhY3RhbGwoZGVzdGluYXRpb25fZGlyKQogCiAKQEAgLTIxMiw5ICsxODgsOSBAQAogICBmb3Igc291cmNlLCBkZXN0IGluIGpvYl9saXN0OgogICAgIGxvZ2dpbmcuaW5mbygnQ29tcHJlc3NpbmcgJXMgLT4gJXMuemlwJywgc291cmNlLCBkZXN0KQogICAgIG91dHB1dHMuYXBwZW5kKCclcy56aXAnICUgZGVzdCkKLSAgICBjb21wcmVzc19wcm9jcy5hcHBlbmQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNodXRpbC5tYWtlX2FyY2hpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGRlc3QsICd6aXAnLCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpKSkKKyAgICBjb21wcmVzc19wcm9jcy5hcHBlbmQoCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAorICAgICAgICAgICAgdGFyZ2V0PXNodXRpbC5tYWtlX2FyY2hpdmUsIGFyZ3M9KGRlc3QsICd6aXAnLCBzb3VyY2UsIE5vbmUpKSkKIAogICBmb3IgcHJvYyBpbiBjb21wcmVzc19wcm9jczoKICAgICBwcm9jLnN0YXJ0KCkKQEAgLTIyNCw2ICsyMDAsNyBAQAogICAgIHByb2Muam9pbigpCiAgIHJldHVybiBvdXRwdXRzCiAKKwogZGVmIFNldHVwRGVmYXVsdExvZ2dpbmdDb25maWcobG9nZ2luZ19sdmw9bG9nZ2luZy5JTkZPKToKICAgZm10ID0gJ1slKGZpbGVuYW1lKXM6JShsaW5lbm8pczolKGxldmVsbmFtZSlzXSAlKG1lc3NhZ2UpcycKICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9Zm10LCBsZXZlbD1sb2dnaW5nX2x2bCkKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy93aW5fc3ltbGluay5weSBiL3N0YXJib2FyZC90b29scy93aW5fc3ltbGluay5weQppbmRleCA4NDI2YjIxLi45MzlmNmE4IDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvd2luX3N5bWxpbmsucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rLnB5CkBAIC0xMiw3ICsxMiw2IEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCiAiIiJQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHN5bWxpbmtpbmcgb24gV2luZG93cy4KIAogUmVwYXJzZSBwb2ludHM6IEFyZSBvcy1sZXZlbCBzeW1saW5rcyBmb3IgZm9sZGVycyB3aGljaCBjYW4gYmUgY3JlYXRlZCB3aXRob3V0CkBAIC0zMiw3ICszMSw2IEBACiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRpbWUKIAotCiBfUkVUUllfVElNRVMgPSAxMAogCiAKQEAgLTQ4LDcgKzQ2LDkgQEAKICAgUmV0dXJuczoKICAgICBBYnNvbHV0ZSBkZXZpY2UgcGF0aCBzdGFydGluZyB3aXRoICJcXD9cIi4KICAgIiIiCi0gIGlmIG5vdCBpc2luc3RhbmNlKGRvc19wYXRoLCB1bmljb2RlKSBhbmQgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICMgVGhpcyB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCBib3RoIHB5dGhvbiAyIGFuZCAzLgorICB1bmljb2RlX3R5cGUgPSB0eXBlKHUnJykKKyAgaWYgbm90IGlzaW5zdGFuY2UoZG9zX3BhdGgsIHVuaWNvZGVfdHlwZSkgYW5kIGVuY29kaW5nIGlzIG5vdCBOb25lOgogICAgIGRvc19wYXRoID0gZG9zX3BhdGguZGVjb2RlKGVuY29kaW5nKQogICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKGRvc19wYXRoKQogICBpZiBwYXRoLnN0YXJ0c3dpdGgodSdcXFxcJyk6CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICBvcy5ybWRpcihwYXRoKQogICAgICAgcmV0dXJuCiAgICAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgICAgaWYgaSA9PSBfUkVUUllfVElNRVMtMToKKyAgICAgIGlmIGkgPT0gX1JFVFJZX1RJTUVTIC0gMToKICAgICAgICAgcmFpc2UKICAgICAgIGVsc2U6CiAgICAgICAgIHRpbWUuc2xlZXAoLjEpCkBAIC0xNDMsOCArMTQzLDggQEAKIGRlZiBSZWFkUmVwYXJzZVBvaW50KHBhdGgpOgogICAiIiJNaW1pY3Mgb3MucmVhZGxpbmsgZm9yIHVzYWdlLiIiIgogICB0cnk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGltcG9ydCB3aW5fc3ltbGlua19mYXN0CisgICAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwKKyAgICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmtfZmFzdAogICAgIHJldHVybiB3aW5fc3ltbGlua19mYXN0LkZhc3RSZWFkUmVwYXJzZUxpbmsocGF0aCkKICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICBsb2dnaW5nLmV4Y2VwdGlvbignIGVycm9yOiAlcywgZmFsbGluZyBiYWNrIHRvIGNvbW1hbmQgbGluZSB2ZXJzaW9uLicsIGVycikKQEAgLTE1NCwxMCArMTU0LDEwIEBACiBkZWYgSXNSZXBhcnNlUG9pbnQocGF0aCk6CiAgICIiIk1pbWljcyBvcy5pc2xpbmsgZm9yIHVzYWdlLiIiIgogICB0cnk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGltcG9ydCB3aW5fc3ltbGlua19mYXN0CisgICAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwKKyAgICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmtfZmFzdAogICAgIHJldHVybiB3aW5fc3ltbGlua19mYXN0LkZhc3RJc1JlcGFyc2VMaW5rKHBhdGgpCi0gIGV4Y2VwdCAgRXhjZXB0aW9uIGFzIGVycjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAorICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCcgZXJyb3I6ICVzLCBmYWxsaW5nIGJhY2sgdG8gY29tbWFuZCBsaW5lIHZlcnNpb24uJywgZXJyKQogICAgIHJldHVybiBOb25lIGlzIG5vdCBSZWFkUmVwYXJzZVBvaW50U2hlbGwocGF0aCkKIApAQCAtMTgwLDE1ICsxODAsMTYgQEAKICAgZWxzZToKICAgICBVbmxpbmtSZXBhcnNlUG9pbnQobGlua19mb2xkZXIpICAjIERlbGV0ZXMgaWYgaXQgZXhpc3RzLgogICB0cnk6Ci0gICAgIyBweWxpbnQ6IGRpc2FibGU9Zy1pbXBvcnQtbm90LWF0LXRvcAotICAgIGltcG9ydCB3aW5fc3ltbGlua19mYXN0CisgICAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LW91dHNpZGUtdG9wbGV2ZWwKKyAgICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgd2luX3N5bWxpbmtfZmFzdAogICAgIHdpbl9zeW1saW5rX2Zhc3QuRmFzdENyZWF0ZVJlcGFyc2VMaW5rKGZyb21fZm9sZGVyLCBsaW5rX2ZvbGRlcikKICAgICByZXR1cm4KICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgcGFzcwogICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAotICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCd1bmV4cGVjdGVkIGVycm9yOiAlcywgZnJvbT0lcywgbGluaz0lcywgZmFsbGluZyBiYWNrIHRvICcKLSAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCBsaW5lIHZlcnNpb24uJywgZXJyLCBmcm9tX2ZvbGRlciwgbGlua19mb2xkZXIpCisgICAgbG9nZ2luZy5leGNlcHRpb24oCisgICAgICAgICd1bmV4cGVjdGVkIGVycm9yOiAlcywgZnJvbT0lcywgbGluaz0lcywgZmFsbGluZyBiYWNrIHRvICcKKyAgICAgICAgJ2NvbW1hbmQgbGluZSB2ZXJzaW9uLicsIGVyciwgZnJvbV9mb2xkZXIsIGxpbmtfZm9sZGVyKQogICBwYXJfZGlyID0gb3MucGF0aC5kaXJuYW1lKGxpbmtfZm9sZGVyKQogICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXJfZGlyKToKICAgICBvcy5tYWtlZGlycyhwYXJfZGlyKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX2Zhc3QucHkgYi9zdGFyYm9hcmQvdG9vbHMvd2luX3N5bWxpbmtfZmFzdC5weQppbmRleCA5ODdhNjliLi44YzVlOTQwIDEwMDY0NAotLS0gYS9zdGFyYm9hcmQvdG9vbHMvd2luX3N5bWxpbmtfZmFzdC5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvd2luX3N5bWxpbmtfZmFzdC5weQpAQCAtMTIsMTYgKzEyLDEyIEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0KICIiIlByb3ZpZGVzIGZ1bmN0aW9ucyBmb3Igc3ltbGlua2luZyBvbiBXaW5kb3dzLiIiIgogCi0KIGltcG9ydCBjdHlwZXMKIGZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcwogaW1wb3J0IG9zCiAKLQogRFdPUkQgPSB3aW50eXBlcy5EV09SRAogTFBDV1NUUiA9IHdpbnR5cGVzLkxQQ1dTVFIKIEhBTkRMRSA9IHdpbnR5cGVzLkhBTkRMRQpAQCAtMzEsNTQgKzI3LDQ4IEBACiBVTE9ORyA9IHdpbnR5cGVzLlVMT05HCiBXQ0hBUiA9IHdpbnR5cGVzLldDSEFSCiAKLQota2VybmVsMzIgPSB3aW50eXBlcy5XaW5ETEwoJ2tlcm5lbDMyJykKK2tlcm5lbDMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgogTFBEV09SRCA9IGN0eXBlcy5QT0lOVEVSKERXT1JEKQogVUNIQVIgPSBjdHlwZXMuY191Ynl0ZQogCi0KIEdldEZpbGVBdHRyaWJ1dGVzVyA9IGtlcm5lbDMyLkdldEZpbGVBdHRyaWJ1dGVzVwogR2V0RmlsZUF0dHJpYnV0ZXNXLnJlc3R5cGUgPSBEV09SRAogR2V0RmlsZUF0dHJpYnV0ZXNXLmFyZ3R5cGVzID0gKExQQ1dTVFIsKSAgIyBscEZpbGVOYW1lIEluCiAKLQogSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgPSAweEZGRkZGRkZGCiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UID0gMHgwMDQwMAogCi0KIENyZWF0ZUZpbGVXID0ga2VybmVsMzIuQ3JlYXRlRmlsZVcKIENyZWF0ZUZpbGVXLnJlc3R5cGUgPSBIQU5ETEUKLUNyZWF0ZUZpbGVXLmFyZ3R5cGVzID0gKExQQ1dTVFIsICAjIGxwRmlsZU5hbWUgSW4KLSAgICAgICAgICAgICAgICAgICAgICAgIERXT1JELCAgICAjIGR3RGVzaXJlZEFjY2VzcyBJbgotICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQsICAgICMgZHdTaGFyZU1vZGUgSW4KLSAgICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCwgICAjIGxwU2VjdXJpdHlBdHRyaWJ1dGVzIEluX29wdAotICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQsICAgICMgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uIEluCi0gICAgICAgICAgICAgICAgICAgICAgICBEV09SRCwgICAgIyBkd0ZsYWdzQW5kQXR0cmlidXRlcyBJbgotICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFKSAgICMgaFRlbXBsYXRlRmlsZSBJbl9vcHQKLQorQ3JlYXRlRmlsZVcuYXJndHlwZXMgPSAoCisgICAgTFBDV1NUUiwgICMgbHBGaWxlTmFtZSBJbgorICAgIERXT1JELCAgIyBkd0Rlc2lyZWRBY2Nlc3MgSW4KKyAgICBEV09SRCwgICMgZHdTaGFyZU1vZGUgSW4KKyAgICBMUFZPSUQsICAjIGxwU2VjdXJpdHlBdHRyaWJ1dGVzIEluX29wdAorICAgIERXT1JELCAgIyBkd0NyZWF0aW9uRGlzcG9zaXRpb24gSW4KKyAgICBEV09SRCwgICMgZHdGbGFnc0FuZEF0dHJpYnV0ZXMgSW4KKyAgICBIQU5ETEUpICAjIGhUZW1wbGF0ZUZpbGUgSW5fb3B0CiAKIENsb3NlSGFuZGxlID0ga2VybmVsMzIuQ2xvc2VIYW5kbGUKIENsb3NlSGFuZGxlLnJlc3R5cGUgPSBCT09MCiBDbG9zZUhhbmRsZS5hcmd0eXBlcyA9IChIQU5ETEUsKSAgIyBoT2JqZWN0IEluCiAKLQotSU5WQUxJRF9IQU5ETEVfVkFMVUUgPSBIQU5ETEUoLTEpLnZhbHVlCitJTlZBTElEX0hBTkRMRV9WQUxVRSA9IEhBTkRMRSgtMSkudmFsdWUgICMgcHlsaW50OmRpc2FibGU9aW52YWxpZC1uYW1lCiBPUEVOX0VYSVNUSU5HID0gMwogRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MgPSAweDAyMDAwMDAwCiBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UID0gMHgwMDIwMDAwMAogCi0KIERldmljZUlvQ29udHJvbCA9IGtlcm5lbDMyLkRldmljZUlvQ29udHJvbAogRGV2aWNlSW9Db250cm9sLnJlc3R5cGUgPSBCT09MCi1EZXZpY2VJb0NvbnRyb2wuYXJndHlwZXMgPSAoSEFORExFLCAgICMgaERldmljZSBJbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JELCAgICAjIGR3SW9Db250cm9sQ29kZSBJbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCwgICAjIGxwSW5CdWZmZXIgSW5fb3B0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQsICAgICMgbkluQnVmZmVyU2l6ZSBJbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCwgICAjIGxwT3V0QnVmZmVyIE91dF9vcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCwgICAgIyBuT3V0QnVmZmVyU2l6ZSBJbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQsICAjIGxwQnl0ZXNSZXR1cm5lZCBPdXRfb3B0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEKSAgICMgbHBPdmVybGFwcGVkIElub3V0X29wdAotCitEZXZpY2VJb0NvbnRyb2wuYXJndHlwZXMgPSAoCisgICAgSEFORExFLCAgIyBoRGV2aWNlIEluCisgICAgRFdPUkQsICAjIGR3SW9Db250cm9sQ29kZSBJbgorICAgIExQVk9JRCwgICMgbHBJbkJ1ZmZlciBJbl9vcHQKKyAgICBEV09SRCwgICMgbkluQnVmZmVyU2l6ZSBJbgorICAgIExQVk9JRCwgICMgbHBPdXRCdWZmZXIgT3V0X29wdAorICAgIERXT1JELCAgIyBuT3V0QnVmZmVyU2l6ZSBJbgorICAgIExQRFdPUkQsICAjIGxwQnl0ZXNSZXR1cm5lZCBPdXRfb3B0CisgICAgTFBWT0lEKSAgIyBscE92ZXJsYXBwZWQgSW5vdXRfb3B0CiAKIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UID0gMHgwMDA5MDBBOAogSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQgPSAweEEwMDAwMDAzCkBAIC05OSwxMSArODksOSBAQAogICAiIiJXaW4zMiBhcGkgZGF0YSBzdHJ1Y3R1cmUuIiIiCiAKICAgX2ZpZWxkc18gPSAoKCdTdWJzdGl0dXRlTmFtZU9mZnNldCcsIFVTSE9SVCksCi0gICAgICAgICAgICAgICgnU3Vic3RpdHV0ZU5hbWVMZW5ndGgnLCBVU0hPUlQpLAotICAgICAgICAgICAgICAoJ1ByaW50TmFtZU9mZnNldCcsIFVTSE9SVCksCi0gICAgICAgICAgICAgICgnUHJpbnROYW1lTGVuZ3RoJywgVVNIT1JUKSwKLSAgICAgICAgICAgICAgKCdGbGFncycsIFVMT05HKSwKLSAgICAgICAgICAgICAgKCdQYXRoQnVmZmVyJywgV0NIQVIgKiAxKSkKKyAgICAgICAgICAgICAgKCdTdWJzdGl0dXRlTmFtZUxlbmd0aCcsIFVTSE9SVCksICgnUHJpbnROYW1lT2Zmc2V0JywgVVNIT1JUKSwKKyAgICAgICAgICAgICAgKCdQcmludE5hbWVMZW5ndGgnLCBVU0hPUlQpLCAoJ0ZsYWdzJywgVUxPTkcpLCAoJ1BhdGhCdWZmZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQ0hBUiAqIDEpKQogCiAgIEBwcm9wZXJ0eQogICBkZWYgcHJpbnRfbmFtZShzZWxmKToKQEAgLTEyNSwxMCArMTEzLDggQEAKIGNsYXNzIE1vdW50UG9pbnRSZXBhcnNlQnVmZmVyKGN0eXBlcy5TdHJ1Y3R1cmUpOgogICAiIiJXaW4zMiBhcGkgZGF0YSBzdHJ1Y3R1cmUuIiIiCiAgIF9maWVsZHNfID0gKCgnU3Vic3RpdHV0ZU5hbWVPZmZzZXQnLCBVU0hPUlQpLAotICAgICAgICAgICAgICAoJ1N1YnN0aXR1dGVOYW1lTGVuZ3RoJywgVVNIT1JUKSwKLSAgICAgICAgICAgICAgKCdQcmludE5hbWVPZmZzZXQnLCBVU0hPUlQpLAotICAgICAgICAgICAgICAoJ1ByaW50TmFtZUxlbmd0aCcsIFVTSE9SVCksCi0gICAgICAgICAgICAgICgnUGF0aEJ1ZmZlcicsIFdDSEFSICogMSkpCisgICAgICAgICAgICAgICgnU3Vic3RpdHV0ZU5hbWVMZW5ndGgnLCBVU0hPUlQpLCAoJ1ByaW50TmFtZU9mZnNldCcsIFVTSE9SVCksCisgICAgICAgICAgICAgICgnUHJpbnROYW1lTGVuZ3RoJywgVVNIT1JUKSwgKCdQYXRoQnVmZmVyJywgV0NIQVIgKiAxKSkKIAogICBAcHJvcGVydHkKICAgZGVmIHByaW50X25hbWUoc2VsZik6CkBAIC0xNTEsMTUgKzEzNywxNyBAQAogICAgIF9maWVsZHNfID0gKCgnU3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlcicsIFN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIpLAogICAgICAgICAgICAgICAgICgnTW91bnRQb2ludFJlcGFyc2VCdWZmZXInLCBNb3VudFBvaW50UmVwYXJzZUJ1ZmZlciksCiAgICAgICAgICAgICAgICAgKCdHZW5lcmljUmVwYXJzZUJ1ZmZlcicsIEdlbmVyaWNSZXBhcnNlQnVmZmVyKSkKLSAgX2ZpZWxkc18gPSAoKCdSZXBhcnNlVGFnJywgVUxPTkcpLAotICAgICAgICAgICAgICAoJ1JlcGFyc2VEYXRhTGVuZ3RoJywgVVNIT1JUKSwKLSAgICAgICAgICAgICAgKCdSZXNlcnZlZCcsIFVTSE9SVCksCi0gICAgICAgICAgICAgICgnUmVwYXJzZUJ1ZmZlcicsIFJlcGFyc2VCdWZmZXIpKQorCisgIF9maWVsZHNfID0gKCgnUmVwYXJzZVRhZycsIFVMT05HKSwgKCdSZXBhcnNlRGF0YUxlbmd0aCcsIFVTSE9SVCksCisgICAgICAgICAgICAgICgnUmVzZXJ2ZWQnLCBVU0hPUlQpLCAoJ1JlcGFyc2VCdWZmZXInLCBSZXBhcnNlQnVmZmVyKSkKICAgX2Fub255bW91c18gPSAoJ1JlcGFyc2VCdWZmZXInLCkKIAogCiBkZWYgX1RvVW5pY29kZShzKToKLSAgcmV0dXJuIHMuZGVjb2RlKCd1dGYtOCcpCisgIHRyeToKKyAgICByZXR1cm4gcy5kZWNvZGUoJ3V0Zi04JykKKyAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHJldHVybiBzCiAKIAogX2tkbGwgPSBOb25lCkBAIC0yMTIsMjYgKzIwMCwxOCBAQAogZGVmIEZhc3RSZWFkUmVwYXJzZUxpbmsocGF0aCk6CiAgICIiIlNlZSBhcGkgZG9jc3RyaW5nLCBhYm92ZS4iIiIKICAgcGF0aCA9IF9Ub1VuaWNvZGUocGF0aCkKLSAgcmVwYXJzZV9wb2ludF9oYW5kbGUgPSBDcmVhdGVGaWxlVyhwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU5fRVhJU1RJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX09QRU5fUkVQQVJTRV9QT0lOVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKKyAgcmVwYXJzZV9wb2ludF9oYW5kbGUgPSBDcmVhdGVGaWxlVygKKyAgICAgIHBhdGgsIDAsIDAsIE5vbmUsIE9QRU5fRVhJU1RJTkcsCisgICAgICBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UIHwgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5vbmUpCiAgIGlmIHJlcGFyc2VfcG9pbnRfaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFOgogICAgIHJldHVybiBOb25lCiAgICMgUmVtb3ZlIGZhbHNlIHBvc2l0aXZlIGJlbG93LgogICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1ldGhvZAogICB0YXJnZXRfYnVmZmVyID0gY3R5cGVzLmNfYnVmZmVyKE1BWElNVU1fUkVQQVJTRV9EQVRBX0JVRkZFUl9TSVpFKQogICBuX2J5dGVzX3JldHVybmVkID0gRFdPUkQoKQotICBpb19yZXN1bHQgPSBEZXZpY2VJb0NvbnRyb2wocmVwYXJzZV9wb2ludF9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfYnVmZmVyLCBsZW4odGFyZ2V0X2J1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuYnlyZWYobl9ieXRlc19yZXR1cm5lZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQorICBpb19yZXN1bHQgPSBEZXZpY2VJb0NvbnRyb2wocmVwYXJzZV9wb2ludF9oYW5kbGUsIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMCwgdGFyZ2V0X2J1ZmZlciwgbGVuKHRhcmdldF9idWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKG5fYnl0ZXNfcmV0dXJuZWQpLCBOb25lKQogICBDbG9zZUhhbmRsZShyZXBhcnNlX3BvaW50X2hhbmRsZSkKICAgaWYgbm90IGlvX3Jlc3VsdDoKICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX2Zhc3RfdGVzdC5weSBiL3N0YXJib2FyZC90b29scy93aW5fc3ltbGlua19mYXN0X3Rlc3QucHkKaW5kZXggNDczYTJmOC4uOWRlZjIwYiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX2Zhc3RfdGVzdC5weQorKysgYi9zdGFyYm9hcmQvdG9vbHMvd2luX3N5bWxpbmtfZmFzdF90ZXN0LnB5CkBAIC0xMiwxNiArMTIsMTEgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KICIiIlRlc3RzIHRoZSB3aW5fc3ltbGlua19mYXN0IGZ1bmN0aW9uYWxpdHkuIiIiCiAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi0KLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT1yZWxhdGl2ZS1pbXBvcnQsdW51c2VkLWltcG9ydAotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXycgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcG9ydF9zeW1saW5rX3Rlc3QgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKICAgZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHV0aWwgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC90b29scy93aW5fc3ltbGlua190ZXN0LnB5IGIvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX3Rlc3QucHkKaW5kZXggODUxYWU3Ni4uZmZhZDAyNCAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX3Rlc3QucHkKKysrIGIvc3RhcmJvYXJkL3Rvb2xzL3dpbl9zeW1saW5rX3Rlc3QucHkKQEAgLTEyLDcgKzEyLDYgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KICIiIlRlc3RzIHdpbl9zeW1saW5rLiIiIgogCiBpbXBvcnQgb3MKQEAgLTIxLDEwICsyMCw2IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi0KLWltcG9ydCBfZW52ICAjIHB5bGludDogZGlzYWJsZT1yZWxhdGl2ZS1pbXBvcnQsdW51c2VkLWltcG9ydAotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXycgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICBmcm9tIHN0YXJib2FyZC50b29scyBpbXBvcnQgcG9ydF9zeW1saW5rX3Rlc3QgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKICAgZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IHV0aWwgICMgcHlsaW50OiBkaXNhYmxlPWctaW1wb3J0LW5vdC1hdC10b3AKQEAgLTY1LDcgKzYwLDcgQEAKICAgICAgICAgICBmZC53cml0ZSgnSEknKQogICAgICAgICBsaW5rX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdmb28nLCAnbGlua19kaXInKQogICAgICAgICBNYWtlU3ltTGluayhleHRlcm5hbF90ZW1wX2ZpbGUsIGxpbmtfZGlyKQotICAgICAgICB3aW5fc3ltbGluay5fUm10cmVlT3NXYWxrKHNlbGYudG1wX2RpcikKKyAgICAgICAgd2luX3N5bWxpbmsuX1JtdHJlZU9zV2FsayhzZWxmLnRtcF9kaXIpICAjIHB5bGludDpkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICAgIyBUaGUgdGFyZ2V0IGZpbGUgc2hvdWxkIHN0aWxsIGV4aXN0CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShleHRlcm5hbF90ZW1wX2ZpbGUpKQogICAgICAgZmluYWxseToKQEAgLTgwLDEyICs3NSwxMSBAQAogICAgICAgICAgIGZkLndyaXRlKCdISScpCiAgICAgICAgIGxpbmtfZGlyID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJ2ZvbycsICdsaW5rX2RpcicpCiAgICAgICAgIE1ha2VTeW1MaW5rKGV4dGVybmFsX3RlbXBfZmlsZSwgbGlua19kaXIpCi0gICAgICAgIHdpbl9zeW1saW5rLl9SbXRyZWVTaGVsbENtZChzZWxmLnRtcF9kaXIpCisgICAgICAgIHdpbl9zeW1saW5rLl9SbXRyZWVTaGVsbENtZChzZWxmLnRtcF9kaXIpICAjIHB5bGludDpkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICAgIyBUaGUgdGFyZ2V0IGZpbGUgc2hvdWxkIHN0aWxsIGV4aXN0CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShleHRlcm5hbF90ZW1wX2ZpbGUpKQogICAgICAgZmluYWxseToKICAgICAgICAgc2h1dGlsLnJtdHJlZShleHRlcm5hbF90ZW1wX2RpciwgaWdub3JlX2Vycm9ycz1UcnVlKQogCi0KICAgdXRpbC5TZXR1cERlZmF1bHRMb2dnaW5nQ29uZmlnKCkKICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC91aV9uYXZpZ2F0aW9uLmggYi9zdGFyYm9hcmQvdWlfbmF2aWdhdGlvbi5oCmluZGV4IGJhN2EwYTkuLjAxNzU0YTkgMTAwNjQ0Ci0tLSBhL3N0YXJib2FyZC91aV9uYXZpZ2F0aW9uLmgKKysrIGIvc3RhcmJvYXJkL3VpX25hdmlnYXRpb24uaApAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgInN0YXJib2FyZC90eXBlcy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC93aW5kb3cuaCIKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTMxNyw2ICszMTUsNCBAQAogfSAgLy8gZXh0ZXJuICJDIgogI2VuZGlmCiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIKLQogI2VuZGlmICAvLyBTVEFSQk9BUkRfVUlfTkFWSUdBVElPTl9IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkgYi9zdGFyYm9hcmQvd2luL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdGFyYm9hcmQvbGludXgveDY0eDExL3NidmVyc2lvbi9fX2luaXRfXy5weQpyZW5hbWUgdG8gc3RhcmJvYXJkL3dpbi9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi9zaGFyZWQvQlVJTEQuZ24gYi9zdGFyYm9hcmQvd2luL3NoYXJlZC9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjJlOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvQlVJTEQuZ24KQEAgLTAsMCArMSwzODQgQEAKKyMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL3dpbi92aXN1YWxfc3R1ZGlvX3ZlcnNpb24uZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvYnVpbGQvY29udmVydF9pMThuX2RhdGEuZ25pIikKK2ltcG9ydCgiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvYnVpbGRmaWxlcy5nbmkiKQorCitjb25maWcoInN0YXJib2FyZF9wbGF0Zm9ybV9jb25maWciKSB7CisgIGlmIChjdXJyZW50X29zID09ICJ3aW51d3AiKSB7CisgICAgIyBXZSB3YW50IHRoaXMgdG8gYXBwbHkgdG8gYWxsIHNoYXJlZCB3aW4gc291cmNlcyBmb3IgeGIxLgorICAgIGNvbmZpZ3MgPSBbICIvL3N0YXJib2FyZC94YjE6c3RhcmJvYXJkX3BsYXRmb3JtX2NvbmZpZyIgXQorICB9CisgIGluY2x1ZGVfZGlycyA9IFsKKyAgICAiLy90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlIiwKKyAgICAiLy90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTCIsCisgICAgIi8vdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMiIsCisgICAgIi8vdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9LSFIiLAorICBdCisKKyAgY2ZsYWdzID0gWworICAgICIvRUhzYyIsICAjIEMrKyBleGNlcHRpb25zIChyZXF1aXJlZCB3aXRoIC9aVykKKyAgXQorCisgIGNmbGFncyArPSBbCisgICAgIi9GVSR7bXN2Y19wYXRofS9saWIveDg2L3N0b3JlL3JlZmVyZW5jZXMvcGxhdGZvcm0ud2lubWQiLAorICAgICIvRlUke3dpbmRvd3Nfc2RrX3BhdGh9L1JlZmVyZW5jZXMvJHdka192ZXJzaW9uL1dpbmRvd3MuRm91bmRhdGlvbi5Gb3VuZGF0aW9uQ29udHJhY3QvNC4wLjAuMC9XaW5kb3dzLkZvdW5kYXRpb24uRm91bmRhdGlvbkNvbnRyYWN0Lndpbm1kIiwKKyAgICAiL0ZVJHt3aW5kb3dzX3Nka19wYXRofS9SZWZlcmVuY2VzLyR3ZGtfdmVyc2lvbi9XaW5kb3dzLkZvdW5kYXRpb24uVW5pdmVyc2FsQXBpQ29udHJhY3QvMTQuMC4wLjAvV2luZG93cy5Gb3VuZGF0aW9uLlVuaXZlcnNhbEFwaUNvbnRyYWN0Lndpbm1kIiwKKyAgICAiL0ZVJHt3aW5kb3dzX3Nka19wYXRofS9SZWZlcmVuY2VzLyR3ZGtfdmVyc2lvbi9XaW5kb3dzLlVJLlZpZXdNYW5hZ2VtZW50LlZpZXdNYW5hZ2VtZW50Vmlld1NjYWxpbmdDb250cmFjdC8xLjAuMC4wL1dpbmRvd3MuVUkuVmlld01hbmFnZW1lbnQuVmlld01hbmFnZW1lbnRWaWV3U2NhbGluZ0NvbnRyYWN0Lndpbm1kIiwKKyAgICAiL0ZVJHt3aW5kb3dzX3Nka19wYXRofS9SZWZlcmVuY2VzLyR3ZGtfdmVyc2lvbi9XaW5kb3dzLlhib3guQXBwbGljYXRpb25SZXNvdXJjZXNDb250cmFjdC8yLjAuMC4wL1dpbmRvd3MuWGJveC5BcHBsaWNhdGlvblJlc291cmNlc0NvbnRyYWN0Lndpbm1kIiwKKyAgICAiL0ZVJHt3aW5kb3dzX3Nka19wYXRofS9SZWZlcmVuY2VzLyR3ZGtfdmVyc2lvbi9XaW5kb3dzLlhib3guU2VjdXJpdHkuQXBwbGljYXRpb25TcGVjaWZpY0RldmljZUF1dGhlbnRpY2F0aW9uQ29udHJhY3QvMS4wLjAuMC9XaW5kb3dzLlhib3guU2VjdXJpdHkuQXBwbGljYXRpb25TcGVjaWZpY0RldmljZUF1dGhlbnRpY2F0aW9uQ29udHJhY3Qud2lubWQiLAorICBdCit9CisKK3N0YXRpY19saWJyYXJ5KCJzdGFyYm9hcmRfcGxhdGZvcm0iKSB7CisgIGhhc19wZWRhbnRpY193YXJuaW5ncyA9IHRydWUKKworICBzb3VyY2VzID0gWworICAgICIvL3N0YXJib2FyZC9jb21tb24vdGhyZWFkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvY29tbW9uL3RocmVhZC5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2VnbC9zeXN0ZW1fZWdsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2dsZXMvc3lzdGVtX2dsZXMyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfYWxwaGFudW1lcmljLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfaXNfZGlnaXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19oZXhfZGlnaXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl9pc19zcGFjZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vY2hhcmFjdGVyX2lzX3VwcGVyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9jaGFyYWN0ZXJfdG9fbG93ZXIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL2NoYXJhY3Rlcl90b191cHBlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2Fic29sdXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9kb3VibGVfZXhwb25lbnQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL2RvdWJsZV9mbG9vci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2lzX2Zpbml0ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vZG91YmxlX2lzX25hbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X2NvbXBhcmUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL21lbW9yeV9jb3B5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfZmluZF9ieXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9tZW1vcnlfbW92ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vbWVtb3J5X3NldC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2NvbXBhcmUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N0cmluZ19jb21wYXJlX2FsbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2ZpbmRfY2hhcmFjdGVyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZmluZF9sYXN0X2NoYXJhY3Rlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2ZpbmRfc3RyaW5nLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfZ2V0X2xlbmd0aC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX2dldF9sZW5ndGhfd2lkZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX2RvdWJsZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3BhcnNlX3NpZ25lZF9pbnRlZ2VyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfcGFyc2VfdWludDY0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9zdHJpbmdfcGFyc2VfdW5zaWduZWRfaW50ZWdlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9pc28vc3RyaW5nX3NjYW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvaXNvL3N5c3RlbV9iaW5hcnlfc2VhcmNoLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL2lzby9zeXN0ZW1fc29ydC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfY3VycmVudC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9nZXRfcHJvcGVydHkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvbm91c2VyL3VzZXJfZ2V0X3NpZ25lZF9pbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9ub3VzZXIvdXNlcl9pbnRlcm5hbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9vcHVzL29wdXNfYXVkaW9fZGVjb2Rlci5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3Bvc2l4L3NvY2tldF9pc19pcHY2X3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXBwbGljYXRpb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19jcmVhdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19kZXN0cm95LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9hdWRpb19zaW5rL2F1ZGlvX3NpbmtfZ2V0X21pbl9idWZmZXJfc2l6ZV9pbl9mcmFtZXMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pbnRlcm5hbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9hdWRpb19zaW5rX2ludGVybmFsLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2F1ZGlvX3NpbmsvYXVkaW9fc2lua19pc192YWxpZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvYXVkaW9fc2luay9zdHViX2F1ZGlvX3NpbmtfdHlwZS5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9jb21tYW5kX2xpbmUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2NvbW1hbmRfbGluZS5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9kcm0vZHJtX2Nsb3NlX3Nlc3Npb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fZGVzdHJveV9zeXN0ZW0uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2RybS9kcm1fZ2VuZXJhdGVfc2Vzc2lvbl91cGRhdGVfcmVxdWVzdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9nZXRfbWV0cmljcy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV9zeXN0ZW1faW50ZXJuYWwuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZHJtL2RybV91cGRhdGVfc2Vzc2lvbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZXZlbnRfY2FuY2VsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9ldmVudF9zY2hlZHVsZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9hdG9taWNfcmVwbGFjZV93cml0ZV9maWxlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX2F0b21pY19yZXBsYWNlX3dyaXRlX2ZpbGUuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9tb2RlX3N0cmluZ190b19mbGFncy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvZmlsZV9zdG9yYWdlL3N0b3JhZ2VfY2xvc2VfcmVjb3JkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9kZWxldGVfcmVjb3JkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9nZXRfcmVjb3JkX3NpemUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL2ZpbGVfc3RvcmFnZS9zdG9yYWdlX29wZW5fcmVjb3JkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9maWxlX3N0b3JhZ2Uvc3RvcmFnZV9yZWFkX3JlY29yZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbG9nX211dGV4LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9sb2dfbXV0ZXguaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfY2FuX3BsYXlfbWltZV9hbmRfa2V5X3N5c3RlbS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2F1ZGlvX2J1ZmZlcl9idWRnZXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9hdWRpb19vdXRwdXRfY291bnRfc2luZ2xlX2F1ZGlvX291dHB1dC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9hbGlnbm1lbnQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfYWxsb2NhdGlvbl91bml0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9nZXRfYnVmZmVyX2dhcmJhZ2VfY29sbGVjdGlvbl9kdXJhdGlvbl90aHJlc2hvbGQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9idWZmZXJfcGFkZGluZy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X2J1ZmZlcl9zdG9yYWdlX3R5cGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9pbml0aWFsX2J1ZmZlcl9jYXBhY2l0eS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWVkaWFfZ2V0X3Byb2dyZXNzaXZlX2J1ZmZlcl9idWRnZXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF92aWRlb19idWZmZXJfYnVkZ2V0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9tZWRpYV9pc19idWZmZXJfcG9vbF9hbGxvY2F0ZV9vbl9kZW1hbmQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2lzX2J1ZmZlcl91c2luZ19tZW1vcnlfcG9vbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVkaWEvbWltZV90eXBlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYS9taW1lX3R5cGUuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbWVtb3J5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9uZXRfYXJncy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV0X2FyZ3MuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV0X2xvZy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbmV0X2xvZy5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29uY2F0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29uY2F0X3dpZGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N0cmluZ19jb3B5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfY29weV93aWRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zdHJpbmdfZHVwbGljYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvYWNjZXNzaWJpbGl0eV9nZXRfY2FwdGlvbl9zZXR0aW5ncy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfZ2V0X2Rpc3BsYXlfc2V0dGluZ3MuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9hY2Nlc3NpYmlsaXR5X2dldF90ZXh0X3RvX3NwZWVjaF9zZXR0aW5ncy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2FjY2Vzc2liaWxpdHlfc2V0X2NhcHRpb25zX2VuYWJsZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9jcHVfZmVhdHVyZXNfZ2V0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvaW1hZ2VfZGVjb2RlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvaW1hZ2VfaXNfZGVjb2RlX3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21lZGlhX3NldF9hdWRpb193cml0ZV9kdXJhdGlvbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3NwZWVjaF9zeW50aGVzaXNfY2FuY2VsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3BlZWNoX3N5bnRoZXNpc19pc19zdXBwb3J0ZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zcGVlY2hfc3ludGhlc2lzX3NwZWFrLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF90b3RhbF9ncHVfbWVtb3J5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX2dldF91c2VkX2dwdV9tZW1vcnkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1faGFzX2NhcGFiaWxpdHkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9zeXN0ZW1faGlkZV9zcGxhc2hfc2NyZWVuLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX25ldHdvcmtfaXNfZGlzY29ubmVjdGVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvc3lzdGVtX3NpZ25fd2l0aF9jZXJ0aWZpY2F0aW9uX3NlY3JldF9rZXkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfY29udGV4dF9nZXRfcG9pbnRlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RocmVhZF9jcmVhdGVfcHJpb3JpdHkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfc2FtcGxlcl9jcmVhdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi90aHJlYWRfc2FtcGxlcl9kZXN0cm95LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfZnJlZXplLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfaXNfc3VwcG9ydGVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGhyZWFkX3NhbXBsZXJfdGhhdy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3RpbWVfZ2V0X21vbm90b25pY190aHJlYWRfbm93LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdGltZV9pc190aW1lX3RocmVhZF9ub3dfc3VwcG9ydGVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvdWlfbmF2X2dldF9pbnRlcmZhY2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfYmx1cl9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfZm9jdXNfb25fc2NyZWVuX2tleWJvYXJkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X2dldF9kaWFnb25hbF9zaXplX2luX2luY2hlcy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19nZXRfb25fc2NyZWVuX2tleWJvYXJkX2JvdW5kaW5nX3JlY3QuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfaGlkZV9vbl9zY3JlZW5fa2V5Ym9hcmQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfaXNfb25fc2NyZWVuX2tleWJvYXJkX3Nob3duLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvd2luZG93X29uX3NjcmVlbl9rZXlib2FyZF9pc19zdXBwb3J0ZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfb25fc2NyZWVuX2tleWJvYXJkX3N1Z2dlc3Rpb25zX3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL3dpbmRvd19zZXRfb25fc2NyZWVuX2tleWJvYXJkX2tlZXBfZm9jdXMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfc2hvd19vbl9zY3JlZW5fa2V5Ym9hcmQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi93aW5kb3dfdXBkYXRlX29uX3NjcmVlbl9rZXlib2FyZF9zdWdnZXN0aW9ucy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hZGFwdGVyX3V0aWxzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2FkYXB0ZXJfdXRpbHMuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdG9taWNfcHVibGljLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXRvbWljX3F1ZXVlLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19kZWNvZGVyLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlcl90aHJlYWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fZGVjb2Rlcl90aHJlYWQuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3NpbmtfZ2V0X21heF9jaGFubmVscy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2dldF9uZWFyZXN0X3N1cHBvcnRlZF9zYW1wbGVfZnJlcXVlbmN5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2F1ZGlvX3NpbmtfaXNfYXVkaW9fZnJhbWVfc3RvcmFnZV90eXBlX3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb19zaW5rX2lzX2F1ZGlvX3NhbXBsZV90eXBlX3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9hdWRpb190cmFuc2Zvcm0uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXVkaW9fdHJhbnNmb3JtLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXV0b19ldmVudF9oYW5kbGUuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9ieXRlX3N3YXAuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX2Jyb2FkY2FzdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9jb25kaXRpb25fdmFyaWFibGVfY3JlYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9kZXN0cm95LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmRpdGlvbl92YXJpYWJsZV9zaWduYWwuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZGl0aW9uX3ZhcmlhYmxlX3dhaXRfdGltZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjb2RlX3RhcmdldF9pbnRlcm5hbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kZWNvZGVfdGFyZ2V0X2ludGVybmFsLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGVjcnlwdGluZ19kZWNvZGVyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RlY3J5cHRpbmdfZGVjb2Rlci5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9jYW5fb3Blbi5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfY2xvc2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2NyZWF0ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfZ2V0X25leHQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZGlyZWN0b3J5X2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9pbnRlcm5hbC5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpcmVjdG9yeV9vcGVuLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RybV9zeXN0ZW1fcGxheXJlYWR5LmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZHhfY29udGV4dF92aWRlb19kZWNvZGVyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2R4X2NvbnRleHRfdmlkZW9fZGVjb2Rlci5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vudmlyb25tZW50LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2Vycm9yX3V0aWxzLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9hdG9taWNfcmVwbGFjZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2Nhbl9vcGVuLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfY2xvc2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9kZWxldGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9leGlzdHMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9mbHVzaC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2dldF9pbmZvLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfZ2V0X3BhdGhfaW5mby5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX29wZW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZmlsZV9yZWFkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfc2Vlay5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9maWxlX3RydW5jYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfd3JpdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZ3JhcGhpY3MuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvZ3JhcGhpY3MuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9oYXJkd2FyZV9kZWNvZGVfdGFyZ2V0X2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2hhcmR3YXJlX2RlY29kZV90YXJnZXRfaW50ZXJuYWwuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2cuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2ZsdXNoLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2xvZ19mb3JtYXQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2lzX3R0eS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfcmF3X2R1bXBfc3RhY2suY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfY29tbW9uLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2NvbW1vbi5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2ZvdW5kYXRpb25fdXRpbHMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfZm91bmRhdGlvbl91dGlscy5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2dldF9tYXhfYnVmZmVyX2NhcGFjaXR5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX3RyYW5zZm9ybS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV90cmFuc2Zvcm0uaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfYWxsb2NhdGVfYWxpZ25lZF91bmNoZWNrZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2FsbG9jYXRlX3VuY2hlY2tlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZmx1c2guY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVtb3J5X2ZyZWVfYWxpZ25lZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfZ2V0X3N0YWNrX2JvdW5kcy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfbWFwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9wcm90ZWN0LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lbW9yeV9yZWFsbG9jYXRlX3VuY2hlY2tlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZW1vcnlfdW5tYXAuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbXV0ZXhfYWNxdWlyZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9hY3F1aXJlX3RyeS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9jcmVhdGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbXV0ZXhfZGVzdHJveS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tdXRleF9yZWxlYXNlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL29uY2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc2V0X25vbl9ibG9ja2luZ19pbnRlcm5hbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zZXRfbm9uX2Jsb2NraW5nX2ludGVybmFsLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2FjY2VwdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfYmluZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY2xlYXJfbGFzdF9lcnJvci5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY29ubmVjdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfY3JlYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9kZXN0cm95LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9mcmVlX3Jlc29sdXRpb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9pbnRlcmZhY2VfYWRkcmVzcy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfZ2V0X2xhc3RfZXJyb3IuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2dldF9sb2NhbF9hZGRyZXNzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pbnRlcm5hbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaW50ZXJuYWwuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfaXNfY29ubmVjdGVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9pc19jb25uZWN0ZWRfYW5kX2lkbGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X2pvaW5fbXVsdGljYXN0X2dyb3VwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9saXN0ZW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3JlY2VpdmVfZnJvbS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfcmVzb2x2ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2VuZF90by5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X2Jyb2FkY2FzdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3JlY2VpdmVfYnVmZmVyX3NpemUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3NldF9yZXVzZV9hZGRyZXNzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfc2VuZF9idWZmZXJfc2l6ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfc2V0X3RjcF9rZWVwX2FsaXZlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfdGNwX25vX2RlbGF5LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF9zZXRfdGNwX3dpbmRvd19zY2FsaW5nLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfYWRkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfY3JlYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfZGVzdHJveS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfcmVtb3ZlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3NvY2tldF93YWl0ZXJfd2FpdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zb2NrZXRfd2FpdGVyX3dhaXRfdGltZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc29ja2V0X3dhaXRlcl93YWtlX3VwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0b3JhZ2Vfd3JpdGVfcmVjb3JkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX25vX2Nhc2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2NvbXBhcmVfbm9fY2FzZV9uLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N0cmluZ19jb21wYXJlX3dpZGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RyaW5nX2Zvcm1hdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdHJpbmdfZm9ybWF0X3dpZGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2JyZWFrX2ludG9fZGVidWdnZXIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2NsZWFyX2xhc3RfZXJyb3IuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9jb25uZWN0aW9uX3R5cGUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9lcnJvcl9zdHJpbmcuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9sYXN0X2Vycm9yLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbG9jYWxlX2lkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9nZXRfbnVtYmVyX29mX3Byb2Nlc3NvcnMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9yYW5kb21fZGF0YS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3JhbmRvbV91aW50NjQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9zdGFjay5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1faXNfZGVidWdnZXJfYXR0YWNoZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2NyZWF0ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfY3JlYXRlX2xvY2FsX2tleS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZGVzdHJveV9sb2NhbF9rZXkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2RldGFjaC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2N1cnJlbnQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2dldF9pZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfZ2V0X2xvY2FsX3ZhbHVlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9nZXRfbmFtZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfaXNfZXF1YWwuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2pvaW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX2xvY2FsX2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9sb2NhbF9pbnRlcm5hbC5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9wcml2YXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF9wcml2YXRlLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3NldF9sb2NhbF92YWx1ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aHJlYWRfc2V0X25hbWUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGhyZWFkX3NsZWVwLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RocmVhZF95aWVsZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX2dldF9tb25vdG9uaWNfbm93LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfZ2V0X25vdy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi90aW1lX3V0aWxzLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvdGltZV96b25lX2dldF9jdXJyZW50LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3RpbWVfem9uZV9nZXRfbmFtZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi92aWRlb19kZWNvZGVyLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3ZpZGVvX2RlY29kZXIuaCIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93Y2hhcl91dGlscy5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbjMyX2F1ZGlvX2RlY29kZXIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luMzJfYXVkaW9fZGVjb2Rlci5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dybV9oZWFkZXIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd3JtX2hlYWRlci5oIiwKKyAgXQorCisgIHNvdXJjZXMgKz0gY29tbW9uX3BsYXllcl9zb3VyY2VzCisKKyAgY29uZmlncyArPSBbCisgICAgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iLAorICAgICI6c3RhcmJvYXJkX3BsYXRmb3JtX2NvbmZpZyIsCisgIF0KKworICBwdWJsaWNfZGVwcyA9IFsKKyAgICAiLy9zdGFyYm9hcmQvY29tbW9uIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYTptZWRpYV91dGlsIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyOmZpbHRlcl9iYXNlZF9wbGF5ZXJfc291cmNlcyIsCisgIF0KKworICBkZXBzID0gWworICAgICIvL2NvYmFsdC9jb250ZW50L2kxOG4vcGxhdGZvcm0veGIxIiwKKyAgICAiLy9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9tZWRpYTptZWRpYV91dGlsIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9wbGF5ZXIvZmlsdGVyOmZpbHRlcl9iYXNlZF9wbGF5ZXJfc291cmNlcyIsCisgICAgIi8vdGhpcmRfcGFydHkvb3B1cyIsCisgIF0KKworICBpZiAoaXNfaW50ZXJuYWxfYnVpbGQpIHsKKyAgICBkZXBzICs9IFsgIi8vc3RhcmJvYXJkL3ByaXZhdGUvc2hhcmVkL3N0dWI6cHJpdmF0ZV9zb3VyY2VzIiBdCisgIH0KKworICBpZiAoZ2xfdHlwZSA9PSAiYW5nbGUiKSB7CisgICAgZGVwcyArPSBbICIvL3RoaXJkX3BhcnR5L2FuZ2xlOnRyYW5zbGF0b3IiIF0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi9zaGFyZWQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MgYi9zdGFyYm9hcmQvd2luL3NoYXJlZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc5ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuY2MKQEAgLTAsMCArMSwxMzcgQEAKKy8vIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gVGhpcyBmaWxlIGRlZmluZXMgYWxsIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzIGZvciBhIHBsYXRmb3JtLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb25fY29uc3RhbnRzLmgiCisKKy8vIERldGVybWluZXMgdGhlIHRocmVzaGhvbGQgb2YgYWxsb2NhdGlvbiBzaXplIHRoYXQgc2hvdWxkIGJlIGRvbmUgd2l0aCBtbWFwCisvLyAoaWYgYXZhaWxhYmxlKSwgcmF0aGVyIHRoYW4gYWxsb2NhdGVkIHdpdGhpbiB0aGUgY29yZSBoZWFwLgorY29uc3Qgc2l6ZV90IGtTYkRlZmF1bHRNbWFwVGhyZXNob2xkID0gMjU2ICogMTAyNFU7CisKKy8vIFRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgbWF4aW11bSBsZW5ndGggb2YgdGhlIG5hbWUgb2YgYSBzaW5nbGUgZGlyZWN0b3J5CisvLyBlbnRyeSwgbm90IGluY2x1ZGluZyB0aGUgYWJzb2x1dGUgcGF0aC4KK2NvbnN0IGludDMyX3Qga1NiRmlsZU1heE5hbWUgPSAyNjA7CisKKy8vIFRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgbWF4aW11bSBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkIGF0IHRoZQorLy8gc2FtZSB0aW1lIGJ5IG9uZSBwcm9jZXNzLgorLy8gVGhpcyBpcyBzZXQgdG8gTUFYSU1VTV9XQUlUX09CSkVDVFMgLSAxLCBzaW5jZSB3ZSB1c2UgV2FpdEZvck11bHRpcGxlRXZlbnRzCisvLyBhbmQgdGhhdCBvbmx5IHN1cHBvcnRzIE1BWElNVU1fV0FJVF9PQkpFQ1RTIGV2ZW50cy4gIFRoZSAtMSBpcyBzaW5jZSB3ZQorLy8gdXNlIGEgZHVtbXkgZXZlbnQgdG8gd2FrZSB1cCB0aGUgc29ja2V0LgorY29uc3QgdWludDMyX3Qga1NiRmlsZU1heE9wZW4gPSA2MzsKKworLy8gVGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBhbHRlcm5hdGUgZmlsZSBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLgorLy8gVGhpcyBpcyBsaWtlIFNCX0ZJTEVfU0VQX0NIQVIsIGV4Y2VwdCBpZiB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGFuIGFsdGVybmF0ZQorLy8gY2hhcmFjdGVyLCB0aGVuIHlvdSBjYW4gcGxhY2UgdGhhdCBoZXJlLiBGb3IgZXhhbXBsZSwgb24gd2luZG93cyBtYWNoaW5lcywKKy8vIHRoZSBwcmltYXJ5IHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgcHJvYmFibHkgJ1wnLCBidXQgdGhlIGFsdGVybmF0ZSBpcyAnLycuCitjb25zdCBjaGFyIGtTYkZpbGVBbHRTZXBDaGFyID0gJy8nOworCisvLyBUaGUgc3RyaW5nIGZvcm0gb2YgU0JfRklMRV9BTFRfU0VQX0NIQVIuCitjb25zdCBjaGFyKiBrU2JGaWxlQWx0U2VwU3RyaW5nID0gIi8iOworCisvLyBUaGUgY3VycmVudCBwbGF0Zm9ybSdzIG1heGltdW0gbGVuZ3RoIG9mIGFuIGFic29sdXRlIHBhdGguCitjb25zdCB1aW50MzJfdCBrU2JGaWxlTWF4UGF0aCA9IDQwOTY7CisKKy8vIFRoZSBjdXJyZW50IHBsYXRmb3JtJ3MgZmlsZSBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLiBUaGlzIGlzIHRoZQorLy8gY2hhcmFjdGVyIHRoYXQgYXBwZWFycyBhZnRlciBhIGRpcmVjdG9yeSBpbiBhIGZpbGUgcGF0aC4gRm9yIGV4YW1wbGUsIHRoZQorLy8gYWJzb2x1dGUgY2Fub25pY2FsIHBhdGggb2YgdGhlIGZpbGUgIi9wYXRoL3RvL2EvZmlsZS50eHQiIHVzZXMgJy8nIGFzIGEgcGF0aAorLy8gY29tcG9uZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIuCitjb25zdCBjaGFyIGtTYkZpbGVTZXBDaGFyID0gJ1xcJzsKKworLy8gVGhlIHN0cmluZyBmb3JtIG9mIFNCX0ZJTEVfU0VQX0NIQVIuCitjb25zdCBjaGFyKiBrU2JGaWxlU2VwU3RyaW5nID0gIlxcIjsKKworLy8gQWxsb3cgYWMzIGFuZCBlYzMgc3VwcG9ydAorY29uc3QgYm9vbCBrU2JIYXNBYzNBdWRpbyA9IHRydWU7CisKKy8vIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gaGFzIHdlYm0vdnA5IHN1cHBvcnQuICBUaGlzIHNob3VsZCBiZSBzZXQgdG8KKy8vIG5vbi16ZXJvIG9uIHBsYXRmb3JtcyB3aXRoIHdlYm0vdnA5IHN1cHBvcnQuCitjb25zdCBib29sIGtTYkhhc01lZGlhV2VibVZwOVN1cHBvcnQgPSB0cnVlOworCisvLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIHN1cHBvcnRzIHRocmVhZCBwcmlvcml0aWVzLgorY29uc3QgYm9vbCBrU2JIYXNUaHJlYWRQcmlvcml0eVN1cHBvcnQgPSB0cnVlOworCisvLyBEZXRlcm1pbmVzIHRoZSBhbGlnbm1lbnQgdGhhdCBhbGxvY2F0aW9ucyBzaG91bGQgaGF2ZSBvbiB0aGlzIHBsYXRmb3JtLgorY29uc3Qgc2l6ZV90IGtTYk1hbGxvY0FsaWdubWVudCA9IDE2OworCisvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkIGxvY2FsIHN0b3JhZ2Uga2V5cyBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybS4KK2NvbnN0IHVpbnQzMl90IGtTYk1heFRocmVhZExvY2FsS2V5cyA9IDUxMjsKKworLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbmFtZSBmb3IgYSB0aHJlYWQsIGluY2x1ZGluZyB0aGUgTlVMTC10ZXJtaW5hdG9yLgorY29uc3QgaW50MzJfdCBrU2JNYXhUaHJlYWROYW1lTGVuZ3RoID0gMTY7CisKKy8vIERlZmluZXMgdGhlIHBhdGggd2hlcmUgbWVtb3J5IGRlYnVnZ2luZyBsb2dzIHNob3VsZCBiZSB3cml0dGVuIHRvLgorY29uc3QgY2hhcioga1NiTWVtb3J5TG9nUGF0aCA9ICIvdG1wL3N0YXJib2FyZCI7CisKKy8vIFRoZSBtYXhpbXVtIGF1ZGlvIGJpdHJhdGUgdGhlIHBsYXRmb3JtIGNhbiBkZWNvZGUuICBUaGUgZm9sbG93aW5nIHZhbHVlCisvLyBlcXVhbHMgdG8gNU0gYnl0ZXMgcGVyIHNlY29uZHMgd2hpY2ggaXMgbW9yZSB0aGFuIGVub3VnaCBmb3IgY29tcHJlc3NlZAorLy8gYXVkaW8uCitjb25zdCB1aW50MzJfdCBrU2JNZWRpYU1heEF1ZGlvQml0cmF0ZUluQml0c1BlclNlY29uZCA9IDQwICogMTAyNCAqIDEwMjQ7CisKKy8vIFRoZSBtYXhpbXVtIHZpZGVvIGJpdHJhdGUgdGhlIHBsYXRmb3JtIGNhbiBkZWNvZGUuICBUaGUgZm9sbG93aW5nIHZhbHVlCisvLyBlcXVhbHMgdG8gMjVNIGJ5dGVzIHBlciBzZWNvbmRzIHdoaWNoIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGNvbXByZXNzZWQKKy8vIHZpZGVvLgorY29uc3QgdWludDMyX3Qga1NiTWVkaWFNYXhWaWRlb0JpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAyMDAgKiAxMDI0ICogMTAyNDsKKworLy8gU3BlY2lmaWVzIGhvdyB2aWRlbyBmcmFtZSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiB0aGlzIHBsYXRmb3JtLgorY29uc3QgdWludDMyX3Qga1NiTWVkaWFWaWRlb0ZyYW1lQWxpZ25tZW50ID0gMjU2OworCisvLyBUaGUgbWVtb3J5IHBhZ2Ugc2l6ZSwgd2hpY2ggY29udHJvbHMgdGhlIHNpemUgb2YgY2h1bmtzIG9uIG1lbW9yeSB0aGF0CisvLyBhbGxvY2F0b3JzIGRlYWwgd2l0aCwgYW5kIHRoZSBhbGlnbm1lbnQgb2YgdGhvc2UgY2h1bmtzLiBUaGlzIGRvZXNuJ3QgaGF2ZSB0bworLy8gYmUgdGhlIGhhcmR3YXJlLWRlZmluZWQgcGh5c2ljYWwgcGFnZSBzaXplLCBidXQgaXQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YKKy8vIGl0LgorY29uc3Qgc2l6ZV90IGtTYk1lbW9yeVBhZ2VTaXplID0gNDA5NjsKKworLy8gU3BlY2lmaWVzIHRoZSBuZXR3b3JrIHJlY2VpdmUgYnVmZmVyIHNpemUgaW4gYnl0ZXMsIHNldCB2aWEKKy8vIFNiU29ja2V0U2V0UmVjZWl2ZUJ1ZmZlclNpemUoKS4KKy8vCisvLyBTZXR0aW5nIHRoaXMgdG8gMCBpbmRpY2F0ZXMgdGhhdCBTYlNvY2tldFNldFJlY2VpdmVCdWZmZXJTaXplKCkgc2hvdWxkCisvLyBub3QgYmUgY2FsbGVkLiBVc2UgdGhpcyBmb3IgT1NzIChzdWNoIGFzIExpbnV4KSB3aGVyZSByZWNlaXZlIGJ1ZmZlcgorLy8gYXV0by10dW5pbmcgaXMgYmV0dGVyLgorLy8KKy8vIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGlzIG1heSBhZmZlY3QgbWF4IFRDUCB3aW5kb3cgc2l6ZSB3aGljaCBtYXkKKy8vIGRyYW1hdGljYWxseSBhZmZlY3QgdGhyb3VnaHB1dCBpbiB0aGUgcHJlc2VuY2Ugb2YgbGF0ZW5jeS4KKy8vCisvLyBJZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgYSBnb29kIFRDUCBhdXRvLXR1bmluZyBtZWNoYW5pc20sCisvLyBhIHNldHRpbmcgb2YgKDEyOCAqIDEwMjQpIGhlcmUgaXMgcmVjb21tZW5kZWQuCitjb25zdCB1aW50MzJfdCBrU2JOZXR3b3JrUmVjZWl2ZUJ1ZmZlclNpemUgPSAwOworCisvLyBEZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGhyZWFkcyBmb3IgdGhpcyBwbGF0Zm9ybS4gU29tZQorLy8gcGxhdGZvcm1zIHJlcXVpcmUgc2hhcmluZyB0aHJlYWQgaGFuZGxlcyB3aXRoIG90aGVyIGtpbmRzIG9mIHN5c3RlbSBoYW5kbGVzLAorLy8gbGlrZSBtdXRleGVzLCBzbyB3ZSB3YW50IHRvIGtlZXAgdGhpcyBtYW5hZ2VhYmxlLgorY29uc3QgdWludDMyX3Qga1NiTWF4VGhyZWFkcyA9IDkwOworCisvLyBUaGUgY3VycmVudCBwbGF0Zm9ybSdzIHNlYXJjaCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLiBXaGVuCisvLyBzcGVjaWZ5aW5nIGFuIG9yZGVyZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocyBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIGEKKy8vIGdpdmVuIHJlYXNvbiwgdGhpcyBpcyB0aGUgY2hhcmFjdGVyIHRoYXQgYXBwZWFycyBiZXR3ZWVuIGVudHJpZXMuIEZvcgorLy8gZXhhbXBsZSwgdGhlIHNlYXJjaCBwYXRoIG9mICIvZXRjL3NlYXJjaC9maXJzdDovZXRjL3NlYXJjaC9zZWNvbmQiIHVzZXMgJzonCisvLyBhcyBhIHNlYXJjaCBwYXRoIGNvbXBvbmVudCBzZXBhcmF0b3IgY2hhcmFjdGVyLgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY29uc3QgY2hhciBrU2JQYXRoU2VwQ2hhciA9ICc7JzsKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKy8vIFRoZSBzdHJpbmcgZm9ybSBvZiBTQl9QQVRIX1NFUF9DSEFSLgorY29uc3QgY2hhcioga1NiUGF0aFNlcFN0cmluZyA9ICI7IjsKKworLy8gU3BlY2lmaWVzIHRoZSBwcmVmZXJyZWQgYnl0ZSBvcmRlciBvZiBjb2xvciBjaGFubmVscyBpbiBhIHBpeGVsLiBSZWZlciB0bworLy8gc3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy4gRUdML0dMRVMgcGxhdGZvcm1zIHNob3VsZAorLy8gZ2VuZXJhbGx5IHByZWZlciBhIGJ5dGUgb3JkZXIgb2YgUkdCQSwgcmVnYXJkbGVzcyBvZiBlbmRpYW5uZXNzLgorY29uc3QgaW50IGtTYlByZWZlcnJlZFJnYmFCeXRlT3JkZXIgPSBTQl9QUkVGRVJSRURfUkdCQV9CWVRFX09SREVSX1JHQkE7CisKKy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiB1c2VycyB0aGF0IGNhbiBiZSBzaWduZWQgaW4gYXQgdGhlIHNhbWUgdGltZS4KK2NvbnN0IHVpbnQzMl90IGtTYlVzZXJNYXhTaWduZWRJbiA9IDE7CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3NoYXJlZC9jb25maWd1cmF0aW9uX3B1YmxpYy5oIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDMzNTEwCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaApAQCAtMCwwICsxLDE3MSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisvLyBPdGhlciBzb3VyY2UgZmlsZXMgc2hvdWxkIG5ldmVyIGluY2x1ZGUgdGhpcyBoZWFkZXIgZGlyZWN0bHksIGJ1dCBzaG91bGQKKy8vIGluY2x1ZGUgdGhlIGdlbmVyaWMgInN0YXJib2FyZC9jb25maWd1cmF0aW9uLmgiIGluc3RlYWQuCisKKyNpZm5kZWYgU1RBUkJPQVJEX1dJTl9TSEFSRURfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1dJTl9TSEFSRURfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KKworLy8gLS0tIEFyY2hpdGVjdHVyZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIC0tLSBTeXN0ZW0gSGVhZGVyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBBbnkgc3lzdGVtIGhlYWRlcnMgbGlzdGVkIGhlcmUgdGhhdCBhcmUgbm90IHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSB3aWxsIGJlCisvLyBlbXVsYXRlZCBpbiBzdGFyYm9hcmQvdHlwZXMuaC4KKworLy8gV2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBwcm92aWRlcyB0aGUgc3RhbmRhcmQgaGVhZGVyIHN5cy90eXBlcy5oLgorI2RlZmluZSBTQl9IQVNfU1lTX1RZUEVTX0ggMAorCisvLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIHByb3ZpZGVzIHNzaXplX3QuCisjZGVmaW5lIFNCX0hBU19TU0laRV9UIDAKKworI2lmICFkZWZpbmVkKF9fV0NIQVJfTUFYX18pCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNkZWZpbmUgX19XQ0hBUl9NQVhfXyBXQ0hBUl9NQVgKKyNlbmRpZgorCisvLyBUeXBlIGRldGVjdGlvbiBmb3Igd2NoYXJfdC4KKyNpZiBkZWZpbmVkKF9fV0NIQVJfTUFYX18pICYmIFwKKyAgICAoX19XQ0hBUl9NQVhfXyA9PSAweDdmZmZmZmZmIHx8IF9fV0NIQVJfTUFYX18gPT0gMHhmZmZmZmZmZikKKyNkZWZpbmUgU0JfSVNfV0NIQVJfVF9VVEYzMiAxCisjZWxpZiBkZWZpbmVkKF9fV0NIQVJfTUFYX18pICYmIFwKKyAgICAoX19XQ0hBUl9NQVhfXyA9PSAweDdmZmYgfHwgX19XQ0hBUl9NQVhfXyA9PSAweGZmZmYpCisjZGVmaW5lIFNCX0lTX1dDSEFSX1RfVVRGMTYgMQorI2VuZGlmCisKKy8vIENocm9tZSBvbmx5IGRlZmluZXMgdGhpcyBmb3IgQVJNRUwuCisjaWYgZGVmaW5lZChfX0FSTUVMX18pCisvLyBDaHJvbWUgaGFzIGFuIGV4Y2x1c2lvbiBmb3IgaU9TIGhlcmUsIHdlIHNob3VsZCB0b28gd2hlbiB3ZSBzdXBwb3J0IGlPUy4KKyNkZWZpbmUgU0JfSVNfV0NIQVJfVF9VTlNJR05FRCAxCisjZW5kaWYKKworLy8gLS0tIENvbXBpbGVyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIGZvcmNpbmcgYSBDIGZ1bmN0aW9uIHRvIGJlIGlubGluZWQuCisvLyAgIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYncxaGJlNnkuYXNweCNBbmNob3JfMQorI2RlZmluZSBTQl9DX0ZPUkNFX0lOTElORSBfX2ZvcmNlaW5saW5lCisKKy8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBDIGZ1bmN0aW9uIGFzIHN1Z2dlc3RlZCB0byBiZQorLy8gaW5saW5lZC4KKyNkZWZpbmUgU0JfQ19JTkxJTkUgaW5saW5lCisKKy8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBDIGZ1bmN0aW9uIGFzIGZvcmNpYmx5IG5vdAorLy8gaW5saW5lZC4KKyNkZWZpbmUgU0JfQ19OT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQorCisvLyBUaGUgcGxhdGZvcm0ncyBhbm5vdGF0aW9uIGZvciBtYXJraW5nIGEgc3ltYm9sIGFzIGV4cG9ydGVkIG91dHNpZGUgb2YgdGhlCisvLyBjdXJyZW50IHNoYXJlZCBsaWJyYXJ5LgorI2RlZmluZSBTQl9FWFBPUlRfUExBVEZPUk0gX19kZWNsc3BlYyhkbGxleHBvcnQpCisKKy8vIFRoZSBwbGF0Zm9ybSdzIGFubm90YXRpb24gZm9yIG1hcmtpbmcgYSBzeW1ib2wgYXMgaW1wb3J0ZWQgZnJvbSBvdXRzaWRlIG9mCisvLyB0aGUgY3VycmVudCBsaW5raW5nIHVuaXQuCisjZGVmaW5lIFNCX0lNUE9SVF9QTEFURk9STQorCisvLyAtLS0gRXh0ZW5zaW9ucyBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUGxlYXNlIHVzZSA8dW5vcmRlcmVkX21hcD4gYW5kIDx1bm9yZGVyZWRfc2V0PiBmb3IgdGhlIGhhc2ggdGFibGUgdHlwZXMuCisjZGVmaW5lIFNCX0hBU19TVERfVU5PUkRFUkVEX0hBU0ggMQorCisvLyBHQ0MvQ2xhbmcgZG9lc24ndCBkZWZpbmUgYSBsb25nIGxvbmcgaGFzaCBmdW5jdGlvbiwgZXhjZXB0IGZvciBBbmRyb2lkIGFuZAorLy8gR2FtZSBjb25zb2xlcy4KKyNkZWZpbmUgU0JfSEFTX0xPTkdfTE9OR19IQVNIIDEKKworLy8gR0NDL0NsYW5nIGRvZXNuJ3QgZGVmaW5lIGEgc3RyaW5nIGhhc2ggZnVuY3Rpb24sIGV4Y2VwdCBmb3IgR2FtZSBDb25zb2xlcy4KKyNkZWZpbmUgU0JfSEFTX1NUUklOR19IQVNIIDEKKworLy8gRGVza3RvcCBMaW51eCBuZWVkcyBhIHVzaW5nIHN0YXRlbWVudCBmb3IgdGhlIGhhc2ggZnVuY3Rpb25zLgorI2RlZmluZSBTQl9IQVNfSEFTSF9VU0lORyAxCisKKy8vIFNldCB0aGlzIHRvIDEgaWYgaGFzaCBmdW5jdGlvbnMgZm9yIGN1c3RvbSB0eXBlcyBjYW4gYmUgZGVmaW5lZCBhcyBhCisvLyBoYXNoX3ZhbHVlKCkgZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhleSBuZWVkIHRvIGJlIHBsYWNlZCBpbnNpZGUgYQorLy8gcGFydGlhbGx5LXNwZWNpZmllZCBoYXNoIHN0cnVjdCB0ZW1wbGF0ZSB3aXRoIGFuIG9wZXJhdG9yKCkuCisjZGVmaW5lIFNCX0hBU19IQVNIX1ZBTFVFIDEKKworLy8gU2V0IHRoaXMgdG8gMSBpZiB1c2Ugb2YgaGFzaF9tYXAgb3IgaGFzaF9zZXQgY2F1c2VzIGEgZGVwcmVjYXRpb24gd2FybmluZworLy8gKHdoaWNoIHRoZW4gYnJlYWtzIHRoZSBidWlsZCkuCisjZGVmaW5lIFNCX0hBU19IQVNIX1dBUk5JTkcgMQorI2RlZmluZSBfU0lMRU5DRV9TVERFWFRfSEFTSF9ERVBSRUNBVElPTl9XQVJOSU5HUworCisvLyBUaGUgbG9jYXRpb24gdG8gaW5jbHVkZSBoYXNoX21hcCBvbiB0aGlzIHBsYXRmb3JtLgorI2RlZmluZSBTQl9IQVNIX01BUF9JTkNMVURFIDxoYXNoX21hcD4KKworLy8gQysrJ3MgaGFzaF9tYXAgYW5kIGhhc2hfc2V0IGFyZSBvZnRlbiBmb3VuZCBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcyBkZXBlbmRpbmcKKy8vIG9uIHRoZSBjb21waWxlci4KKyNkZWZpbmUgU0JfSEFTSF9OQU1FU1BBQ0Ugc3RkZXh0CisKKy8vIFRoZSBsb2NhdGlvbiB0byBpbmNsdWRlIGhhc2hfc2V0IG9uIHRoaXMgcGxhdGZvcm0uCisjZGVmaW5lIFNCX0hBU0hfU0VUX0lOQ0xVREUgPGhhc2hfc2V0PgorCisvLyAtLS0gRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gLS0tIEdyYXBoaWNzIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcGxhdGZvcm0gc3VwcG9ydHMgYmlsaW5lYXIgZmlsdGVyaW5nLgorLy8gVGhpcyBjYW4gYmUgY2hlY2tlZCB0byBlbmFibGUvZGlzYWJsZSByZW5kZXJlciB0ZXN0cyB0aGF0IHZlcmlmeSB0aGF0IHRoaXMgaXMKKy8vIHdvcmtpbmcgcHJvcGVybHkuCisjZGVmaW5lIFNCX0hBU19CSUxJTkVBUl9GSUxURVJJTkdfU1VQUE9SVCAxCisKKy8vIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZ2l2ZW4gcGxhdGZvcm0gc3VwcG9ydHMgcmVuZGVyaW5nIG9mIE5WMTIKKy8vIHRleHR1cmVzLiBUaGVzZSB0ZXh0dXJlcyB0eXBpY2FsbHkgb3JpZ2luYXRlIGZyb20gdmlkZW8gZGVjb2RlcnMuCisjZGVmaW5lIFNCX0hBU19OVjEyX1RFWFRVUkVfU1VQUE9SVCAwCisKKyNkZWZpbmUgU0JfSEFTX1ZJUlRVQUxfUkVBTElUWSAwCisKKy8vIC0tLSBJL08gQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXaGV0aGVyIHRoZSBjdXJyZW50IHBsYXRmb3JtIHN1cHBvcnRzIG9uIHNjcmVlbiBrZXlib2FyZC4KKyNkZWZpbmUgU0JfSEFTX09OX1NDUkVFTl9LRVlCT0FSRCAwCisKKy8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgcGxhdGZvcm0gaGFzIHNwZWVjaCBzeW50aGVzaXMuCisjZGVmaW5lIFNCX0hBU19TUEVFQ0hfU1lOVEhFU0lTIDAKKworLy8gLS0tIE1lZGlhIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIC0tLSBNZW1vcnkgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gY2FuIG1hcCBleGVjdXRhYmxlIG1lbW9yeS4gSW1wbGllcyBTQl9IQVNfTU1BUC4gVGhpcyBpcworLy8gcmVxdWlyZWQgZm9yIHBsYXRmb3JtcyB0aGF0IHdhbnQgdG8gSklULgorI2RlZmluZSBTQl9DQU5fTUFQX0VYRUNVVEFCTEVfTUVNT1JZIDEKKworLy8gLS0tIE5ldHdvcmsgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFNwZWNpZmllcyB3aGV0aGVyIHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgSVBWNi4KKyNkZWZpbmUgU0JfSEFTX0lQVjYgMQorCisvLyBTcGVjaWZpZXMgd2hldGhlciB0aGlzIHBsYXRmb3JtIHN1cHBvcnRzIHBpcGUuCisjZGVmaW5lIFNCX0hBU19QSVBFIDEKKworLy8gLS0tIFRocmVhZCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIC0tLSBUaW1pbmcgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXaGV0aGVyIHRoaXMgcGxhdGZvcm0gaGFzIGFuIEFQSSB0byByZXRyaWV2ZSBob3cgbG9uZyB0aGUgY3VycmVudCB0aHJlYWQKKy8vIGhhcyBzcGVudCBpbiB0aGUgZXhlY3V0aW5nIHN0YXRlLgorI2RlZmluZSBTQl9IQVNfVElNRV9USFJFQURfTk9XIDAKKworLy8gLS0tIFR1bmVhYmxlIFBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIC0tLSBVc2VyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyAtLS0gUGxhdGZvcm0gU3BlY2lmaWMgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gV2hldGhlciBvciBub3QgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHNvY2tldCBjb25uZWN0aW9uIHJlc2V0LgorI2RlZmluZSBTQl9IQVNfU09DS0VUX0VSUk9SX0NPTk5FQ1RJT05fUkVTRVRfU1VQUE9SVCAxCisKKy8vIC0tLSBQbGF0Zm9ybSBTcGVjaWZpYyBBdWRpdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyAtLS0gUGxhdGZvcm0gU3BlY2lmaWMgUXVpcmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2VuZGlmICAvLyBTVEFSQk9BUkRfV0lOX1NIQVJFRF9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbiBiL3N0YXJib2FyZC93aW4vc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNjBlNwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vc2hhcmVkL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vQlVJTEQuZ24KQEAgLTAsMCArMSwyODcgQEAKKyMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL3dpbi92aXN1YWxfc3R1ZGlvX3ZlcnNpb24uZ25pIikKKworY29uZmlnKCJwbGF0Zm9ybV9jb25maWd1cmF0aW9uIikgeworICAjIFRPRE8oYi8yMDY4MDkzNDEpOiBNaWdyYXRlIERldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcworCisgIGNvbmZpZ3MgPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIgXQorICBjZmxhZ3NfY2MgPSBbICIvVFAiIF0KKyAgY2ZsYWdzID0gW10KKyAgbGRmbGFncyA9IFsKKyAgICAiL05YQ09NUEFUIiwKKyAgICAiL01BTklGRVNUOk5PIiwKKyAgXQorICBsaWJzID0gW10KKyAgaW5jbHVkZV9kaXJzID0gW10KKyAgYXJmbGFncyA9IFtdCisgIGRlZmluZXMgPSBbCisgICAgIl9VTklDT0RFIiwKKyAgICAiVU5JQ09ERSIsCisgIF0KKworICBpZiAoIWNvYmFsdF9mYXN0YnVpbGQpIHsKKyAgICAjIENvbnRhaW5lcnMgY2Fubm90IHVzZSBQREJzLCBzbyB3ZSBjb25kaXRpb25hbGx5IGRpc2FibGUgdGhlbS4KKyAgICAjIFdlIHdhbnQgdG8ga2VlcCB0aGVtIGZvciBub24tZG9ja2VyIGJ1aWxkcyBhcyB0aGV5IG1ha2UgY29tcGlsYXRpb24KKyAgICAjIHNpZ25pZmljYW50bHkgZmFzdGVyLgorICAgIGlmIChpc19kb2NrZXJfYnVpbGQpIHsKKyAgICAgIGNmbGFncyArPSBbICIvWjciIF0KKyAgICB9IGVsc2UgeworICAgICAgY2ZsYWdzICs9IFsKKyAgICAgICAgIi9aaSIsCisgICAgICAgICIvRlMiLAorICAgICAgXQorICAgIH0KKyAgICBsZGZsYWdzICs9IFsgIi9ERUJVRzpGVUxMIiBdCisgIH0KKworICAjIG1zdnNfYmFzZQorICAjIE91dHB1dERpcmVjdG9yeSBhbmQgSW50ZXJtZWRpYXRlRGlyZWN0b3J5LCBtYXliZSBDaGFyYWN0ZXJTZXQKKyAgaW5jbHVkZV9kaXJzICs9IFsKKyAgICAiJHdka19pbmNsdWRlX3BhdGgvc2hhcmVkIiwKKyAgICAiJHdka19pbmNsdWRlX3BhdGgvdWNydCIsCisgICAgIiR3ZGtfaW5jbHVkZV9wYXRoL3VtIiwKKyAgICAiJHdka19pbmNsdWRlX3BhdGgvd2lucnQiLAorICAgICIkbXN2Y19wYXRoL2luY2x1ZGUiLAorICBdCisgIGNmbGFncyArPSBbCisgICAgIi9FSHNjIiwKKyAgICAiL3N0ZDpjKysxNCIsCisgIF0KKworICAjIG1zdnNfZGVidWcvX2RldmVsL2V0YworICBsZGZsYWdzICs9IFsgIi9JTkNSRU1FTlRBTDpOTyIgXQorICBpZiAoaXNfZGVidWcpIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIi9PZCIsCisKKyAgICAgICMgQ2hlY2sgc3RhY2sgZnJhbWUgdmFsaWRpdHkgYW5kIGNoZWNrIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhdCBydW4gdGltZS4KKyAgICAgICIvUlRDMSIsCisgICAgXQorICB9IGVsc2UgeworICAgIGNmbGFncyArPSBbICIvTzIiIF0KKyAgfQorCisgIGlmICghaXNfZ29sZCkgeworICAgIGxpYnMgKz0gWyAiZGJnaGVscC5saWIiIF0KKyAgfQorCisgIGlmIChpc19kZWJ1ZyB8fCBpc19kZXZlbCkgeworICAgIGNmbGFncyArPSBbCisgICAgICAjIFVzZSBkZWJ1ZyBtdWx0aXRocmVhZGVkIGxpYnJhcnkuCisgICAgICAiL01EZCIsCisgICAgICAiL0dTIiwKKworICAgICAgIyBVbml0IHRlc3RzIGNhbiBoYXZlIGh1Z2Ugb2JqZWN0IGZpbGVzLgorICAgICAgIi9iaWdvYmoiLAorICAgIF0KKyAgfSBlbHNlIHsKKyAgICBjZmxhZ3MgKz0gWworICAgICAgIyBVc2UgcmVsZWFzZSBtdWx0aXRocmVhZGVkIGxpYnJhcnkuCisgICAgICAiL01EIiwKKworICAgICAgIyBVbnJlZmVyZW5jZWQgdmFyaWFibGUuCisgICAgICAjIE9mdGVuIHZhcmlhYmxlcyBhcmUgb25seSByZWZlcmVuY2VkIGluIERDSEVDS3MuCisgICAgICAiL3dkNDE4OSIsCisgICAgXQorICAgIGxkZmxhZ3MgKz0gWworICAgICAgIi9PUFQ6UkVGIiwKKyAgICAgICIvT1BUOklDRiIsCisgICAgXQorICB9CisKKyAgIyB0YXJnZXQgZGVmYXVsdHMKKyAgaWYgKGN1cnJlbnRfdG9vbGNoYWluID09IGRlZmF1bHRfdG9vbGNoYWluKSB7CisgICAgZGVmaW5lcyArPSBbCisgICAgICAjIERpc2FibGUgd2FybmluZ3MuICBUaGVzZSBvcHRpb25zIHdlcmUgaW5oZXJpdGVkIGZyb20gQ2hyb21pdW0uCisgICAgICAiX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIiwKKyAgICAgICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiLAorICAgICAgIl9DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiLAorICAgICAgIl9TQ0xfU0VDVVJFX05PX0RFUFJFQ0FURSIsCisKKyAgICAgICMgRGlzYWJsZSBzdWdnZXN0aW9ucyB0byBzd2l0Y2ggdG8gTWljcm9zb2Z0LXNwZWNpZmljIHNlY3VyZSBDUlQuCisgICAgICAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiLAorICAgICAgIl9fU1REQ19GT1JNQVRfTUFDUk9TIiwgICMgc28gdGhhdCB3ZSBnZXQgUFJJKgorCisgICAgICAjIEJ5IGRlZmluaW5nIHRoaXMsIE1fUEkgd2lsbCBnZXQgI2RlZmluZWQuCisgICAgICAiX1VTRV9NQVRIX0RFRklORVMiLAorCisgICAgICAjIG1pbiBhbmQgbWF4IGNvbGxpZGUgd2l0aCBzdGQ6Om1pbiBhbmQgc3RkOjptYXgKKyAgICAgICJOT01JTk1BWCIsCisKKyAgICAgICMgQ29uZm9ybSB3aXRoIEM5OSBzcGVjLgorICAgICAgIl9DUlRfU1RESU9fSVNPX1dJREVfU1BFQ0lGSUVSUyIsCisgICAgXQorICB9CisKKyAgY2ZsYWdzICs9IFsKKyAgICAjIENoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bnMuCisgICAgIi9HUyIsCisKKyAgICAjICJmb3IiIGxvb3AncyBpbml0aWFsaXplciBnbyBvdXQgb2Ygc2NvcGUgYWZ0ZXIgdGhlIGZvciBsb29wLgorICAgICIvWmM6Zm9yU2NvcGUiLAorCisgICAgIyB3Y2hhcl90IGlzIHRyZWF0ZWQgYXMgYSBidWlsdC1pbiB0eXBlLgorICAgICIvWmM6d2NoYXJfdCIsCisKKyAgICAjIERvbid0IHNlbmQgZXJyb3IgcmVwb3J0cyB0byBNUy4KKyAgICAiL2Vycm9yUmVwb3J0Om5vbmUiLAorICBdCisKKyAgYXJmbGFncyArPSBbCisgICAgIyBMaW5raW5nIHN0YXRpY2FsbHkgd2l0aCBDKysvQ1ggbGlicmFyeSBpcyBub3QgcmVjb21tZW5kZWQuCisgICAgIyBUT0RPOiBSZW1vdmUgYWZ0ZXIgcmVtb3ZpbmcgQ29tcG9uZW50RXh0ZW5zaW9ucworICAgICIvaWdub3JlOjQyNjQiLAorICBdCisKKyAgY2ZsYWdzICs9IFsKKyAgICAjIEFsbG93IHVudXNlZCBmdW5jdGlvbiBpbnB1dCBwYXJhbWV0ZXIuCisgICAgIi93ZDQxMDAiLAorCisgICAgIyBDb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50LgorICAgICMgVHJpZ2dlcnMgaW4gbWFueSBsZWdpdGltYXRlIGNhc2VzLCBsaWtlIGJyYW5jaGluZyBvbiBhIGNvbnN0YW50IGRlY2xhcmVkCisgICAgIyBpbiB0eXBlIHRyYWl0cy4KKyAgICAiL3dkNDEyNyIsCisKKyAgICAjIERpc2FibGUgYW5vbnltb3VzIHVuaW9uIHdhcm5pbmdzLgorICAgICIvd2Q0MjAxIiwKKworICAgICMgNDI0NCAoTGV2ZWwgMikgLSBJbXBsaWNpdCBjb252ZXJzaW9uIGZyb20gZmxvYXQgdG8gaW50CisgICAgIyA0MjQ0IChMZXZlbCAzKSAtIEltcGxpY2l0IGNvbnZlcnNpb24gZnJvbSBpbnQgdG8gc29tZXRoaW5nIHNtYWxsZXIKKyAgICAjIHRoYW4gaW50LgorICAgICMgNDI0NCAoTGV2ZWwgNCkgLSBJbXBsaWNpdCBjb252ZXJzaW9uIG9mIHR5cGVzLCB3aGljaCBtYXkgcmVzdWx0IGluCisgICAgIyBkYXRhIGxvc3MuCisgICAgIi93ZDQyNDQiLAorCisgICAgIyBDbGFzcyBoYXMgdmlydHVhbCBmdW5jdGlvbnMsIGJ1dCBkZXN0cnVjdG9yIGlzIG5vdCB2aXJ0dWFsLgorICAgICMgRmFyIGxlc3MgdXNlZnVsIHRoYW4gaW4gR0NDIGJlY2F1c2UgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgZmFjdAorICAgICMgdGhhdCBkZXN0cnVjdG9yIGlzIG5vdCBwdWJsaWMuCisgICAgIi93ZDQyNjUiLAorCisgICAgIyBJbmNvbnNpc3RlbnQgRExMIGxpbmthZ2UKKyAgICAiL3dkNDI3MyIsCisKKyAgICAjIE1hdGNoaW5nIGRlbGV0ZSBvcGVyYXRvciBmb3IgYG5ld2AuIDQyOTEgaXMgYWxzbyBpZ25vcmVkIGJ5IENocm9taXVtLgorICAgICIvd2Q0MjkxIiwKKworICAgICMgRG91YmxlIC0+IGZsb2F0IHRydW5jYXRpb24uIE5vdCBlbmFibGVkIG9uIG90aGVyIGNvbXBpbGVycy4KKyAgICAiL3dkNDMwNSIsCisKKyAgICAjIGNhc3QgdHJ1bmNhdGVzIGNvbnN0YW50IHZhbHVlLgorICAgICMgV2UgZG8gbm90IGNhcmUuCisgICAgIi93ZDQzMDkiLAorCisgICAgIyBjYXN0aW5nIGNvbnN0YW50IG51bWJlci4KKyAgICAiL3dkNDMxMCIsCisKKyAgICAjIEFuIHJ2YWx1ZSBjYW5ub3QgYmUgYm91bmQgdG8gYSBub24tY29uc3QgcmVmZXJlbmNlLgorICAgICMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgVmlzdWFsIEMrKywgaXQgd2FzIHBvc3NpYmxlIHRvIGJpbmQgYW4gcnZhbHVlCisgICAgIyB0byBhIG5vbi1jb25zdCByZWZlcmVuY2UgaW4gYSBkaXJlY3QgaW5pdGlhbGl6YXRpb24uIFRoaXMgd2FybmluZworICAgICMgaXMgdXNlbGVzcyBhcyBpdCBzaW1wbHkgZGVzY3JpYmVzIHByb3BlciBDKysgYmVoYXZpb3IuCisgICAgIi93ZDQzNTAiLAorCisgICAgIyBsYXlvdXQgb2YgY2xhc3MgbWF5IGhhdmUgY2hhbmdlZCBmcm9tIGEgcHJldmlvdXMgdmVyc2lvbiBvZgorICAgICMgdGhlIGNvbXBpbGVyIGR1ZSB0byBiZXR0ZXIgcGFja2luZyBvZiBtZW1iZXIuIFdlIGRvbid0IGNhcmUgYWJvdXQKKyAgICAjIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgY29tcGlsZXIgdmVyc2lvbnMuCisgICAgIi93ZDQzNzEiLAorCisgICAgIyByZWxhdGl2ZSBpbmNsdWRlIHBhdGggY29udGFpbnMgJy4uJy4KKyAgICAjIFRoaXMgb2NjdXJzIGluIGEgbG90IHRoaXJkIHBhcnR5IGxpYnJhcmllcyBhbmQgd2UgZG9uJ3QgY2FyZS4KKyAgICAiL3dkNDQ2NCIsCisKKyAgICAjIGRlY29yYXRlZCBuYW1lIGxlbmd0aCBleGNlZWRlZCwgbmFtZSB3YXMgdHJ1bmNhdGVkLgorICAgICIvd2Q0NTAzIiwKKworICAgICMgYXNzaWdubWVudCBvcGVyYXRvciBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorICAgICMgVGhpcyBpcyBleHBlY3RlZCBmb3Igc3RydWN0cyB3aXRoIGNvbnN0IG1lbWJlcnMuCisgICAgIi93ZDQ1MTIiLAorCisgICAgIyBVbnJlZmVyZW5jZWQgaW5saW5lIGZ1bmN0aW9uIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgIyBXaGlsZSBkZXRlY3Rpb24gb2YgZGVhZCBjb2RlIGlzIGdvb2QsIHRoaXMgd2FybmluZyB0cmlnZ2VycyBpbgorICAgICMgdGhpcmQtcGFydHkgbGlicmFyaWVzIHdoaWNoIHJlbmRlcnMgaXQgdXNlbGVzcy4KKyAgICAiL3dkNDUxNCIsCisKKyAgICAjIEV4cHJlc3Npb24gYmVmb3JlIGNvbW1hIGhhcyBubyBlZmZlY3QuCisgICAgIyBDYW5ub3QgYmUgdXNlZCBiZWNhdXNlIE1pY3Jvc29mdCB1c2VzIF9BU1NFUlRFKCgibWVzc2FnZSIsIDApKSB0cmljaworICAgICMgaW4gbWFsbG9jLmggd2hpY2ggaXMgaW5jbHVkZWQgcHJldHR5IG11Y2ggZXZlcnl3aGVyZS4KKyAgICAiL3dkNDU0OCIsCisKKyAgICAjIFVzZSBvZiBub2V4Y2VwdCBpbiB0YXJnZXRzIGNvbXBpbGVkIHdpdGhvdXQgL0VIc2MgdHJpZ2dlcnMgYSB3YXJuaW5nCisgICAgIyAidGVybWluYXRpb24gb24gZXhjZXB0aW9uIGlzIG5vdCBndWFyYW50ZWVkIiB3aGljaCB3ZSBjb25zaWRlciBiZW5pZ24KKyAgICAjIGJlY2F1c2Ugd2UgZG9uJ3QgZXhwZWN0IGV4Y2VwdGlvbnMgdG8gY3Jvc3MgdGhlIGJvdW5kYXJ5IG9mIG1vZHVsZXMKKyAgICAjIGNvbXBpbGVkIHdpdGggL0VIc2MuCisgICAgIi93ZDQ1NzciLAorCisgICAgIyBDb3B5IGNvbnN0cnVjdG9yIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQgYmVjYXVzZSBhIGJhc2UgY2xhc3MgY29weQorICAgICMgY29uc3RydWN0b3IgaXMgaW5hY2Nlc3NpYmxlLgorICAgICMgVGhpcyBpcyBhbiBleHBlY3RlZCBjb25zZXF1ZW5jZSBvZiB1c2luZyBESVNBTExPV19DT1BZX0FORF9BU1NJR04oKS4KKyAgICAiL3dkNDYyNSIsCisKKyAgICAjIEFzc2lnbm1lbnQgb3BlcmF0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZCBiZWNhdXNlIGEgYmFzZSBjbGFzcworICAgICMgYXNzaWdubWVudCBvcGVyYXRvciBpcyBpbmFjY2Vzc2libGUuCisgICAgIyBUaGlzIGlzIGFuIGV4cGVjdGVkIGNvbnNlcXVlbmNlIG9mIHVzaW5nIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTigpLgorICAgICIvd2Q0NjI2IiwKKworICAgICMgRGlncmFwaHMgbm90IHN1cHBvcnRlZC4KKyAgICAiL3dkNDYyOCIsCisKKyAgICAjIFNvbWV0aW1lcyB0ZW1wbGF0ZSBkZWZpbml0aW9ucyBhbmQgZGVjbGFyYXRpb25zIGFyZSBzZXBhcmF0ZSBhbmQgTVNWQworICAgICMgY29tcGxhaW5zIHdoZW4gaXQgZmFpbHMgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvbiBzZWVpbmcgdGhlIHRlbXBsYXRlLgorICAgICIvd2Q0NjYxIiwKKworICAgICMgU3ltYm9sIGlzIG5vdCBkZWZpbmVkIGFzIGEgcHJlcHJvY2Vzc29yIG1hY3JvLCByZXBsYWNpbmcgd2l0aCAnMCcuCisgICAgIyBTZWVtcyBsaWtlIGNvbW1vbiBwcmFjdGljZSwgdXNlZCBpbiBXaW5kb3dzIFNESyBhbmQgZ3Rlc3QuCisgICAgIi93ZDQ2NjgiLAorCisgICAgIyBGdW5jdGlvbiBub3QgaW5saW5lZC4KKyAgICAjIEl0J3MgdXAgdG8gdGhlIGNvbXBpbGVyIHRvIGRlY2lkZSB3aGF0IHRvIGlubGluZS4KKyAgICAiL3dkNDcxMCIsCisKKyAgICAjIEZ1bmN0aW9uIHNlbGVjdGVkIGZvciBpbmxpbmUgZXhwYW5zaW9uLgorICAgICMgSXQncyB1cCB0byB0aGUgY29tcGlsZXIgdG8gZGVjaWRlIHdoYXQgdG8gaW5saW5lLgorICAgICIvd2Q0NzExIiwKKworICAgICMgVGhlIHR5cGUgYW5kIG9yZGVyIG9mIGVsZW1lbnRzIGNhdXNlZCB0aGUgY29tcGlsZXIgdG8gYWRkIHBhZGRpbmcKKyAgICAjIHRvIHRoZSBlbmQgb2YgYSBzdHJ1Y3QuCisgICAgIyBVbnN1cnByaXNpbmdseSwgbW9zdCBvZiB0aGUgc3RydWN0cyBiZWNvbWUgbGFyZ2VyIGJlY2F1c2Ugb2YgcGFkZGluZworICAgICMgYnV0IGl0J3MgYSB1bml2ZXJzYWxseSBhY2NlcHRhYmxlIHByaWNlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgIi93ZDQ4MjAiLAorCisgICAgIyBEaXNhYmxlIHN0YXRpYyBhbmFseXplciB3YXJuaW5nIGZvciBzdGQ6Om1pbiBhbmQgc3RkOjptYXggd2l0aAorICAgICMgb2JqZWN0cy4KKyAgICAjIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL1Zpc3VhbFN0dWRpby9mZWVkYmFjay9kZXRhaWxzLzc4MzgwOC9zdGF0aWMtYW5hbHl6ZXItd2FybmluZy1jMjgyODUtZm9yLXN0ZC1taW4tYW5kLXN0ZC1tYXgKKyAgICAiL3dkMjgyODUiLAorICBdCit9CisKK2NvbmZpZygibm9fcGVkYW50aWNfd2FybmluZ3MiKSB7CisgIGNmbGFncyA9IFsKKyAgICAjIEVuYWJsZSBzb21lIHdhcm5pbmdzLCBldmVuIHRob3NlIHRoYXQgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgIyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8yM2s1ZDM4NS5hc3B4CisgICAgIi9XMiIsCisgIF0KK30KKworY29uZmlnKCJwZWRhbnRpY193YXJuaW5ncyIpIHsKKyAgY2ZsYWdzID0gWworICAgICMgRW5hYmxlIHNvbWUgd2FybmluZ3MsIGV2ZW4gdGhvc2UgdGhhdCBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgICAjIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzIzazVkMzg1LmFzcHgKKyAgICAiL1c0IiwKKworICAgICMgV2FybiBpZiBhbiBlbnVtZXJhdGlvbiB2YWx1ZSBpcyB1bmhhbmRsZWQgaW4gc3dpdGNoIChDNDA2MikuCisgICAgIyBUaGlzIHdhcm5pbmcgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIGl0IG11c3QgYmUgdHVybmVkIG9uIGV4cGxpY2l0bHkuCisgICAgIi93NDQwNjIiLAorICBdCit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmFjOTIzCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmduaQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0KCIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvYmFzZV9jb25maWd1cmF0aW9uLmduaSIpCisKKyMgTm8gR0wgZHJpdmVycyBhdmFpbGFibGUuCitnbF90eXBlID0gImFuZ2xlIgorCitzYWJpX3BhdGggPSAiLy9zdGFyYm9hcmQvc2FiaS94NjQvd2luZG93cy9zYWJpLXYkc2JfYXBpX3ZlcnNpb24uanNvbiIKKworaW5zdGFsbF90YXJnZXRfcGF0aCA9ICIvL3N0YXJib2FyZC9idWlsZC9pbnN0YWxsL25vX2luc3RhbGwuZ25pIgorCitub19wZWRhbnRpY193YXJuaW5nc19jb25maWdfcGF0aCA9CisgICAgIi8vc3RhcmJvYXJkL3dpbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbjpub19wZWRhbnRpY193YXJuaW5ncyIKK3BlZGFudGljX3dhcm5pbmdzX2NvbmZpZ19wYXRoID0KKyAgICAiLy9zdGFyYm9hcmQvd2luL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uOnBlZGFudGljX3dhcm5pbmdzIgorCitjb2JhbHRfcGxhdGZvcm1fZGVwZW5kZW5jaWVzID0gWyAiLy9zdGFyYm9hcmQvZWdsX2FuZF9nbGVzIiBdCisKK3BsYXRmb3JtX2kxOG5fY29uZmlnX3BhdGggPSAiLy9jb2JhbHQvY29udGVudC9pMThuL3BsYXRmb3JtL3hiMTp4YjEiCisKK3NiX2VuYWJsZV9jcHAxN19hdWRpdCA9IGZhbHNlCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3NoYXJlZC9zeXN0ZW1fZ2V0X3BhdGguY2MgYi9zdGFyYm9hcmQvd2luL3NoYXJlZC9zeXN0ZW1fZ2V0X3BhdGguY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkMDM4NgotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vc2hhcmVkL3N5c3RlbV9nZXRfcGF0aC5jYwpAQCAtMCwwICsxLDE3OSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3N5c3RlbS5oIgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorLy8gcGF0aGNjaC5oIG11c3QgY29tZSBhZnRlciB3aW5kb3dzLmguCisjaW5jbHVkZSA8cGF0aGNjaC5oPgorCisjaW5jbHVkZSA8Y29kZWN2dD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxvY2FsZT4KKworI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vbG9nLmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL2NvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbl9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvZGlyZWN0b3J5LmgiCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kaXJlY3RvcnlfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2ZpbGVfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3djaGFyX3V0aWxzLmgiCisKK25hbWVzcGFjZSB7CisKK3VzaW5nIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6Q3JlYXRlRGlyZWN0b3J5SGllcmFyY2h5OwordXNpbmcgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjpOb3JtYWxpemVXaW4zMlBhdGg7CisKKy8vIFBsYWNlcyB1cCB0byB8cGF0aF9zaXplfCAtIDEgY2hhcmFjdGVycyBvZiB0aGUgcGF0aCB0byB0aGUgY3VycmVudAorLy8gZXhlY3V0YWJsZSBpbiB8b3V0X3BhdGh8LCBlbnN1cmluZyBpdCBpcyBOVUxMLXRlcm1pbmF0ZWQuIFJldHVybnMgc3VjY2VzcworLy8gc3RhdHVzLiBUaGUgcmVzdWx0IGJlaW5nIGdyZWF0ZXIgdGhhbiB8cGF0aF9zaXplfCAtIDEgY2hhcmFjdGVycyBpcyBhCisvLyBmYWlsdXJlLiB8b3V0X3BhdGh8IG1heSBiZSB3cml0dGVuIHRvIGluIHVuc3VjY2Vzc2Z1bCBjYXNlcy4KK2Jvb2wgR2V0RXhlY3V0YWJsZVBhdGgoY2hhciogb3V0X3BhdGgsIGludCBwYXRoX3NpemUpIHsKKyAgaWYgKCFvdXRfcGF0aCB8fCAocGF0aF9zaXplIDw9IDApKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RkOjp2ZWN0b3I8d2NoYXJfdD4gd19maWxlX3BhdGgoa1NiRmlsZU1heFBhdGgpOworICBEV09SRCBjaGFyYWN0ZXJzX3dyaXR0ZW4gPQorICAgICAgR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgd19maWxlX3BhdGguZGF0YSgpLCBrU2JGaWxlTWF4UGF0aCk7CisgIGlmIChjaGFyYWN0ZXJzX3dyaXR0ZW4gPCAxKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHN0ZDo6c3RyaW5nIHV0Zjhfc3RyaW5nID0KKyAgICAgIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6d2NoYXJfdFRvVVRGOCh3X2ZpbGVfcGF0aC5kYXRhKCkpOworICBpZiAodXRmOF9zdHJpbmcubGVuZ3RoKCkgPj0gcGF0aF9zaXplKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBzdGFyYm9hcmQ6OnN0cmxjcHkob3V0X3BhdGgsIHV0Zjhfc3RyaW5nLmNfc3RyKCksIHBhdGhfc2l6ZSk7Cit9CisKKy8vIFBsYWNlcyB1cCB0byB8cGF0aF9zaXplfCAtIDEgY2hhcmFjdGVycyBvZiB0aGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5CisvLyBjb250YWluaW5nIHRoZSBjdXJyZW50IGV4ZWN1dGFibGUgaW4gfG91dF9wYXRofCwgZW5zdXJpbmcgaXQgaXMKKy8vIE5VTEwtdGVybWluYXRlZC4gUmV0dXJucyBzdWNjZXNzIHN0YXR1cy4gVGhlIHJlc3VsdCBiZWluZyBncmVhdGVyIHRoYW4KKy8vIHxwYXRoX3NpemV8IC0gMSBjaGFyYWN0ZXJzIGlzIGEgZmFpbHVyZS4gfG91dF9wYXRofCBtYXkgYmUgd3JpdHRlbiB0byBpbgorLy8gdW5zdWNjZXNzZnVsIGNhc2VzLgorYm9vbCBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KGNoYXIqIG91dF9wYXRoLCBpbnQgcGF0aF9zaXplKSB7CisgIGlmICghb3V0X3BhdGggfHwgKHBhdGhfc2l6ZSA8PSAwKSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHN0ZDo6dmVjdG9yPHdjaGFyX3Q+IHdfZmlsZV9wYXRoKGtTYkZpbGVNYXhQYXRoKTsKKyAgRFdPUkQgY2hhcmFjdGVyc193cml0dGVuID0KKyAgICAgIEdldE1vZHVsZUZpbGVOYW1lKE5VTEwsIHdfZmlsZV9wYXRoLmRhdGEoKSwga1NiRmlsZU1heFBhdGgpOworICBpZiAoY2hhcmFjdGVyc193cml0dGVuIDwgMSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBQYXRoQ2NoUmVtb3ZlRmlsZVNwZWMod19maWxlX3BhdGguZGF0YSgpLCBrU2JGaWxlTWF4UGF0aCk7CisgIHN0ZDo6c3RyaW5nIHV0Zjhfc3RyaW5nID0KKyAgICAgIHN0YXJib2FyZDo6c2hhcmVkOjp3aW4zMjo6d2NoYXJfdFRvVVRGOCh3X2ZpbGVfcGF0aC5kYXRhKCkpOworICBpZiAodXRmOF9zdHJpbmcubGVuZ3RoKCkgPj0gcGF0aF9zaXplKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBzdGFyYm9hcmQ6OnN0cmxjcHkob3V0X3BhdGgsIHV0Zjhfc3RyaW5nLmNfc3RyKCksIHBhdGhfc2l6ZSk7Cit9CisKK2Jvb2wgR2V0UmVsYXRpdmVEaXJlY3RvcnkoY29uc3QgY2hhciogcmVsYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogb3V0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoX3NpemUpIHsKKyAgaWYgKCFvdXRfcGF0aCB8fCAocGF0aF9zaXplIDw9IDApKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHN0ZDo6dmVjdG9yPGNoYXI+IGZpbGVfcGF0aChrU2JGaWxlTWF4UGF0aCk7CisgIGZpbGVfcGF0aFswXSA9ICdcMCc7CisgIGlmICghR2V0RXhlY3V0YWJsZURpcmVjdG9yeShmaWxlX3BhdGguZGF0YSgpLCBwYXRoX3NpemUpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGlmIChzdGFyYm9hcmQ6OnN0cmxjYXQoZmlsZV9wYXRoLmRhdGEoKSwgcmVsYXRpdmVfcGF0aCwga1NiRmlsZU1heFBhdGgpID49CisgICAgICBwYXRoX3NpemUpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoIUNyZWF0ZURpcmVjdG9yeUhpZXJhcmNoeShOb3JtYWxpemVXaW4zMlBhdGgoZmlsZV9wYXRoLmRhdGEoKSkpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiBzdGFyYm9hcmQ6OnN0cmxjcHkob3V0X3BhdGgsIGZpbGVfcGF0aC5kYXRhKCksIHBhdGhfc2l6ZSk7Cit9CisKKy8vIFBsYWNlcyB1cCB0byB8cGF0aF9zaXplfCAtIDEgY2hhcmFjdGVycyBvZiB0aGUgcGF0aCB0byB0aGUgY29udGVudCBkaXJlY3RvcnkKKy8vIGluIHxvdXRfcGF0aHwsIGVuc3VyaW5nIGl0IGlzIE5VTEwtdGVybWluYXRlZC4gUmV0dXJucyBzdWNjZXNzCisvLyBzdGF0dXMuIFRoZSByZXN1bHQgYmVpbmcgZ3JlYXRlciB0aGFuIHxwYXRoX3NpemV8IC0gMSBjaGFyYWN0ZXJzIGlzIGEKKy8vIGZhaWx1cmUuIHxvdXRfcGF0aHwgbWF5IGJlIHdyaXR0ZW4gdG8gaW4gdW5zdWNjZXNzZnVsIGNhc2VzLgorYm9vbCBHZXRDb250ZW50UGF0aChjaGFyKiBvdXRfcGF0aCwgaW50IHBhdGhfc2l6ZSkgeworICByZXR1cm4gR2V0UmVsYXRpdmVEaXJlY3RvcnkoIlxcY29udGVudFxcZGF0YSIsIG91dF9wYXRoLCBwYXRoX3NpemUpOworfQorCitib29sIEdldENhY2hlUGF0aChjaGFyKiBvdXRfcGF0aCwgaW50IHBhdGhfc2l6ZSkgeworICByZXR1cm4gR2V0UmVsYXRpdmVEaXJlY3RvcnkoIlxcY29udGVudFxcY2FjaGUiLCBvdXRfcGF0aCwgcGF0aF9zaXplKTsKK30KKworYm9vbCBDcmVhdGVBbmRHZXRUZW1wUGF0aChjaGFyKiBvdXRfcGF0aCwgaW50IHBhdGhfc2l6ZSkgeworICBpZiAoIW91dF9wYXRoIHx8IChwYXRoX3NpemUgPD0gMCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgc3RkOjp2ZWN0b3I8d2NoYXJfdD4gd19maWxlX3BhdGgoa1NiRmlsZU1heFBhdGgpOworICB3X2ZpbGVfcGF0aFswXSA9IEwnXDAnOworCisgIGludDY0X3QgY2hhcmFjdGVyc193cml0dGVuID0KKyAgICAgIHN0YXRpY19jYXN0PGludD4oR2V0VGVtcFBhdGhXKGtTYkZpbGVNYXhQYXRoLCB3X2ZpbGVfcGF0aC5kYXRhKCkpKTsKKyAgaWYgKGNoYXJhY3RlcnNfd3JpdHRlbiA+PSAocGF0aF9zaXplICsgMSkgfHwgY2hhcmFjdGVyc193cml0dGVuIDwgMSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAvLyBSZW1vdmUgdGhlIGxhc3Qgc2xhc2gsIHRvIG1hdGNoIG90aGVyIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbnMuCisgIHdfZmlsZV9wYXRoW2NoYXJhY3RlcnNfd3JpdHRlbiAtIDFdID0gTCdcMCc7CisKKyAgc3RkOjpzdHJpbmcgdXRmOF9zdHJpbmcgPQorICAgICAgc3RhcmJvYXJkOjpzaGFyZWQ6OndpbjMyOjp3Y2hhcl90VG9VVEY4KHdfZmlsZV9wYXRoLmRhdGEoKSk7CisKKyAgaWYgKHN0YXJib2FyZDo6c3RybGNweShvdXRfcGF0aCwgdXRmOF9zdHJpbmcuY19zdHIoKSwgcGF0aF9zaXplKSA+PQorICAgICAgcGF0aF9zaXplKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIFNiRGlyZWN0b3J5Q3JlYXRlKG91dF9wYXRoKTsKKworICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKG91dF9wYXRoKTsKKyAgaWYgKGxlbmd0aCA8IDEgfHwgbGVuZ3RoID4gcGF0aF9zaXplKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1pbmltYWxseSBpbXBsZW1lbnRlZCB0byBhbGxvdyB0ZXN0cyB0byBydW4uCitib29sIFNiU3lzdGVtR2V0UGF0aChTYlN5c3RlbVBhdGhJZCBwYXRoX2lkLCBjaGFyKiBvdXRfcGF0aCwgaW50IHBhdGhfc2l6ZSkgeworICBpZiAoIW91dF9wYXRoIHx8IChwYXRoX3NpemUgPD0gMCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBzd2l0Y2ggKHBhdGhfaWQpIHsKKyAgICBjYXNlIGtTYlN5c3RlbVBhdGhDb250ZW50RGlyZWN0b3J5OgorICAgICAgcmV0dXJuIEdldENvbnRlbnRQYXRoKG91dF9wYXRoLCBwYXRoX3NpemUpOworICAgIGNhc2Uga1NiU3lzdGVtUGF0aERlYnVnT3V0cHV0RGlyZWN0b3J5OgorICAgICAgcmV0dXJuIFNiU3lzdGVtR2V0UGF0aChrU2JTeXN0ZW1QYXRoVGVtcERpcmVjdG9yeSwgb3V0X3BhdGgsIHBhdGhfc2l6ZSk7CisgICAgY2FzZSBrU2JTeXN0ZW1QYXRoRXhlY3V0YWJsZUZpbGU6CisgICAgICByZXR1cm4gR2V0RXhlY3V0YWJsZVBhdGgob3V0X3BhdGgsIHBhdGhfc2l6ZSk7CisgICAgY2FzZSBrU2JTeXN0ZW1QYXRoVGVtcERpcmVjdG9yeToKKyAgICAgIHJldHVybiBDcmVhdGVBbmRHZXRUZW1wUGF0aChvdXRfcGF0aCwgcGF0aF9zaXplKTsKKyAgICBjYXNlIGtTYlN5c3RlbVBhdGhDYWNoZURpcmVjdG9yeToKKyAgICAgIHJldHVybiBHZXRDYWNoZVBhdGgob3V0X3BhdGgsIHBhdGhfc2l6ZSk7CisgICAgY2FzZSBrU2JTeXN0ZW1QYXRoRm9udENvbmZpZ3VyYXRpb25EaXJlY3Rvcnk6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBrU2JTeXN0ZW1QYXRoRm9udERpcmVjdG9yeToKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYWxsIHRoZSBvdGhlciBjYXNlcy4KKyAgICBkZWZhdWx0OgorICAgICAgU0JfTk9USU1QTEVNRU5URUQoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9CVUlMRC5nbiBiL3N0YXJib2FyZC93aW4vd2luMzIvQlVJTEQuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NWVjOQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vd2luMzIvQlVJTEQuZ24KQEAgLTAsMCArMSw4NSBAQAorIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0YXRpY19saWJyYXJ5KCJzdGFyYm9hcmRfcGxhdGZvcm0iKSB7CisgIHNvdXJjZXMgPSBbCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvbG9jYWxpemVkX3N0cmluZ3MuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL21lZGlhL21lZGlhX2dldF9hdWRpb19jb25maWd1cmF0aW9uXzVfMS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdGFyYm9hcmQvcXVldWVfYXBwbGljYXRpb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X2JsdXIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X2NvbmNlYWwuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X2ZvY3VzLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9mcmVlemUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X3BhdXNlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0YXJib2FyZC9zeXN0ZW1fcmVxdWVzdF9yZXZlYWwuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X3N0b3AuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X3N1c3BlbmQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9yZXF1ZXN0X3VucGF1c2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3RhcmJvYXJkL3N5c3RlbV9zdXBwb3J0c19yZXN1bWUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9kcm1faXNfc2VydmVyX2NlcnRpZmljYXRlX3VwZGF0YWJsZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL2RybV91cGRhdGVfc2VydmVyX2NlcnRpZmljYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9jbG9zZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC9zdHViL21pY3JvcGhvbmVfY3JlYXRlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9kZXN0cm95LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9nZXRfYXZhaWxhYmxlLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3N0dWIvbWljcm9waG9uZV9pc19zYW1wbGVfcmF0ZV9zdXBwb3J0ZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX29wZW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvc3R1Yi9taWNyb3Bob25lX3JlYWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzIuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvYXBwbGljYXRpb25fd2luMzJfa2V5X2V2ZW50LmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2NvbmZpZ3VyYXRpb24uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvY29uZmlndXJhdGlvbi5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL2RpYWxvZy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9kcm1fY3JlYXRlX3N5c3RlbS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9nZXRfaG9tZV9kaXJlY3RvcnkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX2ZpbGVfaW1wbC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfZmlsZV9pbXBsLmgiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbG9nX3Jhdy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9sb2dfcmF3X2Zvcm1hdC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9tZWRpYV9pc19hdWRpb19zdXBwb3J0ZWQuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvbWVkaWFfaXNfc3VwcG9ydGVkLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL21lZGlhX2lzX3ZpZGVvX3N1cHBvcnRlZC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9taW5pZHVtcC5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3BsYXllcl9jb21wb25lbnRzX2ZhY3RvcnkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvcGxheXJlYWR5X2xpY2Vuc2UuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3RhcmJvYXJkX21haW4uY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9kZXZpY2VfdHlwZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X2V4dGVuc2lvbnMuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF9wcm9wZXJ0eS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zeXN0ZW1fZ2V0X3RvdGFsX2NwdV9tZW1vcnkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX2dldF91c2VkX2NwdV9tZW1vcnkuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvc3lzdGVtX3JhaXNlX3BsYXRmb3JtX2Vycm9yLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3N5c3RlbV9zeW1ib2xpemUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2NyZWF0ZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZGVzdHJveS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZ2V0X3BsYXRmb3JtX2hhbmRsZS5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3NoYXJlZC93aW4zMi93aW5kb3dfZ2V0X3NpemUuY2MiLAorICAgICIvL3N0YXJib2FyZC9zaGFyZWQvd2luMzIvd2luZG93X2ludGVybmFsLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19pbnRlcm5hbC5oIiwKKyAgICAiLy9zdGFyYm9hcmQvc2hhcmVkL3dpbjMyL3dpbmRvd19zZXRfZGVmYXVsdF9vcHRpb25zLmNjIiwKKyAgICAiLy9zdGFyYm9hcmQvd2luL3NoYXJlZC9jb25maWd1cmF0aW9uX2NvbnN0YW50cy5jYyIsCisgICAgIi8vc3RhcmJvYXJkL3dpbi9zaGFyZWQvc3lzdGVtX2dldF9wYXRoLmNjIiwKKyAgICAiYXRvbWljX3B1YmxpYy5oIiwKKyAgICAiY29uZmlndXJhdGlvbl9wdWJsaWMuaCIsCisgICAgIm1haW4uY2MiLAorICBdCisKKyAgY29uZmlncyArPSBbCisgICAgIi8vc3RhcmJvYXJkL2J1aWxkL2NvbmZpZzpzdGFyYm9hcmRfaW1wbGVtZW50YXRpb24iLAorICAgICIvL3N0YXJib2FyZC93aW4vc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybV9jb25maWciLAorICBdCisKKyAgcHVibGljX2RlcHMgPSBbICIvL3N0YXJib2FyZC93aW4vc2hhcmVkOnN0YXJib2FyZF9wbGF0Zm9ybSIgXQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkgYi9zdGFyYm9hcmQvd2luL3dpbjMyL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc3RhcmJvYXJkL2xpbnV4L3g2NHgxMS9zYnZlcnNpb24vX19pbml0X18ucHkKY29weSB0byBzdGFyYm9hcmQvd2luL3dpbjMyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3dpbjMyL2FyZ3MuZ24gYi9zdGFyYm9hcmQvd2luL3dpbjMyL2FyZ3MuZ24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRiYTZjOQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vd2luMzIvYXJncy5nbgpAQCAtMCwwICsxLDE5IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwordGFyZ2V0X3BsYXRmb3JtID0gIndpbi13aW4zMiIKK3RhcmdldF9vcyA9ICJ3aW4iCit0YXJnZXRfY3B1ID0gIng2NCIKK2lzX2NsYW5nID0gZmFsc2UKK2lzX2ludGVybmFsX2J1aWxkID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9hdG9taWNfcHVibGljLmggYi9zdGFyYm9hcmQvd2luL3dpbjMyL2F0b21pY19wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE1Yjk4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9hdG9taWNfcHVibGljLmgKQEAgLTAsMCArMSwyMCBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIFNUQVJCT0FSRF9XSU5fV0lOMzJfQVRPTUlDX1BVQkxJQ19IXworI2RlZmluZSBTVEFSQk9BUkRfV0lOX1dJTjMyX0FUT01JQ19QVUJMSUNfSF8KKworI2luY2x1ZGUgInN0YXJib2FyZC9zaGFyZWQvd2luMzIvYXRvbWljX3B1YmxpYy5oIgorCisjZW5kaWYgIC8vIFNUQVJCT0FSRF9XSU5fV0lOMzJfQVRPTUlDX1BVQkxJQ19IXwpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9jb2JhbHQvY29uZmlndXJhdGlvbi5weSBiL3N0YXJib2FyZC93aW4vd2luMzIvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0Mjk4NwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vd2luMzIvY29iYWx0L2NvbmZpZ3VyYXRpb24ucHkKQEAgLTAsMCArMSw1NSBAQAorIyBDb3B5cmlnaHQgMjAxOCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJTdGFyYm9hcmQgV2luMzIgQ29iYWx0IGNvbmZpZ3VyYXRpb24uIiIiCisKK2Zyb20gY29iYWx0LmJ1aWxkIGltcG9ydCBjb2JhbHRfY29uZmlndXJhdGlvbgorZnJvbSBzdGFyYm9hcmQudG9vbHMudGVzdGluZyBpbXBvcnQgdGVzdF9maWx0ZXIKKworCitjbGFzcyBDb2JhbHRXaW5XaW4zMkNvbmZpZ3VyYXRpb24oY29iYWx0X2NvbmZpZ3VyYXRpb24uQ29iYWx0Q29uZmlndXJhdGlvbik6CisgICIiIlN0YXJib2FyZCBOaW50ZW5kbyBTd2l0Y2ggQ29iYWx0IGNvbmZpZ3VyYXRpb24uIiIiCisKKyAgZGVmIFdlYmRyaXZlckJlbmNobWFya3NFbmFibGVkKHNlbGYpOgorICAgIHJldHVybiBGYWxzZQorCisgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKKyAgICBmaWx0ZXJzID0gc3VwZXIoQ29iYWx0V2luV2luMzJDb25maWd1cmF0aW9uLCBzZWxmKS5HZXRUZXN0RmlsdGVycygpCisgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gc2VsZi5fX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CisgICAgICBmaWx0ZXJzLmV4dGVuZCh0ZXN0X2ZpbHRlci5UZXN0RmlsdGVyKHRhcmdldCwgdGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCisgICAgcmV0dXJuIGZpbHRlcnMKKworICBkZWYgR2V0V2ViUGxhdGZvcm1UZXN0RmlsdGVycyhzZWxmKToKKyAgICBmaWx0ZXJzID0gc3VwZXIoQ29iYWx0V2luV2luMzJDb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICBzZWxmKS5HZXRXZWJQbGF0Zm9ybVRlc3RGaWx0ZXJzKCkKKyAgICBmaWx0ZXJzICs9IFsKKyAgICAgICAgJypXZWJQbGF0Zm9ybVRlc3QuUnVuKicsCisgICAgXQorICAgIHJldHVybiBmaWx0ZXJzCisKKyAgX19GSUxURVJFRF9URVNUUyA9IHsgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQorICAgICAgIyBUaGVzZSB1bml0dGVzdCBjYXNlcyBhcmUgZmFpbGluZyBhZnRlciBDKysxNCBtaWdyYXRpb24uIFRoZXkgd2lsbCBiZQorICAgICAgIyBmaXhlZCBzb29uIGFuZCByZS1lbmFibGVkLgorICAgICAgJ2Jhc2VfdW5pdHRlc3RzJzogWworICAgICAgICAgICcqVGFza1NjaGVkdWxlcionLAorICAgICAgICAgICdUYXNrVHJhaXRzKicsCisgICAgICBdLAorICAgICAgJ3JlbmRlcmVyX3Rlc3QnOiBbCisgICAgICAgICAgIyBGbGFreSB0ZXN0IGlzIHN0aWxsIGJlaW5nIGNvdW50ZWQgYXMgYSBmYWlsLgorICAgICAgICAgICgnUmVuZGVyZXJQaXBlbGluZVRlc3QuRkxBS1lfJworICAgICAgICAgICAnUmFzdGVyaXplclN1Ym1pdENhbGxlZEF0RXhwZWN0ZWRGcmVxdWVuY3lBZnRlck1hbnlQaXBlbGluZVN1Ym1pdHMnKSwKKyAgICAgICAgICAoJ1JlbmRlcmVyUGlwZWxpbmVUZXN0LkZMQUtZXycKKyAgICAgICAgICAgJ1Jhc3Rlcml6ZXJTdWJtaXRDYWxsZWRBdEV4cGVjdGVkRnJlcXVlbmN5QWZ0ZXJTaW5nbGVQaXBlbGluZVN1Ym1pdCcKKyAgICAgICAgICAgKSwKKyAgICAgIF0sCisgIH0KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC93aW4vd2luMzIvY29uZmlndXJhdGlvbl9wdWJsaWMuaCBiL3N0YXJib2FyZC93aW4vd2luMzIvY29uZmlndXJhdGlvbl9wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWYwYWFkCi0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9jb25maWd1cmF0aW9uX3B1YmxpYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8vIENvcHlyaWdodCAyMDE3IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLy8gT3RoZXIgc291cmNlIGZpbGVzIHNob3VsZCBuZXZlciBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5LCBidXQgc2hvdWxkCisvLyBpbmNsdWRlIHRoZSBnZW5lcmljICJzdGFyYm9hcmQvY29uZmlndXJhdGlvbi5oIiBpbnN0ZWFkLgorCisjaWZuZGVmIFNUQVJCT0FSRF9XSU5fV0lOMzJfQ09ORklHVVJBVElPTl9QVUJMSUNfSF8KKyNkZWZpbmUgU1RBUkJPQVJEX1dJTl9XSU4zMl9DT05GSUdVUkFUSU9OX1BVQkxJQ19IXworCisjaW5jbHVkZSAic3RhcmJvYXJkL3dpbi9zaGFyZWQvY29uZmlndXJhdGlvbl9wdWJsaWMuaCIKKworI2VuZGlmICAvLyBTVEFSQk9BUkRfV0lOX1dJTjMyX0NPTkZJR1VSQVRJT05fUFVCTElDX0hfCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3dpbjMyL2d5cF9jb25maWd1cmF0aW9uLnB5IGIvc3RhcmJvYXJkL3dpbi93aW4zMi9neXBfY29uZmlndXJhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDgzYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9neXBfY29uZmlndXJhdGlvbi5weQpAQCAtMCwwICsxLDQzIEBACisjIENvcHlyaWdodCAyMDE2IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlN0YXJib2FyZCB3aW4td2luMzIgcGxhdGZvcm0gY29uZmlndXJhdGlvbiBmb3IgZ3lwX2NvYmFsdC4iIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgaW1wICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1vZHVsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworCitmcm9tIHN0YXJib2FyZC5zaGFyZWQud2luMzIgaW1wb3J0IGd5cF9jb25maWd1cmF0aW9uCisKKworZGVmIENyZWF0ZVBsYXRmb3JtQ29uZmlnKCk6CisgIHRyeToKKyAgICB3aW5fbGliX2NvbmZpZyA9IFdpbldpbjMyUGxhdGZvcm1Db25maWcoJ3dpbi13aW4zMicpCisgICAgcmV0dXJuIHdpbl9saWJfY29uZmlnCisgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKKyAgICBsb2dnaW5nLmNyaXRpY2FsKGUpCisgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBXaW5XaW4zMlBsYXRmb3JtQ29uZmlnKGd5cF9jb25maWd1cmF0aW9uLldpbjMyU2hhcmVkQ29uZmlndXJhdGlvbik6CisgICIiIlN0YXJib2FyZCB3aW4tMzIgcGxhdGZvcm0gY29uZmlndXJhdGlvbi4iIiIKKworICBkZWYgR2V0TGF1bmNoZXIoc2VsZik6CisgICAgIiIiR2V0cyB0aGUgbW9kdWxlIHVzZWQgdG8gbGF1bmNoIGFwcGxpY2F0aW9ucyBvbiB0aGlzIHBsYXRmb3JtLiIiIgorICAgIG1vZHVsZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKAorICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2xhdW5jaGVyLnB5JykpCisKKyAgICBsYXVuY2hlcl9tb2R1bGUgPSBpbXAubG9hZF9zb3VyY2UoJ2xhdW5jaGVyJywgbW9kdWxlX3BhdGgpCisgICAgcmV0dXJuIGxhdW5jaGVyX21vZHVsZQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9sYXVuY2hlci5weSBiL3N0YXJib2FyZC93aW4vd2luMzIvbGF1bmNoZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiOWU1MQotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vd2luMzIvbGF1bmNoZXIucHkKQEAgLTAsMCArMSw5MSBAQAorIworIyBDb3B5cmlnaHQgMjAxNyBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJTdGFyYm9hcmQgd2luLXdpbjMyIGxhdW5jaGVyLiIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBzdGFyYm9hcmQuc2hhcmVkLndpbjMyIGltcG9ydCBtaW5pX2R1bXBfcHJpbnRlcgorZnJvbSBzdGFyYm9hcmQudG9vbHMgaW1wb3J0IGFic3RyYWN0X2xhdW5jaGVyCisKKworY2xhc3MgTGF1bmNoZXIoYWJzdHJhY3RfbGF1bmNoZXIuQWJzdHJhY3RMYXVuY2hlcik6CisgICIiIlJ1biBhbiBhcHBsaWNhdGlvbiBvbiBXaW5kb3dzLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBwbGF0Zm9ybSwgdGFyZ2V0X25hbWUsIGNvbmZpZywgZGV2aWNlX2lkLCAqKmt3YXJncyk6CisgICAgc3VwZXIoTGF1bmNoZXIsIHNlbGYpLl9faW5pdF9fKHBsYXRmb3JtLCB0YXJnZXRfbmFtZSwgY29uZmlnLCBkZXZpY2VfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgIHNlbGYuZXhlY3V0YWJsZV9wYXRoID0gc2VsZi5HZXRUYXJnZXRQYXRoKCkKKworICAgIHNlbGYuZXhlY3V0YWJsZV9taW5pX2R1bXBfcGF0aCA9IHNlbGYuZXhlY3V0YWJsZV9wYXRoICsgJy5kbXAnCisgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5leGVjdXRhYmxlX21pbmlfZHVtcF9wYXRoKToKKyAgICAgIHNlbGYuTG9nTG4oJ0ZvdW5kIHByZXZpb3VzIGNyYXNoIG1pbmkgZHVtcDogZGVsZXRpbmcuJykKKyAgICAgIG9zLnJlbW92ZShzZWxmLmV4ZWN1dGFibGVfbWluaV9kdW1wX3BhdGgpCisKKyAgZGVmIFJ1bihzZWxmKToKKyAgICAiIiJSdW5zIGxhdW5jaGVyJ3MgZXhlY3V0YWJsZV9wYXRoLiIiIgorICAgIHNlbGYuTG9nTG4oJ1xuKioqUnVubmluZyBMYXVuY2hlcioqKicpCisgICAgc2VsZi5wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbiggICMgcHlsaW50OiBkaXNhYmxlPWNvbnNpZGVyLXVzaW5nLXdpdGgKKyAgICAgICAgW3NlbGYuZXhlY3V0YWJsZV9wYXRoXSArIHNlbGYudGFyZ2V0X2NvbW1hbmRfbGluZV9wYXJhbXMsCisgICAgICAgIHN0ZG91dD1zZWxmLm91dHB1dF9maWxlLAorICAgICAgICBzdGRlcnI9c2VsZi5vdXRwdXRfZmlsZSwKKyAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgc2VsZi5waWQgPSBzZWxmLnByb2MucGlkCisgICAgc2VsZi5wcm9jLmNvbW11bmljYXRlKCkKKyAgICBzZWxmLnByb2MucG9sbCgpCisgICAgcnRuX2NvZGUgPSBzZWxmLnByb2MucmV0dXJuY29kZQorICAgIHNlbGYuRGV0ZWN0QW5kSGFuZGxlQ3Jhc2hEdW1wKCkKKyAgICBzZWxmLkxvZ0xuKCdGaW5pc2hlZCBydW5uaW5nIGV4ZWN1dGFibGUuJykKKyAgICByZXR1cm4gcnRuX2NvZGUKKworICBkZWYgS2lsbChzZWxmKToKKyAgICBzZWxmLkxvZ0xuKCdcbioqKktpbGxpbmcgTGF1bmNoZXIqKionKQorICAgIGlmIHNlbGYucGlkOgorICAgICAgdHJ5OgorICAgICAgICBzZWxmLnByb2Mua2lsbCgpCisgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgc2VsZi5Mb2dMbignRXJyb3Iga2lsbGluZyBsYXVuY2hlciB3aXRoIFNJR0tJTEw6JykKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgICMgSWYgZm9yIHNvbWUgcmVhc29uIEtpbGwoKSBmYWlscyB0aGVuIG9zXy5leGl0KDEpIHdpbGwga2lsbCB0aGUKKyAgICAgICAgIyBjaGlsZCBwcm9jZXNzIHdpdGhvdXQgY2xlYW51cC4gT3RoZXJ3aXNlIHRoZSBwcm9jZXNzIHdpbGwgaGFuZy4KKyAgICAgICAgb3MuX2V4aXQoMSkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKKyAgICBlbHNlOgorICAgICAgc2VsZi5Mb2dMbignS2lsbCgpIGNhbGxlZCBiZWZvcmUgUnVuKCksIGNhbm5vdCBraWxsLicpCisKKyAgZGVmIExvZyhzZWxmLCBzKToKKyAgICBzZWxmLm91dHB1dF9maWxlLndyaXRlKHMpCisKKyAgZGVmIExvZ0xuKHNlbGYsIHMpOgorICAgIHNlbGYuTG9nKHMgKyAnXG4nKQorCisgIGRlZiBEZXRlY3RBbmRIYW5kbGVDcmFzaER1bXAoc2VsZik6CisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZXhlY3V0YWJsZV9taW5pX2R1bXBfcGF0aCk6CisgICAgICByZXR1cm4KKyAgICBzZWxmLkxvZ0xuKCdcbioqKiBGb3VuZCBjcmFzaCBkdW1wISAqKipcbk1pbkR1bXBQYXRoOicgKworICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlX21pbmlfZHVtcF9wYXRoKQorICAgIG1pbmlfZHVtcF9wcmludGVyLlByaW50TWluaUR1bXAoc2VsZi5leGVjdXRhYmxlX21pbmlfZHVtcF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlX3BhdGgsIHNlbGYub3V0cHV0X2ZpbGUpCisKKyAgZGVmIEdldERldmljZUlwKHNlbGYpOgorICAgICIiIkdldHMgdGhlIGRldmljZSBJUC4iIiIKKyAgICByZXR1cm4gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGZxZG4oKSkKKworICBkZWYgR2V0RGV2aWNlT3V0cHV0UGF0aChzZWxmKToKKyAgICByZXR1cm4gb3MuZ2V0ZW52KCdUTVAnKQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9tYWluLmNjIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9tYWluLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTY2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvd2luL3dpbjMyL21haW4uY2MKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaW5jbHVkZSAic3RhcmJvYXJkL3NoYXJlZC93aW4zMi9zdGFyYm9hcmRfbWFpbi5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgU3RhcmJvYXJkTWFpbihhcmdjLCBhcmd2KTsKK30KZGlmZiAtLWdpdCBhL3N0YXJib2FyZC93aW4vd2luMzIvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbiBiL3N0YXJib2FyZC93aW4vd2luMzIvcGxhdGZvcm1fY29uZmlndXJhdGlvbi9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQ4MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL0JVSUxELmduCkBAIC0wLDAgKzEsODAgQEAKKyMgQ29weXJpZ2h0IDIwMjEgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL3dpbi92aXN1YWxfc3R1ZGlvX3ZlcnNpb24uZ25pIikKKworY29uZmlnKCJwbGF0Zm9ybV9jb25maWd1cmF0aW9uIikgeworICBjb25maWdzID0gWworICAgICIvL3N0YXJib2FyZC9idWlsZC9jb25maWcvc2FiaSIsCisgICAgIi8vc3RhcmJvYXJkL3dpbi9zaGFyZWQvcGxhdGZvcm1fY29uZmlndXJhdGlvbiIsCisgIF0KKworICBsZGZsYWdzID0gWyAiL1NVQlNZU1RFTTpDT05TT0xFIiBdCisgIGxpYnMgPSBbCisgICAgInNoZWxsMzIubGliIiwKKyAgICAid2lubW0ubGliIiwKKyAgICAiZ2RpMzIubGliIiwKKyAgICAiZGJnaGVscC5saWIiLAorICAgICJ1c2VyMzIubGliIiwKKyAgICAic2hsd2FwaS5saWIiLAorICAgICJtZnBsYXQubGliIiwKKyAgICAibWZ1dWlkLmxpYiIsCisgICAgIndpbmRvd3NhcHAubGliIiwKKyAgXQorCisgIGluY2x1ZGVfZGlycyA9IFsKKyAgICAiJHdka19pbmNsdWRlX3BhdGgiLAorICAgICIkbXN2Y19wYXRoL2F0bG1mYy9pbmNsdWRlIiwKKyAgXQorCisgIGxkZmxhZ3MgKz0gWworICAgICIvRFlOQU1JQ0JBU0UiLAorCisgICAgIyBUT0RPOiBTdWJTeXN0ZW0gaXMgaGFyZGNvZGVkIGluCisgICAgIyB3aW4vc291cmNlc190ZW1wbGF0ZS52Y3hwcm9qLiBUaGlzIHdpbGwgaGF2ZSB0aGUgZXhlIGJlaGF2ZSBpbiB0aGUKKyAgICAjIGV4cGVjdGVkIHdheSBpbiBNU1ZTOiB3aGVuIGl0J3MgcnVuIHdpdGhvdXQgZGVidWcgKEN0cmwrRjUpLCBpdAorICAgICMgd2lsbCBwYXVzZSBhZnRlciBmaW5pc2g7IHdoZW4gZGVidWdnaW5nIChGNSkgaXQgd2lsbCBub3QgcGF1c2UKKyAgICAjIGJlZm9yZSB0aGUgY21kIHdpbmRvdyBkaXNhcHBlYXJzLgorICAgICMgQ3VycmVudGx5IHRoZSB2YWx1ZSBpcyBpZ25vcmVkIGJ5IG1zdnNfbWFrZWZpbGUucHkgd2hpY2ggZ2VuZXJhdGVzCisgICAgIyB0aGUgTVNWUyBwcm9qZWN0IGZpbGVzIChpdCdzIGluICJkYXRhIiBpbiBHZW5lcmF0ZU91dHB1dCgpKS4gRml4CisgICAgIyBpdCBpZiB3ZSBldmVyIG5lZWQgdG8gY2hhbmdlIFN1YlN5c3RlbS4KKyAgICAiL1NVQlNZU1RFTTpDT05TT0xFIiwKKyAgICAiL01BQ0hJTkU6eDY0IiwKKworICAgICMgRG8gbm90IGdlbmVyYXRlIGEgV2luTUQgZmlsZS4KKyAgICAiL1dJTk1EOk5PIiwKKworICAgICMgRG9uJ3Qgc2VuZCBlcnJvciByZXBvcnRzIHRvIE1TLgorICAgICIvZXJyb3JSZXBvcnQ6bm9uZSIsCisgIF0KKworICBjZmxhZ3MgPSBbCisgICAgIyBGb2xsb3dpbmcgVjggdXBzdHJlYW0gdG8gZGlzYWJsZSBuYXJyb3dpbmcgY29udmVyc2lvbi4KKyAgICAiL3dkNDgzOCIsCisgIF0KKworICBpZiAoY3VycmVudF90b29sY2hhaW4gPT0gZGVmYXVsdF90b29sY2hhaW4pIHsKKyAgICBkZWZpbmVzID0gWworICAgICAgIl9XSU4zMiIsCisgICAgICAiV0lOMzIiLAorICAgICAgIldJTkRPV1MiLAorCisgICAgICAjIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyB0byBnZXQgcHJvdG90eXBlcyBsaWtlIGZmc2wuCisgICAgICAiX0dOVV9TT1VSQ0U9MSIsCisgICAgXQorICB9IGVsc2UgeworICAgICMgSW5jcmVhc2UgY29tcGlsZXIgaGVhcCBsaW1pdC4KKyAgICBjZmxhZ3MgKz0gWyAiL1ptMTAiIF0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvc3RhcmJvYXJkL3dpbi93aW4zMi9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIGIvc3RhcmJvYXJkL3dpbi93aW4zMi9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDMwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvd2luL3dpbjMyL3BsYXRmb3JtX2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5nbmkKQEAgLTAsMCArMSwxNSBAQAorIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCgiLy9zdGFyYm9hcmQvd2luL3NoYXJlZC9wbGF0Zm9ybV9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uZ25pIikKZGlmZiAtLWdpdCBhL3N0YXJib2FyZC93aW4vd2luMzIvdGVzdF9maWx0ZXJzLnB5IGIvc3RhcmJvYXJkL3dpbi93aW4zMi90ZXN0X2ZpbHRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3MzJmMwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXJib2FyZC93aW4vd2luMzIvdGVzdF9maWx0ZXJzLnB5CkBAIC0wLDAgKzEsMTE1IEBACisjIENvcHlyaWdodCAyMDIyIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyIiIlN0YXJib2FyZCB3aW4td2luMzIgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKK2Zyb20gc3RhcmJvYXJkLnNoYXJlZC53aW4zMiBpbXBvcnQgdGVzdF9maWx0ZXJzIGFzIHNoYXJlZF90ZXN0X2ZpbHRlcnMKK2Zyb20gc3RhcmJvYXJkLnRvb2xzLnRlc3RpbmcgaW1wb3J0IHRlc3RfZmlsdGVyCisKKworIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZworX0ZJTFRFUkVEX1RFU1RTID0geworICAgICducGxiJzogWworICAgICAgICAjIFRoaXMgc2luZ2xlIHRlc3QgdGFrZXMgPjE1IG1pbnV0ZXMuCisgICAgICAgICdTYlBsYXllclRlc3QuTXVsdGlQbGF5ZXInLAorICAgICAgICAjIFRoaXMgdGVzdCBmYWlscyBvbiB3aW4td2luMzIgZGV2ZWwgYnVpbGRzLCBiZWNhdXNlIHRoZSBjb21waWxlcgorICAgICAgICAjIHBlcmZvcm1zIGFuIG9wdGltaXphdGlvbiB0aGF0IGRlZmVhdHMgdGhlIFNCX0NfTk9JTkxJTkUgJ25vaW5saW5lJworICAgICAgICAjIGF0dHJpYnV0ZS4KKyAgICAgICAgJ1NiU3lzdGVtR2V0U3RhY2tUZXN0LlN1bm55RGF5U3RhY2tEaXJlY3Rpb24nLAorICAgIF0sCisgICAgJ3BsYXllcl9maWx0ZXJfdGVzdHMnOiBbCisgICAgICAgICMgVGhlc2UgdGVzdHMgZmFpbCBvbiBvdXIgVk1zIGZvciB3aW4td2luMzIgYnVpbGRzIGR1ZSB0byBtaXNzaW5nCisgICAgICAgICMgb3Igbm9uIGZ1bmN0aW9uaW5nIHN5c3RlbSB2aWRlbyBkZWNvZGVycy4KKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuRGVjb2RlRnVsbEdPUC8wJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuRGVjb2RlRnVsbEdPUC8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuRW5kT2ZTdHJlYW1XaXRob3V0QW55SW5wdXQvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkVuZE9mU3RyZWFtV2l0aG91dEFueUlucHV0LzInLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5HZXRDdXJyZW50RGVjb2RlVGFyZ2V0QmVmb3JlV3JpdGVJbnB1dEJ1ZmZlci8wJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuR2V0Q3VycmVudERlY29kZVRhcmdldEJlZm9yZVdyaXRlSW5wdXRCdWZmZXIvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkhvbGRGcmFtZXNVbnRpbEZ1bGwvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LkhvbGRGcmFtZXNVbnRpbEZ1bGwvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0Lk1heE51bWJlck9mQ2FjaGVkRnJhbWVzLzAnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NYXhOdW1iZXJPZkNhY2hlZEZyYW1lcy8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVJbnB1dHMvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0Lk11bHRpcGxlSW5wdXRzLzInLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZUludmFsaWRJbnB1dC8wJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVJbnZhbGlkSW5wdXQvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0Lk11bHRpcGxlUmVzZXRzLzAnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZVJlc2V0cy8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuTXVsdGlwbGVWYWxpZElucHV0c0FmdGVySW52YWxpZEtleUZyYW1lLzAnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5NdWx0aXBsZVZhbGlkSW5wdXRzQWZ0ZXJJbnZhbGlkS2V5RnJhbWUvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0Lk91dHB1dE1vZGVTdXBwb3J0ZWQvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0Lk91dHB1dE1vZGVTdXBwb3J0ZWQvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlByZXJvbGwvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlByZXJvbGwvMicsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlByZXJvbGxGcmFtZUNvdW50LzAnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5QcmVyb2xsRnJhbWVDb3VudC8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuUHJlcm9sbFRpbWVvdXQvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlByZXJvbGxUaW1lb3V0LzInLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5SZXNldEFmdGVySW5wdXQvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlJlc2V0QWZ0ZXJJbnB1dC8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuUmVzZXRCZWZvcmVJbnB1dC8wJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuUmVzZXRCZWZvcmVJbnB1dC8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuU2luZ2xlSW5wdXQvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlNpbmdsZUlucHV0LzInLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5TaW5nbGVJbnZhbGlkS2V5RnJhbWUvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlNpbmdsZUludmFsaWRLZXlGcmFtZS8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuVGhyZWVNb3JlRGVjb2RlcnMvMCcsCisgICAgICAgICdWaWRlb0RlY29kZXJUZXN0cy9WaWRlb0RlY29kZXJUZXN0LlRocmVlTW9yZURlY29kZXJzLzEnLAorICAgICAgICAnVmlkZW9EZWNvZGVyVGVzdHMvVmlkZW9EZWNvZGVyVGVzdC5UaHJlZU1vcmVEZWNvZGVycy8yJywKKyAgICAgICAgJ1ZpZGVvRGVjb2RlclRlc3RzL1ZpZGVvRGVjb2RlclRlc3QuVGhyZWVNb3JlRGVjb2RlcnMvMycsCisKKyAgICAgICAgIyBQbGF5ZXJDb21wb25lbnRzVGVzdHMgZmFpbCBvbiBvdXIgVk1zLiBQcmVyb2xsIGNhbGxiYWNrIGlzIGFsd2F5cyBub3QgY2FsbGVkIGluCisgICAgICAgICMgNSBzZWNvbmRzLCB3aGljaCBjYXVzZXMgdGltZW91dCBlcnJvci4KKyAgICAgICAgJ1BsYXllckNvbXBvbmVudHNUZXN0cy8qJywKKyAgICBdLAorfQorCisjIHB5bGludDogZW5hYmxlPWxpbmUtdG9vLWxvbmcKKworCitkZWYgQ3JlYXRlVGVzdEZpbHRlcnMoKToKKyAgcmV0dXJuIFdpbldpbjMyVGVzdEZpbHRlcnMoKQorCisKK2NsYXNzIFdpbldpbjMyVGVzdEZpbHRlcnMoc2hhcmVkX3Rlc3RfZmlsdGVycy5UZXN0RmlsdGVycyk6CisgICIiIlN0YXJib2FyZCB3aW4td2luMzIgUGxhdGZvcm0gVGVzdCBGaWx0ZXJzLiIiIgorCisgIGRlZiBHZXRUZXN0RmlsdGVycyhzZWxmKToKKyAgICAiIiJHZXRzIGFsbCB0ZXN0cyB0byBiZSBleGNsdWRlZCBmcm9tIGEgdW5pdCB0ZXN0IHJ1bi4KKworICAgIFJldHVybnM6CisgICAgICBBIGxpc3Qgb2YgaW5pdGlhbGl6ZWQgVGVzdEZpbHRlciBvYmplY3RzLgorICAgICIiIgorICAgIGlmIG9zLmVudmlyb24uZ2V0KCdDT0JBTFRfV0lOX0JVSUxEQk9UX0RJU0FCTEVfVEVTVFMnLCAnMCcpID09ICcxJzoKKyAgICAgIGxvZ2dpbmcuZXJyb3IoJ0NPQkFMVF9XSU5fQlVJTERCT1RfRElTQUJMRV9URVNUUz0xLCBUZXN0cyBhcmUgZGlzYWJsZWQuJykKKyAgICAgIHJldHVybiBbdGVzdF9maWx0ZXIuRElTQUJMRV9URVNUSU5HXQorICAgIGVsc2U6CisgICAgICBmaWx0ZXJzID0gc3VwZXIoV2luV2luMzJUZXN0RmlsdGVycywgc2VsZikuR2V0VGVzdEZpbHRlcnMoKQorICAgICAgZm9yIHRhcmdldCwgdGVzdHMgaW4gX0ZJTFRFUkVEX1RFU1RTLml0ZW1zKCk6CisgICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKKyAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdFWFBFUklNRU5UQUxfQ0knLCAnMCcpID09ICcxJzoKKyAgICAgICAgIyBEaXNhYmxlIHRoZXNlIHRlc3RzIGluIHRoZSBleHBlcmltZW50YWwgQ0kgZHVlIHRvIHBlbmRpbmcgZmFpbHVyZXMuCisgICAgICAgIGV4cGVyaW1lbnRhbF9maWx0ZXJlZF90ZXN0cyA9IHsKKyAgICAgICAgICAgICdkcmFpbl9maWxlX3Rlc3QnOiBbCisgICAgICAgICAgICAgICAgJ0RyYWluRmlsZVRlc3QuU3VubnlEYXknLAorICAgICAgICAgICAgICAgICdEcmFpbkZpbGVUZXN0LlN1bm55RGF5UHJlcGFyZURpcmVjdG9yeScsCisgICAgICAgICAgICAgICAgJ0RyYWluRmlsZVRlc3QuUmFpbnlEYXlEcmFpbkZpbGVBbHJlYWR5RXhpc3RzJworICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgICAgIGZvciB0YXJnZXQsIHRlc3RzIGluIGV4cGVyaW1lbnRhbF9maWx0ZXJlZF90ZXN0cy5pdGVtcygpOgorICAgICAgICAgIGZpbHRlcnMuZXh0ZW5kKHRlc3RfZmlsdGVyLlRlc3RGaWx0ZXIodGFyZ2V0LCB0ZXN0KSBmb3IgdGVzdCBpbiB0ZXN0cykKKyAgICAgIHJldHVybiBmaWx0ZXJzCmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luL3dpbjMyL3Rvb2xjaGFpbi9CVUlMRC5nbiBiL3N0YXJib2FyZC93aW4vd2luMzIvdG9vbGNoYWluL0JVSUxELmduCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODJkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9zdGFyYm9hcmQvd2luL3dpbjMyL3Rvb2xjaGFpbi9CVUlMRC5nbgpAQCAtMCwwICsxLDQ3IEBACisjIENvcHlyaWdodCAyMDIxIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy93aW4vdmlzdWFsX3N0dWRpb192ZXJzaW9uLmduaSIpCitpbXBvcnQoIi8vYnVpbGQvdG9vbGNoYWluL3dpbi9tc3ZjX3Rvb2xjaGFpbi5nbmkiKQorCitfYmFzZV9wYXRoID0gIiRtc3ZjX3BhdGgvYmluL0hvc3RYNjQveDY0IgorX2xpYnBhdGhzID0gIi9MSUJQQVRIOlwiJHdka19saWJfcGF0aC91Y3J0L3g2NFwiIC9MSUJQQVRIOlwiJHdka19saWJfcGF0aC91bS94NjRcIiAvTElCUEFUSDpcIiRtc3ZjX3BhdGgvbGliL3g2NFwiIgorCittc3ZjX3Rvb2xjaGFpbigiaG9zdCIpIHsKKyAgY2wgPSAiJF9iYXNlX3BhdGgvY2wuZXhlIgorICBsaWIgPSAiJF9iYXNlX3BhdGgvbGliLmV4ZSIKKyAgbGluayA9ICIkX2Jhc2VfcGF0aC9saW5rLmV4ZSIKKyAgYXNtID0gIiRfYmFzZV9wYXRoL21sNjQuZXhlIgorICBzeXNfbGliX2ZsYWdzID0gX2xpYnBhdGhzCisKKyAgdG9vbGNoYWluX2FyZ3MgPSB7CisgICAgaXNfY2xhbmcgPSBmYWxzZQorICAgIGN1cnJlbnRfb3MgPSAid2luIgorICAgIGN1cnJlbnRfY3B1ID0gIng2NCIKKyAgfQorfQorCittc3ZjX3Rvb2xjaGFpbigidGFyZ2V0IikgeworICBjbCA9ICIkX2Jhc2VfcGF0aC9jbC5leGUiCisgIGxpYiA9ICIkX2Jhc2VfcGF0aC9saWIuZXhlIgorICBsaW5rID0gIiRfYmFzZV9wYXRoL2xpbmsuZXhlIgorICBhc20gPSAiJF9iYXNlX3BhdGgvbWw2NC5leGUiCisgIHN5c19saWJfZmxhZ3MgPSBfbGlicGF0aHMKKworICB0b29sY2hhaW5fYXJncyA9IHsKKyAgICBpc19jbGFuZyA9IGZhbHNlCisgICAgY3VycmVudF9vcyA9ICJ3aW4iCisgICAgY3VycmVudF9jcHUgPSAieDY0IgorICB9Cit9CmRpZmYgLS1naXQgYS9zdGFyYm9hcmQvd2luZG93LmggYi9zdGFyYm9hcmQvd2luZG93LmgKaW5kZXggOWQ1YTZkYy4uYmJkN2JjMiAxMDA2NDQKLS0tIGEvc3RhcmJvYXJkL3dpbmRvdy5oCisrKyBiL3N0YXJib2FyZC93aW5kb3cuaApAQCAtMTM3LDggKzEzNyw2IEBACiAvLyB8d2luZG93fDogVGhlIFNiV2luZG93IHRvIHJldHJpZXZlIHRoZSBwbGF0Zm9ybSBoYW5kbGUgZm9yLgogU0JfRVhQT1JUIHZvaWQqIFNiV2luZG93R2V0UGxhdGZvcm1IYW5kbGUoU2JXaW5kb3cgd2luZG93KTsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyIHx8IFNCX0hBUyhPTl9TQ1JFRU5fS0VZQk9BUkQpCi0KIC8vIFN5c3RlbS10cmlnZ2VyZWQgT25TY3JlZW5LZXlib2FyZCBldmVudHMgaGF2ZSB0aWNrZXQgdmFsdWUKIC8vIGtTYkV2ZW50T25TY3JlZW5LZXlib2FyZEludmFsaWRUaWNrZXQuCiAjZGVmaW5lIGtTYkV2ZW50T25TY3JlZW5LZXlib2FyZEludmFsaWRUaWNrZXQgKC0xKQpAQCAtMTUyLDEwICsxNTAsOCBAQAogICBmbG9hdCBoZWlnaHQ7CiB9IFNiV2luZG93UmVjdDsKIAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAvLyBSZXR1cm4gd2hldGhlciB0aGUgY3VycmVudCBwbGF0Zm9ybSBzdXBwb3J0cyBhbiBvbiBzY3JlZW4ga2V5Ym9hcmQKIFNCX0VYUE9SVCBib29sIFNiV2luZG93T25TY3JlZW5LZXlib2FyZElzU3VwcG9ydGVkKCk7Ci0jZW5kaWYKIAogLy8gRGV0ZXJtaW5lIGlmIHRoZSBvbiBzY3JlZW4ga2V5Ym9hcmQgaXMgc2hvd24uCiBTQl9FWFBPUlQgYm9vbCBTYldpbmRvd0lzT25TY3JlZW5LZXlib2FyZFNob3duKFNiV2luZG93IHdpbmRvdyk7CkBAIC0yMjUsOSArMjIxLDYgQEAKIC8vIGJlIHVuZGVmaW5lZC4KIFNCX0VYUE9SVCBib29sIFNiV2luZG93T25TY3JlZW5LZXlib2FyZFN1Z2dlc3Rpb25zU3VwcG9ydGVkKFNiV2luZG93IHdpbmRvdyk7CiAKLSNlbmRpZiAgLy8gU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwKLSAgICAgICAgLy8gU0JfSEFTKE9OX1NDUkVFTl9LRVlCT0FSRCkKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvLyBleHRlcm4gIkMiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5neXAgYi90ZXN0aW5nL2FuZHJvaWQvbmF0aXZlX3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmZmODBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PSJhbmRyb2lkIiBvciAoT1M9PSJsYl9zaGVsbCIgYW5kIHRhcmdldF9hcmNoPT0iYW5kcm9pZCIpJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbmF0aXZlX3Rlc3RfYXBrJywKLSAgICAgICAgICAnbWVzc2FnZSc6ICdidWlsZGluZyBuYXRpdmUgdGVzdCBhcGsnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnbmF0aXZlX3Rlc3RfbmF0aXZlX2NvZGUnLAotICAgICAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZV9qYXZhJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnbmF0aXZlX3Rlc3RfYXBrJywKLSAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9hbmRyb2lkL25hdGl2ZV90ZXN0X2Fway54bWwnLAotICAgICAgICAgICAgICAgICc8IUAoZmluZCA8KERFUFRIKS90ZXN0aW5nL2FuZHJvaWQgLW5hbWUgIiouamF2YSIpJywKLSAgICAgICAgICAgICAgICAnPkAoaW5wdXRfamFyc19wYXRocyknLAotICAgICAgICAgICAgICAgICduYXRpdmVfdGVzdF9sYXVuY2hlci5jYycKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgIyBBd2t3YXJkbHksIHdlIGJ1aWxkIGEgRGVidWcgQVBLIGV2ZW4gd2hlbiBneXAgaXMgaW4KLSAgICAgICAgICAgICAgICAjIFJlbGVhc2UgbW9kZS4gIEkgZG9uJ3QgdGhpbmsgaXQgbWF0dGVycyAoZS5nLiB3ZSdyZQotICAgICAgICAgICAgICAgICMgcHJvYmFibHkgaGFwcHkgdG8gbm90IGNvZGVzaWduKSBidXQgbmFtaW5nIHNob3VsZCBiZQotICAgICAgICAgICAgICAgICMgZml4ZWQuICBUaGUgLWRlYnVnIG5hbWUgaXMgYW4gYXNwZWN0IG9mIHRoZSBhbmRyb2lkCi0gICAgICAgICAgICAgICAgIyBTREsgYW50ZmlsZXMgKGUuZy4gJHtzZGsuZGlyfS90b29scy9hbnQvYnVpbGQueG1sKQotICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9yZXBsYWNlbWVfYXBrL3JlcGxhY2VtZS1kZWJ1Zy5hcGsnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgICAgICdhbnQnLAotICAgICAgICAgICAgICAgICMgVE9ETzogQWxsIG9mIHRoZXNlIHBhdGhzIGFyZSBhYnNvbHV0ZSBwYXRocyByaWdodCBub3csIHdoaWxlCi0gICAgICAgICAgICAgICAgIyB3ZSByZWFsbHkgc2hvdWxkIGJlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIGZvciBhbnl0aGluZyB0aGF0IGlzCi0gICAgICAgICAgICAgICAgIyBjaGVja2VkIGluIHRvIHRoZSBDaHJvbWl1bSB0cmVlIChhbW9uZyB3aGljaCB0aGUgU0RLKS4KLSAgICAgICAgICAgICAgICAnLURQUk9EVUNUX0RJUj08KGFudF9idWlsZF9vdXQpJywKLSAgICAgICAgICAgICAgICAnLURBTkRST0lEX1NESz08KGFuZHJvaWRfc2RrKScsCi0gICAgICAgICAgICAgICAgJy1EQU5EUk9JRF9TREtfUk9PVD08KGFuZHJvaWRfc2RrX3Jvb3QpJywKLSAgICAgICAgICAgICAgICAnLURBTkRST0lEX1NES19UT09MUz08KGFuZHJvaWRfc2RrX3Rvb2xzKScsCi0gICAgICAgICAgICAgICAgJy1EQU5EUk9JRF9TREtfVkVSU0lPTj08KGFuZHJvaWRfc2RrX3ZlcnNpb24pJywKLSAgICAgICAgICAgICAgICAnLURBTkRST0lEX0dEQlNFUlZFUj08KGFuZHJvaWRfZ2Ric2VydmVyKScsCi0gICAgICAgICAgICAgICAgJy1EQ0hST01JVU1fU1JDPTwoYW50X2J1aWxkX291dCkvLi4vLi4nLAotICAgICAgICAgICAgICAgICctRElOUFVUX0pBUlNfUEFUSFM9PihpbnB1dF9qYXJzX3BhdGhzKScsCi0gICAgICAgICAgICAgICAgJy1idWlsZGZpbGUnLAotICAgICAgICAgICAgICAgICc8KERFUFRIKS90ZXN0aW5nL2FuZHJvaWQvbmF0aXZlX3Rlc3RfYXBrLnhtbCcsCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ25hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKLSAgICAgICAgICAnbWVzc2FnZSc6ICdidWlsZGluZyBuYXRpdmUgcGllY2VzIG9mIG5hdGl2ZSB0ZXN0IHBhY2thZ2UnLAotICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICduYXRpdmVfdGVzdF9sYXVuY2hlci5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsZGZsYWdzISc6IFsKLSAgICAgICAgICAgICAgIyBKTklfT25Mb2FkIGlzIGltcGxlbWVudGVkIGluIGEgLmEgYW5kIHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgIyByZS1leHBvcnQgaW4gdGhlIC5zby4KLSAgICAgICAgICAgICAgJy1XbCwtLWV4Y2x1ZGUtbGlicz1BTEwnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi8uLi9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKLSAgICAgICAgICAgICcuLi9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAgICAgJ25hdGl2ZV90ZXN0X2puaV9oZWFkZXJzJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ25hdGl2ZV90ZXN0X2puaV9oZWFkZXJzJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdqYXZhL3NyYy9vcmcvY2hyb21pdW0vbmF0aXZlX3Rlc3QvQ2hyb21lTmF0aXZlVGVzdEFjdGl2aXR5LmphdmEnCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2puaV9nZW5fZGlyJzogJ3Rlc3RpbmcnLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vLi4vYnVpbGQvam5pX2dlbmVyYXRvci5neXBpJyBdLAotICAgICAgICAgICMgU28gZ2VuZXJhdGVkIGpuaSBoZWFkZXJzIGNhbiBiZSBmb3VuZCBieSB0YXJnZXRzIHRoYXQKLSAgICAgICAgICAjIGRlcGVuZCBvbiB0aGlzLgotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0KLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZ21vY2suZ3lwIGIvdGVzdGluZy9nbW9jay5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYTE4OTMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9nbW9jay5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbW9jaycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgIyBTb3VyY2VzIGJhc2VkIG9uIGZpbGVzIGluIHIxNzMgb2YgZ21vY2suCi0gICAgICAgICdnbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLWFjdGlvbnMuaCcsCi0gICAgICAgICdnbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLWNhcmRpbmFsaXRpZXMuaCcsCi0gICAgICAgICdnbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLWdlbmVyYXRlZC1hY3Rpb25zLmgnLAotICAgICAgICAnZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay1nZW5lcmF0ZWQtZnVuY3Rpb24tbW9ja2Vycy5oJywKLSAgICAgICAgJ2dtb2NrL2luY2x1ZGUvZ21vY2svZ21vY2stZ2VuZXJhdGVkLW1hdGNoZXJzLmgnLAotICAgICAgICAnZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay1nZW5lcmF0ZWQtbmljZS1zdHJpY3QuaCcsCi0gICAgICAgICdnbW9jay9pbmNsdWRlL2dtb2NrL2dtb2NrLW1hdGNoZXJzLmgnLAotICAgICAgICAnZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay1zcGVjLWJ1aWxkZXJzLmgnLAotICAgICAgICAnZ21vY2svaW5jbHVkZS9nbW9jay9nbW9jay5oJywKLSAgICAgICAgJ2dtb2NrL2luY2x1ZGUvZ21vY2svaW50ZXJuYWwvZ21vY2stZ2VuZXJhdGVkLWludGVybmFsLXV0aWxzLmgnLAotICAgICAgICAnZ21vY2svaW5jbHVkZS9nbW9jay9pbnRlcm5hbC9nbW9jay1pbnRlcm5hbC11dGlscy5oJywKLSAgICAgICAgJ2dtb2NrL2luY2x1ZGUvZ21vY2svaW50ZXJuYWwvZ21vY2stcG9ydC5oJywKLSAgICAgICAgJ2dtb2NrL3NyYy9nbW9jay1hbGwuY2MnLAotICAgICAgICAnZ21vY2svc3JjL2dtb2NrLWNhcmRpbmFsaXRpZXMuY2MnLAotICAgICAgICAnZ21vY2svc3JjL2dtb2NrLWludGVybmFsLXV0aWxzLmNjJywKLSAgICAgICAgJ2dtb2NrL3NyYy9nbW9jay1tYXRjaGVycy5jYycsCi0gICAgICAgICdnbW9jay9zcmMvZ21vY2stc3BlYy1idWlsZGVycy5jYycsCi0gICAgICAgICdnbW9jay9zcmMvZ21vY2suY2MnLAotICAgICAgICAnZ21vY2tfbXV0YW50LmgnLCAgIyBnTW9jayBoZWxwZXJzCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAnZ21vY2svc3JjL2dtb2NrLWFsbC5jYycsICAjIE5vdCBuZWVkZWQgYnkgb3VyIGJ1aWxkLgotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdnbW9jaycsCi0gICAgICAgICdnbW9jay9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnZ21vY2svaW5jbHVkZScsICAjIFNvIHRoYXQgZ21vY2sgaGVhZGVycyBjYW4gZmluZCB0aGVtc2VsdmVzLgotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAnZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ21vY2tfbWFpbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ21vY2snLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ21vY2svc3JjL2dtb2NrX21haW4uY2MnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9ndGVzdC5neXAgYi90ZXN0aW5nL2d0ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5MTA4My4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2d0ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtZGVhdGgtdGVzdC5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtbWVzc2FnZS5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtcGFyYW0tdGVzdC5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtcHJpbnRlcnMuaCcsCi0gICAgICAgICdndGVzdC9pbmNsdWRlL2d0ZXN0L2d0ZXN0LXNwaS5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtdGVzdC1wYXJ0LmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC10eXBlZC10ZXN0LmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3RfcHJlZF9pbXBsLmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1kZWF0aC10ZXN0LWludGVybmFsLmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1maWxlcGF0aC5oJywKLSAgICAgICAgJ2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtaW50ZXJuYWwuaCcsCi0gICAgICAgICdndGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LWxpbmtlZF9wdHIuaCcsCi0gICAgICAgICdndGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wYXJhbS11dGlsLmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1wb3J0LmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1zdHJpbmcuaCcsCi0gICAgICAgICdndGVzdC9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXR1cGxlLmgnLAotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBlLXV0aWwuaCcsCi0gICAgICAgICdndGVzdC9zcmMvZ3Rlc3QtZGVhdGgtdGVzdC5jYycsCi0gICAgICAgICdndGVzdC9zcmMvZ3Rlc3QtZmlsZXBhdGguY2MnLAotICAgICAgICAnZ3Rlc3Qvc3JjL2d0ZXN0LWludGVybmFsLWlubC5oJywKLSAgICAgICAgJ2d0ZXN0L3NyYy9ndGVzdC1wb3J0LmNjJywKLSAgICAgICAgJ2d0ZXN0L3NyYy9ndGVzdC1wcmludGVycy5jYycsCi0gICAgICAgICdndGVzdC9zcmMvZ3Rlc3QtdGVzdC1wYXJ0LmNjJywKLSAgICAgICAgJ2d0ZXN0L3NyYy9ndGVzdC10eXBlZC10ZXN0LmNjJywKLSAgICAgICAgJ2d0ZXN0L3NyYy9ndGVzdC5jYycsCi0gICAgICAgICdtdWx0aXByb2Nlc3NfZnVuY19saXN0LmNjJywKLSAgICAgICAgJ211bHRpcHJvY2Vzc19mdW5jX2xpc3QuaCcsCi0gICAgICAgICdwbGF0Zm9ybV90ZXN0LmgnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdndGVzdCcsCi0gICAgICAgICdndGVzdC9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ3Rlc3RfcHJvZCcsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1mcnR0aScsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyEnOiBbCi0gICAgICAgICctZm5vLXJ0dGknLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgICAgICctZnJ0dGknLAotICAgICAgICBdLAotICAgICAgICAnY2ZsYWdzX2NjISc6IFsKLSAgICAgICAgICAnLWZuby1ydHRpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUyA9PSAibWFjIiBvciBPUyA9PSAiaW9zIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdndGVzdF9tYWMuaCcsCi0gICAgICAgICAgICAnZ3Rlc3RfbWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybV90ZXN0X21hYy5tbScKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yaycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TID09ICJpb3MiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnIDogWwotICAgICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvaW9zc2ltL2lvc3NpbS5neXA6aW9zc2ltJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAjIFR1cm4gYWxsIHRlc3RzIGludG8gYnVuZGxlcyBvbiBpT1MgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkKLSAgICAgICAgICAgICAgIyB0eXBlIG9mIGV4ZWN1dGFibGUgc3VwcG9ydGVkIGZvciBpT1MuCi0gICAgICAgICAgICAgIFsnX3R5cGU9PSJleGVjdXRhYmxlIicsIHsKLSAgICAgICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAgICAgIyBVc2UgYSB2YXJpYWJsZSBzbyB0aGUgcGF0aCBnZXRzIGZpeGVkIHVwIHNvIGl0IGlzIGFsd2F5cwotICAgICAgICAgICAgICAgICAgIyBjb3JyZWN0IHdoZW4gSU5GT1BMSVNUX0ZJTEUgZmluYWxseSBnZXRzIHNldC4KLSAgICAgICAgICAgICAgICAgICdpb3NfdW5pdHRlc3RfaW5mb19wbGlzdF9wYXRoJzoKLSAgICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3RfaW9zL3VuaXR0ZXN0LUluZm8ucGxpc3QnLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgJ21hY19idW5kbGUnOiAxLAotICAgICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAgICdCVU5ETEVfSURfVEVTVF9OQU1FJzoKLSAgICAgICAgICAgICAgICAgICAgJz4hKGVjaG8gIj4oX3RhcmdldF9uYW1lKSIgfCBzZWQgLWUgInMvXy8vZyIpJywKLSAgICAgICAgICAgICAgICAgICdJTkZPUExJU1RfRklMRSc6ICc+KGlvc191bml0dGVzdF9pbmZvX3BsaXN0X3BhdGgpJywKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICdtYWNfYnVuZGxlX3Jlc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8KGlvc191bml0dGVzdF9pbmZvX3BsaXN0X3BhdGgpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdtYWNfYnVuZGxlX3Jlc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgICAnPChpb3NfdW5pdHRlc3RfaW5mb19wbGlzdF9wYXRoKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ29zX3Bvc2l4ID09IDEgYW5kIGNvYmFsdCAhPSAxJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgIyBndGVzdCBpc24ndCBhYmxlIHRvIGZpZ3VyZSBvdXQgd2hlbiBSVFRJIGlzIGRpc2FibGVkIGZvciBnY2MKLSAgICAgICAgICAgICMgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjMuMiwgYW5kIGFzc3VtZXMgaXQncyBlbmFibGVkLiAgT3VyIE1hYwotICAgICAgICAgICAgIyBhbmQgTGludXggYnVpbGRzIGRpc2FibGUgUlRUSSwgYW5kIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUKLSAgICAgICAgICAgICMgY29tcGlsZXIgd2lsbCBiZSA0LjMuMi4gb3IgbmV3ZXIuICBUaGUgTWFjLCBmb3IgZXhhbXBsZSwgdXNlcwotICAgICAgICAgICAgIyA0LjIuMSBhcyB0aGF0IGlzIHRoZSBsYXRlc3QgYXZhaWxhYmxlIG9uIHRoYXQgcGxhdGZvcm0uICBndGVzdAotICAgICAgICAgICAgIyBtdXN0IGJlIGluc3RydWN0ZWQgdGhhdCBSVFRJIGlzIGRpc2FibGVkIGhlcmUsIGFuZCBmb3IgYW55Ci0gICAgICAgICAgICAjIGRpcmVjdCBkZXBlbmRlbnRzIHRoYXQgbWlnaHQgaW5jbHVkZSBndGVzdCBoZWFkZXJzLgotICAgICAgICAgICAgJ0dURVNUX0hBU19SVFRJPTAnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0dURVNUX0hBU19SVFRJPTAnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09ImFuZHJvaWQiIGFuZCBhbmRyb2lkX2FwcF9hYmk9PSJ4ODYiJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0dURVNUX0hBU19DTE9ORT0wJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdHVEVTVF9IQVNfQ0xPTkU9MCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgIyBXZSB3YW50IGd0ZXN0IGZlYXR1cmVzIHRoYXQgdXNlIHRyMTo6dHVwbGUsIGJ1dCB3ZSBjdXJyZW50bHkKLSAgICAgICAgICAjIGRvbid0IHN1cHBvcnQgdGhlIHZhcmlhZGljIHRlbXBsYXRlcyB1c2VkIGJ5IGxpYnN0ZGMrKydzCi0gICAgICAgICAgIyBpbXBsZW1lbnRhdGlvbi4gZ3Rlc3Qgc3VwcG9ydHMgdGhpcyBzY2VuYXJpbyBieSBwcm92aWRpbmcgaXRzCi0gICAgICAgICAgIyBvd24gaW1wbGVtZW50YXRpb24gYnV0IHdlIG11c3Qgb3B0IGluIHRvIGl0LgotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0dURVNUX1VTRV9PV05fVFIxX1RVUExFPTEnLAotICAgICAgICAgICAgIyBHVEVTVF9VU0VfT1dOX1RSMV9UVVBMRSBvbmx5IHdvcmtzIGlmIEdURVNUX0hBU19UUjFfVFVQTEUgaXMgc2V0LgotICAgICAgICAgICAgIyBndGVzdCByNjI1IG1hZGUgaXQgc28gdGhhdCBHVEVTVF9IQVNfVFIxX1RVUExFIGlzIHNldCB0byAwCi0gICAgICAgICAgICAjIGF1dG9tYXRpY2FsbHkgb24gYW5kcm9pZCwgc28gaXQgaGFzIHRvIGJlIHNldCBleHBsaWNpdGx5IGhlcmUuCi0gICAgICAgICAgICAnR1RFU1RfSEFTX1RSMV9UVVBMRT0xJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdHVEVTVF9VU0VfT1dOX1RSMV9UVVBMRT0xJywKLSAgICAgICAgICAgICAgJ0dURVNUX0hBU19UUjFfVFVQTEU9MScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIiBhbmQgTVNWU19WRVJTSU9OPT0iMjAxMiInLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnX1ZBUklBRElDX01BWD0xMCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnX1ZBUklBRElDX01BWD0xMCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0ibGJfc2hlbGwiIG9yIE9TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2d0ZXN0X2RlZmluZXMnIDogWwotICAgICAgICAgICAgICAnR1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MScsCi0gICAgICAgICAgICAgICdHVEVTVF9IQVNfUE9TSVhfUkU9MCcsCi0gICAgICAgICAgICAgICdfUE9TSVhfUEFUSF9NQVg9MjU1JywKLSAgICAgICAgICAgICAgJ19TSUxFTkNFX1RSMV9OQU1FU1BBQ0VfREVQUkVDQVRJT05fV0FSTklORycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnIDogWwotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAgICAgJ2d0ZXN0X2RlZmluZXMhJyA6IFsKLSAgICAgICAgICAgICAgICAgICdfUE9TSVhfUEFUSF9NQVg9MjU1JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydPUz09InN0YXJib2FyZCInLCB7Ci0gICAgICAgICAgICAgICAgJ2d0ZXN0X2RlZmluZXMhJyA6IFsKLSAgICAgICAgICAgICAgICAgICdfUE9TSVhfUEFUSF9NQVg9MjU1JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywgewotICAgICAgICAgICAgICAgICdndGVzdF9kZWZpbmVzIScgOiBbCi0gICAgICAgICAgICAgICAgICAnR1RFU1RfVVNFX09XTl9UUjFfVFVQTEU9MScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnPEAoZ3Rlc3RfZGVmaW5lcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJzxAKGd0ZXN0X2RlZmluZXMpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdVTklUX1RFU1QnLAotICAgICAgICBdLAotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICdndGVzdC9pbmNsdWRlJywgICMgU28gdGhhdCBndGVzdCBoZWFkZXJzIGNhbiBmaW5kIHRoZW1zZWx2ZXMuCi0gICAgICAgIF0sCi0gICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ190eXBlPT0iZXhlY3V0YWJsZSInLCB7Ci0gICAgICAgICAgICAndGVzdCc6IDEsCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAgICAgJ3J1bl9hcyc6IHsKLSAgICAgICAgICAgICAgICAgICdhY3Rpb24/Pz8/JzogWycke0JVSUxUX1BST0RVQ1RTX0RJUn0vJHtQUk9EVUNUX05BTUV9J10sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnT1M9PSJpb3MiJywgewotICAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgICAjIFVzZSBhIHZhcmlhYmxlIHNvIHRoZSBwYXRoIGdldHMgZml4ZWQgdXAgc28gaXQgaXMgYWx3YXlzCi0gICAgICAgICAgICAgICAgICAjIGNvcnJlY3Qgd2hlbiB0aGUgYWN0aW9uIGZpbmFsbHkgZ2V0cyB1c2VkLgotICAgICAgICAgICAgICAgICAgJ2lvc19ydW5fdW5pdHRlc3Rfc2NyaXB0X3BhdGgnOgotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGVzdGluZy9ndGVzdF9pb3MvcnVuLXVuaXR0ZXN0LnNoJywKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICdydW5fYXMnOiB7Ci0gICAgICAgICAgICAgICAgICAnYWN0aW9uPz8/Pyc6IFsnPihpb3NfcnVuX3VuaXR0ZXN0X3NjcmlwdF9wYXRoKSddLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICAgICAncnVuX2FzJzogewotICAgICAgICAgICAgICAgICAgJ2FjdGlvbj8/Pz8nOiBbJyQoVGFyZ2V0UGF0aCknLCAnLS1ndGVzdF9wcmludF90aW1lJ10sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgICAjIFBvdGVudGlhbCBjb21wYXJpc29uIG9mIGEgY29uc3RhbnQgd2l0aCBhbm90aGVyIGNvbnN0YW50LgotICAgICAgICAgICMgRGV0ZWN0ZWQgYnkgUFJFZmFzdCBpbiB1bml0IHRlc3RzIHdoZW4gdXNpbmcgRVhQRUNUX0VRLgotICAgICAgICAgIDYzMjYsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2d0ZXN0X21haW4nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2d0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2d0ZXN0L3NyYy9ndGVzdF9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ3Rlc3RfcHJvZCcsCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdF9wcm9kLmgnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9ndGVzdC9zcmMvZ3Rlc3QtaW50ZXJuYWwtaW5sLmggYi90ZXN0aW5nL2d0ZXN0L3NyYy9ndGVzdC1pbnRlcm5hbC1pbmwuaAppbmRleCA1NmM4YTIwLi5lNWQ2ODcwIDEwMDY0NAotLS0gYS90ZXN0aW5nL2d0ZXN0L3NyYy9ndGVzdC1pbnRlcm5hbC1pbmwuaAorKysgYi90ZXN0aW5nL2d0ZXN0L3NyYy9ndGVzdC1pbnRlcm5hbC1pbmwuaApAQCAtMTAxLDYgKzEwMSwxMCBAQAogY29uc3QgY2hhciBrU3RyZWFtUmVzdWx0VG9GbGFnW10gPSAic3RyZWFtX3Jlc3VsdF90byI7CiBjb25zdCBjaGFyIGtUaHJvd09uRmFpbHVyZUZsYWdbXSA9ICJ0aHJvd19vbl9mYWlsdXJlIjsKIGNvbnN0IGNoYXIga0ZsYWdmaWxlRmxhZ1tdID0gImZsYWdmaWxlIjsKKyNpZiBHVEVTVF9PU19TVEFSQk9BUkQKK2NvbnN0IGNoYXIga1RvdGFsU2hhcmRzRmxhZ1tdID0gInRvdGFsX3NoYXJkcyI7Citjb25zdCBjaGFyIGtTaGFyZEluZGV4RmxhZ1tdID0gInNoYXJkX2luZGV4IjsKKyNlbmRpZiAgLy8gR1RFU1RfT1NfU1RBUkJPQVJECiAKIC8vIEEgdmFsaWQgcmFuZG9tIHNlZWQgbXVzdCBiZSBpbiBbMSwga01heFJhbmRvbVNlZWRdLgogY29uc3QgaW50IGtNYXhSYW5kb21TZWVkID0gOTk5OTk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2d0ZXN0L3NyYy9ndGVzdC5jYyBiL3Rlc3RpbmcvZ3Rlc3Qvc3JjL2d0ZXN0LmNjCmluZGV4IGU1NjFhM2MuLjA5YmNhOTYgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvZ3Rlc3Qvc3JjL2d0ZXN0LmNjCisrKyBiL3Rlc3RpbmcvZ3Rlc3Qvc3JjL2d0ZXN0LmNjCkBAIC0zMTIsNiArMzEyLDE3IEBACiAgICAgIlRoaXMgZmxhZyBzcGVjaWZpZXMgdGhlIGZsYWdmaWxlIHRvIHJlYWQgY29tbWFuZC1saW5lIGZsYWdzIGZyb20uIik7CiAjZW5kaWYgIC8vIEdURVNUX1VTRV9PV05fRkxBR0ZJTEVfRkxBR18KIAorI2lmIEdURVNUX09TX1NUQVJCT0FSRAorR1RFU1RfREVGSU5FX2ludDMyXygKKyAgICB0b3RhbF9zaGFyZHMsCisgICAgaW50ZXJuYWw6OkludDMyRnJvbUdUZXN0RW52KCJ0b3RhbF9zaGFyZHMiLCAtMSksCisgICAgIlRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRzIHRvIHNwbGl0IHRlc3QgY2FzZXMgaW50by4iKTsKK0dURVNUX0RFRklORV9pbnQzMl8oCisgICAgc2hhcmRfaW5kZXgsCisgICAgaW50ZXJuYWw6OkludDMyRnJvbUdUZXN0RW52KCJzaGFyZF9pbmRleCIsIC0xKSwKKyAgICAiVGhlIHNoYXJkIGluZGV4IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3Vic2V0IG9mIHVuaXQgdGVzdHMgcnVuIGluIHRoZSBzaGFyZC4iKTsKKyNlbmRpZiAgLy8gR1RFU1RfT1NfU1RBUkJPQVJECisKIG5hbWVzcGFjZSBpbnRlcm5hbCB7CiAKIC8vIEdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgZnJvbSBbMCwgcmFuZ2UpLCB1c2luZyBhIExpbmVhcgpAQCAtMzA5NSwxMSArMzEwNiwyMCBAQAogICB9CiAKICAgaWYgKGludGVybmFsOjpTaG91bGRTaGFyZChrVGVzdFRvdGFsU2hhcmRzLCBrVGVzdFNoYXJkSW5kZXgsIGZhbHNlKSkgeworI2lmIEdURVNUX09TX1NUQVJCT0FSRAorICAgIGNvbnN0IEludDMyIHNoYXJkX2luZGV4ID0gR1RFU1RfRkxBRyhzaGFyZF9pbmRleCk7CisgICAgY29uc3QgSW50MzIgdG90YWxfc2hhcmRzID0gR1RFU1RfRkxBRyh0b3RhbF9zaGFyZHMpOworICAgIENvbG9yZWRQcmludGYoQ09MT1JfWUVMTE9XLAorICAgICAgICAgICAgICAgICAgIk5vdGU6IFRoaXMgaXMgdGVzdCBzaGFyZCAlZCBvZiAlZC5cbiIsCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNoYXJkX2luZGV4KSArIDEsCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRvdGFsX3NoYXJkcykpOworI2Vsc2UgIC8vIEdURVNUX09TX1NUQVJCT0FSRAogICAgIGNvbnN0IEludDMyIHNoYXJkX2luZGV4ID0gSW50MzJGcm9tRW52T3JEaWUoa1Rlc3RTaGFyZEluZGV4LCAtMSk7CiAgICAgQ29sb3JlZFByaW50ZihDT0xPUl9ZRUxMT1csCiAgICAgICAgICAgICAgICAgICAiTm90ZTogVGhpcyBpcyB0ZXN0IHNoYXJkICVkIG9mICVzLlxuIiwKICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc2hhcmRfaW5kZXgpICsgMSwKICAgICAgICAgICAgICAgICAgIGludGVybmFsOjpwb3NpeDo6R2V0RW52KGtUZXN0VG90YWxTaGFyZHMpKTsKKyNlbmRpZiAgLy8gR1RFU1RfT1NfU1RBUkJPQVJECiAgIH0KIAogICBpZiAoR1RFU1RfRkxBRyhzaHVmZmxlKSkgewpAQCAtNDc5OSwxNSArNDgxOSwxNyBAQAogYm9vbCBTaG91bGRTaGFyZChjb25zdCBjaGFyKiB0b3RhbF9zaGFyZHNfZW52LAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzaGFyZF9pbmRleF9lbnYsCiAgICAgICAgICAgICAgICAgIGJvb2wgaW5fc3VicHJvY2Vzc19mb3JfZGVhdGhfdGVzdCkgewotI2lmIEdURVNUX09TX1NUQVJCT0FSRAotICByZXR1cm4gZmFsc2U7Ci0jZWxzZSAgLy8gR1RFU1RfT1NfU1RBUkJPQVJECiAgIGlmIChpbl9zdWJwcm9jZXNzX2Zvcl9kZWF0aF90ZXN0KSB7CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyNpZiBHVEVTVF9PU19TVEFSQk9BUkQKKyAgY29uc3QgSW50MzIgdG90YWxfc2hhcmRzID0gR1RFU1RfRkxBRyh0b3RhbF9zaGFyZHMpOworICBjb25zdCBJbnQzMiBzaGFyZF9pbmRleCA9IEdURVNUX0ZMQUcoc2hhcmRfaW5kZXgpOworI2Vsc2UgIC8vIEdURVNUX09TX1NUQVJCT0FSRAogICBjb25zdCBJbnQzMiB0b3RhbF9zaGFyZHMgPSBJbnQzMkZyb21FbnZPckRpZSh0b3RhbF9zaGFyZHNfZW52LCAtMSk7CiAgIGNvbnN0IEludDMyIHNoYXJkX2luZGV4ID0gSW50MzJGcm9tRW52T3JEaWUoc2hhcmRfaW5kZXhfZW52LCAtMSk7CisjZW5kaWYgIC8vIEdURVNUX09TX1NUQVJCT0FSRAogCiAgIGlmICh0b3RhbF9zaGFyZHMgPT0gLTEgJiYgc2hhcmRfaW5kZXggPT0gLTEpIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODM5LDcgKzQ4NjEsNiBAQAogICB9CiAKICAgcmV0dXJuIHRvdGFsX3NoYXJkcyA+IDE7Ci0jZW5kaWYgIC8vIEdURVNUX09TX1NUQVJCT0FSRAogfQogCiAvLyBQYXJzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHZhciBhcyBhbiBJbnQzMi4gSWYgaXQgaXMgdW5zZXQsCkBAIC00ODc1LDEwICs0ODk2LDE3IEBACiAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xldGVzdC93aWtpL0dvb2dsZVRlc3RBZHZhbmNlZEd1aWRlLgogLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgc2hvdWxkIHJ1bi4KIGludCBVbml0VGVzdEltcGw6OkZpbHRlclRlc3RzKFJlYWN0aW9uVG9TaGFyZGluZyBzaGFyZF90ZXN0cykgeworI2lmIEdURVNUX09TX1NUQVJCT0FSRAorICBjb25zdCBJbnQzMiB0b3RhbF9zaGFyZHMgPSBzaGFyZF90ZXN0cyA9PSBIT05PUl9TSEFSRElOR19QUk9UT0NPTCA/CisgICAgICBHVEVTVF9GTEFHKHRvdGFsX3NoYXJkcykgOiAtMTsKKyAgY29uc3QgSW50MzIgc2hhcmRfaW5kZXggPSBzaGFyZF90ZXN0cyA9PSBIT05PUl9TSEFSRElOR19QUk9UT0NPTCA/CisgICAgICBHVEVTVF9GTEFHKHNoYXJkX2luZGV4KSA6IC0xOworI2Vsc2UgIC8vIEdURVNUX09TX1NUQVJCT0FSRAogICBjb25zdCBJbnQzMiB0b3RhbF9zaGFyZHMgPSBzaGFyZF90ZXN0cyA9PSBIT05PUl9TSEFSRElOR19QUk9UT0NPTCA/CiAgICAgICBJbnQzMkZyb21FbnZPckRpZShrVGVzdFRvdGFsU2hhcmRzLCAtMSkgOiAtMTsKICAgY29uc3QgSW50MzIgc2hhcmRfaW5kZXggPSBzaGFyZF90ZXN0cyA9PSBIT05PUl9TSEFSRElOR19QUk9UT0NPTCA/CiAgICAgICBJbnQzMkZyb21FbnZPckRpZShrVGVzdFNoYXJkSW5kZXgsIC0xKSA6IC0xOworI2VuZGlmICAvLyBHVEVTVF9PU19TVEFSQk9BUkQKIAogICAvLyBudW1fcnVubmFibGVfdGVzdHMgYXJlIHRoZSBudW1iZXIgb2YgdGVzdHMgdGhhdCB3aWxsCiAgIC8vIHJ1biBhY3Jvc3MgYWxsIHNoYXJkcyAoaS5lLiwgbWF0Y2ggZmlsdGVyIGFuZCBhcmUgbm90IGRpc2FibGVkKS4KQEAgLTUzMzMsNiArNTM2MSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgJkdURVNUX0ZMQUcoc3RhY2tfdHJhY2VfZGVwdGgpKSB8fAogICAgICAgUGFyc2VTdHJpbmdGbGFnKGFyZywga1N0cmVhbVJlc3VsdFRvRmxhZywKICAgICAgICAgICAgICAgICAgICAgICAmR1RFU1RfRkxBRyhzdHJlYW1fcmVzdWx0X3RvKSkgfHwKKyNpZiBHVEVTVF9PU19TVEFSQk9BUkQKKyAgICAgIFBhcnNlSW50MzJGbGFnKGFyZywga1RvdGFsU2hhcmRzRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICZHVEVTVF9GTEFHKHRvdGFsX3NoYXJkcykpIHx8CisgICAgICBQYXJzZUludDMyRmxhZyhhcmcsIGtTaGFyZEluZGV4RmxhZywKKyAgICAgICAgICAgICAgICAgICAgICZHVEVTVF9GTEFHKHNoYXJkX2luZGV4KSkgfHwKKyNlbmRpZiAgLy8gR1RFU1RfT1NfU1RBUkJPQVJECiAgICAgICBQYXJzZUJvb2xGbGFnKGFyZywga1Rocm93T25GYWlsdXJlRmxhZywKICAgICAgICAgICAgICAgICAgICAgJkdURVNUX0ZMQUcodGhyb3dfb25fZmFpbHVyZSkpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pb3NzaW0vaW9zc2ltLmd5cCBiL3Rlc3RpbmcvaW9zc2ltL2lvc3NpbS5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NjAxZjQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9pb3NzaW0vaW9zc2ltLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1MgIT0gImlvcyInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdpb3NzaW0nLAotICAgICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAnZGV2ZWxvcGVyX2Rpcic6ICc8ISh4Y29kZS1zZWxlY3QgLXByaW50LXBhdGgpJywKLSAgICAgICAgICAgICAgJ2lwaG9uZV9zaW1fcGF0aCc6ICc8KGRldmVsb3Blcl9kaXIpL1BsYXRmb3Jtcy9pUGhvbmVTaW11bGF0b3IucGxhdGZvcm0vRGV2ZWxvcGVyL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MnLAotICAgICAgICAgICAgICAnb3RoZXJfZnJhbWV3b3Jrc19wYXRoJzogJzwoZGV2ZWxvcGVyX2RpcikvLi4vT3RoZXJGcmFtZXdvcmtzJwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9jbGFzcy1kdW1wL2NsYXNzLWR1bXAuZ3lwOmNsYXNzLWR1bXAnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL2lvc3NpbScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICdpb3NzaW0ubW0nLAotICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS9pb3NzaW0vaVBob25lU2ltdWxhdG9yUmVtb3RlQ2xpZW50LmgnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcmsnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlX2lwaG9uZV9zaW1faGVhZGVyJywKLSAgICAgICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgICAgICAgJzwoaXBob25lX3NpbV9wYXRoKS9pUGhvbmVTaW11bGF0b3JSZW1vdGVDbGllbnQuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvaVBob25lU2ltdWxhdG9yUmVtb3RlQ2xpZW50JywKLSAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9jbGFzcy1kdW1wJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvaW9zc2ltL2lQaG9uZVNpbXVsYXRvclJlbW90ZUNsaWVudC5oJwotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAgICMgQWN0aW9ucyBkb24ndCBwcm92aWRlIGEgd2F5IHRvIHJlZGlyZWN0IHN0ZG91dCwgc28gYSBjdXN0b20KLSAgICAgICAgICAgICAgICAgICMgc2NyaXB0IGlzIGludm9rZWQgdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCB3cml0ZQotICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IHRvIHRoZSBmaWxlIHNwZWNpZmllZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LgotICAgICAgICAgICAgICAgICAgJy4vcmVkaXJlY3Qtc3Rkb3V0LnNoJywKLSAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9jbGFzcy1kdW1wIC1DaVBob25lU2ltdWxhdG9yIDwoaXBob25lX3NpbV9wYXRoKS9pUGhvbmVTaW11bGF0b3JSZW1vdGVDbGllbnQuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL2lvc3NpbS9pUGhvbmVTaW11bGF0b3JSZW1vdGVDbGllbnQuaCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIGhlYWRlcicsCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIF0sCi0gICAgICB9LCB7ICAjIGVsc2UsIE9TID09ICJpb3MiCi0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ25pbmphX291dHB1dF9kaXInOiAnbmluamEtaW9zc2ltJywKLSAgICAgICAgICAnbmluamFfcHJvZHVjdF9kaXInOgotICAgICAgICAgICAgJzwoREVQVEgpL3hjb2RlYnVpbGQvPChuaW5qYV9vdXRwdXRfZGlyKS88KENPTkZJR1VSQVRJT05fTkFNRSknLAotICAgICAgICB9LAotICAgICAgICAjIEdlbmVyYXRpb24gaXMgZG9uZSB2aWEgdHdvIGFjdGlvbnM6ICgxKSBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUgd2l0aAotICAgICAgICAjIG5pbmphLCBhbmQgKDIpIGNvcHlpbmcgdGhlIGV4ZWN1dGFibGUgaW50byBhIGxvY2F0aW9uIHRoYXQgaXMgc2hhcmVkCi0gICAgICAgICMgd2l0aCBvdGhlciBwcm9qZWN0cy4gVGhlc2UgYWN0aW9ucyBhcmUgc2VwYXJhdGVkIGludG8gdHdvIHRhcmdldHMgaW4KLSAgICAgICAgIyBvcmRlciB0byBiZSBhYmxlIHRvIHNwZWNpZnkgdGhhdCB0aGUgc2Vjb25kIGFjdGlvbiBzaG91bGQgbm90IHJ1bgotICAgICAgICAjIHVudGlsIHRoZSBmaXJzdCBhY3Rpb24gZmluaXNoZXMgKHNpbmNlIHRoZSBvcmRlcmluZyBvZiBtdWx0aXBsZQotICAgICAgICAjIGFjdGlvbnMgaW4gb25lIHRhcmdldCBpcyBkZWZpbmVkIG9ubHkgYnkgaW5wdXRzIGFuZCBvdXRwdXRzLCBhbmQgaXQncwotICAgICAgICAjIGltcG9zc2libGUgdG8gc2V0IGNvcnJlY3QgaW5wdXRzIGZvciB0aGUgbmluamEgYnVpbGQsIHNvIHNldHRpbmcgYWxsCi0gICAgICAgICMgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBpc24ndCBhbiBvcHRpb24pLgotICAgICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29tcGlsZV9pb3NzaW0nLAotICAgICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAjIEd5cCB0byByZXJ1bgotICAgICAgICAgICAgICAncmVfcnVuX3RhcmdldHMnOiBbCi0gICAgICAgICAgICAgICAgICd0ZXN0aW5nL2lvc3NpbS9pb3NzaW0uZ3lwJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbJy4uLy4uL2J1aWxkL2lvcy9tYWNfYnVpbGQuZ3lwaSddLAotICAgICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnY29tcGlsZSBpb3NzaW0nLAotICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbXSwKLSAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFtdLAotICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAgICAnPEAobmluamFfY21kKScsCi0gICAgICAgICAgICAgICAgICAnaW9zc2ltJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgdGhlIGlvc3NpbSBleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnaW9zc2ltJywKLSAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgJ2NvbXBpbGVfaW9zc2ltJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdjb3B5IGlvc3NpbScsCi0gICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICMgVE9ETyhpb3MpOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBpbnB1dCwgYnV0Ci0gICAgICAgICAgICAgICAgICAjIGFkZGluZyBpdCBjYXVzZXMgZ3lwIHRvIGNvbXBsYWluIGFib3V0IGR1cGxpY2F0ZSBpZC4KLSAgICAgICAgICAgICAgICAgICMgJzwobmluamFfcHJvZHVjdF9kaXIpL2lvc3NpbScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICc8KERFUFRIKS94Y29kZWJ1aWxkLzwoQ09ORklHVVJBVElPTl9OQU1FKS9pb3NzaW0nLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAgICdjcCcsCi0gICAgICAgICAgICAgICAgICAnPChuaW5qYV9wcm9kdWN0X2RpcikvaW9zc2ltJywKLSAgICAgICAgICAgICAgICAgICc8KERFUFRIKS94Y29kZWJ1aWxkLzwoQ09ORklHVVJBVElPTl9OQU1FKS9pb3NzaW0nLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIF0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9RUi1Db2RlLWdlbmVyYXRvci9xcl9jb2RlX2dlbmVyYXRvci5neXAgYi90aGlyZF9wYXJ0eS9RUi1Db2RlLWdlbmVyYXRvci9xcl9jb2RlX2dlbmVyYXRvci5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5Y2RkNGEuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvUVItQ29kZS1nZW5lcmF0b3IvcXJfY29kZV9nZW5lcmF0b3IuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdxcl9jb2RlX2dlbmVyYXRvcicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NwcC9CaXRCdWZmZXIuY3BwJywKLSAgICAgICAgJ2NwcC9CaXRCdWZmZXIuaHBwJywKLSAgICAgICAgJ2NwcC9RckNvZGUuY3BwJywKLSAgICAgICAgJ2NwcC9RckNvZGUuaHBwJywKLSAgICAgICAgJ2NwcC9RclNlZ21lbnQuY3BwJywKLSAgICAgICAgJ2NwcC9RclNlZ21lbnQuaHBwJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL0JVSUxELmduIGIvdGhpcmRfcGFydHkvYW5nbGUvQlVJTEQuZ24KaW5kZXggNTg4MmNlMC4uMzVmNmRkNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvQlVJTEQuZ24KKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvQlVJTEQuZ24KQEAgLTE4Miw2ICsxODIsMTYgQEAKICAgICAgICItV3VucmVhY2hhYmxlLWNvZGUiLAogICAgICAgIi1Xc2hvcnRlbi02NC10by0zMiIsCiAgICAgXQorCisgICAgaWYodXNpbmdfb2xkX2NvbXBpbGVyKXsKKyAgICAgIGNmbGFncyAtPSBbCisgICAgICAgICItV2V4dHJhLXNlbWktc3RtdCIsCisgICAgICAgICItV2luY29uc2lzdGVudC1taXNzaW5nLWRlc3RydWN0b3Itb3ZlcnJpZGUiLAorICAgICAgICAiLVdyZWR1bmRhbnQtcGFyZW5zIiwKKyAgICAgICAgIi1Xc2hhZG93LWZpZWxkIiwKKyAgICAgICAgIi1XdGF1dG9sb2dpY2FsLXR5cGUtbGltaXQtY29tcGFyZSIsCisgICAgICBdCisgICAgfQogICB9CiAKICAgaWYgKGFuZ2xlX2lzX3dpbnV3cCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvYW5nbGUuZ3lwIGIvdGhpcmRfcGFydHkvYW5nbGUvYW5nbGUuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzRlZWE3Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL2FuZ2xlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgICAndmFyaWFibGVzJzoKLSAgICB7Ci0gICAgICAgICdhbmdsZV9idWlsZF93aW5ydCUnOiAxLAotICAgICAgICAnYW5nbGVfY29kZSc6IDEsCi0gICAgICAgICdhbmdsZV9nZW5fcGF0aCc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9hbmdsZScsCi0gICAgICAgICdhbmdsZV91c2VfY29tbWl0X2lkJSc6IDAsCi0gICAgICAgICdhbmdsZV9lbmFibGVfZDNkOSUnOiAwLAotICAgICAgICAnYW5nbGVfZW5hYmxlX2QzZDExJSc6IDEsCi0gICAgICAgICdlbmFibGVfZDNkMTFfZmVhdHVyZV9sZXZlbF8xMSUnOiAwLAotICAgICAgICAnYW5nbGVfZW5hYmxlX2dsJSc6IDAsCi0gICAgICAgICdhbmdsZV91c2VfZ2x4JSc6IDAsCi0gICAgICAgICdhbmdsZV9lbmFibGVfdnVsa2FuJSc6IDAsCi0gICAgICAgICdhbmdsZV9lbmFibGVfZXNzbCUnOiAxLCAjIEVuYWJsZSB0aGlzIGZvciBhbGwgY29uZmlncyBieSBkZWZhdWx0Ci0gICAgICAgICdhbmdsZV9lbmFibGVfZ2xzbCUnOiAxLCAjIEVuYWJsZSB0aGlzIGZvciBhbGwgY29uZmlncyBieSBkZWZhdWx0Ci0gICAgICAgICdhbmdsZV9lbmFibGVfaGxzbCUnOiAxLAotICAgICAgICAnYW5nbGVfbGlua19nbHglJzogMCwKLSAgICAgICAgJ2FuZ2xlX2dsX2xpYnJhcnlfdHlwZSUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAnZGNoZWNrX2Fsd2F5c19vbiUnOiAwLAotICAgICAgICAnYW5nbGVfZW5hYmxlX251bGwlJzogMSwgIyBBdmFpbGFibGUgb24gYWxsIHBsYXRmb3JtcwotCi0gICAgICAgICMgT24gU3RhcmJvYXJkIHBsYXRmb3JtcywgdGhlIHRhcmdldCBBbmdsZSBwbGF0Zm9ybSBtdXN0IGJlIGV4cGxpY2l0bHkKLSAgICAgICAgIyBkZWZpbmVkIGluIHRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uLgotICAgICAgICAnYW5nbGVfcGxhdGZvcm1fbGludXglJzogMCwKLSAgICAgICAgJ2FuZ2xlX3BsYXRmb3JtX3Bvc2l4JSc6IDAsCi0gICAgICAgICdhbmdsZV9wbGF0Zm9ybV93aW5kb3dzJSc6IDAsCi0gICAgfSwKLSAgICAnaW5jbHVkZXMnOgotICAgIFsKLSAgICAgICAgJy4vc3JjL2NvbXBpbGVyLmd5cGknLAotICAgICAgICAnLi9zcmMvbGliR0xFU3YyLmd5cGknLAotICAgICAgICAnLi9zcmMvbGliRUdMLmd5cGknLAotICAgICAgICAnLi9zcmMvdnVsa2FuX3N1cHBvcnQvdnVsa2FuLmd5cGknLAotICAgIF0sCi0KLSAgICAndGFyZ2V0cyc6Ci0gICAgWwotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnYW5nbGVfY29tbW9uJywKLSAgICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLCBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9jb21tb25fc291cmNlcyknLAotICAgICAgICAgICAgICAgICc8QChhbmdsZV9zeXN0ZW1fdXRpbHNfc291cmNlcyknLAotICAgICAgICAgICAgICAgICc8QCh4eGhhc2hfc291cmNlcyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICcuL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICcuL3NyYycsCi0gICAgICAgICAgICAgICAgJy4vc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnV2FybkFzRXJyb3InOiAnZmFsc2UnLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMnLAotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgIFsnZGNoZWNrX2Fsd2F5c19vbj09MScsCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlbGVhc2VfQmFzZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfUkVMRUFTRV9BU1NFUlRTJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlYnVnX0Jhc2UnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfRU5BQkxFX0RFQlVHX0FOTk9UQVRJT05TJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICBbJ2RjaGVja19hbHdheXNfb249PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZ3VyYXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ1JlbGVhc2VfQmFzZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9SRUxFQVNFX0FTU0VSVFMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnY29uZmlndXJhdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnRGVidWdfQmFzZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9ERUJVR19BTk5PVEFUSU9OUycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiIgYW5kIGFuZ2xlX2J1aWxkX3dpbnJ0PT0wJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGFuZ2xlX3N5c3RlbV91dGlsc193aW5fc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIiBhbmQgYW5nbGVfYnVpbGRfd2lucnQ9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYW5nbGVfc3lzdGVtX3V0aWxzX3dpbnV3cF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJtYWMiJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGFuZ2xlX3N5c3RlbV91dGlsc19tYWNfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yaycsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0ibGludXgiJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGFuZ2xlX3N5c3RlbV91dGlsc19saW51eF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0KLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0KLSAgICAgICAgewotICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX2ltYWdlX3V0aWwnLAotICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX2ltYWdlX3V0aWxfc291cmNlcyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICcuL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICcuL3NyYycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJ2FuZ2xlX2NvbW1vbicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgfSwKLQotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnYW5nbGVfZ3B1X2luZm9fdXRpbCcsCi0gICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywgXSwKLSAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZ3B1X2luZm9fdXRpbF9zb3VyY2VzKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJy4vaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgJy4vc3JjJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnYW5nbGVfY29tbW9uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9ncHVfaW5mb191dGlsX3dpbl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iIGFuZCBhbmdsZV9idWlsZF93aW5ydD09MCcsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldHVwYXBpLmxpYicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnR1BVX0lORk9fVVNFX1NFVFVQQVBJJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkeGdpLmxpYicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnR1BVX0lORk9fVVNFX0RYR0knLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnT1M9PSJsaW51eCInLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZ3B1X2luZm9fdXRpbF9saW51eF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgdXNlX2xpYnBjaT09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9ncHVfaW5mb191dGlsX2xpYnBjaV9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ0dQVV9JTkZPX1VTRV9MSUJQQ0knLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCFAKDwocGtnLWNvbmZpZykgLS1saWJzLW9ubHktTCAtLWxpYnMtb25seS1vdGhlciBsaWJwY2kpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnbGlicmFyaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCFAKDwocGtnLWNvbmZpZykgLS1saWJzLW9ubHktbCBsaWJwY2kpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydPUz09Im1hYyInLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZ3B1X2luZm9fdXRpbF9tYWNfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLQotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9zY3JpcHRzJywKLSAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICAgICAgICdjb3BpZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoYW5nbGVfZ2VuX3BhdGgpJywKLSAgICAgICAgICAgICAgICAgICAgJ2ZpbGVzJzogWyAnLi9zcmMvY29weV9jb21waWxlcl9kbGwuYmF0JyBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnIDogJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6Ci0gICAgWwotICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0cyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9jb21waWxlcl9kbGwnLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsgJ2NvcHlfc2NyaXB0cycsIF0sCi0gICAgICAgICAgICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLCBdLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdjb3B5X2RsbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdDb3B5aW5nIEQzRCBDb21waWxlciBETEwuLi4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbICcuL3NyYy9jb3B5X2NvbXBpbGVyX2RsbC5iYXQnIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsgJzwoUFJPRFVDVF9ESVIpL2QzZGNvbXBpbGVyXzQ3LmRsbCcgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29weV9jb21waWxlcl9kbGwuYmF0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieDY0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPCh3aW5kb3dzX3Nka19wYXRoKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwoUFJPRFVDVF9ESVIpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCAjYWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX2J1aWxkX3dpbnJ0PT0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZScgOiAnc2hhcmVkX2xpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwgIyB0YXJnZXRzCi0gICAgICAgIH1dLAotICAgIF0gIyBjb25kaXRpb25zCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9neXAvY29tbW9uX2RlZmluZXMuZ3lwaSBiL3RoaXJkX3BhcnR5L2FuZ2xlL2d5cC9jb21tb25fZGVmaW5lcy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGVkZDQwLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL2d5cC9jb21tb25fZGVmaW5lcy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAgICd2YXJpYWJsZXMnOgotICAgIHsKLSAgICAgICAgJ2NvbXBvbmVudCUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAndXNlX2xpYnBjaSUnOiAxLAotICAgICAgICAnd2luZG93c19zZGtfcGF0aCUnOiAnQzovUHJvZ3JhbSBGaWxlcyAoeDg2KS9XaW5kb3dzIEtpdHMvMTAnLAotCi0gICAgICAgICdhbmdsZV9idWlsZF93aW5ydCUnOiAnMCcsCi0KLSAgICAgICAgIyBUaGlzIHdvcmtzIGxpa2UgdGhlIE96b25lIEdCTSBwbGF0Zm9ybSBpbiBDaHJvbWU6Ci0gICAgICAgICMgLSBHZW5lcmljIEJ1ZmZlciBNYW5hZ2VyIChnYm0pIHRvIGFsbG9jYXRlIGJ1ZmZlcnMKLSAgICAgICAgIyAtIEVHTF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQgdG8gcmVuZGVyIGludG8gdGhvc2UgYnVmZmVycyB2aWEgRUdMSW1hZ2UKLSAgICAgICAgIyAtIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlciArIEtlcm5lbCBNb2RlIFNldHRpbmcgdG8gc2NhbiBvdXQgZnJvbSB0aG9zZSBidWZmZXJzCi0gICAgICAgICMgLSBFR0xfUExBVEZPUk1fU1VSRkFDRUxFU1MgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbmF0aXZlIHdpbmRvd3MKLSAgICAgICAgJ3VzZV9vem9uZSUnOiAwLAotCi0gICAgICAgICdhbmdsZV91c2VfZ2x4JSc6IDAsCi0KLSAgICAgICAgIyByb290IG9mIHRoZSBPU1ggU0RLIGZvciBDaHJvbWl1bSBidWlsZHMsIHRoZSBzeXN0ZW0gcm9vdCBmb3Igc3RhbmRhbG9uZSBidWlsZHMKLSAgICAgICAgJ1NES1JPT1QlJzogIiIsCi0gICAgfSwKLSAgICAnZGVmaW5lcyc6Ci0gICAgWwotICAgICAgICAnQU5HTEVfU1RBTkRBTE9ORV9CVUlMRCcsCi0gICAgXSwKLSAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6Ci0gICAgWwotICAgICAgICA0MTAwLCAjIFVucmVmZXJlbmNlZCBmb3JtYWwgcGFyYW1ldGVyLiBOb3QgaW50ZXJlc3RpbmcuCi0gICAgICAgIDQxMjcsICMgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudC4gVG9vIG5vaXN5IHRvIGJlIHVzZWZ1bC4KLSAgICAgICAgNDIwMCwgIyBOb25zdGFuZGFyZCBleHRlbnNpb24gdXNlZDogemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24uCi0gICAgICAgIDQ3MTgsICMgUmVjdXJzaXZlIGNhbGwgaGFzIG5vIHNpZGUgZWZmZWN0cy4gRmlyZXMgb24geHRyZWUgc3lzdGVtIGhlYWRlci4KLSAgICAgICAgNDI1MSwgIyBTVEwgb2JqZWN0cyBkbyBub3QgaGF2ZSBETEwgaW50ZXJmYWNlLCBuZWVkZWQgYnkgU2hhZGVyVmFycy5oIGFuZCBhbmdsZV91dGlsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6Ci0gICAgWwotICAgICAgICBbJ3VzZV9vem9uZT09MScsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWyAnVVNFX09aT05FJyBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLAotICAgICAgICB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ0NPTVBPTkVOVF9CVUlMRCcgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X29zPT0id2luIiBhbmQgYW5nbGVfYnVpbGRfd2lucnQ9PTEnLAotICAgICAgICB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnV0lOQVBJX0ZBTUlMWT1XSU5BUElfRkFNSUxZX0FQUCcsICMgVVdQLgotICAgICAgICAgICAgICAgICcgX19XUkxfTk9fREVGQVVMVF9MSUJfXycsCi0gICAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iIGFuZCBhbmdsZV9idWlsZF93aW5ydD09MCcsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdfV0lOMzInLAotICAgICAgICAgICAgICAgICdXSU5BUElfRkFNSUxZPVdJTkFQSV9GQU1JTFlfREVTS1RPUF9BUFAnLCAjIHdpbjMyCi0gICAgICAgICAgICAgICAgJyBfX1dSTF9OT19ERUZBVUxUX0xJQl9fJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH1dCi0gICAgXSwKLSAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgewotICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJ19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURScsCi0gICAgICAgICAgICAgICAgJ19TQ0xfU0VDVVJFX05PX1dBUk5JTkdTJywKLSAgICAgICAgICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLAotICAgICAgICAgICAgICAgICdOT01JTk1BWCcsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICAnVkNMaW5rZXJUb29sJzoKLSAgICAgICAgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTAnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAna2VybmVsMzIubGliJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdnZGkzMi5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbnNwb29sLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnY29tZGxnMzIubGliJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdhZHZhcGkzMi5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3NoZWxsMzIubGliJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdvbGUzMi5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ29sZWF1dDMyLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAndXNlcjMyLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAndXVpZC5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ29kYmMzMi5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ29kYmNjcDMyLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZGVsYXlpbXAubGliJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAjIHdpbnJ0IGNvbXBpbGF0aW9uIGlzIGR5bmFtaWMgZGVwZW5kaW5nIG9uIHRoZSBwcm9qZWN0Ci0gICAgICAgICAgICAgICAgIyB0eXBlLiBBZGRpdGlvbmFsRGVwZW5kZW5jaWVzIGlzIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZAotICAgICAgICAgICAgICAgICMgd2l0aCB0aGUgcmVxdWlyZWQgLmxpYnMKLSAgICAgICAgICAgICAgICBbJ2FuZ2xlX2J1aWxkX3dpbnJ0PT0xJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyknLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3V1aWQubGliJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgfSwKLQotICAgICMgV2luZG93cyBTREsgbGlicmFyeSBkaXJlY3RvcmllcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzoKLSAgICB7Ci0gICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgWwotICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MCcsCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ3g4Nl9CYXNlJzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdhYnN0cmFjdCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwod2luZG93c19zZGtfcGF0aCkvTGliL3dpbnY2LjMvdW0veDg2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdWQ0xpYnJhcmlhblRvb2wnOgotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHdpbmRvd3Nfc2RrX3BhdGgpL0xpYi93aW52Ni4zL3VtL3g4NicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAneDY0X0Jhc2UnOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2Fic3RyYWN0JzogMSwKLSAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh3aW5kb3dzX3Nka19wYXRoKS9MaWIvd2ludjYuMy91bS94NjQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwod2luZG93c19zZGtfcGF0aCkvTGliL3dpbnY2LjMvdW0veDY0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL2d5cC9zdGFuZGFsb25lLmd5cGkgYi90aGlyZF9wYXJ0eS9hbmdsZS9neXAvc3RhbmRhbG9uZS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2M3ODliLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL2d5cC9zdGFuZGFsb25lLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgICAndmFyaWFibGVzJzoKLSAgICB7Ci0gICAgICAgICMgQ2hyb21lIE9TIGNocm9vdCBidWlsZHMgbmVlZCBhIHNwZWNpYWwgcGtnLWNvbmZpZywgc28gbWFrZSBpdCBwb3NzaWJsZSB0byBjaGFuZ2UuCi0gICAgICAgICdwa2ctY29uZmlnJSc6ICdwa2ctY29uZmlnJywKLQotICAgICAgICAjIFVzZSBhIG5lc3RlZCB2YXJpYWJsZSB0cmljayB0byBnZXQgdXNlX3gxMSBldmFsdWF0ZWQgbW9yZQotICAgICAgICAjIGVhZ2VybHkgdGhhbiBvdGhlciBjb25kaXRpb25hbCB2YXJpYWJsZXMuCi0gICAgICAgICd2YXJpYWJsZXMnOgotICAgICAgICB7Ci0gICAgICAgICAgICAndmFyaWFibGVzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAndXNlX296b25lJSc6IDAsCi0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAjIENvcHkgY29uZGl0aW9uYWxseS1zZXQgdmFyaWFibGVzIG91dCBvbmUgc2NvcGUuCi0gICAgICAgICAgICAndXNlX296b25lJSc6ICc8KHVzZV9vem9uZSknLAotICAgICAgICB9LAotICAgIH0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zY3JpcHRzL3RyaWdnZXIuYmF0IGIvdGhpcmRfcGFydHkvYW5nbGUvc2NyaXB0cy90cmlnZ2VyLmJhdAppbmRleCA3MzQxMjMzLi5hMmQwMGQ2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zY3JpcHRzL3RyaWdnZXIuYmF0CisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NjcmlwdHMvdHJpZ2dlci5iYXQKQEAgLTEgKzEgQEAKLUBweXRob24gJX5kcDBcdHJpZ2dlci5weSAlKg0KK0BweXRob24gJX5kcDBcdHJpZ2dlci5weSAlKgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyLmd5cGkgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlhNzlhOC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQ2NCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgICAndmFyaWFibGVzJzoKLSAgICB7Ci0gICAgICAgICdhbmdsZV90cmFuc2xhdG9yX2V4cG9ydGVkX2hlYWRlcnMnOgotICAgICAgICBbCi0gICAgICAgICAgImluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgiLAotICAgICAgICAgICJpbmNsdWRlL0dMU0xBTkcvU2hhZGVyVmFycy5oIiwKLSAgICAgICAgICAic3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvYmxvY2tsYXlvdXQuaCIsCi0gICAgICAgICAgInNyYy9jb21waWxlci90cmFuc2xhdG9yL2Jsb2NrbGF5b3V0SExTTC5oIiwKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZ2xlX3RyYW5zbGF0b3Jfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9FR0wvZWdsZXh0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzIvZ2wycGxhdGZvcm0uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMy9nbDMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMzL2dsMzEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMy9nbDMyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvYW5nbGVfZ2wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ2FsbERBRy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NhbGxEQUcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbGxlY3RWYXJpYWJsZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2xsZWN0VmFyaWFibGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RlY2xhcmF0b3IuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZWNsYXJhdG9yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhhdmlvci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Z1bmN0aW9uTG9va3VwLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRnVuY3Rpb25Mb29rdXAuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oJywKLSAgICAgICAgICAgICMgVE9ETzogQ29uc2lkZXIgSW1tdXRhYmxlU3RyaW5nX0VTU0xfYXV0b2dlbi5jcHAgYmVsb3csCi0gICAgICAgICAgICAjICAgICAgIHNlZSBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tL2MvYW5nbGUvYW5nbGUvKy8xNzU3MzcyCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVHbG9iYWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSXNBU1REZXB0aEJlbG93TGltaXQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3BlcmF0b3IuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PcGVyYXRvci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRUcmVlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0VHJlZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0X2ludGVybS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHRfY29tcGxldGVfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHRfRVNTTF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Bvb2xBbGxvYy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QcmFnbWEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyVHlwZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyVHlwZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TZXZlcml0eS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyVmFycy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCcsCi0gICAgICAgICAgICAjIFRPRE86IENvbnNpZGVyIHVzaW5nIFN5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHAgYmVsb3csCi0gICAgICAgICAgICAjICAgICAgIHNlZSBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tL2MvYW5nbGUvYW5nbGUvKy8xNzU3MzcyCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVW5pcXVlSWQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVHbG9iYWxJbml0aWFsaXplci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlR2xvYmFsSW5pdGlhbGl6ZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVNYXhQYXJhbWV0ZXJzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTWF4UGFyYW1ldGVycy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZVN3aXRjaC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlU3dpdGNoLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlVmFyeWluZ0xvY2F0aW9ucy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlVmFyeWluZ0xvY2F0aW9ucy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2Jsb2NrbGF5b3V0LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9BZGRBbmRUcnVlVG9Mb29wQ29uZGl0aW9uLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvQWRkQW5kVHJ1ZVRvTG9vcENvbmRpdGlvbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9CcmVha1ZhcmlhYmxlQWxpYXNpbmdJbklubmVyTG9vcHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9CcmVha1ZhcmlhYmxlQWxpYXNpbmdJbklubmVyTG9vcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvQ2xhbXBGcmFnRGVwdGguY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9DbGFtcEZyYWdEZXB0aC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9DbGFtcFBvaW50U2l6ZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0NsYW1wUG9pbnRTaXplLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlY2xhcmVBbmRJbml0QnVpbHRpbnNGb3JJbnN0YW5jZWRNdWx0aXZpZXcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVjbGFyZUFuZEluaXRCdWlsdGluc0Zvckluc3RhbmNlZE11bHRpdmlldy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRW11bGF0ZUdMRnJhZ0NvbG9yQnJvYWRjYXN0LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRW11bGF0ZUdMRnJhZ0NvbG9yQnJvYWRjYXN0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0VtdWxhdGVNdWx0aURyYXdTaGFkZXJCdWlsdGlucy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0VtdWxhdGVNdWx0aURyYXdTaGFkZXJCdWlsdGlucy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9FbXVsYXRlUHJlY2lzaW9uLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRW11bGF0ZVByZWNpc2lvbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9FeHBhbmRJbnRlZ2VyUG93RXhwcmVzc2lvbnMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9FeHBhbmRJbnRlZ2VyUG93RXhwcmVzc2lvbnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRm9sZEV4cHJlc3Npb25zLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRm9sZEV4cHJlc3Npb25zLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0luaXRpYWxpemVWYXJpYWJsZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL05hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZUVtYmVkZGVkVW5pZm9ybVN0cnVjdHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZU5hbWVsZXNzVW5pZm9ybUJ1ZmZlcnMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lTmFtZWxlc3NVbmlmb3JtQnVmZmVycy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVOb09wcy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lTm9PcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVjb3JkQ29uc3RhbnRQcmVjaXNpb24uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZWNvcmRDb25zdGFudFByZWNpc2lvbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZWdlbmVyYXRlU3RydWN0TmFtZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZWdlbmVyYXRlU3RydWN0TmFtZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlQXJyYXlMZW5ndGhNZXRob2QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVBcnJheUxlbmd0aE1ldGhvZC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVEeW5hbWljSW5kZXhpbmcuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVEeW5hbWljSW5kZXhpbmcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlSW52YXJpYW50RGVjbGFyYXRpb24uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVJbnZhcmlhbnREZWNsYXJhdGlvbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVQb3cuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVQb3cuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlVW5yZWZlcmVuY2VkVmFyaWFibGVzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlVW5yZWZlcmVuY2VkVmFyaWFibGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQXRvbWljRnVuY3Rpb25FeHByZXNzaW9ucy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNGdW5jdGlvbkV4cHJlc3Npb25zLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFycmF5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVEZmR5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZURmZHkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZURvV2hpbGUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlRG9XaGlsZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVyU3RvcmFnZUJsb2NrLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUV4cHJlc3Npb25zV2l0aFNoYWRlclN0b3JhZ2VCbG9jay5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlU3RydWN0U2FtcGxlcnMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlU3RydWN0U2FtcGxlcnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZVN0cnVjdFNhbXBsZXJzT2xkLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZVJlcGVhdGVkQXNzaWduVG9Td2l6emxlZC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVSZXBlYXRlZEFzc2lnblRvU3dpenpsZWQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZVJvd01ham9yTWF0cmljZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlVGV4ZWxGZXRjaE9mZnNldC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVUZXhlbEZldGNoT2Zmc2V0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9hdC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9hdC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlVW5hcnlNaW51c09wZXJhdG9ySW50LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TY2FsYXJpemVWZWNBbmRNYXRDb25zdHJ1Y3RvckFyZ3MuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TY2FsYXJpemVWZWNBbmRNYXRDb25zdHJ1Y3RvckFyZ3MuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TcGxpdFNlcXVlbmNlT3BlcmF0b3IuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TcGxpdFNlcXVlbmNlT3BlcmF0b3IuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1VzZUludGVyZmFjZUJsb2NrRmllbGRzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvVXNlSW50ZXJmYWNlQmxvY2tGaWVsZHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvVmVjdG9yaXplVmVjdG9yU2NhbGFyQXJpdGhtZXRpYy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1ZlY3Rvcml6ZVZlY3RvclNjYWxhckFyaXRobWV0aWMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0J1aWx0SW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0J1aWx0SW5fY29tcGxldGVfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvQnVpbHRJbl9FU1NMX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ZpbmRGdW5jdGlvbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kRnVuY3Rpb24uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ZpbmRNYWluLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ZpbmRNYWluLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kU3ltYm9sTm9kZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kU3ltYm9sTm9kZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVTZWFyY2guaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VTaGFkb3dpbmdWYXJpYWJsZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvUnVuQXRUaGVFbmRPZlNoYWRlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9WaXNpdC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZ2xlX3RyYW5zbGF0b3JfZXNzbF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdhbmdsZV90cmFuc2xhdG9yX2dsc2xfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRpbnNXb3JrYXJvdW5kR0xTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uR0xTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkdMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdhbmdsZV90cmFuc2xhdG9yX2hsc2xfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9BU1RNZXRhZGF0YUhMU0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9BU1RNZXRhZGF0YUhMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQXRvbWljQ291bnRlckZ1bmN0aW9uSExTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0F0b21pY0NvdW50ZXJGdW5jdGlvbkhMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvYmxvY2tsYXlvdXRITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Jlc291cmNlc0hMU0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZXNvdXJjZXNITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlclN0b3JhZ2VCbG9ja0Z1bmN0aW9uSExTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoYWRlclN0b3JhZ2VCbG9ja0Z1bmN0aW9uSExTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJTdG9yYWdlQmxvY2tPdXRwdXRITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyU3RvcmFnZUJsb2NrT3V0cHV0SExTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TdHJ1Y3R1cmVITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3RydWN0dXJlSExTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UZXh0dXJlRnVuY3Rpb25ITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVGV4dHVyZUZ1bmN0aW9uSExTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbWFnZUZ1bmN0aW9uSExTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ltYWdlRnVuY3Rpb25ITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVXRpbHNITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVXRpbHNITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2VtdWxhdGVkX2J1aWx0aW5fZnVuY3Rpb25zX2hsc2xfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0FkZERlZmF1bHRSZXR1cm5TdGF0ZW1lbnRzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvQWRkRGVmYXVsdFJldHVyblN0YXRlbWVudHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1JlbW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUVsc2VCbG9ja3MuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlRWxzZUJsb2Nrcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZUFycmF5Q29uc3RydWN0b3JTdGF0ZW1lbnRzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVBcnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVFeHByZXNzaW9uc1JldHVybmluZ0FycmF5cy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRXhwcmVzc2lvbnNSZXR1cm5pbmdBcnJheXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvVW5mb2xkU2hvcnRDaXJjdWl0VG9JZi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1VuZm9sZFNob3J0Q2lyY3VpdFRvSWYuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1dyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3MuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdhbmdsZV90cmFuc2xhdG9yX2xpYl92dWxrYW5fc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRWdWxrYW5HTFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0VnVsa2FuR0xTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZ2xlX3ByZXByb2Nlc3Nvcl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlhZ25vc3RpY3NCYXNlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaWFnbm9zdGljc0Jhc2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlSGFuZGxlckJhc2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9JbnB1dC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvSW5wdXQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9MZXhlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTGV4ZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyby5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvTWFjcm8uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9NYWNyb0V4cGFuZGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX2xleF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzb3JfdGFiX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvU291cmNlTG9jYXRpb24uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9udW1lcmljX2xleC5oJywKLSAgICAgICAgXSwKLSAgICB9LAotICAgICMgRXZlcnl0aGluZyBiZWxvdyB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIEdOIGJ1aWxkLiBJZiB5b3UgY2hhbmdlCi0gICAgIyBhbnl0aGluZyBhbHNvIGNoYW5nZSBhbmdsZS9CVUlMRC5nbgotICAgICd0YXJnZXRzJzoKLSAgICBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwcmVwcm9jZXNzb3InLAotICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsgJ2FuZ2xlX2NvbW1vbicgXSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4uL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywgXSwKLSAgICAgICAgICAgICdzb3VyY2VzJzogWyAnPEAoYW5nbGVfcHJlcHJvY2Vzc29yX3NvdXJjZXMpJywgXSwKLSAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICdmYWxzZScsCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3RyYW5zbGF0b3InLAotICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsgJ3ByZXByb2Nlc3NvcicsICdhbmdsZV9jb21tb24nIF0sCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICc8QChhbmdsZV90cmFuc2xhdG9yX3NvdXJjZXMpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnV2FybkFzRXJyb3InOiAnZmFsc2UnLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICdWQ0xpYnJhcmlhblRvb2wnOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWycvaWdub3JlOjQyMjEnXSwKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX2Vzc2w9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfRU5BQkxFX0VTU0wnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfRU5BQkxFX0VTU0wnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYW5nbGVfdHJhbnNsYXRvcl9lc3NsX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ2FuZ2xlX2VuYWJsZV9nbHNsPT0xJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9HTFNMJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9HTFNMJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGFuZ2xlX3RyYW5zbGF0b3JfZ2xzbF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfaGxzbD09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfSExTTCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfSExTTCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChhbmdsZV90cmFuc2xhdG9yX2hsc2xfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX3Z1bGthbj09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfVlVMS0FOJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9WVUxLQU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYW5nbGVfdHJhbnNsYXRvcl9saWJfdnVsa2FuX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb3B5X2NvbXBpbGVyX2RsbC5iYXQgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29weV9jb21waWxlcl9kbGwuYmF0CmluZGV4IDFhYWMxYWIuLjgxMDY0MTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb3B5X2NvbXBpbGVyX2RsbC5iYXQKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvcHlfY29tcGlsZXJfZGxsLmJhdApAQCAtMSw5ICsxLDkgQEAKLUBlY2hvIG9mZg0KLXNldCBfYXJjaD0lMQ0KLXNldCBfYXJjaD0lX2FyY2g6V2luMzI9eDg2JQ0KLWNvcHkgJTIiXFJlZGlzdFxEM0RcIiVfYXJjaCUiXGQzZGNvbXBpbGVyXzQ3LmRsbCIgJTMgPiBOVUwNCi06OiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYHRvdWNoJywgc2VlOg0KLTo6IGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmI0OTA4ODYuYXNweA0KLTo6IFRoaXMgYXZvaWRzIHJlcnVubmluZyBiZWNhdXNlIHRoaXMgYmF0Y2ggZmlsZSBpcyBhbHNvIGNvcGllZCB0byB0aGUgZ2VuIGRpciwNCi06OiBzbyBpdCdzIHRpbWVzdGFtcCB3b3VsZCBvdGhlcndpc2UgYmUgbmV3ZXIgdGhhbiB0aGUgZGxsLg0KLWNvcHkgL2IgJTNcZDNkY29tcGlsZXJfNDcuZGxsKywsICUzXGQzZGNvbXBpbGVyXzQ3LmRsbCA+IE5VTA0KK0BlY2hvIG9mZgorc2V0IF9hcmNoPSUxCitzZXQgX2FyY2g9JV9hcmNoOldpbjMyPXg4NiUKK2NvcHkgJTIiXFJlZGlzdFxEM0RcIiVfYXJjaCUiXGQzZGNvbXBpbGVyXzQ3LmRsbCIgJTMgPiBOVUwKKzo6IFRoaXMgaXMgZXF1aXZhbGVudCB0byBgdG91Y2gnLCBzZWU6Cis6OiBodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2JiNDkwODg2LmFzcHgKKzo6IFRoaXMgYXZvaWRzIHJlcnVubmluZyBiZWNhdXNlIHRoaXMgYmF0Y2ggZmlsZSBpcyBhbHNvIGNvcGllZCB0byB0aGUgZ2VuIGRpciwKKzo6IHNvIGl0J3MgdGltZXN0YW1wIHdvdWxkIG90aGVyd2lzZSBiZSBuZXdlciB0aGFuIHRoZSBkbGwuCitjb3B5IC9iICUzXGQzZGNvbXBpbGVyXzQ3LmRsbCssLCAlM1xkM2Rjb21waWxlcl80Ny5kbGwgPiBOVUwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX2dzLmgKaW5kZXggZGJjMjE2YS4uYzA2MzUyMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX2dzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX2dzLmgKQEAgLTEsODUgKzEsODUgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgR1NfQnVmZmVyVG9UZXh0dXJlIC9UIGdzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wNCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIA0KLS8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgIHkgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICAgeSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIA0KLS8vIFNWX1JlbmRlclRhcmdldEFycmF5SW5kZXggICAgIDAgICAgeSAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICB5ICANCi0vLw0KLWdzXzRfMA0KLWRjbF9pbnB1dF9zaXYgdlsxXVswXS54eXp3LCBwb3NpdGlvbg0KLWRjbF9pbnB1dCB2WzFdWzFdLngNCi1kY2xfaW5wdXQgdlsxXVsxXS55DQotZGNsX2lucHV0cHJpbWl0aXZlIHBvaW50IA0KLWRjbF9vdXRwdXR0b3BvbG9neSBwb2ludGxpc3QgDQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLngNCi1kY2xfb3V0cHV0X3NpdiBvMS55LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfbWF4b3V0IDENCi1tb3YgbzAueHl6dywgdlswXVswXS54eXp3DQotbW92IG8xLngsIHZbMF1bMV0ueA0KLW1vdiBvMS55LCB2WzBdWzFdLnkNCi1lbWl0IA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19HU19CdWZmZXJUb1RleHR1cmVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNTMsIDE3OCwgMTMyLCAxOTAsIDEyNSwgMTE4LCAxODUsIDM0LCAgMTk2LCAxMTQsIDIxNCwgMjA3LCAyMTksIDEzNywgMTQwLA0KLSAgICAxMzgsIDEsICAgMCwgICAwLCAgIDAsICAgMjEyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDEsICAgMCwgICAwLCAgIDg4LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDgzLCAgNzEsICAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLA0KLSAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwNCi0gICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsDQotICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMDgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDE1LCAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsDQotICAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgNzYsICA2NSwgIDg5LCAgNjksICA4MiwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDE0LCAgMCwgICAwLCAgIDEwMSwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAxMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksDQotICAgIDc5LCAgODIsICA2OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICAxMDEsIDExMCwgMTAwLCAxMDEsIDExNCwgODQsICA5NywgIDExNCwgMTAzLCAxMDEsIDExNiwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDczLCAgMTEwLCAxMDAsIDEwMSwgMTIwLCAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDAsIDAsICAgMCwNCi0gICAgMCwgICA2NCwgIDAsICAgMiwgICAwLCAgIDUwLCAgMCwgICAwLCAgIDAsICAgOTcsICAwLCAgIDAsICAgNSwgICAyNDIsIDE2LCAgMzIsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5NSwgIDAsICAgMCwgICA0LCAgIDE4LCAgMTYsICAzMiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5NSwgIDAsICAgMCwgICA0LCAgIDM0LCAgMTYsICAzMiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA5MywgIDgsICAgMCwgICAxLCAgIDkyLCAgOCwgICAwLCAgIDEsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMTgsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICA0LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk0LA0KLSAgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDMwLCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMzIsICAxNiwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwNCi0gICAgMCwgICA2LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDE2LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTksICAwLCAgIDAsICAgMSwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwNCi0gICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBHU19CdWZmZXJUb1RleHR1cmUgL1QgZ3NfNF8wIC9GaAorLy8gICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfZ3MuaCBCdWZmZXJUb1RleHR1cmUxMS5obHNsCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICAKKy8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgIHkgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICAgeSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICAKKy8vIFNWX1JlbmRlclRhcmdldEFycmF5SW5kZXggICAgIDAgICAgeSAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICB5ICAKKy8vCitnc180XzAKK2RjbF9pbnB1dF9zaXYgdlsxXVswXS54eXp3LCBwb3NpdGlvbgorZGNsX2lucHV0IHZbMV1bMV0ueAorZGNsX2lucHV0IHZbMV1bMV0ueQorZGNsX2lucHV0cHJpbWl0aXZlIHBvaW50IAorZGNsX291dHB1dHRvcG9sb2d5IHBvaW50bGlzdCAKK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uCitkY2xfb3V0cHV0IG8xLngKK2RjbF9vdXRwdXRfc2l2IG8xLnksIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX21heG91dCAxCittb3YgbzAueHl6dywgdlswXVswXS54eXp3Cittb3YgbzEueCwgdlswXVsxXS54Cittb3YgbzEueSwgdlswXVsxXS55CitlbWl0IAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfR1NfQnVmZmVyVG9UZXh0dXJlW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNTMsIDE3OCwgMTMyLCAxOTAsIDEyNSwgMTE4LCAxODUsIDM0LCAgMTk2LCAxMTQsIDIxNCwgMjA3LCAyMTksIDEzNywgMTQwLAorICAgIDEzOCwgMSwgICAwLCAgIDAsICAgMCwgICAyMTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxNDAsIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMTM2LCAxLCAgIDAsICAgMCwgICA4OCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgODAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgODMsICA3MSwgIDAsICAgMSwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsCisgICAgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsCisgICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsCisgICAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEwOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDE1LCAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLAorICAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICA3NiwgIDY1LCAgODksICA2OSwgIDgyLCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMTQsICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMTMsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksCisgICAgNzksICA4MiwgIDY4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDEwMSwgMTEwLCAxMDAsIDEwMSwgMTE0LCA4NCwgIDk3LCAgMTE0LCAxMDMsIDEwMSwgMTE2LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCA3MywgIDExMCwgMTAwLCAxMDEsIDEyMCwgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjAwLCAwLCAgIDAsCisgICAgMCwgICA2NCwgIDAsICAgMiwgICAwLCAgIDUwLCAgMCwgICAwLCAgIDAsICAgOTcsICAwLCAgIDAsICAgNSwgICAyNDIsIDE2LCAgMzIsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDk1LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDMyLCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgNCwgICAzNCwgIDE2LCAgMzIsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICA5MywgIDgsICAgMCwgICAxLCAgIDkyLCAgOCwgICAwLCAgIDEsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgNCwgICAzNCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5NCwKKyAgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMzAsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAzMiwgIDE2LAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsCisgICAgMCwgICA2LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDE2LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxOSwgIDAsICAgMCwgICAxLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLAorICAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNGYuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oCmluZGV4IGNjYjhhOTguLjViOThiNjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oCkBAIC0xLDExNSArMSwxMTUgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQnVmZmVyVG9UZXh0dXJlXzRGIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQnVmZmVyQ29weVBhcmFtcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludCBGaXJzdFBpeGVsT2Zmc2V0OyAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgIDQgW3VudXNlZF0NCi0vLyAgIHVpbnQgUGl4ZWxzUGVyUm93OyAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICA0IFNpemU6ICAgICA0IFt1bnVzZWRdDQotLy8gICB1aW50IFJvd1N0cmlkZTsgICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgOCBTaXplOiAgICAgNCBbdW51c2VkXQ0KLS8vICAgdWludCBSb3dzUGVyU2xpY2U7ICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTIgU2l6ZTogICAgIDQgW3VudXNlZF0NCi0vLyAgIGZsb2F0MiBQb3NpdGlvbk9mZnNldDsgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA4IFt1bnVzZWRdDQotLy8gICBmbG9hdDIgUG9zaXRpb25TY2FsZTsgICAgICAgICAgICAgIC8vIE9mZnNldDogICAyNCBTaXplOiAgICAgOCBbdW51c2VkXQ0KLS8vICAgaW50MiBUZXhMb2NhdGlvbk9mZnNldDsgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMzIgU2l6ZTogICAgIDggW3VudXNlZF0NCi0vLyAgIGludDIgVGV4TG9jYXRpb25TY2FsZTsgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDQwIFNpemU6ICAgICA4IFt1bnVzZWRdDQotLy8gICB1aW50IEZpcnN0U2xpY2U7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICA0OCBTaXplOiAgICAgNCBbdW51c2VkXQ0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIEJ1ZmZlcjRGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICBidWYgICAgMCAgICAgICAgMQ0KLS8vIEJ1ZmZlckNvcHlQYXJhbXMgICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfcmVzb3VyY2VfYnVmZmVyIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgY29uc3RhbnQgdjEueA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWxkIG8wLnh5encsIHYxLnh4eHgsIHQwLnh5encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQnVmZmVyVG9UZXh0dXJlXzRGW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQzLCAxMDQsIDQ2LCAgMTYxLCA1MCwgIDE4OSwgMTgyLCAxMDIsIDI0NSwgMTc3LCAxNTksIDgyLCAgNDMsICAyMTAsIDgwLA0KLSAgICA3MSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjUyLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAyLA0KLSAgICAwLCAgIDAsICAgMjI4LCAyLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDEyOCwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMiwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMiwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNjYsICAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNCwgNTIsICA3MCwgIDAsICAgNjYsICAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNCwgNjcsICAxMTEsIDExMiwgMTIxLA0KLSAgICA4MCwgIDk3LCAgMTE0LCA5NywgIDEwOSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDEsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMTQ0LCAwLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNDAsIDEsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUzLCAxLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2MywgMSwgICAwLCAgIDAsICAgMTIsICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNzYsIDEsICAgMCwgICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxOTIsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDIwOCwgMSwgICAwLCAgIDAsICAgMjQsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTkyLCAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyMjIsIDEsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLA0KLSAgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQwLCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE3LCAgMiwgICAwLA0KLSAgICAwLCAgIDQ4LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxMDUsIDExNCwgMTE1LCAxMTYsIDgwLCAgMTA1LCAxMjAsIDEwMSwgMTA4LCA3OSwgIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCAwLA0KLSAgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4MCwgIDEwNSwgMTIwLCAxMDEsIDEwOCwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MiwgIDExMSwgMTE5LCAwLCAgIDgyLCAgMTExLCAxMTksIDgzLCAgMTE2LCAxMTQsDQotICAgIDEwNSwgMTAwLCAxMDEsIDAsICAgODIsICAxMTEsIDExOSwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA4MCwgIDExMSwNCi0gICAgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgNzksICAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgMCwgICAxNzEsIDEsICAgMCwgICAzLCAgIDAsICAgMSwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLA0KLSAgICA4MywgIDk5LCAgOTcsICAxMDgsIDEwMSwgMCwgICA4NCwgIDEwMSwgMTIwLCA3NiwgIDExMSwgOTksICA5NywgIDExNiwgMTA1LCAxMTEsIDExMCwgNzksICAxMDIsDQotICAgIDEwMiwgMTE1LCAxMDEsIDExNiwgMCwgICAxLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCA3NiwgIDExMSwgOTksICA5NywgIDExNiwgMTA1LCAxMTEsIDExMCwgODMsICA5OSwgIDk3LCAgMTA4LCAxMDEsIDAsDQotICAgIDcwLCAgMTA1LCAxMTQsIDExNSwgMTE2LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwNCi0gICAgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsDQotICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LA0KLSAgICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsDQotICAgIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgOTYsICAwLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAyNCwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgOCwgICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgOCwgICAwLCAgIDMsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLA0KLSAgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNiwgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQnVmZmVyVG9UZXh0dXJlXzRGIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRmLmggQnVmZmVyVG9UZXh0dXJlMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQnVmZmVyQ29weVBhcmFtcworLy8geworLy8KKy8vICAgdWludCBGaXJzdFBpeGVsT2Zmc2V0OyAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgIDQgW3VudXNlZF0KKy8vICAgdWludCBQaXhlbHNQZXJSb3c7ICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDQgU2l6ZTogICAgIDQgW3VudXNlZF0KKy8vICAgdWludCBSb3dTdHJpZGU7ICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDggU2l6ZTogICAgIDQgW3VudXNlZF0KKy8vICAgdWludCBSb3dzUGVyU2xpY2U7ICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTIgU2l6ZTogICAgIDQgW3VudXNlZF0KKy8vICAgZmxvYXQyIFBvc2l0aW9uT2Zmc2V0OyAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDggW3VudXNlZF0KKy8vICAgZmxvYXQyIFBvc2l0aW9uU2NhbGU7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMjQgU2l6ZTogICAgIDggW3VudXNlZF0KKy8vICAgaW50MiBUZXhMb2NhdGlvbk9mZnNldDsgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMzIgU2l6ZTogICAgIDggW3VudXNlZF0KKy8vICAgaW50MiBUZXhMb2NhdGlvblNjYWxlOyAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgNDAgU2l6ZTogICAgIDggW3VudXNlZF0KKy8vICAgdWludCBGaXJzdFNsaWNlOyAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgNDggU2l6ZTogICAgIDQgW3VudXNlZF0KKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBCdWZmZXI0RiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgYnVmICAgIDAgICAgICAgIDEKKy8vIEJ1ZmZlckNvcHlQYXJhbXMgICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UYXJnZXQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX3Jlc291cmNlX2J1ZmZlciAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgY29uc3RhbnQgdjEueAorZGNsX291dHB1dCBvMC54eXp3CitsZCBvMC54eXp3LCB2MS54eHh4LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19CdWZmZXJUb1RleHR1cmVfNEZbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE0MywgMTA0LCA0NiwgIDE2MSwgNTAsICAxODksIDE4MiwgMTAyLCAyNDUsIDE3NywgMTU5LCA4MiwgIDQzLCAgMjEwLCA4MCwKKyAgICA3MSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjUyLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAyLAorICAgIDAsICAgMCwgICAyMjgsIDIsICAgMCwgICAwLCAgIDI0LCAgMywgICAwLCAgIDAsICAgMTI4LCAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLAorICAgIDIsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMiwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA2NiwgIDExNywgMTAyLCAxMDIsIDEwMSwgMTE0LCA1MiwgIDcwLCAgMCwgICA2NiwgIDExNywgMTAyLCAxMDIsIDEwMSwgMTE0LCA2NywgIDExMSwgMTEyLCAxMjEsCisgICAgODAsICA5NywgIDExNCwgOTcsICAxMDksIDExNSwgMCwgICAxNzEsIDE3MSwgMTAxLCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDE0NCwgMCwKKyAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTQwLCAxLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUzLCAxLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYzLCAxLCAgIDAsICAgMCwgICAxMiwgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTc2LCAxLCAgIDAsICAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxOTIsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMjA4LCAxLCAgIDAsICAgMCwgICAyNCwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxOTIsIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjIyLCAxLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLAorICAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcsICAyLCAgIDAsCisgICAgMCwgICA0OCwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxMDUsIDExNCwgMTE1LCAxMTYsIDgwLCAgMTA1LCAxMjAsIDEwMSwgMTA4LCA3OSwgIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCAwLAorICAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODAsICAxMDUsIDEyMCwgMTAxLCAxMDgsIDExNSwgODAsICAxMDEsIDExNCwgODIsICAxMTEsIDExOSwgMCwgICA4MiwgIDExMSwgMTE5LCA4MywgIDExNiwgMTE0LAorICAgIDEwNSwgMTAwLCAxMDEsIDAsICAgODIsICAxMTEsIDExOSwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA4MCwgIDExMSwKKyAgICAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA3OSwgIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCAwLCAgIDE3MSwgMSwgICAwLCAgIDMsICAgMCwgICAxLAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwKKyAgICA4MywgIDk5LCAgOTcsICAxMDgsIDEwMSwgMCwgICA4NCwgIDEwMSwgMTIwLCA3NiwgIDExMSwgOTksICA5NywgIDExNiwgMTA1LCAxMTEsIDExMCwgNzksICAxMDIsCisgICAgMTAyLCAxMTUsIDEwMSwgMTE2LCAwLCAgIDEsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgNzYsICAxMTEsIDk5LCAgOTcsICAxMTYsIDEwNSwgMTExLCAxMTAsIDgzLCAgOTksICA5NywgIDEwOCwgMTAxLCAwLAorICAgIDcwLCAgMTA1LCAxMTQsIDExNSwgMTE2LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwKKyAgICAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwKKyAgICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsCisgICAgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksCisgICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA5NywgIDExNCwgMTAzLCAxMDEsIDExNiwgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA5NiwgIDAsCisgICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMjQsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgOCwgICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICA4LCAgIDAsICAgMywgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsCisgICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNiwgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRpLmgKaW5kZXggMDc4NzFhYS4uYjM2OTJjOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRpLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRpLmgKQEAgLTEsNjkgKzEsNjkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQnVmZmVyVG9UZXh0dXJlXzRJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBCdWZmZXI0SSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgYnVmICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RhcmdldCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfYnVmZmVyIChzaW50LHNpbnQsc2ludCxzaW50KSB0MA0KLWRjbF9pbnB1dF9wcyBjb25zdGFudCB2MS54DQotZGNsX291dHB1dCBvMC54eXp3DQotbGQgbzAueHl6dywgdjEueHh4eCwgdDAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19CdWZmZXJUb1RleHR1cmVfNElbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMDQsIDE0MiwgMTY1LCAyMTIsIDcsICAgNjQsICA0NCwgIDUzLCAgNjgsICAxMTcsIDEzNSwgMjE2LCA4NywgIDE2NywgMTQ4LA0KLSAgICAxOTIsIDEsICAgMCwgICAwLCAgIDAsICAgMjAsICAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDY2LCAgMTE3LCAxMDIsIDEwMiwgMTAxLCAxMTQsIDUyLCAgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwNCi0gICAgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLA0KLSAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywNCi0gICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsDQotICAgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwNCi0gICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA5NywgIDExNCwgMTAzLCAxMDEsIDExNiwgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LA0KLSAgICA4MiwgIDgwLCAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAyMCwgIDAsICAgMCwgICAwLCAgIDg4LCAgOCwgICAwLCAgIDQsICAgMCwgICAxMTIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLCAgIDAsICAgOTgsICA4LCAgIDAsICAgMywgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19CdWZmZXJUb1RleHR1cmVfNEkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNGkuaCBCdWZmZXJUb1RleHR1cmUxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBCdWZmZXI0SSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgYnVmICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV9idWZmZXIgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgY29uc3RhbnQgdjEueAorZGNsX291dHB1dCBvMC54eXp3CitsZCBvMC54eXp3LCB2MS54eHh4LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19CdWZmZXJUb1RleHR1cmVfNElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEwNCwgMTQyLCAxNjUsIDIxMiwgNywgICA2NCwgIDQ0LCAgNTMsICA2OCwgIDExNywgMTM1LCAyMTYsIDg3LCAgMTY3LCAxNDgsCisgICAgMTkyLCAxLCAgIDAsICAgMCwgICAwLCAgIDIwLCAgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgNjYsICAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNCwgNTIsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwKKyAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywKKyAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDgwLCAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAyMCwgIDAsICAgMCwgICAwLCAgIDg4LCAgOCwgICAwLCAgIDQsICAgMCwgICAxMTIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDgsICAgMCwgICAzLCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzR1aS5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzR1aS5oCmluZGV4IGI2NjAwOWUuLjllYjYzNTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmgKQEAgLTEsNjkgKzEsNjkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggQnVmZmVyVG9UZXh0dXJlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIEJ1ZmZlcjRVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICBidWYgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV9idWZmZXIgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGNvbnN0YW50IHYxLngNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1sZCBvMC54eXp3LCB2MS54eHh4LCB0MC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0J1ZmZlclRvVGV4dHVyZV80VUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNTAsIDU0LCAgMjM5LCAxMjksIDEwNSwgNTcsICAxMDMsIDI4LCAgOCwgICAxNzUsIDE2OCwgMTE4LCAxNTMsIDkyLCAgMjMzLA0KLSAgICA5OCwgIDEsICAgMCwgICAwLCAgIDAsICAgMjAsICAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDY2LCAgMTE3LCAxMDIsIDEwMiwgMTAxLCAxMTQsIDUyLCAgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywNCi0gICAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsDQotICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICA4MCwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMjAsICAwLCAgIDAsICAgMCwgICA4OCwgIDgsICAgMCwgICA0LCAgIDAsICAgMTEyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgOCwgICAwLCAgIDMsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCBCdWZmZXJUb1RleHR1cmUxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBCdWZmZXI0VUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgYnVmICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV9idWZmZXIgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwCitkY2xfaW5wdXRfcHMgY29uc3RhbnQgdjEueAorZGNsX291dHB1dCBvMC54eXp3CitsZCBvMC54eXp3LCB2MS54eHh4LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19CdWZmZXJUb1RleHR1cmVfNFVJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNTAsIDU0LCAgMjM5LCAxMjksIDEwNSwgNTcsICAxMDMsIDI4LCAgOCwgICAxNzUsIDE2OCwgMTE4LCAxNTMsIDkyLCAgMjMzLAorICAgIDk4LCAgMSwgICAwLCAgIDAsICAgMCwgICAyMCwgIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDY2LCAgMTE3LCAxMDIsIDEwMiwgMTAxLCAxMTQsIDUyLCAgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwKKyAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA5NywgIDExNCwgMTAzLCAxMDEsIDExNiwgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LAorICAgIDgyLCAgODAsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDIwLCAgMCwgICAwLCAgIDAsICAgODgsICA4LCAgIDAsICAgNCwgICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgOCwgICAwLCAgIDMsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfdnMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oCmluZGV4IDg4MWE5NzUuLjQxZjFjMDMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oCkBAIC0xLDE1MCArMSwxNTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgVlNfQnVmZmVyVG9UZXh0dXJlIC9UIHZzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQnVmZmVyQ29weVBhcmFtcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludCBGaXJzdFBpeGVsT2Zmc2V0OyAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgIDQNCi0vLyAgIHVpbnQgUGl4ZWxzUGVyUm93OyAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICA0IFNpemU6ICAgICA0DQotLy8gICB1aW50IFJvd1N0cmlkZTsgICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgOCBTaXplOiAgICAgNA0KLS8vICAgdWludCBSb3dzUGVyU2xpY2U7ICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTIgU2l6ZTogICAgIDQNCi0vLyAgIGZsb2F0MiBQb3NpdGlvbk9mZnNldDsgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA4DQotLy8gICBmbG9hdDIgUG9zaXRpb25TY2FsZTsgICAgICAgICAgICAgIC8vIE9mZnNldDogICAyNCBTaXplOiAgICAgOA0KLS8vICAgaW50MiBUZXhMb2NhdGlvbk9mZnNldDsgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMzIgU2l6ZTogICAgIDggW3VudXNlZF0NCi0vLyAgIGludDIgVGV4TG9jYXRpb25TY2FsZTsgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDQwIFNpemU6ICAgICA4IFt1bnVzZWRdDQotLy8gICB1aW50IEZpcnN0U2xpY2U7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICA0OCBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIEJ1ZmZlckNvcHlQYXJhbXMgICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9WZXJ0ZXhJRCAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDAgICBWRVJUSUQgICB1aW50ICAgeCAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICANCi0vLyBMQVlFUiAgICAgICAgICAgICAgICAgICAgMCAgICB5ICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgIHkgIA0KLS8vDQotdnNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFs0XSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9pbnB1dF9zZ3YgdjAueCwgdmVydGV4X2lkDQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLngNCi1kY2xfb3V0cHV0IG8xLnkNCi1kY2xfdGVtcHMgMg0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1pbXVsIG51bGwsIHIwLnh5LCBjYjBbMF0ueXp5eSwgY2IwWzBdLnd3d3cNCi11ZGl2IHIwLnosIG51bGwsIHYwLngsIHIwLngNCi1pbWFkIHIwLngsIC1yMC56LCByMC54LCB2MC54DQotaW1hZCByMC55LCByMC56LCByMC55LCBjYjBbMF0ueA0KLWlhZGQgbzEueSwgY2IwWzNdLngsIHIwLnoNCi11ZGl2IHIwLnosIG51bGwsIHIwLngsIGNiMFswXS55DQotaW1hZCByMC54LCAtcjAueiwgY2IwWzBdLnksIHIwLngNCi11dG9mIHIxLnh5LCByMC54enh4DQotaW1hZCByMC55LCByMC56LCBjYjBbMF0ueiwgcjAueQ0KLWlhZGQgbzEueCwgcjAueSwgcjAueA0KLW1hZCBvMC54eSwgY2IwWzFdLnp3enosIHIxLnh5eHgsIGNiMFsxXS54eXh4DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19WU19CdWZmZXJUb1RleHR1cmVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMTgsIDY1LCAgMjQ0LCAyMzIsIDExNiwgMTM3LCAxNzUsIDEyNiwgODIsICAyMzAsIDE0MCwgMTcsICAxNzgsIDI0OSwgMjIzLA0KLSAgICAzMSwgIDEsICAgMCwgICAwLCAgIDAsICAgMTUyLCA1LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTAwLCAyLA0KLSAgICAwLCAgIDAsICAgMTUyLCAyLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDI4LCAgNSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0MCwNCi0gICAgMiwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI0NCwgMSwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjYsICAxMTcsIDEwMiwgMTAyLCAxMDEsIDExNCwgNjcsICAxMTEsIDExMiwgMTIxLCA4MCwgIDk3LCAgMTE0LA0KLSAgICA5NywgIDEwOSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAwLA0KLSAgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAwLCAxLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODQsICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMTMsIDEsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIzLCAxLCAgIDAsICAgMCwgICAxMiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODQsICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEzNiwgMSwgICAwLCAgIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNjgsDQotICAgIDEsICAgMCwgICAwLCAgIDI0LCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTgyLCAxLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMjAwLCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMSwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyMzMsIDEsICAgMCwgICAwLCAgIDQ4LA0KLSAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODQsICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEwNSwgMTE0LCAxMTUsIDExNiwgODAsICAxMDUsIDEyMCwgMTAxLCAxMDgsIDc5LCAgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsDQotICAgIDE3MSwgMCwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDEwNSwNCi0gICAgMTIwLCAxMDEsIDEwOCwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MiwgIDExMSwgMTE5LCAwLCAgIDgyLCAgMTExLCAxMTksIDgzLCAgMTE2LCAxMTQsIDEwNSwgMTAwLA0KLSAgICAxMDEsIDAsICAgODIsICAxMTEsIDExOSwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA4MCwgIDExMSwgMTE1LCAxMDUsDQotICAgIDExNiwgMTA1LCAxMTEsIDExMCwgNzksICAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgMCwgICAxNzEsIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgIDk5LA0KLSAgICA5NywgIDEwOCwgMTAxLCAwLCAgIDg0LCAgMTAxLCAxMjAsIDc2LCAgMTExLCA5OSwgIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLCA3OSwgIDEwMiwgMTAyLCAxMTUsDQotICAgIDEwMSwgMTE2LCAwLCAgIDEsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg0LCAgMTAxLCAxMjAsIDc2LCAgMTExLCA5OSwgIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLCA4MywgIDk5LCAgOTcsICAxMDgsIDEwMSwgMCwgICA3MCwgIDEwNSwNCi0gICAgMTE0LCAxMTUsIDExNiwgODMsICAxMDgsIDEwNSwgOTksICAxMDEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsDQotICAgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwNCi0gICAgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksDQotICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg2LCAgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDczLCAgNjgsICAwLCAgIDc5LA0KLSAgICA4MywgIDcxLCAgNzgsICAxMDgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMTMsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICAxMTEsIDExNSwgMTA1LCAxMTYsDQotICAgIDEwNSwgMTExLCAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgNzYsICA2NSwgIDg5LCAgNjksICA4MiwgIDAsDQotICAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA4LCAgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsICAgMTMwLCAwLCAgIDAsICAgMCwgICA4OSwgIDAsDQotICAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDAsICAgMCwgICA0LCAgIDE4LA0KLSAgICAxNiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMzQsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAzOCwgIDAsICAgMCwgICAxMCwNCi0gICAgMCwgICAyMDgsIDAsICAgMCwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUwLCAxMzMsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTQzLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc4LCAgMCwNCi0gICAgMCwgICA4LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDM1LCAgMCwgICAwLCAgIDEwLCAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAxMjgsIDY1LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzUsICAwLCAgIDAsICAgMTAsICAzNCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMwLCAgMCwgICAwLCAgIDgsDQotICAgIDM0LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc4LCAgMCwgICAwLCAgIDksICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDIwOCwgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNiwgIDEyOCwgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzUsICAwLCAgIDAsICAgMTEsICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDQyLCAgMCwgICAxNiwgIDEyOCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsDQotICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzNSwgIDAsICAgMCwgICAxMCwgIDM0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDEyOCwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMwLCAgMCwgICAwLA0KLSAgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MCwgIDAsICAgMCwgICAxMSwgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyMzAsDQotICAgIDEzOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LA0KLSAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBWU19CdWZmZXJUb1RleHR1cmUgL1QgdnNfNF8wIC9GaAorLy8gICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfdnMuaCBCdWZmZXJUb1RleHR1cmUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBCdWZmZXJDb3B5UGFyYW1zCisvLyB7CisvLworLy8gICB1aW50IEZpcnN0UGl4ZWxPZmZzZXQ7ICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAgNAorLy8gICB1aW50IFBpeGVsc1BlclJvdzsgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgNCBTaXplOiAgICAgNAorLy8gICB1aW50IFJvd1N0cmlkZTsgICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgOCBTaXplOiAgICAgNAorLy8gICB1aW50IFJvd3NQZXJTbGljZTsgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxMiBTaXplOiAgICAgNAorLy8gICBmbG9hdDIgUG9zaXRpb25PZmZzZXQ7ICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgOAorLy8gICBmbG9hdDIgUG9zaXRpb25TY2FsZTsgICAgICAgICAgICAgIC8vIE9mZnNldDogICAyNCBTaXplOiAgICAgOAorLy8gICBpbnQyIFRleExvY2F0aW9uT2Zmc2V0OyAgICAgICAgICAgIC8vIE9mZnNldDogICAzMiBTaXplOiAgICAgOCBbdW51c2VkXQorLy8gICBpbnQyIFRleExvY2F0aW9uU2NhbGU7ICAgICAgICAgICAgIC8vIE9mZnNldDogICA0MCBTaXplOiAgICAgOCBbdW51c2VkXQorLy8gICB1aW50IEZpcnN0U2xpY2U7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICA0OCBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIEJ1ZmZlckNvcHlQYXJhbXMgICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVmVydGV4SUQgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAwICAgVkVSVElEICAgdWludCAgIHggICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICAgIE5PTkUgICB1aW50ICAgeCAgIAorLy8gTEFZRVIgICAgICAgICAgICAgICAgICAgIDAgICAgeSAgICAgICAgICAxICAgICBOT05FICAgdWludCAgICB5ICAKKy8vCit2c180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbNF0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9pbnB1dF9zZ3YgdjAueCwgdmVydGV4X2lkCitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbgorZGNsX291dHB1dCBvMS54CitkY2xfb3V0cHV0IG8xLnkKK2RjbF90ZW1wcyAyCittb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApCitpbXVsIG51bGwsIHIwLnh5LCBjYjBbMF0ueXp5eSwgY2IwWzBdLnd3d3cKK3VkaXYgcjAueiwgbnVsbCwgdjAueCwgcjAueAoraW1hZCByMC54LCAtcjAueiwgcjAueCwgdjAueAoraW1hZCByMC55LCByMC56LCByMC55LCBjYjBbMF0ueAoraWFkZCBvMS55LCBjYjBbM10ueCwgcjAuegordWRpdiByMC56LCBudWxsLCByMC54LCBjYjBbMF0ueQoraW1hZCByMC54LCAtcjAueiwgY2IwWzBdLnksIHIwLngKK3V0b2YgcjEueHksIHIwLnh6eHgKK2ltYWQgcjAueSwgcjAueiwgY2IwWzBdLnosIHIwLnkKK2lhZGQgbzEueCwgcjAueSwgcjAueAorbWFkIG8wLnh5LCBjYjBbMV0uend6eiwgcjEueHl4eCwgY2IwWzFdLnh5eHgKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19WU19CdWZmZXJUb1RleHR1cmVbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExOCwgNjUsICAyNDQsIDIzMiwgMTE2LCAxMzcsIDE3NSwgMTI2LCA4MiwgIDIzMCwgMTQwLCAxNywgIDE3OCwgMjQ5LCAyMjMsCisgICAgMzEsICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgNSwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDEwMCwgMiwKKyAgICAwLCAgIDAsICAgMTUyLCAyLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDI4LCAgNSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0MCwKKyAgICAyLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTQsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyNDQsIDEsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NiwgIDExNywgMTAyLCAxMDIsIDEwMSwgMTE0LCA2NywgIDExMSwgMTEyLCAxMjEsIDgwLCAgOTcsICAxMTQsCisgICAgOTcsICAxMDksIDExNSwgMCwgICAxNzEsIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDAsIDEsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMTMsIDEsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDg0LCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjMsIDEsICAgMCwgICAwLCAgIDEyLCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMzYsIDEsICAgMCwgICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNjgsCisgICAgMSwgICAwLCAgIDAsICAgMjQsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE4MiwgMSwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMjAwLCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMSwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjAwLCAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIzMywgMSwgICAwLCAgIDAsICAgNDgsCisgICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEwNSwgMTE0LCAxMTUsIDExNiwgODAsICAxMDUsIDEyMCwgMTAxLCAxMDgsIDc5LCAgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsCisgICAgMTcxLCAwLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMTA1LAorICAgIDEyMCwgMTAxLCAxMDgsIDExNSwgODAsICAxMDEsIDExNCwgODIsICAxMTEsIDExOSwgMCwgICA4MiwgIDExMSwgMTE5LCA4MywgIDExNiwgMTE0LCAxMDUsIDEwMCwKKyAgICAxMDEsIDAsICAgODIsICAxMTEsIDExOSwgMTE1LCA4MCwgIDEwMSwgMTE0LCA4MywgIDEwOCwgMTA1LCA5OSwgIDEwMSwgMCwgICA4MCwgIDExMSwgMTE1LCAxMDUsCisgICAgMTE2LCAxMDUsIDExMSwgMTEwLCA3OSwgIDEwMiwgMTAyLCAxMTUsIDEwMSwgMTE2LCAwLCAgIDE3MSwgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgODMsICA5OSwKKyAgICA5NywgIDEwOCwgMTAxLCAwLCAgIDg0LCAgMTAxLCAxMjAsIDc2LCAgMTExLCA5OSwgIDk3LCAgMTE2LCAxMDUsIDExMSwgMTEwLCA3OSwgIDEwMiwgMTAyLCAxMTUsCisgICAgMTAxLCAxMTYsIDAsICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NCwgIDEwMSwgMTIwLCA3NiwgIDExMSwgOTksICA5NywgIDExNiwgMTA1LCAxMTEsIDExMCwgODMsICA5OSwgIDk3LCAgMTA4LCAxMDEsIDAsICAgNzAsICAxMDUsCisgICAgMTE0LCAxMTUsIDExNiwgODMsICAxMDgsIDEwNSwgOTksICAxMDEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsCisgICAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LAorICAgIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NiwgIDEwMSwgMTE0LCAxMTYsIDEwMSwgMTIwLCA3MywgIDY4LCAgMCwgICA3OSwKKyAgICA4MywgIDcxLCAgNzgsICAxMDgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAxMywgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwKKyAgICAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDc2LCAgNjUsICA4OSwgIDY5LCAgODIsICAwLAorICAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA4LCAgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsICAgMTMwLCAwLCAgIDAsICAgMCwgICA4OSwgIDAsCisgICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMCwgICAwLCAgIDQsICAgMTgsCisgICAgMTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwMywgMCwgICAwLCAgIDQsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAzNCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAzOCwgIDAsICAgMCwgICAxMCwKKyAgICAwLCAgIDIwOCwgMCwgICAwLCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTAsIDEzMywgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE0MywgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3OCwgIDAsCisgICAgMCwgICA4LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzUsICAwLCAgIDAsICAgMTAsICAxOCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMTI4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzUsICAwLCAgIDAsICAgMTAsICAzNCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzMCwgIDAsICAgMCwgICA4LAorICAgIDM0LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzgsICAwLCAgIDAsICAgOSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyMDgsIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzUsICAwLCAgIDAsICAgMTEsICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNDIsICAwLCAgIDE2LCAgMTI4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLAorICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzNSwgIDAsICAgMCwgICAxMCwgIDM0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMTI4LCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzMCwgIDAsICAgMCwKKyAgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUwLCAgMCwgICAwLCAgIDExLCAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIzMCwKKyAgICAxMzgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFfZmw5dnMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExX2ZsOXZzLmgKaW5kZXggNDk5OGM0Ny4uNWYwNGJjYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFfZmw5dnMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMV9mbDl2cy5oCkBAIC0xLDc1ICsxLDc1IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFZTX0NsZWFyX0ZMOSAvVCB2c180XzBfbGV2ZWxfOV8zIC9GaA0KLS8vICAgIGNvbXBpbGVkXGNsZWFyMTFfZmw5dnMuaCBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICBOT05FICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBSdW50aW1lIGdlbmVyYXRlZCBjb25zdGFudCBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBSZWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnQgRGVzY3JpcHRpb24NCi0vLyAtLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gYzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXggU2hhZGVyIHBvc2l0aW9uIG9mZnNldA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHZzXzJfeA0KLSAgICBkY2xfdGV4Y29vcmQgdjANCi0gICAgbWFkIG9Qb3MueHksIHYwLncsIGMwLCB2MA0KLSAgICBtb3Ygb1Bvcy56dywgdjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eXp3DQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1tb3YgbzAueHl6dywgdjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19WU19DbGVhcl9GTDlbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsIDY3LCA3MCwgIDIyNSwgMjIsICA4MiwgIDE5OCwgMTcxLCAyMTAsIDEwNCwgODIsICAyMzMsIDIyNywgMTczLCAyMDYsIDQ4LCAgMjUwLCAxMDksDQotICAgIDEsICAgMCwgIDAsICAwLCAgMjgsICAyLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsICAgMCwNCi0gICAgMjI0LCAwLCAgMCwgIDAsICA5MiwgIDEsICAgMCwgICAwLCAgIDE4MCwgMSwgICAwLCAgIDAsICAgMjMyLCAxLCAgIDAsICAgMCwgICA2NSwgIDExMSwgMTEwLCA1NywNCi0gICAgOTIsICAwLCAgMCwgIDAsICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTQsIDI1NSwgNTIsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAzNiwgMCwgIDAsICAgMCwgICAzNiwgIDAsICAgMCwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgMzYsICAwLCAgIDEsICAgMCwgICAzNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAwLCAgMSwgICAyLCAgIDI1NCwgMjU1LCAzMSwgIDAsICAgMCwgICAyLCAgIDUsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDE1LCAgMTQ0LA0KLSAgICA0LCAgIDAsICAwLCAgNCwgIDAsICAgMCwgICAzLCAgIDE5MiwgMCwgICAwLCAgIDI1NSwgMTQ0LCAwLCAgIDAsICAgMjI4LCAxNjAsIDAsICAgMCwgICAyMjgsIDE0NCwNCi0gICAgMSwgICAwLCAgMCwgIDIsICAwLCAgIDAsICAgMTIsICAxOTIsIDAsICAgMCwgICAyMjgsIDE0NCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwNCi0gICAgNjAsICAwLCAgMCwgIDAsICA2NCwgIDAsICAgMSwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMywgICAyNDIsIDE2LCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgMCwgIDEwMywgMCwgICAwLCAgIDQsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgIDAsICA1LCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMzAsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNjIsICAwLCAgMCwgIDEsICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgMCwgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgIDAsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMjU0LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDI4LCAgMCwgIDAsICAwLCAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsDQotICAgIDgzLCAgNzYsIDMyLCA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsDQotICAgIDQ2LCAgNTAsIDU3LCA0NiwgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDQ0LCAgMCwgIDAsICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAxNSwgIDAsICAgMCwgICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgNzksIDc4LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA4LCAgIDAsICAwLCAgMCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAwLCAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgVlNfQ2xlYXJfRkw5IC9UIHZzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxjbGVhcjExX2ZsOXZzLmggQ2xlYXIxMS5obHNsCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgIE5PTkUgIGZsb2F0ICAgeHl6dworLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encKKy8vCisvLworLy8gUnVudGltZSBnZW5lcmF0ZWQgY29uc3RhbnQgbWFwcGluZ3M6CisvLworLy8gVGFyZ2V0IFJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudCBEZXNjcmlwdGlvbgorLy8gLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gYzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXggU2hhZGVyIHBvc2l0aW9uIG9mZnNldAorLy8KKy8vCisvLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOgorLy8KKyAgICB2c18yX3gKKyAgICBkY2xfdGV4Y29vcmQgdjAKKyAgICBtYWQgb1Bvcy54eSwgdjAudywgYzAsIHYwCisgICAgbW92IG9Qb3MuencsIHYwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCit2c180XzAKK2RjbF9pbnB1dCB2MC54eXp3CitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbgorbW92IG8wLnh5encsIHYwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1ZTX0NsZWFyX0ZMOVtdID0geworICAgIDY4LCAgODgsIDY2LCA2NywgNzAsICAyMjUsIDIyLCAgODIsICAxOTgsIDE3MSwgMjEwLCAxMDQsIDgyLCAgMjMzLCAyMjcsIDE3MywgMjA2LCA0OCwgIDI1MCwgMTA5LAorICAgIDEsICAgMCwgIDAsICAwLCAgMjgsICAyLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsICAgMCwKKyAgICAyMjQsIDAsICAwLCAgMCwgIDkyLCAgMSwgICAwLCAgIDAsICAgMTgwLCAxLCAgIDAsICAgMCwgICAyMzIsIDEsICAgMCwgICAwLCAgIDY1LCAgMTExLCAxMTAsIDU3LAorICAgIDkyLCAgMCwgIDAsICAwLCAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU0LCAyNTUsIDUyLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAzNiwgMCwgIDAsICAgMCwgICAzNiwgIDAsICAgMCwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgMzYsICAwLCAgIDEsICAgMCwgICAzNiwgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAxLCAgIDIsICAgMjU0LCAyNTUsIDMxLCAgMCwgICAwLCAgIDIsICAgNSwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMTUsICAxNDQsCisgICAgNCwgICAwLCAgMCwgIDQsICAwLCAgIDAsICAgMywgICAxOTIsIDAsICAgMCwgICAyNTUsIDE0NCwgMCwgICAwLCAgIDIyOCwgMTYwLCAwLCAgIDAsICAgMjI4LCAxNDQsCisgICAgMSwgICAwLCAgMCwgIDIsICAwLCAgIDAsICAgMTIsICAxOTIsIDAsICAgMCwgICAyMjgsIDE0NCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwKKyAgICA2MCwgIDAsICAwLCAgMCwgIDY0LCAgMCwgICAxLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5NSwgIDAsICAgMCwgICAzLCAgIDI0MiwgMTYsICAxNiwgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAxMDMsIDAsICAgMCwgICA0LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgIDAsICA1LCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMzAsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA2MiwgIDAsICAwLCAgMSwgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgIDAsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLAorICAgIDI4LCAgMCwgIDAsICAwLCAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsCisgICAgODMsICA3NiwgMzIsIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywKKyAgICA0NiwgIDUwLCA1NywgNDYsIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDQ0LCAgMCwgIDAsICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDE1LCAgMCwgICAwLCAgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsIDc5LCA3OCwgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA4LCAgIDAsICAwLCAgMCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgIDAsICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExbXVsdGl2aWV3Z3MuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExbXVsdGl2aWV3Z3MuaAppbmRleCBmYTEzYWM2Li40ZTU4MWEyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMW11bHRpdmlld2dzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFtdWx0aXZpZXdncy5oCkBAIC0xLDg4ICsxLDg4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIEdTX011bHRpdmlld19DbGVhciAvVCBnc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcY2xlYXIxMW11bHRpdmlld2dzLmggQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1JlbmRlclRhcmdldEFycmF5SW5kZXggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLw0KLWdzXzRfMA0KLWRjbF9pbnB1dF9zaXYgdlszXVswXS54eXp3LCBwb3NpdGlvbg0KLWRjbF9pbnB1dCB2WzNdWzFdLngNCi1kY2xfdGVtcHMgMQ0KLWRjbF9pbnB1dHByaW1pdGl2ZSB0cmlhbmdsZSANCi1kY2xfb3V0cHV0dG9wb2xvZ3kgdHJpYW5nbGVzdHJpcCANCi1kY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KLWRjbF9vdXRwdXRfc2l2IG8xLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9tYXhvdXQgMw0KLW1vdiByMC54LCBsKDApDQotbG9vcCANCi0gIGlnZSByMC55LCByMC54LCBsKDMpDQotICBicmVha2NfbnogcjAueQ0KLSAgbW92IG8wLnh5encsIHZbcjAueCArIDBdWzBdLnh5encNCi0gIG1vdiBvMS54LCB2W3IwLnggKyAwXVsxXS54DQotICBlbWl0IA0KLSAgaWFkZCByMC54LCByMC54LCBsKDEpDQotZW5kbG9vcCANCi1jdXQgDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19HU19NdWx0aXZpZXdfQ2xlYXJbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NywgIDIxMywgMTE2LCAyMDUsIDE3MCwgNjAsIDEzMiwgOTMsICAxMzgsIDEwMCwgOTEsICAxNywgIDIzNywgMTM4LCA4LA0KLSAgICAyMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMjE2LCAyLCAgIDAsICAgMCwgICA1LCAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxNDAsIDAsDQotICAgIDAsICAgMCwgICAyMjgsIDAsICAgMCwgICAwLCAgIDc2LCAgMSwgICAwLCAgIDAsICA5MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgODAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDgzLCAgNzEsICAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsDQotICAgIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsDQotICAgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsDQotICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAxNSwgIDAsICAgMCwgICA2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLA0KLSAgICAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICA5NiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsIDgwLCAgMTExLCAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLA0KLSAgICA4MywgIDg2LCAgOTUsICA4MiwgIDEwMSwgMTEwLCAxMDAsIDEwMSwgMTE0LCA4NCwgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDY1LCAgMTE0LCAxMTQsIDk3LA0KLSAgICAxMjEsIDczLCAgMTEwLCAxMDAsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCA4MywgNzIsICA2OCwgIDgyLCAgOCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsDQotICAgIDIsICAgMCwgICA2NiwgIDAsICAgMCwgICAwLCAgIDk3LCAgMCwgICAwLCAgIDUsICAyNDIsIDE2LCAgMzIsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5NSwgIDAsICAgMCwgIDQsICAgMTgsICAxNiwgIDMyLCAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgMCwgICAwLCAgIDkzLCAgMjQsICAwLCAgIDEsICAgOTIsICA0MCwgIDAsDQotICAgIDEsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMywgMCwNCi0gICAgMCwgICA0LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDQsICAgMCwgICAwLCAgIDAsICAgOTQsICAwLCAgIDAsICAgMiwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMCwgICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNDgsICAwLCAgIDAsICAgMSwgICAzMywgIDAsICAwLCAgIDcsICAgMzQsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDY0LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA0LCAgIDMsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAwLCAgIDAsICAgNywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMzAsICAxNjAsIDAsICAgMTAsICAwLCAgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYwLCAwLCAgIDEwLCAgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTksIDAsICAgMCwgICAxLCAgIDMwLCAgMCwgICAwLCAgIDcsICAgMTgsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDIyLCAgMCwgICAwLCAgIDEsICAgOSwgICAwLCAgIDAsICAxLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsDQotICAgIDExNiwgMCwgICAwLCAgIDAsICAgMTEsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMSwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBHU19NdWx0aXZpZXdfQ2xlYXIgL1QgZ3NfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcY2xlYXIxMW11bHRpdmlld2dzLmggQ2xlYXIxMS5obHNsCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3CisvLyBTVl9SZW5kZXJUYXJnZXRBcnJheUluZGV4ICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLworZ3NfNF8wCitkY2xfaW5wdXRfc2l2IHZbM11bMF0ueHl6dywgcG9zaXRpb24KK2RjbF9pbnB1dCB2WzNdWzFdLngKK2RjbF90ZW1wcyAxCitkY2xfaW5wdXRwcmltaXRpdmUgdHJpYW5nbGUgCitkY2xfb3V0cHV0dG9wb2xvZ3kgdHJpYW5nbGVzdHJpcCAKK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uCitkY2xfb3V0cHV0X3NpdiBvMS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9tYXhvdXQgMworbW92IHIwLngsIGwoMCkKK2xvb3AgCisgIGlnZSByMC55LCByMC54LCBsKDMpCisgIGJyZWFrY19ueiByMC55CisgIG1vdiBvMC54eXp3LCB2W3IwLnggKyAwXVswXS54eXp3CisgIG1vdiBvMS54LCB2W3IwLnggKyAwXVsxXS54CisgIGVtaXQgCisgIGlhZGQgcjAueCwgcjAueCwgbCgxKQorZW5kbG9vcCAKK2N1dCAKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19HU19NdWx0aXZpZXdfQ2xlYXJbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDk3LCAgMjEzLCAxMTYsIDIwNSwgMTcwLCA2MCwgMTMyLCA5MywgIDEzOCwgMTAwLCA5MSwgIDE3LCAgMjM3LCAxMzgsIDgsCisgICAgMjI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMiwgICAwLCAgIDAsICAgNSwgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLAorICAgIDAsICAgMCwgICAyMjgsIDAsICAgMCwgICAwLCAgIDc2LCAgMSwgICAwLCAgIDAsICA5MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgODAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICA4MywgIDcxLCAgMCwgICAxLCAgIDAsICAgMCwgICAyOCwgIDAsICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLAorICAgIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsCisgICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwKKyAgICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDE1LCAgMCwgICAwLCAgIDY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDExMSwKKyAgICAxMTUsIDEwNSwgMTE2LCAxMDUsIDExMSwgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDk2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgODAsICAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsCisgICAgODMsICA4NiwgIDk1LCAgODIsICAxMDEsIDExMCwgMTAwLCAxMDEsIDExNCwgODQsIDk3LCAgMTE0LCAxMDMsIDEwMSwgMTE2LCA2NSwgIDExNCwgMTE0LCA5NywKKyAgICAxMjEsIDczLCAgMTEwLCAxMDAsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCA4MywgNzIsICA2OCwgIDgyLCAgOCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMiwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgOTcsICAwLCAgIDAsICAgNSwgIDI0MiwgMTYsICAzMiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICA0LCAgIDE4LCAgMTYsICAzMiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgMCwgICAwLCAgIDkzLCAgMjQsICAwLCAgIDEsICAgOTIsICA0MCwgIDAsCisgICAgMSwgICAxMDMsIDAsICAgMCwgICA0LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAzLCAwLAorICAgIDAsICAgNCwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAgMCwgICAwLCAgIDk0LCAgMCwgICAwLCAgIDIsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMCwgICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA0OCwgIDAsICAgMCwgICAxLCAgIDMzLCAgMCwgIDAsICAgNywgICAzNCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICA2NCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA0LCAgIDMsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAwLCAgIDAsICAgNywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAzMCwgIDE2MCwgMCwgICAxMCwgIDAsICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTgsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMTAsICAxNiwgIDE2MCwgMCwgICAxMCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTksIDAsICAgMCwgICAxLCAgIDMwLCAgMCwgICAwLCAgIDcsICAgMTgsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAyMiwgIDAsICAgMCwgICAxLCAgIDksICAgMCwgICAwLCAgMSwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgICAwLCAgIDAsICAgMTEsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDExLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExbXVsdGl2aWV3dnMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExbXVsdGl2aWV3dnMuaAppbmRleCA4MjBmZmRkLi5hYTMwNzNiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMW11bHRpdmlld3ZzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFtdWx0aXZpZXd2cy5oCkBAIC0xLDg1ICsxLDg1IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFZTX011bHRpdmlld19DbGVhciAvVCB2c180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcY2xlYXIxMW11bHRpdmlld3ZzLmggQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1ZlcnRleElEICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMCAgIFZFUlRJRCAgIHVpbnQgICB4ICAgDQotLy8gU1ZfSW5zdGFuY2VJRCAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgSU5TVElEICAgdWludCAgIHggICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dw0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgDQotLy8NCi12c180XzANCi1kY2xfaW1tZWRpYXRlQ29uc3RhbnRCdWZmZXIgeyB7IC0xLjAwMDAwMCwgMS4wMDAwMDAsIDAsIDB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEuMDAwMDAwLCAxLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLjAwMDAwMCwgLTEuMDAwMDAwLCAwLCAwfSB9DQotZGNsX2lucHV0X3NndiB2MC54LCB2ZXJ0ZXhfaWQNCi1kY2xfaW5wdXRfc2d2IHYxLngsIGluc3RhbmNlX2lkDQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLngNCi1kY2xfdGVtcHMgMQ0KLW1vdiByMC54LCB2MC54DQotbW92IG8wLnh5LCBpY2JbcjAueCArIDBdLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQotbW92IG8xLngsIHYxLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfVlNfTXVsdGl2aWV3X0NsZWFyW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQsICA5OSwgIDIxMCwgODEsICAxODIsIDM5LCAgOCwgICAxMzQsIDc0LCAgMTY5LCA4OCwgIDEwMywgMTE0LCAxOTcsIDU2LA0KLSAgICAyMjAsIDEsICAgMCwgICAwLCAgIDAsICAgMjIwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLA0KLSAgICAwLCAgIDAsICAgMjMyLCAwLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDk2LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLA0KLSAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwNCi0gICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsDQotICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4NCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NiwgIDEwMSwNCi0gICAgMTE0LCAxMTYsIDEwMSwgMTIwLCA3MywgIDY4LCAgMCwgICA4MywgIDg2LCAgOTUsICA3MywgIDExMCwgMTE1LCAxMTYsIDk3LCAgMTEwLCA5OSwgIDEwMSwgNzMsDQotICAgIDY4LCAgMCwgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LA0KLSAgICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICAyNCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA1MywgIDI0LCAgMCwgICAwLCAgIDI2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMTkxLA0KLSAgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAxMjgsDQotICAgIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDk2LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsDQotICAgIDk2LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsDQotICAgIDQsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAxOCwgIDMyLA0KLSAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwNCi0gICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQ0LCAxNDQsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsDQotICAgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFZTX011bHRpdmlld19DbGVhciAvVCB2c180XzAgL0ZoCisvLyAgICBjb21waWxlZFxjbGVhcjExbXVsdGl2aWV3dnMuaCBDbGVhcjExLmhsc2wKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1ZlcnRleElEICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMCAgIFZFUlRJRCAgIHVpbnQgICB4ICAgCisvLyBTVl9JbnN0YW5jZUlEICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDEgICBJTlNUSUQgICB1aW50ICAgeCAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgCisvLwordnNfNF8wCitkY2xfaW1tZWRpYXRlQ29uc3RhbnRCdWZmZXIgeyB7IC0xLjAwMDAwMCwgMS4wMDAwMDAsIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLjAwMDAwMCwgLTEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLTEuMDAwMDAwLCAtMS4wMDAwMDAsIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0gfQorZGNsX2lucHV0X3NndiB2MC54LCB2ZXJ0ZXhfaWQKK2RjbF9pbnB1dF9zZ3YgdjEueCwgaW5zdGFuY2VfaWQKK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uCitkY2xfb3V0cHV0IG8xLngKK2RjbF90ZW1wcyAxCittb3YgcjAueCwgdjAueAorbW92IG8wLnh5LCBpY2JbcjAueCArIDBdLnh5eHgKK21vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkKK21vdiBvMS54LCB2MS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19WU19NdWx0aXZpZXdfQ2xlYXJbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE0LCAgOTksICAyMTAsIDgxLCAgMTgyLCAzOSwgIDgsICAgMTM0LCA3NCwgIDE2OSwgODgsICAxMDMsIDExNCwgMTk3LCA1NiwKKyAgICAyMjAsIDEsICAgMCwgICAwLCAgIDAsICAgMjIwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLAorICAgIDAsICAgMCwgICAyMzIsIDAsICAgMCwgICAwLCAgIDY0LCAgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLAorICAgIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLAorICAgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLAorICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4NCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NiwgIDEwMSwKKyAgICAxMTQsIDExNiwgMTAxLCAxMjAsIDczLCAgNjgsICAwLCAgIDgzLCAgODYsICA5NSwgIDczLCAgMTEwLCAxMTUsIDExNiwgOTcsICAxMTAsIDk5LCAgMTAxLCA3MywKKyAgICA2OCwgIDAsICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwKKyAgICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDI0LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDEsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDUzLCAgMjQsICAwLCAgIDAsICAgMjYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMTkxLAorICAgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDEyOCwKKyAgICA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgOTYsICAwLCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwKKyAgICA5NiwgIDAsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEwMywgMCwgICAwLAorICAgIDQsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAxOCwgIDMyLAorICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsCisgICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQ0LCAxNDQsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LAorICAgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsCisgICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgKaW5kZXggOTQ4NDUyNS4uZGU1ZjFkMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaApAQCAtMSw3MiArMSw3MiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyMTF2cy5oIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9WZXJ0ZXhJRCAgICAgICAgICAgICAgMCAgIHggICAgICAgICAgIDAgICBWRVJUSUQgICB1aW50ICAgeCAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3DQotLy8NCi12c180XzANCi1kY2xfaW1tZWRpYXRlQ29uc3RhbnRCdWZmZXIgeyB7IC0xLjAwMDAwMCwgMS4wMDAwMDAsIDAsIDB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEuMDAwMDAwLCAxLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLjAwMDAwMCwgLTEuMDAwMDAwLCAwLCAwfSB9DQotZGNsX2lucHV0X3NndiB2MC54LCB2ZXJ0ZXhfaWQNCi1kY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbg0KLWRjbF90ZW1wcyAxDQotbW92IHIwLngsIHYwLngNCi1tb3YgbzAueHksIGljYltyMC54ICsgMF0ueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfVlNfQ2xlYXJbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMDMsIDI4LCAgODcsICAyMTUsIDEzNSwgODMsIDEzMCwgODIsICAyMTMsIDMwLCAgMTIsICAyNCwgIDQxLCAgNDEsICAxODcsDQotICAgIDg3LCAgMSwgICAwLCAgIDAsICAgMCwgICA5NiwgIDIsICAgMCwgICAwLCAgIDUsICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE0MCwgMCwNCi0gICAgMCwgICAwLCAgIDE5MiwgMCwgICAwLCAgIDAsICAgMjQ0LCAwLCAgIDAsICAgMCwgIDIyOCwgMSwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU0LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwNCi0gICAgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwNCi0gICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwNCi0gICAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LCAgODYsICAxMDEsIDExNCwgMTE2LCAxMDEsIDEyMCwgNzMsDQotICAgIDY4LCAgMCwgICA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICAyMzIsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsICAgNTgsIDAsICAgMCwgICAwLCAgIDUzLCAgMjQsICAwLCAgIDAsICAgMjYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMTI4LCA2MywgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMTkxLA0KLSAgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDEyOCwNCi0gICAgNjMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDk2LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLA0KLSAgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLA0KLSAgICAxNDQsIDE0NCwgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBWU19DbGVhciAvVCB2c180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyMTF2cy5oIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVmVydGV4SUQgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAwICAgVkVSVElEICAgdWludCAgIHggICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3CisvLwordnNfNF8wCitkY2xfaW1tZWRpYXRlQ29uc3RhbnRCdWZmZXIgeyB7IC0xLjAwMDAwMCwgMS4wMDAwMDAsIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLjAwMDAwMCwgLTEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLTEuMDAwMDAwLCAtMS4wMDAwMDAsIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0gfQorZGNsX2lucHV0X3NndiB2MC54LCB2ZXJ0ZXhfaWQKK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uCitkY2xfdGVtcHMgMQorbW92IHIwLngsIHYwLngKK21vdiBvMC54eSwgaWNiW3IwLnggKyAwXS54eXh4Cittb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19WU19DbGVhcltdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTAzLCAyOCwgIDg3LCAgMjE1LCAxMzUsIDgzLCAxMzAsIDgyLCAgMjEzLCAzMCwgIDEyLCAgMjQsICA0MSwgIDQxLCAgMTg3LAorICAgIDg3LCAgMSwgICAwLCAgIDAsICAgMCwgICA5NiwgIDIsICAgMCwgICAwLCAgIDUsICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE0MCwgMCwKKyAgICAwLCAgIDAsICAgMTkyLCAwLCAgIDAsICAgMCwgICAyNDQsIDAsICAgMCwgICAwLCAgMjI4LCAxLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU0LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwKKyAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLAorICAgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsCisgICAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwgIDg2LCAgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDczLAorICAgIDY4LCAgMCwgICA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDcyLCAgNjgsCisgICAgODIsICAyMzIsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsICAgNTgsIDAsICAgMCwgICAwLCAgIDUzLCAgMjQsICAwLCAgIDAsICAgMjYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAxMjgsIDYzLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDE5MSwKKyAgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDEyOCwKKyAgICA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsIDAsICAgMCwgICAxMjgsIDE5MSwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDk2LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDMsIDAsICAgMCwgICA0LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsCisgICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDE0NCwgMTQ0LCAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmRlcHRoMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZGVwdGgxMXBzLmgKaW5kZXggNzQyZDUxMS4uMDU5YTg0NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZGVwdGgxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZGVwdGgxMXBzLmgKQEAgLTEsNzkgKzEsNzkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJEZXB0aCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZGVwdGgxMXBzLmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgRGVwdGhPbmx5RGF0YQ0KLS8vIHsNCi0vLw0KLS8vICAgZmxvYXQgelZhbHVlX0RlcHRoOyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBEZXB0aE9ubHlEYXRhICAgICAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJEZXB0aFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEyMCwgMjMxLCAxNSwgIDExNiwgMTE0LCAyMSwgIDI0NiwgMjM1LCAyMzYsIDE0LCAgMjM0LCAxMjMsIDIxNCwgMjQ3LCAxNiwNCi0gICAgMTg3LCAxLCAgIDAsICAgMCwgICAwLCAgIDQ4LCAgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDEyLCAgMSwNCi0gICAgMCwgICAwLCAgIDY0LCAgMSwgICAwLCAgIDAsICAgMTE2LCAxLCAgIDAsICAgMCwgICAxODAsIDEsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMjA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDc2LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwgNzksICAxMTAsIDEwOCwgMTIxLCA2OCwgIDk3LCAgMTE2LCA5NywNCi0gICAgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0MCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsICAxMDgsIDExNywgMTAxLA0KLSAgICA5NSwgIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwNCi0gICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LA0KLSAgICAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDc5LCAgODMsICA3MSwNCi0gICAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDU2LCAgMCwgICAwLCAgIDAsDQotICAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwNCi0gICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsDQotICAgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckRlcHRoIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJkZXB0aDExcHMuaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBEZXB0aE9ubHlEYXRhCisvLyB7CisvLworLy8gICBmbG9hdCB6VmFsdWVfRGVwdGg7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIERlcHRoT25seURhdGEgICAgICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyRGVwdGhbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEyMCwgMjMxLCAxNSwgIDExNiwgMTE0LCAyMSwgIDI0NiwgMjM1LCAyMzYsIDE0LCAgMjM0LCAxMjMsIDIxNCwgMjQ3LCAxNiwKKyAgICAxODcsIDEsICAgMCwgICAwLCAgIDAsICAgNDgsICAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTIsICAxLAorICAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDExNiwgMSwgICAwLCAgIDAsICAgMTgwLCAxLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDIwOCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDc2LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwgNzksICAxMTAsIDEwOCwgMTIxLCA2OCwgIDk3LCAgMTE2LCA5NywKKyAgICAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0MCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsICAxMDgsIDExNywgMTAxLAorICAgIDk1LCAgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsCisgICAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LAorICAgIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwKKyAgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgNzksICA4MywgIDcxLAorICAgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsCisgICAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNTYsICAwLCAgIDAsICAgMCwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwKKyAgICAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywKKyAgICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExX2ZsOXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExX2ZsOXBzLmgKaW5kZXggNTNkZTQ5NS4uOWQ4ZTlhNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMV9mbDlwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFfZmw5cHMuaApAQCAtMSwxMzMgKzEsMTMzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXRfRkw5IC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRcY2xlYXJmbG9hdDExX2ZsOXBzLmggQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQNCi0vLyB7DQotLy8NCi0vLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX0Zsb2F0OyAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLS8vDQotLy8gQ29uc3RhbnQgYnVmZmVyIHRvIERYOSBzaGFkZXIgY29uc3RhbnQgbWFwcGluZ3M6DQotLy8NCi0vLyBUYXJnZXQgUmVnIEJ1ZmZlciAgU3RhcnQgUmVnICMgb2YgUmVncyAgICAgICAgRGF0YSBDb252ZXJzaW9uDQotLy8gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLSAtLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIGMwICAgICAgICAgY2IwICAgICAgICAgICAgIDAgICAgICAgICAyICAoIEZMVCwgRkxULCBGTFQsIEZMVCkNCi0vLw0KLS8vDQotLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToNCi0vLw0KLSAgICBwc18yX3gNCi0gICAgbW92IG9DMCwgYzANCi0gICAgbW92IG9DMSwgYzANCi0gICAgbW92IG9DMiwgYzANCi0gICAgbW92IG9DMywgYzANCi0gICAgbW92IG9EZXB0aCwgYzEueA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG8yLnh5encsIGNiMFswXS54eXp3DQotbW92IG8zLnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdF9GTDlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMDQsIDcyLCAgMjQ4LCAzMSwgIDE0MCwgMjM2LCA3LCAgIDU4LCAgMjQ3LCAyNTUsIDc3LCAgMTE2LCAyMTcsIDE4MywgMTcwLA0KLSAgICAxOSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjI4LCAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgMTMyLCAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDIwLCAgMywgICAwLCAgIDAsICAgNzIsICAzLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgNjgsICAwLCAgIDAsICAgMCwNCi0gICAgNDgsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMzYsICAwLCAgIDAsICAgMCwgICA0OCwgIDAsICAgMCwgICAwLCAgIDQ4LCAgMCwgICAwLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQ4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsDQotICAgIDI1NSwgMjU1LCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDEsDQotICAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAyLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE2MCwNCi0gICAgMSwgICAwLCAgIDAsICAgMiwgICAzLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsDQotICAgIDE0NCwgMSwgICAwLCAgIDAsICAgMTYwLCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMjAwLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICA1MCwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLA0KLSAgICA2OCwgIDY5LCAgNzAsICAxMiwgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwNCi0gICAgMTAxLCAxMTIsIDExNiwgMTA0LCA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LA0KLSAgICAxMTEsIDk3LCAgMTE2LCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEyMiwgODYsICA5NywgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsDQotICAgIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwNCi0gICAgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsDQotICAgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LA0KLSAgICA3MywgIDc5LCAgNzgsICAwLCAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTQ4LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMTM4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsDQotICAgIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdF9GTDkgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgKKy8vICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMV9mbDlwcy5oIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdAorLy8geworLy8KKy8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCisvLworLy8gQ29uc3RhbnQgYnVmZmVyIHRvIERYOSBzaGFkZXIgY29uc3RhbnQgbWFwcGluZ3M6CisvLworLy8gVGFyZ2V0IFJlZyBCdWZmZXIgIFN0YXJ0IFJlZyAjIG9mIFJlZ3MgICAgICAgIERhdGEgQ29udmVyc2lvbgorLy8gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLSAtLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gYzAgICAgICAgICBjYjAgICAgICAgICAgICAgMCAgICAgICAgIDIgICggRkxULCBGTFQsIEZMVCwgRkxUKQorLy8KKy8vCisvLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOgorLy8KKyAgICBwc18yX3gKKyAgICBtb3Ygb0MwLCBjMAorICAgIG1vdiBvQzEsIGMwCisgICAgbW92IG9DMiwgYzAKKyAgICBtb3Ygb0MzLCBjMAorICAgIG1vdiBvRGVwdGgsIGMxLngKKworLy8gYXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG8wLnh5encsIGNiMFswXS54eXp3Cittb3YgbzEueHl6dywgY2IwWzBdLnh5encKK21vdiBvMi54eXp3LCBjYjBbMF0ueHl6dworbW92IG8zLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdF9GTDlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEwNCwgNzIsICAyNDgsIDMxLCAgMTQwLCAyMzYsIDcsICAgNTgsICAyNDcsIDI1NSwgNzcsICAxMTYsIDIxNywgMTgzLCAxNzAsCisgICAgMTksICAxLCAgIDAsICAgMCwgICAwLCAgIDIyOCwgMywgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTMyLCAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDIwLCAgMywgICAwLCAgIDAsICAgNzIsICAzLCAgIDAsICAgMCwgICA2NSwKKyAgICAxMTEsIDExMCwgNTcsICAxMTYsIDAsICAgMCwgICAwLCAgIDExNiwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCA2OCwgIDAsICAgMCwgICAwLAorICAgIDQ4LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgNDgsICAwLCAgIDAsICAgMCwgICA0OCwgIDAsICAgMCwgICAwLCAgIDM2LAorICAgIDAsICAgMCwgICAwLCAgIDQ4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsCisgICAgMjU1LCAyNTUsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMSwKKyAgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMiwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsCisgICAgMSwgICAwLCAgIDAsICAgMiwgICAzLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsCisgICAgMTQ0LCAxLCAgIDAsICAgMCwgICAxNjAsIDI1NSwgMjU1LCAwLCAgIDAsICAgODMsICA3MiwgIDY4LCAgODIsICAyMDAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNTAsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsCisgICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLAorICAgIDY4LCAgNjksICA3MCwgIDEyLCAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LAorICAgIDEwMSwgMTEyLCAxMTYsIDEwNCwgNjgsICA5NywgIDExNiwgOTcsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDYwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1NiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LAorICAgIDExMSwgOTcsICAxMTYsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMjIsIDg2LCAgOTcsICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsCisgICAgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLAorICAgIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLAorICAgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwKKyAgICA3MywgIDc5LCAgNzgsICAwLCAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTQ4LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTM4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsCisgICAgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsCisgICAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzF9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMS5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMS5oCmluZGV4IDU5MWI1OWQuLmQ0ODY1NjIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczEuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHMxLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdDEgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcmZsb2F0MTFwczEuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YUZsb2F0DQotLy8gew0KLS8vDQotLy8gICBmbG9hdDQgY29sb3JfRmxvYXQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0MVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE5NCwgMTkxLCAxMzUsIDIyLCAgNywgICAxMDEsIDM5LCAgMTU0LCAxNjEsIDcsICAgMTE5LCAxMjksIDE1OSwgNzcsICAxNDEsDQotICAgIDY0LCAgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDIwOCwgMSwgICAwLCAgIDAsICAgNTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwNCi0gICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICA3NiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LA0KLSAgICAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwNCi0gICAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgOTIsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwNCi0gICAgMCwgICAyMywgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwNCi0gICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXQxIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJmbG9hdDExcHMxLmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdAorLy8geworLy8KKy8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyRmxvYXQxW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTQsIDE5MSwgMTM1LCAyMiwgIDcsICAgMTAxLCAzOSwgIDE1NCwgMTYxLCA3LCAgIDExOSwgMTI5LCAxNTksIDc3LCAgMTQxLAorICAgIDY0LCAgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjA4LCAxLCAgIDAsICAgMCwgICA1MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLAorICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDc2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LAorICAgIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDkyLCAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsCisgICAgMCwgICAyMywgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLAorICAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczIuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczIuaAppbmRleCA1MjQxMGRiLi5kMmZiMzdhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHMyLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMi5oCkBAIC0xLDk2ICsxLDk2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXQyIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJmbG9hdDExcHMyLmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdA0KLS8vIHsNCi0vLw0KLS8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0MltdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyNSwgMTU3LCAxMzQsIDM2LCAgMjIxLCAxNzUsIDE0MywgMTMsICAyMTYsIDIzMywgMTQxLCAxNjAsIDIzNCwgMTk5LCA2LA0KLSAgICAxMzUsIDEsICAgMCwgICAwLCAgIDAsICAgMjM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAyMzIsIDEsICAgMCwgICAwLCAgIDExMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsDQotICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTAwLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLA0KLSAgICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTI4LCAwLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwNCi0gICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXQyIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJmbG9hdDExcHMyLmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdAorLy8geworLy8KKy8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDJbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyNSwgMTU3LCAxMzQsIDM2LCAgMjIxLCAxNzUsIDE0MywgMTMsICAyMTYsIDIzMywgMTQxLCAxNjAsIDIzNCwgMTk5LCA2LAorICAgIDEzNSwgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjMyLCAxLCAgIDAsICAgMCwgICAxMTIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLAorICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDEwMCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLAorICAgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxMjgsIDAsCisgICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLAorICAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMy5oCmluZGV4IDc5YjVjZmYuLmRmNjQ1NjUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHMzLmgKQEAgLTEsMTAyICsxLDEwMiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0MyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMy5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQNCi0vLyB7DQotLy8NCi0vLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX0Zsb2F0OyAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0M1tdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwNCwgMTksICAyMjgsIDM0LCAgNTAsICAxNjMsIDc5LCAgMjM1LCA4MiwgIDcxLCAgMTQzLCAxMjQsIDIxMCwgNTQsICAxODQsDQotICAgIDIwNSwgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMTcyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwNCi0gICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAxMjQsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTE0LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsDQotICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICAxNjQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDEsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LA0KLSAgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLA0KLSAgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLA0KLSAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0MyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMy5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQKKy8vIHsKKy8vCisvLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvMS54eXp3CitkY2xfb3V0cHV0IG8yLnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDNbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwNCwgMTksICAyMjgsIDM0LCAgNTAsICAxNjMsIDc5LCAgMjM1LCA4MiwgIDcxLCAgMTQzLCAxMjQsIDIxMCwgNTQsICAxODQsCisgICAgMjA1LCAxLCAgIDAsICAgMCwgICAwLCAgIDQwLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDE3MiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsCisgICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTI0LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTE0LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAxNjQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDEsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LAorICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsCisgICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwKKyAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczQuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczQuaAppbmRleCBkZDA4ZmFkLi43OTE3MzA3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM0LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNC5oCkBAIC0xLDEwOCArMSwxMDggQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdDQgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcmZsb2F0MTFwczQuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YUZsb2F0DQotLy8gew0KLS8vDQotLy8gICBmbG9hdDQgY29sb3JfRmxvYXQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0NFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExOCwgMjM2LCAxNjYsIDIwNywgODUsICAxMjYsIDQ5LCAgMjAwLCAyMjMsIDYzLCAgMjgsICA5OSwgIDEyOSwgNzYsICA0NCwNCi0gICAgMTAxLCAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwNCi0gICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjQsICAyLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwNCi0gICAgNjgsICA5NywgIDExNiwgOTcsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLA0KLSAgICAxLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE0OCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTM4LCAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLA0KLSAgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwNCi0gICAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MCwgIDAsICAgMCwNCi0gICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywNCi0gICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0NCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNC5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQKKy8vIHsKKy8vCisvLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0NFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTE4LCAyMzYsIDE2NiwgMjA3LCA4NSwgIDEyNiwgNDksICAyMDAsIDIyMywgNjMsICAyOCwgIDk5LCAgMTI5LCA3NiwgIDQ0LAorICAgIDEwMSwgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjQsICAyLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLAorICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE0OCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEzOCwgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLAorICAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLAorICAgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTAsICAwLCAgIDAsCisgICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLAorICAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLAorICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNS5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNS5oCmluZGV4IDNiODBhNTAuLmI5YzcwMjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczUuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM1LmgKQEAgLTEsMTE0ICsxLDExNCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0NSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNS5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQNCi0vLyB7DQotLy8NCi0vLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX0Zsb2F0OyAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG8yLnh5encsIGNiMFswXS54eXp3DQotbW92IG8zLnh5encsIGNiMFswXS54eXp3DQotbW92IG80Lnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMjMsIDUyLCAgMTYxLCAxNjgsIDcwLCAgMTI5LCAyNDYsIDMwLCAgMTAsICA1MywgIDE5MCwgMTQ1LCAxODcsIDE2MywgMTQxLA0KLSAgICA0MSwgIDEsICAgMCwgICAwLCAgIDAsICAgMTYwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA0OCwgIDIsICAgMCwgICAwLCAgIDM2LCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsDQotICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTcyLCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNTIsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LA0KLSAgICAwLCAgIDAsICAgMCwgICAxNjIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMzYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywNCi0gICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0NSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNS5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQKKy8vIHsKKy8vCisvLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG80Lnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvNC54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyRmxvYXQ1W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMjMsIDUyLCAgMTYxLCAxNjgsIDcwLCAgMTI5LCAyNDYsIDMwLCAgMTAsICA1MywgIDE5MCwgMTQ1LCAxODcsIDE2MywgMTQxLAorICAgIDQxLCAgMSwgICAwLCAgIDAsICAgMCwgICAxNjAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgNDgsICAyLCAgIDAsICAgMCwgICAzNiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLAorICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE3MiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwKKyAgICAwLCAgIDAsICAgMCwgICAxNjIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjM2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczYuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczYuaAppbmRleCA1YTQ4MzBjLi42YTBkNWFkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM2LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNi5oCkBAIC0xLDEyMCArMSwxMjAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdDYgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcmZsb2F0MTFwczYuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YUZsb2F0DQotLy8gew0KLS8vDQotLy8gICBmbG9hdDQgY29sb3JfRmxvYXQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9vdXRwdXQgbzUueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG8yLnh5encsIGNiMFswXS54eXp3DQotbW92IG8zLnh5encsIGNiMFswXS54eXp3DQotbW92IG80Lnh5encsIGNiMFswXS54eXp3DQotbW92IG81Lnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDZbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5LCAgIDIzMSwgMTk4LCAxNTIsIDczLCAgMjA0LCAxNjksIDIxMywgMjUxLCAyMjEsIDIxLCAgMTY1LCAxMTIsIDEzLCAgMjA2LA0KLSAgICAxODcsIDEsICAgMCwgICAwLCAgIDAsICAgMjIwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA3MiwgIDIsICAgMCwgICAwLCAgIDk2LCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsDQotICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTk2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LA0KLSAgICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTg2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwNCi0gICAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTYsDQotICAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsDQotICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXQ2IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJmbG9hdDExcHM2LmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdAorLy8geworLy8KKy8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG80Lnh5encKK2RjbF9vdXRwdXQgbzUueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzUueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0NltdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOSwgICAyMzEsIDE5OCwgMTUyLCA3MywgIDIwNCwgMTY5LCAyMTMsIDI1MSwgMjIxLCAyMSwgIDE2NSwgMTEyLCAxMywgIDIwNiwKKyAgICAxODcsIDEsICAgMCwgICAwLCAgIDAsICAgMjIwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLAorICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDcyLCAgMiwgICAwLCAgIDAsICAgOTYsICAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwKKyAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwKKyAgICAxLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICAxOTYsIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsCisgICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTg2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLAorICAgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE2LAorICAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsCisgICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLAorICAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LAorICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczcuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczcuaAppbmRleCAyYzEwYTZhLi5mZDJmNTcyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM3LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNy5oCkBAIC0xLDEyNyArMSwxMjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdDcgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcmZsb2F0MTFwczcuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YUZsb2F0DQotLy8gew0KLS8vDQotLy8gICBmbG9hdDQgY29sb3JfRmxvYXQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9GbG9hdDsgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YUZsb2F0ICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvNi54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzYueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0N1tdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE3MCwgMTczLCAxMzEsIDE3MiwgMTU1LCAyNSwgIDEwMCwgMTUyLCAxMjcsIDE4NCwgMTkzLCAyNTEsIDE0NywgMTMsICA2MSwNCi0gICAgMTU5LCAxLCAgIDAsICAgMCwgICAwLCAgIDI0LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwNCi0gICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICAxNTYsIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwNCi0gICAgNjgsICA5NywgIDExNiwgOTcsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLA0KLSAgICAxLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDIyMCwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMTAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwNCi0gICAgODMsICA3MiwgIDY4LCAgODIsICA1MiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzcsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwNCi0gICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwNCi0gICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwNCi0gICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwNCi0gICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhckZsb2F0NyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNy5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQKKy8vIHsKKy8vCisvLyAgIGZsb2F0NCBjb2xvcl9GbG9hdDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAgICAgICA2ICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgbzQueHl6dworZGNsX291dHB1dCBvNS54eXp3CitkY2xfb3V0cHV0IG82Lnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvNC54eXp3LCBjYjBbMF0ueHl6dworbW92IG81Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzYueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhckZsb2F0N1tdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTcwLCAxNzMsIDEzMSwgMTcyLCAxNTUsIDI1LCAgMTAwLCAxNTIsIDEyNywgMTg0LCAxOTMsIDI1MSwgMTQ3LCAxMywgIDYxLAorICAgIDE1OSwgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICAxNTYsIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLAorICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDIyMCwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwKKyAgICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDUsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMTAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsCisgICAgODMsICA3MiwgIDY4LCAgODIsICA1MiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzcsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwKKyAgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsCisgICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLAorICAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA2LCAgIDAsCisgICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwKKyAgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM4LmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM4LmgKaW5kZXggZTVkYzcwYy4uZGJjOTA3MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzOC5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczguaApAQCAtMSwxMzMgKzEsMTMzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyRmxvYXQ4IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJmbG9hdDExcHM4LmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFGbG9hdA0KLS8vIHsNCi0vLw0KLS8vICAgZmxvYXQ0IGNvbG9yX0Zsb2F0OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfRmxvYXQ7ICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFGbG9hdCAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAgICAgICA2ICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvNi54eXp3DQotZGNsX291dHB1dCBvNy54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzYueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzcueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDhbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxODIsIDEwMSwgMTYsICAxNTUsIDI5LCAgMTUyLCAxNjMsIDUyLCAgMTk0LCAyNSwgIDExMCwgMjA5LCAxMDAsIDgsICAgMjI3LA0KLSAgICA0MiwgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDIxNiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsDQotICAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsICAgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMjQ0LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNywgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMzQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwNCi0gICAgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksDQotICAgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDg4LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA4NiwgIDAsDQotICAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwNCi0gICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwNCi0gICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA3LCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsDQotICAgIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsDQotICAgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LA0KLSAgICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJGbG9hdDggL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcmZsb2F0MTFwczguaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YUZsb2F0CisvLyB7CisvLworLy8gICBmbG9hdDQgY29sb3JfRmxvYXQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNgorLy8gICBmbG9hdCB6VmFsdWVGX0Zsb2F0OyAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIENvbG9yQW5kRGVwdGhEYXRhRmxvYXQgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvMS54eXp3CitkY2xfb3V0cHV0IG8yLnh5encKK2RjbF9vdXRwdXQgbzMueHl6dworZGNsX291dHB1dCBvNC54eXp3CitkY2xfb3V0cHV0IG81Lnh5encKK2RjbF9vdXRwdXQgbzYueHl6dworZGNsX291dHB1dCBvNy54eXp3CitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG8wLnh5encsIGNiMFswXS54eXp3Cittb3YgbzEueHl6dywgY2IwWzBdLnh5encKK21vdiBvMi54eXp3LCBjYjBbMF0ueHl6dworbW92IG8zLnh5encsIGNiMFswXS54eXp3Cittb3YgbzQueHl6dywgY2IwWzBdLnh5encKK21vdiBvNS54eXp3LCBjYjBbMF0ueHl6dworbW92IG82Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzcueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJGbG9hdDhbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4MiwgMTAxLCAxNiwgIDE1NSwgMjksICAxNTIsIDE2MywgNTIsICAxOTQsIDI1LCAgMTEwLCAyMDksIDEwMCwgOCwgICAyMjcsCisgICAgNDIsICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDIxNiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA3MCwgIDEwOCwgMTExLCA5NywgIDExNiwgMCwgICAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgNzAsICAxMDgsIDExMSwgOTcsICAxMTYsIDAsCisgICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDcwLCAgMTA4LCAxMTEsIDk3LCAgMTE2LCAwLCAgIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMjQ0LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIzNCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksCisgICAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgODgsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwKKyAgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsCisgICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLAorICAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsCisgICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsCisgICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsCisgICAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMxLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczEuaAppbmRleCBmYmEzMTZmLi4zNjlmOTFiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczEuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczEuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQxIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczEuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQNCi0vLyB7DQotLy8NCi0vLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyU2ludDFbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA4OCwgIDE2MywgMTg5LCA5MSwgIDcxLCAgNjAsICAxMTcsIDIyNiwgMTU0LCAyMTYsIDEzNSwgMjEsICA3NywgIDkwLCAgNzYsDQotICAgIDEyNCwgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDIwOCwgMSwgICAwLCAgIDAsICAgNTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDc2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsDQotICAgIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA5MiwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLA0KLSAgICAwLCAgIDIzLCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLA0KLSAgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJTaW50MSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyc2ludDExcHMxLmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFTaW50CisvLyB7CisvLworLy8gICBpbnQ0IGNvbG9yX1NpbnQ7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNgorLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG8wLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50MVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgODgsICAxNjMsIDE4OSwgOTEsICA3MSwgIDYwLCAgMTE3LCAyMjYsIDE1NCwgMjE2LCAxMzUsIDIxLCAgNzcsICA5MCwgIDc2LAorICAgIDEyNCwgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjA4LCAxLCAgIDAsICAgMCwgICA1MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgNzYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsCisgICAgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsCisgICAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgOTIsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwKKyAgICAwLCAgIDIzLCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsCisgICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMyLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczIuaAppbmRleCBlZjUxNjU5Li5jYmY2MTJkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczIuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczIuaApAQCAtMSw5NiArMSw5NiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQyIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczIuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQNCi0vLyB7DQotLy8NCi0vLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50MltdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDc4LCAgMTc0LCA3NSwgIDE2LCAgMTQ2LCAyMjEsIDEwOSwgMjIyLCAyNDgsIDEzNSwgODMsICAyMjUsIDEzMiwgMzYsICAxODgsDQotICAgIDIxMiwgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDIzMiwgMSwgICAwLCAgIDAsICAgMTEyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDEwMCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwNCi0gICAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDEyOCwgMCwNCi0gICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwNCi0gICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsDQotICAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LA0KLSAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQyIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczIuaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQKKy8vIHsKKy8vCisvLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyU2ludDJbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDc4LCAgMTc0LCA3NSwgIDE2LCAgMTQ2LCAyMjEsIDEwOSwgMjIyLCAyNDgsIDEzNSwgODMsICAyMjUsIDEzMiwgMzYsICAxODgsCisgICAgMjEyLCAxLCAgIDAsICAgMCwgICAwLCAgIDIzNiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAyMzIsIDEsICAgMCwgICAwLCAgIDExMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwKKyAgICAxLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICAxMDAsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwKKyAgICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTI4LCAwLAorICAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLAorICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsCisgICAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwKKyAgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwKKyAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzMy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMzLmgKaW5kZXggMjMyOWI0NS4uNGRmNTNjMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMzLmgKQEAgLTEsMTAyICsxLDEwMiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQzIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczMuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQNCi0vLyB7DQotLy8NCi0vLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbnQzW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjExLCAxNzMsIDI0LCAgMTEzLCAyMjIsIDQzLCAgNTYsICAyNDIsIDE1OCwgOTEsICAyNDUsIDI1NSwgNjQsICA2NiwgIDExLA0KLSAgICAxNzcsIDEsICAgMCwgICAwLCAgIDAsICAgNDAsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDE3MiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAxMjQsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTE0LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsDQotICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICAxNjQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDEsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LA0KLSAgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLA0KLSAgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLA0KLSAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQzIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczMuaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQKKy8vIHsKKy8vCisvLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvMS54eXp3CitkY2xfb3V0cHV0IG8yLnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50M1tdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjExLCAxNzMsIDI0LCAgMTEzLCAyMjIsIDQzLCAgNTYsICAyNDIsIDE1OCwgOTEsICAyNDUsIDI1NSwgNjQsICA2NiwgIDExLAorICAgIDE3NywgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAxNzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTI0LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTE0LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAxNjQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDEsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LAorICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsCisgICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwKKyAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNC5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM0LmgKaW5kZXggNzAzZDI2Mi4uNDU1MjdjYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM0LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM0LmgKQEAgLTEsMTA4ICsxLDEwOCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQ0IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczQuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQNCi0vLyB7DQotLy8NCi0vLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG8zLnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMS54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMi54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMy54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyU2ludDRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAzOCwgIDk2LCAgMjksICAxNjYsIDIwNSwgMjE4LCA2NCwgIDEyMywgMTE3LCAxOTgsIDEzMywgMjI3LCA4MywgIDI0MywgMTk4LA0KLSAgICAyMzgsIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAyNCwgIDIsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAxNDgsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEzOCwgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwNCi0gICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsDQotICAgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTAsICAwLCAgIDAsDQotICAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJTaW50NCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyc2ludDExcHM0LmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFTaW50CisvLyB7CisvLworLy8gICBpbnQ0IGNvbG9yX1NpbnQ7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNgorLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG8wLnh5encsIGNiMFswXS54eXp3Cittb3YgbzEueHl6dywgY2IwWzBdLnh5encKK21vdiBvMi54eXp3LCBjYjBbMF0ueHl6dworbW92IG8zLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50NFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMzgsICA5NiwgIDI5LCAgMTY2LCAyMDUsIDIxOCwgNjQsICAxMjMsIDExNywgMTk4LCAxMzMsIDIyNywgODMsICAyNDMsIDE5OCwKKyAgICAyMzgsIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLAorICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDI0LCAgMiwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwKKyAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLAorICAgIDEsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE0OCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEzOCwgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLAorICAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLAorICAgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTAsICAwLCAgIDAsCisgICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLAorICAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLAorICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM1LmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczUuaAppbmRleCBkNTVhZWQyLi43NmNiYzExIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczUuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczUuaApAQCAtMSwxMTQgKzEsMTE0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyU2ludDUgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnNpbnQxMXBzNS5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhU2ludA0KLS8vIHsNCi0vLw0KLS8vICAgaW50NCBjb2xvcl9TaW50OyAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbnQ1W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQsICA3OSwgIDQ5LCAgMzMsICAxMzUsIDIxNCwgMjE0LCA4NywgIDEzOSwgNTQsICAyMDUsIDg4LCAgMjQ0LCAyMzUsIDgzLA0KLSAgICA1OSwgIDEsICAgMCwgICAwLCAgIDAsICAgMTYwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA0OCwgIDIsICAgMCwgICAwLCAgIDM2LCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAxNzIsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsDQotICAgIDAsICAgMCwgICAwLCAgIDE2MiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyU2ludDUgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnNpbnQxMXBzNS5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhU2ludAorLy8geworLy8KKy8vICAgaW50NCBjb2xvcl9TaW50OyAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9TaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVNpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgbzQueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50NVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQsICA3OSwgIDQ5LCAgMzMsICAxMzUsIDIxNCwgMjE0LCA4NywgIDEzOSwgNTQsICAyMDUsIDg4LCAgMjQ0LCAyMzUsIDgzLAorICAgIDU5LCAgMSwgICAwLCAgIDAsICAgMCwgICAxNjAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgNDgsICAyLCAgIDAsICAgMCwgICAzNiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTcyLCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDE2MiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsCisgICAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMzYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM2LmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczYuaAppbmRleCA4OWE3NmYzLi40ZWE5NmIzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczYuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczYuaApAQCAtMSwxMjAgKzEsMTIwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyU2ludDYgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnNpbnQxMXBzNi5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhU2ludA0KLS8vIHsNCi0vLw0KLS8vICAgaW50NCBjb2xvcl9TaW50OyAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG8zLnh5encNCi1kY2xfb3V0cHV0IG80Lnh5encNCi1kY2xfb3V0cHV0IG81Lnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMS54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMi54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMy54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvNC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvNS54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyU2ludDZbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjIsIDExNywgNywgICAyMzgsIDIxNywgMTYzLCA0NywgIDM5LCAgMTYyLCAwLCAgIDE3NiwgMTU5LCA0LCAgIDExMSwgODMsDQotICAgIDIzOCwgMSwgICAwLCAgIDAsICAgMCwgICAyMjAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDcyLCAgMiwgICAwLCAgIDAsICAgOTYsICAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE5NiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE4NiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsDQotICAgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE2LA0KLSAgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLA0KLSAgICAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwNCi0gICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LA0KLSAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQ2IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczYuaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQKKy8vIHsKKy8vCisvLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvMS54eXp3CitkY2xfb3V0cHV0IG8yLnh5encKK2RjbF9vdXRwdXQgbzMueHl6dworZGNsX291dHB1dCBvNC54eXp3CitkY2xfb3V0cHV0IG81Lnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvNC54eXp3LCBjYjBbMF0ueHl6dworbW92IG81Lnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50NltdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjIyLCAxMTcsIDcsICAgMjM4LCAyMTcsIDE2MywgNDcsICAzOSwgIDE2MiwgMCwgICAxNzYsIDE1OSwgNCwgICAxMTEsIDgzLAorICAgIDIzOCwgMSwgICAwLCAgIDAsICAgMCwgICAyMjAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgNzIsICAyLCAgIDAsICAgMCwgICA5NiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTk2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE4NiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwKKyAgICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNiwKKyAgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLAorICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczcuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNy5oCmluZGV4IGNhOGUwY2IuLmI0OGRjMWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNy5oCkBAIC0xLDEyNyArMSwxMjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJTaW50NyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyc2ludDExcHM3LmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFTaW50DQotLy8gew0KLS8vDQotLy8gICBpbnQ0IGNvbG9yX1NpbnQ7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9TaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YVNpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvNi54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzYueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclNpbnQ3W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDcsICAxNTIsIDE0MiwgMTM4LCAxODIsIDgsICAgMTk4LCA5MSwgIDIzNCwgMTk5LCA2LCAgIDExMSwgMTgzLCAxNDEsIDM4LA0KLSAgICA3OSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA5NiwgIDIsICAgMCwgICAwLCAgIDE1NiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAyMjAsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsDQotICAgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDUsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjEwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsDQotICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDc3LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsDQotICAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsDQotICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsDQotICAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDcwLA0KLSAgICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLA0KLSAgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLA0KLSAgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJTaW50NyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFyc2ludDExcHM3LmgKKy8vICAgIENsZWFyMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFTaW50CisvLyB7CisvLworLy8gICBpbnQ0IGNvbG9yX1NpbnQ7ICAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNgorLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNAorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG80Lnh5encKK2RjbF9vdXRwdXQgbzUueHl6dworZGNsX291dHB1dCBvNi54eXp3CitkY2xfb3V0cHV0IG9EZXB0aAorbW92IG8wLnh5encsIGNiMFswXS54eXp3Cittb3YgbzEueHl6dywgY2IwWzBdLnh5encKK21vdiBvMi54eXp3LCBjYjBbMF0ueHl6dworbW92IG8zLnh5encsIGNiMFswXS54eXp3Cittb3YgbzQueHl6dywgY2IwWzBdLnh5encKK21vdiBvNS54eXp3LCBjYjBbMF0ueHl6dworbW92IG82Lnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJTaW50N1tdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDcsICAxNTIsIDE0MiwgMTM4LCAxODIsIDgsICAgMTk4LCA5MSwgIDIzNCwgMTk5LCA2LCAgIDExMSwgMTgzLCAxNDEsIDM4LAorICAgIDc5LCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICAxNTYsIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMjIwLCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIxMCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwKKyAgICA4MywgIDcyLCAgNjgsICA4MiwgIDUyLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3NywgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLAorICAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwKKyAgICAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsCisgICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwKKyAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLAorICAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzOC5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM4LmgKaW5kZXggYmJmNTY0Mi4uMWQwNzkzOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM4LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM4LmgKQEAgLTEsMTMzICsxLDEzMyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQ4IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczguaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQNCi0vLyB7DQotLy8NCi0vLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1NpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhU2ludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA2ICAgeHl6dyAgICAgICAgNiAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDcgICB4eXp3ICAgICAgICA3ICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgbzQueHl6dw0KLWRjbF9vdXRwdXQgbzUueHl6dw0KLWRjbF9vdXRwdXQgbzYueHl6dw0KLWRjbF9vdXRwdXQgbzcueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG8yLnh5encsIGNiMFswXS54eXp3DQotbW92IG8zLnh5encsIGNiMFswXS54eXp3DQotbW92IG80Lnh5encsIGNiMFswXS54eXp3DQotbW92IG81Lnh5encsIGNiMFswXS54eXp3DQotbW92IG82Lnh5encsIGNiMFswXS54eXp3DQotbW92IG83Lnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyU2ludDhbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjQsIDEwNiwgMTMwLCA5MSwgIDQsICAgMjQ0LCA5OSwgIDIzLCAgMjQwLCAxMjYsIDE5LCAgMjUyLCA0OSwgIDIxNywgMjIwLA0KLSAgICAyMjgsIDEsICAgMCwgICAwLCAgIDAsICAgODQsICA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDIxNiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4MywgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAyNDQsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsDQotICAgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDUsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIzNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LA0KLSAgICAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwNCi0gICAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgODgsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwNCi0gICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLA0KLSAgICAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLA0KLSAgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsDQotICAgIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsDQotICAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwNCi0gICAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwNCi0gICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsDQotICAgIDExNiwgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclNpbnQ4IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJzaW50MTFwczguaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVNpbnQKKy8vIHsKKy8vCisvLyAgIGludDQgY29sb3JfU2ludDsgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfU2ludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFTaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAgICAgICA2ICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA3ICAgeHl6dyAgICAgICAgNyAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG80Lnh5encKK2RjbF9vdXRwdXQgbzUueHl6dworZGNsX291dHB1dCBvNi54eXp3CitkY2xfb3V0cHV0IG83Lnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvNC54eXp3LCBjYjBbMF0ueHl6dworbW92IG81Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzYueHl6dywgY2IwWzBdLnh5encKK21vdiBvNy54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhclNpbnQ4W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjQsIDEwNiwgMTMwLCA5MSwgIDQsICAgMjQ0LCA5OSwgIDIzLCAgMjQwLCAxMjYsIDE5LCAgMjUyLCA0OSwgIDIxNywgMjIwLAorICAgIDIyOCwgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICAyMTYsIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODMsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDgzLCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMjQ0LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIzNCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksCisgICAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgODgsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwKKyAgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsCisgICAgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLAorICAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsCisgICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsCisgICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsCisgICAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHMxLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczEuaAppbmRleCBhODY5NjUzLi5hMmFkNmJjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczEuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczEuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclVpbnQxIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJ1aW50MTFwczEuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVVpbnQNCi0vLyB7DQotLy8NCi0vLyAgIHVpbnQ0IGNvbG9yX1VpbnQ7ICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1VpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhVWludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyVWludDFbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjAsIDE3NSwgOTYsICA3NSwgIDIxNiwgMTg1LCAxMzQsIDIxLCAgNTgsICAxMTcsIDEzMCwgNDEsICAxMzMsIDEwNiwgMTE3LA0KLSAgICA3MiwgIDEsICAgMCwgICAwLCAgIDAsICAgMTc2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAyMDgsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICA3NiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LA0KLSAgICAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwNCi0gICAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgOTIsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwNCi0gICAgMCwgICAyMywgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwNCi0gICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDEgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzMS5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyVWludDFbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyMCwgMTc1LCA5NiwgIDc1LCAgMjE2LCAxODUsIDEzNCwgMjEsICA1OCwgIDExNywgMTMwLCA0MSwgIDEzMywgMTA2LCAxMTcsCisgICAgNzIsICAxLCAgIDAsICAgMCwgICAwLCAgIDE3NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAyMDgsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwKKyAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICA3NiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA2NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwKKyAgICAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA5MiwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLAorICAgIDAsICAgMjMsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwKKyAgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczIuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzMi5oCmluZGV4IDU5YzYyNzAuLmM0NjU1NDUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzMi5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzMi5oCkBAIC0xLDk2ICsxLDk2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDIgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzMi5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludA0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfVWludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFVaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQyW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDIsICAxMzMsIDEzMiwgNTIsICAyMywgIDI0MiwgNCwgICAxODEsIDMzLCAgOSwgICAxNDMsIDE3LCAgMTc5LCA4MywgIDIwOSwNCi0gICAgMjEzLCAxLCAgIDAsICAgMCwgICAwLCAgIDIzNiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwNCi0gICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjMyLCAxLCAgIDAsICAgMCwgICAxMTIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwNCi0gICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsDQotICAgIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTAwLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLA0KLSAgICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTI4LCAwLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwNCi0gICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDIgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzMi5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJVaW50MltdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDIsICAxMzMsIDEzMiwgNTIsICAyMywgIDI0MiwgNCwgICAxODEsIDMzLCAgOSwgICAxNDMsIDE3LCAgMTc5LCA4MywgIDIwOSwKKyAgICAyMTMsIDEsICAgMCwgICAwLCAgIDAsICAgMjM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLAorICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDIzMiwgMSwgICAwLCAgIDAsICAgMTEyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwKKyAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLAorICAgIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDEwMCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLAorICAgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxMjgsIDAsCisgICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLAorICAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHMzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczMuaAppbmRleCBkM2RhMDMzLi5lODNjNzkyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczMuaApAQCAtMSwxMDIgKzEsMTAyIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDMgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzMy5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludA0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfVWludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFVaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMS54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMi54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyVWludDNbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA1MywgIDU2LCAgMTc3LCA1NiwgIDkwLCAgNTAsICAyNSwgIDIxLCAgNDMsICA5NSwgIDI1MiwgMTMzLCAxNjIsIDYsICAgNzksDQotICAgIDI0NiwgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMTcyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDEyNCwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMTQsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwNCi0gICAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDE2NCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0MSwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsDQotICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLA0KLSAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwNCi0gICAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsDQotICAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDMgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzMy5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQzW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA1MywgIDU2LCAgMTc3LCA1NiwgIDkwLCAgNTAsICAyNSwgIDIxLCAgNDMsICA5NSwgIDI1MiwgMTMzLCAxNjIsIDYsICAgNzksCisgICAgMjQ2LCAxLCAgIDAsICAgMCwgICAwLCAgIDQwLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDE3MiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwKKyAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICAxMjQsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMTQsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDE2NCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0MSwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsCisgICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwKKyAgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLAorICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM0LmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczQuaAppbmRleCBjMzYzNDhlLi43NTZjZTZhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczQuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczQuaApAQCAtMSwxMDggKzEsMTA4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDQgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzNC5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludA0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfVWludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFVaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF9vdXRwdXQgbzEueHl6dw0KLWRjbF9vdXRwdXQgbzIueHl6dw0KLWRjbF9vdXRwdXQgbzMueHl6dw0KLWRjbF9vdXRwdXQgb0RlcHRoDQotbW92IG8wLnh5encsIGNiMFswXS54eXp3DQotbW92IG8xLnh5encsIGNiMFswXS54eXp3DQotbW92IG8yLnh5encsIGNiMFswXS54eXp3DQotbW92IG8zLnh5encsIGNiMFswXS54eXp3DQotbW92IG9EZXB0aCwgY2IwWzFdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJVaW50NFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkzLCAgMjI0LCAyMzMsIDcsICAgMTA4LCA4NiwgIDIwNiwgMTM2LCAyMTEsIDIzMiwgMTg5LCAzOCwgIDYxLCAgMjI5LCAyNDAsDQotICAgIDEwNywgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDI0LCAgMiwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE0OCwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTM4LCAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLA0KLSAgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwNCi0gICAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MCwgIDAsICAgMCwNCi0gICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywNCi0gICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclVpbnQ0IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJ1aW50MTFwczQuaAorLy8gICAgQ2xlYXIxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVVpbnQKKy8vIHsKKy8vCisvLyAgIHVpbnQ0IGNvbG9yX1VpbnQ7ICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLyAgIGZsb2F0IHpWYWx1ZUZfVWludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gQ29sb3JBbmREZXB0aERhdGFVaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgb0RlcHRoCittb3YgbzAueHl6dywgY2IwWzBdLnh5encKK21vdiBvMS54eXp3LCBjYjBbMF0ueHl6dworbW92IG8yLnh5encsIGNiMFswXS54eXp3Cittb3YgbzMueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQ0W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5MywgIDIyNCwgMjMzLCA3LCAgIDEwOCwgODYsICAyMDYsIDEzNiwgMjExLCAyMzIsIDE4OSwgMzgsICA2MSwgIDIyOSwgMjQwLAorICAgIDEwNywgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgMjQsICAyLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTQ4LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTM4LCAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsCisgICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsCisgICAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MCwgIDAsICAgMCwKKyAgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywKKyAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsCisgICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsCisgICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczUuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNS5oCmluZGV4IDM2NGM1OTAuLmMzZjQ4NTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNS5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNS5oCkBAIC0xLDExNCArMSwxMTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJVaW50NSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFydWludDExcHM1LmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFVaW50DQotLy8gew0KLS8vDQotLy8gICB1aW50NCBjb2xvcl9VaW50OyAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfb3V0cHV0IG8xLnh5encNCi1kY2xfb3V0cHV0IG8yLnh5encNCi1kY2xfb3V0cHV0IG8zLnh5encNCi1kY2xfb3V0cHV0IG80Lnh5encNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLW1vdiBvMC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMS54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMi54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvMy54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvNC54eXp3LCBjYjBbMF0ueHl6dw0KLW1vdiBvRGVwdGgsIGNiMFsxXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0NsZWFyVWludDVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNDUsIDE3MCwgMjAxLCAyMjUsIDk3LCAgNDUsICAzMywgIDI4LCAgOTUsICA5OCwgIDE2NywgMjUsICAxMzUsIDI0LCAgMjMxLA0KLSAgICA5NywgIDEsICAgMCwgICAwLCAgIDAsICAgMTYwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLA0KLSAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA0OCwgIDIsICAgMCwgICAwLCAgIDM2LCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LA0KLSAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwNCi0gICAgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsDQotICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwNCi0gICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLA0KLSAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwNCi0gICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwNCi0gICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICAxNzIsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsDQotICAgIDAsICAgMCwgICAwLCAgIDE2MiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDUgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzNS5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgbzQueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfQ2xlYXJVaW50NVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ1LCAxNzAsIDIwMSwgMjI1LCA5NywgIDQ1LCAgMzMsICAyOCwgIDk1LCAgOTgsICAxNjcsIDI1LCAgMTM1LCAyNCwgIDIzMSwKKyAgICA5NywgIDEsICAgMCwgICAwLCAgIDAsICAgMTYwLCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNzIsICAxLAorICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDQ4LCAgMiwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIxNiwgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwKKyAgICA2OCwgIDk3LCAgMTE2LCA5NywgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTg0LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLAorICAgIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LAorICAgIDEwOCwgMTE3LCAxMDEsIDcwLCAgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDE3MSwgMCwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDE3MiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwKKyAgICAwLCAgIDAsICAgMCwgICAxNjIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjM2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LAorICAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNi5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM2LmgKaW5kZXggYzlmZjVmZC4uOTg2MWU4MSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM2LmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM2LmgKQEAgLTEsMTIwICsxLDEyMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19DbGVhclVpbnQ2IC9UIHBzXzRfMCAvRmggY29tcGlsZWRcY2xlYXJ1aW50MTFwczYuaA0KLS8vICAgIENsZWFyMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBDb2xvckFuZERlcHRoRGF0YVVpbnQNCi0vLyB7DQotLy8NCi0vLyAgIHVpbnQ0IGNvbG9yX1VpbnQ7ICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8gICBmbG9hdCB6VmFsdWVGX1VpbnQ7ICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAxNiBTaXplOiAgICAgNA0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIENvbG9yQW5kRGVwdGhEYXRhVWludCAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMiAgIHh5encgICAgICAgIDIgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAzICAgeHl6dyAgICAgICAgMyAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNSAgIHh5encgICAgICAgIDUgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQ2W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNTksICA5NSwgIDE5OSwgNjksICAyMjUsIDEwMSwgODAsICAxMTUsIDM4LCAgMjMzLCAyMTUsIDIxOCwgMjQwLCAxNDYsIDE5MSwNCi0gICAgNDEsICAxLCAgIDAsICAgMCwgICAwLCAgIDIyMCwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwNCi0gICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgNzIsICAyLCAgIDAsICAgMCwgICA5NiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwNCi0gICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsDQotICAgIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTk2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LA0KLSAgICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTg2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwNCi0gICAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LCAgODAsICA4NCwgIDcyLCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTYsDQotICAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsDQotICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDYgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzNi5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsyXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX291dHB1dCBvMC54eXp3CitkY2xfb3V0cHV0IG8xLnh5encKK2RjbF9vdXRwdXQgbzIueHl6dworZGNsX291dHB1dCBvMy54eXp3CitkY2xfb3V0cHV0IG80Lnh5encKK2RjbF9vdXRwdXQgbzUueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzUueHl6dywgY2IwWzBdLnh5encKK21vdiBvRGVwdGgsIGNiMFsxXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQ2W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA1OSwgIDk1LCAgMTk5LCA2OSwgIDIyNSwgMTAxLCA4MCwgIDExNSwgMzgsICAyMzMsIDIxNSwgMjE4LCAyNDAsIDE0NiwgMTkxLAorICAgIDQxLCAgMSwgICAwLCAgIDAsICAgMCwgICAyMjAsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsCisgICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgNzIsICAyLCAgIDAsICAgMCwgICA5NiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjcsICAxMTEsIDEwOCwgMTExLCAxMTQsIDY1LCAgMTEwLCAxMDAsIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LAorICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsCisgICAgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjIsIDg2LCAgOTcsCisgICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsCisgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLAorICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LAorICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLAorICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTk2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LAorICAgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDE4NiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwKKyAgICA3MSwgIDY5LCAgODQsICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNiwKKyAgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLAorICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczcuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNy5oCmluZGV4IDAwM2Y4ZTUuLjM5YWY3YTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNy5oCkBAIC0xLDEyNyArMSwxMjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfQ2xlYXJVaW50NyAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXGNsZWFydWludDExcHM3LmgNCi0vLyAgICBDbGVhcjExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgQ29sb3JBbmREZXB0aERhdGFVaW50DQotLy8gew0KLS8vDQotLy8gICB1aW50NCBjb2xvcl9VaW50OyAgICAgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAxICAgeHl6dyAgICAgICAgMSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDIgICB4eXp3ICAgICAgICAyICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA0ICAgeHl6dyAgICAgICAgNCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDUgICB4eXp3ICAgICAgICA1ICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvNi54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzYueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19DbGVhclVpbnQ3W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNiwgICAyNTEsIDI0OCwgOTgsICAxMjYsIDIyMiwgMTE0LCAxMSwgIDE0NSwgMTIyLCAxMDAsIDIzOCwgMjExLCAxMTYsIDIxMCwNCi0gICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDI0LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwNCi0gICAgMCwgICAwLCAgIDEyNCwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICAxNTYsIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY3LCAgMTExLCAxMDgsIDExMSwgMTE0LCA2NSwgIDExMCwgMTAwLCA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwNCi0gICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA4LCAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNTYsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgMTExLCAxMDgsIDExMSwgMTE0LCA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsDQotICAgIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIyLCA4NiwgIDk3LA0KLSAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDc5LCAgODMsICA3MSwgIDc4LCAgMjIwLCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDE1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIxMCwgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMSwgICAxNCwgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLA0KLSAgICA4MywgIDcyLCAgNjgsICA4MiwgIDUyLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3NywgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLA0KLSAgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLA0KLSAgICAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLA0KLSAgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLA0KLSAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwNCi0gICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDcgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzNy5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMl0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX291dHB1dCBvMS54eXp3CitkY2xfb3V0cHV0IG8yLnh5encKK2RjbF9vdXRwdXQgbzMueHl6dworZGNsX291dHB1dCBvNC54eXp3CitkY2xfb3V0cHV0IG81Lnh5encKK2RjbF9vdXRwdXQgbzYueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzUueHl6dywgY2IwWzBdLnh5encKK21vdiBvNi54eXp3LCBjYjBbMF0ueHl6dworbW92IG9EZXB0aCwgY2IwWzFdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyVWludDdbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDYsICAgMjUxLCAyNDgsIDk4LCAgMTI2LCAyMjIsIDExNCwgMTEsICAxNDUsIDEyMiwgMTAwLCAyMzgsIDIxMSwgMTE2LCAyMTAsCisgICAgMTI0LCAxLCAgIDAsICAgMCwgICAwLCAgIDI0LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICA5NiwgIDIsICAgMCwgICAwLCAgIDE1NiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwKKyAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICAyMjAsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsCisgICAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjEwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsCisgICAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLAorICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgNTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDc3LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsCisgICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLAorICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwKKyAgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLAorICAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwKKyAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNzAsCisgICAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsCisgICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM4LmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczguaAppbmRleCAzNjcxOWViLi4zOTc0Mzk2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczguaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczguaApAQCAtMSwxMzMgKzEsMTMzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDggL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzOC5oDQotLy8gICAgQ2xlYXIxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludA0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLyAgIGZsb2F0IHpWYWx1ZUZfVWludDsgICAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgIDE2IFNpemU6ICAgICA0DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gQ29sb3JBbmREZXB0aERhdGFVaW50ICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMSAgIHh5encgICAgICAgIDEgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDMgICB4eXp3ICAgICAgICAzICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNCAgIHh5encgICAgICAgIDQgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDYgICB4eXp3ICAgICAgICA2ICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNyAgIHh5encgICAgICAgIDcgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX291dHB1dCBvMS54eXp3DQotZGNsX291dHB1dCBvMi54eXp3DQotZGNsX291dHB1dCBvMy54eXp3DQotZGNsX291dHB1dCBvNC54eXp3DQotZGNsX291dHB1dCBvNS54eXp3DQotZGNsX291dHB1dCBvNi54eXp3DQotZGNsX291dHB1dCBvNy54eXp3DQotZGNsX291dHB1dCBvRGVwdGgNCi1tb3YgbzAueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzEueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzIueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzMueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzQueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzUueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzYueHl6dywgY2IwWzBdLnh5encNCi1tb3YgbzcueHl6dywgY2IwWzBdLnh5encNCi1tb3Ygb0RlcHRoLCBjYjBbMV0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfQ2xlYXJVaW50OFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEzNiwgMTE0LCAxODQsIDE1MSwgMTUyLCAyNDUsIDk3LCAgNDYsICAxNTEsIDYxLCAgMTE3LCAxMjMsIDIzMSwgMTE3LCAyMTEsDQotICAgIDExNiwgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA3MiwgIDEsDQotICAgIDAsICAgMCwgICAxMjQsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgMjE2LCAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsDQotICAgIDY4LCAgOTcsICAxMTYsIDk3LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDEwOCwgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxODQsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIwMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5OSwgIDExMSwgMTA4LCAxMTEsIDExNCwgOTUsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLA0KLSAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywNCi0gICAgMTA4LCAxMTcsIDEwMSwgNzAsICA5NSwgIDg1LCAgMTA1LCAxMTAsIDExNiwgMCwgICAxNzEsIDE3MSwgMTcxLCAwLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LA0KLSAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsDQotICAgIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LA0KLSAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDI0NCwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNSwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDcsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjM0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsDQotICAgIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICA4MywgIDg2LCAgOTUsICA2OCwgIDY5LA0KLSAgICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA4OCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODYsICAwLA0KLSAgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsDQotICAgIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsDQotICAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNywgICAwLCAgIDAsICAgMCwNCi0gICAgMTAxLCAwLCAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LA0KLSAgICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNDIsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwLA0KLSAgICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0NsZWFyVWludDggL1QgcHNfNF8wIC9GaCBjb21waWxlZFxjbGVhcnVpbnQxMXBzOC5oCisvLyAgICBDbGVhcjExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIENvbG9yQW5kRGVwdGhEYXRhVWludAorLy8geworLy8KKy8vICAgdWludDQgY29sb3JfVWludDsgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vICAgZmxvYXQgelZhbHVlRl9VaW50OyAgICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgMTYgU2l6ZTogICAgIDQKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBDb2xvckFuZERlcHRoRGF0YVVpbnQgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDEgICB4eXp3ICAgICAgICAxICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAyICAgeHl6dyAgICAgICAgMiAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMyAgIHh5encgICAgICAgIDMgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDQgICB4eXp3ICAgICAgICA0ICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICA1ICAgeHl6dyAgICAgICAgNSAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgNiAgIHh5encgICAgICAgIDYgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDcgICB4eXp3ICAgICAgICA3ICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vIFNWX0RFUFRIICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTCisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzJdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF9vdXRwdXQgbzEueHl6dworZGNsX291dHB1dCBvMi54eXp3CitkY2xfb3V0cHV0IG8zLnh5encKK2RjbF9vdXRwdXQgbzQueHl6dworZGNsX291dHB1dCBvNS54eXp3CitkY2xfb3V0cHV0IG82Lnh5encKK2RjbF9vdXRwdXQgbzcueHl6dworZGNsX291dHB1dCBvRGVwdGgKK21vdiBvMC54eXp3LCBjYjBbMF0ueHl6dworbW92IG8xLnh5encsIGNiMFswXS54eXp3Cittb3YgbzIueHl6dywgY2IwWzBdLnh5encKK21vdiBvMy54eXp3LCBjYjBbMF0ueHl6dworbW92IG80Lnh5encsIGNiMFswXS54eXp3Cittb3YgbzUueHl6dywgY2IwWzBdLnh5encKK21vdiBvNi54eXp3LCBjYjBbMF0ueHl6dworbW92IG83Lnh5encsIGNiMFswXS54eXp3Cittb3Ygb0RlcHRoLCBjYjBbMV0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0NsZWFyVWludDhbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEzNiwgMTE0LCAxODQsIDE1MSwgMTUyLCAyNDUsIDk3LCAgNDYsICAxNTEsIDYxLCAgMTE3LCAxMjMsIDIzMSwgMTE3LCAyMTEsCisgICAgMTE2LCAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDcyLCAgMSwKKyAgICAwLCAgIDAsICAgMTI0LCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDIxNiwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMiwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMTYsIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2NywgIDExMSwgMTA4LCAxMTEsIDExNCwgNjUsICAxMTAsIDEwMCwgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsCisgICAgNjgsICA5NywgIDExNiwgOTcsICA4NSwgIDEwNSwgMTEwLCAxMTYsIDAsICAgMTcxLCAxNzEsIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDgsIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE4NCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTksICAxMTEsIDEwOCwgMTExLCAxMTQsIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwKKyAgICAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyMiwgODYsICA5NywKKyAgICAxMDgsIDExNywgMTAxLCA3MCwgIDk1LCAgODUsICAxMDUsIDExMCwgMTE2LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDAsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwKKyAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsCisgICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksCisgICAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzksICA4MywgIDcxLCAgNzgsICAyNDQsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMTUsCisgICAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA1LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgMjM0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwKKyAgICAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwKKyAgICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA4OCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODYsICAwLAorICAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwKKyAgICAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsCisgICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNywgICAwLCAgIDAsICAgMCwKKyAgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LAorICAgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0MiwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMCwKKyAgICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwKKyAgICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZF9wcy5oCmluZGV4IGQ2OWJhMGQuLmUyNjdjNjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZF9wcy5oCkBAIC0xLDgxICsxLDgxIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fTFVNQV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHh4eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQV8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwOSwgNTksICAxMDIsIDMxLCAgMjM3LCAyMjUsIDExMCwgODYsICAyMzYsIDI1MywgMSwgICA5MSwgIDE1NSwgMjE2LCAxNTAsDQotICAgIDI0MCwgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsDQotICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICAxNTYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLA0KLSAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwNCi0gICAgNywgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX0xVTUFfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHh4eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQV8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjA5LCA1OSwgIDEwMiwgMzEsICAyMzcsIDIyNSwgMTEwLCA4NiwgIDIzNiwgMjUzLCAxLCAgIDkxLCAgMTU1LCAyMTYsIDE1MCwKKyAgICAyNDAsIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hXzJkYXJyYXlfcHMuaAppbmRleCA4ZjRmMjE2Li4zODYyMDNjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZGFycmF5X3BzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9MVU1BXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eHh4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjA4LCA3MCwgIDk5LCAgNzEsICAxMTksIDQxLCAgNDMsICAxODQsIDE4OSwgMTQ1LCAxOSwgIDY3LCAgMTgxLCAxMDYsIDEwMywNCi0gICAgNzIsICAxLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksDQotICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwNCi0gICAgNjgsICA4MiwgIDIxMiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLA0KLSAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9MVU1BXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHh4eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX0xVTUFfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjA4LCA3MCwgIDk5LCAgNzEsICAxMTksIDQxLCAgNDMsICAxODQsIDE4OSwgMTQ1LCAxOSwgIDY3LCAgMTgxLCAxMDYsIDEwMywKKyAgICA3MiwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjEyLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDUzLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8zZF9wcy5oCmluZGV4IGVlZDdhNjkuLmQzZDYxMmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8zZF9wcy5oCkBAIC0xLDg0ICsxLDg0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fTFVNQV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eHh4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQV8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjE0LCAxNjAsIDI0OSwgMTA4LCAxODIsIDY2LCAgMjUsICAxNzcsIDM2LCAgODcsICAxMDQsIDE1LCAgMjUwLCAxMjgsIDMwLA0KLSAgICAyNCwgIDEsICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICA2NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEyOCwgNjMsIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9MVU1BXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCittdWwgbzAueHl6LCByMC53d3d3LCByMC54eHh4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMTQsIDE2MCwgMjQ5LCAxMDgsIDE4MiwgNjYsICAyNSwgIDE3NywgMzYsICA4NywgIDEwNCwgMTUsICAyNTAsIDEyOCwgMzAsCisgICAgMjQsICAxLCAgMCwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICA2NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksCisgICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNTYsIDAsCisgICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICAzOSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTI4LCA2MywgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZF9wcy5oCmluZGV4IDVlODg2NmQuLjdlMmZiZGQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfMmRfcHMuaApAQCAtMSw4MSArMSw4MSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX0xVTUFBTFBIQV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5DQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eHh4DQotbW92IG8wLncsIHIwLncNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX0xVTUFBTFBIQV8yRFtdID0gew0KLSAgICA2OCwgODgsICA2NiwgIDY3LCAgMTE1LCAyMywgIDIxMywgNDYsICAyNTIsIDI1LCAgMTEzLCAxOTgsIDE2NSwgMzAsICAyMDUsIDQ4LCAgMTg5LCAxOTgsIDE0MSwNCi0gICAgMjMsIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCA2OCwgIDgyLCAgMTU2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsDQotICAgIDAsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwNCi0gICAgNCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fTFVNQUFMUEhBXzJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHh4eAorbW92IG8wLncsIHIwLncKK3JldAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9MVU1BQUxQSEFfMkRbXSA9IHsKKyAgICA2OCwgODgsICA2NiwgIDY3LCAgMTE1LCAyMywgIDIxMywgNDYsICAyNTIsIDI1LCAgMTEzLCAxOTgsIDE2NSwgMzAsICAyMDUsIDQ4LCAgMTg5LCAxOTgsIDE0MSwKKyAgICAyMywgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDEyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwKKyAgICAyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsCisgICAgODYsIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsIDY4LCAgODIsICAxNTYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDcsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwKKyAgICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LAorICAgIDAsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwKKyAgICA0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmgKaW5kZXggZmM1ZDhlZi4uOGUxOWI0NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkYXJyYXlfcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX0xVTUFBTFBIQV8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eHh4DQotbW92IG8wLncsIHIwLncNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9MVU1BQUxQSEFfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkzLCAgOTEsICAxOTMsIDE5OSwgMjA3LCAxNjQsIDM1LCAgMTIsICAyMDEsIDk1LCAgMTYzLCAxNzEsIDIxOCwgMjE0LCAxODcsDQotICAgIDUxLCAgMSwgICAwLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAyMTIsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX0xVTUFBTFBIQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHh4eAorbW92IG8wLncsIHIwLncKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fTFVNQUFMUEhBXzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkzLCAgOTEsICAxOTMsIDE5OSwgMjA3LCAxNjQsIDM1LCAgMTIsICAyMDEsIDk1LCAgMTYzLCAxNzEsIDIxOCwgMjE0LCAxODcsCisgICAgNTEsICAxLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDEyNCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDIxMiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8zZF9wcy5oCmluZGV4IGYxMjljYTEuLjAwM2MwZjIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfM2RfcHMuaApAQCAtMSw4NCArMSw4NCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX0xVTUFBTFBIQV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCBvMC54eXosIHIwLnd3d3csIHIwLnh4eHgNCi1tb3YgbzAudywgcjAudw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX0xVTUFBTFBIQV8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjQ2LCA4OCwgIDIyNywgMTkwLCAxMjYsIDE0NSwgMjU1LCA4MywgIDMsICAgMTQ1LCAxMTAsIDczLCAgMTksICAxMTAsIDE0MSwNCi0gICAgMTE2LCAxLCAgMCwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgNjQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE1NiwgMCwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICAzOSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NCwgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fTFVNQUFMUEhBXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCBvMC54eXosIHIwLnd3d3csIHIwLnh4eHgKK21vdiBvMC53LCByMC53CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX0xVTUFBTFBIQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAyNDYsIDg4LCAgMjI3LCAxOTAsIDEyNiwgMTQ1LCAyNTUsIDgzLCAgMywgICAxNDUsIDExMCwgNzMsICAxOSwgIDExMCwgMTQxLAorICAgIDExNiwgMSwgIDAsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgNjQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgMzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRfcHMuaAppbmRleCAxMDY2ZWVjLi41ZTZiMzgwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzJkX3BzLmgKQEAgLTEsODEgKzEsODEgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCXzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjUsICAxMzQsIDIyMiwgNDYsICAyMzQsIDE4NSwgMTM1LCAxNzIsIDEyMiwgMTQ3LCAyMSwgIDU4LCAgMTQ1LCAzMywgIDg0LA0KLSAgICAyMzIsIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDEyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittdWwgbzAueHl6LCByMC53d3d3LCByMC54eXp4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JfMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI1LCAgMTM0LCAyMjIsIDQ2LCAgMjM0LCAxODUsIDEzNSwgMTcyLCAxMjIsIDE0NywgMjEsICA1OCwgIDE0NSwgMzMsICA4NCwKKyAgICAyMzIsIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZGFycmF5X3BzLmgKaW5kZXggMmNjMDM0OC4uOGVjMDYzZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzJkYXJyYXlfcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQl8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCXzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA1LCAgIDIwOSwgMTE3LCAyNTUsIDIwNCwgMTY1LCAzLCAgIDIwMiwgNjIsICAyMzcsIDExMSwgMjIsICAxMzQsIDcsICAgNTYsDQotICAgIDE2NywgMSwgICAwLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAyMTIsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittdWwgbzAueHl6LCByMC53d3d3LCByMC54eXp4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCXzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDUsICAgMjA5LCAxMTcsIDI1NSwgMjA0LCAxNjUsIDMsICAgMjAyLCA2MiwgIDIzNywgMTExLCAyMiwgIDEzNCwgNywgICA1NiwKKyAgICAxNjcsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjEyLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDUzLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfM2RfcHMuaAppbmRleCA4YTg3NTE2Li5iYTJhOTQ4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzNkX3BzLmgKQEAgLTEsODQgKzEsODQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tdWwgbzAueHl6LCByMC53d3d3LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCXzNEW10gPSB7DQotICAgIDY4LCAgODgsIDY2LCAgNjcsICAxMDUsIDE1NiwgMTU4LCA3MywgIDI0NSwgNjUsICAxNjksIDEzOCwgMTY0LCA3MSwgIDg2LCAgOTUsICAxODUsIDEzNiwgMTI3LA0KLSAgICA3MCwgIDEsICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICA2NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEyOCwgNjMsIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHl6eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQl8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAxMDUsIDE1NiwgMTU4LCA3MywgIDI0NSwgNjUsICAxNjksIDEzOCwgMTY0LCA3MSwgIDg2LCAgOTUsICAxODUsIDEzNiwgMTI3LAorICAgIDcwLCAgMSwgIDAsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgNjQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgMzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEyOCwgNjMsIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8yZF9wcy5oCmluZGV4IGQwYjY3NWYuLmQ1ZDZlNjAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8yZF9wcy5oCkBAIC0xLDg5ICsxLDg5IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCXzU2NV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQl81NjVfMkRbXSA9IHsNCi0gICAgNjgsIDg4LCAgNjYsICA2NywgIDE1MywgMTgxLCAyMDAsIDMsICAgNjMsICAyNDcsIDE5OSwgMTc2LCAyNCwgIDU1LCAgMTM3LCAxNTMsIDk0LCAgMTc0LCA2MSwNCi0gICAgMzEsIDEsICAgMCwgICAwLCAgIDAsICAgMjM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTEyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCA2OCwgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsDQotICAgIDAsICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDMzLA0KLSAgICA4LCAgMTMwLCA2MCwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAxMTYsIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfNTY1XzJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK211bCBvMC54eXosIHIwLnh5engsIGwoMC4wMzIyNTgsIDAuMDE1ODczLCAwLjAzMjI1OCwgMC4wMDAwMDApCittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JfNTY1XzJEW10gPSB7CisgICAgNjgsIDg4LCAgNjYsICA2NywgIDE1MywgMTgxLCAyMDAsIDMsICAgNjMsICAyNDcsIDE5OSwgMTc2LCAyNCwgIDU1LCAgMTM3LCAxNTMsIDk0LCAgMTc0LCA2MSwKKyAgICAzMSwgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDExMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwKKyAgICAyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsCisgICAgODYsIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDcsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsCisgICAgMCwgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDMzLAorICAgIDgsICAxMzAsIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAxMTYsIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkYXJyYXlfcHMuaAppbmRleCAyZWFiZjFkLi5mYmMxYmY1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8yZGFycmF5X3BzLmgKQEAgLTEsOTkgKzEsOTkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfNTY1XzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1tdWwgbzAueHl6LCByMC54eXp4LCBsKDAuMDMyMjU4LCAwLjAxNTg3MywgMC4wMzIyNTgsIDAuMDAwMDAwKQ0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQl81NjVfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDgyLCAgMjMwLCAxODAsIDE1NiwgNTMsICAyNDgsIDIwMiwgNDMsICAxMTgsIDE5MiwgMTAsICA3MCwgIDEyMSwgMjI0LCAyMTgsDQotICAgIDUyLCAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMjI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICA1NiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzgsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjQsIDY2LCAgMCwgICAwLA0KLSAgICAyNDgsIDY1LCAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLA0KLSAgICA2MCwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JfNTY1XzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5eiwgcjAueHl6eAorbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JfNTY1XzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDgyLCAgMjMwLCAxODAsIDE1NiwgNTMsICAyNDgsIDIwMiwgNDMsICAxMTgsIDE5MiwgMTAsICA3MCwgIDEyMSwgMjI0LCAyMTgsCisgICAgNTIsICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDIyNCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDU2LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3OCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjQsIDY2LCAgMCwgICAwLAorICAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLAorICAgIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LAorICAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oCmluZGV4IGM2M2Q2NjIuLjFjMzQ5YTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oCkBAIC0xLDkzICsxLDkzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCXzU2NV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1tdWwgbzAueHl6LCByMC54eXp4LCBsKDAuMDMyMjU4LCAwLjAxNTg3MywgMC4wMzIyNTgsIDAuMDAwMDAwKQ0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQl81NjVfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsICA2NywgIDE1MSwgNDgsICAxMjMsIDEyMCwgMTQ3LCA4NCwgIDEyLCAgMTE4LCAyNywgIDEzMiwgMTE0LCA3LCAgIDExOSwgMTEwLCAxODQsDQotICAgIDEwMywgMSwgIDAsICAgMCwgICAwLCAgIDMyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDE2NCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LA0KLSAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LA0KLSAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsDQotICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksDQotICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLA0KLSAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTYsIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjQsIDY2LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLCA2MCwgIDgsICAgMzMsDQotICAgIDQsICAgNjEsIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgNjQsICAwLCAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLA0KLSAgICA3LCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCXzU2NV8zRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5eiwgcjAueHl6eAorbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JfNTY1XzNEW10gPSB7CisgICAgNjgsICA4OCwgNjYsICA2NywgIDE1MSwgNDgsICAxMjMsIDEyMCwgMTQ3LCA4NCwgIDEyLCAgMTE4LCAyNywgIDEzMiwgMTE0LCA3LCAgIDExOSwgMTEwLCAxODQsCisgICAgMTAzLCAxLCAgMCwgICAwLCAgIDAsICAgMzIsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksCisgICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsCisgICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU2LCAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjQsIDY2LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLAorICAgIDAsICAgMCwgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLCA2MCwgIDgsICAgMzMsCisgICAgNCwgICA2MSwgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDY0LCAgMCwgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwKKyAgICA3LCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRfcHMuaAppbmRleCAxMjFhMWExLi43MmIxMTA1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRfcHMuaApAQCAtMSw4MSArMSw4MSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW11bCBvMC54eXosIHIwLnd3d3csIHIwLnh5engNCi1tb3YgbzAudywgcjAudw0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV8yRFtdID0gew0KLSAgICA2OCwgODgsICA2NiwgIDY3LCAgOTgsICAxNjMsIDE1NywgMzgsICAyNTMsIDE3MiwgMjA4LCAxNzksIDg0LCAgMTY2LCAyMTUsIDExNywgMjM2LCA1OSwgIDcxLA0KLSAgICA4OSwgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxMiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsIDY4LCAgODIsICAxNTYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDcsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwNCi0gICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwNCi0gICAgMCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLA0KLSAgICA0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK211bCBvMC54eXosIHIwLnd3d3csIHIwLnh5engKK21vdiBvMC53LCByMC53CityZXQKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV8yRFtdID0geworICAgIDY4LCA4OCwgIDY2LCAgNjcsICA5OCwgIDE2MywgMTU3LCAzOCwgIDI1MywgMTcyLCAyMDgsIDE3OSwgODQsICAxNjYsIDIxNSwgMTE3LCAyMzYsIDU5LCAgNzEsCisgICAgODksIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxMiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwKKyAgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsCisgICAgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsCisgICAgMCwgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCA2OCwgIDgyLCAgMTU2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICA3LCAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsCisgICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwKKyAgICAwLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsCisgICAgNCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV8yZGFycmF5X3BzLmgKaW5kZXggMWU1Yjg5Zi4uMDJlOTNlMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRhcnJheV9wcy5oCkBAIC0xLDkwICsxLDkwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW1vdiBvMC53LCByMC53DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNzEsICAxMzcsIDExNSwgMTE2LCAxMTYsIDIyNywgMTIwLCAxMywgIDc4LCAgNiwgICAyMzgsIDE4NCwgNDIsICAyMzMsIDE0NSwNCi0gICAgMTc2LCAxLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksDQotICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwNCi0gICAgNjgsICA4MiwgIDIxMiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLA0KLSAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCBvMC54eXosIHIwLnd3d3csIHIwLnh5engKK21vdiBvMC53LCByMC53CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQkFfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNzEsICAxMzcsIDExNSwgMTE2LCAxMTYsIDIyNywgMTIwLCAxMywgIDc4LCAgNiwgICAyMzgsIDE4NCwgNDIsICAyMzMsIDE0NSwKKyAgICAxNzYsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjEyLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDUzLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfM2RfcHMuaAppbmRleCA2MjRiMTUyLi41ODhlN2E4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfM2RfcHMuaApAQCAtMSw4NCArMSw4NCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbXVsIG8wLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW1vdiBvMC53LCByMC53DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMTgsICA5NiwgIDk3LCAgMTI5LCAxNTAsIDQyLCAgMTIwLCA1NSwgIDUsICAgMjQ1LCAxOSwgIDE1MywgMjQsICA1MywgIDc0LA0KLSAgICAxNTUsIDEsICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICA2NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTU2LCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCittdWwgbzAueHl6LCByMC53d3d3LCByMC54eXp4Cittb3YgbzAudywgcjAudworcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JBXzNEW10gPSB7CisgICAgNjgsICA4OCwgNjYsICA2NywgIDE4LCAgOTYsICA5NywgIDEyOSwgMTUwLCA0MiwgIDEyMCwgNTUsICA1LCAgIDI0NSwgMTksICAxNTMsIDI0LCAgNTMsICA3NCwKKyAgICAxNTUsIDEsICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDY0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE1NiwgMCwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDM5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMzIsICAxNiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTQsIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkX3BzLmgKaW5kZXggMjgwZjRkNi4uZGUxYmY5YiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8yZF9wcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCQV80NDQ0XzJEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnd3d3csIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLW11bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQ0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV80NDQ0XzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTYyLCAxNTksIDQyLCAgMTQ4LCAxOTIsIDM1LCAgMjQ4LCAxNjYsIDk2LCAgMjE5LCA4NCwgIDE1MywgNTUsICAyNDMsIDE3NCwNCi0gICAgMTE1LCAxLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICA5MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwNCi0gICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1OSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsDQotICAgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywNCi0gICAgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsDQotICAgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfNDQ0NF8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQorcmV0CisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQkFfNDQ0NF8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTYyLCAxNTksIDQyLCAgMTQ4LCAxOTIsIDM1LCAgMjQ4LCAxNjYsIDk2LCAgMjE5LCA4NCwgIDE1MywgNTUsICAyNDMsIDE3NCwKKyAgICAxMTUsIDEsICAgMCwgICAwLCAgIDAsICAgMjE2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgOTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMjM2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsCisgICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsCisgICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywKKyAgICAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwKKyAgICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmgKaW5kZXggMzc4Y2FlNy4uMGJlYjQ2MiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkYXJyYXlfcHMuaApAQCAtMSw5NyArMSw5NyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfNDQ0NF8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JBXzQ0NDRfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDAsICAgMTA1LCAxOTYsIDQ5LCAgMTksICAxODUsIDI0NywgODIsICAxNzYsIDcsICAgNTQsICAyNTIsIDIzOSwgMjI1LCAxNjksDQotICAgIDIyNSwgMSwgICAwLCAgIDAsICAgMCwgICA3MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMjA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLA0KLSAgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LA0KLSAgICA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfNDQ0NF8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQkFfNDQ0NF8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAwLCAgIDEwNSwgMTk2LCA0OSwgIDE5LCAgMTg1LCAyNDcsIDgyLCAgMTc2LCA3LCAgIDU0LCAgMjUyLCAyMzksIDIyNSwgMTY5LAorICAgIDIyNSwgMSwgICAwLCAgIDAsICAgMCwgICA3MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAyMDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwKKyAgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwKKyAgICA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzNkX3BzLmgKaW5kZXggOGYwOTU4ZC4uOTU5ODRkNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8zZF9wcy5oCkBAIC0xLDkxICsxLDkxIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCQV80NDQ0XzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV80NDQ0XzNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTgyLCAyNTQsIDQ0LCAgMTY1LCAxNSwgIDM5LCAgMTkzLCAyNDcsIDU4LCAgMjQ0LCAyNDMsIDE2NiwgMTkwLCAyMzYsIDIyMSwNCi0gICAgMjUyLCAxLCAgIDAsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwNCi0gICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsDQotICAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsDQotICAgIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfUE1fUkdCQV80NDQ0XzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JBXzQ0NDRfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4MiwgMjU0LCA0NCwgIDE2NSwgMTUsICAzOSwgIDE5MywgMjQ3LCA1OCwgIDI0NCwgMjQzLCAxNjYsIDE5MCwgMjM2LCAyMjEsCisgICAgMjUyLCAxLCAgIDAsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDE0NCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksCisgICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMzYsIDAsCisgICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLAorICAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LAorICAgIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfMmRfcHMuaAppbmRleCA0NmY3NDBiLi5lYzE2NWUwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzJkX3BzLmgKQEAgLTEsODcgKzEsODcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQkFfNTU1MV8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDksICAgMTYyLCAyNDUsIDY2LCAgMjM3LCAxOTUsIDEyNSwgMjE1LCAxNzUsIDg2LCAgMjE3LCA3LCAgMjUwLCAxNDQsIDEyNywNCi0gICAgMjQsICAxLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDkyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1OSwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsDQotICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAwLCAgIDI0OCwgNjUsDQotICAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDMyLCAgMTYsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgNCwgICA2MSwgIDgsDQotICAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCA4NCwgIDY1LCAgODQsDQotICAgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfNTU1MV8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApCityZXQKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV81NTUxXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5LCAgIDE2MiwgMjQ1LCA2NiwgIDIzNywgMTk1LCAxMjUsIDIxNSwgMTc1LCA4NiwgIDIxNywgNywgIDI1MCwgMTQ0LCAxMjcsCisgICAgMjQsICAxLCAgIDAsICAgMCwgICAwLCAgIDIxNiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgOTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCA3OSwgIDgyLCAgNjgsCisgICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1OSwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NiwgIDAsICAgMCwKKyAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgMCwgICAyNDgsIDY1LAorICAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsIDQsICAgNjEsICA4LAorICAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCA4NCwgIDY1LCAgODQsCisgICAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfMmRhcnJheV9wcy5oCmluZGV4IDU0MDIwZGQuLmMzMmFkMmEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmgKQEAgLTEsOTcgKzEsOTcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwNSwgODAsICAxODUsIDE4NSwgMjExLCAyNDksIDk2LCAgMTU5LCAyMCwgIDIxNSwgMjM0LCA3NywgIDEwMSwgMTU3LCAyNDAsDQotICAgIDQ3LCAgMSwgICAwLCAgIDAsICAgMCwgICA3MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMjA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLA0KLSAgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwNCi0gICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1BNX1JHQkFfNTU1MV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMDUsIDgwLCAgMTg1LCAxODUsIDIxMSwgMjQ5LCA5NiwgIDE1OSwgMjAsICAyMTUsIDIzNCwgNzcsICAxMDEsIDE1NywgMjQwLAorICAgIDQ3LCAgMSwgICAwLCAgIDAsICAgMCwgICA3MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAyMDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwKKyAgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsCisgICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8zZF9wcy5oCmluZGV4IGUwNDAzZmMuLjEyMjBhNDkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfM2RfcHMuaApAQCAtMSw5MSArMSw5MSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1BNX1JHQkFfNTU1MV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnd3d3csIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV81NTUxXzNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNiwgICAxNTUsIDkzLCAgMTIwLCAxNTksIDg4LCAgMjAzLCAxNDksIDgxLCAgMTE2LCAxMDgsIDMwLCAgMjIzLCAxNzEsIDEzNywNCi0gICAgMTEyLCAxLCAgIDAsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwNCi0gICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsDQotICAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywNCi0gICAgNCwgICA2MSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9QTV9SR0JBXzU1NTFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfUE1fUkdCQV81NTUxXzNEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA2LCAgIDE1NSwgOTMsICAxMjAsIDE1OSwgODgsICAyMDMsIDE0OSwgODEsICAxMTYsIDEwOCwgMzAsICAyMjMsIDE3MSwgMTM3LAorICAgIDExMiwgMSwgICAwLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjM2LCAwLAorICAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwKKyAgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLAorICAgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oCmluZGV4IGQ4ZTZkNWEuLjNlZjRhZmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oCkBAIC0xLDg2ICsxLDg2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjAudywgcjAueCwgcjAudw0KLW1vdmMgbzAueHl6LCByMS54eHh4LCByMC53d3d3LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0DQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9MVU1BXzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNzEsICAxNCwgIDE4NiwgNDQsICAyMzgsIDE2MywgMTQ0LCAyNTQsIDYxLCAgMTI2LCA4MywgIDE3OSwgMTA2LCA2NCwgIDIyNiwNCi0gICAgNDEsICAxLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICA3NiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwNCi0gICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDIyMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLA0KLSAgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwNCi0gICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywNCi0gICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQV8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIwLncsIHIwLngsIHIwLncKK21vdmMgbzAueHl6LCByMS54eHh4LCByMC53d3d3LCByMC54eXp4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9MVU1BXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA3MSwgIDE0LCAgMTg2LCA0NCwgIDIzOCwgMTYzLCAxNDQsIDI1NCwgNjEsICAxMjYsIDgzLCAgMTc5LCAxMDYsIDY0LCAgMjI2LAorICAgIDQxLCAgMSwgICAwLCAgIDAsICAgMCwgICAyMDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICA3NiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAyMjAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LAorICAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLAorICAgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRhcnJheV9wcy5oCmluZGV4IDdlZWZmYmIuLjY0YWI5MjIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hXzJkYXJyYXlfcHMuaApAQCAtMSw5NiArMSw5NiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX0xVTUFfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIwLncsIHIwLngsIHIwLncNCi1tb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjAud3d3dywgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1VNX0xVTUFfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4NCwgMTYyLCAxNTUsIDQzLCAgMjMsICA0OCwgIDIwNywgMTMxLCA3LCAgIDg5LCAgMTkyLCA5NCwgIDIyNywgOTQsICAyMjAsDQotICAgIDE5MSwgMSwgICAwLCAgIDAsICAgMCwgICA1NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAyMCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwNCi0gICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwNCi0gICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9MVU1BXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMC53LCByMC54LCByMC53Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjAud3d3dywgcjAueHl6eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX0xVTUFfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTg0LCAxNjIsIDE1NSwgNDMsICAyMywgIDQ4LCAgMjA3LCAxMzEsIDcsICAgODksICAxOTIsIDk0LCAgMjI3LCA5NCwgIDIyMCwKKyAgICAxOTEsIDEsICAgMCwgICAwLCAgIDAsICAgNTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LAorICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaAppbmRleCAzZDE1ZDQyLi43YWQ0ODk1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX0xVTUFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjAudywgcjAueCwgcjAudw0KLW1vdmMgbzAueHl6LCByMS54eHh4LCByMC53d3d3LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fTFVNQV8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgNzcsICAxNzEsIDE5NCwgMTk2LCA5NywgIDEwOSwgMTIwLCAxNzcsIDQ0LCAgMjIzLCAxNDMsIDk0LCAgMTg0LCA1NSwgIDI0LA0KLSAgICAxOTMsIDEsICAwLCAgIDAsICAgMCwgICAyNTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAxMzAsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX0xVTUFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjAudywgcjAueCwgcjAudworbW92YyBvMC54eXosIHIxLnh4eHgsIHIwLnd3d3csIHIwLnh5engKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9MVU1BXzNEW10gPSB7CisgICAgNjgsICA4OCwgNjYsICA2NywgIDc3LCAgMTcxLCAxOTQsIDE5NiwgOTcsICAxMDksIDEyMCwgMTc3LCA0NCwgIDIyMywgMTQzLCA5NCwgIDE4NCwgNTUsICAyNCwKKyAgICAxOTMsIDEsICAwLCAgIDAsICAgMCwgICAyNTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDEyOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIyMCwgMCwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTQsIDAsICAgMCwgICA3LCAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsCisgICAgMCwgICAwLCAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZF9wcy5oCmluZGV4IDc4M2ZlNDAuLjc4YzJjMjUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzJkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfMmRfcHMuaApAQCAtMSw4NiArMSw4NiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX0xVTUFBTFBIQV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5DQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55LCByMC54LCByMC53DQotbW92YyBvMC54eXosIHIxLnh4eHgsIHIxLnl5eXksIHIwLnh5engNCi1tb3YgbzAudywgcjAudw0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjIsICAxMDksIDE1NSwgNDAsICAyMDEsIDM1LCAgMTYsICAzOSwgIDg1LCAgNSwgICAxNzUsIDUzLCAyMjcsIDU0LCAgMjA5LA0KLSAgICAyMzUsIDEsICAgMCwgICAwLCAgIDAsICAgMjAwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgNzYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAzNCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICAxMCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsIDAsICAgMCwgICA5LA0KLSAgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgODYsICA1LCAgIDE2LA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgNSwgICAxMzAsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgMCwgICAxLCAgIDgzLA0KLSAgICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9MVU1BQUxQSEFfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnksIHIwLngsIHIwLncKK21vdmMgbzAueHl6LCByMS54eHh4LCByMS55eXl5LCByMC54eXp4Cittb3YgbzAudywgcjAudworcmV0CisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX0xVTUFBTFBIQV8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjIsICAxMDksIDE1NSwgNDAsICAyMDEsIDM1LCAgMTYsICAzOSwgIDg1LCAgNSwgICAxNzUsIDUzLCAyMjcsIDU0LCAgMjA5LAorICAgIDIzNSwgMSwgICAwLCAgIDAsICAgMCwgICAyMDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDc2LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAyMjAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgMCwgICAwLCAgIDY5LAorICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNTgsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMzQsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMTAsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsIDAsICAgMCwgICA5LAorICAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICA4NiwgIDUsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgIDUsICAgMTMwLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgMCwgICAxLCAgIDgzLAorICAgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzJkYXJyYXlfcHMuaAppbmRleCA0MGFiNzRhLi4yOTc4NTFhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfMmRhcnJheV9wcy5oCkBAIC0xLDk2ICsxLDk2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnksIHIwLngsIHIwLncNCi1tb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXl5eSwgcjAueHl6eA0KLW1vdiBvMC53LCByMC53DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NCwgIDExNywgMiwgICA1OCwgIDIzMywgMjA3LCAxNjUsIDcxLCAgNTksICA0MSwgIDUxLCAgOTIsICAyMTMsIDgwLCAgMTc3LA0KLSAgICAyNywgIDEsICAgMCwgICAwLCAgIDAsICAgNTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMjAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAzNCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgNSwgICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnksIHIwLngsIHIwLncKK21vdmMgbzAueHl6LCByMS54eHh4LCByMS55eXl5LCByMC54eXp4Cittb3YgbzAudywgcjAudworcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9MVU1BQUxQSEFfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTQsICAxMTcsIDIsICAgNTgsICAyMzMsIDIwNywgMTY1LCA3MSwgIDU5LCAgNDEsICA1MSwgIDkyLCAgMjEzLCA4MCwgIDE3NywKKyAgICAyNywgIDEsICAgMCwgICAwLCAgIDAsICAgNTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LAorICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDM0LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgNSwgICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzNkX3BzLmgKaW5kZXggYWJmZTIxMi4uNTMwMzkxYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8zZF9wcy5oCkBAIC0xLDkwICsxLDkwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueSwgcjAueCwgcjAudw0KLW1vdmMgbzAueHl6LCByMS54eHh4LCByMS55eXl5LCByMC54eXp4DQotbW92IG8wLncsIHIwLncNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9MVU1BQUxQSEFfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsICA2NywgIDEyOCwgMTc1LCAxNzAsIDMyLCAgMzIsICAyNiwgIDE0NSwgNTIsICAxNiwgIDEzOCwgMTY3LCAyMzMsIDE5NSwgMTMyLCAyMDIsDQotICAgIDIzLCAgMSwgIDAsICAgMCwgICAwLCAgIDI1MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDEyOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LA0KLSAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LA0KLSAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsDQotICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksDQotICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMjAsIDAsDQotICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLA0KLSAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwgIDAsICAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTQsIDAsICAgMCwgICA3LCAgIDM0LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDUsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1OCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLA0KLSAgICAwLCAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueSwgcjAueCwgcjAudworbW92YyBvMC54eXosIHIxLnh4eHgsIHIxLnl5eXksIHIwLnh5engKK21vdiBvMC53LCByMC53CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX0xVTUFBTFBIQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAxMjgsIDE3NSwgMTcwLCAzMiwgIDMyLCAgMjYsICAxNDUsIDUyLCAgMTYsICAxMzgsIDE2NywgMjMzLCAxOTUsIDEzMiwgMjAyLAorICAgIDIzLCAgMSwgIDAsICAgMCwgICAwLCAgIDI1MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTI4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNCwgMCwgICAwLCAgIDcsICAgMzQsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDUsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTgsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkX3BzLmgKaW5kZXggM2UzMjU1OC4uYmM4MmZmNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8yZF9wcy5oCkBAIC0xLDg2ICsxLDg2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCXzJEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgbzAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0DQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JfMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA2MywgIDExNywgNDksICA1MywgIDIzNSwgMTQ2LCAyMjMsIDIsICAgMTU5LCAxNjYsIDQsICAgMTk1LCAxNDksIDI1NSwgMTAyLA0KLSAgICAxMzgsIDEsICAgMCwgICAwLCAgIDAsICAgMjAwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDc2LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsDQotICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksDQotICAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsDQotICAgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQl8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA2MywgIDExNywgNDksICA1MywgIDIzNSwgMTQ2LCAyMjMsIDIsICAgMTU5LCAxNjYsIDQsICAgMTk1LCAxNDksIDI1NSwgMTAyLAorICAgIDEzOCwgMSwgICAwLCAgIDAsICAgMCwgICAyMDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICA3NiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAyMjAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksCisgICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsCisgICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfMmRhcnJheV9wcy5oCmluZGV4IGNhZjUwYjUuLjdlOWIwNWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8yZGFycmF5X3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyBvMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIxMCwgMTAsICA1MywgIDExNCwgODYsICA5MywgIDE2MSwgMTEwLCA1LCAgIDIwNiwgMTc3LCAxMDYsIDE4NSwgMjEzLCAxNzksDQotICAgIDc2LCAgMSwgICAwLCAgIDAsICAgMCwgICA1NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAyMCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwNCi0gICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDksICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwNCi0gICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JfMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQl8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMTAsIDEwLCAgNTMsICAxMTQsIDg2LCAgOTMsICAxNjEsIDExMCwgNSwgICAyMDYsIDE3NywgMTA2LCAxODUsIDIxMywgMTc5LAorICAgIDc2LCAgMSwgICAwLCAgIDAsICAgMCwgICA1NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAyMCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsCisgICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfM2RfcHMuaAppbmRleCA3MzczZjE1Li43YWY0NGIzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzNkX3BzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQl8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMTg4LCA0OCwgIDE2LCAgOCwgICA5MCwgIDkzLCAgMjgsICAyMjksIDM3LCAgMSwgICAzNSwgIDI1MCwgMTYsICAxODQsIDkxLA0KLSAgICA5NCwgIDEsICAwLCAgIDAsICAgMCwgICAyNTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQl8zRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyBvMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMTg4LCA0OCwgIDE2LCAgOCwgICA5MCwgIDkzLCAgMjgsICAyMjksIDM3LCAgMSwgICAzNSwgIDI1MCwgMTYsICAxODQsIDkxLAorICAgIDk0LCAgMSwgIDAsICAgMCwgICAwLCAgIDI1MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTI4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNCwgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRfcHMuaAppbmRleCBiNGY1MTY1Li43YmM3Y2UzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRfcHMuaApAQCAtMSw5NCArMSw5NCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQl81NjVfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1tdWwgbzAueHl6LCByMC54eXp4LCBsKDAuMDMyMjU4LCAwLjAxNTg3MywgMC4wMzIyNTgsIDAuMDAwMDAwKQ0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzU2NV8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExNywgODEsICAyMjMsIDcsICAgMzAsICAyMzEsIDIzLCAgMzIsICA0NywgIDEyMCwgNjgsICAyNywgMjA2LCA3NywgIDU0LA0KLSAgICAyMiwgIDEsICAgMCwgICAwLCAgIDAsICAgNDQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTc2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgNjQsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgOTAsIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICA2LA0KLSAgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgMCwgICAwLCAgIDksDQotICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAxNTAsIDcsICAgMTYsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAxMCwgIDExNCwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI0LCA2NiwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgMCwgICAwLCAgIDUsDQotICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NiwgIDAsICAgMCwNCi0gICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgIDYxLCAgMzMsICA4LCAgIDEzMCwgNjAsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgIDAsICAgMCwgICA1NCwNCi0gICAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgIDAsICAgMTI4LCA2MywNCi0gICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQl81NjVfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCBsKDMxLjAwMDAwMCwgNjMuMDAwMDAwLCAzMS4wMDAwMDAsIDAuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6LCByMC54eXp4CittdWwgbzAueHl6LCByMC54eXp4LCBsKDAuMDMyMjU4LCAwLjAxNTg3MywgMC4wMzIyNTgsIDAuMDAwMDAwKQorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzU2NV8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTE3LCA4MSwgIDIyMywgNywgICAzMCwgIDIzMSwgMjMsICAzMiwgIDQ3LCAgMTIwLCA2OCwgIDI3LCAyMDYsIDc3LCAgNTQsCisgICAgMjIsICAxLCAgIDAsICAgMCwgICAwLCAgIDQ0LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTc2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCA3OSwgIDgyLCAgNjgsCisgICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDY0LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA0OSwgIDAsICAgMCwKKyAgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA1OCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAwLCAgIDAsICAgOSwKKyAgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTUwLCA3LCAgIDE2LAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAxMCwgIDExNCwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgMCwgICAwLCAgIDAsCisgICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsIDAsICAgMCwgICA1LAorICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NiwgIDAsICAgMCwKKyAgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDMzLCAgOCwgICAxMzAsIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgIDAsICAgMTI4LCA2MywKKyAgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8yZGFycmF5X3BzLmgKaW5kZXggNGUyNDgxMi4uZTQ1YmIyYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRhcnJheV9wcy5oCkBAIC0xLDEwNCArMSwxMDQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JfNTY1XzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzU2NV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMzUsICAyMTksIDE1MSwgMjUyLCAxOTEsIDE3NiwgMTc3LCAxNDksIDI1MywgMTM2LCAxNTcsIDcyLCAgOTksICAxNDEsIDQzLA0KLSAgICA1MywgIDEsICAgMCwgICAwLCAgIDAsICAgMTU2LCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDMyLCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMTIwLCAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDk0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsDQotICAgIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwNCi0gICAgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLCA2MCwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwNCi0gICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMSwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCXzU2NV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5eiwgcjAueHl6eAorbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzU2NV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAzNSwgIDIxOSwgMTUxLCAyNTIsIDE5MSwgMTc2LCAxNzcsIDE0OSwgMjUzLCAxMzYsIDE1NywgNzIsICA5OSwgIDE0MSwgNDMsCisgICAgNTMsICAxLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDMyLCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDEyMCwgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA5NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwKKyAgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwKKyAgICA2NSwgIDAsICAgMCwgICAxMjQsIDY2LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLAorICAgIDgsICAgMzMsICA0LCAgIDYxLCAgMzMsICA4LCAgIDEzMCwgNjAsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwKKyAgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDExLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8zZF9wcy5oCmluZGV4IDg2NjY1OGIuLjdjZGE4ZGEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8zZF9wcy5oCkBAIC0xLDk4ICsxLDk4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCXzU2NV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JfNTY1XzNEW10gPSB7DQotICAgIDY4LCAgODgsIDY2LCAgNjcsICAxMDMsIDIxMywgMywgICAxMDEsIDIzNSwgNzIsICAyMjQsIDIzNCwgOTAsICAxMTUsIDk2LCAgMTkyLCA4NCwgIDEyMiwgMjE2LA0KLSAgICAxNjEsIDEsICAwLCAgIDAsICAgMCwgICA5NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAyMjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNjQsICAxLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwNCi0gICAgMTI0LCA2NiwgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwNCi0gICAgNjEsICAzMywgOCwgICAxMzAsIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywNCi0gICAgODQsICA2NSwgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JfNTY1XzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK211bCBvMC54eXosIHIwLnh5engsIGwoMC4wMzIyNTgsIDAuMDE1ODczLCAwLjAzMjI1OCwgMC4wMDAwMDApCittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCXzU2NV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAxMDMsIDIxMywgMywgICAxMDEsIDIzNSwgNzIsICAyMjQsIDIzNCwgOTAsICAxMTUsIDk2LCAgMTkyLCA4NCwgIDEyMiwgMjE2LAorICAgIDE2MSwgMSwgIDAsICAgMCwgICAwLCAgIDk2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMjI4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNjQsICAxLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNCwgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwKKyAgICAxMjQsIDY2LCAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwKKyAgICA2MSwgIDMzLCA4LCAgIDEzMCwgNjAsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsCisgICAgODQsICA2NSwgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZF9wcy5oCmluZGV4IGEzNjMyOWMuLmJhOWQzYTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZF9wcy5oCkBAIC0xLDg2ICsxLDg2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyBvMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tb3YgbzAudywgcjAudw0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIxNCwgMTMwLCAxNTIsIDIzMywgMTg1LCAyNTQsIDc4LCAgMjQ3LCAxMywgIDE5NSwgODEsICAxMiwgMTI2LCAxMywgIDEzMCwNCi0gICAgMTU0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDc2LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDIyMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDQ5LCAgMCwgICAwLA0KLSAgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgNiwNCi0gICAgOSwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsIDAsICAgMCwgICA5LA0KLSAgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTUwLCA3LCAgIDE2LA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgNSwgICAxMzAsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgMCwgICAxLCAgIDgzLA0KLSAgICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbW92IG8wLncsIHIwLncKK3JldAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMTQsIDEzMCwgMTUyLCAyMzMsIDE4NSwgMjU0LCA3OCwgIDI0NywgMTMsICAxOTUsIDgxLCAgMTIsIDEyNiwgMTMsICAxMzAsCisgICAgMTU0LCAxLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgNzYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCA3OSwgIDgyLCAgNjgsCisgICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDIyMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA0OSwgIDAsICAgMCwKKyAgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA1OCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAwLCAgIDAsICAgOSwKKyAgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTUwLCA3LCAgIDE2LAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICA1LCAgIDEzMCwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgIDAsICAgMSwgICA4MywKKyAgICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzJkYXJyYXlfcHMuaAppbmRleCBkODVlODg5Li44ZmRlMzdlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZGFycmF5X3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW1vdiBvMC53LCByMC53DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTQsICAxMTIsIDUwLCAgMTA1LCAxMTMsIDEwOSwgMjQwLCA2MCwgIDE3MiwgMTEzLCAxODQsIDI0MiwgMjM1LCA4NywgIDY0LA0KLSAgICAzMiwgIDEsICAgMCwgICAwLCAgIDAsICAgNTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMjAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbW92IG8wLncsIHIwLncKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NCwgIDExMiwgNTAsICAxMDUsIDExMywgMTA5LCAyNDAsIDYwLCAgMTcyLCAxMTMsIDE4NCwgMjQyLCAyMzUsIDg3LCAgNjQsCisgICAgMzIsICAxLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDIwLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwKKyAgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwKKyAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzNkX3BzLmgKaW5kZXggOTQ4ZDI2MC4uYjM1ODljNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzNkX3BzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgbzAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbW92IG8wLncsIHIwLncNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzNEW10gPSB7DQotICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMzgsIDIyNywgMjMxLCAyMDksIDI1LCAgMTA1LCAxMzcsIDExLCAgMTc1LCAyMjcsIDIzNCwgMjM5LCAyNTAsIDEwMCwgMTk4LA0KLSAgICAxODcsIDEsICAwLCAgIDAsICAgMCwgICAyNTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTgsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgNiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIG8wLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbW92IG8wLncsIHIwLncKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMzgsIDIyNywgMjMxLCAyMDksIDI1LCAgMTA1LCAxMzcsIDExLCAgMTc1LCAyMjcsIDIzNCwgMjM5LCAyNTAsIDEwMCwgMTk4LAorICAgIDE4NywgMSwgIDAsICAgMCwgICAwLCAgIDI1MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTI4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjIwLCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNCwgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTgsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzJkX3BzLmgKaW5kZXggZTlhNjIxMC4uNzY0OTVlNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZF9wcy5oCkBAIC0xLDkyICsxLDkyIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0XzJEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNDQ0NF8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyMiwgMjQxLCAxMjUsIDIxMSwgNTMsICA4LCAgIDE3MSwgMjI1LCAxOTUsIDE4OCwgMjIsICAxMTgsIDE1NSwgNTMsICAxMzYsDQotICAgIDczLCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsDQotICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICA0NCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLA0KLSAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwNCi0gICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgOSwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwNCi0gICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsDQotICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzQ0NDRfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQorcmV0CisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNDQ0NF8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjIyLCAyNDEsIDEyNSwgMjExLCA1MywgIDgsICAgMTcxLCAyMjUsIDE5NSwgMTg4LCAyMiwgIDExOCwgMTU1LCA1MywgIDEzNiwKKyAgICA3MywgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgNDQsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDc1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLAorICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwKKyAgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LAorICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LAorICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsCisgICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsCisgICAgMCwgICAwLCAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgNjIsCisgICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmgKaW5kZXggYzI3ODRkMS4uYjBlMTY1YSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzJkYXJyYXlfcHMuaApAQCAtMSwxMDIgKzEsMTAyIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0XzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV80NDQ0XzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDgsIDQ2LCAgMTkxLCA3LCAgIDQsICAgMTY3LCAxMzAsIDE2MywgOTMsICAxMjcsIDIxMiwgMjExLCA0NywgIDE0OSwgMjE2LA0KLSAgICAyNCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMTAwLCAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsDQotICAgIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwNCi0gICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwNCi0gICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQkFfNDQ0NF8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6dywgcjAueHl6dywgbCgxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNDQ0NF8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDgsIDQ2LCAgMTkxLCA3LCAgIDQsICAgMTY3LCAxMzAsIDE2MywgOTMsICAxMjcsIDIxMiwgMjExLCA0NywgIDE0OSwgMjE2LAorICAgIDI0LCAgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAxMDAsIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsCisgICAgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwKKyAgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLAorICAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfM2RfcHMuaAppbmRleCAwN2M0NTJmLi5hMWI3ZWQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzNkX3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzQ0NDRfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV80NDQ0XzNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjM0LCAxNTQsIDI1MywgNTksICAxMzgsIDEyNiwgMTAsICA2NywgIDEwMSwgMjE5LCAxMTYsIDQyLCAgNjksICAxMjksIDczLA0KLSAgICAxNDcsIDEsICAgMCwgICAwLCAgIDAsICAgNzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LA0KLSAgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsDQotICAgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNDQsICAxLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLA0KLSAgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDksICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwNCi0gICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LA0KLSAgICA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwNCi0gICAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQkFfNDQ0NF8zRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzQ0NDRfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIzNCwgMTU0LCAyNTMsIDU5LCAgMTM4LCAxMjYsIDEwLCAgNjcsICAxMDEsIDIxOSwgMTE2LCA0MiwgIDY5LCAgMTI5LCA3MywKKyAgICAxNDcsIDEsICAgMCwgICAwLCAgIDAsICAgNzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMjA4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDQ0LCAgMSwKKyAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsCisgICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwKKyAgICA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwKKyAgICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0X3BzLmgKaW5kZXggYzc4NmNhNy4uMGY0NjYxNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF9wcy5oCkBAIC0xLDkyICsxLDkyIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzQ0NDRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjIsIDI0MSwgMTI1LCAyMTEsIDUzLCAgOCwgICAxNzEsIDIyNSwgMTk1LCAxODgsIDIyLCAgMTE4LCAxNTUsIDUzLCAgMTM2LA0KLSAgICA3MywgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgNDQsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDc1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsDQotICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksDQotICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LA0KLSAgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgNjIsDQotICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6dywgcjAueHl6dywgbCgxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV80NDQ0W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjIsIDI0MSwgMTI1LCAyMTEsIDUzLCAgOCwgICAxNzEsIDIyNSwgMTk1LCAxODgsIDIyLCAgMTE4LCAxNTUsIDUzLCAgMTM2LAorICAgIDczLCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICA0NCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksCisgICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsCisgICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZF9wcy5oCmluZGV4IDJiMzA0ZmEuLjFmYzg0MTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzJkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfMmRfcHMuaApAQCAtMSw5MiArMSw5MiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQkFfNTU1MV8yRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5DQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNTU1MV8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI0NCwgMjQ3LCAxNDgsIDExOCwgMywgICAzMCwgIDYwLCAgMywgICA0LCAgIDE5MywgMjA5LCAxNzgsIDg3LCAgMTg1LCAxNzksDQotICAgIDc1LCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsDQotICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICA0NCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLA0KLSAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwNCi0gICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgOSwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwNCi0gICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsDQotICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApCityZXQKKy8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV81NTUxXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDQsIDI0NywgMTQ4LCAxMTgsIDMsICAgMzAsICA2MCwgIDMsICAgNCwgICAxOTMsIDIwOSwgMTc4LCA4NywgIDE4NSwgMTc5LAorICAgIDc1LCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICA0NCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksCisgICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsCisgICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzJkYXJyYXlfcHMuaAppbmRleCA3ZmU1OWEwLi5iOThmZDIzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfMmRhcnJheV9wcy5oCkBAIC0xLDEwMiArMSwxMDIgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNTU1MV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTk2LCAyMzMsIDI3LCAgMTM2LCAyMjcsIDE1MiwgODQsICAyMzcsIDg1LCAgMjgsICAyMDUsIDI0MSwgMTYyLCAxMTIsIDIzOSwNCi0gICAgMTM5LCAxLCAgIDAsICAgMCwgICAwLCAgIDEzNiwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksDQotICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwNCi0gICAgNjgsICA4MiwgIDEwMCwgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLA0KLSAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LA0KLSAgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ4LA0KLSAgICA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsDQotICAgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsDQotICAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9GX1VNX1JHQkFfNTU1MV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTYsIDIzMywgMjcsICAxMzYsIDIyNywgMTUyLCA4NCwgIDIzNywgODUsICAyOCwgIDIwNSwgMjQxLCAxNjIsIDExMiwgMjM5LAorICAgIDEzOSwgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAxMDAsIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsCisgICAgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwKKyAgICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLAorICAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfM2RfcHMuaAppbmRleCA0NGI3N2YyLi4yMzVmNWQ3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzNkX3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzU1NTFfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsICA2NywgIDExLCAgMTU2LCAyMTksIDIwMSwgMTU0LCAyMTEsIDI0OCwgMTkwLCAxNjQsIDEwNywgMTIwLCA4OSwgIDIyMiwgNDksICAyNDYsDQotICAgIDIwOCwgMSwgIDAsICAgMCwgICAwLCAgIDc2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LA0KLSAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LA0KLSAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsDQotICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksDQotICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA0NCwgIDEsDQotICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLA0KLSAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwgIDAsICAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTQsIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDksICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLA0KLSAgICAyNDgsIDY1LCAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LA0KLSAgICA2MSwgIDgsICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LA0KLSAgICA2NSwgIDg0LCAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDMyMjU4LCAwLjAzMjI1OCwgMC4wMzIyNTgsIDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvRl9VTV9SR0JBXzU1NTFfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMTEsICAxNTYsIDIxOSwgMjAxLCAxNTQsIDIxMSwgMjQ4LCAxOTAsIDE2NCwgMTA3LCAxMjAsIDg5LCAgMjIyLCA0OSwgIDI0NiwKKyAgICAyMDgsIDEsICAwLCAgIDAsICAgMCwgICA3NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDQ0LCAgMSwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDc1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTQsIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDksICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsCisgICAgMjQ4LCA2NSwgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsCisgICAgNjEsICA4LCAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwKKyAgICA2NSwgIDg0LCAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfcHMuaAppbmRleCBiZjVhZDBhLi40NzlkMjVmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxX3BzLmgKQEAgLTEsOTIgKzEsOTIgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvRl9VTV9SR0JBXzU1NTEgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV81NTUxW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQ0LCAyNDcsIDE0OCwgMTE4LCAzLCAgIDMwLCAgNjAsICAzLCAgIDQsICAgMTkzLCAyMDksIDE3OCwgODcsICAxODUsIDE3OSwNCi0gICAgNzUsICAxLCAgIDAsICAgMCwgICAwLCAgIDI0LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwNCi0gICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDQ0LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLA0KLSAgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LA0KLSAgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LA0KLSAgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjQsICAwLCAgIDAsICAgNSwNCi0gICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwNCi0gICAgMTAsICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsDQotICAgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9GX1VNX1JHQkFfNTU1MSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjAzMjI1OCwgMC4wMzIyNTgsIDAuMDMyMjU4LCAxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b0ZfVU1fUkdCQV81NTUxW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDQsIDI0NywgMTQ4LCAxMTgsIDMsICAgMzAsICA2MCwgIDMsICAgNCwgICAxOTMsIDIwOSwgMTc4LCA4NywgIDE4NSwgMTc5LAorICAgIDc1LCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICA0NCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksCisgICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsCisgICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzJkYXJyYXlfcHMuaAppbmRleCAyODdkYWE4Li5kMDRkODA0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYl8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfMmRhcnJheV9wcy5oCkBAIC0xLDk4ICsxLDk4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfUE1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnd3d3csIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCBsKDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDAuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5eiwgcjAueHl6eA0KLWZ0b2kgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvSV9QTV9SR0JfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE3OCwgMjM0LCAxODMsIDE4MiwgMTI3LCA0MSwgIDQzLCAgMzAsICAxNjAsIDY2LCAgNSwgICAyMjcsIDQ3LCAgMzAsICAxMTUsDQotICAgIDIxNCwgMSwgICAwLCAgIDAsICAgMCwgICA3MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMjA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLA0KLSAgICAyNTQsIDY2LCAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QTV9SR0JfMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK2Z0b2kgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9QTV9SR0JfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTc4LCAyMzQsIDE4MywgMTgyLCAxMjcsIDQxLCAgNDMsICAzMCwgIDE2MCwgNjYsICA1LCAgIDIyNywgNDcsICAzMCwgIDExNSwKKyAgICAyMTQsIDEsICAgMCwgICAwLCAgIDAsICAgNzIsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMjA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMzYsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDczLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsCisgICAgMjU0LCA2NiwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsCisgICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsCisgICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYl8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfM2RfcHMuaAppbmRleCA0Njk2ZmU3Li40YjUxYjJhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYl8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzNkX3BzLmgKQEAgLTEsOTIgKzEsOTIgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QTV9SR0JfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1mdG9pIG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0lfUE1fUkdCXzNEW10gPSB7DQotICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMjMsIDIxMCwgMjI2LCAyMDUsIDEzNSwgMTk3LCA1LCAgIDE2LCAgNjksICA5MiwgIDE4NiwgMTkxLCAyMDIsIDE1NSwgMjI5LA0KLSAgICAxMTAsIDEsICAwLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjM2LCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU2LCAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDcsDQotICAgIDAsICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfUE1fUkdCXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK2Z0b2kgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9QTV9SR0JfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjIzLCAyMTAsIDIyNiwgMjA1LCAxMzUsIDE5NywgNSwgICAxNiwgIDY5LCAgOTIsICAxODYsIDE5MSwgMjAyLCAxNTUsIDIyOSwKKyAgICAxMTAsIDEsICAwLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDE0NCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMCwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDU5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTYsIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsCisgICAgMCwgICAwLCAgMCwgICA2NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDcsCisgICAgMCwgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYmFfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JhXzJkYXJyYXlfcHMuaAppbmRleCA4ZDE4Y2VlLi5iMmY4MjIxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYmFfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8yZGFycmF5X3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QTV9SR0JBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotZnRvaSBvMC54eXp3LCByMC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0lfUE1fUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgODcsICAxMzEsIDIyNywgMzIsICAyMjUsIDIzMCwgMTUxLCAxMjYsIDEyMSwgMjExLCAxMzIsIDE1NywgMTYsICAxMiwgIDk5LA0KLSAgICAxMTksIDEsICAgMCwgICAwLCAgIDAsICAgNTIsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE4NCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMTYsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwNCi0gICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1BNX1JHQkFfMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4CittdWwgcjAueHl6dywgcjAueHl6dywgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworZnRvaSBvMC54eXp3LCByMC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9JX1BNX1JHQkFfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgODcsICAxMzEsIDIyNywgMzIsICAyMjUsIDIzMCwgMTUxLCAxMjYsIDEyMSwgMjExLCAxMzIsIDE1NywgMTYsICAxMiwgIDk5LAorICAgIDExOSwgMSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxODQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAxNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwKKyAgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsCisgICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JhXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYmFfM2RfcHMuaAppbmRleCBiMDVkZjVhLi41NGJkMjg0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYmFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3BtX3JnYmFfM2RfcHMuaApAQCAtMSw4OSArMSw4OSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1BNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLWZ0b2kgbzAueHl6dywgcjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9JX1BNX1JHQkFfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA3NiwgIDU3LCAgMTMyLCAxMzMsIDI2LCAgMTE5LCAxMzEsIDU1LCAgNDcsICAxNDcsIDE1NSwgMTI5LCAxMTQsIDU4LCAgMTAzLA0KLSAgICAxMzEsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDEyNCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LA0KLSAgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsDQotICAgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjE2LCAwLA0KLSAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLA0KLSAgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwNCi0gICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfUE1fUkdCQV8zRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK2Z0b2kgbzAueHl6dywgcjAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9QTV9SR0JBXzNEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA3NiwgIDU3LCAgMTMyLCAxMzMsIDI2LCAgMTE5LCAxMzEsIDU1LCAgNDcsICAxNDcsIDE1NSwgMTI5LCAxMTQsIDU4LCAgMTAzLAorICAgIDEzMSwgMSwgICAwLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjE2LCAwLAorICAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwKKyAgICAwLCAgIDI1NCwgNjYsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfMmRhcnJheV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfMmRhcnJheV9wcy5oCmluZGV4IDY3MmZiMTIuLmZmOWE0ZmMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYl8yZGFycmF5X3BzLmgKQEAgLTEsOTUgKzEsOTUgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QVF9SR0JfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1mdG9pIG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0lfUFRfUkdCXzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjIsIDg5LCAgMTIxLCAyMDcsIDUzLCAgMTU5LCAxNSwgIDEzNSwgMTM0LCAxNzcsIDE1NiwgMjU1LCAzNywgIDExNywgMTUyLA0KLSAgICAxNDEsIDEsICAgMCwgICAwLCAgIDAsICAgNDQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE3NiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgOCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLA0KLSAgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLA0KLSAgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwNCi0gICAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1BUX1JHQl8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAwLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5eiwgcjAueHl6eAorZnRvaSBvMC54eXosIHIwLnh5engKK21vdiBvMC53LCBsKDEpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9JX1BUX1JHQl8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjIsIDg5LCAgMTIxLCAyMDcsIDUzLCAgMTU5LCAxNSwgIDEzNSwgMTM0LCAxNzcsIDE1NiwgMjU1LCAzNywgIDExNywgMTUyLAorICAgIDE0MSwgMSwgICAwLCAgIDAsICAgMCwgICA0NCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICA4LCAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjYsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwKKyAgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLAorICAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LAorICAgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYl8zZF9wcy5oCmluZGV4IDQwMmQ0MzQuLjZlOWIzOWQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfM2RfcHMuaApAQCAtMSw4OSArMSw4OSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1BUX1JHQl8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotZnRvaSBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9JX1BUX1JHQl8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgNDMsICAyMjcsIDkwLCAgMTU5LCAxNDQsIDExLCAgMiwgICAxOTEsIDY5LCAgMTE4LCAyNTMsIDE5MSwgNTgsICAxMzYsIDE3OCwNCi0gICAgMTMyLCAxLCAgMCwgICAwLCAgIDAsICAgMjQwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTE2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwOCwgMCwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjU0LA0KLSAgICA2NiwgIDAsICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMTE0LA0KLSAgICAzMiwgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMzIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwNCi0gICAgMSwgICA4MywgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfUFRfUkdCXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnh5engsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK2Z0b2kgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9QVF9SR0JfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgNDMsICAyMjcsIDkwLCAgMTU5LCAxNDQsIDExLCAgMiwgICAxOTEsIDY5LCAgMTE4LCAyNTMsIDE5MSwgNTgsICAxMzYsIDE3OCwKKyAgICAxMzIsIDEsICAwLCAgIDAsICAgMCwgICAyNDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDExNiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwOCwgMCwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNTQsCisgICAgNjYsICAwLCAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMTE0LAorICAgIDMyLCAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICAxMzAsIDMyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsCisgICAgMSwgICA4MywgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8yZGFycmF5X3BzLmgKaW5kZXggMTYyZDgwMi4uOTNmZWMzMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYmFfMmRhcnJheV9wcy5oCkBAIC0xLDkzICsxLDkzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfUFRfUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotZnRvaSBvMC54eXp3LCByMC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0lfUFRfUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ4LCA4NCwgIDksICAgMjE1LCAyNSwgIDQ1LCAgMTMxLCAyMTMsIDIzMiwgMjMwLCA1MSwgIDc5LCAgMTI4LCA2NiwgIDQ1LA0KLSAgICA2NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMjQ0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDYxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDY0LCAgMCwgICAwLA0KLSAgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLA0KLSAgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QVF9SR0JBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYmFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK2Z0b2kgbzAueHl6dywgcjAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9QVF9SR0JBXzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE0OCwgODQsICA5LCAgIDIxNSwgMjUsICA0NSwgIDEzMSwgMjEzLCAyMzIsIDIzMCwgNTEsICA3OSwgIDEyOCwgNjYsICA0NSwKKyAgICA2NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjQ0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDYxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsCisgICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwKKyAgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzNkX3BzLmgKaW5kZXggMDc5OGQxNy4uODYxODAyNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzNkX3BzLmgKQEAgLTEsODcgKzEsODcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QVF9SR0JBXzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLWZ0b2kgbzAueHl6dywgcjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9JX1BUX1JHQkFfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsICA2NywgIDMyLCAgNTgsICA5MywgIDg0LCAgMjMyLCA1MiwgIDE0NywgNDUsICAxODUsIDQ0LCAgMjQ5LCAyMTgsIDE3MSwgMTE0LCA1OCwNCi0gICAgMjE2LCAxLCAgMCwgICAwLCAgIDAsICAgMjIwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE4OCwgMCwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA0NywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjU0LA0KLSAgICA2NiwgIDAsICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9QVF9SR0JBXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCittdWwgcjAueHl6dywgcjAueHl6dywgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworZnRvaSBvMC54eXp3LCByMC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9JX1BUX1JHQkFfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMzIsICA1OCwgIDkzLCAgODQsICAyMzIsIDUyLCAgMTQ3LCA0NSwgIDE4NSwgNDQsICAyNDksIDIxOCwgMTcxLCAxMTQsIDU4LAorICAgIDIxNiwgMSwgIDAsICAgMCwgICAwLCAgIDIyMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTg4LCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNDcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwKKyAgICA2NiwgIDAsICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAyNDIsCisgICAgMzIsICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLAorICAgIDgzLCAgODQsIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8yZGFycmF5X3BzLmgKaW5kZXggNjIyNzVlNC4uYjlmZmZmOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiXzJkYXJyYXlfcHMuaApAQCAtMSwxMDMgKzEsMTAzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b0lfVU1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1mdG9pIG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9JX1VNX1JHQl8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjU1LCAxNTEsIDQ0LCAgOTEsICAxOTUsIDk4LCAgMjEyLCAyNDYsIDIzMSwgNzYsICAxNDUsIDk5LCAgNTIsICAxMDQsIDg4LA0KLSAgICAyNTUsIDEsICAgMCwgICAwLCAgIDAsICAgMTM2LCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgMTAwLCAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNTQsDQotICAgIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwNCi0gICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTEsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1VNX1JHQl8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCBsKDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDAuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6LCByMC54eXp4CitmdG9pIG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9JX1VNX1JHQl8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNTUsIDE1MSwgNDQsICA5MSwgIDE5NSwgOTgsICAyMTIsIDI0NiwgMjMxLCA3NiwgIDE0NSwgOTksICA1MiwgIDEwNCwgODgsCisgICAgMjU1LCAxLCAgIDAsICAgMCwgICAwLCAgIDEzNiwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDEwMCwgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwKKyAgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwKKyAgICA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsCisgICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTEsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8zZF9wcy5oCmluZGV4IGVhMjI3N2YuLjMwYzAzZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JfM2RfcHMuaApAQCAtMSw5NyArMSw5NyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1VNX1JHQl8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAwLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXosIHIwLnh5engNCi1mdG9pIG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b0lfVU1fUkdCXzNEW10gPSB7DQotICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMjgsIDI3LCAgMjUzLCA4LCAgIDExNywgMTM5LCA2OSwgIDE5MywgNTEsICA1NSwgIDQ0LCAgNzQsICAxOSwgIDYxLCAgMTU3LA0KLSAgICAxMTYsIDEsICAwLCAgIDAsICAgMCwgICA3NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAyMDgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNDQsICAxLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDc1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwNCi0gICAgMjU0LCA2NiwgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsDQotICAgIDY1LCAgODQsIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1VNX1JHQl8zRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK2Z0b2kgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9VTV9SR0JfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjI4LCAyNywgIDI1MywgOCwgICAxMTcsIDEzOSwgNjksICAxOTMsIDUxLCAgNTUsICA0NCwgIDc0LCAgMTksICA2MSwgIDE1NywKKyAgICAxMTYsIDEsICAwLCAgIDAsICAgMCwgICA3NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgMTA0LCAxLCAgIDAsICAgMCwgICAxNTYsIDEsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjQsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MSwgIDY4LAorICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsCisgICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDQ0LCAgMSwKKyAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDc1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLAorICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMSwgICAwLCAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTQsIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDksICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsCisgICAgMjU0LCA2NiwgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsCisgICAgNjUsICA4NCwgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiYV8yZGFycmF5X3BzLmgKaW5kZXggZGM5MjlkOS4uYTRmNGI4NiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfMmRhcnJheV9wcy5oCkBAIC0xLDEwMSArMSwxMDEgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9VTV9SR0JBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDAsIDEyNy4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLWZ0b2kgbzAueHl6dywgcjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvSV9VTV9SR0JBXzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOCwgIDczLCAgMjM2LCAxNDEsIDIyOSwgMjQ1LCAzNywgIDQ0LCAgMjMzLCAxNzUsIDgzLCAgMjA2LCAyMTksIDksICAgMjI2LA0KLSAgICAxMzMsIDEsICAgMCwgICAwLCAgIDAsICAgMTE2LCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgODAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNTQsDQotICAgIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwNCi0gICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvSV9VTV9SR0JBXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6dywgcjAueHl6dywgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworZnRvaSBvMC54eXp3LCByMC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9VTV9SR0JBXzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4LCAgNzMsICAyMzYsIDE0MSwgMjI5LCAyNDUsIDM3LCAgNDQsICAyMzMsIDE3NSwgODMsICAyMDYsIDIxOSwgOSwgICAyMjYsCisgICAgMTMzLCAxLCAgIDAsICAgMCwgICAwLCAgIDExNiwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LAorICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLAorICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwKKyAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsCisgICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywKKyAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwKKyAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwKKyAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsCisgICAgNjgsICA4MiwgIDgwLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLAorICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwKKyAgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwKKyAgICA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDI0MiwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLAorICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfM2RfcHMuaAppbmRleCA4ZjBlYWNmLi4yZDMxZTMxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfM2RfcHMuaApAQCAtMSw5NSArMSw5NSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1VNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwLCAxMjcuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1mdG9pIG8wLnh5encsIHIwLnh5encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvSV9VTV9SR0JBXzNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQyLCAzMywgIDI1NCwgNjMsICAyNDUsIDE3NywgMTY1LCA2MywgIDEzNSwgMTE1LCAxNjYsIDIxNywgMTQ5LCAxODQsIDEzOCwNCi0gICAgMTY3LCAxLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0LCAgMSwNCi0gICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsDQotICAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwgICAyNTQsIDY2LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LA0KLSAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9JX1VNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCwgMTI3LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK2Z0b2kgbzAueHl6dywgcjAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvSV9VTV9SR0JBXzNEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDIsIDMzLCAgMjU0LCA2MywgIDI0NSwgMTc3LCAxNjUsIDYzLCAgMTM1LCAxMTUsIDE2NiwgMjE3LCAxNDksIDE4NCwgMTM4LAorICAgIDE2NywgMSwgICAwLCAgIDAsICAgMCwgICA1NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsCisgICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwKKyAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjQsICAxLAorICAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgIDAsICAgMCwgICA5LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjU0LCA2NiwgIDAsICAgMCwKKyAgICAyNTQsIDY2LCAgMCwgICAwLCAgIDI1NCwgNjYsICAwLCAgIDAsICAgMjU0LCA2NiwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsCisgICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYl8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRfcHMuaAppbmRleCBlYWY4MmNmLi42YmJhZmU4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYl8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzJkX3BzLmgKQEAgLTEsODYgKzEsODYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9QTV9SR0JfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApDQotZnRvdSBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxKQ0KLXJldA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b1VfUE1fUkdCXzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjAsICA3NywgIDExMCwgMTI5LCAyOSwgIDEwOCwgMjcsICAzNSwgIDIzOCwgMTczLCA3LCAgIDIzOCwgNTQsICA1MywgIDEyMCwNCi0gICAgMjA0LCAxLCAgIDAsICAgMCwgICAwLCAgIDE5NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICA3MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwNCi0gICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDIxNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsDQotICAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwNCi0gICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BNX1JHQl8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5CisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApCitmdG91IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9QTV9SR0JfMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwLCAgNzcsICAxMTAsIDEyOSwgMjksICAxMDgsIDI3LCAgMzUsICAyMzgsIDE3MywgNywgICAyMzgsIDU0LCAgNTMsICAxMjAsCisgICAgMjA0LCAxLCAgIDAsICAgMCwgICAwLCAgIDE5NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDcyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsCisgICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsCisgICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDIxNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LAorICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwKKyAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LAorICAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsCisgICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzJkYXJyYXlfcHMuaAppbmRleCA0MDJhOWQ2Li5kZWNlYmRkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYl8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRhcnJheV9wcy5oCkBAIC0xLDk2ICsxLDk2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnd3d3csIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvVV9QTV9SR0JfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDU0LCAgMjI0LCA2NSwgIDE5NiwgNjYsICAyNDQsIDExOSwgMjUxLCAxOTIsIDEwMiwgMjUwLCAyNSwgIDEzNCwgMjAxLCAxNzEsDQotICAgIDE2NiwgMSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTg0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAxNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLA0KLSAgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwNCi0gICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQorZnRvdSBvMC54eXosIHIwLnh5engKK21vdiBvMC53LCBsKDEpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1BNX1JHQl8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA1NCwgIDIyNCwgNjUsICAxOTYsIDY2LCAgMjQ0LCAxMTksIDI1MSwgMTkyLCAxMDIsIDI1MCwgMjUsICAxMzQsIDIwMSwgMTcxLAorICAgIDE2NiwgMSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxODQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAxNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwKKyAgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsCisgICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzNkX3BzLmgKaW5kZXggYWUzY2JmNi4uMDQ4MDI3MiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYl8zZF9wcy5oCkBAIC0xLDg5ICsxLDg5IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCXzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApDQotZnRvdSBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1BNX1JHQl8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjAsICAxODcsIDIxMywgMjM0LCAxNTUsIDIxNCwgMTAyLCAyMDMsIDExMywgNDcsICAyOCwgIDIzMSwgMjA2LCAxNzEsIDE4NSwNCi0gICAgOTYsICAxLCAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTI0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIxNiwgMCwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NiwgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApCitmdG91IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfUE1fUkdCXzNEW10gPSB7CisgICAgNjgsICA4OCwgNjYsICA2NywgIDIwLCAgMTg3LCAyMTMsIDIzNCwgMTU1LCAyMTQsIDEwMiwgMjAzLCAxMTMsIDQ3LCAgMjgsICAyMzEsIDIwNiwgMTcxLCAxODUsCisgICAgOTYsICAxLCAgMCwgICAwLCAgIDAsICAgMjQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksCisgICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMTYsIDAsCisgICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU2LCAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLAorICAgIDAsICAgMCwgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkX3BzLmgKaW5kZXggNjVmYmM2ZS4uZWVjYWIzMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkX3BzLmgKQEAgLTEsODQgKzEsODQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9QTV9SR0JBXzJEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0DQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5DQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkNCi1mdG91IG8wLnh5encsIHIwLnh5encNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1BNX1JHQkFfMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5MywgIDE5MiwgMTQ4LCAyMzUsIDIxLCAgMTIyLCAxNSwgIDE1NiwgMzMsICAyMzgsIDIyNywgOSwgIDIxMCwgOTcsICA4MCwNCi0gICAgMjA1LCAxLCAgIDAsICAgMCwgICAwLCAgIDE3NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksIDc5LCAgODIsICA2OCwNCi0gICAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDE5NiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICAwLCAgIDkwLCAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDU2LCAgMCwgICAwLA0KLSAgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsDQotICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAwLCAgIDEyNywgNjcsDQotICAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsIDg0LCAgMTE2LCAwLA0KLSAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BNX1JHQkFfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYmFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkKK2Z0b3UgbzAueHl6dywgcjAueHl6dworcmV0CisvLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1BNX1JHQkFfMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkzLCAgMTkyLCAxNDgsIDIzNSwgMjEsICAxMjIsIDE1LCAgMTU2LCAzMywgIDIzOCwgMjI3LCA5LCAgMjEwLCA5NywgIDgwLAorICAgIDIwNSwgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAxOTYsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgMCwgICA5MCwgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgMCwgICAwLCAgIDY5LAorICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTYsICAwLCAgIDAsCisgICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNzAsICAyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsCisgICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgIDAsICAgMTI3LCA2NywKKyAgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMjgsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsIDg0LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8yZGFycmF5X3BzLmgKaW5kZXggZjBhNDUxZi4uZjk2YzAzMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYmFfMmRhcnJheV9wcy5oCkBAIC0xLDk0ICsxLDk0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAud3d3dywgcjAueHl6eA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApDQotZnRvdSBvMC54eXp3LCByMC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b1VfUE1fUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDIsICAyNDQsIDE0MiwgMjI1LCA3NiwgIDE2MSwgMTEzLCAxOTQsIDUwLCAgNzEsICAxNzMsIDI1MCwgMjAyLCAxNTUsIDE2NSwNCi0gICAgMTA2LCAxLCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxNjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksDQotICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwNCi0gICAgNjgsICA4MiwgIDI1MiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2MywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLA0KLSAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsDQotICAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDI4LCAgMCwgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLA0KLSAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLA0KLSAgICA3LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfUE1fUkdCQV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA0MiwgIDI0NCwgMTQyLCAyMjUsIDc2LCAgMTYxLCAxMTMsIDE5NCwgNTAsICA3MSwgIDE3MywgMjUwLCAyMDIsIDE1NSwgMTY1LAorICAgIDEwNiwgMSwgICAwLCAgIDAsICAgMCwgICAzMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxNjQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAyNTIsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjMsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwKKyAgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLAorICAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYmFfM2RfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8zZF9wcy5oCmluZGV4IGQ5ZmFkMjguLjQ3MjA0ZjYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8zZF9wcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUE1fUkdCQV8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYmFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC53d3d3LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkNCi1mdG91IG8wLnh5encsIHIwLnh5encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvVV9QTV9SR0JBXzNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNSwgICAyMzIsIDYxLCAgMjcsICAxNDUsIDgsICAgMjMzLCAyMTEsIDQ3LCAgNjEsICAyMTksIDk0LCAgMzUsICAyNTIsIDI1MywNCi0gICAgODEsICAxLCAgIDAsICAgMCwgICAwLCAgIDIyOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxMDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LA0KLSAgICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsDQotICAgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE5NiwgMCwNCi0gICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsDQotICAgIDAsICAgMTI3LCA2NywgIDI4LCAgMCwgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3BtX3JnYmFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnd3d3csIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfUE1fUkdCQV8zRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNSwgICAyMzIsIDYxLCAgMjcsICAxNDUsIDgsICAgMjMzLCAyMTEsIDQ3LCAgNjEsICAyMTksIDk0LCAgMzUsICAyNTIsIDI1MywKKyAgICA4MSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjI4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE5NiwgMCwKKyAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsCisgICAgMCwgICAxMjcsIDY3LCAgMjgsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfMmRfcHMuaAppbmRleCBkNmM3YTdlLi5iMDMyYjliIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkX3BzLmgKQEAgLTEsODMgKzEsODMgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9QVF9SR0JfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAwLjAwMDAwMCkNCi1mdG91IG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0DQotLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvVV9QVF9SR0JfMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMzksIDE5LCAgNTcsICAxOTEsIDM2LCAgMTM4LCA2NCwgIDE5LCAgMzUsICA4LCAgIDE3MCwgMTE0LCAxNjAsIDE0NiwgMTQ3LA0KLSAgICAxNTIsIDEsICAgMCwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDQ0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMTg4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDQ3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwNCi0gICAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUFRfUkdCXzJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAwLjAwMDAwMCkKK2Z0b3UgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0CisvLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1BUX1JHQl8yRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjM5LCAxOSwgIDU3LCAgMTkxLCAzNiwgIDEzOCwgNjQsICAxOSwgIDM1LCAgOCwgICAxNzAsIDExNCwgMTYwLCAxNDYsIDE0NywKKyAgICAxNTIsIDEsICAgMCwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgNDQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMTg4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDQ3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LAorICAgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8yZGFycmF5X3BzLmgKaW5kZXggZThhNzYwOC4uMTFlNTZjYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfMmRhcnJheV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkYXJyYXlfcHMuaApAQCAtMSw5MyArMSw5MyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQl8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvVV9QVF9SR0JfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEzOCwgMjUxLCA0OSwgIDExMywgOTksICAxMTUsIDIyNywgMTgxLCA3NywgIDEwOCwgMjA2LCAyMjEsIDQ4LCAgMTgxLCAxMTEsDQotICAgIDExNSwgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsDQotICAgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLA0KLSAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsDQotICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwNCi0gICAgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsDQotICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LA0KLSAgICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsDQotICAgIDY4LCAgODIsICAyNDQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjEsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwNCi0gICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwNCi0gICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsDQotICAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQl8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8yREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAwLjAwMDAwMCkKK2Z0b3UgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9QVF9SR0JfMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTM4LCAyNTEsIDQ5LCAgMTEzLCA5OSwgIDExNSwgMjI3LCAxODEsIDc3LCAgMTA4LCAyMDYsIDIyMSwgNDgsICAxODEsIDExMSwKKyAgICAxMTUsIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDE2MCwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2OCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUwLCAgNjgsCisgICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsCisgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwKKyAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLAorICAgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LAorICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwKKyAgICA2OCwgIDgyLCAgMjQ0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDYxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LAorICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsCisgICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsCisgICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8zZF9wcy5oCmluZGV4IGE4MTdiMzEuLmI2YzM3Y2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfM2RfcHMuaApAQCAtMSw4NyArMSw4NyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQl8zRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApDQotZnRvdSBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1BUX1JHQl8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjMwLCA4NiwgIDEwLCAgMTUxLCA5MiwgIDk3LCAgMTA5LCAxOTgsIDM0LCAgNDYsICA3MywgIDEwOSwgMjQ2LCAyNDMsIDU2LA0KLSAgICAzMSwgIDEsICAwLCAgIDAsICAgMCwgICAyMjAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICA5NiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwNCi0gICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwNCi0gICAgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwNCi0gICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLA0KLSAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LA0KLSAgICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTg4LCAwLA0KLSAgICAwLCAgIDAsICA2NCwgIDAsICAgMCwgICAwLCAgIDQ3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsDQotICAgIDY3LCAgMCwgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsDQotICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLA0KLSAgICAzMiwgIDE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9QVF9SR0JfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAwLjAwMDAwMCkKK2Z0b3UgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9QVF9SR0JfM0RbXSA9IHsKKyAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMjMwLCA4NiwgIDEwLCAgMTUxLCA5MiwgIDk3LCAgMTA5LCAxOTgsIDM0LCAgNDYsICA3MywgIDEwOSwgMjQ2LCAyNDMsIDU2LAorICAgIDMxLCAgMSwgIDAsICAgMCwgICAwLCAgIDIyMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgOTYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTg4LCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNDcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywKKyAgICA2NywgIDAsICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLAorICAgIDMyLCAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwKKyAgICA4MywgIDg0LCA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAyLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRfcHMuaAppbmRleCA3Y2NjN2QzLi5kNTYzODU3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRfcHMuaApAQCAtMSw4MSArMSw4MSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQkFfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApDQotZnRvdSBvMC54eXp3LCByMC54eXp3DQotcmV0DQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfRnRvVV9QVF9SR0JBXzJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjIwLCA5OCwgIDE1NSwgNTAsICAyNTQsIDE0NCwgMjIyLCAxNjMsIDY0LCAgMTk2LCAxNjcsIDIyNSwgMTMsICA0LCAgIDI3LA0KLSAgICAxODUsIDEsICAgMCwgICAwLCAgIDAsICAgMTQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDI0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMTY4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsDQotICAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwNCi0gICAgMCwgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQkFfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkKK2Z0b3UgbzAueHl6dywgcjAueHl6dworcmV0CisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1BUX1JHQkFfMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyMCwgOTgsICAxNTUsIDUwLCAgMjU0LCAxNDQsIDIyMiwgMTYzLCA2NCwgIDE5NiwgMTY3LCAyMjUsIDEzLCAgNCwgICAyNywKKyAgICAxODUsIDEsICAgMCwgICAwLCAgIDAsICAgMTQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMjQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwKKyAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMTY4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLAorICAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDI4LAorICAgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8yZGFycmF5X3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRhcnJheV9wcy5oCmluZGV4IGM3MzViMDkuLjUxOWE4NTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzJkYXJyYXlfcHMuaApAQCAtMSw5MSArMSw5MSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQkFfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRhcnJheV9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApDQotZnRvdSBvMC54eXp3LCByMC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b1VfUFRfUkdCQV8yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMCwgICA5OSwgIDIxNiwgNzQsICAxOTMsIDg5LCAgMTg4LCA2MiwgIDY3LCAgMTE0LCAxMzMsIDExMCwgMTcyLCAxNzAsIDIyMCwNCi0gICAgMjUwLCAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMzYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTE3LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwNCi0gICAgNjUsICAxMTQsIDExNCwgOTcsICAxMjEsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywNCi0gICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksDQotICAgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwNCi0gICAgNjgsICA4MiwgIDIyNCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLA0KLSAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwNCi0gICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwNCi0gICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfUFRfUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfUFRfUkdCQV8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAwLCAgIDk5LCAgMjE2LCA3NCwgIDE5MywgODksICAxODgsIDYyLCAgNjcsICAxMTQsIDEzMywgMTEwLCAxNzIsIDE3MCwgMjIwLAorICAgIDI1MCwgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAxMzYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICAyMjQsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwKKyAgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLAorICAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzNkX3BzLmgKaW5kZXggZWIwZTdjZS4uZWQ1MjM1OSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzNkX3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzNkX3BzLmgKQEAgLTEsODUgKzEsODUgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9QVF9SR0JBXzNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApDQotZnRvdSBvMC54eXp3LCByMC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b1VfUFRfUkdCQV8zRFtdID0gew0KLSAgICA2OCwgIDg4LCA2NiwgIDY3LCAgMTQwLCAzMywgIDMxLCAgMTAzLCA5NiwgIDI4LCAgNzgsICAxOTYsIDIzNCwgMTUzLCA1OCwgIDE1OCwgMTc2LCAxNjcsIDIzMCwNCi0gICAgMjM4LCAxLCAgMCwgICAwLCAgIDAsICAgMjAwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgNzYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE2OCwgMCwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI3LA0KLSAgICA2NywgIDAsICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMjgsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLA0KLSAgICA4NCwgIDY1LCA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1BUX1JHQkFfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfUFRfUkdCQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAxNDAsIDMzLCAgMzEsICAxMDMsIDk2LCAgMjgsICA3OCwgIDE5NiwgMjM0LCAxNTMsIDU4LCAgMTU4LCAxNzYsIDE2NywgMjMwLAorICAgIDIzOCwgMSwgIDAsICAgMCwgICAwLCAgIDIwMCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyNCwgMCwKKyAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgNzYsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwKKyAgICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LAorICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsCisgICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LAorICAgIDgzLCAgNzEsIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTY4LCAwLAorICAgIDAsICAgMCwgIDY0LCAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsCisgICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywKKyAgICA2NywgIDAsICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMjgsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsCisgICAgODQsICA2NSwgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfMmRfcHMuaAppbmRleCAwM2MxNmNhLi4yNTMxZGIyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzJkX3BzLmgKQEAgLTEsOTEgKzEsOTEgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfMmRfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQ0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQl8yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExNCwgMTM4LCA1OSwgIDE3MywgNDUsICAxMCwgIDkzLCAgNDUsICAyNTMsIDEzNywgMTkxLCA0NSwgNTMsICAzMiwgIDM0LA0KLSAgICAxMTAsIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMTM2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgMCwgICAwLCAgIDgzLA0KLSAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMjQsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgOTAsIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICA2LA0KLSAgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgMCwgICAwLCAgIDksDQotICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAxNTAsIDcsICAgMTYsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAxMCwgIDExNCwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDUsDQotICAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgIDAsICAgMCwNCi0gICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgNjIsICAwLA0KLSAgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JfMkQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApCitmdG91IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9VTV9SR0JfMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExNCwgMTM4LCA1OSwgIDE3MywgNDUsICAxMCwgIDkzLCAgNDUsICAyNTMsIDEzNywgMTkxLCA0NSwgNTMsICAzMiwgIDM0LAorICAgIDExMCwgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDEzNiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywKKyAgICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICAyNCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA5MCwgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgMCwgICAwLCAgIDY5LAorICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNTgsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgNiwKKyAgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI0NiwgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NSwgMCwgICAwLCAgIDksCisgICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDE1MCwgNywgICAxNiwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgMTAsICAxMTQsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsIDAsICAgMCwgICAwLAorICAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LCAwLCAgIDAsICAgNSwKKyAgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsICAwLCAgIDAsCisgICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgNjIsICAwLAorICAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzJkYXJyYXlfcHMuaAppbmRleCA4NTQwZDA3Li4zNjFjZWZmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZGFycmF5X3BzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfMmRhcnJheV9wcy5oCkBAIC0xLDEwMSArMSwxMDEgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JfMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX0Z0b1VfVU1fUkdCXzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAzNCwgIDE2NiwgNjEsICAxMjEsIDYzLCAgMjA1LCA3MiwgIDEyOCwgMjE3LCAxNTEsIDUyLCAgMjQxLCAyMCwgIDEzNiwgMTgyLA0KLSAgICAyMjYsIDEsICAgMCwgICAwLCAgIDAsICAgMTE2LCAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgODAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsDQotICAgIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfVU1fUkdCXzJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzJEQXJyYXkgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAyCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApCitmdG91IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQl8yREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAzNCwgIDE2NiwgNjEsICAxMjEsIDYzLCAgMjA1LCA3MiwgIDEyOCwgMjE3LCAxNTEsIDUyLCAgMjQxLCAyMCwgIDEzNiwgMTgyLAorICAgIDIyNiwgMSwgICAwLCAgIDAsICAgMCwgICAxMTYsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICA4MCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsCisgICAgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsCisgICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8zZF9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfM2RfcHMuaAppbmRleCBlNjA3YTUzLi41ZWIzOWRkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8zZF9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzNkX3BzLmgKQEAgLTEsOTUgKzEsOTUgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfM2RfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDINCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1sdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudw0KLWRpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cNCi1tb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMC4wMDAwMDApDQotZnRvdSBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQl8zRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkwLCAgMSwgICAxNDUsIDM3LCAgMTUyLCA2OCwgIDE4LCAgOTgsICAxNzUsIDE4OSwgMTgyLCAxNjYsIDE1MiwgNTgsICAyMjQsDQotICAgIDEyLCAgMSwgICAwLCAgIDAsICAgMCwgICA1NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjQsIDAsDQotICAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LA0KLSAgICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwNCi0gICAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksDQotICAgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNCwgIDEsDQotICAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwgIDAsICAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLA0KLSAgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwNCi0gICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JfM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8zZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRl8zRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncKK2RpdiByMS55encsIHIwLnh4eXosIHIwLnd3d3cKK21vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDAuMDAwMDAwKQorZnRvdSBvMC54eXosIHIwLnh5engKK21vdiBvMC53LCBsKDEpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQl8zRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTAsICAxLCAgIDE0NSwgMzcsICAxNTIsIDY4LCAgMTgsICA5OCwgIDE3NSwgMTg5LCAxODIsIDE2NiwgMTUyLCA1OCwgIDIyNCwKKyAgICAxMiwgIDEsICAgMCwgICAwLCAgIDAsICAgNTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsCisgICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsCisgICAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsCisgICAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwKKyAgICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwKKyAgICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0LCAgMSwKKyAgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsCisgICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsCisgICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LAorICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzJkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRfcHMuaAppbmRleCAzZGQ2ZTYyLi4zMzZhODk2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRfcHMuaApAQCAtMSw4OSArMSw4OSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1VNX1JHQkFfMkQgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzJkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkNCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMg0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLWx0IHIxLngsIGwoMC4wMDAwMDApLCByMC53DQotZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dw0KLW1vdmMgcjAueHl6LCByMS54eHh4LCByMS55end5LCByMC54eXp4DQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkNCi1mdG91IG8wLnh5encsIHIwLnh5encNCi1yZXQNCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQkFfMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNjgsIDAsICAgOTcsICAyMzAsIDEwOCwgMTczLCAyLCAgIDE1NCwgNDQsICAxNDYsIDI0OSwgMjQ2LCAxNTgsIDIxMywgMTUzLA0KLSAgICAxODAsIDEsICAgMCwgICAwLCAgIDAsICAgMjQwLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAxLCAgIDAsICAgMCwgICAxMDQsIDEsICAgMCwgICAwLCAgIDExNiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsDQotICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgNCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsDQotICAgIDcsICAgMTgsICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsDQotICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksDQotICAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLA0KLSAgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfVU1fUkdCQV8yRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiYV8yZF9wcy5oIE11bHRpcGx5QWxwaGEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eQorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9VTV9SR0JBXzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNjgsIDAsICAgOTcsICAyMzAsIDEwOCwgMTczLCAyLCAgIDE1NCwgNDQsICAxNDYsIDI0OSwgMjQ2LCAxNTgsIDIxMywgMTUzLAorICAgIDE4MCwgMSwgICAwLCAgIDAsICAgMCwgICAyNDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAxMTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywKKyAgICA3MiwgIDY4LCAgODIsICA0LCAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsCisgICAgNywgICAxOCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDIyNiwgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDksICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksCisgICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDI4LCAgMCwgICAwLCAgIDUsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwKKyAgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzJkYXJyYXlfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9tdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiYV8yZGFycmF5X3BzLmgKaW5kZXggNjZjMGE4Mi4uYWRmODQwMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzJkYXJyYXlfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRhcnJheV9wcy5oCkBAIC0xLDk5ICsxLDk5IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfVU1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiYV8yZGFycmF5X3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6dywgcjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQkFfMkRBcnJheVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyMiwgMTE1LCAyNDUsIDIzMywgOTUsICAxODIsIDE5NywgMTg5LCA0MSwgIDEwNSwgMzEsICA4OSwgIDE0MCwgMTc2LCAwLA0KLSAgICA4NywgIDEsICAgMCwgICAwLCAgIDAsICAgOTYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI4LCAwLA0KLSAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAxNjAsIDEsICAgMCwgICAwLCAgIDIyOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTcsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA1MCwgIDY4LA0KLSAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwNCi0gICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LA0KLSAgICAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsDQotICAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLA0KLSAgICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwNCi0gICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsDQotICAgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLA0KLSAgICA2OCwgIDgyLCAgNjAsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDc5LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLA0KLSAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAyLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsDQotICAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsDQotICAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUwLCA3LCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsDQotICAgIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMjgsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywNCi0gICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX0Z0b1VfVU1fUkdCQV8yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzJkYXJyYXlfcHMuaCBNdWx0aXBseUFscGhhLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUZfMkRBcnJheSAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDIKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK2x0IHIxLngsIGwoMC4wMDAwMDApLCByMC53CitkaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3Cittb3ZjIHIwLnh5eiwgcjEueHh4eCwgcjEueXp3eSwgcjAueHl6eAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCwgMjU1LjAwMDAwMCkKK2Z0b3UgbzAueHl6dywgcjAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfRnRvVV9VTV9SR0JBXzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIyMiwgMTE1LCAyNDUsIDIzMywgOTUsICAxODIsIDE5NywgMTg5LCA0MSwgIDEwNSwgMzEsICA4OSwgIDE0MCwgMTc2LCAwLAorICAgIDg3LCAgMSwgICAwLCAgIDAsICAgMCwgICA5NiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMTYwLCAxLCAgIDAsICAgMCwgICAyMjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDExNywgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTAsICA2OCwKKyAgICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsCisgICAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksCisgICAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLAorICAgIDY4LCAgODIsICA2MCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNzksICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsCisgICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwKKyAgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ5LCAgMCwgICAwLCAgIDcsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDE0LCAgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTAsIDcsICAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsCisgICAgNjcsICAwLCAgIDAsICAgMTI3LCA2NywgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsCisgICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL211bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzNkX3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfM2RfcHMuaAppbmRleCAwYThhZWY5Li42Yzk4MDE0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfM2RfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfM2RfcHMuaApAQCAtMSw5MyArMSw5MyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19GdG9VX1VNX1JHQkFfM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUZfM0QgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAyDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbHQgcjEueCwgbCgwLjAwMDAwMCksIHIwLncNCi1kaXYgcjEueXp3LCByMC54eHl6LCByMC53d3d3DQotbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engNCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwLCAyNTUuMDAwMDAwKQ0KLWZ0b3UgbzAueHl6dywgcjAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19GdG9VX1VNX1JHQkFfM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgNjYsICA2NywgIDIxMSwgMjEzLCAxMjksIDk1LCAgMTU4LCA4NCwgIDQ3LCAgMTkxLCAxMTMsIDExNCwgMTk4LCAyNDUsIDE4OCwgNjUsICAzMSwNCi0gICAgMjEyLCAxLCAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLA0KLSAgICAwLCAgIDAsICAxMDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMSwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2NCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDUxLCAgNjgsDQotICAgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsDQotICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsDQotICAgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwNCi0gICAgMCwgICA4MywgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwNCi0gICAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwNCi0gICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDQsICAgMSwNCi0gICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA2NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsDQotICAgIDk4LCAgMTYsIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwNCi0gICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OSwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwgIDAsDQotICAgIDEsICAgMCwgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNCwgMCwgICAwLCAgIDcsICAgMjI2LCAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgOSwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAyNDYsIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTUsICAwLCAgIDAsICAgOSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyNywgNjcsICAwLCAgIDAsDQotICAgIDEyNywgNjcsIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfRnRvVV9VTV9SR0JBXzNEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzNkX3BzLmggTXVsdGlwbHlBbHBoYS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGXzNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMgorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCitsdCByMS54LCBsKDAuMDAwMDAwKSwgcjAudworZGl2IHIxLnl6dywgcjAueHh5eiwgcjAud3d3dworbW92YyByMC54eXosIHIxLnh4eHgsIHIxLnl6d3ksIHIwLnh5engKK211bCByMC54eXp3LCByMC54eXp3LCBsKDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDAsIDI1NS4wMDAwMDApCitmdG91IG8wLnh5encsIHIwLnh5encKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX0Z0b1VfVU1fUkdCQV8zRFtdID0geworICAgIDY4LCAgODgsIDY2LCAgNjcsICAyMTEsIDIxMywgMTI5LCA5NSwgIDE1OCwgODQsICA0NywgIDE5MSwgMTEzLCAxMTQsIDE5OCwgMjQ1LCAxODgsIDY1LCAgMzEsCisgICAgMjEyLCAxLCAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjI0LCAwLAorICAgIDAsICAgMCwgIDEwNCwgMSwgICAwLCAgIDAsICAgMTU2LCAxLCAgIDAsICAgMCwgICAxNjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTY0LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMTIsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCAgNTEsICA2OCwKKyAgICAwLCAgIDc3LCAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsCisgICAgNTAsICA1NywgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLAorICAgIDY1LCAgODksIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksCisgICAgODMsICA3MSwgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwKKyAgICAwLCAgIDgzLCA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICA0LCAgIDEsCisgICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwgICA2NSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICA5OCwgIDE2LCAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDksICAwLCAgIDAsICAgNywgICAxOCwgIDAsICAgMTYsICAwLAorICAgIDEsICAgMCwgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE0LCAwLCAgIDAsICAgNywgICAyMjYsIDAsICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICA5LCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMjQ2LCAxNSwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU1LCAgMCwgICAwLCAgIDksICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MCwgNywgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLAorICAgIDEyNywgNjcsIDAsICAgMCwgICAxMjcsIDY3LCAgMCwgICAwLCAgIDEyNywgNjcsICAyOCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMmQxMXZzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaAppbmRleCA0ZGJhMGViLi4zNmU2ZGRkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaApAQCAtMSw5NiArMSw5NiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBWU19QYXNzdGhyb3VnaDJEIC9UIHZzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2gyZDExdnMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDAgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encNCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBSdW50aW1lIGdlbmVyYXRlZCBjb25zdGFudCBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBSZWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnQgRGVzY3JpcHRpb24NCi0vLyAtLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gYzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXggU2hhZGVyIHBvc2l0aW9uIG9mZnNldA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHZzXzJfeA0KLSAgICBkZWYgYzEsIDAsIDEsIDAsIDANCi0gICAgZGNsX3RleGNvb3JkIHYwDQotICAgIGRjbF90ZXhjb29yZDEgdjENCi0gICAgYWRkIG9Qb3MueHksIHYwLCBjMA0KLSAgICBtb3Ygb1Bvcy56dywgYzEueHl4eQ0KLSAgICBtb3Ygb1QwLnh5LCB2MQ0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotdnNfNF8wDQotZGNsX2lucHV0IHYwLnh5DQotZGNsX2lucHV0IHYxLnh5DQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLnh5DQotbW92IG8wLnh5LCB2MC54eXh4DQotbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQ0KLW1vdiBvMS54eSwgdjEueHl4eA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19WU19QYXNzdGhyb3VnaDJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTU2LCA4NSwgIDIwMiwgMjEwLCAyMTEsIDEwNCwgMTMyLCAyMDgsIDE4MCwgNzEsICA1NSwgIDg5LCAgMTc2LCAxMjcsIDEyLA0KLSAgICAxOTAsIDEsICAgMCwgICAwLCAgIDAsICAgMjE2LCAyLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjAwLCAwLA0KLSAgICAwLCAgIDAsICAgODgsICAxLCAgIDAsICAgMCwgICAyMTIsIDEsICAgMCwgICAwLCAgIDQ0LCAgMiwgICAwLCAgIDAsICAgMTI4LCAyLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTM2LCAwLCAgIDAsICAgMCwgICAxMzYsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTQsIDI1NSwgOTYsICAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzYsICAwLCAgIDAsICAgMCwgICAzNiwgIDAsICAgMCwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgMzYsDQotICAgIDAsICAgMSwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTQsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAxLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICA1LCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAxNSwgIDE0NCwgMzEsICAwLCAgIDAsICAgMiwgICA1LCAgIDAsICAgMSwgICAxMjgsDQotICAgIDEsICAgMCwgICAxNSwgIDE0NCwgMiwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMywgICAxOTIsIDAsICAgMCwgICAyMjgsIDE0NCwgMCwgICAwLCAgIDIyOCwNCi0gICAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAxMiwgIDE5MiwgMSwgICAwLCAgIDY4LCAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMywgICAyMjQsIDEsICAgMCwgICAyMjgsIDE0NCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDEzNiwgMCwgICAwLCAgIDAsICAgNjQsDQotICAgIDAsICAgMSwgICAwLCAgIDM0LCAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDk1LCAgMCwgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMywgMCwgICAwLCAgIDQsICAgMjQyLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDU0LCAgMCwgICAwLA0KLSAgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLA0KLSAgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAyNTQsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsDQotICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwNCi0gICAgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksDQotICAgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDc2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LA0KLSAgICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgODAsICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMTIsICAwLA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwNCi0gICAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgVlNfUGFzc3Rocm91Z2gyRCAvVCB2c180XzBfbGV2ZWxfOV8zIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2gyZDExdnMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gUnVudGltZSBnZW5lcmF0ZWQgY29uc3RhbnQgbWFwcGluZ3M6CisvLworLy8gVGFyZ2V0IFJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudCBEZXNjcmlwdGlvbgorLy8gLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gYzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXggU2hhZGVyIHBvc2l0aW9uIG9mZnNldAorLy8KKy8vCisvLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOgorLy8KKyAgICB2c18yX3gKKyAgICBkZWYgYzEsIDAsIDEsIDAsIDAKKyAgICBkY2xfdGV4Y29vcmQgdjAKKyAgICBkY2xfdGV4Y29vcmQxIHYxCisgICAgYWRkIG9Qb3MueHksIHYwLCBjMAorICAgIG1vdiBvUG9zLnp3LCBjMS54eXh5CisgICAgbW92IG9UMC54eSwgdjEKKworLy8gYXBwcm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKK3ZzXzRfMAorZGNsX2lucHV0IHYwLnh5CitkY2xfaW5wdXQgdjEueHkKK2RjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uCitkY2xfb3V0cHV0IG8xLnh5Cittb3YgbzAueHksIHYwLnh5eHgKK21vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkKK21vdiBvMS54eSwgdjEueHl4eAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfVlNfUGFzc3Rocm91Z2gyRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTU2LCA4NSwgIDIwMiwgMjEwLCAyMTEsIDEwNCwgMTMyLCAyMDgsIDE4MCwgNzEsICA1NSwgIDg5LCAgMTc2LCAxMjcsIDEyLAorICAgIDE5MCwgMSwgICAwLCAgIDAsICAgMCwgICAyMTYsIDIsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyMDAsIDAsCisgICAgMCwgICAwLCAgIDg4LCAgMSwgICAwLCAgIDAsICAgMjEyLCAxLCAgIDAsICAgMCwgICA0NCwgIDIsICAgMCwgICAwLCAgIDEyOCwgMiwgICAwLCAgIDAsICAgNjUsCisgICAgMTExLCAxMTAsIDU3LCAgMTM2LCAwLCAgIDAsICAgMCwgICAxMzYsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTQsIDI1NSwgOTYsICAwLCAgIDAsICAgMCwKKyAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzNiwgIDAsICAgMCwgICAwLCAgIDM2LCAgMCwgICAwLCAgIDAsICAgMzYsICAwLCAgIDAsICAgMCwgICAzNiwKKyAgICAwLCAgIDEsICAgMCwgICAzNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU0LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMSwgICAwLAorICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDUsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDE1LCAgMTQ0LCAzMSwgIDAsICAgMCwgICAyLCAgIDUsICAgMCwgICAxLCAgIDEyOCwKKyAgICAxLCAgIDAsICAgMTUsICAxNDQsIDIsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDMsICAgMTkyLCAwLCAgIDAsICAgMjI4LCAxNDQsIDAsICAgMCwgICAyMjgsCisgICAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAxMiwgIDE5MiwgMSwgICAwLCAgIDY4LCAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAzLCAgIDIyNCwgMSwgICAwLCAgIDIyOCwgMTQ0LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMTM2LCAwLCAgIDAsICAgMCwgICA2NCwKKyAgICAwLCAgIDEsICAgMCwgICAzNCwgIDAsICAgMCwgICAwLCAgIDk1LCAgMCwgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk1LCAgMCwgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMywgMCwgICAwLCAgIDQsICAgMjQyLCAzMiwgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgNTAsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNTQsICAwLCAgIDAsCisgICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwKKyAgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMjU0LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LAorICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwKKyAgICAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwKKyAgICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA3NiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLAorICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwKKyAgICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgODAsICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMTIsICAwLAorICAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LAorICAgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzF9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoM2QxMWdzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gzZDExZ3MuaAppbmRleCBjMTYwY2E3Li5iMjVhYTBlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gzZDExZ3MuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gzZDExZ3MuaApAQCAtMSw5NSArMSw5NSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBHU19QYXNzdGhyb3VnaDNEIC9UIGdzXzRfMCAvRmggY29tcGlsZWRccGFzc3Rocm91Z2gzZDExZ3MuaA0KLS8vICAgIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3DQotLy8gTEFZRVIgICAgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3DQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi1nc180XzANCi1kY2xfaW5wdXRfc2l2IHZbM11bMF0ueHl6dywgcG9zaXRpb24NCi1kY2xfaW5wdXQgdlszXVsxXS54DQotZGNsX2lucHV0IHZbM11bMl0ueHl6DQotZGNsX3RlbXBzIDENCi1kY2xfaW5wdXRwcmltaXRpdmUgdHJpYW5nbGUgDQotZGNsX291dHB1dHRvcG9sb2d5IHRyaWFuZ2xlc3RyaXAgDQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0X3NpdiBvMS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfb3V0cHV0IG8yLnh5eg0KLWRjbF9tYXhvdXQgMw0KLW1vdiByMC54LCBsKDApDQotbG9vcCANCi0gIGlnZSByMC55LCByMC54LCBsKDMpDQotICBicmVha2NfbnogcjAueQ0KLSAgbW92IG8wLnh5encsIHZbcjAueCArIDBdWzBdLnh5encNCi0gIG1vdiBvMS54LCB2W3IwLnggKyAwXVsxXS54DQotICBtb3YgbzIueHl6LCB2W3IwLnggKyAwXVsyXS54eXp4DQotICBlbWl0IA0KLSAgaWFkZCByMC54LCByMC54LCBsKDEpDQotZW5kbG9vcCANCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX0dTX1Bhc3N0aHJvdWdoM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsIDE4MCwgNTMsIDkzLCAgMjMsIDE0LCAgMjM3LCAxNzIsIDk5LCAgMjE0LCA5MSwgIDEyNSwgMTIzLCA4MSwgIDIzMiwgMTY1LCAyMDcsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICA3MiwgIDMsICAwLCAgIDAsICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgIDEzNiwgMSwgIDAsICAgMCwgIDIwNCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICA4MywgIDcxLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgMjgsICAwLCAgMCwgICAwLCAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLA0KLSAgICA0MSwgIDMyLCAgNzIsICA3NiwgODMsICA3NiwgMzIsICA4MywgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsIDQ2LCAgNTAsIDU3LCAgNDYsIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsDQotICAgIDczLCAgODMsICA3MSwgIDc4LCAxMDgsIDAsICAwLCAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgIDAsICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDE1LCAgMCwgICAwLA0KLSAgICA5MiwgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMSwgICAwLCAgIDAsICA5OCwgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgIDcsICAgNywgIDAsICAgMCwgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA3NiwgIDY1LCAgODksICA2OSwgODIsICAwLCAgODQsICA2OSwgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LA0KLSAgICAxMjgsIDAsICAgMCwgICAwLCAgMywgICAwLCAgMCwgICAwLCAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgIDQsICAgMCwgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDE0LCAgMCwgICAwLA0KLSAgICAxMTgsIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgOCwgICAwLCAgIDAsICA4MywgIDg2LCA5NSwgIDgwLCA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsDQotICAgIDY5LCAgNzgsICA2OCwgIDY5LCA4MiwgIDg0LCA2NSwgIDgyLCA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksDQotICAgIDg4LCAgMCwgICA4NCwgIDY5LCA4OCwgIDY3LCA3OSwgIDc5LCA4MiwgIDY4LCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNjAsICAxLCAgIDAsICAgMCwNCi0gICAgNjQsICAwLCAgIDIsICAgMCwgIDc5LCAgMCwgIDAsICAgMCwgIDk3LCAgMCwgICAwLCAgIDUsICAgMjQyLCAxNiwgIDMyLCAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgMCwgICAwLCAgOTUsICAwLCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMzIsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICA5NSwgIDAsICAwLCAgIDQsICAxMTQsIDE2LCAgMzIsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMTA0LCAwLCAgIDAsICAgMiwgIDEsICAgMCwgIDAsICAgMCwgIDkzLCAgMjQsICAwLCAgIDEsICAgOTIsICA0MCwgIDAsICAgMSwgICAxMDMsIDAsICAgMCwgICA0LA0KLSAgICAyNDIsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMSwgICAwLCAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICA0LCAgIDE4LCAgMzIsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAwLCAgIDAsICAxMDEsIDAsICAgMCwgICAzLCAgIDExNCwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgOTQsICAwLCAgIDAsICAgMiwgIDMsICAgMCwgIDAsICAgMCwgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDY0LCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgNDgsICAwLCAgIDAsICAgMSwgICAzMywgIDAsICAgMCwgICA3LCAgIDM0LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAxMCwgIDAsICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDQsICAgMywgIDI2LCAgMCwgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAyNDIsIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAzMCwgMTYwLCAwLCAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgICAwLCAgIDcsICAxOCwgIDMyLCAxNiwgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNjAsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgIDAsICAgMCwgIDU0LCAgMCwgICAwLCAgIDcsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDE4LCAgMTYwLCAwLCAgMTAsICAwLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE5LCAgMCwgICAwLCAgIDEsDQotICAgIDMwLCAgMCwgICAwLCAgIDcsICAxOCwgIDAsICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICA2NCwgIDAsICAgMCwgIDEsICAgMCwgIDAsICAgMCwgIDIyLCAgMCwgICAwLCAgIDEsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgIDAsICAgMCwgIDExLCAgMCwgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgMiwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMSwgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDUsICAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgR1NfUGFzc3Rocm91Z2gzRCAvVCBnc180XzAgL0ZoIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMWdzLmgKKy8vICAgIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gTEFZRVIgICAgICAgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAxICAgICBOT05FICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dworLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCitnc180XzAKK2RjbF9pbnB1dF9zaXYgdlszXVswXS54eXp3LCBwb3NpdGlvbgorZGNsX2lucHV0IHZbM11bMV0ueAorZGNsX2lucHV0IHZbM11bMl0ueHl6CitkY2xfdGVtcHMgMQorZGNsX2lucHV0cHJpbWl0aXZlIHRyaWFuZ2xlIAorZGNsX291dHB1dHRvcG9sb2d5IHRyaWFuZ2xlc3RyaXAgCitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbgorZGNsX291dHB1dF9zaXYgbzEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfb3V0cHV0IG8yLnh5egorZGNsX21heG91dCAzCittb3YgcjAueCwgbCgwKQorbG9vcCAKKyAgaWdlIHIwLnksIHIwLngsIGwoMykKKyAgYnJlYWtjX256IHIwLnkKKyAgbW92IG8wLnh5encsIHZbcjAueCArIDBdWzBdLnh5encKKyAgbW92IG8xLngsIHZbcjAueCArIDBdWzFdLngKKyAgbW92IG8yLnh5eiwgdltyMC54ICsgMF1bMl0ueHl6eAorICBlbWl0IAorICBpYWRkIHIwLngsIHIwLngsIGwoMSkKK2VuZGxvb3AgCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDExIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfR1NfUGFzc3Rocm91Z2gzRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAxODAsIDUzLCA5MywgIDIzLCAxNCwgIDIzNywgMTcyLCA5OSwgIDIxNCwgOTEsICAxMjUsIDEyMywgODEsICAyMzIsIDE2NSwgMjA3LAorICAgIDEsICAgMCwgICAwLCAgIDAsICA3MiwgIDMsICAwLCAgIDAsICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgMTM2LCAxLCAgMCwgICAwLCAgMjA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgODMsICA3MSwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgMjgsICAwLCAgMCwgICAwLCAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLAorICAgIDQxLCAgMzIsICA3MiwgIDc2LCA4MywgIDc2LCAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LAorICAgIDEwMSwgMTE0LCAzMiwgIDU3LCA0NiwgIDUwLCA1NywgIDQ2LCA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAxMDgsIDAsICAwLCAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgMCwgICAwLCAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMTUsICAwLCAgIDAsCisgICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMSwgICAwLCAgIDAsICA5OCwgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgNywgICA3LCAgMCwgICAwLCAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgNzYsICA2NSwgIDg5LCAgNjksIDgyLCAgMCwgIDg0LCAgNjksIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwKKyAgICAxMjgsIDAsICAgMCwgICAwLCAgMywgICAwLCAgMCwgICAwLCAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgIDMsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwKKyAgICAxMTgsIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNywgICA4LCAgIDAsICAgMCwgIDgzLCAgODYsIDk1LCAgODAsIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwKKyAgICA2OSwgIDc4LCAgNjgsICA2OSwgODIsICA4NCwgNjUsICA4MiwgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LAorICAgIDg4LCAgMCwgICA4NCwgIDY5LCA4OCwgIDY3LCA3OSwgIDc5LCA4MiwgIDY4LCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNjAsICAxLCAgIDAsICAgMCwKKyAgICA2NCwgIDAsICAgMiwgICAwLCAgNzksICAwLCAgMCwgICAwLCAgOTcsICAwLCAgIDAsICAgNSwgICAyNDIsIDE2LCAgMzIsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgIDAsICAgMCwgIDk1LCAgMCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDMyLCAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICA5NSwgIDAsICAwLCAgIDQsICAxMTQsIDE2LCAgMzIsICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxMDQsIDAsICAgMCwgICAyLCAgMSwgICAwLCAgMCwgICAwLCAgOTMsICAyNCwgIDAsICAgMSwgICA5MiwgIDQwLCAgMCwgICAxLCAgIDEwMywgMCwgICAwLCAgIDQsCisgICAgMjQyLCAzMiwgIDE2LCAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgNCwgICAxOCwgIDMyLCAgMTYsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICA0LCAgIDAsICAwLCAgIDAsICAxMDEsIDAsICAgMCwgICAzLCAgIDExNCwgMzIsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA5NCwgIDAsICAgMCwgICAyLCAgMywgICAwLCAgMCwgICAwLCAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICA2NCwgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDQ4LCAgMCwgICAwLCAgIDEsICAgMzMsICAwLCAgIDAsICAgNywgICAzNCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAxMCwgIDAsICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgNCwgICAzLCAgMjYsICAwLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMzAsIDE2MCwgMCwgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDcsICAxOCwgIDMyLCAxNiwgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNjAsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLCAgMCwgICAwLCAgNTQsICAwLCAgIDAsICAgNywgICAxMTQsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxOCwgIDE2MCwgMCwgIDEwLCAgMCwgIDE2LCAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxOSwgIDAsICAgMCwgICAxLAorICAgIDMwLCAgMCwgICAwLCAgIDcsICAxOCwgIDAsICAxNiwgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDY0LCAgMCwgICAwLCAgMSwgICAwLCAgMCwgICAwLCAgMjIsICAwLCAgIDAsICAgMSwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgICAwLCAgIDAsICAxMSwgIDAsICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgMiwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxMSwgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgIDMsICAgMCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDNkMTF2cy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoM2QxMXZzLmgKaW5kZXggODE0MWEzNS4uOWViMDVjYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoM2QxMXZzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoM2QxMXZzLmgKQEAgLTEsNzkgKzEsNzkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgVlNfUGFzc3Rocm91Z2gzRCAvVCB2c180XzAgL0ZoIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMXZzLmgNCi0vLyAgICBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBQT1NJVElPTiAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDAgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dw0KLS8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLXZzXzRfMA0KLWRjbF9pbnB1dCB2MC54eQ0KLWRjbF9pbnB1dCB2MS54DQotZGNsX2lucHV0IHYyLnh5eg0KLWRjbF9vdXRwdXRfc2l2IG8wLnh5encsIHBvc2l0aW9uDQotZGNsX291dHB1dCBvMS54DQotZGNsX291dHB1dCBvMi54eXoNCi1tb3YgbzAueHksIHYwLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQotbW92IG8xLngsIHYxLngNCi1tb3YgbzIueHl6LCB2Mi54eXp4DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5LCAgIDIwNSwgMTA5LCAxNTAsIDE1NywgOTYsICAyMjMsIDI1MSwgMTA3LCAxMCwgIDIwOCwgMTc5LCAyMTEsIDIwLCAgMTQxLA0KLSAgICAxMzAsIDEsICAgMCwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLA0KLSAgICAwLCAgIDAsICAgMjUyLCAwLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDQ0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLA0KLSAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwNCi0gICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsDQotICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMDQsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA5NSwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsDQotICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDc2LCAgNjUsICA4OSwgIDY5LCAgODIsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LA0KLSAgICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgNzksICA4MywgIDcxLCAgNzgsICAxMDgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxNCwgIDAsICAgMCwgICA5OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgOCwgICAwLCAgIDAsICAgODMsICA4NiwNCi0gICAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA3NiwgIDY1LCAgODksICA2OSwgIDgyLCAgMCwgICA4NCwgIDY5LCAgODgsDQotICAgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxODAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAxLCAgIDAsDQotICAgIDQ1LCAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsDQotICAgIDMsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDk1LCAgMCwgICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICA0LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwNCi0gICAgMCwgICAwLCAgIDMsICAgMTgsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMTE0LCAzMiwgIDE2LCAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwNCi0gICAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFZTX1Bhc3N0aHJvdWdoM0QgL1QgdnNfNF8wIC9GaCBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTF2cy5oCisvLyAgICBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gUE9TSVRJT04gICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgIHh5encKKy8vIExBWUVSICAgICAgICAgICAgICAgICAgICAwICAgeCAgICAgICAgICAgMSAgICAgTk9ORSAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KK3ZzXzRfMAorZGNsX2lucHV0IHYwLnh5CitkY2xfaW5wdXQgdjEueAorZGNsX2lucHV0IHYyLnh5egorZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24KK2RjbF9vdXRwdXQgbzEueAorZGNsX291dHB1dCBvMi54eXoKK21vdiBvMC54eSwgdjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQorbW92IG8xLngsIHYxLngKK21vdiBvMi54eXosIHYyLnh5engKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1ZTX1Bhc3N0aHJvdWdoM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDksICAgMjA1LCAxMDksIDE1MCwgMTU3LCA5NiwgIDIyMywgMjUxLCAxMDcsIDEwLCAgMjA4LCAxNzksIDIxMSwgMjAsICAxNDEsCisgICAgMTMwLCAxLCAgIDAsICAgMCwgICAwLCAgIDE2OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE0MCwgMCwKKyAgICAwLCAgIDAsICAgMjUyLCAwLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDQ0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTQsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwKKyAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwKKyAgICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwKKyAgICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTA0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsCisgICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgNzYsICA2NSwgIDg5LCAgNjksICA4MiwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsCisgICAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDc5LCAgODMsICA3MSwgIDc4LCAgMTA4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMTQsICAwLCAgIDAsICAgOTgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgOCwgICAwLCAgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDc2LCAgNjUsICA4OSwgIDY5LCAgODIsICAwLCAgIDg0LCAgNjksICA4OCwKKyAgICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTgwLCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMSwgICAwLAorICAgIDQ1LCAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsCisgICAgMywgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTUsICAwLCAgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsCisgICAgMCwgICAwLCAgIDMsICAgMTgsICAzMiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMTE0LCAzMiwgIDE2LCAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwKKyAgICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoYTJkMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoYTJkMTFwcy5oCmluZGV4IDg2ZTMzOTkuLjI2N2U3NTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGEyZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hhMmQxMXBzLmgKQEAgLTEsMTA4ICsxLDEwOCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaEEyRCAvVCBwc180XzBfbGV2ZWxfOV8zIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdoYTJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkZWYgYzAsIDAsIDEsIDAsIDANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG11bCByMCwgcjAudywgYzAueHh4eQ0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykNCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLncsIHIwLncNCi1tb3YgbzAueHl6LCBsKDAsMCwwLDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoQTJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTcsICAxMDUsIDE4NSwgMTM0LCAxOTUsIDE4OSwgMTc0LCAxOTIsIDEyMiwgMCwgICA4NSwgIDIyOSwgMTI2LCAxOTAsIDMwLA0KLSAgICAxMjUsIDEsICAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjA0LCAwLA0KLSAgICAwLCAgIDAsICAgMTE2LCAxLCAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMiwgICAwLCAgIDAsICAgMjQwLCAyLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTQwLCAwLCAgIDAsICAgMCwgICAxNDAsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTAwLCAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA1LCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDI1NSwgMTI4LCAwLCAgIDAsICAgNjQsICAxNjAsIDEsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDExNCwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsDQotICAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwNCi0gICAgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsDQotICAgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwNCi0gICAgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsDQotICAgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsDQotICAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LA0KLSAgICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwNCi0gICAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hBMkQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdoYTJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KKy8vCisvLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoKKy8vCisvLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlCisvLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQorLy8gczAgICAgICAgICAgICAgczAgICAgICAgICAgICAgIHQwICAgICAgICAgICAgICAgCisvLworLy8KKy8vIExldmVsOSBzaGFkZXIgYnl0ZWNvZGU6CisvLworICAgIHBzXzJfeAorICAgIGRlZiBjMCwgMCwgMSwgMCwgMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtdWwgcjAsIHIwLncsIGMwLnh4eHkKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAyIGFyaXRobWV0aWMpCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittb3YgbzAudywgcjAudworbW92IG8wLnh5eiwgbCgwLDAsMCwwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hBMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE3LCAgMTA1LCAxODUsIDEzNCwgMTk1LCAxODksIDE3NCwgMTkyLCAxMjIsIDAsICAgODUsICAyMjksIDEyNiwgMTkwLCAzMCwKKyAgICAxMjUsIDEsICAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjA0LCAwLAorICAgIDAsICAgMCwgICAxMTYsIDEsICAgMCwgICAwLCAgIDI0MCwgMSwgICAwLCAgIDAsICAgMTUyLCAyLCAgIDAsICAgMCwgICAyNDAsIDIsICAgMCwgICAwLCAgIDY1LAorICAgIDExMSwgMTEwLCA1NywgIDE0MCwgMCwgICAwLCAgIDAsICAgMTQwLCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDEwMCwgMCwgICAwLCAgIDAsCisgICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsCisgICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCA4MSwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwKKyAgICAxNSwgIDE2MCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzMSwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsCisgICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LAorICAgIDE2MCwgNSwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyNTUsIDEyOCwgMCwgICAwLCAgIDY0LCAgMTYwLCAxLCAgIDAsCisgICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTE0LCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLAorICAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwKKyAgICAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwKKyAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsCisgICAgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsCisgICAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsCisgICAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLAorICAgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzF9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoZGVwdGgyZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmgKaW5kZXggYjQ5YmRhMi4uMTZiZmFhNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoZGVwdGgyZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hkZXB0aDJkMTFwcy5oCkBAIC0xLDc4ICsxLDc4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoRGVwdGgyRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hkZXB0aDJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9ERVBUSCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG9EZXB0aA0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IG9EZXB0aCwgcjAueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaERlcHRoMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOCwgIDEwMCwgMjEwLCAxNTIsIDEzOCwgMTMyLCA1LCAgIDUxLCAgOTMsICAxNjksIDE4OSwgMjQ1LCAzMiwgIDE2NCwgMTQsDQotICAgIDIzMywgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICA1MiwgIDEsICAgMCwgICAwLCAgIDEwNCwgMSwgICAwLCAgIDAsICAgMjMyLCAxLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywNCi0gICAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsDQotICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwNCi0gICAgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgNjgsICA2OSwgIDgwLCAgODQsICA3MiwgIDAsICAgMTcxLCAxNzEsIDE3MSwgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDEyMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAzMCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNCwgICAxLCAgIDE5MiwgMCwNCi0gICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hEZXB0aDJEIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdoZGVwdGgyZDExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfREVQVEggICAgICAgICAgICAgICAgIDAgICAgTi9BICAgb0RlcHRoICAgIERFUFRIICBmbG9hdCAgICBZRVMKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvRGVwdGgKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK21vdiBvRGVwdGgsIHIwLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoRGVwdGgyRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTgsICAxMDAsIDIxMCwgMTUyLCAxMzgsIDEzMiwgNSwgICA1MSwgIDkzLCAgMTY5LCAxODksIDI0NSwgMzIsICAxNjQsIDE0LAorICAgIDIzMywgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAyMzIsIDEsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLAorICAgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsCisgICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LAorICAgIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDY4LCAgNjksICA4MCwgIDg0LCAgNzIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDEyMCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAzMCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMiwgICAxLCAgIDE5MiwgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDQsICAgMSwgICAxOTIsIDAsCisgICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwKKyAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTJkMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMmQxMXBzLmgKaW5kZXggN2I2NDFjOS4uNzJhMTExYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMmQxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMmQxMXBzLmgKQEAgLTEsMTA3ICsxLDEwNyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaEx1bTJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0yZDExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6DQotLy8NCi0vLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlDQotLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0NCi0vLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICANCi0vLw0KLS8vDQotLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToNCi0vLw0KLSAgICBwc18yX3gNCi0gICAgZGVmIGMwLCAxLCAwLCAwLCAwDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtYWQgcjAsIHIwLngsIGMwLnh4eHksIGMwLnl5eXgNCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAyIGFyaXRobWV0aWMpDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXosIHIwLnh4eHgNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW0yRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4OCwgMjI1LCAyNDksIDIyNywgOTMsICAxOTUsIDIyMSwgNiwgICA4OSwgIDE2LCAgMjM3LCAxNzMsIDE4NCwgMjQ1LCAxMTgsDQotICAgIDEyMywgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyMDgsIDAsDQotICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDIzMiwgMSwgICAwLCAgIDAsICAgMTQ0LCAyLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDY1LA0KLSAgICAxMTEsIDExMCwgNTcsICAxNDQsIDAsICAgMCwgICAwLCAgIDE0NCwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAxMDQsIDAsICAgMCwgICAwLA0KLSAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwNCi0gICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCA4MSwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwNCi0gICAgMTUsICAxNjAsIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwNCi0gICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LA0KLSAgICAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICA2NCwgIDE2MCwgMCwgICAwLA0KLSAgICAyMSwgIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMTQ4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwNCi0gICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksDQotICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywNCi0gICAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsDQotICAgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsDQotICAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaEx1bTJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bTJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KKy8vCisvLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoKKy8vCisvLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlCisvLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQorLy8gczAgICAgICAgICAgICAgczAgICAgICAgICAgICAgIHQwICAgICAgICAgICAgICAgCisvLworLy8KKy8vIExldmVsOSBzaGFkZXIgYnl0ZWNvZGU6CisvLworICAgIHBzXzJfeAorICAgIGRlZiBjMCwgMSwgMCwgMCwgMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtYWQgcjAsIHIwLngsIGMwLnh4eHksIGMwLnl5eXgKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAyIGFyaXRobWV0aWMpCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittb3YgbzAueHl6LCByMC54eHh4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoTHVtMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4OCwgMjI1LCAyNDksIDIyNywgOTMsICAxOTUsIDIyMSwgNiwgICA4OSwgIDE2LCAgMjM3LCAxNzMsIDE4NCwgMjQ1LCAxMTgsCisgICAgMTIzLCAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMywgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDIwOCwgMCwKKyAgICAwLCAgIDAsICAgMTA4LCAxLCAgIDAsICAgMCwgICAyMzIsIDEsICAgMCwgICAwLCAgIDE0NCwgMiwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA2NSwKKyAgICAxMTEsIDExMCwgNTcsICAxNDQsIDAsICAgMCwgICAwLCAgIDE0NCwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAxMDQsIDAsICAgMCwgICAwLAorICAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMSwgICAwLCAgIDM2LAorICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsCisgICAgMTUsICAxNjAsIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMywgICAxNzYsIDMxLCAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTQ0LAorICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwKKyAgICAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICA2NCwgIDE2MCwgMCwgICAwLAorICAgIDIxLCAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDE0OCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAzNywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LAorICAgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLAorICAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLAorICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywKKyAgICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywKKyAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLAorICAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0yZGFycmF5MTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMmRhcnJheTExcHMuaAppbmRleCA0MThiZjY0Li45MTZkOWQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0yZGFycmF5MTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTJkYXJyYXkxMXBzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hMdW0yREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bTJkYXJyYXkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXosIHIwLnh4eHgNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW0yREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDgsICAzMSwgIDIzNiwgMTYyLCA1NiwgIDIzLCAgMTA5LCAxMTQsIDI1MCwgOTAsICA4MCwgIDEwMCwgMTYwLCAxMDIsIDIyOCwNCi0gICAgMjUyLCAxLCAgIDAsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICAxMDgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsDQotICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LA0KLSAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsDQotICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICA1MSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LA0KLSAgICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LA0KLSAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwNCi0gICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsDQotICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLA0KLSAgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hMdW0yREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmRhcnJheTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittb3YgbzAueHl6LCByMC54eHh4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoTHVtMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDgsICAzMSwgIDIzNiwgMTYyLCA1NiwgIDIzLCAgMTA5LCAxMTQsIDI1MCwgOTAsICA4MCwgIDEwMCwgMTYwLCAxMDIsIDIyOCwKKyAgICAyNTIsIDEsICAgMCwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTA4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDUxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwKKyAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwKKyAgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW0zZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTNkMTFwcy5oCmluZGV4IGZiMjQ5MGUuLjFjMzA3ZDQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTNkMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTNkMTFwcy5oCkBAIC0xLDg0ICsxLDg0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoTHVtM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tb3YgbzAueHl6LCByMC54eHh4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoTHVtM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxODksIDE5LCAgMTQxLCAyMjcsIDIyOSwgMTUzLCA0NywgIDIyOSwgMTA4LCA1NiwgIDEyMCwgMjcsICAxMzksIDQ0LCAgMjE0LA0KLSAgICAxMDEsIDEsICAgMCwgICAwLCAgIDAsICAgMTc2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsDQotICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDM3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsDQotICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDYsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoTHVtM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0zZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMAorbW92IG8wLnh5eiwgcjAueHh4eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bTNEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxODksIDE5LCAgMTQxLCAyMjcsIDIyOSwgMTUzLCA0NywgIDIyOSwgMTA4LCA1NiwgIDEyMCwgMjcsICAxMzksIDQ0LCAgMjE0LAorICAgIDEwMSwgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICA1MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMzcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwKKyAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLAorICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNiwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMmQxMXBzLmgKaW5kZXggOTgyNWU3YS4uNTg3NzFkZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5oCkBAIC0xLDEwMyArMSwxMDMgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbW92IHIwLCByMC54eHh3DQotICAgIG1vdiBvQzAsIHIwDQotDQotLy8gYXBwcm94aW1hdGVseSAzIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMiBhcml0aG1ldGljKQ0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1zYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1tb3YgbzAueHl6dywgcjAueHh4dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMjMsIDI0MywgMjA2LCAxNzEsIDE0MCwgNDcsICAxMjksIDMyLCAgOSwgICA2NCwgIDczLCAgMTI0LCAxOSwgIDEzMSwgMTcsDQotICAgIDE2OCwgMSwgICAwLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAxNzYsIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDEsICAgMCwgICAwLCAgIDE4MCwgMSwgICAwLCAgIDAsICAgOTIsICAyLCAgIDAsICAgMCwgICAxODAsIDIsICAgMCwgICAwLCAgIDY1LA0KLSAgICAxMTEsIDExMCwgNTcsICAxMTIsIDAsICAgMCwgICAwLCAgIDExMiwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCA3MiwgIDAsICAgMCwgICAwLA0KLSAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwNCi0gICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDE5MiwgMTI4LCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwNCi0gICAgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMTI4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwNCi0gICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwNCi0gICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsDQotICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMTIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLA0KLSAgICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsDQotICAgIDcwLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLA0KLSAgICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywNCi0gICAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsDQotICAgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LA0KLSAgICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwNCi0gICAgMCwgICAxNzEsIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhMmQxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworLy8KKy8vIFNhbXBsZXIvUmVzb3VyY2UgdG8gRFg5IHNoYWRlciBzYW1wbGVyIG1hcHBpbmdzOgorLy8KKy8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UKKy8vIC0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tCisvLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICAKKy8vCisvLworLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToKKy8vCisgICAgcHNfMl94CisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMCwgcjAueHh4dworICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykKK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK21vdiBvMC54eXp3LCByMC54eHh3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEyMywgMjQzLCAyMDYsIDE3MSwgMTQwLCA0NywgIDEyOSwgMzIsICA5LCAgIDY0LCAgNzMsICAxMjQsIDE5LCAgMTMxLCAxNywKKyAgICAxNjgsIDEsICAgMCwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLAorICAgIDAsICAgMCwgICA1NiwgIDEsICAgMCwgICAwLCAgIDE4MCwgMSwgICAwLCAgIDAsICAgOTIsICAyLCAgIDAsICAgMCwgICAxODAsIDIsICAgMCwgICAwLCAgIDY1LAorICAgIDExMSwgMTEwLCA1NywgIDExMiwgMCwgICAwLCAgIDAsICAgMTEyLCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDcyLCAgMCwgICAwLCAgIDAsCisgICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsCisgICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwKKyAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDE5MiwgMTI4LCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwKKyAgICAxMjgsIDI1NSwgMjU1LCAwLCAgIDAsICAgODMsICA3MiwgIDY4LCAgODIsICAxMjgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzIsICAwLAorICAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsCisgICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLAorICAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LAorICAgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAxMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MiwKKyAgICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLAorICAgIDcwLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLAorICAgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LAorICAgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LAorICAgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LAorICAgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwKKyAgICAwLCAgIDE3MSwgMTcxfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMmRhcnJheTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMmRhcnJheTExcHMuaAppbmRleCBkYWU0NTVmLi45ZmU5M2VkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTJkYXJyYXkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEyZGFycmF5MTFwcy5oCkBAIC0xLDg4ICsxLDg4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhMmRhcnJheTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbW92IG8wLnh5encsIHIwLnh4eHcNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNzEsIDEyNiwgMjIyLCAyMTMsIDEzMywgMTUxLCAzLCAgIDE2MCwgMjM3LCA1OCwgIDM5LCAgMjI4LCAyMjgsIDEwOSwgNDgsDQotICAgIDE1MCwgMSwgICAwLCAgIDAsICAgMCwgICAyMTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgODgsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE4NCwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNDYsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwNCi0gICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsDQotICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgMTIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwNCi0gICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaEx1bUFscGhhMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhMmRhcnJheTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittb3YgbzAueHl6dywgcjAueHh4dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE3MSwgMTI2LCAyMjIsIDIxMywgMTMzLCAxNTEsIDMsICAgMTYwLCAyMzcsIDU4LCAgMzksICAyMjgsIDIyOCwgMTA5LCA0OCwKKyAgICAxNTAsIDEsICAgMCwgICAwLCAgIDAsICAgMjEyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgODgsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTg0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDQ2LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwKKyAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LAorICAgIDEyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsCisgICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oCmluZGV4IGI2ZGNiZWUuLmFkYjQ3ZmUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGEzZDExcHMuaApAQCAtMSw4MiArMSw4MiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaEx1bUFscGhhM0QgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEzZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXp3LCByMC54eHh3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE5MSwgMTM3LCAyMDEsIDE3NSwgMiwgICAxNTgsIDE1MCwgNTIsICAyMDIsIDE4NiwgNjcsICAyOCwgIDIzNSwgNjcsICAyMjgsDQotICAgIDI0NCwgMSwgICAwLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMzIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDEyOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywNCi0gICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNiwgICAxMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK21vdiBvMC54eXp3LCByMC54eHh3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE5MSwgMTM3LCAyMDEsIDE3NSwgMiwgICAxNTgsIDE1MCwgNTIsICAyMDIsIDE4NiwgNjcsICAyOCwgIDIzNSwgNjcsICAyMjgsCisgICAgMjQ0LCAxLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDMyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsCisgICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDEyOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLAorICAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LAorICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsCisgICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA2LCAgIDEyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZDExcHMuaAppbmRleCA3MjE5ODE0Li5iNmY0ZThkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmQxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjJkMTFwcy5oCkBAIC0xLDEwOCArMSwxMDggQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSMkQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZDExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6DQotLy8NCi0vLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlDQotLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0NCi0vLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICANCi0vLw0KLS8vDQotLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToNCi0vLw0KLSAgICBwc18yX3gNCi0gICAgZGVmIGMwLCAxLCAwLCAwLCAwDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtYWQgcjAsIHIwLngsIGMwLnh5eXksIGMwLnl5eXgNCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAyIGFyaXRobWV0aWMpDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54LCByMC54DQotbW92IG8wLnl6dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTIsIDUsICAgMTA2LCAyNiwgIDE1MywgMTE4LCA2NiwgIDEyMiwgMjM0LCAxMzksIDM4LCAgMTI1LCA1NiwgIDE2NSwgMTI0LA0KLSAgICAxNTIsIDEsICAgMCwgICAwLCAgIDAsICAgNDAsICAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjA4LCAwLA0KLSAgICAwLCAgIDAsICAgMTIwLCAxLCAgIDAsICAgMCwgICAyNDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTQ0LCAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTA0LCAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgODQsICAxNjAsIDAsICAgMCwNCi0gICAgMjEsICAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAwLCAgIDAsICAgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDE2MCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLA0KLSAgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwNCi0gICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsDQotICAgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwNCi0gICAgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksDQotICAgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLA0KLSAgICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwNCi0gICAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsDQotICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSMkQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KKy8vCisvLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoKKy8vCisvLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlCisvLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQorLy8gczAgICAgICAgICAgICAgczAgICAgICAgICAgICAgIHQwICAgICAgICAgICAgICAgCisvLworLy8KKy8vIExldmVsOSBzaGFkZXIgYnl0ZWNvZGU6CisvLworICAgIHBzXzJfeAorICAgIGRlZiBjMCwgMSwgMCwgMCwgMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtYWQgcjAsIHIwLngsIGMwLnh5eXksIGMwLnl5eXgKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDMgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAyIGFyaXRobWV0aWMpCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittb3YgbzAueCwgcjAueAorbW92IG8wLnl6dywgbCgwLDAsMCwxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUjJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTIsIDUsICAgMTA2LCAyNiwgIDE1MywgMTE4LCA2NiwgIDEyMiwgMjM0LCAxMzksIDM4LCAgMTI1LCA1NiwgIDE2NSwgMTI0LAorICAgIDE1MiwgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyMDgsIDAsCisgICAgMCwgICAwLCAgIDEyMCwgMSwgICAwLCAgIDAsICAgMjQ0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDI0NCwgMiwgICAwLCAgIDAsICAgNjUsCisgICAgMTExLCAxMTAsIDU3LCAgMTQ0LCAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTA0LCAwLCAgIDAsICAgMCwKKyAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwKKyAgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU1LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMCwgICAwLAorICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgODQsICAxNjAsIDAsICAgMCwKKyAgICAyMSwgIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywKKyAgICA3MiwgIDY4LCAgODIsICAxNjAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNSwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwKKyAgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLAorICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLAorICAgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwKKyAgICAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwKKyAgICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywKKyAgICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwKKyAgICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmRhcnJheTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oCmluZGV4IGIwZDg1YjkuLmNhYzcwNzMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oCkBAIC0xLDkwICsxLDkwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkYXJyYXkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54LCByMC54DQotbW92IG8wLnl6dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSMkRBcnJheVtdID0gew0KLSAgICA2OCwgODgsICA2NiwgIDY3LCAgMTUzLCA5OCwgIDEsICAgMTQzLCA1NywgIDE1NSwgMTA4LCA4LCAgIDYzLCAgMTgyLCAxMzYsIDIzNCwgNDEsIDI0MywgMjAxLA0KLSAgICA4NCwgMSwgICAwLCAgIDAsICAgMCwgICAyNDQsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDIyMCwgMCwNCi0gICAgMCwgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAwLCAgIDAsDQotICAgIDAsICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwNCi0gICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAwLCAgIDUsDQotICAgIDAsICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgMCwgICAwLA0KLSAgICA4MywgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LA0KLSAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIDgzLCAgMTA0LA0KLSAgICA5NywgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsDQotICAgIDU3LCA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLA0KLSAgICAzLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAgMCwNCi0gICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgMCwgICAxMTgsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLA0KLSAgICA3LCAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsDQotICAgIDgyLCA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwNCi0gICAgNjgsIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LA0KLSAgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LA0KLSAgICA4NCwgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjE2LCAwLCAgIDAsICAgMCwgIDY0LCAgMCwNCi0gICAgMCwgIDAsICAgNTQsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDg4LA0KLSAgICA2NCwgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgIDAsICAgNCwNCi0gICAgMTgsIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAxNiwgIDE2LA0KLSAgICAwLCAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEwNCwgMCwNCi0gICAgMCwgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwLA0KLSAgICAxNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgNzAsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA5NiwNCi0gICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwLA0KLSAgICAwLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMiwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEyOCwNCi0gICAgNjMsIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK21vdiBvMC54LCByMC54Cittb3YgbzAueXp3LCBsKDAsMCwwLDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSMkRBcnJheVtdID0geworICAgIDY4LCA4OCwgIDY2LCAgNjcsICAxNTMsIDk4LCAgMSwgICAxNDMsIDU3LCAgMTU1LCAxMDgsIDgsICAgNjMsICAxODIsIDEzNiwgMjM0LCA0MSwgMjQzLCAyMDEsCisgICAgODQsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAyMjAsIDAsCisgICAgMCwgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwKKyAgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgNSwKKyAgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgIDAsICAgMCwKKyAgICA4MywgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LAorICAgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsCisgICAgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCA1NywgIDQ2LAorICAgIDU3LCA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLAorICAgIDMsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLAorICAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgMCwgICAxMTgsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsCisgICAgNywgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCA4NiwgIDk1LAorICAgIDgyLCA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwKKyAgICA2OCwgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsCisgICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LAorICAgIDg0LCA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMTYsIDAsICAgMCwgICAwLCAgNjQsICAwLAorICAgIDAsICAwLCAgIDU0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA4OCwKKyAgICA2NCwgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgIDAsICAgNCwKKyAgICAxOCwgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsIDE2LCAgMTYsCisgICAgMCwgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxMDQsIDAsCisgICAgMCwgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwLAorICAgIDE2LCAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDcwLCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA5NiwKKyAgICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMTAsCisgICAgMCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMiwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEyOCwKKyAgICA2MywgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5aTExcHMuaAppbmRleCA3YzMwNzc1Li5hNTQwYTg0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmRhcnJheWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjJkYXJyYXlpMTFwcy5oCkBAIC0xLDk0ICsxLDk0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXlJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5aTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eSwgcjAueHl4eA0KLW11bCByMC54eSwgcjAueHl4eCwgdjIueHl4eA0KLWZ0b2kgcjAueHksIHIwLnh5eHgNCi1tb3YgcjAueiwgdjEueA0KLW1vdiByMC53LCBsKDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54LCByMC54DQotbW92IG8wLnl6dywgbCgwLDAsMCwxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSMkRBcnJheUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTAsIDE0LCAgMjEzLCAyNTUsIDg1LCAgMjksICAyMTcsIDExLCAgNDMsICA1LCAgIDExMCwgNTQsICA1NSwgIDE0NiwgMTQ5LA0KLSAgICA5OCwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwNCi0gICAgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLA0KLSAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywNCi0gICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDM2LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNzMsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwNCi0gICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsDQotICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsDQotICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXlJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkYXJyYXlpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56LCB2MS54Cittb3YgcjAudywgbCgwKQorbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dworbW92IG8wLngsIHIwLngKK21vdiBvMC55encsIGwoMCwwLDAsMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFIyREFycmF5SVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTkwLCAxNCwgIDIxMywgMjU1LCA4NSwgIDI5LCAgMjE3LCAxMSwgIDQzLCAgNSwgICAxMTAsIDU0LCAgNTUsICAxNDYsIDE0OSwKKyAgICA5OCwgIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsCisgICAgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLAorICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLAorICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwKKyAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwKKyAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsCisgICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDM2LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICA3MywgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLAorICAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LAorICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsCisgICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmRhcnJheXVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjJkYXJyYXl1aTExcHMuaAppbmRleCA1ZGNkZTRhLi42Y2MyYjU2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmRhcnJheXVpMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGFycmF5dWkxMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSMkRBcnJheVVJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5dWkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnosIHYxLngNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueCwgcjAueA0KLW1vdiBvMC55encsIGwoMCwwLDAsMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUjJEQXJyYXlVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDk3LCAgMTAyLCA3NSwgIDIxNiwgNDEsICAxOSwgIDEzMiwgMTkzLCA1NywgIDE4MiwgMTI5LCAxNjgsIDYsICAgMTk3LCAyMDMsDQotICAgIDEzMSwgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDM2LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNzMsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsDQotICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsDQotICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXlVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5dWkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjIueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnosIHYxLngKK21vdiByMC53LCBsKDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgbzAueCwgcjAueAorbW92IG8wLnl6dywgbCgwLDAsMCwxKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUjJEQXJyYXlVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgOTcsICAxMDIsIDc1LCAgMjE2LCA0MSwgIDE5LCAgMTMyLCAxOTMsIDU3LCAgMTgyLCAxMjksIDE2OCwgNiwgICAxOTcsIDIwMywKKyAgICAxMzEsIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywKKyAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgNzMsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwKKyAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwKKyAgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDIyNiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLAorICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjJkaTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZGkxMXBzLmgKaW5kZXggODk0ZmQ3OS4uYWE4YmFlYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjJkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmRpMTFwcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJESSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54LCByMC54DQotbW92IG8wLnl6dywgbCgwLDAsMCwwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFIyRElbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA4NCwgIDY0LCAgMTEyLCA5MywgIDM2LCAgMTg2LCAxNjYsIDc1LCAgMTYxLCAxODcsIDIzMSwgMjExLCAxODksIDk4LCAgOCwNCi0gICAgMjMzLCAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsDQotICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjcsICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwNCi0gICAgMCwgICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFIyREkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlSSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54LCByMC54Cittb3YgbzAueXp3LCBsKDAsMCwwLDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFIyRElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDg0LCAgNjQsICAxMTIsIDkzLCAgMzYsICAxODYsIDE2NiwgNzUsICAxNjEsIDE4NywgMjMxLCAyMTEsIDE4OSwgOTgsICA4LAorICAgIDIzMywgMSwgICAwLCAgIDAsICAgMCwgICAyMDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwKKyAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsCisgICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsCisgICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLAorICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsCisgICAgODIsICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjcsICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwKKyAgICAwLCAgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyMmR1aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZHVpMTFwcy5oCmluZGV4IGRkNGMzMjAuLjUxM2ZlNDggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZHVpMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIyZHVpMTFwcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjJEVUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkICh1aW50LHVpbnQsdWludCx1aW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eSwgcjAueHl4eA0KLW11bCByMC54eSwgcjAueHl4eCwgdjEueHl4eA0KLWZ0b2kgcjAueHksIHIwLnh5eHgNCi1tb3YgcjAuencsIGwoMCwwLDAsMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IG8wLngsIHIwLngNCi1tb3YgbzAueXp3LCBsKDAsMCwwLDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUjJEVUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA1NSwgIDEyOCwgMTM0LCA5NCwgIDExOCwgNywgICAxMCwgIDE5NCwgMjA4LCAxNSwgIDIzOCwgOTUsICAyOSwgMTgsICA2MCwNCi0gICAgMTY4LCAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDg0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgMTA1LCA5OSwNCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCA5NywNCi0gICAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgIDAsICAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgNzIsICA2OCwNCi0gICAgODIsICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjcsICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgMCwgICAxMTIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgMCwgICAyLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICA2NCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgIDUwLCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgNywgICA1MCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgMTYsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDQ1LA0KLSAgICAwLCAgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSMkRVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZHVpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54LCByMC54Cittb3YgbzAueXp3LCBsKDAsMCwwLDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFIyRFVJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA1NSwgIDEyOCwgMTM0LCA5NCwgIDExOCwgNywgICAxMCwgIDE5NCwgMjA4LCAxNSwgIDIzOCwgOTUsICAyOSwgMTgsICA2MCwKKyAgICAxNjgsIDEsICAgMCwgICAwLCAgIDAsICAgMjA4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAxODAsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsIDQ2LCAgNTcsCisgICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgMiwgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwKKyAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAwLCAgIDE3MSwKKyAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAwLCAgIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCA3MiwgIDY4LAorICAgIDgyLCAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY3LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgIDAsICAgMTEyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAwLCAgIDIsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgNjQsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgIDUwLCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICA3LCAgIDUwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsIDE2LCAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDIsICAgNjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwKKyAgICAwLCAgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIzZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIzZDExcHMuaAppbmRleCA2YmYzOGRhLi41NGQ0MDYwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyM2QxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjNkMTFwcy5oCkBAIC0xLDg0ICsxLDg0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUjNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIzZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54LCByMC54DQotbW92IG8wLnl6dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNjMsIDEwOCwgMTksICAxNjgsIDExNCwgNTYsICAxNDAsIDI0MSwgMTcsICAxMzEsIDMwLCAgMjEyLCA4NSwgMjA5LCA5MiwNCi0gICAgNzMsICAxLCAgIDAsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDY0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgMCwgICA4LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwNCi0gICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgNzgsICA0NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE2MCwgMCwgICAwLCAgIDAsICA2NCwgIDAsDQotICAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsDQotICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsIDAsICAgMywNCi0gICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSM0QgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2QxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK21vdiBvMC54LCByMC54Cittb3YgbzAueXp3LCBsKDAsMCwwLDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE2MywgMTA4LCAxOSwgIDE2OCwgMTE0LCA1NiwgIDE0MCwgMjQxLCAxNywgIDEzMSwgMzAsICAyMTIsIDg1LCAyMDksIDkyLAorICAgIDczLCAgMSwgICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDY0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTYwLCAwLCAgIDAsICAgMCwgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDg4LAorICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsIDAsICAgMywKKyAgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIzZGkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyM2RpMTFwcy5oCmluZGV4IGRlNTcyYmYuLjMxNTBkNzkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHIzZGkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjNkaTExcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFIzREkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHl6LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eA0KLWZ0b2kgcjAueHl6LCByMC54eXp4DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IG8wLngsIHIwLngNCi1tb3YgbzAueXp3LCBsKDAsMCwwLDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUjNESVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEyNywgMTY4LCA4MSwgIDE2NCwgMTEsICAxMzYsIDM4LCAgMjM1LCA5LCAgIDEwMSwgMTkyLCAyMTUsIDY0LCAgMjQsICAxNjcsDQotICAgIDEwMSwgMSwgICAwLCAgIDAsICAgMCwgICAyNDQsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LA0KLSAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsDQotICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksDQotICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LA0KLSAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICA2NCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LA0KLSAgICAxMzAsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLA0KLSAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSM0RJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5eiwgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eAorZnRvaSByMC54eXosIHIwLnh5engKK21vdiByMC53LCBsKDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgbzAueCwgcjAueAorbW92IG8wLnl6dywgbCgwLDAsMCwwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSM0RJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMjcsIDE2OCwgODEsICAxNjQsIDExLCAgMTM2LCAzOCwgIDIzNSwgOSwgICAxMDEsIDE5MiwgMjE1LCA2NCwgIDI0LCAgMTY3LAorICAgIDEwMSwgMSwgICAwLCAgIDAsICAgMCwgICAyNDQsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwKKyAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsCisgICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsCisgICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LAorICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LAorICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwKKyAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDY0LCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAxMTQsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICAxMzAsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLAorICAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjI2LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocjNkdWkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyM2R1aTExcHMuaAppbmRleCA0N2Q3MjZkLi4zZGIzODA5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyM2R1aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyM2R1aTExcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFIzRFVJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIzZHVpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eXosIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4DQotZnRvaSByMC54eXosIHIwLnh5engNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueCwgcjAueA0KLW1vdiBvMC55encsIGwoMCwwLDAsMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSM0RVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4MSwgMjExLCA0OCwgIDI1NSwgMTM4LCA5NCwgIDMxLCAgMjUyLCA0NCwgIDI1NCwgOTIsIDE4OCwgNzgsICAxNSwgIDgwLA0KLSAgICAxMywgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICA4MiwgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsIDAsICAgNzcsICAxMDUsIDk5LA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsIDUwLCAgNTcsICA0NiwgIDU3LA0KLSAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNjQsICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDY4LCAgNjgsICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAgMCwgICA3LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgMCwgICAwLCAgIDUsICAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwgIDAsICAgMCwNCi0gICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSM0RVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIzZHVpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHl6LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4CitmdG9pIHIwLnh5eiwgcjAueHl6eAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54LCByMC54Cittb3YgbzAueXp3LCBsKDAsMCwwLDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFIzRFVJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxODEsIDIxMSwgNDgsICAyNTUsIDEzOCwgOTQsICAzMSwgIDI1MiwgNDQsICAyNTQsIDkyLCAxODgsIDc4LCAgMTUsICA4MCwKKyAgICAxMywgIDEsICAgMCwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMjAsIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAwLCAgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsICA1NywgIDQ2LCAgNTcsCisgICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LAorICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNjgsICA2OCwgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAwLCAgIDAsICAgNSwgICAxMTQsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgIDAsICAgMCwgICA1LAorICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwgIDAsICAgMCwKKyAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAyMjYsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmQxMXBzLmgKaW5kZXggMTU4Mzc4YS4uNjMwMjRkZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkMTFwcy5oCkBAIC0xLDEwOCArMSwxMDggQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkZWYgYzAsIDEsIDAsIDAsIDANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMCwgcjAueHl4eCwgYzAueHh5eSwgYzAueXl5eA0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykNCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLnh5LCByMC54eXh4DQotbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTEsIDIwMSwgMTA3LCAxODcsIDU5LCAgMTAsICA5NywgIDg5LCAgMTA5LCA4NywgIDE4LCAgMjM1LCAxMSwgIDUyLCAgMTkyLA0KLSAgICA5NCwgIDEsICAgMCwgICAwLCAgIDAsICAgNDAsICAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjA4LCAwLA0KLSAgICAwLCAgIDAsICAgMTIwLCAxLCAgIDAsICAgMCwgICAyNDQsIDEsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTQ0LCAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTA0LCAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDQsICAgMTI4LCAwLCAgIDAsICAgODAsICAxNjAsIDAsICAgMCwNCi0gICAgMjEsICAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAwLCAgIDAsICAgODMsDQotICAgIDcyLCAgNjgsICA4MiwgIDE2MCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LA0KLSAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLA0KLSAgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwNCi0gICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsDQotICAgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwNCi0gICAgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksDQotICAgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsDQotICAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLA0KLSAgICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwNCi0gICAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsDQotICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzJEIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmQxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworLy8KKy8vIFNhbXBsZXIvUmVzb3VyY2UgdG8gRFg5IHNoYWRlciBzYW1wbGVyIG1hcHBpbmdzOgorLy8KKy8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UKKy8vIC0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tCisvLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICAKKy8vCisvLworLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToKKy8vCisgICAgcHNfMl94CisgICAgZGVmIGMwLCAxLCAwLCAwLCAwCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1hZCByMCwgcjAueHl4eCwgYzAueHh5eSwgYzAueXl5eAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykKK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTEsIDIwMSwgMTA3LCAxODcsIDU5LCAgMTAsICA5NywgIDg5LCAgMTA5LCA4NywgIDE4LCAgMjM1LCAxMSwgIDUyLCAgMTkyLAorICAgIDk0LCAgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyMDgsIDAsCisgICAgMCwgICAwLCAgIDEyMCwgMSwgICAwLCAgIDAsICAgMjQ0LCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDI0NCwgMiwgICAwLCAgIDAsICAgNjUsCisgICAgMTExLCAxMTAsIDU3LCAgMTQ0LCAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTA0LCAwLCAgIDAsICAgMCwKKyAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwKKyAgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU1LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMCwgICAwLAorICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDQsICAgMTI4LCAwLCAgIDAsICAgODAsICAxNjAsIDAsICAgMCwKKyAgICAyMSwgIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywKKyAgICA3MiwgIDY4LCAgODIsICAxNjAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwKKyAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwKKyAgICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwKKyAgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLAorICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLAorICAgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwKKyAgICAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwKKyAgICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLAorICAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywKKyAgICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwKKyAgICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkYXJyYXkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkYXJyYXkxMXBzLmgKaW5kZXggYjU1OTczOS4uOWZkNTAxNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGFycmF5MTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmRhcnJheTExcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkYXJyYXkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eSwgcjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMTMsIDEwMSwgNDEsICAxMzEsIDYzLCAgMjA2LCAyMjMsIDIwNSwgMjA5LCAxNjcsIDEyMywgMTAyLCAyMDEsIDE3NCwgMzcsDQotICAgIDE4NiwgMSwgICAwLCAgIDAsICAgMCwgICAyNDQsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIxNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwNCi0gICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsDQotICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwNCi0gICAgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkcyREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGFycmF5MTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExMywgMTAxLCA0MSwgIDEzMSwgNjMsICAyMDYsIDIyMywgMjA1LCAyMDksIDE2NywgMTIzLCAxMDIsIDIwMSwgMTc0LCAzNywKKyAgICAxODYsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjE2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwKKyAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwKKyAgICA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkYXJyYXlpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGFycmF5aTExcHMuaAppbmRleCBiODc1MzI4Li5hMDkyZGViIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkYXJyYXlpMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmRhcnJheWkxMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRhcnJheWkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnosIHYxLngNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHksIHIwLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkcyREFycmF5SVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI0NywgMTg1LCAxMzUsIDM4LCAgNjksICAxMzUsIDIwNywgMTQsICA1NywgIDExNCwgMTI2LCAxMDIsIDEzMywgMjMzLCAyMjUsDQotICAgIDgwLCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LA0KLSAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsDQotICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksDQotICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LA0KLSAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMzYsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICA3MywgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLA0KLSAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwNCi0gICAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwNCi0gICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGFycmF5aTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlSSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoc2ludCxzaW50LHNpbnQsc2ludCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAueiwgdjEueAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDcsIDE4NSwgMTM1LCAzOCwgIDY5LCAgMTM1LCAyMDcsIDE0LCAgNTcsICAxMTQsIDEyNiwgMTAyLCAxMzMsIDIzMywgMjI1LAorICAgIDgwLCAgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwKKyAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsCisgICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsCisgICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LAorICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LAorICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwKKyAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMzYsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDczLCAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsCisgICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsCisgICAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwKKyAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmRhcnJheXVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGFycmF5dWkxMXBzLmgKaW5kZXggMWRjYmNhNC4uZjVlMGFmYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGFycmF5dWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGFycmF5dWkxMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkYXJyYXl1aTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAodWludCx1aW50LHVpbnQsdWludCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eSwgcjAueHl4eA0KLW11bCByMC54eSwgcjAueHl4eCwgdjIueHl4eA0KLWZ0b2kgcjAueHksIHIwLnh5eHgNCi1tb3YgcjAueiwgdjEueA0KLW1vdiByMC53LCBsKDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54eSwgcjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwxKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDYzLCAgNTgsICAxODIsIDExMywgMTQzLCAxMjksIDkyLCAgNCwgICAxODIsIDc5LCAgNTksICAxNzEsIDE1NSwgOTUsICAyMTcsDQotICAgIDExMSwgMSwgICAwLCAgIDAsICAgMCwgICAyNCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDM2LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNzMsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsDQotICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsDQotICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkcyREFycmF5VUkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkYXJyYXl1aTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAueiwgdjEueAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNjMsICA1OCwgIDE4MiwgMTEzLCAxNDMsIDEyOSwgOTIsICA0LCAgIDE4MiwgNzksICA1OSwgIDE3MSwgMTU1LCA5NSwgIDIxNywKKyAgICAxMTEsIDEsICAgMCwgICAwLCAgIDAsICAgMjQsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTU2LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywKKyAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAzNiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgNzMsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwKKyAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwKKyAgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLAorICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZGkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkaTExcHMuaAppbmRleCAxMGY0ZTc1Li5lMmY5OGQ5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkaTExcHMuaApAQCAtMSw4NyArMSw4NyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHMkRJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54eSwgcjAueHl4eA0KLW1vdiBvMC56dywgbCgwLDAsMCwwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHMkRJW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTU0LCA2MywgIDE4OCwgMTIyLCA1MCwgIDIxMSwgNDQsICAxOTQsIDE3NSwgMTkzLCA3LCAgIDEsICAgMjM0LCAxNzgsIDI1MSwNCi0gICAgODMsICAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsDQotICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgNjcsICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwNCi0gICAgMCwgICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHMkRJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGkxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56dywgbCgwLDAsMCwwKQorbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dworbW92IG8wLnh5LCByMC54eXh4Cittb3YgbzAuencsIGwoMCwwLDAsMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkcyRElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE1NCwgNjMsICAxODgsIDEyMiwgNTAsICAyMTEsIDQ0LCAgMTk0LCAxNzUsIDE5MywgNywgICAxLCAgIDIzNCwgMTc4LCAyNTEsCisgICAgODMsICAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDg0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwKKyAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywKKyAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2NywgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LAorICAgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmR1aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnMmR1aTExcHMuaAppbmRleCAyODkwMmM5Li40YjBlNGNlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzJkdWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmcyZHVpMTFwcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkcyRFVJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmR1aTExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56dywgbCgwLDAsMCwwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHksIHIwLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzJEVUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNDQsIDQzLCAgMjA4LCAxMDgsIDE4NiwgMTQzLCA4OSwgIDE4NCwgMzUsICAzMSwgIDExNiwgOCwgICAxNDksIDQ3LCAgMjMsDQotICAgIDQwLCAgMSwgICAwLCAgIDAsICAgMCwgICAyMDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMSwgICAwLCAgIDAsICAgODQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsDQotICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwNCi0gICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LA0KLSAgICA4MiwgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2NywgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LA0KLSAgICAwLCAgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMzIsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkcyRFVJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZHVpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHMkRVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ0LCA0MywgIDIwOCwgMTA4LCAxODYsIDE0MywgODksICAxODQsIDM1LCAgMzEsICAxMTYsIDgsICAgMTQ5LCA0NywgIDIzLAorICAgIDQwLCAgMSwgICAwLCAgIDAsICAgMCwgICAyMDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwKKyAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LAorICAgIDgyLCAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY3LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsCisgICAgMCwgICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmczZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnM2QxMXBzLmgKaW5kZXggNTU1NzVhZi4uOTUxMGVkYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmczZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzNkMTFwcy5oCkBAIC0xLDg0ICsxLDg0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkczRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbW92IG8wLnh5LCByMC54eXh4DQotbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjksIDE0NCwgMTUyLCAxNjAsIDIwNCwgMTc1LCAxNTgsIDE4OCwgNDcsICA0NSwgIDY1LCAgMjUxLCA0MiwgMjI0LCAxODIsDQotICAgIDU1LCAgMSwgICAwLCAgIDAsICAgMCwgICAxODgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICA2NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTE4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsDQotICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsDQotICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksIDczLCAgNzgsDQotICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNjAsIDAsICAgMCwgICAwLCAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDg4LA0KLSAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkczRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2QxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzNEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMjksIDE0NCwgMTUyLCAxNjAsIDIwNCwgMTc1LCAxNTgsIDE4OCwgNDcsICA0NSwgIDY1LCAgMjUxLCA0MiwgMjI0LCAxODIsCisgICAgNTUsICAxLCAgIDAsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgNjQsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgOCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsCisgICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNjAsIDAsICAgMCwgICAwLCAgNjQsICAwLAorICAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsCisgICAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgMCwgICAzLAorICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmczZGkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzNkaTExcHMuaAppbmRleCAyODIzODVlLi5kYWEzOWE4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzNkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzNkaTExcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHM0RJIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2RpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eXosIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4DQotZnRvaSByMC54eXosIHIwLnh5engNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHksIHIwLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzNESVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4NSwgMjEzLCAyNDQsIDEwOCwgMTEzLCAxODksIDI1MywgMTQ1LCAxMzEsIDIsICAgNjgsIDExNiwgMTYzLCAxOTYsIDIyMywNCi0gICAgOTQsICAxLCAgIDAsICAgMCwgICAwLCAgIDI0NCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgODIsIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICA3NywgIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsIDk3LCAgMTAwLA0KLSAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCA4NiwgIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNjQsICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDUxLCAgNTEsICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAgMCwgICA3LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgMCwgICAwLCAgIDUsICAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwgIDAsICAgMCwNCi0gICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDksICAgMCwgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzNESSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2RpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlSSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHl6LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4CitmdG9pIHIwLnh5eiwgcjAueHl6eAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54eSwgcjAueHl4eAorbW92IG8wLnp3LCBsKDAsMCwwLDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHM0RJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxODUsIDIxMywgMjQ0LCAxMDgsIDExMywgMTg5LCAyNTMsIDE0NSwgMTMxLCAyLCAgIDY4LCAxMTYsIDE2MywgMTk2LCAyMjMsCisgICAgOTQsICAxLCAgIDAsICAgMCwgICAwLCAgIDI0NCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTIwLCAyLCAgIDAsICAgMCwgICA4MiwgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgNzcsICAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsIDk3LCAgMTAwLAorICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwgIDU3LCAgNTMsCisgICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLCAgIDcsICAgNywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsICA4MiwgIDY5LAorICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgNjQsICAwLCAgIDAsICAgMCwKKyAgICA2NCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNTEsICA1MSwgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAwLCAgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAwLCAgIDAsICAgNSwgICAxMTQsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgIDAsICAgMCwgICA1LAorICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwgIDAsICAgMCwKKyAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmczZHVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmczZHVpMTFwcy5oCmluZGV4IDVhYmRmY2UuLmNmNjJiMmUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnM2R1aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZzNkdWkxMXBzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSRzNEVUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmczZHVpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eXosIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4DQotZnRvaSByMC54eXosIHIwLnh5engNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHksIHIwLnh5eHgNCi1tb3YgbzAuencsIGwoMCwwLDAsMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzNEVUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NiwgIDE5MiwgMzYsICAxNzgsIDI0MywgODYsICAxODgsIDMyLCAgNjEsICAyNDIsIDEwOSwgMjQ4LCA2MCwgIDI0MiwgMjM4LA0KLSAgICAxODUsIDEsICAgMCwgICAwLCAgIDAsICAgMjQ0LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywNCi0gICAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsDQotICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDcsDQotICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LA0KLSAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAwLCAgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsDQotICAgIDY0LCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsDQotICAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHM0RVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2R1aTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkICh1aW50LHVpbnQsdWludCx1aW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5eiwgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eAorZnRvaSByMC54eXosIHIwLnh5engKK21vdiByMC53LCBsKDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgbzAueHksIHIwLnh5eHgKK21vdiBvMC56dywgbCgwLDAsMCwwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSRzNEVUlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDk2LCAgMTkyLCAzNiwgIDE3OCwgMjQzLCA4NiwgIDE4OCwgMzIsICA2MSwgIDI0MiwgMTA5LCAyNDgsIDYwLCAgMjQyLCAyMzgsCisgICAgMTg1LCAxLCAgIDAsICAgMCwgICAwLCAgIDI0NCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDEyMCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsCisgICAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsCisgICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICA3LAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LAorICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LAorICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwKKyAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLAorICAgIDY0LCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAxMTQsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwKKyAgICAxMzAsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLAorICAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmQxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZDExcHMuaAppbmRleCAyMzFkZDE5Li5lYTNjNGFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZDExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZDExcHMuaApAQCAtMSwxMDcgKzEsMTA3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkZWYgYzAsIDEsIDAsIDAsIDANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMCwgcjAueHl6eCwgYzAueHh4eSwgYzAueXl5eA0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykNCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgODUsICAxMjYsIDI1MCwgMTk2LCAxODgsIDE2LCAgMTYyLCA4NCwgIDI1LCAgMjQxLCAyMjEsIDE5NSwgMTEyLCAyMzYsIDE5OSwNCi0gICAgMjU0LCAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMywgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDIwOCwgMCwNCi0gICAgMCwgICAwLCAgIDEwOCwgMSwgICAwLCAgIDAsICAgMjMyLCAxLCAgIDAsICAgMCwgICAxNDQsIDIsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgNjUsDQotICAgIDExMSwgMTEwLCA1NywgIDE0NCwgMCwgICAwLCAgIDAsICAgMTQ0LCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDEwNCwgMCwgICAwLCAgIDAsDQotICAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMSwgICAwLCAgIDM2LA0KLSAgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU1LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMCwgICAwLA0KLSAgICAxNSwgIDE2MCwgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzMSwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMywgICAxNzYsIDMxLCAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTQ0LA0KLSAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsDQotICAgIDE2MCwgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAzNiwgIDEyOCwgMCwgICAwLCAgIDY0LCAgMTYwLCAwLCAgIDAsDQotICAgIDIxLCAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLA0KLSAgICA3MiwgIDY4LCAgODIsICAxNDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMzcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLA0KLSAgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwNCi0gICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwNCi0gICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsDQotICAgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLA0KLSAgICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LCA5OSwNCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsDQotICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LA0KLSAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwNCi0gICAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwNCi0gICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzF9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworLy8KKy8vIFNhbXBsZXIvUmVzb3VyY2UgdG8gRFg5IHNoYWRlciBzYW1wbGVyIG1hcHBpbmdzOgorLy8KKy8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UKKy8vIC0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tCisvLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICAKKy8vCisvLworLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToKKy8vCisgICAgcHNfMl94CisgICAgZGVmIGMwLCAxLCAwLCAwLCAwCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1hZCByMCwgcjAueHl6eCwgYzAueHh4eSwgYzAueXl5eAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDIgYXJpdGhtZXRpYykKK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK21vdiBvMC54eXosIHIwLnh5engKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgODUsICAxMjYsIDI1MCwgMTk2LCAxODgsIDE2LCAgMTYyLCA4NCwgIDI1LCAgMjQxLCAyMjEsIDE5NSwgMTEyLCAyMzYsIDE5OSwKKyAgICAyNTQsIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjA4LCAwLAorICAgIDAsICAgMCwgICAxMDgsIDEsICAgMCwgICAwLCAgIDIzMiwgMSwgICAwLCAgIDAsICAgMTQ0LCAyLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDY1LAorICAgIDExMSwgMTEwLCA1NywgIDE0NCwgMCwgICAwLCAgIDAsICAgMTQ0LCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDEwNCwgMCwgICAwLCAgIDAsCisgICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsCisgICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCA4MSwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwKKyAgICAxNSwgIDE2MCwgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzMSwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsCisgICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LAorICAgIDE2MCwgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAzNiwgIDEyOCwgMCwgICAwLCAgIDY0LCAgMTYwLCAwLCAgIDAsCisgICAgMjEsICAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAwLCAgIDAsICAgODMsCisgICAgNzIsICA2OCwgIDgyLCAgMTQ4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDM3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsCisgICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksCisgICAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsCisgICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsCisgICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLAorICAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLAorICAgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsCisgICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkXzU2NV8xMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZF81NjVfMTFwcy5oCmluZGV4IDBiNjk0MTEuLmYwZGZkNDQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkXzU2NV8xMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRfNTY1XzExcHMuaApAQCAtMSwxMjMgKzEsMTIzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRfNTY1IC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZF81NjVfMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkZWYgYzAsIDMxLCA2MywgMC41LCAxDQotICAgIGRlZiBjMSwgMC4wMzIyNTgwNjM2LCAwLjAxNTg3MzAxNjgsIDAsIDANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMC54eXosIHIwLCBjMC54eXh3LCBjMC56DQotICAgIGZyYyByMS54eXosIHIwDQotICAgIGFkZCByMC54eXosIHIwLCAtcjENCi0gICAgbXVsIHIwLnh5eiwgcjAsIGMxLnh5eHcNCi0gICAgbW92IHIwLncsIGMwLncNCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyRF81NjVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA2NywgIDY2LCAgNTUsICAxNzIsIDEzMywgMjI3LCAxMTAsIDIwNCwgMTkzLCAxNzEsIDEzNiwgMTAyLCA2NSwgIDIzMywgMTUsDQotICAgIDk0LCAgMSwgICAwLCAgIDAsICAgMCwgICAxODgsIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAzMiwgIDEsDQotICAgIDAsICAgMCwgICAxMiwgIDIsICAgMCwgICAwLCAgIDEzNiwgMiwgICAwLCAgIDAsICAgNDgsICAzLCAgIDAsICAgMCwgICAxMzYsIDMsICAgMCwgICAwLCAgIDY1LA0KLSAgICAxMTEsIDExMCwgNTcsICAyMjQsIDAsICAgMCwgICAwLCAgIDIyNCwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAxODQsIDAsICAgMCwgICAwLA0KLSAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwNCi0gICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCA4MSwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwNCi0gICAgMTUsICAxNjAsIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsICAwLCAgIDAsICAgMCwgICA2MywgIDAsICAgMCwgICAxMjgsIDYzLCAgODEsDQotICAgIDAsICAgMCwgICA1LCAgIDEsICAgMCwgICAxNSwgIDE2MCwgOCwgICAzMywgIDQsICAgNjEsICAzMywgIDgsICAgMTMwLCA2MCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMTQ0LCAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsDQotICAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDAsDQotICAgIDAsICAgMTk2LCAxNjAsIDAsICAgMCwgICAxNzAsIDE2MCwgMTksICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwNCi0gICAgMiwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTI5LCA1LCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDE5NiwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgOCwgICAxMjgsIDAsICAgMCwgICAyNTUsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LA0KLSAgICAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDIyOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NywgIDAsICAgMCwgICAwLA0KLSAgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI0LCA2NiwgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgIDYxLCAgMzMsICA4LCAgIDEzMCwgNjAsICA4LCAgIDMzLA0KLSAgICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLA0KLSAgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLA0KLSAgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLA0KLSAgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsDQotICAgIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLA0KLSAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsDQotICAgIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLA0KLSAgICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwNCi0gICAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsDQotICAgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzF9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRfNTY1IC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkXzU2NV8xMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworLy8KKy8vIFNhbXBsZXIvUmVzb3VyY2UgdG8gRFg5IHNoYWRlciBzYW1wbGVyIG1hcHBpbmdzOgorLy8KKy8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UKKy8vIC0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tCisvLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICAKKy8vCisvLworLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToKKy8vCisgICAgcHNfMl94CisgICAgZGVmIGMwLCAzMSwgNjMsIDAuNSwgMQorICAgIGRlZiBjMSwgMC4wMzIyNTgwNjM2LCAwLjAxNTg3MzAxNjgsIDAsIDAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbWFkIHIwLnh5eiwgcjAsIGMwLnh5eHcsIGMwLnoKKyAgICBmcmMgcjEueHl6LCByMAorICAgIGFkZCByMC54eXosIHIwLCAtcjEKKyAgICBtdWwgcjAueHl6LCByMCwgYzEueHl4dworICAgIG1vdiByMC53LCBjMC53CisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNiBhcml0aG1ldGljKQorcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3NhbXBsZSByMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5eiwgcjAueHl6eCwgbCgzMS4wMDAwMDAsIDYzLjAwMDAwMCwgMzEuMDAwMDAwLCAwLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5eiwgcjAueHl6eAorbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkKK21vdiBvMC53LCBsKDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyRF81NjVbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDY3LCAgNjYsICA1NSwgIDE3MiwgMTMzLCAyMjcsIDExMCwgMjA0LCAxOTMsIDE3MSwgMTM2LCAxMDIsIDY1LCAgMjMzLCAxNSwKKyAgICA5NCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTg4LCAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMzIsICAxLAorICAgIDAsICAgMCwgICAxMiwgIDIsICAgMCwgICAwLCAgIDEzNiwgMiwgICAwLCAgIDAsICAgNDgsICAzLCAgIDAsICAgMCwgICAxMzYsIDMsICAgMCwgICAwLCAgIDY1LAorICAgIDExMSwgMTEwLCA1NywgIDIyNCwgMCwgICAwLCAgIDAsICAgMjI0LCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDE4NCwgMCwgICAwLCAgIDAsCisgICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsCisgICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAyLCAgIDI1NSwgMjU1LCA4MSwgIDAsICAgMCwgICA1LCAgIDAsICAgMCwKKyAgICAxNSwgIDE2MCwgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI0LCA2NiwgIDAsICAgMCwgICAwLCAgIDYzLCAgMCwgICAwLCAgIDEyOCwgNjMsICA4MSwKKyAgICAwLCAgIDAsICAgNSwgICAxLCAgIDAsICAgMTUsICAxNjAsIDgsICAgMzMsICA0LCAgIDYxLCAgMzMsICA4LCAgIDEzMCwgNjAsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsCisgICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwKKyAgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICA3LCAgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAwLAorICAgIDAsICAgMTk2LCAxNjAsIDAsICAgMCwgICAxNzAsIDE2MCwgMTksICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwKKyAgICAyLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICA3LCAgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjksIDUsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAxOTYsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgOCwgICAxMjgsIDAsICAgMCwgICAyNTUsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LAorICAgIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMjI4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU3LCAgMCwgICAwLCAgIDAsCisgICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwgNjYsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDMzLCAgOCwgICAxMzAsIDYwLCAgOCwgICAzMywKKyAgICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsCisgICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLAorICAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwKKyAgICAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwKKyAgICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsCisgICAgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsCisgICAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLAorICAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsCisgICAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLAorICAgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzF9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXkxMXBzLmgKaW5kZXggYzIxOWE5ZS4uNjc0ZWNiZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZGFycmF5MTFwcy5oCkBAIC0xLDkwICsxLDkwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZGFycmF5MTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tb3YgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheVtdID0gew0KLSAgICA2OCwgODgsICA2NiwgIDY3LCAgMjI1LCAxNjMsIDQ2LCAgMzksICA1NywgIDMyLCAgMjAsICA3NSwgIDEzNywgNDAsICAyMjEsIDEzLCAgMTY4LCAxNDIsIDIwMCwNCi0gICAgNDUsIDEsICAgMCwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTA4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LA0KLSAgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgNywgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODIsIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwNCi0gICAgMCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsDQotICAgIDAsICAwLCAgIDUxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsDQotICAgIDY0LCAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwNCi0gICAgMTgsIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwNCi0gICAgMCwgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLA0KLSAgICAwLCAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICAxNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwNCi0gICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbW92IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlbXSA9IHsKKyAgICA2OCwgODgsICA2NiwgIDY3LCAgMjI1LCAxNjMsIDQ2LCAgMzksICA1NywgIDMyLCAgMjAsICA3NSwgIDEzNywgNDAsICAyMjEsIDEzLCAgMTY4LCAxNDIsIDIwMCwKKyAgICA0NSwgMSwgICAwLCAgIDAsICAgMCwgICAyMzIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDEwOCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwKKyAgICAzLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LAorICAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3LCAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgyLCA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsCisgICAgNjgsIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwKKyAgICAwLCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4NCwgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA0LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgIDAsICAgNTEsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwKKyAgICA2NCwgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsCisgICAgMTgsIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwKKyAgICAwLCAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsCisgICAgMCwgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwKKyAgICAxNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsCisgICAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLAorICAgIDAsICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheV81NjVfMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheV81NjVfMTFwcy5oCmluZGV4IDg2YzQ1MGEuLjRhYzM0ODQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXlfNTY1XzExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZGFycmF5XzU2NV8xMXBzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5XzU2NSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZGFycmF5XzU2NV8xMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5XzU2NVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE1NCwgMTE4LCAxOTEsIDEwOCwgMTQ0LCA1OCwgIDEzNiwgNDAsICAzMSwgIDUwLCAgMjQxLCAxNzAsIDgwLCA1OSwgIDExMSwNCi0gICAgMTIyLCAxLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDE4OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwNCi0gICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgNzgsICA0NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI4LCAgMSwgICAwLCAgIDAsICA2NCwgIDAsDQotICAgIDAsICAgMCwgICA3MSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsDQotICAgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgIDAsICAgNCwNCi0gICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgMTYsICAxNiwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMTA0LCAwLA0KLSAgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA5NiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwNCi0gICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgMTI0LCA2NiwNCi0gICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgIDYxLCAgMzMsDQotICAgIDgsICAgMTMwLCA2MCwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgODQsICA2NSwNCi0gICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5XzU2NSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXlfNTY1XzExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittdWwgcjAueHl6LCByMC54eXp4LCBsKDMxLjAwMDAwMCwgNjMuMDAwMDAwLCAzMS4wMDAwMDAsIDAuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6LCByMC54eXp4CittdWwgbzAueHl6LCByMC54eXp4LCBsKDAuMDMyMjU4LCAwLjAxNTg3MywgMC4wMzIyNTgsIDAuMDAwMDAwKQorbW92IG8wLncsIGwoMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlfNTY1W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNTQsIDExOCwgMTkxLCAxMDgsIDE0NCwgNTgsICAxMzYsIDQwLCAgMzEsICA1MCwgIDI0MSwgMTcwLCA4MCwgNTksICAxMTEsCisgICAgMTIyLCAxLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTg4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsCisgICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyOCwgIDEsICAgMCwgICAwLCAgNjQsICAwLAorICAgIDAsICAgMCwgICA3MSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgMCwgICA0LAorICAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsIDE2LCAgMTYsCisgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMTAsCisgICAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDk2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNzAsCisgICAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgMTI0LCA2NiwKKyAgICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDMyLCAgMTYsICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgIDYxLCAgMzMsCisgICAgOCwgICAxMzAsIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsIDg0LCAgNjUsCisgICAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMywgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZGFycmF5aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXlpMTFwcy5oCmluZGV4IDI1MDBlNGYuLjg2N2M5ZmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXlpMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXlpMTFwcy5oCkBAIC0xLDk0ICsxLDk0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheWkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnosIHYxLngNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMSkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxMCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMDMsIDIwNCwgMTE1LCAyMTYsIDEyMiwgNDEsICAxMDMsIDIwMywgMjA3LCAzNSwgIDEyOSwgMTE4LCAyNTQsIDIzNSwgODQsDQotICAgIDE0OCwgMSwgICAwLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTQ0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LA0KLSAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsDQotICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksDQotICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LA0KLSAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjQsICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLA0KLSAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwNCi0gICAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5SSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXlpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56LCB2MS54Cittb3YgcjAudywgbCgwKQorbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dworbW92IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMDMsIDIwNCwgMTE1LCAyMTYsIDEyMiwgNDEsICAxMDMsIDIwMywgMjA3LCAzNSwgIDEyOSwgMTE4LCAyNTQsIDIzNSwgODQsCisgICAgMTQ4LCAxLCAgIDAsICAgMCwgICAwLCAgIDEyLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDE0NCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwKKyAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywKKyAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgNzAsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwKKyAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwKKyAgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheXVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRhcnJheXVpMTFwcy5oCmluZGV4IGIwNGUzZDUuLmFmMjdiZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkYXJyYXl1aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZGFycmF5dWkxMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5VUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheXVpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5ICh1aW50LHVpbnQsdWludCx1aW50KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56LCB2MS54DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDEpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI1MywgOTAsICAzOCwgIDU4LCAgMzIsICAxNjcsIDM1LCAgMjksICAyOSwgIDEzNCwgMTMsICAxOSwgIDI0NSwgMzgsICAxNDYsDQotICAgIDM4LCAgMSwgICAwLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTQ0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0LCAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsDQotICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheVVJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheXVpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5ICh1aW50LHVpbnQsdWludCx1aW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56LCB2MS54Cittb3YgcjAudywgbCgwKQorbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dworbW92IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMSkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjUzLCA5MCwgIDM4LCAgNTgsICAzMiwgIDE2NywgMzUsICAyOSwgIDI5LCAgMTM0LCAxMywgIDE5LCAgMjQ1LCAzOCwgIDE0NiwKKyAgICAzOCwgIDEsICAgMCwgICAwLCAgIDAsICAgMTIsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTQ0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywKKyAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNCwgIDEsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgNzAsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwKKyAgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwKKyAgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmRpMTFwcy5oCmluZGV4IDRiMGI2ZGMuLmQ0NGU3NzggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZGkxMXBzLmgKQEAgLTEsODcgKzEsODcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyREkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJESVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEwMywgNDgsICAxNzQsIDIyNiwgMzYsICAyMTgsIDE1NCwgMjQzLCAzNiwgIDEwOSwgMTc3LCA1MiwgIDg5LCAgNTksICAxNjcsDQotICAgIDI0MywgMSwgICAwLCAgIDAsICAgMCwgICAxOTYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMSwgICAwLCAgIDAsICAgNzIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LA0KLSAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsDQotICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLA0KLSAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsDQotICAgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsDQotICAgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwNCi0gICAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQjJESSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkaTExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjEueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnp3LCBsKDAsMCwwLDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyRElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEwMywgNDgsICAxNzQsIDIyNiwgMzYsICAyMTgsIDE1NCwgMjQzLCAzNiwgIDEwOSwgMTc3LCA1MiwgIDg5LCAgNTksICAxNjcsCisgICAgMjQzLCAxLCAgIDAsICAgMCwgICAwLCAgIDE5NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDcyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwKKyAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywKKyAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDAsICAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LAorICAgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwKKyAgICAwLCAgIDAsICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmR1aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjJkdWkxMXBzLmgKaW5kZXggYzkxNDJkZS4uNzkwNWYxZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMmR1aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oCkBAIC0xLDg3ICsxLDg3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAodWludCx1aW50LHVpbnQsdWludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjJEVUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMDYsIDIyNCwgMjEzLCA0OSwgIDE0OCwgMjMsICAxMzQsIDIwNCwgMjU1LCAyMDgsIDg5LCAgMjM5LCA3MiwgMTkxLCAxNDQsDQotICAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxOTYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA3MiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgOTcsDQotICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsIDQ2LCAgNTcsDQotICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsDQotICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsIDAsICAgMTcxLA0KLSAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsIDcyLCAgNjgsDQotICAgIDgyLCAgMCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgIDAsICAgMTEyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICA1MCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgIDcsICAgNTAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsIDE2LCAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA0NSwNCi0gICAgMCwgICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgODQsICAxMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IyRFVJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmR1aTExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZVVJICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkICh1aW50LHVpbnQsdWludCx1aW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjEueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnp3LCBsKDAsMCwwLDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IyRFVJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMDYsIDIyNCwgMjEzLCA0OSwgIDE0OCwgMjMsICAxMzQsIDIwNCwgMjU1LCAyMDgsIDg5LCAgMjM5LCA3MiwgMTkxLCAxNDQsCisgICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE5NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMTgwLCAwLAorICAgIDAsICAgMCwgICAxMiwgIDEsICAgMCwgICAwLCAgIDY0LCAgMSwgICAwLCAgIDAsICAgNzIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsIDEwNSwgOTksCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCA5NywKKyAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgNzIsICA2OCwKKyAgICA4MiwgIDAsICAgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgMCwgICAyLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICA1MCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgNywgICA1MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNDUsCisgICAgMCwgICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgODQsICAxMTYsCisgICAgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjNkMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2QxMXBzLmgKaW5kZXggMjFiNjRiMC4uMmYzNWNiMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2QxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2QxMXBzLmgKQEAgLTEsODQgKzEsODQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IzRCAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW1vdiBvMC54eXosIHIwLnh5engNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IzRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDY0LCAgMTQ0LCAyMDQsIDE1NiwgMTE3LCA4NCwgIDE4NSwgMjI4LCA2NSwgIDE3OSwgODAsICAyNDQsIDE0NiwgNTQsICAyMDYsDQotICAgIDExOSwgMSwgICAwLCAgIDAsICAgMCwgICAxNzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgNTIsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE0OCwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMzcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywNCi0gICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IzRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCittb3YgbzAueHl6LCByMC54eXp4Cittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDY0LCAgMTQ0LCAyMDQsIDE1NiwgMTE3LCA4NCwgIDE4NSwgMjI4LCA2NSwgIDE3OSwgODAsICAyNDQsIDE0NiwgNTQsICAyMDYsCisgICAgMTE5LCAxLCAgIDAsICAgMCwgICAwLCAgIDE3NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsCisgICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDE0OCwgMCwgICAwLCAgIDAsICAgNjQsICAwLAorICAgIDAsICAgMCwgICAzNywgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LAorICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsCisgICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IzZF81NjVfMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2RfNTY1XzExcHMuaAppbmRleCBmNmU1MzhlLi4yOWY4M2Q5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IzZF81NjVfMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjNkXzU2NV8xMXBzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IzRF81NjUgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2RfNTY1XzExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6LCByMC54eXp4DQotbXVsIG8wLnh5eiwgcjAueHl6eCwgbCgwLjAzMjI1OCwgMC4wMTU4NzMsIDAuMDMyMjU4LCAwLjAwMDAwMCkNCi1tb3YgbzAudywgbCgxLjAwMDAwMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IzRF81NjVbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA2NCwgIDIxNCwgMjEwLCAyMzMsIDEzMiwgODYsICA4NSwgIDU0LCAgMTYyLCA2MywgIDE4MCwgMTkxLCA2OCwgIDcwLCAgMTQ3LA0KLSAgICAzMiwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDEzMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsDQotICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMjgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDU3LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsDQotICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyNCwNCi0gICAgNjYsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsDQotICAgIDMzLCAgOCwgICAxMzAsIDYwLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwNCi0gICAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQjNEXzU2NSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkXzU2NV8xMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXosIHIwLnh5engsIGwoMzEuMDAwMDAwLCA2My4wMDAwMDAsIDMxLjAwMDAwMCwgMC4wMDAwMDApCityb3VuZF9uZSByMC54eXosIHIwLnh5engKK211bCBvMC54eXosIHIwLnh5engsIGwoMC4wMzIyNTgsIDAuMDE1ODczLCAwLjAzMjI1OCwgMC4wMDAwMDApCittb3YgbzAudywgbCgxLjAwMDAwMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCM0RfNTY1W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA2NCwgIDIxNCwgMjEwLCAyMzMsIDEzMiwgODYsICA4NSwgIDU0LCAgMTYyLCA2MywgIDE4MCwgMTkxLCA2OCwgIDcwLCAgMTQ3LAorICAgIDMyLCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICAxMzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMjgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNTcsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwKKyAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLAorICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI0LAorICAgIDY2LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDExNCwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwKKyAgICAzMywgIDgsICAgMTMwLCA2MCwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMzIsICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwKKyAgICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2RpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2RpMTFwcy5oCmluZGV4IGY5NzMwYjguLjkwZmQ5NzMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjNkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IzZGkxMXBzLmgKQEAgLTEsOTAgKzEsOTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0IzREkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2RpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eXosIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4DQotZnRvaSByMC54eXosIHIwLnh5engNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgbzAueHl6LCByMC54eXp4DQotbW92IG8wLncsIGwoMCkNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA5IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0IzRElbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNTQsIDU2LCAgODIsICAyMTUsIDE2NywgNTcsICAyMTEsIDU3LCAgMjM1LCAzOSwgIDQyLCA4MiwgMTY0LCAxODgsIDEwMywNCi0gICAgMTI2LCAxLCAgIDAsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAwLCAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTA4LCAyLCAgIDAsICAgMCwgICA4MiwgNjgsIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgIDAsICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAwLCAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICAwLCAgNzcsIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsIDEwNCwgOTcsICAxMDAsDQotICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsIDQ2LCAgNTcsICA1MywNCi0gICAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgIDAsICAgNywgICA3LA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNDQsIDAsICAgMCwgICAwLCAgNjQsIDAsICAgMCwgICAwLA0KLSAgICA2MSwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICA1MSwgIDUxLCAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAwLCAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAwLCAgIDcsICAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAxMjYsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAwLCAgMCwgICA1LCAgIDExNCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDQ1LCAgMCwgICAwLA0KLSAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgNzAsDQotICAgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsIDg0LCAxMTYsIDAsICAgMCwNCi0gICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCM0RJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2RpMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlSSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHl6LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4CitmdG9pIHIwLnh5eiwgcjAueHl6eAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiBvMC54eXosIHIwLnh5engKK21vdiBvMC53LCBsKDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQjNESVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTU0LCA1NiwgIDgyLCAgMjE1LCAxNjcsIDU3LCAgMjExLCA1NywgIDIzNSwgMzksICA0MiwgODIsIDE2NCwgMTg4LCAxMDMsCisgICAgMTI2LCAxLCAgIDAsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAwLCAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMDgsIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgIDAsICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgIDc3LCAxMDUsIDk5LCAgMTE0LAorICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsIDEwNCwgOTcsICAxMDAsCisgICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCA1NywgNDYsICA1NywgIDUzLAorICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgIDAsICAgMywgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgIDExOCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgIDAsICAgNywgICA3LAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsIDk1LCAgODIsICA2OSwKKyAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksIDczLCA3OCwgIDY4LCAgNjksCisgICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNDQsIDAsICAgMCwgICAwLCAgNjQsIDAsICAgMCwgICAwLAorICAgIDYxLCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDUxLCAgNTEsICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgMCwgIDMsICAgMjQyLCAzMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsIDEyNiwgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDcwLCAgMiwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsIDAsICAwLCAgIDUsICAgMTE0LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTQsIDAsICAgMCwgICA1LAorICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDQ1LCAgMCwgICAwLAorICAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgNzAsICAxMjYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMTQsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgMCwgICAwLCAgIDcwLAorICAgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgODQsIDExNiwgMCwgICAwLAorICAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IzZHVpMTFwcy5oCmluZGV4IGFmZDlhNDMuLjAxOTJhMWMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiM2R1aTExcHMuaApAQCAtMSw5MCArMSw5MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQjNEVUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2R1aTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkICh1aW50LHVpbnQsdWludCx1aW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHl6LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eA0KLWZ0b2kgcjAueHl6LCByMC54eXp4DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IG8wLnh5eiwgcjAueHl6eA0KLW1vdiBvMC53LCBsKDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCM0RVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwNiwgNzMsICAxNTMsIDIwOSwgMTExLCA0LCAgIDEwNywgMTMxLCAyMDcsIDE3MiwgNDEsIDg3LCAxODYsIDMsICAgMjM4LA0KLSAgICA0MSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjMyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgIDAsICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMDgsIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgMCwgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgIDAsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAwLCAgNzcsICAxMDUsIDk5LA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCA4MywgIDEwNCwgOTcsDQotICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgIDAsICAgNywgICA3LA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNDQsIDAsICAgMCwgICAwLCAgNjQsIDAsICAgMCwgICAwLA0KLSAgICA2MSwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAwLCAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsIDE2LCAwLCAgIDcsICAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAxMjYsIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAwLCAgMCwgICA1LCAgIDExNCwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NCwgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDQ1LCAgMCwgICAwLA0KLSAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMTI2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDExNCwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgNzAsDQotICAgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDMyLCAgMTYsICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsIDg0LCAxMTYsIDAsICAgMCwNCi0gICAgMCwgICA5LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eXosIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIHYyLnh5engKK2Z0b2kgcjAueHl6LCByMC54eXp4Cittb3YgcjAudywgbCgwKQorbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dworbW92IG8wLnh5eiwgcjAueHl6eAorbW92IG8wLncsIGwoMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCM0RVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjA2LCA3MywgIDE1MywgMjA5LCAxMTEsIDQsICAgMTA3LCAxMzEsIDIwNywgMTcyLCA0MSwgODcsIDE4NiwgMywgICAyMzgsCisgICAgNDEsICAxLCAgIDAsICAgMCwgICAwLCAgIDIzMiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAwLCAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMDgsIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgIDAsICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsIDAsICA3NywgIDEwNSwgOTksCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgNTAsIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAxMTgsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAwLCAgIDcsICAgNywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgNzgsICA2OCwgIDY5LAorICAgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgNzgsIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsIDk1LCAgODQsICA2NSwKKyAgICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjQ0LCAwLCAgIDAsICAgMCwgIDY0LCAwLCAgIDAsICAgMCwKKyAgICA2MSwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICA2OCwgIDY4LCAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgIDAsICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAxNiwgMCwgICA3LCAgIDI0MiwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDcwLCAxMjYsIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICA3MCwgIDIsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgMCwgICA3MCwgIDIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAwLCAgMCwgICA1LCAgIDExNCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDU0LCAwLCAgIDAsICAgNSwKKyAgICAxMzAsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICA0NSwgIDAsICAgMCwKKyAgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTE0LCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgIDAsICAgMCwgICA3MCwKKyAgICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAzMiwgIDE2LCAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsIDg0LCAxMTYsIDAsICAgMCwKKyAgICAwLCAgIDksICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmgKaW5kZXggOTgzODFhNS4uZmI0YjJmNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaApAQCAtMSw5OCArMSw5OCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyRCAvVCBwc180XzBfbGV2ZWxfOV8zIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8NCi0vLyBTYW1wbGVyL1Jlc291cmNlIHRvIERYOSBzaGFkZXIgc2FtcGxlciBtYXBwaW5nczoNCi0vLw0KLS8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UNCi0vLyAtLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIA0KLS8vDQotLy8NCi0vLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOg0KLS8vDQotICAgIHBzXzJfeA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1zYW1wbGUgbzAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczANCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCA2NywgIDE4NCwgMjE4LCA2NCwgIDEwLCAgMjI5LCA1NSwgIDIyOCwgNzYsICAyMTcsIDIyNSwgMjU1LCA1NywgIDE2NiwgMjM1LCAxNDAsDQotICAgIDE3NSwgMSwgICAwLCAgMCwgICAwLCAgIDE5MiwgMiwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDE2NCwgMCwNCi0gICAgMCwgICAwLCAgIDE2LCAxLCAgIDAsICAgMCwgICAxNDAsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgMTQwLCAyLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAxMDAsIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCA2MCwgIDAsICAgMCwgICAwLA0KLSAgICA0MCwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMSwgICAwLCAgIDM2LA0KLSAgICAwLCAgIDAsICAgMCwgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMTI4LCAwLCAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsDQotICAgIDAsICAgMCwgICAzLCAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwNCi0gICAgMCwgICA4LCAgIDE1LCAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDEwMCwgMCwgICAwLA0KLSAgICAwLCAgIDY0LCAgMCwgIDAsICAgMCwgICAyNSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA4OCwgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsDQotICAgIDE2LCAgMCwgICAzLCAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwNCi0gICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNjIsIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LA0KLSAgICA3MCwgIDE2MCwgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwNCi0gICAgMCwgICAwLCAgIDgzLCA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLA0KLSAgICA3NywgIDEwNSwgOTksIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLA0KLSAgICA4MywgIDEwNCwgOTcsIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLA0KLSAgICA1NywgIDQ2LCAgNTcsIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsDQotICAgIDAsICAgMCwgICAyLCAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsDQotICAgIDAsICAgODMsICA4NiwgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksDQotICAgIDgyLCAgNjgsICAwLCAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwNCi0gICAgMTcxfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyRCAvVCBwc180XzBfbGV2ZWxfOV8zIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworLy8KKy8vIFNhbXBsZXIvUmVzb3VyY2UgdG8gRFg5IHNoYWRlciBzYW1wbGVyIG1hcHBpbmdzOgorLy8KKy8vIFRhcmdldCBTYW1wbGVyIFNvdXJjZSBTYW1wbGVyICBTb3VyY2UgUmVzb3VyY2UKKy8vIC0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tCisvLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICAKKy8vCisvLworLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToKKy8vCisgICAgcHNfMl94CisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK3NhbXBsZSBvMC54eXp3LCB2MS54eXh4LCB0MC54eXp3LCBzMAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsIDY3LCAgMTg0LCAyMTgsIDY0LCAgMTAsICAyMjksIDU1LCAgMjI4LCA3NiwgIDIxNywgMjI1LCAyNTUsIDU3LCAgMTY2LCAyMzUsIDE0MCwKKyAgICAxNzUsIDEsICAgMCwgIDAsICAgMCwgICAxOTIsIDIsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAxNjQsIDAsCisgICAgMCwgICAwLCAgIDE2LCAxLCAgIDAsICAgMCwgICAxNDAsIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgMTQwLCAyLCAgIDAsICAgMCwgICA2NSwKKyAgICAxMTEsIDExMCwgNTcsIDEwMCwgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDYwLCAgMCwgICAwLCAgIDAsCisgICAgNDAsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwKKyAgICAwLCAgIDAsICAgMCwgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAxMjgsIDAsICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwKKyAgICAwLCAgIDAsICAgMywgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICA4LCAgIDE1LCAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDEwMCwgMCwgICAwLAorICAgIDAsICAgNjQsICAwLCAgMCwgICAwLCAgIDI1LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgODgsIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LAorICAgIDE2LCAgMCwgICAzLCAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LAorICAgIDAsICAgMSwgICAwLCAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNjIsIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LAorICAgIDcwLCAgMTYwLCAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsCisgICAgMCwgICAwLCAgIDgzLCA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLAorICAgIDc3LCAgMTA1LCA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsCisgICAgODMsICAxMDQsIDk3LCAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwKKyAgICA1NywgIDQ2LCAgNTcsIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsCisgICAgMCwgICAwLCAgIDIsICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsCisgICAgMCwgICA4MywgIDg2LCA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwKKyAgICA4MiwgIDY4LCAgMCwgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLAorICAgIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRfNDQ0NF8xMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRfNDQ0NF8xMXBzLmgKaW5kZXggMjIxYWFhMi4uZThmNDExNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkXzQ0NDRfMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZF80NDQ0XzExcHMuaApAQCAtMSwxMTcgKzEsMTE3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEXzQ0NDQgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZF80NDQ0XzExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6DQotLy8NCi0vLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlDQotLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0NCi0vLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICANCi0vLw0KLS8vDQotLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToNCi0vLw0KLSAgICBwc18yX3gNCi0gICAgZGVmIGMwLCAxNSwgMC41LCAwLjA2NjY2NjY3MDEsIDANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMCwgcjAsIGMwLngsIGMwLnkNCi0gICAgZnJjIHIxLCByMA0KLSAgICBhZGQgcjAsIHIwLCAtcjENCi0gICAgbXVsIHIwLCByMCwgYzAueg0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDUgYXJpdGhtZXRpYykNCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQ0KLXJvdW5kX25lIHIwLnh5encsIHIwLnh5encNCi1tdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRfNDQ0NFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4MSwgMjMwLCAyOCwgIDE2MywgMTgzLCAyMTYsIDE5LCAgMjYsICAyNTQsIDI1MywgNTMsICAyNTUsIDIwMywgNDcsICA1LA0KLSAgICAxNjksIDEsICAgMCwgICAwLCAgIDAsICAgMTMyLCAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjUyLCAwLA0KLSAgICAwLCAgIDAsICAgMjEyLCAxLCAgIDAsICAgMCwgICA4MCwgIDIsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgODAsICAzLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTg4LCAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTQ4LCAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAwLCAgIDYzLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAwLCAgIDAsICAgMCwgICAxNjAsIDAsICAgMCwNCi0gICAgODUsICAxNjAsIDE5LCAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDIsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjksIDUsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LA0KLSAgICAwLCAgIDAsICAgMjI4LCAxMjgsIDAsICAgMCwgICAxNzAsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsDQotICAgIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDIwOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MiwgIDAsDQotICAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsDQotICAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsDQotICAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LA0KLSAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsDQotICAgIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsDQotICAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsDQotICAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwNCi0gICAgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyRF80NDQ0IC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZF80NDQ0XzExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCisvLworLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6CisvLworLy8gVGFyZ2V0IFNhbXBsZXIgU291cmNlIFNhbXBsZXIgIFNvdXJjZSBSZXNvdXJjZQorLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0KKy8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIAorLy8KKy8vCisvLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOgorLy8KKyAgICBwc18yX3gKKyAgICBkZWYgYzAsIDE1LCAwLjUsIDAuMDY2NjY2NjcwMSwgMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtYWQgcjAsIHIwLCBjMC54LCBjMC55CisgICAgZnJjIHIxLCByMAorICAgIGFkZCByMCwgcjAsIC1yMQorICAgIG11bCByMCwgcjAsIGMwLnoKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA1IGFyaXRobWV0aWMpCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittdWwgcjAueHl6dywgcjAueHl6dywgbCgxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDApCityb3VuZF9uZSByMC54eXp3LCByMC54eXp3CittdWwgbzAueHl6dywgcjAueHl6dywgbCgwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NykKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTJEXzQ0NDRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE4MSwgMjMwLCAyOCwgIDE2MywgMTgzLCAyMTYsIDE5LCAgMjYsICAyNTQsIDI1MywgNTMsICAyNTUsIDIwMywgNDcsICA1LAorICAgIDE2OSwgMSwgICAwLCAgIDAsICAgMCwgICAxMzIsIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyNTIsIDAsCisgICAgMCwgICAwLCAgIDIxMiwgMSwgICAwLCAgIDAsICAgODAsICAyLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDgwLCAgMywgICAwLCAgIDAsICAgNjUsCisgICAgMTExLCAxMTAsIDU3LCAgMTg4LCAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTQ4LCAwLCAgIDAsICAgMCwKKyAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwKKyAgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU1LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMCwgICAwLAorICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAwLCAgIDYzLCAgMTM3LCAxMzYsIDEzNiwgNjEsICAwLCAgIDAsICAgMCwgICAwLCAgIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAwLCAgIDAsICAgMCwgICAxNjAsIDAsICAgMCwKKyAgICA4NSwgIDE2MCwgMTksICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMiwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTI5LCA1LCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwKKyAgICAwLCAgIDAsICAgMjI4LCAxMjgsIDAsICAgMCwgICAxNzAsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsCisgICAgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwKKyAgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLAorICAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwKKyAgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwKKyAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLAorICAgIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLAorICAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsCisgICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLAorICAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwKKyAgICAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRfNTU1MV8xMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRfNTU1MV8xMXBzLmgKaW5kZXggZWY3MzZiYy4uYzBlNmNmYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkXzU1NTFfMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZF81NTUxXzExcHMuaApAQCAtMSwxMTcgKzEsMTE3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEXzU1NTEgL1QgcHNfNF8wX2xldmVsXzlfMyAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZF81NTUxXzExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLS8vDQotLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6DQotLy8NCi0vLyBUYXJnZXQgU2FtcGxlciBTb3VyY2UgU2FtcGxlciAgU291cmNlIFJlc291cmNlDQotLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0NCi0vLyBzMCAgICAgICAgICAgICBzMCAgICAgICAgICAgICAgdDAgICAgICAgICAgICAgICANCi0vLw0KLS8vDQotLy8gTGV2ZWw5IHNoYWRlciBieXRlY29kZToNCi0vLw0KLSAgICBwc18yX3gNCi0gICAgZGVmIGMwLCAzMSwgMSwgMC41LCAwLjAzMjI1ODA2MzYNCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMCwgcjAsIGMwLnh4eHksIGMwLnoNCi0gICAgZnJjIHIxLCByMA0KLSAgICBhZGQgcjAsIHIwLCAtcjENCi0gICAgbXVsIHIwLCByMCwgYzAud3d3eQ0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDUgYXJpdGhtZXRpYykNCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMS4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLW11bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDMyMjU4LCAwLjAzMjI1OCwgMC4wMzIyNTgsIDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyRF81NTUxW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTg3LCAxMCwgIDI0NywgMjQzLCAyNTMsIDEwOCwgMTIsICAyMjgsIDE0MywgMTU0LCAyNDQsIDUyLCAgMjE2LCAxOTcsIDg2LA0KLSAgICAyNDksIDEsICAgMCwgICAwLCAgIDAsICAgMTMyLCAzLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMjUyLCAwLA0KLSAgICAwLCAgIDAsICAgMjEyLCAxLCAgIDAsICAgMCwgICA4MCwgIDIsICAgMCwgICAwLCAgIDI0OCwgMiwgICAwLCAgIDAsICAgODAsICAzLCAgIDAsICAgMCwgICA2NSwNCi0gICAgMTExLCAxMTAsIDU3LCAgMTg4LCAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTQ4LCAwLCAgIDAsICAgMCwNCi0gICAgNDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAxLCAgIDAsICAgMzYsDQotICAgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMiwgICAyNTUsIDI1NSwgODEsICAwLCAgIDAsICAgNSwgICAwLCAgIDAsDQotICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgNjMsICA4LCAgIDMzLCAgNCwgICA2MSwgIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAwLCAgIDAsICAgNjQsICAxNjAsIDAsICAgMCwNCi0gICAgMTcwLCAxNjAsIDE5LCAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDIsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjksIDUsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LA0KLSAgICAwLCAgIDAsICAgMjI4LCAxMjgsIDAsICAgMCwgICAxMjcsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsDQotICAgIDEyOCwgMjU1LCAyNTUsIDAsICAgMCwgICA4MywgIDcyLCAgNjgsICA4MiwgIDIwOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1MiwgIDAsDQotICAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsDQotICAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsDQotICAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LA0KLSAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAyNDgsDQotICAgIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsDQotICAgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsDQotICAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwNCi0gICAgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsDQotICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLA0KLSAgICA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLA0KLSAgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyRF81NTUxIC9UIHBzXzRfMF9sZXZlbF85XzMgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZF81NTUxXzExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCisvLworLy8gU2FtcGxlci9SZXNvdXJjZSB0byBEWDkgc2hhZGVyIHNhbXBsZXIgbWFwcGluZ3M6CisvLworLy8gVGFyZ2V0IFNhbXBsZXIgU291cmNlIFNhbXBsZXIgIFNvdXJjZSBSZXNvdXJjZQorLy8gLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0KKy8vIHMwICAgICAgICAgICAgIHMwICAgICAgICAgICAgICB0MCAgICAgICAgICAgICAgIAorLy8KKy8vCisvLyBMZXZlbDkgc2hhZGVyIGJ5dGVjb2RlOgorLy8KKyAgICBwc18yX3gKKyAgICBkZWYgYzAsIDMxLCAxLCAwLjUsIDAuMDMyMjU4MDYzNgorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtYWQgcjAsIHIwLCBjMC54eHh5LCBjMC56CisgICAgZnJjIHIxLCByMAorICAgIGFkZCByMCwgcjAsIC1yMQorICAgIG11bCByMCwgcjAsIGMwLnd3d3kKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA1IGFyaXRobWV0aWMpCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwCittdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDMyMjU4LCAwLjAzMjI1OCwgMC4wMzIyNTgsIDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRfNTU1MVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTg3LCAxMCwgIDI0NywgMjQzLCAyNTMsIDEwOCwgMTIsICAyMjgsIDE0MywgMTU0LCAyNDQsIDUyLCAgMjE2LCAxOTcsIDg2LAorICAgIDI0OSwgMSwgICAwLCAgIDAsICAgMCwgICAxMzIsIDMsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAyNTIsIDAsCisgICAgMCwgICAwLCAgIDIxMiwgMSwgICAwLCAgIDAsICAgODAsICAyLCAgIDAsICAgMCwgICAyNDgsIDIsICAgMCwgICAwLCAgIDgwLCAgMywgICAwLCAgIDAsICAgNjUsCisgICAgMTExLCAxMTAsIDU3LCAgMTg4LCAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMTQ4LCAwLCAgIDAsICAgMCwKKyAgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDQwLCAgMCwgICAwLCAgIDAsICAgNDAsICAwLCAgIDEsICAgMCwgICAzNiwKKyAgICAwLCAgIDAsICAgMCwgICA0MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDIsICAgMjU1LCAyNTUsIDgxLCAgMCwgICAwLCAgIDUsICAgMCwgICAwLAorICAgIDE1LCAgMTYwLCAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgNjMsICA4LCAgIDMzLCAgNCwgICA2MSwgIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAwLCAgIDAsICAgNjQsICAxNjAsIDAsICAgMCwKKyAgICAxNzAsIDE2MCwgMTksICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMiwgICAwLCAgIDAsICAgMywgICAwLAorICAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTI5LCA1LCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwKKyAgICAwLCAgIDAsICAgMjI4LCAxMjgsIDAsICAgMCwgICAxMjcsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsCisgICAgMTI4LCAyNTUsIDI1NSwgMCwgICAwLCAgIDgzLCAgNzIsICA2OCwgIDgyLCAgMjA4LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwKKyAgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLAorICAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwKKyAgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwKKyAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LAorICAgIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLAorICAgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsCisgICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLAorICAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwKKyAgICAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwKKyAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsCisgICAgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLAorICAgIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwKKyAgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsCisgICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LAorICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MX07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRhcnJheTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5MTFwcy5oCmluZGV4IDI0NDc3ZGMuLmJlNTU2NzIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5MTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5MTFwcy5oCkBAIC0xLDg2ICsxLDg2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkYXJyYXkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXV0b2YgcjAueiwgdjEueA0KLW1vdiByMC54eSwgdjIueHl4eA0KLXNhbXBsZSBvMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ4LCAxNTQsIDE4OCwgODMsICAxMjksIDk0LCAgNzIsICA5NSwgIDcxLCAgMTIwLCA2NCwgIDIwNiwgNzYsIDUyLCAgMjM0LA0KLSAgICAxNzMsIDEsICAgMCwgICAwLCAgIDAsICAgMTkyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgNjgsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksIDcwLCAgMTYwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAwLCAgIDUsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsDQotICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAwLCAgIDExOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLA0KLSAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LA0KLSAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsDQotICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTY0LCAwLCAgIDAsICAgMCwgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDQxLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA4OCwNCi0gICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgMCwgICA0LA0KLSAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAxNiwgIDE2LA0KLSAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxMDQsIDAsDQotICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMTAsDQotICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDk2LA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheTExcHMuaCBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4CitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIG8wLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNDgsIDE1NCwgMTg4LCA4MywgIDEyOSwgOTQsICA3MiwgIDk1LCAgNzEsICAxMjAsIDY0LCAgMjA2LCA3NiwgNTIsICAyMzQsCisgICAgMTczLCAxLCAgIDAsICAgMCwgICAwLCAgIDE5MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgNjgsICAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgNSwKKyAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsCisgICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxNjQsIDAsICAgMCwgICAwLCAgNjQsICAwLAorICAgIDAsICAgMCwgICA0MSwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgMCwgICA0LAorICAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsIDE2LCAgMTYsCisgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMTAsCisgICAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDk2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5XzQ0NDRfMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNDQ0NF8xMXBzLmgKaW5kZXggMTNhYmQyZC4uN2I0NmViNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNDQ0NF8xMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNDQ0NF8xMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV80NDQ0IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzQ0NDRfMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLW11bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5XzQ0NDRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA2MSwgIDE0MCwgMTQsICAxNTUsIDE0OSwgMzAsICA4NCwgIDM3LCAgMjM0LCAyMzgsIDEzOCwgMzYsICAzMSwgIDEyOCwgNzgsDQotICAgIDEyMCwgMSwgICAwLCAgIDAsICAgMCwgICAzNiwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDgsICAgMSwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNjYsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwNCi0gICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsDQotICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsDQotICAgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LA0KLSAgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsDQotICAgIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LA0KLSAgICAxMTYsIDAsICAgMCwgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV80NDQ0IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkYXJyYXlfNDQ0NF8xMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQordXRvZiByMC56LCB2MS54Cittb3YgcjAueHksIHYyLnh5eHgKK3NhbXBsZSByMC54eXp3LCByMC54eXp4LCB0MC54eXp3LCBzMAorbXVsIHIwLnh5encsIHIwLnh5encsIGwoMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCwgMTUuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcpCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5XzQ0NDRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDYxLCAgMTQwLCAxNCwgIDE1NSwgMTQ5LCAzMCwgIDg0LCAgMzcsICAyMzQsIDIzOCwgMTM4LCAzNiwgIDMxLCAgMTI4LCA3OCwKKyAgICAxMjAsIDEsICAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLAorICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTY4LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgOCwgICAxLCAgIDAsICAgMCwgICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsCisgICAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwKKyAgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLAorICAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwKKyAgICAwLCAgIDAsICAgMTEyLCA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LAorICAgIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LAorICAgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5XzU1NTFfMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNTU1MV8xMXBzLmgKaW5kZXggY2ZmMTdlZC4uYzdlZDNlYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNTU1MV8xMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlfNTU1MV8xMXBzLmgKQEAgLTEsOTQgKzEsOTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV81NTUxIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzU1NTFfMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgNCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi11dG9mIHIwLnosIHYxLngNCi1tb3YgcjAueHksIHYyLnh5eHgNCi1zYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczANCi1tdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlfNTU1MVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwOSwgMTI0LCAyNywgIDQ1LCAgMjM5LCAxMjAsIDEwMywgNiwgICAyMjEsIDEzMywgMTU3LCA3MSwgIDc5LCA3MywgIDIzNiwNCi0gICAgMTM4LCAxLCAgIDAsICAgMCwgICAwLCAgIDM2LCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDE2OCwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDMsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgMCwgICA1LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwNCi0gICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgNzgsICA0NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDgsICAgMSwgICAwLCAgIDAsICA2NCwgIDAsDQotICAgIDAsICAgMCwgICA2NiwgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgODgsDQotICAgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDEwMCwgOCwgIDAsICAgNCwNCi0gICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgMTYsICAxNiwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMTA0LCAwLA0KLSAgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA5NiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwNCi0gICAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgMjQ4LCA2NSwNCi0gICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgIDYxLCAgOCwNCi0gICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgNjUsICA4NCwNCi0gICAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlfNTU1MSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzU1NTFfMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3V0b2YgcjAueiwgdjEueAorbW92IHIwLnh5LCB2Mi54eXh4CitzYW1wbGUgcjAueHl6dywgcjAueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXp3LCByMC54eXp3LCBsKDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDEuMDAwMDAwKQorcm91bmRfbmUgcjAueHl6dywgcjAueHl6dworbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wMzIyNTgsIDAuMDMyMjU4LCAwLjAzMjI1OCwgMS4wMDAwMDApCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5XzU1NTFbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIwOSwgMTI0LCAyNywgIDQ1LCAgMjM5LCAxMjAsIDEwMywgNiwgICAyMjEsIDEzMywgMTU3LCA3MSwgIDc5LCA3MywgIDIzNiwKKyAgICAxMzgsIDEsICAgMCwgICAwLCAgIDAsICAgMzYsICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICAxNjgsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgNzAsICAxNjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgMCwgICA1LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICA3NywgIDEwNSwKKyAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAgMCwKKyAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgIDAsICAgMTE4LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgIDAsICAgMCwKKyAgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCA4NiwgIDk1LAorICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksIDczLCAgNzgsCisgICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgNzgsICA0NCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwKKyAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDgsICAgMSwgICAwLCAgIDAsICA2NCwgIDAsCisgICAgMCwgICAwLCAgIDY2LCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA4OCwKKyAgICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICAxMDAsIDgsICAwLCAgIDQsCisgICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgMTYsICAxNiwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxMDQsIDAsCisgICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAxMCwKKyAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgOTYsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwKKyAgICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAyNDgsIDY1LAorICAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDEyOCwgNjMsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDgsICAgMzMsICA0LCAgNjEsICA4LAorICAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsIDY1LCAgODQsCisgICAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXlpMTFwcy5oCmluZGV4IDY2ZDI3YWIuLmMxZDQ1YTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRhcnJheWkxMXBzLmgKQEAgLTEsODkgKzEsODkgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheUkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkYXJyYXlpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlSSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChzaW50LHNpbnQsc2ludCxzaW50KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56LCB2MS54DQotbW92IHIwLncsIGwoMCkNCi1sZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlJW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNSwgICAxODksIDEzLCAgMjQxLCAxMTksIDE1NiwgMSwgICAxOTcsIDY1LCAgMjAzLCAyMzcsIDIsICAgNjQsICAxNTIsIDE4NiwNCi0gICAgMjA2LCAxLCAgIDAsICAgMCwgICAwLCAgIDIyOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwNCi0gICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsDQotICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsDQotICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LA0KLSAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNDAsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsDQotICAgIDYwLCAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsDQotICAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LA0KLSAgICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLA0KLSAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheUkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheWkxMXBzLmggUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjIueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnosIHYxLngKK21vdiByMC53LCBsKDApCitsZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyREFycmF5SVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNSwgICAxODksIDEzLCAgMjQxLCAxMTksIDE1NiwgMSwgICAxOTcsIDY1LCAgMjAzLCAyMzcsIDIsICAgNjQsICAxNTIsIDE4NiwKKyAgICAyMDYsIDEsICAgMCwgICAwLCAgIDAsICAgMjI4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTgwLCAwLAorICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsCisgICAgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLAorICAgIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLAorICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwKKyAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwKKyAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsCisgICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0MCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICA2MCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUxLCAgNTEsICAwLAorICAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LAorICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXl1aTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGFycmF5dWkxMXBzLmgKaW5kZXggODRkZmI2OS4uYTFiMDUwYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkYXJyYXl1aTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRhcnJheXVpMTFwcy5oCkBAIC0xLDg5ICsxLDg5IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheXVpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlVUkgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5ICh1aW50LHVpbnQsdWludCx1aW50KSB0MA0KLWRjbF9pbnB1dF9wc19zaXYgY29uc3RhbnQgdjEueCwgcmVuZGVydGFyZ2V0X2FycmF5X2luZGV4DQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56LCB2MS54DQotbW92IHIwLncsIGwoMCkNCi1sZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDUsICAgMTM4LCAxMDIsIDIyMiwgOTMsICAxNjgsIDE3OCwgMTIwLCAxMTcsIDI0MCwgMTc3LCAxNTIsIDIwOSwgMTcsICAyMDUsDQotICAgIDE1NSwgMSwgICAwLCAgIDAsICAgMCwgICAyMjgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsDQotICAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDExMiwgMSwgICAwLCAgIDAsICAgMTA0LCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgMCwgICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LA0KLSAgICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywNCi0gICAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksDQotICAgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0MCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgNjAsICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsDQotICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyREFycmF5VUkgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheXVpMTFwcy5oIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5ICh1aW50LHVpbnQsdWludCx1aW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYyLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56LCB2MS54Cittb3YgcjAudywgbCgwKQorbGQgbzAueHl6dywgcjAueHl6dywgdDAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheVVJW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICA1LCAgIDEzOCwgMTAyLCAyMjIsIDkzLCAgMTY4LCAxNzgsIDEyMCwgMTE3LCAyNDAsIDE3NywgMTUyLCAyMDksIDE3LCAgMjA1LAorICAgIDE1NSwgMSwgICAwLCAgIDAsICAgMCwgICAyMjgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICAxMDQsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywKKyAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwKKyAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwKKyAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLAorICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsCisgICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0MCwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICA2MCwgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLAorICAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LAorICAgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkaTExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmgKaW5kZXggYzQ1ODUwNy4uODM0N2YyMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkaTExcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRpMTFwcy5oCkBAIC0xLDgzICsxLDgzIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTJESSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRpMTFwcy5oIFBhc3N0aHJvdWdoMkQxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgbzAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyRElbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5NSwgIDI0NiwgMjA2LCA1LCAgIDY1LCAgMjQyLCA3MywgIDE5NywgNSwgICA2NCwgMTcyLCAxODYsIDI1MywgMjcsICA4NywNCi0gICAgMTk1LCAxLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgMCwgICAwLCAgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDMyLCAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgMCwgICA3NywgIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLA0KLSAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCA1MCwgIDU3LCAgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwNCi0gICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LA0KLSAgICA4MiwgIDIxNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDg4LCAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgNTAsICAxNiwgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgMCwgICAwLCAgIDUsICAgNTAsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsDQotICAgIDAsICAgMCwgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgNjUsICA4NCwgIDExNiwgMCwgICAwLA0KLSAgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkaTExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjEueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnp3LCBsKDAsMCwwLDApCitsZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEyRElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDk1LCAgMjQ2LCAyMDYsIDUsICAgNjUsICAyNDIsIDczLCAgMTk3LCA1LCAgIDY0LCAxNzIsIDE4NiwgMjUzLCAyNywgIDg3LAorICAgIDE5NSwgMSwgICAwLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDMyLCAgMiwgICAwLCAgIDAsICA4MiwgIDY4LCAgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwKKyAgICAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwKKyAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCA1MCwgIDU3LCAgNDYsICA1NywgIDUzLAorICAgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDIxNiwgMCwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICAwLCAgIDg4LCAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAxMDQsIDAsICAgMCwgICAyLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAwLCAgIDAsICAgNSwgICA1MCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNTYsICAwLCAgIDAsICAgNywgICA1MCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsCisgICAgMCwgICAwLCAgIDcsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsIDY1LCAgODQsICAxMTYsIDAsICAgMCwKKyAgICAwLCAgIDcsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRtczExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZG1zMTFwcy5oCmluZGV4IGRjYTk4ZDguLjU2ZDRjNjMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZG1zMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZG1zMTFwcy5oCkBAIC0xLDgwICsxLDgwIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgNi4zLjk2MDAuMTYzODQNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlRl9NUyAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAyZE1TICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICANCi0vLyBURVhDT1JEICAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgICBmbG9hdCAgIHh5ICANCi0vLyBTVl9TQU1QTEVJTkRFWCAgICAgICAgICAgMCAgIHggICAgICAgICAgIDIgICBTQU1QTEUgICAgdWludCAgIHggICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dw0KLS8vDQotLy8gUGl4ZWwgU2hhZGVyIHJ1bnMgYXQgc2FtcGxlIGZyZXF1ZW5jeQ0KLS8vDQotcHNfNF8xDQotZGNsX2dsb2JhbEZsYWdzIHJlZmFjdG9yaW5nQWxsb3dlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9pbnB1dF9wc19zZ3YgdjIueCwgc2FtcGxlSW5kZXgNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLWZ0b3UgcjAueHksIHYxLnh5eHgNCi1tb3YgcjAuencsIGwoMCwwLDAsMCkNCi1sZG1zIG8wLnh5encsIHIwLnh5encsIHQwLnh5encsIHYyLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRNU1tdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI0LCAgMTg1LCA2NCwgIDIyNCwgMjE2LCAxOTIsIDEwNywgODQsICAxNDAsIDIwOCwgNDYsIDIxMCwgNzUsICAyMCwgIDEsDQotICAgIDIwMiwgMSwgICAwLCAgIDAsICAgMCwgICAxNDgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgMCwgICAwLCAgIDE4NCwgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAyNCwgIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgIDY5LCAgNzAsICAxMjQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcyLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgNzcsICA4MywgIDAsICAgNzcsDQotICAgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgODMsICA3NiwgIDMyLCAgODMsDQotICAgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgNTQsICA0NiwgIDUxLCAgNDYsDQotICAgIDU3LCAgNTQsICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgNzEsICA3OCwgIDExNiwgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgIDkyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAzLCAgIDMsICAgMCwNCi0gICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIDc5LCAgNzgsICAwLCAgIDg0LA0KLSAgICA2OSwgIDg4LCAgNjcsICA3OSwgIDgyLCAgNjgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgzLCAgNjUsICA3NywgIDgwLCAgNzYsIDY5LCAgNzMsICA3OCwgIDY4LA0KLSAgICA2OSwgIDg4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgOCwgICAwLCAgIDAsDQotICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAwLCAgIDE3MSwgMTcxLCA4MywNCi0gICAgNzIsICA2OCwgIDgyLCAgMTY4LCAwLCAgIDAsICAgMCwgICA2NSwgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAwLCAgIDAsICAxMDYsIDgsICAgMCwgICAxLA0KLSAgICA4OCwgIDMyLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgIDAsICAgOTgsICAxNiwgIDAsDQotICAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDk5LCAgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgMTYsICAwLCAgIDIsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAxMDQsDQotICAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgMTQsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgNi4zLjk2MDAuMTYzODQKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVGX01TICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgIDJkTVMgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSAgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgICBmbG9hdCAgICAgICAKKy8vIFRFWENPUkQgICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgIGZsb2F0ICAgeHkgIAorLy8gU1ZfU0FNUExFSU5ERVggICAgICAgICAgIDAgICB4ICAgICAgICAgICAyICAgU0FNUExFICAgIHVpbnQgICB4ICAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlICBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIGZsb2F0ICAgeHl6dworLy8KKy8vIFBpeGVsIFNoYWRlciBydW5zIGF0IHNhbXBsZSBmcmVxdWVuY3kKKy8vCitwc180XzEKK2RjbF9nbG9iYWxGbGFncyByZWZhY3RvcmluZ0FsbG93ZWQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfaW5wdXRfcHNfc2d2IHYyLngsIHNhbXBsZUluZGV4CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitmdG91IHIwLnh5LCB2MS54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkbXMgbzAueHl6dywgcjAueHl6dywgdDAueHl6dywgdjIueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRNU1tdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQsICAxODUsIDY0LCAgMjI0LCAyMTYsIDE5MiwgMTA3LCA4NCwgIDE0MCwgMjA4LCA0NiwgMjEwLCA3NSwgIDIwLCAgMSwKKyAgICAyMDIsIDEsICAgMCwgICAwLCAgIDAsICAgMTQ4LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgIDAsICAgMCwgICAxODQsIDAsCisgICAgMCwgICAwLCAgIDUyLCAgMSwgICAwLCAgIDAsICAgMTA0LCAxLCAgIDAsICAgMCwgICAyNCwgIDIsICAgMCwgICAwLCAgIDgyLCA2OCwgIDY5LCAgNzAsICAxMjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgIDAsICAgMCwgICAwLAorICAgIDEsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA3MiwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDk1LCA3NywgIDgzLCAgMCwgICA3NywKKyAgICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsIDgzLCAgNzYsICAzMiwgIDgzLAorICAgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgNTQsICA0NiwgIDUxLCAgNDYsCisgICAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCA3MSwgIDc4LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgIDkyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDMsICAgMywgICAwLAorICAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsIDc5LCAgNzgsICAwLCAgIDg0LAorICAgIDY5LCAgODgsICA2NywgIDc5LCAgODIsICA2OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODMsICA2NSwgIDc3LCAgODAsICA3NiwgNjksICA3MywgIDc4LCAgNjgsCisgICAgNjksICA4OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDgsICAgMCwgICAwLAorICAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsIDAsICAgMTcxLCAxNzEsIDgzLAorICAgIDcyLCAgNjgsICA4MiwgIDE2OCwgMCwgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMCwgICAwLCAgMTA2LCA4LCAgIDAsICAgMSwKKyAgICA4OCwgIDMyLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgIDAsICAgOTgsICAxNiwgIDAsCisgICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTksICA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAxNiwgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMTA0LAorICAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgMTQsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgIDIsICAgMCwgICAwLCAgIDAsCisgICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZHVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmgKaW5kZXggYmRhNThlYS4uZTI2ZGY3OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmgKQEAgLTEsODMgKzEsODMgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBMkRVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCBQYXNzdGhyb3VnaDJEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgdWludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56dywgbCgwLDAsMCwwKQ0KLWxkIG8wLnh5encsIHIwLnh5encsIHQwLnh5encNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRVSVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE1OSwgMTkyLCAxNjQsIDEyOSwgNDQsICAyOCwgIDE1MCwgMjAxLCAyNSwgIDIwMCwgNzIsICAxNjgsIDc2LCAgMzcsICA5MywNCi0gICAgMjQ2LCAxLCAgIDAsICAgMCwgICAwLCAgIDE1NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICAzMiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzAsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICAwLCAgIDc3LCAgMTA1LCA5OSwNCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsDQotICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LA0KLSAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLA0KLSAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsDQotICAgIDgyLCAgMjE2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsDQotICAgIDAsICAgMCwgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsDQotICAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEyRFVJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmggUGFzc3Rocm91Z2gyRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgKK2Z0b2kgcjAueHksIHIwLnh5eHgKK21vdiByMC56dywgbCgwLDAsMCwwKQorbGQgbzAueHl6dywgcjAueHl6dywgdDAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBMkRVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTU5LCAxOTIsIDE2NCwgMTI5LCA0NCwgIDI4LCAgMTUwLCAyMDEsIDI1LCAgMjAwLCA3MiwgIDE2OCwgNzYsICAzNywgIDkzLAorICAgIDI0NiwgMSwgICAwLCAgIDAsICAgMCwgICAxNTYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICAzMiwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LAorICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LAorICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwKKyAgICAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LAorICAgIDgyLCAgMjE2LCAwLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsCisgICAgMCwgICAwLCAgIDcsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLAorICAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZDExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZDExcHMuaAppbmRleCA4NTE3ODdhLi4xOTY1NzAwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhM2QxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkMTFwcy5oCkBAIC0xLDc4ICsxLDc4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTNEIC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1zYW1wbGUgbzAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDksIDIxOCwgMTg3LCAyMywgIDE1MCwgNjEsICA5LCAgIDEwNSwgMTIyLCAxOTksIDExMCwgMjYsICAyOSwgOTcsICAyMDcsDQotICAgIDExMiwgMSwgICAwLCAgIDAsICAgMCwgICAxMjgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDIyMCwgMCwNCi0gICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICA0LCAgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgMCwgICAwLA0KLSAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgIDAsICAgMTE4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAwLCAgIDAsDQotICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsDQotICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksIDczLCAgNzgsDQotICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgODYsICA5NSwNCi0gICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxMDAsIDAsICAgMCwgICAwLCAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMjUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDg4LA0KLSAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDYyLA0KLSAgICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEzRCAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZDExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLyBUZXh0dXJlRiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworc2FtcGxlIG8wLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEzRFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjQ5LCAyMTgsIDE4NywgMjMsICAxNTAsIDYxLCAgOSwgICAxMDUsIDEyMiwgMTk5LCAxMTAsIDI2LCAgMjksIDk3LCAgMjA3LAorICAgIDExMiwgMSwgICAwLCAgIDAsICAgMCwgICAxMjgsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgIDIyMCwgMCwKKyAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDQsICAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCA3MCwgIDE2MCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgMCwgICAwLAorICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICAxMTgsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsIDg2LCAgOTUsCisgICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgNzMsICA3OCwKKyAgICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCA4NiwgIDk1LAorICAgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTAwLCAwLCAgIDAsICAgMCwgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMjUsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDg4LAorICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsIDAsICAgMywKKyAgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICA2OSwgIDAsICAgMCwgICA5LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgMiwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNjIsCisgICAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhM2RfNDQ0NF8xMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhM2RfNDQ0NF8xMXBzLmgKaW5kZXggNjFiNmQ1OS4uYTE5YWI4ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkXzQ0NDRfMTFwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZF80NDQ0XzExcHMuaApAQCAtMSw4OCArMSw4OCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEzRF80NDQ0IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZF80NDQ0XzExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLXNhbXBsZSByMC54eXp3LCB2Mi54eXp4LCB0MC54eXp3LCBzMA0KLW11bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkNCi1yb3VuZF9uZSByMC54eXp3LCByMC54eXp3DQotbXVsIG8wLnh5encsIHIwLnh5encsIGwoMC4wNjY2NjcsIDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcpDQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTNEXzQ0NDRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAzNCwgIDEyMiwgMTY3LCA2LCAgIDE2MSwgMjAwLCA0NSwgIDI3LCAgMTU1LCAyMDUsIDIwLCAgOTQsICAxODgsIDE4MiwgNDYsDQotICAgIDExNCwgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsDQotICAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE1MiwgMSwgICAwLCAgIDAsICAgMTEyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE2MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICAwLCAgIDc3LCAgMTA1LA0KLSAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsDQotICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LA0KLSAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMTgsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwNCi0gICAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwOCwgMCwgICAwLCAgIDAsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwNCi0gICAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywNCi0gICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLA0KLSAgICA2NSwgIDAsICAgMCwgICAxMTIsIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICA2NCwgIDAsICAgMCwgICA1LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDEwLCAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwNCi0gICAgMTM3LCAxMzYsIDEzNiwgNjEsICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsDQotICAgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTNEXzQ0NDQgL1QgcHNfNF8wIC9GaAorLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RfNDQ0NF8xMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK211bCByMC54eXp3LCByMC54eXp3LCBsKDE1LjAwMDAwMCwgMTUuMDAwMDAwLCAxNS4wMDAwMDAsIDE1LjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDY2NjY3LCAwLjA2NjY2NywgMC4wNjY2NjcsIDAuMDY2NjY3KQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBM0RfNDQ0NFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMzQsICAxMjIsIDE2NywgNiwgICAxNjEsIDIwMCwgNDUsICAyNywgIDE1NSwgMjA1LCAyMCwgIDk0LCAgMTg4LCAxODIsIDQ2LAorICAgIDExNCwgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICAxMTIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwKKyAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLAorICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLAorICAgIDY1LCAgMCwgICAwLCAgIDExMiwgNjUsICAwLCAgIDAsICAgMTEyLCA2NSwgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAxMzcsIDEzNiwgMTM2LCA2MSwKKyAgICAxMzcsIDEzNiwgMTM2LCA2MSwgIDEzNywgMTM2LCAxMzYsIDYxLCAgMTM3LCAxMzYsIDEzNiwgNjEsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwKKyAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZF81NTUxXzExcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZF81NTUxXzExcHMuaAppbmRleCA5NmI2NWU0Li5iMDQ4YjU3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhM2RfNTU1MV8xMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkXzU1NTFfMTFwcy5oCkBAIC0xLDg4ICsxLDg4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Bhc3N0aHJvdWdoUkdCQTNEXzU1NTEgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkXzU1NTFfMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwDQotbXVsIHIwLnh5encsIHIwLnh5encsIGwoMzEuMDAwMDAwLCAzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMS4wMDAwMDApDQotcm91bmRfbmUgcjAueHl6dywgcjAueHl6dw0KLW11bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDMyMjU4LCAwLjAzMjI1OCwgMC4wMzIyNTgsIDEuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEzRF81NTUxW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ1LCA5NiwgIDEwNCwgNTEsICAxOTUsIDIxOCwgMjM2LCAxNjUsIDU1LCAgMTg2LCAxMiwgIDIwNiwgMTU1LCAxMCwgIDkwLA0KLSAgICAyNSwgIDEsICAgMCwgICAwLCAgIDAsICAgMjM2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMjIwLCAwLA0KLSAgICAwLCAgIDAsICAgMTAwLCAxLCAgIDAsICAgMCwgICAxNTIsIDEsICAgMCwgICAwLCAgIDExMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAxMDksIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsDQotICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsDQotICAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgMCwgICA3NywgIDEwNSwNCi0gICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LA0KLSAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwNCi0gICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwNCi0gICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTE4LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsDQotICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwNCi0gICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwNCi0gICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsDQotICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAyNDgsIDY1LCAgMCwgICAwLCAgIDI0OCwNCi0gICAgNjUsICAwLCAgIDAsICAgMjQ4LCA2NSwgIDAsICAgMCwgICAxMjgsIDYzLCAgNjQsICAwLCAgIDAsICAgNSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgOCwgICAzMywgIDQsICAgNjEsDQotICAgIDgsICAgMzMsICA0LCAgIDYxLCAgOCwgICAzMywgIDQsICAgNjEsICAwLCAgIDAsICAgMTI4LCA2MywgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LA0KLSAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEzRF81NTUxIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkXzU1NTFfMTFwcy5oIFBhc3N0aHJvdWdoM0QxMS5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorc2FtcGxlIHIwLnh5encsIHYyLnh5engsIHQwLnh5encsIHMwCittdWwgcjAueHl6dywgcjAueHl6dywgbCgzMS4wMDAwMDAsIDMxLjAwMDAwMCwgMzEuMDAwMDAwLCAxLjAwMDAwMCkKK3JvdW5kX25lIHIwLnh5encsIHIwLnh5encKK211bCBvMC54eXp3LCByMC54eXp3LCBsKDAuMDMyMjU4LCAwLjAzMjI1OCwgMC4wMzIyNTgsIDEuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBM0RfNTU1MVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTQ1LCA5NiwgIDEwNCwgNTEsICAxOTUsIDIxOCwgMjM2LCAxNjUsIDU1LCAgMTg2LCAxMiwgIDIwNiwgMTU1LCAxMCwgIDkwLAorICAgIDI1LCAgMSwgICAwLCAgIDAsICAgMCwgICAyMzYsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMjAsIDAsCisgICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTUyLCAxLCAgIDAsICAgMCwgICAxMTIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTYwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwOSwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLCAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsCisgICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDExOCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LAorICAgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LAorICAgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsCisgICAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDgsIDAsICAgMCwgICAwLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwKKyAgICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLAorICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMjQ4LAorICAgIDY1LCAgMCwgICAwLCAgIDI0OCwgNjUsICAwLCAgIDAsICAgMTI4LCA2MywgIDY0LCAgMCwgICAwLCAgIDUsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICA4LCAgIDMzLCAgNCwgICA2MSwKKyAgICA4LCAgIDMzLCAgNCwgICA2MSwgIDgsICAgMzMsICA0LCAgIDYxLCAgMCwgICAwLCAgIDEyOCwgNjMsICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwKKyAgICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZGkxMXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhM2RpMTFwcy5oCmluZGV4IDU4ZmIzZTkuLjNkOTE4MGUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZGkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkaTExcHMuaApAQCAtMSw4NiArMSw4NiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEzREkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkaTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVJICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgc2ludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHl6LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eA0KLWZ0b2kgcjAueHl6LCByMC54eXp4DQotbW92IHIwLncsIGwoMCkNCi1sZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTNESVtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExNCwgMjA5LCAyMTksIDEyMSwgMjExLCAxMDUsIDI0LCAgODMsICA5OSwgIDU5LCAgMjMxLCA3NiwgMTQ1LCA3OCwgIDE0MiwNCi0gICAgMzksICAxLCAgIDAsICAgMCwgICAwLCAgIDE5MiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgIDAsICAgMTgwLCAwLA0KLSAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDY4LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDEyMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsDQotICAgIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIDk3LCAgMTAwLA0KLSAgICAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgNDYsICA1NywgIDUzLA0KLSAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgMCwgICAzLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTE4LCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAwLCAgIDcsICAgNywNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsIDk1LCAgODIsICA2OSwNCi0gICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsIDc4LCAgNjgsICA2OSwNCi0gICAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsIDQ0LCAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCA5NSwgIDg0LCAgNjUsDQotICAgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMDQsIDAsICAgMCwgICAwLCAgIDY0LCAwLCAgIDAsICAgMCwNCi0gICAgNTEsICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDUxLCAgNTEsICAwLA0KLSAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgMywgICAyNDIsIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgMCwgICA3LCAgIDI0MiwNCi0gICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAyLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwgIDIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAwLCAgIDUsICAgMTE0LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgMCwgICAwLCAgIDUsDQotICAgIDEzMCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA0NSwgIDAsICAgMCwNCi0gICAgNywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgNzAsICAxMjYsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAwLCAgIDAsICAgNywNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBM0RJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkaTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbAorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3CisvLworcHNfNF8wCitkY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5eiwgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eAorZnRvaSByMC54eXosIHIwLnh5engKK21vdiByMC53LCBsKDApCitsZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19QYXNzdGhyb3VnaFJHQkEzRElbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDExNCwgMjA5LCAyMTksIDEyMSwgMjExLCAxMDUsIDI0LCAgODMsICA5OSwgIDU5LCAgMjMxLCA3NiwgMTQ1LCA3OCwgIDE0MiwKKyAgICAzOSwgIDEsICAgMCwgICAwLCAgIDAsICAgMTkyLCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgMCwgICAxODAsIDAsCisgICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICA2OCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDAsICAgNzcsIDEwNSwgOTksICAxMTQsCisgICAgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgOTcsICAxMDAsCisgICAgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsIDQ2LCAgNTcsICA1MywKKyAgICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTE4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgIDAsICAgNywgICA3LAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsIDc4LCAgNjgsICA2OSwKKyAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCA5NSwgIDg0LCAgNjUsCisgICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwNCwgMCwgICAwLCAgIDAsICAgNjQsIDAsICAgMCwgICAwLAorICAgIDUxLCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA1MSwgIDUxLCAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAxMjYsIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgMCwgICA1LCAgIDExNCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgMCwgICAwLCAgIDUsCisgICAgMTMwLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDQ1LCAgMCwgICAwLAorICAgIDcsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAwLCAgIDAsICAgNywKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEzZHVpMTFwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmgKaW5kZXggMDIyYmI2OS4uNTllMTU3NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmgKQEAgLTEsODYgKzEsODYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUGFzc3Rocm91Z2hSR0JBM0RVSSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2R1aTExcHMuaCBQYXNzdGhyb3VnaDNEMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkICh1aW50LHVpbnQsdWludCx1aW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHl6LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eA0KLWZ0b2kgcjAueHl6LCByMC54eXp4DQotbW92IHIwLncsIGwoMCkNCi1sZCBvMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgNyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Bhc3N0aHJvdWdoUkdCQTNEVUlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMTcsIDM0LCAgMTIzLCAxNDQsIDEzOSwgNTAsICAxMDcsIDgsICAgMTk5LCA1OCwgIDE4OCwgMzcsIDI2LCAgNjIsICAxMDgsDQotICAgIDIxLCAgMSwgICAwLCAgIDAsICAgMCwgICAxOTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDYwLCAgMSwgICAwLCAgIDAsICAgMTEyLCAxLCAgIDAsICAgMCwgICA2OCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsIDY5LCAgNzAsICAxMjAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDAsICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwgOTcsDQotICAgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCA1NywgIDQ2LCAgNTcsDQotICAgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsICAwLCAgIDMsICAgMCwNCi0gICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDAsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAxMTgsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgIDAsICAgNywgICA3LA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgOTUsICA4MiwgIDY5LA0KLSAgICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgNzgsICA2OCwgIDY5LA0KLSAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgNDQsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsIDk1LCAgODQsICA2NSwNCi0gICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwNCwgMCwgICAwLCAgIDAsICAgNjQsIDAsICAgMCwgICAwLA0KLSAgICA1MSwgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNjgsICA2OCwgIDAsDQotICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAwLCAgIDcsICAgMjQyLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgMTI2LCAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA3MCwgIDIsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgIDAsICAgNSwgICAxMTQsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAwLCAgIDAsICAgNSwNCi0gICAgMTMwLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDQ1LCAgMCwgICAwLA0KLSAgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICA3MCwgIDEyNiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgIDAsICAgMCwgICA3LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLA0KLSAgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19QYXNzdGhyb3VnaFJHQkEzRFVJIC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmggUGFzc3Rocm91Z2gzRDExLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFRleHR1cmVVSSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eXosIHIwLnh5engKK211bCByMC54eXosIHIwLnh5engsIHYyLnh5engKK2Z0b2kgcjAueHl6LCByMC54eXp4Cittb3YgcjAudywgbCgwKQorbGQgbzAueHl6dywgcjAueHl6dywgdDAueHl6dworcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUGFzc3Rocm91Z2hSR0JBM0RVSVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTE3LCAzNCwgIDEyMywgMTQ0LCAxMzksIDUwLCAgMTA3LCA4LCAgIDE5OSwgNTgsICAxODgsIDM3LCAyNiwgIDYyLCAgMTA4LAorICAgIDIxLCAgMSwgICAwLCAgIDAsICAgMCwgICAxOTIsIDIsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgNjAsICAxLCAgIDAsICAgMCwgICAxMTIsIDEsICAgMCwgICAwLCAgIDY4LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgNjksICA3MCwgIDEyMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcwLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICAwLCAgNzcsICAxMDUsIDk5LAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCA4MywgIDEwNCwgOTcsCisgICAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsIDU3LCAgNDYsICA1NywKKyAgICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLCAgMCwgICAzLCAgIDAsCisgICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgMTE4LCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgIDAsICAgNywgICA3LAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCA5NSwgIDgyLCAgNjksCisgICAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsIDc4LCAgNjgsICA2OSwKKyAgICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgNDQsICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCA5NSwgIDg0LCAgNjUsCisgICAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIwNCwgMCwgICAwLCAgIDAsICAgNjQsIDAsICAgMCwgICAwLAorICAgIDUxLCAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICA2OCwgIDY4LCAgMCwKKyAgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAwLCAgIDcsICAgMjQyLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAxMjYsIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgNzAsICAyLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgMCwgICA1LCAgIDExNCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgMCwgICAwLCAgIDUsCisgICAgMTMwLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDQ1LCAgMCwgICAwLAorICAgIDcsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDcwLCAgMTI2LAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAwLCAgIDAsICAgNywKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAwLCAgIDAsICAgMCwKKyAgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlY29sb3IyZHBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZWNvbG9yMmRwcy5oCmluZGV4IGQ3NzQ3YTYuLmIyMTRhMjMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlY29sb3IyZHBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVjb2xvcjJkcHMuaApAQCAtMSwxMDcgKzEsMTA3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Jlc29sdmVDb2xvcjJEIC9UIHBzXzRfMSAvRmggY29tcGlsZWRccmVzb2x2ZWNvbG9yMmRwcy5oDQotLy8gICAgUmVzb2x2ZUNvbG9yLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlRl9NUyAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAyZE1TICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT1JEICAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzENCi1kY2xfZ2xvYmFsRmxhZ3MgcmVmYWN0b3JpbmdBbGxvd2VkDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZG1zKDApIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDQNCi1yZXNpbmZvX3VpbnQgcjAueHksIGwoMCksIHQwLnh5encNCi1zYW1wbGVpbmZvX3VpbnQgcjAueiwgdDAueA0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG91IHIxLnh5LCByMC54eXh4DQotbW92IHIxLnp3LCBsKDAsMCwwLDApDQotbW92IHIyLnh5encsIGwoMCwwLDAsMCkNCi1tb3YgcjAueCwgbCgwKQ0KLWxvb3AgDQotICB1Z2UgcjAueSwgcjAueCwgcjAueg0KLSAgYnJlYWtjX256IHIwLnkNCi0gIGxkbXMgcjMueHl6dywgcjEueHl6dywgdDAueHl6dywgcjAueA0KLSAgYWRkIHIyLnh5encsIHIyLnh5encsIHIzLnh5encNCi0gIGlhZGQgcjAueCwgcjAueCwgbCgxKQ0KLWVuZGxvb3AgDQotc2FtcGxlaW5mbyByMC54LCB0MC54DQotZGl2IG8wLnh5encsIHIyLnh5encsIHIwLnh4eHgNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAxOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1Jlc29sdmVDb2xvcjJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTkyLCAxMzAsIDI1MiwgMTU2LCAxMDMsIDE5MiwgMTc3LCAxNDgsIDI1LCAgMTQyLCAxODEsIDIxNCwgMTczLCAyMTcsIDEyMywNCi0gICAgMTc0LCAxLCAgIDAsICAgMCwgICAwLCAgIDEzNiwgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4NCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTI0LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNzIsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgOTUsICA3NywgIDgzLCAgMCwgICA3NywNCi0gICAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsDQotICAgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LA0KLSAgICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgNzYsICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLA0KLSAgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA4MiwNCi0gICAgNjgsICAwLCAgIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LA0KLSAgICA4MiwgIDE5NiwgMSwgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDEwNiwgOCwgICAwLCAgIDEsICAgODgsICAzMiwNCi0gICAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsDQotICAgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEwNCwgMCwgICAwLCAgIDIsICAgNCwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTEsIDgsDQotICAgIDAsICAgNSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LA0KLSAgICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLA0KLSAgICAwLCAgIDUsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0OCwNCi0gICAgMCwgICAwLCAgIDEsICAgODAsICAwLCAgIDAsICAgNywgICAzNCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDQsICAgMywgICAyNiwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LA0KLSAgICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLA0KLSAgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAzMCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDIyLCAgMCwgICAwLCAgIDEsICAgMTExLCAwLCAgIDAsICAgNSwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsDQotICAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTQsICAwLCAgIDAsICAgNywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDcwLCAgMTQsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsDQotICAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDE4LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUmVzb2x2ZUNvbG9yMkQgL1QgcHNfNF8xIC9GaCBjb21waWxlZFxyZXNvbHZlY29sb3IyZHBzLmgKKy8vICAgIFJlc29sdmVDb2xvci5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlRl9NUyAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAyZE1TICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT1JEICAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzEKK2RjbF9nbG9iYWxGbGFncyByZWZhY3RvcmluZ0FsbG93ZWQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyA0CityZXNpbmZvX3VpbnQgcjAueHksIGwoMCksIHQwLnh5encKK3NhbXBsZWluZm9fdWludCByMC56LCB0MC54Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgKK2Z0b3UgcjEueHksIHIwLnh5eHgKK21vdiByMS56dywgbCgwLDAsMCwwKQorbW92IHIyLnh5encsIGwoMCwwLDAsMCkKK21vdiByMC54LCBsKDApCitsb29wIAorICB1Z2UgcjAueSwgcjAueCwgcjAuegorICBicmVha2NfbnogcjAueQorICBsZG1zIHIzLnh5encsIHIxLnh5encsIHQwLnh5encsIHIwLngKKyAgYWRkIHIyLnh5encsIHIyLnh5encsIHIzLnh5encKKyAgaWFkZCByMC54LCByMC54LCBsKDEpCitlbmRsb29wIAorc2FtcGxlaW5mbyByMC54LCB0MC54CitkaXYgbzAueHl6dywgcjIueHl6dywgcjAueHh4eAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxOCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Jlc29sdmVDb2xvcjJEW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxOTIsIDEzMCwgMjUyLCAxNTYsIDEwMywgMTkyLCAxNzcsIDE0OCwgMjUsICAxNDIsIDE4MSwgMjE0LCAxNzMsIDIxNywgMTIzLAorICAgIDE3NCwgMSwgICAwLCAgIDAsICAgMCwgICAxMzYsIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxODQsIDAsCisgICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICAxMiwgIDMsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTI0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMSwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDcyLCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA5NSwgIDc3LCAgODMsICAwLCAgIDc3LAorICAgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLAorICAgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LAorICAgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA3NiwgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsCisgICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDE5NiwgMSwgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDEwNiwgOCwgICAwLCAgIDEsICAgODgsICAzMiwKKyAgICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwKKyAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwNCwgMCwgICAwLCAgIDIsICAgNCwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMSwgOCwKKyAgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwKKyAgICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLAorICAgIDAsICAgNSwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ4LAorICAgIDAsICAgMCwgICAxLCAgIDgwLCAgMCwgICAwLCAgIDcsICAgMzQsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDQsICAgMywgICAyNiwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ2LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsCisgICAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLAorICAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDMwLCAgMCwgICAwLCAgIDcsICAgMTgsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDIyLCAgMCwgICAwLCAgIDEsICAgMTExLCAwLCAgIDAsICAgNSwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsCisgICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNCwgIDAsICAgMCwgICA3LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA3MCwgIDE0LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLAorICAgIDEsICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDE4LCAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZWRlcHRoMTFfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGgxMV9wcy5oCmluZGV4IGM5ZGRiZDguLjQ4ZmQxMTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGgxMV9wcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGgxMV9wcy5oCkBAIC0xLDg2ICsxLDg2IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Jlc29sdmVEZXB0aCAvVCBwc180XzEgL0ZoIGNvbXBpbGVkL3Jlc29sdmVkZXB0aDExX3BzLmgNCi0vLyAgICBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wNCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBEZXB0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIGZsb2F0ICAgICAgICAyZE1TICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX0RlcHRoICAgICAgICAgICAgICAgICAwICAgIE4vQSAgIG9EZXB0aCAgICBERVBUSCAgZmxvYXQgICAgWUVTDQotLy8NCi1wc180XzENCi1kY2xfZ2xvYmFsRmxhZ3MgcmVmYWN0b3JpbmdBbGxvd2VkDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZG1zKDApIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvRGVwdGgNCi1kY2xfdGVtcHMgMQ0KLXJlc2luZm9fdWludCByMC54eSwgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG91IHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGRtcyByMC54LCByMC54eXp3LCB0MC54eXp3LCBsKDApDQotbW92IG9EZXB0aCwgcjAueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19SZXNvbHZlRGVwdGhbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICA5MSwgIDMwLCAgOTYsICAyMzYsIDIzLCAgMzEsICA3MSwgIDIyNCwgOTQsICAxMDEsIDg2LCAgMTQyLCA5MCwgIDEyLCAgMTUyLA0KLSAgICAyMDYsIDEsICAgMCwgICAwLCAgIDAsICAgMTc2LCAyLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTc2LCAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAxLCAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICA2NiwgIDAsICAgMCwgICAwLCAgIDYwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwNCi0gICAgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsDQotICAgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLA0KLSAgICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDExMSwgMTE1LCAxMDUsDQotICAgIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLA0KLSAgICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLCAgIDE0LCAgMCwgICAwLA0KLSAgICA4MywgIDg2LCAgOTUsICA2OCwgIDEwMSwgMTEyLCAxMTYsIDEwNCwgMCwgICAxNzEsIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDI0MCwgMCwgICAwLA0KLSAgICAwLCAgIDY1LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDg4LCAgMzIsICAwLCAgIDQsICAgMCwgICAxMTIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDIsICAgMSwgICAxOTIsIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDYxLCAgMTYsICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDI4LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LCAgIDE4LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA0LCAgIDEsICAgMTkyLCAwLA0KLSAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLA0KLSAgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19SZXNvbHZlRGVwdGggL1QgcHNfNF8xIC9GaCBjb21waWxlZC9yZXNvbHZlZGVwdGgxMV9wcy5oCisvLyAgICBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIERlcHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgZmxvYXQgICAgICAgIDJkTVMgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUG9zaXRpb24gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9EZXB0aCAgICAgICAgICAgICAgICAgMCAgICBOL0EgICBvRGVwdGggICAgREVQVEggIGZsb2F0ICAgIFlFUworLy8KK3BzXzRfMQorZGNsX2dsb2JhbEZsYWdzIHJlZmFjdG9yaW5nQWxsb3dlZAorZGNsX3Jlc291cmNlX3RleHR1cmUyZG1zKDApIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgb0RlcHRoCitkY2xfdGVtcHMgMQorcmVzaW5mb191aW50IHIwLnh5LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5LCByMC54eXh4CittdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgKK2Z0b3UgcjAueHksIHIwLnh5eHgKK21vdiByMC56dywgbCgwLDAsMCwwKQorbGRtcyByMC54LCByMC54eXp3LCB0MC54eXp3LCBsKDApCittb3Ygb0RlcHRoLCByMC54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19SZXNvbHZlRGVwdGhbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDkxLCAgMzAsICA5NiwgIDIzNiwgMjMsICAzMSwgIDcxLCAgMjI0LCA5NCwgIDEwMSwgODYsICAxNDIsIDkwLCAgMTIsICAxNTIsCisgICAgMjA2LCAxLCAgIDAsICAgMCwgICAwLCAgIDE3NiwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwKKyAgICAwLCAgIDAsICAgOCwgICAxLCAgIDAsICAgMCwgICA2MCwgIDEsICAgMCwgICAwLCAgIDUyLCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjYsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLAorICAgIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLAorICAgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLAorICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLCAxMTUsIDEwNSwKKyAgICAxMTYsIDEwNSwgMTExLCAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywKKyAgICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDEsICAgMTQsICAwLCAgIDAsCisgICAgODMsICA4NiwgIDk1LCAgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsIDAsICAgMTcxLCAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyNDAsIDAsICAgMCwKKyAgICAwLCAgIDY1LCAgMCwgICAwLCAgIDAsICAgNjAsICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDg4LCAgMzIsICAwLCAgIDQsICAgMCwgICAxMTIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAyLCAgIDEsICAgMTkyLCAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDYxLCAgMTYsICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMjgsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LCAgIDE4LAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNCwgICAxLCAgIDE5MiwgMCwKKyAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVkZXB0aHN0ZW5jaWwxMV9wcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVkZXB0aHN0ZW5jaWwxMV9wcy5oCmluZGV4IDUxYjY1YmIuLmI1YWU1NmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3BzLmgKQEAgLTEsOTYgKzEsOTYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUmVzb2x2ZURlcHRoU3RlbmNpbCAvVCBwc180XzEgL0ZoDQotLy8gICAgY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3BzLmggUmVzb2x2ZURlcHRoU3RlbmNpbC5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gRGVwdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBmbG9hdCAgICAgICAgMmRNUyAgICAwICAgICAgICAxDQotLy8gU3RlbmNpbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50MiAgICAgICAgMmRNUyAgICAxICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UYXJnZXQgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHkgIA0KLS8vDQotcHNfNF8xDQotZGNsX2dsb2JhbEZsYWdzIHJlZmFjdG9yaW5nQWxsb3dlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAoZmxvYXQsZmxvYXQsZmxvYXQsZmxvYXQpIHQwDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZG1zKDApICh1aW50LHVpbnQsdWludCx1aW50KSB0MQ0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5DQotZGNsX3RlbXBzIDENCi1yZXNpbmZvX3VpbnQgcjAueHksIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4DQotZnRvdSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56dywgbCgwLDAsMCwwKQ0KLWxkbXMgcjAueiwgcjAueHl6dywgdDEueHp5dywgbCgwKQ0KLWxkbXMgcjAueCwgcjAueHl3dywgdDAueHl6dywgbCgwKQ0KLW1vdiBvMC54LCByMC54DQotdXRvZiBvMC55LCByMC56DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTAgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19SZXNvbHZlRGVwdGhTdGVuY2lsW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDcsICAxMzcsIDE2MCwgMjI5LCA5MSwgIDExLCAgMTYzLCA3NywgIDE5MywgMTM0LCA2NywgIDU2LCAgMTQxLCAyMjIsIDIsDQotICAgIDE5NCwgMSwgICAwLCAgIDAsICAgMCwgICA0MCwgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAyMTYsIDAsDQotICAgIDAsICAgMCwgICA0OCwgIDEsICAgMCwgICAwLCAgIDEwMCwgMSwgICAwLCAgIDAsICAgMTcyLCAyLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDE1NiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDEwNiwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTgsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwNCi0gICAgNjgsICAxMDEsIDExMiwgMTE2LCAxMDQsIDAsICAgODMsICAxMTYsIDEwMSwgMTEwLCA5OSwgIDEwNSwgMTA4LCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLA0KLSAgICAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsDQotICAgIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLA0KLSAgICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICAxMTEsDQotICAgIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMTIsDQotICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDk3LCAgMTE0LCAxMDMsIDEwMSwgMTE2LCAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDY0LA0KLSAgICAxLCAgIDAsICAgMCwgICA2NSwgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMTA2LCA4LCAgIDAsICAgMSwgICA4OCwgIDMyLCAgMCwgICA0LA0KLSAgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA4OCwgIDMyLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsDQotICAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NiwgIDAsDQotICAgIDAsICAgOSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEzNCwNCi0gICAgMTI1LCAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDYsICAwLCAgIDAsICAgOSwNCi0gICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTUsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAzNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwNCi0gICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfUmVzb2x2ZURlcHRoU3RlbmNpbCAvVCBwc180XzEgL0ZoCisvLyAgICBjb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfcHMuaCBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wKKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIERlcHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgZmxvYXQgICAgICAgIDJkTVMgICAgMCAgICAgICAgMQorLy8gU3RlbmNpbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50MiAgICAgICAgMmRNUyAgICAxICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RhcmdldCAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eSAgCisvLworcHNfNF8xCitkY2xfZ2xvYmFsRmxhZ3MgcmVmYWN0b3JpbmdBbGxvd2VkCitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkbXMoMCkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX3Jlc291cmNlX3RleHR1cmUyZG1zKDApICh1aW50LHVpbnQsdWludCx1aW50KSB0MQorZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQorZGNsX291dHB1dCBvMC54eQorZGNsX3RlbXBzIDEKK3Jlc2luZm9fdWludCByMC54eSwgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4CitmdG91IHIwLnh5LCByMC54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkbXMgcjAueiwgcjAueHl6dywgdDEueHp5dywgbCgwKQorbGRtcyByMC54LCByMC54eXd3LCB0MC54eXp3LCBsKDApCittb3YgbzAueCwgcjAueAordXRvZiBvMC55LCByMC56CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDEwIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfUmVzb2x2ZURlcHRoU3RlbmNpbFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDcsICAxMzcsIDE2MCwgMjI5LCA5MSwgIDExLCAgMTYzLCA3NywgIDE5MywgMTM0LCA2NywgIDU2LCAgMTQxLCAyMjIsIDIsCisgICAgMTk0LCAxLCAgIDAsICAgMCwgICAwLCAgIDQwLCAgMywgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDIxNiwgMCwKKyAgICAwLCAgIDAsICAgNDgsICAxLCAgIDAsICAgMCwgICAxMDAsIDEsICAgMCwgICAwLCAgIDE3MiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxNTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMTA2LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTgsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLAorICAgIDY4LCAgMTAxLCAxMTIsIDExNiwgMTA0LCAwLCAgIDgzLCAgMTE2LCAxMDEsIDExMCwgOTksICAxMDUsIDEwOCwgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwKKyAgICAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsCisgICAgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsCisgICAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgMTExLAorICAgIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLCAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDEyLAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDk3LCAgMTE0LCAxMDMsIDEwMSwgMTE2LCAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDY0LAorICAgIDEsICAgMCwgICAwLCAgIDY1LCAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDg4LCAgMzIsICAwLCAgIDQsCisgICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgODgsICAzMiwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICA1MCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDYsICAwLAorICAgIDAsICAgOSwgICA2NiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEzNCwKKyAgICAxMjUsIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NiwgIDAsICAgMCwgICA5LAorICAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE1LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDM0LAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsCisgICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3ZzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3ZzLmgKaW5kZXggODVhZGZmZi4uYjE0MWEzYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVkZXB0aHN0ZW5jaWwxMV92cy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfdnMuaApAQCAtMSw4OCArMSw4OCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBWU19SZXNvbHZlRGVwdGhTdGVuY2lsIC9UIHZzXzRfMSAvRmgNCi0vLyAgICBjb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfdnMuaCBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wNCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVmVydGV4SUQgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAwICAgVkVSVElEICAgdWludCAgIHggICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9Qb3NpdGlvbiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgeHl6dw0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi12c180XzENCi1kY2xfZ2xvYmFsRmxhZ3MgcmVmYWN0b3JpbmdBbGxvd2VkDQotZGNsX2ltbWVkaWF0ZUNvbnN0YW50QnVmZmVyIHsgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEuMDAwMDAwLCAtMS4wMDAwMDAsIDAsIDB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLTEuMDAwMDAwLCAtMS4wMDAwMDAsIDAsIDB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLTEuMDAwMDAwLCAxLjAwMDAwMCwgMCwgMH0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAxLjAwMDAwMCwgMS4wMDAwMDAsIDAsIDB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0gfQ0KLWRjbF9pbnB1dF9zZ3YgdjAueCwgdmVydGV4X2lkDQotZGNsX291dHB1dF9zaXYgbzAueHl6dywgcG9zaXRpb24NCi1kY2xfb3V0cHV0IG8xLnh5DQotZGNsX3RlbXBzIDENCi1tb3YgbzAuencsIGwoMCwwLDAsMS4wMDAwMDApDQotbW92IHIwLngsIHYwLngNCi1tb3YgbzAueHksIGljYltyMC54ICsgMF0ueHl4eA0KLWFkZCByMC55LCBsKDEuMDAwMDAwKSwgaWNiW3IwLnggKyAwXS54DQotYWRkIHIwLngsIGwoMS4wMDAwMDApLCAtaWNiW3IwLnggKyAwXS55DQotbXVsIG8xLnh5LCByMC55eHl5LCBsKDAuNTAwMDAwLCAwLjUwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19WU19SZXNvbHZlRGVwdGhTdGVuY2lsW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDAsICA4LCAgIDEsICAgNTAsICAxMzgsIDIwOCwgMzMsICA5MiwgIDQ2LCAgMTk0LCA0OCwgIDEzMSwgMjUwLCAxNTksIDcxLA0KLSAgICA1NiwgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTQwLCAwLA0KLSAgICAwLCAgIDAsICAgMTkyLCAwLCAgIDAsICAgMCwgICAyNCwgIDEsICAgMCwgICAwLCAgIDEzMiwgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA4MCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICA0LCAgIDI1NCwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLA0KLSAgICAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwNCi0gICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsDQotICAgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg2LCAgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDczLA0KLSAgICA2OCwgIDAsICAgNzksICA4MywgIDcxLCAgNzgsICA4MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMTIsICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICAxMTEsIDExNSwgMTA1LCAxMTYsIDEwNSwgMTExLA0KLSAgICAxMTAsIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxMDAsDQotICAgIDEsICAgMCwgICAwLCAgIDY1LCAgMCwgICAxLCAgIDAsICAgODksICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDUzLCAgMjQsICAwLCAgIDAsDQotICAgIDI2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsDQotICAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAxMjgsIDYzLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAwLCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLA0KLSAgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgNCwgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsDQotICAgIDAsICAgMCwgICAzLCAgIDUwLCAgMzIsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNTQsICAwLCAgIDAsICAgNSwgICAxOCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDUwLA0KLSAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQ0LCAxNDQsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA4LCAgIDM0LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsDQotICAgIDYzLCAgMTAsICAxNDQsIDE0NCwgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOSwgICAxOCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAyNiwgIDE0NCwgMTQ0LCAxMjgsIDY1LA0KLSAgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMTAsICA1MCwgIDMyLCAgMTYsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDIyLCAgNSwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA2MywgIDAsICAgMCwgICAwLCAgIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwNCi0gICAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgNywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMywNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBWU19SZXNvbHZlRGVwdGhTdGVuY2lsIC9UIHZzXzRfMSAvRmgKKy8vICAgIGNvbXBpbGVkL3Jlc29sdmVkZXB0aHN0ZW5jaWwxMV92cy5oIFJlc29sdmVEZXB0aFN0ZW5jaWwuaGxzbAorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVmVydGV4SUQgICAgICAgICAgICAgIDAgICB4ICAgICAgICAgICAwICAgVkVSVElEICAgdWludCAgIHggICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICB4eXp3CisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KK3ZzXzRfMQorZGNsX2dsb2JhbEZsYWdzIHJlZmFjdG9yaW5nQWxsb3dlZAorZGNsX2ltbWVkaWF0ZUNvbnN0YW50QnVmZmVyIHsgeyAtMS4wMDAwMDAsIDEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgMS4wMDAwMDAsIC0xLjAwMDAwMCwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IC0xLjAwMDAwMCwgLTEuMDAwMDAwLCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLTEuMDAwMDAwLCAxLjAwMDAwMCwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEuMDAwMDAwLCAxLjAwMDAwMCwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDEuMDAwMDAwLCAtMS4wMDAwMDAsIDAsIDB9IH0KK2RjbF9pbnB1dF9zZ3YgdjAueCwgdmVydGV4X2lkCitkY2xfb3V0cHV0X3NpdiBvMC54eXp3LCBwb3NpdGlvbgorZGNsX291dHB1dCBvMS54eQorZGNsX3RlbXBzIDEKK21vdiBvMC56dywgbCgwLDAsMCwxLjAwMDAwMCkKK21vdiByMC54LCB2MC54Cittb3YgbzAueHksIGljYltyMC54ICsgMF0ueHl4eAorYWRkIHIwLnksIGwoMS4wMDAwMDApLCBpY2JbcjAueCArIDBdLngKK2FkZCByMC54LCBsKDEuMDAwMDAwKSwgLWljYltyMC54ICsgMF0ueQorbXVsIG8xLnh5LCByMC55eHl5LCBsKDAuNTAwMDAwLCAwLjUwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKQorcmV0IAorLy8gQXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfVlNfUmVzb2x2ZURlcHRoU3RlbmNpbFtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgNDAsICA4LCAgIDEsICAgNTAsICAxMzgsIDIwOCwgMzMsICA5MiwgIDQ2LCAgMTk0LCA0OCwgIDEzMSwgMjUwLCAxNTksIDcxLAorICAgIDU2LCAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxNDAsIDAsCisgICAgMCwgICAwLCAgIDE5MiwgMCwgICAwLCAgIDAsICAgMjQsICAxLCAgIDAsICAgMCwgICAxMzIsIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgODAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDQsICAgMjU0LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsCisgICAgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsCisgICAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsCisgICAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg2LCAgMTAxLCAxMTQsIDExNiwgMTAxLCAxMjAsIDczLAorICAgIDY4LCAgMCwgICA3OSwgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAxMiwgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsCisgICAgMTEwLCAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTAwLAorICAgIDEsICAgMCwgICAwLCAgIDY1LCAgMCwgICAxLCAgIDAsICAgODksICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDUzLCAgMjQsICAwLCAgIDAsCisgICAgMjYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMTI4LCAxOTEsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCAxOTEsIDAsCisgICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgNjMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgMCwgICAwLCAgIDEyOCwgMTkxLCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAwLCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLAorICAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICA0LCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwKKyAgICAwLCAgIDAsICAgMywgICA1MCwgIDMyLCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICA1MCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQ0LCAxNDQsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDgsICAgMzQsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwKKyAgICA2MywgIDEwLCAgMTQ0LCAxNDQsIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDksICAgMTgsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICAyNiwgIDE0NCwgMTQ0LCAxMjgsIDY1LAorICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAxMCwgIDUwLCAgMzIsICAxNiwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAyMiwgIDUsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA2MywgIDAsICAgMCwgICAwLCAgIDYzLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwKKyAgICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICA3LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVzdGVuY2lsMTFfcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlc3RlbmNpbDExX3BzLmgKaW5kZXggMTY5OGM3Ni4uNTViZGRmMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVzdGVuY2lsMTFfcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZXN0ZW5jaWwxMV9wcy5oCkBAIC0xLDg4ICsxLDg4IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1Jlc29sdmVTdGVuY2lsIC9UIHBzXzRfMSAvRmgNCi0vLyAgICBjb21waWxlZC9yZXNvbHZlc3RlbmNpbDExX3BzLmggUmVzb2x2ZURlcHRoU3RlbmNpbC5obHNsDQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU3RlbmNpbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50MiAgICAgICAgMmRNUyAgICAxICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UYXJnZXQgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHkgIA0KLS8vDQotcHNfNF8xDQotZGNsX2dsb2JhbEZsYWdzIHJlZmFjdG9yaW5nQWxsb3dlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAodWludCx1aW50LHVpbnQsdWludCkgdDENCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eQ0KLWRjbF90ZW1wcyAxDQotcmVzaW5mb191aW50IHIwLnh5LCBsKDApLCB0MS54eXp3DQotdXRvZiByMC54eSwgcjAueHl4eA0KLW11bCByMC54eSwgcjAueHl4eCwgdjEueHl4eA0KLWZ0b3UgcjAueHksIHIwLnh5eHgNCi1tb3YgcjAuencsIGwoMCwwLDAsMCkNCi1sZG1zIHIwLngsIHIwLnh5encsIHQxLnl4encsIGwoMCkNCi11dG9mIG8wLnksIHIwLngNCi1tb3YgbzAueCwgbCgwKQ0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDkgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19SZXNvbHZlU3RlbmNpbFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIzLCAgMTk0LCAxOTUsIDIwOSwgMjEyLCAyOCwgIDIwOCwgMzcsICA0MiwgIDIxLCAgMTkxLCAyMDYsIDE5MSwgMCwgICA1MiwNCi0gICAgMTIwLCAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwNCi0gICAgMCwgICAwLCAgIDEyLCAgMSwgICAwLCAgIDAsICAgNjQsICAxLCAgIDAsICAgMCwgICA4NCwgIDIsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgMTIwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA4MywgIDExNiwgMTAxLCAxMTAsIDk5LCAgMTA1LCAxMDgsIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsDQotICAgIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwNCi0gICAgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsDQotICAgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsDQotICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LA0KLSAgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsDQotICAgIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAzLCAgIDEyLCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwNCi0gICAgODIsICAxMiwgIDEsICAgMCwgICAwLCAgIDY1LCAgMCwgICAwLCAgIDAsICAgNjcsICAwLCAgIDAsICAgMCwgICAxMDYsIDgsICAgMCwgICAxLCAgIDg4LCAgMzIsDQotICAgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLA0KLSAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODYsICAwLA0KLSAgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwNCi0gICAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNDYsICAwLCAgIDAsICAgOSwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyMiwgIDEyNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19SZXNvbHZlU3RlbmNpbCAvVCBwc180XzEgL0ZoCisvLyAgICBjb21waWxlZC9yZXNvbHZlc3RlbmNpbDExX3BzLmggUmVzb2x2ZURlcHRoU3RlbmNpbC5obHNsCisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTdGVuY2lsICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQyICAgICAgICAyZE1TICAgIDEgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1Bvc2l0aW9uICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVGFyZ2V0ICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5ICAKKy8vCitwc180XzEKK2RjbF9nbG9iYWxGbGFncyByZWZhY3RvcmluZ0FsbG93ZWQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmRtcygwKSAodWludCx1aW50LHVpbnQsdWludCkgdDEKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHkKK2RjbF90ZW1wcyAxCityZXNpbmZvX3VpbnQgcjAueHksIGwoMCksIHQxLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjEueHl4eAorZnRvdSByMC54eSwgcjAueHl4eAorbW92IHIwLnp3LCBsKDAsMCwwLDApCitsZG1zIHIwLngsIHIwLnh5encsIHQxLnl4encsIGwoMCkKK3V0b2YgbzAueSwgcjAueAorbW92IG8wLngsIGwoMCkKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgOSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1Jlc29sdmVTdGVuY2lsW10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAyMywgIDE5NCwgMTk1LCAyMDksIDIxMiwgMjgsICAyMDgsIDM3LCAgNDIsICAyMSwgIDE5MSwgMjA2LCAxOTEsIDAsICAgNTIsCisgICAgMTIwLCAxLCAgIDAsICAgMCwgICAwLCAgIDIwOCwgMiwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDE4MCwgMCwKKyAgICAwLCAgIDAsICAgMTIsICAxLCAgIDAsICAgMCwgICA2NCwgIDEsICAgMCwgICAwLCAgIDg0LCAgMiwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAxMjAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICA2MCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTYsIDEwMSwgMTEwLCA5OSwgIDEwNSwgMTA4LCAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLAorICAgIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwKKyAgICAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwKKyAgICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwKKyAgICA4MCwgIDExMSwgMTE1LCAxMDUsIDExNiwgMTA1LCAxMTEsIDExMCwgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAzLCAgIDEyLCAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgOTcsICAxMTQsIDEwMywgMTAxLCAxMTYsIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwKKyAgICA4MiwgIDEyLCAgMSwgICAwLCAgIDAsICAgNjUsICAwLCAgIDAsICAgMCwgICA2NywgIDAsICAgMCwgICAwLCAgIDEwNiwgOCwgICAwLCAgIDEsICAgODgsICAzMiwKKyAgICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwKKyAgICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgNTAsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwKKyAgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwKKyAgICAwLCAgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgOCwgICAxOTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDQ2LCAgMCwgICAwLCAgIDksICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyMiwgIDEyNiwgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgOSwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlZjJkYXJyYXlwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRhcnJheXBzLmgKaW5kZXggZGQ4OGEyYy4uODFiOTRmZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRhcnJheXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRhcnJheXBzLmgKQEAgLTEsMTQwICsxLDE0MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlRjJEQXJyYXkgL1QgcHNfNF8wIC9GaA0KLS8vICAgIGNvbXBpbGVkXHN3aXp6bGVmMmRhcnJheXBzLmggU3dpenpsZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgU3dpenpsZVByb3BlcnRpZXMNCi0vLyB7DQotLy8NCi0vLyAgIHVpbnQ0IFN3aXp6bGVJbmRpY2VzOyAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gU2FtcGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8gVGV4dHVyZUYyREFycmF5ICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgMmRhcnJheSAgICAwICAgICAgICAxDQotLy8gU3dpenpsZVByb3BlcnRpZXMgICAgICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0DQotZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLWRjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0DQotdXRvZiByMC56LCB2MS54DQotbW92IHIwLnh5LCB2Mi54eXh4DQotc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwDQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEuMDAwMDAwKQ0KLW1vdiByMC54LCBjYjBbMF0ueA0KLW1vdiBvMC54LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueQ0KLW1vdiBvMC55LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueg0KLW1vdiBvMC56LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0udw0KLW1vdiBvMC53LCB4MFtyMC54ICsgMF0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDE4IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfU3dpenpsZUYyREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTAsICAxMTIsIDExNCwgMjA4LCAyMDQsIDIyMSwgNiwgICAxMzAsIDE5MSwgMTIzLCA4MCwgIDExMSwgMjI2LCA3MCwgIDc5LA0KLSAgICAyMjUsIDEsICAgMCwgICAwLCAgIDAsICAgMjA0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTA0LCAxLA0KLSAgICAwLCAgIDAsICAgMjQwLCAxLCAgIDAsICAgMCwgICAzNiwgIDIsICAgMCwgICAwLCAgIDgwLCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0NCwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI0OCwgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMyLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNSwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgMTQ4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLA0KLSAgICAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDUwLCAgNjgsICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA4MywNCi0gICAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLA0KLSAgICAxNDgsIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTkyLCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLA0KLSAgICAwLCAgIDAsICAgMjMyLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsDQotICAgIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLCAgIDE3MSwgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLA0KLSAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsDQotICAgIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLA0KLSAgICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLA0KLSAgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLA0KLSAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcsICAgMywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwNCi0gICAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsDQotICAgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LA0KLSAgICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsDQotICAgIDgyLCAgMzYsICAyLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDEzNywgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MCwgIDAsICAgMCwgICAzLCAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwNCi0gICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwNCi0gICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwNCi0gICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsDQotICAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsDQotICAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwNCi0gICAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsDQotICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LA0KLSAgICAwLCAgIDAsICAgNywgICAzNCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQyLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwNCi0gICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxOCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1N3aXp6bGVGMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGMkRBcnJheSAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgIDJkYXJyYXkgICAgMCAgICAgICAgMQorLy8gU3dpenpsZVByb3BlcnRpZXMgICAgICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgeCAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzFdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkYXJyYXkgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0Cit1dG9mIHIwLnosIHYxLngKK21vdiByMC54eSwgdjIueHl4eAorc2FtcGxlIHIwLnh5encsIHIwLnh5engsIHQwLnh5encsIHMwCittb3YgeDBbMF0ueCwgcjAueAorbW92IHgwWzFdLngsIHIwLnkKK21vdiB4MFsyXS54LCByMC56Cittb3YgeDBbM10ueCwgcjAudworbW92IHgwWzRdLngsIGwoMCkKK21vdiB4MFs1XS54LCBsKDEuMDAwMDAwKQorbW92IHIwLngsIGNiMFswXS54Cittb3YgbzAueCwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0ueQorbW92IG8wLnksIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLnoKK21vdiBvMC56LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS53Cittb3YgbzAudywgeDBbcjAueCArIDBdLngKK3JldCAKKy8vIEFwcHJveGltYXRlbHkgMTggaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19QU19Td2l6emxlRjJEQXJyYXlbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDEwLCAgMTEyLCAxMTQsIDIwOCwgMjA0LCAyMjEsIDYsICAgMTMwLCAxOTEsIDEyMywgODAsICAxMTEsIDIyNiwgNzAsICA3OSwKKyAgICAyMjUsIDEsICAgMCwgICAwLCAgIDAsICAgMjA0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTA0LCAxLAorICAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDM2LCAgMiwgICAwLCAgIDAsICAgODAsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDQ0LAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTY4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI0OCwgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzMiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICAxNDgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwKKyAgICAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDUwLCAgNjgsICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA4MywKKyAgICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA4MCwgIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDAsICAgMTcxLCAxNzEsCisgICAgMTQ4LCAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE5MiwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjE2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLAorICAgIDAsICAgMCwgICAyMzIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwKKyAgICAxMDAsIDEwNSwgOTksICAxMDEsIDExNSwgMCwgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLAorICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwKKyAgICAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywKKyAgICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsCisgICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLAorICAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LAorICAgIDczLCAgNzksICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LAorICAgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LAorICAgIDAsICAgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsCisgICAgODIsICAzNiwgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTM3LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODUsICA4NSwgIDAsICAgMCwKKyAgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDk4LCAgMTYsICAwLAorICAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwKKyAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwKKyAgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsCisgICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLAorICAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNDIsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICA2NiwgIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsCisgICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxOCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRwcy5oCmluZGV4IDllOTIzYmYuLjI3YTg3YzIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlZjJkcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWYyZHBzLmgKQEAgLTEsMTMwICsxLDEzMCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlRjJEIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcc3dpenpsZWYyZHBzLmgNCi0vLyAgICBTd2l6emxlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRjJEICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzFdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX3NhbXBsZXIgczAsIG1vZGVfZGVmYXVsdA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLWRjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0DQotc2FtcGxlIHIwLnh5encsIHYxLnh5eHgsIHQwLnh5encsIHMwDQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEuMDAwMDAwKQ0KLW1vdiByMC54LCBjYjBbMF0ueA0KLW1vdiBvMC54LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueQ0KLW1vdiBvMC55LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueg0KLW1vdiBvMC56LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0udw0KLW1vdiBvMC53LCB4MFtyMC54ICsgMF0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDE2IGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfU3dpenpsZUYyRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIzMSwgODQsICAxNzEsIDM2LCAgMTc0LCAxMDEsIDIzMywgMTY3LCAyMjQsIDYxLCAgMTYwLCAzMCwgIDExMywgMTA2LCAxMDYsDQotICAgIDEyNSwgMSwgICAwLCAgIDAsICAgMCwgICA5NiwgIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICAxMDAsIDEsDQotICAgIDAsICAgMCwgICAxODgsIDEsICAgMCwgICAwLCAgIDI0MCwgMSwgICAwLCAgIDAsICAgMjI4LCAzLCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDQwLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE2NCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjQ0LCAwLCAgIDAsICAgMCwgICAxMjQsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMzIsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLA0KLSAgICAxNDMsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsDQotICAgIDExNCwgMCwgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDcwLCAgNTAsICA2OCwgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwNCi0gICAgMTAxLCA4MCwgIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDAsICAgMTcxLCAxNzEsIDE3MSwgMTQzLCAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyMTIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDIyOCwgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsIDk5LCAgMTAxLA0KLSAgICAxMTUsIDAsICAgMTcxLCAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwNCi0gICAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsDQotICAgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLA0KLSAgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwNCi0gICAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwNCi0gICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMjM2LCAxLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDEyMywgMCwgICAwLCAgIDAsICAgODksDQotICAgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsDQotICAgIDAsICAgOTYsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4OCwgIDI0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODUsICA4NSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsDQotICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNSwNCi0gICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNjksICAwLCAgIDAsICAgOSwNCi0gICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LA0KLSAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwNCi0gICAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsDQotICAgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEyOCwgNjMsICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsDQotICAgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxMzAsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsDQotICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlRjJEIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcc3dpenpsZWYyZHBzLmgKKy8vICAgIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vIFRleHR1cmVGMkQgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICBmbG9hdDQgICAgICAgICAgMmQgICAgMCAgICAgICAgMQorLy8gU3dpenpsZVByb3BlcnRpZXMgICAgICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxCisvLworLy8KKy8vCisvLyBJbnB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIAorLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICAKKy8vCisvLworLy8gT3V0cHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgZmxvYXQgICB4eXp3CisvLworcHNfNF8wCitkY2xfY29uc3RhbnRidWZmZXIgY2IwWzFdLCBpbW1lZGlhdGVJbmRleGVkCitkY2xfc2FtcGxlciBzMCwgbW9kZV9kZWZhdWx0CitkY2xfcmVzb3VyY2VfdGV4dHVyZTJkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0CitzYW1wbGUgcjAueHl6dywgdjEueHl4eCwgdDAueHl6dywgczAKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMS4wMDAwMDApCittb3YgcjAueCwgY2IwWzBdLngKK21vdiBvMC54LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS55Cittb3YgbzAueSwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0uegorbW92IG8wLnosIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLncKK21vdiBvMC53LCB4MFtyMC54ICsgMF0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1N3aXp6bGVGMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIzMSwgODQsICAxNzEsIDM2LCAgMTc0LCAxMDEsIDIzMywgMTY3LCAyMjQsIDYxLCAgMTYwLCAzMCwgIDExMywgMTA2LCAxMDYsCisgICAgMTI1LCAxLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDEwMCwgMSwKKyAgICAwLCAgIDAsICAgMTg4LCAxLCAgIDAsICAgMCwgICAyNDAsIDEsICAgMCwgICAwLCAgIDIyOCwgMywgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0MCwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE2NCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyNDQsIDAsICAgMCwgICAwLCAgIDEyNCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMzIsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsCisgICAgMTQzLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgOTcsICAxMDksIDExMiwgMTA4LCAxMDEsCisgICAgMTE0LCAwLCAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzAsICA1MCwgIDY4LCAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LAorICAgIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDE0MywgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIxMiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjI4LCAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwKKyAgICAxMTUsIDAsICAgMTcxLCAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLAorICAgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLAorICAgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLAorICAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAzLAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LAorICAgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLAorICAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDIzNiwgMSwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAxMjMsIDAsICAgMCwgICAwLCAgIDg5LAorICAgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsCisgICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDg1LCAgODUsICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLAorICAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNSwKKyAgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA2OSwgIDAsICAgMCwgICA5LAorICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LAorICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LAorICAgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LAorICAgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMjgsIDYzLCAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxMjgsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsCisgICAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLAorICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsCisgICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmM2Rwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmM2Rwcy5oCmluZGV4IDE5MWU4M2UuLjRiMDVjZGEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlZjNkcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWYzZHBzLmgKQEAgLTEsMTM0ICsxLDEzNCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlRjNEIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcc3dpenpsZWYzZHBzLmgNCi0vLyAgICBTd2l6emxlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLyBUZXh0dXJlRjNEICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgZmxvYXQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDENCi0vLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5eiANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgIGZsb2F0ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChmbG9hdCxmbG9hdCxmbG9hdCxmbG9hdCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotZGNsX2luZGV4YWJsZVRlbXAgeDBbNl0sIDQNCi1zYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczANCi1tb3YgeDBbMF0ueCwgcjAueA0KLW1vdiB4MFsxXS54LCByMC55DQotbW92IHgwWzJdLngsIHIwLnoNCi1tb3YgeDBbM10ueCwgcjAudw0KLW1vdiB4MFs0XS54LCBsKDApDQotbW92IHgwWzVdLngsIGwoMS4wMDAwMDApDQotbW92IHIwLngsIGNiMFswXS54DQotbW92IG8wLngsIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS55DQotbW92IG8wLnksIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS56DQotbW92IG8wLnosIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS53DQotbW92IG8wLncsIHgwW3IwLnggKyAwXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMTYgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19Td2l6emxlRjNEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjM5LCAxOTAsIDkzLCAgMTYsICAxMDgsIDExNiwgMTk0LCA4OCwgIDExMSwgNDMsICAyNDQsIDI2LCAgODMsICAyMDQsIDU5LA0KLSAgICAxMjMsIDEsICAgMCwgICAwLCAgIDAsICAgMTQ0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTAwLCAxLA0KLSAgICAwLCAgIDAsICAgMjM2LCAxLCAgIDAsICAgMCwgICAzMiwgIDIsICAgMCwgICAwLCAgIDIwLCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0MCwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNjQsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI0NCwgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMyLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgOCwNCi0gICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwNCi0gICAgMTQzLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4MywgIDk3LCAgMTA5LCAxMTIsIDEwOCwgMTAxLA0KLSAgICAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDUxLCAgNjgsICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsDQotICAgIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDE0MywgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTg4LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMjEyLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMjgsIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwNCi0gICAgMTE1LCAwLCAgIDE3MSwgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsDQotICAgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLA0KLSAgICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsDQotICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDcsICAgNywgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsDQotICAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LA0KLSAgICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywNCi0gICAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwNCi0gICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMzYsIDEsICAgMCwNCi0gICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDEyMywgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTAsICAwLCAgIDAsICAgMywgICAwLCAgIDk2LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODgsDQotICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsDQotICAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNSwgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsDQotICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLA0KLSAgICAxOCwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk2LCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwNCi0gICAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsDQotICAgIDM0LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAxMjgsDQotICAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICA2NiwgIDMyLCAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LA0KLSAgICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwgICA4MywNCi0gICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1N3aXp6bGVGM0QgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxzd2l6emxlZjNkcHMuaAorLy8gICAgU3dpenpsZTExLmhsc2wKKy8vCisvLworLy8gQnVmZmVyIERlZmluaXRpb25zOiAKKy8vCisvLyBjYnVmZmVyIFN3aXp6bGVQcm9wZXJ0aWVzCisvLyB7CisvLworLy8gICB1aW50NCBTd2l6emxlSW5kaWNlczsgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNgorLy8KKy8vIH0KKy8vCisvLworLy8gUmVzb3VyY2UgQmluZGluZ3M6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0KKy8vIFNhbXBsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8gVGV4dHVyZUYzRCAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgIGZsb2F0NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICBmbG9hdCAgIHh5encKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9zYW1wbGVyIHMwLCBtb2RlX2RlZmF1bHQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKGZsb2F0LGZsb2F0LGZsb2F0LGZsb2F0KSB0MAorZGNsX2lucHV0X3BzIGxpbmVhciB2Mi54eXoKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0CitzYW1wbGUgcjAueHl6dywgdjIueHl6eCwgdDAueHl6dywgczAKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMS4wMDAwMDApCittb3YgcjAueCwgY2IwWzBdLngKK21vdiBvMC54LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS55Cittb3YgbzAueSwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0uegorbW92IG8wLnosIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLncKK21vdiBvMC53LCB4MFtyMC54ICsgMF0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAxNiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1N3aXp6bGVGM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDIzOSwgMTkwLCA5MywgIDE2LCAgMTA4LCAxMTYsIDE5NCwgODgsICAxMTEsIDQzLCAgMjQ0LCAyNiwgIDgzLCAgMjA0LCA1OSwKKyAgICAxMjMsIDEsICAgMCwgICAwLCAgIDAsICAgMTQ0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgMTAwLCAxLAorICAgIDAsICAgMCwgICAyMzYsIDEsICAgMCwgICAwLCAgIDMyLCAgMiwgICAwLCAgIDAsICAgMjAsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDQwLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTY0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDI0NCwgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEzMiwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDgsCisgICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwKKyAgICAxNDMsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODMsICA5NywgIDEwOSwgMTEyLCAxMDgsIDEwMSwKKyAgICAxMTQsIDAsICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MCwgIDUxLCAgNjgsICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsCisgICAgMTAxLCA4MCwgIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDAsICAgMTcxLCAxNzEsIDE3MSwgMTQzLCAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDE4OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMjEyLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyMjgsIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsIDk5LCAgMTAxLAorICAgIDExNSwgMCwgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsCisgICAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsCisgICAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LAorICAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsCisgICAgMCwgICAwLCAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwKKyAgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwKKyAgICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywKKyAgICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsCisgICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAyMzYsIDEsICAgMCwKKyAgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTIzLCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkwLCAgMCwgICAwLCAgIDMsICAgMCwgICA5NiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg4LAorICAgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NSwgIDg1LCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsCisgICAgMTE0LCAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLAorICAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDY5LCAgMCwgICAwLCAgIDksICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLAorICAgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTYsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LAorICAgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMTI4LCA2MywgIDU0LCAgMCwgICAwLCAgIDYsCisgICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywKKyAgICAzNCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAxMjgsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsCisgICAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsCisgICAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVpMmRhcnJheXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkyZGFycmF5cHMuaAppbmRleCAxYjM2Yjk1Li5iMzE4OGFkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkyZGFycmF5cHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkyZGFycmF5cHMuaApAQCAtMSwxNDQgKzEsMTQ0IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1N3aXp6bGVJMkRBcnJheSAvVCBwc180XzAgL0ZoDQotLy8gICAgY29tcGlsZWRcc3dpenpsZWkyZGFycmF5cHMuaCBTd2l6emxlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlSTJEQXJyYXkgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLWRjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0DQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56LCB2MS54DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEpDQotbW92IHIwLngsIGNiMFswXS54DQotbW92IG8wLngsIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS55DQotbW92IG8wLnksIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS56DQotbW92IG8wLnosIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS53DQotbW92IG8wLncsIHgwW3IwLnggKyAwXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMjIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19Td2l6emxlSTJEQXJyYXlbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMzMsIDIzNCwgMjEyLCA2NywgIDI1NSwgMTY1LCAxODEsIDI1MiwgMTksICAxODUsIDE2OCwgMjksICAyMzcsIDE5MywgMTI1LA0KLSAgICA1NywgIDEsICAgMCwgICAwLCAgIDAsICAgMjQwLCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjQsICAxLA0KLSAgICAwLCAgIDAsICAgMjAwLCAxLCAgIDAsICAgMCwgICAyNTIsIDEsICAgMCwgICAwLCAgIDExNiwgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICA0LA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA4LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgNTAsICA2OCwgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDgzLCAgMTE5LCAxMDUsDQotICAgIDEyMiwgMTIyLCAxMDgsIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDgsIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDE3NiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsDQotICAgIDE5MiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LCAxMDEsIDczLCAgMTEwLCAxMDAsIDEwNSwNCi0gICAgOTksICAxMDEsIDExNSwgMCwgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsDQotICAgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LA0KLSAgICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwNCi0gICAgNzgsICAxMjgsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDEsICAgMSwgICAwLCAgIDAsICAgMTE4LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LA0KLSAgICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwNCi0gICAgODIsICA2NSwgIDg5LCAgNzMsICA3OCwgIDY4LCAgNjksICA4OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsICA2OCwgIDAsICAgMTcxLA0KLSAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLA0KLSAgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwgODMsICA3MiwgIDY4LCAgODIsICAxMTIsDQotICAgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICAxMDAsIDgsICAgMCwgICA0LCAgIDE4LCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA1LCAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsDQotICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsDQotICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LA0KLSAgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LA0KLSAgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLA0KLSAgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLA0KLSAgICA3LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwNCi0gICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsDQotICAgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsDQotICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyMiwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQorLy8KKy8vCisvLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1N3aXp6bGVJMkRBcnJheSAvVCBwc180XzAgL0ZoCisvLyAgICBjb21waWxlZFxzd2l6emxlaTJkYXJyYXlwcy5oIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlSTJEQXJyYXkgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vIFN3aXp6bGVQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICAgaW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5IChzaW50LHNpbnQsc2ludCxzaW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0CityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAueiwgdjEueAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMSkKK21vdiByMC54LCBjYjBbMF0ueAorbW92IG8wLngsIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLnkKK21vdiBvMC55LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS56Cittb3YgbzAueiwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0udworbW92IG8wLncsIHgwW3IwLnggKyAwXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfU3dpenpsZUkyREFycmF5W10gPSB7CisgICAgNjgsICA4OCwgIDY2LCAgNjcsICAxMzMsIDIzNCwgMjEyLCA2NywgIDI1NSwgMTY1LCAxODEsIDI1MiwgMTksICAxODUsIDE2OCwgMjksICAyMzcsIDE5MywgMTI1LAorICAgIDU3LCAgMSwgICAwLCAgIDAsICAgMCwgICAyNDAsIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA2NCwgIDEsCisgICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgMjUyLCAxLCAgIDAsICAgMCwgICAxMTYsIDQsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgNCwKKyAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMDgsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA3MywgIDUwLCAgNjgsICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA4MywgIDExOSwgMTA1LAorICAgIDEyMiwgMTIyLCAxMDgsIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDgsIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTUyLCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLAorICAgIDE5MiwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LCAxMDEsIDczLCAgMTEwLCAxMDAsIDEwNSwKKyAgICA5OSwgIDEwMSwgMTE1LCAwLCAgIDE3MSwgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLAorICAgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LAorICAgIDQ2LCAgNTAsICA1NywgIDQ2LCAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLAorICAgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgOTIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA3LCAgIDMsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LAorICAgIDc4LCAgMCwgICA4MywgIDg2LCAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLAorICAgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwKKyAgICA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsCisgICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTEyLAorICAgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTU2LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNjQsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDUxLCAgNTEsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLAorICAgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICA2NiwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLAorICAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsCisgICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsCisgICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNywgICAzNCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwKKyAgICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICA2NiwgIDMyLCAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwKKyAgICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLAorICAgIDgzLCAgODQsICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyMiwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVpMmRwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVpMmRwcy5oCmluZGV4IGExMzIzNWIuLmEwNDcwYjUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlaTJkcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkyZHBzLmgKQEAgLTEsMTM3ICsxLDEzNyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlSTJEIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcc3dpenpsZWkyZHBzLmgNCi0vLyAgICBTd2l6emxlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlSTJEICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHNpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDENCi0vLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgICBpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzFdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX3Jlc291cmNlX3RleHR1cmUyZCAoc2ludCxzaW50LHNpbnQsc2ludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1kY2xfaW5kZXhhYmxlVGVtcCB4MFs2XSwgNA0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eSwgcjAueHl4eA0KLW11bCByMC54eSwgcjAueHl4eCwgdjEueHl4eA0KLWZ0b2kgcjAueHksIHIwLnh5eHgNCi1tb3YgcjAuencsIGwoMCwwLDAsMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEpDQotbW92IHIwLngsIGNiMFswXS54DQotbW92IG8wLngsIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS55DQotbW92IG8wLnksIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS56DQotbW92IG8wLnosIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS53DQotbW92IG8wLncsIHgwW3IwLnggKyAwXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMjEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19Td2l6emxlSTJEW10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMTczLCAyMjYsIDE3MywgMjMsICAyMSwgIDI0OSwgMTQ4LCA1NiwgIDEyLCAgMTk0LCAxNywgIDIyNSwgMTE4LCA1MiwgIDMxLA0KLSAgICAxMTksIDEsICAgMCwgICAwLCAgIDAsICAgMTY0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjAsICAxLA0KLSAgICAwLCAgIDAsICAgMTQ4LCAxLCAgIDAsICAgMCwgICAyMDAsIDEsICAgMCwgICAwLCAgIDQwLCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA0LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgNTAsICA2OCwgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA4MCwNCi0gICAgMTE0LCAxMTEsIDExMiwgMTAxLCAxMTQsIDExNiwgMTA1LCAxMDEsIDExNSwgMCwgICAxNzEsIDE3MSwgMTcxLCAxMDMsIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDE0OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLA0KLSAgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsDQotICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsDQotICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgODgsICAyLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDE1MCwgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsDQotICAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywNCi0gICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLA0KLSAgICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICA2NiwgIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwNCi0gICAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwNCi0gICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIxLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfU3dpenpsZUkyRCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXHN3aXp6bGVpMmRwcy5oCisvLyAgICBTd2l6emxlMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgU3dpenpsZVByb3BlcnRpZXMKKy8vIHsKKy8vCisvLyAgIHVpbnQ0IFN3aXp6bGVJbmRpY2VzOyAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkyRCAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxCisvLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5ICAgICAgICAgIDEgICAgIE5PTkUgIGZsb2F0ICAgeHkgIAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYxLnh5CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitkY2xfaW5kZXhhYmxlVGVtcCB4MFs2XSwgNAorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHksIHIwLnh5eHgKK211bCByMC54eSwgcjAueHl4eCwgdjEueHl4eAorZnRvaSByMC54eSwgcjAueHl4eAorbW92IHIwLnp3LCBsKDAsMCwwLDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgeDBbMF0ueCwgcjAueAorbW92IHgwWzFdLngsIHIwLnkKK21vdiB4MFsyXS54LCByMC56Cittb3YgeDBbM10ueCwgcjAudworbW92IHgwWzRdLngsIGwoMCkKK21vdiB4MFs1XS54LCBsKDEpCittb3YgcjAueCwgY2IwWzBdLngKK21vdiBvMC54LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS55Cittb3YgbzAueSwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0uegorbW92IG8wLnosIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLncKK21vdiBvMC53LCB4MFtyMC54ICsgMF0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAyMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1N3aXp6bGVJMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE3MywgMjI2LCAxNzMsIDIzLCAgMjEsICAyNDksIDE0OCwgNTYsICAxMiwgIDE5NCwgMTcsICAyMjUsIDExOCwgNTIsICAzMSwKKyAgICAxMTksIDEsICAgMCwgICAwLCAgIDAsICAgMTY0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjAsICAxLAorICAgIDAsICAgMCwgICAxNDgsIDEsICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgNDAsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA0LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgMTAzLCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgNzMsICA1MCwgIDY4LCAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LCAxMDEsIDgwLAorICAgIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDAsICAgMTcxLCAxNzEsIDE3MSwgMTAzLCAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDE0OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE4OCwgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LCAxMDEsIDczLCAgMTEwLCAxMDAsIDEwNSwgOTksICAxMDEsIDExNSwgMCwKKyAgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsCisgICAgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LAorICAgIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywgIDQ2LCAgNTAsICA1NywgIDQ2LAorICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsCisgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsCisgICAgODMsICA4NiwgIDk1LCAgODAsICA3OSwgIDgzLCAgNzMsICA4NCwgIDczLCAgNzksICA3OCwgIDAsICAgODQsICA2OSwgIDg4LCAgNjcsICA3OSwgIDc5LCAgODIsCisgICAgNjgsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDc5LCAgODMsICA3MSwgIDc4LCAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwKKyAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwgIDk1LCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgMCwgICAxNzEsIDE3MSwKKyAgICA4MywgIDcyLCAgNjgsICA4MiwgIDg4LCAgMiwgICAwLCAgIDAsICAgNjQsICAwLCAgIDAsICAgMCwgICAxNTAsIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLAorICAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwgICAwLCAgIDk4LCAgMTYsICAwLCAgIDMsICAgNTAsICAxNiwgIDE2LCAgMCwgICAxLAorICAgIDAsICAgMCwgICAwLCAgIDEwMSwgMCwgICAwLCAgIDMsICAgMjQyLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsCisgICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLAorICAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LAorICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LAorICAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsCisgICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsCisgICAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwKKyAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMjEsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlaTNkcHMuaCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlaTNkcHMuaAppbmRleCA3NjJiZmYyLi5kNWI0NjQ0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkzZHBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVpM2Rwcy5oCkBAIC0xLDE0MCArMSwxNDAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExDQotLy8NCi0vLw0KLS8vICAgZnhjIC9ub2xvZ28gL0UgUFNfU3dpenpsZUkzRCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oDQotLy8gICAgU3dpenpsZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgU3dpenpsZVByb3BlcnRpZXMNCi0vLyB7DQotLy8NCi0vLyAgIHVpbnQ0IFN3aXp6bGVJbmRpY2VzOyAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZUkzRCAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxDQotLy8gU3dpenpsZVByb3BlcnRpZXMgICAgICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gU1ZfUkVOREVSVEFSR0VUQVJSQVlJTkRFWCAgICAgMCAgIHggICAgICAgICAgIDEgIFJUSU5ERVggICB1aW50ICAgICAgIA0KLS8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogDQotLy8NCi0vLw0KLS8vIE91dHB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encNCi0vLw0KLXBzXzRfMA0KLWRjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQNCi1kY2xfcmVzb3VyY2VfdGV4dHVyZTNkIChzaW50LHNpbnQsc2ludCxzaW50KSB0MA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6DQotZGNsX291dHB1dCBvMC54eXp3DQotZGNsX3RlbXBzIDENCi1kY2xfaW5kZXhhYmxlVGVtcCB4MFs2XSwgNA0KLXJlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3DQotdXRvZiByMC54eXosIHIwLnh5engNCi1tdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4DQotZnRvaSByMC54eXosIHIwLnh5engNCi1tb3YgcjAudywgbCgwKQ0KLWxkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encNCi1tb3YgeDBbMF0ueCwgcjAueA0KLW1vdiB4MFsxXS54LCByMC55DQotbW92IHgwWzJdLngsIHIwLnoNCi1tb3YgeDBbM10ueCwgcjAudw0KLW1vdiB4MFs0XS54LCBsKDApDQotbW92IHgwWzVdLngsIGwoMSkNCi1tb3YgcjAueCwgY2IwWzBdLngNCi1tb3YgbzAueCwgeDBbcjAueCArIDBdLngNCi1tb3YgcjAueCwgY2IwWzBdLnkNCi1tb3YgbzAueSwgeDBbcjAueCArIDBdLngNCi1tb3YgcjAueCwgY2IwWzBdLnoNCi1tb3YgbzAueiwgeDBbcjAueCArIDBdLngNCi1tb3YgcjAueCwgY2IwWzBdLncNCi1tb3YgbzAudywgeDBbcjAueCArIDBdLngNCi1yZXQgDQotLy8gQXBwcm94aW1hdGVseSAyMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX1BTX1N3aXp6bGVJM0RbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAyNDksIDE3OCwgMjQ3LCAxNDEsIDI0OSwgMTE1LCAyNDksIDI5LCAgMTA1LCAyNTAsIDIwMiwgMTUxLCA0MywgIDAsICAgMjA2LA0KLSAgICAyNTEsIDEsICAgMCwgICAwLCAgIDAsICAgMjAwLCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjAsICAxLA0KLSAgICAwLCAgIDAsICAgMTk2LCAxLCAgIDAsICAgMCwgICAyNDgsIDEsICAgMCwgICAwLCAgIDc2LCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAwLA0KLSAgICAxLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyNCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA0LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMTMsICAwLCAgIDAsICAgMCwgICAxMDMsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgNTEsICA2OCwgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA4MCwNCi0gICAgMTE0LCAxMTEsIDExMiwgMTAxLCAxMTQsIDExNiwgMTA1LCAxMDEsIDExNSwgMCwgICAxNzEsIDE3MSwgMTcxLCAxMDMsIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDE0OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLA0KLSAgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywNCi0gICAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsDQotICAgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNzYsICAyLCAgIDAsICAgMCwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTQ3LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1MSwgIDUxLCAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAzNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDEyOCwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LA0KLSAgICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsDQotICAgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIxLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfU3dpenpsZUkzRCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oCisvLyAgICBTd2l6emxlMTEuaGxzbAorLy8KKy8vCisvLyBCdWZmZXIgRGVmaW5pdGlvbnM6IAorLy8KKy8vIGNidWZmZXIgU3dpenpsZVByb3BlcnRpZXMKKy8vIHsKKy8vCisvLyAgIHVpbnQ0IFN3aXp6bGVJbmRpY2VzOyAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2CisvLworLy8gfQorLy8KKy8vCisvLyBSZXNvdXJjZSBCaW5kaW5nczoKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQorLy8gVGV4dHVyZUkzRCAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICBzaW50NCAgICAgICAgICAzZCAgICAwICAgICAgICAxCisvLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDEKKy8vCisvLworLy8KKy8vIElucHV0IHNpZ25hdHVyZToKKy8vCisvLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0KKy8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgCisvLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICAgICAgCisvLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IAorLy8KKy8vCisvLyBPdXRwdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfVEFSR0VUICAgICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgVEFSR0VUICAgIGludCAgIHh5encKKy8vCitwc180XzAKK2RjbF9jb25zdGFudGJ1ZmZlciBjYjBbMV0sIGltbWVkaWF0ZUluZGV4ZWQKK2RjbF9yZXNvdXJjZV90ZXh0dXJlM2QgKHNpbnQsc2ludCxzaW50LHNpbnQpIHQwCitkY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5egorZGNsX291dHB1dCBvMC54eXp3CitkY2xfdGVtcHMgMQorZGNsX2luZGV4YWJsZVRlbXAgeDBbNl0sIDQKK3Jlc2luZm9fdWludCByMC54eXp3LCBsKDApLCB0MC54eXp3Cit1dG9mIHIwLnh5eiwgcjAueHl6eAorbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eAorZnRvaSByMC54eXosIHIwLnh5engKK21vdiByMC53LCBsKDApCitsZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3Cittb3YgeDBbMF0ueCwgcjAueAorbW92IHgwWzFdLngsIHIwLnkKK21vdiB4MFsyXS54LCByMC56Cittb3YgeDBbM10ueCwgcjAudworbW92IHgwWzRdLngsIGwoMCkKK21vdiB4MFs1XS54LCBsKDEpCittb3YgcjAueCwgY2IwWzBdLngKK21vdiBvMC54LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS55Cittb3YgbzAueSwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0uegorbW92IG8wLnosIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLncKK21vdiBvMC53LCB4MFtyMC54ICsgMF0ueAorcmV0IAorLy8gQXBwcm94aW1hdGVseSAyMSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX1BTX1N3aXp6bGVJM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDI0OSwgMTc4LCAyNDcsIDE0MSwgMjQ5LCAxMTUsIDI0OSwgMjksICAxMDUsIDI1MCwgMjAyLCAxNTEsIDQzLCAgMCwgICAyMDYsCisgICAgMjUxLCAxLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDYwLCAgMSwKKyAgICAwLCAgIDAsICAgMTk2LCAxLCAgIDAsICAgMCwgICAyNDgsIDEsICAgMCwgICAwLCAgIDc2LCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIwNCwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDEwMywgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDczLCAgNTEsICA2OCwgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA4MCwKKyAgICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxNzEsIDEwMywgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxNDgsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE3MiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsIDk5LCAgMTAxLCAxMTUsIDAsCisgICAgMTcxLCAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDEyOCwgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICA3LCAgIDcsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDgzLCAgODYsCisgICAgOTUsICA4MiwgIDY5LCAgNzgsICA2OCwgIDY5LCAgODIsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICA2NSwgIDgyLCAgODIsICA2NSwgIDg5LCAgNzMsCisgICAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsCisgICAgNDQsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwgICAwLCAgIDAsICAgODMsICA4NiwKKyAgICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNzYsICAyLCAgIDAsICAgMCwgICA2NCwKKyAgICAwLCAgIDAsICAgMCwgICAxNDcsIDAsICAgMCwgICAwLCAgIDg5LCAgMCwgICAwLCAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgODgsICA0MCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTEsICA1MSwgIDAsCisgICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNSwgMCwgICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgNjEsICAxNiwgIDAsICAgNywgICAyNDIsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNSwgICAxMzAsIDAsICAgMTYsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LCAgIDI0MiwgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwKKyAgICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwKKyAgICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAzNCwKKyAgICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsICAxMjgsIDMyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwKKyAgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsICAgODMsICA4NCwKKyAgICA2NSwgIDg0LCAgMTE2LCAwLCAgIDAsICAgMCwgICAyMSwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGV1aTJkYXJyYXlwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGV1aTJkYXJyYXlwcy5oCmluZGV4IDUxMGVlMTUuLmU4NDBhZDggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxldWkyZGFycmF5cHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpMmRhcnJheXBzLmgKQEAgLTEsMTQ0ICsxLDE0NCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlVUkyREFycmF5IC9UIHBzXzRfMCAvRmgNCi0vLyAgICBjb21waWxlZFxzd2l6emxldWkyZGFycmF5cHMuaCBTd2l6emxlMTEuaGxzbA0KLS8vDQotLy8NCi0vLyBCdWZmZXIgRGVmaW5pdGlvbnM6IA0KLS8vDQotLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcw0KLS8vIHsNCi0vLw0KLS8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYNCi0vLw0KLS8vIH0NCi0vLw0KLS8vDQotLy8gUmVzb3VyY2UgQmluZGluZ3M6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgRm9ybWF0ICAgICAgICAgRGltIFNsb3QgRWxlbWVudHMNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLSAtLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0gLS0tLS0tLS0NCi0vLyBUZXh0dXJlVUkyREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDENCi0vLyBTd2l6emxlUHJvcGVydGllcyAgICAgICAgICAgICAgICAgY2J1ZmZlciAgICAgIE5BICAgICAgICAgIE5BICAgIDAgICAgICAgIDENCi0vLw0KLS8vDQotLy8NCi0vLyBJbnB1dCBzaWduYXR1cmU6DQotLy8NCi0vLyBOYW1lICAgICAgICAgICAgICAgICBJbmRleCAgIE1hc2sgUmVnaXN0ZXIgU3lzVmFsdWUgRm9ybWF0ICAgVXNlZA0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tDQotLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICANCi0vLyBTVl9SRU5ERVJUQVJHRVRBUlJBWUlOREVYICAgICAwICAgeCAgICAgICAgICAgMSAgUlRJTkRFWCAgIHVpbnQgICB4ICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eXogICAgICAgICAyICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmRhcnJheSAodWludCx1aW50LHVpbnQsdWludCkgdDANCi1kY2xfaW5wdXRfcHNfc2l2IGNvbnN0YW50IHYxLngsIHJlbmRlcnRhcmdldF9hcnJheV9pbmRleA0KLWRjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkNCi1kY2xfb3V0cHV0IG8wLnh5encNCi1kY2xfdGVtcHMgMQ0KLWRjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0DQotcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encNCi11dG9mIHIwLnh5LCByMC54eXh4DQotbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4DQotZnRvaSByMC54eSwgcjAueHl4eA0KLW1vdiByMC56LCB2MS54DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEpDQotbW92IHIwLngsIGNiMFswXS54DQotbW92IG8wLngsIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS55DQotbW92IG8wLnksIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS56DQotbW92IG8wLnosIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS53DQotbW92IG8wLncsIHgwW3IwLnggKyAwXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMjIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19Td2l6emxlVUkyREFycmF5W10gPSB7DQotICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjUzLCAyMTksIDEzMiwgMTM4LCAyMjcsIDE2NCwgMTQzLCAxMzIsIDIsICAgMTIzLCAxMTYsIDAsICAgMTIsICAxMDMsIDIwNywNCi0gICAgNiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI0MCwgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDY0LCAgMSwNCi0gICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgMjUyLCAxLCAgIDAsICAgMCwgICAxMTYsIDQsICAgMCwgICAwLCAgIDgyLCAgNjgsICA2OSwgIDcwLCAgNCwNCi0gICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIwOCwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwNCi0gICAgODQsICAxMDEsIDEyMCwgMTE2LCAxMTcsIDExNCwgMTAxLCA4NSwgIDczLCAgNTAsICA2OCwgIDY1LCAgMTE0LCAxMTQsIDk3LCAgMTIxLCAwLCAgIDgzLCAgMTE5LA0KLSAgICAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTA5LCAwLA0KLSAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxNTIsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNzYsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLA0KLSAgICAxOTIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsDQotICAgIDk5LCAgMTAxLCAxMTUsIDAsICAgMTcxLCAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLA0KLSAgICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywNCi0gICAgNDYsICA1MCwgIDU3LCAgNDYsICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsDQotICAgIDc4LCAgMTI4LCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDgsICAgMCwgICAwLCAgIDAsICAgODAsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLA0KLSAgICAxLCAgIDEsICAgMCwgICAwLCAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLA0KLSAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwNCi0gICAgNzgsICAwLCAgIDgzLCAgODYsICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsDQotICAgIDgyLCAgNjUsICA4OSwgIDczLCAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwNCi0gICAgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE1LCAgMCwNCi0gICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgMTEyLA0KLSAgICAyLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODgsICA2NCwgIDAsICAgNCwgICAwLCAgIDExMiwgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDY4LCAgNjgsICAwLCAgIDAsICAgMTAwLCA4LCAgIDAsICAgNCwgICAxOCwgIDE2LCAgMTYsICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLA0KLSAgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsDQotICAgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEwNSwgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDY2LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LA0KLSAgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwNCi0gICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNDIsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwNCi0gICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTgsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAyNiwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwNCi0gICAgNywgICAzNCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsDQotICAgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLA0KLSAgICA0OCwgIDMyLCAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLA0KLSAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMjIsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTEKKy8vCisvLworLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlVUkyREFycmF5IC9UIHBzXzRfMCAvRmgKKy8vICAgIGNvbXBpbGVkXHN3aXp6bGV1aTJkYXJyYXlwcy5oIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkyREFycmF5ICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAyZGFycmF5ICAgIDAgICAgICAgIDEKKy8vIFN3aXp6bGVQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgIHggICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX3Jlc291cmNlX3RleHR1cmUyZGFycmF5ICh1aW50LHVpbnQsdWludCx1aW50KSB0MAorZGNsX2lucHV0X3BzX3NpdiBjb25zdGFudCB2MS54LCByZW5kZXJ0YXJnZXRfYXJyYXlfaW5kZXgKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0CityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2Mi54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAueiwgdjEueAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMSkKK21vdiByMC54LCBjYjBbMF0ueAorbW92IG8wLngsIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLnkKK21vdiBvMC55LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS56Cittb3YgbzAueiwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0udworbW92IG8wLncsIHgwW3IwLnggKyAwXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfU3dpenpsZVVJMkRBcnJheVtdID0geworICAgIDY4LCAgODgsICA2NiwgIDY3LCAgMjUzLCAyMTksIDEzMiwgMTM4LCAyMjcsIDE2NCwgMTQzLCAxMzIsIDIsICAgMTIzLCAxMTYsIDAsICAgMTIsICAxMDMsIDIwNywKKyAgICA2LCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjQwLCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjQsICAxLAorICAgIDAsICAgMCwgICAyMDAsIDEsICAgMCwgICAwLCAgIDI1MiwgMSwgICAwLCAgIDAsICAgMTE2LCA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDQsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA4LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgMTA5LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDUwLCAgNjgsICA2NSwgIDExNCwgMTE0LCA5NywgIDEyMSwgMCwgICA4MywgIDExOSwKKyAgICAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTA5LCAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDE1MiwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTc2LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwKKyAgICAxOTIsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsCisgICAgOTksICAxMDEsIDExNSwgMCwgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywKKyAgICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NywKKyAgICA0NiwgIDUwLCAgNTcsICA0NiwgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwKKyAgICA3OCwgIDEyOCwgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDkyLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsCisgICAgMSwgICAxLCAgIDAsICAgMCwgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgNywgICAzLCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwKKyAgICA3OCwgIDAsICAgODMsICA4NiwgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwKKyAgICA4MiwgIDY1LCAgODksICA3MywgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsCisgICAgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLAorICAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDExMiwKKyAgICAyLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDE1NiwgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsICAgNCwgICA3MCwgIDE0MiwgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4OCwgIDY0LCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA2OCwgIDY4LCAgMCwgICAwLCAgIDEwMCwgOCwgICAwLCAgIDQsICAgMTgsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwKKyAgICAwLCAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICA1MCwgIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA1LCAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNTYsICAwLCAgIDAsICAgNywgICA1MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgNjYsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTYsICAxNiwgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA1LCAgIDEzMCwKKyAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0NSwgIDAsICAgMCwgICA3LAorICAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LAorICAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwKKyAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0LAorICAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLAorICAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDIsCisgICAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxMzAsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsCisgICAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwKKyAgICA4MywgIDg0LCAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMjIsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxldWkyZHBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpMmRwcy5oCmluZGV4IGE4NzEwODIuLjIzMTZiMjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxldWkyZHBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGV1aTJkcHMuaApAQCAtMSwxMzcgKzEsMTM3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yOS45NTIuMzExMQ0KLS8vDQotLy8NCi0vLyAgIGZ4YyAvbm9sb2dvIC9FIFBTX1N3aXp6bGVVSTJEIC9UIHBzXzRfMCAvRmggY29tcGlsZWRcc3dpenpsZXVpMmRwcy5oDQotLy8gICAgU3dpenpsZTExLmhsc2wNCi0vLw0KLS8vDQotLy8gQnVmZmVyIERlZmluaXRpb25zOiANCi0vLw0KLS8vIGNidWZmZXIgU3dpenpsZVByb3BlcnRpZXMNCi0vLyB7DQotLy8NCi0vLyAgIHVpbnQ0IFN3aXp6bGVJbmRpY2VzOyAgICAgICAgICAgICAgLy8gT2Zmc2V0OiAgICAwIFNpemU6ICAgIDE2DQotLy8NCi0vLyB9DQotLy8NCi0vLw0KLS8vIFJlc291cmNlIEJpbmRpbmdzOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgIEZvcm1hdCAgICAgICAgIERpbSBTbG90IEVsZW1lbnRzDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tDQotLy8gVGV4dHVyZVVJMkQgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUgICB1aW50NCAgICAgICAgICAyZCAgICAwICAgICAgICAxDQotLy8gU3dpenpsZVByb3BlcnRpZXMgICAgICAgICAgICAgICAgIGNidWZmZXIgICAgICBOQSAgICAgICAgICBOQSAgICAwICAgICAgICAxDQotLy8NCi0vLw0KLS8vDQotLy8gSW5wdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1BPU0lUSU9OICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgICAgIFBPUyAgZmxvYXQgICAgICAgDQotLy8gVEVYQ09PUkQgICAgICAgICAgICAgICAgIDAgICB4eSAgICAgICAgICAxICAgICBOT05FICBmbG9hdCAgIHh5ICANCi0vLw0KLS8vDQotLy8gT3V0cHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dw0KLS8vDQotcHNfNF8wDQotZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZA0KLWRjbF9yZXNvdXJjZV90ZXh0dXJlMmQgKHVpbnQsdWludCx1aW50LHVpbnQpIHQwDQotZGNsX2lucHV0X3BzIGxpbmVhciB2MS54eQ0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotZGNsX2luZGV4YWJsZVRlbXAgeDBbNl0sIDQNCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHksIHIwLnh5eHgNCi1tdWwgcjAueHksIHIwLnh5eHgsIHYxLnh5eHgNCi1mdG9pIHIwLnh5LCByMC54eXh4DQotbW92IHIwLnp3LCBsKDAsMCwwLDApDQotbGQgcjAueHl6dywgcjAueHl6dywgdDAueHl6dw0KLW1vdiB4MFswXS54LCByMC54DQotbW92IHgwWzFdLngsIHIwLnkNCi1tb3YgeDBbMl0ueCwgcjAueg0KLW1vdiB4MFszXS54LCByMC53DQotbW92IHgwWzRdLngsIGwoMCkNCi1tb3YgeDBbNV0ueCwgbCgxKQ0KLW1vdiByMC54LCBjYjBbMF0ueA0KLW1vdiBvMC54LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueQ0KLW1vdiBvMC55LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0ueg0KLW1vdiBvMC56LCB4MFtyMC54ICsgMF0ueA0KLW1vdiByMC54LCBjYjBbMF0udw0KLW1vdiBvMC53LCB4MFtyMC54ICsgMF0ueA0KLXJldCANCi0vLyBBcHByb3hpbWF0ZWx5IDIxIGluc3RydWN0aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfUFNfU3dpenpsZVVJMkRbXSA9IHsNCi0gICAgNjgsICA4OCwgIDY2LCAgNjcsICAxNDAsIDU1LCAgMTUwLCAxNzksIDEzMywgOSwgICAyNTAsIDI0OSwgMjAwLCAxMDYsIDEyMSwgMTc4LCA4NiwgIDIxNSwgNTksDQotICAgIDEwOSwgMSwgICAwLCAgIDAsICAgMCwgICAxNjQsIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA2MCwgIDEsDQotICAgIDAsICAgMCwgICAxNDgsIDEsICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgNDAsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMDQsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDUwLCAgNjgsICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwNCi0gICAgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDE0OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLA0KLSAgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgODAsICAwLCAgIDAsDQotICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMywgICAwLCAgIDAsDQotICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLA0KLSAgICA2OCwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzksICA4MywgIDcxLCAgNzgsICA0NCwgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLA0KLSAgICAwLCAgIDAsICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsDQotICAgIDgzLCAgNzIsICA2OCwgIDgyLCAgODgsICAyLCAgIDAsICAgMCwgICA2NCwgIDAsICAgMCwgICAwLCAgIDE1MCwgMCwgICAwLCAgIDAsICAgODksICAwLCAgIDAsDQotICAgIDQsICAgNzAsICAxNDIsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODgsICAyNCwgIDAsICAgNCwgICAwLCAgIDExMiwNCi0gICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwNCi0gICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA4NiwgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgNzAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgNTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwNCi0gICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDUwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDgsICAgMTk0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgNjQsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywNCi0gICAgMjQyLCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTQsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsDQotICAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsDQotICAgIDcsICAgMzQsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLA0KLSAgICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICA2NiwgIDMyLCAgMTYsICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwNCi0gICAgNDgsICAzMiwgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjIsICAwLCAgIDAsICAgMSwNCi0gICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIxLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfU3dpenpsZVVJMkQgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxzd2l6emxldWkyZHBzLmgKKy8vICAgIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkyRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDJkICAgIDAgICAgICAgIDEKKy8vIFN3aXp6bGVQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHkgICAgICAgICAgMSAgICAgTk9ORSAgZmxvYXQgICB4eSAgCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX3Jlc291cmNlX3RleHR1cmUyZCAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjEueHkKK2RjbF9vdXRwdXQgbzAueHl6dworZGNsX3RlbXBzIDEKK2RjbF9pbmRleGFibGVUZW1wIHgwWzZdLCA0CityZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dwordXRvZiByMC54eSwgcjAueHl4eAorbXVsIHIwLnh5LCByMC54eXh4LCB2MS54eXh4CitmdG9pIHIwLnh5LCByMC54eXh4Cittb3YgcjAuencsIGwoMCwwLDAsMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMSkKK21vdiByMC54LCBjYjBbMF0ueAorbW92IG8wLngsIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLnkKK21vdiBvMC55LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS56Cittb3YgbzAueiwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0udworbW92IG8wLncsIHgwW3IwLnggKyAwXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIxIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfU3dpenpsZVVJMkRbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE0MCwgNTUsICAxNTAsIDE3OSwgMTMzLCA5LCAgIDI1MCwgMjQ5LCAyMDAsIDEwNiwgMTIxLCAxNzgsIDg2LCAgMjE1LCA1OSwKKyAgICAxMDksIDEsICAgMCwgICAwLCAgIDAsICAgMTY0LCA0LCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDUyLCAgMCwgICAwLCAgIDAsICAgNjAsICAxLAorICAgIDAsICAgMCwgICAxNDgsIDEsICAgMCwgICAwLCAgIDIwMCwgMSwgICAwLCAgIDAsICAgNDAsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDAsCisgICAgMSwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjQsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMjU1LCAyNTUsIDAsICAgMSwgICAwLCAgIDAsICAgMjA0LCAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDEzLCAgMCwgICAwLCAgIDAsICAgMTA0LCAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDUwLCAgNjgsICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwKKyAgICA4MCwgIDExNCwgMTExLCAxMTIsIDEwMSwgMTE0LCAxMTYsIDEwNSwgMTAxLCAxMTUsIDAsICAgMTcxLCAxNzEsIDEwNCwgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxNDgsIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE3MiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgODMsICAxMTksIDEwNSwgMTIyLCAxMjIsIDEwOCwgMTAxLCA3MywgIDExMCwgMTAwLCAxMDUsIDk5LCAgMTAxLCAxMTUsIDAsCisgICAgMTcxLCAxLCAgIDAsICAgMTksICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDc3LCAgMTA1LAorICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwKKyAgICA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTcsICA0NiwgIDUwLCAgNTcsICA0NiwKKyAgICA1NywgIDUzLCAgNTAsICA0NiwgIDUxLCAgNDksICA0OSwgIDQ5LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3MywgIDgzLCAgNzEsICA3OCwgIDgwLCAgMCwgICAwLAorICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDY4LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAzLCAgIDMsICAgMCwgICAwLAorICAgIDgzLCAgODYsICA5NSwgIDgwLCAgNzksICA4MywgIDczLCAgODQsICA3MywgIDc5LCAgNzgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLAorICAgIDY4LCAgMCwgICAxNzEsIDE3MSwgMTcxLCA3OSwgIDgzLCAgNzEsICA3OCwgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsCisgICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsCisgICAgODMsICA3MiwgIDY4LCAgODIsICA4OCwgIDIsICAgMCwgICAwLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMTUwLCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwKKyAgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgMjQsICAwLCAgIDQsICAgMCwgICAxMTIsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNjgsICA2OCwgIDAsICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDUwLCAgMTYsICAxNiwgIDAsICAgMSwKKyAgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDQsIDAsICAgMCwgICAyLAorICAgIDEsICAgMCwgICAwLCAgIDAsICAgMTA1LCAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsCisgICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDg2LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDUwLCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNiwgIDE2LCAgMCwgICAxLCAgIDAsICAgMCwKKyAgICAwLCAgIDI3LCAgMCwgICAwLCAgIDUsICAgNTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA4LCAgIDE5NCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDY0LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywKKyAgICAyNDIsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAyNiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwKKyAgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA1OCwgIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsCisgICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAxOCwgIDMyLCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICA0OCwgIDMyLCAgNCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAyNiwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwKKyAgICA3LCAgIDM0LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLAorICAgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLAorICAgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDYyLCAgMCwgICAwLCAgIDEsCisgICAgODMsICA4NCwgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIxLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICAxMCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpM2Rwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGV1aTNkcHMuaAppbmRleCAyODAwNGVkLi42MDg4MTNlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpM2Rwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxldWkzZHBzLmgKQEAgLTEsMTQwICsxLDE0MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjkuOTUyLjMxMTENCi0vLw0KLS8vDQotLy8gICBmeGMgL25vbG9nbyAvRSBQU19Td2l6emxlVUkzRCAvVCBwc180XzAgL0ZoIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaA0KLS8vICAgIFN3aXp6bGUxMS5obHNsDQotLy8NCi0vLw0KLS8vIEJ1ZmZlciBEZWZpbml0aW9uczogDQotLy8NCi0vLyBjYnVmZmVyIFN3aXp6bGVQcm9wZXJ0aWVzDQotLy8gew0KLS8vDQotLy8gICB1aW50NCBTd2l6emxlSW5kaWNlczsgICAgICAgICAgICAgIC8vIE9mZnNldDogICAgMCBTaXplOiAgICAxNg0KLS8vDQotLy8gfQ0KLS8vDQotLy8NCi0vLyBSZXNvdXJjZSBCaW5kaW5nczoNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLSAtLS0tLS0tLQ0KLS8vIFRleHR1cmVVSTNEICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlICAgdWludDQgICAgICAgICAgM2QgICAgMCAgICAgICAgMQ0KLS8vIFN3aXp6bGVQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQ0KLS8vDQotLy8NCi0vLw0KLS8vIElucHV0IHNpZ25hdHVyZToNCi0vLw0KLS8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLS0tIC0tLS0tLS0tIC0tLS0tLS0tIC0tLS0tLSAtLS0tLS0NCi0vLyBTVl9QT1NJVElPTiAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICAgICBQT1MgIGZsb2F0ICAgICAgIA0KLS8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICANCi0vLyBURVhDT09SRCAgICAgICAgICAgICAgICAgMCAgIHh5eiAgICAgICAgIDIgICAgIE5PTkUgIGZsb2F0ICAgeHl6IA0KLS8vDQotLy8NCi0vLyBPdXRwdXQgc2lnbmF0dXJlOg0KLS8vDQotLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQ0KLS8vIFNWX1RBUkdFVCAgICAgICAgICAgICAgICAwICAgeHl6dyAgICAgICAgMCAgIFRBUkdFVCAgIHVpbnQgICB4eXp3DQotLy8NCi1wc180XzANCi1kY2xfY29uc3RhbnRidWZmZXIgY2IwWzFdLCBpbW1lZGlhdGVJbmRleGVkDQotZGNsX3Jlc291cmNlX3RleHR1cmUzZCAodWludCx1aW50LHVpbnQsdWludCkgdDANCi1kY2xfaW5wdXRfcHMgbGluZWFyIHYyLnh5eg0KLWRjbF9vdXRwdXQgbzAueHl6dw0KLWRjbF90ZW1wcyAxDQotZGNsX2luZGV4YWJsZVRlbXAgeDBbNl0sIDQNCi1yZXNpbmZvX3VpbnQgcjAueHl6dywgbCgwKSwgdDAueHl6dw0KLXV0b2YgcjAueHl6LCByMC54eXp4DQotbXVsIHIwLnh5eiwgcjAueHl6eCwgdjIueHl6eA0KLWZ0b2kgcjAueHl6LCByMC54eXp4DQotbW92IHIwLncsIGwoMCkNCi1sZCByMC54eXp3LCByMC54eXp3LCB0MC54eXp3DQotbW92IHgwWzBdLngsIHIwLngNCi1tb3YgeDBbMV0ueCwgcjAueQ0KLW1vdiB4MFsyXS54LCByMC56DQotbW92IHgwWzNdLngsIHIwLncNCi1tb3YgeDBbNF0ueCwgbCgwKQ0KLW1vdiB4MFs1XS54LCBsKDEpDQotbW92IHIwLngsIGNiMFswXS54DQotbW92IG8wLngsIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS55DQotbW92IG8wLnksIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS56DQotbW92IG8wLnosIHgwW3IwLnggKyAwXS54DQotbW92IHIwLngsIGNiMFswXS53DQotbW92IG8wLncsIHgwW3IwLnggKyAwXS54DQotcmV0IA0KLS8vIEFwcHJveGltYXRlbHkgMjEgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19QU19Td2l6emxlVUkzRFtdID0gew0KLSAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE2LCAgNjgsICAxNTUsIDk0LCAgMTQ3LCAyMzIsIDMwLCAgMTQ3LCAxMzMsIDI1MywgMTgzLCAyMiwgIDI3LCAgNDcsICAxNDQsDQotICAgIDQ0LCAgMSwgICAwLCAgIDAsICAgMCwgICAyMDAsIDQsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgNTIsICAwLCAgIDAsICAgMCwgICA2MCwgIDEsDQotICAgIDAsICAgMCwgICAxOTYsIDEsICAgMCwgICAwLCAgIDI0OCwgMSwgICAwLCAgIDAsICAgNzYsICA0LCAgIDAsICAgMCwgICA4MiwgIDY4LCAgNjksICA3MCwgIDAsDQotICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAyNTUsIDI1NSwgMCwgICAxLCAgIDAsICAgMCwgICAyMDQsIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDg0LCAgMTAxLCAxMjAsIDExNiwgMTE3LCAxMTQsIDEwMSwgODUsICA3MywgIDUxLCAgNjgsICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwNCi0gICAgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDE0OCwgMCwgICAwLCAgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTcyLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxODgsIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLA0KLSAgICAxNzEsIDEsICAgMCwgICAxOSwgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzcsICAxMDUsDQotICAgIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsDQotICAgIDU3LCAgNTMsICA1MCwgIDQ2LCAgNTEsICA0OSwgIDQ5LCAgNDksICAwLCAgIDE3MSwgMTcxLCAxNzEsIDczLCAgODMsICA3MSwgIDc4LCAgMTI4LCAwLCAgIDAsDQotICAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDgwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDExOCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsDQotICAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDgyLCAgNjksICA3OCwgIDY4LCAgNjksICA4MiwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDY1LCAgODIsICA4MiwgIDY1LCAgODksICA3MywNCi0gICAgNzgsICA2OCwgIDY5LCAgODgsICAwLCAgIDg0LCAgNjksICA4OCwgIDY3LCAgNzksICA3OSwgIDgyLCAgNjgsICAwLCAgIDE3MSwgNzksICA4MywgIDcxLCAgNzgsDQotICAgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA4MywgIDg2LA0KLSAgICA5NSwgIDg0LCAgNjUsICA4MiwgIDcxLCAgNjksICA4NCwgIDAsICAgMTcxLCAxNzEsIDgzLCAgNzIsICA2OCwgIDgyLCAgNzYsICAyLCAgIDAsICAgMCwgICA2NCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTQ3LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICA4OCwgIDQwLCAgMCwgICA0LCAgIDAsICAgMTEyLCAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2OCwgIDY4LCAgMCwNCi0gICAgMCwgICA5OCwgIDE2LCAgMCwgICAzLCAgIDExNCwgMTYsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMDEsIDAsICAgMCwgICAzLCAgIDI0MiwgMzIsDQotICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDYsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICA2MSwgIDE2LCAgMCwgICA3LCAgIDI0MiwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1NiwgIDAsICAgMCwgICA3LCAgIDExNCwgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDIsICAgMTYsICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTgsICAxNiwgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAyNywgIDAsICAgMCwgICA1LCAgIDExNCwgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLCAgIDE2LA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQ1LCAgMCwgICAwLCAgIDcsICAgMjQyLCAwLA0KLSAgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDE0LCAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxMjYsIDE2LCAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAxMCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMjYsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwNCi0gICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsDQotICAgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDU4LCAgMCwgICAxNiwgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNiwgICAxOCwgIDQ4LCAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsDQotICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LA0KLSAgICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMjYsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsICAwLCAgIDAsICAgNywgICAzNCwNCi0gICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA0MiwgIDEyOCwgMzIsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgNjYsICAzMiwgIDE2LCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LA0KLSAgICAwLCAgIDAsICAgNiwgICAxOCwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTgsICAxMjgsIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMTMwLCAzMiwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgNDgsICAzMiwNCi0gICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsDQotICAgIDY1LCAgODQsICAxMTYsIDAsICAgMCwgICAwLCAgIDIxLCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjI5Ljk1Mi4zMTExCisvLworLy8KKy8vICAgZnhjIC9ub2xvZ28gL0UgUFNfU3dpenpsZVVJM0QgL1QgcHNfNF8wIC9GaCBjb21waWxlZFxzd2l6emxldWkzZHBzLmgKKy8vICAgIFN3aXp6bGUxMS5obHNsCisvLworLy8KKy8vIEJ1ZmZlciBEZWZpbml0aW9uczogCisvLworLy8gY2J1ZmZlciBTd2l6emxlUHJvcGVydGllcworLy8geworLy8KKy8vICAgdWludDQgU3dpenpsZUluZGljZXM7ICAgICAgICAgICAgICAvLyBPZmZzZXQ6ICAgIDAgU2l6ZTogICAgMTYKKy8vCisvLyB9CisvLworLy8KKy8vIFJlc291cmNlIEJpbmRpbmdzOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICBGb3JtYXQgICAgICAgICBEaW0gU2xvdCBFbGVtZW50cworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tIC0tLS0tLS0tCisvLyBUZXh0dXJlVUkzRCAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSAgIHVpbnQ0ICAgICAgICAgIDNkICAgIDAgICAgICAgIDEKKy8vIFN3aXp6bGVQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICBjYnVmZmVyICAgICAgTkEgICAgICAgICAgTkEgICAgMCAgICAgICAgMQorLy8KKy8vCisvLworLy8gSW5wdXQgc2lnbmF0dXJlOgorLy8KKy8vIE5hbWUgICAgICAgICAgICAgICAgIEluZGV4ICAgTWFzayBSZWdpc3RlciBTeXNWYWx1ZSBGb3JtYXQgICBVc2VkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tLS0gLS0tLS0tLS0gLS0tLS0tLS0gLS0tLS0tIC0tLS0tLQorLy8gU1ZfUE9TSVRJT04gICAgICAgICAgICAgIDAgICB4eXp3ICAgICAgICAwICAgICAgUE9TICBmbG9hdCAgICAgICAKKy8vIFNWX1JFTkRFUlRBUkdFVEFSUkFZSU5ERVggICAgIDAgICB4ICAgICAgICAgICAxICBSVElOREVYICAgdWludCAgICAgICAKKy8vIFRFWENPT1JEICAgICAgICAgICAgICAgICAwICAgeHl6ICAgICAgICAgMiAgICAgTk9ORSAgZmxvYXQgICB4eXogCisvLworLy8KKy8vIE91dHB1dCBzaWduYXR1cmU6CisvLworLy8gTmFtZSAgICAgICAgICAgICAgICAgSW5kZXggICBNYXNrIFJlZ2lzdGVyIFN5c1ZhbHVlIEZvcm1hdCAgIFVzZWQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0tLSAtLS0tLS0tLSAtLS0tLS0tLSAtLS0tLS0gLS0tLS0tCisvLyBTVl9UQVJHRVQgICAgICAgICAgICAgICAgMCAgIHh5encgICAgICAgIDAgICBUQVJHRVQgICB1aW50ICAgeHl6dworLy8KK3BzXzRfMAorZGNsX2NvbnN0YW50YnVmZmVyIGNiMFsxXSwgaW1tZWRpYXRlSW5kZXhlZAorZGNsX3Jlc291cmNlX3RleHR1cmUzZCAodWludCx1aW50LHVpbnQsdWludCkgdDAKK2RjbF9pbnB1dF9wcyBsaW5lYXIgdjIueHl6CitkY2xfb3V0cHV0IG8wLnh5encKK2RjbF90ZW1wcyAxCitkY2xfaW5kZXhhYmxlVGVtcCB4MFs2XSwgNAorcmVzaW5mb191aW50IHIwLnh5encsIGwoMCksIHQwLnh5encKK3V0b2YgcjAueHl6LCByMC54eXp4CittdWwgcjAueHl6LCByMC54eXp4LCB2Mi54eXp4CitmdG9pIHIwLnh5eiwgcjAueHl6eAorbW92IHIwLncsIGwoMCkKK2xkIHIwLnh5encsIHIwLnh5encsIHQwLnh5encKK21vdiB4MFswXS54LCByMC54Cittb3YgeDBbMV0ueCwgcjAueQorbW92IHgwWzJdLngsIHIwLnoKK21vdiB4MFszXS54LCByMC53Cittb3YgeDBbNF0ueCwgbCgwKQorbW92IHgwWzVdLngsIGwoMSkKK21vdiByMC54LCBjYjBbMF0ueAorbW92IG8wLngsIHgwW3IwLnggKyAwXS54Cittb3YgcjAueCwgY2IwWzBdLnkKK21vdiBvMC55LCB4MFtyMC54ICsgMF0ueAorbW92IHIwLngsIGNiMFswXS56Cittb3YgbzAueiwgeDBbcjAueCArIDBdLngKK21vdiByMC54LCBjYjBbMF0udworbW92IG8wLncsIHgwW3IwLnggKyAwXS54CityZXQgCisvLyBBcHByb3hpbWF0ZWx5IDIxIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfUFNfU3dpenpsZVVJM0RbXSA9IHsKKyAgICA2OCwgIDg4LCAgNjYsICA2NywgIDE2LCAgNjgsICAxNTUsIDk0LCAgMTQ3LCAyMzIsIDMwLCAgMTQ3LCAxMzMsIDI1MywgMTgzLCAyMiwgIDI3LCAgNDcsICAxNDQsCisgICAgNDQsICAxLCAgIDAsICAgMCwgICAwLCAgIDIwMCwgNCwgICAwLCAgIDAsICAgNSwgICAwLCAgIDAsICAgMCwgICA1MiwgIDAsICAgMCwgICAwLCAgIDYwLCAgMSwKKyAgICAwLCAgIDAsICAgMTk2LCAxLCAgIDAsICAgMCwgICAyNDgsIDEsICAgMCwgICAwLCAgIDc2LCAgNCwgICAwLCAgIDAsICAgODIsICA2OCwgIDY5LCAgNzAsICAwLAorICAgIDEsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTI0LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICA0LCAgIDI1NSwgMjU1LCAwLCAgIDEsICAgMCwgICAwLCAgIDIwNCwgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwKKyAgICAwLCAgIDQsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAxMywgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICA4NCwgIDEwMSwgMTIwLCAxMTYsIDExNywgMTE0LCAxMDEsIDg1LCAgNzMsICA1MSwgIDY4LCAgMCwgICA4MywgIDExOSwgMTA1LCAxMjIsIDEyMiwgMTA4LCAxMDEsCisgICAgODAsICAxMTQsIDExMSwgMTEyLCAxMDEsIDExNCwgMTE2LCAxMDUsIDEwMSwgMTE1LCAwLCAgIDE3MSwgMTcxLCAxMDQsIDAsICAgMCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMTQ4LCAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNzIsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTg4LCAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDgzLCAgMTE5LCAxMDUsIDEyMiwgMTIyLCAxMDgsIDEwMSwgNzMsICAxMTAsIDEwMCwgMTA1LCA5OSwgIDEwMSwgMTE1LCAwLAorICAgIDE3MSwgMSwgICAwLCAgIDE5LCAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3NywgIDEwNSwKKyAgICA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU3LCAgNDYsICA1MCwgIDU3LCAgNDYsCisgICAgNTcsICA1MywgIDUwLCAgNDYsICA1MSwgIDQ5LCAgNDksICA0OSwgIDAsICAgMTcxLCAxNzEsIDE3MSwgNzMsICA4MywgIDcxLCAgNzgsICAxMjgsIDAsICAgMCwKKyAgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgOCwgICAwLCAgIDAsICAgMCwgICA4MCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTUsICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwKKyAgICAxMTgsIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLAorICAgIDAsICAgNywgICA3LCAgIDAsICAgMCwgICA4MywgIDg2LCAgOTUsICA4MCwgIDc5LCAgODMsICA3MywgIDg0LCAgNzMsICA3OSwgIDc4LCAgMCwgICA4MywgIDg2LAorICAgIDk1LCAgODIsICA2OSwgIDc4LCAgNjgsICA2OSwgIDgyLCAgODQsICA2NSwgIDgyLCAgNzEsICA2OSwgIDg0LCAgNjUsICA4MiwgIDgyLCAgNjUsICA4OSwgIDczLAorICAgIDc4LCAgNjgsICA2OSwgIDg4LCAgMCwgICA4NCwgIDY5LCAgODgsICA2NywgIDc5LCAgNzksICA4MiwgIDY4LCAgMCwgICAxNzEsIDc5LCAgODMsICA3MSwgIDc4LAorICAgIDQ0LCAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4LCAgIDAsICAgMCwgICAwLCAgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxNSwgIDAsICAgMCwgICAwLCAgIDgzLCAgODYsCisgICAgOTUsICA4NCwgIDY1LCAgODIsICA3MSwgIDY5LCAgODQsICAwLCAgIDE3MSwgMTcxLCA4MywgIDcyLCAgNjgsICA4MiwgIDc2LCAgMiwgICAwLCAgIDAsICAgNjQsCisgICAgMCwgICAwLCAgIDAsICAgMTQ3LCAwLCAgIDAsICAgMCwgICA4OSwgIDAsICAgMCwgICA0LCAgIDcwLCAgMTQyLCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDg4LCAgNDAsICAwLCAgIDQsICAgMCwgICAxMTIsIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDY4LCAgNjgsICAwLAorICAgIDAsICAgOTgsICAxNiwgIDAsICAgMywgICAxMTQsIDE2LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTAxLCAwLCAgIDAsICAgMywgICAyNDIsIDMyLAorICAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMDUsIDAsICAgMCwgICA0LCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgNiwgICAwLCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAwLCAgIDYxLCAgMTYsICAwLCAgIDcsICAgMjQyLCAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgNjQsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA3MCwgIDEyNiwgMTYsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgODYsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDU2LCAgMCwgICAwLCAgIDcsICAgMTE0LCAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMiwgICAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA3MCwgIDE4LCAgMTYsICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMjcsICAwLCAgIDAsICAgNSwgICAxMTQsIDAsICAgMTYsICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAyLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDUsICAgMTMwLCAwLCAgIDE2LAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDY0LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNDUsICAwLCAgIDAsICAgNywgICAyNDIsIDAsCisgICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNzAsICAxNCwgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDcwLCAgMTI2LCAxNiwgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsICAzMiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDI2LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA2LCAgIDE4LCAgNDgsCisgICAgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICA0MiwgIDAsICAgMTYsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgNTQsCisgICAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgNTgsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICA0OCwgIDMyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDUsICAgMCwgICAwLCAgIDAsICAgMSwgICA2NCwgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsCisgICAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICA1NCwgIDAsICAgMCwgICA3LCAgIDE4LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDI2LCAgMTI4LCAzMiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDcsICAgMzQsCisgICAgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LCAgMCwgICAwLCAgIDYsICAgMTgsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDQyLCAgMTI4LCAzMiwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDY2LCAgMzIsICAxNiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsICA0LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTAsICAwLCAgIDE2LCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDU0LAorICAgIDAsICAgMCwgICA2LCAgIDE4LCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1OCwgIDEyOCwgMzIsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICA1NCwgIDAsICAgMCwgICA3LCAgIDEzMCwgMzIsICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMCwgIDQ4LCAgMzIsCisgICAgNCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAxNiwgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2MiwgIDAsICAgMCwgICAxLCAgIDgzLCAgODQsCisgICAgNjUsICA4NCwgIDExNiwgMCwgICAwLCAgIDAsICAgMjEsICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA2LCAgIDAsICAgMCwgICAwLCAgIDEwLCAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA1LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAppbmRleCAwZGQzM2QzLi5iNzQyMGE1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CkBAIC0xLDI2MCArMSwyNjAgQEAKLUBFQ0hPIE9GRg0KLVJFTQ0KLVJFTSBDb3B5cmlnaHQgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLVJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotUkVNDQotDQotUEFUSCAlUHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjFcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4NjslUEFUSCUNCi0NCi1zZXRsb2NhbA0KLXNldCBlcnJvckNvdW50PTANCi1zZXQgc3VjY2Vzc0NvdW50PTANCi1zZXQgZGVidWc9MA0KLQ0KLWlmICIlMSIgPT0gImRlYnVnIiAoDQotICAgIHNldCBkZWJ1Zz0xDQotKQ0KLWlmICIlMSIgPT0gInJlbGVhc2UiICgNCi0gICAgc2V0IGRlYnVnPTANCi0pDQotDQotOjogU2hhZGVycyBmb3IgT3BlbkdMIEVTIDIuMCBhbmQgT3BlbkdMIEVTIDMuMCsNCi06OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzBfbGV2ZWxfOV8zICBjb21waWxlZFxwYXNzdGhyb3VnaDJkMTF2cy5oICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkQgICAgIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEEyRCAgICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hhMmQxMXBzLmggICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJETVMgICBwc180XzEgICAgICAgICAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZG1zMTFwcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyRCAgICAgIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkMTFwcy5oICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJEICAgICAgICBwc180XzBfbGV2ZWxfOV8zICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZDExcHMuaCAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hMdW0yRCAgICAgIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhhMkQgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5oICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEXzQ0NDQgcHNfNF8wX2xldmVsXzlfMyBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZF80NDQ0XzExcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEXzU2NSAgIHBzXzRfMF9sZXZlbF85XzMgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZF81NjVfMTFwcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRfNTU1MSBwc180XzBfbGV2ZWxfOV8zIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkXzU1NTFfMTFwcy5oICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFJlc29sdmVDb2xvci5obHNsIFBTX1Jlc29sdmVDb2xvcjJEIHBzXzRfMSBjb21waWxlZFxyZXNvbHZlY29sb3IyZHBzLmggJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZF9wcy5oICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQl8yRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCXzJEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8yZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QVF9SR0JBXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8yZF9wcy5oICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BNX1JHQkFfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCQV8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QVF9SR0JfMkQgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkX3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BNX1JHQl8yRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCXzJEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9MVU1BXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9MVU1BXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9MVU1BQUxQSEFfMkQgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9MVU1BQUxQSEFfMkQgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZF9wcy5oICAlZGVidWclDQotDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzQ0NDRfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfMmRfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzQ0NDRfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzQ0NDRfMmRfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfNTY1XzJEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkX3BzLmggICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JfNTY1XzJEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzJkX3BzLmggICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzU1NTFfMmRfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfMmRfcHMuaCAlZGVidWclDQotDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFZTX0NsZWFyX0ZMOSAgICAgICAgICAgICB2c180XzBfbGV2ZWxfOV8zICBjb21waWxlZFxjbGVhcjExX2ZsOXZzLmggICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBQU19DbGVhckZsb2F0X0ZMOSAgICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRcY2xlYXJmbG9hdDExX2ZsOXBzLmggICAgICAgICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgVlNfQ2xlYXIgICAgICAgICAgICAgICAgIHZzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyMTF2cy5oICAgICAgICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFZTX011bHRpdmlld19DbGVhciAgICAgICAgICAgICAgICAgdnNfNF8wICAgICAgICAgICAgY29tcGlsZWRcY2xlYXIxMW11bHRpdmlld3ZzLmggICAgICAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgR1NfTXVsdGl2aWV3X0NsZWFyICAgICAgICAgICAgICAgICBnc180XzAgICAgICAgICAgICBjb21waWxlZFxjbGVhcjExbXVsdGl2aWV3Z3MuaCAgICAgICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBQU19DbGVhckRlcHRoICAgICAgICAgICAgcHNfNF8wICAgICAgICAgICAgY29tcGlsZWRcY2xlYXJkZXB0aDExcHMuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDEgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMS5oICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFBTX0NsZWFyRmxvYXQyICAgICAgICAgICBwc180XzAgICAgICAgICAgICBjb21waWxlZFxjbGVhcmZsb2F0MTFwczIuaCAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBQU19DbGVhckZsb2F0MyAgICAgICAgICAgcHNfNF8wICAgICAgICAgICAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMzLmggICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDQgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNC5oICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFBTX0NsZWFyRmxvYXQ1ICAgICAgICAgICBwc180XzAgICAgICAgICAgICBjb21waWxlZFxjbGVhcmZsb2F0MTFwczUuaCAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBQU19DbGVhckZsb2F0NiAgICAgICAgICAgcHNfNF8wICAgICAgICAgICAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHM2LmggICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDcgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNy5oICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFBTX0NsZWFyRmxvYXQ4ICAgICAgICAgICBwc180XzAgICAgICAgICAgICBjb21waWxlZFxjbGVhcmZsb2F0MTFwczguaCAgICAgICAgICAgJWRlYnVnJQ0KLQ0KLTo6IFNoYWRlcnMgZm9yIE9wZW5HTCBFUyAzLjArIG9ubHkNCi06OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAgIHwgVHlwZSAgIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoRGVwdGgyRCAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmggICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBMkRVSSAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmggICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQkEyREkgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRpMTFwcy5oICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkdWkxMXBzLmggICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRpMTFwcy5oICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHMkRVSSAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkcyREkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSMkRVSSAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFIyREkgICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRpMTFwcy5oICAgICAgICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFZTX1Bhc3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTF2cy5oICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgR1NfUGFzc3Rocm91Z2gzRCAgICAgICAgIGdzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMWdzLmggICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2QxMXBzLmggICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZHVpMTFwcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBM0RJICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkaTExcHMuaCAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZDExcHMuaCAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmggICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IzREkgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2RpMTFwcy5oICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkMTFwcy5oICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2R1aTExcHMuaCAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSRzNESSAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmczZGkxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2QxMXBzLmggICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIzZHVpMTFwcy5oICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSM0RJICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0zZDExcHMuaCAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmggJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RfNDQ0NCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RfNDQ0NF8xMXBzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzRF81NjUgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZF81NjVfMTFwcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RfNTU1MSBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RfNTU1MV8xMXBzLmggJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQkEyREFycmF5ICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5MTFwcy5oICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlVSSAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkYXJyYXl1aTExcHMuaCAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheUkgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheWkxMXBzLmggICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQjJEQXJyYXkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXkxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheVVJICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheXVpMTFwcy5oICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5SSAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZGFycmF5aTExcHMuaCAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHMkRBcnJheSAgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRhcnJheTExcHMuaCAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkcyREFycmF5VUkgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGFycmF5dWkxMXBzLmggICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlJICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkYXJyYXlpMTFwcy5oICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFIyREFycmF5ICAgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXlVSSAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkYXJyYXl1aTExcHMuaCAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSMkRBcnJheUkgICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRhcnJheWkxMXBzLmggICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaEx1bTJEQXJyYXkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bTJkYXJyYXkxMXBzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyREFycmF5IHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZGFycmF5MTFwcy5oICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV80NDQ0IHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzQ0NDRfMTFwcy5oICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5XzU2NSAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXlfNTY1XzExcHMuaCAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV81NTUxIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzU1NTFfMTFwcy5oICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfM2RfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQl8zRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfM2RfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JBXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8zZF9wcy5oICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1VNX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JhXzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCXzNEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8zZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1VNX1JHQl8zRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV91bV9yZ2JfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYmFfM2RfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JBXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8zZF9wcy5oICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1VNX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JhXzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCXzNEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3B0X3JnYl8zZF9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1VNX1JHQl8zRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV91bV9yZ2JfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQUFMUEhBXzNEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hYWxwaGFfM2RfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzNEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfM2RfcHMuaCAgJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV80NDQ0XzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0XzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCXzU2NV8zRCAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCXzU2NV8zRCAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8zZF9wcy5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV81NTUxXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzNkX3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV81NTUxXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzNkX3BzLmggJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUE1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUE1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUE1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfVU1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUE1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfVU1fUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfdW1fcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX0xVTUFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfMmRhcnJheV9wcy5oICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9MVU1BQUxQSEFfMkRBcnJheSAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEQXJyYXkgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQkFfNDQ0NF8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV80NDQ0XzJkYXJyYXlfcHMuaCAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzQ0NDRfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCXzU2NV8yREFycmF5ICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkYXJyYXlfcHMuaCAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQl81NjVfMkRBcnJheSAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzU2NV8yZGFycmF5X3BzLmggICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmggJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV81NTUxXzJEQXJyYXkgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfMmRhcnJheV9wcy5oICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVGMkQgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxlZjJkcHMuaCAgICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZUkyRCAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGVpMmRwcy5oICAgICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlVUkyRCAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZXVpMmRwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxlZjNkcHMuaCAgICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZUkzRCAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oICAgICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlVUkzRCAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZXVpM2Rwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVGMkRBcnJheSAgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZUkyREFycmF5ICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlVUkyREFycmF5ICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAgICAgICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDEgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzMS5oICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJVaW50MiAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFydWludDExcHMyLmggICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclVpbnQzICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJ1aW50MTFwczMuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDQgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzNC5oICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJVaW50NSAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFydWludDExcHM1LmggICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclVpbnQ2ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJ1aW50MTFwczYuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDcgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzNy5oICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJVaW50OCAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFydWludDExcHM4LmggICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclNpbnQxICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJzaW50MTFwczEuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDIgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzMi5oICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJTaW50MyAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFyc2ludDExcHMzLmggICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclNpbnQ0ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJzaW50MTFwczQuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDUgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzNS5oICAgICAgICAgICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJTaW50NiAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFyc2ludDExcHM2LmggICAgICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclNpbnQ3ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJzaW50MTFwczcuaCAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDggICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzOC5oICAgICAgICAgICAgJWRlYnVnJQ0KLQ0KLWNhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgICAgVlNfQnVmZmVyVG9UZXh0dXJlICAgICAgIHZzXzRfMCAgIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3ZzLmggICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICAgICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgZ3NfNF8wICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfZ3MuaCAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgICAgIFBTX0J1ZmZlclRvVGV4dHVyZV80RiAgICBwc180XzAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oICAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgICAgUFNfQnVmZmVyVG9UZXh0dXJlXzRJICAgIHBzXzRfMCAgIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRpLmggICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICAgICBQU19CdWZmZXJUb1RleHR1cmVfNFVJICAgcHNfNF8wICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUNCi0NCi1jYWxsOkJ1aWxkU2hhZGVyIFJlc29sdmVEZXB0aFN0ZW5jaWwuaGxzbCAgIFZTX1Jlc29sdmVEZXB0aFN0ZW5jaWwgICB2c180XzEgICBjb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfdnMuaCAgJWRlYnVnJQ0KLWNhbGw6QnVpbGRTaGFkZXIgUmVzb2x2ZURlcHRoU3RlbmNpbC5obHNsICAgUFNfUmVzb2x2ZURlcHRoICAgICAgICAgIHBzXzRfMSAgIGNvbXBpbGVkL3Jlc29sdmVkZXB0aDExX3BzLmggICAgICAgICAlZGVidWclDQotY2FsbDpCdWlsZFNoYWRlciBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wgICBQU19SZXNvbHZlRGVwdGhTdGVuY2lsICAgcHNfNF8xICAgY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3BzLmggICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIFJlc29sdmVEZXB0aFN0ZW5jaWwuaGxzbCAgIFBTX1Jlc29sdmVTdGVuY2lsICAgICAgICBwc180XzEgICBjb21waWxlZC9yZXNvbHZlc3RlbmNpbDExX3BzLmggICAgICAgJWRlYnVnJQ0KLQ0KLWVjaG8uDQotDQotaWYgJXN1Y2Nlc3NDb3VudCUgR1RSIDAgKA0KLSAgIGVjaG8gJXN1Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuDQotKQ0KLWlmICVlcnJvckNvdW50JSBHVFIgMCAoDQotICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29tcGlsYXRpb24gZXJyb3JzLg0KLSkNCi0NCi1lbmRsb2NhbA0KLWV4aXQgL2INCi0NCi06QnVpbGRTaGFkZXINCi1zZXQgaW5wdXQ9JX4xDQotc2V0IGVudHJ5PSV+Mg0KLXNldCB0eXBlPSV+Mw0KLXNldCBvdXRwdXQ9JX40DQotc2V0IGRlYnVnPSV+NQ0KLQ0KLWlmICVkZWJ1ZyUgPT0gMCAoDQotICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiDQotKSBlbHNlICgNCi0gICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KLSkNCi0NCi1zZXQgZXJyb3I9MA0KLSVidWlsZENNRCUgfHwgc2V0IGVycm9yPTENCi0NCi1pZiAlZXJyb3IlID09IDAgKA0KLSAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVzdWNjZXNzQ291bnQlKzENCi0pIGVsc2UgKA0KLSAgICBzZXQgL2EgZXJyb3JDb3VudD0lZXJyb3JDb3VudCUrMQ0KLSkNCi0NCi1leGl0IC9iDQorQEVDSE8gT0ZGCitSRU0KK1JFTSBDb3B5cmlnaHQgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK1JFTSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorUkVNCisKK1BBVEggJVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4xXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODY7JVBBVEglCisKK3NldGxvY2FsCitzZXQgZXJyb3JDb3VudD0wCitzZXQgc3VjY2Vzc0NvdW50PTAKK3NldCBkZWJ1Zz0wCisKK2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJlbGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiBTaGFkZXJzIGZvciBPcGVuR0wgRVMgMi4wIGFuZCBPcGVuR0wgRVMgMy4wKworOjogICAgICAgICAgICAgIHwgSW5wdXQgZmlsZSAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IE91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzBfbGV2ZWxfOV8zICBjb21waWxlZFxwYXNzdGhyb3VnaDJkMTF2cy5oICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hBMkQgICAgICAgIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdoYTJkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJETVMgICBwc180XzEgICAgICAgICAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZG1zMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZDExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJEICAgICAgIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJEICAgICAgICBwc180XzBfbGV2ZWxfOV8zICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZDExcHMuaCAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTJEICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0yZDExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEIHBzXzRfMF9sZXZlbF85XzMgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRfNDQ0NCBwc180XzBfbGV2ZWxfOV8zIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkXzQ0NDRfMTFwcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyRF81NjUgICBwc180XzBfbGV2ZWxfOV8zIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRfNTY1XzExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRfNTU1MSBwc180XzBfbGV2ZWxfOV8zIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkXzU1NTFfMTFwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBSZXNvbHZlQ29sb3IuaGxzbCBQU19SZXNvbHZlQ29sb3IyRCBwc180XzEgY29tcGlsZWRccmVzb2x2ZWNvbG9yMmRwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV8yZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfMmRfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQl8yRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JfMkQgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiXzJkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCQV8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYmFfMmRfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BNX1JHQkFfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9VTV9SR0JBXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiYV8yZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCXzJEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3B0X3JnYl8yZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BNX1JHQl8yRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9VTV9SR0JfMkQgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfdW1fcmdiXzJkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQV8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFfMmRfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9MVU1BXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX0xVTUFBTFBIQV8yRCAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYWFscGhhXzJkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9sdW1hYWxwaGFfMmRfcHMuaCAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQkFfNDQ0NF8yRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8yZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV80NDQ0XzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV80NDQ0XzJkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfNTY1XzJEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfNTY1XzJkX3BzLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQl81NjVfMkQgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRfcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV81NTUxXzJEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiYV81NTUxXzJkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkQgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzU1NTFfMmRfcHMuaCAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBWU19DbGVhcl9GTDkgICAgICAgICAgICAgdnNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRcY2xlYXIxMV9mbDl2cy5oICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBQU19DbGVhckZsb2F0X0ZMOSAgICAgICAgcHNfNF8wX2xldmVsXzlfMyAgY29tcGlsZWRcY2xlYXJmbG9hdDExX2ZsOXBzLmggICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFZTX0NsZWFyICAgICAgICAgICAgICAgICB2c180XzAgICAgICAgICAgICBjb21waWxlZFxjbGVhcjExdnMuaCAgICAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgIFZTX011bHRpdmlld19DbGVhciAgICAgICAgICAgICAgICAgdnNfNF8wICAgICAgICAgICAgY29tcGlsZWRcY2xlYXIxMW11bHRpdmlld3ZzLmggICAgICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICBHU19NdWx0aXZpZXdfQ2xlYXIgICAgICAgICAgICAgICAgIGdzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyMTFtdWx0aXZpZXdncy5oICAgICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJEZXB0aCAgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZGVwdGgxMXBzLmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDEgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMS5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDIgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMi5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDMgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzMy5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDQgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNC5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDUgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNS5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDYgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNi5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDcgICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzNy5oICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgUFNfQ2xlYXJGbG9hdDggICAgICAgICAgIHBzXzRfMCAgICAgICAgICAgIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzOC5oICAgICAgICAgICAlZGVidWclCisKKzo6IFNoYWRlcnMgZm9yIE9wZW5HTCBFUyAzLjArIG9ubHkKKzo6ICAgICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgICAgICB8IEVudHJ5IHBvaW50ICAgICAgICAgICAgfCBUeXBlICAgfCBPdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVidWcgfAorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaERlcHRoMkQgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hkZXB0aDJkMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBMkRVSSAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkdWkxMXBzLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCQTJESSAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQjJEVUkgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRpMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmR1aTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHMkRJICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkaTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSMkRVSSAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUjJESSAgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGkxMXBzLmggICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFZTX1Bhc3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTF2cy5oICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBHU19QYXNzdGhyb3VnaDNEICAgICAgICAgZ3NfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExZ3MuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBM0QgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZHVpMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQkEzREkgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IzRCAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQjNESSAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZGkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSRzNEICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2R1aTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHM0RJICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkaTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSM0QgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIzZHVpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFIzREkgICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2RpMTFwcy5oICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hMdW0zRCAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmggJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEXzQ0NDQgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkXzQ0NDRfMTFwcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzRF81NjUgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZF81NjVfMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEzRF81NTUxIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZF81NTUxXzExcHMuaCAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQkEyREFycmF5ICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5MTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheVVJICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheXVpMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlJICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkYXJyYXlpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHQjJEQXJyYXkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkYXJyYXkxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSR0IyREFycmF5VUkgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZGFycmF5dWkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkdCMkRBcnJheUkgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheWkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFJHMkRBcnJheSAgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRhcnJheTExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSRzJEQXJyYXlVSSAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkYXJyYXl1aTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUkcyREFycmF5SSAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGFycmF5aTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaFIyREFycmF5ICAgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGFycmF5MTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hSMkRBcnJheVVJICAgICAgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRhcnJheXVpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsICAgICAgIFBTX1Bhc3N0aHJvdWdoUjJEQXJyYXlJICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkYXJyYXlpMTFwcy5oICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCAgICAgICBQU19QYXNzdGhyb3VnaEx1bTJEQXJyYXkgICAgICBwc180XzAgICBjb21waWxlZFxwYXNzdGhyb3VnaGx1bTJkYXJyYXkxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgICAgICAgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEQXJyYXkgcHNfNF8wICAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkYXJyYXkxMXBzLmggJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkRBcnJheTExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRBcnJheV80NDQ0IHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGFycmF5XzQ0NDRfMTFwcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyREFycmF5MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEQXJyYXlfNTY1ICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRhcnJheV81NjVfMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEQXJyYXkxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEQXJyYXlfNTU1MSBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRhcnJheV81NTUxXzExcHMuaCAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfM2RfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JhXzNkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCXzNEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8zZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BUX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JhXzNkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JBXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiYV8zZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfM2RfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1BUX1JHQl8zRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wdF9yZ2JfM2RfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfVU1fUkdCXzNEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8zZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1BUX1JHQkFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JhXzNkX3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JBXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiYV8zZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfVU1fUkdCQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfM2RfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1BUX1JHQl8zRCAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wdF9yZ2JfM2RfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JfM0QgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcG1fcmdiXzNkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfVU1fUkdCXzNEICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8zZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX0xVTUFfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9sdW1hXzNkX3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFfM2RfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9MVU1BQUxQSEFfM0QgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8zZF9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX0xVTUFBTFBIQV8zRCAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYWFscGhhXzNkX3BzLmggICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzQ0NDRfM0QgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JhXzQ0NDRfM2RfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQkFfNDQ0NF8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8zZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fUkdCXzU2NV8zRCAgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fcmdiXzU2NV8zZF9wcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JfNTY1XzNEICAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl91bV9yZ2JfNTY1XzNkX3BzLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQkFfNTU1MV8zRCBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8zZF9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV81NTUxXzNEIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV81NTUxXzNkX3BzLmggJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1BNX1JHQkFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfMmRhcnJheV9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfMkRBcnJheSAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvZl9wbV9yZ2JfMmRhcnJheV9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9GX1VNX1JHQl8yREFycmF5ICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JBXzJEQXJyYXkgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JhXzJkYXJyYXlfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1VNX1JHQkFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYmFfMmRhcnJheV9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b1VfUFRfUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b3VfcHRfcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvVV9QTV9SR0JfMkRBcnJheSAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvdV9wbV9yZ2JfMmRhcnJheV9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9VX1VNX1JHQl8yREFycmF5ICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG91X3VtX3JnYl8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiYV8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JBXzJEQXJyYXkgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JhXzJkYXJyYXlfcHMuaCAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1VNX1JHQkFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYmFfMmRhcnJheV9wcy5oICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0lfUFRfUkdCXzJEQXJyYXkgIHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2lfcHRfcmdiXzJkYXJyYXlfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvSV9QTV9SR0JfMkRBcnJheSAgcHNfNF8wIGNvbXBpbGVkXG11bHRpcGx5YWxwaGFfZnRvaV9wbV9yZ2JfMmRhcnJheV9wcy5oICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIE11bHRpcGx5QWxwaGEuaGxzbCBQU19GdG9JX1VNX1JHQl8yREFycmF5ICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9pX3VtX3JnYl8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfcG1fbHVtYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQV8yREFycmF5IHBzXzRfMCBjb21waWxlZFxtdWx0aXBseWFscGhhX2Z0b2ZfdW1fbHVtYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfUE1fTFVNQUFMUEhBXzJEQXJyYXkgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgTXVsdGlwbHlBbHBoYS5obHNsIFBTX0Z0b0ZfVU1fTFVNQUFMUEhBXzJEQXJyYXkgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX2x1bWFhbHBoYV8yZGFycmF5X3BzLmggICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzQ0NDRfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzQ0NDRfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNDQ0NF8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JfNTY1XzJEQXJyYXkgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYl81NjVfMmRhcnJheV9wcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JfNTY1XzJEQXJyYXkgICBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYl81NjVfMmRhcnJheV9wcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9QTV9SR0JBXzU1NTFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3BtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmggJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBNdWx0aXBseUFscGhhLmhsc2wgUFNfRnRvRl9VTV9SR0JBXzU1NTFfMkRBcnJheSBwc180XzAgY29tcGlsZWRcbXVsdGlwbHlhbHBoYV9mdG9mX3VtX3JnYmFfNTU1MV8yZGFycmF5X3BzLmggJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVGMkQgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxlZjJkcHMuaCAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlSTJEICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZVVJMkQgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGV1aTJkcHMuaCAgICAgICAgICAgICAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZUYzRCAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGVmM2Rwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVJM0QgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxlaTNkcHMuaCAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlVUkzRCAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZXVpM2Rwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICAgICAgICBQU19Td2l6emxlRjJEQXJyYXkgICAgICAgcHNfNF8wICAgY29tcGlsZWRcc3dpenpsZWYyZGFycmF5cHMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgICAgICAgUFNfU3dpenpsZUkyREFycmF5ICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgICAgICAgIFBTX1N3aXp6bGVVSTJEQXJyYXkgICAgICBwc180XzAgICBjb21waWxlZFxzd2l6emxldWkyZGFycmF5cHMuaCAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDEgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzMS5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclVpbnQyICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJ1aW50MTFwczIuaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJVaW50MyAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFydWludDExcHMzLmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDQgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzNC5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclVpbnQ1ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJ1aW50MTFwczUuaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJVaW50NiAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFydWludDExcHM2LmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyVWludDcgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnVpbnQxMXBzNy5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclVpbnQ4ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJ1aW50MTFwczguaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJTaW50MSAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFyc2ludDExcHMxLmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDIgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzMi5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclNpbnQzICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJzaW50MTFwczMuaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJTaW50NCAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFyc2ludDExcHM0LmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDUgICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzNS5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICAgICAgICBQU19DbGVhclNpbnQ2ICAgICAgICAgICAgcHNfNF8wICAgY29tcGlsZWRcY2xlYXJzaW50MTFwczYuaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgICAgICAgUFNfQ2xlYXJTaW50NyAgICAgICAgICAgIHBzXzRfMCAgIGNvbXBpbGVkXGNsZWFyc2ludDExcHM3LmggICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgICAgICAgIFBTX0NsZWFyU2ludDggICAgICAgICAgICBwc180XzAgICBjb21waWxlZFxjbGVhcnNpbnQxMXBzOC5oICAgICAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgICAgIFZTX0J1ZmZlclRvVGV4dHVyZSAgICAgICB2c180XzAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICAgICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgZ3NfNF8wICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfZ3MuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgICAgUFNfQnVmZmVyVG9UZXh0dXJlXzRGICAgIHBzXzRfMCAgIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRmLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgICAgIFBTX0J1ZmZlclRvVGV4dHVyZV80SSAgICBwc180XzAgICBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICAgICBQU19CdWZmZXJUb1RleHR1cmVfNFVJICAgcHNfNF8wICAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wgICBWU19SZXNvbHZlRGVwdGhTdGVuY2lsICAgdnNfNF8xICAgY29tcGlsZWQvcmVzb2x2ZWRlcHRoc3RlbmNpbDExX3ZzLmggICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUmVzb2x2ZURlcHRoU3RlbmNpbC5obHNsICAgUFNfUmVzb2x2ZURlcHRoICAgICAgICAgIHBzXzRfMSAgIGNvbXBpbGVkL3Jlc29sdmVkZXB0aDExX3BzLmggICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFJlc29sdmVEZXB0aFN0ZW5jaWwuaGxzbCAgIFBTX1Jlc29sdmVEZXB0aFN0ZW5jaWwgICBwc180XzEgICBjb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfcHMuaCAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBSZXNvbHZlRGVwdGhTdGVuY2lsLmhsc2wgICBQU19SZXNvbHZlU3RlbmNpbCAgICAgICAgcHNfNF8xICAgY29tcGlsZWQvcmVzb2x2ZXN0ZW5jaWwxMV9wcy5oICAgICAgICVkZWJ1ZyUKKworZWNoby4KKworaWYgJXN1Y2Nlc3NDb3VudCUgR1RSIDAgKAorICAgZWNobyAlc3VjY2Vzc0NvdW50JSBzaGFkZXJzIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseS4KKykKK2lmICVlcnJvckNvdW50JSBHVFIgMCAoCisgICBlY2hvIFRoZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBjb21waWxhdGlvbiBlcnJvcnMuCispCisKK2VuZGxvY2FsCitleGl0IC9iCisKKzpCdWlsZFNoYWRlcgorc2V0IGlucHV0PSV+MQorc2V0IGVudHJ5PSV+Mgorc2V0IHR5cGU9JX4zCitzZXQgb3V0cHV0PSV+NAorc2V0IGRlYnVnPSV+NQorCitpZiAlZGVidWclID09IDAgKAorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispIGVsc2UgKAorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykKKworc2V0IGVycm9yPTAKKyVidWlsZENNRCUgfHwgc2V0IGVycm9yPTEKKworaWYgJWVycm9yJSA9PSAwICgKKyAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVzdWNjZXNzQ291bnQlKzEKKykgZWxzZSAoCisgICAgc2V0IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzEKKykKKworZXhpdCAvYgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3ByZW11bHRwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3ByZW11bHRwcy5oCmluZGV4IGU4ZTFkMjcuLjA0ODY4YWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcmVtdWx0cHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHJlbXVsdHBzLmgKQEAgLTEsNTAgKzEsNTAgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NA0KLS8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGFkZDsNCi0vLyAgIGZsb2F0NCBtdWx0Ow0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxDQotLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG11bCByMC54eXosIHIwLncsIHIwDQotICAgIG1vdiByMSwgYzANCi0gICAgbWFkIHIwLCByMCwgcjEsIGMxDQotICAgIG1vdiBvQzAsIHIwDQotDQotLy8gYXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNCBhcml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twcmVtdWx0cHNbXSA9IHsNCi0gICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgNTAsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxNDMsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDEzNiwgMCwNCi0gICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTA4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjAsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAwLCAgIDExNiwgMTAxLCAxMjAsIDAsICAgMTcxLCAxNzEsIDE3MSwgNCwNCi0gICAgMCwgICAxMiwgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCAxMTUsIDk1LCAgNTAsDQotICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LA0KLSAgICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwNCi0gICAgNTQsICA0NiwgIDUxLCAgNDYsICA1NywgIDU0LCAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgIDAsICAgMTcxLCAxNzEsIDE3MSwgMzEsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwNCi0gICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LA0KLSAgICAxNjAsIDUsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMjU1LCAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLA0KLSAgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLA0KLSAgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsDQotICAgIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NAorLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbXVsIHIwLnh5eiwgcjAudywgcjAKKyAgICBtb3YgcjEsIGMwCisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1hdGVseSA1IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNCBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twcmVtdWx0cHNbXSA9IHsKKyAgICAwLCAgIDIsICAgMjU1LCAyNTUsIDI1NCwgMjU1LCA1MCwgIDAsICAgNjcsICA4NCwgIDY1LCAgNjYsICAyOCwgIDAsICAgMCwgICAwLCAgIDE0MywgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsCisgICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDksIDExNywgMTA4LCAxMTYsIDAsICAgMTE2LCAxMDEsIDEyMCwgMCwgICAxNzEsIDE3MSwgMTcxLCA0LAorICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLAorICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LAorICAgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLAorICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA1LCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICA3LCAgIDEyOCwgMCwgICAwLCAgIDI1NSwgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwKKyAgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLAorICAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwKKyAgICAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAppbmRleCBiNGFmN2RhLi4wNjY3M2FlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaApAQCAtMSw0OCArMSw0OCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0DQotLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgYWRkOw0KLS8vICAgZmxvYXQ0IG11bHQ7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxDQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbW92IHIxLCBjMA0KLSAgICBtYWQgcjAsIHIwLCByMSwgYzENCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3BzW10gPSB7DQotICAgIDAsICAgMiwgICAyNTUsIDI1NSwgMjU0LCAyNTUsIDUwLCAgMCwgICA2NywgIDg0LCAgNjUsICA2NiwgIDI4LCAgMCwgICAwLCAgIDAsICAgMTQzLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsDQotICAgIDAsICAgMCwgICA4OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NywgIDEwMCwgMTAwLCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwOSwgMTE3LCAxMDgsIDExNiwgMCwgICAxMTYsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCAxNzEsIDQsDQotICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLA0KLSAgICA5NSwgIDQ4LCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwNCi0gICAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsDQotICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwNCi0gICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0CisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMwCisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0geworICAgIDAsICAgMiwgICAyNTUsIDI1NSwgMjU0LCAyNTUsIDUwLCAgMCwgICA2NywgIDg0LCAgNjUsICA2NiwgIDI4LCAgMCwgICAwLCAgIDAsICAgMTQzLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDEzNiwgMCwKKyAgICAwLCAgIDAsICAgODgsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDEwOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjAsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgOTcsICAxMDAsIDEwMCwgMCwgICAxLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwOSwgMTE3LCAxMDgsIDExNiwgMCwgICAxMTYsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCAxNzEsIDQsCisgICAgMCwgICAxMiwgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCAxMTUsIDk1LCAgNTAsCisgICAgOTUsICA0OCwgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsCisgICAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsCisgICAgNTQsICA0NiwgIDUxLCAgNDYsICA1NywgIDU0LCAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgIDAsICAgMTcxLCAxNzEsIDE3MSwgMzEsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMywgICAxNzYsIDMxLCAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTQ0LAorICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwKKyAgICAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLAorICAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsCisgICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2t1bm11bHRwcy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3VubXVsdHBzLmgKaW5kZXggYTM4NGZhMi4uYWQxNTM2NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3VubXVsdHBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3VubXVsdHBzLmgKQEAgLTEsNTQgKzEsNTQgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NA0KLS8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGFkZDsNCi0vLyAgIGZsb2F0NCBtdWx0Ow0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxDQotLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIHJjcCByMS53LCByMC53DQotICAgIG11bCByMS54eXosIHIwLCByMS53DQotICAgIGNtcCByMC54eXosIC1yMC53LCByMCwgcjENCi0gICAgbW92IHIxLCBjMA0KLSAgICBtYWQgcjAsIHIwLCByMSwgYzENCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3VubXVsdHBzW10gPSB7DQotICAgIDAsICAgMiwgICAyNTUsIDI1NSwgMjU0LCAyNTUsIDUwLCAgMCwgICA2NywgIDg0LCAgNjUsICA2NiwgIDI4LCAgMCwgICAwLCAgIDAsICAgMTQzLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsDQotICAgIDAsICAgMCwgICA4OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NywgIDEwMCwgMTAwLCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwOSwgMTE3LCAxMDgsIDExNiwgMCwgICAxMTYsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCAxNzEsIDQsDQotICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLA0KLSAgICA5NSwgIDQ4LCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwNCi0gICAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsDQotICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCA2LCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICA4LCAgIDEyOCwgMCwgICAwLCAgIDI1NSwgMTI4LCA1LCAgIDAsICAgMCwgICAzLCAgIDEsICAgMCwNCi0gICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDI1NSwgMTI4LCA4OCwgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICA3LCAgIDEyOCwgMCwNCi0gICAgMCwgICAyNTUsIDEyOSwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LA0KLSAgICAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsDQotICAgIDEyOCwgMSwgICAwLCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwNCi0gICAgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0CisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICByY3AgcjEudywgcjAudworICAgIG11bCByMS54eXosIHIwLCByMS53CisgICAgY21wIHIwLnh5eiwgLXIwLncsIHIwLCByMQorICAgIG1vdiByMSwgYzAKKyAgICBtYWQgcjAsIHIwLCByMSwgYzEKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfY29tcG9uZW50bWFza3VubXVsdHBzW10gPSB7CisgICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgNTAsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxNDMsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMywgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMTM2LCAwLAorICAgIDAsICAgMCwgICA4OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTA4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMywgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyMCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NywgIDEwMCwgMTAwLCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAwLCAgIDExNiwgMTAxLCAxMjAsIDAsICAgMTcxLCAxNzEsIDE3MSwgNCwKKyAgICAwLCAgIDEyLCAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDExNSwgOTUsICA1MCwKKyAgICA5NSwgIDQ4LCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwKKyAgICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwKKyAgICA1NCwgIDQ2LCAgNTEsICA0NiwgIDU3LCAgNTQsICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgMCwgICAxNzEsIDE3MSwgMTcxLCAzMSwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsCisgICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LAorICAgIDE2MCwgNiwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgOCwgICAxMjgsIDAsICAgMCwgICAyNTUsIDEyOCwgNSwgICAwLCAgIDAsICAgMywgICAxLCAgIDAsCisgICAgNywgICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDI1NSwgMTI4LCA4OCwgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICA3LCAgIDEyOCwgMCwKKyAgICAwLCAgIDI1NSwgMTI5LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMTUsICAxMjgsCisgICAgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LAorICAgIDEyOCwgMSwgICAwLCAgIDIyOCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwKKyAgICAwLCAgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHJlbXVsdHBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2VwcmVtdWx0cHMuaAppbmRleCBkMmM3MWFhLi4yNzRhNzgyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2VwcmVtdWx0cHMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2VwcmVtdWx0cHMuaApAQCAtMSw1MCArMSw1MCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0DQotLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgYWRkOw0KLS8vICAgZmxvYXQ0IG11bHQ7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxDQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbXVsIHIwLnh5eiwgcjAudywgcjAueA0KLSAgICBtb3YgcjEsIGMwDQotICAgIG1hZCByMCwgcjAsIHIxLCBjMQ0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNSBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDQgYXJpdGhtZXRpYykNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfcHMyMF9sdW1pbmFuY2VwcmVtdWx0cHNbXSA9IHsNCi0gICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgNTAsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxNDMsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDEzNiwgMCwNCi0gICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTA4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjAsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAwLCAgIDExNiwgMTAxLCAxMjAsIDAsICAgMTcxLCAxNzEsIDE3MSwgNCwNCi0gICAgMCwgICAxMiwgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCAxMTUsIDk1LCAgNTAsDQotICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LA0KLSAgICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwNCi0gICAgNTQsICA0NiwgIDUxLCAgNDYsICA1NywgIDU0LCAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgIDAsICAgMTcxLCAxNzEsIDE3MSwgMzEsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwNCi0gICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LA0KLSAgICAxNjAsIDUsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMjU1LCAxMjgsIDAsICAgMCwgICAwLCAgIDEyOCwgMSwgICAwLA0KLSAgICAwLCAgIDIsICAgMSwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLA0KLSAgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsDQotICAgIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NAorLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbXVsIHIwLnh5eiwgcjAudywgcjAueAorICAgIG1vdiByMSwgYzAKKyAgICBtYWQgcjAsIHIwLCByMSwgYzEKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDUgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA0IGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHJlbXVsdHBzW10gPSB7CisgICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgNTAsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxNDMsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMywgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMTM2LCAwLAorICAgIDAsICAgMCwgICA4OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTA4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMywgMCwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDEyMCwgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NywgIDEwMCwgMTAwLCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAwLCAgIDExNiwgMTAxLCAxMjAsIDAsICAgMTcxLCAxNzEsIDE3MSwgNCwKKyAgICAwLCAgIDEyLCAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTIsIDExNSwgOTUsICA1MCwKKyAgICA5NSwgIDQ4LCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwKKyAgICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwKKyAgICA1NCwgIDQ2LCAgNTEsICA0NiwgIDU3LCAgNTQsICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgMCwgICAxNzEsIDE3MSwgMTcxLCAzMSwKKyAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsCisgICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LAorICAgIDE2MCwgNSwgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgNywgICAxMjgsIDAsICAgMCwgICAyNTUsIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsCisgICAgMCwgICAyLCAgIDEsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwKKyAgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsCisgICAgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCmluZGV4IDBmZTNkODUuLjBiZTY2NWMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaApAQCAtMSw1MyArMSw1MyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0DQotLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgYWRkOw0KLS8vICAgZmxvYXQ0IG11bHQ7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxDQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbW92IHIxLnh3LCBjMA0KLSAgICBtYWQgcjAueCwgcjAueCwgcjEueCwgYzEueA0KLSAgICBtYWQgcjAueSwgcjAudywgcjEudywgYzEudw0KLSAgICBtb3YgcjEueHl6LCByMC54DQotICAgIG1vdiByMS53LCByMC55DQotICAgIG1vdiBvQzAsIHIxDQotDQotLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNiBhcml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBzW10gPSB7DQotICAgIDAsICAgMiwgICAyNTUsIDI1NSwgMjU0LCAyNTUsIDUwLCAgMCwgICA2NywgIDg0LCAgNjUsICA2NiwgIDI4LCAgMCwgICAwLCAgIDAsICAgMTQzLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsDQotICAgIDAsICAgMCwgICA4OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDEwOCwgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICA5NywgIDEwMCwgMTAwLCAwLCAgIDEsICAgMCwgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsDQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwOSwgMTE3LCAxMDgsIDExNiwgMCwgICAxMTYsIDEwMSwgMTIwLCAwLCAgIDE3MSwgMTcxLCAxNzEsIDQsDQotICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLA0KLSAgICA5NSwgIDQ4LCAgMCwgICA3NywgIDEwNSwgOTksICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwNCi0gICAgODMsICA3NiwgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsDQotICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLA0KLSAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgICAxNDQsDQotICAgIDAsICAgOCwgICAxNSwgIDE2MCwgNjYsICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDE3NiwgMCwgICA4LCAgIDIyOCwNCi0gICAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICA5LCAgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwNCi0gICAgMSwgICAxMjgsIDAsICAgMCwgICAwLCAgIDEyOCwgMSwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsICAgMCwgICAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwNCi0gICAgMCwgICAyLCAgIDEyOCwgMCwgICAwLCAgIDI1NSwgMTI4LCAxLCAgIDAsICAgMjU1LCAxMjgsIDEsICAgMCwgICAyNTUsIDE2MCwgMSwgICAwLCAgIDAsICAgMiwNCi0gICAgMSwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxMjgsIDEsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDgsICAgMTI4LCAwLCAgIDAsICAgODUsDQotICAgIDEyOCwgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDEsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAgMH07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NAorLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLnh3LCBjMAorICAgIG1hZCByMC54LCByMC54LCByMS54LCBjMS54CisgICAgbWFkIHIwLnksIHIwLncsIHIxLncsIGMxLncKKyAgICBtb3YgcjEueHl6LCByMC54CisgICAgbW92IHIxLncsIHIwLnkKKyAgICBtb3Ygb0MwLCByMQorCisvLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9IHsKKyAgICAwLCAgIDIsICAgMjU1LCAyNTUsIDI1NCwgMjU1LCA1MCwgIDAsICAgNjcsICA4NCwgIDY1LCAgNjYsICAyOCwgIDAsICAgMCwgICAwLCAgIDE0MywgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsCisgICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDksIDExNywgMTA4LCAxMTYsIDAsICAgMTE2LCAxMDEsIDEyMCwgMCwgICAxNzEsIDE3MSwgMTcxLCA0LAorICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLAorICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LAorICAgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLAorICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICA5LCAgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwKKyAgICAxLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsICAgMCwgICAxMjgsIDEsICAgMCwgICAwLCAgIDE2MCwgNCwgICAwLCAgIDAsICAgNCwgICAwLAorICAgIDAsICAgMiwgICAxMjgsIDAsICAgMCwgICAyNTUsIDEyOCwgMSwgICAwLCAgIDI1NSwgMTI4LCAxLCAgIDAsICAgMjU1LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsCisgICAgMSwgICAwLCAgIDcsICAgMTI4LCAwLCAgIDAsICAgMCwgICAxMjgsIDEsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDgsICAgMTI4LCAwLCAgIDAsICAgODUsCisgICAgMTI4LCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMSwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgICAwfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXVubXVsdHBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2V1bm11bHRwcy5oCmluZGV4IDA3MDY5ZWEuLjExMDBkMGIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXVubXVsdHBzLmgKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNldW5tdWx0cHMuaApAQCAtMSw1NCArMSw1NCBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0DQotLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgYWRkOw0KLS8vICAgZmxvYXQ0IG11bHQ7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxDQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBkY2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgcmNwIHIxLncsIHIwLncNCi0gICAgbXVsIHIxLngsIHIwLngsIHIxLncNCi0gICAgY21wIHIwLnh5eiwgLXIwLncsIHIwLngsIHIxLngNCi0gICAgbW92IHIxLCBjMA0KLSAgICBtYWQgcjAsIHIwLCByMSwgYzENCi0gICAgbW92IG9DMCwgcjANCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNldW5tdWx0cHNbXSA9IHsNCi0gICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgNTAsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxNDMsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDIsICAgMjU1LCAyNTUsIDMsICAgMCwgICAwLCAgIDAsICAgMjgsICAwLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDEzNiwgMCwNCi0gICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMTA4LCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgOTIsICAwLCAgIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTMsIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAxMjAsIDAsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAwLCAgIDExNiwgMTAxLCAxMjAsIDAsICAgMTcxLCAxNzEsIDE3MSwgNCwNCi0gICAgMCwgICAxMiwgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCAxMTUsIDk1LCAgNTAsDQotICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LA0KLSAgICA4MywgIDc2LCAgMzIsICA4MywgIDEwNCwgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwNCi0gICAgNTQsICA0NiwgIDUxLCAgNDYsICA1NywgIDU0LCAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgIDAsICAgMTcxLCAxNzEsIDE3MSwgMzEsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwNCi0gICAgMCwgICA4LCAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgIDgsICAgMjI4LA0KLSAgICAxNjAsIDYsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAgIDgsICAgMTI4LCAwLCAgIDAsICAgMjU1LCAxMjgsIDUsICAgMCwgICAwLCAgIDMsICAgMSwgICAwLA0KLSAgICAxLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsICAgMjU1LCAxMjgsIDg4LCAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLA0KLSAgICAwLCAgIDI1NSwgMTI5LCAwLCAgIDAsICAgMCwgICAxMjgsIDEsICAgMCwgICAwLCAgIDEyOCwgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsICAgMTUsICAxMjgsDQotICAgIDAsICAgMCwgICAyMjgsIDE2MCwgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIyOCwNCi0gICAgMTI4LCAxLCAgIDAsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LA0KLSAgICAwLCAgIDB9Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgNi4zLjk2MDAuMTYzODQKKy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIHJjcCByMS53LCByMC53CisgICAgbXVsIHIxLngsIHIwLngsIHIxLncKKyAgICBjbXAgcjAueHl6LCAtcjAudywgcjAueCwgcjEueAorICAgIG1vdiByMSwgYzAKKyAgICBtYWQgcjAsIHIwLCByMSwgYzEKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNldW5tdWx0cHNbXSA9IHsKKyAgICAwLCAgIDIsICAgMjU1LCAyNTUsIDI1NCwgMjU1LCA1MCwgIDAsICAgNjcsICA4NCwgIDY1LCAgNjYsICAyOCwgIDAsICAgMCwgICAwLCAgIDE0MywgMCwgICAwLAorICAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAzLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAxMzYsIDAsCisgICAgMCwgICAwLCAgIDg4LCAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDkyLCAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAxMDgsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA5MiwgIDAsICAgMCwgICAwLAorICAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEzLCAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMTIwLCAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDk3LCAgMTAwLCAxMDAsIDAsICAgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMDksIDExNywgMTA4LCAxMTYsIDAsICAgMTE2LCAxMDEsIDEyMCwgMCwgICAxNzEsIDE3MSwgMTcxLCA0LAorICAgIDAsICAgMTIsICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLAorICAgIDk1LCAgNDgsICAwLCAgIDc3LCAgMTA1LCA5OSwgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LAorICAgIDgzLCAgNzYsICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLAorICAgIDU0LCAgNDYsICA1MSwgIDQ2LCAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLAorICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDE0NCwKKyAgICAwLCAgIDgsICAgMTUsICAxNjAsIDY2LCAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxNzYsIDAsICAgOCwgICAyMjgsCisgICAgMTYwLCA2LCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICA4LCAgIDEyOCwgMCwgICAwLCAgIDI1NSwgMTI4LCA1LCAgIDAsICAgMCwgICAzLCAgIDEsICAgMCwKKyAgICAxLCAgIDEyOCwgMCwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsICAgMjU1LCAxMjgsIDg4LCAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDcsICAgMTI4LCAwLAorICAgIDAsICAgMjU1LCAxMjksIDAsICAgMCwgICAwLCAgIDEyOCwgMSwgICAwLCAgIDAsICAgMTI4LCAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgICAxNSwgIDEyOCwKKyAgICAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDEsICAgMCwgICAyMjgsCisgICAgMTI4LCAxLCAgIDAsICAgMjI4LCAxNjAsIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LCAxMjgsIDI1NSwgMjU1LAorICAgIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmggYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgKaW5kZXggYTc0ZTE0ZS4uMGMxNzczOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaApAQCAtMSwzNyArMSwzNyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0DQotLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1vdiBvQzAsIHIwDQotDQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9IHsNCi0gICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgMzMsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAwLCAgIDc1LCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMiwgICAyNTUsIDI1NSwgMSwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAxLCAgIDAsICAgMCwNCi0gICAgNjgsICAwLCAgIDAsICAgMCwgICA0OCwgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAwLCAgIDUyLCAgMCwNCi0gICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTE2LCAxMDEsIDEyMCwgMCwgICA0LCAgIDAsICAgMTIsICAwLCAgIDEsICAwLCAgIDEsICAgMCwNCi0gICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExMiwgMTE1LCA5NSwgIDUwLCAgOTUsICA0OCwgIDAsICA3NywgIDEwNSwgOTksDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgMzIsICA4MywgIDEwNCwNCi0gICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU0LCA0NiwgIDUxLCAgNDYsDQotICAgIDU3LCAgNTQsICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgMCwgICAxNzEsIDE3MSwgMTcxLCAzMSwgMCwgICAwLCAgIDIsDQotICAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDMsICAgMTc2LCAzMSwgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgMTQ0LCAwLCAgIDgsDQotICAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgOCwgICAyMjgsIDE2MCwNCi0gICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsICAgMTUsICAxMjgsIDAsICAgMCwgICAyMjgsIDEyOCwgMjU1LCAyNTUsIDAsICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0CisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPSB7CisgICAgMCwgICAyLCAgIDI1NSwgMjU1LCAyNTQsIDI1NSwgMzMsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAwLCAgIDc1LCAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAyLCAgIDI1NSwgMjU1LCAxLCAgIDAsICAgMCwgICAwLCAgIDI4LCAgMCwgICAwLCAgIDAsICAgMCwgIDEsICAgMCwgICAwLAorICAgIDY4LCAgMCwgICAwLCAgIDAsICAgNDgsICAwLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgMCwgICA1MiwgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTE2LCAxMDEsIDEyMCwgMCwgICA0LCAgIDAsICAgMTIsICAwLCAgIDEsICAwLCAgIDEsICAgMCwKKyAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMTEyLCAxMTUsIDk1LCAgNTAsICA5NSwgIDQ4LCAgMCwgIDc3LCAgMTA1LCA5OSwKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsIDMyLCAgODMsICAxMDQsCisgICAgOTcsICAxMDAsIDEwMSwgMTE0LCAzMiwgIDY3LCAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgMTE0LCAzMiwgIDU0LCA0NiwgIDUxLCAgNDYsCisgICAgNTcsICA1NCwgIDQ4LCAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAwLCAgIDE3MSwgMTcxLCAxNzEsIDMxLCAwLCAgIDAsICAgMiwKKyAgICAwLCAgIDAsICAgMCwgICAxMjgsIDAsICAgMCwgICAzLCAgIDE3NiwgMzEsICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgIDE0NCwgMCwgICA4LAorICAgIDE1LCAgMTYwLCA2NiwgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTc2LCAwLCAgOCwgICAyMjgsIDE2MCwKKyAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwgMTI4LCAyNTUsIDI1NSwgMCwgIDB9OwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCmluZGV4IDM1MGIyZWIuLmU0ZDdlMGUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAorKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmgKQEAgLTEsNDYgKzEsNDYgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA2LjMuOTYwMC4xNjM4NA0KLS8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7DQotLy8gICBmbG9hdDQgdGV4Y29vcmRPZmZzZXQ7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAgICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFsZlBpeGVsU2l6ZSAgYzAgICAgICAgMQ0KLS8vICAgdGV4Y29vcmRPZmZzZXQgYzEgICAgICAgMQ0KLS8vDQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYgYzIsIDAuNSwgLTAuNSwgMSwgMA0KLSAgICBkY2xfcG9zaXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYwLCBjMA0KLSAgICBtYWQgcjAsIHYwLCBjMi54eXp6LCBjMi54eHd3DQotICAgIG1vdiBvVDAuencsIHIwDQotICAgIG1hZCBvVDAueHksIHIwLCBjMS56d3p3LCBjMQ0KLQ0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3ZzMjBfc3RhbmRhcmR2c1tdID0gew0KLSAgICAwLCAgIDIsICAgMjU0LCAyNTUsIDI1NCwgMjU1LCA0NCwgIDAsICAgNjcsICA4NCwgIDY1LCAgNjYsICAyOCwgIDAsICAgMCwgICAwLCAgIDEyMiwgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMiwgICAyNTQsIDI1NSwgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMTE1LCAwLA0KLSAgICAwLCAgIDAsICAgNjgsICAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAxMDAsIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLA0KLSAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgOTcsICAxMDgsIDEwMiwgODAsICAxMDUsIDEyMCwgMTAxLCAxMDgsIDgzLCAgMTA1LCAxMjIsIDEwMSwgMCwgICAxNzEsDQotICAgIDE3MSwgMSwgICAwLCAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxMTYsIDEwMSwNCi0gICAgMTIwLCA5OSwgIDExMSwgMTExLCAxMTQsIDEwMCwgNzksICAxMDIsIDEwMiwgMTE1LCAxMDEsIDExNiwgMCwgICAxMTgsIDExNSwgOTUsICA1MCwgIDk1LCAgNDgsDQotICAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LA0KLSAgICAzMiwgIDgzLCAgMTA0LCA5NywgIDEwMCwgMTAxLCAxMTQsIDMyLCAgNjcsICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAxMTQsIDMyLCAgNTQsICA0NiwNCi0gICAgNTEsICA0NiwgIDU3LCAgNTQsICA0OCwgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgMCwgICA4MSwgIDAsICAgMCwgICA1LCAgIDIsICAgMCwNCi0gICAgMTUsICAxNjAsIDAsICAgMCwgICAwLCAgIDYzLCAgMCwgICAwLCAgIDAsICAgMTkxLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsDQotICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAgIDEyOCwgMCwgICAwLCAgIDE1LCAgMTQ0LCAyLCAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAxNSwgIDE5MiwNCi0gICAgMCwgICAwLCAgIDIyOCwgMTQ0LCAwLCAgIDAsICAgMjI4LCAxNjAsIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAgIDE1LCAgMTI4LCAwLCAgIDAsICAgMjI4LA0KLSAgICAxNDQsIDIsICAgMCwgICAxNjQsIDE2MCwgMiwgICAwLCAgIDI0MCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAxMiwgIDIyNCwgMCwgICAwLA0KLSAgICAyMjgsIDEyOCwgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsICAgMywgICAyMjQsIDAsICAgMCwgICAyMjgsIDEyOCwgMSwgICAwLCAgIDIzOCwgMTYwLCAxLA0KLSAgICAwLCAgIDIyOCwgMTYwLCAyNTUsIDI1NSwgMCwgICAwfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDYuMy45NjAwLjE2Mzg0CisvLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOworLy8gICBmbG9hdDQgdGV4Y29vcmRPZmZzZXQ7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBoYWxmUGl4ZWxTaXplICBjMCAgICAgICAxCisvLyAgIHRleGNvb3JkT2Zmc2V0IGMxICAgICAgIDEKKy8vCisKKyAgICB2c18yXzAKKyAgICBkZWYgYzIsIDAuNSwgLTAuNSwgMSwgMAorICAgIGRjbF9wb3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2MCwgYzAKKyAgICBtYWQgcjAsIHYwLCBjMi54eXp6LCBjMi54eHd3CisgICAgbW92IG9UMC56dywgcjAKKyAgICBtYWQgb1QwLnh5LCByMCwgYzEuend6dywgYzEKKworLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPSB7CisgICAgMCwgICAyLCAgIDI1NCwgMjU1LCAyNTQsIDI1NSwgNDQsICAwLCAgIDY3LCAgODQsICA2NSwgIDY2LCAgMjgsICAwLCAgIDAsICAgMCwgICAxMjIsIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMiwgICAyNTQsIDI1NSwgMiwgICAwLCAgIDAsICAgMCwgICAyOCwgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMTE1LCAwLAorICAgIDAsICAgMCwgICA2OCwgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICA4NCwgIDAsICAgMCwgICAwLCAgIDAsCisgICAgMCwgICAwLCAgIDAsICAgMTAwLCAwLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgODQsICAwLCAgIDAsICAgMCwKKyAgICAwLCAgIDAsICAgMCwgICAwLCAgIDEwNCwgOTcsICAxMDgsIDEwMiwgODAsICAxMDUsIDEyMCwgMTAxLCAxMDgsIDgzLCAgMTA1LCAxMjIsIDEwMSwgMCwgICAxNzEsCisgICAgMTcxLCAxLCAgIDAsICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDExNiwgMTAxLAorICAgIDEyMCwgOTksICAxMTEsIDExMSwgMTE0LCAxMDAsIDc5LCAgMTAyLCAxMDIsIDExNSwgMTAxLCAxMTYsIDAsICAgMTE4LCAxMTUsIDk1LCAgNTAsICA5NSwgIDQ4LAorICAgIDAsICAgNzcsICAxMDUsIDk5LCAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LAorICAgIDMyLCAgODMsICAxMDQsIDk3LCAgMTAwLCAxMDEsIDExNCwgMzIsICA2NywgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIDExNCwgMzIsICA1NCwgIDQ2LAorICAgIDUxLCAgNDYsICA1NywgIDU0LCAgNDgsICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgIDAsICAgODEsICAwLCAgIDAsICAgNSwgICAyLCAgIDAsCisgICAgMTUsICAxNjAsIDAsICAgMCwgICAwLCAgIDYzLCAgMCwgICAwLCAgIDAsICAgMTkxLCAwLCAgIDAsICAgMTI4LCA2MywgIDAsICAgMCwgICAwLCAgIDAsICAgMzEsCisgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsICAgMTI4LCAwLCAgIDAsICAgMTUsICAxNDQsIDIsICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDE1LCAgMTkyLAorICAgIDAsICAgMCwgICAyMjgsIDE0NCwgMCwgICAwLCAgIDIyOCwgMTYwLCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAxNSwgIDEyOCwgMCwgICAwLCAgIDIyOCwKKyAgICAxNDQsIDIsICAgMCwgICAxNjQsIDE2MCwgMiwgICAwLCAgIDI0MCwgMTYwLCAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAxMiwgIDIyNCwgMCwgICAwLAorICAgIDIyOCwgMTI4LCA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgICAzLCAgIDIyNCwgMCwgICAwLCAgIDIyOCwgMTI4LCAxLCAgIDAsICAgMjM4LCAxNjAsIDEsCisgICAgMCwgICAyMjgsIDE2MCwgMjU1LCAyNTUsIDAsICAgMH07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CmluZGV4IDMxMGNiODIuLjVjNzAxZmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CkBAIC0xLDY2ICsxLDY2IEBACi1ARUNITyBPRkYNCi1SRU0NCi1SRU0gQ29weXJpZ2h0IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi1SRU0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLVJFTSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLVJFTQ0KLQ0KLVBBVEggJVBBVEglOyVQcm9ncmFtRmlsZXMoeDg2KSVcV2luZG93cyBLaXRzXDguMVxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5ceDg2DQotDQotc2V0bG9jYWwNCi1zZXQgZXJyb3JDb3VudD0wDQotc2V0IHN1Y2Nlc3NDb3VudD0wDQotc2V0IGRlYnVnPTANCi0NCi1pZiAiJTEiID09ICJkZWJ1ZyIgKA0KLSAgICBzZXQgZGVidWc9MQ0KLSkNCi1pZiAiJTEiID09ICJyZWxlYXNlIiAoDQotICAgIHNldCBkZWJ1Zz0wDQotKQ0KLQ0KLTo6ICAgICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAgfCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAgICAgICAgICBzdGFuZGFyZHZzICAgICAgICAgICAgICB2c18yXzAgY29tcGlsZWRcc3RhbmRhcmR2cy5oICAgICAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAgICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2VwcyAgICAgICAgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNlcHMuaCAgICAgICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2VwcmVtdWx0cHMgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNlcHJlbXVsdHBzLmggICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2V1bm11bHRwcyAgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNldW5tdWx0cHMuaCAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBjb21wb25lbnRtYXNrcHMgICAgICAgICBwc18yXzAgY29tcGlsZWRcY29tcG9uZW50bWFza3BzLmggICAgICAgICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBjb21wb25lbnRtYXNrcHJlbXVsdHBzICBwc18yXzAgY29tcGlsZWRcY29tcG9uZW50bWFza3ByZW11bHRwcy5oICAgICVkZWJ1ZyUNCi1jYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBjb21wb25lbnRtYXNrdW5tdWx0cHMgICBwc18yXzAgY29tcGlsZWRcY29tcG9uZW50bWFza3VubXVsdHBzLmggICAgICVkZWJ1ZyUNCi0NCi1lY2hvLg0KLQ0KLWlmICVzdWNjZXNzQ291bnQlIEdUUiAwICgNCi0gICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5Lg0KLSkNCi1pZiAlZXJyb3JDb3VudCUgR1RSIDAgKA0KLSAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9ycy4NCi0pDQotDQotZW5kbG9jYWwNCi1leGl0IC9iDQotDQotOkJ1aWxkU2hhZGVyDQotc2V0IGlucHV0PSV+MQ0KLXNldCBlbnRyeT0lfjINCi1zZXQgdHlwZT0lfjMNCi1zZXQgb3V0cHV0PSV+NA0KLXNldCBkZWJ1Zz0lfjUNCi0NCi1pZiAlZGVidWclID09IDAgKA0KLSAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KLSkgZWxzZSAoDQotICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSINCi0pDQotDQotc2V0IGVycm9yPTANCi0lYnVpbGRDTUQlIHx8IHNldCBlcnJvcj0xDQotDQotaWYgJWVycm9yJSA9PSAwICgNCi0gICAgc2V0IC9hIHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxDQotKSBlbHNlICgNCi0gICAgc2V0IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzENCi0pDQotDQotZXhpdCAvYg0KK0BFQ0hPIE9GRgorUkVNCitSRU0gQ29weXJpZ2h0IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitSRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KK1JFTQorCitQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjFcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4NgorCitzZXRsb2NhbAorc2V0IGVycm9yQ291bnQ9MAorc2V0IHN1Y2Nlc3NDb3VudD0wCitzZXQgZGVidWc9MAorCitpZiAiJTEiID09ICJkZWJ1ZyIgKAorICAgIHNldCBkZWJ1Zz0xCispCitpZiAiJTEiID09ICJyZWxlYXNlIiAoCisgICAgc2V0IGRlYnVnPTAKKykKKworOjogICAgICAgICAgICAgIHwgSW5wdXQgZmlsZSAgICAgICAgICB8IEVudHJ5IHBvaW50ICAgICAgICAgICB8IFR5cGUgfCBPdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVidWcgfAorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgc3RhbmRhcmR2cyAgICAgICAgICAgICAgdnNfMl8wIGNvbXBpbGVkXHN0YW5kYXJkdnMuaCAgICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAgICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGx1bWluYW5jZXBzICAgICAgICAgICAgIHBzXzJfMCBjb21waWxlZFxsdW1pbmFuY2Vwcy5oICAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgbHVtaW5hbmNlcHJlbXVsdHBzICAgICAgcHNfMl8wIGNvbXBpbGVkXGx1bWluYW5jZXByZW11bHRwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2V1bm11bHRwcyAgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNldW5tdWx0cHMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGNvbXBvbmVudG1hc2twcyAgICAgICAgIHBzXzJfMCBjb21waWxlZFxjb21wb25lbnRtYXNrcHMuaCAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFza3ByZW11bHRwcyAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcmVtdWx0cHMuaCAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBjb21wb25lbnRtYXNrdW5tdWx0cHMgICBwc18yXzAgY29tcGlsZWRcY29tcG9uZW50bWFza3VubXVsdHBzLmggICAgICVkZWJ1ZyUKKworZWNoby4KKworaWYgJXN1Y2Nlc3NDb3VudCUgR1RSIDAgKAorICAgZWNobyAlc3VjY2Vzc0NvdW50JSBzaGFkZXJzIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseS4KKykKK2lmICVlcnJvckNvdW50JSBHVFIgMCAoCisgICBlY2hvIFRoZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBjb21waWxhdGlvbiBlcnJvcnMuCispCisKK2VuZGxvY2FsCitleGl0IC9iCisKKzpCdWlsZFNoYWRlcgorc2V0IGlucHV0PSV+MQorc2V0IGVudHJ5PSV+Mgorc2V0IHR5cGU9JX4zCitzZXQgb3V0cHV0PSV+NAorc2V0IGRlYnVnPSV+NQorCitpZiAlZGVidWclID09IDAgKAorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispIGVsc2UgKAorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykKKworc2V0IGVycm9yPTAKKyVidWlsZENNRCUgfHwgc2V0IGVycm9yPTEKKworaWYgJWVycm9yJSA9PSAwICgKKyAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVzdWNjZXNzQ291bnQlKzEKKykgZWxzZSAoCisgICAgc2V0IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzEKKykKKworZXhpdCAvYgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkVHTC5neXBpIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkVHTC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTEwNWU3Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJFR0wuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAgICMgRXZlcnl0aGluZyBiZWxvdyB0aGlzIGlzIGR1cGxpY2F0ZWQgaW4gdGhlIEdOIGJ1aWxkLiBJZiB5b3UgY2hhbmdlCi0gICAgIyBhbnl0aGluZyBhbHNvIGNoYW5nZSBhbmdsZS9CVUlMRC5nbgotICAgICd0YXJnZXRzJzoKLSAgICBbCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJFR0wnLAotICAgICAgICAgICAgJ3R5cGUnOiAnPChhbmdsZV9nbF9saWJyYXJ5X3R5cGUpJywKLSAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICdsaWJHTEVTdjInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdpbmNsdWRlcyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJy4uL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnLicsCi0gICAgICAgICAgICAgICAgJy4uL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICcuLi9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L2Jhc2UnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnPEAobGliZWdsX3NvdXJjZXMpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnbXN2c19yZXF1aXJlc19pbXBvcnRsaWJyYXJ5JyA6ICd0cnVlJywKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ0VHTEFQST0nLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnRUdMQVBJPV9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ09TID09ICJtYWMiJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdEWUxJQl9JTlNUQUxMX05BTUVfQkFTRSc6ICdAcnBhdGgnLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgfSwKLQotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGliRUdMX3N0YXRpYycsCi0gICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnbGliR0xFU3YyX3N0YXRpYycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnLi4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICcuJywKLSAgICAgICAgICAgICAgICAnLi4vaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgJy4uL3NyYy9jb21tb24vdGhpcmRfcGFydHkvYmFzZScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICc8QChsaWJlZ2xfc291cmNlcyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnRUdMQVBJPScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICdFR0xBUEk9JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wucmMgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliRUdML2xpYkVHTC5yYwppbmRleCBhY2ZmY2VmLi41MmQ5MjY3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliRUdML2xpYkVHTC5yYworKysgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliRUdML2xpYkVHTC5yYwpAQCAtMSwxMDMgKzEsMTAzIEBACi0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0Lg0KLS8vDQotI2luY2x1ZGUgInJlc291cmNlLmgiDQotDQotI2RlZmluZSBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAyIHJlc291cmNlLg0KLS8vDQotI2luY2x1ZGUgPHdpbmRvd3MuaD4NCi0jaW5jbHVkZSAiLi4vY29tbW9uL3ZlcnNpb24uaCINCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMNCi0NCi0jaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpDQotI2lmZGVmIF9XSU4zMg0KLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTDQotI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikNCi0jZW5kaWYgLy9fV0lOMzINCi0NCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRA0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBURVhUSU5DTFVERQ0KLS8vDQotDQotMSBURVhUSU5DTFVERSANCi1CRUdJTg0KLSAgICAicmVzb3VyY2UuaFwwIg0KLUVORA0KLQ0KLTIgVEVYVElOQ0xVREUgDQotQkVHSU4NCi0gICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iDQotICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIg0KLUVORA0KLQ0KLTMgVEVYVElOQ0xVREUgDQotQkVHSU4NCi0gICAgIlxyXG4iDQotICAgICJcMCINCi1FTkQNCi0NCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRA0KLQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBWZXJzaW9uDQotLy8NCi0NCi1WU19WRVJTSU9OX0lORk8gVkVSU0lPTklORk8NCi0gRklMRVZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLEFOR0xFX1JFVklTSU9OLDANCi0gUFJPRFVDVFZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLEFOR0xFX1JFVklTSU9OLDANCi0gRklMRUZMQUdTTUFTSyAweDE3TA0KLSNpZmRlZiBfREVCVUcNCi0gRklMRUZMQUdTIDB4MUwNCi0jZWxzZQ0KLSBGSUxFRkxBR1MgMHgwTA0KLSNlbmRpZg0KLSBGSUxFT1MgMHg0TA0KLSBGSUxFVFlQRSAweDJMDQotIEZJTEVTVUJUWVBFIDB4MEwNCi1CRUdJTg0KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iDQotICAgIEJFR0lODQotICAgICAgICBCTE9DSyAiMDQwOTA0YjAiDQotICAgICAgICBCRUdJTg0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGliRUdMIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiDQotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxNSBHb29nbGUgSW5jLiINCi0gICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJFR0wuZGxsIg0KLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCi0gICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQ0KLSAgICAgICAgRU5EDQotICAgIEVORA0KLSAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQotICAgIEJFR0lODQotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMA0KLSAgICBFTkQNCi1FTkQNCi0NCi0jZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0NCi0NCi0NCi0jaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuDQotLy8NCi0NCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRA0KKy8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCisvLworI2luY2x1ZGUgInJlc291cmNlLmgiCisKKyNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4KKy8vCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKKyNpZmRlZiBfV0lOMzIKK0xBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCisjcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQorI2VuZGlmIC8vX1dJTjMyCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAicmVzb3VyY2UuaFwwIgorRU5ECisKKzIgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIgorICAgICIjaW5jbHVkZSAiIi4uL2NvbW1vbi92ZXJzaW9uLmgiIlwwIgorRU5ECisKKzMgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICJcclxuIgorICAgICJcMCIKK0VORAorCisjZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLEFOR0xFX1JFVklTSU9OLDAKKyBQUk9EVUNUVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sQU5HTEVfUkVWSVNJT04sMAorIEZJTEVGTEFHU01BU0sgMHgxN0wKKyNpZmRlZiBfREVCVUcKKyBGSUxFRkxBR1MgMHgxTAorI2Vsc2UKKyBGSUxFRkxBR1MgMHgwTAorI2VuZGlmCisgRklMRU9TIDB4NEwKKyBGSUxFVFlQRSAweDJMCisgRklMRVNVQlRZUEUgMHgwTAorQkVHSU4KKyAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgICAgQkVHSU4KKyAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIgorICAgICAgICBCRUdJTgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJFR0wgRHluYW1pYyBMaW5rIExpYnJhcnkiCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORworICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJFR0wiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDE1IEdvb2dsZSBJbmMuIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliRUdMLmRsbCIKKyAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCBBTkdMRV9WRVJTSU9OX1NUUklORworICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkVHTCBEeW5hbWljIExpbmsgTGlicmFyeSIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQorICAgICAgICBFTkQKKyAgICBFTkQKKyAgICBCTE9DSyAiVmFyRmlsZUluZm8iCisgICAgQkVHSU4KKyAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKKyAgICBFTkQKK0VORAorCisjZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNlLgorLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvbGliR0wucmMgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvbGliR0wucmMKaW5kZXggZWY2MzdkMS4uYTdlYjFkOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML2xpYkdMLnJjCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9saWJHTC5yYwpAQCAtMSwxMzcgKzEsMTM3IEBACi0vLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0Lg0KLS8vDQotI2luY2x1ZGUgIi4uL2xpYkdMRVN2Mi9yZXNvdXJjZS5oIg0KLQ0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4NCi0vLw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzDQotDQotI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKQ0KLSNpZmRlZiBfV0lOMzINCi1MQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUw0KLSNwcmFnbWEgY29kZV9wYWdlKDEyNTIpDQotI2VuZGlmIC8vX1dJTjMyDQotDQotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gVEVYVElOQ0xVREUNCi0vLw0KLQ0KLTEgVEVYVElOQ0xVREUgDQotQkVHSU4NCi0gICAgInJlc291cmNlLmhcMCINCi1FTkQNCi0NCi0yIFRFWFRJTkNMVURFIA0KLUJFR0lODQotICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIg0KLSAgICAiI2luY2x1ZGUgIiIuLi9jb21tb24vdmVyc2lvbi5oIiJcMCINCi1FTkQNCi0NCi0zIFRFWFRJTkNMVURFIA0KLUJFR0lODQotICAgICJcclxuIg0KLSAgICAiXDAiDQotRU5EDQotDQotI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQNCi0NCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gVmVyc2lvbg0KLS8vDQotDQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPDQotIEZJTEVWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwDQotIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwDQotIEZJTEVGTEFHU01BU0sgMHgxN0wNCi0jaWZkZWYgX0RFQlVHDQotIEZJTEVGTEFHUyAweDFMDQotI2Vsc2UNCi0gRklMRUZMQUdTIDB4MEwNCi0jZW5kaWYNCi0gRklMRU9TIDB4NEwNCi0gRklMRVRZUEUgMHgyTA0KLSBGSUxFU1VCVFlQRSAweDBMDQotQkVHSU4NCi0gICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIg0KLSAgICBCRUdJTg0KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIg0KLSAgICAgICAgQkVHSU4NCi0gICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIE9wZW5HTDMyIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTCINCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDE5IEdvb2dsZSBJbmMuIg0KLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgIm9wZW5HTDMyLmRsbCINCi0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiQU5HTEUgT3BlbkdMMzIgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCi0gICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQ0KLSAgICAgICAgRU5EDQotICAgIEVORA0KLSAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQotICAgIEJFR0lODQotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMA0KLSAgICBFTkQNCi1FTkQNCi0NCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gRGlhbG9nDQotLy8NCi0NCi1JRERfRElBTE9HMSBESUFMT0dFWCAwLCAwLCAxMjksIDQ3DQotU1RZTEUgRFNfU0VURk9OVCB8IERTX01PREFMRlJBTUUgfCBEU19GSVhFRFNZUyB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUNCi1DQVBUSU9OICJXYWl0aW5nIGZvciBkZWJ1Z2dlciINCi1GT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAsIDAsIDB4MQ0KLUJFR0lODQotUFVTSEJVVFRPTiAgICAgICJDYW5jZWwiLElEQ0FOQ0VMLDcyLDI2LDUwLDE0DQotTFRFWFQgICAgICAgICAgICJBdHRhY2ggYSBkZWJ1Z2dlciBvciBFU0MgdG8gY2FuY2VsIixJRENfU1RBVElDLDcsNywxMTUsOA0KLUVORA0KLQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBERVNJR05JTkZPDQotLy8NCi0NCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRA0KLUdVSURFTElORVMgREVTSUdOSU5GTw0KLUJFR0lODQotSUREX0RJQUxPRzEsIERJQUxPRw0KLUJFR0lODQotTEVGVE1BUkdJTiwgNw0KLVJJR0hUTUFSR0lOLCAxMjINCi1UT1BNQVJHSU4sIDcNCi1CT1RUT01NQVJHSU4sIDQwDQotRU5EDQotRU5EDQotI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQNCi0NCi0jZW5kaWYgICAgLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0NCi0NCi0NCi0jaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuDQotLy8NCi0NCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRA0KKy8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuCisvLworI2luY2x1ZGUgIi4uL2xpYkdMRVN2Mi9yZXNvdXJjZS5oIgorCisjZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuCisvLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vdmVyc2lvbi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcworCisjaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpCisjaWZkZWYgX1dJTjMyCitMQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUworI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKKyNlbmRpZiAvL19XSU4zMgorCisjaWZkZWYgQVBTVFVESU9fSU5WT0tFRAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBURVhUSU5DTFVERQorLy8KKworMSBURVhUSU5DTFVERSAKK0JFR0lOCisgICAgInJlc291cmNlLmhcMCIKK0VORAorCisyIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiIKKyAgICAiI2luY2x1ZGUgIiIuLi9jb21tb24vdmVyc2lvbi5oIiJcMCIKK0VORAorCiszIFRFWFRJTkNMVURFIAorQkVHSU4KKyAgICAiXHJcbiIKKyAgICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworIEZJTEVWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwCisgUFJPRFVDVFZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLEFOR0xFX1JFVklTSU9OLDAKKyBGSUxFRkxBR1NNQVNLIDB4MTdMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIDB4MUwKKyNlbHNlCisgRklMRUZMQUdTIDB4MEwKKyNlbmRpZgorIEZJTEVPUyAweDRMCisgRklMRVRZUEUgMHgyTAorIEZJTEVTVUJUWVBFIDB4MEwKK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwNDA5MDRiMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgT3BlbkdMMzIgRHluYW1pYyBMaW5rIExpYnJhcnkiCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORworICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJHTCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgKEMpIDIwMTkgR29vZ2xlIEluYy4iCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJvcGVuR0wzMi5kbGwiCisgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBPcGVuR0wzMiBEeW5hbWljIExpbmsgTGlicmFyeSIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiQnVpbGQgRGF0ZTogIiBBTkdMRV9DT01NSVRfREFURQorICAgICAgICBFTkQKKyAgICBFTkQKKyAgICBCTE9DSyAiVmFyRmlsZUluZm8iCisgICAgQkVHSU4KKyAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKKyAgICBFTkQKK0VORAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRGlhbG9nCisvLworCitJRERfRElBTE9HMSBESUFMT0dFWCAwLCAwLCAxMjksIDQ3CitTVFlMRSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8IERTX0ZJWEVEU1lTIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQorQ0FQVElPTiAiV2FpdGluZyBmb3IgZGVidWdnZXIiCitGT05UIDgsICJNUyBTaGVsbCBEbGciLCA0MDAsIDAsIDB4MQorQkVHSU4KK1BVU0hCVVRUT04gICAgICAiQ2FuY2VsIixJRENBTkNFTCw3MiwyNiw1MCwxNAorTFRFWFQgICAgICAgICAgICJBdHRhY2ggYSBkZWJ1Z2dlciBvciBFU0MgdG8gY2FuY2VsIixJRENfU1RBVElDLDcsNywxMTUsOAorRU5ECisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBERVNJR05JTkZPCisvLworCisjaWZkZWYgQVBTVFVESU9fSU5WT0tFRAorR1VJREVMSU5FUyBERVNJR05JTkZPCitCRUdJTgorSUREX0RJQUxPRzEsIERJQUxPRworQkVHSU4KK0xFRlRNQVJHSU4sIDcKK1JJR0hUTUFSR0lOLCAxMjIKK1RPUE1BUkdJTiwgNworQk9UVE9NTUFSR0lOLCA0MAorRU5ECitFTkQKKyNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECisKKyNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCisjaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCisvLworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjFfQ00vbGliR0xFU3YxX0NNLnJjIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2MV9DTS9saWJHTEVTdjFfQ00ucmMKaW5kZXggMmI3NGE5ZC4uMWE5NmY4NSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2MV9DTS9saWJHTEVTdjFfQ00ucmMKKysrIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2MV9DTS9saWJHTEVTdjFfQ00ucmMKQEAgLTEsMTAzICsxLDEwMyBAQAotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4NCi0vLw0KLSNpbmNsdWRlICJyZXNvdXJjZS5oIg0KLQ0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4NCi0vLw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2luY2x1ZGUgIi4uL2NvbW1vbi92ZXJzaW9uLmgiDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0jdW5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzDQotDQotI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKQ0KLSNpZmRlZiBfV0lOMzINCi1MQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUw0KLSNwcmFnbWEgY29kZV9wYWdlKDEyNTIpDQotI2VuZGlmIC8vX1dJTjMyDQotDQotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gVEVYVElOQ0xVREUNCi0vLw0KLQ0KLTEgVEVYVElOQ0xVREUNCi1CRUdJTg0KLSAgICAicmVzb3VyY2UuaFwwIg0KLUVORA0KLQ0KLTIgVEVYVElOQ0xVREUNCi1CRUdJTg0KLSAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiINCi0gICAgIiNpbmNsdWRlICIiLi4vY29tbW9uL3ZlcnNpb24uaCIiXDAiDQotRU5EDQotDQotMyBURVhUSU5DTFVERQ0KLUJFR0lODQotICAgICJcclxuIg0KLSAgICAiXDAiDQotRU5EDQotDQotI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQNCi0NCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gVmVyc2lvbg0KLS8vDQotDQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPDQotIEZJTEVWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwDQotIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwDQotIEZJTEVGTEFHU01BU0sgMHgxN0wNCi0jaWZkZWYgX0RFQlVHDQotIEZJTEVGTEFHUyAweDFMDQotI2Vsc2UNCi0gRklMRUZMQUdTIDB4MEwNCi0jZW5kaWYNCi0gRklMRU9TIDB4NEwNCi0gRklMRVRZUEUgMHgyTA0KLSBGSUxFU1VCVFlQRSAweDBMDQotQkVHSU4NCi0gICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIg0KLSAgICBCRUdJTg0KLSAgICAgICAgQkxPQ0sgIjA0MDkwNGIwIg0KLSAgICAgICAgQkVHSU4NCi0gICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkdMRVN2MV9DTSBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KLSAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliR0xFU3YxX0NNIg0KLSAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgKEMpIDIwMTUgR29vZ2xlIEluYy4iDQotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliR0xFU3YxX0NNLmRsbCINCi0gICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiQU5HTEUgbGliR0xFU3YxX0NNIER5bmFtaWMgTGluayBMaWJyYXJ5Ig0KLSAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQotICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkJ1aWxkIERhdGU6ICIgQU5HTEVfQ09NTUlUX0RBVEUNCi0gICAgICAgIEVORA0KLSAgICBFTkQNCi0gICAgQkxPQ0sgIlZhckZpbGVJbmZvIg0KLSAgICBCRUdJTg0KLSAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDANCi0gICAgRU5EDQotRU5EDQotDQotI2VuZGlmICAgIC8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotDQotDQotDQotI2lmbmRlZiBBUFNUVURJT19JTlZPS0VEDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNlLg0KLS8vDQotDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQNCisvLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0LgorLy8KKyNpbmNsdWRlICJyZXNvdXJjZS5oIgorCisjZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuCisvLworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICIuLi9jb21tb24vdmVyc2lvbi5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcworCisjaWYgIWRlZmluZWQoQUZYX1JFU09VUkNFX0RMTCkgfHwgZGVmaW5lZChBRlhfVEFSR19FTlUpCisjaWZkZWYgX1dJTjMyCitMQU5HVUFHRSBMQU5HX0VOR0xJU0gsIFNVQkxBTkdfRU5HTElTSF9VUworI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKKyNlbmRpZiAvL19XSU4zMgorCisjaWZkZWYgQVBTVFVESU9fSU5WT0tFRAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBURVhUSU5DTFVERQorLy8KKworMSBURVhUSU5DTFVERQorQkVHSU4KKyAgICAicmVzb3VyY2UuaFwwIgorRU5ECisKKzIgVEVYVElOQ0xVREUKK0JFR0lOCisgICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iCisgICAgIiNpbmNsdWRlICIiLi4vY29tbW9uL3ZlcnNpb24uaCIiXDAiCitFTkQKKworMyBURVhUSU5DTFVERQorQkVHSU4KKyAgICAiXHJcbiIKKyAgICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworIEZJTEVWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwCisgUFJPRFVDVFZFUlNJT04gQU5HTEVfTUFKT1JfVkVSU0lPTixBTkdMRV9NSU5PUl9WRVJTSU9OLEFOR0xFX1JFVklTSU9OLDAKKyBGSUxFRkxBR1NNQVNLIDB4MTdMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIDB4MUwKKyNlbHNlCisgRklMRUZMQUdTIDB4MEwKKyNlbmRpZgorIEZJTEVPUyAweDRMCisgRklMRVRZUEUgMHgyTAorIEZJTEVTVUJUWVBFIDB4MEwKK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwNDA5MDRiMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiQU5HTEUgbGliR0xFU3YxX0NNIER5bmFtaWMgTGluayBMaWJyYXJ5IgorICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliR0xFU3YxX0NNIgorICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxNSBHb29nbGUgSW5jLiIKKyAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYkdMRVN2MV9DTS5kbGwiCisgICAgICAgICAgICBWQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJBTkdMRSBsaWJHTEVTdjFfQ00gRHluYW1pYyBMaW5rIExpYnJhcnkiCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORworICAgICAgICAgICAgVkFMVUUgIkNvbW1lbnRzIiwgIkJ1aWxkIERhdGU6ICIgQU5HTEVfQ09NTUlUX0RBVEUKKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwCisgICAgRU5ECitFTkQKKworI2VuZGlmICAgIC8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKyNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4KKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi5neXBpIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTU5MWZlLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDE0ODggKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICAgJ3ZhcmlhYmxlcyc6Ci0gICAgewotICAgICAgICAnbGliYW5nbGVfY29tbW9uX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9Db2xvci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL0NvbG9yLmluYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9GYXN0VmVjdG9yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vRml4ZWRWZWN0b3IuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9GbG9hdDE2VG9GbG9hdDMyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9NZW1vcnlCdWZmZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL01lbW9yeUJ1ZmZlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL09wdGlvbmFsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYW5nbGVfaGRyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9QYWNrZWRFR0xFbnVtc19hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9QYWNrZWRFR0xFbnVtc19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vUGFja2VkRW51bXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL1BhY2tlZEVudW1zLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vUGFja2VkR0xFbnVtc19hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9QYWNrZWRHTEVudW1zX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL2FsaWduZWRfbWVtb3J5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9hbGlnbmVkX21lbW9yeS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL2FuZHJvaWRfdXRpbC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYW5kcm9pZF91dGlsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYW5nbGV1dGlscy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYW5nbGV1dGlscy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYml0c2V0X3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vZGVidWcuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL2RlYnVnLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9oYXNoX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL21hdGh1dGlsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vbWF0cml4X3V0aWxzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9tYXRyaXhfdXRpbHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3N0cmluZ191dGlscy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vc3RyaW5nX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvYmFzZS9hbmdsZWJhc2UvYmFzZV9leHBvcnQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlL2FuZ2xlYmFzZS9jb250YWluZXJzL21ydV9jYWNoZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L2Jhc2UvYW5nbGViYXNlL2xvZ2dpbmcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlL2FuZ2xlYmFzZS9tYWNyb3MuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlL2FuZ2xlYmFzZS9ub19kZXN0cnVjdG9yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvYmFzZS9hbmdsZWJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L2Jhc2UvYW5nbGViYXNlL251bWVyaWNzL3NhZmVfY29udmVyc2lvbnNfaW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L2Jhc2UvYW5nbGViYXNlL251bWVyaWNzL3NhZmVfbWF0aC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L2Jhc2UvYW5nbGViYXNlL251bWVyaWNzL3NhZmVfbWF0aF9pbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvYmFzZS9hbmdsZWJhc2Uvc2hhMS5jYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90aGlyZF9wYXJ0eS9iYXNlL2FuZ2xlYmFzZS9zaGExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvYmFzZS9hbmdsZWJhc2Uvc3lzX2J5dGVvcmRlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L3NtaGFzaGVyL3NyYy9QTXVySGFzaC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkvc21oYXNoZXIvc3JjL1BNdXJIYXNoLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGxzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi90bHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi91bmlmb3JtX3R5cGVfaW5mb19hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3V0aWxpdGllcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3ZlY3Rvcl91dGlscy5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3h4aGFzaF9zb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vdGhpcmRfcGFydHkveHhoYXNoL3h4aGFzaC5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3RoaXJkX3BhcnR5L3h4aGFzaC94eGhhc2guaCcsCi0gICAgICAgIF0sCi0KLSAgICAgICAgJ2FuZ2xlX3N5c3RlbV91dGlsc19zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vT3B0aW9uYWwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vcGxhdGZvcm0uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3N5c3RlbV91dGlscy5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZ2xlX3N5c3RlbV91dGlsc19saW51eF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2xpbnV4LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfcG9zaXguY3BwJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZ2xlX3N5c3RlbV91dGlsc19tYWNfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3N5c3RlbV91dGlsc19tYWMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3N5c3RlbV91dGlsc19wb3NpeC5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnYW5nbGVfc3lzdGVtX3V0aWxzX3dpbnV3cF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX3dpbnV3cC5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnYW5nbGVfc3lzdGVtX3V0aWxzX3dpbl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX3dpbi5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfaW1hZ2VfdXRpbF9oZWFkZXJzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9pbWFnZV91dGlsL2NvcHlpbWFnZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvaW1hZ2VfdXRpbC9jb3B5aW1hZ2UuaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvaW1hZ2VfdXRpbC9nZW5lcmF0ZW1pcC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvaW1hZ2VfdXRpbC9nZW5lcmF0ZW1pcC5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9pbWFnZV91dGlsL2ltYWdlZm9ybWF0cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvaW1hZ2VfdXRpbC9sb2FkaW1hZ2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2ltYWdlX3V0aWwvbG9hZGltYWdlLmluYycsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9pbWFnZV91dGlsX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2ltYWdlX3V0aWwvY29weWltYWdlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2ltYWdlX3V0aWwvaW1hZ2Vmb3JtYXRzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2ltYWdlX3V0aWwvbG9hZGltYWdlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2ltYWdlX3V0aWwvbG9hZGltYWdlX2V0Yy5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZ3B1X2luZm9fdXRpbF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW50ZXJuYWwuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9ncHVfaW5mb191dGlsX3dpbl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fd2luLmNwcCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9ncHVfaW5mb191dGlsX2xpbnV4X3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19saW51eC5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZ3B1X2luZm9fdXRpbF9saWJwY2lfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2xpYnBjaS5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZ3B1X2luZm9fdXRpbF94MTFfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX3gxMS5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZ3B1X2luZm9fdXRpbF9tYWNfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hYy5tbScsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9pbmNsdWRlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL2FuZ2xlX2dsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvYW5nbGVfaGRyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvZXhwb3J0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvRUdML2VnbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0VHTC9lZ2xleHQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9FR0wvZWdsZXh0X2FuZ2xlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUy9nbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMvZ2xwbGF0Zm9ybS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMvZ2xleHQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTL2dsZXh0X2FuZ2xlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUy9nbGV4dF9leHBsaWNpdF9jb250ZXh0X2F1dG9nZW4uaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMmV4dF9hbmdsZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMmV4dF9leHBsaWNpdF9jb250ZXh0X2F1dG9nZW4uaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMyL2dsMnBsYXRmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzMvZ2wzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzMvZ2wzZXh0X2V4cGxpY2l0X2NvbnRleHRfYXV0b2dlbi5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzMvZ2wzcGxhdGZvcm0uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMy9nbDMxLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xFUzMvZ2wzMWV4dF9leHBsaWNpdF9jb250ZXh0X2F1dG9nZW4uaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL0dMRVMzL2dsMzIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9HTEVTMy9nbDMyZXh0X2V4cGxpY2l0X2NvbnRleHRfYXV0b2dlbi5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvS0hSL2tocnBsYXRmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvV0dML3dnbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc0QzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzVmsuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZS9wbGF0Zm9ybS9Gcm9udGVuZEZlYXR1cmVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvcGxhdGZvcm0vUGxhdGZvcm0uaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9oZWFkZXJzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9BdHRyaWJ1dGVNYXAuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0JpbmFyeVN0cmVhbS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQmxvYkNhY2hlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9CdWZmZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NhcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbXBpbGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db25maWcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnN0YW50cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ29udGV4dC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ29udGV4dC5pbmwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV8wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV8xX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV8yX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV8zX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV80X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMV81X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMl8wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfMl8xX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfM18wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfM18xX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfM18yX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfM18zX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF8wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF8xX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF8yX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF8zX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF80X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF81X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xfNF82X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xlc18xXzBfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ29udGV4dF9nbGVzXzJfMF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db250ZXh0X2dsZXNfM18wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xlc18zXzFfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ29udGV4dF9nbGVzXzNfMl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db250ZXh0X2dsZXNfZXh0X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0RlYnVnLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9EZXZpY2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0VHTFN5bmMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0Vycm9yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9FcnJvci5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9FcnJvclN0cmluZ3MuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0ZlbmNlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvRnJhbWVidWZmZXJBdHRhY2htZW50LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9HTEVTMVJlbmRlcmVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9HTEVTMVNoYWRlcnMuaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvR0xFUzFTdGF0ZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvSGFuZGxlQWxsb2NhdG9yLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9IYW5kbGVSYW5nZUFsbG9jYXRvci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvSW1hZ2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0ltYWdlSW5kZXguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0luZGV4UmFuZ2VDYWNoZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvTG9nZ2luZ0Fubm90YXRvci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvTWVtb3J5T2JqZWN0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9NZW1vcnlQcm9ncmFtQ2FjaGUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL09ic2VydmVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9PdmVybGF5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL092ZXJsYXkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL092ZXJsYXlXaWRnZXRzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL092ZXJsYXlXaWRnZXRzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9PdmVybGF5X2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvT3ZlcmxheV9mb250X2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvT3ZlcmxheV9mb250X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1BhdGguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1Byb2dyYW1MaW5rZWRSZXNvdXJjZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1Byb2dyYW1QaXBlbGluZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvUXVlcnkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1JlZkNvdW50T2JqZWN0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9SZW5kZXJidWZmZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1Jlc291cmNlTWFuYWdlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvUmVzb3VyY2VNYXAuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1NhbXBsZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1NlbWFwaG9yZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvU2hhZGVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9TaXplZE1SVUNhY2hlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9TdGF0ZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvU3RyZWFtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9TdXJmYWNlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9UZXh0dXJlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9UaHJlYWQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1RyYW5zZm9ybUZlZWRiYWNrLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Vbmlmb3JtLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9WYXJ5aW5nUGFja2luZy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmVyc2lvbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmVyc2lvbi5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9WZXJ0ZXhBcnJheS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmVydGV4QXR0cmlidXRlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9WZXJ0ZXhBdHRyaWJ1dGUuaW5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvV29ya2VyVGhyZWFkLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9hbmdsZXR5cGVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9hbmdsZXR5cGVzLmluYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2VudHJ5X3BvaW50c19lbnVtX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2VudHJ5X3BvaW50c191dGlscy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvZmVhdHVyZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9oaXN0b2dyYW1fbWFjcm9zLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9xdWVyeWNvbnZlcnNpb25zLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9xdWVyeXV0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS90cmFjZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvQnVmZmVySW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvQ29tcGlsZXJJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9Db250ZXh0SW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9EZXZpY2VJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9EaXNwbGF5SW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvRUdMSW1wbEZhY3RvcnkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0VHTFN5bmNJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9GZW5jZU5WSW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvRm9ybWF0SURfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvRm9ybWF0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9GcmFtZWJ1ZmZlckF0dGFjaG1lbnRPYmplY3RJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9GcmFtZWJ1ZmZlckltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0dMSW1wbEZhY3RvcnkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0ltYWdlSW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvTWVtb3J5T2JqZWN0SW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvT3ZlcmxheUltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1BhdGhJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9Qcm9ncmFtSW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbVBpcGVsaW5lSW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvUXVlcnlJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9SZW5kZXJidWZmZXJJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9SZW5kZXJUYXJnZXRDYWNoZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvU2FtcGxlckltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1NlbWFwaG9yZUltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1NoYWRlckltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1N0cmVhbVByb2R1Y2VySW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1N5bmNJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9UZXh0dXJlSW1wbC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9WZXJ0ZXhBcnJheUltcGwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaW5jLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvcmVuZGVyZXJfdXRpbHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzMxLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMzMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMzMi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMzJfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVNFWFQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FU0VYVF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxMl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxNF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxNV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wxX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25HTDIxX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25HTDJfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzFfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzJfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzNfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0MV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0Ml9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0M19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0NF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0NV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0Nl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0w0X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3RoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQXR0cmlidXRlTWFwLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0Jsb2JDYWNoZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9CdWZmZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db21waWxlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db25maWcuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvQ29udGV4dC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Db250ZXh0X2dsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0NvbnRleHRfZ2xlc18xXzAuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvRGVidWcuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvRGV2aWNlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvRUdMU3luYy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9FcnJvci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9GZW5jZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9GcmFtZWJ1ZmZlckF0dGFjaG1lbnQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvRnJhbWVDYXB0dXJlX21vY2suY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvR0xFUzFSZW5kZXJlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9HTEVTMVN0YXRlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0hhbmRsZUFsbG9jYXRvci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9IYW5kbGVSYW5nZUFsbG9jYXRvci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9JbWFnZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9JbWFnZUluZGV4LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL0luZGV4UmFuZ2VDYWNoZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Mb2dnaW5nQW5ub3RhdG9yLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL01lbW9yeU9iamVjdC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9NZW1vcnlQcm9ncmFtQ2FjaGUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvT2JzZXJ2ZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvUGF0aC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9QbGF0Zm9ybS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1Byb2dyYW1MaW5rZWRSZXNvdXJjZXMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvUHJvZ3JhbVBpcGVsaW5lLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1F1ZXJ5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1JlbmRlcmJ1ZmZlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9SZXNvdXJjZU1hbmFnZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvU2FtcGxlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9TZW1hcGhvcmUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvU2hhZGVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1N0YXRlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1N0cmVhbS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9TdXJmYWNlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1RleHR1cmUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVGhyZWFkLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1RyYW5zZm9ybUZlZWRiYWNrLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1VuaWZvcm0uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmFyeWluZ1BhY2tpbmcuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmVydGV4QXJyYXkuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvVmVydGV4QXR0cmlidXRlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL1dvcmtlclRocmVhZC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9hbmdsZXR5cGVzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2VudHJ5X3BvaW50c19lbnVtX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvZXMzX2NvcHlfY29udmVyc2lvbl90YWJsZV9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2Zvcm1hdF9tYXBfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9mb3JtYXRfbWFwX2Rlc2t0b3AuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcXVlcnljb252ZXJzaW9ucy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9xdWVyeXV0aWxzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0NvbnRleHRJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9EZXZpY2VJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0Rpc3BsYXlJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL0Zvcm1hdF90YWJsZV9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1F1ZXJ5SW1wbC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1N1cmZhY2VJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL1RleHR1cmVJbXBsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvcmVuZGVyZXJfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVMyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25FUzMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMzEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTMzIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkVTRVhULmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25HTDEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uR0wzLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3ZhbGlkYXRpb25HTDQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMTIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMTQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMTUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMTMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMjEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMMzMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvdmFsaWRhdGlvbkdMNDYuY3BwJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2QzZF9zaGFyZWRfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0J1ZmZlckQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvQnVmZmVyRDNELmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvQ29tcGlsZXJEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0NvbXBpbGVyRDNELmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvQ29udGV4dEQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0RldmljZUQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRGV2aWNlRDNELmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRGlzcGxheUQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRGlzcGxheUQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0R5bmFtaWNITFNMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9EeW5hbWljSExTTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0R5bmFtaWNJbWFnZTJESExTTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRHluYW1pY0ltYWdlMkRITFNMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRUdMSW1hZ2VEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0VHTEltYWdlRDNELmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZm9ybWF0dXRpbHNEM0QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9GcmFtZWJ1ZmZlckQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvRnJhbWVidWZmZXJEM0QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0ltYWdlRDNELmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9JbWFnZUQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0luZGV4QnVmZmVyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9JbmRleEJ1ZmZlci5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0luZGV4RGF0YU1hbmFnZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL0luZGV4RGF0YU1hbmFnZXIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9OYXRpdmVXaW5kb3dEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL05hdGl2ZVdpbmRvd0QzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1Byb2dyYW1EM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1Byb2dyYW1EM0QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9SZW5kZXJidWZmZXJEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1JlbmRlcmJ1ZmZlckQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1JlbmRlcmVyRDNELmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9SZW5kZXJlckQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1JlbmRlclRhcmdldEQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1JlbmRlclRhcmdldEQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvU2FtcGxlckQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1NoYWRlckQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvU2hhZGVyRDNELmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvU2hhZGVyRXhlY3V0YWJsZUQzRC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvU2hhZGVyRXhlY3V0YWJsZUQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1N1cmZhY2VEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1N1cmZhY2VEM0QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9Td2FwQ2hhaW5EM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1N3YXBDaGFpbkQzRC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1RleHR1cmVEM0QuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1RleHR1cmVEM0QuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9UZXh0dXJlU3RvcmFnZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1ZlcnRleEJ1ZmZlci5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvVmVydGV4QnVmZmVyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvVmVydGV4RGF0YU1hbmFnZXIuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL1ZlcnRleERhdGFNYW5hZ2VyLmgnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZDNkOV9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9CbGl0OS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9CbGl0OS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvQnVmZmVyOS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9CdWZmZXI5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9Db250ZXh0OS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9Db250ZXh0OS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvRGVidWdBbm5vdGF0b3I5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L0RlYnVnQW5ub3RhdG9yOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvRmVuY2U5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L0ZlbmNlOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvZm9ybWF0dXRpbHM5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L2Zvcm1hdHV0aWxzOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvRnJhbWVidWZmZXI5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L0ZyYW1lYnVmZmVyOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvSW1hZ2U5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L0ltYWdlOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvSW5kZXhCdWZmZXI5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L0luZGV4QnVmZmVyOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvTmF0aXZlV2luZG93OS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9OYXRpdmVXaW5kb3c5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9RdWVyeTkuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvUXVlcnk5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9SZW5kZXJlcjkuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvUmVuZGVyZXI5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1JlbmRlclRhcmdldDkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1NoYWRlckNhY2hlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3ByZW11bHRwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrdW5tdWx0cHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHJlbXVsdHBzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXVubXVsdHBzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvU3RhdGVNYW5hZ2VyOS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9TdGF0ZU1hbmFnZXI5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9Td2FwQ2hhaW45LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1N3YXBDaGFpbjkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1ZlcnRleEFycmF5OS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDkvVmVydGV4QnVmZmVyOS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9kM2QxMV9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvQmxpdDExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9CbGl0MTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9CbGl0MTFIZWxwZXJfYXV0b2dlbi5pbmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvQnVmZmVyMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL0J1ZmZlcjExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvQ2xlYXIxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvQ2xlYXIxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL0NvbnRleHQxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvQ29udGV4dDExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvRGVidWdBbm5vdGF0b3IxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvRGVidWdBbm5vdGF0b3IxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL2R4Z2lfZm9ybWF0X21hcF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9keGdpX3N1cHBvcnRfdGFibGVfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvZHhnaV9zdXBwb3J0X3RhYmxlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvRXh0ZXJuYWxJbWFnZVNpYmxpbmdJbXBsMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL0V4dGVybmFsSW1hZ2VTaWJsaW5nSW1wbDExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvRmVuY2UxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvRmVuY2UxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL2Zvcm1hdHV0aWxzMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9GcmFtZWJ1ZmZlcjExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9GcmFtZWJ1ZmZlcjExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvSW1hZ2UxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvSW1hZ2UxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL0luZGV4QnVmZmVyMTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9JbnB1dExheW91dENhY2hlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvTmF0aXZlV2luZG93MTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9NYXBwZWRTdWJyZXNvdXJjZVZlcmlmaWVyMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL01hcHBlZFN1YnJlc291cmNlVmVyaWZpZXIxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1BpeGVsVHJhbnNmZXIxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUGl4ZWxUcmFuc2ZlcjExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUHJvZ3JhbTExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9Qcm9ncmFtMTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9Qcm9ncmFtUGlwZWxpbmUxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUHJvZ3JhbVBpcGVsaW5lMTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9RdWVyeTExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9RdWVyeTExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUmVuZGVyZXIxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUmVuZGVyZXIxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1JlbmRlclRhcmdldDExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvUmVzb3VyY2VNYW5hZ2VyMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1Jlc291cmNlTWFuYWdlcjExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX2dzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNGkuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzR1aS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfdnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFfZmw5dnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTFtdWx0aXZpZXdncy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMW11bHRpdmlld3ZzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZGVwdGgxMXBzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFfZmw5cHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHMyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM1LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcmZsb2F0MTFwczYuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyZmxvYXQxMXBzNy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJmbG9hdDExcHM4LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczIuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHMzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2ludDExcHM2LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbnQxMXBzNy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW50MTFwczguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHMxLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzMi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzNS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJ1aW50MTFwczYuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFydWludDExcHM3LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnVpbnQxMXBzOC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoM2QxMWdzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDNkMTF2cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hkZXB0aDJkMTFwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMmRtczExcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVjb2xvcjJkcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVkZXB0aDExX3BzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9yZXNvbHZlZGVwdGhzdGVuY2lsMTFfcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Jlc29sdmVkZXB0aHN0ZW5jaWwxMV92cy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcmVzb2x2ZXN0ZW5jaWwxMV9wcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWYyZGFycmF5cHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGVmMmRwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWYzZHBzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlaTJkYXJyYXlwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZWkyZHBzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvc2hhZGVycy9jb21waWxlZC9zd2l6emxlaTNkcHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3N3aXp6bGV1aTJkYXJyYXlwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpMmRwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvc3dpenpsZXVpM2Rwcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1N0YXRlTWFuYWdlcjExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9TdGF0ZU1hbmFnZXIxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1N0cmVhbVByb2R1Y2VyRDNEVGV4dHVyZS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvU3RyZWFtUHJvZHVjZXJEM0RUZXh0dXJlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvU3dhcENoYWluMTEuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1N3YXBDaGFpbjExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvdGV4dHVyZV9mb3JtYXRfdGFibGUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3RleHR1cmVfZm9ybWF0X3RhYmxlLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvdGV4dHVyZV9mb3JtYXRfdGFibGVfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvdGV4dHVyZV9mb3JtYXRfdGFibGVfdXRpbHMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvVHJhbnNmb3JtRmVlZGJhY2sxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvVHJhbnNmb3JtRmVlZGJhY2sxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1RyaW0xMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvVHJpbTExLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvVmVydGV4QXJyYXkxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvVmVydGV4QXJyYXkxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2QzZDExX3dpbjMyX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS93aW4zMi9OYXRpdmVXaW5kb3cxMVdpbjMyLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS93aW4zMi9OYXRpdmVXaW5kb3cxMVdpbjMyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvY29udmVyZ2VkL0NvbXBvc2l0b3JOYXRpdmVXaW5kb3cxMS5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvY29udmVyZ2VkL0NvbXBvc2l0b3JOYXRpdmVXaW5kb3cxMS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvdGhpcmRfcGFydHkvc3lzdGVtaW5mby9TeXN0ZW1JbmZvLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3RoaXJkX3BhcnR5L3N5c3RlbWluZm8vU3lzdGVtSW5mby5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2QzZDExX3dpbnV3cF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvd2lucnQvQ29yZVdpbmRvd05hdGl2ZVdpbmRvdy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvd2lucnQvQ29yZVdpbmRvd05hdGl2ZVdpbmRvdy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3dpbnJ0L0luc3BlY3RhYmxlTmF0aXZlV2luZG93LmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS93aW5ydC9JbnNwZWN0YWJsZU5hdGl2ZVdpbmRvdy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3dpbnJ0L05hdGl2ZVdpbmRvdzExV2luUlQuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3dpbnJ0L05hdGl2ZVdpbmRvdzExV2luUlQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2QzZC9kM2QxMS93aW5ydC9Td2FwQ2hhaW5QYW5lbE5hdGl2ZVdpbmRvdy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kM2QvZDNkMTEvd2lucnQvU3dhcENoYWluUGFuZWxOYXRpdmVXaW5kb3cuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9nbF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9CbGl0R0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvQmxpdEdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9CdWZmZXJHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9CdWZmZXJHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvQ2xlYXJNdWx0aXZpZXdHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9DbGVhck11bHRpdmlld0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Db21waWxlckdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0NvbXBpbGVyR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0NvbnRleHRHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Db250ZXh0R0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0Rpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0Rpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9EaXNwbGF5R0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvRGlzcGxheUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9GZW5jZU5WR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvRmVuY2VOVkdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9GcmFtZWJ1ZmZlckdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0ZyYW1lYnVmZmVyR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0Z1bmN0aW9uc0dMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0Z1bmN0aW9uc0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9JbWFnZUdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL0ltYWdlR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL01lbW9yeU9iamVjdEdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL01lbW9yeU9iamVjdEdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9QYXRoR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1BhdGhHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Qcm9ncmFtR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvUHJvZ3JhbUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Qcm9ncmFtUGlwZWxpbmVHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Qcm9ncmFtUGlwZWxpbmVHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvUXVlcnlHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9RdWVyeUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9SZW5kZXJidWZmZXJHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9SZW5kZXJidWZmZXJHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvUmVuZGVyZXJHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9SZW5kZXJlckdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9TYW1wbGVyR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU2FtcGxlckdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9TZW1hcGhvcmVHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9TZW1hcGhvcmVHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU2hhZGVyR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU2hhZGVyR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1N0YXRlTWFuYWdlckdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1N0YXRlTWFuYWdlckdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9TdXJmYWNlR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU3VyZmFjZUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9TeW5jR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU3luY0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9UZXh0dXJlR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvVGV4dHVyZUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9UcmFuc2Zvcm1GZWVkYmFja0dMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1RyYW5zZm9ybUZlZWRiYWNrR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1ZlcnRleEFycmF5R0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvVmVydGV4QXJyYXlHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZm9ybWF0dXRpbHNnbC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9mb3JtYXR1dGlsc2dsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9mdW5jdGlvbnNnbF9lbnVtcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZnVuY3Rpb25zZ2xfdHlwZWRlZnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2dsX251bGxfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvbnVsbF9mdW5jdGlvbnMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvbnVsbF9mdW5jdGlvbnMuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9nbF93Z2xfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvd2dsL0NvbnRleHRXR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvd2dsL0NvbnRleHRXR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9EM0RUZXh0dXJlU3VyZmFjZVdHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvRDNEVGV4dHVyZVN1cmZhY2VXR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9EaXNwbGF5V0dMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9EaXNwbGF5V0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvRFhHSVN3YXBDaGFpbldpbmRvd1N1cmZhY2VXR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvd2dsL0RYR0lTd2FwQ2hhaW5XaW5kb3dTdXJmYWNlV0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvRnVuY3Rpb25zV0dMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9GdW5jdGlvbnNXR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9QYnVmZmVyU3VyZmFjZVdHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvUGJ1ZmZlclN1cmZhY2VXR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9SZW5kZXJlcldHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvUmVuZGVyZXJXR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3dnbC9TdXJmYWNlV0dMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvV2luZG93U3VyZmFjZVdHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvV2luZG93U3VyZmFjZVdHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvd2dsL2Z1bmN0aW9uc3dnbF90eXBlZGVmcy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvd2dsL3dnbF91dGlscy5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC93Z2wvd2dsX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90aGlyZF9wYXJ0eS9raHJvbm9zL0dML3dnbGV4dC5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2dsX2dseF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvRGlzcGxheUdMWC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvRGlzcGxheUdMWC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZ2x4L0Z1bmN0aW9uc0dMWC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvRnVuY3Rpb25zR0xYLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvUmVuZGVyZXJHTFguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2dseC9SZW5kZXJlckdMWC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvUGJ1ZmZlclN1cmZhY2VHTFguY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZ2x4L1BidWZmZXJTdXJmYWNlR0xYLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9nbHgvU3VyZmFjZUdMWC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZ2x4L1dpbmRvd1N1cmZhY2VHTFguY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZ2x4L1dpbmRvd1N1cmZhY2VHTFguaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2dseC9mdW5jdGlvbnNnbHhfdHlwZWRlZnMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2dseC9wbGF0Zm9ybV9nbHguaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9nbF9lZ2xfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL0NvbnRleHRFR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL0NvbnRleHRFR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9EaXNwbGF5RUdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9EaXNwbGF5RUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvRXh0ZXJuYWxJbWFnZVNpYmxpbmdFR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9lZ2xfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL2VnbF91dGlscy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL0Z1bmN0aW9uc0VHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvRnVuY3Rpb25zRUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvSW1hZ2VFR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL0ltYWdlRUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvZnVuY3Rpb25zZWdsX3R5cGVkZWZzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvUGJ1ZmZlclN1cmZhY2VFR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL1BidWZmZXJTdXJmYWNlRUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvUmVuZGVyZXJFR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL1JlbmRlcmVyRUdMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvU3VyZmFjZUVHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvU3VyZmFjZUVHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL1N5bmNFR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL1N5bmNFR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9XaW5kb3dTdXJmYWNlRUdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9XaW5kb3dTdXJmYWNlRUdMLmgnLAotICAgICAgICBdLAotICAgICAgICAnbGliYW5nbGVfZ2xfZWdsX2RsX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9GdW5jdGlvbnNFR0xETC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvRnVuY3Rpb25zRUdMREwuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9nbF9vem9uZV9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvb3pvbmUvRGlzcGxheU96b25lLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9vem9uZS9EaXNwbGF5T3pvbmUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9vem9uZS9TdXJmYWNlT3pvbmUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWdsL296b25lL1N1cmZhY2VPem9uZS5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmFuZ2xlX2dsX2VnbF9hbmRyb2lkX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9hbmRyb2lkL0Rpc3BsYXlBbmRyb2lkLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9hbmRyb2lkL0Rpc3BsYXlBbmRyb2lkLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lZ2wvYW5kcm9pZC9OYXRpdmVCdWZmZXJJbWFnZVNpYmxpbmdBbmRyb2lkLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VnbC9hbmRyb2lkL05hdGl2ZUJ1ZmZlckltYWdlU2libGluZ0FuZHJvaWQuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9nbF9jZ2xfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NvbnRleHRDR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NvbnRleHRDR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EZXZpY2VDR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0RldmljZUNHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0nLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0lPU3VyZmFjZVN1cmZhY2VDR0wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0lPU3VyZmFjZVN1cmZhY2VDR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9SZW5kZXJlckNHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvUmVuZGVyZXJDR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9QYnVmZmVyU3VyZmFjZUNHTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvUGJ1ZmZlclN1cmZhY2VDR0wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJmYWNlQ0dMLm1tJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL1dpbmRvd1N1cmZhY2VDR0wuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9tYWNfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbScsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJhbmdsZV9udWxsX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvQnVmZmVyTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0J1ZmZlck5VTEwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvQ29tcGlsZXJOVUxMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvQ29tcGlsZXJOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0NvbnRleHROVUxMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvQ29udGV4dE5VTEwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvRGV2aWNlTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0RldmljZU5VTEwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvRGlzcGxheU5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9EaXNwbGF5TlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9GZW5jZU5WTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0ZlbmNlTlZOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0ZyYW1lYnVmZmVyTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL0ZyYW1lYnVmZmVyTlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9JbWFnZU5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9JbWFnZU5VTEwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvUGF0aE5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9QYXRoTlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9Qcm9ncmFtTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1Byb2dyYW1OVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1Byb2dyYW1QaXBlbGluZU5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9Qcm9ncmFtUGlwZWxpbmVOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1F1ZXJ5TlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1F1ZXJ5TlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9SZW5kZXJidWZmZXJOVUxMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvUmVuZGVyYnVmZmVyTlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9TYW1wbGVyTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1NhbXBsZXJOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1NoYWRlck5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9TaGFkZXJOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1N1cmZhY2VOVUxMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvU3VyZmFjZU5VTEwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL251bGwvU3luY05VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9TeW5jTlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9UZXh0dXJlTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1RleHR1cmVOVUxMLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1RyYW5zZm9ybUZlZWRiYWNrTlVMTC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJBTkdMRS9yZW5kZXJlci9udWxsL1RyYW5zZm9ybUZlZWRiYWNrTlVMTC5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9WZXJ0ZXhBcnJheU5VTEwuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbnVsbC9WZXJ0ZXhBcnJheU5VTEwuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJnbF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vYW5nbGV1dGlscy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL2RlYnVnLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV8wX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfMF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV8xX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV8yX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfMl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV8zX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV80X2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfNF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMV81X2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzFfNV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMl8wX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzJfMF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfMl8xX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzJfMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfM18wX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzNfMF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfM18xX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzNfMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfM18yX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzNfMl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfM18zX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzNfM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfNF8wX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfMF9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfNF8xX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfMV9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfNF8yX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfMl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfNF8zX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfM19hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfZ2xfNF80X2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfNl9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML2VudHJ5X3BvaW50c19nbF80XzRfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfNV9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML2VudHJ5X3BvaW50c19nbF80XzVfYXV0b2dlbi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvZW50cnlfcG9pbnRzX2dsXzRfNl9hdXRvZ2VuLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9lbnRyeV9wb2ludHNfd2dsLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML2VudHJ5X3BvaW50c193Z2wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML2xpYkdMX2F1dG9nZW4uY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0wvbGliR0xfYXV0b2dlbi5kZWYnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9saWJHTC5yYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdML3Byb2NfdGFibGVfd2dsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTC9wcm9jX3RhYmxlX3dnbF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL3Jlc291cmNlLmgnLAotICAgICAgICBdLAotICAgICAgICAnbGliZ2xlc3YyX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9jb21tb24vZGVidWcuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2VudHJ5X3BvaW50c19lbnVtX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkFOR0xFL2VudHJ5X3BvaW50c191dGlscy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsX2V4dC5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc18xXzBfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfMV8wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc18yXzBfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfMl8wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc18zXzBfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfM18wX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc18zXzFfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfM18xX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc18zXzJfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfM18yX2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZ2xlc19leHRfYXV0b2dlbi5jcHAnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2dsZXNfZXh0X2F1dG9nZW4uaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9nbG9iYWxfc3RhdGUuY3BwJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2dsb2JhbF9zdGF0ZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Ml9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIucmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvcHJvY190YWJsZV9lZ2wuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9wcm9jX3RhYmxlX2VnbF9hdXRvZ2VuLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9yZXNvdXJjZS5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmdsZXN2MV9jbV9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjFfQ00vbGliR0xFU3YxX0NNLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2MV9DTS9saWJHTEVTdjFfQ00uZGVmJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YxX0NNL2xpYkdMRVN2MV9DTS5yYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2MV9DTS9yZXNvdXJjZS5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xpYmVnbF9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJFR0wvbGliRUdMLmNwcCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkVHTC9saWJFR0wucmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJFR0wvcmVzb3VyY2UuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbF9leHQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2xpYkVHTC9lZ2xfbG9hZGVyX2F1dG9nZW4uaCcsCi0gICAgICAgIF0sCi0gICAgfSwKLSAgICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgIFsnT1M9PSJzdGFyYm9hcmQiJywKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX3BsYXRmb3JtX2xpbnV4PT0xJywKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX1BMQVRGT1JNX0xJTlVYPTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYW5nbGVfcGxhdGZvcm1fcG9zaXg9PTEnLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfUExBVEZPUk1fUE9TSVg9MScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9wbGF0Zm9ybV93aW5kb3dzPT0xJywKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX1BMQVRGT1JNX1dJTkRPV1M9MScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgfSwKLSAgICAjIEV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBpcyBkdXBsaWNhdGVkIGluIHRoZSBHTiBidWlsZC4gSWYgeW91IGNoYW5nZQotICAgICMgYW55dGhpbmcgYWxzbyBjaGFuZ2UgYW5nbGUvQlVJTEQuZ24KLSAgICAndGFyZ2V0cyc6Ci0gICAgWwotICAgICAgICB7Ci0gICAgICAgICAgICAjIFRoaXMgdGFyZ2V0IGluY2x1ZGVzIHRoZSByaWdodCBBTkdMRSBkZWZpbmVzIGZvciA8KERFUFRIKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvY29tbW9uL3BsYXRmb3JtLmggZm9yIEQzRDExLgotICAgICAgICAgICAgIyBJdCBhbHNvIGxpbmtzIGFnYWluc3QgdGhlIHJpZ2h0IGxpYnMuIFRoaXMgaXMgdXNlZnVsIGZvciB0aGUgdGVzdHMsIHdoaWNoCi0gICAgICAgICAgICAjIGhhdmUgc3BlY2lhbCBEM0QxMSBjb2RlIGZvciBEZWJ1ZyBydW50aW1lIGVycm9yIG1lc3NhZ2UgaGFuZGxpbmcuCi0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGliQU5HTEVfZDNkMTFfY29uZmlnJywKLSAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX2QzZDExPT0xJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWQ0xpbmtlclRvb2wnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX2J1aWxkX3dpbnJ0PT0wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHhndWlkLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R4Z3VpZC5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDNkMTEubGliJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2QzZGNvbXBpbGVyLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJBTkdMRV9yZW5kZXJlcl9jb25maWcnLAotICAgICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfZDNkMTE9PTEnLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9EM0QxMScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfZDNkOT09MScsCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfRU5BQkxFX0QzRDknLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX2dsPT0xJywKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfT1BFTkdMJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX2VuYWJsZV92dWxrYW49PTEnLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9WVUxLQU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX251bGw9PTEnLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX0VOQUJMRV9OVUxMJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICB9LAotCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJBTkdMRScsCi0gICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAndHJhbnNsYXRvcicsCi0gICAgICAgICAgICAgICAgJ2FuZ2xlX2NvbW1vbicsCi0gICAgICAgICAgICAgICAgJ2FuZ2xlX2ltYWdlX3V0aWwnLAotICAgICAgICAgICAgICAgICdhbmdsZV9ncHVfaW5mb191dGlsJywKLSAgICAgICAgICAgICAgICAnbGliQU5HTEVfZDNkMTFfY29uZmlnJywKLSAgICAgICAgICAgICAgICAnbGliQU5HTEVfcmVuZGVyZXJfY29uZmlnJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvJywKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90aGlyZF9wYXJ0eS9raHJvbm9zJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX2hlYWRlcnMpJywKLSAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfc291cmNlcyknLAotICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9pbmNsdWRlcyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnTElCQU5HTEVfSU1QTEVNRU5UQVRJT04nLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnYW5nbGVfY29tbW9uJywKLSAgICAgICAgICAgICAgICAnbGliQU5HTEVfZDNkMTFfY29uZmlnJywKLSAgICAgICAgICAgICAgICAnbGliQU5HTEVfcmVuZGVyZXJfY29uZmlnJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYW5nbGUvc3JjJywKLSAgICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgJ0xJQkFOR0xFX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICAgICAgICAgICAgJ0dMX0dMRVhUX1BST1RPVFlQRVMnLAotICAgICAgICAgICAgICAgICAgICAnQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUz17ICJkM2Rjb21waWxlcl80Ny5kbGwiLCAiZDNkY29tcGlsZXJfNDYuZGxsIiwgImQzZGNvbXBpbGVyXzQzLmRsbCIgfScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dMX0FQSUNBTEw9JywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR0xfQVBJQ0FMTD1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgWydPUyA9PSAibWFjIicsCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RZTElCX0lOU1RBTExfTkFNRV9CQVNFJzogJ0BycGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfZ2w9PTEnLAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWydhbmdsZV91c2VfZ2x4PT0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FOR0xFX1VTRV9YMTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfZDNkOT09MSBvciBhbmdsZV9lbmFibGVfZDNkMTE9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZDNkX3NoYXJlZF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydhbmdsZV9lbmFibGVfZDNkOT09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9kM2Q5X3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkM2Q5LmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX2QzZDExPT0xJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX2QzZDExX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX2J1aWxkX3dpbnJ0PT0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZDNkMTFfd2ludXdwX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgIyB3aW4zMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9kM2QxMV93aW4zMl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgWydlbmFibGVfZDNkMTFfZmVhdHVyZV9sZXZlbF8xMT09MScsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFTkFCTEVfRDNEMTFfRkVBVFVSRV9MRVZFTF8xMScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ2FuZ2xlX2VuYWJsZV9nbD09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9nbF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZ2xfd2dsX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2FuZ2xlX3VzZV9nbHg9PTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBTkdMRV9VU0VfWDExJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9nbF9nbHhfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsndXNlX296b25lPT0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfVVNFX09aT05FJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9nbF9lZ2xfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfZ2xfZWdsX2RsX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX2dsX296b25lX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tY2ZsYWdzIGxpYmRybSBnYm0pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWxpYnMtb25seS1MIC0tbGlicy1vbmx5LW90aGVyIGxpYmRybSBnYm0pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWxpYnMtb25seS1sIGxpYmRybSBnYm0pIC1sZGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsnYW5nbGVfbGlua19nbHg9PTEnLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWxHTCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQU5HTEVfTElOS19HTFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBzdGF0aWNhbGx5IGxpbmsgR0wsIHdlIG5lZWQgdGhlIGRsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWJyYXJ5IHNvIHRoYXQgd2UgY2FuIGR5bmFtaWNhbGx5IGxpbmsgd2l0aCBHTC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbGRsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09Im1hYyInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV9nbF9jZ2xfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9TdXJmYWNlLmZyYW1ld29yaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMnOiBbJ0BleGVjdXRhYmxlX3BhdGgvLiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX3Z1bGthbj09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChsaWJhbmdsZV92dWxrYW5fc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX3Z1bGthbl93aW4zMl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09ImxpbnV4IicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGxpYmFuZ2xlX3Z1bGthbl94Y2Jfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnYW5nbGVfZW5hYmxlX251bGw9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAobGliYW5nbGVfbnVsbF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MCBhbmQgdGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcHlfY29tcGlsZXJfZGxsJwotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ21zdnNfcmVxdWlyZXNfaW1wb3J0bGlicmFyeScgOiAndHJ1ZScsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGliR0xFU3YyJywKLSAgICAgICAgICAgICd0eXBlJzogJzwoYW5nbGVfZ2xfbGlicmFyeV90eXBlKScsCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWyAnbGliQU5HTEUnLCAnYW5nbGVfY29tbW9uJyBdLAotICAgICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLCBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICc8QChsaWJnbGVzdjJfc291cmNlcyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MScsCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAnbXN2c19yZXF1aXJlc19pbXBvcnRsaWJyYXJ5JyA6ICd0cnVlJywKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ2FuZ2xlX2dsX2xpYnJhcnlfdHlwZT09ICJzaGFyZWRfbGlicmFyeSInLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOlsKLSAgICAgICAgICAgICAgICAgICAgICAnTElCR0xFU1YyX0RMTCcKLSAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLQotICAgICAgICB9LAotCi0gICAgICAgIHsKLSAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJHTEVTdjJfc3RhdGljJywKLSAgICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbICdsaWJBTkdMRScsICdhbmdsZV9jb21tb24nIF0sCi0gICAgICAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJ2xpYkFOR0xFJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgJzxAKGxpYmdsZXN2Ml9zb3VyY2VzKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTEnLAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ21zdnNfcmVxdWlyZXNfaW1wb3J0bGlicmFyeScgOiAndHJ1ZScsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5yYyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCmluZGV4IDViMTA0NzEuLjU5YjJkODEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCisrKyBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnJjCkBAIC0xLDEzNyArMSwxMzcgQEAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCByZXNvdXJjZSBzY3JpcHQuDQotLy8NCi0jaW5jbHVkZSAicmVzb3VyY2UuaCINCi0NCi0jZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuDQotLy8NCi0jaW5jbHVkZSA8d2luZG93cy5oPg0KLSNpbmNsdWRlICIuLi9jb21tb24vdmVyc2lvbi5oIg0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMNCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcw0KLQ0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkNCi0jaWZkZWYgX1dJTjMyDQotTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0VOR0xJU0hfVVMNCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQ0KLSNlbmRpZiAvL19XSU4zMg0KLQ0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VEDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIFRFWFRJTkNMVURFDQotLy8NCi0NCi0xIFRFWFRJTkNMVURFIA0KLUJFR0lODQotICAgICJyZXNvdXJjZS5oXDAiDQotRU5EDQotDQotMiBURVhUSU5DTFVERSANCi1CRUdJTg0KLSAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiINCi0gICAgIiNpbmNsdWRlICIiLi4vY29tbW9uL3ZlcnNpb24uaCIiXDAiDQotRU5EDQotDQotMyBURVhUSU5DTFVERSANCi1CRUdJTg0KLSAgICAiXHJcbiINCi0gICAgIlwwIg0KLUVORA0KLQ0KLSNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VEDQotDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIFZlcnNpb24NCi0vLw0KLQ0KLVZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTw0KLSBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sQU5HTEVfUkVWSVNJT04sMA0KLSBQUk9EVUNUVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sQU5HTEVfUkVWSVNJT04sMA0KLSBGSUxFRkxBR1NNQVNLIDB4MTdMDQotI2lmZGVmIF9ERUJVRw0KLSBGSUxFRkxBR1MgMHgxTA0KLSNlbHNlDQotIEZJTEVGTEFHUyAweDBMDQotI2VuZGlmDQotIEZJTEVPUyAweDRMDQotIEZJTEVUWVBFIDB4MkwNCi0gRklMRVNVQlRZUEUgMHgwTA0KLUJFR0lODQotICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyINCi0gICAgQkVHSU4NCi0gICAgICAgIEJMT0NLICIwNDA5MDRiMCINCi0gICAgICAgIEJFR0lODQotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJBTkdMRSBsaWJHTEVTdjIgRHluYW1pYyBMaW5rIExpYnJhcnkiDQotICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcNCi0gICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYkdMRVN2MiINCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDE1IEdvb2dsZSBJbmMuIg0KLSAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYkdMRVN2Mi5kbGwiDQotICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSINCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBBTkdMRV9WRVJTSU9OX1NUUklORw0KLSAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1JVF9EQVRFDQotICAgICAgICBFTkQNCi0gICAgRU5EDQotICAgIEJMT0NLICJWYXJGaWxlSW5mbyINCi0gICAgQkVHSU4NCi0gICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAxMjAwDQotICAgIEVORA0KLUVORA0KLQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBEaWFsb2cNCi0vLw0KLQ0KLUlERF9ESUFMT0cxIERJQUxPR0VYIDAsIDAsIDEyOSwgNDcNCi1TVFlMRSBEU19TRVRGT05UIHwgRFNfTU9EQUxGUkFNRSB8IERTX0ZJWEVEU1lTIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQ0KLUNBUFRJT04gIldhaXRpbmcgZm9yIGRlYnVnZ2VyIg0KLUZPTlQgOCwgIk1TIFNoZWxsIERsZyIsIDQwMCwgMCwgMHgxDQotQkVHSU4NCi1QVVNIQlVUVE9OICAgICAgIkNhbmNlbCIsSURDQU5DRUwsNzIsMjYsNTAsMTQNCi1MVEVYVCAgICAgICAgICAgIkF0dGFjaCBhIGRlYnVnZ2VyIG9yIEVTQyB0byBjYW5jZWwiLElEQ19TVEFUSUMsNyw3LDExNSw4DQotRU5EDQotDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIERFU0lHTklORk8NCi0vLw0KLQ0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VEDQotR1VJREVMSU5FUyBERVNJR05JTkZPDQotQkVHSU4NCi1JRERfRElBTE9HMSwgRElBTE9HDQotQkVHSU4NCi1MRUZUTUFSR0lOLCA3DQotUklHSFRNQVJHSU4sIDEyMg0KLVRPUE1BUkdJTiwgNw0KLUJPVFRPTU1BUkdJTiwgNDANCi1FTkQNCi1FTkQNCi0jZW5kaWYgICAgLy8gQVBTVFVESU9fSU5WT0tFRA0KLQ0KLSNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLQ0KLQ0KLSNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRA0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4NCi0vLw0KLQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VEDQorLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4KKy8vCisjaW5jbHVkZSAicmVzb3VyY2UuaCIKKworI2RlZmluZSBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAyIHJlc291cmNlLgorLy8KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSAiLi4vY29tbW9uL3ZlcnNpb24uaCIKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKKworI2lmICFkZWZpbmVkKEFGWF9SRVNPVVJDRV9ETEwpIHx8IGRlZmluZWQoQUZYX1RBUkdfRU5VKQorI2lmZGVmIF9XSU4zMgorTEFOR1VBR0UgTEFOR19FTkdMSVNILCBTVUJMQU5HX0VOR0xJU0hfVVMKKyNwcmFnbWEgY29kZV9wYWdlKDEyNTIpCisjZW5kaWYgLy9fV0lOMzIKKworI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVEVYVElOQ0xVREUKKy8vCisKKzEgVEVYVElOQ0xVREUgCitCRUdJTgorICAgICJyZXNvdXJjZS5oXDAiCitFTkQKKworMiBURVhUSU5DTFVERSAKK0JFR0lOCisgICAgIiNpbmNsdWRlICIiYWZ4cmVzLmgiIlxyXG4iCisgICAgIiNpbmNsdWRlICIiLi4vY29tbW9uL3ZlcnNpb24uaCIiXDAiCitFTkQKKworMyBURVhUSU5DTFVERSAKK0JFR0lOCisgICAgIlxyXG4iCisgICAgIlwwIgorRU5ECisKKyNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBWZXJzaW9uCisvLworCitWU19WRVJTSU9OX0lORk8gVkVSU0lPTklORk8KKyBGSUxFVkVSU0lPTiBBTkdMRV9NQUpPUl9WRVJTSU9OLEFOR0xFX01JTk9SX1ZFUlNJT04sQU5HTEVfUkVWSVNJT04sMAorIFBST0RVQ1RWRVJTSU9OIEFOR0xFX01BSk9SX1ZFUlNJT04sQU5HTEVfTUlOT1JfVkVSU0lPTixBTkdMRV9SRVZJU0lPTiwwCisgRklMRUZMQUdTTUFTSyAweDE3TAorI2lmZGVmIF9ERUJVRworIEZJTEVGTEFHUyAweDFMCisjZWxzZQorIEZJTEVGTEFHUyAweDBMCisjZW5kaWYKKyBGSUxFT1MgMHg0TAorIEZJTEVUWVBFIDB4MkwKKyBGSUxFU1VCVFlQRSAweDBMCitCRUdJTgorICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBCTE9DSyAiMDQwOTA0YjAiCisgICAgICAgIEJFR0lOCisgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIkFOR0xFIGxpYkdMRVN2MiBEeW5hbWljIExpbmsgTGlicmFyeSIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYkdMRVN2MiIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgKEMpIDIwMTUgR29vZ2xlIEluYy4iCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJHTEVTdjIuZGxsIgorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsIEFOR0xFX1ZFUlNJT05fU1RSSU5HCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiQU5HTEUgbGliR0xFU3YyIER5bmFtaWMgTGluayBMaWJyYXJ5IgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgQU5HTEVfVkVSU0lPTl9TVFJJTkcKKyAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJCdWlsZCBEYXRlOiAiIEFOR0xFX0NPTU1JVF9EQVRFCisgICAgICAgIEVORAorICAgIEVORAorICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTIwMAorICAgIEVORAorRU5ECisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEaWFsb2cKKy8vCisKK0lERF9ESUFMT0cxIERJQUxPR0VYIDAsIDAsIDEyOSwgNDcKK1NUWUxFIERTX1NFVEZPTlQgfCBEU19NT0RBTEZSQU1FIHwgRFNfRklYRURTWVMgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCitDQVBUSU9OICJXYWl0aW5nIGZvciBkZWJ1Z2dlciIKK0ZPTlQgOCwgIk1TIFNoZWxsIERsZyIsIDQwMCwgMCwgMHgxCitCRUdJTgorUFVTSEJVVFRPTiAgICAgICJDYW5jZWwiLElEQ0FOQ0VMLDcyLDI2LDUwLDE0CitMVEVYVCAgICAgICAgICAgIkF0dGFjaCBhIGRlYnVnZ2VyIG9yIEVTQyB0byBjYW5jZWwiLElEQ19TVEFUSUMsNyw3LDExNSw4CitFTkQKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERFU0lHTklORk8KKy8vCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECitHVUlERUxJTkVTIERFU0lHTklORk8KK0JFR0lOCitJRERfRElBTE9HMSwgRElBTE9HCitCRUdJTgorTEVGVE1BUkdJTiwgNworUklHSFRNQVJHSU4sIDEyMgorVE9QTUFSR0lOLCA3CitCT1RUT01NQVJHSU4sIDQwCitFTkQKK0VORAorI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworI2VuZGlmICAgIC8vIEVuZ2xpc2ggKFUuUy4pIHJlc291cmNlcworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKyNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4KKy8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNlbmRpZiAgICAvLyBub3QgQVBTVFVESU9fSU5WT0tFRApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3Rlc3RzL2FuZ2xlX3VuaXR0ZXN0cy5neXBpIGIvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3Rlc3RzL2FuZ2xlX3VuaXR0ZXN0cy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGRkN2I0Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90ZXN0cy9hbmdsZV91bml0dGVzdHMuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgVGhpcyAuZ3lwaSBkZXNjcmliZXMgYWxsIG9mIHRoZSBzb3VyY2VzIGFuZCBkZXBlbmRlbmNpZXMgdG8gYnVpbGQgYQotIyB1bmlmaWVkICJhbmdsZV91bml0dGVzdHMiIHRhcmdldCwgd2hpY2ggY29udGFpbnMgYWxsIG9mIEFOR0xFJ3MKLSMgdGVzdHMgdGhhdCBkb24ndCByZXF1aXJlIGEgZnVsbHkgZnVuY3Rpb25hbCBBTkdMRSBpbiBvcmRlciB0byBydW4KLSMgKGNvbXBpbGVyIHRlc3RzLCBwcmVwcm9jZXNzb3IgdGVzdHMsIGV0Yy4pLiBJdCByZXF1aXJlcyBhIHBhcmVudAotIyB0YXJnZXQgdG8gaW5jbHVkZSB0aGlzIGd5cGkgaW4gYW4gZXhlY3V0YWJsZSB0YXJnZXQgY29udGFpbmluZyBhCi0jIGd0ZXN0IGhhcm5lc3MgaW4gYSBtYWluLmNwcC4KLQotewotICAgICd2YXJpYWJsZXMnOgotICAgIHsKLSAgICAgICAgJ2FuZ2xlX3VuaXR0ZXN0c19zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2NvbW1vbi9PcHRpb25hbF91bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2NvbW1vbi9iaXRzZXRfdXRpbHNfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9jb21tb24vbWF0aHV0aWxfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9jb21tb24vbWF0cml4X3V0aWxzX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvY29tbW9uL3N0cmluZ191dGlsc191bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2NvbW1vbi91dGlsaXRpZXNfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9jb21tb24vdmVjdG9yX3V0aWxzX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvQmluYXJ5U3RyZWFtX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvQ29uZmlnX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvRmVuY2VfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9IYW5kbGVBbGxvY2F0b3JfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9IYW5kbGVSYW5nZUFsbG9jYXRvcl91bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2xpYkFOR0xFL0ltYWdlX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvSW1hZ2VJbmRleEl0ZXJhdG9yX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvUHJvZ3JhbV91bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2xpYkFOR0xFL1Jlc291cmNlTWFuYWdlcl91bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2xpYkFOR0xFL1N1cmZhY2VfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9UcmFuc2Zvcm1GZWVkYmFja191bml0dGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2xpYkFOR0xFL1ZhcnlpbmdQYWNraW5nX3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvVmVydGV4QXJyYXlfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9Xb3JrZXJUaHJlYWRfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9yZW5kZXJlci9CdWZmZXJJbXBsX21vY2suaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvRnJhbWVidWZmZXJJbXBsX21vY2suaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGxfbW9jay5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9yZW5kZXJlci9SZW5kZXJidWZmZXJJbXBsX21vY2suaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvSW1hZ2VJbXBsX21vY2suaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvVGV4dHVyZUltcGxfbW9jay5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9yZW5kZXJlci9UcmFuc2Zvcm1GZWVkYmFja0ltcGxfbW9jay5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS9zaWduYWxfdXRpbHNfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9saWJBTkdMRS92YWxpZGF0aW9uRVNfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9hbmdsZV91bml0dGVzdHNfdXRpbHMuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvQVBJX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9BcHBlbmRpeEFMaW1pdGF0aW9uc190ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvQ29sbGVjdFZhcmlhYmxlc190ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvQ29uc3RhbnRGb2xkaW5nX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9Db25zdGFudEZvbGRpbmdOYU5fdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL0NvbnN0YW50Rm9sZGluZ092ZXJmbG93X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9Db25zdHJ1Y3RDb21waWxlcl90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvRGVidWdTaGFkZXJQcmVjaXNpb25fdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL0VtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdF90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvRXhwcmVzc2lvbkxpbWl0X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9FWFRfWVVWX3RhcmdldF90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvRVhUX2JsZW5kX2Z1bmNfZXh0ZW5kZWRfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL0Zsb2F0TGV4X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9GcmFnRGVwdGhfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL0dMU0xDb21wYXRpYmlsaXR5T3V0cHV0X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9JbnRlcm1Ob2RlX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9OVl9kcmF3X2J1ZmZlcnNfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1BhY2tfVW5wYWNrX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9QcnVuZUVtcHR5RGVjbGFyYXRpb25zX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9QcnVuZVB1cmVMaXRlcmFsU3RhdGVtZW50c190ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvUHJ1bmVVbnVzZWRGdW5jdGlvbnNfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1F1YWxpZmljYXRpb25PcmRlckVTU0wzMV90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvUXVhbGlmaWNhdGlvbk9yZGVyX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9SZWNvcmRDb25zdGFudFByZWNpc2lvbl90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvUmVtb3ZlUG93X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9TYW1wbGVyTXVsdGlzYW1wbGVfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1NoYWRlckV4dGVuc2lvbl90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvU2hhZGVySW1hZ2VfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1NoYWRlclZhbGlkYXRpb25fdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1NoYWRlclZhcmlhYmxlX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9jb21waWxlcl90ZXN0cy9TaENvbXBpbGVfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1R5cGVUcmFja2luZ190ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvVmFyaWFibGVQYWNrZXJfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL2NvbXBpbGVyX3Rlc3RzL1dFQkdMX211bHRpdmlld190ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvV29ya0dyb3VwU2l6ZV90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvcHJlcHJvY2Vzc29yX3Rlc3RzL2NoYXJfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9jb21tZW50X3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvZGVmaW5lX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvZXJyb3JfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9leHRlbnNpb25fdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9pZGVudGlmaWVyX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvaWZfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9pbnB1dF90ZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvcHJlcHJvY2Vzc29yX3Rlc3RzL2xvY2F0aW9uX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvTW9ja0RpYWdub3N0aWNzLmgnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9Nb2NrRGlyZWN0aXZlSGFuZGxlci5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvbnVtYmVyX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvb3BlcmF0b3JfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9wcmFnbWFfdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy9QcmVwcm9jZXNzb3JUZXN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvcHJlcHJvY2Vzc29yX3Rlc3RzL1ByZXByb2Nlc3NvclRlc3QuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvcHJlcHJvY2Vzc29yX3Rlc3RzL3NwYWNlX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy9wcmVwcm9jZXNzb3JfdGVzdHMvdG9rZW5fdGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3ByZXByb2Nlc3Nvcl90ZXN0cy92ZXJzaW9uX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy90ZXN0X3V0aWxzL2NvbXBpbGVyX3Rlc3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy90ZXN0cy90ZXN0X3V0aWxzL2NvbXBpbGVyX3Rlc3QuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvdGVzdF91dGlscy9Db25zdGFudEZvbGRpbmdUZXN0LmgnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3Rlc3RfdXRpbHMvQ29uc3RhbnRGb2xkaW5nVGVzdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3Rlc3RfdXRpbHMvU2hhZGVyQ29tcGlsZVRyZWVUZXN0LmgnLAotICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3Rlc3RfdXRpbHMvU2hhZGVyQ29tcGlsZVRyZWVUZXN0LmNwcCcsCi0gICAgICAgIF0sCi0gICAgICAgICMgVE9ETyhqbWFkaWxsKTogc2hvdWxkIHByb2JhYmx5IGNhbGwgdGhpcyB3aW5kb3dzIHNvdXJjZXMKLSAgICAgICAgJ2FuZ2xlX3VuaXR0ZXN0c19obHNsX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvdGVzdHMvY29tcGlsZXJfdGVzdHMvVW5yb2xsRmxhdHRlbl90ZXN0LmNwcCcsCi0gICAgICAgIF0sCi0gICAgfSwKLSAgICAjIEV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBidXQgdGhlIFdpblJUIGNvbmZpZ3VyYXRpb24gaXMgZHVwbGljYXRlZCBpbiB0aGUgR04gYnVpbGQuCi0gICAgIyBJZiB5b3UgY2hhbmdlIGFueXRoaW5nIGFsc28gY2hhbmdlIGFuZ2xlL3NyYy90ZXN0cy9CVUlMRC5nbgotICAgICdkZXBlbmRlbmNpZXMnOgotICAgIFsKLSAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2FuZ2xlLmd5cDpsaWJBTkdMRScsCi0gICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9hbmdsZS5neXA6cHJlcHJvY2Vzc29yJywKLSAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2FuZ2xlLmd5cDp0cmFuc2xhdG9yJywKLSAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL3Rlc3RzL3Rlc3RzLmd5cDphbmdsZV90ZXN0X3N1cHBvcnQnLAotICAgIF0sCi0gICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgWwotICAgICAgICAnPChhbmdsZV9wYXRoKS9pbmNsdWRlJywKLSAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjJywKLSAgICBdLAotICAgICdzb3VyY2VzJzoKLSAgICBbCi0gICAgICAgICc8QChhbmdsZV91bml0dGVzdHNfc291cmNlcyknLAotICAgIF0sCi0gICAgJ2NvbmRpdGlvbnMnOgotICAgIFsKLSAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MScsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3dpbnJ0L0NvcmVXaW5kb3dOYXRpdmVXaW5kb3dfdW5pdHRlc3QuY3BwJywKLSAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZDNkL2QzZDExL3dpbnJ0L1N3YXBDaGFpblBhbmVsTmF0aXZlV2luZG93X3VuaXR0ZXN0LmNwcCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfRDNEMTEnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bnRpbWVvYmplY3QubGliJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgIHsKLSAgICAgICAgICAgICMgVE9ETyhjd2FsbGV6KTogbWFrZSB0aGlzIGFuZ2xlX2VuYWJsZV9obHNsIGluc3RlYWQgKHJlcXVpcmVzIGd5cCBmaWxlIHJlZmFjdG9yaW5nKQotICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICdBTkdMRV9FTkFCTEVfSExTTCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICc8QChhbmdsZV91bml0dGVzdHNfaGxzbF9zb3VyY2VzKScsCi0gICAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3Rlc3RzL3Rlc3RzLmd5cCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90ZXN0cy90ZXN0cy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMjUzOWYuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3Rlc3RzL3Rlc3RzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgICAnaW5jbHVkZXMnOgotICAgIFsKLSAgICAgICAgJ2RlcXAuZ3lwaScsCi0gICAgICAgICcuLi8uLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsCi0gICAgXSwKLSAgICAndmFyaWFibGVzJzoKLSAgICB7Ci0gICAgICAgICdhbmdsZV9idWlsZF9jb25mb3JtYW5jZV90ZXN0cyUnOiAnMCcsCi0KLSAgICAgICAgJ3JhcGlkanNvbl9pbmNsdWRlX2Rpcic6ICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZScsCi0gICAgICAgICdyYXBpZGpzb25faGVhZGVycyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vYWxsb2NhdG9ycy5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vZG9jdW1lbnQuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2VuY29kZWRzdHJlYW0uaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2VuY29kaW5ncy5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vZmlsZXJlYWRzdHJlYW0uaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ZpbGVzdHJlYW0uaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ZpbGV3cml0ZXN0cmVhbS5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vbWVtb3J5YnVmZmVyLmgnLAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L3JhcGlkanNvbi9pbmNsdWRlL3JhcGlkanNvbi9tZW1vcnlzdHJlYW0uaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL3ByZXR0eXdyaXRlci5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vcmFwaWRqc29uLmgnLAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L3JhcGlkanNvbi9pbmNsdWRlL3JhcGlkanNvbi9yZWFkZXIuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL3N0cmluZ2J1ZmZlci5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vd3JpdGVyLmgnLAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L3JhcGlkanNvbi9pbmNsdWRlL3JhcGlkanNvbi9lcnJvci9lbi5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vZXJyb3IvZXJyb3IuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ludGVybmFsL2R0b2EuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ludGVybmFsL2l0b2EuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ludGVybmFsL21ldGEuaCcsCi0gICAgICAgICAgICAndGhpcmRfcGFydHkvcmFwaWRqc29uL2luY2x1ZGUvcmFwaWRqc29uL2ludGVybmFsL3BvdzEwLmgnLAotICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L3JhcGlkanNvbi9pbmNsdWRlL3JhcGlkanNvbi9pbnRlcm5hbC9zdGFjay5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vaW50ZXJuYWwvc3RyZnVuYy5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vbXNpbnR0eXBlcy9pbnR0eXBlcy5oJywKLSAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9yYXBpZGpzb24vaW5jbHVkZS9yYXBpZGpzb24vbXNpbnR0eXBlcy9zdGRpbnQuaCcsCi0gICAgICAgIF0sCi0gICAgfSwKLSAgICAnY29uZGl0aW9ucyc6Ci0gICAgWwotICAgICAgICAjIEdvb2dsZVRlc3QgZG9lc24ndCBzdXBwb3J0IFdpblJUCi0gICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTAnLAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0cyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnYW5nbGVfdGVzdF9zdXBwb3J0JywKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnYW5nbGVfaW50ZXJuYWxfZ21vY2snLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZ2xlX2ludGVybmFsX2d0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnYW5nbGVfYnVpbGRfd2lucnQ9PTAnLAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0cyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgIyBIaWRlIHRoZXNlIHRhcmdldHMgZnJvbSBDaHJvbWl1bSwgYmVjYXVzZSBpdCBjYW4ndAotICAgICAgICAgICAgICAgICMgZmluZCBvdXIgc3RhbmRhbG9uZSBjb3B5IG9mIHRoZSBndGVzdC9nbW9jayBzb3VyY2VzLgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX2ludGVybmFsX2d0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi8uLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS90ZXN0aW5nL2d0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3Rlc3RpbmcvZ3Rlc3QvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvdGVzdGluZy9ndGVzdC9zcmMvZ3Rlc3QtYWxsLmNjJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnX1ZBUklBRElDX01BWD0xMCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVkFSSUFESUNfTUFYPTEwJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS90ZXN0aW5nL2d0ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS90ZXN0aW5nL2d0ZXN0L2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnYW5nbGVfaW50ZXJuYWxfZ21vY2snLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICdpbmNsdWRlcyc6IFsgJy4uLy4uL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3Rlc3RpbmcvZ21vY2snLAotICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvdGVzdGluZy9nbW9jay9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3Rlc3RpbmcvZ3Rlc3QvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvdGVzdGluZy9nbW9jay9zcmMvZ21vY2stYWxsLmNjJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnX1ZBUklBRElDX01BWD0xMCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVkFSSUFESUNfTUFYPTEwJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS90ZXN0aW5nL2dtb2NrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS90ZXN0aW5nL2dtb2NrL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3Rlc3RpbmcvZ3Rlc3QvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAjIFRoZXNlIHNhbWUgdGFyZ2V0IG5hbWVzIGV4aXN0IG9uIHRoZSBDaHJvbWl1bSBzaWRlLAotICAgICAgICAgICAgICAgICMgd2hpY2ggaXMgZm9yYmlkZGVuLCBzbyB3ZSBtYWtlIHRoZW0gY29uZGl0aW9uYWwgb24KLSAgICAgICAgICAgICAgICAjIEFOR0xFJ3Mgc3RhbmRhbG9uZSBidWlsZC4KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdhbmdsZV91bml0dGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV91bml0dGVzdHMuZ3lwaScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZ2xlX3VuaXR0ZXN0c19tYWluLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydhbmdsZV9idWlsZF93aW5ydD09MScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVudGltZW9iamVjdC5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgNDI0NCwgIyBDb252ZXJzaW9uIGZyb20gJ3R5cGUxJyB0byAndHlwZTInLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX2VuZDJlbmRfdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJy4uLy4uL2d5cC9jb21tb25fZGVmaW5lcy5neXBpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV9lbmQyZW5kX3Rlc3RzLmd5cGknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV9lbmQyZW5kX3Rlc3RzX21haW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX3doaXRlX2JveF90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZ2xlX3doaXRlX2JveF90ZXN0cy5neXBpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnYW5nbGVfd2hpdGVfYm94X3Rlc3RzX21haW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX3BlcmZ0ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnLi4vLi4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZ2xlX3BlcmZ0ZXN0cy5neXBpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnYW5nbGVfcGVyZnRlc3RzX21haW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICBbJ2FuZ2xlX2J1aWxkX2NvbmZvcm1hbmNlX3Rlc3RzJywKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZ2xlc19jb25mb3JtYW5jZV90ZXN0c19vdXRwdXRfZGlyJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2NvbmZvcm1hbmNlX3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzX2lucHV0X2Rpcic6ICd0aGlyZF9wYXJ0eS9nbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2NvbmZvcm0vR1RGX0VTL2dsc2wvR1RGJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzX2dlbmVyYXRvcl9zY3JpcHQnOiAnZ2xlc19jb25mb3JtYW5jZV90ZXN0cy9nZW5lcmF0ZV9nbGVzX2NvbmZvcm1hbmNlX3Rlc3RzLnB5JywKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldHMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX2dsZXMyX2NvbmZvcm1hbmNlX3Rlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXMnOiBbICcuLi8uLi9neXAvY29tbW9uX2RlZmluZXMuZ3lwaScsIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvYW5nbGUuZ3lwOmxpYkdMRVN2MicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NyYy9hbmdsZS5neXA6bGliRUdMJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L2dsZXNfY29uZm9ybWFuY2VfdGVzdHMvY29uZm9ybS9HVEZfRVMvZ2xzbC9HVEYvZXNfY3RzLmd5cDplc19jdHNfdGVzdF9kYXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXJkX3BhcnR5L2dsZXNfY29uZm9ybWFuY2VfdGVzdHMvY29uZm9ybS9HVEZfRVMvZ2xzbC9HVEYvZXNfY3RzLmd5cDplczJfY3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZ2xlX3Rlc3Rfc3VwcG9ydCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyaWFibGVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzMl9jb25mb3JtYW5jZV90ZXN0c19pbnB1dF9maWxlJzogJzwoZ2xlc19jb25mb3JtYW5jZV90ZXN0c19pbnB1dF9kaXIpL211c3RwYXNzX2VzMjAucnVuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsZXMyX2NvbmZvcm1hbmNlX3Rlc3RzX2dlbmVyYXRlZF9maWxlJzogJzwoZ2xlc19jb25mb3JtYW5jZV90ZXN0c19vdXRwdXRfZGlyKS9nZW5lcmF0ZWRfZ2xlczJfY29uZm9ybWFuY2VfdGVzdHMuY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2dsZXNfY29uZm9ybWFuY2VfdGVzdHMuY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsZXNfY29uZm9ybWFuY2VfdGVzdHMvZ2xlc19jb25mb3JtYW5jZV90ZXN0cy5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsZXNfY29uZm9ybWFuY2VfdGVzdHMvZ2xlc19jb25mb3JtYW5jZV90ZXN0c19tYWluLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXMyX2NvbmZvcm1hbmNlX3Rlc3RzX2dlbmVyYXRlZF9maWxlKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xlc19jb25mb3JtYW5jZV90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ09ORk9STUFOQ0VfVEVTVFNfVFlQRT1DT05GT1JNQU5DRV9URVNUU19FUzInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1TVlMgaGFzIHRyb3VibGUgY29tcGlsaW5nIHRoaXMgZHVlIHRvIHRoZSBvYmogZmlsZXMgYmVjb21pbmcgdG9vIGxhcmdlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWyAnL2JpZ29iaicgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZV9nbGVzMl9jb25mb3JtYW5jZV90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEVTMiBjb25mb3JtYW5jZSB0ZXN0cy4uLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoZ2xlc19jb25mb3JtYW5jZV90ZXN0c19nZW5lcmF0b3Jfc2NyaXB0KScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoZ2xlczJfY29uZm9ybWFuY2VfdGVzdHNfaW5wdXRfZmlsZSknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzMl9jb25mb3JtYW5jZV90ZXN0c19nZW5lcmF0ZWRfZmlsZSknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXNfY29uZm9ybWFuY2VfdGVzdHNfZ2VuZXJhdG9yX3NjcmlwdCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXMyX2NvbmZvcm1hbmNlX3Rlc3RzX2lucHV0X2ZpbGUpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzX2lucHV0X2RpciknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXMyX2NvbmZvcm1hbmNlX3Rlc3RzX2dlbmVyYXRlZF9maWxlKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdhbmdsZV9nbGVzM19jb25mb3JtYW5jZV90ZXN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vLi4vZ3lwL2NvbW1vbl9kZWZpbmVzLmd5cGknLCBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfcGF0aCkvc3JjL2FuZ2xlLmd5cDpsaWJHTEVTdjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zcmMvYW5nbGUuZ3lwOmxpYkVHTCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9nbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2NvbmZvcm0vR1RGX0VTL2dsc2wvR1RGL2VzX2N0cy5neXA6ZXNfY3RzX3Rlc3RfZGF0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlyZF9wYXJ0eS9nbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2NvbmZvcm0vR1RGX0VTL2dsc2wvR1RGL2VzX2N0cy5neXA6ZXMzX2N0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZV90ZXN0X3N1cHBvcnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xlczNfY29uZm9ybWFuY2VfdGVzdHNfaW5wdXRfZmlsZSc6ICc8KGdsZXNfY29uZm9ybWFuY2VfdGVzdHNfaW5wdXRfZGlyKS9tdXN0cGFzc19lczMwLnJ1bicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzM19jb25mb3JtYW5jZV90ZXN0c19nZW5lcmF0ZWRfZmlsZSc6ICc8KGdsZXNfY29uZm9ybWFuY2VfdGVzdHNfb3V0cHV0X2RpcikvZ2VuZXJhdGVkX2dsZXMzX2NvbmZvcm1hbmNlX3Rlc3RzLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xlc19jb25mb3JtYW5jZV90ZXN0cy9nbGVzX2NvbmZvcm1hbmNlX3Rlc3RzLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2dsZXNfY29uZm9ybWFuY2VfdGVzdHMuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzL2dsZXNfY29uZm9ybWFuY2VfdGVzdHNfbWFpbi5jcHAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzM19jb25mb3JtYW5jZV90ZXN0c19nZW5lcmF0ZWRfZmlsZSknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsZXNfY29uZm9ybWFuY2VfdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NPTkZPUk1BTkNFX1RFU1RTX1RZUEU9Q09ORk9STUFOQ0VfVEVTVFNfRVMzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNU1ZTIGhhcyB0cm91YmxlIGNvbXBpbGluZyB0aGlzIGR1ZSB0byB0aGUgb2JqIGZpbGVzIGJlY29taW5nIHRvbyBsYXJnZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsgJy9iaWdvYmonIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfZ2xlczNfY29uZm9ybWFuY2VfdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBFUzMgY29uZm9ybWFuY2UgdGVzdHMuLi4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXNfY29uZm9ybWFuY2VfdGVzdHNfZ2VuZXJhdG9yX3NjcmlwdCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsZXMzX2NvbmZvcm1hbmNlX3Rlc3RzX2lucHV0X2ZpbGUpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoZ2xlczNfY29uZm9ybWFuY2VfdGVzdHNfZ2VuZXJhdGVkX2ZpbGUpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzX2NvbmZvcm1hbmNlX3Rlc3RzX2dlbmVyYXRvcl9zY3JpcHQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzM19jb25mb3JtYW5jZV90ZXN0c19pbnB1dF9maWxlKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoZ2xlc19jb25mb3JtYW5jZV90ZXN0c19pbnB1dF9kaXIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChnbGVzM19jb25mb3JtYW5jZV90ZXN0c19nZW5lcmF0ZWRfZmlsZSknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvdGhpcmRfcGFydHkvbGliWE5WQ3RybC9saWJYTlZDdHJsLmd5cCBiL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90aGlyZF9wYXJ0eS9saWJYTlZDdHJsL2xpYlhOVkN0cmwuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBkZjc4Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy90aGlyZF9wYXJ0eS9saWJYTlZDdHJsL2xpYlhOVkN0cmwuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgICAndGFyZ2V0cyc6Ci0gICAgW3sKLSAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYlhOVkN0cmwnLAotICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJ05WQ3RybC5jJywKLSAgICAgICAgICAgICdOVkN0cmwuaCcsCi0gICAgICAgICAgICAnTlZDdHJsTGliLmgnLAotICAgICAgICAgICAgJ252X2NvbnRyb2wuaCcsCi0gICAgICAgIF0sCi0gICAgfV0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvdnVsa2FuX3N1cHBvcnQvdnVsa2FuLmd5cGkgYi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvdnVsa2FuX3N1cHBvcnQvdnVsa2FuLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjODIxYmEuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvYW5nbGUvc3JjL3Z1bGthbl9zdXBwb3J0L3Z1bGthbi5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTM1MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAgICd2YXJpYWJsZXMnOgotICAgIHsKLSAgICAgICAgJ2dsc2xhbmdfcGF0aCc6ICcuLi8uLi90aGlyZF9wYXJ0eS9nbHNsYW5nLWFuZ2xlL3NyYycsCi0gICAgICAgICdzcGlydl9oZWFkZXJzX3BhdGgnOiAnLi4vLi4vdGhpcmRfcGFydHkvc3BpcnYtaGVhZGVycy9zcmMnLAotICAgICAgICAnc3BpcnZfdG9vbHNfcGF0aCc6ICcuLi8uLi90aGlyZF9wYXJ0eS9zcGlydi10b29scy1hbmdsZS9zcmMnLAotICAgICAgICAndnVsa2FuX2xheWVyc19wYXRoJzogJy4uLy4uL3RoaXJkX3BhcnR5L3Z1bGthbi12YWxpZGF0aW9uLWxheWVycy9zcmMnLAotICAgICAgICAndnVsa2FuX2pzb24nOiAnYW5nbGVkYXRhJywKLSAgICAgICAgJ3Z1bGthbl9sb2FkZXJfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbG9hZGVyL2NKU09OLmMnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sb2FkZXIvY0pTT04uaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9kZWJ1Z19yZXBvcnQuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9kZWJ1Z19yZXBvcnQuaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9kZXZfZXh0X3RyYW1wb2xpbmUuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9leHRlbnNpb25fbWFudWFsLmMnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sb2FkZXIvZXh0ZW5zaW9uX21hbnVhbC5oJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbG9hZGVyL2dwYV9oZWxwZXIuaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9sb2FkZXIuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9sb2FkZXIuaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9tdXJtdXJoYXNoLmMnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sb2FkZXIvbXVybXVyaGFzaC5oJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbG9hZGVyL3BoeXNfZGV2X2V4dC5jJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbG9hZGVyL3RyYW1wb2xpbmUuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci92a19sb2FkZXJfcGxhdGZvcm0uaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci93c2kuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci93c2kuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICd2dWxrYW5fbG9hZGVyX3dpbl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sb2FkZXIvZGlyZW50X29uX3dpbmRvd3MuYycsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xvYWRlci9kaXJlbnRfb25fd2luZG93cy5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3Z1bGthbl9sb2FkZXJfaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9pbmNsdWRlJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbG9hZGVyJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3Z1bGthbl9sb2FkZXJfY2ZsYWdzX3dpbic6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICcvd2Q0MDU0JywgIyBUeXBlIGNhc3QgZnJvbSBmdW5jdGlvbiBwb2ludGVyCi0gICAgICAgICAgICAnL3dkNDA1NScsICMgVHlwZSBjYXN0IGZyb20gZGF0YSBwb2ludGVyCi0gICAgICAgICAgICAnL3dkNDEwMCcsICMgVW5yZWZlcmVuY2VkIGZvcm1hbCBwYXJhbWV0ZXIKLSAgICAgICAgICAgICcvd2Q0MTUyJywgIyBOb25zdGFuZGFyZCBleHRlbnNpb24gdXNlZCAocG9pbnRlciBjb252ZXJzaW9uKQotICAgICAgICAgICAgJy93ZDQyMDEnLCAjIE5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkOiBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24KLSAgICAgICAgICAgICcvd2Q0MjE0JywgIyBOb25zdGFuZGFyZCBleHRlbnNpb24gdXNlZDogYml0IGZpZWxkIHR5cGVzIG90aGVyIHRoYW4gaW50Ci0gICAgICAgICAgICAnL3dkNDIzMicsICMgTm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQ6IGFkZHJlc3Mgb2YgZGxsaW1wb3J0IGlzIG5vdCBzdGF0aWMKLSAgICAgICAgICAgICcvd2Q0MzA1JywgIyBUeXBlIGNhc3QgdHJ1bmNhdGlvbgotICAgICAgICAgICAgJy93ZDQ3MDYnLCAjIEFzc2lnbm1lbnQgd2l0aGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KLSAgICAgICAgICAgICcvd2Q0OTk2JywgIyBVbnNhZmUgc3RkbGliIGZ1bmN0aW9uCi0gICAgICAgIF0sCi0gICAgICAgICd2dWxrYW5fbGF5ZXJfZ2VuZXJhdGVkX2ZpbGVzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19lbnVtX3N0cmluZ19oZWxwZXIuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX3N0cnVjdF9zaXplX2hlbHBlci5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc3RydWN0X3NpemVfaGVscGVyLmMnLAotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zYWZlX3N0cnVjdC5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc2FmZV9zdHJ1Y3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfbGF5ZXJfZGlzcGF0Y2hfdGFibGUuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX2Rpc3BhdGNoX3RhYmxlX2hlbHBlci5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfbG9hZGVyX2V4dGVuc2lvbnMuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX2xvYWRlcl9leHRlbnNpb25zLmMnLAotICAgICAgICAgICAgJzxAKHZ1bGthbl9nZW5fanNvbl9maWxlc19vdXRwdXRzKScsCi0gICAgICAgIF0sCi0gICAgICAgICdnbHNsYW5nX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvR2VuZXJpY0NvZGVHZW4vQ29kZUdlbi5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL0dlbmVyaWNDb2RlR2VuL0xpbmsuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL2FycmF5cy5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL0Jhc2VUeXBlcy5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL0NvbW1vbi5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL0NvbnN0YW50VW5pb24uaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvSW5jbHVkZS9JbmZvU2luay5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL0luaXRpYWxpemVHbG9iYWxzLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL0luY2x1ZGUvaW50ZXJtZWRpYXRlLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL0luY2x1ZGUvUG9vbEFsbG9jLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL0luY2x1ZGUvUmVzb3VyY2VMaW1pdHMuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvSW5jbHVkZS9yZXZpc2lvbi5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9JbmNsdWRlL1NoSGFuZGxlLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL0luY2x1ZGUvVHlwZXMuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L0NvbnN0YW50LmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L2dsX3R5cGVzLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9nbHNsYW5nLnknLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9nbHNsYW5nX3RhYi5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9nbHNsYW5nX3RhYi5jcHAuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L0luZm9TaW5rLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L0luaXRpYWxpemUuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvSW5pdGlhbGl6ZS5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvSW50ZXJtZWRpYXRlLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L2ludGVybU91dC5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9JbnRlcm1UcmF2ZXJzZS5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9pb21hcHBlci5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9pb21hcHBlci5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvbGltaXRzLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L2xpbmtWYWxpZGF0ZS5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9MaXZlVHJhdmVyc2VyLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9sb2NhbGludGVybWVkaWF0ZS5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcGFyc2VDb25zdC5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9QYXJzZUNvbnRleHRCYXNlLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1BhcnNlSGVscGVyLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1BhcnNlSGVscGVyLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9wYXJzZVZlcnNpb25zLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9Qb29sQWxsb2MuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcHJlcHJvY2Vzc29yL1BwLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L3ByZXByb2Nlc3Nvci9QcEF0b20uY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcHJlcHJvY2Vzc29yL1BwQ29udGV4dC5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9wcmVwcm9jZXNzb3IvUHBDb250ZXh0LmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9wcmVwcm9jZXNzb3IvUHBNZW1vcnkuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcHJlcHJvY2Vzc29yL1BwU2Nhbm5lci5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9wcmVwcm9jZXNzb3IvUHBTeW1ib2xzLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L3ByZXByb2Nlc3Nvci9QcFRva2Vucy5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9wcmVwcm9jZXNzb3IvUHBUb2tlbnMuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L3Byb3BhZ2F0ZU5vQ29udHJhY3Rpb24uY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcHJvcGFnYXRlTm9Db250cmFjdGlvbi5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvcmVmbGVjdGlvbi5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9yZWZsZWN0aW9uLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL01hY2hpbmVJbmRlcGVuZGVudC9SZW1vdmVUcmVlLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1JlbW92ZVRyZWUuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1NjYW4uY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvU2Nhbi5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvU2NhbkNvbnRleHQuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1NoYWRlckxhbmcuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvU3ltYm9sVGFibGUuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9NYWNoaW5lSW5kZXBlbmRlbnQvU3ltYm9sVGFibGUuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1ZlcnNpb25zLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvTWFjaGluZUluZGVwZW5kZW50L1ZlcnNpb25zLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9nbHNsYW5nL09TRGVwZW5kZW50L29zaW5jbHVkZS5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9QdWJsaWMvU2hhZGVyTGFuZy5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvaGxzbC9obHNsQXR0cmlidXRlcy5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xBdHRyaWJ1dGVzLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xHcmFtbWFyLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbEdyYW1tYXIuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbE9wTWFwLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbE9wTWFwLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xQYXJzZWFibGVzLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbFBhcnNlYWJsZXMuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbFBhcnNlSGVscGVyLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2hsc2wvaGxzbFBhcnNlSGVscGVyLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xTY2FuQ29udGV4dC5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xTY2FuQ29udGV4dC5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvaGxzbC9obHNsVG9rZW5zLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xUb2tlblN0cmVhbS5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9obHNsL2hsc2xUb2tlblN0cmVhbS5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvT0dMQ29tcGlsZXJzRExML0luaXRpYWxpemVEbGwuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvT0dMQ29tcGlsZXJzRExML0luaXRpYWxpemVEbGwuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL2JpdHV0aWxzLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9TUElSVi9kaXNhc3NlbWJsZS5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9TUElSVi9kaXNhc3NlbWJsZS5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU1BJUlYvZG9jLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL2RvYy5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU1BJUlYvR0xTTC5leHQuS0hSLmgnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9TUElSVi9HTFNMLnN0ZC40NTAuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL0dsc2xhbmdUb1Nwdi5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9TUElSVi9HbHNsYW5nVG9TcHYuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL2hleF9mbG9hdC5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU1BJUlYvSW5SZWFkYWJsZU9yZGVyLmNwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL0xvZ2dlci5jcHAnLAotICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKS9TUElSVi9Mb2dnZXIuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL3NwaXJ2LmhwcCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1NQSVJWL1NwdkJ1aWxkZXIuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU1BJUlYvU3B2QnVpbGRlci5oJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU1BJUlYvc3B2SVIuaCcsCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL1N0YW5kQWxvbmUvUmVzb3VyY2VMaW1pdHMuY3BwJywKLSAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvU3RhbmRBbG9uZS9SZXNvdXJjZUxpbWl0cy5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2dsc2xhbmdfd2luX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvT1NEZXBlbmRlbnQvV2luZG93cy9vc3NvdXJjZS5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnZ2xzbGFuZ191bml4X3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpL2dsc2xhbmcvT1NEZXBlbmRlbnQvVW5peC9vc3NvdXJjZS5jcHAnLAotICAgICAgICBdLAotICAgICAgICAnc3BpcnZfdG9vbHNfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vY29yZS5pbnN0cy0xLjAuaW5jJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vY29yZS5pbnN0cy0xLjEuaW5jJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vZ2VuZXJhdG9ycy5pbmMnLAotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9nbHNsLnN0ZC40NTAuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL29wZW5jbC5zdGQuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL29wZXJhbmQua2luZHMtMS4wLmluYycsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL29wZXJhbmQua2luZHMtMS4xLmluYycsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvYXNzZW1ibHlfZ3JhbW1hci5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL2Fzc2VtYmx5X2dyYW1tYXIuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvYmluYXJ5LmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvYmluYXJ5LmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL2RpYWdub3N0aWMuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9kaWFnbm9zdGljLmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL2Rpc2Fzc2VtYmxlLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvZW51bV9zZXQuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvZXh0X2luc3QuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9leHRfaW5zdC5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9pbnN0cnVjdGlvbi5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9saWJzcGlydi5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL21hY3JvLmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL21lc3NhZ2UuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9uYW1lX21hcHBlci5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL25hbWVfbWFwcGVyLmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL29wY29kZS5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL29wY29kZS5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9vcGVyYW5kLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2Uvb3BlcmFuZC5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9wYXJzZWRfb3BlcmFuZC5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3BhcnNlZF9vcGVyYW5kLmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3ByaW50LmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvcHJpbnQuaCcsCi0gICAgICAgICAgICAjIFRPRE8oam1hZGlsbCk6IERldGVybWluZSBpZiB0aGlzIGlzIGV2ZXIgbmVlZGVkLgotICAgICAgICAgICAgIyc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9zb2Z0d2FyZV92ZXJzaW9uLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2Uvc3BpcnZfY29uc3RhbnQuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2Uvc3BpcnZfZGVmaW5pdGlvbi5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9zcGlydl9lbmRpYW4uY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9zcGlydl9lbmRpYW4uaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2Uvc3BpcnZfdGFyZ2V0X2Vudi5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3NwaXJ2X3RhcmdldF9lbnYuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdGFibGUuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS90YWJsZS5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS90ZXh0LmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdGV4dC5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS90ZXh0X2hhbmRsZXIuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS90ZXh0X2hhbmRsZXIuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdXRpbC9iaXR1dGlscy5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS91dGlsL2hleF9mbG9hdC5oJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS91dGlsL3BhcnNlX251bWJlci5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3V0aWwvcGFyc2VfbnVtYmVyLmgnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3ZhbC9iYXNpY19ibG9jay5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3ZhbC9jb25zdHJ1Y3QuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS92YWwvZnVuY3Rpb24uY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS92YWwvaW5zdHJ1Y3Rpb24uY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS92YWwvdmFsaWRhdGlvbl9zdGF0ZS5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3ZhbGlkYXRlLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdmFsaWRhdGUuaCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdmFsaWRhdGVfY2ZnLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdmFsaWRhdGVfZGF0YXJ1bGVzLmNwcCcsCi0gICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UvdmFsaWRhdGVfaWQuY3BwJywKLSAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS92YWxpZGF0ZV9pbnN0cnVjdGlvbi5jcHAnLAotICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL3ZhbGlkYXRlX2xheW91dC5jcHAnLAotICAgICAgICBdLAotICAgICAgICAndnVsa2FuX2xheWVyX3V0aWxzX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy92a19sYXllcl9jb25maWcuY3BwJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3ZrX2xheWVyX2NvbmZpZy5oJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3ZrX2xheWVyX2V4dGVuc2lvbl91dGlscy5jcHAnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvdmtfbGF5ZXJfZXh0ZW5zaW9uX3V0aWxzLmgnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvdmtfbGF5ZXJfdXRpbHMuY3BwJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3ZrX2xheWVyX3V0aWxzLmgnLAotICAgICAgICBdLAotICAgICAgICAndnVsa2FuX3N0cnVjdF93cmFwcGVyc19vdXRwdXRzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zYWZlX3N0cnVjdC5jcHAnLAotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zYWZlX3N0cnVjdC5oJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc3RydWN0X3NpemVfaGVscGVyLmMnLAotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zdHJ1Y3Rfc2l6ZV9oZWxwZXIuaCcsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX3N0cnVjdF9zdHJpbmdfaGVscGVyLmgnLAotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zdHJ1Y3Rfc3RyaW5nX2hlbHBlcl9jcHAuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdWa0xheWVyX2NvcmVfdmFsaWRhdGlvbl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgIyBUaGlzIGZpbGUgaXMgbWFudWFsbHkgaW5jbHVkZWQgaW4gdGhlIGxheWVyCi0gICAgICAgICAgICAjICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc2FmZV9zdHJ1Y3QuY3BwJywKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc2FmZV9zdHJ1Y3QuaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy9idWZmZXJfdmFsaWRhdGlvbi5jcHAnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvYnVmZmVyX3ZhbGlkYXRpb24uaCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy9jb3JlX3ZhbGlkYXRpb24uY3BwJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL2NvcmVfdmFsaWRhdGlvbi5oJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL2Rlc2NyaXB0b3Jfc2V0cy5jcHAnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvZGVzY3JpcHRvcl9zZXRzLmgnLAotICAgICAgICBdLAotICAgICAgICAnVmtMYXllcl9zd2FwY2hhaW5fc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3N3YXBjaGFpbi5jcHAnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvc3dhcGNoYWluLmgnLAotICAgICAgICBdLAotICAgICAgICAnVmtMYXllcl9vYmplY3RfdHJhY2tlcl9zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvb2JqZWN0X3RyYWNrZXIuY3BwJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL29iamVjdF90cmFja2VyLmgnLAotICAgICAgICBdLAotICAgICAgICAnVmtMYXllcl91bmlxdWVfb2JqZWN0c19zb3VyY2VzJzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi91bmlxdWVfb2JqZWN0c193cmFwcGVycy5oJywKLSAgICAgICAgICAgICMgVGhpcyBmaWxlIGlzIG1hbnVhbGx5IGluY2x1ZGVkIGluIHRoZSBsYXllcgotICAgICAgICAgICAgIyAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX3NhZmVfc3RydWN0LmNwcCcsCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX3NhZmVfc3RydWN0LmgnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvdW5pcXVlX29iamVjdHMuY3BwJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3VuaXF1ZV9vYmplY3RzLmgnLAotICAgICAgICBdLAotICAgICAgICAnVmtMYXllcl90aHJlYWRpbmdfc291cmNlcyc6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdGhyZWFkX2NoZWNrLmgnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvdGhyZWFkaW5nLmNwcCcsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy90aHJlYWRpbmcuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdWa0xheWVyX3BhcmFtZXRlcl92YWxpZGF0aW9uX3NvdXJjZXMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3BhcmFtZXRlcl92YWxpZGF0aW9uLmgnLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvcGFyYW1ldGVyX3ZhbGlkYXRpb24uY3BwJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3Z1bGthbl9nZW5fanNvbl9maWxlc19zb3VyY2VzX3dpbic6Ci0gICAgICAgIFsKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3dpbmRvd3MvVmtMYXllcl9jb3JlX3ZhbGlkYXRpb24uanNvbicsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy93aW5kb3dzL1ZrTGF5ZXJfb2JqZWN0X3RyYWNrZXIuanNvbicsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy93aW5kb3dzL1ZrTGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb24uanNvbicsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy93aW5kb3dzL1ZrTGF5ZXJfc3dhcGNoYWluLmpzb24nLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvd2luZG93cy9Wa0xheWVyX3RocmVhZGluZy5qc29uJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3dpbmRvd3MvVmtMYXllcl91bmlxdWVfb2JqZWN0cy5qc29uJywKLSAgICAgICAgXSwKLSAgICAgICAgJ3Z1bGthbl9nZW5fanNvbl9maWxlc19zb3VyY2VzX2xpbnV4JzoKLSAgICAgICAgWwotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvbGludXgvVmtMYXllcl9jb3JlX3ZhbGlkYXRpb24uanNvbicsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy9saW51eC9Wa0xheWVyX29iamVjdF90cmFja2VyLmpzb24nLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvbGludXgvVmtMYXllcl9wYXJhbWV0ZXJfdmFsaWRhdGlvbi5qc29uJywKLSAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL2xpbnV4L1ZrTGF5ZXJfc3dhcGNoYWluLmpzb24nLAotICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvbGludXgvVmtMYXllcl90aHJlYWRpbmcuanNvbicsCi0gICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy9saW51eC9Wa0xheWVyX3VuaXF1ZV9vYmplY3RzLmpzb24nLAotICAgICAgICBdLAotICAgICAgICAndnVsa2FuX2dlbl9qc29uX2ZpbGVzX291dHB1dHMnOgotICAgICAgICBbCi0gICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvPCh2dWxrYW5fanNvbikvVmtMYXllcl9jb3JlX3ZhbGlkYXRpb24uanNvbicsCi0gICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvPCh2dWxrYW5fanNvbikvVmtMYXllcl9vYmplY3RfdHJhY2tlci5qc29uJywKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS88KHZ1bGthbl9qc29uKS9Wa0xheWVyX3BhcmFtZXRlcl92YWxpZGF0aW9uLmpzb24nLAotICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpLzwodnVsa2FuX2pzb24pL1ZrTGF5ZXJfc3dhcGNoYWluLmpzb24nLAotICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpLzwodnVsa2FuX2pzb24pL1ZrTGF5ZXJfdGhyZWFkaW5nLmpzb24nLAotICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpLzwodnVsa2FuX2pzb24pL1ZrTGF5ZXJfdW5pcXVlX29iamVjdHMuanNvbicsCi0gICAgICAgIF0sCi0gICAgfSwKLSAgICAnY29uZGl0aW9ucyc6Ci0gICAgWwotICAgICAgICBbJ2FuZ2xlX2VuYWJsZV92dWxrYW49PTEnLAotICAgICAgICB7Ci0gICAgICAgICAgICAndGFyZ2V0cyc6Ci0gICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnZ2xzbGFuZycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoZ2xzbGFuZ19zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChnbHNsYW5nX3BhdGgpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfSEFTX0VYQ0VQVElPTlM9MCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93ZDQxMDAnLCAjIFVucmVmZXJlbmNlZCBmb3JtYWwgcGFyYW1ldGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd2Q0NDU2JywgIyBEZWNsYXJhdGlvbiBoaWRlcyBwcmV2aW91cyBsb2NhbCBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDQ1NycsICMgRGVjbGFyYXRpb24gaGlkZXMgZnVuY3Rpb24gcGFyYW1ldGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd2Q0NDU4JywgIyBEZWNsYXJhdGlvbiBoaWRlcyBjbGFzcyBtZW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93ZDQ3MDInLCAjIFVucmVhY2hhYmxlIGNvZGUgKGZyb20gZ2xzbGFuZ190YWIuY3BwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDcxOCcsICMgUmVjdXJzaXZlIGNhbGwgaGFzIG5vIHNpZGUgZWZmZWN0cyAoZnJvbSBQcENvbnRleHQuY3BwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCkvZ2xzbGFuZy9QdWJsaWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGdsc2xhbmdfcGF0aCknLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QChnbHNsYW5nX3dpbl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09ImxpbnV4IicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGdsc2xhbmdfdW5peF9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdzcGlydl90b29scycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoc3BpcnZfdG9vbHNfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChzcGlydl9oZWFkZXJzX3BhdGgpL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS9zb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19IQVNfRVhDRVBUSU9OUz0wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDEyNycsICMgQ29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudCwgaGFwcGVucyBpbiBhIHRlbXBsYXRlIGluIGhleF9mbG9hdC5oLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDcwNicsICMgQXNzaWdubWVudCB3aXRoaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDk5NicsICMgVW5zYWZlIHN0ZGxpYiBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnc3BpcnZfdG9vbHNfZ2VuX2J1aWxkX3RhYmxlc18xXzAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ2dlbmVyYXRpbmcgaW5mbyB0YWJsZXMgZm9yIFNQSVItViAxLjAgaW5zdHJ1Y3Rpb25zIGFuZCBvcGVyYW5kcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNwaXJ2X2hlYWRlcnNfcGF0aCkvaW5jbHVkZS9zcGlydi8xLjAvZXh0aW5zdC5nbHNsLnN0ZC40NTAuZ3JhbW1hci5qc29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoc3BpcnZfaGVhZGVyc19wYXRoKS9pbmNsdWRlL3NwaXJ2LzEuMC9zcGlydi5jb3JlLmdyYW1tYXIuanNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3NvdXJjZS9leHRpbnN0LTEuMC5vcGVuY2wuc3RkLmdyYW1tYXIuanNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3V0aWxzL2dlbmVyYXRlX2dyYW1tYXJfdGFibGVzLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vY29yZS5pbnN0cy0xLjAuaW5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9nbHNsLnN0ZC40NTAuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vb3BlbmNsLnN0ZC5pbnN0cy0xLjAuaW5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9vcGVyYW5kLmtpbmRzLTEuMC5pbmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KHNwaXJ2X3Rvb2xzX3BhdGgpL3V0aWxzL2dlbmVyYXRlX2dyYW1tYXJfdGFibGVzLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3BpcnYtY29yZS1ncmFtbWFyPTwoc3BpcnZfaGVhZGVyc19wYXRoKS9pbmNsdWRlL3NwaXJ2LzEuMC9zcGlydi5jb3JlLmdyYW1tYXIuanNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWV4dGluc3QtZ2xzbC1ncmFtbWFyPTwoc3BpcnZfaGVhZGVyc19wYXRoKS9pbmNsdWRlL3NwaXJ2LzEuMC9leHRpbnN0Lmdsc2wuc3RkLjQ1MC5ncmFtbWFyLmpzb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1leHRpbnN0LW9wZW5jbC1ncmFtbWFyPTwoc3BpcnZfdG9vbHNfcGF0aCkvc291cmNlL2V4dGluc3QtMS4wLm9wZW5jbC5zdGQuZ3JhbW1hci5qc29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tY29yZS1pbnN0cy1vdXRwdXQ9PChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2NvcmUuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWdsc2wtaW5zdHMtb3V0cHV0PTwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9nbHNsLnN0ZC40NTAuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLW9wZW5jbC1pbnN0cy1vdXRwdXQ9PChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL29wZW5jbC5zdGQuaW5zdHMtMS4wLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLW9wZXJhbmQta2luZHMtb3V0cHV0PTwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9vcGVyYW5kLmtpbmRzLTEuMC5pbmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3NwaXJ2X3Rvb2xzX2dlbl9idWlsZF90YWJsZXNfMV8xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIGluZm8gdGFibGVzIGZvciBTUElSLVYgMS4xIGluc3RydWN0aW9ucyBhbmQgb3BlcmFuZHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS91dGlscy9nZW5lcmF0ZV9ncmFtbWFyX3RhYmxlcy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNwaXJ2X2hlYWRlcnNfcGF0aCkvaW5jbHVkZS9zcGlydi8xLjEvc3BpcnYuY29yZS5ncmFtbWFyLmpzb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9jb3JlLmluc3RzLTEuMS5pbmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL29wZXJhbmQua2luZHMtMS4xLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwoc3BpcnZfdG9vbHNfcGF0aCkvdXRpbHMvZ2VuZXJhdGVfZ3JhbW1hcl90YWJsZXMucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1zcGlydi1jb3JlLWdyYW1tYXI9PChzcGlydl9oZWFkZXJzX3BhdGgpL2luY2x1ZGUvc3BpcnYvMS4xL3NwaXJ2LmNvcmUuZ3JhbW1hci5qc29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tY29yZS1pbnN0cy1vdXRwdXQ9PChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2NvcmUuaW5zdHMtMS4xLmluYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLW9wZXJhbmQta2luZHMtb3V0cHV0PTwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9vcGVyYW5kLmtpbmRzLTEuMS5pbmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3NwaXJ2X3Rvb2xzX2dlbl9nZW5lcmF0b3JzX2luYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnZ2VuZXJhdGluZyBnZW5lcmF0b3JzLmluYyBmb3IgU1BJUlYtVG9vbHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChzcGlydl90b29sc19wYXRoKS91dGlscy9nZW5lcmF0ZV9yZWdpc3RyeV90YWJsZXMucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChzcGlydl9oZWFkZXJzX3BhdGgpL2luY2x1ZGUvc3BpcnYvc3Bpci12LnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2dlbmVyYXRvcnMuaW5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPChzcGlydl90b29sc19wYXRoKS91dGlscy9nZW5lcmF0ZV9yZWdpc3RyeV90YWJsZXMucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS14bWw9PChzcGlydl9oZWFkZXJzX3BhdGgpL2luY2x1ZGUvc3BpcnYvc3Bpci12LnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWdlbmVyYXRvci1vdXRwdXQ9PChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2dlbmVyYXRvcnMuaW5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLQotICAgICAgICAgICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNwaXJ2X2hlYWRlcnNfcGF0aCkvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoc3BpcnZfdG9vbHNfcGF0aCkvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICd2dWxrYW5fbGF5ZXJfdXRpbHNfc3RhdGljJywKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QCh2dWxrYW5fbGF5ZXJfdXRpbHNfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAodnVsa2FuX2xvYWRlcl9pbmNsdWRlX2RpcnMpJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfSEFTX0VYQ0VQVElPTlM9MCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93ZDQxMDAnLCAjIFVucmVmZXJlbmNlZCBmb3JtYWwgcGFyYW1ldGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd2Q0MzA5JywgIyBUcnVuY2F0aW9uIG9mIGNvbnN0YW50IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd2Q0NTA1JywgIyBVbnJlZmVyZW5jZWQgbG9jYWwgZnVuY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDk5NicsICMgVW5zYWZlIHN0ZGxpYiBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJTjMyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJTjMyX0xFQU5fQU5EX01FQU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1dJTjMyX0tIUicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWS19VU0VfUExBVEZPUk1fV0lOMzJfS0hYJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0ibGludXgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL3ZrX2xheWVyX3RhYmxlLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvdmtfbGF5ZXJfdGFibGUuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoZ2xzbGFuZ19wYXRoKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QCh2dWxrYW5fbG9hZGVyX2luY2x1ZGVfZGlycyknLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDEwMCcsICMgVW5yZWZlcmVuY2VkIGxvY2FsIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93ZDQyMDEnLCAjIE5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkOiBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvd2Q0NDU2JywgIyBkZWNsYXJhdGlvbiBoaWRlcyBwcmV2aW91cyBsb2NhbCBkZWNsYXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy93ZDQ1MDUnLCAjIFVucmVmZXJlbmNlZCBsb2NhbCBmdW5jdGlvbiBoYXMgYmVlbiByZW1vdmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3dkNDk5NicsICMgVW5zYWZlIHN0ZGxpYiBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJTjMyX0xFQU5fQU5EX01FQU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlndXJhdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVidWdfQmFzZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvYmlnb2JqJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09ImxpbnV4IicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWS19VU0VfUExBVEZPUk1fWENCX0tIUicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICMgRHVwbGljYXRlIGV2ZXJ5dGhpbmcgYmVjYXVzZSBvZiBHWVAgbGltaXRhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX2VudW1fc3RyaW5nX2hlbHBlcl9oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIHZrX2VudW1fc3RyaW5nX2hlbHBlci5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9oZWxwZXJfZmlsZV9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3JlZy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19lbnVtX3N0cmluZ19oZWxwZXIuaCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbycsICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlZ2lzdHJ5JywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2a19lbnVtX3N0cmluZ19oZWxwZXIuaCcsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX3N0cnVjdF9zaXplX2hlbHBlcl9oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIHZrX3N0cnVjdF9zaXplX2hlbHBlci5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9oZWxwZXJfZmlsZV9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3JlZy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zdHJ1Y3Rfc2l6ZV9oZWxwZXIuaCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbycsICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlZ2lzdHJ5JywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2a19zdHJ1Y3Rfc2l6ZV9oZWxwZXIuaCcsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX3N0cnVjdF9zaXplX2hlbHBlcl9jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIHZrX3N0cnVjdF9zaXplX2hlbHBlci5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9oZWxwZXJfZmlsZV9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3JlZy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19zdHJ1Y3Rfc2l6ZV9oZWxwZXIuYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbycsICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlZ2lzdHJ5JywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2a19zdHJ1Y3Rfc2l6ZV9oZWxwZXIuYycsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX3NhZmVfc3RydWN0X2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ2dlbmVyYXRpbmcgdmtfc2FmZV9zdHJ1Y3QuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvaGVscGVyX2ZpbGVfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2x2bF9nZW52ay5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9yZWcucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc2FmZV9zdHJ1Y3QuaCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbycsICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlZ2lzdHJ5JywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2a19zYWZlX3N0cnVjdC5oJywgJy1xdWlldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAndnVsa2FuX3J1bl92a194bWxfZ2VuZXJhdGVfdmtfc2FmZV9zdHJ1Y3RfY3BwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIHZrX3NhZmVfc3RydWN0LmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvaGVscGVyX2ZpbGVfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2x2bF9nZW52ay5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9yZWcucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdmtfc2FmZV9zdHJ1Y3QuY3BwJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vJywgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcmVnaXN0cnknLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZrX3NhZmVfc3RydWN0LmNwcCcsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX2xheWVyX2Rpc3BhdGNoX3RhYmxlX2gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ2dlbmVyYXRpbmcgdmtfbGF5ZXJfZGlzcGF0Y2hfdGFibGUuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sb2FkZXJfZXh0ZW5zaW9uX2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3JlZy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19sYXllcl9kaXNwYXRjaF90YWJsZS5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywgJy1vJywgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcmVnaXN0cnknLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywgJ3ZrX2xheWVyX2Rpc3BhdGNoX3RhYmxlLmgnLCAnLXF1aWV0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICd2dWxrYW5fcnVuX3ZrX3htbF9nZW5lcmF0ZV92a19kaXNwYXRjaF90YWJsZV9oZWxwZXJfaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnZ2VuZXJhdGluZyB2a19kaXNwYXRjaF90YWJsZV9oZWxwZXIuaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9kaXNwYXRjaF90YWJsZV9oZWxwZXJfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvcmVnLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX2Rpc3BhdGNoX3RhYmxlX2hlbHBlci5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywgJy1vJywgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcmVnaXN0cnknLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywgJ3ZrX2Rpc3BhdGNoX3RhYmxlX2hlbHBlci5oJywgJy1xdWlldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAndnVsa2FuX3J1bl92a194bWxfZ2VuZXJhdGVfdmtfbG9hZGVyX2V4dGVuc2lvbnNfaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnZ2VuZXJhdGluZyB2a19sb2FkZXJfZXh0ZW5zaW9ucy5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2xvYWRlcl9leHRlbnNpb25fZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvcmVnLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3ZrX2xvYWRlcl9leHRlbnNpb25zLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLCAnLW8nLCAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1yZWdpc3RyeScsICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLCAndmtfbG9hZGVyX2V4dGVuc2lvbnMuaCcsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9ydW5fdmtfeG1sX2dlbmVyYXRlX3ZrX2xvYWRlcl9leHRlbnNpb25zX2MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ2dlbmVyYXRpbmcgdmtfbG9hZGVyX2V4dGVuc2lvbnMuYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sb2FkZXJfZXh0ZW5zaW9uX2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3JlZy5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi92a19sb2FkZXJfZXh0ZW5zaW9ucy5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywgJy1vJywgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctcmVnaXN0cnknLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywgJ3ZrX2xvYWRlcl9leHRlbnNpb25zLmMnLCAnLXF1aWV0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICd2dWxrYW5fZ2VuZXJhdGVfanNvbl9maWxlcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnZ2VuZXJhdGluZyBWdWxrYW4ganNvbiBmaWxlcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9wYXRoKS9zY3JpcHRzL2dlbmVyYXRlX3Z1bGthbl9sYXllcnNfanNvbi5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAodnVsa2FuX2dlbl9qc29uX2ZpbGVzX291dHB1dHMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QCh2dWxrYW5fZ2VuX2pzb25fZmlsZXNfc291cmNlc193aW4pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KGFuZ2xlX3BhdGgpL3NjcmlwdHMvZ2VuZXJhdGVfdnVsa2FuX2xheWVyc19qc29uLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy93aW5kb3dzJywgJzwoUFJPRFVDVF9ESVIpLzwodnVsa2FuX2pzb24pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0ibGludXgiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHZ1bGthbl9nZW5fanNvbl9maWxlc19zb3VyY2VzX2xpbnV4KScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPChhbmdsZV9wYXRoKS9zY3JpcHRzL2dlbmVyYXRlX3Z1bGthbl9sYXllcnNfanNvbi5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvbGludXgnLCAnPChQUk9EVUNUX0RJUikvPCh2dWxrYW5fanNvbiknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3Z1bGthbl9sb2FkZXInLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHZ1bGthbl9sb2FkZXJfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHZ1bGthbl9sb2FkZXJfaW5jbHVkZV9kaXJzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnQVBJX05BTUU9IlZ1bGthbiInLAotICAgICAgICAgICAgICAgICAgICAgICAgJ1ZVTEtBTl9OT05fQ01BS0VfQlVJTEQnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPKGptYWRpbGwpOiBGb3JjZSBpbmNsdWRlIGhlYWRlciBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8QCh2dWxrYW5fbG9hZGVyX2NmbGFnc193aW4pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9GSWFuZ2xlX2xvYWRlci5oJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NobHdhcGkubGliJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEAodnVsa2FuX2xvYWRlcl9pbmNsdWRlX2RpcnMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGx3YXBpLmxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJsaW51eCInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9YQ0JfS0hYJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2FuZ2xlX2xvYWRlci5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxAKHZ1bGthbl9sb2FkZXJfd2luX3NvdXJjZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWS19VU0VfUExBVEZPUk1fV0lOMzJfS0hSJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJsaW51eCInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdERUZBVUxUX1ZLX0xBWUVSU19QQVRIPSIuIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIQVZFX1NFQ1VSRV9HRVRFTlYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTEFZRVJTX1NPVVJDRV9QQVRIPSI8KHZ1bGthbl9qc29uKSInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVktfVVNFX1BMQVRGT1JNX1hDQl9LSFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgbG9hZGVyIGhlYWRlciBpcyBmb3JjZSBpbmNsdWRlZCBpbnRvIHRoZSBsb2FkZXIgYW5kIGxheWVycy4gQmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgaXNzdWVzIHdpdGggR1lQLCB3ZSBjYW4ndCB1c2UgYSBub3JtYWwgaGVhZGVyIGZpbGUsIHdlIGhhdiB0byBmb3JjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5jbHVlIHRoaXMgdXNpbmcgY29tcGlsZXItc3BlY2lmaWMgZmxhZ3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9sb2FkZXJfZ2VuX2FuZ2xlX2hlYWRlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnZ2VuZXJhdGluZyBWdWxrYW4gbG9hZGVyIEFOR0xFIGhlYWRlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX3BhdGgpL3NjcmlwdHMvZ2VuZXJhdGVfdnVsa2FuX2hlYWRlci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2FuZ2xlX2xvYWRlci5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPKGptYWRpbGwpOiBVc2UgY29ycmVjdCBwbGF0Zm9ybSBwYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwoYW5nbGVfcGF0aCkvc2NyaXB0cy9nZW5lcmF0ZV92dWxrYW5faGVhZGVyLnB5JywgJzwoUFJPRFVDVF9ESVIpLzwodnVsa2FuX2pzb24pJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9hbmdsZV9sb2FkZXIuaCcsICc8KFBST0RVQ1RfRElSKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Z1bGthbl9sb2FkZXJfb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc3RhbXBpbmcgZm9yIHZ1bGthbl9sb2FkZXJfb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWyAnPEAodnVsa2FuX2xheWVyX2dlbmVyYXRlZF9maWxlcyknIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOiBbICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vdnVsa2FuX2xvYWRlcl9vcmRlcl9kZXBzLnN0YW1wJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPChhbmdsZV9wYXRoKS9neXAvdG91Y2hfc3RhbXAucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3Z1bGthbl9sb2FkZXJfb3JkZXJfZGVwcy5zdGFtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnVmtMYXllcl9jb3JlX3ZhbGlkYXRpb24nLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnc3BpcnZfdG9vbHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3Z1bGthbl9sYXllcl91dGlsc19zdGF0aWMnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChWa0xheWVyX2NvcmVfdmFsaWRhdGlvbl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdsYXllcl9jb3JlX3ZhbGlkYXRpb25fb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc3RhbXBpbmcgZm9yIGxheWVyX2NvcmVfdmFsaWRhdGlvbl9vcmRlcl9kZXBzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbICc8QCh2dWxrYW5fbGF5ZXJfZ2VuZXJhdGVkX2ZpbGVzKScgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9sYXllcl9jb3JlX3ZhbGlkYXRpb25fb3JkZXJfZGVwcy5zdGFtcCcgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwoYW5nbGVfcGF0aCkvZ3lwL3RvdWNoX3N0YW1wLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9sYXllcl9jb3JlX3ZhbGlkYXRpb25fb3JkZXJfZGVwcy5zdGFtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL1ZrTGF5ZXJfY29yZV92YWxpZGF0aW9uLmRlZicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ1ZrTGF5ZXJfc3dhcGNoYWluJywKLSAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc2hhcmVkX2xpYnJhcnknLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ3Z1bGthbl9sYXllcl91dGlsc19zdGF0aWMnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChWa0xheWVyX3N3YXBjaGFpbl9zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdsYXllcl9zd2FwY2hhaW5fb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc3RhbXBpbmcgZm9yIGxheWVyX3N3YXBjaGFpbl9vcmRlcl9kZXBzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbICc8QCh2dWxrYW5fbGF5ZXJfZ2VuZXJhdGVkX2ZpbGVzKScgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9sYXllcl9zd2FwY2hhaW5fb3JkZXJfZGVwcy5zdGFtcCcgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwoYW5nbGVfcGF0aCkvZ3lwL3RvdWNoX3N0YW1wLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9sYXllcl9zd2FwY2hhaW5fb3JkZXJfZGVwcy5zdGFtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL1ZrTGF5ZXJfc3dhcGNoYWluLmRlZicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ1ZrTGF5ZXJfb2JqZWN0X3RyYWNrZXInLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAndnVsa2FuX2xheWVyX3V0aWxzX3N0YXRpYycsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKFZrTGF5ZXJfb2JqZWN0X3RyYWNrZXJfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnbGF5ZXJfb2JqZWN0X3RyYWNrZXJfb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc3RhbXBpbmcgZm9yIGxheWVyX29iamVjdF90cmFja2VyX29yZGVyX2RlcHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsgJzxAKHZ1bGthbl9sYXllcl9nZW5lcmF0ZWRfZmlsZXMpJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWyAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2xheWVyX29iamVjdF90cmFja2VyX29yZGVyX2RlcHMuc3RhbXAnIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KGFuZ2xlX3BhdGgpL2d5cC90b3VjaF9zdGFtcC5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vbGF5ZXJfb2JqZWN0X3RyYWNrZXJfb3JkZXJfZGVwcy5zdGFtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09IndpbiInLAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvbGF5ZXJzL1ZrTGF5ZXJfb2JqZWN0X3RyYWNrZXIuZGVmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnVmtMYXllcl91bmlxdWVfb2JqZWN0cycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICd2dWxrYW5fbGF5ZXJfdXRpbHNfc3RhdGljJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoVmtMYXllcl91bmlxdWVfb2JqZWN0c19zb3VyY2VzKScsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgWyd0YXJnZXRfb3M9PSJ3aW4iJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL2xheWVycy9Wa0xheWVyX3VuaXF1ZV9vYmplY3RzLmRlZicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdhY3Rpb25zJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdsYXllcl91bmlxdWVfb2JqZWN0c19vcmRlcl9kZXBzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdzdGFtcGluZyBmb3IgbGF5ZXJfdW5pcXVlX29iamVjdHNfb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWyAnPEAodnVsa2FuX2xheWVyX2dlbmVyYXRlZF9maWxlcyknIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOiBbICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vbGF5ZXJfdW5pcXVlX29iamVjdHNfb3JkZXJfZGVwcy5zdGFtcCcgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwoYW5nbGVfcGF0aCkvZ3lwL3RvdWNoX3N0YW1wLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbi9sYXllcl91bmlxdWVfb2JqZWN0c19vcmRlcl9kZXBzLnN0YW1wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICd2dWxrYW5fbGF5ZXJfdW5pcXVlX29iamVjdHNfZ2VuZXJhdGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ2dlbmVyYXRpbmcgVnVsa2FuIHVuaXF1ZV9vYmplY3RzIGhlbHBlcnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2x2bF9nZW52ay5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9yZWcucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdW5pcXVlX29iamVjdHNfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3VuaXF1ZV9vYmplY3RzX3dyYXBwZXJzLmgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLCAnLW8nLCAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1yZWdpc3RyeScsICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy92ay54bWwnLCAndW5pcXVlX29iamVjdHNfd3JhcHBlcnMuaCcsICctcXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdWa0xheWVyX3RocmVhZGluZycsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICd2dWxrYW5fbGF5ZXJfdXRpbHNfc3RhdGljJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoVmtMYXllcl90aHJlYWRpbmdfc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvVmtMYXllcl90aHJlYWRpbmcuZGVmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2xheWVyX3RocmVhZGluZ19vcmRlcl9kZXBzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdzdGFtcGluZyBmb3IgbGF5ZXJfdGhyZWFkaW5nX29yZGVyX2RlcHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsgJzxAKHZ1bGthbl9sYXllcl9nZW5lcmF0ZWRfZmlsZXMpJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWyAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2xheWVyX3RocmVhZGluZ19vcmRlcl9kZXBzLnN0YW1wJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPChhbmdsZV9wYXRoKS9neXAvdG91Y2hfc3RhbXAucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2xheWVyX3RocmVhZGluZ19vcmRlcl9kZXBzLnN0YW1wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICd2dWxrYW5fbGF5ZXJfdGhyZWFkaW5nX2dlbmVyYXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIFZ1bGthbiB0aHJlYWRpbmcgaGVhZGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXN2c19jeWd3aW5fc2hlbGwnOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9sdmxfZ2VudmsucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvcmVnLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL3RocmVhZF9jaGVjay5oJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbjInLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvbHZsX2dlbnZrLnB5JywgJy1vJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYW5nbGVfZ2VuX3BhdGgpL3Z1bGthbicsICctcmVnaXN0cnknLCAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RocmVhZF9jaGVjay5oJywgJy1xdWlldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ1ZrTGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb24nLAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOgotICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAndnVsa2FuX2xheWVyX3V0aWxzX3N0YXRpYycsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKFZrTGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb25fc291cmNlcyknLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9sYXllcnMvVmtMYXllcl9wYXJhbWV0ZXJfdmFsaWRhdGlvbi5kZWYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnYWN0aW9ucyc6Ci0gICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnbGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb25fb3JkZXJfZGVwcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnc3RhbXBpbmcgZm9yIGxheWVyX3BhcmFtZXRlcl92YWxpZGF0aW9uX29yZGVyX2RlcHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsgJzxAKHZ1bGthbl9sYXllcl9nZW5lcmF0ZWRfZmlsZXMpJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWyAnPChhbmdsZV9nZW5fcGF0aCkvdnVsa2FuL2xheWVyX3BhcmFtZXRlcl92YWxpZGF0aW9uX29yZGVyX2RlcHMuc3RhbXAnIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8KGFuZ2xlX3BhdGgpL2d5cC90b3VjaF9zdGFtcC5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vbGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb25fb3JkZXJfZGVwcy5zdGFtcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAndnVsa2FuX2xheWVyX3BhcmFtZXRlcl92YWxpZGF0aW9uX2dlbmVyYXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nIFZ1bGthbiBwYXJhbWV0ZXJfdmFsaWRhdGlvbiBoZWFkZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2x2bF9nZW52ay5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KHZ1bGthbl9sYXllcnNfcGF0aCkvc2NyaXB0cy9yZWcucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCh2dWxrYW5fbGF5ZXJzX3BhdGgpL3NjcmlwdHMvdmsueG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4vcGFyYW1ldGVyX3ZhbGlkYXRpb24uaCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL2x2bF9nZW52ay5weScsICctbycsICc8KGFuZ2xlX2dlbl9wYXRoKS92dWxrYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXJlZ2lzdHJ5JywgJzwodnVsa2FuX2xheWVyc19wYXRoKS9zY3JpcHRzL3ZrLnhtbCcsICdwYXJhbWV0ZXJfdmFsaWRhdGlvbi5oJywgJy1xdWlldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2FuZ2xlX3Z1bGthbicsCi0gICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ2dsc2xhbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGRpc2FibGUgdGhlc2UgdG8gcHJldmVudCBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMgd2l0aCBuaW5qYS4KLSAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETyhqbWFkaWxsKTogRmlndXJlIG91dCBob3cgdG8gaW1wbGVtZW50IGRhdGFfZGVwcyBpbiBneXAuCi0gICAgICAgICAgICAgICAgICAgICAgICAjICdWa0xheWVyX2NvcmVfdmFsaWRhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAjICdWa0xheWVyX29iamVjdF90cmFja2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICMgJ1ZrTGF5ZXJfcGFyYW1ldGVyX3ZhbGlkYXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAnVmtMYXllcl9zd2FwY2hhaW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAnVmtMYXllcl90aHJlYWRpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAnVmtMYXllcl91bmlxdWVfb2JqZWN0cycsCi0gICAgICAgICAgICAgICAgICAgICAgICAndnVsa2FuX2xvYWRlcicsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgICAgICAgICAgICAgICAgWwotICAgICAgICAgICAgICAgICAgICAgICAgJ2dsc2xhbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ3Z1bGthbl9sb2FkZXInLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9hb21faW5jbHVkZXMvYW9tX2luY2x1ZGVzLmd5cCBiL3RoaXJkX3BhcnR5L2FvbV9pbmNsdWRlcy9hb21faW5jbHVkZXMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTE4MDVkLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2FvbV9pbmNsdWRlcy9hb21faW5jbHVkZXMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdhb20nLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJ2FvbS4xLjAuMCcgXSwKLSAgICAgIH0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2JsaW5rX2lkbF9sZXhlci5weSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2JsaW5rX2lkbF9sZXhlci5weQppbmRleCAzMWE3MWZmLi44NDA1ZjQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9ibGlua19pZGxfbGV4ZXIucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvYmxpbmtfaWRsX2xleGVyLnB5CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIG91dHB1dGRpciA9IGFyZ3ZbMV0KICAgICBleGNlcHQgSW5kZXhFcnJvciBhcyBlcnI6Ci0gICAgICAgIHByaW50ICdVc2FnZTogJXMgT1VUUFVUX0RJUicgJSBhcmd2WzBdCisgICAgICAgIHByaW50KCdVc2FnZTogJXMgT1VUUFVUX0RJUicgJSBhcmd2WzBdKQogICAgICAgICByZXR1cm4gMQogICAgICMgSW1wb3J0YW50OiByZXdyaXRlX3RhYmxlcz1UcnVlIGNhdXNlcyB0aGUgY2FjaGUgZmlsZSB0byBiZSBkZWxldGVkIGlmIGl0CiAgICAgIyBleGlzdHMsIHRodXMgbWFraW5nIHN1cmUgdGhhdCBQTFkgZG9lc24ndCBsb2FkIGl0IGluc3RlYWQgb2YgcmVnZW5lcmF0aW5nCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9ibGlua19pZGxfcGFyc2VyLnB5IGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvYmxpbmtfaWRsX3BhcnNlci5weQppbmRleCA3ZmJmZDc3Li4yZmM4YTQwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9ibGlua19pZGxfcGFyc2VyLnB5CisrKyBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2JsaW5rX2lkbF9wYXJzZXIucHkKQEAgLTY2LDcgKzY2LDEwIEBACiAKICMgQmFzZSBwYXJzZXIgaXMgaW4gQ2hyb21pdW0gc3JjL3Rvb2xzL2lkbF9wYXJzZXIKIHRvb2xzX2RpciA9IG9zLnBhdGguam9pbihtb2R1bGVfcGF0aCwgb3MucGFyZGlyLCBvcy5wYXJkaXIsIG9zLnBhcmRpciwgb3MucGFyZGlyLCBvcy5wYXJkaXIsICd0b29scycpCitpZGxfcGFyc2VyX2RpciA9IG9zLnBhdGguam9pbihtb2R1bGVfcGF0aCwgb3MucGFyZGlyLCBvcy5wYXJkaXIsIG9zLnBhcmRpciwgb3MucGFyZGlyLCBvcy5wYXJkaXIsICd0b29scycsICdpZGxfcGFyc2VyJykKIHN5cy5wYXRoLmFwcGVuZCh0b29sc19kaXIpCitzeXMucGF0aC5hcHBlbmQoaWRsX3BhcnNlcl9kaXIpCisKIGZyb20gaWRsX3BhcnNlci5pZGxfcGFyc2VyIGltcG9ydCBJRExQYXJzZXIsIExpc3RGcm9tQ29uY2F0CiBmcm9tIGlkbF9wYXJzZXIuaWRsX3BhcnNlciBpbXBvcnQgUGFyc2VGaWxlIGFzIHBhcnNlX2ZpbGUKIApAQCAtMzkzLDcgKzM5Niw3IEBACiAgICAgdHJ5OgogICAgICAgICBvdXRwdXRkaXIgPSBhcmd2WzFdCiAgICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZXJyOgotICAgICAgICBwcmludCAnVXNhZ2U6ICVzIE9VVFBVVF9ESVInICUgYXJndlswXQorICAgICAgICBwcmludCgnVXNhZ2U6ICVzIE9VVFBVVF9ESVInICUgYXJndlswXSkKICAgICAgICAgcmV0dXJuIDEKICAgICBibGlua19pZGxfbGV4ZXIubWFpbihhcmd2KQogICAgICMgSW1wb3J0YW50OiByZXdyaXRlX3RhYmxlcz1UcnVlIGNhdXNlcyB0aGUgY2FjaGUgZmlsZSB0byBiZSBkZWxldGVkIGlmIGl0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9jb2RlX2dlbmVyYXRvci5weSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvZGVfZ2VuZXJhdG9yLnB5CmluZGV4IGU2ZTE3NjQuLmQ2NmJhNGYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvZGVfZ2VuZXJhdG9yLnB5CisrKyBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvZGVfZ2VuZXJhdG9yLnB5CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgY2FjaGVfZGlyID0gYXJndlsxXQogICAgICAgICBkdW1teV9maWxlbmFtZSA9IGFyZ3ZbMl0KICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcHJpbnQgJ1VzYWdlOiAlcyBDQUNIRV9ESVIgRFVNTVlfRklMRU5BTUUnICUgYXJndlswXQorICAgICAgICBwcmludCgnVXNhZ2U6ICVzIENBQ0hFX0RJUiBEVU1NWV9GSUxFTkFNRScgJSBhcmd2WzBdKQogICAgICAgICByZXR1cm4gMQogCiAgICAgIyBDYWNoZSB0ZW1wbGF0ZXMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvbXB1dGVfZ2xvYmFsX29iamVjdHMucHkgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9jb21wdXRlX2dsb2JhbF9vYmplY3RzLnB5CmluZGV4IDE4M2YwNjYuLmY5MjU1MDIgMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvbXB1dGVfZ2xvYmFsX29iamVjdHMucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvY29tcHV0ZV9nbG9iYWxfb2JqZWN0cy5weQpAQCAtNjgsNyArNjgsNyBAQAogICAgIGV4dGVuZGVkX2F0dHJpYnV0ZXMgPSBnZXRfaW50ZXJmYWNlX2V4dGVuZGVkX2F0dHJpYnV0ZXNfZnJvbV9pZGwoaWRsX2ZpbGVfY29udGVudHMpCiAKICAgICBnbG9iYWxfa2V5cyA9IEdMT0JBTF9FWFRFTkRFRF9BVFRSSUJVVEVTLmludGVyc2VjdGlvbigKLSAgICAgICAgZXh0ZW5kZWRfYXR0cmlidXRlcy5pdGVya2V5cygpKQorICAgICAgICBleHRlbmRlZF9hdHRyaWJ1dGVzLmtleXMoKSkKICAgICBpZiBub3QgZ2xvYmFsX2tleXM6CiAgICAgICAgIHJldHVybgogICAgIGlmIGxlbihnbG9iYWxfa2V5cykgPiAxOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbC5weSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwucHkKaW5kZXggNjc5OWY5YS4uN2YxNDY5NCAxMDA3NTUKLS0tIGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbC5weQorKysgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9jb21wdXRlX2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsLnB5CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgdGhpc191bmlvbl90eXBlcyA9IGNvbGxlY3RfdW5pb25fdHlwZXNfZnJvbV9kZWZpbml0aW9ucyhkZWZpbml0aW9ucykKICAgICAgICAgc2VsZi51bmlvbl90eXBlcy51cGRhdGUodGhpc191bmlvbl90eXBlcykKICAgICAgICAgc2VsZi50eXBlZGVmcy51cGRhdGUoZGVmaW5pdGlvbnMudHlwZWRlZnMpCi0gICAgICAgIGZvciBjYWxsYmFja19mdW5jdGlvbl9uYW1lLCBjYWxsYmFja19mdW5jdGlvbiBpbiBkZWZpbml0aW9ucy5jYWxsYmFja19mdW5jdGlvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBjYWxsYmFja19mdW5jdGlvbl9uYW1lLCBjYWxsYmFja19mdW5jdGlvbiBpbiBkZWZpbml0aW9ucy5jYWxsYmFja19mdW5jdGlvbnMuaXRlbXMoKToKICAgICAgICAgICAgICMgU2V0ICdjb21wb25lbnRfZGlyJyB0byBzcGVjaWZ5IGEgZGlyZWN0b3J5IHRoYXQgY2FsbGJhY2sgZnVuY3Rpb24gZmlsZXMgYmVsb25nIHRvCiAgICAgICAgICAgICBzZWxmLmNhbGxiYWNrX2Z1bmN0aW9uc1tjYWxsYmFja19mdW5jdGlvbl9uYW1lXSA9IHsKICAgICAgICAgICAgICAgICAnY2FsbGJhY2tfZnVuY3Rpb24nOiBjYWxsYmFja19mdW5jdGlvbiwKQEAgLTIzMSw5ICsyMzEsOSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICMgSW5jbHVkZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnVtIGZvciBDb2JhbHQuCi0gICAgICAgIGZvciBlbnVtX25hbWUsIHZhbHVlcyBpbiBkZWZpbml0aW9ucy5lbnVtZXJhdGlvbnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBlbnVtX25hbWUsIHZhbHVlcyBpbiBkZWZpbml0aW9ucy5lbnVtZXJhdGlvbnMuaXRlbXMoKToKICAgICAgICAgICAgICMgQ2hlY2sgZW51bSBkdXBsaWNhdGlvbi4KLSAgICAgICAgICAgIGlmIHNlbGYuZW51bWVyYXRpb25zLmhhc19rZXkoZW51bV9uYW1lKToKKyAgICAgICAgICAgIGlmIGVudW1fbmFtZSBpbiBzZWxmLmVudW1lcmF0aW9uczoKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0VudW1lcmF0aW9uICVzIGhhcyBtdWx0aXBsZSBkZWZpbml0aW9ucycgJSBlbnVtX25hbWUpCiAgICAgICAgICAgICBzZWxmLmVudW1lcmF0aW9uc1tlbnVtX25hbWVdID0gewogICAgICAgICAgICAgICAgICd2YWx1ZXMnOiB2YWx1ZXMsCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICBpZiBkZWZpbml0aW9ucy5pbnRlcmZhY2VzOgotICAgICAgICAgICAgZGVmaW5pdGlvbiA9IG5leHQoZGVmaW5pdGlvbnMuaW50ZXJmYWNlcy5pdGVydmFsdWVzKCkpCisgICAgICAgICAgICBkZWZpbml0aW9uID0gbmV4dChpdGVyKGRlZmluaXRpb25zLmludGVyZmFjZXMudmFsdWVzKCkpKQogICAgICAgICAgICAgaW50ZXJmYWNlX2luZm8gPSB7CiAgICAgICAgICAgICAgICAgJ2lzX2NhbGxiYWNrX2ludGVyZmFjZSc6IGRlZmluaXRpb24uaXNfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgJ2lzX2RpY3Rpb25hcnknOiBGYWxzZSwKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgICAgICd1bnN1cHBvcnRlZCc6ICdOb3RTdXBwb3J0ZWQnIGluIGRlZmluaXRpb24uZXh0ZW5kZWRfYXR0cmlidXRlcywKICAgICAgICAgICAgIH0KICAgICAgICAgZWxpZiBkZWZpbml0aW9ucy5kaWN0aW9uYXJpZXM6Ci0gICAgICAgICAgICBkZWZpbml0aW9uID0gbmV4dChkZWZpbml0aW9ucy5kaWN0aW9uYXJpZXMuaXRlcnZhbHVlcygpKQorICAgICAgICAgICAgZGVmaW5pdGlvbiA9IG5leHQoaXRlcihkZWZpbml0aW9ucy5kaWN0aW9uYXJpZXMudmFsdWVzKCkpKQogICAgICAgICAgICAgaW50ZXJmYWNlX2luZm8gPSB7CiAgICAgICAgICAgICAgICAgJ2lzX2NhbGxiYWNrX2ludGVyZmFjZSc6IEZhbHNlLAogICAgICAgICAgICAgICAgICdpc19kaWN0aW9uYXJ5JzogVHJ1ZSwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX292ZXJhbGwucHkgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9jb21wdXRlX2ludGVyZmFjZXNfaW5mb19vdmVyYWxsLnB5CmluZGV4IGU3YWUwZDUuLmQ2MmVhNDggMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX292ZXJhbGwucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9fb3ZlcmFsbC5weQpAQCAtMTMxLDEyICsxMzEsMTIgQEAKIAogICAgIE5lZWRlZCBmb3IgbWVyZ2luZyBwYXJ0aWFsX2ludGVyZmFjZV9maWxlcyBhY3Jvc3MgY29tcG9uZW50cy4KICAgICAiIiIKLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlci5pdGVyaXRlbXMoKToKKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlci5pdGVtcygpOgogICAgICAgICBpZiBrZXkgbm90IGluIGV4aXN0aW5nOgogICAgICAgICAgICAgZXhpc3Rpbmdba2V5XSA9IHZhbHVlCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBleGlzdGluZ192YWx1ZSA9IGV4aXN0aW5nW2tleV0KLSAgICAgICAgZm9yIGlubmVyX2tleSwgaW5uZXJfdmFsdWUgaW4gdmFsdWUuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBpbm5lcl9rZXksIGlubmVyX3ZhbHVlIGluIHZhbHVlLml0ZW1zKCk6CiAgICAgICAgICAgICBleGlzdGluZ192YWx1ZVtpbm5lcl9rZXldLmV4dGVuZChpbm5lcl92YWx1ZSkKIAogCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICBnYXJiYWdlX2NvbGxlY3RlZF9pbnRlcmZhY2VzID0gc2V0KCkKICAgICBjYWxsYmFja19pbnRlcmZhY2VzID0gc2V0KCkKIAotICAgIGZvciBpbnRlcmZhY2VfbmFtZSwgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLml0ZXJpdGVtcygpOgorICAgIGZvciBpbnRlcmZhY2VfbmFtZSwgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLml0ZW1zKCk6CiAgICAgICAgIGNvbXBvbmVudF9kaXJzW2ludGVyZmFjZV9uYW1lXSA9IGlkbF9maWxlbmFtZV90b19jb21wb25lbnQoaW50ZXJmYWNlX2luZm9bJ2Z1bGxfcGF0aCddKQogCiAgICAgICAgIGlmIGludGVyZmFjZV9pbmZvWydhbmNlc3RvcnMnXToKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAgICAgIyBSZWNvcmQgYSBsaXN0IG9mIGFsbCBpbnRlcmZhY2UgbmFtZXMKICAgICBpbnRlcmZhY2VzX2luZm9bJ2FsbF9pbnRlcmZhY2VzJ10gPSBzZXQoCi0gICAgICAgIGludGVyZmFjZV9uYW1lIGZvciBpbnRlcmZhY2VfbmFtZSwgaW5mbyBpbiBpbnRlcmZhY2VzX2luZm8uaXRlcml0ZW1zKCkKKyAgICAgICAgaW50ZXJmYWNlX25hbWUgZm9yIGludGVyZmFjZV9uYW1lLCBpbmZvIGluIGludGVyZmFjZXNfaW5mby5pdGVtcygpCiAgICAgICAgICAgICBpZiBub3QgaW5mb1snaXNfZGVwZW5kZW5jeSddKQogCiAgICAgaW50ZXJmYWNlc19pbmZvWydhbmNlc3RvcnMnXSA9IGFuY2VzdG9ycwpAQCAtMjI3LDExICsyMjcsMTEgQEAKIAogCiAgICAgIyBSZWNvcmQgaW5oZXJpdGFuY2UgaW5mb3JtYXRpb24gaW5kaXZpZHVhbGx5Ci0gICAgZm9yIGludGVyZmFjZV9uYW1lLCBpbnRlcmZhY2VfaW5mbyBpbiBpbnRlcmZhY2VzX2luZm8uaXRlcml0ZW1zKCk6CisgICAgZm9yIGludGVyZmFjZV9uYW1lLCBpbnRlcmZhY2VfaW5mbyBpbiBpbnRlcmZhY2VzX2luZm8uaXRlbXMoKToKICAgICAgICAgZXh0ZW5kZWRfYXR0cmlidXRlcyA9IGludGVyZmFjZV9pbmZvWydleHRlbmRlZF9hdHRyaWJ1dGVzJ10KICAgICAgICAgaW5oZXJpdGVkX2V4dGVuZGVkX2F0dHJpYnV0ZXNfYnlfaW50ZXJmYWNlW2ludGVyZmFjZV9uYW1lXSA9IGRpY3QoCiAgICAgICAgICAgICAgICAgKGtleSwgdmFsdWUpCi0gICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZXh0ZW5kZWRfYXR0cmlidXRlcy5pdGVyaXRlbXMoKQorICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGV4dGVuZGVkX2F0dHJpYnV0ZXMuaXRlbXMoKQogICAgICAgICAgICAgICAgIGlmIGtleSBpbiBJTkhFUklURURfRVhURU5ERURfQVRUUklCVVRFUykKICAgICAgICAgcGFyZW50ID0gaW50ZXJmYWNlX2luZm9bJ3BhcmVudCddCiAgICAgICAgIGlmIHBhcmVudDoKQEAgLTI0OSwxNCArMjQ5LDE0IEBACiAgICAgIyB0byBpbXBsZW1lbnQqaW5nKiBpbnRlcmZhY2UgKGxocyBvZiAnaW1wbGVtZW50cycpLgogICAgICMgTm90ZSB0aGF0IG1vdmluZyBhbiAnaW1wbGVtZW50cycgc3RhdGVtZW50IGJldHdlZW4gaW1wbGVtZW50aW5nIGFuZAogICAgICMgaW1wbGVtZW50ZWQgZmlsZXMgZG9lcyBub3QgY2hhbmdlIHRoZSBpbmZvIChvciBoZW5jZSBjYXVzZSBhIHJlYnVpbGQpIQotICAgIGZvciByaWdodF9pbnRlcmZhY2VfbmFtZSwgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLml0ZXJpdGVtcygpOgorICAgIGZvciByaWdodF9pbnRlcmZhY2VfbmFtZSwgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLml0ZW1zKCk6CiAgICAgICAgIGZvciBsZWZ0X2ludGVyZmFjZV9uYW1lIGluIGludGVyZmFjZV9pbmZvWydpbXBsZW1lbnRlZF9ieV9pbnRlcmZhY2VzJ106CiAgICAgICAgICAgICBpbnRlcmZhY2VzX2luZm9bbGVmdF9pbnRlcmZhY2VfbmFtZV1bJ2ltcGxlbWVudHNfaW50ZXJmYWNlcyddLmFwcGVuZChyaWdodF9pbnRlcmZhY2VfbmFtZSkKICAgICAgICAgZGVsIGludGVyZmFjZV9pbmZvWydpbXBsZW1lbnRlZF9ieV9pbnRlcmZhY2VzJ10KIAogICAgICMgQW4gSURMIGZpbGUncyBkZXBlbmRlbmNpZXMgYXJlIHBhcnRpYWwgaW50ZXJmYWNlIGZpbGVzIHRoYXQgZXh0ZW5kIGl0LAogICAgICMgYW5kIGZpbGVzIGZvciBvdGhlciBpbnRlcmZhY2VzIHRoYXQgdGhpcyBpbnRlcmZhY2VzIGltcGxlbWVudHMuCi0gICAgZm9yIGludGVyZmFjZV9uYW1lLCBpbnRlcmZhY2VfaW5mbyBpbiBpbnRlcmZhY2VzX2luZm8uaXRlcml0ZW1zKCk6CisgICAgZm9yIGludGVyZmFjZV9uYW1lLCBpbnRlcmZhY2VfaW5mbyBpbiBpbnRlcmZhY2VzX2luZm8uaXRlbXMoKToKICAgICAgICAgcGFydGlhbF9pbnRlcmZhY2VfcGF0aHMgPSBwYXJ0aWFsX2ludGVyZmFjZV9maWxlc1tpbnRlcmZhY2VfbmFtZV0KICAgICAgICAgcGFydGlhbF9pbnRlcmZhY2VzX2Z1bGxfcGF0aHMgPSBwYXJ0aWFsX2ludGVyZmFjZV9wYXRoc1snZnVsbF9wYXRocyddCiAgICAgICAgICMgUGFydGlhbCBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgZWFjaCBuZWVkIGFuIGluY2x1ZGUsIGFzIHRoZXkgYXJlCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICAgICAgfSkKIAogICAgICMgQ2xlYW4gdXAgdGVtcG9yYXJ5IHByaXZhdGUgaW5mb3JtYXRpb24KLSAgICBmb3IgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLml0ZXJ2YWx1ZXMoKToKKyAgICBmb3IgaW50ZXJmYWNlX2luZm8gaW4gaW50ZXJmYWNlc19pbmZvLnZhbHVlcygpOgogICAgICAgICBkZWwgaW50ZXJmYWNlX2luZm9bJ2V4dGVuZGVkX2F0dHJpYnV0ZXMnXQogICAgICAgICBkZWwgaW50ZXJmYWNlX2luZm9bJ3VuaW9uX3R5cGVzJ10KICAgICAgICAgZGVsIGludGVyZmFjZV9pbmZvWydpc19sZWdhY3lfdHJlYXRfYXNfcGFydGlhbF9pbnRlcmZhY2UnXQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGVfZ2xvYmFsX2NvbnN0cnVjdG9ycy5weSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlX2dsb2JhbF9jb25zdHJ1Y3RvcnMucHkKaW5kZXggMTZjOTE2NS4uMzFlNGY2NSAxMDA3NTUKLS0tIGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGVfZ2xvYmFsX2NvbnN0cnVjdG9ycy5weQorKysgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZV9nbG9iYWxfY29uc3RydWN0b3JzLnB5CkBAIC0xMDgsNyArMTA4LDcgQEAKIGRlZiBnZW5lcmF0ZV9nbG9iYWxfY29uc3RydWN0b3JzX2xpc3QoaW50ZXJmYWNlX25hbWUsIGV4dGVuZGVkX2F0dHJpYnV0ZXMpOgogICAgIGV4dGVuZGVkX2F0dHJpYnV0ZXNfbGlzdCA9IFsKICAgICAgICAgICAgIG5hbWUgKyAoJz0nICsgZXh0ZW5kZWRfYXR0cmlidXRlc1tuYW1lXSBpZiBleHRlbmRlZF9hdHRyaWJ1dGVzW25hbWVdIGVsc2UgIiIpCi0gICAgICAgICAgICBmb3IgbmFtZSBpbiAnQ29uZGl0aW9uYWwnLCAnUnVudGltZUVuYWJsZWQnLCAnT3JpZ2luVHJpYWxFbmFibGVkJywgJ05vdFN1cHBvcnRlZCcKKyAgICAgICAgICAgIGZvciBuYW1lIGluIFsnQ29uZGl0aW9uYWwnLCAnUnVudGltZUVuYWJsZWQnLCAnT3JpZ2luVHJpYWxFbmFibGVkJywgJ05vdFN1cHBvcnRlZCddCiAgICAgICAgICAgICBpZiBuYW1lIGluIGV4dGVuZGVkX2F0dHJpYnV0ZXNdCiAgICAgaWYgZXh0ZW5kZWRfYXR0cmlidXRlc19saXN0OgogICAgICAgICBleHRlbmRlZF9zdHJpbmcgPSAnWyVzXSAnICUgJywgJy5qb2luKGV4dGVuZGVkX2F0dHJpYnV0ZXNfbGlzdCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2dsb2JhbF9jb25zdHJ1Y3RvcnMuZ3lwaSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2dsb2JhbF9jb25zdHJ1Y3RvcnMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYwNjI5Yy4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9nbG9iYWxfY29uc3RydWN0b3JzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGEgdGFyZ2V0IHRvIHByb3ZpZGUgYW4gYWN0aW9uCi0jIHRvIGNvbXB1dGUgZ2xvYmFsIG9iamVjdHMgaW4gYSBjb21wb25lbnQuCi0jCi0jIFRvIHVzZSB0aGlzLCBjcmVhdGUgYSBneXAgdGFyZ2V0IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtOgotIyB7Ci0jICAgJ3RhcmdldF9uYW1lJzogJ2NvcmVfZ2xvYmFsX2NvbnN0cnVjdG9yc19pZGxzJywKLSMgICAnZGVwZW5kZW5jaWVzJzogWwotIyAgICAgJ2NvbXBvbmVudF9nbG9iYWxfb2JqZWN0cycsCi0jICAgXSwKLSMgICAndmFyaWFibGVzJzogewotIyAgICAgJ2lkbF9maWxlcyc6ICc8KGxpc3Rfb2ZfaWRsX2ZpbGVzKScsCi0jICAgICAnZ2xvYmFsX29iamVjdHNfZmlsZSc6ICc8KHNvbWVfZGlyKS9HbG9iYWxPYmplY3RzQ29tcG9uZW50LnBpY2tsZScsCi0jICAgICAnZ2xvYmFsX25hbWVzX2lkbF9maWxlcyc6IFsKLSMgICAgICAgJ0dsb2JhbE5hbWUnLAotIyAgICAgICAnPChibGlua19jb3JlX291dHB1dF9kaXIpL0dsb2JhbFNjb3BlQ29tcG9uZW50Q29uc3RydWN0b3JzLmlkbCcsCi0jICAgICAgICMgLi4uCi0jICAgICBdLAotIyAgICAgJ291dHB1dHMnOiBbCi0jICAgICAgICc8QChjb21wb25lbnRfZ2xvYmFsX2NvbnN0cnVjdG9yc19nZW5lcmF0ZWRfaWRsX2ZpbGVzKScsCi0jICAgICAgICc8QChjb21wb25lbnRfZ2xvYmFsX2NvbnN0cnVjdG9yc19nZW5lcmF0ZWRfaGVhZGVyX2ZpbGVzKScsCi0jICAgICBdLAotIyAgIH0sCi0jICAgJ2luY2x1ZGVzJzogWydwYXRoL3RvL3RoaXMvZ3lwaS9maWxlJ10sCi0jIH0sCi0jCi0jIFJlcXVpcmVkIHZhcmlhYmxlczoKLSMgIGlkbF9maWxlcyAtIExpc3Qgb2YgLmlkbCBmaWxlcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgaW4uCi0jICAgIFRoaXMgc2hvdWxkICpvbmx5KiBjb250YWluIG1haW4gSURMIGZpbGVzLCBleGNsdWRpbmcgZGVwZW5kZW5jaWVzIGFuZAotIyAgICB0ZXN0aW5nLCB3aGljaCBzaG91bGQgbm90IGFwcGVhciBvbiBnbG9iYWwgb2JqZWN0cy4KLSMgIGdsb2JhbF9vYmplY3RzIC0gUGlja2xlIGZpbGUgb2YgZ2xvYmFsIG9iamVjdHMuCi0jICBnbG9iYWxfbmFtZXNfaWRsX2ZpbGVzIC0gcGFpcnMgKEdsb2JhbE5hbWUsIENvbnN0cnVjdG9ycy5pZGwpCi0jICBvdXRwdXRzIC0gTGlzdCBvZiBvdXRwdXQgZmlsZXMuCi0jICAgIFBhc3NlZCBhcyBhIHZhcmlhYmxlIGhlcmUsIGluY2x1ZGVkIGJ5IHRoZSB0ZW1wbGF0ZSBpbiB0aGUgYWN0aW9uLgotIwotIyBTcGVjOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI0dsb2JhbAotIyAgICAgICBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI0V4cG9zZWQKLSMgRGVzaWduIGRvY3VtZW50OiBodHRwOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2Rlc2lnbi1kb2N1bWVudHMvaWRsLWJ1aWxkCi0KLXsKLSAgJ3R5cGUnOiAnbm9uZScsCi0gICdhY3Rpb25zJzogW3sKLSAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfPChfdGFyZ2V0X25hbWUpJywKLSAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIElETCBmaWxlcyBmb3IgY29uc3RydWN0b3JzIG9uIGdsb2JhbCBvYmplY3RzIGZvciA8KF90YXJnZXRfbmFtZSknLAotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAnaWRsX2ZpbGVzX2xpc3QnOiAnPHwoPChfdGFyZ2V0X25hbWUpX2lkbF9maWxlc19saXN0LnRtcCA8QChpZGxfZmlsZXMpKScsCi0gICAgfSwKLSAgICAnaW5jbHVkZXMnOiBbJ3NjcmlwdHMuZ3lwaSddLAotICAgICdpbnB1dHMnOiBbCi0gICAgICAnPChiaW5kaW5nc19zY3JpcHRzX2RpcikvZ2VuZXJhdGVfZ2xvYmFsX2NvbnN0cnVjdG9ycy5weScsCi0gICAgICAnPChiaW5kaW5nc19zY3JpcHRzX2RpcikvdXRpbGl0aWVzLnB5JywKLSAgICAgICc8KGlkbF9maWxlc19saXN0KScsCi0gICAgICAnPEAoaWRsX2ZpbGVzKScsCi0gICAgICAnPChnbG9iYWxfb2JqZWN0c19maWxlKScsCi0gICAgXSwKLSAgICAnb3V0cHV0cyc6IFsnPEAob3V0cHV0cyknXSwKLSAgICAnYWN0aW9uJzogWwotICAgICAgJ3B5dGhvbjInLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2dlbmVyYXRlX2dsb2JhbF9jb25zdHJ1Y3RvcnMucHknLAotICAgICAgJy0taWRsLWZpbGVzLWxpc3QnLAotICAgICAgJzwoaWRsX2ZpbGVzX2xpc3QpJywKLSAgICAgICctLWdsb2JhbC1vYmplY3RzLWZpbGUnLAotICAgICAgJzwoZ2xvYmFsX29iamVjdHNfZmlsZSknLAotICAgICAgJy0tJywKLSAgICAgICc8QChnbG9iYWxfbmFtZXNfaWRsX2ZpbGVzKScsCi0gICAgXSwKLSAgfV0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9nbG9iYWxfb2JqZWN0cy5neXBpIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvZ2xvYmFsX29iamVjdHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViOTA5Zi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9nbG9iYWxfb2JqZWN0cy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotIwotIyBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgaW50byBhIHRhcmdldCB0byBwcm92aWRlIGFuIGFjdGlvbgotIyB0byBjb21wdXRlIGdsb2JhbCBvYmplY3RzIGluIGEgY29tcG9uZW50LgotIwotIyBUbyB1c2UgdGhpcywgY3JlYXRlIGEgZ3lwIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybToKLSMgewotIyAgICd0YXJnZXRfbmFtZSc6ICdjb21wb25lbnRfZ2xvYmFsX29iamVjdHMnLAotIyAgICd2YXJpYWJsZXMnOiB7Ci0jICAgICAnaWRsX2ZpbGVzJzogJzwobGlzdF9vZl9pZGxfZmlsZXMpJywKLSMgICAgICdpbnB1dF9maWxlcyc6IFsnPChzb21lX2RpcikvR2xvYmFsT2JqZWN0QmFzZUNvbXBvbmVudC5waWNrbGUnXSwKLSMgICAgICdvdXRwdXRfZmlsZSc6ICc8KHNvbWVfZGlyKS9HbG9iYWxPYmplY3RzQ29tcG9uZW50LnBpY2tsZScsCi0jICAgfSwKLSMgICAnaW5jbHVkZXMnOiBbJ3BhdGgvdG8vdGhpcy9neXBpL2ZpbGUnXSwKLSMgfSwKLSMKLSMgUmVxdWlyZWQgdmFyaWFibGVzOgotIyAgaWRsX2ZpbGVzIC0gTGlzdCBvZiAuaWRsIGZpbGVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBpbi4KLSMgICAgVGhpcyBzaG91bGQgKm9ubHkqIGNvbnRhaW4gbWFpbiBJREwgZmlsZXMsIGV4Y2x1ZGluZyBkZXBlbmRlbmNpZXMgYW5kCi0jICAgIHRlc3RpbmcsIHdoaWNoIHNob3VsZCBub3QgZGVmaW5lIGdsb2JhbCBvYmplY3RzLgotIyAgb3V0cHV0X2ZpbGUgLSBQaWNrbGUgZmlsZSBvZiBvdXRwdXQuCi0jCi0jIE9wdGlvbmFsIHZhcmlhYmxlczoKLSMgIGlucHV0X2ZpbGVzIC0gTGlzdCBvZiBpbnB1dCBwaWNrbGUgZmlsZXMgb2YgZ2xvYmFsIG9iamVjdHMgaW4gYmFzZQotIyAgICBjb21wb25lbnRzLiBJbiB0aGlzIGNhc2UgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYSBkZXBlbmRlbmNpZXMgc2VjdGlvbgotIyAgICBpbiB0aGUgdGFyZ2V0IHRvIGVuc3VyZSB0aGlzIGlzIGdlbmVyYXRlZC4KLSMKLSMgU3BlYzogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNHbG9iYWwKLSMgRGVzaWduIGRvY3VtZW50OiBodHRwOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2Rlc2lnbi1kb2N1bWVudHMvaWRsLWJ1aWxkCi0KLXsKLSAgJ3R5cGUnOiAnbm9uZScsCi0gICdhY3Rpb25zJzogW3sKLSAgICAnYWN0aW9uX25hbWUnOiAnY29tcHV0ZV88KF90YXJnZXRfbmFtZSknLAotICAgICdtZXNzYWdlJzogJ0NvbXB1dGluZyBnbG9iYWwgb2JqZWN0cyBmb3IgPChfdGFyZ2V0X25hbWUpJywKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ2lucHV0X2ZpbGVzJSc6IFtdLAotICAgICAgJ2lkbF9maWxlc19saXN0JzogJzx8KDwoX3RhcmdldF9uYW1lKV9pZGxfZmlsZXNfbGlzdC50bXAgPEAoaWRsX2ZpbGVzKSknLAotICAgIH0sCi0gICAgJ2luY2x1ZGVzJzogWydzY3JpcHRzLmd5cGknXSwKLSAgICAnaW5wdXRzJzogWwotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2NvbXB1dGVfZ2xvYmFsX29iamVjdHMucHknLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL3V0aWxpdGllcy5weScsCi0gICAgICAnPChpZGxfZmlsZXNfbGlzdCknLAotICAgICAgJzxAKGlkbF9maWxlcyknLAotICAgIF0sCi0gICAgJ291dHB1dHMnOiBbCi0gICAgICAnPChvdXRwdXRfZmlsZSknLAotICAgIF0sCi0gICAgJ2FjdGlvbic6IFsKLSAgICAgICdweXRob24yJywKLSAgICAgICc8KGJpbmRpbmdzX3NjcmlwdHNfZGlyKS9jb21wdXRlX2dsb2JhbF9vYmplY3RzLnB5JywKLSAgICAgICctLWlkbC1maWxlcy1saXN0JywKLSAgICAgICc8KGlkbF9maWxlc19saXN0KScsCi0gICAgICAnLS0nLAotICAgICAgJzxAKGlucHV0X2ZpbGVzKScsCi0gICAgICAnPChvdXRwdXRfZmlsZSknLAotICAgICBdLAotICB9XSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2lkbF9kZWZpbml0aW9ucy5weSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2lkbF9kZWZpbml0aW9ucy5weQppbmRleCA1N2IwMDkxLi42N2EyNTY1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pZGxfZGVmaW5pdGlvbnMucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaWRsX2RlZmluaXRpb25zLnB5CkBAIC0xMzksMjIgKzEzOSwyMiBAQAogCiAgICAgZGVmIGFjY2VwdChzZWxmLCB2aXNpdG9yKToKICAgICAgICAgdmlzaXRvci52aXNpdF9kZWZpbml0aW9ucyhzZWxmKQotICAgICAgICBmb3IgaW50ZXJmYWNlIGluIHNlbGYuaW50ZXJmYWNlcy5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciBpbnRlcmZhY2UgaW4gc2VsZi5pbnRlcmZhY2VzLnZhbHVlcygpOgogICAgICAgICAgICAgaW50ZXJmYWNlLmFjY2VwdCh2aXNpdG9yKQotICAgICAgICBmb3IgY2FsbGJhY2tfZnVuY3Rpb24gaW4gc2VsZi5jYWxsYmFja19mdW5jdGlvbnMuaXRlcnZhbHVlcygpOgorICAgICAgICBmb3IgY2FsbGJhY2tfZnVuY3Rpb24gaW4gc2VsZi5jYWxsYmFja19mdW5jdGlvbnMudmFsdWVzKCk6CiAgICAgICAgICAgICBjYWxsYmFja19mdW5jdGlvbi5hY2NlcHQodmlzaXRvcikKLSAgICAgICAgZm9yIGRpY3Rpb25hcnkgaW4gc2VsZi5kaWN0aW9uYXJpZXMuaXRlcnZhbHVlcygpOgorICAgICAgICBmb3IgZGljdGlvbmFyeSBpbiBzZWxmLmRpY3Rpb25hcmllcy52YWx1ZXMoKToKICAgICAgICAgICAgIGRpY3Rpb25hcnkuYWNjZXB0KHZpc2l0b3IpCi0gICAgICAgIGZvciBlbnVtZXJhdGlvbiBpbiBzZWxmLmVudW1lcmF0aW9ucy5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciBlbnVtZXJhdGlvbiBpbiBzZWxmLmVudW1lcmF0aW9ucy52YWx1ZXMoKToKICAgICAgICAgICAgIGVudW1lcmF0aW9uLmFjY2VwdCh2aXNpdG9yKQogICAgICAgICBmb3IgaW1wbGVtZW50IGluIHNlbGYuaW1wbGVtZW50czoKICAgICAgICAgICAgIGltcGxlbWVudC5hY2NlcHQodmlzaXRvcikKLSAgICAgICAgZm9yIHR5cGVkZWYgaW4gc2VsZi50eXBlZGVmcy5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciB0eXBlZGVmIGluIHNlbGYudHlwZWRlZnMudmFsdWVzKCk6CiAgICAgICAgICAgICB0eXBlZGVmLmFjY2VwdCh2aXNpdG9yKQogCiAgICAgZGVmIHVwZGF0ZShzZWxmLCBvdGhlcik6CiAgICAgICAgICIiIlVwZGF0ZSB3aXRoIGFkZGl0aW9uYWwgSWRsRGVmaW5pdGlvbnMuIiIiCi0gICAgICAgIGZvciBpbnRlcmZhY2VfbmFtZSwgbmV3X2ludGVyZmFjZSBpbiBvdGhlci5pbnRlcmZhY2VzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgaW50ZXJmYWNlX25hbWUsIG5ld19pbnRlcmZhY2UgaW4gb3RoZXIuaW50ZXJmYWNlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgbm90IG5ld19pbnRlcmZhY2UuaXNfcGFydGlhbDoKICAgICAgICAgICAgICAgICAjIEFkZCBhcyBuZXcgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcmZhY2VzW2ludGVyZmFjZV9uYW1lXSA9IG5ld19pbnRlcmZhY2UKQEAgLTM1OCw3ICszNTgsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnJlY29nbml6ZWQgbm9kZSBjbGFzczogJXMnICUgY2hpbGRfY2xhc3MpCiAKLSAgICAgICAgaWYgbGVuKGZpbHRlcihOb25lLCBbc2VsZi5pdGVyYWJsZSwgc2VsZi5tYXBsaWtlLCBzZWxmLnNldGxpa2VdKSkgPiAxOgorICAgICAgICBpZiBsZW4obGlzdChmaWx0ZXIoTm9uZSwgW3NlbGYuaXRlcmFibGUsIHNlbGYubWFwbGlrZSwgc2VsZi5zZXRsaWtlXSkpKSA+IDE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnRlcmZhY2UgY2FuIG9ubHkgaGF2ZSBvbmUgb2YgaXRlcmFibGU8PiwgbWFwbGlrZTw+IGFuZCBzZXRsaWtlPD4uJykKIAogICAgICAgICBpZiBoYXNfaW50ZWdlcl90eXBlZF9sZW5ndGggYW5kIGhhc19pbmRleGVkX3Byb3BlcnR5X2dldHRlcjoKQEAgLTQ3NCw2ICs0NzQsOSBAQAogICAgIGRlZiBhY2NlcHQoc2VsZiwgdmlzaXRvcik6CiAgICAgICAgIHZpc2l0b3IudmlzaXRfYXR0cmlidXRlKHNlbGYpCiAKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGlkKHNlbGYpIDwgaWQob3RoZXIpCisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ29uc3RhbnRzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pZGxfcmVhZGVyLnB5IGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaWRsX3JlYWRlci5weQppbmRleCBjMGM2YzZlLi4zY2Y4ZDRhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pZGxfcmVhZGVyLnB5CisrKyBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2lkbF9yZWFkZXIucHkKQEAgLTU1LDggKzU1LDggQEAKICAgICAgICAgIGRlZmluaXRpb25zLiBUaGVyZSBpcyBubyBmaWxlbmFtZSBjb252ZW50aW9uIGluIHRoaXMgY2FzZS4KICAgICAgICAtIE90aGVyd2lzZSwgYW4gSURMIGZpbGUgaXMgaW52YWxpZC4KICAgICAiIiIKLSAgICB0YXJnZXRzID0gKGRlZmluaXRpb25zLmludGVyZmFjZXMudmFsdWVzKCkgKwotICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMuZGljdGlvbmFyaWVzLnZhbHVlcygpKQorICAgIHRhcmdldHMgPSAobGlzdChkZWZpbml0aW9ucy5pbnRlcmZhY2VzLnZhbHVlcygpKSArCisgICAgICAgICAgICAgICBsaXN0KGRlZmluaXRpb25zLmRpY3Rpb25hcmllcy52YWx1ZXMoKSkpCiAgICAgbnVtYmVyX29mX3RhcmdldHMgPSBsZW4odGFyZ2V0cykKICAgICBpZiBudW1iZXJfb2ZfdGFyZ2V0cyA+IDE6CiAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2lkbF92YWxpZGF0b3IucHkgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9pZGxfdmFsaWRhdG9yLnB5CmluZGV4IGU1ZjljNTQuLjJjZGEzYjcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2lkbF92YWxpZGF0b3IucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaWRsX3ZhbGlkYXRvci5weQpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgZGVmIHZhbGlkYXRlX2V4dGVuZGVkX2F0dHJpYnV0ZXMoc2VsZiwgZGVmaW5pdGlvbnMpOgogICAgICAgICAjIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIHdoZW4gcGFyc2luZyB0aGUgZmlsZSwgcmF0aGVyIHRoYW4gYWZ0ZXIuCi0gICAgICAgIGZvciBpbnRlcmZhY2UgaW4gZGVmaW5pdGlvbnMuaW50ZXJmYWNlcy5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciBpbnRlcmZhY2UgaW4gZGVmaW5pdGlvbnMuaW50ZXJmYWNlcy52YWx1ZXMoKToKICAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfZXh0ZW5kZWRfYXR0cmlidXRlc19ub2RlKGludGVyZmFjZSkKICAgICAgICAgICAgIGZvciBhdHRyaWJ1dGUgaW4gaW50ZXJmYWNlLmF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9leHRlbmRlZF9hdHRyaWJ1dGVzX25vZGUoYXR0cmlidXRlKQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX2V4dGVuZGVkX2F0dHJpYnV0ZXNfbm9kZShhcmd1bWVudCkKIAogICAgIGRlZiB2YWxpZGF0ZV9leHRlbmRlZF9hdHRyaWJ1dGVzX25vZGUoc2VsZiwgbm9kZSk6Ci0gICAgICAgIGZvciBuYW1lLCB2YWx1ZXNfc3RyaW5nIGluIG5vZGUuZXh0ZW5kZWRfYXR0cmlidXRlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlc19zdHJpbmcgaW4gbm9kZS5leHRlbmRlZF9hdHRyaWJ1dGVzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX25hbWVfdmFsdWVzX3N0cmluZyhuYW1lLCB2YWx1ZXNfc3RyaW5nKQogCiAgICAgZGVmIHZhbGlkYXRlX25hbWVfdmFsdWVzX3N0cmluZyhzZWxmLCBuYW1lLCB2YWx1ZXNfc3RyaW5nKToKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2ludGVyZmFjZV9kZXBlbmRlbmN5X3Jlc29sdmVyLnB5IGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlX2RlcGVuZGVuY3lfcmVzb2x2ZXIucHkKaW5kZXggMWE4YTdiMC4uZmIwNDU5ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlX2RlcGVuZGVuY3lfcmVzb2x2ZXIucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlX2RlcGVuZGVuY3lfcmVzb2x2ZXIucHkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlzIGRlZmluaXRpb246ICVzLCBiZWNhdXNlIHRoaXMgc2hvdWxkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGF2ZSBhIGRpY3Rpb25hcnkuJyAlIGRlZmluaXRpb25zLmlkbF9uYW1lKQogCi0gICAgICAgIHRhcmdldF9pbnRlcmZhY2UgPSBuZXh0KGRlZmluaXRpb25zLmludGVyZmFjZXMuaXRlcnZhbHVlcygpKQorICAgICAgICB0YXJnZXRfaW50ZXJmYWNlID0gbmV4dChpdGVyKGRlZmluaXRpb25zLmludGVyZmFjZXMudmFsdWVzKCkpKQogICAgICAgICBpbnRlcmZhY2VfbmFtZSA9IHRhcmdldF9pbnRlcmZhY2UubmFtZQogICAgICAgICBpbnRlcmZhY2VfaW5mbyA9IHNlbGYuaW50ZXJmYWNlc19pbmZvW2ludGVyZmFjZV9uYW1lXQogCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgIyBzbyBpbnRlcmZhY2VzIHdpbGwgZ2V0IG1lcmdlZCB0b2dldGhlci4KICAgICAgICAgZGVwZW5kZW5jeV9jb21wb25lbnQgPSBjb21wb25lbnQKIAotICAgICAgICBkZXBlbmRlbmN5X2ludGVyZmFjZSA9IG5leHQoZGVwZW5kZW5jeV9kZWZpbml0aW9ucy5pbnRlcmZhY2VzLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgZGVwZW5kZW5jeV9pbnRlcmZhY2UgPSBuZXh0KGl0ZXIoZGVwZW5kZW5jeV9kZWZpbml0aW9ucy5pbnRlcmZhY2VzLnZhbHVlcygpKSkKICAgICAgICAgZGVwZW5kZW5jeV9pbnRlcmZhY2VfYmFzZW5hbWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoZGVwZW5kZW5jeV9pZGxfZmlsZW5hbWUpKQogCiAgICAgICAgIHRyYW5zZmVyX2V4dGVuZGVkX2F0dHJpYnV0ZXMoZGVwZW5kZW5jeV9pbnRlcmZhY2UsCkBAIC0zNDEsOCArMzQxLDggQEAKICAgICAgICAgY3BwX2luY2x1ZGVzLnVwZGF0ZShpbnRlcmZhY2UuZ2V0KCdjcHBfaW5jbHVkZXMnLCB7fSkuZ2V0KGNvbXBvbmVudCwge30pKQogICAgICAgICByZXR1cm4gdW5mb3JnZWFibGVfYXR0cmlidXRlcywgcmVmZXJlbmNlZF9pbnRlcmZhY2VzLCBjcHBfaW5jbHVkZXMKIAotICAgIGZvciBjb21wb25lbnQsIGRlZmluaXRpb25zIGluIHJlc29sdmVkX2RlZmluaXRpb25zLml0ZXJpdGVtcygpOgotICAgICAgICBmb3IgaW50ZXJmYWNlX25hbWUsIGludGVyZmFjZSBpbiBkZWZpbml0aW9ucy5pbnRlcmZhY2VzLml0ZXJpdGVtcygpOgorICAgIGZvciBjb21wb25lbnQsIGRlZmluaXRpb25zIGluIHJlc29sdmVkX2RlZmluaXRpb25zLml0ZW1zKCk6CisgICAgICAgIGZvciBpbnRlcmZhY2VfbmFtZSwgaW50ZXJmYWNlIGluIGRlZmluaXRpb25zLmludGVyZmFjZXMuaXRlbXMoKToKICAgICAgICAgICAgIGludGVyZmFjZV9pbmZvID0gaW50ZXJmYWNlc19pbmZvW2ludGVyZmFjZV9uYW1lXQogICAgICAgICAgICAgaW5oZXJpdGVkX3VuZm9yZ2VhYmxlX2F0dHJpYnV0ZXMsIHJlZmVyZW5jZWRfaW50ZXJmYWNlcywgY3BwX2luY2x1ZGVzID0gY29sbGVjdF91bmZvcmdlYWJsZV9hdHRyaWJ1dGVzX2luX2FuY2VzdG9ycyhpbnRlcmZhY2VfaW5mby5nZXQoJ3BhcmVudCcpLCBjb21wb25lbnQpCiAgICAgICAgICAgICAjIFRoaXMgbG9vcCBtYXkgcHJvY2VzcyB0aGUgc2FtZSBpbnRlcmZhY2UgbWFueSB0aW1lcywgc28gaXQncwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwuZ3lwaSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxY2M0NDcuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSMKLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYSB0YXJnZXQgdG8gcHJvdmlkZSBhbiBhY3Rpb24KLSMgdG8gY29tcHV0ZSBpbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsIGludGVyZmFjZXMgZGVmaW5lZCBpbiBhIGNvbXBvbmVudC4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jIHsKLSMgICAndGFyZ2V0X25hbWUnOiAnaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWxfY29tcG9uZW50JywKLSMgICAnZGVwZW5kZW5jaWVzJzogWwotIyAgICAgJ2dlbmVyYXRlZF9pZGxzX3RhcmdldCcsCi0jICAgXSwKLSMgICAndmFyaWFibGVzJzogewotIyAgICAgJ3N0YXRpY19pZGxfZmlsZXMnOiAnPChjb21wb25lbnRfc3RhdGljX2lkbF9maWxlcyknLAotIyAgICAgJ2dlbmVyYXRlZF9pZGxfZmlsZXMnOiAnPChjb21wb25lbnRfZ2VuZXJhdGVkX2lkbF9maWxlcyknLAotIyAgICAgJ291dHB1dF9maWxlJzoKLSMgICAgICAgJzwoYmluZGluZ3NfY29yZV9vdXRwdXRfZGlyKS9JbnRlcmZhY2VzSW5mb0NvbXBvbmVudEluZGl2aWR1YWwucGlja2xlJywKLSMgICB9LAotIyAgICdpbmNsdWRlcyc6IFsncGF0aC90by90aGlzL2d5cGkvZmlsZSddLAotIyB9LAotIwotIyBSZXF1aXJlZCB2YXJpYWJsZXM6Ci0jICBzdGF0aWNfaWRsX2ZpbGVzIC0gQWxsIHN0YXRpYyAuaWRsIGZpbGVzIGZvciB0aGUgY29tcG9uZW50LCBpbmNsdWRpbmcKLSMgICAgZGVwZW5kZW5jaWVzIGFuZCB0ZXN0aW5nLgotIyAgZ2VuZXJhdGVkX2lkbF9maWxlcyAtIEFsbCBnZW5lcmF0ZWQgLmlkbCBmaWxlcyBmb3IgdGhlIGNvbXBvbmVudC4KLSMgICAgKE11c3QgYmUgc2VwYXJhdGUgZnJvbSBzdGF0aWMgYmVjYXVzZSBidWlsZCBkaXIgbm90IGtub3cgYXQgZ3lwIHRpbWUuKQotIyAgaW50ZXJmYWNlc19pbmZvX2ZpbGUgLSBPdXRwdXQgcGlja2xlIGZpbGUgY29udGFpbmluZyBpbnRlcmZhY2VzIGluZm8uCi0jICBjb21wb25lbnRfaW5mb19maWxlIC0gT3V0cHV0IHBpY2tsZSBmaWxlIGNvbnRhaW5pbmcgY29tcG9uZW50LXdpZGUgaW5mby4KLSMKLSMgRGVzaWduIGRvY3VtZW50OiBodHRwOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2Rlc2lnbi1kb2N1bWVudHMvaWRsLWJ1aWxkCi0KLXsKLSAgJ3R5cGUnOiAnbm9uZScsCi0gICdhY3Rpb25zJzogW3sKLSAgICAnYWN0aW9uX25hbWUnOiAnY29tcHV0ZV88KF90YXJnZXRfbmFtZSknLAotICAgICdtZXNzYWdlJzogJ0NvbXB1dGluZyBnbG9iYWwgaW5mb3JtYXRpb24gYWJvdXQgaW5kaXZpZHVhbCBJREwgZmlsZXMgZm9yIDwoX3RhcmdldF9uYW1lKScsCi0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdzdGF0aWNfaWRsX2ZpbGVzX2xpc3QnOgotICAgICAgICAnPHwoPChfdGFyZ2V0X25hbWUpX3N0YXRpY19pZGxfZmlsZXNfbGlzdC50bXAgPEAoc3RhdGljX2lkbF9maWxlcykpJywKLSAgICB9LAotICAgICdpbnB1dHMnOiBbCi0gICAgICAnPChiaW5kaW5nc19zY3JpcHRzX2RpcikvY29tcHV0ZV9pbnRlcmZhY2VzX2luZm9faW5kaXZpZHVhbC5weScsCi0gICAgICAnPChiaW5kaW5nc19zY3JpcHRzX2RpcikvdXRpbGl0aWVzLnB5JywKLSAgICAgICc8KGV4dGVuZGVkX2F0dHJpYnV0ZXNfZmlsZSknLAotICAgICAgJzwoc3RhdGljX2lkbF9maWxlc19saXN0KScsCi0gICAgICAnPEAoc3RhdGljX2lkbF9maWxlcyknLAotICAgICAgJzxAKGdlbmVyYXRlZF9pZGxfZmlsZXMpJywKLSAgICAgICc8QChkZXBlbmRlbmN5X2lkbF9maWxlcyknLAotICAgIF0sCi0gICAgJ291dHB1dHMnOiBbCi0gICAgICAnPChpbnRlcmZhY2VzX2luZm9fZmlsZSknLAotICAgICAgJzwoY29tcG9uZW50X2luZm9fZmlsZSknLAotICAgIF0sCi0KLSAgICAnYWN0aW9uJzogWwotICAgICAgJ3B5dGhvbjInLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX2luZGl2aWR1YWwucHknLAotICAgICAgJy0tY2FjaGUtZGlyZWN0b3J5JywKLSAgICAgICc8KGNhY2hlX2RpcmVjdG9yeSknLAotICAgICAgJy0tcm9vdC1kaXJlY3RvcnknLAotICAgICAgJzwocm9vdF9kaXJlY3RvcnkpJywKLSAgICAgICctLWlkbC1maWxlcy1saXN0JywKLSAgICAgICc8KHN0YXRpY19pZGxfZmlsZXNfbGlzdCknLAotICAgICAgJy0tZGVwZW5kZW5jeS1pZGwtZmlsZXMnLAotICAgICAgJzwoZGVwZW5kZW5jeV9pZGxfZmlsZXMpJywKLSAgICAgICctLWludGVyZmFjZXMtaW5mby1maWxlJywKLSAgICAgICc8KGludGVyZmFjZXNfaW5mb19maWxlKScsCi0gICAgICAnLS1jb21wb25lbnQtaW5mby1maWxlJywKLSAgICAgICc8KGNvbXBvbmVudF9pbmZvX2ZpbGUpJywKLSAgICAgICctLWV4dGVuZGVkLWF0dHJpYnV0ZXMnLAotICAgICAgJzwoZXh0ZW5kZWRfYXR0cmlidXRlc19maWxlKScsCi0gICAgICAnLS0nLAotICAgICAgIyBHZW5lcmF0ZWQgZmlsZXMgbXVzdCBiZSBwYXNzZWQgYXQgY29tbWFuZCBsaW5lCi0gICAgICAnPEAoZ2VuZXJhdGVkX2lkbF9maWxlcyknLAotICAgIF0sCi0gIH1dLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlc19pbmZvX292ZXJhbGwuZ3lwaSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL2ludGVyZmFjZXNfaW5mb19vdmVyYWxsLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OTNlMDcuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvaW50ZXJmYWNlc19pbmZvX292ZXJhbGwuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSMKLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYSB0YXJnZXQgdG8gcHJvdmlkZSBhbiBhY3Rpb24KLSMgdG8gY29tcHV0ZSBvdmVyYWxsIGluZm9ybWF0aW9uIGFib3V0IGludGVyZmFjZXMgZGVmaW5lZCBpbiBhIGNvbXBvbmVudC4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jIHsKLSMgICAndGFyZ2V0X25hbWUnOiAnaW50ZXJmYWNlc19pbmZvX2NvbXBvbmVudCcsCi0jICAgJ2RlcGVuZGVuY2llcyc6IFsKLSMgICAgICAgJ2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsX2Jhc2VfY29tcG9uZW50JywKLSMgICAgICAgJ2ludGVyZmFjZXNfaW5mb19pbmRpdmlkdWFsX2NvbXBvbmVudCcsCi0jICAgXSwKLSMgICAndmFyaWFibGVzJzogewotIyAgICAgJ2lucHV0X2ZpbGVzJzogWwotIyAgICAgICAnPChiaW5kaW5nc19iYXNlX2NvbXBvbmVudF9vdXRwdXRfZGlyKS9JbnRlcmZhY2VzSW5mb0Jhc2VDb21wb25lbnRJbmRpdmlkdWFsLnBpY2tsZScsCi0jICAgICAgICc8KGJpbmRpbmdzX2NvbXBvbmVudF9vdXRwdXRfZGlyKS9JbnRlcmZhY2VzSW5mb0NvbXBvbmVudEluZGl2aWR1YWwucGlja2xlJywKLSMgICAgIF0sCi0jICAgICAnb3V0cHV0X2ZpbGUnOgotIyAgICAgICAnPChiaW5kaW5nc19jb21wb25lbnRfb3V0cHV0X2RpcikvSW50ZXJmYWNlc0luZm9Db21wb25lbnQucGlja2xlJywKLSMgICB9LAotIyAgICdpbmNsdWRlcyc6IFsncGF0aC90by90aGlzL2d5cGkvZmlsZSddLAotIyB9LAotIwotIyBSZXF1aXJlZCB2YXJpYWJsZXM6Ci0jICBpbnB1dF9maWxlcyAtIFBpY2tsZSBmaWxlcyBjb250YWluaW5nIGluZm8gYWJvdXQgaW5kaXZpZHVhbCBpbnRlcmZhY2VzLCBib3RoCi0jICAgIGN1cnJlbnQgY29tcG9uZW50IGFuZCBhbnkgYmFzZSBjb21wb25lbnRzLgotIyAgb3V0cHV0X2ZpbGUgLSBQaWNrbGUgZmlsZSBjb250YWluaW5nIG91dHB1dCAob3ZlcmFsbCBpbmZvKS4KLSMKLSMgRGVzaWduIGRvY3VtZW50OiBodHRwOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2Rlc2lnbi1kb2N1bWVudHMvaWRsLWJ1aWxkCi0KLXsKLSAgJ3R5cGUnOiAnbm9uZScsCi0gICdhY3Rpb25zJzogW3sKLSAgICAnYWN0aW9uX25hbWUnOiAnY29tcHV0ZV88KF90YXJnZXRfbmFtZSknLAotICAgICdtZXNzYWdlJzogJ0NvbXB1dGluZyBvdmVyYWxsIGdsb2JhbCBpbmZvcm1hdGlvbiBhYm91dCBJREwgZmlsZXMgZm9yIDwoX3RhcmdldF9uYW1lKScsCi0KLSAgICAnaW5wdXRzJzogWwotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX292ZXJhbGwucHknLAotICAgICAgJzxAKGlucHV0X2ZpbGVzKScsCi0gICAgXSwKLSAgICAnb3V0cHV0cyc6IFsKLSAgICAgICc8KG91dHB1dF9maWxlKScsCi0gICAgXSwKLSAgICAnYWN0aW9uJzogWwotICAgICAgJ3B5dGhvbjInLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19kaXIpL2NvbXB1dGVfaW50ZXJmYWNlc19pbmZvX292ZXJhbGwucHknLAotICAgICAgJy0tJywKLSAgICAgICc8QChpbnB1dF9maWxlcyknLAotICAgICAgJzwob3V0cHV0X2ZpbGUpJywKLSAgICBdLAotICB9XSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL292ZXJsb2FkX3NldF9hbGdvcml0aG0ucHkgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9vdmVybG9hZF9zZXRfYWxnb3JpdGhtLnB5CmluZGV4IDE1YjQxNjguLmVlNjkxMjAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL292ZXJsb2FkX3NldF9hbGdvcml0aG0ucHkKKysrIGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvb3ZlcmxvYWRfc2V0X2FsZ29yaXRobS5weQpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgIyBGaWx0ZXIgdG8gb25seSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IG92ZXJsb2FkZWQKICAgICBtZXRob2RfY291bnRzID0gQ291bnRlcihtZXRob2RbJ25hbWUnXSBmb3IgbWV0aG9kIGluIG1ldGhvZHMpCiAgICAgb3ZlcmxvYWRlZF9tZXRob2RfbmFtZXMgPSBzZXQobmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLCBjb3VudCBpbiBtZXRob2RfY291bnRzLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lLCBjb3VudCBpbiBtZXRob2RfY291bnRzLml0ZW1zKCkpCiAgICAgb3ZlcmxvYWRlZF9tZXRob2RzID0gW21ldGhvZCBmb3IgbWV0aG9kIGluIG1ldGhvZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWV0aG9kWyduYW1lJ10gaW4gb3ZlcmxvYWRlZF9tZXRob2RfbmFtZXNdCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL3NjcmlwdHMuZ3lwaSBiL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL3NjcmlwdHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JkZTRkMy4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy9zY3JpcHRzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnYmluZGluZ3Nfc2NyaXB0c19kaXInOiAnLicsCi0gICAgJ2JpbmRpbmdzX3NjcmlwdHNfb3V0cHV0X2RpciUnOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvYmxpbmsvYmluZGluZ3Mvc2NyaXB0cycsCi0gICAgJ2ppbmphX21vZHVsZV9maWxlcyc6IFsKLSAgICAgICMgamluamEyL19faW5pdF9fLnB5IGNvbnRhaW5zIHZlcnNpb24gc3RyaW5nLCBzbyBzdWZmaWNpZW50IGZvciBwYWNrYWdlCi0gICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvamluamEyL19faW5pdF9fLnB5JywKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9tYXJrdXBzYWZlL19faW5pdF9fLnB5JywgICMgamluamEyIGRlcAotICAgIF0sCi0gICAgJ2lkbF9sZXhlcl9wYXJzZXJfZmlsZXMnOiBbCi0gICAgICAjIFBMWSAoUHl0aG9uIExleC1ZYWNjKQotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3BseS9sZXgucHknLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3BseS95YWNjLnB5JywKLSAgICAgICMgV2ViIElETCBsZXhlci9wYXJzZXIgKGJhc2UgcGFyc2VyKQotICAgICAgJzwoREVQVEgpL3Rvb2xzL2lkbF9wYXJzZXIvaWRsX2xleGVyLnB5JywKLSAgICAgICc8KERFUFRIKS90b29scy9pZGxfcGFyc2VyL2lkbF9ub2RlLnB5JywKLSAgICAgICc8KERFUFRIKS90b29scy9pZGxfcGFyc2VyL2lkbF9wYXJzZXIucHknLAotICAgICAgIyBCbGluayBJREwgbGV4ZXIvcGFyc2VyL2NvbnN0cnVjdG9yCi0gICAgICAnYmxpbmtfaWRsX2xleGVyLnB5JywKLSAgICAgICdibGlua19pZGxfcGFyc2VyLnB5JywKLSAgICBdLAotICAgICdpZGxfY29tcGlsZXJfZmlsZXMnOiBbCi0gICAgICAgJ2lkbF9jb21waWxlci5weScsCi0KLSAgICAgICAjIEJsaW5rIElETCBmcm9udCBlbmQgKGV4LWxleGVyL3BhcnNlcikKLSAgICAgICAnaWRsX2RlZmluaXRpb25zLnB5JywKLSAgICAgICAnaWRsX3JlYWRlci5weScsCi0gICAgICAgJ2lkbF90eXBlcy5weScsCi0gICAgICAgJ2lkbF92YWxpZGF0b3IucHknLAotICAgICAgICdpbnRlcmZhY2VfZGVwZW5kZW5jeV9yZXNvbHZlci5weScsCi0KLSAgICAgICAjIFY4IGNvZGUgZ2VuZXJhdG9yCi0gICAgICAgJ2NvZGVfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAnY29kZV9nZW5lcmF0b3JfdjgucHknLAotICAgICAgICdjb2RlX2dlbmVyYXRvcl93ZWJfYWdlbnRfYXBpLnB5JywKLSAgICAgICAndjhfYXR0cmlidXRlcy5weScsCi0gICAgICAgJ3Y4X2NhbGxiYWNrX2Z1bmN0aW9uLnB5JywKLSAgICAgICAndjhfY2FsbGJhY2tfaW50ZXJmYWNlLnB5JywKLSAgICAgICAndjhfZGljdGlvbmFyeS5weScsCi0gICAgICAgJ3Y4X2dsb2JhbHMucHknLAotICAgICAgICd2OF9pbnRlcmZhY2UucHknLAotICAgICAgICd2OF9tZXRob2RzLnB5JywKLSAgICAgICAndjhfdHlwZXMucHknLAotICAgICAgICd2OF91bmlvbi5weScsCi0gICAgICAgJ3Y4X3V0aWxpdGllcy5weScsCi0gICAgXSwKLSAgICAnaWRsX2NhY2hlX2ZpbGVzJzogWwotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyKS9sZXh0YWIucHknLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyKS9wYXJzZXRhYi5waWNrbGUnLAotICAgICAgJzwoYmluZGluZ3Nfc2NyaXB0c19vdXRwdXRfZGlyKS9jYWNoZWRfamluamFfdGVtcGxhdGVzLnN0YW1wJywKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvdXRpbGl0aWVzLnB5IGIvdGhpcmRfcGFydHkvYmxpbmsvU291cmNlL2JpbmRpbmdzL3NjcmlwdHMvdXRpbGl0aWVzLnB5CmluZGV4IGJmY2ViZTIuLjdiMzU5MzMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2JsaW5rL1NvdXJjZS9iaW5kaW5ncy9zY3JpcHRzL3V0aWxpdGllcy5weQorKysgYi90aGlyZF9wYXJ0eS9ibGluay9Tb3VyY2UvYmluZGluZ3Mvc2NyaXB0cy91dGlsaXRpZXMucHkKQEAgLTgsMTAgKzgsOSBAQAogIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKIGltcG9ydCBzaGxleAotaW1wb3J0IHN0cmluZwogaW1wb3J0IHN1YnByb2Nlc3MKIAogIyBBbGwgb2YgQ29iYWx0J3MgaW50ZXJmYWNlcyBhcmUgdW5kZXIgZWl0aGVyIHRoZSBjb2JhbHQvLCBzdGFyYm9hcmQvIG9yCkBAIC0yNjQsNyArMjYzLDcgQEAKICAgICB8dGFyZ2V0fCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB8ZGlmZnwuICBQYXJ0IG9mIHxkaWZmfCBtYXkgYmUgcmUtdXNlZCBpbgogICAgIHx0YXJnZXR8LgogICAgICIiIgotICAgIGZvciBrZXksIHZhbHVlIGluIGRpZmYuaXRlcml0ZW1zKCk6CisgICAgZm9yIGtleSwgdmFsdWUgaW4gZGlmZi5pdGVtcygpOgogICAgICAgICBpZiBrZXkgbm90IGluIHRhcmdldDoKICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWUKICAgICAgICAgZWxpZiB0eXBlKHZhbHVlKSA9PSBkaWN0OgpAQCAtMzYyLDcgKzM2MSw3IEBACiAKIAogZGVmIHJlYWRfcGlja2xlX2ZpbGUocGlja2xlX2ZpbGVuYW1lKToKLSAgICB3aXRoIG9wZW4ocGlja2xlX2ZpbGVuYW1lKSBhcyBwaWNrbGVfZmlsZToKKyAgICB3aXRoIG9wZW4ocGlja2xlX2ZpbGVuYW1lLCAncmInKSBhcyBwaWNrbGVfZmlsZToKICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkKHBpY2tsZV9maWxlKQogCiAKQEAgLTM3Niw3ICszNzUsNyBAQAogICAgIGRlc3RpbmF0aW9uX2Rpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdGluYXRpb25fZmlsZW5hbWUpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uX2Rpcm5hbWUpOgogICAgICAgICBvcy5tYWtlZGlycyhkZXN0aW5hdGlvbl9kaXJuYW1lKQotICAgIHdpdGggb3BlbihkZXN0aW5hdGlvbl9maWxlbmFtZSwgJ3diJykgYXMgZGVzdGluYXRpb25fZmlsZToKKyAgICB3aXRoIG9wZW4oZGVzdGluYXRpb25fZmlsZW5hbWUsICd3JykgYXMgZGVzdGluYXRpb25fZmlsZToKICAgICAgICAgZGVzdGluYXRpb25fZmlsZS53cml0ZShuZXdfdGV4dCkKIAogCkBAIC0zOTAsNyArMzg5LDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgIyBJZiB0cm91YmxlIHVucGlja2xpbmcsIG92ZXJ3cml0ZQogICAgICAgICAgICAgICAgIHBhc3MKLSAgICB3aXRoIG9wZW4ocGlja2xlX2ZpbGVuYW1lLCAndycpIGFzIHBpY2tsZV9maWxlOgorICAgIHdpdGggb3BlbihwaWNrbGVfZmlsZW5hbWUsICd3YicpIGFzIHBpY2tsZV9maWxlOgogICAgICAgICBwaWNrbGUuZHVtcChkYXRhLCBwaWNrbGVfZmlsZSkKIAogCkBAIC00NDcsNyArNDQ2LDcgQEAKICAgICAgICAgICAgICAjIERpc2NhcmQgZW1wdHkgcGFydHMsIHdoaWNoIG1heSBleGlzdCBkdWUgdG8gdHJhaWxpbmcgY29tbWEKICAgICAgICAgICAgICBpZiBleHRlbmRlZF9hdHRyaWJ1dGUuc3RyaXAoKV0KICAgICBmb3IgcGFydCBpbiBwYXJ0czoKLSAgICAgICAgbmFtZSwgXywgdmFsdWUgPSBtYXAoc3RyaW5nLnN0cmlwLCBwYXJ0LnBhcnRpdGlvbignPScpKQorICAgICAgICBuYW1lLCBfLCB2YWx1ZSA9IG1hcChsYW1iZGEgeDogeC5zdHJpcCgpLCBwYXJ0LnBhcnRpdGlvbignPScpKQogICAgICAgICBleHRlbmRlZF9hdHRyaWJ1dGVzW25hbWVdID0gdmFsdWUKICAgICByZXR1cm4gZXh0ZW5kZWRfYXR0cmlidXRlcwogCkBAIC00NjIsNyArNDYxLDcgQEAKICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgYXJndW1lbnRzID0gW10KLSAgICBmb3IgYXJndW1lbnQgaW4gbWFwKHN0cmluZy5zdHJpcCwgbWF0Y2guZ3JvdXAoMSkuc3BsaXQoJywnKSk6CisgICAgZm9yIGFyZ3VtZW50IGluIG1hcChsYW1iZGEgeDogeC5zdHJpcCgpLCBtYXRjaC5ncm91cCgxKS5zcGxpdCgnLCcpKToKICAgICAgICAgZXhwb3NlZCwgcnVudGltZV9lbmFibGVkID0gYXJndW1lbnQuc3BsaXQoKQogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHsnZXhwb3NlZCc6IGV4cG9zZWQsICdydW50aW1lX2VuYWJsZWQnOiBydW50aW1lX2VuYWJsZWR9KQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvQlVJTEQuZ24gYi90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvQlVJTEQuZ24KaW5kZXggNDMwYjc3ZS4uYjRkNDk3NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvYm9yaW5nc3NsL0JVSUxELmduCisrKyBiL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9CVUlMRC5nbgpAQCAtMTgzLDUgKzE4Myw0IEBACiAgICAgIjpjcnlwdG8iLAogICAgICIvL3N0YXJib2FyZCIsCiAgIF0KLSAgY29udGVudF9kZXBzID0gWyAiLy90aGlyZF9wYXJ0eS9pY3U6aWN1ZGF0YSIgXQogfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYm9yaW5nc3NsL2JvcmluZ3NzbC5neXAgYi90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1ZmQzNC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2FzbV90YXJnZXRfYXJjaCUnOiAnPCh0YXJnZXRfYXJjaCknLAotICAgICdib3Jpbmdzc2xfcm9vdCUnOiAnPChERVBUSCkvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYycsCi0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgIyBUdXJuIG9mZiBiYWQtZnVuY3Rpb24tY2FzdCB3YXJuaW5nLCBhcyBCb3JpbmdTU0wgdmlvbGF0ZXMgdGhpcyBzb21ldGltZXMuCi0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnUFVSSUZZJywKLSAgICAgICdURVJNSU8nLAotICAgICAgJ19SRUVOVFJBTlQnLAotICAgIF0sCi0gICAgJ2NmbGFncyc6IFsKLSAgICAgICctZlBJQycsCi0gICAgICAnLWZ2aXNpYmlsaXR5PWhpZGRlbicsCi0gICAgXSwKLSAgICAnY2ZsYWdzX2MnOiBbCi0gICAgICAnLXN0ZD1nbnU5OScsCi0gICAgICAnLVduby1iYWQtZnVuY3Rpb24tY2FzdCcsCi0gICAgXSwKLSAgICAnY2ZsYWdzX2MhJzogWwotICAgICAgJy1XYmFkLWZ1bmN0aW9uLWNhc3QnLAotICAgIF0sCi0KLSAgICAnbGRmbGFncyc6IFsKLSAgICAgICctZlBJQycsCi0gICAgXSwKLQotICAgICd0eXBlJzogJzwobGlicmFyeSknLAotCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ09TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnb3BlbnNzbF9jb25maWdfcGF0aCc6ICc8KGJvcmluZ3NzbF9yb290KS9jb25maWcvc3RhcmJvYXJkJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL2NsaWVudF9wb3J0aW5nL2V6dGltZS9lenRpbWUuZ3lwOmV6dGltZScsCi0gICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgXSwKLSAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcmFuZF9leHRyYS9kZXRlcm1pbmlzdGljLmMnLAotICAgICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcmFuZF9leHRyYS9mdWNoc2lhLmMnLAotICAgICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcmFuZF9leHRyYS93aW5kb3dzLmMnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ09TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ05PX1NZU19QQVJBTV9IJywKLSAgICAgICAgICAnTk9fU1lTX1VOX0gnLAotICAgICAgICAgICdOT19TWVNMT0cnLAotICAgICAgICAgICdPUEVOU1NMX05PX0NBTUVMTElBJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19DQVBJRU5HJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19DQVNUJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19DTVMnLAotICAgICAgICAgICdPUEVOU1NMX05PX0RZTkFNSUNfRU5HSU5FJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19FQ19OSVNUUF82NF9HQ0NfMTI4JywKLSAgICAgICAgICAnT1BFTlNTTF9OT19HTVAnLAotICAgICAgICAgICdPUEVOU1NMX05PX0lERUEnLAotICAgICAgICAgICdPUEVOU1NMX05PX0pQQUtFJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19LUkI1JywKLSAgICAgICAgICAnT1BFTlNTTF9OT19NREMyJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19PQ1NQJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19SQzUnLAotICAgICAgICAgICdPUEVOU1NMX05PX1JGQzM3NzknLAotICAgICAgICAgICdPUEVOU1NMX05PX1NDVFAnLAotICAgICAgICAgICdPUEVOU1NMX05PX1NFRUQnLAotICAgICAgICAgICdPUEVOU1NMX05PX1NUT1JFJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19TT0NLJywgICMgQWRkZWQgYnkgQ29iYWx0IHRvIHJlbW92ZSB1bnVzZWQgc29ja2V0IGNvZGUuCi0gICAgICAgICAgJ09QRU5TU0xfTk9fV0hJUkxQT09MJywKLSAgICAgICAgICAnT1BFTlNTTF9OT19QT1NJWF9JTycsCi0gICAgICAgIF0sCi0gICAgICB9XSwgICMgT1MgPT0gInN0YXJib2FyZCIKLSAgICBdLAotICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAnLicsCi0gICAgICAnPEAob3BlbnNzbF9jb25maWdfcGF0aCknLAotICAgIF0sCi0gICAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPEAob3BlbnNzbF9jb25maWdfcGF0aCknLAotICAgICAgXSwKLSAgICB9LAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvX2Z1bGwnLAotCi0gICAgICAjIEluY2x1ZGUgdGhlIHNvdXJjZSBmaWxlIGxpc3QgZ2VuZXJhdGVkIGJ5IEJvcmluZ1NTTAotICAgICAgJ2luY2x1ZGVzJzogWydib3Jpbmdzc2wuZ3lwaScsXSwKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChib3Jpbmdzc2xfY3J5cHRvX2ZpbGVzKScsCi0gICAgICAgICc8QChib3Jpbmdzc2xfc3NsX2ZpbGVzKScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUnLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0KLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIFRoaXMgbWFzc2l2ZSwgbmVzdGVkIGNvbmRpdGlvbmFsIGJsb2NrIHdpbGwgc2VsZWN0IHRoZSBjb3JyZWN0IGJhdGNoCi0gICAgICAgICMgb2YgYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZXMgZm9yIHRoZSBjdXJyZW50IE9TIGFuZCBDUFUgYXJjaGl0ZWN0dXJlLCBvcgotICAgICAgICAjIGl0IHdpbGwgdHVybiBvZmYgYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZXMgZW50aXJlbHkgaWYgdGhlCi0gICAgICAgICMgfGFzbV90YXJnZXRfYXJjaHwgaGFzIGJlZW4gc2V0IHRvICJub25lIi4KLSAgICAgICAgWydzYl9ldmVyZ3JlZW49PTEnLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ2NhbGxpbmdfY29udmVudGlvbiBub3QgaW4gWyJhYXJjaDY0IiwgImVhYmkiLCAic3lzdiIsICJ3aW5kb3dzIl0gb3IgYXNtX3RhcmdldF9hcmNoIG5vdCBpbiBbIng4NiIsICJ4NjQiLCAiYXJtIiwgImFybTY0Il0nLCB7Ci0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdPUEVOU1NMX05PX0FTTScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7ICAjIGNhbGxpbmdfY29udmVudGlvbiBub3QgaW4gWyJhYXJjaDY0IiwgImVhYmkiLCAic3lzdiIsICJ3aW5kb3dzIl0gb3IgYXNtX3RhcmdldF9hcmNoIG5vdCBpbiBbIng4NiIsICJ4NjQiLCAiYXJtIiwgImFybTY0Il0KLSAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgWydjYWxsaW5nX2NvbnZlbnRpb249PSJhYXJjaDY0IiBvciBcCi0gICAgICAgICAgICAgICAgICBjYWxsaW5nX2NvbnZlbnRpb249PSJlYWJpIiBvciBcCi0gICAgICAgICAgICAgICAgICBjYWxsaW5nX2NvbnZlbnRpb249PSJzeXN2IicsIHsKLSAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09Ing4NiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYm9yaW5nc3NsX2xpbnV4X3g4Nl9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYm9yaW5nc3NsX2xpbnV4X3g4Nl82NF9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09ImFybSInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYm9yaW5nc3NsX2xpbnV4X2FybV9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09ImFybTY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfbGludXhfYWFyY2g2NF9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ2NhbGxpbmdfY29udmVudGlvbj09IndpbmRvd3MiJywgewotICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfd2luX3g4Nl9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAoYm9yaW5nc3NsX3dpbl94ODZfNjRfZmlsZXMpJywKLSAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3RhcmdldF9vcyBub3QgaW4gWyJsaW51eCIsICJhbmRyb2lkIiwgInR2b3MiXSBvciBhc21fdGFyZ2V0X2FyY2ggbm90IGluIFsieDg2IiwgIng2NCIsICJhcm0iLCAiYXJtNjQiXScsIHsKLSAgICAgICAgICAgICAgIyBwbGVhc2UgcmVhZCBjb21tZW50cyBmb3IgfHRhcmdldF9vcz09IndpbiJ8IGNvbmRpdGlvbiBiZWxvdwotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnT1BFTlNTTF9OT19BU00nLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgeyAgIyB0YXJnZXRfb3MgaW4gWyJsaW51eCIsICJhbmRyb2lkIiwgInR2b3MiXSBhbmQgYXNtX3RhcmdldF9hcmNoIGluIFsibm9uZSIsICJtaXBzIiwgIng4NiJdCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0ibGludXgiIG9yIHRhcmdldF9vcz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfbGludXhfeDg2X2ZpbGVzKScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfbGludXhfeDg2XzY0X2ZpbGVzKScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0iYXJtIicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfbGludXhfYXJtX2ZpbGVzKScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGJvcmluZ3NzbF9saW51eF9hYXJjaDY0X2ZpbGVzKScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsndGFyZ2V0X29zPT0id2luIicsIHsKLQotICAgICAgICAgICAgICAgICMgRm9yIHx0YXJnZXRfb3M9PSJ3aW4ifCBhbiBBU00gcnVsZSB1c2VzIG1sLmV4ZSAoYWthIE1TIE1hY3JvIEFzc2VtYmxlcikKLSAgICAgICAgICAgICAgICAjIHdoaWNoIHdlIGNhbid0IHVzZSB3aXRoIEdOVSBmb3JtYXQuIEFzIHNvb24gYXMgQVNNIHJ1bGUgd2lsbCBiZSBmaXhlZAotICAgICAgICAgICAgICAgICMgZm9yIHVzaW5nIEdOVSBBc3NlbWJsZXIsIHRvIGFjY2VsZXJhdGUgImNyeXB0byIgd2l0aCBhc3NlbWJsZXIKLSAgICAgICAgICAgICAgICAjIGltcGxlbWVudGF0aW9ucyBqdXN0IHJlbW92ZSB0YXJnZXRfb3M9PSJ3aW4iIGZyb20gYWJvd2UgY29uZGl0aW9uCi0gICAgICAgICAgICAgICAgIyB8J2FzbV90YXJnZXRfYXJjaD09Im5vbmUiIG9yIHRhcmdldF9vcz09IndpbiInfCB3aGljaCBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICAjIHNldHMgT1BFTlNTTF9OT19BU00gZm9yICJ3aW4iIHRvbwotCi0gICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgWydhc21fdGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGJvcmluZ3NzbF93aW5feDg2X2ZpbGVzKScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8QChib3Jpbmdzc2xfd2luX3g4Nl82NF9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ3RhcmdldF9vcz09InR2b3MiJywgewotICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnYXNtX3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzxAKGJvcmluZ3NzbF9pb3NfYWFyY2g2NF9maWxlcyknLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAjIFNpbXVsYXRvcgotICAgICAgICAgICAgICAgICAgICBbJ2FzbV90YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAnT1BFTlNTTF9OT19BU00nLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XQotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJzdGFyYm9hcmQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9yYW5kX2V4dHJhL3N0YXJib2FyZC5jJywKLSAgICAgICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3B1LXN0YXJib2FyZC5jJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvJywKLSAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vY29ubmVjdC5jJywKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vZmQuYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL3NvY2tldC5jJywKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vc29ja2V0X2hlbHBlci5jJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWyAnY3J5cHRvX2Z1bGwnIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2wuZ3lwaSBiL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9ib3Jpbmdzc2wuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlkMWExZi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBUaGlzIGZpbGUgaXMgY3JlYXRlZCBieSBnZW5lcmF0ZV9idWlsZF9maWxlcy5weS4gRG8gbm90IGVkaXQgbWFudWFsbHkuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnYm9yaW5nc3NsX3NzbF9maWxlcyc6IFsKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvZHRsczEuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3NzbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvc3NsMy5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvdGxzMS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvYmlvX3NzbC5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL2QxX2JvdGguY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9kMV9saWIuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9kMV9wa3QuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9kMV9zcnRwLmNjJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvZHRsc19tZXRob2QuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9kdGxzX3JlY29yZC5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL2hhbmRzaGFrZS5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL2hhbmRzaGFrZV9jbGllbnQuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9oYW5kc2hha2Vfc2VydmVyLmNjJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3MzX2JvdGguY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zM19saWIuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zM19wa3QuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfYWVhZF9jdHguY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfYXNuMS5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3NzbF9idWZmZXIuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfY2VydC5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3NzbF9jaXBoZXIuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfZmlsZS5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3NzbF9rZXlfc2hhcmUuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfbGliLmNjJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvc3NsX3ByaXZrZXkuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfc2Vzc2lvbi5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3NzbF9zdGF0LmNjJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvc3NsX3RyYW5zY3JpcHQuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfdmVyc2lvbnMuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC9zc2xfeDUwOS5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3QxX2VuYy5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3QxX2xpYi5jYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvc3NsL3RsczEzX2JvdGguY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC90bHMxM19jbGllbnQuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC90bHMxM19lbmMuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC90bHMxM19zZXJ2ZXIuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3NzbC90bHNfbWV0aG9kLmNjJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9zc2wvdGxzX3JlY29yZC5jYycsCi0gICAgXSwKLSAgICAnYm9yaW5nc3NsX2NyeXB0b19maWxlcyc6IFsKLSAgICAgICdlcnJfZGF0YS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hX2JpdHN0ci5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hX2Jvb2wuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9kMmlfZnAuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9kdXAuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9lbnVtLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2FfZ2VudG0uYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9pMmRfZnAuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9pbnQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9tYnN0ci5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hX29iamVjdC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hX29jdGV0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2FfcHJpbnQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV9zdHJuaWQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYV90aW1lLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2FfdHlwZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hX3V0Y3RtLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2FfdXRmOC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hc24xX2xpYi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYXNuMS9hc24xX2xvY2wuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYXNuMV9wYXIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvYXNuX3BhY2suYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2FzbjEvZl9lbnVtLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2ZfaW50LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL2Zfc3RyaW5nLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fZGVjLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fZW5jLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fZnJlLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fbmV3LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fdHlwLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3Rhc25fdXRsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9hc24xL3RpbWVfc3VwcG9ydC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmFzZTY0L2Jhc2U2NC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL2Jpby5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL2Jpb19tZW0uYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2Jpby9jb25uZWN0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vZmQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2Jpby9maWxlLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vaGV4ZHVtcC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9iaW8vcGFpci5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL3ByaW50Zi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL3NvY2tldC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYmlvL3NvY2tldF9oZWxwZXIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2JuX2V4dHJhL2JuX2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2JuX2V4dHJhL2NvbnZlcnQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2J1Zi9idWYuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2J5dGVzdHJpbmcvYXNuMV9jb21wYXQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2J5dGVzdHJpbmcvYmVyLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ieXRlc3RyaW5nL2NiYi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vYnl0ZXN0cmluZy9jYnMuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2J5dGVzdHJpbmcvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2J5dGVzdHJpbmcvdW5pY29kZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2hhY2hhL2NoYWNoYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2lwaGVyX2V4dHJhL2NpcGhlcl9leHRyYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2lwaGVyX2V4dHJhL2Rlcml2ZV9rZXkuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NpcGhlcl9leHRyYS9lX2Flc2NjbS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2lwaGVyX2V4dHJhL2VfYWVzY3RyaG1hYy5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2lwaGVyX2V4dHJhL2VfYWVzZ2Ntc2l2LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jaXBoZXJfZXh0cmEvZV9jaGFjaGEyMHBvbHkxMzA1LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jaXBoZXJfZXh0cmEvZV9udWxsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jaXBoZXJfZXh0cmEvZV9yYzIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NpcGhlcl9leHRyYS9lX3JjNC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY2lwaGVyX2V4dHJhL2VfdGxzLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jaXBoZXJfZXh0cmEvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NpcGhlcl9leHRyYS90bHNfY2JjLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jbWFjL2NtYWMuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NvbmYvY29uZi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY29uZi9jb25mX2RlZi5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY29uZi9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3B1LWFybS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3B1LWludGVsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jcHUtcHBjNjRsZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3J5cHRvLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3RoaXJkX3BhcnR5L2ZpYXQvY3VydmUyNTUxOS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3VydmUyNTUxOS9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vY3VydmUyNTUxOS9zcGFrZTI1NTE5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9kaC9jaGVjay5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZGgvZGguYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2RoL2RoX2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2RoL3BhcmFtcy5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZGlnZXN0X2V4dHJhL2RpZ2VzdF9leHRyYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZHNhL2RzYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZHNhL2RzYV9hc24xLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9lY19leHRyYS9lY19hc24xLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9lY2RoX2V4dHJhL2VjZGhfZXh0cmEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2VjZHNhX2V4dHJhL2VjZHNhX2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2VuZ2luZS9lbmdpbmUuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2Vyci9lcnIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2Vyci9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXZwL2RpZ2VzdHNpZ24uYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9ldnAuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9ldnBfYXNuMS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXZwL2V2cF9jdHguYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXZwL3BfZHNhX2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9wX2VjLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ldnAvcF9lY19hc24xLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ldnAvcF9lZDI1NTE5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ldnAvcF9lZDI1NTE5X2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9wX3JzYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXZwL3BfcnNhX2FzbjEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2V2cC9wYmtkZi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXZwL3ByaW50LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ldnAvc2NyeXB0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9ldnAvc2lnbi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZXhfZGF0YS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9hZXMvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2ZpcHNtb2R1bGUvYmNtLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL2JuL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL2JuL3JzYXpfZXhwLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL2NpcGhlci9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9kZWxvY2F0ZS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9kZXMvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2ZpcHNtb2R1bGUvZGlnZXN0L2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL2RpZ2VzdC9tZDMyX2NvbW1vbi5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9lYy9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9lYy9wMjU2LXg4Nl82NC10YWJsZS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9lYy9wMjU2LXg4Nl82NC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vZmlwc21vZHVsZS9pc19maXBzLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL21vZGVzL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9maXBzbW9kdWxlL3JhbmQvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2ZpcHNtb2R1bGUvcnNhL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9oa2RmL2hrZGYuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9saGFzaC9saGFzaC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vbWVtX3N0YXJib2FyZC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vb2JqL29iai5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vb2JqL29ial9kYXQuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL29iai9vYmpfeHJlZi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcGVtL3BlbV9hbGwuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BlbS9wZW1faW5mby5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcGVtL3BlbV9saWIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BlbS9wZW1fb3RoLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wZW0vcGVtX3BrOC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcGVtL3BlbV9wa2V5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wZW0vcGVtX3g1MDkuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BlbS9wZW1feGF1eC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcGtjczcvaW50ZXJuYWwuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BrY3M3L3BrY3M3LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wa2NzNy9wa2NzN194NTA5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wa2NzOC9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcGtjczgvcDVfcGJldjIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BrY3M4L3BrY3M4LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wa2NzOC9wa2NzOF94NTA5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wb2x5MTMwNS9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcG9seTEzMDUvcG9seTEzMDUuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3BvbHkxMzA1L3BvbHkxMzA1X2FybS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcG9seTEzMDUvcG9seTEzMDVfdmVjLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wb29sL2ludGVybmFsLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9wb29sL3Bvb2wuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3JhbmRfZXh0cmEvZGV0ZXJtaW5pc3RpYy5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcmFuZF9leHRyYS9mb3JrdW5zYWZlLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9yYW5kX2V4dHJhL2Z1Y2hzaWEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3JhbmRfZXh0cmEvcmFuZF9leHRyYS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcmFuZF9leHRyYS93aW5kb3dzLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9yYzQvcmM0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9yZWZjb3VudF9jMTEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3JlZmNvdW50X2xvY2suYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3JlZmNvdW50X3N0YXJib2FyZC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcnNhX2V4dHJhL3JzYV9hc24xLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9zdGFjay9zdGFjay5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vdGhyZWFkLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by90aHJlYWRfbm9uZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vdGhyZWFkX3B0aHJlYWQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3RocmVhZF9zdGFyYm9hcmQuY2MnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by90aHJlYWRfd2luLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L2FfZGlnZXN0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L2Ffc2lnbi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9hX3N0cmV4LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L2FfdmVyaWZ5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L2FsZ29yaXRobS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9hc24xX2dlbi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9ieV9kaXIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkvYnlfZmlsZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9jaGFybWFwLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L2kyZF9wci5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9pbnRlcm5hbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS9yc2FfcHNzLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3RfY3JsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3RfcmVxLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3RfeDUwOS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS90X3g1MDlhLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3ZwbV9pbnQuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5X2F0dC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5X2NtcC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5X2QyLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3g1MDlfZGVmLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3g1MDlfZXh0LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3g1MDlfbHUuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV9vYmouYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV9yMnguYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV9yZXEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV9zZXQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV90cnMuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV90eHQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveDUwOV92My5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5X3ZmeS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5X3ZwbS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5Y3NldC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5bmFtZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5cnNldC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94NTA5c3BraS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94X2FsZ29yLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfYWxsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfYXR0cmliLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfY3JsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfZXh0ZW4uYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveF9pbmZvLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfbmFtZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94X3BrZXkuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveF9wdWJrZXkuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveF9yZXEuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveF9zaWcuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDkveF9zcGtpLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfdmFsLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5L3hfeDUwOS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOS94X3g1MDlhLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvZXh0X2RhdC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3BjeV9jYWNoZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3BjeV9kYXRhLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvcGN5X2ludC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3BjeV9saWIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My9wY3lfbWFwLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvcGN5X25vZGUuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My9wY3lfdHJlZS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2FrZXkuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19ha2V5YS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2FsdC5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2Jjb25zLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfYml0c3QuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19jb25mLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfY3BvbHMuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19jcmxkLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfZW51bS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2V4dGt1LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfZ2Vubi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2lhNS5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX2luZm8uYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19pbnQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19saWIuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19uY29ucy5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX29jc3AuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19wY2kuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19wY2lhLmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfcGNvbnMuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19wa3UuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19wbWFwcy5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX3Bybi5jJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8veDUwOXYzL3YzX3B1cnAuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M19za2V5LmMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by94NTA5djMvdjNfc3huZXQuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL3g1MDl2My92M191dGwuYycsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2FlYWQuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2Flcy5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvYXJtX2FyY2guaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2FzbjFfbWFjLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9hc24xdC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvYmFzZS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvYmFzZTY0LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2Jsb3dmaXNoLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9ibi5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvYnVmLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9idWZmZXIuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2J5dGVzdHJpbmcuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2Nhc3QuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2NoYWNoYS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvY2lwaGVyLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9jbWFjLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9jb25mLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9jcHUuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvY3VydmUyNTUxOS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvZGVzLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9kaC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvZGlnZXN0LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9kc2EuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2VjLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9lY19rZXkuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2VjZGguaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2VjZHNhLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9lbmdpbmUuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2Vyci5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvZXZwLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9leF9kYXRhLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9oa2RmLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9pc19ib3Jpbmdzc2wuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9saGFzaF9tYWNyb3MuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL21kNC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvbWQ1LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9tZW0uaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL25pZC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvb2JqLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9wZW0uaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3BrY3MxMi5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvcGtjczcuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3BrY3M4LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9wb2x5MTMwNS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvcG9vbC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvcmFuZC5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvcmM0LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9yaXBlbWQuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3JzYS5oJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3NwYW4uaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3NydHAuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC90aHJlYWQuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3R5cGVfY2hlY2suaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3g1MDkuaCcsCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvaW5jbHVkZS9vcGVuc3NsL3g1MDlfdmZ5LmgnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUvb3BlbnNzbC94NTA5djMuaCcsCi0gICAgXSwKLSAgICAnYm9yaW5nc3NsX2lvc19hYXJjaDY0X2ZpbGVzJzogWwotICAgICAgJ2lvcy1hYXJjaDY0L2NyeXB0by9jaGFjaGEvY2hhY2hhLWFybXY4LlMnLAotICAgICAgJ2lvcy1hYXJjaDY0L2NyeXB0by9maXBzbW9kdWxlL2Flc3Y4LWFybXg2NC5TJywKLSAgICAgICdpb3MtYWFyY2g2NC9jcnlwdG8vZmlwc21vZHVsZS9hcm12OC1tb250LlMnLAotICAgICAgJ2lvcy1hYXJjaDY0L2NyeXB0by9maXBzbW9kdWxlL2doYXNodjgtYXJteDY0LlMnLAotICAgICAgJ2lvcy1hYXJjaDY0L2NyeXB0by9maXBzbW9kdWxlL3NoYTEtYXJtdjguUycsCi0gICAgICAnaW9zLWFhcmNoNjQvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhMjU2LWFybXY4LlMnLAotICAgICAgJ2lvcy1hYXJjaDY0L2NyeXB0by9maXBzbW9kdWxlL3NoYTUxMi1hcm12OC5TJywKLSAgICBdLAotICAgICdib3Jpbmdzc2xfaW9zX2FybV9maWxlcyc6IFsKLSAgICAgICdpb3MtYXJtL2NyeXB0by9jaGFjaGEvY2hhY2hhLWFybXY0LlMnLAotICAgICAgJ2lvcy1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvYWVzLWFybXY0LlMnLAotICAgICAgJ2lvcy1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvYWVzdjgtYXJteDMyLlMnLAotICAgICAgJ2lvcy1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvYXJtdjQtbW9udC5TJywKLSAgICAgICdpb3MtYXJtL2NyeXB0by9maXBzbW9kdWxlL2JzYWVzLWFybXY3LlMnLAotICAgICAgJ2lvcy1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvZ2hhc2gtYXJtdjQuUycsCi0gICAgICAnaW9zLWFybS9jcnlwdG8vZmlwc21vZHVsZS9naGFzaHY4LWFybXgzMi5TJywKLSAgICAgICdpb3MtYXJtL2NyeXB0by9maXBzbW9kdWxlL3NoYTEtYXJtdjQtbGFyZ2UuUycsCi0gICAgICAnaW9zLWFybS9jcnlwdG8vZmlwc21vZHVsZS9zaGEyNTYtYXJtdjQuUycsCi0gICAgICAnaW9zLWFybS9jcnlwdG8vZmlwc21vZHVsZS9zaGE1MTItYXJtdjQuUycsCi0gICAgXSwKLSAgICAnYm9yaW5nc3NsX2xpbnV4X2FhcmNoNjRfZmlsZXMnOiBbCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NwdS1hYXJjaDY0LWxpbnV4LmMnLCAjIExpbnV4IGFybTY0IG9ubHkgZmlsZQotICAgICAgJ2xpbnV4LWFhcmNoNjQvY3J5cHRvL2NoYWNoYS9jaGFjaGEtYXJtdjguUycsCi0gICAgICAnbGludXgtYWFyY2g2NC9jcnlwdG8vZmlwc21vZHVsZS9hZXN2OC1hcm14NjQuUycsCi0gICAgICAnbGludXgtYWFyY2g2NC9jcnlwdG8vZmlwc21vZHVsZS9hcm12OC1tb250LlMnLAotICAgICAgJ2xpbnV4LWFhcmNoNjQvY3J5cHRvL2ZpcHNtb2R1bGUvZ2hhc2h2OC1hcm14NjQuUycsCi0gICAgICAnbGludXgtYWFyY2g2NC9jcnlwdG8vZmlwc21vZHVsZS9zaGExLWFybXY4LlMnLAotICAgICAgJ2xpbnV4LWFhcmNoNjQvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhMjU2LWFybXY4LlMnLAotICAgICAgJ2xpbnV4LWFhcmNoNjQvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhNTEyLWFybXY4LlMnLAotICAgIF0sCi0gICAgJ2JvcmluZ3NzbF9saW51eF9hcm1fZmlsZXMnOiBbCi0gICAgICAnPChib3Jpbmdzc2xfcm9vdCkvY3J5cHRvL2NwdS1hcm0tbGludXguYycsICMgTGludXggYXJtIG9ubHkgZmlsZQotICAgICAgJ2xpbnV4LWFybS9jcnlwdG8vY2hhY2hhL2NoYWNoYS1hcm12NC5TJywKLSAgICAgICdsaW51eC1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvYWVzLWFybXY0LlMnLAotICAgICAgJ2xpbnV4LWFybS9jcnlwdG8vZmlwc21vZHVsZS9hZXN2OC1hcm14MzIuUycsCi0gICAgICAnbGludXgtYXJtL2NyeXB0by9maXBzbW9kdWxlL2FybXY0LW1vbnQuUycsCi0gICAgICAnbGludXgtYXJtL2NyeXB0by9maXBzbW9kdWxlL2JzYWVzLWFybXY3LlMnLAotICAgICAgJ2xpbnV4LWFybS9jcnlwdG8vZmlwc21vZHVsZS9naGFzaC1hcm12NC5TJywKLSAgICAgICdsaW51eC1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvZ2hhc2h2OC1hcm14MzIuUycsCi0gICAgICAnbGludXgtYXJtL2NyeXB0by9maXBzbW9kdWxlL3NoYTEtYXJtdjQtbGFyZ2UuUycsCi0gICAgICAnbGludXgtYXJtL2NyeXB0by9maXBzbW9kdWxlL3NoYTI1Ni1hcm12NC5TJywKLSAgICAgICdsaW51eC1hcm0vY3J5cHRvL2ZpcHNtb2R1bGUvc2hhNTEyLWFybXY0LlMnLAotICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2NyeXB0by9jdXJ2ZTI1NTE5L2FzbS94MjU1MTktYXNtLWFybS5TJywKLSAgICAgICc8KGJvcmluZ3NzbF9yb290KS9jcnlwdG8vcG9seTEzMDUvcG9seTEzMDVfYXJtX2FzbS5TJywKLSAgICBdLAotICAgICdib3Jpbmdzc2xfbGludXhfcHBjNjRsZV9maWxlcyc6IFsKLSAgICAgICdsaW51eC1wcGM2NGxlL2NyeXB0by9maXBzbW9kdWxlL2Flc3A4LXBwYy5TJywKLSAgICAgICdsaW51eC1wcGM2NGxlL2NyeXB0by9maXBzbW9kdWxlL2doYXNocDgtcHBjLlMnLAotICAgIF0sCi0gICAgJ2JvcmluZ3NzbF9saW51eF94ODZfZmlsZXMnOiBbCi0gICAgICAnbGludXgteDg2L2NyeXB0by9jaGFjaGEvY2hhY2hhLXg4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzLTU4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzbmkteDg2LlMnLAotICAgICAgJ2xpbnV4LXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9ibi01ODYuUycsCi0gICAgICAnbGludXgteDg2L2NyeXB0by9maXBzbW9kdWxlL2NvLTU4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvZ2hhc2gteDg2LlMnLAotICAgICAgJ2xpbnV4LXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9tZDUtNTg2LlMnLAotICAgICAgJ2xpbnV4LXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9zaGExLTU4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhMjU2LTU4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhNTEyLTU4Ni5TJywKLSAgICAgICdsaW51eC14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvdnBhZXMteDg2LlMnLAotICAgICAgJ2xpbnV4LXg4Ni9jcnlwdG8vZmlwc21vZHVsZS94ODYtbW9udC5TJywKLSAgICBdLAotICAgICdib3Jpbmdzc2xfbGludXhfeDg2XzY0X2ZpbGVzJzogWwotICAgICAgJ2xpbnV4LXg4Nl82NC9jcnlwdG8vY2hhY2hhL2NoYWNoYS14ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9jaXBoZXJfZXh0cmEvYWVzMTI4Z2Ntc2l2LXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2NpcGhlcl9leHRyYS9jaGFjaGEyMF9wb2x5MTMwNV94ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL2Flcy14ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL2Flc25pLWdjbS14ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL2Flc25pLXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYnNhZXMteDg2XzY0LlMnLAotICAgICAgJ2xpbnV4LXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9naGFzaC14ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL21kNS14ODZfNjQuUycsCi0gICAgICAnbGludXgteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3AyNTYteDg2XzY0LWFzbS5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvcmRyYW5kLXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvcnNhei1hdngyLlMnLAotICAgICAgJ2xpbnV4LXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9zaGExLXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhMjU2LXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhNTEyLXg4Nl82NC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvdnBhZXMteDg2XzY0LlMnLAotICAgICAgJ2xpbnV4LXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS94ODZfNjQtbW9udC5TJywKLSAgICAgICdsaW51eC14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUveDg2XzY0LW1vbnQ1LlMnLAotICAgIF0sCi0gICAgJ2JvcmluZ3NzbF9tYWNfeDg2X2ZpbGVzJzogWwotICAgICAgJ21hYy14ODYvY3J5cHRvL2NoYWNoYS9jaGFjaGEteDg2LlMnLAotICAgICAgJ21hYy14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzLTU4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL2Flc25pLXg4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL2JuLTU4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL2NvLTU4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL2doYXNoLXg4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL21kNS01ODYuUycsCi0gICAgICAnbWFjLXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9zaGExLTU4Ni5TJywKLSAgICAgICdtYWMteDg2L2NyeXB0by9maXBzbW9kdWxlL3NoYTI1Ni01ODYuUycsCi0gICAgICAnbWFjLXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9zaGE1MTItNTg2LlMnLAotICAgICAgJ21hYy14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvdnBhZXMteDg2LlMnLAotICAgICAgJ21hYy14ODYvY3J5cHRvL2ZpcHNtb2R1bGUveDg2LW1vbnQuUycsCi0gICAgXSwKLSAgICAnYm9yaW5nc3NsX21hY194ODZfNjRfZmlsZXMnOiBbCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vY2hhY2hhL2NoYWNoYS14ODZfNjQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vY2lwaGVyX2V4dHJhL2FlczEyOGdjbXNpdi14ODZfNjQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vY2lwaGVyX2V4dHJhL2NoYWNoYTIwX3BvbHkxMzA1X3g4Nl82NC5TJywKLSAgICAgICdtYWMteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL2Flcy14ODZfNjQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9hZXNuaS1nY20teDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzbmkteDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYnNhZXMteDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvZ2hhc2gteDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvbWQ1LXg4Nl82NC5TJywKLSAgICAgICdtYWMteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3AyNTYteDg2XzY0LWFzbS5TJywKLSAgICAgICdtYWMteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3JkcmFuZC14ODZfNjQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9yc2F6LWF2eDIuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9zaGExLXg4Nl82NC5TJywKLSAgICAgICdtYWMteDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3NoYTI1Ni14ODZfNjQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9zaGE1MTIteDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvdnBhZXMteDg2XzY0LlMnLAotICAgICAgJ21hYy14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUveDg2XzY0LW1vbnQuUycsCi0gICAgICAnbWFjLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS94ODZfNjQtbW9udDUuUycsCi0gICAgXSwKLSAgICAnYm9yaW5nc3NsX3dpbl94ODZfZmlsZXMnOiBbCi0gICAgICAnd2luLXg4Ni9jcnlwdG8vY2hhY2hhL2NoYWNoYS14ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL2Flcy01ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL2Flc25pLXg4Ni5hc20nLAotICAgICAgJ3dpbi14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvYm4tNTg2LmFzbScsCi0gICAgICAnd2luLXg4Ni9jcnlwdG8vZmlwc21vZHVsZS9jby01ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL2doYXNoLXg4Ni5hc20nLAotICAgICAgJ3dpbi14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvbWQ1LTU4Ni5hc20nLAotICAgICAgJ3dpbi14ODYvY3J5cHRvL2ZpcHNtb2R1bGUvc2hhMS01ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL3NoYTI1Ni01ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL3NoYTUxMi01ODYuYXNtJywKLSAgICAgICd3aW4teDg2L2NyeXB0by9maXBzbW9kdWxlL3ZwYWVzLXg4Ni5hc20nLAotICAgICAgJ3dpbi14ODYvY3J5cHRvL2ZpcHNtb2R1bGUveDg2LW1vbnQuYXNtJywKLSAgICBdLAotICAgICdib3Jpbmdzc2xfd2luX3g4Nl82NF9maWxlcyc6IFsKLSAgICAgICd3aW4teDg2XzY0L2NyeXB0by9jaGFjaGEvY2hhY2hhLXg4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2NpcGhlcl9leHRyYS9hZXMxMjhnY21zaXYteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vY2lwaGVyX2V4dHJhL2NoYWNoYTIwX3BvbHkxMzA1X3g4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzLXg4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzbmktZ2NtLXg4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvYWVzbmkteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9ic2Flcy14ODZfNjQuYXNtJywKLSAgICAgICd3aW4teDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL2doYXNoLXg4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvbWQ1LXg4Nl82NC5hc20nLAotICAgICAgJ3dpbi14ODZfNjQvY3J5cHRvL2ZpcHNtb2R1bGUvcDI1Ni14ODZfNjQtYXNtLmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9yZHJhbmQteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9yc2F6LWF2eDIuYXNtJywKLSAgICAgICd3aW4teDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3NoYTEteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9zaGEyNTYteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS9zaGE1MTIteDg2XzY0LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS92cGFlcy14ODZfNjQuYXNtJywKLSAgICAgICd3aW4teDg2XzY0L2NyeXB0by9maXBzbW9kdWxlL3g4Nl82NC1tb250LmFzbScsCi0gICAgICAnd2luLXg4Nl82NC9jcnlwdG8vZmlwc21vZHVsZS94ODZfNjQtbW9udDUuYXNtJywKLSAgICBdLAotICB9Ci19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsX3Rvb2wuZ3lwIGIvdGhpcmRfcGFydHkvYm9yaW5nc3NsL2JvcmluZ3NzbF90b29sLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5N2IyMi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsX3Rvb2wuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotewotICAndmFyaWFibGVzJzogewotICAgICdib3Jpbmdzc2xfcm9vdCUnOiAnPChERVBUSCkvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYycsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcnlwdG9fdG9vbCcsCi0gICAgICAndHlwZSc6ICc8KGZpbmFsX2V4ZWN1dGFibGVfdHlwZSknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL2luY2x1ZGUnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnT1BFTlNTTF9OT19TT0NLJwotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3Rvb2wvYXJncy5jYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS90b29sL2NpcGhlcnMuY2MnLAotICAgICAgICAnPChib3Jpbmdzc2xfcm9vdCkvdG9vbC9jb25zdC5jYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS90b29sL2RpZ2VzdC5jYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS90b29sL2ZpbGUuY2MnLAotICAgICAgICAnPChib3Jpbmdzc2xfcm9vdCkvdG9vbC9nZW5lcmF0ZV9lZDI1NTE5LmNjJywKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3Rvb2wvZ2VucnNhLmNjJywKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3Rvb2wvcGtjczEyLmNjJywKLSAgICAgICAgJzwoYm9yaW5nc3NsX3Jvb3QpL3Rvb2wvcmFuZC5jYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS90b29sL3NpZ24uY2MnLAotICAgICAgICAnPChib3Jpbmdzc2xfcm9vdCkvdG9vbC9zcGVlZC5jYycsCi0gICAgICAgICc8KGJvcmluZ3NzbF9yb290KS90b29sL3Rvb2wuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnIDogWwotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvYm9yaW5nc3NsLmd5cDpjcnlwdG8nLAotICAgICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvc3RhcmJvYXJkLmd5cDpzdGFyYm9hcmQnCi0gICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3J5cHRvX3Rvb2xfZGVwbG95JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NyeXB0b190b29sJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2NyeXB0b190b29sJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICcuLi8uLi9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Jyb3RsaS9icm8uZ3lwaSBiL3RoaXJkX3BhcnR5L2Jyb3RsaS9icm8uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxNmI5Mi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9icm90bGkvYnJvLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFVzYWdlOgotIyB7Ci0jICAgJ3RhcmdldF9uYW1lJzogJ3lvdXJfdGFyZ2V0X25hbWUnLAotIyAgICd0eXBlJzogJ25vbmUnLAotIyAgICdhY3Rpb25zJzogWwotIyAgICAgewotIyAgICAgICAndmFyaWFibGVzJzogewotIyAgICAgICAgICdpbnB1dF9maWxlJzogJ2ZpbGUvdG8vY29tcHJlc3MnLAotIyAgICAgICAgICdvdXRwdXRfZmlsZSc6ICdmaWxlL3RvL3B1dC9jb21wcmVzc2VkJywKLSMgICAgICAgfSwKLSMgICAgICAgJ2luY2x1ZGVzJzogWycuLi90aGlyZF9wYXJ0eS9icm90bGkvYnJvLmd5cGknXSwKLSMgICAgIH0KLSMgICBdLAotIyAgICdkZXBlbmRlbmNpZXMnOiBbCi0jICAgICAncGF0aC90bzpidWlsZHNfZmlsZV90b19jb21wcmVzcycKLSMgICBdLAotIyB9LAotCi17Ci0gICdhY3Rpb25fbmFtZSc6ICdnZW5icm8nLAotICAndmFyaWFibGVzJzogewotICAgICdicm8nOiAnPChQUk9EVUNUX0RJUikvPChFWEVDVVRBQkxFX1BSRUZJWClicm88KEVYRUNVVEFCTEVfU1VGRklYKScsCi0gIH0sCi0gICdpbnB1dHMnOiBbCi0gICAgJzwoYnJvKScsCi0gICAgJzwoaW5wdXRfZmlsZSknLAotICBdLAotICAnb3V0cHV0cyc6IFsKLSAgICAnPChvdXRwdXRfZmlsZSknLAotICBdLAotICAnYWN0aW9uJzogWwotICAgICc8KGJybyknLAotICAgICctLWZvcmNlJywKLSAgICAnLS1pbnB1dCcsCi0gICAgJzwoaW5wdXRfZmlsZSknLAotICAgICctLW91dHB1dCcsCi0gICAgJzwob3V0cHV0X2ZpbGUpJywKLSAgXSwKLSAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYnJvdGxpL2Jyb3RsaS5neXA6YnJvI2hvc3QnLAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvYnJvdGxpL2Jyb3RsaS5neXAgYi90aGlyZF9wYXJ0eS9icm90bGkvYnJvdGxpLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMxYjVmZi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9icm90bGkvYnJvdGxpLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE5NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdoZWFkZXJzJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYy9pbmNsdWRlL2Jyb3RsaS9kZWNvZGUuaCcsCi0gICAgICAgICdjL2luY2x1ZGUvYnJvdGxpL2VuY29kZS5oJywKLSAgICAgICAgJ2MvaW5jbHVkZS9icm90bGkvcG9ydC5oJywKLSAgICAgICAgJ2MvaW5jbHVkZS9icm90bGkvdHlwZXMuaCcsCi0gICAgICBdLAotICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvbW1vbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnYy9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2MvY29tbW9uL2NvbnN0YW50cy5oJywKLSAgICAgICAgJ2MvY29tbW9uL2RpY3Rpb25hcnkuYycsCi0gICAgICAgICdjL2NvbW1vbi9kaWN0aW9uYXJ5LmgnLAotICAgICAgICAnYy9jb21tb24vcGxhdGZvcm0uaCcsCi0gICAgICAgICdjL2NvbW1vbi92ZXJzaW9uLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdoZWFkZXJzJywKLSAgICAgIF0sCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29tbW9uX25vX2RpY3Rpb25hcnlfZGF0YScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnYy9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2MvY29tbW9uL2NvbnN0YW50cy5oJywKLSAgICAgICAgJ2MvY29tbW9uL2RpY3Rpb25hcnkuYycsCi0gICAgICAgICdjL2NvbW1vbi9kaWN0aW9uYXJ5LmgnLAotICAgICAgICAnYy9jb21tb24vcGxhdGZvcm0uaCcsCi0gICAgICAgICdjL2NvbW1vbi92ZXJzaW9uLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdoZWFkZXJzJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0JST1RMSV9FWFRFUk5BTF9ESUNUSU9OQVJZX0RBVEEnLAotICAgICAgXSwKLSAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkZWMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJ2MvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjL2RlYy9iaXRfcmVhZGVyLmMnLAotICAgICAgICAnYy9kZWMvYml0X3JlYWRlci5oJywKLSAgICAgICAgJ2MvZGVjL2NvbnRleHQuaCcsCi0gICAgICAgICdjL2RlYy9kZWNvZGUuYycsCi0gICAgICAgICdjL2RlYy9odWZmbWFuLmMnLAotICAgICAgICAnYy9kZWMvaHVmZm1hbi5oJywKLSAgICAgICAgJ2MvZGVjL3ByZWZpeC5oJywKLSAgICAgICAgJ2MvZGVjL3N0YXRlLmMnLAotICAgICAgICAnYy9kZWMvc3RhdGUuaCcsCi0gICAgICAgICdjL2RlYy90cmFuc2Zvcm0uaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2hlYWRlcnMnLAotICAgICAgICAnY29tbW9uJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydvc19wb3NpeD09MSBhbmQgKHRhcmdldF9hcmNoPT0iYXJtIiBvciB0YXJnZXRfYXJjaD09ImFybXY3IiBvciB0YXJnZXRfYXJjaD09ImFybTY0IiknLCB7Ci0gICAgICAgICAgJ2NmbGFncyEnOiBbJy1PcyddLAotICAgICAgICAgICdjZmxhZ3MnOiBbJy1PMiddLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZGVjX25vX2RpY3Rpb25hcnlfZGF0YScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnYy9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2MvZGVjL2JpdF9yZWFkZXIuYycsCi0gICAgICAgICdjL2RlYy9iaXRfcmVhZGVyLmgnLAotICAgICAgICAnYy9kZWMvY29udGV4dC5oJywKLSAgICAgICAgJ2MvZGVjL2RlY29kZS5jJywKLSAgICAgICAgJ2MvZGVjL2h1ZmZtYW4uYycsCi0gICAgICAgICdjL2RlYy9odWZmbWFuLmgnLAotICAgICAgICAnYy9kZWMvcHJlZml4LmgnLAotICAgICAgICAnYy9kZWMvc3RhdGUuYycsCi0gICAgICAgICdjL2RlYy9zdGF0ZS5oJywKLSAgICAgICAgJ2MvZGVjL3RyYW5zZm9ybS5oJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaGVhZGVycycsCi0gICAgICAgICdjb21tb25fbm9fZGljdGlvbmFyeV9kYXRhJywKLSAgICAgIF0sCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnYnJvJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2hlYWRlcnMnLAotICAgICAgICAnY29tbW9uJywKLSAgICAgICAgJ2RlYycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJ2MvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjL2VuYy9iYWNrd2FyZF9yZWZlcmVuY2VzLmMnLAotICAgICAgICAnYy9lbmMvYmFja3dhcmRfcmVmZXJlbmNlcy5oJywKLSAgICAgICAgJ2MvZW5jL2JhY2t3YXJkX3JlZmVyZW5jZXNfaHEuYycsCi0gICAgICAgICdjL2VuYy9iYWNrd2FyZF9yZWZlcmVuY2VzX2hxLmgnLAotICAgICAgICAnYy9lbmMvYmFja3dhcmRfcmVmZXJlbmNlc19pbmMuaCcsCi0gICAgICAgICdjL2VuYy9iaXRfY29zdC5jJywKLSAgICAgICAgJ2MvZW5jL2JpdF9jb3N0LmgnLAotICAgICAgICAnYy9lbmMvYml0X2Nvc3RfaW5jLmgnLAotICAgICAgICAnYy9lbmMvYmxvY2tfZW5jb2Rlcl9pbmMuaCcsCi0gICAgICAgICdjL2VuYy9ibG9ja19zcGxpdHRlci5jJywKLSAgICAgICAgJ2MvZW5jL2Jsb2NrX3NwbGl0dGVyLmgnLAotICAgICAgICAnYy9lbmMvYmxvY2tfc3BsaXR0ZXJfaW5jLmgnLAotICAgICAgICAnYy9lbmMvYnJvdGxpX2JpdF9zdHJlYW0uYycsCi0gICAgICAgICdjL2VuYy9icm90bGlfYml0X3N0cmVhbS5oJywKLSAgICAgICAgJ2MvZW5jL2NsdXN0ZXIuYycsCi0gICAgICAgICdjL2VuYy9jbHVzdGVyLmgnLAotICAgICAgICAnYy9lbmMvY2x1c3Rlcl9pbmMuaCcsCi0gICAgICAgICdjL2VuYy9jb21tYW5kLmgnLAotICAgICAgICAnYy9lbmMvY29tcHJlc3NfZnJhZ21lbnQuYycsCi0gICAgICAgICdjL2VuYy9jb21wcmVzc19mcmFnbWVudC5oJywKLSAgICAgICAgJ2MvZW5jL2NvbXByZXNzX2ZyYWdtZW50X3R3b19wYXNzLmMnLAotICAgICAgICAnYy9lbmMvY29tcHJlc3NfZnJhZ21lbnRfdHdvX3Bhc3MuaCcsCi0gICAgICAgICdjL2VuYy9jb250ZXh0LmgnLAotICAgICAgICAnYy9lbmMvZGljdGlvbmFyeV9oYXNoLmMnLAotICAgICAgICAnYy9lbmMvZGljdGlvbmFyeV9oYXNoLmgnLAotICAgICAgICAnYy9lbmMvZW5jb2RlLmMnLAotICAgICAgICAnYy9lbmMvZW50cm9weV9lbmNvZGUuYycsCi0gICAgICAgICdjL2VuYy9lbnRyb3B5X2VuY29kZS5oJywKLSAgICAgICAgJ2MvZW5jL2VudHJvcHlfZW5jb2RlX3N0YXRpYy5oJywKLSAgICAgICAgJ2MvZW5jL2Zhc3RfbG9nLmgnLAotICAgICAgICAnYy9lbmMvZmluZF9tYXRjaF9sZW5ndGguaCcsCi0gICAgICAgICdjL2VuYy9oYXNoX2ZvcmdldGZ1bF9jaGFpbl9pbmMuaCcsCi0gICAgICAgICdjL2VuYy9oYXNoLmgnLAotICAgICAgICAnYy9lbmMvaGFzaF9sb25nZXN0X21hdGNoNjRfaW5jLmgnLAotICAgICAgICAnYy9lbmMvaGFzaF9sb25nZXN0X21hdGNoX2luYy5oJywKLSAgICAgICAgJ2MvZW5jL2hhc2hfbG9uZ2VzdF9tYXRjaF9xdWlja2x5X2luYy5oJywKLSAgICAgICAgJ2MvZW5jL2hhc2hfdG9fYmluYXJ5X3RyZWVfaW5jLmgnLAotICAgICAgICAnYy9lbmMvaGlzdG9ncmFtLmMnLAotICAgICAgICAnYy9lbmMvaGlzdG9ncmFtLmgnLAotICAgICAgICAnYy9lbmMvaGlzdG9ncmFtX2luYy5oJywKLSAgICAgICAgJ2MvZW5jL2xpdGVyYWxfY29zdC5jJywKLSAgICAgICAgJ2MvZW5jL2xpdGVyYWxfY29zdC5oJywKLSAgICAgICAgJ2MvZW5jL21lbW9yeS5jJywKLSAgICAgICAgJ2MvZW5jL21lbW9yeS5oJywKLSAgICAgICAgJ2MvZW5jL21ldGFibG9jay5jJywKLSAgICAgICAgJ2MvZW5jL21ldGFibG9jay5oJywKLSAgICAgICAgJ2MvZW5jL21ldGFibG9ja19pbmMuaCcsCi0gICAgICAgICdjL2VuYy9wYXJhbXMuaCcsCi0gICAgICAgICdjL2VuYy9wcmVmaXguaCcsCi0gICAgICAgICdjL2VuYy9xdWFsaXR5LmgnLAotICAgICAgICAnYy9lbmMvcmluZ2J1ZmZlci5oJywKLSAgICAgICAgJ2MvZW5jL3N0YXRpY19kaWN0LmMnLAotICAgICAgICAnYy9lbmMvc3RhdGljX2RpY3QuaCcsCi0gICAgICAgICdjL2VuYy9zdGF0aWNfZGljdF9sdXQuaCcsCi0gICAgICAgICdjL2VuYy91dGY4X3V0aWwuYycsCi0gICAgICAgICdjL2VuYy91dGY4X3V0aWwuaCcsCi0gICAgICAgICdjL2VuYy93cml0ZV9iaXRzLmgnLAotICAgICAgICAnYy90b29scy9icm90bGkuYycsCi0gICAgICBdLAotICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiIgYW5kIE1TVlNfVkVSU0lPTiA9PSAiMjAxNSInLCB7Ci0gICAgICAgICAgIyBEaXNhYmxpbmcgInJlc3VsdCBvZiAzMi1iaXQgc2hpZnQgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gNjQgYml0cyIsCi0gICAgICAgICAgIyBjYXVzZWQgYnkgY29kZSBsaWtlOiBmb28gfD0gKDEgPDwgaSk7ICAgLy8gd2FybmluZyA0MzM0Ci0gICAgICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbIDQzMzQsIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9Ci0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9CVUlMRC5nbiBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL0JVSUxELmduCmluZGV4IGQ1YzE1OGMuLmNlOTVmNTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL0JVSUxELmduCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL0JVSUxELmduCkBAIC0xLDQ2MyArMSwyNTEgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyMgQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi1pbXBvcnQoIi8vYnVpbGQvYnVpbGRmbGFnX2hlYWRlci5nbmkiKQotaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9hbmRyb2lkL2NvbmZpZy5nbmkiKQotaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9hcm0uZ25pIikKLWltcG9ydCgiLy9idWlsZC9jb25maWcvY2hyb21lY2FzdF9idWlsZC5nbmkiKQotaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9mZWF0dXJlcy5nbmkiKQotaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9saW51eC9wa2dfY29uZmlnLmduaSIpCi1pbXBvcnQoIi8vYnVpbGQvY29uZmlnL3VpLmduaSIpCi1pbXBvcnQoIi8vbWVkaWEvY2RtL2xpYnJhcnlfY2RtL2NkbV9wYXRocy5nbmkiKQotaW1wb3J0KCIvL21lZGlhL21lZGlhX29wdGlvbnMuZ25pIikKLWltcG9ydCgiLy90ZXN0aW5nL2xpYmZ1enplci9mdXp6ZXJfdGVzdC5nbmkiKQotaW1wb3J0KCIvL3Rlc3RpbmcvdGVzdC5nbmkiKQotaW1wb3J0KCIvL3RoaXJkX3BhcnR5L2ZmbXBlZy9mZm1wZWdfb3B0aW9ucy5nbmkiKQotCi1idWlsZGZsYWdfaGVhZGVyKCJtZWRpYV9idWlsZGZsYWdzIikgewotICBoZWFkZXIgPSAibWVkaWFfYnVpbGRmbGFncy5oIgotCi0gIGZsYWdzID0gWwotICAgICJBTFRFUk5BVEVfQ0RNX1NUT1JBR0VfSURfS0VZPVwiJGFsdGVybmF0ZV9jZG1fc3RvcmFnZV9pZF9rZXlcIiIsCi0gICAgIkNETV9QTEFURk9STV9TUEVDSUZJQ19QQVRIPVwiJGNkbV9wbGF0Zm9ybV9zcGVjaWZpY19wYXRoXCIiLAotICAgICJFTkFCTEVfUExBVEZPUk1fQUMzX0VBQzNfQVVESU89JGVuYWJsZV9wbGF0Zm9ybV9hYzNfZWFjM19hdWRpbyIsCi0gICAgIkVOQUJMRV9DQVNUX0FVRElPX1JFTkRFUkVSPSRlbmFibGVfY2FzdF9hdWRpb19yZW5kZXJlciIsCi0gICAgIkVOQUJMRV9DRE1fSE9TVF9WRVJJRklDQVRJT049JGVuYWJsZV9jZG1faG9zdF92ZXJpZmljYXRpb24iLAotICAgICJFTkFCTEVfQ0RNX1NUT1JBR0VfSUQ9JGVuYWJsZV9jZG1fc3RvcmFnZV9pZCIsCi0gICAgIkVOQUJMRV9EQVYxRF9ERUNPREVSPSRlbmFibGVfZGF2MWRfZGVjb2RlciIsCi0gICAgIkVOQUJMRV9BVjFfREVDT0RFUj0kZW5hYmxlX2F2MV9kZWNvZGVyIiwKLSAgICAiRU5BQkxFX1BMQVRGT1JNX0RPTEJZX1ZJU0lPTj0kZW5hYmxlX3BsYXRmb3JtX2RvbGJ5X3Zpc2lvbiIsCi0gICAgIkVOQUJMRV9GRk1QRUc9JG1lZGlhX3VzZV9mZm1wZWciLAotICAgICJFTkFCTEVfRkZNUEVHX1ZJREVPX0RFQ09ERVJTPSRlbmFibGVfZmZtcGVnX3ZpZGVvX2RlY29kZXJzIiwKLSAgICAiRU5BQkxFX1BMQVRGT1JNX0hFVkM9JGVuYWJsZV9wbGF0Zm9ybV9oZXZjIiwKLSAgICAiRU5BQkxFX1BMQVRGT1JNX0hFVkNfREVDT0RJTkc9JGVuYWJsZV9wbGF0Zm9ybV9oZXZjX2RlY29kaW5nIiwKLSAgICAiRU5BQkxFX1BMQVRGT1JNX0VOQ1JZUFRFRF9IRVZDPSRlbmFibGVfcGxhdGZvcm1fZW5jcnlwdGVkX2hldmMiLAotICAgICJFTkFCTEVfSExTX1NBTVBMRV9BRVM9JGVuYWJsZV9obHNfc2FtcGxlX2FlcyIsCi0gICAgIkVOQUJMRV9MSUJHQVYxX0RFQ09ERVI9JGVuYWJsZV9saWJnYXYxX2RlY29kZXIiLAotICAgICJFTkFCTEVfTElCUkFSWV9DRE1TPSRlbmFibGVfbGlicmFyeV9jZG1zIiwKLSAgICAiRU5BQkxFX0xJQlZQWD0kbWVkaWFfdXNlX2xpYnZweCIsCi0gICAgIkVOQUJMRV9MT0dHSU5HX09WRVJSSURFPSRlbmFibGVfbG9nZ2luZ19vdmVycmlkZSIsCi0gICAgIkVOQUJMRV9NRURJQV9EUk1fU1RPUkFHRT0kZW5hYmxlX21lZGlhX2RybV9zdG9yYWdlIiwKLSAgICAiRU5BQkxFX01FRElBX1JFTU9USU5HPSRlbmFibGVfbWVkaWFfcmVtb3RpbmciLAotICAgICJFTkFCTEVfTUVESUFfUkVNT1RJTkdfUlBDPSRlbmFibGVfbWVkaWFfcmVtb3RpbmdfcnBjIiwKLSAgICAiRU5BQkxFX09QRU5IMjY0PSRtZWRpYV91c2Vfb3BlbmgyNjQiLAotICAgICJFTkFCTEVfUExBVEZPUk1fTVBFR19IX0FVRElPPSRlbmFibGVfcGxhdGZvcm1fbXBlZ19oX2F1ZGlvIiwKLSAgICAiRU5BQkxFX01TRV9NUEVHMlRTX1NUUkVBTV9QQVJTRVI9JGVuYWJsZV9tc2VfbXBlZzJ0c19zdHJlYW1fcGFyc2VyIiwKLSAgICAiRU5BQkxFX0NBU1RfU1RSRUFNSU5HX1JFTkRFUkVSPSRlbmFibGVfY2FzdF9zdHJlYW1pbmdfcmVuZGVyZXIiLAotICAgICJVU0VfQ0hST01FT1NfTUVESUFfQUNDRUxFUkFUSU9OPSR1c2VfdmFhcGl8fCR1c2VfdjRsMl9jb2RlYyIsCi0gICAgIlVTRV9DSFJPTUVPU19QUk9URUNURURfQVYxPSR1c2VfY2hyb21lb3NfcHJvdGVjdGVkX2F2MSIsCi0gICAgIlVTRV9DSFJPTUVPU19QUk9URUNURURfTUVESUE9JHVzZV9jaHJvbWVvc19wcm90ZWN0ZWRfbWVkaWEiLAotICAgICJVU0VfUFJPUFJJRVRBUllfQ09ERUNTPSRwcm9wcmlldGFyeV9jb2RlY3MiLAotICBdCi19Ci0KLWlmIChwcm9wcmlldGFyeV9jb2RlY3MgJiYgbWVkaWFfdXNlX2ZmbXBlZykgewotICBhc3NlcnQoCi0gICAgICBmZm1wZWdfYnJhbmRpbmcgIT0gIkNocm9taXVtIiwKLSAgICAgICJwcm9wcmlldGFyeSBjb2RlY3MgYW5kIGZmbXBlZ19icmFuZGluZyBzZXQgdG8gQ2hyb21pdW0gYXJlIGluY29tcGF0aWJsZSIpCi19Ci0KLSMgQ29tbW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRhcmdldHMgaW4gdGhlIG1lZGlhIGRpcmVjdG9yeTsgdGhlc2UgbXVzdCBub3QgYmUKLSMgZXhwb3J0ZWQgc2luY2UgdGhpbmdzIGxpa2UgVVNFX05FT04gYW5kIFVTRV9DUkFTIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzCi0jIGVsc2V3aGVyZSBpbiB0aGUgY29kZSBiYXNlLgogY29uZmlnKCJtZWRpYV9jb25maWciKSB7Ci0gIGRlZmluZXMgPSBbXQotICBpZiAoY3VycmVudF9jcHUgPT0gImFybTY0IiB8fCAoY3VycmVudF9jcHUgPT0gImFybSIgJiYgYXJtX3VzZV9uZW9uKSkgewotICAgIGRlZmluZXMgKz0gWyAiVVNFX05FT04iIF0KKyAgaWYgKGlzX3dpbikgeworICAgIGNmbGFncyA9IFsKKyAgICAgICIvd2Q0MjY3IiwgICMgQ29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICd0eXBlJywgcG9zc2libGUgbG9zcyBvZiBkYXRhLgorICAgICAgIi93ZDQ3MTUiLCAgIyBOb3QgYWxsIGNvbnRyb2wgcGF0aHMgcmV0dXJuIGEgdmFsdWUuCisgICAgICAjIENvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAnaW50JyByZXF1aXJlcyBhIG5hcnJvd2luZyBjb252ZXJzaW9uLgorICAgICAgIi93ZDQ4MzgiLAorICAgIF0KKyAgfSBlbHNlIHsKKyAgICBjZmxhZ3NfY2MgPSBbCisgICAgICAiLVduby1jb252ZXJzaW9uIiwKKyAgICAgICItV25vLXVudXNlZC1wYXJhbWV0ZXIiLAorICAgICAgIi1Xbm8tdW51c2VkLXZhcmlhYmxlIiwKKyAgICBdCiAgIH0KLSAgaWYgKHVzZV9wdWxzZWF1ZGlvKSB7Ci0gICAgZGVmaW5lcyArPSBbICJVU0VfUFVMU0VBVURJTyIgXQotICAgIGlmICghbGlua19wdWxzZWF1ZGlvKSB7Ci0gICAgICBkZWZpbmVzICs9IFsgIkRMT1BFTl9QVUxTRUFVRElPIiBdCi0gICAgfQotICB9Ci0gIGlmICh1c2VfY3JhcykgewotICAgIGRlZmluZXMgKz0gWyAiVVNFX0NSQVMiIF0KLSAgfQorCisgIGRlZmluZXMgPSBbICJNRURJQV9JTVBMRU1FTlRBVElPTiIgXQogfQogCi0jIEludGVybmFsIGdyb3VwaW5nIG9mIHRoZSBjb25maWdzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHN1Yi1mb2xkZXJzIGhhdmluZyB0aGVpcgotIyBvd24gQlVJTEQuZ24gZmlsZXM7IG9ubHkgdGFyZ2V0cyB3aGljaCByb2xsIHVwIGludG8gdGhlICJtZWRpYSIgdGFyZ2V0IHNob3VsZAotIyBpbmNsdWRlIHRoaXMgY29uZmlnLiBJLmUuLCBub3QgInRlc3Rfc3VwcG9ydCIgb3IgInVuaXRfdGVzdHMiIHRhcmdldHMuCi0jCi0jIFdpdGhvdXQgdGhlc2UgY29uZmlncyBoYXZpbmcgaW5kaXZpZHVhbCBzdWItZm9sZGVycyB0YWtlIGEgLy9tZWRpYS9iYXNlIERFUAotIyAob3Igb3RoZXJzKSBjYW4geWllbGQgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgYW5kIGV4cG9ydGVkIHN5bWJvbHMgb24gV2luZG93czoKLSMKLSMgICAgZmF0YWwgZXJyb3IgTE5LMTE2OTogb25lIG9yIG1vcmUgbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzIGZvdW5kLgotIwotY29uZmlnKCJzdWJjb21wb25lbnRfY29uZmlnIikgewotICB2aXNpYmlsaXR5ID0gbWVkaWFfc3ViY29tcG9uZW50X2RlcHMKLSAgaWYgKGlzX21hYykgewotICAgIHZpc2liaWxpdHkgKz0gWyAiLy9tZWRpYS9iYXNlL21hYyIgXQotICB9Ci0gIGRlZmluZXMgPSBbICJJU19NRURJQV9JTVBMIiBdCi0gIGNvbmZpZ3MgPSBbCi0gICAgIjptZWRpYV9jb25maWciLAotICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjp3ZXhpdF90aW1lX2Rlc3RydWN0b3JzIiwKLSAgXQorY29uZmlnKCJtZWRpYV9jb25maWdfcHVibGljIikgeworICAjIFRPRE86IE1ha2UgaW5jbHVkZV9kaXJzIG90aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBwcml2YXRlLgorICBpbmNsdWRlX2RpcnMgPSBbICIuLiIsICJjb2JhbHQiLCAiLi4vLi4vc2tpYSIgXQorfQorCitjb25maWcoImV4dGVybmFsX2NvbmZpZyIpIHsKKyAgaW5jbHVkZV9kaXJzID0gWyAiLi4iLCAiY29iYWx0IiwgIi4uLy4uL3NraWEiICBdCiB9CiAKIGNvbXBvbmVudCgibWVkaWEiKSB7Ci0gIGxpYnMgPSBbXQotCi0gIGRlcHMgPSBbCi0gICAgIi8vYmFzZSIsCi0gICAgIi8vYmFzZTppMThuIiwKLSAgICAiLy9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMiLAotICAgICIvL2NjL3BhaW50IiwKLSAgICAiLy9jcnlwdG86cGxhdGZvcm0iLAotICAgICIvL2dwdS9jb21tYW5kX2J1ZmZlci9jbGllbnQ6Z2xlczJfaW50ZXJmYWNlIiwKLSAgICAiLy9ncHUvY29tbWFuZF9idWZmZXIvY29tbW9uIiwKLSAgICAiLy90aGlyZF9wYXJ0eS9saWJ5dXYiLAotICAgICIvL3VpL2V2ZW50czpldmVudHNfYmFzZSIsCi0gICAgIi8vdWkvZ2Z4IiwKLSAgICAiLy91aS9nZngvZ2VvbWV0cnkiLAotICAgICIvL3VpL2dsOmdsIiwKLSAgICAiLy91cmwiLAotICBdCi0KLSAgcHVibGljX2NvbmZpZ3MgPSBbICIvL3RoaXJkX3BhcnR5L2xpYndlYm06bGlid2VibV9jb25maWciIF0KLSAgcHVibGljX2RlcHMgPSBtZWRpYV9zdWJjb21wb25lbnRfZGVwcwotICBwdWJsaWNfZGVwcyArPSBbCi0gICAgIjptZWRpYV9idWlsZGZsYWdzIiwKLSAgICAiOnNoYXJlZF9tZW1vcnlfc3VwcG9ydCIsCi0gICAgIi8vdWkvZ2Z4OmNvbG9yX3NwYWNlIiwKLSAgXQotCi0gICMgVGhpcyBtdXN0IGJlIGluY2x1ZGVkIGhlcmUgc2luY2UgaXQgYWN0dWFsbHkgZGVwZW5kcyBvbiAvL21lZGlhL2Jhc2UuCi0gIGlmIChpc19hcHBsZSkgewotICAgIHB1YmxpY19kZXBzICs9IFsgIi8vbWVkaWEvYmFzZS9tYWMiIF0KLSAgfQotCi0gIGlmICh1c2Vfb3pvbmUpIHsKLSAgICBkZXBzICs9IFsgIi8vdWkvb3pvbmUiIF0KLSAgfQotfQotCi0jIE5vdGU6IFRoaXMgY2FuJ3QgYmUgYSBzdGF0aWNfbGlicmFyeSBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGFueSBzb3VyY2VzLgotc291cmNlX3NldCgidGVzdF9zdXBwb3J0IikgewotICB0ZXN0b25seSA9IHRydWUKLSAgcHVibGljX2RlcHMgPSBbCi0gICAgIjptZWRpYSIsCi0gICAgIi8vbWVkaWEvYXVkaW86dGVzdF9zdXBwb3J0IiwKLSAgICAiLy9tZWRpYS9iYXNlOnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vbWVkaWEvYmFzZS9hbmRyb2lkOnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vbWVkaWEvZmlsdGVyczp0ZXN0X3N1cHBvcnQiLAotICAgICIvL21lZGlhL2Zvcm1hdHM6dGVzdF9zdXBwb3J0IiwKLSAgICAiLy9tZWRpYS9yZW5kZXJlcnM6dGVzdF9zdXBwb3J0IiwKLSAgICAiLy9tZWRpYS92aWRlbzp0ZXN0X3N1cHBvcnQiLAotICBdCi19Ci0KLSMgQ29udGFpbnMgdGVzdHMgZm9yIGFsbCB0YXJnZXRzIGluIHRoZSAibWVkaWEiIGZvbGRlci4KLSMgVE9ETyh4aHdhbmcpOiBNb3ZlIG1vam8vY2FwdHVyZS9yZW1vdGluZyB0ZXN0cyBoZXJlIHdoZXJlIGFwcGxpY2FibGUuCi10ZXN0KCJtZWRpYV91bml0dGVzdHMiKSB7Ci0gIHVzZV94dmZiID0gdXNlX3h2ZmJfaW5fdGhpc19jb25maWcKLQotICBkZXBzID0gWwotICAgICIvL21lZGlhL2F1ZGlvOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL2Jhc2U6dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvY2FwYWJpbGl0aWVzOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL2Nhc3QvcmVjZWl2ZXI6dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvY2RtOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL2RldmljZV9tb25pdG9yczp1bml0X3Rlc3RzIiwKLSAgICAiLy9tZWRpYS9maWx0ZXJzOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL2Zvcm1hdHM6dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvZ3B1OnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL2xlYXJuaW5nOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL21vam86dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvbXV4ZXJzOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL3BhcnNlcnM6dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvcmVuZGVyZXJzOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL3Rlc3Q6cGlwZWxpbmVfaW50ZWdyYXRpb25fdGVzdHMiLAotICAgICIvL21lZGlhL3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAotICAgICIvL21lZGlhL3ZpZGVvOnVuaXRfdGVzdHMiLAotICAgICIvL21lZGlhL3dlYnJ0Yzp1bml0X3Rlc3RzIiwKLSAgXQotCi0gIGRhdGEgPSBbCi0gICAgInRlc3QvZGF0YS8iLAotICAgICJmb3JtYXRzL21wNC9oMjY0X2FubmV4X2JfZnV6el9jb3JwdXMvIiwKLSAgXQotCi0gIGRhdGFfZGVwcyA9IFsgIi8vdGVzdGluZy9idWlsZGJvdC9maWx0ZXJzOm1lZGlhX3VuaXR0ZXN0c19maWx0ZXJzIiBdCi0KLSAgaWYgKG1lZGlhX3VzZV9mZm1wZWcpIHsKLSAgICBkZXBzICs9IFsgIi8vbWVkaWEvZmZtcGVnOnVuaXRfdGVzdHMiIF0KLSAgfQotCi0gIGlmIChpc19hbmRyb2lkKSB7Ci0gICAgZGVwcyArPSBbCi0gICAgICAjIFRoZSB0ZXN0IG5lZWRzIHRoZSBqYXZhIGRlcGVuZGVuY2llcyB0byBhZGQgdGhlIGphdmEgY2xhc3NlcyBmb3IgdGhlaXIKLSAgICAgICMgbmF0aXZlIGNvdW50ZXJwYXJ0cyB0byB0aGUgdGVzdCBhcGsuCi0gICAgICAiLy9ncHUvY29tbWFuZF9idWZmZXIvc2VydmljZTphbmRyb2lkX3RleHR1cmVfb3duZXJfdW5pdHRlc3RzIiwKLSAgICAgICIvL21lZGlhL2Jhc2UvYW5kcm9pZDptZWRpYV9qYXZhIiwKLSAgICAgICIvL21lZGlhL2Jhc2UvYW5kcm9pZDp1bml0X3Rlc3RzIiwKLSAgICAgICIvL21lZGlhL2dwdTphbmRyb2lkX3ZpZGVvX2RlY29kZV9hY2NlbGVyYXRvcl91bml0dGVzdHMiLAotICAgICAgIi8vdWkvYW5kcm9pZDp1aV9qYXZhIiwKLSAgICBdCi0gIH0KLQotICBpZiAoaXNfZnVjaHNpYSkgewotICAgIGRlcHMgKz0gWwotICAgICAgIi8vbWVkaWEvZnVjaHNpYS9hdWRpbzp1bml0dGVzdHMiLAotICAgICAgIi8vbWVkaWEvZnVjaHNpYS9jZG0vc2VydmljZTp1bml0dGVzdHMiLAotICAgIF0KLQotICAgIGFkZGl0aW9uYWxfbWFuaWZlc3RfZnJhZ21lbnRzID0gWwotICAgICAgIi8vYnVpbGQvY29uZmlnL2Z1Y2hzaWEvdGVzdC9hdWRpb19jYXBhYmlsaXRpZXMudGVzdC1jbXgiLAotCi0gICAgICAjIFRPRE8oY3JidWcuY29tLzExODU4MTEpOiBGaWd1cmUgb3V0IHdoeQotICAgICAgIyBQYWludENhbnZhc1ZpZGVvUmVuZGVyZXJXaXRoR0xUZXN0LkNvcHlWaWRlb0ZyYW1lWVVWRGF0YVRvR0xUZXh0dXJlCi0gICAgICAjIGNyYXNoZXMgd2l0aG91dCAiZGVwcmVjYXRlZC1hbWJpZW50LXJlcGxhY2UtYXMtZXhlY3V0YWJsZSIuCi0gICAgICAiLy9idWlsZC9jb25maWcvZnVjaHNpYS90ZXN0L2ppdF9jYXBhYmlsaXRpZXMudGVzdC1jbXgiLAotCi0gICAgICAiLy9idWlsZC9jb25maWcvZnVjaHNpYS90ZXN0L3Z1bGthbl9jYXBhYmlsaXRpZXMudGVzdC1jbXgiLAotICAgIF0KLSAgfQotCi0gIGlmIChlbmFibGVfbWVkaWFfcmVtb3RpbmcpIHsKLSAgICBkZXBzICs9IFsgIi8vbWVkaWEvcmVtb3Rpbmc6bWVkaWFfcmVtb3RpbmdfdGVzdHMiIF0KLSAgfQotCi0gICMgVGhlIHRlc3QgbmVlZHMgT1BVU19GSVhFRF9QT0lOVCBjb25kaXRpb25hbCBkZWZpbmUuCi0gIGNvbmZpZ3MgKz0gWyAiLy90aGlyZF9wYXJ0eS9vcHVzOm9wdXNfY29uZmlnIiBdCi19Ci0KLXRlc3QoIm1lZGlhX3BlcmZ0ZXN0cyIpIHsKLSAgY29uZmlncyArPSBbICI6bWVkaWFfY29uZmlnIiBdCi0gIGRlcHMgPSBbCi0gICAgIjp0ZXN0X3N1cHBvcnQiLAotICAgICIvL2Jhc2UvdGVzdDp0ZXN0X3N1cHBvcnQiLAotICAgICIvL21lZGlhL2Jhc2U6cGVyZnRlc3RzIiwKLSAgICAiLy9tZWRpYS9maWx0ZXJzOnBlcmZ0ZXN0cyIsCi0gICAgIi8vbWVkaWEvdGVzdDpwaXBlbGluZV9pbnRlZ3JhdGlvbl9wZXJmdGVzdHMiLAotICAgICIvL3Rlc3RpbmcvZ21vY2siLAotICAgICIvL3Rlc3RpbmcvZ3Rlc3QiLAotICAgICIvL3Rlc3RpbmcvcGVyZiIsCi0gICAgIi8vdGhpcmRfcGFydHkvd2lkZXZpbmUvY2RtOmhlYWRlcnMiLAotICAgICIvL3VpL2dmeDp0ZXN0X3N1cHBvcnQiLAotICBdCi0gIGlmIChtZWRpYV91c2VfZmZtcGVnKSB7Ci0gICAgIyBEaXJlY3QgZGVwZW5kZW5jeSByZXF1aXJlZCB0byBpbmhlcml0IGNvbmZpZy4KLSAgICBkZXBzICs9IFsgIi8vdGhpcmRfcGFydHkvZmZtcGVnIiBdCi0gIH0KLQotICAjIFRoaXMgdGFyZ2V0IHNob3VsZCBub3QgcmVxdWlyZSB0aGUgQ2hyb21lIGV4ZWN1dGFibGUgdG8gcnVuLgotICBhc3NlcnRfbm9fZGVwcyA9IFsgIi8vY2hyb21lIiBdCi0KLSAgZGF0YSA9IFsgInRlc3QvZGF0YS8iIF0KLQotICBkYXRhX2RlcHMgPSBbCi0gICAgIyBOZWVkZWQgZm9yIGlzb2xhdGUgc2NyaXB0IHRvIGV4ZWN1dGUuCi0gICAgIi8vdGVzdGluZzpydW5fcGVyZl90ZXN0IiwKLSAgXQotfQotCi0jIFRoZSBhdWRpbyBzdWJzZXQgb2YgbWVkaWFfdW5pdHRlc3RzLiBUaGlzIHRhcmdldCBleGlzdHMgZm9yIHJ1bm5pbmcgb25seSB0aGUKLSMgYXVkaW8gdGVzdHMgb24gdGhlIEdQVSBib3RzICh3aGljaCBoYXZlIGF1ZGlvIGhhcmR3YXJlKS4KLXRlc3QoImF1ZGlvX3VuaXR0ZXN0cyIpIHsKLSAgZGVwcyA9IFsKLSAgICAiOnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vYmFzZS90ZXN0OnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vbWVkaWEvYXVkaW86dW5pdF90ZXN0cyIsCi0gICAgIi8vbWVkaWEvdGVzdDpydW5fYWxsX3VuaXR0ZXN0cyIsCi0gIF0KLSAgaWYgKGlzX2FuZHJvaWQpIHsKLSAgICBkZXBzICs9IFsKLSAgICAgICMgVGhlIHRlc3QgbmVlZHMgdGhlIGphdmEgZGVwZW5kZW5jaWVzIHRvIGFkZCB0aGUgamF2YSBjbGFzc2VzIGZvciB0aGVpcgotICAgICAgIyBuYXRpdmUgY291bnRlcnBhcnRzIHRvIHRoZSB0ZXN0IGFway4KLSAgICAgICIvL21lZGlhL2Jhc2UvYW5kcm9pZDptZWRpYV9qYXZhIiwKLSAgICAgICIvL3VpL2FuZHJvaWQ6dWlfamF2YSIsCi0gICAgXQotICB9Ci19Ci0KLSMgTm90ZTogTW9zdCBleHRlcm5hbCBjb21wb25lbnRzIHNob3VsZCBqdXN0IGRlcGVuZCBvbiAvL21lZGlhIHVubGVzcyB0aGV5Ci0jIHNwZWNpZmljYWxseSBuZWVkIHRoaXMgcGFyZWQgb3duIHRhcmdldCAoTmFDbCwgUFBBUEksIGV0YykuIEludGVybmFsIHRhcmdldHMKLSMgc2hvdWxkIGp1c3QgZGVwZW5kIG9uIC8vbWVkaWEvYmFzZSB3aGljaCB3aWxsIHByb3BhZ2F0ZSB0aGlzIHRhcmdldCB0byB0aGVtLgotY29tcG9uZW50KCJzaGFyZWRfbWVtb3J5X3N1cHBvcnQiKSB7CiAgIHNvdXJjZXMgPSBbCi0gICAgImJhc2UvYXVkaW9fYnVzLmNjIiwKLSAgICAiYmFzZS9hdWRpb19idXMuaCIsCi0gICAgImJhc2UvYXVkaW9fbGF0ZW5jeS5jYyIsCi0gICAgImJhc2UvYXVkaW9fbGF0ZW5jeS5oIiwKLSAgICAiYmFzZS9hdWRpb19wYXJhbWV0ZXJzLmNjIiwKLSAgICAiYmFzZS9hdWRpb19wYXJhbWV0ZXJzLmgiLAotICAgICJiYXNlL2F1ZGlvX3BvaW50LmNjIiwKLSAgICAiYmFzZS9hdWRpb19wb2ludC5oIiwKLSAgICAiYmFzZS9hdWRpb19zYW1wbGVfdHlwZXMuaCIsCisgICAgImJhc2UvYXVkaW9fY29kZWNzLmNjIiwKKyAgICAiYmFzZS9hdWRpb19jb2RlY3MuaCIsCisgICAgImJhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuY2MiLAorICAgICJiYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiLAorICAgICJiYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuY2MiLAorICAgICJiYXNlL2F1ZGlvX3RpbWVzdGFtcF9oZWxwZXIuaCIsCisgICAgImJhc2UvYml0X3JlYWRlci5jYyIsCisgICAgImJhc2UvYml0X3JlYWRlci5oIiwKKyAgICAiYmFzZS9iaXRfcmVhZGVyX2NvcmUuY2MiLAorICAgICJiYXNlL2JpdF9yZWFkZXJfY29yZS5oIiwKKyAgICAiYmFzZS9ieXRlX3F1ZXVlLmNjIiwKKyAgICAiYmFzZS9ieXRlX3F1ZXVlLmgiLAogICAgICJiYXNlL2NoYW5uZWxfbGF5b3V0LmNjIiwKICAgICAiYmFzZS9jaGFubmVsX2xheW91dC5oIiwKLSAgICAiYmFzZS9saW1pdHMuaCIsCi0gICAgImJhc2UvbWVkaWFfc2htZW1fZXhwb3J0LmgiLAorICAgICJiYXNlL2RlY29kZXJfYnVmZmVyLmNjIiwKKyAgICAiYmFzZS9kZWNvZGVyX2J1ZmZlci5oIiwKKyAgICAiYmFzZS9kZWNyeXB0X2NvbmZpZy5jYyIsCisgICAgImJhc2UvZGVjcnlwdF9jb25maWcuaCIsCisgICAgImJhc2UvZGVtdXhlci5jYyIsCisgICAgImJhc2UvZGVtdXhlci5oIiwKKyAgICAiYmFzZS9kZW11eGVyX21lbW9yeV9saW1pdF9zdGFyYm9hcmQuY2MiLAorICAgICJiYXNlL2RlbXV4ZXJfc3RyZWFtLmNjIiwKKyAgICAiYmFzZS9kZW11eGVyX3N0cmVhbS5oIiwKKyAgICAiYmFzZS9kZW11eGVyX21lbW9yeV9saW1pdC5oIiwKKyAgICAiYmFzZS9lbmNyeXB0aW9uX3BhdHRlcm4uY2MiLAorICAgICJiYXNlL2VuY3J5cHRpb25fcGF0dGVybi5oIiwKKyAgICAiYmFzZS9lbmNyeXB0aW9uX3NjaGVtZS5jYyIsCisgICAgImJhc2UvZW5jcnlwdGlvbl9zY2hlbWUuaCIsCisgICAgImJhc2UvbWVkaWFfbG9nLmgiLAorICAgICJiYXNlL21lZGlhX3Jlc291cmNlLmNjIiwKKyAgICAiYmFzZS9tZWRpYV9yZXNvdXJjZS5oIiwKKyAgICAiYmFzZS9tZWRpYV90cmFjay5jYyIsCisgICAgImJhc2UvbWVkaWFfdHJhY2suaCIsCisgICAgImJhc2UvbWVkaWFfdHJhY2tzLmNjIiwKKyAgICAiYmFzZS9tZWRpYV90cmFja3MuaCIsCisgICAgImJhc2UvbWVkaWFfdXRpbC5jYyIsCisgICAgImJhc2UvbWVkaWFfdXRpbC5oIiwKKyAgICAiYmFzZS9tZWRpYV91cmxfcGFyYW1zLmNjIiwKKyAgICAiYmFzZS9tZWRpYV91cmxfcGFyYW1zLmgiLAorICAgICJiYXNlL21pbWVfdXRpbC5jYyIsCisgICAgImJhc2UvbWltZV91dGlsLmgiLAorICAgICJiYXNlL21pbWVfdXRpbF9pbnRlcm5hbC5jYyIsCisgICAgImJhc2UvbWltZV91dGlsX2ludGVybmFsLmgiLAorICAgICJiYXNlL3BpcGVsaW5lX3N0YXR1cy5jYyIsCisgICAgImJhc2UvcGlwZWxpbmVfc3RhdHVzLmgiLAorICAgICJiYXNlL3Jhbmdlcy5jYyIsCisgICAgImJhc2UvcmFuZ2VzLmgiLAogICAgICJiYXNlL3NhbXBsZV9mb3JtYXQuY2MiLAogICAgICJiYXNlL3NhbXBsZV9mb3JtYXQuaCIsCi0gICAgImJhc2UvdmVjdG9yX21hdGguY2MiLAotICAgICJiYXNlL3ZlY3Rvcl9tYXRoLmgiLAotICAgICJiYXNlL3ZlY3Rvcl9tYXRoX3Rlc3RpbmcuaCIsCi0gICAgImJhc2UvdmlkZW9fdHlwZXMuY2MiLAotICAgICJiYXNlL3ZpZGVvX3R5cGVzLmgiLAorICAgICJiYXNlL3N0cmVhbV9wYXJzZXIuY2MiLAorICAgICJiYXNlL3N0cmVhbV9wYXJzZXIuaCIsCisgICAgImJhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuY2MiLAorICAgICJiYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgiLAorICAgICJiYXNlL3N1cHBvcnRlZF90eXBlcy5jYyIsCisgICAgImJhc2Uvc3VwcG9ydGVkX3R5cGVzLmgiLAorICAgICJiYXNlL3RleHRfdHJhY2tfY29uZmlnLmNjIiwKKyAgICAiYmFzZS90ZXh0X3RyYWNrX2NvbmZpZy5oIiwKKyAgICAiYmFzZS92aWRlb19hc3BlY3RfcmF0aW8uY2MiLAorICAgICJiYXNlL3ZpZGVvX2FzcGVjdF9yYXRpby5oIiwKKyAgICAiYmFzZS92aWRlb19jb2xvcl9zcGFjZS5jYyIsCisgICAgImJhc2UvdmlkZW9fY29sb3Jfc3BhY2UuaCIsCisgICAgImJhc2UvdmlkZW9fY29kZWNzLmNjIiwKKyAgICAiYmFzZS92aWRlb19jb2RlY3MuaCIsCisgICAgImJhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuY2MiLAorICAgICJiYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgiLAorICAgICJiYXNlL3ZpZGVvX3RyYW5zZm9ybWF0aW9uLmNjIiwKKyAgICAiYmFzZS92aWRlb190cmFuc2Zvcm1hdGlvbi5oIiwKKyAgICAiZmlsdGVycy9jaHVua19kZW11eGVyLmNjIiwKKyAgICAiZmlsdGVycy9jaHVua19kZW11eGVyLmgiLAorICAgICJmaWx0ZXJzL2ZyYW1lX3Byb2Nlc3Nvci5jYyIsCisgICAgImZpbHRlcnMvZnJhbWVfcHJvY2Vzc29yLmgiLAorICAgICJmaWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5jYyIsCisgICAgImZpbHRlcnMvaDI2NF9iaXRzdHJlYW1fYnVmZmVyLmgiLAorICAgICJmaWx0ZXJzL2gyNjRfdG9fYW5uZXhfYl9iaXRzdHJlYW1fY29udmVydGVyLmNjIiwKKyAgICAiZmlsdGVycy9oMjY0X3RvX2FubmV4X2JfYml0c3RyZWFtX2NvbnZlcnRlci5oIiwKKyAgICAiZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmNjIiwKKyAgICAiZmlsdGVycy9zb3VyY2VfYnVmZmVyX3JhbmdlLmgiLAorICAgICJmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuY2MiLAorICAgICJmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuaCIsCisgICAgImZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uY2MiLAorICAgICJmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgiLAorICAgICJmaWx0ZXJzL3N0cmVhbV9wYXJzZXJfZmFjdG9yeS5jYyIsCisgICAgImZpbHRlcnMvc3RyZWFtX3BhcnNlcl9mYWN0b3J5LmgiLAorICAgICJmb3JtYXRzL2NvbW1vbi9vZmZzZXRfYnl0ZV9xdWV1ZS5jYyIsCisgICAgImZvcm1hdHMvY29tbW9uL29mZnNldF9ieXRlX3F1ZXVlLmgiLAorICAgICJmb3JtYXRzL21wNC9hYWMuY2MiLAorICAgICJmb3JtYXRzL21wNC9hYWMuaCIsCisgICAgImZvcm1hdHMvbXA0L2F2Yy5jYyIsCisgICAgImZvcm1hdHMvbXA0L2F2Yy5oIiwKKyAgICAiZm9ybWF0cy9tcDQvYml0c3RyZWFtX2NvbnZlcnRlci5jYyIsCisgICAgImZvcm1hdHMvbXA0L2JpdHN0cmVhbV9jb252ZXJ0ZXIuaCIsCisgICAgImZvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5jYyIsCisgICAgImZvcm1hdHMvbXA0L2JveF9kZWZpbml0aW9ucy5oIiwKKyAgICAiZm9ybWF0cy9tcDQvYm94X3JlYWRlci5jYyIsCisgICAgImZvcm1hdHMvbXA0L2JveF9yZWFkZXIuaCIsCisgICAgImZvcm1hdHMvbXA0L2RvbGJ5X3Zpc2lvbi5jYyIsCisgICAgImZvcm1hdHMvbXA0L2RvbGJ5X3Zpc2lvbi5oIiwKKyAgICAiZm9ybWF0cy9tcDQvZXNfZGVzY3JpcHRvci5jYyIsCisgICAgImZvcm1hdHMvbXA0L2VzX2Rlc2NyaXB0b3IuaCIsCisgICAgImZvcm1hdHMvbXA0L2ZvdXJjY3MuaCIsCisgICAgImZvcm1hdHMvbXA0L2hldmMuY2MiLAorICAgICJmb3JtYXRzL21wNC9oZXZjLmgiLAorICAgICJmb3JtYXRzL21wNC9tcDRfc3RyZWFtX3BhcnNlci5jYyIsCisgICAgImZvcm1hdHMvbXA0L21wNF9zdHJlYW1fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL21wNC9yY2hlY2suaCIsCisgICAgImZvcm1hdHMvbXA0L3NhbXBsZV90b19ncm91cF9pdGVyYXRvci5jYyIsCisgICAgImZvcm1hdHMvbXA0L3NhbXBsZV90b19ncm91cF9pdGVyYXRvci5oIiwKKyAgICAiZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmNjIiwKKyAgICAiZm9ybWF0cy9tcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmgiLAorICAgICJmb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuY2MiLAorICAgICJmb3JtYXRzL21wZWcvYWR0c19jb25zdGFudHMuaCIsCisgICAgImZvcm1hdHMvbXBlZy9hZHRzX3N0cmVhbV9wYXJzZXIuY2MiLAorICAgICJmb3JtYXRzL21wZWcvYWR0c19zdHJlYW1fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL21wZWcvbXBlZzFfYXVkaW9fc3RyZWFtX3BhcnNlci5jYyIsCisgICAgImZvcm1hdHMvbXBlZy9tcGVnMV9hdWRpb19zdHJlYW1fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuY2MiLAorICAgICJmb3JtYXRzL21wZWcvbXBlZ19hdWRpb19zdHJlYW1fcGFyc2VyX2Jhc2UuaCIsCisgICAgImZvcm1hdHMvd2ViY29kZWNzL3dlYmNvZGVjc19lbmNvZGVkX2NodW5rX3N0cmVhbV9wYXJzZXIuY2MiLAorICAgICJmb3JtYXRzL3dlYmNvZGVjcy93ZWJjb2RlY3NfZW5jb2RlZF9jaHVua19zdHJlYW1fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuY2MiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9hdWRpb19jbGllbnQuaCIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmNjIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuaCIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX2NvbG91cl9wYXJzZXIuY2MiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuY2MiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmNjIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3MuaCIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5jYyIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5oIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fY3J5cHRvX2hlbHBlcnMuY2MiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9jcnlwdG9faGVscGVycy5oIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1faW5mb19wYXJzZXIuY2MiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9pbmZvX3BhcnNlci5oIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmNjIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9wcm9qZWN0aW9uX3BhcnNlci5jYyIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX3Byb2plY3Rpb25fcGFyc2VyLmgiLAorICAgICJmb3JtYXRzL3dlYm0vd2VibV9zdHJlYW1fcGFyc2VyLmNjIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fdHJhY2tzX3BhcnNlci5jYyIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX3RyYWNrc19wYXJzZXIuaCIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5jYyIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX3ZpZGVvX2NsaWVudC5oIiwKKyAgICAiZm9ybWF0cy93ZWJtL3dlYm1fd2VidnR0X3BhcnNlci5jYyIsCisgICAgImZvcm1hdHMvd2VibS93ZWJtX3dlYnZ0dF9wYXJzZXIuaCIsCisgICAgInZpZGVvL2gyNjRfYml0X3JlYWRlci5jYyIsCisgICAgInZpZGVvL2gyNjRfYml0X3JlYWRlci5oIiwKKyAgICAidmlkZW8vaDI2NF9wYXJzZXIuY2MiLAorICAgICJ2aWRlby9oMjY0X3BhcnNlci5oIiwKKyAgICAidmlkZW8vaDI2NV9uYWx1X3BhcnNlci5jYyIsCisgICAgInZpZGVvL2gyNjVfbmFsdV9wYXJzZXIuaCIsCisgICAgInZpZGVvL2gyNjVfcGFyc2VyLmNjIiwKKyAgICAidmlkZW8vaDI2NV9wYXJzZXIuaCIsCiAgIF0KLSAgaWYgKGlzX21hYykgewotICAgICMgVGhlc2UgbmVlZCB0byBiZSBpbmNsdWRlZCBoZXJlIGJlY2F1c2UgYXVkaW9fbGF0ZW5jeS5jYyBkZXBlbmRzIG9uIHRoZW0uCi0gICAgc291cmNlcyArPSBbCi0gICAgICAiYmFzZS9tYWMvYXVkaW9fbGF0ZW5jeV9tYWMuY2MiLAotICAgICAgImJhc2UvbWFjL2F1ZGlvX2xhdGVuY3lfbWFjLmgiLAotICAgIF0KLSAgfQogCi0gICMgRG8gbm90IHVzZSAic3ViY29tcG9uZW50X2NvbmZpZyIgaGVyZSBzaW5jZSB0aGVzZSBmaWxlcyBhcmUgaW4gdGhlaXIgb3duCi0gICMgY29tcG9uZW50IHRhcmdldCBhbmQgdGh1cyBjYW4ndCBzaGFyZSB0aGUgc3RhbmRhcmQgZXhwb3J0IG1hY3Jvcy4KLSAgY29uZmlncyArPSBbICI6bWVkaWFfY29uZmlnIiBdCi0gIGRlZmluZXMgPSBbICJNRURJQV9TSE1FTV9JTVBMRU1FTlRBVElPTiIgXQorICBzb3VyY2VzICs9IFsKKyAgICAiY29iYWx0L3RoaXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlcy9vcHRpb25hbC5oIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludDNfZi5oIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludF9iYXNlLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3QuaCIsCisgICAgImNvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZV9iYXNlLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3RfYmFzZV9pbXBsLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3ZlY3RvcjJkX2YuaCIsCisgICAgImNvYmFsdC91aS9nZngvZ2VvbWV0cnkvcmVjdF9iYXNlLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3NpemVfZi5oIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludF9mLmNjIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludF9mLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50LmNjIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludC5oIiwKKyAgICAiY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9zaXplLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3ZlY3RvcjJkLmgiLAorICAgICJjb2JhbHQvdWkvZ2Z4L2NvbG9yX3NwYWNlX2V4cG9ydC5oIiwKKyAgICAiY29iYWx0L3VpL2dmeC9oZHJfbWV0YWRhdGEuaCIsCisgICAgImNvYmFsdC91aS9nZngvbmF0aXZlX3BpeG1hcF9oYW5kbGUuaCIsCisgICAgIyJjb2JhbHQvdWkvZ2Z4L2hkcl9tZXRhZGF0YS5jYyIsCisgICAgImNvYmFsdC91aS9nZngvY29sb3Jfc3BhY2UuaCIsCisgICAgImNvYmFsdC9iYXNlL25vdHJlYWNoZWQuaCIsCisgICAgImNvYmFsdC9iYXNlL2N4eDE3X2JhY2twb3J0cy5oIiwKKyAgICAiY29iYWx0L2Jhc2UvYmluZF9wb3N0X3Rhc2suaCIsCisgICAgImNvYmFsdC9iYXNlL2NoZWNrLmgiLAorICAgICJjb2JhbHQvYmFzZS90eXBlcy9zdHJvbmdfYWxpYXMuaCIsCisgICAgImNvYmFsdC9iYXNlL2hhc2gvbWQ1LmgiLAorICAgICJjb2JhbHQvYmFzZS9jaGVja19vcC5oIiwKKyAgICAiY29iYWx0L25ldC9jb29raWVzL3NpdGVfZm9yX2Nvb2tpZXMuaCIsCisgIF0KIAotICBpZiAoIWlzX2RlYnVnKSB7Ci0gICAgY29uZmlncyAtPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpkZWZhdWx0X29wdGltaXphdGlvbiIgXQotICAgIGNvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6b3B0aW1pemVfbWF4IiBdCi0gIH0KKyAgY29uZmlncyAtPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c2l6ZSIgXQorICBjb25maWdzICs9IFsKKyAgICAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNwZWVkIiwKKyAgICAiOm1lZGlhX2NvbmZpZyIsCisgIF0KKworICBwdWJsaWNfY29uZmlncyA9IFsgIjptZWRpYV9jb25maWdfcHVibGljIiBdCisKKyAgYWxsX2RlcGVuZGVudF9jb25maWdzID0gWyAiOmV4dGVybmFsX2NvbmZpZyIgXQorCiAgIGRlcHMgPSBbCiAgICAgIi8vYmFzZSIsCisgICAgIi8vYnVpbGQ6Y2hyb21lY2FzdF9idWlsZGZsYWdzIiwKICAgICAiLy9idWlsZDpjaHJvbWVvc19idWlsZGZsYWdzIiwKLSAgICAiLy91aS9nZngvZ2VvbWV0cnkiLAorICAgICIvL25ldCIsCisgICAgIi8vc3RhcmJvYXJkIiwKKyAgICAiLy91cmwiLAogICBdCiB9Ci0KLSMgVE9ETyh3YXRrKTogUmVmYWN0b3IgdGVzdHMgdGhhdCBjb3VsZCBiZSBtYWRlIHRvIHJ1biBvbiBBbmRyb2lkLiBTZWUKLSMgaHR0cDovL2NyYnVnLmNvbS81NzA3NjIKLWlmIChtZWRpYV91c2VfZmZtcGVnICYmICFpc19hbmRyb2lkKSB7Ci0gIHRlc3QoImZmbXBlZ19yZWdyZXNzaW9uX3Rlc3RzIikgewotICAgIGNvbmZpZ3MgKz0gWyAiLy9tZWRpYTptZWRpYV9jb25maWciIF0KLQotICAgIGRlcHMgPSBbCi0gICAgICAiOnRlc3Rfc3VwcG9ydCIsCi0gICAgICAiLy9iYXNlL3Rlc3Q6dGVzdF9zdXBwb3J0IiwKLSAgICAgICIvL21lZGlhL2ZmbXBlZzpmZm1wZWdfcmVncmVzc2lvbl90ZXN0cyIsCi0gICAgICAiLy9tZWRpYS90ZXN0OnBpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3RzIiwKLSAgICAgICIvL21lZGlhL3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAotICAgICAgIi8vdGVzdGluZy9nbW9jayIsCi0gICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKLSAgICAgICIvL3VpL2dmeDp0ZXN0X3N1cHBvcnQiLAotICAgICAgIi8vdWkvZ2Z4L2dlb21ldHJ5IiwKLSAgICBdCi0gIH0KLX0KLQotaWYgKHByb3ByaWV0YXJ5X2NvZGVjcykgewotICBmdXp6ZXJfdGVzdCgibWVkaWFfY2VuY191dGlsc19mdXp6ZXIiKSB7Ci0gICAgc291cmNlcyA9IFsgImNkbS9jZW5jX3V0aWxzX2Z1enplcnRlc3QuY2MiIF0KLSAgICBkZXBzID0gWyAiOm1lZGlhIiBdCi0gIH0KLX0KLQotZnV6emVyX3Rlc3QoIm1lZGlhX3ZwOV9wYXJzZXJfZnV6emVyIikgewotICBzb3VyY2VzID0gWyAiZmlsdGVycy92cDlfcGFyc2VyX2Z1enplcnRlc3QuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vYmFzZSIsCi0gIF0KLSAgbGliZnV6emVyX29wdGlvbnMgPSBbICJtYXhfbGVuID0gNDAwMDAwIiBdCi19Ci0KLWZ1enplcl90ZXN0KCJtZWRpYV92cDlfcGFyc2VyX2VuY3J5cHRlZF9mdXp6ZXIiKSB7Ci0gIHNvdXJjZXMgPSBbICJmaWx0ZXJzL3ZwOV9wYXJzZXJfZW5jcnlwdGVkX2Z1enplcnRlc3QuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOnRlc3Rfc3VwcG9ydCIsCi0gICAgIi8vYmFzZSIsCi0gICAgIi8vYmFzZS90ZXN0OnRlc3Rfc3VwcG9ydCIsCi0gIF0KLSAgc2VlZF9jb3JwdXMgPSAiLy9tZWRpYS90ZXN0L2RhdGEiCi19Ci0KLWZ1enplcl90ZXN0KCJtZWRpYV92cHhfdmlkZW9fZGVjb2Rlcl9mdXp6ZXIiKSB7Ci0gIHNvdXJjZXMgPSBbICJmaWx0ZXJzL3ZweF92aWRlb19kZWNvZGVyX2Z1enplcnRlc3QuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOm1lZGlhIiwKLSAgICAiLy9iYXNlIiwKLSAgICAiLy9iYXNlL3Rlc3Q6dGVzdF9zdXBwb3J0IiwKLSAgXQotICBsaWJmdXp6ZXJfb3B0aW9ucyA9IFsgIm1heF9sZW4gPSA0MDAwMDAiIF0KLSAgc2VlZF9jb3JwdXMgPSAiLy9tZWRpYS90ZXN0L2RhdGEiCi19Ci0KLWZ1enplcl90ZXN0KCJtZWRpYV93ZWJtX211eGVyX2Z1enplciIpIHsKLSAgc291cmNlcyA9IFsgIm11eGVycy93ZWJtX211eGVyX2Z1enplcnRlc3QuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOm1lZGlhIiwKLSAgICAiLy9iYXNlIiwKLSAgICAiLy90aGlyZF9wYXJ0eS9saWJ3ZWJtIiwKLSAgXQotfQotCi1mdXp6ZXJfdGVzdCgiY2Jjc19kZWNyeXB0b3JfZnV6emVyIikgewotICBzb3VyY2VzID0gWyAiY2RtL2NiY3NfZGVjcnlwdG9yX2Z1enplci5jYyIgXQotICBkZXBzID0gWwotICAgICI6bWVkaWEiLAotICAgICIvL2Jhc2UiLAotICAgICIvL2NyeXB0byIsCi0gIF0KLX0KLQotZnV6emVyX3Rlc3QoImNlbmNfZGVjcnlwdG9yX2Z1enplciIpIHsKLSAgc291cmNlcyA9IFsgImNkbS9jZW5jX2RlY3J5cHRvcl9mdXp6ZXIuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOm1lZGlhIiwKLSAgICAiLy9iYXNlIiwKLSAgICAiLy9jcnlwdG8iLAotICBdCi19Ci0KLWZ1enplcl90ZXN0KCJqc29uX3dlYl9rZXlfZnV6emVyIikgewotICBzb3VyY2VzID0gWyAiY2RtL2pzb25fd2ViX2tleV9mdXp6ZXIuY2MiIF0KLSAgZGVwcyA9IFsKLSAgICAiOm1lZGlhIiwKLSAgICAiLy9iYXNlIiwKLSAgXQotfQotCi1pZiAocHJvcHJpZXRhcnlfY29kZWNzKSB7Ci0gIGZ1enplcl90ZXN0KCJtZWRpYV9tcDRfYXZjY19wYXJzZXJfZnV6emVyIikgewotICAgIHNvdXJjZXMgPSBbICJmb3JtYXRzL21wNC9tcDRfYXZjY19wYXJzZXJfZnV6emVyLmNjIiBdCi0gICAgZGVwcyA9IFsKLSAgICAgICI6bWVkaWEiLAotICAgICAgIi8vYmFzZSIsCi0gICAgXQotICB9Ci0KLSAgZnV6emVyX3Rlc3QoIm1lZGlhX21wNF9ib3hfcmVhZGVyX2Z1enplciIpIHsKLSAgICBzb3VyY2VzID0gWyAiZm9ybWF0cy9tcDQvbXA0X2JveF9yZWFkZXJfZnV6emVyLmNjIiBdCi0gICAgZGVwcyA9IFsKLSAgICAgICI6bWVkaWEiLAotICAgICAgIi8vYmFzZSIsCi0gICAgXQotICAgIGxpYmZ1enplcl9vcHRpb25zID0gWyAibWF4X2xlbj01MDAiIF0KLSAgICBkaWN0ID0gInRlc3QvbXA0LmRpY3QiCi0gIH0KLX0KLQotaWYgKGVuYWJsZV9tc2VfbXBlZzJ0c19zdHJlYW1fcGFyc2VyKSB7Ci0gIGZ1enplcl90ZXN0KCJtZWRpYV9lc19wYXJzZXJfYWR0c19mdXp6ZXIiKSB7Ci0gICAgc291cmNlcyA9IFsgImZvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0c19mdXp6ZXIuY2MiIF0KLSAgICBkZXBzID0gWwotICAgICAgIjptZWRpYSIsCi0gICAgICAiLy9iYXNlIiwKLSAgICBdCi0gIH0KLQotICBmdXp6ZXJfdGVzdCgibWVkaWFfZXNfcGFyc2VyX2gyNjRfZnV6emVyIikgewotICAgIHNvdXJjZXMgPSBbICJmb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjRfZnV6emVyLmNjIiBdCi0gICAgZGVwcyA9IFsKLSAgICAgICI6bWVkaWEiLAotICAgICAgIi8vYmFzZSIsCi0gICAgXQotICB9Ci0KLSAgZnV6emVyX3Rlc3QoIm1lZGlhX2VzX3BhcnNlcl9tcGVnMWF1ZGlvX2Z1enplciIpIHsKLSAgICBzb3VyY2VzID0gWyAiZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvX2Z1enplci5jYyIgXQotICAgIGRlcHMgPSBbCi0gICAgICAiOm1lZGlhIiwKLSAgICAgICIvL2Jhc2UiLAotICAgIF0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvQlVJTEQuZ24uY2hyb21pdW0gYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9CVUlMRC5nbi5jaHJvbWl1bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMxNThjCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvQlVJTEQuZ24uY2hyb21pdW0KQEAgLTAsMCArMSw0NjMgQEAKKyMgQ29weXJpZ2h0IDIwMTQgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworaW1wb3J0KCIvL2J1aWxkL2J1aWxkZmxhZ19oZWFkZXIuZ25pIikKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvYW5kcm9pZC9jb25maWcuZ25pIikKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvYXJtLmduaSIpCitpbXBvcnQoIi8vYnVpbGQvY29uZmlnL2Nocm9tZWNhc3RfYnVpbGQuZ25pIikKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvZmVhdHVyZXMuZ25pIikKK2ltcG9ydCgiLy9idWlsZC9jb25maWcvbGludXgvcGtnX2NvbmZpZy5nbmkiKQoraW1wb3J0KCIvL2J1aWxkL2NvbmZpZy91aS5nbmkiKQoraW1wb3J0KCIvL21lZGlhL2NkbS9saWJyYXJ5X2NkbS9jZG1fcGF0aHMuZ25pIikKK2ltcG9ydCgiLy9tZWRpYS9tZWRpYV9vcHRpb25zLmduaSIpCitpbXBvcnQoIi8vdGVzdGluZy9saWJmdXp6ZXIvZnV6emVyX3Rlc3QuZ25pIikKK2ltcG9ydCgiLy90ZXN0aW5nL3Rlc3QuZ25pIikKK2ltcG9ydCgiLy90aGlyZF9wYXJ0eS9mZm1wZWcvZmZtcGVnX29wdGlvbnMuZ25pIikKKworYnVpbGRmbGFnX2hlYWRlcigibWVkaWFfYnVpbGRmbGFncyIpIHsKKyAgaGVhZGVyID0gIm1lZGlhX2J1aWxkZmxhZ3MuaCIKKworICBmbGFncyA9IFsKKyAgICAiQUxURVJOQVRFX0NETV9TVE9SQUdFX0lEX0tFWT1cIiRhbHRlcm5hdGVfY2RtX3N0b3JhZ2VfaWRfa2V5XCIiLAorICAgICJDRE1fUExBVEZPUk1fU1BFQ0lGSUNfUEFUSD1cIiRjZG1fcGxhdGZvcm1fc3BlY2lmaWNfcGF0aFwiIiwKKyAgICAiRU5BQkxFX1BMQVRGT1JNX0FDM19FQUMzX0FVRElPPSRlbmFibGVfcGxhdGZvcm1fYWMzX2VhYzNfYXVkaW8iLAorICAgICJFTkFCTEVfQ0FTVF9BVURJT19SRU5ERVJFUj0kZW5hYmxlX2Nhc3RfYXVkaW9fcmVuZGVyZXIiLAorICAgICJFTkFCTEVfQ0RNX0hPU1RfVkVSSUZJQ0FUSU9OPSRlbmFibGVfY2RtX2hvc3RfdmVyaWZpY2F0aW9uIiwKKyAgICAiRU5BQkxFX0NETV9TVE9SQUdFX0lEPSRlbmFibGVfY2RtX3N0b3JhZ2VfaWQiLAorICAgICJFTkFCTEVfREFWMURfREVDT0RFUj0kZW5hYmxlX2RhdjFkX2RlY29kZXIiLAorICAgICJFTkFCTEVfQVYxX0RFQ09ERVI9JGVuYWJsZV9hdjFfZGVjb2RlciIsCisgICAgIkVOQUJMRV9QTEFURk9STV9ET0xCWV9WSVNJT049JGVuYWJsZV9wbGF0Zm9ybV9kb2xieV92aXNpb24iLAorICAgICJFTkFCTEVfRkZNUEVHPSRtZWRpYV91c2VfZmZtcGVnIiwKKyAgICAiRU5BQkxFX0ZGTVBFR19WSURFT19ERUNPREVSUz0kZW5hYmxlX2ZmbXBlZ192aWRlb19kZWNvZGVycyIsCisgICAgIkVOQUJMRV9QTEFURk9STV9IRVZDPSRlbmFibGVfcGxhdGZvcm1faGV2YyIsCisgICAgIkVOQUJMRV9QTEFURk9STV9IRVZDX0RFQ09ESU5HPSRlbmFibGVfcGxhdGZvcm1faGV2Y19kZWNvZGluZyIsCisgICAgIkVOQUJMRV9QTEFURk9STV9FTkNSWVBURURfSEVWQz0kZW5hYmxlX3BsYXRmb3JtX2VuY3J5cHRlZF9oZXZjIiwKKyAgICAiRU5BQkxFX0hMU19TQU1QTEVfQUVTPSRlbmFibGVfaGxzX3NhbXBsZV9hZXMiLAorICAgICJFTkFCTEVfTElCR0FWMV9ERUNPREVSPSRlbmFibGVfbGliZ2F2MV9kZWNvZGVyIiwKKyAgICAiRU5BQkxFX0xJQlJBUllfQ0RNUz0kZW5hYmxlX2xpYnJhcnlfY2RtcyIsCisgICAgIkVOQUJMRV9MSUJWUFg9JG1lZGlhX3VzZV9saWJ2cHgiLAorICAgICJFTkFCTEVfTE9HR0lOR19PVkVSUklERT0kZW5hYmxlX2xvZ2dpbmdfb3ZlcnJpZGUiLAorICAgICJFTkFCTEVfTUVESUFfRFJNX1NUT1JBR0U9JGVuYWJsZV9tZWRpYV9kcm1fc3RvcmFnZSIsCisgICAgIkVOQUJMRV9NRURJQV9SRU1PVElORz0kZW5hYmxlX21lZGlhX3JlbW90aW5nIiwKKyAgICAiRU5BQkxFX01FRElBX1JFTU9USU5HX1JQQz0kZW5hYmxlX21lZGlhX3JlbW90aW5nX3JwYyIsCisgICAgIkVOQUJMRV9PUEVOSDI2ND0kbWVkaWFfdXNlX29wZW5oMjY0IiwKKyAgICAiRU5BQkxFX1BMQVRGT1JNX01QRUdfSF9BVURJTz0kZW5hYmxlX3BsYXRmb3JtX21wZWdfaF9hdWRpbyIsCisgICAgIkVOQUJMRV9NU0VfTVBFRzJUU19TVFJFQU1fUEFSU0VSPSRlbmFibGVfbXNlX21wZWcydHNfc3RyZWFtX3BhcnNlciIsCisgICAgIkVOQUJMRV9DQVNUX1NUUkVBTUlOR19SRU5ERVJFUj0kZW5hYmxlX2Nhc3Rfc3RyZWFtaW5nX3JlbmRlcmVyIiwKKyAgICAiVVNFX0NIUk9NRU9TX01FRElBX0FDQ0VMRVJBVElPTj0kdXNlX3ZhYXBpfHwkdXNlX3Y0bDJfY29kZWMiLAorICAgICJVU0VfQ0hST01FT1NfUFJPVEVDVEVEX0FWMT0kdXNlX2Nocm9tZW9zX3Byb3RlY3RlZF9hdjEiLAorICAgICJVU0VfQ0hST01FT1NfUFJPVEVDVEVEX01FRElBPSR1c2VfY2hyb21lb3NfcHJvdGVjdGVkX21lZGlhIiwKKyAgICAiVVNFX1BST1BSSUVUQVJZX0NPREVDUz0kcHJvcHJpZXRhcnlfY29kZWNzIiwKKyAgXQorfQorCitpZiAocHJvcHJpZXRhcnlfY29kZWNzICYmIG1lZGlhX3VzZV9mZm1wZWcpIHsKKyAgYXNzZXJ0KAorICAgICAgZmZtcGVnX2JyYW5kaW5nICE9ICJDaHJvbWl1bSIsCisgICAgICAicHJvcHJpZXRhcnkgY29kZWNzIGFuZCBmZm1wZWdfYnJhbmRpbmcgc2V0IHRvIENocm9taXVtIGFyZSBpbmNvbXBhdGlibGUiKQorfQorCisjIENvbW1vbiBjb25maWd1cmF0aW9uIGZvciB0YXJnZXRzIGluIHRoZSBtZWRpYSBkaXJlY3Rvcnk7IHRoZXNlIG11c3Qgbm90IGJlCisjIGV4cG9ydGVkIHNpbmNlIHRoaW5ncyBsaWtlIFVTRV9ORU9OIGFuZCBVU0VfQ1JBUyBoYXZlIGRpZmZlcmVudCBtZWFuaW5ncworIyBlbHNld2hlcmUgaW4gdGhlIGNvZGUgYmFzZS4KK2NvbmZpZygibWVkaWFfY29uZmlnIikgeworICBkZWZpbmVzID0gW10KKyAgaWYgKGN1cnJlbnRfY3B1ID09ICJhcm02NCIgfHwgKGN1cnJlbnRfY3B1ID09ICJhcm0iICYmIGFybV91c2VfbmVvbikpIHsKKyAgICBkZWZpbmVzICs9IFsgIlVTRV9ORU9OIiBdCisgIH0KKyAgaWYgKHVzZV9wdWxzZWF1ZGlvKSB7CisgICAgZGVmaW5lcyArPSBbICJVU0VfUFVMU0VBVURJTyIgXQorICAgIGlmICghbGlua19wdWxzZWF1ZGlvKSB7CisgICAgICBkZWZpbmVzICs9IFsgIkRMT1BFTl9QVUxTRUFVRElPIiBdCisgICAgfQorICB9CisgIGlmICh1c2VfY3JhcykgeworICAgIGRlZmluZXMgKz0gWyAiVVNFX0NSQVMiIF0KKyAgfQorfQorCisjIEludGVybmFsIGdyb3VwaW5nIG9mIHRoZSBjb25maWdzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHN1Yi1mb2xkZXJzIGhhdmluZyB0aGVpcgorIyBvd24gQlVJTEQuZ24gZmlsZXM7IG9ubHkgdGFyZ2V0cyB3aGljaCByb2xsIHVwIGludG8gdGhlICJtZWRpYSIgdGFyZ2V0IHNob3VsZAorIyBpbmNsdWRlIHRoaXMgY29uZmlnLiBJLmUuLCBub3QgInRlc3Rfc3VwcG9ydCIgb3IgInVuaXRfdGVzdHMiIHRhcmdldHMuCisjCisjIFdpdGhvdXQgdGhlc2UgY29uZmlncyBoYXZpbmcgaW5kaXZpZHVhbCBzdWItZm9sZGVycyB0YWtlIGEgLy9tZWRpYS9iYXNlIERFUAorIyAob3Igb3RoZXJzKSBjYW4geWllbGQgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgYW5kIGV4cG9ydGVkIHN5bWJvbHMgb24gV2luZG93czoKKyMKKyMgICAgZmF0YWwgZXJyb3IgTE5LMTE2OTogb25lIG9yIG1vcmUgbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzIGZvdW5kLgorIworY29uZmlnKCJzdWJjb21wb25lbnRfY29uZmlnIikgeworICB2aXNpYmlsaXR5ID0gbWVkaWFfc3ViY29tcG9uZW50X2RlcHMKKyAgaWYgKGlzX21hYykgeworICAgIHZpc2liaWxpdHkgKz0gWyAiLy9tZWRpYS9iYXNlL21hYyIgXQorICB9CisgIGRlZmluZXMgPSBbICJJU19NRURJQV9JTVBMIiBdCisgIGNvbmZpZ3MgPSBbCisgICAgIjptZWRpYV9jb25maWciLAorICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjp3ZXhpdF90aW1lX2Rlc3RydWN0b3JzIiwKKyAgXQorfQorCitjb21wb25lbnQoIm1lZGlhIikgeworICBsaWJzID0gW10KKworICBkZXBzID0gWworICAgICIvL2Jhc2UiLAorICAgICIvL2Jhc2U6aTE4biIsCisgICAgIi8vYmFzZS90aGlyZF9wYXJ0eS9keW5hbWljX2Fubm90YXRpb25zIiwKKyAgICAiLy9jYy9wYWludCIsCisgICAgIi8vY3J5cHRvOnBsYXRmb3JtIiwKKyAgICAiLy9ncHUvY29tbWFuZF9idWZmZXIvY2xpZW50OmdsZXMyX2ludGVyZmFjZSIsCisgICAgIi8vZ3B1L2NvbW1hbmRfYnVmZmVyL2NvbW1vbiIsCisgICAgIi8vdGhpcmRfcGFydHkvbGlieXV2IiwKKyAgICAiLy91aS9ldmVudHM6ZXZlbnRzX2Jhc2UiLAorICAgICIvL3VpL2dmeCIsCisgICAgIi8vdWkvZ2Z4L2dlb21ldHJ5IiwKKyAgICAiLy91aS9nbDpnbCIsCisgICAgIi8vdXJsIiwKKyAgXQorCisgIHB1YmxpY19jb25maWdzID0gWyAiLy90aGlyZF9wYXJ0eS9saWJ3ZWJtOmxpYndlYm1fY29uZmlnIiBdCisgIHB1YmxpY19kZXBzID0gbWVkaWFfc3ViY29tcG9uZW50X2RlcHMKKyAgcHVibGljX2RlcHMgKz0gWworICAgICI6bWVkaWFfYnVpbGRmbGFncyIsCisgICAgIjpzaGFyZWRfbWVtb3J5X3N1cHBvcnQiLAorICAgICIvL3VpL2dmeDpjb2xvcl9zcGFjZSIsCisgIF0KKworICAjIFRoaXMgbXVzdCBiZSBpbmNsdWRlZCBoZXJlIHNpbmNlIGl0IGFjdHVhbGx5IGRlcGVuZHMgb24gLy9tZWRpYS9iYXNlLgorICBpZiAoaXNfYXBwbGUpIHsKKyAgICBwdWJsaWNfZGVwcyArPSBbICIvL21lZGlhL2Jhc2UvbWFjIiBdCisgIH0KKworICBpZiAodXNlX296b25lKSB7CisgICAgZGVwcyArPSBbICIvL3VpL296b25lIiBdCisgIH0KK30KKworIyBOb3RlOiBUaGlzIGNhbid0IGJlIGEgc3RhdGljX2xpYnJhcnkgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhbnkgc291cmNlcy4KK3NvdXJjZV9zZXQoInRlc3Rfc3VwcG9ydCIpIHsKKyAgdGVzdG9ubHkgPSB0cnVlCisgIHB1YmxpY19kZXBzID0gWworICAgICI6bWVkaWEiLAorICAgICIvL21lZGlhL2F1ZGlvOnRlc3Rfc3VwcG9ydCIsCisgICAgIi8vbWVkaWEvYmFzZTp0ZXN0X3N1cHBvcnQiLAorICAgICIvL21lZGlhL2Jhc2UvYW5kcm9pZDp0ZXN0X3N1cHBvcnQiLAorICAgICIvL21lZGlhL2ZpbHRlcnM6dGVzdF9zdXBwb3J0IiwKKyAgICAiLy9tZWRpYS9mb3JtYXRzOnRlc3Rfc3VwcG9ydCIsCisgICAgIi8vbWVkaWEvcmVuZGVyZXJzOnRlc3Rfc3VwcG9ydCIsCisgICAgIi8vbWVkaWEvdmlkZW86dGVzdF9zdXBwb3J0IiwKKyAgXQorfQorCisjIENvbnRhaW5zIHRlc3RzIGZvciBhbGwgdGFyZ2V0cyBpbiB0aGUgIm1lZGlhIiBmb2xkZXIuCisjIFRPRE8oeGh3YW5nKTogTW92ZSBtb2pvL2NhcHR1cmUvcmVtb3RpbmcgdGVzdHMgaGVyZSB3aGVyZSBhcHBsaWNhYmxlLgordGVzdCgibWVkaWFfdW5pdHRlc3RzIikgeworICB1c2VfeHZmYiA9IHVzZV94dmZiX2luX3RoaXNfY29uZmlnCisKKyAgZGVwcyA9IFsKKyAgICAiLy9tZWRpYS9hdWRpbzp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9iYXNlOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL2NhcGFiaWxpdGllczp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9jYXN0L3JlY2VpdmVyOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL2NkbTp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9kZXZpY2VfbW9uaXRvcnM6dW5pdF90ZXN0cyIsCisgICAgIi8vbWVkaWEvZmlsdGVyczp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9mb3JtYXRzOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL2dwdTp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9sZWFybmluZzp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9tb2pvOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL211eGVyczp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS9wYXJzZXJzOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL3JlbmRlcmVyczp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS90ZXN0OnBpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3RzIiwKKyAgICAiLy9tZWRpYS90ZXN0OnJ1bl9hbGxfdW5pdHRlc3RzIiwKKyAgICAiLy9tZWRpYS92aWRlbzp1bml0X3Rlc3RzIiwKKyAgICAiLy9tZWRpYS93ZWJydGM6dW5pdF90ZXN0cyIsCisgIF0KKworICBkYXRhID0gWworICAgICJ0ZXN0L2RhdGEvIiwKKyAgICAiZm9ybWF0cy9tcDQvaDI2NF9hbm5leF9iX2Z1enpfY29ycHVzLyIsCisgIF0KKworICBkYXRhX2RlcHMgPSBbICIvL3Rlc3RpbmcvYnVpbGRib3QvZmlsdGVyczptZWRpYV91bml0dGVzdHNfZmlsdGVycyIgXQorCisgIGlmIChtZWRpYV91c2VfZmZtcGVnKSB7CisgICAgZGVwcyArPSBbICIvL21lZGlhL2ZmbXBlZzp1bml0X3Rlc3RzIiBdCisgIH0KKworICBpZiAoaXNfYW5kcm9pZCkgeworICAgIGRlcHMgKz0gWworICAgICAgIyBUaGUgdGVzdCBuZWVkcyB0aGUgamF2YSBkZXBlbmRlbmNpZXMgdG8gYWRkIHRoZSBqYXZhIGNsYXNzZXMgZm9yIHRoZWlyCisgICAgICAjIG5hdGl2ZSBjb3VudGVycGFydHMgdG8gdGhlIHRlc3QgYXBrLgorICAgICAgIi8vZ3B1L2NvbW1hbmRfYnVmZmVyL3NlcnZpY2U6YW5kcm9pZF90ZXh0dXJlX293bmVyX3VuaXR0ZXN0cyIsCisgICAgICAiLy9tZWRpYS9iYXNlL2FuZHJvaWQ6bWVkaWFfamF2YSIsCisgICAgICAiLy9tZWRpYS9iYXNlL2FuZHJvaWQ6dW5pdF90ZXN0cyIsCisgICAgICAiLy9tZWRpYS9ncHU6YW5kcm9pZF92aWRlb19kZWNvZGVfYWNjZWxlcmF0b3JfdW5pdHRlc3RzIiwKKyAgICAgICIvL3VpL2FuZHJvaWQ6dWlfamF2YSIsCisgICAgXQorICB9CisKKyAgaWYgKGlzX2Z1Y2hzaWEpIHsKKyAgICBkZXBzICs9IFsKKyAgICAgICIvL21lZGlhL2Z1Y2hzaWEvYXVkaW86dW5pdHRlc3RzIiwKKyAgICAgICIvL21lZGlhL2Z1Y2hzaWEvY2RtL3NlcnZpY2U6dW5pdHRlc3RzIiwKKyAgICBdCisKKyAgICBhZGRpdGlvbmFsX21hbmlmZXN0X2ZyYWdtZW50cyA9IFsKKyAgICAgICIvL2J1aWxkL2NvbmZpZy9mdWNoc2lhL3Rlc3QvYXVkaW9fY2FwYWJpbGl0aWVzLnRlc3QtY214IiwKKworICAgICAgIyBUT0RPKGNyYnVnLmNvbS8xMTg1ODExKTogRmlndXJlIG91dCB3aHkKKyAgICAgICMgUGFpbnRDYW52YXNWaWRlb1JlbmRlcmVyV2l0aEdMVGVzdC5Db3B5VmlkZW9GcmFtZVlVVkRhdGFUb0dMVGV4dHVyZQorICAgICAgIyBjcmFzaGVzIHdpdGhvdXQgImRlcHJlY2F0ZWQtYW1iaWVudC1yZXBsYWNlLWFzLWV4ZWN1dGFibGUiLgorICAgICAgIi8vYnVpbGQvY29uZmlnL2Z1Y2hzaWEvdGVzdC9qaXRfY2FwYWJpbGl0aWVzLnRlc3QtY214IiwKKworICAgICAgIi8vYnVpbGQvY29uZmlnL2Z1Y2hzaWEvdGVzdC92dWxrYW5fY2FwYWJpbGl0aWVzLnRlc3QtY214IiwKKyAgICBdCisgIH0KKworICBpZiAoZW5hYmxlX21lZGlhX3JlbW90aW5nKSB7CisgICAgZGVwcyArPSBbICIvL21lZGlhL3JlbW90aW5nOm1lZGlhX3JlbW90aW5nX3Rlc3RzIiBdCisgIH0KKworICAjIFRoZSB0ZXN0IG5lZWRzIE9QVVNfRklYRURfUE9JTlQgY29uZGl0aW9uYWwgZGVmaW5lLgorICBjb25maWdzICs9IFsgIi8vdGhpcmRfcGFydHkvb3B1czpvcHVzX2NvbmZpZyIgXQorfQorCit0ZXN0KCJtZWRpYV9wZXJmdGVzdHMiKSB7CisgIGNvbmZpZ3MgKz0gWyAiOm1lZGlhX2NvbmZpZyIgXQorICBkZXBzID0gWworICAgICI6dGVzdF9zdXBwb3J0IiwKKyAgICAiLy9iYXNlL3Rlc3Q6dGVzdF9zdXBwb3J0IiwKKyAgICAiLy9tZWRpYS9iYXNlOnBlcmZ0ZXN0cyIsCisgICAgIi8vbWVkaWEvZmlsdGVyczpwZXJmdGVzdHMiLAorICAgICIvL21lZGlhL3Rlc3Q6cGlwZWxpbmVfaW50ZWdyYXRpb25fcGVyZnRlc3RzIiwKKyAgICAiLy90ZXN0aW5nL2dtb2NrIiwKKyAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKKyAgICAiLy90ZXN0aW5nL3BlcmYiLAorICAgICIvL3RoaXJkX3BhcnR5L3dpZGV2aW5lL2NkbTpoZWFkZXJzIiwKKyAgICAiLy91aS9nZng6dGVzdF9zdXBwb3J0IiwKKyAgXQorICBpZiAobWVkaWFfdXNlX2ZmbXBlZykgeworICAgICMgRGlyZWN0IGRlcGVuZGVuY3kgcmVxdWlyZWQgdG8gaW5oZXJpdCBjb25maWcuCisgICAgZGVwcyArPSBbICIvL3RoaXJkX3BhcnR5L2ZmbXBlZyIgXQorICB9CisKKyAgIyBUaGlzIHRhcmdldCBzaG91bGQgbm90IHJlcXVpcmUgdGhlIENocm9tZSBleGVjdXRhYmxlIHRvIHJ1bi4KKyAgYXNzZXJ0X25vX2RlcHMgPSBbICIvL2Nocm9tZSIgXQorCisgIGRhdGEgPSBbICJ0ZXN0L2RhdGEvIiBdCisKKyAgZGF0YV9kZXBzID0gWworICAgICMgTmVlZGVkIGZvciBpc29sYXRlIHNjcmlwdCB0byBleGVjdXRlLgorICAgICIvL3Rlc3Rpbmc6cnVuX3BlcmZfdGVzdCIsCisgIF0KK30KKworIyBUaGUgYXVkaW8gc3Vic2V0IG9mIG1lZGlhX3VuaXR0ZXN0cy4gVGhpcyB0YXJnZXQgZXhpc3RzIGZvciBydW5uaW5nIG9ubHkgdGhlCisjIGF1ZGlvIHRlc3RzIG9uIHRoZSBHUFUgYm90cyAod2hpY2ggaGF2ZSBhdWRpbyBoYXJkd2FyZSkuCit0ZXN0KCJhdWRpb191bml0dGVzdHMiKSB7CisgIGRlcHMgPSBbCisgICAgIjp0ZXN0X3N1cHBvcnQiLAorICAgICIvL2Jhc2UvdGVzdDp0ZXN0X3N1cHBvcnQiLAorICAgICIvL21lZGlhL2F1ZGlvOnVuaXRfdGVzdHMiLAorICAgICIvL21lZGlhL3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAorICBdCisgIGlmIChpc19hbmRyb2lkKSB7CisgICAgZGVwcyArPSBbCisgICAgICAjIFRoZSB0ZXN0IG5lZWRzIHRoZSBqYXZhIGRlcGVuZGVuY2llcyB0byBhZGQgdGhlIGphdmEgY2xhc3NlcyBmb3IgdGhlaXIKKyAgICAgICMgbmF0aXZlIGNvdW50ZXJwYXJ0cyB0byB0aGUgdGVzdCBhcGsuCisgICAgICAiLy9tZWRpYS9iYXNlL2FuZHJvaWQ6bWVkaWFfamF2YSIsCisgICAgICAiLy91aS9hbmRyb2lkOnVpX2phdmEiLAorICAgIF0KKyAgfQorfQorCisjIE5vdGU6IE1vc3QgZXh0ZXJuYWwgY29tcG9uZW50cyBzaG91bGQganVzdCBkZXBlbmQgb24gLy9tZWRpYSB1bmxlc3MgdGhleQorIyBzcGVjaWZpY2FsbHkgbmVlZCB0aGlzIHBhcmVkIG93biB0YXJnZXQgKE5hQ2wsIFBQQVBJLCBldGMpLiBJbnRlcm5hbCB0YXJnZXRzCisjIHNob3VsZCBqdXN0IGRlcGVuZCBvbiAvL21lZGlhL2Jhc2Ugd2hpY2ggd2lsbCBwcm9wYWdhdGUgdGhpcyB0YXJnZXQgdG8gdGhlbS4KK2NvbXBvbmVudCgic2hhcmVkX21lbW9yeV9zdXBwb3J0IikgeworICBzb3VyY2VzID0gWworICAgICJiYXNlL2F1ZGlvX2J1cy5jYyIsCisgICAgImJhc2UvYXVkaW9fYnVzLmgiLAorICAgICJiYXNlL2F1ZGlvX2xhdGVuY3kuY2MiLAorICAgICJiYXNlL2F1ZGlvX2xhdGVuY3kuaCIsCisgICAgImJhc2UvYXVkaW9fcGFyYW1ldGVycy5jYyIsCisgICAgImJhc2UvYXVkaW9fcGFyYW1ldGVycy5oIiwKKyAgICAiYmFzZS9hdWRpb19wb2ludC5jYyIsCisgICAgImJhc2UvYXVkaW9fcG9pbnQuaCIsCisgICAgImJhc2UvYXVkaW9fc2FtcGxlX3R5cGVzLmgiLAorICAgICJiYXNlL2NoYW5uZWxfbGF5b3V0LmNjIiwKKyAgICAiYmFzZS9jaGFubmVsX2xheW91dC5oIiwKKyAgICAiYmFzZS9saW1pdHMuaCIsCisgICAgImJhc2UvbWVkaWFfc2htZW1fZXhwb3J0LmgiLAorICAgICJiYXNlL3NhbXBsZV9mb3JtYXQuY2MiLAorICAgICJiYXNlL3NhbXBsZV9mb3JtYXQuaCIsCisgICAgImJhc2UvdmVjdG9yX21hdGguY2MiLAorICAgICJiYXNlL3ZlY3Rvcl9tYXRoLmgiLAorICAgICJiYXNlL3ZlY3Rvcl9tYXRoX3Rlc3RpbmcuaCIsCisgICAgImJhc2UvdmlkZW9fdHlwZXMuY2MiLAorICAgICJiYXNlL3ZpZGVvX3R5cGVzLmgiLAorICBdCisgIGlmIChpc19tYWMpIHsKKyAgICAjIFRoZXNlIG5lZWQgdG8gYmUgaW5jbHVkZWQgaGVyZSBiZWNhdXNlIGF1ZGlvX2xhdGVuY3kuY2MgZGVwZW5kcyBvbiB0aGVtLgorICAgIHNvdXJjZXMgKz0gWworICAgICAgImJhc2UvbWFjL2F1ZGlvX2xhdGVuY3lfbWFjLmNjIiwKKyAgICAgICJiYXNlL21hYy9hdWRpb19sYXRlbmN5X21hYy5oIiwKKyAgICBdCisgIH0KKworICAjIERvIG5vdCB1c2UgInN1YmNvbXBvbmVudF9jb25maWciIGhlcmUgc2luY2UgdGhlc2UgZmlsZXMgYXJlIGluIHRoZWlyIG93bgorICAjIGNvbXBvbmVudCB0YXJnZXQgYW5kIHRodXMgY2FuJ3Qgc2hhcmUgdGhlIHN0YW5kYXJkIGV4cG9ydCBtYWNyb3MuCisgIGNvbmZpZ3MgKz0gWyAiOm1lZGlhX2NvbmZpZyIgXQorICBkZWZpbmVzID0gWyAiTUVESUFfU0hNRU1fSU1QTEVNRU5UQVRJT04iIF0KKworICBpZiAoIWlzX2RlYnVnKSB7CisgICAgY29uZmlncyAtPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpkZWZhdWx0X29wdGltaXphdGlvbiIgXQorICAgIGNvbmZpZ3MgKz0gWyAiLy9idWlsZC9jb25maWcvY29tcGlsZXI6b3B0aW1pemVfbWF4IiBdCisgIH0KKyAgZGVwcyA9IFsKKyAgICAiLy9iYXNlIiwKKyAgICAiLy9idWlsZDpjaHJvbWVvc19idWlsZGZsYWdzIiwKKyAgICAiLy91aS9nZngvZ2VvbWV0cnkiLAorICBdCit9CisKKyMgVE9ETyh3YXRrKTogUmVmYWN0b3IgdGVzdHMgdGhhdCBjb3VsZCBiZSBtYWRlIHRvIHJ1biBvbiBBbmRyb2lkLiBTZWUKKyMgaHR0cDovL2NyYnVnLmNvbS81NzA3NjIKK2lmIChtZWRpYV91c2VfZmZtcGVnICYmICFpc19hbmRyb2lkKSB7CisgIHRlc3QoImZmbXBlZ19yZWdyZXNzaW9uX3Rlc3RzIikgeworICAgIGNvbmZpZ3MgKz0gWyAiLy9tZWRpYTptZWRpYV9jb25maWciIF0KKworICAgIGRlcHMgPSBbCisgICAgICAiOnRlc3Rfc3VwcG9ydCIsCisgICAgICAiLy9iYXNlL3Rlc3Q6dGVzdF9zdXBwb3J0IiwKKyAgICAgICIvL21lZGlhL2ZmbXBlZzpmZm1wZWdfcmVncmVzc2lvbl90ZXN0cyIsCisgICAgICAiLy9tZWRpYS90ZXN0OnBpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3RzIiwKKyAgICAgICIvL21lZGlhL3Rlc3Q6cnVuX2FsbF91bml0dGVzdHMiLAorICAgICAgIi8vdGVzdGluZy9nbW9jayIsCisgICAgICAiLy90ZXN0aW5nL2d0ZXN0IiwKKyAgICAgICIvL3VpL2dmeDp0ZXN0X3N1cHBvcnQiLAorICAgICAgIi8vdWkvZ2Z4L2dlb21ldHJ5IiwKKyAgICBdCisgIH0KK30KKworaWYgKHByb3ByaWV0YXJ5X2NvZGVjcykgeworICBmdXp6ZXJfdGVzdCgibWVkaWFfY2VuY191dGlsc19mdXp6ZXIiKSB7CisgICAgc291cmNlcyA9IFsgImNkbS9jZW5jX3V0aWxzX2Z1enplcnRlc3QuY2MiIF0KKyAgICBkZXBzID0gWyAiOm1lZGlhIiBdCisgIH0KK30KKworZnV6emVyX3Rlc3QoIm1lZGlhX3ZwOV9wYXJzZXJfZnV6emVyIikgeworICBzb3VyY2VzID0gWyAiZmlsdGVycy92cDlfcGFyc2VyX2Z1enplcnRlc3QuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOnRlc3Rfc3VwcG9ydCIsCisgICAgIi8vYmFzZSIsCisgIF0KKyAgbGliZnV6emVyX29wdGlvbnMgPSBbICJtYXhfbGVuID0gNDAwMDAwIiBdCit9CisKK2Z1enplcl90ZXN0KCJtZWRpYV92cDlfcGFyc2VyX2VuY3J5cHRlZF9mdXp6ZXIiKSB7CisgIHNvdXJjZXMgPSBbICJmaWx0ZXJzL3ZwOV9wYXJzZXJfZW5jcnlwdGVkX2Z1enplcnRlc3QuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOnRlc3Rfc3VwcG9ydCIsCisgICAgIi8vYmFzZSIsCisgICAgIi8vYmFzZS90ZXN0OnRlc3Rfc3VwcG9ydCIsCisgIF0KKyAgc2VlZF9jb3JwdXMgPSAiLy9tZWRpYS90ZXN0L2RhdGEiCit9CisKK2Z1enplcl90ZXN0KCJtZWRpYV92cHhfdmlkZW9fZGVjb2Rlcl9mdXp6ZXIiKSB7CisgIHNvdXJjZXMgPSBbICJmaWx0ZXJzL3ZweF92aWRlb19kZWNvZGVyX2Z1enplcnRlc3QuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOm1lZGlhIiwKKyAgICAiLy9iYXNlIiwKKyAgICAiLy9iYXNlL3Rlc3Q6dGVzdF9zdXBwb3J0IiwKKyAgXQorICBsaWJmdXp6ZXJfb3B0aW9ucyA9IFsgIm1heF9sZW4gPSA0MDAwMDAiIF0KKyAgc2VlZF9jb3JwdXMgPSAiLy9tZWRpYS90ZXN0L2RhdGEiCit9CisKK2Z1enplcl90ZXN0KCJtZWRpYV93ZWJtX211eGVyX2Z1enplciIpIHsKKyAgc291cmNlcyA9IFsgIm11eGVycy93ZWJtX211eGVyX2Z1enplcnRlc3QuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOm1lZGlhIiwKKyAgICAiLy9iYXNlIiwKKyAgICAiLy90aGlyZF9wYXJ0eS9saWJ3ZWJtIiwKKyAgXQorfQorCitmdXp6ZXJfdGVzdCgiY2Jjc19kZWNyeXB0b3JfZnV6emVyIikgeworICBzb3VyY2VzID0gWyAiY2RtL2NiY3NfZGVjcnlwdG9yX2Z1enplci5jYyIgXQorICBkZXBzID0gWworICAgICI6bWVkaWEiLAorICAgICIvL2Jhc2UiLAorICAgICIvL2NyeXB0byIsCisgIF0KK30KKworZnV6emVyX3Rlc3QoImNlbmNfZGVjcnlwdG9yX2Z1enplciIpIHsKKyAgc291cmNlcyA9IFsgImNkbS9jZW5jX2RlY3J5cHRvcl9mdXp6ZXIuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOm1lZGlhIiwKKyAgICAiLy9iYXNlIiwKKyAgICAiLy9jcnlwdG8iLAorICBdCit9CisKK2Z1enplcl90ZXN0KCJqc29uX3dlYl9rZXlfZnV6emVyIikgeworICBzb3VyY2VzID0gWyAiY2RtL2pzb25fd2ViX2tleV9mdXp6ZXIuY2MiIF0KKyAgZGVwcyA9IFsKKyAgICAiOm1lZGlhIiwKKyAgICAiLy9iYXNlIiwKKyAgXQorfQorCitpZiAocHJvcHJpZXRhcnlfY29kZWNzKSB7CisgIGZ1enplcl90ZXN0KCJtZWRpYV9tcDRfYXZjY19wYXJzZXJfZnV6emVyIikgeworICAgIHNvdXJjZXMgPSBbICJmb3JtYXRzL21wNC9tcDRfYXZjY19wYXJzZXJfZnV6emVyLmNjIiBdCisgICAgZGVwcyA9IFsKKyAgICAgICI6bWVkaWEiLAorICAgICAgIi8vYmFzZSIsCisgICAgXQorICB9CisKKyAgZnV6emVyX3Rlc3QoIm1lZGlhX21wNF9ib3hfcmVhZGVyX2Z1enplciIpIHsKKyAgICBzb3VyY2VzID0gWyAiZm9ybWF0cy9tcDQvbXA0X2JveF9yZWFkZXJfZnV6emVyLmNjIiBdCisgICAgZGVwcyA9IFsKKyAgICAgICI6bWVkaWEiLAorICAgICAgIi8vYmFzZSIsCisgICAgXQorICAgIGxpYmZ1enplcl9vcHRpb25zID0gWyAibWF4X2xlbj01MDAiIF0KKyAgICBkaWN0ID0gInRlc3QvbXA0LmRpY3QiCisgIH0KK30KKworaWYgKGVuYWJsZV9tc2VfbXBlZzJ0c19zdHJlYW1fcGFyc2VyKSB7CisgIGZ1enplcl90ZXN0KCJtZWRpYV9lc19wYXJzZXJfYWR0c19mdXp6ZXIiKSB7CisgICAgc291cmNlcyA9IFsgImZvcm1hdHMvbXAydC9lc19wYXJzZXJfYWR0c19mdXp6ZXIuY2MiIF0KKyAgICBkZXBzID0gWworICAgICAgIjptZWRpYSIsCisgICAgICAiLy9iYXNlIiwKKyAgICBdCisgIH0KKworICBmdXp6ZXJfdGVzdCgibWVkaWFfZXNfcGFyc2VyX2gyNjRfZnV6emVyIikgeworICAgIHNvdXJjZXMgPSBbICJmb3JtYXRzL21wMnQvZXNfcGFyc2VyX2gyNjRfZnV6emVyLmNjIiBdCisgICAgZGVwcyA9IFsKKyAgICAgICI6bWVkaWEiLAorICAgICAgIi8vYmFzZSIsCisgICAgXQorICB9CisKKyAgZnV6emVyX3Rlc3QoIm1lZGlhX2VzX3BhcnNlcl9tcGVnMWF1ZGlvX2Z1enplciIpIHsKKyAgICBzb3VyY2VzID0gWyAiZm9ybWF0cy9tcDJ0L2VzX3BhcnNlcl9tcGVnMWF1ZGlvX2Z1enplci5jYyIgXQorICAgIGRlcHMgPSBbCisgICAgICAiOm1lZGlhIiwKKyAgICAgICIvL2Jhc2UiLAorICAgIF0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvTUVUQURBVEEgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9NRVRBREFUQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWM2MWIwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvTUVUQURBVEEKQEAgLTAsMCArMSwyMCBAQAorbmFtZTogIm1lZGlhIgorZGVzY3JpcHRpb246CisgICJTdWJ0cmVlIGF0IHRoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhIgorCit0aGlyZF9wYXJ0eSB7CisgIHVybCB7CisgICAgdHlwZTogTE9DQUxfU09VUkNFCisgICAgdmFsdWU6ICIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWFfbWlycm9yIgorICB9CisgIHVybCB7CisgICAgdHlwZTogR0lUCisgICAgdmFsdWU6ICJodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjLmdpdCIKKyAgfQorICB2ZXJzaW9uOiAiNGRjMmFmODdiM2E1ZmYxYzE0ODllYzY0MjQ5MWI1OWU5ODcyYWM4YiIKKyAgbGFzdF91cGdyYWRlX2RhdGUgeworICAgIHllYXI6IDIwMjIKKyAgICBtb250aDogMQorICAgIGRheTogMTEKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9iaW5kX3RvX2N1cnJlbnRfbG9vcC5oCmluZGV4IDRkZGY0ZmMuLmYzZTYzNDEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvYmluZF90b19jdXJyZW50X2xvb3AuaAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2JpbmRfdG9fY3VycmVudF9sb29wLmgKQEAgLTE1LDYgKzE1LDI0IEBACiAKIG5hbWVzcGFjZSBtZWRpYSB7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKwordGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CitpbmxpbmUgYmFzZTo6UmVwZWF0aW5nQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4gQmluZFRvQ3VycmVudExvb3AoCisgICAgYmFzZTo6UmVwZWF0aW5nQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4gY2IpIHsKKyAgcmV0dXJuIGJhc2U6OkJpbmRQb3N0VGFzayhiYXNlOjpTZXF1ZW5jZWRUYXNrUnVubmVySGFuZGxlOjpHZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2IpLCBGUk9NX0hFUkUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KK2lubGluZSBiYXNlOjpPbmNlQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4gQmluZFRvQ3VycmVudExvb3AoCisgICAgYmFzZTo6T25jZUNhbGxiYWNrPHZvaWQoQXJncy4uLik+IGNiKSB7CisgIHJldHVybiBiYXNlOjpCaW5kUG9zdFRhc2soYmFzZTo6U2VxdWVuY2VkVGFza1J1bm5lckhhbmRsZTo6R2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGNiKSwgRlJPTV9IRVJFKTsKK30KKworI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KIGlubGluZSBiYXNlOjpSZXBlYXRpbmdDYWxsYmFjazx2b2lkKEFyZ3MuLi4pPiBCaW5kVG9DdXJyZW50TG9vcCgKICAgICBiYXNlOjpSZXBlYXRpbmdDYWxsYmFjazx2b2lkKEFyZ3MuLi4pPiBjYiwKQEAgLTMxLDYgKzQ5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2IpLCBsb2NhdGlvbik7CiB9CiAKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCisKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYQogCiAjZW5kaWYgIC8vIE1FRElBX0JBU0VfQklORF9UT19DVVJSRU5UX0xPT1BfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmNjCmluZGV4IDk5NWUxMDQuLjdmOGQwOTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5jYwpAQCAtNyw5ICs3LDI0IEBACiAjaW5jbHVkZSA8c3N0cmVhbT4KIAogI2luY2x1ZGUgImJhc2UvZGVidWcvYWxpYXMuaCIKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAKIG5hbWVzcGFjZSBtZWRpYSB7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKworbmFtZXNwYWNlIHsKK0RlY29kZXJCdWZmZXI6OkFsbG9jYXRvciogc19hbGxvY2F0b3IgPSBudWxscHRyOworfSAgLy8gbmFtZXNwYWNlCisKKy8vIHN0YXRpYwordm9pZCBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3I6OlNldChBbGxvY2F0b3IqIGFsbG9jYXRvcikgeworICBzX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKK30KKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCisKIERlY29kZXJCdWZmZXI6OkRlY29kZXJCdWZmZXIoc2l6ZV90IHNpemUpCiAgICAgOiBzaXplXyhzaXplKSwgc2lkZV9kYXRhX3NpemVfKDApLCBpc19rZXlfZnJhbWVfKGZhbHNlKSB7CiAgIEluaXRpYWxpemUoKTsKQEAgLTI4LDcgKzQzLDExIEBACiAKICAgSW5pdGlhbGl6ZSgpOwogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIG1lbWNweShkYXRhXywgZGF0YSwgc2l6ZV8pOworI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICBtZW1jcHkoZGF0YV8uZ2V0KCksIGRhdGEsIHNpemVfKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgaWYgKCFzaWRlX2RhdGEpIHsKICAgICBDSEVDS19FUShzaWRlX2RhdGFfc2l6ZSwgMHUpOwpAQCAtMzksNiArNTgsNyBAQAogICBtZW1jcHkoc2lkZV9kYXRhXy5nZXQoKSwgc2lkZV9kYXRhLCBzaWRlX2RhdGFfc2l6ZV8pOwogfQogCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogRGVjb2RlckJ1ZmZlcjo6RGVjb2RlckJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhLCBzaXplX3Qgc2l6ZSkKICAgICA6IGRhdGFfKHN0ZDo6bW92ZShkYXRhKSksCiAgICAgICBzaXplXyhzaXplKSwKQEAgLTU5LDE0ICs3OSwzMSBAQAogICAgICAgc2lkZV9kYXRhX3NpemVfKDApLAogICAgICAgc2hhcmVkX21lbV9tYXBwaW5nXyhzdGQ6Om1vdmUoc2hhcmVkX21lbV9tYXBwaW5nKSksCiAgICAgICBpc19rZXlfZnJhbWVfKGZhbHNlKSB7fQorI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKIERlY29kZXJCdWZmZXI6On5EZWNvZGVyQnVmZmVyKCkgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBEQ0hFQ0soc19hbGxvY2F0b3IpOworICBzX2FsbG9jYXRvci0+RnJlZShkYXRhXywgYWxsb2NhdGVkX3NpemVfKTsKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgZGF0YV8ucmVzZXQoKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIHNpZGVfZGF0YV8ucmVzZXQoKTsKIH0KIAogdm9pZCBEZWNvZGVyQnVmZmVyOjpJbml0aWFsaXplKCkgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBEQ0hFQ0soc19hbGxvY2F0b3IpOworICBEQ0hFQ0soIWRhdGFfKTsKKyAgLy8gVE9ETyhiLzIzMDg4NzcwMyk6IENvbnNpZGVyIGRlcHJlY2F0ZSB0eXBlIHBhcmFtZXRlciB0bworICAvLyBgU2JNZWRpYUdldEJ1ZmZlckFsaWdubWVudCgpYC4KKyAgZGF0YV8gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oCisgICAgICAgICAgICAgIHNfYWxsb2NhdG9yLT5BbGxvY2F0ZSgKKyAgICAgICAgICAgICAgICAgIHNpemVfLCBTYk1lZGlhR2V0QnVmZmVyQWxpZ25tZW50KGtTYk1lZGlhVHlwZVZpZGVvKSkpOworICBhbGxvY2F0ZWRfc2l6ZV8gPSBzaXplXzsKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgZGF0YV8ucmVzZXQobmV3IHVpbnQ4X3Rbc2l6ZV9dKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIGlmIChzaWRlX2RhdGFfc2l6ZV8gPiAwKQogICAgIHNpZGVfZGF0YV8ucmVzZXQobmV3IHVpbnQ4X3Rbc2lkZV9kYXRhX3NpemVfXSk7CiB9CkBAIC05MSw2ICsxMjgsOCBAQAogICAgICAgbmV3IERlY29kZXJCdWZmZXIoZGF0YSwgZGF0YV9zaXplLCBzaWRlX2RhdGEsIHNpZGVfZGF0YV9zaXplKSk7CiB9CiAKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCisKIC8vIHN0YXRpYwogc2NvcGVkX3JlZnB0cjxEZWNvZGVyQnVmZmVyPiBEZWNvZGVyQnVmZmVyOjpGcm9tQXJyYXkoCiAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4gZGF0YSwKQEAgLTEzMSw2ICsxNzAsOCBAQAogICAgICAgbmV3IERlY29kZXJCdWZmZXIoc3RkOjptb3ZlKHVuYWxpZ25lZF9tYXBwaW5nKSwgc2l6ZSkpOwogfQogCisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKKwogLy8gc3RhdGljCiBzY29wZWRfcmVmcHRyPERlY29kZXJCdWZmZXI+IERlY29kZXJCdWZmZXI6OkNyZWF0ZUVPU0J1ZmZlcigpIHsKICAgcmV0dXJuIGJhc2U6OldyYXBSZWZDb3VudGVkKG5ldyBEZWNvZGVyQnVmZmVyKE5VTEwsIDAsIE5VTEwsIDApKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVjb2Rlcl9idWZmZXIuaAppbmRleCA5YTMwNWYzLi5lZDdjMDFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlY29kZXJfYnVmZmVyLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZWNvZGVyX2J1ZmZlci5oCkBAIC0yMSw3ICsyMSw5IEBACiAjaW5jbHVkZSAibWVkaWEvYmFzZS9kZWNyeXB0X2NvbmZpZy5oIgogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCiAjaW5jbHVkZSAibWVkaWEvYmFzZS90aW1lc3RhbXBfY29uc3RhbnRzLmgiCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvdW5hbGlnbmVkX3NoYXJlZF9tZW1vcnkuaCIKKyNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKQogCiBuYW1lc3BhY2UgbWVkaWEgewogCkBAIC00Miw2ICs0NCwyMSBAQAogI2VuZGlmCiAgIH07CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgY2xhc3MgQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAvLyBUaGUgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIHJldHVybiBudWxscHRyLiAgSXQgbWF5IHRlcm1pbmF0ZSB0aGUgYXBwIG9uCisgICAgICAvLyBhbGxvY2F0aW9uIGZhaWx1cmUuCisgICAgICB2aXJ0dWFsIHZvaWQqIEFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KSA9IDA7CisgICAgICB2aXJ0dWFsIHZvaWQgRnJlZSh2b2lkKiBwLCBzaXplX3Qgc2l6ZSkgPSAwOworCisgICAgcHJvdGVjdGVkOgorICAgICAgfkFsbG9jYXRvcigpIHt9CisKKyAgICAgIHN0YXRpYyB2b2lkIFNldChBbGxvY2F0b3IqIGFsbG9jYXRvcik7CisgIH07CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQorCiAgIC8vIEFsbG9jYXRlcyBidWZmZXIgd2l0aCB8c2l6ZXwgPj0gMC4gfGlzX2tleV9mcmFtZV98IHdpbGwgZGVmYXVsdCB0byBmYWxzZS4KICAgZXhwbGljaXQgRGVjb2RlckJ1ZmZlcihzaXplX3Qgc2l6ZSk7CiAKQEAgLTU5LDYgKzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogc2lkZV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2lkZV9kYXRhX3NpemUpOwogCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogICAvLyBDcmVhdGUgYSBEZWNvZGVyQnVmZmVyIHdoZXJlIGRhdGEoKSBvZiB8c2l6ZXwgYnl0ZXMgcmVzaWRlcyB3aXRoaW4gdGhlIGhlYXAKICAgLy8gYXMgYnl0ZSBhcnJheS4gVGhlIGJ1ZmZlcidzIHxpc19rZXlfZnJhbWVffCB3aWxsIGRlZmF1bHQgdG8gZmFsc2UuCiAgIC8vCkBAIC04Nyw2ICsxMDUsNyBAQAogICAgICAgYmFzZTo6UmVhZE9ubHlTaGFyZWRNZW1vcnlSZWdpb24gcmVnaW9uLAogICAgICAgb2ZmX3Qgb2Zmc2V0LAogICAgICAgc2l6ZV90IHNpemUpOworI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgLy8gQ3JlYXRlIGEgRGVjb2RlckJ1ZmZlciBpbmRpY2F0aW5nIHdlJ3ZlIHJlYWNoZWQgZW5kIG9mIHN0cmVhbS4KICAgLy8KQEAgLTExOCwxOSArMTM3LDI5IEBACiAKICAgY29uc3QgdWludDhfdCogZGF0YSgpIGNvbnN0IHsKICAgICBEQ0hFQ0soIWVuZF9vZl9zdHJlYW0oKSk7CisKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgICByZXR1cm4gZGF0YV87CisjZWxzZSAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgaWYgKHNoYXJlZF9tZW1fbWFwcGluZ18gJiYgc2hhcmVkX21lbV9tYXBwaW5nXy0+SXNWYWxpZCgpKQogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzaGFyZWRfbWVtX21hcHBpbmdfLT5tZW1vcnkoKSk7CiAgICAgaWYgKHNobV8pCiAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNobV8tPm1lbW9yeSgpKTsKICAgICByZXR1cm4gZGF0YV8uZ2V0KCk7CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICB9CiAKICAgLy8gVE9ETyhzYW5kZXJzZCk6IFJlbW92ZSB3cml0YWJsZV9kYXRhKCkuIGh0dHBzOi8vY3JidWcuY29tLzgzNDA4OAogICB1aW50OF90KiB3cml0YWJsZV9kYXRhKCkgY29uc3QgewogICAgIERDSEVDSyghZW5kX29mX3N0cmVhbSgpKTsKKworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIHJldHVybiBkYXRhXzsKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICBEQ0hFQ0soIXNobV8pOwogICAgIERDSEVDSyghc2hhcmVkX21lbV9tYXBwaW5nXyk7CiAgICAgcmV0dXJuIGRhdGFfLmdldCgpOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgfQogCiAgIHNpemVfdCBkYXRhX3NpemUoKSBjb25zdCB7CkBAIC0xNzIsNyArMjAxLDEyIEBACiAgIH0KIAogICAvLyBJZiB0aGVyZSdzIG5vIGRhdGEgaW4gdGhpcyBidWZmZXIsIGl0IHJlcHJlc2VudHMgZW5kIG9mIHN0cmVhbS4KKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgYm9vbCBlbmRfb2Zfc3RyZWFtKCkgY29uc3QgeyByZXR1cm4gIWRhdGFfOyB9CisgIHZvaWQgc2hyaW5rX3RvKHNpemVfdCBzaXplKSB7IERDSEVDS19MRShzaXplLCBzaXplXyk7IHNpemVfID0gc2l6ZTsgfQorI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICBib29sIGVuZF9vZl9zdHJlYW0oKSBjb25zdCB7IHJldHVybiAhc2hhcmVkX21lbV9tYXBwaW5nXyAmJiAhc2htXyAmJiAhZGF0YV87IH0KKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgYm9vbCBpc19rZXlfZnJhbWUoKSBjb25zdCB7CiAgICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtKCkpOwpAQCAtMjA1LDE3ICsyMzksMjUgQEAKICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBzaWRlX2RhdGEsCiAgICAgICAgICAgICAgICAgc2l6ZV90IHNpZGVfZGF0YV9zaXplKTsKIAorI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKICAgRGVjb2RlckJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhLCBzaXplX3Qgc2l6ZSk7CiAKICAgRGVjb2RlckJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8VW5hbGlnbmVkU2hhcmVkTWVtb3J5PiBzaG0sIHNpemVfdCBzaXplKTsKIAogICBEZWNvZGVyQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxSZWFkT25seVVuYWxpZ25lZE1hcHBpbmc+IHNoYXJlZF9tZW1fbWFwcGluZywKICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKIAogICB2aXJ0dWFsIH5EZWNvZGVyQnVmZmVyKCk7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gRW5jb2RlZCBkYXRhLCBhbGxvY2F0ZWQgZnJvbSBEZWNvZGVyQnVmZmVyOjpBbGxvY2F0b3IuCisgIHVpbnQ4X3QqIGRhdGFfID0gbnVsbHB0cjsKKyAgc2l6ZV90IGFsbG9jYXRlZF9zaXplXyA9IDA7CisjZWxzZSAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIC8vIEVuY29kZWQgZGF0YSwgaWYgaXQgaXMgc3RvcmVkIG9uIHRoZSBoZWFwLgogICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhXzsKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAKICBwcml2YXRlOgogICAvLyBQcmVzZW50YXRpb24gdGltZSBvZiB0aGUgZnJhbWUuCkBAIC0yMzAsMTEgKzI3MiwxMyBAQAogICBzaXplX3Qgc2lkZV9kYXRhX3NpemVfOwogICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBzaWRlX2RhdGFfOwogCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogICAvLyBFbmNvZGVkIGRhdGEsIGlmIGl0IGlzIHN0b3JlZCBpbiBhIHNoYXJlZCBtZW1vcnkgbWFwcGluZy4KICAgc3RkOjp1bmlxdWVfcHRyPFJlYWRPbmx5VW5hbGlnbmVkTWFwcGluZz4gc2hhcmVkX21lbV9tYXBwaW5nXzsKIAogICAvLyBFbmNvZGVkIGRhdGEsIGlmIGl0IGlzIHN0b3JlZCBpbiBTSE0uCiAgIHN0ZDo6dW5pcXVlX3B0cjxVbmFsaWduZWRTaGFyZWRNZW1vcnk+IHNobV87CisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKIAogICAvLyBFbmNyeXB0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBlbmNvZGVkIGRhdGEuCiAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNyeXB0Q29uZmlnPiBkZWNyeXB0X2NvbmZpZ187CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlbXV4ZXJfbWVtb3J5X2xpbWl0X3N0YXJib2FyZC5jYyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlcl9tZW1vcnlfbGltaXRfc3RhcmJvYXJkLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjIyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlbXV4ZXJfbWVtb3J5X2xpbWl0X3N0YXJib2FyZC5jYwpAQCAtMCwwICsxLDgyIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpbmNsdWRlICJtZWRpYS9iYXNlL2RlbXV4ZXJfbWVtb3J5X2xpbWl0LmgiCisjaW5jbHVkZSAibWVkaWEvYmFzZS92aWRlb19jb2RlY3MuaCIKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKworbmFtZXNwYWNlIG1lZGlhIHsKK25hbWVzcGFjZSB7CisKKy8vIFRPRE8oYi8yMzEzNzU4NzEpOiBNb3ZlIHRoaXMgdG8gdmlkZW9fY29kZWNzLmguICBBbHNvIGNvbnNpZGVyIHJlbW92ZQorLy8gc3RhcmJvYXJkX3V0aWxzLiogYW5kIG1vdmUgdGhlIGZ1bmN0aW9ucyB0byBpbmRpdmlkdWFsIGZpbGVzLgorU2JNZWRpYVZpZGVvQ29kZWMgTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyhWaWRlb0NvZGVjIGNvZGVjKSB7CisgIHN3aXRjaCAoY29kZWMpIHsKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtIMjY0OgorICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQ7CisgICAgY2FzZSBWaWRlb0NvZGVjOjprVkMxOgorICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY1ZjMTsKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtNUEVHMjoKKyAgICAgIHJldHVybiBrU2JNZWRpYVZpZGVvQ29kZWNNcGVnMjsKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtUaGVvcmE6CisgICAgICByZXR1cm4ga1NiTWVkaWFWaWRlb0NvZGVjVGhlb3JhOworICAgIGNhc2UgVmlkZW9Db2RlYzo6a1ZQODoKKyAgICAgIHJldHVybiBrU2JNZWRpYVZpZGVvQ29kZWNWcDg7CisgICAgY2FzZSBWaWRlb0NvZGVjOjprVlA5OgorICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY1ZwOTsKKyAgICBjYXNlIFZpZGVvQ29kZWM6OmtIRVZDOgorICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0gyNjU7CisgICAgY2FzZSBWaWRlb0NvZGVjOjprQVYxOgorICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY0F2MTsKKyAgICBkZWZhdWx0OgorICAgICAgLy8gQ29iYWx0IG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdmlkZW8gY29kZWNzIGRlZmluZWQgYnkgQ2hyb21pdW0uCisgICAgICBETE9HKEVSUk9SKSA8PCAiVW5zdXBwb3J0ZWQgdmlkZW8gY29kZWMgIiA8PCBHZXRDb2RlY05hbWUoY29kZWMpOworICAgICAgcmV0dXJuIGtTYk1lZGlhVmlkZW9Db2RlY05vbmU7CisgIH0KKyAgTk9UUkVBQ0hFRCgpOworICByZXR1cm4ga1NiTWVkaWFWaWRlb0NvZGVjTm9uZTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK3NpemVfdCBHZXREZW11eGVyU3RyZWFtQXVkaW9NZW1vcnlMaW1pdCgKKyAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcqIC8qYXVkaW9fY29uZmlnKi8pIHsKKyAgcmV0dXJuIFNiTWVkaWFHZXRBdWRpb0J1ZmZlckJ1ZGdldCgpOworfQorCitzaXplX3QgR2V0RGVtdXhlclN0cmVhbVZpZGVvTWVtb3J5TGltaXQoCisgICAgRGVtdXhlcjo6RGVtdXhlclR5cGVzIC8qZGVtdXhlcl90eXBlKi8sCisgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnKiB2aWRlb19jb25maWcpIHsKKyAgaWYgKCF2aWRlb19jb25maWcpIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PigKKyAgICAgICAgU2JNZWRpYUdldFZpZGVvQnVmZmVyQnVkZ2V0KGtTYk1lZGlhVmlkZW9Db2RlY0gyNjQsIDE5MjAsIDEwODAsIDgpKTsKKyAgfQorCisgIGF1dG8gd2lkdGggPSB2aWRlb19jb25maWctPnZpc2libGVfcmVjdCgpLnNpemUoKS53aWR0aCgpOworICBhdXRvIGhlaWdodCA9IHZpZGVvX2NvbmZpZy0+dmlzaWJsZV9yZWN0KCkuc2l6ZSgpLmhlaWdodCgpOworICAvLyBUT0RPKGIvMjMwNzk5ODE1Xyk6IEVuc3VyZSB8Yml0c19wZXJfcGl4ZWx8IGFsd2F5cyBjb250YWlucyBhIHZhbGlkIHZhbHVlLAorICAvLyBvciBjb25zaWRlciBkZXByZWNhdGluZyBpdCBmcm9tIGBTYk1lZGlhR2V0VmlkZW9CdWZmZXJCdWRnZXQoKWAuCisgIGF1dG8gYml0c19wZXJfcGl4ZWwgPSAwOworICBhdXRvIGNvZGVjID0gTWVkaWFWaWRlb0NvZGVjVG9TYk1lZGlhVmlkZW9Db2RlYyh2aWRlb19jb25maWctPmNvZGVjKCkpOworICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PigKKyAgICAgIFNiTWVkaWFHZXRWaWRlb0J1ZmZlckJ1ZGdldChjb2RlYywgd2lkdGgsIGhlaWdodCwgYml0c19wZXJfcGl4ZWwpKTsKK30KKworc2l6ZV90IEdldERlbXV4ZXJNZW1vcnlMaW1pdChEZW11eGVyOjpEZW11eGVyVHlwZXMgZGVtdXhlcl90eXBlKSB7CisgIHJldHVybiBHZXREZW11eGVyU3RyZWFtQXVkaW9NZW1vcnlMaW1pdChudWxscHRyKSArCisgICAgICAgICBHZXREZW11eGVyU3RyZWFtVmlkZW9NZW1vcnlMaW1pdChkZW11eGVyX3R5cGUsIG51bGxwdHIpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbWVkaWEKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvZGVtdXhlcl9zdHJlYW0uaAppbmRleCAzYjEwNTIzLi45YTMxYzI0IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL2RlbXV4ZXJfc3RyZWFtLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9kZW11eGVyX3N0cmVhbS5oCkBAIC02NCw2ICs2NCwxMCBAQAogCiAgIHN0YXRpYyBjb25zdCBjaGFyKiBHZXRTdGF0dXNOYW1lKFN0YXR1cyBzdGF0dXMpOwogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWltZV90eXBlKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQorCiAgIC8vIFJlcXVlc3QgYSBidWZmZXIgdG8gcmV0dXJuZWQgdmlhIHRoZSBwcm92aWRlZCBjYWxsYmFjay4KICAgLy8KICAgLy8gVGhlIGZpcnN0IHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIHN0YXR1cyBvZiB0aGUgcmVhZC4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX2xvZy5oCmluZGV4IDRjZjU1ZWIuLjg5ZDQ0YmUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfbG9nLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9sb2cuaApAQCAtMzAsNiArMzAsMzkgQEAKIAogbmFtZXNwYWNlIG1lZGlhIHsKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorCisvLyBBIHN0dWIgTWVkaWFMb2cgaW1wbGVtZW50YXRpb24uCisvLyBUT0RPKGIvMjMwOTE2MjE4KTogQ29uc2lkZXIgbWFraW5nIHVzZSBvZiBNZWRpYUxvZyBmb3IgZGVidWdnaW5nLgorY2xhc3MgTUVESUFfRVhQT1JUIE1lZGlhTG9nIHsKK3B1YmxpYzogIHRlbXBsYXRlIDxNZWRpYUxvZ1Byb3BlcnR5IFAsIHR5cGVuYW1lIFQ+CisgIHZvaWQgU2V0UHJvcGVydHkoY29uc3QgVCYgdmFsdWUpIHt9CisgIE1lZGlhTG9nKCkge30KKyAgdmlydHVhbCB+TWVkaWFMb2coKSB7fQorCisgIHZpcnR1YWwgdm9pZCBBZGRMb2dSZWNvcmRMb2NrZWQoCisgICAgICBzdGQ6OnVuaXF1ZV9wdHI8bWVkaWE6Ok1lZGlhTG9nUmVjb3JkPiBldmVudCkgeworICAgIE5PVFJFQUNIRUQoKTsKKyAgfQorCisgIHRlbXBsYXRlIDxNZWRpYUxvZ0V2ZW50IEUsIHR5cGVuYW1lLi4uIFQ+CisgIHZvaWQgQWRkRXZlbnQoY29uc3QgVCYuLi4gdmFsdWUpIHsKKyAgfQorCisgIHRlbXBsYXRlIDxNZWRpYUxvZ0V2ZW50IEUsIHR5cGVuYW1lLi4uIFQ+CisgIGludCBDcmVhdGVFdmVudChjb25zdCBUJi4uLiB2YWx1ZSkgeworICAgIHJldHVybiAwOworICB9CisKKyAgdm9pZCBOb3RpZnlFcnJvcihQaXBlbGluZVN0YXR1cyBzdGF0dXMpIHt9Cit9OworCisjZGVmaW5lIE1FRElBX0xPRyhsZXZlbCwgbWVkaWFfbG9nKSBMT0coSU5GTykKKworI2RlZmluZSBMSU1JVEVEX01FRElBX0xPRyhsZXZlbCwgbWVkaWFfbG9nLCBjb3VudCwgbWF4KSBETE9HKElORk8pCisKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKKwogLy8gSW50ZXJmYWNlIGZvciBtZWRpYSBjb21wb25lbnRzIHRvIGxvZyB0byBjaHJvbWU6Ly9tZWRpYS1pbnRlcm5hbHMgbG9nLgogLy8KIC8vIFRvIHByb3ZpZGUgYSBsb2dnaW5nIGltcGxlbWVudGF0aW9uLCBkZXJpdmUgZnJvbSBNZWRpYUxvZyBpbnN0ZWFkLgpAQCAtMjQwLDYgKzI3Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heSBiZSBzdXBwcmVzc2VkKTogIiAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiIpCiAKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCisKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYQogCiAjZW5kaWYgIC8vIE1FRElBX0JBU0VfTUVESUFfTE9HX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX3NlcmlhbGl6ZXJzLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX3NlcmlhbGl6ZXJzLmgKaW5kZXggYjQ0ZGEyNy4uZDUxYTYyMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9zZXJpYWxpemVycy5oCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfc2VyaWFsaXplcnMuaApAQCAtNTQsMTAgKzU0LDE1IEBACiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmVjVHlwZT4KIHN0cnVjdCBNZWRpYVNlcmlhbGl6ZXI8c3RkOjp2ZWN0b3I8VmVjVHlwZT4+IHsKICAgc3RhdGljIGJhc2U6OlZhbHVlIFNlcmlhbGl6ZShjb25zdCBzdGQ6OnZlY3RvcjxWZWNUeXBlPiYgdmVjKSB7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgTk9UUkVBQ0hFRCgpOworICAgIHJldHVybiBiYXNlOjpWYWx1ZSgpOworI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICAgIGJhc2U6OlZhbHVlIHJlc3VsdChiYXNlOjpWYWx1ZTo6VHlwZTo6TElTVCk7CiAgICAgZm9yIChjb25zdCBWZWNUeXBlJiB2YWx1ZSA6IHZlYykKICAgICAgIHJlc3VsdC5BcHBlbmQoTWVkaWFTZXJpYWxpemVyPFZlY1R5cGU+OjpTZXJpYWxpemUodmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgfQogfTsKIApAQCAtMzA4LDcgKzMxMywxMiBAQAogICAgIC8vIGRlZmluZWQgZm9yIGludDY0X3QsIChsb25nIHZzIGxvbmcgbG9uZykgc28gZm9ybWF0IHNwZWNpZmllcnMgZG9udCB3b3JrLgogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBwcmVyb2xsOwogICAgIHByZXJvbGwgPDwgdmFsdWUuc2Vla19wcmVyb2xsKCkuSW5NaWNyb3NlY29uZHMoKSA8PCAidXMiOworCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgcmVzdWx0LlNldEtleSgic2VlayBwcmVyb2xsIiwgYmFzZTo6VmFsdWUocHJlcm9sbC5zdHIoKSkpOworI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICAgIHJlc3VsdC5TZXRTdHJpbmdLZXkoInNlZWsgcHJlcm9sbCIsIHByZXJvbGwuc3RyKCkpOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKIAogICAgIHJldHVybiByZXN1bHQ7CiAgIH0KQEAgLTQyNCw4ICs0MzQsMTMgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgaWYgKFQgPT0gU2VyaWFsaXphYmxlQnVmZmVyaW5nU3RhdGVUeXBlOjprUGlwZWxpbmUpCisgICAgICByZXN1bHQuU2V0S2V5KCJmb3Jfc3VzcGVuZGVkX3N0YXJ0IiwgYmFzZTo6VmFsdWUodmFsdWUuc3VzcGVuZGVkX3N0YXJ0KSk7CisjZWxzZSAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgaWYgKFQgPT0gU2VyaWFsaXphYmxlQnVmZmVyaW5nU3RhdGVUeXBlOjprUGlwZWxpbmUpCiAgICAgICByZXN1bHQuU2V0Qm9vbEtleSgiZm9yX3N1c3BlbmRlZF9zdGFydCIsIHZhbHVlLnN1c3BlbmRlZF9zdGFydCk7CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogCiAgICAgcmV0dXJuIHJlc3VsdDsKICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9zd2l0Y2hlcy5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9tZWRpYV9zd2l0Y2hlcy5oCmluZGV4IGUwOTYyMGUuLmZhMjYzMzAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWVkaWFfc3dpdGNoZXMuaAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21lZGlhX3N3aXRjaGVzLmgKQEAgLTI3MywxMCArMjczLDEyIEBACiAgIGtIZXVyaXN0aWMsCiB9OwogCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogLy8gRmVhdHVyZSBwYXJhbSB1c2VkIHRvIGZvcmNlIGRlZmF1bHQgcGluL3VucGluIGZvciBnbG9iYWwgbWVkaWEgY29udHJvbHMgaW4KIC8vIENyT1MuCiBNRURJQV9FWFBPUlQgZXh0ZXJuIGNvbnN0IGJhc2U6OkZlYXR1cmVQYXJhbTxrQ3Jvc0dsb2JhbE1lZGlhQ29udHJvbHNQaW5PcHRpb25zPgogICAgIGtDcm9zR2xvYmFsTWVkaWFDb250cm9sc1BpblBhcmFtOworI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKIH0gIC8vIG5hbWVzcGFjZSBtZWRpYQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL21pbWVfdXRpbF9pbnRlcm5hbC5jYyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmNjCmluZGV4IDJhMGVlMDUuLmEwOGFjYmMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmNjCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvbWltZV91dGlsX2ludGVybmFsLmNjCkBAIC02MzIsMTAgKzYzMiwxNCBAQAogICAgICAgcmV0dXJuIGlzX2VuY3J5cHRlZCA/IHBsYXRmb3JtX2luZm8uaGFzX3BsYXRmb3JtX3ZwOF9kZWNvZGVyIDogdHJ1ZTsKIAogICAgIGNhc2UgVlA5OiB7CisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQorICAgICAgLy8gQ29iYWx0IGRvZXNuJ3Qgc3VwcG9ydCBga1JlcG9ydFZwOUFzQW5VbnN1cHBvcnRlZE1pbWVUeXBlYCBjb21tYW5kIGxpbmUKKyAgICAgIC8vIHN3aXRjaC4KICAgICAgIGlmIChiYXNlOjpDb21tYW5kTGluZTo6Rm9yQ3VycmVudFByb2Nlc3MoKS0+SGFzU3dpdGNoKAogICAgICAgICAgICAgICBzd2l0Y2hlczo6a1JlcG9ydFZwOUFzQW5VbnN1cHBvcnRlZE1pbWVUeXBlKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKIAogICAgICAgLy8gSWYgY2xlYXIsIHRoZSB1bmlmaWVkIHBpcGVsaW5lIGNhbiBhbHdheXMgZGVjb2RlIFZQOS4wLDEgaW4gc29mdHdhcmUuCiAgICAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHRoZSBwcm9maWxlLCB0aGVuIHN1cHBvcnQgaXMgYW1iaWd1b3VzLCBidXQgZGVmYXVsdCB0bwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5jYwppbmRleCA3ZTQzOWYyLi4zZTQ4NjFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5jYworKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5jYwpAQCAtOTQsNiArOTQsMTEgQEAKICAgICAgIHJldHVybiBTdGF0dXNDb2RlOjprUGlwZWxpbmVFcnJvckRlbXV4ZXJFcnJvckRldGVjdGVkSExTOwogICAgIGNhc2UgUElQRUxJTkVfRVJST1JfSEFSRFdBUkVfQ09OVEVYVF9SRVNFVDoKICAgICAgIHJldHVybiBTdGF0dXNDb2RlOjprUGlwZWxpbmVFcnJvckhhcmR3YXJlQ29udGV4dFJlc2V0OworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIGNhc2UgUExBWUJBQ0tfQ0FQQUJJTElUWV9DSEFOR0VEOgorICAgICAgTk9UUkVBQ0hFRCgpOworICAgICAgcmV0dXJuIFN0YXR1c0NvZGU6OmtQaXBlbGluZUVycm9yRGVjb2RlOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgfQogCiAgIE5PVFJFQUNIRUQoKTsKQEAgLTEyNyw2ICsxMzIsOSBAQAogICAgIFNUUklOR0lGWV9TVEFUVVNfQ0FTRShDSFVOS19ERU1VWEVSX0VSUk9SX0VPU19TVEFUVVNfREVDT0RFX0VSUk9SKTsKICAgICBTVFJJTkdJRllfU1RBVFVTX0NBU0UoQ0hVTktfREVNVVhFUl9FUlJPUl9FT1NfU1RBVFVTX05FVFdPUktfRVJST1IpOwogICAgIFNUUklOR0lGWV9TVEFUVVNfQ0FTRShBVURJT19SRU5ERVJFUl9FUlJPUik7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgU1RSSU5HSUZZX1NUQVRVU19DQVNFKFBMQVlCQUNLX0NBUEFCSUxJVFlfQ0hBTkdFRCk7CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICB9CiAKICN1bmRlZiBTVFJJTkdJRllfU1RBVFVTX0NBU0UKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3BpcGVsaW5lX3N0YXR1cy5oCmluZGV4IDg4YjZjOGMuLjliNTNkNzggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9waXBlbGluZV9zdGF0dXMuaApAQCAtNjMsNiArNjMsMTEgQEAKICAgLy8gaHR0cHM6Ly9jcmJ1Zy5jb20vMTIwODYxOAogICBQSVBFTElORV9FUlJPUl9IQVJEV0FSRV9DT05URVhUX1JFU0VUID0gMjMsCiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gVHJhbnNpZW50IGVycm9ycy4KKyAgUExBWUJBQ0tfQ0FQQUJJTElUWV9DSEFOR0VEID0gMjQsCisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQorCiAgIC8vIE11c3QgYmUgZXF1YWwgdG8gdGhlIGxhcmdlc3QgdmFsdWUgZXZlciBsb2dnZWQuCiAgIFBJUEVMSU5FX1NUQVRVU19NQVggPSBQSVBFTElORV9FUlJPUl9IQVJEV0FSRV9DT05URVhUX1JFU0VULAogfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2Uvc3RhdHVzLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N0YXR1cy5oCmluZGV4IGNlZDljNmUuLjYxMDFlM2YgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2Uvc3RhdHVzLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9zdGF0dXMuaApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCiAjaW5jbHVkZSAibWVkaWEvYmFzZS9tZWRpYV9zZXJpYWxpemVyc19iYXNlLmgiCiAjaW5jbHVkZSAibWVkaWEvYmFzZS9zdGF0dXNfY29kZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9hYnNlaWwtY3BwL2Fic2wvdHlwZXMvb3B0aW9uYWwuaCIKIAogLy8gTW9qbyBuYW1lc3BhY2VzIGZvciBzZXJpYWxpemF0aW9uIGZyaWVuZCBkZWNsYXJhdGlvbnMuCiBuYW1lc3BhY2UgbW9qbyB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmgKaW5kZXggMDk5OWQ4ZS4uNjAzY2YxYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaApAQCAtNjMsNyArNjMsOSBAQAogICB9CiAKICAgZG91YmxlIG9wZXJhdG9yLyhiYXNlOjpUaW1lRGVsdGEgcmhzKSBjb25zdCB7IHJldHVybiB0c18gLyByaHM7IH0KKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAgIGludDY0X3QgSW50RGl2KGJhc2U6OlRpbWVEZWx0YSByaHMpIGNvbnN0IHsgcmV0dXJuIHRzXy5JbnREaXYocmhzKTsgfQorI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgc3RhdGljIERlY29kZVRpbWVzdGFtcCBGcm9tU2Vjb25kc0QoZG91YmxlIHNlY29uZHMpIHsKICAgICByZXR1cm4gRGVjb2RlVGltZXN0YW1wKGJhc2U6OlNlY29uZHMoc2Vjb25kcykpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvYmFzZS9zdXBwb3J0ZWRfdHlwZXMuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N1cHBvcnRlZF90eXBlcy5jYwppbmRleCA5YzRlMmVhLi42NDY5ZWFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N1cHBvcnRlZF90eXBlcy5jYworKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9iYXNlL3N1cHBvcnRlZF90eXBlcy5jYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfY2xpZW50LmgiCiAjaW5jbHVkZSAibWVkaWEvYmFzZS9tZWRpYV9zd2l0Y2hlcy5oIgogI2luY2x1ZGUgIm1lZGlhL21lZGlhX2J1aWxkZmxhZ3MuaCIKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAjaW5jbHVkZSAidWkvZGlzcGxheS9kaXNwbGF5X3N3aXRjaGVzLmgiCiAKICNpZiBCVUlMREZMQUcoRU5BQkxFX0xJQlZQWCkKQEAgLTI0LDYgKzI1LDggQEAKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ2cHgvc291cmNlL2xpYnZweC92cHgvdnB4X2NvZGVjLmgiCiAjZW5kaWYKIAorI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCisKICNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCiAjaW5jbHVkZSAiYmFzZS9hbmRyb2lkL2J1aWxkX2luZm8uaCIKIApAQCAtNzgsMTcgKzgxLDIxIEBACiB9ICAvLyBuYW1lc3BhY2UKIAogYm9vbCBJc1N1cHBvcnRlZEF1ZGlvVHlwZShjb25zdCBBdWRpb1R5cGUmIHR5cGUpIHsKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAgIE1lZGlhQ2xpZW50KiBtZWRpYV9jbGllbnQgPSBHZXRNZWRpYUNsaWVudCgpOwogICBpZiAobWVkaWFfY2xpZW50KQogICAgIHJldHVybiBtZWRpYV9jbGllbnQtPklzU3VwcG9ydGVkQXVkaW9UeXBlKHR5cGUpOworI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgcmV0dXJuIElzRGVmYXVsdFN1cHBvcnRlZEF1ZGlvVHlwZSh0eXBlKTsKIH0KIAogYm9vbCBJc1N1cHBvcnRlZFZpZGVvVHlwZShjb25zdCBWaWRlb1R5cGUmIHR5cGUpIHsKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAgIE1lZGlhQ2xpZW50KiBtZWRpYV9jbGllbnQgPSBHZXRNZWRpYUNsaWVudCgpOwogICBpZiAobWVkaWFfY2xpZW50KQogICAgIHJldHVybiBtZWRpYV9jbGllbnQtPklzU3VwcG9ydGVkVmlkZW9UeXBlKHR5cGUpOworI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKICAgcmV0dXJuIElzRGVmYXVsdFN1cHBvcnRlZFZpZGVvVHlwZSh0eXBlKTsKIH0KQEAgLTE3Niw2ICsxODMsMTIgQEAKIH0KIAogYm9vbCBJc1ZwOVByb2ZpbGVTdXBwb3J0ZWQoVmlkZW9Db2RlY1Byb2ZpbGUgcHJvZmlsZSkgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAvLyBBc3N1bWUgYWxsIHByb2ZpbGVzIGFyZSBzdXBwb3J0ZWQsIGFuZCBsZXQgdGhlIFN0YXJib2FyZCBpbXBsZW1lbnRhdGlvbiB0bworICAvLyBmaWx0ZXIgaXQgb3V0LgorICByZXR1cm4gcHJvZmlsZSA9PSBWUDlQUk9GSUxFX1BST0ZJTEUwIHx8IHByb2ZpbGUgPT0gVlA5UFJPRklMRV9QUk9GSUxFMSB8fAorICAgICAgICAgcHJvZmlsZSA9PSBWUDlQUk9GSUxFX1BST0ZJTEUyIHx8IHByb2ZpbGUgPT0gVlA5UFJPRklMRV9QUk9GSUxFMzsKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICNpZiBCVUlMREZMQUcoRU5BQkxFX0xJQlZQWCkKICAgLy8gSGlnaCBiaXQgZGVwdGggY2FwYWJpbGl0aWVzIG1heSBiZSB0b2dnbGVkIHZpYSBMaWJWUFggY29uZmlnIGZsYWdzLgogICBzdGF0aWMgY29uc3QgYm9vbCB2cHhfc3VwcG9ydHNfaGJkID0gKHZweF9jb2RlY19nZXRfY2Fwcyh2cHhfY29kZWNfdnA5X2R4KCkpICYKQEAgLTIwMiw2ICsyMTUsNyBAQAogICB9CiAjZW5kaWYKICAgcmV0dXJuIGZhbHNlOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKIH0KIAogYm9vbCBJc0F1ZGlvQ29kZWNQcm9wcmlldGFyeShBdWRpb0NvZGVjIGNvZGVjKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9iaW5kX3Bvc3RfdGFzay5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvYmluZF9wb3N0X3Rhc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE0ZThhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvYmluZF9wb3N0X3Rhc2suaApAQCAtMCwwICsxLDEzMSBAQAorLy8gQ29weXJpZ2h0IDIwMjAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaWZuZGVmIEJBU0VfQklORF9QT1NUX1RBU0tfSF8KKyNkZWZpbmUgQkFTRV9CSU5EX1BPU1RfVEFTS19IXworCisjaW5jbHVkZSAiYmFzZS9sb2NhdGlvbi5oIgorCituYW1lc3BhY2UgYmFzZSB7CisKKy8vIEhlbHBlciBjbGFzcyB0byBlbnN1cmUgdGhhdCB0aGUgaW5wdXQgY2FsbGJhY2sgaXMgYWx3YXlzIGludm9rZWQgYW5kCisvLyBkZXN0cm95ZWQgb24gdGhlIHByb3ZpZGVkIHRhc2sgcnVubmVyLgordGVtcGxhdGUgPHR5cGVuYW1lIENhbGxiYWNrVHlwZT4KK2NsYXNzIEJpbmRQb3N0VGFza1RyYW1wb2xpbmUgeworIHB1YmxpYzoKKyAgQmluZFBvc3RUYXNrVHJhbXBvbGluZShzY29wZWRfcmVmcHRyPGJhc2U6OlRhc2tSdW5uZXI+IHRhc2tfcnVubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U6OkxvY2F0aW9uJiBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYmFja1R5cGUgY2FsbGJhY2spCisgICAgICA6IHRhc2tfcnVubmVyXyhzdGQ6Om1vdmUodGFza19ydW5uZXIpKSwKKyAgICAgICAgbG9jYXRpb25fKGxvY2F0aW9uKSwKKyAgICAgICAgY2FsbGJhY2tfKHN0ZDo6bW92ZShjYWxsYmFjaykpIHsKKyAgICBEQ0hFQ0sodGFza19ydW5uZXJfKTsKKyAgICAvLyBDcmFzaCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHdoZW4gdHJ5aW5nIHRvIFJ1bigpIGBjYWxsYmFja19gIG9uIHRoZQorICAgIC8vIGRlc3RpbmF0aW9uIGB0YXNrX3J1bm5lcl9gLgorICAgIENIRUNLKGNhbGxiYWNrXyk7CisgIH0KKworICBCaW5kUG9zdFRhc2tUcmFtcG9saW5lKGNvbnN0IEJpbmRQb3N0VGFza1RyYW1wb2xpbmUmIG90aGVyKSA9IGRlbGV0ZTsKKyAgQmluZFBvc3RUYXNrVHJhbXBvbGluZSYgb3BlcmF0b3I9KGNvbnN0IEJpbmRQb3N0VGFza1RyYW1wb2xpbmUmIG90aGVyKSA9CisgICAgICBkZWxldGU7CisKKyAgfkJpbmRQb3N0VGFza1RyYW1wb2xpbmUoKSB7CisgICAgaWYgKGNhbGxiYWNrXykgeworICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gZW5zdXJlIHRoYXQgYGNhbGxiYWNrX2AgaXMgZGVzdHJveWVkIG9uIGB0YXNrX3J1bm5lcl9gLgorICAgICAgLy8gVGhlIGNhbGxiYWNrJ3MgQmluZFN0YXRlIG1heSBvd24gYW4gb2JqZWN0IHRoYXQgaXNuJ3QgdGhyZWFkc2FmZSBhbmQgaXMKKyAgICAgIC8vIHVuc2FmZSB0byBkZXN0cm95IG9uIGEgZGlmZmVyZW50IHRhc2sgcnVubmVyLgorICAgICAgLy8KKyAgICAgIC8vIE5vdGUgdGhhdCB3aGlsZSB0aGlzIGd1YXJhbnRlZXMgYGNhbGxiYWNrX2Agd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUKKyAgICAgIC8vIHBvc3RlZCB0YXNrIHJ1bnMsIGl0IGRvZXNuJ3QgZ3VhcmFudGVlIHRoZSByZWYtY291bnRlZCBCaW5kU3RhdGUgaXMKKyAgICAgIC8vIGRlc3Ryb3llZCBhdCB0aGUgc2FtZSB0aW1lLiBJZiB0aGUgY2FsbGJhY2sgd2FzIGNvcGllZCBiZWZvcmUgYmVpbmcKKyAgICAgIC8vIHBhc3NlZCB0byBCaW5kUG9zdFRhc2tUcmFtcG9saW5lIHRoZW4gdGhlIEJpbmRTdGF0ZSBjYW4gb3V0bGl2ZQorICAgICAgLy8gYGNhbGxiYWNrX2AsIHNvIHRoZSB1c2VyIG11c3QgZW5zdXJlIGFueSBvdGhlciBjb3BpZXMgb2YgdGhlIGNhbGxiYWNrCisgICAgICAvLyBhcmUgYWxzbyBkZXN0cm95ZWQgb24gdGhlIGNvcnJlY3QgdGFzayBydW5uZXIuCisgICAgICB0YXNrX3J1bm5lcl8tPlBvc3RUYXNrKGxvY2F0aW9uXywgQmluZE9uY2UoJkRlc3Ryb3lDYWxsYmFja09uVGFza1J1bm5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbGJhY2tfKSkpOworICAgIH0KKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICB2b2lkIFJ1bihBcmdzLi4uIGFyZ3MpIHsKKyAgICAvLyBJZiBDYWxsYmFja1R5cGUgaXMgYSBPbmNlQ2FsbGJhY2sgdGhlbiBHZXRDbG9zdXJlKCkgY29uc3VtZXMgYGNhbGxiYWNrX2AuCisgICAgdGFza19ydW5uZXJfLT5Qb3N0VGFzayhsb2NhdGlvbl8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRDbG9zdXJlKCZjYWxsYmFja18sIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICB9CisKKyBwcml2YXRlOgorICB0eXBlZGVmIGJhc2U6Ok9uY2VDbG9zdXJlIE9uY2VDbG9zdXJlOworCisgIHN0YXRpYyBPbmNlQ2xvc3VyZSBHZXRDbG9zdXJlKE9uY2VDbG9zdXJlKiBjYWxsYmFjaykgeworICAgIC8vIGBjYWxsYmFja2AgaXMgYWxyZWFkeSBhIGNsb3N1cmUsIG5vIG5lZWQgdG8gY2FsbCBCaW5kT25jZSgpLgorICAgIHJldHVybiBzdGQ6Om1vdmUoKmNhbGxiYWNrKTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICBzdGF0aWMgT25jZUNsb3N1cmUgR2V0Q2xvc3VyZShiYXNlOjpPbmNlQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4qIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzJiYuLi4gYXJncykgeworICAgIHJldHVybiBCaW5kT25jZShzdGQ6Om1vdmUoKmNhbGxiYWNrKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgfQorCisgIHN0YXRpYyBPbmNlQ2xvc3VyZSBHZXRDbG9zdXJlKGJhc2U6OlJlcGVhdGluZ0Nsb3N1cmUqIGNhbGxiYWNrKSB7CisgICAgLy8gYGNhbGxiYWNrYCBpcyBhbHJlYWR5IGEgY2xvc3VyZSwgbm8gbmVlZCB0byBjYWxsIEJpbmRPbmNlKCkuCisgICAgcmV0dXJuICpjYWxsYmFjazsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPgorICBzdGF0aWMgT25jZUNsb3N1cmUgR2V0Q2xvc3VyZShiYXNlOjpSZXBlYXRpbmdDYWxsYmFjazx2b2lkKEFyZ3MuLi4pPiogY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MmJi4uLiBhcmdzKSB7CisgICAgcmV0dXJuIEJpbmRPbmNlKCpjYWxsYmFjaywgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIERlc3Ryb3lDYWxsYmFja09uVGFza1J1bm5lcihDYWxsYmFja1R5cGUgY2FsbGJhY2spIHt9CisKKyAgY29uc3Qgc2NvcGVkX3JlZnB0cjxiYXNlOjpUYXNrUnVubmVyPiB0YXNrX3J1bm5lcl87CisgIGNvbnN0IGJhc2U6OkxvY2F0aW9uIGxvY2F0aW9uXzsKKyAgQ2FsbGJhY2tUeXBlIGNhbGxiYWNrXzsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorYmFzZTo6T25jZUNhbGxiYWNrPHZvaWQoQXJncy4uLik+IEJpbmRQb3N0VGFzaygKKyAgICBzY29wZWRfcmVmcHRyPGJhc2U6OlRhc2tSdW5uZXI+IHRhc2tfcnVubmVyLAorICAgIGJhc2U6Ok9uY2VDYWxsYmFjazxSZXR1cm5UeXBlKEFyZ3MuLi4pPiBjYWxsYmFjaywKKyAgICBjb25zdCBiYXNlOjpMb2NhdGlvbiYgbG9jYXRpb24pIHsKKyAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8UmV0dXJuVHlwZSwgdm9pZD46OnZhbHVlLAorICAgICAgICAgICAgICAgICJPbmNlQ2FsbGJhY2sgbXVzdCBoYXZlIHZvaWQgcmV0dXJuIHR5cGUgaW4gb3JkZXIgdG8gcHJvZHVjZSBhICIKKyAgICAgICAgICAgICAgICAiY2xvc3VyZSBmb3IgUG9zdFRhc2soKS4gVXNlIGJhc2U6Oklnbm9yZVJlc3VsdCgpIHRvIGRyb3AgdGhlICIKKyAgICAgICAgICAgICAgICAicmV0dXJuIHZhbHVlIGlmIGRlc2lyZWQuIik7CisKKyAgdXNpbmcgSGVscGVyID0gQmluZFBvc3RUYXNrVHJhbXBvbGluZTxiYXNlOjpPbmNlQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4+OworCisgIHJldHVybiBiYXNlOjpCaW5kT25jZSgKKyAgICAgICZIZWxwZXI6OnRlbXBsYXRlIFJ1bjxBcmdzLi4uPiwKKyAgICAgIHN0ZDo6bWFrZV91bmlxdWU8SGVscGVyPihzdGQ6Om1vdmUodGFza19ydW5uZXIpLCBsb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbGJhY2spKSk7Cit9CisKKy8vIENyZWF0ZXMgYSBSZXBlYXRpbmdDYWxsYmFjayB0aGF0IHdpbGwgcnVuIHxjYWxsYmFja3wgb24gfHRhc2tfcnVubmVyfC4gV2hlbgorLy8gdGhlIHJldHVybmVkIGNhbGxiYWNrIGlzIGRlc3Ryb3llZCBhIHRhc2sgd2lsbCBiZSBwb3N0ZWQgdG8gZGVzdHJveSB0aGUgaW5wdXQKKy8vIHxjYWxsYmFja3wgb24gfHRhc2tfcnVubmVyfC4KK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmdzPgorYmFzZTo6UmVwZWF0aW5nQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4gQmluZFBvc3RUYXNrKAorICAgIHNjb3BlZF9yZWZwdHI8YmFzZTo6VGFza1J1bm5lcj4gdGFza19ydW5uZXIsCisgICAgYmFzZTo6UmVwZWF0aW5nQ2FsbGJhY2s8UmV0dXJuVHlwZShBcmdzLi4uKT4gY2FsbGJhY2ssCisgICAgY29uc3QgYmFzZTo6TG9jYXRpb24mIGxvY2F0aW9uKSB7CisgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPFJldHVyblR5cGUsIHZvaWQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAiUmVwZWF0aW5nQ2FsbGJhY2sgbXVzdCBoYXZlIHZvaWQgcmV0dXJuIHR5cGUgaW4gb3JkZXIgdG8gIgorICAgICAgICAgICAgICAgICJwcm9kdWNlIGEgY2xvc3VyZSBmb3IgUG9zdFRhc2soKS4gVXNlIGJhc2U6Oklnbm9yZVJlc3VsdCgpIHRvICIKKyAgICAgICAgICAgICAgICAiZHJvcCB0aGUgcmV0dXJuIHZhbHVlIGlmIGRlc2lyZWQuIik7CisKKyAgdXNpbmcgSGVscGVyID0KKyAgICAgIEJpbmRQb3N0VGFza1RyYW1wb2xpbmU8YmFzZTo6UmVwZWF0aW5nQ2FsbGJhY2s8dm9pZChBcmdzLi4uKT4+OworCisgIHJldHVybiBiYXNlOjpCaW5kUmVwZWF0aW5nKAorICAgICAgJkhlbHBlcjo6dGVtcGxhdGUgUnVuPEFyZ3MuLi4+LAorICAgICAgc3RkOjptYWtlX3VuaXF1ZTxIZWxwZXI+KHN0ZDo6bW92ZSh0YXNrX3J1bm5lciksIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsYmFjaykpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGJhc2UKKworI2VuZGlmICAvLyBCQVNFX0JJTkRfUE9TVF9UQVNLX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9jaGVjay5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYzMjBiCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvY2hlY2suaApAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQkFTRV9DSEVDS19IXworI2RlZmluZSBCQVNFX0NIRUNLX0hfCisKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKworI2VuZGlmICAvLyBCQVNFX0NIRUNLX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9jaGVja19vcC5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvY2hlY2tfb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZjODRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvY2hlY2tfb3AuaApAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQkFTRV9DSEVDS19PUF9IXworI2RlZmluZSBCQVNFX0NIRUNLX09QX0hfCisKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKworI2VuZGlmICAvLyBCQVNFX0NIRUNLX09QX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9jeHgxN19iYWNrcG9ydHMuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC9iYXNlL2N4eDE3X2JhY2twb3J0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzFjMTMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9jeHgxN19iYWNrcG9ydHMuaApAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQkFTRV9DWFgxN19CQUNLUE9SVFNfSF8KKyNkZWZpbmUgQkFTRV9DWFgxN19CQUNLUE9SVFNfSF8KKworI2luY2x1ZGUgImJhc2Uvc3RsX3V0aWwuaCIKKworI2VuZGlmICAvLyBCQVNFX0NYWDE3X0JBQ0tQT1JUU19IXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L2Jhc2UvaGFzaC9tZDUuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC9iYXNlL2hhc2gvbWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5MzEzMQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC9iYXNlL2hhc2gvbWQ1LmgKQEAgLTAsMCArMSwyMCBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIEJBU0VfSEFTSF9NRDVfSF8KKyNkZWZpbmUgQkFTRV9IQVNIX01ENV9IXworCisjaW5jbHVkZSAiYmFzZS9tZDUuaCIKKworI2VuZGlmICAvLyBCQVNFX0hBU0hfTUQ1X0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9ub3RyZWFjaGVkLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS9ub3RyZWFjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmY2E5MwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC9iYXNlL25vdHJlYWNoZWQuaApAQCAtMCwwICsxLDIwIEBACisvLyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyNpZm5kZWYgQkFTRV9OT1RSRUFDSEVEX0hfCisjZGVmaW5lIEJBU0VfTk9UUkVBQ0hFRF9IXworCisjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisKKyNlbmRpZiAgLy8gQkFTRV9OT1RSRUFDSEVEX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS90eXBlcy9zdHJvbmdfYWxpYXMuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC9iYXNlL3R5cGVzL3N0cm9uZ19hbGlhcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMTQ4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvYmFzZS90eXBlcy9zdHJvbmdfYWxpYXMuaApAQCAtMCwwICsxLDE1NCBAQAorLy8gQ29weXJpZ2h0IDIwMTkgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaWZuZGVmIEJBU0VfVFlQRVNfU1RST05HX0FMSUFTX0hfCisjZGVmaW5lIEJBU0VfVFlQRVNfU1RST05HX0FMSUFTX0hfCisKKyNpbmNsdWRlIDxvc3RyZWFtPgorI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKKyNpbmNsdWRlICJiYXNlL3RlbXBsYXRlX3V0aWwuaCIKKworbmFtZXNwYWNlIGJhc2UgeworCisvLyBBIHR5cGUtc2FmZSBhbHRlcm5hdGl2ZSBmb3IgYSB0eXBlZGVmIG9yIGEgJ3VzaW5nJyBkaXJlY3RpdmUuCisvLworLy8gQysrIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHR5cGUtc2FmZSB0eXBlZGVmcywgZGVzcGl0ZSBtdWx0aXBsZSBwcm9wb3NhbHMKKy8vIChleC4gaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAxMy9uMzUxNS5wZGYpLiBUaGUKKy8vIG5leHQgYmVzdCB0aGluZyBpcyB0byB0cnkgYW5kIGVtdWxhdGUgdGhlbSBpbiBsaWJyYXJ5IGNvZGUuCisvLworLy8gVGhlIG1vdGl2YXRpb24gaXMgdG8gZGlzYWxsb3cgc2V2ZXJhbCBjbGFzc2VzIG9mIGVycm9yczoKKy8vCisvLyB1c2luZyBPcmFuZ2UgPSBpbnQ7CisvLyB1c2luZyBBcHBsZSA9IGludDsKKy8vIEFwcGxlIGFwcGxlKDIpOworLy8gT3JhbmdlIG9yYW5nZSA9IGFwcGxlOyAgLy8gT3JhbmdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZWNvbWUgYW4gQXBwbGUuCisvLyBPcmFuZ2UgeCA9IG9yYW5nZSArIGFwcGxlOyAgLy8gU2hvdWxkbid0IGFkZCBPcmFuZ2VzIGFuZCBBcHBsZXMuCisvLyBpZiAob3JhbmdlID4gYXBwbGUpOyAgLy8gU2hvdWxkbid0IGNvbXBhcmUgQXBwbGVzIHRvIE9yYW5nZXMuCisvLyB2b2lkIGZvbyhPcmFuZ2UpOworLy8gdm9pZCBmb28oQXBwbGUpOyAgLy8gUmVkZWZpbml0aW9uLgorLy8gZXRjLgorLy8KKy8vIFN0cm9uZ0FsaWFzIG1heSBpbnN0ZWFkIGJlIHVzZWQgYXMgZm9sbG93czoKKy8vCisvLyB1c2luZyBPcmFuZ2UgPSBTdHJvbmdBbGlhczxjbGFzcyBPcmFuZ2VUYWcsIGludD47CisvLyB1c2luZyBBcHBsZSA9IFN0cm9uZ0FsaWFzPGNsYXNzIEFwcGxlVGFnLCBpbnQ+OworLy8gdXNpbmcgQmFuYW5hID0gU3Ryb25nQWxpYXM8Y2xhc3MgQmFuYW5hVGFnLCBzdGQ6OnN0cmluZz47CisvLyBBcHBsZSBhcHBsZSgyKTsKKy8vIEJhbmFuYSBiYW5hbmEoIkhlbGxvIik7CisvLyBPcmFuZ2Ugb3JhbmdlID0gYXBwbGU7ICAvLyBEb2VzIG5vdCBjb21waWxlLgorLy8gT3JhbmdlIG90aGVyX29yYW5nZSA9IG9yYW5nZTsgIC8vIENvbXBpbGVzLCB0eXBlcyBtYXRjaC4KKy8vIE9yYW5nZSB4ID0gb3JhbmdlICsgYXBwbGU7ICAvLyBEb2VzIG5vdCBjb21waWxlLgorLy8gT3JhbmdlIHkgPSBPcmFuZ2Uob3JhbmdlLnZhbHVlKCkgKyBhcHBsZS52YWx1ZSgpKTsgIC8vIENvbXBpbGVzLgorLy8gT3JhbmdlIHogPSBPcmFuZ2UoYmFuYW5hLT5zaXplKCkgKyAqb3RoZXJfb3JhbmdlKTsgIC8vIENvbXBpbGVzLgorLy8gaWYgKG9yYW5nZSA+IGFwcGxlKTsgIC8vIERvZXMgbm90IGNvbXBpbGUuCisvLyBpZiAob3JhbmdlID4gb3RoZXJfb3JhbmdlKTsgIC8vIENvbXBpbGVzLgorLy8gdm9pZCBmb28oT3JhbmdlKTsKKy8vIHZvaWQgZm9vKEFwcGxlKTsgIC8vIENvbXBpbGVzIGludG8gc2VwYXJhdGUgb3ZlcmxvYWQuCisvLworLy8gU3Ryb25nQWxpYXMgaXMgYSB6ZXJvLWNvc3QgYWJzdHJhY3Rpb24sIGl0J3MgY29tcGlsZWQgYXdheS4KKy8vCisvLyBUYWdUeXBlIGlzIGFuIGVtcHR5IHRhZyBjbGFzcyAoYWxzbyBjYWxsZWQgInBoYW50b20gdHlwZSIpIHRoYXQgb25seSBzZXJ2ZXMKKy8vIHRoZSB0eXBlIHN5c3RlbSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZGlmZmVyZW50IGluc3RhbnRpYXRpb25zIG9mIHRoZQorLy8gdGVtcGxhdGUuCisvLyBVbmRlcmx5aW5nVHlwZSBtYXkgYmUgYWxtb3N0IGFueSB2YWx1ZSB0eXBlLiBOb3RlIHRoYXQgc29tZSBtZXRob2RzIG9mIHRoZQorLy8gU3Ryb25nQWxpYXMgbWF5IGJlIHVuYXZhaWxhYmxlIChpZS4gcHJvZHVjZSBlbGFib3JhdGUgY29tcGlsYXRpb24gZXJyb3JzIHdoZW4KKy8vIHVzZWQpIGlmIFVuZGVybHlpbmdUeXBlIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorLy8KKy8vIFN0cm9uZ0FsaWFzIG9ubHkgZGlyZWN0bHkgZXhwb3NlcyBjb21wYXJpc29uIG9wZXJhdG9ycyAoZm9yIGNvbnZlbmllbnQgdXNlIGluCisvLyBvcmRlcmVkIGNvbnRhaW5lcnMpIGFuZCBhIEhhc2hlciBzdHJ1Y3QgKGZvciB1bm9yZGVyZWRfbWFwL3NldCkuIEl0J3MKKy8vIGltcG9zc2libGUsIHdpdGhvdXQgcmVmbGVjdGlvbiwgdG8gZXhwb3NlIGFsbCBtZXRob2RzIG9mIHRoZSBVbmRlcmx5aW5nVHlwZQorLy8gaW4gU3Ryb25nQWxpYXMncyBpbnRlcmZhY2UuIEl0J3MgYWxzbyBwb3RlbnRpYWxseSB1bndhbnRlZCAoZXguIHlvdSBkb24ndAorLy8gd2FudCB0byBiZSBhYmxlIHRvIGFkZCB0d28gU3Ryb25nQWxpYXNlcyB0aGF0IHJlcHJlc2VudCBzb2NrZXQgaGFuZGxlcykuCisvLyBBIGdldHRlciBhbmQgZGVyZWZlcmVuY2Ugb3BlcmF0b3JzIGFyZSBwcm92aWRlZCBpbiBjYXNlIHlvdSBuZWVkIHRvIGFjY2VzcworLy8gdGhlIFVuZGVybHlpbmdUeXBlLgorLy8KKy8vIFNlZSBhbHNvCisvLyAtIC8vc3R5bGVndWlkZS9jKysvYmxpbmstYysrLm1kIHdoaWNoIHByb3ZpZGVzIHJlY29tbWVuZGF0aW9uIGFuZCBleGFtcGxlcyBvZgorLy8gICB1c2luZyBTdHJvbmdBbGlhczxUYWcsIGJvb2w+IGluc3RlYWQgb2YgYSBiYXJlIGJvb2wuCisvLyAtIElkVHlwZTwuLi4+IHdoaWNoIHByb3ZpZGVzIGhlbHBlcnMgZm9yIHNwZWNpYWxpemluZyBTdHJvbmdBbGlhcyB0byBiZQorLy8gICB1c2VkIGFzIGFuIGlkLgorLy8gLSBUb2tlblR5cGU8Li4uPiB3aGljaCBwcm92aWRlcyBoZWxwZXJzIGZvciBzcGVjaWFsaXppbmcgU3Ryb25nQWxpYXMgdG8gYmUKKy8vICAgdXNlZCBhcyBhIHdyYXBwZXIgb2YgYmFzZTo6VW5ndWVzc2FibGVUb2tlbi4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWdUeXBlLCB0eXBlbmFtZSBVbmRlcmx5aW5nVHlwZT4KK2NsYXNzIFN0cm9uZ0FsaWFzIHsKKyBwdWJsaWM6CisgIGNvbnN0ZXhwciBTdHJvbmdBbGlhcygpID0gZGVmYXVsdDsKKyAgY29uc3RleHByIGV4cGxpY2l0IFN0cm9uZ0FsaWFzKGNvbnN0IFVuZGVybHlpbmdUeXBlJiB2KSA6IHZhbHVlXyh2KSB7fQorICBjb25zdGV4cHIgZXhwbGljaXQgU3Ryb25nQWxpYXMoVW5kZXJseWluZ1R5cGUmJiB2KSBub2V4Y2VwdAorICAgICAgOiB2YWx1ZV8oc3RkOjptb3ZlKHYpKSB7fQorCisgIGNvbnN0ZXhwciBVbmRlcmx5aW5nVHlwZSogb3BlcmF0b3ItPigpIHsgcmV0dXJuICZ2YWx1ZV87IH0KKyAgY29uc3RleHByIGNvbnN0IFVuZGVybHlpbmdUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJnZhbHVlXzsgfQorCisgIGNvbnN0ZXhwciBVbmRlcmx5aW5nVHlwZSYgb3BlcmF0b3IqKCkgJiB7IHJldHVybiB2YWx1ZV87IH0KKyAgY29uc3RleHByIGNvbnN0IFVuZGVybHlpbmdUeXBlJiBvcGVyYXRvciooKSBjb25zdCYgeyByZXR1cm4gdmFsdWVfOyB9CisgIGNvbnN0ZXhwciBVbmRlcmx5aW5nVHlwZSYmIG9wZXJhdG9yKigpICYmIHsgcmV0dXJuIHN0ZDo6bW92ZSh2YWx1ZV8pOyB9CisgIGNvbnN0ZXhwciBjb25zdCBVbmRlcmx5aW5nVHlwZSYmIG9wZXJhdG9yKigpIGNvbnN0JiYgeworICAgIHJldHVybiBzdGQ6Om1vdmUodmFsdWVfKTsKKyAgfQorCisgIGNvbnN0ZXhwciBVbmRlcmx5aW5nVHlwZSYgdmFsdWUoKSAmIHsgcmV0dXJuIHZhbHVlXzsgfQorICBjb25zdGV4cHIgY29uc3QgVW5kZXJseWluZ1R5cGUmIHZhbHVlKCkgY29uc3QmIHsgcmV0dXJuIHZhbHVlXzsgfQorICBjb25zdGV4cHIgVW5kZXJseWluZ1R5cGUmJiB2YWx1ZSgpICYmIHsgcmV0dXJuIHN0ZDo6bW92ZSh2YWx1ZV8pOyB9CisgIGNvbnN0ZXhwciBjb25zdCBVbmRlcmx5aW5nVHlwZSYmIHZhbHVlKCkgY29uc3QmJiB7IHJldHVybiBzdGQ6Om1vdmUodmFsdWVfKTsgfQorCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBjb25zdCBVbmRlcmx5aW5nVHlwZSYoKSBjb25zdCYgeyByZXR1cm4gdmFsdWVfOyB9CisKKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJvbmdBbGlhcyYgb3RoZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gdmFsdWVfID09IG90aGVyLnZhbHVlXzsKKyAgfQorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cm9uZ0FsaWFzJiBvdGhlcikgY29uc3QgeworICAgIHJldHVybiB2YWx1ZV8gIT0gb3RoZXIudmFsdWVfOworICB9CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25zdCBTdHJvbmdBbGlhcyYgb3RoZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gdmFsdWVfIDwgb3RoZXIudmFsdWVfOworICB9CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oY29uc3QgU3Ryb25nQWxpYXMmIG90aGVyKSBjb25zdCB7CisgICAgcmV0dXJuIHZhbHVlXyA8PSBvdGhlci52YWx1ZV87CisgIH0KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFN0cm9uZ0FsaWFzJiBvdGhlcikgY29uc3QgeworICAgIHJldHVybiB2YWx1ZV8gPiBvdGhlci52YWx1ZV87CisgIH0KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTdHJvbmdBbGlhcyYgb3RoZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gdmFsdWVfID49IG90aGVyLnZhbHVlXzsKKyAgfQorCisgIC8vIEhhc2hlciB0byB1c2UgaW4gc3RkOjp1bm9yZGVyZWRfbWFwLCBzdGQ6OnVub3JkZXJlZF9zZXQsIGV0Yy4KKyAgLy8KKyAgLy8gRXhhbXBsZSB1c2FnZToKKyAgLy8gICAgIHVzaW5nIE15VHlwZSA9IGJhc2U6OlN0cm9uZ0FsaWFzPC4uLj47CisgIC8vICAgICB1c2luZyBNeVNldCA9IHN0ZDo6dW5vcmRlcmVkX3NldDxNeVR5cGUsIHR5cGVuYW1lIE15VHlwZTo6SGFzaGVyPjsKKyAgLy8KKyAgLy8gaHR0cHM6Ly9nb29nbGUuZ2l0aHViLmlvL3N0eWxlZ3VpZGUvY3BwZ3VpZGUuaHRtbCNzdGRfaGFzaCBhc2tzIHRvIGF2b2lkCisgIC8vIGRlZmluaW5nIHNwZWNpYWxpemF0aW9ucyBvZiBgc3RkOjpoYXNoYCAtIHRoaXMgaXMgd2h5IHRoZSBoYXNoZXIgbmVlZHMgdG8KKyAgLy8gYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgYW5kIHdoeSB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCAqbm90KiB3b3JrOgorICAvLyAgICAgdXNpbmcgTXlUeXBlID0gYmFzZTo6U3Ryb25nQWxpYXM8Li4uPjsKKyAgLy8gICAgIHVzaW5nIE15U2V0ID0gc3RkOjp1bm9yZGVyZWRfc2V0PE15VHlwZT47ICAvLyBUaGlzIHdvbid0IHdvcmsuCisgIHN0cnVjdCBIYXNoZXIgeworICAgIHVzaW5nIGFyZ3VtZW50X3R5cGUgPSBTdHJvbmdBbGlhczsKKyAgICB1c2luZyByZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OworICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoY29uc3QgYXJndW1lbnRfdHlwZSYgaWQpIGNvbnN0IHsKKyAgICAgIHJldHVybiBzdGQ6Omhhc2g8VW5kZXJseWluZ1R5cGU+KCkoaWQudmFsdWUoKSk7CisgICAgfQorICB9OworCisgcHJvdGVjdGVkOgorICBVbmRlcmx5aW5nVHlwZSB2YWx1ZV87Cit9OworCisvLyBTdHJlYW0gb3BlcmF0b3IgZm9yIGNvbnZlbmllbmNlLCBzdHJlYW1zIHRoZSBVbmRlcmx5aW5nVHlwZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUYWdUeXBlLAorICAgICAgICAgIHR5cGVuYW1lIFVuZGVybHlpbmdUeXBlLAorICAgICAgICAgIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwKKyAgICAgICAgICAgICAgYmFzZTo6aW50ZXJuYWw6OlN1cHBvcnRzT3N0cmVhbU9wZXJhdG9yPFVuZGVybHlpbmdUeXBlPjo6dmFsdWU+Pgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cm9uZ0FsaWFzPFRhZ1R5cGUsIFVuZGVybHlpbmdUeXBlPiYgYWxpYXMpIHsKKyAgcmV0dXJuIHN0cmVhbSA8PCBhbGlhcy52YWx1ZSgpOworfQorCit9ICAvLyBuYW1lc3BhY2UgYmFzZQorCisjZW5kaWYgIC8vIEJBU0VfVFlQRVNfU1RST05HX0FMSUFTX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvbmV0L2Nvb2tpZXMvc2l0ZV9mb3JfY29va2llcy5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L25ldC9jb29raWVzL3NpdGVfZm9yX2Nvb2tpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZlM2U0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L25ldC9jb29raWVzL3NpdGVfZm9yX2Nvb2tpZXMuaApAQCAtMCwwICsxLDE2IEBACisvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgTkVUX1NJVEVfRk9SX0NPT0tJRVNfSAorI2RlZmluZSBORVRfU0lURV9GT1JfQ09PS0lFU19ICisKK25hbWVzcGFjZSBuZXQgeworCisvLyBSZWR1Y2VkIHZlcnNpb24gZW5vdWdoIHRvIG1ha2UgbWVkaWEgY29kZSBkZXBlbmRpbmcgb24gaXQgdG8gYmUgYnVpbHQuCitjbGFzcyBTaXRlRm9yQ29va2llcyB7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbmV0CisKKyNlbmRpZiAgLy8gTkVUX1NJVEVfRk9SX0NPT0tJRVNfSApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3RoaXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlcy9vcHRpb25hbC5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3RoaXJkX3BhcnR5L2Fic2VpbC1jcHAvYWJzbC90eXBlcy9vcHRpb25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDBlNDEKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdGhpcmRfcGFydHkvYWJzZWlsLWNwcC9hYnNsL3R5cGVzL29wdGlvbmFsLmgKQEAgLTAsMCArMSwyOSBAQAorLy8gQ29weXJpZ2h0IDIwMjIgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjaWZuZGVmIEFCU0xfVFlQRVNfT1BUSU9OQUxfSF8KKyNkZWZpbmUgQUJTTF9UWVBFU19PUFRJT05BTF9IXworCisjaW5jbHVkZSAiYmFzZS9vcHRpb25hbC5oIgorCituYW1lc3BhY2UgYWJzbCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBvcHRpb25hbCA9IGJhc2U6Ok9wdGlvbmFsPFQ+OworCit1c2luZyBiYXNlOjpudWxsb3B0OworCit9ICAvLyBuYW1lc3BhY2UgYWJzbAorCisjZW5kaWYgIC8vIEFCU0xfVFlQRVNfT1BUSU9OQUxfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvY29sb3Jfc3BhY2UuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvY29sb3Jfc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjllZjJmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9jb2xvcl9zcGFjZS5oCkBAIC0wLDAgKzEsNDE3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaWZuZGVmIFVJX0dGWF9DT0xPUl9TUEFDRV9IXworI2RlZmluZSBVSV9HRlhfQ09MT1JfU1BBQ0VfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImJhc2UvZ3Rlc3RfcHJvZF91dGlsLmgiCisjaW5jbHVkZSAiYnVpbGQvYnVpbGRfY29uZmlnLmgiCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQorI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUmVmQ250LmgiCisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKKyNpbmNsdWRlICJ1aS9nZngvY29sb3Jfc3BhY2VfZXhwb3J0LmgiCisKK3N0cnVjdCBza2Ntc19NYXRyaXgzeDM7CitzdHJ1Y3Qgc2tjbXNfVHJhbnNmZXJGdW5jdGlvbjsKK2NsYXNzIFNrQ29sb3JTcGFjZTsKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCitlbnVtIFNrWVVWQ29sb3JTcGFjZSA6IGludDsKKyNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKQorCituYW1lc3BhY2Ugc2tpYSB7CitjbGFzcyBNYXRyaXg0NDsKK30gIC8vIG5hbWVzcGFjZSBza2lhCisKKy8vIFRoZXNlIGZvcndhcmQgZGVjbGFyYXRpb25zIGFyZSB1c2VkIHRvIGdpdmUgSVBDIGNvZGUgZnJpZW5kIGFjY2VzcyB0byBwcml2YXRlCisvLyBmaWVsZHMgb2YgZ2Z4OjpDb2xvclNwYWNlIGZvciB0aGUgcHVycG9zZSBvZiBzZXJpYWxpemF0aW9uIGFuZAorLy8gZGVzZXJpYWxpemF0aW9uLgorbmFtZXNwYWNlIElQQyB7Cit0ZW1wbGF0ZSA8Y2xhc3MgUD4KK3N0cnVjdCBQYXJhbVRyYWl0czsKK30gIC8vIG5hbWVzcGFjZSBJUEMKKworbmFtZXNwYWNlIG1vam8gewordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CitzdHJ1Y3QgU3RydWN0VHJhaXRzOworfSAgLy8gbmFtZXNwYWNlIG1vam8KKworLy8gVXNlZCB0byBzZXJpYWxpemUgYSBnZng6OkNvbG9yU3BhY2UgdGhyb3VnaCB0aGUgR1BVIGNvbW1hbmQgYnVmZmVyLgorc3RydWN0IF9HTGNvbG9yU3BhY2U7CisKK25hbWVzcGFjZSBnZnggeworCitlbnVtIGNsYXNzIENvbnRlbnRDb2xvclVzYWdlIDogdWludDhfdDsKKworbmFtZXNwYWNlIG1vam9tIHsKK2NsYXNzIENvbG9yU3BhY2VEYXRhVmlldzsKK30gIC8vIG5hbWVzcGFjZSBtb2pvbQorCisvLyBVc2VkIHRvIHJlcHJlc2V0IGEgY29sb3Igc3BhY2UgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbG9yIGNvbnZlcnNpb24uCisvLyBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIHNhZmUgYW5kIGNvbXBhY3QgZW5vdWdoIHRvIHNlbmQgb3ZlciBJUEMKKy8vIGJldHdlZW4gYW55IHByb2Nlc3Nlcy4KK2NsYXNzIENPTE9SX1NQQUNFX0VYUE9SVCBDb2xvclNwYWNlIHsKKyBwdWJsaWM6CisgIGVudW0gY2xhc3MgUHJpbWFyeUlEIDogdWludDhfdCB7CisgICAgSU5WQUxJRCwKKyAgICBCVDcwOSwKKyAgICBCVDQ3ME0sCisgICAgQlQ0NzBCRywKKyAgICBTTVBURTE3ME0sCisgICAgU01QVEUyNDBNLAorICAgIEZJTE0sCisgICAgQlQyMDIwLAorICAgIFNNUFRFU1Q0MjhfMSwKKyAgICBTTVBURVNUNDMxXzIsCisgICAgU01QVEVTVDQzMl8xLAorICAgIFhZWl9ENTAsCisgICAgQURPQkVfUkdCLAorICAgIC8vIENvcnJlc3BvbmRzIHRoZSB0aGUgcHJpbWFyaWVzIG9mIHRoZSAiR2VuZXJpYyBSR0IiIHByb2ZpbGUgdXNlZCBpbiB0aGUKKyAgICAvLyBBcHBsZSBDb2xvclN5bmMgYXBwbGljYXRpb24sIHVzZWQgYnkgbGF5b3V0IHRlc3RzIG9uIE1hYy4KKyAgICBBUFBMRV9HRU5FUklDX1JHQiwKKyAgICAvLyBBIHZlcnkgd2lkZSBnYW11dCBzcGFjZSB3aXRoIHJvdGF0ZWQgcHJpbWFyaWVzLiBVc2VkIGJ5IGxheW91dCB0ZXN0cy4KKyAgICBXSURFX0dBTVVUX0NPTE9SX1NQSU4sCisgICAgLy8gUHJpbWFyaWVzIGRlZmluZWQgYnkgdGhlIHByaW1hcnkgbWF0cml4IHxjdXN0b21fcHJpbWFyeV9tYXRyaXhffC4KKyAgICBDVVNUT00sCisgICAga01heFZhbHVlID0gQ1VTVE9NLAorICB9OworCisgIGVudW0gY2xhc3MgVHJhbnNmZXJJRCA6IHVpbnQ4X3QgeworICAgIElOVkFMSUQsCisgICAgQlQ3MDksCisgICAgLy8gT24gbWFjT1MsIEJUNzA5IGhhcmR3YXJlIGRlY29kZWQgdmlkZW8gZnJhbWVzLCB3aGVuIGRpc3BsYXllZCBhcworICAgIC8vIG92ZXJsYXlzLCB3aWxsIGhhdmUgYSB0cmFuc2ZlciBmdW5jdGlvbiBvZiBnYW1tYT0xLjk2MS4KKyAgICBCVDcwOV9BUFBMRSwKKyAgICBHQU1NQTE4LAorICAgIEdBTU1BMjIsCisgICAgR0FNTUEyNCwKKyAgICBHQU1NQTI4LAorICAgIFNNUFRFMTcwTSwKKyAgICBTTVBURTI0ME0sCisgICAgTElORUFSLAorICAgIExPRywKKyAgICBMT0dfU1FSVCwKKyAgICBJRUM2MTk2Nl8yXzQsCisgICAgQlQxMzYxX0VDRywKKyAgICBJRUM2MTk2Nl8yXzEsCisgICAgQlQyMDIwXzEwLAorICAgIEJUMjAyMF8xMiwKKyAgICBTTVBURVNUMjA4NCwKKyAgICBTTVBURVNUNDI4XzEsCisgICAgQVJJQl9TVERfQjY3LCAgLy8gQUtBIGh5YnJpZC1sb2cgZ2FtbWEsIEhMRy4KKyAgICAvLyBUaGUgc2FtZSBhcyBJRUM2MTk2Nl8yXzEgb24gdGhlIGludGVydmFsIFswLCAxXSwgd2l0aCB0aGUgbm9ubGluZWFyCisgICAgLy8gc2VnbWVudCBjb250aW51aW5nIGJleW9uZCAxIGFuZCBwb2ludCBzeW1tZXRyeSBkZWZpbmluZyB2YWx1ZXMgYmVsb3cgMC4KKyAgICBJRUM2MTk2Nl8yXzFfSERSLAorICAgIC8vIFRoZSBzYW1lIGFzIExJTkVBUiBidXQgaXMgZGVmaW5lZCBmb3IgYWxsIHJlYWwgdmFsdWVzLgorICAgIExJTkVBUl9IRFIsCisgICAgLy8gQSBwYXJhbWV0cmljIHRyYW5zZmVyIGZ1bmN0aW9uIGRlZmluZWQgYnkgfHRyYW5zZmVyX3BhcmFtc198LgorICAgIENVU1RPTSwKKyAgICAvLyBBbiBIRFIgcGFyYW1ldHJpYyB0cmFuc2ZlciBmdW5jdGlvbiBkZWZpbmVkIGJ5IHx0cmFuc2Zlcl9wYXJhbXNffC4KKyAgICBDVVNUT01fSERSLAorICAgIC8vIEFuIEhEUiB0cmFuc2ZlciBmdW5jdGlvbiB0aGF0IGlzIHBpZWNld2lzZSBzUkdCLCBhbmQgcGllY2V3aXNlIGxpbmVhci4KKyAgICBQSUVDRVdJU0VfSERSLAorICAgIGtNYXhWYWx1ZSA9IFBJRUNFV0lTRV9IRFIsCisgIH07CisKKyAgZW51bSBjbGFzcyBNYXRyaXhJRCA6IHVpbnQ4X3QgeworICAgIElOVkFMSUQsCisgICAgUkdCLAorICAgIEJUNzA5LAorICAgIEZDQywKKyAgICBCVDQ3MEJHLAorICAgIFNNUFRFMTcwTSwKKyAgICBTTVBURTI0ME0sCisgICAgWUNPQ0csCisgICAgQlQyMDIwX05DTCwKKyAgICBCVDIwMjBfQ0wsCisgICAgWURaRFgsCisgICAgR0JSLAorICAgIGtNYXhWYWx1ZSA9IEdCUiwKKyAgfTsKKworICBlbnVtIGNsYXNzIFJhbmdlSUQgOiB1aW50OF90IHsKKyAgICBJTlZBTElELAorICAgIC8vIExpbWl0ZWQgUmVjLiA3MDkgY29sb3IgcmFuZ2Ugd2l0aCBSR0IgdmFsdWVzIHJhbmdpbmcgZnJvbSAxNiB0byAyMzUuCisgICAgTElNSVRFRCwKKyAgICAvLyBGdWxsIFJHQiBjb2xvciByYW5nZSB3aXRoIFJHQiB2YWxlZXMgZnJvbSAwIHRvIDI1NS4KKyAgICBGVUxMLAorICAgIC8vIFJhbmdlIGlzIGRlZmluZWQgYnkgVHJhbnNmZXJJRC9NYXRyaXhJRC4KKyAgICBERVJJVkVELAorICAgIGtNYXhWYWx1ZSA9IERFUklWRUQsCisgIH07CisKKyAgY29uc3RleHByIENvbG9yU3BhY2UoKSB7fQorICBjb25zdGV4cHIgQ29sb3JTcGFjZShQcmltYXJ5SUQgcHJpbWFyaWVzLCBUcmFuc2ZlcklEIHRyYW5zZmVyKQorICAgICAgOiBDb2xvclNwYWNlKHByaW1hcmllcywgdHJhbnNmZXIsIE1hdHJpeElEOjpSR0IsIFJhbmdlSUQ6OkZVTEwpIHt9CisgIGNvbnN0ZXhwciBDb2xvclNwYWNlKFByaW1hcnlJRCBwcmltYXJpZXMsCisgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVySUQgdHJhbnNmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeElEIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2VJRCByYW5nZSkKKyAgICAgIDogcHJpbWFyaWVzXyhwcmltYXJpZXMpLAorICAgICAgICB0cmFuc2Zlcl8odHJhbnNmZXIpLAorICAgICAgICBtYXRyaXhfKG1hdHJpeCksCisgICAgICAgIHJhbmdlXyhyYW5nZSkge30KKyAgQ29sb3JTcGFjZShQcmltYXJ5SUQgcHJpbWFyaWVzLAorICAgICAgICAgICAgIFRyYW5zZmVySUQgdHJhbnNmZXIsCisgICAgICAgICAgICAgTWF0cml4SUQgbWF0cml4LAorICAgICAgICAgICAgIFJhbmdlSUQgcmFuZ2UsCisgICAgICAgICAgICAgY29uc3Qgc2tjbXNfTWF0cml4M3gzKiBjdXN0b21fcHJpbWFyeV9tYXRyaXgsCisgICAgICAgICAgICAgY29uc3Qgc2tjbXNfVHJhbnNmZXJGdW5jdGlvbiogY3Vuc3RvbV90cmFuc2Zlcl9mbik7CisKKyAgZXhwbGljaXQgQ29sb3JTcGFjZShjb25zdCBTa0NvbG9yU3BhY2UmIHNrX2NvbG9yX3NwYWNlKTsKKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQtY29uc3RydWN0b3Igb2JqZWN0LgorICBib29sIElzVmFsaWQoKSBjb25zdDsKKworICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlU1JHQigpIHsKKyAgICByZXR1cm4gQ29sb3JTcGFjZShQcmltYXJ5SUQ6OkJUNzA5LCBUcmFuc2ZlcklEOjpJRUM2MTk2Nl8yXzEsIE1hdHJpeElEOjpSR0IsCisgICAgICAgICAgICAgICAgICAgICAgUmFuZ2VJRDo6RlVMTCk7CisgIH0KKworICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlRGlzcGxheVAzRDY1KCkgeworICAgIHJldHVybiBDb2xvclNwYWNlKFByaW1hcnlJRDo6U01QVEVTVDQzMl8xLCBUcmFuc2ZlcklEOjpJRUM2MTk2Nl8yXzEsCisgICAgICAgICAgICAgICAgICAgICAgTWF0cml4SUQ6OlJHQiwgUmFuZ2VJRDo6RlVMTCk7CisgIH0KKyAgc3RhdGljIENvbG9yU3BhY2UgQ3JlYXRlQ3VzdG9tKGNvbnN0IHNrY21zX01hdHJpeDN4MyYgdG9fWFlaRDUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2tjbXNfVHJhbnNmZXJGdW5jdGlvbiYgZm4pOworICBzdGF0aWMgQ29sb3JTcGFjZSBDcmVhdGVDdXN0b20oY29uc3Qgc2tjbXNfTWF0cml4M3gzJiB0b19YWVpENTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2ZlcklEIHRyYW5zZmVyKTsKKyAgc3RhdGljIGNvbnN0ZXhwciBDb2xvclNwYWNlIENyZWF0ZVhZWkQ1MCgpIHsKKyAgICByZXR1cm4gQ29sb3JTcGFjZShQcmltYXJ5SUQ6OlhZWl9ENTAsIFRyYW5zZmVySUQ6OkxJTkVBUiwgTWF0cml4SUQ6OlJHQiwKKyAgICAgICAgICAgICAgICAgICAgICBSYW5nZUlEOjpGVUxMKTsKKyAgfQorCisgIC8vIEV4dGVuZGVkIHNSR0IgbWF0Y2hlcyBzUkdCIGZvciB2YWx1ZXMgaW4gWzAsIDFdLCBhbmQgZXh0ZW5kcyB0aGUgdHJhbnNmZXIKKyAgLy8gZnVuY3Rpb24gdG8gYWxsIHJlYWwgdmFsdWVzLgorICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlRXh0ZW5kZWRTUkdCKCkgeworICAgIHJldHVybiBDb2xvclNwYWNlKFByaW1hcnlJRDo6QlQ3MDksIFRyYW5zZmVySUQ6OklFQzYxOTY2XzJfMV9IRFIsCisgICAgICAgICAgICAgICAgICAgICAgTWF0cml4SUQ6OlJHQiwgUmFuZ2VJRDo6RlVMTCk7CisgIH0KKworICAvLyBzY1JHQiB1c2VzIHRoZSBzYW1lIHByaW1hcmllcyBhcyBzUkdCIGJ1dCBoYXMgYSBsaW5lYXIgdHJhbnNmZXIgZnVuY3Rpb24KKyAgLy8gZm9yIGFsbCByZWFsIHZhbHVlcywgYW5kIGEgd2hpdGUgcG9pbnQgb2Yga0RlZmF1bHRTY3JnYkxpbmVhclNkcldoaXRlTGV2ZWwuCisgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFjZSBDcmVhdGVTQ1JHQkxpbmVhcigpIHsKKyAgICByZXR1cm4gQ29sb3JTcGFjZShQcmltYXJ5SUQ6OkJUNzA5LCBUcmFuc2ZlcklEOjpMSU5FQVJfSERSLCBNYXRyaXhJRDo6UkdCLAorICAgICAgICAgICAgICAgICAgICAgIFJhbmdlSUQ6OkZVTEwpOworICB9CisgIC8vIEFsbG93cyBzcGVjaWZ5aW5nIGEgY3VzdG9tIFNEUiB3aGl0ZSBsZXZlbC4gIE9ubHkgdXNlZCBvbiBXaW5kb3dzLgorICBzdGF0aWMgQ29sb3JTcGFjZSBDcmVhdGVTQ1JHQkxpbmVhcihmbG9hdCBzZHJfd2hpdGVfbGV2ZWwpOworCisgIC8vIEhEUjEwIHVzZXMgQlQuMjAyMCBwcmltYXJpZXMgd2l0aCBTTVBURSBTVCAyMDg0IFBRIHRyYW5zZmVyIGZ1bmN0aW9uLgorICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlSERSMTAoKSB7CisgICAgcmV0dXJuIENvbG9yU3BhY2UoUHJpbWFyeUlEOjpCVDIwMjAsIFRyYW5zZmVySUQ6OlNNUFRFU1QyMDg0LCBNYXRyaXhJRDo6UkdCLAorICAgICAgICAgICAgICAgICAgICAgIFJhbmdlSUQ6OkZVTEwpOworICB9CisgIC8vIEFsbG93cyBzcGVjaWZ5aW5nIGEgY3VzdG9tIFNEUiB3aGl0ZSBsZXZlbC4gIE9ubHkgdXNlZCBvbiBXaW5kb3dzLgorICBzdGF0aWMgQ29sb3JTcGFjZSBDcmVhdGVIRFIxMChmbG9hdCBzZHJfd2hpdGVfbGV2ZWwpOworCisgIC8vIEhMRyB1c2VzIHRoZSBCVC4yMDIwIHByaW1hcmllcyB3aXRoIHRoZSBBUklCX1NURF9CNjcgdHJhbnNmZXIgZnVuY3Rpb24uCisgIHN0YXRpYyBDb2xvclNwYWNlIENyZWF0ZUhMRygpOworCisgIC8vIENyZWF0ZSBhIHBpZWNld2lzZS1IRFIgY29sb3Igc3BhY2UuCisgIC8vIC0gSWYgfHByaW1hcmllc3wgaXMgQ1VTVE9NLCB0aGVuIHxjdXN0b21fcHJpbWFyeV9tYXRyaXh8IG11c3QgYmUKKyAgLy8gICBub24tbnVsbHB0ci4KKyAgLy8gLSBUaGUgU0RSIGpvaW50IGlzIHRoZSBlbmNvZGVkIHBpeGVsIHZhbHVlIHdoZXJlIHRoZSBTRFIgcG9ydGlvbiByZWFjaGVzIDEsCisgIC8vICAgdXN1YWxseSAwLjI1IG9yIDAuNSwgY29ycmVzcG9uZGluZyB0byBnaXZpbmcgOCBvciA5IG9mIDEwIGJpdHMgdG8gU0RSLgorICAvLyAgIFRoaXMgbXVzdCBiZSBpbiB0aGUgb3BlbiBpbnRlcnZhbCAoMCwgMSkuCisgIC8vIC0gVGhlIEhEUiBsZXZlbCB0aGUgdmFsdWUgdGhhdCB0aGUgdHJhbnNmZXIgZnVuY3Rpb24gd2lsbCBldmFsdWF0ZSB0byBhdCAxLAorICAvLyAgIGFuZCByZXByZXNlbnRzIHRoZSBtYXhpbXVtIEhEUiBicmlnaHRuZXNzIHJlbGF0aXZlIHRvIHRoZSBtYXhpbXVtIFNEUgorICAvLyAgIGJyaWdodG5lc3MuIFRoaXMgbXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMS4KKyAgc3RhdGljIENvbG9yU3BhY2UgQ3JlYXRlUGllY2V3aXNlSERSKAorICAgICAgUHJpbWFyeUlEIHByaW1hcmllcywKKyAgICAgIGZsb2F0IHNkcl9qb2ludCwKKyAgICAgIGZsb2F0IGhkcl9sZXZlbCwKKyAgICAgIGNvbnN0IHNrY21zX01hdHJpeDN4MyogY3VzdG9tX3ByaW1hcnlfbWF0cml4ID0gbnVsbHB0cik7CisKKyAgLy8gVE9ETyhjY2FtZXJvbik6IFJlbW92ZSB0aGVzZSwgYW5kIHJlcGxhY2Ugd2l0aCBtb3JlIGdlbmVyaWMgY29uc3RydWN0b3JzLgorICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlSnBlZygpIHsKKyAgICAvLyBUT0RPKGNjYW1lcm9uKTogRGV0ZXJtaW5lIHdoaWNoIHByaW1hcmllcyBhbmQgdHJhbnNmZXIgZnVuY3Rpb24gd2VyZQorICAgIC8vIGludGVuZGVkIGhlcmUuCisgICAgcmV0dXJuIENvbG9yU3BhY2UoUHJpbWFyeUlEOjpCVDcwOSwgVHJhbnNmZXJJRDo6SUVDNjE5NjZfMl8xLAorICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeElEOjpTTVBURTE3ME0sIFJhbmdlSUQ6OkZVTEwpOworICB9CisgIHN0YXRpYyBjb25zdGV4cHIgQ29sb3JTcGFjZSBDcmVhdGVSRUM2MDEoKSB7CisgICAgcmV0dXJuIENvbG9yU3BhY2UoUHJpbWFyeUlEOjpTTVBURTE3ME0sIFRyYW5zZmVySUQ6OlNNUFRFMTcwTSwKKyAgICAgICAgICAgICAgICAgICAgICBNYXRyaXhJRDo6U01QVEUxNzBNLCBSYW5nZUlEOjpMSU1JVEVEKTsKKyAgfQorICBzdGF0aWMgY29uc3RleHByIENvbG9yU3BhY2UgQ3JlYXRlUkVDNzA5KCkgeworICAgIHJldHVybiBDb2xvclNwYWNlKFByaW1hcnlJRDo6QlQ3MDksIFRyYW5zZmVySUQ6OkJUNzA5LCBNYXRyaXhJRDo6QlQ3MDksCisgICAgICAgICAgICAgICAgICAgICAgUmFuZ2VJRDo6TElNSVRFRCk7CisgIH0KKworICAvLyBPbiBtYWNPUyBhbmQgb24gQ2hyb21lT1MsIHNSR0IncyAoMSwxLDEpIGFsd2F5cyBjb2luY2lkZXMgd2l0aCBQUSdzIDEwMAorICAvLyBuaXRzICh3aGljaCBtYXkgbm90IGJlIDEwMCBwaHlzaWNhbCBuaXRzKS4gT24gV2luZG93cywgc1JHQidzICgxLDEsMSkKKyAgLy8gbWFwcyB0byBzY1JHQiBsaW5lYXIncyAoMSwxLDEpIHdoZW4gdGhlIFNEUiB3aGl0ZSBsZXZlbCBpcyBzZXQgdG8gODAgbml0cy4KKyAgLy8gU2VlIGFsc28ga0RlZmF1bHRTY3JnYkxpbmVhclNkcldoaXRlTGV2ZWwuCisgIHN0YXRpYyBjb25zdGV4cHIgZmxvYXQga0RlZmF1bHRTRFJXaGl0ZUxldmVsID0gMTAwLmY7CisKKyAgLy8gVGhlIGRlZmF1bHQgd2hpdGUgbGV2ZWwgaW4gbml0cyBmb3Igc2NSR0IgbGluZWFyIGNvbG9yIHNwYWNlLiBPbiBXaW5kb3dzLAorICAvLyBzUkdCJ3MgKDEsMSwxKSBtYXBzIHRvIHNjUkdCIGxpbmVhcidzICgxLDEsMSkgd2hlbiB0aGUgU0RSIHdoaXRlIGxldmVsIGlzCisgIC8vIHNldCB0byA4MCBuaXRzLiBPbiBNYWMgYW5kIENocm9tZU9TLCBzUkdCJ3MgKDEsMSwxKSBtYXBzIHRvIFBRJ3MgMTAwIG5pdHMuCisgIC8vIFVzaW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgdmFsdWUgaGVyZSBzYXRpc2ZpZXMgYm90aCBjb25zdHJhaW50cy4KKyNpZiBkZWZpbmVkKE9TX1dJTikKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBrRGVmYXVsdFNjcmdiTGluZWFyU2RyV2hpdGVMZXZlbCA9IDgwLjBmOworI2Vsc2UKKyAgc3RhdGljIGNvbnN0ZXhwciBmbG9hdCBrRGVmYXVsdFNjcmdiTGluZWFyU2RyV2hpdGVMZXZlbCA9CisgICAgICBrRGVmYXVsdFNEUldoaXRlTGV2ZWw7CisjZW5kaWYgIC8vIE9TX1dJTgorCisgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3Q7CisgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvclNwYWNlJiBvdGhlcikgY29uc3Q7CisgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvbG9yU3BhY2UmIG90aGVyKSBjb25zdDsKKyAgc2l6ZV90IEdldEhhc2goKSBjb25zdDsKKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdCB7CisgICAgLy8gVE9ETzogUmVmaW5lIENvbG9yU3BhY2U6OlRvU3RyaW5nKCkuCisgICAgcmV0dXJuICIiOworICB9CisKKyAgYm9vbCBJc1dpZGUoKSBjb25zdDsKKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRyYW5zZmVyIGZ1bmN0aW9uIGlzIGFuIEhEUiBvbmUgKFNNUFRFIDIwODQsIEhMRywgZXRjKS4KKyAgYm9vbCBJc0hEUigpIGNvbnN0IHsKKyAgICAvLyBUT0RPOiBSZWZpbmUgQ29sb3JTcGFjZTo6SXNIRFIoKS4KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGVuY29kZWQgdmFsdWVzIGNhbiBiZSBvdXRzaWRlIG9mIHRoZSAwLjAtMS4wIHJhbmdlLgorICBib29sIEZ1bGxSYW5nZUVuY29kZWRWYWx1ZXMoKSBjb25zdDsKKworICAvLyBSZXR1cm5zIHRoZSBjb2xvciBzcGFjZSdzIGNvbnRlbnQgY29sb3IgdXNhZ2UgY2F0ZWdvcnkgKHNSR0IsIFdDRywgb3IgSERSKS4KKyAgQ29udGVudENvbG9yVXNhZ2UgR2V0Q29udGVudENvbG9yVXNhZ2UoKSBjb25zdDsKKworICAvLyBSZXR1cm4gdGhpcyBjb2xvciBzcGFjZSB3aXRoIGFueSBZVVYgdG8gUkdCIGNvbnZlcnNpb24gc3RyaXBwZWQgb2ZmLgorICBDb2xvclNwYWNlIEdldEFzUkdCKCkgY29uc3Q7CisKKyAgLy8gUmV0dXJuIHRoaXMgY29sb3Igc3BhY2Ugd2l0aCBhbnkgcmFuZ2UgYWRqdXN0IG9yIFlVViB0byBSR0IgY29udmVyc2lvbgorICAvLyBzdHJpcHBlZCBvZmYuCisgIENvbG9yU3BhY2UgR2V0QXNGdWxsUmFuZ2VSR0IoKSBjb25zdDsKKworICAvLyBSZXR1cm4gYSBjb2xvciBzcGFjZSB3aGVyZSBhbGwgdmFsdWVzIGFyZSBiaWdnZXIvc21hbGxlciBieSB0aGUgZ2l2ZW4KKyAgLy8gZmFjdG9yLiBJZiB5b3UgY29udmVydCBjb2xvcnMgZnJvbSBTUkdCIHRvIFNSR0IuR2V0U2NhbGVkQ29sb3JTcGFjZSgyLjApCisgIC8vIGV2ZXJ5dGhpbmcgd2lsbCBiZSBoYWxmIGFzIGJyaWdodCBpbiBsaW5lYXIgbHVtZW5zLgorICBDb2xvclNwYWNlIEdldFNjYWxlZENvbG9yU3BhY2UoZmxvYXQgZmFjdG9yKSBjb25zdDsKKworICAvLyBSZXR1cm4gdHJ1ZSBpZiBibGVuZGluZyBpbiB8dGhpc3wgaXMgY2xvc2UgZW5vdWdoIHRvIGJsZW5kaW5nIGluIHNSR0IgdG8KKyAgLy8gYmUgY29uc2lkZXJlZCBhY2NlcHRhYmxlIChvbmx5IFBRIGFuZCBuZWFybHktbGluZWFyIHRyYW5zZmVyIGZ1bmN0aW9ucworICAvLyByZXR1cm4gZmFsc2UpLgorICBib29sIElzU3VpdGFibGVGb3JCbGVuZGluZygpIGNvbnN0OworCisgIC8vIFJldHVybiBhIGNvbWJpbmVkIGNvbG9yIHNwYWNlIHdpdGggaGFzIHRoZSBzYW1lIHByaW1hcnkgYW5kIHRyYW5zZmVyIHRoYW4KKyAgLy8gdGhlIGNhbGxlciBidXQgcmVwbGFjaW5nIHRoZSBtYXRyaXggYW5kIHJhbmdlIHdpdGggdGhlIGdpdmVuIHZhbHVlcy4KKyAgQ29sb3JTcGFjZSBHZXRXaXRoTWF0cml4QW5kUmFuZ2UoTWF0cml4SUQgbWF0cml4LCBSYW5nZUlEIHJhbmdlKSBjb25zdDsKKworICAvLyBJZiB0aGlzIGNvbG9yIHNwYWNlIGhhcyBhIFBRIG9yIHNjUkdCIGxpbmVhciB0cmFuc2ZlciBmdW5jdGlvbiwgdGhlbiByZXR1cm4KKyAgLy8gfHRoaXN8IHdpdGggaXRzIFNEUiB3aGl0ZSBsZXZlbCBzZXQgdG8gfHNkcl93aGl0ZV9sZXZlbHwuIE90aGVyd2lzZSByZXR1cm4KKyAgLy8gfHRoaXN8IHVubW9kaWZpZWQuCisgIENvbG9yU3BhY2UgR2V0V2l0aFNEUldoaXRlTGV2ZWwoZmxvYXQgc2RyX3doaXRlX2xldmVsKSBjb25zdDsKKworI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxscHRyIGZvciBub24tUkdCIHNwYWNlcywgc3BhY2VzIHdpdGggbm9uLUZVTEwKKyAgLy8gcmFuZ2UsIGFuZCB1bnNwZWNpZmllZCBzcGFjZXMuCisgIHNrX3NwPFNrQ29sb3JTcGFjZT4gVG9Ta0NvbG9yU3BhY2UoKSBjb25zdDsKKyNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKQorCisgIC8vIFJldHVybiBhIEdMY29sb3JTcGFjZSB2YWx1ZSB0aGF0IGlzIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgfHRoaXN8LiBUaGlzCisgIC8vIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VyaWFsaXplIENvbG9yU3BhY2Ugb2JqZWN0cyBhY3Jvc3MgdGhlIEdQVSBjb21tYW5kCisgIC8vIGJ1ZmZlci4KKyAgY29uc3QgX0dMY29sb3JTcGFjZSogQXNHTENvbG9yU3BhY2UoKSBjb25zdDsKKworI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gRm9yIFlVViBjb2xvciBzcGFjZXMsIHJldHVybiB0aGUgY2xvc2VzdCBTa1lVVkNvbG9yU3BhY2UuIFJldHVybnMgdHJ1ZSBpZiBhCisgIC8vIGNsb3NlIG1hdGNoIGlzIGZvdW5kLiBPdGhlcndpc2UsIGxlYXZlcyAqb3V0IHVuY2hhbmdlZCBhbmQgcmV0dXJucyBmYWxzZS4KKyAgLy8gSWYgfG1hdHJpeF9pZHwgaXMgTWF0cml4SUQ6OkJUMjAyMF9OQ0wgYW5kIHxiaXRfZGVwdGh8IGlzIHByb3ZpZGVkLCBhIGJpdAorICAvLyBkZXB0aCBhcHByb3ByaWF0ZSBTa1lVVkNvbG9yU3BhY2Ugd2lsbCBiZSBwcm92aWRlZC4KKyAgYm9vbCBUb1NrWVVWQ29sb3JTcGFjZShpbnQgYml0X2RlcHRoLCBTa1lVVkNvbG9yU3BhY2UqIG91dCkgY29uc3Q7CisgIGJvb2wgVG9Ta1lVVkNvbG9yU3BhY2UoU2tZVVZDb2xvclNwYWNlKiBvdXQpIGNvbnN0IHsKKyAgICByZXR1cm4gVG9Ta1lVVkNvbG9yU3BhY2Uoa0RlZmF1bHRCaXREZXB0aCwgb3V0KTsKKyAgfQorI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCisKKyAgdm9pZCBHZXRQcmltYXJ5TWF0cml4KHNrY21zX01hdHJpeDN4MyogdG9fWFlaRDUwKSBjb25zdDsKKyAgdm9pZCBHZXRQcmltYXJ5TWF0cml4KHNraWE6Ok1hdHJpeDQ0KiB0b19YWVpENTApIGNvbnN0OworICBib29sIEdldFRyYW5zZmVyRnVuY3Rpb24oc2tjbXNfVHJhbnNmZXJGdW5jdGlvbiogZm4pIGNvbnN0OworICBib29sIEdldEludmVyc2VUcmFuc2ZlckZ1bmN0aW9uKHNrY21zX1RyYW5zZmVyRnVuY3Rpb24qIGZuKSBjb25zdDsKKworICAvLyBSZXR1cm5zIHRoZSBTRFIgd2hpdGUgbGV2ZWwgc3BlY2lmaWVkIGZvciB0aGUgUFEgb3IgSExHIHRyYW5zZmVyIGZ1bmN0aW9ucy4KKyAgLy8gSWYgbm8gdmFsdWUgd2FzIHNwZWNpZmllZCwgdGhlbiB1c2Uga0RlZmF1bHRTRFJXaGl0ZUxldmVsLiBJZiB0aGUgdHJhbnNmZXIKKyAgLy8gZnVuY3Rpb24gaXMgbm90IFBRIHRoZW4gcmV0dXJuIGZhbHNlLgorICBib29sIEdldFNEUldoaXRlTGV2ZWwoZmxvYXQqIHNkcl93aGl0ZV9sZXZlbCkgY29uc3Q7CisKKyAgLy8gUmV0dXJucyB0aGUgcGFyYW1ldGVycyBmb3IgYSBQSUVDRVdJU0VfSERSIHRyYW5zZmVyIGZ1bmN0aW9uLiBTZWUKKyAgLy8gQ3JlYXRlUGllY2V3aXNlSERSIGZvciBwYXJhbWV0ZXIgbWVhbmluZ3MuCisgIGJvb2wgR2V0UGllY2V3aXNlSERSUGFyYW1zKGZsb2F0KiBzZHJfcG9pbnQsIGZsb2F0KiBoZHJfbGV2ZWwpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIHRyYW5zZmVyIG1hdHJpeCBmb3IgfGJpdF9kZXB0aHwuIEZvciBtb3N0IGZvcm1hdHMsIHRoaXMgaXMgdGhlCisgIC8vIFJHQiB0byBZVVYgbWF0cml4LgorICB2b2lkIEdldFRyYW5zZmVyTWF0cml4KGludCBiaXRfZGVwdGgsIHNraWE6Ok1hdHJpeDQ0KiBtYXRyaXgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIHJhbmdlIGFkanVzdCBtYXRyaXggdGhhdCBjb252ZXJ0cyBmcm9tIHxyYW5nZV98IHRvIGZ1bGwgcmFuZ2UKKyAgLy8gZm9yIHxiaXRfZGVwdGh8LgorICB2b2lkIEdldFJhbmdlQWRqdXN0TWF0cml4KGludCBiaXRfZGVwdGgsIHNraWE6Ok1hdHJpeDQ0KiBtYXRyaXgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgcHJpbWFyeSBJRC4KKyAgLy8gTm90ZTogaWYgU2V0Q3VzdG9tUHJpbWFyaWVzKCkgaGFzIGJlZW4gdXNlZCwgdGhlIHByaW1hcnkgSUQgcmV0dXJuZWQKKyAgLy8gbWF5IGhhdmUgYmVlbiBzZXQgdG8gUHJpbWFyeUlEOjpDVVNUT00sIG9yIGJlZW4gY29lcmNlZCB0byBhbm90aGVyCisgIC8vIFByaW1hcnlJRCBpZiBpdCB3YXMgdmVyeSBjbG9zZS4KKyAgUHJpbWFyeUlEIEdldFByaW1hcnlJRCgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgdHJhbnNmZXIgSUQuCisgIFRyYW5zZmVySUQgR2V0VHJhbnNmZXJJRCgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgbWF0cml4IElELgorICBNYXRyaXhJRCBHZXRNYXRyaXhJRCgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgcmFuZ2UgSUQuCisgIFJhbmdlSUQgR2V0UmFuZ2VJRCgpIGNvbnN0OworCisgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHJhbnNmZXIgZnVuY3Rpb24gaXMgZGVmaW5lZCBieSBhbgorICAvLyBza2Ntc19UcmFuc2ZlckZ1bmN0aW9uIHdoaWNoIGlzIGV4dGVuZGVkIHRvIGFsbCByZWFsIHZhbHVlcy4KKyAgYm9vbCBIYXNFeHRlbmRlZFNrVHJhbnNmZXJGbigpIGNvbnN0OworCisgIC8vIFJldHVybnMgdHJ1ZSBpZiBlYWNoIGNvbG9yIGluIHxvdGhlcnwgY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGlzIGNvbG9yIHNwYWNlLgorICBib29sIENvbnRhaW5zKGNvbnN0IENvbG9yU3BhY2UmIG90aGVyKSBjb25zdDsKKworIHByaXZhdGU6CisgIC8vIFRoZSBkZWZhdWx0IGJpdCBkZXB0aCBhc3N1bWVkIGJ5IFRvU2tZVVZDb2xvclNwYWNlKCkuCisgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtEZWZhdWx0Qml0RGVwdGggPSA4OworCisgIHN0YXRpYyB2b2lkIEdldFByaW1hcnlNYXRyaXgoUHJpbWFyeUlELCBza2Ntc19NYXRyaXgzeDMqIHRvX1hZWkQ1MCk7CisgIHN0YXRpYyBib29sIEdldFRyYW5zZmVyRnVuY3Rpb24oVHJhbnNmZXJJRCwgc2tjbXNfVHJhbnNmZXJGdW5jdGlvbiogZm4pOworICBzdGF0aWMgc2l6ZV90IFRyYW5zZmVyUGFyYW1Db3VudChUcmFuc2ZlcklEKTsKKworICB2b2lkIFNldEN1c3RvbVRyYW5zZmVyRnVuY3Rpb24oY29uc3Qgc2tjbXNfVHJhbnNmZXJGdW5jdGlvbiYgZm4pOworICB2b2lkIFNldEN1c3RvbVByaW1hcmllcyhjb25zdCBza2Ntc19NYXRyaXgzeDMmIHRvX1hZWkQ1MCk7CisKKyAgUHJpbWFyeUlEIHByaW1hcmllc18gPSBQcmltYXJ5SUQ6OklOVkFMSUQ7CisgIFRyYW5zZmVySUQgdHJhbnNmZXJfID0gVHJhbnNmZXJJRDo6SU5WQUxJRDsKKyAgTWF0cml4SUQgbWF0cml4XyA9IE1hdHJpeElEOjpJTlZBTElEOworICBSYW5nZUlEIHJhbmdlXyA9IFJhbmdlSUQ6OklOVkFMSUQ7CisKKyAgLy8gT25seSB1c2VkIGlmIHByaW1hcmllc18gaXMgUHJpbWFyeUlEOjpDVVNUT00uCisgIGZsb2F0IGN1c3RvbV9wcmltYXJ5X21hdHJpeF9bOV0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CisKKyAgLy8gUGFyYW1ldGVycyBmb3IgdGhlIHRyYW5zZmVyIGZ1bmN0aW9uLiBUaGUgaW50ZXJwcmV0YXRpb24gZGVwZW5kcyBvbgorICAvLyB8dHJhbnNmZXJffC4gT25seSBUcmFuc2ZlclBhcmFtQ291bnQoKSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkLCBhbGwKKyAgLy8gb3RoZXJzIG11c3QgYmUgemVyby4KKyAgLy8gLSBDVVNUT00gYW5kIENVU1RPTV9IRFI6IEVudHJpZXMgQSB0aHJvdWdoIEcgb2YgdGhlIHNrY21zX1RyYW5zZmVyRnVuY3Rpb24KKyAgLy8gICBzdHJ1Y3R1cmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorICAvLyAtIFNNUFRFU1QyMDg0OiBTRFIgd2hpdGUgcG9pbnQuCisgIGZsb2F0IHRyYW5zZmVyX3BhcmFtc19bN10gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMH07CisKKyAgZnJpZW5kIHN0cnVjdCBJUEM6OlBhcmFtVHJhaXRzPGdmeDo6Q29sb3JTcGFjZT47CisgIGZyaWVuZCBzdHJ1Y3QgbW9qbzo6U3RydWN0VHJhaXRzPGdmeDo6bW9qb206OkNvbG9yU3BhY2VEYXRhVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Z4OjpDb2xvclNwYWNlPjsKK307CisKKy8vIFN0cmVhbSBvcGVyYXRvciBzbyBDb2xvclNwYWNlIGNhbiBiZSB1c2VkIGluIGFzc2VydGlvbiBzdGF0ZW1lbnRzLgorQ09MT1JfU1BBQ0VfRVhQT1JUIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3JTcGFjZSYgY29sb3Jfc3BhY2UpOworCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0NPTE9SX1NQQUNFX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2NvbG9yX3NwYWNlX2V4cG9ydC5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9jb2xvcl9zcGFjZV9leHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQwMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9jb2xvcl9zcGFjZV9leHBvcnQuaApAQCAtMCwwICsxLDI5IEBACisvLyBDb3B5cmlnaHQgMjAxNyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0NPTE9SX1NQQUNFX0VYUE9SVF9IXworI2RlZmluZSBVSV9HRlhfQ09MT1JfU1BBQ0VfRVhQT1JUX0hfCisKKyNpZiBkZWZpbmVkKENPTVBPTkVOVF9CVUlMRCkKKyNpZiBkZWZpbmVkKFdJTjMyKQorCisjaWYgZGVmaW5lZChDT0xPUl9TUEFDRV9JTVBMRU1FTlRBVElPTikKKyNkZWZpbmUgQ09MT1JfU1BBQ0VfRVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorI2Vsc2UKKyNkZWZpbmUgQ09MT1JfU1BBQ0VfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2VuZGlmICAvLyBkZWZpbmVkKENPTE9SX1NQQUNFX0lNUExFTUVOVEFUSU9OKQorCisjZWxzZSAgLy8gZGVmaW5lZChXSU4zMikKKyNpZiBkZWZpbmVkKENPTE9SX1NQQUNFX0lNUExFTUVOVEFUSU9OKQorI2RlZmluZSBDT0xPUl9TUEFDRV9FWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKyNlbHNlCisjZGVmaW5lIENPTE9SX1NQQUNFX0VYUE9SVAorI2VuZGlmCisjZW5kaWYKKworI2Vsc2UgIC8vIGRlZmluZWQoQ09NUE9ORU5UX0JVSUxEKQorI2RlZmluZSBDT0xPUl9TUEFDRV9FWFBPUlQKKyNlbmRpZgorCisjZW5kaWYgIC8vIFVJX0dGWF9DT0xPUl9TUEFDRV9FWFBPUlRfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnQuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjdmMjAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50LmNjCkBAIC0wLDAgKzEsMTcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpbmNsdWRlICJ1aS9nZngvZ2VvbWV0cnkvcG9pbnQuaCIKKworI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKK3RlbXBsYXRlIGNsYXNzIFBvaW50QmFzZTxQb2ludCwgaW50LCBWZWN0b3IyZD47CisKK3N0ZDo6c3RyaW5nIFBvaW50OjpUb1N0cmluZygpIGNvbnN0IHsKKyAgcmV0dXJuIGJhc2U6OlN0cmluZ1ByaW50ZigiJWQsJWQiLCB4KCksIHkoKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBnZngKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnQuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDAyY2NmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1BPSU5UX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9QT0lOVF9IXworCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9wb2ludF9iYXNlLmgiCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuaCIKKyNpbmNsdWRlICJ1aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmQuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKKy8vIEEgcG9pbnQgaGFzIGFuIHggYW5kIHkgY29vcmRpbmF0ZS4KK2NsYXNzIFBvaW50IDogcHVibGljIFBvaW50QmFzZTxQb2ludCwgaW50LCBWZWN0b3IyZD4geworIHB1YmxpYzoKKyAgUG9pbnQoKSA6IFBvaW50QmFzZTxQb2ludCwgaW50LCBWZWN0b3IyZD4oMCwgMCkge30KKyAgUG9pbnQoaW50IHgsIGludCB5KSA6IFBvaW50QmFzZTxQb2ludCwgaW50LCBWZWN0b3IyZD4oeCwgeSkge30KKworICB+UG9pbnQoKSB7fQorCisgIG9wZXJhdG9yIFBvaW50RigpIGNvbnN0IHsKKyAgICByZXR1cm4gUG9pbnRGKHN0YXRpY19jYXN0PGZsb2F0Pih4KCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4oeSgpKSk7CisgIH0KKworICAvLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBvaW50LgorICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQb2ludCYgbGhzLCBjb25zdCBQb2ludCYgcmhzKSB7CisgIHJldHVybiBsaHMueCgpID09IHJocy54KCkgJiYgbGhzLnkoKSA9PSByaHMueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBvaW50JiBsaHMsIGNvbnN0IFBvaW50JiByaHMpIHsKKyAgcmV0dXJuICEobGhzID09IHJocyk7Cit9CisKK2lubGluZSBQb2ludCBvcGVyYXRvcisoY29uc3QgUG9pbnQmIGxocywgY29uc3QgVmVjdG9yMmQmIHJocykgeworICBQb2ludCByZXN1bHQobGhzKTsKKyAgcmVzdWx0ICs9IHJoczsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFBvaW50IG9wZXJhdG9yLShjb25zdCBQb2ludCYgbGhzLCBjb25zdCBWZWN0b3IyZCYgcmhzKSB7CisgIFBvaW50IHJlc3VsdChsaHMpOworICByZXN1bHQgLT0gcmhzOworICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgVmVjdG9yMmQgb3BlcmF0b3ItKGNvbnN0IFBvaW50JiBsaHMsIGNvbnN0IFBvaW50JiByaHMpIHsKKyAgcmV0dXJuIFZlY3RvcjJkKGxocy54KCkgLSByaHMueCgpLCBsaHMueSgpIC0gcmhzLnkoKSk7Cit9CisKK2lubGluZSBQb2ludCBQb2ludEF0T2Zmc2V0RnJvbU9yaWdpbihjb25zdCBWZWN0b3IyZCYgb2Zmc2V0X2Zyb21fb3JpZ2luKSB7CisgIHJldHVybiBQb2ludChvZmZzZXRfZnJvbV9vcmlnaW4ueCgpLCBvZmZzZXRfZnJvbV9vcmlnaW4ueSgpKTsKK30KKworZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIFBvaW50QmFzZTxQb2ludCwgaW50LCBWZWN0b3IyZD47CisKK30gIC8vIG5hbWVzcGFjZSBnZngKKworI2VuZGlmICAvLyBVSV9HRlhfR0VPTUVUUllfUE9JTlRfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnQzX2YuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnQzX2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2I5NWMwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludDNfZi5oCkBAIC0wLDAgKzEsODYgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1BPSU5UM19GX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9QT0lOVDNfRl9IXworCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9wb2ludF9mLmgiCisKK25hbWVzcGFjZSBnZnggeworCisvLyBBIHBvaW50IGhhcyBhbiB4LCB5IGFuZCB6IGNvb3JkaW5hdGUuCitjbGFzcyBQb2ludDNGIHsKKyBwdWJsaWM6CisgIFBvaW50M0YoKSA6IHhfKDApLCB5XygwKSwgel8oMCkge30KKworICBQb2ludDNGKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIDogeF8oeCksIHlfKHkpLCB6Xyh6KSB7fQorCisgIGV4cGxpY2l0IFBvaW50M0YoY29uc3QgUG9pbnRGJiBwb2ludCkgOiB4Xyhwb2ludC54KCkpLCB5Xyhwb2ludC55KCkpLCB6XygwKSB7fQorCisgIH5Qb2ludDNGKCkge30KKworICB2b2lkIFNjYWxlKGZsb2F0IHNjYWxlKSB7IFNjYWxlKHNjYWxlLCBzY2FsZSwgc2NhbGUpOyB9CisKKyAgdm9pZCBTY2FsZShmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlLCBmbG9hdCB6X3NjYWxlKSB7CisgICAgU2V0UG9pbnQoeCgpICogeF9zY2FsZSwgeSgpICogeV9zY2FsZSwgeigpICogel9zY2FsZSk7CisgIH0KKworICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4geF87IH0KKyAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIHlfOyB9CisgIGZsb2F0IHooKSBjb25zdCB7IHJldHVybiB6XzsgfQorCisgIHZvaWQgc2V0X3goZmxvYXQgeCkgeyB4XyA9IHg7IH0KKyAgdm9pZCBzZXRfeShmbG9hdCB5KSB7IHlfID0geTsgfQorICB2b2lkIHNldF96KGZsb2F0IHopIHsgel8gPSB6OyB9CisKKyAgdm9pZCBTZXRQb2ludChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7CisgICAgeF8gPSB4OworICAgIHlfID0geTsKKyAgICB6XyA9IHo7CisgIH0KKworICAvLyBSZXR1cm5zIHRoZSBzcXVhcmVkIGV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuCisgIGZsb2F0IFNxdWFyZWREaXN0YW5jZVRvKGNvbnN0IFBvaW50M0YmIG90aGVyKSBjb25zdCB7CisgICAgZmxvYXQgZHggPSB4XyAtIG90aGVyLnhfOworICAgIGZsb2F0IGR5ID0geV8gLSBvdGhlci55XzsKKyAgICBmbG9hdCBkeiA9IHpfIC0gb3RoZXIuel87CisgICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkejsKKyAgfQorCisgIFBvaW50RiBBc1BvaW50RigpIGNvbnN0IHsgcmV0dXJuIFBvaW50Rih4XywgeV8pOyB9CisKKyAgLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiAzZCBwb2ludC4KKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKKworIHByaXZhdGU6CisgIGZsb2F0IHhfOworICBmbG9hdCB5XzsKKyAgZmxvYXQgel87CisKKyAgLy8gY29weS9hc3NpZ24gYXJlIGFsbG93ZWQuCit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvaW50M0YmIGxocywgY29uc3QgUG9pbnQzRiYgcmhzKSB7CisgIHJldHVybiBsaHMueCgpID09IHJocy54KCkgJiYgbGhzLnkoKSA9PSByaHMueSgpICYmIGxocy56KCkgPT0gcmhzLnooKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQb2ludDNGJiBsaHMsIGNvbnN0IFBvaW50M0YmIHJocykgeworICByZXR1cm4gIShsaHMgPT0gcmhzKTsKK30KKworaW5saW5lIFBvaW50M0YgU2NhbGVQb2ludChjb25zdCBQb2ludDNGJiBwLCBmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB6X3NjYWxlKSB7CisgIHJldHVybiBQb2ludDNGKHAueCgpICogeF9zY2FsZSwgcC55KCkgKiB5X3NjYWxlLCBwLnooKSAqIHpfc2NhbGUpOworfQorCitpbmxpbmUgUG9pbnQzRiBTY2FsZVBvaW50KGNvbnN0IFBvaW50M0YmIHAsIGZsb2F0IHNjYWxlKSB7CisgIHJldHVybiBTY2FsZVBvaW50KHAsIHNjYWxlLCBzY2FsZSwgc2NhbGUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0dFT01FVFJZX1BPSU5UM19GX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2Jhc2UuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnRfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWVhNTAKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2Jhc2UuaApAQCAtMCwwICsxLDgwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaWZuZGVmIFVJX0dGWF9HRU9NRVRSWV9QT0lOVF9CQVNFX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9QT0lOVF9CQVNFX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBnZnggeworCisvLyBBIHBvaW50IGhhcyBhbiB4IGFuZCB5IGNvb3JkaW5hdGUuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFR5cGUsIHR5cGVuYW1lIFZlY3RvckNsYXNzPgorY2xhc3MgUG9pbnRCYXNlIHsKKyBwdWJsaWM6CisgIFR5cGUgeCgpIGNvbnN0IHsgcmV0dXJuIHhfOyB9CisgIFR5cGUgeSgpIGNvbnN0IHsgcmV0dXJuIHlfOyB9CisKKyAgdm9pZCBTZXRQb2ludChUeXBlIHgsIFR5cGUgeSkgeworICAgIHhfID0geDsKKyAgICB5XyA9IHk7CisgIH0KKworICB2b2lkIHNldF94KFR5cGUgeCkgeyB4XyA9IHg7IH0KKyAgdm9pZCBzZXRfeShUeXBlIHkpIHsgeV8gPSB5OyB9CisKKyAgdm9pZCBPZmZzZXQoVHlwZSBkZWx0YV94LCBUeXBlIGRlbHRhX3kpIHsKKyAgICB4XyArPSBkZWx0YV94OworICAgIHlfICs9IGRlbHRhX3k7CisgIH0KKworICB2b2lkIG9wZXJhdG9yKz0oY29uc3QgVmVjdG9yQ2xhc3MmIHZlY3RvcikgeworICAgIHhfICs9IHZlY3Rvci54KCk7CisgICAgeV8gKz0gdmVjdG9yLnkoKTsKKyAgfQorCisgIHZvaWQgb3BlcmF0b3ItPShjb25zdCBWZWN0b3JDbGFzcyYgdmVjdG9yKSB7CisgICAgeF8gLT0gdmVjdG9yLngoKTsKKyAgICB5XyAtPSB2ZWN0b3IueSgpOworICB9CisKKyAgdm9pZCBTZXRUb01pbihjb25zdCBDbGFzcyYgb3RoZXIpIHsKKyAgICB4XyA9IHhfIDw9IG90aGVyLnhfID8geF8gOiBvdGhlci54XzsKKyAgICB5XyA9IHlfIDw9IG90aGVyLnlfID8geV8gOiBvdGhlci55XzsKKyAgfQorCisgIHZvaWQgU2V0VG9NYXgoY29uc3QgQ2xhc3MmIG90aGVyKSB7CisgICAgeF8gPSB4XyA+PSBvdGhlci54XyA/IHhfIDogb3RoZXIueF87CisgICAgeV8gPSB5XyA+PSBvdGhlci55XyA/IHlfIDogb3RoZXIueV87CisgIH0KKworICBib29sIElzT3JpZ2luKCkgY29uc3QgeyByZXR1cm4geF8gPT0gVHlwZSgwKSAmJiB5XyA9PSBUeXBlKDApOyB9CisKKyAgVmVjdG9yQ2xhc3MgT2Zmc2V0RnJvbU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIFZlY3RvckNsYXNzKHhfLCB5Xyk7IH0KKworICAvLyBBIHBvaW50IGlzIGxlc3MgdGhhbiBhbm90aGVyIHBvaW50IGlmIGl0cyB5LXZhbHVlIGlzIGNsb3NlcgorICAvLyB0byB0aGUgb3JpZ2luLiBJZiB0aGUgeS12YWx1ZXMgYXJlIHRoZSBzYW1lLCB0aGVuIHBvaW50IHdpdGgKKyAgLy8gdGhlIHgtdmFsdWUgY2xvc2VyIHRvIHRoZSBvcmlnaW4gaXMgY29uc2lkZXJlZCBsZXNzIHRoYW4gdGhlCisgIC8vIG90aGVyLgorICAvLyBUaGlzIGNvbXBhcmlzb24gaXMgcmVxdWlyZWQgdG8gdXNlIFBvaW50IGluIHNldHMsIG9yIHNvcnRlZAorICAvLyB2ZWN0b3JzLgorICBib29sIG9wZXJhdG9yPChjb25zdCBDbGFzcyYgcmhzKSBjb25zdCB7CisgICAgcmV0dXJuICh5XyA9PSByaHMueV8pID8gKHhfIDwgcmhzLnhfKSA6ICh5XyA8IHJocy55Xyk7CisgIH0KKworIHByb3RlY3RlZDoKKyAgUG9pbnRCYXNlKCkge30KKyAgUG9pbnRCYXNlKFR5cGUgeCwgVHlwZSB5KSA6IHhfKHgpLCB5Xyh5KSB7fQorICAvLyBEZXN0cnVjdG9yIGlzIGludGVudGlvbmFsbHkgbWFkZSBub24gdmlydHVhbCBhbmQgcHJvdGVjdGVkLgorICAvLyBEbyBub3QgbWFrZSB0aGlzIHB1YmxpYy4KKyAgflBvaW50QmFzZSgpIHt9CisKKyBwcml2YXRlOgorICBUeXBlIHhfOworICBUeXBlIHlfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGdmeAorCisjZW5kaWYgIC8vIFVJX0dGWF9HRU9NRVRSWV9QT0lOVF9CQVNFX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwOGFiNwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvcG9pbnRfZi5jYwpAQCAtMCwwICsxLDIzIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuaCIKKworI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKK3RlbXBsYXRlIGNsYXNzIFBvaW50QmFzZTxQb2ludEYsIGZsb2F0LCBWZWN0b3IyZEY+OworCitzdGQ6OnN0cmluZyBQb2ludEY6OlRvU3RyaW5nKCkgY29uc3QgeworICByZXR1cm4gYmFzZTo6U3RyaW5nUHJpbnRmKCIlZiwlZiIsIHgoKSwgeSgpKTsKK30KKworUG9pbnRGIFNjYWxlUG9pbnQoY29uc3QgUG9pbnRGJiBwLCBmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlKSB7CisgIFBvaW50RiBzY2FsZWRfcChwKTsKKyAgc2NhbGVkX3AuU2NhbGUoeF9zY2FsZSwgeV9zY2FsZSk7CisgIHJldHVybiBzY2FsZWRfcDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGdmeApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludF9mLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGQxMmZmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9wb2ludF9mLmgKQEAgLTAsMCArMSw3MSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2lmbmRlZiBVSV9HRlhfR0VPTUVUUllfUE9JTlRfRl9IXworI2RlZmluZSBVSV9HRlhfR0VPTUVUUllfUE9JTlRfRl9IXworCisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9wb2ludF9iYXNlLmgiCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3ZlY3RvcjJkX2YuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKKy8vIEEgZmxvYXRpbmctcG9pbnQgdmVyc2lvbiBvZiBQb2ludC4KK2NsYXNzIFBvaW50RiA6IHB1YmxpYyBQb2ludEJhc2U8UG9pbnRGLCBmbG9hdCwgVmVjdG9yMmRGPiB7CisgcHVibGljOgorICBQb2ludEYoKSA6IFBvaW50QmFzZTxQb2ludEYsIGZsb2F0LCBWZWN0b3IyZEY+KDAsIDApIHt9CisgIFBvaW50RihmbG9hdCB4LCBmbG9hdCB5KSA6IFBvaW50QmFzZTxQb2ludEYsIGZsb2F0LCBWZWN0b3IyZEY+KHgsIHkpIHt9CisgIH5Qb2ludEYoKSB7fQorCisgIHZvaWQgU2NhbGUoZmxvYXQgc2NhbGUpIHsgU2NhbGUoc2NhbGUsIHNjYWxlKTsgfQorCisgIHZvaWQgU2NhbGUoZmxvYXQgeF9zY2FsZSwgZmxvYXQgeV9zY2FsZSkgeworICAgIFNldFBvaW50KHgoKSAqIHhfc2NhbGUsIHkoKSAqIHlfc2NhbGUpOworICB9CisKKyAgLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBwb2ludC4KKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUG9pbnRGJiBsaHMsIGNvbnN0IFBvaW50RiYgcmhzKSB7CisgIHJldHVybiBsaHMueCgpID09IHJocy54KCkgJiYgbGhzLnkoKSA9PSByaHMueSgpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBvaW50RiYgbGhzLCBjb25zdCBQb2ludEYmIHJocykgeworICByZXR1cm4gIShsaHMgPT0gcmhzKTsKK30KKworaW5saW5lIFBvaW50RiBvcGVyYXRvcisoY29uc3QgUG9pbnRGJiBsaHMsIGNvbnN0IFZlY3RvcjJkRiYgcmhzKSB7CisgIFBvaW50RiByZXN1bHQobGhzKTsKKyAgcmVzdWx0ICs9IHJoczsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFBvaW50RiBvcGVyYXRvci0oY29uc3QgUG9pbnRGJiBsaHMsIGNvbnN0IFZlY3RvcjJkRiYgcmhzKSB7CisgIFBvaW50RiByZXN1bHQobGhzKTsKKyAgcmVzdWx0IC09IHJoczsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFZlY3RvcjJkRiBvcGVyYXRvci0oY29uc3QgUG9pbnRGJiBsaHMsIGNvbnN0IFBvaW50RiYgcmhzKSB7CisgIHJldHVybiBWZWN0b3IyZEYobGhzLngoKSAtIHJocy54KCksIGxocy55KCkgLSByaHMueSgpKTsKK30KKworaW5saW5lIFBvaW50RiBQb2ludEF0T2Zmc2V0RnJvbU9yaWdpbihjb25zdCBWZWN0b3IyZEYmIG9mZnNldF9mcm9tX29yaWdpbikgeworICByZXR1cm4gUG9pbnRGKG9mZnNldF9mcm9tX29yaWdpbi54KCksIG9mZnNldF9mcm9tX29yaWdpbi55KCkpOworfQorCitQb2ludEYgU2NhbGVQb2ludChjb25zdCBQb2ludEYmIHAsIGZsb2F0IHhfc2NhbGUsIGZsb2F0IHlfc2NhbGUpOworCitpbmxpbmUgUG9pbnRGIFNjYWxlUG9pbnQoY29uc3QgUG9pbnRGJiBwLCBmbG9hdCBzY2FsZSkgeworICByZXR1cm4gU2NhbGVQb2ludChwLCBzY2FsZSwgc2NhbGUpOworfQorCitleHRlcm4gdGVtcGxhdGUgY2xhc3MgUG9pbnRCYXNlPFBvaW50RiwgZmxvYXQsIFZlY3RvcjJkRj47CisKK30gIC8vIG5hbWVzcGFjZSBnZngKKworI2VuZGlmICAvLyBVSV9HRlhfR0VPTUVUUllfUE9JTlRfRl9IXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0LmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgwMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0LmgKQEAgLTAsMCArMSwxMjIgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIERlZmluZXMgYSBzaW1wbGUgaW50ZWdlciByZWN0YW5nbGUgY2xhc3MuICBUaGUgY29udGFpbm1lbnQgc2VtYW50aWNzCisvLyBhcmUgYXJyYXktbGlrZTsgdGhhdCBpcywgdGhlIGNvb3JkaW5hdGUgKHgsIHkpIGlzIGNvbnNpZGVyZWQgdG8gYmUKKy8vIGNvbnRhaW5lZCBieSB0aGUgcmVjdGFuZ2xlLCBidXQgdGhlIGNvb3JkaW5hdGUgKHggKyB3aWR0aCwgeSkgaXMgbm90LgorLy8gVGhlIGNsYXNzIHdpbGwgaGFwcGlseSBsZXQgeW91IGNyZWF0ZSBtYWxmb3JtZWQgcmVjdGFuZ2xlcyAodGhhdCBpcywKKy8vIHJlY3RhbmdsZXMgd2l0aCBuZWdhdGl2ZSB3aWR0aCBhbmQvb3IgaGVpZ2h0KSwgYnV0IHRoZXJlIHdpbGwgYmUgYXNzZXJ0aW9ucworLy8gaW4gdGhlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgQ29udGFpbnMoKSkgdG8gY29tcGxhaW4gaW4gdGhpcyBjYXNlLgorCisjaWZuZGVmIFVJX0dGWF9HRU9NRVRSWV9SRUNUX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9SRUNUX0hfCisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3BvaW50LmgiCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3JlY3RfYmFzZS5oIgorI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9yZWN0X2Jhc2VfaW1wbC5oIgorI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9zaXplLmgiCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3ZlY3RvcjJkLmgiCisKK25hbWVzcGFjZSBnZnggeworCitjbGFzcyBJbnNldHM7CisKK2NsYXNzIFJlY3QgOiBwdWJsaWMgUmVjdEJhc2U8UmVjdCwgUG9pbnQsIFNpemUsIEluc2V0cywgVmVjdG9yMmQsIGludD4geworIHB1YmxpYzoKKyAgUmVjdCgpIDogUmVjdEJhc2U8UmVjdCwgUG9pbnQsIFNpemUsIEluc2V0cywgVmVjdG9yMmQsIGludD4oUG9pbnQoKSkge30KKworICBSZWN0KGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAgIDogUmVjdEJhc2U8UmVjdCwgUG9pbnQsIFNpemUsIEluc2V0cywgVmVjdG9yMmQsIGludD4oCisgICAgICAgICAgICBTaXplKHdpZHRoLCBoZWlnaHQpKSB7fQorCisgIFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICA6IFJlY3RCYXNlPFJlY3QsIFBvaW50LCBTaXplLCBJbnNldHMsIFZlY3RvcjJkLCBpbnQ+KAorICAgICAgICAgICAgUG9pbnQoeCwgeSksIFNpemUod2lkdGgsIGhlaWdodCkpIHt9CisKKyAgZXhwbGljaXQgUmVjdChjb25zdCBTaXplJiBzaXplKQorICAgICAgOiBSZWN0QmFzZTxSZWN0LCBQb2ludCwgU2l6ZSwgSW5zZXRzLCBWZWN0b3IyZCwgaW50PihzaXplKSB7fQorCisgIFJlY3QoY29uc3QgUG9pbnQmIG9yaWdpbiwgY29uc3QgU2l6ZSYgc2l6ZSkKKyAgICAgIDogUmVjdEJhc2U8UmVjdCwgUG9pbnQsIFNpemUsIEluc2V0cywgVmVjdG9yMmQsIGludD4ob3JpZ2luLCBzaXplKSB7fQorCisgIH5SZWN0KCkge30KKworICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWN0JiBsaHMsIGNvbnN0IFJlY3QmIHJocykgeworICByZXR1cm4gbGhzLm9yaWdpbigpID09IHJocy5vcmlnaW4oKSAmJiBsaHMuc2l6ZSgpID09IHJocy5zaXplKCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVjdCYgbGhzLCBjb25zdCBSZWN0JiByaHMpIHsKKyAgcmV0dXJuICEobGhzID09IHJocyk7Cit9CisKK1JlY3Qgb3BlcmF0b3IrKGNvbnN0IFJlY3QmIGxocywgY29uc3QgVmVjdG9yMmQmIHJocyk7CitSZWN0IG9wZXJhdG9yLShjb25zdCBSZWN0JiBsaHMsIGNvbnN0IFZlY3RvcjJkJiByaHMpOworCitpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IFJlY3QmIHJlY3QpIHsKKyAgb3MgPDwgcmVjdC5Ub1N0cmluZygpOworICByZXR1cm4gb3M7Cit9CisKK2lubGluZSBSZWN0IG9wZXJhdG9yKyhjb25zdCBWZWN0b3IyZCYgbGhzLCBjb25zdCBSZWN0JiByaHMpIHsKKyAgcmV0dXJuIHJocyArIGxoczsKK30KKworUmVjdCBJbnRlcnNlY3RSZWN0cyhjb25zdCBSZWN0JiBhLCBjb25zdCBSZWN0JiBiKTsKK1JlY3QgVW5pb25SZWN0cyhjb25zdCBSZWN0JiBhLCBjb25zdCBSZWN0JiBiKTsKK1JlY3QgU3VidHJhY3RSZWN0cyhjb25zdCBSZWN0JiBhLCBjb25zdCBSZWN0JiBiKTsKKworLy8gQ29uc3RydWN0cyBhIHJlY3RhbmdsZSB3aXRoIHxwMXwgYW5kIHxwMnwgYXMgb3Bwb3NpdGUgY29ybmVycy4KKy8vCisvLyBUaGlzIGNvdWxkIGFsc28gYmUgdGhvdWdodCBvZiBhcyAidGhlIHNtYWxsZXN0IHJlY3QgdGhhdCBjb250YWlucyBib3RoCisvLyBwb2ludHMiLCBleGNlcHQgdGhhdCB3ZSBjb25zaWRlciBwb2ludHMgb24gdGhlIHJpZ2h0L2JvdHRvbSBlZGdlcyBvZiB0aGUKKy8vIHJlY3QgdG8gYmUgb3V0c2lkZSB0aGUgcmVjdC4gIFNvIHRlY2huaWNhbGx5IG9uZSBvciBib3RoIHBvaW50cyB3aWxsIG5vdCBiZQorLy8gY29udGFpbmVkIHdpdGhpbiB0aGUgcmVjdCwgYmVjYXVzZSB0aGV5IHdpbGwgYXBwZWFyIG9uIG9uZSBvZiB0aGVzZSBlZGdlcy4KK1JlY3QgQm91bmRpbmdSZWN0KGNvbnN0IFBvaW50JiBwMSwgY29uc3QgUG9pbnQmIHAyKTsKKworaW5saW5lIFJlY3QgU2NhbGVUb0VuY2xvc2luZ1JlY3QoY29uc3QgUmVjdCYgcmVjdCwgZmxvYXQgeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHlfc2NhbGUpIHsKKyAgaW50IHggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6Zmxvb3IocmVjdC54KCkgKiB4X3NjYWxlKSk7CisgIGludCB5ID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6OmZsb29yKHJlY3QueSgpICogeV9zY2FsZSkpOworICBpbnQgciA9IHJlY3Qud2lkdGgoKSA9PSAwCisgICAgICAgICAgICAgID8geAorICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGludD4oc3RkOjpjZWlsKHJlY3QucmlnaHQoKSAqIHhfc2NhbGUpKTsKKyAgaW50IGIgPSByZWN0LmhlaWdodCgpID09IDAKKyAgICAgICAgICAgICAgPyB5CisgICAgICAgICAgICAgIDogc3RhdGljX2Nhc3Q8aW50PihzdGQ6OmNlaWwocmVjdC5ib3R0b20oKSAqIHlfc2NhbGUpKTsKKyAgcmV0dXJuIFJlY3QoeCwgeSwgciAtIHgsIGIgLSB5KTsKK30KKworaW5saW5lIFJlY3QgU2NhbGVUb0VuY2xvc2luZ1JlY3QoY29uc3QgUmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpIHsKKyAgcmV0dXJuIFNjYWxlVG9FbmNsb3NpbmdSZWN0KHJlY3QsIHNjYWxlLCBzY2FsZSk7Cit9CisKK2lubGluZSBSZWN0IFNjYWxlVG9FbmNsb3NlZFJlY3QoY29uc3QgUmVjdCYgcmVjdCwgZmxvYXQgeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeV9zY2FsZSkgeworICBpbnQgeCA9IHN0YXRpY19jYXN0PGludD4oc3RkOjpjZWlsKHJlY3QueCgpICogeF9zY2FsZSkpOworICBpbnQgeSA9IHN0YXRpY19jYXN0PGludD4oc3RkOjpjZWlsKHJlY3QueSgpICogeV9zY2FsZSkpOworICBpbnQgciA9IHJlY3Qud2lkdGgoKSA9PSAwCisgICAgICAgICAgICAgID8geAorICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGludD4oc3RkOjpmbG9vcihyZWN0LnJpZ2h0KCkgKiB4X3NjYWxlKSk7CisgIGludCBiID0gcmVjdC5oZWlnaHQoKSA9PSAwCisgICAgICAgICAgICAgID8geQorICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PGludD4oc3RkOjpmbG9vcihyZWN0LmJvdHRvbSgpICogeV9zY2FsZSkpOworICByZXR1cm4gUmVjdCh4LCB5LCByIC0geCwgYiAtIHkpOworfQorCitpbmxpbmUgUmVjdCBTY2FsZVRvRW5jbG9zZWRSZWN0KGNvbnN0IFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlKSB7CisgIHJldHVybiBTY2FsZVRvRW5jbG9zZWRSZWN0KHJlY3QsIHNjYWxlLCBzY2FsZSk7Cit9CisKKy8vIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBSZWN0QmFzZTxSZWN0LCBQb2ludCwgU2l6ZSwgSW5zZXRzLCBWZWN0b3IyZCwgaW50PjsKKworfSAgLy8gbmFtZXNwYWNlIGdmeAorCisjZW5kaWYgIC8vIFVJX0dGWF9HRU9NRVRSWV9SRUNUX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3RfYmFzZS5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0X2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VjMWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0X2Jhc2UuaApAQCAtMCwwICsxLDE3MyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworLy8gQSB0ZW1wbGF0ZSBmb3IgYSBzaW1wbGUgcmVjdGFuZ2xlIGNsYXNzLiAgVGhlIGNvbnRhaW5tZW50IHNlbWFudGljcworLy8gYXJlIGFycmF5LWxpa2U7IHRoYXQgaXMsIHRoZSBjb29yZGluYXRlICh4LCB5KSBpcyBjb25zaWRlcmVkIHRvIGJlCisvLyBjb250YWluZWQgYnkgdGhlIHJlY3RhbmdsZSwgYnV0IHRoZSBjb29yZGluYXRlICh4ICsgd2lkdGgsIHkpIGlzIG5vdC4KKy8vIFRoZSBjbGFzcyB3aWxsIGhhcHBpbHkgbGV0IHlvdSBjcmVhdGUgbWFsZm9ybWVkIHJlY3RhbmdsZXMgKHRoYXQgaXMsCisvLyByZWN0YW5nbGVzIHdpdGggbmVnYXRpdmUgd2lkdGggYW5kL29yIGhlaWdodCksIGJ1dCB0aGVyZSB3aWxsIGJlIGFzc2VydGlvbnMKKy8vIGluIHRoZSBvcGVyYXRpb25zIChzdWNoIGFzIENvbnRhaW5zKCkpIHRvIGNvbXBsYWluIGluIHRoaXMgY2FzZS4KKworI2lmbmRlZiBVSV9HRlhfR0VPTUVUUllfUkVDVF9CQVNFX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9SRUNUX0JBU0VfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIGdmeCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK2NsYXNzIFJlY3RCYXNlIHsKKyBwdWJsaWM6CisgIFR5cGUgeCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbl8ueCgpOyB9CisgIHZvaWQgc2V0X3goVHlwZSB4KSB7IG9yaWdpbl8uc2V0X3goeCk7IH0KKworICBUeXBlIHkoKSBjb25zdCB7IHJldHVybiBvcmlnaW5fLnkoKTsgfQorICB2b2lkIHNldF95KFR5cGUgeSkgeyBvcmlnaW5fLnNldF95KHkpOyB9CisKKyAgVHlwZSB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIHNpemVfLndpZHRoKCk7IH0KKyAgdm9pZCBzZXRfd2lkdGgoVHlwZSB3aWR0aCkgeyBzaXplXy5zZXRfd2lkdGgod2lkdGgpOyB9CisKKyAgVHlwZSBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBzaXplXy5oZWlnaHQoKTsgfQorICB2b2lkIHNldF9oZWlnaHQoVHlwZSBoZWlnaHQpIHsgc2l6ZV8uc2V0X2hlaWdodChoZWlnaHQpOyB9CisKKyAgY29uc3QgUG9pbnRDbGFzcyYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luXzsgfQorICB2b2lkIHNldF9vcmlnaW4oY29uc3QgUG9pbnRDbGFzcyYgb3JpZ2luKSB7IG9yaWdpbl8gPSBvcmlnaW47IH0KKworICBjb25zdCBTaXplQ2xhc3MmIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQorICB2b2lkIHNldF9zaXplKGNvbnN0IFNpemVDbGFzcyYgc2l6ZSkgeyBzaXplXyA9IHNpemU7IH0KKworICBUeXBlIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQorICBUeXBlIGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHkoKSArIGhlaWdodCgpOyB9CisKKyAgUG9pbnRDbGFzcyB0b3BfcmlnaHQoKSBjb25zdCB7IHJldHVybiBQb2ludENsYXNzKHJpZ2h0KCksIHkoKSk7IH0KKyAgUG9pbnRDbGFzcyBib3R0b21fbGVmdCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50Q2xhc3MoeCgpLCBib3R0b20oKSk7IH0KKyAgUG9pbnRDbGFzcyBib3R0b21fcmlnaHQoKSBjb25zdCB7IHJldHVybiBQb2ludENsYXNzKHJpZ2h0KCksIGJvdHRvbSgpKTsgfQorCisgIFZlY3RvckNsYXNzIE9mZnNldEZyb21PcmlnaW4oKSBjb25zdCB7IHJldHVybiBWZWN0b3JDbGFzcyh4KCksIHkoKSk7IH0KKworICB2b2lkIFNldFJlY3QoVHlwZSB4LCBUeXBlIHksIFR5cGUgd2lkdGgsIFR5cGUgaGVpZ2h0KTsKKworICAvLyBTaHJpbmsgdGhlIHJlY3RhbmdsZSBieSBhIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGRpc3RhbmNlIG9uIGFsbCBzaWRlcy4KKyAgdm9pZCBJbnNldChUeXBlIGhvcml6b250YWwsIFR5cGUgdmVydGljYWwpIHsKKyAgICBJbnNldChob3Jpem9udGFsLCB2ZXJ0aWNhbCwgaG9yaXpvbnRhbCwgdmVydGljYWwpOworICB9CisKKyAgLy8gRW5sYXJnZSB0aGUgcmVjdGFuZ2xlIGJ5IGEgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlzdGFuY2Ugb24gYWxsIHNpZGVzLgorICB2b2lkIE91dHNldChUeXBlIGhvcml6b250YWwsIFR5cGUgdmVydGljYWwpIHsgSW5zZXQoLWhvcml6b250YWwsIC12ZXJ0aWNhbCk7IH0KKworICAvLyBTaHJpbmsgdGhlIHJlY3RhbmdsZSBieSB0aGUgZ2l2ZW4gaW5zZXRzLgorICB2b2lkIEluc2V0KGNvbnN0IEluc2V0c0NsYXNzJiBpbnNldHMpOworCisgIC8vIEVubGFyZ2UgdGhlIHJlY3RhbmdsZSBieSB0aGUgZ2l2ZW4gaW5zZXRzLgorICB2b2lkIE91dHNldChjb25zdCBJbnNldHNDbGFzcyYgaW5zZXRzKSB7IEluc2V0KC1pbnNldHMpOyB9CisKKyAgLy8gU2hyaW5rIHRoZSByZWN0YW5nbGUgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQgb24gZWFjaCBzaWRlLgorICB2b2lkIEluc2V0KFR5cGUgbGVmdCwgVHlwZSB0b3AsIFR5cGUgcmlnaHQsIFR5cGUgYm90dG9tKTsKKworICAvLyBFbmxhcmdlIHRoZSByZWN0YW5nbGUgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQgb24gZWFjaCBzaWRlLgorICB2b2lkIE91dHNldChUeXBlIGxlZnQsIFR5cGUgdG9wLCBUeXBlIHJpZ2h0LCBUeXBlIGJvdHRvbSkgeworICAgIEluc2V0KC1sZWZ0LCAtdG9wLCAtcmlnaHQsIC1ib3R0b20pOworICB9CisKKyAgLy8gTW92ZSB0aGUgcmVjdGFuZ2xlIGJ5IGEgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlzdGFuY2UuCisgIHZvaWQgT2Zmc2V0KFR5cGUgaG9yaXpvbnRhbCwgVHlwZSB2ZXJ0aWNhbCk7CisgIHZvaWQgT2Zmc2V0KGNvbnN0IFZlY3RvckNsYXNzJiBkaXN0YW5jZSkgeworICAgIE9mZnNldChkaXN0YW5jZS54KCksIGRpc3RhbmNlLnkoKSk7CisgIH0KKyAgdm9pZCBvcGVyYXRvcis9KGNvbnN0IFZlY3RvckNsYXNzJiBvZmZzZXQpOworICB2b2lkIG9wZXJhdG9yLT0oY29uc3QgVmVjdG9yQ2xhc3MmIG9mZnNldCk7CisKKyAgSW5zZXRzQ2xhc3MgSW5zZXRzRnJvbShjb25zdCBDbGFzcyYgaW5uZXIpIGNvbnN0IHsKKyAgICByZXR1cm4gSW5zZXRzQ2xhc3MoaW5uZXIueCgpIC0geCgpLCBpbm5lci55KCkgLSB5KCksCisgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0KCkgLSBpbm5lci5yaWdodCgpLCBib3R0b20oKSAtIGlubmVyLmJvdHRvbSgpKTsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJlYSBvZiB0aGUgcmVjdGFuZ2xlIGlzIHplcm8uCisgIGJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfLklzRW1wdHkoKTsgfQorCisgIC8vIEEgcmVjdCBpcyBsZXNzIHRoYW4gYW5vdGhlciByZWN0IGlmIGl0cyBvcmlnaW4gaXMgbGVzcyB0aGFuCisgIC8vIHRoZSBvdGhlciByZWN0J3Mgb3JpZ2luLiBJZiB0aGUgb3JpZ2lucyBhcmUgZXF1YWwsIHRoZW4gdGhlCisgIC8vIHNob3J0ZXN0IHJlY3QgaXMgbGVzcyB0aGFuIHRoZSBvdGhlci4gSWYgdGhlIG9yaWdpbiBhbmQgdGhlCisgIC8vIGhlaWdodCBhcmUgZXF1YWwsIHRoZW4gdGhlIG5hcnJvd2VzdCByZWN0IGlzIGxlc3MgdGhhbi4KKyAgLy8gVGhpcyBjb21wYXJpc29uIGlzIHJlcXVpcmVkIHRvIHVzZSBSZWN0cyBpbiBzZXRzLCBvciBzb3J0ZWQKKyAgLy8gdmVjdG9ycy4KKyAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ2xhc3MmIG90aGVyKSBjb25zdDsKKworICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50IGlkZW50aWZpZWQgYnkgcG9pbnRfeCBhbmQgcG9pbnRfeSBmYWxscyBpbnNpZGUKKyAgLy8gdGhpcyByZWN0YW5nbGUuICBUaGUgcG9pbnQgKHgsIHkpIGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlLCBidXQgdGhlCisgIC8vIHBvaW50ICh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpIGlzIG5vdC4KKyAgYm9vbCBDb250YWlucyhUeXBlIHBvaW50X3gsIFR5cGUgcG9pbnRfeSkgY29uc3Q7CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgcG9pbnQgaXMgY29udGFpbmVkIGJ5IHRoaXMgcmVjdGFuZ2xlLgorICBib29sIENvbnRhaW5zKGNvbnN0IFBvaW50Q2xhc3MmIHBvaW50KSBjb25zdCB7CisgICAgcmV0dXJuIENvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJlY3RhbmdsZSBjb250YWlucyB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZS4KKyAgYm9vbCBDb250YWlucyhjb25zdCBDbGFzcyYgcmVjdCkgY29uc3Q7CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcmVjdGFuZ2xlIGludGVyc2VjdHMgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUuCisgIC8vIEFuIGVtcHR5IHJlY3RhbmdsZSBkb2Vzbid0IGludGVyc2VjdCBhbnkgcmVjdGFuZ2xlLgorICBib29sIEludGVyc2VjdHMoY29uc3QgQ2xhc3MmIHJlY3QpIGNvbnN0OworCisgIC8vIENvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyByZWN0YW5nbGUgd2l0aCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLgorICB2b2lkIEludGVyc2VjdChjb25zdCBDbGFzcyYgcmVjdCk7CisKKyAgLy8gQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIHRoaXMgcmVjdGFuZ2xlIHdpdGggdGhlIGdpdmVuIHJlY3RhbmdsZS4gIFRoZSB1bmlvbgorICAvLyBpcyB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIGNvbnRhaW5pbmcgYm90aCByZWN0YW5nbGVzLgorICB2b2lkIFVuaW9uKGNvbnN0IENsYXNzJiByZWN0KTsKKworICAvLyBDb21wdXRlcyB0aGUgcmVjdGFuZ2xlIHJlc3VsdGluZyBmcm9tIHN1YnRyYWN0aW5nIHxyZWN0fCBmcm9tIHwqdGhpc3wsCisgIC8vIGkuZS4gdGhlIGJvdW5kaW5nIHJlY3Qgb2YgfFJlZ2lvbigqdGhpcykgLSBSZWdpb24ocmVjdCl8LgorICB2b2lkIFN1YnRyYWN0KGNvbnN0IENsYXNzJiByZWN0KTsKKworICAvLyBGaXRzIGFzIG11Y2ggb2YgdGhlIHJlY2VpdmluZyByZWN0YW5nbGUgaW50byB0aGUgc3VwcGxpZWQgcmVjdGFuZ2xlIGFzCisgIC8vIHBvc3NpYmxlLCBiZWNvbWluZyB0aGUgcmVzdWx0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlY2VpdmVyIGhhZAorICAvLyBhIHgtbG9jYXRpb24gb2YgMiBhbmQgYSB3aWR0aCBvZiA0LCBhbmQgdGhlIHN1cHBsaWVkIHJlY3RhbmdsZSBoYWQKKyAgLy8gYW4geC1sb2NhdGlvbiBvZiAwIHdpdGggYSB3aWR0aCBvZiA1LCB0aGUgcmV0dXJuZWQgcmVjdGFuZ2xlIHdvdWxkIGhhdmUKKyAgLy8gYW4geC1sb2NhdGlvbiBvZiAxIHdpdGggYSB3aWR0aCBvZiA0LgorICB2b2lkIEFkanVzdFRvRml0KGNvbnN0IENsYXNzJiByZWN0KTsKKworICAvLyBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhpcyByZWN0YW5nbGUuCisgIFBvaW50Q2xhc3MgQ2VudGVyUG9pbnQoKSBjb25zdDsKKworICAvLyBCZWNvbWVzIGEgcmVjdGFuZ2xlIHRoYXQgaGFzIHRoZSBzYW1lIGNlbnRlciBwb2ludCBidXQgd2l0aCBhIHNpemUgY2FwcGVkCisgIC8vIGF0IGdpdmVuIHxzaXplfC4KKyAgdm9pZCBDbGFtcFRvQ2VudGVyZWRTaXplKGNvbnN0IFNpemVDbGFzcyYgc2l6ZSk7CisKKyAgLy8gU3BsaXRzIHx0aGlzfCBpbiB0d28gaGFsdmVzLCB8bGVmdF9oYWxmfCBhbmQgfHJpZ2h0X2hhbGZ8LgorICB2b2lkIFNwbGl0VmVydGljYWxseShDbGFzcyogbGVmdF9oYWxmLCBDbGFzcyogcmlnaHRfaGFsZikgY29uc3Q7CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcmVjdGFuZ2xlIHNoYXJlcyBhbiBlbnRpcmUgZWRnZSAoaS5lLiwgc2FtZSB3aWR0aCBvcgorICAvLyBzYW1lIGhlaWdodCkgd2l0aCB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLCBhbmQgdGhlIHJlY3RhbmdsZXMgZG8gbm90IG92ZXJsYXAuCisgIGJvb2wgU2hhcmVzRWRnZVdpdGgoY29uc3QgQ2xhc3MmIHJlY3QpIGNvbnN0OworCisgIC8vIFJldHVybnMgdGhlIG1hbmhhdHRhbiBkaXN0YW5jZSBmcm9tIHRoZSByZWN0IHRvIHRoZSBwb2ludC4gSWYgdGhlIHBvaW50IGlzCisgIC8vIGluc2lkZSB0aGUgcmVjdCwgcmV0dXJucyAwLgorICBUeXBlIE1hbmhhdHRhbkRpc3RhbmNlVG9Qb2ludChjb25zdCBQb2ludENsYXNzJiBwb2ludCkgY29uc3Q7CisKKyAgLy8gUmV0dXJucyB0aGUgbWFuaGF0dGFuIGRpc3RhbmNlIGJldHdlZW4gdGhlIGNvbnRlbnRzIG9mIHRoaXMgcmVjdCBhbmQgdGhlCisgIC8vIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiByZWN0LiBUaGF0IGlzLCBpZiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gcmVjdHMKKyAgLy8gaXMgbm9uLWVtcHR5IHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4gSWYgdGhlIHJlY3RzIHNoYXJlIGEgc2lkZSwgaXQKKyAgLy8gcmV0dXJucyB0aGUgc21hbGxlc3Qgbm9uLXplcm8gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIFR5cGUuCisgIFR5cGUgTWFuaGF0dGFuSW50ZXJuYWxEaXN0YW5jZShjb25zdCBDbGFzcyYgcmVjdCkgY29uc3Q7CisKKyBwcm90ZWN0ZWQ6CisgIFJlY3RCYXNlKGNvbnN0IFBvaW50Q2xhc3MmIG9yaWdpbiwgY29uc3QgU2l6ZUNsYXNzJiBzaXplKQorICAgICAgOiBvcmlnaW5fKG9yaWdpbiksIHNpemVfKHNpemUpIHt9CisgIGV4cGxpY2l0IFJlY3RCYXNlKGNvbnN0IFNpemVDbGFzcyYgc2l6ZSkgOiBzaXplXyhzaXplKSB7fQorICBleHBsaWNpdCBSZWN0QmFzZShjb25zdCBQb2ludENsYXNzJiBvcmlnaW4pIDogb3JpZ2luXyhvcmlnaW4pIHt9CisgIC8vIERlc3RydWN0b3IgaXMgaW50ZW50aW9uYWxseSBtYWRlIG5vbiB2aXJ0dWFsIGFuZCBwcm90ZWN0ZWQuCisgIC8vIERvIG5vdCBtYWtlIHRoaXMgcHVibGljLgorICB+UmVjdEJhc2UoKSB7fQorCisgcHJpdmF0ZToKKyAgUG9pbnRDbGFzcyBvcmlnaW5fOworICBTaXplQ2xhc3Mgc2l6ZV87Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0dFT01FVFJZX1JFQ1RfQkFTRV9IXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0X2Jhc2VfaW1wbC5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9yZWN0X2Jhc2VfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZWU3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3JlY3RfYmFzZV9pbXBsLmgKQEAgLTAsMCArMSwyNjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1JFQ1RfQkFTRV9JTVBMX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9SRUNUX0JBU0VfSU1QTF9IXworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cz4KKworI2luY2x1ZGUgImJhc2UvbG9nZ2luZy5oIgorI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdwcmludGYuaCIKKyNpbmNsdWRlICJ1aS9nZngvZ2VvbWV0cnkvcmVjdF9iYXNlLmgiCisKK25hbWVzcGFjZSBnZnggeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgQWRqdXN0QWxvbmdBeGlzKFR5cGUgZHN0X29yaWdpbiwgVHlwZSBkc3Rfc2l6ZSwgVHlwZSogb3JpZ2luLCBUeXBlKiBzaXplKSB7CisgICpzaXplID0gc3RkOjptaW4oZHN0X3NpemUsICpzaXplKTsKKyAgaWYgKCpvcmlnaW4gPCBkc3Rfb3JpZ2luKQorICAgICpvcmlnaW4gPSBkc3Rfb3JpZ2luOworICBlbHNlCisgICAgKm9yaWdpbiA9IHN0ZDo6bWluKGRzdF9vcmlnaW4gKyBkc3Rfc2l6ZSwgKm9yaWdpbiArICpzaXplKSAtICpzaXplOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywKKyAgICAgICAgICAgICAgVHlwZT46OlNldFJlY3QoVHlwZSB4LCBUeXBlIHksIFR5cGUgd2lkdGgsIFR5cGUgaGVpZ2h0KSB7CisgIG9yaWdpbl8uU2V0UG9pbnQoeCwgeSk7CisgIHNldF93aWR0aCh3aWR0aCk7CisgIHNldF9oZWlnaHQoaGVpZ2h0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgordm9pZCBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpJbnNldChjb25zdCBJbnNldHNDbGFzcyYgaW5zZXRzKSB7CisgIEluc2V0KGluc2V0cy5sZWZ0KCksIGluc2V0cy50b3AoKSwgaW5zZXRzLnJpZ2h0KCksIGluc2V0cy5ib3R0b20oKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK3ZvaWQgUmVjdEJhc2U8Q2xhc3MsIFBvaW50Q2xhc3MsIFNpemVDbGFzcywgSW5zZXRzQ2xhc3MsIFZlY3RvckNsYXNzLAorICAgICAgICAgICAgICBUeXBlPjo6SW5zZXQoVHlwZSBsZWZ0LCBUeXBlIHRvcCwgVHlwZSByaWdodCwgVHlwZSBib3R0b20pIHsKKyAgb3JpZ2luXyArPSBWZWN0b3JDbGFzcyhsZWZ0LCB0b3ApOworICBzZXRfd2lkdGgoc3RkOjptYXgod2lkdGgoKSAtIGxlZnQgLSByaWdodCwgc3RhdGljX2Nhc3Q8VHlwZT4oMCkpKTsKKyAgc2V0X2hlaWdodChzdGQ6Om1heChoZWlnaHQoKSAtIHRvcCAtIGJvdHRvbSwgc3RhdGljX2Nhc3Q8VHlwZT4oMCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgordm9pZCBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpPZmZzZXQoVHlwZSBob3Jpem9udGFsLCBUeXBlIHZlcnRpY2FsKSB7CisgIG9yaWdpbl8gKz0gVmVjdG9yQ2xhc3MoaG9yaXpvbnRhbCwgdmVydGljYWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywgVHlwZT46Ogorb3BlcmF0b3IrPShjb25zdCBWZWN0b3JDbGFzcyYgb2Zmc2V0KSB7CisgIG9yaWdpbl8gKz0gb2Zmc2V0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywgVHlwZT46Ogorb3BlcmF0b3ItPShjb25zdCBWZWN0b3JDbGFzcyYgb2Zmc2V0KSB7CisgIG9yaWdpbl8gLT0gb2Zmc2V0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Citib29sIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywgVHlwZT46Ogorb3BlcmF0b3I8KGNvbnN0IENsYXNzJiBvdGhlcikgY29uc3QgeworICBpZiAob3JpZ2luXyA9PSBvdGhlci5vcmlnaW5fKSB7CisgICAgaWYgKHdpZHRoKCkgPT0gb3RoZXIud2lkdGgoKSkgeworICAgICAgcmV0dXJuIGhlaWdodCgpIDwgb3RoZXIuaGVpZ2h0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB3aWR0aCgpIDwgb3RoZXIud2lkdGgoKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG9yaWdpbl8gPCBvdGhlci5vcmlnaW5fOworICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK2Jvb2wgUmVjdEJhc2U8Q2xhc3MsIFBvaW50Q2xhc3MsIFNpemVDbGFzcywgSW5zZXRzQ2xhc3MsIFZlY3RvckNsYXNzLAorICAgICAgICAgICAgICBUeXBlPjo6Q29udGFpbnMoVHlwZSBwb2ludF94LCBUeXBlIHBvaW50X3kpIGNvbnN0IHsKKyAgcmV0dXJuIChwb2ludF94ID49IHgoKSkgJiYgKHBvaW50X3ggPCByaWdodCgpKSAmJiAocG9pbnRfeSA+PSB5KCkpICYmCisgICAgICAgICAocG9pbnRfeSA8IGJvdHRvbSgpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgorYm9vbCBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpDb250YWlucyhjb25zdCBDbGFzcyYgcmVjdCkgY29uc3QgeworICByZXR1cm4gKHJlY3QueCgpID49IHgoKSAmJiByZWN0LnJpZ2h0KCkgPD0gcmlnaHQoKSAmJiByZWN0LnkoKSA+PSB5KCkgJiYKKyAgICAgICAgICByZWN0LmJvdHRvbSgpIDw9IGJvdHRvbSgpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgorYm9vbCBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpJbnRlcnNlY3RzKGNvbnN0IENsYXNzJiByZWN0KSBjb25zdCB7CisgIHJldHVybiAhKElzRW1wdHkoKSB8fCByZWN0LklzRW1wdHkoKSB8fCByZWN0LngoKSA+PSByaWdodCgpIHx8CisgICAgICAgICAgIHJlY3QucmlnaHQoKSA8PSB4KCkgfHwgcmVjdC55KCkgPj0gYm90dG9tKCkgfHwgcmVjdC5ib3R0b20oKSA8PSB5KCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywKKyAgICAgICAgICAgICAgVHlwZT46OkludGVyc2VjdChjb25zdCBDbGFzcyYgcmVjdCkgeworICBpZiAoSXNFbXB0eSgpIHx8IHJlY3QuSXNFbXB0eSgpKSB7CisgICAgU2V0UmVjdChUeXBlKDApLCBUeXBlKDApLCBUeXBlKDApLCBUeXBlKDApKTsKKyAgICByZXR1cm47CisgIH0KKworICBUeXBlIHJ4ID0gc3RkOjptYXgoeCgpLCByZWN0LngoKSk7CisgIFR5cGUgcnkgPSBzdGQ6Om1heCh5KCksIHJlY3QueSgpKTsKKyAgVHlwZSByciA9IHN0ZDo6bWluKHJpZ2h0KCksIHJlY3QucmlnaHQoKSk7CisgIFR5cGUgcmIgPSBzdGQ6Om1pbihib3R0b20oKSwgcmVjdC5ib3R0b20oKSk7CisKKyAgaWYgKHJ4ID49IHJyIHx8IHJ5ID49IHJiKSByeCA9IHJ5ID0gcnIgPSByYiA9IFR5cGUoMCk7ICAvLyBub24taW50ZXJzZWN0aW5nCisKKyAgU2V0UmVjdChyeCwgcnksIHJyIC0gcngsIHJiIC0gcnkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywKKyAgICAgICAgICAgICAgVHlwZT46OlVuaW9uKGNvbnN0IENsYXNzJiByZWN0KSB7CisgIGlmIChJc0VtcHR5KCkpIHsKKyAgICAqdGhpcyA9IHJlY3Q7CisgICAgcmV0dXJuOworICB9CisgIGlmIChyZWN0LklzRW1wdHkoKSkgcmV0dXJuOworCisgIFR5cGUgcnggPSBzdGQ6Om1pbih4KCksIHJlY3QueCgpKTsKKyAgVHlwZSByeSA9IHN0ZDo6bWluKHkoKSwgcmVjdC55KCkpOworICBUeXBlIHJyID0gc3RkOjptYXgocmlnaHQoKSwgcmVjdC5yaWdodCgpKTsKKyAgVHlwZSByYiA9IHN0ZDo6bWF4KGJvdHRvbSgpLCByZWN0LmJvdHRvbSgpKTsKKworICBTZXRSZWN0KHJ4LCByeSwgcnIgLSByeCwgcmIgLSByeSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK3ZvaWQgUmVjdEJhc2U8Q2xhc3MsIFBvaW50Q2xhc3MsIFNpemVDbGFzcywgSW5zZXRzQ2xhc3MsIFZlY3RvckNsYXNzLAorICAgICAgICAgICAgICBUeXBlPjo6U3VidHJhY3QoY29uc3QgQ2xhc3MmIHJlY3QpIHsKKyAgaWYgKCFJbnRlcnNlY3RzKHJlY3QpKSByZXR1cm47CisgIGlmIChyZWN0LkNvbnRhaW5zKCpzdGF0aWNfY2FzdDxjb25zdCBDbGFzcyo+KHRoaXMpKSkgeworICAgIFNldFJlY3QoVHlwZSgwKSwgVHlwZSgwKSwgVHlwZSgwKSwgVHlwZSgwKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgVHlwZSByeCA9IHgoKTsKKyAgVHlwZSByeSA9IHkoKTsKKyAgVHlwZSByciA9IHJpZ2h0KCk7CisgIFR5cGUgcmIgPSBib3R0b20oKTsKKworICBpZiAocmVjdC55KCkgPD0geSgpICYmIHJlY3QuYm90dG9tKCkgPj0gYm90dG9tKCkpIHsKKyAgICAvLyBjb21wbGV0ZSBpbnRlcnNlY3Rpb24gaW4gdGhlIHktZGlyZWN0aW9uCisgICAgaWYgKHJlY3QueCgpIDw9IHgoKSkgeworICAgICAgcnggPSByZWN0LnJpZ2h0KCk7CisgICAgfSBlbHNlIGlmIChyZWN0LnJpZ2h0KCkgPj0gcmlnaHQoKSkgeworICAgICAgcnIgPSByZWN0LngoKTsKKyAgICB9CisgIH0gZWxzZSBpZiAocmVjdC54KCkgPD0geCgpICYmIHJlY3QucmlnaHQoKSA+PSByaWdodCgpKSB7CisgICAgLy8gY29tcGxldGUgaW50ZXJzZWN0aW9uIGluIHRoZSB4LWRpcmVjdGlvbgorICAgIGlmIChyZWN0LnkoKSA8PSB5KCkpIHsKKyAgICAgIHJ5ID0gcmVjdC5ib3R0b20oKTsKKyAgICB9IGVsc2UgaWYgKHJlY3QuYm90dG9tKCkgPj0gYm90dG9tKCkpIHsKKyAgICAgIHJiID0gcmVjdC55KCk7CisgICAgfQorICB9CisgIFNldFJlY3QocngsIHJ5LCByciAtIHJ4LCByYiAtIHJ5KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgordm9pZCBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpBZGp1c3RUb0ZpdChjb25zdCBDbGFzcyYgcmVjdCkgeworICBUeXBlIG5ld194ID0geCgpOworICBUeXBlIG5ld195ID0geSgpOworICBUeXBlIG5ld193aWR0aCA9IHdpZHRoKCk7CisgIFR5cGUgbmV3X2hlaWdodCA9IGhlaWdodCgpOworICBBZGp1c3RBbG9uZ0F4aXMocmVjdC54KCksIHJlY3Qud2lkdGgoKSwgJm5ld194LCAmbmV3X3dpZHRoKTsKKyAgQWRqdXN0QWxvbmdBeGlzKHJlY3QueSgpLCByZWN0LmhlaWdodCgpLCAmbmV3X3ksICZuZXdfaGVpZ2h0KTsKKyAgU2V0UmVjdChuZXdfeCwgbmV3X3ksIG5ld193aWR0aCwgbmV3X2hlaWdodCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK1BvaW50Q2xhc3MgUmVjdEJhc2U8Q2xhc3MsIFBvaW50Q2xhc3MsIFNpemVDbGFzcywgSW5zZXRzQ2xhc3MsIFZlY3RvckNsYXNzLAorICAgICAgICAgICAgICAgICAgICBUeXBlPjo6Q2VudGVyUG9pbnQoKSBjb25zdCB7CisgIHJldHVybiBQb2ludENsYXNzKHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Cit2b2lkIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywKKyAgICAgICAgICAgICAgVHlwZT46OkNsYW1wVG9DZW50ZXJlZFNpemUoY29uc3QgU2l6ZUNsYXNzJiBzaXplKSB7CisgIFR5cGUgbmV3X3dpZHRoID0gc3RkOjptaW4od2lkdGgoKSwgc2l6ZS53aWR0aCgpKTsKKyAgVHlwZSBuZXdfaGVpZ2h0ID0gc3RkOjptaW4oaGVpZ2h0KCksIHNpemUuaGVpZ2h0KCkpOworICBUeXBlIG5ld194ID0geCgpICsgKHdpZHRoKCkgLSBuZXdfd2lkdGgpIC8gMjsKKyAgVHlwZSBuZXdfeSA9IHkoKSArIChoZWlnaHQoKSAtIG5ld19oZWlnaHQpIC8gMjsKKyAgU2V0UmVjdChuZXdfeCwgbmV3X3ksIG5ld193aWR0aCwgbmV3X2hlaWdodCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDbGFzcywgdHlwZW5hbWUgUG9pbnRDbGFzcywgdHlwZW5hbWUgU2l6ZUNsYXNzLAorICAgICAgICAgIHR5cGVuYW1lIEluc2V0c0NsYXNzLCB0eXBlbmFtZSBWZWN0b3JDbGFzcywgdHlwZW5hbWUgVHlwZT4KK3ZvaWQgUmVjdEJhc2U8Q2xhc3MsIFBvaW50Q2xhc3MsIFNpemVDbGFzcywgSW5zZXRzQ2xhc3MsIFZlY3RvckNsYXNzLAorICAgICAgICAgICAgICBUeXBlPjo6U3BsaXRWZXJ0aWNhbGx5KENsYXNzKiBsZWZ0X2hhbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MqIHJpZ2h0X2hhbGYpIGNvbnN0IHsKKyAgRENIRUNLKGxlZnRfaGFsZik7CisgIERDSEVDSyhyaWdodF9oYWxmKTsKKworICBsZWZ0X2hhbGYtPlNldFJlY3QoeCgpLCB5KCksIHdpZHRoKCkgLyAyLCBoZWlnaHQoKSk7CisgIHJpZ2h0X2hhbGYtPlNldFJlY3QobGVmdF9oYWxmLT5yaWdodCgpLCB5KCksIHdpZHRoKCkgLSBsZWZ0X2hhbGYtPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3MsIHR5cGVuYW1lIFBvaW50Q2xhc3MsIHR5cGVuYW1lIFNpemVDbGFzcywKKyAgICAgICAgICB0eXBlbmFtZSBJbnNldHNDbGFzcywgdHlwZW5hbWUgVmVjdG9yQ2xhc3MsIHR5cGVuYW1lIFR5cGU+Citib29sIFJlY3RCYXNlPENsYXNzLCBQb2ludENsYXNzLCBTaXplQ2xhc3MsIEluc2V0c0NsYXNzLCBWZWN0b3JDbGFzcywKKyAgICAgICAgICAgICAgVHlwZT46OlNoYXJlc0VkZ2VXaXRoKGNvbnN0IENsYXNzJiByZWN0KSBjb25zdCB7CisgIHJldHVybiAoeSgpID09IHJlY3QueSgpICYmIGhlaWdodCgpID09IHJlY3QuaGVpZ2h0KCkgJiYKKyAgICAgICAgICAoeCgpID09IHJlY3QucmlnaHQoKSB8fCByaWdodCgpID09IHJlY3QueCgpKSkgfHwKKyAgICAgICAgICh4KCkgPT0gcmVjdC54KCkgJiYgd2lkdGgoKSA9PSByZWN0LndpZHRoKCkgJiYKKyAgICAgICAgICAoeSgpID09IHJlY3QuYm90dG9tKCkgfHwgYm90dG9tKCkgPT0gcmVjdC55KCkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgorVHlwZSBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpNYW5oYXR0YW5EaXN0YW5jZVRvUG9pbnQoY29uc3QgUG9pbnRDbGFzcyYgcG9pbnQpIGNvbnN0IHsKKyAgVHlwZSB4X2Rpc3RhbmNlID0KKyAgICAgIHN0ZDo6bWF4PFR5cGU+KFR5cGUoMCksIHN0ZDo6bWF4KHgoKSAtIHBvaW50LngoKSwgcG9pbnQueCgpIC0gcmlnaHQoKSkpOworICBUeXBlIHlfZGlzdGFuY2UgPQorICAgICAgc3RkOjptYXg8VHlwZT4oVHlwZSgwKSwgc3RkOjptYXgoeSgpIC0gcG9pbnQueSgpLCBwb2ludC55KCkgLSBib3R0b20oKSkpOworCisgIHJldHVybiB4X2Rpc3RhbmNlICsgeV9kaXN0YW5jZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBQb2ludENsYXNzLCB0eXBlbmFtZSBTaXplQ2xhc3MsCisgICAgICAgICAgdHlwZW5hbWUgSW5zZXRzQ2xhc3MsIHR5cGVuYW1lIFZlY3RvckNsYXNzLCB0eXBlbmFtZSBUeXBlPgorVHlwZSBSZWN0QmFzZTxDbGFzcywgUG9pbnRDbGFzcywgU2l6ZUNsYXNzLCBJbnNldHNDbGFzcywgVmVjdG9yQ2xhc3MsCisgICAgICAgICAgICAgIFR5cGU+OjpNYW5oYXR0YW5JbnRlcm5hbERpc3RhbmNlKGNvbnN0IENsYXNzJiByZWN0KSBjb25zdCB7CisgIENsYXNzIGMoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKKyAgYy5VbmlvbihyZWN0KTsKKworICBjb25zdCBUeXBlIGtFcHNpbG9uID0gc3RkOjpudW1lcmljX2xpbWl0czxUeXBlPjo6aXNfaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFR5cGUoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGQ6Om51bWVyaWNfbGltaXRzPFR5cGU+OjplcHNpbG9uKCk7CisKKyAgVHlwZSB4ID0KKyAgICAgIHN0ZDo6bWF4PFR5cGU+KFR5cGUoMCksIGMud2lkdGgoKSAtIHdpZHRoKCkgLSByZWN0LndpZHRoKCkgKyBrRXBzaWxvbik7CisgIFR5cGUgeSA9CisgICAgICBzdGQ6Om1heDxUeXBlPihUeXBlKDApLCBjLmhlaWdodCgpIC0gaGVpZ2h0KCkgLSByZWN0LmhlaWdodCgpICsga0Vwc2lsb24pOworICByZXR1cm4geCArIHk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBnZngKKworI2VuZGlmICAvLyBVSV9HRlhfR0VPTUVUUllfUkVDVF9CQVNFX0lNUExfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9zaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1YTViNgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1NJWkVfSF8KKyNkZWZpbmUgVUlfR0ZYX0dFT01FVFJZX1NJWkVfSF8KKworI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL251bWVyaWNzL2NoZWNrZWRfbWF0aC5oIgorI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9zaXplX2Jhc2UuaCIKKyNpbmNsdWRlICJ1aS9nZngvZ2VvbWV0cnkvc2l6ZV9mLmgiCisKK25hbWVzcGFjZSBnZnggeworCisvLyBBIHNpemUgaGFzIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzLgorY2xhc3MgU2l6ZSA6IHB1YmxpYyBTaXplQmFzZTxTaXplLCBpbnQ+IHsKKyBwdWJsaWM6CisgIFNpemUoKSA6IFNpemVCYXNlPFNpemUsIGludD4oMCwgMCkge30KKyAgU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIDogU2l6ZUJhc2U8U2l6ZSwgaW50Pih3aWR0aCwgaGVpZ2h0KSB7fQorICB+U2l6ZSgpIHt9CisKKyAgb3BlcmF0b3IgU2l6ZUYoKSBjb25zdCB7CisgICAgcmV0dXJuIFNpemVGKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCgpKSk7CisgIH0KKworICBpbnQgR2V0QXJlYSgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCkgKiBoZWlnaHQoKTsgfQorCisgIGJhc2U6OkNoZWNrZWROdW1lcmljPGludD4gR2V0Q2hlY2tlZEFyZWEoKSBjb25zdCB7CisgICAgYmFzZTo6Q2hlY2tlZE51bWVyaWM8aW50PiBjaGVja2VkX2FyZWEgPSB3aWR0aCgpOworICAgIGNoZWNrZWRfYXJlYSAqPSBoZWlnaHQoKTsKKyAgICByZXR1cm4gY2hlY2tlZF9hcmVhOworICB9CisKKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2l6ZSYgbGhzLCBjb25zdCBTaXplJiByaHMpIHsKKyAgcmV0dXJuIGxocy53aWR0aCgpID09IHJocy53aWR0aCgpICYmIGxocy5oZWlnaHQoKSA9PSByaHMuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2l6ZSYgbGhzLCBjb25zdCBTaXplJiByaHMpIHsKKyAgcmV0dXJuICEobGhzID09IHJocyk7Cit9CisKKy8vIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBTaXplQmFzZTxTaXplLCBpbnQ+OworCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0dFT01FVFJZX1NJWkVfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZV9iYXNlLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3NpemVfYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzViM2YKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2dlb21ldHJ5L3NpemVfYmFzZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1NJWkVfQkFTRV9IXworI2RlZmluZSBVSV9HRlhfR0VPTUVUUllfU0laRV9CQVNFX0hfCisKK25hbWVzcGFjZSBnZnggeworCisvLyBBIHNpemUgaGFzIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzLgordGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzLCB0eXBlbmFtZSBUeXBlPgorY2xhc3MgU2l6ZUJhc2UgeworIHB1YmxpYzoKKyAgVHlwZSB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIHdpZHRoXzsgfQorICBUeXBlIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGhlaWdodF87IH0KKworICB2b2lkIFNldFNpemUoVHlwZSB3aWR0aCwgVHlwZSBoZWlnaHQpIHsKKyAgICBzZXRfd2lkdGgod2lkdGgpOworICAgIHNldF9oZWlnaHQoaGVpZ2h0KTsKKyAgfQorCisgIHZvaWQgRW5sYXJnZShUeXBlIHdpZHRoLCBUeXBlIGhlaWdodCkgeworICAgIHNldF93aWR0aCh3aWR0aF8gKyB3aWR0aCk7CisgICAgc2V0X2hlaWdodChoZWlnaHRfICsgaGVpZ2h0KTsKKyAgfQorCisgIHZvaWQgc2V0X3dpZHRoKFR5cGUgd2lkdGgpIHsgd2lkdGhfID0gd2lkdGg7IH0KKyAgdm9pZCBzZXRfaGVpZ2h0KFR5cGUgaGVpZ2h0KSB7IGhlaWdodF8gPSBoZWlnaHQ7IH0KKworICB2b2lkIFNldFRvTWluKGNvbnN0IENsYXNzJiBvdGhlcikgeworICAgIHdpZHRoXyA9IHdpZHRoXyA8PSBvdGhlci53aWR0aF8gPyB3aWR0aF8gOiBvdGhlci53aWR0aF87CisgICAgaGVpZ2h0XyA9IGhlaWdodF8gPD0gb3RoZXIuaGVpZ2h0XyA/IGhlaWdodF8gOiBvdGhlci5oZWlnaHRfOworICB9CisKKyAgdm9pZCBTZXRUb01heChjb25zdCBDbGFzcyYgb3RoZXIpIHsKKyAgICB3aWR0aF8gPSB3aWR0aF8gPj0gb3RoZXIud2lkdGhfID8gd2lkdGhfIDogb3RoZXIud2lkdGhfOworICAgIGhlaWdodF8gPSBoZWlnaHRfID49IG90aGVyLmhlaWdodF8gPyBoZWlnaHRfIDogb3RoZXIuaGVpZ2h0XzsKKyAgfQorCisgIGJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICh3aWR0aF8gPT0gVHlwZSgwKSkgfHwgKGhlaWdodF8gPT0gVHlwZSgwKSk7IH0KKworIHByb3RlY3RlZDoKKyAgU2l6ZUJhc2UoKSB7fQorICBTaXplQmFzZShUeXBlIHdpZHRoLCBUeXBlIGhlaWdodCkgOiB3aWR0aF8od2lkdGgpLCBoZWlnaHRfKGhlaWdodCkge30KKworICAvLyBEZXN0cnVjdG9yIGlzIGludGVudGlvbmFsbHkgbWFkZSBub24gdmlydHVhbCBhbmQgcHJvdGVjdGVkLgorICAvLyBEbyBub3QgbWFrZSB0aGlzIHB1YmxpYy4KKyAgflNpemVCYXNlKCkge30KKworIHByaXZhdGU6CisgIFR5cGUgd2lkdGhfOworICBUeXBlIGhlaWdodF87Cit9OworCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0dFT01FVFJZX1NJWkVfQkFTRV9IXwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS9zaXplX2YuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZV9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3ZjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvc2l6ZV9mLmgKQEAgLTAsMCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2lmbmRlZiBVSV9HRlhfR0VPTUVUUllfU0laRV9GX0hfCisjZGVmaW5lIFVJX0dGWF9HRU9NRVRSWV9TSVpFX0ZfSF8KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgInVpL2dmeC9nZW9tZXRyeS9zaXplX2Jhc2UuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKKy8vIEEgZmxvYXRpbmctcG9pbnQgdmVyc2lvbiBvZiBTaXplLgorY2xhc3MgU2l6ZUYgOiBwdWJsaWMgU2l6ZUJhc2U8U2l6ZUYsIGZsb2F0PiB7CisgcHVibGljOgorICBTaXplRigpIDogU2l6ZUJhc2U8U2l6ZUYsIGZsb2F0PigwLCAwKSB7fQorICBTaXplRihmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSA6IFNpemVCYXNlPFNpemVGLCBmbG9hdD4od2lkdGgsIGhlaWdodCkge30KKyAgflNpemVGKCkge30KKworICBmbG9hdCBHZXRBcmVhKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKSAqIGhlaWdodCgpOyB9CisKKyAgdm9pZCBTY2FsZShmbG9hdCBzY2FsZSkgeyBTY2FsZShzY2FsZSwgc2NhbGUpOyB9CisKKyAgdm9pZCBTY2FsZShmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlKSB7CisgICAgU2V0U2l6ZSh3aWR0aCgpICogeF9zY2FsZSwgaGVpZ2h0KCkgKiB5X3NjYWxlKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIFRvU3RyaW5nKCkgY29uc3Q7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpemVGJiBsaHMsIGNvbnN0IFNpemVGJiByaHMpIHsKKyAgcmV0dXJuIGxocy53aWR0aCgpID09IHJocy53aWR0aCgpICYmIGxocy5oZWlnaHQoKSA9PSByaHMuaGVpZ2h0KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2l6ZUYmIGxocywgY29uc3QgU2l6ZUYmIHJocykgeworICByZXR1cm4gIShsaHMgPT0gcmhzKTsKK30KKworU2l6ZUYgU2NhbGVTaXplKGNvbnN0IFNpemVGJiBwLCBmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlKTsKKworaW5saW5lIFNpemVGIFNjYWxlU2l6ZShjb25zdCBTaXplRiYgcCwgZmxvYXQgc2NhbGUpIHsKKyAgcmV0dXJuIFNjYWxlU2l6ZShwLCBzY2FsZSwgc2NhbGUpOworfQorCitpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgc3RyZWFtLCBjb25zdCBTaXplRiYgc2l6ZSkgeworICBzdHJlYW0gPDwgInt3aWR0aD0iIDw8IHNpemUud2lkdGgoKSA8PCAiIGhlaWdodD0iIDw8IHNpemUuaGVpZ2h0KCkgPDwgIn0iOworICByZXR1cm4gc3RyZWFtOworfQorCisvLyBleHRlcm4gdGVtcGxhdGUgY2xhc3MgU2l6ZUJhc2U8U2l6ZUYsIGZsb2F0PjsKKworfSAgLy8gbmFtZXNwYWNlIGdmeAorCisjZW5kaWYgIC8vIFVJX0dGWF9HRU9NRVRSWV9TSVpFX0ZfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmQuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFkMjYwCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS92ZWN0b3IyZC5oCkBAIC0wLDAgKzEsOTggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKy8vIERlZmluZXMgYSBzaW1wbGUgaW50ZWdlciB2ZWN0b3IgY2xhc3MuICBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gaW5kaWNhdGUgYQorLy8gZGlzdGFuY2UgaW4gdHdvIGRpbWVuc2lvbnMgYmV0d2VlbiB0d28gcG9pbnRzLiBTdWJ0cmFjdGluZyB0d28gcG9pbnRzIHNob3VsZAorLy8gcHJvZHVjZSBhIHZlY3RvciwgYW5kIGFkZGluZyBhIHZlY3RvciB0byBhIHBvaW50IHByb2R1Y2VzIHRoZSBwb2ludCBhdCB0aGUKKy8vIHZlY3RvcidzIGRpc3RhbmNlIGZyb20gdGhlIG9yaWdpbmFsIHBvaW50LgorCisjaWZuZGVmIFVJX0dGWF9HRU9NRVRSWV9WRUNUT1IyRF9IXworI2RlZmluZSBVSV9HRlhfR0VPTUVUUllfVkVDVE9SMkRfSF8KKworI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIKKyNpbmNsdWRlICJ1aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmRfZi5oIgorCituYW1lc3BhY2UgZ2Z4IHsKKworY2xhc3MgVmVjdG9yMmQgeworIHB1YmxpYzoKKyAgVmVjdG9yMmQoKSA6IHhfKDApLCB5XygwKSB7fQorICBWZWN0b3IyZChpbnQgeCwgaW50IHkpIDogeF8oeCksIHlfKHkpIHt9CisKKyAgdm9pZCBTZXRWZWN0b3IoaW50IHgsIGludCB5KSB7CisgICAgeF8gPSB4OworICAgIHlfID0geTsKKyAgfQorCisgIGludCB4KCkgY29uc3QgeyByZXR1cm4geF87IH0KKyAgdm9pZCBzZXRfeChpbnQgeCkgeyB4XyA9IHg7IH0KKworICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIHlfOyB9CisgIHZvaWQgc2V0X3koaW50IHkpIHsgeV8gPSB5OyB9CisKKyAgLy8gVHJ1ZSBpZiBib3RoIGNvbXBvbmVudHMgb2YgdGhlIHZlY3RvciBhcmUgMC4KKyAgYm9vbCBJc1plcm8oKSBjb25zdDsKKworICAvLyBBZGQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHxvdGhlcnwgdmVjdG9yIHRvIHRoZSBjdXJyZW50IHZlY3Rvci4KKyAgdm9pZCBBZGQoY29uc3QgVmVjdG9yMmQmIG90aGVyKTsKKyAgLy8gU3VidHJhY3QgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHxvdGhlcnwgdmVjdG9yIGZyb20gdGhlIGN1cnJlbnQgdmVjdG9yLgorICB2b2lkIFN1YnRyYWN0KGNvbnN0IFZlY3RvcjJkJiBvdGhlcik7CisKKyAgdm9pZCBvcGVyYXRvcis9KGNvbnN0IFZlY3RvcjJkJiBvdGhlcikgeyBBZGQob3RoZXIpOyB9CisgIHZvaWQgb3BlcmF0b3ItPShjb25zdCBWZWN0b3IyZCYgb3RoZXIpIHsgU3VidHJhY3Qob3RoZXIpOyB9CisKKyAgdm9pZCBTZXRUb01pbihjb25zdCBWZWN0b3IyZCYgb3RoZXIpIHsKKyAgICB4XyA9IHhfIDw9IG90aGVyLnhfID8geF8gOiBvdGhlci54XzsKKyAgICB5XyA9IHlfIDw9IG90aGVyLnlfID8geV8gOiBvdGhlci55XzsKKyAgfQorCisgIHZvaWQgU2V0VG9NYXgoY29uc3QgVmVjdG9yMmQmIG90aGVyKSB7CisgICAgeF8gPSB4XyA+PSBvdGhlci54XyA/IHhfIDogb3RoZXIueF87CisgICAgeV8gPSB5XyA+PSBvdGhlci55XyA/IHlfIDogb3RoZXIueV87CisgIH0KKworICAvLyBHaXZlcyB0aGUgc3F1YXJlIG9mIHRoZSBkaWFnb25hbCBsZW5ndGggb2YgdGhlIHZlY3Rvci4gU2luY2UgdGhpcyBpcworICAvLyBjaGVhcGVyIHRvIGNvbXB1dGUgdGhhbiBMZW5ndGgoKSwgaXQgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY29tcGFyZQorICAvLyByZWxhdGl2ZSBsZW5ndGhzIG9mIGRpZmZlcmVudCB2ZWN0b3JzIHdpdGhvdXQgbmVlZGluZyB0aGUgYWN0dWFsIGxlbmd0aHMuCisgIGludDY0IExlbmd0aFNxdWFyZWQoKSBjb25zdDsKKyAgLy8gR2l2ZXMgdGhlIGRpYWdvbmFsIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICBmbG9hdCBMZW5ndGgoKSBjb25zdDsKKworICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OworCisgIG9wZXJhdG9yIFZlY3RvcjJkRigpIGNvbnN0IHsKKyAgICByZXR1cm4gVmVjdG9yMmRGKHN0YXRpY19jYXN0PGZsb2F0Pih4XyksIHN0YXRpY19jYXN0PGZsb2F0Pih5XykpOworICB9CisKKyBwcml2YXRlOgorICBpbnQgeF87CisgIGludCB5XzsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yMmQmIGxocywgY29uc3QgVmVjdG9yMmQmIHJocykgeworICByZXR1cm4gbGhzLngoKSA9PSByaHMueCgpICYmIGxocy55KCkgPT0gcmhzLnkoKTsKK30KKworaW5saW5lIFZlY3RvcjJkIG9wZXJhdG9yLShjb25zdCBWZWN0b3IyZCYgdikgeworICByZXR1cm4gVmVjdG9yMmQoLXYueCgpLCAtdi55KCkpOworfQorCitpbmxpbmUgVmVjdG9yMmQgb3BlcmF0b3IrKGNvbnN0IFZlY3RvcjJkJiBsaHMsIGNvbnN0IFZlY3RvcjJkJiByaHMpIHsKKyAgVmVjdG9yMmQgcmVzdWx0ID0gbGhzOworICByZXN1bHQuQWRkKHJocyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBWZWN0b3IyZCBvcGVyYXRvci0oY29uc3QgVmVjdG9yMmQmIGxocywgY29uc3QgVmVjdG9yMmQmIHJocykgeworICBWZWN0b3IyZCByZXN1bHQgPSBsaHM7CisgIHJlc3VsdC5BZGQoLXJocyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBnZngKKworI2VuZGlmICAvLyBVSV9HRlhfR0VPTUVUUllfVkVDVE9SMkRfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmRfZi5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9nZW9tZXRyeS92ZWN0b3IyZF9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3ZWYwMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvZ2VvbWV0cnkvdmVjdG9yMmRfZi5oCkBAIC0wLDAgKzEsMTI3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisvLyBEZWZpbmVzIGEgc2ltcGxlIGZsb2F0IHZlY3RvciBjbGFzcy4gIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbmRpY2F0ZSBhCisvLyBkaXN0YW5jZSBpbiB0d28gZGltZW5zaW9ucyBiZXR3ZWVuIHR3byBwb2ludHMuIFN1YnRyYWN0aW5nIHR3byBwb2ludHMgc2hvdWxkCisvLyBwcm9kdWNlIGEgdmVjdG9yLCBhbmQgYWRkaW5nIGEgdmVjdG9yIHRvIGEgcG9pbnQgcHJvZHVjZXMgdGhlIHBvaW50IGF0IHRoZQorLy8gdmVjdG9yJ3MgZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luYWwgcG9pbnQuCisKKyNpZm5kZWYgVUlfR0ZYX0dFT01FVFJZX1ZFQ1RPUjJEX0ZfSF8KKyNkZWZpbmUgVUlfR0ZYX0dFT01FVFJZX1ZFQ1RPUjJEX0ZfSF8KKworI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKK2NsYXNzIFZlY3RvcjJkRiB7CisgcHVibGljOgorICBWZWN0b3IyZEYoKSA6IHhfKDApLCB5XygwKSB7fQorICBWZWN0b3IyZEYoZmxvYXQgeCwgZmxvYXQgeSkgOiB4Xyh4KSwgeV8oeSkge30KKworICB2b2lkIFNldFZlY3RvcihmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgeF8gPSB4OworICAgIHlfID0geTsKKyAgfQorCisgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVybiB4XzsgfQorICB2b2lkIHNldF94KGZsb2F0IHgpIHsgeF8gPSB4OyB9CisKKyAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIHlfOyB9CisgIHZvaWQgc2V0X3koZmxvYXQgeSkgeyB5XyA9IHk7IH0KKworICAvLyBUcnVlIGlmIGJvdGggY29tcG9uZW50cyBvZiB0aGUgdmVjdG9yIGFyZSAwLgorICBib29sIElzWmVybygpIGNvbnN0OworCisgIC8vIEFkZCB0aGUgY29tcG9uZW50cyBvZiB0aGUgfG90aGVyfCB2ZWN0b3IgdG8gdGhlIGN1cnJlbnQgdmVjdG9yLgorICB2b2lkIEFkZChjb25zdCBWZWN0b3IyZEYmIG90aGVyKTsKKyAgLy8gU3VidHJhY3QgdGhlIGNvbXBvbmVudHMgb2YgdGhlIHxvdGhlcnwgdmVjdG9yIGZyb20gdGhlIGN1cnJlbnQgdmVjdG9yLgorICB2b2lkIFN1YnRyYWN0KGNvbnN0IFZlY3RvcjJkRiYgb3RoZXIpOworCisgIHZvaWQgb3BlcmF0b3IrPShjb25zdCBWZWN0b3IyZEYmIG90aGVyKSB7IEFkZChvdGhlcik7IH0KKyAgdm9pZCBvcGVyYXRvci09KGNvbnN0IFZlY3RvcjJkRiYgb3RoZXIpIHsgU3VidHJhY3Qob3RoZXIpOyB9CisKKyAgZmxvYXQgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeworICAgIERDSEVDS19MRSgwLCBpKTsKKyAgICBEQ0hFQ0tfR0UoMSwgaSk7CisgICAgcmV0dXJuIGkgPT0gMCA/IHhfIDogeV87CisgIH0KKyAgZmxvYXQmIG9wZXJhdG9yW10oaW50IGkpIHsKKyAgICBEQ0hFQ0tfTEUoMCwgaSk7CisgICAgRENIRUNLX0dFKDEsIGkpOworICAgIHJldHVybiBpID09IDAgPyB4XyA6IHlfOworICB9CisKKyAgdm9pZCBTZXRUb01pbihjb25zdCBWZWN0b3IyZEYmIG90aGVyKSB7CisgICAgeF8gPSB4XyA8PSBvdGhlci54XyA/IHhfIDogb3RoZXIueF87CisgICAgeV8gPSB5XyA8PSBvdGhlci55XyA/IHlfIDogb3RoZXIueV87CisgIH0KKworICB2b2lkIFNldFRvTWF4KGNvbnN0IFZlY3RvcjJkRiYgb3RoZXIpIHsKKyAgICB4XyA9IHhfID49IG90aGVyLnhfID8geF8gOiBvdGhlci54XzsKKyAgICB5XyA9IHlfID49IG90aGVyLnlfID8geV8gOiBvdGhlci55XzsKKyAgfQorCisgIC8vIEdpdmVzIHRoZSBzcXVhcmUgb2YgdGhlIGRpYWdvbmFsIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICBkb3VibGUgTGVuZ3RoU3F1YXJlZCgpIGNvbnN0OworICAvLyBHaXZlcyB0aGUgZGlhZ29uYWwgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IuCisgIGZsb2F0IExlbmd0aCgpIGNvbnN0OworCisgIC8vIFNjYWxlIHRoZSB4IGFuZCB5IGNvbXBvbmVudHMgb2YgdGhlIHZlY3RvciBieSB8c2NhbGV8LgorICB2b2lkIFNjYWxlKGZsb2F0IHNjYWxlKSB7IFNjYWxlKHNjYWxlLCBzY2FsZSk7IH0KKyAgLy8gU2NhbGUgdGhlIHggYW5kIHkgY29tcG9uZW50cyBvZiB0aGUgdmVjdG9yIGJ5IHx4X3NjYWxlfCBhbmQgfHlfc2NhbGV8CisgIC8vIHJlc3BlY3RpdmVseS4KKyAgdm9pZCBTY2FsZShmbG9hdCB4X3NjYWxlLCBmbG9hdCB5X3NjYWxlKTsKKworICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OworCisgcHJpdmF0ZToKKyAgZmxvYXQgeF87CisgIGZsb2F0IHlfOworfTsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZWN0b3IyZEYmIGxocywgY29uc3QgVmVjdG9yMmRGJiByaHMpIHsKKyAgcmV0dXJuIGxocy54KCkgPT0gcmhzLngoKSAmJiBsaHMueSgpID09IHJocy55KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yMmRGJiBsaHMsIGNvbnN0IFZlY3RvcjJkRiYgcmhzKSB7CisgIHJldHVybiAhKGxocyA9PSByaHMpOworfQorCitpbmxpbmUgVmVjdG9yMmRGIG9wZXJhdG9yLShjb25zdCBWZWN0b3IyZEYmIHYpIHsKKyAgcmV0dXJuIFZlY3RvcjJkRigtdi54KCksIC12LnkoKSk7Cit9CisKK2lubGluZSBWZWN0b3IyZEYgb3BlcmF0b3IrKGNvbnN0IFZlY3RvcjJkRiYgbGhzLCBjb25zdCBWZWN0b3IyZEYmIHJocykgeworICBWZWN0b3IyZEYgcmVzdWx0ID0gbGhzOworICByZXN1bHQuQWRkKHJocyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBWZWN0b3IyZEYgb3BlcmF0b3ItKGNvbnN0IFZlY3RvcjJkRiYgbGhzLCBjb25zdCBWZWN0b3IyZEYmIHJocykgeworICBWZWN0b3IyZEYgcmVzdWx0ID0gbGhzOworICByZXN1bHQuQWRkKC1yaHMpOworICByZXR1cm4gcmVzdWx0OworfQorCisvLyBSZXR1cm4gdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuCitkb3VibGUgQ3Jvc3NQcm9kdWN0KGNvbnN0IFZlY3RvcjJkRiYgbGhzLCBjb25zdCBWZWN0b3IyZEYmIHJocyk7CisKKy8vIFJldHVybiB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuCitkb3VibGUgRG90UHJvZHVjdChjb25zdCBWZWN0b3IyZEYmIGxocywgY29uc3QgVmVjdG9yMmRGJiByaHMpOworCisvLyBSZXR1cm4gYSB2ZWN0b3IgdGhhdCBpcyB8dnwgc2NhbGVkIGJ5IHRoZSBnaXZlbiBzY2FsZSBmYWN0b3JzIGFsb25nIGVhY2gKKy8vIGF4aXMuCitWZWN0b3IyZEYgU2NhbGVWZWN0b3IyZChjb25zdCBWZWN0b3IyZEYmIHYsIGZsb2F0IHhfc2NhbGUsIGZsb2F0IHlfc2NhbGUpOworCisvLyBSZXR1cm4gYSB2ZWN0b3IgdGhhdCBpcyB8dnwgc2NhbGVkIGJ5IHRoZSBnaXZlbiBzY2FsZSBmYWN0b3IuCitpbmxpbmUgVmVjdG9yMmRGIFNjYWxlVmVjdG9yMmQoY29uc3QgVmVjdG9yMmRGJiB2LCBmbG9hdCBzY2FsZSkgeworICByZXR1cm4gU2NhbGVWZWN0b3IyZCh2LCBzY2FsZSwgc2NhbGUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgZ2Z4CisKKyNlbmRpZiAgLy8gVUlfR0ZYX0dFT01FVFJZX1ZFQ1RPUjJEX0ZfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvaGRyX21ldGFkYXRhLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2hkcl9tZXRhZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjgxNTgKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9jb2JhbHQvdWkvZ2Z4L2hkcl9tZXRhZGF0YS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8vIENvcHlyaWdodCAyMDE2IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2lmbmRlZiBVSV9HRlhfSERSX01FVEFEQVRBX0hfCisjZGVmaW5lIFVJX0dGWF9IRFJfTUVUQURBVEFfSF8KKworI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCisjaW5jbHVkZSAidWkvZ2Z4L2dlb21ldHJ5L3BvaW50X2YuaCIKKworbmFtZXNwYWNlIGdmeCB7CisKKy8vIFNNUFRFIFNUIDIwODYgY29sb3Igdm9sdW1lIG1ldGFkYXRhLgorc3RydWN0IE1FRElBX0VYUE9SVCBDb2xvclZvbHVtZU1ldGFkYXRhIHsKKyAgdXNpbmcgQ2hyb21hdGljaXR5ID0gZ2Z4OjpQb2ludEY7CisgIENocm9tYXRpY2l0eSBwcmltYXJ5X3I7CisgIENocm9tYXRpY2l0eSBwcmltYXJ5X2c7CisgIENocm9tYXRpY2l0eSBwcmltYXJ5X2I7CisgIENocm9tYXRpY2l0eSB3aGl0ZV9wb2ludDsKKyAgZmxvYXQgbHVtaW5hbmNlX21heCA9IDA7CisgIGZsb2F0IGx1bWluYW5jZV9taW4gPSAwOworCisgIENvbG9yVm9sdW1lTWV0YWRhdGEoKSA9IGRlZmF1bHQ7CisgIENvbG9yVm9sdW1lTWV0YWRhdGEoY29uc3QgQ29sb3JWb2x1bWVNZXRhZGF0YSYgcmhzKSA9IGRlZmF1bHQ7CisgIENvbG9yVm9sdW1lTWV0YWRhdGEmIG9wZXJhdG9yPShjb25zdCBDb2xvclZvbHVtZU1ldGFkYXRhJiByaHMpID0gZGVmYXVsdDsKKworICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3JWb2x1bWVNZXRhZGF0YSYgcmhzKSBjb25zdCB7CisgICAgcmV0dXJuICgocHJpbWFyeV9yID09IHJocy5wcmltYXJ5X3IpICYmIChwcmltYXJ5X2cgPT0gcmhzLnByaW1hcnlfZykgJiYKKyAgICAgICAgICAgIChwcmltYXJ5X2IgPT0gcmhzLnByaW1hcnlfYikgJiYgKHdoaXRlX3BvaW50ID09IHJocy53aGl0ZV9wb2ludCkgJiYKKyAgICAgICAgICAgIChsdW1pbmFuY2VfbWF4ID09IHJocy5sdW1pbmFuY2VfbWF4KSAmJgorICAgICAgICAgICAgKGx1bWluYW5jZV9taW4gPT0gcmhzLmx1bWluYW5jZV9taW4pKTsKKyAgfQorfTsKKworLy8gSERSIG1ldGFkYXRhIGNvbW1vbiBmb3IgSERSMTAgYW5kIFdlYk0vVlA5LWJhc2VkIEhEUiBmb3JtYXRzLgorc3RydWN0IE1FRElBX0VYUE9SVCBIRFJNZXRhZGF0YSB7CisgIENvbG9yVm9sdW1lTWV0YWRhdGEgY29sb3Jfdm9sdW1lX21ldGFkYXRhOworICAvLyBNYXggY29udGVudCBsaWdodCBsZXZlbCAoQ0xMKSwgaS5lLiBtYXhpbXVtIGJyaWdodG5lc3MgbGV2ZWwgcHJlc2VudCBpbiB0aGUKKyAgLy8gc3RyZWFtKSwgaW4gbml0cy4KKyAgdW5zaWduZWQgbWF4X2NvbnRlbnRfbGlnaHRfbGV2ZWwgPSAwOworICAvLyBNYXggZnJhbWUtYXZlcmFnZSBsaWdodCBsZXZlbCAoRkFMTCksIGkuZS4gbWF4aW11bSBhdmVyYWdlIGJyaWdodG5lc3Mgb2YKKyAgLy8gdGhlIGJyaWdodGVzdCBmcmFtZSBpbiB0aGUgc3RyZWFtKSwgaW4gbml0cy4KKyAgdW5zaWduZWQgbWF4X2ZyYW1lX2F2ZXJhZ2VfbGlnaHRfbGV2ZWwgPSAwOworCisgIEhEUk1ldGFkYXRhKCkgPSBkZWZhdWx0OworICBIRFJNZXRhZGF0YShjb25zdCBIRFJNZXRhZGF0YSYgcmhzKSA9IGRlZmF1bHQ7CisgIEhEUk1ldGFkYXRhJiBvcGVyYXRvcj0oY29uc3QgSERSTWV0YWRhdGEmIHJocykgPSBkZWZhdWx0OworCisgIGJvb2wgSXNWYWxpZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gISgobWF4X2NvbnRlbnRfbGlnaHRfbGV2ZWwgPT0gMCkgJiYKKyAgICAgICAgICAgICAobWF4X2ZyYW1lX2F2ZXJhZ2VfbGlnaHRfbGV2ZWwgPT0gMCkgJiYKKyAgICAgICAgICAgICAoY29sb3Jfdm9sdW1lX21ldGFkYXRhID09IENvbG9yVm9sdW1lTWV0YWRhdGEoKSkpOworICB9CisKKyAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhEUk1ldGFkYXRhJiByaHMpIGNvbnN0IHsKKyAgICByZXR1cm4gKAorICAgICAgICAobWF4X2NvbnRlbnRfbGlnaHRfbGV2ZWwgPT0gcmhzLm1heF9jb250ZW50X2xpZ2h0X2xldmVsKSAmJgorICAgICAgICAobWF4X2ZyYW1lX2F2ZXJhZ2VfbGlnaHRfbGV2ZWwgPT0gcmhzLm1heF9mcmFtZV9hdmVyYWdlX2xpZ2h0X2xldmVsKSAmJgorICAgICAgICAoY29sb3Jfdm9sdW1lX21ldGFkYXRhID09IHJocy5jb2xvcl92b2x1bWVfbWV0YWRhdGEpKTsKKyAgfQorCisgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIRFJNZXRhZGF0YSYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KK307CisKKy8vIEhEUiBtZXRhZGF0YSB0eXBlcyBhcyBkZXNjcmliZWQgaW4KKy8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYS1jYXBhYmlsaXRpZXMvI2VudW1kZWYtaGRybWV0YWRhdGF0eXBlCitlbnVtIGNsYXNzIEhkck1ldGFkYXRhVHlwZSB7CisgIGtOb25lLAorICBrU21wdGVTdDIwODYsCisgIGtTbXB0ZVN0MjA5NF8xMCwKKyAga1NtcHRlU3QyMDk0XzQwLAorfTsKKworfSAgLy8gbmFtZXNwYWNlIGdmeAorCisjZW5kaWYgIC8vIFVJX0dGWF9IRFJfTUVUQURBVEFfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvbmF0aXZlX3BpeG1hcF9oYW5kbGUuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2NvYmFsdC91aS9nZngvbmF0aXZlX3BpeG1hcF9oYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQ3NjliCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvY29iYWx0L3VpL2dmeC9uYXRpdmVfcGl4bWFwX2hhbmRsZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8vIENvcHlyaWdodCAyMDE1IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworI2lmbmRlZiBVSV9HRlhfTkFUSVZFX1BJWE1BUF9IQU5ETEVfSF8KKyNkZWZpbmUgVUlfR0ZYX05BVElWRV9QSVhNQVBfSEFORExFX0hfCisKKy8vIEEgcmVkdWNlZCB2ZXJzaW9uIG9mIGBuYXRpdmVfcGl4bWFwX2hhbmRsZS5oYCBlbm91Z2ggdG8gbWFrZSByZXF1aXJlZCBmaWxlcworLy8gaW4gQ2hyb21pdW0gbWVkaWEgdG8gYmUgYnVpbHQuCisKK25hbWVzcGFjZSBnZnggeworCitjbGFzcyBOYXRpdmVQaXhtYXBIYW5kbGUgeworIHB1YmxpYzoKKyAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBrTm9Nb2RpZmllciA9IDB4MDBmZmZmZmZmZmZmZmZmZjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBnZngKKworI2VuZGlmICAvLyBVSV9HRlhfTkFUSVZFX1BJWE1BUF9IQU5ETEVfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYwppbmRleCA3YmVmYzJkLi5lNzM4YmU5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL2NodW5rX2RlbXV4ZXIuY2MKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmNjCkBAIC0xNSw2ICsxNSw5IEBACiAjaW5jbHVkZSAiYmFzZS9tYWNyb3MuaCIKICNpbmNsdWRlICJiYXNlL21ldHJpY3MvaGlzdG9ncmFtX21hY3Jvcy5oIgogI2luY2x1ZGUgImJhc2Uvc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgiCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisjaW5jbHVkZSAiYmFzZS9zdHJpbmdzL3N0cmluZ19zcGxpdC5oIgorI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCiAjaW5jbHVkZSAiYmFzZS90aHJlYWRpbmcvdGhyZWFkX3Rhc2tfcnVubmVyX2hhbmRsZS5oIgogI2luY2x1ZGUgImJhc2UvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKICNpbmNsdWRlICJtZWRpYS9iYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgiCkBAIC01OSwxMiArNjIsNTUgQEAKICAgcmV0dXJuIGNvZGVjczsKIH0KIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorCisvLyBQYXJzZSB0eXBlIGFuZCBjb2RlY3MgZnJvbSBtaW1lIHR5cGUuIEl0IHdpbGwgcmV0dXJuICJ2aWRlby9tcDQiIGFuZAorLy8gImF2YzEuNDJFMDFFLCBtcDRhLjQwLjIiIGZvciAidmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFLCBtcDRhLjQwLjIiLgorLy8gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBtaW5pbXVtIHZhbGlkYXRpb24gYXMgdGhlIG1lZGlhIHN0YWNrIHdpbGwgY2hlY2sKKy8vIHRoZSB0eXBlIGFuZCBjb2RlY3Mgc3RyaWN0bHkuCitib29sIFBhcnNlTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwgc3RkOjpzdHJpbmcqIHR5cGUsCisgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIGNvZGVjcykgeworICBEQ0hFQ0sodHlwZSk7CisgIERDSEVDSyhjb2RlY3MpOworICBzdGF0aWMgY29uc3QgY2hhciBrQ29kZWNzW10gPSAiY29kZWNzPSI7CisKKyAgLy8gU3BsaXRTdHJpbmcgd2lsbCBhbHNvIHRyaW0gdGhlIHJlc3VsdHMuCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnMgPSA6OmJhc2U6OlNwbGl0U3RyaW5nKAorICAgICAgbWltZV90eXBlLCAiOyIsIGJhc2U6OlRSSU1fV0hJVEVTUEFDRSwgYmFzZTo6U1BMSVRfV0FOVF9BTEwpOworICAvLyBUaGUgZmlyc3Qgb25lIGhhcyB0byBiZSBtaW1lIHR5cGUgd2l0aCBkZWxpbWl0ZXIgJy8nIGxpa2UgJ3ZpZGVvL21wNCcuCisgIGlmICh0b2tlbnMuZW1wdHkoKSB8fCB0b2tlbnNbMF0uZmluZCgnLycpID09IHRva2Vuc1swXS5ucG9zKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgICp0eXBlID0gdG9rZW5zWzBdOworICBjb2RlY3MtPmNsZWFyKCk7CisgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgdG9rZW5zLnNpemUoKTsgKytpKSB7CisgICAgaWYgKGJhc2U6OnN0cm5jYXNlY21wKHRva2Vuc1tpXS5jX3N0cigpLCBrQ29kZWNzLCBzdHJsZW4oa0NvZGVjcykpKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgKmNvZGVjcyA9IHRva2Vuc1tpXS5zdWJzdHIoc3RybGVuKGtDb2RlY3MpKTsKKyAgICBiYXNlOjpUcmltU3RyaW5nKCpjb2RlY3MsICIgXCIiLCBjb2RlY3MpOworICAgIGJyZWFrOworICB9CisgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIG5vdCBoYXZpbmcgYW55IGNvZGVjcywgYW5kIHdpbGwgbGVhdmUgdGhlIHZhbGlkYXRpb24gdG8KKyAgLy8gdW5kZXJseWluZyBwYXJzZXJzLgorICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCisKIH0gIC8vIG5hbWVzcGFjZQogCiBuYW1lc3BhY2UgbWVkaWEgewogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitDaHVua0RlbXV4ZXJTdHJlYW06OkNodW5rRGVtdXhlclN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLCBUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVRyYWNrOjpJZCBtZWRpYV90cmFja19pZCkKKyAgICA6IG1pbWVfdHlwZV8obWltZV90eXBlKSwKKyAgICAgIHR5cGVfKHR5cGUpLAorI2Vsc2UgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKIENodW5rRGVtdXhlclN0cmVhbTo6Q2h1bmtEZW11eGVyU3RyZWFtKFR5cGUgdHlwZSwgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWQpCiAgICAgOiB0eXBlXyh0eXBlKSwKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogICAgICAgbGl2ZW5lc3NfKERlbXV4ZXJTdHJlYW06OkxJVkVORVNTX1VOS05PV04pLAogICAgICAgbWVkaWFfdHJhY2tfaWRfKG1lZGlhX3RyYWNrX2lkKSwKICAgICAgIHN0YXRlXyhVTklOSVRJQUxJWkVEKSwKQEAgLTI1MSw3ICsyOTcsMTEgQEAKICAgYmFzZTo6QXV0b0xvY2sgYXV0b19sb2NrKGxvY2tfKTsKICAgaWYgKCFzdHJlYW1fKSB7CiAgICAgRENIRUNLX0VRKHN0YXRlXywgVU5JTklUSUFMSVpFRCk7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgc3RyZWFtXyA9IHN0ZDo6bWFrZV91bmlxdWU8U291cmNlQnVmZmVyU3RyZWFtPihtaW1lX3R5cGVfLCBjb25maWcsIG1lZGlhX2xvZyk7CisjZWxzZSAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogICAgIHN0cmVhbV8gPSBzdGQ6Om1ha2VfdW5pcXVlPFNvdXJjZUJ1ZmZlclN0cmVhbT4oY29uZmlnLCBtZWRpYV9sb2cpOworI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCiAgICAgcmV0dXJuIHRydWU7CiAgIH0KIApAQCAtMjY3LDcgKzMxNywxMSBAQAogCiAgIGlmICghc3RyZWFtXykgewogICAgIERDSEVDS19FUShzdGF0ZV8sIFVOSU5JVElBTElaRUQpOworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIHN0cmVhbV8gPSBzdGQ6Om1ha2VfdW5pcXVlPFNvdXJjZUJ1ZmZlclN0cmVhbT4obWltZV90eXBlXywgY29uZmlnLCBtZWRpYV9sb2cpOworI2Vsc2UgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKICAgICBzdHJlYW1fID0gc3RkOjptYWtlX3VuaXF1ZTxTb3VyY2VCdWZmZXJTdHJlYW0+KGNvbmZpZywgbWVkaWFfbG9nKTsKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogICAgIHJldHVybiB0cnVlOwogICB9CiAKQEAgLTcwOCw2ICs3NjIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0ZWRDb2RlY3MoY29udGVudF90eXBlLCBjb2RlY3MpKTsKIH0KIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorCitDaHVua0RlbXV4ZXI6OlN0YXR1cyBDaHVua0RlbXV4ZXI6OkFkZElkKGNvbnN0IHN0ZDo6c3RyaW5nJiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSkgeworICBzdGQ6OnN0cmluZyB0eXBlLCBjb2RlY3M7CisgIGlmICghUGFyc2VNaW1lVHlwZShtaW1lX3R5cGUsICZ0eXBlLCAmY29kZWNzKSkgeworICAgIHJldHVybiBrTm90U3VwcG9ydGVkOworICB9CisKKyAgRENIRUNLKGlkX3RvX21pbWVfbWFwXy5maW5kKGlkKSA9PSBpZF90b19taW1lX21hcF8uZW5kKCkpOworICBpZF90b19taW1lX21hcF9baWRdID0gbWltZV90eXBlOworICByZXR1cm4gQWRkSWQoaWQsIHR5cGUsIGNvZGVjcyk7Cit9CisKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQorCiBDaHVua0RlbXV4ZXI6OlN0YXR1cyBDaHVua0RlbXV4ZXI6OkFkZElkSW50ZXJuYWwoCiAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlkLAogICAgIHN0ZDo6dW5pcXVlX3B0cjxtZWRpYTo6U3RyZWFtUGFyc2VyPiBzdHJlYW1fcGFyc2VyLApAQCAtMTQ1MCw4ICsxNTIwLDE2IEBACiAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgfQogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIGF1dG8gaXRlciA9IGlkX3RvX21pbWVfbWFwXy5maW5kKHNvdXJjZV9pZCk7CisgIERDSEVDSyhpdGVyICE9IGlkX3RvX21pbWVfbWFwXy5lbmQoKSk7CisgIHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+IHN0cmVhbSA9CisgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENodW5rRGVtdXhlclN0cmVhbT4oaXRlci0+c2Vjb25kLCB0eXBlLCBtZWRpYV90cmFja19pZCk7CisjZWxzZSAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+IHN0cmVhbSA9CiAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPENodW5rRGVtdXhlclN0cmVhbT4odHlwZSwgbWVkaWFfdHJhY2tfaWQpOworI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCisKICAgRENIRUNLKHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfLmZpbmQobWVkaWFfdHJhY2tfaWQpID09CiAgICAgICAgICB0cmFja19pZF90b19kZW11eF9zdHJlYW1fbWFwXy5lbmQoKSk7CiAgIHRyYWNrX2lkX3RvX2RlbXV4X3N0cmVhbV9tYXBfW21lZGlhX3RyYWNrX2lkXSA9IHN0cmVhbS5nZXQoKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgKaW5kZXggZDJmYjRkMS4uZTU5ZmNmYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9jaHVua19kZW11eGVyLmgKQEAgLTQxLDcgKzQxLDExIEBACiAgcHVibGljOgogICB1c2luZyBCdWZmZXJRdWV1ZSA9IGJhc2U6OmNpcmN1bGFyX2RlcXVlPHNjb3BlZF9yZWZwdHI8U3RyZWFtUGFyc2VyQnVmZmVyPj47CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgQ2h1bmtEZW11eGVyU3RyZWFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsIFR5cGUgdHlwZSwgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWQpOworI2Vsc2UgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKICAgQ2h1bmtEZW11eGVyU3RyZWFtKFR5cGUgdHlwZSwgTWVkaWFUcmFjazo6SWQgbWVkaWFfdHJhY2tfaWQpOworI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCiAgIH5DaHVua0RlbXV4ZXJTdHJlYW0oKSBvdmVycmlkZTsKIAogICAvLyBDaHVua0RlbXV4ZXJTdHJlYW0gY29udHJvbCBtZXRob2RzLgpAQCAtMTIyLDYgKzEyNiwxMCBAQAogICB2b2lkIFVubWFya0VuZE9mU3RyZWFtKCk7CiAKICAgLy8gRGVtdXhlclN0cmVhbSBtZXRob2RzLgorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBzdGQ6OnN0cmluZyBtaW1lX3R5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtaW1lX3R5cGVfOyB9CisjZW5kaWYgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKKwogICB2b2lkIFJlYWQoUmVhZENCIHJlYWRfY2IpIG92ZXJyaWRlOwogICBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZTsKICAgTGl2ZW5lc3MgbGl2ZW5lc3MoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE3MCw2ICsxNzgsMTAgQEAKIAogICB2b2lkIENvbXBsZXRlUGVuZGluZ1JlYWRJZlBvc3NpYmxlX0xvY2tlZCgpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChsb2NrXyk7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgY29uc3Qgc3RkOjpzdHJpbmcgbWltZV90eXBlXzsKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQorCiAgIC8vIFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgc3RyZWFtLgogICBjb25zdCBUeXBlIHR5cGVfOwogCkBAIC0yNjMsNiArMjc1LDEyIEBACiAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9EZWNvZGVyQ29uZmlnPiB2aWRlb19jb25maWcpCiAgICAgICBXQVJOX1VOVVNFRF9SRVNVTFQ7CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gU3BlY2lhbCB2ZXJzaW9uIG9mIEFkZElkKCkgdGhhdCByZXRhaW5zIHRoZSB8bWltZV90eXBlfCBmcm9tIHRoZSB3ZWIgYXBwLgorICBTdGF0dXMgQWRkSWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkLCBjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlKQorICAgICAgV0FSTl9VTlVTRURfUkVTVUxUOworI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCisKICAgLy8gTm90aWZpZXMgYSBjYWxsZXIgdmlhIHx0cmFja3NfdXBkYXRlZF9jYnwgdGhhdCB0aGUgc2V0IG9mIG1lZGlhIHRyYWNrcwogICAvLyBmb3IgYSBnaXZlbiB8aWR8IGhhcyBjaGFuZ2VkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgc2V0IGJlZm9yZSBhbnkgY2FsbHMgdG8KICAgLy8gQXBwZW5kRGF0YSgpIGZvciB0aGlzIHxpZHwuCkBAIC01NTYsNiArNTc0LDEwIEBACiAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDaHVua0RlbXV4ZXJTdHJlYW0+PiByZW1vdmVkX3N0cmVhbXNfOwogCiAgIHN0ZDo6bWFwPE1lZGlhVHJhY2s6OklkLCBDaHVua0RlbXV4ZXJTdHJlYW0qPiB0cmFja19pZF90b19kZW11eF9zdHJlYW1fbWFwXzsKKworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IGlkX3RvX21pbWVfbWFwXzsKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIG1lZGlhCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9oMjY0X2JpdHN0cmVhbV9idWZmZXIuaAppbmRleCA3NzNkNThiLi43MGVkMWQ2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL2gyNjRfYml0c3RyZWFtX2J1ZmZlci5oCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvaDI2NF9iaXRzdHJlYW1fYnVmZmVyLmgKQEAgLTE3LDcgKzE3LDkgQEAKICNpbmNsdWRlICJiYXNlL21lbW9yeS9yZWZfY291bnRlZC5oIgogI2luY2x1ZGUgImJhc2UvbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9ucy5oIgogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfZXhwb3J0LmgiCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvdmlkZW9fZnJhbWUuaCIKKyNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKQogI2luY2x1ZGUgIm1lZGlhL3ZpZGVvL2gyNjRfcGFyc2VyLmgiCiAKIG5hbWVzcGFjZSBtZWRpYSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuY2MgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RhdGUuY2MKaW5kZXggNzQ4MTRjMy4uODk1MWJjOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0YXRlLmNjCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdGF0ZS5jYwpAQCAtOTE2LDYgKzkxNiw5IEBACiB9CiAKIHZvaWQgU291cmNlQnVmZmVyU3RhdGU6OlNldFN0cmVhbU1lbW9yeUxpbWl0cygpIHsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gQ29iYWx0IGRvZXNuJ3QgZ2V0IHN0cmVhbSBtZW1vcnkgbGltaXRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgc2l6ZV90IGF1ZGlvX2J1Zl9zaXplX2xpbWl0ID0KICAgICAgIEdldE1TRUJ1ZmZlclNpemVMaW1pdElmRXhpc3RzKHN3aXRjaGVzOjprTVNFQXVkaW9CdWZmZXJTaXplTGltaXRNYik7CiAgIGlmIChhdWRpb19idWZfc2l6ZV9saW1pdCkgewpAQCAtOTM1LDYgKzkzOCw3IEBACiAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IHZpZGVvX3N0cmVhbXNfKQogICAgICAgaXQuc2Vjb25kLT5TZXRTdHJlYW1NZW1vcnlMaW1pdCh2aWRlb19idWZfc2l6ZV9saW1pdCk7CiAgIH0KKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiB9CiAKIHZvaWQgU291cmNlQnVmZmVyU3RhdGU6Ok9uTmV3TWVkaWFTZWdtZW50KCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5jYyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uY2MKaW5kZXggNTA5ZTJkZi4uY2RkOGY0ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5jYworKysgYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSAibWVkaWEvYmFzZS9kZW11eGVyX21lbW9yeV9saW1pdC5oIgogI2luY2x1ZGUgIm1lZGlhL2Jhc2UvbWVkaWFfc3dpdGNoZXMuaCIKICNpbmNsdWRlICJtZWRpYS9iYXNlL3RpbWVzdGFtcF9jb25zdGFudHMuaCIKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyNpbmNsdWRlICJzdGFyYm9hcmQvbWVkaWEuaCIKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAKIG5hbWVzcGFjZSBtZWRpYSB7CiAKQEAgLTE1Niw5ICsxNTksMTcgQEAKIAogfSAgLy8gbmFtZXNwYWNlCiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKK1NvdXJjZUJ1ZmZlclN0cmVhbTo6U291cmNlQnVmZmVyU3RyZWFtKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTG9nKiBtZWRpYV9sb2cpCisgICAgOiBtaW1lX3R5cGVfKG1pbWVfdHlwZSksCisgICAgICBtZWRpYV9sb2dfKG1lZGlhX2xvZyksCisjZWxzZSAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogU291cmNlQnVmZmVyU3RyZWFtOjpTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3QgQXVkaW9EZWNvZGVyQ29uZmlnJiBhdWRpb19jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKQogICAgIDogbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAorI2VuZGlmICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCiAgICAgICBzZWVrX2J1ZmZlcl90aW1lc3RhbXBfKGtOb1RpbWVzdGFtcCksCiAgICAgICBjb2RlZF9mcmFtZV9ncm91cF9zdGFydF9wdHNfKGtOb1RpbWVzdGFtcCksCiAgICAgICByYW5nZV9mb3JfbmV4dF9hcHBlbmRfKHJhbmdlc18uZW5kKCkpLApAQCAtMTcxLDkgKzE4MiwxNyBAQAogICBEVkxPRygyKSA8PCBfX2Z1bmNfXyA8PCAiOiBhdWRpb19idWZmZXJfc2l6ZT0gIiA8PCBtZW1vcnlfbGltaXRfOwogfQogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitTb3VyY2VCdWZmZXJTdHJlYW06OlNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKQorICAgIDogbWltZV90eXBlXyhtaW1lX3R5cGUpLAorICAgICAgbWVkaWFfbG9nXyhtZWRpYV9sb2cpLAorI2Vsc2UgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKIFNvdXJjZUJ1ZmZlclN0cmVhbTo6U291cmNlQnVmZmVyU3RyZWFtKGNvbnN0IFZpZGVvRGVjb2RlckNvbmZpZyYgdmlkZW9fY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWFMb2cqIG1lZGlhX2xvZykKICAgICA6IG1lZGlhX2xvZ18obWVkaWFfbG9nKSwKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQogICAgICAgc2Vla19idWZmZXJfdGltZXN0YW1wXyhrTm9UaW1lc3RhbXApLAogICAgICAgY29kZWRfZnJhbWVfZ3JvdXBfc3RhcnRfcHRzXyhrTm9UaW1lc3RhbXApLAogICAgICAgcmFuZ2VfZm9yX25leHRfYXBwZW5kXyhyYW5nZXNfLmVuZCgpKSwKQEAgLTc4Miw4ICs4MDEsMTYgQEAKICAgLy8gd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4gaW4gZW5kLW9mLXN0cmVhbSBzdGF0ZS4gVW5sZXNzIHdlIGFsc28gYWxsb3cgR0MgdG8KICAgLy8gaGFwcGVuIG9uIG1lbW9yeSBwcmVzc3VyZSBub3RpZmljYXRpb25zLCB3aGljaCBtaWdodCBoYXBwZW4gZXZlbiBpbiBFT1MKICAgLy8gc3RhdGUuCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIC8vIFRPRE86IENoZWNrIGlmIHdlIHNob3VsZCBlbmFibGUgYGtFbmFibGVNZW1vcnlQcmVzc3VyZUJhc2VkU291cmNlQnVmZmVyR0NgLgorICBjb25zdGV4cHIgYm9vbCBrRW5hYmxlTWVtb3J5UHJlc3N1cmVCYXNlZFNvdXJjZUJ1ZmZlckdDID0gdHJ1ZTsKKyAgaWYgKCFrRW5hYmxlTWVtb3J5UHJlc3N1cmVCYXNlZFNvdXJjZUJ1ZmZlckdDKSB7CisgICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtXyk7CisgIH0KKyNlbHNlIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICBpZiAoIWJhc2U6OkZlYXR1cmVMaXN0OjpJc0VuYWJsZWQoa01lbW9yeVByZXNzdXJlQmFzZWRTb3VyY2VCdWZmZXJHQykpCiAgICAgRENIRUNLKCFlbmRfb2Zfc3RyZWFtXyk7CisjZW5kaWYgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIC8vIENvbXB1dGUgc2l6ZSBvZiB8cmFuZ2VzX3wuCiAgIHNpemVfdCByYW5nZXNfc2l6ZSA9IEdldEJ1ZmZlcmVkU2l6ZSgpOwogCkBAIC04MDAsNyArODI3LDExIEBACiAgIH0KIAogICBzaXplX3QgZWZmZWN0aXZlX21lbW9yeV9saW1pdCA9IG1lbW9yeV9saW1pdF87CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIGlmIChrRW5hYmxlTWVtb3J5UHJlc3N1cmVCYXNlZFNvdXJjZUJ1ZmZlckdDKSB7CisjZWxzZSAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgaWYgKGJhc2U6OkZlYXR1cmVMaXN0OjpJc0VuYWJsZWQoa01lbW9yeVByZXNzdXJlQmFzZWRTb3VyY2VCdWZmZXJHQykpIHsKKyNlbmRpZiAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICBzd2l0Y2ggKG1lbW9yeV9wcmVzc3VyZV9sZXZlbF8pIHsKICAgICAgIGNhc2UgYmFzZTo6TWVtb3J5UHJlc3N1cmVMaXN0ZW5lcjo6TUVNT1JZX1BSRVNTVVJFX0xFVkVMX01PREVSQVRFOgogICAgICAgICBlZmZlY3RpdmVfbWVtb3J5X2xpbWl0ID0gbWVtb3J5X2xpbWl0XyAvIDI7CkBAIC04MTMsNiArODQ0LDE3IEBACiAgICAgfQogICB9CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gQWRkcmVzcyBkdXJhdGlvbiBiYXNlZCBHQy4KKyAgYmFzZTo6VGltZURlbHRhIGR1cmF0aW9uID0gR2V0QnVmZmVyZWREdXJhdGlvbkZvckdhcmJhZ2VDb2xsZWN0aW9uKCk7CisgIGNvbnN0IFNiVGltZSBkdXJhdGlvbl9nY190aHJlYWRvbGQgPQorICAgICAgU2JNZWRpYUdldEJ1ZmZlckdhcmJhZ2VDb2xsZWN0aW9uRHVyYXRpb25UaHJlc2hvbGQoKTsKKyAgaWYgKGR1cmF0aW9uLlRvU2JUaW1lKCkgPiBkdXJhdGlvbl9nY190aHJlYWRvbGQpIHsKKyAgICBlZmZlY3RpdmVfbWVtb3J5X2xpbWl0ID0gcmFuZ2VzX3NpemUgKiBkdXJhdGlvbl9nY190aHJlYWRvbGQgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbi5Ub1NiVGltZSgpOworICB9CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQorCiAgIC8vIFJldHVybiBpZiB3ZSdyZSB1bmRlciBvciBhdCB0aGUgbWVtb3J5IGxpbWl0LgogICBpZiAocmFuZ2VzX3NpemUgKyBuZXdEYXRhU2l6ZSA8PSBlZmZlY3RpdmVfbWVtb3J5X2xpbWl0KQogICAgIHJldHVybiB0cnVlOwpAQCAtMTg1NCw2ICsxODk2LDE0IEBACiAgIERWTE9HKDIpIDw8ICJOZXcgdmlkZW8gY29uZmlnIC0gaW5kZXg6ICIgPDwgYXBwZW5kX2NvbmZpZ19pbmRleF87CiAgIHZpZGVvX2NvbmZpZ3NfLnJlc2l6ZSh2aWRlb19jb25maWdzXy5zaXplKCkgKyAxKTsKICAgdmlkZW9fY29uZmlnc19bYXBwZW5kX2NvbmZpZ19pbmRleF9dID0gY29uZmlnOworCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgIC8vIER5bmFtaWNhbGx5IGluY3JlYXNlIHxtZW1vcnlfbGltaXRffCB3aGVuIHZpZGVvIHJlc29sdXRpb24gZ29lcyB1cC4KKyAgbWVtb3J5X2xpbWl0XyA9IHN0ZDo6bWF4KAorICAgICAgbWVtb3J5X2xpbWl0XywKKyAgICAgIEdldERlbXV4ZXJTdHJlYW1WaWRlb01lbW9yeUxpbWl0KERlbXV4ZXI6OkRlbXV4ZXJUeXBlczo6a0NodW5rRGVtdXhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWcpKTsKKyNlbmRpZiAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDIwLDQgKzIwNzAsMTcgQEAKICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKworYmFzZTo6VGltZURlbHRhIFNvdXJjZUJ1ZmZlclN0cmVhbTo6R2V0QnVmZmVyZWREdXJhdGlvbkZvckdhcmJhZ2VDb2xsZWN0aW9uKCkKKyAgICBjb25zdCB7CisgIGJhc2U6OlRpbWVEZWx0YSBkdXJhdGlvbjsKKyAgZm9yIChhdXRvJiYgcmFuZ2UgOiByYW5nZXNfKSB7CisgICAgZHVyYXRpb24gKz0gcmFuZ2UtPkdldEVuZFRpbWVzdGFtcCgpIC0gcmFuZ2UtPkdldFN0YXJ0VGltZXN0YW1wKCk7CisgIH0KKyAgcmV0dXJuIGR1cmF0aW9uOworfQorCisjZW5kaWYgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKKwogfSAgLy8gbmFtZXNwYWNlIG1lZGlhCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmggYi90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9maWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgKaW5kZXggMWM2ZDI0NS4uMzU2ZGI0NSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5oCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uaApAQCAtNjEsMTAgKzYxLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSogc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U6OlRpbWVEZWx0YSogZW5kKTsKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1ZGlvRGVjb2RlckNvbmZpZyYgYXVkaW9fY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgTWVkaWFMb2cqIG1lZGlhX2xvZyk7CisgIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBzdGQ6OnN0cmluZyYgbWltZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcsCisgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKTsKKyNlbHNlICAvLyBkZWZpbmVkIChTVEFSQk9BUkQpCiAgIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBBdWRpb0RlY29kZXJDb25maWcmIGF1ZGlvX2NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTG9nKiBtZWRpYV9sb2cpOwogICBTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3QgVmlkZW9EZWNvZGVyQ29uZmlnJiB2aWRlb19jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICBNZWRpYUxvZyogbWVkaWFfbG9nKTsKKyNlbmRpZiAgLy8gZGVmaW5lZCAoU1RBUkJPQVJEKQorCiAgIFNvdXJjZUJ1ZmZlclN0cmVhbShjb25zdCBUZXh0VHJhY2tDb25maWcmIHRleHRfY29uZmlnLCBNZWRpYUxvZyogbWVkaWFfbG9nKTsKIAogICBTb3VyY2VCdWZmZXJTdHJlYW0oY29uc3QgU291cmNlQnVmZmVyU3RyZWFtJikgPSBkZWxldGU7CkBAIC0zODksNiArMzk5LDE0IEBACiAgIC8vIHJldHVybnMgdHJ1ZS4gIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLgogICBib29sIFNldFBlbmRpbmdCdWZmZXIoc2NvcGVkX3JlZnB0cjxTdHJlYW1QYXJzZXJCdWZmZXI+KiBvdXRfYnVmZmVyKTsKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAvLyBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCBkdXJhdGlvbiBvZiBhbGwgcmFuZ2VzLiAgVGhpcyBpcyBzb2xlbHkgdXNlZCBieQorICAvLyBkdXJhdGlvbiBiYXNlIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgYmFzZTo6VGltZURlbHRhIEdldEJ1ZmZlcmVkRHVyYXRpb25Gb3JHYXJiYWdlQ29sbGVjdGlvbigpIGNvbnN0OworCisgIGNvbnN0IHN0ZDo6c3RyaW5nIG1pbWVfdHlwZV87CisjZW5kaWYgIC8vIGRlZmluZWQgKFNUQVJCT0FSRCkKKwogICAvLyBVc2VkIHRvIHJlcG9ydCBsb2cgbWVzc2FnZXMgdGhhdCBjYW4gaGVscCB0aGUgd2ViIGRldmVsb3BlciBmaWd1cmUgb3V0IHdoYXQKICAgLy8gaXMgd3Jvbmcgd2l0aCB0aGUgY29udGVudC4KICAgTWVkaWFMb2cqIG1lZGlhX2xvZ187CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuaAppbmRleCAxZjJmZmNiLi42ZWNjZWQxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgKQEAgLTMzLDYgKzMzLDE2IEBACiAKICAgLy8gTnVtYmVycyBjaG9zZW4gdG8gZXN0aW1hdGUgdGhlIGR1cmF0aW9uIG9mIGEgYnVmZmVyIGlmIG5vbmUgaXMgc2V0IGFuZAogICAvLyB0aGVyZSBpcyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGdldCBhIGJldHRlciBlc3RpbWF0ZS4KKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgLy8gT3VyIHZlcnNpb24gb2YgYmFzZTo6Q2xhbXBlZE51bWVyaWMoKSBkb2Vzbid0IHN1cHBvcnQgZW51bSBhcyB1bmRlcmx5aW5nCisgIC8vIHR5cGUuCisKKyAgLy8gQ29tbW9uIDFrIHNhbXBsZXMgQDQ0LjFrSHoKKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQga0RlZmF1bHRBdWRpb0J1ZmZlckR1cmF0aW9uSW5NcyA9IDIzOworICAvLyBDaG9zZW4gdG8gcmVwcmVzZW50IDE2ZnBzIGR1cmF0aW9uLCB3aGljaCB3aWxsIHByZXZlbnQgTVNFIHN0YWxscyBpbiB2aWRlb3MKKyAgLy8gd2l0aCBmcmFtZS1yYXRlcyBhcyBsb3cgYXMgOGZwcy4KKyAgc3RhdGljIGNvbnN0ZXhwciBpbnQga0RlZmF1bHRWaWRlb0J1ZmZlckR1cmF0aW9uSW5NcyA9IDYzOworI2Vsc2UgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAgIGVudW0gewogICAgIC8vIENvbW1vbiAxayBzYW1wbGVzIEA0NC4xa0h6CiAgICAga0RlZmF1bHRBdWRpb0J1ZmZlckR1cmF0aW9uSW5NcyA9IDIzLApAQCAtNDEsNiArNTEsNyBAQAogICAgIC8vIHZpZGVvcyB3aXRoIGZyYW1lLXJhdGVzIGFzIGxvdyBhcyA4ZnBzLgogICAgIGtEZWZhdWx0VmlkZW9CdWZmZXJEdXJhdGlvbkluTXMgPSA2MwogICB9OworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKIAogICAvLyBPcHVzIHBhY2tldHMgZW5jb2RlIHRoZSBkdXJhdGlvbiBhbmQgb3RoZXIgcGFyYW1ldGVycyBpbiB0aGUgNSBtb3N0CiAgIC8vIHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGZpcnN0IGJ5dGUuIFRoZSBpbmRleCBpbiB0aGlzIGFycmF5IGNvcnJlc3BvbmRzCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZm9ybWF0cy93ZWJtL3dlYm1fY29sb3VyX3BhcnNlci5jYwppbmRleCBlZTI4YjI3Li4yNDZlOTU5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb2xvdXJfcGFyc2VyLmNjCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2Zvcm1hdHMvd2VibS93ZWJtX2NvbG91cl9wYXJzZXIuY2MKQEAgLTcsNyArNywyNyBAQAogI2luY2x1ZGUgImJhc2UvY2hlY2suaCIKICNpbmNsdWRlICJiYXNlL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJtZWRpYS9mb3JtYXRzL3dlYm0vd2VibV9jb25zdGFudHMuaCIKKworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorCisvLyBUYWtlbiBmcm9tIG1rdm11eGVyLmggYXMgaXMgdG8gYXZvaWQgaW50cm9kdWNpbmcgdGhlIHdob2xlIGxpYndlYm0gbGlicmFyeS4KK25hbWVzcGFjZSBta3ZtdXhlciB7CisKK2NsYXNzIENvbG91ciB7CisgcHVibGljOgorICBlbnVtIFJhbmdlIHsKKyAgICBrVW5zcGVjaWZpZWRDciA9IDAsCisgICAga0Jyb2FkY2FzdFJhbmdlID0gMSwKKyAgICBrRnVsbFJhbmdlID0gMiwKKyAgICBrTWNUY0RlZmluZWQgPSAzLCAgLy8gRGVmaW5lZCBieSBNYXRyaXhDb2VmZmljaWVudHMvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuCisgIH07Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbWt2bXV4ZXIKKworI2Vsc2UgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbGlid2VibS9zb3VyY2UvbWt2bXV4ZXIvbWt2bXV4ZXIuaCIKKyNlbmRpZiAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKIAogbmFtZXNwYWNlIG1lZGlhIHsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvZ3B1L2J1aWxkZmxhZ3MuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2dwdS9idWlsZGZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzYmRkOAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL2dwdS9idWlsZGZsYWdzLmgKQEAgLTAsMCArMSwxOSBAQAorLy8gTW9kaWZpZWQgYmFzZWQgb24gdGhlIGZpbGUgZ2VuZXJhdGVkIGJ5IGJ1aWxkL3dyaXRlX2J1aWxkZmxhZ19oZWFkZXIucHkgZnJvbQorLy8gIi8vbWVkaWEvZ3B1OmJ1aWxkZmxhZ3MiCisKKyNpZm5kZWYgTUVESUFfR1BVX0JVSUxERkxBR1NfSF8KKyNkZWZpbmUgTUVESUFfR1BVX0JVSUxERkxBR1NfSF8KKworI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKKyNlcnJvciAiVGhpcyBmaWxlIG9ubHkgd29ya3Mgd2l0aCBDb2JhbHQvU3RhcmJvYXJkLiIKKyNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKQorCisjaW5jbHVkZSAiYnVpbGQvYnVpbGRmbGFnLmgiCisKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX1VTRV9WQUFQSSgpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfVVNFX1ZBQVBJX0lNQUdFX0NPREVDUygpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfVVNFX1Y0TDJfQ09ERUMoKSAoMCkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX1VTRV9MSUJWNEwyKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9VU0VfVkFBUElfWDExKCkgKDApCisKKyNlbmRpZiAgLy8gTUVESUFfR1BVX0JVSUxERkxBR1NfSF8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL21lZGlhX2J1aWxkZmxhZ3MuaCBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL21lZGlhX2J1aWxkZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBiZDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvY2hyb21pdW0vbWVkaWEvbWVkaWFfYnVpbGRmbGFncy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8vIE1vZGlmaWVkIGJhc2VkIG9uIHRoZSBmaWxlIGdlbmVyYXRlZCBieSBidWlsZC93cml0ZV9idWlsZGZsYWdfaGVhZGVyLnB5IGZyb20KKy8vICIvL21lZGlhOm1lZGlhX2J1aWxkZmxhZ3MiCisKKyNpZm5kZWYgTUVESUFfTUVESUFfQlVJTERGTEFHU19IXworI2RlZmluZSBNRURJQV9NRURJQV9CVUlMREZMQUdTX0hfCisKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCisjZXJyb3IgIlRoaXMgZmlsZSBvbmx5IHdvcmtzIHdpdGggQ29iYWx0L1N0YXJib2FyZC4iCisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKKworI2luY2x1ZGUgImJ1aWxkL2J1aWxkZmxhZy5oIgorCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9BTFRFUk5BVEVfQ0RNX1NUT1JBR0VfSURfS0VZKCkgKCIiKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfQ0RNX1BMQVRGT1JNX1NQRUNJRklDX1BBVEgoKSAoIl9wbGF0Zm9ybV9zcGVjaWZpYy9saW51eF94NjQiKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX1BMQVRGT1JNX0FDM19FQUMzX0FVRElPKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfQ0FTVF9BVURJT19SRU5ERVJFUigpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX0NETV9IT1NUX1ZFUklGSUNBVElPTigpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX0NETV9TVE9SQUdFX0lEKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfREFWMURfREVDT0RFUigpICgxKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX0FWMV9ERUNPREVSKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfUExBVEZPUk1fRE9MQllfVklTSU9OKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfRkZNUEVHKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfRkZNUEVHX1ZJREVPX0RFQ09ERVJTKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfUExBVEZPUk1fSEVWQygpICgxKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX1BMQVRGT1JNX0hFVkNfREVDT0RJTkcoKSAoMCkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9QTEFURk9STV9FTkNSWVBURURfSEVWQygpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX0hMU19TQU1QTEVfQUVTKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfSExTX0RFTVVYRVIoKSAoMSkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9MSUJHQVYxX0RFQ09ERVIoKSAoMCkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9MSUJSQVJZX0NETVMoKSAoMSkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9MSUJBT00oKSAoMSkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9MSUJWUFgoKSAoMSkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9MT0dHSU5HX09WRVJSSURFKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfTUVESUFfRFJNX1NUT1JBR0UoKSAoMCkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX0VOQUJMRV9NRURJQV9SRU1PVElORygpICgxKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX01FRElBX1JFTU9USU5HX1JQQygpICgxKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX09QRU5IMjY0KCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfUExBVEZPUk1fTVBFR19IX0FVRElPKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfTVNFX01QRUcyVFNfU1RSRUFNX1BBUlNFUigpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfRU5BQkxFX0NBU1RfU1RSRUFNSU5HX1JFTkRFUkVSKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9VU0VfQVJDX1BST1RFQ1RFRF9NRURJQSgpICgwKQorI2RlZmluZSBCVUlMREZMQUdfSU5URVJOQUxfVVNFX0NIUk9NRU9TX01FRElBX0FDQ0VMRVJBVElPTigpICh0cnVlfHxmYWxzZSkKKyNkZWZpbmUgQlVJTERGTEFHX0lOVEVSTkFMX1VTRV9DSFJPTUVPU19QUk9URUNURURfQVYxKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9VU0VfQ0hST01FT1NfUFJPVEVDVEVEX01FRElBKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9VU0VfUFJPUFJJRVRBUllfQ09ERUNTKCkgKDEpCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9FTkFCTEVfUExBVEZPUk1fRFRTX0FVRElPKCkgKDApCisjZGVmaW5lIEJVSUxERkxBR19JTlRFUk5BTF9JU19DSFJPTUVPU19BU0goKSAoMCkKKworI2VuZGlmICAvLyBNRURJQV9NRURJQV9CVUlMREZMQUdTX0hfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jaHJvbWl1bS9tZWRpYS92aWRlby9oMjY1X3BhcnNlci5jYyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL3ZpZGVvL2gyNjVfcGFyc2VyLmNjCmluZGV4IDBiY2FhODMuLjQwNDUyZWIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL3ZpZGVvL2gyNjVfcGFyc2VyLmNjCisrKyBiL3RoaXJkX3BhcnR5L2Nocm9taXVtL21lZGlhL3ZpZGVvL2gyNjVfcGFyc2VyLmNjCkBAIC00OCw5ICs0OCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXRyaXhfaWQpIHsKICAgaWYgKHNpemVfaWQgPT0gMCkgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIC8vIExvb3Bpbmcgb24gYW4gZW51bSAoaS5lLiBrU2NhbGluZ0xpc3RTaXplSWQwQ291bnQpIGlzbid0IHN1cHBvcnRlZCBvbgorICAgIC8vIGFsbCBwbGF0Zm9ybXMuCisgICAgc3RkOjpmaWxsX24oc2NhbGluZ19saXN0X2RhdGEtPnNjYWxpbmdfbGlzdF80eDRbbWF0cml4X2lkXSwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KEgyNjVTY2FsaW5nTGlzdERhdGE6OmtTY2FsaW5nTGlzdFNpemVJZDBDb3VudCksCisgICAgICAgICAgICAgICAgSDI2NVNjYWxpbmdMaXN0RGF0YTo6a0RlZmF1bHRTY2FsaW5nTGlzdFNpemUwVmFsdWVzKTsKKyNlbHNlICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICBzdGQ6OmZpbGxfbihzY2FsaW5nX2xpc3RfZGF0YS0+c2NhbGluZ19saXN0XzR4NFttYXRyaXhfaWRdLAogICAgICAgICAgICAgICAgIEgyNjVTY2FsaW5nTGlzdERhdGE6OmtTY2FsaW5nTGlzdFNpemVJZDBDb3VudCwKICAgICAgICAgICAgICAgICBIMjY1U2NhbGluZ0xpc3REYXRhOjprRGVmYXVsdFNjYWxpbmdMaXN0U2l6ZTBWYWx1ZXMpOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICByZXR1cm47CiAgIH0KIApAQCAtMTM0NSw3ICsxMzUzLDE0IEBACiAgICAgYm9vbCB1c2VkX2J5X2N1cnJfcGljX2ZsYWdba01heFNob3J0VGVybVJlZlBpY1NldHNdOwogICAgIGJvb2wgdXNlX2RlbHRhX2ZsYWdba01heFNob3J0VGVybVJlZlBpY1NldHNdOwogICAgIC8vIDcuNC44IC0gdXNlX2RlbHRhX2ZsYWcgZGVmYXVsdHMgdG8gMSBpZiBub3QgcHJlc2VudC4KKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgICAvLyBMb29waW5nIG9uIGFuIGVudW0gKGkuZS4ga01heFNob3J0VGVybVJlZlBpY1NldHMpIGlzbid0IHN1cHBvcnRlZCBvbiBhbGwKKyAgICAvLyBwbGF0Zm9ybXMuCisgICAgc3RkOjpmaWxsX24odXNlX2RlbHRhX2ZsYWcsIHN0YXRpY19jYXN0PGludD4oa01heFNob3J0VGVybVJlZlBpY1NldHMpLAorICAgICAgICAgICAgICAgIHRydWUpOworI2Vsc2UgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogICAgIHN0ZDo6ZmlsbF9uKHVzZV9kZWx0YV9mbGFnLCBrTWF4U2hvcnRUZXJtUmVmUGljU2V0cywgdHJ1ZSk7CisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogCiAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gcmVmX3NldC5udW1fZGVsdGFfcG9jczsgaisrKSB7CiAgICAgICBSRUFEX0JPT0xfT1JfUkVUVVJOKCZ1c2VkX2J5X2N1cnJfcGljX2ZsYWdbal0pOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvYnVpbGQvY3Jhc2hwYWQuZ3lwaSBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL2J1aWxkL2NyYXNocGFkLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhY2M4N2EuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvYnVpbGQvY3Jhc2hwYWQuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAjIFdoZW4gYnVpbGRpbmcgYXMgYSBwYXJ0IG9mIENocm9taXVtLCB0aGlzIHZhcmlhYmxlIHNldHMgdXAgdGhlIGJ1aWxkIHRvCi0gICAgIyB0cmVhdCBDcmFzaHBhZCBhcyBDaHJvbWl1bSBjb2RlLiBUaGlzIGVuYWJsZXMgd2FybmluZ3MgYXQgYW4gYXBwcm9wcmlhdGUKLSAgICAjIGxldmVsIGFuZCBhcHBsaWVzIENocm9taXVt4oCZcyBidWlsZC9maWxlbmFtZV9ydWxlcy5neXBpLiBJbiBhIHN0YW5kYWxvbmUKLSAgICAjIGJ1aWxkLCB0aGlzIHZhcmlhYmxlIGhhcyBubyBlZmZlY3QuCi0gICAgJ2NyYXNocGFkX2NvZGUnOiAxLAotICB9LAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgNDIwMSwgICMgbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOiBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24uCi0gICAgICA0MzI0LCAgIyBzdHJ1Y3R1cmUgd2FzIHBhZGRlZCBkdWUgdG8gX19kZWNsc3BlYyhhbGlnbigpKS4KLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWyd0YXJnZXRfb3M9PSJsaW51eCIgb3IgdGFyZ2V0X29zPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLVduby1tdWx0aWNoYXInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAnLXN0YXRpYy1saWJzdGRjKysnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL2J1aWxkL2NyYXNocGFkX2RlcGVuZGVuY2llcy5neXBpIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvYnVpbGQvY3Jhc2hwYWRfZGVwZW5kZW5jaWVzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDRhYmQuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvYnVpbGQvY3Jhc2hwYWRfZGVwZW5kZW5jaWVzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDcmFzaHBhZCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICMgQ3Jhc2hwYWTigJlzIEdZUCBidWlsZCBjYW4gb2J0YWluIGRlcGVuZGVuY2llcyBpbiB0d28gZGlmZmVyZW50IHdheXMsIGRpcmVjdGVkCi0gICMgYnkgdGhlIGNyYXNocGFkX3N0YW5kYWxvbmUgR1lQIHZhcmlhYmxlLiBJdCBtYXkgaGF2ZSB0aGVzZSB2YWx1ZXM6Ci0gICMgICBzdGFuZGFsb25lCi0gICMgICAgIEEg4oCcc3RhbmRhbG9uZeKAncKgQ3Jhc2hwYWQgYnVpbGQsIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGluIHRoZQotICAjICAgICBDcmFzaHBhZCB0cmVlLiB0aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtIGFuZCB0aGlyZF9wYXJ0eS9ndGVzdCBwcm92aWRlCi0gICMgICAgIHRoZSBiYXNlIGFuZCBndGVzdCBsaWJyYXJpZXMuCi0gICMgICBleHRlcm5hbAotICAjICAgICBBIGJ1aWxkIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBtaW5pX2Nocm9taXVtIHByb3ZpZGVzIHRoZSBiYXNlCi0gICMgICAgIGxpYnJhcnksIGJ1dCBpdOKAmXMgbG9jYXRlZCBvdXRzaWRlIG9mIHRoZSBDcmFzaHBhZCB0cmVlLCBhcyBpcyBndGVzdC4KLSAgIwotICAjIEluIG9yZGVyIGZvciBDcmFzaHBhZOKAmXMgLmd5cCBmaWxlcyB0byByZWZlcmVuY2UgdGhlIGNvcnJlY3QgdmVyc2lvbnMKLSAgIyBkZXBlbmRpbmcgb24gaG93IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgcHJvdmlkZWQsIGluY2x1ZGUgdGhpcyAuZ3lwaSBmaWxlCi0gICMgYW5kIHJlZmVyZW5jZSB0aGUgY3Jhc2hwYWRfZGVwZW5kZW5jaWVzIHZhcmlhYmxlLgotICAjCi0gICMgTm90ZSB0aGF0IENyYXNocGFk4oCZcyBpbi1DaHJvbWl1bSBidWlsZCB1c2VzIEdOIGluc3RlYWQgb2YgR1lQLCBhbmQKLSAgIyBDaHJvbWl1beKAmXMgR04gYnVpbGQgY29uZmlndXJlcyBDcmFzaHBhZCB0byB1c2UgQ2hyb21pdW3igJlzIG93biBiYXNlIGxpYnJhcnkKLSAgIyBhbmQgaXRzIGNvcHkgb2YgdGhlIGd0ZXN0IGxpYnJhcnkuCi0KLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY3Jhc2hwYWRfZGVwZW5kZW5jaWVzJSc6ICdleHRlcm5hbCcsCi0gIH0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jbGllbnQvY2xpZW50Lmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL2NsaWVudC9jbGllbnQuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGYzMGZiLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL2NsaWVudC9jbGllbnQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX2NsaWVudCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9sc3MvbHNzLmd5cDpsc3MnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAjIFdlIGNoYW5nZSBpbmNsdWRpbmcgdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkgaGVyZSB0byBhIGlzeXN0ZW0gaW5jbHVkZQotICAgICAgIyB0byBlbnN1cmUgaXQgaXMgaW5jbHVkZWQgYWZ0ZXIgYWxsIG5vcm1hbCBpbmNsdWRlcyBmb3IgQ3Jhc2hwYWQuIFRoaXMKLSAgICAgICMgZ3VhcmFudGVlcyB0aGF0IENyYXNocGFkIHdpbGwgZmluZCBtaW5pX2Nocm9taXVtJ3MgYmFzZSBiZWZvcmUgQ29iYWx0J3MKLSAgICAgICMgYmFzZS4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZGlyZWN0IGRlcGVuZGVudHMuCi0gICAgICAnaW5jbHVkZV9kaXJzISc6IFsKLSAgICAgICAgJzwoREVQVEgpJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICctaXN5c3RlbS4uLy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Fubm90YXRpb24uY2MnLAotICAgICAgICAnYW5ub3RhdGlvbi5oJywKLSAgICAgICAgJ2Fubm90YXRpb25fbGlzdC5jYycsCi0gICAgICAgICdhbm5vdGF0aW9uX2xpc3QuaCcsCi0gICAgICAgICdjcmFzaF9yZXBvcnRfZGF0YWJhc2UuY2MnLAotICAgICAgICAnY3Jhc2hfcmVwb3J0X2RhdGFiYXNlLmgnLAotICAgICAgICAnY3Jhc2hfcmVwb3J0X2RhdGFiYXNlX21hYy5tbScsCi0gICAgICAgICdjcmFzaF9yZXBvcnRfZGF0YWJhc2Vfd2luLmNjJywKLSAgICAgICAgJ2NyYXNocGFkX2NsaWVudC5oJywKLSAgICAgICAgJ2NyYXNocGFkX2NsaWVudF9saW51eC5jYycsCi0gICAgICAgICdjcmFzaHBhZF9jbGllbnRfbWFjLmNjJywKLSAgICAgICAgJ2NyYXNocGFkX2NsaWVudF93aW4uY2MnLAotICAgICAgICAnY3Jhc2hwYWRfaW5mby5jYycsCi0gICAgICAgICdjcmFzaHBhZF9pbmZvLmgnLAotICAgICAgICAncHJ1bmVfY3Jhc2hfcmVwb3J0cy5jYycsCi0gICAgICAgICdwcnVuZV9jcmFzaF9yZXBvcnRzLmgnLAotICAgICAgICAnc2V0dGluZ3MuY2MnLAotICAgICAgICAnc2V0dGluZ3MuaCcsCi0gICAgICAgICdzaW1wbGVfc3RyaW5nX2RpY3Rpb25hcnkuaCcsCi0gICAgICAgICdzaW1wbGVfYWRkcmVzc19yYW5nZV9iYWcuaCcsCi0gICAgICAgICdzaW11bGF0ZV9jcmFzaC5oJywKLSAgICAgICAgJ3NpbXVsYXRlX2NyYXNoX2xpbnV4LmgnLAotICAgICAgICAnc2ltdWxhdGVfY3Jhc2hfbWFjLmNjJywKLSAgICAgICAgJ3NpbXVsYXRlX2NyYXNoX21hYy5oJywKLSAgICAgICAgJ3NpbXVsYXRlX2NyYXNoX3dpbi5oJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxycGNydDQubGliJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X29zPT0ibGludXgiIG9yIHRhcmdldF9vcz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2NsaWVudF9hcmd2X2hhbmRsaW5nLmNjJywKLSAgICAgICAgICAgICdjbGllbnRfYXJndl9oYW5kbGluZy5oJywKLSAgICAgICAgICAgICdjcmFzaHBhZF9pbmZvX25vdGUuUycsCi0gICAgICAgICAgICAnY3Jhc2hfcmVwb3J0X2RhdGFiYXNlX2dlbmVyaWMuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdeY3Jhc2hwYWRfY2xpZW50X2xpbnV4XFwuY2MkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAnXnNpbXVsYXRlX2NyYXNoX2xpbnV4XFwuaCQnXSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyEnOiBbCi0gICAgICAgICAgJzwoREVQVEgpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnLi4nLAotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLWlzeXN0ZW0uLi8uLicsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jbGllbnQvY2xpZW50X3Rlc3QuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY2xpZW50L2NsaWVudF90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4NmNjNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jbGllbnQvY2xpZW50X3Rlc3QuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfY2xpZW50X3Rlc3QnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL2hhbmRsZXIvaGFuZGxlci5neXA6Y3Jhc2hwYWRfaGFuZGxlcicsCi0gICAgICAgICcuLi9zbmFwc2hvdC9zbmFwc2hvdC5neXA6Y3Jhc2hwYWRfc25hcHNob3QnLAotICAgICAgICAnLi4vdGVzdC90ZXN0Lmd5cDpjcmFzaHBhZF9nbW9ja19tYWluJywKLSAgICAgICAgJy4uL3Rlc3QvdGVzdC5neXA6Y3Jhc2hwYWRfdGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9ndGVzdC9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvZ3Rlc3QvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbm5vdGF0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnYW5ub3RhdGlvbl9saXN0X3Rlc3QuY2MnLAotICAgICAgICAnY3Jhc2hfcmVwb3J0X2RhdGFiYXNlX3Rlc3QuY2MnLAotICAgICAgICAnY3Jhc2hwYWRfY2xpZW50X3dpbl90ZXN0LmNjJywKLSAgICAgICAgJ2NyYXNocGFkX2NsaWVudF9saW51eF90ZXN0LmNjJywKLSAgICAgICAgJ3BydW5lX2NyYXNoX3JlcG9ydHNfdGVzdC5jYycsCi0gICAgICAgICdzZXR0aW5nc190ZXN0LmNjJywKLSAgICAgICAgJ3NpbXBsZV9hZGRyZXNzX3JhbmdlX2JhZ190ZXN0LmNjJywKLSAgICAgICAgJ3NpbXBsZV9zdHJpbmdfZGljdGlvbmFyeV90ZXN0LmNjJywKLSAgICAgICAgJ3NpbXVsYXRlX2NyYXNoX21hY190ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9oYW5kbGVyL2hhbmRsZXIuZ3lwOmNyYXNocGFkX2hhbmRsZXJfY29uc29sZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15jcmFzaHBhZF9jbGllbnRfbGludXhfdGVzdFxcLmNjJCddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY2xpZW50L2NyYXNocGFkX2NsaWVudF9saW51eC5jYyBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL2NsaWVudC9jcmFzaHBhZF9jbGllbnRfbGludXguY2MKaW5kZXggNTcwYmUyZS4uNTczODY2OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY2xpZW50L2NyYXNocGFkX2NsaWVudF9saW51eC5jYworKysgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jbGllbnQvY3Jhc2hwYWRfY2xpZW50X2xpbnV4LmNjCkBAIC00Miw2ICs0MiwxMyBAQAogCiBuYW1lc3BhY2UgewogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitjb25zdGV4cHIgY2hhciBrRXZlcmdyZWVuSW5mb0tleVtdID0gImV2ZXJncmVlbi1pbmZvcm1hdGlvbiI7Citjb25zdGV4cHIgY2hhciBrUHJvZHVjdEtleVtdID0gImFubm90YXRpb249cHJvZCI7Citjb25zdGV4cHIgY2hhciBrVmVyc2lvbktleVtdID0gImFubm90YXRpb249dmVyIjsKK2NvbnN0ZXhwciBjaGFyIGtVQUtleVtdID0gImFubm90YXRpb249dXNlcl9hZ2VudF9zdHJpbmciOworI2VuZGlmCisKIHN0ZDo6c3RyaW5nIEZvcm1hdEFyZ3VtZW50SW50KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCBpbnQgdmFsdWUpIHsKICAgcmV0dXJuIGJhc2U6OlN0cmluZ1ByaW50ZigiLS0lcz0lZCIsIG5hbWUuY19zdHIoKSwgdmFsdWUpOwogfQpAQCAtNTAsNiArNTcsMzYgQEAKICAgcmV0dXJuIGJhc2U6OlN0cmluZ1ByaW50ZigiLS0lcz0lcCIsIG5hbWUuY19zdHIoKSwgYWRkcik7CiB9CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKK3N0ZDo6c3RyaW5nIEZvcm1hdEFyZ3VtZW50U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSB7CisgIHJldHVybiBiYXNlOjpTdHJpbmdQcmludGYoIi0tJXM9JXMiLCBuYW1lLmNfc3RyKCksIHZhbHVlLmNfc3RyKCkpOworfQorCitib29sIFVwZGF0ZUFubm90YXRpb24oc3RkOjpzdHJpbmcmIGFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuZXdfdmFsdWUpIHsKKyAgaWYgKG5ld192YWx1ZS5lbXB0eSgpKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIC8vIFRoZSBhbm5vdGF0aW9uIGlzIGluIHRoZSBmb3JtYXQgLS1rZXk9dmFsdWUKKyAgaWYgKGFubm90YXRpb24uY29tcGFyZSgyLCBrZXkuc2l6ZSgpLCBrZXkpID09IDApIHsKKyAgICBhbm5vdGF0aW9uID0gRm9ybWF0QXJndW1lbnRTdHJpbmcoa2V5LCBuZXdfdmFsdWUpOworICAgIExPRyhJTkZPKSA8PCAiVXBkYXRlZCBhbm5vdGF0aW9uOiAiIDw8IGFubm90YXRpb247CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEFkZEFubm90YXRpb24oc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBhcmd2X3N0cmluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmV3X3ZhbHVlKSB7CisgIHN0ZDo6c3RyaW5nIHYgPSBGb3JtYXRBcmd1bWVudFN0cmluZyhrZXksIG5ld192YWx1ZSk7CisgIGFyZ3Zfc3RyaW5ncy5wdXNoX2JhY2sodik7CisgIExPRyhJTkZPKSA8PCAiQWRkZWQgYW5ub3RhdGlvbjogIiA8PCB2OworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCiAKIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBCdWlsZEFwcFByb2Nlc3NBcmdzKApAQCAtMjY1LDggKzMwMiw1NSBAQAogICB9CiAKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSAgYm9vbCBTZW5kRXZlcmdyZWVuSW5mb0ltcGwoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICBib29sIFNlbmRBbm5vdGF0aW9uc0ltcGwoKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICBib29sIFNlbmRFdmVyZ3JlZW5JbmZvSW1wbCgpIG92ZXJyaWRlIHsKKyAgICBib29sIHVwZGF0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHMgOiBhcmd2X3N0cmluZ3NfKSB7CisgICAgICBpZiAocy5jb21wYXJlKDIsIHN0cmxlbihrRXZlcmdyZWVuSW5mb0tleSksIGtFdmVyZ3JlZW5JbmZvS2V5KSA9PSAwKSB7CisgICAgICAgIHMgPSBGb3JtYXRBcmd1bWVudEFkZHJlc3Moa0V2ZXJncmVlbkluZm9LZXksICZHZXRFdmVyZ3JlZW5JbmZvKCkpOworICAgICAgICBMT0coSU5GTykgPDwgIlVwZGF0ZWQgZXZlcmdyZWVuIGluZm86ICIgPDwgczsKKyAgICAgICAgdXBkYXRlZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpZiAoIXVwZGF0ZWQpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHYgPQorICAgICAgICAgIEZvcm1hdEFyZ3VtZW50QWRkcmVzcyhrRXZlcmdyZWVuSW5mb0tleSwgJkdldEV2ZXJncmVlbkluZm8oKSk7CisgICAgICBhcmd2X3N0cmluZ3NfLnB1c2hfYmFjayh2KTsKKyAgICAgIExPRyhJTkZPKSA8PCAiQWRkZWQgZXZlcmdyZWVuIGluZm86ICIgPDwgdjsKKyAgICB9CisKKyAgICBTdHJpbmdWZWN0b3JUb0NTdHJpbmdWZWN0b3IoYXJndl9zdHJpbmdzXywgJmFyZ3ZfKTsKKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgYm9vbCBTZW5kQW5ub3RhdGlvbnNJbXBsKCkgb3ZlcnJpZGUgeworICAgIGJvb2wgdXBkYXRlZF9wcm9kdWN0ID0gZmFsc2U7CisgICAgYm9vbCB1cGRhdGVkX3ZlcnNpb24gPSBmYWxzZTsKKyAgICBib29sIHVwZGF0ZWRfdXNlcl9hZ2VudF9zdHJpbmcgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHMgOiBhcmd2X3N0cmluZ3NfKSB7CisgICAgICBpZiAoVXBkYXRlQW5ub3RhdGlvbihzLCBrUHJvZHVjdEtleSwgR2V0QW5ub3RhdGlvbnMoKS5wcm9kdWN0KSkgeworICAgICAgICB1cGRhdGVkX3Byb2R1Y3QgPSB0cnVlOworICAgICAgfSBlbHNlIGlmIChVcGRhdGVBbm5vdGF0aW9uKHMsIGtWZXJzaW9uS2V5LCBHZXRBbm5vdGF0aW9ucygpLnZlcnNpb24pKSB7CisgICAgICAgIHVwZGF0ZWRfdmVyc2lvbiA9IHRydWU7CisgICAgICB9IGVsc2UgaWYgKFVwZGF0ZUFubm90YXRpb24ocywga1VBS2V5LCBHZXRBbm5vdGF0aW9ucygpLnVzZXJfYWdlbnRfc3RyaW5nKSkgeworICAgICAgICB1cGRhdGVkX3VzZXJfYWdlbnRfc3RyaW5nID0gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCF1cGRhdGVkX3Byb2R1Y3QpIHsKKyAgICAgIEFkZEFubm90YXRpb24oYXJndl9zdHJpbmdzXywga1Byb2R1Y3RLZXksIEdldEFubm90YXRpb25zKCkucHJvZHVjdCk7CisgICAgfQorICAgIGlmICghdXBkYXRlZF92ZXJzaW9uKSB7CisgICAgICBBZGRBbm5vdGF0aW9uKGFyZ3Zfc3RyaW5nc18sIGtWZXJzaW9uS2V5LCBHZXRBbm5vdGF0aW9ucygpLnZlcnNpb24pOworICAgIH0KKyAgICBpZiAoIXVwZGF0ZWRfdXNlcl9hZ2VudF9zdHJpbmcpIHsKKyAgICAgIEFkZEFubm90YXRpb24oYXJndl9zdHJpbmdzXywga1VBS2V5LCBHZXRBbm5vdGF0aW9ucygpLnVzZXJfYWdlbnRfc3RyaW5nKTsKKyAgICB9CisKKyAgICBTdHJpbmdWZWN0b3JUb0NTdHJpbmdWZWN0b3IoYXJndl9zdHJpbmdzXywgJmFyZ3ZfKTsKKworICAgIHJldHVybiB0cnVlOworICB9CiAjZW5kaWYKIAogICB2b2lkIEhhbmRsZUNyYXNoSW1wbCgpIG92ZXJyaWRlIHsKQEAgLTM4Nyw2ICs0NzEsOSBAQAogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQogICAgIGluZm8uc2FuaXRpemF0aW9uX2luZm9ybWF0aW9uX2FkZHJlc3MgPQogICAgICAgICBGcm9tUG9pbnRlckNhc3Q8Vk1BZGRyZXNzPigmR2V0U2FuaXRpemF0aW9uSW5mb3JtYXRpb24oKSk7CisgICAgaW5mby5hbm5vdGF0aW9uc19hZGRyZXNzID0gRnJvbVBvaW50ZXJDYXN0PFZNQWRkcmVzcz4oJkdldEFubm90YXRpb25zKCkpOworICAgIGluZm8uZXZlcmdyZWVuX2luZm9ybWF0aW9uX2FkZHJlc3MgPQorICAgICAgICBGcm9tUG9pbnRlckNhc3Q8Vk1BZGRyZXNzPigmR2V0RXZlcmdyZWVuSW5mbygpKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChPU19DSFJPTUVPUykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL2NvbXBhdC9jb21wYXQuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY29tcGF0L2NvbXBhdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NmU5YmMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY29tcGF0L2NvbXBhdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbmRyb2lkL2FuZHJvaWQvYXBpLWxldmVsLmNjJywKLSAgICAgICAgJ2FuZHJvaWQvYW5kcm9pZC9hcGktbGV2ZWwuaCcsCi0gICAgICAgICdhbmRyb2lkL2RsZmNuX2ludGVybmFsLmNjJywKLSAgICAgICAgJ2FuZHJvaWQvZGxmY25faW50ZXJuYWwuaCcsCi0gICAgICAgICdhbmRyb2lkL2VsZi5oJywKLSAgICAgICAgJ2FuZHJvaWQvbGludXgvZWxmLmgnLAotICAgICAgICAnYW5kcm9pZC9saW51eC9wcmN0bC5oJywKLSAgICAgICAgJ2FuZHJvaWQvbGludXgvcHRyYWNlLmgnLAotICAgICAgICAnYW5kcm9pZC9zY2hlZC5oJywKLSAgICAgICAgJ2FuZHJvaWQvc3lzL2Vwb2xsLmNjJywKLSAgICAgICAgJ2FuZHJvaWQvc3lzL2Vwb2xsLmgnLAotICAgICAgICAnYW5kcm9pZC9zeXMvbW1hbi5jYycsCi0gICAgICAgICdhbmRyb2lkL3N5cy9tbWFuLmgnLAotICAgICAgICAnYW5kcm9pZC9zeXMvc3lzY2FsbC5oJywKLSAgICAgICAgJ2FuZHJvaWQvc3lzL3VzZXIuaCcsCi0gICAgICAgICdsaW51eC9zaWduYWwuaCcsCi0gICAgICAgICdsaW51eC9zeXMvcHRyYWNlLmgnLAotICAgICAgICAnbGludXgvc3lzL3VzZXIuaCcsCi0gICAgICAgICdtYWMvQXZhaWxhYmlsaXR5TWFjcm9zLmgnLAotICAgICAgICAnbWFjL2tlcm4vZXhjX3Jlc291cmNlLmgnLAotICAgICAgICAnbWFjL21hY2gvaTM4Ni90aHJlYWRfc3RhdGUuaCcsCi0gICAgICAgICdtYWMvbWFjaC9tYWNoLmgnLAotICAgICAgICAnbWFjL21hY2gtby9sb2FkZXIuaCcsCi0gICAgICAgICdtYWMvc3lzL3Jlc291cmNlLmgnLAotICAgICAgICAnbm9uX21hYy9tYWNoL21hY2guaCcsCi0gICAgICAgICdub25fd2luL2RiZ2hlbHAuaCcsCi0gICAgICAgICdub25fd2luL21pbndpbmJhc2UuaCcsCi0gICAgICAgICdub25fd2luL3RpbWV6b25lYXBpLmgnLAotICAgICAgICAnbm9uX3dpbi92ZXJyc3JjLmgnLAotICAgICAgICAnbm9uX3dpbi93aW5kb3dzLmgnLAotICAgICAgICAnbm9uX3dpbi93aW5udC5oJywKLSAgICAgICAgJ3dpbi9nZXRvcHQuaCcsCi0gICAgICAgICd3aW4vc3RyaW5ncy5jYycsCi0gICAgICAgICd3aW4vc3RyaW5ncy5oJywKLSAgICAgICAgJ3dpbi9zeXMvdGltZS5oJywKLSAgICAgICAgJ3dpbi9zeXMvdHlwZXMuaCcsCi0gICAgICAgICd3aW4vdGltZS5jYycsCi0gICAgICAgICd3aW4vdGltZS5oJywKLSAgICAgICAgJ3dpbi93aW5iYXNlLmgnLAotICAgICAgICAnd2luL3dpbm50LmgnLAotICAgICAgICAnd2luL3dpbnRlcm5sLmgnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJ21hYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICdtYWMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICdub25fbWFjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ25vbl9tYWMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnd2luJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ3dpbicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9nZXRvcHQvZ2V0b3B0Lmd5cDpnZXRvcHQnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJ25vbl93aW4nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAnbm9uX3dpbicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnYW5kcm9pZCcsCi0gICAgICAgICAgICAnbGludXgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAnYW5kcm9pZCcsCi0gICAgICAgICAgICAgICdsaW51eCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxkbCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3RhcmdldF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJ2xpbnV4JywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ2xpbnV4JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jcmFzaHBhZC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC9jcmFzaHBhZC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYmYyODMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvY3Jhc2hwYWQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnQWxsJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NsaWVudC9jbGllbnQuZ3lwOionLAotICAgICAgICAjICdjbGllbnQvY2xpZW50X3Rlc3QuZ3lwOionLAotICAgICAgICAnY29tcGF0L2NvbXBhdC5neXA6KicsCi0gICAgICAgICdoYW5kbGVyL2hhbmRsZXIuZ3lwOionLAotICAgICAgICAjICdoYW5kbGVyL2hhbmRsZXJfdGVzdC5neXA6KicsCi0gICAgICAgICdtaW5pZHVtcC9taW5pZHVtcC5neXA6KicsCi0gICAgICAgICMgJ21pbmlkdW1wL21pbmlkdW1wX3Rlc3QuZ3lwOionLAotICAgICAgICAnc25hcHNob3Qvc25hcHNob3QuZ3lwOionLAotICAgICAgICAjICdzbmFwc2hvdC9zbmFwc2hvdF90ZXN0Lmd5cDoqJywKLSAgICAgICAgIyAndGVzdC90ZXN0Lmd5cDoqJywKLSAgICAgICAgIyAndGVzdC90ZXN0X3Rlc3QuZ3lwOionLAotICAgICAgICAndG9vbHMvdG9vbHMuZ3lwOionLAotICAgICAgICAndXRpbC91dGlsLmd5cDoqJywKLSAgICAgICAgIyAndXRpbC91dGlsX3Rlc3QuZ3lwOionLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZG9jL3N1cHBvcnQvY3Jhc2hwYWQuZG94eS5oJywKLSAgICAgICAgJ3BhY2thZ2UuaCcsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1MhPSJtYWMiIGFuZCBPUyE9IndpbiInLCB7Ci0gICAgICAgICAgJ3N1cHByZXNzX3dpbGRjYXJkJzogMSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2hhbmRsZXIuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9oYW5kbGVyLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg2MmQ3MC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2hhbmRsZXIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgIyBUaGlzIHRhcmdldCBleGlzdHMgc28gdGhhdCB0aGUgY3Jhc2hwYWRfaGFuZGxlciBjYW4gYmUgZW1iZWRkZWQgaW50bwotICAgICAgIyBhbm90aGVyIGJpbmFyeS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9oYW5kbGVyX2xpYicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICcuLi9taW5pZHVtcC9taW5pZHVtcC5neXA6Y3Jhc2hwYWRfbWluaWR1bXAnLAotICAgICAgICAnLi4vc25hcHNob3Qvc25hcHNob3QuZ3lwOmNyYXNocGFkX3NuYXBzaG90JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICAgICAnLi4vdG9vbHMvdG9vbHMuZ3lwOmNyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvYm9yaW5nc3NsL2JvcmluZ3NzbC5neXA6Y3J5cHRvX2Z1bGwnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnQ1JBU0hQQURfVVNFX0JPUklOR1NTTCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICcuLi91dGlsL25ldC9odHRwX3RyYW5zcG9ydF9zb2NrZXQuY2MnLAotICAgICAgICAnY3Jhc2hfcmVwb3J0X3VwbG9hZF90aHJlYWQuY2MnLAotICAgICAgICAnY3Jhc2hfcmVwb3J0X3VwbG9hZF90aHJlYWQuaCcsCi0gICAgICAgICdoYW5kbGVyX21haW4uY2MnLAotICAgICAgICAnaGFuZGxlcl9tYWluLmgnLAotICAgICAgICAnbGludXgvY2FwdHVyZV9zbmFwc2hvdC5jYycsCi0gICAgICAgICdsaW51eC9jYXB0dXJlX3NuYXBzaG90LmgnLAotICAgICAgICAnbGludXgvY3Jhc2hfcmVwb3J0X2V4Y2VwdGlvbl9oYW5kbGVyLmNjJywKLSAgICAgICAgJ2xpbnV4L2NyYXNoX3JlcG9ydF9leGNlcHRpb25faGFuZGxlci5oJywKLSAgICAgICAgJ2xpbnV4L2V4Y2VwdGlvbl9oYW5kbGVyX3NlcnZlci5jYycsCi0gICAgICAgICdsaW51eC9leGNlcHRpb25faGFuZGxlcl9zZXJ2ZXIuaCcsCi0gICAgICAgICdtYWMvY3Jhc2hfcmVwb3J0X2V4Y2VwdGlvbl9oYW5kbGVyLmNjJywKLSAgICAgICAgJ21hYy9jcmFzaF9yZXBvcnRfZXhjZXB0aW9uX2hhbmRsZXIuaCcsCi0gICAgICAgICdtYWMvZXhjZXB0aW9uX2hhbmRsZXJfc2VydmVyLmNjJywKLSAgICAgICAgJ21hYy9leGNlcHRpb25faGFuZGxlcl9zZXJ2ZXIuaCcsCi0gICAgICAgICdtYWMvZmlsZV9saW1pdF9hbm5vdGF0aW9uLmNjJywKLSAgICAgICAgJ21hYy9maWxlX2xpbWl0X2Fubm90YXRpb24uaCcsCi0gICAgICAgICdtaW5pZHVtcF90b191cGxvYWRfcGFyYW1ldGVycy5jYycsCi0gICAgICAgICdtaW5pZHVtcF90b191cGxvYWRfcGFyYW1ldGVycy5oJywKLSAgICAgICAgJ3BydW5lX2NyYXNoX3JlcG9ydHNfdGhyZWFkLmNjJywKLSAgICAgICAgJ3BydW5lX2NyYXNoX3JlcG9ydHNfdGhyZWFkLmgnLAotICAgICAgICAndXNlcl9zdHJlYW1fZGF0YV9zb3VyY2UuY2MnLAotICAgICAgICAndXNlcl9zdHJlYW1fZGF0YV9zb3VyY2UuaCcsCi0gICAgICAgICd3aW4vY3Jhc2hfcmVwb3J0X2V4Y2VwdGlvbl9oYW5kbGVyLmNjJywKLSAgICAgICAgJ3dpbi9jcmFzaF9yZXBvcnRfZXhjZXB0aW9uX2hhbmRsZXIuaCcsCi0gICAgICBdLAotICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15saW51eC8nXSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfaGFuZGxlcicsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdG9vbHMvdG9vbHMuZ3lwOmNyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICdjcmFzaHBhZF9oYW5kbGVyX2xpYicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ21haW4uY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIEhlbHAgcGxhdGZvcm1zIGNyb3NzIGNvbXBpbGVkIG9uIGxpbnV4IHRvIHJlZHVjZQotICAgICAgICAjIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIGNyYXNocGFkX2hhbmRsZXIgYnkgZWxpbWluYXRpbmcKLSAgICAgICAgIyB1bnVzZWQgY29kZSBhbmQgdW51c2VkIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICAgICMgVGhlIGZsYWdzIGFzc3VtZSBnY2MvY2xhbmcgdG9vbGNoYWluLgotICAgICAgICBbJ2hvc3Rfb3M9PSJsaW51eCInLCAgewotICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAgICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgJy1XbCwtLWFzLW5lZWRlZCcsCi0gICAgICAgICAgICAnLVdsLC1nYy1zZWN0aW9ucycsCi0gICAgICAgICAgICAnLVdsLC16LG5vZXhlY3N0YWNrJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCAgewotICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICcyJywgICMgL1NVQlNZU1RFTTpXSU5ET1dTCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9oYW5kbGVyX2RlcGxveScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9oYW5kbGVyJywKLSAgICAgIF0sCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZXhlY3V0YWJsZV9uYW1lJzogJ2NyYXNocGFkX2hhbmRsZXInLAotICAgICAgfSwKLSAgICAgICdpbmNsdWRlcyc6IFsnPChERVBUSCkvc3RhcmJvYXJkL2J1aWxkL2RlcGxveS5neXBpJ10sCi0gICAgfSwKLSAgXSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWydPUz09IndpbiInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICMgRHVwbGljYXRlcyBjcmFzaHBhZF9oYW5kbGVyLmV4ZSB0byBjcmFzaHBhZF9oYW5kbGVyLmNvbSBhbmQgbWFrZXMgaXQKLSAgICAgICAgICAjIGEgY29uc29sZSBhcHAuCi0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX2hhbmRsZXJfY29uc29sZScsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3Rvb2xzL3Rvb2xzLmd5cDpjcmFzaHBhZF90b29sX3N1cHBvcnQnLAotICAgICAgICAgICAgJ2NyYXNocGFkX2hhbmRsZXInLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdjb3B5IGhhbmRsZXIgZXhlIHRvIGNvbScsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2NyYXNocGFkX2hhbmRsZXIuZXhlJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2NyYXNocGFkX2hhbmRsZXIuY29tJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAnY29weSA8KFBST0RVQ1RfRElSKVxjcmFzaHBhZF9oYW5kbGVyLmV4ZSAnCi0gICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKVxjcmFzaHBhZF9oYW5kbGVyLmNvbSA+bnVsICYmICcKLSAgICAgICAgICAgICAgICAnZWRpdGJpbiAtbm9sb2dvIC1zdWJzeXN0ZW06Y29uc29sZSAnCi0gICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKVxjcmFzaHBhZF9oYW5kbGVyLmNvbSA+bnVsJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ21zdnNfY3lnd2luX3NoZWxsJzogJzAnLAotICAgICAgICAgICAgICAncXVvdGVfY21kJzogJzAnLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL2hhbmRsZXIvaGFuZGxlcl9tYWluLmNjIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9oYW5kbGVyX21haW4uY2MKaW5kZXggYmU3MzkxNi4uNTFiZDY0ZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9oYW5kbGVyX21haW4uY2MKKysrIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9oYW5kbGVyX21haW4uY2MKQEAgLTE2OSw2ICsxNjksMTAgQEAKICIgICAgICAtLXRyYWNlLXBhcmVudC13aXRoLWV4Y2VwdGlvbj1FWENFUFRJT05fSU5GT1JNQVRJT05fQUREUkVTU1xuIgogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgYSBkdW1wIGZvciB0aGUgaGFuZGxlcidzIHBhcmVudCBwcm9jZXNzXG4iCiAjZW5kaWYgIC8vIE9TX0xJTlVYIHx8IE9TX0FORFJPSUQKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyIgICAgICAtLWV2ZXJncmVlbi1pbmZvcm1hdGlvbj1FVkVSR1JFRU5fSU5GT1JNQVRJT05fQUREUkVTU1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhZGRyZXNzIG9mIGEgRXZlZ3JlZW5JbmZvIHN0cnVjdC5cbiIKKyNlbmRpZgogIiAgICAgIC0tdXJsPVVSTCAgICAgICAgICAgICAgIHNlbmQgY3Jhc2ggcmVwb3J0cyB0byB0aGlzIEJyZWFrcGFkIHNlcnZlciBVUkwsXG4iCiAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSBpZiB1cGxvYWRzIGFyZSBlbmFibGVkIGZvciB0aGUgZGF0YWJhc2VcbiIKICNpZiBkZWZpbmVkKE9TX0NIUk9NRU9TKQpAQCAtMjA4LDYgKzIxMiw5IEBACiAgIFZNQWRkcmVzcyBzYW5pdGl6YXRpb25faW5mb3JtYXRpb25fYWRkcmVzczsKICAgaW50IGluaXRpYWxfY2xpZW50X2ZkOwogICBib29sIHNoYXJlZF9jbGllbnRfY29ubmVjdGlvbjsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgVk1BZGRyZXNzIGV2ZXJncmVlbl9pbmZvcm1hdGlvbl9hZGRyZXNzOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCiAgIGJvb2wgd3JpdGVfbWluaWR1bXBfdG9fbG9nOwogICBib29sIHdyaXRlX21pbmlkdW1wX3RvX2RhdGFiYXNlOwpAQCAtNTgxLDYgKzU4OCw5IEBACiAgICAga09wdGlvblNhbml0aXphdGlvbkluZm9ybWF0aW9uLAogICAgIGtPcHRpb25TaGFyZWRDbGllbnRDb25uZWN0aW9uLAogICAgIGtPcHRpb25UcmFjZVBhcmVudFdpdGhFeGNlcHRpb24sCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAga09wdGlvbkV2ZXJncmVlbkluZm9ybWF0b24sCisjZW5kaWYgIC8vIGRlZmluZWQoU1RBUkJPQVJEKQogI2VuZGlmCiAgICAga09wdGlvblVSTCwKICNpZiBkZWZpbmVkKE9TX0NIUk9NRU9TKQpAQCAtNjYxLDYgKzY3MSwxMiBAQAogICAgICBudWxscHRyLAogICAgICBrT3B0aW9uVHJhY2VQYXJlbnRXaXRoRXhjZXB0aW9ufSwKICNlbmRpZiAgLy8gT1NfTElOVVggfHwgT1NfQU5EUk9JRAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIHsiZXZlcmdyZWVuLWluZm9ybWF0aW9uIiwKKyAgICAgcmVxdWlyZWRfYXJndW1lbnQsCisgICAgIG51bGxwdHIsCisgICAgIGtPcHRpb25FdmVyZ3JlZW5JbmZvcm1hdG9ufSwKKyNlbmRpZgogICAgIHsidXJsIiwgcmVxdWlyZWRfYXJndW1lbnQsIG51bGxwdHIsIGtPcHRpb25VUkx9LAogI2lmIGRlZmluZWQoT1NfQ0hST01FT1MpCiAgICAgeyJ1c2UtY3Jvcy1jcmFzaC1yZXBvcnRlciIsCkBAIC04MjQsNiArODQwLDE3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgICBjYXNlIGtPcHRpb25FdmVyZ3JlZW5JbmZvcm1hdG9uOiB7CisgICAgICAgIGlmICghU3RyaW5nVG9OdW1iZXIob3B0YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25zLmV2ZXJncmVlbl9pbmZvcm1hdGlvbl9hZGRyZXNzKSkgeworICAgICAgICAgIFRvb2xTdXBwb3J0OjpVc2FnZUhpbnQobWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIC0tZXZlcmdyZWVuLWluZm9ybWF0aW9uIik7CisgICAgICAgICAgcmV0dXJuIEV4aXRGYWlsdXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisjZW5kaWYgICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICNlbmRpZiAgLy8gT1NfTElOVVggfHwgT1NfQU5EUk9JRAogICAgICAgY2FzZSBrT3B0aW9uVVJMOiB7CiAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0YXJnOwpAQCAtMTA0MCw2ICsxMDY3LDEwIEBACiAgICAgaW5mby5leGNlcHRpb25faW5mb3JtYXRpb25fYWRkcmVzcyA9IG9wdGlvbnMuZXhjZXB0aW9uX2luZm9ybWF0aW9uX2FkZHJlc3M7CiAgICAgaW5mby5zYW5pdGl6YXRpb25faW5mb3JtYXRpb25fYWRkcmVzcyA9CiAgICAgICAgIG9wdGlvbnMuc2FuaXRpemF0aW9uX2luZm9ybWF0aW9uX2FkZHJlc3M7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgaW5mby5ldmVyZ3JlZW5faW5mb3JtYXRpb25fYWRkcmVzcyA9CisgICAgICAgIG9wdGlvbnMuZXZlcmdyZWVuX2luZm9ybWF0aW9uX2FkZHJlc3M7CisjZW5kaWYgICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICByZXR1cm4gZXhjZXB0aW9uX2hhbmRsZXItPkhhbmRsZUV4Y2VwdGlvbihnZXRwcGlkKCksIGdldGV1aWQoKSwgaW5mbykKICAgICAgICAgICAgICAgID8gRVhJVF9TVUNDRVNTCiAgICAgICAgICAgICAgICA6IEV4aXRGYWlsdXJlKCk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2hhbmRsZXJfdGVzdC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2hhbmRsZXJfdGVzdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDdlN2MuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9oYW5kbGVyX3Rlc3QuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX2hhbmRsZXJfdGVzdCcsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9oYW5kbGVyX3Rlc3RfZXh0ZW5kZWRfaGFuZGxlcicsCi0gICAgICAgICdoYW5kbGVyLmd5cDpjcmFzaHBhZF9oYW5kbGVyX2xpYicsCi0gICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3NuYXBzaG90L3NuYXBzaG90Lmd5cDpjcmFzaHBhZF9zbmFwc2hvdCcsCi0gICAgICAgICcuLi9zbmFwc2hvdC9zbmFwc2hvdF90ZXN0Lmd5cDpjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2xpYicsCi0gICAgICAgICcuLi90ZXN0L3Rlc3QuZ3lwOmNyYXNocGFkX2d0ZXN0X21haW4nLAotICAgICAgICAnLi4vdGVzdC90ZXN0Lmd5cDpjcmFzaHBhZF90ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2d0ZXN0L2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY3Jhc2hwYWRfaGFuZGxlcl90ZXN0LmNjJywKLSAgICAgICAgJ2xpbnV4L2V4Y2VwdGlvbl9oYW5kbGVyX3NlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3RvX3VwbG9hZF9wYXJhbWV0ZXJzX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ09TIT0id2luIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9oYW5kbGVyX3Rlc3RfZXh0ZW5kZWRfaGFuZGxlcicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnY3Jhc2hwYWRfaGFuZGxlcl90ZXN0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAnXmxpbnV4LyddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9oYW5kbGVyX3Rlc3RfZXh0ZW5kZWRfaGFuZGxlcicsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAnLi4vbWluaWR1bXAvbWluaWR1bXBfdGVzdC5neXA6Y3Jhc2hwYWRfbWluaWR1bXBfdGVzdF9saWInLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL3Rvb2xzL3Rvb2xzLmd5cDpjcmFzaHBhZF90b29sX3N1cHBvcnQnLAotICAgICAgICAnaGFuZGxlci5neXA6Y3Jhc2hwYWRfaGFuZGxlcl9saWInLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9oYW5kbGVyX3Rlc3RfZXh0ZW5kZWRfaGFuZGxlci5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hfb3RoZXJfcHJvZ3JhbScsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL3Rlc3QvdGVzdC5neXA6Y3Jhc2hwYWRfdGVzdCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZ3Rlc3QvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd3aW4vY3Jhc2hfb3RoZXJfcHJvZ3JhbS5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHlfcHJvZ3JhbScsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnLi4nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2NyYXNoeV90ZXN0X3Byb2dyYW0uY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2h5X3NpZ25hbCcsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9jcmFzaHlfc2lnbmFsLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2Zha2VfaGFuZGxlcl90aGF0X2NyYXNoZXNfYXRfc3RhcnR1cCcsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2Zha2VfaGFuZGxlcl90aGF0X2NyYXNoZXNfYXRfc3RhcnR1cC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdoYW5naW5nX3Byb2dyYW0nLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2hhbmdpbmdfcHJvZ3JhbS5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsb2FkZXJfbG9ja19kbGwnLAotICAgICAgICAgICd0eXBlJzogJ2xvYWRhYmxlX21vZHVsZScsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2xvYWRlcl9sb2NrX2RsbC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdOb0ltcG9ydExpYnJhcnknOiAndHJ1ZScsCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdzZWxmX2Rlc3Ryb3lpbmdfcHJvZ3JhbScsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICAgICAnLi4vc25hcHNob3Qvc25hcHNob3QuZ3lwOmNyYXNocGFkX3NuYXBzaG90JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9zZWxmX2Rlc3Ryb3lpbmdfdGVzdF9wcm9ncmFtLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIENhbm5vdCBjcmVhdGUgYW4geDY0IERMTCB3aXRoIGVtYmVkZGVkIGRlYnVnIGluZm8uCi0gICAgICAgIFsndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNoeV96N19sb2FkZXInLAotICAgICAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgICAgICAgICAnLi4vdGVzdC90ZXN0Lmd5cDpjcmFzaHBhZF90ZXN0JywKLSAgICAgICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgICAnLi4nLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnd2luL2NyYXNoeV90ZXN0X3o3X2xvYWRlci5jYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL2hhbmRsZXIvbGludXgvY2FwdHVyZV9zbmFwc2hvdC5jYyBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL2hhbmRsZXIvbGludXgvY2FwdHVyZV9zbmFwc2hvdC5jYwppbmRleCA0ODhiYmJhLi44ZmIwNzM1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9oYW5kbGVyL2xpbnV4L2NhcHR1cmVfc25hcHNob3QuY2MKKysrIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvaGFuZGxlci9saW51eC9jYXB0dXJlX3NuYXBzaG90LmNjCkBAIC00MSw4ICs0MSw5IEBACiAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9jZXNzU25hcHNob3RMaW51eD4gcHJvY2Vzc19zbmFwc2hvdCgKICAgICAgIG5ldyBQcm9jZXNzU25hcHNob3RMaW51eCgpKTsKICNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKLSAgaWYgKCFwcm9jZXNzX3NuYXBzaG90LT5Jbml0aWFsaXplKAotICAgICAgICAgIGNvbm5lY3Rpb24sIGV2ZXJncmVlbl9pbmZvcm1hdGlvbl9hZGRyZXNzLCBhbm5vdGF0aW9uc19hZGRyZXNzKSkgeworICBpZiAoIXByb2Nlc3Nfc25hcHNob3QtPkluaXRpYWxpemUoY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZXZlcmdyZWVuX2luZm9ybWF0aW9uX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmFubm90YXRpb25zX2FkZHJlc3MpKSB7CiAjZWxzZQogICBpZiAoIXByb2Nlc3Nfc25hcHNob3QtPkluaXRpYWxpemUoY29ubmVjdGlvbikpIHsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvbWluaWR1bXAvbWluaWR1bXAuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvbWluaWR1bXAvbWluaWR1bXAuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2UwYmE2Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL21pbmlkdW1wL21pbmlkdW1wLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX21pbmlkdW1wJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAnLi4vc25hcHNob3Qvc25hcHNob3QuZ3lwOmNyYXNocGFkX3NuYXBzaG90JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbWluaWR1bXBfYW5ub3RhdGlvbl93cml0ZXIuY2MnLAotICAgICAgICAnbWluaWR1bXBfYW5ub3RhdGlvbl93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9ieXRlX2FycmF5X3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9ieXRlX2FycmF5X3dyaXRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wX2NvbnRleHQuaCcsCi0gICAgICAgICdtaW5pZHVtcF9jb250ZXh0X3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9jb250ZXh0X3dyaXRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wX2NyYXNocGFkX2luZm9fd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX2NyYXNocGFkX2luZm9fd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfZXhjZXB0aW9uX3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9leGNlcHRpb25fd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfZXh0ZW5zaW9ucy5jYycsCi0gICAgICAgICdtaW5pZHVtcF9leHRlbnNpb25zLmgnLAotICAgICAgICAnbWluaWR1bXBfZmlsZV93cml0ZXIuY2MnLAotICAgICAgICAnbWluaWR1bXBfZmlsZV93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9oYW5kbGVfd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX2hhbmRsZV93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9tZW1vcnlfaW5mb193cml0ZXIuY2MnLAotICAgICAgICAnbWluaWR1bXBfbWVtb3J5X2luZm9fd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfbWVtb3J5X3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9tZW1vcnlfd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfbWlzY19pbmZvX3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9taXNjX2luZm9fd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfbW9kdWxlX2NyYXNocGFkX2luZm9fd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX21vZHVsZV9jcmFzaHBhZF9pbmZvX3dyaXRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wX21vZHVsZV93cml0ZXIuY2MnLAotICAgICAgICAnbWluaWR1bXBfbW9kdWxlX3dyaXRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wX3J2YV9saXN0X3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF9ydmFfbGlzdF93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9zaW1wbGVfc3RyaW5nX2RpY3Rpb25hcnlfd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3NpbXBsZV9zdHJpbmdfZGljdGlvbmFyeV93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9zdHJlYW1fd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3N0cmVhbV93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9zdHJpbmdfd3JpdGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3N0cmluZ193cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF9zeXN0ZW1faW5mb193cml0ZXIuY2MnLAotICAgICAgICAnbWluaWR1bXBfc3lzdGVtX2luZm9fd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfdGhyZWFkX2lkX21hcC5jYycsCi0gICAgICAgICdtaW5pZHVtcF90aHJlYWRfaWRfbWFwLmgnLAotICAgICAgICAnbWluaWR1bXBfdGhyZWFkX3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF90aHJlYWRfd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfdW5sb2FkZWRfbW9kdWxlX3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF91bmxvYWRlZF9tb2R1bGVfd3JpdGVyLmgnLAotICAgICAgICAnbWluaWR1bXBfdXNlcl9leHRlbnNpb25fc3RyZWFtX2RhdGFfc291cmNlLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3VzZXJfZXh0ZW5zaW9uX3N0cmVhbV9kYXRhX3NvdXJjZS5oJywKLSAgICAgICAgJ21pbmlkdW1wX3VzZXJfc3RyZWFtX3dyaXRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcF91c2VyX3N0cmVhbV93cml0ZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcF93cml0YWJsZS5jYycsCi0gICAgICAgICdtaW5pZHVtcF93cml0YWJsZS5oJywKLSAgICAgICAgJ21pbmlkdW1wX3dyaXRlcl91dGlsLmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3dyaXRlcl91dGlsLmgnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvbWluaWR1bXAvbWluaWR1bXBfdGVzdC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC9taW5pZHVtcC9taW5pZHVtcF90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjMDYwNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9taW5pZHVtcC9taW5pZHVtcF90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX21pbmlkdW1wX3Rlc3RfbGliJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtaW5pZHVtcC5neXA6Y3Jhc2hwYWRfbWluaWR1bXAnLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvZ3Rlc3QvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfYnl0ZV9hcnJheV93cml0ZXJfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfYnl0ZV9hcnJheV93cml0ZXJfdGVzdF91dGlsLmgnLAotICAgICAgICAndGVzdC9taW5pZHVtcF9jb250ZXh0X3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0ZXN0L21pbmlkdW1wX2NvbnRleHRfdGVzdF91dGlsLmgnLAotICAgICAgICAndGVzdC9taW5pZHVtcF9maWxlX3dyaXRlcl90ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGVzdC9taW5pZHVtcF9maWxlX3dyaXRlcl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICd0ZXN0L21pbmlkdW1wX21lbW9yeV93cml0ZXJfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfbWVtb3J5X3dyaXRlcl90ZXN0X3V0aWwuaCcsCi0gICAgICAgICd0ZXN0L21pbmlkdW1wX3J2YV9saXN0X3Rlc3RfdXRpbC5jYycsCi0gICAgICAgICd0ZXN0L21pbmlkdW1wX3J2YV9saXN0X3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfc3RyaW5nX3dyaXRlcl90ZXN0X3V0aWwuY2MnLAotICAgICAgICAndGVzdC9taW5pZHVtcF9zdHJpbmdfd3JpdGVyX3Rlc3RfdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfdXNlcl9leHRlbnNpb25fc3RyZWFtX3V0aWwuY2MnLAotICAgICAgICAndGVzdC9taW5pZHVtcF91c2VyX2V4dGVuc2lvbl9zdHJlYW1fdXRpbC5oJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfd3JpdGFibGVfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ3Rlc3QvbWluaWR1bXBfd3JpdGFibGVfdGVzdF91dGlsLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9taW5pZHVtcF90ZXN0JywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NyYXNocGFkX21pbmlkdW1wX3Rlc3RfbGliJywKLSAgICAgICAgJ21pbmlkdW1wLmd5cDpjcmFzaHBhZF9taW5pZHVtcCcsCi0gICAgICAgICcuLi9zbmFwc2hvdC9zbmFwc2hvdF90ZXN0Lmd5cDpjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2xpYicsCi0gICAgICAgICcuLi90ZXN0L3Rlc3QuZ3lwOmNyYXNocGFkX2d0ZXN0X21haW4nLAotICAgICAgICAnLi4vdGVzdC90ZXN0Lmd5cDpjcmFzaHBhZF90ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2d0ZXN0L2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnbWluaWR1bXBfYW5ub3RhdGlvbl93cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9ieXRlX2FycmF5X3dyaXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wX2NvbnRleHRfd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfY3Jhc2hwYWRfaW5mb193cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9leGNlcHRpb25fd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfZmlsZV93cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9oYW5kbGVfd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfbWVtb3J5X2luZm9fd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfbWVtb3J5X3dyaXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wX21pc2NfaW5mb193cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9tb2R1bGVfY3Jhc2hwYWRfaW5mb193cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9tb2R1bGVfd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfcnZhX2xpc3Rfd3JpdGVyX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfc2ltcGxlX3N0cmluZ19kaWN0aW9uYXJ5X3dyaXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3N0cmluZ193cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF9zeXN0ZW1faW5mb193cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF90aHJlYWRfaWRfbWFwX3Rlc3QuY2MnLAotICAgICAgICAnbWluaWR1bXBfdGhyZWFkX3dyaXRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wX3VubG9hZGVkX21vZHVsZV93cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF91c2VyX3N0cmVhbV93cml0ZXJfdGVzdC5jYycsCi0gICAgICAgICdtaW5pZHVtcF93cml0YWJsZV90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3NuYXBzaG90L0JVSUxELmduIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvc25hcHNob3QvQlVJTEQuZ24KaW5kZXggOWM0NjYzNi4uZjQ3YjNmMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvc25hcHNob3QvQlVJTEQuZ24KKysrIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvc25hcHNob3QvQlVJTEQuZ24KQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgIH0KIAogICAgIGlmICgoY3Jhc2hwYWRfaXNfbGludXggfHwgY3Jhc2hwYWRfaXNfYW5kcm9pZCB8fCBjcmFzaHBhZF9pc19mdWNoc2lhKSAmJgotICAgICAgICB0YXJnZXRfY3B1ICE9ICJtaXBzZWwiICYmIHRhcmdldF9jcHUgIT0gIm1pcHM2NGVsIikgeworICAgICAgICB0YXJnZXRfY3B1ICE9ICJtaXBzZWwiICYmIHRhcmdldF9jcHUgIT0gIm1pcHM2NGVsIiAmJiAhdXNpbmdfb2xkX2NvbXBpbGVyKSB7CiAgICAgICBkYXRhX2RlcHMgKz0gWyAiOmNyYXNocGFkX3NuYXBzaG90X3Rlc3RfYm90aF9kdF9oYXNoX3N0eWxlcyIgXQogICAgIH0KIApAQCAtNDk0LDcgKzQ5NCw3IEBACiB9CiAKIGlmICgoY3Jhc2hwYWRfaXNfbGludXggfHwgY3Jhc2hwYWRfaXNfYW5kcm9pZCB8fCBjcmFzaHBhZF9pc19mdWNoc2lhKSAmJgotICAgIHRhcmdldF9jcHUgIT0gIm1pcHNlbCIgJiYgdGFyZ2V0X2NwdSAhPSAibWlwczY0ZWwiKSB7CisgICAgdGFyZ2V0X2NwdSAhPSAibWlwc2VsIiAmJiB0YXJnZXRfY3B1ICE9ICJtaXBzNjRlbCIgJiYgIXVzaW5nX29sZF9jb21waWxlcikgewogICBjcmFzaHBhZF9sb2FkYWJsZV9tb2R1bGUoImNyYXNocGFkX3NuYXBzaG90X3Rlc3RfYm90aF9kdF9oYXNoX3N0eWxlcyIpIHsKICAgICB0ZXN0b25seSA9IHRydWUKICAgICBzb3VyY2VzID0gWyAiaGFzaF90eXBlc190ZXN0LmNjIiBdCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9zbmFwc2hvdC9zbmFwc2hvdC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC9zbmFwc2hvdC9zbmFwc2hvdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YzU3ZmMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvc25hcHNob3Qvc25hcHNob3QuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhbm5vdGF0aW9uX3NuYXBzaG90LmNjJywKLSAgICAgICAgJ2Fubm90YXRpb25fc25hcHNob3QuaCcsCi0gICAgICAgICdjYXB0dXJlX21lbW9yeS5jYycsCi0gICAgICAgICdjYXB0dXJlX21lbW9yeS5oJywKLSAgICAgICAgJ2NwdV9hcmNoaXRlY3R1cmUuaCcsCi0gICAgICAgICdjcHVfY29udGV4dC5jYycsCi0gICAgICAgICdjcHVfY29udGV4dC5oJywKLSAgICAgICAgJ2NyYXNocGFkX2luZm9fY2xpZW50X29wdGlvbnMuY2MnLAotICAgICAgICAnY3Jhc2hwYWRfaW5mb19jbGllbnRfb3B0aW9ucy5oJywKLSAgICAgICAgJ2NyYXNocGFkX3R5cGVzL2NyYXNocGFkX2luZm9fcmVhZGVyLmNjJywKLSAgICAgICAgJ2NyYXNocGFkX3R5cGVzL2NyYXNocGFkX2luZm9fcmVhZGVyLmgnLAotICAgICAgICAnY3Jhc2hwYWRfdHlwZXMvaW1hZ2VfYW5ub3RhdGlvbl9yZWFkZXIuY2MnLAotICAgICAgICAnY3Jhc2hwYWRfdHlwZXMvaW1hZ2VfYW5ub3RhdGlvbl9yZWFkZXIuaCcsCi0gICAgICAgICdlbGYvZWxmX2R5bmFtaWNfYXJyYXlfcmVhZGVyLmNjJywKLSAgICAgICAgJ2VsZi9lbGZfZHluYW1pY19hcnJheV9yZWFkZXIuaCcsCi0gICAgICAgICdlbGYvZWxmX2ltYWdlX3JlYWRlci5jYycsCi0gICAgICAgICdlbGYvZWxmX2ltYWdlX3JlYWRlci5oJywKLSAgICAgICAgJ2VsZi9lbGZfc3ltYm9sX3RhYmxlX3JlYWRlci5jYycsCi0gICAgICAgICdlbGYvZWxmX3N5bWJvbF90YWJsZV9yZWFkZXIuaCcsCi0gICAgICAgICdlbGYvbW9kdWxlX3NuYXBzaG90X2VsZi5jYycsCi0gICAgICAgICdlbGYvbW9kdWxlX3NuYXBzaG90X2VsZi5oJywKLSAgICAgICAgJ2V4Y2VwdGlvbl9zbmFwc2hvdC5oJywKLSAgICAgICAgJ2hhbmRsZV9zbmFwc2hvdC5jYycsCi0gICAgICAgICdoYW5kbGVfc25hcHNob3QuaCcsCi0gICAgICAgICdsaW51eC9jcHVfY29udGV4dF9saW51eC5jYycsCi0gICAgICAgICdsaW51eC9jcHVfY29udGV4dF9saW51eC5oJywKLSAgICAgICAgJ2xpbnV4L2RlYnVnX3JlbmRlenZvdXMuY2MnLAotICAgICAgICAnbGludXgvZGVidWdfcmVuZGV6dm91cy5oJywKLSAgICAgICAgJ2xpbnV4L2V4Y2VwdGlvbl9zbmFwc2hvdF9saW51eC5jYycsCi0gICAgICAgICdsaW51eC9leGNlcHRpb25fc25hcHNob3RfbGludXguaCcsCi0gICAgICAgICdsaW51eC9wcm9jZXNzX3JlYWRlcl9saW51eC5jYycsCi0gICAgICAgICdsaW51eC9wcm9jZXNzX3JlYWRlcl9saW51eC5oJywKLSAgICAgICAgJ2xpbnV4L3Byb2Nlc3Nfc25hcHNob3RfbGludXguY2MnLAotICAgICAgICAnbGludXgvcHJvY2Vzc19zbmFwc2hvdF9saW51eC5oJywKLSAgICAgICAgJ2xpbnV4L3NpZ25hbF9jb250ZXh0LmgnLAotICAgICAgICAnbGludXgvc3lzdGVtX3NuYXBzaG90X2xpbnV4LmNjJywKLSAgICAgICAgJ2xpbnV4L3N5c3RlbV9zbmFwc2hvdF9saW51eC5oJywKLSAgICAgICAgJ2xpbnV4L3RocmVhZF9zbmFwc2hvdF9saW51eC5jYycsCi0gICAgICAgICdsaW51eC90aHJlYWRfc25hcHNob3RfbGludXguaCcsCi0gICAgICAgICdtYWMvY3B1X2NvbnRleHRfbWFjLmNjJywKLSAgICAgICAgJ21hYy9jcHVfY29udGV4dF9tYWMuaCcsCi0gICAgICAgICdtYWMvZXhjZXB0aW9uX3NuYXBzaG90X21hYy5jYycsCi0gICAgICAgICdtYWMvZXhjZXB0aW9uX3NuYXBzaG90X21hYy5oJywKLSAgICAgICAgJ21hYy9tYWNoX29faW1hZ2VfYW5ub3RhdGlvbnNfcmVhZGVyLmNjJywKLSAgICAgICAgJ21hYy9tYWNoX29faW1hZ2VfYW5ub3RhdGlvbnNfcmVhZGVyLmgnLAotICAgICAgICAnbWFjL21hY2hfb19pbWFnZV9yZWFkZXIuY2MnLAotICAgICAgICAnbWFjL21hY2hfb19pbWFnZV9yZWFkZXIuaCcsCi0gICAgICAgICdtYWMvbWFjaF9vX2ltYWdlX3NlZ21lbnRfcmVhZGVyLmNjJywKLSAgICAgICAgJ21hYy9tYWNoX29faW1hZ2Vfc2VnbWVudF9yZWFkZXIuaCcsCi0gICAgICAgICdtYWMvbWFjaF9vX2ltYWdlX3N5bWJvbF90YWJsZV9yZWFkZXIuY2MnLAotICAgICAgICAnbWFjL21hY2hfb19pbWFnZV9zeW1ib2xfdGFibGVfcmVhZGVyLmgnLAotICAgICAgICAnbWFjL21vZHVsZV9zbmFwc2hvdF9tYWMuY2MnLAotICAgICAgICAnbWFjL21vZHVsZV9zbmFwc2hvdF9tYWMuaCcsCi0gICAgICAgICdtYWMvcHJvY2Vzc19yZWFkZXJfbWFjLmNjJywKLSAgICAgICAgJ21hYy9wcm9jZXNzX3JlYWRlcl9tYWMuaCcsCi0gICAgICAgICdtYWMvcHJvY2Vzc19zbmFwc2hvdF9tYWMuY2MnLAotICAgICAgICAnbWFjL3Byb2Nlc3Nfc25hcHNob3RfbWFjLmgnLAotICAgICAgICAnbWFjL3Byb2Nlc3NfdHlwZXMuY2MnLAotICAgICAgICAnbWFjL3Byb2Nlc3NfdHlwZXMuaCcsCi0gICAgICAgICdtYWMvcHJvY2Vzc190eXBlcy9hbGwucHJvY3R5cGUnLAotICAgICAgICAnbWFjL3Byb2Nlc3NfdHlwZXMvYW5ub3RhdGlvbi5wcm9jdHlwZScsCi0gICAgICAgICdtYWMvcHJvY2Vzc190eXBlcy9jcmFzaHBhZF9pbmZvLnByb2N0eXBlJywKLSAgICAgICAgJ21hYy9wcm9jZXNzX3R5cGVzL2NyYXNocmVwb3J0ZXJjbGllbnQucHJvY3R5cGUnLAotICAgICAgICAnbWFjL3Byb2Nlc3NfdHlwZXMvY3VzdG9tLmNjJywKLSAgICAgICAgJ21hYy9wcm9jZXNzX3R5cGVzL2R5bGRfaW1hZ2VzLnByb2N0eXBlJywKLSAgICAgICAgJ21hYy9wcm9jZXNzX3R5cGVzL2ZsYXZvcnMuaCcsCi0gICAgICAgICdtYWMvcHJvY2Vzc190eXBlcy9pbnRlcm5hbC5oJywKLSAgICAgICAgJ21hYy9wcm9jZXNzX3R5cGVzL2xvYWRlci5wcm9jdHlwZScsCi0gICAgICAgICdtYWMvcHJvY2Vzc190eXBlcy9ubGlzdC5wcm9jdHlwZScsCi0gICAgICAgICdtYWMvcHJvY2Vzc190eXBlcy90cmFpdHMuaCcsCi0gICAgICAgICdtYWMvc3lzdGVtX3NuYXBzaG90X21hYy5jYycsCi0gICAgICAgICdtYWMvc3lzdGVtX3NuYXBzaG90X21hYy5oJywKLSAgICAgICAgJ21hYy90aHJlYWRfc25hcHNob3RfbWFjLmNjJywKLSAgICAgICAgJ21hYy90aHJlYWRfc25hcHNob3RfbWFjLmgnLAotICAgICAgICAnbWVtb3J5X3NuYXBzaG90LmNjJywKLSAgICAgICAgJ21lbW9yeV9zbmFwc2hvdC5oJywKLSAgICAgICAgJ21lbW9yeV9zbmFwc2hvdF9nZW5lcmljLmgnLAotICAgICAgICAnbWluaWR1bXAvbWluaWR1bXBfYW5ub3RhdGlvbl9yZWFkZXIuY2MnLAotICAgICAgICAnbWluaWR1bXAvbWluaWR1bXBfYW5ub3RhdGlvbl9yZWFkZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcC9taW5pZHVtcF9jb250ZXh0X2NvbnZlcnRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcC9taW5pZHVtcF9jb250ZXh0X2NvbnZlcnRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wL21pbmlkdW1wX3NpbXBsZV9zdHJpbmdfZGljdGlvbmFyeV9yZWFkZXIuY2MnLAotICAgICAgICAnbWluaWR1bXAvbWluaWR1bXBfc2ltcGxlX3N0cmluZ19kaWN0aW9uYXJ5X3JlYWRlci5oJywKLSAgICAgICAgJ21pbmlkdW1wL21pbmlkdW1wX3N0cmVhbS5oJywKLSAgICAgICAgJ21pbmlkdW1wL21pbmlkdW1wX3N0cmluZ19saXN0X3JlYWRlci5jYycsCi0gICAgICAgICdtaW5pZHVtcC9taW5pZHVtcF9zdHJpbmdfbGlzdF9yZWFkZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcC9taW5pZHVtcF9zdHJpbmdfcmVhZGVyLmNjJywKLSAgICAgICAgJ21pbmlkdW1wL21pbmlkdW1wX3N0cmluZ19yZWFkZXIuaCcsCi0gICAgICAgICdtaW5pZHVtcC9leGNlcHRpb25fc25hcHNob3RfbWluaWR1bXAuY2MnLAotICAgICAgICAnbWluaWR1bXAvZXhjZXB0aW9uX3NuYXBzaG90X21pbmlkdW1wLmgnLAotICAgICAgICAnbWluaWR1bXAvbWVtb3J5X3NuYXBzaG90X21pbmlkdW1wLmNjJywKLSAgICAgICAgJ21pbmlkdW1wL21lbW9yeV9zbmFwc2hvdF9taW5pZHVtcC5oJywKLSAgICAgICAgJ21pbmlkdW1wL21vZHVsZV9zbmFwc2hvdF9taW5pZHVtcC5jYycsCi0gICAgICAgICdtaW5pZHVtcC9tb2R1bGVfc25hcHNob3RfbWluaWR1bXAuaCcsCi0gICAgICAgICdtaW5pZHVtcC9wcm9jZXNzX3NuYXBzaG90X21pbmlkdW1wLmNjJywKLSAgICAgICAgJ21pbmlkdW1wL3Byb2Nlc3Nfc25hcHNob3RfbWluaWR1bXAuaCcsCi0gICAgICAgICdtaW5pZHVtcC9zeXN0ZW1fc25hcHNob3RfbWluaWR1bXAuY2MnLAotICAgICAgICAnbWluaWR1bXAvc3lzdGVtX3NuYXBzaG90X21pbmlkdW1wLmgnLAotICAgICAgICAnbWluaWR1bXAvdGhyZWFkX3NuYXBzaG90X21pbmlkdW1wLmNjJywKLSAgICAgICAgJ21pbmlkdW1wL3RocmVhZF9zbmFwc2hvdF9taW5pZHVtcC5oJywKLSAgICAgICAgJ21vZHVsZV9zbmFwc2hvdC5oJywKLSAgICAgICAgJ21vZHVsZV9zbmFwc2hvdF9ldmVyZ3JlZW4uaCcsCi0gICAgICAgICdtb2R1bGVfc25hcHNob3RfZXZlcmdyZWVuLmNjJywKLSAgICAgICAgJ3Bvc2l4L3RpbWV6b25lLmNjJywKLSAgICAgICAgJ3Bvc2l4L3RpbWV6b25lLmgnLAotICAgICAgICAncHJvY2Vzc19zbmFwc2hvdC5oJywKLSAgICAgICAgJ3Nhbml0aXplZC9tZW1vcnlfc25hcHNob3Rfc2FuaXRpemVkLmNjJywKLSAgICAgICAgJ3Nhbml0aXplZC9tZW1vcnlfc25hcHNob3Rfc2FuaXRpemVkLmgnLAotICAgICAgICAnc2FuaXRpemVkL21vZHVsZV9zbmFwc2hvdF9zYW5pdGl6ZWQuY2MnLAotICAgICAgICAnc2FuaXRpemVkL21vZHVsZV9zbmFwc2hvdF9zYW5pdGl6ZWQuaCcsCi0gICAgICAgICdzYW5pdGl6ZWQvcHJvY2Vzc19zbmFwc2hvdF9zYW5pdGl6ZWQuY2MnLAotICAgICAgICAnc2FuaXRpemVkL3Byb2Nlc3Nfc25hcHNob3Rfc2FuaXRpemVkLmgnLAotICAgICAgICAnc2FuaXRpemVkL3Nhbml0aXphdGlvbl9pbmZvcm1hdGlvbi5jYycsCi0gICAgICAgICdzYW5pdGl6ZWQvc2FuaXRpemF0aW9uX2luZm9ybWF0aW9uLmgnLAotICAgICAgICAnc2FuaXRpemVkL3RocmVhZF9zbmFwc2hvdF9zYW5pdGl6ZWQuY2MnLAotICAgICAgICAnc2FuaXRpemVkL3RocmVhZF9zbmFwc2hvdF9zYW5pdGl6ZWQuaCcsCi0gICAgICAgICdzbmFwc2hvdF9jb25zdGFudHMuaCcsCi0gICAgICAgICdzeXN0ZW1fc25hcHNob3QuaCcsCi0gICAgICAgICd0aHJlYWRfc25hcHNob3QuaCcsCi0gICAgICAgICd1bmxvYWRlZF9tb2R1bGVfc25hcHNob3QuY2MnLAotICAgICAgICAndW5sb2FkZWRfbW9kdWxlX3NuYXBzaG90LmgnLAotICAgICAgICAnd2luL2NwdV9jb250ZXh0X3dpbi5jYycsCi0gICAgICAgICd3aW4vY3B1X2NvbnRleHRfd2luLmgnLAotICAgICAgICAnd2luL2V4Y2VwdGlvbl9zbmFwc2hvdF93aW4uY2MnLAotICAgICAgICAnd2luL2V4Y2VwdGlvbl9zbmFwc2hvdF93aW4uaCcsCi0gICAgICAgICd3aW4vY2FwdHVyZV9tZW1vcnlfZGVsZWdhdGVfd2luLmNjJywKLSAgICAgICAgJ3dpbi9jYXB0dXJlX21lbW9yeV9kZWxlZ2F0ZV93aW4uaCcsCi0gICAgICAgICd3aW4vbWVtb3J5X21hcF9yZWdpb25fc25hcHNob3Rfd2luLmNjJywKLSAgICAgICAgJ3dpbi9tZW1vcnlfbWFwX3JlZ2lvbl9zbmFwc2hvdF93aW4uaCcsCi0gICAgICAgICd3aW4vbW9kdWxlX3NuYXBzaG90X3dpbi5jYycsCi0gICAgICAgICd3aW4vbW9kdWxlX3NuYXBzaG90X3dpbi5oJywKLSAgICAgICAgJ3dpbi9wZV9pbWFnZV9hbm5vdGF0aW9uc19yZWFkZXIuY2MnLAotICAgICAgICAnd2luL3BlX2ltYWdlX2Fubm90YXRpb25zX3JlYWRlci5oJywKLSAgICAgICAgJ3dpbi9wZV9pbWFnZV9yZWFkZXIuY2MnLAotICAgICAgICAnd2luL3BlX2ltYWdlX3JlYWRlci5oJywKLSAgICAgICAgJ3dpbi9wZV9pbWFnZV9yZXNvdXJjZV9yZWFkZXIuY2MnLAotICAgICAgICAnd2luL3BlX2ltYWdlX3Jlc291cmNlX3JlYWRlci5oJywKLSAgICAgICAgJ3dpbi9wcm9jZXNzX3JlYWRlcl93aW4uY2MnLAotICAgICAgICAnd2luL3Byb2Nlc3NfcmVhZGVyX3dpbi5oJywKLSAgICAgICAgJ3dpbi9wcm9jZXNzX3NuYXBzaG90X3dpbi5jYycsCi0gICAgICAgICd3aW4vcHJvY2Vzc19zbmFwc2hvdF93aW4uaCcsCi0gICAgICAgICd3aW4vcHJvY2Vzc19zdWJyYW5nZV9yZWFkZXIuY2MnLAotICAgICAgICAnd2luL3Byb2Nlc3Nfc3VicmFuZ2VfcmVhZGVyLmgnLAotICAgICAgICAnd2luL3N5c3RlbV9zbmFwc2hvdF93aW4uY2MnLAotICAgICAgICAnd2luL3N5c3RlbV9zbmFwc2hvdF93aW4uaCcsCi0gICAgICAgICd3aW4vdGhyZWFkX3NuYXBzaG90X3dpbi5jYycsCi0gICAgICAgICd3aW4vdGhyZWFkX3NuYXBzaG90X3dpbi5oJywKLSAgICAgICAgJ3g4Ni9jcHVpZF9yZWFkZXIuY2MnLAotICAgICAgICAneDg2L2NwdWlkX3JlYWRlci5oJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxwb3dycHJvZi5saWInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWyd0YXJnZXRfb3M9PSJsaW51eCIgb3IgdGFyZ2V0X29zPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2NhcHR1cmVfbWVtb3J5LmNjJywKLSAgICAgICAgICAgICdjYXB0dXJlX21lbW9yeS5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7ICAjIGVsc2U6IE9TIT0ibGludXgiIGFuZCBPUyE9ImFuZHJvaWQiCi0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydleGNsdWRlJywgJ15lbGYvJ10sCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnXmNyYXNocGFkX3R5cGVzLyddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ15zYW5pdGl6ZWQvJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X2FyY2ghPSJpYTMyIiBhbmQgdGFyZ2V0X2FyY2ghPSJ4NjQiJywgewotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdeeDg2LyddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdebGludXgvJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC9zbmFwc2hvdC9zbmFwc2hvdF90ZXN0Lmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3NuYXBzaG90L3NuYXBzaG90X3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjdiOGFlLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3NuYXBzaG90L3NuYXBzaG90X3Rlc3QuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTQgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbGliJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdzbmFwc2hvdC5neXA6Y3Jhc2hwYWRfc25hcHNob3QnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0ZXN0L3Rlc3RfY3B1X2NvbnRleHQuY2MnLAotICAgICAgICAndGVzdC90ZXN0X2NwdV9jb250ZXh0LmgnLAotICAgICAgICAndGVzdC90ZXN0X2V4Y2VwdGlvbl9zbmFwc2hvdC5jYycsCi0gICAgICAgICd0ZXN0L3Rlc3RfZXhjZXB0aW9uX3NuYXBzaG90LmgnLAotICAgICAgICAndGVzdC90ZXN0X21lbW9yeV9tYXBfcmVnaW9uX3NuYXBzaG90LmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9tZW1vcnlfbWFwX3JlZ2lvbl9zbmFwc2hvdC5oJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9tZW1vcnlfc25hcHNob3QuY2MnLAotICAgICAgICAndGVzdC90ZXN0X21lbW9yeV9zbmFwc2hvdC5oJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9tb2R1bGVfc25hcHNob3QuY2MnLAotICAgICAgICAndGVzdC90ZXN0X21vZHVsZV9zbmFwc2hvdC5oJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9wcm9jZXNzX3NuYXBzaG90LmNjJywKLSAgICAgICAgJ3Rlc3QvdGVzdF9wcm9jZXNzX3NuYXBzaG90LmgnLAotICAgICAgICAndGVzdC90ZXN0X3N5c3RlbV9zbmFwc2hvdC5jYycsCi0gICAgICAgICd0ZXN0L3Rlc3Rfc3lzdGVtX3NuYXBzaG90LmgnLAotICAgICAgICAndGVzdC90ZXN0X3RocmVhZF9zbmFwc2hvdC5jYycsCi0gICAgICAgICd0ZXN0L3Rlc3RfdGhyZWFkX3NuYXBzaG90LmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0JywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbGliJywKLSAgICAgICAgJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbW9kdWxlJywKLSAgICAgICAgJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbW9kdWxlX2xhcmdlJywKLSAgICAgICAgJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbW9kdWxlX3NtYWxsJywKLSAgICAgICAgJ3NuYXBzaG90Lmd5cDpjcmFzaHBhZF9zbmFwc2hvdCcsCi0gICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3Rlc3QvdGVzdC5neXA6Y3Jhc2hwYWRfZ3Rlc3RfbWFpbicsCi0gICAgICAgICcuLi90ZXN0L3Rlc3QuZ3lwOmNyYXNocGFkX3Rlc3QnLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvZ3Rlc3QvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcHVfY29udGV4dF90ZXN0LmNjJywKLSAgICAgICAgJ21lbW9yeV9zbmFwc2hvdF90ZXN0LmNjJywKLSAgICAgICAgJ2NyYXNocGFkX2luZm9fY2xpZW50X29wdGlvbnNfdGVzdC5jYycsCi0gICAgICAgICdjcmFzaHBhZF90eXBlcy9jcmFzaHBhZF9pbmZvX3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ2NyYXNocGFkX3R5cGVzL2ltYWdlX2Fubm90YXRpb25fcmVhZGVyX3Rlc3QuY2MnLAotICAgICAgICAnZWxmL2VsZl9pbWFnZV9yZWFkZXJfdGVzdC5jYycsCi0gICAgICAgICdlbGYvZWxmX2ltYWdlX3JlYWRlcl90ZXN0X25vdGUuUycsCi0gICAgICAgICdsaW51eC9kZWJ1Z19yZW5kZXp2b3VzX3Rlc3QuY2MnLAotICAgICAgICAnbGludXgvZXhjZXB0aW9uX3NuYXBzaG90X2xpbnV4X3Rlc3QuY2MnLAotICAgICAgICAnbGludXgvcHJvY2Vzc19yZWFkZXJfbGludXhfdGVzdC5jYycsCi0gICAgICAgICdsaW51eC9zeXN0ZW1fc25hcHNob3RfbGludXhfdGVzdC5jYycsCi0gICAgICAgICdtYWMvY3B1X2NvbnRleHRfbWFjX3Rlc3QuY2MnLAotICAgICAgICAnbWFjL21hY2hfb19pbWFnZV9hbm5vdGF0aW9uc19yZWFkZXJfdGVzdC5jYycsCi0gICAgICAgICdtYWMvbWFjaF9vX2ltYWdlX3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ21hYy9tYWNoX29faW1hZ2Vfc2VnbWVudF9yZWFkZXJfdGVzdC5jYycsCi0gICAgICAgICdtYWMvcHJvY2Vzc19yZWFkZXJfbWFjX3Rlc3QuY2MnLAotICAgICAgICAnbWFjL3Byb2Nlc3NfdHlwZXNfdGVzdC5jYycsCi0gICAgICAgICdtYWMvc3lzdGVtX3NuYXBzaG90X21hY190ZXN0LmNjJywKLSAgICAgICAgJ21pbmlkdW1wL3Byb2Nlc3Nfc25hcHNob3RfbWluaWR1bXBfdGVzdC5jYycsCi0gICAgICAgICdwb3NpeC90aW1lem9uZV90ZXN0LmNjJywKLSAgICAgICAgJ3Nhbml0aXplZC9wcm9jZXNzX3NuYXBzaG90X3Nhbml0aXplZF90ZXN0LmNjJywKLSAgICAgICAgJ3Nhbml0aXplZC9zYW5pdGl6YXRpb25faW5mb3JtYXRpb25fdGVzdC5jYycsCi0gICAgICAgICd3aW4vY3B1X2NvbnRleHRfd2luX3Rlc3QuY2MnLAotICAgICAgICAnd2luL2V4Y2VwdGlvbl9zbmFwc2hvdF93aW5fdGVzdC5jYycsCi0gICAgICAgICd3aW4vZXh0cmFfbWVtb3J5X3Jhbmdlc190ZXN0LmNjJywKLSAgICAgICAgJ3dpbi9tb2R1bGVfc25hcHNob3Rfd2luX3Rlc3QuY2MnLAotICAgICAgICAnd2luL3BlX2ltYWdlX3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ3dpbi9wcm9jZXNzX3JlYWRlcl93aW5fdGVzdC5jYycsCi0gICAgICAgICd3aW4vcHJvY2Vzc19zbmFwc2hvdF93aW5fdGVzdC5jYycsCi0gICAgICAgICd3aW4vc3lzdGVtX3NuYXBzaG90X3dpbl90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgIyAuZ251Lmhhc2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIE1JUFMgQUJJCi0gICAgICAgIFsndGFyZ2V0X2FyY2ghPSJtaXBzIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWydjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2JvdGhfZHRfaGFzaF9zdHlsZXMnXQotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X21vZHVsZV9jcmFzaHlfaW5pdGlhbGl6ZXInLAotICAgICAgICAgICAgJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3Rfbm9fb3AnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5DTC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2Fubm90YXRpb25zJywKLSAgICAgICAgICAgICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2NyYXNoaW5nX2NoaWxkJywKLSAgICAgICAgICAgICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2R1bXBfd2l0aG91dF9jcmFzaGluZycsCi0gICAgICAgICAgICAnY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9leHRyYV9tZW1vcnlfcmFuZ2VzJywKLSAgICAgICAgICAgICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2ltYWdlX3JlYWRlcicsCi0gICAgICAgICAgICAnY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9pbWFnZV9yZWFkZXJfbW9kdWxlJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9pbmZvX2NsaWVudF9vcHRpb25zX3Rlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvcGllcyc6IFt7Ci0gICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUiknLAotICAgICAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICAgICAnZWxmL3Rlc3RfZXhwb3J0ZWRfc3ltYm9scy5zeW0nLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICctV2wsLS1keW5hbWljLWxpc3Q9dGVzdF9leHBvcnRlZF9zeW1ib2xzLnN5bScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbGRsJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwgeyAgIyBlbHNlOiBPUyE9ImxpbnV4IiBhbmQgT1MhPSJhbmRyb2lkIgotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdeZWxmLyddLAotICAgICAgICAgICAgWydleGNsdWRlJywgJ15jcmFzaHBhZF90eXBlcy8nXSwKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdec2FuaXRpemVkLyddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdebGludXgvJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfbW9kdWxlJywKLSAgICAgICd0eXBlJzogJ2xvYWRhYmxlX21vZHVsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2NyYXNocGFkX2luZm9fY2xpZW50X29wdGlvbnNfdGVzdF9tb2R1bGUuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X21vZHVsZV9sYXJnZScsCi0gICAgICAndHlwZSc6ICdsb2FkYWJsZV9tb2R1bGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdDUkFTSFBBRF9JTkZPX1NJWkVfVEVTVF9NT0RVTEVfTEFSR0U9MScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9pbmZvX3NpemVfdGVzdF9tb2R1bGUuY2MnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9pbmZvX3NpemVfdGVzdF9ub3RlLlMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X21vZHVsZV9zbWFsbCcsCi0gICAgICAndHlwZSc6ICdsb2FkYWJsZV9tb2R1bGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdDUkFTSFBBRF9JTkZPX1NJWkVfVEVTVF9NT0RVTEVfU01BTEw9MScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9pbmZvX3NpemVfdGVzdF9tb2R1bGUuY2MnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF9pbmZvX3NpemVfdGVzdF9ub3RlLlMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2JvdGhfZHRfaGFzaF9zdHlsZXMnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgIyAuZ251Lmhhc2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIE1JUFMgQUJJCi0gICAgICAgIFsndGFyZ2V0X2FyY2ghPSJtaXBzIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdoYXNoX3R5cGVzX3Rlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAjIFRoaXMgbWFrZXMgYGxkYCBlbWl0IGJvdGggLmhhc2ggYW5kIC5nbnUuaGFzaCBzZWN0aW9ucy4KLSAgICAgICAgICAgICctV2wsLS1oYXNoLXN0eWxlPWJvdGgnLAotICAgICAgICAgIF19LAotICAgICAgICBdCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9tb2R1bGVfY3Jhc2h5X2luaXRpYWxpemVyJywKLSAgICAgICAgICAndHlwZSc6ICdsb2FkYWJsZV9tb2R1bGUnLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ21hYy9tYWNoX29faW1hZ2VfYW5ub3RhdGlvbnNfcmVhZGVyX3Rlc3RfbW9kdWxlX2NyYXNoeV9pbml0aWFsaXplci5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X25vX29wJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdtYWMvbWFjaF9vX2ltYWdlX2Fubm90YXRpb25zX3JlYWRlcl90ZXN0X25vX29wLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfY3Jhc2hpbmdfY2hpbGQnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9jcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2NyYXNoaW5nX2NoaWxkLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfZHVtcF93aXRob3V0X2NyYXNoaW5nJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL2NsaWVudC9jbGllbnQuZ3lwOmNyYXNocGFkX2NsaWVudCcsCi0gICAgICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd3aW4vY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9kdW1wX3dpdGhvdXRfY3Jhc2hpbmcuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9leHRyYV9tZW1vcnlfcmFuZ2VzJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL2NsaWVudC9jbGllbnQuZ3lwOmNyYXNocGFkX2NsaWVudCcsCi0gICAgICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfZXh0cmFfbWVtb3J5X3Jhbmdlcy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2ltYWdlX3JlYWRlcicsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfaW1hZ2VfcmVhZGVyLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3NuYXBzaG90X3Rlc3RfaW1hZ2VfcmVhZGVyX21vZHVsZScsCi0gICAgICAgICAgJ3R5cGUnOiAnbG9hZGFibGVfbW9kdWxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL2NsaWVudC9jbGllbnQuZ3lwOmNyYXNocGFkX2NsaWVudCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9jcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2ltYWdlX3JlYWRlcl9tb2R1bGUuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnTm9JbXBvcnRMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfc25hcHNob3RfdGVzdF9hbm5vdGF0aW9ucycsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9jcmFzaHBhZF9zbmFwc2hvdF90ZXN0X2Fubm90YXRpb25zLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3Rlc3QvdGVzdC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC90ZXN0L3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDAyNTZhLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3Rlc3QvdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfdGVzdCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2d0ZXN0L2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZXJyb3JzLmNjJywKLSAgICAgICAgJ2Vycm9ycy5oJywKLSAgICAgICAgJ2ZpbGUuY2MnLAotICAgICAgICAnZmlsZS5oJywKLSAgICAgICAgJ2ZpbGVzeXN0ZW0uY2MnLAotICAgICAgICAnZmlsZXN5c3RlbS5oJywKLSAgICAgICAgJ2d0ZXN0X2RlYXRoLmgnLAotICAgICAgICAnaGV4X3N0cmluZy5jYycsCi0gICAgICAgICdoZXhfc3RyaW5nLmgnLAotICAgICAgICAnbGludXgvZmFrZV9wdHJhY2VfY29ubmVjdGlvbi5jYycsCi0gICAgICAgICdsaW51eC9mYWtlX3B0cmFjZV9jb25uZWN0aW9uLmgnLAotICAgICAgICAnbGludXgvZ2V0X3Rscy5jYycsCi0gICAgICAgICdsaW51eC9nZXRfdGxzLmgnLAotICAgICAgICAnbWFjL2R5bGQuY2MnLAotICAgICAgICAnbWFjL2R5bGQuaCcsCi0gICAgICAgICdtYWMvZXhjZXB0aW9uX3N3YWxsb3dlci5jYycsCi0gICAgICAgICdtYWMvZXhjZXB0aW9uX3N3YWxsb3dlci5oJywKLSAgICAgICAgJ21hYy9tYWNoX2Vycm9ycy5jYycsCi0gICAgICAgICdtYWMvbWFjaF9lcnJvcnMuaCcsCi0gICAgICAgICdtYWMvbWFjaF9tdWx0aXByb2Nlc3MuY2MnLAotICAgICAgICAnbWFjL21hY2hfbXVsdGlwcm9jZXNzLmgnLAotICAgICAgICAnbWFpbl9hcmd1bWVudHMuY2MnLAotICAgICAgICAnbWFpbl9hcmd1bWVudHMuaCcsCi0gICAgICAgICdtdWx0aXByb2Nlc3MuaCcsCi0gICAgICAgICdtdWx0aXByb2Nlc3NfZXhlYy5jYycsCi0gICAgICAgICdtdWx0aXByb2Nlc3NfZXhlYy5oJywKLSAgICAgICAgJ211bHRpcHJvY2Vzc19leGVjX3Bvc2l4LmNjJywKLSAgICAgICAgJ211bHRpcHJvY2Vzc19leGVjX3dpbi5jYycsCi0gICAgICAgICdtdWx0aXByb2Nlc3NfcG9zaXguY2MnLAotICAgICAgICAncHJvY2Vzc190eXBlLmNjJywKLSAgICAgICAgJ3Byb2Nlc3NfdHlwZS5oJywKLSAgICAgICAgJ3Njb3BlZF9ndWFyZGVkX3BhZ2UuaCcsCi0gICAgICAgICdzY29wZWRfZ3VhcmRlZF9wYWdlX3Bvc2l4LmNjJywKLSAgICAgICAgJ3Njb3BlZF9tb2R1bGVfaGFuZGxlLmNjJywKLSAgICAgICAgJ3Njb3BlZF9tb2R1bGVfaGFuZGxlLmgnLAotICAgICAgICAnc2NvcGVkX3RlbXBfZGlyLmNjJywKLSAgICAgICAgJ3Njb3BlZF90ZW1wX2Rpci5oJywKLSAgICAgICAgJ3Njb3BlZF90ZW1wX2Rpcl9wb3NpeC5jYycsCi0gICAgICAgICdzY29wZWRfdGVtcF9kaXJfd2luLmNjJywKLSAgICAgICAgJ3Rlc3RfcGF0aHMuY2MnLAotICAgICAgICAndGVzdF9wYXRocy5oJywKLSAgICAgICAgJ3dpbi9jaGlsZF9sYXVuY2hlci5jYycsCi0gICAgICAgICd3aW4vY2hpbGRfbGF1bmNoZXIuaCcsCi0gICAgICAgICd3aW4vd2luX2NoaWxkX3Byb2Nlc3MuY2MnLAotICAgICAgICAnd2luL3dpbl9jaGlsZF9wcm9jZXNzLmgnLAotICAgICAgICAnd2luL3dpbl9tdWx0aXByb2Nlc3MuY2MnLAotICAgICAgICAnd2luL3dpbl9tdWx0aXByb2Nlc3MuaCcsCi0gICAgICAgICd3aW4vd2luX211bHRpcHJvY2Vzc193aXRoX3RlbXBfZGlyLmNjJywKLSAgICAgICAgJ3dpbi93aW5fbXVsdGlwcm9jZXNzX3dpdGhfdGVtcF9kaXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJy4uJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9oYW5kbGVyL2hhbmRsZXIuZ3lwOmNyYXNocGFkX2hhbmRsZXJfbGliJywKLSAgICAgICAgICAgICcuLi9zbmFwc2hvdC9zbmFwc2hvdC5neXA6Y3Jhc2hwYWRfc25hcHNob3QnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnJChTREtST09UKS91c3IvbGliL2xpYmJzbS5keWxpYicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbHNoZWxsMzIubGliJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15saW51eC8nXSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfZ21vY2tfbWFpbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3Jhc2hwYWRfdGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9ndGVzdC9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvZ3Rlc3QvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0NSQVNIUEFEX1RFU1RfTEFVTkNIRVJfR01PQ0s9MScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdndGVzdF9tYWluLmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfZ3Rlc3RfbWFpbicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3Jhc2hwYWRfdGVzdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9ndGVzdC9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnQ1JBU0hQQURfVEVTVF9MQVVOQ0hFUl9HVEVTVD0xJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2d0ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvdGVzdC90ZXN0X3Rlc3QuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvdGVzdC90ZXN0X3Rlc3QuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQ5MjBlLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3Rlc3QvdGVzdF90ZXN0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3Rlc3RfdGVzdCcsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF90ZXN0X3Rlc3RfbXVsdGlwcm9jZXNzX2V4ZWNfdGVzdF9jaGlsZCcsCi0gICAgICAgICd0ZXN0Lmd5cDpjcmFzaHBhZF9nbW9ja19tYWluJywKLSAgICAgICAgJ3Rlc3QuZ3lwOmNyYXNocGFkX3Rlc3QnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2d0ZXN0L2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9ndGVzdC9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2hleF9zdHJpbmdfdGVzdC5jYycsCi0gICAgICAgICdtYWMvbWFjaF9tdWx0aXByb2Nlc3NfdGVzdC5jYycsCi0gICAgICAgICdtYWluX2FyZ3VtZW50c190ZXN0LmNjJywKLSAgICAgICAgJ211bHRpcHJvY2Vzc19leGVjX3Rlc3QuY2MnLAotICAgICAgICAnbXVsdGlwcm9jZXNzX3Bvc2l4X3Rlc3QuY2MnLAotICAgICAgICAnc2NvcGVkX2d1YXJkZWRfcGFnZV90ZXN0LmNjJywKLSAgICAgICAgJ3Njb3BlZF90ZW1wX2Rpcl90ZXN0LmNjJywKLSAgICAgICAgJ3Rlc3RfcGF0aHNfdGVzdC5jYycsCi0gICAgICAgICd3aW4vd2luX2NoaWxkX3Byb2Nlc3NfdGVzdC5jYycsCi0gICAgICAgICd3aW4vd2luX211bHRpcHJvY2Vzc190ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfdGVzdF90ZXN0X211bHRpcHJvY2Vzc19leGVjX3Rlc3RfY2hpbGQnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9taW5pX2Nocm9taXVtLmd5cDpiYXNlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ211bHRpcHJvY2Vzc19leGVjX3Rlc3RfY2hpbGQuY2MnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvdGhpcmRfcGFydHkvZ2V0b3B0L2dldG9wdC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9nZXRvcHQvZ2V0b3B0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU4NC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9nZXRvcHQvZ2V0b3B0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi8uLi9idWlsZC9jcmFzaHBhZC5neXBpJywKLSAgXSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWydPUz09IndpbiInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdnZXRvcHQnLAotICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdnZXRvcHQuY2MnLAotICAgICAgICAgICAgJ2dldG9wdC5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LCB7Ci0gICAgICAndGFyZ2V0cyc6IFtdCi0gICAgfV0KLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L2d0ZXN0L2dtb2NrLmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L2d0ZXN0L2dtb2NrLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk5NzkyZi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9ndGVzdC9nbW9jay5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uLy4uL2J1aWxkL2NyYXNocGFkX2RlcGVuZGVuY2llcy5neXBpJywKLSAgXSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWycxPT0xJywgeyAgIyBEZWZlciBwcm9jZXNzaW5nIHVudGlsIGNyYXNocGFkX2RlcGVuZGVuY2llcyBpcyBzZXQKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY3Jhc2hwYWRfZGVwZW5kZW5jaWVzPT0ic3RhbmRhbG9uZSInLCB7Ci0gICAgICAgICAgICAnZ21vY2tfZGlyJzogJ2d0ZXN0L2dvb2dsZW1vY2snLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnY3Jhc2hwYWRfZGVwZW5kZW5jaWVzPT0iZXh0ZXJuYWwiJywgewotICAgICAgICAgICAgJ2dtb2NrX2Rpcic6ICcuLi8uLi8uLi8uLi9nbW9jaycsCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICBdLAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICMgZ21vY2sgcmVsaWVzIGhlYXZpbHkgb24gb2JqZWN0cyB3aXRoIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLgotICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICdXQVJOSU5HX0NGTEFHUyEnOiBbCi0gICAgICAgICctV2V4aXQtdGltZS1kZXN0cnVjdG9ycycsCi0gICAgICBdLAotICAgIH0sCi0gICAgJ2NmbGFncyEnOiBbCi0gICAgICAnLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMnLAotICAgIF0sCi0gIH0sCi0KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dtb2NrJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KGdtb2NrX2RpciknLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svZ21vY2stYWN0aW9ucy5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9pbmNsdWRlL2dtb2NrL2dtb2NrLWNhcmRpbmFsaXRpZXMuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9nbW9jay1mdW5jdGlvbi1tb2NrZXIuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9nbW9jay1nZW5lcmF0ZWQtYWN0aW9ucy5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9pbmNsdWRlL2dtb2NrL2dtb2NrLWdlbmVyYXRlZC1mdW5jdGlvbi1tb2NrZXJzLmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svZ21vY2stZ2VuZXJhdGVkLW1hdGNoZXJzLmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svZ21vY2stbWF0Y2hlcnMuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9nbW9jay1tb3JlLWFjdGlvbnMuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9nbW9jay1tb3JlLW1hdGNoZXJzLmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svZ21vY2stbmljZS1zdHJpY3QuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9nbW9jay1zcGVjLWJ1aWxkZXJzLmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svZ21vY2suaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9pbnRlcm5hbC9jdXN0b20vZ21vY2stZ2VuZXJhdGVkLWFjdGlvbnMuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9pbnRlcm5hbC9jdXN0b20vZ21vY2stbWF0Y2hlcnMuaCcsCi0gICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZS9nbW9jay9pbnRlcm5hbC9jdXN0b20vZ21vY2stcG9ydC5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9pbmNsdWRlL2dtb2NrL2ludGVybmFsL2N1c3RvbS9nbW9jay1wcC5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9pbmNsdWRlL2dtb2NrL2ludGVybmFsL2dtb2NrLWdlbmVyYXRlZC1pbnRlcm5hbC11dGlscy5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9pbmNsdWRlL2dtb2NrL2ludGVybmFsL2dtb2NrLWludGVybmFsLXV0aWxzLmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL2luY2x1ZGUvZ21vY2svaW50ZXJuYWwvZ21vY2stcG9ydC5oJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9zcmMvZ21vY2stYWxsLmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9zcmMvZ21vY2stY2FyZGluYWxpdGllcy5jYycsCi0gICAgICAgICc8KGdtb2NrX2Rpcikvc3JjL2dtb2NrLWludGVybmFsLXV0aWxzLmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9zcmMvZ21vY2stbWF0Y2hlcnMuY2MnLAotICAgICAgICAnPChnbW9ja19kaXIpL3NyYy9nbW9jay1zcGVjLWJ1aWxkZXJzLmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9zcmMvZ21vY2suY2MnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgJzwoZ21vY2tfZGlyKS9zcmMvZ21vY2stYWxsLmNjJywKLSAgICAgIF0sCi0KLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KGdtb2NrX2RpcikvaW5jbHVkZScsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY2xhbmchPTAnLCB7Ci0gICAgICAgICAgICAjIFRoZSBNT0NLX01FVEhPRG4oKSBtYWNyb3MgZG8gbm90IHNwZWNpZnkg4oCcb3ZlcnJpZGXigJ0sIHdoaWNoCi0gICAgICAgICAgICAjIHRyaWdnZXJzIHRoaXMgd2FybmluZyBpbiB1c2Vyczog4oCcZXJyb3I6ICdNZXRob2QnIG92ZXJyaWRlcyBhCi0gICAgICAgICAgICAjIG1lbWJlciBmdW5jdGlvbiBidXQgaXMgbm90IG1hcmtlZCAnb3ZlcnJpZGUnCi0gICAgICAgICAgICAjIFstV2Vycm9yLC1XaW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGVd4oCdLiBTdXBwcmVzcyB0aGVzZQotICAgICAgICAgICAgIyB3YXJuaW5ncyB1bnRpbCBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2dvb2dsZXRlc3QvaXNzdWVzLzUzMyBpcwotICAgICAgICAgICAgIyBmaXhlZC4KLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICAgICAgICctV25vLWluY29uc2lzdGVudC1taXNzaW5nLW92ZXJyaWRlJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1Xbm8taW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGUnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJ2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dtb2NrX21haW4nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dtb2NrJywKLSAgICAgICAgJ2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGdtb2NrX2Rpcikvc3JjL2dtb2NrX21haW4uY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbW9ja190ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ21vY2snLAotICAgICAgICAnZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoZ21vY2tfZGlyKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICdnbW9jaycsCi0gICAgICAgICdndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbW9ja19hbGxfdGVzdCcsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ21vY2tfdGVzdF9leGVjdXRhYmxlJywKLSAgICAgICAgJ2dtb2NrX21haW4nLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdndGVzdC9nb29nbGV0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoZ21vY2tfZGlyKS90ZXN0L2dtb2NrLWFjdGlvbnNfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1jYXJkaW5hbGl0aWVzX3Rlc3QuY2MnLAotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2stZnVuY3Rpb24tbW9ja2VyX3Rlc3QuY2MnLAotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2stZ2VuZXJhdGVkLWFjdGlvbnNfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1nZW5lcmF0ZWQtZnVuY3Rpb24tbW9ja2Vyc190ZXN0LmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS90ZXN0L2dtb2NrLWdlbmVyYXRlZC1tYXRjaGVyc190ZXN0LmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS90ZXN0L2dtb2NrLWludGVybmFsLXV0aWxzX3Rlc3QuY2MnLAotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2stbWF0Y2hlcnNfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1tb3JlLWFjdGlvbnNfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1uaWNlLXN0cmljdF90ZXN0LmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS90ZXN0L2dtb2NrLXBvcnRfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1wcC1zdHJpbmdfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9jay1wcF90ZXN0LmNjJywKLSAgICAgICAgJzwoZ21vY2tfZGlyKS90ZXN0L2dtb2NrLXNwZWMtYnVpbGRlcnNfdGVzdC5jYycsCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9ja190ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgIFsnY2xhbmchPTAnLCB7Ci0gICAgICAgICAgIyBGb3IgZ3Rlc3QvZ29vZ2xlbW9jay90ZXN0L2dtb2NrLW1hdGNoZXJzX3Rlc3QuY2PigJlzCi0gICAgICAgICAgIyBVbnN0cmVhbWFibGU6OnZhbHVlXy4KLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ1dBUk5JTkdfQ0ZMQUdTJzogWwotICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXByaXZhdGUtZmllbGQnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtcHJpdmF0ZS1maWVsZCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ21vY2tfbGlua190ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdnbW9ja190ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgICAnZ21vY2tfbWFpbicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGdtb2NrX2RpcikvdGVzdC9nbW9ja19saW5rX3Rlc3QuY2MnLAotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2tfbGlua190ZXN0LmgnLAotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2tfbGluazJfdGVzdC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dtb2NrX3N0cmVzc190ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdnbW9ja190ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChnbW9ja19kaXIpL3Rlc3QvZ21vY2tfc3RyZXNzX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnbW9ja19hbGxfdGVzdHMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ21vY2tfYWxsX3Rlc3QnLAotICAgICAgICAnZ21vY2tfbGlua190ZXN0JywKLSAgICAgICAgJ2dtb2NrX3N0cmVzc190ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L2d0ZXN0L2d0ZXN0Lmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L2d0ZXN0L2d0ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE2Mzk5Yi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9ndGVzdC9ndGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uLy4uL2J1aWxkL2NyYXNocGFkX2RlcGVuZGVuY2llcy5neXBpJywKLSAgXSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWycxPT0xJywgeyAgIyBEZWZlciBwcm9jZXNzaW5nIHVudGlsIGNyYXNocGFkX2RlcGVuZGVuY2llcyBpcyBzZXQKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY3Jhc2hwYWRfZGVwZW5kZW5jaWVzPT0ic3RhbmRhbG9uZSInLCB7Ci0gICAgICAgICAgICAnZ3Rlc3RfZGlyJzogJ2d0ZXN0L2dvb2dsZXRlc3QnLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnY3Jhc2hwYWRfZGVwZW5kZW5jaWVzPT0iZXh0ZXJuYWwiJywgewotICAgICAgICAgICAgJ2d0ZXN0X2Rpcic6ICcuLi8uLi8uLi8uLi9ndGVzdCcsCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICBdLAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICMgZ3Rlc3QgcmVsaWVzIGhlYXZpbHkgb24gb2JqZWN0cyB3aXRoIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uLgotICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICdXQVJOSU5HX0NGTEFHUyEnOiBbCi0gICAgICAgICctV2V4aXQtdGltZS1kZXN0cnVjdG9ycycsCi0gICAgICBdLAotICAgIH0sCi0gICAgJ2NmbGFncyEnOiBbCi0gICAgICAnLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMnLAotICAgIF0sCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsnT1M9PSJhbmRyb2lkIiBhbmQgYW5kcm9pZF9hcGlfbGV2ZWwhPSIiIGFuZCBhbmRyb2lkX2FwaV9sZXZlbDwyNCcsIHsKLSAgICAgICAgJ2RlZmluZXMhJzogWwotICAgICAgICAgICMgQWx0aG91Z2ggbWFueSBzeXN0ZW0gaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlIHRvIDMyLWJpdCBjb2RlIHdpdGgKLSAgICAgICAgICAjIDY0LWJpdCBvZmZfdCBhdCBBUEkgMjEsIHRoZSByb3V0aW5lcyBpbiA8c3RkaW8uaD4gYXJlIG5vdCB1bnRpbCBBUEkKLSAgICAgICAgICAjIDI0LiBndGVzdCBkb2VzbuKAmXQgbWFrZSB1c2Ugb2YgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5LCBidXQgY2FuCi0gICAgICAgICAgIyByZWFjaCB0aGVtIGluZGlyZWN0bHkgdmlhIHRoZSBDKysgc3RhbmRhcmQgbGlicmFyeS4gRGlzYWJsZSA2NC1iaXQKLSAgICAgICAgICAjIG9mZl90IHByaW9yIHRvIEFQSSAyNCBzbyB0aGF0IHRoZXNlIHVzZXMgY2FuIHdvcmsuIFNpbmNlIG5vdGhpbmcKLSAgICAgICAgICAjIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiBvZmZfdCBzaG91bGQgZXNjYXBlIGd0ZXN04oCZcyBvd24gQVBJLCB0aGlzCi0gICAgICAgICAgIyBzaG91bGQgYmUgc2FmZSBldmVuIGluIGEgcHJvZ3JhbSB0aGF0IG90aGVyd2lzZSB1c2VzIGEgNjQtYml0IG9mZl90LgotICAgICAgICAgICdfRklMRV9PRkZTRVRfQklUUz02NCcsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlL2d0ZXN0L2d0ZXN0LWRlYXRoLXRlc3QuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdC1tYXRjaGVycy5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlL2d0ZXN0L2d0ZXN0LW1lc3NhZ2UuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdC1wYXJhbS10ZXN0LmgnLAotICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QtcHJpbnRlcnMuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdC1zcGkuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdC10ZXN0LXBhcnQuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdC10eXBlZC10ZXN0LmgnLAotICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdF9wcmVkX2ltcGwuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9ndGVzdF9wcm9kLmgnLAotICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvY3VzdG9tL2d0ZXN0LXBvcnQuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9jdXN0b20vZ3Rlc3QtcHJpbnRlcnMuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9jdXN0b20vZ3Rlc3QuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1kZWF0aC10ZXN0LWludGVybmFsLmgnLAotICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtZmlsZXBhdGguaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1pbnRlcm5hbC5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBhcmFtLXV0aWwtZ2VuZXJhdGVkLmgnLAotICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUvZ3Rlc3QvaW50ZXJuYWwvZ3Rlc3QtcGFyYW0tdXRpbC5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBvcnQtYXJjaC5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9pbmNsdWRlL2d0ZXN0L2ludGVybmFsL2d0ZXN0LXBvcnQuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC1zdHJpbmcuaCcsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvaW5jbHVkZS9ndGVzdC9pbnRlcm5hbC9ndGVzdC10eXBlLXV0aWwuaCcsCi0gICAgICAgICc8KGd0ZXN0X2Rpcikvc3JjL2d0ZXN0LWFsbC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2Rpcikvc3JjL2d0ZXN0LWRlYXRoLXRlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3NyYy9ndGVzdC1maWxlcGF0aC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2Rpcikvc3JjL2d0ZXN0LWludGVybmFsLWlubC5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9zcmMvZ3Rlc3QtbWF0Y2hlcnMuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3NyYy9ndGVzdC1wb3J0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9zcmMvZ3Rlc3QtcHJpbnRlcnMuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3NyYy9ndGVzdC10ZXN0LXBhcnQuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3NyYy9ndGVzdC10eXBlZC10ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9zcmMvZ3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS9zcmMvZ3Rlc3QtYWxsLmNjJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChndGVzdF9kaXIpL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2NyYXNocGFkX2RlcGVuZGVuY2llcz09ImV4dGVybmFsIicsIHsKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJzwoZ3Rlc3RfZGlyKS8uLi8uLicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdHVU5JVF9OT19HT09HTEUzPTEnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAnPChndGVzdF9kaXIpLy4uLy4uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0dVTklUX05PX0dPT0dMRTM9MScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9tYWluJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGd0ZXN0X2Rpcikvc3JjL2d0ZXN0X21haW4uY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ3Rlc3QnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChndGVzdF9kaXIpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgJ2d0ZXN0JywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ3Rlc3RfYWxsX3Rlc3QnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2d0ZXN0X3Rlc3RfZXhlY3V0YWJsZScsCi0gICAgICAgICdndGVzdF9tYWluJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LWRlYXRoLXRlc3RfdGVzdC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdC1maWxlcGF0aF90ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LWxpbmtlZF9wdHJfdGVzdC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdC1tZXNzYWdlX3Rlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3Qtb3B0aW9uc190ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LXBvcnRfdGVzdC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdC1wcmludGVyc190ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LXRlc3QtcGFydF90ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LXR5cGVkLXRlc3QyX3Rlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3QtdHlwZWQtdGVzdF90ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0LXR5cGVkLXRlc3RfdGVzdC5oJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0X21haW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3RfcHJlZF9pbXBsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0X3Byb2RfdGVzdC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdF9za2lwX3Rlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3RfdW5pdHRlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvcHJvZHVjdGlvbi5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9wcm9kdWN0aW9uLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9lbnZpcm9ubWVudF90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3RfZW52aXJvbm1lbnRfdGVzdC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2d0ZXN0X2xpc3RlbmVyX3Rlc3QnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2d0ZXN0X3Rlc3RfZXhlY3V0YWJsZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdC1saXN0ZW5lcl90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ3Rlc3Rfbm9fdGVzdCcsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ3Rlc3RfdGVzdF9leGVjdXRhYmxlJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzwoZ3Rlc3RfZGlyKS90ZXN0L2d0ZXN0X25vX3Rlc3RfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9wYXJhbV90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3QtcGFyYW0tdGVzdDJfdGVzdC5jYycsCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdC1wYXJhbS10ZXN0X3Rlc3QuY2MnLAotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3QtcGFyYW0tdGVzdF90ZXN0LmgnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgWydjbGFuZyE9MCcsIHsKLSAgICAgICAgICAjIEZvciBndGVzdC9nb29nbGVtb2NrL3Rlc3QvZ21vY2stbWF0Y2hlcnNfdGVzdC5jY+KAmXMKLSAgICAgICAgICAjIFVuc3RyZWFtYWJsZTo6dmFsdWVfLgotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtcHJpdmF0ZS1maWVsZCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICctV25vLXVudXNlZC1wcml2YXRlLWZpZWxkJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9wcmVtYXR1cmVfZXhpdF90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3RfcHJlbWF0dXJlX2V4aXRfdGVzdC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2d0ZXN0X3JlcGVhdF90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3RfcmVwZWF0X3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9zb2xlX2hlYWRlcl90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgICAnZ3Rlc3RfbWFpbicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdF9zb2xlX2hlYWRlcl90ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ3Rlc3Rfc3RyZXNzX3Rlc3QnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2d0ZXN0X3Rlc3RfZXhlY3V0YWJsZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KGd0ZXN0X2RpcikvdGVzdC9ndGVzdF9zdHJlc3NfdGVzdC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2d0ZXN0X3VuaXR0ZXN0X2FwaV90ZXN0JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdndGVzdF90ZXN0X2V4ZWN1dGFibGUnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChndGVzdF9kaXIpL3Rlc3QvZ3Rlc3QtdW5pdHRlc3QtYXBpX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdndGVzdF9hbGxfdGVzdHMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZ3Rlc3RfYWxsX3Rlc3QnLAotICAgICAgICAnZ3Rlc3RfZW52aXJvbm1lbnRfdGVzdCcsCi0gICAgICAgICdndGVzdF9saXN0ZW5lcl90ZXN0JywKLSAgICAgICAgJ2d0ZXN0X25vX3Rlc3QnLAotICAgICAgICAnZ3Rlc3RfcGFyYW1fdGVzdCcsCi0gICAgICAgICdndGVzdF9wcmVtYXR1cmVfZXhpdF90ZXN0JywKLSAgICAgICAgJ2d0ZXN0X3JlcGVhdF90ZXN0JywKLSAgICAgICAgJ2d0ZXN0X3NvbGVfaGVhZGVyX3Rlc3QnLAotICAgICAgICAnZ3Rlc3Rfc3RyZXNzX3Rlc3QnLAotICAgICAgICAnZ3Rlc3RfdW5pdHRlc3RfYXBpX3Rlc3QnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvdGhpcmRfcGFydHkvbHNzL2xzcy5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9sc3MvbHNzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiOWIzYS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9sc3MvbHNzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xzcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdzb3VyY2VzJzogWyAnbHNzLmgnIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgIyBneXAgaXMgb25seSB1c2VkIGluIGNpcmN1bXN0YW5jZXMgd2hlbiB0aGUgZW1iZWRkZWQgbHNzIGlzIHVzZWQuCi0gICAgICAgICdkZWZpbmVzJzogWyAnQ1JBU0hQQURfTFNTX1NPVVJDRV9FTUJFRERFRCcgXQotICAgICAgfSwKLSAgICB9Ci0gIF0KLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGU5MzU3Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IFRoZSBDcmFzaHBhZCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnLi4vLi4vYnVpbGQvY3Jhc2hwYWRfZGVwZW5kZW5jaWVzLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAjIFRvIHN1cHBvcnQgQ3Jhc2hwYWTigJlzIHN0YW5kYWxvbmUgYnVpbGQgYW5kIGl0cyBidWlsZCBkZXBlbmRpbmcgb24KLSAgICAgICMgZXh0ZXJuYWwgbGlicmFyaWVzLCBDcmFzaHBhZCBjb2RlIGRlcGVuZGluZyBvbiBiYXNlIHNob3VsZCBkbyBzbyB0aHJvdWdoCi0gICAgICAjIHRoaXMgc2hpbSwgd2hpY2ggd2lsbCBlaXRoZXIgZ2V0IGJhc2UgZnJvbSBtaW5pX2Nocm9taXVtIG9yIGFuIGV4dGVybmFsCi0gICAgICAjIGxpYnJhcnkgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCB0eXBlLgotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Jhc2UnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydjcmFzaHBhZF9kZXBlbmRlbmNpZXM9PSJzdGFuZGFsb25lIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21pbmlfY2hyb21pdW0vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAgICAgJ21pbmlfY2hyb21pdW0vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydjcmFzaHBhZF9kZXBlbmRlbmNpZXM9PSJleHRlcm5hbCInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwIGIvdGhpcmRfcGFydHkvY3Jhc2hwYWQvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDljNjhiMC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENyYXNocGFkIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi8uLi9idWlsZC9jcmFzaHBhZF9kZXBlbmRlbmNpZXMuZ3lwaScsCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnMT09MScsIHsgICMgRGVmZXIgcHJvY2Vzc2luZyB1bnRpbCBjcmFzaHBhZF9kZXBlbmRlbmNpZXMgaXMgc2V0Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ2NyYXNocGFkX2RlcGVuZGVuY2llcz09ImV4dGVybmFsIicsIHsKLSAgICAgICAgICAgICd6bGliX3NvdXJjZSUnOiAnZXh0ZXJuYWwnLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ09TIT0id2luIicsIHsKLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgc3lzdGVtIHpsaWIgYnkgZGVmYXVsdCB3aGVyZSBhdmFpbGFibGUsIGFzIGl0IGlzIG9uIG1vc3QKLSAgICAgICAgICAgICAgICAjIHBsYXRmb3Jtcy4gV2luZG93cyBkb2VzIG5vdCBoYXZlIGEgc3lzdGVtIHpsaWIsIHNvIHVzZSDigJxlbWJlZGRlZOKAnQotICAgICAgICAgICAgICAgICMgd2hpY2ggZGlyZWN0cyB0aGUgYnVpbGQgdG8gdXNlIHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgemxpYgotICAgICAgICAgICAgICAgICMgc3ViZGlyZWN0b3J5LgotICAgICAgICAgICAgICAgICd6bGliX3NvdXJjZSUnOiAnc3lzdGVtJywKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICd6bGliX3NvdXJjZSUnOiAnZW1iZWRkZWQnLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnemxpYicsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd6bGliX3NvdXJjZT09InN5c3RlbSInLCB7Ci0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NSQVNIUEFEX1pMSUJfU09VUkNFX1NZU1RFTScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL3Vzci9saWIvbGliei5keWxpYicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnLWx6JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnemxpYl9zb3VyY2U9PSJlbWJlZGRlZCInLCB7Ci0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICd6bGliJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0NSQVNIUEFEX1pMSUJfU09VUkNFX0VNQkVEREVEJywKLSAgICAgICAgICAgICdIQVZFX1NUREFSR19IJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ3psaWInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQ1JBU0hQQURfWkxJQl9TT1VSQ0VfRU1CRURERUQnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3psaWIvYWRsZXIzMi5jJywKLSAgICAgICAgICAgICd6bGliL2NvbXByZXNzLmMnLAotICAgICAgICAgICAgJ3psaWIvY3JjMzIuYycsCi0gICAgICAgICAgICAnemxpYi9jcmMzMi5oJywKLSAgICAgICAgICAgICd6bGliL2NyY19mb2xkaW5nLmMnLAotICAgICAgICAgICAgJ3psaWIvZGVmbGF0ZS5jJywKLSAgICAgICAgICAgICd6bGliL2RlZmxhdGUuaCcsCi0gICAgICAgICAgICAnemxpYi9maWxsX3dpbmRvd19zc2UuYycsCi0gICAgICAgICAgICAnemxpYi9nemNsb3NlLmMnLAotICAgICAgICAgICAgJ3psaWIvZ3pndXRzLmgnLAotICAgICAgICAgICAgJ3psaWIvZ3psaWIuYycsCi0gICAgICAgICAgICAnemxpYi9nenJlYWQuYycsCi0gICAgICAgICAgICAnemxpYi9nendyaXRlLmMnLAotICAgICAgICAgICAgJ3psaWIvaW5mYmFjay5jJywKLSAgICAgICAgICAgICd6bGliL2luZmZhc3QuYycsCi0gICAgICAgICAgICAnemxpYi9pbmZmYXN0LmgnLAotICAgICAgICAgICAgJ3psaWIvaW5mZml4ZWQuaCcsCi0gICAgICAgICAgICAnemxpYi9pbmZsYXRlLmMnLAotICAgICAgICAgICAgJ3psaWIvaW5mbGF0ZS5oJywKLSAgICAgICAgICAgICd6bGliL2luZnRyZWVzLmMnLAotICAgICAgICAgICAgJ3psaWIvaW5mdHJlZXMuaCcsCi0gICAgICAgICAgICAnemxpYi9uYW1lcy5oJywKLSAgICAgICAgICAgICd6bGliL3NpbWRfc3R1Yi5jJywKLSAgICAgICAgICAgICd6bGliL3RyZWVzLmMnLAotICAgICAgICAgICAgJ3psaWIvdHJlZXMuaCcsCi0gICAgICAgICAgICAnemxpYi91bmNvbXByLmMnLAotICAgICAgICAgICAgJ3psaWIveDg2LmMnLAotICAgICAgICAgICAgJ3psaWIveDg2LmgnLAotICAgICAgICAgICAgJ3psaWIvemNvbmYuaCcsCi0gICAgICAgICAgICAnemxpYi96bGliLmgnLAotICAgICAgICAgICAgJ3psaWIvenV0aWwuYycsCi0gICAgICAgICAgICAnemxpYi96dXRpbC5oJywKLSAgICAgICAgICAgICd6bGliX2NyYXNocGFkLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iaWEzMiIgb3IgdGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgJ3psaWIvc2ltZF9zdHViLmMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICctbXNzZTQuMicsCi0gICAgICAgICAgICAgICAgJy1tcGNsbXVsJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdPVEhFUl9DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICAgICAnLW1zc2U0LjInLAotICAgICAgICAgICAgICAgICAgJy1tcGNsbXVsJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgJ3psaWIvY3JjX2ZvbGRpbmcuYycsCi0gICAgICAgICAgICAgICAgJ3psaWIvZmlsbF93aW5kb3dfc3NlLmMnLAotICAgICAgICAgICAgICAgICd6bGliL3g4Ni5jJywKLSAgICAgICAgICAgICAgICAnemxpYi94ODYuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnT1MhPSJ3aW4iJywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnSEFWRV9ISURERU4nLAotICAgICAgICAgICAgICAgICdIQVZFX1VOSVNURF9IJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbCi0gICAgICAgICAgICAgICAgNDEzMSwgICMgdXNlcyBvbGQtc3R5bGUgZGVjbGFyYXRvcgotICAgICAgICAgICAgICAgIDQyNDQsICAjIGNvbnZlcnNpb24gZnJvbSAndDEnIHRvICd0MicsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQotICAgICAgICAgICAgICAgIDQyNDUsICAjIGNvbnZlcnNpb24gZnJvbSAndDEnIHRvICd0MicsIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaAotICAgICAgICAgICAgICAgIDQyNjcsICAjIGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAndCcsIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YQotICAgICAgICAgICAgICAgIDQzMjQsICAjIHN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1ZSB0byBhbGlnbm1lbnQgc3BlY2lmaWVyCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd6bGliX3NvdXJjZT09ImV4dGVybmFsIicsIHsKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQ1JBU0hQQURfWkxJQl9TT1VSQ0VfRVhURVJOQUwnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cDp6bGliJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3Rvb2xzL3Rvb2xzLmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3Rvb2xzL3Rvb2xzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJhYjI5YS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC90b29scy90b29scy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfdG9vbF9zdXBwb3J0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0b29sX3N1cHBvcnQuY2MnLAotICAgICAgICAndG9vbF9zdXBwb3J0LmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjcmFzaHBhZF9kYXRhYmFzZV91dGlsJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICcuLi9jbGllbnQvY2xpZW50Lmd5cDpjcmFzaHBhZF9jbGllbnQnLAotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi91dGlsL3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdjcmFzaHBhZF9kYXRhYmFzZV91dGlsLmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfaHR0cF91cGxvYWQnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnY3Jhc2hwYWRfdG9vbF9zdXBwb3J0JywKLSAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY3Jhc2hwYWRfaHR0cF91cGxvYWQuY2MnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnZW5lcmF0ZV9kdW1wJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2NyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAnLi4vbWluaWR1bXAvbWluaWR1bXAuZ3lwOmNyYXNocGFkX21pbmlkdW1wJywKLSAgICAgICAgJy4uL3NuYXBzaG90L3NuYXBzaG90Lmd5cDpjcmFzaHBhZF9zbmFwc2hvdCcsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnZ2VuZXJhdGVfZHVtcC5jYycsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdPVEhFUl9MREZMQUdTJzogWwotICAgICAgICAgICAgICAnLXNlY3RjcmVhdGUnLAotICAgICAgICAgICAgICAnX19URVhUJywKLSAgICAgICAgICAgICAgJ19faW5mb19wbGlzdCcsCi0gICAgICAgICAgICAgICc8KHNlY3Rhc2thY2Nlc3NfaW5mb19wbGlzdCknCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICMgUHJvZ3JhbXMgdGhhdCB1c2UgdGFza19mb3JfcGlkKCkgY2FuIGluZGljYXRlIHRvIHRhc2tnYXRlZCg4KSBpbiB0aGVpcgotICAgICAgICAjIEluZm8ucGxpc3QgdGhhdCB0aGV5IGFyZSBhbGxvd2VkIHRvIGNhbGwgdGhhdCBmdW5jdGlvbi4gSW4gb3JkZXIgZm9yCi0gICAgICAgICMgdGhpcyB0byB3b3JrLCB0aGUgcHJvZ3JhbXMgaW4gcXVlc3Rpb24gbXVzdCBiZSBzaWduZWQgYnkgYW4gYXV0aG9yaXR5Ci0gICAgICAgICMgdHJ1c3RlZCBieSB0aGUgc3lzdGVtLiBTaWduaW5nIGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlIGJ1aWxkLCBidXQKLSAgICAgICAgIyB0aGUga2V5IHRvIG1ha2UgdGhpcyB3b3JrIGlzIHBsYWNlZCBpbiBJbmZvLnBsaXN0IHRvIGVuYWJsZSB0aGUKLSAgICAgICAgIyBkZXNpcmVkIGJlaGF2aW9yIG9uY2UgdGhlIHRvb2xzIHRoYXQgcmVxdWlyZSB0aGlzIGFjY2VzcyBhcmUgc2lnbmVkLgotICAgICAgICAjCi0gICAgICAgICMgVGhlIHRvb2xzIGJ1aWx0IGhlcmUgYXJlIGZsYXQtZmlsZSBleGVjdXRhYmxlcywgYW5kIGFyZSBub3QgYnVuZGxlZC4KLSAgICAgICAgIyBUbyBoYXZlIGFuIEluZm8ucGxpc3QsIHRoZXkgbXVzdCBoYXZlIGEgc3BlY2lhbCBfX1RFWFQsX19pbmZvX3BsaXN0Ci0gICAgICAgICMgc2VjdGlvbi4gVGhpcyBzZWN0aW9uIGlzIGNyZWF0ZWQgYXQgbGluayB0aW1lLgotICAgICAgICAjCi0gICAgICAgICMgVGhlIEluZm8ucGxpc3QgZm9yIHRoaXMgcHVycG9zZSBpcyBtYWMvc2VjdGFza2FjY2Vzc19pbmZvLnBsaXN0IGFuZCBpcwotICAgICAgICAjIHJlZmVyZW5jZWQgYnkgT1RIRVJfTERGTEFHUy4gbmluamEgcnVucyB0aGUgbGluayBzdGVwIGZyb20gdGhlIG91dHB1dAotICAgICAgICAjIGRpcmVjdG9yeSBzdWNoIGFzIG91dC9SZWxlYXNlLCBhbmQgcmVxdWlyZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gdGhhdAotICAgICAgICAjIGRpcmVjdG9yeS4gWGNvZGUgcnVucyB0aGUgbGluayBzdGVwIGZyb20gdGhlIGRpcmVjdG9yeSBvZiB0aGUKLSAgICAgICAgIyAueGNvZGVwcm9qLCB3aGljaCBpcyB0aGUgZGlyZWN0b3J5IG9mIHRoZSAuZ3lwIGZpbGUuCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnR0VORVJBVE9SPT0ibmluamEiJywgewotICAgICAgICAgICAgJ3NlY3Rhc2thY2Nlc3NfaW5mb19wbGlzdCc6ICc8IShwd2QpL21hYy9zZWN0YXNrYWNjZXNzX2luZm8ucGxpc3QnLAotICAgICAgICAgIH0sIHsgICMgZWxzZTogR0VORVJBVE9SIT0ibmluamEiCi0gICAgICAgICAgICAnc2VjdGFza2FjY2Vzc19pbmZvX3BsaXN0JzogJ21hYy9zZWN0YXNrYWNjZXNzX2luZm8ucGxpc3QnLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfSwKLQotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY2F0Y2hfZXhjZXB0aW9uX3Rvb2wnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnY3Jhc2hwYWRfdG9vbF9zdXBwb3J0JywKLSAgICAgICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnLi4nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnbWFjL2NhdGNoX2V4Y2VwdGlvbl90b29sLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2V4Y2VwdGlvbl9wb3J0X3Rvb2wnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnY3Jhc2hwYWRfdG9vbF9zdXBwb3J0JywKLSAgICAgICAgICAgICcuLi9jb21wYXQvY29tcGF0Lmd5cDpjcmFzaHBhZF9jb21wYXQnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnLi4nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnbWFjL2V4Y2VwdGlvbl9wb3J0X3Rvb2wuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ09USEVSX0xERkxBR1MnOiBbCi0gICAgICAgICAgICAgICctc2VjdGNyZWF0ZScsCi0gICAgICAgICAgICAgICdfX1RFWFQnLAotICAgICAgICAgICAgICAnX19pbmZvX3BsaXN0JywKLSAgICAgICAgICAgICAgJzwoc2VjdGFza2FjY2Vzc19pbmZvX3BsaXN0KScKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdvbl9kZW1hbmRfc2VydmljZV90b29sJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ2NyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdtYWMvb25fZGVtYW5kX3NlcnZpY2VfdG9vbC5tbScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdydW5fd2l0aF9jcmFzaHBhZCcsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdjcmFzaHBhZF90b29sX3N1cHBvcnQnLAotICAgICAgICAgICAgJy4uL2NsaWVudC9jbGllbnQuZ3lwOmNyYXNocGFkX2NsaWVudCcsCi0gICAgICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3V0aWwvdXRpbC5neXA6Y3Jhc2hwYWRfdXRpbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3J1bl93aXRoX2NyYXNocGFkLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3V0aWwvdXRpbC5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC91dGlsL3V0aWwuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTRkMzJmLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3V0aWwvdXRpbC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NTAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfdXRpbCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnLi4vY29tcGF0L2NvbXBhdC5neXA6Y3Jhc2hwYWRfY29tcGF0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9sc3MvbHNzLmd5cDpsc3MnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnWkxJQl9DT05TVCcsCi0gICAgICAgICdDUkFTSFBBRF9VU0VfQk9SSU5HU1NMJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmaWxlL2RlbGltaXRlZF9maWxlX3JlYWRlci5jYycsCi0gICAgICAgICdmaWxlL2RlbGltaXRlZF9maWxlX3JlYWRlci5oJywKLSAgICAgICAgJ2ZpbGUvZGlyZWN0b3J5X3JlYWRlci5oJywKLSAgICAgICAgJ2ZpbGUvZGlyZWN0b3J5X3JlYWRlcl9wb3NpeC5jYycsCi0gICAgICAgICdmaWxlL2RpcmVjdG9yeV9yZWFkZXJfd2luLmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV9pby5jYycsCi0gICAgICAgICdmaWxlL2ZpbGVfaW8uaCcsCi0gICAgICAgICdmaWxlL2ZpbGVfaW9fcG9zaXguY2MnLAotICAgICAgICAnZmlsZS9maWxlX2lvX3dpbi5jYycsCi0gICAgICAgICdmaWxlL2ZpbGVfcmVhZGVyLmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV9yZWFkZXIuaCcsCi0gICAgICAgICdmaWxlL2ZpbGVfc2Vla2VyLmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV9zZWVrZXIuaCcsCi0gICAgICAgICdmaWxlL2ZpbGVzeXN0ZW0uaCcsCi0gICAgICAgICdmaWxlL2ZpbGVzeXN0ZW1fcG9zaXguY2MnLAotICAgICAgICAnZmlsZS9maWxlc3lzdGVtX3dpbi5jYycsCi0gICAgICAgICdmaWxlL2ZpbGVfd3JpdGVyLmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV93cml0ZXIuaCcsCi0gICAgICAgICdmaWxlL291dHB1dF9zdHJlYW1fZmlsZV93cml0ZXIuY2MnLAotICAgICAgICAnZmlsZS9vdXRwdXRfc3RyZWFtX2ZpbGVfd3JpdGVyLmgnLAotICAgICAgICAnZmlsZS9zY29wZWRfcmVtb3ZlX2ZpbGUuY2MnLAotICAgICAgICAnZmlsZS9zY29wZWRfcmVtb3ZlX2ZpbGUuaCcsCi0gICAgICAgICdmaWxlL3N0cmluZ19maWxlLmNjJywKLSAgICAgICAgJ2ZpbGUvc3RyaW5nX2ZpbGUuaCcsCi0gICAgICAgICdsaW51eC9hZGRyZXNzX3R5cGVzLmgnLAotICAgICAgICAnbGludXgvYXV4aWxpYXJ5X3ZlY3Rvci5jYycsCi0gICAgICAgICdsaW51eC9hdXhpbGlhcnlfdmVjdG9yLmgnLAotICAgICAgICAnbGludXgvY2hlY2tlZF9hZGRyZXNzX3JhbmdlLmgnLAotICAgICAgICAnbGludXgvZGlyZWN0X3B0cmFjZV9jb25uZWN0aW9uLmNjJywKLSAgICAgICAgJ2xpbnV4L2RpcmVjdF9wdHJhY2VfY29ubmVjdGlvbi5oJywKLSAgICAgICAgJ2xpbnV4L2V4Y2VwdGlvbl9oYW5kbGVyX2NsaWVudC5jYycsCi0gICAgICAgICdsaW51eC9leGNlcHRpb25faGFuZGxlcl9jbGllbnQuaCcsCi0gICAgICAgICdsaW51eC9leGNlcHRpb25faGFuZGxlcl9wcm90b2NvbC5jYycsCi0gICAgICAgICdsaW51eC9leGNlcHRpb25faGFuZGxlcl9wcm90b2NvbC5oJywKLSAgICAgICAgJ2xpbnV4L2V4Y2VwdGlvbl9pbmZvcm1hdGlvbi5oJywKLSAgICAgICAgJ2xpbnV4L21lbW9yeV9tYXAuY2MnLAotICAgICAgICAnbGludXgvbWVtb3J5X21hcC5oJywKLSAgICAgICAgJ2xpbnV4L3Byb2Nfc3RhdF9yZWFkZXIuY2MnLAotICAgICAgICAnbGludXgvcHJvY19zdGF0X3JlYWRlci5oJywKLSAgICAgICAgJ2xpbnV4L3Byb2NfdGFza19yZWFkZXIuY2MnLAotICAgICAgICAnbGludXgvcHJvY190YXNrX3JlYWRlci5oJywKLSAgICAgICAgJ2xpbnV4L3B0cmFjZV9icm9rZXIuY2MnLAotICAgICAgICAnbGludXgvcHRyYWNlX2Jyb2tlci5oJywKLSAgICAgICAgJ2xpbnV4L3B0cmFjZV9jbGllbnQuY2MnLAotICAgICAgICAnbGludXgvcHRyYWNlX2NsaWVudC5oJwotICAgICAgICAnbGludXgvcHRyYWNlX2Nvbm5lY3Rpb24uaCcsCi0gICAgICAgICdsaW51eC9wdHJhY2VyLmNjJywKLSAgICAgICAgJ2xpbnV4L3B0cmFjZXIuaCcsCi0gICAgICAgICdsaW51eC9zY29wZWRfcHJfc2V0X2R1bXBhYmxlLmNjJywKLSAgICAgICAgJ2xpbnV4L3Njb3BlZF9wcl9zZXRfZHVtcGFibGUuaCcsCi0gICAgICAgICdsaW51eC9zY29wZWRfcHJfc2V0X3B0cmFjZXIuY2MnLAotICAgICAgICAnbGludXgvc2NvcGVkX3ByX3NldF9wdHJhY2VyLmgnLAotICAgICAgICAnbGludXgvc2NvcGVkX3B0cmFjZV9hdHRhY2guY2MnLAotICAgICAgICAnbGludXgvc2NvcGVkX3B0cmFjZV9hdHRhY2guaCcsCi0gICAgICAgICdsaW51eC9zb2NrZXQuY2MnLAotICAgICAgICAnbGludXgvc29ja2V0LmgnLAotICAgICAgICAnbGludXgvdGhyZWFkX2luZm8uY2MnLAotICAgICAgICAnbGludXgvdGhyZWFkX2luZm8uaCcsCi0gICAgICAgICdsaW51eC90cmFpdHMuaCcsCi0gICAgICAgICdtYWMvY2hlY2tlZF9tYWNoX2FkZHJlc3NfcmFuZ2UuaCcsCi0gICAgICAgICdtYWMvbGF1bmNoZC5oJywKLSAgICAgICAgJ21hYy9sYXVuY2hkLm1tJywKLSAgICAgICAgJ21hYy9tYWNfdXRpbC5jYycsCi0gICAgICAgICdtYWMvbWFjX3V0aWwuaCcsCi0gICAgICAgICdtYWMvc2VydmljZV9tYW5hZ2VtZW50LmNjJywKLSAgICAgICAgJ21hYy9zZXJ2aWNlX21hbmFnZW1lbnQuaCcsCi0gICAgICAgICdtYWMveGF0dHIuY2MnLAotICAgICAgICAnbWFjL3hhdHRyLmgnLAotICAgICAgICAnbWFjaC9jaGlsZF9wb3J0LmRlZnMnLAotICAgICAgICAnbWFjaC9jaGlsZF9wb3J0X2hhbmRzaGFrZS5jYycsCi0gICAgICAgICdtYWNoL2NoaWxkX3BvcnRfaGFuZHNoYWtlLmgnLAotICAgICAgICAnbWFjaC9jaGlsZF9wb3J0X3NlcnZlci5jYycsCi0gICAgICAgICdtYWNoL2NoaWxkX3BvcnRfc2VydmVyLmgnLAotICAgICAgICAnbWFjaC9jaGlsZF9wb3J0X3R5cGVzLmgnLAotICAgICAgICAnbWFjaC9jb21wb3NpdGVfbWFjaF9tZXNzYWdlX3NlcnZlci5jYycsCi0gICAgICAgICdtYWNoL2NvbXBvc2l0ZV9tYWNoX21lc3NhZ2Vfc2VydmVyLmgnLAotICAgICAgICAnbWFjaC9leGNfY2xpZW50X3ZhcmlhbnRzLmNjJywKLSAgICAgICAgJ21hY2gvZXhjX2NsaWVudF92YXJpYW50cy5oJywKLSAgICAgICAgJ21hY2gvZXhjX3NlcnZlcl92YXJpYW50cy5jYycsCi0gICAgICAgICdtYWNoL2V4Y19zZXJ2ZXJfdmFyaWFudHMuaCcsCi0gICAgICAgICdtYWNoL2V4Y2VwdGlvbl9iZWhhdmlvcnMuY2MnLAotICAgICAgICAnbWFjaC9leGNlcHRpb25fYmVoYXZpb3JzLmgnLAotICAgICAgICAnbWFjaC9leGNlcHRpb25fcG9ydHMuY2MnLAotICAgICAgICAnbWFjaC9leGNlcHRpb25fcG9ydHMuaCcsCi0gICAgICAgICdtYWNoL2V4Y2VwdGlvbl90eXBlcy5jYycsCi0gICAgICAgICdtYWNoL2V4Y2VwdGlvbl90eXBlcy5oJywKLSAgICAgICAgJ21hY2gvbWFjaF9leHRlbnNpb25zLmNjJywKLSAgICAgICAgJ21hY2gvbWFjaF9leHRlbnNpb25zLmgnLAotICAgICAgICAnbWFjaC9tYWNoX21lc3NhZ2UuY2MnLAotICAgICAgICAnbWFjaC9tYWNoX21lc3NhZ2UuaCcsCi0gICAgICAgICdtYWNoL21hY2hfbWVzc2FnZV9zZXJ2ZXIuY2MnLAotICAgICAgICAnbWFjaC9tYWNoX21lc3NhZ2Vfc2VydmVyLmgnLAotICAgICAgICAnbWFjaC9ub3RpZnlfc2VydmVyLmNjJywKLSAgICAgICAgJ21hY2gvbm90aWZ5X3NlcnZlci5oJywKLSAgICAgICAgJ21hY2gvc2NvcGVkX3Rhc2tfc3VzcGVuZC5jYycsCi0gICAgICAgICdtYWNoL3Njb3BlZF90YXNrX3N1c3BlbmQuaCcsCi0gICAgICAgICdtYWNoL3N5bWJvbGljX2NvbnN0YW50c19tYWNoLmNjJywKLSAgICAgICAgJ21hY2gvc3ltYm9saWNfY29uc3RhbnRzX21hY2guaCcsCi0gICAgICAgICdtYWNoL3Rhc2tfZm9yX3BpZC5jYycsCi0gICAgICAgICdtYWNoL3Rhc2tfZm9yX3BpZC5oJywKLSAgICAgICAgJ21pc2MvYWRkcmVzc19zYW5pdGl6ZXIuaCcsCi0gICAgICAgICdtaXNjL2FkZHJlc3NfdHlwZXMuaCcsCi0gICAgICAgICdtaXNjL2FycmF5c2l6ZS5oJywKLSAgICAgICAgJ21pc2MvYXNfdW5kZXJseWluZ190eXBlLmgnLAotICAgICAgICAnbWlzYy9jYXB0dXJlX2NvbnRleHQuaCcsCi0gICAgICAgICdtaXNjL2NhcHR1cmVfY29udGV4dF9saW51eC5TJywKLSAgICAgICAgJ21pc2MvY2FwdHVyZV9jb250ZXh0X21hYy5TJywKLSAgICAgICAgJ21pc2MvY2FwdHVyZV9jb250ZXh0X3dpbi5hc20nLAotICAgICAgICAnbWlzYy9jbG9jay5oJywKLSAgICAgICAgJ21pc2MvY2xvY2tfbWFjLmNjJywKLSAgICAgICAgJ21pc2MvY2xvY2tfcG9zaXguY2MnLAotICAgICAgICAnbWlzYy9jbG9ja193aW4uY2MnLAotICAgICAgICAnbWlzYy9lbGZfbm90ZV90eXBlcy5oJywKLSAgICAgICAgJ21pc2MvZnJvbV9wb2ludGVyX2Nhc3QuaCcsCi0gICAgICAgICdtaXNjL2ltcGxpY2l0X2Nhc3QuaCcsCi0gICAgICAgICdtaXNjL2luaXRpYWxpemF0aW9uX3N0YXRlLmgnLAotICAgICAgICAnbWlzYy9pbml0aWFsaXphdGlvbl9zdGF0ZV9kY2hlY2suY2MnLAotICAgICAgICAnbWlzYy9pbml0aWFsaXphdGlvbl9zdGF0ZV9kY2hlY2suaCcsCi0gICAgICAgICdtaXNjL2xleGluZy5jYycsCi0gICAgICAgICdtaXNjL2xleGluZy5oJywKLSAgICAgICAgJ21pc2MvbWV0cmljcy5jYycsCi0gICAgICAgICdtaXNjL21ldHJpY3MuaCcsCi0gICAgICAgICdtaXNjL3BhdGhzLmgnLAotICAgICAgICAnbWlzYy9wYXRoc19tYWMuY2MnLAotICAgICAgICAnbWlzYy9wYXRoc19saW51eC5jYycsCi0gICAgICAgICdtaXNjL3BhdGhzX3dpbi5jYycsCi0gICAgICAgICdtaXNjL3BkYl9zdHJ1Y3R1cmVzLmNjJywKLSAgICAgICAgJ21pc2MvcGRiX3N0cnVjdHVyZXMuaCcsCi0gICAgICAgICdtaXNjL3JhbmRvbV9zdHJpbmcuY2MnLAotICAgICAgICAnbWlzYy9yYW5kb21fc3RyaW5nLmgnLAotICAgICAgICAnbWlzYy9yYW5nZV9zZXQuY2MnLAotICAgICAgICAnbWlzYy9yYW5nZV9zZXQuaCcsCi0gICAgICAgICdtaXNjL3JlaW50ZXJwcmV0X2J5dGVzLmNjJywKLSAgICAgICAgJ21pc2MvcmVpbnRlcnByZXRfYnl0ZXMuaCcsCi0gICAgICAgICdtaXNjL3Njb3BlZF9mb3JiaWRfcmV0dXJuLmNjJywKLSAgICAgICAgJ21pc2Mvc2NvcGVkX2ZvcmJpZF9yZXR1cm4uaCcsCi0gICAgICAgICdtaXNjL3N5bWJvbGljX2NvbnN0YW50c19jb21tb24uaCcsCi0gICAgICAgICdtaXNjL3RpbWUuY2MnLAotICAgICAgICAnbWlzYy90aW1lLmgnLAotICAgICAgICAnbWlzYy90aW1lX2xpbnV4LmNjJywKLSAgICAgICAgJ21pc2MvdGltZV93aW4uY2MnLAotICAgICAgICAnbWlzYy90cmlfc3RhdGUuaCcsCi0gICAgICAgICdtaXNjL3V1aWQuY2MnLAotICAgICAgICAnbWlzYy91dWlkLmgnLAotICAgICAgICAnbWlzYy96bGliLmNjJywKLSAgICAgICAgJ21pc2MvemxpYi5oJywKLSAgICAgICAgJ25ldC9odHRwX2JvZHkuY2MnLAotICAgICAgICAnbmV0L2h0dHBfYm9keS5oJywKLSAgICAgICAgJ25ldC9odHRwX2JvZHlfZ3ppcC5jYycsCi0gICAgICAgICduZXQvaHR0cF9ib2R5X2d6aXAuaCcsCi0gICAgICAgICduZXQvaHR0cF9oZWFkZXJzLmgnLAotICAgICAgICAnbmV0L2h0dHBfbXVsdGlwYXJ0X2J1aWxkZXIuY2MnLAotICAgICAgICAnbmV0L2h0dHBfbXVsdGlwYXJ0X2J1aWxkZXIuaCcsCi0gICAgICAgICduZXQvaHR0cF90cmFuc3BvcnQuY2MnLAotICAgICAgICAnbmV0L2h0dHBfdHJhbnNwb3J0LmgnLAotICAgICAgICAnbmV0L2h0dHBfdHJhbnNwb3J0X21hYy5tbScsCi0gICAgICAgICduZXQvaHR0cF90cmFuc3BvcnRfd2luLmNjJywKLSAgICAgICAgJ25ldC91cmwuY2MnLAotICAgICAgICAnbmV0L3VybC5oJywKLSAgICAgICAgJ251bWVyaWMvY2hlY2tlZF9hZGRyZXNzX3JhbmdlLmNjJywKLSAgICAgICAgJ251bWVyaWMvY2hlY2tlZF9hZGRyZXNzX3JhbmdlLmgnLAotICAgICAgICAnbnVtZXJpYy9jaGVja2VkX3JhbmdlLmgnLAotICAgICAgICAnbnVtZXJpYy9jaGVja2VkX3ZtX2FkZHJlc3NfcmFuZ2UuaCcsCi0gICAgICAgICdudW1lcmljL2luX3JhbmdlX2Nhc3QuaCcsCi0gICAgICAgICdudW1lcmljL2ludDEyOC5oJywKLSAgICAgICAgJ251bWVyaWMvc2FmZV9hc3NpZ25tZW50LmgnLAotICAgICAgICAncG9zaXgvY2xvc2VfbXVsdGlwbGUuY2MnLAotICAgICAgICAncG9zaXgvY2xvc2VfbXVsdGlwbGUuaCcsCi0gICAgICAgICdwb3NpeC9jbG9zZV9zdGRpby5jYycsCi0gICAgICAgICdwb3NpeC9jbG9zZV9zdGRpby5oJywKLSAgICAgICAgJ3Bvc2l4L2Ryb3BfcHJpdmlsZWdlcy5jYycsCi0gICAgICAgICdwb3NpeC9kcm9wX3ByaXZpbGVnZXMuaCcsCi0gICAgICAgICdwb3NpeC9kb3VibGVfZm9ya19hbmRfZXhlYy5jYycsCi0gICAgICAgICdwb3NpeC9kb3VibGVfZm9ya19hbmRfZXhlYy5oJywKLSAgICAgICAgJ3Bvc2l4L3Byb2Nlc3NfaW5mby5oJywKLSAgICAgICAgJ3Bvc2l4L3Byb2Nlc3NfaW5mb19saW51eC5jYycsCi0gICAgICAgICdwb3NpeC9wcm9jZXNzX2luZm9fbWFjLmNjJywKLSAgICAgICAgJ3Bvc2l4L3Njb3BlZF9kaXIuY2MnLAotICAgICAgICAncG9zaXgvc2NvcGVkX2Rpci5oJywKLSAgICAgICAgJ3Bvc2l4L3Njb3BlZF9tbWFwLmNjJywKLSAgICAgICAgJ3Bvc2l4L3Njb3BlZF9tbWFwLmgnLAotICAgICAgICAncG9zaXgvc2lnbmFscy5jYycsCi0gICAgICAgICdwb3NpeC9zaWduYWxzLmgnLAotICAgICAgICAncG9zaXgvc3ltYm9saWNfY29uc3RhbnRzX3Bvc2l4LmNjJywKLSAgICAgICAgJ3Bvc2l4L3N5bWJvbGljX2NvbnN0YW50c19wb3NpeC5oJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19pZC5oJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnkuY2MnLAotICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeS5oJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfbGludXguY2MnLAotICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9saW51eC5oJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfbWFjLmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfbWFjLmgnLAotICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9uYXRpdmUuaCcsCi0gICAgICAgICdwcm9jZXNzL3Byb2Nlc3NfbWVtb3J5X3JhbmdlLmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfcmFuZ2UuaCcsCi0gICAgICAgICdzdGRsaWIvYWxpZ25lZF9hbGxvY2F0b3IuY2MnLAotICAgICAgICAnc3RkbGliL2FsaWduZWRfYWxsb2NhdG9yLmgnLAotICAgICAgICAnc3RkbGliL21hcF9pbnNlcnQuaCcsCi0gICAgICAgICdzdGRsaWIvb2JqYy5oJywKLSAgICAgICAgJ3N0ZGxpYi9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb24uY2MnLAotICAgICAgICAnc3RkbGliL3N0cmluZ19udW1iZXJfY29udmVyc2lvbi5oJywKLSAgICAgICAgJ3N0ZGxpYi9zdHJsY3B5LmNjJywKLSAgICAgICAgJ3N0ZGxpYi9zdHJsY3B5LmgnLAotICAgICAgICAnc3RkbGliL3N0cm5sZW4uY2MnLAotICAgICAgICAnc3RkbGliL3N0cm5sZW4uaCcsCi0gICAgICAgICdzdGRsaWIvdGhyZWFkX3NhZmVfdmVjdG9yLmgnLAotICAgICAgICAnc3RyZWFtL2Jhc2U5NF9vdXRwdXRfc3RyZWFtLmNjJywKLSAgICAgICAgJ3N0cmVhbS9iYXNlOTRfb3V0cHV0X3N0cmVhbS5oJywKLSAgICAgICAgJ3N0cmVhbS9maWxlX2VuY29kZXIuY2MnLAotICAgICAgICAnc3RyZWFtL2ZpbGVfZW5jb2Rlci5oJywKLSAgICAgICAgJ3N0cmVhbS9maWxlX291dHB1dF9zdHJlYW0uY2MnLAotICAgICAgICAnc3RyZWFtL2ZpbGVfb3V0cHV0X3N0cmVhbS5oJywKLSAgICAgICAgJ3N0cmVhbS9sb2dfb3V0cHV0X3N0cmVhbS5jYycsCi0gICAgICAgICdzdHJlYW0vbG9nX291dHB1dF9zdHJlYW0uaCcsCi0gICAgICAgICdzdHJlYW0vb3V0cHV0X3N0cmVhbV9pbnRlcmZhY2UuaCcsCi0gICAgICAgICdzdHJlYW0vemxpYl9vdXRwdXRfc3RyZWFtLmNjJywKLSAgICAgICAgJ3N0cmVhbS96bGliX291dHB1dF9zdHJlYW0uaCcsCi0gICAgICAgICdzdHJpbmcvc3BsaXRfc3RyaW5nLmNjJywKLSAgICAgICAgJ3N0cmluZy9zcGxpdF9zdHJpbmcuaCcsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vc2VtYXBob3JlX21hYy5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vc2VtYXBob3JlX3Bvc2l4LmNjJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi9zZW1hcGhvcmVfd2luLmNjJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi9zZW1hcGhvcmUuaCcsCi0gICAgICAgICd0aHJlYWQvc3RvcHBhYmxlLmgnLAotICAgICAgICAndGhyZWFkL3RocmVhZC5jYycsCi0gICAgICAgICd0aHJlYWQvdGhyZWFkLmgnLAotICAgICAgICAndGhyZWFkL3RocmVhZF9sb2dfbWVzc2FnZXMuY2MnLAotICAgICAgICAndGhyZWFkL3RocmVhZF9sb2dfbWVzc2FnZXMuaCcsCi0gICAgICAgICd0aHJlYWQvdGhyZWFkX3Bvc2l4LmNjJywKLSAgICAgICAgJ3RocmVhZC90aHJlYWRfd2luLmNjJywKLSAgICAgICAgJ3RocmVhZC93b3JrZXJfdGhyZWFkLmNjJywKLSAgICAgICAgJ3RocmVhZC93b3JrZXJfdGhyZWFkLmgnLAotICAgICAgICAnd2luL2FkZHJlc3NfdHlwZXMuaCcsCi0gICAgICAgICd3aW4vY2hlY2tlZF93aW5fYWRkcmVzc19yYW5nZS5oJywKLSAgICAgICAgJ3dpbi9jb21tYW5kX2xpbmUuY2MnLAotICAgICAgICAnd2luL2NvbW1hbmRfbGluZS5oJywKLSAgICAgICAgJ3dpbi9jb250ZXh0X3dyYXBwZXJzLmgnLAotICAgICAgICAnd2luL2NyaXRpY2FsX3NlY3Rpb25fd2l0aF9kZWJ1Z19pbmZvLmNjJywKLSAgICAgICAgJ3dpbi9jcml0aWNhbF9zZWN0aW9uX3dpdGhfZGVidWdfaW5mby5oJywKLSAgICAgICAgJ3dpbi9leGNlcHRpb25faGFuZGxlcl9zZXJ2ZXIuY2MnLAotICAgICAgICAnd2luL2V4Y2VwdGlvbl9oYW5kbGVyX3NlcnZlci5oJywKLSAgICAgICAgJ3dpbi9nZXRfZnVuY3Rpb24uY2MnLAotICAgICAgICAnd2luL2dldF9mdW5jdGlvbi5oJywKLSAgICAgICAgJ3dpbi9nZXRfbW9kdWxlX2luZm9ybWF0aW9uLmNjJywKLSAgICAgICAgJ3dpbi9nZXRfbW9kdWxlX2luZm9ybWF0aW9uLmgnLAotICAgICAgICAnd2luL2hhbmRsZS5jYycsCi0gICAgICAgICd3aW4vaGFuZGxlLmgnLAotICAgICAgICAnd2luL2luaXRpYWxfY2xpZW50X2RhdGEuY2MnLAotICAgICAgICAnd2luL2luaXRpYWxfY2xpZW50X2RhdGEuaCcsCi0gICAgICAgICd3aW4vbW9kdWxlX3ZlcnNpb24uY2MnLAotICAgICAgICAnd2luL21vZHVsZV92ZXJzaW9uLmgnLAotICAgICAgICAnd2luL250X2ludGVybmFscy5jYycsCi0gICAgICAgICd3aW4vbnRfaW50ZXJuYWxzLmgnLAotICAgICAgICAnd2luL250c3RhdHVzX2xvZ2dpbmcuY2MnLAotICAgICAgICAnd2luL250c3RhdHVzX2xvZ2dpbmcuaCcsCi0gICAgICAgICd3aW4vcHJvY2Vzc19pbmZvLmNjJywKLSAgICAgICAgJ3dpbi9wcm9jZXNzX2luZm8uaCcsCi0gICAgICAgICd3aW4vcHJvY2Vzc19zdHJ1Y3RzLmgnLAotICAgICAgICAnd2luL3JlZ2lzdHJhdGlvbl9wcm90b2NvbF93aW4uY2MnLAotICAgICAgICAnd2luL3JlZ2lzdHJhdGlvbl9wcm90b2NvbF93aW4uaCcsCi0gICAgICAgICd3aW4vc2FmZV90ZXJtaW5hdGVfcHJvY2Vzcy5hc20nLAotICAgICAgICAnd2luL3NhZmVfdGVybWluYXRlX3Byb2Nlc3MuaCcsCi0gICAgICAgICd3aW4vc2NvcGVkX2hhbmRsZS5jYycsCi0gICAgICAgICd3aW4vc2NvcGVkX2hhbmRsZS5oJywKLSAgICAgICAgJ3dpbi9zY29wZWRfbG9jYWxfYWxsb2MuY2MnLAotICAgICAgICAnd2luL3Njb3BlZF9sb2NhbF9hbGxvYy5oJywKLSAgICAgICAgJ3dpbi9zY29wZWRfcHJvY2Vzc19zdXNwZW5kLmNjJywKLSAgICAgICAgJ3dpbi9zY29wZWRfcHJvY2Vzc19zdXNwZW5kLmgnLAotICAgICAgICAnd2luL3Njb3BlZF9zZXRfZXZlbnQuY2MnLAotICAgICAgICAnd2luL3Njb3BlZF9zZXRfZXZlbnQuaCcsCi0gICAgICAgICd3aW4vc2Vzc2lvbl9lbmRfd2F0Y2hlci5jYycsCi0gICAgICAgICd3aW4vc2Vzc2lvbl9lbmRfd2F0Y2hlci5oJywKLSAgICAgICAgJ3dpbi90ZXJtaW5hdGlvbl9jb2Rlcy5oJywKLSAgICAgICAgJ3dpbi94cF9jb21wYXQuaCcsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydHRU5FUkFUT1I9PSJuaW5qYSInLCB7Ci0gICAgICAgICAgICAgICMgbmluamHigJlzIHJ1bGVzIGNhbuKAmXQgZGVhbCB3aXRoIHNvdXJjZXMgdGhhdCBoYXZlIHBhdGhzIHJlbGF0aXZlCi0gICAgICAgICAgICAgICMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgU0RLUk9PVC4gQ29weSB0aGUgLmRlZnMgZmlsZXMgb3V0Ci0gICAgICAgICAgICAgICMgb2YgU0RLUk9PVCBhbmQgaW50byBhIHBsYWNlIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgd2l0aG91dCBhbnkKLSAgICAgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0gICAgICAgICAgICAgICdjb3BpZXMnOiBbCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoSU5URVJNRURJQVRFX0RJUikvdXRpbC9tYWNoJywKLSAgICAgICAgICAgICAgICAgICdmaWxlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvdXNyL2luY2x1ZGUvbWFjaC9leGMuZGVmcycsCi0gICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL3Vzci9pbmNsdWRlL21hY2gvbWFjaF9leGMuZGVmcycsCi0gICAgICAgICAgICAgICAgICAgICckKFNES1JPT1QpL3Vzci9pbmNsdWRlL21hY2gvbm90aWZ5LmRlZnMnLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS91dGlsL21hY2gvZXhjLmRlZnMnLAotICAgICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL3V0aWwvbWFjaC9tYWNoX2V4Yy5kZWZzJywKLSAgICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS91dGlsL21hY2gvbm90aWZ5LmRlZnMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgeyAgIyBlbHNlOiBHRU5FUkFUT1IhPSJuaW5qYSIKLSAgICAgICAgICAgICAgIyBUaGUgWGNvZGUgZ2VuZXJhdG9yIGRvZXMgY29waWVzIGFmdGVyIHJ1bGVzLCBzbyB0aGUgYWJvdmUgdHJpY2sKLSAgICAgICAgICAgICAgIyB3b27igJl0IHdvcmssIGJ1dCBpdHMgcnVsZXMgdG9sZXJhdGUgc291cmNlcyB3aXRoIFNES1JPT1QtcmVsYXRpdmUKLSAgICAgICAgICAgICAgIyBwYXRocy4KLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvdXNyL2luY2x1ZGUvbWFjaC9leGMuZGVmcycsCi0gICAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvdXNyL2luY2x1ZGUvbWFjaC9tYWNoX2V4Yy5kZWZzJywKLSAgICAgICAgICAgICAgICAnJChTREtST09UKS91c3IvaW5jbHVkZS9tYWNoL25vdGlmeS5kZWZzJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3J1bGVzJzogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAncnVsZV9uYW1lJzogJ21pZycsCi0gICAgICAgICAgICAgICdleHRlbnNpb24nOiAnZGVmcycsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJ21hY2gvbWlnLnB5JywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvdXRpbC9tYWNoLzwoUlVMRV9JTlBVVF9ST09UKVVzZXIuYycsCi0gICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvdXRpbC9tYWNoLzwoUlVMRV9JTlBVVF9ST09UKVNlcnZlci5jJywKLSAgICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS91dGlsL21hY2gvPChSVUxFX0lOUFVUX1JPT1QpLmgnLAotICAgICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL3V0aWwvbWFjaC88KFJVTEVfSU5QVVRfUk9PVClTZXJ2ZXIuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAgICAgJzwoUlVMRV9JTlBVVF9QQVRIKScsCi0gICAgICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCi0gICAgICAgICAgICAgICAgJy0taW5jbHVkZT0uLi9jb21wYXQvbWFjJwotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnOiAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS91c3IvbGliL2xpYmJzbS5keWxpYicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH0sIHsgIyBlbHNlOiBPUyE9bWFjCi0gICAgICAgICAgJ3NvdXJjZXMhJzogWyAnbWlzYy9jYXB0dXJlX2NvbnRleHRfbWFjLlMnIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbHVzZXIzMi5saWInLAotICAgICAgICAgICAgICAnLWx2ZXJzaW9uLmxpYicsCi0gICAgICAgICAgICAgICctbHdpbmh0dHAubGliJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgICAgIDQyMDEsICAjIG5vbnN0YW5kYXJkIGV4dGVuc2lvbiB1c2VkIDogbmFtZWxlc3Mgc3RydWN0L3VuaW9uLgotICAgICAgICAgICAgNDU3NywgICMgJ25vZXhjZXB0JyB1c2VkIHdpdGggbm8gZXhjZXB0aW9uIGhhbmRsaW5nIG1vZGUgc3BlY2lmaWVkCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgICAgICAgICA0NTc3LCAgIyAnbm9leGNlcHQnIHVzZWQgd2l0aCBubyBleGNlcHRpb24gaGFuZGxpbmcgbW9kZSBzcGVjaWZpZWQKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ01BU00nOiB7Ci0gICAgICAgICAgICAgICAgICAnVXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7ICAjIGVsc2U6IE9TIT0id2luIgotICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICdtaXNjL2NhcHR1cmVfY29udGV4dF93aW4uYXNtJywKLSAgICAgICAgICAgICd3aW4vc2FmZV90ZXJtaW5hdGVfcHJvY2Vzcy5hc20nLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxsb2cnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWyd0YXJnZXRfb3M9PSJsaW51eCIgb3IgdGFyZ2V0X29zPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9zYW5pdGl6ZWQuY2MnLAotICAgICAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfc2FuaXRpemVkLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sIHsgICMgZWxzZTogT1MhPSJsaW51eCIKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnbWlzYy9jYXB0dXJlX2NvbnRleHRfbGludXguUycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X29zIT0ibGludXgiIGFuZCB0YXJnZXRfb3MhPSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnXnByb2Nlc3MvJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15saW51eC8nXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdebWlzYy9jYXB0dXJlX2NvbnRleHRfbGludXhcXC5TJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15taXNjL3BhdGhzX2xpbnV4XFwuY2MkJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAnXm1pc2MvdGltZV9saW51eFxcLmNjJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15wb3NpeC9wcm9jZXNzX2luZm9fbGludXhcXC5jYyQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdecHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9saW51eFxcLmNjJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ15wcm9jZXNzL3Byb2Nlc3NfbWVtb3J5X2xpbnV4XFwuaCQnXSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3V0aWwvdXRpbF90ZXN0Lmd5cCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3V0aWwvdXRpbF90ZXN0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY1YTkxOC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC91dGlsL3V0aWxfdGVzdC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNCBUaGUgQ3Jhc2hwYWQgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJy4uL2J1aWxkL2NyYXNocGFkLmd5cGknLAotICBdLAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfdXRpbF90ZXN0JywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3V0aWwuZ3lwOmNyYXNocGFkX3V0aWwnLAotICAgICAgICAnLi4vY2xpZW50L2NsaWVudC5neXA6Y3Jhc2hwYWRfY2xpZW50JywKLSAgICAgICAgJy4uL2NvbXBhdC9jb21wYXQuZ3lwOmNyYXNocGFkX2NvbXBhdCcsCi0gICAgICAgICcuLi90ZXN0L3Rlc3QuZ3lwOmNyYXNocGFkX2dtb2NrX21haW4nLAotICAgICAgICAnLi4vdGVzdC90ZXN0Lmd5cDpjcmFzaHBhZF90ZXN0JywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2d0ZXN0L2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9ndGVzdC9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvbHNzL2xzcy5neXA6bHNzJywKLSAgICAgICAgJy4uL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXA6YmFzZScsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdmaWxlL2RlbGltaXRlZF9maWxlX3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGUvZGlyZWN0b3J5X3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV9pb190ZXN0LmNjJywKLSAgICAgICAgJ2ZpbGUvZmlsZV9yZWFkZXJfdGVzdC5jYycsCi0gICAgICAgICdmaWxlL2ZpbGVzeXN0ZW1fdGVzdC5jYycsCi0gICAgICAgICdmaWxlL3N0cmluZ19maWxlX3Rlc3QuY2MnLAotICAgICAgICAnbGludXgvYXV4aWxpYXJ5X3ZlY3Rvcl90ZXN0LmNjJywKLSAgICAgICAgJ2xpbnV4L21lbW9yeV9tYXBfdGVzdC5jYycsCi0gICAgICAgICdsaW51eC9wcm9jX3N0YXRfcmVhZGVyX3Rlc3QuY2MnLAotICAgICAgICAnbGludXgvcHJvY190YXNrX3JlYWRlcl90ZXN0LmNjJywKLSAgICAgICAgJ2xpbnV4L3B0cmFjZV9icm9rZXJfdGVzdC5jYycsCi0gICAgICAgICdsaW51eC9wdHJhY2VyX3Rlc3QuY2MnLAotICAgICAgICAnbGludXgvc2NvcGVkX3B0cmFjZV9hdHRhY2hfdGVzdC5jYycsCi0gICAgICAgICdsaW51eC9zb2NrZXRfdGVzdC5jYycsCi0gICAgICAgICdtYWMvbGF1bmNoZF90ZXN0Lm1tJywKLSAgICAgICAgJ21hYy9tYWNfdXRpbF90ZXN0Lm1tJywKLSAgICAgICAgJ21hYy9zZXJ2aWNlX21hbmFnZW1lbnRfdGVzdC5tbScsCi0gICAgICAgICdtYWMveGF0dHJfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL2NoaWxkX3BvcnRfaGFuZHNoYWtlX3Rlc3QuY2MnLAotICAgICAgICAnbWFjaC9jaGlsZF9wb3J0X3NlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ21hY2gvY29tcG9zaXRlX21hY2hfbWVzc2FnZV9zZXJ2ZXJfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL2V4Y19jbGllbnRfdmFyaWFudHNfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL2V4Y19zZXJ2ZXJfdmFyaWFudHNfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL2V4Y2VwdGlvbl9iZWhhdmlvcnNfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL2V4Y2VwdGlvbl9wb3J0c190ZXN0LmNjJywKLSAgICAgICAgJ21hY2gvZXhjZXB0aW9uX3R5cGVzX3Rlc3QuY2MnLAotICAgICAgICAnbWFjaC9tYWNoX2V4dGVuc2lvbnNfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL21hY2hfbWVzc2FnZV9zZXJ2ZXJfdGVzdC5jYycsCi0gICAgICAgICdtYWNoL21hY2hfbWVzc2FnZV90ZXN0LmNjJywKLSAgICAgICAgJ21hY2gvbm90aWZ5X3NlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ21hY2gvc2NvcGVkX3Rhc2tfc3VzcGVuZF90ZXN0LmNjJywKLSAgICAgICAgJ21hY2gvc3ltYm9saWNfY29uc3RhbnRzX21hY2hfdGVzdC5jYycsCi0gICAgICAgICdtaXNjL2FycmF5c2l6ZV90ZXN0LmNjJywKLSAgICAgICAgJ21pc2MvY2FwdHVyZV9jb250ZXh0X3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy9jYXB0dXJlX2NvbnRleHRfdGVzdF91dGlsLmgnLAotICAgICAgICAnbWlzYy9jYXB0dXJlX2NvbnRleHRfdGVzdF91dGlsX2xpbnV4LmNjJywKLSAgICAgICAgJ21pc2MvY2FwdHVyZV9jb250ZXh0X3Rlc3RfdXRpbF9tYWMuY2MnLAotICAgICAgICAnbWlzYy9jYXB0dXJlX2NvbnRleHRfdGVzdF91dGlsX3dpbi5jYycsCi0gICAgICAgICdtaXNjL2Nsb2NrX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy9mcm9tX3BvaW50ZXJfY2FzdF90ZXN0LmNjJywKLSAgICAgICAgJ21pc2MvaW5pdGlhbGl6YXRpb25fc3RhdGVfZGNoZWNrX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy9pbml0aWFsaXphdGlvbl9zdGF0ZV90ZXN0LmNjJywKLSAgICAgICAgJ21pc2MvcGF0aHNfdGVzdC5jYycsCi0gICAgICAgICdtaXNjL3Njb3BlZF9mb3JiaWRfcmV0dXJuX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy9yYW5kb21fc3RyaW5nX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy9yYW5nZV9zZXRfdGVzdC5jYycsCi0gICAgICAgICdtaXNjL3JlaW50ZXJwcmV0X2J5dGVzX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy90aW1lX3Rlc3QuY2MnLAotICAgICAgICAnbWlzYy91dWlkX3Rlc3QuY2MnLAotICAgICAgICAnbmV0L2h0dHBfYm9keV9nemlwX3Rlc3QuY2MnLAotICAgICAgICAnbmV0L2h0dHBfYm9keV90ZXN0LmNjJywKLSAgICAgICAgJ25ldC9odHRwX2JvZHlfdGVzdF91dGlsLmNjJywKLSAgICAgICAgJ25ldC9odHRwX2JvZHlfdGVzdF91dGlsLmgnLAotICAgICAgICAnbmV0L2h0dHBfbXVsdGlwYXJ0X2J1aWxkZXJfdGVzdC5jYycsCi0gICAgICAgICduZXQvaHR0cF90cmFuc3BvcnRfdGVzdC5jYycsCi0gICAgICAgICduZXQvdXJsX3Rlc3QuY2MnLAotICAgICAgICAnbnVtZXJpYy9jaGVja2VkX2FkZHJlc3NfcmFuZ2VfdGVzdC5jYycsCi0gICAgICAgICdudW1lcmljL2NoZWNrZWRfcmFuZ2VfdGVzdC5jYycsCi0gICAgICAgICdudW1lcmljL2luX3JhbmdlX2Nhc3RfdGVzdC5jYycsCi0gICAgICAgICdudW1lcmljL2ludDEyOF90ZXN0LmNjJywKLSAgICAgICAgJ3Bvc2l4L3Byb2Nlc3NfaW5mb190ZXN0LmNjJywKLSAgICAgICAgJ3Bvc2l4L3Njb3BlZF9tbWFwX3Rlc3QuY2MnLAotICAgICAgICAncG9zaXgvc2lnbmFsc190ZXN0LmNjJywKLSAgICAgICAgJ3Bvc2l4L3N5bWJvbGljX2NvbnN0YW50c19wb3NpeF90ZXN0LmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfbWFjX3Rlc3QuY2MnLAotICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9yYW5nZV90ZXN0LmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvcHJvY2Vzc19tZW1vcnlfdGVzdC5jYycsCi0gICAgICAgICdzdGRsaWIvYWxpZ25lZF9hbGxvY2F0b3JfdGVzdC5jYycsCi0gICAgICAgICdzdGRsaWIvbWFwX2luc2VydF90ZXN0LmNjJywKLSAgICAgICAgJ3N0ZGxpYi9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25fdGVzdC5jYycsCi0gICAgICAgICdzdGRsaWIvc3RybGNweV90ZXN0LmNjJywKLSAgICAgICAgJ3N0ZGxpYi9zdHJubGVuX3Rlc3QuY2MnLAotICAgICAgICAnc3RkbGliL3RocmVhZF9zYWZlX3ZlY3Rvcl90ZXN0LmNjJywKLSAgICAgICAgJ3N0cmluZy9zcGxpdF9zdHJpbmdfdGVzdC5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vc2VtYXBob3JlX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkL3RocmVhZF9sb2dfbWVzc2FnZXNfdGVzdC5jYycsCi0gICAgICAgICd0aHJlYWQvdGhyZWFkX3Rlc3QuY2MnLAotICAgICAgICAndGhyZWFkL3dvcmtlcl90aHJlYWRfdGVzdC5jYycsCi0gICAgICAgICd3aW4vY29tbWFuZF9saW5lX3Rlc3QuY2MnLAotICAgICAgICAnd2luL2NyaXRpY2FsX3NlY3Rpb25fd2l0aF9kZWJ1Z19pbmZvX3Rlc3QuY2MnLAotICAgICAgICAnd2luL2V4Y2VwdGlvbl9oYW5kbGVyX3NlcnZlcl90ZXN0LmNjJywKLSAgICAgICAgJ3dpbi9nZXRfZnVuY3Rpb25fdGVzdC5jYycsCi0gICAgICAgICd3aW4vaGFuZGxlX3Rlc3QuY2MnLAotICAgICAgICAnd2luL2luaXRpYWxfY2xpZW50X2RhdGFfdGVzdC5jYycsCi0gICAgICAgICd3aW4vcHJvY2Vzc19pbmZvX3Rlc3QuY2MnLAotICAgICAgICAnd2luL3JlZ2lzdHJhdGlvbl9wcm90b2NvbF93aW5fdGVzdC5jYycsCi0gICAgICAgICd3aW4vc2FmZV90ZXJtaW5hdGVfcHJvY2Vzc190ZXN0LmNjJywKLSAgICAgICAgJ3dpbi9zY29wZWRfcHJvY2Vzc19zdXNwZW5kX3Rlc3QuY2MnLAotICAgICAgICAnd2luL3Nlc3Npb25fZW5kX3dhdGNoZXJfdGVzdC5jYycsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yaycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ2NyYXNocGFkX3V0aWxfdGVzdF9wcm9jZXNzX2luZm9fdGVzdF9jaGlsZCcsCi0gICAgICAgICAgICAnY3Jhc2hwYWRfdXRpbF90ZXN0X3NhZmVfdGVybWluYXRlX3Byb2Nlc3NfdGVzdF9jaGlsZCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbGFkdmFwaTMyLmxpYicsCi0gICAgICAgICAgICAgICctbGltYWdlaGxwLmxpYicsCi0gICAgICAgICAgICAgICctbHJwY3J0NC5saWInLAotICAgICAgICAgICAgICAnLWx1c2VyMzIubGliJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAjIFRoaW5ncyBub3QgeWV0IHBvcnRlZCB0byBBbmRyb2lkCi0gICAgICAgICAgJ3NvdXJjZXMvJyA6IFsKLSAgICAgICAgICAgIFsnZXhjbHVkZScsICdebmV0L2h0dHBfdHJhbnNwb3J0X3Rlc3RcXC5jYyQnXSwKLSAgICAgICAgICBdCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21lbW9yeV9zYW5pdGl6ZWRfdGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1MhPSJsaW51eCIgYW5kIE9TIT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgWydleGNsdWRlJywgJ15wcm9jZXNzLyddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdebGludXgvJ10sCi0gICAgICAgICAgICBbJ2luY2x1ZGUnLCAnXm1pc2MvY2FwdHVyZV9jb250ZXh0X3Rlc3RfdXRpbF9saW51eFxcLmNjJCddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ09TIT0iYW5kcm9pZCInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdodHRwX3RyYW5zcG9ydF90ZXN0X3NlcnZlcicsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICAgICAgICAnLi4vdG9vbHMvdG9vbHMuZ3lwOmNyYXNocGFkX3Rvb2xfc3VwcG9ydCcsCi0gICAgICAgICAgICAnLi4vdXRpbC91dGlsLmd5cDpjcmFzaHBhZF91dGlsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ25ldC9odHRwX3RyYW5zcG9ydF90ZXN0X3NlcnZlci5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdXQVJOSU5HX0NGTEFHUyEnOiBbCi0gICAgICAgICAgICAgICctV2V4aXQtdGltZS1kZXN0cnVjdG9ycycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAnLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICctbHdzMl8zMi5saWInLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3V0aWxfdGVzdF9wcm9jZXNzX2luZm9fdGVzdF9jaGlsZCcsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnd2luL3Byb2Nlc3NfaW5mb190ZXN0X2NoaWxkLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3V0aWxfdGVzdF9zYWZlX3Rlcm1pbmF0ZV9wcm9jZXNzX3Rlc3RfY2hpbGQnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3dpbi9zYWZlX3Rlcm1pbmF0ZV9wcm9jZXNzX3Rlc3RfY2hpbGQuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuY2MgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuY2MKaW5kZXggNTM5MDg1My4uOGYxOWE3MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvd3JhcHBlci93cmFwcGVyLmNjCisrKyBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5jYwpAQCAtMTA2LDE2ICsxMDYsOSBAQAogICBjb25zdCBzaXplX3Qga1N5c3RlbVByb3BlcnR5TWF4TGVuZ3RoID0gMTAyNDsKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gdmFsdWUoa1N5c3RlbVByb3BlcnR5TWF4TGVuZ3RoKTsKICAgYm9vbCByZXN1bHQ7Ci0KLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICByZXN1bHQgPSBTYlN5c3RlbUdldFByb3BlcnR5KGtTYlN5c3RlbVByb3BlcnR5U3lzdGVtSW50ZWdyYXRvck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtTeXN0ZW1Qcm9wZXJ0eU1heExlbmd0aCk7Ci0jZWxzZQotICByZXN1bHQgPSBTYlN5c3RlbUdldFByb3BlcnR5KGtTYlN5c3RlbVByb3BlcnR5T3JpZ2luYWxEZXNpZ25NYW51ZmFjdHVyZXJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3lzdGVtUHJvcGVydHlNYXhMZW5ndGgpOwotI2VuZGlmCiAgIGlmIChyZXN1bHQpIHsKICAgICBwbGF0Zm9ybV9pbmZvLmluc2VydCh7InN5c3RlbV9pbnRlZ3JhdG9yX25hbWUiLCB2YWx1ZS5kYXRhKCl9KTsKICAgfQpAQCAtMTczLDcgKzE2Niw3IEBACiAKIH0gIC8vIG5hbWVzcGFjZQogCi12b2lkIEluc3RhbGxDcmFzaHBhZEhhbmRsZXIoKSB7Cit2b2lkIEluc3RhbGxDcmFzaHBhZEhhbmRsZXIoYm9vbCBzdGFydF9hdF9jcmFzaCkgewogICA6OmNyYXNocGFkOjpDcmFzaHBhZENsaWVudCogY2xpZW50ID0gR2V0Q3Jhc2hwYWRDbGllbnQoKTsKIAogICBjb25zdCBiYXNlOjpGaWxlUGF0aCBoYW5kbGVyX3BhdGggPSBHZXRQYXRoVG9DcmFzaHBhZEhhbmRsZXJCaW5hcnkoKTsKQEAgLTE5NSwxNCArMTg4LDIzIEBACiAKICAgSW5pdGlhbGl6ZUNyYXNocGFkRGF0YWJhc2UoZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgpOwogICBjbGllbnQtPlNldFVuaGFuZGxlZFNpZ25hbHMoe30pOwotICBjbGllbnQtPlN0YXJ0SGFuZGxlcihoYW5kbGVyX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlX2RpcmVjdG9yeV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X21ldHJpY3NfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICBrVXBsb2FkVXJsLAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2Fubm90YXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2FyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKworICBpZiAoc3RhcnRfYXRfY3Jhc2gpCisgICAgY2xpZW50LT5TdGFydEhhbmRsZXJBdENyYXNoKGhhbmRsZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2VfZGlyZWN0b3J5X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbWV0cmljc19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtVcGxvYWRVcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfYW5ub3RhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfYXJndW1lbnRzKTsKKyAgZWxzZQorICAgIGNsaWVudC0+U3RhcnRIYW5kbGVyKGhhbmRsZXJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZV9kaXJlY3RvcnlfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X21ldHJpY3NfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGtVcGxvYWRVcmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9hbm5vdGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2FyZ3VtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAKICAgOjpjcmFzaHBhZDo6U2FuaXRpemF0aW9uSW5mb3JtYXRpb24gc2FuaXRpemF0aW9uX2luZm8gPSB7MCwgMCwgMCwgMX07CiAgIGNsaWVudC0+U2VuZFNhbml0aXphdGlvbkluZm9ybWF0aW9uVG9IYW5kbGVyKHNhbml0aXphdGlvbl9pbmZvKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5neXAgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzE5NmUxLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3Jhc2hwYWRfd3JhcHBlcl9zdHViJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnd3JhcHBlcl9zdHViLmNjJywKLSAgICAgICAgJ3dyYXBwZXIuaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NyYXNocGFkX3dyYXBwZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd3cmFwcGVyLmNjJywKLSAgICAgICAgJ3dyYXBwZXIuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2NyYXNocGFkL2NsaWVudC9jbGllbnQuZ3lwOmNyYXNocGFkX2NsaWVudCcsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXIuaCBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oCmluZGV4IGI2NGMzNjguLjRkZWYxYTggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oCisrKyBiL3RoaXJkX3BhcnR5L2NyYXNocGFkL3dyYXBwZXIvd3JhcHBlci5oCkBAIC0yMiw3ICsyMiw3IEBACiBuYW1lc3BhY2UgY3Jhc2hwYWQgewogbmFtZXNwYWNlIHdyYXBwZXIgewogCi12b2lkIEluc3RhbGxDcmFzaHBhZEhhbmRsZXIoKTsKK3ZvaWQgSW5zdGFsbENyYXNocGFkSGFuZGxlcihib29sIHN0YXJ0X2F0X2NyYXNoKTsKIAogYm9vbCBBZGRFdmVyZ3JlZW5JbmZvVG9DcmFzaHBhZChFdmVyZ3JlZW5JbmZvIGV2ZXJncmVlbl9pbmZvKTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvY3Jhc2hwYWQvd3JhcHBlci93cmFwcGVyX3N0dWIuY2MgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXJfc3R1Yi5jYwppbmRleCAzNzc1ZGEzLi5iZjNjMDkzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXJfc3R1Yi5jYworKysgYi90aGlyZF9wYXJ0eS9jcmFzaHBhZC93cmFwcGVyL3dyYXBwZXJfc3R1Yi5jYwpAQCAtMTgsNyArMTgsNyBAQAogbmFtZXNwYWNlIGNyYXNocGFkIHsKIG5hbWVzcGFjZSB3cmFwcGVyIHsKIAotdm9pZCBJbnN0YWxsQ3Jhc2hwYWRIYW5kbGVyKCkge30KK3ZvaWQgSW5zdGFsbENyYXNocGFkSGFuZGxlcihib29sIHN0YXJ0X2F0X2NyYXNoKSB7fQogCiBib29sIEFkZEV2ZXJncmVlbkluZm9Ub0NyYXNocGFkKEV2ZXJncmVlbkluZm8gZXZlcmdyZWVuX2luZm8pIHsKICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGUyNjVfaW5jbHVkZXMvZGUyNjVfaW5jbHVkZXMuZ3lwIGIvdGhpcmRfcGFydHkvZGUyNjVfaW5jbHVkZXMvZGUyNjVfaW5jbHVkZXMuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmFmMGM2Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2RlMjY1X2luY2x1ZGVzL2RlMjY1X2luY2x1ZGVzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZGUyNjUnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJy4nIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kZXZ0b29scy9CVUlMRC5nbiBiL3RoaXJkX3BhcnR5L2RldnRvb2xzL0JVSUxELmduCmluZGV4IDFjYjVlMDcuLjZiODQzOTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2RldnRvb2xzL0JVSUxELmduCisrKyBiL3RoaXJkX3BhcnR5L2RldnRvb2xzL0JVSUxELmduCkBAIC00NzksNiArNDc5LDEyIEBACiAgICJmcm9udF9lbmQvd29ya3NwYWNlX2RpZmYvbW9kdWxlLmpzb24iLAogXQogCitpZiAoaXNfc3RhcmJvYXJkKSB7CisgIGFsbF9kZXZ0b29sc19maWxlcyArPSBbCisgICAgImZyb250X2VuZC9jb2JhbHQvbW9kdWxlLmpzb24iLAorICBdCit9CisKIGxpZ2h0aG91c2VfbG9jYWxlX2ZpbGVzID0gWwogICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2FyLVhCLmpzb24iLAogICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2FyLmpzb24iLApAQCAtMTA2Myw2ICsxMDY5LDkgQEAKIF0KIAogaWYgKGlzX3N0YXJib2FyZCkgeworICBhbGxfZGV2dG9vbHNfbW9kdWxlcyArPSBbCisgICAgImZyb250X2VuZC9jb2JhbHQvY29iYWx0LmpzIiwKKyAgXQogICBhbGxfZGV2dG9vbHNfbW9kdWxlcyAtPSBbCiAgICAgImZyb250X2VuZC93ZWJfYXVkaW8vd2ViX2F1ZGlvLmpzIiwKICAgICAiZnJvbnRfZW5kL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL1R5cGVzLmpzIiwKQEAgLTE2MjQsNiArMTYzMyw4IEBACiAgICIkcmVzb3VyY2VzX291dF9kaXIvY20vbWF0Y2hicmFja2V0cy5qcyIsCiAgICIkcmVzb3VyY2VzX291dF9kaXIvY20vbXVsdGlwbGV4LmpzIiwKICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9jbS9vdmVybGF5LmpzIiwKKyAgIiRyZXNvdXJjZXNfb3V0X2Rpci9mb3JtYXR0ZXJfd29ya2VyLnVuYnVuZGxlZC5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvaGVhcF9zbmFwc2hvdF93b3JrZXIudW5idW5kbGVkLmpzIiwKICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9oZWFwX3NuYXBzaG90X21vZGVsL2hlYXBfc25hcHNob3RfbW9kZWwuanMiLAogICAiJHJlc291cmNlc19vdXRfZGlyL2hlYXBfc25hcHNob3RfbW9kZWwvSGVhcFNuYXBzaG90TW9kZWwuanMiLAogICAiJHJlc291cmNlc19vdXRfZGlyL2hlYXBfc25hcHNob3Rfd29ya2VyL2hlYXBfc25hcHNob3Rfd29ya2VyLmpzIiwKQEAgLTE2MzYsNiArMTY0NywxOCBAQAogICAiJHJlc291cmNlc19vdXRfZGlyL3RleHRfdXRpbHMvVGV4dFV0aWxzLmpzIiwKICAgIiRyZXNvdXJjZXNfb3V0X2Rpci90ZXh0X3V0aWxzL1RleHRSYW5nZS5qcyIsCiAgICIkcmVzb3VyY2VzX291dF9kaXIvdGV4dF91dGlscy9UZXh0LmpzIiwKKyAgIiRyZXNvdXJjZXNfb3V0X2Rpci9mb3JtYXR0ZXJfd29ya2VyL2Zvcm1hdHRlcl93b3JrZXIuanMiLAorICAiJHJlc291cmNlc19vdXRfZGlyL2Zvcm1hdHRlcl93b3JrZXIvUmVsYXhlZEpTT05QYXJzZXIuanMiLAorICAiJHJlc291cmNlc19vdXRfZGlyL2Zvcm1hdHRlcl93b3JrZXIvSmF2YVNjcmlwdE91dGxpbmUuanMiLAorICAiJHJlc291cmNlc19vdXRfZGlyL2Zvcm1hdHRlcl93b3JrZXIvSmF2YVNjcmlwdEZvcm1hdHRlci5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvZm9ybWF0dGVyX3dvcmtlci9JZGVudGl0eUZvcm1hdHRlci5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvZm9ybWF0dGVyX3dvcmtlci9IVE1MRm9ybWF0dGVyLmpzIiwKKyAgIiRyZXNvdXJjZXNfb3V0X2Rpci9mb3JtYXR0ZXJfd29ya2VyL0Zvcm1hdHRlcldvcmtlci5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvZm9ybWF0dGVyX3dvcmtlci9Gb3JtYXR0ZWRDb250ZW50QnVpbGRlci5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvZm9ybWF0dGVyX3dvcmtlci9FU1RyZWVXYWxrZXIuanMiLAorICAiJHJlc291cmNlc19vdXRfZGlyL2Zvcm1hdHRlcl93b3JrZXIvQ1NTUnVsZVBhcnNlci5qcyIsCisgICIkcmVzb3VyY2VzX291dF9kaXIvZm9ybWF0dGVyX3dvcmtlci9DU1NGb3JtYXR0ZXIuanMiLAorICAiJHJlc291cmNlc19vdXRfZGlyL2Zvcm1hdHRlcl93b3JrZXIvQWNvcm5Ub2tlbml6ZXIuanMiLAogICAiJHJlc291cmNlc19vdXRfZGlyL2NtX2hlYWRsZXNzL2NtX2hlYWRsZXNzLmpzIiwKICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9jbV9oZWFkbGVzcy9oZWFkbGVzc2NvZGVtaXJyb3IuanMiLAogICAiJHJlc291cmNlc19vdXRfZGlyL2RhdGFfZ3JpZC9kYXRhX2dyaWQuanMiLApAQCAtMTg2Myw2ICsxODg2LDkgQEAKIF0KIAogaWYgKGlzX3N0YXJib2FyZCkgeworICBjb3BpZWRfZGV2dG9vbHNfbW9kdWxlcyArPSBbCisgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9jb2JhbHQvY29iYWx0LmpzIiwKKyAgXQogICBjb3BpZWRfZGV2dG9vbHNfbW9kdWxlcyAtPSBbCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci93ZWJfYXVkaW8vd2ViX2F1ZGlvLmpzIiwKICAgICAiJHJlc291cmNlc19vdXRfZGlyL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL1R5cGVzLmpzIiwKQEAgLTE5OTgsMTcgKzIwMjQsMTggQEAKIF0KIAogaWYgKGlzX3N0YXJib2FyZCkgeworICBnZW5lcmF0ZWRfbm9uX2F1dG9zdGFydF9ub25fcmVtb3RlX21vZHVsZXMgKz0gWworICAgICIkcmVzb3VyY2VzX291dF9kaXIvY29iYWx0L2NvYmFsdF9tb2R1bGUuanMiLAorICBdCiAgIGdlbmVyYXRlZF9ub25fYXV0b3N0YXJ0X25vbl9yZW1vdGVfbW9kdWxlcyAtPSBbCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9hbmltYXRpb24vYW5pbWF0aW9uX21vZHVsZS5qcyIsCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9hdWRpdHMvYXVkaXRzX21vZHVsZS5qcyIsCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9jaGFuZ2VzL2NoYW5nZXNfbW9kdWxlLmpzIiwKICAgICAiJHJlc291cmNlc19vdXRfZGlyL2NvdmVyYWdlL2NvdmVyYWdlX21vZHVsZS5qcyIsCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9kZXZpY2VzL2RldmljZXNfbW9kdWxlLmpzIiwKLSAgICAiJHJlc291cmNlc19vdXRfZGlyL2hlYXBfc25hcHNob3RfbW9kZWwvaGVhcF9zbmFwc2hvdF9tb2RlbF9tb2R1bGUuanMiLAogICAgICIkcmVzb3VyY2VzX291dF9kaXIvanNfcHJvZmlsZXIvanNfcHJvZmlsZXJfbW9kdWxlLmpzIiwKICAgICAiJHJlc291cmNlc19vdXRfZGlyL21lZGlhL21lZGlhX21vZHVsZS5qcyIsCiAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9ub2RlX2RlYnVnZ2VyL25vZGVfZGVidWdnZXJfbW9kdWxlLmpzIiwKLSAgICAiJHJlc291cmNlc19vdXRfZGlyL3BlcmZvcm1hbmNlX21vbml0b3IvcGVyZm9ybWFuY2VfbW9uaXRvcl9tb2R1bGUuanMiLAogICAgICIkcmVzb3VyY2VzX291dF9kaXIvc2VjdXJpdHkvc2VjdXJpdHlfbW9kdWxlLmpzIiwKICAgICAiJHJlc291cmNlc19vdXRfZGlyL3dlYl9hdWRpby93ZWJfYXVkaW9fbW9kdWxlLmpzIiwKICAgXQpAQCAtMjE1MSw2ICsyMTc4LDEwIEBACiB9CiAKIGNvcHkoImNvcHlfaW5zcGVjdG9yX2ltYWdlcyIpIHsKKyAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIGluc3RhbGxfY29udGVudCA9IHRydWUKKyAgfQorCiAgIHNvdXJjZXMgPSBkZXZ0b29sc19pbWFnZV9maWxlcwogICBvdXRwdXRzID0gWwogICAgICIkcmVzb3VyY2VzX291dF9kaXIvSW1hZ2VzL3t7c291cmNlX2ZpbGVfcGFydH19IiwKQEAgLTIyMzMsNiArMjI2NCwxMCBAQAogfQogCiBhY3Rpb24oInN1cHBvcnRlZF9jc3NfcHJvcGVydGllcyIpIHsKKyAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIGluc3RhbGxfY29udGVudCA9IHRydWUKKyAgfQorCiAgIHNjcmlwdCA9ICJzY3JpcHRzL2J1aWxkL2dlbmVyYXRlX3N1cHBvcnRlZF9jc3MucHkiCiAKICAgaWYgKGlzX3N0YXJib2FyZCkgewpAQCAtMjI1MywyNCArMjI4OCwzMiBAQAogICAgICAgcmViYXNlX3BhdGgoaW5wdXRzLCByb290X2J1aWxkX2RpcikgKyByZWJhc2VfcGF0aChvdXRwdXRzLCByb290X2J1aWxkX2RpcikKIH0KIAotaWYgKCFpc19zdGFyYm9hcmQpIHsKLSAgYWN0aW9uKCJhcmlhX3Byb3BlcnRpZXMiKSB7Ci0gICAgc2NyaXB0ID0gInNjcmlwdHMvYnVpbGQvZ2VuZXJhdGVfYXJpYS5weSIKK2FjdGlvbigiYXJpYV9wcm9wZXJ0aWVzIikgeworICBzY3JpcHQgPSAic2NyaXB0cy9idWlsZC9nZW5lcmF0ZV9hcmlhLnB5IgogCisgIGlmIChpc19zdGFyYm9hcmQpIHsKKyAgICBpbnB1dHMgPSBbCisgICAgICAiYmxpbmsvcHJvcGVydGllcy9hcmlhX3Byb3BlcnRpZXMuanNvbjUiLAorICAgIF0KKyAgfSBlbHNlIHsKICAgICBpbnB1dHMgPSBbCiAgICAgICAiLy90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2h0bWwvYXJpYV9wcm9wZXJ0aWVzLmpzb241IiwKICAgICBdCi0KLSAgICBvdXRwdXRzID0gWwotICAgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9hY2Nlc3NpYmlsaXR5L0FSSUFQcm9wZXJ0aWVzLmpzIiwKLSAgICBdCi0KLSAgICBhcmdzID0KLSAgICAgICAgcmViYXNlX3BhdGgoaW5wdXRzLCByb290X2J1aWxkX2RpcikgKyByZWJhc2VfcGF0aChvdXRwdXRzLCByb290X2J1aWxkX2RpcikKICAgfQorCisgIG91dHB1dHMgPSBbCisgICAgIiRyZXNvdXJjZXNfb3V0X2Rpci9hY2Nlc3NpYmlsaXR5L0FSSUFQcm9wZXJ0aWVzLmpzIiwKKyAgXQorCisgIGFyZ3MgPQorICAgICAgcmViYXNlX3BhdGgoaW5wdXRzLCByb290X2J1aWxkX2RpcikgKyByZWJhc2VfcGF0aChvdXRwdXRzLCByb290X2J1aWxkX2RpcikKIH0KIAogYWN0aW9uKCJmcm9udGVuZF9wcm90b2NvbF9zb3VyY2VzIikgeworICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorICB9CisKICAgc2NyaXB0ID0gInNjcmlwdHMvYnVpbGQvY29kZV9nZW5lcmF0b3JfZnJvbnRlbmQucHkiCiAgIGlmIChpc19zdGFyYm9hcmQpIHsKICAgICBkZXBzID0gWwpAQCAtMjI5NSw4ICsyMzM4LDExIEBACiB9CiAKIGFjdGlvbigiYnVpbGRfcmVsZWFzZV9kZXZ0b29scyIpIHsKLSAgc2NyaXB0ID0gIi8vc3RhcmJvYXJkL2J1aWxkL3J1bl9iYXNoLnB5IgotICBweV9zY3JpcHQgPSAic2NyaXB0cy9idWlsZC9idWlsZF9yZWxlYXNlX2FwcGxpY2F0aW9ucy5weSIKKyAgaWYgKGlzX3N0YXJib2FyZCkgeworICAgIGluc3RhbGxfY29udGVudCA9IHRydWUKKyAgfQorCisgIHNjcmlwdCA9ICJzY3JpcHRzL2J1aWxkL2J1aWxkX3JlbGVhc2VfYXBwbGljYXRpb25zLnB5IgogCiAgIGRlcHMgPSBbCiAgICAgIjphcmlhX3Byb3BlcnRpZXMiLApAQCAtMjMxNCw3ICsyMzYwLDcgQEAKICAgXQogCiAgIGlucHV0cyA9Ci0gICAgICBbIHB5X3NjcmlwdCBdICsgaGVscGVyX3NjcmlwdHMgKyBhbGxfZGV2dG9vbHNfZmlsZXMgKworICAgICAgaGVscGVyX3NjcmlwdHMgKyBhbGxfZGV2dG9vbHNfZmlsZXMgKwogICAgICAgZGV2dG9vbHNfdGVzdF9maWxlcyArIGdlbmVyYXRlZF9zY3JpcHRzICsgZ2VuZXJhdGVkX2FyaWFfcHJvcGVydGllcyArCiAgICAgICBhcHBsaWNhdGlvbl90ZW1wbGF0ZXMgKwogICAgICAgIyBJbiBgYnVpbGRfcmVsZWFzZV9hcHBsaWNhdGlvbnNgIHdlIHNvbWV0aW1lcyBpbmNsdWRlCkBAIC0yMzMxLDExICsyMzc3LDcgQEAKICAgICBvdXRwdXRzIC09IGdlbmVyYXRlZF90ZXN0X21vZHVsZXMKICAgfQogCi0gIGFyZ3MgPSBbCi0gICAgICAgICAgICJweXRob24yIiwKLSAgICAgICAgICAgcmViYXNlX3BhdGgocHlfc2NyaXB0LCByb290X2J1aWxkX2RpciksCi0gICAgICAgICBdICsgZGV2dG9vbHNfYXBwbGljYXRpb25zICsKLSAgICAgICAgIFsKKyAgYXJncyA9IGRldnRvb2xzX2FwcGxpY2F0aW9ucyArIFsKICAgICAgICAgICAgIi0taW5wdXRfcGF0aCIsCiAgICAgICAgICAgIHJlYmFzZV9wYXRoKCJmcm9udF9lbmQiLCByb290X2J1aWxkX2RpciksCiAgICAgICAgICAgICItLW91dHB1dF9wYXRoIiwKQEAgLTIzNDQsMjEgKzIzODYsMjAgQEAKIH0KIAogYWN0aW9uKCJjb3B5X2RldnRvb2xzX21vZHVsZXMiKSB7Ci0gIHNjcmlwdCA9ICIvL3N0YXJib2FyZC9idWlsZC9ydW5fYmFzaC5weSIKLSAgcHlfc2NyaXB0ID0gInNjcmlwdHMvYnVpbGQvY29weV9kZXZ0b29sc19tb2R1bGVzLnB5IgorICBpZiAoaXNfc3RhcmJvYXJkKSB7CisgICAgaW5zdGFsbF9jb250ZW50ID0gdHJ1ZQorICB9CisKKyAgc2NyaXB0ID0gInNjcmlwdHMvYnVpbGQvY29weV9kZXZ0b29sc19tb2R1bGVzLnB5IgogCiAgIGRlcHMgPSBbCiAgICAgIjpidWlsZF9yZWxlYXNlX2RldnRvb2xzIiwKICAgXQogCi0gIGlucHV0cyA9IFsgcHlfc2NyaXB0IF0gKyBhbGxfZGV2dG9vbHNfbW9kdWxlcworICBpbnB1dHMgPSBhbGxfZGV2dG9vbHNfbW9kdWxlcwogICBvdXRwdXRzID0gY29waWVkX2RldnRvb2xzX21vZHVsZXMKIAotICBhcmdzID0gWwotICAgICAgICAgICAicHl0aG9uMiIsCi0gICAgICAgICAgIHJlYmFzZV9wYXRoKHB5X3NjcmlwdCwgcm9vdF9idWlsZF9kaXIpLAotICAgICAgICAgXSArIGFsbF9kZXZ0b29sc19tb2R1bGVzICsKLSAgICAgICAgIFsKKyAgYXJncyA9IGFsbF9kZXZ0b29sc19tb2R1bGVzICsgWwogICAgICAgICAgICAiLS1pbnB1dF9wYXRoIiwKICAgICAgICAgICAgcmViYXNlX3BhdGgoIi4iLCByb290X2J1aWxkX2RpciksCiAgICAgICAgICAgICItLW91dHB1dF9wYXRoIiwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RldnRvb2xzL2JsaW5rL2RldnRvb2xzX3Byb3RvY29sL2RldnRvb2xzX3Byb3RvY29sLmd5cCBiL3RoaXJkX3BhcnR5L2RldnRvb2xzL2JsaW5rL2RldnRvb2xzX3Byb3RvY29sL2RldnRvb2xzX3Byb3RvY29sLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRjZWQ0Zi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9kZXZ0b29scy9ibGluay9kZXZ0b29sc19wcm90b2NvbC9kZXZ0b29sc19wcm90b2NvbC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBTZWUgQ2hyb21pdW06Ci0jIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMuZ2l0LysvcmVmcy90YWdzLzgwLjAuMzk4Ny4xNDgvdGhpcmRfcGFydHkvYmxpbmsvcHVibGljL2RldnRvb2xzX3Byb3RvY29sL0JVSUxELmduCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2JfcGVkYW50aWNfd2FybmluZ3MnOiAxLAotICAgICd2OF9pbnNwZWN0b3JfanNfcHJvdG9jb2xfZmlsZSc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OC9pbmNsdWRlL2pzX3Byb3RvY29sLnBkbCcsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdwcm90b2NvbF9jb21wYXRpYmlsaXR5X2NoZWNrJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2FjdGlvbnMnOiBbewotICAgICAgICAnYWN0aW9uX25hbWUnOiAnY2hlY2tfcHJvdG9jb2xfY29tcGF0aWJpbGl0eScsCi0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ3NjcmlwdF9wYXRoJzogJzwoREVQVEgpL3RoaXJkX3BhcnR5L2luc3BlY3Rvcl9wcm90b2NvbC9jaGVja19wcm90b2NvbF9jb21wYXRpYmlsaXR5LnB5JywKLSAgICAgICAgICAnaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgICAnYnJvd3Nlcl9wcm90b2NvbC5wZGwnLAotICAgICAgICAgICAgJzwodjhfaW5zcGVjdG9yX2pzX3Byb3RvY29sX2ZpbGUpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzdGFtcF9maWxlJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3RoaXJkX3BhcnR5L2RldnRvb2xzL2JsaW5rL2RldnRvb2xzX3Byb3RvY29sL2NoZWNrX3Byb3RvY29sX2NvbXBhdGliaWxpdHkuc3RhbXAnLAotICAgICAgICB9LAotICAgICAgICAnaW5wdXRzJzogWyAnPChzY3JpcHRfcGF0aCknLCAnPEAoaW5wdXRfZmlsZXMpJyBdLAotICAgICAgICAnb3V0cHV0cyc6IFsgJzwoc3RhbXBfZmlsZSknIF0sCi0gICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICc8KHNjcmlwdF9wYXRoKScsCi0gICAgICAgICAgJy0tc3RhbXAnLAotICAgICAgICAgICc8KHN0YW1wX2ZpbGUpJywKLSAgICAgICAgICAnPEAoaW5wdXRfZmlsZXMpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncHJvdG9jb2xfdmVyc2lvbicsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdwcm90b2NvbF9jb21wYXRpYmlsaXR5X2NoZWNrJywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFt7Ci0gICAgICAgICdhY3Rpb25fbmFtZSc6ICdjb25jYXRlbmF0ZV9wcm90b2NvbHMnLAotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdzY3JpcHRfcGF0aCc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pbnNwZWN0b3JfcHJvdG9jb2wvY29uY2F0ZW5hdGVfcHJvdG9jb2xzLnB5JywKLSAgICAgICAgICAnaW5wdXRfZmlsZXMnOiBbCi0gICAgICAgICAgICAnYnJvd3Nlcl9wcm90b2NvbC5wZGwnLAotICAgICAgICAgICAgJzwodjhfaW5zcGVjdG9yX2pzX3Byb3RvY29sX2ZpbGUpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRfZmlsZSc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS90aGlyZF9wYXJ0eS9kZXZ0b29scy9ibGluay9kZXZ0b29sc19wcm90b2NvbC9wcm90b2NvbC5qc29uJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2lucHV0cyc6IFsgJzwoc2NyaXB0X3BhdGgpJywgJzxAKGlucHV0X2ZpbGVzKScgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbICc8KG91dHB1dF9maWxlKScgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAnPEAoaW5wdXRfZmlsZXMpJywKLSAgICAgICAgICAnPChvdXRwdXRfZmlsZSknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RldnRvb2xzL2RldnRvb2xzLmd5cCBiL3RoaXJkX3BhcnR5L2RldnRvb2xzL2RldnRvb2xzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdjN2NlNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9kZXZ0b29scy9kZXZ0b29scy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0KLSMgUG9ydGVkIGZyb20gQ2hyb21pdW0ncyBCVUlMRC5nbiAoaW4gdGhpcyBkaXJlY3RvcnkpLgotIyBWYXJpYWJsZSBhbmQgdGFyZ2V0IG5hbWVzIHdlcmUga2VwdCB0aGUgc2FtZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdhbGxfZGV2dG9vbHNfZmlsZXMnOiBbCi0gICAgICAiZnJvbnRfZW5kL2FjY2Vzc2liaWxpdHkvYWNjZXNzaWJpbGl0eU5vZGUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eS9hY2Nlc3NpYmlsaXR5UHJvcGVydGllcy5jc3MiLAotICAgICAgImZyb250X2VuZC9hY2Nlc3NpYmlsaXR5L2F4QnJlYWRjcnVtYnMuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eS9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2FjY2Vzc2liaWxpdHlfdGVzdF9ydW5uZXIvQWNjZXNzaWJpbGl0eVBhbmVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2FuaW1hdGlvbi9hbmltYXRpb25TY3JlZW5zaG90UG9wb3Zlci5jc3MiLAotICAgICAgImZyb250X2VuZC9hbmltYXRpb24vYW5pbWF0aW9uVGltZWxpbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYW5pbWF0aW9uL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXBwbGljYXRpb25fdGVzdF9ydW5uZXIvQXBwY2FjaGVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXBwbGljYXRpb25fdGVzdF9ydW5uZXIvQ2FjaGVTdG9yYWdlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2FwcGxpY2F0aW9uX3Rlc3RfcnVubmVyL0luZGV4ZWREQlRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2FwcGxpY2F0aW9uX3Rlc3RfcnVubmVyL1Jlc291cmNlc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lci9SZXNvdXJjZVRyZWVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXBwbGljYXRpb25fdGVzdF9ydW5uZXIvU2VydmljZVdvcmtlcnNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvQXVkaXRzU2VydmljZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9saWdodGhvdXNlLWR0LWJ1bmRsZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHMvYXVkaXRzRGlhbG9nLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0cy9hdWRpdHNTdGFydFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzL2F1ZGl0c1BhbmVsLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0cy9saWdodGhvdXNlL3JlcG9ydC5jc3MiLAotICAgICAgImZyb250X2VuZC9hdWRpdHMvbGlnaHRob3VzZS90ZW1wbGF0ZS5odG1sIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzL2xpZ2h0aG91c2UvdGVtcGxhdGVzLmh0bWwiLAotICAgICAgImZyb250X2VuZC9hdWRpdHMvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfdGVzdF9ydW5uZXIvQXVkaXRzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F4ZV9jb3JlX3Rlc3RfcnVubmVyL0F4ZUNvcmVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXhlX2NvcmVfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9iaW5kaW5ncy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0F1dG9tYXBwaW5nVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0JpbmRpbmdzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0lzb2xhdGVkRmlsZXN5c3RlbVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5nc190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL1BlcnNpc3RlbmNlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL092ZXJyaWRlc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX2RlYnVnZ2VyL2RvbUJyZWFrcG9pbnRzU2lkZWJhclBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYnJvd3Nlcl9kZWJ1Z2dlci9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvYnJvd3Nlcl9kZWJ1Z2dlci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2Jyb3dzZXJfZGVidWdnZXIveGhyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX3Nkay9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2Nzc19vdmVydmlldy9jc3NPdmVydmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvY3NzT3ZlcnZpZXdTdGFydFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY3NzX292ZXJ2aWV3L2Nzc092ZXJ2aWV3UHJvY2Vzc2luZ1ZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY3NzX292ZXJ2aWV3L2Nzc092ZXJ2aWV3Q29tcGxldGVkVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvY3NzT3ZlcnZpZXdTaWRlYmFyUGFuZWwuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY3NzX292ZXJ2aWV3L21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY2hhbmdlcy9jaGFuZ2VzVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9jaGFuZ2VzL2NoYW5nZXNTaWRlYmFyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2NoYW5nZXMvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9jbS9jb2RlbWlycm9yLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY21faGVhZGxlc3MvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9jbV9tb2Rlcy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NtX3dlYl9tb2Rlcy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvYmFsdC9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvbG9yX3BpY2tlci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvbG9yX3BpY2tlci9zcGVjdHJ1bS5jc3MiLAotICAgICAgImZyb250X2VuZC9jb21tb24vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9jb21wb25lbnRzL2ltYWdlUHJldmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9jb21wb25lbnRzL2pzVXRpbHMuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY29tcG9uZW50cy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGUvY29uc29sZVZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9jb25zb2xlQ29udGV4dFNlbGVjdG9yLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGUvY29uc29sZVBpblBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9jb25zb2xlUHJvbXB0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGUvY29uc29sZVNpZGViYXIuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGVfY291bnRlcnMvZXJyb3JXYXJuaW5nQ291bnRlci5jc3MiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlX2NvdW50ZXJzL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZV90ZXN0X3J1bm5lci9Db25zb2xlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGVfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9jb29raWVfdGFibGUvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9jb3ZlcmFnZS9jb3ZlcmFnZUxpc3RWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvdmVyYWdlL2NvdmVyYWdlVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9jb3ZlcmFnZS9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvdmVyYWdlX3Rlc3RfcnVubmVyL0NvdmVyYWdlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvdmVyYWdlX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY3B1X3Byb2ZpbGVyX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY3B1X3Byb2ZpbGVyX3Rlc3RfcnVubmVyL1Byb2ZpbGVyVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RhZ3JlX2xheW91dC9kYWdyZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RhZ3JlX2xheW91dC9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2RhdGFfZ3JpZC9kYXRhR3JpZC5jc3MiLAotICAgICAgImZyb250X2VuZC9kYXRhX2dyaWQvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9kYXRhX2dyaWRfdGVzdF9ydW5uZXIvRGF0YUdyaWRUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZGF0YV9ncmlkX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZGV2aWNlX21vZGVfdGVzdF9ydW5uZXIvRGV2aWNlTW9kZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9kZXZpY2VfbW9kZV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2RldmljZXMvRGV2aWNlc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9kZXZpY2VzL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZGlmZi9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2RvbV9leHRlbnNpb24vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9icmVhZGNydW1icy5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9jbGFzc2VzUGFuZVdpZGdldC5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9jb21wdXRlZFN0eWxlU2lkZWJhclBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvY29tcHV0ZWRTdHlsZVdpZGdldFRyZWUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvZG9tTGlua2lmaWVyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL2VsZW1lbnRzUGFuZWwuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvZWxlbWVudFN0YXRlUGFuZVdpZGdldC5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9lbGVtZW50c1RyZWVPdXRsaW5lLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL21ldHJpY3NTaWRlYmFyUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9ub2RlU3RhY2tUcmFjZVdpZGdldC5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL3BsYXRmb3JtRm9udHNXaWRnZXQuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvcHJvcGVydGllc1dpZGdldC5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9zdHlsZXNTZWN0aW9uVHJlZS5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9zdHlsZXNTaWRlYmFyUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50c190ZXN0X3J1bm5lci9FZGl0RE9NVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzX3Rlc3RfcnVubmVyL0VsZW1lbnRzUGFuZWxTaGFkb3dTZWxlY3Rpb25PblJlZnJlc2hUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHNfdGVzdF9ydW5uZXIvRWxlbWVudHNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHNfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9lbGVtZW50c190ZXN0X3J1bm5lci9TZXRPdXRlckhUTUxUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHNfdGVzdF9ydW5uZXIvU3R5bGVzVXBkYXRlTGlua3NUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9kZXZpY2VNb2RlVG9vbGJhci5jc3MiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vZGV2aWNlTW9kZVZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0aW9uL2RldmljZXNTZXR0aW5nc1RhYi5jc3MiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vZ2VvbG9jYXRpb25zU2V0dGluZ3NUYWIuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0aW9uL2luc3BlY3RlZFBhZ2VQbGFjZWhvbGRlci5jc3MiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vbWVkaWFRdWVyeUluc3BlY3Rvci5jc3MiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vc2Vuc29ycy5jc3MiLAotICAgICAgImZyb250X2VuZC9ldmVudF9saXN0ZW5lcnMvZXZlbnRMaXN0ZW5lcnNWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2V2ZW50X2xpc3RlbmVycy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnMvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9leHRlbnNpb25zX3Rlc3RfcnVubmVyL0V4dGVuc2lvbnNOZXR3b3JrVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnNfdGVzdF9ydW5uZXIvRXh0ZW5zaW9uc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9leHRlbnNpb25zX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9hY29ybi9hY29ybi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvYWNvcm4vYWNvcm5fbG9vc2UuanMiLAotICAgICAgImZyb250X2VuZC9mb3JtYXR0ZXJfd29ya2VyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaGFyX2ltcG9ydGVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9wcm9maWxlcl90ZXN0X3J1bm5lci9IZWFwUHJvZmlsZXJUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9wcm9maWxlcl90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2hlYXBfc25hcHNob3RfbW9kZWwvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9oZWFwX3NuYXBzaG90X3dvcmtlci5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9zbmFwc2hvdF93b3JrZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9oZWxwL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaGVscC9yZWxlYXNlTm90ZS5jc3MiLAotICAgICAgImZyb250X2VuZC9ob3N0L21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9iZXppZXJFZGl0b3IuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9iZXppZXJTd2F0Y2guY3NzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9jb2xvclN3YXRjaC5jc3MiLAotICAgICAgImZyb250X2VuZC9pbmxpbmVfZWRpdG9yL2Nzc1NoYWRvd0VkaXRvci5jc3MiLAotICAgICAgImZyb250X2VuZC9pbmxpbmVfZWRpdG9yL2Nzc1NoYWRvd1N3YXRjaC5jc3MiLAotICAgICAgImZyb250X2VuZC9pbmxpbmVfZWRpdG9yL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9zd2F0Y2hQb3BvdmVyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2luc3BlY3Rvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2luc3BlY3Rvci5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaW5zcGVjdG9yX21haW4vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9pbnNwZWN0b3JfbWFpbi9ub2RlSWNvbi5jc3MiLAotICAgICAgImZyb250X2VuZC9pbnNwZWN0b3JfbWFpbi9yZW5kZXJpbmdPcHRpb25zLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2ludGVncmF0aW9uX3Rlc3RfcnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW50ZWdyYXRpb25fdGVzdF9ydW5uZXIuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2phdmFzY3JpcHRfbWV0YWRhdGEvbW9kdWxlLmpzb24iLAotCi0gICAgICAiZnJvbnRfZW5kL2pzX21haW4vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9qc19wcm9maWxlci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2xheWVyX3ZpZXdlci9sYXllckRldGFpbHNWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL2xheWVyX3ZpZXdlci9sYXllcnMzRFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL3BhaW50UHJvZmlsZXIuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJzL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJzX3Rlc3RfcnVubmVyL0xheWVyc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9sYXllcnNfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9tYWluL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvcHJvdG9jb2xfbW9uaXRvci9wcm90b2NvbE1vbml0b3IuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvdG9jb2xfbW9uaXRvci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL21vYmlsZV90aHJvdHRsaW5nL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvbW9iaWxlX3Rocm90dGxpbmcvdGhyb3R0bGluZ1NldHRpbmdzVGFiLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL21lZGlhL2V2ZW50RGlzcGxheVRhYmxlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL21lZGlhL0V2ZW50RGlzcGxheVRhYmxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWVkaWEvTWFpblZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9tZWRpYS9NZWRpYVRhYmxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWVkaWEvUGxheWVyRGV0YWlsVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL21lZGlhL3BsYXllckxpc3RWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL21lZGlhL1BsYXllckxpc3RWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWVkaWEvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9tZWRpYS9NZWRpYU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWVkaWEvbWVkaWFWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL25kYl9hcHAuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvYmluYXJ5UmVzb3VyY2VWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvYmxvY2tlZFVSTHNQYW5lLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvZXZlbnRTb3VyY2VNZXNzYWdlc1ZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvbmV0d29ya0NvbmZpZ1ZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9uZXR3b3JrTG9nVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL25ldHdvcmtNYW5hZ2VDdXN0b21IZWFkZXJzVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL25ldHdvcmtQYW5lbC5jc3MiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL25ldHdvcmtUaW1pbmdUYWJsZS5jc3MiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL25ldHdvcmtXYXRlcmZhbGxDb2x1bW4uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9yZXF1ZXN0Q29va2llc1ZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9yZXF1ZXN0SGVhZGVyc1RyZWUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9yZXF1ZXN0SGVhZGVyc1ZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9yZXF1ZXN0SFRNTFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9yZXF1ZXN0SW5pdGlhdG9yVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL3NpZ25lZEV4Y2hhbmdlSW5mb1RyZWUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9zaWduZWRFeGNoYW5nZUluZm9WaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvd2ViU29ja2V0RnJhbWVWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmtfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrX3Rlc3RfcnVubmVyL05ldHdvcmtUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbm9kZV9kZWJ1Z2dlci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL25vZGVfbWFpbi9Ob2RlQ29ubmVjdGlvbnNQYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25vZGVfbWFpbi9ub2RlQ29ubmVjdGlvbnNQYW5lbC5jc3MiLAotICAgICAgImZyb250X2VuZC9ub2RlX21haW4vTm9kZU1haW4uanMiLAotICAgICAgImZyb250X2VuZC9ub2RlX21haW4vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvY3VzdG9tUHJldmlld0NvbXBvbmVudC5jc3MiLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvb2JqZWN0UG9wb3Zlci5jc3MiLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvb2JqZWN0UHJvcGVydGllc1NlY3Rpb24uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvb2JqZWN0X3VpL29iamVjdFZhbHVlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvQ2hhcnRWaWV3cG9ydC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvRmlsbVN0cmlwVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvRmxhbWVDaGFydC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvR0NBY3Rpb25EZWxlZ2F0ZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvTGluZUxldmVsUHJvZmlsZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvTGl2ZUhlYXBQcm9maWxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZl91aS9OZXR3b3JrUHJpb3JpdGllcy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvT3ZlcnZpZXdHcmlkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZl91aS9QaWVDaGFydC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvVGltZWxpbmVHcmlkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZl91aS9UaW1lbGluZU92ZXJ2aWV3UGFuZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvY2hhcnRWaWV3cG9ydC5jc3MiLAotICAgICAgImZyb250X2VuZC9wZXJmX3VpL2ZpbG1TdHJpcFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZl91aS9mbGFtZUNoYXJ0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9wZXJmX3VpL292ZXJ2aWV3R3JpZC5jc3MiLAotICAgICAgImZyb250X2VuZC9wZXJmX3VpL3BpZUNoYXJ0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvdGltZWxpbmVHcmlkLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZfdWkvdGltZWxpbmVPdmVydmlld0luZm8uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZm9ybWFuY2VfbW9uaXRvci9wZXJmb3JtYW5jZU1vbml0b3IuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZm9ybWFuY2VfbW9uaXRvci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZvcm1hbmNlX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvcGVyZm9ybWFuY2VfdGVzdF9ydW5uZXIvVGltZWxpbmVEYXRhVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZvcm1hbmNlX3Rlc3RfcnVubmVyL1RpbWVsaW5lVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL2VkaXRGaWxlU3lzdGVtVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9wZXJzaXN0ZW5jZS9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL3dvcmtzcGFjZVNldHRpbmdzVGFiLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3BsYXRmb3JtL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvQm90dG9tVXBQcm9maWxlRGF0YUdyaWQuanMiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9DUFVQcm9maWxlRmxhbWVDaGFydC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL0NQVVByb2ZpbGVWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvaGVhcFByb2ZpbGVyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL0hlYXBQcm9maWxlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL0hlYXBQcm9maWxlclBhbmVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvSGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvSGVhcFNuYXBzaG90UHJveHkuanMiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9IZWFwU25hcHNob3RWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvSGVhcFRpbWVsaW5lT3ZlcnZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9Jc29sYXRlU2VsZWN0b3IuanMiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9MaXZlSGVhcFByb2ZpbGVWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvbGl2ZUhlYXBQcm9maWxlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvUHJvZmlsZURhdGFHcmlkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvUHJvZmlsZUhlYWRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL3Byb2ZpbGVMYXVuY2hlclZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvUHJvZmlsZUxhdW5jaGVyVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Byb2ZpbGVyL1Byb2ZpbGVUeXBlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvcHJvZmlsZXNQYW5lbC5jc3MiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9Qcm9maWxlc1BhbmVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvcHJvZmlsZXNTaWRlYmFyVHJlZS5jc3MiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9Qcm9maWxlVHlwZVJlZ2lzdHJ5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvZmlsZXIvUHJvZmlsZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9wcm9maWxlci9Ub3BEb3duUHJvZmlsZURhdGFHcmlkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvdG9jb2wvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9xdWlja19vcGVuL2ZpbHRlcmVkTGlzdFdpZGdldC5jc3MiLAotICAgICAgImZyb250X2VuZC9xdWlja19vcGVuL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0FwcGxpY2F0aW9uQ2FjaGVNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9BcHBsaWNhdGlvbkNhY2hlSXRlbXNWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0FwcGxpY2F0aW9uUGFuZWxTaWRlYmFyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL2FwcE1hbmlmZXN0Vmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvQXBwTWFuaWZlc3RWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0JhY2tncm91bmRTZXJ2aWNlTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvYmFja2dyb3VuZFNlcnZpY2VWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9CYWNrZ3JvdW5kU2VydmljZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvY2xlYXJTdG9yYWdlVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvQ2xlYXJTdG9yYWdlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9Db29raWVJdGVtc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvY29va2llSXRlbXNWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9EYXRhYmFzZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0RhdGFiYXNlUXVlcnlWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0RhdGFiYXNlVGFibGVWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0RPTVN0b3JhZ2VJdGVtc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvRE9NU3RvcmFnZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL0luZGV4ZWREQk1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcmVzb3VyY2VzL2luZGV4ZWREQlZpZXdzLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9JbmRleGVkREJWaWV3cy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9yZXNvdXJjZXNQYW5lbC5jc3MiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvUmVzb3VyY2VzUGFuZWwuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvUmVzb3VyY2VzU2VjdGlvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9yZXNvdXJjZXNTaWRlYmFyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9zZXJ2aWNlV29ya2VyQ2FjaGVWaWV3cy5jc3MiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvU2VydmljZVdvcmtlckNhY2hlVmlld3MuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvc2VydmljZVdvcmtlcnNWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jlc291cmNlcy9TZXJ2aWNlV29ya2Vyc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9yZXNvdXJjZXMvU3RvcmFnZUl0ZW1zVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NoZWxsLmpzb24iLAotICAgICAgImZyb250X2VuZC9zY3JlZW5jYXN0L21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc2NyZWVuY2FzdC9zY3JlZW5jYXN0Vmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zZGsvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zZGtfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zZGtfdGVzdF9ydW5uZXIvUGFnZU1vY2tUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VhcmNoL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc2VhcmNoL3NlYXJjaFJlc3VsdHNQYW5lLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlYXJjaC9zZWFyY2hWaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5L2xvY2tJY29uLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5L21haW5WaWV3LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5L21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc2VjdXJpdHkvb3JpZ2luVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zZWN1cml0eS9zaWRlYmFyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5X3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc2VjdXJpdHlfdGVzdF9ydW5uZXIvU2VjdXJpdHlUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VydmljZXMvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zZXR0aW5ncy9mcmFtZXdvcmtCbGFja2JveFNldHRpbmdzVGFiLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NldHRpbmdzL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc2V0dGluZ3Mvc2V0dGluZ3NTY3JlZW4uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc25pcHBldHMvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUvZm9udFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL2ltYWdlVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUvanNvblZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL21lc3NhZ2VzUG9wb3Zlci5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUvcmVzb3VyY2VTb3VyY2VGcmFtZS5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUveG1sVHJlZS5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VfZnJhbWUveG1sVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL0FkZFNvdXJjZU1hcFVSTERpYWxvZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvYnJlYWtwb2ludEVkaXREaWFsb2cuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9CcmVha3BvaW50RWRpdERpYWxvZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvY2FsbFN0YWNrU2lkZWJhclBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvQ1NTUGx1Z2luLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9EZWJ1Z2dlclBsdWdpbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvQ292ZXJhZ2VQbHVnaW4uanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL2RpYWxvZy5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL2RlYnVnZ2VyUGF1c2VkTWVzc2FnZS5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL0RlYnVnZ2VyUGF1c2VkTWVzc2FnZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvRWRpdGluZ0xvY2F0aW9uSGlzdG9yeU1hbmFnZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL0ZpbGVQYXRoU2NvcmVGdW5jdGlvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvRmlsdGVyZWRVSVNvdXJjZUNvZGVMaXN0UHJvdmlkZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL0dvVG9MaW5lUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9HdXR0ZXJEaWZmUGx1Z2luLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9JbnBsYWNlRm9ybWF0dGVyRWRpdG9yQWN0aW9uLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9qYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL0phdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9KYXZhU2NyaXB0Q29tcGlsZXJQbHVnaW4uanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9uYXZpZ2F0b3JUcmVlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvbmF2aWdhdG9yVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL05hdmlnYXRvclZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL09wZW5GaWxlUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9PdXRsaW5lUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9zY29wZUNoYWluU2lkZWJhclBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9TY29wZUNoYWluU2lkZWJhclBhbmUuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NjcmlwdEZvcm1hdHRlckVkaXRvckFjdGlvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvU2NyaXB0T3JpZ2luUGx1Z2luLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9TZWFyY2hTb3VyY2VzVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvU2ltcGxlSGlzdG9yeU1hbmFnZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NuaXBwZXRzUGx1Z2luLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9Tb3VyY2VGb3JtYXR0ZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NvdXJjZU1hcE5hbWVzUmVzb2x2ZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NvdXJjZXNOYXZpZ2F0b3IuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL3NvdXJjZXNQYW5lbC5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NvdXJjZXNQYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvU291cmNlc1NlYXJjaFNjb3BlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9zb3VyY2VzVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1NvdXJjZXNWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9VSVNvdXJjZUNvZGVGcmFtZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXMvVGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy90aHJlYWRzU2lkZWJhclBhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlcy9UaHJlYWRzU2lkZWJhclBhbmUuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL3dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvQXV0b2NvbXBsZXRlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvRGVidWdnZXJUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlc190ZXN0X3J1bm5lci9FZGl0b3JUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlc190ZXN0X3J1bm5lci9MaXZlRWRpdFRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzX3Rlc3RfcnVubmVyL1NlYXJjaFRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzX3Rlc3RfcnVubmVyL1NvdXJjZXNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlc190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvdGV4dF9lZGl0b3IvYXV0b2NvbXBsZXRlVG9vbHRpcC5jc3MiLAotICAgICAgImZyb250X2VuZC90ZXh0X2VkaXRvci9jbWRldnRvb2xzLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3RleHRfZWRpdG9yL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvdGV4dF91dGlscy9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lX21vZGVsL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvQ291bnRlcnNHcmFwaC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL0V2ZW50c1RpbWVsaW5lVHJlZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9FeHRlbnNpb25UcmFjaW5nU2Vzc2lvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL2hpc3RvcnlUb29sYmFyQnV0dG9uLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL2ludmFsaWRhdGlvbnNUcmVlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvUGVyZm9ybWFuY2VNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL1RpbWVsaW5lQ29udHJvbGxlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL1RpbWVsaW5lRGV0YWlsc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUV2ZW50T3ZlcnZpZXcuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUZpbHRlcnMuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUZsYW1lQ2hhcnREYXRhUHJvdmlkZXIuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUZsYW1lQ2hhcnROZXR3b3JrRGF0YVByb3ZpZGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvdGltZWxpbmVGbGFtZWNoYXJ0UG9wb3Zlci5jc3MiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUZsYW1lQ2hhcnRWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvdGltZWxpbmVIaXN0b3J5TWFuYWdlci5jc3MiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZUhpc3RvcnlNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvVGltZWxpbmVMYXllcnNWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvVGltZWxpbmVMb2FkZXIuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS90aW1lbGluZVBhaW50UHJvZmlsZXIuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvVGltZWxpbmVQYWludFByb2ZpbGVyVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL3RpbWVsaW5lUGFuZWwuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmUvVGltZWxpbmVQYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL3RpbWVsaW5lU3RhdHVzRGlhbG9nLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL1RpbWVsaW5lVHJlZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9UaW1lbGluZVVJVXRpbHMuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZS9VSURldnRvb2xzQ29udHJvbGxlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lL1VJRGV2dG9vbHNVdGlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Rvb2xib3hfYm9vdHN0cmFwL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvdG9vbGJveF9ib290c3RyYXAvVG9vbGJveC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Rvb2xib3guanMiLAotICAgICAgImZyb250X2VuZC90b29sYm94Lmpzb24iLAotICAgICAgImZyb250X2VuZC91aS9jaGVja2JveFRleHRMYWJlbC5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9jbG9zZUJ1dHRvbi5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9jb25maXJtRGlhbG9nLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2RpYWxvZy5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9kcm9wVGFyZ2V0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2VtcHR5V2lkZ2V0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2ZpbHRlci5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9nbGFzc1BhbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvaW5mb2Jhci5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9pbmxpbmVCdXR0b24uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvaW5zcGVjdG9yQ29tbW9uLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2luc3BlY3RvclN0eWxlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2luc3BlY3RvclN5bnRheEhpZ2hsaWdodC5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9pbnNwZWN0b3JTeW50YXhIaWdobGlnaHREYXJrLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2luc3BlY3RvclZpZXdUYWJiZWRQYW5lLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL2xpc3RXaWRnZXQuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC91aS9wb3BvdmVyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3Byb2dyZXNzSW5kaWNhdG9yLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3JhZGlvQnV0dG9uLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3JlcG9ydFZpZXcuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvcmVtb3RlRGVidWdnaW5nVGVybWluYXRlZFNjcmVlbi5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9yb290Vmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9zZWFyY2hhYmxlVmlldy5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9zZWdtZW50ZWRCdXR0b24uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvc2xpZGVyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3NtYWxsQnViYmxlLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3NvZnRDb250ZXh0TWVudS5jc3MiLAotICAgICAgImZyb250X2VuZC91aS9zb2Z0RHJvcERvd24uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvc29mdERyb3BEb3duQnV0dG9uLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3NwbGl0V2lkZ2V0LmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3N1Z2dlc3RCb3guY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvdGFiYmVkUGFuZS5jc3MiLAotICAgICAgImZyb250X2VuZC91aS90YXJnZXRDcmFzaGVkU2NyZWVuLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3RleHRCdXR0b24uY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvdGV4dFByb21wdC5jc3MiLAotICAgICAgImZyb250X2VuZC91aS90b29sYmFyLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3Rvb2x0aXAuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvdHJlZW91dGxpbmUuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvdmlld0NvbnRhaW5lcnMuY3NzIiwKLSAgICAgICJmcm9udF9lbmQvd2ViX2F1ZGlvL2F1ZGlvQ29udGV4dFNlbGVjdG9yLmNzcyIsCi0gICAgICAiZnJvbnRfZW5kL3dlYl9hdWRpby9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3dlYl9hdWRpby93ZWJBdWRpby5jc3MiLAotICAgICAgImZyb250X2VuZC93b3JrZXJfbWFpbi9Xb3JrZXJNYWluLmpzIiwKLSAgICAgICJmcm9udF9lbmQvd29ya2VyX21haW4vbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC93b3JrZXJfc2VydmljZS9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3dvcmtlcl9zZXJ2aWNlL1NlcnZpY2VEaXNwYXRjaGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvd29ya3NwYWNlL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvd29ya3NwYWNlX2RpZmYvbW9kdWxlLmpzb24iLAotICAgIF0sCi0KLSAgICAnbGlnaHRob3VzZV9sb2NhbGVfZmlsZXMnOiBbCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2FyLVhCLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9hci5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvYmcuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2NhLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9jcy5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvZGEuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2RlLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9lbC5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvZW4tR0IuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2VuLVVTLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9lbi1YQS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvZW4tWEwuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2VzLTQxOS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvZXMuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2ZpLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9maWwuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2ZyLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9oZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvaGkuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2hyLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9odS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvaWQuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2l0Lmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9qYS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMva28uanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL2x0Lmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9sdi5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvbmwuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL25vLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9wbC5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvcHQtUFQuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3B0Lmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9yby5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvcnUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3NrLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy9zbC5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvc3ItTGF0bi5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvc3IuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3N2Lmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy90YS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvdGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3RoLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy90ci5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvdWsuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3ZpLmpzb24iLAotICAgICAgImZyb250X2VuZC9hdWRpdHNfd29ya2VyL2xpZ2h0aG91c2UvbG9jYWxlcy96aC1ISy5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMvemgtVFcuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c193b3JrZXIvbGlnaHRob3VzZS9sb2NhbGVzL3poLmpzb24iLAotICAgIF0sCi0KLSAgICAjIFRPRE86IGFsbF9kZXZ0b29sc19maWxlcyArPSBsaWdodGhvdXNlX2xvY2FsZV9maWxlcwotICAgICMgKE5vdCBpbXBvcnRhbnQgc2luY2UgQ29iYWx0IGRvZXNuJ3QgbmVlZCBsaWdodGhvdXNlKQotCi0gICAgJ2FsbF9kZXZ0b29sc19tb2R1bGVzJzogWwotICAgICAgImZyb250X2VuZC9jb2JhbHQvY29iYWx0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9uZXR3b3JrLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9TaWduZWRFeGNoYW5nZUluZm9WaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9SZXNvdXJjZVdlYlNvY2tldEZyYW1lVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvUmVxdWVzdFRpbWluZ1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL1JlcXVlc3RSZXNwb25zZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL1JlcXVlc3RQcmV2aWV3Vmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvUmVxdWVzdEluaXRpYXRvclZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL1JlcXVlc3RIZWFkZXJzVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvUmVxdWVzdEhUTUxWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9SZXF1ZXN0Q29va2llc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtXYXRlcmZhbGxDb2x1bW4uanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtUaW1lQ2FsY3VsYXRvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvTmV0d29ya1NlYXJjaFNjb3BlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9OZXR3b3JrUGFuZWwuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtPdmVydmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmsvTmV0d29ya01hbmFnZUN1c3RvbUhlYWRlcnNWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9OZXR3b3JrTG9nVmlld0NvbHVtbnMuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtMb2dWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9OZXR3b3JrSXRlbVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtGcmFtZUdyb3VwZXIuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtEYXRhR3JpZE5vZGUuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL05ldHdvcmtDb25maWdWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9IQVJXcml0ZXIuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL0V2ZW50U291cmNlTWVzc2FnZXNWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29yay9CbG9ja2VkVVJMc1BhbmUuanMiLAotICAgICAgImZyb250X2VuZC9uZXR3b3JrL0JpbmFyeVJlc291cmNlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Rlc3RfcnVubmVyL3Rlc3RfcnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGVzdF9ydW5uZXIvVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9lbXVsYXRpb24uanMiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vU2Vuc29yc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vTWVkaWFRdWVyeUluc3BlY3Rvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9JbnNwZWN0ZWRQYWdlUGxhY2Vob2xkZXIuanMiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vR2VvbG9jYXRpb25zU2V0dGluZ3NUYWIuanMiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vRW11bGF0ZWREZXZpY2VzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0aW9uL0RldmljZXNTZXR0aW5nc1RhYi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9EZXZpY2VNb2RlV3JhcHBlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9EZXZpY2VNb2RlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9EZXZpY2VNb2RlVG9vbGJhci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGlvbi9EZXZpY2VNb2RlTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9lbXVsYXRpb24vQWR2YW5jZWRBcHAuanMiLAotICAgICAgImZyb250X2VuZC9pbnNwZWN0b3JfbWFpbi9pbnNwZWN0b3JfbWFpbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2luc3BlY3Rvcl9tYWluL1JlbmRlcmluZ09wdGlvbnMuanMiLAotICAgICAgImZyb250X2VuZC9pbnNwZWN0b3JfbWFpbi9JbnNwZWN0b3JNYWluLmpzIiwKLSAgICAgICJmcm9udF9lbmQvanNfbWFpbi9qc19tYWluLmpzIiwKLSAgICAgICJmcm9udF9lbmQvanNfbWFpbi9Kc01haW4uanMiLAotICAgICAgImZyb250X2VuZC9zZWFyY2gvc2VhcmNoLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VhcmNoL1NlYXJjaFZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9zZWFyY2gvU2VhcmNoUmVzdWx0c1BhbmUuanMiLAotICAgICAgImZyb250X2VuZC9zZWFyY2gvU2VhcmNoQ29uZmlnLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2NyZWVuY2FzdC9zY3JlZW5jYXN0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2NyZWVuY2FzdC9TY3JlZW5jYXN0Vmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NjcmVlbmNhc3QvU2NyZWVuY2FzdEFwcC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NjcmVlbmNhc3QvSW5wdXRNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZvcm1hbmNlX21vbml0b3IvcGVyZm9ybWFuY2VfbW9uaXRvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZvcm1hbmNlX21vbml0b3IvUGVyZm9ybWFuY2VNb25pdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWFpbi9tYWluLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWFpbi9TaW1wbGVBcHAuanMiLAotICAgICAgImZyb250X2VuZC9tYWluL01haW5JbXBsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbWFpbi9FeGVjdXRpb25Db250ZXh0U2VsZWN0b3IuanMiLAotICAgICAgImZyb250X2VuZC9zbmlwcGV0cy9zbmlwcGV0cy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NuaXBwZXRzL1NuaXBwZXRzUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc25pcHBldHMvU2NyaXB0U25pcHBldEZpbGVTeXN0ZW0uanMiLAotICAgICAgImZyb250X2VuZC9zZXR0aW5ncy9zZXR0aW5ncy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NldHRpbmdzL1NldHRpbmdzU2NyZWVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2V0dGluZ3MvRnJhbWV3b3JrQmxhY2tib3hTZXR0aW5nc1RhYi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5L3NlY3VyaXR5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VjdXJpdHkvU2VjdXJpdHlQYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlY3VyaXR5L1NlY3VyaXR5TW9kZWwuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL3dlYl9hdWRpby93ZWJfYXVkaW8uanMiLAotICAgICAgIyAiZnJvbnRfZW5kL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL1R5cGVzLmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vZ3JhcGhfdmlzdWFsaXplci9HcmFwaFN0eWxlLmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vZ3JhcGhfdmlzdWFsaXplci9HcmFwaE1hbmFnZXIuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL05vZGVSZW5kZXJlclV0aWxpdHkuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL05vZGVWaWV3LmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vZ3JhcGhfdmlzdWFsaXplci9FZGdlVmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvd2ViX2F1ZGlvL2dyYXBoX3Zpc3VhbGl6ZXIvR3JhcGhWaWV3LmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vV2ViQXVkaW9WaWV3LmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vV2ViQXVkaW9Nb2RlbC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvd2ViX2F1ZGlvL0F1ZGlvQ29udGV4dFNlbGVjdG9yLmpzIiwKLSAgICAgICMgImZyb250X2VuZC93ZWJfYXVkaW8vQXVkaW9Db250ZXh0Q29udGVudEJ1aWxkZXIuanMiLAotICAgICAgImZyb250X2VuZC9qYXZhc2NyaXB0X21ldGFkYXRhL2phdmFzY3JpcHRfbWV0YWRhdGEuanMiLAotICAgICAgImZyb250X2VuZC9qYXZhc2NyaXB0X21ldGFkYXRhL05hdGl2ZUZ1bmN0aW9ucy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2phdmFzY3JpcHRfbWV0YWRhdGEvSmF2YVNjcmlwdE1ldGFkYXRhLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGFyX2ltcG9ydGVyL2hhcl9pbXBvcnRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hhcl9pbXBvcnRlci9IQVJJbXBvcnRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hhcl9pbXBvcnRlci9IQVJGb3JtYXQuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX2RlYnVnZ2VyL2Jyb3dzZXJfZGVidWdnZXIuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX2RlYnVnZ2VyL1hIUkJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX2RlYnVnZ2VyL09iamVjdEV2ZW50TGlzdGVuZXJzU2lkZWJhclBhbmUuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX2RlYnVnZ2VyL0V2ZW50TGlzdGVuZXJCcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYnJvd3Nlcl9kZWJ1Z2dlci9ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL2xheWVyX3ZpZXdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2xheWVyX3ZpZXdlci9UcmFuc2Zvcm1Db250cm9sbGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL1BhaW50UHJvZmlsZXJWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL0xheWVyczNEVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2xheWVyX3ZpZXdlci9MYXllclZpZXdIb3N0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJfdmlld2VyL0xheWVyVHJlZU91dGxpbmUuanMiLAotICAgICAgImZyb250X2VuZC9sYXllcl92aWV3ZXIvTGF5ZXJEZXRhaWxzVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX3dlYl9tb2Rlcy9jbV93ZWJfbW9kZXMuanMiLAotICAgICAgImZyb250X2VuZC9jbV93ZWJfbW9kZXMvY21fd2ViX21vZGVzX2NtLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY21fd2ViX21vZGVzL2NtX3dlYl9tb2Rlc19oZWFkbGVzcy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX3dlYl9tb2Rlcy9jc3MuanMiLAotICAgICAgImZyb250X2VuZC9jbV93ZWJfbW9kZXMvamF2YXNjcmlwdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX3dlYl9tb2Rlcy94bWwuanMiLAotICAgICAgImZyb250X2VuZC9jbV93ZWJfbW9kZXMvaHRtbG1peGVkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY21fd2ViX21vZGVzL2h0bWxlbWJlZGRlZC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RleHRfZWRpdG9yL3RleHRfZWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGV4dF9lZGl0b3IvVGV4dEVkaXRvckF1dG9jb21wbGV0ZUNvbnRyb2xsZXIuanMiLAotICAgICAgImZyb250X2VuZC90ZXh0X2VkaXRvci9Db2RlTWlycm9yVXRpbHMuanMiLAotICAgICAgImZyb250X2VuZC90ZXh0X2VkaXRvci9Db2RlTWlycm9yVGV4dEVkaXRvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3F1aWNrX29wZW4vcXVpY2tfb3Blbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3F1aWNrX29wZW4vUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcXVpY2tfb3Blbi9IZWxwUXVpY2tPcGVuLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcXVpY2tfb3Blbi9GaWx0ZXJlZExpc3RXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC9xdWlja19vcGVuL0NvbW1hbmRNZW51LmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvZWxlbWVudHMuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9lbGVtZW50cy1sZWdhY3kuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9TdHlsZXNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL1N0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL1N0eWxlUHJvcGVydHlIaWdobGlnaHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL1Byb3BlcnRpZXNXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9QbGF0Zm9ybUZvbnRzV2lkZ2V0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvTm9kZVN0YWNrVHJhY2VXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9NZXRyaWNzU2lkZWJhclBhbmUuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9NYXJrZXJEZWNvcmF0b3IuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9JbnNwZWN0RWxlbWVudE1vZGVDb250cm9sbGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvRXZlbnRMaXN0ZW5lcnNXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvRWxlbWVudHNUcmVlRWxlbWVudC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL0VsZW1lbnRzVHJlZUVsZW1lbnRIaWdobGlnaHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL0VsZW1lbnRTdGF0ZVBhbmVXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9FbGVtZW50c1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvRWxlbWVudHNQYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL0VsZW1lbnRzQnJlYWRjcnVtYnMuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9ET01QYXRoLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvRE9NTGlua2lmaWVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHMvQ29tcHV0ZWRTdHlsZVdpZGdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL0NvbXB1dGVkU3R5bGVNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzL0NvbG9yU3dhdGNoUG9wb3Zlckljb24uanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50cy9DbGFzc2VzUGFuZVdpZGdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lX21vZGVsL3RpbWVsaW5lX21vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmVfbW9kZWwvVHJhY2luZ0xheWVyVHJlZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lX21vZGVsL1RpbWVsaW5lUHJvZmlsZVRyZWUuanMiLAotICAgICAgImZyb250X2VuZC90aW1lbGluZV9tb2RlbC9UaW1lbGluZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVNb2RlbEZpbHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RpbWVsaW5lX21vZGVsL1RpbWVsaW5lSlNQcm9maWxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVJUk1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVGcmFtZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVscC9oZWxwLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVscC9SZWxlYXNlTm90ZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9oZWxwL1JlbGVhc2VOb3RlVGV4dC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hlbHAvSGVscEltcGwuanMiLAotICAgICAgImZyb250X2VuZC93b3Jrc3BhY2VfZGlmZi93b3Jrc3BhY2VfZGlmZi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3dvcmtzcGFjZV9kaWZmL1dvcmtzcGFjZURpZmYuanMiLAotICAgICAgImZyb250X2VuZC9tb2JpbGVfdGhyb3R0bGluZy9tb2JpbGVfdGhyb3R0bGluZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL21vYmlsZV90aHJvdHRsaW5nL1Rocm90dGxpbmdTZXR0aW5nc1RhYi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL21vYmlsZV90aHJvdHRsaW5nL1Rocm90dGxpbmdQcmVzZXRzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbW9iaWxlX3Rocm90dGxpbmcvVGhyb3R0bGluZ01hbmFnZXIuanMiLAotICAgICAgImZyb250X2VuZC9tb2JpbGVfdGhyb3R0bGluZy9OZXR3b3JrVGhyb3R0bGluZ1NlbGVjdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbW9iaWxlX3Rocm90dGxpbmcvTmV0d29ya1BhbmVsSW5kaWNhdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbW9iaWxlX3Rocm90dGxpbmcvTW9iaWxlVGhyb3R0bGluZ1NlbGVjdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZXZlbnRfbGlzdGVuZXJzL2V2ZW50X2xpc3RlbmVycy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V2ZW50X2xpc3RlbmVycy9FdmVudExpc3RlbmVyc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9ldmVudF9saXN0ZW5lcnMvRXZlbnRMaXN0ZW5lcnNVdGlscy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvbGF5ZXJzL2xheWVycy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvbGF5ZXJzL0xheWVyc1BhbmVsLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9sYXllcnMvTGF5ZXJUcmVlTW9kZWwuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2xheWVycy9MYXllclBhaW50UHJvZmlsZXJWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvb2JqZWN0X3VpL29iamVjdF91aS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL29iamVjdF91aS9SZW1vdGVPYmplY3RQcmV2aWV3Rm9ybWF0dGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvb2JqZWN0X3VpL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzIiwKLSAgICAgICJmcm9udF9lbmQvb2JqZWN0X3VpL09iamVjdFBvcG92ZXJIZWxwZXIuanMiLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvSmF2YVNjcmlwdFJFUEwuanMiLAotICAgICAgImZyb250X2VuZC9vYmplY3RfdWkvSmF2YVNjcmlwdEF1dG9jb21wbGV0ZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL29iamVjdF91aS9DdXN0b21QcmV2aWV3Q29tcG9uZW50LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29va2llX3RhYmxlL2Nvb2tpZV90YWJsZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Nvb2tpZV90YWJsZS9Db29raWVzVGFibGUuanMiLAotICAgICAgImZyb250X2VuZC9jbV9tb2Rlcy9jbV9tb2Rlcy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL0RlZmF1bHRDb2RlTWlycm9yTWltZU1vZGUuanMiLAotICAgICAgImZyb250X2VuZC9jbV9tb2Rlcy9jbGlrZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL2NvZmZlZXNjcmlwdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL3BocC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL3B5dGhvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL3NoZWxsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY21fbW9kZXMvbGl2ZXNjcmlwdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL21hcmtkb3duLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY21fbW9kZXMvY2xvanVyZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtX21vZGVzL2pzeC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvY292ZXJhZ2UvY292ZXJhZ2UuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2NvdmVyYWdlL0NvdmVyYWdlVmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvY292ZXJhZ2UvQ292ZXJhZ2VNb2RlbC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvY292ZXJhZ2UvQ292ZXJhZ2VMaXN0Vmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvY292ZXJhZ2UvQ292ZXJhZ2VEZWNvcmF0aW9uTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Nzc19vdmVydmlldy9jc3Nfb3ZlcnZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdVbnVzZWREZWNsYXJhdGlvbnMuanMiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdTdGFydFZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdTaWRlYmFyUGFuZWwuanMiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdQcm9jZXNzaW5nVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Nzc19vdmVydmlldy9DU1NPdmVydmlld1BhbmVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3TW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdDb250cm9sbGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3Q29tcGxldGVkVmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL2F1ZGl0cy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL2xpZ2h0aG91c2UvcmVwb3J0LWdlbmVyYXRvci5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL2xpZ2h0aG91c2UvcmVwb3J0LmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hdWRpdHMvUmFkaW9TZXR0aW5nLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hdWRpdHMvQXVkaXRzU3RhdHVzVmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL0F1ZGl0c1N0YXJ0Vmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL0F1ZGl0c1JlcG9ydFNlbGVjdG9yLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hdWRpdHMvQXVkaXRzUmVwb3J0UmVuZGVyZXIuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2F1ZGl0cy9BdWRpdHNQcm90b2NvbFNlcnZpY2UuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2F1ZGl0cy9BdWRpdHNQYW5lbC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYXVkaXRzL0F1ZGl0c0NvbnRyb2xsZXIuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlL2NvbnNvbGUuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlL0NvbnNvbGVDb250ZXh0U2VsZWN0b3IuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlL0NvbnNvbGVGaWx0ZXIuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlL0NvbnNvbGVTaWRlYmFyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9Db25zb2xlUGFuZWwuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlL0NvbnNvbGVQaW5QYW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9Db25zb2xlUHJvbXB0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9Db25zb2xlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGUvQ29uc29sZVZpZXdNZXNzYWdlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZS9Db25zb2xlVmlld3BvcnQuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2FuaW1hdGlvbi9hbmltYXRpb24uanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2FuaW1hdGlvbi9BbmltYXRpb25VSS5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hbmltYXRpb24vQW5pbWF0aW9uU2NyZWVuc2hvdFBvcG92ZXIuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2FuaW1hdGlvbi9BbmltYXRpb25Nb2RlbC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYW5pbWF0aW9uL0FuaW1hdGlvbkdyb3VwUHJldmlld1VJLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9jaGFuZ2VzL2NoYW5nZXMuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2NoYW5nZXMvQ2hhbmdlc1ZpZXcuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2NoYW5nZXMvQ2hhbmdlc1NpZGViYXIuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2NoYW5nZXMvQ2hhbmdlc0hpZ2hsaWdodGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL3NvdXJjZV9mcmFtZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZV9mcmFtZS9YTUxWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL1NvdXJjZXNUZXh0RWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL1NvdXJjZUZyYW1lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL3NvdXJjZV9mcmFtZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZV9mcmFtZS9Tb3VyY2VDb2RlRGlmZi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZV9mcmFtZS9SZXNvdXJjZVNvdXJjZUZyYW1lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL1ByZXZpZXdGYWN0b3J5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL0pTT05WaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlX2ZyYW1lL0ltYWdlVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZV9mcmFtZS9Gb250Vmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZV9mcmFtZS9CaW5hcnlSZXNvdXJjZVZpZXdGYWN0b3J5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9pbmxpbmVfZWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9Td2F0Y2hQb3BvdmVySGVscGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9DU1NTaGFkb3dNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2lubGluZV9lZGl0b3IvQ1NTU2hhZG93RWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW5saW5lX2VkaXRvci9Db2xvclN3YXRjaC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2lubGluZV9lZGl0b3IvQmV6aWVyVUkuanMiLAotICAgICAgImZyb250X2VuZC9pbmxpbmVfZWRpdG9yL0JlemllckVkaXRvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RpZmYvZGlmZi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RpZmYvZGlmZl9tYXRjaF9wYXRjaC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RpZmYvRGlmZldyYXBwZXIuanMiLAotICAgICAgImZyb250X2VuZC9mb3JtYXR0ZXIvZm9ybWF0dGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyL1NjcmlwdEZvcm1hdHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlci9Gb3JtYXR0ZXJXb3JrZXJQb29sLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29sb3JfcGlja2VyL2NvbG9yX3BpY2tlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbG9yX3BpY2tlci9TcGVjdHJ1bS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbG9yX3BpY2tlci9Db250cmFzdE92ZXJsYXkuanMiLAotICAgICAgImZyb250X2VuZC9jb2xvcl9waWNrZXIvQ29udHJhc3RJbmZvLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29sb3JfcGlja2VyL0NvbnRyYXN0RGV0YWlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtL2NtLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vYWN0aXZlLWxpbmUuanMiLAotICAgICAgImZyb250X2VuZC9jbS9icmFjZS1mb2xkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vY2xvc2VicmFja2V0cy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NtL2NvZGVtaXJyb3IuanMiLAotICAgICAgImZyb250X2VuZC9jbS9jb21tZW50LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vZm9sZGNvZGUuanMiLAotICAgICAgImZyb250X2VuZC9jbS9mb2xkZ3V0dGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vbWFyay1zZWxlY3Rpb24uanMiLAotICAgICAgImZyb250X2VuZC9jbS9tYXRjaGJyYWNrZXRzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vbXVsdGlwbGV4LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY20vb3ZlcmxheS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIudW5idW5kbGVkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9zbmFwc2hvdF93b3JrZXIudW5idW5kbGVkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9zbmFwc2hvdF9tb2RlbC9oZWFwX3NuYXBzaG90X21vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9zbmFwc2hvdF9tb2RlbC9IZWFwU25hcHNob3RNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hlYXBfc25hcHNob3Rfd29ya2VyL2hlYXBfc25hcHNob3Rfd29ya2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaGVhcF9zbmFwc2hvdF93b3JrZXIvQWxsb2NhdGlvblByb2ZpbGUuanMiLAotICAgICAgImZyb250X2VuZC9oZWFwX3NuYXBzaG90X3dvcmtlci9IZWFwU25hcHNob3QuanMiLAotICAgICAgImZyb250X2VuZC9oZWFwX3NuYXBzaG90X3dvcmtlci9IZWFwU25hcHNob3RMb2FkZXIuanMiLAotICAgICAgImZyb250X2VuZC9oZWFwX3NuYXBzaG90X3dvcmtlci9IZWFwU25hcHNob3RXb3JrZXIuanMiLAotICAgICAgImZyb250X2VuZC9oZWFwX3NuYXBzaG90X3dvcmtlci9IZWFwU25hcHNob3RXb3JrZXJEaXNwYXRjaGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGV4dF91dGlscy90ZXh0X3V0aWxzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdGV4dF91dGlscy9UZXh0VXRpbHMuanMiLAotICAgICAgImZyb250X2VuZC90ZXh0X3V0aWxzL1RleHRSYW5nZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3RleHRfdXRpbHMvVGV4dC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvZm9ybWF0dGVyX3dvcmtlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvUmVsYXhlZEpTT05QYXJzZXIuanMiLAotICAgICAgImZyb250X2VuZC9mb3JtYXR0ZXJfd29ya2VyL0phdmFTY3JpcHRPdXRsaW5lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9KYXZhU2NyaXB0Rm9ybWF0dGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9JZGVudGl0eUZvcm1hdHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvSFRNTEZvcm1hdHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvRm9ybWF0dGVyV29ya2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9Gb3JtYXR0ZWRDb250ZW50QnVpbGRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2Zvcm1hdHRlcl93b3JrZXIvRVNUcmVlV2Fsa2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9DU1NSdWxlUGFyc2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZm9ybWF0dGVyX3dvcmtlci9DU1NGb3JtYXR0ZXIuanMiLAotICAgICAgImZyb250X2VuZC9mb3JtYXR0ZXJfd29ya2VyL0Fjb3JuVG9rZW5pemVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY21faGVhZGxlc3MvY21faGVhZGxlc3MuanMiLAotICAgICAgImZyb250X2VuZC9jbV9oZWFkbGVzcy9oZWFkbGVzc2NvZGVtaXJyb3IuanMiLAotICAgICAgImZyb250X2VuZC9kYXRhX2dyaWQvZGF0YV9ncmlkLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZGF0YV9ncmlkL1ZpZXdwb3J0RGF0YUdyaWQuanMiLAotICAgICAgImZyb250X2VuZC9kYXRhX2dyaWQvU29ydGFibGVEYXRhR3JpZC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RhdGFfZ3JpZC9TaG93TW9yZURhdGFHcmlkTm9kZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RhdGFfZ3JpZC9EYXRhR3JpZC5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eS9hY2Nlc3NpYmlsaXR5LmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTdHJpbmdzLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTaWRlYmFyVmlldy5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZVZpZXcuanMiLAotICAgICAgIyAiZnJvbnRfZW5kL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vZGVsLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hY2Nlc3NpYmlsaXR5L0FYQnJlYWRjcnVtYnNQYW5lLmpzIiwKLSAgICAgICMgImZyb250X2VuZC9hY2Nlc3NpYmlsaXR5L0FSSUFNZXRhZGF0YS5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eS9BUklBQXR0cmlidXRlc1ZpZXcuanMiLAotICAgICAgImZyb250X2VuZC9wcm90b2NvbF9tb25pdG9yL3Byb3RvY29sX21vbml0b3IuanMiLAotICAgICAgImZyb250X2VuZC9wcm90b2NvbF9tb25pdG9yL1Byb3RvY29sTW9uaXRvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGVfY291bnRlcnMvY29uc29sZV9jb3VudGVycy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbnNvbGVfY291bnRlcnMvV2FybmluZ0Vycm9yQ291bnRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnMvRXh0ZW5zaW9uQVBJLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZXh0ZW5zaW9ucy9FeHRlbnNpb25QYW5lbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnMvRXh0ZW5zaW9uU2VydmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZXh0ZW5zaW9ucy9FeHRlbnNpb25UcmFjZVByb3ZpZGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZXh0ZW5zaW9ucy9FeHRlbnNpb25WaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvYnJvd3Nlcl9zZGsvYnJvd3Nlcl9zZGsuanMiLAotICAgICAgImZyb250X2VuZC9icm93c2VyX3Nkay9Mb2dNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2UuanMiLAotICAgICAgImZyb250X2VuZC9wZXJzaXN0ZW5jZS9Xb3Jrc3BhY2VTZXR0aW5nc1RhYi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL1BsYXRmb3JtRmlsZVN5c3RlbS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL1BlcnNpc3RlbmNlVXRpbHMuanMiLAotICAgICAgImZyb250X2VuZC9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW5jZUltcGwuanMiLAotICAgICAgImZyb250X2VuZC9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW5jZUFjdGlvbnMuanMiLAotICAgICAgImZyb250X2VuZC9wZXJzaXN0ZW5jZS9OZXR3b3JrUGVyc2lzdGVuY2VNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyc2lzdGVuY2UvSXNvbGF0ZWRGaWxlU3lzdGVtTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL0lzb2xhdGVkRmlsZVN5c3RlbS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3BlcnNpc3RlbmNlL0ZpbGVTeXN0ZW1Xb3Jrc3BhY2VCaW5kaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyc2lzdGVuY2UvRWRpdEZpbGVTeXN0ZW1WaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGVyc2lzdGVuY2UvQXV0b21hcHBpbmcuanMiLAotICAgICAgImZyb250X2VuZC9jb21wb25lbnRzL2NvbXBvbmVudHMuanMiLAotICAgICAgImZyb250X2VuZC9jb21wb25lbnRzL1RhcmdldERldGFjaGVkRGlhbG9nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tcG9uZW50cy9SZWxvYWQuanMiLAotICAgICAgImZyb250X2VuZC9jb21wb25lbnRzL0xpbmtpZmllci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbXBvbmVudHMvSlNQcmVzZW50YXRpb25VdGlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbXBvbmVudHMvSW1hZ2VQcmV2aWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tcG9uZW50cy9Eb2NrQ29udHJvbGxlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL2JpbmRpbmdzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvVGVtcEZpbGUuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5ncy9TdHlsZXNTb3VyY2VNYXBwaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvU0FTU1NvdXJjZU1hcHBpbmcuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5ncy9SZXNvdXJjZVV0aWxzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvUmVzb3VyY2VNYXBwaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2VIZWxwZXIuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5ncy9OZXR3b3JrUHJvamVjdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0xpdmVMb2NhdGlvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0ZpbGVVdGlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0RlZmF1bHRTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvRGVidWdnZXJXb3Jrc3BhY2VCaW5kaW5nLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvQ1NTV29ya3NwYWNlQmluZGluZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0NvbnRlbnRQcm92aWRlckJhc2VkUHJvamVjdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0NvbXBpbGVyU2NyaXB0TWFwcGluZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYmluZGluZ3MvQmxhY2tib3hNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvd29ya3NwYWNlL3dvcmtzcGFjZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3dvcmtzcGFjZS9Xb3Jrc3BhY2VJbXBsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvd29ya3NwYWNlL1VJU291cmNlQ29kZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3dvcmtzcGFjZS9GaWxlTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NlcnZpY2VzL3NlcnZpY2VzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VydmljZXMvU2VydmljZU1hbmFnZXIuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvc2RrLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1RyYWNpbmdNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9UcmFjaW5nTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9UYXJnZXRNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1RhcmdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9Tb3VyY2VNYXBNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1NvdXJjZU1hcC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9TZXJ2aWNlV29ya2VyTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9TZXJ2aWNlV29ya2VyQ2FjaGVNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9TZXJ2ZXJUaW1pbmcuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvU2VjdXJpdHlPcmlnaW5NYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1NES01vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1NjcmlwdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9TY3JlZW5DYXB0dXJlTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvUnVudGltZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1Jlc291cmNlVHJlZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1Jlc291cmNlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1JlbW90ZU9iamVjdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9Qcm9maWxlVHJlZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0lzc3Vlc01vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1BlcmZvcm1hbmNlTWV0cmljc01vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL1BhaW50UHJvZmlsZXIuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvT3ZlcmxheU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL05ldHdvcmtSZXF1ZXN0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL05ldHdvcmtNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL05ldHdvcmtMb2cuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvTG9nTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvTGF5ZXJUcmVlQmFzZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9Jc29sYXRlTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9IZWFwUHJvZmlsZXJNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9IQVJMb2cuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvRmlsbVN0cmlwTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvRW11bGF0aW9uTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvRE9NTW9kZWwuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvRE9NRGVidWdnZXJNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9EZWJ1Z2dlck1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU1N0eWxlU2hlZXRIZWFkZXIuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9DU1NSdWxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU1Byb3BlcnR5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU01vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU01ldGFkYXRhLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU01lZGlhLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NTU01hdGNoZWRTdHlsZXMuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvQ1BVUHJvZmlsZXJNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9DUFVQcm9maWxlRGF0YU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0Nvb2tpZVBhcnNlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9Db29raWVNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Nkay9Db21waWxlclNvdXJjZU1hcHBpbmdDb250ZW50UHJvdmlkZXIuanMiLAotICAgICAgImZyb250X2VuZC9zZGsvQ29uc29sZU1vZGVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0Nvbm5lY3Rpb25zLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2RrL0NoaWxkVGFyZ2V0TWFuYWdlci5qcyIsCi0gICAgICAjICJmcm9udF9lbmQvc2RrL3dhc21fc291cmNlX21hcC9wa2cvd2FzbV9zb3VyY2VfbWFwLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvdG9jb2wvcHJvdG9jb2wuanMiLAotICAgICAgImZyb250X2VuZC9wcm90b2NvbC9Ob2RlVVJMLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hvc3QvaG9zdC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hvc3QvVXNlck1ldHJpY3MuanMiLAotICAgICAgImZyb250X2VuZC9ob3N0L1Jlc291cmNlTG9hZGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaG9zdC9QbGF0Zm9ybS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2hvc3QvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvaG9zdC9JbnNwZWN0b3JGcm9udGVuZEhvc3RBUEkuanMiLAotICAgICAgImZyb250X2VuZC9kb21fZXh0ZW5zaW9uL0RPTUV4dGVuc2lvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RvbV9leHRlbnNpb24vZG9tX2V4dGVuc2lvbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3Jvb3QuanMiLAotICAgICAgImZyb250X2VuZC9SdW50aW1lLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGxhdGZvcm0vdXRpbGl0aWVzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvcGxhdGZvcm0vcGxhdGZvcm0uanMiLAotICAgICAgImZyb250X2VuZC91aS9BUklBVXRpbHMuanMiLAotICAgICAgImZyb250X2VuZC91aS9ab29tTWFuYWdlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1hXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC91aS9YTGluay5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1hFbGVtZW50LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvV2lkZ2V0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvVmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1ZpZXdNYW5hZ2VyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvVUlVdGlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL3VpLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvVHJlZW91dGxpbmUuanMiLAotICAgICAgImZyb250X2VuZC91aS9Ub29sdGlwLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvVG9vbGJhci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1Rocm90dGxlZFdpZGdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1RleHRQcm9tcHQuanMiLAotICAgICAgImZyb250X2VuZC91aS9UZXh0RWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvVGFyZ2V0Q3Jhc2hlZFNjcmVlbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1RhYmJlZFBhbmUuanMiLAotICAgICAgImZyb250X2VuZC91aS9TeW50YXhIaWdobGlnaHRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1N1Z2dlc3RCb3guanMiLAotICAgICAgImZyb250X2VuZC91aS9TcGxpdFdpZGdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1NvZnREcm9wRG93bi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1NvZnRDb250ZXh0TWVudS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1Nob3J0Y3V0c1NjcmVlbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1Nob3J0Y3V0UmVnaXN0cnkuanMiLAotICAgICAgImZyb250X2VuZC91aS9TZXR0aW5nc1VJLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvU2VnbWVudGVkQnV0dG9uLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvU2VhcmNoYWJsZVZpZXcuanMiLAotICAgICAgImZyb250X2VuZC91aS9Sb290Vmlldy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1Jlc2l6ZXJXaWRnZXQuanMiLAotICAgICAgImZyb250X2VuZC91aS9SZXBvcnRWaWV3LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvUmVtb3RlRGVidWdnaW5nVGVybWluYXRlZFNjcmVlbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1Byb2dyZXNzSW5kaWNhdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvUG9wb3ZlckhlbHBlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL1BhbmVsLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvTGlzdFdpZGdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0xpc3RNb2RlbC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0xpc3RDb250cm9sLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvS2V5Ym9hcmRTaG9ydGN1dC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0luc3BlY3RvclZpZXcuanMiLAotICAgICAgImZyb250X2VuZC91aS9JbnBsYWNlRWRpdG9yLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvSW5mb2Jhci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0ljb24uanMiLAotICAgICAgImZyb250X2VuZC91aS9IaXN0b3J5SW5wdXQuanMiLAotICAgICAgImZyb250X2VuZC91aS9HbGFzc1BhbmUuanMiLAotICAgICAgImZyb250X2VuZC91aS9HZW9tZXRyeS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0ZyYWdtZW50LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvRm9yd2FyZGVkSW5wdXRFdmVudEhhbmRsZXIuanMiLAotICAgICAgImZyb250X2VuZC91aS9GaWx0ZXJTdWdnZXN0aW9uQnVpbGRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0ZpbHRlckJhci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0VtcHR5V2lkZ2V0LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvRHJvcFRhcmdldC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0RpYWxvZy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0NvbnRleHRNZW51LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvQ29udGV4dC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0FSSUFVdGlscy5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3VpL0FjdGlvblJlZ2lzdHJ5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvQWN0aW9uLmpzIiwKLSAgICAgICJmcm9udF9lbmQvdWkvQWN0aW9uRGVsZWdhdGUuanMiLAotICAgICAgImZyb250X2VuZC91aS9Db250ZXh0Rmxhdm9yTGlzdGVuZXIuanMiLAotICAgICAgImZyb250X2VuZC9yb290LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL2NvbW1vbi5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9jb21tb24tbGVnYWN5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL0FwcC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9BcHBQcm92aWRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9DaGFyYWN0ZXJJZE1hcC5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9Db2xvci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9Db250ZW50UHJvdmlkZXIuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vRXZlbnRUYXJnZXQuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vSmF2YVNjcmlwdE1ldGFEYXRhLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL0xpbmtpZmllci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9PYmplY3QuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vQ29uc29sZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9QYXJzZWRVUkwuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vUHJvZ3Jlc3MuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vUXVlcnlQYXJhbUhhbmRsZXIuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vUmVzb3VyY2VUeXBlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1JldmVhbGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1J1bm5hYmxlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1NlZ21lbnRlZFJhbmdlLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1NldHRpbmdzLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1N0YXRpY0NvbnRlbnRQcm92aWRlci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvbW1vbi9TdHJpbmdPdXRwdXRTdHJlYW0uanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vVGV4dERpY3Rpb25hcnkuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vVGhyb3R0bGVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29tbW9uL1RyaWUuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vVUlTdHJpbmcuanMiLAotICAgICAgImZyb250X2VuZC9jb21tb24vV29ya2VyLmpzIiwKLSAgICBdLAotCi0gICAgJ2RldnRvb2xzX3Rlc3RfZmlsZXMnOiBbCi0gICAgICAjICIvL3RoaXJkX3BhcnR5L2F4ZS1jb3JlL2F4ZS5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2FjY2Vzc2liaWxpdHlfdGVzdF9ydW5uZXIvQWNjZXNzaWJpbGl0eVBhbmVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYWNjZXNzaWJpbGl0eV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2FwcGxpY2F0aW9uX3Rlc3RfcnVubmVyL0FwcGNhY2hlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2FwcGxpY2F0aW9uX3Rlc3RfcnVubmVyL0NhY2hlU3RvcmFnZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lci9JbmRleGVkREJUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXBwbGljYXRpb25fdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lci9SZXNvdXJjZXNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXBwbGljYXRpb25fdGVzdF9ydW5uZXIvUmVzb3VyY2VUcmVlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2FwcGxpY2F0aW9uX3Rlc3RfcnVubmVyL1NlcnZpY2VXb3JrZXJzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2F1ZGl0c190ZXN0X3J1bm5lci9BdWRpdHNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvYXVkaXRzX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvYXhlX2NvcmVfdGVzdF9ydW5uZXIvQXhlQ29yZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9heGVfY29yZV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0F1dG9tYXBwaW5nVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0JpbmRpbmdzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL0lzb2xhdGVkRmlsZXN5c3RlbVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5nc190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2JpbmRpbmdzX3Rlc3RfcnVubmVyL092ZXJyaWRlc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9iaW5kaW5nc190ZXN0X3J1bm5lci9QZXJzaXN0ZW5jZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9jb25zb2xlX3Rlc3RfcnVubmVyL0NvbnNvbGVUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvY29uc29sZV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2NvdmVyYWdlX3Rlc3RfcnVubmVyL0NvdmVyYWdlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2NvdmVyYWdlX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY3B1X3Byb2ZpbGVyX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvY3B1X3Byb2ZpbGVyX3Rlc3RfcnVubmVyL1Byb2ZpbGVyVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RhdGFfZ3JpZF90ZXN0X3J1bm5lci9EYXRhR3JpZFRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9kYXRhX2dyaWRfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9kZXZpY2VfbW9kZV90ZXN0X3J1bm5lci9EZXZpY2VNb2RlVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2RldmljZV9tb2RlX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHNfdGVzdF9ydW5uZXIvRWRpdERPTVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9lbGVtZW50c190ZXN0X3J1bm5lci9FbGVtZW50c1BhbmVsU2hhZG93U2VsZWN0aW9uT25SZWZyZXNoVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzX3Rlc3RfcnVubmVyL0VsZW1lbnRzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvZWxlbWVudHNfdGVzdF9ydW5uZXIvU2V0T3V0ZXJIVE1MVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2VsZW1lbnRzX3Rlc3RfcnVubmVyL1N0eWxlc1VwZGF0ZUxpbmtzVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnNfdGVzdF9ydW5uZXIvRXh0ZW5zaW9uc05ldHdvcmtUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvZXh0ZW5zaW9uc190ZXN0X3J1bm5lci9FeHRlbnNpb25zVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL2V4dGVuc2lvbnNfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9oZWFwX3Byb2ZpbGVyX3Rlc3RfcnVubmVyL0hlYXBQcm9maWxlclRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9oZWFwX3Byb2ZpbGVyX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvaW50ZWdyYXRpb25fdGVzdF9ydW5uZXIuaHRtbCIsCi0gICAgICAiZnJvbnRfZW5kL2ludGVncmF0aW9uX3Rlc3RfcnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvaW50ZWdyYXRpb25fdGVzdF9ydW5uZXIuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL2xheWVyc190ZXN0X3J1bm5lci9MYXllcnNUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvbGF5ZXJzX3Rlc3RfcnVubmVyL21vZHVsZS5qc29uIiwKLSAgICAgICJmcm9udF9lbmQvbmV0d29ya190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL25ldHdvcmtfdGVzdF9ydW5uZXIvTmV0d29ya1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9wZXJmb3JtYW5jZV90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3BlcmZvcm1hbmNlX3Rlc3RfcnVubmVyL1RpbWVsaW5lRGF0YVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9wZXJmb3JtYW5jZV90ZXN0X3J1bm5lci9UaW1lbGluZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9zZGtfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zZGtfdGVzdF9ydW5uZXIvUGFnZU1vY2tUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc2VjdXJpdHlfdGVzdF9ydW5uZXIvbW9kdWxlLmpzb24iLAotICAgICAgImZyb250X2VuZC9zZWN1cml0eV90ZXN0X3J1bm5lci9TZWN1cml0eVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzX3Rlc3RfcnVubmVyL0F1dG9jb21wbGV0ZVRlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC9zb3VyY2VzX3Rlc3RfcnVubmVyL0RlYnVnZ2VyVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvRWRpdG9yVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvTGl2ZUVkaXRUZXN0UnVubmVyLmpzIiwKLSAgICAgICJmcm9udF9lbmQvc291cmNlc190ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvU2VhcmNoVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiZnJvbnRfZW5kL3NvdXJjZXNfdGVzdF9ydW5uZXIvU291cmNlc1Rlc3RSdW5uZXIuanMiLAotICAgICAgImZyb250X2VuZC90ZXN0X3J1bm5lci9tb2R1bGUuanNvbiIsCi0gICAgXSwKLQotICAgICdkZXZ0b29sc19lbWJlZGRlcl9zY3JpcHRzJzogWwotICAgICAgImZyb250X2VuZC9kZXZ0b29sc19jb21wYXRpYmlsaXR5LmpzIiwKLSAgICAgICJmcm9udF9lbmQvVGVzdHMuanMiLAotICAgIF0sCi0KLSAgICAnZGV2dG9vbHNfZW11bGF0ZWRfZGV2aWNlc19pbWFnZXMnOiBbCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtaG9yaXpvbnRhbC1kZWZhdWx0LTF4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtaG9yaXpvbnRhbC1kZWZhdWx0LTJ4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtaG9yaXpvbnRhbC1rZXlib2FyZC0xeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01LWhvcml6b250YWwta2V5Ym9hcmQtMngucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNS1ob3Jpem9udGFsLW5hdmlnYXRpb24tMXgucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNS1ob3Jpem9udGFsLW5hdmlnYXRpb24tMngucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNS12ZXJ0aWNhbC1kZWZhdWx0LTF4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtdmVydGljYWwtZGVmYXVsdC0yeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01LXZlcnRpY2FsLWtleWJvYXJkLTF4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtdmVydGljYWwta2V5Ym9hcmQtMngucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLTF4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTUtdmVydGljYWwtbmF2aWdhdGlvbi0yeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01eC1ob3Jpem9udGFsLWRlZmF1bHQtMXgucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNXgtaG9yaXpvbnRhbC1kZWZhdWx0LTJ4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTV4LWhvcml6b250YWwta2V5Ym9hcmQtMXgucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNXgtaG9yaXpvbnRhbC1rZXlib2FyZC0yeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01eC1ob3Jpem9udGFsLW5hdmlnYXRpb24tMXgucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNXgtaG9yaXpvbnRhbC1uYXZpZ2F0aW9uLTJ4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTV4LXZlcnRpY2FsLWRlZmF1bHQtMXgucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9nb29nbGUtbmV4dXMtNXgtdmVydGljYWwtZGVmYXVsdC0yeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01eC12ZXJ0aWNhbC1rZXlib2FyZC0xeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01eC12ZXJ0aWNhbC1rZXlib2FyZC0yeC5wbmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2dvb2dsZS1uZXh1cy01eC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLTF4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvZ29vZ2xlLW5leHVzLTV4LXZlcnRpY2FsLW5hdmlnYXRpb24tMngucG5nIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9pUGFkLWxhbmRzY2FwZS5zdmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2lQYWQtcG9ydHJhaXQuc3ZnIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9pUGhvbmU1LWxhbmRzY2FwZS5zdmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2lQaG9uZTUtcG9ydHJhaXQuc3ZnIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9pUGhvbmU2LWxhbmRzY2FwZS5zdmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL2lQaG9uZTYtcG9ydHJhaXQuc3ZnIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9pUGhvbmU2UGx1cy1sYW5kc2NhcGUuc3ZnIiwKLSAgICAgICJmcm9udF9lbmQvZW11bGF0ZWRfZGV2aWNlcy9pUGhvbmU2UGx1cy1wb3J0cmFpdC5zdmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL05leHVzNVgtbGFuZHNjYXBlLnN2ZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvTmV4dXM1WC1wb3J0cmFpdC5zdmciLAotICAgICAgImZyb250X2VuZC9lbXVsYXRlZF9kZXZpY2VzL05leHVzNlAtbGFuZHNjYXBlLnN2ZyIsCi0gICAgICAiZnJvbnRfZW5kL2VtdWxhdGVkX2RldmljZXMvTmV4dXM2UC1wb3J0cmFpdC5zdmciLAotICAgIF0sCi0KLSAgICAjIEZpbmQgYWN0dWFsbHkgcmVmZXJlbmNlZCBpbWFnZXMgaW4gY29tcGlsZWQgcmVsZWFzZSBjb2RlIHdpdGg6Ci0gICAgIyBncmVwIC1yIEltYWdlcy8gfCBzZWQgInMvWygpJ10vXG4vZyIgfCBncmVwIEltYWdlcy8gfCBzb3J0IHwgdW5pcQotCi0gICAgJ2RldnRvb2xzX2ltYWdlX2ZpbGVzJzogWwotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9hY2NlbGVyb21ldGVyLWJhY2suc3ZnIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvYWNjZWxlcm9tZXRlci1ib3R0b20ucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvYWNjZWxlcm9tZXRlci1mcm9udC5zdmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9hY2NlbGVyb21ldGVyLWxlZnQucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvYWNjZWxlcm9tZXRlci1yaWdodC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9hY2NlbGVyb21ldGVyLXRvcC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9hdWRpdHNfbG9nby5zdmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvYnJlYWtwb2ludC5zdmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvYnJlYWtwb2ludENvbmRpdGlvbmFsLnN2ZyIsCi0gICAgICAiZnJvbnRfZW5kL0ltYWdlcy9jaGVja2JveENoZWNrbWFyay5zdmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvY2hlY2tlci5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvY2hldnJvbnMuc3ZnIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvY2hyb21lRGlzYWJsZWRTZWxlY3QucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvY2hyb21lRGlzYWJsZWRTZWxlY3RfMngucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvY2hyb21lTGVmdC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9jaHJvbWVNaWRkbGUucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvY2hyb21lUmlnaHQucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL2Nocm9tZVNlbGVjdC5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvY2hyb21lU2VsZWN0XzJ4LnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL0ltYWdlcy9jc3NvdmVydmlld19pY29uc18yeC5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvZXJyb3JXYXZlLnN2ZyIsCi0gICAgICAiZnJvbnRfZW5kL0ltYWdlcy9pY19pbmZvX2JsYWNrXzE4ZHAuc3ZnIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL2ljX3dhcm5pbmdfYmxhY2tfMThkcC5zdmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvbGFyZ2VJY29ucy5zdmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvbWVkaXVtSWNvbnMuc3ZnIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvbmF2aWdhdGlvbkNvbnRyb2xzLnBuZyIsCi0gICAgICAjICJmcm9udF9lbmQvSW1hZ2VzL25hdmlnYXRpb25Db250cm9sc18yeC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9ub2RlSWNvbi5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcG9wb3ZlckFycm93cy5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcHJvZmlsZUdyb3VwSWNvbi5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcHJvZmlsZUljb24ucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3Byb2ZpbGVTbWFsbEljb24ucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3JhZGlvRG90LnBuZyIsCi0gICAgICAjICJmcm9udF9lbmQvSW1hZ2VzL3Jlc2l6ZURpYWdvbmFsLnBuZyIsCi0gICAgICAjICJmcm9udF9lbmQvSW1hZ2VzL3Jlc2l6ZURpYWdvbmFsXzJ4LnBuZyIsCi0gICAgICAjICJmcm9udF9lbmQvSW1hZ2VzL3Jlc2l6ZUhvcml6b250YWwucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvcmVzaXplSG9yaXpvbnRhbF8yeC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9yZXNpemVWZXJ0aWNhbC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9yZXNpemVWZXJ0aWNhbF8yeC5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcmVzb3VyY2VDU1NJY29uLnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL0ltYWdlcy9yZXNvdXJjZURvY3VtZW50SWNvbi5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcmVzb3VyY2VEb2N1bWVudEljb25TbWFsbC5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvcmVzb3VyY2VKU0ljb24ucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3Jlc291cmNlUGxhaW5JY29uLnBuZyIsCi0gICAgICAiZnJvbnRfZW5kL0ltYWdlcy9yZXNvdXJjZVBsYWluSWNvblNtYWxsLnBuZyIsCi0gICAgICAjICJmcm9udF9lbmQvSW1hZ2VzL3Jlc291cmNlc1RpbWVHcmFwaEljb24ucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3NlYXJjaE5leHQucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3NlYXJjaFByZXYucG5nIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvc2VjdXJpdHlJY29ucy5zdmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy9zcGVlY2gucG5nIiwKLSAgICAgICJmcm9udF9lbmQvSW1hZ2VzL3NtYWxsSWNvbnMuc3ZnIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvdG9vbGJhclJlc2l6ZXJWZXJ0aWNhbC5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy90b3VjaEN1cnNvci5wbmciLAotICAgICAgIyAiZnJvbnRfZW5kL0ltYWdlcy90b3VjaEN1cnNvcl8yeC5wbmciLAotICAgICAgImZyb250X2VuZC9JbWFnZXMvdHJlZW91dGxpbmVUcmlhbmdsZXMuc3ZnIiwKLSAgICAgICMgImZyb250X2VuZC9JbWFnZXMvd2hhdHNuZXcucG5nIiwKLSAgICBdLAotCi0gICAgJ3Jlc291cmNlc19vdXRfZGlyJzogJzwoc2Jfc3RhdGljX2NvbnRlbnRzX291dHB1dF9kYXRhX2Rpcikvd2ViL2RlYnVnX3JlbW90ZS9kZXZ0b29scycsCi0gICAgJ3Jlc291cmNlc19vdXRfZGVidWdfZGlyJzogJzwocmVzb3VyY2VzX291dF9kaXIpL2RlYnVnJywKLQotICAgICdnZW5lcmF0ZWRfc2NyaXB0cyc6IFsKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9JbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL1N1cHBvcnRlZENTU1Byb3BlcnRpZXMuanMiLAotICAgIF0sCi0KLSAgICAnZ2VuZXJhdGVkX2FyaWFfcHJvcGVydGllcyc6IFsKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FSSUFQcm9wZXJ0aWVzLmpzIiwKLSAgICBdLAotCi0gICAgJ2FwcGxpY2F0aW9uX3RlbXBsYXRlcyc6IFsKLSAgICAgICJmcm9udF9lbmQvZGV2dG9vbHNfYXBwLmh0bWwiLAotICAgICAgImZyb250X2VuZC9pbnNwZWN0b3IuaHRtbCIsCi0gICAgICAiZnJvbnRfZW5kL2ludGVncmF0aW9uX3Rlc3RfcnVubmVyLmh0bWwiLAotICAgICAgImZyb250X2VuZC9qc19hcHAuaHRtbCIsCi0gICAgICAiZnJvbnRfZW5kL25kYl9hcHAuaHRtbCIsCi0gICAgICAiZnJvbnRfZW5kL25vZGVfYXBwLmh0bWwiLAotICAgICAgImZyb250X2VuZC90b29sYm94Lmh0bWwiLAotICAgICAgImZyb250X2VuZC93b3JrZXJfYXBwLmh0bWwiLAotICAgIF0sCi0KLSAgICAnY29waWVkX2RldnRvb2xzX21vZHVsZXMnOiBbCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29iYWx0L2NvYmFsdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9uZXR3b3JrLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL1NpZ25lZEV4Y2hhbmdlSW5mb1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvUmVzb3VyY2VXZWJTb2NrZXRGcmFtZVZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvUmVxdWVzdFRpbWluZ1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvUmVxdWVzdFJlc3BvbnNlVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9SZXF1ZXN0UHJldmlld1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvUmVxdWVzdEluaXRpYXRvclZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvUmVxdWVzdEhlYWRlcnNWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL1JlcXVlc3RIVE1MVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9SZXF1ZXN0Q29va2llc1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvTmV0d29ya1dhdGVyZmFsbENvbHVtbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9OZXR3b3JrVGltZUNhbGN1bGF0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvTmV0d29ya1NlYXJjaFNjb3BlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL05ldHdvcmtQYW5lbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9OZXR3b3JrT3ZlcnZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvTmV0d29ya01hbmFnZUN1c3RvbUhlYWRlcnNWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL05ldHdvcmtMb2dWaWV3Q29sdW1ucy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9OZXR3b3JrTG9nVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9OZXR3b3JrSXRlbVZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvTmV0d29ya0ZyYW1lR3JvdXBlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9OZXR3b3JrRGF0YUdyaWROb2RlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL05ldHdvcmtDb25maWdWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9uZXR3b3JrL0hBUldyaXRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9FdmVudFNvdXJjZU1lc3NhZ2VzVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29yay9CbG9ja2VkVVJMc1BhbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvQmluYXJ5UmVzb3VyY2VWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS90ZXN0X3J1bm5lci90ZXN0X3J1bm5lci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGVzdF9ydW5uZXIvVGVzdFJ1bm5lci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0aW9uL2VtdWxhdGlvbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0aW9uL1NlbnNvcnNWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vTWVkaWFRdWVyeUluc3BlY3Rvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0aW9uL0luc3BlY3RlZFBhZ2VQbGFjZWhvbGRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0aW9uL0dlb2xvY2F0aW9uc1NldHRpbmdzVGFiLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vRW11bGF0ZWREZXZpY2VzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vRGV2aWNlc1NldHRpbmdzVGFiLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vRGV2aWNlTW9kZVdyYXBwZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VtdWxhdGlvbi9EZXZpY2VNb2RlVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0aW9uL0RldmljZU1vZGVUb29sYmFyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vRGV2aWNlTW9kZU1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbXVsYXRpb24vQWR2YW5jZWRBcHAuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2luc3BlY3Rvcl9tYWluL2luc3BlY3Rvcl9tYWluLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9pbnNwZWN0b3JfbWFpbi9SZW5kZXJpbmdPcHRpb25zLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9pbnNwZWN0b3JfbWFpbi9JbnNwZWN0b3JNYWluLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9qc19tYWluL2pzX21haW4uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2pzX21haW4vSnNNYWluLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZWFyY2gvc2VhcmNoLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZWFyY2gvU2VhcmNoVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VhcmNoL1NlYXJjaFJlc3VsdHNQYW5lLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZWFyY2gvU2VhcmNoQ29uZmlnLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zY3JlZW5jYXN0L3NjcmVlbmNhc3QuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NjcmVlbmNhc3QvU2NyZWVuY2FzdFZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NjcmVlbmNhc3QvU2NyZWVuY2FzdEFwcC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2NyZWVuY2FzdC9JbnB1dE1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJmb3JtYW5jZV9tb25pdG9yL3BlcmZvcm1hbmNlX21vbml0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcmZvcm1hbmNlX21vbml0b3IvUGVyZm9ybWFuY2VNb25pdG9yLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tYWluL21haW4uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL21haW4vU2ltcGxlQXBwLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tYWluL01haW5JbXBsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tYWluL0V4ZWN1dGlvbkNvbnRleHRTZWxlY3Rvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc25pcHBldHMvc25pcHBldHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NuaXBwZXRzL1NuaXBwZXRzUXVpY2tPcGVuLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zbmlwcGV0cy9TY3JpcHRTbmlwcGV0RmlsZVN5c3RlbS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2V0dGluZ3Mvc2V0dGluZ3MuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NldHRpbmdzL1NldHRpbmdzU2NyZWVuLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZXR0aW5ncy9GcmFtZXdvcmtCbGFja2JveFNldHRpbmdzVGFiLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZWN1cml0eS9zZWN1cml0eS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VjdXJpdHkvU2VjdXJpdHlQYW5lbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VjdXJpdHkvU2VjdXJpdHlNb2RlbC5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS93ZWJfYXVkaW8vd2ViX2F1ZGlvLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL1R5cGVzLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL0dyYXBoU3R5bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL2dyYXBoX3Zpc3VhbGl6ZXIvR3JhcGhNYW5hZ2VyLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3dlYl9hdWRpby9ncmFwaF92aXN1YWxpemVyL05vZGVSZW5kZXJlclV0aWxpdHkuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL2dyYXBoX3Zpc3VhbGl6ZXIvTm9kZVZpZXcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL2dyYXBoX3Zpc3VhbGl6ZXIvRWRnZVZpZXcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL2dyYXBoX3Zpc3VhbGl6ZXIvR3JhcGhWaWV3LmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3dlYl9hdWRpby9XZWJBdWRpb1ZpZXcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL1dlYkF1ZGlvTW9kZWwuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL0F1ZGlvQ29udGV4dFNlbGVjdG9yLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3dlYl9hdWRpby9BdWRpb0NvbnRleHRDb250ZW50QnVpbGRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvZWxlbWVudHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL2VsZW1lbnRzLWxlZ2FjeS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvU3R5bGVzU2lkZWJhclBhbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL1N0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvU3R5bGVQcm9wZXJ0eUhpZ2hsaWdodGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9Qcm9wZXJ0aWVzV2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9QbGF0Zm9ybUZvbnRzV2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9Ob2RlU3RhY2tUcmFjZVdpZGdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvTWV0cmljc1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9NYXJrZXJEZWNvcmF0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0luc3BlY3RFbGVtZW50TW9kZUNvbnRyb2xsZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0V2ZW50TGlzdGVuZXJzV2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9FbGVtZW50c1RyZWVFbGVtZW50LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9FbGVtZW50c1RyZWVFbGVtZW50SGlnaGxpZ2h0ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0VsZW1lbnRTdGF0ZVBhbmVXaWRnZXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0VsZW1lbnRzU2lkZWJhclBhbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0VsZW1lbnRzUGFuZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0VsZW1lbnRzQnJlYWRjcnVtYnMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0RPTVBhdGguanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VsZW1lbnRzL0RPTUxpbmtpZmllci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvQ29tcHV0ZWRTdHlsZVdpZGdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHMvQ29tcHV0ZWRTdHlsZU1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9Db2xvclN3YXRjaFBvcG92ZXJJY29uLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9DbGFzc2VzUGFuZVdpZGdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvamF2YXNjcmlwdF9tZXRhZGF0YS9qYXZhc2NyaXB0X21ldGFkYXRhLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9qYXZhc2NyaXB0X21ldGFkYXRhL05hdGl2ZUZ1bmN0aW9ucy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvamF2YXNjcmlwdF9tZXRhZGF0YS9KYXZhU2NyaXB0TWV0YWRhdGEuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hhcl9pbXBvcnRlci9oYXJfaW1wb3J0ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hhcl9pbXBvcnRlci9IQVJJbXBvcnRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGFyX2ltcG9ydGVyL0hBUkZvcm1hdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYnJvd3Nlcl9kZWJ1Z2dlci9icm93c2VyX2RlYnVnZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9icm93c2VyX2RlYnVnZ2VyL1hIUkJyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2Jyb3dzZXJfZGVidWdnZXIvT2JqZWN0RXZlbnRMaXN0ZW5lcnNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYnJvd3Nlcl9kZWJ1Z2dlci9FdmVudExpc3RlbmVyQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYnJvd3Nlcl9kZWJ1Z2dlci9ET01CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcl92aWV3ZXIvbGF5ZXJfdmlld2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcl92aWV3ZXIvVHJhbnNmb3JtQ29udHJvbGxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbGF5ZXJfdmlld2VyL1BhaW50UHJvZmlsZXJWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcl92aWV3ZXIvTGF5ZXJzM0RWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcl92aWV3ZXIvTGF5ZXJWaWV3SG9zdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbGF5ZXJfdmlld2VyL0xheWVyVHJlZU91dGxpbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2xheWVyX3ZpZXdlci9MYXllckRldGFpbHNWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvY21fd2ViX21vZGVzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvY21fd2ViX21vZGVzX2NtLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvY21fd2ViX21vZGVzX2hlYWRsZXNzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvY3NzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvamF2YXNjcmlwdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fd2ViX21vZGVzL3htbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fd2ViX21vZGVzL2h0bWxtaXhlZC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fd2ViX21vZGVzL2h0bWxlbWJlZGRlZC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGV4dF9lZGl0b3IvdGV4dF9lZGl0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3RleHRfZWRpdG9yL1RleHRFZGl0b3JBdXRvY29tcGxldGVDb250cm9sbGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS90ZXh0X2VkaXRvci9Db2RlTWlycm9yVXRpbHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3RleHRfZWRpdG9yL0NvZGVNaXJyb3JUZXh0RWRpdG9yLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9xdWlja19vcGVuL3F1aWNrX29wZW4uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3F1aWNrX29wZW4vUXVpY2tPcGVuLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9xdWlja19vcGVuL0hlbHBRdWlja09wZW4uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3F1aWNrX29wZW4vRmlsdGVyZWRMaXN0V2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9xdWlja19vcGVuL0NvbW1hbmRNZW51LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS90aW1lbGluZV9tb2RlbC90aW1lbGluZV9tb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVHJhY2luZ0xheWVyVHJlZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVQcm9maWxlVHJlZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVNb2RlbEZpbHRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVKU1Byb2ZpbGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3RpbWVsaW5lX21vZGVsL1RpbWVsaW5lSVJNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvVGltZWxpbmVGcmFtZU1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWxwL2hlbHAuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hlbHAvUmVsZWFzZU5vdGVWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWxwL1JlbGVhc2VOb3RlVGV4dC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGVscC9IZWxwSW1wbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd29ya3NwYWNlX2RpZmYvd29ya3NwYWNlX2RpZmYuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3dvcmtzcGFjZV9kaWZmL1dvcmtzcGFjZURpZmYuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL21vYmlsZV90aHJvdHRsaW5nL21vYmlsZV90aHJvdHRsaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tb2JpbGVfdGhyb3R0bGluZy9UaHJvdHRsaW5nU2V0dGluZ3NUYWIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL21vYmlsZV90aHJvdHRsaW5nL1Rocm90dGxpbmdQcmVzZXRzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tb2JpbGVfdGhyb3R0bGluZy9UaHJvdHRsaW5nTWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbW9iaWxlX3Rocm90dGxpbmcvTmV0d29ya1Rocm90dGxpbmdTZWxlY3Rvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbW9iaWxlX3Rocm90dGxpbmcvTmV0d29ya1BhbmVsSW5kaWNhdG9yLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9tb2JpbGVfdGhyb3R0bGluZy9Nb2JpbGVUaHJvdHRsaW5nU2VsZWN0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2V2ZW50X2xpc3RlbmVycy9ldmVudF9saXN0ZW5lcnMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2V2ZW50X2xpc3RlbmVycy9FdmVudExpc3RlbmVyc1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2V2ZW50X2xpc3RlbmVycy9FdmVudExpc3RlbmVyc1V0aWxzLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2xheWVycy9sYXllcnMuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvbGF5ZXJzL0xheWVyc1BhbmVsLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2xheWVycy9MYXllclRyZWVNb2RlbC5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcnMvTGF5ZXJQYWludFByb2ZpbGVyVmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvb2JqZWN0X3VpL29iamVjdF91aS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvb2JqZWN0X3VpL1JlbW90ZU9iamVjdFByZXZpZXdGb3JtYXR0ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL29iamVjdF91aS9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvb2JqZWN0X3VpL09iamVjdFBvcG92ZXJIZWxwZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL29iamVjdF91aS9KYXZhU2NyaXB0UkVQTC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvb2JqZWN0X3VpL0phdmFTY3JpcHRBdXRvY29tcGxldGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL29iamVjdF91aS9DdXN0b21QcmV2aWV3Q29tcG9uZW50LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb29raWVfdGFibGUvY29va2llX3RhYmxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb29raWVfdGFibGUvQ29va2llc1RhYmxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV9tb2Rlcy9jbV9tb2Rlcy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvRGVmYXVsdENvZGVNaXJyb3JNaW1lTW9kZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvY2xpa2UuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtX21vZGVzL2NvZmZlZXNjcmlwdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvcGhwLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV9tb2Rlcy9weXRob24uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtX21vZGVzL3NoZWxsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV9tb2Rlcy9saXZlc2NyaXB0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV9tb2Rlcy9tYXJrZG93bi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvY2xvanVyZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvanN4LmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvdmVyYWdlL2NvdmVyYWdlLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvdmVyYWdlL0NvdmVyYWdlVmlldy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9jb3ZlcmFnZS9Db3ZlcmFnZU1vZGVsLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvdmVyYWdlL0NvdmVyYWdlTGlzdFZpZXcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvY292ZXJhZ2UvQ292ZXJhZ2VEZWNvcmF0aW9uTWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY3NzX292ZXJ2aWV3L2Nzc19vdmVydmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3VW51c2VkRGVjbGFyYXRpb25zLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdTdGFydFZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2Nzc19vdmVydmlldy9DU1NPdmVydmlld1NpZGViYXJQYW5lbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3UHJvY2Vzc2luZ1ZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2Nzc19vdmVydmlldy9DU1NPdmVydmlld1BhbmVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jc3Nfb3ZlcnZpZXcvQ1NTT3ZlcnZpZXdNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3Q29udHJvbGxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY3NzX292ZXJ2aWV3L0NTU092ZXJ2aWV3Q29tcGxldGVkVmlldy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hdWRpdHMvbGlnaHRob3VzZS9yZXBvcnQuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzL2xpZ2h0aG91c2UvcmVwb3J0LWdlbmVyYXRvci5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hdWRpdHMvYXVkaXRzLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2F1ZGl0cy9SYWRpb1NldHRpbmcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzL0F1ZGl0c1N0YXR1c1ZpZXcuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzL0F1ZGl0c1N0YXJ0Vmlldy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hdWRpdHMvQXVkaXRzUmVwb3J0U2VsZWN0b3IuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzL0F1ZGl0c1JlcG9ydFJlbmRlcmVyLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2F1ZGl0cy9BdWRpdHNQcm90b2NvbFNlcnZpY2UuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzL0F1ZGl0c1BhbmVsLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2F1ZGl0cy9BdWRpdHNDb250cm9sbGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlL2NvbnNvbGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbnNvbGUvQ29uc29sZUNvbnRleHRTZWxlY3Rvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZS9Db25zb2xlRmlsdGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlL0NvbnNvbGVTaWRlYmFyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlL0NvbnNvbGVQYW5lbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZS9Db25zb2xlUGluUGFuZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZS9Db25zb2xlUHJvbXB0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlL0NvbnNvbGVWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlL0NvbnNvbGVWaWV3TWVzc2FnZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZS9Db25zb2xlVmlld3BvcnQuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYW5pbWF0aW9uL2FuaW1hdGlvbi5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hbmltYXRpb24vQW5pbWF0aW9uVUkuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2FuaW1hdGlvbi9BbmltYXRpb25TY3JlZW5zaG90UG9wb3Zlci5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hbmltYXRpb24vQW5pbWF0aW9uTW9kZWwuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYW5pbWF0aW9uL0FuaW1hdGlvbkdyb3VwUHJldmlld1VJLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2NoYW5nZXMvY2hhbmdlcy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9jaGFuZ2VzL0NoYW5nZXNWaWV3LmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2NoYW5nZXMvQ2hhbmdlc1NpZGViYXIuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvY2hhbmdlcy9DaGFuZ2VzSGlnaGxpZ2h0ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZV9mcmFtZS9zb3VyY2VfZnJhbWUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZV9mcmFtZS9YTUxWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zb3VyY2VfZnJhbWUvU291cmNlc1RleHRFZGl0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZV9mcmFtZS9Tb3VyY2VGcmFtZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc291cmNlX2ZyYW1lL1NvdXJjZUNvZGVEaWZmLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zb3VyY2VfZnJhbWUvUmVzb3VyY2VTb3VyY2VGcmFtZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc291cmNlX2ZyYW1lL1ByZXZpZXdGYWN0b3J5LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zb3VyY2VfZnJhbWUvSlNPTlZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZV9mcmFtZS9JbWFnZVZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZV9mcmFtZS9Gb250Vmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc291cmNlX2ZyYW1lL0JpbmFyeVJlc291cmNlVmlld0ZhY3RvcnkuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2lubGluZV9lZGl0b3IvaW5saW5lX2VkaXRvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5saW5lX2VkaXRvci9Td2F0Y2hQb3BvdmVySGVscGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9pbmxpbmVfZWRpdG9yL0NTU1NoYWRvd01vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9pbmxpbmVfZWRpdG9yL0NTU1NoYWRvd0VkaXRvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5saW5lX2VkaXRvci9Db2xvclN3YXRjaC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5saW5lX2VkaXRvci9CZXppZXJVSS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5saW5lX2VkaXRvci9CZXppZXJFZGl0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2RpZmYvZGlmZi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGlmZi9kaWZmX21hdGNoX3BhdGNoLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9kaWZmL0RpZmZXcmFwcGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9mb3JtYXR0ZXIvZm9ybWF0dGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9mb3JtYXR0ZXIvU2NyaXB0Rm9ybWF0dGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9mb3JtYXR0ZXIvRm9ybWF0dGVyV29ya2VyUG9vbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29sb3JfcGlja2VyL2NvbG9yX3BpY2tlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29sb3JfcGlja2VyL1NwZWN0cnVtLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb2xvcl9waWNrZXIvQ29udHJhc3RPdmVybGF5LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb2xvcl9waWNrZXIvQ29udHJhc3RJbmZvLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb2xvcl9waWNrZXIvQ29udHJhc3REZXRhaWxzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbS9jbS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY20vYWN0aXZlLWxpbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtL2JyYWNlLWZvbGQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtL2Nsb3NlYnJhY2tldHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtL2NvZGVtaXJyb3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtL2NvbW1lbnQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtL2ZvbGRjb2RlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbS9mb2xkZ3V0dGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbS9tYXJrLXNlbGVjdGlvbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY20vbWF0Y2hicmFja2V0cy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY20vbXVsdGlwbGV4LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbS9vdmVybGF5LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3NuYXBzaG90X21vZGVsL2hlYXBfc25hcHNob3RfbW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hlYXBfc25hcHNob3RfbW9kZWwvSGVhcFNuYXBzaG90TW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hlYXBfc25hcHNob3Rfd29ya2VyL2hlYXBfc25hcHNob3Rfd29ya2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3NuYXBzaG90X3dvcmtlci9BbGxvY2F0aW9uUHJvZmlsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGVhcF9zbmFwc2hvdF93b3JrZXIvSGVhcFNuYXBzaG90LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3NuYXBzaG90X3dvcmtlci9IZWFwU25hcHNob3RMb2FkZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hlYXBfc25hcHNob3Rfd29ya2VyL0hlYXBTbmFwc2hvdFdvcmtlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGVhcF9zbmFwc2hvdF93b3JrZXIvSGVhcFNuYXBzaG90V29ya2VyRGlzcGF0Y2hlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGV4dF91dGlscy90ZXh0X3V0aWxzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS90ZXh0X3V0aWxzL1RleHRVdGlscy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGV4dF91dGlscy9UZXh0UmFuZ2UuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3RleHRfdXRpbHMvVGV4dC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21faGVhZGxlc3MvY21faGVhZGxlc3MuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NtX2hlYWRsZXNzL2hlYWRsZXNzY29kZW1pcnJvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGF0YV9ncmlkL2RhdGFfZ3JpZC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGF0YV9ncmlkL1ZpZXdwb3J0RGF0YUdyaWQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2RhdGFfZ3JpZC9Tb3J0YWJsZURhdGFHcmlkLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9kYXRhX2dyaWQvU2hvd01vcmVEYXRhR3JpZE5vZGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2RhdGFfZ3JpZC9EYXRhR3JpZC5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L2FjY2Vzc2liaWxpdHkuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3RyaW5ncy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTaWRlYmFyVmlldy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlVmlldy5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2RlbC5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FYQnJlYWRjcnVtYnNQYW5lLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2FjY2Vzc2liaWxpdHkvQVJJQU1ldGFkYXRhLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL2FjY2Vzc2liaWxpdHkvQVJJQUF0dHJpYnV0ZXNWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wcm90b2NvbF9tb25pdG9yL3Byb3RvY29sX21vbml0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Byb3RvY29sX21vbml0b3IvUHJvdG9jb2xNb25pdG9yLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb25zb2xlX2NvdW50ZXJzL2NvbnNvbGVfY291bnRlcnMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbnNvbGVfY291bnRlcnMvV2FybmluZ0Vycm9yQ291bnRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZXh0ZW5zaW9ucy9leHRlbnNpb25zLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9leHRlbnNpb25zL0V4dGVuc2lvbkFQSS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZXh0ZW5zaW9ucy9FeHRlbnNpb25QYW5lbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZXh0ZW5zaW9ucy9FeHRlbnNpb25TZXJ2ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2V4dGVuc2lvbnMvRXh0ZW5zaW9uVHJhY2VQcm92aWRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZXh0ZW5zaW9ucy9FeHRlbnNpb25WaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9icm93c2VyX3Nkay9icm93c2VyX3Nkay5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYnJvd3Nlcl9zZGsvTG9nTWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvcGVyc2lzdGVuY2UvcGVyc2lzdGVuY2UuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcnNpc3RlbmNlL1dvcmtzcGFjZVNldHRpbmdzVGFiLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJzaXN0ZW5jZS9QbGF0Zm9ybUZpbGVTeXN0ZW0uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcnNpc3RlbmNlL1BlcnNpc3RlbmNlVXRpbHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcnNpc3RlbmNlL1BlcnNpc3RlbmNlSW1wbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvcGVyc2lzdGVuY2UvUGVyc2lzdGVuY2VBY3Rpb25zLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJzaXN0ZW5jZS9OZXR3b3JrUGVyc2lzdGVuY2VNYW5hZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJzaXN0ZW5jZS9Jc29sYXRlZEZpbGVTeXN0ZW1NYW5hZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJzaXN0ZW5jZS9Jc29sYXRlZEZpbGVTeXN0ZW0uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcnNpc3RlbmNlL0ZpbGVTeXN0ZW1Xb3Jrc3BhY2VCaW5kaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wZXJzaXN0ZW5jZS9FZGl0RmlsZVN5c3RlbVZpZXcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcnNpc3RlbmNlL0F1dG9tYXBwaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21wb25lbnRzL2NvbXBvbmVudHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbXBvbmVudHMvVGFyZ2V0RGV0YWNoZWREaWFsb2cuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbXBvbmVudHMvUmVsb2FkLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21wb25lbnRzL0xpbmtpZmllci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tcG9uZW50cy9KU1ByZXNlbnRhdGlvblV0aWxzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21wb25lbnRzL0ltYWdlUHJldmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tcG9uZW50cy9Eb2NrQ29udHJvbGxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvYmluZGluZ3MuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzL1RlbXBGaWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9TdHlsZXNTb3VyY2VNYXBwaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9TQVNTU291cmNlTWFwcGluZy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvUmVzb3VyY2VVdGlscy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9SZXNvdXJjZU1hcHBpbmcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzL1ByZXNlbnRhdGlvbkNvbnNvbGVNZXNzYWdlSGVscGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9OZXR3b3JrUHJvamVjdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvTGl2ZUxvY2F0aW9uLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9GaWxlVXRpbHMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzL0RlZmF1bHRTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9EZWJ1Z2dlcldvcmtzcGFjZUJpbmRpbmcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzL0NTU1dvcmtzcGFjZUJpbmRpbmcuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzL0NvbnRlbnRQcm92aWRlckJhc2VkUHJvamVjdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9iaW5kaW5ncy9CcmVha3BvaW50TWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYmluZGluZ3MvQmxhY2tib3hNYW5hZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS93b3Jrc3BhY2Uvd29ya3NwYWNlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS93b3Jrc3BhY2UvV29ya3NwYWNlSW1wbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd29ya3NwYWNlL1VJU291cmNlQ29kZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd29ya3NwYWNlL0ZpbGVNYW5hZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZXJ2aWNlcy9zZXJ2aWNlcy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VydmljZXMvU2VydmljZU1hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9zZGsuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9UcmFjaW5nTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9UcmFjaW5nTWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1RhcmdldE1hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9UYXJnZXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9Tb3VyY2VNYXBNYW5hZ2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvU291cmNlTWFwLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvU2VydmljZVdvcmtlck1hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9TZXJ2aWNlV29ya2VyQ2FjaGVNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1NlcnZlclRpbWluZy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1NlY3VyaXR5T3JpZ2luTWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1NES01vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvU2NyaXB0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvU2NyZWVuQ2FwdHVyZU1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvUnVudGltZU1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvUmVzb3VyY2VUcmVlTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9SZXNvdXJjZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1JlbW90ZU9iamVjdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1Byb2ZpbGVUcmVlTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9Jc3N1ZXNNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL1BlcmZvcm1hbmNlTWV0cmljc01vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvUGFpbnRQcm9maWxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL092ZXJsYXlNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL05ldHdvcmtSZXF1ZXN0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvTmV0d29ya01hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9OZXR3b3JrTG9nLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvTG9nTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9MYXllclRyZWVCYXNlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvSXNvbGF0ZU1hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9IZWFwUHJvZmlsZXJNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0hBUkxvZy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0ZpbG1TdHJpcE1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvRW11bGF0aW9uTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9ET01Nb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0RPTURlYnVnZ2VyTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9EZWJ1Z2dlck1vZGVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvQ1NTU3R5bGVTaGVldEhlYWRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0NTU1N0eWxlRGVjbGFyYXRpb24uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9DU1NSdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvQ1NTUHJvcGVydHkuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9DU1NNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0NTU01ldGFkYXRhLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvQ1NTTWVkaWEuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9DU1NNYXRjaGVkU3R5bGVzLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvQ1BVUHJvZmlsZXJNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0NQVVByb2ZpbGVEYXRhTW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9Db29raWVQYXJzZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay9Db29raWVNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0NvbXBpbGVyU291cmNlTWFwcGluZ0NvbnRlbnRQcm92aWRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0NvbnNvbGVNb2RlbC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2RrL0Nvbm5lY3Rpb25zLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvQ2hpbGRUYXJnZXRNYW5hZ2VyLmpzIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3Nkay93YXNtX3NvdXJjZV9tYXAvcGtnL3dhc21fc291cmNlX21hcC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvcHJvdG9jb2wvcHJvdG9jb2wuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Byb3RvY29sL05vZGVVUkwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3Byb3RvY29sL0luc3BlY3RvckJhY2tlbmQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hvc3QvaG9zdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaG9zdC9Vc2VyTWV0cmljcy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaG9zdC9SZXNvdXJjZUxvYWRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaG9zdC9QbGF0Zm9ybS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaG9zdC9JbnNwZWN0b3JGcm9udGVuZEhvc3QuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2hvc3QvSW5zcGVjdG9yRnJvbnRlbmRIb3N0QVBJLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9kb21fZXh0ZW5zaW9uL0RPTUV4dGVuc2lvbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZG9tX2V4dGVuc2lvbi9kb21fZXh0ZW5zaW9uLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9yb290LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9SdW50aW1lLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wbGF0Zm9ybS91dGlsaXRpZXMuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BsYXRmb3JtL3BsYXRmb3JtLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS91aS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvWm9vbU1hbmFnZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1hXaWRnZXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1hMaW5rLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9YRWxlbWVudC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvV2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9WaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9WaWV3TWFuYWdlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVUlVdGlscy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVHJlZW91dGxpbmUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1Rvb2x0aXAuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1Rvb2xiYXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1Rocm90dGxlZFdpZGdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVGV4dFByb21wdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVGV4dEVkaXRvci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVGFyZ2V0Q3Jhc2hlZFNjcmVlbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvVGFiYmVkUGFuZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvU3ludGF4SGlnaGxpZ2h0ZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1N1Z2dlc3RCb3guanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1NwbGl0V2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9Tb2Z0RHJvcERvd24uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1NvZnRDb250ZXh0TWVudS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvU2hvcnRjdXRzU2NyZWVuLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9TaG9ydGN1dFJlZ2lzdHJ5LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9TZXR0aW5nc1VJLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9TZWdtZW50ZWRCdXR0b24uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1NlYXJjaGFibGVWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9Sb290Vmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvUmVzaXplcldpZGdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvUmVwb3J0Vmlldy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvUmVtb3RlRGVidWdnaW5nVGVybWluYXRlZFNjcmVlbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvUHJvZ3Jlc3NJbmRpY2F0b3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1BvcG92ZXJIZWxwZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL1BhbmVsLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9MaXN0V2lkZ2V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9MaXN0TW9kZWwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0xpc3RDb250cm9sLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9LZXlib2FyZFNob3J0Y3V0LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9JbnNwZWN0b3JWaWV3LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9JbnBsYWNlRWRpdG9yLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9JbmZvYmFyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9JY29uLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9IaXN0b3J5SW5wdXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0dsYXNzUGFuZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvR2VvbWV0cnkuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0ZyYWdtZW50LmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS91aS9Gb3J3YXJkZWRJbnB1dEV2ZW50SGFuZGxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvRmlsdGVyU3VnZ2VzdGlvbkJ1aWxkZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0ZpbHRlckJhci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvRW1wdHlXaWRnZXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0Ryb3BUYXJnZXQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0RpYWxvZy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvQ29udGV4dE1lbnUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0NvbnRleHQuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0FSSUFVdGlscy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvQWN0aW9uUmVnaXN0cnkuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0FjdGlvbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdWkvQWN0aW9uRGVsZWdhdGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3VpL0NvbnRleHRGbGF2b3JMaXN0ZW5lci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL2NvbW1vbi5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL2NvbW1vbi1sZWdhY3kuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9BcHAuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9BcHBQcm92aWRlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL0NoYXJhY3RlcklkTWFwLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21tb24vQ29sb3IuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9Db250ZW50UHJvdmlkZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9FdmVudFRhcmdldC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL0phdmFTY3JpcHRNZXRhRGF0YS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL0xpbmtpZmllci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL09iamVjdC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL0NvbnNvbGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9QYXJzZWRVUkwuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9Qcm9ncmVzcy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL1F1ZXJ5UGFyYW1IYW5kbGVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21tb24vUmVzb3VyY2VUeXBlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21tb24vUmV2ZWFsZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9SdW5uYWJsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL1NlZ21lbnRlZFJhbmdlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb21tb24vU2V0dGluZ3MuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9TdGF0aWNDb250ZW50UHJvdmlkZXIuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9TdHJpbmdPdXRwdXRTdHJlYW0uanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9UZXh0RGljdGlvbmFyeS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL1Rocm90dGxlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL1RyaWUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2NvbW1vbi9VSVN0cmluZy5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29tbW9uL1dvcmtlci5qcyIsCi0gICAgXSwKLQotICAgICdnZW5lcmF0ZWRfYXBwbGljYXRpb25zJzogWwotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzX3dvcmtlci5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGV2dG9vbHNfYXBwLmh0bWwiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2RldnRvb2xzX2FwcC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5zcGVjdG9yLmh0bWwiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2luc3BlY3Rvci5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9qc19hcHAuaHRtbCIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9qc19hcHAuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvbm9kZV9hcHAuaHRtbCIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9ub2RlX2FwcC5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2hlbGwuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvdG9vbGJveC5odG1sIiwKLSAgICAgICMgIjwocmVzb3VyY2VzX291dF9kaXIpL3Rvb2xib3guanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3dvcmtlcl9hcHAuaHRtbCIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd29ya2VyX2FwcC5qcyIsCi0gICAgXSwKLQotICAgICdnZW5lcmF0ZWRfbm9uX2F1dG9zdGFydF9ub25fcmVtb3RlX21vZHVsZXMnOiBbCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hbmltYXRpb24vYW5pbWF0aW9uX21vZHVsZS5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9hdWRpdHMvYXVkaXRzX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYnJvd3Nlcl9kZWJ1Z2dlci9icm93c2VyX2RlYnVnZ2VyX21vZHVsZS5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9jaGFuZ2VzL2NoYW5nZXNfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9wcm90b2NvbF9tb25pdG9yL3Byb3RvY29sX21vbml0b3JfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jc3Nfb3ZlcnZpZXcvY3NzX292ZXJ2aWV3X21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY20vY21fbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jbV93ZWJfbW9kZXMvY21fd2ViX21vZGVzX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY21fbW9kZXMvY21fbW9kZXNfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jb2xvcl9waWNrZXIvY29sb3JfcGlja2VyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZS9jb25zb2xlX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29va2llX3RhYmxlL2Nvb2tpZV90YWJsZV9tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvY292ZXJhZ2UvY292ZXJhZ2VfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9kYXRhX2dyaWQvZGF0YV9ncmlkX21vZHVsZS5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9kZXZpY2VzL2RldmljZXNfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9kaWZmL2RpZmZfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9lbGVtZW50cy9lbGVtZW50c19tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2V2ZW50X2xpc3RlbmVycy9ldmVudF9saXN0ZW5lcnNfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9mb3JtYXR0ZXIvZm9ybWF0dGVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGFyX2ltcG9ydGVyL2hhcl9pbXBvcnRlcl9tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGVhcF9zbmFwc2hvdF9tb2RlbC9oZWFwX3NuYXBzaG90X21vZGVsX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaGVscC9oZWxwX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvaW5saW5lX2VkaXRvci9pbmxpbmVfZWRpdG9yX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvamF2YXNjcmlwdF9tZXRhZGF0YS9qYXZhc2NyaXB0X21ldGFkYXRhX21vZHVsZS5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9qc19wcm9maWxlci9qc19wcm9maWxlcl9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2xheWVyX3ZpZXdlci9sYXllcl92aWV3ZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcnMvbGF5ZXJzX21vZHVsZS5qcyIsCi0gICAgICAjICI8KHJlc291cmNlc19vdXRfZGlyKS9tZWRpYS9tZWRpYV9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL25ldHdvcmsvbmV0d29ya19tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvbm9kZV9kZWJ1Z2dlci9ub2RlX2RlYnVnZ2VyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvb2JqZWN0X3VpL29iamVjdF91aV9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3BlcmZfdWkvcGVyZl91aV9tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2RpcikvcGVyZm9ybWFuY2VfbW9uaXRvci9wZXJmb3JtYW5jZV9tb25pdG9yX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvcHJvZmlsZXIvcHJvZmlsZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9xdWlja19vcGVuL3F1aWNrX29wZW5fbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9yZXNvdXJjZXMvcmVzb3VyY2VzX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VhcmNoL3NlYXJjaF9tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VjdXJpdHkvc2VjdXJpdHlfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZXR0aW5ncy9zZXR0aW5nc19tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NuaXBwZXRzL3NuaXBwZXRzX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc291cmNlX2ZyYW1lL3NvdXJjZV9mcmFtZV9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3NvdXJjZXMvc291cmNlc19tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3RleHRfZWRpdG9yL3RleHRfZWRpdG9yX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvdGltZWxpbmVfbW9kZWwvdGltZWxpbmVfbW9kZWxfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS90aW1lbGluZS90aW1lbGluZV9tb2R1bGUuanMiLAotICAgICAgIyAiPChyZXNvdXJjZXNfb3V0X2Rpcikvd2ViX2F1ZGlvL3dlYl9hdWRpb19tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL3dvcmtzcGFjZV9kaWZmL3dvcmtzcGFjZV9kaWZmX21vZHVsZS5qcyIsCi0gICAgXSwKLQotICAgICdnZW5lcmF0ZWRfcmVtb3RlX21vZHVsZXMnOiBbCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYWNjZXNzaWJpbGl0eS9hY2Nlc3NpYmlsaXR5X21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzX3dvcmtlci9hdWRpdHNfd29ya2VyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGFncmVfbGF5b3V0L2RhZ3JlX2xheW91dF9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2VtdWxhdGVkX2RldmljZXMvZW11bGF0ZWRfZGV2aWNlc19tb2R1bGUuanMiLAotICAgIF0sCi0KLSAgICAnZ2VuZXJhdGVkX3Rlc3RfbW9kdWxlcyc6IFsKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5X3Rlc3RfcnVubmVyL2FjY2Vzc2liaWxpdHlfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lci9hcHBsaWNhdGlvbl90ZXN0X3J1bm5lcl9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2F1ZGl0c190ZXN0X3J1bm5lci9hdWRpdHNfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9heGVfY29yZV90ZXN0X3J1bm5lci9heGVfY29yZV90ZXN0X3J1bm5lcl9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2JpbmRpbmdzX3Rlc3RfcnVubmVyL2JpbmRpbmdzX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY29uc29sZV90ZXN0X3J1bm5lci9jb25zb2xlX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvY292ZXJhZ2VfdGVzdF9ydW5uZXIvY292ZXJhZ2VfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9jcHVfcHJvZmlsZXJfdGVzdF9ydW5uZXIvY3B1X3Byb2ZpbGVyX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZGF0YV9ncmlkX3Rlc3RfcnVubmVyL2RhdGFfZ3JpZF90ZXN0X3J1bm5lcl9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2RldmljZV9tb2RlX3Rlc3RfcnVubmVyL2RldmljZV9tb2RlX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvZWxlbWVudHNfdGVzdF9ydW5uZXIvZWxlbWVudHNfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9leHRlbnNpb25zX3Rlc3RfcnVubmVyL2V4dGVuc2lvbnNfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3Byb2ZpbGVyX3Rlc3RfcnVubmVyL2hlYXBfcHJvZmlsZXJfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3NuYXBzaG90X3dvcmtlci9oZWFwX3NuYXBzaG90X3dvcmtlcl9tb2R1bGUuanMiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2ludGVncmF0aW9uX3Rlc3RfcnVubmVyLmh0bWwiLAotICAgICAgIjwocmVzb3VyY2VzX291dF9kaXIpL2ludGVncmF0aW9uX3Rlc3RfcnVubmVyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9sYXllcnNfdGVzdF9ydW5uZXIvbGF5ZXJzX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvbmV0d29ya190ZXN0X3J1bm5lci9uZXR3b3JrX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2RpcikvcGVyZm9ybWFuY2VfdGVzdF9ydW5uZXIvcGVyZm9ybWFuY2VfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zZGtfdGVzdF9ydW5uZXIvc2RrX3Rlc3RfcnVubmVyX21vZHVsZS5qcyIsCi0gICAgICAiPChyZXNvdXJjZXNfb3V0X2Rpcikvc2VjdXJpdHlfdGVzdF9ydW5uZXIvc2VjdXJpdHlfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9zb3VyY2VzX3Rlc3RfcnVubmVyL3NvdXJjZXNfdGVzdF9ydW5uZXJfbW9kdWxlLmpzIiwKLSAgICBdLAotCi0gICAgJ2dlbmVyYXRlZF93b3JrZXJfYnVuZGxlcyc6IFsKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9mb3JtYXR0ZXJfd29ya2VyLmpzIiwKLSAgICAgICI8KHJlc291cmNlc19vdXRfZGlyKS9oZWFwX3NuYXBzaG90X3dvcmtlci5qcyIsCi0gICAgXSwKLQotICAgICdkZXZ0b29sc19hcHBsaWNhdGlvbnMnOiBbCi0gICAgICAjICJhdWRpdHNfd29ya2VyIiwKLSAgICAgICJkZXZ0b29sc19hcHAiLAotICAgICAgImZvcm1hdHRlcl93b3JrZXIiLAotICAgICAgImhlYXBfc25hcHNob3Rfd29ya2VyIiwKLSAgICAgICJpbnNwZWN0b3IiLAotICAgICAgIyAiaW50ZWdyYXRpb25fdGVzdF9ydW5uZXIiLAotICAgICAgIyAianNfYXBwIiwKLSAgICAgICMgIm5kYl9hcHAiLAotICAgICAgIyAibm9kZV9hcHAiLAotICAgICAgInNoZWxsIiwKLSAgICAgICMgInRvb2xib3giLAotICAgICAgIndvcmtlcl9hcHAiLAotICAgIF0sCi0gIH0sCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICMgVGhpcyBpcyB0aGUgbWFpbiByb2xsLXVwIHRhcmdldCB0byBnZW5lcmF0ZSB0aGUgZGV2dG9vbHMgZnJvbnRlbmQgZmlsZXMKLSAgICAgICMgdGhhdCBnbyBpbnRvIHRoZSBjb250ZW50IGRpcmVjdG9yeS4KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkZXZ0b29scycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICMgJ2FyaWFfcHJvcGVydGllcycsCi0gICAgICAgICdidWlsZF9yZWxlYXNlX2RldnRvb2xzJywKLSAgICAgICAgIyAnY29weV9lbWJlZGRlcl9zY3JpcHRzJywKLSAgICAgICAgIyAnY29weV9lbXVsYXRlZF9kZXZpY2VzX2ltYWdlcycsCi0gICAgICAgICMgJ2NvcHlfaHRhY2Nlc3MnLAotICAgICAgICAnY29weV9pbnNwZWN0b3JfaW1hZ2VzJywKLSAgICAgICAgIyAnY29weV9saWdodGhvdXNlX2xvY2FsZV9maWxlcycsCi0gICAgICAgICMgJ2NvcHlfd2FzbV9kZXBzJywKLSAgICAgICAgIyAnZGV2dG9vbHNfZXh0ZW5zaW9uX2FwaScsCi0gICAgICAgICdmcm9udGVuZF9wcm90b2NvbF9zb3VyY2VzJywKLSAgICAgICAgJ3N1cHBvcnRlZF9jc3NfcHJvcGVydGllcycsCi0gICAgICAgICdjb3B5X2RldnRvb2xzX21vZHVsZXMnLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgIyBUaGlzIGlzIGFuIGFsdGVybmF0ZSByb2xsLXVwIHRhcmdldCB0byBnZW5lcmF0ZSB0aGUgZGV2dG9vbHMgZnJvbnRlbmQKLSAgICAgICMgZmlsZXMsIGluY2x1ZGluZyB0aGUgdW5jb21waWxlZCB2ZXJzaW9uIGZvciBkZWJ1Z2dpbmcgZGV2dG9vbHMgaXRzZWxmLgotICAgICAgJ3RhcmdldF9uYW1lJzogJ2RlYnVnX2RldnRvb2xzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2RldnRvb2xzJywKLSAgICAgICAgJ2J1aWxkX2RlYnVnX2RldnRvb2xzJywKLSAgICAgICAgIyAnY29weV9hcmlhX3Byb3BlcnRpZXMnLAotICAgICAgICAnY29weV9nZW5lcmF0ZWRfc2NyaXB0cycsCi0gICAgICBdLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9lbWJlZGRlcl9zY3JpcHRzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvcGllcyc6IFt7Ci0gICAgICAgICdmaWxlcyc6IFsgJzxAKGRldnRvb2xzX2VtYmVkZGVyX3NjcmlwdHMpJyBdLAotICAgICAgICAnZGVzdGluYXRpb24nOiAnPChyZXNvdXJjZXNfb3V0X2RpciknLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICMgVE9ETzogUmVuYW1lIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHRvICcuaHRhY2Nlc3MnCi0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9odGFjY2VzcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAnZmlsZXMnOiBbICdodGFjY2VzcycgXSwKLSAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwocmVzb3VyY2VzX291dF9kaXIpJywKLSAgICAgIH1dLAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9pbnNwZWN0b3JfaW1hZ2VzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvcGllcyc6IFt7Ci0gICAgICAgICdmaWxlcyc6IFsgJzxAKGRldnRvb2xzX2ltYWdlX2ZpbGVzKScgXSwKLSAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwocmVzb3VyY2VzX291dF9kaXIpL0ltYWdlcycsCi0gICAgICB9XSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvcHlfZW11bGF0ZWRfZGV2aWNlc19pbWFnZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29waWVzJzogW3sKLSAgICAgICAgJ2ZpbGVzJzogWyAnPEAoZGV2dG9vbHNfZW11bGF0ZWRfZGV2aWNlc19pbWFnZXMpJyBdLAotICAgICAgICAnZGVzdGluYXRpb24nOiAnPChyZXNvdXJjZXNfb3V0X2RpcikvZW11bGF0ZWRfZGV2aWNlcycsCi0gICAgICB9XSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NvcHlfbGlnaHRob3VzZV9sb2NhbGVfZmlsZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29waWVzJzogW3sKLSAgICAgICAgJ2ZpbGVzJzogWyAnPEAobGlnaHRob3VzZV9sb2NhbGVfZmlsZXMpJyBdLAotICAgICAgICAnZGVzdGluYXRpb24nOiAnPChyZXNvdXJjZXNfb3V0X2RpcikvYXVkaXRzX3dvcmtlci9saWdodGhvdXNlL2xvY2FsZXMnLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X3dhc21fZGVwcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAnZmlsZXMnOiBbICdmcm9udF9lbmQvc2RrL3dhc21fc291cmNlX21hcC9wa2cvd2FzbV9zb3VyY2VfbWFwX2JnLndhc20nIF0sCi0gICAgICAgICdkZXN0aW5hdGlvbic6ICc8KHJlc291cmNlc19vdXRfZGlyKS9zZGsvd2FzbV9zb3VyY2VfbWFwL3BrZycsCi0gICAgICB9XSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdkZXZ0b29sc19leHRlbnNpb25fYXBpJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2FjdGlvbnMnOiBbewotICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfZGV2dG9vbHNfZXh0ZW5zaW9uX2FwaScsCi0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ3NjcmlwdF9wYXRoJzogJ3NjcmlwdHMvYnVpbGQvZ2VuZXJhdGVfZGV2dG9vbHNfZXh0ZW5zaW9uX2FwaS5weScsCi0gICAgICAgICAgJ2lucHV0X2ZpbGVzJzogWyAnZnJvbnRfZW5kL2V4dGVuc2lvbnMvRXh0ZW5zaW9uQVBJLmpzJyBdLAotICAgICAgICAgICdvdXRwdXRfZmlsZSc6ICc8KHJlc291cmNlc19vdXRfZGlyKS9kZXZ0b29sc19leHRlbnNpb25fYXBpLmpzJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2lucHV0cyc6IFsgJzwoc2NyaXB0X3BhdGgpJywgJzxAKGlucHV0X2ZpbGVzKScgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbICc8KG91dHB1dF9maWxlKScgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAnPChvdXRwdXRfZmlsZSknLAotICAgICAgICAgICc8QChpbnB1dF9maWxlcyknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzdXBwb3J0ZWRfY3NzX3Byb3BlcnRpZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnYWN0aW9ucyc6IFt7Ci0gICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZV9zdXBwb3J0ZWRfY3NzJywKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnc2NyaXB0X3BhdGgnOiAnc2NyaXB0cy9idWlsZC9nZW5lcmF0ZV9zdXBwb3J0ZWRfY3NzLnB5JywKLSAgICAgICAgICAnaW5wdXRfZmlsZXMnOiBbICdibGluay9wcm9wZXJ0aWVzL0NTU1Byb3BlcnRpZXMuanNvbjUnIF0sCi0gICAgICAgICAgJ291dHB1dF9maWxlJzogJzwocmVzb3VyY2VzX291dF9kaXIpL1N1cHBvcnRlZENTU1Byb3BlcnRpZXMuanMnLAotICAgICAgICB9LAotICAgICAgICAnaW5wdXRzJzogWyAnPChzY3JpcHRfcGF0aCknLCAnPEAoaW5wdXRfZmlsZXMpJyBdLAotICAgICAgICAnb3V0cHV0cyc6IFsgJzwob3V0cHV0X2ZpbGUpJyBdLAotICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAnPChzY3JpcHRfcGF0aCknLAotICAgICAgICAgICc8QChpbnB1dF9maWxlcyknLAotICAgICAgICAgICc8KG91dHB1dF9maWxlKScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2FyaWFfcHJvcGVydGllcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdhY3Rpb25zJzogW3sKLSAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlX2FyaWEnLAotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdzY3JpcHRfcGF0aCc6ICdzY3JpcHRzL2J1aWxkL2dlbmVyYXRlX2FyaWEucHknLAotICAgICAgICAgICdpbnB1dF9maWxlcyc6IFsgJ2JsaW5rL3Byb3BlcnRpZXMvYXJpYV9wcm9wZXJ0aWVzLmpzb241JyBdLAotICAgICAgICAgICdvdXRwdXRfZmlsZSc6ICc8KHJlc291cmNlc19vdXRfZGlyKS9hY2Nlc3NpYmlsaXR5L0FSSUFQcm9wZXJ0aWVzLmpzJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2lucHV0cyc6IFsgJzwoc2NyaXB0X3BhdGgpJywgJzxAKGlucHV0X2ZpbGVzKScgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbICc8KG91dHB1dF9maWxlKScgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAnPEAoaW5wdXRfZmlsZXMpJywKLSAgICAgICAgICAnPChvdXRwdXRfZmlsZSknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdmcm9udGVuZF9wcm90b2NvbF9zb3VyY2VzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2JsaW5rL2RldnRvb2xzX3Byb3RvY29sL2RldnRvb2xzX3Byb3RvY29sLmd5cDpwcm90b2NvbF92ZXJzaW9uJwotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogW3sKLSAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NvZGVfZ2VuZXJhdG9yX2Zyb250ZW5kJywKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnc2NyaXB0X3BhdGgnOiAnc2NyaXB0cy9idWlsZC9jb2RlX2dlbmVyYXRvcl9mcm9udGVuZC5weScsCi0gICAgICAgICAgJ2lucHV0X2ZpbGVzJzogWyAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvdGhpcmRfcGFydHkvZGV2dG9vbHMvYmxpbmsvZGV2dG9vbHNfcHJvdG9jb2wvcHJvdG9jb2wuanNvbicgXSwKLSAgICAgICAgICAnb3V0cHV0X2ZpbGUnOiAnPChyZXNvdXJjZXNfb3V0X2RpcikvSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2lucHV0cyc6IFsgJzwoc2NyaXB0X3BhdGgpJywgJzxAKGlucHV0X2ZpbGVzKScgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbICc8KG91dHB1dF9maWxlKScgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAnPEAoaW5wdXRfZmlsZXMpJywKLSAgICAgICAgICAnLS1vdXRwdXRfanNfZGlyJywKLSAgICAgICAgICAnPChyZXNvdXJjZXNfb3V0X2RpciknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdidWlsZF9yZWxlYXNlX2RldnRvb2xzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgIyAnYXJpYV9wcm9wZXJ0aWVzJywKLSAgICAgICAgJ2Zyb250ZW5kX3Byb3RvY29sX3NvdXJjZXMnLAotICAgICAgICAnc3VwcG9ydGVkX2Nzc19wcm9wZXJ0aWVzJywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFt7Ci0gICAgICAgICdhY3Rpb25fbmFtZSc6ICdidWlsZF9yZWxlYXNlX2RldnRvb2xfYXBwbGljYXRpb25zJywKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnc2NyaXB0X3BhdGgnOiAnc2NyaXB0cy9idWlsZC9idWlsZF9yZWxlYXNlX2FwcGxpY2F0aW9ucy5weScsCi0gICAgICAgICAgJ2hlbHBlcl9zY3JpcHRfcGF0aHMnOiBbCi0gICAgICAgICAgICAnc2NyaXB0cy9idWlsZC9tb2R1bGFyX2J1aWxkLnB5JywKLSAgICAgICAgICAgICdzY3JpcHRzL2J1aWxkL3Jqc21pbi5weScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5wdXRfcGF0aCc6ICdmcm9udF9lbmQnLAotICAgICAgICB9LAotICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICc8KHNjcmlwdF9wYXRoKScsCi0gICAgICAgICAgJzxAKGhlbHBlcl9zY3JpcHRfcGF0aHMpJywKLSAgICAgICAgICAnPEAoYWxsX2RldnRvb2xzX2ZpbGVzKScsCi0gICAgICAgICAgJzxAKGRldnRvb2xzX3Rlc3RfZmlsZXMpJywKLSAgICAgICAgICAnPEAoZ2VuZXJhdGVkX3NjcmlwdHMpJywKLSAgICAgICAgICAjICc8QChnZW5lcmF0ZWRfYXJpYV9wcm9wZXJ0aWVzKScsCi0gICAgICAgICAgJzxAKGFwcGxpY2F0aW9uX3RlbXBsYXRlcyknLAotICAgICAgICAgICMgSW4gYGJ1aWxkX3JlbGVhc2VfYXBwbGljYXRpb25zYCB3ZSBzb21ldGltZXMgaW5jbHVkZQotICAgICAgICAgICMgdGhlIGNvbnRlbnQgb2YgUnVudGltZS5qcyBpbnRvIHRoZSBidWlsZCBvdXRwdXQuCi0gICAgICAgICAgJ2Zyb250X2VuZC9SdW50aW1lLmpzJywKLSAgICAgICAgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgJzxAKGdlbmVyYXRlZF9hcHBsaWNhdGlvbnMpJywKLSAgICAgICAgICAnPEAoZ2VuZXJhdGVkX25vbl9hdXRvc3RhcnRfbm9uX3JlbW90ZV9tb2R1bGVzKScsCi0gICAgICAgICAgIyAnPEAoZ2VuZXJhdGVkX3JlbW90ZV9tb2R1bGVzKScsCi0gICAgICAgICAgIyAnPEAoZ2VuZXJhdGVkX3Rlc3RfbW9kdWxlcyknLAotICAgICAgICAgICc8QChnZW5lcmF0ZWRfd29ya2VyX2J1bmRsZXMpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgJzwoc2NyaXB0X3BhdGgpJywKLSAgICAgICAgICAnPEAoZGV2dG9vbHNfYXBwbGljYXRpb25zKScsCi0gICAgICAgICAgJy0taW5wdXRfcGF0aCcsCi0gICAgICAgICAgJzwoaW5wdXRfcGF0aCknLAotICAgICAgICAgICctLW91dHB1dF9wYXRoJywKLSAgICAgICAgICAnPChyZXNvdXJjZXNfb3V0X2RpciknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9kZXZ0b29sc19tb2R1bGVzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgImJ1aWxkX3JlbGVhc2VfZGV2dG9vbHMiCi0gICAgICBdLAotICAgICAgJ2FjdGlvbnMnOiBbewotICAgICAgICAnYWN0aW9uX25hbWUnOiAnY29weV9kZXZ0b29sc19tb2R1bGVzJywKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnc2NyaXB0X3BhdGgnOiAnc2NyaXB0cy9idWlsZC9jb3B5X2RldnRvb2xzX21vZHVsZXMucHknLAotICAgICAgICAgICdpbnB1dF9wYXRoJzogJy4nLAotICAgICAgICAgICMgVE9ETzogVGhlIHJzcCBmaWxlIHNob3VsZCBiZSBpbiA8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKSwgYnV0IGl0J3Mgbm90IHJlc29sdmVkIGZvciBweW1vZF9kb19tYWluLgotICAgICAgICAgICdyc3BfZmlsZSc6ICdjb3B5X2RldnRvb2xzX21vZHVsZXMucnNwJywKLSAgICAgICAgfSwKLSAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAnPChzY3JpcHRfcGF0aCknLAotICAgICAgICAgICc8QChhbGxfZGV2dG9vbHNfbW9kdWxlcyknLAotICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LmRldnRvb2xzLnNjcmlwdHMuYnVpbGQuY29weV9kZXZ0b29sc19tb2R1bGVzIC0tZ2VuX3JzcCA8KHJzcF9maWxlKSA8QChhbGxfZGV2dG9vbHNfbW9kdWxlcykpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgJzxAKGNvcGllZF9kZXZ0b29sc19tb2R1bGVzKScsCi0gICAgICAgIF0sCi0gICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICc8KHNjcmlwdF9wYXRoKScsCi0gICAgICAgICAgJy0tcnNwJywKLSAgICAgICAgICAnPChyc3BfZmlsZSknLAotICAgICAgICAgICctLWlucHV0X3BhdGgnLAotICAgICAgICAgICc8KGlucHV0X3BhdGgpJywKLSAgICAgICAgICAnLS1vdXRwdXRfcGF0aCcsCi0gICAgICAgICAgJzwocmVzb3VyY2VzX291dF9kaXIpJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2J1aWxkX2RlYnVnX2RldnRvb2xzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2FjdGlvbnMnOiBbewotICAgICAgICAnYWN0aW9uX25hbWUnOiAnYnVpbGRfZGVidWdfZGV2dG9vbHNfYXBwbGljYXRpb25zJywKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAnc2NyaXB0X3BhdGgnOiAnc2NyaXB0cy9idWlsZC9idWlsZF9kZWJ1Z19hcHBsaWNhdGlvbnMucHknLAotICAgICAgICAgICdpbnB1dF9wYXRoJzogJ2Zyb250X2VuZCcsCi0gICAgICAgICAgJ3N0YW1wX2ZpbGUnOiAnPChyZXNvdXJjZXNfb3V0X2RlYnVnX2RpcikvYnVpbGQuc3RhbXAnLAotICAgICAgICB9LAotICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICc8KHNjcmlwdF9wYXRoKScsCi0gICAgICAgICAgJzxAKGFsbF9kZXZ0b29sc19maWxlcyknLAotICAgICAgICAgICc8QChhcHBsaWNhdGlvbl90ZW1wbGF0ZXMpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgJzwoc3RhbXBfZmlsZSknLAotICAgICAgICBdLAotICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAnPChzY3JpcHRfcGF0aCknLAotICAgICAgICAgICctLWlucHV0X3BhdGgnLAotICAgICAgICAgICc8KGlucHV0X3BhdGgpJywKLSAgICAgICAgICAnLS1vdXRwdXRfcGF0aCcsCi0gICAgICAgICAgJzwocmVzb3VyY2VzX291dF9kZWJ1Z19kaXIpJywKLSAgICAgICAgICAnLS1idWlsZF9zdGFtcCcsCi0gICAgICAgICAgJzwoc3RhbXBfZmlsZSknLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X2dlbmVyYXRlZF9zY3JpcHRzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2J1aWxkX2RlYnVnX2RldnRvb2xzJywKLSAgICAgICAgJ2J1aWxkX3JlbGVhc2VfZGV2dG9vbHMnLAotICAgICAgICAnZnJvbnRlbmRfcHJvdG9jb2xfc291cmNlcycsCi0gICAgICAgICdzdXBwb3J0ZWRfY3NzX3Byb3BlcnRpZXMnLAotICAgICAgXSwKLSAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgJzxAKGdlbmVyYXRlZF9zY3JpcHRzKScsCi0gICAgICAgICAgJzxAKGdlbmVyYXRlZF93b3JrZXJfYnVuZGxlcyknLAotICAgICAgICBdLAotICAgICAgICAnZGVzdGluYXRpb24nOiAnPChyZXNvdXJjZXNfb3V0X2RlYnVnX2RpciknLAotICAgICAgfV0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjb3B5X2FyaWFfcHJvcGVydGllcycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdhcmlhX3Byb3BlcnRpZXMnLAotICAgICAgICAnYnVpbGRfZGVidWdfZGV2dG9vbHMnLAotICAgICAgXSwKLSAgICAgICdjb3BpZXMnOiBbewotICAgICAgICAnZmlsZXMnOiBbICc8QChnZW5lcmF0ZWRfYXJpYV9wcm9wZXJ0aWVzKScgXSwKLSAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwocmVzb3VyY2VzX291dF9kZWJ1Z19kaXIpL2FjY2Vzc2liaWxpdHknLAotICAgICAgfV0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2RldnRvb2xzL2Zyb250X2VuZC9jb2JhbHQvY29iYWx0LmpzIGIvdGhpcmRfcGFydHkvZGV2dG9vbHMvZnJvbnRfZW5kL2NvYmFsdC9jb2JhbHQuanMKaW5kZXggMGM0MDBiNC4uYTA4NWM2MiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvZGV2dG9vbHMvZnJvbnRfZW5kL2NvYmFsdC9jb2JhbHQuanMKKysrIGIvdGhpcmRfcGFydHkvZGV2dG9vbHMvZnJvbnRfZW5kL2NvYmFsdC9jb2JhbHQuanMKQEAgLTUsNiArNSwxMCBAQAogICovCiBleHBvcnQgZGVmYXVsdCBjbGFzcyBDb2JhbHRQYW5lbCBleHRlbmRzIFVJLlZCb3ggewogICAgIGNvbnN0cnVjdG9yKCkgeworICAgICAgICBjb25zdCB0cmFjZV9maWxlcyA9IFsKKyAgICAgICAgICAgIFsnVHJhY2UnLCAnY29uc29sZV90cmFjZS5qc29uJ10sCisgICAgICAgICAgICBbJ1RpbWVkIFRyYWNlJywgJ3RpbWVkX3RyYWNlLmpzb24nXQorICAgICAgICBdOwogICAgICAgICBzdXBlcih0cnVlLCBmYWxzZSk7CiAgICAgICAgIFNESy50YXJnZXRNYW5hZ2VyLm9ic2VydmVUYXJnZXRzKHRoaXMpOwogCkBAIC0xMiwxNCArMTYsMTUgQEAKICAgICAgICAgdGhpcy5fcnVudGltZUFnZW50ID0gdGhpcy5fdGFyZ2V0LnJ1bnRpbWVBZ2VudCgpOwogCiAgICAgICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuX3NoYWRvd1Jvb3QuY3JlYXRlQ2hpbGQoJ2RpdicpOwotICAgICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSAnQ29iYWx0IENvbnNvbGUnCisgICAgICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9ICdDb2JhbHQgQ29uc29sZSc7CiAgICAgICAgIGxldCBkb3dubG9hZF9lbGVtZW50ID0gdGhpcy5fc2hhZG93Um9vdC5jcmVhdGVDaGlsZCgnYScsICdkb3dubG9hZCcpOwogICAgICAgICBkb3dubG9hZF9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAKICAgICAgICAgY29uc3QgdHJhY2VDb250YWluZXIgPSB0aGlzLmVsZW1lbnQuY3JlYXRlQ2hpbGQoJ2RpdicsICd0cmFjZS1jb250YWluZXInKTsKICAgICAgICAgdHJhY2VDb250YWluZXIuYXBwZW5kQ2hpbGQoVUkuY3JlYXRlVGV4dEJ1dHRvbihDb21tb24uVUlTdHJpbmcoJ1N0YXJ0IFRyYWNlJyksIGV2ZW50ID0+IHsKICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTdGFydCBUcmFjZSIpOwotICAgICAgICAgICAgdGhpcy5ydW4oYChmdW5jdGlvbigpIHsgd2luZG93Lmg1dmNjLnRyYWNlRXZlbnQuc3RhcnQoKTt9KSgpYCk7CisgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRyYWNlX2ZpbGVzWzBdWzFdOworICAgICAgICAgICAgdGhpcy5ydW4oYChmdW5jdGlvbigpIHsgd2luZG93Lmg1dmNjLnRyYWNlRXZlbnQuc3RhcnQoJyR7ZmlsZW5hbWV9Jyk7fSkoKWApOwogICAgICAgICAgICAgY29uc29sZS5sb2coIlN0YXJ0ZWQgVHJhY2UiKTsKICAgICAgICAgfSkpOwogICAgICAgICB0cmFjZUNvbnRhaW5lci5hcHBlbmRDaGlsZChVSS5jcmVhdGVUZXh0QnV0dG9uKENvbW1vbi5VSVN0cmluZygnU3RvcCBUcmFjZScpLCBldmVudCA9PiB7CkBAIC0yNywxNyArMzIsMjAgQEAKICAgICAgICAgICAgIHRoaXMucnVuKGAoZnVuY3Rpb24oKSB7IHdpbmRvdy5oNXZjYy50cmFjZUV2ZW50LnN0b3AoKTt9KSgpYCk7CiAgICAgICAgICAgICBjb25zb2xlLmxvZygiU3RvcHBlZCBUcmFjZSIpOwogICAgICAgICB9KSk7Ci0gICAgICAgIHRyYWNlQ29udGFpbmVyLmFwcGVuZENoaWxkKFVJLmNyZWF0ZVRleHRCdXR0b24oQ29tbW9uLlVJU3RyaW5nKCdEb3dubG9hZCBUcmFjZScpLCBldmVudCA9PiB7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZygiRG93bmxvYWQgVHJhY2UiKTsKLSAgICAgICAgICAgIHRoaXMucnVuKGAoZnVuY3Rpb24oKSB7IHJldHVybiB3aW5kb3cuaDV2Y2MudHJhY2VFdmVudC5yZWFkKCk7fSkoKWApLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGRvd25sb2FkX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCcgKwotICAgICAgICAgICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQocmVzdWx0LnJlc3VsdC52YWx1ZSkpOwotICAgICAgICAgICAgICAgIGRvd25sb2FkX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICd0cmFjZS5qc29uJyk7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkRvd25sb2FkZWQgVHJhY2UiKTsKLSAgICAgICAgICAgICAgICBkb3dubG9hZF9lbGVtZW50LmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAgZG93bmxvYWRfZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1bmRlZmluZWQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pKTsKKyAgICAgICAgdHJhY2VfZmlsZXMuZm9yRWFjaCggKGZpbGUpID0+IHsKKyAgICAgICAgICAgIHRyYWNlQ29udGFpbmVyLmFwcGVuZENoaWxkKFVJLmNyZWF0ZVRleHRCdXR0b24oQ29tbW9uLlVJU3RyaW5nKCdEb3dubG9hZCAnICsgZmlsZVswXSksIGV2ZW50ID0+IHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiRG93bmxvYWQgVHJhY2UiKTsKKyAgICAgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGVbMV07CisgICAgICAgICAgICAgICAgdGhpcy5ydW4oYChmdW5jdGlvbigpIHsgcmV0dXJuIHdpbmRvdy5oNXZjYy50cmFjZUV2ZW50LnJlYWQoJyR7ZmlsZW5hbWV9Jyk7fSkoKWApLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBkb3dubG9hZF9lbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwnICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChyZXN1bHQucmVzdWx0LnZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkRvd25sb2FkZWQgVHJhY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRfZWxlbWVudC5jbGljaygpOworICAgICAgICAgICAgICAgICAgICBkb3dubG9hZF9lbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIGFzeW5jIHJ1bihleHByZXNzaW9uKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9kZXZ0b29scy9zY3JpcHRzL2J1aWxkL2J1aWxkX3JlbGVhc2VfYXBwbGljYXRpb25zLnB5IGIvdGhpcmRfcGFydHkvZGV2dG9vbHMvc2NyaXB0cy9idWlsZC9idWlsZF9yZWxlYXNlX2FwcGxpY2F0aW9ucy5weQppbmRleCBkY2M4MzliLi5lNjAzNzA4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9kZXZ0b29scy9zY3JpcHRzL2J1aWxkL2J1aWxkX3JlbGVhc2VfYXBwbGljYXRpb25zLnB5CisrKyBiL3RoaXJkX3BhcnR5L2RldnRvb2xzL3NjcmlwdHMvYnVpbGQvYnVpbGRfcmVsZWFzZV9hcHBsaWNhdGlvbnMucHkKQEAgLTExLDcgKzExLDcgQEAKIC3CoEJ1aWxkc8KgYXBwLmh0bWzCoHJlZmVyZW5jaW5nwqB0aGXCoGFwcGxpY2F0aW9uwqBzY3JpcHQuCiAiIiIKIAotZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogZnJvbSBvcyBpbXBvcnQgcGF0aAogZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCiBpbXBvcnQgY29weQpAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgICAgICAgICByZXNvdXJjZV9uYW1lID0gcGF0aC5ub3JtcGF0aChyZXNvdXJjZV9uYW1lKS5yZXBsYWNlKCdcXCcsICcvJykKICAgICAgICAgICAgIG91dHB1dC53cml0ZSgnUm9vdC5SdW50aW1lLmNhY2hlZFJlc291cmNlc1siJXMiXSA9ICInICUgcmVzb3VyY2VfbmFtZSkKICAgICAgICAgICAgIHJlc291cmNlX2NvbnRlbnQgPSByZWFkX2ZpbGUocGF0aC5qb2luKHNlbGYuYXBwbGljYXRpb25fZGlyLCByZXNvdXJjZV9uYW1lKSkKLSAgICAgICAgICAgIHJlc291cmNlX2NvbnRlbnQgKz0gcmVzb3VyY2Vfc291cmNlX3VybChyZXNvdXJjZV9uYW1lKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIHJlc291cmNlX2NvbnRlbnQgKz0gcmVzb3VyY2Vfc291cmNlX3VybChyZXNvdXJjZV9uYW1lKQogICAgICAgICAgICAgcmVzb3VyY2VfY29udGVudCA9IHJlc291cmNlX2NvbnRlbnQucmVwbGFjZSgnXFwnLCAnXFxcXCcpCiAgICAgICAgICAgICByZXNvdXJjZV9jb250ZW50ID0gcmVzb3VyY2VfY29udGVudC5yZXBsYWNlKCdcbicsICdcXG4nKQogICAgICAgICAgICAgcmVzb3VyY2VfY29udGVudCA9IHJlc291cmNlX2NvbnRlbnQucmVwbGFjZSgnIicsICdcXCInKQpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgICAgICBvdXRwdXQud3JpdGUoJy8qIEFkZGl0aW9uYWwgZGVzY3JpcHRvcnMgKi9cbicpCiAgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ1Jvb3QuYWxsRGVzY3JpcHRvcnMucHVzaCguLi4lcyk7JyAlIHNlbGYuX3JlbGVhc2VfbW9kdWxlX2Rlc2NyaXB0b3JzKCkpCiAgICAgICAgICAgICBvdXRwdXQud3JpdGUoJy8qIEFkZGl0aW9uYWwgZGVzY3JpcHRvcnMgJXMgKi9cbicgJSBzZWxmLmFwcF9maWxlKCdqc29uJykpCi0gICAgICAgICAgICBvdXRwdXQud3JpdGUoJ1Jvb3QuYXBwbGljYXRpb25EZXNjcmlwdG9yLm1vZHVsZXMucHVzaCguLi4lcyk7JyAlIGpzb24uZHVtcHMoc2VsZi5kZXNjcmlwdG9ycy5hcHBsaWNhdGlvbi52YWx1ZXMoKSkpCisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ1Jvb3QuYXBwbGljYXRpb25EZXNjcmlwdG9yLm1vZHVsZXMucHVzaCguLi4lcyk7JyAlIGpzb24uZHVtcHMobGlzdChzZWxmLmRlc2NyaXB0b3JzLmFwcGxpY2F0aW9uLnZhbHVlcygpKSkpCiAKICAgICAgICAgb3V0cHV0LndyaXRlKCdcbi8qIEF1dG9zdGFydCBtb2R1bGVzICovXG4nKQogICAgICAgICBpZiAoc2VsZi5kZXNjcmlwdG9ycy53b3JrZXIpOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvZGV2dG9vbHMvc2NyaXB0cy9idWlsZC9tb2R1bGFyX2J1aWxkLnB5IGIvdGhpcmRfcGFydHkvZGV2dG9vbHMvc2NyaXB0cy9idWlsZC9tb2R1bGFyX2J1aWxkLnB5CmluZGV4IGRkMDFkOGYuLjk2NzFmYTIgMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L2RldnRvb2xzL3NjcmlwdHMvYnVpbGQvbW9kdWxhcl9idWlsZC5weQorKysgYi90aGlyZF9wYXJ0eS9kZXZ0b29scy9zY3JpcHRzL2J1aWxkL21vZHVsYXJfYnVpbGQucHkKQEAgLTI0LDcgKzI0LDcgQEAKIGltcG9ydCBqc29uNSBhcyBqc29uICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogCiBkZWYgcmVhZF9maWxlKGZpbGVuYW1lKToKLSAgICB3aXRoIG9wZW4ocGF0aC5ub3JtcGF0aChmaWxlbmFtZSksICdydCcpIGFzIGlucHV0OgorICAgIHdpdGggb3BlbihwYXRoLm5vcm1wYXRoKGZpbGVuYW1lKSwgJ3J0JywgZW5jb2Rpbmc9InV0Zi04IikgYXMgaW5wdXQ6CiAgICAgICAgIHJldHVybiBpbnB1dC5yZWFkKCkKIAogCkBAIC0zNCw3ICszNCw3IEBACiAgICAgZGlyZWN0b3J5ID0gcGF0aC5kaXJuYW1lKGZpbGVuYW1lKQogICAgIGlmIG5vdCBwYXRoLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgICAgICBvcy5tYWtlZGlycyhkaXJlY3RvcnkpCi0gICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd3QnKSBhcyBvdXRwdXQ6CisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd3QnLCBlbmNvZGluZz0idXRmLTgiKSBhcyBvdXRwdXQ6CiAgICAgICAgIG91dHB1dC53cml0ZShjb250ZW50KQogCiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlYWRfZmlsZShmaWxlbmFtZSkpCiAgICAgZXhjZXB0OgotICAgICAgICBwcmludCAnRVJST1I6IEZhaWxlZCB0byBwYXJzZSAlcycgJSBmaWxlbmFtZQorICAgICAgICBwcmludCgnRVJST1I6IEZhaWxlZCB0byBwYXJzZSB7fScuZm9ybWF0KGZpbGVuYW1lKSkKICAgICAgICAgcmFpc2UKIAogCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICBkZWYgYXBwbGljYXRpb25fanNvbihzZWxmKToKICAgICAgICAgcmVzdWx0ID0gZGljdCgpCi0gICAgICAgIHJlc3VsdFsnbW9kdWxlcyddID0gc2VsZi5hcHBsaWNhdGlvbi52YWx1ZXMoKQorICAgICAgICByZXN1bHRbJ21vZHVsZXMnXSA9IGxpc3Qoc2VsZi5hcHBsaWNhdGlvbi52YWx1ZXMoKSkKICAgICAgICAgcmVzdWx0WydoYXNfaHRtbCddID0gc2VsZi5oYXNfaHRtbAogICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhyZXN1bHQpCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ZmbXBlZ19pbmNsdWRlcy9mZm1wZWdfaW5jbHVkZXMuZ3lwIGIvdGhpcmRfcGFydHkvZmZtcGVnX2luY2x1ZGVzL2ZmbXBlZ19pbmNsdWRlcy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTQ0N2MuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvZmZtcGVnX2luY2x1ZGVzL2ZmbXBlZ19pbmNsdWRlcy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmF2LjU0LjM1LjEnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJ2xpYmF2LjU0LjM1LjEnIF0sCi0gICAgICB9LAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmF2LjU2LjEuMCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWyAnbGliYXYuNTYuMS4wJyBdLAotICAgICAgfSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdmZm1wZWcuNTcuMTA3LjEwMCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWyAnZmZtcGVnLjU3LjEwNy4xMDAnIF0sCi0gICAgICB9LAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ZmbXBlZy41OC4zNS4xMDAnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJ2ZmbXBlZy41OC4zNS4xMDAnIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mbGFjL2ZsYWMuZ3lwIGIvdGhpcmRfcGFydHkvZmxhYy9mbGFjLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ0ODU0NC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9mbGFjL2ZsYWMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndXNlX3N5c3RlbV9mbGFjJSc6IDAsCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsndXNlX3N5c3RlbV9mbGFjPT0wJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGliZmxhYycsCi0gICAgICAgICAgJ3Byb2R1Y3RfbmFtZSc6ICdmbGFjJywKLSAgICAgICAgICAndHlwZSc6ICc8KGxpYnJhcnkpJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdpbmNsdWRlL0ZMQUMvYWxsLmgnLAotICAgICAgICAgICAgJ2luY2x1ZGUvRkxBQy9hc3NlcnQuaCcsCi0gICAgICAgICAgICAnaW5jbHVkZS9GTEFDL2NhbGxiYWNrLmgnLAotICAgICAgICAgICAgJ2luY2x1ZGUvRkxBQy9leHBvcnQuaCcsCi0gICAgICAgICAgICAnaW5jbHVkZS9GTEFDL2Zvcm1hdC5oJywKLSAgICAgICAgICAgICdpbmNsdWRlL0ZMQUMvbWV0YWRhdGEuaCcsCi0gICAgICAgICAgICAnaW5jbHVkZS9GTEFDL29yZGluYWxzLmgnLAotICAgICAgICAgICAgJ2luY2x1ZGUvRkxBQy9zdHJlYW1fZGVjb2Rlci5oJywKLSAgICAgICAgICAgICdpbmNsdWRlL0ZMQUMvc3RyZWFtX2VuY29kZXIuaCcsCi0gICAgICAgICAgICAnaW5jbHVkZS9zaGFyZS9hbGxvYy5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9hbGxvYy5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9iaXRtYXRoLmMnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL2JpdHJlYWRlci5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9iaXR3cml0ZXIuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvY3B1LmMnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL2NyYy5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9maXhlZC5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9mbG9hdC5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9mb3JtYXQuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvbHBjLmMnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL21kNS5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9tZW1vcnkuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvc3RyZWFtX2RlY29kZXIuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvc3RyZWFtX2VuY29kZXIuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvc3RyZWFtX2VuY29kZXJfZnJhbWluZy5jJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy93aW5kb3cuYycsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL2FsbC5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvYml0bWF0aC5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvYml0cmVhZGVyLmgnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL2luY2x1ZGUvcHJpdmF0ZS9iaXR3cml0ZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL2NwdS5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvY3JjLmgnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL2luY2x1ZGUvcHJpdmF0ZS9maXhlZC5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvZmxvYXQuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL2Zvcm1hdC5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvbHBjLmgnLAotICAgICAgICAgICAgJ3NyYy9saWJGTEFDL2luY2x1ZGUvcHJpdmF0ZS9tZDUuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL21lbW9yeS5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3ByaXZhdGUvbWV0YWRhdGEuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL3N0cmVhbV9lbmNvZGVyX2ZyYW1pbmcuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcml2YXRlL3dpbmRvdy5oJywKLSAgICAgICAgICAgICdzcmMvbGliRkxBQy9pbmNsdWRlL3Byb3RlY3RlZC9hbGwuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcm90ZWN0ZWQvc3RyZWFtX2RlY29kZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZS9wcm90ZWN0ZWQvc3RyZWFtX2VuY29kZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdGTEFDX19OT19ETEwnLAotICAgICAgICAgICAgJ0ZMQUNfX09WRVJGTE9XX0RFVEVDVCcsCi0gICAgICAgICAgICAnVkVSU0lPTj0iMS4yLjEiJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnaW5jbHVkZScsCi0gICAgICAgICAgICAnc3JjL2xpYkZMQUMvaW5jbHVkZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnRkxBQ19fTk9fRExMJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnY2xhbmcgPT0gMScsIHsKLSAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdXQVJOSU5HX0NGTEFHUyc6IFsKLSAgICAgICAgICAgICAgICAgICMgbGliZmxhYyBjb252ZXJ0cyBiZXR3ZWVuIEZMQUNfX1N0cmVhbURlY29kZXJTdGF0ZSBhbmQKLSAgICAgICAgICAgICAgICAgICMgRkxBQ19fU3RyZWFtRGVjb2RlckluaXRTdGF0dXMgYSBsb3QgaW4gc3RyZWFtX2RlY29kZXIuYy4KLSAgICAgICAgICAgICAgICAgICctV25vLWNvbnZlcnNpb24nLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJy1Xbm8tY29udmVyc2lvbicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LCB7ICMgdXNlX3N5c3RlbV9zcGVleCAhPSAwCi0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJmbGFjJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnVVNFX1NZU1RFTV9GTEFDJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1saWJzLW9ubHktTCAtLWxpYnMtb25seS1vdGhlciBmbGFjKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJzwhQChwa2ctY29uZmlnIC0tbGlicy1vbmx5LWwgZmxhYyknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9mcmVldHlwZTIvZnJlZXR5cGUyX2NvYmFsdC5neXAgYi90aGlyZF9wYXJ0eS9mcmVldHlwZTIvZnJlZXR5cGUyX2NvYmFsdC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NGEzM2UuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvZnJlZXR5cGUyL2ZyZWV0eXBlMl9jb2JhbHQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2Z0Ml9kaXInOiAnPChERVBUSCkvdGhpcmRfcGFydHkvZnJlZXR5cGUyJywKLSB9LAotICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdmcmVldHlwZTInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3Rvb2xzZXRzJzogWyd0YXJnZXQnXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChmdDJfZGlyKS9zcmMvYXV0b2ZpdC9hdXRvZml0LmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvYmFzZS9mdGJhc2UuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0YmJveC5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL2Jhc2UvZnRiaXRtYXAuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0ZGVidWcuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0ZnN0eXBlLmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvYmFzZS9mdGdhc3AuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0Z2x5cGguYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0aW5pdC5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL2Jhc2UvZnRtbS5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL2Jhc2UvZnRzdHJva2UuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9iYXNlL2Z0c3lzdGVtLmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvYmFzZS9mdHR5cGUxLmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvY2ZmL2NmZi5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL2d6aXAvZnRnemlwLmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvcHNhdXgvcHNhdXguYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL3BzbmFtZXMvcHNuYW1lcy5jJywKLSAgICAgICAgJzwoZnQyX2Rpcikvc3JjL3Jhc3Rlci9yYXN0ZXIuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9zZm50L3NmbnQuYycsCi0gICAgICAgICc8KGZ0Ml9kaXIpL3NyYy9zbW9vdGgvc21vb3RoLmMnLAotICAgICAgICAnPChmdDJfZGlyKS9zcmMvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYycsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdGVF9DT05GSUdfT1BUSU9OX1NZU1RFTV9aTElCJywKLSAgICAgICAgJ0ZUMl9CVUlMRF9MSUJSQVJZJywKLSAgICAgICAgJ0ZUX0NPTkZJR19DT05GSUdfSD0iZnRjb25maWcuaCInLAotICAgICAgICAnRlRfQ09ORklHX01PRFVMRVNfSD0iZnRtb2R1bGUuaCInLAotICAgICAgICAnRlRfQ09ORklHX09QVElPTlNfSD0iZnRvcHRpb24uaCInLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KGZ0Ml9kaXIpL2luY2x1ZGVfY29iYWx0JywKLSAgICAgICAgJzwoZnQyX2RpcikvaW5jbHVkZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9icm90bGkvYy9pbmNsdWRlJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGlicG5nL2xpYnBuZy5neXA6bGlicG5nJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoZnQyX2RpcikvaW5jbHVkZV9jb2JhbHQnLAotICAgICAgICAgICc8KGZ0Ml9kaXIpL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQicsCi0gICAgICAgICAgJ0ZUX0NPTkZJR19DT05GSUdfSD0iZnRjb25maWcuaCInLAotICAgICAgICAgICdGVF9DT05GSUdfTU9EVUxFU19IPSJmdG1vZHVsZS5oIicsCi0gICAgICAgICAgJ0ZUX0NPTkZJR19PUFRJT05TX0g9ImZ0b3B0aW9uLmgiJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgIyBMZXZlbCAxIC0gRm9ybWFsIHBhcmFtZXRlciAnbnVtYmVyJyBpcyBkaWZmZXJlbnQgZnJvbSBkZWNsYXJhdGlvbi4KLSAgICAgICAgNDAyOCwKLSAgICAgICAgIyBMZXZlbCAxIC0gSW5jb21wYXRpYmxlIHR5cGVzIGNvbnZlcnNpb24uCi0gICAgICAgIDQxMzMsCi0gICAgICAgICMgTGV2ZWwgMiAtIFVuYXJ5IG1pbnVzIG9wZXJhdG9yIGFwcGxpZWQgdG8gdW5zaWduZWQgdHlwZTsgcmVzdWx0IGlzCi0gICAgICAgICMgc3RpbGwgdW5zaWduZWQuCi0gICAgICAgIDQxNDYsCi0gICAgICAgICMgTGV2ZWwgMSAtIENvbnZlcnNpb24gZnJvbSAndHlwZTEnIHRvICd0eXBlMicgb2YgYSBncmVhdGVyIHNpemUuCi0gICAgICAgICMgVHlwaWNhbGx5IHdoZW4gMzItYml0IHZhbHVlIGlzIGFzc2lnbmVkIHRvIGEgNjQtYml0IHBvaW50ZXIgdmFsdWUuCi0gICAgICAgIDQzMTIsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY2xhbmcgPT0gMScsIHsKLSAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgJy1Xbm8tdGF1dG9sb2dpY2FsLWNvbXBhcmUnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLCAjIHRhcmdldHMKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2dvb2dsZV9iZW5jaG1hcmsvZ29vZ2xlX2JlbmNobWFyay5neXAgYi90aGlyZF9wYXJ0eS9nb29nbGVfYmVuY2htYXJrL2dvb2dsZV9iZW5jaG1hcmsuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDY0MjU5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2dvb2dsZV9iZW5jaG1hcmsvZ29vZ2xlX2JlbmNobWFyay5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ29vZ2xlX2JlbmNobWFyaycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3NyYy9iZW5jaG1hcmsuY2MnLAotICAgICAgICAnc3JjL2JlbmNobWFya19hcGlfaW50ZXJuYWwuY2MnLAotICAgICAgICAnc3JjL2JlbmNobWFya19uYW1lLmNjJywKLSAgICAgICAgJ3NyYy9iZW5jaG1hcmtfcmVnaXN0ZXIuY2MnLAotICAgICAgICAnc3JjL2JlbmNobWFya19ydW5uZXIuY2MnLAotICAgICAgICAnc3JjL2NvbG9ycHJpbnRfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgJ3NyYy9jb21tYW5kbGluZWZsYWdzLmNjJywKLSAgICAgICAgJ3NyYy9jb21wbGV4aXR5LmNjJywKLSAgICAgICAgJ3NyYy9jb25zb2xlX3JlcG9ydGVyLmNjJywKLSAgICAgICAgJ3NyYy9jb3VudGVyLmNjJywKLSAgICAgICAgJ3NyYy9jc3ZfcmVwb3J0ZXIuY2MnLAotICAgICAgICAnc3JjL2pzb25fcmVwb3J0ZXIuY2MnLAotICAgICAgICAnc3JjL3JlcG9ydGVyLmNjJywKLSAgICAgICAgJ3NyYy9zbGVlcC5jYycsCi0gICAgICAgICdzcmMvc3RhdGlzdGljcy5jYycsCi0gICAgICAgICdzcmMvc3RyaW5nX3V0aWwuY2MnLAotICAgICAgICAnc3JjL3N5c2luZm8uY2MnLAotICAgICAgICAnc3JjL3RpbWVycy5jYycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJ2luY2x1ZGUnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTJhMjlhLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL2hhcmZidXp6Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3VzZV9zeXN0ZW1faGFyZmJ1enolJzogMCwKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi8uLi9idWlsZF9neXAvd2luX3ByZWNvbXBpbGUuZ3lwaScsCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsndXNlX3N5c3RlbV9oYXJmYnV6ej09MCcsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2hhcmZidXp6LW5nJywKLSAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnSEFWRV9PVCcsCi0gICAgICAgICAgICAnSEFWRV9JQ1UnLAotICAgICAgICAgICAgJ0hBVkVfSUNVX0JVSUxUSU4nLAotICAgICAgICAgICAgJ0hCX05PX01UJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3NyYy9oYi1hdG9taWMtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLWJsb2IuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1ibG9iLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1idWZmZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1idWZmZXItZGVzZXJpYWxpemUtanNvbi5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLWJ1ZmZlci1kZXNlcmlhbGl6ZS10ZXh0LmhoJywKLSAgICAgICAgICAgICdzcmMvaGItYnVmZmVyLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1idWZmZXItcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLWJ1ZmZlci1zZXJpYWxpemUuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1jYWNoZS1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItY29tbW9uLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItY29tbW9uLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1kZXByZWNhdGVkLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1mYWNlLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItZmFjZS5oJywKLSAgICAgICAgICAgICdzcmMvaGItZmFjZS1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItZmFsbGJhY2stc2hhcGUuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1mb250LmNjJywKLSAgICAgICAgICAgICdzcmMvaGItZm9udC5oJywKLSAgICAgICAgICAgICdzcmMvaGItZm9udC1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGIuaCcsCi0gICAgICAgICAgICAnc3JjL2hiLWljdS5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLWljdS5oJywKLSAgICAgICAgICAgICdzcmMvaGItbXV0ZXgtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW9iamVjdC1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Blbi1maWxlLXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vcGVuLXR5cGUtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1mb250LmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtZm9udC5oJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtaGVhZC10YWJsZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LWhoZWEtdGFibGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1obXR4LXRhYmxlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LWNvbW1vbi1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LWdkZWYtdGFibGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1sYXlvdXQtZ3Bvcy10YWJsZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LWxheW91dC1nc3ViZ3Bvcy1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LWdzdWItdGFibGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1sYXlvdXQuaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LWxheW91dC1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbWFwLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbWFwLXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1tYXhwLXRhYmxlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3QtbmFtZS10YWJsZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWFyYWJpYy1mYWxsYmFjay5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWFyYWJpYy10YWJsZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtZGVmYXVsdC5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtaGFuZ3VsLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1oZWJyZXcuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy10YWJsZS5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtbXlhbm1hci5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtbXlhbm1hci1tYWNoaW5lLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC10aGFpLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC10aWJldGFuLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC11c2UuY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LXVzZS1tYWNoaW5lLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC11c2UtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtdXNlLXRhYmxlLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtZmFsbGJhY2suY2MnLAotICAgICAgICAgICAgJ3NyYy9oYi1vdC1zaGFwZS1mYWxsYmFjay1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUuaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLW5vcm1hbGl6ZS5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXNoYXBlLW5vcm1hbGl6ZS1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXRhZy5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLW90LXRhZy5oJywKLSAgICAgICAgICAgICdzcmMvaGItcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLXNldC5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLXNldC5oJywKLSAgICAgICAgICAgICdzcmMvaGItc2V0LXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi1zaGFwZS5jYycsCi0gICAgICAgICAgICAnc3JjL2hiLXNoYXBlLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi1zaGFwZS1wbGFuLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItc2hhcGUtcGxhbi5oJywKLSAgICAgICAgICAgICdzcmMvaGItc2hhcGUtcGxhbi1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItc2hhcGVyLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItc2hhcGVyLWltcGwtcHJpdmF0ZS5oaCcsCi0gICAgICAgICAgICAnc3JjL2hiLXNoYXBlci1saXN0LmhoJywKLSAgICAgICAgICAgICdzcmMvaGItc2hhcGVyLXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi11bmljb2RlLmNjJywKLSAgICAgICAgICAgICdzcmMvaGItdW5pY29kZS5oJywKLSAgICAgICAgICAgICdzcmMvaGItdW5pY29kZS1wcml2YXRlLmhoJywKLSAgICAgICAgICAgICdzcmMvaGItdXRmLXByaXZhdGUuaGgnLAotICAgICAgICAgICAgJ3NyYy9oYi12ZXJzaW9uLmgnLAotICAgICAgICAgICAgJ3NyYy9oYi13YXJuaW5nLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnc3JjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ3NyYycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi8uLi90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtdmFsdWUnLAotICAgICAgICAgICAgICAgICAgIyBIYXJmYnV6eiB1c2VzIHVudXNlZCB0eXBlZGVmcyBmb3IgaXRzIHN0YXRpYyBhc3NlcnRzIChhbmQgaXRzCi0gICAgICAgICAgICAgICAgICAjIHN0YXRpYyBhc3NlcnRzIGFyZSBzdHJhbmdlIGVub3VnaCB0aGF0IHRoZXkgY2FuJ3QgYmUgcmVwbGFjZWQKLSAgICAgICAgICAgICAgICAgICMgYnkgc3RhdGljX2Fzc2VydCkuCi0gICAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAnLVduby11bnVzZWQtdmFsdWUnLAotICAgICAgICAgICAgICAgICMgSGFyZmJ1enogdXNlcyB1bnVzZWQgdHlwZWRlZnMgZm9yIGl0cyBzdGF0aWMgYXNzZXJ0cyAoYW5kIGl0cwotICAgICAgICAgICAgICAgICMgc3RhdGljIGFzc2VydHMgYXJlIHN0cmFuZ2UgZW5vdWdoIHRoYXQgdGhleSBjYW4ndCBiZSByZXBsYWNlZAotICAgICAgICAgICAgICAgICMgYnkgc3RhdGljX2Fzc2VydCkuCi0gICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWYnLAotICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICMgRGlzYWJsZSB3aW5kb3dzIGhhcmZidXp6IHdhcm5pbmdzOgotICAgICAgICAgICAgIyAgIDQyNjc6IG9uIGFtZDY0LiBzaXplX3QgLT4gaW50LCBzaXplX3QgLT4gdW5zaWduZWQgaW50Ci0gICAgICAgICAgICAjICAgNDMzNDogJzw8JyA6IHJlc3VsdCBvZiAzMi1iaXQgc2hpZnQgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gNjQKLSAgICAgICAgICAgICMgICAgICAgYml0cyAod2FzIDY0LWJpdCBzaGlmdCBpbnRlbmRlZD8pCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0id2luIicsIHsKLSAgICAgICAgICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbNDI2NywgNDMzNF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LCB7ICAjIHVzZV9zeXN0ZW1faGFyZmJ1eno9PTEKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2hhcmZidXp6LW5nJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tY2ZsYWdzIGhhcmZidXp6KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWNmbGFncyBoYXJmYnV6eiknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWxpYnMtb25seS1MIC0tbGlicy1vbmx5LW90aGVyIGhhcmZidXp6KScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tbGlicy1vbmx5LWwgaGFyZmJ1enopJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cCBiL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDI4ODkzLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsODM4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICdpY3UuZ3lwaScsCi0gIF0sCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3VzZV9zeXN0ZW1faWN1JSc6IDAsCi0gICAgJ2ljdV91c2VfZGF0YV9maWxlX2ZsYWclJzogMCwKLSAgICAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQlJzogMCwKLSAgICAnaWN1ZGF0YV90YXJnZXRfdHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgIyBUZWxsIElDVSB0byBub3QgaW5zZXJ0IHx1c2luZyBuYW1lc3BhY2UgaWN1O3wgaW50byBpdHMgaGVhZGVycywKLSAgICAgICAgIyBzbyB0aGF0IGNocm9tZSdzIHNvdXJjZSBleHBsaWNpdGx5IGhhcyB0byB1c2UgfGljdTo6fC4KLSAgICAgICAgJ1VfVVNJTkdfSUNVX05BTUVTUEFDRT0wJywKLSAgICAgICAgIyBXZSBkb24ndCB1c2UgSUNVIHBsdWdpbnMgYW5kIGR5bG9hZCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgdGhlbS4KLSAgICAgICAgIyBOYUNsLXJlbGF0ZWQgYnVpbGRzIGFsc28gZmFpbCBsb29raW5nIGZvciBkbGZjbi5oIHdoZW4gaXQncyBlbmFibGVkLgotICAgICAgICAnVV9FTkFCTEVfRFlMT0FEPTAnLAotICAgICAgICAjIERpc2FibGUgdW51c2VkIElDVSBjb2RlCi0gICAgICAgICdVQ09ORklHX09OTFlfSFRNTF9DT05WRVJTSU9OJywKLSAgICAgICAgJ1VDT05GSUdfTk9fQ09MTEFUSU9OJywKLSAgICAgICAgJ1VDT05GSUdfTk9fTEVHQUNZX0NPTlZFUlNJT04nLAotICAgICAgICAnVUNPTkZJR19OT19UUkFOU0xJVEVSQVRJT04nLAotICAgICAgICAnVUNPTkZJR19OT19SRUdVTEFSX0VYUFJFU1NJT05TJwotICAgICAgXSwKLSAgICAgICMgU29tZSBkZXBlbmRlbmNpZXMgYWxzbyB1c2UgVUJvb2wsIHdoaWNoIHRyaWdnZXJzIHRoaXMgd2FybmluZy4KLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQ4MDVdLAotICAgIH0sCi0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnVV9VU0lOR19JQ1VfTkFNRVNQQUNFPTAnLAotICAgICAgJ0hBVkVfRExPUEVOPTAnLAotICAgICAgIyBPbmx5IGJ1aWxkIGVuY29kaW5nIGNvdmVydGVycyBhbmQgZGV0ZWN0b3JzIG5lY2Vzc2FyeSBmb3IgSFRNTDUuCi0gICAgICAnVUNPTkZJR19PTkxZX0hUTUxfQ09OVkVSU0lPTj0xJywKLSAgICAgICMgVE9ETyhqc2hpbik6IERvIHdlIHN0aWxsIG5lZWQvd2FudCB0aGlzPwotICAgICAgJ1VDT05GSUdfVVNFX1dJTkRPV1NfTENJRF9NQVBQSU5HX0FQST0wJywKLSAgICAgICMgTm8gZGVwZW5kZW5jeSBvbiB0aGUgZGVmYXVsdCBwbGF0Zm9ybSBlbmNvZGluZy4KLSAgICAgICMgV2lsbCBjdXQgZG93biB0aGUgY29kZSBzaXplLgotICAgICAgJ1VfQ0hBUlNFVF9JU19VVEY4PTEnLAotICAgIF0sCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2NsYW5nID09IDEnLCB7Ci0gICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgIyBJQ1UgaGFzIHNvbWUgYHVuc2lnbmVkIDwgMGAgY2hlY2tzLgotICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb21wYXJlJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydjb21wb25lbnQ9PSJzdGF0aWNfbGlicmFyeSInLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdVX1NUQVRJQ19JTVBMRU1FTlRBVElPTicsCi0gICAgICAgIF0sCi0gICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ1VfU1RBVElDX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVUNIQVJfVFlQRT13Y2hhcl90JywKLSAgICAgICAgXSwKLQknY2ZsYWdzJzogWyAnL3V0Zi04JyBdLAotICAgICAgfSx7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdVQ0hBUl9UWVBFPXVpbnQxNl90JywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIiBvciBPUz09Im9wZW5ic2QiIG9yIE9TPT0ic29sYXJpcyIgXAotICAgICAgICAgb3IgT1M9PSJuZXRic2QiIG9yIE9TPT0ibWFjIiBvciBPUz09ImFuZHJvaWQiIG9yIE9TPT0icW54IikgYW5kIFwKLSAgICAgICAgKHRhcmdldF9hcmNoPT0iYXJtIiBvciB0YXJnZXRfYXJjaD09Ing4NiIgb3IgXAotICAgICAgICAgdGFyZ2V0X2FyY2g9PSJtaXBzZWwiIG9yIHRhcmdldF9hcmNoPT0ibWlwcyIgb3IgXAotICAgICAgICAgdGFyZ2V0X2FyY2g9PSJwcGMiIG9yIHRhcmdldF9hcmNoPT0iczM5MCIpJywgewotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnaG9zdF9hcmNoPT0iczM5MCIgb3IgaG9zdF9hcmNoPT0iczM5MHgiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbICctbTMxJyBdLAotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyAnLW0zMScgXSwKLSAgICAgICAgICAgICAgICAnYXNmbGFncyc6IFsgJy0zMScgXSwKLSAgICAgICAgICAgICAgfSx7Ci0gICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW0zMicgXSwKLSAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyAnLW0zMicgXSwKLSAgICAgICAgICAgICAgICdhc2ZsYWdzJzogWyAnLTMyJyBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdBUkNIUyc6IFsgJ2kzODYnIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJyhPUz09ImxpbnV4IiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJzb2xhcmlzIiBcCi0gICAgICAgICBvciBPUz09Im5ldGJzZCIgb3IgT1M9PSJtYWMiIG9yIE9TPT0iYW5kcm9pZCIgb3IgT1M9PSJxbngiKSBhbmQgXAotICAgICAgICAodGFyZ2V0X2FyY2g9PSJhcm02NCIgb3IgdGFyZ2V0X2FyY2g9PSJ4NjQiIG9yIFwKLSAgICAgICAgIHRhcmdldF9hcmNoPT0ibWlwczY0ZWwiIG9yIHRhcmdldF9hcmNoPT0ibWlwczY0IiBvciBcCi0gICAgICAgICB0YXJnZXRfYXJjaD09InBwYzY0IiBvciB0YXJnZXRfYXJjaD09InMzOTB4IiknLCB7Ci0gICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW02NCcgXSwKLSAgICAgICAgICAgICdsZGZsYWdzJzogWyAnLW02NCcgXSwKLSAgICAgICAgICAgICdhc2ZsYWdzJzogWyAnLTY0JyBdLAotICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAnQVJDSFMnOiBbICd4ODZfNjQnIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwKLSAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgJ3NvdXJjZS9jb21tb24nLAotICAgICAgJ3NvdXJjZS9pMThuJywKLSAgICBdLAotICAgICMgQWRkIDQyNDQgdG8gYWxsb3cgY29udmVyc2lvbiBvZiBmbG9hdCB0byBpbnQsIDQ2NjEgdG8gYWxsb3cgdW5kZWZpbmVkCi0gICAgIyBtZW1iZXIgb2YgdGVtcGxhdGUgY2xhc3MsIDQ4MDUgdG8gYWxsb3cgY29tcGFyaXNvbiBiZXR3ZWVuIGJvb2wgYW5kIGludAotICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQwMDUsIDQwNjgsIDQyNDQsIDQyNjcsIDQ2NjEsIDQ4MDVdLAotICB9LAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ3VzZV9zeXN0ZW1faWN1PT0wIG9yIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0xJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnY29weV9pY3VkdF9kYXQnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICMgaWN1ZHRsLmRhdCBpcyB0aGUgc2FtZSBmb3IgYm90aCBob3N0L3RhcmdldCwgc28gdGhpcyBvbmx5IHN1cHBvcnRzIGEKLSAgICAgICAgICAjIHNpbmdsZSB0b29sc2V0LiBJZiBhIHRhcmdldCByZXF1aXJlcyB0aGF0IHRoZSAuZGF0IGZpbGUgYmUgY29waWVkCi0gICAgICAgICAgIyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeSwgaXQgc2hvdWxkIGV4cGxpY2l0bHkgZGVwZW5kIG9uIHRoaXMgdGFyZ2V0Ci0gICAgICAgICAgIyB3aXRoIHRoZSBob3N0IHRvb2xzZXQgKGxpa2UgY29weV9pY3VkdF9kYXQjaG9zdCkuCi0gICAgICAgICAgJ3Rvb2xzZXRzJzogWyAnaG9zdCcgXSwKLSAgICAgICAgICAnY29waWVzJzogW3sKLSAgICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKScsCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyAnY29iYWx0PT0xJywgewotICAgICAgICAgICAgICAgICMgVE9ETzogSUNVIGRhdGEgaGFuZGxpbmcgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aAotICAgICAgICAgICAgICAgICMgdGhlIENocm9taXVtIGNvZGUuCi0gICAgICAgICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgICAgICAgJzwoREVQVEgpL2NvYmFsdC9idWlsZC9jb3B5X2ljdV9kYXRhLmd5cGknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ09TID09ICJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnYW5kcm9pZC9pY3VkdGwuZGF0JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9ICwgeyAjIGVsc2U6IE9TICE9IGFuZHJvaWQKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICMgQmlnIEVuZGlhbgotICAgICAgICAgICAgICAgICAgWyAndGFyZ2V0X2FyY2g9PSJtaXBzIiBvciBcCi0gICAgICAgICAgICAgICAgICAgICB0YXJnZXRfYXJjaD09Im1pcHM2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdmaWxlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uL2ljdWR0Yi5kYXQnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfSAsIHsgICMgZWxzZTogISBCaWcgRW5kaWFuID0gTGl0dGxlIEVuZGlhbgotICAgICAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi9pY3VkdGwuZGF0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdkYXRhX2Fzc2VtYmx5JywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsgJ3RhcmdldF9hcmNoPT0ibWlwcyIgb3IgXAotICAgICAgICAgICAgICAgdGFyZ2V0X2FyY2g9PSJtaXBzNjQiJywgeyAjIEJpZyBFbmRpYW4KLSAgICAgICAgICAgICAgJ2RhdGFfYXNzZW1ibHlfaW5wdXRzJzogWwotICAgICAgICAgICAgICAgICdjb21tb24vaWN1ZHRiLmRhdCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdkYXRhX2Fzc2VtYmx5X291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3RoaXJkX3BhcnR5L2ljdS9pY3VkdGJfZGF0LlMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgeyAjIExpdHRsZSBFbmRpYW4KLSAgICAgICAgICAgICAgJ2RhdGFfYXNzZW1ibHlfb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvdGhpcmRfcGFydHkvaWN1L2ljdWR0bF9kYXQuUycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnT1MgPT0gImFuZHJvaWQiJywgewotICAgICAgICAgICAgICAgICAgJ2RhdGFfYXNzZW1ibHlfaW5wdXRzJzogWwotICAgICAgICAgICAgICAgICAgICAnYW5kcm9pZC9pY3VkdGwuZGF0JywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSAsIHsgIyBlbHNlOiBPUyE9ImFuZHJvaWQiCi0gICAgICAgICAgICAgICAgICAnZGF0YV9hc3NlbWJseV9pbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdjb21tb24vaWN1ZHRsLmRhdCcsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLCAjIE9TPT1hbmRyb2lkCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzxAKF9kYXRhX2Fzc2VtYmx5X2lucHV0cyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdtYWtlX2RhdGFfYXNzZW1ibHknLAotICAgICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgICAgICdzY3JpcHRzL21ha2VfZGF0YV9hc3NlbWJseS5weScsCi0gICAgICAgICAgICAgICAgJzxAKF9kYXRhX2Fzc2VtYmx5X2lucHV0cyknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAnPEAoX2RhdGFfYXNzZW1ibHlfb3V0cHV0cyknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgIFsgJ09TID09ICJtYWMiIG9yIE9TID09ICJpb3MiIG9yICcKLSAgICAgICAgICAgICAgICAgICAnKChPUyA9PSAiYW5kcm9pZCIgb3IgT1MgPT0gInFueCIpIGFuZCAnCi0gICAgICAgICAgICAgICAgICAgJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9vcyA9PSAibWFjIiknLCB7Ci0gICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsncHl0aG9uJywgJzxAKF9pbnB1dHMpJywgJzxAKF9vdXRwdXRzKScsICctLW1hYyddLAotICAgICAgICAgICAgICAgICB9ICwgewotICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbicsICc8QChfaW5wdXRzKScsICc8QChfb3V0cHV0cyknXSwKLSAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnaWN1ZGF0YScsCi0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ1VfSElERV9EQVRBX1NZTUJPTCcsCi0gICAgICAgICAgICAnVV9JQ1VEQVRBRU5UUllfSU5fQ09NTU9OJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnZGF0YV9hc3NlbWJseSN0YXJnZXQnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnc291cmNlL3N0dWJkYXRhL3N0dWJkYXRhLmNwcCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsgJ3RhcmdldF9hcmNoPT0ibWlwcyIgb3IgXAotICAgICAgICAgICAgICAgdGFyZ2V0X2FyY2g9PSJtaXBzNjQiJywgewotICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3RoaXJkX3BhcnR5L2ljdS9pY3VkdGxfZGF0LlMnCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvdGhpcmRfcGFydHkvaWN1L2ljdWR0Yl9kYXQuUycKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAndXNlX3N5c3RlbV9pY3U9PTEgYW5kIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0xJywgewotICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAndXNlX3N5c3RlbV9pY3U9PTAgYW5kIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0xJywgewotICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsgJ3VzZV9zeXN0ZW1faWN1PT0wIGFuZCB3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldD09MCcsIHsKLSAgICAgICAgICAgICAgJ3Rvb2xzZXRzJzogWyd0YXJnZXQnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAnY29iYWx0PT0xJywgewotICAgICAgICAgICAgICAjIFRPRE86IElDVSBkYXRhIGhhbmRsaW5nIHNob3VsZCBiZSB1bmlmaWVkIHdpdGgKLSAgICAgICAgICAgICAgIyB0aGUgQ2hyb21pdW0gY29kZS4KLSAgICAgICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgICAgICc8KERFUFRIKS9jb2JhbHQvYnVpbGQvY29weV9pY3VfZGF0YS5neXBpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyEnOiBbCi0gICAgICAgICAgICAgICAgJ2RhdGFfYXNzZW1ibHkjdGFyZ2V0JywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAnT1MgPT0gIndpbiIgYW5kIGljdV91c2VfZGF0YV9maWxlX2ZsYWc9PTAnLCB7Ci0gICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKLSAgICAgICAgICAgICAgICAnZGF0YV9hc3NlbWJseSN0YXJnZXQnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnY29waWVzJzogWwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKScsCi0gICAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICd3aW5kb3dzL2ljdWR0LmRsbCcsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsgJ2ljdV91c2VfZGF0YV9maWxlX2ZsYWc9PTEnLCB7Ci0gICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKLSAgICAgICAgICAgICAgICAnZGF0YV9hc3NlbWJseSN0YXJnZXQnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgYXNzZW1ibHkgZGF0YSBmaWxlLgotICAgICAgICAgICAgICAnc291cmNlcy8nOiBbWydleGNsdWRlJywgJ2ljdWR0W2xiXV9kYXQnXV0sCi0KLSAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYW55IGJpbmFyeSBkZXBlbmRpbmcgb24gdGhpcyBnZXRzIHRoZSBkYXRhIGZpbGUuCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnT1MgIT0gImlvcyInLCB7Ci0gICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgICAnY29weV9pY3VkdF9kYXQjaG9zdCcsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0gLCB7ICMgZWxzZTogT1M9PSJpb3MiCi0gICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAgICAgJ21hY19idW5kbGVfcmVzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdjb21tb24vaWN1ZHRsLmRhdCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLCAjIE9TIT1pb3MKLSAgICAgICAgICAgICAgXSwgIyBjb25kaXRpb25zCi0gICAgICAgICAgICB9XSwgIyBpY3VfdXNlX2RhdGFfZmlsZV9mbGFnCi0gICAgICAgICAgXSwgIyBjb25kaXRpb25zCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnaWN1aTE4bicsCi0gICAgICAgICAgJ3R5cGUnOiAnPChjb21wb25lbnQpJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8QChpY3VpMThuX3NvdXJjZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ1VfSTE4Tl9JTVBMRU1FTlRBVElPTicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ2ljdXVjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJ3NvdXJjZS9pMThuJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2NsYW5nX3dhcm5pbmdfZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICMgSUNVIHVzZXMgaXRzIG93biBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgICAjIElDVSBwcmVmZXJzIGBhICYmIGIgfHwgY2Agb3ZlciBgKGEgJiYgYikgfHwgY2AuCi0gICAgICAgICAgICAgICctV25vLWxvZ2ljYWwtb3AtcGFyZW50aGVzZXMnLAotICAgICAgICAgICAgICAjIElDVSBoYXMgc29tZSBgdW5zaWduZWQgPCAwYCBjaGVja3MuCi0gICAgICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb21wYXJlJywKLSAgICAgICAgICAgICAgIyBJQ1UgaGFzIHNvbWUgY29kZSB3aXRoIHRoZSBwYXR0ZXJuOgotICAgICAgICAgICAgICAjICAgaWYgKGZvdW5kID0gdXBydl9nZXRXaW5kb3dzVGltZVpvbmVJbmZvKC4uLikpCi0gICAgICAgICAgICAgICctV25vLXBhcmVudGhlc2VzJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAjIFNpbmNlIElDVSB3YW50cyB0byBpbnRlcm5hbGx5IHVzZSBpdHMgb3duIGRlcHJlY2F0ZWQgQVBJcywgZG9uJ3QKLSAgICAgICAgICAjIGNvbXBsYWluIGFib3V0IGl0LgotICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdHQ0NfRU5BQkxFX0NQUF9SVFRJJzogJ1lFUycsICAgICAgICMgLWZydHRpCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsgJ29zX3Bvc2l4ID09IDEgYW5kIE9TICE9ICJtYWMiIGFuZCBPUyAhPSAiaW9zIiBhbmQgT1MgIT0gImxiX3NoZWxsIicsIHsKLSAgICAgICAgICAgICAgIyBTaW5jZSBJQ1Ugd2FudHMgdG8gaW50ZXJuYWxseSB1c2UgaXRzIG93biBkZXByZWNhdGVkIEFQSXMsIGRvbid0Ci0gICAgICAgICAgICAgICMgY29tcGxhaW4gYWJvdXQgaXQuCi0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgICAgICAgICAgICctZnJ0dGknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TID09ICJtYWMiIG9yIE9TID09ICJpb3MiJywgewotICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ0dDQ19FTkFCTEVfQ1BQX1JUVEknOiAnWUVTJywgICAgICAgIyAtZnJ0dGkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUyA9PSAid2luIicsIHsKLSAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ3RydWUnLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWycoT1MgPT0gImxiX3NoZWxsIiBvciBPUz09InN0YXJib2FyZCIpIGFuZCB0YXJnZXRfYXJjaCA9PSAicHMzIicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAgICAgICAnLVhjKz1ydHRpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgICAgICctV25vLXVudXNlZC1mdW5jdGlvbicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgICAgICctZnJ0dGknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbICd1c2Vfc3lzdGVtX2ljdT09MSBhbmQgd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCddLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbICd1c2Vfc3lzdGVtX2ljdT09MCBhbmQgd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAndXNlX3N5c3RlbV9pY3U9PTAgYW5kIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0wJywgewotICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ3RhcmdldCddLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TID09ICJhbmRyb2lkIiBhbmQgY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAgICAgIyBEaXNhYmxlIHNpbmNvcygpIG9wdGltaXphdGlvbiB0byBhdm9pZCBhIGxpbmtlciBlcnJvciBzaW5jZQotICAgICAgICAgICAgICAgICMgQW5kcm9pZCdzIG1hdGggbGlicmFyeSBkb2Vzbid0IGhhdmUgc2luY29zKCkuICBFaXRoZXIKLSAgICAgICAgICAgICAgICAjIC1mbm8tYnVpbHRpbi1zaW4gb3IgLWZuby1idWlsdGluLWNvcyB3b3Jrcy4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgICAnLWZuby1idWlsdGluLXNpbicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09InN0YXJib2FyZCInLCB7Ci0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdVX0hBVkVfTkxfTEFOR0lORk9fQ09ERVNFVD0wJywKLSAgICAgICAgICAgICAgICAnVV9IQVZFX05MX0xBTkdJTkZPPTAnCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnKE9TPT0ic3RhcmJvYXJkIikgYW5kICh0YXJnZXRfb3M9PSJhbmRyb2lkIiknLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgICAgICAgIyByZWxkdGZtdC5jcHAgY29tcGFyZXMgJ1VEYXRlRm9ybWF0U3R5bGUnIGFuZCAnRVN0eWxlJy4KLSAgICAgICAgICAgICAgICAnLVduby1lbnVtLWNvbXBhcmUtc3dpdGNoJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWycoT1M9PSJsYl9zaGVsbCIgb3IgT1M9PSJzdGFyYm9hcmQiKSBhbmQgKHRhcmdldF9vcz09ImFuZHJvaWQiIG9yIHRhcmdldF9vcz09ImxpbnV4IiBvciBjbGFuZz09MSknLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgICAgICAgJy1mcnR0aScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgICAgICctZm5vLXJ0dGknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbICdPUyA9PSAid2luIiBhbmQgY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAgICMgTm90ZTogR2VuZXJhbCBjbGFuZyB3YXJuaW5ncyBzaG91bGQgZ28gaW4gdGhlCi0gICAgICAgICAgICAgICMgY2xhbmdfd2FybmluZ19mbGFncyBibG9jayBhYm92ZS4KLSAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICctV25vLWltcGxpY2l0LWV4Y2VwdGlvbi1zcGVjLW1pc21hdGNoJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sICMgY29uZGl0aW9ucwotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2ljdXVjJywKLSAgICAgICAgICAndHlwZSc6ICc8KGNvbXBvbmVudCknLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzxAKGljdXVjX3NvdXJjZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ1VfQ09NTU9OX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnaWN1ZGF0YScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICdzb3VyY2UvY29tbW9uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsNCi0gICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogew0KLSAgICAgICAgICAgICAgICAjIENlcnRhaW4gY3VycmVuY3kgY2hhcmFjdGVycyB3aWxsIHRyeSB0byB1c2UgdGhlIGxlZ2FjeQ0KLSAgICAgICAgICAgICAgICAjIHdpbmRvd3MtMTI1MiBlbmNvZGluZyB1bmxlc3Mgd2UgZXhwbGljaXRseSBzcGVjaWZ5IHV0Zi04DQotICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsnL3V0Zi04J10sDQotICAgICAgICAgICAgICB9LA0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyAnY29tcG9uZW50PT0ic3RhdGljX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgJ1VfU1RBVElDX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdVX1NUQVRJQ19JTVBMRU1FTlRBVElPTicsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnY2xhbmdfd2FybmluZ19mbGFncyc6IFsKLSAgICAgICAgICAgICAgIyBJQ1UgdXNlcyBpdHMgb3duIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgotICAgICAgICAgICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCi0gICAgICAgICAgICAgICMgSUNVIHByZWZlcnMgYGEgJiYgYiB8fCBjYCBvdmVyIGAoYSAmJiBiKSB8fCBjYC4KLSAgICAgICAgICAgICAgJy1Xbm8tbG9naWNhbC1vcC1wYXJlbnRoZXNlcycsCi0gICAgICAgICAgICAgICMgSUNVIGhhcyBzb21lIGB1bnNpZ25lZCA8IDBgIGNoZWNrcy4KLSAgICAgICAgICAgICAgJy1Xbm8tdGF1dG9sb2dpY2FsLWNvbXBhcmUnLAotICAgICAgICAgICAgICAjIHVyZXNkYXRhLmMgaGFzIHN3aXRjaChSRVNfR0VUX1RZUEUoeCkpIGNvZGUuIFRoZQotICAgICAgICAgICAgICAjIFJFU19HRVRfVFlQRSBtYWNybyByZXR1cm5zIGFuIFVSZXNUeXBlIGVudW0sIGJ1dCBzb21lIHN3aXRjaAotICAgICAgICAgICAgICAjIHN0YXRlbWVudCBjb250YWlucyBjYXNlIHZhbHVlcyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoYXQKLSAgICAgICAgICAgICAgIyBlbnVtIChlLmcuIFVSRVNfVEFCTEUzMiB3aGljaCBpcyBpbiBVUmVzSW50ZXJuYWxUeXBlKS4gVGhpcwotICAgICAgICAgICAgICAjIGlzIG9uIHB1cnBvc2UuCi0gICAgICAgICAgICAgICctV25vLXN3aXRjaCcsCi0gICAgICAgICAgICAgICMgSUNVIGhhcyBzb21lIGNvZGUgd2l0aCB0aGUgcGF0dGVybjoKLSAgICAgICAgICAgICAgIyAgIGlmIChmb3VuZCA9IHVwcnZfZ2V0V2luZG93c1RpbWVab25lSW5mbyguLi4pKQotICAgICAgICAgICAgICAnLVduby1wYXJlbnRoZXNlcycsCi0gICAgICAgICAgICAgICMgSUNVIGdlbmVyYWxseSBoYXMgbm8gdW51c2VkIHZhcmlhYmxlcywgYnV0IHRoZXJlIGFyZSBhIGZldwotICAgICAgICAgICAgICAjIHBsYWNlcyB3aGVyZSB0aGlzIHdhcm5pbmcgdHJpZ2dlcnMuCi0gICAgICAgICAgICAgICMgU2VlIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTIyMjY0MzAwMi8gYW5kCi0gICAgICAgICAgICAgICMgaHR0cDovL3d3dy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvMTE3NTkuCi0gICAgICAgICAgICAgICctV25vLXVudXNlZC1jb25zdC12YXJpYWJsZScsCi0gICAgICAgICAgICAgICMgdWNudjIwMjIuY3BwIGNvbnRhaW5zIHRocmVlIGZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IHVzZWQgd2hlbgotICAgICAgICAgICAgICAjIGNlcnRhaW4gcHJlcHJvY2Vzc29yIGRlZmluZXMgYXJlIHNldC4KLSAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLWZ1bmN0aW9uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgIyBTaW5jZSBJQ1Ugd2FudHMgdG8gaW50ZXJuYWxseSB1c2UgaXRzIG93biBkZXByZWNhdGVkIEFQSXMsCi0gICAgICAgICAgICAjIGRvbid0IGNvbXBsYWluIGFib3V0IGl0LgotICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgJy1Xbm8tdW51c2VkLWZ1bmN0aW9uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgICAnLWZydHRpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnR0NDX0VOQUJMRV9DUFBfUlRUSSc6ICdZRVMnLCAgICAgICAjIC1mcnR0aQotICAgICAgICAgIH0sCi0gICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAgICAgIyBDZXJ0YWluIGN1cnJlbmN5IGNoYXJhY3RlcnMgd2lsbCB0cnkgdG8gdXNlIHRoZSBsZWdhY3kKLSAgICAgICAgICAgICAgIyB3aW5kb3dzLTEyNTIgZW5jb2RpbmcgdW5sZXNzIHdlIGV4cGxpY2l0bHkgc3BlY2lmeSB1dGYtOAotICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbJy91dGYtOCddLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnYWR2YXBpMzIubGliJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWyAndXNlX3N5c3RlbV9pY3U9PTEgYW5kIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0xJywgewotICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAndXNlX3N5c3RlbV9pY3U9PTAgYW5kIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0PT0xJywgewotICAgICAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsgJ3VzZV9zeXN0ZW1faWN1PT0wIGFuZCB3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldD09MCcsIHsKLSAgICAgICAgICAgICAgJ3Rvb2xzZXRzJzogWyd0YXJnZXQnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAnT1MgPT0gIndpbiIgb3IgaWN1X3VzZV9kYXRhX2ZpbGVfZmxhZz09MScsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJ3NvdXJjZS9zdHViZGF0YS9zdHViZGF0YS5jcHAnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnVV9JQ1VEQVRBRU5UUllfSU5fQ09NTU9OJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWycoT1MgPT0gImxiX3NoZWxsIiBvciBPUz09InN0YXJib2FyZCIpIGFuZCB0YXJnZXRfYXJjaCA9PSAicHMzIicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAgICAgICAnLVhjKz1ydHRpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgICAgICctV25vLXVudXNlZC1mdW5jdGlvbicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgICAgICctZnJ0dGknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZF9oZWFkZXJzX29ubHkuZ3lwOnN0YXJib2FyZF9oZWFkZXJzX29ubHknLAotICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWycoT1M9PSJsYl9zaGVsbCIgb3IgT1M9PSJzdGFyYm9hcmQiKSBhbmQgKHRhcmdldF9vcz09ImFuZHJvaWQiIG9yIHRhcmdldF9vcz09ImxpbnV4IiBvciBjbGFuZz09MSknLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgICAgICAgJy1mcnR0aScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgICAgICctZm5vLXJ0dGknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbICdPUyA9PSAid2luIiBhbmQgY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAgICMgTm90ZTogR2VuZXJhbCBjbGFuZyB3YXJuaW5ncyBzaG91bGQgZ28gaW4gdGhlCi0gICAgICAgICAgICAgICMgY2xhbmdfd2FybmluZ19mbGFncyBibG9jayBhYm92ZS4KLSAgICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICctV25vLWltcGxpY2l0LWV4Y2VwdGlvbi1zcGVjLW1pc21hdGNoJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sICMgY29uZGl0aW9ucwotICAgICAgICB9LAotICAgICAgXSwgIyB0YXJnZXRzCi0gICAgfV0sCi0gICAgWyd1c2Vfc3lzdGVtX2ljdT09MScsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3N5c3RlbV9pY3UnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydPUz09InFueCInLCB7Ci0gICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnLWxpY3VpMThuJywKLSAgICAgICAgICAgICAgICAgICctbGljdXVjJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TIT0icW54IicsIHsKLSAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnPCFAKGljdS1jb25maWcgLS1sZGZsYWdzKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAgICAgJzwhQChpY3UtY29uZmlnIC0tbGRmbGFncy1saWJzb25seSknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2ljdWRhdGEnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3N5c3RlbV9pY3UnXSwKLSAgICAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsnc3lzdGVtX2ljdSddLAotICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0J10sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnaWN1aTE4bicsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsnc3lzdGVtX2ljdSddLAotICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWydzeXN0ZW1faWN1J10sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdoZWFkZXJzX3Jvb3RfcGF0aCc6ICdzb3VyY2UvaTE4bicsCi0gICAgICAgICAgICAnaGVhZGVyX2ZpbGVuYW1lcyc6IFsKLSAgICAgICAgICAgICAgIyBUaGlzIGxpc3QgY2FuIGVhc2lseSBiZSB1cGRhdGVkIHVzaW5nIHRoZSBjb21tYW5kIGJlbG93OgotICAgICAgICAgICAgICAjIGxzIHNvdXJjZS9pMThuL3VuaWNvZGUvKmggfCBzb3J0IHwgXAotICAgICAgICAgICAgICAjIHNlZCAicy9eLippMThuXC9cKC4qXCkkLyAgICAgICAgICAgICAgJ1wxJywvIgotCSAgICAgICMgSTE4Tl9IRFJfU1RBUlQKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvYWxwaGFpbmRleC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvYmFzaWN0ei5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvY2FsZW5kYXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2Nob2ljZm10LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9jb2xlaXRyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9jb2xsLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9jb21wYWN0ZGVjaW1hbGZvcm1hdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvY3VycmFtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvY3VycnBpbmYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2N1cnJ1bml0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9kYXRlZm10LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9kY2ZtdHN5bS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvZGVjaW1mbXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2R0Zm10c3ltLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9kdGl0dmZtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvZHRpdHZpbmYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2R0cHRuZ2VuLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9kdHJ1bGUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2ZpZWxkcG9zLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9mbXRhYmxlLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9mb3JtYXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2Zvcm1hdHRlZHZhbHVlLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9mcG9zaXRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvZ2VuZGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9ncmVnb2NhbC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvbGlzdGZvcm1hdHRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvbWVhc2ZtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvbWVhc3VuaXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL21lYXN1cmUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL21zZ2ZtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvbm91bml0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9udW1iZXJmb3JtYXR0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL251bWJlcnJhbmdlZm9ybWF0dGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9udW1mbXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL251bXN5cy5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvcGx1cmZtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvcGx1cnJ1bGUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3JibmYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3JidHouaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3JlZ2V4LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9yZWdpb24uaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3JlbGRhdGVmbXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3NjaWVudGlmaWNudW1iZXJmb3JtYXR0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3NlYXJjaC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvc2VsZm10LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9zaW1wbGV0ei5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvc21wZHRmbXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3NvcnRrZXkuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3N0c2VhcmNoLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS90Ymxjb2xsLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS90aW1lem9uZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdG11bml0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS90bXV0YW10LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS90bXV0Zm10LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS90cmFuc2xpdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdHpmbXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3R6bmFtZXMuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3R6cnVsZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdHp0cmFucy5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNhbC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNvbGVpdHIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vjb2wuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vjc2RldC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWRhdGVpbnRlcnZhbGZvcm1hdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWRhdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWRhdHBnLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91ZmllbGRwb3NpdGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91Zm9ybWF0dGFibGUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vmb3JtYXR0ZWR2YWx1ZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWdlbmRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWxpc3Rmb3JtYXR0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vsb2NkYXRhLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bXNnLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bmlyZXBsLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bnVtYmVyZm9ybWF0dGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bnVtYmVycmFuZ2Vmb3JtYXR0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VudW0uaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VudW1zeXMuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VwbHVyYWxydWxlcy5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXJlZ2V4LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91cmVnaW9uLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91cmVsZGF0ZWZtdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXNlYXJjaC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXNwb29mLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dG1zY2FsZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXRyYW5zLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS92dHpvbmUuaCcsCi0JICAgICAgIyBJMThOX0hEUl9FTkQKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICAgICAnc2hpbV9oZWFkZXJzLmd5cGknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3Rvb2xzZXRzJzogWyd0YXJnZXQnXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdpY3V1YycsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsnc3lzdGVtX2ljdSddLAotICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWydzeXN0ZW1faWN1J10sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdoZWFkZXJzX3Jvb3RfcGF0aCc6ICdzb3VyY2UvY29tbW9uJywKLSAgICAgICAgICAgICdoZWFkZXJfZmlsZW5hbWVzJzogWwotICAgICAgICAgICAgICAjIFRoaXMgbGlzdCBjYW4gZWFzaWx5IGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGNvbW1hbmQgYmVsb3c6Ci0gICAgICAgICAgICAgICMgbHMgc291cmNlL2NvbW1vbi91bmljb2RlLypoIHwgc29ydCB8IFwKLSAgICAgICAgICAgICAgIyBzZWQgInMvXi4qY29tbW9uXC9cKC4qXCkkLyAgICAgICAgICAgICAgJ1wxJywvIgotCSAgICAgICMgQ09NTU9OX0hEUl9TVEFSVAotICAgICAgICAgICAgICAndW5pY29kZS9hcHBlbmRhYmxlLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9icmtpdGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9ieXRlc3RyZWFtLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9ieXRlc3RyaWVidWlsZGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9ieXRlc3RyaWUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2Nhbml0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2Nhc2VtYXAuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2NoYXIxNnB0ci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvY2hhcml0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2RiYmkuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2RvY21haW4uaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2R0aW50cnYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2VkaXRzLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9lbnVtc2V0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9lcnJvcmNvZGUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2ZpbHRlcmVkYnJrLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9pY3VkYXRhdmVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9pY3VwbHVnLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9pZG5hLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9sb2NhbGVidWlsZGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9sb2NhbGVtYXRjaGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9sb2NhbHBvaW50ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL2xvY2RzcG5tLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9sb2NpZC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvbWVzc2FnZXBhdHRlcm4uaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL25vcm1hbGl6ZXIyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9ub3JtbHpyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9wYXJzZWVyci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvcGFyc2Vwb3MuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3BsYXRmb3JtLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9wdHlwZXMuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3B1dGlsLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9yYmJpLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9yZXAuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Jlc2J1bmQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3NjaHJpdGVyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9zaW1wbGVmb3JtYXR0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3N0ZF9zdHJpbmcuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3N0cmVudW0uaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3N0cmluZ29wdGlvbnMuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3N0cmluZ3BpZWNlLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS9zdHJpbmd0cmllYnVpbGRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvc3ltdGFibGUuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3ViaWRpLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91YmlkaXRyYW5zZm9ybS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWJyay5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNhc2VtYXAuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjYXQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjaGFyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91Y2hhcnN0cmllYnVpbGRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNoYXJzdHJpZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNocml0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjbGVhbi5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNudl9jYi5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNudl9lcnIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjbnYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjbnZzZWwuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vjb25maWcuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VjcG1hcC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWNwdHJpZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWN1cnIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VkYXRhLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91ZGlzcGxheWNvbnRleHQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VlbnVtLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91aWRuYS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdWl0ZXIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VsZG5hbWVzLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bG9jLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bWFjaGluZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdW1pc2MuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VtdXRhYmxlY3B0cmllLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bmlmaWx0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bmlmdW5jdC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdW5pbWF0Y2guaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VuaXNldC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdW5pc3RyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91bm9ybTIuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3Vub3JtLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91b2JqZWN0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91cmVuYW1lLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91cmVwLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91cmVzLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91c2NyaXB0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91c2V0LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91c2V0aXRlci5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXNoYXBlLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91c3ByZXAuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VzdHJpbmcuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3VzdHJpbmd0cmllLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dGV4dC5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXRmMTYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3V0ZjMyLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dGY4LmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dGYuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3V0Zl9vbGQuaCcsCi0gICAgICAgICAgICAgICd1bmljb2RlL3V0cmFjZS5oJywKLSAgICAgICAgICAgICAgJ3VuaWNvZGUvdXR5cGVzLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dmVybnVtLmgnLAotICAgICAgICAgICAgICAndW5pY29kZS91dmVyc2lvbi5oJywKLQkgICAgICAjIENPTU1PTl9IRFJfRU5ECi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgJ3NoaW1faGVhZGVycy5neXBpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0J10sCi0gICAgICAgIH0sCi0gICAgICBdLCAjIHRhcmdldHMKLSAgICB9XSwKLSAgXSwgIyBjb25kaXRpb25zCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cGkgYi90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzI0M2YuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaWN1L2ljdS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAndmFyaWFibGVzJzogewotIyBmaW5kICBzb3VyY2UvaTE4biAtbWF4ZGVwdGggMSAgISAtdHlwZSBkICB8IGVncmVwICAnXC4oY3xjcHApJCcgfCBcCi0jIHNvcnQgfCBzZWQgInMvXlwoLipcKSQvICAgICAgJ1wxJywvIgotICAgICdpY3VpMThuX3NvdXJjZXMnOiBbCi0gICAgICAjIEkxOE5fU1JDX1NUQVJUCi0gICAgICAnc291cmNlL2kxOG4vYWxwaGFpbmRleC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2FueXRyYW5zLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vYXN0cm8uY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9iYXNpY3R6LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vYm9jc3UuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9icmt0cmFucy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2J1ZGRoY2FsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY2FsZW5kYXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jYXNldHJuLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY2VjYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jaG5zZWNhbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2Nob2ljZm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sZWl0ci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NvbGxhdGlvbmJ1aWxkZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb25jb21wYXJlLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uZGF0YWJ1aWxkZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb25kYXRhLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uZGF0YXJlYWRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NvbGxhdGlvbmRhdGF3cml0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb25mYXN0bGF0aW5idWlsZGVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uZmFzdGxhdGluLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uZmNkLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uaXRlcmF0b3IuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb25rZXlzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9ucm9vdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NvbGxhdGlvbnJvb3RlbGVtZW50cy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NvbGxhdGlvbnJ1bGVwYXJzZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb25zZXRzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbGF0aW9uc2V0dGluZ3MuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb250YWlsb3JpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jb2xsYXRpb253ZWlnaHRzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29sbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NvbXBhY3RkZWNpbWFsZm9ybWF0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY29wdGNjYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jcGR0cmFucy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NzZGV0ZWN0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY3NtYXRjaC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NzcjIwMjIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jc3JlY29nLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY3NybWJjcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NzcnNiY3MuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jc3J1Y29kZS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2NzcnV0ZjguY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9jdXJyYW10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY3VycmZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2N1cnJwaW5mLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vY3VycnVuaXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kYW5naWNhbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2RhdGVmbXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kYXlwZXJpb2RydWxlcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2RjZm10c3ltLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZGVjQ29udGV4dC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2RlY2ltZm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZGVjTnVtYmVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZG91YmxlLWNvbnZlcnNpb24tYmlnbnVtLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZG91YmxlLWNvbnZlcnNpb24tYmlnbnVtLWR0b2EuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kb3VibGUtY29udmVyc2lvbi1jYWNoZWQtcG93ZXJzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZG91YmxlLWNvbnZlcnNpb24tZG91YmxlLXRvLXN0cmluZy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2RvdWJsZS1jb252ZXJzaW9uLWZhc3QtZHRvYS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2RvdWJsZS1jb252ZXJzaW9uLXN0cmluZy10by1kb3VibGUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kb3VibGUtY29udmVyc2lvbi1zdHJ0b2QuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kdGZtdHN5bS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2R0aXR2Zm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZHRpdHZpbmYuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9kdHB0bmdlbi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2R0cnVsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2VyYXJ1bGVzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZXNjdHJuLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZXRocGNjYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mbXRhYmxlX2Nudi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2ZtdGFibGUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mb3JtYXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mb3JtYXR0ZWRfc3RyaW5nX2J1aWxkZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mb3JtYXR0ZWR2YWxfaXRlcmltcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mb3JtYXR0ZWR2YWxfc2JpbXBsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZm9ybWF0dGVkdmFsdWUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9mcGhkbGltcC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2Zwb3NpdGVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vZnVuY3JlcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9nZW5kZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9ncmVnb2NhbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2dyZWdvaW1wLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vaGVicndjYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9pbmRpYW5jYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9pbnB1dGV4dC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL2lzbGFtY2FsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vamFwYW5jYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9saXN0Zm9ybWF0dGVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbWVhc2ZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL21lYXN1bml0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbWVhc3VuaXRfZXh0cmEuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9tZWFzdXJlLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbXNnZm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbmFtZTJ1bmkuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9uZnJzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbmZydWxlLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbmZzdWJzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbm9ydHJhbnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udWx0cmFucy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWJlcl9hZmZpeHV0aWxzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX2FzZm9ybWF0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX2NhcGkuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfY29tcGFjdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWJlcl9jdXJyZW5jeXN5bWJvbHMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfZGVjaW1hbHF1YW50aXR5LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX2RlY2ltZm10cHJvcHMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfZmx1ZW50LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX2Zvcm1hdGltcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfZ3JvdXBpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfaW50ZWdlcndpZHRoLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX2xvbmduYW1lcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWJlcl9tYXBwZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfbW9kaWZpZXJzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX211bHRpcGxpZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfbm90YXRpb24uY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfb3V0cHV0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX3BhZGRpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfcGF0dGVybm1vZGlmaWVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtYmVyX3BhdHRlcm5zdHJpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfcm91bmRpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfc2NpZW50aWZpYy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWJlcl9za2VsZXRvbnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfc3ltYm9sc3dyYXBwZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1iZXJfdXNhZ2VwcmVmcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWJlcl91dGlscy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bWZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bXBhcnNlX2FmZml4ZXMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1wYXJzZV9jb21wb3NpdGlvbnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1wYXJzZV9jdXJyZW5jeS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bXBhcnNlX2RlY2ltYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1wYXJzZV9pbXBsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtcGFyc2VfcGFyc2VkbnVtYmVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtcGFyc2Vfc2NpZW50aWZpYy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bXBhcnNlX3N5bWJvbHMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1wYXJzZV92YWxpZGF0b3JzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vbnVtcmFuZ2VfY2FwaS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bXJhbmdlX2ZsdWVudC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL251bXJhbmdlX2ltcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9udW1zeXMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9vbHNvbnR6LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcGVyc25jYWwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9wbHVyYWxyYW5nZXMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9wbHVyZm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcGx1cnJ1bGUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9xdWFudC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3F1YW50aXR5Zm9ybWF0dGVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcmJuZi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JidC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JidF9kYXRhLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcmJ0X3BhcnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yYnRfcnVsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JidF9zZXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yYnR6LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcmVnZXhjbXAuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yZWdleGltcC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JlZ2V4c3QuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yZWdleHR4dC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JlZ2lvbi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JlbGRhdGVmbXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yZWxkdGZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JlbWF0Y2guY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9yZW10cmFucy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3JlcGF0dHJuLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vcnVsZWJhc2VkY29sbGF0b3IuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9zY2llbnRpZmljbnVtYmVyZm9ybWF0dGVyLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc2NyaXB0c2V0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc2VhcmNoLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc2VsZm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc2hhcmVkYnJlYWtpdGVyYXRvci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3NpbXBsZXR6LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc21wZHRmbXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9zbXBkdGZzdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3NvcnRrZXkuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9zdGFuZGFyZHBsdXJhbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3N0cmluZ19zZWdtZW50LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc3RybWF0Y2guY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi9zdHJyZXBsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vc3RzZWFyY2guY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi90YWl3bmNhbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3RpbWV6b25lLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdGl0bGV0cm4uY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi90bXVuaXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi90bXV0YW10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdG11dGZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3RvbG93dHJuLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdG91cHB0cm4uY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi90cmFuc2xpdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3RyYW5zcmVnLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdHJpZHBhcnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi90emZtdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3R6Z25hbWVzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdHpuYW1lcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3R6bmFtZXNfaW1wbC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3R6cnVsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3R6dHJhbnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91Y2FsLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdWNsbl9pbi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3Vjb2wuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91Y29sZWl0ci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3Vjb2xfcmVzLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdWNvbF9zaXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91Y3NkZXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91ZGF0LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdWRhdGVpbnRlcnZhbGZvcm1hdC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VkYXRwZy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VmaWVsZHBvc2l0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91aXRlcmNvbGxhdGlvbml0ZXJhdG9yLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdWxpc3Rmb3JtYXR0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91bG9jZGF0YS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3Vtc2cuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91bmVzY3Rybi5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VuaTJuYW1lLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdW5pdHNfY29tcGxleGNvbnZlcnRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VuaXRzX2NvbnZlcnRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VuaXRzX2RhdGEuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91bml0c19yb3V0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91bnVtLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdW51bXN5cy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VwbHVyYWxydWxlcy5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VyZWdleGMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91cmVnZXguY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91cmVnaW9uLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdXNlYXJjaC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VzcG9vZl9idWlsZC5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3VzcG9vZl9jb25mLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdXNwb29mLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdXNwb29mX2ltcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91dGYxNmNvbGxhdGlvbml0ZXJhdG9yLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdXRmOGNvbGxhdGlvbml0ZXJhdG9yLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vdXRtc2NhbGUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi91dHJhbnMuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi92dHpvbmUuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi92em9uZS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3dpbmR0Zm10LmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4vd2lubm1mbXQuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi93aW50emltcGwuY3BwJywKLSAgICAgICdzb3VyY2UvaTE4bi96b25lbWV0YS5jcHAnLAotICAgICAgJ3NvdXJjZS9pMThuL3pydWxlLmNwcCcsCi0gICAgICAnc291cmNlL2kxOG4venRyYW5zLmNwcCcsCi0gICAgICAjIEkxOE5fU1JDX0VORAotICAgIF0sCi0gICAgJ2ljdXVjX3NvdXJjZXMnOiBbCi0jIGZpbmQgIHNvdXJjZS9jb21tb24gLW1heGRlcHRoIDEgICEgLXR5cGUgZCAgfCBlZ3JlcCAgJ1wuKGN8Y3BwKSQnIHwgXAotIyBzb3J0IHwgc2VkICJzL15cKC4qXCkkLyAgICAgICdcMScsLyIKLSAgICAgICMgQ09NTU9OX1NSQ19TVEFSVAotICAgICAgJ3NvdXJjZS9jb21tb24vYXBwZW5kYWJsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vYm1wc2V0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9icmtlbmcuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2Jya2l0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2J5dGVzaW5rdXRpbC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vYnl0ZXN0cmVhbS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vYnl0ZXN0cmllYnVpbGRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vYnl0ZXN0cmllLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9ieXRlc3RyaWVpdGVyYXRvci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vY2FuaXRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vY2hhcmFjdGVycHJvcGVydGllcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vY2hhcml0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2NoYXJzdHIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2NtZW1vcnkuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2NzdHIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2NzdHJpbmcuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2N3Y2hhci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vZGljdGJlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9kaWN0aW9uYXJ5ZGF0YS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vZHRpbnRydi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vZWRpdHMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2Vycm9yY29kZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vZmlsdGVyZWRicmsuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2ZpbHRlcmVkbm9ybWFsaXplcjIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2ljdWRhdGF2ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2ljdXBsdWcuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2xvYWRlZG5vcm1hbGl6ZXIyaW1wbC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jYWxlYnVpbGRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jYWxlbWF0Y2hlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jYWxlcHJpb3JpdHlsaXN0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sb2NhdmFpbGFibGUuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2xvY2Jhc2VkLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sb2NkaXNwbmFtZXMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2xvY2Rpc3RhbmNlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sb2Nkc3BubS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jaWQuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL2xvY2xpa2VseS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jbGlrZWx5c3VidGFncy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbG9jbWFwLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sb2NyZXNkYXRhLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sb2N1dGlsLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9sc3IuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL21lc3NhZ2VwYXR0ZXJuLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9ub3JtYWxpemVyMi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vbm9ybWFsaXplcjJpbXBsLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9ub3JtbHpyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9wYXJzZXBvcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcGF0dGVybnByb3BzLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9wbHVyYWxtYXAuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3Byb3BuYW1lLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9wcm9wc3ZlYy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcHVueWNvZGUuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3B1dGlsLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yYmJpX2NhY2hlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yYmJpLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yYmJpZGF0YS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcmJiaW5vZGUuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3JiYmlyYi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcmJiaXNjYW4uY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3JiYmlzZXRiLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yYmJpc3RibC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcmJiaXRibGIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3Jlc2J1bmRfY252LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yZXNidW5kLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9yZXNvdXJjZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vcmVzdHJhY2UuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3J1bGVpdGVyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zY2hyaXRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vc2Vydi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vc2VydmxrLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zZXJ2bGtmLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zZXJ2bHMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3NlcnZub3RmLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zZXJ2cmJmLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zZXJ2c2xrZi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vc2hhcmVkb2JqZWN0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zaW1wbGVmb3JtYXR0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3N0YXRpY191bmljb2RlX3NldHMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3N0cmluZ3BpZWNlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi9zdHJpbmd0cmllYnVpbGRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWFycnNvcnQuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3ViaWRpLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91YmlkaWxuLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91YmlkaV9wcm9wcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWJpZGl0cmFuc2Zvcm0uY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3ViaWRpd3J0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91YnJrLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y2FzZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNhc2VtYXAuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjYXNlbWFwX3RpdGxlY2FzZV9icmtpdGVyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y2F0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y2hhci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNoYXJzdHJpZWJ1aWxkZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjaGFyc3RyaWUuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjaGFyc3RyaWVpdGVyYXRvci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNocml0ZXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbG5fY21uLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y21uZGF0YS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudjIwMjIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZfYmxkLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252Ym9jdS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudl9jYi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudl9jbnYuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnYuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZfY3QuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZkaXNwLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252X2Vyci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudl9leHQuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZoei5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudl9pby5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudmlzY2kuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZsYXQxLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252X2xtYi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudm1iY3MuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZzY3N1LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252c2VsLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252X3NldC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNudl91MTYuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VjbnZfdTMyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252X3U3LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y252X3U4LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91Y29sX3N3cC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWNwdHJpZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWN1cnIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VkYXRhLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91ZGF0YW1lbS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWRhdGFzd3AuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VlbnVtLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91aGFzaC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWhhc2hfdXMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VpZG5hLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91aW5pdC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWludmNoYXIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VpdGVyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bGlzdC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWxvYy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdWxvY19rZXl0eXBlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bG9jX3RhZy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW1hcGZpbGUuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VtYXRoLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bXV0YWJsZWNwdHJpZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW11dGV4LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bmFtZXMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VuaWZpZWRjYWNoZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pZmlsdC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pZnVuY3QuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VuaXNldF9jbG9zdXJlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bmlzZXQuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VuaXNldF9wcm9wcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pc2V0c3Bhbi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pc3RyX2Nhc2UuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VuaXN0cl9jYXNlX2xvY2FsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pc3RyX2Nudi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5pc3RyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91bmlzdHJfcHJvcHMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VuaXN0cl90aXRsZWNhc2VfYnJraXRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdW5vcm1jbXAuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3Vub3JtLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91b2JqZWN0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91cHJvcHMuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VyZXNidW5kLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91cmVzX2Nudi5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXJlc2RhdGEuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VzY19pbXBsLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c2NyaXB0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c2NyaXB0X3Byb3BzLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c2V0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c2V0aXRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXNldF9wcm9wcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXNoYXBlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c3ByZXAuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VzdGFjay5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXN0cmNhc2UuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VzdHJjYXNlX2xvY2FsZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXN0cl9jbnYuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3VzdHJlbnVtLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c3RyZm10LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c3RyaW5nLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c3RyX3RpdGxlY2FzZV9icmtpdGVyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91c3RydHJucy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXN0cl93Y3MuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3V0ZXh0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91dGZfaW1wbC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRpbC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRpbF9wcm9wcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRyYWNlLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91dHJpZTJfYnVpbGRlci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRyaWUyLmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi91dHJpZS5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRyaWVfc3dhcC5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXRzNDYuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3V0eXBlcy5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXZlY3Rvci5jcHAnLAotICAgICAgJ3NvdXJjZS9jb21tb24vdXZlY3RyMzIuY3BwJywKLSAgICAgICdzb3VyY2UvY29tbW9uL3V2ZWN0cjY0LmNwcCcsCi0gICAgICAnc291cmNlL2NvbW1vbi93aW50ei5jcHAnLAotICAgICAgIyBDT01NT05fU1JDX0VORAotICAgIF0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaWN1L2ljdV9uYWNsLmd5cCBiL3RoaXJkX3BhcnR5L2ljdS9pY3VfbmFjbC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMGZhNTMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaWN1L2ljdV9uYWNsLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICdpY3UuZ3lwaScsCi0gICAgJy4uLy4uL25hdGl2ZV9jbGllbnQvYnVpbGQvdW50cnVzdGVkLmd5cGknLAotICBdLAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgVGVsbCBJQ1UgdG8gbm90IGluc2VydCB8dXNpbmcgbmFtZXNwYWNlIGljdTt8IGludG8gaXRzIGhlYWRlcnMsCi0gICAgICAgICMgc28gdGhhdCBjaHJvbWUncyBzb3VyY2UgZXhwbGljaXRseSBoYXMgdG8gdXNlIHxpY3U6OnwuCi0gICAgICAgICdVX1VTSU5HX0lDVV9OQU1FU1BBQ0U9MCcsCi0gICAgICAgICMgV2UgZG9uJ3QgdXNlIElDVSBwbHVnaW5zIGFuZCBkeWxvYWQgaXMgb25seSBuZWNlc3NhcnkgZm9yIHRoZW0uCi0gICAgICAgICMgTmFDbC1yZWxhdGVkIGJ1aWxkcyBhbHNvIGZhaWwgbG9va2luZyBmb3IgZGxmY24uaCB3aGVuIGl0J3MgZW5hYmxlZC4KLSAgICAgICAgJ1VfRU5BQkxFX0RZTE9BRD0wJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICdVX1VTSU5HX0lDVV9OQU1FU1BBQ0U9MCcsCi0gICAgICAnVV9TVEFUSUNfSU1QTEVNRU5UQVRJT04nLAotICAgIF0sCi0gICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICdzb3VyY2UvY29tbW9uJywKLSAgICAgICdzb3VyY2UvaTE4bicsCi0gICAgXSwKLSAgICAncG5hY2xfY29tcGlsZV9mbGFncyc6IFsKLSAgICAgICctV25vLWNoYXItc3Vic2NyaXB0cycsCi0gICAgICAnLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucycsCi0gICAgICAnLVduby1oZWFkZXItaHlnaWVuZScsCi0gICAgICAnLVduby1sb2dpY2FsLW9wLXBhcmVudGhlc2VzJywKLSAgICAgICctV25vLXJldHVybi10eXBlLWMtbGlua2FnZScsCi0gICAgICAnLVduby1zd2l0Y2gnLAotICAgICAgJy1Xbm8tdGF1dG9sb2dpY2FsLWNvbXBhcmUnLAotICAgICAgJy1Xbm8tdW51c2VkLXZhcmlhYmxlJwotICAgIF0sCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpY3VkYXRhX25hY2wnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnbmxpYl90YXJnZXQnOiAnbGliaWN1ZGF0YV9uYWNsLmEnLAotICAgICAgICAnYnVpbGRfZ2xpYmMnOiAwLAotICAgICAgICAnYnVpbGRfbmV3bGliJzogMCwKLSAgICAgICAgJ2J1aWxkX3BuYWNsX25ld2xpYic6IDEsCi0gICAgICB9LAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzb3VyY2Uvc3R1YmRhdGEvc3R1YmRhdGEuYycsCi0gICAgICAgICMgVGVtcG9yYXJ5IHdvcmsgYXJvdW5kIGZvciBhbiBpbmNyZW1lbnRhbCBidWlsZCBOT1QgcmVidWlsZGluZyAKLSAgICAgICAgIyBpY3VkYXRhX25hY2wgYWZ0ZXIgYW4gSUNVIHZlcnNpb24gY2hhbmdlLgotICAgICAgICAjIFRPRE8oanVuZ3NoaWspOiBSZW1vdmUgaXQgb25jZSBhIGZpeCBmb3IgYnVnIDM4NDc1MiBpcyBpbi4KLSAgICAgICAgJ3NvdXJjZS9jb21tb24vdW5pY29kZS91dmVybnVtLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpY3VpMThuX25hY2wnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnbmxpYl90YXJnZXQnOiAnbGliaWN1aTE4bl9uYWNsLmEnLAotICAgICAgICAnYnVpbGRfZ2xpYmMnOiAwLAotICAgICAgICAnYnVpbGRfbmV3bGliJzogMCwKLSAgICAgICAgJ2J1aWxkX3BuYWNsX25ld2xpYic6IDEsCi0gICAgICB9LAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChpY3VpMThuX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1VfSTE4Tl9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2ljdXVjX25hY2wnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICdzb3VyY2UvaTE4bicsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2ljdXVjX25hY2wnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnbmxpYl90YXJnZXQnOiAnbGliaWN1dWNfbmFjbC5hJywKLSAgICAgICAgJ2J1aWxkX2dsaWJjJzogMCwKLSAgICAgICAgJ2J1aWxkX25ld2xpYic6IDAsCi0gICAgICAgICdidWlsZF9wbmFjbF9uZXdsaWInOiAxLAotICAgICAgfSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAoaWN1dWNfc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnVV9DT01NT05fSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdpY3VkYXRhX25hY2wnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICdzb3VyY2UvY29tbW9uJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1VfU1RBVElDX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2ljdS9zaGltX2hlYWRlcnMuZ3lwaSBiL3RoaXJkX3BhcnR5L2ljdS9zaGltX2hlYWRlcnMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkOGQzYS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9pY3Uvc2hpbV9oZWFkZXJzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGEgdGFyZ2V0IHRvIGhhbmRsZSBzaGltIGhlYWRlcnMKLSMgaW4gYSBjb25zaXN0ZW50IG1hbm5lci4gVG8gdXNlIHRoaXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbmVlZCB0byBiZQotIyBkZWZpbmVkOgotIyAgIGhlYWRlcnNfcm9vdF9wYXRoOiBzdHJpbmc6IHBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgaGVhZGVycwotIyAgIGhlYWRlcl9maWxlbmFtZXM6IGxpc3Q6IGxpc3Qgb2YgaGVhZGVyIGZpbGUgbmFtZXMKLQotewotICAndmFyaWFibGVzJzogewotICAgICdzaGltX2hlYWRlcnNfcGF0aCc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9zaGltX2hlYWRlcnMvPChfdGFyZ2V0X25hbWUpLzwoX3Rvb2xzZXQpJywKLSAgICAnc2hpbV9nZW5lcmF0b3JfYWRkaXRpb25hbF9hcmdzJSc6IFtdLAotICB9LAotICAnaW5jbHVkZV9kaXJzKysnOiBbCi0gICAgJzwoc2hpbV9oZWFkZXJzX3BhdGgpJywKLSAgXSwKLSAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgIyBSZXBlYXRpbmcgdGhpcyB3aXRoIGRpZmZlcmVudCBudW1iZXJzIG9mIHBsdXNzZXMgaXMgdW5mb3J0dW5hdGVseSByZXF1aXJlZAotICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGlzIGluY2x1ZGUgaXMgaW5zaWRlIG5lc3RlZCBjb25kaXRpb25zL2V0YywgaXQKLSAgICAjIHN0aWxsIGdldHMgaW5zZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5jbHVkZV9kaXJzIGxpc3QuIFNlZQotICAgICMgaHR0cDovL2NyYnVnLmNvbS8yNjM4MTggZm9yIGRldGFpbHMuCi0gICAgJ2luY2x1ZGVfZGlycysrKyc6IFsKLSAgICAgICc8KHNoaW1faGVhZGVyc19wYXRoKScsCi0gICAgXSwKLSAgICAnaW5jbHVkZV9kaXJzKysrKyc6IFsKLSAgICAgICc8KHNoaW1faGVhZGVyc19wYXRoKScsCi0gICAgXSwKLSAgICAnaW5jbHVkZV9kaXJzKysrKysnOiBbCi0gICAgICAnPChzaGltX2hlYWRlcnNfcGF0aCknLAotICAgIF0sCi0gIH0sCi0gICdhY3Rpb25zJzogWwotICAgIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdnZW5lcmF0b3JfcGF0aCc6ICc8KERFUFRIKS90b29scy9nZW5lcmF0ZV9zaGltX2hlYWRlcnMvZ2VuZXJhdGVfc2hpbV9oZWFkZXJzLnB5JywKLSAgICAgICAgJ2dlbmVyYXRvcl9hcmdzJzogWwotICAgICAgICAgICctLWhlYWRlcnMtcm9vdCcsICc8KGhlYWRlcnNfcm9vdF9wYXRoKScsCi0gICAgICAgICAgJy0tb3V0cHV0LWRpcmVjdG9yeScsICc8KHNoaW1faGVhZGVyc19wYXRoKScsCi0gICAgICAgICAgJzxAKHNoaW1fZ2VuZXJhdG9yX2FkZGl0aW9uYWxfYXJncyknLAotICAgICAgICAgICc8QChoZWFkZXJfZmlsZW5hbWVzKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlXzwoX3RhcmdldF9uYW1lKV9zaGltX2hlYWRlcnMnLAotICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgJzwoZ2VuZXJhdG9yX3BhdGgpJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgJzwhQHB5bW9kX2RvX21haW4oZ2VuZXJhdGVfc2hpbV9oZWFkZXJzIDxAKGdlbmVyYXRvcl9hcmdzKSAtLW91dHB1dHMpJywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9uJzogWydweXRob24nLAotICAgICAgICAgICAgICAgICAnPChnZW5lcmF0b3JfcGF0aCknLAotICAgICAgICAgICAgICAgICAnPEAoZ2VuZXJhdG9yX2FyZ3MpJywKLSAgICAgICAgICAgICAgICAgJy0tZ2VuZXJhdGUnLAotICAgICAgXSwKLSAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgPChfdGFyZ2V0X25hbWUpIHNoaW0gaGVhZGVycycsCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2xpYmRhdjFkLmd5cCBiL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2xpYmRhdjFkLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIxMGJhMC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9saWJkYXYxZC9saWJkYXYxZC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWydzYl9hcGlfdmVyc2lvbiA+PSAxMicsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdEQVYxRF9BUkNIX0FBUkNINjQnOiAgICdTQl9JUyhBUkNIX0FSTTY0KScsCi0gICAgICAgICdEQVYxRF9BUkNIX0FSTSc6ICAgICAgICdTQl9JUyhBUkNIX0FSTSknLAotICAgICAgICAnREFWMURfQVJDSF9QUEM2NExFJzogICAnU0JfSVMoQVJDSF9QUEMpJywKLSAgICAgICAgJ0RBVjFEX0FSQ0hfWDg2JzogICAgICAgJyhTQl9JUyhBUkNIX1g4NikgfHwgU0JfSVMoQVJDSF9YNjQpKScsCi0gICAgICAgICdEQVYxRF9BUkNIX1g4Nl8zMic6ICAgICdTQl9JUyhBUkNIX1g4NiknLAotICAgICAgICAnREFWMURfQVJDSF9YODZfNjQnOiAgICAnU0JfSVMoQVJDSF9YNjQpJywKLSAgICAgICAgJ0RBVjFEX0VORElBTk5FU1NfQklHJzogJ1NCX0lTKEJJR19FTkRJQU4pJywKLSAgICAgIH0sCi0gICAgfSwgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ0RBVjFEX0FSQ0hfQUFSQ0g2NCc6ICAgJyhTQl9JU19BUkNIX0FSTSAmIFNCX0lTXzY0X0JJVCknLAotICAgICAgICAnREFWMURfQVJDSF9BUk0nOiAgICAgICAnKFNCX0lTX0FSQ0hfQVJNICYgU0JfSVNfMzJfQklUKScsCi0gICAgICAgICdEQVYxRF9BUkNIX1BQQzY0TEUnOiAgICdTQl9JU19BUkNIX1BQQycsCi0gICAgICAgICdEQVYxRF9BUkNIX1g4Nic6ICAgICAgICdTQl9JU19BUkNIX1g4NicsCi0gICAgICAgICdEQVYxRF9BUkNIX1g4Nl8zMic6ICAgICcoU0JfSVNfQVJDSF9YODYgJiBTQl9JU18zMl9CSVQpJywKLSAgICAgICAgJ0RBVjFEX0FSQ0hfWDg2XzY0JzogICAgJyhTQl9JU19BUkNIX1g4NiAmIFNCX0lTXzY0X0JJVCknLAotICAgICAgICAnREFWMURfRU5ESUFOTkVTU19CSUcnOiAnU0JfSVNfQklHX0VORElBTicsCi0gICAgICB9LAotICAgIH1dLAotICBdLAotCi0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2VuYWJsZV9hc20nOiAwLAotCi0gICAgJ2xpYmRhdjFkX2Rpcic6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJkYXYxZCcsCi0KLSAgICAnbGliZGF2MWRfaW5jbHVkZV9kaXJzJzogWwotICAgICAgJzwobGliZGF2MWRfZGlyKS8nLAotICAgICAgJzwobGliZGF2MWRfZGlyKS9pbmNsdWRlJywKLSAgICAgICc8KGxpYmRhdjFkX2RpcikvaW5jbHVkZS9kYXYxZCcsCi0gICAgXSwKLQotICAgICMgQklUREVQVEgtc3BlY2lmaWMgc291cmNlcwotICAgICMgIE5vdGU6IHRoZXNlIGZpbGVzIG11c3QgYmUgY29tcGlsZWQgd2l0aCAtREJJVERFUFRIPTggb3IgMTYKLSAgICAnbGliZGF2MWRfYml0ZGVwdGhfc291cmNlcyc6IFsKLSAgICAgICdzcmMvY2RlZi5oJywKLSAgICAgICdzcmMvY2RlZl9hcHBseS5oJywKLSAgICAgICdzcmMvY2RlZl9hcHBseV90bXBsLmMnLAotICAgICAgJ3NyYy9jZGVmX3RtcGwuYycsCi0gICAgICAnc3JjL2ZnX2FwcGx5LmgnLAotICAgICAgJ3NyYy9mZ19hcHBseV90bXBsLmMnLAotICAgICAgJ3NyYy9maWxtX2dyYWluLmgnLAotICAgICAgJ3NyYy9maWxtX2dyYWluX3RtcGwuYycsCi0gICAgICAnc3JjL2lwcmVkLmgnLAotICAgICAgJ3NyYy9pcHJlZF9wcmVwYXJlLmgnLAotICAgICAgJ3NyYy9pcHJlZF9wcmVwYXJlX3RtcGwuYycsCi0gICAgICAnc3JjL2lwcmVkX3RtcGwuYycsCi0gICAgICAnc3JjL2l0eC5oJywKLSAgICAgICdzcmMvaXR4X3RtcGwuYycsCi0gICAgICAnc3JjL2xmX2FwcGx5LmgnLAotICAgICAgJ3NyYy9sZl9hcHBseV90bXBsLmMnLAotICAgICAgJ3NyYy9sb29wZmlsdGVyLmgnLAotICAgICAgJ3NyYy9sb29wZmlsdGVyX3RtcGwuYycsCi0gICAgICAnc3JjL2xvb3ByZXN0b3JhdGlvbi5oJywKLSAgICAgICdzcmMvbG9vcHJlc3RvcmF0aW9uX3RtcGwuYycsCi0gICAgICAnc3JjL2xyX2FwcGx5LmgnLAotICAgICAgJ3NyYy9scl9hcHBseV90bXBsLmMnLAotICAgICAgJ3NyYy9tYy5oJywKLSAgICAgICdzcmMvbWNfdG1wbC5jJywKLSAgICAgICdzcmMvcmVjb24uaCcsCi0gICAgICAnc3JjL3JlY29uX3RtcGwuYycsCi0gICAgXSwKLQotICAgICMgQVJDSC1zcGVjaWZpYyBzb3VyY2VzCi0gICAgJ2xpYmRhdjFkX2FyY2hfc291cmNlcyc6IFtdLAotICAgICdsaWJkYXYxZF9hcmNoX2JpdGRlcHRoX3NvdXJjZXMnOiBbXSwKLQotICAgICMgQVNNLXNwZWNpZmljIHNvdXJjZXMKLSAgICAnbGliZGF2MWRfYmFzZV9hc21fc291cmNlcyc6IFtdLAotICAgICdsaWJkYXYxZF9iaXRkZXB0aDhfYXNtX3NvdXJjZXMnOiBbXSwKLSAgICAnbGliZGF2MWRfYml0ZGVwdGgxNl9hc21fc291cmNlcyc6IFtdLAotCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJ2VuYWJsZV9hc20gPT0gMSBhbmQgKHRhcmdldF9hcmNoID09ICJ4ODYiIG9yIHRhcmdldF9hcmNoID09ICJ4NjQiKScsIHsKLSAgICAgICAgJ2xpYmRhdjFkX2FyY2hfc291cmNlcyc6IFsKLSAgICAgICAgICAnc3JjL3g4Ni9jcHUuYycsCi0gICAgICAgICAgJ3NyYy94ODYvY3B1LmgnLAotICAgICAgICAgICdzcmMveDg2L21zYWMuaCcsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJkYXYxZF9hcmNoX2JpdGRlcHRoX3NvdXJjZXMnOiBbCi0gICAgICAgICAgJ3NyYy94ODYvY2RlZl9pbml0X3RtcGwuYycsCi0gICAgICAgICAgJ3NyYy94ODYvZmlsbV9ncmFpbl9pbml0X3RtcGwuYycsCi0gICAgICAgICAgJ3NyYy94ODYvaXByZWRfaW5pdF90bXBsLmMnLAotICAgICAgICAgICdzcmMveDg2L2l0eF9pbml0X3RtcGwuYycsCi0gICAgICAgICAgJ3NyYy94ODYvbG9vcGZpbHRlcl9pbml0X3RtcGwuYycsCi0gICAgICAgICAgJ3NyYy94ODYvbG9vcHJlc3RvcmF0aW9uX2luaXRfdG1wbC5jJywKLSAgICAgICAgICAnc3JjL3g4Ni9tY19pbml0X3RtcGwuYycsCi0gICAgICAgIF0sCi0gICAgICAgICdsaWJkYXYxZF9iYXNlX2FzbV9zb3VyY2VzJzogWwotICAgICAgICAgICdzcmMveDg2L2NwdWlkLmFzbScsCi0gICAgICAgICAgJ3NyYy94ODYvbXNhYy5hc20nLAotICAgICAgICBdLAotICAgICAgICAnbGliZGF2MWRfYml0ZGVwdGg4X2FzbV9zb3VyY2VzJzogWwotICAgICAgICAgICdzcmMveDg2L2NkZWYuYXNtJywKLSAgICAgICAgICAnc3JjL3g4Ni9jZGVmX3NzZS5hc20nLAotICAgICAgICAgICdzcmMveDg2L2ZpbG1fZ3JhaW4uYXNtJywKLSAgICAgICAgICAnc3JjL3g4Ni9pcHJlZC5hc20nLAotICAgICAgICAgICdzcmMveDg2L2lwcmVkX3Nzc2UzLmFzbScsCi0gICAgICAgICAgJ3NyYy94ODYvaXR4LmFzbScsCi0gICAgICAgICAgJ3NyYy94ODYvaXR4X3Nzc2UzLmFzbScsCi0gICAgICAgICAgJ3NyYy94ODYvbG9vcGZpbHRlci5hc20nLAotICAgICAgICAgICdzcmMveDg2L2xvb3BmaWx0ZXJfc3NzZTMuYXNtJywKLSAgICAgICAgICAnc3JjL3g4Ni9sb29wcmVzdG9yYXRpb24uYXNtJywKLSAgICAgICAgICAnc3JjL3g4Ni9sb29wcmVzdG9yYXRpb25fc3NzZTMuYXNtJywKLSAgICAgICAgICAnc3JjL3g4Ni9tYy5hc20nLAotICAgICAgICAgICdzcmMveDg2L21jX3Nzc2UzLmFzbScsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJkYXYxZC8nLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2luY2x1ZGUnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2luY2x1ZGUvZGF2MWQnLAotICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYmRhdjFkL3NyYycsCi0gICAgXSwKLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICdBUkNIX0FBUkNINjQ9PChEQVYxRF9BUkNIX0FBUkNINjQpJywKLSAgICAgICdBUkNIX0FSTT08KERBVjFEX0FSQ0hfQVJNKScsCi0gICAgICAnQVJDSF9QUEM2NExFPTwoREFWMURfQVJDSF9QUEM2NExFKScsCi0gICAgICAnQVJDSF9YODY9PChEQVYxRF9BUkNIX1g4NiknLAotICAgICAgJ0FSQ0hfWDg2XzMyPTwoREFWMURfQVJDSF9YODZfMzIpJywKLSAgICAgICdBUkNIX1g4Nl82ND08KERBVjFEX0FSQ0hfWDg2XzY0KScsCi0gICAgICAnQ09ORklHXzE2QlBDPTEnLAotICAgICAgJ0NPTkZJR184QlBDPTEnLAotICAgICAgJ0NPTkZJR19MT0c9MScsCi0gICAgICAnRU5ESUFOTkVTU19CSUc9PChEQVYxRF9FTkRJQU5ORVNTX0JJRyknLAotICAgICAgJ0hBVkVfQVNNPTwoZW5hYmxlX2FzbSknLAotICAgIF0sCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsndGFyZ2V0X29zID09ICJsaW51eCInLCB7Ci0gICAgICAgICdkZWZpbmVzJzpbCi0gICAgICAgICAgJ0hBVkVfQ0xPQ0tfR0VUVElNRT0xJywKLSAgICAgICAgICAnSEFWRV9QT1NJWF9NRU1BTElHTj0xJywKLSAgICAgICAgICAnSEFWRV9VTklTVERfSD0xJywKLSAgICAgICAgICAnU1RBQ0tfQUxJR05NRU5UPTMyJywKLSAgICAgICAgXQotICAgICAgfV0sCi0KLSAgICAgIFsndGFyZ2V0X29zID09ICJ3aW4iJywgewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICMgZm9yIHN0ZGF0b21pYy5oCi0gICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2luY2x1ZGUvY29tcGF0L21zdmMnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6WwotICAgICAgICAgICdIQVZFX0FMSUdORURfTUFMTE9DPTEnLAotICAgICAgICAgICdIQVZFX0lPX0g9MScsCi0gICAgICAgICAgJ1VOSUNPREU9MScsCi0gICAgICAgICAgJ19DUlRfREVDTEFSRV9OT05TVERDX05BTUVTPTEnLAotICAgICAgICAgICdfVU5JQ09ERT0xJywKLSAgICAgICAgICAnX1dJTjMyX1dJTk5UPTB4MDYwMScsCi0gICAgICAgICAgJ19fVVNFX01JTkdXX0FOU0lfU1RESU89MScsCi0gICAgICAgICAgJ2ZzZWVrbz1fZnNlZWtpNjQnLAotICAgICAgICAgICdmdGVsbG89X2Z0ZWxsaTY0JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAnLXdkNDAyOCcsCi0gICAgICAgICAgJy13ZDQ5OTYnLAotICAgICAgICBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ3RhcmdldF9hcmNoID09ICJ4NjQiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdTVEFDS19BTElHTk1FTlQ9MTYnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1NUQUNLX0FMSUdOTUVOVD00JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJkYXYxZF9lbnRyeXBvaW50JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3JjL2xpYi5jJywKLSAgICAgICAgJ3NyYy90aHJlYWRfdGFzay5jJywKLSAgICAgICAgJ3NyYy90aHJlYWRfdGFzay5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGliZGF2MWRfYml0ZGVwdGgxNicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0JJVERFUFRIPTE2JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGxpYmRhdjFkX2FyY2hfYml0ZGVwdGhfc291cmNlcyknLAotICAgICAgICAnPEAobGliZGF2MWRfYml0ZGVwdGhfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJkYXYxZF9iaXRkZXB0aDE2X2FzbScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0JJVERFUFRIPTE2JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICdsaWJkYXYxZF9hc20uZ3lwaScKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGxpYmRhdjFkX2JpdGRlcHRoMTZfYXNtX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGliZGF2MWRfYml0ZGVwdGg4JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnQklUREVQVEg9OCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8QChsaWJkYXYxZF9hcmNoX2JpdGRlcHRoX3NvdXJjZXMpJywKLSAgICAgICAgJzxAKGxpYmRhdjFkX2JpdGRlcHRoX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGliZGF2MWRfYml0ZGVwdGg4X2FzbScsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ0JJVERFUFRIPTgnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJ2xpYmRhdjFkX2FzbS5neXBpJwotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAobGliZGF2MWRfYml0ZGVwdGg4X2FzbV9zb3VyY2VzKScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmRhdjFkX2Jhc2UnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzcmMvY3B1LmMnLAotICAgICAgICAnc3JjL2NwdS5oJywKLSAgICAgICAgJ3NyYy9tc2FjLmMnLAotICAgICAgICAnc3JjL21zYWMuaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYmRhdjFkX2Jhc2VfYXNtJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlcyc6IFsKLSAgICAgICAgJ2xpYmRhdjFkX2FzbS5neXBpJwotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAobGliZGF2MWRfYXJjaF9zb3VyY2VzKScsCi0gICAgICAgICc8QChsaWJkYXYxZF9iYXNlX2FzbV9zb3VyY2VzKScKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGliZGF2MWQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzcmMvY2RmLmMnLAotICAgICAgICAnc3JjL2NkZi5oJywKLSAgICAgICAgJ3NyYy9jdHguaCcsCi0gICAgICAgICdzcmMvZGF0YS5jJywKLSAgICAgICAgJ3NyYy9kYXRhLmgnLAotICAgICAgICAnc3JjL2RlY29kZS5jJywKLSAgICAgICAgJ3NyYy9kZWNvZGUuaCcsCi0gICAgICAgICdzcmMvZGVxdWFudF90YWJsZXMuYycsCi0gICAgICAgICdzcmMvZGVxdWFudF90YWJsZXMuaCcsCi0gICAgICAgICdzcmMvZW52LmgnLAotICAgICAgICAnc3JjL2dldGJpdHMuYycsCi0gICAgICAgICdzcmMvZ2V0Yml0cy5oJywKLSAgICAgICAgJ3NyYy9pbnRlcm5hbC5oJywKLSAgICAgICAgJ3NyYy9pbnRyYV9lZGdlLmMnLAotICAgICAgICAnc3JjL2ludHJhX2VkZ2UuaCcsCi0gICAgICAgICdzcmMvbGV2ZWxzLmgnLAotICAgICAgICAnc3JjL2xmX21hc2suYycsCi0gICAgICAgICdzcmMvbGZfbWFzay5oJywKLSAgICAgICAgJ3NyYy9sb2cuYycsCi0gICAgICAgICdzcmMvbG9nLmgnLAotICAgICAgICAnc3JjL29idS5jJywKLSAgICAgICAgJ3NyYy9vYnUuaCcsCi0gICAgICAgICdzcmMvcGljdHVyZS5jJywKLSAgICAgICAgJ3NyYy9waWN0dXJlLmgnLAotICAgICAgICAnc3JjL3FtLmMnLAotICAgICAgICAnc3JjL3FtLmgnLAotICAgICAgICAnc3JjL3JlZi5jJywKLSAgICAgICAgJ3NyYy9yZWYuaCcsCi0gICAgICAgICdzcmMvcmVmX212cy5jJywKLSAgICAgICAgJ3NyYy9yZWZfbXZzLmgnLAotICAgICAgICAnc3JjL3NjYW4uYycsCi0gICAgICAgICdzcmMvc2Nhbi5oJywKLSAgICAgICAgJ3NyYy90YWJsZXMuYycsCi0gICAgICAgICdzcmMvdGFibGVzLmgnLAotICAgICAgICAnc3JjL3RocmVhZC5oJywKLSAgICAgICAgJ3NyYy90aHJlYWRfZGF0YS5oJywKLSAgICAgICAgJ3NyYy93YXJwbXYuYycsCi0gICAgICAgICdzcmMvd2FycG12LmgnLAotICAgICAgICAnc3JjL3dlZGdlLmMnLAotICAgICAgICAnc3JjL3dlZGdlLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJ2xpYmRhdjFkX2Jhc2UnLAotICAgICAgICAnbGliZGF2MWRfYmFzZV9hc20nLAotICAgICAgICAnbGliZGF2MWRfYml0ZGVwdGgxNicsCi0gICAgICAgICdsaWJkYXYxZF9iaXRkZXB0aDE2X2FzbScsCi0gICAgICAgICdsaWJkYXYxZF9iaXRkZXB0aDgnLAotICAgICAgICAnbGliZGF2MWRfYml0ZGVwdGg4X2FzbScsCi0gICAgICAgICdsaWJkYXYxZF9lbnRyeXBvaW50JywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPEAobGliZGF2MWRfaW5jbHVkZV9kaXJzKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJkYXYxZC9saWJkYXYxZF9hc20uZ3lwaSBiL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2xpYmRhdjFkX2FzbS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTJiODk1Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2xpYmRhdjFkL2xpYmRhdjFkX2FzbS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICdjb25kaXRpb25zJzogWwotICAgIFsndGFyZ2V0X2FyY2ggPT0gIng2NCIgb3IgdGFyZ2V0X2FyY2ggPT0gIng4NiInLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnREFWMURfSVNfUElDJzogJzEnLAotICAgICAgfSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3RhcmdldF9hcmNoID09ICJ4NjQiJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnREFWMURfQVJDSF9YODZfMzInOiAnMCcsCi0gICAgICAgICAgICAnREFWMURfQVJDSF9YODZfNjQnOiAnMScsCi0gICAgICAgICAgfQotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdEQVYxRF9BUkNIX1g4Nl8zMic6ICcxJywKLSAgICAgICAgICAgICdEQVYxRF9BUkNIX1g4Nl82NCc6ICcwJywKLSAgICAgICAgICB9Ci0gICAgICAgIH1dCi0gICAgICBdLAotICAgIH1dLAotICAgIFsndGFyZ2V0X29zID09ICJsaW51eCInLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnREFWMURfU1RBQ0tfQUxJR05NRU5UJzogJzMyJywKLSAgICAgIH0sCi0gICAgfV0sCi0gICAgWyd0YXJnZXRfb3MgPT0gIndpbiInLCB7Ci0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAieDY0IicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ0RBVjFEX1NUQUNLX0FMSUdOTUVOVCc6ICcxNicsCi0gICAgICAgICAgfQotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdEQVYxRF9TVEFDS19BTElHTk1FTlQnOiAnNCcsCi0gICAgICAgICAgfQotICAgICAgICB9XQotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLSAgJ3J1bGVzJzogW3sKLSAgICAncnVsZV9uYW1lJzogJ2Fzc2VtYmxlJywKLSAgICAnZXh0ZW5zaW9uJzogJ2FzbScsCi0gICAgJ2lucHV0cyc6IFtdLAotICAgICdvdXRwdXRzJzogWwotICAgICAgJzwoUFJPRFVDVF9ESVIpL29iai90aGlyZF9wYXJ0eS9saWJkYXYxZC88KFJVTEVfSU5QVVRfUk9PVCkuYXNtLm8nLAotICAgIF0sCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsndGFyZ2V0X29zID09ICJ3aW4iJywgewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICdOQVNNX0VYRUNVVEFCTEUnOiAnbmFzbS5leGUnLAotICAgICAgICAgICdOQVNNX09VVFBVVF9GT1JNQVQnIDogJ3dpbicsCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICAgIFsndGFyZ2V0X29zID09ICJsaW51eCInLCB7Ci0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ05BU01fRVhFQ1VUQUJMRSc6ICcvdXNyL2Jpbi9uYXNtJywKLSAgICAgICAgICAnTkFTTV9PVVRQVVRfRk9STUFUJzogJ2VsZicsCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICAgIFsndGFyZ2V0X2FyY2ggPT0gIng4NiInLCB7Ci0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ05BU01fT1VUUFVUX1NJWkUnOiAnMzInCi0gICAgICAgIH0sCi0gICAgICB9LCB7Ci0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ05BU01fT1VUUFVUX1NJWkUnOiAnNjQnCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICBdLAotCi0gICAgJ2FjdGlvbic6IFsKLSAgICAgICc8KE5BU01fRVhFQ1VUQUJMRSknLAotICAgICAgJy1mPChOQVNNX09VVFBVVF9GT1JNQVQpPChOQVNNX09VVFBVVF9TSVpFKScsCi0gICAgICAnLURTVEFDS19BTElHTk1FTlQ9PChEQVYxRF9TVEFDS19BTElHTk1FTlQpJywKLSAgICAgICctREFSQ0hfWDg2XzMyPTwoREFWMURfQVJDSF9YODZfMzIpJywKLSAgICAgICctREFSQ0hfWDg2XzY0PTwoREFWMURfQVJDSF9YODZfNjQpJywKLSAgICAgICctRFBJQz08KERBVjFEX0lTX1BJQyknLAotICAgICAgJy1JPChERVBUSCkvdGhpcmRfcGFydHkvbGliZGF2MWQvaW5jbHVkZScsCi0gICAgICAnLUk8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJkYXYxZC9zcmMnLAotICAgICAgJy1NUTwoUFJPRFVDVF9ESVIpLyRvdXQnLAotICAgICAgJy1NRjwoUFJPRFVDVF9ESVIpLyRvdXQubmRlcCcsCi0gICAgICAnLW88KFBST0RVQ1RfRElSKS8kb3V0JywKLSAgICAgICc8KFJVTEVfSU5QVVRfUEFUSCknLAotICAgIF0sCi0gICAgJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJzogMSwKLSAgICAnbWVzc2FnZSc6ICdCdWlsZGluZyA8KFJVTEVfSU5QVVRfUk9PVCkuYXNtLm8nLAotICB9XSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xpYmRhdjFkL3NyYy90aHJlYWQuaCBiL3RoaXJkX3BhcnR5L2xpYmRhdjFkL3NyYy90aHJlYWQuaAppbmRleCBiMmM1YjZjLi5kNDU3ODEyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9saWJkYXYxZC9zcmMvdGhyZWFkLmgKKysrIGIvdGhpcmRfcGFydHkvbGliZGF2MWQvc3JjL3RocmVhZC5oCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogCiB0eXBlZGVmIFNiVGhyZWFkIGRhdjFkX3B0aHJlYWRfdDsKIHR5cGVkZWYgU2JNdXRleCBkYXYxZF9wdGhyZWFkX211dGV4X3Q7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJldmVudC9saWJldmVudC5neXAgYi90aGlyZF9wYXJ0eS9saWJldmVudC9saWJldmVudC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMmRiOTcuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGliZXZlbnQvbGliZXZlbnQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAndXNlX3N5c3RlbV9saWJldmVudCUnOiAwLAotICB9LAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ3VzZV9zeXN0ZW1fbGliZXZlbnQ9PTAnLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJldmVudCcsCi0gICAgICAgICAgJ3Byb2R1Y3RfbmFtZSc6ICdldmVudCcsCi0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdidWZmZXIuYycsCi0gICAgICAgICAgICAnZXBvbGwuYycsCi0gICAgICAgICAgICAnZXZidWZmZXIuYycsCi0gICAgICAgICAgICAnZXZkbnMuYycsCi0gICAgICAgICAgICAnZXZlbnQuYycsCi0gICAgICAgICAgICAnZXZlbnRfdGFnZ2luZy5jJywKLSAgICAgICAgICAgICdldnJwYy5jJywKLSAgICAgICAgICAgICdldnV0aWwuYycsCi0gICAgICAgICAgICAnaHR0cC5jJywKLSAgICAgICAgICAgICdrcXVldWUuYycsCi0gICAgICAgICAgICAnbG9nLmMnLAotICAgICAgICAgICAgJ3BvbGwuYycsCi0gICAgICAgICAgICAnc2VsZWN0LmMnLAotICAgICAgICAgICAgJ3NpZ25hbC5jJywKLSAgICAgICAgICAgICdzdHJsY3B5LmMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnSEFWRV9DT05GSUdfSCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICMgU3RhcmJvYXJkIGNvdWxkIGJlIGFueSBvdGhlciB1bmRlcmx5aW5nIHBsYXRmb3JtLCBzbyB3ZSB1c2UKLSAgICAgICAgICAgICMgdGFyZ2V0X2FyY2ggdG8gdGVsbCB0aGUgZGlmZmVyZW5jZS4gTGliZXZlbnQgaXMgaXRzZWxmIGEgcGxhdGZvcm0KLSAgICAgICAgICAgICMgYWJzdHJhY3Rpb24gbGlicmFyeSwgc28gU3RhcmJvYXJkIGRlcGVuZHMgb24gaXQgdG8gaW1wbGVtZW50IGl0cwotICAgICAgICAgICAgIyBTYlNvY2tldFdhaXRlciBBUEkuIFRoaXMgbWVhbnMgdGhlIExpYmV2ZW50IGlzIGJlbG93IHRoZSBTdGFyYm9hcmQKLSAgICAgICAgICAgICMgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGluZS4KLSAgICAgICAgICAgIFsgJ09TID09ICJzdGFyYm9hcmQiJywgewotICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgJ2J1ZmZlci5jJywKLSAgICAgICAgICAgICAgICAnZXZidWZmZXIuYycsCi0gICAgICAgICAgICAgICAgJ2V2ZG5zLmMnLAotICAgICAgICAgICAgICAgICdldmVudF90YWdnaW5nLmMnLAotICAgICAgICAgICAgICAgICdldnJwYy5jJywKLSAgICAgICAgICAgICAgICAnaHR0cC5jJywKLSAgICAgICAgICAgICAgICAnc2VsZWN0LmMnLAotICAgICAgICAgICAgICAgICdzaWduYWwuYycsCi0gICAgICAgICAgICAgICAgJ3N0cmxjcHkuYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbICdzdGFyYm9hcmQnIF0sCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsgJ3NiX2xpYmV2ZW50X21ldGhvZCA9PSAiZXBvbGwiJywgewotICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICAgICAgICAna3F1ZXVlLmMnLAotICAgICAgICAgICAgICAgICAgICAncG9sbC5jJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWyAnc2JfbGliZXZlbnRfbWV0aG9kID09ICJwb2xsIicsIHsKLSAgICAgICAgICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICAgICAgICAgJ2Vwb2xsLmMnLAotICAgICAgICAgICAgICAgICAgICAna3F1ZXVlLmMnLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbICdzYl9saWJldmVudF9tZXRob2QgPT0gImtxdWV1ZSInLCB7Ci0gICAgICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgICAgICdlcG9sbC5jJywKLSAgICAgICAgICAgICAgICAgICAgJ3BvbGwuYycsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsgJ3RhcmdldF9vcyA9PSAibGludXgiJywgewotICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbICdlcG9sbF9zdWIuYycgXSwKLSAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbICdzdGFyYm9hcmQvbGludXgnIF0sCi0gICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnLWxydCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICMgVE9ETzogTWFrZSB0aGlzIGFuZHJvaWQgc3BlY2lmaWMsIG5vdCBhIGxpbnV4IGNvcHkuCi0gICAgICAgICAgICAgICAgWyAndGFyZ2V0X29zID09ICJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWyAnZXBvbGxfc3ViLmMnIF0sCi0gICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWyAnc3RhcmJvYXJkL2xpbnV4JyBdLAotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICMgbGliZXZlbnQgaGFzIHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZpbGVzLiAgU2luY2UgaXRzCi0gICAgICAgICAgICAjIG5hdGl2ZSBidWlsZCB1c2VzIGF1dG9jb25mLCBwbGF0Zm9ybS1zcGVjaWZpYyBjb25maWcuaCBmaWxlcyBhcmUKLSAgICAgICAgICAgICMgcHJvdmlkZWQgYW5kIGxpdmUgaW4gcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMuCi0gICAgICAgICAgICBbICdPUyA9PSAibGludXgiIG9yIChPUyA9PSAiYW5kcm9pZCIgYW5kIF90b29sc2V0ID09ICJob3N0IiknLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWyAnZXBvbGwuYycsICdlcG9sbF9zdWIuYycgXSwKLSAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJ2xpbnV4JyBdLAotICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHJ0IGZvciBjbG9ja19nZXR0aW1lKCkuCi0gICAgICAgICAgICAgICAgICAjIFRPRE8ocG9ydCkgTWF5YmUgb24gRnJlZUJTRCBhcyB3ZWxsPwotICAgICAgICAgICAgICAgICAgJy1scnQnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsgJyhPUyA9PSAiYW5kcm9pZCIgb3IgKE9TID09ICJsYl9zaGVsbCIgYW5kIHRhcmdldF9hcmNoID09ICJhbmRyb2lkIikpIGFuZCBfdG9vbHNldCA9PSAidGFyZ2V0IicsIHsKLSAgICAgICAgICAgICAgIyBPbiBhbmRyb2lkLCBlcG9sbF9jcmVhdGUoKSwgZXBvbGxfY3RsKCksIGVwb2xsX3dhaXQoKSBhbmQKLSAgICAgICAgICAgICAgIyBjbG9ja19nZXR0aW1lKCkgYXJlIGFsbCBpbiBsaWJjLnNvLCBzbyBubyBuZWVkIHRvIGFkZAotICAgICAgICAgICAgICAjIGVwb2xsX3N1Yi5jIGFuZCBsaW5rIGxpYnJ0LgotICAgICAgICAgICAgICAnc291cmNlcyc6IFsgJ2Vwb2xsLmMnIF0sCi0gICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbICdhbmRyb2lkJyBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbICdPUyA9PSAibWFjIiBvciBPUyA9PSAiaW9zIiBvciBvc19ic2Q9PTEnLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWyAna3F1ZXVlLmMnIF0sCi0gICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbICdtYWMnIF0KLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyAnT1MgPT0gInNvbGFyaXMiJywgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsgJ2RldnBvbGwuYycsICdldnBvcnQuYycgXSwKLSAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsgJ3NvbGFyaXMnIF0KLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH0sIHsgICMgdXNlX3N5c3RlbV9saWJldmVudCAhPSAwCi0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJldmVudCcsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdVU0VfU1lTVEVNX0xJQkVWRU5UJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbGV2ZW50JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfQotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQlVJTEQuZ24gYi90aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL0JVSUxELmduCmluZGV4IGVkNDc2ZDcuLjg4YmNiNTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vQlVJTEQuZ24KKysrIGIvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9CVUlMRC5nbgpAQCAtMTQ5LDggKzE0OSw3IEBACiAjIFRPRE8oYi8yMDY2NDI5OTQpOiBsb29rIGludG8gd2hldGhlciB3ZSBzaG91bGQgY29uZGl0aW9uIG9uIHRoZQogIyBmbG9hdGluZ19wb2ludF9mcHUgU0FCSSB2YXJpYWJsZSwgcmF0aGVyIHRoYW4gc2JfaXNfZXZlcmdyZWVuLCBoZXJlIGFzIHdlIGRpZAogIyBpbiB0aGlyZF9wYXJ0eS9saWJqcGVnLXR1cmJvL2xpYmpwZWcuZ3lwLgotaWYgKGlzX3N0YXJib2FyZCAmJiBzYl9pc19ldmVyZ3JlZW4gJiYKLSAgICAoY3VycmVudF9jcHUgPT0gImFybSIgfHwgY3VycmVudF9jcHUgPT0gImFybTY0IikgJiYgYXJtX3VzZV9uZW9uKSB7CitpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiBjdXJyZW50X2NwdSA9PSAiYXJtIiAmJiBhcm1fdXNlX25lb24pIHsKICAgY29uZmlnKCJzaW1kX2FybV9jb25maWciKSB7CiAgICAgY2ZsYWdzID0gWyAiLW1mcHU9bmVvbiIgXQogICB9CkBAIC0yMDMsNyArMjAyLDcgQEAKICAgICB9CiAgICAgY29uZmlncyArPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpvcHRpbWl6ZV9zcGVlZCIgXQogCi0gICAgaWYgKGlzX3N0YXJib2FyZCAmJiBzYl9pc19ldmVyZ3JlZW4pIHsKKyAgICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiBjdXJyZW50X2NwdSA9PSAiYXJtIikgewogICAgICAgY29uZmlncyArPSBbICI6c2ltZF9hcm1fY29uZmlnIiBdCiAgICAgfQogICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLmd5cCBiL3RoaXJkX3BhcnR5L2xpYmpwZWctdHVyYm8vbGlianBlZy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NDhhOTEuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGlianBlZy10dXJiby9saWJqcGVnLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICAgICdpc19zdGFyYm9hcmQnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGlianBlZycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLicsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdCTVBfU1VQUE9SVEVEJywKLSAgICAgICAgJ1BQTV9TVVBQT1JURUQnLAotICAgICAgXSwKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdub19zaW1kX2ZpbGVzJzogWwotICAgICAgICAgICdqc2ltZC5oJywKLSAgICAgICAgICAnanNpbWRfbm9uZS5jJywKLSAgICAgICAgXQotICAgICAgfSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY2RqcGVnLmgnLAotICAgICAgICAnamFyaWNvbS5jJywKLSAgICAgICAgJ2pjYXBpbWluLmMnLAotICAgICAgICAnamNhcGlzdGQuYycsCi0gICAgICAgICdqY2FyaXRoLmMnLAotICAgICAgICAnamNjb2VmY3QuYycsCi0gICAgICAgICdqY2NvbG9yLmMnLAotICAgICAgICAnamNkY3RtZ3IuYycsCi0gICAgICAgICdqY2h1ZmYuYycsCi0gICAgICAgICdqY2h1ZmYuaCcsCi0gICAgICAgICdqY2luaXQuYycsCi0gICAgICAgICdqY21haW5jdC5jJywKLSAgICAgICAgJ2pjbWFya2VyLmMnLAotICAgICAgICAnamNtYXN0ZXIuYycsCi0gICAgICAgICdqY29tYXBpLmMnLAotICAgICAgICAnamNvbmZpZy5oJywKLSAgICAgICAgJ2pjb25maWdpbnQuaCcsCi0gICAgICAgICdqY3BhcmFtLmMnLAotICAgICAgICAnamNwaHVmZi5jJywKLSAgICAgICAgJ2pjcHJlcGN0LmMnLAotICAgICAgICAnamNzYW1wbGUuYycsCi0gICAgICAgICdqY3RyYW5zLmMnLAotICAgICAgICAnamRhcGltaW4uYycsCi0gICAgICAgICdqZGFwaXN0ZC5jJywKLSAgICAgICAgJ2pkYXJpdGguYycsCi0gICAgICAgICdqZGF0YWRzdC5jJywKLSAgICAgICAgJ2pkYXRhZHN0LXRqLmMnLAotICAgICAgICAnamRhdGFzcmMuYycsCi0gICAgICAgICdqZGF0YXNyYy10ai5jJywKLSAgICAgICAgJ2pkY29lZmN0LmMnLAotICAgICAgICAnamRjb2xvci5jJywKLSAgICAgICAgJ2pkY3QuaCcsCi0gICAgICAgICdqZGRjdG1nci5jJywKLSAgICAgICAgJ2pkaHVmZi5jJywKLSAgICAgICAgJ2pkaHVmZi5oJywKLSAgICAgICAgJ2pkaW5wdXQuYycsCi0gICAgICAgICdqZG1haW5jdC5jJywKLSAgICAgICAgJ2pkbWFya2VyLmMnLAotICAgICAgICAnamRtYXN0ZXIuYycsCi0gICAgICAgICdqZG1lcmdlLmMnLAotICAgICAgICAnamRwaHVmZi5jJywKLSAgICAgICAgJ2pkcG9zdGN0LmMnLAotICAgICAgICAnamRzYW1wbGUuYycsCi0gICAgICAgICdqZHRyYW5zLmMnLAotICAgICAgICAnamVycm9yLmMnLAotICAgICAgICAnamVycm9yLmgnLAotICAgICAgICAnamZkY3RmbHQuYycsCi0gICAgICAgICdqZmRjdGZzdC5jJywKLSAgICAgICAgJ2pmZGN0aW50LmMnLAotICAgICAgICAnamlkY3RmbHQuYycsCi0gICAgICAgICdqaWRjdGZzdC5jJywKLSAgICAgICAgJ2ppZGN0aW50LmMnLAotICAgICAgICAnamlkY3RyZWQuYycsCi0gICAgICAgICdqaW5jbHVkZS5oJywKLSAgICAgICAgJ2ptZW1tZ3IuYycsCi0gICAgICAgICdqbWVtbm9icy5jJywKLSAgICAgICAgJ2ptZW1zeXMuaCcsCi0gICAgICAgICdqbW9yZWNmZy5oJywKLSAgICAgICAgJ2pwZWdfbmJpdHNfdGFibGUuYycsCi0gICAgICAgICdqcGVnaW50LmgnLAotICAgICAgICAnanBlZ2xpYi5oJywKLSAgICAgICAgJ2pwZWdsaWJtYW5nbGVyLmgnLAotICAgICAgICAnanF1YW50MS5jJywKLSAgICAgICAgJ2pxdWFudDIuYycsCi0gICAgICAgICdqdXRpbHMuYycsCi0gICAgICAgICdqdmVyc2lvbi5oJywKLSAgICAgICAgJ3JkYm1wLmMnLAotICAgICAgICAncmRwcG0uYycsCi0gICAgICAgICd0cmFuc3VwcC5oJywKLSAgICAgICAgJ3RyYW5zdXBwLmMnLAotICAgICAgICAndHVyYm9qcGVnLmgnLAotICAgICAgICAndHVyYm9qcGVnLmMnLAotICAgICAgICAnd3JibXAuYycsCi0gICAgICAgICd3cnBwbS5jJywKLSAgICAgICAgJzxAKG5vX3NpbWRfZmlsZXMpJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydpc19zdGFyYm9hcmQnLCB7Ci0gICAgICAgICAgIyBUaGVzZSBkZXBlbmRlY2llcyBhcmUgbmVlZGVkIGZvciBmaWxlIGlvCi0gICAgICAgICAgIyBhbmQgYXJlIG5vdCBjdXJyZW50bHkgdXNlZCBieSBDb2JhbHQuCi0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2pkYXRhZHN0LmMnLAotICAgICAgICAgICAgJ2pkYXRhc3JjLmMnLAotICAgICAgICAgICAgJ3JkYm1wLmMnLAotICAgICAgICAgICAgJ3JkcHBtLmMnLAotICAgICAgICAgICAgJ3dyYm1wLmMnLAotICAgICAgICAgICAgJ3dycHBtLmMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICAjIGFybSBwcm9jZXNzb3Igc3BlY2lmaWMgb3B0aW1pemF0aW9ucy4KLSAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAiYXJtIiBhbmQgYXJtX25lb24gPT0gMSBvciB0YXJnZXRfYXJjaCA9PSAiYXJtNjQiIGFuZCBhcm1fbmVvbiA9PSAxJywgewotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnc2ltZC9hcm0nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJzxAKG5vX3NpbWRfZmlsZXMpJwotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnc2ltZC9hcm0vamNjb2xvci1uZW9uLmMnLAotICAgICAgICAgICAgJ3NpbWQvYXJtL2pjZ3JheS1uZW9uLmMnLAotICAgICAgICAgICAgJ3NpbWQvYXJtL2pjcGh1ZmYtbmVvbi5jJywKLSAgICAgICAgICAgICdzaW1kL2FybS9qY3NhbXBsZS1uZW9uLmMnLAotICAgICAgICAgICAgJ3NpbWQvYXJtL2pkY29sb3ItbmVvbi5jJywKLSAgICAgICAgICAgICdzaW1kL2FybS9qZG1lcmdlLW5lb24uYycsCi0gICAgICAgICAgICAnc2ltZC9hcm0vamRzYW1wbGUtbmVvbi5jJywKLSAgICAgICAgICAgICdzaW1kL2FybS9qZmRjdGZzdC1uZW9uLmMnLAotICAgICAgICAgICAgJ3NpbWQvYXJtL2pmZGN0aW50LW5lb24uYycsCi0gICAgICAgICAgICAnc2ltZC9hcm0vamlkY3Rmc3QtbmVvbi5jJywKLSAgICAgICAgICAgICdzaW1kL2FybS9qaWRjdGludC1uZW9uLmMnLAotICAgICAgICAgICAgJ3NpbWQvYXJtL2ppZGN0cmVkLW5lb24uYycsCi0gICAgICAgICAgICAnc2ltZC9hcm0vanF1YW50aS1uZW9uLmMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnV0lUSF9TSU1EJywKLSAgICAgICAgICAgICdORU9OX0lOVFJJTlNJQ1MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoID09ICJhcm0iJywgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnc2ltZC9hcm0vYWFyY2gzMi9qc2ltZC5jJywKLSAgICAgICAgICAgICAgICAnc2ltZC9hcm0vYWFyY2gzMi9qY2h1ZmYtbmVvbi5jJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAiYXJtNjQiJywgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnc2ltZC9hcm0vYWFyY2g2NC9qc2ltZC5jJywKLSAgICAgICAgICAgICAgICAnc2ltZC9hcm0vYWFyY2g2NC9qY2h1ZmYtbmVvbi5jJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgIyBGb3IgYWxsIEV2ZXJncmVlbiBoYXJkZnAgYW5kIHNvZnRmcCBwbGF0Zm9ybXMuCi0gICAgICAgICAgICBbJ2Zsb2F0aW5nX3BvaW50X2ZwdT09InZmcHYzIicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgJy1tZnB1PTwoZmxvYXRpbmdfcG9pbnRfZnB1KScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJy1tZnB1PW5lb24nLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgICMgeDg2XzY0IHNwZWNpZmljIG9wdGltaXphdGlvbnMuCi0gICAgICAgIFsnPCh5YXNtX2V4aXN0cykgPT0gMSBhbmQgdGFyZ2V0X2FyY2ggPT0gIng2NCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJzxAKG5vX3NpbWRfZmlsZXMpJwotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvanNpbWRjcHUuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZmRjdGZsdC1zc2UuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY2NvbG9yLXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY2dyYXktc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjaHVmZi1zc2UyLmFzbScsCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvamNwaHVmZi1zc2UyLmFzbScsCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvamNzYW1wbGUtc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkY29sb3Itc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkbWVyZ2Utc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pkc2FtcGxlLXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZmRjdGZzdC1zc2UyLmFzbScsCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvamZkY3RpbnQtc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2ppZGN0Zmx0LXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qaWRjdGZzdC1zc2UyLmFzbScsCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvamlkY3RpbnQtc3NlMi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2ppZGN0cmVkLXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qcXVhbnRmLXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qcXVhbnRpLXNzZTIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY2NvbG9yLWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qY2dyYXktYXZ4Mi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2pjc2FtcGxlLWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZGNvbG9yLWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZG1lcmdlLWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qZHNhbXBsZS1hdngyLmFzbScsCi0gICAgICAgICAgICAnc2ltZC94ODZfNjQvamZkY3RpbnQtYXZ4Mi5hc20nLAotICAgICAgICAgICAgJ3NpbWQveDg2XzY0L2ppZGN0aW50LWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qcXVhbnRpLWF2eDIuYXNtJywKLSAgICAgICAgICAgICdzaW1kL3g4Nl82NC9qc2ltZC5jJywKLSAgICAgICAgICAgICdzaW1kL2pzaW1kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgIyBSdWxlcyBmb3IgYXNzZW1ibGluZyAuYXNtIGZpbGVzIHdpdGggeWFzbS4KLSAgICAgICAgICAncnVsZXMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdydWxlX25hbWUnOiAnYXNzZW1ibGUnLAotICAgICAgICAgICAgICAnZXh0ZW5zaW9uJzogJ2FzbScsCi0gICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWyBdLAotICAgICAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9vYmovdGhpcmRfcGFydHkvbGlianBlZy10dXJiby88KFJVTEVfSU5QVVRfUk9PVCkuYXNtLm8nLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAgICAgICc8KHBhdGhfdG9feWFzbSknLAotICAgICAgICAgICAgICAgICAgICAnLURFTEYnLAotICAgICAgICAgICAgICAgICAgICAnLURfX3g4Nl82NF9fJywKLSAgICAgICAgICAgICAgICAgICAgJy1EUElDJywKLSAgICAgICAgICAgICAgICAgICAgJy1Jc2ltZC9uYXNtLycsCi0gICAgICAgICAgICAgICAgICAgICctSXNpbWQveDg2XzY0LycsCi0gICAgICAgICAgICAgICAgICAgICctZicsCi0gICAgICAgICAgICAgICAgICAgICdlbGY2NCcsCi0gICAgICAgICAgICAgICAgICAgICctbycsCi0gICAgICAgICAgICAgICAgICAgICI8KFBST0RVQ1RfRElSKS8kb3V0IiwKLSAgICAgICAgICAgICAgICAgICAgJzwoUlVMRV9JTlBVVF9QQVRIKScsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJzogMSwKLSAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0J1aWxkaW5nIDwoUlVMRV9JTlBVVF9ST09UKS5hc20ubycsCi0gICAgICAgICAgICB9LAotICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgXQotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlianBlZy9saWJqcGVnLmd5cCBiL3RoaXJkX3BhcnR5L2xpYmpwZWcvbGlianBlZy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDcwNTIuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGlianBlZy9saWJqcGVnLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICMgVGhpcyBmaWxlIGhhbmRsZXMgYnVpbGRpbmcgYm90aCB3aXRoIG91ciBsb2NhbCBsaWJqcGVnIGFuZCB3aXRoIHRoZSBzeXN0ZW0KLSAgIyBsaWJqcGVnLgotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgfSwKLSAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgWyd1c2Vfc3lzdGVtX2xpYmpwZWc9PTAnLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJqcGVnJywKLSAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnamNhcGltaW4uYycsCi0gICAgICAgICAgICAnamNhcGlzdGQuYycsCi0gICAgICAgICAgICAnamNjb2VmY3QuYycsCi0gICAgICAgICAgICAnamNjb2xvci5jJywKLSAgICAgICAgICAgICdqY2RjdG1nci5jJywKLSAgICAgICAgICAgICdqY2h1ZmYuYycsCi0gICAgICAgICAgICAnamNodWZmLmgnLAotICAgICAgICAgICAgJ2pjaW5pdC5jJywKLSAgICAgICAgICAgICdqY21haW5jdC5jJywKLSAgICAgICAgICAgICdqY21hcmtlci5jJywKLSAgICAgICAgICAgICdqY21hc3Rlci5jJywKLSAgICAgICAgICAgICdqY29tYXBpLmMnLAotICAgICAgICAgICAgJ2pjb25maWcuaCcsCi0gICAgICAgICAgICAnamNwYXJhbS5jJywKLSAgICAgICAgICAgICdqY3BodWZmLmMnLAotICAgICAgICAgICAgJ2pjcHJlcGN0LmMnLAotICAgICAgICAgICAgJ2pjc2FtcGxlLmMnLAotICAgICAgICAgICAgJ2pkYXBpbWluLmMnLAotICAgICAgICAgICAgJ2pkYXBpc3RkLmMnLAotICAgICAgICAgICAgJ2pkYXRhZHN0LmMnLAotICAgICAgICAgICAgJ2pkYXRhc3JjLmMnLAotICAgICAgICAgICAgJ2pkY29lZmN0LmMnLAotICAgICAgICAgICAgJ2pkY29sb3IuYycsCi0gICAgICAgICAgICAnamRjdC5oJywKLSAgICAgICAgICAgICdqZGRjdG1nci5jJywKLSAgICAgICAgICAgICdqZGh1ZmYuYycsCi0gICAgICAgICAgICAnamRodWZmLmgnLAotICAgICAgICAgICAgJ2pkaW5wdXQuYycsCi0gICAgICAgICAgICAnamRtYWluY3QuYycsCi0gICAgICAgICAgICAnamRtYXJrZXIuYycsCi0gICAgICAgICAgICAnamRtYXN0ZXIuYycsCi0gICAgICAgICAgICAnamRtZXJnZS5jJywKLSAgICAgICAgICAgICdqZHBodWZmLmMnLAotICAgICAgICAgICAgJ2pkcG9zdGN0LmMnLAotICAgICAgICAgICAgJ2pkc2FtcGxlLmMnLAotICAgICAgICAgICAgJ2plcnJvci5jJywKLSAgICAgICAgICAgICdqZXJyb3IuaCcsCi0gICAgICAgICAgICAnamZkY3RmbHQuYycsCi0gICAgICAgICAgICAnamZkY3Rmc3QuYycsCi0gICAgICAgICAgICAnamZkY3RpbnQuYycsCi0gICAgICAgICAgICAnamlkY3RmbHQuYycsCi0gICAgICAgICAgICAnamlkY3Rmc3QuYycsCi0gICAgICAgICAgICAnamlkY3RpbnQuYycsCi0gICAgICAgICAgICAnamluY2x1ZGUuaCcsCi0gICAgICAgICAgICAnam1lbW1nci5jJywKLSAgICAgICAgICAgICdqbWVtbm9icy5jJywKLSAgICAgICAgICAgICdqbWVtc3lzLmgnLAotICAgICAgICAgICAgJ2ptb3JlY2ZnLmgnLAotICAgICAgICAgICAgJ2pwZWdpbnQuaCcsCi0gICAgICAgICAgICAnanBlZ2xpYi5oJywKLSAgICAgICAgICAgICdqcXVhbnQxLmMnLAotICAgICAgICAgICAgJ2pxdWFudDIuYycsCi0gICAgICAgICAgICAnanV0aWxzLmMnLAotICAgICAgICAgICAgJ2p2ZXJzaW9uLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAnLicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TIT0id2luIicsIHsncHJvZHVjdF9uYW1lJzogJ2pwZWcnfV0sCi0gICAgICAgICAgICBbJ09TPT0ibGJfc2hlbGwiIG9yIE9TPT0ic3RhcmJvYXJkIicsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICAgICMgVGhlc2UgYXJlIGZvciBkZWNvZGluZyBkaXJlY3RseSBvZmYgb2YgZGlzay4gVGhleSBhcmVuJ3QKLSAgICAgICAgICAgICAgICAjIGN1cnJlbnRseSB1c2VkLCBhbmQgd2UgcHJvYmFibHkgc2hvdWxkIGFsd2F5cyBiZSBkZWNvZGluZyBmcm9tCi0gICAgICAgICAgICAgICAgIyBtZW1vcnkuCi0gICAgICAgICAgICAgICAgJ2pkYXRhZHN0LmMnLAotICAgICAgICAgICAgICAgICdqZGF0YXNyYy5jJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydjbGFuZz09MScsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAnLVduby1mb3JtYXQtc2VjdXJpdHknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGlianBlZycsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1VTRV9TWVNURU1fTElCSlBFRycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnb3NfYnNkPT0xJywgewotICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICAgICAnL3Vzci9sb2NhbC9pbmNsdWRlJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICAgICAnPChhbmRyb2lkX3NyYykvZXh0ZXJuYWwvanBlZycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxqcGVnJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfQotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xpYnBuZy9saWJwbmcuZ3lwIGIvdGhpcmRfcGFydHkvbGlicG5nL2xpYnBuZy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMjM1OGMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGlicG5nL2xpYnBuZy5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsgJ29zX3Bvc2l4ID09IDEgYW5kIE9TICE9ICJtYWMiIGFuZCBPUyAhPSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICMgTWF5YmUgbGluayB0byBzeXN0ZW0gLnNvIG9uY2UgdGhlIHNlY3VyaXR5IGNvbmNlcm5zIGFyZSB0aG91Z2h0Ci0gICAgICAgICMgdGhyb3VnaCwgc2luY2Ugd2UgYWxyZWFkeSB1c2UgaXQgZHVlIHRvIEdUSy4KLSAgICAgICAgJ3VzZV9zeXN0ZW1fbGlicG5nJSc6IDAsCi0gICAgICB9LCB7ICAjIG9zX3Bvc2l4ICE9IDEgb3IgT1MgPT0gIm1hYyIKLSAgICAgICAgJ3VzZV9zeXN0ZW1fbGlicG5nJSc6IDAsCi0gICAgICB9XSwKLSAgICBdLAotICB9LAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ3VzZV9zeXN0ZW1fbGlicG5nPT0wJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbGlicG5nJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdDSFJPTUVfUE5HX1dSSVRFX1NVUFBPUlQnLAotICAgICAgICAgICAgJ1BOR19VU0VSX0NPTkZJRycsCi0gICAgICAgICAgICAnUE5HX1NLSVBfU0VUSk1QX0NIRUNLJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3BuZy5jJywKLSAgICAgICAgICAgICdwbmcuaCcsCi0gICAgICAgICAgICAncG5nY29uZi5oJywKLSAgICAgICAgICAgICdwbmdlcnJvci5jJywKLSAgICAgICAgICAgICdwbmdnY2NyZC5jJywKLSAgICAgICAgICAgICdwbmdnZXQuYycsCi0gICAgICAgICAgICAncG5nbWVtLmMnLAotICAgICAgICAgICAgJ3BuZ3ByZWFkLmMnLAotICAgICAgICAgICAgJ3BuZ3JlYWQuYycsCi0gICAgICAgICAgICAncG5ncmlvLmMnLAotICAgICAgICAgICAgJ3BuZ3J0cmFuLmMnLAotICAgICAgICAgICAgJ3BuZ3J1dGlsLmMnLAotICAgICAgICAgICAgJ3BuZ3NldC5jJywKLSAgICAgICAgICAgICdwbmd0cmFucy5jJywKLSAgICAgICAgICAgICdwbmd1c3IuaCcsCi0gICAgICAgICAgICAncG5ndmNyZC5jJywKLSAgICAgICAgICAgICdwbmd3aW8uYycsCi0gICAgICAgICAgICAncG5nd3JpdGUuYycsCi0gICAgICAgICAgICAncG5nd3RyYW4uYycsCi0gICAgICAgICAgICAncG5nd3V0aWwuYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAgICcuJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NIUk9NRV9QTkdfV1JJVEVfU1VQUE9SVCcsCi0gICAgICAgICAgICAgICdQTkdfVVNFUl9DT05GSUcnLAotICAgICAgICAgICAgICAnUE5HX1NLSVBfU0VUSk1QX0NIRUNLJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyc6IFsKLSAgICAgICAgICAgICcuLi96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbCi0gICAgICAgICAgICAjIExldmVsIDEgKGJ1dCBkb2N1bWVudGF0aW9uIHNheXMgMykgLSBpbmNvbXBhdGlibGUgdHlwZSBjb252ZXJzaW9uLgotICAgICAgICAgICAgNDEzMywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydjbGFuZyA9PSAxJywgewotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb21wYXJlJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUyE9IndpbiInLCB7J3Byb2R1Y3RfbmFtZSc6ICdwbmcnfV0sCi0gICAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICAgJ3R5cGUnOiAnPChjb21wb25lbnQpJywKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIyBDaHJvbWl1bSBsaWJwbmcgZG9lcyBub3Qgc3VwcG9ydCBidWlsZGluZyBhcyBhIHNoYXJlZF9saWJyYXJ5Ci0gICAgICAgICAgICAgICMgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLgotICAgICAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnT1M9PSJ3aW4iIGFuZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdQTkdfQlVJTERfRExMJywKLSAgICAgICAgICAgICAgICAnUE5HX05PX01PRFVMRURFRicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgJ1BOR19VU0VfRExMJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0JywgJ2hvc3QnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdCi0gICAgfSwgewotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnc3lzcm9vdCE9IiInLCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdwa2ctY29uZmlnJzogJy4uLy4uL2J1aWxkL2xpbnV4L3BrZy1jb25maWctd3JhcHBlciAiPChzeXNyb290KSIgIjwodGFyZ2V0X2FyY2gpIicsCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAncGtnLWNvbmZpZyc6ICdwa2ctY29uZmlnJwotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYnBuZycsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnPCFAKDwocGtnLWNvbmZpZykgLS1jZmxhZ3MgbGlicG5nKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tbGlicy1vbmx5LUwgLS1saWJzLW9ubHktb3RoZXIgbGlicG5nKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tbGlicy1vbmx5LWwgbGlicG5nKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdoZWFkZXJzX3Jvb3RfcGF0aCc6ICcuJywKLSAgICAgICAgICAgICdoZWFkZXJfZmlsZW5hbWVzJzogWwotICAgICAgICAgICAgICAncG5nLmgnLAotICAgICAgICAgICAgICAncG5nY29uZi5oJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJ2cHgvYWRzMmdhcy5neXBpIGIvdGhpcmRfcGFydHkvbGlidnB4L2FkczJnYXMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2YmY5Ni4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9saWJ2cHgvYWRzMmdhcy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgaW50byBhIHRhcmdldCB0byBwcm92aWRlIGEgcnVsZQotIyBmb3IgdHJhbnNsYXRpbmcgLmFzbSBmaWxlcyB0byAuUyBmaWxlcyB1c2luZyBhZHMyZ2FzLgotIwotIyBUbyB1c2UgdGhpcywgY3JlYXRlIGEgZ3lwIHRhcmdldCB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybToKLSMgewotIyAgICd0YXJnZXRfbmFtZSc6ICdteV9saWInLAotIyAgICdzb3VyY2VzJzogWwotIyAgICAgJ2Zvby5hc20nLAotIyAgICAgJ2Jhci5jJywKLSMgICBdLAotIyAgICdpbmNsdWRlcyc6IFsgJ2FkczJnYXMuZ3lwaScgXSwKLSMgfQotewotICAndmFyaWFibGVzJzogewotICAgICMgTG9jYXRpb24gb2YgdGhlIGludGVybWVkaWF0ZSBvdXRwdXQuCi0gICAgJ3NoYXJlZF9nZW5lcmF0ZWRfZGlyJzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3RoaXJkX3BhcnR5L2xpYnZweCcsCi0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdsaWJ2cHhfc291cmNlJSc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS9saWJ2cHgnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJpb3MiJywgewotICAgICAgICAgICdhZHMyZ2FzX3NjcmlwdCUnOiAnYWRzMmdhc19hcHBsZS5wbCcsCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnYWRzMmdhc19zY3JpcHQlJzogJ2FkczJnYXMucGwnLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICAnYWRzMmdhc19zY3JpcHQlJzogJzwoYWRzMmdhc19zY3JpcHQpJywKLSAgICAnYWRzMmdhc19zY3JpcHRfZGlyJzogJzwobGlidnB4X3NvdXJjZSkvYnVpbGQvbWFrZScsCi0gIH0sCi0gICdydWxlcyc6IFsKLSAgICB7Ci0gICAgICAncnVsZV9uYW1lJzogJ2NvbnZlcnRfYXNtJywKLSAgICAgICdleHRlbnNpb24nOiAnYXNtJywKLSAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICc8KGFkczJnYXNfc2NyaXB0X2RpcikvPChhZHMyZ2FzX3NjcmlwdCknLAotICAgICAgICAnPChhZHMyZ2FzX3NjcmlwdF9kaXIpL3RodW1iLnBtJywKLSAgICAgIF0sCi0gICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgJzwoc2hhcmVkX2dlbmVyYXRlZF9kaXIpLzwoUlVMRV9JTlBVVF9ST09UKS5hc20uUycsCi0gICAgICBdLAotICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgJ2Jhc2gnLAotICAgICAgICAnLWMnLAotICAgICAgICAnY2F0IDwoUlVMRV9JTlBVVF9QQVRIKSB8IHBlcmwgLUkgL2xpYi9wZXJsNS81LjEwLyA8KGFkczJnYXNfc2NyaXB0X2RpcikvPChhZHMyZ2FzX3NjcmlwdCkgLWNocm9taXVtID4gPChzaGFyZWRfZ2VuZXJhdGVkX2RpcikvPChSVUxFX0lOUFVUX1JPT1QpLmFzbS5TJywKLSAgICAgIF0sCi0gICAgICAncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnOiAxLAotICAgICAgJ21lc3NhZ2UnOiAnQ29udmVydCBsaWJ2cHggYXNtIGZpbGUgZm9yIEFSTSA8KFJVTEVfSU5QVVRfUEFUSCknLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJ2cHgvcGxhdGZvcm1zL2xpbnV4LXg2NC9saWJ2cHguYSBiL3RoaXJkX3BhcnR5L2xpYnZweC9wbGF0Zm9ybXMvbGludXgteDY0L2xpYnZweC5hCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGY2ODVmLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2xpYnZweC9wbGF0Zm9ybXMvbGludXgteDY0L2xpYnZweC5hCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlid2VicC9saWJ3ZWJwLmd5cCBiL3RoaXJkX3BhcnR5L2xpYndlYnAvbGlid2VicC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNzdmMDguLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGlid2VicC9saWJ3ZWJwLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotewotICAndmFyaWFibGVzJzogewotICAgICdvcHRpbWl6ZV90YXJnZXRfZm9yX3NwZWVkJzogMSwKLSAgfSwKLSAgJ2luY2x1ZGVzJzogWwotICAgICdsaWJ3ZWJwLmd5cGknCi0gIF0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RlYycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZGVjX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbGlid2VicF9kZW11eCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZGVtdXhfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RzcF9kZWMnLAotICAgICAgJ3R5cGUnIDogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZHNwX2RlY19jb21tb25fc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdsaWJ3ZWJwX2RzcF9kZWNfbXNhJywKLSAgICAgICAgJ2xpYndlYnBfZHNwX2RlY19uZW9uJywKLSAgICAgICAgJ2xpYndlYnBfZHNwX2RlY19zc2UyJywKLSAgICAgICAgJ2xpYndlYnBfZHNwX2RlY19zc2U0MScsCi0gICAgICAgICdsaWJ3ZWJwX2RzcF9kZWNfbWlwczMyJywKLSAgICAgICAgJ2xpYndlYnBfZHNwX2RlY19taXBzX2RzcF9yMicsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYndlYnBfZHNwX2RlY19tc2EnLAotICAgICAgJ3R5cGUnIDogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZHNwX2RlY19tc2Ffc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RzcF9kZWNfbmVvbicsCi0gICAgICAndHlwZScgOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsnLiddLAotICAgICAgJ3NvdXJjZXMnIDogWwotICAgICAgICAnPEAobGlid2VicF9kc3BfZGVjX25lb25fc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RzcF9kZWNfc3NlMicsCi0gICAgICAndHlwZScgOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsnLiddLAotICAgICAgJ3NvdXJjZXMnIDogWwotICAgICAgICAnPEAobGlid2VicF9kc3BfZGVjX3NzZTJfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RzcF9kZWNfc3NlNDEnLAotICAgICAgJ3R5cGUnIDogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZHNwX2RlY19zc2U0MV9zb3VyY2VzKScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYndlYnBfZHNwX2RlY19taXBzMzInLAotICAgICAgJ3R5cGUnIDogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZHNwX2RlY19taXBzMzJfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX2RzcF9kZWNfbWlwc19kc3BfcjInLAotICAgICAgJ3R5cGUnIDogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJyA6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfZHNwX2RlY19taXBzX2RzcF9yMl9zb3VyY2VzKScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYndlYnBfdXRpbHNfZGVjJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbJy4nXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPEAobGlid2VicF91dGlsc19kZWNfc291cmNlcyknLAotICAgICAgXSwKLSAgICB9LAotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYndlYnBfZW5jJywKLSAgICAgICd0eXBlJyA6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICAnc291cmNlcycgOiBbCi0gICAgICAgICc8QChsaWJ3ZWJwX2VuY19zb3VyY2VzKScsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYndlYnBfZHNwX2VuYycsCi0gICAgICAndHlwZScgOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsnLiddLAotICAgICAgJ3NvdXJjZXMnIDogWwotICAgICAgICAnPEAobGlid2VicF9kc3BfZW5jX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwX3V0aWxzX2VuYycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKGxpYndlYnBfdXRpbHNfZW5jX3NvdXJjZXMpJywKLSAgICAgIF0sCi0gICAgfSwKLQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdsaWJ3ZWJwJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcycgOiBbCi0gICAgICAgICdsaWJ3ZWJwX2RlYycsCi0gICAgICAgICdsaWJ3ZWJwX2RlbXV4JywKLSAgICAgICAgJ2xpYndlYnBfZHNwX2RlYycsCi0gICAgICAgICdsaWJ3ZWJwX3V0aWxzX2RlYycsCi0gICAgICAgICdsaWJ3ZWJwX2VuYycsCi0gICAgICAgICdsaWJ3ZWJwX2RzcF9lbmMnLAotICAgICAgICAnbGlid2VicF91dGlsc19lbmMnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWycuJ10sCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9saWJ3ZWJwL2xpYndlYnAuZ3lwaSBiL3RoaXJkX3BhcnR5L2xpYndlYnAvbGlid2VicC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGExYmZkLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2xpYndlYnAvbGlid2VicC5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnbGlid2VicF9kZWNfc291cmNlcyc6IFsKLSAgICAgICdzcmMvZGVjL2FscGhhX2RlYy5jJywKLSAgICAgICdzcmMvZGVjL2J1ZmZlcl9kZWMuYycsCi0gICAgICAnc3JjL2RlYy9mcmFtZV9kZWMuYycsCi0gICAgICAnc3JjL2RlYy9pZGVjX2RlYy5jJywKLSAgICAgICdzcmMvZGVjL2lvX2RlYy5jJywKLSAgICAgICdzcmMvZGVjL3F1YW50X2RlYy5jJywKLSAgICAgICdzcmMvZGVjL3RyZWVfZGVjLmMnLAotICAgICAgJ3NyYy9kZWMvdnA4X2RlYy5jJywKLSAgICAgICdzcmMvZGVjL3ZwOGxfZGVjLmMnLAotICAgICAgJ3NyYy9kZWMvd2VicF9kZWMuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kZW11eF9zb3VyY2VzJzogWwotICAgICAgJ3NyYy9kZW11eC9hbmltX2RlY29kZS5jJywKLSAgICAgICdzcmMvZGVtdXgvZGVtdXguYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kc3BfZGVjX2NvbW1vbl9zb3VyY2VzJzogWwotICAgICAgJ3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jJywKLSAgICAgICdzcmMvZHNwL2NwdS5jJywKLSAgICAgICdzcmMvZHNwL2RlYy5jJywKLSAgICAgICdzcmMvZHNwL2RlY19jbGlwX3RhYmxlcy5jJywKLSAgICAgICdzcmMvZHNwL2ZpbHRlcnMuYycsCi0gICAgICAnc3JjL2RzcC9sb3NzbGVzcy5jJywKLSAgICAgICdzcmMvZHNwL3Jlc2NhbGVyLmMnLAotICAgICAgJ3NyYy9kc3AvdXBzYW1wbGluZy5jJywKLSAgICAgICdzcmMvZHNwL3l1di5jJywKLSAgICBdLAotICAgICdsaWJ3ZWJwX2RzcF9kZWNfc3NlNDFfc291cmNlcyc6IFsKLSAgICAgICdzcmMvZHNwL2FscGhhX3Byb2Nlc3Npbmdfc3NlNDEuYycsCi0gICAgICAnc3JjL2RzcC9kZWNfc3NlNDEuYycsCi0gICAgICAnc3JjL2RzcC91cHNhbXBsaW5nX3NzZTQxLmMnLAotICAgICAgJ3NyYy9kc3AveXV2X3NzZTQxLmMnLAotICAgIF0sCi0gICAgJ2xpYndlYnBfZHNwX2RlY19zc2UyX3NvdXJjZXMnOiBbCi0gICAgICAnc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3NzZTIuYycsCi0gICAgICAnc3JjL2RzcC9kZWNfc3NlMi5jJywKLSAgICAgICdzcmMvZHNwL2ZpbHRlcnNfc3NlMi5jJywKLSAgICAgICdzcmMvZHNwL2xvc3NsZXNzX3NzZTIuYycsCi0gICAgICAnc3JjL2RzcC9yZXNjYWxlcl9zc2UyLmMnLAotICAgICAgJ3NyYy9kc3AvdXBzYW1wbGluZ19zc2UyLmMnLAotICAgICAgJ3NyYy9kc3AveXV2X3NzZTIuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kc3BfZGVjX25lb25fc291cmNlcyc6IFsKLSAgICAgICdzcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmdfbmVvbi5jJywKLSAgICAgICdzcmMvZHNwL2RlY19uZW9uLmMnLAotICAgICAgJ3NyYy9kc3AvZmlsdGVyc19uZW9uLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfbmVvbi5jJywKLSAgICAgICdzcmMvZHNwL3Jlc2NhbGVyX25lb24uYycsCi0gICAgICAnc3JjL2RzcC91cHNhbXBsaW5nX25lb24uYycsCi0gICAgICAnc3JjL2RzcC95dXZfbmVvbi5jJywKLSAgICBdLAotICAgICdsaWJ3ZWJwX2RzcF9kZWNfbWlwc19kc3BfcjJfc291cmNlcyc6IFsKLSAgICAgICdzcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmdfbWlwc19kc3BfcjIuYycsCi0gICAgICAnc3JjL2RzcC9kZWNfbWlwc19kc3BfcjIuYycsCi0gICAgICAnc3JjL2RzcC9maWx0ZXJzX21pcHNfZHNwX3IyLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfbWlwc19kc3BfcjIuYycsCi0gICAgICAnc3JjL2RzcC9yZXNjYWxlcl9taXBzX2RzcF9yMi5jJywKLSAgICAgICdzcmMvZHNwL3Vwc2FtcGxpbmdfbWlwc19kc3BfcjIuYycsCi0gICAgICAnc3JjL2RzcC95dXZfbWlwc19kc3BfcjIuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kc3BfZGVjX21pcHMzMl9zb3VyY2VzJzogWwotICAgICAgJ3NyYy9kc3AvZGVjX21pcHMzMi5jJywKLSAgICAgICdzcmMvZHNwL3Jlc2NhbGVyX21pcHMzMi5jJywKLSAgICAgICdzcmMvZHNwL3l1dl9taXBzMzIuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kc3BfZGVjX21zYV9zb3VyY2VzJzogWwotICAgICAgJ3NyYy9kc3AvZGVjX21zYS5jJywKLSAgICAgICdzcmMvZHNwL2ZpbHRlcnNfbXNhLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfbXNhLmMnLAotICAgICAgJ3NyYy9kc3AvcmVzY2FsZXJfbXNhLmMnLAotICAgICAgJ3NyYy9kc3AvdXBzYW1wbGluZ19tc2EuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9kc3BfZW5jX3NvdXJjZXMnIDogWwotICAgICAgJ3NyYy9kc3AvY29zdC5jJywKLSAgICAgICdzcmMvZHNwL2Nvc3RfbWlwczMyLmMnLAotICAgICAgJ3NyYy9kc3AvY29zdF9taXBzX2RzcF9yMi5jJywKLSAgICAgICdzcmMvZHNwL2Nvc3Rfc3NlMi5jJywKLSAgICAgICdzcmMvZHNwL2VuYy5jJywKLSAgICAgICdzcmMvZHNwL2VuY19hdngyLmMnLAotICAgICAgJ3NyYy9kc3AvZW5jX21pcHMzMi5jJywKLSAgICAgICdzcmMvZHNwL2VuY19taXBzX2RzcF9yMi5jJywKLSAgICAgICdzcmMvZHNwL2VuY19tc2EuYycsCi0gICAgICAnc3JjL2RzcC9lbmNfbmVvbi5jJywKLSAgICAgICdzcmMvZHNwL2VuY19zc2UyLmMnLAotICAgICAgJ3NyYy9kc3AvZW5jX3NzZTQxLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfZW5jLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfZW5jX21pcHMzMi5jJywKLSAgICAgICdzcmMvZHNwL2xvc3NsZXNzX2VuY19taXBzX2RzcF9yMi5jJywKLSAgICAgICdzcmMvZHNwL2xvc3NsZXNzX2VuY19tc2EuYycsCi0gICAgICAnc3JjL2RzcC9sb3NzbGVzc19lbmNfbmVvbi5jJywKLSAgICAgICdzcmMvZHNwL2xvc3NsZXNzX2VuY19zc2UyLmMnLAotICAgICAgJ3NyYy9kc3AvbG9zc2xlc3NfZW5jX3NzZTQxLmMnLAotICAgICAgJ3NyYy9kc3Avc3NpbS5jJywKLSAgICAgICdzcmMvZHNwL3NzaW1fc3NlMi5jJywKLSAgICBdLAotICAgICdsaWJ3ZWJwX2VuY19zb3VyY2VzJzogWwotICAgICAgJ3NyYy9lbmMvYWxwaGFfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvYW5hbHlzaXNfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvYmFja3dhcmRfcmVmZXJlbmNlc19jb3N0X2VuYy5jJywKLSAgICAgICdzcmMvZW5jL2JhY2t3YXJkX3JlZmVyZW5jZXNfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvY29uZmlnX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL2Nvc3RfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvZmlsdGVyX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL2ZyYW1lX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL2hpc3RvZ3JhbV9lbmMuYycsCi0gICAgICAnc3JjL2VuYy9pdGVyYXRvcl9lbmMuYycsCi0gICAgICAnc3JjL2VuYy9uZWFyX2xvc3NsZXNzX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL3BpY3R1cmVfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvcGljdHVyZV9jc3BfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvcGljdHVyZV9wc25yX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL3BpY3R1cmVfcmVzY2FsZV9lbmMuYycsCi0gICAgICAnc3JjL2VuYy9waWN0dXJlX3Rvb2xzX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL3ByZWRpY3Rvcl9lbmMuYycsCi0gICAgICAnc3JjL2VuYy9xdWFudF9lbmMuYycsCi0gICAgICAnc3JjL2VuYy9zeW50YXhfZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvdG9rZW5fZW5jLmMnLAotICAgICAgJ3NyYy9lbmMvdHJlZV9lbmMuYycsCi0gICAgICAnc3JjL2VuYy92cDhsX2VuYy5jJywKLSAgICAgICdzcmMvZW5jL3dlYnBfZW5jLmMnLAotICAgIF0sCi0gICAgJ2xpYndlYnBfZm9ybWF0X2RlY19zb3VyY2VzJzogWwotICAgICAgJ2ltYWdlaW8vaW1hZ2VfZGVjLmMnLAotICAgICAgJ2ltYWdlaW8vanBlZ2RlYy5jJywKLSAgICAgICdpbWFnZWlvL21ldGFkYXRhLmMnLAotICAgICAgJ2ltYWdlaW8vcG5nZGVjLmMnLAotICAgICAgJ2ltYWdlaW8vcG5tZGVjLmMnLAotICAgICAgJ2ltYWdlaW8vdGlmZmRlYy5jJywKLSAgICAgICdpbWFnZWlvL3dlYnBkZWMuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF9mb3JtYXRfZW5jX3NvdXJjZXMnOiBbCi0gICAgICAnaW1hZ2Vpby9pbWFnZV9lbmMuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF91dGlsX3NvdXJjZXMnOiBbCi0gICAgICAnZXhhbXBsZXMvZXhhbXBsZV91dGlsLmMnLAotICAgIF0sCi0gICAgJ2xpYndlYnBfaW1hZ2VfdXRpbF9zb3VyY2VzJzogWwotICAgICAgJ2ltYWdlaW8vaW1hZ2Vpb191dGlsLmMnLAotICAgIF0sCi0gICAgJ2xpYndlYnBfbXV4X3NvdXJjZXMnOiBbCi0gICAgICAnc3JjL211eC9hbmltX2VuY29kZS5jJywKLSAgICAgICdzcmMvbXV4L211eGVkaXQuYycsCi0gICAgICAnc3JjL211eC9tdXhpbnRlcm5hbC5jJywKLSAgICAgICdzcmMvbXV4L211eHJlYWQuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF91dGlsc19kZWNfc291cmNlcyc6IFsKLSAgICAgICdzcmMvdXRpbHMvYml0X3JlYWRlcl91dGlscy5jJywKLSAgICAgICdzcmMvdXRpbHMvY29sb3JfY2FjaGVfdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL2ZpbHRlcnNfdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL2h1ZmZtYW5fdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL3F1YW50X2xldmVsc19kZWNfdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL3JhbmRvbV91dGlscy5jJywKLSAgICAgICdzcmMvdXRpbHMvcmVzY2FsZXJfdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL3RocmVhZF91dGlscy5jJywKLSAgICAgICdzcmMvdXRpbHMvdXRpbHMuYycsCi0gICAgXSwKLSAgICAnbGlid2VicF91dGlsc19lbmNfc291cmNlcyc6IFsKLSAgICAgICdzcmMvdXRpbHMvYml0X3dyaXRlcl91dGlscy5jJywKLSAgICAgICdzcmMvdXRpbHMvaHVmZm1hbl9lbmNvZGVfdXRpbHMuYycsCi0gICAgICAnc3JjL3V0aWxzL3F1YW50X2xldmVsc191dGlscy5jJywKLSAgICBdLAotICAgICdsaWJ3ZWJwX2V4dHJhX3NvdXJjZXMnOiBbCi0gICAgICAnZXh0cmFzL2V4dHJhcy5jJywKLSAgICAgICdleHRyYXMvcXVhbGl0eV9lc3RpbWF0ZS5jJywKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGlieG1sL2xpYnhtbC5neXAgYi90aGlyZF9wYXJ0eS9saWJ4bWwvbGlieG1sLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2NjZiYi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9saWJ4bWwvbGlieG1sLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDIyNyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29zX2luY2x1ZGUnOiAnc3RhcmJvYXJkJywKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2xpYnhtbCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgIyAnY2hyb21pdW0vbGlieG1sX3V0aWxzLmgnLAotICAgICAgICAjICdjaHJvbWl1bS9saWJ4bWxfdXRpbHMuY2MnLAotICAgICAgICAnbGludXgvY29uZmlnLmgnLAotICAgICAgICAnbGludXgvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oJywKLSAgICAgICAgJ21hYy9jb25maWcuaCcsCi0gICAgICAgICdtYWMvaW5jbHVkZS9saWJ4bWwveG1sdmVyc2lvbi5oJywKLQotICAgICAgICAjJ3NyYy9ET0NCcGFyc2VyLmMnLAotICAgICAgICAnc3JjL0hUTUxwYXJzZXIuYycsCi0gICAgICAgICdzcmMvSFRNTHRyZWUuYycsCi0KLSAgICAgICAgIydzcmMvU0FYLmMnLAotICAgICAgICAnc3JjL1NBWDIuYycsCi0gICAgICAgICdzcmMvYnVmLmMnLAotICAgICAgICAnc3JjL2J1Zi5oJywKLQotICAgICAgICAjJ3NyYy9jMTRuLmMnLAotICAgICAgICAjJ3NyYy9jYXRhbG9nLmMnLAotICAgICAgICAnc3JjL2NodmFsaWQuYycsCi0KLSAgICAgICAgIydzcmMvZGVidWdYTUwuYycsCi0gICAgICAgICdzcmMvZGljdC5jJywKLSAgICAgICAgJ3NyYy9lbGZnY2NoYWNrLmgnLAotICAgICAgICAnc3JjL2VuYy5oJywKLSAgICAgICAgJ3NyYy9lbmNvZGluZy5jJywKLSAgICAgICAgJ3NyYy9lbnRpdGllcy5jJywKLSAgICAgICAgJ3NyYy9lcnJvci5jJywKLSAgICAgICAgJ3NyYy9nbG9iYWxzLmMnLAotICAgICAgICAnc3JjL2hhc2guYycsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvRE9DQnBhcnNlci5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9IVE1McGFyc2VyLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL0hUTUx0cmVlLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL1NBWC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9TQVgyLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL2MxNG4uaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvY2F0YWxvZy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9jaHZhbGlkLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL2RlYnVnWE1MLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL2RpY3QuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvZW5jb2RpbmcuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvZW50aXRpZXMuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvZ2xvYmFscy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9oYXNoLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL2xpc3QuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvbmFub2Z0cC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9uYW5vaHR0cC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9wYXJzZXIuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvcGFyc2VySW50ZXJuYWxzLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3BhdHRlcm4uaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvcmVsYXhuZy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC9zY2hlbWFzSW50ZXJuYWxzLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3NjaGVtYXRyb24uaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwvdGhyZWFkcy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC90cmVlLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3VyaS5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC92YWxpZC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94aW5jbHVkZS5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bGluay5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxJTy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxhdXRvbWF0YS5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxlcnJvci5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxleHBvcnRzLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3htbG1lbW9yeS5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxtb2R1bGUuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwveG1scmVhZGVyLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3htbHJlZ2V4cC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWxzYXZlLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3htbHNjaGVtYXMuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9saWJ4bWwveG1sc2NoZW1hc3R5cGVzLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3htbHN0cmluZy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94bWx1bmljb2RlLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvbGlieG1sL3htbHdyaXRlci5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94cGF0aC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94cGF0aEludGVybmFscy5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL2xpYnhtbC94cG9pbnRlci5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL3dpbjMyY29uZmlnLmgnLAotICAgICAgICAnc3JjL2luY2x1ZGUvd3NvY2tjb21wYXQuaCcsCi0KLSAgICAgICAgIydzcmMvbGVnYWN5LmMnLAotICAgICAgICAnc3JjL2xpYnhtbC5oJywKLSAgICAgICAgJ3NyYy9saXN0LmMnLAotICAgICAgICAnc3JjL3BhcnNlci5jJywKLSAgICAgICAgJ3NyYy9wYXJzZXJJbnRlcm5hbHMuYycsCi0gICAgICAgICdzcmMvcGF0dGVybi5jJywKLQotICAgICAgICAnc3JjL3JlbGF4bmcuYycsCi0gICAgICAgICdzcmMvc2F2ZS5oJywKLQotICAgICAgICAjJ3NyYy9zY2hlbWF0cm9uLmMnLAotICAgICAgICAnc3JjL3RocmVhZHMuYycsCi0gICAgICAgICdzcmMvdGltc29ydC5oJywKLSAgICAgICAgJ3NyYy90cmVlLmMnLAotICAgICAgICAnc3JjL3RyaW9kZWYuaCcsCi0gICAgICAgICdzcmMvdHJpb25hbi5oJywKLQotICAgICAgICAjJ3NyYy90cmlvLmMnLAotICAgICAgICAjJ3NyYy90cmlvLmgnLAotICAgICAgICAjJ3NyYy90cmlvZGVmLmgnLAotICAgICAgICAjIE5vdGU6IHhwYXRoLmMgI2luY2x1ZGVzIHRyaW9uYW4uYwotICAgICAgICAjJ3NyYy90cmlvbmFuLmMnLAotICAgICAgICAjJ3NyYy90cmlvcC5oJywKLSAgICAgICAgIydzcmMvdHJpb3N0ci5jJywKLSAgICAgICAgIydzcmMvdHJpb3N0ci5oJywKLSAgICAgICAgJ3NyYy91cmkuYycsCi0gICAgICAgICdzcmMvdmFsaWQuYycsCi0KLSAgICAgICAgIydzcmMveGluY2x1ZGUuYycsCi0gICAgICAgICMnc3JjL3hsaW5rLmMnLAotICAgICAgICAnc3JjL3htbElPLmMnLAotICAgICAgICAnc3JjL3htbG1lbW9yeS5jJywKLQotICAgICAgICAjJ3NyYy94bWxtb2R1bGUuYycsCi0gICAgICAgICdzcmMveG1scmVhZGVyLmMnLAotCi0gICAgICAgICdzcmMveG1scmVnZXhwLmMnLAotICAgICAgICAnc3JjL3htbHNhdmUuYycsCi0KLSAgICAgICAgJ3NyYy94bWxzY2hlbWFzLmMnLAotICAgICAgICAnc3JjL3htbHNjaGVtYXN0eXBlcy5jJywKLSAgICAgICAgJ3NyYy94bWxzdHJpbmcuYycsCi0gICAgICAgICdzcmMveG1sdW5pY29kZS5jJywKLSAgICAgICAgJ3NyYy94bWx3cml0ZXIuYycsCi0gICAgICAgICdzcmMveHBhdGguYycsCi0KLSAgICAgICAgJ3NyYy94cG9pbnRlci5jJywKLSAgICAgICAgIydzcmMveHpsaWIuYycsCi0gICAgICAgICdzcmMveHpsaWIuaCcsCi0gICAgICAgICd3aW4zMi9jb25maWcuaCcsCi0gICAgICAgICd3aW4zMi9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmgnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAjIERlZmluZSBMSUJYTUxfU1RBVElDIGFzIG5vdGhpbmcgdG8gbWF0Y2ggaG93IGxpYnhtbC5oCi0gICAgICAgICMgKGFuIGludGVybmFsIGhlYWRlcikgZGVmaW5lcyBMSUJYTUxfU1RBVElDLCBvdGhlcndpc2UKLSAgICAgICAgIyB3ZSBnZXQgdGhlIG1hY3JvIHJlZGVmaW5lZCB3YXJuaW5nIGZyb20gR0NDLiAgKC1ERk9PCi0gICAgICAgICMgZGVmaW5lcyB0aGUgbWFjcm8gRk9PIGFzIDEuKQotICAgICAgICAnTElCWE1MX1NUQVRJQz0nLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KG9zX2luY2x1ZGUpJywKLSAgICAgICAgJzwob3NfaW5jbHVkZSkvaW5jbHVkZScsCi0gICAgICAgICdzcmMvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJy4uL2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgJy4uL3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICBdLAotICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICcuLi9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdMSUJYTUxfU1RBVElDJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChvc19pbmNsdWRlKS9pbmNsdWRlJywKLSAgICAgICAgICAnc3JjL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgICAnNDAxOCcsICMgU2lnbmVkIC8gVW5zaWduZWQgbWlzbWF0Y2guCi0gICAgICAgICc0MjQ0JywgIyBDb252ZXJzaW9uIGZyb20gaW50NjQgdG8gaW50LgotICAgICAgICAnNDI2NycsICMgQ29udmVyc2lvbiBmcm9tIHNpemVfdCB0byBpbnQuCi0gICAgICAgICc0MDA1JywgIyBNYWNybyByZS1kZWZpbml0aW9uLgotICAgICAgICAnNDA0NycsCi0gICAgICAgICc0MDY3JywKLSAgICAgICAgJzQxMDEnLCAjIFVucmVmZXJlbmNlZCBsb2NhbCB2YXJpYWJsZS4KLSAgICAgICAgJzQ5OTYnLCAjIFBvc2l4IG5hbWUgZm9yIHRoaXMgaXRlbSBpcyBkZXByZWNhdGVkLgotICAgICAgICAnNDMxMScsICMgUG9pbnRlciB0cnVuY2F0aW9uIGZyb20gJ3ZvaWQgKicgdG8gJ2xvbmcnCi0gICAgICAgICc0MzEyJywgIyBDb252ZXJzaW9uIGZyb20gJ2xvbmcnIHRvICd2b2lkIConIG9mIGdyZWF0ZXIgc2l6ZQotICAgICAgICAnNDQ3NycsICMgRm9ybWF0IHN0cmluZyAnJWx1JyByZXF1aXJlcyBhbiBhcmd1bWVudCBvZiB0eXBlCi0gICAgICAgICAgICAgICAgIyAndW5zaWduZWQgbG9uZycsIGJ1dCB2YXJpYWRpYyBhcmd1bWVudCAxIGhhcyB0eXBlICdzaXplX3QnCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJzdGFyYm9hcmQiIG9yIE9TPT0ibGJfc2hlbGwiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMhJzogWwotICAgICAgICAgICAgJy4uL3psaWIvemxpYi5neXA6emxpYicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndGFyZ2V0X2FyY2g9PSJ3aW4iJywgewotICAgICAgICAgICdwcm9kdWN0X25hbWUnOiAnbGlieG1sMicsCi0gICAgICAgIH0sIHsgICMgZWxzZTogT1MhPSJ3aW4iCi0gICAgICAgICAgJ3Byb2R1Y3RfbmFtZSc6ICd4bWwyJywKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY2xhbmcgPT0gMScsIHsKLSAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgIyBsaWJ4bWwgcGFzc2VzIGBjb25zdCB1bnNpZ25lZCBjaGFyKmAgdGhyb3VnaCBgY29uc3QgY2hhcipgLgotICAgICAgICAgICAgJy1Xbm8tcG9pbnRlci1zaWduJywKLSAgICAgICAgICAgICMgcGF0dGVybi5jIGFuZCB1cmkuYyBib3RoIGhhdmUgYW4gaW50ZW50aW9uYWwKLSAgICAgICAgICAgICMgYGZvciAoLi4uKTtgIC8gYHdoaWxlKC4uLik7YCBsb29wLiBJIHN1Ym1pdHRlZCBhIHBhdGNoIHRvCi0gICAgICAgICAgICAjIG1vdmUgdGhlIGAnYCB0byBpdHMgb3duIGxpbmUsIGJ1dCB1bnRpbCB0aGF0J3MgbGFuZGVkCi0gICAgICAgICAgICAjIHN1cHByZXNzIHRoZSB3YXJuaW5nOgotICAgICAgICAgICAgJy1Xbm8tZW1wdHktYm9keScsCi0gICAgICAgICAgICAjIGRlYnVnWE1MLmMgY29tcGFyZXMgYXJyYXkgJ2FyZycgdG8gTlVMTC4KLSAgICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1wb2ludGVyLWNvbXBhcmUnLAotICAgICAgICAgICAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8xMzg1NzEjYzgKLSAgICAgICAgICAgICctV25vLWlnbm9yZWQtYXR0cmlidXRlcycsCi0gICAgICAgICAgICAjIGxpYnhtbCBjYXN0cyBmcm9tIGludCB0byBsb25nIHRvIHZvaWQqLgotICAgICAgICAgICAgJy1Xbm8taW50LXRvLXZvaWQtcG9pbnRlci1jYXN0JywKLSAgICAgICAgICAgICMgbGlieG1sIHBhc3NlcyBhIHZvbGF0aWxlIExQQ1JJVElDQUxfU0VDVElPTiogdG8gYSBmdW5jdGlvbgotICAgICAgICAgICAgIyBleHBlY3RpbmcgYSB2b2lkKiB2b2xhdGlsZSouCi0gICAgICAgICAgICAnLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcycsCi0gICAgICAgICAgICAjIHRyaW9faXNfc3BlY2lhbF9xdWFudGl0eSBhbmQgdHJpb19pc19uZWdhdGl2ZSBhcmUgb25seQotICAgICAgICAgICAgIyB1c2VkIHdpdGggY2VydGFpbiBwcmVwcm9jZXNzb3IgZGVmaW5lcyBzZXQuCi0gICAgICAgICAgICAnLVduby11bnVzZWQtZnVuY3Rpb24nLAotICAgICAgICAgICAgIyB4cGF0aC5jIHhtbFhQYXRoTm9kZUNvbGxlY3RBbmRUZXN0IGNvbXBhcmVzICd4bWxFbGVtZW50VHlwZScKLSAgICAgICAgICAgICMgYW5kICd4bWxYUGF0aFR5cGVWYWwnLgotICAgICAgICAgICAgJy1Xbm8tZW51bS1jb21wYXJlJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KLQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2NvbXBpbGVyLXJ0L2NvbXBpbGVyLXJ0Lmd5cCBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9jb21waWxlci1ydC9jb21waWxlci1ydC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmVhNmMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2NvbXBpbGVyLXJ0L2NvbXBpbGVyLXJ0Lmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY29tcGlsZXJfcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgJy1ub3N0ZGluYycsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1zdGQ9YysrMTEnLAotICAgICAgICAnLW5vc3RkaW5jKysnLAotICAgICAgICAnLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuJywKLSAgICAgICAgJy1mbXMtY29tcGF0aWJpbGl0eS12ZXJzaW9uPTE5LjAwJywKLSAgICAgICAgJy1XYWxsJywKLSAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAnLVcnLAotICAgICAgICAnLVd3cml0ZS1zdHJpbmdzJywKLSAgICAgICAgJy1Xbm8tbG9uZy1sb25nJywKLSAgICAgICAgJy1XZXJyb3I9cmV0dXJuLXR5cGUnLAotICAgICAgICAnLVduby11c2VyLWRlZmluZWQtbGl0ZXJhbHMnLAotICAgICAgICAnLVduby1iaXR3aXNlLW9wLXBhcmVudGhlc2VzJywKLSAgICAgICAgJy1Xbm8tc2hpZnQtb3AtcGFyZW50aGVzZXMnLAotICAgICAgICAnLVduby1lcnJvcicsCi0gICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAnLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50JywKLSAgICAgICAgJy1mUElDJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2xpYi9idWlsdGlucy91ZGl2dGkzLmMnLAotICAgICAgICAnbGliL2J1aWx0aW5zL3VkaXZtb2R0aTQuYycsCi0gICAgICAgICdsaWIvYnVpbHRpbnMvdW1vZHRpMy5jJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gPT0gMSBhbmQgdGFyZ2V0X2FyY2ggPT0gImFybSInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2RpdmRpMy5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZGl2bW9kZGk0LmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9kaXZtb2RzaTQuYycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2RpdnNpMy5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZml4ZGZkaS5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZml4c2ZkaS5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZml4dW5zZGZkaS5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZml4dW5zc2ZkaS5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZmxvYXRkaWRmLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9mbG9hdGRpc2YuYycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2Zsb2F0dW5kaWRmLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9mbG9hdHVuZGlzZi5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvdWRpdm1vZGRpNC5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvdWRpdm1vZHNpNC5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvdWRpdnNpMy5jJywKLQotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9hcm0vYWVhYmlfaWRpdm1vZC5TJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvYXJtL2FlYWJpX2xkaXZtb2QuUycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2FybS9hZWFiaV9tZW1jbXAuUycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2FybS9hZWFiaV9tZW1jcHkuUycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2FybS9hZWFiaV9tZW1tb3ZlLlMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9hcm0vYWVhYmlfbWVtc2V0LlMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9hcm0vYWVhYmlfdWlkaXZtb2QuUycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2FybS9hZWFiaV91bGRpdm1vZC5TJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gPT0gMSBhbmQgdGFyZ2V0X2FyY2ggPT0gImFybTY0IicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvYWRkdGYzLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9jb21wYXJldGYyLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9kaXZ0ZjMuYycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2V4dGVuZGRmdGYyLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9leHRlbmRzZnRmMi5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZml4dGZzaS5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvZmxvYXRzaXRmLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9mbG9hdHVuc2l0Zi5jJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvbXVsdGYzLmMnLAotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9zdWJ0ZjMuYycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL3RydW5jdGZkZjIuYycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL3RydW5jdGZzZjIuYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnc2JfZXZlcmdyZWVuID09IDEgYW5kIHRhcmdldF9hcmNoID09ICJ4ODYiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2xpYi9idWlsdGlucy9pMzg2L2RpdmRpMy5TJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvaTM4Ni9tb2RkaTMuUycsCi0gICAgICAgICAgICAnbGliL2J1aWx0aW5zL2kzODYvdWRpdmRpMy5TJywKLSAgICAgICAgICAgICdsaWIvYnVpbHRpbnMvaTM4Ni91bW9kZGkzLlMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXQotICAgIH0KLSAgXQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eC9pbmNsdWRlL19fZXh0ZXJuYWxfdGhyZWFkaW5nIGIvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eC9pbmNsdWRlL19fZXh0ZXJuYWxfdGhyZWFkaW5nCmluZGV4IDY0NTYyODUuLmU0Y2JlZjkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJjeHgvaW5jbHVkZS9fX2V4dGVybmFsX3RocmVhZGluZworKysgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGliY3h4L2luY2x1ZGUvX19leHRlcm5hbF90aHJlYWRpbmcKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSAic3RhcmJvYXJkL211dGV4LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC90aW1lLmgiCiAKIF9MSUJDUFBfUFVTSF9NQUNST1MKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJjeHgvbGliY3h4Lmd5cCBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJjeHgvbGliY3h4Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2OWQ1MC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGliY3h4L2xpYmN4eC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxOSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2N4eCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnaW5jbHVkZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGliY3h4YWJpL2luY2x1ZGUnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L211c2wvbXVzbC5neXA6YycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvY29tcGlsZXItcnQvY29tcGlsZXItcnQuZ3lwOmNvbXBpbGVyX3J0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJjeHhhYmkvbGliY3h4YWJpLmd5cDpjeHhhYmknLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYnVud2luZC9saWJ1bndpbmQuZ3lwOnVud2luZF9ldmVyZ3JlZW4nLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICctbm9zdGRpbmMnLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICctc3RkPWMrKzExJywKLSAgICAgICAgJy1ub3N0ZGluYysrJywKLSAgICAgICAgJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbicsCi0gICAgICAgICctZm1zLWNvbXBhdGliaWxpdHktdmVyc2lvbj0xOS4wMCcsCi0gICAgICAgICctV2FsbCcsCi0gICAgICAgICctV2V4dHJhJywKLSAgICAgICAgJy1XJywKLSAgICAgICAgJy1Xd3JpdGUtc3RyaW5ncycsCi0gICAgICAgICctV25vLWxvbmctbG9uZycsCi0gICAgICAgICctV2Vycm9yPXJldHVybi10eXBlJywKLSAgICAgICAgJy1Xbm8tdXNlci1kZWZpbmVkLWxpdGVyYWxzJywKLSAgICAgICAgJy1Xbm8tYml0d2lzZS1vcC1wYXJlbnRoZXNlcycsCi0gICAgICAgICctV25vLXNoaWZ0LW9wLXBhcmVudGhlc2VzJywKLSAgICAgICAgJy1Xbm8tZXJyb3InLAotICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgICAgJy1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCcsCi0gICAgICAgICctZlBJQycsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdfTElCQ1BQX0JVSUxESU5HX0xJQlJBUlknLAotICAgICAgICAnX0xJQkNQUF9IQVNfTVVTTF9MSUJDJywKLSAgICAgICAgJ19MSUJDUFBfSEFTX05PX1NURElOJywKLSAgICAgICAgIyBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gYnVpbGQgbGliY3h4YWJpIHdpdGggbGlidW53aW5kLgotICAgICAgICAnTElCQ1hYX0JVSUxESU5HX0xJQkNYWEFCSScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdpbmNsdWRlL2FwcGxlX2F2YWlsYWJpbGl0eS5oJywKLSAgICAgICAgJ2luY2x1ZGUvYXRvbWljX3N1cHBvcnQuaCcsCi0gICAgICAgICdpbmNsdWRlL2NvbmZpZ19lbGFzdC5oJywKLSAgICAgICAgJ2luY2x1ZGUvcmVmc3RyaW5nLmgnLAotICAgICAgICAnc3JjL2FsZ29yaXRobS5jcHAnLAotICAgICAgICAnc3JjL2FueS5jcHAnLAotICAgICAgICAnc3JjL2JpbmQuY3BwJywKLSAgICAgICAgJ3NyYy9jaGFyY29udi5jcHAnLAotICAgICAgICAnc3JjL2Nocm9uby5jcHAnLAotICAgICAgICAnc3JjL2NvbmRpdGlvbl92YXJpYWJsZS5jcHAnLAotICAgICAgICAnc3JjL2V4Y2VwdGlvbi5jcHAnLAotCi0gICAgICAgICMgUmVtb3ZlIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMKLSAgICAgICAgIydzcmMvZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwJywKLSAgICAgICAgIydzcmMvZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5oJywKLSAgICAgICAgIydzcmMvZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRpbnMuY3BwJywKLSAgICAgICAgIydzcmMvZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCcsCi0KLSAgICAgICAgJ3NyYy9mdW5jdGlvbmFsLmNwcCcsCi0gICAgICAgICdzcmMvZnV0dXJlLmNwcCcsCi0gICAgICAgICdzcmMvaGFzaC5jcHAnLAotICAgICAgICAnc3JjL2lvcy5jcHAnLAotICAgICAgICAnc3JjL2lvc3RyZWFtLmNwcCcsCi0gICAgICAgICdzcmMvbG9jYWxlLmNwcCcsCi0gICAgICAgICdzcmMvbWVtb3J5LmNwcCcsCi0gICAgICAgICdzcmMvbXV0ZXguY3BwJywKLSAgICAgICAgJ3NyYy9uZXcuY3BwJywKLSAgICAgICAgJ3NyYy9vcHRpb25hbC5jcHAnLAotICAgICAgICAnc3JjL3JlZ2V4LmNwcCcsCi0gICAgICAgICdzcmMvc2hhcmVkX211dGV4LmNwcCcsCi0gICAgICAgICdzcmMvc3RkZXhjZXB0LmNwcCcsCi0gICAgICAgICdzcmMvc3RyaW5nLmNwcCcsCi0gICAgICAgICdzcmMvc3Ryc3RyZWFtLmNwcCcsCi0gICAgICAgICdzcmMvc3lzdGVtX2Vycm9yLmNwcCcsCi0gICAgICAgICdzcmMvdGhyZWFkLmNwcCcsCi0gICAgICAgICdzcmMvdHlwZWluZm8uY3BwJywKLSAgICAgICAgJ3NyYy91dGlsaXR5LmNwcCcsCi0gICAgICAgICdzcmMvdmFsYXJyYXkuY3BwJywKLSAgICAgICAgJ3NyYy92YXJpYW50LmNwcCcsCi0gICAgICAgICdzcmMvdmVjdG9yLmNwcCcsCi0gICAgICBdLAotICAgIH0KLSAgXQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eGFiaS9saWJjeHhhYmkuZ3lwIGIvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYmN4eGFiaS9saWJjeHhhYmkuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWI2Zjc5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJjeHhhYmkvbGliY3h4YWJpLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIENvcHlyaWdodCAyMDE5IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnY3h4YWJpJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdpbmNsdWRlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJ1bndpbmQvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L211c2wvbXVzbC5neXA6YycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2xpYnVud2luZC5neXA6dW53aW5kX2V2ZXJncmVlbicsCi0gICAgICBdLAotICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgJy1ub3N0ZGluYycsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1zdGQ9YysrMTEnLAotICAgICAgICAnLW5vc3RkaW5jKysnLAotICAgICAgICAnLWZQSUMnLAotICAgICAgICAnLWZleGNlcHRpb25zJywKLSAgICAgICAgJy1mcnR0aScsCi0gICAgICAgICctV2Vycm9yPXJldHVybi10eXBlJywKLSAgICAgICAgJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbicsCi0gICAgICAgICctZm1zLWNvbXBhdGliaWxpdHktdmVyc2lvbj0xOS4wMCcsCi0gICAgICAgICctZnVud2luZC10YWJsZXMnLAotICAgICAgICAnLVcnLAotICAgICAgICAnLVdhbGwnLAotICAgICAgICAnLVdleHRyYScsCi0gICAgICAgICctV3dyaXRlLXN0cmluZ3MnLAotICAgICAgICAnLVdzaG9ydGVuLTY0LXRvLTMyJywKLSAgICAgICAgJy1Xbm8tZXJyb3InLAotICAgICAgICAnLVduby11bnVzZWQtY29tbWFuZC1saW5lLWFyZ3VtZW50JywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcycgOiBbCi0gICAgICAgICMgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRpc2FibGUgZXh0ZXJuIHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbGliYysrCi0gICAgICAgICMgaGVhZGVycy4gVGhlIGludGVuZGVkIHVzZSBjYXNlIGlzIGZvciBjbGllbnRzIHdobyB3aXNoIHRvIHVzZSB0aGUgbGliYysrCi0gICAgICAgICMgaGVhZGVycyB3aXRob3V0IHRha2luZyBhIGRlcGVuZGVuY3kgb24gdGhlIGxpYmMrKyBsaWJyYXJ5IGl0c2VsZi4KLSAgICAgICAgJ19MSUJDUFBfRElTQUJMRV9FWFRFUk5fVEVNUExBVEUnLAotICAgICAgICAjIFRoaXMgbWFjcm8gaXMgdXNlZCB0byByZS1lbmFibGUgdGhlIGBzZXRfdW5leHBlY3RlZGAsIGBnZXRfdW5leHBlY3RlZGAsIGFuZAotICAgICAgICAjIGB1bmV4cGVjdGVkYCBmdW5jdGlvbnMsIHdoaWNoIHdlcmUgcmVtb3ZlZCBpbiBDKysxNy4KLSAgICAgICAgJ19MSUJDUFBfRU5BQkxFX0NYWDE3X1JFTU9WRURfVU5FWFBFQ1RFRF9GVU5DVElPTlMnLAotICAgICAgICAjIExldCB0aGUgbGlicmFyeSBoZWFkZXJzIGtub3cgdGhleSBhcmUgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gYnVpbGQgdGhlCi0gICAgICAgICMgbGlicmFyeS4KLSAgICAgICAgJ19MSUJDWFhBQklfQlVJTERJTkdfTElCUkFSWScsCi0gICAgICAgICdMSUJDWFhBQklfVVNFX0xMVk1fVU5XSU5ERVInLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3JjL2Fib3J0X21lc3NhZ2UuY3BwJywKLSAgICAgICAgJ3NyYy9hYm9ydF9tZXNzYWdlLmgnLAotICAgICAgICAnc3JjL2N4YV9hdXhfcnVudGltZS5jcHAnLAotICAgICAgICAnc3JjL2N4YV9kZWZhdWx0X2hhbmRsZXJzLmNwcCcsCi0gICAgICAgICdzcmMvY3hhX2RlbWFuZ2xlLmNwcCcsCi0gICAgICAgICdzcmMvY3hhX2V4Y2VwdGlvbi5jcHAnLAotICAgICAgICAnc3JjL2N4YV9leGNlcHRpb24uaHBwJywKLSAgICAgICAgJ3NyYy9jeGFfZXhjZXB0aW9uX3N0b3JhZ2UuY3BwJywKLSAgICAgICAgJ3NyYy9jeGFfZ3VhcmQuY3BwJywKLSAgICAgICAgJ3NyYy9jeGFfaGFuZGxlcnMuY3BwJywKLSAgICAgICAgJ3NyYy9jeGFfaGFuZGxlcnMuaHBwJywKLSAgICAgICAgJ3NyYy9jeGFfcGVyc29uYWxpdHkuY3BwJywKLSAgICAgICAgJ3NyYy9jeGFfdW5leHBlY3RlZC5jcHAnLAotICAgICAgICAnc3JjL2N4YV92ZWN0b3IuY3BwJywKLSAgICAgICAgJ3NyYy9jeGFfdmlydHVhbC5jcHAnLAotICAgICAgICAnc3JjL2RlbWFuZ2xlL0NvbXBpbGVyLmgnLAotICAgICAgICAnc3JjL2RlbWFuZ2xlL1N0cmluZ1ZpZXcuaCcsCi0gICAgICAgICdzcmMvZGVtYW5nbGUvVXRpbGl0eS5oJywKLSAgICAgICAgJ3NyYy9mYWxsYmFja19tYWxsb2MuY3BwJywKLSAgICAgICAgJ3NyYy9mYWxsYmFja19tYWxsb2MuaCcsCi0gICAgICAgICdzcmMvaW5jbHVkZS9hdG9taWNfc3VwcG9ydC5oJywKLSAgICAgICAgJ3NyYy9pbmNsdWRlL3JlZnN0cmluZy5oJywKLSAgICAgICAgJ3NyYy9wcml2YXRlX3R5cGVpbmZvLmNwcCcsCi0gICAgICAgICdzcmMvcHJpdmF0ZV90eXBlaW5mby5oJywKLSAgICAgICAgJ3NyYy9zdGRsaWJfZXhjZXB0aW9uLmNwcCcsCi0gICAgICAgICdzcmMvc3RkbGliX25ld19kZWxldGUuY3BwJywKLSAgICAgICAgJ3NyYy9zdGRsaWJfc3RkZXhjZXB0LmNwcCcsCi0gICAgICAgICdzcmMvc3RkbGliX3R5cGVpbmZvLmNwcCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAjIFdlIHV0aWxpemUgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCB0aGUgZm9sbG93aW5nIGZpbGUgYnJlYWtzIHRoZSBidWlsZC4KLSAgICAgICAgJ3NyYy9jeGFfbm9leGNlcHRpb24uY3BwJywKLQotICAgICAgICAjIE5vdCBuZWVkZWQgYW5kIGxlYWtzIF9fY3hhX3RocmVhZF9hdGV4aXRfaW1wbC4KLSAgICAgICAgJ3NyYy9jeGFfdGhyZWFkX2F0ZXhpdC5jcHAnLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnTElCQ1hYQUJJX1VTRV9MTFZNX1VOV0lOREVSJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfQotICBdCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2xpYnVud2luZC5neXAgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2xpYnVud2luZC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmNiMzguLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xpYnVud2luZC9saWJ1bndpbmQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd1bndpbmRfZXZlcmdyZWVuJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdpbmNsdWRlJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9saWJ1bndpbmQvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9jb21tb24vY29tbW9uLmd5cDpjb21tb24nLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbXVzbC9tdXNsLmd5cDpjJywKLSAgICAgIF0sCi0gICAgICAnY2ZsYWdzJzogWwotICAgICAgICAnLW5vc3RkaW5jJywKLSAgICAgICAgJy1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCcsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1zdGQ9YysrMTEnLAotICAgICAgICAnLW5vc3RkaW5jKysnLAotICAgICAgICAnLWZQSUMnLAotICAgICAgICAnLVdlcnJvcj1yZXR1cm4tdHlwZScsCi0gICAgICAgICctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLAotICAgICAgICAnLWZtcy1jb21wYXRpYmlsaXR5LXZlcnNpb249MTkuMDAnLAotICAgICAgICAnLWZ1bndpbmQtdGFibGVzJywKLSAgICAgICAgJy1XJywKLSAgICAgICAgJy1XYWxsJywKLSAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAnLVd3cml0ZS1zdHJpbmdzJywKLSAgICAgICAgJy1Xc2hvcnRlbi02NC10by0zMicsCi0gICAgICAgICctV25vLWVycm9yJywKLSAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgRW5zdXJlIHRoYXQgX19leHRlcm5hbF90aHJlYWRpbmcgaXMgdXNlZCBmb3IgdGhyZWFkaW5nIHN1cHBvcnQuCi0gICAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICAgIyBCdWlsZCBsaWJ1bndpbmQgd2l0aCBjb25jdXJyZW5jeSBidWlsdCB1cG9uIFN0YXJib2FyZCBtdXRleGVzIGFuZAotICAgICAgICAjIGNvbmRpdGlvbiB2YXJpYWJsZXMuCi0gICAgICAgICdfTElCVU5XSU5EX0hBU19TVEFSQk9BUkRfVEhSRUFEUycsCi0gICAgICAgICdMSUJVTldJTkRfUFJJTlRfQVBJUycsCi0gICAgICAgICdMSUJVTldJTkRfUFJJTlRfRFdBUkYnLAotICAgICAgICAnTElCVU5XSU5EX1BSSU5UX1VOV0lORElORycsCi0gICAgICAgICdMTFZNX1BBVEg9IjwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtLyInLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3JjL0FkZHJlc3NTcGFjZS5ocHAnLAotICAgICAgICAnc3JjL2Fzc2VtYmx5LmgnLAotICAgICAgICAnc3JjL0NNYWtlTGlzdHMudHh0JywKLSAgICAgICAgJ3NyYy9Db21wYWN0VW53aW5kZXIuaHBwJywKLSAgICAgICAgJ3NyYy9jb25maWcuaCcsCi0gICAgICAgICdzcmMvZHdhcmYyLmgnLAotICAgICAgICAnc3JjL0R3YXJmSW5zdHJ1Y3Rpb25zLmhwcCcsCi0gICAgICAgICdzcmMvRHdhcmZQYXJzZXIuaHBwJywKLSAgICAgICAgJ3NyYy9FSEhlYWRlclBhcnNlci5ocHAnLAotICAgICAgICAnc3JjL2xpYnVud2luZC5jcHAnLAotICAgICAgICAnc3JjL2xpYnVud2luZF9leHQuaCcsCi0gICAgICAgICdzcmMvUmVnaXN0ZXJzLmhwcCcsCi0gICAgICAgICdzcmMvUldNdXRleC5ocHAnLAotICAgICAgICAnc3JjL1Vud2luZEN1cnNvci5ocHAnLAotICAgICAgICAnc3JjL1Vud2luZC1FSEFCSS5jcHAnLAotICAgICAgICAnc3JjL1Vud2luZC1FSEFCSS5oJywKLSAgICAgICAgJ3NyYy9VbndpbmRMZXZlbDEuYycsCi0gICAgICAgICdzcmMvVW53aW5kTGV2ZWwxLWdjYy1leHQuYycsCi0gICAgICAgICdzcmMvVW53aW5kUmVnaXN0ZXJzUmVzdG9yZS5TJywKLSAgICAgICAgJ3NyYy9VbndpbmRSZWdpc3RlcnNTYXZlLlMnLAotICAgICAgICAnc3JjL1Vud2luZC1zamxqLmMnLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAjIEVuc3VyZSB0aGF0IF9fZXh0ZXJuYWxfdGhyZWFkaW5nIGlzIHVzZWQgZm9yIHRocmVhZGluZyBzdXBwb3J0LgotICAgICAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICAgICAnTExWTV9QQVRIPSI8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS8iJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd0YXJnZXRfb3MgPT0gInR2b3MiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3NyYy9VbndpbmRfQXBwbGVFeHRyYXMuY3BwJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndW53aW5kX3N0YXJib2FyZCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnaW5jbHVkZScsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2luY2x1ZGUnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9lbGZfbG9hZGVyL2V2ZXJncmVlbl9pbmZvLmd5cDpldmVyZ3JlZW5faW5mbycsCi0gICAgICBdLAotICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgJy1Xbm8tdW51c2VkLWNvbW1hbmQtbGluZS1hcmd1bWVudCcsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgJy1zdGQ9YysrMTEnLAotICAgICAgICAnLWZQSUMnLAotICAgICAgICAnLVdlcnJvcj1yZXR1cm4tdHlwZScsCi0gICAgICAgICctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLAotICAgICAgICAnLWZ1bndpbmQtdGFibGVzJywKLSAgICAgICAgJy1XJywKLSAgICAgICAgJy1XYWxsJywKLSAgICAgICAgJy1XZXh0cmEnLAotICAgICAgICAnLVd3cml0ZS1zdHJpbmdzJywKLSAgICAgICAgJy1Xbm8tZXJyb3InLAotICAgICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1NUQVJCT0FSRF9JTVBMRU1FTlRBVElPTicsCi0gICAgICAgICMgRW5zdXJlIHRoYXQgX19leHRlcm5hbF90aHJlYWRpbmcgaXMgdXNlZCBmb3IgdGhyZWFkaW5nIHN1cHBvcnQuCi0gICAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICAgIyBCdWlsZCBsaWJ1bndpbmQgd2l0aCBjb25jdXJyZW5jeSBidWlsdCB1cG9uIFN0YXJib2FyZCBtdXRleGVzIGFuZAotICAgICAgICAjIGNvbmRpdGlvbiB2YXJpYWJsZXMuCi0gICAgICAgICdfTElCVU5XSU5EX0hBU19TVEFSQk9BUkRfVEhSRUFEUycsCi0gICAgICAgICdMTFZNX1BBVEg9IjwoREVQVEgpL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtLyInLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3JjL0FkZHJlc3NTcGFjZS5ocHAnLAotICAgICAgICAnc3JjL2Fzc2VtYmx5LmgnLAotICAgICAgICAnc3JjL0NNYWtlTGlzdHMudHh0JywKLSAgICAgICAgJ3NyYy9Db21wYWN0VW53aW5kZXIuaHBwJywKLSAgICAgICAgJ3NyYy9jb25maWcuaCcsCi0gICAgICAgICdzcmMvZHdhcmYyLmgnLAotICAgICAgICAnc3JjL0R3YXJmSW5zdHJ1Y3Rpb25zLmhwcCcsCi0gICAgICAgICdzcmMvRHdhcmZQYXJzZXIuaHBwJywKLSAgICAgICAgJ3NyYy9FSEhlYWRlclBhcnNlci5ocHAnLAotICAgICAgICAnc3JjL2xpYnVud2luZC5jcHAnLAotICAgICAgICAnc3JjL2xpYnVud2luZF9leHQuaCcsCi0gICAgICAgICdzcmMvUmVnaXN0ZXJzLmhwcCcsCi0gICAgICAgICdzcmMvUldNdXRleC5ocHAnLAotICAgICAgICAnc3JjL1Vud2luZEN1cnNvci5ocHAnLAotICAgICAgICAnc3JjL1Vud2luZC1FSEFCSS5jcHAnLAotICAgICAgICAnc3JjL1Vud2luZC1FSEFCSS5oJywKLSAgICAgICAgJ3NyYy9VbndpbmRMZXZlbDEuYycsCi0gICAgICAgICdzcmMvVW53aW5kTGV2ZWwxLWdjYy1leHQuYycsCi0gICAgICAgICdzcmMvVW53aW5kUmVnaXN0ZXJzUmVzdG9yZS5TJywKLSAgICAgICAgJ3NyYy9VbndpbmRSZWdpc3RlcnNTYXZlLlMnLAotICAgICAgICAnc3JjL1Vud2luZC1zamxqLmMnLAotICAgICAgXSwKLSAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGlidW53aW5kL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAjIEVuc3VyZSB0aGF0IF9fZXh0ZXJuYWxfdGhyZWFkaW5nIGlzIHVzZWQgZm9yIHRocmVhZGluZyBzdXBwb3J0LgotICAgICAgICAgICdfTElCQ1BQX0hBU19USFJFQURfQVBJX0VYVEVSTkFMJywKLSAgICAgICAgICAnTExWTV9QQVRIPSI8KERFUFRIKS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS8iJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd0YXJnZXRfb3MgPT0gInR2b3MiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3NyYy9VbndpbmRfQXBwbGVFeHRyYXMuY3BwJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfQotICBdCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL0thbGVpZG9zY29wZS9DaGFwdGVyMy50ZXN0IGIvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xsdm0vdGVzdC9FeGFtcGxlcy9LYWxlaWRvc2NvcGUvQ2hhcHRlcjMudGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM4YmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xsdm0vdGVzdC9FeGFtcGxlcy9LYWxlaWRvc2NvcGUvQ2hhcHRlcjMudGVzdApAQCAtMCwwICsxLDE3IEBACisjIFJVTjogS2FsZWlkb3Njb3BlLUNoMyA8ICVzIDI+JjEgfCBGaWxlQ2hlY2sgJXMKKworIyBUZXN0IGJhc2ljIHBhcnNpbmcgYW5kIElSIGdlbmVyYXRpb24uCitkZWYgZm9vKHgpIHggKyAxOworZm9vKDEpOworCisjIENIRUNLOiAgICAgIGRlZmluZSBkb3VibGUgQGZvbyhkb3VibGUgJXgpIHsKKyMgQ0hFQ0stTkVYVDogZW50cnk6CisjIENIRUNLLU5FWFQ6ICAgJWFkZHRtcCA9IGZhZGQgZG91YmxlICV4LCAxLjAwMDAwMGUrMDAKKyMgQ0hFQ0stTkVYVDogICByZXQgZG91YmxlICVhZGR0bXAKKyMgQ0hFQ0stTkVYVDogfQorCisjIENIRUNLOiAgICAgIGRlZmluZSBkb3VibGUgQF9fYW5vbl9leHByKCkgeworIyBDSEVDSy1ORVhUOiBlbnRyeToKKyMgQ0hFQ0stTkVYVDogICAlY2FsbHRtcCA9IGNhbGwgZG91YmxlIEBmb28oZG91YmxlIDEuMDAwMDAwZSswMCkKKyMgQ0hFQ0stTkVYVDogICByZXQgZG91YmxlICVjYWxsdG1wCisjIENIRUNLLU5FWFQ6IH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI0LnRlc3QgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL0thbGVpZG9zY29wZS9DaGFwdGVyNC50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDBlNDIKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL0thbGVpZG9zY29wZS9DaGFwdGVyNC50ZXN0CkBAIC0wLDAgKzEsMTcgQEAKKyMgUlVOOiBLYWxlaWRvc2NvcGUtQ2g0IDwgJXMgMj4mMSB8IEZpbGVDaGVjayAlcworCisjIFRlc3QgYmFzaWMgZGVmaW5pdGlvbiwgYmluZGluZywgYW5kIGV4ZWN1dGlvbi4KK2RlZiBmb28oeCkgeCArIDE7CitkZWYgYmFyKHgpIGZvbygyICogeCk7CitiYXIoMik7CisjIENIRUNLOiBFdmFsdWF0ZWQgdG8gNS4wMDAwMDAKKworIyBUZXN0IHJlZGVmaW5pdGlvbi4KK2RlZiBmb28oeCkgeCArIDI7Citmb28oMik7CisjIENIRUNLOiBFdmFsdWF0ZWQgdG8gNC4wMDAwMDAKKworIyBWZXJpZnkgdGhhdCAnYmFyJyBzdGlsbCBjYWxscyB0aGUgb3JpZ2luYWwgJ2ZvbycuCitiYXIoMik7CisjIENIRUNLOiBFdmFsdWF0ZWQgdG8gNS4wMDAwMDAKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xsdm0vdGVzdC9FeGFtcGxlcy9LYWxlaWRvc2NvcGUvQ2hhcHRlcjUudGVzdCBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI1LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkOTAyMwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI1LnRlc3QKQEAgLTAsMCArMSwxOSBAQAorIyBSVU46IEthbGVpZG9zY29wZS1DaDUgPCAlcyAyPiYxIHwgRmlsZUNoZWNrICVzCisKKyMgVGVzdCAnaWYnIGV4cHJlc3Npb24uCitkZWYgZm9vKHgpIGlmIHggPCAxMCB0aGVuIDAgZWxzZSAxOworZm9vKDkpOworZm9vKDExKTsKKyMgQ0hFQ0s6IEV2YWx1YXRlZCB0byAwLjAwMDAwMAorIyBDSEVDSzogRXZhbHVhdGVkIHRvIDEuMDAwMDAwCisKKyMgVGVzdCAnZm9yJyBleHByZXNzaW9uLgorZXh0ZXJuIHByaW50ZCh4KTsKK2ZvciBpID0gMSwgaSA8IDUsIDEuMCBpbgorICBwcmludGQoaSk7CisjIENIRUNLOiAxLjAKKyMgQ0hFQ0s6IDIuMAorIyBDSEVDSzogMy4wCisjIENIRUNLOiA0LjAKKyMgQ0hFQ0s6IDUuMAorIyBDSEVDSzogRXZhbHVhdGVkIHRvIDAuMDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbGx2bS1wcm9qZWN0L2xsdm0vdGVzdC9FeGFtcGxlcy9LYWxlaWRvc2NvcGUvQ2hhcHRlcjYudGVzdCBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI2LnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkZDAxZgotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI2LnRlc3QKQEAgLTAsMCArMSwxNSBAQAorIyBSVU46IEthbGVpZG9zY29wZS1DaDYgPCAlcyAyPiYxIHwgRmlsZUNoZWNrICVzCisKKyMgVGVzdCB1bmFyeSBvcGVyYXRvciBkZWZpbml0aW9uLgorZGVmIHVuYXJ5LSh4KSAwIC0geDsKKzEgKyAoLTEpOworIyBDSEVDSzogRXZhbHVhdGVkIHRvIDAuMDAwMDAwCisKKyMgVGVzdCBiaW5hcnkgb3BlcmF0b3IgZGVmaW5pdGlvbi4KK2RlZiBiaW5hcnk+IDEwIChsaHMgcmhzKSByaHMgPCBsaHM7CitkZWYgZm9vKHgpIGlmIHggPiAxMCB0aGVuIDAgZWxzZSAxOworZm9vKDkpOworZm9vKDExKTsKKyMgQ0hFQ0s6IEV2YWx1YXRlZCB0byAxLjAwMDAwMAorIyBDSEVDSzogRXZhbHVhdGVkIHRvIDAuMDAwMDAwCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvS2FsZWlkb3Njb3BlL0NoYXB0ZXI3LnRlc3QgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL0thbGVpZG9zY29wZS9DaGFwdGVyNy50ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NDNjYTcKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL0thbGVpZG9zY29wZS9DaGFwdGVyNy50ZXN0CkBAIC0wLDAgKzEsMTUgQEAKKyMgUlVOOiBLYWxlaWRvc2NvcGUtQ2g3IDwgJXMgMj4mMSB8IEZpbGVDaGVjayAlcworCisjIFNlcXVlbmNlIG9wZXJhdG9yIGFuZCBpdGVyYXRpdmUgZmlib25hY2NpIGZ1bmN0aW9uIHRvIHRlc3QgdXNlciBkZWZpbmVkIHZhcnMuCitkZWYgYmluYXJ5IDogMSAoeCB5KSB5OworCitkZWYgZmliaSh4KQorICB2YXIgYSA9IDEsIGIgPSAxLCBjIGluCisgIChmb3IgaSA9IDMsIGkgPCB4IGluCisgICAgIGMgPSBhICsgYiA6CisgICAgIGEgPSBiIDoKKyAgICAgYiA9IGMpIDoKKyAgYjsKKworZmliaSgxMCk7CisjIENIRUNLOiBFdmFsdWF0ZWQgdG8gNTUuMDAwMDAwCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL2xpdC5sb2NhbC5jZmcgYi90aGlyZF9wYXJ0eS9sbHZtLXByb2plY3QvbGx2bS90ZXN0L0V4YW1wbGVzL2xpdC5sb2NhbC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyZTNkYwotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2xsdm0tcHJvamVjdC9sbHZtL3Rlc3QvRXhhbXBsZXMvbGl0LmxvY2FsLmNmZwpAQCAtMCwwICsxIEBACitjb25maWcudW5zdXBwb3J0ZWQgPSBUcnVlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9sejRfbGliL2x6NC5neXAgYi90aGlyZF9wYXJ0eS9sejRfbGliL2x6NC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYWMyYmIuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbHo0X2xpYi9sejQuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMSBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2x6NCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvbHo0X2xpYicsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgTWFrZSBMWjQgdXNlIG91ciBpbXBsZW1lbnRhdGlvbnMgZm9yIGl0cyBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuCi0gICAgICAgICdMWjRfVVNFUl9NRU1PUllfRlVOQ1RJT05TJywKLSAgICAgICAgJ1hYSF9OQU1FU1BBQ0U9TFo0XycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sejRfbGliL2x6NF9hbGwuYycsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9sejRfbGliL2x6NHN0YXJib2FyZC5jJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2x6NF9saWIveHhoYXNoLmMnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9iYXNlL2Jhc2UuZ3lwIGIvdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9iYXNlL2Jhc2UuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWRkNTEwLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vYmFzZS9iYXNlLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICcuLi9idWlsZC9jb21tb24uZ3lwaScsCi0gIF0sCi0KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Jhc2UnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyEnOiBbCi0gICAgICAgICc8KERFUFRIKScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnY2ZsYWdzJzogWwotICAgICAgICAnLWlzeXN0ZW0uLi8uLicsCi0gICAgICBdLAotICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yaycsCi0gICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yaycsCi0gICAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgJyQoU0RLUk9PVCkvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9TZWN1cml0eS5mcmFtZXdvcmsnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbGFkdmFwaTMyLmxpYicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnYXRvbWljb3BzLmgnLAotICAgICAgICAnYXRvbWljb3BzX2ludGVybmFsc19hdG9taWN3b3JkX2NvbXBhdC5oJywKLSAgICAgICAgJ2F0b21pY29wc19pbnRlcm5hbHNfcG9ydGFibGUuaCcsCi0gICAgICAgICdhdXRvX3Jlc2V0LmgnLAotICAgICAgICAnYmFzZV93cmFwcGVyLmgnLAotICAgICAgICAnYml0X2Nhc3QuaCcsCi0gICAgICAgICdjb21waWxlcl9zcGVjaWZpYy5oJywKLSAgICAgICAgJ2RlYnVnL2FsaWFzLmNjJywKLSAgICAgICAgJ2RlYnVnL2FsaWFzLmgnLAotICAgICAgICAnZmlsZXMvZmlsZV9wYXRoLmNjJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfcGF0aC5oJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfdXRpbC5oJywKLSAgICAgICAgJ2ZpbGVzL2ZpbGVfdXRpbF9wb3NpeC5jYycsCi0gICAgICAgICdmaWxlcy9zY29wZWRfZmlsZS5jYycsCi0gICAgICAgICdmaWxlcy9zY29wZWRfZmlsZS5oJywKLSAgICAgICAgJ2Zvcm1hdF9tYWNyb3MuaCcsCi0gICAgICAgICdsb2dnaW5nLmNjJywKLSAgICAgICAgJ2xvZ2dpbmcuaCcsCi0gICAgICAgICdtYWMvY2xvc2Vfbm9jYW5jZWwuY2MnLAotICAgICAgICAnbWFjL2ZvdW5kYXRpb25fdXRpbC5oJywKLSAgICAgICAgJ21hYy9mb3VuZGF0aW9uX3V0aWwubW0nLAotICAgICAgICAnbWFjL21hY2hfbG9nZ2luZy5oJywKLSAgICAgICAgJ21hYy9tYWNoX2xvZ2dpbmcuY2MnLAotICAgICAgICAnbWFjL3Njb3BlZF9jZnR5cGVyZWYuaCcsCi0gICAgICAgICdtYWMvc2NvcGVkX2lvb2JqZWN0LmgnLAotICAgICAgICAnbWFjL3Njb3BlZF9sYXVuY2hfZGF0YS5oJywKLSAgICAgICAgJ21hYy9zY29wZWRfbWFjaF9wb3J0LmNjJywKLSAgICAgICAgJ21hYy9zY29wZWRfbWFjaF9wb3J0LmgnLAotICAgICAgICAnbWFjL3Njb3BlZF9tYWNoX3ZtLmNjJywKLSAgICAgICAgJ21hYy9zY29wZWRfbWFjaF92bS5oJywKLSAgICAgICAgJ21hYy9zY29wZWRfbnNhdXRvcmVsZWFzZV9wb29sLmgnLAotICAgICAgICAnbWFjL3Njb3BlZF9uc2F1dG9yZWxlYXNlX3Bvb2wubW0nLAotICAgICAgICAnbWFjL3Njb3BlZF9uc29iamVjdC5oJywKLSAgICAgICAgJ21hYy9zY29wZWRfdHlwZXJlZi5oJywKLSAgICAgICAgJ21hY3Jvcy5oJywKLSAgICAgICAgJ21lbW9yeS9mcmVlX2RlbGV0ZXIuaCcsCi0gICAgICAgICdtZW1vcnkvc2NvcGVkX3BvbGljeS5oJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX2Z1bmN0aW9ucy5oJywKLSAgICAgICAgJ21ldHJpY3MvaGlzdG9ncmFtX21hY3Jvcy5oJywKLSAgICAgICAgJ21ldHJpY3MvcGVyc2lzdGVudF9oaXN0b2dyYW1fYWxsb2NhdG9yLmgnLAotICAgICAgICAnbnVtZXJpY3MvY2hlY2tlZF9tYXRoLmgnLAotICAgICAgICAnbnVtZXJpY3MvY2hlY2tlZF9tYXRoX2ltcGwuaCcsCi0gICAgICAgICdudW1lcmljcy9jbGFtcGVkX21hdGguaCcsCi0gICAgICAgICdudW1lcmljcy9jbGFtcGVkX21hdGhfaW1wbC5oJywKLSAgICAgICAgJ251bWVyaWNzL3NhZmVfY29udmVyc2lvbnMuaCcsCi0gICAgICAgICdudW1lcmljcy9zYWZlX2NvbnZlcnNpb25zX2FybV9pbXBsLmgnLAotICAgICAgICAnbnVtZXJpY3Mvc2FmZV9jb252ZXJzaW9uc19pbXBsLmgnLAotICAgICAgICAnbnVtZXJpY3Mvc2FmZV9tYXRoLmgnLAotICAgICAgICAnbnVtZXJpY3Mvc2FmZV9tYXRoX2FybV9pbXBsLmgnLAotICAgICAgICAnbnVtZXJpY3Mvc2FmZV9tYXRoX2NsYW5nX2djY19pbXBsLmgnLAotICAgICAgICAnbnVtZXJpY3Mvc2FmZV9tYXRoX3NoYXJlZF9pbXBsLmgnLAotICAgICAgICAncG9zaXgvZWludHJfd3JhcHBlci5oJywKLSAgICAgICAgJ3Bvc2l4L3NhZmVfc3RyZXJyb3IuY2MnLAotICAgICAgICAncG9zaXgvc2FmZV9zdHJlcnJvci5oJywKLSAgICAgICAgJ3Byb2Nlc3MvbWVtb3J5LmNjJywKLSAgICAgICAgJ3Byb2Nlc3MvbWVtb3J5LmgnLAotICAgICAgICAncHJvY2Vzcy9wcm9jZXNzX21ldHJpY3MuaCcsCi0gICAgICAgICdwcm9jZXNzL3Byb2Nlc3NfbWV0cmljc19wb3NpeC5jYycsCi0gICAgICAgICdwcm9jZXNzL3Byb2Nlc3NfbWV0cmljc193aW4uY2MnLAotICAgICAgICAncmFuZF91dGlsLmNjJywKLSAgICAgICAgJ3JhbmRfdXRpbC5oJywKLSAgICAgICAgJ3Njb3BlZF9jbGVhcl9lcnJuby5oJywKLSAgICAgICAgJ3Njb3BlZF9nZW5lcmljLmgnLAotICAgICAgICAnc3RsX3V0aWwuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZzE2LmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nMTYuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ19udW1iZXJfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfbnVtYmVyX2NvbnZlcnNpb25zLmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfcGllY2UuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ191dGlsLmNjJywKLSAgICAgICAgJ3N0cmluZ3Mvc3RyaW5nX3V0aWwuaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ191dGlsX3Bvc2l4LmgnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbF93aW4uY2MnLAotICAgICAgICAnc3RyaW5ncy9zdHJpbmdfdXRpbF93aW4uaCcsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ3ByaW50Zi5jYycsCi0gICAgICAgICdzdHJpbmdzL3N0cmluZ3ByaW50Zi5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3lzX3N0cmluZ19jb252ZXJzaW9ucy5oJywKLSAgICAgICAgJ3N0cmluZ3Mvc3lzX3N0cmluZ19jb252ZXJzaW9uc19tYWMubW0nLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25fdXRpbHMuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25fdXRpbHMuaCcsCi0gICAgICAgICdzdHJpbmdzL3V0Zl9zdHJpbmdfY29udmVyc2lvbnMuY2MnLAotICAgICAgICAnc3RyaW5ncy91dGZfc3RyaW5nX2NvbnZlcnNpb25zLmgnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2NvbmRpdGlvbl92YXJpYWJsZS5oJywKLSAgICAgICAgJ3N5bmNocm9uaXphdGlvbi9jb25kaXRpb25fdmFyaWFibGVfcG9zaXguY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2suY2MnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2suaCcsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vbG9ja19pbXBsLmgnLAotICAgICAgICAnc3luY2hyb25pemF0aW9uL2xvY2tfaW1wbF9wb3NpeC5jYycsCi0gICAgICAgICdzeW5jaHJvbml6YXRpb24vbG9ja19pbXBsX3dpbi5jYycsCi0gICAgICAgICdzeXNfYnl0ZW9yZGVyLmgnLAotICAgICAgICAndGVtcGxhdGVfdXRpbC5oJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L2ljdS9pY3VfdXRmLmNjJywKLSAgICAgICAgJ3RoaXJkX3BhcnR5L2ljdS9pY3VfdXRmLmgnLAotICAgICAgICAndGhyZWFkaW5nL3RocmVhZF9sb2NhbF9zdG9yYWdlLmNjJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfbG9jYWxfc3RvcmFnZS5oJywKLSAgICAgICAgJ3RocmVhZGluZy90aHJlYWRfbG9jYWxfc3RvcmFnZV9wb3NpeC5jYycsCi0gICAgICAgICd0aHJlYWRpbmcvdGhyZWFkX2xvY2FsX3N0b3JhZ2Vfd2luLmNjJywKLSAgICAgICAgJy4uL2J1aWxkL2J1aWxkX2NvbmZpZy5oJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyEnOiBbCi0gICAgICAgICAgJzwoREVQVEgpJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnLi4nLAotICAgICAgICBdLAotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctaXN5c3RlbS4uLy4uJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vYnVpbGQvY29tbW9uLmd5cGkgYi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2J1aWxkL2NvbW1vbi5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTM1OWU3Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vYnVpbGQvY29tbW9uLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICdjbGFuZyUnOiAwLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICdjbGFuZyUnOiAxLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICAnY2xhbmclJzogJzwoY2xhbmcpJywKLQotICAgICdhbmRyb2lkX2FwaV9sZXZlbCUnOiAnJywKLQotICAgICdtYWNfc2RrJSc6ICcnLAotICAgICdtYWNfZGVwbG95bWVudF90YXJnZXQlJzogJycsCi0KLSAgICAndGFyZ2V0X2FyY2glJzogJ3g2NCcsCi0gIH0sCi0KLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAnZmlsZW5hbWVfcnVsZXMuZ3lwaScsCi0gICAgXSwKLSAgICAnY29uZGl0aW9ucyc6IFsKLQotICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAnQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTJzogJ05PJywKLSAgICAgICAgICAnR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQnOiAnYzk5JywgICMgLXN0ZD1jOTkKLSAgICAgICAgICAnR0NDX0NXX0FTTV9TWU5UQVgnOiAnTk8nLCAgIyBObyAtZmFzbS1ibG9ja3MKLSAgICAgICAgICAnR0NDX0RZTkFNSUNfTk9fUElDJzogJ05PJywgICMgTm8gLW1keW5hbWljLW5vLXBpYwotICAgICAgICAgICdHQ0NfRU5BQkxFX0NQUF9FWENFUFRJT05TJzogJ05PJywgICMgLWZuby1leGNlcHRpb25zCi0gICAgICAgICAgJ0dDQ19FTkFCTEVfQ1BQX1JUVEknOiAnTk8nLCAgIyAtZm5vLXJ0dGkKLSAgICAgICAgICAnR0NDX0VOQUJMRV9QQVNDQUxfU1RSSU5HUyc6ICdOTycsICAjIE5vIC1tcGFzY2FsLXN0cmluZ3MKLQotICAgICAgICAgICMgR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOIG1hcHMgdG8gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuCi0gICAgICAgICAgJ0dDQ19JTkxJTkVTX0FSRV9QUklWQVRFX0VYVEVSTic6ICdZRVMnLAotCi0gICAgICAgICAgJ0dDQ19PQkpDX0NBTExfQ1hYX0NEVE9SUyc6ICdZRVMnLCAgIyAtZm9iamMtY2FsbC1jeHgtY2R0b3JzCi0gICAgICAgICAgJ0dDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVInOiAnTk8nLAotICAgICAgICAgICdHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTic6ICdZRVMnLCAgIyAtZnZpc2liaWxpdHk9aGlkZGVuCi0gICAgICAgICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMnOiAnWUVTJywgICMgLVdlcnJvcgotICAgICAgICAgICdHQ0NfV0FSTl9BQk9VVF9NSVNTSU5HX05FV0xJTkUnOiAnWUVTJywgICMgLVduZXdsaW5lLWVvZgotICAgICAgICAgICdPVEhFUl9DRkxBR1MnOiBbCi0gICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLCAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8zMjIwNAotICAgICAgICAgICAgJy1mc3RhY2stcHJvdGVjdG9yLWFsbCcsICAjIEltcGxpZXMgLWZzdGFjay1wcm90ZWN0b3IKLSAgICAgICAgICBdLAotICAgICAgICAgICdVU0VfSEVBREVSTUFQJzogJ05PJywKLSAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICAgJy1XZW5kaWYtbGFiZWxzJywKLSAgICAgICAgICAgICctV2V4dHJhJywKLQotICAgICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0KLSAgICAgICAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCB0aGUgInN0cnVjdCBmb28gZiA9IHswfTsiIGluaXRpYWxpemF0aW9uCi0gICAgICAgICAgICAjIHBhdHRlcm4uCi0gICAgICAgICAgICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycycsCi0gICAgICAgICAgXSwKLQotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydjbGFuZyE9MCcsIHsKLSAgICAgICAgICAgICAgJ0NMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCc6ICdjKysxNCcsICAjIC1zdGQ9YysrMTQKLQotICAgICAgICAgICAgICAjIERvbid0IGxpbmsgaW4gbGliYXJjbGl0ZV9tYWNvc3guYSwgc2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMTU2NTMwLgotICAgICAgICAgICAgICAnQ0xBTkdfTElOS19PQkpDX1JVTlRJTUUnOiAnTk8nLCAgIyBObyAtZm9iamMtbGluay1ydW50aW1lCi0KLSAgICAgICAgICAgICAgIyBDTEFOR19XQVJOX09CSkNfTUlTU0lOR19QUk9QRVJUWV9TWU5USEVTSVMgbWFwcyB0bwotICAgICAgICAgICAgICAjIC1Xb2JqYy1taXNzaW5nLXByb3BlcnR5LXN5bnRoZXNpcwotICAgICAgICAgICAgICAnQ0xBTkdfV0FSTl9PQkpDX01JU1NJTkdfUFJPUEVSVFlfU1lOVEhFU0lTJzogJ1lFUycsCi0KLSAgICAgICAgICAgICAgJ0dDQ19WRVJTSU9OJzogJ2NvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzAnLAotICAgICAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICAgJy1XZXhpdC10aW1lLWRlc3RydWN0b3JzJywKLSAgICAgICAgICAgICAgICAnLVdleHRyYS1zZW1pJywKLSAgICAgICAgICAgICAgICAnLVdoZWFkZXItaHlnaWVuZScsCi0gICAgICAgICAgICAgICAgJy1XaW1wbGljaXQtZmFsbHRocm91Z2gnLAotICAgICAgICAgICAgICAgICctV25vLXNlbGVjdG9yLXR5cGUtbWlzbWF0Y2gnLAotICAgICAgICAgICAgICAgICctV3NpZ24tY29tcGFyZScsCi0gICAgICAgICAgICAgICAgJy1Xc3RyaW5nLWNvbnZlcnNpb24nLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgeyAgIyBlbHNlOiBjbGFuZz09MAotICAgICAgICAgICAgICAnR0NDX1ZFUlNJT04nOiAnNC4yJywKLSAgICAgICAgICAgIH1dLAotCi0gICAgICAgICAgICBbJ21hY19zZGshPSIiJywgewotICAgICAgICAgICAgICAnU0RLUk9PVCc6ICdtYWNvc3g8KG1hY19zZGspJywgICMgLWlzeXNyb290Ci0gICAgICAgICAgICB9XSwKLQotICAgICAgICAgICAgWydtYWNfZGVwbG95bWVudF90YXJnZXQhPSIiJywgewotICAgICAgICAgICAgICAjIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBtYXBzIHRvIC1tbWFjb3N4LXZlcnNpb24tbWluCi0gICAgICAgICAgICAgICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnOiAnPChtYWNfZGVwbG95bWVudF90YXJnZXQpJywKLSAgICAgICAgICAgIH1dLAotCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iaWEzMiInLCB7Ci0gICAgICAgICAgICAgICdBUkNIUyc6IFsKLSAgICAgICAgICAgICAgICAnaTM4NicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAnQVJDSFMnOiBbCi0gICAgICAgICAgICAgICAgJ3g4Nl82NCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotCi0gICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydfdHlwZT09ImV4ZWN1dGFibGUiJywgewotICAgICAgICAgICAgICAnT1RIRVJfTERGTEFHUyc6IFsKLSAgICAgICAgICAgICAgICAnLVdsLC1waWUnLCAgIyBQb3NpdGlvbi1pbmRlcGVuZGVudCBleGVjdXRhYmxlIChNSF9QSUUpCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotCi0gICAgICAgIH0sCi0gICAgICB9XSwKLQotICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctZlBJQycsCi0gICAgICAgICAgJy1mbm8tZXhjZXB0aW9ucycsCi0gICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywgICMgU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzIyMDQKLSAgICAgICAgICAnLWZzdGFjay1wcm90ZWN0b3ItYWxsJywgICMgSW1wbGllcyAtZnN0YWNrLXByb3RlY3RvcgotICAgICAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKLSAgICAgICAgICAnLWcnLAotICAgICAgICAgICctcGlwZScsCi0gICAgICAgICAgJy1wdGhyZWFkJywKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICctV2Vycm9yJywKLSAgICAgICAgICAnLVdleHRyYScsCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLAotICAgICAgICBdLAotICAgICAgICAnY2ZsYWdzX2NjJzogWwotICAgICAgICAgICctZm5vLXJ0dGknLAotICAgICAgICAgICctZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4nLAotICAgICAgICAgICctc3RkPWMrKzE0JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ19GSUxFX09GRlNFVF9CSVRTPTY0JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgJy1mUElDJywKLSAgICAgICAgICAnLXB0aHJlYWQnLAotICAgICAgICAgICctV2wsLS1hcy1uZWVkZWQnLAotICAgICAgICAgICctV2wsLXosbm9leGVjc3RhY2snLAotICAgICAgICBdLAotCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnY2xhbmchPTAnLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMnLAotICAgICAgICAgICAgICAnLVdleHRyYS1zZW1pJywKLSAgICAgICAgICAgICAgJy1XaGVhZGVyLWh5Z2llbmUnLAotICAgICAgICAgICAgICAnLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCcsCi0gICAgICAgICAgICAgICctV3NpZ24tY29tcGFyZScsCi0gICAgICAgICAgICAgICctV3N0cmluZy1jb252ZXJzaW9uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwgeyAgIyBlbHNlOiBjbGFuZz09MAotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1tc3NlMicsCi0gICAgICAgICAgICAgICAgICAnLW1mcG1hdGg9c3NlJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0KLSAgICAgICAgICBbJ09TPT0ibGludXgiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1tMzInLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLW0zMicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLW02NCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctbTY0JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0KLSAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydhbmRyb2lkX2FwaV9sZXZlbCE9IiInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAjIFdpdGggZGVwcmVjYXRlZCBoZWFkZXJzLCB0aGlzIHdhcyBhdmFpbGFibGUgYnkgI2luY2x1ZGluZwotICAgICAgICAgICAgICAgICAgIyA8YW5kcm9pZC9hcGktbGV2ZWwuaD4sIGJ1dCB3aXRoIHVuaWZpZWQgaGVhZGVycywgdGhlIGRlc2lyZWQKLSAgICAgICAgICAgICAgICAgICMgdmFsdWUgbXVzdCBiZSBwdXNoZWQgaW50byB0aGUgYnVpbGQgZnJvbSB0aGUgb3V0c2lkZSB3aGVuCi0gICAgICAgICAgICAgICAgICAjIGJ1aWxkaW5nIHdpdGggR0NDLiBTZWUKLSAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vbmRrLysvbWFzdGVyL2RvY3MvVW5pZmllZEhlYWRlcnMubWQuCi0gICAgICAgICAgICAgICAgICAjIEl04oCZcyBoYXJtbGVzcyB0byBkZWZpbmUgdGhpcyB3aGVuIGJ1aWxkaW5nIHdpdGggQ2xhbmcuCi0gICAgICAgICAgICAgICAgICAnX19BTkRST0lEX0FQSV9fPTwoYW5kcm9pZF9hcGlfbGV2ZWwpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0KLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3R5cGU9PSJleGVjdXRhYmxlIicsIHsKLSAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAnLXBpZScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0KLSAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAnbXN2c19jb25maWd1cmF0aW9uX2F0dHJpYnV0ZXMnOiB7Ci0gICAgICAgICAgJ0NoYXJhY3RlclNldCc6ICcxJywKLSAgICAgICAgfSwKLSAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJzQnLAotICAgICAgICAgICAgJ1dhcm5Bc0Vycm9yJzogJ3RydWUnLAotICAgICAgICAgICAgJ0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQnOiAnMycsCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnMCcsCi0gICAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdCdWZmZXJTZWN1cml0eUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAnL2JpZ29iaicsICAjIE1heGltdW0gMl4zMiBzZWN0aW9ucyBpbiAub2JqIGZpbGVzIChkZWZhdWx0IDJeMTYpLgotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ1JhbmRvbWl6ZWRCYXNlQWRkcmVzcyc6ICcyJywgICMgL0RZTkFNSUNCQVNFLgotICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICcxJywKLSAgICAgICAgICB9LAotICAgICAgICB9LAotICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgICA0MTAwLCAgIyBVbnJlZmVyZW5jZWQgZm9ybWFsIHBhcmFtZXRlci4KLSAgICAgICAgICA0MTI3LCAgIyBDb25kaXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50LgotICAgICAgICAgIDQzMjQsICAjIFN0cnVjdHVyZSB3YXMgcGFkZGVkIGR1ZSB0byBhbGlnbm1lbnQgc3BlY2lmaWVyLgotICAgICAgICAgIDQzNTEsICAjIE5ldyBiZWhhdmlvcjogZWxlbWVudHMgb2YgYXJyYXkgd2lsbCBiZSBkZWZhdWx0IGluaXRpYWxpemVkLgotICAgICAgICAgIDQ1NzcsICAjICdub2V4Y2VwdCcgdXNlZCB3aXRoIG5vIGV4Y2VwdGlvbiBoYW5kbGluZyBtb2RlIHNwZWNpZmllZC4KLSAgICAgICAgICA0OTk2LCAgIyAnWCcgd2FzIGRlY2xhcmVkIGRlcHJlY2F0ZWQuCi0gICAgICAgIF0sCi0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdfSEFTX0VYQ0VQVElPTlM9MCcsCi0gICAgICAgICAgJ19DUlRfU0VDVVJFX05PX1dBUk5JTkdTJywKLSAgICAgICAgICAnTk9NSU5NQVgnLAotICAgICAgICAgICdXSU4zMl9MRUFOX0FORF9NRUFOJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotCi0gICAgXSwKLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ0RlYnVnJywKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnUmVsZWFzZSc6IHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ05ERUJVRycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotCi0gICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdERUFEX0NPREVfU1RSSVBQSU5HJzogJ1lFUycsICAjIC1XbCwtZGVhZF9zdHJpcAotICAgICAgICAgICAgICAnREVCVUdfSU5GT1JNQVRJT05fRk9STUFUJzogJ2R3YXJmLXdpdGgtZHN5bScsCi0gICAgICAgICAgICAgICdHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMJzogJzMnLAotCi0gICAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICBbJ190eXBlPT0iZXhlY3V0YWJsZSIgb3IgX3R5cGU9PSJzaGFyZWRfbGlicmFyeSIgb3IgXAotICAgICAgICAgICAgICAgICAgX3R5cGU9PSJsb2FkYWJsZV9tb2R1bGUiJywgewotICAgICAgICAgICAgICAgICAgJ0RFUExPWU1FTlRfUE9TVFBST0NFU1NJTkcnOiAnWUVTJywKLSAgICAgICAgICAgICAgICAgICdTVFJJUF9JTlNUQUxMRURfUFJPRFVDVCc6ICdZRVMnLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnX3R5cGU9PSJzaGFyZWRfbGlicmFyeSIgb3IgX3R5cGU9PSJsb2FkYWJsZV9tb2R1bGUiJywgewotICAgICAgICAgICAgICAgICAgJ1NUUklQRkxBR1MnOiAnLXgnLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgJy1PMycsCi0gICAgICAgICAgICAgICctZmRhdGEtc2VjdGlvbnMnLAotICAgICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctV2wsLU8xJywKLSAgICAgICAgICAgICAgJy1XbCwtLWdjLXNlY3Rpb25zJywKLSAgICAgICAgICAgIF0sCi0KLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZuby1pZGVudCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotCi0gICAgICAgICAgfV0sCi0KLSAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICdtc3ZzX2NvbmZpZ3VyYXRpb25fcGxhdGZvcm0nOiAnV2luMzInLAotICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgICAgICdSdW50aW1lTGlicmFyeSc6ICcwJywgICMgL01ULgotICAgICAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnMycsCi0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAgICAgJy9abycsICAjIEltcHJvdmUgZGVidWdnaW5nIG9wdGltaXplZCBidWlsZHMuCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxJywgICMgeDg2LgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAgICdNaW5pbXVtUmVxdWlyZWRWZXJzaW9uJzogJzUuMDEnLCAgIyBYUC4KLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxJywgICMgeDg2LgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwKLQotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdEZWJ1Zyc6IHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0KLSAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ0NPUFlfUEhBU0VfU1RSSVAnOiAnTk8nLAotICAgICAgICAgICAgICAnREVCVUdfSU5GT1JNQVRJT05fRk9STUFUJzogJ2R3YXJmJywKLSAgICAgICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMCcsCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgJy1PMCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotCi0gICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAnbXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtJzogJ1dpbjMyJywKLSAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMScsICAjIC9NVGQuCi0gICAgICAgICAgICAgICAgJ09wdGltaXphdGlvbic6ICcwJywKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxJywgICMgeDg2LgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAgICdNaW5pbXVtUmVxdWlyZWRWZXJzaW9uJzogJzUuMDEnLCAgIyBYUC4KLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxJywgICMgeDg2LgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnX0RFQlVHJywKLSAgICAgICAgICAgICAgJ19JVEVSQVRPUl9ERUJVR19MRVZFTD0yJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0KLSAgICAgICAgXSwKLSAgICAgIH0sCi0KLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAjIGd5cC1uaW5qYSBzZWVtcyB0byByZXF1aXJlIHRoZXNlLCBidXQgd2UgZG9uJ3QgdXNlIHRoZW0uCi0gICAgICAgICAgJ0RlYnVnX3g2NCc6IHsKLSAgICAgICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ0RlYnVnJ10sCi0gICAgICAgICAgICAnbXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtJzogJ3g2NCcsCi0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxNycsICAjIHg2NC4KLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnTWluaW11bVJlcXVpcmVkVmVyc2lvbic6ICc1LjAyJywgICMgU2VydmVyIDIwMDMuCi0gICAgICAgICAgICAgICAgJ1RhcmdldE1hY2hpbmUnOiAnMTcnLCAgIyB4NjQuCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ1JlbGVhc2VfeDY0JzogewotICAgICAgICAgICAgJ2luaGVyaXRfZnJvbSc6IFsnUmVsZWFzZSddLAotICAgICAgICAgICAgJ21zdnNfY29uZmlndXJhdGlvbl9wbGF0Zm9ybSc6ICd4NjQnLAotICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdWQ0xpYnJhcmlhblRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ1RhcmdldE1hY2hpbmUnOiAnMTcnLCAgIyB4NjQuCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ01pbmltdW1SZXF1aXJlZFZlcnNpb24nOiAnNS4wMicsICAjIFNlcnZlciAyMDAzLgotICAgICAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJzE3JywgICMgeDY0LgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9Ci0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICB9LAotCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAnU1lNUk9PVCc6ICc8KERFUFRIKS94Y29kZWJ1aWxkJywKLSAgICAgIH0sCi0gICAgfV0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2J1aWxkL2ZpbGVuYW1lX3J1bGVzLmd5cGkgYi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL2J1aWxkL2ZpbGVuYW1lX3J1bGVzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNzExNDguLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbWluaV9jaHJvbWl1bS9idWlsZC9maWxlbmFtZV9ydWxlcy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICBbJyI8KHRhcmdldF9vcykiIT0ibWFjIicsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ18oY29jb2F8bWFjKShfdGVzdCk/XFwuKGh8Y2N8bW0/KSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pKGNvY29hfG1hY3xtYWNoKS8nXSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWyciPCh0YXJnZXRfb3MpIiE9ImxpbnV4IicsIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ19saW51eChfdGVzdCk/XFwuKGh8Y2MpJCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnKF58LylsaW51eC8nXSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWyciPCh0YXJnZXRfb3MpIiE9ImFuZHJvaWQiJywgewotICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICBbJ2V4Y2x1ZGUnLCAnX2FuZHJvaWQoX3Rlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pYW5kcm9pZC8nXSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWyciPCh0YXJnZXRfb3MpIj09IndpbiInLCB7Ci0gICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgIFsnZXhjbHVkZScsICdfcG9zaXgoX3Rlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pcG9zaXgvJ10sCi0gICAgICBdLAotICAgIH0sIHsKLSAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgWydleGNsdWRlJywgJ193aW4oX3Rlc3QpP1xcLihofGNjKSQnXSwKLSAgICAgICAgWydleGNsdWRlJywgJyhefC8pd2luLyddLAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXAgYi90aGlyZF9wYXJ0eS9taW5pX2Nocm9taXVtL21pbmlfY2hyb21pdW0uZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmYxYjU5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L21pbmlfY2hyb21pdW0vbWluaV9jaHJvbWl1bS5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ2luY2x1ZGVzJzogWwotICAgICdidWlsZC9jb21tb24uZ3lwaScsCi0gIF0sCi0KLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ0FsbCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdzdXBwcmVzc193aWxkY2FyZCc6IDEsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnYmFzZS9iYXNlLmd5cDoqJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L21vZHBfYjY0L21vZHBfYjY0Lmd5cCBiL3RoaXJkX3BhcnR5L21vZHBfYjY0L21vZHBfYjY0Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFlZDExMS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9tb2RwX2I2NC9tb2RwX2I2NC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAwOSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtb2RwX2I2NCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ21vZHBfYjY0LmNjJywKLSAgICAgICAgJ21vZHBfYjY0LmgnLAotICAgICAgICAnbW9kcF9iNjRfZGF0YS5oJywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4vLi4nLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbXVzbC9tdXNsLmd5cCBiL3RoaXJkX3BhcnR5L211c2wvbXVzbC5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MWFhOTEuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvbXVzbC9tdXNsLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDU0OSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ3RhcmdldF9hcmNoID09ICJ4NjQiJywgewotICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ211c2xfYXJjaCc6ICd4ODZfNjQnCi0gICAgICAgIH0KLSAgICB9XSwKLSAgICBbJ3RhcmdldF9hcmNoID09ICJ4ODYiJywgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICdtdXNsX2FyY2gnOiAnaTM4NicKLSAgICAgICB9Ci0gICAgfV0sCi0gICAgWyd0YXJnZXRfYXJjaCA9PSAiYXJtIicsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAnbXVzbF9hcmNoJzogJ2FybScKLSAgICAgICB9Ci0gICAgfV0sCi0gICAgWyd0YXJnZXRfYXJjaCA9PSAiYXJtNjQiJywgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICdtdXNsX2FyY2gnOiAnYWFyY2g2NCcKLSAgICAgICB9Ci0gICAgfV0sCi0gICAgWyd0YXJnZXRfYXJjaCA9PSAibWlwcyInLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgJ211c2xfYXJjaCc6ICdtaXBzJwotICAgICAgIH0KLSAgICB9XSwKLSAgICAjIE5vdCB5ZXQgc3VwcG9ydGVkOgotICAgICMgdGFyZ2V0X2FyY2ggPT0gd2luCi0gIF0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdjJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdzcmMvaW50ZXJuYWwnLAotICAgICAgICAnYXJjaC88KG11c2xfYXJjaCkvJywKLSAgICAgIF0sCi0gICAgICAnY2ZsYWdzJzogWwotICAgICAgICAjIG5vLXVua25vd24tcHJhZ21hcyAgLXcgc2hpZnQtb3AtcGFyZW50aGVzZXMKLSAgICAgICAgJy1ub2J1aWx0aW5pbmMnLAotICAgICAgICAnLWlzeXN0ZW08KERFUFRIKS90aGlyZF9wYXJ0eS9tdXNsL2luY2x1ZGUnLAotICAgICAgICAnLWlzeXN0ZW08KERFUFRIKS90aGlyZF9wYXJ0eS9tdXNsL2FyY2gvPChtdXNsX2FyY2gpJywKLSAgICAgICAgJy1pc3lzdGVtPChERVBUSCkvdGhpcmRfcGFydHkvbXVzbC9hcmNoL2dlbmVyaWMnLAotICAgICAgICAnLXcnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICdtdXNsL2luY2x1ZGUnLAotICAgICAgICAgICdhcmNoLzwobXVzbF9hcmNoKS8nLAotICAgICAgICAgICdhcmNoL2dlbmVyaWMvJywKLSAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdkZWZpbmVzJyA6IFsKLSAgICAgICAgIyBFbmFibGVzIHRlbXBvcmFyeSBzaXR1YXRpb24gd2hlcmUgbWFpbiBjb2JhbHQgaXMgYnVpbHQgd2l0aAotICAgICAgICAjIGdsaWJjIGhlYWRlcnMgYnV0IHRoZW4gbGlua2VkIHdpdGggc29tZSBtdXNsIGNvbXBvbmVudHMuCi0gICAgICAgICMgRXhwZWN0ZWQgdG8gZ28gYXdheSB3aGVuIG1haW4gY29iYWx0IGlzIGFsc28gYnVpbGQgd2l0aAotICAgICAgICAjIHN0YW5kLWFsb25lIGxpYmMrKy4KLSAgICAgICAgJ0NPQkFMVF9NVVNMX1dfR0xJQkNfSEVBREVSUycKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydtdXNsX2FyY2ggaW4gWyJpMzg2IiwgIng4Nl82NCIsICJhYXJjaDY0Il0nLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnc3JjL2ZlbnYvPChtdXNsX2FyY2gpL2ZlbnYucycsCi0gICAgICAgICAgICAnc3JjL3NldGptcC88KG11c2xfYXJjaCkvc2V0am1wLnMnLAotICAgICAgICAgICAgJ3NyYy9zZXRqbXAvPChtdXNsX2FyY2gpL2xvbmdqbXAucycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnbXVzbF9hcmNoID09ICJhcm0iJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3NyYy9mZW52L2FybS9mZW52LmMnLAotICAgICAgICAgICAgJ3NyYy9mZW52L2FybS9mZW52LWhmLlMnLAotICAgICAgICAgICAgJ3NyYy9zZXRqbXAvPChtdXNsX2FyY2gpL3NldGptcC5zJywKLSAgICAgICAgICAgICdzcmMvc2V0am1wLzwobXVzbF9hcmNoKS9sb25nam1wLnMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ211c2xfYXJjaCA9PSAibWlwcyInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnc3JjL2ZlbnYvbWlwcy9mZW52LlMsJywKLSAgICAgICAgICAgICdzcmMvZmVudi9taXBzL2ZlbnYtc2YuYycsCi0gICAgICAgICAgICAnc3JjL3NldGptcC88KG11c2xfYXJjaCkvc2V0am1wLlMnLAotICAgICAgICAgICAgJ3NyYy9zZXRqbXAvPChtdXNsX2FyY2gpL2xvbmdqbXAuUycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnbXVzbF9hcmNoIGluIFsiaTM4NiIsICJ4ODZfNjQiXScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdzcmMvc3RyaW5nLzwobXVzbF9hcmNoKS9tZW1jcHkucycsCi0gICAgICAgICAgICAnc3JjL3N0cmluZy88KG11c2xfYXJjaCkvbWVtbW92ZS5zJywKLSAgICAgICAgICAgICdzcmMvc3RyaW5nLzwobXVzbF9hcmNoKS9tZW1zZXQucycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnc3JjL3N0cmluZy9tZW1jcHkuYycsCi0gICAgICAgICAgICAnc3JjL3N0cmluZy9tZW1tb3ZlLmMnLAotICAgICAgICAgICAgJ3NyYy9zdHJpbmcvbWVtc2V0LmMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICAjIFN0YXJib2FyZGl6ZWQgaW1wbGVtZW50YXRpb25zIGFyZSBvbmx5IGluY2x1ZGVkIGZvciBFdmVyZ3JlZW4KLSAgICAgICAgIyB0byBhdm9pZCBoYXZpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgbGliYyBpbiBhIGJpbmFyeS4gU29tZQotICAgICAgICAjIG5vbi1TdGFyYm9hcmRpemVkIGltcGxlbWVudGF0aW9ucywgc3VjaCBhcyAnc3JjL3N0ZGlvL3NzY2FuZi5jJywgYXJlCi0gICAgICAgICMgYWxzbyBvbmx5IGluY2x1ZGVkIGZvciBFdmVyZ3JlZW4gYmVjYXVzZSB0aGV5IGFyZSBlc3NlbnRpYWxseSB3cmFwcGVycwotICAgICAgICAjIGFyb3VuZCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gU3RhcmJvYXJkaXplZC4KLSAgICAgICAgWydzYl9ldmVyZ3JlZW4gPT0gMScsIHsKLSAgICAgICAgICAjIFRoZSBkaXJlY3RvcmllcyBoZXJlIGFyZSBwcmVwZW5kZWQgdG8gdGhlIGV4aXN0aW5nIGxpc3Qgb2YKLSAgICAgICAgICAjIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgc2luY2UgdGhlIG9yZGVyIGluIHRoZQotICAgICAgICAgICMgbGlzdCBkZXRlcm1pbmVzIGhvdyBmaWxlcyBhcmUgcmVzb2x2ZWQuCi0gICAgICAgICAgJ2luY2x1ZGVfZGlycysnOiBbCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9pbnRlcm5hbCcsCi0gICAgICAgICAgICAnc3JjL2Vycm5vJywKLSAgICAgICAgICAgICdzcmMvbXVsdGlieXRlJywKLSAgICAgICAgICAgICdzcmMvdGltZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL2N0eXBlL19fY3R5cGVfZ2V0X21iX2N1cl9tYXguYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9lcnJuby9fX2Vycm5vX2xvY2F0aW9uLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGFyYm9hcmQvZXhpdC9hYm9ydC5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL2h3Y2FwL3NldGh3Y2FwLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGFyYm9hcmQvbG9jYWxlL2ZyZWVsb2NhbGUuYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9sb2NhbGUvbGFuZ2luZm8uYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9sb2NhbGUvbG9jYWxlY29udi5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL2xvY2FsZS9uZXdsb2NhbGUuYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9sb2NhbGUvc2V0bG9jYWxlLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGFyYm9hcmQvbG9jYWxlL3VzZWxvY2FsZS5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL21hbGxvYy9tYWxsb2MuYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9tYWxsb2MvbWVtYWxpZ24uYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9tYWxsb2MvcG9zaXhfbWVtYWxpZ24uYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9zdGRpby9mZmx1c2guYycsCi0gICAgICAgICAgICAnc3JjL3N0YXJib2FyZC9zdGRpby9mcHV0Yy5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3N0ZGlvL3N0ZGVyci5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3N0ZGlvL3N0ZG91dC5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3N0ZGlvL3ZmcHJpbnRmLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGFyYm9hcmQvc3RkaW8vdnNucHJpbnRmLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGFyYm9hcmQvc3RkaW8vdnNzY2FuZi5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3N0ZGlvL3Zzd3ByaW50Zi5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3N0ZGxpYi9zdHJ0b2RfbC5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3RpbWUvX190ei5jJywKLSAgICAgICAgICAgICdzcmMvc3RhcmJvYXJkL3RpbWUvY2xvY2tfZ2V0dGltZS5jJywKLQotICAgICAgICAgICAgJ3NyYy9jdHlwZS9pc3dzcGFjZS5jJywKLSAgICAgICAgICAgICdzcmMvZXJybm8vc3RyZXJyb3IuYycsCi0gICAgICAgICAgICAnc3JjL2V4aXQvYXNzZXJ0LmMnLAotICAgICAgICAgICAgJ3NyYy9leGl0L2F0ZXhpdC5jJywKLSAgICAgICAgICAgICdzcmMvZXhpdC9leGl0LmMnLAotICAgICAgICAgICAgJ3NyYy9pbnRlcm5hbC9mbG9hdHNjYW4uYycsCi0gICAgICAgICAgICAnc3JjL2ludGVybmFsL2ludHNjYW4uYycsCi0gICAgICAgICAgICAnc3JjL2ludGVybmFsL3NoZ2V0Yy5jJywKLSAgICAgICAgICAgICdzcmMvbG9jYWxlL3N0cmNvbGwuYycsCi0gICAgICAgICAgICAnc3JjL2xvY2FsZS9zdHJjb2xsLmMnLAotICAgICAgICAgICAgJ3NyYy9sb2NhbGUvc3RyeGZybS5jJywKLSAgICAgICAgICAgICdzcmMvbG9jYWxlL3N0cnhmcm0uYycsCi0gICAgICAgICAgICAnc3JjL2xvY2FsZS93Y3Njb2xsLmMnLAotICAgICAgICAgICAgJ3NyYy9sb2NhbGUvd2NzY29sbC5jJywKLSAgICAgICAgICAgICdzcmMvbG9jYWxlL3djc3hmcm0uYycsCi0gICAgICAgICAgICAnc3JjL2xvY2FsZS93Y3N4ZnJtLmMnLAotICAgICAgICAgICAgJ3NyYy9tYXRoL2NvcHlzaWdubC5jJywKLSAgICAgICAgICAgICdzcmMvbWF0aC9zY2FsYm5sLmMnLAotICAgICAgICAgICAgJ3NyYy9tdWx0aWJ5dGUvYnRvd2MuYycsCi0gICAgICAgICAgICAnc3JjL211bHRpYnl0ZS9pbnRlcm5hbC5jJywKLSAgICAgICAgICAgICdzcmMvbXVsdGlieXRlL21icmxlbi5jJywKLSAgICAgICAgICAgICdzcmMvbXVsdGlieXRlL21icnRvd2MuYycsCi0gICAgICAgICAgICAnc3JjL211bHRpYnl0ZS9tYnNucnRvd2NzLmMnLAotICAgICAgICAgICAgJ3NyYy9tdWx0aWJ5dGUvbWJzcnRvd2NzLmMnLAotICAgICAgICAgICAgJ3NyYy9tdWx0aWJ5dGUvbWJ0b3djLmMnLAotICAgICAgICAgICAgJ3NyYy9tdWx0aWJ5dGUvd2NydG9tYi5jJywKLSAgICAgICAgICAgICdzcmMvbXVsdGlieXRlL3djc25ydG9tYnMuYycsCi0gICAgICAgICAgICAnc3JjL211bHRpYnl0ZS93Y3NydG9tYnMuYycsCi0gICAgICAgICAgICAnc3JjL211bHRpYnl0ZS93Y3N0b21icy5jJywKLSAgICAgICAgICAgICdzcmMvbXVsdGlieXRlL3djdG9iLmMnLAotICAgICAgICAgICAgJ3NyYy9wcm5nL3JhbmQuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGlvL19fdG9yZWFkLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRpby9fX3VmbG93LmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRpby9mcHJpbnRmLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRpby9md3JpdGUuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGlvL3ByaW50Zi5jJywKLSAgICAgICAgICAgICdzcmMvc3RkaW8vc25wcmludGYuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGlvL3NzY2FuZi5jJywKLSAgICAgICAgICAgICdzcmMvc3RkaW8vc3dwcmludGYuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGlvL3Zhc3ByaW50Zi5jJywKLSAgICAgICAgICAgICdzcmMvc3RkaW8vdnByaW50Zi5jJywKLSAgICAgICAgICAgICdzcmMvc3RkaW8vdnNwcmludGYuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGxpYi9hYnMuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGxpYi9hdG9mLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvYXRvaS5jJywKLSAgICAgICAgICAgICdzcmMvc3RkbGliL2F0b2wuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGxpYi9ic2VhcmNoLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvZGl2LmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvbGFicy5jJywKLSAgICAgICAgICAgICdzcmMvc3RkbGliL2xsYWJzLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvc3RydG9kLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvc3RydG9sLmMnLAotICAgICAgICAgICAgJ3NyYy9zdGRsaWIvcXNvcnQuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGxpYi93Y3N0b2QuYycsCi0gICAgICAgICAgICAnc3JjL3N0ZGxpYi93Y3N0b2wuYycsCi0gICAgICAgICAgICAnc3JjL3N0cmluZy9zdHJlcnJvcl9yLmMnLAotICAgICAgICAgICAgJ3NyYy90aW1lL19fbW9udGhfdG9fc2Vjcy5jJywKLSAgICAgICAgICAgICdzcmMvdGltZS9fX3RtX3RvX3NlY3MuYycsCi0gICAgICAgICAgICAnc3JjL3RpbWUvX195ZWFyX3RvX3NlY3MuYycsCi0gICAgICAgICAgICAnc3JjL3RpbWUvc3RyZnRpbWUuYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzcmMvY3R5cGUvX19jdHlwZV9iX2xvYy5jJywKLSAgICAgICAgIyBFeGNsdWRlZCBiZWNhdXNlIGxvY2FsZV9pbXBsIG5lZWRzIG11dGV4cwotICAgICAgICAjICdzcmMvY3R5cGUvX19jdHlwZV9nZXRfbWJfY3VyX21heC5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS9fX2N0eXBlX3RvbG93ZXJfbG9jLmMnLAotICAgICAgICAnc3JjL2N0eXBlL19fY3R5cGVfdG91cHBlcl9sb2MuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXNhbG51bS5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS9pc2FscGhhLmMnLAotICAgICAgICAnc3JjL2N0eXBlL2lzYXNjaWkuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXNibGFuay5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS9pc2NudHJsLmMnLAotICAgICAgICAnc3JjL2N0eXBlL2lzZGlnaXQuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXNncmFwaC5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS9pc2xvd2VyLmMnLAotICAgICAgICAnc3JjL2N0eXBlL2lzcHJpbnQuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXNwdW5jdC5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS9pc3NwYWNlLmMnLAotICAgICAgICAnc3JjL2N0eXBlL2lzdXBwZXIuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3YWxudW0uYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3YWxwaGEuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3YmxhbmsuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3Y250cmwuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3Y3R5cGUuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3ZGlnaXQuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3Z3JhcGguYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3bG93ZXIuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3cHJpbnQuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3cHVuY3QuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3c3BhY2UuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3dXBwZXIuYycsCi0gICAgICAgICdzcmMvY3R5cGUvaXN3eGRpZ2l0LmMnLAotICAgICAgICAnc3JjL2N0eXBlL2lzeGRpZ2l0LmMnLAotICAgICAgICAnc3JjL2N0eXBlL3RvbG93ZXIuYycsCi0gICAgICAgICdzcmMvY3R5cGUvdG91cHBlci5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS90b3djdHJhbnMuYycsCi0gICAgICAgICdzcmMvY3R5cGUvd2Nzd2lkdGguYycsCi0gICAgICAgICdzcmMvY3R5cGUvd2N0cmFucy5jJywKLSAgICAgICAgJ3NyYy9jdHlwZS93Y3dpZHRoLmMnLAotICAgICAgICAnc3JjL2ZlbnYvZmVnZXRleGNlcHRmbGFnLmMnLAotICAgICAgICAnc3JjL2ZlbnYvZmVob2xkZXhjZXB0LmMnLAotICAgICAgICAnc3JjL2ZlbnYvZmVzZXRleGNlcHRmbGFnLmMnLAotICAgICAgICAnc3JjL2ZlbnYvZmVzZXRyb3VuZC5jJywKLSAgICAgICAgJ3NyYy9mZW52L2ZldXBkYXRlZW52LmMnLAotICAgICAgICAnc3JjL2ZlbnYvX19mbHRfcm91bmRzLmMnLAotICAgICAgICAnc3JjL21hdGgvYWNvcy5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2Fjb3NmLmMnLAotICAgICAgICAnc3JjL21hdGgvYWNvc2guYycsCi0gICAgICAgICdzcmMvbWF0aC9hY29zaGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9hY29zaGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9hY29zbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2FzaW4uYycsCi0gICAgICAgICdzcmMvbWF0aC9hc2luZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2FzaW5oLmMnLAotICAgICAgICAnc3JjL21hdGgvYXNpbmhmLmMnLAotICAgICAgICAnc3JjL21hdGgvYXNpbmhsLmMnLAotICAgICAgICAnc3JjL21hdGgvYXNpbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9hdGFuMi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2F0YW4yZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2F0YW4ybC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2F0YW4uYycsCi0gICAgICAgICdzcmMvbWF0aC9hdGFuZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2F0YW5oLmMnLAotICAgICAgICAnc3JjL21hdGgvYXRhbmhmLmMnLAotICAgICAgICAnc3JjL21hdGgvYXRhbmhsLmMnLAotICAgICAgICAnc3JjL21hdGgvYXRhbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9jYnJ0LmMnLAotICAgICAgICAnc3JjL21hdGgvY2JydGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9jYnJ0bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2NlaWwuYycsCi0gICAgICAgICdzcmMvbWF0aC9jZWlsZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2NlaWxsLmMnLAotICAgICAgICAnc3JjL21hdGgvY29weXNpZ24uYycsCi0gICAgICAgICdzcmMvbWF0aC9jb3B5c2lnbmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9jb3B5c2lnbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX2Nvcy5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2Nvcy5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fY29zZGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9jb3NmLmMnLAotICAgICAgICAnc3JjL21hdGgvY29zaC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2Nvc2hmLmMnLAotICAgICAgICAnc3JjL21hdGgvY29zaGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX2Nvc2wuYycsCi0gICAgICAgICdzcmMvbWF0aC9jb3NsLmMnLAotICAgICAgICAnc3JjL21hdGgvZXJmLmMnLAotICAgICAgICAnc3JjL21hdGgvZXJmZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2VyZmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9leHAxMC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cDEwZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cDEwbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cDIuYycsCi0gICAgICAgICdzcmMvbWF0aC9leHAyZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cDJsLmMnLAotICAgICAgICAnc3JjL21hdGgvZXhwLmMnLAotICAgICAgICAnc3JjL21hdGgvZXhwZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9leHBtMS5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cG0xZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2V4cG0xbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fZXhwbzIuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX2V4cG8yZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZhYnMuYycsCi0gICAgICAgICdzcmMvbWF0aC9mYWJzZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZhYnNsLmMnLAotICAgICAgICAnc3JjL21hdGgvZmRpbS5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZkaW1mLmMnLAotICAgICAgICAnc3JjL21hdGgvZmRpbWwuYycsCi0gICAgICAgICdzcmMvbWF0aC9maW5pdGUuYycsCi0gICAgICAgICdzcmMvbWF0aC9maW5pdGVmLmMnLAotICAgICAgICAnc3JjL21hdGgvZmxvb3IuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbG9vcmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbG9vcmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbWEuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbWFmLmMnLAotICAgICAgICAnc3JjL21hdGgvZm1hbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZtYXguYycsCi0gICAgICAgICdzcmMvbWF0aC9mbWF4Zi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZtYXhsLmMnLAotICAgICAgICAnc3JjL21hdGgvZm1pbi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2ZtaW5mLmMnLAotICAgICAgICAnc3JjL21hdGgvZm1pbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbW9kLmMnLAotICAgICAgICAnc3JjL21hdGgvZm1vZGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9mbW9kbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fZnBjbGFzc2lmeS5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fZnBjbGFzc2lmeWYuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX2ZwY2xhc3NpZnlsLmMnLAotICAgICAgICAnc3JjL21hdGgvZnJleHAuYycsCi0gICAgICAgICdzcmMvbWF0aC9mcmV4cGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9mcmV4cGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9oeXBvdC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2h5cG90Zi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2h5cG90bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2lsb2diLmMnLAotICAgICAgICAnc3JjL21hdGgvaWxvZ2JmLmMnLAotICAgICAgICAnc3JjL21hdGgvaWxvZ2JsLmMnLAotICAgICAgICAnc3JjL21hdGgvX19pbnZ0cmlnbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2owLmMnLAotICAgICAgICAnc3JjL21hdGgvajBmLmMnLAotICAgICAgICAnc3JjL21hdGgvajEuYycsCi0gICAgICAgICdzcmMvbWF0aC9qMWYuYycsCi0gICAgICAgICdzcmMvbWF0aC9qbi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2puZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xkZXhwLmMnLAotICAgICAgICAnc3JjL21hdGgvbGRleHBmLmMnLAotICAgICAgICAnc3JjL21hdGgvbGRleHBsLmMnLAotICAgICAgICAnc3JjL21hdGgvbGdhbW1hLmMnLAotICAgICAgICAnc3JjL21hdGgvbGdhbW1hZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xnYW1tYWZfci5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xnYW1tYWwuYycsCi0gICAgICAgICdzcmMvbWF0aC9sZ2FtbWFfci5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xscmludC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xscmludGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9sbHJpbnRsLmMnLAotICAgICAgICAnc3JjL21hdGgvbGxyb3VuZC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xscm91bmRmLmMnLAotICAgICAgICAnc3JjL21hdGgvbGxyb3VuZGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9sb2cxMC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZzEwZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZzEwbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZzFwLmMnLAotICAgICAgICAnc3JjL21hdGgvbG9nMXBmLmMnLAotICAgICAgICAnc3JjL21hdGgvbG9nMXBsLmMnLAotICAgICAgICAnc3JjL21hdGgvbG9nMi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZzJmLmMnLAotICAgICAgICAnc3JjL21hdGgvbG9nMmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9sb2diLmMnLAotICAgICAgICAnc3JjL21hdGgvbG9nYmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9sb2dibC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZy5jJywKLSAgICAgICAgJ3NyYy9tYXRoL2xvZ2YuYycsCi0gICAgICAgICdzcmMvbWF0aC9sb2dsLmMnLAotICAgICAgICAnc3JjL21hdGgvbHJpbnQuYycsCi0gICAgICAgICdzcmMvbWF0aC9scmludGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9scmludGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9scm91bmQuYycsCi0gICAgICAgICdzcmMvbWF0aC9scm91bmRmLmMnLAotICAgICAgICAnc3JjL21hdGgvbHJvdW5kbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL21vZGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9tb2RmZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL21vZGZsLmMnLAotICAgICAgICAnc3JjL21hdGgvbmFuLmMnLAotICAgICAgICAnc3JjL21hdGgvbmFuZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL25hbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9uZWFyYnlpbnQuYycsCi0gICAgICAgICdzcmMvbWF0aC9uZWFyYnlpbnRmLmMnLAotICAgICAgICAnc3JjL21hdGgvbmVhcmJ5aW50bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL25leHRhZnRlci5jJywKLSAgICAgICAgJ3NyYy9tYXRoL25leHRhZnRlcmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9uZXh0YWZ0ZXJsLmMnLAotICAgICAgICAnc3JjL21hdGgvbmV4dHRvd2FyZC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL25leHR0b3dhcmRmLmMnLAotICAgICAgICAnc3JjL21hdGgvbmV4dHRvd2FyZGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX3BvbGV2bGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9wb3cuYycsCi0gICAgICAgICdzcmMvbWF0aC9wb3dmLmMnLAotICAgICAgICAnc3JjL21hdGgvcG93bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3JlbWFpbmRlci5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3JlbWFpbmRlcmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9yZW1haW5kZXJsLmMnLAotICAgICAgICAnc3JjL21hdGgvX19yZW1fcGlvMi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fcmVtX3BpbzJmLmMnLAotICAgICAgICAnc3JjL21hdGgvX19yZW1fcGlvMl9sYXJnZS5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fcmVtX3BpbzJsLmMnLAotICAgICAgICAnc3JjL21hdGgvcmVtcXVvLmMnLAotICAgICAgICAnc3JjL21hdGgvcmVtcXVvZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3JlbXF1b2wuYycsCi0gICAgICAgICdzcmMvbWF0aC9yaW50LmMnLAotICAgICAgICAnc3JjL21hdGgvcmludGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9yaW50bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3JvdW5kLmMnLAotICAgICAgICAnc3JjL21hdGgvcm91bmRmLmMnLAotICAgICAgICAnc3JjL21hdGgvcm91bmRsLmMnLAotICAgICAgICAnc3JjL21hdGgvc2NhbGIuYycsCi0gICAgICAgICdzcmMvbWF0aC9zY2FsYmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zY2FsYmxuLmMnLAotICAgICAgICAnc3JjL21hdGgvc2NhbGJsbmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zY2FsYmxubC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NjYWxibi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NjYWxibmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zY2FsYm5sLmMnLAotICAgICAgICAnc3JjL21hdGgvX19zaWduYml0LmMnLAotICAgICAgICAnc3JjL21hdGgvX19zaWduYml0Zi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fc2lnbmJpdGwuYycsCi0gICAgICAgICdzcmMvbWF0aC9zaWduZ2FtLmMnLAotICAgICAgICAnc3JjL21hdGgvc2lnbmlmaWNhbmQuYycsCi0gICAgICAgICdzcmMvbWF0aC9zaWduaWZpY2FuZGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9fX3Npbi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3Npbi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NpbmNvcy5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NpbmNvc2YuYycsCi0gICAgICAgICdzcmMvbWF0aC9zaW5jb3NsLmMnLAotICAgICAgICAnc3JjL21hdGgvX19zaW5kZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NpbmYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zaW5oLmMnLAotICAgICAgICAnc3JjL21hdGgvc2luaGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zaW5obC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fc2lubC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3NpbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC9zcXJ0LmMnLAotICAgICAgICAnc3JjL21hdGgvc3FydGYuYycsCi0gICAgICAgICdzcmMvbWF0aC9zcXJ0bC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fdGFuLmMnLAotICAgICAgICAnc3JjL21hdGgvdGFuLmMnLAotICAgICAgICAnc3JjL21hdGgvX190YW5kZi5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3RhbmYuYycsCi0gICAgICAgICdzcmMvbWF0aC90YW5oLmMnLAotICAgICAgICAnc3JjL21hdGgvdGFuaGYuYycsCi0gICAgICAgICdzcmMvbWF0aC90YW5obC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL19fdGFubC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3RhbmwuYycsCi0gICAgICAgICdzcmMvbWF0aC90Z2FtbWEuYycsCi0gICAgICAgICdzcmMvbWF0aC90Z2FtbWFmLmMnLAotICAgICAgICAnc3JjL21hdGgvdGdhbW1hbC5jJywKLSAgICAgICAgJ3NyYy9tYXRoL3RydW5jLmMnLAotICAgICAgICAnc3JjL21hdGgvdHJ1bmNmLmMnLAotICAgICAgICAnc3JjL21hdGgvdHJ1bmNsLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9iY21wLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9iY29weS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvYnplcm8uYycsCi0gICAgICAgICdzcmMvc3RyaW5nL2J6ZXJvLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9leHBsaWNpdF9iemVyby5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvaW5kZXguYycsCi0gICAgICAgICdzcmMvc3RyaW5nL21lbWNjcHkuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL21lbWNoci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvbWVtY21wLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9tZW1jcHkuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL21lbW1lbS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvbWVtbW92ZS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvbWVtcGNweS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvbWVtcmNoci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvbWVtc2V0LmMnLAotICAgICAgICAnc3JjL3N0cmluZy9yaW5kZXguYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cGNweS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RwbmNweS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RyY2F0LmMnLAotICAgICAgICAnc3JjL3N0cmluZy9zdHJjaHIuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cmNocm51bC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RyY21wLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9zdHJjcHkuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cmNzcG4uYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cmxjYXQuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cmxjcHkuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cmxlbi5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RybmNhdC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RybmNtcC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RybmNweS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3Rybmxlbi5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RycGJyay5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RycmNoci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3Ryc2VwLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9zdHJzcG4uYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3N0cnN0ci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RydG9rLmMnLAotICAgICAgICAnc3JjL3N0cmluZy9zdHJ0b2tfci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3RydmVyc2NtcC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvc3dhYi5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NwY3B5LmMnLAotICAgICAgICAnc3JjL3N0cmluZy93Y3BuY3B5LmMnLAotICAgICAgICAnc3JjL3N0cmluZy93Y3NjYXQuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3djc2Noci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzY21wLmMnLAotICAgICAgICAnc3JjL3N0cmluZy93Y3NjcHkuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3djc2NzcG4uYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3djc2xlbi5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzbmNhdC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzbmNtcC5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzbmNweS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2Nzbmxlbi5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzcGJyay5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2NzcmNoci5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2Nzc3BuLmMnLAotICAgICAgICAnc3JjL3N0cmluZy93Y3NzdHIuYycsCi0gICAgICAgICdzcmMvc3RyaW5nL3djc3Rvay5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd2Nzd2NzLmMnLAotICAgICAgICAnc3JjL3N0cmluZy93bWVtY2hyLmMnLAotICAgICAgICAnc3JjL3N0cmluZy93bWVtY21wLmMnLAotICAgICAgICAnc3JjL3N0cmluZy93bWVtY3B5LmMnLAotICAgICAgICAnc3JjL3N0cmluZy93bWVtbW92ZS5jJywKLSAgICAgICAgJ3NyYy9zdHJpbmcvd21lbXNldC5jJywKLSAgICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtdXNsX3VuaXR0ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ3Rlc3QvdHlwZV9zaXplX3Rlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdjJywKLSAgICAgICAgJzwoREVQVEgpL3N0YXJib2FyZC9zdGFyYm9hcmRfaGVhZGVyc19vbmx5Lmd5cDpzdGFyYm9hcmRfaGVhZGVyc19vbmx5JywKLSAgICAgIF0sCi0gICAgfQotICBdCi19Ci0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L211c2wvc3JjL2V4aXQvYXRleGl0LmMgYi90aGlyZF9wYXJ0eS9tdXNsL3NyYy9leGl0L2F0ZXhpdC5jCmluZGV4IDZiYTQ3YTYuLmNkNjFlZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L211c2wvc3JjL2V4aXQvYXRleGl0LmMKKysrIGIvdGhpcmRfcGFydHkvbXVzbC9zcmMvZXhpdC9hdGV4aXQuYwpAQCAtNSw3ICs1LDYgQEAKICNpZmRlZiBTVEFSQk9BUkQKICNpbmNsdWRlICJzdGFyYm9hcmQvY29tbW9uL2xvZy5oIgogI2luY2x1ZGUgInN0YXJib2FyZC9tdXRleC5oIgotI2luY2x1ZGUgInN0YXJib2FyZC90aHJlYWRfdHlwZXMuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdHlwZXMuaCIKICNlbmRpZiAgLy8gU1RBUkJPQVJECiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L211c2wvc3JjL3N0YXJib2FyZC9lcnJuby9fX2Vycm5vX2xvY2F0aW9uLmMgYi90aGlyZF9wYXJ0eS9tdXNsL3NyYy9zdGFyYm9hcmQvZXJybm8vX19lcnJub19sb2NhdGlvbi5jCmluZGV4IDE3NzBjY2YuLmJlZmE3YmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L211c2wvc3JjL3N0YXJib2FyZC9lcnJuby9fX2Vycm5vX2xvY2F0aW9uLmMKKysrIGIvdGhpcmRfcGFydHkvbXVzbC9zcmMvc3RhcmJvYXJkL2Vycm5vL19fZXJybm9fbG9jYXRpb24uYwpAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlICJzdGFyYm9hcmQvbWVtb3J5LmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL29uY2UuaCIKICNpbmNsdWRlICJzdGFyYm9hcmQvdGhyZWFkLmgiCi0jaW5jbHVkZSAic3RhcmJvYXJkL3RocmVhZF90eXBlcy5oIgogCiBzdGF0aWMgU2JUaHJlYWRMb2NhbEtleSBnX2Vycm5vX2tleSA9IGtTYlRocmVhZExvY2FsS2V5SW52YWxpZDsKIHN0YXRpYyBTYk9uY2VDb250cm9sIGdfZXJybm9fb25jZSA9IFNCX09OQ0VfSU5JVElBTElaRVI7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcHVzL29wdXMuZ3lwIGIvdGhpcmRfcGFydHkvb3B1cy9vcHVzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJkYThkMi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9vcHVzL29wdXMuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NiX2Rpc2FibGVfb3B1c19zc2UlJzogMCwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ29wdXMnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4nLAotICAgICAgICAnY2VsdCcsCi0gICAgICAgICdpbmNsdWRlJywKLSAgICAgICAgJ3NpbGsnLAotICAgICAgICAnc2lsay9mbG9hdCcsCi0gICAgICAgICdzdGFyYm9hcmQnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnY2VsdC9fa2lzc19mZnRfZ3V0cy5oJywKLSAgICAgICAgJ2NlbHQvYXJjaC5oJywKLSAgICAgICAgJ2NlbHQvYmFuZHMuYycsCi0gICAgICAgICdjZWx0L2JhbmRzLmgnLAotICAgICAgICAnY2VsdC9jZWx0LmMnLAotICAgICAgICAnY2VsdC9jZWx0LmgnLAotICAgICAgICAnY2VsdC9jZWx0X2RlY29kZXIuYycsCi0gICAgICAgICdjZWx0L2NlbHRfZW5jb2Rlci5jJywKLSAgICAgICAgJ2NlbHQvY2VsdF9scGMuYycsCi0gICAgICAgICdjZWx0L2NlbHRfbHBjLmgnLAotICAgICAgICAnY2VsdC9jd3JzLmMnLAotICAgICAgICAnY2VsdC9jd3JzLmgnLAotICAgICAgICAnY2VsdC9lY2ludHJpbi5oJywKLSAgICAgICAgJ2NlbHQvZW50Y29kZS5jJywKLSAgICAgICAgJ2NlbHQvZW50Y29kZS5oJywKLSAgICAgICAgJ2NlbHQvZW50ZGVjLmMnLAotICAgICAgICAnY2VsdC9lbnRkZWMuaCcsCi0gICAgICAgICdjZWx0L2VudGVuYy5jJywKLSAgICAgICAgJ2NlbHQvZW50ZW5jLmgnLAotICAgICAgICAnY2VsdC9maXhlZF9jNXguaCcsCi0gICAgICAgICdjZWx0L2ZpeGVkX2M2eC5oJywKLSAgICAgICAgJ2NlbHQvZml4ZWRfZGVidWcuaCcsCi0gICAgICAgICdjZWx0L2ZpeGVkX2dlbmVyaWMuaCcsCi0gICAgICAgICdjZWx0L2Zsb2F0X2Nhc3QuaCcsCi0gICAgICAgICdjZWx0L2tpc3NfZmZ0LmMnLAotICAgICAgICAnY2VsdC9raXNzX2ZmdC5oJywKLSAgICAgICAgJ2NlbHQvbGFwbGFjZS5jJywKLSAgICAgICAgJ2NlbHQvbGFwbGFjZS5oJywKLSAgICAgICAgJ2NlbHQvbWF0aG9wcy5jJywKLSAgICAgICAgJ2NlbHQvbWF0aG9wcy5oJywKLSAgICAgICAgJ2NlbHQvbWRjdC5jJywKLSAgICAgICAgJ2NlbHQvbWRjdC5oJywKLSAgICAgICAgJ2NlbHQvbWZybmdjb2QuaCcsCi0gICAgICAgICdjZWx0L21vZGVzLmMnLAotICAgICAgICAnY2VsdC9tb2Rlcy5oJywKLSAgICAgICAgJ2NlbHQvb3Nfc3VwcG9ydC5oJywKLSAgICAgICAgJ2NlbHQvcGl0Y2guYycsCi0gICAgICAgICdjZWx0L3BpdGNoLmgnLAotICAgICAgICAnY2VsdC9xdWFudF9iYW5kcy5jJywKLSAgICAgICAgJ2NlbHQvcXVhbnRfYmFuZHMuaCcsCi0gICAgICAgICdjZWx0L3JhdGUuYycsCi0gICAgICAgICdjZWx0L3JhdGUuaCcsCi0gICAgICAgICdjZWx0L3N0YWNrX2FsbG9jLmgnLAotICAgICAgICAnY2VsdC9zdGF0aWNfbW9kZXNfZml4ZWQuaCcsCi0gICAgICAgICdjZWx0L3N0YXRpY19tb2Rlc19mbG9hdC5oJywKLSAgICAgICAgJ2NlbHQvdnEuYycsCi0gICAgICAgICdjZWx0L3ZxLmgnLAotCi0gICAgICAgICdpbmNsdWRlL29wdXMuaCcsCi0gICAgICAgICdpbmNsdWRlL29wdXNfZGVmaW5lcy5oJywKLSAgICAgICAgJ2luY2x1ZGUvb3B1c190eXBlcy5oJywKLSAgICAgICAgJ2luY2x1ZGUvb3B1c19tdWx0aXN0cmVhbS5oJywKLQotICAgICAgICAnc3JjL2FuYWx5c2lzLmgnLAotICAgICAgICAnc3JjL21scC5oJywKLSAgICAgICAgJ3NyYy9vcHVzX3ByaXZhdGUuaCcsCi0gICAgICAgICdzcmMvdGFuc2lnX3RhYmxlLmgnLAotCi0gICAgICAgICdzaWxrL0EyTkxTRi5jJywKLSAgICAgICAgJ3NpbGsvYW5hX2ZpbHRfYmFua18xLmMnLAotICAgICAgICAnc2lsay9BUEkuaCcsCi0gICAgICAgICdzaWxrL2JpcXVhZF9hbHQuYycsCi0gICAgICAgICdzaWxrL2J3ZXhwYW5kZXIuYycsCi0gICAgICAgICdzaWxrL2J3ZXhwYW5kZXJfMzIuYycsCi0gICAgICAgICdzaWxrL2NoZWNrX2NvbnRyb2xfaW5wdXQuYycsCi0gICAgICAgICdzaWxrL0NORy5jJywKLSAgICAgICAgJ3NpbGsvY29kZV9zaWducy5jJywKLSAgICAgICAgJ3NpbGsvY29udHJvbC5oJywKLSAgICAgICAgJ3NpbGsvY29udHJvbF9hdWRpb19iYW5kd2lkdGguYycsCi0gICAgICAgICdzaWxrL2NvbnRyb2xfY29kZWMuYycsCi0gICAgICAgICdzaWxrL2NvbnRyb2xfU05SLmMnLAotICAgICAgICAnc2lsay9kZWJ1Zy5jJywKLSAgICAgICAgJ3NpbGsvZGVidWcuaCcsCi0gICAgICAgICdzaWxrL2RlY29kZXJfc2V0X2ZzLmMnLAotICAgICAgICAnc2lsay9kZWNvZGVfY29yZS5jJywKLSAgICAgICAgJ3NpbGsvZGVjb2RlX2ZyYW1lLmMnLAotICAgICAgICAnc2lsay9kZWNvZGVfaW5kaWNlcy5jJywKLSAgICAgICAgJ3NpbGsvZGVjb2RlX3BhcmFtZXRlcnMuYycsCi0gICAgICAgICdzaWxrL2RlY29kZV9waXRjaC5jJywKLSAgICAgICAgJ3NpbGsvZGVjb2RlX3B1bHNlcy5jJywKLSAgICAgICAgJ3NpbGsvZGVjX0FQSS5jJywKLSAgICAgICAgJ3NpbGsvZGVmaW5lLmgnLAotICAgICAgICAnc2lsay9lbmNvZGVfaW5kaWNlcy5jJywKLSAgICAgICAgJ3NpbGsvZW5jb2RlX3B1bHNlcy5jJywKLSAgICAgICAgJ3NpbGsvZW5jX0FQSS5jJywKLSAgICAgICAgJ3NpbGsvZXJyb3JzLmgnLAotICAgICAgICAnc2lsay9nYWluX3F1YW50LmMnLAotICAgICAgICAnc2lsay9IUF92YXJpYWJsZV9jdXRvZmYuYycsCi0gICAgICAgICdzaWxrL2luaXRfZGVjb2Rlci5jJywKLSAgICAgICAgJ3NpbGsvaW5pdF9lbmNvZGVyLmMnLAotICAgICAgICAnc2lsay9JbmxpbmVzLmgnLAotICAgICAgICAnc2lsay9pbm5lcl9wcm9kX2FsaWduZWQuYycsCi0gICAgICAgICdzaWxrL2ludGVycG9sYXRlLmMnLAotICAgICAgICAnc2lsay9saW4ybG9nLmMnLAotICAgICAgICAnc2lsay9sb2cybGluLmMnLAotICAgICAgICAnc2lsay9MUENfYW5hbHlzaXNfZmlsdGVyLmMnLAotICAgICAgICAnc2lsay9MUENfZml0LmMnLAotICAgICAgICAnc2lsay9MUENfaW52X3ByZWRfZ2Fpbi5jJywKLSAgICAgICAgJ3NpbGsvTFBfdmFyaWFibGVfY3V0b2ZmLmMnLAotICAgICAgICAnc2lsay9tYWNyb3MuaCcsCi0gICAgICAgICdzaWxrL01hY3JvQ291bnQuaCcsCi0gICAgICAgICdzaWxrL01hY3JvRGVidWcuaCcsCi0gICAgICAgICdzaWxrL21haW4uaCcsCi0gICAgICAgICdzaWxrL05MU0YyQS5jJywKLSAgICAgICAgJ3NpbGsvTkxTRl9kZWNvZGUuYycsCi0gICAgICAgICdzaWxrL05MU0ZfZGVsX2RlY19xdWFudC5jJywKLSAgICAgICAgJ3NpbGsvTkxTRl9lbmNvZGUuYycsCi0gICAgICAgICdzaWxrL05MU0Zfc3RhYmlsaXplLmMnLAotICAgICAgICAnc2lsay9OTFNGX3VucGFjay5jJywKLSAgICAgICAgJ3NpbGsvTkxTRl9WUS5jJywKLSAgICAgICAgJ3NpbGsvTkxTRl9WUV93ZWlnaHRzX2xhcm9pYS5jJywKLSAgICAgICAgJ3NpbGsvTlNRLmMnLAotICAgICAgICAnc2lsay9OU1FfZGVsX2RlYy5jJywKLSAgICAgICAgJ3NpbGsvcGl0Y2hfZXN0X2RlZmluZXMuaCcsCi0gICAgICAgICdzaWxrL3BpdGNoX2VzdF90YWJsZXMuYycsCi0gICAgICAgICdzaWxrL1BMQy5jJywKLSAgICAgICAgJ3NpbGsvUExDLmgnLAotICAgICAgICAnc2lsay9wcm9jZXNzX05MU0ZzLmMnLAotICAgICAgICAnc2lsay9xdWFudF9MVFBfZ2FpbnMuYycsCi0gICAgICAgICdzaWxrL3Jlc2FtcGxlci5jJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX2Rvd24yLmMnLAotICAgICAgICAnc2lsay9yZXNhbXBsZXJfZG93bjJfMy5jJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX3ByaXZhdGUuaCcsCi0gICAgICAgICdzaWxrL3Jlc2FtcGxlcl9wcml2YXRlX0FSMi5jJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX3ByaXZhdGVfZG93bl9GSVIuYycsCi0gICAgICAgICdzaWxrL3Jlc2FtcGxlcl9wcml2YXRlX0lJUl9GSVIuYycsCi0gICAgICAgICdzaWxrL3Jlc2FtcGxlcl9wcml2YXRlX3VwMl9IUS5jJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX3JvbS5jJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX3JvbS5oJywKLSAgICAgICAgJ3NpbGsvcmVzYW1wbGVyX3N0cnVjdHMuaCcsCi0gICAgICAgICdzaWxrL3NoZWxsX2NvZGVyLmMnLAotICAgICAgICAnc2lsay9zaWdtX1ExNS5jJywKLSAgICAgICAgJ3NpbGsvc29ydC5jJywKLSAgICAgICAgJ3NpbGsvc3RlcmVvX2RlY29kZV9wcmVkLmMnLAotICAgICAgICAnc2lsay9zdGVyZW9fZW5jb2RlX3ByZWQuYycsCi0gICAgICAgICdzaWxrL3N0ZXJlb19maW5kX3ByZWRpY3Rvci5jJywKLSAgICAgICAgJ3NpbGsvc3RlcmVvX0xSX3RvX01TLmMnLAotICAgICAgICAnc2lsay9zdGVyZW9fTVNfdG9fTFIuYycsCi0gICAgICAgICdzaWxrL3N0ZXJlb19xdWFudF9wcmVkLmMnLAotICAgICAgICAnc2lsay9zdHJ1Y3RzLmgnLAotICAgICAgICAnc2lsay9zdW1fc3FyX3NoaWZ0LmMnLAotICAgICAgICAnc2lsay90YWJsZXMuaCcsCi0gICAgICAgICdzaWxrL3RhYmxlc19nYWluLmMnLAotICAgICAgICAnc2lsay90YWJsZXNfTFRQLmMnLAotICAgICAgICAnc2lsay90YWJsZXNfTkxTRl9DQl9OQl9NQi5jJywKLSAgICAgICAgJ3NpbGsvdGFibGVzX05MU0ZfQ0JfV0IuYycsCi0gICAgICAgICdzaWxrL3RhYmxlc19vdGhlci5jJywKLSAgICAgICAgJ3NpbGsvdGFibGVzX3BpdGNoX2xhZy5jJywKLSAgICAgICAgJ3NpbGsvdGFibGVzX3B1bHNlc19wZXJfYmxvY2suYycsCi0gICAgICAgICdzaWxrL3RhYmxlX0xTRl9jb3MuYycsCi0gICAgICAgICdzaWxrL3R1bmluZ19wYXJhbWV0ZXJzLmgnLAotICAgICAgICAnc2lsay90eXBlZGVmLmgnLAotICAgICAgICAnc2lsay9WQUQuYycsCi0gICAgICAgICdzaWxrL1ZRX1dNYXRfRUMuYycsCi0gICAgICAgICdzcmMvYW5hbHlzaXMuYycsCi0gICAgICAgICdzcmMvbWxwLmMnLAotICAgICAgICAnc3JjL21scF9kYXRhLmMnLAotICAgICAgICAnc3JjL29wdXMuYycsCi0gICAgICAgICdzcmMvb3B1c19kZWNvZGVyLmMnLAotICAgICAgICAnc3JjL29wdXNfZW5jb2Rlci5jJywKLSAgICAgICAgJ3NyYy9vcHVzX211bHRpc3RyZWFtLmMnLAotICAgICAgICAnc3JjL29wdXNfbXVsdGlzdHJlYW1fZGVjb2Rlci5jJywKLSAgICAgICAgJ3NyYy9vcHVzX211bHRpc3RyZWFtX2VuY29kZXIuYycsCi0gICAgICAgICdzcmMvcmVwYWNrZXRpemVyLmMnLAotCi0gICAgICAgICMgRmxvYXRpbmcgcG9pbnQgZGVjb2RpbmcgZmlsZXMKLSAgICAgICAgJ3NpbGsvZmxvYXQvYXV0b2NvcnJlbGF0aW9uX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvYnVyZ19tb2RpZmllZF9GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L2J3ZXhwYW5kZXJfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9jb3JyTWF0cml4X0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvZW5jb2RlX2ZyYW1lX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvZW5lcmd5X0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvZmluZF9MUENfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9maW5kX0xUUF9GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L2ZpbmRfcGl0Y2hfbGFnc19GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L2ZpbmRfcHJlZF9jb2Vmc19GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L2lubmVyX3Byb2R1Y3RfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9rMmFfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9MUENfYW5hbHlzaXNfZmlsdGVyX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvTFBDX2ludl9wcmVkX2dhaW5fRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9MVFBfYW5hbHlzaXNfZmlsdGVyX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvTFRQX3NjYWxlX2N0cmxfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9tYWluX0ZMUC5oJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvbm9pc2Vfc2hhcGVfYW5hbHlzaXNfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9waXRjaF9hbmFseXNpc19jb3JlX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvcHJvY2Vzc19nYWluc19GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L3JlZ3VsYXJpemVfY29ycmVsYXRpb25zX0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvcmVzaWR1YWxfZW5lcmd5X0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvc2NhbGVfY29weV92ZWN0b3JfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9zY2FsZV92ZWN0b3JfRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC9zY2h1cl9GTFAuYycsCi0gICAgICAgICdzaWxrL2Zsb2F0L1NpZ1Byb2NfRkxQLmgnLAotICAgICAgICAnc2lsay9mbG9hdC9zb3J0X0ZMUC5jJywKLSAgICAgICAgJ3NpbGsvZmxvYXQvc3RydWN0c19GTFAuaCcsCi0gICAgICAgICdzaWxrL2Zsb2F0L3dhcnBlZF9hdXRvY29ycmVsYXRpb25fRkxQLmMnLAotICAgICAgICAnc2lsay9mbG9hdC93cmFwcGVyc19GTFAuYycsCi0KLSAgICAgICAgJ3NpbGsvZmxvYXQvYXBwbHlfc2luZV93aW5kb3dfRkxQLmMnLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnSEFWRV9DT05GSUdfSCcsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJy4nLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIFNvbWUgeDg2IG9yIHg2NCBwbGF0Zm9ybXMgZG9uJ3Qgc3VwcG9ydCBhbGwgc3NlIGluc3RydWN0aW9uIHNldHMsIHdoaWxlIE9wdXMgc3RpbGwgdHJpZXMKLSAgICAgICAgIyB0byBidWlsZCBhbGwgc3NlIGNvZGUgaW4gZm9yIHJ1biB0aW1lIHNlbGVjdGlvbiBhbmQgY2F1c2VzIGJ1aWxkIGVycm9ycy4gIEV4Y2x1ZGUgYWxsIHNzZQotICAgICAgICAjIHJlbGF0ZWQgY29kZSBvbiBzdWNoIHBsYXRmb3Jtcy4KLSAgICAgICAgWydzYl9kaXNhYmxlX29wdXNfc3NlID09IDAgYW5kICh0YXJnZXRfYXJjaCA9PSAieDg2IiBvciB0YXJnZXRfYXJjaCA9PSAieDY0IiknLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnY2VsdC94ODYvY2VsdF9scGNfc3NlNF8xLmMnLAotICAgICAgICAgICAgJ2NlbHQveDg2L2NlbHRfbHBjX3NzZS5oJywKLSAgICAgICAgICAgICdjZWx0L3g4Ni9waXRjaF9zc2UuYycsCi0gICAgICAgICAgICAnY2VsdC94ODYvcGl0Y2hfc3NlLmgnLAotICAgICAgICAgICAgJ2NlbHQveDg2L3BpdGNoX3NzZTIuYycsCi0gICAgICAgICAgICAnY2VsdC94ODYvcGl0Y2hfc3NlNF8xLmMnLAotICAgICAgICAgICAgJ2NlbHQveDg2L3ZxX3NzZTIuYycsCi0gICAgICAgICAgICAnY2VsdC94ODYvdnFfc3NlLmgnLAotICAgICAgICAgICAgJ2NlbHQveDg2L3g4NmNwdS5jJywKLSAgICAgICAgICAgICdjZWx0L3g4Ni94ODZjcHUuaCcsCi0gICAgICAgICAgICAnY2VsdC94ODYveDg2X2NlbHRfbWFwLmMnLAotICAgICAgICAgICAgJ3NpbGsveDg2L21haW5fc3NlLmgnLAotICAgICAgICAgICAgJ3NpbGsveDg2L05TUV9kZWxfZGVjX3NzZTRfMS5jJywKLSAgICAgICAgICAgICdzaWxrL3g4Ni9OU1Ffc3NlNF8xLmMnLAotICAgICAgICAgICAgJ3NpbGsveDg2L1ZBRF9zc2U0XzEuYycsCi0gICAgICAgICAgICAnc2lsay94ODYvVlFfV01hdF9FQ19zc2U0XzEuYycsCi0gICAgICAgICAgICAnc2lsay94ODYveDg2X3NpbGtfbWFwLmMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3RhcmdldF9hcmNoID09ICJhcm0iIG9yIHRhcmdldF9hcmNoID09ICJhcm02NCInLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAjIERpc2FibGVkIGFybSBhc20uCi0gICAgICAgICAgICAjICdPUFVTX0FSTV9BU00nLAotICAgICAgICAgICAgIyAnT1BVU19BUk1fSU5MSU5FX0FTTScsCi0gICAgICAgICAgICAjICdPUFVTX0FSTV9JTkxJTkVfRURTUCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcHVzL3N0YXJib2FyZC9jb25maWcuaCBiL3RoaXJkX3BhcnR5L29wdXMvc3RhcmJvYXJkL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YzY3ZjI5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L29wdXMvc3RhcmJvYXJkL2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgKGMpIDIwMTEsIFNreXBlIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLS0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLW5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLWRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0tIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZXJuZXQgU29jaWV0eSwgSUVURiBvciBJRVRGIFRydXN0LCBub3IgdGhlCi1uYW1lcyBvZiBzcGVjaWZpYyBjb250cmlidXRvcnMsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi1wZXJtaXNzaW9uLgotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi1BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi1MSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi1JTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi1QT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIENPTkZJR19ICi0jZGVmaW5lIENPTkZJR19ICi0KLSNkZWZpbmUgVVNFX0FMTE9DQSAgICAgICAgICAgIDAKLQotLyogQ29tbWVudCBvdXQgdGhlIG5leHQgbGluZSBmb3IgZmxvYXRpbmctcG9pbnQgY29kZSAqLwotLyojZGVmaW5lIEZJWEVEX1BPSU5UICAgICAgICAgICAxICovCi0KLSNkZWZpbmUgT1BVU19CVUlMRCAgICAgICAgICAgIDEKLQotI2lmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9YNjQpCi0vKiBDYW4gYWx3YXlzIGNvbXBpbGUgU1NFIGludHJpbnNpY3MgKG5vIHNwZWNpYWwgY29tcGlsZXIgZmxhZ3MgbmVjZXNzYXJ5KSAqLwotI2RlZmluZSBPUFVTX1g4Nl9NQVlfSEFWRV9TU0UKLSNkZWZpbmUgT1BVU19YODZfTUFZX0hBVkVfU1NFMgotI2RlZmluZSBPUFVTX1g4Nl9NQVlfSEFWRV9TU0U0XzEKLQotLyogUHJlc3VtZSBTU0UgZnVuY3Rpb25zLCBpZiBjb21waWxlZCB0byB1c2UgU1NFL1NTRTIvQVZYIChub3RlIHRoYXQgQU1ENjQgaW1wbGllcyBTU0UyLCBhbmQgQVZYCi0gICBpbXBsaWVzIFNTRTQuMSkgKi8KLSNpZiBkZWZpbmVkKF9NX1g2NCkgfHwgKGRlZmluZWQoX01fSVg4Nl9GUCkgJiYgKF9NX0lYODZfRlAgPj0gMSkpIHx8IGRlZmluZWQoX19BVlhfXykKLSNkZWZpbmUgT1BVU19YODZfUFJFU1VNRV9TU0UgMQotI2VuZGlmCi0jaWYgZGVmaW5lZChfTV9YNjQpIHx8IChkZWZpbmVkKF9NX0lYODZfRlApICYmIChfTV9JWDg2X0ZQID49IDIpKSB8fCBkZWZpbmVkKF9fQVZYX18pCi0jZGVmaW5lIE9QVVNfWDg2X1BSRVNVTUVfU1NFMiAxCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVZYX18pCi0jZGVmaW5lIE9QVVNfWDg2X1BSRVNVTUVfU1NFNF8xIDEKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoT1BVU19YODZfUFJFU1VNRV9TU0U0XzEpIHx8ICFkZWZpbmVkKE9QVVNfWDg2X1BSRVNVTUVfU1NFMikgfHwgIWRlZmluZWQoT1BVU19YODZfUFJFU1VNRV9TU0UpCi0jZGVmaW5lIE9QVVNfSEFWRV9SVENEIDEKLSNlbmRpZgotCi0jZW5kaWYKLQotI2luY2x1ZGUgInZlcnNpb24uaCIKLQotI2VuZGlmIC8qIENPTkZJR19IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9vcHVzL3N0YXJib2FyZC92ZXJzaW9uLmggYi90aGlyZF9wYXJ0eS9vcHVzL3N0YXJib2FyZC92ZXJzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTUxMGQuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvb3B1cy9zdGFyYm9hcmQvdmVyc2lvbi5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2RlZmluZSBPUFVTX1ZFUlNJT04gIjEuMy1yYy0yLWdjMWMyNDdkLWRpcnR5Ig0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L29wdXMvd2luMzIvY29uZmlnLmggYi90aGlyZF9wYXJ0eS9vcHVzL3dpbjMyL2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTU0YmNiLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L29wdXMvd2luMzIvY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAoYykgMjAxMSwgU2t5cGUgTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi10aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS0gTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlcm5ldCBTb2NpZXR5LCBJRVRGIG9yIElFVEYgVHJ1c3QsIG5vciB0aGUKLW5hbWVzIG9mIHNwZWNpZmljIGNvbnRyaWJ1dG9ycywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi1wcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLXBlcm1pc3Npb24uCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgQ09ORklHX0gKLSNkZWZpbmUgQ09ORklHX0gKLQotI2RlZmluZSBVU0VfQUxMT0NBICAgICAgICAgICAgMQotCi0vKiBDb21tZW50IG91dCB0aGUgbmV4dCBsaW5lIGZvciBmbG9hdGluZy1wb2ludCBjb2RlICovCi0vKiNkZWZpbmUgRklYRURfUE9JTlQgICAgICAgICAgIDEgKi8KLQotI2RlZmluZSBPUFVTX0JVSUxEICAgICAgICAgICAgMQotCi0jaWYgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkKLS8qIENhbiBhbHdheXMgY29tcGlsZSBTU0UgaW50cmluc2ljcyAobm8gc3BlY2lhbCBjb21waWxlciBmbGFncyBuZWNlc3NhcnkpICovCi0jZGVmaW5lIE9QVVNfWDg2X01BWV9IQVZFX1NTRQotI2RlZmluZSBPUFVTX1g4Nl9NQVlfSEFWRV9TU0UyCi0jZGVmaW5lIE9QVVNfWDg2X01BWV9IQVZFX1NTRTRfMQotCi0vKiBQcmVzdW1lIFNTRSBmdW5jdGlvbnMsIGlmIGNvbXBpbGVkIHRvIHVzZSBTU0UvU1NFMi9BVlggKG5vdGUgdGhhdCBBTUQ2NCBpbXBsaWVzIFNTRTIsIGFuZCBBVlgKLSAgIGltcGxpZXMgU1NFNC4xKSAqLwotI2lmIGRlZmluZWQoX01fWDY0KSB8fCAoZGVmaW5lZChfTV9JWDg2X0ZQKSAmJiAoX01fSVg4Nl9GUCA+PSAxKSkgfHwgZGVmaW5lZChfX0FWWF9fKQotI2RlZmluZSBPUFVTX1g4Nl9QUkVTVU1FX1NTRSAxCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9NX1g2NCkgfHwgKGRlZmluZWQoX01fSVg4Nl9GUCkgJiYgKF9NX0lYODZfRlAgPj0gMikpIHx8IGRlZmluZWQoX19BVlhfXykKLSNkZWZpbmUgT1BVU19YODZfUFJFU1VNRV9TU0UyIDEKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BVlhfXykKLSNkZWZpbmUgT1BVU19YODZfUFJFU1VNRV9TU0U0XzEgMQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChPUFVTX1g4Nl9QUkVTVU1FX1NTRTRfMSkgfHwgIWRlZmluZWQoT1BVU19YODZfUFJFU1VNRV9TU0UyKSB8fCAhZGVmaW5lZChPUFVTX1g4Nl9QUkVTVU1FX1NTRSkKLSNkZWZpbmUgT1BVU19IQVZFX1JUQ0QgMQotI2VuZGlmCi0KLSNlbmRpZgotCi0jaW5jbHVkZSAidmVyc2lvbi5oIgotCi0jZW5kaWYgLyogQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L29wdXMvd2luMzIvdmVyc2lvbi5oIGIvdGhpcmRfcGFydHkvb3B1cy93aW4zMi92ZXJzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NTUxMGQuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvb3B1cy93aW4zMi92ZXJzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jZGVmaW5lIE9QVVNfVkVSU0lPTiAiMS4zLXJjLTItZ2MxYzI0N2QtZGlydHkiDQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvb3RzL290cy1jb21tb24uZ3lwaSBiL3RoaXJkX3BhcnR5L290cy9vdHMtY29tbW9uLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NWRmNWQuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvb3RzL290cy1jb21tb24uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3RzX3NvdXJjZXMnOiBbCi0gICAgICAnaW5jbHVkZS9vdHMtbWVtb3J5LXN0cmVhbS5oJywKLSAgICAgICdpbmNsdWRlL29wZW50eXBlLXNhbml0aXNlci5oJywKLSAgICAgICdzcmMvY2ZmLmNjJywKLSAgICAgICdzcmMvY2ZmLmgnLAotICAgICAgJ3NyYy9jZmZfdHlwZTJfY2hhcnN0cmluZy5jYycsCi0gICAgICAnc3JjL2NmZl90eXBlMl9jaGFyc3RyaW5nLmgnLAotICAgICAgJ3NyYy9jbWFwLmNjJywKLSAgICAgICdzcmMvY21hcC5oJywKLSAgICAgICdzcmMvY3Z0LmNjJywKLSAgICAgICdzcmMvY3Z0LmgnLAotICAgICAgJ3NyYy9mZWF0LmNjJywKLSAgICAgICdzcmMvZmVhdC5oJywKLSAgICAgICdzcmMvZnBnbS5jYycsCi0gICAgICAnc3JjL2ZwZ20uaCcsCi0gICAgICAnc3JjL2dhc3AuY2MnLAotICAgICAgJ3NyYy9nYXNwLmgnLAotICAgICAgJ3NyYy9nZGVmLmNjJywKLSAgICAgICdzcmMvZ2RlZi5oJywKLSAgICAgICdzcmMvZ2xhdC5oJywKLSAgICAgICdzcmMvZ2xvYy5jYycsCi0gICAgICAnc3JjL2dsb2MuaCcsCi0gICAgICAnc3JjL2dseWYuY2MnLAotICAgICAgJ3NyYy9nbHlmLmgnLAotICAgICAgJ3NyYy9ncG9zLmNjJywKLSAgICAgICdzcmMvZ3Bvcy5oJywKLSAgICAgICdzcmMvZ3JhcGhpdGUuaCcsCi0gICAgICAnc3JjL2dzdWIuY2MnLAotICAgICAgJ3NyYy9nc3ViLmgnLAotICAgICAgJ3NyYy9oZG14LmNjJywKLSAgICAgICdzcmMvaGRteC5oJywKLSAgICAgICdzcmMvaGVhZC5jYycsCi0gICAgICAnc3JjL2hlYWQuaCcsCi0gICAgICAnc3JjL2hoZWEuY2MnLAotICAgICAgJ3NyYy9oaGVhLmgnLAotICAgICAgJ3NyYy9obXR4LmNjJywKLSAgICAgICdzcmMvaG10eC5oJywKLSAgICAgICdzcmMva2Vybi5jYycsCi0gICAgICAnc3JjL2tlcm4uaCcsCi0gICAgICAnc3JjL2xheW91dC5jYycsCi0gICAgICAnc3JjL2xheW91dC5oJywKLSAgICAgICdzcmMvbG9jYS5jYycsCi0gICAgICAnc3JjL2xvY2EuaCcsCi0gICAgICAnc3JjL2x0c2guY2MnLAotICAgICAgJ3NyYy9sdHNoLmgnLAotICAgICAgJ3NyYy9tYXRoLmNjJywKLSAgICAgICdzcmMvbWF0aF8uaCcsCi0gICAgICAnc3JjL21heHAuY2MnLAotICAgICAgJ3NyYy9tYXhwLmgnLAotICAgICAgJ3NyYy9tZXRyaWNzLmNjJywKLSAgICAgICdzcmMvbWV0cmljcy5oJywKLSAgICAgICdzcmMvbmFtZS5jYycsCi0gICAgICAnc3JjL25hbWUuaCcsCi0gICAgICAnc3JjL29zMi5jYycsCi0gICAgICAnc3JjL29zMi5oJywKLSAgICAgICdzcmMvb3RzLmNjJywKLSAgICAgICdzcmMvb3RzLmgnLAotICAgICAgJ3NyYy9wb3N0LmNjJywKLSAgICAgICdzcmMvcG9zdC5oJywKLSAgICAgICdzcmMvcHJlcC5jYycsCi0gICAgICAnc3JjL3ByZXAuaCcsCi0gICAgICAnc3JjL3NpbGUuY2MnLAotICAgICAgJ3NyYy9zaWxlLmgnLAotICAgICAgJ3NyYy9zaWxmLmgnLAotICAgICAgJ3NyYy9zaWxsLmNjJywKLSAgICAgICdzcmMvc2lsbC5oJywKLSAgICAgICdzcmMvdmRteC5jYycsCi0gICAgICAnc3JjL3ZkbXguaCcsCi0gICAgICAnc3JjL3ZoZWEuY2MnLAotICAgICAgJ3NyYy92aGVhLmgnLAotICAgICAgJ3NyYy92bXR4LmNjJywKLSAgICAgICdzcmMvdm10eC5oJywKLSAgICAgICdzcmMvdm9yZy5jYycsCi0gICAgICAnc3JjL3ZvcmcuaCcsCi0gICAgXSwKLSAgICAnb3RzX2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICdpbmNsdWRlJywKLSAgICAgICcuLi93b2ZmMi9pbmNsdWRlJywKLSAgICBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvb3RzL290cy5neXAgYi90aGlyZF9wYXJ0eS9vdHMvb3RzLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI5YWUxNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9vdHMvb3RzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY2hyb21pdW1fY29kZSc6IDEsCi0gIH0sCi0gICdpbmNsdWRlcyc6IFsKLSAgICAnb3RzLWNvbW1vbi5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ290cycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJzxAKG90c19zb3VyY2VzKScsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzxAKG90c19pbmNsdWRlX2RpcnMpJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPEAob3RzX2luY2x1ZGVfZGlycyknLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9icm90bGkvYnJvdGxpLmd5cDpkZWMnLAotICAgICAgICAnLi4vd29mZjIvd29mZjIuZ3lwOndvZmYyX2RlYycsCi0gICAgICAgICcuLi96bGliL3psaWIuZ3lwOnpsaWInLAotICAgICAgXSwKLSAgICAgICMgRGlzYWJsZSB3aW5kb3dzIG90cyB3YXJuaW5nczoKLSAgICAgICMgICA0MzM0OiAnPDwnIDogcmVzdWx0IG9mIDMyLWJpdCBzaGlmdCBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byA2NAotICAgICAgIyAgICAgICBiaXRzICh3YXMgNjQtYml0IHNoaWZ0IGludGVuZGVkPykKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWyA0MzM0IF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cCBiL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkYjgwZS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ2NsYW5nPT0xJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAjIHByb3RvYnVmLTMgY29udGFpbnMgYSBmZXcgZnVuY3Rpb25zIHRoYXQgYXJlIHVudXNlZC4KLSAgICAgICAgICAnLVduby11bnVzZWQtZnVuY3Rpb24nLAotICAgICAgICAgICMgcHJvdG9idWYtMyBtaXhlcyBnZW5lcmF0ZWQgZW51bSB0eXBlcy4KLSAgICAgICAgICAnLVduby1lbnVtLWNvbXBhcmUtc3dpdGNoJywKLSAgICAgICAgICAjIFVzZWQgYnkgb2xkZXIgdmVyc2lvbiBvZiBjbGFuZy4KLSAgICAgICAgICAnLVduby1lbnVtLWNvbXBhcmUnLAotICAgICAgICAgICMgT2xkZXIgdmVyc2lvbiBvZiBjbGFuZyBkb24ndCBoYXZlIC1Xbm8tZW51bS1jb21wYXJlLXN3aXRjaAotICAgICAgICAgICctV25vLXVua25vd24td2FybmluZy1vcHRpb24nLAotICAgICAgICBdLAotICAgICAgICAnY2ZsYWdzX2hvc3QnOiBbCi0gICAgICAgICAgIyBwcm90b2J1Zi0zIGNvbnRhaW5zIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IGFyZSB1bnVzZWQuCi0gICAgICAgICAgJy1Xbm8tdW51c2VkLWZ1bmN0aW9uJywKLSAgICAgICAgICAjIHByb3RvYnVmLTMgbWl4ZXMgZ2VuZXJhdGVkIGVudW0gdHlwZXMuCi0gICAgICAgICAgJy1Xbm8tZW51bS1jb21wYXJlLXN3aXRjaCcsCi0gICAgICAgICAgIyBVc2VkIGJ5IG9sZGVyIHZlcnNpb24gb2YgY2xhbmcuCi0gICAgICAgICAgJy1Xbm8tZW51bS1jb21wYXJlJywKLSAgICAgICAgICAjIE9sZGVyIHZlcnNpb24gb2YgY2xhbmcgZG9uJ3QgaGF2ZSAtV25vLWVudW0tY29tcGFyZS1zd2l0Y2gKLSAgICAgICAgICAnLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uJywKLSAgICAgICAgXQotICAgICAgfSwKLSAgICB9XSwKLSAgICBbJ3VzZV9zeXN0ZW1fcHJvdG9idWY9PTAnLCB7Ci0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgICAgICAgICA0MDE4LCAgIyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2ggaW4gY29tcGFyaXNvbgotICAgICAgICAgICAgICA0MDY1LCAgIyBzd2l0Y2ggc3RhdGVtZW50IGNvbnRhaW5zICdkZWZhdWx0JyBidXQgbm8gJ2Nhc2UnIGxhYmVscwotICAgICAgICAgICAgICA0MTQ2LCAgIyB1bmFyeSBtaW51cyBvcGVyYXRvciBhcHBsaWVkIHRvIHVuc2lnbmVkIHR5cGUKLSAgICAgICAgICAgICAgNDI0NCwgICMgaW1wbGljaXQgY29udmVyc2lvbiwgcG9zc2libGUgbG9zcyBvZiBkYXRhCi0gICAgICAgICAgICAgIDQyNjcsICAjIHNpemVfdCB0byBpbnQgdHJ1bmNhdGlvbgotICAgICAgICAgICAgICA0MjkxLCAgIyBubyBtYXRjaGluZyBvcGVyYXRvciBkZWxldGUgZm9yIGEgcGxhY2VtZW50IG5ldwotICAgICAgICAgICAgICA0MzA1LCAgIyBkb3VibGUgdG8gZmxvYXQgdHJ1bmNhdGlvbgotICAgICAgICAgICAgICA0MzU1LCAgIyAndGhpcycgdXNlZCBpbiBiYXNlIG1lbWJlciBpbml0aWFsaXplciBsaXN0Ci0gICAgICAgICAgICAgIDQ1MDYsICAjIG5vIGRlZmluaXRpb24gZm9yIGlubGluZSBmdW5jdGlvbiAocHJvdG9idWYgaXNzdWUgIzI0MCkKLSAgICAgICAgICAgICAgNDcxNSwgICMgbm90IGFsbCBjb250cm9sIHBhdGhzIHJldHVybiBhIHZhbHVlIChmaXhlZCBpbiB0cnVuaykKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVmaW5lcyEnOiBbCi0gICAgICAgICAgICAgICdXSU4zMl9MRUFOX0FORF9NRUFOJywgICMgUHJvdG9idWYgZGVmaW5lcyB0aGlzIGl0c2VsZi4KLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgICMgVGhlICJsaXRlIiBsaWIgaXMgYWJvdXQgMS83dGggdGhlIHNpemUgb2YgdGhlIGhlYXZ5IGxpYiwKLSAgICAgICAgIyBidXQgaXQgZG9lc24ndCBzdXBwb3J0IHNvbWUgb2YgdGhlIG1vcmUgZXhvdGljIGZlYXR1cmVzIG9mCi0gICAgICAgICMgcHJvdG9idWZzLCBsaWtlIHJlZmxlY3Rpb24uICBUbyBnZW5lcmF0ZSBDKysgY29kZSB0aGF0IGNhbiBsaW5rCi0gICAgICAgICMgYWdhaW5zdCB0aGUgbGl0ZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBhZGQgdGhlIG9wdGlvbiBsaW5lOgotICAgICAgICAjCi0gICAgICAgICMgICBvcHRpb24gb3B0aW1pemVfZm9yID0gTElURV9SVU5USU1FOwotICAgICAgICAjCi0gICAgICAgICMgdG8geW91ciAucHJvdG8gZmlsZS4KLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwcm90b2J1Zl9saXRlJywKLSAgICAgICAgICAndHlwZSc6ICc8KGNvbXBvbmVudCknLAotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICAgICAncHJvdG9idWZfbGl0ZS5neXBpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICMgUmVxdWlyZWQgZm9yIGNvbXBvbmVudCBidWlsZHMuIFNlZSBodHRwOi8vY3JidWcuY29tLzE3MjgwMC4KLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdMSUJQUk9UT0JVRl9FWFBPUlRTJywKLSAgICAgICAgICAgICdQUk9UT0JVRl9VU0VfRExMUycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnUFJPVE9CVUZfVVNFX0RMTFMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgIyBHZXQgcHJvdG9idWYgaGVhZGVycyBmcm9tIHRoZSBjaHJvbWl1bSB0cmVlLgotICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvcHJvdG9idWYvc3JjJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgIyBUaGlzIG1hY3JvIG11c3QgYmUgZGVmaW5lZCB0byBzdXBwcmVzcyB0aGUgdXNlIG9mCi0gICAgICAgICAgICAgICMgZHluYW1pY19jYXN0PD4sIHdoaWNoIHJlcXVpcmVzIFJUVEkuCi0gICAgICAgICAgICAgICdHT09HTEVfUFJPVE9CVUZfTk9fUlRUSScsCi0KLSAgICAgICAgICAgICAgIyBUaGUgZ2VuZXJhdGVkIGNvZGUgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCB0aGUgc2FtZSBmbGFncyBhcyB0aGUKLSAgICAgICAgICAgICAgIyBwcm90b2J1ZiBsaWJyYXJ5LiBPdGhlcndpc2Ugd2UgZ2V0IHN0YXRpYyBpbml0aWFsaXplcnMgd2hpY2ggYXJlIG5vdAotICAgICAgICAgICAgICAjIHRocmVhZCBzYWZlLgotICAgICAgICAgICAgICAnR09PR0xFX1BST1RPQlVGX05PX1NUQVRJQ19JTklUSUFMSVpFUicsCi0KLSAgICAgICAgICAgICAgIyBwdGhyZWFkIGlzIHVzZWQgb24gdGhlIGhvc3QgcGxhdGZvcm0sIGJ1dCB0aGUgdGFyZ2V0IHBsYXRmb3JtCi0gICAgICAgICAgICAgICMgYWN0dWFsbHkgdXNlcyBTYlRocmVhZC4KLSAgICAgICAgICAgICAgJ0hBVkVfUFRIUkVBRCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0gICAgICAgICMgVGhpcyBpcyB0aGUgZnVsbCwgaGVhdnkgcHJvdG9idWYgbGliIHRoYXQncyBuZWVkZWQgZm9yIGMrKyAucHJvdG9zCi0gICAgICAgICMgdGhhdCBkb24ndCBzcGVjaWZ5IHRoZSBMSVRFX1JVTlRJTUUgb3B0aW9uLiAgVGhlIHByb3RvY29sCi0gICAgICAgICMgY29tcGlsZXIgaXRzZWxmIChwcm90b2MpIGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4KLSAgICAgICAgIwotICAgICAgICAjIERPIE5PVCBMSU5LIEFHQUlOU1QgVEhJUyBUQVJHRVQgSU4gQ0hST01FIENPREUgIC0tYWdsCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncHJvdG9idWZfZnVsbF9kb19ub3RfdXNlJywKLSAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywndGFyZ2V0J10sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgJ3Byb3RvYnVmX2xpdGUuZ3lwaScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2FueS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9hbnkucGIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvYW55LnBiLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvYXBpLnBiLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2FwaS5wYi5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2ltcG9ydGVyLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGFyc2VyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BhcnNlci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucGIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wYi5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2UuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvcl9kYXRhYmFzZS5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2R1cmF0aW9uLnBiLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZHluYW1pY19tZXNzYWdlLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2R5bmFtaWNfbWVzc2FnZS5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2VtcHR5LnBiLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldF9oZWF2eS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9maWVsZF9tYXNrLnBiLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2ZpZWxkX21hc2sucGIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfZW51bV9yZWZsZWN0aW9uLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX2VudW1fdXRpbC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2dlbmVyYXRlZF9tZXNzYWdlX3JlZmxlY3Rpb24uY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZ2VuZXJhdGVkX21lc3NhZ2VfcmVmbGVjdGlvbi5oJywKLQotICAgICAgICAgICAgIyBnemlwX3N0cmVhbS5jYyBwdWxscyBpbiB6bGliLCBidXQgaXQncyBub3QgYWN0dWFsbHkgdXNlZCBieQotICAgICAgICAgICAgIyBwcm90b2MsIGp1c3QgYnkgdGVzdCBjb2RlLCBzbyBpbnN0ZWFkIG9mIGNvbXBpbGluZyB6bGliIGZvciB0aGUKLSAgICAgICAgICAgICMgaG9zdCwgbGV0J3MganVzdCBleGNsdWRlIHRoaXMuCi0gICAgICAgICAgICAjICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2d6aXBfc3RyZWFtLmNjJywKLSAgICAgICAgICAgICMgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vZ3ppcF9zdHJlYW0uaCcsCi0KLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3ByaW50ZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vcHJpbnRlci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3N0cnRvZC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9pby9zdHJ0b2QuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9pby90b2tlbml6ZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vdG9rZW5pemVyLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL3plcm9fY29weV9zdHJlYW1faW1wbC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9lbnRyeS5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGQuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9tYXBfZmllbGRfaW5sLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvbWVzc2FnZS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvbWV0YWRhdGEuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9yZWZsZWN0aW9uLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbl9pbnRlcm5hbC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3JlZmxlY3Rpb25fb3BzLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc2VydmljZS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zZXJ2aWNlLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucGIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc291cmNlX2NvbnRleHQucGIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHJ1Y3QucGIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3RydWN0LnBiLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWF0aHV0aWwuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9tYXRobGltaXRzLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL21hdGhsaW1pdHMuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdWJzdGl0dXRlLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N1YnN0aXR1dGUuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zaW5nbGV0b24uaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi90ZXh0X2Zvcm1hdC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3RpbWVzdGFtcC5wYi5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucGIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi90eXBlLnBiLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3R5cGUucGIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91bmtub3duX2ZpZWxkX3NldC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvZmllbGRfY29tcGFyYXRvci5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX2NvbXBhcmF0b3IuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX21hc2tfdXRpbC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ZpZWxkX21hc2tfdXRpbC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvY29uc3RhbnRzLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kYXRhcGllY2UuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9kYXRhcGllY2UuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2RlZmF1bHRfdmFsdWVfb2JqZWN0d3JpdGVyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZGVmYXVsdF92YWx1ZV9vYmplY3R3cml0ZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2Vycm9yX2xpc3RlbmVyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvZXJyb3JfbGlzdGVuZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2ZpZWxkX21hc2tfdXRpbGl0eS5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9lc2NhcGluZy5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fZXNjYXBpbmcuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fb2JqZWN0d3JpdGVyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvanNvbl9vYmplY3R3cml0ZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNlci5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL2pzb25fc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvbG9jYXRpb25fdHJhY2tlci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvb2JqZWN0X2xvY2F0aW9uX3RyYWNrZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF9zb3VyY2UuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL29iamVjdF93cml0ZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9vYmplY3Rfd3JpdGVyLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b193cml0ZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9wcm90b193cml0ZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZS5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3Byb3Rvc3RyZWFtX29iamVjdHNvdXJjZS5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvcHJvdG9zdHJlYW1fb2JqZWN0d3JpdGVyLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC9zdHJ1Y3R1cmVkX29iamVjdHdyaXRlci5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvLmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3V0aWwvaW50ZXJuYWwvdHlwZV9pbmZvLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm9fdGVzdF9oZWxwZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC90eXBlX2luZm9fdGVzdF9oZWxwZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL2ludGVybmFsL3V0aWxpdHkuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9pbnRlcm5hbC91dGlsaXR5LmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9qc29uX3V0aWwuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL21lc3NhZ2VfZGlmZmVyZW5jZXIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC9tZXNzYWdlX2RpZmZlcmVuY2VyLmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvdXRpbC90aW1lX3V0aWwuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXIuaCcsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbC5jYycsCi0gICAgICAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi91dGlsL3R5cGVfcmVzb2x2ZXJfdXRpbC5oJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0LmNjJywKLSAgICAgICAgICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3dpcmVfZm9ybWF0LmgnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuY2MnLAotICAgICAgICAgICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvd3JhcHBlcnMucGIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwcm90b2NfbGliJywKLSAgICAgICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jb2RlX2dlbmVyYXRvci5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NvbW1hbmRfbGluZV9pbnRlcmZhY2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY29tbWFuZF9saW5lX2ludGVyZmFjZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZW51bS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW0uaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2VudW1fZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9lbnVtX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9leHRlbnNpb24uY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9leHRlbnNpb24uaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2ZpbGUuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9maWxlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9nZW5lcmF0b3IuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX2hlbHBlcnMuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9oZWxwZXJzLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tYXBfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tYXBfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jcHAvY3BwX21lc3NhZ2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfb3B0aW9ucy5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfcHJpbWl0aXZlX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfcHJpbWl0aXZlX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3BwL2NwcF9zZXJ2aWNlLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc2VydmljZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NwcC9jcHBfc3RyaW5nX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9kb2NfY29tbWVudC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2RvY19jb21tZW50LmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9lbnVtLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfZW51bV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2VudW1fZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2ZpZWxkX2Jhc2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9maWVsZF9iYXNlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9nZW5lcmF0b3IuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX2hlbHBlcnMuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9oZWxwZXJzLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tYXBfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tYXBfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX21lc3NhZ2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9tZXNzYWdlX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfb3B0aW9ucy5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcHJpbWl0aXZlX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcHJpbWl0aXZlX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZWZsZWN0aW9uX2NsYXNzLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVmbGVjdGlvbl9jbGFzcy5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfcmVwZWF0ZWRfZW51bV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX2VudW1fZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3JlcGVhdGVkX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9tZXNzYWdlX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvY3NoYXJwL2NzaGFycF9yZXBlYXRlZF9wcmltaXRpdmVfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3JfYmFzZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3NvdXJjZV9nZW5lcmF0b3JfYmFzZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2NzaGFycC9jc2hhcnBfd3JhcHBlcl9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9jc2hhcnAvY3NoYXJwX3dyYXBwZXJfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfY29udGV4dC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9kb2NfY29tbWVudC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZG9jX2NvbW1lbnQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9lbnVtX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9maWVsZF9saXRlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2VudW1fbGl0ZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZW51bV9saXRlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbi5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZXh0ZW5zaW9uLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2V4dGVuc2lvbl9saXRlLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9leHRlbnNpb25fbGl0ZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmlsZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZmlsZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2dlbmVyYXRvci5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9nZW5lcmF0b3JfZmFjdG9yeS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfZ2VuZXJhdG9yX2ZhY3RvcnkuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfaGVscGVycy5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX2xhenlfbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9sYXp5X21lc3NhZ2VfZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbGF6eV9tZXNzYWdlX2ZpZWxkX2xpdGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tYXBfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWFwX2ZpZWxkX2xpdGUuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21hcF9maWVsZF9saXRlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2UuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2J1aWxkZXIuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9idWlsZGVyX2xpdGUuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfYnVpbGRlcl9saXRlLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX21lc3NhZ2VfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9maWVsZF9saXRlLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2ZpZWxkX2xpdGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbWVzc2FnZV9saXRlLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9tZXNzYWdlX2xpdGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfbmFtZV9yZXNvbHZlci5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3ByaW1pdGl2ZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9wcmltaXRpdmVfZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfcHJpbWl0aXZlX2ZpZWxkX2xpdGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc2VydmljZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zaGFyZWRfY29kZV9nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3NoYXJlZF9jb2RlX2dlbmVyYXRvci5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YS9qYXZhX3N0cmluZ19maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmEvamF2YV9zdHJpbmdfZmllbGRfbGl0ZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhL2phdmFfc3RyaW5nX2ZpZWxkX2xpdGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW0uaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19lbnVtX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2VudW1fZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19leHRlbnNpb24uY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZXh0ZW5zaW9uLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19maWxlLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX2ZpbGUuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fZ2VuZXJhdG9yLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9faGVscGVycy5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19oZWxwZXJzLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWFwX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21hcF9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWVzc2FnZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX21lc3NhZ2VfZmllbGQuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvamF2YW5hbm8vamF2YW5hbm9fbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL2phdmFuYW5vL2phdmFuYW5vX3ByaW1pdGl2ZV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qYXZhbmFuby9qYXZhbmFub19wcmltaXRpdmVfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9qcy9qc19nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvanMvanNfZ2VuZXJhdG9yLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2VudW0uaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZW51bV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19leHRlbnNpb24uY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2V4dGVuc2lvbi5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmlsZS5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfZmlsZS5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19nZW5lcmF0b3IuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX2dlbmVyYXRvci5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19oZWxwZXJzLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21hcF9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWFwX2ZpZWxkLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2UuY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvb2JqZWN0aXZlYy9vYmplY3RpdmVjX21lc3NhZ2UuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZV9maWVsZC5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfbWVzc2FnZV9maWVsZC5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19vbmVvZi5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfb25lb2YuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9vYmplY3RpdmVjL29iamVjdGl2ZWNfcHJpbWl0aXZlX2ZpZWxkLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL29iamVjdGl2ZWMvb2JqZWN0aXZlY19wcmltaXRpdmVfZmllbGQuaCIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9wbHVnaW4uY2MiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnBiLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3BsdWdpbi5wYi5oIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25fZ2VuZXJhdG9yLmNjIiwKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL3B5dGhvbi9weXRob25fZ2VuZXJhdG9yLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcnVieS9ydWJ5X2dlbmVyYXRvci5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9ydWJ5L3J1YnlfZ2VuZXJhdG9yLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvc3VicHJvY2Vzcy5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci9zdWJwcm9jZXNzLmgiLAotICAgICAgICAgICAgInNyYy9nb29nbGUvcHJvdG9idWYvY29tcGlsZXIvemlwX3dyaXRlci5jYyIsCi0gICAgICAgICAgICAic3JjL2dvb2dsZS9wcm90b2J1Zi9jb21waWxlci96aXBfd3JpdGVyLmgiLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdwcm90b2J1Zl9mdWxsX2RvX25vdF91c2UnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICdzcmMnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncHJvdG9jJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICJzcmMvZ29vZ2xlL3Byb3RvYnVmL2NvbXBpbGVyL21haW4uY2MiLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdwcm90b2NfbGliJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnc3JjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgIyBHZW5lcmF0ZSB0aGUgcHl0aG9uIG1vZHVsZSBuZWVkZWQgYnkgYWxsIHByb3RvYy1nZW5lcmF0ZWQgUHl0aG9uIGNvZGUuCi0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3B5X3Byb3RvJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAnY29waWVzJzogWwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUikvcHlwcm90by9nb29nbGUvJywKLSAgICAgICAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICAgICAgICdfX2luaXRfXy5weScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUikvcHlwcm90by9nb29nbGUvdGhpcmRfcGFydHkvc2l4LycsCi0gICAgICAgICAgICAgICdmaWxlcyc6IFsKLSAgICAgICAgICAgICAgICAndGhpcmRfcGFydHkvc2l4L3NpeC5weScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUikvcHlwcm90by9nb29nbGUvcHJvdG9idWYnLAotICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvX19pbml0X18ucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfZGF0YWJhc2UucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3JfcG9vbC5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvanNvbl9mb3JtYXQucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2UucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL21lc3NhZ2VfZmFjdG9yeS5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcHJvdG9fYnVpbGRlci5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvcmVmbGVjdGlvbi5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvc2VydmljZS5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvc2VydmljZV9yZWZsZWN0aW9uLnB5JywKLSAgICAgICAgICAgICAgICAncHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9zeW1ib2xfZGF0YWJhc2UucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL3RleHRfZW5jb2RpbmcucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL3RleHRfZm9ybWF0LnB5JywKLQotICAgICAgICAgICAgICAgICMgVE9ETyhuY2FydGVyKTogcHJvdG9jJ3MgcHl0aG9uIGdlbmVyYXRvciB0cmVhdHMKLSAgICAgICAgICAgICAgICAjIGRlc2NyaXB0b3IucHJvdG8gc3BlY2lhbGx5LCBidXQgb25seSB3aGVuIHRoZSBpbnB1dCBwYXRoIGlzCi0gICAgICAgICAgICAgICAgIyBleGFjdGx5ICJnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90byIuICBJJ20gbm90IHN1cmUgaG93Ci0gICAgICAgICAgICAgICAgIyB0byBleGVjdXRlIGEgcnVsZSBmcm9tIGEgZGlmZmVyZW50IGRpcmVjdG9yeS4gIEZvciBub3csIHVzZSBhCi0gICAgICAgICAgICAgICAgIyBtYW51YWxseS1nZW5lcmF0ZWQgY29weSBvZiBkZXNjcmlwdG9yX3BiMi5weS4KLSAgICAgICAgICAgICAgICAncHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yX3BiMi5weScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUikvcHlwcm90by9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwnLAotICAgICAgICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvX19pbml0X18ucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL19wYXJhbWV0ZXJpemVkLnB5JywKLSAgICAgICAgICAgICAgICAncHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9hcGlfaW1wbGVtZW50YXRpb24ucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2NvbnRhaW5lcnMucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2RlY29kZXIucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2VuY29kZXIucHknLAotICAgICAgICAgICAgICAgICdweXRob24vZ29vZ2xlL3Byb3RvYnVmL2ludGVybmFsL2VudW1fdHlwZV93cmFwcGVyLnB5JywKLSAgICAgICAgICAgICAgICAncHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9tZXNzYWdlX2xpc3RlbmVyLnB5JywKLSAgICAgICAgICAgICAgICAncHl0aG9uL2dvb2dsZS9wcm90b2J1Zi9pbnRlcm5hbC9weXRob25fbWVzc2FnZS5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvdHlwZV9jaGVja2Vycy5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2VsbF9rbm93bl90eXBlcy5weScsCi0gICAgICAgICAgICAgICAgJ3B5dGhvbi9nb29nbGUvcHJvdG9idWYvaW50ZXJuYWwvd2lyZV9mb3JtYXQucHknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgIyAgICMgV2UgY2FuJ3QgZ2VuZXJhdGUgYSBwcm9wZXIgZGVzY3JpcHRvcl9wYjIucHkgLS0gc2VlIGVhcmxpZXIgY29tbWVudC4KLSAgICAgICMgICAncnVsZXMnOiBbCi0gICAgICAjICAgICB7Ci0gICAgICAjICAgICAgICdydWxlX25hbWUnOiAnZ2VucHJvdG8nLAotICAgICAgIyAgICAgICAnZXh0ZW5zaW9uJzogJ3Byb3RvJywKLSAgICAgICMgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICMgICAgICAgICAnPChQUk9EVUNUX0RJUikvPChFWEVDVVRBQkxFX1BSRUZJWClwcm90b2M8KEVYRUNVVEFCTEVfU1VGRklYKScsCi0gICAgICAjICAgICAgIF0sCi0gICAgICAjICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAjICAgICAgICAgIyBUaGUgcHJvdG9jIGNvbXBpbGVyIHJlcXVpcmVzIGEgcHJvdG9fcGF0aCBhcmd1bWVudCB3aXRoIHRoZQotICAgICAgIyAgICAgICAgICAgIyBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLnByb3RvIGZpbGUuCi0gICAgICAjICAgICAgICAgICAncnVsZV9pbnB1dF9yZWxwYXRoJzogJ3NyYy9nb29nbGUvcHJvdG9idWYnLAotICAgICAgIyAgICAgICAgIH0sCi0gICAgICAjICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAjICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvcHlwcm90by9nb29nbGUvcHJvdG9idWYvPChSVUxFX0lOUFVUX1JPT1QpX3BiMi5weScsCi0gICAgICAjICAgICAgICAgXSwKLSAgICAgICMgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgIyAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpLzwoRVhFQ1VUQUJMRV9QUkVGSVgpcHJvdG9jPChFWEVDVVRBQkxFX1NVRkZJWCknLAotICAgICAgIyAgICAgICAgICAgJy1JLi9zcmMnLAotICAgICAgIyAgICAgICAgICAgJy1JLicsCi0gICAgICAjICAgICAgICAgICAnLS1weXRob25fb3V0PTwoUFJPRFVDVF9ESVIpL3B5cHJvdG8vZ29vZ2xlL3Byb3RvYnVmJywKLSAgICAgICMgICAgICAgICAgICdnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bycsCi0gICAgICAjICAgICAgICAgXSwKLSAgICAgICMgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIFB5dGhvbiBjb2RlIGZyb20gPChSVUxFX0lOUFVUX1BBVEgpJywKLSAgICAgICMgICAgICAgfSwKLSAgICAgICMgICAgIF0sCi0gICAgICAjICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgIyAgICAgICAncHJvdG9jI2hvc3QnLAotICAgICAgIyAgICAgXSwKLSAgICAgICMgICAgICdzb3VyY2VzJzogWwotICAgICAgIyAgICAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnByb3RvJywKLSAgICAgICMgICAgIF0sCi0gICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LCB7ICMgdXNlX3N5c3RlbV9wcm90b2J1Zj09MQotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncHJvdG9idWZfbGl0ZScsCi0gICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAgICAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAjIFVzZSBmdWxsIHByb3RvYnVmLCBiZWNhdXNlIHZhbmlsbGEgcHJvdG9idWYgZG9lc24ndCBoYXZlCi0gICAgICAgICAgICAgICMgb3VyIGN1c3RvbSBwYXRjaCB0byByZXRhaW4gdW5rbm93biBmaWVsZHMgaW4gbGl0ZSBtb2RlLgotICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1jZmxhZ3MgcHJvdG9idWYpJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1VTRV9TWVNURU1fUFJPVE9CVUYnLAotCi0gICAgICAgICAgICAgICMgVGhpcyBtYWNybyBtdXN0IGJlIGRlZmluZWQgdG8gc3VwcHJlc3MgdGhlIHVzZQotICAgICAgICAgICAgICAjIG9mIGR5bmFtaWNfY2FzdDw+LCB3aGljaCByZXF1aXJlcyBSVFRJLgotICAgICAgICAgICAgICAnR09PR0xFX1BST1RPQlVGX05PX1JUVEknLAotICAgICAgICAgICAgICAnR09PR0xFX1BST1RPQlVGX05PX1NUQVRJQ19JTklUSUFMSVpFUicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAjIFVzZSBmdWxsIHByb3RvYnVmLCBiZWNhdXNlIHZhbmlsbGEgcHJvdG9idWYgZG9lc24ndCBoYXZlCi0gICAgICAgICAgICAjIG91ciBjdXN0b20gcGF0Y2ggdG8gcmV0YWluIHVua25vd24gZmllbGRzIGluIGxpdGUgbW9kZS4KLSAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1saWJzLW9ubHktTCAtLWxpYnMtb25seS1vdGhlciBwcm90b2J1ZiknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICc8IUAocGtnLWNvbmZpZyAtLWxpYnMtb25seS1sIHByb3RvYnVmKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncHJvdG9jJywKLSAgICAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncHlfcHJvdG8nLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmX2xpdGUuZ3lwaSBiL3RoaXJkX3BhcnR5L3Byb3RvYnVmL3Byb3RvYnVmX2xpdGUuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlMjI4OC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9wcm90b2J1Zi9wcm90b2J1Zl9saXRlLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICdzb3VyY2VzJzogWwotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2FyZW5hLmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYS5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9hcmVuYXN0cmluZy5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvYXJlbmFzdHJpbmcuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvZXh0ZW5zaW9uX3NldC5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9nZW5lcmF0ZWRfbWVzc2FnZV91dGlsLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vY29kZWRfc3RyZWFtLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL2lvL2NvZGVkX3N0cmVhbV9pbmwuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbS5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9pby96ZXJvX2NvcHlfc3RyZWFtX2ltcGxfbGl0ZS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvaW8vemVyb19jb3B5X3N0cmVhbV9pbXBsX2xpdGUuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvbWFwLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9lbnRyeV9saXRlLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF9maWVsZF9saXRlLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL21hcF90eXBlX2hhbmRsZXIuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvbWVzc2FnZV9saXRlLmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9tZXNzYWdlX2xpdGUuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvcmVwZWF0ZWRfZmllbGQuY2MnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3JlcGVhdGVkX2ZpZWxkLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wcy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2FybTY0X2djYy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX2FybV9nY2MuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19hcm1fcW54LmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfYXRvbWljd29yZF9jb21wYXQuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19nZW5lcmljX2djYy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21hY29zeC5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX21pcHNfZ2NjLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfcG5hY2wuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19wb3dlci5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3BwY19nY2MuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYXRvbWljb3BzX2ludGVybmFsc19zb2xhcmlzLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfdHNhbi5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9nY2MuY2MnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY29wc19pbnRlcm5hbHNfeDg2X2djYy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9hdG9taWNvcHNfaW50ZXJuYWxzX3g4Nl9tc3ZjLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2F0b21pY19zZXF1ZW5jZV9udW0uaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvYnl0ZXN0cmVhbS5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jYWxsYmFjay5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jYXN0cy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9jb21tb24uY2MnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2NvbW1vbi5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9mYXN0bWVtLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL2hhc2guaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvaW50MTI4LmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9pbnQxMjguaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbG9nZ2luZy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9tYWNyb3MuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbWFwX3V0aWwuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvbXV0ZXguaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvb25jZS5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9wbGF0Zm9ybV9tYWNyb3MuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvcG9ydC5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zY29wZWRfcHRyLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3NoYXJlZF9wdHIuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzLmNjJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXMuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzX21hY3Jvcy5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy9zdGF0dXNvci5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RhdHVzb3IuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RsX3V0aWwuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncGllY2UuY2MnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3BpZWNlLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cmluZ3ByaW50Zi5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RyaW5ncHJpbnRmLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3N0cnVjdHVyYWxseV92YWxpZC5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvc3R1YnMvc3RydXRpbC5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi9zdHVicy90ZW1wbGF0ZV91dGlsLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3R5cGVfdHJhaXRzLmgnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuY2MnLAotICAgICdzcmMvZ29vZ2xlL3Byb3RvYnVmL3N0dWJzL3RpbWUuaCcsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5jYycsCi0gICAgJ3NyYy9nb29nbGUvcHJvdG9idWYvd2lyZV9mb3JtYXRfbGl0ZS5oJywKLSAgICAnc3JjL2dvb2dsZS9wcm90b2J1Zi93aXJlX2Zvcm1hdF9saXRlX2lubC5oJywKLSAgXSwKLSAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAnc3JjJywKLSAgXSwKLSAgJ2RlZmluZXMnOiBbCi0gICAgIyBUaGlzIG1hY3JvIG11c3QgYmUgZGVmaW5lZCB0byBzdXBwcmVzcyB0aGUgdXNlIG9mIGR5bmFtaWNfY2FzdDw+LAotICAgICMgd2hpY2ggcmVxdWlyZXMgUlRUSS4KLSAgICAnR09PR0xFX1BST1RPQlVGX05PX1JUVEknLAotCi0gICAgJ0dPT0dMRV9QUk9UT0JVRl9OT19TVEFUSUNfSU5JVElBTElaRVInLAotICAgICdIQVZFX1BUSFJFQUQnLAotICBdLAotICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgJ3NyYycsCi0gICAgXSwKLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICdHT09HTEVfUFJPVE9CVUZfTk9fUlRUSScsCi0gICAgICAnR09PR0xFX1BST1RPQlVGX05PX1NUQVRJQ19JTklUSUFMSVpFUicsCi0gICAgXSwKLSAgICAjIFRPRE8oanNjaHVoKTogaHR0cDovL2NyYnVnLmNvbS8xNjcxODcgc2l6ZV90IC0+IGludC4KLSAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsgNDI2NyBdLAotICB9LAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvcHJveHlfcHkvcHJveHkucHkgYi90aGlyZF9wYXJ0eS9wcm94eV9weS9wcm94eS5weQppbmRleCA2YjYxNGE2Li4yODQ1YzZhIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS9wcm94eV9weS9wcm94eS5weQorKysgYi90aGlyZF9wYXJ0eS9wcm94eV9weS9wcm94eS5weQpAQCAtMzg0LDYgKzM4NCwxMSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCBob3N0X3Jlc29sdmVyPU5vbmUpOgogICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKGInc2VydmVyJykKIAorICAgICAgICBpZiBpc2luc3RhbmNlKGhvc3QsIGJ5dGVzKToKKyAgICAgICAgICAgIGhvc3QgPSBob3N0LmRlY29kZSgpCisgICAgICAgIGlmIGlzaW5zdGFuY2UocG9ydCwgYnl0ZXMpOgorICAgICAgICAgICAgcG9ydCA9IHBvcnQuZGVjb2RlKCkKKwogICAgICAgICAjIEhvc3RuYW1lIElQIHJlc29sdXRpb24uCiAgICAgICAgIGlmIGhvc3RfcmVzb2x2ZXIgYW5kIGhvc3QgaW4gaG9zdF9yZXNvbHZlcjoKICAgICAgICAgICAgIGhvc3QgPSBob3N0X3Jlc29sdmVyW2hvc3RdCkBAIC00ODEsNyArNDg2LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFByb3h5QXV0aGVudGljYXRpb25GYWlsZWQoKQogCiAgICAgICAgICAgICBpZiBzZWxmLnJlcXVlc3QubWV0aG9kID09IGInQ09OTkVDVCc6Ci0gICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYucmVxdWVzdC51cmwucGF0aC5zcGxpdChDT0xPTikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlcXVlc3QudXJsLnNjaGVtZSAhPSBiJyc6CisgICAgICAgICAgICAgICAgICAgIGhvc3QgPSBzZWxmLnJlcXVlc3QudXJsLnNjaGVtZQorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gc2VsZi5yZXF1ZXN0LnVybC5wYXRoCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYucmVxdWVzdC51cmwucGF0aC5zcGxpdChDT0xPTikKICAgICAgICAgICAgIGVsaWYgc2VsZi5yZXF1ZXN0LnVybDoKICAgICAgICAgICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5yZXF1ZXN0LnVybC5ob3N0bmFtZSwgc2VsZi5yZXF1ZXN0LnVybC5wb3J0IGlmIHNlbGYucmVxdWVzdC51cmwucG9ydCBlbHNlIDgwCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvcHVsc2VhdWRpb19pbmNsdWRlcy9wdWxzZWF1ZGlvX2luY2x1ZGVzLmd5cCBiL3RoaXJkX3BhcnR5L3B1bHNlYXVkaW9faW5jbHVkZXMvcHVsc2VhdWRpb19pbmNsdWRlcy5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjFkODguLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvcHVsc2VhdWRpb19pbmNsdWRlcy9wdWxzZWF1ZGlvX2luY2x1ZGVzLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncHVsc2VhdWRpbycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWyAncHVsc2VhdWRpby4xMi4yJyBdLAotICAgICAgfSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9neXAvY29yZS5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9neXAvY29yZS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTEyMTlhLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2NvcmUuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDU5NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUcmFuc2xhdGVkIGZyb206IGduL2NvcmUuZ25pCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2tpYV9jb3JlX3B1YmxpYyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrQW5ub3RhdGlvbi5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrQkJIRmFjdG9yeS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrQml0bWFwLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tCbGVuZE1vZGUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0JsdXJUeXBlcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrQ2FudmFzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tDYW52YXNWaXJ0dWFsRW5mb3JjZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0NsaXBPcC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrQ29sb3IuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0NvbG9yRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tDb2xvclByaXYuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0NvbG9yU3BhY2UuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0NvbnRvdXJNZWFzdXJlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tDb3ZlcmFnZU1vZGUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0N1YmljTWFwLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tEYXRhLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tEYXRhVGFibGUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0RlZmVycmVkRGlzcGxheUxpc3RSZWNvcmRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrRGVxdWUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0RvY3VtZW50LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tEcmF3TG9vcGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tEcmF3YWJsZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrRW5jb2RlZEltYWdlRm9ybWF0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tFeGVjdXRvci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrRmlsdGVyUXVhbGl0eS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrRmxhdHRlbmFibGUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ZvbnQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ZvbnRBcmd1bWVudHMuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ZvbnRMQ0RDb25maWcuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ZvbnRNZXRyaWNzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tGb250TWdyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tGb250UGFyYW1ldGVycy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrRm9udFN0eWxlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tGb250VHlwZXMuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0dyYXBoaWNzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tJQ0MuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ltYWdlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tJbWFnZUVuY29kZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta0ltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tJbWFnZUdlbmVyYXRvci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrSW1hZ2VJbmZvLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tNYWxsb2NQaXhlbFJlZi5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTWFza0ZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTWF0aC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTWF0cml4LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tNYXRyaXg0NC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTWlsZXN0b25lLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tPdmVyZHJhd0NhbnZhcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGFpbnQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1BhdGguaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1BhdGhFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1BhdGhNZWFzdXJlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tQaXhlbFJlZi5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGl4bWFwLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tQbmdDaHVua1JlYWRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUG9pbnQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1BvaW50My5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUG9zdENvbmZpZy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUHJlQ29uZmlnLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tQcm9taXNlSW1hZ2VUZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tSUmVjdC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUlNYZm9ybS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUldCdWZmZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1Jhc3RlckhhbmRsZUFsbG9jYXRvci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUmVjdC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUmVmQ250LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tSZWdpb24uaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1NjYWxhci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU2VyaWFsUHJvY3MuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1NoYWRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU2l6ZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU3RyZWFtLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tTdHJpbmcuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1N0cm9rZVJlYy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU3VyZmFjZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU3VyZmFjZUNoYXJhY3Rlcml6YXRpb24uaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1N1cmZhY2VQcm9wcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrU3dpenpsZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrVGV4dEJsb2IuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1RpbWUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1RyYWNlTWVtb3J5RHVtcC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrVHlwZWZhY2UuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvY29yZS9Ta1R5cGVzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tVblByZU11bHRpcGx5LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tWZXJ0aWNlcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrWVVWQUluZGV4LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2NvcmUvU2tZVVZBU2l6ZUluZm8uaCIsCi0gICAgXSwKLQotICAgICdza2lhX2NvcmVfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2Mvc2tfaW1hZ2VpbmZvLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jL3NrX3BhaW50LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jL3NrX3N1cmZhY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2Mvc2tfdHlwZXNfcHJpdi5oIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9TazRweC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tBQUNsaXAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tBbm5vdGF0aW9uLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQWR2YW5jZWRUeXBlZmFjZU1ldHJpY3MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQWxwaGFSdW5zLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQW50aVJ1bi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tBVHJhY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tBVHJhY2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQXV0b1BpeG1hcFN0b3JhZ2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQXV0b1BpeG1hcFN0b3JhZ2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCQkhGYWN0b3J5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQkJveEhpZXJhcmNoeS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCaXRtYXAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCaXRtYXBDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JpdG1hcENvbnRyb2xsZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCaXRtYXBEZXZpY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCaXRtYXBEZXZpY2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQml0bWFwUHJvY1N0YXRlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQml0bWFwUHJvY1N0YXRlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JpdG1hcFByb2NTdGF0ZV9tYXRyaXhQcm9jcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JsZW5kTW9kZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JsaXRCV01hc2tUZW1wbGF0ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCbGl0Um93LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQmxpdHRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCbGl0dGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQmxpdHRlcl9BOC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQmxpdHRlcl9SR0I1NjUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tCbGl0dGVyX1Nwcml0ZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JsdXJNYXNrLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQmx1ck1hc2suaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQmx1ck1GLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQ2FjaGVkRGF0YS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NhbnZhcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NhbnZhc1ByaXYuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDYW52YXNQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NsaXBTdGFjay5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NsaXBTdGFjay5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDbGlwU3RhY2tEZXZpY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDbGlwU3RhY2tEZXZpY2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQ29sb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDb2xvckZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NvbG9yRmlsdGVyX01hdHJpeC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NvbG9yRmlsdGVyX01hdHJpeC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDb2xvclNwYWNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQ29sb3JTcGFjZVhmb3JtU3RlcHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDb250b3VyTWVhc3VyZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NvbnZlcnRQaXhlbHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDb252ZXJ0UGl4ZWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0NvcmVCbGl0dGVycy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tDcHUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQ3ViaWNDbGlwcGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQ3ViaWNDbGlwcGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0N1YmljTWFwLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGF0YS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RhdGFUYWJsZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RlYnVnLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGVmZXJyZWREaXNwbGF5TGlzdFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGVmZXJyZWREaXNwbGF5TGlzdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RlZmVycmVkRGlzcGxheUxpc3RSZWNvcmRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RlcXVlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGVzY3JpcHRvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0Rlc2NyaXB0b3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGV2aWNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRGV2aWNlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0Rpc2NhcmRhYmxlTWVtb3J5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvbGF6eS9Ta0Rpc2NhcmRhYmxlTWVtb3J5UG9vbC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0Rpc3RhbmNlRmllbGRHZW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEaXN0YW5jZUZpZWxkR2VuLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RvY3VtZW50LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRHJhdy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RyYXdfYXRsYXMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEcmF3X3RleHQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEcmF3X3ZlcnRpY2VzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRHJhdy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEcmF3YWJsZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0RyYXdMb29wZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEcmF3UHJvY3MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRHJhd1NoYWRvd0luZm8uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tEcmF3U2hhZG93SW5mby5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tFZGdlQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0VkZ2VCdWlsZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0VkZ2VDbGlwcGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRWRnZUNsaXBwZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRW5kaWFuLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0V4ZWN1dG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQW5hbHl0aWNFZGdlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRWRnZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0VkZ2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRkRvdDYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQXJlbmFBbGxvYy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0FyZW5hQWxsb2MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrQXJlbmFBbGxvY0xpc3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2F1c3NGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHYXVzc0ZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tGbGF0dGVuYWJsZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ZvbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tGb250TENEQ29uZmlnLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRm9udE1nci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ZvbnREZXNjcmlwdG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRm9udERlc2NyaXB0b3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRm9udFN0cmVhbS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ZvbnRTdHJlYW0uaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrRnV6ekxvZ2dpbmcuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2VvbWV0cnkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHZW9tZXRyeS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHbG9iYWxJbml0aWFsaXphdGlvbl9jb3JlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2x5cGguaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2x5cGguY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHbHlwaEJ1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHbHlwaEJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0dseXBoUnVuLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2x5cGhSdW4uaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2x5cGhSdW5QYWludGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrR2x5cGhSdW5QYWludGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0dwdUJsdXJVdGlscy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHcHVCbHVyVXRpbHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tHcmFwaGljcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0hhbGYuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tJQ0MuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ltYWdlRmlsdGVyX0Jhc2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrSW1hZ2VGaWx0ZXJDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ltYWdlRmlsdGVyQ2FjaGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrSW1hZ2VGaWx0ZXJUeXBlcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0ltYWdlRmlsdGVyVHlwZXMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrSW1hZ2VJbmZvLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrSW1hZ2VHZW5lcmF0b3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tFbnVtZXJhdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTGluZUNsaXBwZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tMb2NhbE1hdHJpeEltYWdlRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTG9jYWxNYXRyaXhJbWFnZUZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNRDUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNRDUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWFrZVVuaXF1ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNYWxsb2NQaXhlbFJlZi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hc2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNYXNrLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hc2tCbHVyRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hc2tCbHVyRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWFza0NhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWFza0ZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hc2tHYW1tYS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hc2tHYW1tYS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWF0aFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWF0cml4LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWF0cml4NDQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNYXRyaXhJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hdHJpeEltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01hdHJpeFV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01lc3NhZ2VCdXMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWlwTWFwLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTWlwTWFwLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01pbmlSZWNvcmRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta01pbmlSZWNvcmRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNb2RlQ29sb3JGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tOZXh0SUQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTGF0dGljZUl0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tMYXR0aWNlSXRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tOb3JtYWxGbGF0U291cmNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTm9ybWFsRmxhdFNvdXJjZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tOb3JtYWxNYXBTb3VyY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tOb3JtYWxNYXBTb3VyY2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTm9ybWFsU291cmNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrTm9ybWFsU291cmNlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta09wdHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tPcHRzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta09yZGVyZWRSZWFkQnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta09TRmlsZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tPdmVyZHJhd0NhbnZhcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BhaW50LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGFpbnREZWZhdWx0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQYWludFByaXYuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQYWludFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGF0aC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BhdGhfc2VyaWFsLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGF0aEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BhdGhNZWFzdXJlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGF0aFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGF0aFJlZi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpeGVsUmVmLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGl4bWFwLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUG9pbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQb2ludDMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQcm9taXNlSW1hZ2VUZXh0dXJlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUHRyUmVjb3JkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tRdWFkQ2xpcHBlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1F1YWRDbGlwcGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1Jhc3RlckNsaXAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSYXN0ZXJQaXBlbGluZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1Jhc3RlclBpcGVsaW5lQmxpdHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlYWRCdWZmZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUmVhZEJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlYWRlcjMyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlY29yZC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlY29yZHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWNvcmRzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlY29yZERyYXcuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWNvcmRPcHRzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUmVjb3JkT3B0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWNvcmRQYXR0ZXJuLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWdpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWdpb25Qcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JlZ2lvbl9wYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUmVtb3RlR2x5cGhDYWNoZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZW1vdGVHbHlwaENhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUmVzb3VyY2VDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JSZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUlJlY3RQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JUcmVlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1JUcmVlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUldCdWZmZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTY2FsYXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTY2FsZXJDb250ZXh0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2NhbGVyQ29udGV4dC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTY2FsZVRvU2lkZXMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2Nhbi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1NjYW4uaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2NhblByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2Nhbl9BQUFQYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2Nhbl9BbnRpUGF0aC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1NjYW5fQW50aWhhaXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTY2FuX0hhaXJsaW5lLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2Nhbl9QYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2NvcGVFeGl0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1NlbWFwaG9yZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1NoYXJlZE11dGV4LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU2hhcmVkTXV0ZXguaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3Bhbi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTcGVjaWFsSW1hZ2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTcGVjaWFsSW1hZ2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3BlY2lhbFN1cmZhY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTcGVjaWFsU3VyZmFjZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTcGlubG9jay5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1Nwcml0ZUJsaXR0ZXJfQVJHQjMyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3ByaXRlQmxpdHRlcl9SR0I1NjUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTcHJpdGVCbGl0dGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmVhbS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmVhbVByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3RyaWtlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3RyaWtlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmlrZUNhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3RyaWtlQ2FjaGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3RyaWtlRm9yR1BVLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmlrZUZvckdQVS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmlrZVNwZWMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTdHJpa2VTcGVjLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmluZy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cmluZ1V0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3Ryb2tlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cm9rZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cm9rZVJlYy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1N0cm9rZXJQcml2LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3Ryb2tlclByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrU3VyZmFjZUNoYXJhY3Rlcml6YXRpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTdXJmYWNlUHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tTd2l6emxlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVGFza0dyb3VwLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVGFza0dyb3VwLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1REUFF1ZXVlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1REeW5hbWljSGFzaC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUZXh0QmxvYi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RleHRCbG9iUHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUZXh0Rm9ybWF0UGFyYW1zLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RpbWUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUSW50ZXJuYWxMTGlzdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUaHJlYWRJRC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RMYXp5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RMTGlzdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUTFMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUTXVsdGlNYXAuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVHJhY2VFdmVudC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUcmFjZUV2ZW50Q29tbW9uLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RTZWFyY2guY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUU2VhcmNoLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RTb3J0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1RUb3BvU29ydC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUeXBlZmFjZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1R5cGVmYWNlX3JlbW90ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUeXBlZmFjZV9yZW1vdGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUeXBlZmFjZUNhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVHlwZWZhY2VDYWNoZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tUeXBlZmFjZVByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVW5QcmVNdWx0aXBseS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1V0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVXRpbHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVk0uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tWTS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tWTUJsaXR0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tWYWxpZGF0aW9uVXRpbHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrVmVydGljZXMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tWZXJ0U3RhdGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tXcml0ZUJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1dyaXRlcjMyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrV3JpdGVyMzIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrWGZlcm1vZGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tYZmVybW9kZUludGVycHJldGF0aW9uLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrWGZlcm1vZGVJbnRlcnByZXRhdGlvbi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tZVVZQbGFuZXNDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1lVVlBsYW5lc0NhY2hlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1lVVkFTaXplSW5mby5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1lVVk1hdGguY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2taaXAuaCIsCi0KLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrSW1hZ2UuY3BwIiwKLQotICAgICAgIyAgICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9HcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrSW1hZ2VfTGF6eS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9MYXp5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9SYXN0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrU3VyZmFjZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tTdXJmYWNlX0Jhc2UuaCIsCi0KLSAgICAgICMgICAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrU3VyZmFjZV9HcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrU3VyZmFjZV9SYXN0ZXIuY3BwIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9Ta0JpdG1hcFByb2NTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tCaXRtYXBQcm9jU2hhZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9Ta0NvbG9yRmlsdGVyU2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrQ29sb3JGaWx0ZXJTaGFkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrQ29sb3JTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tDb2xvclNoYWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tDb21wb3NlU2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrQ29tcG9zZVNoYWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tFbXB0eVNoYWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tJbWFnZVNoYWRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9Ta0xpZ2h0aW5nU2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrTGlnaHRpbmdTaGFkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrTGlnaHRzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrTGlnaHRzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9Ta0xvY2FsTWF0cml4U2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrTG9jYWxNYXRyaXhTaGFkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrUlRTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tTaGFkZXJCYXNlLmgiLAotCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9vcHRzL1NrQmxpdE1hc2tfb3B0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL29wdHMvU2tCbGl0Um93X29wdHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9vcHRzL1NrQ2hlY2tzdW1fb3B0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL29wdHMvU2tSYXN0ZXJQaXBlbGluZV9vcHRzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9vcHRzL1NrVXRpbHNfb3B0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL29wdHMvU2tYZmVybW9kZV9vcHRzLmgiLAotCi0gICAgICAjIHByaXZhdGUKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrQ2hlY2tzdW0uaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta0RlZmVycmVkRGlzcGxheUxpc3QuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta0ZpeGVkLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tGbG9hdEJpdHMuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta0Zsb2F0aW5nUG9pbnQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta0hhbGYuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta01hbGxvYy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrTXV0ZXguaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta05vbmNvcHlhYmxlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tOeC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrTnhfbmVvbi5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrTnhfc3NlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tPbmNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tQYXRoUmVmLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tTZW1hcGhvcmUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta1NoYWRvd0ZsYWdzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tTcGlubG9jay5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrVGVtcGxhdGVzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tUQXJyYXkuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta1REQXJyYXkuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta1RGaXRzSW4uaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta1RIYXNoLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvU2tUaHJlYWRBbm5vdGF0aW9ucy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrVGhyZWFkSUQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9Ta1RMb2dpYy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL1NrV2Vha1JlZkNudC5oIiwKLSAgICBdLAotCi0gICAgJ3NraWFfcGF0aG9wc19wdWJsaWMnOiBbCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHMuaCIsCi0gICAgXSwKLQotICAgICdza2lhX3BhdGhvcHNfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tBZGRJbnRlcnNlY3Rpb25zLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrRENvbmljTGluZUludGVyc2VjdGlvbi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta0RDdWJpY0xpbmVJbnRlcnNlY3Rpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tEQ3ViaWNUb1F1YWRzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrRExpbmVJbnRlcnNlY3Rpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tEUXVhZExpbmVJbnRlcnNlY3Rpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tJbnRlcnNlY3Rpb25zLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrT3BBbmdsZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta09wQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta09wQ29pbmNpZGVuY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcENvbnRvdXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcEN1YmljSHVsbC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta09wRWRnZUJ1aWxkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcFNlZ21lbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcFNwYW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tQYXRoT3BzQXNXaW5kaW5nLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc0NvbW1vbi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNDb25pYy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNDdWJpYy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNDdXJ2ZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNEZWJ1Zy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNMaW5lLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc09wLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc1F1YWQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tQYXRoT3BzUmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNTaW1wbGlmeS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNUU2VjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNUaWdodEJvdW5kcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNUeXBlcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNXaW5kaW5nLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aFdyaXRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1JlZHVjZU9yZGVyLmNwcCIsCi0KLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tBZGRJbnRlcnNlY3Rpb25zLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta0ludGVyc2VjdGlvbkhlbHBlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tJbnRlcnNlY3Rpb25zLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta0xpbmVQYXJhbWV0ZXJzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta09wQW5nbGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrT3BDb2luY2lkZW5jZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcENvbnRvdXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrT3BFZGdlQnVpbGRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tPcFNlZ21lbnQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrT3BTcGFuLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNCb3VuZHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc0NvbW1vbi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tQYXRoT3BzQ29uaWMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc0N1YmljLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNDdXJ2ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tQYXRoT3BzRGVidWcuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc0xpbmUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aE9wc1BvaW50LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNRdWFkLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNSZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvcGF0aG9wcy9Ta1BhdGhPcHNUU2VjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tQYXRoT3BzVHlwZXMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9wYXRob3BzL1NrUGF0aFdyaXRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3BhdGhvcHMvU2tSZWR1Y2VPcmRlci5oIiwKLSAgICBdLAotCi0gICAgJ3NraWFfc2twaWN0dXJlX3B1YmxpYyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTXVsdGlQaWN0dXJlRHJhdy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGljdHVyZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGljdHVyZVJlY29yZGVyLmgiLAotICAgIF0sCi0KLSAgICAnc2tpYV9za3BpY3R1cmVfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrTXVsdGlQaWN0dXJlRHJhdy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGljdHVyZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9jb3JlL1NrUGljdHVyZVJlY29yZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta0JpZ1BpY3R1cmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tNdWx0aVBpY3R1cmVEcmF3LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGljdHVyZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpY3R1cmVDb21tb24uaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGljdHVyZURhdGEuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQaWN0dXJlRGF0YS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQaWN0dXJlRmxhdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpY3R1cmVGbGF0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpY3R1cmVJbWFnZUdlbmVyYXRvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpY3R1cmVQbGF5YmFjay5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvY29yZS9Ta1BpY3R1cmVQbGF5YmFjay5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQaWN0dXJlUmVjb3JkLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUGljdHVyZVJlY29yZC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tQaWN0dXJlUmVjb3JkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2NvcmUvU2tSZWNvcmRlZERyYXdhYmxlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9jb3JlL1NrUmVjb3JkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tQaWN0dXJlU2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL1NrUGljdHVyZVNoYWRlci5oIiwKLSAgICBdLAotICB9LAotICAnZGVmaW5lcyc6IFsKLSAgICAnU0tfQlVJTERfTk9fT1BUUycsCi0gIF0sCi0gICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgewotICAgICdkZWZpbmVzJzogWwotICAgICAgJ1NLX0JVSUxEX05PX09QVFMnLAotICAgIF0sCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHMuZ3lwaSBiL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0MjdmNy4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL2d5cC9lZmZlY3RzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUcmFuc2xhdGVkIGZyb206IGduL2VmZmVjdHMuZ25pCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2tpYV9lZmZlY3RzX3B1YmxpYyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2syRFBhdGhFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta0JsdXJEcmF3TG9vcGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tCbHVyTWFza0ZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrQ29sb3JNYXRyaXguaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta0NvbG9yTWF0cml4RmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tDb3JuZXJQYXRoRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tEYXNoUGF0aEVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrRGlzY3JldGVQYXRoRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tHcmFkaWVudFNoYWRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrTGF5ZXJEcmF3TG9vcGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tMdW1hQ29sb3JGaWx0ZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta092ZXJkcmF3Q29sb3JGaWx0ZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta1Blcmxpbk5vaXNlU2hhZGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tTaGFkZXJNYXNrRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tUYWJsZUNvbG9yRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tUYWJsZU1hc2tGaWx0ZXIuaCIsCi0gICAgXSwKLQotICAgICdza2lhX2VmZmVjdHNfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2Mvc2tfZWZmZWN0cy5jcHAiLAotCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL1NrMURQYXRoRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL1NrMkRQYXRoRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL1NrQ29sb3JNYXRyaXguY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tDb2xvck1hdHJpeEZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta0Nvcm5lclBhdGhFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tEYXNoUGF0aEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta0Rpc2NyZXRlUGF0aEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta0VtYm9zc01hc2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tFbWJvc3NNYXNrLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta0VtYm9zc01hc2tGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tIaWdoQ29udHJhc3RGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tMYXllckRyYXdMb29wZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tMdW1hQ29sb3JGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tPcFBhdGhFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tPdmVyZHJhd0NvbG9yRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL1NrUGFja0JpdHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tQYWNrQml0cy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvU2tTaGFkZXJNYXNrRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL1NrVGFibGVDb2xvckZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta1RhYmxlTWFza0ZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9Ta1RyaW1QYXRoRWZmZWN0LmNwcCIsCi0KLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvU2tQZXJsaW5Ob2lzZVNoYWRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9ncmFkaWVudHMvU2s0ZkdyYWRpZW50QmFzZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9ncmFkaWVudHMvU2s0ZkdyYWRpZW50QmFzZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrNGZHcmFkaWVudFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL2dyYWRpZW50cy9TazRmTGluZWFyR3JhZGllbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrNGZMaW5lYXJHcmFkaWVudC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrR3JhZGllbnRTaGFkZXJQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9ncmFkaWVudHMvU2tMaW5lYXJHcmFkaWVudC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9ncmFkaWVudHMvU2tMaW5lYXJHcmFkaWVudC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrUmFkaWFsR3JhZGllbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3NoYWRlcnMvZ3JhZGllbnRzL1NrUmFkaWFsR3JhZGllbnQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL2dyYWRpZW50cy9Ta1R3b1BvaW50Q29uaWNhbEdyYWRpZW50LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL2dyYWRpZW50cy9Ta1R3b1BvaW50Q29uaWNhbEdyYWRpZW50LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvc2hhZGVycy9ncmFkaWVudHMvU2tTd2VlcEdyYWRpZW50LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9zaGFkZXJzL2dyYWRpZW50cy9Ta1N3ZWVwR3JhZGllbnQuaCIsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHNfaW1hZ2VmaWx0ZXJzLmd5cGkgYi90aGlyZF9wYXJ0eS9za2lhL2d5cC9lZmZlY3RzX2ltYWdlZmlsdGVycy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjgxMjgzLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2VmZmVjdHNfaW1hZ2VmaWx0ZXJzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUcmFuc2xhdGVkIGZyb206IGduL2VmZmVjdHNfaW1hZ2VmaWx0ZXJzLmduaQotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3NraWFfZWZmZWN0c19pbWFnZWZpbHRlcl9wdWJsaWMnIDogWwotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tBbHBoYVRocmVzaG9sZEZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrQXJpdGhtZXRpY0ltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tCbHVySW1hZ2VGaWx0ZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta0NvbG9yRmlsdGVySW1hZ2VGaWx0ZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta0Rpc3BsYWNlbWVudE1hcEVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrRHJvcFNoYWRvd0ltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tJbWFnZUZpbHRlcnMuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZWZmZWN0cy9Ta0ltYWdlU291cmNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tMaWdodGluZ0ltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tNYWduaWZpZXJJbWFnZUZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrTW9ycGhvbG9neUltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tPZmZzZXRJbWFnZUZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrUGFpbnRJbWFnZUZpbHRlci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9lZmZlY3RzL1NrVGlsZUltYWdlRmlsdGVyLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2VmZmVjdHMvU2tYZmVybW9kZUltYWdlRmlsdGVyLmgiLAotICAgIF0sCi0KLSAgICAnc2tpYV9lZmZlY3RzX2ltYWdlZmlsdGVyX3NvdXJjZXMnIDogWwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tBbHBoYVRocmVzaG9sZEZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tBcml0aG1ldGljSW1hZ2VGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrQ29sb3JGaWx0ZXJJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tDb21wb3NlSW1hZ2VGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrRGlzcGxhY2VtZW50TWFwRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta0Ryb3BTaGFkb3dJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tJbWFnZUZpbHRlcnMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrSW1hZ2VTb3VyY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrTGlnaHRpbmdJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tNYWduaWZpZXJJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tNYXRyaXhDb252b2x1dGlvbkltYWdlRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta01lcmdlSW1hZ2VGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrTW9ycGhvbG9neUltYWdlRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta09mZnNldEltYWdlRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta1BhaW50SW1hZ2VGaWx0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrUGljdHVyZUltYWdlRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta1RpbGVJbWFnZUZpbHRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tYZmVybW9kZUltYWdlRmlsdGVyLmNwcCIsCi0gICAgXSwKLQotICAgICdza2lhX2VmZmVjdHNfaW1hZ2VmaWx0ZXJfc291cmNlc19ub19hc2FuJyA6IFsKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrQmx1ckltYWdlRmlsdGVyLmNwcCIsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvZ3lwL2dwdS5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9neXAvZ3B1Lmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYjI5Y2MuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9neXAvZ3B1Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw4MjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAyMCBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVHJhbnNsYXRlZCBmcm9tOiBnbi9ncHUuZ25pCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2tpYV9ncHVfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvR3JCYWNrZW5kRHJhd2FibGVJbmZvLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9HckJhY2tlbmRTZW1hcGhvcmUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZ3B1L0dyQmFja2VuZFN1cmZhY2UuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZ3B1L0dyQ29uZmlnLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9HckNvbnRleHRPcHRpb25zLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9HckNvbnRleHQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZ3B1L0dyQ29udGV4dFRocmVhZFNhZmVQcm94eS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvR3JEcml2ZXJCdWdXb3JrYXJvdW5kcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvR3JHcHVSZXNvdXJjZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvR3JTdXJmYWNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9HclRleHR1cmUuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZ3B1L0dyVHlwZXMuaCIsCi0KLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvZ2wvR3JHTEFzc2VtYmxlSW50ZXJmYWNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9nbC9HckdMQ29uZmlnLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9nbC9HckdMRXh0ZW5zaW9ucy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvZ2wvR3JHTEZ1bmN0aW9ucy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvZ2wvR3JHTEludGVyZmFjZS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvZ2wvR3JHTFR5cGVzLmgiLAotCi0gICAgICAjIFByaXZhdGUgaW5jbHVkZXMKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL0dyQ29udGV4dF9CYXNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvR3JHTFR5cGVzUHJpdi5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL0dySW1hZ2VDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvR3JSZWNvcmRpbmdDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvR3JSZXNvdXJjZUtleS5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9wcml2YXRlL0dyU2luZ2xlT3duZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvcHJpdmF0ZS9HclR5cGVzUHJpdi5oIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQXBwbGllZENsaXAuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JBdWRpdFRyYWlsLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JBdWRpdFRyYWlsLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQXV0b0xvY2FsZVNldHRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckFsbG9jYXRvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckJhY2tlbmRTdXJmYWNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JCYWNrZW5kVGV4dHVyZUltYWdlR2VuZXJhdG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JCYWNrZW5kVGV4dHVyZUltYWdlR2VuZXJhdG9yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQmxlbmQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JBSGFyZHdhcmVCdWZmZXJJbWFnZUdlbmVyYXRvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQUhhcmR3YXJlQnVmZmVySW1hZ2VHZW5lcmF0b3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JBSGFyZHdhcmVCdWZmZXJVdGlscy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQUhhcmR3YXJlQnVmZmVyVXRpbHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JCYXNlQ29udGV4dFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JCaXRtYXBUZXh0dXJlTWFrZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckJpdG1hcFRleHR1cmVNYWtlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckJsdXJVdGlscy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQmx1clV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQnVmZmVyQWxsb2NQb29sLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JCdWZmZXJBbGxvY1Bvb2wuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDYXBzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ2Fwcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ2xpZW50TWFwcGVkQnVmZmVyTWFuYWdlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ2xpZW50TWFwcGVkQnVmZmVyTWFuYWdlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckNsaXAuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDbGlwU3RhY2tDbGlwLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ2xpcFN0YWNrQ2xpcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29sb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDb2xvckluZm8uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckNvbG9ySW5mby5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckNvbG9yU3BhY2VYZm9ybS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29sb3JTcGFjZVhmb3JtLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29udGV4dF9CYXNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDb250ZXh0UHJpdi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29udGV4dFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDb250ZXh0VGhyZWFkU2FmZVByb3h5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JDb250ZXh0VGhyZWFkU2FmZVByb3h5UHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckNvb3JkVHJhbnNmb3JtLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ29weVJlbmRlclRhc2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckNvcHlSZW5kZXJUYXNrLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyQ3B1QnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRGF0YVV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRGF0YVV0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JERExDb250ZXh0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JEZWZhdWx0R2VvUHJvY0ZhY3RvcnkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRlZmF1bHRHZW9Qcm9jRmFjdG9yeS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRlZmVycmVkUHJveHlVcGxvYWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRlZmVycmVkVXBsb2FkLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRGlzdGFuY2VGaWVsZEdlbkZyb21WZWN0b3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRpc3RhbmNlRmllbGRHZW5Gcm9tVmVjdG9yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRHJhd2luZ01hbmFnZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRyYXdpbmdNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRHJhd09wQXRsYXMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRyYXdPcEF0bGFzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRHJhd09wVGVzdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyRHJhd09wVGVzdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckRyaXZlckJ1Z1dvcmthcm91bmRzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JGaXhlZENsaXAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckZpeGVkQ2xpcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckZyYWdtZW50UHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JGcmFnbWVudFByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Hckdlb21ldHJ5UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyR2x5cGguaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JHcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckdwdS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckdwdUJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyR3B1QnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyR3B1UmVzb3VyY2VDYWNoZUFjY2Vzcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckdwdVJlc291cmNlUHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckdwdVJlc291cmNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JJbWFnZUNvbnRleHQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HckltYWdlQ29udGV4dFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JJbWFnZUluZm8uaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JJbWFnZVRleHR1cmVNYWtlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dySW1hZ2VUZXh0dXJlTWFrZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JMZWdhY3lEaXJlY3RDb250ZXh0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JNZW1vcnlQb29sLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JNZW1vcnlQb29sLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyTWVzaC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Hck5hdGl2ZVJlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JOb25BdG9taWNSZWYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JPbkZsdXNoUmVzb3VyY2VQcm92aWRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyT25GbHVzaFJlc291cmNlUHJvdmlkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JPcEZsdXNoU3RhdGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Hck9wRmx1c2hTdGF0ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Hck9wc1JlbmRlclBhc3MuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Hck9wc1JlbmRlclBhc3MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JPcHNUYXNrLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JPcHNUYXNrLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGFpbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclBhaW50LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGF0aFJlbmRlcmVyQ2hhaW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclBhdGhSZW5kZXJlckNoYWluLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGF0aFJlbmRlcmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQaXBlbGluZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGlwZWxpbmUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcmltaXRpdmVQcm9jZXNzb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclByaW1pdGl2ZVByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclByb2Nlc3NvclNldC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvY2Vzc29yU2V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvZ3JhbURlc2MuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclByb2dyYW1EZXNjLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvZ3JhbUluZm8uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclByb2dyYW1JbmZvLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcm9jZXNzb3JBbmFseXNpcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvY2Vzc29yQW5hbHlzaXMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcm9jZXNzb3JVbml0VGVzdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUHJvY2Vzc29yVW5pdFRlc3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcm94eVByb3ZpZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQcm94eVByb3ZpZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVjb3JkaW5nQ29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVjb3JkaW5nQ29udGV4dFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZWN0YW5pemVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVjdGFuaXplcl9wb3cyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZWN0YW5pemVyX3BvdzIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZWN0YW5pemVyX3NreWxpbmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlY3Rhbml6ZXJfc2t5bGluZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlbmRlclRhcmdldC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVuZGVyVGFyZ2V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVuZGVyVGFyZ2V0UHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlbmRlclRhcmdldFByb3h5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZW5kZXJUYXJnZXRQcm94eS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlbmRlclRhcmdldFByb3h5UHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlbmRlclRhc2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclJlbmRlclRhc2suaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZWR1Y2VkQ2xpcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVkdWNlZENsaXAuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZW5kZXJUYXJnZXRDb250ZXh0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZW5kZXJUYXJnZXRDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVuZGVyVGFyZ2V0Q29udGV4dFByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZXNvdXJjZUFsbG9jYXRvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVzb3VyY2VBbGxvY2F0b3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZXNvdXJjZUNhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZXNvdXJjZUNhY2hlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVzb3VyY2VIYW5kbGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZXNvdXJjZVByb3ZpZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JSZXNvdXJjZVByb3ZpZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUmVzb3VyY2VQcm92aWRlclByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTYW1wbGVQYXR0ZXJuRGljdGlvbmFyeS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclNhbXBsZVBhdHRlcm5EaWN0aW9uYXJ5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTYW1wbGVyU3RhdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTY2lzc29yU3RhdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTZW1hcGhvcmUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTaGFkZXJDYXBzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU2hhZGVyQ2Fwcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU2hhZGVyVXRpbHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclNoYWRlclV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU2hhZGVyVmFyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTaGFkZXJWYXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTb2Z0d2FyZVBhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU29mdHdhcmVQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTdGVuY2lsQXR0YWNobWVudC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3RlbmNpbEF0dGFjaG1lbnQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTdGVuY2lsQ2xpcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclN0ZW5jaWxTZXR0aW5ncy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3RlbmNpbFNldHRpbmdzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3R5bGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclN0eWxlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3VyZmFjZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3VyZmFjZUNvbnRleHQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclN1cmZhY2VDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3VyZmFjZUNvbnRleHRQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3VyZmFjZVByb3h5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTdXJmYWNlUHJveHkuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTdXJmYWNlUHJveHlQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU3VyZmFjZVByaXYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTd2l6emxlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTd2l6emxlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyU1dNYXNrSGVscGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JTV01hc2tIZWxwZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUcmFjaW5nLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVHJhbnNmZXJGcm9tUmVuZGVyVGFzay5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVHJhbnNmZXJGcm9tUmVuZGVyVGFzay5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRlc3NlbGxhdG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXNzZWxsYXRvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRlc3RVdGlscy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGVzdFV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZUFkanVzdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlQWRqdXN0ZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlQ29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZUNvbnRleHQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlTWFrZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRleHR1cmVNYWtlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRleHR1cmVQcml2LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZVByb2R1Y2VyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlUHJvZHVjZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlUHJveHkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRleHR1cmVQcm94eS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRleHR1cmVQcm94eUNhY2hlQWNjZXNzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZVByb3h5UHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclRleHR1cmVSZW5kZXJUYXJnZXRQcm94eS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZVJlbmRlclRhcmdldFByb3h5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZVJlc29sdmVNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyVGV4dHVyZVJlc29sdmVSZW5kZXJUYXNrLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUZXh0dXJlUmVzb2x2ZVJlbmRlclRhc2suaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JUUmVjb3JkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JVc2VyU3RlbmNpbFNldHRpbmdzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyV2FpdFJlbmRlclRhc2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HcldhaXRSZW5kZXJUYXNrLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyV2luZG93UmVjdGFuZ2xlcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HcldpbmRvd1JlY3RzU3RhdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JYZmVyUHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JYZmVyUHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyWVVWUHJvdmlkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HcllVVlByb3ZpZGVyLmgiLAotCi0gICAgICAjIE9wcwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckFBQ29udmV4VGVzc2VsbGF0b3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JBQUNvbnZleFRlc3NlbGxhdG9yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckFBQ29udmV4UGF0aFJlbmRlcmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyQUFDb252ZXhQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyQUFIYWlyTGluZVBhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckFBSGFpckxpbmVQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyQUFMaW5lYXJpemluZ0NvbnZleFBhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckFBTGluZWFyaXppbmdDb252ZXhQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyQXRsYXNUZXh0T3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JBdGxhc1RleHRPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JDbGVhck9wLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyQ2xlYXJPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JDbGVhclN0ZW5jaWxDbGlwT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JDbGVhclN0ZW5jaWxDbGlwT3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRGFzaExpbmVQYXRoUmVuZGVyZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEYXNoTGluZVBhdGhSZW5kZXJlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEYXNoT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEYXNoT3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRGVmYXVsdFBhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckRlZmF1bHRQYXRoUmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRGVidWdNYXJrZXJPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckRlYnVnTWFya2VyT3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRHJhd2FibGVPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckRyYXdhYmxlT3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRHJhd0F0bGFzT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEcmF3QXRsYXNPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEcmF3T3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRHJhd1ZlcnRpY2VzT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEcmF3VmVydGljZXNPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JGaWxsUmVjdE9wLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyRmlsbFJlY3RPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JGaWxsUlJlY3RPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckZpbGxSUmVjdE9wLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9Hck1lc2hEcmF3T3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JNZXNoRHJhd09wLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckxhdHRpY2VPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckxhdHRpY2VPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9Hck9wLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9Hck92YWxPcEZhY3RvcnkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JPdmFsT3BGYWN0b3J5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclF1YWRQZXJFZGdlQUEuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JRdWFkUGVyRWRnZUFBLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclJlZ2lvbk9wLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyUmVnaW9uT3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyU2hhZG93UlJlY3RPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclNoYWRvd1JSZWN0T3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyU2ltcGxlTWVzaERyYXdPcEhlbHBlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclNpbXBsZU1lc2hEcmF3T3BIZWxwZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyU21hbGxQYXRoUmVuZGVyZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JTbWFsbFBhdGhSZW5kZXJlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JTdHJva2VSZWN0T3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JTdHJva2VSZWN0T3AuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyVGVzc2VsbGF0aW5nUGF0aFJlbmRlcmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyVGVzc2VsbGF0aW5nUGF0aFJlbmRlcmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclRleHR1cmVPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclRleHR1cmVPcC5oIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JDb3ZlcmFnZVNldE9wWFAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyQ292ZXJhZ2VTZXRPcFhQLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JDdXN0b21YZmVybW9kZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JDdXN0b21YZmVybW9kZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyQmV6aWVyRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HckJlemllckVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyQ29udmV4UG9seUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JDb252ZXhQb2x5RWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JCaWN1YmljRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HckJpY3ViaWNFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HckJpdG1hcFRleHRHZW9Qcm9jLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HckJpdG1hcFRleHRHZW9Qcm9jLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JEaXNhYmxlQ29sb3JYUC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JEaXNhYmxlQ29sb3JYUC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyRGlzdGFuY2VGaWVsZEdlb1Byb2MuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyRGlzdGFuY2VGaWVsZEdlb1Byb2MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HckdhdXNzaWFuQ29udm9sdXRpb25GcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JHYXVzc2lhbkNvbnZvbHV0aW9uRnJhZ21lbnRQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9Hck1hdHJpeENvbnZvbHV0aW9uRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9Hck1hdHJpeENvbnZvbHV0aW9uRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JPdmFsRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9Hck92YWxFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HclBvcnRlckR1ZmZYZmVyUHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HclBvcnRlckR1ZmZYZmVyUHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JSUmVjdEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JSUmVjdEVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyU2hhZG93R2VvUHJvYy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JTaGFkb3dHZW9Qcm9jLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JTa1NMRlAuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyU2tTTEZQLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JTUkdCRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HclNSR0JFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9HclRleHR1cmVEb21haW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyVGV4dHVyZURvbWFpbi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL0dyWGZlcm1vZGVGcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JYZmVybW9kZUZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JZVVZ0b1JHQkVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvR3JZVVZ0b1JHQkVmZmVjdC5oIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dlb21ldHJ5L0dyUGF0aFV0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2VvbWV0cnkvR3JQYXRoVXRpbHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2VvbWV0cnkvR3JRdWFkLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2VvbWV0cnkvR3JRdWFkLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dlb21ldHJ5L0dyUXVhZEJ1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nZW9tZXRyeS9HclF1YWRVdGlscy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dlb21ldHJ5L0dyUXVhZFV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dlb21ldHJ5L0dyUmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nZW9tZXRyeS9HclNoYXBlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2VvbWV0cnkvR3JTaGFwZS5oIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQUFSZWN0RWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JBQVJlY3RFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JBbHBoYVRocmVzaG9sZEZyYWdtZW50UHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JBbHBoYVRocmVzaG9sZEZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQmx1cnJlZEVkZ2VGcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQmx1cnJlZEVkZ2VGcmFnbWVudFByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HckNpcmNsZUJsdXJGcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ2lyY2xlQmx1ckZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ2lyY2xlRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JDaXJjbGVFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JDb2xvck1hdHJpeEZyYWdtZW50UHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JDb2xvck1hdHJpeEZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ29tcG9zZUxlcnBFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HckNvbXBvc2VMZXJwRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ29tcG9zZUxlcnBSZWRFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HckNvbXBvc2VMZXJwUmVkRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ29uZmlnQ29udmVyc2lvbkVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyQ29uZmlnQ29udmVyc2lvbkVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HckNvbnN0Q29sb3JQcm9jZXNzb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HckNvbnN0Q29sb3JQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JFbGxpcHNlRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JFbGxpcHNlRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyTHVtYUNvbG9yRmlsdGVyRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JMdW1hQ29sb3JGaWx0ZXJFZmZlY3QuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JNYWduaWZpZXJFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9Hck1hZ25pZmllckVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9Hck1peGVyRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JNaXhlckVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9Hck92ZXJyaWRlSW5wdXRGcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyT3ZlcnJpZGVJbnB1dEZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyUHJlbXVsSW5wdXRGcmFnbWVudFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyUHJlbXVsSW5wdXRGcmFnbWVudFByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HclJlY3RCbHVyRWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZWZmZWN0cy9nZW5lcmF0ZWQvR3JSZWN0Qmx1ckVmZmVjdC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HclJSZWN0Qmx1ckVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyUlJlY3RCbHVyRWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyU2F0dXJhdGVQcm9jZXNzb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9lZmZlY3RzL2dlbmVyYXRlZC9HclNhdHVyYXRlUHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyU2ltcGxlVGV4dHVyZUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2VmZmVjdHMvZ2VuZXJhdGVkL0dyU2ltcGxlVGV4dHVyZUVmZmVjdC5oIiwKLQotICAgICAgIyBncmFkaWVudHMKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvR3JHcmFkaWVudEJpdG1hcENhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL0dyR3JhZGllbnRCaXRtYXBDYWNoZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvR3JHcmFkaWVudFNoYWRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9HckdyYWRpZW50U2hhZGVyLmgiLAotCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HckR1YWxJbnRlcnZhbEdyYWRpZW50Q29sb3JpemVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HckR1YWxJbnRlcnZhbEdyYWRpZW50Q29sb3JpemVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9nZW5lcmF0ZWQvR3JTaW5nbGVJbnRlcnZhbEdyYWRpZW50Q29sb3JpemVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclNpbmdsZUludGVydmFsR3JhZGllbnRDb2xvcml6ZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclRleHR1cmVHcmFkaWVudENvbG9yaXplci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9nZW5lcmF0ZWQvR3JUZXh0dXJlR3JhZGllbnRDb2xvcml6ZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclVucm9sbGVkQmluYXJ5R3JhZGllbnRDb2xvcml6ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvZ2VuZXJhdGVkL0dyVW5yb2xsZWRCaW5hcnlHcmFkaWVudENvbG9yaXplci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvZ2VuZXJhdGVkL0dyTGluZWFyR3JhZGllbnRMYXlvdXQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvZ2VuZXJhdGVkL0dyTGluZWFyR3JhZGllbnRMYXlvdXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclJhZGlhbEdyYWRpZW50TGF5b3V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclJhZGlhbEdyYWRpZW50TGF5b3V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9nZW5lcmF0ZWQvR3JTd2VlcEdyYWRpZW50TGF5b3V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclN3ZWVwR3JhZGllbnRMYXlvdXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclR3b1BvaW50Q29uaWNhbEdyYWRpZW50TGF5b3V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclR3b1BvaW50Q29uaWNhbEdyYWRpZW50TGF5b3V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9nZW5lcmF0ZWQvR3JDbGFtcGVkR3JhZGllbnRFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9ncmFkaWVudHMvZ2VuZXJhdGVkL0dyQ2xhbXBlZEdyYWRpZW50RWZmZWN0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dyYWRpZW50cy9nZW5lcmF0ZWQvR3JUaWxlZEdyYWRpZW50RWZmZWN0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ3JhZGllbnRzL2dlbmVyYXRlZC9HclRpbGVkR3JhZGllbnRFZmZlY3QuaCIsCi0KLSAgICAgICMgdGV4dAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JBdGxhc01hbmFnZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS90ZXh0L0dyQXRsYXNNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JEaXN0YW5jZUZpZWxkQWRqdXN0VGFibGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS90ZXh0L0dyRGlzdGFuY2VGaWVsZEFkanVzdFRhYmxlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JTREZNYXNrRmlsdGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdGV4dC9HclNERk1hc2tGaWx0ZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdGV4dC9HclN0cmlrZUNhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdGV4dC9HclN0cmlrZUNhY2hlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0QmxvYi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0QmxvYi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS90ZXh0L0dyVGV4dEJsb2JDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0QmxvYkNhY2hlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0Q29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0Q29udGV4dC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS90ZXh0L0dyVGV4dEJsb2JWZXJ0ZXhSZWdlbmVyYXRvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3RleHQvR3JUZXh0VGFyZ2V0LmgiLAotCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTEFzc2VtYmxlR0xFU0ludGVyZmFjZUF1dG9nZW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMQXNzZW1ibGVHTEludGVyZmFjZUF1dG9nZW4uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMQXNzZW1ibGVIZWxwZXJzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTEFzc2VtYmxlSW50ZXJmYWNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTEFzc2VtYmxlV2ViR0xJbnRlcmZhY2VBdXRvZ2VuLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTEJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xCdWZmZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTENhcHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMQ2Fwcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMQ29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xNYWtlTmF0aXZlSW50ZXJmYWNlX25vbmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMRGVmaW5lcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMR0xTTC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xHTFNMLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xHcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMR3B1LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xHcHVQcm9ncmFtQ2FjaGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMRXh0ZW5zaW9ucy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xJbnRlcmZhY2VBdXRvZ2VuLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTE9wc1JlbmRlclBhc3MuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMT3BzUmVuZGVyUGFzcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMUHJvZ3JhbS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xQcm9ncmFtLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xQcm9ncmFtRGF0YU1hbmFnZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMUHJvZ3JhbURhdGFNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xSZW5kZXJUYXJnZXQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMUmVuZGVyVGFyZ2V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xTZW1hcGhvcmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMU2VtYXBob3JlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xTdGVuY2lsQXR0YWNobWVudC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xTdGVuY2lsQXR0YWNobWVudC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMVGV4dHVyZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xUZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xUZXh0dXJlUmVuZGVyVGFyZ2V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFRleHR1cmVSZW5kZXJUYXJnZXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFR5cGVzUHJpdi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xVdGlsLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFV0aWwuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFVuaWZvcm1IYW5kbGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFVuaWZvcm1IYW5kbGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xWYXJ5aW5nSGFuZGxlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xWYXJ5aW5nSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMVmVydGV4QXJyYXkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMVmVydGV4QXJyYXkuaCIsCi0KLSAgICAgICMgRmlsZXMgZm9yIGJ1aWxkaW5nIEdMU0wgc2hhZGVycwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL2J1aWxkZXJzL0dyR0xQcm9ncmFtQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL2J1aWxkZXJzL0dyR0xQcm9ncmFtQnVpbGRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9idWlsZGVycy9HckdMU2hhZGVyU3RyaW5nQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL2J1aWxkZXJzL0dyR0xTaGFkZXJTdHJpbmdCdWlsZGVyLmgiLAotCi0gICAgICAjIEdMU0wKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMQmxlbmQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTEJsZW5kLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMQ29sb3JTcGFjZVhmb3JtSGVscGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMRnJhZ21lbnRQcm9jZXNzb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTEZyYWdtZW50UHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMRnJhZ21lbnRTaGFkZXJCdWlsZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xGcmFnbWVudFNoYWRlckJ1aWxkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xHZW9tZXRyeVByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMR2VvbWV0cnlQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xQcmltaXRpdmVQcm9jZXNzb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFByaW1pdGl2ZVByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFByb2dyYW1CdWlsZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xQcm9ncmFtQnVpbGRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFByb2dyYW1EYXRhTWFuYWdlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMUHJvZ3JhbURhdGFNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMU2hhZGVyQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMU2hhZGVyQnVpbGRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFVuaWZvcm1IYW5kbGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMVXRpbC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMVXRpbC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFZhcnlpbmcuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbHNsL0dyR0xTTFZhcnlpbmcuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xWZXJ0ZXhHZW9CdWlsZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2xzbC9HckdMU0xWZXJ0ZXhHZW9CdWlsZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMWGZlclByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsc2wvR3JHTFNMWGZlclByb2Nlc3Nvci5oIiwKLQotICAgICAgIyBNb2NrCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tCdWZmZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tDYXBzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tDYXBzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L21vY2svR3JNb2NrR3B1LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tHcHUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tPcHNSZW5kZXJQYXNzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L21vY2svR3JNb2NrU3RlbmNpbEF0dGFjaG1lbnQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbW9jay9Hck1vY2tUZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L21vY2svR3JNb2NrVHlwZXMuY3BwIiwKLQotICAgICAgIyBTayBmaWxlcwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L1NrR3B1RGV2aWNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvU2tHcHVEZXZpY2UuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvU2tHcHVEZXZpY2VfZHJhd1RleHR1cmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9Ta0dyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L1NrR3IuY3BwIiwKLQotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9HcHUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9pbWFnZS9Ta0ltYWdlX0dwdS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9HcHVCYXNlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvaW1hZ2UvU2tJbWFnZV9HcHVCYXNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9pbWFnZS9Ta0ltYWdlX0dwdVlVVkEuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9pbWFnZS9Ta0ltYWdlX0dwdVlVVkEuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2ltYWdlL1NrU3VyZmFjZV9HcHUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9pbWFnZS9Ta1N1cmZhY2VfR3B1LmNwcCIsIAotICAgIF0sCi0KLSAgICAnc2tpYV9jY3ByX3NvdXJjZXMnOiBbCi0gICAgICAjIGNvdmVyYWdlIGNvdW50aW5nIHBhdGggcmVuZGVyZXIKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NBdGxhcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ0F0bGFzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ0NsaXBQYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDQ2xpcFBhdGguaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDQ2xpcFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ0NsaXBQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDQ29uaWNTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NDb25pY1NoYWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NDb3ZlcmFnZVByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ0NvdmVyYWdlUHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ0N1YmljU2hhZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDQ3ViaWNTaGFkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDRHJhd1BhdGhzT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NEcmF3UGF0aHNPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NGaWxsZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NGaWxsZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDRmlsbEdlb21ldHJ5LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDRmlsbEdlb21ldHJ5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ1BhdGhDYWNoZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ1BhdGhDYWNoZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NQYXRoUHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDUGF0aFByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NQZXJGbHVzaFJlc291cmNlcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ1BlckZsdXNoUmVzb3VyY2VzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDQ1Blck9wc1Rhc2tQYXRocy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NRdWFkcmF0aWNTaGFkZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NRdWFkcmF0aWNTaGFkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDU3Ryb2tlR2VvbWV0cnkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NTdHJva2VHZW9tZXRyeS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ0NTdHJva2VyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckNDU3Ryb2tlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyQ292ZXJhZ2VDb3VudGluZ1BhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JDb3ZlcmFnZUNvdW50aW5nUGF0aFJlbmRlcmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JHU0NvdmVyYWdlUHJvY2Vzc29yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9HckdTQ292ZXJhZ2VQcm9jZXNzb3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvY2Nwci9Hck9jdG9Cb3VuZHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyT2N0b0JvdW5kcy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyU2FtcGxlTWFza1Byb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JTYW1wbGVNYXNrUHJvY2Vzc29yLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JTdGVuY2lsQXRsYXNPcC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JTdGVuY2lsQXRsYXNPcC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9jY3ByL0dyVlNDb3ZlcmFnZVByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2NjcHIvR3JWU0NvdmVyYWdlUHJvY2Vzc29yLmgiLAotICAgIF0sCi0KLSAgICAnc2tpYV9udnByX3NvdXJjZXMnOiBbCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvR3JQYXRoLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGF0aFByb2Nlc3Nvci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L0dyUGF0aFByb2Nlc3Nvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclBhdGhSZW5kZXJpbmcuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9HclBhdGhSZW5kZXJpbmcuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvR3JHTFBhdGguY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMUGF0aC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9HckdMUGF0aFJlbmRlcmluZy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL0dyR0xQYXRoUmVuZGVyaW5nLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HckRyYXdQYXRoT3AuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JEcmF3UGF0aE9wLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclN0ZW5jaWxBbmRDb3ZlclBhdGhSZW5kZXJlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L29wcy9HclN0ZW5jaWxBbmRDb3ZlclBhdGhSZW5kZXJlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9vcHMvR3JTdGVuY2lsUGF0aE9wLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvb3BzL0dyU3RlbmNpbFBhdGhPcC5oIiwKLSAgICBdLAotCi0gICAgJ3NraWFfbnVsbF9ncHVfc291cmNlcyc6IFtdLAotCi0gICAgJ3NraWFfdmtfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvdmsvR3JWa0JhY2tlbmRDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS92ay9HclZrRXh0ZW5zaW9ucy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvdmsvR3JWa01lbW9yeUFsbG9jYXRvci5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9ncHUvdmsvR3JWa1R5cGVzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS92ay9HclZrVnVsa2FuLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3ByaXZhdGUvR3JWa1R5cGVzUHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQU1ETWVtb3J5QWxsb2NhdG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0FNRE1lbW9yeUFsbG9jYXRvci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0J1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQnVmZmVyVmlldy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtCdWZmZXJWaWV3LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtDYXBzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0NhcHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0NvbW1hbmRCdWZmZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQ29tbWFuZEJ1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQ29tbWFuZFBvb2wuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrQ29tbWFuZFBvb2wuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0Rlc2NyaXB0b3JQb29sLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0Rlc2NyaXB0b3JQb29sLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtEZXNjcmlwdG9yU2V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0Rlc2NyaXB0b3JTZXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0Rlc2NyaXB0b3JTZXRNYW5hZ2VyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0Rlc2NyaXB0b3JTZXRNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtFeHRlbnNpb25zLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0ZyYW1lYnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0ZyYW1lYnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtHcHUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrR3B1LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtJbWFnZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtJbWFnZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrSW1hZ2VMYXlvdXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0ltYWdlVmlldy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtJbWFnZVZpZXcuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0luZGV4QnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa0luZGV4QnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtJbnRlcmZhY2UuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrSW50ZXJmYWNlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtNZW1vcnkuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrTWVtb3J5LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtPcHNSZW5kZXJQYXNzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa09wc1JlbmRlclBhc3MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtQaXBlbGluZVN0YXRlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lU3RhdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lU3RhdGVCdWlsZGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lU3RhdGVCdWlsZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtQaXBlbGluZVN0YXRlQ2FjaGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrUGlwZWxpbmVTdGF0ZURhdGFNYW5hZ2VyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1BpcGVsaW5lU3RhdGVEYXRhTWFuYWdlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrUmVuZGVyUGFzcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtSZW5kZXJQYXNzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtSZW5kZXJUYXJnZXQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrUmVuZGVyVGFyZ2V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtSZXNvdXJjZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrUmVzb3VyY2VQcm92aWRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtSZXNvdXJjZVByb3ZpZGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtTYW1wbGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1NhbXBsZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1NhbXBsZXJZY2JjckNvbnZlcnNpb24uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrU2FtcGxlclljYmNyQ29udmVyc2lvbi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrU2Vjb25kYXJ5Q0JEcmF3Q29udGV4dC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtTZWNvbmRhcnlDQkRyYXdDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtTZW1hcGhvcmUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrU2VtYXBob3JlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtTdGVuY2lsQXR0YWNobWVudC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtTdGVuY2lsQXR0YWNobWVudC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrVGV4dHVyZS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtUZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtUZXh0dXJlUmVuZGVyVGFyZ2V0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1RleHR1cmVSZW5kZXJUYXJnZXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1RyYW5zZmVyQnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1RyYW5zZmVyQnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtUeXBlc1ByaXYuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrVW5pZm9ybUJ1ZmZlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtVbmlmb3JtQnVmZmVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtVbmlmb3JtSGFuZGxlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtVbmlmb3JtSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrVXRpbC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtVdGlsLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtWYXJ5aW5nSGFuZGxlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L3ZrL0dyVmtWYXJ5aW5nSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS92ay9HclZrVmVydGV4QnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvdmsvR3JWa1ZlcnRleEJ1ZmZlci5oIiwKLSAgICBdLAotCi0gICAgJ3NraWFfZGF3bl9zb3VyY2VzJzogWwotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2dwdS9kYXduL0dyRGF3blR5cGVzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduQnVmZmVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25CdWZmZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25DYXBzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25DYXBzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduR3B1LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25HcHUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25PcHNSZW5kZXJQYXNzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25PcHNSZW5kZXJQYXNzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduUHJvZ3JhbURhdGFNYW5hZ2VyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25Qcm9ncmFtRGF0YU1hbmFnZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25Qcm9ncmFtQnVpbGRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduUHJvZ3JhbUJ1aWxkZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25SZW5kZXJUYXJnZXQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blJlbmRlclRhcmdldC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blJpbmdCdWZmZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blJpbmdCdWZmZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25TdGVuY2lsQXR0YWNobWVudC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduU3RlbmNpbEF0dGFjaG1lbnQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25TdGFnaW5nTWFuYWdlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduU3RhZ2luZ01hbmFnZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25UZXh0dXJlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25UZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduVGV4dHVyZVJlbmRlclRhcmdldC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduVGV4dHVyZVJlbmRlclRhcmdldC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blVuaWZvcm1IYW5kbGVyLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25Vbmlmb3JtSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blV0aWwuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9kYXduL0dyRGF3blV0aWwuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZGF3bi9HckRhd25WYXJ5aW5nSGFuZGxlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2Rhd24vR3JEYXduVmFyeWluZ0hhbmRsZXIuaCIsCi0gICAgXSwKLQotICAgICdza2lhX21ldGFsX3NvdXJjZXMnOiBbCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvZ3B1L210bC9Hck10bFR5cGVzLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bEJ1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxCdWZmZXIubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bENhcHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsQ2Fwcy5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsQ29tbWFuZEJ1ZmZlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxDb21tYW5kQnVmZmVyLm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxDcHBVdGlsLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bERlcHRoU3RlbmNpbC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxEZXB0aFN0ZW5jaWwubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bEdwdS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxHcHUubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bE9wc1JlbmRlclBhc3MuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsT3BzUmVuZGVyUGFzcy5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsUGlwZWxpbmVTdGF0ZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxQaXBlbGluZVN0YXRlLm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxQaXBlbGluZVN0YXRlQnVpbGRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxQaXBlbGluZVN0YXRlQnVpbGRlci5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsUGlwZWxpbmVTdGF0ZURhdGFNYW5hZ2VyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFBpcGVsaW5lU3RhdGVEYXRhTWFuYWdlci5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsUmVuZGVyVGFyZ2V0LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFJlbmRlclRhcmdldC5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsUmVzb3VyY2VQcm92aWRlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxSZXNvdXJjZVByb3ZpZGVyLm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxTYW1wbGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFNhbXBsZXIubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFNlbWFwaG9yZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxTZW1hcGhvcmUubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFN0ZW5jaWxBdHRhY2htZW50LmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFN0ZW5jaWxBdHRhY2htZW50Lm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxUZXh0dXJlLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFRleHR1cmUubW0iLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L210bC9Hck10bFRleHR1cmVSZW5kZXJUYXJnZXQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsVGV4dHVyZVJlbmRlclRhcmdldC5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsVHJhbXBvbGluZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxUcmFtcG9saW5lLm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxVbmlmb3JtSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxVbmlmb3JtSGFuZGxlci5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvbXRsL0dyTXRsVXRpbC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxVdGlsLm1tIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxWYXJ5aW5nSGFuZGxlci5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9tdGwvR3JNdGxWYXJ5aW5nSGFuZGxlci5tbSIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9pbWFnZS9Ta1N1cmZhY2VfR3B1TXRsLm1tIiwKLSAgICBdLAotCi0gICAgJ3NraWFfbmF0aXZlX2dwdV9zb3VyY2VzJzogWwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL21hYy9HckdMTWFrZU5hdGl2ZUludGVyZmFjZV9tYWMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC93aW4vR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2Vfd2luLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvZ2x4L0dyR0xNYWtlTmF0aXZlSW50ZXJmYWNlX2dseC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvZ3B1L2dsL2VnbC9HckdMTWFrZU5hdGl2ZUludGVyZmFjZV9lZ2wuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2dwdS9nbC9pT1MvR3JHTE1ha2VOYXRpdmVJbnRlcmZhY2VfaU9TLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9ncHUvZ2wvYW5kcm9pZC9HckdMTWFrZU5hdGl2ZUludGVyZmFjZV9hbmRyb2lkLmNwcCIsCi0gICAgXSwKLQotICAgICdza2lhX2F0bGFzX3RleHRfc291cmNlcyc6IFsKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS9hdGxhc3RleHQvU2tBdGxhc1RleHRDb250ZXh0LmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL2F0bGFzdGV4dC9Ta0F0bGFzVGV4dEZvbnQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvYXRsYXN0ZXh0L1NrQXRsYXNUZXh0UmVuZGVyZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvYXRsYXN0ZXh0L1NrQXRsYXNUZXh0VGFyZ2V0LmgiLAotCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9hdGxhc3RleHQvU2tBdGxhc1RleHRDb250ZXh0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS9hdGxhc3RleHQvU2tBdGxhc1RleHRUYXJnZXQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL2F0bGFzdGV4dC9Ta0ludGVybmFsQXRsYXNUZXh0Q29udGV4dC5jcHAiLAotICAgIF0sCi0gIH0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhL2d5cC91dGlscy5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9neXAvdXRpbHMuZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA4ODIwNy4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL2d5cC91dGlscy5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRyYW5zbGF0ZWQgZnJvbTogZ24vdXRpbHMuZ25pCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnc2tpYV91dGlsc19wdWJsaWMnOiBbCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tBbmltQ29kZWNQbGF5ZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tCYXNlNjQuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tDYW1lcmEuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tDYW52YXNTdGF0ZVV0aWxzLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrRXZlbnRUcmFjZXIuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tGcm9udEJ1ZmZlcmVkU3RyZWFtLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrSW50ZXJwb2xhdG9yLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrTldheUNhbnZhcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS91dGlscy9Ta05vRHJhd0NhbnZhcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS91dGlscy9Ta051bGxDYW52YXMuaCIsCi0gICAgICAiPChza2lhX2luY2x1ZGVfcGF0aCkvdXRpbHMvU2tQYWludEZpbHRlckNhbnZhcy5oIiwKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS91dGlscy9Ta1BhcnNlLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrUGFyc2VQYXRoLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrUmFuZG9tLmgiLAotICAgICAgIjwoc2tpYV9pbmNsdWRlX3BhdGgpL3V0aWxzL1NrU2hhZG93VXRpbHMuaCIsCi0KLSAgICAgICNtYWMKLSAgICAgICI8KHNraWFfaW5jbHVkZV9wYXRoKS91dGlscy9tYWMvU2tDR1V0aWxzLmgiLAotICAgIF0sCi0KLSAgICAnc2tpYV91dGlsc19zb3VyY2VzJzogWwotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2szRC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tBbmltQ29kZWNQbGF5ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrQmFzZTY0LmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0JpdFNldC5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrQ2FsbGFibGVUcmFpdHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0NhbWVyYS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tDYW52YXNTdGFjay5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrQ2FudmFzU3RhY2suY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrQ2FudmFzU3RhdGVVdGlscy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tDaGFyVG9HbHlwaENhY2hlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0NoYXJUb0dseXBoQ2FjaGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0Rhc2hQYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0Rhc2hQYXRoUHJpdi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrRXZlbnRUcmFjZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrRmxvYXRUb0RlY2ltYWwuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrRmxvYXRUb0RlY2ltYWwuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0Zsb2F0VXRpbHMuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0Zyb250QnVmZmVyZWRTdHJlYW0uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrSW50ZXJwb2xhdG9yLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta0pTT04uY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrSlNPTi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrSlNPTldyaXRlci5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tKU09OV3JpdGVyLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tNYXRyaXgyMi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tNYXRyaXgyMi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrTXVsdGlQaWN0dXJlRG9jdW1lbnQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrTldheUNhbnZhcy5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tOdWxsQ2FudmFzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta09TUGF0aC5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tPU1BhdGguaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1BhaW50RmlsdGVyQ2FudmFzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1BhcnNlLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1BhcnNlQ29sb3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrUGFyc2VQYXRoLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1BhdGNoVXRpbHMuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrUGF0Y2hVdGlscy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrUG9seVV0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1BvbHlVdGlscy5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrU2hhZG93VGVzc2VsbGF0b3IuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrU2hhZG93VGVzc2VsbGF0b3IuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1NoYWRvd1V0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1NoYXBlckpTT05Xcml0ZXIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1NoYXBlckpTT05Xcml0ZXIuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrVGV4dFV0aWxzLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1RocmVhZFV0aWxzX3B0aHJlYWQuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL1NrVGhyZWFkVXRpbHNfd2luLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1VURi5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvU2tVVEYuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9Ta1doaXRlbGlzdFR5cGVmYWNlcy5jcHAiLAotCi0gICAgICAjbWFjCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9tYWMvU2tDcmVhdGVDR0ltYWdlUmVmLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy9tYWMvU2tVbmlxdWVDRlJlZi5oIiwKLQotICAgICAgI3dpbmRvd3MKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL3dpbi9Ta0F1dG9Db0luaXRpYWxpemUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tBdXRvQ29Jbml0aWFsaXplLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tEV3JpdGUuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tEV3JpdGUuY3BwIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL3dpbi9Ta0RXcml0ZUZvbnRGaWxlU3RyZWFtLmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tEV3JpdGVGb250RmlsZVN0cmVhbS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL3dpbi9Ta0RXcml0ZUdlb21ldHJ5U2luay5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvd2luL1NrRFdyaXRlR2VvbWV0cnlTaW5rLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvd2luL1NrRFdyaXRlTlRERElfVkVSU0lPTi5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL3dpbi9Ta0hSRVNVTFQuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tIUkVTVUxULmNwcCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tJU3RyZWFtLmgiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvd2luL1NrSVN0cmVhbS5jcHAiLAotICAgICAgIjwoc2tpYV9zcmNfcGF0aCkvdXRpbHMvd2luL1NrT2JqQmFzZS5oIiwKLSAgICAgICI8KHNraWFfc3JjX3BhdGgpL3V0aWxzL3dpbi9Ta1RTY29wZWRDb21QdHIuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tXR0wuaCIsCi0gICAgICAiPChza2lhX3NyY19wYXRoKS91dGlscy93aW4vU2tXR0xfd2luLmNwcCIsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrQ29sb3JQcml2LmggYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NvbG9yUHJpdi5oCmluZGV4IDQ1ZmY4MGEuLjQ2NDQ3YzQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrQ29sb3JQcml2LmgKKysrIGIvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaApAQCAtNzIsNyArNzIsNyBAQAogCiAvLyBEZWR1Y2Ugd2hpY2ggU0tfUE1DT0xPUl9JU18gdG8gZGVmaW5lIGZyb20gdGhlIF9TSElGVCBkZWZpbmVzCiAKLSNpZiAhZGVmaW5lZChTVEFSQk9BUkQpIHx8IFNCX0FQSV9WRVJTSU9OIDwgMTIKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAjaWYgKFNLX0EzMl9TSElGVCA9PSBTS19SR0JBX0EzMl9TSElGVCAmJiBcCiAgICAgIFNLX1IzMl9TSElGVCA9PSBTS19SR0JBX1IzMl9TSElGVCAmJiBcCiAgICAgIFNLX0czMl9TSElGVCA9PSBTS19SR0JBX0czMl9TSElGVCAmJiBcCkBAIC04Niw3ICs4Niw3IEBACiAjZWxzZQogICAgICNlcnJvciAibmVlZCAzMmJpdCBwYWNraW5nIHRvIGJlIGVpdGhlciBSR0JBIG9yIEJHUkEiCiAjZW5kaWYKLSNlbmRpZiAgLy8gIWRlZmluZWQoU1RBUkJPQVJEKSB8fCBTQl9BUElfVkVSU0lPTiA8IDEyCisjZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkKIAogI2RlZmluZSBTa0dldFBhY2tlZEEzMihwYWNrZWQpICAgICAgKCh1aW50MzJfdCkoKHBhY2tlZCkgPDwgKDI0IC0gU0tfQTMyX1NISUZUKSkgPj4gMjQpCiAjZGVmaW5lIFNrR2V0UGFja2VkUjMyKHBhY2tlZCkgICAgICAoKHVpbnQzMl90KSgocGFja2VkKSA8PCAoMjQgLSBTS19SMzJfU0hJRlQpKSA+PiAyNCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrSW1hZ2VJbmZvLmggYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0ltYWdlSW5mby5oCmluZGV4IDliMTczZTUuLjFhYmZiN2UgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrSW1hZ2VJbmZvLmgKKysrIGIvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tJbWFnZUluZm8uaApAQCAtOTgsNyArOTgsNyBAQAogCiAgICAga0xhc3RFbnVtX1NrQ29sb3JUeXBlICAgICA9IGtSMTZHMTZCMTZBMTZfdW5vcm1fU2tDb2xvclR5cGUsIC8vITwgbGFzdCB2YWxpZCB2YWx1ZQogCi0jaWYgIWRlZmluZWQoU1RBUkJPQVJEKSB8fCBTQl9BUElfVkVSU0lPTiA8IDEyCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogI2lmIFNLX1BNQ09MT1JfQllURV9PUkRFUihCLEcsUixBKQogICAgIGtOMzJfU2tDb2xvclR5cGUgICAgICAgICAgPSBrQkdSQV84ODg4X1NrQ29sb3JUeXBlLC8vITwgbmF0aXZlIEFSR0IgMzItYml0IGVuY29kaW5nCiAKQEAgLTExMSw3ICsxMTEsNyBAQAogI2VuZGlmCiB9OwogCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpICYmIFNCX0FQSV9WRVJTSU9OID49IDEyCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAjZGVmaW5lIGtOMzJfU2tDb2xvclR5cGUgXAogICAgIChHZXRTa1BtY29sb3IoKSA9PSBTa1BtY29sb3JJc0JncmEgPyBrQkdSQV84ODg4X1NrQ29sb3JUeXBlIDoga1JHQkFfODg4OF9Ta0NvbG9yVHlwZSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tQb3N0Q29uZmlnLmggYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1Bvc3RDb25maWcuaAppbmRleCA2NTg2ZmIyLi42ZWI4MjE3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1Bvc3RDb25maWcuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1Bvc3RDb25maWcuaApAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBTa1Bvc3RDb25maWdfREVGSU5FRAogI2RlZmluZSBTa1Bvc3RDb25maWdfREVGSU5FRAogCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpICYmIFNCX0FQSV9WRVJTSU9OID49IDEyCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9jb3JlL1NrVHlwZXMuaCIKICNlbmRpZgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAvLyBJZiBTS19SMzJfU0hJRlQgaXMgc2V0LCB3ZSdsbCB1c2UgdGhhdCB0byBjaG9vc2UgUkdCQSBvciBCR1JBLgogLy8gSWYgbm90LCB3ZSdsbCBkZWZhdWx0IHRvIFJHQkEgZXZlcnl3aGVyZSBleGNlcHQgQkdSQSBvbiBXaW5kb3dzLgogI2lmIGRlZmluZWQoU0tfUjMyX1NISUZUKQotI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkgfHwgU0JfQVBJX1ZFUlNJT04gPCAxMgorI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKICAgICBzdGF0aWNfYXNzZXJ0KFNLX1IzMl9TSElGVCA9PSAwIHx8IFNLX1IzMl9TSElGVCA9PSAxNiwgIiIpOwogI2VuZGlmCiAjZWxpZiBkZWZpbmVkKFNLX0JVSUxEX0ZPUl9XSU4pCkBAIC0xNTUsNyArMTU1LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChTS19CMzJfU0hJRlQpCi0jaWYgIWRlZmluZWQoU1RBUkJPQVJEKSB8fCBTQl9BUElfVkVSU0lPTiA8IDEyCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogICAgIHN0YXRpY19hc3NlcnQoU0tfQjMyX1NISUZUID09ICgxNi1TS19SMzJfU0hJRlQpLCAiIik7CiAjZW5kaWYKICNlbHNlCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgIFNLXyAjIyBDMyAjIyAzMl9TSElGVCA9PSAyNCkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpICYmIFNCX0FQSV9WRVJTSU9OID49IDEyCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgdHlwZWRlZiBlbnVtIFNrUG1jb2xvciB7IFNrUG1jb2xvcklzUmdiYSwgU2tQbWNvbG9ySXNCZ3JhIH0gU2tQbUNvbG9yOwogCiAgICAgaW5saW5lIFNrUG1jb2xvciBHZXRTa1BtY29sb3IoKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1R5cGVzLmggYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1R5cGVzLmgKaW5kZXggMjQ2YzEwYy4uZjcyYTBkNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tUeXBlcy5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrVHlwZXMuaApAQCAtOCw2ICs4LDExIEBACiAjaWZuZGVmIFNrVHlwZXNfREVGSU5FRAogI2RlZmluZSBTa1R5cGVzX0RFRklORUQKIAorI2lmZGVmIFVTRV9TS0lBX05FWFQKKyNlcnJvciBJbmNsdWRpbmcgYSBza2lhIGhlYWRlciBpbiBhIHNraWFfbmV4dCBidWlsZC4gXAorQ2hlY2sgaW5jbHVkZSBwYXRocyBvcmRlciBhbmQgdXNlX3NraWFfbmV4dCBhcmd1bWVudCB1c2FnZSBpbiBidWlsZCBjb25maWdzLgorI2VuZGlmCisKIC8vIElXWVUgcHJhZ21hOiBiZWdpbl9leHBvcnRzCiAjaW5jbHVkZSAiaW5jbHVkZS9jb3JlL1NrUHJlQ29uZmlnLmgiCiAjaWYgZGVmaW5lZCAoU0tfVVNFUl9DT05GSUdfSEVBREVSKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvR3JUeXBlc1ByaXYuaCBiL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9wcml2YXRlL0dyVHlwZXNQcml2LmgKaW5kZXggMTc1OGE4NS4uMGQyOWY3ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvR3JUeXBlc1ByaXYuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvcHJpdmF0ZS9HclR5cGVzUHJpdi5oCkBAIC03NCw3ICs3NCw3IEBACiAjaWZuZGVmIFNLX0NQVV9MRU5ESUFOCiAjZXJyb3IgIlNraWEgZ3B1IGN1cnJlbnRseSBhc3N1bWVzIGxpdHRsZSBlbmRpYW4iCiAjZW5kaWYKLSNpZiBkZWZpbmVkKFNUQVJCT0FSRCkgJiYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKIHN0YXRpYyBjb25zdCBHclBpeGVsQ29uZmlnIGtTa2lhODg4OF9HclBpeGVsQ29uZmlnID0KICAgICAgICAgKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzQmdyYSkgPyBrQkdSQV84ODg4X0dyUGl4ZWxDb25maWcgOiBrUkdCQV84ODg4X0dyUGl4ZWxDb25maWc7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvU2tDb2xvckRhdGEuaCBiL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9wcml2YXRlL1NrQ29sb3JEYXRhLmgKaW5kZXggZGViYWY1Ny4uZGUxMTM0ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvU2tDb2xvckRhdGEuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvcHJpdmF0ZS9Ta0NvbG9yRGF0YS5oCkBAIC04MiwyNyArODIsMTEgQEAKIH0KIAogc3RhdGljIGlubGluZSBTa1BNQ29sb3IgU2tTd2l6emxlX1JHQkFfdG9fUE1Db2xvcih1aW50MzJfdCBjKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICByZXR1cm4gKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzUmdiYSkgPyBjIDogU2tTd2l6emxlX1JCKGMpOwotI2Vsc2UKLSNpZmRlZiBTS19QTUNPTE9SX0lTX1JHQkEKLSAgICByZXR1cm4gYzsKLSNlbHNlCi0gICAgcmV0dXJuIFNrU3dpenpsZV9SQihjKTsKLSNlbmRpZgotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgU2tQTUNvbG9yIFNrU3dpenpsZV9CR1JBX3RvX1BNQ29sb3IodWludDMyX3QgYykgewotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgICAgcmV0dXJuIChHZXRTa1BtY29sb3IoKSA9PSBTa1BtY29sb3JJc0JncmEpID8gYyA6IFNrU3dpenpsZV9SQihjKTsKLSNlbHNlCi0jaWZkZWYgU0tfUE1DT0xPUl9JU19CR1JBCi0gICAgcmV0dXJuIGM7Ci0jZWxzZQotICAgIHJldHVybiBTa1N3aXp6bGVfUkIoYyk7Ci0jZW5kaWYKLSNlbmRpZgogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTQxMiwxNSArMzk2LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBTazRmIHN3aXp6bGVfcmJfaWZfYmdyYShjb25zdCBTazRmJiB4KSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgICByZXR1cm4gKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzQmdyYSkgPyBzd2l6emxlX3JiKHgpIDogeDsKLSNlbHNlCi0jaWZkZWYgU0tfUE1DT0xPUl9JU19CR1JBCi0gICAgcmV0dXJuIHN3aXp6bGVfcmIoeCk7Ci0jZWxzZQotICAgIHJldHVybiB4OwotI2VuZGlmCi0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBTazRmIFNrNGZfZnJvbUwzMih1aW50MzJfdCBweCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrb3R0aWUvc2tvdHRpZS5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrb3R0aWUvc2tvdHRpZS5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjZkMzJiLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3NraWEvbW9kdWxlcy9za290dGllL3Nrb3R0aWUuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRyYW5zbGF0ZWQgZnJvbTogc2tvdHRpZS5nbmkKLQotewotICAndmFyaWFibGVzJzogewotICAgICdza290dGllX3NyY19wYXRoJzogJzwoc2tpYV9tb2R1bGVzX3BhdGgpL3Nrb3R0aWUvc3JjJywKLSAgICAnc2tvdHRpZV9pbmNsdWRlX3BhdGgnOiAnPChza2lhX21vZHVsZXNfcGF0aCkvc2tvdHRpZS9pbmNsdWRlJywKLQotICAgICdza2lhX3Nrb3R0aWVfcHVibGljJzogWwotICAgICAgIjwoc2tvdHRpZV9pbmNsdWRlX3BhdGgpL1Nrb3R0aWUuaCIsCi0gICAgICAiPChza290dGllX2luY2x1ZGVfcGF0aCkvU2tvdHRpZVByb3BlcnR5LmgiLAotICAgIF0sCi0KLSAgICAnc2tpYV9za290dGllX3NvdXJjZXMnIDogWwotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvQ29tcG9zaXRpb24uY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL0xheWVyLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9Ta290dGllLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9Ta290dGllQWRhcHRlci5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvU2tvdHRpZUFkYXB0ZXIuaCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9Ta290dGllQW5pbWF0b3IuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL1Nrb3R0aWVKc29uLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9Ta290dGllSnNvbi5oIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL1Nrb3R0aWVQcml2LmgiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvU2tvdHRpZVByb3BlcnR5LmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9Ta290dGllVmFsdWUuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL1Nrb3R0aWVWYWx1ZS5oIiwKLQotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9Ecm9wU2hhZG93RWZmZWN0LmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9lZmZlY3RzL0VmZmVjdHMuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvRWZmZWN0cy5oIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvRmlsbEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9HYXVzc2lhbkJsdXJFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvR3JhZGllbnRFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvSHVlU2F0dXJhdGlvbkVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9MZXZlbHNFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvTGluZWFyV2lwZUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9Nb3Rpb25CbHVyRWZmZWN0LmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9lZmZlY3RzL01vdGlvbkJsdXJFZmZlY3QuaCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9lZmZlY3RzL01vdGlvblRpbGVFZmZlY3QuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2VmZmVjdHMvUmFkaWFsV2lwZUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9UaW50RWZmZWN0LmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9lZmZlY3RzL1RyYW5zZm9ybUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvZWZmZWN0cy9Ucml0b25lRWZmZWN0LmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9lZmZlY3RzL1ZlbmV0aWFuQmxpbmRzRWZmZWN0LmNwcCIsCi0KLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2xheWVycy9JbWFnZUxheWVyLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9sYXllcnMvTnVsbExheWVyLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9sYXllcnMvUHJlY29tcExheWVyLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS9sYXllcnMvU2hhcGVMYXllci5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvbGF5ZXJzL1NvbGlkTGF5ZXIuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL2xheWVycy9UZXh0TGF5ZXIuY3BwIiwKLQotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvdGV4dC9SYW5nZVNlbGVjdG9yLmNwcCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS90ZXh0L1JhbmdlU2VsZWN0b3IuaCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS90ZXh0L1Nrb3R0aWVTaGFwZXIuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL3RleHQvU2tvdHRpZVNoYXBlci5oIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL3RleHQvVGV4dEFkYXB0ZXIuY3BwIiwKLSAgICAgICI8KHNrb3R0aWVfc3JjX3BhdGgpL3RleHQvVGV4dEFkYXB0ZXIuaCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS90ZXh0L1RleHRBbmltYXRvci5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvdGV4dC9UZXh0QW5pbWF0b3IuaCIsCi0gICAgICAiPChza290dGllX3NyY19wYXRoKS90ZXh0L1RleHRWYWx1ZS5jcHAiLAotICAgICAgIjwoc2tvdHRpZV9zcmNfcGF0aCkvdGV4dC9UZXh0VmFsdWUuaCIsCi0gICAgXSwKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrc2cvc2tzZy5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrc2cvc2tzZy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWNjM2E5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3NraWEvbW9kdWxlcy9za3NnL3Nrc2cuZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMjAgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRyYW5zbGF0ZWQgZnJvbTogc2tzZy5nbmkKLQotewotICAndmFyaWFibGVzJzogewotICAgICdza3NnX3NyY19wYXRoJzogJzwoc2tpYV9tb2R1bGVzX3BhdGgpL3Nrc2cvc3JjJywKLQotICAgICdza2lhX3Nrc2dfc291cmNlcycgOiBbCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHQ2xpcEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR0NvbG9yRmlsdGVyLmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHRHJhdy5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR0VmZmVjdE5vZGUuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dHZW9tZXRyeU5vZGUuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dHZW9tZXRyeVRyYW5zZm9ybS5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR0dyYWRpZW50LmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHR3JvdXAuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dJbWFnZS5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR0ludmFsaWRhdGlvbkNvbnRyb2xsZXIuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dNYXNrRWZmZWN0LmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHTWVyZ2UuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dOb2RlLmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHTm9kZVByaXYuaCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHT3BhY2l0eUVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1BhaW50LmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHUGF0aC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1BsYW5lLmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHUmVjdC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1JlbmRlckVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1JlbmRlck5vZGUuY3BwIiwKLSAgICAgICI8KHNrc2dfc3JjX3BhdGgpL1NrU0dSb3VuZEVmZmVjdC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1NjZW5lLmNwcCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHVGV4dC5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1RyYW5zZm9ybS5jcHAiLAotICAgICAgIjwoc2tzZ19zcmNfcGF0aCkvU2tTR1RyYW5zZm9ybVByaXYuaCIsCi0gICAgICAiPChza3NnX3NyY19wYXRoKS9Ta1NHVHJpbUVmZmVjdC5jcHAiLAotICAgIF0sCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvbW9kdWxlcy9za3NoYXBlci9za3NoYXBlci5neXBpIGIvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrc2hhcGVyL3Nrc2hhcGVyLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOGQ4YTkuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrc2hhcGVyL3Nrc2hhcGVyLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIENvcHlyaWdodCAyMDIwIFRoZSBDb2JhbHQgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBUcmFuc2xhdGVkIGZyb206IHNrc2hhcGVyLmduaQotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ3Nrc2hhcGVyX3NyY19wYXRoJzogJzwoc2tpYV9tb2R1bGVzX3BhdGgpL3Nrc2hhcGVyL3NyYycsCi0gICAgJ3Nrc2hhcGVyX2luY2x1ZGVfcGF0aCc6ICc8c2tpYV9tb2R1bGVzX3BhdGgpL3Nrc2hhcGVyL2luY2x1ZGUnLAotCi0gICAgJ3NraWFfc2hhcGVyX3B1YmxpYyc6IFsKLSAgICAgICI8KHNrc2hhcGVyX2luY2x1ZGVfcGF0aCkvU2tTaGFwZXIuaCIKLSAgICBdLAotCi0gICAgJ3NraWFfc2hhcGVyX3ByaW1pdGl2ZV9zb3VyY2VzJzogWwotICAgICAgIjwoc2tzaGFwZXJfc3JjX3BhdGgpL1NrU2hhcGVyLmNwcCIsCi0gICAgICAiPChza3NoYXBlcl9zcmNfcGF0aCkvU2tTaGFwZXJfcHJpbWl0aXZlLmNwcCIsCi0gICAgXSwKLQotICAgICdza2lhX3NoYXBlcl9oYXJmYnV6el9zb3VyY2VzJzogWwotICAgICAgIjwoc2tzaGFwZXJfc3JjX3BhdGgpL1NrU2hhcGVyX2hhcmZidXp6LmNwcCIsCi0gICAgXSwKLSAgfSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrQ29kZWMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAKaW5kZXggNzU0YjkxMS4uNGRmNDE5MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAKQEAgLTYyNCw3ICs2MjQsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Uga1JHQl81NjVfU2tDb2xvclR5cGU6CiAgICAgICAgICAgICBpZiAoZm9yQ29sb3JUYWJsZSkgewotI2lmIGRlZmluZWQoU1RBUkJPQVJEKSAmJiBTQl9BUElfVkVSU0lPTiA+PSAxMgorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQogICAgICAgICAgICAgICAgICpvdXRGb3JtYXQgPSAoR2V0U2tQbWNvbG9yKCkgPT0gU2tQbWNvbG9ySXNSZ2JhKSA/IHNrY21zX1BpeGVsRm9ybWF0X1JHQkFfODg4OAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNrY21zX1BpeGVsRm9ybWF0X1JHQkFfODg4ODsKICNlbHNlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjUHJpdi5oIGIvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlY1ByaXYuaAppbmRleCAwYjQ2YjQzLi4zNDYzMzkzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjUHJpdi5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrQ29kZWNQcml2LmgKQEAgLTIxOCw3ICsyMTgsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmdiYShTa0NvbG9yVHlwZSBjb2xvclR5cGUpIHsKLSNpZiBkZWZpbmVkKFNUQVJCT0FSRCkgJiYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICByZXR1cm4gKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzUmdiYSkgPyAoa0JHUkFfODg4OF9Ta0NvbG9yVHlwZSAhPSBjb2xvclR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGtCR1JBXzg4ODhfU2tDb2xvclR5cGUgPT0gY29sb3JUeXBlKTsKICNlbHNlCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTFV0aWwuY3BwIGIvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dsL0dyR0xVdGlsLmNwcAppbmRleCA1MTY0ZGVmLi4zZjY3NjYzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTFV0aWwuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9nbC9HckdMVXRpbC5jcHAKQEAgLTIyLDcgKzIyLDYgQEAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0jaWYgIWRlZmluZWQoU1RBUkJPQVJEKSB8fCAoU0JfQVBJX1ZFUlNJT04gPj0gMTIgfHwgU0JfSEFTX0dMRVMyKQogI2lmIGRlZmluZWQoU1RBUkJPQVJEKQogI2luY2x1ZGUgInN0YXJib2FyZC9jb21tb24vc3RyaW5nLmgiCiAjaW5jbHVkZSAic3RhcmJvYXJkL2NvbmZpZ3VyYXRpb24uaCIKQEAgLTI2MSw3ICsyNjAsNyBAQAogICAgICAgICByZXR1cm4gR1JfR0xfSU5WQUxJRF9WRVI7CiAgICAgfQogCi0jaWYgZGVmaW5lZChTVEFSQk9BUkQpICYmIChTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCAhZGVmaW5lZChHTEVTM19TVVBQT1JURUQpKQorI2lmIGRlZmluZWQoU1RBUkJPQVJEKSAmJiAhZGVmaW5lZChHTEVTM19TVVBQT1JURUQpCiAgICAgLy8gSWYgd2UgYXJlIGluIGEgYnVpbGQgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IEdMRVMzIChvciBpdCBpcyBleHBsaWNpdGx5CiAgICAgLy8gZGlzYWJsZWQpLCBlbnN1cmUgdGhhdCBTa2lhIHJldHVybnMgR0xFUzIgYXMgdGhlIHZlcnNpb24gYmVpbmcgdXNlZCBieQogICAgIC8vIHBlcmZvcm1pbmcgdGhlIGNoZWNrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHBhcnNlIHRoZSBzdHJpbmcgYmVsb3cuCkBAIC03MzcsMzAgKzczNiwzIEBACiAgICAgU2tVTlJFQUNIQUJMRTsKIH0KIAotI2Vsc2UgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkgfHwgKFNCX0FQSV9WRVJTSU9OID49IDEyfHwgU0JfSEFTX0dMRVMyKQotCi12b2lkIEdyR0xDaGVja0Vycihjb25zdCBHckdMSW50ZXJmYWNlKiBnbCwgY29uc3QgY2hhciogbG9jYXRpb24sIGNvbnN0IGNoYXIqIGNhbGwpIHt9Ci0KLXZvaWQgR3JHTENsZWFyRXJyKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGdsKSB7fQotCi1HckdMZW51bSBHclRvR0xTdGVuY2lsRnVuYyhHclN0ZW5jaWxUZXN0IHRlc3QpIHsgcmV0dXJuIC0xOyB9Ci0KLUdyR0xWZXJzaW9uIEdyR0xHZXRWZXJzaW9uRnJvbVN0cmluZyhjb25zdCBjaGFyKiB2ZXJzaW9uU3RyaW5nKSB7IHJldHVybiBHUl9HTF9JTlZBTElEX1ZFUjsgfQotCi1HckdMVmVuZG9yIEdyR0xHZXRWZW5kb3IoY29uc3QgR3JHTEludGVyZmFjZSogZ2wpIHsgcmV0dXJuIGtPdGhlcl9HckdMVmVuZG9yOyB9Ci0KLUdyR0xSZW5kZXJlciBHckdMR2V0UmVuZGVyZXJGcm9tU3RyaW5nKGNvbnN0IGNoYXIqIHJlbmRlcmVyU3RyaW5nKSB7IHJldHVybiBrT3RoZXJfR3JHTFJlbmRlcmVyOyB9Ci0KLXZvaWQgR3JHTEdldERyaXZlckluZm8oR3JHTFN0YW5kYXJkIHN0YW5kYXJkLAotICAgICAgICAgICAgICAgICAgICAgICBHckdMVmVuZG9yIHZlbmRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVuZGVyZXJTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZlcnNpb25TdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgIEdyR0xEcml2ZXIqIG91dERyaXZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgR3JHTERyaXZlclZlcnNpb24qIG91dFZlcnNpb24pIHt9Ci0KLUdyR0xTTFZlcnNpb24gR3JHTEdldEdMU0xWZXJzaW9uKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGdsKSB7IHJldHVybiBHUl9HTFNMX0lOVkFMSURfVkVSOyB9Ci0KLUdyR0xWZXJzaW9uIEdyR0xHZXRWZXJzaW9uKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGdsKSB7IHJldHVybiBHUl9HTF9JTlZBTElEX1ZFUjsgfQotCi0jZW5kaWYgIC8vICFkZWZpbmVkKFNUQVJCT0FSRCkgfHwgKFNCX0FQSV9WRVJTSU9OID49IDEyfHwKLSAgICAgICAgLy8gU0JfSEFTX0dMRVMyKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYS90aGlyZF9wYXJ0eS9za2Ntcy9za2Ntcy5neXAgYi90aGlyZF9wYXJ0eS9za2lhL3RoaXJkX3BhcnR5L3NrY21zL3NrY21zLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwMDdiZC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9za2lhL3RoaXJkX3BhcnR5L3NrY21zL3NrY21zLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTggR29vZ2xlIEluYy4KLSMKLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdza2NtcycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndG9vbHNldHMnOiBbJ3RhcmdldCddLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICMgU3RhcmJvYXJkIGRvZXNuJ3QgaGF2ZSBBUElzIGZvciB2ZWN0b3IgcmVnaXN0ZXJzLgotICAgICAgICAjIFVzZSBwb3J0YWJsZSBjb2RlIGluc3RlYWQuCi0gICAgICAgICdTS0NNU19QT1JUQUJMRScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdza2Ntcy5jYycsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS90aGlyZF9wYXJ0eS9za2NtcycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9kbS9ETVNyY1NpbmsuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvZG0vRE1TcmNTaW5rLmNwcAppbmRleCA0MjFlYjkwLi4yMTY4ZWEzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9kbS9ETVNyY1NpbmsuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2RtL0RNU3JjU2luay5jcHAKQEAgLTM5MiwxMSArMzkyLDExIEBACiAgICAgICAgICAgICAgICAgICAgIHx8IGtSR0JBX0YxNl9Ta0NvbG9yVHlwZSA9PSBjYW52YXNDb2xvclR5cGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0jaWZkZWYgU0tfUE1DT0xPUl9JU19SR0JBCi0gICAgICAgICAgICAqZGVjb2RlSW5mbyA9IGRlY29kZUluZm8tPm1ha2VDb2xvclR5cGUoa0JHUkFfODg4OF9Ta0NvbG9yVHlwZSk7Ci0jZWxzZQotICAgICAgICAgICAgKmRlY29kZUluZm8gPSBkZWNvZGVJbmZvLT5tYWtlQ29sb3JUeXBlKGtSR0JBXzg4ODhfU2tDb2xvclR5cGUpOwotI2VuZGlmCisgICAgICAgICAgICBpZiAoR2V0U2tQbWNvbG9yKCkgPT0gU2tQbWNvbG9ySXNSZ2JhKSB7CisgICAgICAgICAgICAgICpkZWNvZGVJbmZvID0gZGVjb2RlSW5mby0+bWFrZUNvbG9yVHlwZShrQkdSQV84ODg4X1NrQ29sb3JUeXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICpkZWNvZGVJbmZvID0gZGVjb2RlSW5mby0+bWFrZUNvbG9yVHlwZShrUkdCQV84ODg4X1NrQ29sb3JUeXBlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGtSR0JfNTY1X1NrQ29sb3JUeXBlID09IGNhbnZhc0NvbG9yVHlwZSAmJgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvZ20vYWxsX2JpdG1hcF9jb25maWdzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2dtL2FsbF9iaXRtYXBfY29uZmlncy5jcHAKaW5kZXggNjJiYWRiNy4uZTcyYjRiOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvZ20vYWxsX2JpdG1hcF9jb25maWdzLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9nbS9hbGxfYml0bWFwX2NvbmZpZ3MuY3BwCkBAIC0xNzMsMTIgKzE3MywxNSBAQAogICAgIG4zMmJpdG1hcC5lcmFzZUNvbG9yKFNLX0NvbG9yVFJBTlNQQVJFTlQpOwogICAgIFNrQ2FudmFzIG4zMmNhbnZhcyhuMzJiaXRtYXApOwogICAgIGNvbG9yX3doZWVsX25hdGl2ZSgmbjMyY2FudmFzKTsKLSAgICAjaWYgU0tfUE1DT0xPUl9CWVRFX09SREVSKEIsRyxSLEEpCi0gICAgICAgIGNvbnN0IFNrQ29sb3JUeXBlIGN0ID0ga1JHQkFfODg4OF9Ta0NvbG9yVHlwZTsKLSAgICAjZWxpZiBTS19QTUNPTE9SX0JZVEVfT1JERVIoUixHLEIsQSkKLSAgICAgICAgY29uc3QgU2tDb2xvclR5cGUgY3QgPSBrQkdSQV84ODg4X1NrQ29sb3JUeXBlOwotICAgICNlbmRpZgotICAgIHN0YXRpY19hc3NlcnQoY3QgIT0ga04zMl9Ta0NvbG9yVHlwZSwgIkJSR0EhPVJHQkEiKTsKKyAgICBTa0NvbG9yVHlwZSBjdDsKKyAgICBpZiAoU0tfUE1DT0xPUl9CWVRFX09SREVSKEIsIEcsIFIsIEEpKSB7CisgICAgICAgIGN0ID0ga1JHQkFfODg4OF9Ta0NvbG9yVHlwZTsKKyAgICB9IGVsc2UgaWYgKFNLX1BNQ09MT1JfQllURV9PUkRFUihSLCBHLCBCLCBBKSkgeworICAgICAgICBjdCA9IGtCR1JBXzg4ODhfU2tDb2xvclR5cGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTk9UUkVBQ0hFRCgpIDw8ICJCeXRlIG9yZGVyIG11c3QgYmUgQkdSQSBvciBSR0JBLiI7CisgICAgfQorICAgIERDSEVDSyhjdCAhPSBrTjMyX1NrQ29sb3JUeXBlKSA8PCAiQlJHQSE9UkdCQSI7CiAgICAgU2tBc3NlcnRSZXN1bHQoVG9vbFV0aWxzOjpjb3B5X3RvKCZub3ROMzJiaXRtYXAsIGN0LCBuMzJiaXRtYXApKTsKICAgICBTa0FTU0VSVChub3ROMzJiaXRtYXAuY29sb3JUeXBlKCkgPT0gY3QpOwogICAgIHJldHVybiBub3ROMzJiaXRtYXAuYXNJbWFnZSgpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrQ2FudmFzLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDYW52YXMuaAppbmRleCAzMDNlY2Q2Li5mNWQ5ZmViIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDYW52YXMuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDYW52YXMuaApAQCAtMjk5LDYgKzI5OSwxNSBAQAogICAgICAqLwogICAgIHZpcnR1YWwgR3JSZWNvcmRpbmdDb250ZXh0KiByZWNvcmRpbmdDb250ZXh0KCk7CiAKKyNpZmRlZiBTVEFSQk9BUkQKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZyYW1lYnVmZmVyIG9iamVjdCBpZGVudGlmaWVyIGZvciB0aGUgcmVuZGVyIHRhcmdldCwgaWYKKyAgICAgKiBhcHBsaWNhYmxlLgorICAgICAqIE5PVEU6IFRoaXMgd2lsbCBjYXVzZSBhIGZsdXNoLCBzbyB1c2Ugc3BhcmluZ2x5LgorICAgICAqLworICAgIGludHB0cl90IGdldFJlbmRlclRhcmdldEhhbmRsZSgpIGNvbnN0OworI2VuZGlmCisKICAgICAvKiogU29tZXRpbWVzIGEgY2FudmFzIGlzIG93bmVkIGJ5IGEgc3VyZmFjZS4gSWYgaXQgaXMsIGdldFN1cmZhY2UoKSB3aWxsIHJldHVybiBhIGJhcmUKICAgICAgKiAgcG9pbnRlciB0byB0aGF0IHN1cmZhY2UsIGVsc2UgdGhpcyB3aWxsIHJldHVybiBudWxscHRyLgogICAgICAqLwpAQCAtMjM2Niw3ICsyMzc1LDEyIEBACiAgICAgc2tfc3A8U2tNYXJrZXJTdGFjaz4gZk1hcmtlclN0YWNrOwogCiAgICAgLy8gdGhlIGZpcnN0IE4gcmVjcyB0aGF0IGNhbiBmaXQgaGVyZSBtZWFuIHdlIHdvbid0IGNhbGwgbWFsbG9jCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgLy8gQ29iYWx0IHVzZXMgdmFyaW91cyBjb21waWxlcnMsIHNldCBhIHNhZmUgbGFyZ2VyIHNpemUuCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQga01DUmVjU2l6ZSAgICAgID0gMTEyOworI2Vsc2UKICAgICBzdGF0aWMgY29uc3RleHByIGludCBrTUNSZWNTaXplICAgICAgPSA5NjsgLy8gbW9zdCByZWNlbnQgbWVhc3VyZW1lbnQKKyNlbmRpZgogICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IGtNQ1JlY0NvdW50ICAgICA9IDMyOyAvLyBjb21tb24gZGVwdGggZm9yIHNhdmUvcmVzdG9yZXMKIAogICAgIGludHB0cl90IGZNQ1JlY1N0b3JhZ2Vba01DUmVjU2l6ZSAqIGtNQ1JlY0NvdW50IC8gc2l6ZW9mKGludHB0cl90KV07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tDb2xvclByaXYuaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NvbG9yUHJpdi5oCmluZGV4IDI5ZjY0MzMuLjg5Y2YwZGQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NvbG9yUHJpdi5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0NvbG9yUHJpdi5oCkBAIC03Myw2ICs3Myw3IEBACiAKIC8vIERlZHVjZSB3aGljaCBTS19QTUNPTE9SX0lTXyB0byBkZWZpbmUgZnJvbSB0aGUgX1NISUZUIGRlZmluZXMKIAorI2lmICFkZWZpbmVkKFNUQVJCT0FSRCkKICNpZiAoU0tfQTMyX1NISUZUID09IFNLX1JHQkFfQTMyX1NISUZUICYmIFwKICAgICAgU0tfUjMyX1NISUZUID09IFNLX1JHQkFfUjMyX1NISUZUICYmIFwKICAgICAgU0tfRzMyX1NISUZUID09IFNLX1JHQkFfRzMyX1NISUZUICYmIFwKQEAgLTg2LDYgKzg3LDcgQEAKICNlbHNlCiAgICAgI2Vycm9yICJuZWVkIDMyYml0IHBhY2tpbmcgdG8gYmUgZWl0aGVyIFJHQkEgb3IgQkdSQSIKICNlbmRpZgorI2VuZGlmICAvLyAhZGVmaW5lZChTVEFSQk9BUkQpCiAKICNkZWZpbmUgU2tHZXRQYWNrZWRBMzIocGFja2VkKSAgICAgICgodWludDMyX3QpKChwYWNrZWQpIDw8ICgyNCAtIFNLX0EzMl9TSElGVCkpID4+IDI0KQogI2RlZmluZSBTa0dldFBhY2tlZFIzMihwYWNrZWQpICAgICAgKCh1aW50MzJfdCkoKHBhY2tlZCkgPDwgKDI0IC0gU0tfUjMyX1NISUZUKSkgPj4gMjQpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tEYXRhLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tEYXRhLmgKaW5kZXggZWI4NDViNS4uOWRlMmZjNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrRGF0YS5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0RhdGEuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpbmNsdWRlICJpbmNsdWRlL2NvcmUvU2tSZWZDbnQuaCIKKyNpbmNsdWRlICJzcmMvY29yZS9Ta09TRmlsZS5oIiAgLy8gSW5jbHVkZWQgZm9yIFNrRmlsZS4KIAogY2xhc3MgU2tTdHJlYW07CiAKQEAgLTEyNyw3ICsxMjgsNyBAQAogICAgICAqICBUaGUgRklMRSBtdXN0IGJlIG9wZW4gZm9yIHJlYWRpbmcgb25seS4KICAgICAgKiAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCiAgICAgICovCi0gICAgc3RhdGljIHNrX3NwPFNrRGF0YT4gTWFrZUZyb21GSUxFKEZJTEUqIGYpOworICAgIHN0YXRpYyBza19zcDxTa0RhdGE+IE1ha2VGcm9tRklMRShTa0ZpbGUqIGYpOwogCiAgICAgLyoqCiAgICAgICogIENyZWF0ZSBhIG5ldyBkYXRhcmVmIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tJbWFnZUluZm8uaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0ltYWdlSW5mby5oCmluZGV4IDk5YjY1ZTguLjMwNjhlYzQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0ltYWdlSW5mby5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta0ltYWdlSW5mby5oCkBAIC05NSw2ICs5NSw3IEBACiAKICAgICBrTGFzdEVudW1fU2tDb2xvclR5cGUgICAgID0ga1NSR0JBXzg4ODhfU2tDb2xvclR5cGUsIC8vITwgbGFzdCB2YWxpZCB2YWx1ZQogCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogI2lmIFNLX1BNQ09MT1JfQllURV9PUkRFUihCLEcsUixBKQogICAgIGtOMzJfU2tDb2xvclR5cGUgICAgICAgICAgPSBrQkdSQV84ODg4X1NrQ29sb3JUeXBlLC8vITwgbmF0aXZlIDMyLWJpdCBCR1JBIGVuY29kaW5nCiAKQEAgLTEwNCw4ICsxMDUsMTQgQEAKICNlbHNlCiAgICAgI2Vycm9yICJTS18qMzJfU0hJRlQgdmFsdWVzIG11c3QgY29ycmVzcG9uZCB0byBCR1JBIG9yIFJHQkEgYnl0ZSBvcmRlciIKICNlbmRpZgorI2VuZGlmCiB9OwogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisjZGVmaW5lIGtOMzJfU2tDb2xvclR5cGUgXAorICAgIChHZXRTa1BtY29sb3IoKSA9PSBTa1BtY29sb3JJc0JncmEgPyBrQkdSQV84ODg4X1NrQ29sb3JUeXBlIDoga1JHQkFfODg4OF9Ta0NvbG9yVHlwZSkKKyNlbmRpZgorCiAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIHRvIHN0b3JlIGEgcGl4ZWwsIGluY2x1ZGluZyB1bnVzZWQgcGFkZGluZy4KICAgICBSZXR1cm5zIHplcm8gaWYgY3QgaXMga1Vua25vd25fU2tDb2xvclR5cGUgb3IgaW52YWxpZC4KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUG9pbnQuaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1BvaW50LmgKaW5kZXggOTJjYjBiNy4uN2U3NjUzNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUG9pbnQuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tQb2ludC5oCkBAIC01NjMsNCArNTYzLDE2IEBACiAKIH07CiAKKyNpZmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8U2tQb2ludD4geworICBzdGF0aWMgYXV0byBDb2VyY2UoU2tQb2ludCYmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptb3ZlKCBzdGQ6Om1ha2VfdHVwbGUodC5mWCwgdC5mWSkpOworICB9CisgIHN0YXRpYyBhdXRvIENvZXJjZShjb25zdCBTa1BvaW50JiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmZYLCB0LmZZKTsKKyAgfQorfTsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1JTWGZvcm0uaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1JTWGZvcm0uaAppbmRleCA5MTY1MzMxLi42ODI2YWM1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSU1hmb3JtLmgKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUlNYZm9ybS5oCkBAIC02NSw1ICs2NSwxOCBAQAogICAgIHZvaWQgdG9UcmlTdHJpcChTa1NjYWxhciB3aWR0aCwgU2tTY2FsYXIgaGVpZ2h0LCBTa1BvaW50IHN0cmlwWzRdKSBjb25zdDsKIH07CiAKKyNpZmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8U2tSU1hmb3JtPiB7CisgIHN0YXRpYyBhdXRvIENvZXJjZShTa1JTWGZvcm0mJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxzdGQ6OnR1cGxlPFNrU2NhbGFyLCBTa1NjYWxhciwgU2tTY2FsYXIsIFNrU2NhbGFyPj4oCisgICAgICAgIHN0ZDo6bWFrZV90dXBsZSh0LmZTQ29zLCB0LmZTU2luLCB0LmZUeCwgdC5mVHkpKTsKKyAgfQorICBzdGF0aWMgYXV0byBDb2VyY2UoY29uc3QgU2tSU1hmb3JtJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmZTQ29zLCB0LmZTU2luLCB0LmZUeCwgdC5mVHkpOworICB9Cit9OworI2VuZGlmCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSZWN0LmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tSZWN0LmgKaW5kZXggNmVmMWY4Ni4uYWI0NWNhNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrUmVjdC5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1JlY3QuaApAQCAtMTM3NSw0ICsxMzc1LDE2IEBACiAgICAgICAgICAgICAoU2tTY2FsYXIpZlJpZ2h0ID49IHIuZlJpZ2h0ICYmIChTa1NjYWxhcilmQm90dG9tID49IHIuZkJvdHRvbTsKIH0KIAorI2lmZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxTa1JlY3Q+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKFNrUmVjdCYmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHQuZkxlZnQsIHQuZlRvcCwgdC5mUmlnaHQsIHQuZkJvdHRvbSk7CisgIH0KKyAgc3RhdGljIGF1dG8gQ29lcmNlKGNvbnN0IFNrUmVjdCYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5mTGVmdCwgdC5mVG9wLCB0LmZSaWdodCwgdC5mQm90dG9tKTsKKyAgfQorfTsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1N0cmVhbS5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKaW5kZXggMzJkZmZmMi4uZWNmMDAyNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrU3RyZWFtLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJpbmNsdWRlL2NvcmUvU2tSZWZDbnQuaCIKICNpbmNsdWRlICJpbmNsdWRlL2NvcmUvU2tTY2FsYXIuaCIKICNpbmNsdWRlICJpbmNsdWRlL3ByaXZhdGUvU2tUby5oIgorI2luY2x1ZGUgInNyYy9jb3JlL1NrT1NGaWxlLmgiICAvLyBJbmNsdWRlZCBmb3IgU2tGaWxlLgogCiAjaW5jbHVkZSA8bWVtb3J5Lmg+CiAKQEAgLTMxMSwxNCArMzEyLDE0IEBACiAgICAgICogIGJlZ2lubmluZyBvZiB0aGUgU2tGSUxFU3RyZWFtIGFuZCB0aGUgY3VycmVudCBzZWVrIGVuZCBvZiB0aGUgRklMRSB3aWxsIGJlIHRoZSBlbmQuCiAgICAgICogIFRoZSBDIEZJTEUgc3RyZWFtIHdpbGwgYmUgY2xvc2VkIGluIHRoZSBkZXN0cnVjdG9yLgogICAgICAqLwotICAgIGV4cGxpY2l0IFNrRklMRVN0cmVhbShGSUxFKiBmaWxlKTsKKyAgICBleHBsaWNpdCBTa0ZJTEVTdHJlYW0oU2tGaWxlKiBmaWxlKTsKIAogICAgIC8qKiBJbml0aWFsaXplIHRoZSBzdHJlYW0gd2l0aCBhbiBleGlzdGluZyBDIEZJTEUgc3RyZWFtLgogICAgICAqICBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgQyBGSUxFIHN0cmVhbSB3aWxsIGJlIGNvbnNpZGVyZWQgdGhlCiAgICAgICogIGJlZ2lubmluZyBvZiB0aGUgU2tGSUxFU3RyZWFtIGFuZCBzaXplIGJ5dGVzIGxhdGVyIHdpbGwgYmUgdGhlIGVuZC4KICAgICAgKiAgVGhlIEMgRklMRSBzdHJlYW0gd2lsbCBiZSBjbG9zZWQgaW4gdGhlIGRlc3RydWN0b3IuCiAgICAgICovCi0gICAgZXhwbGljaXQgU2tGSUxFU3RyZWFtKEZJTEUqIGZpbGUsIHNpemVfdCBzaXplKTsKKyAgICBleHBsaWNpdCBTa0ZJTEVTdHJlYW0oU2tGaWxlKiBmaWxlLCBzaXplX3Qgc2l6ZSk7CiAKICAgICB+U2tGSUxFU3RyZWFtKCkgb3ZlcnJpZGU7CiAKQEAgLTM1MiwxNCArMzUzLDE0IEBACiAgICAgc2l6ZV90IGdldExlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFNrRklMRVN0cmVhbShGSUxFKiwgc2l6ZV90IHNpemUsIHNpemVfdCBzdGFydCk7Ci0gICAgZXhwbGljaXQgU2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxGSUxFPiwgc2l6ZV90IGVuZCwgc2l6ZV90IHN0YXJ0KTsKLSAgICBleHBsaWNpdCBTa0ZJTEVTdHJlYW0oc3RkOjpzaGFyZWRfcHRyPEZJTEU+LCBzaXplX3QgZW5kLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBjdXJyZW50KTsKKyAgICBleHBsaWNpdCBTa0ZJTEVTdHJlYW0oU2tGaWxlKiwgc2l6ZV90IHNpemUsIHNpemVfdCBzdGFydCk7CisgICAgZXhwbGljaXQgU2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxTa0ZpbGU+LCBzaXplX3QgZW5kLCBzaXplX3Qgc3RhcnQpOworICAgIGV4cGxpY2l0IFNrRklMRVN0cmVhbShzdGQ6OnNoYXJlZF9wdHI8U2tGaWxlPiwgc2l6ZV90IGVuZCwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY3VycmVudCk7CiAKICAgICBTa1N0cmVhbUFzc2V0KiBvbkR1cGxpY2F0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFNrU3RyZWFtQXNzZXQqIG9uRm9yaygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgc3RkOjpzaGFyZWRfcHRyPEZJTEU+IGZGSUxFOworICAgIHN0ZDo6c2hhcmVkX3B0cjxTa0ZpbGU+IGZGSUxFOwogICAgIC8vIE15IG93biBjb3VuY2lsIHdpbGwgSSBrZWVwIG9uIHNpemVzIGFuZCBvZmZzZXRzLgogICAgIC8vIFRoZXNlIGFyZSBzZWVrIHBvc2l0aW9ucyBpbiB0aGUgdW5kZXJsaW5nIEZJTEUsIG5vdCBvZmZzZXRzIGludG8gdGhlIHN0cmVhbS4KICAgICBzaXplX3QgZkVuZDsKQEAgLTQ1OSw3ICs0NjAsNyBAQAogICAgIHNpemVfdCBieXRlc1dyaXR0ZW4oKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBGSUxFKiBmRklMRTsKKyAgICBTa0ZpbGUqIGZGSUxFOwogCiAgICAgdXNpbmcgSU5IRVJJVEVEID0gU2tXU3RyZWFtOwogfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1R5cGVzLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tUeXBlcy5oCmluZGV4IGMwMDczNDcuLjQ1YjVhMDAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvY29yZS9Ta1R5cGVzLmgKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrVHlwZXMuaApAQCAtOCw5ICs4LDE2IEBACiAjaWZuZGVmIFNrVHlwZXNfREVGSU5FRAogI2RlZmluZSBTa1R5cGVzX0RFRklORUQKIAorI2lmbmRlZiBVU0VfU0tJQV9ORVhUCisjZXJyb3IgSW5jbHVkaW5nIGEgc2tpYV9uZXh0IGhlYWRlciBpbiBhIFNraWEgYnVpbGQuIFwKK0NoZWNrIGluY2x1ZGUgcGF0aHMgb3JkZXIgYW5kIHVzZV9za2lhX25leHQgYXJndW1lbnQgdXNhZ2UgaW4gYnVpbGQgY29uZmlncy4KKyNlbmRpZgorCiAvKiogXGZpbGUgU2tUeXBlcy5oCiAqLwogCisjaW5jbHVkZSAiY3BwMTdvbmNwcDE0LmgiCisKIC8vIFByZS1Ta1VzZXJDb25maWcuaCBzZXR1cC4KIAogLy8gQWxsb3dzIGVtYmVkZGVycyB0aGF0IHdhbnQgdG8gZGlzYWJsZSBtYWNyb3MgdGhhdCB0YWtlIGFyZ3VtZW50cyB0byBqdXN0CkBAIC0yODgsNyArMjk1LDkgQEAKIC8vIElmIFNLX1IzMl9TSElGVCBpcyBzZXQsIHdlJ2xsIHVzZSB0aGF0IHRvIGNob29zZSBSR0JBIG9yIEJHUkEuCiAvLyBJZiBub3QsIHdlJ2xsIGRlZmF1bHQgdG8gUkdCQSBldmVyeXdoZXJlIGV4Y2VwdCBCR1JBIG9uIFdpbmRvd3MuCiAjaWYgZGVmaW5lZChTS19SMzJfU0hJRlQpCisjaWYgIWRlZmluZWQoU1RBUkJPQVJEKQogICAgIHN0YXRpY19hc3NlcnQoU0tfUjMyX1NISUZUID09IDAgfHwgU0tfUjMyX1NISUZUID09IDE2LCAiIik7CisjZW5kaWYKICNlbGlmIGRlZmluZWQoU0tfQlVJTERfRk9SX1dJTikKICAgICAjZGVmaW5lIFNLX1IzMl9TSElGVCAxNgogI2Vsc2UKQEAgLTI5Niw3ICszMDUsOSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNLX0IzMl9TSElGVCkKKyNpZiAhZGVmaW5lZChTVEFSQk9BUkQpCiAgICAgc3RhdGljX2Fzc2VydChTS19CMzJfU0hJRlQgPT0gKDE2LVNLX1IzMl9TSElGVCksICIiKTsKKyNlbmRpZgogI2Vsc2UKICAgICAjZGVmaW5lIFNLX0IzMl9TSElGVCAoMTYtU0tfUjMyX1NISUZUKQogI2VuZGlmCkBAIC0zMjIsNiArMzMzLDIxIEBACiAgICAgICAgICBTS18gIyMgQzMgIyMgMzJfU0hJRlQgPT0gMjQpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQordHlwZWRlZiBlbnVtIFNrUG1jb2xvciB7IFNrUG1jb2xvcklzUmdiYSwgU2tQbWNvbG9ySXNCZ3JhIH0gU2tQbUNvbG9yOworCitpbmxpbmUgU2tQbWNvbG9yIEdldFNrUG1jb2xvcigpIHsKKyAgICBpZiAoU0tfUE1DT0xPUl9CWVRFX09SREVSKFIsRyxCLEEpKSB7CisgICAgICAgIHJldHVybiBTa1BtY29sb3JJc1JnYmE7CisgICAgfSBlbHNlIGlmIChTS19QTUNPTE9SX0JZVEVfT1JERVIoQixHLFIsQSkpIHsKKyAgICAgICAgcmV0dXJuIFNrUG1jb2xvcklzQmdyYTsKKyAgICB9IGVsc2UgeworICAgICAgICBEQ0hFQ0soZmFsc2UpIDw8ICJTSyBzaGlmdCB2YWx1ZXMgZG8gbm90IGNvcnJlc3BvbmQgdG8gYSBzdXBwb3J0ZWQgYnl0ZSBvcmRlci4iOworICAgICAgICByZXR1cm4gKFNrUG1jb2xvcilOVUxMOworICAgIH0KK30KKyNlbmRpZgorCiAjaWYgZGVmaW5lZCBTS19ERUJVRyAmJiBkZWZpbmVkIFNLX0JVSUxEX0ZPUl9XSU4KICAgICAjaWZkZWYgZnJlZQogICAgICAgICAjdW5kZWYgZnJlZQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL2NwcDE3b25jcHAxNC5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL2NwcDE3b25jcHAxNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWI1N2EKLS0tIC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUvY3BwMTdvbmNwcDE0LmgKQEAgLTAsMCArMSw3OCBAQAorI2lmbmRlZiBDcHAxN09uQ3BwMTRfREVGSU5FRAorI2RlZmluZSBDcHAxN09uQ3BwMTRfREVGSU5FRAorCisjaWZkZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworLy8gSGVscGVycyBmb3IgY29udmVydGluZyB0eXBlcyB0byB0dXBsZXMuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTsKKwordGVtcGxhdGUgPHR5cGVuYW1lLi4uIFR5cGVzPgorc3RydWN0IENvZXJjZXJUb1R1cGxlPHN0ZDo6dHVwbGU8VHlwZXMuLi4+PiB7CisgIHN0YXRpYyBzdGQ6OnR1cGxlPFR5cGVzLi4uPiYmIENvZXJjZShzdGQ6OnR1cGxlPFR5cGVzLi4uPiYmIHR1cGxlKSB7CisgICAgcmV0dXJuIHN0ZDo6bW92ZSh0dXBsZSk7CisgIH0KKyAgc3RhdGljIHN0ZDo6dHVwbGU8VHlwZXMuLi4+IENvZXJjZShzdGQ6OnR1cGxlPFR5cGVzLi4uPiYgdHVwbGUpIHsKKyAgICByZXR1cm4gdHVwbGU7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8c3RkOjpwYWlyPFQxLCBUMj4+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKHN0ZDo6cGFpcjxUMSwgVDI+JiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5maXJzdCwgdC5zZWNvbmQpOworICB9CisgIHN0YXRpYyBhdXRvIENvZXJjZShjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5maXJzdCwgdC5zZWNvbmQpOworICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8gQ29lcmNlVG9UdXBsZShUJiYgdCkgeworICByZXR1cm4gQ29lcmNlclRvVHVwbGU8VD46OkNvZXJjZShzdGQ6OmZvcndhcmQ8VD4odCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8gQ29lcmNlVG9UdXBsZShUJiB0KSB7CisgIHJldHVybiBDb2VyY2VyVG9UdXBsZTxUPjo6Q29lcmNlKHQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2F1dG8gQ29lcmNlVG9UdXBsZShjb25zdCBUJiB0KSB7CisgIHJldHVybiBDb2VyY2VyVG9UdXBsZTxUPjo6Q29lcmNlKHQpOworfQorCisvLyBNYWNyby4KKworI2RlZmluZSBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2MCwgdjEsIG1heWJlX3R1cGxlKSAgXAorICBhdXRvIHR1cGxlIyN2MCMjdjEgPSBDb2VyY2VUb1R1cGxlKG1heWJlX3R1cGxlKTsgXAorICBhdXRvJiB2MCA9IHN0ZDo6Z2V0PDA+KHR1cGxlIyN2MCMjdjEpOyAgICAgICAgICAgXAorICBhdXRvJiB2MSA9IHN0ZDo6Z2V0PDE+KHR1cGxlIyN2MCMjdjEpCisKKyNkZWZpbmUgU1RSVUNUVVJFRF9CSU5ESU5HXzModjAsIHYxLCB2MiwgbWF5YmVfdHVwbGUpICBcCisgIGF1dG8gdHVwbGUjI3YwIyN2MSMjdjIgPSBDb2VyY2VUb1R1cGxlKG1heWJlX3R1cGxlKTsgXAorICBhdXRvJiB2MCA9IHN0ZDo6Z2V0PDA+KHR1cGxlIyN2MCMjdjEjI3YyKTsgICAgICAgICAgIFwKKyAgYXV0byYgdjEgPSBzdGQ6OmdldDwxPih0dXBsZSMjdjAjI3YxIyN2Mik7ICAgICAgICAgICBcCisgIGF1dG8mIHYyID0gc3RkOjpnZXQ8Mj4odHVwbGUjI3YwIyN2MSMjdjIpCisKKyNkZWZpbmUgU1RSVUNUVVJFRF9CSU5ESU5HXzQodjAsIHYxLCB2MiwgdjMsIG1heWJlX3R1cGxlKSAgXAorICBhdXRvIHR1cGxlIyN2MCMjdjEjI3YyIyN2MyA9IENvZXJjZVRvVHVwbGUobWF5YmVfdHVwbGUpOyBcCisgIGF1dG8mIHYwID0gc3RkOjpnZXQ8MD4odHVwbGUjI3YwIyN2MSMjdjIjI3YzKTsgICAgICAgICAgIFwKKyAgYXV0byYgdjEgPSBzdGQ6OmdldDwxPih0dXBsZSMjdjAjI3YxIyN2MiMjdjMpOyAgICAgICAgICAgXAorICBhdXRvJiB2MiA9IHN0ZDo6Z2V0PDI+KHR1cGxlIyN2MCMjdjEjI3YyIyN2Myk7ICAgICAgICAgICBcCisgIGF1dG8mIHYzID0gc3RkOjpnZXQ8Mz4odHVwbGUjI3YwIyN2MSMjdjIjI3YzKQorCisjZGVmaW5lIFNUUlVDVFVSRURfQklORElOR181KHYwLCB2MSwgdjIsIHYzLCB2NCwgbWF5YmVfdHVwbGUpICBcCisgIGF1dG8gdHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCA9IENvZXJjZVRvVHVwbGUobWF5YmVfdHVwbGUpOyBcCisgIGF1dG8mIHYwID0gc3RkOjpnZXQ8MD4odHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCk7ICAgICAgICAgICBcCisgIGF1dG8mIHYxID0gc3RkOjpnZXQ8MT4odHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCk7ICAgICAgICAgICBcCisgIGF1dG8mIHYyID0gc3RkOjpnZXQ8Mj4odHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCk7ICAgICAgICAgICBcCisgIGF1dG8mIHYzID0gc3RkOjpnZXQ8Mz4odHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCk7ICAgICAgICAgICBcCisgIGF1dG8mIHY0ID0gc3RkOjpnZXQ8ND4odHVwbGUjI3YwIyN2MSMjdjIjI3YzIyN2NCkKKworI2VuZGlmICAvLyBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKKworI2VuZGlmICAvLyBDcHAxN09uQ3BwMTRfREVGSU5FRApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9lZmZlY3RzL1NrUnVudGltZUVmZmVjdC5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9lZmZlY3RzL1NrUnVudGltZUVmZmVjdC5oCmluZGV4IGIzZjIxYjEuLjg1ODEzOTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUvZWZmZWN0cy9Ta1J1bnRpbWVFZmZlY3QuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2VmZmVjdHMvU2tSdW50aW1lRWZmZWN0LmgKQEAgLTQ3Niw2ICs0NzYsMTYgQEAKICAgICB1c2luZyBJTkhFUklURUQgPSBTa1J1bnRpbWVFZmZlY3RCdWlsZGVyOwogfTsKIAorI2lmZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxTa1J1bnRpbWVFZmZlY3Q6OlJlc3VsdD4geworICBzdGF0aWMgc3RkOjp0dXBsZTxza19zcDxTa1J1bnRpbWVFZmZlY3Q+LCBTa1N0cmluZz4gQ29lcmNlKAorICAgICAgY29uc3QgU2tSdW50aW1lRWZmZWN0OjpSZXN1bHQmJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmVmZmVjdCwgdC5lcnJvclRleHQpOworICB9Cit9OworI2VuZGlmCisKICNlbmRpZiAgLy8gU0tfRU5BQkxFX1NLU0wKIAogI2VuZGlmICAvLyBTa1J1bnRpbWVFZmZlY3RfREVGSU5FRApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9wcml2YXRlL1NrQ29sb3JEYXRhLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvU2tDb2xvckRhdGEuaAppbmRleCBhNTllN2IwLi42YjUyOWU2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvU2tDb2xvckRhdGEuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3ByaXZhdGUvU2tDb2xvckRhdGEuaApAQCAtODIsMTkgKzgyLDI3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgU2tQTUNvbG9yIFNrU3dpenpsZV9SR0JBX3RvX1BNQ29sb3IodWludDMyX3QgYykgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIHJldHVybiAoR2V0U2tQbWNvbG9yKCkgPT0gU2tQbWNvbG9ySXNSZ2JhKSA/IGMgOiBTa1N3aXp6bGVfUkIoYyk7CisjZWxzZQogI2lmZGVmIFNLX1BNQ09MT1JfSVNfUkdCQQogICAgIHJldHVybiBjOwogI2Vsc2UKICAgICByZXR1cm4gU2tTd2l6emxlX1JCKGMpOwogI2VuZGlmCisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBTa1BNQ29sb3IgU2tTd2l6emxlX0JHUkFfdG9fUE1Db2xvcih1aW50MzJfdCBjKSB7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgcmV0dXJuIChHZXRTa1BtY29sb3IoKSA9PSBTa1BtY29sb3JJc0JncmEpID8gYyA6IFNrU3dpenpsZV9SQihjKTsKKyNlbHNlCiAjaWZkZWYgU0tfUE1DT0xPUl9JU19CR1JBCiAgICAgcmV0dXJuIGM7CiAjZWxzZQogICAgIHJldHVybiBTa1N3aXp6bGVfUkIoYyk7CiAjZW5kaWYKKyNlbmRpZgogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTQwMCwxMSArNDA4LDE1IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgU2s0ZiBzd2l6emxlX3JiX2lmX2JncmEoY29uc3QgU2s0ZiYgeCkgeworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICAgIHJldHVybiAoR2V0U2tQbWNvbG9yKCkgPT0gU2tQbWNvbG9ySXNCZ3JhKSA/IHN3aXp6bGVfcmIoeCkgOiB4OworI2Vsc2UKICNpZmRlZiBTS19QTUNPTE9SX0lTX0JHUkEKICAgICByZXR1cm4gc3dpenpsZV9yYih4KTsKICNlbHNlCiAgICAgcmV0dXJuIHg7CiAjZW5kaWYKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIFNrNGYgU2s0Zl9mcm9tTDMyKHVpbnQzMl90IHB4KSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrb3R0aWUvc3JjL2VmZmVjdHMvRGlzcGxhY2VtZW50TWFwRWZmZWN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9EaXNwbGFjZW1lbnRNYXBFZmZlY3QuY3BwCmluZGV4IDE5OGE3MTUuLmYxYjQ0NjIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9EaXNwbGFjZW1lbnRNYXBFZmZlY3QuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9EaXNwbGFjZW1lbnRNYXBFZmZlY3QuY3BwCkBAIC0zOTQsNyArMzk0LDExIEBACiBza19zcDxza3NnOjpSZW5kZXJOb2RlPiBFZmZlY3RCdWlsZGVyOjphdHRhY2hEaXNwbGFjZW1lbnRNYXBFZmZlY3QoCiAgICAgICAgIGNvbnN0IHNranNvbjo6QXJyYXlWYWx1ZSYganByb3BzLCBza19zcDxza3NnOjpSZW5kZXJOb2RlPiBsYXllcikgY29uc3QgewogI2lmZGVmIFNLX0VOQUJMRV9TS1NMCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gWyBkaXNwbCwgZGlzcGxfc2l6ZSBdID0gRGlzcGxhY2VtZW50TWFwQWRhcHRlcjo6R2V0RGlzcGxhY2VtZW50U291cmNlKGpwcm9wcywgdGhpcyk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGRpc3BsLCBkaXNwbF9zaXplLCBEaXNwbGFjZW1lbnRNYXBBZGFwdGVyOjpHZXREaXNwbGFjZW1lbnRTb3VyY2UoanByb3BzLCB0aGlzKSk7CisjZW5kaWYKIAogICAgIGF1dG8gZGlzcGxfbm9kZSA9IERpc3BsYWNlbWVudE5vZGU6Ok1ha2UobGF5ZXIsIGZMYXllclNpemUsIHN0ZDo6bW92ZShkaXNwbCksIGRpc3BsX3NpemUpOwogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9tb2R1bGVzL3Nrb3R0aWUvc3JjL2VmZmVjdHMvRnJhY3RhbE5vaXNlRWZmZWN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9GcmFjdGFsTm9pc2VFZmZlY3QuY3BwCmluZGV4IGU2NGQ1YzAuLjYyNGFmNmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9GcmFjdGFsTm9pc2VFZmZlY3QuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL21vZHVsZXMvc2tvdHRpZS9zcmMvZWZmZWN0cy9GcmFjdGFsTm9pc2VFZmZlY3QuY3BwCkBAIC00NjksNyArNDY5LDExIEBACiAgICAgdm9pZCBvblN5bmMoKSBvdmVycmlkZSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIG4gPSB0aGlzLT5ub2RlKCk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGNvbnN0IGF1dG8gW25vaXNlX3BsYW5lcywgbm9pc2Vfd2VpZ2h0XSA9IHRoaXMtPm5vaXNlKCk7CisjZWxzZQorICAgICAgICBjb25zdCBTVFJVQ1RVUkVEX0JJTkRJTkdfMihub2lzZV9wbGFuZXMsIG5vaXNlX3dlaWdodCwgdGhpcy0+bm9pc2UoKSk7CisjZW5kaWYKIAogICAgICAgICBuLT5zZXRPY3RhdmVzKFNrVFBpbihmQ29tcGxleGl0eSwgMS4wZiwgMjAuMGYpKTsKICAgICAgICAgbi0+c2V0UGVyc2lzdGVuY2UoU2tUUGluKGZTdWJJbmZsdWVuY2UgKiAwLjAxZiwgMC4wZiwgMTAwLjBmKSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlYy5jcHAKaW5kZXggNDk3ZmY5NS4uY2YxYzVjZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvZGVjL1NrQ29kZWMuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjLmNwcApAQCAtNjg0LDExICs2ODQsMTYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGtSR0JfNTY1X1NrQ29sb3JUeXBlOgogICAgICAgICAgICAgaWYgKGZvckNvbG9yVGFibGUpIHsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgICAgICAgICAgICAgICAqb3V0Rm9ybWF0ID0gKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzUmdiYSkgPyBza2Ntc19QaXhlbEZvcm1hdF9SR0JBXzg4ODgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBza2Ntc19QaXhlbEZvcm1hdF9SR0JBXzg4ODg7CisjZWxzZQogI2lmZGVmIFNLX1BNQ09MT1JfSVNfUkdCQQogICAgICAgICAgICAgICAgICpvdXRGb3JtYXQgPSBza2Ntc19QaXhlbEZvcm1hdF9SR0JBXzg4ODg7CiAjZWxzZQogICAgICAgICAgICAgICAgICpvdXRGb3JtYXQgPSBza2Ntc19QaXhlbEZvcm1hdF9CR1JBXzg4ODg7CiAjZW5kaWYKKyNlbmRpZgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKm91dEZvcm1hdCA9IHNrY21zX1BpeGVsRm9ybWF0X0JHUl81NjU7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29kZWMvU2tDb2RlY1ByaXYuaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjUHJpdi5oCmluZGV4IGVjMGY3YzkuLmFiNzkwYzIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjUHJpdi5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb2RlYy9Ta0NvZGVjUHJpdi5oCkBAIC0yMjYsMTEgKzIyNiwxNiBAQAogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfcmdiYShTa0NvbG9yVHlwZSBjb2xvclR5cGUpIHsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgICByZXR1cm4gKEdldFNrUG1jb2xvcigpID09IFNrUG1jb2xvcklzUmdiYSkgPyAoa0JHUkFfODg4OF9Ta0NvbG9yVHlwZSAhPSBjb2xvclR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGtCR1JBXzg4ODhfU2tDb2xvclR5cGUgPT0gY29sb3JUeXBlKTsKKyNlbHNlCiAjaWZkZWYgU0tfUE1DT0xPUl9JU19SR0JBCiAgICAgcmV0dXJuIChrQkdSQV84ODg4X1NrQ29sb3JUeXBlICE9IGNvbG9yVHlwZSk7CiAjZWxzZQogICAgIHJldHVybiAoa1JHQkFfODg4OF9Ta0NvbG9yVHlwZSA9PSBjb2xvclR5cGUpOwogI2VuZGlmCisjZW5kaWYKIH0KIAogLy8gTWV0aG9kIGZvciBjb3ZlcnRpbmcgdG8gYSAzMiBiaXQgcGl4ZWwuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tCbGl0dGVyLmNwcAppbmRleCBkMGUzMThkLi5mYjlmOTI4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlci5jcHAKQEAgLTc5NSwyOCArNzk1LDI1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzd2l0Y2ggKGRldmljZS5jb2xvclR5cGUoKSkgewotICAgICAgICBjYXNlIGtOMzJfU2tDb2xvclR5cGU6Ci0gICAgICAgICAgICBpZiAoc2hhZGVyQ29udGV4dCkgewotICAgICAgICAgICAgICAgIHJldHVybiBhbGxvYy0+bWFrZTxTa0FSR0IzMl9TaGFkZXJfQmxpdHRlcj4oZGV2aWNlLCAqcGFpbnQsIHNoYWRlckNvbnRleHQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwYWludC0+Z2V0Q29sb3IoKSA9PSBTS19Db2xvckJMQUNLKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWtlPFNrQVJHQjMyX0JsYWNrX0JsaXR0ZXI+KGRldmljZSwgKnBhaW50KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGFpbnQtPmdldEFscGhhKCkgPT0gMHhGRikgewotICAgICAgICAgICAgICAgIHJldHVybiBhbGxvYy0+bWFrZTxTa0FSR0IzMl9PcGFxdWVfQmxpdHRlcj4oZGV2aWNlLCAqcGFpbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2MtPm1ha2U8U2tBUkdCMzJfQmxpdHRlcj4oZGV2aWNlLCAqcGFpbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGNhc2Uga1JHQl81NjVfU2tDb2xvclR5cGU6Ci0gICAgICAgICAgICBpZiAoc2hhZGVyQ29udGV4dCAmJiBTa1JHQjU2NV9TaGFkZXJfQmxpdHRlcjo6U3VwcG9ydHMoZGV2aWNlLCAqcGFpbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWtlPFNrUkdCNTY1X1NoYWRlcl9CbGl0dGVyPihkZXZpY2UsICpwYWludCwgc2hhZGVyQ29udGV4dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVfU2tSUF9vcl9Ta1ZNQmxpdHRlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBTa0FTU0VSVChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2MtPm1ha2U8U2tOdWxsQmxpdHRlcj4oKTsKKyAgICBpZiAoZGV2aWNlLmNvbG9yVHlwZSgpID09IGtOMzJfU2tDb2xvclR5cGUpIHsKKyAgICAgICAgaWYgKHNoYWRlckNvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBhbGxvYy0+bWFrZTxTa0FSR0IzMl9TaGFkZXJfQmxpdHRlcj4oZGV2aWNlLCAqcGFpbnQsIHNoYWRlckNvbnRleHQpOworICAgICAgICB9IGVsc2UgaWYgKHBhaW50LT5nZXRDb2xvcigpID09IFNLX0NvbG9yQkxBQ0spIHsKKyAgICAgICAgICAgIHJldHVybiBhbGxvYy0+bWFrZTxTa0FSR0IzMl9CbGFja19CbGl0dGVyPihkZXZpY2UsICpwYWludCk7CisgICAgICAgIH0gZWxzZSBpZiAocGFpbnQtPmdldEFscGhhKCkgPT0gMHhGRikgeworICAgICAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWtlPFNrQVJHQjMyX09wYXF1ZV9CbGl0dGVyPihkZXZpY2UsICpwYWludCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gYWxsb2MtPm1ha2U8U2tBUkdCMzJfQmxpdHRlcj4oZGV2aWNlLCAqcGFpbnQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChkZXZpY2UuY29sb3JUeXBlKCkgPT0ga1JHQl81NjVfU2tDb2xvclR5cGUpIHsKKyAgICAgICAgaWYgKHNoYWRlckNvbnRleHQgJiYgU2tSR0I1NjVfU2hhZGVyX0JsaXR0ZXI6OlN1cHBvcnRzKGRldmljZSwgKnBhaW50KSkgeworICAgICAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWtlPFNrUkdCNTY1X1NoYWRlcl9CbGl0dGVyPihkZXZpY2UsICpwYWludCwgc2hhZGVyQ29udGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlX1NrUlBfb3JfU2tWTUJsaXR0ZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFNrQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWtlPFNrTnVsbEJsaXR0ZXI+KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXJfU3ByaXRlLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlcl9TcHJpdGUuY3BwCmluZGV4IDhjMWIyZWYuLjBlZjRkOWIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlcl9TcHJpdGUuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQmxpdHRlcl9TcHJpdGUuY3BwCkBAIC0yMDQsOSArMjA0LDYgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIWJsaXR0ZXIpIHsKICAgICAgICAgICAgIHN3aXRjaCAoZHN0LmNvbG9yVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBrTjMyX1NrQ29sb3JUeXBlOgotICAgICAgICAgICAgICAgICAgICBibGl0dGVyID0gU2tTcHJpdGVCbGl0dGVyOjpDaG9vc2VMMzIoc291cmNlLCBwYWludCwgYWxsb2MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIGtSR0JfNTY1X1NrQ29sb3JUeXBlOgogICAgICAgICAgICAgICAgICAgICBibGl0dGVyID0gU2tTcHJpdGVCbGl0dGVyOjpDaG9vc2VMNTY1KHNvdXJjZSwgcGFpbnQsIGFsbG9jKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTQsNiArMjExLDkgQEAKICAgICAgICAgICAgICAgICAgICAgYmxpdHRlciA9IFNrU3ByaXRlQmxpdHRlcjo6Q2hvb3NlTEE4KHNvdXJjZSwgcGFpbnQsIGFsbG9jKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRzdC5jb2xvclR5cGUoKSA9PSBrTjMyX1NrQ29sb3JUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBibGl0dGVyID0gU2tTcHJpdGVCbGl0dGVyOjpDaG9vc2VMMzIoc291cmNlLCBwYWludCwgYWxsb2MpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0JsdXJNRi5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0JsdXJNRi5jcHAKaW5kZXggZjUxNjY5Ny4uY2JmZjQwZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tCbHVyTUYuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQmx1ck1GLmNwcApAQCAtMTI4MCwxMSArMTI4MCwxOSBAQAogICAgIGlmIChHckRpcmVjdENvbnRleHQqIGRDb250ZXh0ID0gckNvbnRleHQtPmFzRGlyZWN0Q29udGV4dCgpKSB7CiAgICAgICAgIC8vIFRoZSBncHUgdGhyZWFkIGdldHMgcHJpb3JpdHkgb3ZlciB0aGUgcmVjb3JkaW5nIHRocmVhZHMuIElmIHRoZSBncHUgdGhyZWFkIGlzIGZpcnN0LAogICAgICAgICAvLyBpdCBjcmFtcyBhIGxhenkgcHJveHkgaW50byB0aGUgY2FjaGUgYW5kIHRoZW4gZmlsbHMgaXQgaW4gbGF0ZXIuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtsYXp5VmlldywgdHJhbXBvbGluZV0gPSBHclRocmVhZFNhZmVDYWNoZTo6Q3JlYXRlTGF6eVZpZXcoZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHckNvbG9yVHlwZTo6a0FscGhhXzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0JsdXJyZWRSUmVjdE1hc2tPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0JhY2tpbmdGaXQ6OmtFeGFjdCk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihsYXp5VmlldywgdHJhbXBvbGluZSwgR3JUaHJlYWRTYWZlQ2FjaGU6OkNyZWF0ZUxhenlWaWV3KGRDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb2xvclR5cGU6OmtBbHBoYV84LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtCbHVycmVkUlJlY3RNYXNrT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tCYWNraW5nRml0OjprRXhhY3QpKTsKKyNlbmRpZgogICAgICAgICBpZiAoIWxhenlWaWV3KSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDYW52YXMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDYW52YXMuY3BwCmluZGV4IDM0ZTcwMjcuLjllZmZjNTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ2FudmFzLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0NhbnZhcy5jcHAKQEAgLTE3MjIsNiArMTcyMiwyMCBAQAogICAgIHJldHVybiBudWxscHRyOwogfQogCisjaWZkZWYgU1RBUkJPQVJECitpbnRwdHJfdCBTa0NhbnZhczo6Z2V0UmVuZGVyVGFyZ2V0SGFuZGxlKCkgY29uc3QgeworICAgIGlmIChmU3VyZmFjZUJhc2UpIHsKKyAgICAgICAgR3JCYWNrZW5kUmVuZGVyVGFyZ2V0IHRhcmdldCA9CisgICAgICAgICAgICAgICAgZlN1cmZhY2VCYXNlLT5nZXRCYWNrZW5kUmVuZGVyVGFyZ2V0KFNrU3VyZmFjZTo6a0ZsdXNoUmVhZF9CYWNrZW5kSGFuZGxlQWNjZXNzKTsKKyAgICAgICAgR3JHTEZyYW1lYnVmZmVySW5mbyBpbmZvOworICAgICAgICBpZiAodGFyZ2V0LmdldEdMRnJhbWVidWZmZXJJbmZvKCZpbmZvKSkgeworICAgICAgICAgICAgcmV0dXJuIGluZm8uZkZCT0lEOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIHZvaWQgU2tDYW52YXM6OmRyYXdEUlJlY3QoY29uc3QgU2tSUmVjdCYgb3V0ZXIsIGNvbnN0IFNrUlJlY3QmIGlubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCkgewogICAgIFRSQUNFX0VWRU5UMCgic2tpYSIsIFRSQUNFX0ZVTkMpOwpAQCAtMjM2NSw4ICsyMzc5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrUG9pbnQgb3JpZ2luLCBjb25zdCBTa0ZvbnQmIGZvbnQsIGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7CiAgICAgaWYgKGNvdW50IDw9IDApIHsgcmV0dXJuOyB9CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbcG9zaXRpb25zLCByb3RhdGVTY2FsZXNdID0KICAgICAgICAgICAgIGZTY3JhdGNoR2x5cGhSdW5CdWlsZGVyLT5jb252ZXJ0UlNYRm9ybShTa01ha2VTcGFuKHhmb3JtcywgY291bnQpKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocG9zaXRpb25zLCByb3RhdGVTY2FsZXMsCisgICAgICAgICAgICBmU2NyYXRjaEdseXBoUnVuQnVpbGRlci0+Y29udmVydFJTWEZvcm0oU2tNYWtlU3Bhbih4Zm9ybXMsIGNvdW50KSkpOworI2VuZGlmCiAKICAgICBTa0dseXBoUnVuIGdseXBoUnVuIHsKICAgICAgICAgICAgIGZvbnQsCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0NvbG9yRmlsdGVyLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCmluZGV4IDM4YzdlZTUuLmI2NTlhYWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXIuY3BwCkBAIC0xNzEsMTQgKzE3MSwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckNvbG9ySW5mbyYgZHN0Q29sb3JJbmZvKSBjb25zdCBvdmVycmlkZSB7CiAgICAgICAgIEdyRnJhZ21lbnRQcm9jZXNzb3IqIG9yaWdpbmFsSW5wdXRGUCA9IGlucHV0RlAuZ2V0KCk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW2lubmVyU3VjY2VzcywgaW5uZXJGUF0gPQogICAgICAgICAgICAgICAgIGZJbm5lci0+YXNGcmFnbWVudFByb2Nlc3NvcihzdGQ6Om1vdmUoaW5wdXRGUCksIGNvbnRleHQsIGRzdENvbG9ySW5mbyk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpbm5lclN1Y2Nlc3MsIGlubmVyRlAsCisgICAgICAgICAgICAgICAgZklubmVyLT5hc0ZyYWdtZW50UHJvY2Vzc29yKHN0ZDo6bW92ZShpbnB1dEZQKSwgY29udGV4dCwgZHN0Q29sb3JJbmZvKSk7CisjZW5kaWYKICAgICAgICAgaWYgKCFpbm5lclN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHJldHVybiBHckZQRmFpbHVyZShzdGQ6Om1vdmUoaW5uZXJGUCkpOwogICAgICAgICB9CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW291dGVyU3VjY2Vzcywgb3V0ZXJGUF0gPQogICAgICAgICAgICAgICAgIGZPdXRlci0+YXNGcmFnbWVudFByb2Nlc3NvcihzdGQ6Om1vdmUoaW5uZXJGUCksIGNvbnRleHQsIGRzdENvbG9ySW5mbyk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihvdXRlclN1Y2Nlc3MsIG91dGVyRlAsCisgICAgICAgICAgICAgICAgZk91dGVyLT5hc0ZyYWdtZW50UHJvY2Vzc29yKHN0ZDo6bW92ZShpbm5lckZQKSwgY29udGV4dCwgZHN0Q29sb3JJbmZvKSk7CisjZW5kaWYKICAgICAgICAgaWYgKCFvdXRlclN1Y2Nlc3MpIHsKICAgICAgICAgICAgIC8vIEluIHRoZSByYXJlIGV2ZW50IHRoYXQgdGhlIG91dGVyIEZQIGNhbm5vdCBiZSBidWlsdCwgd2UgaGF2ZSBubyBnb29kIHdheSBvZgogICAgICAgICAgICAgLy8gc2VwYXJhdGluZyB0aGUgaW5wdXRGUCBmcm9tIHRoZSBpbm5lckZQLCBzbyB3ZSBuZWVkIHRvIHJldHVybiBhIGNsb25lZCBpbnB1dEZQLgpAQCAtMzYzLDggKzM3MywxMyBAQAogICAgICAgICBHckNvbG9ySW5mbyBkc3QgPSB7ZHN0Q29sb3JJbmZvLmNvbG9yVHlwZSgpLCBkc3RDb2xvckluZm8uYWxwaGFUeXBlKCksIGRzdENTfSwKICAgICAgICAgICAgICAgICB3b3JraW5nID0ge2RzdENvbG9ySW5mby5jb2xvclR5cGUoKSwgd29ya2luZ0FULCB3b3JraW5nQ1N9OwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtvaywgZnBdID0gYXNfQ0ZCKGZDaGlsZCktPmFzRnJhZ21lbnRQcm9jZXNzb3IoCiAgICAgICAgICAgICAgICAgR3JDb2xvclNwYWNlWGZvcm1FZmZlY3Q6Ok1ha2Uoc3RkOjptb3ZlKGlucHV0RlApLCBkc3Qsd29ya2luZyksIGNvbnRleHQsIHdvcmtpbmcpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIob2ssIGZwLCBhc19DRkIoZkNoaWxkKS0+YXNGcmFnbWVudFByb2Nlc3NvcigKKyAgICAgICAgICAgICAgICBHckNvbG9yU3BhY2VYZm9ybUVmZmVjdDo6TWFrZShzdGQ6Om1vdmUoaW5wdXRGUCksIGRzdCx3b3JraW5nKSwgY29udGV4dCwgd29ya2luZykpOworI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIG9rID8gR3JGUFN1Y2Nlc3MoR3JDb2xvclNwYWNlWGZvcm1FZmZlY3Q6Ok1ha2Uoc3RkOjptb3ZlKGZwKSwgd29ya2luZyxkc3QpKQogICAgICAgICAgICAgICAgICAgOiBHckZQRmFpbHVyZShzdGQ6Om1vdmUoZnApKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXJfTWF0cml4LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29sb3JGaWx0ZXJfTWF0cml4LmNwcAppbmRleCBhMGEwNDdjLi4zYzZjYjk1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0NvbG9yRmlsdGVyX01hdHJpeC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDb2xvckZpbHRlcl9NYXRyaXguY3BwCkBAIC05Nyw3ICs5NywxMSBAQAogICAgICAgICAgICAgc2t2bTo6RjMyIGJpYXMgPSBiID09IDAuMGYgPyBwLT5zcGxhdCgwLjBmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwLT51bmlmb3JtRih1bmlmb3Jtcy0+cHVzaEYoYikpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbeCx5LHosd10gPSB4eXp3OworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHgseSx6LHcsIHh5encpOworI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gY3VzdG9tX21hZChmTWF0cml4WzAraio1XSwgeCwKICAgICAgICAgICAgICAgICAgICBjdXN0b21fbWFkKGZNYXRyaXhbMStqKjVdLCB5LAogICAgICAgICAgICAgICAgICAgIGN1c3RvbV9tYWQoZk1hdHJpeFsyK2oqNV0sIHosCkBAIC0xMDksMTAgKzExMywxOCBAQAogICAgIGMgPSB1bnByZW11bChjKTsKIAogICAgIGlmIChmRG9tYWluID09IERvbWFpbjo6a0hTTEEpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW2gscyxsLGFdID0gYXBwbHlfbWF0cml4KHAtPnRvX2hzbGEoYykpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzQoaCxzLGwsYSwgYXBwbHlfbWF0cml4KHAtPnRvX2hzbGEoYykpKTsKKyNlbmRpZgogICAgICAgICBjID0gcC0+dG9fcmdiYSh7aCxzLGwsYX0pOwogICAgIH0gZWxzZSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtyLGcsYixhXSA9IGFwcGx5X21hdHJpeChjKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHIsZyxiLGEsIGFwcGx5X21hdHJpeChjKSk7CisjZW5kaWYKICAgICAgICAgYyA9IHtyLGcsYixhfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ29udG91ck1lYXN1cmUuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDb250b3VyTWVhc3VyZS5jcHAKaW5kZXggNzc1NWI0Yy4uYjQzNGNkMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDb250b3VyTWVhc3VyZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDb250b3VyTWVhc3VyZS5jcHAKQEAgLTM0Niw3ICszNDYsMTEgQEAKIAogICAgIGF1dG8gZW5kID0gU2tQYXRoUHJpdjo6SXRlcmF0ZShmUGF0aCkuZW5kKCk7CiAgICAgZm9yICg7IGZJdGVyICE9IGVuZDsgKytmSXRlcikgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbdmVyYiwgcHRzLCB3XSA9ICpmSXRlcjsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgKmZJdGVyKTsKKyNlbmRpZgogICAgICAgICBpZiAoaGF2ZVNlZW5Nb3ZlVG8gJiYgdmVyYiA9PSBTa1BhdGhWZXJiOjprTW92ZSkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ3B1LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrQ3B1LmNwcAppbmRleCBhODhmNDk4Li40OWFiYzQ2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0NwdS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tDcHUuY3BwCkBAIC0xMCw2ICsxMCwxMCBAQAogI2luY2x1ZGUgImluY2x1ZGUvcHJpdmF0ZS9Ta09uY2UuaCIKICNpbmNsdWRlICJzcmMvY29yZS9Ta0NwdS5oIgogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisjaW5jbHVkZSAic3RhcmJvYXJkL2NwdV9mZWF0dXJlcy5oIgorI2VuZGlmCisKICNpZiBkZWZpbmVkKFNLX0NQVV9YODYpCiAgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCiAgICAgICAgICNpbmNsdWRlIDxpbnRyaW4uaD4KQEAgLTgxLDcgKzg1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGtIV0NBUF9BU0lNREhQID0gKDE8PDEwKTsKIAogICAgICAgICB1aW50MzJfdCBmZWF0dXJlcyA9IDA7CisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisgICAgICAgIHVpbnQzMl90IGh3Y2FwcyA9IDA7CisgICAgICAgIFNiQ1BVRmVhdHVyZXMgY3B1X2ZlYXR1cmVzOworICAgICAgICBpZiAoU2JDUFVGZWF0dXJlc0dldCgmY3B1X2ZlYXR1cmVzKSkgeworICAgICAgICAgICAgaHdjYXBzID0gY3B1X2ZlYXR1cmVzLmh3Y2FwOworICAgICAgICB9CisjZWxzZQogICAgICAgICB1aW50MzJfdCBod2NhcHMgPSBnZXRhdXh2YWwoQVRfSFdDQVApOworI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKICAgICAgICAgaWYgKGh3Y2FwcyAmIGtIV0NBUF9DUkMzMiAgKSB7IGZlYXR1cmVzIHw9IFNrQ3B1OjpDUkMzMjsgfQogICAgICAgICBpZiAoaHdjYXBzICYga0hXQ0FQX0FTSU1ESFApIHsgZmVhdHVyZXMgfD0gU2tDcHU6OkFTSU1ESFA7IH0KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tEYXRhLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRGF0YS5jcHAKaW5kZXggZjk1NzU0Mi4uNDY3ZDA4MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tEYXRhLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0RhdGEuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAKICAgICBza19mbXVubWFwKGFkZHIsIGxlbmd0aCk7CiB9CiAKLXNrX3NwPFNrRGF0YT4gU2tEYXRhOjpNYWtlRnJvbUZJTEUoRklMRSogZikgeworc2tfc3A8U2tEYXRhPiBTa0RhdGE6Ok1ha2VGcm9tRklMRShTa0ZpbGUqIGYpIHsKICAgICBzaXplX3Qgc2l6ZTsKICAgICB2b2lkKiBhZGRyID0gc2tfZm1tYXAoZiwgJnNpemUpOwogICAgIGlmIChudWxscHRyID09IGFkZHIpIHsKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiBza19zcDxTa0RhdGE+IFNrRGF0YTo6TWFrZUZyb21GaWxlTmFtZShjb25zdCBjaGFyIHBhdGhbXSkgewotICAgIEZJTEUqIGYgPSBwYXRoID8gc2tfZm9wZW4ocGF0aCwga1JlYWRfU2tGSUxFX0ZsYWcpIDogbnVsbHB0cjsKKyAgICBTa0ZpbGUqIGYgPSBwYXRoID8gc2tfZm9wZW4ocGF0aCwga1JlYWRfU2tGSUxFX0ZsYWcpIDogbnVsbHB0cjsKICAgICBpZiAobnVsbHB0ciA9PSBmKSB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRGV2aWNlLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRGV2aWNlLmNwcAppbmRleCA0NzZhMTllLi40YjhkNjQ2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0RldmljZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tEZXZpY2UuY3BwCkBAIC00NjYsOSArNDY2LDE4IEBACiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBjb25zdCBTa000NCBvcmlnaW5hbExvY2FsVG9EZXZpY2UgPSB0aGlzLT5sb2NhbFRvRGV2aWNlNDQoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBmb3IgKGF1dG8gW2ksIGdseXBoSUQsIHBvc10gOiBTa01ha2VFbnVtZXJhdGUocnVuLnNvdXJjZSgpKSkgeworI2Vsc2UKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVtIDogU2tNYWtlRW51bWVyYXRlKHJ1bi5zb3VyY2UoKSkpIHsKKyAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhpLCBnbHlwaElELCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBzaGFyZWRHbHlwaElEID0gZ2x5cGhJRDsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICAgICAgYXV0byBbc2Nvcywgc3Npbl0gPSBydW4uc2NhbGVkUm90YXRpb25zKClbaV07CisjZWxzZQorICAgICAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHNjb3MsIHNzaW4sIHJ1bi5zY2FsZWRSb3RhdGlvbnMoKVtpXSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBTa1JTWGZvcm0gcnN4Rm9ybSA9IFNrUlNYZm9ybTo6TWFrZShzY29zLCBzc2luLCBwb3MueCgpLCBwb3MueSgpKTsKICAgICAgICAgICAgICAgICBTa01hdHJpeCBnbHlwaFRvTG9jYWw7CiAgICAgICAgICAgICAgICAgZ2x5cGhUb0xvY2FsLnNldFJTWGZvcm0ocnN4Rm9ybSkucG9zdFRyYW5zbGF0ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRHJhd190ZXh0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRHJhd190ZXh0LmNwcAppbmRleCA1OTg5ZjIyLi5iZDZkY2NkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0RyYXdfdGV4dC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tEcmF3X3RleHQuY3BwCkBAIC01NCw3ICs1NCwxMiBAQAogICAgIGJvb2wgdXNlUmVnaW9uID0gZlJDLT5pc0JXKCkgJiYgIWZSQy0+aXNSZWN0KCk7CiAKICAgICBpZiAodXNlUmVnaW9uKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBmb3IgKGF1dG8gW3ZhcmlhbnQsIHBvc10gOiBkcmF3YWJsZXMtPmRyYXdhYmxlKCkpIHsKKyNlbHNlCisgICAgICAgIGZvciAoYXV0byBpdGVtIDogZHJhd2FibGVzLT5kcmF3YWJsZSgpKSB7CisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2YXJpYW50LCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIFNrR2x5cGgqIGdseXBoID0gdmFyaWFudC5nbHlwaCgpOwogICAgICAgICAgICAgaWYgKGNoZWNrX2dseXBoX3Bvc2l0aW9uKHBvcykpIHsKICAgICAgICAgICAgICAgICBTa01hc2sgbWFzayA9IGdseXBoLT5tYXNrKHBvcyk7CkBAIC04MSw3ICs4NiwxMiBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIFNrSVJlY3QgY2xpcEJvdW5kcyA9IGZSQy0+aXNCVygpID8gZlJDLT5id1JnbigpLmdldEJvdW5kcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZlJDLT5hYVJnbigpLmdldEJvdW5kcygpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgZm9yIChhdXRvIFt2YXJpYW50LCBwb3NdIDogZHJhd2FibGVzLT5kcmF3YWJsZSgpKSB7CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IGRyYXdhYmxlcy0+ZHJhd2FibGUoKSkgeworICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmFyaWFudCwgcG9zLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgICAgICBTa0dseXBoKiBnbHlwaCA9IHZhcmlhbnQuZ2x5cGgoKTsKICAgICAgICAgICAgIGlmIChjaGVja19nbHlwaF9wb3NpdGlvbihwb3MpKSB7CiAgICAgICAgICAgICAgICAgU2tNYXNrIG1hc2sgPSBnbHlwaC0+bWFzayhwb3MpOwpAQCAtMTE1LDcgKzEyNSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXIgc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBTa1BvaW50IG9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KSBjb25zdCB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmFyaWFudCwgcG9zXSA6IGRyYXdhYmxlcy0+ZHJhd2FibGUoKSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IGRyYXdhYmxlcy0+ZHJhd2FibGUoKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2YXJpYW50LCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgY29uc3QgU2tQYXRoKiBwYXRoID0gdmFyaWFudC5wYXRoKCk7CiAgICAgICAgIFNrTWF0cml4IG07CiAgICAgICAgIFNrUG9pbnQgdHJhbnNsYXRlID0gb3JpZ2luICsgcG9zOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tFeGVjdXRvci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0V4ZWN1dG9yLmNwcAppbmRleCA4YjEyYjQ2Li4yZjU2MWRmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0V4ZWN1dG9yLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0V4ZWN1dG9yLmNwcApAQCAtMTMsNiArMTMsMTIgQEAKICNpbmNsdWRlIDxkZXF1ZT4KICNpbmNsdWRlIDx0aHJlYWQ+CiAKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyNpbmNsdWRlICJzdGFyYm9hcmQvc3lzdGVtLmgiCitzdGF0aWMgaW50IG51bV9jb3JlcygpIHsKKyAgcmV0dXJuIFNiU3lzdGVtR2V0TnVtYmVyT2ZQcm9jZXNzb3JzKCk7Cit9CisjZWxzZSAgLy8gZGVmaW5lZChTVEFSQk9BUkQpCiAjaWYgZGVmaW5lZChTS19CVUlMRF9GT1JfV0lOKQogICAgICNpbmNsdWRlICJzcmMvY29yZS9Ta0xlYW5XaW5kb3dzLmgiCiAgICAgc3RhdGljIGludCBudW1fY29yZXMoKSB7CkBAIC0yNiw2ICszMiw3IEBACiAgICAgICAgIHJldHVybiAoaW50KXN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOwogICAgIH0KICNlbmRpZgorI2VuZGlmICAvLyBkZWZpbmVkKFNUQVJCT0FSRCkKIAogU2tFeGVjdXRvcjo6flNrRXhlY3V0b3IoKSB7fQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0ZvbnQuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tGb250LmNwcAppbmRleCBmNzRkODY4Li4xZWIxZTZjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0ZvbnQuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrRm9udC5jcHAKQEAgLTE2OSw3ICsxNjksMTEgQEAKICAgICB9CiAgICAgY29uc3QgU2tHbHlwaElEKiBnbHlwaElEcyA9IGF0Zy5nbHlwaHMoKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlXSA9IFNrU3RyaWtlU3BlYzo6TWFrZUNhbm9uaWNhbGl6ZWQoKnRoaXMsIHBhaW50KTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoc3RyaWtlU3BlYywgc3RyaWtlVG9Tb3VyY2VTY2FsZSwgU2tTdHJpa2VTcGVjOjpNYWtlQ2Fub25pY2FsaXplZCgqdGhpcywgcGFpbnQpKTsKKyNlbmRpZgogICAgIFNrQnVsa0dseXBoTWV0cmljcyBtZXRyaWNze3N0cmlrZVNwZWN9OwogICAgIFNrU3Bhbjxjb25zdCBTa0dseXBoKj4gZ2x5cGhzID0gbWV0cmljcy5nbHlwaHMoU2tNYWtlU3BhbihnbHlwaElEcywgZ2x5cGhDb3VudCkpOwogCkBAIC0yMDcsNyArMjExLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyIHdpZHRoc1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1JlY3QgYm91bmRzW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSBjb25zdCB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3N0cmlrZVNwZWMsIHN0cmlrZVRvU291cmNlU2NhbGVdID0gU2tTdHJpa2VTcGVjOjpNYWtlQ2Fub25pY2FsaXplZCgqdGhpcywgcGFpbnQpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlLCBTa1N0cmlrZVNwZWM6Ok1ha2VDYW5vbmljYWxpemVkKCp0aGlzLCBwYWludCkpOworI2VuZGlmCiAgICAgU2tCdWxrR2x5cGhNZXRyaWNzIG1ldHJpY3N7c3RyaWtlU3BlY307CiAgICAgU2tTcGFuPGNvbnN0IFNrR2x5cGgqPiBnbHlwaHMgPSBtZXRyaWNzLmdseXBocyhTa01ha2VTcGFuKGdseXBoSURzLCBjb3VudCkpOwogCkBAIC0yMjgsNyArMjM2LDExIEBACiB9CiAKIHZvaWQgU2tGb250OjpnZXRQb3MoY29uc3QgU2tHbHlwaElEIGdseXBoSURzW10sIGludCBjb3VudCwgU2tQb2ludCBwb3NbXSwgU2tQb2ludCBvcmlnaW4pIGNvbnN0IHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbc3RyaWtlU3BlYywgc3RyaWtlVG9Tb3VyY2VTY2FsZV0gPSBTa1N0cmlrZVNwZWM6Ok1ha2VDYW5vbmljYWxpemVkKCp0aGlzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoc3RyaWtlU3BlYywgc3RyaWtlVG9Tb3VyY2VTY2FsZSwgU2tTdHJpa2VTcGVjOjpNYWtlQ2Fub25pY2FsaXplZCgqdGhpcykpOworI2VuZGlmCiAgICAgU2tCdWxrR2x5cGhNZXRyaWNzIG1ldHJpY3N7c3RyaWtlU3BlY307CiAgICAgU2tTcGFuPGNvbnN0IFNrR2x5cGgqPiBnbHlwaHMgPSBtZXRyaWNzLmdseXBocyhTa01ha2VTcGFuKGdseXBoSURzLCBjb3VudCkpOwogCkBAIC0yNDIsNyArMjU0LDExIEBACiB2b2lkIFNrRm9udDo6Z2V0WFBvcygKICAgICAgICAgY29uc3QgU2tHbHlwaElEIGdseXBoSURzW10sIGludCBjb3VudCwgU2tTY2FsYXIgeHBvc1tdLCBTa1NjYWxhciBvcmlnaW4pIGNvbnN0IHsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlXSA9IFNrU3RyaWtlU3BlYzo6TWFrZUNhbm9uaWNhbGl6ZWQoKnRoaXMpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlLCBTa1N0cmlrZVNwZWM6Ok1ha2VDYW5vbmljYWxpemVkKCp0aGlzKSk7CisjZW5kaWYKICAgICBTa0J1bGtHbHlwaE1ldHJpY3MgbWV0cmljc3tzdHJpa2VTcGVjfTsKICAgICBTa1NwYW48Y29uc3QgU2tHbHlwaCo+IGdseXBocyA9IG1ldHJpY3MuZ2x5cGhzKFNrTWFrZVNwYW4oZ2x5cGhJRHMsIGNvdW50KSk7CiAKQEAgLTI4Nyw3ICszMDMsMTEgQEAKIAogU2tTY2FsYXIgU2tGb250OjpnZXRNZXRyaWNzKFNrRm9udE1ldHJpY3MqIG1ldHJpY3MpIGNvbnN0IHsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlXSA9IFNrU3RyaWtlU3BlYzo6TWFrZUNhbm9uaWNhbGl6ZWQoKnRoaXMsIG51bGxwdHIpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlLCBTa1N0cmlrZVNwZWM6Ok1ha2VDYW5vbmljYWxpemVkKCp0aGlzLCBudWxscHRyKSk7CisjZW5kaWYKIAogICAgIFNrRm9udE1ldHJpY3Mgc3RvcmFnZTsKICAgICBpZiAobnVsbHB0ciA9PSBtZXRyaWNzKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoQnVmZmVyLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhCdWZmZXIuY3BwCmluZGV4IDMxYjI0N2EuLjRmOTBiZGIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhCdWZmZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhCdWZmZXIuY3BwCkBAIC02Miw3ICs2MiwxMiBAQAogICAgIFNrWmlwPGNvbnN0IFNrR2x5cGhJRCwgY29uc3QgU2tQb2ludD4gd2l0aE1hcHBlZFBvcyA9CiAgICAgICAgICAgICBTa01ha2VaaXAoc291cmNlLmdldDwwPigpLCBmUG9zaXRpb25zLmdldCgpKTsKICAgICBTa0dseXBoVmFyaWFudCogcGFja2VkSURDdXJzb3IgPSBmTXVsdGlCdWZmZXIuZ2V0KCk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbZ2x5cGhJRCwgcG9zXSA6IHdpdGhNYXBwZWRQb3MpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiB3aXRoTWFwcGVkUG9zKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBoSUQsIHBvcywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAqcGFja2VkSURDdXJzb3IrKyA9IFNrUGFja2VkR2x5cGhJRHtnbHlwaElELCBwb3MsIG1hc2t9OwogICAgIH0KICAgICBTa0RFQlVHQ09ERShmUGhhc2UgPSBrSW5wdXQpOwpAQCAtODgsOCArOTMsMTQgQEAKICAgICAgICAgcmV0dXJuIHtTa1NjYWxhckZsb29yVG9TY2FsYXIocHQueCgpKSwgU2tTY2FsYXJGbG9vclRvU2NhbGFyKHB0LnkoKSl9OwogICAgIH07CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFtwYWNrZWRHbHlwaElELCBnbHlwaElELCBwb3NdCiAgICAgICAgICAgICA6IFNrTWFrZVppcChmTXVsdGlCdWZmZXIuZ2V0KCksIHNvdXJjZS5nZXQ8MD4oKSwgZlBvc2l0aW9ucy5nZXQoKSkpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0KKyAgICAgICAgICAgIDogU2tNYWtlWmlwKGZNdWx0aUJ1ZmZlci5nZXQoKSwgc291cmNlLmdldDwwPigpLCBmUG9zaXRpb25zLmdldCgpKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhwYWNrZWRHbHlwaElELCBnbHlwaElELCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgcGFja2VkR2x5cGhJRCA9IFNrUGFja2VkR2x5cGhJRHtnbHlwaElELCBwb3MsIHJvdW5kaW5nU3BlYy5pZ25vcmVQb3NpdGlvbkZpZWxkTWFza307CiAgICAgICAgIC8vIFN0b3JlIHJvdW5kZWQgZGV2aWNlIGNvb3JkcyBiYWNrIGluIHBvcy4KICAgICAgICAgcG9zID0gZmxvb3IocG9zKTsKQEAgLTEwMiw4ICsxMTMsMTQgQEAKICAgICBTa0FTU0VSVChmUGhhc2UgPT0ga0lucHV0KTsKIAogICAgIFNrU3RyaW5nIG1zZzsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFtwYWNrZWRHbHlwaElELCBwb3NdCiAgICAgICAgICAgICA6IFNrWmlwPFNrR2x5cGhWYXJpYW50LCBTa1BvaW50PntmSW5wdXRTaXplLCBmTXVsdGlCdWZmZXIuZ2V0KCksIGZQb3NpdGlvbnMuZ2V0KCl9KSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtCisgICAgICAgICAgICA6IFNrWmlwPFNrR2x5cGhWYXJpYW50LCBTa1BvaW50PntmSW5wdXRTaXplLCBmTXVsdGlCdWZmZXIuZ2V0KCksIGZQb3NpdGlvbnMuZ2V0KCl9KSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBhY2tlZEdseXBoSUQsIHBvcywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBtc2cuYXBwZW5kZigiMHgleDooJWEsJWEpLCAiLCBwYWNrZWRHbHlwaElELnBhY2tlZElEKCkudmFsdWUoKSwgcG9zLngoKSwgcG9zLnkoKSk7CiAgICAgfQogICAgIHJldHVybiBtc2c7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoQnVmZmVyLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoQnVmZmVyLmgKaW5kZXggZjM3MzY3OS4uM2UyODgwZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHbHlwaEJ1ZmZlci5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhCdWZmZXIuaApAQCAtMzQsNyArMzQsMTEgQEAKICAgICAgICAgaWYgKCF0aGlzLT5zb3VyY2VJc1JlamVjdEJ1ZmZlcnMoKSkgewogICAgICAgICAgICAgLy8gTmVlZCB0byBleHBhbmQgdGhlIGJ1ZmZlcnMgZm9yIGZpcnN0IHVzZS4gQWxsIG90aGVyIHJlamVjdCBzZXRzIHdpbGwgYmUgZmV3ZXIgdGhhbgogICAgICAgICAgICAgLy8gdGhpcyBvbmUuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbZ2x5cGhJRCwgcG9zXSA9IGZTb3VyY2VbaW5kZXhdOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBoSUQsIHBvcywgZlNvdXJjZVtpbmRleF0pOworI2VuZGlmCiAgICAgICAgICAgICBmUmVqZWN0ZWRHbHlwaElEcy5wdXNoX2JhY2soZ2x5cGhJRCk7CiAgICAgICAgICAgICBmUmVqZWN0ZWRQb3NpdGlvbnMucHVzaF9iYWNrKHBvcyk7CiAgICAgICAgICAgICBmUmVqZWN0U2l6ZSsrOwpAQCAtMjE3LDcgKzIyMSwxMiBAQAogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZuPgogICAgIHZvaWQgZm9yRWFjaEdseXBoSUQoRm4mJiBmbikgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgZm9yIChhdXRvIFtpLCBwYWNrZWRJRCwgcG9zXSA6IFNrTWFrZUVudW1lcmF0ZSh0aGlzLT5pbnB1dCgpKSkgeworI2Vsc2UKKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBTa01ha2VFbnVtZXJhdGUodGhpcy0+aW5wdXQoKSkpIHsKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKGksIHBhY2tlZElELCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIGZuKGksIHBhY2tlZElELnBhY2tlZElEKCksIHBvcyk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoUnVuLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhSdW4uY3BwCmluZGV4IGM1YjgyZmYuLjkyZWNjMGEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhSdW4uY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhSdW4uY3BwCkBAIC00Niw3ICs0NiwxMSBAQAogICAgIGlmIChmb250Qm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBFbXB0eSBmb250IGJvdW5kcyBhcmUgbGlrZWx5IGEgZm9udCBidWcuICBUaWdodEJvdW5kcyBoYXMgYSBiZXR0ZXIgY2hhbmNlIG9mCiAgICAgICAgIC8vIHByb2R1Y2luZyB1c2VmdWwgcmVzdWx0cyBpbiB0aGlzIGNhc2UuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlXSA9IFNrU3RyaWtlU3BlYzo6TWFrZUNhbm9uaWNhbGl6ZWQoZkZvbnQsICZwYWludCk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlLCBTa1N0cmlrZVNwZWM6Ok1ha2VDYW5vbmljYWxpemVkKGZGb250LCAmcGFpbnQpKTsKKyNlbmRpZgogICAgICAgICBTa0J1bGtHbHlwaE1ldHJpY3MgbWV0cmljc3tzdHJpa2VTcGVjfTsKICAgICAgICAgU2tTcGFuPGNvbnN0IFNrR2x5cGgqPiBnbHlwaHMgPSBtZXRyaWNzLmdseXBocyh0aGlzLT5nbHlwaHNJRHMoKSk7CiAgICAgICAgIGlmIChmU2NhbGVkUm90YXRpb25zLmVtcHR5KCkpIHsKQEAgLTYwLDcgKzY0LDEyIEBACiAgICAgICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgU2tSZWN0IGJvdW5kcyA9IFNrUmVjdDo6TWFrZUVtcHR5KCk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgZm9yIChhdXRvIFtwb3MsIGdseXBoXSA6IFNrTWFrZVppcCh0aGlzLT5wb3NpdGlvbnMoKSwgZ2x5cGhzKSkgeworI2Vsc2UKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVtIDogU2tNYWtlWmlwKHRoaXMtPnBvc2l0aW9ucygpLCBnbHlwaHMpKSB7CisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocG9zLCBnbHlwaCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIGlmIChTa1JlY3QgciA9IGdseXBoLT5yZWN0KCk7ICFyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBib3VuZHMuam9pbihzY2FsZUFuZFRyYW5zbGF0ZVJlY3QociwgcG9zKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjksOCArNzgsMTQgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFJTWEZvcm0gLSBnbHlwaHMgY2FuIGJlIGFueSBzY2FsZSBvciByb3RhdGlvbi4KICAgICAgICAgICAgIFNrUmVjdCBib3VuZHMgPSBTa1JlY3Q6Ok1ha2VFbXB0eSgpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGZvciAoYXV0byBbcG9zLCBzY2FsZVJvdGF0ZSwgZ2x5cGhdIDoKICAgICAgICAgICAgICAgICAgICAgU2tNYWtlWmlwKHRoaXMtPnBvc2l0aW9ucygpLCBmU2NhbGVkUm90YXRpb25zLCBnbHlwaHMpKSB7CisjZWxzZQorICAgICAgICAgICAgZm9yIChhdXRvIGl0ZW0gOgorICAgICAgICAgICAgICAgICAgICBTa01ha2VaaXAodGhpcy0+cG9zaXRpb25zKCksIGZTY2FsZWRSb3RhdGlvbnMsIGdseXBocykpIHsKKyAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhwb3MsIHNjYWxlUm90YXRlLCBnbHlwaCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIGlmICghZ2x5cGgtPnJlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgU2tNYXRyaXggeGZvcm0gPSBTa01hdHJpeCgpLnNldFJTWGZvcm0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tSU1hmb3Jte3Bvcy54KCksIHBvcy55KCksIHNjYWxlUm90YXRlLngoKSwgc2NhbGVSb3RhdGUueSgpfSk7CkBAIC05NSw3ICsxMTAsMTIgQEAKICAgICAgICAgLy8gUlNYRm9ybSBjYXNlIGdseXBocyBjYW4gYmUgYW55IHNjYWxlIG9yIHJvdGF0aW9uLgogICAgICAgICBTa1JlY3QgYm91bmRzOwogICAgICAgICBib3VuZHMuc2V0RW1wdHkoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGZvciAoYXV0byBbcG9zLCBzY2FsZVJvdGF0ZV0gOiBTa01ha2VaaXAodGhpcy0+cG9zaXRpb25zKCksIGZTY2FsZWRSb3RhdGlvbnMpKSB7CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrTWFrZVppcCh0aGlzLT5wb3NpdGlvbnMoKSwgZlNjYWxlZFJvdGF0aW9ucykpIHsKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBvcywgc2NhbGVSb3RhdGUsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIGNvbnN0IFNrUlNYZm9ybSB4Zm9ybXtwb3MueCgpLCBwb3MueSgpLCBzY2FsZVJvdGF0ZS54KCksIHNjYWxlUm90YXRlLnkoKX07CiAgICAgICAgICAgICBib3VuZHMuam9pbihTa01hdHJpeCgpLnNldFJTWGZvcm0oeGZvcm0pLm1hcFJlY3QoZm9udEJvdW5kcykpOwogICAgICAgICB9CkBAIC0xNTgsOSArMTc4LDE2IEBACiAgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLnBvaW50cygpLCBwb3NpdGlvbnMuZGF0YSgpLCBwb3NpdGlvbnMuc2l6ZV9ieXRlcygpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1aWxkZXIuYWxsb2NSdW5SU1hmb3JtKHJ1bi5mb250KCksIHJ1bi5ydW5TaXplKCkpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGZvciAoYXV0byBbeGZvcm0sIHBvcywgc3JdIDogU2tNYWtlWmlwKGJ1ZmZlci54Zm9ybXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5wb3NpdGlvbnMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5zY2FsZWRSb3RhdGlvbnMoKSkpIHsKKyNlbHNlCisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrTWFrZVppcChidWZmZXIueGZvcm1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4ucG9zaXRpb25zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4uc2NhbGVkUm90YXRpb25zKCkpKSB7CisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzMoeGZvcm0sIHBvcywgc3IsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICB4Zm9ybSA9IFNrUlNYZm9ybTo6TWFrZShzci54KCksIHNyLnkoKSwgcG9zLngoKSwgcG9zLnkoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI3Miw4ICsyOTksMTcgQEAKICAgICB0aGlzLT5wcmVwYXJlQnVmZmVycyhjb3VudCwgY291bnQpOwogICAgIGF1dG8gcG9zaXRpb25zID0gU2tNYWtlU3BhbihmUG9zaXRpb25zLmdldCgpLCBjb3VudCk7CiAgICAgYXV0byBzY2FsZWRSb3RhdGlvbnMgPSBTa01ha2VTcGFuKGZTY2FsZWRSb3RhdGlvbnMuZ2V0KCksIGNvdW50KTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFtwb3MsIHNyLCB4Zm9ybV0gOiBTa01ha2VaaXAocG9zaXRpb25zLCBzY2FsZWRSb3RhdGlvbnMsIHhmb3JtcykpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa01ha2VaaXAocG9zaXRpb25zLCBzY2FsZWRSb3RhdGlvbnMsIHhmb3JtcykpIHsKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzMocG9zLCBzciwgeGZvcm0sIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3Njb3MsIHNzaW4sIHR4LCB0eV0gPSB4Zm9ybTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHNjb3MsIHNzaW4sIHR4LCB0eSwgeGZvcm0pOworI2VuZGlmCiAgICAgICAgIHBvcyA9IHt0eCwgdHl9OwogICAgICAgICBzciA9IHtzY29zLCBzc2lufTsKICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoUnVuUGFpbnRlci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dseXBoUnVuUGFpbnRlci5jcHAKaW5kZXggMzJiNTY5Mi4uNzU2NjQyZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHbHlwaFJ1blBhaW50ZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR2x5cGhSdW5QYWludGVyLmNwcApAQCAtMTAwLDggKzEwMCwxMyBAQAogCiAgICAgICAgIGlmIChTa1N0cmlrZVNwZWM6OlNob3VsZERyYXdBc1BhdGgocGFpbnQsIHJ1bkZvbnQsIGRldmljZU1hdHJpeCkpIHsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW3N0cmlrZVNwZWMsIHN0cmlrZVRvU291cmNlU2NhbGVdID0KICAgICAgICAgICAgICAgICAgICAgU2tTdHJpa2VTcGVjOjpNYWtlUGF0aChydW5Gb250LCBwYWludCwgcHJvcHMsIGZTY2FsZXJDb250ZXh0RmxhZ3MpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHN0cmlrZVNwZWMsIHN0cmlrZVRvU291cmNlU2NhbGUsCisgICAgICAgICAgICAgICAgICAgIFNrU3RyaWtlU3BlYzo6TWFrZVBhdGgocnVuRm9udCwgcGFpbnQsIHByb3BzLCBmU2NhbGVyQ29udGV4dEZsYWdzKSk7CisjZW5kaWYKIAogICAgICAgICAgICAgYXV0byBzdHJpa2UgPSBzdHJpa2VTcGVjLmZpbmRPckNyZWF0ZVN0cmlrZSgpOwogCkBAIC0xNDUsNyArMTUwLDEyIEBACiAgICAgICAgICAgICBTa1NjYWxhciBtYXhTY2FsZSA9IFNLX1NjYWxhck1pbjsKIAogICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZSB0aGF0IG1ha2VzIHRoZSBsb25nZXN0IGVkZ2UgMToxIHdpdGggaXRzIHNpZGUgaW4gdGhlIGNhY2hlLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGZvciAoYXV0byBbZ2x5cGgsIHBvc10gOiBTa01ha2VaaXAoZ2x5cGhzLCBwb3NpdGlvbnMpKSB7CisjZWxzZQorICAgICAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBTa01ha2VaaXAoZ2x5cGhzLCBwb3NpdGlvbnMpKSB7CisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZ2x5cGgsIHBvcywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIFNrUG9pbnQgY29ybmVyc1s0XTsKICAgICAgICAgICAgICAgICBTa1BvaW50IHNyY1BvcyA9IHBvcyArIGRyYXdPcmlnaW47CiAgICAgICAgICAgICAgICAgLy8gU3RvcmUgb2ZmIHRoZSBwb3NpdGlvbnMgaW4gZGV2aWNlIHNwYWNlIHRvIHBvc2l0aW9uIHRoZSBnbHlwaHMgZHVyaW5nIGRyYXdpbmcuCkBAIC0xODMsNyArMTkzLDEyIEBACiAKICAgICAgICAgICAgIHN0cmlrZS0+cHJlcGFyZUZvckRyYXdpbmdNYXNrc0NQVSgmZkRyYXdhYmxlKTsKICAgICAgICAgICAgIGF1dG8gdmFyaWFudHMgPSBmRHJhd2FibGUuZHJhd2FibGUoKS5nZXQ8MD4oKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBmb3IgKGF1dG8gW3ZhcmlhbnQsIHNyY1Bvc10gOiBTa01ha2VaaXAodmFyaWFudHMsIHNvdXJjZVBvc2l0aW9ucykpIHsKKyNlbHNlCisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrTWFrZVppcCh2YXJpYW50cywgc291cmNlUG9zaXRpb25zKSkgeworICAgICAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHZhcmlhbnQsIHNyY1Bvcywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIFNrR2x5cGgqIGdseXBoID0gdmFyaWFudC5nbHlwaCgpOwogICAgICAgICAgICAgICAgIFNrTWFzayBtYXNrID0gZ2x5cGgtPm1hc2soKTsKICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyB0aGlzIG5lZWRlZCB3aWxsIEE4IGFuZCBCVyBqdXN0IHdvcms/CkBAIC0yNDYsOCArMjYxLDEzIEBACiAKICAgICBpZiAoZHJhd2luZ1R5cGUgPT0gR3JTREZUQ29udHJvbDo6a1NERlQpIHsKICAgICAgICAgLy8gUHJvY2VzcyBTREZUIC0gVGhpcyBzaG91bGQgYmUgdGhlIC4wMDklIGNhc2UuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBjb25zdCBhdXRvJiBbc3RyaWtlU3BlYywgbWluU2NhbGUsIG1heFNjYWxlXSA9CiAgICAgICAgICAgICAgICAgU2tTdHJpa2VTcGVjOjpNYWtlU0RGVChydW5Gb250LCBydW5QYWludCwgZkRldmljZVByb3BzLCBkcmF3TWF0cml4LCBjb250cm9sKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHN0cmlrZVNwZWMsIG1pblNjYWxlLCBtYXhTY2FsZSwKKyAgICAgICAgICAgICAgICBTa1N0cmlrZVNwZWM6Ok1ha2VTREZUKHJ1bkZvbnQsIHJ1blBhaW50LCBmRGV2aWNlUHJvcHMsIGRyYXdNYXRyaXgsIGNvbnRyb2wpKTsKKyNlbmRpZgogCiAgICAgICAgICNpZiBkZWZpbmVkKFNLX1RSQUNFX0dMWVBIX1JVTl9QUk9DRVNTKQogICAgICAgICAgICAgbXNnLmFwcGVuZGYoIiAgU0RGVCBjYXNlOlxuJXMiLCBzdHJpa2VTcGVjLmR1bXAoKS5jX3N0cigpKTsKQEAgLTMwNSw4ICszMjUsMTMgQEAKICAgICBTa1NjYWxhciBtYXhEaW1lbnNpb25JblNvdXJjZVNwYWNlID0gMC4wOwogICAgIGlmICghZlJlamVjdHMuc291cmNlKCkuZW1wdHkoKSkgewogICAgICAgICAvLyBQYXRoIGNhc2UgLSBoYW5kbGUgYmlnIHRoaW5ncyB3aXRob3V0IGNvbG9yIGFuZCB0aGF0IGhhdmUgYSBwYXRoLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbc3RyaWtlU3BlYywgc3RyaWtlVG9Tb3VyY2VTY2FsZV0gPQogICAgICAgICAgICAgICAgIFNrU3RyaWtlU3BlYzo6TWFrZVBhdGgocnVuRm9udCwgcnVuUGFpbnQsIGZEZXZpY2VQcm9wcywgZlNjYWxlckNvbnRleHRGbGFncyk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdHJpa2VTcGVjLCBzdHJpa2VUb1NvdXJjZVNjYWxlLAorICAgICAgICAgICAgICAgIFNrU3RyaWtlU3BlYzo6TWFrZVBhdGgocnVuRm9udCwgcnVuUGFpbnQsIGZEZXZpY2VQcm9wcywgZlNjYWxlckNvbnRleHRGbGFncykpOworI2VuZGlmCiAKICAgICAgICAgI2lmIGRlZmluZWQoU0tfVFJBQ0VfR0xZUEhfUlVOX1BST0NFU1MpCiAgICAgICAgICAgICBtc2cuYXBwZW5kZigiICBQYXRoIGNhc2U6XG4lcyIsIHN0cmlrZVNwZWMuZHVtcCgpLmNfc3RyKCkpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHcHVCbHVyVXRpbHMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHcHVCbHVyVXRpbHMuY3BwCmluZGV4IDgxODAwYzkuLmI0YjZlZDEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR3B1Qmx1clV0aWxzLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dwdUJsdXJVdGlscy5jcHAKQEAgLTY1Miw3ICs2NTIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01hdHJpeDo6SSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpOwogICAgICAgICB9OworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbZHcsIGRoXSA9IHJlc2NhbGVkU2l6ZTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGR3LCBkaCwgcmVzY2FsZWRTaXplKTsKKyNlbmRpZgogICAgICAgICAvLyBUaGUgYXJlIHRoZSBzcmMgcm93cyBhbmQgY29sdW1ucyBmcm9tIHRoZSBzb3VyY2UgdGhhdCB3ZSB3aWxsIHNjYWxlIGludG8gdGhlIGRzdCBwYWRkaW5nLgogICAgICAgICBmbG9hdCBzTENvbCA9IHNyY0JvdW5kcy5sZWZ0KCk7CiAgICAgICAgIGZsb2F0IHNUUm93ID0gc3JjQm91bmRzLnRvcCgpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHcHVCbHVyVXRpbHMuaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrR3B1Qmx1clV0aWxzLmgKaW5kZXggMDFkZDEyMS4uNGQzMzYxYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tHcHVCbHVyVXRpbHMuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0dwdUJsdXJVdGlscy5oCkBAIC0xMDUsNCArMTA1LDEzIEBACiAKICNlbmRpZiAvLyBTS19TVVBQT1JUX0dQVQogCisjaWZkZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCit0ZW1wbGF0ZSA8Pgorc3RydWN0IENvZXJjZXJUb1R1cGxlPFNrSVNpemU+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKGNvbnN0IFNrSVNpemUmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHQuZldpZHRoLCB0LmZIZWlnaHQpOworICB9Cit9OworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tJUG9pbnQxNi5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tJUG9pbnQxNi5oCmluZGV4IGM2NjQ2NWYuLjE5YjhiMzggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrSVBvaW50MTYuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta0lQb2ludDE2LmgKQEAgLTUzLDUgKzUzLDE3IEBACiAgICAgfQogfTsKIAorI2lmZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxTa0lQb2ludDE2PiB7CisgIHN0YXRpYyBhdXRvIENvZXJjZShTa0lQb2ludDE2JiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5mWCwgdC5mWSk7CisgIH0KKyAgc3RhdGljIGF1dG8gQ29lcmNlKGNvbnN0IFNrSVBvaW50MTYmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHQuZlgsIHQuZlkpOworICB9Cit9OworI2VuZGlmCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta09TRmlsZS5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tPU0ZpbGUuaAppbmRleCA5ZThhMzk2Li4zMzY4NTc5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta09TRmlsZS5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrT1NGaWxlLmgKQEAgLTExLDYgKzExLDE0IEBACiAjaWZuZGVmIFNrT1NGaWxlX0RFRklORUQKICNkZWZpbmUgU2tPU0ZpbGVfREVGSU5FRAogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCisjaW5jbHVkZSAic3RhcmJvYXJkL2ZpbGUuaCIKKyNkZWZpbmUgU2tGaWxlIFNiRmlsZVByaXZhdGUKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNkZWZpbmUgU2tGaWxlIEZJTEUKKyNlbmRpZgorCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUgImluY2x1ZGUvY29yZS9Ta1N0cmluZy5oIgpAQCAtMjEsMjMgKzI5LDIzIEBACiAgICAga1dyaXRlX1NrRklMRV9GbGFnICA9IDB4MDIKIH07CiAKLUZJTEUqIHNrX2ZvcGVuKGNvbnN0IGNoYXIgcGF0aFtdLCBTa0ZJTEVfRmxhZ3MpOwotdm9pZCAgICBza19mY2xvc2UoRklMRSopOworU2tGaWxlKiBza19mb3Blbihjb25zdCBjaGFyIHBhdGhbXSwgU2tGSUxFX0ZsYWdzKTsKK3ZvaWQgICAgc2tfZmNsb3NlKFNrRmlsZSopOwogCi1zaXplX3QgIHNrX2ZnZXRzaXplKEZJTEUqKTsKK3NpemVfdCAgc2tfZmdldHNpemUoU2tGaWxlKik7CiAKLXNpemVfdCAgc2tfZndyaXRlKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ5dGVDb3VudCwgRklMRSopOworc2l6ZV90ICBza19md3JpdGUoY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50LCBTa0ZpbGUqKTsKIAotdm9pZCAgICBza19mZmx1c2goRklMRSopOwotdm9pZCAgICBza19mc3luYyhGSUxFKik7Cit2b2lkICAgIHNrX2ZmbHVzaChTa0ZpbGUqKTsKK3ZvaWQgICAgc2tfZnN5bmMoU2tGaWxlKik7CiAKLXNpemVfdCAgc2tfZnRlbGwoRklMRSopOworc2l6ZV90ICBza19mdGVsbChTa0ZpbGUqKTsKIAogLyoqIE1hcHMgYSBmaWxlIGludG8gbWVtb3J5LiBSZXR1cm5zIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCiAgKiAgVGhlIG1hcHBpbmcgaXMgcmVhZCBvbmx5LgogICogIFdoZW4gZmluaXNoZWQgd2l0aCB0aGUgbWFwcGluZywgZnJlZSB0aGUgcmV0dXJuZWQgcG9pbnRlciB3aXRoIHNrX2ZtdW5tYXAuCiAgKi8KLXZvaWQqICAgc2tfZm1tYXAoRklMRSogZiwgc2l6ZV90KiBsZW5ndGgpOwordm9pZCogICBza19mbW1hcChTa0ZpbGUqIGYsIHNpemVfdCogbGVuZ3RoKTsKIAogLyoqIE1hcHMgYSBmaWxlIGRlc2NyaXB0b3IgaW50byBtZW1vcnkuIFJldHVybnMgdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KICAqICBUaGUgbWFwcGluZyBpcyByZWFkIG9ubHkuCkBAIC01MSwxMiArNTksMTIgQEAKIHZvaWQgICAgc2tfZm11bm1hcChjb25zdCB2b2lkKiBhZGRyLCBzaXplX3QgbGVuZ3RoKTsKIAogLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHBvaW50IGF0IHRoZSBleGFjdCBzYW1lIGZpbGVzeXN0ZW0gb2JqZWN0LiAqLwotYm9vbCAgICBza19maWRlbnRpY2FsKEZJTEUqIGEsIEZJTEUqIGIpOworYm9vbCAgICBza19maWRlbnRpY2FsKFNrRmlsZSogYSwgU2tGaWxlKiBiKTsKIAogLyoqIFJldHVybnMgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gZmlsZS4KICAqICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgPCAwIG9uIGZhaWx1cmUuCiAgKi8KLWludCAgICAgc2tfZmlsZW5vKEZJTEUqIGYpOworaW50ICAgICBza19maWxlbm8oU2tGaWxlKiBmKTsKIAogLyoqIFJldHVybnMgdHJ1ZSBpZiBzb21ldGhpbmcgKGZpbGUsIGRpcmVjdG9yeSwgPz8/KSBleGlzdHMgYXQgdGhpcyBwYXRoLAogICogIGFuZCBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgZmxhZ3MuCkBAIC02OCw3ICs3Niw3IEBACiAKIC8vIExpa2UgcHJlYWQsIGJ1dCBtYXkgYWZmZWN0IHRoZSBmaWxlIHBvc2l0aW9uIG1hcmtlci4KIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIG9yIFNJWkVfTUFYIGlmIGZhaWxlZC4KLXNpemVfdCBza19xcmVhZChGSUxFKiwgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQsIHNpemVfdCBvZmZzZXQpOworc2l6ZV90IHNrX3FyZWFkKFNrRmlsZSosIHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0KTsKIAogCiAvLyBDcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGF0IHRoaXMgcGF0aDsgcmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta09wdHMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tPcHRzLmNwcAppbmRleCBlNjliZWRiLi4yYTZlYWUxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta09wdHMuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrT3B0cy5jcHAKQEAgLTExNSw2ICsxMTUsNyBAQAogICAgIHZvaWQgSW5pdF9jcmMzMigpOwogCiAgICAgc3RhdGljIHZvaWQgaW5pdCgpIHsKKyNpZiAhKGRlZmluZWQoU1RBUkJPQVJEKSAmJiBkZWZpbmVkKFNLX0JVSUxEX05PX09QVFMpKQogICAgICNpZiBkZWZpbmVkKFNLX0NQVV9YODYpCiAgICAgICAgICNpZiBTS19DUFVfU1NFX0xFVkVMIDwgU0tfQ1BVX1NTRV9MRVZFTF9TU1NFMwogICAgICAgICAgICAgaWYgKFNrQ3B1OjpTdXBwb3J0cyhTa0NwdTo6U1NTRTMpKSB7IEluaXRfc3NzZTMoKTsgfQpAQCAtMTM5LDYgKzE0MCw3IEBACiAgICAgICAgIGlmIChTa0NwdTo6U3VwcG9ydHMoU2tDcHU6OkNSQzMyKSkgeyBJbml0X2NyYzMyKCk7IH0KIAogICAgICNlbmRpZgorI2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBJbml0KCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tQYXRoLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUGF0aC5jcHAKaW5kZXggNTY4MTBkZS4uN2U4MWJhZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tQYXRoLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1BhdGguY3BwCkBAIC0yOTYsNyArMjk2LDEyIEBACiAgICAgaW50IHNlZ21lbnRDb3VudCA9IDA7CiAgICAgU2tERUJVR0NPREUoaW50IG1vdmVDbnQgPSAwOykKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0cywgd2VpZ2h0XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoKnRoaXMpKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogU2tQYXRoUHJpdjo6SXRlcmF0ZSgqdGhpcykpIHsKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmVyYiwgcHRzLCB3ZWlnaHQsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgaWYgKHZlcmIgPT0gU2tQYXRoVmVyYjo6a0Nsb3NlIHx8IChzZWdtZW50Q291bnQgPiAwICYmIHZlcmIgPT0gU2tQYXRoVmVyYjo6a01vdmUpKSB7CiAgICAgICAgICAgICAvLyBDbG9zaW5nIHRoZSBjdXJyZW50IGNvbnRvdXI7IGJ1dCBzaW5jZSBjb252ZXhpdHkgaXMgYSBwcmVjb25kaXRpb24sIGl0J3MgdGhlIG9ubHkKICAgICAgICAgICAgIC8vIGNvbnRvdXIgdGhhdCBtYXR0ZXJzLgpAQCAtMTM4Nyw3ICsxMzkyLDExIEBACiAgICAgICAgIGZMYXN0TW92ZVRvSW5kZXggPSB0aGlzLT5jb3VudFBvaW50cygpICsgc3JjLT5mTGFzdE1vdmVUb0luZGV4OwogCiAgICAgICAgIFNrUGF0aFJlZjo6RWRpdG9yIGVkKCZmUGF0aFJlZik7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtuZXdQdHMsIG5ld1dlaWdodHNdID0gZWQuZ3Jvd0ZvclZlcmJzSW5QYXRoKCpzcmMtPmZQYXRoUmVmKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKG5ld1B0cywgbmV3V2VpZ2h0cywgZWQuZ3Jvd0ZvclZlcmJzSW5QYXRoKCpzcmMtPmZQYXRoUmVmKSk7CisjZW5kaWYKICAgICAgICAgbWF0cml4Lm1hcFBvaW50cyhuZXdQdHMsIHNyYy0+ZlBhdGhSZWYtPnBvaW50cygpLCBzcmMtPmNvdW50UG9pbnRzKCkpOwogICAgICAgICBpZiAoaW50IG51bVdlaWdodHMgPSBzcmMtPmZQYXRoUmVmLT5jb3VudFdlaWdodHMoKSkgewogICAgICAgICAgICAgbWVtY3B5KG5ld1dlaWdodHMsIHNyYy0+ZlBhdGhSZWYtPmNvbmljV2VpZ2h0cygpLCBudW1XZWlnaHRzICogc2l6ZW9mKG5ld1dlaWdodHNbMF0pKTsKQEAgLTE0MDEsNyArMTQxMCwxMiBAQAogCiAgICAgU2tNYXRyaXhQcml2OjpNYXBQdHNQcm9jIG1hcFB0c1Byb2MgPSBTa01hdHJpeFByaXY6OkdldE1hcFB0c1Byb2MobWF0cml4KTsKICAgICBib29sIGZpcnN0VmVyYiA9IHRydWU7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmVyYiwgcHRzLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoKnNyYykpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKCpzcmMpKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgIFNrUG9pbnQgbWFwcGVkUHRzWzNdOwogICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprTW92ZToKQEAgLTE4MzgsNyArMTg1MiwxMSBAQAogICAgIGlmICghKGZJdGVyICE9IGZFbmQpKSB7CiAgICAgICAgIHJldHVybiBrRG9uZV9WZXJiOwogICAgIH0KKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmVyYiwgaXRlclB0cywgd2VpZ2h0c10gPSAqZkl0ZXI7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIGl0ZXJQdHMsIHdlaWdodHMsICpmSXRlcik7CisjZW5kaWYKICAgICBpbnQgbnVtUHRzOwogICAgIHN3aXRjaCAodmVyYikgewogICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOiBudW1QdHMgPSAxOyBicmVhazsKQEAgLTIyNjAsNyArMjI3OCwxMiBAQAogICAgIGJvb2wgbmVlZHNDbG9zZSA9IGZhbHNlOwogICAgIENvbnZleGljYXRvciBzdGF0ZTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0cywgd3RdIDogU2tQYXRoUHJpdjo6SXRlcmF0ZSgqdGhpcykpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKCp0aGlzKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2ZXJiLCBwdHMsIHd0LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIC8vIExvb2tpbmcgZm9yIHRoZSBsYXN0IG1vdmVUbyBiZWZvcmUgbm9uLW1vdmUgdmVyYnMgc3RhcnQKICAgICAgICAgaWYgKGNvbnRvdXJDb3VudCA9PSAwKSB7CiAgICAgICAgICAgICBpZiAodmVyYiA9PSBTa1BhdGhWZXJiOjprTW92ZSkgewpAQCAtMzA4OCw3ICszMTExLDEyIEBACiAgICAgU2tQb2ludCByZWN0UHRzWzVdOwogICAgIGludCByZWN0UHRDbnQgPSAwOwogICAgIGJvb2wgbmVlZHNDbG9zZSA9ICFpc1NpbXBsZUZpbGw7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdiwgdmVyYlB0cywgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogU2tQYXRoUHJpdjo6SXRlcmF0ZShwYXRoKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2LCB2ZXJiUHRzLCB3LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIHN3aXRjaCAodikgewogICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprTW92ZToKICAgICAgICAgICAgICAgICBpZiAoMCAhPSByZWN0UHRDbnQpIHsKQEAgLTMyOTMsNyArMzMyMSwxMiBAQAogICAgIC8vIGluaXRpYWwgd2l0aCB0aGUgZmlyc3QgTW92ZVRvLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGluc2lkZSB0aGUgc3dpdGNoCiAgICAgU2sycyBtaW4sIG1heDsKICAgICBtaW4gPSBtYXggPSBmcm9tX3BvaW50KHRoaXMtPmdldFBvaW50KDApKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFt2ZXJiLCBwdHMsIHddIDogU2tQYXRoUHJpdjo6SXRlcmF0ZSgqdGhpcykpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKCp0aGlzKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2ZXJiLCBwdHMsIHcsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tQYXRoQnVpbGRlci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1BhdGhCdWlsZGVyLmNwcAppbmRleCAwMDg1YmNhLi4xNzI1YzNhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1BhdGhCdWlsZGVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1BhdGhCdWlsZGVyLmNwcApAQCAtNTMsNyArNTMsMTIgQEAKIFNrUGF0aEJ1aWxkZXImIFNrUGF0aEJ1aWxkZXI6Om9wZXJhdG9yPShjb25zdCBTa1BhdGgmIHNyYykgewogICAgIHRoaXMtPnJlc2V0KCkuc2V0RmlsbFR5cGUoc3JjLmdldEZpbGxUeXBlKCkpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmVyYiwgcHRzLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoc3JjKSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoc3JjKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2ZXJiLCBwdHMsIHcsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOiAgdGhpcy0+bW92ZVRvKHB0c1swXSk7IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprTGluZTogIHRoaXMtPmxpbmVUbyhwdHNbMV0pOyBicmVhazsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUGljdHVyZUltYWdlR2VuZXJhdG9yLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUGljdHVyZUltYWdlR2VuZXJhdG9yLmNwcAppbmRleCA4NDU5NzFlLi5lNTgxYzZjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1BpY3R1cmVJbWFnZUdlbmVyYXRvci5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tQaWN0dXJlSW1hZ2VHZW5lcmF0b3IuY3BwCkBAIC0xMjAsNyArMTIwLDExIEBACiAgICAgaWYgKCFpbWFnZSkgewogICAgICAgICByZXR1cm4ge307CiAgICAgfQorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdF0gPSBhc19JQihpbWFnZSktPmFzVmlldyhjdHgsIG1pcG1hcHBlZCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIGN0LCBhc19JQihpbWFnZSktPmFzVmlldyhjdHgsIG1pcG1hcHBlZCkpOworI2VuZGlmCiAgICAgU2tBU1NFUlQodmlldyk7CiAgICAgU2tBU1NFUlQobWlwbWFwcGVkID09IEdyTWlwbWFwcGVkOjprTm8gfHwKICAgICAgICAgICAgICB2aWV3LmFzVGV4dHVyZVByb3h5KCktPm1pcG1hcHBlZCgpID09IEdyTWlwbWFwcGVkOjprWWVzKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUmVtb3RlR2x5cGhDYWNoZS5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1JlbW90ZUdseXBoQ2FjaGUuY3BwCmluZGV4IDFhMjNhOTAuLjViNzIwOWEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUmVtb3RlR2x5cGhDYWNoZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tSZW1vdGVHbHlwaENhY2hlLmNwcApAQCAtNDkyLDcgKzQ5MiwxMiBAQAogCiB2b2lkIFJlbW90ZVN0cmlrZTo6cHJlcGFyZUZvck1hc2tEcmF3aW5nKAogICAgICAgICBTa0RyYXdhYmxlR2x5cGhCdWZmZXIqIGRyYXdhYmxlcywgU2tTb3VyY2VHbHlwaEJ1ZmZlciogcmVqZWN0cykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW2ksIHZhcmlhbnQsIF9dIDogU2tNYWtlRW51bWVyYXRlKGRyYXdhYmxlcy0+aW5wdXQoKSkpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa01ha2VFbnVtZXJhdGUoZHJhd2FibGVzLT5pbnB1dCgpKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhpLCB2YXJpYW50LCBfLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIFNrUGFja2VkR2x5cGhJRCBwYWNrZWRJRCA9IHZhcmlhbnQucGFja2VkSUQoKTsKICAgICAgICAgaWYgKGZTZW50TG93R2x5cGhJRHMudGVzdChwYWNrZWRJRCkpIHsKICAgICAgICAgICAgICNpZmRlZiBTS19ERUJVRwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tSdW50aW1lRWZmZWN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrUnVudGltZUVmZmVjdC5jcHAKaW5kZXggZDZmZGRiMi4uNGNiY2RkYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tSdW50aW1lRWZmZWN0LmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1J1bnRpbWVFZmZlY3QuY3BwCkBAIC00NTgsNyArNDU4LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbZWZmZWN0LCBlcnJdID0gbWFrZShzdGQ6Om1vdmUoc2tzbCkpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihlZmZlY3QsIGVyciwgbWFrZShzdGQ6Om1vdmUoc2tzbCkpKTsKKyNlbmRpZgogICAgIGlmICghZWZmZWN0KSB7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTc4NCwxMCArNzg4LDE3IEBACiAgICAgICAgICAgICBjaGlsZEZQcy5wdXNoX2JhY2soc3RkOjptb3ZlKGNoaWxkRlApKTsKICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IENoaWxkVHlwZTo6a0NvbG9yRmlsdGVyKSB7CiAgICAgICAgICAgICAvLyBDb252ZXJ0IGEgU2tDb2xvckZpbHRlciBpbnRvIGEgY2hpbGQgRlAuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbc3VjY2VzcywgY2hpbGRGUF0gPSBhc19DRkIoY2hpbGQuY29sb3JGaWx0ZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPmFzRnJhZ21lbnRQcm9jZXNzb3IoLyppbnB1dEZQPSovbnVsbHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRBcmdzLmZDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2hpbGRBcmdzLmZEc3RDb2xvckluZm8pOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHN1Y2Nlc3MsIGNoaWxkRlAsIGFzX0NGQihjaGlsZC5jb2xvckZpbHRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+YXNGcmFnbWVudFByb2Nlc3NvcigvKmlucHV0RlA9Ki9udWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEFyZ3MuZkNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjaGlsZEFyZ3MuZkRzdENvbG9ySW5mbykpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR3JGUEZhaWx1cmUoc3RkOjptb3ZlKGlucHV0RlApKTsKICAgICAgICAgICAgIH0KQEAgLTk4Niw2ICs5OTcsNyBAQAogICAgICAgICBHckZQQXJncyBjaGlsZEFyZ3MgPSBhcmdzOwogICAgICAgICBjaGlsZEFyZ3MuZklucHV0Q29sb3JJc09wYXF1ZSA9IGZhbHNlOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtzdWNjZXNzLCBmcF0gPSBtYWtlX2VmZmVjdF9mcChmRWZmZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVudGltZV9zaGFkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUodW5pZm9ybXMpLApAQCAtOTkzLDYgKzEwMDUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypkZXN0Q29sb3JGUD0qL251bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrTWFrZVNwYW4oZkNoaWxkcmVuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRBcmdzKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHN1Y2Nlc3MsIGZwLCBtYWtlX2VmZmVjdF9mcChmRWZmZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVudGltZV9zaGFkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUodW5pZm9ybXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmlucHV0RlA9Ki9udWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmRlc3RDb2xvckZQPSovbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tNYWtlU3BhbihmQ2hpbGRyZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEFyZ3MpKTsKKyNlbmRpZgogICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0xMTc0LDYgKzExOTUsNyBAQAogICAgICAgICBza19zcDxTa0RhdGE+IHVuaWZvcm1zID0gZ2V0X3hmb3JtZWRfdW5pZm9ybXMoZkVmZmVjdC5nZXQoKSwgZlVuaWZvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5mRHN0Q29sb3JJbmZvLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBTa0FTU0VSVCh1bmlmb3Jtcyk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtzdWNjZXNzLCBmcF0gPSBtYWtlX2VmZmVjdF9mcChmRWZmZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnVudGltZV9ibGVuZGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKHVuaWZvcm1zKSwKQEAgLTExODEsNiArMTIwMywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoZHN0RlApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01ha2VTcGFuKGZDaGlsZHJlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoc3VjY2VzcywgZnAsIG1ha2VfZWZmZWN0X2ZwKGZFZmZlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW50aW1lX2JsZW5kZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUodW5pZm9ybXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoc3JjRlApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoZHN0RlApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa01ha2VTcGFuKGZDaGlsZHJlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MpKTsKKyNlbmRpZgogCiAgICAgICAgIHJldHVybiBzdWNjZXNzID8gc3RkOjptb3ZlKGZwKSA6IG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTY2FsZXJDYWNoZS5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NjYWxlckNhY2hlLmNwcAppbmRleCBjNjg3NjQ0Li42NTc1ZTMyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NjYWxlckNhY2hlLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NjYWxlckNhY2hlLmNwcApAQCAtMzcsNyArMzcsMTEgQEAKIH0KIAogc3RkOjp0dXBsZTxTa0dseXBoKiwgc2l6ZV90PiBTa1NjYWxlckNhY2hlOjpnbHlwaChTa1BhY2tlZEdseXBoSUQgcGFja2VkR2x5cGhJRCkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtkaWdlc3QsIHNpemVdID0gdGhpcy0+ZGlnZXN0KHBhY2tlZEdseXBoSUQpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihkaWdlc3QsIHNpemUsIHRoaXMtPmRpZ2VzdChwYWNrZWRHbHlwaElEKSk7CisjZW5kaWYKICAgICByZXR1cm4ge2ZHbHlwaEZvckluZGV4W2RpZ2VzdC5pbmRleCgpXSwgc2l6ZX07CiB9CiAKQEAgLTkyLDEwICs5NiwxOCBAQAogICAgIGNvbnN0IFNrR2x5cGgqKiBjdXJzb3IgPSByZXN1bHRzOwogICAgIHNpemVfdCBkZWx0YSA9IDA7CiAgICAgZm9yIChhdXRvIGdseXBoSUQgOiBnbHlwaElEcykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbZ2x5cGgsIHNpemVdID0gdGhpcy0+Z2x5cGgoU2tQYWNrZWRHbHlwaElEe2dseXBoSUR9KTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBoLCBzaXplLCB0aGlzLT5nbHlwaChTa1BhY2tlZEdseXBoSUR7Z2x5cGhJRH0pKTsKKyNlbmRpZgogICAgICAgICBkZWx0YSArPSBzaXplOwogICAgICAgICBpZiAocGF0aERldGFpbCA9PSBrTWV0cmljc0FuZFBhdGgpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtfLCBwYXRoU2l6ZV0gPSB0aGlzLT5wcmVwYXJlUGF0aChnbHlwaCk7CisjZWxzZQorICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoXywgcGF0aFNpemUsIHRoaXMtPnByZXBhcmVQYXRoKGdseXBoKSk7CisjZW5kaWYKICAgICAgICAgICAgIGRlbHRhICs9IHBhdGhTaXplOwogICAgICAgICB9CiAgICAgICAgICpjdXJzb3IrKyA9IGdseXBoOwpAQCAtMTM0LDE0ICsxNDYsMjIgQEAKIHN0ZDo6dHVwbGU8U2tTcGFuPGNvbnN0IFNrR2x5cGgqPiwgc2l6ZV90PiBTa1NjYWxlckNhY2hlOjptZXRyaWNzKAogICAgICAgICBTa1NwYW48Y29uc3QgU2tHbHlwaElEPiBnbHlwaElEcywgY29uc3QgU2tHbHlwaCogcmVzdWx0c1tdKSB7CiAgICAgU2tBdXRvTXV0ZXhFeGNsdXNpdmUgbG9ja3tmTXV9OworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtnbHlwaHMsIGRlbHRhXSA9IHRoaXMtPmludGVybmFsUHJlcGFyZShnbHlwaElEcywga01ldHJpY3NPbmx5LCByZXN1bHRzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZ2x5cGhzLCBkZWx0YSwgdGhpcy0+aW50ZXJuYWxQcmVwYXJlKGdseXBoSURzLCBrTWV0cmljc09ubHksIHJlc3VsdHMpKTsKKyNlbmRpZgogICAgIHJldHVybiB7Z2x5cGhzLCBkZWx0YX07CiB9CiAKIHN0ZDo6dHVwbGU8U2tTcGFuPGNvbnN0IFNrR2x5cGgqPiwgc2l6ZV90PiBTa1NjYWxlckNhY2hlOjpwcmVwYXJlUGF0aHMoCiAgICAgICAgIFNrU3Bhbjxjb25zdCBTa0dseXBoSUQ+IGdseXBoSURzLCBjb25zdCBTa0dseXBoKiByZXN1bHRzW10pIHsKICAgICBTa0F1dG9NdXRleEV4Y2x1c2l2ZSBsb2Nre2ZNdX07CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2dseXBocywgZGVsdGFdID0gdGhpcy0+aW50ZXJuYWxQcmVwYXJlKGdseXBoSURzLCBrTWV0cmljc0FuZFBhdGgsIHJlc3VsdHMpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihnbHlwaHMsIGRlbHRhLCB0aGlzLT5pbnRlcm5hbFByZXBhcmUoZ2x5cGhJRHMsIGtNZXRyaWNzQW5kUGF0aCwgcmVzdWx0cykpOworI2VuZGlmCiAgICAgcmV0dXJuIHtnbHlwaHMsIGRlbHRhfTsKIH0KIApAQCAtMTUxLDggKzE3MSwxNiBAQAogICAgIFNrQXV0b011dGV4RXhjbHVzaXZlIGxvY2t7Zk11fTsKICAgICBzaXplX3QgZGVsdGEgPSAwOwogICAgIGZvciAoYXV0byBnbHlwaElEIDogZ2x5cGhJRHMpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG9bZ2x5cGgsIGdseXBoU2l6ZV0gPSB0aGlzLT5nbHlwaChnbHlwaElEKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBoLCBnbHlwaFNpemUsIHRoaXMtPmdseXBoKGdseXBoSUQpKTsKKyNlbmRpZgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0b1tfLCBpbWFnZVNpemVdID0gdGhpcy0+cHJlcGFyZUltYWdlKGdseXBoKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKF8sIGltYWdlU2l6ZSwgdGhpcy0+cHJlcGFyZUltYWdlKGdseXBoKSk7CisjZW5kaWYKICAgICAgICAgZGVsdGEgKz0gZ2x5cGhTaXplICsgaW1hZ2VTaXplOwogICAgICAgICAqY3Vyc29yKysgPSBnbHlwaDsKICAgICB9CkBAIC0xNjMsOSArMTkxLDE4IEBACiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4+CiBzaXplX3QgU2tTY2FsZXJDYWNoZTo6Y29tbW9uRmlsdGVyTG9vcChTa0RyYXdhYmxlR2x5cGhCdWZmZXIqIGRyYXdhYmxlcywgRm4mJiBmbikgewogICAgIHNpemVfdCB0b3RhbCA9IDA7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbaSwgcGFja2VkSUQsIHBvc10gOiBTa01ha2VFbnVtZXJhdGUoZHJhd2FibGVzLT5pbnB1dCgpKSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IFNrTWFrZUVudW1lcmF0ZShkcmF3YWJsZXMtPmlucHV0KCkpKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKGksIHBhY2tlZElELCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgaWYgKFNrU2NhbGFyc0FyZUZpbml0ZShwb3MueCgpLCBwb3MueSgpKSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW2RpZ2VzdCwgc2l6ZV0gPSB0aGlzLT5kaWdlc3QocGFja2VkSUQpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGRpZ2VzdCwgc2l6ZSwgdGhpcy0+ZGlnZXN0KHBhY2tlZElEKSk7CisjZW5kaWYKICAgICAgICAgICAgIHRvdGFsICs9IHNpemU7CiAgICAgICAgICAgICBpZiAoIWRpZ2VzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBmbihpLCBkaWdlc3QsIHBvcyk7CkBAIC0xODIsNyArMjE5LDExIEBACiAgICAgICAgIFsmXShzaXplX3QgaSwgU2tHbHlwaERpZ2VzdCBkaWdlc3QsIFNrUG9pbnQgcG9zKSBTS19SRVFVSVJFUyhmTXUpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBnbHlwaCBpcyB0b28gbGFyZ2UsIHRoZW4gbm8gaW1hZ2UgaXMgY3JlYXRlZC4KICAgICAgICAgICAgIFNrR2x5cGgqIGdseXBoID0gZkdseXBoRm9ySW5kZXhbZGlnZXN0LmluZGV4KCldOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW2ltYWdlLCBpbWFnZVNpemVdID0gdGhpcy0+cHJlcGFyZUltYWdlKGdseXBoKTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpbWFnZSwgaW1hZ2VTaXplLCB0aGlzLT5wcmVwYXJlSW1hZ2UoZ2x5cGgpKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKGltYWdlICE9IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBkcmF3YWJsZXMtPnB1c2hfYmFjayhnbHlwaCwgaSk7CiAgICAgICAgICAgICAgICAgaW1hZ2VEZWx0YSArPSBpbWFnZVNpemU7CkBAIC0yMzEsNyArMjcyLDExIEBACiAgICAgICAgIFsmXShzaXplX3QgaSwgU2tHbHlwaERpZ2VzdCBkaWdlc3QsIFNrUG9pbnQgcG9zKSBTS19SRVFVSVJFUyhmTXUpIHsKICAgICAgICAgICAgIFNrR2x5cGgqIGdseXBoID0gZkdseXBoRm9ySW5kZXhbZGlnZXN0LmluZGV4KCldOwogICAgICAgICAgICAgaWYgKCFkaWdlc3QuaXNDb2xvcigpKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgIGF1dG8gW3BhdGgsIHBhdGhTaXplXSA9IHRoaXMtPnByZXBhcmVQYXRoKGdseXBoKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocGF0aCwgcGF0aFNpemUsIHRoaXMtPnByZXBhcmVQYXRoKGdseXBoKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBwYXRoRGVsdGEgKz0gcGF0aFNpemU7CiAgICAgICAgICAgICAgICAgaWYgKHBhdGggIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIG9mZiB0aGUgcGF0aCB0byBkcmF3IGxhdGVyLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTY2FuX0hhaXJsaW5lLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrU2Nhbl9IYWlybGluZS5jcHAKaW5kZXggNWUwZjA4MS4uNDU5MDNiZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTY2FuX0hhaXJsaW5lLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NjYW5fSGFpcmxpbmUuY3BwCkBAIC01NzcsNyArNTc3LDExIEBACiAgICAgICAgIHByZXZWZXJiID0gU2tQYXRoOjprRG9uZV9WZXJiOwogICAgIH0KICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3BhdGhWZXJiLCBwYXRoUHRzLCB3XSA9ICppdGVyKys7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhwYXRoVmVyYiwgcGF0aFB0cywgdywgKml0ZXIrKyk7CisjZW5kaWYKICAgICAgICAgU2tQYXRoOjpWZXJiIHZlcmIgPSAoU2tQYXRoOjpWZXJiKXBhdGhWZXJiOwogICAgICAgICBTa1BhdGg6OlZlcmIgbmV4dFZlcmIgPSAoaXRlciAhPSBlbmQpID8gKFNrUGF0aDo6VmVyYilpdGVyLnBlZWtWZXJiKCkgOiBTa1BhdGg6OmtEb25lX1ZlcmI7CiAgICAgICAgIG1lbWNweShwdHMsIHBhdGhQdHMsIFNrUGF0aFByaXY6OlB0c0luSXRlcih2ZXJiKSAqIHNpemVvZihTa1BvaW50KSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NwZWNpYWxJbWFnZS5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1NwZWNpYWxJbWFnZS5jcHAKaW5kZXggMWUzMWIwMy4uNGEzZmI4NSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTcGVjaWFsSW1hZ2UuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrU3BlY2lhbEltYWdlLmNwcApAQCAtMTYwLDcgKzE2MCwxMSBAQAogCiAjaWYgU0tfU1VQUE9SVF9HUFUKICAgICBpZiAockNvbnRleHQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3ZpZXcsIGN0XSA9IGFzX0lCKGltYWdlKS0+YXNWaWV3KHJDb250ZXh0LCBHck1pcG1hcHBlZDo6a05vKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIGN0LCBhc19JQihpbWFnZSktPmFzVmlldyhyQ29udGV4dCwgR3JNaXBtYXBwZWQ6OmtObykpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBNYWtlRGVmZXJyZWRGcm9tR3B1KHJDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT51bmlxdWVJRCgpLApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTdHJlYW0uY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTdHJlYW0uY3BwCmluZGV4IDUyZmUwNjEuLjhlOTliNGIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrU3RyZWFtLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1N0cmVhbS5jcHAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLVNrRklMRVN0cmVhbTo6U2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxGSUxFPiBmaWxlLCBzaXplX3QgZW5kLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBjdXJyZW50KQorU2tGSUxFU3RyZWFtOjpTa0ZJTEVTdHJlYW0oc3RkOjpzaGFyZWRfcHRyPFNrRmlsZT4gZmlsZSwgc2l6ZV90IGVuZCwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY3VycmVudCkKICAgICA6IGZGSUxFKHN0ZDo6bW92ZShmaWxlKSkKICAgICAsIGZFbmQoZW5kKQogICAgICwgZlN0YXJ0KHN0ZDo6bWluKHN0YXJ0LCBmRW5kKSkKQEAgLTE2MiwyMCArMTYyLDIwIEBACiAgICAgU2tBU1NFUlQoZkN1cnJlbnQgPT0gY3VycmVudCk7CiB9CiAKLVNrRklMRVN0cmVhbTo6U2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxGSUxFPiBmaWxlLCBzaXplX3QgZW5kLCBzaXplX3Qgc3RhcnQpCitTa0ZJTEVTdHJlYW06OlNrRklMRVN0cmVhbShzdGQ6OnNoYXJlZF9wdHI8U2tGaWxlPiBmaWxlLCBzaXplX3QgZW5kLCBzaXplX3Qgc3RhcnQpCiAgICAgOiBTa0ZJTEVTdHJlYW0oc3RkOjptb3ZlKGZpbGUpLCBlbmQsIHN0YXJ0LCBzdGFydCkKIHsgfQogCi1Ta0ZJTEVTdHJlYW06OlNrRklMRVN0cmVhbShGSUxFKiBmaWxlLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHN0YXJ0KQotICAgIDogU2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxGSUxFPihmaWxlLCBza19mY2xvc2UpLCBTa1NhZmVNYXRoOjpBZGQoc3RhcnQsIHNpemUpLCBzdGFydCkKK1NrRklMRVN0cmVhbTo6U2tGSUxFU3RyZWFtKFNrRmlsZSogZmlsZSwgc2l6ZV90IHNpemUsIHNpemVfdCBzdGFydCkKKyAgICA6IFNrRklMRVN0cmVhbShzdGQ6OnNoYXJlZF9wdHI8U2tGaWxlPihmaWxlLCBza19mY2xvc2UpLCBTa1NhZmVNYXRoOjpBZGQoc3RhcnQsIHNpemUpLCBzdGFydCkKIHsgfQogCi1Ta0ZJTEVTdHJlYW06OlNrRklMRVN0cmVhbShGSUxFKiBmaWxlLCBzaXplX3Qgc2l6ZSkKK1NrRklMRVN0cmVhbTo6U2tGSUxFU3RyZWFtKFNrRmlsZSogZmlsZSwgc2l6ZV90IHNpemUpCiAgICAgOiBTa0ZJTEVTdHJlYW0oZmlsZSwgc2l6ZSwgZmlsZSA/IHNrX2Z0ZWxsKGZpbGUpIDogMCkKIHsgfQogCi1Ta0ZJTEVTdHJlYW06OlNrRklMRVN0cmVhbShGSUxFKiBmaWxlKQotICAgIDogU2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxGSUxFPihmaWxlLCBza19mY2xvc2UpLAorU2tGSUxFU3RyZWFtOjpTa0ZJTEVTdHJlYW0oU2tGaWxlKiBmaWxlKQorICAgIDogU2tGSUxFU3RyZWFtKHN0ZDo6c2hhcmVkX3B0cjxTa0ZpbGU+KGZpbGUsIHNrX2ZjbG9zZSksCiAgICAgICAgICAgICAgICAgICAgZmlsZSA/IHNrX2ZnZXRzaXplKGZpbGUpIDogMCwKICAgICAgICAgICAgICAgICAgICBmaWxlID8gc2tfZnRlbGwoZmlsZSkgOiAwKQogeyB9CkBAIC04OTQsNyArODk0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogc3RhdGljIHNrX3NwPFNrRGF0YT4gbW1hcF9maWxlbmFtZShjb25zdCBjaGFyIHBhdGhbXSkgewotICAgIEZJTEUqIGZpbGUgPSBza19mb3BlbihwYXRoLCBrUmVhZF9Ta0ZJTEVfRmxhZyk7CisgICAgU2tGaWxlKiBmaWxlID0gc2tfZm9wZW4ocGF0aCwga1JlYWRfU2tGSUxFX0ZsYWcpOwogICAgIGlmIChudWxscHRyID09IGZpbGUpIHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTdHJpa2VDYWNoZS5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tTdHJpa2VDYWNoZS5oCmluZGV4IGNmOTNlMTEuLjUzNGI2NDUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrU3RyaWtlQ2FjaGUuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1N0cmlrZUNhY2hlLmgKQEAgLTUwLDEzICs1MCwyMSBAQAogICAgICAgICAgICAgICAgICwgZlBpbm5lcntzdGQ6Om1vdmUocGlubmVyKX0ge30KIAogICAgICAgICBTa0dseXBoKiBtZXJnZUdseXBoQW5kSW1hZ2UoU2tQYWNrZWRHbHlwaElEIHRvSUQsIGNvbnN0IFNrR2x5cGgmIGZyb20pIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtnbHlwaCwgaW5jcmVhc2VdID0gZlNjYWxlckNhY2hlLm1lcmdlR2x5cGhBbmRJbWFnZSh0b0lELCBmcm9tKTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihnbHlwaCwgaW5jcmVhc2UsIGZTY2FsZXJDYWNoZS5tZXJnZUdseXBoQW5kSW1hZ2UodG9JRCwgZnJvbSkpOworI2VuZGlmCiAgICAgICAgICAgICB0aGlzLT51cGRhdGVEZWx0YShpbmNyZWFzZSk7CiAgICAgICAgICAgICByZXR1cm4gZ2x5cGg7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBTa1BhdGgqIG1lcmdlUGF0aChTa0dseXBoKiBnbHlwaCwgY29uc3QgU2tQYXRoKiBwYXRoLCBib29sIGhhaXJsaW5lKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbZ2x5cGhQYXRoLCBpbmNyZWFzZV0gPSBmU2NhbGVyQ2FjaGUubWVyZ2VQYXRoKGdseXBoLCBwYXRoLCBoYWlybGluZSk7CisjZWxzZQorICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZ2x5cGhQYXRoLCBpbmNyZWFzZSwgZlNjYWxlckNhY2hlLm1lcmdlUGF0aChnbHlwaCwgcGF0aCwgaGFpcmxpbmUpKTsKKyNlbmRpZgogICAgICAgICAgICAgdGhpcy0+dXBkYXRlRGVsdGEoaW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuIGdseXBoUGF0aDsKICAgICAgICAgfQpAQCAtNzYsMjEgKzg0LDMzIEBACiAKICAgICAgICAgU2tTcGFuPGNvbnN0IFNrR2x5cGgqPiBtZXRyaWNzKFNrU3Bhbjxjb25zdCBTa0dseXBoSUQ+IGdseXBoSURzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tHbHlwaCogcmVzdWx0c1tdKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbZ2x5cGhzLCBpbmNyZWFzZV0gPSBmU2NhbGVyQ2FjaGUubWV0cmljcyhnbHlwaElEcywgcmVzdWx0cyk7CisjZWxzZQorICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZ2x5cGhzLCBpbmNyZWFzZSwgZlNjYWxlckNhY2hlLm1ldHJpY3MoZ2x5cGhJRHMsIHJlc3VsdHMpKTsKKyNlbmRpZgogICAgICAgICAgICAgdGhpcy0+dXBkYXRlRGVsdGEoaW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuIGdseXBoczsKICAgICAgICAgfQogCiAgICAgICAgIFNrU3Bhbjxjb25zdCBTa0dseXBoKj4gcHJlcGFyZVBhdGhzKFNrU3Bhbjxjb25zdCBTa0dseXBoSUQ+IGdseXBoSURzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0dseXBoKiByZXN1bHRzW10pIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtnbHlwaHMsIGluY3JlYXNlXSA9IGZTY2FsZXJDYWNoZS5wcmVwYXJlUGF0aHMoZ2x5cGhJRHMsIHJlc3VsdHMpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBocywgaW5jcmVhc2UsIGZTY2FsZXJDYWNoZS5wcmVwYXJlUGF0aHMoZ2x5cGhJRHMsIHJlc3VsdHMpKTsKKyNlbmRpZgogICAgICAgICAgICAgdGhpcy0+dXBkYXRlRGVsdGEoaW5jcmVhc2UpOwogICAgICAgICAgICAgcmV0dXJuIGdseXBoczsKICAgICAgICAgfQogCiAgICAgICAgIFNrU3Bhbjxjb25zdCBTa0dseXBoKj4gcHJlcGFyZUltYWdlcyhTa1NwYW48Y29uc3QgU2tQYWNrZWRHbHlwaElEPiBnbHlwaElEcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrR2x5cGgqIHJlc3VsdHNbXSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW2dseXBocywgaW5jcmVhc2VdID0gZlNjYWxlckNhY2hlLnByZXBhcmVJbWFnZXMoZ2x5cGhJRHMsIHJlc3VsdHMpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGdseXBocywgaW5jcmVhc2UsIGZTY2FsZXJDYWNoZS5wcmVwYXJlSW1hZ2VzKGdseXBoSURzLCByZXN1bHRzKSk7CisjZW5kaWYKICAgICAgICAgICAgIHRoaXMtPnVwZGF0ZURlbHRhKGluY3JlYXNlKTsKICAgICAgICAgICAgIHJldHVybiBnbHlwaHM7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrVk0uY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tWTS5jcHAKaW5kZXggYWRmZGI4ZC4uYzY3YjRlNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tWTS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tWTS5jcHAKQEAgLTEzNDMsNyArMTM0MywxMSBAQAogICAgIH0KIAogICAgIENvbG9yIEJ1aWxkZXI6OnVuaWZvcm1Db2xvcihTa0NvbG9yNGYgY29sb3IsIFVuaWZvcm1zKiB1bmlmb3JtcykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbcixnLGIsYV0gPSBjb2xvcjsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHIsZyxiLGEsIGNvbG9yKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgdW5pZm9ybUYodW5pZm9ybXMtPnB1c2hGKHIpKSwKICAgICAgICAgICAgIHVuaWZvcm1GKHVuaWZvcm1zLT5wdXNoRihnKSksCkBAIC0xMzkxLDcgKzEzOTUsMTEgQEAKICAgICBDb2xvciBCdWlsZGVyOjp0b19yZ2JhKEhTTEEgYykgewogICAgICAgICAvLyBTZWUgR3JSR0JUb0hTTEZpbHRlckVmZmVjdC5mcAogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtoLHMsbCxhXSA9IGM7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfNChoLHMsbCxhLCBjKTsKKyNlbmRpZgogICAgICAgICBGMzIgeCA9IHMgKiAoMS4wZiAtIGFicyhsICsgbCAtIDEuMGYpKTsKIAogICAgICAgICBhdXRvIGh1ZV90b19yZ2IgPSBbJixsPWxdKGF1dG8gaHVlKSB7CkBAIC0yNTU4LDcgKzI1NjYsMTEgQEAKICAgICAgICAgc3RkOjp2ZWN0b3I8bGx2bTo6VmFsdWUqPiB2YWxzKGluc3RydWN0aW9ucy5zaXplKCkpOwogCiAgICAgICAgIGF1dG8gZW1pdCA9IFsmXShzaXplX3QgaSwgYm9vbCBzY2FsYXIsIElSQnVpbGRlciogYikgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW29wLCB4LHkseix3LCBpbW1BLGltbUIsaW1tQywgZGVhdGgsY2FuX2hvaXN0XSA9IGluc3RydWN0aW9uc1tpXTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMTAob3AsIHgseSx6LHcsIGltbUEsaW1tQixpbW1DLCBkZWF0aCxjYW5faG9pc3QsIGluc3RydWN0aW9uc1tpXSk7CisjZW5kaWYKIAogICAgICAgICAgICAgbGx2bTo6VHlwZSAqaTEgICAgPSBsbHZtOjpUeXBlOjpnZXRJbnQxVHkgKCpjdHgpLAogICAgICAgICAgICAgICAgICAgICAgICAqaTggICAgPSBsbHZtOjpUeXBlOjpnZXRJbnQ4VHkgKCpjdHgpLApAQCAtMzQwNyw3ICszNDE5LDEyIEBACiAgICAgICAgICAgICAgICAgaWYgKHYgPT0gIHcgJiYgcncgIT0gTkEpIHsgcmV0dXJuIHJ3OyB9CiAKICAgICAgICAgICAgICAgICAvLyBTZWFyY2ggaW50ZXItaW5zdHJ1Y3Rpb24gcmVnaXN0ZXIgbWFwLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gW3IsdmFsXSA6IFNrTWFrZUVudW1lcmF0ZShyZWdzKSkgeworI2Vsc2UKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrTWFrZUVudW1lcmF0ZShyZWdzKSkgeworICAgICAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihyLHZhbCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09IHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVfcmVncygoUmVnKXIsIHYpOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1ZNLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1ZNLmgKaW5kZXggZmI0NzdlMy4uMGI2OTRmYSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tWTS5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrVk0uaApAQCAtMTMyOSw0ICsxMzI5LDM3IEBACiAjdW5kZWYgU0kKIH0gIC8vIG5hbWVzcGFjZSBza3ZtCiAKKyNpZmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8U2tSR0JBNGY8U2tBbHBoYVR5cGU6OmtVbnByZW11bF9Ta0FscGhhVHlwZT4+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKFNrUkdCQTRmPFNrQWxwaGFUeXBlOjprVW5wcmVtdWxfU2tBbHBoYVR5cGU+JiYgdCkgeworICAgIHJldHVybiBzdGQ6OmZvcndhcmQ8c3RkOjp0dXBsZTxmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdD4+KAorICAgICAgICBzdGQ6Om1ha2VfdHVwbGUodC5mUiwgdC5mRywgdC5mQiwgdC5mQSkpOworICB9CisgIHN0YXRpYyBhdXRvIENvZXJjZShjb25zdCBTa1JHQkE0ZjxTa0FscGhhVHlwZTo6a1VucHJlbXVsX1NrQWxwaGFUeXBlPiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5mUiwgdC5mRywgdC5mQiwgdC5mQSk7CisgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8c2t2bTo6Q29sb3I+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKHNrdm06OkNvbG9yJiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1vdmUoc3RkOjptYWtlX3R1cGxlKHQuciwgdC5nLCB0LmIsIHQuYSkpOworICB9CisgIHN0YXRpYyBhdXRvIENvZXJjZShza3ZtOjpDb2xvciYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5yLCB0LmcsIHQuYiwgdC5hKTsKKyAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxza3ZtOjpIU0xBPiB7CisgIHN0YXRpYyBhdXRvIENvZXJjZShza3ZtOjpIU0xBJiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1vdmUoc3RkOjptYWtlX3R1cGxlKHQuaCwgdC5zLCB0LmwsIHQuYSkpOworICB9CisgIHN0YXRpYyBhdXRvIENvZXJjZShza3ZtOjpIU0xBJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmgsIHQucywgdC5sLCB0LmEpOworICB9Cit9OworI2VuZGlmCisKICNlbmRpZi8vU2tWTV9ERUZJTkVECmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1lVVkFJbmZvLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQUluZm8uY3BwCmluZGV4IDc0YjNhODQuLjlhZGQ5ZWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQUluZm8uY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQUluZm8uY3BwCkBAIC0yNjEsNyArMjYxLDE2IEBACiAgICAgU2tBU1NFUlQocGxhbmVzQW5kSW5kaWNlcyk7CiAgICAgWVVWQUxvY2F0aW9ucyB5dXZhTG9jYXRpb25zOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU2tZVVZBSW5mbzo6a1lVVkFDaGFubmVsQ291bnQ7ICsraSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3BsYW5lLCBjaGFuSWR4XSA9IHBsYW5lc0FuZEluZGljZXNbaV07CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihwbGFuZSwgY2hhbklkeCwgcGxhbmVzQW5kSW5kaWNlc1tpXSk7CisjZW5kaWYKKyNlbHNlCisgICAgICAgIGludCBwbGFuZSA9IHBsYW5lc0FuZEluZGljZXNbaV0ucGxhbmU7CisgICAgICAgIGludCBjaGFuSWR4ID0gcGxhbmVzQW5kSW5kaWNlc1tpXS5jaGFuSWR4OworI2VuZGlmCiAgICAgICAgIFNrQ29sb3JDaGFubmVsIGNoYW5uZWw7CiAgICAgICAgIGlmIChwbGFuZSA+PSAwKSB7CiAgICAgICAgICAgICBpZiAoIWNoYW5uZWxfaW5kZXhfdG9fY2hhbm5lbChwbGFuZUNoYW5uZWxGbGFnc1twbGFuZV0sIGNoYW5JZHgsICZjaGFubmVsKSkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2NvcmUvU2tZVVZBSW5mb0xvY2F0aW9uLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1lVVkFJbmZvTG9jYXRpb24uaAppbmRleCA3NTM2OGFjLi4zODYxNDkyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1lVVkFJbmZvTG9jYXRpb24uaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1lVVkFJbmZvTG9jYXRpb24uaApAQCAtNTgsNCArNTgsMTMgQEAKICAgICB9CiB9OwogCisjaWZkZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCit0ZW1wbGF0ZSA8Pgorc3RydWN0IENvZXJjZXJUb1R1cGxlPFNrWVVWQUluZm86OllVVkFMb2NhdGlvbj4geworICBzdGF0aWMgYXV0byBDb2VyY2UoY29uc3QgU2tZVVZBSW5mbzo6WVVWQUxvY2F0aW9uJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmZQbGFuZSwgdC5mQ2hhbm5lbCk7CisgIH0KK307CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvY29yZS9Ta1lVVkFQaXhtYXBzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQVBpeG1hcHMuY3BwCmluZGV4IGM5NTY1OTYuLjY4YjQxN2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQVBpeG1hcHMuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9jb3JlL1NrWVVWQVBpeG1hcHMuY3BwCkBAIC0xMDIsNyArMTAyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VucHJlbXVsX1NrQWxwaGFUeXBlKTsKICAgICAgICAgaW50IG51bVJlcXVpcmVkQ2hhbm5lbHMgPSB5dXZhSW5mby5udW1DaGFubmVsc0luUGxhbmUoaSk7CiAgICAgICAgIFNrQVNTRVJUKG51bVJlcXVpcmVkQ2hhbm5lbHMgPiAwKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW251bUNvbG9yVHlwZUNoYW5uZWxzLCBjb2xvclR5cGVEYXRhVHlwZV0gPSBOdW1DaGFubmVsc0FuZERhdGFUeXBlKGNvbG9yVHlwZXNbaV0pOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIobnVtQ29sb3JUeXBlQ2hhbm5lbHMsIGNvbG9yVHlwZURhdGFUeXBlLCBOdW1DaGFubmVsc0FuZERhdGFUeXBlKGNvbG9yVHlwZXNbaV0pKTsKKyNlbmRpZgogICAgICAgICBvayAmPSBpID09IDAgfHwgY29sb3JUeXBlRGF0YVR5cGUgPT0gZkRhdGFUeXBlOwogICAgICAgICBvayAmPSBudW1Db2xvclR5cGVDaGFubmVscyA+PSBudW1SZXF1aXJlZENoYW5uZWxzOwogICAgICAgICBvayAmPSBmUGxhbmVJbmZvc1tpXS52YWxpZFJvd0J5dGVzKGZSb3dCeXRlc1tpXSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9Ta1RhYmxlQ29sb3JGaWx0ZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2VmZmVjdHMvU2tUYWJsZUNvbG9yRmlsdGVyLmNwcAppbmRleCBlYjdkOWYwLi4xZGRmMDQ3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9Ta1RhYmxlQ29sb3JGaWx0ZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9lZmZlY3RzL1NrVGFibGVDb2xvckZpbHRlci5jcHAKQEAgLTIyMCw5ICsyMjAsMTUgQEAKICAgICAgICAgKGZsYWdzICYgKDEgPDwgMykpID8gbHV0c1szXSA6IG51bGxwdHIKICAgICApKTsKICAgICBza19zcDxTa0NvbG9yU3BhY2U+IGNvbG9yU3BhY2UgPSBHclRlc3Q6OlRlc3RDb2xvclNwYWNlKGQtPmZSYW5kb20pOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdWNjZXNzLCBmcF0gPSBhc19DRkIoZmlsdGVyKS0+YXNGcmFnbWVudFByb2Nlc3NvcigKICAgICAgICAgICAgIGQtPmlucHV0RlAoKSwgZC0+Y29udGV4dCgpLAogICAgICAgICAgICAgR3JDb2xvckluZm8oR3JDb2xvclR5cGU6OmtSR0JBXzg4ODgsIGtVbmtub3duX1NrQWxwaGFUeXBlLCBzdGQ6Om1vdmUoY29sb3JTcGFjZSkpKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoc3VjY2VzcywgZnAsIGFzX0NGQihmaWx0ZXIpLT5hc0ZyYWdtZW50UHJvY2Vzc29yKAorICAgICAgICAgICAgZC0+aW5wdXRGUCgpLCBkLT5jb250ZXh0KCksCisgICAgICAgICAgICBHckNvbG9ySW5mbyhHckNvbG9yVHlwZTo6a1JHQkFfODg4OCwga1Vua25vd25fU2tBbHBoYVR5cGUsIHN0ZDo6bW92ZShjb2xvclNwYWNlKSkpKTsKKyNlbmRpZgogICAgIFNrQVNTRVJUKHN1Y2Nlc3MpOwogICAgIHJldHVybiBzdGQ6Om1vdmUoZnApOwogfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrRGlzcGxhY2VtZW50TWFwSW1hZ2VGaWx0ZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrRGlzcGxhY2VtZW50TWFwSW1hZ2VGaWx0ZXIuY3BwCmluZGV4IDkyMDE5NWYuLjNlY2IxNjkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta0Rpc3BsYWNlbWVudE1hcEltYWdlRmlsdGVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tEaXNwbGFjZW1lbnRNYXBJbWFnZUZpbHRlci5jcHAKQEAgLTQ5Nyw4ICs0OTcsMTYgQEAKIAogI2lmIEdSX1RFU1RfVVRJTFMKIHN0ZDo6dW5pcXVlX3B0cjxHckZyYWdtZW50UHJvY2Vzc29yPiBHckRpc3BsYWNlbWVudE1hcEVmZmVjdDo6VGVzdENyZWF0ZShHclByb2Nlc3NvclRlc3REYXRhKiBkKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2Rpc3BWaWV3LCAgY3QxLCBhdDFdID0gZC0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhkaXNwVmlldywgIGN0MSwgYXQxLCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2NvbG9yVmlldywgY3QyLCBhdDJdID0gZC0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhjb2xvclZpZXcsIGN0MiwgYXQyLCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Q29tcG9uZW50ID0gc3RhdGljX2Nhc3Q8aW50PihTa0NvbG9yQ2hhbm5lbDo6a0xhc3RFbnVtKTsKICAgICBTa0NvbG9yQ2hhbm5lbCB4Q2hhbm5lbFNlbGVjdG9yID0KICAgICAgICAgc3RhdGljX2Nhc3Q8U2tDb2xvckNoYW5uZWw+KGQtPmZSYW5kb20tPm5leHRSYW5nZVUoMSwga01heENvbXBvbmVudCkpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrTGlnaHRpbmdJbWFnZUZpbHRlci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tMaWdodGluZ0ltYWdlRmlsdGVyLmNwcAppbmRleCBjYTQyZjUzLi42ZjMxYjA1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tMaWdodGluZ0ltYWdlRmlsdGVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tMaWdodGluZ0ltYWdlRmlsdGVyLmNwcApAQCAtMTcyNyw3ICsxNzI3LDExIEBACiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxHckZyYWdtZW50UHJvY2Vzc29yPiBEaWZmdXNlTGlnaHRpbmdFZmZlY3Q6OlRlc3RDcmVhdGUoR3JQcm9jZXNzb3JUZXN0RGF0YSogZCkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdCwgYXRdID0gZC0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2aWV3LCBjdCwgYXQsIGQtPnJhbmRvbVZpZXcoKSk7CisjZW5kaWYKICAgICBTa1NjYWxhciBzdXJmYWNlU2NhbGUgPSBkLT5mUmFuZG9tLT5uZXh0U1NjYWxhcjEoKTsKICAgICBTa1NjYWxhciBrZCA9IGQtPmZSYW5kb20tPm5leHRVU2NhbGFyMSgpOwogICAgIHNrX3NwPFNrSW1hZ2VGaWx0ZXJMaWdodD4gbGlnaHQoY3JlYXRlX3JhbmRvbV9saWdodChkLT5mUmFuZG9tKSk7CkBAIC0xOTE5LDcgKzE5MjMsMTEgQEAKIAogI2lmIEdSX1RFU1RfVVRJTFMKIHN0ZDo6dW5pcXVlX3B0cjxHckZyYWdtZW50UHJvY2Vzc29yPiBTcGVjdWxhckxpZ2h0aW5nRWZmZWN0OjpUZXN0Q3JlYXRlKEdyUHJvY2Vzc29yVGVzdERhdGEqIGQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmlldywgY3QsIGF0XSA9IGQtPnJhbmRvbVZpZXcoKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmlldywgY3QsIGF0LCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAgICAgU2tTY2FsYXIgc3VyZmFjZVNjYWxlID0gZC0+ZlJhbmRvbS0+bmV4dFNTY2FsYXIxKCk7CiAgICAgU2tTY2FsYXIga3MgPSBkLT5mUmFuZG9tLT5uZXh0VVNjYWxhcjEoKTsKICAgICBTa1NjYWxhciBzaGluaW5lc3MgPSBkLT5mUmFuZG9tLT5uZXh0VVNjYWxhcjEoKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta01vcnBob2xvZ3lJbWFnZUZpbHRlci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZWZmZWN0cy9pbWFnZWZpbHRlcnMvU2tNb3JwaG9sb2d5SW1hZ2VGaWx0ZXIuY3BwCmluZGV4IDNlZTNjZDguLjRkYTA5YzYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9lZmZlY3RzL2ltYWdlZmlsdGVycy9Ta01vcnBob2xvZ3lJbWFnZUZpbHRlci5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2VmZmVjdHMvaW1hZ2VmaWx0ZXJzL1NrTW9ycGhvbG9neUltYWdlRmlsdGVyLmNwcApAQCAtMzQ0LDcgKzM0NCwxMSBAQAogCiAjaWYgR1JfVEVTVF9VVElMUwogc3RkOjp1bmlxdWVfcHRyPEdyRnJhZ21lbnRQcm9jZXNzb3I+IEdyTW9ycGhvbG9neUVmZmVjdDo6VGVzdENyZWF0ZShHclByb2Nlc3NvclRlc3REYXRhKiBkKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0LCBhdF0gPSBkLT5yYW5kb21WaWV3KCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18zKHZpZXcsIGN0LCBhdCwgZC0+cmFuZG9tVmlldygpKTsKKyNlbmRpZgogCiAgICAgTW9ycGhEaXJlY3Rpb24gZGlyID0gZC0+ZlJhbmRvbS0+bmV4dEJvb2woKSA/IE1vcnBoRGlyZWN0aW9uOjprWCA6IE1vcnBoRGlyZWN0aW9uOjprWTsKICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhSYWRpdXMgPSAxMDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JCbHVyVXRpbHMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HckJsdXJVdGlscy5jcHAKaW5kZXggMmYyZTc5Zi4uODQwYThmOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HckJsdXJVdGlscy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HckJsdXJVdGlscy5jcHAKQEAgLTQwNSw3ICs0MDUsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIGtleS0+c2V0Q3VzdG9tRGF0YShjcmVhdGVfZGF0YSgqbWFza1JlY3QsIHVuY2xpcHBlZERldlNoYXBlQm91bmRzKSk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtjYWNoZWRWaWV3LCBkYXRhXSA9IHRocmVhZFNhZmVDYWNoZS0+ZmluZE9yQWRkV2l0aERhdGEoKmtleSwgbGF6eVZpZXcpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoY2FjaGVkVmlldywgZGF0YSwgdGhyZWFkU2FmZUNhY2hlLT5maW5kT3JBZGRXaXRoRGF0YSgqa2V5LCBsYXp5VmlldykpOworI2VuZGlmCiAgICAgICAgIGlmIChjYWNoZWRWaWV3ICE9IGxhenlWaWV3KSB7CiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSBncHUtdGhyZWFkIGxvc3Qgb3V0IHRvIGEgcmVjb3JkaW5nIHRocmVhZCAtIHVzZSBpdHMgcmVzdWx0LgogICAgICAgICAgICAgU2tBU1NFUlQoZGF0YSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyRHJhd0luZGlyZWN0Q29tbWFuZC5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HckRyYXdJbmRpcmVjdENvbW1hbmQuaAppbmRleCBkNjQ1MjIzLi4yMDQ5NTkxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyRHJhd0luZGlyZWN0Q29tbWFuZC5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JEcmF3SW5kaXJlY3RDb21tYW5kLmgKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx1dGlsaXR5PgogCisjaW5jbHVkZSAiaW5jbHVkZS9jb3JlL2NwcDE3b25jcHAxNC5oIgorCiBzdHJ1Y3QgR3JEcmF3SW5kaXJlY3RDb21tYW5kIHsKICAgICB1aW50MzJfdCBmVmVydGV4Q291bnQ7CiAgICAgdWludDMyX3QgZkluc3RhbmNlQ291bnQ7CkBAIC0xMDAsNCArMTAyLDIyIEBACiAgICAgR3JEcmF3SW5kZXhlZEluZGlyZWN0Q29tbWFuZCogZkRhdGE7CiB9OwogCisjaWZkZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCit0ZW1wbGF0ZSA8Pgorc3RydWN0IENvZXJjZXJUb1R1cGxlPEdyRHJhd0luZGlyZWN0Q29tbWFuZD4geworICBzdGF0aWMgYXV0byBDb2VyY2UoY29uc3QgR3JEcmF3SW5kaXJlY3RDb21tYW5kJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmZWZXJ0ZXhDb3VudCwgdC5mSW5zdGFuY2VDb3VudCwKKyAgICAgICAgdC5mQmFzZVZlcnRleCwgdC5mQmFzZUluc3RhbmNlKTsKKyAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxHckRyYXdJbmRleGVkSW5kaXJlY3RDb21tYW5kPiB7CisgIHN0YXRpYyBhdXRvIENvZXJjZShjb25zdCBHckRyYXdJbmRleGVkSW5kaXJlY3RDb21tYW5kJiB0KSB7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV90dXBsZSh0LmZJbmRleENvdW50LCB0LmZJbnN0YW5jZUNvdW50LCB0LmZCYXNlSW5kZXgsCisgICAgICAgIHQuZkJhc2VWZXJ0ZXgsIHQuZkJhc2VJbnN0YW5jZSk7CisgIH0KK307CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyR2VvbWV0cnlQcm9jZXNzb3IuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9Hckdlb21ldHJ5UHJvY2Vzc29yLmNwcAppbmRleCAwNTA1N2QwLi5hOWI4ZGNkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyR2VvbWV0cnlQcm9jZXNzb3IuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JHZW9tZXRyeVByb2Nlc3Nvci5jcHAKQEAgLTE2MSw3ICsxNjEsMTMgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvJiBbdmFyeWluZ0ZTVmFyLCBoYXNDb29yZHNQYXJhbV0gPSByZXN1bHRbJmZwXTsKKyNlbHNlCisgICAgICAgIGF1dG8mIGl0ZW0gPSByZXN1bHRbJmZwXTsKKyAgICAgICAgYXV0byYgdmFyeWluZ0ZTVmFyID0gaXRlbS5jb29yZHNWYXJ5aW5nOworICAgICAgICBhdXRvJiBoYXNDb29yZHNQYXJhbSA9IGl0ZW0uaGFzQ29vcmRzUGFyYW07CisjZW5kaWYKICAgICAgICAgaGFzQ29vcmRzUGFyYW0gPSBmcC51c2VzU2FtcGxlQ29vcmRzRGlyZWN0bHkoKTsKIAogICAgICAgICAvLyBXZSBhZGQgYSB2YXJ5aW5nIGlmIHdlJ3JlIGluIGEgY2hhaW4gb2YgbWF0cmljZXMgbXVsdGlwbGllZCBieSBsb2NhbCBvciBkZXZpY2UgY29vcmRzLgpAQCAtMTc5LDcgKzE4NSwxNCBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBhbHJlYWR5IGEgdmFyeWluZyB0aGF0IGluY29ycG9yYXRlcyBhbGwgbWF0cmljZXMgZnJvbSB0aGUgcm9vdCB0bwogICAgICAgICAgICAgICAgIC8vIGxhc3RNYXRyaXhGUCBqdXN0IHVzZSBpdC4gT3RoZXJ3aXNlLCB3ZSBhZGQgaXQuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgIGF1dG8mIFt2YXJ5aW5nLCBpbnB1dENvb3JkcywgdmFyeWluZ0lkeF0gPSBmVHJhbnNmb3JtVmFyeWluZ3NNYXBbbGFzdE1hdHJpeEZQXTsKKyNlbHNlCisgICAgICAgICAgICAgICAgYXV0byYgaXRlbSA9IGZUcmFuc2Zvcm1WYXJ5aW5nc01hcFtsYXN0TWF0cml4RlBdOworICAgICAgICAgICAgICAgIGF1dG8mIHZhcnlpbmcgPSBpdGVtLnZhcnlpbmc7CisgICAgICAgICAgICAgICAgYXV0byYgaW5wdXRDb29yZHMgPSBpdGVtLmlucHV0Q29vcmRzOworICAgICAgICAgICAgICAgIGF1dG8mIHZhcnlpbmdJZHggPSBpdGVtLnRyYXZlcnNhbE9yZGVyOworI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmcudHlwZSgpID09IGtWb2lkX0dyU0xUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmcgPSBHckdMU0xWYXJ5aW5nKGhhc1BlcnNwZWN0aXZlID8ga0Zsb2F0M19HclNMVHlwZSA6IGtGbG9hdDJfR3JTTFR5cGUpOwogICAgICAgICAgICAgICAgICAgICBTa1N0cmluZyBzdHJWYXJ5aW5nTmFtZSA9IFNrU3RyaW5nUHJpbnRmKCJUcmFuc2Zvcm1lZENvb3Jkc18lZCIsCkBAIC0yMzMsNyArMjQ2LDEyIEBACiAgICAgICAgIHBxLnB1c2goZW50cnkpOwogICAgIH0pOwogICAgIGZvciAoOyAhcHEuZW1wdHkoKTsgcHEucG9wKCkpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGNvbnN0IGF1dG8mIFtmcCwgaW5mb10gPSBwcS50b3AoKTsKKyNlbHNlCisgICAgICAgIGNvbnN0IEdyRnJhZ21lbnRQcm9jZXNzb3IqIGZwOyBUcmFuc2Zvcm1JbmZvIGluZm87CisgICAgICAgIHN0ZDo6dGllKGZwLCBpbmZvKSA9IHBxLnRvcCgpOworI2VuZGlmCiAgICAgICAgIC8vIElmIHdlIHJlY29yZGVkIGEgdHJhbnNmb3JtIGluZm8sIGl0cyBzYW1wbGUgbWF0cml4IG11c3QgYmUgdW5pZm9ybQogICAgICAgICBTa0FTU0VSVChmcC0+c2FtcGxlVXNhZ2UoKS5pc1VuaWZvcm1NYXRyaXgoKSk7CiAgICAgICAgIEdyU2hhZGVyVmFyIHVuaWZvcm0gPSB1bmlmb3JtSGFuZGxlci0+bGlmdFVuaWZvcm1Ub1ZlcnRleFNoYWRlcigKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JPcHNSZW5kZXJQYXNzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JPcHNSZW5kZXJQYXNzLmNwcAppbmRleCBmNDA4YjNmLi45ZjI4NGM3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyT3BzUmVuZGVyUGFzcy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9Hck9wc1JlbmRlclBhc3MuY3BwCkBAIC0yODMsNyArMjgzLDExIEBACiAgICAgICAgIGF1dG8qIGNtZHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdyRHJhd0luZGlyZWN0Q29tbWFuZCo+KAogICAgICAgICAgICAgICAgIGNwdUluZGlyZWN0QnVmZmVyLT5kYXRhKCkgKyBidWZmZXJPZmZzZXQpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRyYXdDb3VudDsgKytpKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbdmVydGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGJhc2VWZXJ0ZXgsIGJhc2VJbnN0YW5jZV0gPSBjbWRzW2ldOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHZlcnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBiYXNlVmVydGV4LCBiYXNlSW5zdGFuY2UsIGNtZHNbaV0pOworI2VuZGlmCiAgICAgICAgICAgICB0aGlzLT5vbkRyYXdJbnN0YW5jZWQoaW5zdGFuY2VDb3VudCwgYmFzZUluc3RhbmNlLCB2ZXJ0ZXhDb3VudCwgYmFzZVZlcnRleCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMzEwLDcgKzMxNCwxMSBAQAogICAgICAgICBhdXRvKiBjbWRzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHckRyYXdJbmRleGVkSW5kaXJlY3RDb21tYW5kKj4oCiAgICAgICAgICAgICAgICAgY3B1SW5kaXJlY3RCdWZmZXItPmRhdGEoKSArIGJ1ZmZlck9mZnNldCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZHJhd0NvdW50OyArK2kpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtpbmRleENvdW50LCBpbnN0YW5jZUNvdW50LCBiYXNlSW5kZXgsIGJhc2VWZXJ0ZXgsIGJhc2VJbnN0YW5jZV0gPSBjbWRzW2ldOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR181KGluZGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGJhc2VJbmRleCwgYmFzZVZlcnRleCwgYmFzZUluc3RhbmNlLCBjbWRzW2ldKTsKKyNlbmRpZgogICAgICAgICAgICAgdGhpcy0+b25EcmF3SW5kZXhlZEluc3RhbmNlZChpbmRleENvdW50LCBiYXNlSW5kZXgsIGluc3RhbmNlQ291bnQsIGJhc2VJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVZlcnRleCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JQcm9jZXNzb3JVbml0VGVzdC5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyUHJvY2Vzc29yVW5pdFRlc3QuY3BwCmluZGV4IDVlMWZlMTAuLjg4ZjAzYzkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JQcm9jZXNzb3JVbml0VGVzdC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclByb2Nlc3NvclVuaXRUZXN0LmNwcApAQCAtNTcsMTQgKzU3LDI0IEBACiAKIEdyUHJvY2Vzc29yVGVzdERhdGE6OlZpZXdJbmZvIEdyUHJvY2Vzc29yVGVzdERhdGE6OnJhbmRvbUFscGhhT25seVZpZXcoKSB7CiAgICAgaW50IG51bUFscGhhT25seSA9IDA7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoY29uc3QgYXV0byYgW3YsIGN0LCBhdF0gOiBmVmlld3MpIHsKKyNlbHNlCisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogZlZpZXdzKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHYsIGN0LCBhdCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBpZiAoR3JDb2xvclR5cGVJc0FscGhhT25seShjdCkpIHsKICAgICAgICAgICAgICsrbnVtQWxwaGFPbmx5OwogICAgICAgICB9CiAgICAgfQogICAgIFNrQVNTRVJUKG51bUFscGhhT25seSk7CiAgICAgaW50IGlkeCA9IGZSYW5kb20tPm5leHRVTGVzc1RoYW4obnVtQWxwaGFPbmx5KTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChjb25zdCBhdXRvJiBbdiwgY3QsIGF0XSA6IGZWaWV3cykgeworI2Vsc2UKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBmVmlld3MpIHsKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModiwgY3QsIGF0LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIGlmIChHckNvbG9yVHlwZUlzQWxwaGFPbmx5KGN0KSAmJiAhaWR4LS0pIHsKICAgICAgICAgICAgIHJldHVybiB7diwgY3QsIGF0fTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclJlY29yZGluZ0NvbnRleHQuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclJlY29yZGluZ0NvbnRleHQuY3BwCmluZGV4IDA0MTg2NzAuLjhiYjk4MTUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JSZWNvcmRpbmdDb250ZXh0LmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyUmVjb3JkaW5nQ29udGV4dC5jcHAKQEAgLTIyMiw3ICsyMjIsMTIgQEAKICAgICBrZXlzLT5wdXNoX2JhY2soU2tTdHJpbmcoImRtc2FhX211bHRpc2FtcGxlX3JlbmRlcl9wYXNzZXMiKSk7CiAgICAgdmFsdWVzLT5wdXNoX2JhY2soZk51bU11bHRpc2FtcGxlUmVuZGVyUGFzc2VzKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGNvbnN0IGF1dG8mIFtuYW1lLCBjb3VudF0gOiBmVHJpZ2dlckNvdW50cykgeworI2Vsc2UKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBmVHJpZ2dlckNvdW50cykgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihuYW1lLCBjb3VudCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBrZXlzLT5wdXNoX2JhY2soU2tTdHJpbmdQcmludGYoImRtc2FhX3RyaWdnZXJfJXMiLCBuYW1lLmNfc3RyKCkpKTsKICAgICAgICAgdmFsdWVzLT5wdXNoX2JhY2soY291bnQpOwogICAgIH0KQEAgLTIzMyw3ICsyMzgsMTIgQEAKICAgICBTa0RlYnVnZigiRE1TQUEgTXVsdGlzYW1wbGUgUmVuZGVyIFBhc3NlczogJWRcbiIsIGZOdW1NdWx0aXNhbXBsZVJlbmRlclBhc3Nlcyk7CiAgICAgaWYgKCFmVHJpZ2dlckNvdW50cy5lbXB0eSgpKSB7CiAgICAgICAgIFNrRGVidWdmKCJETVNBQSBUcmlnZ2VyczpcbiIpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBbbmFtZSwgY291bnRdIDogZlRyaWdnZXJDb3VudHMpIHsKKyNlbHNlCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGZUcmlnZ2VyQ291bnRzKSB7CisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihuYW1lLCBjb3VudCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgU2tEZWJ1Z2YoIiAgICAlczogJWRcbiIsIG5hbWUuY19zdHIoKSwgY291bnQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQyLDcgKzI1MiwxMiBAQAogdm9pZCBHclJlY29yZGluZ0NvbnRleHQ6OkRNU0FBU3RhdHM6Om1lcmdlKGNvbnN0IERNU0FBU3RhdHMmIHN0YXRzKSB7CiAgICAgZk51bVJlbmRlclBhc3NlcyArPSBzdGF0cy5mTnVtUmVuZGVyUGFzc2VzOwogICAgIGZOdW1NdWx0aXNhbXBsZVJlbmRlclBhc3NlcyArPSBzdGF0cy5mTnVtTXVsdGlzYW1wbGVSZW5kZXJQYXNzZXM7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoY29uc3QgYXV0byYgW25hbWUsIGNvdW50XSA6IHN0YXRzLmZUcmlnZ2VyQ291bnRzKSB7CisjZWxzZQorICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IHN0YXRzLmZUcmlnZ2VyQ291bnRzKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKG5hbWUsIGNvdW50LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIGZUcmlnZ2VyQ291bnRzW25hbWVdICs9IGNvdW50OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JSZWNvcmRpbmdDb250ZXh0UHJpdi5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L0dyUmVjb3JkaW5nQ29udGV4dFByaXYuY3BwCmluZGV4IDZlNGYyY2IuLmU0NDMzNjEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JSZWNvcmRpbmdDb250ZXh0UHJpdi5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclJlY29yZGluZ0NvbnRleHRQcml2LmNwcApAQCAtMzUxLDcgKzM1MSwxMSBAQAogICAgICAgICB9CiAgICAgICAgIGNvbnN0IEdyQ2FwcyogY2FwcyA9IHRoaXMtPmNhcHMoKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbY3QsIF9dID0gY2Fwcy0+Z2V0RmFsbGJhY2tDb2xvclR5cGVBbmRGb3JtYXQoaW5mby5jb2xvclR5cGUoKSwgc2FtcGxlQ291bnQpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoY3QsIF8sIGNhcHMtPmdldEZhbGxiYWNrQ29sb3JUeXBlQW5kRm9ybWF0KGluZm8uY29sb3JUeXBlKCksIHNhbXBsZUNvdW50KSk7CisjZW5kaWYKICAgICAgICAgaWYgKGN0ID09IEdyQ29sb3JUeXBlOjprVW5rbm93bikgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvR3JUaHJlYWRTYWZlQ2FjaGUuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclRocmVhZFNhZmVDYWNoZS5jcHAKaW5kZXggNDRiMDIyNS4uMmFjMGI2MyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclRocmVhZFNhZmVDYWNoZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9HclRocmVhZFNhZmVDYWNoZS5jcHAKQEAgLTI0MCw3ICsyNDAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHclN1cmZhY2VQcm94eVZpZXcmIHYpIHsKICAgICBTa0F1dG9TcGlubG9jayBsb2Nre2ZTcGluTG9ja307CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmlldywgZGF0YV0gPSB0aGlzLT5pbnRlcm5hbEZpbmQoa2V5KTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmlldywgZGF0YSwgdGhpcy0+aW50ZXJuYWxGaW5kKGtleSkpOworI2VuZGlmCiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgcmV0dXJuIHsgc3RkOjptb3ZlKHZpZXcpLCBzdGQ6Om1vdmUoZGF0YSkgfTsKICAgICB9CkBAIC0zMjYsNyArMzMwLDExIEBACiAgICAgY29uc3QgR3JDYXBzKiBjYXBzID0gZENvbnRleHQtPnByaXYoKS5jYXBzKCk7CiAKICAgICBjb25zdGV4cHIgaW50IGtTYW1wbGVDbnQgPSAxOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtuZXdDVCwgZm9ybWF0XSA9IGNhcHMtPmdldEZhbGxiYWNrQ29sb3JUeXBlQW5kRm9ybWF0KG9yaWdDVCwga1NhbXBsZUNudCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKG5ld0NULCBmb3JtYXQsIGNhcHMtPmdldEZhbGxiYWNrQ29sb3JUeXBlQW5kRm9ybWF0KG9yaWdDVCwga1NhbXBsZUNudCkpOworI2VuZGlmCiAKICAgICBpZiAobmV3Q1QgPT0gR3JDb2xvclR5cGU6OmtVbmtub3duKSB7CiAgICAgICAgIHJldHVybiB7R3JTdXJmYWNlUHJveHlWaWV3KG51bGxwdHIpLCBudWxscHRyfTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvU2tHci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L1NrR3IuY3BwCmluZGV4IDRmMDY0ZDQuLjI5ZjAyYzIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvU2tHci5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9Ta0dyLmNwcApAQCAtMzgyLDcgKzM4MiwxMSBAQAogICAgIC8vIFBpeGVsIDQgICAgICAgICAgIEFkcmVubzY0MCAgICAgICA1MDAgICAgMTEwbXMgICAgICAgIDIyMW1zICgyLjAxeCkgICAgIDIxNG1zICgxLjk1eCkKICAgICAvLyBHYWxheHkgUzIwIEZFICAgICBNYWxpLUc3NyBNUDExICAgNjAwICAgIDE2NW1zICAgICAgICAzNjBtcyAoMi4xOHgpICAgICAyNjBtcyAoMS41OHgpCiAgICAgc3RhdGljIGNvbnN0IFNrQml0bWFwIGdMVVQgPSBtYWtlX2RpdGhlcl9sdXQoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdGV4LCBjdF0gPSBHck1ha2VDYWNoZWRCaXRtYXBQcm94eVZpZXcockNvbnRleHQsIGdMVVQsIEdyTWlwbWFwcGVkOjprTm8pOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih0ZXgsIGN0LCBHck1ha2VDYWNoZWRCaXRtYXBQcm94eVZpZXcockNvbnRleHQsIGdMVVQsIEdyTWlwbWFwcGVkOjprTm8pKTsKKyNlbmRpZgogICAgIGlmICghdGV4KSB7CiAgICAgICAgIHJldHVybiBpbnB1dEZQOwogICAgIH0KQEAgLTUyNSw4ICs1MjksMTMgQEAKICAgICAgICAgICAgIFNrQ29sb3JTcGFjZSogZHN0Q1MgPSBkc3RDb2xvckluZm8uY29sb3JTcGFjZSgpOwogICAgICAgICAgICAgZ3JQYWludC0+c2V0Q29sb3I0Zihjb2xvckZpbHRlci0+ZmlsdGVyQ29sb3I0ZihvcmlnQ29sb3IsIGRzdENTLCBkc3RDUykucHJlbXVsKCkpOwogICAgICAgICB9IGVsc2UgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW3N1Y2Nlc3MsIGZwXSA9IGFzX0NGQihjb2xvckZpbHRlciktPmFzRnJhZ21lbnRQcm9jZXNzb3Ioc3RkOjptb3ZlKHBhaW50RlApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBkc3RDb2xvckluZm8pOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHN1Y2Nlc3MsIGZwLCBhc19DRkIoY29sb3JGaWx0ZXIpLT5hc0ZyYWdtZW50UHJvY2Vzc29yKHN0ZDo6bW92ZShwYWludEZQKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgZHN0Q29sb3JJbmZvKSk7CisjZW5kaWYKICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvU3VyZmFjZUNvbnRleHQuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9TdXJmYWNlQ29udGV4dC5jcHAKaW5kZXggODZlYzMwYi4uNTgwNDBlNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9TdXJmYWNlQ29udGV4dC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9TdXJmYWNlQ29udGV4dC5jcHAKQEAgLTQ3NiwxMCArNDc2LDE3IEBACiAgICAgfQogCiAgICAgR3JDb2xvclR5cGUgc3JjQ29sb3JUeXBlID0gc3JjWzBdLmNvbG9yVHlwZSgpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFthbGxvd2VkQ29sb3JUeXBlLCBfXSA9CiAgICAgICAgICAgICBjYXBzLT5zdXBwb3J0ZWRXcml0ZVBpeGVsc0NvbG9yVHlwZSh0aGlzLT5jb2xvckluZm8oKS5jb2xvclR5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFByb3h5LT5iYWNrZW5kRm9ybWF0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNDb2xvclR5cGUpOworI2Vsc2UKKyAgICBhdXRvIGFsbG93ZWRDb2xvclR5cGUgPQorICAgICAgICAgICAgY2Fwcy0+c3VwcG9ydGVkV3JpdGVQaXhlbHNDb2xvclR5cGUodGhpcy0+Y29sb3JJbmZvKCkuY29sb3JUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RQcm94eS0+YmFja2VuZEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQ29sb3JUeXBlKS5mQ29sb3JUeXBlOworI2VuZGlmCiAgICAgYm9vbCBmbGlwID0gdGhpcy0+b3JpZ2luKCkgPT0ga0JvdHRvbUxlZnRfR3JTdXJmYWNlT3JpZ2luOwogCiAgICAgYm9vbCBjb252ZXJ0QWxsID0gcHJlbXVsICAgICAgICAgICAgICB8fApAQCAtODc2LDEwICs4ODMsMTkgQEAKIAogICAgIGF1dG8gdGV4TWF0cml4ID0gU2tNYXRyaXg6OlRyYW5zbGF0ZSh4LCB5KTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtyZWFkQ1QsIG9mZnNldEFsaWdubWVudF0gPQogICAgICAgICAgICAgdGhpcy0+Y2FwcygpLT5zdXBwb3J0ZWRSZWFkUGl4ZWxzQ29sb3JUeXBlKHlGQy0+Y29sb3JJbmZvKCkuY29sb3JUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeUZDLT5hc1N1cmZhY2VQcm94eSgpLT5iYWNrZW5kRm9ybWF0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb2xvclR5cGU6OmtBbHBoYV84KTsKKyNlbHNlCisgICAgYXV0byBpdGVtID0KKyAgICAgICAgICAgIHRoaXMtPmNhcHMoKS0+c3VwcG9ydGVkUmVhZFBpeGVsc0NvbG9yVHlwZSh5RkMtPmNvbG9ySW5mbygpLmNvbG9yVHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlGQy0+YXNTdXJmYWNlUHJveHkoKS0+YmFja2VuZEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyQ29sb3JUeXBlOjprQWxwaGFfOCk7CisgICAgYXV0byByZWFkQ1QgPSBpdGVtLmZDb2xvclR5cGU7CisgICAgYXV0byBvZmZzZXRBbGlnbm1lbnQgPSBpdGVtLmZPZmZzZXRBbGlnbm1lbnRGb3JUcmFuc2ZlckJ1ZmZlcjsKKyNlbmRpZgogICAgIGlmIChyZWFkQ1QgPT0gR3JDb2xvclR5cGU6OmtVbmtub3duKSB7CiAgICAgICAgIGNhbGxiYWNrKGNhbGxiYWNrQ29udGV4dCwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HckJpY3ViaWNFZmZlY3QuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyQmljdWJpY0VmZmVjdC5jcHAKaW5kZXggNjA5Y2E3My4uM2MwNTE4NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyQmljdWJpY0VmZmVjdC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyQmljdWJpY0VmZmVjdC5jcHAKQEAgLTI1NSw3ICsyNTUsMTEgQEAKICAgICBhdXRvIG0gPSBHclRlc3Q6OlRlc3RNYXRyaXgoZC0+ZlJhbmRvbSk7CiAgICAgc3dpdGNoIChkLT5mUmFuZG9tLT5uZXh0VUxlc3NUaGFuKDMpKSB7CiAgICAgICAgIGNhc2UgMDogeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW3ZpZXcsIGN0LCBhdF0gPSBkLT5yYW5kb21WaWV3KCk7CisjZWxzZQorICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmlldywgY3QsIGF0LCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZTo6V3JhcE1vZGUgd21bMl07CiAgICAgICAgICAgICBHclRlc3Q6OlRlc3RXcmFwTW9kZXMoZC0+ZlJhbmRvbSwgd20pOwogCkBAIC0yNzksNyArMjgzLDExIEBACiAgICAgICAgICAgICByZXR1cm4gTWFrZShzdGQ6Om1vdmUodmlldyksIGF0LCBtLCB3bVswXSwgd21bMV0sIGtlcm5lbCwgZGlyZWN0aW9uLCAqZC0+Y2FwcygpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFt2aWV3LCBjdCwgYXRdID0gZC0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZpZXcsIGN0LCBhdCwgZC0+cmFuZG9tVmlldygpKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE1ha2Uoc3RkOjptb3ZlKHZpZXcpLCBhdCwgbSwga2VybmVsLCBkaXJlY3Rpb24pOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HckJpdG1hcFRleHRHZW9Qcm9jLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HckJpdG1hcFRleHRHZW9Qcm9jLmNwcAppbmRleCBlMGYyYTJhLi5iMjQ5NWE4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JCaXRtYXBUZXh0R2VvUHJvYy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyQml0bWFwVGV4dEdlb1Byb2MuY3BwCkBAIC0xOTksNyArMTk5LDExIEBACiAjaWYgR1JfVEVTVF9VVElMUwogCiBHckdlb21ldHJ5UHJvY2Vzc29yKiBHckJpdG1hcFRleHRHZW9Qcm9jOjpUZXN0Q3JlYXRlKEdyUHJvY2Vzc29yVGVzdERhdGEqIGQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmlldywgY3QsIGF0XSA9IGQtPnJhbmRvbVZpZXcoKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmlldywgY3QsIGF0LCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAKICAgICBHclNhbXBsZXJTdGF0ZTo6V3JhcE1vZGUgd3JhcE1vZGVzWzJdOwogICAgIEdyVGVzdDo6VGVzdFdyYXBNb2RlcyhkLT5mUmFuZG9tLCB3cmFwTW9kZXMpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyRGlzdGFuY2VGaWVsZEdlb1Byb2MuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyRGlzdGFuY2VGaWVsZEdlb1Byb2MuY3BwCmluZGV4IGQxMjVjYzYuLjU2MzliMmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HckRpc3RhbmNlRmllbGRHZW9Qcm9jLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JEaXN0YW5jZUZpZWxkR2VvUHJvYy5jcHAKQEAgLTI4NCw3ICsyODQsMTEgQEAKIAogI2lmIEdSX1RFU1RfVVRJTFMKIEdyR2VvbWV0cnlQcm9jZXNzb3IqIEdyRGlzdGFuY2VGaWVsZEE4VGV4dEdlb1Byb2M6OlRlc3RDcmVhdGUoR3JQcm9jZXNzb3JUZXN0RGF0YSogZCkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdCwgYXRdID0gZC0+cmFuZG9tQWxwaGFPbmx5VmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2aWV3LCBjdCwgYXQsIGQtPnJhbmRvbUFscGhhT25seVZpZXcoKSk7CisjZW5kaWYKIAogICAgIEdyU2FtcGxlclN0YXRlOjpXcmFwTW9kZSB3cmFwTW9kZXNbMl07CiAgICAgR3JUZXN0OjpUZXN0V3JhcE1vZGVzKGQtPmZSYW5kb20sIHdyYXBNb2Rlcyk7CkBAIC01NTEsNyArNTU1LDExIEBACiAKICNpZiBHUl9URVNUX1VUSUxTCiBHckdlb21ldHJ5UHJvY2Vzc29yKiBHckRpc3RhbmNlRmllbGRQYXRoR2VvUHJvYzo6VGVzdENyZWF0ZShHclByb2Nlc3NvclRlc3REYXRhKiBkKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0LCBhdF0gPSBkLT5yYW5kb21BbHBoYU9ubHlWaWV3KCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18zKHZpZXcsIGN0LCBhdCwgZC0+cmFuZG9tQWxwaGFPbmx5VmlldygpKTsKKyNlbmRpZgogCiAgICAgR3JTYW1wbGVyU3RhdGU6OldyYXBNb2RlIHdyYXBNb2Rlc1syXTsKICAgICBHclRlc3Q6OlRlc3RXcmFwTW9kZXMoZC0+ZlJhbmRvbSwgd3JhcE1vZGVzKTsKQEAgLTg2NCw3ICs4NzIsMTEgQEAKIAogI2lmIEdSX1RFU1RfVVRJTFMKIEdyR2VvbWV0cnlQcm9jZXNzb3IqIEdyRGlzdGFuY2VGaWVsZExDRFRleHRHZW9Qcm9jOjpUZXN0Q3JlYXRlKEdyUHJvY2Vzc29yVGVzdERhdGEqIGQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmlldywgY3QsIGF0XSA9IGQtPnJhbmRvbVZpZXcoKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmlldywgY3QsIGF0LCBkLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAKICAgICBHclNhbXBsZXJTdGF0ZTo6V3JhcE1vZGUgd3JhcE1vZGVzWzJdOwogICAgIEdyVGVzdDo6VGVzdFdyYXBNb2RlcyhkLT5mUmFuZG9tLCB3cmFwTW9kZXMpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyR2F1c3NpYW5Db252b2x1dGlvbkZyYWdtZW50UHJvY2Vzc29yLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HckdhdXNzaWFuQ29udm9sdXRpb25GcmFnbWVudFByb2Nlc3Nvci5jcHAKaW5kZXggZWQ0YjVhNS4uZTVhMjYxZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyR2F1c3NpYW5Db252b2x1dGlvbkZyYWdtZW50UHJvY2Vzc29yLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JHYXVzc2lhbkNvbnZvbHV0aW9uRnJhZ21lbnRQcm9jZXNzb3IuY3BwCkBAIC0yNDUsNyArMjQ1LDExIEBACiAjaWYgR1JfVEVTVF9VVElMUwogc3RkOjp1bmlxdWVfcHRyPEdyRnJhZ21lbnRQcm9jZXNzb3I+IEdyR2F1c3NpYW5Db252b2x1dGlvbkZyYWdtZW50UHJvY2Vzc29yOjpUZXN0Q3JlYXRlKAogICAgICAgICBHclByb2Nlc3NvclRlc3REYXRhKiBkKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0LCBhdF0gPSBkLT5yYW5kb21WaWV3KCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18zKHZpZXcsIGN0LCBhdCwgZC0+cmFuZG9tVmlldygpKTsKKyNlbmRpZgogCiAgICAgRGlyZWN0aW9uIGRpciA9IGQtPmZSYW5kb20tPm5leHRCb29sKCkgPyBEaXJlY3Rpb246OmtZIDogRGlyZWN0aW9uOjprWDsKICAgICBTa0lSZWN0IHN1YnNldHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9Hck1hdHJpeENvbnZvbHV0aW9uRWZmZWN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9Hck1hdHJpeENvbnZvbHV0aW9uRWZmZWN0LmNwcAppbmRleCBiYThiOTczLi43N2U5NjFlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JNYXRyaXhDb252b2x1dGlvbkVmZmVjdC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyTWF0cml4Q29udm9sdXRpb25FZmZlY3QuY3BwCkBAIC0zMzMsNyArMzMzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclNhbXBsZXJTdGF0ZTo6V3JhcE1vZGUgd20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbnZvbHZlQWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHckNhcHMmIGNhcHMpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBba2VybmVsV3JhcHBlciwga2VybmVsRlBdID0gS2VybmVsV3JhcHBlcjo6TWFrZShjb250ZXh0LCBrZXJuZWxTaXplLCBjYXBzLCBrZXJuZWwpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihrZXJuZWxXcmFwcGVyLCBrZXJuZWxGUCwgS2VybmVsV3JhcHBlcjo6TWFrZShjb250ZXh0LCBrZXJuZWxTaXplLCBjYXBzLCBrZXJuZWwpKTsKKyNlbmRpZgogICAgIGlmICgha2VybmVsV3JhcHBlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMzQ5LDcgKzM1MywxMSBAQAogCiAjaWYgR1JfVEVTVF9VVElMUwogc3RkOjp1bmlxdWVfcHRyPEdyRnJhZ21lbnRQcm9jZXNzb3I+IEdyTWF0cml4Q29udm9sdXRpb25FZmZlY3Q6OlRlc3RDcmVhdGUoR3JQcm9jZXNzb3JUZXN0RGF0YSogZCkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdCwgYXRdID0gZC0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2aWV3LCBjdCwgYXQsIGQtPnJhbmRvbVZpZXcoKSk7CisjZW5kaWYKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtNYXhUZXN0S2VybmVsU2l6ZSA9IDIgKiBrTWF4VW5pZm9ybVNpemU7CiAgICAgaW50IHdpZHRoID0gZC0+ZlJhbmRvbS0+bmV4dFJhbmdlVSgxLCBrTWF4VGVzdEtlcm5lbFNpemUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyU2hhZG93R2VvUHJvYy5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JTaGFkb3dHZW9Qcm9jLmNwcAppbmRleCA0ZDI1MjhmLi4yZTFmNjE2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JTaGFkb3dHZW9Qcm9jLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JTaGFkb3dHZW9Qcm9jLmNwcApAQCAtNzUsNyArNzUsMTEgQEAKIAogI2lmIEdSX1RFU1RfVVRJTFMKIEdyR2VvbWV0cnlQcm9jZXNzb3IqIEdyUlJlY3RTaGFkb3dHZW9Qcm9jOjpUZXN0Q3JlYXRlKEdyUHJvY2Vzc29yVGVzdERhdGEqIGQpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbdmlldywgY3QsIGF0XSA9IGQtPnJhbmRvbUFscGhhT25seVZpZXcoKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmlldywgY3QsIGF0LCBkLT5yYW5kb21BbHBoYU9ubHlWaWV3KCkpOworI2VuZGlmCiAKICAgICByZXR1cm4gR3JSUmVjdFNoYWRvd0dlb1Byb2M6Ok1ha2UoZC0+YWxsb2NhdG9yKCksIHZpZXcpOwogfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyU2tTTEZQLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HclNrU0xGUC5jcHAKaW5kZXggYTMxZTA3ZS4uMjUzNjdjZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyU2tTTEZQLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JTa1NMRlAuY3BwCkBAIC00MTksOCArNDE5LDEzIEBACiAgICAgICAgIGMgPSBkLT5mUmFuZG9tLT5uZXh0VSgpOwogICAgIH0KICAgICBhdXRvIGZpbHRlciA9IFNrT3ZlcmRyYXdDb2xvckZpbHRlcjo6TWFrZVdpdGhTa0NvbG9ycyhjb2xvcnMpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdWNjZXNzLCBmcF0gPSBhc19DRkIoZmlsdGVyKS0+YXNGcmFnbWVudFByb2Nlc3NvcigvKmlucHV0RlA9Ki9udWxscHRyLCBkLT5jb250ZXh0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb2xvckluZm97fSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKHN1Y2Nlc3MsIGZwLCBhc19DRkIoZmlsdGVyKS0+YXNGcmFnbWVudFByb2Nlc3NvcigvKmlucHV0RlA9Ki9udWxscHRyLCBkLT5jb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JDb2xvckluZm97fSkpOworI2VuZGlmCiAgICAgU2tBU1NFUlQoc3VjY2Vzcyk7CiAgICAgcmV0dXJuIHN0ZDo6bW92ZShmcCk7CiB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JUZXh0dXJlRWZmZWN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVFZmZlY3QuY3BwCmluZGV4IDJiMmJlYWEuLmFjMzhmZmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVFZmZlY3QuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HclRleHR1cmVFZmZlY3QuY3BwCkBAIC03OTAsNyArNzkwLDExIEBACiBHUl9ERUZJTkVfRlJBR01FTlRfUFJPQ0VTU09SX1RFU1QoR3JUZXh0dXJlRWZmZWN0KTsKICNpZiBHUl9URVNUX1VUSUxTCiBzdGQ6OnVuaXF1ZV9wdHI8R3JGcmFnbWVudFByb2Nlc3Nvcj4gR3JUZXh0dXJlRWZmZWN0OjpUZXN0Q3JlYXRlKEdyUHJvY2Vzc29yVGVzdERhdGEqIHRlc3REYXRhKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0LCBhdF0gPSB0ZXN0RGF0YS0+cmFuZG9tVmlldygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2aWV3LCBjdCwgYXQsIHRlc3REYXRhLT5yYW5kb21WaWV3KCkpOworI2VuZGlmCiAgICAgV3JhcCB3cmFwTW9kZXNbMl07CiAgICAgR3JUZXN0OjpUZXN0V3JhcE1vZGVzKHRlc3REYXRhLT5mUmFuZG9tLCB3cmFwTW9kZXMpOwogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JZVVZ0b1JHQkVmZmVjdC5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2VmZmVjdHMvR3JZVVZ0b1JHQkVmZmVjdC5jcHAKaW5kZXggNjFhYmQ0Yy4uZDM4MDM2ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9lZmZlY3RzL0dyWVVWdG9SR0JFZmZlY3QuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZWZmZWN0cy9HcllVVnRvUkdCRWZmZWN0LmNwcApAQCAtMjEsNyArMjEsMTEgQEAKICAgICBmbG9hdCBtWzIwXTsKICAgICBTa0NvbG9yTWF0cml4X1JHQjJZVVYoeXV2YVByb3hpZXMueXV2YUluZm8oKS55dXZDb2xvclNwYWNlKCksIG0pOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU2tZVVZBSW5mbzo6a1lVVkFDaGFubmVsQ291bnQ7ICsraSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbcGxhbmUsIGNoYW5uZWxdID0geXV2YVByb3hpZXMueXV2YUxvY2F0aW9ucygpW2ldOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocGxhbmUsIGNoYW5uZWwsIHl1dmFQcm94aWVzLnl1dmFMb2NhdGlvbnMoKVtpXSk7CisjZW5kaWYKICAgICAgICAgaWYgKHBsYW5lID09IC0xKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTYxLDcgKzY1LDExIEBACiAgICAgICAgIFNrUmVjdCBwbGFuZVN1YnNldDsKICAgICAgICAgU2tSZWN0IHBsYW5lRG9tYWluOwogICAgICAgICBib29sIG1ha2VMaW5lYXJXaXRoU25hcCA9IGZhbHNlOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbc3N4LCBzc3ldID0geXV2YVByb3hpZXMueXV2YUluZm8oKS5wbGFuZVN1YnNhbXBsaW5nRmFjdG9ycyhpKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHNzeCwgc3N5LCB5dXZhUHJveGllcy55dXZhSW5mbygpLnBsYW5lU3Vic2FtcGxpbmdGYWN0b3JzKGkpKTsKKyNlbmRpZgogICAgICAgICBTa0FTU0VSVChzc3ggPiAwICYmIHNzeCA8PSA0KTsKICAgICAgICAgU2tBU1NFUlQoc3N5ID4gMCAmJiBzc3kgPD0gMik7CiAgICAgICAgIGZsb2F0IHNjYWxlWCA9IDEuZjsKQEAgLTI2NSw3ICsyNzMsMTEgQEAKICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb2xvckNoYW5uZWw7CiAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcGxhbmVDaGFubmVsOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGxvY0lkeCA9IDA7IGxvY0lkeCA8IChoYXNBbHBoYSA/IDQgOiAzKTsgKytsb2NJZHgpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICAgICAgICAgIGF1dG8gW3l1dlBsYW5lLCB5dXZDaGFubmVsXSA9IHl1dkVmZmVjdC5mTG9jYXRpb25zW2xvY0lkeF07CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih5dXZQbGFuZSwgeXV2Q2hhbm5lbCwgeXV2RWZmZWN0LmZMb2NhdGlvbnNbbG9jSWR4XSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgaWYgKHl1dlBsYW5lID09IHBsYW5lSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwucHVzaF9iYWNrKCJyZ2JhIltsb2NJZHhdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lQ2hhbm5lbC5wdXNoX2JhY2soInJnYmEiW3N0YXRpY19jYXN0PGludD4oeXV2Q2hhbm5lbCldKTsKQEAgLTMzOSw3ICszNTEsMTIgQEAKIHZvaWQgR3JZVVZ0b1JHQkVmZmVjdDo6b25BZGRUb0tleShjb25zdCBHclNoYWRlckNhcHMmIGNhcHMsIEdyUHJvY2Vzc29yS2V5QnVpbGRlciogYikgY29uc3QgewogICAgIHVpbnQzMl90IHBhY2tlZCA9IDA7CiAgICAgaW50IGkgPSAwOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW3BsYW5lLCBjaGFubmVsXSA6IGZMb2NhdGlvbnMpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBmTG9jYXRpb25zKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBsYW5lLCBjaGFubmVsLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIGlmIChwbGFuZSA8IDApIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dlb21ldHJ5L0dyUGF0aFV0aWxzLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dlb21ldHJ5L0dyUGF0aFV0aWxzLmgKaW5kZXggYzljY2MyMS4uNWRlZTMxNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9nZW9tZXRyeS9HclBhdGhVdGlscy5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2VvbWV0cnkvR3JQYXRoVXRpbHMuaApAQCAtMTM3LDcgKzEzNyw3IEBACiAvLyBOT1RFOiBUaGlzIG1ldGhvZCBpbnRlcnBvbGF0ZXMgYXQgMS8zIGFuZCAyLzMsIGJ1dCBpZiBzdWl0YWJsZSBpbiBjb250ZXh0LCB0aGUgY3ViaWMKIC8vIHtwMCwgcDAsIHAxLCBwMX0gbWF5IGFsc28gd29yay4KIGlubGluZSB2b2lkIHdyaXRlTGluZUFzQ3ViaWMoU2tQb2ludCBzdGFydFB0LCBTa1BvaW50IGVuZFB0LCBza2dwdTo6VmVydGV4V3JpdGVyKiB3cml0ZXIpIHsKLSAgICB1c2luZyBncnZ4OjpmbG9hdDIsIHNrdng6OmJpdF9wdW47CisgICAgdXNpbmcgZ3J2eDo6ZmxvYXQyOyB1c2luZyBza3Z4OjpiaXRfcHVuOwogICAgIGZsb2F0MiBwMCA9IGJpdF9wdW48ZmxvYXQyPihzdGFydFB0KTsKICAgICBmbG9hdDIgcDEgPSBiaXRfcHVuPGZsb2F0Mj4oZW5kUHQpOwogICAgIGZsb2F0MiB2ID0gKHAxIC0gcDApICogKDEvMy5mKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAvLyBDb252ZXJ0cyB0aGUgZ2l2ZW4gcXVhZHJhdGljIGJlemllciB0byBhIGN1YmljLgogaW5saW5lIHZvaWQgd3JpdGVRdWFkQXNDdWJpYyhjb25zdCBTa1BvaW50IHBbM10sIHNrZ3B1OjpWZXJ0ZXhXcml0ZXIqIHdyaXRlcikgewotICAgIHVzaW5nIGdydng6OmZsb2F0Miwgc2t2eDo6Yml0X3B1bjsKKyAgICB1c2luZyBncnZ4OjpmbG9hdDI7IHVzaW5nIHNrdng6OmJpdF9wdW47CiAgICAgZmxvYXQyIHAwID0gYml0X3B1bjxmbG9hdDI+KHBbMF0pOwogICAgIGZsb2F0MiBwMSA9IGJpdF9wdW48ZmxvYXQyPihwWzFdKTsKICAgICBmbG9hdDIgcDIgPSBiaXRfcHVuPGZsb2F0Mj4ocFsyXSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dlb21ldHJ5L0dyUmVjdC5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9nZW9tZXRyeS9HclJlY3QuaAppbmRleCA1NDZkMzQ5Li4zOGJiY2EwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dlb21ldHJ5L0dyUmVjdC5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2VvbWV0cnkvR3JSZWN0LmgKQEAgLTE1MSw0ICsxNTEsMTYgQEAKICAgICAvLyBkc3QgYm91bmRzLgogICAgIHJldHVybiAhY2xpcHBlZFNyY1JlY3QtPmlzRW1wdHkoKTsKIH0KKworI2lmZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxHcklSZWN0MTY+IHsKKyAgc3RhdGljIGF1dG8gQ29lcmNlKEdySVJlY3QxNiYmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHQuZkxlZnQsIHQuZlRvcCwgdC5mUmlnaHQsIHQuZkJvdHRvbSk7CisgIH0KKyAgc3RhdGljIGF1dG8gQ29lcmNlKGNvbnN0IEdySVJlY3QxNiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5mTGVmdCwgdC5mVG9wLCB0LmZSaWdodCwgdC5mQm90dG9tKTsKKyAgfQorfTsKKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dsL0dyR0xPcHNSZW5kZXJQYXNzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTE9wc1JlbmRlclBhc3MuY3BwCmluZGV4IDFjMGY4NTIuLjFlYmJmZDIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTE9wc1JlbmRlclBhc3MuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTE9wc1JlbmRlclBhc3MuY3BwCkBAIC0zMjQsNyArMzI0LDExIEBACiAgICAgd2hpbGUgKGRyYXdDb3VudCkgewogICAgICAgICBpbnQgY291bnRJbkJhdGNoID0gc3RkOjptaW4oZHJhd0NvdW50LCBrTWF4RHJhd0NvdW50UGVyQmF0Y2gpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50SW5CYXRjaDsgKytpKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbdmVydGV4Q291bnQsIGluc3RhbmNlQ291bnQsIGJhc2VWZXJ0ZXgsIGJhc2VJbnN0YW5jZV0gPSBjbWRzW2ldOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KHZlcnRleENvdW50LCBpbnN0YW5jZUNvdW50LCBiYXNlVmVydGV4LCBiYXNlSW5zdGFuY2UsIGNtZHNbaV0pOworI2VuZGlmCiAgICAgICAgICAgICBmRmlyc3RzW2ldID0gYmFzZVZlcnRleDsKICAgICAgICAgICAgIGZDb3VudHNbaV0gPSB2ZXJ0ZXhDb3VudDsKICAgICAgICAgICAgIGZJbnN0YW5jZUNvdW50c1tpXSA9IGluc3RhbmNlQ291bnQ7CkBAIC0zOTcsNyArNDAxLDExIEBACiAgICAgd2hpbGUgKGRyYXdDb3VudCkgewogICAgICAgICBpbnQgY291bnRJbkJhdGNoID0gc3RkOjptaW4oZHJhd0NvdW50LCBrTWF4RHJhd0NvdW50UGVyQmF0Y2gpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50SW5CYXRjaDsgKytpKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbaW5kZXhDb3VudCwgaW5zdGFuY2VDb3VudCwgYmFzZUluZGV4LCBiYXNlVmVydGV4LCBiYXNlSW5zdGFuY2VdID0gY21kc1tpXTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfNShpbmRleENvdW50LCBpbnN0YW5jZUNvdW50LCBiYXNlSW5kZXgsIGJhc2VWZXJ0ZXgsIGJhc2VJbnN0YW5jZSwgY21kc1tpXSk7CisjZW5kaWYKICAgICAgICAgICAgIGZDb3VudHNbaV0gPSBpbmRleENvdW50OwogICAgICAgICAgICAgZkluZGljZXNbaV0gPSB0aGlzLT5vZmZzZXRGb3JCYXNlSW5kZXgoYmFzZUluZGV4KTsKICAgICAgICAgICAgIGZJbnN0YW5jZUNvdW50c1tpXSA9IGluc3RhbmNlQ291bnQ7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L2dsL0dyR0xVdGlsLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTFV0aWwuY3BwCmluZGV4IDk1OTA2NDYuLmY3MTA1MzkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTFV0aWwuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvZ2wvR3JHTFV0aWwuY3BwCkBAIC01NzIsMTEgKzU3MiwxOSBAQAogCiAgICAgR3JHTFZlbmRvciBhbmdsZVZlbmRvciA9IGdldF92ZW5kb3IoYW5nbGVWZW5kb3JTdHJpbmcpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2FuZ2xlRHJpdmVyLCBhbmdsZURyaXZlclZlcnNpb25dID0gZ2V0X2RyaXZlcl9hbmRfdmVyc2lvbihrR0xFU19HckdMU3RhbmRhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlVmVuZG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVZlbmRvclN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVSZW5kZXJlclN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVWZXJzaW9uU3RyaW5nKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoYW5nbGVEcml2ZXIsIGFuZ2xlRHJpdmVyVmVyc2lvbiwgZ2V0X2RyaXZlcl9hbmRfdmVyc2lvbihrR0xFU19HckdMU3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlVmVuZG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVZlbmRvclN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVSZW5kZXJlclN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVWZXJzaW9uU3RyaW5nKSk7CisjZW5kaWYKIAogICAgIGF1dG8gYW5nbGVSZW5kZXJlciA9IGdldF9yZW5kZXJlcihhbmdsZVJlbmRlcmVyU3RyaW5nLCBleHRlbnNpb25zKTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvQXRsYXNQYXRoUmVuZGVyZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvQXRsYXNQYXRoUmVuZGVyZXIuY3BwCmluZGV4IGIyMGNkZDQuLjQxMzg0NmUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL0F0bGFzUGF0aFJlbmRlcmVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9BdGxhc1BhdGhSZW5kZXJlci5jcHAKQEAgLTE0NCw3ICsxNDQsMTEgQEAKICAgICBmbG9hdCBhdGxhc01heFBhdGhIZWlnaHRfcG93MiA9IChmYWxsYmFja0FBVHlwZSA9PSBHckFBVHlwZTo6a01TQUEpCiAgICAgICAgICAgICA/IGtBdGxhc01heFBhdGhIZWlnaHRXaXRoTVNBQUZhbGxiYWNrICoga0F0bGFzTWF4UGF0aEhlaWdodFdpdGhNU0FBRmFsbGJhY2sKICAgICAgICAgICAgIDoga0F0bGFzTWF4UGF0aEhlaWdodCAqIGtBdGxhc01heFBhdGhIZWlnaHQ7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3RvcExlZnRGbG9vciwgYm90UmlnaHRDZWlsXSA9IHJvdW5kX291dChwYXRoRGV2Qm91bmRzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodG9wTGVmdEZsb29yLCBib3RSaWdodENlaWwsIHJvdW5kX291dChwYXRoRGV2Qm91bmRzKSk7CisjZW5kaWYKICAgICBmbG9hdDIgc2l6ZSA9IGJvdFJpZ2h0Q2VpbCAtIHRvcExlZnRGbG9vcjsKICAgICByZXR1cm4gLy8gRW5zdXJlIHRoZSBwYXRoJ3MgbGFyZ2VzdCBkaW1lbnNpb24gZml0cyBpbiB0aGUgYXRsYXMuCiAgICAgICAgICAgIHNrdng6OmFsbChzaXplIDw9IGZBdGxhc01heFBhdGhXaWR0aCkgJiYKQEAgLTE4MCw3ICsxODQsMTEgQEAKICNpZmRlZiBTS19ERUJVRwogICAgIC8vIGlzX3Zpc2libGUoKSBzaG91bGQgaGF2ZSBndWFyYW50ZWVkIHRoZSBwYXRoJ3MgYm91bmRzIHdlcmUgcmVwcmVzZW50YWJsZSBhcyBpbnRzLCBzaW5jZSBjbGlwCiAgICAgLy8gYm91bmRzIHdpdGhpbiB0aGUgbWF4IHJlbmRlciB0YXJnZXQgc2l6ZSBhcmUgbm93aGVyZSBuZWFyIElOVF9NQVguCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3RvcExlZnRGbG9vciwgYm90UmlnaHRDZWlsXSA9IHJvdW5kX291dChwYXRoRGV2Qm91bmRzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodG9wTGVmdEZsb29yLCBib3RSaWdodENlaWwsIHJvdW5kX291dChwYXRoRGV2Qm91bmRzKSk7CisjZW5kaWYKICAgICBTa0FTU0VSVChza3Z4OjphbGwoc2t2eDo6Y2FzdDxmbG9hdD4oaW50Mjo6TG9hZCgmZGV2SUJvdW5kcy0+ZkxlZnQpKSA9PSB0b3BMZWZ0Rmxvb3IpKTsKICAgICBTa0FTU0VSVChza3Z4OjphbGwoc2t2eDo6Y2FzdDxmbG9hdD4oaW50Mjo6TG9hZCgmZGV2SUJvdW5kcy0+ZlJpZ2h0KSkgPT0gYm90UmlnaHRDZWlsKSk7CiAjZW5kaWYKQEAgLTM1OCw3ICszNjYsMTEgQEAKICAgICB9CiAKICAgICBTa01hdHJpeCBhdGxhc01hdHJpeDsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbYXRsYXNYLCBhdGxhc1ldID0gbG9jYXRpb25JbkF0bGFzOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihhdGxhc1gsIGF0bGFzWSwgbG9jYXRpb25JbkF0bGFzKTsKKyNlbmRpZgogICAgIGlmICghdHJhbnNwb3NlZEluQXRsYXMpIHsKICAgICAgICAgYXRsYXNNYXRyaXggPSBTa01hdHJpeDo6VHJhbnNsYXRlKGF0bGFzWCAtIGRldklCb3VuZHMubGVmdCgpLCBhdGxhc1kgLSBkZXZJQm91bmRzLnRvcCgpKTsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvQXRsYXNUZXh0T3AuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvQXRsYXNUZXh0T3AuY3BwCmluZGV4IDk4MGY5YzUuLmI0MGNkYzQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL0F0bGFzVGV4dE9wLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9BdGxhc1RleHRPcC5jcHAKQEAgLTI4OSw3ICsyODksMTEgQEAKICAgICAgICAgICAgIC8vIFJlZ2VuZXJhdGUgdGhlIGF0bGFzIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBnbHlwaHMgaW4gdGhlIHJ1biwgb3IgdGhlIHJlbWFpbmRlcgogICAgICAgICAgICAgLy8gb2YgdGhlIGdseXBocyB0byBmaWxsIHRoZSB2ZXJ0ZXggYnVmZmVyLgogICAgICAgICAgICAgaW50IHJlZ2VuRW5kID0gc3ViUnVuQ3Vyc29yICsgc3RkOjptaW4oc3ViUnVuRW5kIC0gc3ViUnVuQ3Vyc29yLCBxdWFkRW5kIC0gcXVhZEN1cnNvcik7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0b1tvaywgZ2x5cGhzUmVnZW5lcmF0ZWRdID0gc3ViUnVuLnJlZ2VuZXJhdGVBdGxhcyhzdWJSdW5DdXJzb3IsIHJlZ2VuRW5kLCB0YXJnZXQpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKG9rLCBnbHlwaHNSZWdlbmVyYXRlZCwgc3ViUnVuLnJlZ2VuZXJhdGVBdGxhcyhzdWJSdW5DdXJzb3IsIHJlZ2VuRW5kLCB0YXJnZXQpKTsKKyNlbmRpZgogICAgICAgICAgICAgLy8gVGhlcmUgd2FzIGEgcHJvYmxlbSBhbGxvY2F0aW5nIHRoZSBnbHlwaCBpbiB0aGUgYXRsYXMuIEJhaWwuCiAgICAgICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvRmlsbFJSZWN0T3AuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvRmlsbFJSZWN0T3AuY3BwCmluZGV4IDY2MzcyODguLmQwYjQwNTMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL0ZpbGxSUmVjdE9wLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9GaWxsUlJlY3RPcC5jcHAKQEAgLTUyMSw3ICs1MjEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZkluc3RhbmNlQnVmZmVyLCAmZkJhc2VJbnN0YW5jZSkpIHsKICAgICAgICAgU2tERUJVR0NPREUoYXV0byBlbmQgPSBpbnN0YW5jZVdydGVyLm1ha2VPZmZzZXQoaW5zdGFuY2VTdHJpZGUgKiBmSW5zdGFuY2VDb3VudCkpOwogICAgICAgICBmb3IgKEluc3RhbmNlKiBpID0gZkhlYWRJbnN0YW5jZTsgaTsgaSA9IGktPmZOZXh0KSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgYXV0byBbbCwgdCwgciwgYl0gPSBpLT5mUlJlY3QucmVjdCgpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KGwsIHQsIHIsIGIsIGktPmZSUmVjdC5yZWN0KCkpOworI2VuZGlmCiAKICAgICAgICAgICAgIC8vIFByb2R1Y2UgYSBtYXRyaXggdGhhdCBkcmF3cyB0aGUgcm91bmQgcmVjdCBmcm9tIG5vcm1hbGl6ZWQgWy0xLCAtMSwgKzEsICsxXSBzcGFjZS4KICAgICAgICAgICAgIFNrTWF0cml4IG07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9QYXRoU3RlbmNpbENvdmVyT3AuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvUGF0aFN0ZW5jaWxDb3Zlck9wLmNwcAppbmRleCBhZDYzMTVkLi5kOGFlOTRlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9QYXRoU3RlbmNpbENvdmVyT3AuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL1BhdGhTdGVuY2lsQ292ZXJPcC5jcHAKQEAgLTI0NiwxMCArMjQ2LDIwIEBACiAgICAgICAgIGludCBtYXhUcmlhbmdsZXNJbkZhbnMgPSBzdGQ6Om1heChtYXhDb21iaW5lZEZhbkVkZ2VzIC0gMiwgMCk7CiAgICAgICAgIFZlcnRleFdyaXRlciB0cmlhbmdsZVZlcnRleFdyaXRlciA9IHZlcnRleEFsbG9jLmxvY2s8U2tQb2ludD4obWF4VHJpYW5nbGVzSW5GYW5zICogMyk7CiAgICAgICAgIGludCBmYW5UcmlhbmdsZUNvdW50ID0gMDsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGZvciAoYXV0byBbcGF0aE1hdHJpeCwgcGF0aF0gOiAqZlBhdGhEcmF3TGlzdCkgeworI2Vsc2UKKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiAqZlBhdGhEcmF3TGlzdCkgeworICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocGF0aE1hdHJpeCwgcGF0aCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgUGF0aFhmb3JtIG0ocGF0aE1hdHJpeCk7CiAgICAgICAgICAgICBmb3IgKFBhdGhNaWRkbGVPdXRGYW5JdGVyIGl0KHBhdGgpOyAhaXQuZG9uZSgpOykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gW3AwLCBwMSwgcDJdIDogaXQubmV4dFN0YWNrKCkpIHsKKyNlbHNlCisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBpdC5uZXh0U3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhwMCwgcDEsIHAyLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlVmVydGV4V3JpdGVyIDw8IG0ubWFwMlBvaW50cyhwMCwgcDEpIDw8IG0ubWFwUG9pbnQocDIpOwogICAgICAgICAgICAgICAgICAgICArK2ZhblRyaWFuZ2xlQ291bnQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjY5LDcgKzI3OSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmQkJveEJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZkJCb3hCYXNlSW5zdGFuY2UpOwogICAgICAgICBTa0RFQlVHQ09ERShpbnQgcGF0aENvdW50ID0gMDspCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBmb3IgKGF1dG8gW3BhdGhNYXRyaXgsIHBhdGhdIDogKmZQYXRoRHJhd0xpc3QpIHsKKyNlbHNlCisgICAgICAgIGZvciAoYXV0byBpdGVtIDogKmZQYXRoRHJhd0xpc3QpIHsKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBhdGhNYXRyaXgsIHBhdGgsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIFNrREVCVUdDT0RFKGF1dG8gZW5kID0gdmVydGV4V3JpdGVyLm1ha2VPZmZzZXQoaW5zdGFuY2VTdHJpZGUpKTsKICAgICAgICAgICAgIHZlcnRleFdyaXRlciA8PCBwYXRoTWF0cml4LmdldFNjYWxlWCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0aE1hdHJpeC5nZXRTa2V3WSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9UZXh0dXJlT3AuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvVGV4dHVyZU9wLmNwcAppbmRleCAyZTk1Y2Y3Li4yZGNjY2UzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L29wcy9UZXh0dXJlT3AuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL1RleHR1cmVPcC5jcHAKQEAgLTU2Nyw3ICs1NjcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0RmlsdGVyID09IEdyU2FtcGxlclN0YXRlOjpGaWx0ZXI6OmtOZWFyZXN0ICYmIGZpbHRlciA+IG5ldEZpbHRlcikpOwogICAgICAgICAgICAgICAgIFNrQVNTRVJUKG1tID09IG5ldE1NIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldE1NID09IEdyU2FtcGxlclN0YXRlOjpNaXBtYXBNb2RlOjprTm9uZSAmJiBtbSA+IG5ldE1NKSk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgIGF1dG8gW211c3RGaWx0ZXIsIG11c3RNTV0gPSBmaWx0ZXJfYW5kX21tX2hhdmVfZWZmZWN0KHF1YWQuZkxvY2FsLCBxdWFkLmZEZXZpY2UpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihtdXN0RmlsdGVyLCBtdXN0TU0sIGZpbHRlcl9hbmRfbW1faGF2ZV9lZmZlY3QocXVhZC5mTG9jYWwsIHF1YWQuZkRldmljZSkpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBHclNhbXBsZXJTdGF0ZTo6RmlsdGVyOjprTmVhcmVzdCkgewogICAgICAgICAgICAgICAgICAgICBpZiAobXVzdEZpbHRlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgbmV0RmlsdGVyID0gZmlsdGVyOyAvLyB1cGdyYWRlIGJhdGNoIHRvIGhpZ2hlciBmaWx0ZXIgbGV2ZWwKQEAgLTExNDUsNyArMTE0OSwxMSBAQAogICAgIH0KIAogICAgIGlmIChmaWx0ZXIgIT0gR3JTYW1wbGVyU3RhdGU6OkZpbHRlcjo6a05lYXJlc3QgfHwgbW0gIT0gR3JTYW1wbGVyU3RhdGU6Ok1pcG1hcE1vZGU6OmtOb25lKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFttdXN0RmlsdGVyLCBtdXN0TU1dID0gZmlsdGVyX2FuZF9tbV9oYXZlX2VmZmVjdChxdWFkLT5mTG9jYWwsIHF1YWQtPmZEZXZpY2UpOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIobXVzdEZpbHRlciwgbXVzdE1NLCBmaWx0ZXJfYW5kX21tX2hhdmVfZWZmZWN0KHF1YWQtPmZMb2NhbCwgcXVhZC0+ZkRldmljZSkpOworI2VuZGlmCiAgICAgICAgIGlmICghbXVzdEZpbHRlcikgewogICAgICAgICAgICAgZmlsdGVyID0gR3JTYW1wbGVyU3RhdGU6OkZpbHRlcjo6a05lYXJlc3Q7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvb3BzL1RyaWFuZ3VsYXRpbmdQYXRoUmVuZGVyZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvVHJpYW5ndWxhdGluZ1BhdGhSZW5kZXJlci5jcHAKaW5kZXggMGYyZmQwYS4uY2NlNzI3ZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvVHJpYW5ndWxhdGluZ1BhdGhSZW5kZXJlci5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS9vcHMvVHJpYW5ndWxhdGluZ1BhdGhSZW5kZXJlci5jcHAKQEAgLTI4Nyw3ICsyODcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlZpZXdNYXRyaXgsIGZTaGFwZS5ib3VuZHMoKSk7CiAKICAgICAgICAgaWYgKCFmVmVydGV4RGF0YSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW2NhY2hlZFZlcnRzLCBkYXRhXSA9IHRocmVhZFNhZmVDYWNoZS0+ZmluZFZlcnRzV2l0aERhdGEoa2V5KTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihjYWNoZWRWZXJ0cywgZGF0YSwgdGhyZWFkU2FmZUNhY2hlLT5maW5kVmVydHNXaXRoRGF0YShrZXkpKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKGNhY2hlZFZlcnRzICYmIGNhY2hlX21hdGNoKGRhdGEuZ2V0KCksIHRvbCkpIHsKICAgICAgICAgICAgICAgICBmVmVydGV4RGF0YSA9IHN0ZDo6bW92ZShjYWNoZWRWZXJ0cyk7CiAgICAgICAgICAgICB9CkBAIC0zMjYsNyArMzMwLDExIEBACiAKICAgICAgICAga2V5LnNldEN1c3RvbURhdGEoY3JlYXRlX2RhdGEodmVydGV4Q291bnQsIGlzTGluZWFyLCB0b2wpKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbdG1wViwgdG1wRF0gPSB0aHJlYWRTYWZlQ2FjaGUtPmFkZFZlcnRzV2l0aERhdGEoa2V5LCBmVmVydGV4RGF0YSwgaXNfbmV3ZXJfYmV0dGVyKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHRtcFYsIHRtcEQsIHRocmVhZFNhZmVDYWNoZS0+YWRkVmVydHNXaXRoRGF0YShrZXksIGZWZXJ0ZXhEYXRhLCBpc19uZXdlcl9iZXR0ZXIpKTsKKyNlbmRpZgogICAgICAgICBpZiAodG1wViAhPSBmVmVydGV4RGF0YSkgewogICAgICAgICAgICAgU2tBU1NFUlQoIXRtcFYtPmdwdUJ1ZmZlcigpKTsKICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgYWx0aG91Z2ggdGhlIGRpZmZlcmVudCB0cmlhbmd1bGF0aW9uIGZvdW5kIGluIHRoZSBjYWNoZSBpcyBiZXR0ZXIsCkBAIC00NDUsNyArNDUzLDExIEBACiAgICAgICAgIFNrU2NhbGFyIHRvbCA9IEdyUGF0aFV0aWxzOjpzY2FsZVRvbGVyYW5jZVRvU3JjKEdyUGF0aFV0aWxzOjprRGVmYXVsdFRvbGVyYW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlZpZXdNYXRyaXgsIGZTaGFwZS5ib3VuZHMoKSk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW2NhY2hlZFZlcnRzLCBkYXRhXSA9IHRocmVhZFNhZmVWaWV3Q2FjaGUtPmZpbmRWZXJ0c1dpdGhEYXRhKGtleSk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihjYWNoZWRWZXJ0cywgZGF0YSwgdGhyZWFkU2FmZVZpZXdDYWNoZS0+ZmluZFZlcnRzV2l0aERhdGEoa2V5KSk7CisjZW5kaWYKICAgICAgICAgaWYgKGNhY2hlZFZlcnRzICYmIGNhY2hlX21hdGNoKGRhdGEuZ2V0KCksIHRvbCkpIHsKICAgICAgICAgICAgIGZWZXJ0ZXhEYXRhID0gc3RkOjptb3ZlKGNhY2hlZFZlcnRzKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ2OCw4ICs0ODAsMTMgQEAKICAgICAgICAgLy8gcHJlZGljYXRlIHdpbGwgcmVwbGFjZSB0aGUgdmVyc2lvbiBpbiB0aGUgY2FjaGUgaWYgJ2ZWZXJ0ZXhEYXRhJyBpcyBhIG1vcmUgYWNjdXJhdGUKICAgICAgICAgLy8gdHJpYW5ndWxhdGlvbi4gVGhpcyB3aWxsIGxlYXZlIHNvbWUgb3RoZXIgcmVjb3JkaW5nIHRocmVhZHMgdXNpbmcgYSBwb29yZXIgdHJpYW5ndWxhdGlvbgogICAgICAgICAvLyBidXQgd2lsbCByZXN1bHQgaW4gYSB2ZXJzaW9uIHdpdGggZ3JlYXRlciBhcHBsaWNhYmlsaXR5IGJlaW5nIGluIHRoZSBjYWNoZS4KKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3RtcFYsIHRtcERdID0gdGhyZWFkU2FmZVZpZXdDYWNoZS0+YWRkVmVydHNXaXRoRGF0YShrZXksIGZWZXJ0ZXhEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbmV3ZXJfYmV0dGVyKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHRtcFYsIHRtcEQsIHRocmVhZFNhZmVWaWV3Q2FjaGUtPmFkZFZlcnRzV2l0aERhdGEoa2V5LCBmVmVydGV4RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX25ld2VyX2JldHRlcikpOworI2VuZGlmCiAgICAgICAgIGlmICh0bXBWICE9IGZWZXJ0ZXhEYXRhKSB7CiAgICAgICAgICAgICAvLyBTb21lb25lIGJlYXQgdXMgdG8gY3JlYXRpbmcgdGhlIHRyaWFuZ3VsYXRpb24gKGFuZCBpdCBpcyBiZXR0ZXIgdGhhbiBvdXJzKSBzbwogICAgICAgICAgICAgLy8ganVzdCBnbyBhaGVhZCBhbmQgdXNlIGl0LgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL01pZGRsZU91dFBvbHlnb25Ucmlhbmd1bGF0b3IuaCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9NaWRkbGVPdXRQb2x5Z29uVHJpYW5ndWxhdG9yLmgKaW5kZXggOTU5MGU2ZS4uMjZkMTdmZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL01pZGRsZU91dFBvbHlnb25Ucmlhbmd1bGF0b3IuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvTWlkZGxlT3V0UG9seWdvblRyaWFuZ3VsYXRvci5oCkBAIC0yMTQsNyArMjE0LDEyIEBACiAgICAgICAgICAgICBmRG9uZSA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZk1pZGRsZU91dC5jbG9zZSgpOwogICAgICAgICB9CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBzd2l0Y2ggKGF1dG8gW3ZlcmIsIHB0cywgd10gPSAqZlBhdGhJdGVyKys7IHZlcmIpIHsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgKmZQYXRoSXRlcisrKTsKKyAgICAgICAgc3dpdGNoICh2ZXJiKSB7CisjZW5kaWYKICAgICAgICAgICAgIFNrUG9pbnQgcHQ7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOgogICAgICAgICAgICAgICAgIHJldHVybiBmTWlkZGxlT3V0LmNsb3NlQW5kTW92ZShwdHNbMF0pOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL1BhdGhDdXJ2ZVRlc3NlbGxhdG9yLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9QYXRoQ3VydmVUZXNzZWxsYXRvci5jcHAKaW5kZXggNTYwN2I4Yy4uMDEyOGZiZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL1BhdGhDdXJ2ZVRlc3NlbGxhdG9yLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvUGF0aEN1cnZlVGVzc2VsbGF0b3IuY3BwCkBAIC0yMjgsMTAgKzIyOCwyMCBAQAogICAgICAgICB9CiAgICAgICAgIGludCBudW1SZW1haW5pbmdUcmlhbmdsZXMgPSBtYXhUcmlhbmdsZXM7CiAgICAgICAgIGlmIChmRHJhd0lubmVyRmFuKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgZm9yIChhdXRvIFtwYXRoTWF0cml4LCBwYXRoXSA6IHBhdGhEcmF3TGlzdCkgeworI2Vsc2UKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVtIDogcGF0aERyYXdMaXN0KSB7CisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocGF0aE1hdHJpeCwgcGF0aCwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIFBhdGhYZm9ybSBtKHBhdGhNYXRyaXgpOwogICAgICAgICAgICAgICAgIGZvciAoUGF0aE1pZGRsZU91dEZhbkl0ZXIgaXQocGF0aCk7ICFpdC5kb25lKCk7KSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gW3AwLCBwMSwgcDJdIDogaXQubmV4dFN0YWNrKCkpIHsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdGVtIDogaXQubmV4dFN0YWNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHAwLCBwMSwgcDIsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleFdyaXRlciA8PCBtLm1hcDJQb2ludHMocDAsIHAxKSA8PCBtLm1hcFBvaW50KHAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhpcyBpbnN0YW5jZSBhcyBhIHRyaWFuZ2xlIGJ5IHNldHRpbmcgaXQgdG8gYSBjb25pYyB3aXRoIHc9SW5mLgogICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4V3JpdGVyLmZpbGwoVmVydGV4V3JpdGVyOjprSUVFRV8zMl9pbmZpbml0eSwgMik7CkBAIC0yNDcsNyArMjU3LDEyIEBACiAgICAgICAgICAgICBpbnQgbnVtV3JpdHRlbiA9IDA7CiAgICAgICAgICAgICBTa0RFQlVHQ09ERShpbnQgY291bnQgPSAwOykKICNpZmRlZiBTS19ERUJVRworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGZvciAoYXV0byBbcGF0aE1hdHJpeCwgcGF0aF0gOiBwYXRoRHJhd0xpc3QpIHsKKyNlbHNlCisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IHBhdGhEcmF3TGlzdCkgeworICAgICAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBhdGhNYXRyaXgsIHBhdGgsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBpc24ndCBhY3R1YWxseSBuZWNlc3NhcnksIGJ1dCB3ZSBjdXJyZW50bHkgb25seSB1c2UgYnJlYWRjcnVtYgogICAgICAgICAgICAgICAgIC8vIHRyaWFuZ2xlcyB3aXRoIGFuIGlkZW50aXR5IHBhdGhNYXRyaXguIElmIHRoYXQgZXZlciBjaGFuZ2VzLCB0aGlzIGFzc2VydCB3aWxsCiAgICAgICAgICAgICAgICAgLy8gc2VydmUgYXMgYSBnZW50bGUgcmVtaW5kZXIgdG8gbWFrZSBzdXJlIHRoZSBicmVhZGNydW1iIHRyaWFuZ2xlcyBhcmUgYWxzbwpAQCAtMjkyLDkgKzMwNywxOSBAQAogICAgIH0KIAogICAgIEN1cnZlV3JpdGVyIGN1cnZlV3JpdGVyKG1heFNlZ21lbnRzKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFtwYXRoTWF0cml4LCBwYXRoXSA6IHBhdGhEcmF3TGlzdCkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHBhdGhEcmF3TGlzdCkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihwYXRoTWF0cml4LCBwYXRoLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIGN1cnZlV3JpdGVyLnNldE1hdHJpY2VzKGZTaGFkZXItPnZpZXdNYXRyaXgoKSwgcGF0aE1hdHJpeCk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0cywgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUocGF0aCkpIHsKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprUXVhZDoKICAgICAgICAgICAgICAgICAgICAgY3VydmVXcml0ZXIud3JpdGVRdWFkcmF0aWMoc2hhZGVyQ2FwcywgJmNodW5rZXIsIHB0cyk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvUGF0aFdlZGdlVGVzc2VsbGF0b3IuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL1BhdGhXZWRnZVRlc3NlbGxhdG9yLmNwcAppbmRleCAyMzNjZmE3Li5lNTEyNGVkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvUGF0aFdlZGdlVGVzc2VsbGF0b3IuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9QYXRoV2VkZ2VUZXNzZWxsYXRvci5jcHAKQEAgLTE5LDYgKzE5LDE1IEBACiAjaW5jbHVkZSAic3JjL2dwdS9Hck9wRmx1c2hTdGF0ZS5oIgogI2VuZGlmCiAKKyNpZmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQ29lcmNlclRvVHVwbGU8c2t2eDo6VmVjPDQsIGZsb2F0Pj4geworICBzdGF0aWMgYXV0byBDb2VyY2Uoc2t2eDo6VmVjPDQsIGZsb2F0PiYmIHQpIHsKKyAgICByZXR1cm4gc3RkOjptYWtlX3R1cGxlKHRbMF0sIHRbMV0sIHRbMl0sIHRbM10pOworICB9Cit9OworI2VuZGlmCisKIG5hbWVzcGFjZSBza2dwdSB7CiAKIHN0cnVjdCBMaW5lVG9DdWJpYyB7CkBAIC0zNiw3ICs0NSwxMSBAQAogfTsKIAogc3RhdGljIFZlcnRleFdyaXRlciYgb3BlcmF0b3I8PChWZXJ0ZXhXcml0ZXImIHZlcnRleFdyaXRlciwgY29uc3QgUXVhZFRvQ3ViaWMmIHF1YWRyYXRpYykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtwMCwgcDEsIHAyXSA9IHF1YWRyYXRpYzsKKyNlbHNlCisgICAgZmxvYXQyIHAwID0gcXVhZHJhdGljLmZQMCwgcDEgPSBxdWFkcmF0aWMuZlAxLCBwMiA9IHF1YWRyYXRpYy5mUDI7CisjZW5kaWYKICAgICByZXR1cm4gdmVydGV4V3JpdGVyIDw8IHAwIDw8IG1peChmbG9hdDQocDAscDIpLCBwMS54eXh5KCksIDIvMy5mKSA8PCBwMjsKIH0KIApAQCAtNDcsNyArNjAsMTIgQEAKIC8vICAgU2tUUGF0aENvbnRvdXJQYXJzZXIgcGFyc2VyOwogLy8gICB3aGlsZSAocGFyc2VyLnBhcnNlTmV4dENvbnRvdXIoKSkgewogLy8gICAgICAgU2tQb2ludCBtaWRwb2ludCA9IHBhcnNlci5jdXJyZW50TWlkcG9pbnQoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAvLyAgICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0c10gOiBwYXJzZXIuY3VycmVudENvbnRvdXIoKSkgeworI2Vsc2UKKy8vICAgICAgIGZvciAoYXV0byBpdGVtIDogcGFyc2VyLmN1cnJlbnRDb250b3VyKCkpIHsKKy8vICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2ZXJiLCBwdHMsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKIC8vICAgICAgICAgICAuLi4KIC8vICAgICAgIH0KIC8vICAgfQpAQCAtMTYyLDcgKzE4MCwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgcXVhZFRvKGNvbnN0IFNrUG9pbnQgcFszXSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbcDAsIHAxXSA9IGZQYXRoWGZvcm0ubWFwMlBvaW50cyhwKTsKKyNlbHNlCisgICAgICAgIGF1dG8gaXRlbSA9IGZQYXRoWGZvcm0ubWFwMlBvaW50cyhwKTsKKyAgICAgICAgZmxvYXQyIHAwe2l0ZW1bMF0sIGl0ZW1bMV19LCBwMXtpdGVtWzJdLCBpdGVtWzNdfTsKKyNlbmRpZgogICAgICAgICBhdXRvIHAyID0gZlBhdGhYZm9ybS5tYXAxUG9pbnQocCsyKTsKICAgICAgICAgZmxvYXQgbjQgPSB3YW5nc19mb3JtdWxhOjpxdWFkcmF0aWNfcG93NChrVGVzc2VsbGF0aW9uUHJlY2lzaW9uLCBwLCBmVG90YWxWZWN0b3JYZm9ybSk7CiAgICAgICAgIGlmIChuNCA8PSBmTWF4U2VnbWVudHNfcG93NCkgewpAQCAtMjM5LDggKzI2MiwxOCBAQAogICAgIH0KIAogICAgIHZvaWQgY3ViaWNUbyhjb25zdCBTa1BvaW50IHBbNF0pIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3AwLCBwMV0gPSBmUGF0aFhmb3JtLm1hcDJQb2ludHMocCk7CisjZWxzZQorICAgICAgICBhdXRvIGl0ZW0gPSBmUGF0aFhmb3JtLm1hcDJQb2ludHMocCk7CisgICAgICAgIGZsb2F0MiBwMHtpdGVtWzBdLCBpdGVtWzFdfSwgcDF7aXRlbVsyXSwgaXRlbVszXX07CisjZW5kaWYKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3AyLCBwM10gPSBmUGF0aFhmb3JtLm1hcDJQb2ludHMocCsyKTsKKyNlbHNlCisgICAgICAgIGF1dG8gaXRlbTEgPSBmUGF0aFhmb3JtLm1hcDJQb2ludHMocCsyKTsKKyAgICAgICAgZmxvYXQyIHAye2l0ZW0xWzBdLCBpdGVtMVsxXX0sIHAze2l0ZW0xWzJdLCBpdGVtMVszXX07CisjZW5kaWYKICAgICAgICAgZmxvYXQgbjQgPSB3YW5nc19mb3JtdWxhOjpjdWJpY19wb3c0KGtUZXNzZWxsYXRpb25QcmVjaXNpb24sIHAsIGZUb3RhbFZlY3Rvclhmb3JtKTsKICAgICAgICAgaWYgKG40IDw9IGZNYXhTZWdtZW50c19wb3c0KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGN1YmljIGFscmVhZHkgZml0cyBpbnRvICJtYXhTZWdtZW50cyIgdGVzc2VsbGF0aW9uIHNlZ21lbnRzLgpAQCAtNDAzLDE0ICs0MzYsMjQgQEAKICAgICB9CiAgICAgV2VkZ2VXcml0ZXIgd2VkZ2VXcml0ZXIodGFyZ2V0LCAmZlZlcnRleENodW5rQXJyYXksIHBhdGNoU3RyaWRlLCB3ZWRnZUFsbG9jQ291bnQsIG1heFNlZ21lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlckNhcHMpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW3BhdGhNYXRyaXgsIHBhdGhdIDogcGF0aERyYXdMaXN0KSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogcGF0aERyYXdMaXN0KSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHBhdGhNYXRyaXgsIHBhdGgsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgd2VkZ2VXcml0ZXIuc2V0TWF0cmljZXMoZlNoYWRlci0+dmlld01hdHJpeCgpLCBwYXRoTWF0cml4KTsKICAgICAgICAgTWlkcG9pbnRDb250b3VyUGFyc2VyIHBhcnNlcihwYXRoKTsKICAgICAgICAgd2hpbGUgKHBhcnNlci5wYXJzZU5leHRDb250b3VyKCkpIHsKICAgICAgICAgICAgIHdlZGdlV3JpdGVyLnNldE1pZHBvaW50KHBhcnNlci5jdXJyZW50TWlkcG9pbnQoKSk7CiAgICAgICAgICAgICBTa1BvaW50IGxhc3RQb2ludCA9IHswLCAwfTsKICAgICAgICAgICAgIFNrUG9pbnQgc3RhcnRQb2ludCA9IHswLCAwfTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0cywgd10gOiBwYXJzZXIuY3VycmVudENvbnRvdXIoKSkgeworI2Vsc2UKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVtIDogcGFyc2VyLmN1cnJlbnRDb250b3VyKCkpIHsKKyAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2ZXJiLCBwdHMsIHcsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprTW92ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBsYXN0UG9pbnQgPSBwdHNbMF07CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvU3Ryb2tlSGFyZHdhcmVUZXNzZWxsYXRvci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvU3Ryb2tlSGFyZHdhcmVUZXNzZWxsYXRvci5jcHAKaW5kZXggNGMzMjI3MC4uMjQ4OTIwMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL1N0cm9rZUhhcmR3YXJlVGVzc2VsbGF0b3IuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9TdHJva2VIYXJkd2FyZVRlc3NlbGxhdG9yLmNwcApAQCAtNzQ1LDcgKzc0NSwxMiBAQAogCiAgICAgICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9IHBhdGhTdHJva2UtPmZQYXRoOwogICAgICAgICBib29sIGNvbnRvdXJJc0VtcHR5ID0gdHJ1ZTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGZvciAoYXV0byBbdmVyYiwgcCwgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUocGF0aCkpIHsKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHAsIHcsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIGJvb2wgcHJldkpvaW5GaXRzSW5QYXRjaDsKICAgICAgICAgICAgIFNrUG9pbnQgc2NyYXRjaFB0c1s0XTsKICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQqIHBhdGNoUHRzOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXNzZWxsYXRlL1N0cm9rZUl0ZXJhdG9yLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvU3Ryb2tlSXRlcmF0b3IuaAppbmRleCBlOTUxODkxLi4yYThmMjc3IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvU3Ryb2tlSXRlcmF0b3IuaAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvU3Ryb2tlSXRlcmF0b3IuaApAQCAtNjksNyArNjksMTEgQEAKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgZkl0ZXIgIT0gZkVuZDsgKytmSXRlcikgewogICAgICAgICAgICAgU2tBU1NFUlQoZlF1ZXVlQ291bnQgPT0gMCB8fCBmUXVldWVDb3VudCA9PSAxKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFt2ZXJiLCBwdHMsIHddID0gKmZJdGVyOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgKmZJdGVyKTsKKyNlbmRpZgogICAgICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBTa1BhdGhWZXJiOjprTW92ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLT5maW5pc2hPcGVuQ29udG91cigpKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3Rlc3NlbGxhdGUvVGVzc2VsbGF0aW9uLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9UZXNzZWxsYXRpb24uY3BwCmluZGV4IDkyOTczODMuLjgyMjg1YTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9UZXNzZWxsYXRpb24uY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGVzc2VsbGF0ZS9UZXNzZWxsYXRpb24uY3BwCkBAIC05Nyw3ICs5NywxMiBAQAogCiBTa1BhdGggUHJlQ2hvcFBhdGhDdXJ2ZXMoY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa01hdHJpeCYgbWF0cml4LCBjb25zdCBTa1JlY3QmIHZpZXdwb3J0KSB7CiAgICAgUGF0aENob3BwZXIgY2hvcHBlcihtYXRyaXgsIHZpZXdwb3J0KTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFt2ZXJiLCBwLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUocGF0aCkpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHAsIHcsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOgogICAgICAgICAgICAgICAgIGNob3BwZXIubW92ZVRvKHBbMF0pOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXh0L0dyVGV4dEJsb2IuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS90ZXh0L0dyVGV4dEJsb2IuY3BwCmluZGV4IGYyOTc2NjUuLjk4MDIyZDUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdGV4dC9HclRleHRCbG9iLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3RleHQvR3JUZXh0QmxvYi5jcHAKQEAgLTk4LDE2ICs5OCwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyQ29sb3IgY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tNYXRyaXgmIG1hdHJpeCkgewogICAgIFNrUG9pbnQgaW5zZXQgPSB7ZHN0UGFkZGluZywgZHN0UGFkZGluZ307CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0b1txdWFkLCBnbHlwaCwgdmVydGV4RGF0YV0gOiBxdWFkRGF0YSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHF1YWREYXRhKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHF1YWQsIGdseXBoLCB2ZXJ0ZXhEYXRhLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvW3BvcywgcmVjdF0gPSB2ZXJ0ZXhEYXRhOworI2Vsc2UKKyAgICAgICAgYXV0byBwb3MgPSB2ZXJ0ZXhEYXRhLnBvczsKKyAgICAgICAgYXV0byByZWN0ID0gdmVydGV4RGF0YS5yZWN0OworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvW2wsIHQsIHIsIGJdID0gcmVjdDsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR180KGwsIHQsIHIsIGIsIHJlY3QpOworI2VuZGlmCiAgICAgICAgIFNrUG9pbnQgc0xUID0gKFNrUG9pbnQ6Ok1ha2UobCwgdCkgKyBpbnNldCkgKiBzdHJpa2VUb1NvdXJjZSArIHBvcywKICAgICAgICAgICAgICAgICBzUkIgPSAoU2tQb2ludDo6TWFrZShyLCBiKSAtIGluc2V0KSAqIHN0cmlrZVRvU291cmNlICsgcG9zOwogICAgICAgICBTa1BvaW50IGx0ID0gbWF0cml4Lm1hcFhZKHNMVC54KCksIHNMVC55KCkpLAogICAgICAgICAgICAgICAgIGxiID0gbWF0cml4Lm1hcFhZKHNMVC54KCksIHNSQi55KCkpLAogICAgICAgICAgICAgICAgIHJ0ID0gbWF0cml4Lm1hcFhZKHNSQi54KCksIHNMVC55KCkpLAogICAgICAgICAgICAgICAgIHJiID0gbWF0cml4Lm1hcFhZKHNSQi54KCksIHNSQi55KCkpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0b1thbCwgYXQsIGFyLCBhYl0gPSBnbHlwaC0+ZkF0bGFzTG9jYXRvci5nZXRVVnMoKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYSA9IGdseXBoLT5mQXRsYXNMb2NhdG9yLmdldFVWcygpOworICAgICAgICBhdXRvIGFsID0gYVswXSwgYXQgPSBhWzFdLCBhciA9IGFbMl0sIGFiID0gYVszXTsKKyNlbmRpZgogICAgICAgICBxdWFkWzBdID0ge2x0LCBjb2xvciwge2FsLCBhdH19OyAgLy8gTCxUCiAgICAgICAgIHF1YWRbMV0gPSB7bGIsIGNvbG9yLCB7YWwsIGFifX07ICAvLyBMLEIKICAgICAgICAgcXVhZFsyXSA9IHtydCwgY29sb3IsIHthciwgYXR9fTsgIC8vIFIsVApAQCAtMTI4LDE2ICsxNDcsMzUgQEAKICAgICAgICAgcG9zaXRpb25NYXRyaXgubWFwSG9tb2dlbmVvdXNQb2ludHMoJnJlc3VsdCwgJnB0LCAxKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9OworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG9bcXVhZCwgZ2x5cGgsIHZlcnRleERhdGFdIDogcXVhZERhdGEpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBxdWFkRGF0YSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhxdWFkLCBnbHlwaCwgdmVydGV4RGF0YSwgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0b1twb3MsIHJlY3RdID0gdmVydGV4RGF0YTsKKyNlbHNlCisgICAgICAgIGF1dG8gcG9zID0gdmVydGV4RGF0YS5wb3M7CisgICAgICAgIGF1dG8gcmVjdCA9IHZlcnRleERhdGEucmVjdDsKKyNlbmRpZgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbbCwgdCwgciwgYl0gPSByZWN0OworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzQobCwgdCwgciwgYiwgcmVjdCk7CisjZW5kaWYKICAgICAgICAgU2tQb2ludCBzTFQgPSAoU2tQb2ludDo6TWFrZShsLCB0KSArIGluc2V0KSAqIHN0cmlrZVRvU291cmNlICsgcG9zLAogICAgICAgICAgICAgICAgIHNSQiA9IChTa1BvaW50OjpNYWtlKHIsIGIpIC0gaW5zZXQpICogc3RyaWtlVG9Tb3VyY2UgKyBwb3M7CiAgICAgICAgIFNrUG9pbnQzIGx0ID0gbWFwWFlaKHNMVC54KCksIHNMVC55KCkpLAogICAgICAgICAgICAgICAgICBsYiA9IG1hcFhZWihzTFQueCgpLCBzUkIueSgpKSwKICAgICAgICAgICAgICAgICAgcnQgPSBtYXBYWVooc1JCLngoKSwgc0xULnkoKSksCiAgICAgICAgICAgICAgICAgIHJiID0gbWFwWFlaKHNSQi54KCksIHNSQi55KCkpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0b1thbCwgYXQsIGFyLCBhYl0gPSBnbHlwaC0+ZkF0bGFzTG9jYXRvci5nZXRVVnMoKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYSA9IGdseXBoLT5mQXRsYXNMb2NhdG9yLmdldFVWcygpOworICAgICAgICBhdXRvIGFsID0gYVswXSwgYXQgPSBhWzFdLCBhciA9IGFbMl0sIGFiID0gYVszXTsKKyNlbmRpZgogICAgICAgICBxdWFkWzBdID0ge2x0LCBjb2xvciwge2FsLCBhdH19OyAgLy8gTCxUCiAgICAgICAgIHF1YWRbMV0gPSB7bGIsIGNvbG9yLCB7YWwsIGFifX07ICAvLyBMLEIKICAgICAgICAgcXVhZFsyXSA9IHtydCwgY29sb3IsIHthciwgYXR9fTsgIC8vIFIsVApAQCAtMjg3LDcgKzMyNSwxMSBAQAogICAgIGF1dG8gcGF0aERhdGEgPSBhbGxvYy0+bWFrZVVuaXF1ZUFycmF5PFBhdGhHbHlwaD4oCiAgICAgICAgICAgICBkcmF3YWJsZXMuc2l6ZSgpLAogICAgICAgICAgICAgWyZdKGludCBpKXsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICAgICAgYXV0byBbdmFyaWFudCwgcG9zXSA9IGRyYXdhYmxlc1tpXTsKKyNlbHNlCisgICAgICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmFyaWFudCwgcG9zLCBkcmF3YWJsZXNbaV0pOworI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIFBhdGhHbHlwaHsqdmFyaWFudC5wYXRoKCksIHBvc307CiAgICAgICAgICAgICB9KTsKICAgICBTa1NwYW48UGF0aEdseXBoPiBwYXRoc3twYXRoRGF0YS5nZXQoKSwgZHJhd2FibGVzLnNpemUoKX07CkBAIC0zNTQsNyArMzk2LDEyIEBACiAgICAgICAgIGNvbnN0IFNrU3RyaWtlU3BlYyAmc3BlYywgU2tTcGFuPFNrR2x5cGhWYXJpYW50PiBnbHlwaHMsIEdyU3ViUnVuQWxsb2NhdG9yKiBhbGxvYykgewogCiAgICAgVmFyaWFudCogdmFyaWFudHMgPSBhbGxvYy0+bWFrZVBPREFycmF5PFZhcmlhbnQ+KGdseXBocy5zaXplKCkpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGF1dG8gW2ksIGd2XSA6IFNrTWFrZUVudW1lcmF0ZShnbHlwaHMpKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogU2tNYWtlRW51bWVyYXRlKGdseXBocykpIHsKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoaSwgZ3YsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgdmFyaWFudHNbaV0gPSBndi5nbHlwaCgpLT5nZXRQYWNrZWRJRCgpOwogICAgIH0KIApAQCAtNTMyLDggKzU3OSwxNyBAQAogICAgICAgICAgICAgc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCkgLSBTa1N0cmlrZUNvbW1vbjo6a1NrU2lkZVRvb0JpZ0ZvckF0bGFzOwogICAgIFNrR2x5cGhSZWN0IHJ1bkJvdW5kcyA9IHNrZ2x5cGg6OmVtcHR5X3JlY3QoKTsKICAgICBzaXplX3QgZ29vZFBvc0NvdW50ID0gMDsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFt2YXJpYW50LCBwb3NdIDogZHJhd2FibGVzKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogZHJhd2FibGVzKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHZhcmlhbnQsIHBvcywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbeCwgeV0gPSBwb3M7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih4LCB5LCBwb3MpOworI2VuZGlmCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSAub2Zmc2V0KCkgY2FsbCBiZWxvdyBkb2VzIG5vdCBvdmVyZmxvdy4gQW5kLCBhdCB0aGlzIHBvaW50IG5vbmUgb2YgdGhlCiAgICAgICAgIC8vIHJlY3RhbmdsZXMgYXJlIGVtcHR5IGJlY2F1c2UgdGhleSB3ZXJlIGN1bGxlZCBiZWZvcmUgdGhlIHJ1biB3YXMgY3JlYXRlZC4gQmFzaWNhbGx5LAogICAgICAgICAvLyBjdWxsIGFsbCB0aGUgZ2x5cGhzIHRoYXQgY2FuJ3QgYXBwZWFyIG9uIHRoZSBzY3JlZW4uCkBAIC01NjMsNyArNjE5LDExIEBACiB9CiAKIGJvb2wgRGlyZWN0TWFza1N1YlJ1bjo6Y2FuUmV1c2UoY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IFNrTWF0cml4JiBkcmF3TWF0cml4KSBjb25zdCB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3JldXNlLCB0cmFuc2xhdGlvbl0gPSBjaGVja19pbnRlZ2VyX3RyYW5zbGF0ZShmQmxvYi0+aW5pdGlhbE1hdHJpeCgpLCBkcmF3TWF0cml4KTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIocmV1c2UsIHRyYW5zbGF0aW9uLCBjaGVja19pbnRlZ2VyX3RyYW5zbGF0ZShmQmxvYi0+aW5pdGlhbE1hdHJpeCgpLCBkcmF3TWF0cml4KSk7CisjZW5kaWYKIAogICAgIC8vIElmIGdseXBocyB3ZXJlIGV4Y2x1ZGVkIGJlY2F1c2Ugb2YgcG9zaXRpb24gYm91bmRzLCB0aGVuIHRoaXMgc3VicnVuIGNhbiBvbmx5IGJlIHJldXNlZCBpZgogICAgIC8vIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBwb3NpdGlvbi4KQEAgLTU5MSw4ICs2NTEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0dseXBoUnVuTGlzdCYgZ2x5cGhSdW5MaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZ3B1Ojp2MTo6U3VyZmFjZURyYXdDb250ZXh0KiBzZGMpIGNvbnN0eworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvW2RyYXdpbmdDbGlwLCBvcF0gPSB0aGlzLT5tYWtlQXRsYXNUZXh0T3AoCiAgICAgICAgICAgICBjbGlwLCB2aWV3TWF0cml4LCBnbHlwaFJ1bkxpc3QsIHBhaW50LCBzZGMsIG51bGxwdHIpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihkcmF3aW5nQ2xpcCwgb3AsIHRoaXMtPm1ha2VBdGxhc1RleHRPcCgKKyAgICAgICAgICAgIGNsaXAsIHZpZXdNYXRyaXgsIGdseXBoUnVuTGlzdCwgcGFpbnQsIHNkYywgbnVsbHB0cikpOworI2VuZGlmCiAgICAgaWYgKG9wICE9IG51bGxwdHIpIHsKICAgICAgICAgc2RjLT5hZGREcmF3T3AoZHJhd2luZ0NsaXAsIHN0ZDo6bW92ZShvcCkpOwogICAgIH0KQEAgLTY1Niw3ICs3MjEsMTEgQEAKICAgICAvLyBuZWVkZWQuCiAgICAgY29uc3QgU2tSZWN0IHN1YlJ1bkJvdW5kcyA9IHRoaXMtPmRldmljZVJlY3QoZHJhd01hdHJpeCwgZHJhd09yaWdpbik7CiAgICAgY29uc3QgU2tSZWN0IGRldmljZUJvdW5kcyA9IFNrUmVjdDo6TWFrZVdIKHNkYy0+d2lkdGgoKSwgc2RjLT5oZWlnaHQoKSk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2NsaXBNZXRob2QsIGNsaXBSZWN0XSA9IGNhbGN1bGF0ZV9jbGlwKGNsaXAsIGRldmljZUJvdW5kcywgc3ViUnVuQm91bmRzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoY2xpcE1ldGhvZCwgY2xpcFJlY3QsIGNhbGN1bGF0ZV9jbGlwKGNsaXAsIGRldmljZUJvdW5kcywgc3ViUnVuQm91bmRzKSk7CisjZW5kaWYKIAogICAgIHN3aXRjaCAoY2xpcE1ldGhvZCkgewogICAgICAgICBjYXNlIGtDbGlwcGVkT3V0OgpAQCAtNzEzLDggKzc4MiwxOCBAQAogICAgICAgICAgICAgICAgY29uc3QgRGlyZWN0TWFza1N1YlJ1bjo6RGV2aWNlUG9zaXRpb24+IHF1YWREYXRhLAogICAgICAgICAgICAgICAgR3JDb2xvciBjb2xvciwKICAgICAgICAgICAgICAgIFNrSVBvaW50IGludGVncmFsT3JpZ2luT2Zmc2V0KSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0b1txdWFkLCBnbHlwaCwgbGVmdFRvcF0gOiBxdWFkRGF0YSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHF1YWREYXRhKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHF1YWQsIGdseXBoLCBsZWZ0VG9wLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvW2FsLCBhdCwgYXIsIGFiXSA9IGdseXBoLT5mQXRsYXNMb2NhdG9yLmdldFVWcygpOworI2Vsc2UKKyAgICAgICAgYXV0byBhID0gZ2x5cGgtPmZBdGxhc0xvY2F0b3IuZ2V0VVZzKCk7CisgICAgICAgIGF1dG8gYWwgPSBhWzBdLCBhdCA9IGFbMV0sIGFyID0gYVsyXSwgYWIgPSBhWzNdOworI2VuZGlmCiAgICAgICAgIFNrU2NhbGFyIGRsID0gbGVmdFRvcFswXSArIGludGVncmFsT3JpZ2luT2Zmc2V0LngoKSwKICAgICAgICAgICAgICAgICAgZHQgPSBsZWZ0VG9wWzFdICsgaW50ZWdyYWxPcmlnaW5PZmZzZXQueSgpLAogICAgICAgICAgICAgICAgICBkciA9IGRsICsgKGFyIC0gYWwpLApAQCAtNzM4LDE0ICs4MTcsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyQ29sb3IgY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0lQb2ludCBpbnRlZ3JhbE9yaWdpbk9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrSVJlY3QqIGNsaXAgPSBudWxscHRyKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0b1txdWFkLCBnbHlwaCwgbGVmdFRvcF0gOiBxdWFkRGF0YSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHF1YWREYXRhKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHF1YWQsIGdseXBoLCBsZWZ0VG9wLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvW2FsLCBhdCwgYXIsIGFiXSA9IGdseXBoLT5mQXRsYXNMb2NhdG9yLmdldFVWcygpOworI2Vsc2UKKyAgICAgICAgYXV0byBhID0gZ2x5cGgtPmZBdGxhc0xvY2F0b3IuZ2V0VVZzKCk7CisgICAgICAgIGF1dG8gYWwgPSBhWzBdLCBhdCA9IGFbMV0sIGFyID0gYVsyXSwgYWIgPSBhWzNdOworI2VuZGlmCiAgICAgICAgIHVpbnQxNl90IHcgPSBhciAtIGFsLAogICAgICAgICAgICAgICAgICBoID0gYWIgLSBhdDsKICAgICAgICAgU2tTY2FsYXIgbCA9IChTa1NjYWxhcilsZWZ0VG9wWzBdICsgaW50ZWdyYWxPcmlnaW5PZmZzZXQueCgpLAogICAgICAgICAgICAgICAgICB0ID0gKFNrU2NhbGFyKWxlZnRUb3BbMV0gKyBpbnRlZ3JhbE9yaWdpbk9mZnNldC55KCk7CiAgICAgICAgIGlmIChjbGlwID09IG51bGxwdHIpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvW2RsLCBkdCwgZHIsIGRiXSA9IFNrUmVjdDo6TWFrZUxUUkIobCwgdCwgbCArIHcsIHQgKyBoKTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfNChkbCwgZHQsIGRyLCBkYiwgU2tSZWN0OjpNYWtlTFRSQihsLCB0LCBsICsgdywgdCArIGgpKTsKKyNlbmRpZgogICAgICAgICAgICAgcXVhZFswXSA9IHt7ZGwsIGR0fSwgY29sb3IsIHthbCwgYXR9fTsgIC8vIEwsVAogICAgICAgICAgICAgcXVhZFsxXSA9IHt7ZGwsIGRifSwgY29sb3IsIHthbCwgYWJ9fTsgIC8vIEwsQgogICAgICAgICAgICAgcXVhZFsyXSA9IHt7ZHIsIGR0fSwgY29sb3IsIHthciwgYXR9fTsgIC8vIFIsVApAQCAtOTE2LDcgKzEwMDksMTEgQEAKICAgICBTa1NwYW48VmVydGV4RGF0YT4gdmVydGV4RGF0YSA9IGFsbG9jLT5tYWtlUE9EQXJyYXk8VmVydGV4RGF0YT4oCiAgICAgICAgICAgICBkcmF3YWJsZXMsCiAgICAgICAgICAgICBbJl0oYXV0byBlKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgIGF1dG8gW3ZhcmlhbnQsIHBvc10gPSBlOworI2Vsc2UKKyAgICAgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2YXJpYW50LCBwb3MsIGUpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgU2tHbHlwaCogc2tHbHlwaCA9IHZhcmlhbnQ7CiAgICAgICAgICAgICAgICAgaW50MTZfdCBsID0gc2tHbHlwaC0+bGVmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHNrR2x5cGgtPnRvcCgpLApAQCAtOTM5LDggKzEwMzYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrR2x5cGhSdW5MaXN0JiBnbHlwaFJ1bkxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZ3B1Ojp2MTo6U3VyZmFjZURyYXdDb250ZXh0KiBzZGMpIGNvbnN0IHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0b1tkcmF3aW5nQ2xpcCwgb3BdID0gdGhpcy0+bWFrZUF0bGFzVGV4dE9wKAogICAgICAgICAgICAgY2xpcCwgdmlld01hdHJpeCwgZ2x5cGhSdW5MaXN0LCBwYWludCwgc2RjLCBudWxscHRyKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZHJhd2luZ0NsaXAsIG9wLCB0aGlzLT5tYWtlQXRsYXNUZXh0T3AoCisgICAgICAgICAgICBjbGlwLCB2aWV3TWF0cml4LCBnbHlwaFJ1bkxpc3QsIHBhaW50LCBzZGMsIG51bGxwdHIpKTsKKyNlbmRpZgogICAgIGlmIChvcCAhPSBudWxscHRyKSB7CiAgICAgICAgIHNkYy0+YWRkRHJhd09wKGRyYXdpbmdDbGlwLCBzdGQ6Om1vdmUob3ApKTsKICAgICB9CkBAIC0xMTc4LDcgKzEyODAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHclN1YlJ1bkFsbG9jYXRvciogYWxsb2MpIHsKICAgICBTa1JlY3QgYm91bmRzID0gU2tSZWN0UHJpdjo6TWFrZUxhcmdlc3RJbnZlcnRlZCgpOwogICAgIGF1dG8gbWFwcGVyID0gWyYsIHN0cmlrZVRvU291cmNlPXN0cmlrZVNwZWMuc3RyaWtlVG9Tb3VyY2VSYXRpbygpXShjb25zdCBhdXRvJiBkKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvJiBbdmFyaWFudCwgcG9zXSA9IGQ7CisjZWxzZQorICAgICAgICBhdXRvJiB2YXJpYW50ID0gc3RkOjpnZXQ8MD4oZCk7CisgICAgICAgIGF1dG8mIHBvcyA9IHN0ZDo6Z2V0PDE+KGQpOworI2VuZGlmCiAgICAgICAgIFNrR2x5cGgqIHNrR2x5cGggPSB2YXJpYW50OwogICAgICAgICBpbnQxNl90IGwgPSBza0dseXBoLT5sZWZ0KCksCiAgICAgICAgICAgICAgICAgdCA9IHNrR2x5cGgtPnRvcCgpLApAQCAtMTIwOCw4ICsxMzE1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tHbHlwaFJ1bkxpc3QmIGdseXBoUnVuTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCwKICAgICAgICAgICAgICAgICAgICAgICBza2dwdTo6djE6OlN1cmZhY2VEcmF3Q29udGV4dCogc2RjKSBjb25zdCB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG9bZHJhd2luZ0NsaXAsIG9wXSA9IHRoaXMtPm1ha2VBdGxhc1RleHRPcCgKICAgICAgICAgICAgIGNsaXAsIHZpZXdNYXRyaXgsIGdseXBoUnVuTGlzdCwgcGFpbnQsIHNkYywgbnVsbHB0cik7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGRyYXdpbmdDbGlwLCBvcCwgdGhpcy0+bWFrZUF0bGFzVGV4dE9wKAorICAgICAgICAgICAgY2xpcCwgdmlld01hdHJpeCwgZ2x5cGhSdW5MaXN0LCBwYWludCwgc2RjLCBudWxscHRyKSk7CisjZW5kaWYKICAgICBpZiAob3AgIT0gbnVsbHB0cikgewogICAgICAgICBzZGMtPmFkZERyYXdPcChkcmF3aW5nQ2xpcCwgc3RkOjptb3ZlKG9wKSk7CiAgICAgfQpAQCAtMTI1OSw4ICsxMzcxLDEzIEBACiAgICAgR3JQYWludCBnclBhaW50OwogICAgIFNrUE1Db2xvcjRmIGRyYXdpbmdDb2xvciA9IGNhbGN1bGF0ZV9jb2xvcnMoc2RjLCBwYWludCwgdmlld01hdHJpeCwgZk1hc2tGb3JtYXQsICZnclBhaW50KTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFttYXNrVHlwZSwgREZHUEZsYWdzLCB1c2VHYW1tYUNvcnJlY3REaXN0YW5jZVRhYmxlXSA9CiAgICAgICAgIGNhbGN1bGF0ZV9zZGZfcGFyYW1ldGVycygqc2RjLCBkcmF3TWF0cml4LCBmVXNlTENEVGV4dCwgZkFudGlBbGlhc2VkKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzMobWFza1R5cGUsIERGR1BGbGFncywgdXNlR2FtbWFDb3JyZWN0RGlzdGFuY2VUYWJsZSwKKyAgICAgICAgY2FsY3VsYXRlX3NkZl9wYXJhbWV0ZXJzKCpzZGMsIGRyYXdNYXRyaXgsIGZVc2VMQ0RUZXh0LCBmQW50aUFsaWFzZWQpKTsKKyNlbmRpZgogCiAgICAgYXV0byBnZW9tZXRyeSA9IEF0bGFzVGV4dE9wOjpHZW9tZXRyeTo6TWFrZUZvckJsb2IoKnRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd01hdHJpeCwKQEAgLTEyOTMsNyArMTQxMCwxMSBAQAogICAgIFNrU2NhbGFyIG5ld01heFNjYWxlID0gZHJhd01hdHJpeC5nZXRNYXhTY2FsZSgpOwogICAgIFNrU2NhbGFyIG9sZE1heFNjYWxlID0gaW5pdGlhbE1hdHJpeC5nZXRNYXhTY2FsZSgpOwogICAgIFNrU2NhbGFyIHNjYWxlQWRqdXN0ID0gbmV3TWF4U2NhbGUgLyBvbGRNYXhTY2FsZTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbbWF4TWluU2NhbGUsIG1pbk1heFNjYWxlXSA9IGZCbG9iLT5zY2FsZUJvdW5kcygpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihtYXhNaW5TY2FsZSwgbWluTWF4U2NhbGUsIGZCbG9iLT5zY2FsZUJvdW5kcygpKTsKKyNlbmRpZgogICAgIGlmIChzY2FsZUFkanVzdCA8IG1heE1pblNjYWxlIHx8IHNjYWxlQWRqdXN0ID4gbWluTWF4U2NhbGUpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE0NzIsNyArMTU5MywxMSBAQAogICAgIH0KIAogICAgIGlmIChmU2V0T2ZEcmF3aW5nVHlwZXMgJiBHclNERlRDb250cm9sOjprRGlyZWN0KSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFtjb21wYXRpYmxlLCBfXSA9IGNoZWNrX2ludGVnZXJfdHJhbnNsYXRlKGZEcmF3TWF0cml4LCB0aGF0LmZEcmF3TWF0cml4KTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGNvbXBhdGlibGUsIF8sIGNoZWNrX2ludGVnZXJfdHJhbnNsYXRlKGZEcmF3TWF0cml4LCB0aGF0LmZEcmF3TWF0cml4KSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIGNvbXBhdGlibGU7CiAgICAgfQogCkBAIC0xNzEzLDggKzE4MzgsMTcgQEAKICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1heCgpIC0gU2tTdHJpa2VDb21tb246OmtTa1NpZGVUb29CaWdGb3JBdGxhczsKICAgICBTa0dseXBoUmVjdCBydW5Cb3VuZHMgPSBza2dseXBoOjplbXB0eV9yZWN0KCk7CiAgICAgc2l6ZV90IGdvb2RQb3NDb3VudCA9IDA7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmFyaWFudCwgcG9zXSA6IGRyYXdhYmxlcykgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IGRyYXdhYmxlcykgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2YXJpYW50LCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3gsIHldID0gcG9zOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoeCwgeSwgcG9zKTsKKyNlbmRpZgogICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgLm9mZnNldCgpIGNhbGwgYmVsb3cgZG9lcyBub3Qgb3ZlcmZsb3cuIEFuZCwgYXQgdGhpcyBwb2ludCBub25lIG9mIHRoZQogICAgICAgICAvLyByZWN0YW5nbGVzIGFyZSBlbXB0eSBiZWNhdXNlIHRoZXkgd2VyZSBjdWxsZWQgYmVmb3JlIHRoZSBydW4gd2FzIGNyZWF0ZWQuIEJhc2ljYWxseSwKICAgICAgICAgLy8gY3VsbCBhbGwgdGhlIGdseXBocyB0aGF0IGNhbid0IGFwcGVhciBvbiB0aGUgc2NyZWVuLgpAQCAtMTc2OCw3ICsxOTAyLDExIEBACiAgICAgLy8gbm9uLUFBIGNsaXAgaXMgdXNlZC4gSWYgY2xpcFJlY3QgaXMgZW1wdHksIGFuZCBjbGlwIGlzIG51bGxwdHIsIHRoZW4gdGhlcmUgaXMgbm8gY2xpcHBpbmcKICAgICAvLyBuZWVkZWQuCiAgICAgY29uc3QgU2tSZWN0IGRldmljZUJvdW5kcyA9IFNrUmVjdDo6TWFrZVdIKHNkYy0+d2lkdGgoKSwgc2RjLT5oZWlnaHQoKSk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2NsaXBNZXRob2QsIGNsaXBSZWN0XSA9IGNhbGN1bGF0ZV9jbGlwKGNsaXAsIGRldmljZUJvdW5kcywgZkdseXBoRGV2aWNlQm91bmRzKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoY2xpcE1ldGhvZCwgY2xpcFJlY3QsIGNhbGN1bGF0ZV9jbGlwKGNsaXAsIGRldmljZUJvdW5kcywgZkdseXBoRGV2aWNlQm91bmRzKSk7CisjZW5kaWYKIAogICAgIHN3aXRjaCAoY2xpcE1ldGhvZCkgewogICAgICAgICBjYXNlIGtDbGlwcGVkT3V0OgpAQCAtMTgyNyw4ICsxOTY1LDE4IEBACiAgICAgICAgIGNvbnN0IEdyR2x5cGgqLAogICAgICAgICBjb25zdCBEaXJlY3RNYXNrU3ViUnVuTm9DYWNoZTo6RGV2aWNlUG9zaXRpb24+IHF1YWREYXRhLAogICAgICAgICBHckNvbG9yIGNvbG9yKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0b1txdWFkLCBnbHlwaCwgbGVmdFRvcF0gOiBxdWFkRGF0YSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHF1YWREYXRhKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHF1YWQsIGdseXBoLCBsZWZ0VG9wLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvW2FsLCBhdCwgYXIsIGFiXSA9IGdseXBoLT5mQXRsYXNMb2NhdG9yLmdldFVWcygpOworI2Vsc2UKKyAgICAgICAgYXV0byBhID0gZ2x5cGgtPmZBdGxhc0xvY2F0b3IuZ2V0VVZzKCk7CisgICAgICAgIGF1dG8gYWwgPSBhWzBdLCBhdCA9IGFbMV0sIGFyID0gYVsyXSwgYWIgPSBhWzNdOworI2VuZGlmCiAgICAgICAgIFNrU2NhbGFyIGRsID0gbGVmdFRvcFswXSwKICAgICAgICAgICAgICAgICAgZHQgPSBsZWZ0VG9wWzFdLAogICAgICAgICAgICAgICAgICBkciA9IGRsICsgKGFyIC0gYWwpLApAQCAtMTk0Niw3ICsyMDk0LDExIEBACiAgICAgICAgIEdyU3ViUnVuQWxsb2NhdG9yKiBhbGxvYykgewogICAgIFNrUmVjdCBib3VuZHMgPSBTa1JlY3RQcml2OjpNYWtlTGFyZ2VzdEludmVydGVkKCk7CiAgICAgYXV0byBpbml0aWFsaXplciA9IFsmLCBzdHJpa2VUb1NvdXJjZT1zdHJpa2VTcGVjLnN0cmlrZVRvU291cmNlUmF0aW8oKV0oYXV0byBkcmF3YWJsZSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbdmFyaWFudCwgcG9zXSA9IGRyYXdhYmxlOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmFyaWFudCwgcG9zLCBkcmF3YWJsZSk7CisjZW5kaWYKICAgICAgICAgU2tHbHlwaCogc2tHbHlwaCA9IHZhcmlhbnQ7CiAgICAgICAgIGludDE2X3QgbCA9IHNrR2x5cGgtPmxlZnQoKSwKICAgICAgICAgICAgICAgICB0ID0gc2tHbHlwaC0+dG9wKCksCkBAIC0yMTc1LDcgKzIzMjcsMTEgQEAKIAogICAgIFNrUmVjdCBib3VuZHMgPSBTa1JlY3RQcml2OjpNYWtlTGFyZ2VzdEludmVydGVkKCk7CiAgICAgYXV0byBpbml0aWFsaXplciA9IFsmLCBzdHJpa2VUb1NvdXJjZT1zdHJpa2VTcGVjLnN0cmlrZVRvU291cmNlUmF0aW8oKV0oYXV0byBkcmF3YWJsZSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbdmFyaWFudCwgcG9zXSA9IGRyYXdhYmxlOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmFyaWFudCwgcG9zLCBkcmF3YWJsZSk7CisjZW5kaWYKICAgICAgICAgU2tHbHlwaCogc2tHbHlwaCA9IHZhcmlhbnQ7CiAgICAgICAgIGludDE2X3QgbCA9IHNrR2x5cGgtPmxlZnQoKSwKICAgICAgICAgICAgICAgICB0ID0gc2tHbHlwaC0+dG9wKCksCkBAIC0yMjE0LDggKzIzNzAsMTMgQEAKICAgICBHclBhaW50IGdyUGFpbnQ7CiAgICAgU2tQTUNvbG9yNGYgZHJhd2luZ0NvbG9yID0gY2FsY3VsYXRlX2NvbG9ycyhzZGMsIHBhaW50LCB2aWV3TWF0cml4LCBmTWFza0Zvcm1hdCwgJmdyUGFpbnQpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW21hc2tUeXBlLCBERkdQRmxhZ3MsIHVzZUdhbW1hQ29ycmVjdERpc3RhbmNlVGFibGVdID0KICAgICBjYWxjdWxhdGVfc2RmX3BhcmFtZXRlcnMoKnNkYywgZHJhd01hdHJpeCwgZlVzZUxDRFRleHQsIGZBbnRpQWxpYXNlZCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18zKG1hc2tUeXBlLCBERkdQRmxhZ3MsIHVzZUdhbW1hQ29ycmVjdERpc3RhbmNlVGFibGUsCisgICAgY2FsY3VsYXRlX3NkZl9wYXJhbWV0ZXJzKCpzZGMsIGRyYXdNYXRyaXgsIGZVc2VMQ0RUZXh0LCBmQW50aUFsaWFzZWQpKTsKKyNlbmRpZgogCiAgICAgYXV0byBnZW9tZXRyeSA9IG5ldyAoKHZvaWQqKWZHZW9tKSBBdGxhc1RleHRPcDo6R2VvbWV0cnkgewogICAgICAgICAgICAgKnRoaXMsCkBAIC0yMzY3LDcgKzI1MjgsMTIgQEAKICAgICBTa01hdHJpeCBzdHJpa2VUb1NvdXJjZSA9IFNrTWF0cml4OjpTY2FsZShzdHJpa2VUb1NvdXJjZVNjYWxlLCBzdHJpa2VUb1NvdXJjZVNjYWxlKTsKICAgICBzdHJpa2VUb1NvdXJjZS5wb3N0VHJhbnNsYXRlKGRyYXdPcmlnaW4ueCgpLCBkcmF3T3JpZ2luLnkoKSk7CiAgICAgaWYgKCFuZWVkc0V4YWN0Q1RNKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBmb3IgKGF1dG8gW3ZhcmlhbnQsIHBvc10gOiBkcmF3YWJsZXMpIHsKKyNlbHNlCisgICAgICAgIGZvciAoYXV0byBpdGVtIDogZHJhd2FibGVzKSB7CisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2YXJpYW50LCBwb3MsIHN0ZDo6bW92ZShpdGVtKSk7CisjZW5kaWYKICAgICAgICAgICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9ICp2YXJpYW50LnBhdGgoKTsKICAgICAgICAgICAgIFNrTWF0cml4IHBhdGhNYXRyaXggPSBzdHJpa2VUb1NvdXJjZTsKICAgICAgICAgICAgIHBhdGhNYXRyaXgucG9zdFRyYW5zbGF0ZShwb3MueCgpLCBwb3MueSgpKTsKQEAgLTIzODEsNyArMjU0NywxMiBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcGF0aCB0byBkZXZpY2Ugc3BhY2UgYmVjYXVzZSB0aGUgZGV2aWNlTWF0cml4IG11c3QgYmUgdW5jaGFuZ2VkIHRvCiAgICAgICAgIC8vIGRyYXcgZWZmZWN0LCBmaWx0ZXIgb3Igc2hhZGVyIHBhdGhzLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgZm9yIChhdXRvIFt2YXJpYW50LCBwb3NdIDogZHJhd2FibGVzKSB7CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gaXRlbSA6IGRyYXdhYmxlcykgeworICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmFyaWFudCwgcG9zLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgICAgICBjb25zdCBTa1BhdGgmIHBhdGggPSAqdmFyaWFudC5wYXRoKCk7CiAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGdseXBoIHRvIHNvdXJjZSBzcGFjZS4KICAgICAgICAgICAgIFNrTWF0cml4IHBhdGhNYXRyaXggPSBzdHJpa2VUb1NvdXJjZTsKQEAgLTI0MTIsOCArMjU4MywxMyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEdyQXRsYXNTdWJSdW4qIHN1YlJ1blB0ciA9IHN1YlJ1bi5nZXQoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbZHJhd2luZ0NsaXAsIG9wXSA9IHN1YlJ1blB0ci0+bWFrZUF0bGFzVGV4dE9wKAogICAgICAgICAgICAgZkNsaXAsIGZWaWV3TWF0cml4LCBmR2x5cGhSdW5MaXN0LCBmUGFpbnQsIGZTREMsIHN0ZDo6bW92ZShzdWJSdW4pKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoZHJhd2luZ0NsaXAsIG9wLCBzdWJSdW5QdHItPm1ha2VBdGxhc1RleHRPcCgKKyAgICAgICAgICAgIGZDbGlwLCBmVmlld01hdHJpeCwgZkdseXBoUnVuTGlzdCwgZlBhaW50LCBmU0RDLCBzdGQ6Om1vdmUoc3ViUnVuKSkpOworI2VuZGlmCiAgICAgaWYgKG9wICE9IG51bGxwdHIpIHsKICAgICAgICAgZlNEQy0+YWRkRHJhd09wKGRyYXdpbmdDbGlwLCBzdGQ6Om1vdmUob3ApKTsKICAgICB9CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3YxL0RldmljZS5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3YxL0RldmljZS5jcHAKaW5kZXggOTFjZGU4YS4uZDdmNzEwYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS92MS9EZXZpY2UuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdjEvRGV2aWNlLmNwcApAQCAtNzcsOCArNzcsMTMgQEAKICAgICBpZiAodmlld01hdHJpeC5pc0lkZW50aXR5KCkgfHwgcnJlY3QudHJhbnNmb3JtKHZpZXdNYXRyaXgsIGRldlJSZWN0LndyaXRhYmxlKCkpKSB7CiAgICAgICAgIGF1dG8gZWRnZVR5cGUgPSAoYWEgPT0gR3JBQTo6a1llcykgPyBHckNsaXBFZGdlVHlwZTo6a0ludmVyc2VGaWxsQUEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdyQ2xpcEVkZ2VUeXBlOjprSW52ZXJzZUZpbGxCVzsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3N1Y2Nlc3MsIGZwXSA9IEdyUlJlY3RFZmZlY3Q6Ok1ha2UoLyppbnB1dEZQPSovbnVsbHB0ciwgZWRnZVR5cGUsICpkZXZSUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJDYXBzKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHN1Y2Nlc3MsIGZwLCBHclJSZWN0RWZmZWN0OjpNYWtlKC8qaW5wdXRGUD0qL251bGxwdHIsIGVkZ2VUeXBlLCAqZGV2UlJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyQ2FwcykpOworI2VuZGlmCiAgICAgICAgIHJldHVybiAoc3VjY2VzcykgPyBzdGQ6Om1vdmUoZnApIDogbnVsbHB0cjsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NzEsNyArNjc2LDExIEBACiAKICAgICBTa1BpeG1hcCBwbTsKICAgICBpZiAoaW1hZ2UtPmlzVGV4dHVyZUJhY2tlZCgpKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBhdXRvIFt2aWV3LCBjdF0gPSBhc19JQihpbWFnZSktPmFzVmlldyh0aGlzLT5yZWNvcmRpbmdDb250ZXh0KCksIEdyTWlwbWFwcGVkOjprTm8pOworI2Vsc2UKKyAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmlldywgY3QsIGFzX0lCKGltYWdlKS0+YXNWaWV3KHRoaXMtPnJlY29yZGluZ0NvbnRleHQoKSwgR3JNaXBtYXBwZWQ6OmtObykpOworI2VuZGlmCiAgICAgICAgIFNrQVNTRVJUKHZpZXcpOwogCiAgICAgICAgIHJldHVybiBTa1NwZWNpYWxJbWFnZTo6TWFrZURlZmVycmVkRnJvbUdwdShmQ29udGV4dC5nZXQoKSwKQEAgLTc5OCw4ICs4MDcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7CiAgICAgQVNTRVJUX1NJTkdMRV9PV05FUgogICAgIGF1dG8gaXRlciA9IHN0ZDo6bWFrZV91bmlxdWU8U2tMYXR0aWNlSXRlcj4obGF0dGljZSwgZHN0KTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgaWYgKGF1dG8gW3ZpZXcsIGN0XSA9IGFzX0lCKGltYWdlKS0+YXNWaWV3KHRoaXMtPnJlY29yZGluZ0NvbnRleHQoKSwgR3JNaXBtYXBwZWQ6OmtObyk7IHZpZXcpIHsKICAgICAgICAgR3JDb2xvckluZm8gY29sb3JJbmZvKGN0LCBpbWFnZS0+YWxwaGFUeXBlKCksIGltYWdlLT5yZWZDb2xvclNwYWNlKCkpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2aWV3LCBjdCwgYXNfSUIoaW1hZ2UpLT5hc1ZpZXcodGhpcy0+cmVjb3JkaW5nQ29udGV4dCgpLCBHck1pcG1hcHBlZDo6a05vKSk7CisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgR3JDb2xvckluZm8gY29sb3JJbmZvKGN0LCBpbWFnZS0+YWxwaGFUeXBlKCksIGltYWdlLT5yZWZDb2xvclNwYWNlKCkpOworI2VuZGlmCiAgICAgICAgIHRoaXMtPmRyYXdWaWV3TGF0dGljZShzdGQ6Om1vdmUodmlldyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY29sb3JJbmZvKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShpdGVyKSwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdjEvRGV2aWNlX2RyYXdUZXh0dXJlLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdjEvRGV2aWNlX2RyYXdUZXh0dXJlLmNwcAppbmRleCA0ZWIwODc4Li42NWM3ZDc2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3YxL0RldmljZV9kcmF3VGV4dHVyZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS92MS9EZXZpY2VfZHJhd1RleHR1cmUuY3BwCkBAIC00MzEsNyArNDMxLDExIEBACiAgICAgICAgIGNhbl91c2VfZHJhd190ZXh0dXJlKHBhaW50LCBzYW1wbGluZy51c2VDdWJpYywgc2FtcGxpbmcubWlwbWFwKSkgewogICAgICAgICAvLyBXZSd2ZSBkb25lIGVub3VnaCBjaGVja3MgYWJvdmUgdG8gYWxsb3cgdXMgdG8gcGFzcyBDbGFtcE5lYXJlc3QoKSBhbmQgbm90IGNoZWNrIGZvcgogICAgICAgICAvLyBzY2FsaW5nIGFkanVzdG1lbnRzLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbdmlldywgY3RdID0gaW1hZ2UuYXNWaWV3KHJDb250ZXh0LCBHck1pcG1hcHBlZDo6a05vKTsKKyNlbHNlCisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIGN0LCBpbWFnZS5hc1ZpZXcockNvbnRleHQsIEdyTWlwbWFwcGVkOjprTm8pKTsKKyNlbmRpZgogICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS92MS9TdXJmYWNlRHJhd0NvbnRleHQuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2dwdS92MS9TdXJmYWNlRHJhd0NvbnRleHQuY3BwCmluZGV4IGNkYzYxYWMuLjFiYzI5MWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9ncHUvdjEvU3VyZmFjZURyYXdDb250ZXh0LmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvZ3B1L3YxL1N1cmZhY2VEcmF3Q29udGV4dC5jcHAKQEAgLTI1MSw3ICsyNTEsMTEgQEAKICAgICAgICAgR3JTdXJmYWNlT3JpZ2luIG9yaWdpbiwKICAgICAgICAgU2tCdWRnZXRlZCBidWRnZXRlZCkgewogICAgIGNvbnN0IEdyQ2FwcyogY2FwcyA9IHJDb250ZXh0LT5wcml2KCkuY2FwcygpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtjdCwgX10gPSBjYXBzLT5nZXRGYWxsYmFja0NvbG9yVHlwZUFuZEZvcm1hdChjb2xvclR5cGUsIHNhbXBsZUNudCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGN0LCBfLCBjYXBzLT5nZXRGYWxsYmFja0NvbG9yVHlwZUFuZEZvcm1hdChjb2xvclR5cGUsIHNhbXBsZUNudCkpOworI2VuZGlmCiAgICAgaWYgKGN0ID09IEdyQ29sb3JUeXBlOjprVW5rbm93bikgewogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0zNTcsMTIgKzM2MSwyMSBAQAogICAgICAgICAgICAgdGhpcy0+cmVjb3JkaW5nQ29udGV4dCgpLT5wcml2KCkuZ2V0U0RGVENvbnRyb2woCiAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnN1cmZhY2VQcm9wcygpLmlzVXNlRGV2aWNlSW5kZXBlbmRlbnRGb250cygpKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtjYW5DYWNoZSwga2V5XSA9IEdyVGV4dEJsb2I6OktleTo6TWFrZShnbHlwaFJ1bkxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZlN1cmZhY2VQcm9wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5jb2xvckluZm8oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihjYW5DYWNoZSwga2V5LCBHclRleHRCbG9iOjpLZXk6Ok1ha2UoZ2x5cGhSdW5MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZTdXJmYWNlUHJvcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Y29sb3JJbmZvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd01hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sKSk7CisjZW5kaWYKIAogICAgIHNrX3NwPEdyVGV4dEJsb2I+IGJsb2I7CiAgICAgR3JUZXh0QmxvYkNhY2hlKiB0ZXh0QmxvYkNhY2hlID0gZkNvbnRleHQtPnByaXYoKS5nZXRUZXh0QmxvYkNhY2hlKCk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvaW1hZ2UvU2tJbWFnZV9HcHUuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2ltYWdlL1NrSW1hZ2VfR3B1LmNwcAppbmRleCA3NDVkNmQ1Li5lMGJjYzI1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvaW1hZ2UvU2tJbWFnZV9HcHUuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9pbWFnZS9Ta0ltYWdlX0dwdS5jcHAKQEAgLTMwNCw3ICszMDQsMTEgQEAKICAgICBpbmZvID0gaW5mby5tYWtlQ29sb3JUeXBlKGN0KTsKIAogICAgIC8vIERyYXcgdGhpcyBpbWFnZSdzIHRleHR1cmUgaW50byB0aGUgU0ZDLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBfXSA9IHRoaXMtPmFzVmlldyhkQ29udGV4dCwgR3JNaXBtYXBwZWQodGhpcy0+aGFzTWlwbWFwcygpKSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIF8sIHRoaXMtPmFzVmlldyhkQ29udGV4dCwgR3JNaXBtYXBwZWQodGhpcy0+aGFzTWlwbWFwcygpKSkpOworI2VuZGlmCiAgICAgYXV0byB0ZXhGUCA9IEdyVGV4dHVyZUVmZmVjdDo6TWFrZShzdGQ6Om1vdmUodmlldyksIHRoaXMtPmFscGhhVHlwZSgpKTsKICAgICBhdXRvIGNvbG9yRlAgPSBHckNvbG9yU3BhY2VYZm9ybUVmZmVjdDo6TWFrZShzdGQ6Om1vdmUodGV4RlApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmltYWdlSW5mbygpLmNvbG9ySW5mbygpLApAQCAtNTUyLDcgKzU1NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEdySW1hZ2VUZXhHZW5Qb2xpY3k6OmtOZXdfVW5jYWNoZWRfQnVkZ2V0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHckltYWdlVGV4R2VuUG9saWN5OjprTmV3X1VuY2FjaGVkX1VuYnVkZ2V0ZWQ7CiAgICAgLy8gVE9ETzogRG9uJ3QgZmxhdHRlbiBZVVZBIGltYWdlcyBoZXJlLiBBZGQgbWlwcyB0byB0aGUgcGxhbmVzIGluc3RlYWQuCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0XSA9IGFzX0lCKHRoaXMpLT5hc1ZpZXcoZENvbnRleHQsIG1pcG1hcHBlZCwgcG9saWN5KTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIodmlldywgY3QsIGFzX0lCKHRoaXMpLT5hc1ZpZXcoZENvbnRleHQsIG1pcG1hcHBlZCwgcG9saWN5KSk7CisjZW5kaWYKICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNjU4LDcgKzY2NiwxMSBAQAogICAgIFNrQml0bWFwIGJtcDsKICAgICBibXAuaW5zdGFsbFBpeGVscygqcGl4bWFwKTsKICAgICBHck1pcG1hcHBlZCBtaXBtYXBwZWQgPSBidWlsZE1pcHMgPyBHck1pcG1hcHBlZDo6a1llcyA6IEdyTWlwbWFwcGVkOjprTm87CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0XSA9IEdyTWFrZVVuY2FjaGVkQml0bWFwUHJveHlWaWV3KGRDb250ZXh0LCBibXAsIG1pcG1hcHBlZCk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIGN0LCBHck1ha2VVbmNhY2hlZEJpdG1hcFByb3h5VmlldyhkQ29udGV4dCwgYm1wLCBtaXBtYXBwZWQpKTsKKyNlbmRpZgogICAgIGlmICghdmlldykgewogICAgICAgICByZXR1cm4gU2tJbWFnZTo6TWFrZVJhc3RlckNvcHkoKnBpeG1hcCk7CiAgICAgfQpAQCAtNzgyLDcgKzc5NCwxMSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0XSA9IGFzX0lCKGltYWdlKS0+YXNWaWV3KGRpcmVjdCwgR3JNaXBtYXBwZWQ6OmtObyk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKHZpZXcsIGN0LCBhc19JQihpbWFnZSktPmFzVmlldyhkaXJlY3QsIEdyTWlwbWFwcGVkOjprTm8pKTsKKyNlbmRpZgogCiAgICAgaWYgKCF2aWV3KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9pbWFnZS9Ta0ltYWdlX0dwdUJhc2UuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2ltYWdlL1NrSW1hZ2VfR3B1QmFzZS5jcHAKaW5kZXggZjc5Y2FmOS4uMjAzMWMyMSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2ltYWdlL1NrSW1hZ2VfR3B1QmFzZS5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL2ltYWdlL1NrSW1hZ2VfR3B1QmFzZS5jcHAKQEAgLTEwNyw3ICsxMDcsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdF0gPSB0aGlzLT5hc1ZpZXcoZENvbnRleHQsIEdyTWlwbWFwcGVkOjprTm8pOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2aWV3LCBjdCwgdGhpcy0+YXNWaWV3KGRDb250ZXh0LCBHck1pcG1hcHBlZDo6a05vKSk7CisjZW5kaWYKICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNSw3ICsxMzksMTEgQEAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW3ZpZXcsIGN0XSA9IHRoaXMtPmFzVmlldyhkaXJlY3QsIEdyTWlwbWFwcGVkOjprTm8pOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2aWV3LCBjdCwgdGhpcy0+YXNWaWV3KGRpcmVjdCwgR3JNaXBtYXBwZWQ6OmtObykpOworI2VuZGlmCiAgICAgU2tBU1NFUlQodmlldyk7CiAgICAgU2tBU1NFUlQoY3QgPT0gU2tDb2xvclR5cGVUb0dyQ29sb3JUeXBlKHRoaXMtPmNvbG9yVHlwZSgpKSk7CiAKQEAgLTE2OSw3ICsxNzcsMTEgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt2aWV3LCBjdF0gPSB0aGlzLT5hc1ZpZXcoZENvbnRleHQsIEdyTWlwbWFwcGVkOjprTm8pOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2aWV3LCBjdCwgdGhpcy0+YXNWaWV3KGRDb250ZXh0LCBHck1pcG1hcHBlZDo6a05vKSk7CisjZW5kaWYKICAgICBTa0FTU0VSVCh2aWV3KTsKIAogICAgIEdyQ29sb3JJbmZvIGNvbG9ySW5mbyhjdCwgdGhpcy0+YWxwaGFUeXBlKCksIHRoaXMtPnJlZkNvbG9yU3BhY2UoKSk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcGF0aG9wcy9Ta09wRWRnZUJ1aWxkZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tPcEVkZ2VCdWlsZGVyLmNwcAppbmRleCA5MjdkOWFlLi40NjQ0YmNmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcGF0aG9wcy9Ta09wRWRnZUJ1aWxkZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wYXRob3BzL1NrT3BFZGdlQnVpbGRlci5jcHAKQEAgLTg4LDcgKzg4LDEyIEBACiAgICAgU2tQb2ludCBjdXJ2ZVN0YXJ0OwogICAgIFNrUG9pbnQgY3VydmVbNF07CiAgICAgYm9vbCBsYXN0Q3VydmUgPSBmYWxzZTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgZm9yIChhdXRvIFtwYXRoVmVyYiwgcHRzLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoKmZQYXRoKSkgeworI2Vsc2UKKyAgICBmb3IgKGF1dG8gaXRlbSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUoKmZQYXRoKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyhwYXRoVmVyYiwgcHRzLCB3LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIGF1dG8gdmVyYiA9IHN0YXRpY19jYXN0PFNrUGF0aDo6VmVyYj4ocGF0aFZlcmIpOwogICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgIGNhc2UgU2tQYXRoOjprTW92ZV9WZXJiOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tQYXRoT3BzQXNXaW5kaW5nLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wYXRob3BzL1NrUGF0aE9wc0FzV2luZGluZy5jcHAKaW5kZXggMmMyMjdjZC4uNTBlOWJhYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tQYXRoT3BzQXNXaW5kaW5nLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcGF0aG9wcy9Ta1BhdGhPcHNBc1dpbmRpbmcuY3BwCkBAIC0xODEsNyArMTgxLDEyIEBACiAgICAgICAgIGJvdW5kcy5zZXRFbXB0eSgpOwogICAgICAgICBpbnQgbGFzdFN0YXJ0ID0gMDsKICAgICAgICAgaW50IHZlcmJTdGFydCA9IDA7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICBmb3IgKGF1dG8gW3ZlcmIsIHB0cywgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKGZQYXRoKSkgeworI2Vsc2UKKyAgICAgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKGZQYXRoKSkgeworICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzModmVyYiwgcHRzLCB3LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoU2tQYXRoVmVyYjo6a01vdmUgPT0gdmVyYikgewogICAgICAgICAgICAgICAgIGlmICghYm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzLT5lbXBsYWNlX2JhY2soYm91bmRzLCBsYXN0U3RhcnQsIHZlcmJTdGFydCk7CkBAIC0zMzIsNyArMzM3LDExIEBACiAgICAgICAgICAgICBTa1BhdGhCdWlsZGVyIHJldmVyc2U7CiAgICAgICAgICAgICBTa1BhdGhCdWlsZGVyKiB0ZW1wID0gY29udG91ci5mUmV2ZXJzZSA/ICZyZXZlcnNlIDogJnJlc3VsdDsKICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGl0ZXJhdGUuZW5kKCkgJiYgdmVyYkNvdW50IDwgY29udG91ci5mVmVyYkVuZDsgKytpdGVyLCArK3ZlcmJDb3VudCkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgICAgICBhdXRvIFt2ZXJiLCBwdHMsIHddID0gKml0ZXI7CisjZWxzZQorICAgICAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgKml0ZXIpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgc3dpdGNoICh2ZXJiKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2tQYXRoVmVyYjo6a01vdmU6CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLT5tb3ZlVG8ocHRzWzBdKTsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wYXRob3BzL1NrUGF0aE9wc0RlYnVnLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wYXRob3BzL1NrUGF0aE9wc0RlYnVnLmNwcAppbmRleCA3Yzg5NzkyLi43ZGUzMGU4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcGF0aG9wcy9Ta1BhdGhPcHNEZWJ1Zy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tQYXRoT3BzRGVidWcuY3BwCkBAIC0yODM5LDcgKzI4MzksMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hvd1BhdGhDb250b3Vycyhjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IGNoYXIqIHBhdGhOYW1lKSB7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmVyYiwgcHRzLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUocGF0aCkpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgIGNhc2UgU2tQYXRoVmVyYjo6a01vdmU6CiAgICAgICAgICAgICAgICAgU2tEZWJ1Z2YoIiAgICAlcy5tb3ZlVG8oIiwgcGF0aE5hbWUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tQYXRoT3BzVGlnaHRCb3VuZHMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BhdGhvcHMvU2tQYXRoT3BzVGlnaHRCb3VuZHMuY3BwCmluZGV4IGQxMWIyOTIuLmY1MTAxNTQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wYXRob3BzL1NrUGF0aE9wc1RpZ2h0Qm91bmRzLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcGF0aG9wcy9Ta1BhdGhPcHNUaWdodEJvdW5kcy5jcHAKQEAgLTExLDcgKzExLDEyIEBACiBib29sIFRpZ2h0Qm91bmRzKGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tSZWN0KiByZXN1bHQpIHsKICAgICBTa1JlY3QgbW92ZUJvdW5kcyA9IHsgU0tfU2NhbGFyTWF4LCBTS19TY2FsYXJNYXgsIFNLX1NjYWxhck1pbiwgU0tfU2NhbGFyTWluIH07CiAgICAgYm9vbCB3ZWxsQmVoYXZlZCA9IHRydWU7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdmVyYiwgcHRzLCB3XSA6IFNrUGF0aFByaXY6Okl0ZXJhdGUocGF0aCkpIHsKKyNlbHNlCisgICAgZm9yIChhdXRvIGl0ZW0gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisgICAgICAgIFNUUlVDVFVSRURfQklORElOR18zKHZlcmIsIHB0cywgdywgc3RkOjptb3ZlKGl0ZW0pKTsKKyNlbmRpZgogICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKICAgICAgICAgICAgIGNhc2UgU2tQYXRoVmVyYjo6a01vdmU6CiAgICAgICAgICAgICAgICAgbW92ZUJvdW5kcy5mTGVmdCA9IHN0ZDo6bWluKG1vdmVCb3VuZHMuZkxlZnQsIHB0c1swXS5mWCk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcG9ydHMvU2tGb250SG9zdF9GcmVlVHlwZV9jb21tb24uY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3BvcnRzL1NrRm9udEhvc3RfRnJlZVR5cGVfY29tbW9uLmNwcAppbmRleCBlMjA0YzgzLi43ODQ3ODNhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvcG9ydHMvU2tGb250SG9zdF9GcmVlVHlwZV9jb21tb24uY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9wb3J0cy9Ta0ZvbnRIb3N0X0ZyZWVUeXBlX2NvbW1vbi5jcHAKQEAgLTM0NCw5ICszNDQsMTAgQEAKICAgICBzd2l0Y2ggKGNvbG9yVHlwZSkgewogICAgICAgICBjYXNlIGtBbHBoYV84X1NrQ29sb3JUeXBlOgogICAgICAgICAgICAgcmV0dXJuIFNrTWFzazo6a0E4X0Zvcm1hdDsKLSAgICAgICAgY2FzZSBrTjMyX1NrQ29sb3JUeXBlOgotICAgICAgICAgICAgcmV0dXJuIFNrTWFzazo6a0FSR0IzMl9Gb3JtYXQ7CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoY29sb3JUeXBlID09IGtOMzJfU2tDb2xvclR5cGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2tNYXNrOjprQVJHQjMyX0Zvcm1hdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNrREVCVUdGQUlMKCJ1bnN1cHBvcnRlZCBTa0JpdG1hcDo6Q29uZmlnIik7CiAgICAgICAgICAgICByZXR1cm4gU2tNYXNrOjprQThfRm9ybWF0OwogICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9zaGFkZXJzL1NrQ29sb3JGaWx0ZXJTaGFkZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tDb2xvckZpbHRlclNoYWRlci5jcHAKaW5kZXggOTNlMzljNi4uODY0NzZiOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tDb2xvckZpbHRlclNoYWRlci5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tDb2xvckZpbHRlclNoYWRlci5jcHAKQEAgLTEwMSw4ICsxMDEsMTMgQEAKICAgICAvLyBUT0RPIEkgZ3Vlc3MsIGJ1dCBpdCBzaG91bGRuJ3QgY29tZSB1cCBhcyB1c2VkIHRvZGF5LgogICAgIFNrQVNTRVJUKGZBbHBoYSA9PSAxLjBmKTsKIAorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdWNjZXNzLCBmcF0gPSBmRmlsdGVyLT5hc0ZyYWdtZW50UHJvY2Vzc29yKHN0ZDo6bW92ZShzaGFkZXJGUCksIGFyZ3MuZkNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncy5mRHN0Q29sb3JJbmZvKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoc3VjY2VzcywgZnAsIGZGaWx0ZXItPmFzRnJhZ21lbnRQcm9jZXNzb3Ioc3RkOjptb3ZlKHNoYWRlckZQKSwgYXJncy5mQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLmZEc3RDb2xvckluZm8pKTsKKyNlbmRpZgogICAgIC8vIElmIHRoZSBmaWx0ZXIgRlAgY291bGQgbm90IGJlIGNyZWF0ZWQsIHdlIHN0aWxsIHdhbnQgdG8gcmV0dXJuIHRoZSBzaGFkZXIgRlAsIHNvIGNoZWNraW5nCiAgICAgLy8gc3VjY2VzcyBjYW4gYmUgb21pdHRlZCBoZXJlLgogICAgIHJldHVybiBzdGQ6Om1vdmUoZnApOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tJbWFnZVNoYWRlci5jcHAgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmNwcAppbmRleCA2NWYzN2E3Li5jNThkMDcwIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmNwcApAQCAtMTk0LDcgKzE5NCwxMiBAQAogICAgICAgICAgICAge1NrRmlsdGVyTW9kZTo6a0xpbmVhciwgIFNrTWlwbWFwTW9kZTo6a05vbmV9LCAgICAvLyBsZWdhY3kgTG93CiAgICAgICAgICAgICB7U2tGaWx0ZXJNb2RlOjprTGluZWFyLCAgU2tNaXBtYXBNb2RlOjprTmVhcmVzdH0sIC8vIGxlZ2FjeSBNZWRpdW0KICAgICAgICAgfTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGZvciAoYXV0byBbZiwgbV0gOiBzdXBwb3J0ZWQpIHsKKyNlbHNlCisgICAgICAgIGZvciAoYXV0byBpdGVtIDogc3VwcG9ydGVkKSB7CisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihmLCBtLCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoc2FtcGxpbmcuZmlsdGVyID09IGYgJiYgc2FtcGxpbmcubWlwbWFwID09IG0pIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTY5Myw3ICs2OTgsMTEgQEAKICAgICBpZiAoIWFjY2VzcykgewogICAgICAgICByZXR1cm4ge307CiAgICAgfQorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFt1cHBlciwgdXBwZXJJbnZdID0gYWNjZXNzLT5sZXZlbCgpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih1cHBlciwgdXBwZXJJbnYsIGFjY2Vzcy0+bGV2ZWwoKSk7CisjZW5kaWYKICAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgYSBjb29yZFNoYWRlciwgdGhlbiB3ZSBjYW4ndCBtYWtlIGd1ZXNzZXMgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBtYXRyaXguCiAgICAgaWYgKCFzYW1wbGluZy51c2VDdWJpYyAmJiAhY29vcmRTaGFkZXIpIHsKICAgICAgICAgLy8gVE9ETzogY2FuIHR3ZWFrX3NhbXBsaW5nIHNvbWV0aW1lcyBmb3IgY3ViaWMgdG9vIHdoZW4gQj0wCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmggYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta0ltYWdlU2hhZGVyLmgKaW5kZXggY2Q2OTg0MC4uYmE3OGI4YyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tJbWFnZVNoYWRlci5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9zaGFkZXJzL1NrSW1hZ2VTaGFkZXIuaApAQCAtMTIsNiArMTIsMTYgQEAKICNpbmNsdWRlICJzcmMvc2hhZGVycy9Ta0JpdG1hcFByb2NTaGFkZXIuaCIKICNpbmNsdWRlICJzcmMvc2hhZGVycy9Ta1NoYWRlckJhc2UuaCIKIAorI2lmZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAordGVtcGxhdGUgPD4KK3N0cnVjdCBDb2VyY2VyVG9UdXBsZTxzdGQ6OnBhaXI8U2tQaXhtYXAsIFNrTWF0cml4Pj4geworICBzdGF0aWMgc3RkOjp0dXBsZTxTa1BpeG1hcCwgU2tNYXRyaXg+IENvZXJjZSgKKyAgICAgIHN0ZDo6cGFpcjxTa1BpeG1hcCwgU2tNYXRyaXg+JiYgdCkgeworICAgIHJldHVybiBzdGQ6Om1ha2VfdHVwbGUodC5maXJzdCwgdC5zZWNvbmQpOworICB9Cit9OworI2VuZGlmCisKIGNsYXNzIFNrSW1hZ2VTaGFkZXIgOiBwdWJsaWMgU2tTaGFkZXJCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc2tfc3A8U2tTaGFkZXI+IE1ha2Uoc2tfc3A8U2tJbWFnZT4sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta1BpY3R1cmVTaGFkZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvU2tQaWN0dXJlU2hhZGVyLmNwcAppbmRleCBhYWVhN2ViLi4zYTNmZThlIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2hhZGVycy9Ta1BpY3R1cmVTaGFkZXIuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9zaGFkZXJzL1NrUGljdHVyZVNoYWRlci5jcHAKQEAgLTQxNyw3ICs0MTcsMTEgQEAKICAgICAgICAgaWYgKCFpbWFnZSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGF1dG8gW3YsIGN0XSA9IGFzX0lCKGltYWdlKS0+YXNWaWV3KGN0eCwgR3JNaXBtYXBwZWQ6OmtObyk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMih2LCBjdCwgYXNfSUIoaW1hZ2UpLT5hc1ZpZXcoY3R4LCBHck1pcG1hcHBlZDo6a05vKSk7CisjZW5kaWYKICAgICAgICAgdmlldyA9IHN0ZDo6bW92ZSh2KTsKICAgICAgICAgcHJvdmlkZXItPmFzc2lnblVuaXF1ZUtleVRvUHJveHkoa2V5LCB2aWV3LmFzVGV4dHVyZVByb3h5KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9zaGFkZXJzL2dyYWRpZW50cy9Ta1N3ZWVwR3JhZGllbnQuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvZ3JhZGllbnRzL1NrU3dlZXBHcmFkaWVudC5jcHAKaW5kZXggYTBmMDA3MC4uNDA2MzQ4MCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvZ3JhZGllbnRzL1NrU3dlZXBHcmFkaWVudC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3NoYWRlcnMvZ3JhZGllbnRzL1NrU3dlZXBHcmFkaWVudC5jcHAKQEAgLTQyLDcgKzQyLDExIEBACiAKICAgICBjb25zdCBhdXRvIHRCaWFzICA9IGJ1ZmZlci5yZWFkU2NhbGFyKCksCiAgICAgICAgICAgICAgICB0U2NhbGUgPSBidWZmZXIucmVhZFNjYWxhcigpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtzdGFydEFuZ2xlLCBlbmRBbmdsZV0gPSBhbmdsZXNfZnJvbV90X2NvZWZmKHRCaWFzLCB0U2NhbGUpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzdGFydEFuZ2xlLCBlbmRBbmdsZSwgYW5nbGVzX2Zyb21fdF9jb2VmZih0QmlhcywgdFNjYWxlKSk7CisjZW5kaWYKIAogICAgIHJldHVybiBTa0dyYWRpZW50U2hhZGVyOjpNYWtlU3dlZXAoY2VudGVyLngoKSwgY2VudGVyLnkoKSwgZGVzYy5mQ29sb3JzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGRlc2MuZkNvbG9yU3BhY2UpLCBkZXNjLmZQb3MsIGRlc2MuZkNvdW50LApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTEFuYWx5c2lzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xBbmFseXNpcy5jcHAKaW5kZXggNmUwYzlmYy4uMWRiOTNlNiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTEFuYWx5c2lzLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMQW5hbHlzaXMuY3BwCkBAIC00ODcsNyArNDg3LDExIEBACiAgICAgICAgICAgICBjb25zdCBGb3JTdGF0ZW1lbnQmIGYgPSBzLmFzPEZvclN0YXRlbWVudD4oKTsKICAgICAgICAgICAgIFNrQVNTRVJUKGYuaW5pdGlhbGl6ZXIoKSAmJiBmLmluaXRpYWxpemVyKCktPmlzPFZhckRlY2xhcmF0aW9uPigpKTsKICAgICAgICAgICAgIGNvbnN0IFZhcmlhYmxlKiB2YXIgPSAmZi5pbml0aWFsaXplcigpLT5hczxWYXJEZWNsYXJhdGlvbj4oKS52YXIoKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtpdGVyLCBpbnNlcnRlZF0gPSBmTG9vcEluZGljZXMuaW5zZXJ0KHZhcik7CisjZWxzZQorICAgICAgICAgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoaXRlciwgaW5zZXJ0ZWQsIGZMb29wSW5kaWNlcy5pbnNlcnQodmFyKSk7CisjZW5kaWYKICAgICAgICAgICAgIFNrQVNTRVJUKGluc2VydGVkKTsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdGhpcy0+dmlzaXRTdGF0ZW1lbnQoKmYuc3RhdGVtZW50KCkpOwogICAgICAgICAgICAgZkxvb3BJbmRpY2VzLmVyYXNlKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTElubGluZXIuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTElubGluZXIuY3BwCmluZGV4IGNhMTdkNWEuLjkyOWRjMzEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xJbmxpbmVyLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMSW5saW5lci5jcHAKQEAgLTEwNDgsNyArMTA0OCwxMSBAQAogCiBib29sIElubGluZXI6OmNhbmRpZGF0ZUNhbkJlSW5saW5lZChjb25zdCBJbmxpbmVDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgSW5saW5hYmlsaXR5Q2FjaGUqIGNhY2hlKSB7CiAgICAgY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY0RlY2wgPSBjYW5kaWRhdGVfZnVuYyhjYW5kaWRhdGUpOworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtpdGVyLCB3YXNJbnNlcnRlZF0gPSBjYWNoZS0+aW5zZXJ0KHsmZnVuY0RlY2wsIGZhbHNlfSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIHdhc0luc2VydGVkLCBjYWNoZS0+aW5zZXJ0KHsmZnVuY0RlY2wsIGZhbHNlfSkpOworI2VuZGlmCiAgICAgaWYgKHdhc0luc2VydGVkKSB7CiAgICAgICAgIC8vIFJlY3Vyc2lvbiBpcyBmb3JiaWRkZW4gaGVyZSB0byBhdm9pZCBhbiBpbmZpbml0ZSBkZWF0aCBzcGlyYWwgb2YgaW5saW5pbmcuCiAgICAgICAgIGl0ZXItPnNlY29uZCA9IHRoaXMtPmlzU2FmZVRvSW5saW5lKGZ1bmNEZWNsLmRlZmluaXRpb24oKSkgJiYKQEAgLTEwNTksNyArMTA2MywxMSBAQAogfQogCiBpbnQgSW5saW5lcjo6Z2V0RnVuY3Rpb25TaXplKGNvbnN0IEZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmNEZWNsLCBGdW5jdGlvblNpemVDYWNoZSogY2FjaGUpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgd2FzSW5zZXJ0ZWRdID0gY2FjaGUtPmluc2VydCh7JmZ1bmNEZWNsLCAwfSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIHdhc0luc2VydGVkLCBjYWNoZS0+aW5zZXJ0KHsmZnVuY0RlY2wsIDB9KSk7CisjZW5kaWYKICAgICBpZiAod2FzSW5zZXJ0ZWQpIHsKICAgICAgICAgaXRlci0+c2Vjb25kID0gQW5hbHlzaXM6Ok5vZGVDb3VudFVwVG9MaW1pdCgqZnVuY0RlY2wuZGVmaW5pdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHRpbmdzKCkuZklubGluZVRocmVzaG9sZCk7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMTW9kaWZpZXJzUG9vbC5oIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTE1vZGlmaWVyc1Bvb2wuaAppbmRleCBlOWI4NjNjLi41MjM3Nzc2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMTW9kaWZpZXJzUG9vbC5oCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xNb2RpZmllcnNQb29sLmgKQEAgLTIxLDcgKzIxLDEzIEBACiBjbGFzcyBNb2RpZmllcnNQb29sIHsKIHB1YmxpYzoKICAgICBjb25zdCBNb2RpZmllcnMqIGFkZChjb25zdCBNb2RpZmllcnMmIG1vZGlmaWVycykgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbaXRlciwgd2FzSW5zZXJ0ZWRdID0gZk1vZGlmaWVyc1NldC5pbnNlcnQobW9kaWZpZXJzKTsKKyNlbHNlCisgICAgICAgIGF1dG8gcGFpciA9IGZNb2RpZmllcnNTZXQuaW5zZXJ0KG1vZGlmaWVycyk7CisgICAgICAgIGF1dG8gaXRlciA9IHBhaXIuZmlyc3Q7CisgICAgICAgIGJvb2wgd2FzSW5zZXJ0ZWQgPSBwYWlyLnNlY29uZDsKKyNlbmRpZgogICAgICAgICByZXR1cm4gJippdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTFBvb2wuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvU2tTTFBvb2wuY3BwCmluZGV4IGI0ZDJiM2YuLmRhN2Y0MGIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL1NrU0xQb29sLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9Ta1NMUG9vbC5jcHAKQEAgLTksNyArOSw5IEBACiAKICNpbmNsdWRlICJpbmNsdWRlL3ByaXZhdGUvU2tTTERlZmluZXMuaCIKIAorI2lmbmRlZiBTVEFSQk9BUkQgLy8gQXZvaWQgcmVkZWZpbmluZyBWTE9HIGZyb20gYmFzZS9sb2dnaW5nLmgKICNkZWZpbmUgVkxPRyguLi4pIC8vIHByaW50ZihfX1ZBX0FSR1NfXykKKyNlbmRpZgogCiBuYW1lc3BhY2UgU2tTTCB7CiAKQEAgLTMyLDEzICszNCwxNyBAQAogICAgIGZNZW1Qb29sLT5yZXBvcnRMZWFrcygpOwogICAgIFNrQVNTRVJUKGZNZW1Qb29sLT5pc0VtcHR5KCkpOwogCisjaWZuZGVmIFNUQVJCT0FSRAogICAgIFZMT0coIkRFTEVURSBQb29sOjB4JTAxNmxsWFxuIiwgKHVpbnQ2NF90KWZNZW1Qb29sLmdldCgpKTsKKyNlbmRpZgogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8UG9vbD4gUG9vbDo6Q3JlYXRlKCkgewogICAgIGF1dG8gcG9vbCA9IHN0ZDo6dW5pcXVlX3B0cjxQb29sPihuZXcgUG9vbCk7CiAgICAgcG9vbC0+Zk1lbVBvb2wgPSBNZW1vcnlQb29sOjpNYWtlKC8qcHJlYWxsb2NTaXplPSovNjU1MzYsIC8qbWluQWxsb2NTaXplPSovMzI3NjgpOworI2lmbmRlZiBTVEFSQk9BUkQKICAgICBWTE9HKCJDUkVBVEUgUG9vbDoweCUwMTZsbFhcbiIsICh1aW50NjRfdClwb29sLT5mTWVtUG9vbC5nZXQoKSk7CisjZW5kaWYKICAgICByZXR1cm4gcG9vbDsKIH0KIApAQCAtNDcsMTQgKzUzLDE4IEBACiB9CiAKIHZvaWQgUG9vbDo6YXR0YWNoVG9UaHJlYWQoKSB7CisjaWZuZGVmIFNUQVJCT0FSRAogICAgIFZMT0coIkFUVEFDSCBQb29sOjB4JTAxNmxsWFxuIiwgKHVpbnQ2NF90KWZNZW1Qb29sLmdldCgpKTsKKyNlbmRpZgogICAgIFNrQVNTRVJUKGdldF90aHJlYWRfbG9jYWxfbWVtb3J5X3Bvb2woKSA9PSBudWxscHRyKTsKICAgICBzZXRfdGhyZWFkX2xvY2FsX21lbW9yeV9wb29sKGZNZW1Qb29sLmdldCgpKTsKIH0KIAogdm9pZCBQb29sOjpkZXRhY2hGcm9tVGhyZWFkKCkgewogICAgIE1lbW9yeVBvb2wqIG1lbVBvb2wgPSBnZXRfdGhyZWFkX2xvY2FsX21lbW9yeV9wb29sKCk7CisjaWZuZGVmIFNUQVJCT0FSRAogICAgIFZMT0coIkRFVEFDSCBQb29sOjB4JTAxNmxsWFxuIiwgKHVpbnQ2NF90KW1lbVBvb2wpOworI2VuZGlmCiAgICAgU2tBU1NFUlQobWVtUG9vbCA9PSBmTWVtUG9vbC5nZXQoKSk7CiAgICAgbWVtUG9vbC0+cmVzZXRTY3JhdGNoU3BhY2UoKTsKICAgICBzZXRfdGhyZWFkX2xvY2FsX21lbW9yeV9wb29sKG51bGxwdHIpOwpAQCAtNjUsMTMgKzc1LDE3IEBACiAgICAgTWVtb3J5UG9vbCogbWVtUG9vbCA9IGdldF90aHJlYWRfbG9jYWxfbWVtb3J5X3Bvb2woKTsKICAgICBpZiAobWVtUG9vbCkgewogICAgICAgICB2b2lkKiBwdHIgPSBtZW1Qb29sLT5hbGxvY2F0ZShzaXplKTsKKyNpZm5kZWYgU1RBUkJPQVJECiAgICAgICAgIFZMT0coIkFMTE9DICBQb29sOjB4JTAxNmxsWCAgMHglMDE2bGxYXG4iLCAodWludDY0X3QpbWVtUG9vbCwgKHVpbnQ2NF90KXB0cik7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIHB0cjsKICAgICB9CiAKICAgICAvLyBUaGVyZSdzIG5vIHBvb2wgYXR0YWNoZWQuIEFsbG9jYXRlIG1lbW9yeSB1c2luZyB0aGUgc3lzdGVtIGFsbG9jYXRvci4KICAgICB2b2lkKiBwdHIgPSA6Om9wZXJhdG9yIG5ldyhzaXplKTsKKyNpZm5kZWYgU1RBUkJPQVJECiAgICAgVkxPRygiQUxMT0MgIFBvb2w6X19fX19fX19fX19fX19fX19fICAweCUwMTZsbFhcbiIsICh1aW50NjRfdClwdHIpOworI2VuZGlmCiAgICAgcmV0dXJuIHB0cjsKIH0KIApAQCAtNzksMTMgKzkzLDE3IEBACiAgICAgLy8gSXMgYSBwb29sIGF0dGFjaGVkPwogICAgIE1lbW9yeVBvb2wqIG1lbVBvb2wgPSBnZXRfdGhyZWFkX2xvY2FsX21lbW9yeV9wb29sKCk7CiAgICAgaWYgKG1lbVBvb2wpIHsKKyNpZm5kZWYgU1RBUkJPQVJECiAgICAgICAgIFZMT0coIkZSRUUgICBQb29sOjB4JTAxNmxsWCAgMHglMDE2bGxYXG4iLCAodWludDY0X3QpbWVtUG9vbCwgKHVpbnQ2NF90KXB0cik7CisjZW5kaWYKICAgICAgICAgbWVtUG9vbC0+cmVsZWFzZShwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWZuZGVmIFNUQVJCT0FSRAogICAgIC8vIFRoZXJlJ3Mgbm8gcG9vbCBhdHRhY2hlZC4gRnJlZSBpdCB1c2luZyB0aGUgc3lzdGVtIGFsbG9jYXRvci4KICAgICBWTE9HKCJGUkVFICAgUG9vbDpfX19fX19fX19fX19fX19fX18gIDB4JTAxNmxsWFxuIiwgKHVpbnQ2NF90KXB0cik7CisjZW5kaWYKICAgICA6Om9wZXJhdG9yIGRlbGV0ZShwdHIpOwogfQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9hbmFseXNpcy9Ta1NMQ2hlY2tQcm9ncmFtVW5yb2xsZWRTaXplLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2FuYWx5c2lzL1NrU0xDaGVja1Byb2dyYW1VbnJvbGxlZFNpemUuY3BwCmluZGV4IDE2ZDI4ZGEuLmRhYjcyODAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2FuYWx5c2lzL1NrU0xDaGVja1Byb2dyYW1VbnJvbGxlZFNpemUuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2FuYWx5c2lzL1NrU0xDaGVja1Byb2dyYW1VbnJvbGxlZFNpemUuY3BwCkBAIC01NSw3ICs1NSwxMyBAQAogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBmdW5jdGlvbi1zaXplIGNhY2hlIG1hcCBmaXJzdC4gV2UgZG9uJ3QgbmVlZCB0byB2aXNpdCB0aGlzIGZ1bmN0aW9uIGlmCiAgICAgICAgICAgICAgICAgLy8gd2UgYWxyZWFkeSBwcm9jZXNzZWQgaXQgYmVmb3JlLgogICAgICAgICAgICAgICAgIGNvbnN0IEZ1bmN0aW9uRGVjbGFyYXRpb24qIGRlY2wgPSAmcGUuYXM8RnVuY3Rpb25EZWZpbml0aW9uPigpLmRlY2xhcmF0aW9uKCk7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgICAgICAgICAgICAgIGF1dG8gW2l0ZXIsIHdhc0luc2VydGVkXSA9IGZGdW5jdGlvbkNvc3RNYXAuaW5zZXJ0KHtkZWNsLCBrVW5rbm93bkNvc3R9KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgYXV0byBwYWlyID0gZkZ1bmN0aW9uQ29zdE1hcC5pbnNlcnQoe2RlY2wsIGtVbmtub3duQ29zdH0pOworICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICAgICAgYm9vbCB3YXNJbnNlcnRlZCA9IHBhaXIuc2Vjb25kOworI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKCF3YXNJbnNlcnRlZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgdGhpcyBmdW5jdGlvbiBpbiBvdXIgbWFwLiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGl0IGFnYWluLgogICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+c2Vjb25kID09IGtVbmtub3duQ29zdCkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2NvZGVnZW4vU2tTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggMTVjNTA3Ni4uMWVhOGFjMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCkBAIC0yMzksNyArMjM5LDExIEBACiAgICAgICAgICAgICB0aGlzLT53cml0ZSgiJiIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChvdXRWYXJzW2luZGV4XSkgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgICAgIGF1dG8gW2l0ZXIsIGRpZEluc2VydF0gPSB3cml0dGVuVmFycy5pbnNlcnQob3V0VmFyc1tpbmRleF0tPnZhcmlhYmxlKCkpOworI2Vsc2UKKyAgICAgICAgICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIGRpZEluc2VydCwgd3JpdHRlblZhcnMuaW5zZXJ0KG91dFZhcnNbaW5kZXhdLT52YXJpYWJsZSgpKSk7CisjZW5kaWYKICAgICAgICAgICAgIGlmIChkaWRJbnNlcnQpIHsKICAgICAgICAgICAgICAgICB0aGlzLT53cml0ZSgiICIpOwogICAgICAgICAgICAgICAgIGZJZ25vcmVWYXJpYWJsZVJlZmVyZW5jZU1vZGlmaWVycyA9IHRydWU7CkBAIC00NTIsNyArNDU2LDExIEBACiAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkgJiYgdHlwZS5yb3dzKCkgPT0gdHlwZS5jb2x1bW5zKCkpIHsKICAgICAgICAgICAgIC8vIEluamVjdCB0aGUgY29ycmVjdCBwb2x5ZmlsbCBiYXNlZCBvbiB0aGUgbWF0cml4IHNpemUuCiAgICAgICAgICAgICBhdXRvIG5hbWUgPSBTdHJpbmc6OnByaW50ZigibWF0JWRfaW52ZXJzZSIsIHR5cGUuY29sdW1ucygpKTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgICAgICBhdXRvIFtpdGVyLCBkaWRJbnNlcnRdID0gZldyaXR0ZW5JbnRyaW5zaWNzLmluc2VydChuYW1lKTsKKyNlbHNlCisgICAgICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpdGVyLCBkaWRJbnNlcnQsIGZXcml0dGVuSW50cmluc2ljcy5pbnNlcnQobmFtZSkpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoZGlkSW5zZXJ0KSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLnJvd3MoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CkBAIC0xMDQzLDcgKzEwNTEsMTEgQEAKICAgICB9CiAKICAgICAvLyBJZiBhIGhlbHBlci1tZXRob2QgaGFzIGFscmVhZHkgYmVlbiBzeW50aGVzaXplZCwgd2UgZG9uJ3QgbmVlZCB0byBzeW50aGVzaXplIGl0IGFnYWluLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtpdGVyLCBuZXdseUNyZWF0ZWRdID0gZkhlbHBlcnMuaW5zZXJ0KG5hbWUpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpdGVyLCBuZXdseUNyZWF0ZWQsIGZIZWxwZXJzLmluc2VydChuYW1lKSk7CisjZW5kaWYKICAgICBpZiAoIW5ld2x5Q3JlYXRlZCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CkBAIC0xMTQ2LDcgKzExNTgsMTEgQEAKICAgICBTdHJpbmcgb3V0VHlwZU5hbWUgPSB0aGlzLT50eXBlTmFtZShvdXRUeXBlKTsKIAogICAgIFN0cmluZyBuYW1lID0gImFycmF5X29mXyIgKyBvdXRUeXBlTmFtZSArICJfZnJvbV8iICsgaW5UeXBlTmFtZTsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgZGlkSW5zZXJ0XSA9IGZIZWxwZXJzLmluc2VydChuYW1lKTsKKyNlbHNlCisgICAgU1RSVUNUVVJFRF9CSU5ESU5HXzIoaXRlciwgZGlkSW5zZXJ0LCBmSGVscGVycy5pbnNlcnQobmFtZSkpOworI2VuZGlmCiAgICAgaWYgKGRpZEluc2VydCkgewogICAgICAgICBmRXh0cmFGdW5jdGlvbnMucHJpbnRmKFIiKAogdGVtcGxhdGUgPHNpemVfdCBOPgpAQCAtMTM4OCw3ICsxNDA0LDExIEBACiAKICAgICBTdHJpbmcga2V5ID0gIk1hdHJpeCAqPSAiICsgdGhpcy0+dHlwZU5hbWUobGVmdCkgKyAiOiIgKyB0aGlzLT50eXBlTmFtZShyaWdodCk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgd2FzSW5zZXJ0ZWRdID0gZkhlbHBlcnMuaW5zZXJ0KGtleSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIHdhc0luc2VydGVkLCBmSGVscGVycy5pbnNlcnQoa2V5KSk7CisjZW5kaWYKICAgICBpZiAod2FzSW5zZXJ0ZWQpIHsKICAgICAgICAgZkV4dHJhRnVuY3Rpb25zLnByaW50ZigidGhyZWFkICVzJiBvcGVyYXRvcio9KHRocmVhZCAlcyYgbGVmdCwgdGhyZWFkIGNvbnN0ICVzJiByaWdodCkge1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbGVmdCA9IGxlZnQgKiByaWdodDtcbiIKQEAgLTE0MDcsNyArMTQyNywxMSBAQAogCiAgICAgU3RyaW5nIGtleSA9ICJNYXRyaXggPT0gIiArIHRoaXMtPnR5cGVOYW1lKGxlZnQpICsgIjoiICsgdGhpcy0+dHlwZU5hbWUocmlnaHQpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2l0ZXIsIHdhc0luc2VydGVkXSA9IGZIZWxwZXJzLmluc2VydChrZXkpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpdGVyLCB3YXNJbnNlcnRlZCwgZkhlbHBlcnMuaW5zZXJ0KGtleSkpOworI2VuZGlmCiAgICAgaWYgKHdhc0luc2VydGVkKSB7CiAgICAgICAgIGZFeHRyYUZ1bmN0aW9uUHJvdG90eXBlcy5wcmludGYoUiIoCiB0aHJlYWQgYm9vbCBvcGVyYXRvcj09KGNvbnN0ICVzIGxlZnQsIGNvbnN0ICVzIHJpZ2h0KTsKQEAgLTE0NDQsNyArMTQ2OCwxMSBAQAogCiAgICAgU3RyaW5nIGtleSA9ICJNYXRyaXggLyAiICsgdGhpcy0+dHlwZU5hbWUodHlwZSk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgd2FzSW5zZXJ0ZWRdID0gZkhlbHBlcnMuaW5zZXJ0KGtleSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIHdhc0luc2VydGVkLCBmSGVscGVycy5pbnNlcnQoa2V5KSk7CisjZW5kaWYKICAgICBpZiAod2FzSW5zZXJ0ZWQpIHsKICAgICAgICAgU3RyaW5nIHR5cGVOYW1lID0gdGhpcy0+dHlwZU5hbWUodHlwZSk7CiAKQEAgLTE0NzUsNyArMTUwMywxMSBAQAogICAgIC8vIElmIHRoZSBhcnJheSdzIGNvbXBvbmVudCB0eXBlIG5lZWRzIGEgaGVscGVyIGFzIHdlbGwsIHdlIG5lZWQgdG8gZW1pdCB0aGF0IG9uZSBmaXJzdC4KICAgICB0aGlzLT53cml0ZUVxdWFsaXR5SGVscGVycyh0eXBlLmNvbXBvbmVudFR5cGUoKSwgdHlwZS5jb21wb25lbnRUeXBlKCkpOwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGF1dG8gW2l0ZXIsIHdhc0luc2VydGVkXSA9IGZIZWxwZXJzLmluc2VydCgiQXJyYXlFcXVhbGl0eSBbXSIpOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpdGVyLCB3YXNJbnNlcnRlZCwgZkhlbHBlcnMuaW5zZXJ0KCJBcnJheUVxdWFsaXR5IFtdIikpOworI2VuZGlmCiAgICAgaWYgKHdhc0luc2VydGVkKSB7CiAgICAgICAgIGZFeHRyYUZ1bmN0aW9uUHJvdG90eXBlcy53cml0ZVRleHQoUiIoCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCBzaXplX3QgTj4KQEAgLTE1MDYsNyArMTUzOCwxMSBAQAogICAgIFNrQVNTRVJUKHR5cGUuaXNTdHJ1Y3QoKSk7CiAgICAgU3RyaW5nIGtleSA9ICJTdHJ1Y3RFcXVhbGl0eSAiICsgdGhpcy0+dHlwZU5hbWUodHlwZSk7CiAKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgd2FzSW5zZXJ0ZWRdID0gZkhlbHBlcnMuaW5zZXJ0KGtleSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIHdhc0luc2VydGVkLCBmSGVscGVycy5pbnNlcnQoa2V5KSk7CisjZW5kaWYKICAgICBpZiAod2FzSW5zZXJ0ZWQpIHsKICAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBzdHJ1Y3QncyBmaWVsZHMgbmVlZHMgYSBoZWxwZXIgYXMgd2VsbCwgd2UgbmVlZCB0byBlbWl0IHRoYXQgb25lIGZpcnN0LgogICAgICAgICBmb3IgKGNvbnN0IFR5cGU6OkZpZWxkJiBmaWVsZCA6IHR5cGUuZmllbGRzKCkpIHsKQEAgLTIzOTEsNyArMjQyNywxMyBAQAogCiB2b2lkIE1ldGFsQ29kZUdlbmVyYXRvcjo6dmlzaXRHbG9iYWxTdHJ1Y3QoR2xvYmFsU3RydWN0VmlzaXRvciogdmlzaXRvcikgewogICAgIC8vIFZpc2l0IHRoZSBpbnRlcmZhY2UgYmxvY2tzLgorI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBmb3IgKGNvbnN0IGF1dG8mIFtpbnRlcmZhY2VUeXBlLCBpbnRlcmZhY2VOYW1lXSA6IGZJbnRlcmZhY2VCbG9ja05hbWVNYXApIHsKKyNlbHNlCisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogZkludGVyZmFjZUJsb2NrTmFtZU1hcCkgeworICAgICAgICBhdXRvJiBpbnRlcmZhY2VUeXBlID0gaXRlbS5maXJzdDsKKyAgICAgICAgYXV0byYgaW50ZXJmYWNlTmFtZSA9IGl0ZW0uc2Vjb25kOworI2VuZGlmCiAgICAgICAgIHZpc2l0b3ItPnZpc2l0SW50ZXJmYWNlQmxvY2soKmludGVyZmFjZVR5cGUsIGludGVyZmFjZU5hbWUpOwogICAgIH0KICAgICBmb3IgKGNvbnN0IFByb2dyYW1FbGVtZW50KiBlbGVtZW50IDogZlByb2dyYW0uZWxlbWVudHMoKSkgewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMU1BJUlZDb2RlR2VuZXJhdG9yLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL2NvZGVnZW4vU2tTTFNQSVJWQ29kZUdlbmVyYXRvci5jcHAKaW5kZXggY2MwNmRhMC4uZjYxNzIyMiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvY29kZWdlbi9Ta1NMU1BJUlZDb2RlR2VuZXJhdG9yLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC9jb2RlZ2VuL1NrU0xTUElSVkNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xMzAxLDcgKzEzMDEsMTEgQEAKICAgICB9CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UndmUgYWxyZWFkeSBzeW50aGVzaXplZCB0aGlzIHZlY3RvciBjb25zdGFudC4KKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgYXV0byBbaXRlciwgbmV3bHlDcmVhdGVkXSA9IGZWZWN0b3JDb25zdGFudHMuaW5zZXJ0KHtrZXksIChTcHZJZCktMX0pOworI2Vsc2UKKyAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihpdGVyLCBuZXdseUNyZWF0ZWQsIGZWZWN0b3JDb25zdGFudHMuaW5zZXJ0KHtrZXksIChTcHZJZCktMX0pKTsKKyNlbmRpZgogICAgIGlmIChuZXdseUNyZWF0ZWQpIHsKICAgICAgICAgLy8gRW1pdCBhbiBPcENvbnN0YW50Q29tcG9zaXRlIGluc3RydWN0aW9uIGZvciB0aGlzIGNvbnN0YW50LgogICAgICAgICBTcHZJZCByZXN1bHQgPSB0aGlzLT5uZXh0SWQoJnR5cGUpOwpAQCAtMjkxNiw3ICsyOTIwLDExIEBACiAgICAgfQogCiAgICAgU1BJUlZOdW1iZXJDb25zdGFudCBrZXl7dmFsdWVCaXRzLCBsLnR5cGUoKS5udW1iZXJLaW5kKCl9OworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICBhdXRvIFtpdGVyLCBuZXdseUNyZWF0ZWRdID0gZk51bWJlckNvbnN0YW50cy5pbnNlcnQoe2tleSwgKFNwdklkKS0xfSk7CisjZWxzZQorICAgIFNUUlVDVFVSRURfQklORElOR18yKGl0ZXIsIG5ld2x5Q3JlYXRlZCwgZk51bWJlckNvbnN0YW50cy5pbnNlcnQoe2tleSwgKFNwdklkKS0xfSkpOworI2VuZGlmCiAgICAgaWYgKG5ld2x5Q3JlYXRlZCkgewogICAgICAgICBTcHZJZCByZXN1bHQgPSB0aGlzLT5uZXh0SWQobnVsbHB0cik7CiAgICAgICAgIGl0ZXItPnNlY29uZCA9IHJlc3VsdDsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL3RyYW5zZm9ybS9Ta1NMRWxpbWluYXRlRGVhZExvY2FsVmFyaWFibGVzLmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy9za3NsL3RyYW5zZm9ybS9Ta1NMRWxpbWluYXRlRGVhZExvY2FsVmFyaWFibGVzLmNwcAppbmRleCAyYWNjNjY4Li4zY2UzMDVhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvc2tzbC90cmFuc2Zvcm0vU2tTTEVsaW1pbmF0ZURlYWRMb2NhbFZhcmlhYmxlcy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3Nrc2wvdHJhbnNmb3JtL1NrU0xFbGltaW5hdGVEZWFkTG9jYWxWYXJpYWJsZXMuY3BwCkBAIC03OSw3ICs3OSwxMyBAQAogICAgIERlYWRMb2NhbFZhcmlhYmxlRWxpbWluYXRvciB2aXNpdG9yeypwcm9ncmFtLmZDb250ZXh0LCB1c2FnZX07CiAKICAgICBpZiAocHJvZ3JhbS5mQ29uZmlnLT5mU2V0dGluZ3MuZlJlbW92ZURlYWRWYXJpYWJsZXMpIHsKKyNpZm5kZWYgU0tJQV9TVFJVQ1RVUkVEX0JJTkRJTkdTX0JBQ0tQT1JUCiAgICAgICAgIGZvciAoYXV0byYgW3ZhciwgY291bnRzXSA6IHVzYWdlLT5mVmFyaWFibGVDb3VudHMpIHsKKyNlbHNlCisgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IHVzYWdlLT5mVmFyaWFibGVDb3VudHMpIHsKKyAgICAgICAgICAgIGF1dG8mIHZhciA9IGl0ZW0uZmlyc3Q7CisgICAgICAgICAgICBhdXRvJiBjb3VudHMgPSBpdGVtLnNlY29uZDsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKERlYWRMb2NhbFZhcmlhYmxlRWxpbWluYXRvcjo6Q2FuRWxpbWluYXRlKHZhciwgY291bnRzKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvZ3JhbSBjb250YWlucyBhdCBsZWFzdCBvbmUgZGVhZCBsb2NhbCB2YXJpYWJsZS4KICAgICAgICAgICAgICAgICAvLyBTY2FuIHRoZSBwcm9ncmFtIGZvciBhbnkgZGVhZCBsb2NhbCB2YXJpYWJsZXMgYW5kIGVsaW1pbmF0ZSB0aGVtIGFsbC4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0NhbnZhc1N0YXRlVXRpbHMuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ2FudmFzU3RhdGVVdGlscy5jcHAKaW5kZXggYTMwODI5Zi4uN2IyMGRkNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ2FudmFzU3RhdGVVdGlscy5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ2FudmFzU3RhdGVVdGlscy5jcHAKQEAgLTIwMywxMyArMjAzLDE0IEBACiAgICAgbGF5ZXJTdGF0ZS0+aGVpZ2h0ID0gcG1hcC5oZWlnaHQoKTsKIAogICAgIHN3aXRjaCAocG1hcC5jb2xvclR5cGUoKSkgewotICAgICAgICBjYXNlIGtOMzJfU2tDb2xvclR5cGU6Ci0gICAgICAgICAgICBsYXllclN0YXRlLT5yYXN0ZXIuY29uZmlnID0ga0FSR0JfODg4OF9SYXN0ZXJDb25maWc7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBrUkdCXzU2NV9Ta0NvbG9yVHlwZToKICAgICAgICAgICAgIGxheWVyU3RhdGUtPnJhc3Rlci5jb25maWcgPSBrUkdCXzU2NV9SYXN0ZXJDb25maWc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChwbWFwLmNvbG9yVHlwZSgpID09IGtOMzJfU2tDb2xvclR5cGUpIHsKKyAgICAgICAgICAgICAgICBsYXllclN0YXRlLT5yYXN0ZXIuY29uZmlnID0ga0FSR0JfODg4OF9SYXN0ZXJDb25maWc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgbGF5ZXJTdGF0ZS0+cmFzdGVyLnJvd0J5dGVzID0gcG1hcC5yb3dCeXRlcygpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ3VzdG9tVHlwZWZhY2UuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvc3JjL3V0aWxzL1NrQ3VzdG9tVHlwZWZhY2UuY3BwCmluZGV4IDRjNjlmMzQuLjYwYTZkODIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3NyYy91dGlscy9Ta0N1c3RvbVR5cGVmYWNlLmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS9zcmMvdXRpbHMvU2tDdXN0b21UeXBlZmFjZS5jcHAKQEAgLTIyNSw3ICsyMjUsMTEgQEAKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlRm9udE1ldHJpY3MoU2tGb250TWV0cmljcyogbWV0cmljcykgb3ZlcnJpZGUgeworI2lmbmRlZiBTS0lBX1NUUlVDVFVSRURfQklORElOR1NfQkFDS1BPUlQKICAgICAgICAgYXV0byBbc3gsIHN5XSA9IGZNYXRyaXgubWFwWFkoMSwgMSk7CisjZWxzZQorICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMihzeCwgc3ksIGZNYXRyaXgubWFwWFkoMSwgMSkpOworI2VuZGlmCiAgICAgICAgICptZXRyaWNzID0gc2NhbGVfZm9udG1ldHJpY3ModGhpcy0+dXNlclRGKCktPmZNZXRyaWNzLCBzeCwgc3kpOwogICAgIH0KIApAQCAtMjYwLDcgKzI2NCwxMiBAQAogc3RhdGljIHZvaWQgY29tcHJlc3Nfd3JpdGUoU2tXU3RyZWFtKiBzdHJlYW0sIGNvbnN0IFNrUGF0aCYgcGF0aCwgaW50IHVwZW0pIHsKICAgICBpbnQgcENvdW50ID0gMDsKICAgICBzdGQ6OnZlY3RvcjxQVmVyYj4gdmVyYnM7CisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdiwgcCwgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogU2tQYXRoUHJpdjo6SXRlcmF0ZShwYXRoKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2LCBwLCB3LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIHN3aXRjaCAodikgewogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOiB2ZXJicy5wdXNoX2JhY2soa01vdmUpOyBwQ291bnQgKz0gMTsgYnJlYWs7CkBAIC0yOTksNyArMzA4LDEyIEBACiAgICAgICAgIH0KICAgICB9OwogCisjaWZuZGVmIFNLSUFfU1RSVUNUVVJFRF9CSU5ESU5HU19CQUNLUE9SVAogICAgIGZvciAoYXV0byBbdiwgcCwgd10gOiBTa1BhdGhQcml2OjpJdGVyYXRlKHBhdGgpKSB7CisjZWxzZQorICAgIGZvciAoYXV0byBpdGVtIDogU2tQYXRoUHJpdjo6SXRlcmF0ZShwYXRoKSkgeworICAgICAgICBTVFJVQ1RVUkVEX0JJTkRJTkdfMyh2LCBwLCB3LCBzdGQ6Om1vdmUoaXRlbSkpOworI2VuZGlmCiAgICAgICAgIHN3aXRjaCAodikgewogICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNrUGF0aFZlcmI6OmtNb3ZlOiB3cml0ZV9wdHMoJnBbMF0sIDEpOyBicmVhazsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3Rlc3RzL0JpdG1hcENvcHlUZXN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3Rlc3RzL0JpdG1hcENvcHlUZXN0LmNwcAppbmRleCA4OGMzOWJmLi40YjQ5YWMxIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90ZXN0cy9CaXRtYXBDb3B5VGVzdC5jcHAKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGVzdHMvQml0bWFwQ29weVRlc3QuY3BwCkBAIC01Niw3ICs1Niw3IEBACiAgICAgfQogfTsKIAotc3RhdGljIGNvbnN0IFBhaXIgZ1BhaXJzW10gPSB7CitzdGF0aWMgY29uc3RleHByIFBhaXIgZ1BhaXJzW10gPSB7CiAgICAgeyBrVW5rbm93bl9Ta0NvbG9yVHlwZSwgICAgICIwMDAwMDAwIiAgfSwKICAgICB7IGtBbHBoYV84X1NrQ29sb3JUeXBlLCAgICAgIjAxMDAwMDAiICB9LAogICAgIHsga1JHQl81NjVfU2tDb2xvclR5cGUsICAgICAiMDEwMTAxMSIgIH0sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90ZXN0cy9CaXRtYXBHZXRDb2xvclRlc3QuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGVzdHMvQml0bWFwR2V0Q29sb3JUZXN0LmNwcAppbmRleCBjMjdjYjJmLi5hM2JlMGUwIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90ZXN0cy9CaXRtYXBHZXRDb2xvclRlc3QuY3BwCisrKyBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3Rlc3RzL0JpdG1hcEdldENvbG9yVGVzdC5jcHAKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlICJ0ZXN0cy9UZXN0LmgiCiAKIERFRl9URVNUKEdldENvbG9yLCByZXBvcnRlcikgewotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUmVjIHsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0cnVjdCBSZWMgewogICAgICAgICBTa0NvbG9yVHlwZSBmQ29sb3JUeXBlOwogICAgICAgICBTa0NvbG9yICAgICBmSW5Db2xvcjsKICAgICAgICAgU2tDb2xvciAgICAgZk91dENvbG9yOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGVzdHMvSW1hZ2VHZW5lcmF0b3JUZXN0LmNwcCBiL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3Rlc3RzL0ltYWdlR2VuZXJhdG9yVGVzdC5jcHAKaW5kZXggOGU2ZDVhZS4uMWQ1YWVhNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGVzdHMvSW1hZ2VHZW5lcmF0b3JUZXN0LmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90ZXN0cy9JbWFnZUdlbmVyYXRvclRlc3QuY3BwCkBAIC05MSw3ICs5MSw3IEBACiB9CiAKIERFRl9URVNUKFBpY3R1cmVJbWFnZUdlbmVyYXRvciwgcmVwb3J0ZXIpIHsKLSAgICBjb25zdCBzdHJ1Y3QgeworICAgIGNvbnN0ZXhwciBzdHJ1Y3QgewogICAgICAgICBTa0NvbG9yVHlwZSBmQ29sb3JUeXBlOwogICAgICAgICBTa0FscGhhVHlwZSBmQWxwaGFUeXBlOwogICAgIH0gcmVjc1tdID0gewpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGhpcmRfcGFydHkvc2tjbXMvQlVJTEQuZ24gYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90aGlyZF9wYXJ0eS9za2Ntcy9CVUlMRC5nbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU3NWM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdGhpcmRfcGFydHkvc2tjbXMvQlVJTEQuZ24KQEAgLTAsMCArMSwyMyBAQAorIyBDb3B5cmlnaHQgMjAyMiBUaGUgQ29iYWx0IEF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3N0YXRpY19saWJyYXJ5KCJza2NtcyIpIHsKKyAgc291cmNlcyA9IFsgInNrY21zLmNjIiBdCisKKyAgaW5jbHVkZV9kaXJzID0gWyAiLi4vLi4vaW5jbHVkZS90aGlyZF9wYXJ0eS9za2NtcyIgXQorCisgICMgU3RhcmJvYXJkIGRvZXNuJ3QgaGF2ZSBBUElzIGZvciB2ZWN0b3IgcmVnaXN0ZXJzLgorICAjIFVzZSBwb3J0YWJsZSBjb2RlIGluc3RlYWQuCisgIGRlZmluZXMgPSBbICJTS0NNU19QT1JUQUJMRSIgXQorfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdG9vbHMvc2tpYXNlcnZlL1JlcXVlc3QuY3BwIGIvdGhpcmRfcGFydHkvc2tpYV9uZXh0L3RoaXJkX3BhcnR5L3NraWEvdG9vbHMvc2tpYXNlcnZlL1JlcXVlc3QuY3BwCmluZGV4IGJjMzM2YWIuLjRiYjViMjYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3NraWFfbmV4dC90aGlyZF9wYXJ0eS9za2lhL3Rvb2xzL3NraWFzZXJ2ZS9SZXF1ZXN0LmNwcAorKysgYi90aGlyZF9wYXJ0eS9za2lhX25leHQvdGhpcmRfcGFydHkvc2tpYS90b29scy9za2lhc2VydmUvUmVxdWVzdC5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgIGJvb2wgZlNSR0I7CiB9OwogCi1Db2xvckFuZFByb2ZpbGUgQ29sb3JNb2Rlc1tdID0geworY29uc3RleHByIENvbG9yQW5kUHJvZmlsZSBDb2xvck1vZGVzW10gPSB7CiAgICAgeyBrTjMyX1NrQ29sb3JUeXBlLCAgICAgIGZhbHNlIH0sCiAgICAgeyBrTjMyX1NrQ29sb3JUeXBlLCAgICAgICB0cnVlIH0sCiAgICAgeyBrUkdCQV9GMTZfU2tDb2xvclR5cGUsICB0cnVlIH0sCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9CVUlMRC5nbiBiL3RoaXJkX3BhcnR5L3Y4L0JVSUxELmduCmluZGV4IGNmODNmOTkuLmU3OThkMTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3Y4L0JVSUxELmduCisrKyBiL3RoaXJkX3BhcnR5L3Y4L0JVSUxELmduCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRfY3B1ICE9IHY4X2N1cnJlbnRfY3B1ICYmIHY4X211bHRpX2FyY2hfYnVpbGQpCiAKICMgRm9yIGZhc3RlciBXaW5kb3dzIGJ1aWxkcy4gU2VlIGh0dHBzOi8vY3JidWcuY29tL3Y4Lzg0NzUuCi1lbWl0X2J1aWx0aW5zX2FzX2lubGluZV9hc20gPSBpc193aW4gJiYgaXNfY2xhbmcKK2VtaXRfYnVpbHRpbnNfYXNfaW5saW5lX2FzbSA9IGlzX3dpbiAmJiBpc19jbGFuZyB8fCBjb2JhbHRfdjhfZW1pdF9idWlsdGluc19hc19pbmxpbmVfYXNtCiAKIGRlY2xhcmVfYXJncygpIHsKICAgIyBQcmludCB0byBzdGRvdXQgb24gQW5kcm9pZC4KQEAgLTMxNiw3ICszMTYsNyBAQAogfQogaWYgKHY4X2VuYWJsZV9wb2ludGVyX2NvbXByZXNzaW9uID09ICIiKSB7CiAgIHY4X2VuYWJsZV9wb2ludGVyX2NvbXByZXNzaW9uID0KLSAgICAgIHY4X2N1cnJlbnRfY3B1ID09ICJhcm02NCIgfHwgdjhfY3VycmVudF9jcHUgPT0gIng2NCIKKyAgICAgICh2OF9jdXJyZW50X2NwdSA9PSAiYXJtNjQiIHx8IHY4X2N1cnJlbnRfY3B1ID09ICJ4NjQiKSAmJiB2OF9lbmFibGVfcG9pbnRlcl9jb21wcmVzc2lvbl9vdmVycmlkZQogfQogaWYgKHY4X2VuYWJsZV9mYXN0X3RvcnF1ZSA9PSAiIikgewogICB2OF9lbmFibGVfZmFzdF90b3JxdWUgPSB2OF9lbmFibGVfZmFzdF9ta3NuYXBzaG90CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9fX2luaXRfXy5weSBiL3RoaXJkX3BhcnR5L3Y4L19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2ZlYXR1cmVzLmd5cGkgYi90aGlyZF9wYXJ0eS92OC9mZWF0dXJlcy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODdkMzg1Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2ZlYXR1cmVzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotIyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSMgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotIyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBDb21waWxlIHRpbWUgY29udHJvbGxlZCBWOCBmZWF0dXJlcy4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAndjhfdGFyZ2V0X2FyY2glJzogJzwodGFyZ2V0X2FyY2gpJywKLSAgICB9LAotCi0gICAgIyBBbGxvd3MgdGhlIGVtYmVkZGVyIHRvIGFkZCBhIGN1c3RvbSBzdWZmaXggdG8gdGhlIHZlcnNpb24gc3RyaW5nLgotICAgICd2OF9lbWJlZGRlcl9zdHJpbmclJzogJycsCi0KLSAgICAndjhfZW5hYmxlX2Rpc2Fzc2VtYmxlciUnOiAwLAotCi0gICAgJ3Y4X3Byb21pc2VfaW50ZXJuYWxfZmllbGRfY291bnQlJzogMCwKLQotICAgICd2OF9lbmFibGVfZ2Riaml0JSc6IDAsCi0KLSAgICAndjhfZW5hYmxlX3ZlcmlmeV9jc2ElJzogMCwKLQotICAgICd2OF9vYmplY3RfcHJpbnQlJzogMCwKLQotICAgICd2OF9lbmFibGVfdmVyaWZ5X2hlYXAlJzogMCwKLQotICAgICd2OF90cmFjZV9tYXBzJSc6IDAsCi0KLSAgICAjIEVuYWJsZSB0aGUgc25hcHNob3QgZmVhdHVyZSwgZm9yIGZhc3QgY29udGV4dCBjcmVhdGlvbi4KLSAgICAjIGh0dHA6Ly92OHByb2plY3QuYmxvZ3Nwb3QuY29tLzIwMTUvMDkvY3VzdG9tLXN0YXJ0dXAtc25hcHNob3RzLmh0bWwKLSAgICAndjhfdXNlX3NuYXBzaG90JSc6ICd0cnVlJywKLQotICAgICd2OF9lbmFibGVfdmVyaWZ5X3ByZWRpY3RhYmxlJSc6IDAsCi0KLSAgICAjIFdpdGggcG9zdCBtb3J0ZW0gc3VwcG9ydCBlbmFibGVkLCBtZXRhZGF0YSBpcyBlbWJlZGRlZCBpbnRvIGxpYnY4IHRoYXQKLSAgICAjIGRlc2NyaWJlcyB2YXJpb3VzIHBhcmFtZXRlcnMgb2YgdGhlIFZNIGZvciB1c2UgYnkgZGVidWdnZXJzLiBTZWUKLSAgICAjIHRvb2xzL2dlbi1wb3N0bW9ydGVtLW1ldGFkYXRhLnB5IGZvciBkZXRhaWxzLgotICAgICd2OF9wb3N0bW9ydGVtX3N1cHBvcnQlJzogJ2ZhbHNlJywKLQotICAgICMgSW50ZXJwcmV0ZWQgcmVnZXhwIGVuZ2luZSBleGlzdHMgYXMgcGxhdGZvcm0taW5kZXBlbmRlbnQgYWx0ZXJuYXRpdmUKLSAgICAjIGJhc2VkIHdoZXJlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgY29tcGlsZWQgdG8gYSBieXRlY29kZS4KLSAgICAndjhfaW50ZXJwcmV0ZWRfcmVnZXhwJSc6IDAsCi0KLSAgICAjIEVuYWJsZSBFQ01BU2NyaXB0IEludGVybmF0aW9uYWxpemF0aW9uIEFQSS4gRW5hYmxpbmcgdGhpcyBmZWF0dXJlIHdpbGwKLSAgICAjIGFkZCBhIGRlcGVuZGVuY3kgb24gdGhlIElDVSBsaWJyYXJ5LgotICAgICd2OF9lbmFibGVfaTE4bl9zdXBwb3J0JSc6IDEsCi0KLSAgICAjIEVuYWJsZSBjb21waWxlciB3YXJuaW5ncyB3aGVuIHVzaW5nIFY4X0RFUFJFQ0FURUQgYXBpcy4KLSAgICAndjhfZGVwcmVjYXRpb25fd2FybmluZ3MlJzogMCwKLQotICAgICMgRW5hYmxlIGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gdXNpbmcgVjhfREVQUkVDQVRFX1NPT04gYXBpcy4KLSAgICAndjhfaW1taW5lbnRfZGVwcmVjYXRpb25fd2FybmluZ3MlJzogMCwKLQotICAgICMgU2V0IHRvIDEgdG8gZW5hYmxlIERDSEVDS3MgaW4gcmVsZWFzZSBidWlsZHMuCi0gICAgJ2RjaGVja19hbHdheXNfb24lJzogMCwKLQotICAgICMgRW5hYmxlL2Rpc2FibGUgSmF2YVNjcmlwdCBBUEkgYWNjZXNzb3JzLgotICAgICd2OF9qc19hY2Nlc3NvcnMlJzogMCwKLQotICAgICMgVGVtcG9yYXJ5IGZsYWcgdG8gYWxsb3cgZW1iZWRkZXJzIHRvIHVwZGF0ZSB0aGVpciBtaWNyb3Rhc2tzIHNjb3Blcy4KLSAgICAndjhfY2hlY2tfbWljcm90YXNrc19zY29wZXNfY29uc2lzdGVuY3klJzogJ2ZhbHNlJywKLQotICAgICMgRW5hYmxlIGNvbmN1cnJlbnQgbWFya2luZy4KLSAgICAndjhfZW5hYmxlX2NvbmN1cnJlbnRfbWFya2luZyUnOiAxLAotCi0gICAgIyBFbmFibGVzIHZhcmlvdXMgdGVzdGluZyBmZWF0dXJlcy4KLSAgICAndjhfZW5hYmxlX3Rlc3RfZmVhdHVyZXMlJzogMCwKLQotICAgICMgQ29udHJvbHMgdGhlIHRocmVzaG9sZCBmb3Igb24taGVhcC9vZmYtaGVhcCBUeXBlZCBBcnJheXMuCi0gICAgJ3Y4X3R5cGVkX2FycmF5X21heF9zaXplX2luX2hlYXAlJzogNjQsCi0KLSAgICAjIENvYmFsdCBhZGRlZC4KLSAgICAndjhfZW5hYmxlX2hhbmRsZV96YXBwaW5nJzogMCwgICMgemFwcGluZyBpcyBkaXNhYmxlZCBpbiBWOCA4LjgKLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsndjhfZW1iZWRkZXJfc3RyaW5nIT0iIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1Y4X0VNQkVEREVSX1NUUklORz0iPCh2OF9lbWJlZGRlcl9zdHJpbmcpIicsXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9lbmFibGVfZGlzYXNzZW1ibGVyPT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX0RJU0FTU0VNQkxFUicsXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9wcm9taXNlX2ludGVybmFsX2ZpZWxkX2NvdW50IT0wJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnVjhfUFJPTUlTRV9JTlRFUk5BTF9GSUVMRF9DT1VOVCcsJ3Y4X3Byb21pc2VfaW50ZXJuYWxfZmllbGRfY291bnQnXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9lbmFibGVfZ2Riaml0PT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX0dEQl9KSVRfSU5URVJGQUNFJyxdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X2VuYWJsZV92ZXJpZnlfY3NhPT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX1ZFUklGWV9DU0EnLF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfb2JqZWN0X3ByaW50PT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnT0JKRUNUX1BSSU5UJyxdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X2VuYWJsZV92ZXJpZnlfaGVhcD09MScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1ZFUklGWV9IRUFQJyxdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X3RyYWNlX21hcHM9PTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydWOF9UUkFDRV9NQVBTJyxdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X2VuYWJsZV90ZXN0X2ZlYXR1cmVzPT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnVjhfRU5BQkxFX0FMTE9DQVRJT05fVElNRU9VVCcsICdWOF9FTkFCTEVfRk9SQ0VfU0xPV19QQVRIJ10sCi0gICAgICB9XSwKLSAgICAgIFsndjhfZW5hYmxlX3ZlcmlmeV9wcmVkaWN0YWJsZT09MScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1ZFUklGWV9QUkVESUNUQUJMRScsXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9pbnRlcnByZXRlZF9yZWdleHA9PTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydWOF9JTlRFUlBSRVRFRF9SRUdFWFAnLF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfZGVwcmVjYXRpb25fd2FybmluZ3M9PTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydWOF9ERVBSRUNBVElPTl9XQVJOSU5HUycsXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9pbW1pbmVudF9kZXByZWNhdGlvbl93YXJuaW5ncz09MScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1Y4X0lNTUlORU5UX0RFUFJFQ0FUSU9OX1dBUk5JTkdTJyxdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X2VuYWJsZV9pMThuX3N1cHBvcnQ9PTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydWOF9JTlRMX1NVUFBPUlQnLF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfdXNlX3NuYXBzaG90PT0idHJ1ZSIgYW5kIHY4X3VzZV9leHRlcm5hbF9zdGFydHVwX2RhdGE9PTEnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydWOF9VU0VfRVhURVJOQUxfU1RBUlRVUF9EQVRBJyxdLAotICAgICAgfV0sCi0gICAgICBbJ2RjaGVja19hbHdheXNfb24hPTAnLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWydERUJVRycsXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9jaGVja19taWNyb3Rhc2tzX3Njb3Blc19jb25zaXN0ZW5jeT09InRydWUiJywgewotICAgICAgICAnZGVmaW5lcyc6IFsnVjhfQ0hFQ0tfTUlDUk9UQVNLU19TQ09QRVNfQ09OU0lTVEVOQ1knLF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfZW5hYmxlX2NvbmN1cnJlbnRfbWFya2luZz09MScsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbJ1Y4X0NPTkNVUlJFTlRfTUFSS0lORycsXSwKLSAgICAgIH1dLAotICAgIF0sICAjIGNvbmRpdGlvbnMKLSAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAnRGVidWdCYXNlQ29tbW9uJzogewotICAgICAgICAnYWJzdHJhY3QnOiAxLAotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICd2OF9lbmFibGVfaGFuZGxlX3phcHBpbmclJzogMSwKLSAgICAgICAgfSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd2OF9lbmFibGVfaGFuZGxlX3phcHBpbmc9PTEnLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX0hBTkRMRV9aQVBQSU5HJyxdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfSwgICMgRGVidWcKLSAgICAgICdSZWxlYXNlJzogewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICd2OF9lbmFibGVfaGFuZGxlX3phcHBpbmclJzogMCwKLSAgICAgICAgfSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd2OF9lbmFibGVfaGFuZGxlX3phcHBpbmc9PTEnLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX0hBTkRMRV9aQVBQSU5HJyxdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLCAgIyBjb25kaXRpb25zCi0gICAgICB9LCAgIyBSZWxlYXNlCi0gICAgfSwgICMgY29uZmlndXJhdGlvbnMKLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICdWOF9HWVBfQlVJTEQnLAotICAgICAgJ1Y4X1RZUEVEX0FSUkFZX01BWF9TSVpFX0lOX0hFQVA9PCh2OF90eXBlZF9hcnJheV9tYXhfc2l6ZV9pbl9oZWFwKScsCi0gICAgXSwgICMgZGVmaW5lcwotICB9LCAgIyB0YXJnZXRfZGVmYXVsdHMKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL0ZvckVhY2hGb3JtYXQucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9Gb3JFYWNoRm9ybWF0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDE1Y2I4Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL0ZvckVhY2hGb3JtYXQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE5IFJlZmFlbCBBY2tlcmFtbm48cmVmYWNrQGdtYWlsLmNvbT4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlLgotZGVmIERvTWFpbihhcmdzKToKLSAgZm9ybWF0X3N0ciA9IGFyZ3MucG9wKDApCi0gIHJldHVybiAnICcuam9pbihmb3JtYXRfc3RyICUgYSBmb3IgYSBpbiBhcmdzKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvRm9yRWFjaFJlcGxhY2UucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9Gb3JFYWNoUmVwbGFjZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwNDg3YS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9Gb3JFYWNoUmVwbGFjZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTkgVWpqd2FsIFNoYXJtYSA8dXNoYXJtYTE5OThAZ21haWw+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZS4KLQotZGVmIERvTWFpbihhcmdzKToKLSAgb2xkID0gYXJncy5wb3AoMCkKLSAgbmV3ID0gYXJncy5wb3AoMCkKLSAgcmV0dXJuICcgJy5qb2luKGEucmVwbGFjZShvbGQsIG5ldykgZm9yIGEgaW4gYXJncykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL0dOLXNjcmFwZXIucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9HTi1zY3JhcGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzcyZjFkLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL0dOLXNjcmFwZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxOSBSZWZhZWwgQWNrZXJhbW5uPHJlZmFja0BnbWFpbC5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZS4KLWltcG9ydCByZQotaW1wb3J0IG9zCi0KLVBMQUlOX1NPVVJDRV9SRSA9IHJlLmNvbXBpbGUoJ1xzKiIoW14vJF0uKykiXHMqJykKLWRlZiBEb01haW4oYXJncyk6Ci0gIGduX2ZpbGVuYW1lLCBwYXR0ZXJuID0gYXJncwotICBzcmNfcm9vdCA9IG9zLnBhdGguZGlybmFtZShnbl9maWxlbmFtZSkKLSAgd2l0aCBvcGVuKGduX2ZpbGVuYW1lLCAncmInKSBhcyBnbl9maWxlOgotICAgIGduX2NvbnRlbnQgPSBnbl9maWxlLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKLQotICBzY3JhcGVyX3JlID0gcmUuY29tcGlsZShwYXR0ZXJuICsgcidcWyhbXlxdXSspJywgcmUuRE9UQUxMKQotICBtYXRjaGVzID0gc2NyYXBlcl9yZS5zZWFyY2goZ25fY29udGVudCkKLSAgbWF0Y2ggPSBtYXRjaGVzLmdyb3VwKDEpCi0gIGZpbGVzID0gW10KLSAgZm9yIGwgaW4gbWF0Y2guc3BsaXRsaW5lcygpOgotICAgIG0yID0gUExBSU5fU09VUkNFX1JFLm1hdGNoKGwpCi0gICAgaWYgbm90IG0yOgotICAgICAgY29udGludWUKLSAgICBmaWxlcy5hcHBlbmQobTIuZ3JvdXAoMSkpCi0gICMgYWx3YXlzIHVzZSBgL2Agc2luY2UgR1lQIHdpbGwgcHJvY2VzcyBwYXRocyBmdXJ0aGVyIGRvd25zdHJlYW0KLSAgcmVsX2ZpbGVzID0gWyciJXMvJXMiJyAlIChzcmNfcm9vdCwgZikgZm9yIGYgaW4gZmlsZXNdCi0gIHJldHVybiAnICcuam9pbihyZWxfZmlsZXMpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9PV05FUlMgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9PV05FUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNTZhZjMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvT1dORVJTCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotbWFjaGVuYmFjaEBjaHJvbWl1bS5vcmcKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL1JFQURNRS50eHQgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjI0MmFkLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLUZvciBidWlsZCBpbnN0cnVjdGlvbnMsIHBsZWFzZSByZWZlciB0bzoKLQotaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtpL0J1aWxkaW5nV2l0aEdZUAotCi1UTDtEUiB2ZXJzaW9uIG9uICpuaXg6Ci0kIG1ha2UgZGVwZW5kZW5jaWVzICAgICAgICAjIE9ubHkgbmVlZGVkIG9uY2UuCi0kIG1ha2UgaWEzMi5yZWxlYXNlIC1qOAotJCBtYWtlIGlhMzIucmVsZWFzZS5jaGVjayAgIyBPcHRpb25hbGx5OiBydW4gdGVzdHMuCi0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL19faW5pdF9fLnB5IGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvX2Vudi5weSBiL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL19lbnYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTkwOGUuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvX2Vudi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IDIwMTcgVGhlIENvYmFsdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotIiIiQXNrIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGxvYWQgdGhlIHByb2plY3QgZW52aXJvbm1lbnQuIiIiCi0KLWZyb20gaW1wIGltcG9ydCBsb2FkX3NvdXJjZQotZnJvbSBvcyBpbXBvcnQgcGF0aAotaW1wb3J0IHN5cwotCi1fRU5WID0gcGF0aC5hYnNwYXRoKHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCBwYXRoLnBhcmRpciwgJ19lbnYucHknKSkKLWlmIG5vdCBwYXRoLmV4aXN0cyhfRU5WKToKLSAgcHJpbnQgJyVzOiBDYW5cJ3QgZmluZCByZXBvIHJvb3QuXG5NaXNzaW5nIHBhcmVudDogJXMnICUgKF9fZmlsZV9fLCBfRU5WKQotICBzeXMuZXhpdCgxKQotbG9hZF9zb3VyY2UoJycsIF9FTlYpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9hbGwuZ3lwIGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvYWxsLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5Y2Y4NS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9hbGwuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMSB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ0FsbCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICcuLi9zcmMvZDguZ3lwOmQ4JywKLSAgICAgICAgJy4uL3Rlc3QvaW5zcGVjdG9yL2luc3BlY3Rvci5neXA6KicsCi0gICAgICAgICcuLi90ZXN0L21rZ3Jva2R1bXAvbWtncm9rZHVtcC5neXA6KicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY29tcG9uZW50IT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vdG9vbHMvcGFyc2VyLXNoZWxsLmd5cDpwYXJzZXItc2hlbGwnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICAjIFRoZXNlIGl0ZW1zIGRvbid0IGNvbXBpbGUgZm9yIEFuZHJvaWQgb24gTWFjLgotICAgICAgICBbJ2hvc3Rfb3MhPSJtYWMiIG9yIE9TIT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9zYW1wbGVzL3NhbXBsZXMuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rlc3QvY2N0ZXN0L2NjdGVzdC5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9mdXp6ZXIvZnV6emVyLmd5cDoqJywKLSAgICAgICAgICAgICcuLi90ZXN0L3VuaXR0ZXN0cy91bml0dGVzdHMuZ3lwOionLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Rlc3RfaXNvbGF0aW9uX21vZGUgIT0gIm5vb3AiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vdGVzdC9ib3RfZGVmYXVsdC5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9iZW5jaG1hcmtzL2JlbmNobWFya3MuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rlc3QvZGVidWdnZXIvZGVidWdnZXIuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rlc3QvZGVmYXVsdC5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9kOF9kZWZhdWx0Lmd5cDoqJywKLSAgICAgICAgICAgICcuLi90ZXN0L2ludGwvaW50bC5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9tZXNzYWdlL21lc3NhZ2UuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rlc3QvbWpzdW5pdC9tanN1bml0Lmd5cDoqJywKLSAgICAgICAgICAgICcuLi90ZXN0L21vemlsbGEvbW96aWxsYS5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9vcHRpbWl6ZV9mb3Jfc2l6ZS5neXA6KicsCi0gICAgICAgICAgICAnLi4vdGVzdC9wZXJmLmd5cDoqJywKLSAgICAgICAgICAgICcuLi90ZXN0L3ByZXBhcnNlci9wcmVwYXJzZXIuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rlc3QvdGVzdDI2Mi90ZXN0MjYyLmd5cDoqJywKLSAgICAgICAgICAgICcuLi90ZXN0L3dlYmtpdC93ZWJraXQuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rvb2xzL2NoZWNrLXN0YXRpYy1pbml0aWFsaXplcnMuZ3lwOionLAotICAgICAgICAgICAgJy4uL3Rvb2xzL2djbW9sZS9ydW5fZ2Ntb2xlLmd5cDoqJywKLSAgICAgICAgICAgICcuLi90b29scy9qc2Z1bmZ1enovanNmdW5mdXp6Lmd5cDoqJywKLSAgICAgICAgICAgICcuLi90b29scy9ydW4tZGVvcHQtZnV6emVyLmd5cDoqJywKLSAgICAgICAgICAgICcuLi90b29scy9ydW4tbnVtLWZ1enplci5neXA6KicsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdCi0gICAgfQotICBdCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9jb3ZlcmFnZV93cmFwcGVyLnB5IGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvY292ZXJhZ2Vfd3JhcHBlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZDVmZGVlNC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9jb3ZlcmFnZV93cmFwcGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE2IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBDQy9DWFggd3JhcHBlciBzY3JpcHQgdGhhdCBleGNsdWRlcyBjZXJ0YWluIGZpbGUgcGF0dGVybnMgZnJvbSBjb3ZlcmFnZQotIyBpbnN0cnVtZW50YXRpb24uCi0KLWltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotZXhjbHVzaW9ucyA9IFsKLSAgJ2J1aWxkdG9vbHMnLAotICAnc3JjL3RoaXJkX3BhcnR5JywKLSAgJ3RoaXJkX3BhcnR5JywKLSAgJ3Rlc3QnLAotICAndGVzdGluZycsCi1dCi0KLWRlZiByZW1vdmVfaWZfZXhpc3RzKHN0cmluZ19saXN0LCBpdGVtKToKLSAgaWYgaXRlbSBpbiBzdHJpbmdfbGlzdDoKLSAgICBzdHJpbmdfbGlzdC5yZW1vdmUoaXRlbSkKLQotYXJncyA9IHN5cy5hcmd2WzE6XQotdGV4dCA9ICcgJy5qb2luKHN5cy5hcmd2WzI6XSkKLWZvciBleGNsdXNpb24gaW4gZXhjbHVzaW9uczoKLSAgaWYgcmUuc2VhcmNoKHInXC1vIG9iai8lc1teIF0qXC5vJyAlIGV4Y2x1c2lvbiwgdGV4dCk6Ci0gICAgcmVtb3ZlX2lmX2V4aXN0cyhhcmdzLCAnLWZwcm9maWxlLWFyY3MnKQotICAgIHJlbW92ZV9pZl9leGlzdHMoYXJncywgJy1mdGVzdC1jb3ZlcmFnZScpCi0gICAgcmVtb3ZlX2lmX2V4aXN0cyhhcmdzLCAnLWZzYW5pdGl6ZS1jb3ZlcmFnZT1mdW5jJykKLSAgICByZW1vdmVfaWZfZXhpc3RzKGFyZ3MsICctZnNhbml0aXplLWNvdmVyYWdlPWJiJykKLSAgICByZW1vdmVfaWZfZXhpc3RzKGFyZ3MsICctZnNhbml0aXplLWNvdmVyYWdlPWVkZ2UnKQotICAgIHJlbW92ZV9pZl9leGlzdHMoYXJncywgJy1mc2FuaXRpemUtY292ZXJhZ2U9dHJhY2UtcGMtZ3VhcmQnKQotICAgIHJlbW92ZV9pZl9leGlzdHMoYXJncywgJy1mc2FuaXRpemUtY292ZXJhZ2U9YmIsdHJhY2UtcGMtZ3VhcmQnKQotICAgIGJyZWFrCi0KLXN5cy5leGl0KHN1YnByb2Nlc3MuY2hlY2tfY2FsbChhcmdzKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2RldGVjdF92OF9ob3N0X2FyY2gucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9kZXRlY3RfdjhfaG9zdF9hcmNoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTQ1NTMzLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2RldGVjdF92OF9ob3N0X2FyY2gucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSMgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0jICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSMgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIk91dHB1dHMgaG9zdCBDUFUgYXJjaGl0ZWN0dXJlIGluIGZvcm1hdCByZWNvZ25pemVkIGJ5IGd5cC4iIiIKLQotaW1wb3J0IHBsYXRmb3JtCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLQotCi1kZWYgbWFpbigpOgotICBwcmludCBEb01haW4oW10pCi0gIHJldHVybiAwCi0KLWRlZiBEb01haW4oXyk6Ci0gICIiIkhvb2sgdG8gYmUgY2FsbGVkIGZyb20gZ3lwIHdpdGhvdXQgc3RhcnRpbmcgYSBzZXBhcmF0ZSBweXRob24KLSAgaW50ZXJwcmV0ZXIuIiIiCi0gIGhvc3RfYXJjaCA9IHBsYXRmb3JtLm1hY2hpbmUoKQotICBob3N0X3N5c3RlbSA9IHBsYXRmb3JtLnN5c3RlbSgpOwotCi0gICMgQ29udmVydCBtYWNoaW5lIHR5cGUgdG8gZm9ybWF0IHJlY29nbml6ZWQgYnkgZ3lwLgotICBpZiByZS5tYXRjaChyJ2kuODYnLCBob3N0X2FyY2gpIG9yIGhvc3RfYXJjaCA9PSAnaTg2cGMnOgotICAgIGhvc3RfYXJjaCA9ICd4ODYnCi0gIGVsaWYgaG9zdF9hcmNoIGluIFsneDg2XzY0JywgJ2FtZDY0J106Ci0gICAgaG9zdF9hcmNoID0gJ3g2NCcKLSAgZWxpZiBob3N0X2FyY2guc3RhcnRzd2l0aCgnYXJtJyk6Ci0gICAgaG9zdF9hcmNoID0gJ2FybScKLSAgZWxpZiBob3N0X2FyY2ggPT0gJ2FhcmNoNjQnOgotICAgIGhvc3RfYXJjaCA9ICdhcm02NCcKLSAgZWxpZiBob3N0X2FyY2ggPT0gJ21pcHM2NCc6Ci0gICAgaG9zdF9hcmNoID0gJ21pcHM2NGVsJwotICBlbGlmIGhvc3RfYXJjaC5zdGFydHN3aXRoKCdtaXBzJyk6Ci0gICAgaG9zdF9hcmNoID0gJ21pcHNlbCcKLQotICAjIFVuZGVyIEFJWCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgcGxhdGZvcm0ubWFjaGluZSBpcyBub3QKLSAgIyB0aGUgYmVzdCBpbmRpY2F0b3Igb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlCi0gICMgQUlYIDYuMSB3aGljaCBpcyB0aGUgbG93ZXN0IGxldmVsIHN1cHBvcnRlZCBvbmx5IHByb3ZpZGVzCi0gICMgYSA2NCBiaXQga2VybmVsCi0gIGlmIGhvc3Rfc3lzdGVtID09ICdBSVgnOgotICAgIGhvc3RfYXJjaCA9ICdwcGM2NCcKLQotICAjIHBsYXRmb3JtLm1hY2hpbmUgaXMgYmFzZWQgb24gcnVubmluZyBrZXJuZWwuIEl0J3MgcG9zc2libGUgdG8gdXNlIDY0LWJpdAotICAjIGtlcm5lbCB3aXRoIDMyLWJpdCB1c2VybGFuZCwgZS5nLiB0byBnaXZlIGxpbmtlciBzbGlnaHRseSBtb3JlIG1lbW9yeS4KLSAgIyBEaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCB1c2VybGFuZCBiaXRuZXNzIGJ5IHF1ZXJ5aW5nCi0gICMgdGhlIHB5dGhvbiBiaW5hcnkuCi0gIGlmIGhvc3RfYXJjaCA9PSAneDY0JyBhbmQgcGxhdGZvcm0uYXJjaGl0ZWN0dXJlKClbMF0gPT0gJzMyYml0JzoKLSAgICBob3N0X2FyY2ggPSAneDg2JwotCi0gIHJldHVybiBob3N0X2FyY2gKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvZXh0cmFzLWxpYnJhcmllcy5jYyBiL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2V4dHJhcy1saWJyYXJpZXMuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNDQ5MzAuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvZXh0cmFzLWxpYnJhcmllcy5jYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLS8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZyb20gLmpzIHNvdXJjZSBmaWxlcyBieSBHWVAuICBJZiB5b3UKLS8vIHdhbnQgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoaXMgZmlsZSB5b3Ugc2hvdWxkIGVpdGhlciBjaGFuZ2UgdGhlCi0vLyBqYXZhc2NyaXB0IHNvdXJjZSBmaWxlcyBvciB0aGUgR1lQIHNjcmlwdC4KLQotI2luY2x1ZGUgInNyYy9pbml0L3Y4LmgiCi0jaW5jbHVkZSAic3JjL3NuYXBzaG90L25hdGl2ZXMuaCIKLSNpbmNsdWRlICJzcmMvdXRpbHMvdXRpbHMuaCIKLQotbmFtZXNwYWNlIHY4IHsKLW5hbWVzcGFjZSBpbnRlcm5hbCB7Ci0KLSAgc3RhdGljIGNvbnN0IGNoYXIgc291cmNlc1tdID0geyA0MCwgMTAyLCAxMTcsIDExMCwgOTksIDExNiwgMTA1LCAxMTEsIDExMCwgNDAsIDQxLCAzMiwgMTIzLCAxMjUsIDQxIH07Ci0KLSAgdGVtcGxhdGUgPD4KLSAgaW50IE5hdGl2ZXNDb2xsZWN0aW9uPEVYVFJBUz46OkdldEJ1aWx0aW5zQ291bnQoKSB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICB0ZW1wbGF0ZSA8PgotICBpbnQgTmF0aXZlc0NvbGxlY3Rpb248RVhUUkFTPjo6R2V0SW5kZXgoY29uc3QgY2hhciogbmFtZSkgewotICAgIGlmIChzdHJjbXAobmFtZSwgImR1bW15IikgPT0gMCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgdGVtcGxhdGUgPD4KLSAgVmVjdG9yPGNvbnN0IGNoYXI+IE5hdGl2ZXNDb2xsZWN0aW9uPEVYVFJBUz46OkdldFNjcmlwdFNvdXJjZShpbnQgaW5kZXgpIHsKLSAgICBpZiAoaW5kZXggPT0gMCkgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihzb3VyY2VzICsgMCwgMTUpOwotICAgIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4oIiIsIDApOwotICB9Ci0KLSAgdGVtcGxhdGUgPD4KLSAgVmVjdG9yPGNvbnN0IGNoYXI+IE5hdGl2ZXNDb2xsZWN0aW9uPEVYVFJBUz46OkdldFNjcmlwdE5hbWUoaW50IGluZGV4KSB7Ci0gICAgaWYgKGluZGV4ID09IDApIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4oIm5hdGl2ZSBkdW1teS5qcyIsIDE1KTsKLSAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KCIiLCAwKTsKLSAgfQotCi0gIHRlbXBsYXRlIDw+Ci0gIFZlY3Rvcjxjb25zdCBjaGFyPiBOYXRpdmVzQ29sbGVjdGlvbjxFWFRSQVM+OjpHZXRTY3JpcHRzU291cmNlKCkgewotICAgIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4oc291cmNlcywgMTUpOwotICB9Ci19ICAvLyBpbnRlcm5hbAotfSAgLy8gdjgKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2dldF9sYW5kbWluZXMucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9nZXRfbGFuZG1pbmVzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MTM3NjQ4Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2dldF9sYW5kbWluZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLVRoaXMgZmlsZSBlbWl0cyB0aGUgbGlzdCBvZiByZWFzb25zIHdoeSBhIHBhcnRpY3VsYXIgYnVpbGQgbmVlZHMgdG8gYmUgY2xvYmJlcmVkCi0ob3IgYSBsaXN0IG9mICdsYW5kbWluZXMnKS4KLSIiIgotCi1pbXBvcnQgc3lzCi0KLQotZGVmIG1haW4oKToKLSAgIiIiCi0gIEFMTCBMQU5ETUlORVMgQVJFIEVNSVRURUQgRlJPTSBIRVJFLgotICAiIiIKLSAgcHJpbnQgJ05lZWQgdG8gY2xvYmJlciBhZnRlciBJQ1U1MiByb2xsLicKLSAgcHJpbnQgJ0xhbmRtaW5lcyB0ZXN0LicKLSAgcHJpbnQgJ0FjdGl2YXRpbmcgTVNWUyAyMDEzLicKLSAgcHJpbnQgJ1JldmVydCBhY3RpdmF0aW9uIG9mIE1TVlMgMjAxMy4nCi0gIHByaW50ICdBY3RpdmF0aW5nIE1TVlMgMjAxMyBhZ2Fpbi4nCi0gIHByaW50ICdDbG9iYmVyIGFmdGVyIElDVSByb2xsLicKLSAgcHJpbnQgJ01vYXIgY2xvYmJlcmluZy4uLicKLSAgcHJpbnQgJ1JlbW92ZSBidWlsZC9hbmRyb2lkLmd5cGknCi0gIHByaW50ICdDbGVhbnVwIGFmdGVyIHdpbmRvd3MgbmluamEgc3dpdGNoIGF0dGVtcHQuJwotICBwcmludCAnU3dpdGNoaW5nIHRvIHBpbm5lZCBtc3ZzIHRvb2xjaGFpbi4nCi0gIHByaW50ICdDbG9iYmVyaW5nIHRvIGhvcGVmdWxseSByZXNvbHZlIHByb2JsZW0gd2l0aCBta3NuYXBzaG90JwotICBwcmludCAnQ2xvYmJlciBhZnRlciBJQ1Ugcm9sbC4nCi0gIHByaW50ICdDbG9iYmVyIGFmdGVyIEFuZHJvaWQgTkRLIHVwZGF0ZS4nCi0gIHByaW50ICdDbG9iZXIgdG8gZml4IHdpbmRvd3MgYnVpbGQgcHJvYmxlbXMuJwotICBwcmludCAnQ2xvYmVyIGFnYWluIHRvIGZpeCB3aW5kb3dzIGJ1aWxkIHByb2JsZW1zLicKLSAgcHJpbnQgJ0Nsb2JiZXIgdG8gcG9zc2libHkgcmVzb2x2ZSBmYWlsdXJlIG9uIHdpbi0zMiBib3QuJwotICBwcmludCAnQ2xvYmJlciBmb3IgaHR0cDovL2NyYnVnLmNvbS82Njg5NTguJwotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2d5cF9lbnZpcm9ubWVudC5weSBiL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2d5cF9lbnZpcm9ubWVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU2YjUxZi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9neXBfZW52aXJvbm1lbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1TZXRzIHVwIHZhcmlvdXMgYXV0b21hdGljIGd5cCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoZXNlIGFyZSB1c2VkIGJ5Ci1neXBfdjggYW5kIGxhbmRtaW5lcy5weSB3aGljaCBydW4gYXQgZGlmZmVyZW50IHN0YWdlcyBvZiBydW5ob29rcy4gVG8KLW1ha2Ugc3VyZSBzZXR0aW5ncyBhcmUgY29uc2lzdGVudCBiZXR3ZWVuIHRoZW0sIGFsbCBzZXR1cCBzaG91bGQgaGFwcGVuIGhlcmUuCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLVNDUklQVF9ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpCi1WOF9ST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihTQ1JJUFRfRElSLCBvcy5wYXJkaXIpKQotCi0KLWRlZiBhcHBseV9neXBfZW52aXJvbm1lbnQoZmlsZV9wYXRoPU5vbmUpOgotICAiIiIKLSAgUmVhZHMgaW4gYSAqLmd5cF9lbnYgZmlsZSBhbmQgYXBwbGllcyB0aGUgdmFsaWQga2V5cyB0byBvcy5lbnZpcm9uLgotICAiIiIKLSAgaWYgbm90IGZpbGVfcGF0aCBvciBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKLSAgICByZXR1cm4KLSAgZmlsZV9jb250ZW50cyA9IG9wZW4oZmlsZV9wYXRoKS5yZWFkKCkKLSAgdHJ5OgotICAgIGZpbGVfZGF0YSA9IGV2YWwoZmlsZV9jb250ZW50cywgeydfX2J1aWx0aW5zX18nOiBOb25lfSwgTm9uZSkKLSAgZXhjZXB0IFN5bnRheEVycm9yLCBlOgotICAgIGUuZmlsZW5hbWUgPSBvcy5wYXRoLmFic3BhdGgoZmlsZV9wYXRoKQotICAgIHJhaXNlCi0gIHN1cHBvcnRlZF92YXJzID0gKCAnVjhfR1lQX0ZJTEUnLAotICAgICAgICAgICAgICAgICAgICAgJ1Y4X0dZUF9TWU5UQVhfQ0hFQ0snLAotICAgICAgICAgICAgICAgICAgICAgJ0dZUF9ERUZJTkVTJywKLSAgICAgICAgICAgICAgICAgICAgICdHWVBfR0VORVJBVE9SUycsCi0gICAgICAgICAgICAgICAgICAgICAnR1lQX0dFTkVSQVRPUl9GTEFHUycsCi0gICAgICAgICAgICAgICAgICAgICAnR1lQX0dFTkVSQVRPUl9PVVRQVVQnLCApCi0gIGZvciB2YXIgaW4gc3VwcG9ydGVkX3ZhcnM6Ci0gICAgdmFsID0gZmlsZV9kYXRhLmdldCh2YXIpCi0gICAgaWYgdmFsOgotICAgICAgaWYgdmFyIGluIG9zLmVudmlyb246Ci0gICAgICAgIHByaW50ICdJTkZPOiBFbnZpcm9ubWVudCB2YWx1ZSBmb3IgIiVzIiBvdmVycmlkZXMgdmFsdWUgaW4gJXMuJyAlICgKLSAgICAgICAgICAgIHZhciwgb3MucGF0aC5hYnNwYXRoKGZpbGVfcGF0aCkKLSAgICAgICAgKQotICAgICAgZWxzZToKLSAgICAgICAgb3MuZW52aXJvblt2YXJdID0gdmFsCi0KLQotZGVmIHNldF9lbnZpcm9ubWVudCgpOgotICAiIiJTZXRzIGRlZmF1bHRzIGZvciBHWVBfKiB2YXJpYWJsZXMuIiIiCi0KLSAgaWYgJ1NLSVBfVjhfR1lQX0VOVicgbm90IGluIG9zLmVudmlyb246Ci0gICAgIyBVcGRhdGUgdGhlIGVudmlyb25tZW50IGJhc2VkIG9uIHY4Lmd5cF9lbnYKLSAgICBneXBfZW52X3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKFY4X1JPT1QpLCAndjguZ3lwX2VudicpCi0gICAgYXBwbHlfZ3lwX2Vudmlyb25tZW50KGd5cF9lbnZfcGF0aCkKLQotICAgIGlmIG5vdCBvcy5lbnZpcm9uLmdldCgnR1lQX0dFTkVSQVRPUlMnKToKLSAgICAgICMgRGVmYXVsdCB0byBuaW5qYSBvbiBhbGwgcGxhdGZvcm1zLgotICAgICAgb3MuZW52aXJvblsnR1lQX0dFTkVSQVRPUlMnXSA9ICduaW5qYScKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2d5cF92OC5weSBiL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2d5cF92OC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYyZWU2Ny4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9neXBfdjgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0jICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotIyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0jICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgZmlsZSBpcyAocG9zc2libHksIGRlcGVuZGluZyBvbiBweXRob24gdmVyc2lvbikgaW1wb3J0ZWQgYnkKLSMgZ3lwX3Y4IHdoZW4gR1lQX1BBUkFMTEVMPTEgYW5kIGl0IGNyZWF0ZXMgc3ViLXByb2Nlc3NlcyB0aHJvdWdoIHRoZQotIyBtdWx0aXByb2Nlc3NpbmcgbGlicmFyeS4KLQotIyBJbXBvcnRpbmcgaW4gUHl0aG9uIDIuNiAoZml4ZWQgaW4gMi43KSBvbiBXaW5kb3dzIGRvZXNuJ3Qgc2VhcmNoIGZvciBpbXBvcnRzCi0jIHRoYXQgZG9uJ3QgZW5kIGluIC5weSAoYW5kIGFyZW4ndCBkaXJlY3RvcmllcyB3aXRoIGFuIF9faW5pdF9fLnB5KS4gVGhpcwotIyB3cmFwcGVyIG1ha2VzICJpbXBvcnQgZ3lwX3Y4IiB3b3JrIHdpdGggdGhvc2Ugb2xkIHZlcnNpb25zIGFuZCBtYWtlcyBpdAotIyBwb3NzaWJsZSB0byBleGVjdXRlIGd5cF92OC5weSBkaXJlY3RseSBvbiBXaW5kb3dzIHdoZXJlIHRoZSBleHRlbnNpb24gaXMKLSMgdXNlZnVsLgotCi1pbXBvcnQgb3MKLQotcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkKLWV4ZWNmaWxlKG9zLnBhdGguam9pbihwYXRoLCAnZ3lwX3Y4JykpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9pc29sYXRlLmd5cGkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9pc29sYXRlLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlODViNTMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvaXNvbGF0ZS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTUgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSMgVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGludG8gYSB0YXJnZXQgdG8gcHJvdmlkZSBhIHJ1bGUKLSMgdG8gImJ1aWxkIiAuaXNvbGF0ZSBmaWxlcyBpbnRvIGEgLmlzb2xhdGVkIGZpbGUuCi0jCi0jIFRvIHVzZSB0aGlzLCBjcmVhdGUgYSBneXAgdGFyZ2V0IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtOgotIyAnY29uZGl0aW9ucyc6IFsKLSMgICBbJ3Rlc3RfaXNvbGF0aW9uX21vZGUgIT0gIm5vb3AiJywgewotIyAgICAgJ3RhcmdldHMnOiBbCi0jICAgICAgIHsKLSMgICAgICAgICAndGFyZ2V0X25hbWUnOiAnZm9vX3Rlc3RfcnVuJywKLSMgICAgICAgICAndHlwZSc6ICdub25lJywKLSMgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotIyAgICAgICAgICAgJ2Zvb190ZXN0JywKLSMgICAgICAgICBdLAotIyAgICAgICAgICdpbmNsdWRlcyc6IFsKLSMgICAgICAgICAgICcuLi9neXBmaWxlcy9pc29sYXRlLmd5cGknLAotIyAgICAgICAgIF0sCi0jICAgICAgICAgJ3NvdXJjZXMnOiBbCi0jICAgICAgICAgICAnZm9vX3Rlc3QuaXNvbGF0ZScsCi0jICAgICAgICAgXSwKLSMgICAgICAgfSwKLSMgICAgIF0sCi0jICAgfV0sCi0jIF0sCi0jCi0jIE5vdGU6IGZvb190ZXN0Lmlzb2xhdGUgaXMgaW5jbHVkZWQgYW5kIGEgc291cmNlIGZpbGUuIEl0IGlzIGFuIGluaGVyZW50Ci0jIHByb3BlcnR5IG9mIHRoZSAuaXNvbGF0ZSBmb3JtYXQuIFRoaXMgcGVybWl0cyB0byBkZWZpbmUgR1lQIHZhcmlhYmxlcyBidXQgaXMKLSMgYSBzdHJpY3RlciBmb3JtYXQgdGhhbiBHWVAgc28gaXNvbGF0ZS5weSBjYW4gcmVhZCBpdC4KLSMKLSMgVGhlIGdlbmVyYXRlZCAuaXNvbGF0ZWQgZmlsZSB3aWxsIGJlOgotIyAgIDwoUFJPRFVDVF9ESVIpL2Zvb190ZXN0Lmlzb2xhdGVkCi0jCi0jIFNlZSBodHRwOi8vZGV2LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL3Rlc3RpbmcvaXNvbGF0ZWQtdGVzdGluZy9mb3Itc3dlcwotIyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotewotICAncnVsZXMnOiBbCi0gICAgewotICAgICAgJ3J1bGVfbmFtZSc6ICdpc29sYXRlJywKLSAgICAgICdleHRlbnNpb24nOiAnaXNvbGF0ZScsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAjIEZpbGVzIHRoYXQgYXJlIGtub3duIHRvIGJlIGludm9sdmVkIGluIHRoaXMgc3RlcC4KLSAgICAgICAgJzwoREVQVEgpL3Rvb2xzL2lzb2xhdGVfZHJpdmVyLnB5JywKLSAgICAgICAgJzwoREVQVEgpL3Rvb2xzL3N3YXJtaW5nX2NsaWVudC9pc29sYXRlLnB5JywKLSAgICAgICAgJzwoREVQVEgpL3Rvb2xzL3N3YXJtaW5nX2NsaWVudC9ydW5faXNvbGF0ZWQucHknLAotICAgICAgXSwKLSAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAnPChQUk9EVUNUX0RJUikvPChSVUxFX0lOUFVUX1JPT1QpLmlzb2xhdGVkJywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9uJzogWwotICAgICAgICAncHl0aG9uJywKLSAgICAgICAgJzwoREVQVEgpL3Rvb2xzL2lzb2xhdGVfZHJpdmVyLnB5JywKLSAgICAgICAgJzwodGVzdF9pc29sYXRpb25fbW9kZSknLAotICAgICAgICAnLS1pc29sYXRlZCcsICc8KFBST0RVQ1RfRElSKS88KFJVTEVfSU5QVVRfUk9PVCkuaXNvbGF0ZWQnLAotICAgICAgICAnLS1pc29sYXRlJywgJzwoUlVMRV9JTlBVVF9QQVRIKScsCi0KLSAgICAgICAgIyBWYXJpYWJsZXMgc2hvdWxkIHVzZSB0aGUgLVYgRk9PPTwoRk9PKSBmb3JtIHNvIGZyZXF1ZW50IHZhbHVlcywKLSAgICAgICAgIyBsaWtlICcwJyBvciAnMScsIGFyZW4ndCBzdHJpcHBlZCBvdXQgYnkgR1lQLiBSdW4gJ2lzb2xhdGUucHkgaGVscCcKLSAgICAgICAgIyBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgICAgICMgUGF0aCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gcmVwbGFjZSBmaWxlIHBhdGhzIHdoZW4gbG9hZGluZyBhIC5pc29sYXRlCi0gICAgICAgICMgZmlsZQotICAgICAgICAnLS1wYXRoLXZhcmlhYmxlJywgJ0RFUFRIJywgJzwoREVQVEgpJywKLSAgICAgICAgJy0tcGF0aC12YXJpYWJsZScsICdQUk9EVUNUX0RJUicsICc8KFBST0RVQ1RfRElSKScsCi0KLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ0NPTkZJR1VSQVRJT05fTkFNRT08KENPTkZJR1VSQVRJT05fTkFNRSknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAnT1M9PChPUyknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAnYXNhbj08KGFzYW4pJywKLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ2NmaV92cHRyPTwoY2ZpX3ZwdHIpJywKLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ2djbW9sZT08KGdjbW9sZSknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAnaGFzX3ZhbGdyaW5kPTwoaGFzX3ZhbGdyaW5kKScsCi0gICAgICAgICctLWNvbmZpZy12YXJpYWJsZScsICdpY3VfdXNlX2RhdGFfZmlsZV9mbGFnPTwoaWN1X3VzZV9kYXRhX2ZpbGVfZmxhZyknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAnbXNhbj08KG1zYW4pJywKLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ3RzYW49PCh0c2FuKScsCi0gICAgICAgICctLWNvbmZpZy12YXJpYWJsZScsICdjb3ZlcmFnZT08KGNvdmVyYWdlKScsCi0gICAgICAgICctLWNvbmZpZy12YXJpYWJsZScsICdzYW5pdGl6ZXJfY292ZXJhZ2U9PChzYW5pdGl6ZXJfY292ZXJhZ2UpJywKLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ2NvbXBvbmVudD08KGNvbXBvbmVudCknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAndGFyZ2V0X2FyY2g9PCh0YXJnZXRfYXJjaCknLAotICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAndWJzYW5fdnB0cj0wJywKLSAgICAgICAgJy0tY29uZmlnLXZhcmlhYmxlJywgJ3Y4X3VzZV9leHRlcm5hbF9zdGFydHVwX2RhdGE9PCh2OF91c2VfZXh0ZXJuYWxfc3RhcnR1cF9kYXRhKScsCi0gICAgICAgICctLWNvbmZpZy12YXJpYWJsZScsICd2OF91c2Vfc25hcHNob3Q9PCh2OF91c2Vfc25hcHNob3QpJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICctLWNvbmZpZy12YXJpYWJsZScsICdtc3ZzX3ZlcnNpb249MjAxMycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAnLS1jb25maWctdmFyaWFibGUnLCAnbXN2c192ZXJzaW9uPTAnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICBdLAotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvbGFuZG1pbmVfdXRpbHMucHkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9sYW5kbWluZV91dGlscy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJkYzJiNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9sYW5kbWluZV91dGlscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0jIENvcHlyaWdodCAyMDE0IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotCi1pbXBvcnQgZnVuY3Rvb2xzCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgc2hsZXgKLWltcG9ydCBzeXMKLQotCi1kZWYgbWVtb2l6ZShkZWZhdWx0PU5vbmUpOgotICAiIiJUaGlzIGRlY29yYXRvciBjYWNoZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHBhcmFtZXRlcmxlc3MgcHVyZSBmdW5jdGlvbiIiIgotICBkZWYgbWVtb2l6ZXIoZnVuYyk6Ci0gICAgdmFsID0gW10KLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIGlubmVyKCk6Ci0gICAgICBpZiBub3QgdmFsOgotICAgICAgICByZXQgPSBmdW5jKCkKLSAgICAgICAgdmFsLmFwcGVuZChyZXQgaWYgcmV0IGlzIG5vdCBOb25lIGVsc2UgZGVmYXVsdCkKLSAgICAgICAgaWYgbG9nZ2luZy5nZXRMb2dnZXIoKS5pc0VuYWJsZWRGb3IobG9nZ2luZy5JTkZPKToKLSAgICAgICAgICBwcmludCAnJXMgLT4gJXInICUgKGZ1bmMuX19uYW1lX18sIHZhbFswXSkKLSAgICAgIHJldHVybiB2YWxbMF0KLSAgICByZXR1cm4gaW5uZXIKLSAgcmV0dXJuIG1lbW9pemVyCi0KLQotQG1lbW9pemUoKQotZGVmIElzV2luZG93cygpOgotICByZXR1cm4gc3lzLnBsYXRmb3JtIGluIFsnd2luMzInLCAnY3lnd2luJ10KLQotCi1AbWVtb2l6ZSgpCi1kZWYgSXNMaW51eCgpOgotICByZXR1cm4gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCdsaW51eCcsICdmcmVlYnNkJykpCi0KLQotQG1lbW9pemUoKQotZGVmIElzTWFjKCk6Ci0gIHJldHVybiBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKLQotCi1AbWVtb2l6ZSgpCi1kZWYgZ3lwX2RlZmluZXMoKToKLSAgIiIiUGFyc2VzIGFuZCByZXR1cm5zIEdZUF9ERUZJTkVTIGVudiB2YXIgYXMgYSBkaWN0aW9uYXJ5LiIiIgotICByZXR1cm4gZGljdChhcmcuc3BsaXQoJz0nLCAxKQotICAgICAgZm9yIGFyZyBpbiBzaGxleC5zcGxpdChvcy5lbnZpcm9uLmdldCgnR1lQX0RFRklORVMnLCAnJykpKQotCi0KLUBtZW1vaXplKCkKLWRlZiBneXBfZ2VuZXJhdG9yX2ZsYWdzKCk6Ci0gICIiIlBhcnNlcyBhbmQgcmV0dXJucyBHWVBfR0VORVJBVE9SX0ZMQUdTIGVudiB2YXIgYXMgYSBkaWN0aW9uYXJ5LiIiIgotICByZXR1cm4gZGljdChhcmcuc3BsaXQoJz0nLCAxKQotICAgICAgZm9yIGFyZyBpbiBzaGxleC5zcGxpdChvcy5lbnZpcm9uLmdldCgnR1lQX0dFTkVSQVRPUl9GTEFHUycsICcnKSkpCi0KLQotQG1lbW9pemUoKQotZGVmIGd5cF9tc3ZzX3ZlcnNpb24oKToKLSAgcmV0dXJuIG9zLmVudmlyb24uZ2V0KCdHWVBfTVNWU19WRVJTSU9OJywgJycpCi0KLQotQG1lbW9pemUoKQotZGVmIGRpc3RyaWJ1dG9yKCk6Ci0gICIiIgotICBSZXR1cm5zIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBkaXN0cmlidXRlZCBidWlsZCBlbmdpbmUgaW4gdXNlIChpZiBhbnkpLgotICBQb3NzaWJsZSB2YWx1ZXM6ICdnb21hJywgJ2liJywgJycKLSAgIiIiCi0gIGlmICdnb21hJyBpbiBneXBfZGVmaW5lcygpOgotICAgIHJldHVybiAnZ29tYScKLSAgZWxpZiBJc1dpbmRvd3MoKToKLSAgICBpZiAnQ0hST01FX0hFQURMRVNTJyBpbiBvcy5lbnZpcm9uOgotICAgICAgcmV0dXJuICdpYicgIyB1c2UgKHdpbiBhbmQgIWdvbWEgYW5kIGhlYWRsZXNzKSBhcyBhcHByb3hpbWF0aW9uIG9mIGliCi0KLQotQG1lbW9pemUoKQotZGVmIHBsYXRmb3JtKCk6Ci0gICIiIgotICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGxhdGZvcm0gdGhpcyBidWlsZCBpcyB0YXJnZXRlZCBmb3IuCi0gIFBvc3NpYmxlIHZhbHVlczogJ3dpbicsICdtYWMnLCAnbGludXgnLCAnaW9zJywgJ2FuZHJvaWQnCi0gICIiIgotICBpZiAnT1MnIGluIGd5cF9kZWZpbmVzKCk6Ci0gICAgaWYgJ2FuZHJvaWQnIGluIGd5cF9kZWZpbmVzKClbJ09TJ106Ci0gICAgICByZXR1cm4gJ2FuZHJvaWQnCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBneXBfZGVmaW5lcygpWydPUyddCi0gIGVsaWYgSXNXaW5kb3dzKCk6Ci0gICAgcmV0dXJuICd3aW4nCi0gIGVsaWYgSXNMaW51eCgpOgotICAgIHJldHVybiAnbGludXgnCi0gIGVsc2U6Ci0gICAgcmV0dXJuICdtYWMnCi0KLQotQG1lbW9pemUoKQotZGVmIGJ1aWxkZXIoKToKLSAgIiIiCi0gIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBidWlsZCBlbmdpbmUgKG5vdCBjb21waWxlcikgdG8gdXNlLgotICBQb3NzaWJsZSB2YWx1ZXM6ICdtYWtlJywgJ25pbmphJywgJ3hjb2RlJywgJ21zdnMnLCAnc2NvbnMnCi0gICIiIgotICBpZiAnR1lQX0dFTkVSQVRPUlMnIGluIG9zLmVudmlyb246Ci0gICAgIyBmb3Igc2ltcGxpY2l0eSwgb25seSBzdXBwb3J0IHRoZSBmaXJzdCBleHBsaWNpdCBnZW5lcmF0b3IKLSAgICBnZW5lcmF0b3IgPSBvcy5lbnZpcm9uWydHWVBfR0VORVJBVE9SUyddLnNwbGl0KCcsJylbMF0KLSAgICBpZiBnZW5lcmF0b3IuZW5kc3dpdGgoJy1hbmRyb2lkJyk6Ci0gICAgICByZXR1cm4gZ2VuZXJhdG9yLnNwbGl0KCctJylbMF0KLSAgICBlbGlmIGdlbmVyYXRvci5lbmRzd2l0aCgnLW5pbmphJyk6Ci0gICAgICByZXR1cm4gJ25pbmphJwotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gZ2VuZXJhdG9yCi0gIGVsc2U6Ci0gICAgaWYgcGxhdGZvcm0oKSA9PSAnYW5kcm9pZCc6Ci0gICAgICAjIEdvb2QgZW5vdWdoIGZvciBub3c/IERvIGFueSBhbmRyb2lkIGJvdHMgdXNlIG1ha2U/Ci0gICAgICByZXR1cm4gJ21ha2UnCi0gICAgZWxpZiBwbGF0Zm9ybSgpID09ICdpb3MnOgotICAgICAgcmV0dXJuICd4Y29kZScKLSAgICBlbGlmIElzV2luZG93cygpOgotICAgICAgcmV0dXJuICdtc3ZzJwotICAgIGVsaWYgSXNMaW51eCgpOgotICAgICAgcmV0dXJuICdtYWtlJwotICAgIGVsaWYgSXNNYWMoKToKLSAgICAgIHJldHVybiAneGNvZGUnCi0gICAgZWxzZToKLSAgICAgIGFzc2VydCBGYWxzZSwgJ0RvblwndCBrbm93IHdoYXQgYnVpbGRlciB3ZVwncmUgdXNpbmchJwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvbGFuZG1pbmVzLnB5IGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvbGFuZG1pbmVzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYTgxYzY2Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL2xhbmRtaW5lcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMTQgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIKLVRoaXMgc2NyaXB0IHJ1bnMgZXZlcnkgYnVpbGQgYXMgdGhlIGZpcnN0IGhvb2sgKFNlZSBERVBTKS4gSWYgaXQgZGV0ZWN0cyB0aGF0Ci10aGUgYnVpbGQgc2hvdWxkIGJlIGNsb2JiZXJlZCwgaXQgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWlsZAotZGlyZWN0b3J5LgotCi1BIGxhbmRtaW5lIGlzIHRyaXBwZWQgd2hlbiBhIGJ1aWxkZXIgY2hlY2tzIG91dCBhIGRpZmZlcmVudCByZXZpc2lvbiwgYW5kIHRoZQotZGlmZiBiZXR3ZWVuIHRoZSBuZXcgbGFuZG1pbmVzIGFuZCB0aGUgb2xkIG9uZXMgaXMgbm9uLW51bGwuIEF0IHRoaXMgcG9pbnQsIHRoZQotYnVpbGQgaXMgY2xvYmJlcmVkLgotIiIiCi0KLWltcG9ydCBkaWZmbGliCi1pbXBvcnQgZXJybm8KLWltcG9ydCBneXBfZW52aXJvbm1lbnQKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRpbWUKLQotaW1wb3J0IGxhbmRtaW5lX3V0aWxzCi0KLQotU1JDX0RJUiA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQotCi0KLWRlZiBnZXRfYnVpbGRfZGlyKGJ1aWxkX3Rvb2wsIGlzX2lwaG9uZT1GYWxzZSk6Ci0gICIiIgotICBSZXR1cm5zIG91dHB1dCBkaXJlY3RvcnkgYWJzb2x1dGUgcGF0aCBkZXBlbmRlbnQgb24gYnVpbGQgYW5kIHRhcmdldHMuCi0gIEV4YW1wbGVzOgotICAgIHInYzpcYlxidWlsZFxzbGF2ZVx3aW5cYnVpbGRcc3JjXG91dCcKLSAgICAnL21udC9kYXRhL2IvYnVpbGQvc2xhdmUvbGludXgvYnVpbGQvc3JjL291dCcKLSAgICAnL2IvYnVpbGQvc2xhdmUvaW9zX3JlbF9kZXZpY2UvYnVpbGQvc3JjL3hjb2RlYnVpbGQnCi0KLSAgS2VlcCB0aGlzIGZ1bmN0aW9uIGluIHN5bmMgd2l0aCB0b29scy9idWlsZC9zY3JpcHRzL3NsYXZlL2NvbXBpbGUucHkKLSAgIiIiCi0gIHJldCA9IE5vbmUKLSAgaWYgYnVpbGRfdG9vbCA9PSAneGNvZGUnOgotICAgIHJldCA9IG9zLnBhdGguam9pbihTUkNfRElSLCAneGNvZGVidWlsZCcpCi0gIGVsaWYgYnVpbGRfdG9vbCBpbiBbJ21ha2UnLCAnbmluamEnLCAnbmluamEtaW9zJ106ICAjIFRPRE86IFJlbW92ZSBuaW5qYS1pb3MuCi0gICAgaWYgJ0NIUk9NSVVNX09VVF9ESVInIGluIG9zLmVudmlyb246Ci0gICAgICBvdXRwdXRfZGlyID0gb3MuZW52aXJvbi5nZXQoJ0NIUk9NSVVNX09VVF9ESVInKS5zdHJpcCgpCi0gICAgICBpZiBub3Qgb3V0cHV0X2RpcjoKLSAgICAgICAgcmFpc2UgRXJyb3IoJ0NIUk9NSVVNX09VVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IGJ1dCBibGFuayEnKQotICAgIGVsc2U6Ci0gICAgICBvdXRwdXRfZGlyID0gbGFuZG1pbmVfdXRpbHMuZ3lwX2dlbmVyYXRvcl9mbGFncygpLmdldCgnb3V0cHV0X2RpcicsICdvdXQnKQotICAgIHJldCA9IG9zLnBhdGguam9pbihTUkNfRElSLCBvdXRwdXRfZGlyKQotICBlbGlmIGJ1aWxkX3Rvb2wgaW4gWydtc3ZzJywgJ3ZzJywgJ2liJ106Ci0gICAgcmV0ID0gb3MucGF0aC5qb2luKFNSQ19ESVIsICdidWlsZCcpCi0gIGVsc2U6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVW5leHBlY3RlZCBHWVBfR0VORVJBVE9SUyAoJXMpJyAlIGJ1aWxkX3Rvb2wpCi0gIHJldHVybiBvcy5wYXRoLmFic3BhdGgocmV0KQotCi0KLWRlZiBleHRyYWN0X2duX2J1aWxkX2NvbW1hbmRzKGJ1aWxkX25pbmphX2ZpbGUpOgotICAiIiJFeHRyYWN0cyBmcm9tIGEgYnVpbGQubmluamEgdGhlIGNvbW1hbmRzIHRvIHJ1biBHTi4KLQotICBUaGUgY29tbWFuZHMgdG8gcnVuIEdOIGFyZSB0aGUgZ24gcnVsZSBhbmQgYnVpbGQubmluamEgYnVpbGQgc3RlcCBhdCB0aGUKLSAgdG9wIG9mIHRoZSBidWlsZC5uaW5qYSBmaWxlLiBXZSB3YW50IHRvIGtlZXAgdGhlc2Ugd2hlbiBkZWxldGluZyBHTiBidWlsZHMKLSAgc2luY2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgY29tbWFuZC1saW5lIGZsYWdzIHRvIEdOLgotCi0gIE9uIGVycm9yLCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuIiIiCi0gIHJlc3VsdCA9ICIiCi0gIHdpdGggb3BlbihidWlsZF9uaW5qYV9maWxlLCAncicpIGFzIGY6Ci0gICAgIyBSZWFkIHVudGlsIHRoZSBzZWNvbmQgYmxhbmsgbGluZS4gVGhlIGZpcnN0IHRoaW5nIEdOIHdyaXRlcyB0byB0aGUgZmlsZQotICAgICMgaXMgdGhlICJydWxlIGduIiBhbmQgdGhlIHNlY29uZCBpcyB0aGUgc2VjdGlvbiBmb3IgImJ1aWxkIGJ1aWxkLm5pbmphIiwKLSAgICAjIHNlcGFyYXRlZCBieSBibGFuayBsaW5lcy4KLSAgICBudW1fYmxhbmtfbGluZXMgPSAwCi0gICAgd2hpbGUgbnVtX2JsYW5rX2xpbmVzIDwgMjoKLSAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgotICAgICAgICByZXR1cm4gJycgICMgVW5leHBlY3RlZCBFT0YuCi0gICAgICByZXN1bHQgKz0gbGluZQotICAgICAgaWYgbGluZVswXSA9PSAnXG4nOgotICAgICAgICBudW1fYmxhbmtfbGluZXMgPSBudW1fYmxhbmtfbGluZXMgKyAxCi0gIHJldHVybiByZXN1bHQKLQotZGVmIGRlbGV0ZV9idWlsZF9kaXIoYnVpbGRfZGlyKToKLSAgIyBHTiB3cml0ZXMgYSBidWlsZC5uaW5qYS5kIGZpbGUuIE5vdGUgdGhhdCBub3QgYWxsIEdOIGJ1aWxkcyBoYXZlIGFyZ3MuZ24uCi0gIGJ1aWxkX25pbmphX2RfZmlsZSA9IG9zLnBhdGguam9pbihidWlsZF9kaXIsICdidWlsZC5uaW5qYS5kJykKLSAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJ1aWxkX25pbmphX2RfZmlsZSk6Ci0gICAgc2h1dGlsLnJtdHJlZShidWlsZF9kaXIpCi0gICAgcmV0dXJuCi0KLSAgIyBHTiBidWlsZHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQgd2hlbiB5b3Ugc3luYy4gVG8gYXZvaWQKLSAgIyBtZXNzaW5nIHdpdGggdGhlIEdOIHdvcmtmbG93LCBlcmFzZSBldmVyeXRoaW5nIGJ1dCB0aGUgYXJncyBmaWxlLCBhbmQKLSAgIyB3cml0ZSBhIGR1bW15IGJ1aWxkLm5pbmphIGZpbGUgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVydW4gR04gdGhlIG5leHQKLSAgIyB0aW1lIE5pbmphIGlzIHJ1bi4KLSAgYnVpbGRfbmluamFfZmlsZSA9IG9zLnBhdGguam9pbihidWlsZF9kaXIsICdidWlsZC5uaW5qYScpCi0gIGJ1aWxkX2NvbW1hbmRzID0gZXh0cmFjdF9nbl9idWlsZF9jb21tYW5kcyhidWlsZF9uaW5qYV9maWxlKQotCi0gIHRyeToKLSAgICBnbl9hcmdzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCAnYXJncy5nbicpCi0gICAgd2l0aCBvcGVuKGduX2FyZ3NfZmlsZSwgJ3InKSBhcyBmOgotICAgICAgYXJnc19jb250ZW50cyA9IGYucmVhZCgpCi0gIGV4Y2VwdCBJT0Vycm9yOgotICAgIGFyZ3NfY29udGVudHMgPSAnJwotCi0gIHNodXRpbC5ybXRyZWUoYnVpbGRfZGlyKQotCi0gICMgUHV0IGJhY2sgdGhlIGFyZ3MgZmlsZSAoaWYgYW55KS4KLSAgb3MubWtkaXIoYnVpbGRfZGlyKQotICBpZiBhcmdzX2NvbnRlbnRzICE9ICcnOgotICAgIHdpdGggb3Blbihnbl9hcmdzX2ZpbGUsICd3JykgYXMgZjoKLSAgICAgIGYud3JpdGUoYXJnc19jb250ZW50cykKLQotICAjIFdyaXRlIHRoZSBidWlsZC5uaW5qYSBmaWxlIHN1ZmZpY2llbnRseSB0byByZWdlbmVyYXRlIGl0c2VsZi4KLSAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihidWlsZF9kaXIsICdidWlsZC5uaW5qYScpLCAndycpIGFzIGY6Ci0gICAgaWYgYnVpbGRfY29tbWFuZHMgIT0gJyc6Ci0gICAgICBmLndyaXRlKGJ1aWxkX2NvbW1hbmRzKQotICAgIGVsc2U6Ci0gICAgICAjIENvdWxkbid0IHBhcnNlIHRoZSBidWlsZC5uaW5qYSBmaWxlLCB3cml0ZSBhIGRlZmF1bHQgdGhpbmcuCi0gICAgICBmLndyaXRlKCcnJ3J1bGUgZ24KLWNvbW1hbmQgPSBnbiAtcSBnZW4gLy9vdXQvJXMvCi1kZXNjcmlwdGlvbiA9IFJlZ2VuZXJhdGluZyBuaW5qYSBmaWxlcwotCi1idWlsZCBidWlsZC5uaW5qYTogZ24KLWdlbmVyYXRvciA9IDEKLWRlcGZpbGUgPSBidWlsZC5uaW5qYS5kCi0nJycgJSAob3MucGF0aC5zcGxpdChidWlsZF9kaXIpWzFdKSkKLQotICAjIFdyaXRlIGEgLmQgZmlsZSBmb3IgdGhlIGJ1aWxkIHdoaWNoIHJlZmVyZW5jZXMgYSBub25leGlzdGFudCBmaWxlLiBUaGlzCi0gICMgd2lsbCBtYWtlIE5pbmphIGFsd2F5cyBtYXJrIHRoZSBidWlsZCBhcyBkaXJ0eS4KLSAgd2l0aCBvcGVuKGJ1aWxkX25pbmphX2RfZmlsZSwgJ3cnKSBhcyBmOgotICAgIGYud3JpdGUoJ2J1aWxkLm5pbmphOiBub25leGlzdGFudF9maWxlLmduXG4nKQotCi0KLWRlZiBuZWVkc19jbG9iYmVyKGxhbmRtaW5lc19wYXRoLCBuZXdfbGFuZG1pbmVzKToKLSAgaWYgb3MucGF0aC5leGlzdHMobGFuZG1pbmVzX3BhdGgpOgotICAgIHdpdGggb3BlbihsYW5kbWluZXNfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgb2xkX2xhbmRtaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICBpZiBvbGRfbGFuZG1pbmVzICE9IG5ld19sYW5kbWluZXM6Ci0gICAgICBvbGRfZGF0ZSA9IHRpbWUuY3RpbWUob3Muc3RhdChsYW5kbWluZXNfcGF0aCkuc3RfY3RpbWUpCi0gICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYob2xkX2xhbmRtaW5lcywgbmV3X2xhbmRtaW5lcywKLSAgICAgICAgICBmcm9tZmlsZT0nb2xkX2xhbmRtaW5lcycsIHRvZmlsZT0nbmV3X2xhbmRtaW5lcycsCi0gICAgICAgICAgZnJvbWZpbGVkYXRlPW9sZF9kYXRlLCB0b2ZpbGVkYXRlPXRpbWUuY3RpbWUoKSwgbj0wKQotICAgICAgc3lzLnN0ZG91dC53cml0ZSgnQ2xvYmJlcmluZyBkdWUgdG86XG4nKQotICAgICAgc3lzLnN0ZG91dC53cml0ZWxpbmVzKGRpZmYpCi0gICAgICByZXR1cm4gVHJ1ZQotICBlbHNlOgotICAgIHN5cy5zdGRvdXQud3JpdGUoJ0Nsb2JiZXJpbmcgZHVlIHRvIG1pc3NpbmcgbGFuZG1pbmVzIGZpbGUuXG4nKQotICAgIHJldHVybiBUcnVlCi0gIHJldHVybiBGYWxzZQotCi0KLWRlZiBjbG9iYmVyX2lmX25lY2Vzc2FyeShuZXdfbGFuZG1pbmVzKToKLSAgIiIiRG9lcyB0aGUgd29yayBvZiBzZXR0aW5nLCBwbGFudGluZywgYW5kIHRyaWdnZXJpbmcgbGFuZG1pbmVzLiIiIgotICBvdXRfZGlyID0gZ2V0X2J1aWxkX2RpcihsYW5kbWluZV91dGlscy5idWlsZGVyKCkpCi0gIGxhbmRtaW5lc19wYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3V0X2RpciwgJy4uJywgJy5sYW5kbWluZXMnKSkKLSAgdHJ5OgotICAgIG9zLm1ha2VkaXJzKG91dF9kaXIpCi0gIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Q6Ci0gICAgICBwYXNzCi0KLSAgaWYgbmVlZHNfY2xvYmJlcihsYW5kbWluZXNfcGF0aCwgbmV3X2xhbmRtaW5lcyk6Ci0gICAgIyBDbG9iYmVyIGNvbnRlbnRzIG9mIGJ1aWxkIGRpcmVjdG9yeSBidXQgbm90IGRpcmVjdG9yeSBpdHNlbGY6IHNvbWUKLSAgICAjIGNoZWNrb3V0cyBoYXZlIHRoZSBidWlsZCBkaXJlY3RvcnkgbW91bnRlZC4KLSAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKG91dF9kaXIpOgotICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvdXRfZGlyLCBmKQotICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShvdXRfZGlyKSA9PSAnYnVpbGQnOgotICAgICAgICAjIE9ubHkgZGVsZXRlIGJ1aWxkIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBmb3IgTVNWUyBidWlsZHMgYXMgdGhlIGZvbGRlcgotICAgICAgICAjIHNoYXJlcyBzb21lIGNoZWNrZWQgb3V0IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KLSAgICAgICAgaWYgKG9zLnBhdGguaXNkaXIocGF0aCkgYW5kCi0gICAgICAgICAgICByZS5zZWFyY2gocicoPzpbUnJdZWxlYXNlKXwoPzpbRGRdZWJ1ZyknLCBmKSk6Ci0gICAgICAgICAgZGVsZXRlX2J1aWxkX2RpcihwYXRoKQotICAgICAgICBlbGlmIChvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQKLSAgICAgICAgICAgICAgKHBhdGguZW5kc3dpdGgoJy5zbG4nKSBvcgotICAgICAgICAgICAgICAgcGF0aC5lbmRzd2l0aCgnLnZjeHByb2onKSBvcgotICAgICAgICAgICAgICAgcGF0aC5lbmRzd2l0aCgnLnZjeHByb2oudXNlcicpKSk6Ci0gICAgICAgICAgb3MudW5saW5rKHBhdGgpCi0gICAgICBlbHNlOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICBvcy51bmxpbmsocGF0aCkKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgIGRlbGV0ZV9idWlsZF9kaXIocGF0aCkKLSAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKG91dF9kaXIpID09ICd4Y29kZWJ1aWxkJzoKLSAgICAgICMgWGNvZGVidWlsZCBwdXRzIGFuIGFkZGl0aW9uYWwgcHJvamVjdCBmaWxlIHN0cnVjdHVyZSBpbnRvIGJ1aWxkLAotICAgICAgIyB3aGlsZSB0aGUgb3V0cHV0IGZvbGRlciBpcyB4Y29kZWJ1aWxkLgotICAgICAgcHJvamVjdF9kaXIgPSBvcy5wYXRoLmpvaW4oU1JDX0RJUiwgJ2J1aWxkJywgJ2FsbC54Y29kZXByb2onKQotICAgICAgaWYgb3MucGF0aC5leGlzdHMocHJvamVjdF9kaXIpIGFuZCBvcy5wYXRoLmlzZGlyKHByb2plY3RfZGlyKToKLSAgICAgICAgZGVsZXRlX2J1aWxkX2Rpcihwcm9qZWN0X2RpcikKLQotICAjIFNhdmUgY3VycmVudCBzZXQgb2YgbGFuZG1pbmVzIGZvciBuZXh0IHRpbWUuCi0gIHdpdGggb3BlbihsYW5kbWluZXNfcGF0aCwgJ3cnKSBhcyBmOgotICAgIGYud3JpdGVsaW5lcyhuZXdfbGFuZG1pbmVzKQotCi0KLWRlZiBwcm9jZXNzX29wdGlvbnMoKToKLSAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgbGFuZG1pbmUgZW1pdHRpbmcgc2NyaXB0cy4iIiIKLSAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLXMnLCAnLS1sYW5kbWluZS1zY3JpcHRzJywgYWN0aW9uPSdhcHBlbmQnLAotICAgICAgZGVmYXVsdD1bb3MucGF0aC5qb2luKFNSQ19ESVIsICdneXBmaWxlcycsICdnZXRfbGFuZG1pbmVzLnB5JyldLAotICAgICAgaGVscD0nUGF0aCB0byB0aGUgc2NyaXB0IHdoaWNoIGVtaXRzIGxhbmRtaW5lcyB0byBzdGRvdXQuIFRoZSB0YXJnZXQgJwotICAgICAgICAgICAnaXMgcGFzc2VkIHRvIHRoaXMgc2NyaXB0IHZpYSBvcHRpb24gLXQuIE5vdGUgdGhhdCBhbiBleHRyYSAnCi0gICAgICAgICAgICdzY3JpcHQgY2FuIGJlIHNwZWNpZmllZCB2aWEgYW4gZW52IHZhciBFWFRSQV9MQU5ETUlORVNfU0NSSVBULicpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgZGVmYXVsdD0oJ0xBTkRNSU5FU19WRVJCT1NFJyBpbiBvcy5lbnZpcm9uKSwKLSAgICAgIGhlbHA9KCdFbWl0IHNvbWUgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIChkZWZhdWx0IG9mZikuIFRoaXMgb3B0aW9uICcKLSAgICAgICAgICAnaXMgYWxzbyBlbmFibGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBhIExBTkRNSU5FU19WRVJCT1NFIGVudmlyb25tZW50ICcKLSAgICAgICAgICAndmFyaWFibGUuJykpCi0KLSAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICBpZiBhcmdzOgotICAgIHBhcnNlci5lcnJvcignVW5rbm93biBhcmd1bWVudHMgJXMnICUgYXJncykKLQotICBsb2dnaW5nLmJhc2ljQ29uZmlnKAotICAgICAgbGV2ZWw9bG9nZ2luZy5ERUJVRyBpZiBvcHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLkVSUk9SKQotCi0gIGV4dHJhX3NjcmlwdCA9IG9zLmVudmlyb24uZ2V0KCdFWFRSQV9MQU5ETUlORVNfU0NSSVBUJykKLSAgaWYgZXh0cmFfc2NyaXB0OgotICAgIHJldHVybiBvcHRpb25zLmxhbmRtaW5lX3NjcmlwdHMgKyBbZXh0cmFfc2NyaXB0XQotICBlbHNlOgotICAgIHJldHVybiBvcHRpb25zLmxhbmRtaW5lX3NjcmlwdHMKLQotCi1kZWYgbWFpbigpOgotICBsYW5kbWluZV9zY3JpcHRzID0gcHJvY2Vzc19vcHRpb25zKCkKLQotICBpZiBsYW5kbWluZV91dGlscy5idWlsZGVyKCkgaW4gKCdkdW1wX2RlcGVuZGVuY3lfanNvbicsICdlY2xpcHNlJyk6Ci0gICAgcmV0dXJuIDAKLQotICBneXBfZW52aXJvbm1lbnQuc2V0X2Vudmlyb25tZW50KCkKLQotICBsYW5kbWluZXMgPSBbXQotICBmb3IgcyBpbiBsYW5kbWluZV9zY3JpcHRzOgotICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgc10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgb3V0cHV0LCBfID0gcHJvYy5jb21tdW5pY2F0ZSgpCi0gICAgbGFuZG1pbmVzLmV4dGVuZChbKCclc1xuJyAlIGwuc3RyaXAoKSkgZm9yIGwgaW4gb3V0cHV0LnNwbGl0bGluZXMoKV0pCi0gIGNsb2JiZXJfaWZfbmVjZXNzYXJ5KGxhbmRtaW5lcykKLQotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL21hYy9hc2FuLmd5cCBiL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL21hYy9hc2FuLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZjN2Y1OC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9tYWMvYXNhbi5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAgJ3RhcmdldHMnOiBbCi0gICAgIHsKLSAgICAgICAndGFyZ2V0X25hbWUnOiAnYXNhbl9keW5hbWljX3J1bnRpbWUnLAotICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0JywgJ2hvc3QnXSwKLSAgICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgIyBFdmVyeSB0YXJnZXQgaXMgZ29pbmcgdG8gZGVwZW5kIG9uIGFzYW5fZHluYW1pY19ydW50aW1lLCBzbyBhbGxvdwotICAgICAgICAgIyB0aGlzIG9uZSB0byBkZXBlbmQgb24gaXRzZWxmLgotICAgICAgICAgJ3BydW5lX3NlbGZfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAgICAjIFBhdGggaXMgcmVsYXRpdmUgdG8gdGhpcyBHWVAgZmlsZS4KLSAgICAgICAgICdhc2FuX3J0bF9tYXNrX3BhdGgnOgotICAgICAgICAgICAgICcuLi8uLi90aGlyZF9wYXJ0eS9sbHZtLWJ1aWxkL1JlbGVhc2UrQXNzZXJ0cy9saWIvY2xhbmcvKi9saWIvZGFyd2luJywKLSAgICAgICAgICdhc2FuX29zeF9keW5hbWljJzoKLSAgICAgICAgICAgICAnPChhc2FuX3J0bF9tYXNrX3BhdGgpL2xpYmNsYW5nX3J0LmFzYW5fb3N4X2R5bmFtaWMuZHlsaWInLAotICAgICAgIH0sCi0gICAgICAgJ2NvcGllcyc6IFsKLSAgICAgICAgIHsKLSAgICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIpJywKLSAgICAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICAgICc8ISgvYmluL2xzIDwoYXNhbl9vc3hfZHluYW1pYykpJywKLSAgICAgICAgICAgXSwKLSAgICAgICAgIH0sCi0gICAgICAgXSwKLSAgICAgfSwKLSAgIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9ydW4tdGVzdHMtbGVnYWN5LnB5IGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvcnVuLXRlc3RzLWxlZ2FjeS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjFlYTQ3OC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9ydW4tdGVzdHMtbGVnYWN5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE3IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiCi1MZWdhY3kgdGVzdC1ydW5uZXIgd3JhcHBlciBzdXBwb3J0aW5nIGEgcHJvZHVjdCBvZiBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGFuZAotbW9kZXMuCi0iIiIKLQotaW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgaXRlcnRvb2xzCi1mcm9tIG9zLnBhdGggaW1wb3J0IGFic3BhdGgsIGRpcm5hbWUsIGpvaW4KLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLUJBU0VfRElSID0gZGlybmFtZShkaXJuYW1lKGFic3BhdGgoX19maWxlX18pKSkKLVJVTl9URVNUUyA9IGpvaW4oQkFTRV9ESVIsICd0b29scycsICdydW4tdGVzdHMucHknKQotCi1kZWYgbWFpbigpOgotICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nTGVnYWN5IHRlc3QtcnVubmVyIHdyYXBwZXInKQotICBwYXJzZXIuYWRkX2FyZ3VtZW50KAotICAgICAgJy0tYXJjaCcsIGhlbHA9J0NvbW1hLXNlcGFyYXRlZCBhcmNoaXRlY3R1cmVzIHRvIHJ1biB0ZXN0cyBvbicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1tb2RlJywgaGVscD0nQ29tbWEtc2VwYXJhdGVkIG1vZGVzIHRvIHJ1biB0ZXN0cyBvbicpCi0gIHBhcnNlci5hZGRfYXJndW1lbnQoCi0gICAgICAnLS1hcmNoLWFuZC1tb2RlJywKLSAgICAgIGhlbHA9J0FyY2hpdGVjdHVyZSBhbmQgbW9kZSBpbiB0aGUgZm9ybWF0IFwnYXJjaC5tb2RlXCcnLAotICApCi0KLSAgYXJncywgcmVtYWluaW5nX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhzeXMuYXJndikKLSAgaWYgKGFyZ3MuYXJjaCBvciBhcmdzLm1vZGUpIGFuZCBhcmdzLmFyY2hfYW5kX21vZGU6Ci0gICAgcGFyc2VyLmVycm9yKCdUaGUgZmxhZ3MgLS1hcmNoLWFuZC1tb2RlIGFuZCAtLWFyY2gvLS1tb2RlIGFyZSBleGNsdXNpdmUuJykKLSAgYXJjaCA9IChhcmdzLmFyY2ggb3IgJ2lhMzIseDY0LGFybScpLnNwbGl0KCcsJykKLSAgbW9kZSA9IChhcmdzLm1vZGUgb3IgJ3JlbGVhc2UsZGVidWcnKS5zcGxpdCgnLCcpCi0gIGlmIGFyZ3MuYXJjaF9hbmRfbW9kZToKLSAgICBhcmNoX2FuZF9tb2RlID0gbWFwKAotICAgICAgICBsYW1iZGEgYW06IGFtLnNwbGl0KCcuJyksCi0gICAgICAgIGFyZ3MuYXJjaF9hbmRfbW9kZS5zcGxpdCgnLCcpKQotICAgIGFyY2ggPSBtYXAobGFtYmRhIGFtOiBhbVswXSwgYXJjaF9hbmRfbW9kZSkKLSAgICBtb2RlID0gbWFwKGxhbWJkYSBhbTogYW1bMV0sIGFyY2hfYW5kX21vZGUpCi0KLSAgcmV0X2NvZGUgPSAwCi0gIGZvciBhLCBtIGluIGl0ZXJ0b29scy5wcm9kdWN0KGFyY2gsIG1vZGUpOgotICAgIHJldF9jb2RlIHw9IHN1YnByb2Nlc3MuY2hlY2tfY2FsbCgKLSAgICAgICAgW1JVTl9URVNUU10gKyByZW1haW5pbmdfYXJnc1sxOl0gKyBbJy0tYXJjaCcsIGEsICctLW1vZGUnLCBtXSkKLSAgcmV0dXJuIHJldF9jb2RlCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3NldF9jbGFuZ193YXJuaW5nX2ZsYWdzLmd5cGkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9zZXRfY2xhbmdfd2FybmluZ19mbGFncy5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Q1ZjE0Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3NldF9jbGFuZ193YXJuaW5nX2ZsYWdzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCB0byBzZXQgY2xhbmctc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MuCi0jIFRvIHVzZSB0aGlzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgY2FuIGJlIGRlZmluZWQ6Ci0jICAgY2xhbmdfd2FybmluZ19mbGFnczogICAgICAgbGlzdDogQ29tcGlsZXIgZmxhZ3MgdG8gcGFzcyB0byBjbGFuZy4KLSMgICBjbGFuZ193YXJuaW5nX2ZsYWdzX3Vuc2V0OiBsaXN0OiBDb21waWxlciBmbGFncyB0byBub3QgcGFzcyB0byBjbGFuZy4KLSMKLSMgT25seSB1c2UgdGhpcyBpbiB0aGlyZC1wYXJ0eSBjb2RlLiBJbiBjaHJvbWl1bV9jb2RlLCBmaXggeW91ciBjb2RlIHRvIG5vdAotIyB3YXJuIGluc3RlYWQhCi0jCi0jIE5vdGUgdGhhdCB0aGUgZ3lwaSBmaWxlIGlzIGluY2x1ZGVkIGluIHRhcmdldF9kZWZhdWx0cywgc28gaXQgZG9lcyBub3QgbmVlZAotIyB0byBiZSBleHBsaWNpdGx5IGluY2x1ZGVkLgotIwotIyBXYXJuaW5nIGZsYWdzIHNldCBieSB0aGlzIHdpbGwgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLiBJZiB5b3Ugd2FudCB0byBzZXQKLSMgd2FybmluZyBmbGFncyBvbiBvbmx5IHNvbWUgcGxhdGZvcm1zLCB5b3UgaGF2ZSB0byBkbyBzbyBtYW51YWxseS4KLSMKLSMgVG8gdXNlIHRoaXMsIGNyZWF0ZSBhIGd5cCB0YXJnZXQgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm06Ci0jIHsKLSMgICAndGFyZ2V0X25hbWUnOiAnbXlfdGFyZ2V0JywKLSMgICAndmFyaWFibGVzJzogewotIyAgICAgJ2NsYW5nX3dhcm5pbmdfZmxhZ3MnOiBbJy1Xbm8tYXdlc29tZS13YXJuaW5nJ10sCi0jICAgICAnY2xhbmdfd2FybmluZ19mbGFnc191bnNldCc6IFsnLVdwcmV2aW91c2x5LXNldC1mbGFnJ10sCi0jICAgfQotIyB9Ci0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY2xhbmdfd2FybmluZ19mbGFnc191bnNldCUnOiBbXSwgICMgUHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAjIFRoaXMgdXNlcyA+QCBpbnN0ZWFkIG9mIEA8IHRvIGFsc28gc2VlIGNsYW5nX3dhcm5pbmdfZmxhZ3Mgc2V0IGluCi0gICAgICAjIHRhcmdldHMgZGlyZWN0bHksIG5vdCBqdXN0IHRoZSBjbGFuZ193YXJuaW5nX2ZsYWdzIGluIHRhcmdldF9kZWZhdWx0cy4KLSAgICAgICdjZmxhZ3MnOiBbICc+QChjbGFuZ193YXJuaW5nX2ZsYWdzKScgXSwKLSAgICAgICdjZmxhZ3MhJzogWyAnPkAoY2xhbmdfd2FybmluZ19mbGFnc191bnNldCknIF0sCi0gICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdXQVJOSU5HX0NGTEFHUyc6IFsnPkAoY2xhbmdfd2FybmluZ19mbGFncyknXSwKLSAgICAgICAgJ1dBUk5JTkdfQ0ZMQUdTISc6IFsnPkAoY2xhbmdfd2FybmluZ19mbGFnc191bnNldCknXSwKLSAgICAgIH0sCi0gICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWyAnPkAoY2xhbmdfd2FybmluZ19mbGFncyknIF0sCi0gICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zISc6IFsgJz5AKGNsYW5nX3dhcm5pbmdfZmxhZ3NfdW5zZXQpJyBdLAotICAgICAgICB9LAotICAgICAgfSwKLSAgICB9XSwKLSAgICBbJ2NsYW5nPT0wIGFuZCBob3N0X2NsYW5nPT0xJywgewotICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICBbJ190b29sc2V0PT0iaG9zdCInLCB7Ci0gICAgICAgICAgJ2NmbGFncyc6IFsgJz5AKGNsYW5nX3dhcm5pbmdfZmxhZ3MpJyBdLAotICAgICAgICAgICdjZmxhZ3MhJzogWyAnPkAoY2xhbmdfd2FybmluZ19mbGFnc191bnNldCknIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3NoaW1faGVhZGVycy5neXBpIGIvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvc2hpbV9oZWFkZXJzLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMjE3NzMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvc2hpbV9oZWFkZXJzLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0jIENvcHlyaWdodCAyMDEzIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0jICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotIyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0jICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBpbnRvIGEgdGFyZ2V0IHRvIGhhbmRsZSBzaGltIGhlYWRlcnMKLSMgaW4gYSBjb25zaXN0ZW50IG1hbm5lci4gVG8gdXNlIHRoaXMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgbmVlZCB0byBiZQotIyBkZWZpbmVkOgotIyAgIGhlYWRlcnNfcm9vdF9wYXRoOiBzdHJpbmc6IHBhdGggdG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgaGVhZGVycwotIyAgIGhlYWRlcl9maWxlbmFtZXM6IGxpc3Q6IGxpc3Qgb2YgaGVhZGVyIGZpbGUgbmFtZXMKLQotewotICAndmFyaWFibGVzJzogewotICAgICdzaGltX2hlYWRlcnNfcGF0aCc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9zaGltX2hlYWRlcnMvPChfdGFyZ2V0X25hbWUpLzwoX3Rvb2xzZXQpJywKLSAgICAnc2hpbV9nZW5lcmF0b3JfYWRkaXRpb25hbF9hcmdzJSc6IFtdLAotICB9LAotICAnaW5jbHVkZV9kaXJzKysnOiBbCi0gICAgJzwoc2hpbV9oZWFkZXJzX3BhdGgpJywKLSAgXSwKLSAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgJ2luY2x1ZGVfZGlycysrKyc6IFsKLSAgICAgICc8KHNoaW1faGVhZGVyc19wYXRoKScsCi0gICAgXSwKLSAgfSwKLSAgJ2FjdGlvbnMnOiBbCi0gICAgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2dlbmVyYXRvcl9wYXRoJzogJzwoREVQVEgpL3Rvb2xzL2dlbmVyYXRlX3NoaW1faGVhZGVycy9nZW5lcmF0ZV9zaGltX2hlYWRlcnMucHknLAotICAgICAgICAnZ2VuZXJhdG9yX2FyZ3MnOiBbCi0gICAgICAgICAgJy0taGVhZGVycy1yb290JywgJzwoaGVhZGVyc19yb290X3BhdGgpJywKLSAgICAgICAgICAnLS1vdXRwdXQtZGlyZWN0b3J5JywgJzwoc2hpbV9oZWFkZXJzX3BhdGgpJywKLSAgICAgICAgICAnPEAoc2hpbV9nZW5lcmF0b3JfYWRkaXRpb25hbF9hcmdzKScsCi0gICAgICAgICAgJzxAKGhlYWRlcl9maWxlbmFtZXMpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfPChfdGFyZ2V0X25hbWUpX3NoaW1faGVhZGVycycsCi0gICAgICAnaW5wdXRzJzogWwotICAgICAgICAnPChnZW5lcmF0b3JfcGF0aCknLAotICAgICAgXSwKLSAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbihnZW5lcmF0ZV9zaGltX2hlYWRlcnMgPEAoZ2VuZXJhdG9yX2FyZ3MpIC0tb3V0cHV0cyknLAotICAgICAgXSwKLSAgICAgICdhY3Rpb24nOiBbJ3B5dGhvbjInLAotICAgICAgICAgICAgICAgICAnPChnZW5lcmF0b3JfcGF0aCknLAotICAgICAgICAgICAgICAgICAnPEAoZ2VuZXJhdG9yX2FyZ3MpJywKLSAgICAgICAgICAgICAgICAgJy0tZ2VuZXJhdGUnLAotICAgICAgXSwKLSAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgPChfdGFyZ2V0X25hbWUpIHNoaW0gaGVhZGVycy4nLAotICAgIH0sCi0gIF0sCi19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9zdGFuZGFsb25lLmd5cGkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9zdGFuZGFsb25lLmd5cGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyOTU1ZjguLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvc3RhbmRhbG9uZS5neXBpCisrKyAvZGV2L251bGwKQEAgLTEsMTQxMSArMCwwIEBACi0jIENvcHlyaWdodCAyMDEyIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0jICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotIyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0jICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIERlZmluaXRpb25zIHRvIGJlIHVzZWQgd2hlbiBidWlsZGluZyBzdGFuZC1hbG9uZSBWOCBiaW5hcmllcy4KLQotewotICAjIFdlIG5lZWQgdG8gaW5jbHVkZSB0b29sY2hhaW4uZ3lwaSBoZXJlIGZvciB0aGlyZC1wYXJ0eSBzb3VyY2VzIHRoYXQgZG9uJ3QKLSAgIyBkaXJlY3RseSBpbmNsdWRlIGl0IHRoZW1zZWx2ZXMuCi0gICdpbmNsdWRlcyc6IFsndG9vbGNoYWluLmd5cGknXSwKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY29tcG9uZW50JSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgJ2NsYW5nX3hjb2RlJSc6IDAsCi0gICAgIyBUcmFjayB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGVzIGZyb20uIEZyb20gZmFzdGVzdCB0bwotICAgICMgc2xvd2VzdDogMCAtIG5vIHRyYWNraW5nLCAxIC0gdHJhY2sgb25seSB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIHNpdGUsIDIKLSAgICAjIC0gdHJhY2sgdGhlIGNoYWluIG9mIHN0b3JlcyBsZWFkaW5nIGZyb20gYWxsb2NhdGlvbiBzaXRlIHRvIHVzZSBzaXRlLgotICAgICdtc2FuX3RyYWNrX29yaWdpbnMlJzogMiwKLSAgICAndmlzaWJpbGl0eSUnOiAnaGlkZGVuJywKLSAgICAndjhfZW5hYmxlX2JhY2t0cmFjZSUnOiAwLAotICAgICd2OF9lbmFibGVfaTE4bl9zdXBwb3J0JSc6IDEsCi0gICAgJ3Y4X2RlcHJlY2F0aW9uX3dhcm5pbmdzJzogMSwKLSAgICAndjhfaW1taW5lbnRfZGVwcmVjYXRpb25fd2FybmluZ3MnOiAxLAotICAgICd2OF9jaGVja19taWNyb3Rhc2tzX3Njb3Blc19jb25zaXN0ZW5jeSc6ICd0cnVlJywKLSAgICAnbXN2c19tdWx0aV9jb3JlX2NvbXBpbGUlJzogJzEnLAotICAgICdtYWNfZGVwbG95bWVudF90YXJnZXQlJzogJzEwLjcnLAotICAgICdyZWxlYXNlX2V4dHJhX2NmbGFncyUnOiAnJywKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIiBvciBPUz09Im9wZW5ic2QiIG9yIFwKLSAgICAgICAgICAgICAgICAgT1M9PSJuZXRic2QiIG9yIE9TPT0ibWFjIiBvciBPUz09InFueCIgb3IgT1M9PSJhaXgiJywgewotICAgICAgICAgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSBVbml4IHBsYXRmb3JtcyB3ZSBnZW5lcmFsbHkgZGVhbCB3aXRoLgotICAgICAgICAgICAgICAgICMgQW55dGhpbmcgZWxzZSBnZXRzIHBhc3NlZCB0aHJvdWdoLCB3aGljaCBwcm9iYWJseSB3b24ndCB3b3JrCi0gICAgICAgICAgICAgICAgIyB2ZXJ5IHdlbGw7IHN1Y2ggaG9zdHMgc2hvdWxkIHBhc3MgYW4gZXhwbGljaXQgdGFyZ2V0X2FyY2gKLSAgICAgICAgICAgICAgICAjIHRvIGd5cC4KLSAgICAgICAgICAgICAgICAnaG9zdF9hcmNoJSc6ICc8IXB5bW9kX2RvX21haW4oZGV0ZWN0X3Y4X2hvc3RfYXJjaCknLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgIyBPUyE9ImxpbnV4IiBhbmQgT1MhPSJmcmVlYnNkIiBhbmQgT1MhPSJvcGVuYnNkIiBhbmQKLSAgICAgICAgICAgICAgICAjIE9TIT0ibmV0YnNkIiBhbmQgT1MhPSJtYWMiIGFuZCBPUyE9ImFpeCIKLSAgICAgICAgICAgICAgICAnaG9zdF9hcmNoJSc6ICdpYTMyJywKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2hvc3RfYXJjaCUnOiAnPChob3N0X2FyY2gpJywKLSAgICAgICAgICAndGFyZ2V0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCi0KLSAgICAgICAgICAjIEJ5IGRlZmF1bHQgd2UgYnVpbGQgYWdhaW5zdCBhIHN0YWJsZSBzeXNyb290IGltYWdlIHRvIGF2b2lkCi0gICAgICAgICAgIyBkZXBlbmRpbmcgb24gdGhlIHBhY2thZ2VzIGluc3RhbGxlZCBvbiB0aGUgbG9jYWwgbWFjaGluZS4gU2V0IHRoaXMKLSAgICAgICAgICAjIHRvIDAgdG8gYnVpbGQgYWdhaW5zdCBsb2NhbGx5IGluc3RhbGxlZCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgKGUuZy4KLSAgICAgICAgICAjIGlmIHBhY2thZ2luZyBmb3IgYSBsaW51eCBkaXN0cm8pCi0gICAgICAgICAgJ3VzZV9zeXNyb290JSc6IDEsCi0gICAgICAgIH0sCi0gICAgICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCi0gICAgICAgICd0YXJnZXRfYXJjaCUnOiAnPCh0YXJnZXRfYXJjaCknLAotICAgICAgICAndXNlX3N5c3Jvb3QlJzogJzwodXNlX3N5c3Jvb3QpJywKLSAgICAgICAgJ2Jhc2VfZGlyJSc6ICc8IShjZCA8KERFUFRIKSAmJiBweXRob24gLWMgImltcG9ydCBvczsgcHJpbnQgb3MuZ2V0Y3dkKCkiKScsCi0KLSAgICAgICAgIyBJbnN0cnVtZW50IGZvciBjb2RlIGNvdmVyYWdlIGFuZCB1c2UgY292ZXJhZ2Ugd3JhcHBlciB0byBleGNsdWRlIHNvbWUKLSAgICAgICAgIyBmaWxlcy4gVXNlcyBnY292IGlmIGNsYW5nPTAgaXMgc2V0IGV4cGxpY2l0bHkuIE90aGVyd2lzZSwKLSAgICAgICAgIyBzYW5pdGl6ZXJfY292ZXJhZ2UgbXVzdCBiZSBzZXQgdG9vLgotICAgICAgICAnY292ZXJhZ2UlJzogMCwKLQotICAgICAgICAjIERlZmF1bHQgc3lzcm9vdCBpZiBubyBzeXNyb290IGNhbiBiZSBwcm92aWRlZC4KLSAgICAgICAgJ3N5c3Jvb3QlJzogJycsCi0KLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgIyBUaGUgc3lzdGVtIHJvb3QgZm9yIGxpbnV4IGJ1aWxkcy4KLSAgICAgICAgICBbJ09TPT0ibGludXgiIGFuZCB1c2Vfc3lzcm9vdD09MScsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtIicsIHsKLSAgICAgICAgICAgICAgICAnc3lzcm9vdCUnOiAnPCEoY2QgPChERVBUSCkgJiYgcHdkIC1QKS9idWlsZC9saW51eC9kZWJpYW5famVzc2llX2FybS1zeXNyb290JywKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAgICdzeXNyb290JSc6ICc8IShjZCA8KERFUFRIKSAmJiBwd2QgLVApL2J1aWxkL2xpbnV4L2RlYmlhbl9qZXNzaWVfYW1kNjQtc3lzcm9vdCcsCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iaWEzMiInLCB7Ci0gICAgICAgICAgICAgICAgJ3N5c3Jvb3QlJzogJzwhKGNkIDwoREVQVEgpICYmIHB3ZCAtUCkvYnVpbGQvbGludXgvZGViaWFuX2plc3NpZV9pMzg2LXN5c3Jvb3QnLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWyd0YXJnZXRfYXJjaD09Im1pcHNlbCInLCB7Ci0gICAgICAgICAgICAgICAgJ3N5c3Jvb3QlJzogJzwhKGNkIDwoREVQVEgpICYmIHB3ZCAtUCkvYnVpbGQvbGludXgvZGViaWFuX2plc3NpZV9taXBzLXN5c3Jvb3QnLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sICMgT1M9PSJsaW51eCIgYW5kIHVzZV9zeXNyb290PT0xCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2Jhc2VfZGlyJSc6ICc8KGJhc2VfZGlyKScsCi0gICAgICAnaG9zdF9hcmNoJSc6ICc8KGhvc3RfYXJjaCknLAotICAgICAgJ3RhcmdldF9hcmNoJSc6ICc8KHRhcmdldF9hcmNoKScsCi0gICAgICAndjhfdGFyZ2V0X2FyY2glJzogJzwodGFyZ2V0X2FyY2gpJywKLSAgICAgICdjb3ZlcmFnZSUnOiAnPChjb3ZlcmFnZSknLAotICAgICAgJ3N5c3Jvb3QlJzogJzwoc3lzcm9vdCknLAotICAgICAgJ2FzYW4lJzogMCwKLSAgICAgICdsc2FuJSc6IDAsCi0gICAgICAnbXNhbiUnOiAwLAotICAgICAgJ3RzYW4lJzogMCwKLSAgICAgICMgRW5hYmxlIGNvdmVyYWdlIGdhdGhlcmluZyBpbnN0cnVtZW50YXRpb24gaW4gc2FuaXRpemVyIHRvb2xzLiBUaGlzIGZsYWcKLSAgICAgICMgYWxzbyBjb250cm9scyBjb3ZlcmFnZSBncmFudWxhcml0eSAoMSBmb3IgZnVuY3Rpb24tbGV2ZWwsIDIgZm9yCi0gICAgICAjIGJsb2NrLWxldmVsLCAzIGZvciBlZGdlLWxldmVsKS4KLSAgICAgICdzYW5pdGl6ZXJfY292ZXJhZ2UlJzogMCwKLQotICAgICAgIyBVc2UgZHluYW1pYyBsaWJyYXJpZXMgaW5zdHJ1bWVudGVkIGJ5IG9uZSBvZiB0aGUgc2FuaXRpemVycwotICAgICAgIyBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBzeXN0ZW0gbGlicmFyaWVzLiBTZXQgdGhpcyBmbGFnIHRvIGRvd25sb2FkCi0gICAgICAjIHByZWJ1aWx0IGJpbmFyaWVzIGZyb20gR0NTLgotICAgICAgJ3VzZV9wcmVidWlsdF9pbnN0cnVtZW50ZWRfbGlicmFyaWVzJSc6IDAsCi0KLSAgICAgICMgVXNlIGxpYmMrKyAoYnVpbGR0b29scy90aGlyZF9wYXJ0eS9saWJjKysgYW5kCi0gICAgICAjIGJ1aWxkdG9vbHMvdGhpcmRfcGFydHkvbGliYysrYWJpKSBpbnN0ZWFkIG9mIHN0ZGxpYmMrKyBhcyBzdGFuZGFyZAotICAgICAgIyBsaWJyYXJ5LiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGluc3RydW1lbnRlZCBidWlsZHMuCi0gICAgICAndXNlX2N1c3RvbV9saWJjeHglJzogMCwKLQotICAgICAgJ2NsYW5nX2RpciUnOiAnPChiYXNlX2RpcikvdGhpcmRfcGFydHkvbGx2bS1idWlsZC9SZWxlYXNlK0Fzc2VydHMnLAotICAgICAgJ21ha2VfY2xhbmdfZGlyJSc6ICc8KGJhc2VfZGlyKS90aGlyZF9wYXJ0eS9sbHZtLWJ1aWxkL1JlbGVhc2UrQXNzZXJ0cycsCi0KLSAgICAgICMgQ29udHJvbCBGbG93IEludGVncml0eSBmb3IgdmlydHVhbCBjYWxscyBhbmQgY2FzdHMuCi0gICAgICAjIFNlZSBodHRwOi8vY2xhbmcubGx2bS5vcmcvZG9jcy9Db250cm9sRmxvd0ludGVncml0eS5odG1sCi0gICAgICAnY2ZpX3ZwdHIlJzogMCwKLSAgICAgICdjZmlfZGlhZyUnOiAwLAotCi0gICAgICAnY2ZpX2JsYWNrbGlzdCUnOiAnPChiYXNlX2RpcikvdG9vbHMvY2ZpL2JsYWNrbGlzdC50eHQnLAotCi0gICAgICAjIFNldCB0byAxIHRvIGVuYWJsZSBmYXN0IGJ1aWxkcy4KLSAgICAgICMgVE9ETyhtYWNoZW5iYWNoKTogT25seSBjb25maWd1cmVkIGZvciB3aW5kb3dzLgotICAgICAgJ2Zhc3RidWlsZCUnOiAwLAotCi0gICAgICAjIGdvbWEgc2V0dGluZ3MuCi0gICAgICAjIDEgdG8gdXNlIGdvbWEuCi0gICAgICAjIElmIG5vIGdvbWFkaXIgaXMgc2V0LCBpdCB1c2VzIHRoZSBkZWZhdWx0IGdvbWFkaXIuCi0gICAgICAndXNlX2dvbWElJzogMCwKLSAgICAgICdnb21hZGlyJSc6ICcnLAotCi0gICAgICAndGVzdF9pc29sYXRpb25fbW9kZSUnOiAnbm9vcCcsCi0KLSAgICAgICMgQnkgZGVmYXVsdCwgdXNlIElDVSBkYXRhIGZpbGUgKGljdWR0bC5kYXQpLgotICAgICAgJ2ljdV91c2VfZGF0YV9maWxlX2ZsYWclJzogMSwKLQotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICMgU2V0IGRlZmF1bHQgZ29tYWRpci4KLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2dvbWFkaXInOiAnYzpcXGdvbWFcXGdvbWEtd2luJywKLSAgICAgICAgfSwgewotICAgICAgICAgICdnb21hZGlyJzogJzwhKC9iaW4vZWNobyAtbiAke0hPTUV9L2dvbWEpJywKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaG9zdF9hcmNoIT0icHBjIiBhbmQgaG9zdF9hcmNoIT0icHBjNjQiIGFuZCBob3N0X2FyY2ghPSJwcGM2NGxlIiBhbmQgaG9zdF9hcmNoIT0iczM5MCIgYW5kIGhvc3RfYXJjaCE9InMzOTB4IicsIHsKLSAgICAgICAgICAnaG9zdF9jbGFuZyUnOiAxLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2hvc3RfY2xhbmclJzogMCwKLSAgICAgICAgfV0sCi0gICAgICAgICMgbGludXhfdXNlX2J1bmRsZWRfZ29sZDogd2hldGhlciB0byB1c2UgdGhlIGdvbGQgbGlua2VyIGJpbmFyeSBjaGVja2VkCi0gICAgICAgICMgaW50byB0aGlyZF9wYXJ0eS9iaW51dGlscy4gIEZvcmNlIHRoaXMgb2ZmIHZpYSBHWVBfREVGSU5FUyB3aGVuIHlvdQotICAgICAgICAjIGFyZSB1c2luZyBhIGN1c3RvbSB0b29sY2hhaW4gYW5kIG5lZWQgdG8gY29udHJvbCAtQiBpbiBsZGZsYWdzLgotICAgICAgICAjIERvIG5vdCB1c2UgMzItYml0IGdvbGQgb24gMzItYml0IGhvc3RzIGFzIGl0IHJ1bnMgb3V0IGFkZHJlc3Mgc3BhY2UKLSAgICAgICAgIyBmb3IgY29tcG9uZW50PXN0YXRpY19saWJyYXJ5IGJ1aWxkcy4KLSAgICAgICAgWycoKE9TPT0ibGludXgiIG9yIE9TPT0iYW5kcm9pZCIpIGFuZCAodGFyZ2V0X2FyY2g9PSJ4NjQiIG9yIHRhcmdldF9hcmNoPT0iYXJtIiBvciAodGFyZ2V0X2FyY2g9PSJpYTMyIiBhbmQgaG9zdF9hcmNoPT0ieDY0IikpKSBvciAoT1M9PSJsaW51eCIgYW5kIHRhcmdldF9hcmNoPT0ibWlwc2VsIiknLCB7Ci0gICAgICAgICAgJ2xpbnV4X3VzZV9idW5kbGVkX2dvbGQlJzogMSwKLSAgICAgICAgfSwgewotICAgICAgICAgICdsaW51eF91c2VfYnVuZGxlZF9nb2xkJSc6IDAsCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgICdiYXNlX2RpciUnOiAnPChiYXNlX2RpciknLAotICAgICdjbGFuZ19kaXIlJzogJzwoY2xhbmdfZGlyKScsCi0gICAgJ21ha2VfY2xhbmdfZGlyJSc6ICc8KG1ha2VfY2xhbmdfZGlyKScsCi0gICAgJ2hvc3RfYXJjaCUnOiAnPChob3N0X2FyY2gpJywKLSAgICAnaG9zdF9jbGFuZyUnOiAnPChob3N0X2NsYW5nKScsCi0gICAgJ3RhcmdldF9hcmNoJSc6ICc8KHRhcmdldF9hcmNoKScsCi0gICAgJ3Y4X3RhcmdldF9hcmNoJSc6ICc8KHY4X3RhcmdldF9hcmNoKScsCi0gICAgJ3dlcnJvciUnOiAnLVdlcnJvcicsCi0gICAgJ3VzZV9nb21hJSc6ICc8KHVzZV9nb21hKScsCi0gICAgJ2dvbWFkaXIlJzogJzwoZ29tYWRpciknLAotICAgICdhc2FuJSc6ICc8KGFzYW4pJywKLSAgICAnbHNhbiUnOiAnPChsc2FuKScsCi0gICAgJ21zYW4lJzogJzwobXNhbiknLAotICAgICd0c2FuJSc6ICc8KHRzYW4pJywKLSAgICAnc2FuaXRpemVyX2NvdmVyYWdlJSc6ICc8KHNhbml0aXplcl9jb3ZlcmFnZSknLAotICAgICd1c2VfcHJlYnVpbHRfaW5zdHJ1bWVudGVkX2xpYnJhcmllcyUnOiAnPCh1c2VfcHJlYnVpbHRfaW5zdHJ1bWVudGVkX2xpYnJhcmllcyknLAotICAgICd1c2VfY3VzdG9tX2xpYmN4eCUnOiAnPCh1c2VfY3VzdG9tX2xpYmN4eCknLAotICAgICdsaW51eF91c2VfYnVuZGxlZF9nb2xkJSc6ICc8KGxpbnV4X3VzZV9idW5kbGVkX2dvbGQpJywKLSAgICAnY2ZpX3ZwdHIlJzogJzwoY2ZpX3ZwdHIpJywKLSAgICAnY2ZpX2RpYWclJzogJzwoY2ZpX2RpYWcpJywKLSAgICAnY2ZpX2JsYWNrbGlzdCUnOiAnPChjZmlfYmxhY2tsaXN0KScsCi0gICAgJ3Rlc3RfaXNvbGF0aW9uX21vZGUlJzogJzwodGVzdF9pc29sYXRpb25fbW9kZSknLAotICAgICdmYXN0YnVpbGQlJzogJzwoZmFzdGJ1aWxkKScsCi0gICAgJ2NvdmVyYWdlJSc6ICc8KGNvdmVyYWdlKScsCi0gICAgJ3N5c3Jvb3QlJzogJzwoc3lzcm9vdCknLAotICAgICdpY3VfdXNlX2RhdGFfZmlsZV9mbGFnJSc6ICc8KGljdV91c2VfZGF0YV9maWxlX2ZsYWcpJywKLQotICAgICMgQWRkIGEgc2ltcGxlIGV4dHJhcyBzb2xlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBjY3Rlc3RzCi0gICAgJ3Y4X2V4dHJhX2xpYnJhcnlfZmlsZXMnOiBbJy4uL3Rlc3QvY2N0ZXN0L3Rlc3QtZXh0cmEuanMnXSwKLSAgICAndjhfZXhwZXJpbWVudGFsX2V4dHJhX2xpYnJhcnlfZmlsZXMnOiBbJy4uL3Rlc3QvY2N0ZXN0L3Rlc3QtZXhwZXJpbWVudGFsLWV4dHJhLmpzJ10sCi0KLSAgICAjIC5neXAgZmlsZXMgb3IgdGFyZ2V0cyBzaG91bGQgc2V0IHY4X2NvZGUgdG8gMSBpZiB0aGV5IGJ1aWxkIFY4IHNwZWNpZmljCi0gICAgIyBjb2RlLCBhcyBvcHBvc2VkIHRvIGV4dGVybmFsIGNvZGUuICBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgdG8gY29udHJvbCBzdWNoCi0gICAgIyB0aGluZ3MgYXMgdGhlIHNldCBvZiB3YXJuaW5ncyB0byBlbmFibGUsIGFuZCB3aGV0aGVyIHdhcm5pbmdzIGFyZSB0cmVhdGVkCi0gICAgIyBhcyBlcnJvcnMuCi0gICAgJ3Y4X2NvZGUlJzogMCwKLQotICAgICMgU3BlZWRzIHVwIERlYnVnIGJ1aWxkczoKLSAgICAjIDAgLSBDb21waWxlciBvcHRpbWl6YXRpb25zIG9mZiAoZGVidWdnYWJsZSkgKGRlZmF1bHQpLiBUaGlzIG1heQotICAgICMgICAgIGJlIDV4IHNsb3dlciB0aGFuIFJlbGVhc2UgKG9yIHdvcnNlKS4KLSAgICAjIDEgLSBUdXJuIG9uIG9wdGltaXphdGlvbnMgYW5kIGRpc2FibGUgc2xvdyBEQ0hFQ0tzLCBidXQgbGVhdmUKLSAgICAjICAgICBWOF9FTkFCTEVfQ0hFQ0tTIGFuZCBtb3N0IG90aGVyIGFzc2VydGlvbnMgZW5hYmxlZC4gIFRoaXMgbWF5IGNhdXNlCi0gICAgIyAgICAgc29tZSB2OCB0ZXN0cyB0byBmYWlsIGluIHRoZSBEZWJ1ZyBjb25maWd1cmF0aW9uLiAgVGhpcyByb3VnaGx5Ci0gICAgIyAgICAgbWF0Y2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBSZWxlYXNlIGJ1aWxkIGFuZCBjYW4gYmUgdXNlZCBieQotICAgICMgICAgIGVtYmVkZGVycyB0aGF0IG5lZWQgdG8gYnVpbGQgdGhlaXIgb3duIGNvZGUgYXMgZGVidWcgYnV0IGRvbid0IHdhbnQKLSAgICAjICAgICBvciBuZWVkIGEgZGVidWcgdmVyc2lvbiBvZiBWOC4gVGhpcyBzaG91bGQgcHJvZHVjZSBuZWFyLXJlbGVhc2UKLSAgICAjICAgICBzcGVlZHMuCi0gICAgJ3Y4X29wdGltaXplZF9kZWJ1ZyUnOiAwLAotCi0gICAgIyBVc2UgZXh0ZXJuYWwgZmlsZXMgZm9yIHN0YXJ0dXAgZGF0YSBibG9iczoKLSAgICAjIHRoZSBKUyBidWlsdGlucyBzb3VyY2VzIGFuZCB0aGUgc3RhcnQgc25hcHNob3QuCi0gICAgIyBFbWJlZGRlcnMgdGhhdCBkb24ndCB1c2Ugc3RhbmRhbG9uZS5neXBpIHdpbGwgbmVlZCB0byBhZGQKLSAgICAjIHRoZWlyIG93biBkZWZhdWx0IHZhbHVlLgotICAgICd2OF91c2VfZXh0ZXJuYWxfc3RhcnR1cF9kYXRhJSc6IDEsCi0KLSAgICAjIFJlbGF0aXZlIHBhdGggdG8gaWN1Lmd5cCBmcm9tIHRoaXMgZmlsZS4KLSAgICAnaWN1X2d5cF9wYXRoJzogJy4uL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwJywKLQotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWycodjhfdGFyZ2V0X2FyY2g9PSJhcm0iIGFuZCBob3N0X2FyY2ghPSJhcm0iKSBvciBcCi0gICAgICAgICh2OF90YXJnZXRfYXJjaD09ImFybTY0IiBhbmQgaG9zdF9hcmNoIT0iYXJtNjQiKSBvciBcCi0gICAgICAgICh2OF90YXJnZXRfYXJjaD09Im1pcHNlbCIgYW5kIGhvc3RfYXJjaCE9Im1pcHNlbCIpIG9yIFwKLSAgICAgICAgKHY4X3RhcmdldF9hcmNoPT0ibWlwczY0ZWwiIGFuZCBob3N0X2FyY2ghPSJtaXBzNjRlbCIpIG9yIFwKLSAgICAgICAgKHY4X3RhcmdldF9hcmNoPT0ieDY0IiBhbmQgaG9zdF9hcmNoIT0ieDY0Iikgb3IgXAotICAgICAgICAoT1M9PSJhbmRyb2lkIiBvciBPUz09InFueCIpJywgewotICAgICAgICAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnOiAxLAotICAgICAgfSwgewotICAgICAgICAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnOiAwLAotICAgICAgfV0sCi0gICAgICBbJ09TID09ICJ3aW4iJywgewotICAgICAgICAnb3NfcG9zaXglJzogMCwKLSAgICAgIH0sIHsKLSAgICAgICAgJ29zX3Bvc2l4JSc6IDEsCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJ3aW4iIGFuZCB1c2VfZ29tYT09MScsIHsKLSAgICAgICAgIyBnb21hIGRvZXNuJ3Qgc3VwcG9ydCBwY2ggeWV0LgotICAgICAgICAnY2hyb21pdW1fd2luX3BjaCc6IDAsCi0gICAgICAgICMgZ29tYSBkb2Vzbid0IHN1cHBvcnQgUERCIHlldC4KLSAgICAgICAgJ2Zhc3RidWlsZCUnOiAxLAotICAgICAgfV0sCi0gICAgICBbJygodjhfdGFyZ2V0X2FyY2g9PSJpYTMyIiBvciB2OF90YXJnZXRfYXJjaD09Ing2NCIpIGFuZCBcCi0gICAgICAgIChPUz09ImxpbnV4IiBvciBPUz09Im1hYyIpKSBvciAodjhfdGFyZ2V0X2FyY2g9PSJwcGM2NCIgYW5kIE9TPT0ibGludXgiKScsIHsKLSAgICAgICAgJ3Y4X2VuYWJsZV9nZGJqaXQlJzogMSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ3Y4X2VuYWJsZV9nZGJqaXQlJzogMCwKLSAgICAgIH1dLAotICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJtYWMiKSBhbmQgKHRhcmdldF9hcmNoPT0iaWEzMiIgb3IgdGFyZ2V0X2FyY2g9PSJ4NjQiKSBhbmQgXAotICAgICAgICB2OF90YXJnZXRfYXJjaCE9IngzMiInLCB7Ci0gICAgICAgICdjbGFuZyUnOiAxLAotICAgICAgfSwgewotICAgICAgICAnY2xhbmclJzogMCwKLSAgICAgIH1dLAotICAgICAgWydhc2FuPT0xIG9yIGxzYW49PTEgb3IgbXNhbj09MSBvciB0c2FuPT0xJywgewotICAgICAgICAnY2xhbmclJzogMSwKLSAgICAgICAgJ3VzZV9hbGxvY2F0b3IlJzogJ25vbmUnLAotICAgICAgfV0sCi0gICAgICBbJ2FzYW49PTEgYW5kIE9TPT0ibGludXgiJywgewotICAgICAgICAndXNlX2N1c3RvbV9saWJjeHglJzogMSwKLSAgICAgIH1dLAotICAgICAgWyd0c2FuPT0xJywgewotICAgICAgICAndXNlX2N1c3RvbV9saWJjeHglJzogMSwKLSAgICAgIH1dLAotICAgICAgWydtc2FuPT0xJywgewotICAgICAgICAjIFVzZSBhIGp1c3QtYnVpbHQsIE1TYW4taW5zdHJ1bWVudGVkIGxpYmMrKyBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0td2lkZQotICAgICAgICAjIGxpYnN0ZGMrKy4gVGhpcyBpcyByZXF1aXJlZCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSByZXBvcnRzIHdoZW5ldmVyCi0gICAgICAgICMgdGhlIEMrKyBzdGFuZGFyZCBsaWJyYXJ5IGlzIHVzZWQuCi0gICAgICAgICd1c2VfY3VzdG9tX2xpYmN4eCUnOiAxLAotICAgICAgfV0sCi0gICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICMgTG9jYXRpb24gb2YgQW5kcm9pZCBOREsuCi0gICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICMgVGhlIEFuZHJvaWQgdG9vbGNoYWluIG5lZWRzIHRvIHVzZSB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgTkRLCi0gICAgICAgICAgICAjIGJlY2F1c2UgaXQgaXMgdXNlZCBhdCBkaWZmZXJlbnQgbGV2ZWxzIGluIHRoZSBHWVAgZmlsZXMuCi0gICAgICAgICAgICAnYW5kcm9pZF9uZGtfcm9vdCUnOiAnPChiYXNlX2RpcikvdGhpcmRfcGFydHkvYW5kcm9pZF9uZGsvJywKLSAgICAgICAgICAgICdhbmRyb2lkX2hvc3RfYXJjaCUnOiAiPCEodW5hbWUgLW0gfCBzZWQgLWUgJ3MvaVszNDU2XTg2L3g4Ni8nKSIsCi0gICAgICAgICAgICAjIFZlcnNpb24gb2YgdGhlIE5ESy4gVXNlZCB0byBlbnN1cmUgZnVsbCByZWJ1aWxkcyBvbiBOREsgcm9sbHMuCi0gICAgICAgICAgICAnYW5kcm9pZF9uZGtfdmVyc2lvbiUnOiAncjEyYicsCi0gICAgICAgICAgICAnaG9zdF9vcyUnOiAiPCEodW5hbWUgLXMgfCBzZWQgLWUgJ3MvTGludXgvbGludXgvO3MvRGFyd2luL21hYy8nKSIsCi0gICAgICAgICAgICAnb3NfZm9sZGVyX25hbWUlJzogIjwhKHVuYW1lIC1zIHwgc2VkIC1lICdzL0xpbnV4L2xpbnV4LztzL0Rhcndpbi9kYXJ3aW4vJykiLAotICAgICAgICAgIH0sCi0KLSAgICAgICAgICAjIENvcHkgY29uZGl0aW9uYWxseS1zZXQgdmFyaWFibGVzIG91dCBvbmUgc2NvcGUuCi0gICAgICAgICAgJ2FuZHJvaWRfbmRrX3Jvb3QlJzogJzwoYW5kcm9pZF9uZGtfcm9vdCknLAotICAgICAgICAgICdhbmRyb2lkX25ka192ZXJzaW9uJSc6ICc8KGFuZHJvaWRfbmRrX3ZlcnNpb24pJywKLSAgICAgICAgICAnaG9zdF9vcyUnOiAnPChob3N0X29zKScsCi0gICAgICAgICAgJ29zX2ZvbGRlcl9uYW1lJSc6ICc8KG9zX2ZvbGRlcl9uYW1lKScsCi0KLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2ggPT0gImlhMzIiJywgewotICAgICAgICAgICAgICAnYW5kcm9pZF90b29sY2hhaW4lJzogJzwoYW5kcm9pZF9uZGtfcm9vdCkvdG9vbGNoYWlucy94ODYtNC45L3ByZWJ1aWx0Lzwob3NfZm9sZGVyX25hbWUpLTwoYW5kcm9pZF9ob3N0X2FyY2gpL2JpbicsCi0gICAgICAgICAgICAgICdhbmRyb2lkX3RhcmdldF9hcmNoJSc6ICd4ODYnLAotICAgICAgICAgICAgICAnYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0lJzogJzE2JywKLSAgICAgICAgICAgICAgJ2FybV92ZXJzaW9uJSc6ICdkZWZhdWx0JywKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAieDY0IicsIHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdG9vbGNoYWluJSc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3Rvb2xjaGFpbnMveDg2XzY0LTQuOS9wcmVidWlsdC88KG9zX2ZvbGRlcl9uYW1lKS08KGFuZHJvaWRfaG9zdF9hcmNoKS9iaW4nLAotICAgICAgICAgICAgICAnYW5kcm9pZF90YXJnZXRfYXJjaCUnOiAneDg2XzY0JywKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdGFyZ2V0X3BsYXRmb3JtJSc6ICcyMScsCi0gICAgICAgICAgICAgICdhcm1fdmVyc2lvbiUnOiAnZGVmYXVsdCcsCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJhcm0iJywgewotICAgICAgICAgICAgICAnYW5kcm9pZF90b29sY2hhaW4lJzogJzwoYW5kcm9pZF9uZGtfcm9vdCkvdG9vbGNoYWlucy9hcm0tbGludXgtYW5kcm9pZGVhYmktNC45L3ByZWJ1aWx0Lzwob3NfZm9sZGVyX25hbWUpLTwoYW5kcm9pZF9ob3N0X2FyY2gpL2JpbicsCi0gICAgICAgICAgICAgICdhbmRyb2lkX3RhcmdldF9hcmNoJSc6ICdhcm0nLAotICAgICAgICAgICAgICAnYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0lJzogJzE2JywKLSAgICAgICAgICAgICAgJ2FybV92ZXJzaW9uJSc6IDcsCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2ggPT0gImFybTY0IicsIHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdG9vbGNoYWluJSc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3Rvb2xjaGFpbnMvYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOS9wcmVidWlsdC88KG9zX2ZvbGRlcl9uYW1lKS08KGFuZHJvaWRfaG9zdF9hcmNoKS9iaW4nLAotICAgICAgICAgICAgICAnYW5kcm9pZF90YXJnZXRfYXJjaCUnOiAnYXJtNjQnLAotICAgICAgICAgICAgICAnYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0lJzogJzIxJywKLSAgICAgICAgICAgICAgJ2FybV92ZXJzaW9uJSc6ICdkZWZhdWx0JywKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAibWlwc2VsIicsIHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdG9vbGNoYWluJSc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3Rvb2xjaGFpbnMvbWlwc2VsLWxpbnV4LWFuZHJvaWQtNC45L3ByZWJ1aWx0Lzwob3NfZm9sZGVyX25hbWUpLTwoYW5kcm9pZF9ob3N0X2FyY2gpL2JpbicsCi0gICAgICAgICAgICAgICdhbmRyb2lkX3RhcmdldF9hcmNoJSc6ICdtaXBzJywKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdGFyZ2V0X3BsYXRmb3JtJSc6ICcxNicsCi0gICAgICAgICAgICAgICdhcm1fdmVyc2lvbiUnOiAnZGVmYXVsdCcsCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2ggPT0gIm1pcHM2NGVsIicsIHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdG9vbGNoYWluJSc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3Rvb2xjaGFpbnMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkvcHJlYnVpbHQvPChvc19mb2xkZXJfbmFtZSktPChhbmRyb2lkX2hvc3RfYXJjaCkvYmluJywKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfdGFyZ2V0X2FyY2glJzogJ21pcHM2NCcsCi0gICAgICAgICAgICAgICdhbmRyb2lkX3RhcmdldF9wbGF0Zm9ybSUnOiAnMjEnLAotICAgICAgICAgICAgICAnYXJtX3ZlcnNpb24lJzogJ2RlZmF1bHQnLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLQotICAgICAgICAjIENvcHkgY29uZGl0aW9uYWxseS1zZXQgdmFyaWFibGVzIG91dCBvbmUgc2NvcGUuCi0gICAgICAgICdhbmRyb2lkX25ka192ZXJzaW9uJSc6ICc8KGFuZHJvaWRfbmRrX3ZlcnNpb24pJywKLSAgICAgICAgJ2FuZHJvaWRfdGFyZ2V0X2FyY2glJzogJzwoYW5kcm9pZF90YXJnZXRfYXJjaCknLAotICAgICAgICAnYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0lJzogJzwoYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0pJywKLSAgICAgICAgJ2FuZHJvaWRfdG9vbGNoYWluJSc6ICc8KGFuZHJvaWRfdG9vbGNoYWluKScsCi0gICAgICAgICdhcm1fdmVyc2lvbiUnOiAnPChhcm1fdmVyc2lvbiknLAotICAgICAgICAnaG9zdF9vcyUnOiAnPChob3N0X29zKScsCi0KLSAgICAgICAgIyBQcmludCB0byBzdGRvdXQgb24gQW5kcm9pZC4KLSAgICAgICAgJ3Y4X2FuZHJvaWRfbG9nX3N0ZG91dCUnOiAxLAotCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnYW5kcm9pZF9uZGtfcm9vdD09IiInLCB7Ci0gICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAnYW5kcm9pZF9zeXNyb290JzogJzwoYW5kcm9pZF90b29sY2hhaW4pL3N5c3Jvb3QvJywKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfc3RsJzogJzwoYW5kcm9pZF90b29sY2hhaW4pL3NvdXJjZXMvY3h4LXN0bC8nLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgICAgICAgICAnYW5kcm9pZF9saWInOiAnPChhbmRyb2lkX3N5c3Jvb3QpL3Vzci9saWI2NCcsCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAnYW5kcm9pZF9saWInOiAnPChhbmRyb2lkX3N5c3Jvb3QpL3Vzci9saWInLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYW5kcm9pZF9saWJjcHBfaW5jbHVkZSc6ICc8KGFuZHJvaWRfc3RsKS9sbHZtLWxpYmMrKy9saWJjeHgvaW5jbHVkZScsCi0gICAgICAgICAgICAnYW5kcm9pZF9saWJjcHBfYWJpX2luY2x1ZGUnOiAnPChhbmRyb2lkX3N0bCkvbGx2bS1saWJjKythYmkvbGliY3h4YWJpL2luY2x1ZGUnLAotICAgICAgICAgICAgJ2FuZHJvaWRfbGliY3BwX2xpYnMnOiAnPChhbmRyb2lkX3N0bCkvbGx2bS1saWJjKysvbGlicycsCi0gICAgICAgICAgICAnYW5kcm9pZF9zdXBwb3J0X2luY2x1ZGUnOiAnPChhbmRyb2lkX3Rvb2xjaGFpbikvc291cmNlcy9hbmRyb2lkL3N1cHBvcnQvaW5jbHVkZScsCi0gICAgICAgICAgICAnYW5kcm9pZF9zeXNyb290JzogJzwoYW5kcm9pZF9zeXNyb290KScsCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfc3lzcm9vdCc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3BsYXRmb3Jtcy9hbmRyb2lkLTwoYW5kcm9pZF90YXJnZXRfcGxhdGZvcm0pL2FyY2gtPChhbmRyb2lkX3RhcmdldF9hcmNoKScsCi0gICAgICAgICAgICAgICdhbmRyb2lkX3N0bCc6ICc8KGFuZHJvaWRfbmRrX3Jvb3QpL3NvdXJjZXMvY3h4LXN0bC8nLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgICAgICAgICAnYW5kcm9pZF9saWInOiAnPChhbmRyb2lkX3N5c3Jvb3QpL3Vzci9saWI2NCcsCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAnYW5kcm9pZF9saWInOiAnPChhbmRyb2lkX3N5c3Jvb3QpL3Vzci9saWInLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYW5kcm9pZF9saWJjcHBfaW5jbHVkZSc6ICc8KGFuZHJvaWRfc3RsKS9sbHZtLWxpYmMrKy9saWJjeHgvaW5jbHVkZScsCi0gICAgICAgICAgICAnYW5kcm9pZF9saWJjcHBfYWJpX2luY2x1ZGUnOiAnPChhbmRyb2lkX3N0bCkvbGx2bS1saWJjKythYmkvbGliY3h4YWJpL2luY2x1ZGUnLAotICAgICAgICAgICAgJ2FuZHJvaWRfbGliY3BwX2xpYnMnOiAnPChhbmRyb2lkX3N0bCkvbGx2bS1saWJjKysvbGlicycsCi0gICAgICAgICAgICAnYW5kcm9pZF9zdXBwb3J0X2luY2x1ZGUnOiAnPChhbmRyb2lkX25ka19yb290KS9zb3VyY2VzL2FuZHJvaWQvc3VwcG9ydC9pbmNsdWRlJywKLSAgICAgICAgICAgICdhbmRyb2lkX3N5c3Jvb3QnOiAnPChhbmRyb2lkX3N5c3Jvb3QpJywKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgICAgJ2FuZHJvaWRfbGliY3BwX2xpYnJhcnknOiAnYysrX3N0YXRpYycsCi0gICAgICB9XSwgICMgT1M9PSJhbmRyb2lkIgotICAgICAgWydob3N0X2NsYW5nPT0xJywgewotICAgICAgICAnY29uZGl0aW9ucyc6WwotICAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICdob3N0X2xkJzogJzwhKHdoaWNoIGxkKScsCi0gICAgICAgICAgICAnaG9zdF9yYW5saWInOiAnPCEod2hpY2ggcmFubGliKScsCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICAgICdob3N0X2NjJzogJzwoY2xhbmdfZGlyKS9iaW4vY2xhbmcnLAotICAgICAgICAnaG9zdF9jeHgnOiAnPChjbGFuZ19kaXIpL2Jpbi9jbGFuZysrJywKLSAgICAgIH0sIHsKLSAgICAgICAgJ2hvc3RfY2MnOiAnPCEod2hpY2ggZ2NjKScsCi0gICAgICAgICdob3N0X2N4eCc6ICc8ISh3aGljaCBnKyspJywKLSAgICAgIH1dLAotICAgIF0sCi0gICAgIyBEZWZhdWx0IEFSTSB2YXJpYWJsZSBzZXR0aW5ncy4KLSAgICAnYXJtX3ZlcnNpb24lJzogJ2RlZmF1bHQnLAotICAgICdhcm1fZnB1JSc6ICd2ZnB2MycsCi0gICAgJ2FybV9mbG9hdF9hYmklJzogJ2RlZmF1bHQnLAotICAgICdhcm1fdGh1bWInOiAnZGVmYXVsdCcsCi0KLSAgICAjIERlZmF1bHQgTUlQUyB2YXJpYWJsZSBzZXR0aW5ncy4KLSAgICAnbWlwc19hcmNoX3ZhcmlhbnQlJzogJ3IyJywKLSAgICAjIFBvc3NpYmxlIHZhbHVlcyBmcDMyLCBmcDY0LCBmcHh4LgotICAgICMgZnAzMiAtIDMyIDMyLWJpdCBGUFUgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUsIGRvdWJsZXMgYXJlIHBsYWNlZCBpbgotICAgICMgICAgICAgIHJlZ2lzdGVyIHBhaXJzLgotICAgICMgZnA2NCAtIDMyIDY0LWJpdCBGUFUgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUuCi0gICAgIyBmcHh4IC0gY29tcGF0aWJpbGl0eSBtb2RlLCBpdCBjaG9vc2VzIGZwMzIgb3IgZnA2NCBkZXBlbmRpbmcgb24gcnVudGltZQotICAgICMgICAgICAgIGRldGVjdGlvbgotICAgICdtaXBzX2ZwdV9tb2RlJSc6ICdmcDMyJywKLSAgfSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAndmFyaWFibGVzJzogewotICAgICAgJ3Y4X2NvZGUlJzogJzwodjhfY29kZSknLAotICAgICAgJ2NsYW5nX3dhcm5pbmdfZmxhZ3MnOiBbCi0gICAgICAgICctV3NpZ24tY29tcGFyZScsCi0gICAgICAgICMgVE9ETyh0aGFraXMpOiBodHRwczovL2NyYnVnLmNvbS82MDQ4ODgKLSAgICAgICAgJy1Xbm8tdW5kZWZpbmVkLXZhci10ZW1wbGF0ZScsCi0gICAgICAgICMgVE9ETyh5YW5nZ3VvKTogaXNzdWUgNTI1OAotICAgICAgICAnLVduby1ub25wb3J0YWJsZS1pbmNsdWRlLXBhdGgnLAotICAgICAgICAnLVduby10YXV0b2xvZ2ljYWwtY29uc3RhbnQtY29tcGFyZScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOlsKLSAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICdob3N0X29zJSc6ICc8KGhvc3Rfb3MpJywKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgJ2luY2x1ZGVzJzogWyAnc2V0X2NsYW5nX3dhcm5pbmdfZmxhZ3MuZ3lwaScsIF0sCi0gICAgJ2RlZmF1bHRfY29uZmlndXJhdGlvbic6ICdEZWJ1ZycsCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgJ0RlYnVnQmFzZUNvbW1vbic6IHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydPUz09ImFpeCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLWcnLCAnLU9nJywgJy1neGNvZmYnIF0sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1nJywgJy1PMCcgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnT3B0ZGVidWcnOiB7Ci0gICAgICAgICdpbmhlcml0X2Zyb20nOiBbICdEZWJ1Z0Jhc2VDb21tb24nLCAnRGVidWdCYXNlMScgXSwKLSAgICAgIH0sCi0gICAgICAnRGVidWcnOiB7Ci0gICAgICAgICMgWGNvZGUgaW5zaXN0cyBvbiB0aGlzIGVtcHR5IGVudHJ5LgotICAgICAgfSwKLSAgICAgICdSZWxlYXNlJzogewotICAgICAgICAnY2ZsYWdzKyc6IFsnPEAocmVsZWFzZV9leHRyYV9jZmxhZ3MpJ10sCi0gICAgICB9LAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAgICdPcHRkZWJ1Z194NjQnOiB7Ci0gICAgICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydPcHRkZWJ1ZyddLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ0RlYnVnX3g2NCc6IHsKLSAgICAgICAgICAgICdpbmhlcml0X2Zyb20nOiBbJ0RlYnVnJ10sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnUmVsZWFzZV94NjQnOiB7Ci0gICAgICAgICAgICAnaW5oZXJpdF9mcm9tJzogWydSZWxlYXNlJ10sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgJ2NvbmRpdGlvbnMnOlsKLSAgICAgIFsnY2xhbmc9PTAnLCB7Ci0gICAgICAgICdjZmxhZ3MrJzogWwotICAgICAgICAgICctV25vLXVuaW5pdGlhbGl6ZWQnLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ2NsYW5nPT0xIG9yIGhvc3RfY2xhbmc9PTEnLCB7Ci0gICAgICAgICMgVGhpcyBpcyBoZXJlIHNvIHRoYXQgYWxsIGZpbGVzIGdldCByZWNvbXBpbGVkIGFmdGVyIGEgY2xhbmcgcm9sbCBhbmQKLSAgICAgICAgIyB3aGVuIHR1cm5pbmcgY2xhbmcgb24gb3Igb2ZmLgotICAgICAgICAjIChkZWZpbmVzIGFyZSBwYXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBidWlsZCBzeXN0ZW1zIHJlYnVpbGQKLSAgICAgICAgIyB0aGluZ3Mgd2hlbiB0aGVpciBjb21tYW5kbGluZSBjaGFuZ2VzKS4gTm90aGluZyBzaG91bGQgZXZlciByZWFkIHRoaXMKLSAgICAgICAgIyBkZWZpbmUuCi0gICAgICAgICdkZWZpbmVzJzogWydDUl9DTEFOR19SRVZJU0lPTj08IShweXRob24gPChERVBUSCkvdG9vbHMvY2xhbmcvc2NyaXB0cy91cGRhdGUucHkgLS1wcmludC1yZXZpc2lvbiknXSwKLSAgICAgIH1dLAotICAgICAgWydjbGFuZz09MSBhbmQgdGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsnLW1zdGFjay1hbGlnbm1lbnQ9MTYnLCAnLW1zdGFja3JlYWxpZ24nXSwKLSAgICAgIH1dLAotICAgICAgWydmYXN0YnVpbGQhPTAnLCB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnT1M9PSJ3aW4iIGFuZCBmYXN0YnVpbGQ9PTEnLCB7Ci0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAjIFRoaXMgdGVsbHMgdGhlIGxpbmtlciB0byBnZW5lcmF0ZSAucGRicywgc28gdGhhdAotICAgICAgICAgICAgICAgICMgd2UgY2FuIGdldCBtZWFuaW5nZnVsIHN0YWNrIHRyYWNlcy4KLSAgICAgICAgICAgICAgICAnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAjIE5vIGRlYnVnIGluZm8gdG8gYmUgZ2VuZXJhdGVkIGJ5IGNvbXBpbGVyLgotICAgICAgICAgICAgICAgICdEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0JzogJzAnLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLCAgIyBmYXN0YnVpbGQhPTAKLSAgICBdLAotICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgIFsndjhfY29kZSA9PSAwJywgewotICAgICAgICAnZGVmaW5lcyEnOiBbCi0gICAgICAgICAgJ0RFQlVHJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydvc19wb3NpeCA9PSAxIGFuZCBPUyAhPSAibWFjIicsIHsKLSAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byBnZXQgd2FybmluZ3MgZnJvbSB0aGlyZC1wYXJ0eSBjb2RlLAotICAgICAgICAgICAgIyBzbyByZW1vdmUgYW55IGV4aXN0aW5nIHdhcm5pbmctZW5hYmxpbmcgZmxhZ3MgbGlrZSAtV2FsbC4KLSAgICAgICAgICAgICdjZmxhZ3MhJzogWwotICAgICAgICAgICAgICAnLXBlZGFudGljJywKLSAgICAgICAgICAgICAgJy1XYWxsJywKLSAgICAgICAgICAgICAgJy1XZXJyb3InLAotICAgICAgICAgICAgICAnLVdleHRyYScsCi0gICAgICAgICAgICAgICctV3Nob3J0ZW4tNjQtdG8tMzInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3MrJzogWwotICAgICAgICAgICAgICAjIENsYW5nIGNvbnNpZGVycyB0aGUgYHJlZ2lzdGVyYCBrZXl3b3JkIGFzIGRlcHJlY2F0ZWQsIGJ1dAotICAgICAgICAgICAgICAjIElDVSB1c2VzIGl0IGFsbCBvdmVyIHRoZSBwbGFjZS4KLSAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1yZWdpc3RlcicsCi0gICAgICAgICAgICAgICMgSUNVIHVzZXMgaXRzIG93biBkZXByZWNhdGVkIGZ1bmN0aW9ucy4KLSAgICAgICAgICAgICAgJy1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMnLAotICAgICAgICAgICAgICAjIElDVSBwcmVmZXJzIGBhICYmIGIgfHwgY2Agb3ZlciBgKGEgJiYgYikgfHwgY2AuCi0gICAgICAgICAgICAgICctV25vLWxvZ2ljYWwtb3AtcGFyZW50aGVzZXMnLAotICAgICAgICAgICAgICAjIElDVSBoYXMgc29tZSBgdW5zaWduZWQgPCAwYCBjaGVja3MuCi0gICAgICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb21wYXJlJywKLSAgICAgICAgICAgICAgIyB1cmVzZGF0YS5jIGhhcyBzd2l0Y2goUkVTX0dFVF9UWVBFKHgpKSBjb2RlLiBUaGUKLSAgICAgICAgICAgICAgIyBSRVNfR0VUX1RZUEUgbWFjcm8gcmV0dXJucyBhbiBVUmVzVHlwZSBlbnVtLCBidXQgc29tZSBzd2l0Y2gKLSAgICAgICAgICAgICAgIyBzdGF0ZW1lbnQgY29udGFpbnMgY2FzZSB2YWx1ZXMgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGF0Ci0gICAgICAgICAgICAgICMgZW51bSAoZS5nLiBVUkVTX1RBQkxFMzIgd2hpY2ggaXMgaW4gVVJlc0ludGVybmFsVHlwZSkuIFRoaXMKLSAgICAgICAgICAgICAgIyBpcyBvbiBwdXJwb3NlLgotICAgICAgICAgICAgICAnLVduby1zd2l0Y2gnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3NfY2MhJzogWwotICAgICAgICAgICAgICAnLVdub24tdmlydHVhbC1kdG9yJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydPUyA9PSAibWFjIicsIHsKLSAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMnOiAnTk8nLCAgICAjIC1XZXJyb3IKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydPUyA9PSAid2luIicsIHsKLSAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnV2FybkFzRXJyb3InOiAnZmFsc2UnLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnb3NfcG9zaXg9PTEgYW5kIE9TIT0ibWFjIicsIHsKLSAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICMgQ29tbW9uIG9wdGlvbnMgZm9yIEFkZHJlc3NTYW5pdGl6ZXIsIExlYWtTYW5pdGl6ZXIsCi0gICAgICAgICAgIyBUaHJlYWRTYW5pdGl6ZXIsIE1lbW9yeVNhbml0aXplciBhbmQgQ0ZJIGJ1aWxkcy4KLSAgICAgICAgICBbJ2FzYW49PTEgb3IgbHNhbj09MSBvciB0c2FuPT0xIG9yIG1zYW49PTEgb3IgY2ZpX3ZwdHI9PTEnLCB7Ci0gICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInLAotICAgICAgICAgICAgICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsKLSAgICAgICAgICAgICAgICAgICctZm9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnYXNhbj09MScsIHsKLSAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZnNhbml0aXplPWFkZHJlc3MnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZzYW5pdGl6ZT1hZGRyZXNzJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgJ0FERFJFU1NfU0FOSVRJWkVSJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydsc2FuPT0xJywgewotICAgICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ190b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1mc2FuaXRpemU9bGVhaycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZnNhbml0aXplPWxlYWsnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnTEVBS19TQU5JVElaRVInLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ3RzYW49PTEnLCB7Ci0gICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZzYW5pdGl6ZT10aHJlYWQnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZzYW5pdGl6ZT10aHJlYWQnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnVEhSRUFEX1NBTklUSVpFUicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnbXNhbj09MScsIHsKLSAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZnNhbml0aXplPW1lbW9yeScsCi0gICAgICAgICAgICAgICAgICAnLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucz08KG1zYW5fdHJhY2tfb3JpZ2lucyknLAotICAgICAgICAgICAgICAgICAgJy1mUElDJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1mc2FuaXRpemU9bWVtb3J5JywKLSAgICAgICAgICAgICAgICAgICctcGllJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgJ01FTU9SWV9TQU5JVElaRVInLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ3VzZV9wcmVidWlsdF9pbnN0cnVtZW50ZWRfbGlicmFyaWVzPT0xJywgewotICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2luc3RydW1lbnRlZF9saWJyYXJpZXMvaW5zdHJ1bWVudGVkX2xpYnJhcmllcy5neXA6cHJlYnVpbHRfaW5zdHJ1bWVudGVkX2xpYnJhcmllcycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsndXNlX2N1c3RvbV9saWJjeHg9PTEnLCB7Ci0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvYnVpbGR0b29scy90aGlyZF9wYXJ0eS9saWJjKysvbGliYysrLmd5cDpsaWJjeHhfcHJveHknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ3Nhbml0aXplcl9jb3ZlcmFnZSE9MCcsIHsKLSAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZnNhbml0aXplLWNvdmVyYWdlPTwoc2FuaXRpemVyX2NvdmVyYWdlKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICdTQU5JVElaRVJfQ09WRVJBR0UnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ2xpbnV4X3VzZV9idW5kbGVkX2dvbGQ9PTEnLCB7Ci0gICAgICAgICAgICAjIFB1dCBvdXIgYmludXRpbHMsIHdoaWNoIGNvbnRhaW5zIGdvbGQgaW4gdGhlIHNlYXJjaCBwYXRoLiBXZSBwYXNzCi0gICAgICAgICAgICAjIHRoZSBwYXRoIHRvIGdvbGQgdG8gdGhlIGNvbXBpbGVyLiBneXAgbGVhdmVzIHVuc3BlY2lmaWVkIHdoYXQgdGhlCi0gICAgICAgICAgICAjIGN3ZCBpcyB3aGVuIHJ1bm5pbmcgdGhlIGNvbXBpbGVyLCBzbyB0aGUgbm9ybWFsIGd5cCBwYXRoLW11bmdpbmcKLSAgICAgICAgICAgICMgZmFpbHMgdXMuIFRoaXMgaGFjayBnZXRzIHRoZSByaWdodCBwYXRoLgotICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICMgTm90ZSwgQ2hyb21pdW0gYWxsb3dzIGlhMzIgaG9zdCBhcmNoIGFzIHdlbGwsIHdlIGxpbWl0IHRoaXMgdG8KLSAgICAgICAgICAgICAgIyB4NjQgaW4gdjguCi0gICAgICAgICAgICAgICctQjwoYmFzZV9kaXIpL3RoaXJkX3BhcnR5L2JpbnV0aWxzL0xpbnV4X3g2NC9SZWxlYXNlL2JpbicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnc3lzcm9vdCE9IiIgYW5kIGNsYW5nPT0xJywgewotICAgICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ190b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAgICAgJ2xkX3BhdGhzJzogWyc8ISg8KERFUFRIKS9idWlsZC9saW51eC9zeXNyb290X2xkX3BhdGguc2ggPChzeXNyb290KSknXSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLS1zeXNyb290PTwoc3lzcm9vdCknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLS1zeXNyb290PTwoc3lzcm9vdCknLAotICAgICAgICAgICAgICAgICAgJzwhKDwoYmFzZV9kaXIpL2d5cGZpbGVzL3N5c3Jvb3RfbGRfZmxhZ3Muc2ggPEAobGRfcGF0aHMpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV1dCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ2FzYW49PTEnLCB7Ci0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICMgRklYTUUobWFjaGVuYmFjaCk6IFRoaXMgaXMgb3V0ZGF0ZWQgY29tcGFyZWQgdG8gY29tbW9uLmd5cGkuCi0gICAgICAgICAgICAgICdPVEhFUl9DRkxBR1MrJzogWwotICAgICAgICAgICAgICAgICctZm5vLW9taXQtZnJhbWUtcG9pbnRlcicsCi0gICAgICAgICAgICAgICAgJy1nbGluZS10YWJsZXMtb25seScsCi0gICAgICAgICAgICAgICAgJy1mc2FuaXRpemU9YWRkcmVzcycsCi0gICAgICAgICAgICAgICAgJy13JywgICMgaHR0cDovL2NyYnVnLmNvbS8xNjI3ODMKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ09USEVSX0NGTEFHUyEnOiBbCi0gICAgICAgICAgICAgICAgJy1mb21pdC1mcmFtZS1wb2ludGVyJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ0FERFJFU1NfU0FOSVRJWkVSJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvZ3lwZmlsZXMvbWFjL2FzYW4uZ3lwOmFzYW5fZHluYW1pY19ydW50aW1lJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnX3R5cGUhPSJzdGF0aWNfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogeydPVEhFUl9MREZMQUdTJzogWyctZnNhbml0aXplPWFkZHJlc3MnXX0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ3Nhbml0aXplcl9jb3ZlcmFnZSE9MCcsIHsKLSAgICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZnNhbml0aXplLWNvdmVyYWdlPTwoc2FuaXRpemVyX2NvdmVyYWdlKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICdTQU5JVElaRVJfQ09WRVJBR0UnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH0sICAjIHRhcmdldF9kZWZhdWx0cwotICAgIH1dLCAgIyBPUz09Im1hYyIKLSAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJlZWJzZCIgb3IgT1M9PSJvcGVuYnNkIiBvciBPUz09InNvbGFyaXMiIFwKLSAgICAgICBvciBPUz09Im5ldGJzZCIgb3IgT1M9PSJhaXgiJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICc8KHdlcnJvciknLAotICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICctcHRocmVhZCcsCi0gICAgICAgICAgJy1wZWRhbnRpYycsCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLAotICAgICAgICAgICctV25vLWdudS16ZXJvLXZhcmlhZGljLW1hY3JvLWFyZ3VtZW50cycsCi0gICAgICAgIF0sCi0gICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgJy1Xbm9uLXZpcnR1YWwtZHRvcicsCi0gICAgICAgICAgJy1mbm8tZXhjZXB0aW9ucycsCi0gICAgICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAgICAgJy1zdGQ9Z251KysxMScsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWyAnLXB0aHJlYWQnLCBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAjIERvbid0IHdhcm4gYWJvdXQgVFJBQ0VfRVZFTlRfKiBtYWNyb3Mgd2l0aCB6ZXJvIGFyZ3VtZW50cyBwYXNzZWQgdG8KLSAgICAgICAgICAjICMjX19WQV9BUkdTX18uIEM5OSBzdHJpY3QgbW9kZSBwcm9oaWJpdHMgaGF2aW5nIHplcm8gdmFyaWFkaWMgbWFjcm8KLSAgICAgICAgICAjIGFyZ3VtZW50cyBpbiBnY2MuCi0gICAgICAgICAgWyAnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzIScgOiBbCi0gICAgICAgICAgICAgICctcGVkYW50aWMnICwKLSAgICAgICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uLgotICAgICAgICAgICAgICAnLVduby1nbnUtemVyby12YXJpYWRpYy1tYWNyby1hcmd1bWVudHMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3MnIDogWwotICAgICAgICAgICAgICAjIERpc2FibGUgZ2NjIHdhcm5pbmdzIGZvciBvcHRpbWl6YXRpb25zIGJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uCi0gICAgICAgICAgICAgICMgdGhhdCBzaWduZWQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIuIEdlbmVyYXRlcyBmYWxzZSBwb3NpdGl2ZXMKLSAgICAgICAgICAgICAgIyAoc2VlIGh0dHA6Ly9jcmJ1Zy5jb20vdjgvNjM0MSkuCi0gICAgICAgICAgICAgICItV25vLXN0cmljdC1vdmVyZmxvdyIsCi0gICAgICAgICAgICAgICMgRG9uJ3QgcmVseSBvbiBzdHJpY3QgYWxpYXNpbmc7IHY4IGRvZXMgd2VpcmQgcG9pbnRlciBjYXN0cyBhbGwKLSAgICAgICAgICAgICAgIyBvdmVyIHRoZSBwbGFjZS4KLSAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ2NmbGFncycgOiBbCi0gICAgICAgICAgICAgICMgVE9ETyhoYW5zKTogaHR0cHM6Ly9jcmJ1Zy5jb20vNzY3MDU5Ci0gICAgICAgICAgICAgICctV25vLXRhdXRvbG9naWNhbC1jb25zdGFudC1jb21wYXJlJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY2xhbmc9PTEgYW5kICh2OF90YXJnZXRfYXJjaD09Ing2NCIgb3IgdjhfdGFyZ2V0X2FyY2g9PSJhcm02NCIgXAotICAgICAgICAgICAgb3IgdjhfdGFyZ2V0X2FyY2g9PSJtaXBzNjRlbCIpJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1Xc2hvcnRlbi02NC10by0zMicgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICdob3N0X2FyY2g9PSJwcGM2NCIgYW5kIE9TIT0iYWl4IicsIHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbICctbW1pbmltYWwtdG9jJyBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsgJ3Zpc2liaWxpdHk9PSJoaWRkZW4iIGFuZCB2OF9lbmFibGVfYmFja3RyYWNlPT0wJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1mdmlzaWJpbGl0eT1oaWRkZW4nIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1mUElDJywgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICdjbGFuZz09MCBhbmQgY292ZXJhZ2U9PTEnLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLWZwcm9maWxlLWFyY3MnLCAnLWZ0ZXN0LWNvdmVyYWdlJ10sCi0gICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1mcHJvZmlsZS1hcmNzJ10sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgICMgJ09TPT0ibGludXgiIG9yIE9TPT0iZnJlZWJzZCIgb3IgT1M9PSJvcGVuYnNkIiBvciBPUz09InNvbGFyaXMiCi0gICAgIyAgb3IgT1M9PSJuZXRic2QiJwotICAgIFsnT1M9PSJxbngiJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICc8KHdlcnJvciknLAotICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICMgRG9uJ3Qgd2FybiBhYm91dCB0aGUgInN0cnVjdCBmb28gZiA9IHswfTsiIGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCi0gICAgICAgICAgJy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMnLAotICAgICAgICAgICctV25vLWdudS16ZXJvLXZhcmlhZGljLW1hY3JvLWFyZ3VtZW50cycsCi0gICAgICAgIF0sCi0gICAgICAgICdjZmxhZ3NfY2MnOiBbCi0gICAgICAgICAgJy1Xbm9uLXZpcnR1YWwtZHRvcicsCi0gICAgICAgICAgJy1mbm8tZXhjZXB0aW9ucycsCi0gICAgICAgICAgJy1mbm8tcnR0aScsCi0gICAgICAgICAgJy1zdGQ9Z251KysxMScsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsgJ3Zpc2liaWxpdHk9PSJoaWRkZW4iJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1mdmlzaWJpbGl0eT1oaWRkZW4nIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1mUElDJyBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyAnX3Rvb2xzZXQ9PSJob3N0IiBhbmQgaG9zdF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbICctcHRocmVhZCcgXSwKLSAgICAgICAgICAgICdsZGZsYWdzJzogWyAnLXB0aHJlYWQnIF0sCi0gICAgICAgICAgICAnbGlicmFyaWVzJzogWyAnLWxydCcgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICdfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLVduby1wc2FiaScgXSwKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbICctbGJhY2t0cmFjZScsICctbHNvY2tldCcsICctbG0nIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLCAgIyBPUz09InFueCIKLSAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUnLAotICAgICAgICAgICdfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFJywKLSAgICAgICAgICAnX1VTSU5HX1YxMTBfU0RLNzFfJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydjb21wb25lbnQ9PSJzdGF0aWNfbGlicmFyeSInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ19IQVNfRVhDRVBUSU9OUz0wJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCc6IDAsCi0gICAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgICAgICMgQzQwOTE6ICd0eXBlZGVmICc6IGlnbm9yZWQgb24gbGVmdCBvZiAnWCcgd2hlbiBubyB2YXJpYWJsZSBpcwotICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkLgotICAgICAgICAgICMgVGhpcyBoYXBwZW5zIGluIGEgbnVtYmVyIG9mIFdpbmRvd3MgaGVhZGVycy4gRHVtYi4KLSAgICAgICAgICA0MDkxLAotCi0gICAgICAgICAgIyBDNDEyNzogY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudAotICAgICAgICAgICMgVGhpcyB3YXJuaW5nIGNhbiBpbiB0aGVvcnkgY2F0Y2ggZGVhZCBjb2RlIGFuZCBvdGhlciBwcm9ibGVtcywgYnV0Ci0gICAgICAgICAgIyB0cmlnZ2VycyBpbiBmYXIgdG9vIG1hbnkgZGVzaXJhYmxlIGNhc2VzIHdoZXJlIHRoZSBjb25kaXRpb25hbAotICAgICAgICAgICMgZXhwcmVzc2lvbiBpcyBlaXRoZXIgc2V0IGJ5IG1hY3JvcyBvciBjb3JyZXNwb25kcyBzb21lIGxlZ2l0aW1hdGUKLSAgICAgICAgICAjIGNvbXBpbGUtdGltZSBjb25zdGFudCBleHByZXNzaW9uIChkdWUgdG8gY29uc3RhbnQgdGVtcGxhdGUgYXJncywKLSAgICAgICAgICAjIGNvbmRpdGlvbmFscyBjb21wYXJpbmcgdGhlIHNpemVzIG9mIGRpZmZlcmVudCB0eXBlcywgZXRjLikuICBTb21lIG9mCi0gICAgICAgICAgIyB0aGVzZSBjYW4gYmUgd29ya2VkIGFyb3VuZCwgYnV0IGl0J3Mgbm90IHdvcnRoIGl0LgotICAgICAgICAgIDQxMjcsCi0KLSAgICAgICAgICAjIEM0MzUxOiBuZXcgYmVoYXZpb3I6IGVsZW1lbnRzIG9mIGFycmF5ICdhcnJheScgd2lsbCBiZSBkZWZhdWx0Ci0gICAgICAgICAgIyAgICAgICAgaW5pdGlhbGl6ZWQKLSAgICAgICAgICAjIFRoaXMgaXMgYSBzaWxseSAid2FybmluZyIgdGhhdCBiYXNpY2FsbHkganVzdCBhbGVydHMgeW91IHRoYXQgdGhlCi0gICAgICAgICAgIyBjb21waWxlciBpcyBnb2luZyB0byBhY3R1YWxseSBmb2xsb3cgdGhlIGxhbmd1YWdlIHNwZWMgbGlrZSBpdCdzCi0gICAgICAgICAgIyBzdXBwb3NlZCB0bywgaW5zdGVhZCBvZiBub3QgZm9sbG93aW5nIGl0IGxpa2Ugb2xkIGJ1Z2d5IHZlcnNpb25zCi0gICAgICAgICAgIyBkaWQuICBUaGVyZSdzIGFic29sdXRlbHkgbm8gcmVhc29uIHRvIHR1cm4gdGhpcyBvbi4KLSAgICAgICAgICA0MzUxLAotCi0gICAgICAgICAgIyBDNDM1NTogJ3RoaXMnOiB1c2VkIGluIGJhc2UgbWVtYmVyIGluaXRpYWxpemVyIGxpc3QKLSAgICAgICAgICAjIEl0J3MgY29tbW9ubHkgdXNlZnVsIHRvIHBhc3MgfHRoaXN8IHRvIG9iamVjdHMgaW4gYSBjbGFzcycKLSAgICAgICAgICAjIGluaXRpYWxpemVyIGxpc3QuICBXaGlsZSB0aGlzIHdhcm5pbmcgY2FuIGNhdGNoIHJlYWwgYnVncywgbW9zdCBvZgotICAgICAgICAgICMgdGhlIHRpbWUgdGhlIGNvbnN0cnVjdG9ycyBpbiBxdWVzdGlvbiBkb24ndCBhdHRlbXB0IHRvIGNhbGwgbWV0aG9kcwotICAgICAgICAgICMgb24gdGhlIHBhc3NlZC1pbiBwb2ludGVyICh1bnRpbCBsYXRlciksIGFuZCBhbm5vdGF0aW5nIGV2ZXJ5IGxlZ2l0Ci0gICAgICAgICAgIyB1c2FnZSBvZiB0aGlzIGlzIHNpbXBseSBtb3JlIGhhc3NsZSB0aGFuIHRoZSB3YXJuaW5nIGlzIHdvcnRoLgotICAgICAgICAgIDQzNTUsCi0KLSAgICAgICAgICAjIEM0NTAzOiAnaWRlbnRpZmllcic6IGRlY29yYXRlZCBuYW1lIGxlbmd0aCBleGNlZWRlZCwgbmFtZSB3YXMKLSAgICAgICAgICAjICAgICAgICB0cnVuY2F0ZWQKLSAgICAgICAgICAjIFRoaXMgb25seSBtZWFucyB0aGF0IHNvbWUgbG9uZyBlcnJvciBtZXNzYWdlcyBtaWdodCBoYXZlIHRydW5jYXRlZAotICAgICAgICAgICMgaWRlbnRpZmllcnMgaW4gdGhlIHByZXNlbmNlIG9mIGxvdHMgb2YgdGVtcGxhdGVzLiAgSXQgaGFzIG5vIGVmZmVjdAotICAgICAgICAgICMgb24gcHJvZ3JhbSBjb3JyZWN0bmVzcyBhbmQgdGhlcmUncyBubyByZWFsIHJlYXNvbiB0byB3YXN0ZSB0aW1lCi0gICAgICAgICAgIyB0cnlpbmcgdG8gcHJldmVudCBpdC4KLSAgICAgICAgICA0NTAzLAotCi0gICAgICAgICAgIyBXYXJuaW5nIEM0NTg5IHNheXM6ICJDb25zdHJ1Y3RvciBvZiBhYnN0cmFjdCBjbGFzcyBpZ25vcmVzCi0gICAgICAgICAgIyBpbml0aWFsaXplciBmb3IgdmlydHVhbCBiYXNlIGNsYXNzLiIgRGlzYWJsZSB0aGlzIHdhcm5pbmcgYmVjYXVzZSBpdAotICAgICAgICAgICMgaXMgZmxha3kgaW4gVlMgMjAxNSBSVE0uIEl0IHRyaWdnZXJzIG9uIGNvbXBpbGVyIGdlbmVyYXRlZAotICAgICAgICAgICMgY29weS1jb25zdHJ1Y3RvcnMgaW4gc29tZSBjYXNlcy4KLSAgICAgICAgICA0NTg5LAotCi0gICAgICAgICAgIyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnZnVuY3Rpb24nIGFuZCBDKysgb2JqZWN0IGRlc3RydWN0aW9uIGlzCi0gICAgICAgICAgIyAgICAgICAgbm9uLXBvcnRhYmxlCi0gICAgICAgICAgIyBUaGlzIHdhcm5pbmcgaXMgdW5hdm9pZGFibGUgd2hlbiB1c2luZyBlLmcuIHNldGptcC9sb25nam1wLiAgTVNETgotICAgICAgICAgICMgc3VnZ2VzdHMgdXNpbmcgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNldGptcC9sb25nam1wIGZvciBDKyssIGJ1dAotICAgICAgICAgICMgQ2hyb21pdW0gY29kZSBjb21waWxlcyB3aXRob3V0IGV4Y2VwdGlvbiBzdXBwb3J0LiAgV2UgdGhlcmVmb3JlIGhhdmUKLSAgICAgICAgICAjIHRvIHVzZSBzZXRqbXAvbG9uZ2ptcCBmb3IgZS5nLiBKUEVHIGRlY29kZSBlcnJvciBoYW5kbGluZywgd2hpY2gKLSAgICAgICAgICAjIG1lYW5zIHdlIGhhdmUgdG8gdHVybiBvZmYgdGhpcyB3YXJuaW5nIChhbmQgYmUgY2FyZWZ1bCBhYm91dCBob3cKLSAgICAgICAgICAjIG9iamVjdCBkZXN0cnVjdGlvbiBoYXBwZW5zIGluIHN1Y2ggY2FzZXMpLgotICAgICAgICAgIDQ2MTEsCi0KLSAgICAgICAgICAjIFRPRE8oam9jaGVuKTogVGhlc2Ugd2FybmluZ3MgYXJlIGxldmVsIDQuIFRoZXkgd2lsbCBiZSBzbG93bHkKLSAgICAgICAgICAjIHJlbW92ZWQgYXMgY29kZSBpcyBmaXhlZC4KLSAgICAgICAgICA0MTAwLCAjIFVucmVmZXJlbmNlZCBmb3JtYWwgcGFyYW1ldGVyCi0gICAgICAgICAgNDEyMSwgIyBBbGlnbm1lbnQgb2YgYSBtZW1iZXIgd2FzIHNlbnNpdGl2ZSB0byBwYWNraW5nCi0gICAgICAgICAgNDI0NCwgIyBDb252ZXJzaW9uIGZyb20gJ3R5cGUxJyB0byAndHlwZTInLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSAgICAgICAgICA0MzAyLCAjIFRydW5jYXRpb24gZnJvbSAndHlwZSAxJyB0byAndHlwZSAyJwotICAgICAgICAgIDQzMDksICMgVHJ1bmNhdGlvbiBvZiBjb25zdGFudCB2YWx1ZQotICAgICAgICAgIDQzMTEsICMgUG9pbnRlciB0cnVuY2F0aW9uIGZyb20gJ3R5cGUnIHRvICd0eXBlJwotICAgICAgICAgIDQzMTIsICMgQ29udmVyc2lvbiBmcm9tICd0eXBlMScgdG8gJ3R5cGUyJyBvZiBncmVhdGVyIHNpemUKLSAgICAgICAgICA0NTA1LCAjIFVucmVmZXJlbmNlZCBsb2NhbCBmdW5jdGlvbiBoYXMgYmVlbiByZW1vdmVkCi0gICAgICAgICAgNDUxMCwgIyBEZWZhdWx0IGNvbnN0cnVjdG9yIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQKLSAgICAgICAgICA0NTEyLCAjIEFzc2lnbm1lbnQgb3BlcmF0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZAotICAgICAgICAgIDQ2MTAsICMgT2JqZWN0IGNhbiBuZXZlciBiZSBpbnN0YW50aWF0ZWQKLSAgICAgICAgICA0ODAwLCAjIEZvcmNpbmcgdmFsdWUgdG8gYm9vbC4KLSAgICAgICAgICA0ODM4LCAjIE5hcnJvd2luZyBjb252ZXJzaW9uLiBEb2Vzbid0IHNlZW0gdG8gYmUgdmVyeSB1c2VmdWwuCi0gICAgICAgICAgNDk5NSwgIyAnWCc6IG5hbWUgd2FzIG1hcmtlZCBhcyAjcHJhZ21hIGRlcHJlY2F0ZWQKLSAgICAgICAgICA0OTk2LCAjICdYJzogd2FzIGRlY2xhcmVkIGRlcHJlY2F0ZWQgKGZvciBHZXRWZXJzaW9uRXgpLgotCi0gICAgICAgICAgIyBUaGVzZSBhcmUgdmFyaWFibGUgc2hhZG93aW5nIHdhcm5pbmdzIHRoYXQgYXJlIG5ldyBpbiBWUzIwMTUuIFdlCi0gICAgICAgICAgIyBzaG91bGQgd29yayB0aHJvdWdoIHRoZXNlIGF0IHNvbWUgcG9pbnQgLS0gdGhleSBtYXkgYmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgICAgIyB0aGUgUlRNIHJlbGVhc2UgaW4gdGhlIC9XNCBzZXQuCi0gICAgICAgICAgNDQ1NiwgNDQ1NywgNDQ1OCwgNDQ1OSwKLSAgICAgICAgXSwKLSAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQnVmZmVyU2VjdXJpdHlDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZyc6ICd0cnVlJywKLSAgICAgICAgICAgICdSdW50aW1lVHlwZUluZm8nOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1dhcm5pbmdMZXZlbCc6ICczJywKLSAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0JzogJzMnLAotICAgICAgICAgICAgJ0RldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyAnbXN2c19tdWx0aV9jb3JlX2NvbXBpbGUnLCB7Ci0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWycvTVAnXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAgICdFeGNlcHRpb25IYW5kbGluZyc6ICcxJywgICMgL0VIc2MKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICdFeGNlcHRpb25IYW5kbGluZyc6ICcwJywKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHsKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsnL2lnbm9yZTo0MjIxJ10sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgJ1RhcmdldE1hY2hpbmUnOiAnMTcnLCAgIyB4NjQKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJzEnLCAgIyBpYTMyCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgJ3dzMl8zMi5saWInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnTWFwRmlsZU5hbWUnOiAnJChPdXREaXIpXFwkKFRhcmdldE5hbWUpLm1hcCcsCi0gICAgICAgICAgICAnSW1wb3J0TGlicmFyeSc6ICckKE91dERpcilcXGxpYlxcJChUYXJnZXROYW1lKS5saWInLAotICAgICAgICAgICAgJ0ZpeGVkQmFzZUFkZHJlc3MnOiAnMScsCi0gICAgICAgICAgICAjIExpbmtJbmNyZW1lbnRhbCB2YWx1ZXM6Ci0gICAgICAgICAgICAjICAgMCA9PSBkZWZhdWx0Ci0gICAgICAgICAgICAjICAgMSA9PSAvSU5DUkVNRU5UQUw6Tk8KLSAgICAgICAgICAgICMgICAyID09IC9JTkNSRU1FTlRBTAotICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcxJywKLSAgICAgICAgICAgICMgU3ViU3lzdGVtIHZhbHVlczoKLSAgICAgICAgICAgICMgICAwID09IG5vdCBzZXQKLSAgICAgICAgICAgICMgICAxID09IC9TVUJTWVNURU06Q09OU09MRQotICAgICAgICAgICAgIyAgIDIgPT0gL1NVQlNZU1RFTTpXSU5ET1dTCi0gICAgICAgICAgICAnU3ViU3lzdGVtJzogJzEnLAotCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd2OF9lbmFibGVfaTE4bl9zdXBwb3J0PT0xJywgewotICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgJ2FkdmFwaTMyLmxpYicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAgICdNaW5pbXVtUmVxdWlyZWRWZXJzaW9uJzogJzUuMDInLCAgIyBTZXJ2ZXIgMjAwMy4KLSAgICAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICcxNycsICAjIHg2NAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgJ01pbmltdW1SZXF1aXJlZFZlcnNpb24nOiAnNS4wMScsICAjIFhQLgotICAgICAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJzEnLCAgIyBpYTMyCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydjbGFuZz09MScsIHsKLSAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHVudXNlZCBmdW5jdGlvbiBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgICAgICAgIyAoVGhpcyBpcyBhbHNvIHVzZWQgb24gb3RoZXIgcGxhdGZvcm1zLikKLSAgICAgICAgICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24KLSAgICAgICAgICAgICAgICAgICMgcGF0dGVybi4KLSAgICAgICAgICAgICAgICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzJywKLQotICAgICAgICAgICAgICAgICAgIyBUT0RPKGhhbnMpOiBNYWtlIHRoaXMgbGlzdCBzaG9ydGVyIGV2ZW50dWFsbHksIGh0dHA6Ly9jcmJ1Zy5jb20vNTA0NjU3Ci0gICAgICAgICAgICAgICAgICAnLVF1bnVzZWQtYXJndW1lbnRzJywgICMgaHR0cDovL2NyYnVnLmNvbS81MDQ2NTgKLSAgICAgICAgICAgICAgICAgICctV25vLW1pY3Jvc29mdC1lbnVtLXZhbHVlJywgICMgaHR0cDovL2NyYnVnLmNvbS81MDUyOTYKLSAgICAgICAgICAgICAgICAgICctV25vLXVua25vd24tcHJhZ21hcycsICAjIGh0dHA6Ly9jcmJ1Zy5jb20vNTA1MzE0Ci0gICAgICAgICAgICAgICAgICAnLVduby1taWNyb3NvZnQtY2FzdCcsICAjIGh0dHA6Ly9jcmJ1Zy5jb20vNTUwMDY1Ci0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydjbGFuZz09MSBhbmQgTVNWU19WRVJTSU9OID09ICIyMDEzIicsIHsKLSAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAgICAgJy1mbXNjLXZlcnNpb249MTgwMCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydjbGFuZz09MSBhbmQgTVNWU19WRVJTSU9OID09ICIyMDE1IicsIHsKLSAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWwotICAgICAgICAgICAgICAgICAgJy1mbXNjLXZlcnNpb249MTkwMCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICB9LAotICAgIH1dLCAgIyBPUz09IndpbiIKLSAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ1NES1JPT1QnOiAnbWFjb3N4JywKLSAgICAgICAgJ1NZTVJPT1QnOiAnPChERVBUSCkveGNvZGVidWlsZCcsCi0gICAgICB9LAotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICdBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMnOiAnTk8nLAotICAgICAgICAgICdHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCc6ICdjOTknLCAgICAgICAgICMgLXN0ZD1jOTkKLSAgICAgICAgICAnR0NDX0NXX0FTTV9TWU5UQVgnOiAnTk8nLCAgICAgICAgICAgICAgICAjIE5vIC1mYXNtLWJsb2NrcwotICAgICAgICAgICdHQ0NfRFlOQU1JQ19OT19QSUMnOiAnTk8nLCAgICAgICAgICAgICAgICMgTm8gLW1keW5hbWljLW5vLXBpYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKEVxdWl2YWxlbnQgdG8gLWZQSUMpCi0gICAgICAgICAgJ0dDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMnOiAnTk8nLCAgICAgICAgIyAtZm5vLWV4Y2VwdGlvbnMKLSAgICAgICAgICAnR0NDX0VOQUJMRV9DUFBfUlRUSSc6ICdOTycsICAgICAgICAgICAgICAjIC1mbm8tcnR0aQotICAgICAgICAgICdHQ0NfRU5BQkxFX1BBU0NBTF9TVFJJTkdTJzogJ05PJywgICAgICAgICMgTm8gLW1wYXNjYWwtc3RyaW5ncwotICAgICAgICAgICMgR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOIG1hcHMgdG8gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuCi0gICAgICAgICAgJ0dDQ19JTkxJTkVTX0FSRV9QUklWQVRFX0VYVEVSTic6ICdZRVMnLAotICAgICAgICAgICdHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTic6ICdZRVMnLCAgICAgICMgLWZ2aXNpYmlsaXR5PWhpZGRlbgotICAgICAgICAgICdHQ0NfVEhSRUFEU0FGRV9TVEFUSUNTJzogJ05PJywgICAgICAgICAgICMgLWZuby10aHJlYWRzYWZlLXN0YXRpY3MKLSAgICAgICAgICAnR0NDX1dBUk5fTk9OX1ZJUlRVQUxfREVTVFJVQ1RPUic6ICdZRVMnLCAjIC1Xbm9uLXZpcnR1YWwtZHRvcgotICAgICAgICAgICMgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIG1hcHMgdG8gLW1tYWNvc3gtdmVyc2lvbi1taW4KLSAgICAgICAgICAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJzogJzwobWFjX2RlcGxveW1lbnRfdGFyZ2V0KScsCi0gICAgICAgICAgJ1BSRUJJTkRJTkcnOiAnTk8nLCAgICAgICAgICAgICAgICAgICAgICAgIyBObyAtV2wsLXByZWJpbmQKLSAgICAgICAgICAnU1lNUk9PVCc6ICc8KERFUFRIKS94Y29kZWJ1aWxkJywKLSAgICAgICAgICAnVVNFX0hFQURFUk1BUCc6ICdOTycsCi0gICAgICAgICAgJ09USEVSX0NGTEFHUyc6IFsKLSAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAnLVdhbGwnLAotICAgICAgICAgICAgJy1XZW5kaWYtbGFiZWxzJywKLSAgICAgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAotICAgICAgICAgICAgIyBEb24ndCB3YXJuIGFib3V0IHRoZSAic3RydWN0IGZvbyBmID0gezB9OyIgaW5pdGlhbGl6YXRpb24gcGF0dGVybi4KLSAgICAgICAgICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzJywKLSAgICAgICAgICAgICctV25vLWdudS16ZXJvLXZhcmlhZGljLW1hY3JvLWFyZ3VtZW50cycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd3ZXJyb3I9PSIiJywgewotICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogeydHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTJzogJ05PJ30sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogeydHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTJzogJ1lFUyd9LAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsnY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdHQ0NfVkVSU0lPTic6ICdjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wJywKLSAgICAgICAgICAgICAgJ0NMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCc6ICdjKysxMScsICAjIC1zdGQ9YysrMTEKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydjbGFuZ194Y29kZT09MCcsIHsKLSAgICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgICAnQ0MnOiAnPChjbGFuZ19kaXIpL2Jpbi9jbGFuZycsCi0gICAgICAgICAgICAgICAgICAnTERQTFVTUExVUyc6ICc8KGNsYW5nX2RpcikvYmluL2NsYW5nKysnLAotICAgICAgICAgICAgICAgICAgJ0NMQU5HX0NYWF9MSUJSQVJZJzogJ2xpYmMrKycKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Ing2NCIgb3IgdjhfdGFyZ2V0X2FyY2g9PSJhcm02NCIgXAotICAgICAgICAgICAgICAgIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwczY0ZWwiJywgewotICAgICAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsnV0FSTklOR19DRkxBR1MnOiBbJy1Xc2hvcnRlbi02NC10by0zMiddfSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdHlwZSE9InN0YXRpY19saWJyYXJ5IicsIHsKLSAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsnT1RIRVJfTERGTEFHUyc6IFsnLVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QnXX0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sICAjIHRhcmdldF9jb25kaXRpb25zCi0gICAgICB9LCAgIyB0YXJnZXRfZGVmYXVsdHMKLSAgICB9XSwgICMgT1M9PSJtYWMiCi0gICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0FORFJPSUQnLAotICAgICAgICBdLAotICAgICAgICAnY29uZmlndXJhdGlvbnMnOiB7Ci0gICAgICAgICAgJ1JlbGVhc2UnOiB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLWZvbWl0LWZyYW1lLXBvaW50ZXInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCAgIyBSZWxlYXNlCi0gICAgICAgIH0sICAjIGNvbmZpZ3VyYXRpb25zCi0gICAgICAgICdjZmxhZ3MnOiBbICctV25vLWFiaScsICctV2FsbCcsICctVycsICctV25vLXVudXNlZC1wYXJhbWV0ZXInXSwKLSAgICAgICAgJ2NmbGFnc19jYyc6IFsgJy1Xbm9uLXZpcnR1YWwtZHRvcicsICctZm5vLXJ0dGknLCAnLWZuby1leGNlcHRpb25zJywKLSAgICAgICAgICAgICAgICAgICAgICAgJy1zdGQ9Z251KysxMScgXSwKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICctcHRocmVhZCcsICAjIE5vdCBzdXBwb3J0ZWQgYnkgQW5kcm9pZCB0b29sY2hhaW4uCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgICAgICAgICAnLWZ1bndpbmQtdGFibGVzJywKLSAgICAgICAgICAgICAgJy1mc3RhY2stcHJvdGVjdG9yJywKLSAgICAgICAgICAgICAgJy1mbm8tc2hvcnQtZW51bXMnLAotICAgICAgICAgICAgICAnLWZpbmxpbmUtbGltaXQ9NjQnLAotICAgICAgICAgICAgICAnLVdhLC0tbm9leGVjc3RhY2snLAotICAgICAgICAgICAgICAnLS1zeXNyb290PTwoYW5kcm9pZF9zeXNyb290KScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NmbGFnc19jYyc6IFsKLSAgICAgICAgICAgICAgJy1pc3lzdGVtPChhbmRyb2lkX2xpYmNwcF9pbmNsdWRlKScsCi0gICAgICAgICAgICAgICctaXN5c3RlbTwoYW5kcm9pZF9saWJjcHBfYWJpX2luY2x1ZGUpJywKLSAgICAgICAgICAgICAgJy1pc3lzdGVtPChhbmRyb2lkX3N1cHBvcnRfaW5jbHVkZSknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQU5EUk9JRCcsCi0gICAgICAgICAgICAgICMnX19HTlVfU09VUkNFPTEnLCAgIyBOZWNlc3NhcnkgZm9yIGNsb25lKCkKLSAgICAgICAgICAgICAgJ0hBVkVfT0ZGNjRfVCcsCi0gICAgICAgICAgICAgICdIQVZFX1NZU19VSU9fSCcsCi0gICAgICAgICAgICAgICdBTkRST0lEX0JJTlNJWkVfSEFDSycsICMgRW5hYmxlIHRlbXBvcmFyeSBoYWNrcyB0byByZWR1Y2UgYmluc2l6ZS4KLSAgICAgICAgICAgICAgJ0FORFJPSURfTkRLX1ZFUlNJT049PChhbmRyb2lkX25ka192ZXJzaW9uKScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2xkZmxhZ3MhJzogWwotICAgICAgICAgICAgICAnLXB0aHJlYWQnLCAgIyBOb3Qgc3VwcG9ydGVkIGJ5IEFuZHJvaWQgdG9vbGNoYWluLgotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAnLVdsLC0tbm8tdW5kZWZpbmVkJywKLSAgICAgICAgICAgICAgJy0tc3lzcm9vdD08KGFuZHJvaWRfc3lzcm9vdCknLAotICAgICAgICAgICAgICAnLW5vc3RkbGliJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnbGlicmFyaWVzISc6IFsKLSAgICAgICAgICAgICAgICAnLWxydCcsICAjIGxpYnJ0IGlzIGJ1aWx0IGludG8gQmlvbmljLgotICAgICAgICAgICAgICAgICMgTm90IHN1cHBvcnRlZCBieSBBbmRyb2lkIHRvb2xjaGFpbi4KLSAgICAgICAgICAgICAgICAjIFdoZXJlIGRvIHRoZXNlIGNvbWUgZnJvbT8gIENhbid0IGZpbmQgcmVmZXJlbmNlcyBpbgotICAgICAgICAgICAgICAgICMgYW55IENocm9taXVtIGd5cCBvciBneXBpIGZpbGUuICBNYXliZSB0aGV5IGNvbWUgZnJvbQotICAgICAgICAgICAgICAgICMgZ3lwIGl0c2VsZj8KLSAgICAgICAgICAgICAgICAnLWxwdGhyZWFkJywgJy1sbnNzMycsICctbG5zc3V0aWwzJywgJy1sc21pbWUzJywgJy1scGxkczQnLCAnLWxwbGM0JywgJy1sbnNwcjQnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAgICctbDwoYW5kcm9pZF9saWJjcHBfbGlicmFyeSknLAotICAgICAgICAgICAgICAgICctbGF0b21pYycsCi0gICAgICAgICAgICAgICAgIyBNYW51YWxseSBsaW5rIHRoZSBsaWJnY2MuYSB0aGF0IHRoZSBjcm9zcyBjb21waWxlciB1c2VzLgotICAgICAgICAgICAgICAgICc8ISg8KGFuZHJvaWRfdG9vbGNoYWluKS8qLWdjYyAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSknLAotICAgICAgICAgICAgICAgICctbGMnLAotICAgICAgICAgICAgICAgICctbGRsJywKLSAgICAgICAgICAgICAgICAnLWxtJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAiYXJtIicsIHsKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICMgRW5hYmxlIGlkZW50aWNhbCBjb2RlIGZvbGRpbmcgdG8gcmVkdWNlIHNpemUuCi0gICAgICAgICAgICAgICAgICAnLVdsLC0taWNmPXNhZmUnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtIiBhbmQgYXJtX3ZlcnNpb249PTcnLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctbWFyY2g9YXJtdjctYScsCi0gICAgICAgICAgICAgICAgICAnLW10dW5lPWNvcnRleC1hOCcsCi0gICAgICAgICAgICAgICAgICAnLW1mcHU9dmZwMycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctTDwoYW5kcm9pZF9saWJjcHBfbGlicykvYXJtZWFiaS12N2EnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtIiBhbmQgYXJtX3ZlcnNpb24gPCA3JywgewotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1MPChhbmRyb2lkX2xpYmNwcF9saWJzKS9hcm1lYWJpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWyd0YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLUw8KGFuZHJvaWRfbGliY3BwX2xpYnMpL3g4Nl82NCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJhcm02NCInLCB7Ci0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLUw8KGFuZHJvaWRfbGliY3BwX2xpYnMpL2FybTY0LXY4YScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAgICAgICAjIFRoZSB4ODYgdG9vbGNoYWluIGN1cnJlbnRseSBoYXMgcHJvYmxlbXMgd2l0aCBzdGFjay1wcm90ZWN0b3IuCi0gICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZzdGFjay1wcm90ZWN0b3InLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctZm5vLXN0YWNrLXByb3RlY3RvcicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctTDwoYW5kcm9pZF9saWJjcHBfbGlicykveDg2JywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWyd0YXJnZXRfYXJjaD09Im1pcHNlbCInLCB7Ci0gICAgICAgICAgICAgICAgIyBUaGUgbWlwcyB0b29sY2hhaW4gY3VycmVudGx5IGhhcyBwcm9ibGVtcyB3aXRoIHN0YWNrLXByb3RlY3Rvci4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsKLSAgICAgICAgICAgICAgICAgICctZnN0YWNrLXByb3RlY3RvcicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1mbm8tc3RhY2stcHJvdGVjdG9yJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1MPChhbmRyb2lkX2xpYmNwcF9saWJzKS9taXBzJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWycodGFyZ2V0X2FyY2g9PSJhcm0iIG9yIHRhcmdldF9hcmNoPT0iYXJtNjQiIG9yIHRhcmdldF9hcmNoPT0ieDY0IiBvciB0YXJnZXRfYXJjaD09ImlhMzIiKSBhbmQgY29tcG9uZW50IT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZQSUUnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLXBpZScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ190eXBlPT0iZXhlY3V0YWJsZSInLCB7Ci0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtNjQiIG9yIHRhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJy1XbCwtZHluYW1pYy1saW5rZXIsL3N5c3RlbS9iaW4vbGlua2VyNjQnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnLVdsLC1keW5hbWljLWxpbmtlciwvc3lzdGVtL2Jpbi9saW5rZXInLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1CZHluYW1pYycsCi0gICAgICAgICAgICAgICAgICAnLVdsLC16LG5vY29weXJlbG9jJywKLSAgICAgICAgICAgICAgICAgICMgY3J0YmVnaW5fZHluYW1pYy5vIHNob3VsZCBiZSB0aGUgbGFzdCBpdGVtIGluIGxkZmxhZ3MuCi0gICAgICAgICAgICAgICAgICAnPChhbmRyb2lkX2xpYikvY3J0YmVnaW5fZHluYW1pYy5vJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAjIGNydGVuZF9hbmRyb2lkLm8gbmVlZHMgdG8gYmUgdGhlIGxhc3QgaXRlbSBpbiBsaWJyYXJpZXMuCi0gICAgICAgICAgICAgICAgICAjIERvIG5vdCBhZGQgYW55IGxpYnJhcmllcyBhZnRlciB0aGlzIQotICAgICAgICAgICAgICAgICAgJzwoYW5kcm9pZF9saWIpL2NydGVuZF9hbmRyb2lkLm8nLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190eXBlPT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1XbCwtc2hhcmVkLC1Cc3ltYm9saWMnLAotICAgICAgICAgICAgICAgICAgJzwoYW5kcm9pZF9saWIpL2NydGJlZ2luX3NvLm8nLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190eXBlPT0ic3RhdGljX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgIyBEb24ndCBleHBvcnQgc3ltYm9scyBmcm9tIHN0YXRpY2FsbHkgbGlua2VkIGxpYnJhcmllcy4KLSAgICAgICAgICAgICAgICAgICctV2wsLS1leGNsdWRlLWxpYnM9QUxMJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sICAjIF90b29sc2V0PT0idGFyZ2V0IgotICAgICAgICAgICMgU2V0dGluZ3MgZm9yIGJ1aWxkaW5nIGhvc3QgdGFyZ2V0cyB1c2luZyB0aGUgc3lzdGVtIHRvb2xjaGFpbi4KLSAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLXB0aHJlYWQnIF0sCi0gICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1wdGhyZWFkJyBdLAotICAgICAgICAgICAgJ2xkZmxhZ3MhJzogWwotICAgICAgICAgICAgICAnLVdsLC16LG5vZXhlY3N0YWNrJywKLSAgICAgICAgICAgICAgJy1XbCwtLWdjLXNlY3Rpb25zJywKLSAgICAgICAgICAgICAgJy1XbCwtTzEnLAotICAgICAgICAgICAgICAnLVdsLC0tYXMtbmVlZGVkJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sICAjIHRhcmdldF9jb25kaXRpb25zCi0gICAgICB9LCAgIyB0YXJnZXRfZGVmYXVsdHMKLSAgICB9XSwgICMgT1M9PSJhbmRyb2lkIgotICAgIFsnT1M9PSJhbmRyb2lkIiBhbmQgY2xhbmc9PTAnLCB7Ci0gICAgICAjIEhhcmRjb2RlIHRoZSBjb21waWxlciBuYW1lcyBpbiB0aGUgTWFrZWZpbGUgc28gdGhhdAotICAgICAgIyBpdCB3b24ndCBkZXBlbmQgb24gdGhlIGVudmlyb25tZW50IGF0IG1ha2UgdGltZS4KLSAgICAgICdtYWtlX2dsb2JhbF9zZXR0aW5ncyc6IFsKLSAgICAgICAgWydMRCcsICc8ISgvYmluL2VjaG8gLW4gPChhbmRyb2lkX3Rvb2xjaGFpbikvLi4vKi9iaW4vbGQpJ10sCi0gICAgICAgIFsnUkFOTElCJywgJzwhKC9iaW4vZWNobyAtbiA8KGFuZHJvaWRfdG9vbGNoYWluKS8uLi8qL2Jpbi9yYW5saWIpJ10sCi0gICAgICAgIFsnQ0MnLCAnPCEoL2Jpbi9lY2hvIC1uIDwoYW5kcm9pZF90b29sY2hhaW4pLyotZ2NjKSddLAotICAgICAgICBbJ0NYWCcsICc8ISgvYmluL2VjaG8gLW4gPChhbmRyb2lkX3Rvb2xjaGFpbikvKi1nKyspJ10sCi0gICAgICAgIFsnTEQuaG9zdCcsICc8KGhvc3RfbGQpJ10sCi0gICAgICAgIFsnUkFOTElCLmhvc3QnLCAnPChob3N0X3JhbmxpYiknXSwKLSAgICAgICAgWydDQy5ob3N0JywgJzwoaG9zdF9jYyknXSwKLSAgICAgICAgWydDWFguaG9zdCcsICc8KGhvc3RfY3h4KSddLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ2NsYW5nIT0xIGFuZCBob3N0X2NsYW5nPT0xIGFuZCB0YXJnZXRfYXJjaCE9ImlhMzIiIGFuZCB0YXJnZXRfYXJjaCE9Ing2NCInLCB7Ci0gICAgICAnbWFrZV9nbG9iYWxfc2V0dGluZ3MnOiBbCi0gICAgICAgIFsnQ0MuaG9zdCcsICc8KGNsYW5nX2RpcikvYmluL2NsYW5nJ10sCi0gICAgICAgIFsnQ1hYLmhvc3QnLCAnPChjbGFuZ19kaXIpL2Jpbi9jbGFuZysrJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnY2xhbmc9PTAgYW5kIGhvc3RfY2xhbmc9PTEgYW5kIHRhcmdldF9hcmNoIT0iaWEzMiIgYW5kIHRhcmdldF9hcmNoIT0ieDY0IicsIHsKLSAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICdjZmxhZ3NfY2MnOiBbICctc3RkPWdudSsrMTEnLCBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgeyAnY2ZsYWdzISc6IFsgJy1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWZzJyBdfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnY2xhbmc9PTEgYW5kICI8KEdFTkVSQVRPUikiPT0ibmluamEiJywgewotICAgICAgIyBTZWUgaHR0cDovL2NyYnVnLmNvbS8xMTAyNjIKLSAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgICAgICdjZmxhZ3MnOiBbICctZmNvbG9yLWRpYWdub3N0aWNzJyBdLAotICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7ICdPVEhFUl9DRkxBR1MnOiBbICctZmNvbG9yLWRpYWdub3N0aWNzJyBdIH0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnY2xhbmc9PTEgYW5kICgoT1MhPSJtYWMiIGFuZCBPUyE9ImlvcyIpIG9yIGNsYW5nX3hjb2RlPT0wKSAnCi0gICAgICAgICdhbmQgT1MhPSJ3aW4iIGFuZCAiPChHRU5FUkFUT1IpIj09Im1ha2UiJywgewotICAgICAgJ21ha2VfZ2xvYmFsX3NldHRpbmdzJzogWwotICAgICAgICBbJ0NDJywgJzwoY2xhbmdfZGlyKS9iaW4vY2xhbmcnXSwKLSAgICAgICAgWydDWFgnLCAnPChjbGFuZ19kaXIpL2Jpbi9jbGFuZysrJ10sCi0gICAgICAgIFsnQ0MuaG9zdCcsICckKENDKSddLAotICAgICAgICBbJ0NYWC5ob3N0JywgJyQoQ1hYKSddLAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ2NsYW5nPT0xIGFuZCAoKE9TIT0ibWFjIiBhbmQgT1MhPSJpb3MiKSBvciBjbGFuZ194Y29kZT09MCkgJwotICAgICAgICAnYW5kIE9TIT0id2luIiBhbmQgIjwoR0VORVJBVE9SKSI9PSJuaW5qYSInLCB7Ci0gICAgICAnbWFrZV9nbG9iYWxfc2V0dGluZ3MnOiBbCi0gICAgICAgIFsnQ0MnLCAnPChjbGFuZ19kaXIpL2Jpbi9jbGFuZyddLAotICAgICAgICBbJ0NYWCcsICc8KGNsYW5nX2RpcikvYmluL2NsYW5nKysnXSwKLSAgICAgICAgWydDQy5ob3N0JywgJyQoQ0MpJ10sCi0gICAgICAgIFsnQ1hYLmhvc3QnLCAnJChDWFgpJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnY2xhbmc9PTEgYW5kIE9TPT0id2luIicsIHsKLSAgICAgICdtYWtlX2dsb2JhbF9zZXR0aW5ncyc6IFsKLSAgICAgICAgIyBPbiBXaW5kb3dzLCBneXAncyBuaW5qYSBnZW5lcmF0b3Igb25seSBsb29rcyBhdCBDQy4KLSAgICAgICAgWydDQycsICc8KGNsYW5nX2RpcikvYmluL2NsYW5nLWNsJ10sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnT1M9PSJsaW51eCIgYW5kIHRhcmdldF9hcmNoPT0iYXJtIiBhbmQgaG9zdF9hcmNoIT0iYXJtIiBhbmQgY2xhbmc9PTAgYW5kICI8KEdFTkVSQVRPUikiPT0ibmluamEiJywgewotICAgICAgIyBTZXQgZGVmYXVsdCBBUk0gY3Jvc3MgdG9vbHMgb24gbGludXguICBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbgotICAgICAgIyB1c2luZyBDQyxDWFgsQ0MuaG9zdCBhbmQgQ1hYLmhvc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICAgICAgJ21ha2VfZ2xvYmFsX3NldHRpbmdzJzogWwotICAgICAgICBbJ0NDJywgJzwhKHdoaWNoIGFybS1saW51eC1nbnVlYWJpaGYtZ2NjKSddLAotICAgICAgICBbJ0NYWCcsICc8ISh3aGljaCBhcm0tbGludXgtZ251ZWFiaWhmLWcrKyknXSwKLSAgICAgICAgWydDQy5ob3N0JywgJzwoaG9zdF9jYyknXSwKLSAgICAgICAgWydDWFguaG9zdCcsICc8KGhvc3RfY3h4KSddLAotICAgICAgXSwKLSAgICB9XSwKLSAgICAjIFRPRE8oeXlhbmFnaXNhd2EpOiBzdXBwb3J0cyBHRU5FUkFUT1I9PW1ha2UKLSAgICAjICBtYWtlIGdlbmVyYXRvciBkb2Vzbid0IHN1cHBvcnQgQ0Nfd3JhcHBlciB3aXRob3V0IENDCi0gICAgIyAgaW4gbWFrZV9nbG9iYWxfc2V0dGluZ3MgeWV0LgotICAgIFsndXNlX2dvbWE9PTEgYW5kICgiPChHRU5FUkFUT1IpIj09Im5pbmphIiBvciBjbGFuZz09MSknLCB7Ci0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydjb3ZlcmFnZT09MScsIHsKLSAgICAgICAgICAjIFdyYXAgZ29tYSB3aXRoIGNvdmVyYWdlIHdyYXBwZXIuCi0gICAgICAgICAgJ21ha2VfZ2xvYmFsX3NldHRpbmdzJzogWwotICAgICAgICAgICAgWydDQ193cmFwcGVyJywgJzwoYmFzZV9kaXIpL2d5cGZpbGVzL2NvdmVyYWdlX3dyYXBwZXIucHkgPChnb21hZGlyKS9nb21hY2MnXSwKLSAgICAgICAgICAgIFsnQ1hYX3dyYXBwZXInLCAnPChiYXNlX2RpcikvZ3lwZmlsZXMvY292ZXJhZ2Vfd3JhcHBlci5weSA8KGdvbWFkaXIpL2dvbWFjYyddLAotICAgICAgICAgICAgWydDQy5ob3N0X3dyYXBwZXInLCAnPChiYXNlX2RpcikvZ3lwZmlsZXMvY292ZXJhZ2Vfd3JhcHBlci5weSA8KGdvbWFkaXIpL2dvbWFjYyddLAotICAgICAgICAgICAgWydDWFguaG9zdF93cmFwcGVyJywgJzwoYmFzZV9kaXIpL2d5cGZpbGVzL2NvdmVyYWdlX3dyYXBwZXIucHkgPChnb21hZGlyKS9nb21hY2MnXSwKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgIyBVc2Ugb25seSBnb21hIHdyYXBwZXIuCi0gICAgICAgICAgJ21ha2VfZ2xvYmFsX3NldHRpbmdzJzogWwotICAgICAgICAgICAgWydDQ193cmFwcGVyJywgJzwoZ29tYWRpcikvZ29tYWNjJ10sCi0gICAgICAgICAgICBbJ0NYWF93cmFwcGVyJywgJzwoZ29tYWRpcikvZ29tYWNjJ10sCi0gICAgICAgICAgICBbJ0NDLmhvc3Rfd3JhcHBlcicsICc8KGdvbWFkaXIpL2dvbWFjYyddLAotICAgICAgICAgICAgWydDWFguaG9zdF93cmFwcGVyJywgJzwoZ29tYWRpcikvZ29tYWNjJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sIHsKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2NvdmVyYWdlPT0xJywgewotICAgICAgICAgICMgVXNlIG9ubHkgY292ZXJhZ2Ugd3JhcHBlci4KLSAgICAgICAgICAnbWFrZV9nbG9iYWxfc2V0dGluZ3MnOiBbCi0gICAgICAgICAgICBbJ0NDX3dyYXBwZXInLCAnPChiYXNlX2RpcikvZ3lwZmlsZXMvY292ZXJhZ2Vfd3JhcHBlci5weSddLAotICAgICAgICAgICAgWydDWFhfd3JhcHBlcicsICc8KGJhc2VfZGlyKS9neXBmaWxlcy9jb3ZlcmFnZV93cmFwcGVyLnB5J10sCi0gICAgICAgICAgICBbJ0NDLmhvc3Rfd3JhcHBlcicsICc8KGJhc2VfZGlyKS9neXBmaWxlcy9jb3ZlcmFnZV93cmFwcGVyLnB5J10sCi0gICAgICAgICAgICBbJ0NYWC5ob3N0X3dyYXBwZXInLCAnPChiYXNlX2RpcikvZ3lwZmlsZXMvY292ZXJhZ2Vfd3JhcHBlci5weSddLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3N5c3Jvb3RfbGRfZmxhZ3Muc2ggYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy9zeXNyb290X2xkX2ZsYWdzLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1Y2M4MDExLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3N5c3Jvb3RfbGRfZmxhZ3Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jIS9iaW4vc2gKLSMgQ29weXJpZ2h0IDIwMTcgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIFRoaXMgaXMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGFmdGVyOgotIyBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzI5MDAxOTMwMDMKLQotZm9yIGVudHJ5IGluICRAOyBkbwotICBlY2hvIC1MJGVudHJ5Ci0gIGVjaG8gLVdsLC1ycGF0aC1saW5rPSRlbnRyeQotZG9uZSB8IHhhcmdzIGVjaG8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3Y4X2V4dGVybmFsX3NuYXBzaG90Lmd5cGkgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy92OF9leHRlcm5hbF9zbmFwc2hvdC5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2YzRiLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L2d5cGZpbGVzL3Y4X2V4dGVybmFsX3NuYXBzaG90Lmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotIyBLZWVwaW5nIHRoaXMgc2VwYXJhdGUgc2luY2UgTm9kZS5qcyBkb2VzIHVzZSBpdAotewotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfZXh0ZXJuYWxfc25hcHNob3QnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsndjhfdXNlX2V4dGVybmFsX3N0YXJ0dXBfZGF0YT09MScsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdCNob3N0JywKLSAgICAgICAgICAgICAgICAnanMyY19leHRyYXMjaG9zdCcsCi0gICAgICAgICAgICAgICAgJ25hdGl2ZXNfYmxvYicsCi0gICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0J10sCi0gICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdCcsCi0gICAgICAgICAgICAgICAgICduYXRpdmVzX2Jsb2InLAotICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnQlVJTERJTkdfVjhfU0hBUkVEJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnVVNJTkdfVjhfU0hBUkVEJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ3Y4X2Jhc2UnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvc2V0dXAtaXNvbGF0ZS1kZXNlcmlhbGl6ZS5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvc25hcHNob3QvZW1iZWRkZWQtZW1wdHkuY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL3NuYXBzaG90L25hdGl2ZXMtZXh0ZXJuYWwuY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL3NuYXBzaG90L3NuYXBzaG90LWV4dGVybmFsLmNjJywKLSAgICAgICAgICAgICc8KGVtYmVkZGVkX2J1aWx0aW5zX3NuYXBzaG90X3NyYyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdydW5fbWtzbmFwc2hvdCAoZXh0ZXJuYWwpJywKLSAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICAgICAnPChta3NuYXBzaG90X2V4ZWMpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFtdLAotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyd2OF9yYW5kb21fc2VlZCE9MCcsIHsKLSAgICAgICAgICAgICAgICAgICAgJ21rc25hcHNob3RfZmxhZ3MnOiBbJy0tcmFuZG9tLXNlZWQnLCAnPCh2OF9yYW5kb21fc2VlZCknXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWyd2OF92ZWN0b3Jfc3RvcmVzIT0wJywgewotICAgICAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnLS12ZWN0b3Itc3RvcmVzJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsndjhfb3NfcGFnZV9zaXplIT0wJywgewotICAgICAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnLS12OF9vc19wYWdlX3NpemUnLCAnPCh2OF9vc19wYWdlX3NpemUpJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsndjhfZW5hYmxlX2VtYmVkZGVkX2J1aWx0aW5zPTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICMgJ2VtYmVkZGVkX2J1aWx0aW5zX3NuYXBzaG90X3NyYyc6IFsgIiR0YXJnZXRfZ2VuX2Rpci9lbWJlZGRlZCR7c3VmZml4fS5jYyIgXSwKLSAgICAgICAgICAgICAgICAgICAgIyAnbWtzbmFwc2hvdF9mbGFncyc6ICBbIi0tZW1iZWRkZWRfc3JjIiwgIiR0YXJnZXRfZ2VuX2Rpci9lbWJlZGRlZCR7c3VmZml4fS5jYyIsXSwKLSAgICAgICAgICAgICAgICAgICAgIyBpZiAoaW52b2tlci5lbWJlZGRlZF92YXJpYW50ICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICMgICBhcmdzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgIyAgICAgIi0tZW1iZWRkZWRfdmFyaWFudCIsCi0gICAgICAgICAgICAgICAgICAgICMgICAgIGludm9rZXIuZW1iZWRkZWRfdmFyaWFudCwKLSAgICAgICAgICAgICAgICAgICAgIyAgIF0KLSAgICAgICAgICAgICAgICAgICAgIyB9Ci0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgWyd2OF9lbWJlZF9zY3JpcHQhPSIiJywgewotICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJzwodjhfZW1iZWRfc2NyaXB0KScsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9zbmFwc2hvdF9ibG9iX2hvc3QuYmluJywKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KGVtYmVkZGVkX2J1aWx0aW5zX3NuYXBzaG90X3NyYyknCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgJzwobWtzbmFwc2hvdF9leGVjKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPEAobWtzbmFwc2hvdF9mbGFncyknLAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3RhcnR1cF9ibG9iJywgJzwoUFJPRFVDVF9ESVIpL3NuYXBzaG90X2Jsb2JfaG9zdC5iaW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJzwoZW1iZWRfc2NyaXB0KScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnPCh3YXJtdXBfc2NyaXB0KScsCi0gICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvc25hcHNob3RfYmxvYi5iaW4nLAotICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgICc8KG1rc25hcHNob3RfZXhlYyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICc8QChta3NuYXBzaG90X2ZsYWdzKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3RhcnR1cF9ibG9iJywgJzwoUFJPRFVDVF9ESVIpL3NuYXBzaG90X2Jsb2IuYmluJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnPChlbWJlZF9zY3JpcHQpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnPCh3YXJtdXBfc2NyaXB0KScsCi0gICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3NuYXBzaG90X2Jsb2IuYmluJywKLSAgICAgICAgICAgICAgICAgICAgICc8KGVtYmVkZGVkX2J1aWx0aW5zX3NuYXBzaG90X3NyYyknCi0gICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgICAgICAgICAgJzwobWtzbmFwc2hvdF9leGVjKScsCi0gICAgICAgICAgICAgICAgICAgICAnPEAobWtzbmFwc2hvdF9mbGFncyknLAotICAgICAgICAgICAgICAgICAgICAgJy0tc3RhcnR1cF9ibG9iJywgJzwoUFJPRFVDVF9ESVIpL3NuYXBzaG90X2Jsb2IuYmluJywKLSAgICAgICAgICAgICAgICAgICAgICc8KGVtYmVkX3NjcmlwdCknLAotICAgICAgICAgICAgICAgICAgICAgJzwod2FybXVwX3NjcmlwdCknLAotICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwgICMgdjhfZXh0ZXJuYWxfc25hcHNob3QKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnbmF0aXZlc19ibG9iJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0J10sCi0gICAgICAgICB9XSwKLSAgICAgICAgWyd2OF91c2VfZXh0ZXJuYWxfc3RhcnR1cF9kYXRhPT0xJywgewotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldD09MScsIHsKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsnanMyY19leHRyYXMjaG9zdCddLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2pzMmNfZXh0cmFzX2JpbicsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvdG9vbHMvanMyYy5weScsCi0gICAgICAgICAgICAgICAgJzxAKHY4X2V4dHJhX2xpYnJhcnlfZmlsZXMpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ291dHB1dHMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2xpYnJhcmllcy1leHRyYXMuYmluJ10sCi0gICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3Rvb2xzL2pzMmMucHknLAotICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9leHRyYXMtbGlicmFyaWVzLmNjJywKLSAgICAgICAgICAgICAgICAnRVhUUkFTJywKLSAgICAgICAgICAgICAgICAnPEAodjhfZXh0cmFfbGlicmFyeV9maWxlcyknLAotICAgICAgICAgICAgICAgICctLXN0YXJ0dXBfYmxvYicsICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgICAgICctLW5vanMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2NvbmNhdGVuYXRlX25hdGl2ZXNfYmxvYicsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvdG9vbHMvY29uY2F0ZW5hdGUtZmlsZXMucHknLAotICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9saWJyYXJpZXMtZXh0cmFzLmJpbicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9uYXRpdmVzX2Jsb2JfaG9zdC5iaW4nLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24yJywgJzxAKF9pbnB1dHMpJywgJzwoUFJPRFVDVF9ESVIpL25hdGl2ZXNfYmxvYl9ob3N0LmJpbicKLSAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9uYXRpdmVzX2Jsb2IuYmluJywKLSAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8QChfaW5wdXRzKScsICc8KFBST0RVQ1RfRElSKS9uYXRpdmVzX2Jsb2IuYmluJwotICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9uYXRpdmVzX2Jsb2IuYmluJywKLSAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAgICAgICAncHl0aG9uMicsICc8QChfaW5wdXRzKScsICc8KFBST0RVQ1RfRElSKS9uYXRpdmVzX2Jsb2IuYmluJwotICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0KLSAgICB9LCAgIyBuYXRpdmVzX2Jsb2IKLSAgXQotfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvZ3lwZmlsZXMvd2luL21zdnNfZGVwZW5kZW5jaWVzLmlzb2xhdGUgYi90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy93aW4vbXN2c19kZXBlbmRlbmNpZXMuaXNvbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1OTEyNi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9neXBmaWxlcy93aW4vbXN2c19kZXBlbmRlbmNpZXMuaXNvbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTYgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIyBUT0RPKG1hY2hlbmJhY2gpOiBSZW1vdmUgdGhpcyB3aGVuIGNyYnVnLmNvbS82Njk5MTAgaXMgcmVzb2x2ZWQuCi17Ci0gICdjb25kaXRpb25zJzogWwotICAgICMgQ29weSB0aGUgVlMgcnVudGltZSBETExzIGludG8gdGhlIGlzb2xhdGUgc28gdGhhdCB0aGV5Ci0gICAgIyBkb24ndCBoYXZlIHRvIGJlIHByZWluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUuCi0gICAgIwotICAgICMgVlMyMDEzIHJ1bnRpbWVzCi0gICAgWydPUz09IndpbiIgYW5kIG1zdnNfdmVyc2lvbj09MjAxMyBhbmQgY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiIGFuZCAoQ09ORklHVVJBVElPTl9OQU1FPT0iRGVidWciIG9yIENPTkZJR1VSQVRJT05fTkFNRT09IkRlYnVnX3g2NCIpJywgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9tc3ZjcDEyMGQuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbXN2Y3IxMjBkLmRsbCcsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnT1M9PSJ3aW4iIGFuZCBtc3ZzX3ZlcnNpb249PTIwMTMgYW5kIGNvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IiBhbmQgKENPTkZJR1VSQVRJT05fTkFNRT09IlJlbGVhc2UiIG9yIENPTkZJR1VSQVRJT05fTkFNRT09IlJlbGVhc2VfeDY0IiknLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL21zdmNwMTIwLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL21zdmNyMTIwLmRsbCcsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgICMgVlMyMDE1LzIwMTcgcnVudGltZXMKLSAgICBbJ09TPT0id2luIiBhbmQgKG1zdnNfdmVyc2lvbj09MjAxNSBvciBtc3ZzX3ZlcnNpb249PTIwMTcpIGFuZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSIgYW5kIChDT05GSUdVUkFUSU9OX05BTUU9PSJEZWJ1ZyIgb3IgQ09ORklHVVJBVElPTl9OQU1FPT0iRGVidWdfeDY0IiknLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnZmlsZXMnOiBbCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL21zdmNwMTQwZC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS92Y2NvcmxpYjE0MGQuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvdmNydW50aW1lMTQwZC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS91Y3J0YmFzZWQuZGxsJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfV0sCi0gICAgWydPUz09IndpbiIgYW5kIChtc3ZzX3ZlcnNpb249PTIwMTUgb3IgbXN2c192ZXJzaW9uPT0yMDE3KSBhbmQgY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiIGFuZCAoQ09ORklHVVJBVElPTl9OQU1FPT0iUmVsZWFzZSIgb3IgQ09ORklHVVJBVElPTl9OQU1FPT0iUmVsZWFzZV94NjQiKScsIHsKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdmaWxlcyc6IFsKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbXN2Y3AxNDAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvdmNjb3JsaWIxNDAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvdmNydW50aW1lMTQwLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL3VjcnRiYXNlLmRsbCcsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH1dLAotICAgIFsnT1M9PSJ3aW4iIGFuZCAobXN2c192ZXJzaW9uPT0yMDE1IG9yIG1zdnNfdmVyc2lvbj09MjAxNykgYW5kIGNvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKLSAgICAgICMgV2luZG93cyAxMCBVbml2ZXJzYWwgQyBSdW50aW1lIGJpbmFyaWVzLgotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2ZpbGVzJzogWwotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtY29uc29sZS1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLWRhdGV0aW1lLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtZGVidWctbDEtMS0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY29yZS1lcnJvcmhhbmRsaW5nLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtZmlsZS1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLWZpbGUtbDEtMi0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY29yZS1maWxlLWwyLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtaGFuZGxlLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtaGVhcC1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLWludGVybG9ja2VkLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtbGlicmFyeWxvYWRlci1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLWxvY2FsaXphdGlvbi1sMS0yLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLW1lbW9yeS1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLW5hbWVkcGlwZS1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLXByb2Nlc3NlbnZpcm9ubWVudC1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLXByb2Nlc3N0aHJlYWRzLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtcHJvY2Vzc3RocmVhZHMtbDEtMS0xLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY29yZS1wcm9maWxlLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtcnRsc3VwcG9ydC1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLXN0cmluZy1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jb3JlLXN5bmNoLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtc3luY2gtbDEtMi0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY29yZS1zeXNpbmZvLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNvcmUtdGltZXpvbmUtbDEtMS0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY29yZS11dGlsLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC1jb25pby1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jcnQtY29udmVydC1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jcnQtZW52aXJvbm1lbnQtbDEtMS0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY3J0LWZpbGVzeXN0ZW0tbDEtMS0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY3J0LWhlYXAtbDEtMS0wLmRsbCcsCi0gICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2FwaS1tcy13aW4tY3J0LWxvY2FsZS1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jcnQtbWF0aC1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jcnQtbXVsdGlieXRlLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC1wcml2YXRlLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC1wcm9jZXNzLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC1ydW50aW1lLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC1zdGRpby1sMS0xLTAuZGxsJywKLSAgICAgICAgICAnPChQUk9EVUNUX0RJUikvYXBpLW1zLXdpbi1jcnQtc3RyaW5nLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC10aW1lLWwxLTEtMC5kbGwnLAotICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9hcGktbXMtd2luLWNydC11dGlsaXR5LWwxLTEtMC5kbGwnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXN0YXJib2FyZC5jYyBiL3RoaXJkX3BhcnR5L3Y4L3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXN0YXJib2FyZC5jYwppbmRleCA5NGIzMjQ2Li5iMzEwM2ZkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS92OC9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1zdGFyYm9hcmQuY2MKKysrIGIvdGhpcmRfcGFydHkvdjgvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tc3RhcmJvYXJkLmNjCkBAIC04MSwxOCArODEsMTIgQEAKIH0KIAogaW50IE9TOjpHZXRVc2VyVGltZSh1aW50MzJfdCogc2VjcywgdWludDMyX3QqIHVzZWNzKSB7Ci0jaWYgU0JfQVBJX1ZFUlNJT04gPj0gMTIKICAgaWYgKCFTYlRpbWVJc1RpbWVUaHJlYWROb3dTdXBwb3J0ZWQoKSkgcmV0dXJuIC0xOwotI2VuZGlmCiAKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMiB8fCBTQl9IQVMoVElNRV9USFJFQURfTk9XKQogICBTYlRpbWVNb25vdG9uaWMgdGhyZWFkX25vdyA9IFNiVGltZUdldE1vbm90b25pY1RocmVhZE5vdygpOwogICAqc2VjcyA9IHRocmVhZF9ub3cgLyBrU2JUaW1lU2Vjb25kOwogICAqdXNlY3MgPSB0aHJlYWRfbm93ICUga1NiVGltZVNlY29uZDsKICAgcmV0dXJuIDA7Ci0jZWxzZQotICByZXR1cm4gLTE7Ci0jZW5kaWYKIH0KIAogZG91YmxlIE9TOjpUaW1lQ3VycmVudE1pbGxpcygpIHsgcmV0dXJuIFRpbWU6Ok5vdygpLlRvSnNUaW1lKCk7IH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9iYXNlL3BsYXRmb3JtL3RpbWUuY2MgYi90aGlyZF9wYXJ0eS92OC9zcmMvYmFzZS9wbGF0Zm9ybS90aW1lLmNjCmluZGV4IDc4NTc0YjcuLjk3ZjJhOTAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9iYXNlL3BsYXRmb3JtL3RpbWUuY2MKKysrIGIvdGhpcmRfcGFydHkvdjgvc3JjL2Jhc2UvcGxhdGZvcm0vdGltZS5jYwpAQCAtNzUzLDEzICs3NTMsNyBAQAogCiBib29sIFRocmVhZFRpY2tzOjpJc1N1cHBvcnRlZCgpIHsKICNpZiBWOF9PU19TVEFSQk9BUkQKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICByZXR1cm4gU2JUaW1lSXNUaW1lVGhyZWFkTm93U3VwcG9ydGVkKCk7Ci0jZWxpZiBTQl9IQVMoVElNRV9USFJFQURfTk9XKQotICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gIHJldHVybiBmYWxzZTsKLSNlbmRpZgogI2VsaWYoZGVmaW5lZChfUE9TSVhfVEhSRUFEX0NQVVRJTUUpICYmIChfUE9TSVhfVEhSRUFEX0NQVVRJTUUgPj0gMCkpIHx8IFwKICAgICBkZWZpbmVkKFY4X09TX01BQ09TWCkgfHwgZGVmaW5lZChWOF9PU19BTkRST0lEKSB8fCBkZWZpbmVkKFY4X09TX1NPTEFSSVMpCiAgIHJldHVybiB0cnVlOwpAQCAtNzczLDE1ICs3NjcsOSBAQAogCiBUaHJlYWRUaWNrcyBUaHJlYWRUaWNrczo6Tm93KCkgewogI2lmIFY4X09TX1NUQVJCT0FSRAotI2lmIFNCX0FQSV9WRVJTSU9OID49IDEyCiAgIGlmIChTYlRpbWVJc1RpbWVUaHJlYWROb3dTdXBwb3J0ZWQoKSkKICAgICByZXR1cm4gVGhyZWFkVGlja3MoU2JUaW1lR2V0TW9ub3RvbmljVGhyZWFkTm93KCkpOwogICBVTlJFQUNIQUJMRSgpOwotI2VsaWYgU0JfSEFTKFRJTUVfVEhSRUFEX05PVykKLSAgcmV0dXJuIFRocmVhZFRpY2tzKFNiVGltZUdldE1vbm90b25pY1RocmVhZE5vdygpKTsKLSNlbHNlCi0gIFVOUkVBQ0hBQkxFKCk7Ci0jZW5kaWYKICNlbGlmIFY4X09TX01BQ09TWAogICByZXR1cm4gVGhyZWFkVGlja3MoQ29tcHV0ZVRocmVhZFRpY2tzKCkpOwogI2VsaWYoZGVmaW5lZChfUE9TSVhfVEhSRUFEX0NQVVRJTUUpICYmIChfUE9TSVhfVEhSRUFEX0NQVVRJTUUgPj0gMCkpIHx8IFwKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9kOC5neXAgYi90aGlyZF9wYXJ0eS92OC9zcmMvZDguZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTA3NmJkLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9kOC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMiB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotIyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSMgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotIyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotewotICAndmFyaWFibGVzJzogewotICAgICd2OF9jb2RlJzogMSwKLSAgICAjIEVuYWJsZSBzdXBwb3J0IGZvciBJbnRlbCBWVHVuZS4gU3VwcG9ydGVkIG9uIHg4Ni94NjQgb25seQotICAgICd2OF9lbmFibGVfdnR1bmVqaXQlJzogMCwKLSAgICAndjhfZW5hYmxlX2kxOG5fc3VwcG9ydCUnOiAxLAotCi0gICAgJ3Rlc3RfaXNvbGF0aW9uX21vZGUnOiAnbm9vcCcsCi0gICAgJ3Y4X3VzZV9zbmFwc2hvdCc6IDAsCi0gICAgJ3Y4X29wdGltaXplZF9kZWJ1Zyc6IDAsCi0gICAgJ3Y4X3VzZV9leHRlcm5hbF9zdGFydHVwX2RhdGEnOiAwLAotICAgICMgVE9ETzogRW5hYmxlIGkxOG4gc3VwcG9ydC4KLSAgICAndjhfZW5hYmxlX2kxOG5fc3VwcG9ydCc6IDAsCi0gIH0sCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7Ci0gICAgJ2RlZmluZXMnOiBbCi0gICAgICAnVjhfT1NfU1RBUkJPQVJEPTEnLAotICAgIF0sCi0gICB9LAotICAnaW5jbHVkZXMnOiBbJy4uL3Rvb2xjaGFpbi5neXBpJywgJy4uL2d5cGZpbGVzL2ZlYXR1cmVzLmd5cGknXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Q4JywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3Y4Lmd5cDp2OCcsCi0gICAgICAgICd2OC5neXA6djhfbGliYmFzZScsCi0gICAgICAgICd2OC5neXA6djhfbGlicGxhdGZvcm0nLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgIF0sCi0gICAgICAjIEdlbmVyYXRlZCBzb3VyY2UgZmlsZXMgbmVlZCB0aGlzIGV4cGxpY2l0bHk6Ci0gICAgICAnaW5jbHVkZV9kaXJzKyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgICAgJzwoREVQVEgpJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Q4LmgnLAotICAgICAgICAnZDguY2MnLAotICAgICAgICAnZDgtY29uc29sZS5oJywKLSAgICAgICAgJ2Q4LWNvbnNvbGUuY2MnLAotICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvZDgtanMuY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbICd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldD09MScsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbICd0YXJnZXQnLCBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnZDhfanMyYyNob3N0JywKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdkOF9qczJjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgIyBUT0RPOiBSZW1vdmUgT1M9PSJzdGFyYm9hcmQiIGFmdGVyIHN0YXJib2FyZGl6YXRpb24uCi0gICAgICAgIFsnKE9TPT0ibGludXgiIG9yIE9TPT0ibWFjIiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ibmV0YnNkIiBcCi0gICAgICAgICAgIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJzb2xhcmlzIiBvciBPUz09ImFuZHJvaWQiIFwKLSAgICAgICAgICAgb3IgT1M9PSJxbngiIG9yIE9TPT0iYWl4IiBcCi0gICAgICAgICAgIG9yIE9TPT0ic3RhcmJvYXJkIiknLCB7Ci0gICAgICAgICAgICAgJ3NvdXJjZXMnOiBbICdkOC1wb3NpeC5jYycsIF0KLSAgICAgICAgICAgfV0sCi0gICAgICAgIFsgJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsgJ2Q4LXdpbmRvd3MuY2MnLCBdCi0gICAgICAgIH1dLAotICAgICAgICBbICdjb21wb25lbnQhPSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbICd2OF9wb3N0bW9ydGVtX3N1cHBvcnQ9PSJ0cnVlIicsIHsKLSAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdPVEhFUl9MREZMQUdTJzogWwotICAgICAgICAgICAgICAgICAgICctV2wsLWZvcmNlX2xvYWQsPChQUk9EVUNUX0RJUikvbGlidjhfYmFzZS5hJwotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF9lbmFibGVfdnR1bmVqaXQ9PTEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi9zcmMvdGhpcmRfcGFydHkvdnR1bmUvdjh2dHVuZS5neXA6djhfdnR1bmUnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X2VuYWJsZV9pMThuX3N1cHBvcnQ9PTEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KGljdV9neXBfcGF0aCk6aWN1aTE4bicsCi0gICAgICAgICAgICAnPChpY3VfZ3lwX3BhdGgpOmljdXVjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiIgYW5kIHY4X2VuYWJsZV9pMThuX3N1cHBvcnQ9PTEnLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc8KGljdV9neXBfcGF0aCk6aWN1ZGF0YScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Q4X2pzMmMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnanNfZmlsZXMnOiBbCi0gICAgICAgICAgJ2Q4LmpzJywKLSAgICAgICAgICAnanMvbWFjcm9zLnB5JywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQ9PTEnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ3RhcmdldCddLAotICAgICAgICB9XQotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2Q4X2pzMmMnLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vdG9vbHMvanMyYy5weScsCi0gICAgICAgICAgICAnPEAoanNfZmlsZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2Q4LWpzLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgICAnLi4vdG9vbHMvanMyYy5weScsCi0gICAgICAgICAgICAnPEAoX291dHB1dHMpJywKLSAgICAgICAgICAgICdEOCcsCi0gICAgICAgICAgICAnPEAoanNfZmlsZXMpJwotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsndGVzdF9pc29sYXRpb25fbW9kZSAhPSAibm9vcCInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdkOF9ydW4nLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnZDgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWwotICAgICAgICAgICAgJy4uL2d5cGZpbGVzL2lzb2xhdGUuZ3lwaScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdkOC5pc29sYXRlJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9pbnNwZWN0b3IvaW5zcGVjdG9yLmd5cCBiL3RoaXJkX3BhcnR5L3Y4L3NyYy9pbnNwZWN0b3IvaW5zcGVjdG9yLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5MGY3MS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC9zcmMvaW5zcGVjdG9yL2luc3BlY3Rvci5neXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE2IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotewotICAnaW5jbHVkZXMnOiBbCi0gICAgJ2luc3BlY3Rvci5neXBpJywKLSAgXSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgeyAndGFyZ2V0X25hbWUnOiAncHJvdG9jb2xfY29tcGF0aWJpbGl0eScsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0J10sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdwcm90b2NvbF9jb21wYXRpYmlsaXR5JywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwodjhfaW5zcGVjdG9yX2pzX3Byb3RvY29sKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8QChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KS9zcmMvanNfcHJvdG9jb2wuc3RhbXAnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jaGVja19wcm90b2NvbF9jb21wYXRpYmlsaXR5LnB5JywKLSAgICAgICAgICAgICctLXN0YW1wJywgJzxAKF9vdXRwdXRzKScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnQ2hlY2tpbmcgaW5zcGVjdG9yIHByb3RvY29sIGNvbXBhdGliaWxpdHknLAotICAgICAgICB9LAotICAgICAgXQotICAgIH0sCi0gICAgeyAndGFyZ2V0X25hbWUnOiAncHJvdG9jb2xfZ2VuZXJhdGVkX3NvdXJjZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWyAncHJvdG9jb2xfY29tcGF0aWJpbGl0eScgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3Byb3RvY29sX2dlbmVyYXRlZF9zb3VyY2VzJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwodjhfaW5zcGVjdG9yX2pzX3Byb3RvY29sKScsCi0gICAgICAgICAgICAnPChpbnNwZWN0b3JfcGF0aCkvaW5zcGVjdG9yX3Byb3RvY29sX2NvbmZpZy5qc29uJywKLSAgICAgICAgICAgICc8QChpbnNwZWN0b3JfcHJvdG9jb2xfZmlsZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzxAKGluc3BlY3Rvcl9nZW5lcmF0ZWRfc291cmNlcyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJzogMSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NvZGVfZ2VuZXJhdG9yLnB5JywKLSAgICAgICAgICAgICctLWppbmphX2RpcicsICc8KERFUFRIKS90aGlyZF9wYXJ0eScsCi0gICAgICAgICAgICAnLS1vdXRwdXRfYmFzZScsICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3InLAotICAgICAgICAgICAgJy0tY29uZmlnJywgJzwoaW5zcGVjdG9yX3BhdGgpL2luc3BlY3Rvcl9wcm90b2NvbF9jb25maWcuanNvbicsCi0gICAgICAgICAgICAnLS1pbnNwZWN0b3JfcHJvdG9jb2xfZGlyJywgJ3Y4L3RoaXJkX3BhcnR5L2luc3BlY3Rvcl9wcm90b2NvbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIGluc3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gcHJvdG9jb2wganNvbicsCi0gICAgICAgIH0sCi0gICAgICBdCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9pbnNwZWN0b3IvaW5zcGVjdG9yLmd5cGkgYi90aGlyZF9wYXJ0eS92OC9zcmMvaW5zcGVjdG9yL2luc3BlY3Rvci5neXBpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk1ZTY4Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L3Y4L3NyYy9pbnNwZWN0b3IvaW5zcGVjdG9yLmd5cGkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNiB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnVjhfUk9PVCc6ICc8KERFUFRIKS90aGlyZF9wYXJ0eS92OCcsCi0gICAgJ2luc3BlY3Rvcl9wcm90b2NvbF9wYXRoJzogJzwoVjhfUk9PVCkvdGhpcmRfcGFydHkvaW5zcGVjdG9yX3Byb3RvY29sJywKLSAgICAnaW5zcGVjdG9yX3Byb3RvY29sX2ZpbGVzJzogWwotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2xpYi9iYXNlX3N0cmluZ19hZGFwdGVyX2NjLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvYmFzZV9zdHJpbmdfYWRhcHRlcl9oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvRm9yd2FyZF9oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvT2JqZWN0X2NwcC50ZW1wbGF0ZScsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvbGliL09iamVjdF9oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvUHJvdG9jb2xfY3BwLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvVmFsdWVDb252ZXJzaW9uc19oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9saWIvVmFsdWVzX2NwcC50ZW1wbGF0ZScsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvbGliL1ZhbHVlc19oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS90ZW1wbGF0ZXMvRXhwb3J0ZWRfaC50ZW1wbGF0ZScsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvdGVtcGxhdGVzL0ltcG9ydGVkX2gudGVtcGxhdGUnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL3RlbXBsYXRlcy9UeXBlQnVpbGRlcl9jcHAudGVtcGxhdGUnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL3RlbXBsYXRlcy9UeXBlQnVpbGRlcl9oLnRlbXBsYXRlJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jb2RlX2dlbmVyYXRvci5weScsCi0gICAgXSwKLSAgICAnaW5zcGVjdG9yX3BhdGgnOiAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yJywKLSAgICAnaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCc6ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9pbnNwZWN0b3ItZ2VuZXJhdGVkLW91dHB1dC1yb290JywKLSAgICAnaW5zcGVjdG9yX2dlbmVyYXRlZF9zb3VyY2VzJzogWwotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9Gb3J3YXJkLmgnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9Qcm90b2NvbC5jcHAnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9Qcm90b2NvbC5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvQ29uc29sZS5jcHAnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmgnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5jcHAnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvc3JjL2luc3BlY3Rvci9wcm90b2NvbC9EZWJ1Z2dlci5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvSGVhcFByb2ZpbGVyLmNwcCcsCi0gICAgICAnPChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KS9zcmMvaW5zcGVjdG9yL3Byb3RvY29sL0hlYXBQcm9maWxlci5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvUHJvZmlsZXIuY3BwJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvUHJvZmlsZXIuaCcsCi0gICAgICAnPChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KS9zcmMvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuY3BwJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL3NyYy9pbnNwZWN0b3IvcHJvdG9jb2wvU2NoZW1hLmNwcCcsCi0gICAgICAnPChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KS9zcmMvaW5zcGVjdG9yL3Byb3RvY29sL1NjaGVtYS5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL2luY2x1ZGUvaW5zcGVjdG9yL0RlYnVnZ2VyLmgnLAotICAgICAgJzwoaW5zcGVjdG9yX2dlbmVyYXRlZF9vdXRwdXRfcm9vdCkvaW5jbHVkZS9pbnNwZWN0b3IvUnVudGltZS5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9nZW5lcmF0ZWRfb3V0cHV0X3Jvb3QpL2luY2x1ZGUvaW5zcGVjdG9yL1NjaGVtYS5oJywKLSAgICBdLAotCi0gICAgJ2luc3BlY3Rvcl9hbGxfc291cmNlcyc6IFsKLSAgICAgICc8QChpbnNwZWN0b3JfZ2VuZXJhdGVkX3NvdXJjZXMpJywKLSAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvdjgtaW5zcGVjdG9yLmgnLAotICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZS92OC1pbnNwZWN0b3ItcHJvdG9jb2wuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL2N1c3RvbS1wcmV2aWV3LmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvY3VzdG9tLXByZXZpZXcuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL2luamVjdGVkLXNjcmlwdC5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL2luamVjdGVkLXNjcmlwdC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvaW5zcGVjdGVkLWNvbnRleHQuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci9pbnNwZWN0ZWQtY29udGV4dC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvcmVtb3RlLW9iamVjdC1pZC5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3JlbW90ZS1vYmplY3QtaWQuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3NlYXJjaC11dGlsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3Ivc2VhcmNoLXV0aWwuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3N0cmluZy0xNi5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3N0cmluZy0xNi5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3Ivc3RyaW5nLXV0aWwuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci9zdHJpbmctdXRpbC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdGVzdC1pbnRlcmZhY2UuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci90ZXN0LWludGVyZmFjZS5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtY29uc29sZS5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWNvbnNvbGUuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWNvbnNvbGUtYWdlbnQtaW1wbC5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWNvbnNvbGUtYWdlbnQtaW1wbC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtY29uc29sZS1tZXNzYWdlLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtY29uc29sZS1tZXNzYWdlLmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1kZWJ1Z2dlci5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWRlYnVnZ2VyLmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1kZWJ1Z2dlci1hZ2VudC1pbXBsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtZGVidWdnZXItYWdlbnQtaW1wbC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtZGVidWdnZXItc2NyaXB0LmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtZGVidWdnZXItc2NyaXB0LmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1oZWFwLXByb2ZpbGVyLWFnZW50LWltcGwuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1oZWFwLXByb2ZpbGVyLWFnZW50LWltcGwuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWluc3BlY3Rvci1pbXBsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtaW5zcGVjdG9yLWltcGwuaCcsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LWluc3BlY3Rvci1zZXNzaW9uLWltcGwuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1pbnNwZWN0b3Itc2Vzc2lvbi1pbXBsLmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1wcm9maWxlci1hZ2VudC1pbXBsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtcHJvZmlsZXItYWdlbnQtaW1wbC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtcmVnZXguY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1yZWdleC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtcnVudGltZS1hZ2VudC1pbXBsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtcnVudGltZS1hZ2VudC1pbXBsLmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1zY2hlbWEtYWdlbnQtaW1wbC5jYycsCi0gICAgICAnPChWOF9ST09UKS9zcmMvaW5zcGVjdG9yL3Y4LXNjaGVtYS1hZ2VudC1pbXBsLmgnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC1zdGFjay10cmFjZS1pbXBsLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3Ivdjgtc3RhY2stdHJhY2UtaW1wbC5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdjgtdmFsdWUtdXRpbHMuY2MnLAotICAgICAgJzwoVjhfUk9PVCkvc3JjL2luc3BlY3Rvci92OC12YWx1ZS11dGlscy5oJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdmFsdWUtbWlycm9yLmNjJywKLSAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvdmFsdWUtbWlycm9yLmgnLAotICAgICAgIyBGbGF0IG1lcmdlIGB0aGlyZF9wYXJ0eS9pbnNwZWN0b3JfcHJvdG9jb2w6aW5zcGVjdG9yX3N0cmluZ19jb252ZXJzaW9uc2AKLSAgICAgICc8KGluc3BlY3Rvcl9wYXRoKS92OC1zdHJpbmctY29udmVyc2lvbnMuY2MnLAotICAgICAgJzwoaW5zcGVjdG9yX3BhdGgpL3Y4LXN0cmluZy1jb252ZXJzaW9ucy5oJywKLSAgICAgICMgRmxhdCBtZXJnZSBgdGhpcmRfcGFydHkvaW5zcGVjdG9yX3Byb3RvY2FsOmNyZHRwX3BsYXRmb3JtYAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL2pzb25fcGxhdGZvcm0uaCcsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvanNvbl9wbGF0Zm9ybV92OC5jYycsCi0gICAgICAjIEZsYXQgbWVyZ2UgYHRoaXJkX3BhcnR5L2luc3BlY3Rvcl9wcm90b2NvbDpjcmR0cGAKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9jYm9yLmNjJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9jYm9yLmgnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL2Rpc3BhdGNoLmNjJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9kaXNwYXRjaC5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9lcnJvcl9zdXBwb3J0LmNjJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9lcnJvcl9zdXBwb3J0LmgnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL2V4cG9ydC5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9maW5kX2J5X2ZpcnN0LmgnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL2pzb24uY2MnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL2pzb24uaCcsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvbWF5YmUuaCcsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvcGFyc2VyX2hhbmRsZXIuaCcsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvcHJvdG9jb2xfY29yZS5jYycsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvcHJvdG9jb2xfY29yZS5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9zZXJpYWxpemFibGUuY2MnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL3NlcmlhbGl6YWJsZS5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9zZXJpYWxpemVyX3RyYWl0cy5oJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9zcGFuLmNjJywKLSAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKS9jcmR0cC9zcGFuLmgnLAotICAgICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpL2NyZHRwL3N0YXR1cy5jYycsCi0gICAgICAnPChpbnNwZWN0b3JfcHJvdG9jb2xfcGF0aCkvY3JkdHAvc3RhdHVzLmgnLAotICAgIF0sCi0gICAgJ3Y4X2luc3BlY3Rvcl9qc19wcm90b2NvbCc6ICc8KFY4X1JPT1QpL2luY2x1ZGUvanNfcHJvdG9jb2wucGRsJywKLSAgfSwKLSAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAnPChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KScsCi0gICAgJzwoaW5zcGVjdG9yX3Byb3RvY29sX3BhdGgpJywKLSAgXSwKLSAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnPChpbnNwZWN0b3JfZ2VuZXJhdGVkX291dHB1dF9yb290KScsCi0gICAgICAgICc8KGluc3BlY3Rvcl9wcm90b2NvbF9wYXRoKScsCi0gICAgICBdLAotICB9Ci19CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS92OC90ZXN0L2Z1enplci9mdXp6ZXIuY2MgYi90aGlyZF9wYXJ0eS92OC90ZXN0L2Z1enplci9mdXp6ZXIuY2MKaW5kZXggOTZjMzgxZS4uNDI3NjBjNSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvdjgvdGVzdC9mdXp6ZXIvZnV6emVyLmNjCisrKyBiL3RoaXJkX3BhcnR5L3Y4L3Rlc3QvZnV6emVyL2Z1enplci5jYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKIGV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJJbml0aWFsaXplKGludCogYXJnYywgY2hhcioqKiBhcmd2KTsKIGV4dGVybiAiQyIgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvdjgvdG9vbGNoYWluLmd5cGkgYi90aGlyZF9wYXJ0eS92OC90b29sY2hhaW4uZ3lwaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2Y2VjZC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC90b29sY2hhaW4uZ3lwaQorKysgL2Rldi9udWxsCkBAIC0xLDE0MTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotIyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSMgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotIyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBTaGFyZWQgZGVmaW5pdGlvbnMgZm9yIGFsbCBWOC1yZWxhdGVkIHRhcmdldHMuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnbXN2c191c2VfY29tbW9uX3JlbGVhc2UnOiAwLAotICAgICdjbGFuZyUnOiAwLAotICAgICdhc2FuJSc6IDAsCi0gICAgJ2NmaV92cHRyJSc6IDAsCi0gICAgJ2xzYW4lJzogMCwKLSAgICAnbXNhbiUnOiAwLAotICAgICd0c2FuJSc6IDAsCi0gICAgJ3Vic2FuJSc6IDAsCi0gICAgJ3Vic2FuX3ZwdHIlJzogMCwKLSAgICAnaGFzX3ZhbGdyaW5kJSc6IDAsCi0gICAgJ2NvdmVyYWdlJSc6IDAsCi0gICAgJ3Y4X3RhcmdldF9hcmNoJSc6ICc8KHRhcmdldF9hcmNoKScsCi0gICAgJ3Y4X2hvc3RfYnl0ZW9yZGVyJSc6ICdsaXR0bGUnLAotICAgICdmb3JjZV9keW5hbWljX2NydCUnOiAwLAotCi0gICAgIyBTZXR0aW5nICd2OF9jYW5fdXNlX3ZmcDMyZHJlZ3MnIHRvICd0cnVlJyB3aWxsIGNhdXNlIFY4IHRvIHVzZSB0aGUgVkZQCi0gICAgIyByZWdpc3RlcnMgZDE2LWQzMSBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsIGJvdGggaW4gdGhlIHNuYXBzaG90IGFuZCBmb3IgdGhlCi0gICAgIyBBUk0gdGFyZ2V0LiBMZWF2aW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdmYWxzZScgd2lsbCBhdm9pZCB0aGUgdXNlIG9mCi0gICAgIyB0aGVzZSByZWdpc3RlcnMgaW4gdGhlIHNuYXBzaG90IGFuZCB1c2UgQ1BVIGZlYXR1cmUgcHJvYmluZyB3aGVuIHJ1bm5pbmcKLSAgICAjIG9uIHRoZSB0YXJnZXQuCi0gICAgJ3Y4X2Nhbl91c2VfdmZwMzJkcmVncyUnOiAnZmFsc2UnLAotICAgICdhcm1fdGVzdF9ub3Byb2JlJSc6ICdvZmYnLAotCi0gICAgIyBTaW1pbGFyIHRvIHZmcCBidXQgb24gTUlQUy4KLSAgICAndjhfY2FuX3VzZV9mcHVfaW5zdHJ1Y3Rpb25zJSc6ICd0cnVlJywKLQotICAgICMgU2ltaWxhciB0byB0aGUgQVJNIGhhcmQgZmxvYXQgQUJJIGJ1dCBvbiBNSVBTLgotICAgICd2OF91c2VfbWlwc19hYmlfaGFyZGZsb2F0JSc6ICd0cnVlJywKLQotICAgICMgTUlQUyBNU0Egc3VwcG9ydAotICAgICdtaXBzX3VzZV9tc2ElJzogMCwKLQotICAgICMgUHJpbnQgdG8gc3Rkb3V0IG9uIEFuZHJvaWQuCi0gICAgJ3Y4X2FuZHJvaWRfbG9nX3N0ZG91dCUnOiAwLAotCi0gICAgJ3Y4X2VuYWJsZV9iYWNrdHJhY2UlJzogMCwKLQotICAgICMgRW5hYmxlIHByb2ZpbGluZyBzdXBwb3J0LiBPbmx5IHJlcXVpcmVkIG9uIFdpbmRvd3MuCi0gICAgJ3Y4X2VuYWJsZV9wcm9mJSc6IDAsCi0KLSAgICAjIFNvbWUgdmVyc2lvbnMgb2YgR0NDIDQuNSBzZWVtIHRvIG5lZWQgLWZuby1zdHJpY3QtYWxpYXNpbmcuCi0gICAgJ3Y4X25vX3N0cmljdF9hbGlhc2luZyUnOiAwLAotCi0gICAgIyBDaHJvbWUgbmVlZHMgdGhpcyBkZWZpbml0aW9uIHVuY29uZGl0aW9uYWxseS4gRm9yIHN0YW5kYWxvbmUgVjggYnVpbGRzLAotICAgICMgaXQncyBoYW5kbGVkIGluIGd5cGZpbGVzL3N0YW5kYWxvbmUuZ3lwaS4KLSAgICAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQlJzogMSwKLQotICAgICMgVG9vbHNldCB0aGUgc2hlbGwgYmluYXJ5IHNob3VsZCBiZSBjb21waWxlZCBmb3IuIFBvc3NpYmxlIHZhbHVlcyBhcmUKLSAgICAjICdob3N0JyBhbmQgJ3RhcmdldCcuCi0gICAgIyBUaGUgc2V0dGluZyBpcyBpZ25vcmVkIGlmIHdhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0IGlzIDAuCi0gICAgJ3Y4X3Rvb2xzZXRfZm9yX3NoZWxsJSc6ICd0YXJnZXQnLAotCi0gICAgJ2hvc3Rfb3MlJzogJzwoT1MpJywKLSAgICAnd2Vycm9yJSc6ICctV2Vycm9yJywKLSAgICAjIEZvciBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkLCByZXN1bHRzIGluICJsaWJ2OC08KHNvbmFtZV92ZXJzaW9uKS5zbyIuCi0gICAgJ3NvbmFtZV92ZXJzaW9uJSc6ICcnLAotCi0gICAgIyBPdmVycmlkZSB3aGVyZSB0byBmaW5kIGJpbnV0aWxzCi0gICAgJ2JpbnV0aWxzX2RpciUnOiAnJywKLQotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydPUz09ImxpbnV4IiBhbmQgaG9zdF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgJ2JpbnV0aWxzX2RpciUnOiAndGhpcmRfcGFydHkvYmludXRpbHMvTGludXhfeDY0L1JlbGVhc2UvYmluJywKLSAgICAgIH1dLAotICAgICAgWydPUz09ImxpbnV4IiBhbmQgaG9zdF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgJ2JpbnV0aWxzX2RpciUnOiAndGhpcmRfcGFydHkvYmludXRpbHMvTGludXhfaWEzMi9SZWxlYXNlL2JpbicsCi0gICAgICB9XSwKLSAgICBdLAotCi0gICAgIyBJbmRpY2F0ZXMgaWYgZ2Ntb2xlIHRvb2xzIGFyZSBkb3dubG9hZGVkIGJ5IGEgaG9vay4KLSAgICAnZ2Ntb2xlJSc6IDAsCi0gIH0sCi0KLSAgIyBbR1lQXSB0aGlzIG5lZWRzIHRvIGJlIG91dHNpZGUgb2YgdGhlIHRvcCBsZXZlbCAndmFyaWFibGVzJwotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ2hvc3RfYXJjaD09Ing4NiIgb3IgaG9zdF9hcmNoPT0ieDY0IiBvciBcCi0gICAgICBob3N0X2FyY2g9PSJwcGMiIG9yIGhvc3RfYXJjaD09InBwYzY0IiBvciBcCi0gICAgICBob3N0X2FyY2g9PSJzMzkweCIgb3IgXAotICAgICAgY2xhbmc9PTEnLCB7Ci0gICAgICAndmFyaWFibGVzJzogewotICAgICAgICAnaG9zdF9jeHhfaXNfYmlhcmNoJSc6IDEsCi0gICAgICAgfSwKLSAgICAgfSwgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2hvc3RfY3h4X2lzX2JpYXJjaCUnOiAwLAotICAgICAgfSwKLSAgICB9XSwKLSAgICBbJ3RhcmdldF9hcmNoPT0ieDg2IiBvciB0YXJnZXRfYXJjaD09Ing2NCIgb3IgXAotICAgICAgdGFyZ2V0X2FyY2g9PSJwcGMiIG9yIHRhcmdldF9hcmNoPT0icHBjNjQiIG9yIFwKLSAgICAgIHRhcmdldF9hcmNoPT0iczM5MHgiIG9yIGNsYW5nPT0xJywgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3RhcmdldF9jeHhfaXNfYmlhcmNoJSc6IDEsCi0gICAgICAgfSwKLSAgICAgfSwgewotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3RhcmdldF9jeHhfaXNfYmlhcmNoJSc6IDAsCi0gICAgICB9LAotICAgIH1dLAotICBdLAotICAndGFyZ2V0X2RlZmF1bHRzJzogewotICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAnLi4nLAotICAgICAgJzwoVjhfUk9PVCknLAotICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZScsCi0gICAgXSwKLSAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnLi4nLAotICAgICAgICAgICc8KFY4X1JPT1QpJywKLSAgICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlJywKLSAgICAgICAgXSwKLSAgICB9LAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydjb2JhbHRfY29uZmlnID09ICJkZWJ1ZyInLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICMgJ0RFQlVHPTEnLAotICAgICAgICAgICMgJ09CSkVDVF9QUklOVD0xJywKLSAgICAgICAgICAnVjhfRU5BQkxFX0FMTE9DQVRJT05fVElNRU9VVD0xJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgIF0sCi0KLSAgICAnZGVmaW5lcyc6IFsKLSAgICAgICdESVNBQkxFX0dSQVBIU19TVEFSQk9BUkQnLAotICAgICAgJ0RJU0FCTEVfVU5XSU5EX1NUQVJCT0FSRCcsCi0gICAgICAjIE9uIGhvc3QgYnVpbGQsIFY4X09TX1NUQVJCT0FSRCBvciBTVEFSQk9BUkQgaXMgbm90IGRlZmluZWQuIFdlIG5lZWQgYQotICAgICAgIyBtYWNybyB0byBkaXN0aW5ndWlzaCBDb2JhbHQtb25seSBjb25maWd1cmFpdG9ucy4KLSAgICAgICdDT01QSUxFX0ZPUl9TVEFSQk9BUkQnLAotICAgICAgIyAnRElTQUJMRV9XQVNNX1NUQVJCT0FSRCcsCi0gICAgICAnRElTQUJMRV9XQVNNX0NPTVBJTEVSX0lTU1VFX1NUQVJCT0FSRCcsCi0gICAgICAnTk9fQVJSQVlfTU9WRV9TVEFSQk9BUkQnLAotICAgICAgIyBEaXNhYmxlIG1pdGlnYXRpb25zIGZvciBleGVjdXRpbmcgdW50cnVzdGVkIGNvZGUuCi0gICAgICAjIERpc2FibGVkIGJ5IGRlZmF1bHQgb24geDg2IGR1ZSB0byBjb25mbGljdGluZyByZXF1aXJlbWVudHMgd2l0aCBlbWJlZGRlZAotICAgICAgIyBidWlsdGlucy4KLSAgICAgICMgQ2hyb21lIGVuYWJsZWQgdGhpcyBieSBkZWZhdWx0IG9ubHkgb24gQW5kcm9pZCBzaW5jZSBpdCBkb2Vzbid0IHN1cHBvcnQKLSAgICAgICMgc2l0ZS1pc29sYXRpb24gYW5kIG9uIHNpbXVsYXRvciBidWlsZHMgd2hpY2ggdGVzdCBjb2RlIGdlbmVyYXRpb24KLSAgICAgICMgb24gdGhlc2UgcGxhdGZvcm1zLgotICAgICAgIyBDb2JhbHQgb25seSBoYXMgb25lIGlzb2xhdGUgaW5zdGFuY2Ugd2hlbiB0aGUgYXBwIGlzIGZ1bGx5IGZ1bmN0aW9uaW5nIGluCi0gICAgICAjIHByb2R1Y3Rpb24gc28gd2Ugd2lsbCBqdXN0IGRpc2FibGUgdGhpcyBmZWF0dXJlIGJ5IGRlZmF1bHQgZXZlcnl3aGVyZS4KLSAgICAgICdESVNBQkxFX1VOVFJVU1RFRF9DT0RFX01JVElHQVRJT05TJywKLSAgICBdLAotICAgICdjb25kaXRpb25zJzogWwotICAgICAgWydjbGFuZycsIHsKLSAgICAgICAgJ2NmbGFncyc6IFsgJy1XZXJyb3InLCAnLVduby11bmtub3duLXByYWdtYXMnLCAnLVduby1pbnZhbGlkLW9mZnNldG9mJ10sCi0gICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ2hvc3Rfb3MhPSJ3aW4iJywgewotICAgICAgICAgICAgJ2NmbGFnc19ob3N0JzogWyctV25vLWludmFsaWQtb2Zmc2V0b2YnXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgIH0sewotICAgICAgICAnY2ZsYWdzISc6IFsgJy1XYWxsJywgJy1XZXh0cmEnIF0sCi0gICAgICAgICdjZmxhZ3MnOiBbICctV25vLXJldHVybi10eXBlJywgJy1Xbm8taW50LWluLWJvb2wtY29udGV4dCcgXSwKLSAgICAgIH1dLAotICAgICAgWyd2OF9lbmFibGVfcG9pbnRlcl9jb21wcmVzc2lvbicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgIyBlbmFibGVzIHBvaW50ZXIgY29tcHJlc3Npb24gb24gNjQgYml0IHBsYXRmb3JtcyBmb3IgQ29iYWx0LgotICAgICAgICAgICdWOF9DT01QUkVTU19QT0lOVEVSUycsCi0gICAgICAgICAgJ1Y4XzMxQklUX1NNSVNfT05fNjRCSVRfQVJDSCcsCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJhcm0iJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVjhfVEFSR0VUX0FSQ0hfQVJNJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyAnYXJtX3ZlcnNpb249PTcgb3IgYXJtX3ZlcnNpb249PSJkZWZhdWx0IicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQ0FOX1VTRV9BUk1WN19JTlNUUlVDVElPTlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICdhcm1fZnB1PT0idmZwdjMtZDE2IiBvciBhcm1fZnB1PT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NBTl9VU0VfVkZQM19JTlNUUlVDVElPTlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICdhcm1fZnB1PT0idmZwdjMiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDQU5fVVNFX1ZGUDNfSU5TVFJVQ1RJT05TJywKLSAgICAgICAgICAgICAgJ0NBTl9VU0VfVkZQMzJEUkVHUycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsgJ2FybV9mcHU9PSJuZW9uIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQ0FOX1VTRV9WRlAzX0lOU1RSVUNUSU9OUycsCi0gICAgICAgICAgICAgICdDQU5fVVNFX1ZGUDMyRFJFR1MnLAotICAgICAgICAgICAgICAnQ0FOX1VTRV9ORU9OJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAnYXJtX3Rlc3Rfbm9wcm9iZT09Im9uIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnQVJNX1RFU1RfTk9fRkVBVFVSRV9QUk9CRScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PWhvc3RfYXJjaCcsIHsKLSAgICAgICAgICAgICAgICAjIEhvc3QgYnVpbHQgd2l0aCBhbiBBcm0gQ1hYIGNvbXBpbGVyLgotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyAnYXJtX3ZlcnNpb249PTcnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tYXJjaD1hcm12Ny1hJyxdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbICdhcm1fdmVyc2lvbj09NyBvciBhcm1fdmVyc2lvbj09ImRlZmF1bHQiJywgewotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICBbICdhcm1fZnB1IT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWZwdT08KGFybV9mcHUpJyxdLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbICdhcm1fZmxvYXRfYWJpIT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tZmxvYXQtYWJpPTwoYXJtX2Zsb2F0X2FiaSknLF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsgJ2FybV90aHVtYj09MScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW10aHVtYicsXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWyAnYXJtX3RodW1iPT0wJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWFybScsXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAjICd2OF90YXJnZXRfYXJjaCE9aG9zdF9hcmNoJwotICAgICAgICAgICAgICAgICMgSG9zdCBub3QgYnVpbHQgd2l0aCBhbiBBcm0gQ1hYIGNvbXBpbGVyIChzaW11bGF0b3IgYnVpbGQpLgotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyAnYXJtX2Zsb2F0X2FiaT09ImhhcmQiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnVVNFX0VBQklfSEFSREZMT0FUPTEnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbICdhcm1fZmxvYXRfYWJpPT0ic29mdGZwIiBvciBhcm1fZmxvYXRfYWJpPT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdVU0VfRUFCSV9IQVJERkxPQVQ9MCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sICAjIF90b29sc2V0PT0iaG9zdCIKLSAgICAgICAgICBbJ190b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT10YXJnZXRfYXJjaCcsIHsKLSAgICAgICAgICAgICAgICAjIFRhcmdldCBidWlsdCB3aXRoIGFuIEFybSBDWFggY29tcGlsZXIuCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbICdhcm1fdmVyc2lvbj09NycsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1hcmNoPWFybXY3LWEnLF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsgJ2FybV92ZXJzaW9uPT03IG9yIGFybV92ZXJzaW9uPT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgIFsgJ2FybV9mcHUhPSJkZWZhdWx0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tZnB1PTwoYXJtX2ZwdSknLF0sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsgJ2FybV9mbG9hdF9hYmkhPSJkZWZhdWx0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1mbG9hdC1hYmk9PChhcm1fZmxvYXRfYWJpKScsXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWyAnYXJtX3RodW1iPT0xJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbXRodW1iJyxdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbICdhcm1fdGh1bWI9PTAnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tYXJtJyxdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICMgJ3Y4X3RhcmdldF9hcmNoIT10YXJnZXRfYXJjaCcKLSAgICAgICAgICAgICAgICAjIFRhcmdldCBub3QgYnVpbHQgd2l0aCBhbiBBcm0gQ1hYIGNvbXBpbGVyIChzaW11bGF0b3IgYnVpbGQpLgotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyAnYXJtX2Zsb2F0X2FiaT09ImhhcmQiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnVVNFX0VBQklfSEFSREZMT0FUPTEnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbICdhcm1fZmxvYXRfYWJpPT0ic29mdGZwIiBvciBhcm1fZmxvYXRfYWJpPT0iZGVmYXVsdCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdVU0VfRUFCSV9IQVJERkxPQVQ9MCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sICAjIF90b29sc2V0PT0idGFyZ2V0IgotICAgICAgICBdLAotICAgICAgfV0sICAjIHY4X3RhcmdldF9hcmNoPT0iYXJtIgotICAgICAgWyd2OF90YXJnZXRfYXJjaD09ImFybTY0IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX0FSTTY0JywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd2OF9jb250cm9sX2Zsb3dfaW50ZWdyaXR5PT0xJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1tYnJhbmNoLXByb3RlY3Rpb249c3RhbmRhcmQnIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJzMzkweCInLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdWOF9UQVJHRVRfQVJDSF9TMzkwJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NmbGFncyc6IFsgJy1mZnAtY29udHJhY3Q9b2ZmJyBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0iczM5MHgiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdWOF9UQVJHRVRfQVJDSF9TMzkwWCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsndjhfaG9zdF9ieXRlb3JkZXI9PSJsaXR0bGUiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdWOF9UQVJHRVRfQVJDSF9TMzkwX0xFX1NJTScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbICctbWFyY2g9ejE5NicgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgfV0sICAjIHMzOTB4Ci0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0icHBjIiBvciB2OF90YXJnZXRfYXJjaD09InBwYzY0IicsIHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09InBwYyInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX1BQQycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJwcGM2NCInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX1BQQzY0JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyd2OF9ob3N0X2J5dGVvcmRlcj09ImxpdHRsZSInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX1BQQ19MRScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsndjhfaG9zdF9ieXRlb3JkZXI9PSJiaWciJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdWOF9UQVJHRVRfQVJDSF9QUENfQkUnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ09TPT0iYWl4IicsIHsKLSAgICAgICAgICAgICAgICAjIFdvcmsgYXJvdW5kIEFJWCBjZWlsLCB0cnVuYyBhbmQgcm91bmQgb2RkaXRpZXMuCi0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1tY3B1PXBvd2VyNSsgLW1mcHJuZCcgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnT1M9PSJhaXgiJywgewotICAgICAgICAgICAgICAgICMgV29yayBhcm91bmQgQUlYIGFzc2VtYmxlciBwb3BjbnRiIGJ1Zy4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW1uby1wb3BjbnRiJyBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwgICMgcHBjCi0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX0lBMzInLAotICAgICAgICBdLAotICAgICAgfV0sICAjIHY4X3RhcmdldF9hcmNoPT0ieDg2IgotICAgICAgWyd2OF90YXJnZXRfYXJjaD09Im1pcHMiIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwc2VsIiBcCi0gICAgICAgIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwczY0IiBvciB2OF90YXJnZXRfYXJjaD09Im1pcHM2NGVsIicsIHsKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PXRhcmdldF9hcmNoJywgewotICAgICAgICAgICAgICAgICMgVGFyZ2V0IGJ1aWx0IHdpdGggYSBNaXBzIENYWCBjb21waWxlci4KLSAgICAgICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAgICAgJ2xkc29fcGF0aCUnOiAnPCEoL2Jpbi9lY2hvIC1uICRMRFNPX1BBVEgpJywKLSAgICAgICAgICAgICAgICAgICdsZF9yX3BhdGglJzogJzwhKC9iaW4vZWNobyAtbiAkTERfUl9QQVRIKScsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgIFsnbGRzb19wYXRoIT0iIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1XbCwtLWR5bmFtaWMtbGlua2VyPTwobGRzb19wYXRoKSddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ2xkX3JfcGF0aCE9IiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctV2wsLS1ycGF0aD08KGxkX3JfcGF0aCknXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWyAnY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1pbnRlZ3JhdGVkLWFzJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnT1MhPSJtYWMiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfVEFSR0VUX0hXJyxdLAotICAgICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfVEFSR0VUX1NJTVVMQVRPUicsXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfVEFSR0VUX1NJTVVMQVRPUicsXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLCAgIydfdG9vbHNldD09InRhcmdldCIKLSAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09dGFyZ2V0X2FyY2ggYW5kIE9TIT0ibWFjIicsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfVEFSR0VUX0hXJyxdLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ19NSVBTX1RBUkdFVF9TSU1VTEFUT1InLF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwgICMnX3Rvb2xzZXQ9PSJob3N0IgotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ibWlwcyInLCB7Ci0gICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICdWOF9UQVJHRVRfQVJDSF9NSVBTJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyAndjhfY2FuX3VzZV9mcHVfaW5zdHJ1Y3Rpb25zPT0idHJ1ZSInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NBTl9VU0VfRlBVX0lOU1RSVUNUSU9OUycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsgJ3Y4X3VzZV9taXBzX2FiaV9oYXJkZmxvYXQ9PSJ0cnVlIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnX19taXBzX2hhcmRfZmxvYXQ9MScsCi0gICAgICAgICAgICAgICdDQU5fVVNFX0ZQVV9JTlNUUlVDVElPTlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ19fbWlwc19zb2Z0X2Zsb2F0PTEnCi0gICAgICAgICAgICBdCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbJ190b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT10YXJnZXRfYXJjaCcsIHsKLSAgICAgICAgICAgICAgICAjIFRhcmdldCBidWlsdCB3aXRoIGEgTWlwcyBDWFggY29tcGlsZXIuCi0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctRUInLAotICAgICAgICAgICAgICAgICAgJy1Xbm8tZXJyb3I9YXJyYXktYm91bmRzJywgICMgV29ya2Fyb3VuZCBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NjI3MwotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1FQiddLAotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyAndjhfdXNlX21pcHNfYWJpX2hhcmRmbG9hdD09InRydWUiJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWhhcmQtZmxvYXQnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1taGFyZC1mbG9hdCddLAotICAgICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbXNvZnQtZmxvYXQnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1tc29mdC1mbG9hdCddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjYiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSNicsCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQNjQnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsnLW1mcDMyJywgJy1tZnB4eCddLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICBbICdjbGFuZz09MCcsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1XYSwtbWlwczMycjYnXSwKLSAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1pcHMzMnI2J10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctbWlwczMycjYnXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IiBhbmQgbWlwc191c2VfbXNhPT0xJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ19NSVBTX01TQScgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InIyIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgWyAnbWlwc19mcHVfbW9kZT09ImZwNjQiJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQNjQnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tZnA2NCddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgIFsnbWlwc19mcHVfbW9kZT09ImZweHgiJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQWFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tZnB4eCddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgIFsnbWlwc19mcHVfbW9kZT09ImZwMzIiJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQMzInLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tZnAzMiddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgIFsgJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLVdhLC1taXBzMzJyMiddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWlwczMycjInXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1taXBzMzJyMiddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjEiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlAzMicsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MhJzogWyctbWZwNjQnLCAnLW1mcHh4J10sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgIFsgJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLVdhLC1taXBzMzInXSwKLSAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1pcHMzMiddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLW1pcHMzMiddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icngiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSWCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQWFgnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsnLW1mcDY0JywgJy1tZnAzMiddLAotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICBbICdjbGFuZz09MCcsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1XYSwtbWlwczMyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1taXBzMzInLCAnLW1mcHh4J10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctbWlwczMyJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgIyAndjhfdGFyZ2V0X2FyY2ghPXRhcmdldF9hcmNoJwotICAgICAgICAgICAgICAgICMgVGFyZ2V0IG5vdCBidWlsdCB3aXRoIGFuIE1JUFMgQ1hYIGNvbXBpbGVyIChzaW11bGF0b3IgYnVpbGQpLgotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjYnLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDY0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IiBhbmQgbWlwc191c2VfbXNhPT0xJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ19NSVBTX01TQScgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InIyIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgWyAnbWlwc19mcHVfbW9kZT09ImZwNjQiJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQNjQnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ21pcHNfZnB1X21vZGU9PSJmcHh4IicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUFhYJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgWydtaXBzX2ZwdV9tb2RlPT0iZnAzMiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlAzMicsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjEiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlAzMicsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyeCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlJYJywKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sICAjX3Rvb2xzZXQ9PSJ0YXJnZXQiCi0gICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyeCInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSWCcsCi0gICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSNicsCi0gICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlA2NCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiIgYW5kIG1pcHNfdXNlX21zYT09MScsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ19NSVBTX01TQScgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMiInLCB7Ci0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfZnB1X21vZGU9PSJmcDY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDY0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2ZwdV9tb2RlPT0iZnB4eCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19mcHVfbW9kZT09ImZwMzIiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSMicsCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQMzInCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InIxIicsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnRlBVX01PREVfRlAzMicsXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdCi0gICAgICAgICAgfV0sICAjX3Rvb2xzZXQ9PSJob3N0IgotICAgICAgICBdLAotICAgICAgfV0sICAjIHY4X3RhcmdldF9hcmNoPT0ibWlwcyIKLSAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJtaXBzZWwiJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVjhfVEFSR0VUX0FSQ0hfTUlQUycsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsgJ3Y4X2Nhbl91c2VfZnB1X2luc3RydWN0aW9ucz09InRydWUiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDQU5fVVNFX0ZQVV9JTlNUUlVDVElPTlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICd2OF91c2VfbWlwc19hYmlfaGFyZGZsb2F0PT0idHJ1ZSInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ19fbWlwc19oYXJkX2Zsb2F0PTEnLAotICAgICAgICAgICAgICAnQ0FOX1VTRV9GUFVfSU5TVFJVQ1RJT05TJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdfX21pcHNfc29mdF9mbG9hdD0xJwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgXSwKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PXRhcmdldF9hcmNoJywgewotICAgICAgICAgICAgICAgICMgVGFyZ2V0IGJ1aWx0IHdpdGggYSBNaXBzIENYWCBjb21waWxlci4KLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1FTCcsCi0gICAgICAgICAgICAgICAgICAnLVduby1lcnJvcj1hcnJheS1ib3VuZHMnLCAgIyBXb3JrYXJvdW5kIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU2MjczCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLUVMJ10sCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbICd2OF91c2VfbWlwc19hYmlfaGFyZGZsb2F0PT0idHJ1ZSInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1taGFyZC1mbG9hdCddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLW1oYXJkLWZsb2F0J10sCi0gICAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1tc29mdC1mbG9hdCddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLW1zb2Z0LWZsb2F0J10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlI2JywKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlA2NCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MhJzogWyctbWZwMzInLCAnLW1mcHh4J10sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgIFsgJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLVdhLC1taXBzMzJyNiddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWlwczMycjYnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1taXBzMzJyNiddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjYiIGFuZCBtaXBzX3VzZV9tc2E9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWyAnX01JUFNfTVNBJyBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjIiJywgewotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICBbICdtaXBzX2ZwdV9tb2RlPT0iZnA2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlA2NCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1mcDY0J10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgWydtaXBzX2ZwdV9tb2RlPT0iZnB4eCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1mcHh4J10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgWydtaXBzX2ZwdV9tb2RlPT0iZnAzMiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlAzMicsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1mcDMyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgICAgWyAnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctV2EsLW1pcHMzMnIyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1taXBzMzJyMiddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLW1pcHMzMnIyJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMSInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDMyJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbJy1tZnA2NCcsICctbWZweHgnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgWyAnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctV2EsLW1pcHMzMiddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWlwczMyJ10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctbWlwczMyJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyeCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlJYJywKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MhJzogWyctbWZwNjQnLCAnLW1mcDMyJ10sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgIFsgJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLVdhLC1taXBzMzInXSwKLSAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1pcHMzMicsICctbWZweHgnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1taXBzMzInXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09Imxvb25nc29uIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTE9PTkdTT04nLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDMyJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbJy1tZnA2NCcsICctbWZweHgnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgWyAnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctV2EsLW1pcHMzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1taXBzMycsICctbWZwMzInXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAjICd2OF90YXJnZXRfYXJjaCE9dGFyZ2V0X2FyY2gnCi0gICAgICAgICAgICAgICAgIyBUYXJnZXQgbm90IGJ1aWx0IHdpdGggYW4gTUlQUyBDWFggY29tcGlsZXIgKHNpbXVsYXRvciBidWlsZCkuCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjYiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSNicsCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQNjQnLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjYiIGFuZCBtaXBzX3VzZV9tc2E9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWyAnX01JUFNfTVNBJyBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjIiJywgewotICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICBbICdtaXBzX2ZwdV9tb2RlPT0iZnA2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlA2NCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICAgIFsnbWlwc19mcHVfbW9kZT09ImZweHgiJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQWFgnLAotICAgICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ21pcHNfZnB1X21vZGU9PSJmcDMyIicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDMyJywKLSAgICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMSInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDMyJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InJ4IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUlgnLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUFhYJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09Imxvb25nc29uIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTE9PTkdTT04nLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDMyJywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwgI190b29sc2V0PT0idGFyZ2V0Ci0gICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyeCInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSWCcsCi0gICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSNicsCi0gICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlA2NCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiIgYW5kIG1pcHNfdXNlX21zYT09MScsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ19NSVBTX01TQScgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMiInLCB7Ci0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfZnB1X21vZGU9PSJmcDY0IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgJ19NSVBTX0FSQ0hfTUlQUzMyUjInLAotICAgICAgICAgICAgICAgICAgICAgICdGUFVfTU9ERV9GUDY0JywKLSAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2ZwdV9tb2RlPT0iZnB4eCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAgICdfTUlQU19BUkNIX01JUFMzMlIyJywKLSAgICAgICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlBYWCcsCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19mcHVfbW9kZT09ImZwMzIiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9NSVBTMzJSMicsCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZQVV9NT0RFX0ZQMzInCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InIxIicsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnRlBVX01PREVfRlAzMicsXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJsb29uZ3NvbiInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnX01JUFNfQVJDSF9MT09OR1NPTicsCi0gICAgICAgICAgICAgICAgICAnRlBVX01PREVfRlAzMicsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9XSwgICMgdjhfdGFyZ2V0X2FyY2g9PSJtaXBzZWwiCi0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ibWlwczY0ZWwiIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwczY0IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX01JUFM2NCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsgJ3Y4X2Nhbl91c2VfZnB1X2luc3RydWN0aW9ucz09InRydWUiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdDQU5fVVNFX0ZQVV9JTlNUUlVDVElPTlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbICd2OF9ob3N0X2J5dGVvcmRlcj09ImxpdHRsZSInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX01JUFM2NF9MRScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsgJ3Y4X2hvc3RfYnl0ZW9yZGVyPT0iYmlnIicsIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnVjhfVEFSR0VUX0FSQ0hfTUlQUzY0X0JFJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAndjhfdXNlX21pcHNfYWJpX2hhcmRmbG9hdD09InRydWUiJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdfX21pcHNfaGFyZF9mbG9hdD0xJywKLSAgICAgICAgICAgICAgJ0NBTl9VU0VfRlBVX0lOU1RSVUNUSU9OUycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAnX19taXBzX3NvZnRfZmxvYXQ9MScKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICBdLAotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09dGFyZ2V0X2FyY2gnLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctV25vLWVycm9yPWFycmF5LWJvdW5kcycsICAjIFdvcmthcm91bmQgaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTYyNzMKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Im1pcHM2NGVsIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLUVMJ10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctRUwnXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Im1pcHM2NCInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1FQiddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLUVCJ10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsgJ3Y4X3VzZV9taXBzX2FiaV9oYXJkZmxvYXQ9PSJ0cnVlIicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1oYXJkLWZsb2F0J10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctbWhhcmQtZmxvYXQnXSwKLSAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLW1zb2Z0LWZsb2F0J10sCi0gICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWyctbXNvZnQtZmxvYXQnXSwKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ19NSVBTX0FSQ0hfTUlQUzY0UjYnLF0sCi0gICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgICAgIFsgJ2NsYW5nPT0wJywgewotICAgICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLVdhLC1taXBzNjRyNiddLAotICAgICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctbWlwczY0cjYnLCAnLW1hYmk9NjQnXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbJy1taXBzNjRyNicsICctbWFiaT02NCddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjYiIGFuZCBtaXBzX3VzZV9tc2E9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWyAnX01JUFNfTVNBJyBdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICBbJ21pcHNfYXJjaF92YXJpYW50PT0icjIiJywgewotICAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfQVJDSF9NSVBTNjRSMicsXSwKLSAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgICAgWyAnY2xhbmc9PTAnLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctV2EsLW1pcHM2NHIyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1taXBzNjRyMicsICctbWFiaT02NCddLAotICAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsnLW1pcHM2NHIyJywgJy1tYWJpPTY0J10sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgIyAndjhfdGFyZ2V0X2FyY2ghPXRhcmdldF9hcmNoJwotICAgICAgICAgICAgICAgICMgVGFyZ2V0IG5vdCBidWlsdCB3aXRoIGFuIE1JUFMgQ1hYIGNvbXBpbGVyIChzaW11bGF0b3IgYnVpbGQpLgotICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ19NSVBTX0FSQ0hfTUlQUzY0UjYnLF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiIgYW5kIG1pcHNfdXNlX21zYT09MScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbICdfTUlQU19NU0EnIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMiInLCB7Ci0gICAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWydfTUlQU19BUkNIX01JUFM2NFIyJyxdLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLCAgIydfdG9vbHNldD09InRhcmdldCIKLSAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydtaXBzX2FyY2hfdmFyaWFudD09InI2IicsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnX01JUFNfQVJDSF9NSVBTNjRSNicsXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyNiIgYW5kIG1pcHNfdXNlX21zYT09MScsIHsKLSAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsgJ19NSVBTX01TQScgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnbWlwc19hcmNoX3ZhcmlhbnQ9PSJyMiInLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ19NSVBTX0FSQ0hfTUlQUzY0UjInLF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwgICMnX3Rvb2xzZXQ9PSJob3N0IgotICAgICAgICBdLAotICAgICAgfV0sICAjIHY4X3RhcmdldF9hcmNoPT0ibWlwczY0ZWwiCi0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ieDY0IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX1g2NCcsCi0gICAgICAgIF0sCi0gICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAnQVJDSFMnOiBbICd4ODZfNjQnIF0sCi0gICAgICAgIH0sCi0gICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAnU3RhY2tSZXNlcnZlU2l6ZSc6ICcyMDk3MTUyJywKLSAgICAgICAgICB9LAotICAgICAgICB9LAotICAgICAgICAnbXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtJzogJ3g2NCcsCi0gICAgICB9XSwgICMgdjhfdGFyZ2V0X2FyY2g9PSJ4NjQiCi0gICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ieDMyIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgIyB4MzIgcG9ydCBzaGFyZXMgdGhlIHNvdXJjZSBjb2RlIHdpdGggeDY0IHBvcnQuCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIX1g2NCcsCi0gICAgICAgICAgJ1Y4X1RBUkdFVF9BUkNIXzMyX0JJVCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgJy1teDMyJywKLSAgICAgICAgICAjIEluaGliaXQgd2FybmluZyBpZiBsb25nIGxvbmcgdHlwZSBpcyB1c2VkLgotICAgICAgICAgICctV25vLWxvbmctbG9uZycsCi0gICAgICAgIF0sCi0gICAgICAgICdsZGZsYWdzJzogWwotICAgICAgICAgICctbXgzMicsCi0gICAgICAgIF0sCi0gICAgICB9XSwgICMgdjhfdGFyZ2V0X2FyY2g9PSJ4MzIiCi0gICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ1dJTjMyJywKLSAgICAgICAgICAnTk9NSU5NQVgnLCAgIyBSZWZzOiBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tL2MvdjgvdjgvKy8xNDU2NjIwCi0gICAgICAgIF0sCi0gICAgICAgICMgNDM1MTogVlMgMjAwNSBhbmQgbGF0ZXIgYXJlIHdhcm5pbmcgdXMgdGhhdCB0aGV5J3ZlIGZpeGVkIGEgYnVnCi0gICAgICAgICMgICAgICAgcHJlc2VudCBpbiBWUyAyMDAzIGFuZCBlYXJsaWVyLgotICAgICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFs0MzUxXSwKLSAgICAgICAgJ21zdnNfY29uZmlndXJhdGlvbl9hdHRyaWJ1dGVzJzogewotICAgICAgICAgICdDaGFyYWN0ZXJTZXQnOiAnMScsCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJ3aW4iIGFuZCB2OF90YXJnZXRfYXJjaD09Ing4NiInLCB7Ci0gICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgIyBFbnN1cmUgbm8gc3VycHJpc2luZyBhcnRpZmFjdHMgZnJvbSA4MGJpdCBkb3VibGUgbWF0aCB3aXRoIHg4Ni4KLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsnL2FyY2g6U1NFMiddLAotICAgICAgICAgIH0sCi0gICAgICAgIH0sCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJ3aW4iIGFuZCB2OF9lbmFibGVfcHJvZj09MScsIHsKLSAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hcEZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgfSwKLSAgICAgICAgfSwKLSAgICAgIH1dLAotICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIiBvciBPUz09Im9wZW5ic2QiIG9yIE9TPT0ic29sYXJpcyIgXAotICAgICAgICAgb3IgT1M9PSJuZXRic2QiIG9yIE9TPT0ibWFjIiBvciBPUz09ImFuZHJvaWQiIG9yIE9TPT0icW54IikgYW5kIFwKLSAgICAgICAgdjhfdGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICctbXNzZTInLAotICAgICAgICAgICctbWZwbWF0aD1zc2UnLAotICAgICAgICAgICctbW1teCcsICAjIEFsbG93cyBtbWludHJpbi5oIGZvciBNTVggaW50cmluc2ljcy4KLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIiBvciBPUz09Im9wZW5ic2QiIG9yIE9TPT0ic29sYXJpcyIgXAotICAgICAgICAgb3IgT1M9PSJuZXRic2QiIG9yIE9TPT0ibWFjIiBvciBPUz09ImFuZHJvaWQiIG9yIE9TPT0icW54IikgYW5kIFwKLSAgICAgICAgKHY4X3RhcmdldF9hcmNoPT0iYXJtIiBvciB2OF90YXJnZXRfYXJjaD09Ing4NiIgb3IgXAotICAgICAgICAgdjhfdGFyZ2V0X2FyY2g9PSJtaXBzIiBvciB2OF90YXJnZXRfYXJjaD09Im1pcHNlbCIgb3IgXAotICAgICAgICAgdjhfdGFyZ2V0X2FyY2g9PSJwcGMiKScsIHsKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IicsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ2hvc3RfY3h4X2lzX2JpYXJjaD09MScsIHsKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgIFsnaG9zdF9hcmNoPT0iczM5MHgiJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW0zMScgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbICctbTMxJyBdCi0gICAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW0zMicgXSwKLSAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1tMzInIF0KLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ0FSQ0hTJzogWyAnaTM4NicgXSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyd0YXJnZXRfY3h4X2lzX2JpYXJjaD09MScsIHsKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgIFsnaG9zdF9hcmNoPT0iczM5MHgiJywgewotICAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW0zMScgXSwKLSAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbICctbTMxJyBdCi0gICAgICAgICAgICAgICAgICB9LHsKLSAgICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW0zMicgXSwKLSAgICAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1tMzInIF0sCi0gICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdBUkNIUyc6IFsgJ2kzODYnIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgICBbJyhPUz09ImxpbnV4IiBvciBPUz09ImFuZHJvaWQiKSBhbmQgXAotICAgICAgICAodjhfdGFyZ2V0X2FyY2g9PSJ4NjQiIG9yIHY4X3RhcmdldF9hcmNoPT0iYXJtNjQiIG9yIFwKLSAgICAgICAgIHY4X3RhcmdldF9hcmNoPT0icHBjNjQiIG9yIHY4X3RhcmdldF9hcmNoPT0iczM5MHgiKScsIHsKLSAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IicsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ2hvc3RfY3h4X2lzX2JpYXJjaD09MScsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW02NCcgXSwKLSAgICAgICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1tNjQnIF0KLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgXSwKLSAgICAgICAgICAgfV0sCi0gICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICBbJ3RhcmdldF9jeHhfaXNfYmlhcmNoPT0xJywgewotICAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW02NCcgXSwKLSAgICAgICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbICctbTY0JyBdLAotICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgXQotICAgICAgICAgICB9XSwKLSAgICAgICAgIF0sCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJhbmRyb2lkIiBhbmQgdjhfYW5kcm9pZF9sb2dfc3Rkb3V0PT0xJywgewotICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAnVjhfQU5EUk9JRF9MT0dfU1RET1VUJywKLSAgICAgICAgXSwKLSAgICAgIH1dLAotICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJzb2xhcmlzIiBcCi0gICAgICAgICBvciBPUz09Im5ldGJzZCIgb3IgT1M9PSJxbngiIG9yIE9TPT0iYWl4IicsIHsKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWyAndjhfbm9fc3RyaWN0X2FsaWFzaW5nPT0xJywgewotICAgICAgICAgICAgJ2NmbGFncyc6IFsgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJyBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLCAgIyBjb25kaXRpb25zCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJzb2xhcmlzIicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbICdfX0M5OUZFQVRVUkVTX189MScgXSwgICMgaXNpbmYoKSBldGMuCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJmcmVlYnNkIiBvciBPUz09Im9wZW5ic2QiJywgewotICAgICAgICAnY2ZsYWdzJzogWyAnLUkvdXNyL2xvY2FsL2luY2x1ZGUnIF0sCi0gICAgICB9XSwKLSAgICAgIFsnT1M9PSJuZXRic2QiJywgewotICAgICAgICAnY2ZsYWdzJzogWyAnLUkvdXNyL3BrZy9pbmNsdWRlJyBdLAotICAgICAgfV0sCi0gICAgICBbJ09TPT0iYWl4IicsIHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgIyBTdXBwb3J0IGZvciBtYWxsb2MoMCkKLSAgICAgICAgICAnX0xJTlVYX1NPVVJDRV9DT01QQVQ9MScsCi0gICAgICAgICAgJ19fU1REQ19GT1JNQVRfTUFDUk9TJywKLSAgICAgICAgICAnX0FMTF9TT1VSQ0U9MSddLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICBbICd2OF90YXJnZXRfYXJjaD09InBwYyInLCB7Ci0gICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1XbCwtYm1heGRhdGE6MHg2MDAwMDAwMC9kc2EnIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWyAndjhfdGFyZ2V0X2FyY2g9PSJwcGM2NCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzJzogWyAnLW1haXg2NCcsICctZmRvbGxhcnMtaW4taWRlbnRpZmllcnMnIF0sCi0gICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1tYWl4NjQgLVdsLC1iYmlndG9jJyBdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotICAgICAgfV0sCi0gICAgXSwgICMgY29uZGl0aW9ucwotICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICdEZWJ1Zyc6IHsKLSAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgJ0VOQUJMRV9ESVNBU1NFTUJMRVInLAotICAgICAgICAgICdWOF9FTkFCTEVfQ0hFQ0tTJywKLSAgICAgICAgICAnT0JKRUNUX1BSSU5UJywKLSAgICAgICAgICAnVkVSSUZZX0hFQVAnLAotICAgICAgICAgICdERUJVRycsCi0gICAgICAgICAgJ1Y4X1RSQUNFX01BUFMnLAotICAgICAgICAgICdWOF9FTkFCTEVfQUxMT0NBVElPTl9USU1FT1VUJywKLSAgICAgICAgICAnVjhfRU5BQkxFX0ZPUkNFX1NMT1dfUEFUSCcsCi0gICAgICAgIF0sCi0gICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgIFsnT1M9PSJsaW51eCIgYW5kIHY4X2VuYWJsZV9iYWNrdHJhY2U9PTEnLCB7Ci0gICAgICAgICAgICAjIFN1cHBvcnQgZm9yIGJhY2t0cmFjZV9zeW1ib2xzLgotICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbICctcmR5bmFtaWMnIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydPUz09ImFpeCInLCB7Ci0gICAgICAgICAgICAnbGRmbGFncyc6IFsgJy1XbCwtYmJpZ3RvYycgXSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0icHBjNjQiJywgewotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbICctbWFpeDY0IC1tY21vZGVsPWxhcmdlJyBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewotICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgJ2FuZHJvaWRfZnVsbF9kZWJ1ZyUnOiAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ2FuZHJvaWRfZnVsbF9kZWJ1Zz09MCcsIHsKLSAgICAgICAgICAgICAgICAjIERpc2FibGUgZnVsbCBkZWJ1ZyBpZiB3ZSB3YW50IGEgZmFzdGVyIHY4IGluIGEgZGVidWcgYnVpbGQuCi0gICAgICAgICAgICAgICAgIyBUT0RPKDIzMDQpOiBwYXNzIERJU0FCTEVfREVCVUdfQVNTRVJUIGluc3RlYWQgb2YgaGlkaW5nIERFQlVHLgotICAgICAgICAgICAgICAgICdkZWZpbmVzISc6IFsKLSAgICAgICAgICAgICAgICAgICdERUJVRycsCi0gICAgICAgICAgICAgICAgICAnRU5BQkxFX1NMT1dfRENIRUNLUycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgIFsndjhfb3B0aW1pemVkX2RlYnVnPT0wJywgewotICAgICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnMCcsCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IiBvciBmb3JjZV9keW5hbWljX2NydD09MScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzMnLCAgIyAvTURkCi0gICAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMScsICAjIC9NVGQKLSAgICAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAgICdMaW5rSW5jcmVtZW50YWwnOiAnMicsCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgJ3Y4X2VuYWJsZV9zbG93X2RjaGVja3MlJzogMSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJuZXRic2QiIG9yIFwKLSAgICAgICAgICAgIE9TPT0icW54IiBvciBPUz09ImFpeCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgICAnLU8zJywKLSAgICAgICAgICAgICAgICAgICctTzInLAotICAgICAgICAgICAgICAgICAgJy1PMScsCi0gICAgICAgICAgICAgICAgICAnLU9zJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICAgICAgICAgICAgICAgICctZmZ1bmN0aW9uLXNlY3Rpb25zJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMCcsICAjIC1PMAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ3Y4X2VuYWJsZV9zbG93X2RjaGVja3M9PTEnLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnRU5BQkxFX1NMT1dfRENIRUNLUycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnT3B0aW1pemF0aW9uJzogJzInLAotICAgICAgICAgICAgICAgICdJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbic6ICcyJywKLSAgICAgICAgICAgICAgICAnRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgICAgICdGYXZvclNpemVPclNwZWVkJzogJzAnLAotICAgICAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgICAgICdCYXNpY1J1bnRpbWVDaGVja3MnOiAnMCcsCi0gICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IiBvciBmb3JjZV9keW5hbWljX2NydD09MScsIHsKLSAgICAgICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzMnLCAgIy9NRGQKLSAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgICdSdW50aW1lTGlicmFyeSc6ICcxJywgICMvTVRkCi0gICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJzEnLAotICAgICAgICAgICAgICAgICdPcHRpbWl6ZVJlZmVyZW5jZXMnOiAnMicsCi0gICAgICAgICAgICAgICAgJ0VuYWJsZUNPTURBVEZvbGRpbmcnOiAnMicsCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgJ3Y4X2VuYWJsZV9zbG93X2RjaGVja3MlJzogMCwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJuZXRic2QiIG9yIFwKLSAgICAgICAgICAgIE9TPT0icW54IiBvciBPUz09ImFpeCInLCB7Ci0gICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICAgICAnLU8wJywKLSAgICAgICAgICAgICAgICAgICctTzEnLAotICAgICAgICAgICAgICAgICAgJy1PcycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCi0gICAgICAgICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgICMgRG9uJ3QgdXNlIC1PMyB3aXRoIHNhbml0aXplcnMuCi0gICAgICAgICAgICAgICAgICBbJ2FzYW49PTAgYW5kIG1zYW49PTAgYW5kIGxzYW49PTAgXAotICAgICAgICAgICAgICAgIGFuZCB0c2FuPT0wIGFuZCB1YnNhbj09MCBhbmQgdWJzYW5fdnB0cj09MCcsIHsKLSAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyc6IFsnLU8zJ10sCi0gICAgICAgICAgICAgICAgICAgICdjZmxhZ3MhJzogWyctTzInXSwKLSAgICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgICdjZmxhZ3MnOiBbJy1PMiddLAotICAgICAgICAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbJy1PMyddLAotICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgICAnR0NDX09QVElNSVpBVElPTl9MRVZFTCc6ICczJywgICMgLU8zCi0gICAgICAgICAgICAgICAgICAnR0NDX1NUUklDVF9BTElBU0lORyc6ICdZRVMnLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ3Y4X2VuYWJsZV9zbG93X2RjaGVja3M9PTEnLCB7Ci0gICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnRU5BQkxFX1NMT1dfRENIRUNLUycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH1dLAotICAgICAgICAgICMgVGVtcG9yYXJ5IHJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzIzODAxCi0gICAgICAgICAgWyd2OF9lbmFibGVfaGFuZGxlX3phcHBpbmc9PTEnLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsnRU5BQkxFX0hBTkRMRV9aQVBQSU5HJyxdLAotICAgICAgICAgIH1dLAotICAgICAgICBdLAotCi0gICAgICB9LCAgIyBEZWJ1Z0Jhc2VDb21tb24KLSAgICAgICdSZWxlYXNlJzogewotICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICd2OF9lbmFibGVfc2xvd19kY2hlY2tzJSc6IDAsCi0gICAgICAgIH0sCi0gICAgICAgICAjIFRlbXBvcmFyeSByZWZzOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8yMzgwMQotICAgICAgICAnZGVmaW5lcyEnOiBbJ0VOQUJMRV9IQU5ETEVfWkFQUElORycsXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09ImZyZWVic2QiIG9yIE9TPT0ib3BlbmJzZCIgb3IgT1M9PSJuZXRic2QiIFwKLSAgICAgICAgICAgIG9yIE9TPT0iYWl4IicsIHsKLSAgICAgICAgICAgICdjZmxhZ3MhJzogWwotICAgICAgICAgICAgICAnLU9zJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLWZkYXRhLXNlY3Rpb25zJywKLSAgICAgICAgICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAjIERvbid0IHVzZSAtTzMgd2l0aCBzYW5pdGl6ZXJzLgotICAgICAgICAgICAgICBbJ2FzYW49PTAgYW5kIG1zYW49PTAgYW5kIGxzYW49PTAgXAotICAgICAgICAgICAgICAgIGFuZCB0c2FuPT0wIGFuZCB1YnNhbj09MCBhbmQgdWJzYW5fdnB0cj09MCcsIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctTzMnXSwKLSAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsnLU8yJ10sCi0gICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAnY2ZsYWdzJzogWyctTzInXSwKLSAgICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsnLU8zJ10sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAnY2ZsYWdzISc6IFsKLSAgICAgICAgICAgICAgJy1PMycsCi0gICAgICAgICAgICAgICctT3MnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctZmRhdGEtc2VjdGlvbnMnLAotICAgICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCi0gICAgICAgICAgICAgICctTzInLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMycsICAjIC1PMwotCi0gICAgICAgICAgICAgICMgLWZzdHJpY3QtYWxpYXNpbmcuICBNYWlubGluZSBnY2MKLSAgICAgICAgICAgICAgIyBlbmFibGVzIHRoaXMgYXQgLU8yIGFuZCBhYm92ZSwKLSAgICAgICAgICAgICAgIyBidXQgQXBwbGUgZ2NjIGRvZXMgbm90IHVubGVzcyBpdAotICAgICAgICAgICAgICAjIGlzIHNwZWNpZmllZCBleHBsaWNpdGx5LgotICAgICAgICAgICAgICAnR0NDX1NUUklDVF9BTElBU0lORyc6ICdZRVMnLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwgICMgT1M9PSJtYWMiCi0gICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ09wdGltaXphdGlvbic6ICcyJywKLSAgICAgICAgICAgICAgICAnSW5saW5lRnVuY3Rpb25FeHBhbnNpb24nOiAnMicsCi0gICAgICAgICAgICAgICAgJ0VuYWJsZUludHJpbnNpY0Z1bmN0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICAgICAnRmF2b3JTaXplT3JTcGVlZCc6ICcwJywKLSAgICAgICAgICAgICAgICAnU3RyaW5nUG9vbGluZyc6ICd0cnVlJywKLSAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiIG9yIGZvcmNlX2R5bmFtaWNfY3J0PT0xJywgewotICAgICAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMicsICAjL01ECi0gICAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgICdSdW50aW1lTGlicmFyeSc6ICcwJywgICMvTVQKLSAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcxJywKLSAgICAgICAgICAgICAgICAnT3B0aW1pemVSZWZlcmVuY2VzJzogJzInLAotICAgICAgICAgICAgICAgICdFbmFibGVDT01EQVRGb2xkaW5nJzogJzInLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9XSwgICMgT1M9PSJ3aW4iCi0gICAgICAgICAgWyd2OF9lbmFibGVfc2xvd19kY2hlY2tzPT0xJywgewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdFTkFCTEVfU0xPV19EQ0hFQ0tTJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sICAjIGNvbmRpdGlvbnMKLSAgICAgIH0sICAjIFJlbGVhc2UKLSAgICB9LCAgIyBjb25maWd1cmF0aW9ucwotICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWwotICAgICAgNDEyOSwgICMgdW5yZWNvZ25pemVkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UgKHRvcnF1ZS1nZW5lcmF0ZWQpCi0gICAgICA0MjQ1LCAgIyBDb252ZXJzaW9uIHdpdGggc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoLgotICAgICAgNDI2NywgICMgQ29udmVyc2lvbiB3aXRoIHBvc3NpYmxlIGxvc3Mgb2YgZGF0YS4KLSAgICAgIDQzMjQsICAjIFBhZGRpbmcgc3RydWN0dXJlIGR1ZSB0byBhbGlnbm1lbnQuCi0gICAgICAjIDQzNTEsICMgW3JlZmFja10gT2xkIGlzc3VlIHdpdGggYXJyYXkgaW5pdC4KLSAgICAgIDQzNTUsICAjICd0aGlzJyB1c2VkIGluIGJhc2UgbWVtYmVyIGluaXRpYWxpemVyIGxpc3QKLSAgICAgIDQ2NjEsICAjIG5vIHN1aXRhYmxlIGRlZmluaXRpb24gcHJvdmlkZWQgZm9yIGV4cGxpY2l0IHRlbXBsYXRlIGluc3RhbnRpYXRpb24gcmVxdWVzdAotICAgICAgNDcwMSwgICMgUG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZS4KLSAgICAgIDQ3MDIsICAjIFVucmVhY2hhYmxlIGNvZGUuCi0gICAgICA0NzAzLCAgIyBQb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGxvY2FsIHBvaW50ZXIgdmFyaWFibGUuCi0gICAgICA0NzA5LCAgIyBDb21tYSBvcGVyYXRvciB3aXRoaW4gYXJyYXkgaW5kZXggZXhwciAoYnVnZ2VkKS4KLSAgICAgICMgNDcxNCwgICMgRnVuY3Rpb24gbWFya2VkIGZvcmNlaW5saW5lIG5vdCBpbmxpbmVkLgotICAgICAgNDcxNSwgICMgTm90IGFsbCBjb250cm9sIHBhdGhzIHJldHVybiBhIHZhbHVlLiAoc2VlIGh0dHBzOi8vY3JidWcuY29tL3Y4Lzc2NTgpCi0gICAgICA0NzE4LCAgIyBSZWN1cnNpdmUgY2FsbCBoYXMgbm8gc2lkZS1lZmZlY3QuCi0gICAgICA0NzIzLCAgIyBodHRwczovL2NyYnVnLmNvbS92OC83NzcxCi0gICAgICA0NzI0LCAgIyBodHRwczovL2NyYnVnLmNvbS92OC83NzcxCi0gICAgICA0ODAwLCAgIyBGb3JjaW5nIHZhbHVlIHRvIGJvb2wuCi0gICAgXSwKLSAgICAjIFJlbGV2YW50IG9ubHkgZm9yIHg4Ni4KLSAgICAjIFJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzI1ODUyCi0gICAgIyBSZWZzOiBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9jcHAvYnVpbGQvcmVmZXJlbmNlL3NhZmVzZWgtaW1hZ2UtaGFzLXNhZmUtZXhjZXB0aW9uLWhhbmRsZXJzCi0gICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAnSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnMnOiAnZmFsc2UnLAotICAgICAgfSwKLSAgICB9LAotICB9LCAgIyB0YXJnZXRfZGVmYXVsdHMKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3Y4L3Y4Lmd5cCBiL3RoaXJkX3BhcnR5L3Y4L3Y4Lmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNlMTNlYy4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS92OC92OC5neXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDc5ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMTIgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotewotICAndmFyaWFibGVzJzogewotICAgICdWOF9ST09UJzogJzwoREVQVEgpL3RoaXJkX3BhcnR5L3Y4JywKLSAgICAndjhfY29kZSc6IDEsCi0gICAgJ3Y4X3JhbmRvbV9zZWVkJSc6IDMxNDE1OTI2NSwKLSAgICAndjhfdmVjdG9yX3N0b3JlcyUnOiAwLAotICAgICd2OF9lbWJlZF9zY3JpcHQlJzogIiIsCi0gICAgJ21rc25hcHNob3RfZXhlYyc6ICc8KFBST0RVQ1RfRElSKS88KEVYRUNVVEFCTEVfUFJFRklYKW1rc25hcHNob3Q8KGhvc3RfZXhlY3V0YWJsZV9zdWZmaXgpJywKLSAgICAndjhfb3NfcGFnZV9zaXplJSc6IDAsCi0gICAgIyBDb2JhbHQgYWRkZWQgdmFyaWFibGVzCi0KLSAgICAndjhfdXNlX3NuYXBzaG90JzogMSwKLSAgICAndjhfb3B0aW1pemVkX2RlYnVnJzogMCwKLSAgICAndjhfdXNlX2V4dGVybmFsX3N0YXJ0dXBfZGF0YSc6IDAsCi0gICAgJ3Y4X2VuYWJsZV9pMThuX3N1cHBvcnQnOiAwLAotICAgICd2OF9lbmFibGVfc25hcHNob3RfY29kZV9jb21tZW50cyc6IDAsCi0gICAgIyBFbmFibGUgbmF0aXZlIGNvdW50ZXJzIGZyb20gdGhlIHNuYXBzaG90IChpbXBhY3RzIHBlcmZvcm1hbmNlLCBzZXRzCi0gICAgIyAtZFY4X1NOQVBTSE9UX05BVElWRV9DT0RFX0NPVU5URVJTKS4KLSAgICAjIFRoaXMgb3B0aW9uIHdpbGwgZ2VuZXJhdGUgZXh0cmEgY29kZSBpbiB0aGUgc25hcHNob3QgdG8gaW5jcmVtZW50IGNvdW50ZXJzLAotICAgICMgYXMgcGVyIHRoZSAtLW5hdGl2ZS1jb2RlLWNvdW50ZXJzIGZsYWcuCi0gICAgJ3Y4X2VuYWJsZV9zbmFwc2hvdF9uYXRpdmVfY29kZV9jb3VudGVycyUnOiAwLAotICAgICMgRW5hYmxlIGNvZGUtZ2VuZXJhdGlvbi10aW1lIGNoZWNraW5nIG9mIHR5cGVzIGluIHRoZSBDb2RlU3R1YkFzc2VtYmxlci4KLSAgICAndjhfZW5hYmxlX3ZlcmlmeV9jc2ElJzogMCwKLSAgICAndjhfZW5hYmxlXzMxYml0X3NtaXNfb25fNjRiaXRfYXJjaCUnOiAwLAotICAgICMgU2V0cyAtZE9CSkVDVF9QUklOVC4KLSAgICAndjhfZW5hYmxlX29iamVjdF9wcmludCUnOiAwLAotICAgICMgU2V0cyAtZFY4X1RSQUNFX01BUFMuCi0gICAgJ3Y4X2VuYWJsZV90cmFjZV9tYXBzJSc6IDAsCi0gICAgIyBTZXRzIC1kVjhfRU5BQkxFX0NIRUNLUy4KLSAgICAndjhfZW5hYmxlX3Y4X2NoZWNrcyUnOiAwLAotICAgICMgU2V0cyAtZFY4X1RSQUNFX0lHTklUSU9OLgotICAgICd2OF9lbmFibGVfdHJhY2VfaWduaXRpb24lJzogMCwKLSAgICAjIFNldHMgLWRWOF9UUkFDRV9GRUVEQkFDS19VUERBVEVTLgotICAgICd2OF9lbmFibGVfdHJhY2VfZmVlZGJhY2tfdXBkYXRlcyUnOiAwLAotICAgICMgU2V0cyAtZFY4X0NPTkNVUlJFTlRfTUFSS0lORwotICAgICd2OF9lbmFibGVfY29uY3VycmVudF9tYXJraW5nJSc6IDEsCi0gICAgIyBFbmFibGVzIHZhcmlvdXMgdGVzdGluZyBmZWF0dXJlcy4KLSAgICAndjhfZW5hYmxlX3Rlc3RfZmVhdHVyZXMlJzogMCwKLSAgICAnaXNfY29tcG9uZW50X2J1aWxkJzogMCwKLSAgICAndjhfY3VycmVudF9jcHUnOiAnPCh2OF90YXJnZXRfYXJjaCknLAotICAgICdpc19wb3NpeCc6IDAsCi0gICAgJ2lzX2Z1Y2hzaWEnOiAwLAotICAgICdpc19hbmRyb2lkJzogMCwKLSAgICAnaXNfd2luJzogMCwKLSAgICAnaXNfbGludXgnOiAwLAotICAgICdpc19zdGFyYm9hcmQnOiAxLAotICAgICdpc19hc2FuJzogMCwKLSAgICAndjhfdXNlX3BlcmZldHRvJzogMCwKLSAgICAndjhfdXNlX3NpcGhhc2gnOiAwLAotICAgICd2OF9lbmFibGVfbGl0ZV9tb2RlJzogMCwKLSAgICAnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnOiAxLAotCi0gICAgIyBOZXcgYWRkaXRpb24gYWZ0ZXIgOC43IHJlYmFzZQotICAgICd2OF9lbmFibGVfdGhpcmRfcGFydHlfaGVhcCc6IDAsCi0gICAgJ3Y4X2NvbnRyb2xfZmxvd19pbnRlZ3JpdHknOiAwLCAgIyAgcXVhbGNvbW0ncyBwb2ludGVyIGF1dGhlbnRpY2F0aW9uCi0gICAgIyBFbmQgb2YgQ29iYWx0IHZhcmlhYmxlcwotCi0gICAgJ2dlbmVyYXRlX2J5dGVjb2RlX291dHB1dF9yb290JzogJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2dlbmVyYXRlLWJ5dGVjb2RlLW91dHB1dC1yb290JywKLSAgICAnZ2VuZXJhdGVfYnl0ZWNvZGVfYnVpbHRpbnNfbGlzdF9vdXRwdXQnOiAnPChnZW5lcmF0ZV9ieXRlY29kZV9vdXRwdXRfcm9vdCkvYnVpbHRpbnMtZ2VuZXJhdGVkL2J5dGVjb2Rlcy1idWlsdGlucy1saXN0LmgnLAotICAgICd0b3JxdWVfZmlsZXNfdjhfcm9vdF9yZWxhdGl2ZSc6IFsKLSAgICAgICJzcmMvYnVpbHRpbnMvYWdncmVnYXRlLWVycm9yLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktY29weXdpdGhpbi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LWV2ZXJ5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktZmlsdGVyLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktZmluZC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LWZpbmRpbmRleC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LWZvcmVhY2gudHEiLAotICAgICAgInNyYy9idWlsdGlucy9hcnJheS1mcm9tLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktaXNhcnJheS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LWpvaW4udHEiLAotICAgICAgInNyYy9idWlsdGlucy9hcnJheS1sYXN0aW5kZXhvZi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LW1hcC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LW9mLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktcmVkdWNlLXJpZ2h0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktcmVkdWNlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktcmV2ZXJzZS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LXNoaWZ0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktc2xpY2UudHEiLAotICAgICAgInNyYy9idWlsdGlucy9hcnJheS1zb21lLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktc3BsaWNlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXktdW5zaGlmdC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2FycmF5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYXJyYXlidWZmZXIudHEiLAotICAgICAgInNyYy9idWlsdGlucy9iYXNlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvYm9vbGVhbi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2J1aWx0aW5zLWJpZ2ludC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2J1aWx0aW5zLXN0cmluZy50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2Nhc3QudHEiLAotICAgICAgInNyYy9idWlsdGlucy9jb2xsZWN0aW9ucy50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2NvbnN0cnVjdG9yLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvY29udmVyc2lvbi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2NvbnZlcnQudHEiLAotICAgICAgInNyYy9idWlsdGlucy9jb25zb2xlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvZGF0YS12aWV3LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvZmluYWxpemF0aW9uLXJlZ2lzdHJ5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvZnJhbWVzLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvZnJhbWUtYXJndW1lbnRzLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvZnVuY3Rpb24udHEiLAotICAgICAgInNyYy9idWlsdGlucy9ncm93YWJsZS1maXhlZC1hcnJheS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2ljLWNhbGxhYmxlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvaWMtZHluYW1pYy1tYXAtY2hlY2tzLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvaWMudHEiLAotICAgICAgInNyYy9idWlsdGlucy9pbnRlcm5hbC1jb3ZlcmFnZS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL2ludGVybmFsLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvaXRlcmF0b3IudHEiLAotICAgICAgInNyYy9idWlsdGlucy9tYXRoLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvbnVtYmVyLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvb2JqZWN0LWZyb21lbnRyaWVzLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvb2JqZWN0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJvbWlzZS1hYnN0cmFjdC1vcGVyYXRpb25zLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJvbWlzZS1hbGwudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLWFsbC1lbGVtZW50LWNsb3N1cmUudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLWFueS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb21pc2UtY29uc3RydWN0b3IudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLWZpbmFsbHkudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLW1pc2MudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLXJhY2UudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm9taXNlLXJlYWN0aW9uLWpvYi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb21pc2UtcmVzb2x2ZS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb21pc2UtdGhlbi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb21pc2Utam9icy50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb3h5LWNvbnN0cnVjdG9yLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJveHktZGVsZXRlLXByb3BlcnR5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJveHktZ2V0LXByb3BlcnR5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJveHktZ2V0LXByb3RvdHlwZS1vZi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb3h5LWhhcy1wcm9wZXJ0eS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3Byb3h5LWlzLWV4dGVuc2libGUudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm94eS1wcmV2ZW50LWV4dGVuc2lvbnMudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm94eS1yZXZvY2FibGUudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm94eS1yZXZva2UudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm94eS1zZXQtcHJvcGVydHkudHEiLAotICAgICAgInNyYy9idWlsdGlucy9wcm94eS1zZXQtcHJvdG90eXBlLW9mLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcHJveHkudHEiLAotICAgICAgInNyYy9idWlsdGlucy9yZWZsZWN0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcmVnZXhwLWV4ZWMudHEiLAotICAgICAgInNyYy9idWlsdGlucy9yZWdleHAtbWF0Y2gtYWxsLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcmVnZXhwLW1hdGNoLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcmVnZXhwLXJlcGxhY2UudHEiLAotICAgICAgInNyYy9idWlsdGlucy9yZWdleHAtc2VhcmNoLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcmVnZXhwLXNvdXJjZS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3JlZ2V4cC1zcGxpdC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3JlZ2V4cC10ZXN0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvcmVnZXhwLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLWVuZHN3aXRoLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLWh0bWwudHEiLAotICAgICAgInNyYy9idWlsdGlucy9zdHJpbmctaXRlcmF0b3IudHEiLAotICAgICAgInNyYy9idWlsdGlucy9zdHJpbmctcGFkLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLXJlcGVhdC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3N0cmluZy1yZXBsYWNlYWxsLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLXNsaWNlLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLXN0YXJ0c3dpdGgudHEiLAotICAgICAgInNyYy9idWlsdGlucy9zdHJpbmctc3Vic3RyLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3RyaW5nLXN1YnN0cmluZy50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3N0cmluZy10cmltLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvc3ltYm9sLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdG9ycXVlLWludGVybmFsLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktY3JlYXRldHlwZWRhcnJheS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LWV2ZXJ5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktZW50cmllcy50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LWZpbHRlci50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LWZpbmQudHEiLAotICAgICAgInNyYy9idWlsdGlucy90eXBlZC1hcnJheS1maW5kaW5kZXgudHEiLAotICAgICAgInNyYy9idWlsdGlucy90eXBlZC1hcnJheS1mb3JlYWNoLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktZnJvbS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LWtleXMudHEiLAotICAgICAgInNyYy9idWlsdGlucy90eXBlZC1hcnJheS1vZi50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LXJlZHVjZS50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LXJlZHVjZXJpZ2h0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktc2V0LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktc2xpY2UudHEiLAotICAgICAgInNyYy9idWlsdGlucy90eXBlZC1hcnJheS1zb21lLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktc29ydC50cSIsCi0gICAgICAic3JjL2J1aWx0aW5zL3R5cGVkLWFycmF5LXN1YmFycmF5LnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXktdmFsdWVzLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvdHlwZWQtYXJyYXkudHEiLAotICAgICAgInNyYy9idWlsdGlucy93YXNtLnRxIiwKLSAgICAgICJzcmMvYnVpbHRpbnMvd2Vhay1yZWYudHEiLAotICAgICAgInNyYy9pYy9oYW5kbGVyLWNvbmZpZ3VyYXRpb24udHEiLAotICAgICAgInNyYy9vYmplY3RzL2FsbG9jYXRpb24tc2l0ZS50cSIsCi0gICAgICAic3JjL29iamVjdHMvYXBpLWNhbGxiYWNrcy50cSIsCi0gICAgICAic3JjL29iamVjdHMvYXJndW1lbnRzLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9iaWdpbnQudHEiLAotICAgICAgInNyYy9vYmplY3RzL2NlbGwudHEiLAotICAgICAgInNyYy9vYmplY3RzL2NvZGUudHEiLAotICAgICAgInNyYy9vYmplY3RzL2NvbnRleHRzLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9kYXRhLWhhbmRsZXIudHEiLAotICAgICAgInNyYy9vYmplY3RzL2RlYnVnLW9iamVjdHMudHEiLAotICAgICAgInNyYy9vYmplY3RzL2Rlc2NyaXB0b3ItYXJyYXkudHEiLAotICAgICAgInNyYy9vYmplY3RzL2VtYmVkZGVyLWRhdGEtYXJyYXkudHEiLAotICAgICAgInNyYy9vYmplY3RzL2ZlZWRiYWNrLWNlbGwudHEiLAotICAgICAgInNyYy9vYmplY3RzL2ZlZWRiYWNrLXZlY3Rvci50cSIsCi0gICAgICAic3JjL29iamVjdHMvZml4ZWQtYXJyYXkudHEiLAotICAgICAgInNyYy9vYmplY3RzL2ZvcmVpZ24udHEiLAotICAgICAgInNyYy9vYmplY3RzL2ZyZWUtc3BhY2UudHEiLAotICAgICAgInNyYy9vYmplY3RzL2hlYXAtbnVtYmVyLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9oZWFwLW9iamVjdC50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9qcy1hcnJheS50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtY29sbGVjdGlvbi1pdGVyYXRvci50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtY29sbGVjdGlvbi50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtZnVuY3Rpb24udHEiLAotICAgICAgInNyYy9vYmplY3RzL2pzLWdlbmVyYXRvci50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtb2JqZWN0cy50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtcHJvbWlzZS50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtcHJveHkudHEiLAotICAgICAgInNyYy9vYmplY3RzL2pzLXJlZ2V4cC1zdHJpbmctaXRlcmF0b3IudHEiLAotICAgICAgInNyYy9vYmplY3RzL2pzLXJlZ2V4cC50cSIsCi0gICAgICAic3JjL29iamVjdHMvanMtd2Vhay1yZWZzLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9saXRlcmFsLW9iamVjdHMudHEiLAotICAgICAgInNyYy9vYmplY3RzL21hcC50cSIsCi0gICAgICAic3JjL29iamVjdHMvbWljcm90YXNrLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9tb2R1bGUudHEiLAotICAgICAgInNyYy9vYmplY3RzL25hbWUudHEiLAotICAgICAgInNyYy9vYmplY3RzL29kZGJhbGwudHEiLAotICAgICAgInNyYy9vYmplY3RzL29yZGVyZWQtaGFzaC10YWJsZS50cSIsCi0gICAgICAic3JjL29iamVjdHMvcHJpbWl0aXZlLWhlYXAtb2JqZWN0LnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9wcm9taXNlLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9wcm9wZXJ0eS1hcnJheS50cSIsCi0gICAgICAic3JjL29iamVjdHMvcHJvcGVydHktY2VsbC50cSIsCi0gICAgICAic3JjL29iamVjdHMvcHJvcGVydHktZGVzY3JpcHRvci1vYmplY3QudHEiLAotICAgICAgInNyYy9vYmplY3RzL3Byb3RvdHlwZS1pbmZvLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9yZWdleHAtbWF0Y2gtaW5mby50cSIsCi0gICAgICAic3JjL29iamVjdHMvc2NvcGUtaW5mby50cSIsCi0gICAgICAic3JjL29iamVjdHMvc2NyaXB0LnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9zaGFyZWQtZnVuY3Rpb24taW5mby50cSIsCi0gICAgICAic3JjL29iamVjdHMvc291cmNlLXRleHQtbW9kdWxlLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9zdGFjay1mcmFtZS1pbmZvLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy9zdHJpbmcudHEiLAotICAgICAgInNyYy9vYmplY3RzL3N0cnVjdC50cSIsCi0gICAgICAic3JjL29iamVjdHMvc3ludGhldGljLW1vZHVsZS50cSIsCi0gICAgICAic3JjL29iamVjdHMvdGVtcGxhdGUtb2JqZWN0cy50cSIsCi0gICAgICAic3JjL29iamVjdHMvdGVtcGxhdGVzLnRxIiwKLSAgICAgICJzcmMvb2JqZWN0cy90b3JxdWUtZGVmaW5lZC1jbGFzc2VzLnRxIiwKLSAgICAgICJzcmMvd2FzbS93YXNtLW9iamVjdHMudHEiLAotICAgICAgInRlc3QvdG9ycXVlL3Rlc3QtdG9ycXVlLnRxIiwKLSAgICAgICJ0aGlyZF9wYXJ0eS92OC9idWlsdGlucy9hcnJheS1zb3J0LnRxIiwKLSAgICBdLAotICAgICd0b3JxdWVfZmlsZXMnOiBbJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuRm9yRWFjaEZvcm1hdCAiPChWOF9ST09UKS8lcyIgPEAodG9ycXVlX2ZpbGVzX3Y4X3Jvb3RfcmVsYXRpdmUpKSddLAotICAgICd0b3JxdWVfb3V0cHV0X3Jvb3QnOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvdG9ycXVlLW91dHB1dC1yb290JywKLSAgICAndG9ycXVlX2ZpbGVzX3JlcGxhY2VkJzogWyc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkZvckVhY2hSZXBsYWNlICIudHEiICItdHEtY3NhIiA8QCh0b3JxdWVfZmlsZXNfdjhfcm9vdF9yZWxhdGl2ZSkpJ10sCi0gICAgJ3RvcnF1ZV9vdXRwdXRzJzogWyc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkZvckVhY2hGb3JtYXQgIjwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkLyVzLmNjIiA8QCh0b3JxdWVfZmlsZXNfcmVwbGFjZWQpKSddLAotICAgICd0b3JxdWVfb3V0cHV0cysnOiBbJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuRm9yRWFjaEZvcm1hdCAiPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvJXMuaCIgPEAodG9ycXVlX2ZpbGVzX3JlcGxhY2VkKSknXSwKLSAgICAndjhfY29tcGlsZXJfc291cmNlcyc6IFsnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgInY4X2NvbXBpbGVyX3NvdXJjZXMgPSAiKSddLAotCi0gICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICBbJyh0YXJnZXRfYXJjaD09ImFybTY0IiBvciB0YXJnZXRfYXJjaD09Ing2NCIpIGFuZCBkaXNhYmxlX3Y4X3BvaW50ZXJfY29tcHJlc3Npb249PTAnLCB7Ci0gICAgICAgICAndjhfZW5hYmxlX3BvaW50ZXJfY29tcHJlc3Npb24nOiAxLAotICAgICAgfSwgewotICAgICAgICAgJ3Y4X2VuYWJsZV9wb2ludGVyX2NvbXByZXNzaW9uJzogMCwKLSAgICAgIH1dLAotICAgICAgWyd2OF9lbmFibGVfaTE4bl9zdXBwb3J0JywgewotICAgICAgICAndG9ycXVlX2ZpbGVzX3Y4X3Jvb3RfcmVsYXRpdmUnOiBbCi0gICAgICAgICAgInNyYy9vYmplY3RzL2ludGwtb2JqZWN0cy50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLWJyZWFrLWl0ZXJhdG9yLnRxIiwKLSAgICAgICAgICAic3JjL29iamVjdHMvanMtY29sbGF0b3IudHEiLAotICAgICAgICAgICJzcmMvb2JqZWN0cy9qcy1kYXRlLXRpbWUtZm9ybWF0LnRxIiwKLSAgICAgICAgICAic3JjL29iamVjdHMvanMtZGlzcGxheS1uYW1lcy50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLWxpc3QtZm9ybWF0LnRxIiwKLSAgICAgICAgICAic3JjL29iamVjdHMvanMtbG9jYWxlLnRxIiwKLSAgICAgICAgICAic3JjL29iamVjdHMvanMtbnVtYmVyLWZvcm1hdC50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLXBsdXJhbC1ydWxlcy50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLXJlbGF0aXZlLXRpbWUtZm9ybWF0LnRxIiwKLSAgICAgICAgICAic3JjL29iamVjdHMvanMtc2VnbWVudC1pdGVyYXRvci50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLXNlZ21lbnRlci50cSIsCi0gICAgICAgICAgInNyYy9vYmplY3RzL2pzLXNlZ21lbnRzLnRxIiwKLSAgICAgICAgXQotICAgICAgfV0KLSAgICBdLAotICB9LAotICAnaW5jbHVkZXMnOiBbJ3Rvb2xjaGFpbi5neXBpJywgJ2ZlYXR1cmVzLmd5cGknXSwKLSAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKLSAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbJy91dGYtOCddCi0gICAgICB9Ci0gICAgfSwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2Zha2VfdG9ycXVlX291dHB1dCcsCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnbm8tb3AnLAotICAgICAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBpZiB3ZSBwdXQgdGhlc2Ugb3V0cHV0cyB1bmRlciB0YXJnZXQgcnVuX3RvcnF1ZSwgdGhleQotICAgICAgICAgICMgd2lsbCBiZSByZWJ1aWx0IHVuY29uZGl0aW9uYWxseSBldmVuIGlmIHRoZWlyIHRlbXBsYXRlIGZpbGVzIGFyZSBub3QKLSAgICAgICAgICAjIG1vZGlmaWVkLiBUaGlzIGNvdWxkIGJlIGEgYnVnIGluIG91ciBneXAgcnVubmVyLgotICAgICAgICAgICMgQXMgYSBzb2x1dGlvbiwgd2UgcHV0IHRoZSBvdXRwdXRzIGhlcmUgaW4gaXRzIG93biB0YXJnZXQgc28gdGhhdCBuaW5qYQotICAgICAgICAgICMgd2lsbCBrbm93IHRoYXQgc29tZSB0YXJnZXQgZG9lcyBwcm92aWRlIHRoZXNlIGdlbmVyYXRlZCBmaWxlcyBhbmQgbmluamEKLSAgICAgICAgICAjIGRvZXMgbm90IHJlYnVpbGQgdGhlbSBhbGwgdGhlIHRpbWUuCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvYml0LWZpZWxkcy5oJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9idWlsdGluLWRlZmluaXRpb25zLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ludGVyZmFjZS1kZXNjcmlwdG9ycy5pbmMnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ZhY3RvcnkuY2MnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ZhY3RvcnkuaW5jJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9maWVsZC1vZmZzZXRzLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2NsYXNzLXZlcmlmaWVycy5jYycsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvY2xhc3MtdmVyaWZpZXJzLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2VudW0tdmVyaWZpZXJzLmNjJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9vYmplY3RzLXByaW50ZXIuY2MnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL29iamVjdHMtYm9keS1kZXNjcmlwdG9ycy1pbmwuaW5jJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9jbGFzcy1kZWZpbml0aW9ucy5jYycsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvY2xhc3MtZGVmaW5pdGlvbnMtaW5sLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2NsYXNzLWRlZmluaXRpb25zLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2NsYXNzLWRlYnVnLXJlYWRlcnMuY2MnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2NsYXNzLWRlYnVnLXJlYWRlcnMuaCcsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvZXhwb3J0ZWQtbWFjcm9zLWFzc2VtYmxlci5jYycsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvZXhwb3J0ZWQtbWFjcm9zLWFzc2VtYmxlci5oJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9jc2EtdHlwZXMuaCcsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvaW5zdGFuY2UtdHlwZXMuaCcsCi0gICAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvcnVudGltZS1tYWNyb3MuY2MnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL3J1bnRpbWUtbWFjcm9zLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ludGVybmFsLWNsYXNzLWRlZmluaXRpb25zLmgnLAotICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ludGVybmFsLWNsYXNzLWRlZmluaXRpb25zLWlubC5oJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9leHBvcnRlZC1jbGFzcy1kZWZpbml0aW9ucy5oJywKLSAgICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9leHBvcnRlZC1jbGFzcy1kZWZpbml0aW9ucy1pbmwuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5wdXRzJzogW10sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICMgV2luZG93cyBneXAgcnVubmVyIGRvZXMgbm90IGxpa2UgZW1wdHkgYWN0aW9ucy4KLSAgICAgICAgICAgICdlY2hvJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdydW5fdG9ycXVlJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAnZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnZGlyZWN0X2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnZmFrZV90b3JxdWVfb3V0cHV0JywKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdydW5fdG9ycXVlX2FjdGlvbicsCi0gICAgICAgICAgJ2lucHV0cyc6IFsgICMgT3JkZXIgbWF0dGVycy4KLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS88KEVYRUNVVEFCTEVfUFJFRklYKXRvcnF1ZTwoaG9zdF9leGVjdXRhYmxlX3N1ZmZpeCknLAotICAgICAgICAgICAgJzxAKHRvcnF1ZV9maWxlc192OF9yb290X3JlbGF0aXZlKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8QCh0b3JxdWVfb3V0cHV0cyknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnLW8nLCAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQnLAotICAgICAgICAgICAgJy12OC1yb290JywgJzwoVjhfUk9PVCknCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfSwgICMgcnVuX3RvcnF1ZQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9tYXliZV9pY3UnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfZW5hYmxlX2kxOG5fc3VwcG9ydCcsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoaWN1X2d5cF9wYXRoKTppY3VpMThuJywKLSAgICAgICAgICAgICc8KGljdV9neXBfcGF0aCk6aWN1dWMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnOiBbCi0gICAgICAgICAgICAnPChpY3VfZ3lwX3BhdGgpOmljdWkxOG4nLAotICAgICAgICAgICAgJzwoaWN1X2d5cF9wYXRoKTppY3V1YycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sICAjIHY4X21heWJlX2ljdQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd0b3JxdWVfZ2VuZXJhdGVkX2luaXRpYWxpemVycycsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdoYXJkX2RlcGVuZGVuY3knOiAxLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFs0MjY3LCA0MzEyLCA0MzUxLCA0MzU1LCA0ODAwLCA0ODM4LCA0NzE1LCA0MzA5XSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0I3RhcmdldCcsCi0gICAgICAgICdydW5fdG9ycXVlI3RhcmdldCcsCi0gICAgICAgICd2OF9tYXliZV9pY3UnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpL3RvcnF1ZS1nZW5lcmF0ZWQvY3NhLXR5cGVzLmgnLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9lbnVtLXZlcmlmaWVycy5jYycsCi0gICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2V4cG9ydGVkLW1hY3Jvcy1hc3NlbWJsZXIuY2MnLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9leHBvcnRlZC1tYWNyb3MtYXNzZW1ibGVyLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy90b3JxdWUvcnVudGltZS1zdXBwb3J0LmgnLAotICAgICAgICAgICc8QCh0b3JxdWVfb3V0cHV0cyknLAotICAgICAgICBdLAotICAgICAgfQotICAgIH0sICAjIHRvcnF1ZV9nZW5lcmF0ZWRfaW5pdGlhbGl6ZXJzCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3RvcnF1ZV9nZW5lcmF0ZWRfZGVmaW5pdGlvbnMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgJ3J1bl90b3JxdWUjdGFyZ2V0JywKLSAgICAgICAgJ3Y4X21heWJlX2ljdScsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9jbGFzcy12ZXJpZmllcnMuY2MnLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9jbGFzcy12ZXJpZmllcnMuaCcsCi0gICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2ZhY3RvcnkuY2MnLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9vYmplY3RzLXByaW50ZXIuY2MnLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCkvdG9ycXVlLWdlbmVyYXRlZC9ydW50aW1lLW1hY3Jvcy5jYycsCi0gICAgICAgIF0sCi0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sICAjIHRvcnF1ZV9nZW5lcmF0ZWRfZGVmaW5pdGlvbnMKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfYnl0ZWNvZGVfYnVpbHRpbnNfbGlzdCcsCi0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdoYXJkX2RlcGVuZGVuY3knOiAxLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICc8KGdlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3Rfb3V0cHV0KScsCi0gICAgICAgIF0sCi0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoZ2VuZXJhdGVfYnl0ZWNvZGVfb3V0cHV0X3Jvb3QpJywKLSAgICAgICAgICAnPCh0b3JxdWVfb3V0cHV0X3Jvb3QpJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0X2FjdGlvbicsCi0gICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS88KEVYRUNVVEFCTEVfUFJFRklYKWJ5dGVjb2RlX2J1aWx0aW5zX2xpc3RfZ2VuZXJhdG9yPChob3N0X2V4ZWN1dGFibGVfc3VmZml4KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KGdlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3Rfb3V0cHV0KScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbjInLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvdG9vbHMvcnVuLnB5JywKLSAgICAgICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnPEAoX291dHB1dHMpJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9LCAgIyBnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0I3RhcmdldAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9pbml0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgJ3J1bl90b3JxdWUjdGFyZ2V0JywKLSAgICAgICAgJ3Y4X2luaXRpYWxpemVycycsCi0gICAgICAgICd2OF9tYXliZV9pY3UnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAjIyMgZ2Ntb2xlKGFsbCkgIyMjCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9pbml0L3NldHVwLWlzb2xhdGUtZnVsbC5jYycsCi0KLSAgICAgICAgIyAnPChnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0X291dHB1dCknLAotICAgICAgXSwKLSAgICB9LCAgIyB2OF9pbml0Ci0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Y4X2luaXRpYWxpemVycycsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAndG9ycXVlX2dlbmVyYXRlZF9pbml0aWFsaXplcnMnLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCknLAotICAgICAgICAnPChnZW5lcmF0ZV9ieXRlY29kZV9vdXRwdXRfcm9vdCknLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2luaXRpYWxpemVycy4qP3NvdXJjZXMgPSAiKScsCi0KLSAgICAgICAgJzxAKHRvcnF1ZV9vdXRwdXRzKScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Ing4NiInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYnVpbHRpbnMvaWEzMi9idWlsdGlucy1pYTMyLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYnVpbHRpbnMveDY0L2J1aWx0aW5zLXg2NC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJhcm0iJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2J1aWx0aW5zL2FybS9idWlsdGlucy1hcm0uY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2J1aWx0aW5zL2FybTY0L2J1aWx0aW5zLWFybTY0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09Im1pcHMiIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwc2VsIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9idWlsdGlucy9taXBzL2J1aWx0aW5zLW1pcHMuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ibWlwczY0IiBvciB2OF90YXJnZXRfYXJjaD09Im1pcHM2NGVsIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9idWlsdGlucy9taXBzNjQvYnVpbHRpbnMtbWlwczY0LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09InBwYyInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYnVpbHRpbnMvcHBjL2J1aWx0aW5zLXBwYy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJwcGM2NCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYnVpbHRpbnMvcHBjL2J1aWx0aW5zLXBwYy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJzMzkweCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYnVpbHRpbnMvczM5MC9idWlsdGlucy1zMzkwLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF9lbmFibGVfaTE4bl9zdXBwb3J0PT0xJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnPChpY3VfZ3lwX3BhdGgpOmljdWkxOG4nLAotICAgICAgICAgICAgJzwoaWN1X2d5cF9wYXRoKTppY3V1YycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2J1aWx0aW5zL2J1aWx0aW5zLWludGwtZ2VuLmNjJywKLSAgICAgICAgICAgXSwKLSAgICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnbXN2c19wcmVjb21waWxlZF9oZWFkZXInOiAnPChWOF9ST09UKS8uLi8uLi90b29scy9tc3ZzL3BjaC92OF9wY2guaCcsCi0gICAgICAgICAgJ21zdnNfcHJlY29tcGlsZWRfc291cmNlJzogJzwoVjhfUk9PVCkvLi4vLi4vdG9vbHMvbXN2cy9wY2gvdjhfcGNoLmNjJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KF9tc3ZzX3ByZWNvbXBpbGVkX2hlYWRlciknLAotICAgICAgICAgICAgJzwoX21zdnNfcHJlY29tcGlsZWRfc291cmNlKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sICAjIHY4X2luaXRpYWxpemVycwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9zbmFwc2hvdCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAndG9vbHNldHMnOiBbJ3RhcmdldCddLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAnbXN2c19lbmFibGVfbWFybWFzbSc6IDEsCi0gICAgICAgICAgICB9XQotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0I3RhcmdldCcsCi0gICAgICAgICAgICAncnVuX3RvcnF1ZSN0YXJnZXQnLAotICAgICAgICAgICAgJ21rc25hcHNob3QjaG9zdCcsCi0gICAgICAgICAgICAndjhfbWF5YmVfaWN1JywKLSAgICAgICAgICAgICMgW0dZUF0gYWRkZWQgZXhwbGljaXRseSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGZyb20gdGhlIG90aGVyIGRlcHMKLSAgICAgICAgICAgICd2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXInLAotICAgICAgICAgICAgJ3Y4X2NvbXBpbGVyX2Zvcl9ta3NuYXBzaG90JywKLSAgICAgICAgICAgICd2OF9pbml0aWFsaXplcnMnLAotICAgICAgICAgICAgJ3Y4X2xpYnBsYXRmb3JtJywKLSAgICAgICAgICBdCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgICAgICdydW5fdG9ycXVlI3RhcmdldCcsCi0gICAgICAgICAgICAnbWtzbmFwc2hvdCcsCi0gICAgICAgICAgICAndjhfbWF5YmVfaWN1JywKLSAgICAgICAgICAgICMgW0dZUF0gYWRkZWQgZXhwbGljaXRseSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGZyb20gdGhlIG90aGVyIGRlcHMKLSAgICAgICAgICAgICd2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXInLAotICAgICAgICAgICAgJ3Y4X2NvbXBpbGVyX2Zvcl9ta3NuYXBzaG90JywKLSAgICAgICAgICAgICd2OF9pbml0aWFsaXplcnMnLAotICAgICAgICAgICAgJ3Y4X2xpYnBsYXRmb3JtJywKLSAgICAgICAgICBdCi0gICAgICAgIH1dLAotCi0gICAgICAgIFsnY29iYWx0X3Y4X2VtaXRfYnVpbHRpbnNfYXNfaW5saW5lX2FzbT09MScsIHsKLSAgICAgICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnY29udmVydF9hc21fdG9faW5saW5lJywKLSAgICAgICAgICAgICAnaW5wdXRzJzogWyc8KElOVEVSTUVESUFURV9ESVIpL2VtYmVkZGVkLlMnXSwKLSAgICAgICAgICAgICAnb3V0cHV0cyc6IFsnPChJTlRFUk1FRElBVEVfRElSKS9lbWJlZGRlZC5jYyddLAotICAgICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAgICAncHl0aG9uMicsCi0gICAgICAgICAgICAgICAndG9vbHMvc25hcHNob3QvYXNtX3RvX2lubGluZV9hc20ucHknLAotICAgICAgICAgICAgICAgJz5AKF9pbnB1dHMpJywKLSAgICAgICAgICAgICAgICc+QChfb3V0cHV0cyknLAotICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbJzwoSU5URVJNRURJQVRFX0RJUikvZW1iZWRkZWQuY2MnXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICdzb3VyY2VzJzogWyc8KElOVEVSTUVESUFURV9ESVIpL2VtYmVkZGVkLlMnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9pbml0L3NldHVwLWlzb2xhdGUtZGVzZXJpYWxpemUuY2MnLAotICAgICAgICAnPChJTlRFUk1FRElBVEVfRElSKS9zbmFwc2hvdC5jYycsCi0gICAgICBdLAotICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAjIFY4IDcuNCBvdmVyIG1hY09TMTAuMTEgY29tcGF0aWJpbGl0eQotICAgICAgICAjIFJlZnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzI2Njg1Ci0gICAgICAgICdHQ0NfR0VORVJBVEVfREVCVUdHSU5HX1NZTUJPTFMnOiAnTk8nLAotICAgICAgfSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ3J1bl9ta3NuYXBzaG90JywKLSAgICAgICAgICAnbWVzc2FnZSc6ICdnZW5lcmF0aW5nOiA+QChfb3V0cHV0cyknLAotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsKLSAgICAgICAgICAgICAgJy0tdHVyYm9faW5zdHJ1Y3Rpb25fc2NoZWR1bGluZycsCi0gICAgICAgICAgICAgICctLW5vLXBhcnRpYWwtY29uc3RhbnQtcG9vbCcsCi0gICAgICAgICAgICAgICMgSW4gY3Jvc3MgYnVpbGRzLCB0aGUgc25hcHNob3QgbWF5IGJlIGdlbmVyYXRlZCBmb3IgYm90aCB0aGUgaG9zdCBhbmQKLSAgICAgICAgICAgICAgIyB0YXJnZXQgdG9vbGNoYWlucy4gIFRoZSBzYW1lIGhvc3QgYmluYXJ5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgYm90aCwgc28KLSAgICAgICAgICAgICAgIyBta3NuYXBzaG90IG5lZWRzIHRvIGtub3cgd2hpY2ggdGFyZ2V0IE9TIHRvIHVzZSBhdCBydW50aW1lLiAgSXQncyB3ZWlyZCwKLSAgICAgICAgICAgICAgIyBidXQgdGhlIHRhcmdldCBPUyBpcyByZWFsbHkgPChPUykuCi0gICAgICAgICAgICAgICctLXRhcmdldF9vcz08KE9TKScsCi0gICAgICAgICAgICAgICctLXRhcmdldF9hcmNoPTwodjhfdGFyZ2V0X2FyY2gpJywKLSAgICAgICAgICAgICAgJy0tc3RhcnR1cF9zcmMnLCAnPChJTlRFUk1FRElBVEVfRElSKS9zbmFwc2hvdC5jYycsCi0gICAgICAgICAgICAgICctLWVtYmVkZGVkX3ZhcmlhbnQnLCAnRGVmYXVsdCcsCi0gICAgICAgICAgICAgICctLWVtYmVkZGVkX3NyYycsICc8KElOVEVSTUVESUFURV9ESVIpL2VtYmVkZGVkLlMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnPChta3NuYXBzaG90X2V4ZWMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvc25hcHNob3QuY2MnLAotICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvZW1iZWRkZWQuUycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL3NuYXBzaG90LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWyd2OF9yYW5kb21fc2VlZCcsIHsKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnLS1yYW5kb20tc2VlZCcsICc8KHY4X3JhbmRvbV9zZWVkKSddLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3Y4X29zX3BhZ2Vfc2l6ZScsIHsKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnLS12OF9vc19wYWdlX3NpemUnLCAnPCh2OF9vc19wYWdlX3NpemUpJ10sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndjhfZW1iZWRfc2NyaXB0ICE9ICIiJywgewotICAgICAgICAgICAgICAnaW5wdXRzJzogWyc8KHY4X2VtYmVkX3NjcmlwdCknXSwKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnPCh2OF9lbWJlZF9zY3JpcHQpJ10sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsndjhfZW5hYmxlX3NuYXBzaG90X2NvZGVfY29tbWVudHMnLCB7Ci0gICAgICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgJ21rc25hcHNob3RfZmxhZ3MnOiBbJy0tY29kZS1jb21tZW50cyddLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3Y4X2VuYWJsZV9zbmFwc2hvdF9uYXRpdmVfY29kZV9jb3VudGVycycsIHsKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnbWtzbmFwc2hvdF9mbGFncyc6IFsnLS1uYXRpdmUtY29kZS1jb3VudGVycyddLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgIyAtLW5hdGl2ZS1jb2RlLWNvdW50ZXJzIGlzIHRoZSBkZWZhdWx0IGluIGRlYnVnIG1vZGUgc28gbWFrZSBzdXJlIHdlIGNhbgotICAgICAgICAgICAgICAgIyB1bnNldCBpdC4KLSAgICAgICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgICdta3NuYXBzaG90X2ZsYWdzJzogWyctLW5vLW5hdGl2ZS1jb2RlLWNvdW50ZXJzJ10sCi0gICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICc+QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnPkAobWtzbmFwc2hvdF9mbGFncyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH0sICAjIHY4X3NuYXBzaG90Ci0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Y4X3ZlcnNpb24nLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlL3Y4LXZhbHVlLXNlcmlhbGl6ZXItdmVyc2lvbi5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlL3Y4LXZlcnNpb24tc3RyaW5nLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvdjgtdmVyc2lvbi5oJywKLSAgICAgICAgXSwKLSAgICAgIH0sCi0gICAgfSwgICMgdjhfdmVyc2lvbgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9oZWFkZXJzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAndjhfdmVyc2lvbicsCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvdjgtY3BwZ2MuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZS92OC1mYXN0LWFwaS1jYWxscy5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlL3Y4LWludGVybmFsLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvdjguaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZS92OGNvbmZpZy5oJywKLQotICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBoZWFkZXJzIGNhbm5vdCBiZSBwbGF0Zm9ybS1zcGVjaWZpYy4gVGhlIGluY2x1ZGUgdmFsaWRhdGlvbgotICAgICAgICAgICMgb2YgYGduIGdlbiAkZGlyIC0tY2hlY2tgIHJlcXVpcmVzIGFsbCBoZWFkZXIgZmlsZXMgdG8gYmUgYXZhaWxhYmxlIG9uIGFsbAotICAgICAgICAgICMgcGxhdGZvcm1zLgotICAgICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvdjgtd2FzbS10cmFwLWhhbmRsZXItcG9zaXguaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZS92OC13YXNtLXRyYXAtaGFuZGxlci13aW4uaCcsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sICAjIHY4X2hlYWRlcnMKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfc2hhcmVkX2ludGVybmFsX2hlYWRlcnMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd2OF9oZWFkZXJzJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2NvbW1vbi9nbG9iYWxzLmgnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LCAgIyB2OF9zaGFyZWRfaW50ZXJuYWxfaGVhZGVycwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9jb21waWxlcl9vcHQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgJ3J1bl90b3JxdWUjdGFyZ2V0JywKLSAgICAgICAgJ3Y4X21heWJlX2ljdScsCi0gICAgICAgICd2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXInLAotICAgICAgXSwKLSAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFs0MjY3LCA0MzEyLCA0MzUxLCA0MzU1LCA0ODAwLCA0ODM4LCA0NzE1XSwKLSAgICAgICdzb3VyY2VzJzogWyc8QCh2OF9jb21waWxlcl9zb3VyY2VzKSddLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ21zdnNfcHJlY29tcGlsZWRfaGVhZGVyJzogJzwoVjhfUk9PVCkvLi4vLi4vdG9vbHMvbXN2cy9wY2gvdjhfcGNoLmgnLAotICAgICAgICAgICdtc3ZzX3ByZWNvbXBpbGVkX3NvdXJjZSc6ICc8KFY4X1JPT1QpLy4uLy4uL3Rvb2xzL21zdnMvcGNoL3Y4X3BjaC5jYycsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChfbXN2c19wcmVjb21waWxlZF9oZWFkZXIpJywKLSAgICAgICAgICAgICc8KF9tc3ZzX3ByZWNvbXBpbGVkX3NvdXJjZSknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LCAgIyB2OF9jb21waWxlcl9vcHQKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfY29tcGlsZXInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgJ3J1bl90b3JxdWUjdGFyZ2V0JywKLSAgICAgICAgJ3Y4X21heWJlX2ljdScsCi0gICAgICAgICd2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXInLAotICAgICAgXSwKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQyNjcsIDQzMTIsIDQzNTEsIDQzNTUsIDQ4MDAsIDQ4MzgsIDQ3MTUsIDQzMDldLAotICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsKLSAgICAgICAgICAgICcvRUhzYycsCi0gICAgICAgICAgICAnL3N0ZDpjKysxNCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsnPEAodjhfY29tcGlsZXJfc291cmNlcyknXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAgICdtc3ZzX3ByZWNvbXBpbGVkX2hlYWRlcic6ICc8KFY4X1JPT1QpLy4uLy4uL3Rvb2xzL21zdnMvcGNoL3Y4X3BjaC5oJywKLSAgICAgICAgICAnbXN2c19wcmVjb21waWxlZF9zb3VyY2UnOiAnPChWOF9ST09UKS8uLi8uLi90b29scy9tc3ZzL3BjaC92OF9wY2guY2MnLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoX21zdnNfcHJlY29tcGlsZWRfaGVhZGVyKScsCi0gICAgICAgICAgICAnPChfbXN2c19wcmVjb21waWxlZF9zb3VyY2UpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwgICMgdjhfY29tcGlsZXIKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfY29tcGlsZXJfZm9yX21rc25hcHNob3QnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnaGFyZF9kZXBlbmRlbmN5JzogMSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdnZW5lcmF0ZV9ieXRlY29kZV9idWlsdGluc19saXN0I3RhcmdldCcsCi0gICAgICAgICdydW5fdG9ycXVlI3RhcmdldCcsCi0gICAgICAgICd2OF9tYXliZV9pY3UnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaXNfY29tcG9uZW50X2J1aWxkIGFuZCBub3Qgdjhfb3B0aW1pemVkX2RlYnVnIGFuZCB2OF9lbmFibGVfZmFzdF9ta3NuYXBzaG90JywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAndjhfY29tcGlsZXJfb3B0JywKLSAgICAgICAgICBdLAotICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAgICAgJ3Y4X2NvbXBpbGVyX29wdCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICd2OF9jb21waWxlcicsCi0gICAgICAgICAgIF0sCi0gICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwotICAgICAgICAgICAgICd2OF9jb21waWxlcicsCi0gICAgICAgICAgIF0sCi0gICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwgICMgdjhfY29tcGlsZXJfZm9yX21rc25hcHNob3QKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfYmFzZV93aXRob3V0X2NvbXBpbGVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9pbnNwZWN0b3IvaW5zcGVjdG9yLmd5cDpwcm90b2NvbF9nZW5lcmF0ZWRfc291cmNlcyN0YXJnZXQnLAotICAgICAgICAjIENvZGUgZ2VuZXJhdG9ycyB0aGF0IG9ubHkgbmVlZCB0byBiZSBidWlsZCBmb3IgdGhlIGhvc3QuCi0gICAgICAgICdjcHBnY19iYXNlJywKLSAgICAgICAgJ3RvcnF1ZV9nZW5lcmF0ZWRfZGVmaW5pdGlvbnMnLAotICAgICAgICAndjhfaGVhZGVycycsCi0gICAgICAgICd2OF9saWJiYXNlJywKLSAgICAgICAgJ3Y4X2xpYnNhbXBsZXInLAotICAgICAgICAndjhfc2hhcmVkX2ludGVybmFsX2hlYWRlcnMnLAotICAgICAgICAndjhfdmVyc2lvbicsCi0gICAgICAgICMgQlVJTEQuZ24gcHVibGljX2RlcHMKLSAgICAgICAgJ2dlbmVyYXRlX2J5dGVjb2RlX2J1aWx0aW5zX2xpc3QjdGFyZ2V0JywKLSAgICAgICAgJ3J1bl90b3JxdWUjdGFyZ2V0JywKLSAgICAgICAgJ3Y4X2NwcGdjX3NoYXJlZCcsCi0gICAgICAgICd2OF9tYXliZV9pY3UnLAotICAgICAgICAndjhfemxpYicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVzJzogWydzcmMvaW5zcGVjdG9yL2luc3BlY3Rvci5neXBpJ10sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnPChnZW5lcmF0ZV9ieXRlY29kZV9vdXRwdXRfcm9vdCknLAotICAgICAgICAgICc8KHRvcnF1ZV9vdXRwdXRfcm9vdCknLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdjZmxhZ3NfY2MnOiBbJy1mbm8tZXhjZXB0aW9ucyddLAotICAgICAgJ2NmbGFnc19jY19ob3N0JzogWyctZm5vLWV4Y2VwdGlvbnMnXSwKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQyNjcsIDQzMTIsIDQzNTEsIDQzNTUsIDQ4MDAsIDQ4MzgsIDQ3MTUsIDQzMDldLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICMgIi8vYmFzZS90cmFjZV9ldmVudC9jb21tb24vdHJhY2VfZXZlbnRfY29tbW9uLmgiLAotCi0gICAgICAgICMjIyBnY21vbGUoYWxsKSAjIyMKLSAgICAgICAgJzwoZ2VuZXJhdGVfYnl0ZWNvZGVfYnVpbHRpbnNfbGlzdF9vdXRwdXQpJywKLQotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2Jhc2Vfd2l0aG91dF9jb21waWxlci4qP3NvdXJjZXMgPSAiKScsCi0gICAgICAgICdzcmMvd2FzbS9iYXNlbGluZS9saWZ0b2ZmLWNvbXBpbGVyLXN0YXJib2FyZC5jYycsCi0KLSAgICAgICAgJzxAKGluc3BlY3Rvcl9hbGxfc291cmNlcyknLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3Y4X2VuYWJsZV90aGlyZF9wYXJ0eV9oZWFwPT0xJywgewotICAgICAgICAgICMgVE9ETyh0YXJnb3MpOiBhZGQgdmFsdWVzIGZyb20gdjhfdGhpcmRfcGFydHlfaGVhcF9maWxlcyB0byBzb3VyY2VzCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL3RoaXJkLXBhcnR5L2hlYXAtYXBpLXN0dWIuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfY29udHJvbF9mbG93X2ludGVncml0eT09MScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9leGVjdXRpb24vYXJtNjQvcG9pbnRlci1hdXRoZW50aWNhdGlvbi1hcm02NC5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvZXhlY3V0aW9uL3BvaW50ZXItYXV0aGVudGljYXRpb24tZHVtbXkuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWyAgIyMjIGdjbW9sZShhcmNoOmlhMzIpICMjIwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuR04tc2NyYXBlciAiPChWOF9ST09UKS9CVUlMRC5nbiIgICJcXCJ2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXIuKj92OF9jdXJyZW50X2NwdSA9PSBcXCJ4ODYuKj9zb3VyY2VzIFwrPSAiKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWyAgIyMjIGdjbW9sZShhcmNoOng2NCkgIyMjCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2Jhc2Vfd2l0aG91dF9jb21waWxlci4qP3Y4X2N1cnJlbnRfY3B1ID09IFxcIng2NC4qP3NvdXJjZXMgXCs9ICIpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgIyBpT1MgWGNvZGUgc2ltdWxhdG9yIGJ1aWxkcyBydW4gb24gYW4geDY0IHRhcmdldC4gaU9TIGFuZCBtYWNPUyBhcmUgYm90aAotICAgICAgICAgICAgIyBiYXNlZCBvbiBEYXJ3aW4gYW5kIHRodXMgUE9TSVgtY29tcGxpYW50IHRvIGEgc2ltaWxhciBkZWdyZWUuCi0gICAgICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0ibWFjIiBvciBPUz09ImlvcyIgb3IgT1M9PSJmcmVlYnNkIicsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuR04tc2NyYXBlciAiPChWOF9ST09UKS9CVUlMRC5nbiIgICJcXCJ2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXIuKj9pc19saW51eC4qP3NvdXJjZXMgXCs9ICIpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidjhfYmFzZV93aXRob3V0X2NvbXBpbGVyLio/aXNfd2luLio/c291cmNlcyBcKz0gIiknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJhcm0iJywgewotICAgICAgICAgICdzb3VyY2VzJzogWyAgIyMjIGdjbW9sZShhcmNoOmFybSkgIyMjCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2Jhc2Vfd2l0aG91dF9jb21waWxlci4qP3Y4X2N1cnJlbnRfY3B1ID09IFxcImFybVxcIi4qP3NvdXJjZXMgXCs9ICIpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09ImFybTY0IicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsgICMjIyBnY21vbGUoYXJjaDphcm02NCkgIyMjCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2Jhc2Vfd2l0aG91dF9jb21waWxlci4qP3Y4X2N1cnJlbnRfY3B1ID09IFxcImFybTY0XFwiLio/c291cmNlcyBcKz0gIiknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgIjwoVjhfUk9PVCkvc3JjL2RpYWdub3N0aWNzL3Vud2luZGluZy1pbmZvLXdpbjY0LmNjIiwKLSAgICAgICAgICAgICAgICAiPChWOF9ST09UKS9zcmMvZGlhZ25vc3RpY3MvdW53aW5kaW5nLWluZm8td2luNjQuaCIKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0ibWlwcyIgb3IgdjhfdGFyZ2V0X2FyY2g9PSJtaXBzZWwiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWyAgIyMjIGdjbW9sZShhcmNoOm1pcHNlbCkgIyMjCi0gICAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2Jhc2Vfd2l0aG91dF9jb21waWxlci4qP3Y4X2N1cnJlbnRfY3B1ID09IFxcIm1pcHNcXCIuKj9zb3VyY2VzIFwrPSAiKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJtaXBzNjQiIG9yIHY4X3RhcmdldF9hcmNoPT0ibWlwczY0ZWwiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWyAgIyMjIGdjbW9sZShhcmNoOm1pcHM2NGVsKSAjIyMKLSAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidjhfYmFzZV93aXRob3V0X2NvbXBpbGVyLio/djhfY3VycmVudF9jcHUgPT0gXFwibWlwczY0XFwiLio/c291cmNlcyBcKz0gIiknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X3RhcmdldF9hcmNoPT0icHBjIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsgICMjIyBnY21vbGUoYXJjaDpwcGMpICMjIwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuR04tc2NyYXBlciAiPChWOF9ST09UKS9CVUlMRC5nbiIgICJcXCJ2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXIuKj92OF9jdXJyZW50X2NwdSA9PSBcXCJwcGNcXCIuKj9zb3VyY2VzIFwrPSAiKScsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJwcGM2NCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbICAjIyMgZ2Ntb2xlKGFyY2g6cHBjNjQpICMjIwotICAgICAgICAgICAgJzwhQHB5bW9kX2RvX21haW4odGhpcmRfcGFydHkudjguZ3lwZmlsZXMuR04tc2NyYXBlciAiPChWOF9ST09UKS9CVUlMRC5nbiIgICJcXCJ2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXIuKj92OF9jdXJyZW50X2NwdSA9PSBcXCJwcGM2NFxcIi4qP3NvdXJjZXMgXCs9ICIpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyd2OF90YXJnZXRfYXJjaD09InMzOTB4IicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsgICMjIyBnY21vbGUoYXJjaDpzMzkwKSAjIyMKLSAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidjhfYmFzZV93aXRob3V0X2NvbXBpbGVyLio/djhfY3VycmVudF9jcHUgPT0gXFwiczM5MFxcIi4qP3NvdXJjZXMgXCs9ICIpJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ21zdnNfcHJlY29tcGlsZWRfaGVhZGVyJzogJzwoVjhfUk9PVCkvLi4vLi4vdG9vbHMvbXN2cy9wY2gvdjhfcGNoLmgnLAotICAgICAgICAgICdtc3ZzX3ByZWNvbXBpbGVkX3NvdXJjZSc6ICc8KFY4X1JPT1QpLy4uLy4uL3Rvb2xzL21zdnMvcGNoL3Y4X3BjaC5jYycsCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChfbXN2c19wcmVjb21waWxlZF9oZWFkZXIpJywKLSAgICAgICAgICAgICc8KF9tc3ZzX3ByZWNvbXBpbGVkX3NvdXJjZSknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgIyBUaGlzIHdpbGwgcHJldmVudCBWOCdzIC5jYyBmaWxlcyBjb25mbGljdGluZyB3aXRoIHRoZSBpbnNwZWN0b3IncwotICAgICAgICAgICMgLmNwcCBmaWxlcyBpbiB0aGUgc2FtZSBzaGFyZC4KLSAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgICAnT2JqZWN0RmlsZSc6ICckKEludERpciklKEV4dGVuc2lvbilcXCcsCi0gICAgICAgICAgICB9LAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2lzX3N0YXJib2FyZCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsnc3JjL2Rlb3B0aW1pemVyL2Rlb3B0aW1pemVyLWNmaS1lbXB0eS5jYyddLAotICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IicsIHsKLSAgICAgICAgICAgICAgIyBpZiBfdG9vbHNldD0iaG9zdCIsIHdlIHVzZSB0aGUgbmF0aXZlIGhvc3QgYnVpbGQgd2hpY2ggZG9lcyBub3QKLSAgICAgICAgICAgICAgIyBpbnZvbHZlIFN0YXJib2FyZCBhdCBhbGwuCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnaG9zdF9vcz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJ3NyYy9kaWFnbm9zdGljcy91bndpbmRpbmctaW5mby13aW42NC5jYycsCi0gICAgICAgICAgICAgICAgICAgICdzcmMvZGlhZ25vc3RpY3MvdW53aW5kaW5nLWluZm8td2luNjQuaCcsCi0gICAgICAgICAgICAgICAgICAgICdzcmMvdHJhcC1oYW5kbGVyL2hhbmRsZXItaW5zaWRlLXdpbi5jYycsCi0gICAgICAgICAgICAgICAgICAgICdzcmMvdHJhcC1oYW5kbGVyL2hhbmRsZXItaW5zaWRlLXdpbi5oJywKLSAgICAgICAgICAgICAgICAgICAgJ3NyYy90cmFwLWhhbmRsZXIvaGFuZGxlci1vdXRzaWRlLXdpbi5jYycsCi0gICAgICAgICAgICAgICAgICAgICdzcmMvaGVhcC9iYXNlL2FzbS94NjQvcHVzaF9yZWdpc3RlcnNfbWFzbS5TJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsJ3NyYy9oZWFwL2Jhc2UvYXNtL3g2NC9wdXNoX3JlZ2lzdGVyc19hc20nLF0KLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydob3N0X29zPT0ibGludXgiIG9yIGhvc3Rfb3M9PSJtYWMiJywgewotICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgInNyYy90cmFwLWhhbmRsZXIvaGFuZGxlci1pbnNpZGUtcG9zaXguY2MiLAotICAgICAgICAgICAgICAgICAgICAgICAgInNyYy90cmFwLWhhbmRsZXIvaGFuZGxlci1pbnNpZGUtcG9zaXguaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3JjL3RyYXAtaGFuZGxlci9oYW5kbGVyLW91dHNpZGUtcG9zaXguY2MiLAotICAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgWydjb2JhbHRfY29tcGlsZWRfYnlfbXN2YycsIHsKLSAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAnc3JjL2hlYXAvYmFzZS9hc20veDY0L3B1c2hfcmVnaXN0ZXJzX21hc20uUycsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCdzcmMvaGVhcC9iYXNlL2FzbS94NjQvcHVzaF9yZWdpc3RlcnNfYXNtJyxdCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0JVSUxESU5HX1Y4X1NIQVJFRCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfZW5hYmxlX2kxOG5fc3VwcG9ydCcsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ3J1bl9nZW4tcmVnZXhwLXNwZWNpYWwtY2FzZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9zcmMvcmVnZXhwL3NwZWNpYWwtY2FzZS5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnaWN1X3VzZV9kYXRhX2ZpbGVfZmxhZycsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ0lDVV9VVElMX0RBVEFfSU1QTD1JQ1VfVVRJTF9EQVRBX0ZJTEUnXSwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsnSUNVX1VUSUxfREFUQV9JTVBMPUlDVV9VVElMX0RBVEFfU0hBUkVEJ10sCi0gICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ0lDVV9VVElMX0RBVEFfSU1QTD1JQ1VfVVRJTF9EQVRBX1NUQVRJQyddLAotICAgICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwoaWN1X2d5cF9wYXRoKTppY3VkYXRhI3RhcmdldCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7ICAjIHY4X2VuYWJsZV9pMThuX3N1cHBvcnQ9PTAKLSAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidjhfYmFzZV93aXRob3V0X2NvbXBpbGVyLio/djhfZW5hYmxlX2kxOG5fc3VwcG9ydC4qP3NvdXJjZXMgLT0gIiknLAotICAgICAgICAgICBdLAotICAgICAgICAgfV0sCi0gICAgICAgIFsndjhfcG9zdG1vcnRlbV9zdXBwb3J0JywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ3Bvc3Rtb3J0ZW0tbWV0YWRhdGEjdGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Y4X2VuYWJsZV90aGlyZF9wYXJ0eV9oZWFwJywgewotICAgICAgICAgICMgVE9ETyh0YXJnb3MpOiBhZGQgdmFsdWVzIGZyb20gdjhfdGhpcmRfcGFydHlfaGVhcF9saWJzIHRvIGxpbmtfc2V0dGluZ3MubGlicmFyaWVzCi0gICAgICAgIH1dLAotICAgICAgICAjIFBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgQ29tcGFyZS1BbmQtU3dhcCAoQ0FTKSBzdXBwb3J0IG5lZWQgdG8gbGluayBhdG9taWMgbGlicmFyeQotICAgICAgICAjIHRvIGltcGxlbWVudCBhdG9taWMgbWVtb3J5IGFjY2VzcwotICAgICAgICBbJ3Y4X2N1cnJlbnRfY3B1IGluIFsibWlwcyIsICJtaXBzZWwiLCAibWlwczY0IiwgIm1pcHM2NGVsIiwgInBwYyIsICJhcm0iXScsIHsKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbJy1sYXRvbWljJywgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwgICMgdjhfYmFzZV93aXRob3V0X2NvbXBpbGVyCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Y4X2Jhc2UnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd2OF9iYXNlX3dpdGhvdXRfY29tcGlsZXInLAotICAgICAgICAndjhfY29tcGlsZXInLAotICAgICAgXSwKLSAgICB9LCAgIyB2OF9iYXNlCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3RvcnF1ZV9iYXNlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidG9ycXVlX2Jhc2UuKj9zb3VyY2VzID0gIiknLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd2OF9zaGFyZWRfaW50ZXJuYWxfaGVhZGVycycsCi0gICAgICAgICd2OF9saWJiYXNlJywKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyEnOiBbCi0gICAgICAgICdfSEFTX0VYQ0VQVElPTlM9MCcsCi0gICAgICAgICdCVUlMRElOR19WOF9TSEFSRUQ9MScsCi0gICAgICBdLAotICAgICAgJ2NmbGFnc19jYyEnOiBbJy1mbm8tZXhjZXB0aW9ucyddLAotICAgICAgJ2NmbGFnc19jYyc6IFsnLWZleGNlcHRpb25zJ10sCi0gICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdHQ0NfRU5BQkxFX0NQUF9FWENFUFRJT05TJzogJ1lFUycsICAjIC1mZXhjZXB0aW9ucwotICAgICAgfSwKLSAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ3RydWUnLAotICAgICAgICAgICdFeGNlcHRpb25IYW5kbGluZyc6IDEsCi0gICAgICAgIH0sCi0gICAgICB9LAotICAgIH0sICAjIHRvcnF1ZV9iYXNlCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3RvcnF1ZV9sc19iYXNlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwidG9ycXVlX2xzX2Jhc2UuKj9zb3VyY2VzID0gIiknLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd0b3JxdWVfYmFzZScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMhJzogWwotICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLAotICAgICAgICAnQlVJTERJTkdfVjhfU0hBUkVEPTEnLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3NfY2MhJzogWyctZm5vLWV4Y2VwdGlvbnMnXSwKLSAgICAgICdjZmxhZ3NfY2MnOiBbJy1mZXhjZXB0aW9ucyddLAotICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAnR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyc6ICdZRVMnLCAgIyAtZmV4Y2VwdGlvbnMKLSAgICAgIH0sCi0gICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAxLAotICAgICAgICB9LAotICAgICAgfSwKLSAgICB9LCAgIyB0b3JxdWVfbHNfYmFzZQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9saWJiYXNlJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgIlxcInY4X2xpYmJhc2UuKj9zb3VyY2VzID0gIiknLAotICAgICAgXSwKLQotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3Y4X2hlYWRlcnMnLAotICAgICAgXSwKLSAgICAgICdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJzogWzQyNjcsIDQzMTIsIDQzNTEsIDQzNTUsIDQ4MDAsIDQ4MzgsIDQ3MTUsIDQzMDldLAotCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2lzX2NvbXBvbmVudF9idWlsZCcsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsiQlVJTERJTkdfVjhfQkFTRV9TSEFSRUQiXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaXNfcG9zaXggb3IgaXNfZnVjaHNpYScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TICE9ICJhaXgiIGFuZCBPUyAhPSAic29sYXJpcyInLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LXRpbWUuY2MnLAotICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LXRpbWUuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09ImxpbnV4IicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL2RlYnVnL3N0YWNrX3RyYWNlX3Bvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLWxpbnV4LmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1sZGwnLAotICAgICAgICAgICAgICAnLWxydCcKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJhaXgiJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAjIFVzZWQgdG8gZGlmZmVyZW50aWF0ZSBgQUlYYCBhbmQgYE9TNDAwYChJQk0gaSkuCi0gICAgICAgICAgICAnYWl4X3ZhcmlhbnRfbmFtZSc6ICc8ISh1bmFtZSAtcyknLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV9wb3NpeC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1haXguY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbICciPChhaXhfdmFyaWFudF9uYW1lKSI9PSJBSVgiJywgeyAjIEl0IGlzIGBBSVhgCi0gICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnLWxkbCcsCi0gICAgICAgICAgICAgICAgICAnLWxydCcKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnaXNfYW5kcm9pZCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmgnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tcG9zaXgtdGltZS5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IiBhbmQgaG9zdF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAgICAgJy1sZGwnLAotICAgICAgICAgICAgICAgICAgJy1scnQnCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV9wb3NpeC5jYycsCi0gICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tbGludXguY2MnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV9hbmRyb2lkLmNjJywKLSAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1saW51eC5jYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydpc19mdWNoc2lhJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2VfZnVjaHNpYS5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1mdWNoc2lhLmNjJywKLSAgICAgICAgICBdCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TID09ICJtYWMiIG9yIE9TID09ICJpb3MiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2VfcG9zaXguY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tbWFjb3MuY2MnLAotICAgICAgICAgIF0KLSAgICAgICAgfV0sCi0gICAgICAgIFsnaXNfd2luJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2Vfd2luLmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXdpbjMyLmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3dpbjMyLWhlYWRlcnMuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFtbJ3RhcmdldF9hcmNoID09ICJhcm02NCInLCB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsnX1dJTjMyX1dJTk5UPTB4MDYwMiddLCAjIEZvciBHZXRDdXJyZW50VGhyZWFkU3RhY2tMaW1pdHMgb24gV2luZG93cyBvbiBBcm0KLSAgICAgICAgICB9XV0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbJ19DUlRfUkFORF9TJ10sICMgZm9yIHJhbmRfcygpCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAgICdkYmdoZWxwLmxpYicsCi0gICAgICAgICAgICAgICAgICAnd2lubW0ubGliJywKLSAgICAgICAgICAgICAgICAgICd3czJfMzIubGliJwotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWyd0YXJnZXRfYXJjaCA9PSAibWlwcyIgb3IgT1MgPT0gIm1pcHM2NCInLCB7Ci0gICAgICAgICAgIyBoZXJlIGp1c3QgZm9yICdCVUlMRC5nbicgc3luYwotICAgICAgICAgICMgJ2RhdGEnOiBbCi0gICAgICAgICAgIyAgICc8KFY4X1JPT1QpL3Rvb2xzL21pcHNfdG9vbGNoYWluL3N5c3Jvb3QvdXNyL2xpYi8nLAotICAgICAgICAgICMgICAnPChWOF9ST09UKS90b29scy9taXBzX3Rvb2xjaGFpbi9zeXNyb290L3Vzci9saWIvJywKLSAgICAgICAgICAjIF0sCi0gICAgICAgIH1dLAotICAgICAgICAjIGVuZCBvZiBjb25kaXRpb25zIGZyb20gJ0JVSUxELmduJwotCi0gICAgICAgICMgTm9kZS5qcyB2YWxpZGF0ZWQKLSAgICAgICAgWydPUz09InNvbGFyaXMiJywgewotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1sbnNsJywKLSAgICAgICAgICAgICAgJy1scnQnLAotICAgICAgICAgICAgXQotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV9wb3NpeC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1zb2xhcmlzLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLQotICAgICAgICAjIFlNTVYgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICAgICAgWydPUz09InFueCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJob3N0IiBhbmQgaG9zdF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAgICAgJy1scnQnCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnLWxiYWNrdHJhY2UnCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV9wb3NpeC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5oJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LXRpbWUuaCcsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3FueC1tYXRoLmgnCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCIgYW5kIGhvc3Rfb3M9PSJsaW51eCInLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLWxpbnV4LmNjJwotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ190b29sc2V0PT0iaG9zdCIgYW5kIGhvc3Rfb3M9PSJtYWMiJywgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1tYWNvcy5jYycKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydfdG9vbHNldD09InRhcmdldCInLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXFueC5jYycKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgICBdLAotICAgICAgICBbJ09TPT0iZnJlZWJzZCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLUwvdXNyL2xvY2FsL2xpYiAtbGV4ZWNpbmZvJywKLSAgICAgICAgICAgIF0KLSAgICAgICAgICB9LAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2VfcG9zaXguY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tZnJlZWJzZC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5oJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LXRpbWUuaCcsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9Ci0gICAgICAgICBdLAotICAgICAgICBbJ09TPT0ib3BlbmJzZCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLUwvdXNyL2xvY2FsL2xpYiAtbGV4ZWNpbmZvJywKLSAgICAgICAgICAgIF0KLSAgICAgICAgICB9LAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2VfcG9zaXguY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tb3BlbmJzZC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5oJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLXBvc2l4LXRpbWUuaCcsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9Ci0gICAgICAgICBdLAotICAgICAgICBbJ09TPT0ibmV0YnNkIicsIHsKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctTC91c3IvcGtnL2xpYiAtV2wsLVIvdXNyL3BrZy9saWIgLWxleGVjaW5mbycsCi0gICAgICAgICAgICBdCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL2RlYnVnL3N0YWNrX3RyYWNlX3Bvc2l4LmNjJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3BsYXRmb3JtL3BsYXRmb3JtLW9wZW5ic2QuY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tcG9zaXguaCcsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmgnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tcG9zaXgtdGltZS5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfQotICAgICAgICAgXSwKLSAgICAgICAgWydpc19zdGFyYm9hcmQnLCB7Ci0gICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydfdG9vbHNldD09Imhvc3QiJywgewotICAgICAgICAgICAgICAjIGlmIF90b29sc2V0PSJob3N0Iiwgd2UgdXNlIHRoZSBuYXRpdmUgaG9zdCBidWlsZCB3aGljaCBkb2VzIG5vdAotICAgICAgICAgICAgICAjIGludm9sdmUgU3RhcmJvYXJkIGF0IGFsbC4KLSAgICAgICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnaG9zdF9vcz09ImxpbnV4IicsIHsKLSAgICAgICAgICAgICAgICAgICdsZGZsYWdzX2hvc3QnOiBbCi0gICAgICAgICAgICAgICAgICAgICctbGRsJywKLSAgICAgICAgICAgICAgICAgICAgJy1scnQnCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL2RlYnVnL3N0YWNrX3RyYWNlX3Bvc2l4LmNjJywKLSAgICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tbGludXguY2MnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5oJywKLSAgICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tcG9zaXguY2MnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmgnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmNjJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydob3N0X29zPT0id2luIicsIHsKLSAgICAgICAgICAgICAgICAgICMgTW9zdCBvZiB0aGUgZm9sbG93aW5nIGNvZGVzIGFyZSBjb3BpZWQgZnJvbSAnT1M9IndpbiInCi0gICAgICAgICAgICAgICAgICAjIHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJ19DUlRfUkFORF9TJyAgIyBmb3IgcmFuZF9zKCkKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgICAgICAgICAnZ3lwX2dlbmVyYXRvcnMnOiAnPCFweW1vZF9kb19tYWluKHN0YXJib2FyZC5idWlsZC5neXBfZnVuY3Rpb25zIGdldGVudiBHWVBfR0VORVJBVE9SUyknLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9kZWJ1Zy9zdGFja190cmFjZV93aW4uY2MnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS13aW4zMi5jYycsCi0gICAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL3dpbjMyLWhlYWRlcnMuaCcsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KScsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgJ21zdnNfZGlzYWJsZWRfd2FybmluZ3MnOiBbNDM1MSwgNDM1NSwgNDgwMF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydob3N0X29zID09ICJtYWMiJywgewotICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9iYXNlL2RlYnVnL3N0YWNrX3RyYWNlX3Bvc2l4LmNjJywKLSAgICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tbWFjb3MuY2MnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC5oJywKLSAgICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvcGxhdGZvcm0vcGxhdGZvcm0tcG9zaXguY2MnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmgnLAotICAgICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1wb3NpeC10aW1lLmNjJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICMgSWYgX3Rvb2xzZXQ9PSJ0YXJnZXQiLCBidWlsZCB3aXRoIHRhcmdldCBwbGF0Zm9ybSdzIFN0YXJib2FyZC4KLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2Jhc2UvZGVidWcvc3RhY2tfdHJhY2Vfc3RhcmJvYXJkLmNjJywKLSAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvYmFzZS9wbGF0Zm9ybS9wbGF0Zm9ybS1zdGFyYm9hcmQuY2MnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sICAjIHY4X2xpYmJhc2UKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfbGlicGxhdGZvcm0nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3Y4X2xpYmJhc2UnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChWOF9ST09UKS9iYXNlL3RyYWNlX2V2ZW50L2NvbW1vbi90cmFjZV9ldmVudF9jb21tb24uaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUvbGlicGxhdGZvcm0vbGlicGxhdGZvcm0tZXhwb3J0LmgnLAotICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlL2xpYnBsYXRmb3JtL2xpYnBsYXRmb3JtLmgnLAotICAgICAgICAnPChWOF9ST09UKS9pbmNsdWRlL2xpYnBsYXRmb3JtL3Y4LXRyYWNpbmcuaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS9kZWZhdWx0LWZvcmVncm91bmQtdGFzay1ydW5uZXIuY2MnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vZGVmYXVsdC1mb3JlZ3JvdW5kLXRhc2stcnVubmVyLmgnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vZGVmYXVsdC1qb2IuY2MnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vZGVmYXVsdC1qb2IuaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS9kZWZhdWx0LXBsYXRmb3JtLmNjJywKLSAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL2RlZmF1bHQtcGxhdGZvcm0uaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS9kZWZhdWx0LXdvcmtlci10aHJlYWRzLXRhc2stcnVubmVyLmNjJywKLSAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL2RlZmF1bHQtd29ya2VyLXRocmVhZHMtdGFzay1ydW5uZXIuaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS9kZWxheWVkLXRhc2stcXVldWUuY2MnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vZGVsYXllZC10YXNrLXF1ZXVlLmgnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vdGFzay1xdWV1ZS5jYycsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS90YXNrLXF1ZXVlLmgnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vdHJhY2luZy90cmFjZS1idWZmZXIuY2MnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vdHJhY2luZy90cmFjZS1idWZmZXIuaCcsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS90cmFjaW5nL3RyYWNlLWNvbmZpZy5jYycsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS90cmFjaW5nL3RyYWNlLW9iamVjdC5jYycsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS90cmFjaW5nL3RyYWNlLXdyaXRlci5jYycsCi0gICAgICAgICc8KFY4X1JPT1QpL3NyYy9saWJwbGF0Zm9ybS90cmFjaW5nL3RyYWNlLXdyaXRlci5oJywKLSAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL3RyYWNpbmcvdHJhY2luZy1jb250cm9sbGVyLmNjJywKLSAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL3dvcmtlci10aHJlYWQuY2MnLAotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vd29ya2VyLXRocmVhZC5oJywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKLSAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdkZWZpbmVzJzogWydVU0lOR19WOF9QTEFURk9STV9TSEFSRUQnXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZWZpbmVzJzogWydCVUlMRElOR19WOF9QTEFURk9STV9TSEFSRUQnXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndjhfdXNlX3BlcmZldHRvJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL3RyYWNpbmcvanNvbi10cmFjZS1ldmVudC1saXN0ZW5lci5jYycsCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlicGxhdGZvcm0vdHJhY2luZy9qc29uLXRyYWNlLWV2ZW50LWxpc3RlbmVyLmgnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL3RyYWNpbmcvdHJhY2UtZXZlbnQtbGlzdGVuZXIuY2MnLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnBsYXRmb3JtL3RyYWNpbmcvdHJhY2UtZXZlbnQtbGlzdGVuZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvdGhpcmRfcGFydHkvcGVyZmV0dG86bGlicGVyZmV0dG8nLAotICAgICAgICAgICAgJzwoVjhfUk9PVCkvdGhpcmRfcGFydHkvcGVyZmV0dG8vcHJvdG9zL3BlcmZldHRvL3RyYWNlOmxpdGUnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KFY4X1JPT1QpL2luY2x1ZGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICB9LCAgIyB2OF9saWJwbGF0Zm9ybQotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd2OF9saWJzYW1wbGVyJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3dhbnRfc2VwYXJhdGVfaG9zdF90b29sc2V0JywgewotICAgICAgICAgICd0b29sc2V0cyc6IFsnaG9zdCcsICd0YXJnZXQnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3Y4X2xpYmJhc2UnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnPChWOF9ST09UKS9zcmMvbGlic2FtcGxlci9zYW1wbGVyLmNjJywKLSAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2xpYnNhbXBsZXIvc2FtcGxlci5oJwotICAgICAgXSwKLSAgICB9LCAgIyB2OF9saWJzYW1wbGVyCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2J5dGVjb2RlX2J1aWx0aW5zX2xpc3RfZ2VuZXJhdG9yJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzISc6IFsKLSAgICAgICAgJ0JVSUxESU5HX1Y4X1NIQVJFRD0xJywKLSAgICAgIF0sCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAidjhfbGliYmFzZSIsCi0gICAgICAgICMgImJ1aWxkL3dpbjpkZWZhdWx0X2V4ZV9tYW5pZmVzdCIsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICI8KFY4X1JPT1QpL3NyYy9idWlsdGlucy9nZW5lcmF0ZS1ieXRlY29kZXMtYnVpbHRpbnMtbGlzdC5jYyIsCi0gICAgICAgICI8KFY4X1JPT1QpL3NyYy9pbnRlcnByZXRlci9ieXRlY29kZS1vcGVyYW5kcy5jYyIsCi0gICAgICAgICI8KFY4X1JPT1QpL3NyYy9pbnRlcnByZXRlci9ieXRlY29kZS1vcGVyYW5kcy5oIiwKLSAgICAgICAgIjwoVjhfUk9PVCkvc3JjL2ludGVycHJldGVyL2J5dGVjb2Rlcy5jYyIsCi0gICAgICAgICI8KFY4X1JPT1QpL3NyYy9pbnRlcnByZXRlci9ieXRlY29kZXMuaCIsCi0gICAgICBdLAotICAgIH0sICAjIGJ5dGVjb2RlX2J1aWx0aW5zX2xpc3RfZ2VuZXJhdG9yCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21rc25hcHNob3QnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAndjhfYmFzZV93aXRob3V0X2NvbXBpbGVyJywKLSAgICAgICAgJ3Y4X2NvbXBpbGVyX2Zvcl9ta3NuYXBzaG90JywKLSAgICAgICAgJ3Y4X2luaXQnLAotICAgICAgICAndjhfbGliYmFzZScsCi0gICAgICAgICd2OF9saWJwbGF0Zm9ybScsCi0gICAgICAgICd2OF9tYXliZV9pY3UnLAotICAgICAgICAjICJidWlsZC93aW46ZGVmYXVsdF9leGVfbWFuaWZlc3QiLAotICAgICAgXSwKLQotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICc8IUBweW1vZF9kb19tYWluKHRoaXJkX3BhcnR5LnY4Lmd5cGZpbGVzLkdOLXNjcmFwZXIgIjwoVjhfUk9PVCkvQlVJTEQuZ24iICAiXFwibWtzbmFwc2hvdC4qP3NvdXJjZXMgPSAiKScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAgIH1dLAotICAgICAgICBbJ2NsYW5nPT0xIGFuZCBob3N0X29zIT0ibWFjIicsIHsKLSAgICAgICAgICAnbGRmbGFnc19ob3N0JzogWwotICAgICAgICAgICAgJy1mdXNlLWxkPWxsZCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sICAjIG1rc25hcHNob3QKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndG9ycXVlJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3RvcnF1ZV9iYXNlJywKLSAgICAgICAgIyAiYnVpbGQvd2luOmRlZmF1bHRfZXhlX21hbmlmZXN0IiwKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMhJzogWwotICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLAotICAgICAgICAnQlVJTERJTkdfVjhfU0hBUkVEPTEnLAotICAgICAgXSwKLSAgICAgICdjZmxhZ3NfY2MhJzogWyctZm5vLWV4Y2VwdGlvbnMnXSwKLSAgICAgICdjZmxhZ3NfY2MnOiBbJy1mZXhjZXB0aW9ucyddLAotICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAnR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyc6ICdZRVMnLCAgIyAtZmV4Y2VwdGlvbnMKLSAgICAgIH0sCi0gICAgICAnbXN2c19zZXR0aW5ncyc6IHsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAxLAotICAgICAgICB9LAotICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ2RiZ2hlbHAubGliJywKLSAgICAgICAgICAgICd3aW5tbS5saWInLAotICAgICAgICAgICAgJ3dzMl8zMi5saWInCi0gICAgICAgICAgXQotICAgICAgICB9Ci0gICAgICB9LAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICI8KFY4X1JPT1QpL3NyYy90b3JxdWUvdG9ycXVlLmNjIiwKLSAgICAgIF0sCi0gICAgfSwgICMgdG9ycXVlCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3RvcnF1ZS1sYW5ndWFnZS1zZXJ2ZXInLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3RvcnF1ZV9iYXNlJywKLSAgICAgICAgJ3RvcnF1ZV9sc19iYXNlJywKLSAgICAgICAgIyAiYnVpbGQvd2luOmRlZmF1bHRfZXhlX21hbmlmZXN0IiwKLSAgICAgIF0sCi0gICAgICAnZGVmaW5lcyEnOiBbCi0gICAgICAgICdfSEFTX0VYQ0VQVElPTlM9MCcsCi0gICAgICAgICdCVUlMRElOR19WOF9TSEFSRUQ9MScsCi0gICAgICBdLAotICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICdSdW50aW1lVHlwZUluZm8nOiAndHJ1ZScsCi0gICAgICAgICAgJ0V4Y2VwdGlvbkhhbmRsaW5nJzogMSwKLSAgICAgICAgfSwKLSAgICAgIH0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgIjwoVjhfUk9PVCkvc3JjL3RvcnF1ZS9scy90b3JxdWUtbGFuZ3VhZ2Utc2VydmVyLmNjIiwKLSAgICAgIF0sCi0gICAgfSwgICMgdG9ycXVlLWxhbmd1YWdlLXNlcnZlcgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnZW4tcmVnZXhwLXNwZWNpYWwtY2FzZScsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICd2OF9saWJiYXNlJywKLSAgICAgICAgIyAiYnVpbGQvd2luOmRlZmF1bHRfZXhlX21hbmlmZXN0IiwKLSAgICAgICAgJ3Y4X21heWJlX2ljdScsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAiPChWOF9ST09UKS9zcmMvcmVnZXhwL2dlbi1yZWdleHAtc3BlY2lhbC1jYXNlLmNjIiwKLSAgICAgIF0sCi0gICAgfSwgICMgZ2VuLXJlZ2V4cC1zcGVjaWFsLWNhc2UKLSMgICAgewotIyAgICAgICd0YXJnZXRfbmFtZSc6ICdydW5fZ2VuLXJlZ2V4cC1zcGVjaWFsLWNhc2UnLAotIyAgICAgICd0eXBlJzogJ25vbmUnLAotIyAgICAgICdjb25kaXRpb25zJzogWwotIyAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSMgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsnZ2VuLXJlZ2V4cC1zcGVjaWFsLWNhc2UjaG9zdCddLAotIyAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0jICAgICAgICB9LCB7Ci0jICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ2dlbi1yZWdleHAtc3BlY2lhbC1jYXNlJ10sCi0jICAgICAgICB9XSwKLSMgICAgICBdLAotIyAgICAgICdhY3Rpb25zJzogWwotIyAgICAgICAgewotIyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAncnVuX2dlbi1yZWdleHAtc3BlY2lhbC1jYXNlX2FjdGlvbicsCi0jICAgICAgICAgICdpbnB1dHMnOiBbCi0jICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpLzwoRVhFQ1VUQUJMRV9QUkVGSVgpZ2VuLXJlZ2V4cC1zcGVjaWFsLWNhc2U8KEVYRUNVVEFCTEVfU1VGRklYKScsCi0jICAgICAgICAgIF0sCi0jICAgICAgICAgICdvdXRwdXRzJzogWwotIyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9zcmMvcmVnZXhwL3NwZWNpYWwtY2FzZS5jYycsCi0jICAgICAgICAgIF0sCi0jICAgICAgICAgICdhY3Rpb24nOiBbCi0jICAgICAgICAgICAgJ3B5dGhvbjInLAotIyAgICAgICAgICAgICc8KFY4X1JPT1QpL3Rvb2xzL3J1bi5weScsCi0jICAgICAgICAgICAgJzxAKF9pbnB1dHMpJywKLSMgICAgICAgICAgICAnPEAoX291dHB1dHMpJywKLSMgICAgICAgICAgXSwKLSMgICAgICAgIH0sCi0jICAgICAgXSwKLSMgICAgfSwgICMgcnVuX2dlbi1yZWdleHAtc3BlY2lhbC1jYXNlCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2NwcGdjX2Jhc2UnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd3YW50X3NlcGFyYXRlX2hvc3RfdG9vbHNldCcsIHsKLSAgICAgICAgICAndG9vbHNldHMnOiBbJ2hvc3QnLCAndGFyZ2V0J10sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAnPCFAcHltb2RfZG9fbWFpbih0aGlyZF9wYXJ0eS52OC5neXBmaWxlcy5HTi1zY3JhcGVyICI8KFY4X1JPT1QpL0JVSUxELmduIiAgInY4X3NvdXJjZV9zZXQuXFwiY3BwZ2NfYmFzZS4qP3NvdXJjZXMgPSAiKScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sICAjIGNwcGdjX2Jhc2UKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjhfY3BwZ2Nfc2hhcmVkJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL2Jhc2Uvc3RhY2suY2MnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL2Jhc2Uvc3RhY2suaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS93b3JrbGlzdC5jYycsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS93b3JrbGlzdC5oJywKLSAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgWydjbGFuZyBvciBPUyE9IndpbiInLCB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydfdG9vbHNldCA9PSAiaG9zdCIgYW5kIGhvc3RfYXJjaCA9PSAieDY0IiBvciBfdG9vbHNldCA9PSAidGFyZ2V0IiBhbmQgdGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20veDY0L3B1c2hfcmVnaXN0ZXJzX2FzbS5jYycsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQgPT0gImhvc3QiIGFuZCB0YXJnZXRfYXJjaCA9PSAiYXJtIiBvciBfdG9vbHNldCA9PSAiaG9zdCIgYW5kIHRhcmdldF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL2Jhc2UvYXNtL2lhMzIvcHVzaF9yZWdpc3RlcnNfYXNtLmNjJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICMgeDg2IHRhcmdldCByZXF1aXJlcyB4ODYgaG9zdCBidWlsZC4KLSAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCdzcmMvaGVhcC9iYXNlL2FzbS94NjQvcHVzaF9yZWdpc3RlcnNfYXNtJyxdCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIFsnX3Rvb2xzZXQgPT0gImhvc3QiIGFuZCBob3N0X2FyY2ggPT0gImFybSIgb3IgX3Rvb2xzZXQgPT0gInRhcmdldCIgYW5kIHRhcmdldF9hcmNoPT0iYXJtIicsIHsKLSAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL2Jhc2UvYXNtL2FybS9wdXNoX3JlZ2lzdGVyc19hc20uY2MnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJhcm02NCIgb3IgX3Rvb2xzZXQgPT0gInRhcmdldCIgYW5kIHRhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20vYXJtNjQvcHVzaF9yZWdpc3RlcnNfYXNtLmNjJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydfdG9vbHNldCA9PSAiaG9zdCIgYW5kIGhvc3RfYXJjaCA9PSAicHBjNjQiIG9yIF90b29sc2V0ID09ICJ0YXJnZXQiIGFuZCB0YXJnZXRfYXJjaD09InBwYzY0IicsIHsKLSAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9oZWFwL2Jhc2UvYXNtL3BwYy9wdXNoX3JlZ2lzdGVyc19hc20uY2MnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJzMzkweCIgb3IgX3Rvb2xzZXQgPT0gInRhcmdldCIgYW5kIHRhcmdldF9hcmNoPT0iczM5MHgiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20vczM5MC9wdXNoX3JlZ2lzdGVyc19hc20uY2MnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJtaXBzIiBvciBfdG9vbHNldCA9PSAidGFyZ2V0IiBhbmQgdGFyZ2V0X2FyY2g9PSJtaXBzIiBvciBfdG9vbHNldCA9PSAiaG9zdCIgYW5kIGhvc3RfYXJjaCA9PSAibWlwc2VsIiBvciBfdG9vbHNldCA9PSAidGFyZ2V0IiBhbmQgdGFyZ2V0X2FyY2g9PSJtaXBzZWwiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20vbWlwcy9wdXNoX3JlZ2lzdGVyc19hc20uY2MnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJtaXBzNjQiIG9yIF90b29sc2V0ID09ICJ0YXJnZXQiIGFuZCB0YXJnZXRfYXJjaD09Im1pcHM2NCIgb3IgX3Rvb2xzZXQgPT0gImhvc3QiIGFuZCBob3N0X2FyY2ggPT0gIm1pcHM2NGVsIiBvciBfdG9vbHNldCA9PSAidGFyZ2V0IiBhbmQgdGFyZ2V0X2FyY2g9PSJtaXBzNjRlbCInLCB7Ci0gICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvaGVhcC9iYXNlL2FzbS9taXBzNjQvcHVzaF9yZWdpc3RlcnNfYXNtLmNjJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0KLSAgICAgICAgICB9XSwKLSAgICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJ4NjQiIG9yIF90b29sc2V0ID09ICJ0YXJnZXQiIGFuZCB0YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvaGVhcC9iYXNlL2FzbS94NjQvcHVzaF9yZWdpc3RlcnNfbWFzbS5TJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgWydfdG9vbHNldCA9PSAiaG9zdCIgYW5kIGhvc3RfYXJjaCA9PSAieDg2IiBvciBfdG9vbHNldCA9PSAidGFyZ2V0IiBhbmQgdGFyZ2V0X2FyY2g9PSJ4ODYiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20vaWEzMi9wdXNoX3JlZ2lzdGVyc19tYXNtLlMnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IiBhbmQgaG9zdF9hcmNoID09ICJhcm02NCIgb3IgX3Rvb2xzZXQgPT0gInRhcmdldCIgYW5kIHRhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL2hlYXAvYmFzZS9hc20vYXJtNjQvcHVzaF9yZWdpc3RlcnNfbWFzbS5TJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfV0sCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgIH0sICAjIHY4X2NwcGdjX3NoYXJlZAotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMgUHVibGljIHRhcmdldHMKLSAgICAjCi0KLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAndjgnLAotICAgICAgJ2hhcmRfZGVwZW5kZW5jeSc6IDEsCi0gICAgICAndG9vbHNldHMnOiBbJ3RhcmdldCddLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3Y4X3NuYXBzaG90JywKLSAgICAgIF0sCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7Ci0gICAgICAgICAgJ3R5cGUnOiAnPChjb21wb25lbnQpJywKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICMgTm90ZTogb24gbm9uLVdpbmRvd3Mgd2Ugc3RpbGwgYnVpbGQgdGhpcyBmaWxlIHNvIHRoYXQgZ3lwCi0gICAgICAgICAgICAjIGhhcyBzb21lIHNvdXJjZXMgdG8gbGluayBpbnRvIHRoZSBjb21wb25lbnQuCi0gICAgICAgICAgICAnPChWOF9ST09UKS9zcmMvdXRpbHMvdjhkbGwtbWFpbi5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdCVUlMRElOR19WOF9TSEFSRUQnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1VTSU5HX1Y4X1NIQVJFRCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdPVEhFUl9MREZMQUdTJzogWyctZHluYW1pY2xpYicsICctYWxsX2xvYWQnXQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3NvbmFtZV92ZXJzaW9uIT0iIicsIHsKLSAgICAgICAgICAgICAgJ3Byb2R1Y3RfZXh0ZW5zaW9uJzogJ3NvLjwoc29uYW1lX3ZlcnNpb24pJywKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgICB7Ci0gICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgJzwoVjhfUk9PVCkvaW5jbHVkZScsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAndjhfZHVtcF9idWlsZF9jb25maWcnLAotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnPChWOF9ST09UKS90b29scy90ZXN0cnVubmVyL3V0aWxzL2R1bXBfYnVpbGRfY29uZmlnX2d5cC5weScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS92OF9idWlsZF9jb25maWcuanNvbicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3Y4X2R1bXBfYnVpbGRfY29uZmlnX2FyZ3MnOiBbCi0gICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS92OF9idWlsZF9jb25maWcuanNvbicsCi0gICAgICAgICAgICAgICdkY2hlY2tfYWx3YXlzX29uPTwoZGNoZWNrX2Fsd2F5c19vbiknLAotICAgICAgICAgICAgICAnaXNfYW5kcm9pZD08KGlzX2FuZHJvaWQpJywKLSAgICAgICAgICAgICAgJ2lzX2FzYW49PChhc2FuKScsCi0gICAgICAgICAgICAgICdpc19jZmk9PChjZmlfdnB0ciknLAotICAgICAgICAgICAgICAnaXNfY2xhbmc9PChjbGFuZyknLAotICAgICAgICAgICAgICAnaXNfY29tcG9uZW50X2J1aWxkPTwoY29tcG9uZW50KScsCi0gICAgICAgICAgICAgICdpc19kZWJ1Zz08KENPTkZJR1VSQVRJT05fTkFNRSknLAotICAgICAgICAgICAgICAjIE5vdCBhdmFpbGFibGUgaW4gZ3lwLgotICAgICAgICAgICAgICAnaXNfZ2Nvdl9jb3ZlcmFnZT0wJywKLSAgICAgICAgICAgICAgJ2lzX21zYW49PChtc2FuKScsCi0gICAgICAgICAgICAgICdpc190c2FuPTwodHNhbiknLAotICAgICAgICAgICAgICAjIE5vdCBhdmFpbGFibGUgaW4gZ3lwLgotICAgICAgICAgICAgICAnaXNfdWJzYW5fdnB0cj0wJywKLSAgICAgICAgICAgICAgJ3RhcmdldF9jcHU9PCh0YXJnZXRfYXJjaCknLAotICAgICAgICAgICAgICAndjhfZW5hYmxlX2kxOG5fc3VwcG9ydD08KHY4X2VuYWJsZV9pMThuX3N1cHBvcnQpJywKLSAgICAgICAgICAgICAgJ3Y4X2VuYWJsZV92ZXJpZnlfcHJlZGljdGFibGU9PCh2OF9lbmFibGVfdmVyaWZ5X3ByZWRpY3RhYmxlKScsCi0gICAgICAgICAgICAgICd2OF90YXJnZXRfY3B1PTwodjhfdGFyZ2V0X2FyY2gpJywKLSAgICAgICAgICAgICAgJ3Y4X3VzZV9zaXBoYXNoPTwodjhfdXNlX3NpcGhhc2gpJywKLSAgICAgICAgICAgICAgJ3Y4X2VuYWJsZV92ZXJpZnlfY3NhPTwodjhfZW5hYmxlX3ZlcmlmeV9jc2EpJywKLSAgICAgICAgICAgICAgJ3Y4X2VuYWJsZV9saXRlX21vZGU9PCh2OF9lbmFibGVfbGl0ZV9tb2RlKScsCi0gICAgICAgICAgICAgICd2OF9lbmFibGVfcG9pbnRlcl9jb21wcmVzc2lvbj08KHY4X2VuYWJsZV9wb2ludGVyX2NvbXByZXNzaW9uKScsCi0gICAgICAgICAgICBdCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndjhfdGFyZ2V0X2FyY2g9PSJtaXBzIiBvciB2OF90YXJnZXRfYXJjaD09Im1pcHNlbCIgXAotICAgICAgICAgICAgICBvciB2OF90YXJnZXRfYXJjaD09Im1pcHM2NCIgb3IgdjhfdGFyZ2V0X2FyY2g9PSJtaXBzNjRlbCInLCB7Ci0gICAgICAgICAgICAgICd2OF9kdW1wX2J1aWxkX2NvbmZpZ19hcmdzJzogWwotICAgICAgICAgICAgICAgICdtaXBzX2FyY2hfdmFyaWFudD08KG1pcHNfYXJjaF92YXJpYW50KScsCi0gICAgICAgICAgICAgICAgJ21pcHNfdXNlX21zYT08KG1pcHNfdXNlX21zYSknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbjInLCAnPChWOF9ST09UKS90b29scy90ZXN0cnVubmVyL3V0aWxzL2R1bXBfYnVpbGRfY29uZmlnX2d5cC5weScsCi0gICAgICAgICAgICAnPEAodjhfZHVtcF9idWlsZF9jb25maWdfYXJncyknLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH0sICAjIHY4Ci0gICAgIyBtaXNzaW5nIGEgYnVuY2ggb2YgZnV6emVyIHRhcmdldHMKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIFByb3RvYnVmIHRhcmdldHMsIHVzZWQgb25seSB3aGVuIGJ1aWxkaW5nIG91dHNpZGUgb2YgY2hyb21pdW0uCi0gICAgIwotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Bvc3Rtb3J0ZW0tbWV0YWRhdGEnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWydydW5fdG9ycXVlI3RhcmdldCddLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2hlYXBvYmplY3RfZmlsZXMnOiBbCi0gICAgICAgICAgJzwodG9ycXVlX291dHB1dF9yb290KS90b3JxdWUtZ2VuZXJhdGVkL2luc3RhbmNlLXR5cGVzLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2FsbG9jYXRpb24tc2l0ZS5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9hbGxvY2F0aW9uLXNpdGUtaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2NlbGwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvY2VsbC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvY29kZS5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9jb2RlLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9kYXRhLWhhbmRsZXIuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvZGF0YS1oYW5kbGVyLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9kZXNjcmlwdG9yLWFycmF5LmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2Rlc2NyaXB0b3ItYXJyYXktaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2ZlZWRiYWNrLWNlbGwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvZmVlZGJhY2stY2VsbC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvZml4ZWQtYXJyYXkuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvZml4ZWQtYXJyYXktaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2hlYXAtbnVtYmVyLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2hlYXAtbnVtYmVyLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9oZWFwLW9iamVjdC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9oZWFwLW9iamVjdC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvaW5zdGFuY2UtdHlwZS5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1hcnJheS1idWZmZXIuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1hcnJheS5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1hcnJheS1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvanMtZnVuY3Rpb24taW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2pzLWZ1bmN0aW9uLmNjJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1mdW5jdGlvbi5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1vYmplY3RzLmNjJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1vYmplY3RzLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2pzLW9iamVjdHMtaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2pzLXByb21pc2UuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvanMtcHJvbWlzZS1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvanMtcmVnZXhwLmNjJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1yZWdleHAuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvanMtcmVnZXhwLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9qcy1yZWdleHAtc3RyaW5nLWl0ZXJhdG9yLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL2pzLXJlZ2V4cC1zdHJpbmctaXRlcmF0b3ItaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL21hcC5jYycsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvbWFwLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL21hcC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvbmFtZS5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9uYW1lLWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9vYmplY3RzLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL29iamVjdHMtaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL29kZGJhbGwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvb2RkYmFsbC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvcHJpbWl0aXZlLWhlYXAtb2JqZWN0LmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL3ByaW1pdGl2ZS1oZWFwLW9iamVjdC1pbmwuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvc2NvcGUtaW5mby5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9zY3JpcHQuaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvc2NyaXB0LWlubC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9zaGFyZWQtZnVuY3Rpb24taW5mby5jYycsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvc2hhcmVkLWZ1bmN0aW9uLWluZm8uaCcsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvc2hhcmVkLWZ1bmN0aW9uLWluZm8taW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL3N0cmluZy5jYycsCi0gICAgICAgICAgJzwoVjhfUk9PVCkvc3JjL29iamVjdHMvc3RyaW5nLWNvbXBhcmF0b3IuY2MnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL3N0cmluZy1jb21wYXJhdG9yLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL3N0cmluZy5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9zdHJpbmctaW5sLmgnLAotICAgICAgICAgICc8KFY4X1JPT1QpL3NyYy9vYmplY3RzL3N0cnVjdC5oJywKLSAgICAgICAgICAnPChWOF9ST09UKS9zcmMvb2JqZWN0cy9zdHJ1Y3QtaW5sLmgnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbi1wb3N0bW9ydGVtLW1ldGFkYXRhJywKLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJzwoVjhfUk9PVCkvdG9vbHMvZ2VuLXBvc3Rtb3J0ZW0tbWV0YWRhdGEucHknLAotICAgICAgICAgICAgJzxAKGhlYXBvYmplY3RfZmlsZXMpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL2RlYnVnLXN1cHBvcnQuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24yJywKLSAgICAgICAgICAgICc8KFY4X1JPT1QpL3Rvb2xzL2dlbi1wb3N0bW9ydGVtLW1ldGFkYXRhLnB5JywKLSAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgJzxAKGhlYXBvYmplY3RfZmlsZXMpJwotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICdzb3VyY2VzJzogWyc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9kZWJ1Zy1zdXBwb3J0LmNjJywgXSwKLSAgICAgIH0sCi0gICAgfSwgICMgcG9zdG1vcnRlbS1tZXRhZGF0YQotCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3Y4X3psaWInLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnd2FudF9zZXBhcmF0ZV9ob3N0X3Rvb2xzZXQnLCB7Ci0gICAgICAgICAgJ3Rvb2xzZXRzJzogWydob3N0JywgJ3RhcmdldCddLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJyI8KHRhcmdldF9hcmNoKSI9PSJhcm02NCIgYW5kIF90b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ0NQVV9OT19TSU1EJ10KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbJ1g4Nl9XSU5ET1dTJ10KLSAgICAgICAgICAgIH1dCi0gICAgICAgICAgXQotICAgICAgICB9XSwKLSAgICAgIF0sCi0KLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliJywKLSAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nb29nbGUnLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwOnpsaWIjdGFyZ2V0JywKLSAgICAgIF0sCi0gICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICMgY29iYWx0L3NyYy90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwIGRvZXMgbm90IHByb3ZpZGUgYSBob3N0IGJpdWxkLAotICAgICAgICAjIFdlIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzaW1wbGUgemxpYiBidWlsZCBydWxlIGZyb20gbm9kZWpzIGJ1dCBmb3IKLSAgICAgICAgIyB0YXJnZXQgYnVpbGRzIHdlIG5lZWQgdG8gdXNlIHRoZSBzdGFyYm9hcmRpemVkIGd5cCBydWxlLgotICAgICAgICBbJ190b29sc2V0ID09ICJob3N0IicsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsgJ1pMSUJfSU1QTEVNRU5UQVRJT04nIF0sCi0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2dvb2dsZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2FkbGVyMzIuYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9jaHJvbWVjb25mLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvY29tcHJlc3MuYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9jb250cmliL29wdGltaXphdGlvbnMvaW5zZXJ0X3N0cmluZy5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2NvbnRyaWIvb3B0aW1pemF0aW9ucy9pbnNlcnRfc3RyaW5nLmgnLAotICAgICAgICAgICAgIyc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2NwdV9mZWF0dXJlcy5jJywKLSAgICAgICAgICAgICMnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9jcHVfZmVhdHVyZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9jcmMzMi5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2NyYzMyLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvZGVmbGF0ZS5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2RlZmxhdGUuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nemNsb3NlLmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvZ3pndXRzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvZ3psaWIuYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nenJlYWQuYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nendyaXRlLmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvaW5mYmFjay5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2luZmZhc3QuYycsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9pbmZmYXN0LmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvaW5mZml4ZWQuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9pbmZsYXRlLmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvaW5mbGF0ZS5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL2luZnRyZWVzLmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvaW5mdHJlZXMuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi90cmVlcy5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3RyZWVzLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvdW5jb21wci5jJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3pjb25mLmgnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvemxpYi5oJywKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS96bGliL3p1dGlsLmMnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvenV0aWwuaCcsCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nb29nbGUvY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuY2MnLAotICAgICAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL2NvbXByZXNzaW9uX3V0aWxzX3BvcnRhYmxlLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LCAgIyB2OF96bGliCi0gIF0sCi19Ci0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvYXV0aDIvY29yc2VuYWJsZWQucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvWE1MSHR0cFJlcXVlc3QvcmVzb3VyY2VzL2F1dGgyL2NvcnNlbmFibGVkLnB5CmluZGV4IGE3MjVkNjIuLjEzOTI1YjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvYXV0aDIvY29yc2VuYWJsZWQucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy9hdXRoMi9jb3JzZW5hYmxlZC5weQpAQCAtNywxMSArNyw4IEBACiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VUJyk7CiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnYXV0aG9yaXphdGlvbiwgeC11c2VyLCB4LXBhc3MnKTsKICAgICByZXNwb25zZS5oZWFkZXJzLnNldCgnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAneC1jaGFsbGVuZ2UsIHhoci11c2VyLCBzZXMtdXNlcicpOwotICAgIGF1dGggPSBpbXAubG9hZF9zb3VyY2UoIiIsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkX3BhcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYl9wbGF0Zm9ybV90ZXN0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYTUxIdHRwUmVxdWVzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNvdXJjZXMiLAorICAgIGF1dGggPSBpbXAubG9hZF9zb3VyY2UoIiIsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhcmRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhlbnRpY2F0aW9uLnB5IikpCiAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIk9QVElPTlMiOgogICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvYXV0aDcvY29yc2VuYWJsZWQucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvWE1MSHR0cFJlcXVlc3QvcmVzb3VyY2VzL2F1dGg3L2NvcnNlbmFibGVkLnB5CmluZGV4IGE3MjVkNjIuLjEzOTI1YjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvYXV0aDcvY29yc2VuYWJsZWQucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy9hdXRoNy9jb3JzZW5hYmxlZC5weQpAQCAtNywxMSArNyw4IEBACiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VUJyk7CiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnYXV0aG9yaXphdGlvbiwgeC11c2VyLCB4LXBhc3MnKTsKICAgICByZXNwb25zZS5oZWFkZXJzLnNldCgnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAneC1jaGFsbGVuZ2UsIHhoci11c2VyLCBzZXMtdXNlcicpOwotICAgIGF1dGggPSBpbXAubG9hZF9zb3VyY2UoIiIsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkX3BhcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYl9wbGF0Zm9ybV90ZXN0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJYTUxIdHRwUmVxdWVzdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXNvdXJjZXMiLAorICAgIGF1dGggPSBpbXAubG9hZF9zb3VyY2UoIiIsIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhcmRpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dGhlbnRpY2F0aW9uLnB5IikpCiAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIk9QVElPTlMiOgogICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvYXV0aDgvY29yc2VuYWJsZWQtbm8tYXV0aG9yaXplLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy9hdXRoOC9jb3JzZW5hYmxlZC1uby1hdXRob3JpemUucHkKaW5kZXggZTQxMTgzZC4uN2E3MzNjYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy9hdXRoOC9jb3JzZW5hYmxlZC1uby1hdXRob3JpemUucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy9hdXRoOC9jb3JzZW5hYmxlZC1uby1hdXRob3JpemUucHkKQEAgLTcsMTEgKzcsOCBAQAogICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCcpOwogICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJywgJ3gtdXNlciwgeC1wYXNzJyk7CiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJywgJ3gtY2hhbGxlbmdlLCB4aHItdXNlciwgc2VzLXVzZXInKTsKLSAgICBhdXRoID0gaW1wLmxvYWRfc291cmNlKCIiLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlyZF9wYXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJfcGxhdGZvcm1fdGVzdHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MSHR0cFJlcXVlc3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzb3VyY2VzIiwKKyAgICBhdXRoID0gaW1wLmxvYWRfc291cmNlKCIiLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXJkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRoZW50aWNhdGlvbi5weSIpKQogICAgIGlmIHJlcXVlc3QubWV0aG9kID09ICJPUFRJT05TIjoKICAgICAgICAgcmV0dXJuICIiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvWE1MSHR0cFJlcXVlc3QvcmVzb3VyY2VzL2luc3BlY3QtaGVhZGVycy5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvaW5zcGVjdC1oZWFkZXJzLnB5CmluZGV4IGNhNTk2MDUuLmVjOTdiZjEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvaW5zcGVjdC1oZWFkZXJzLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvaW5zcGVjdC1oZWFkZXJzLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAgICAgZmlsdGVyX25hbWUgPSByZXF1ZXN0LkdFVC5maXJzdCgiZmlsdGVyX25hbWUiLCAiIikubG93ZXIoKQogCiAgICAgcmVzdWx0ID0gIiIKLSAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcmVxdWVzdC5oZWFkZXJzLml0ZXJpdGVtcygpOgorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiByZXF1ZXN0LmhlYWRlcnMuaXRlbXMoKToKICAgICAgICAgaWYgZmlsdGVyX3ZhbHVlOgogICAgICAgICAgICAgaWYgdmFsdWUgPT0gZmlsdGVyX3ZhbHVlOgogICAgICAgICAgICAgICAgIHJlc3VsdCArPSBuYW1lLmxvd2VyKCkgKyAiLCIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvdHJpY2tsZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9YTUxIdHRwUmVxdWVzdC9yZXNvdXJjZXMvdHJpY2tsZS5weQppbmRleCAwZTcwOTQ0Li42MmZlMGMyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvWE1MSHR0cFJlcXVlc3QvcmVzb3VyY2VzL3RyaWNrbGUucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL1hNTEh0dHBSZXF1ZXN0L3Jlc291cmNlcy90cmlja2xlLnB5CkBAIC03LDYgKzcsNiBAQAogICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCiAgICAgcmVzcG9uc2Uud3JpdGVfc3RhdHVzX2hlYWRlcnMoKQogICAgIHRpbWUuc2xlZXAoZGVsYXkpOwotICAgIGZvciBpIGluIHhyYW5nZShjb3VudCk6CisgICAgZm9yIGkgaW4gcmFuZ2UoY291bnQpOgogICAgICAgICByZXNwb25zZS53cml0ZXIud3JpdGVfY29udGVudCgiVEVTVF9UUklDS0xFXG4iKQogICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L3N1cHBvcnQvcmVwb3J0LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9saWN5L3N1cHBvcnQvcmVwb3J0LnB5CmluZGV4IDE5MzMxNWYuLjcyOWQ5MDcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb250ZW50LXNlY3VyaXR5LXBvbGljeS9zdXBwb3J0L3JlcG9ydC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvY29udGVudC1zZWN1cml0eS1wb2xpY3kvc3VwcG9ydC9yZXBvcnQucHkKQEAgLTMxLDQgKzMxLDQgQEAKICAgICByZXBvcnQucnN0cmlwKCkKICAgICByZXF1ZXN0LnNlcnZlci5zdGFzaC50YWtlKGtleT1rZXkpCiAgICAgcmVxdWVzdC5zZXJ2ZXIuc3Rhc2gucHV0KGtleT1rZXksIHZhbHVlPXJlcG9ydCkKLSAgICByZXR1cm4gWygiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKV0sICJSZWNvcmRlZCByZXBvcnQgIiArIHJlcG9ydAorICAgIHJldHVybiBbKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbiIpXSwgIlJlY29yZGVkIHJlcG9ydCAiICsgcmVwb3J0LmRlY29kZSgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvY29va2llcy9yZXNvdXJjZXMvc2V0LWNvb2tpZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb29raWVzL3Jlc291cmNlcy9zZXQtY29va2llLnB5CmluZGV4IDFlZWU4MzIuLmY3YTgzNmEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb29raWVzL3Jlc291cmNlcy9zZXQtY29va2llLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb29raWVzL3Jlc291cmNlcy9zZXQtY29va2llLnB5CkBAIC0xLDYgKzEsNiBAQAogCiBpbXBvcnQgc3lzCi1pbXBvcnQgdXJscGFyc2UKK2Zyb20gc2l4Lm1vdmVzLnVybGxpYiBpbXBvcnQgcGFyc2UKIAogZGVmIG1haW4ocmVxdWVzdCwgcmVzcG9uc2UpOgogICAgICIiIgpAQCAtMjAsNyArMjAsNyBAQAogICAgIDwgRGF0ZTogVHVlLCAwNCBPY3QgMjAxNiAxODoxNjowNiBHTVQKICAgICA8IENvbnRlbnQtTGVuZ3RoOiA4MAogICAgICIiIgotICAgIHBhcmFtcyA9IHVybHBhcnNlLnBhcnNlX3FzKHJlcXVlc3QudXJsX3BhcnRzLnF1ZXJ5KQorICAgIHBhcmFtcyA9IHBhcnNlLnBhcnNlX3FzKHJlcXVlc3QudXJsX3BhcnRzLnF1ZXJ5KQogICAgIGhlYWRlcnMgPSBbCiAgICAgICAgICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKSwKICAgICAgICAgKCJTZXQtQ29va2llIiwgIntuYW1lWzBdfT0xOyBQYXRoPXtwYXRoWzBdfTsgRXhwaXJlcz1XZWQsIDA5IEp1biAyMDIxIDEwOjE4OjE0IEdNVCIuZm9ybWF0KCoqcGFyYW1zKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb3JzL3Jlc291cmNlcy9jb3JzLW1ha2VoZWFkZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvY29ycy9yZXNvdXJjZXMvY29ycy1tYWtlaGVhZGVyLnB5CmluZGV4IGVhYjM1ZWUuLjY0NDQ3YmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb3JzL3Jlc291cmNlcy9jb3JzLW1ha2VoZWFkZXIucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2NvcnMvcmVzb3VyY2VzL2NvcnMtbWFrZWhlYWRlci5weQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoIkxvY2F0aW9uIiwgcmVxdWVzdC5HRVQuZmlyc3QoJ2xvY2F0aW9uJykpCiAKICAgICBoZWFkZXJzID0ge30KLSAgICBmb3IgbmFtZSwgdmFsdWVzIGluIHJlcXVlc3QuaGVhZGVycy5pdGVyaXRlbXMoKToKKyAgICBmb3IgbmFtZSwgdmFsdWVzIGluIHJlcXVlc3QuaGVhZGVycy5pdGVtcygpOgogICAgICAgICBpZiBsZW4odmFsdWVzKSA9PSAxOgogICAgICAgICAgICAgaGVhZGVyc1tuYW1lXSA9IHZhbHVlc1swXQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2NvcnMvcmVzb3VyY2VzL3N0YXR1cy5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9jb3JzL3Jlc291cmNlcy9zdGF0dXMucHkKaW5kZXggOGQ0NDFmMC4uZmI0YjdkMCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2NvcnMvcmVzb3VyY2VzL3N0YXR1cy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvY29ycy9yZXNvdXJjZXMvc3RhdHVzLnB5CkBAIC0yNCw3ICsyNCw3IEBACiAgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gIk9QVElPTlMiIGFuZCAicHJlZmxpZ2h0IiBpbiByZXF1ZXN0LkdFVDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29kZSA9IGludChyZXF1ZXN0LkdFVC5maXJzdCgncHJlZmxpZ2h0JykpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgVmFsdWVFcnJvcjoKKyAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBzdGF0dXMgPSBjb2RlLCB0ZXh0CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy9iYWQtY2h1bmstZW5jb2RpbmcucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy9iYWQtY2h1bmstZW5jb2RpbmcucHkKaW5kZXggMjNjN2IzZi4uMzA0ZmUxOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvYmFkLWNodW5rLWVuY29kaW5nLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL2JhZC1jaHVuay1lbmNvZGluZy5weQpAQCAtNyw3ICs3LDcgQEAKICAgICByZXNwb25zZS5oZWFkZXJzLnNldCgiVHJhbnNmZXItRW5jb2RpbmciLCAiY2h1bmtlZCIpCiAgICAgcmVzcG9uc2Uud3JpdGVfc3RhdHVzX2hlYWRlcnMoKQogICAgIHRpbWUuc2xlZXAoZGVsYXkpCi0gICAgZm9yIGkgaW4geHJhbmdlKGNvdW50KToKKyAgICBmb3IgaSBpbiByYW5nZShjb3VudCk6CiAgICAgICAgIHJlc3BvbnNlLndyaXRlci53cml0ZV9jb250ZW50KCJhXHJcblRFU1RfQ0hVTktcclxuIikKICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKICAgICByZXNwb25zZS53cml0ZXIud3JpdGVfY29udGVudCgiZ2FyYmFnZSIpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy9pbmZpbml0ZS1zbG93LXJlc3BvbnNlLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvaW5maW5pdGUtc2xvdy1yZXNwb25zZS5weQppbmRleCBmYTJjNDgyLi44YzFlOGQ2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy9pbmZpbml0ZS1zbG93LXJlc3BvbnNlLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL2luZmluaXRlLXNsb3ctcmVzcG9uc2UucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgdGltZQorZnJvbSBzb2NrZXQgaW1wb3J0IGVycm9yIGFzIHNvY2tldF9lcnJvcgogCiAKIGRlZiB1cmxfZGlyKHJlcXVlc3QpOgpAQCAtMjcsNiArMjgsMTEgQEAKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBpZiBub3QgcmVzcG9uc2Uud3JpdGVyLmZsdXNoKCk6CiAgICAgICAgICAgICBicmVhaworICAgICAgICAjIFRyaWdnZXIgc29ja2V0IGVycm9yIG9uIFB5dGhvbjMsIGJlY2F1c2UgZmx1c2ggZG9lc24ndAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZS53cml0ZXIuX3dmaWxlLl9zb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLHNvY2tldF9lcnJvcik6CisgICAgICAgICAgICBicmVhawogICAgICAgICBpZiBhYm9ydEtleSBhbmQgcmVxdWVzdC5zZXJ2ZXIuc3Rhc2gudGFrZShhYm9ydEtleSwgdXJsX2RpcihyZXF1ZXN0KSk6CiAgICAgICAgICAgICBicmVhawogICAgICAgICByZXNwb25zZS53cml0ZXIud3JpdGUoIi4iKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvdHJpY2tsZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9mZXRjaC9hcGkvcmVzb3VyY2VzL3RyaWNrbGUucHkKaW5kZXggZTJjOWJlZS4uZDZlOTlmOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL2ZldGNoL2FwaS9yZXNvdXJjZXMvdHJpY2tsZS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvZmV0Y2gvYXBpL3Jlc291cmNlcy90cmlja2xlLnB5CkBAIC05LDYgKzksNiBAQAogICAgIHJlc3BvbnNlLmhlYWRlcnMuc2V0KCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCiAgICAgcmVzcG9uc2Uud3JpdGVfc3RhdHVzX2hlYWRlcnMoKQogICAgIHRpbWUuc2xlZXAoZGVsYXkpCi0gICAgZm9yIGkgaW4geHJhbmdlKGNvdW50KToKKyAgICBmb3IgaSBpbiByYW5nZShjb3VudCk6CiAgICAgICAgIHJlc3BvbnNlLndyaXRlci53cml0ZV9jb250ZW50KCJURVNUX1RSSUNLTEVcbiIpCiAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvbWl4ZWQtY29udGVudC9nZW5lcmljL3Rvb2xzL3NwZWNfdmFsaWRhdG9yLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL21peGVkLWNvbnRlbnQvZ2VuZXJpYy90b29scy9zcGVjX3ZhbGlkYXRvci5weQppbmRleCBhNmFjYzEwLi5iYjZlNTJlIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvbWl4ZWQtY29udGVudC9nZW5lcmljL3Rvb2xzL3NwZWNfdmFsaWRhdG9yLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9taXhlZC1jb250ZW50L2dlbmVyaWMvdG9vbHMvc3BlY192YWxpZGF0b3IucHkKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIqIl0gKyBzY2hlbWEpCiAgICAgICAgIHJldHVybgogCi0gICAgZm9yIHN1Yl9hcnRpZmFjdF9rZXksIHN1Yl9zY2hlbWEgaW4gc2NoZW1hLml0ZXJpdGVtcygpOgorICAgIGZvciBzdWJfYXJ0aWZhY3Rfa2V5LCBzdWJfc2NoZW1hIGluIHNjaGVtYS5pdGVtcygpOgogICAgICAgICBhc3NlcnRfdmFsaWRfYXJ0aWZhY3QoZXhwX3BhdHRlcm5bYXJ0aWZhY3Rfa2V5XSwgc3ViX2FydGlmYWN0X2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9zY2hlbWEpCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy9zZXJ2aWNlLXdvcmtlcnMvdG9vbHMvYmxpbmstaW1wb3J0LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3NlcnZpY2Utd29ya2Vycy90b29scy9ibGluay1pbXBvcnQucHkKaW5kZXggODdjYTIyMS4uODRjOTU4YyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3NlcnZpY2Utd29ya2Vycy90b29scy9ibGluay1pbXBvcnQucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3NlcnZpY2Utd29ya2Vycy90b29scy9ibGluay1pbXBvcnQucHkKQEAgLTEwMiw3ICsxMDIsNyBAQAogZGVmIHN1Yl9jaGFuZ2VkX2ZpbGVuYW1lcyhmaWxlbmFtZV9jaGFuZ2VzLCBmKToKICAgICBydiA9IFtdCiAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgZm9yIGluX25hbWUsIG91dF9uYW1lIGluIGZpbGVuYW1lX2NoYW5nZXMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBpbl9uYW1lLCBvdXRfbmFtZSBpbiBmaWxlbmFtZV9jaGFuZ2VzLml0ZW1zKCk6CiAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGluX25hbWUsIG91dF9uYW1lKQogICAgICAgICBydi5hcHBlbmQobGluZSkKICAgICByZXR1cm4gIiIuam9pbihydikKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAgICAgZmlsZW5hbWVfY2hhbmdlcyA9IHt9CiAKLSAgICBmb3IgaywgdiBpbiBwYXRoX2NoYW5nZXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIGssIHYgaW4gcGF0aF9jaGFuZ2VzLml0ZW1zKCk6CiAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoaykgaW4gZmlsZW5hbWVfY2hhbmdlczoKICAgICAgICAgICAgIHByaW50ICJHb3QgZHVwbGljYXRlIG5hbWU6IiArIG9zLnBhdGguYmFzZW5hbWUoaykKICAgICAgICAgZmlsZW5hbWVfY2hhbmdlc1tvcy5wYXRoLmJhc2VuYW1lKGspXSA9IG9zLnBhdGguYmFzZW5hbWUodikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9jaS9jaGVja19zdGFiaWxpdHkucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvY2kvY2hlY2tfc3RhYmlsaXR5LnB5CmluZGV4IGNmM2UxMGQuLjFhYzdjMTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9jaS9jaGVja19zdGFiaWxpdHkucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL2NpL2NoZWNrX3N0YWJpbGl0eS5weQpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgIiIiUG9zdCBzdGFiaWxpdHkgcmVzdWx0cyB0byBhIGdpdmVuIFVSTC4iIiIKICAgICBwYXlsb2FkX3Jlc3VsdHMgPSBbXQogCi0gICAgZm9yIHRlc3RfbmFtZSwgdGVzdCBpbiByZXN1bHRzLml0ZXJpdGVtcygpOgorICAgIGZvciB0ZXN0X25hbWUsIHRlc3QgaW4gcmVzdWx0cy5pdGVtcygpOgogICAgICAgICBzdWJ0ZXN0cyA9IFtdCiAgICAgICAgIGZvciBzdWJ0ZXN0X25hbWUsIHN1YnRlc3QgaW4gdGVzdFsnc3VidGVzdHMnXS5pdGVtcygpOgogICAgICAgICAgICAgc3VidGVzdHMuYXBwZW5kKHsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9tYW5pZmVzdC9tYW5pZmVzdC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9tYW5pZmVzdC9tYW5pZmVzdC5weQppbmRleCBiMTUzNzk4Li4zN2VkNGZkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvbWFuaWZlc3QvbWFuaWZlc3QucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL21hbmlmZXN0L21hbmlmZXN0LnB5CkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIGlmIG5vdCBkaXJfbmFtZS5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CiAgICAgICAgICAgICBkaXJfbmFtZSA9IGRpcl9uYW1lICsgb3MucGF0aC5zZXAKICAgICAgICAgZm9yIHR5cGVfdGVzdHMgaW4gc2VsZi5fZGF0YS52YWx1ZXMoKToKLSAgICAgICAgICAgIGZvciBwYXRoLCB0ZXN0cyBpbiB0eXBlX3Rlc3RzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIHBhdGgsIHRlc3RzIGluIHR5cGVfdGVzdHMuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoZGlyX25hbWUpOgogICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9iZW5jaG1hcmtfaGVscGVyX3dzaC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9iZW5jaG1hcmtfaGVscGVyX3dzaC5weQppbmRleCA0NGFkMGJmLi5kNWQ5ZDM2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvYmVuY2htYXJrX2hlbHBlcl93c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2JlbmNobWFya19oZWxwZXJfd3NoLnB5CkBAIC0zMCw2ICszMCw3IEBACiAKICIiIkhhbmRsZXIgZm9yIGJlbmNobWFyay5odG1sLiIiIgogCitpbXBvcnQgc2l4CiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKICAgICAjIFR1cm4gb2ZmIGNvbXByZXNzaW9uLgpAQCAtNDQsNyArNDUsNyBAQAogICAgICAgICBpZiBjb21tYW5kIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjb21tYW5kLCB1bmljb2RlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY29tbWFuZCwgc2l4LnRleHRfdHlwZSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGNvbW1hbmQgZGF0YTonICsgY29tbWFuZCkKICAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kLnNwbGl0KCcgJykKICAgICAgICAgaWYgbGVuKGNvbW1hbmRzKSA9PSAwOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fY2xpZW50LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fY2xpZW50LnB5CmluZGV4IDk0M2NlNjQuLmY1ZmI5MmEgMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX2NsaWVudC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZWNob19jbGllbnQucHkKQEAgLTYwLDYgKzYwLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCkBAIC0xNDMsNyArMTQ0LDcgQEAKICAgICAgICAgICAgICAgICAobGVuZ3RoLCBsZW5ndGggLSByZW1haW5pbmcpKQogICAgICAgICBieXRlcy5hcHBlbmQocmVjZWl2ZWRfYnl0ZXMpCiAgICAgICAgIHJlbWFpbmluZyAtPSBsZW4ocmVjZWl2ZWRfYnl0ZXMpCi0gICAgcmV0dXJuICcnLmpvaW4oYnl0ZXMpCisgICAgcmV0dXJuIGInJy5qb2luKGJ5dGVzKQogCiAKIGRlZiBfZ2V0X21hbmRhdG9yeV9oZWFkZXIoZmllbGRzLCBuYW1lKToKQEAgLTI2Nyw4ICsyNjgsOCBAQAogICAgICAgICBmaWVsZHMgPSB7fQogICAgICAgICB3aGlsZSBUcnVlOiAgIyAiRmllbGQiCiAgICAgICAgICAgICAjIDQuMSAzMy4gbGV0IC9uYW1lLyBhbmQgL3ZhbHVlLyBiZSBlbXB0eSBieXRlIGFycmF5cwotICAgICAgICAgICAgbmFtZSA9ICcnCi0gICAgICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgICAgICBuYW1lID0gYicnCisgICAgICAgICAgICB2YWx1ZSA9IGInJwogICAgICAgICAgICAgIyA0LjEgMzQuIHJlYWQgL25hbWUvCiAgICAgICAgICAgICBuYW1lID0gc2VsZi5fcmVhZF9uYW1lKCkKICAgICAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKQEAgLTI4MCw3ICsyODEsNyBAQAogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9yZWFkX3ZhbHVlKGNoKQogICAgICAgICAgICAgIyA0LjEgMzcuIHJlYWQgYSBieXRlIGZyb20gdGhlIHNlcnZlcgogICAgICAgICAgICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCi0gICAgICAgICAgICBpZiBjaCAhPSAnXG4nOiAgIyAweDBBCisgICAgICAgICAgICBpZiBjaCAhPSBiJ1xuJzogICMgMHgwQQogICAgICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgTEYgYnV0IGZvdW5kICVyIHdoaWxlIHJlYWRpbmcgdmFsdWUgJXIgZm9yICcKICAgICAgICAgICAgICAgICAgICAgJ2hlYWRlciAlcicgJSAoY2gsIHZhbHVlLCBuYW1lKSkKQEAgLTI5MCwyNiArMjkxLDIzIEBACiAgICAgICAgICAgICAjIGFycmF5IGFzIGEgVVRGLTggc3RyZWFtIGFuZCB0aGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHN0cmluZwogICAgICAgICAgICAgIyBvYnRhaW5lZCBieSBpbnRlcnByZXRpbmcgdGhlIC92YWx1ZS8gYnl0ZSBhcnJheSBhcyBhIFVURi04IGJ5dGUKICAgICAgICAgICAgICMgc3RyZWFtLgotICAgICAgICAgICAgZmllbGRzLnNldGRlZmF1bHQobmFtZSwgW10pLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgIGZpZWxkcy5zZXRkZWZhdWx0KG5hbWUuZGVjb2RlKCksIFtdKS5hcHBlbmQodmFsdWUuZGVjb2RlKCkpCiAgICAgICAgICAgICAjIDQuMSAzOS4gcmV0dXJuIHRvIHRoZSAiRmllbGQiIHN0ZXAgYWJvdmUKICAgICAgICAgcmV0dXJuIGZpZWxkcwogCiAgICAgZGVmIF9yZWFkX25hbWUoc2VsZik6CiAgICAgICAgICMgNC4xIDMzLiBsZXQgL25hbWUvIGJlIGVtcHR5IGJ5dGUgYXJyYXlzCi0gICAgICAgIG5hbWUgPSAnJworICAgICAgICBuYW1lID0gYicnCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAjIDQuMSAzNC4gcmVhZCBhIGJ5dGUgZnJvbSB0aGUgc2VydmVyCiAgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKLSAgICAgICAgICAgIGlmIGNoID09ICdccic6ICAjIDB4MEQKKyAgICAgICAgICAgIGlmIGNoID09IGInXHInOiAgIyAweDBECiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsaWYgY2ggPT0gJ1xuJzogICMgMHgwQQorICAgICAgICAgICAgZWxpZiBjaCA9PSBiJ1xuJzogICMgMHgwQQogICAgICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBMRiB3aGVuIHJlYWRpbmcgaGVhZGVyIG5hbWUgJXInICUgbmFtZSkKLSAgICAgICAgICAgIGVsaWYgY2ggPT0gJzonOiAgIyAweDNBCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUKLSAgICAgICAgICAgIGVsaWYgY2ggPj0gJ0EnIGFuZCBjaCA8PSAnWic6ICAjIFJhbmdlIDB4MzEgdG8gMHg1QQotICAgICAgICAgICAgICAgIGNoID0gY2hyKG9yZChjaCkgKyAweDIwKQotICAgICAgICAgICAgICAgIG5hbWUgKz0gY2gKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gYic6JzogICMgMHgzQQorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLmxvd2VyKCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbmFtZSArPSBjaAogCkBAIC0zMTcsMTggKzMxNSwxOCBAQAogICAgICAgICAjIDQuMSAzNS4gcmVhZCBhIGJ5dGUgZnJvbSB0aGUgc2VydmVyCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKLSAgICAgICAgICAgIGlmIGNoID09ICcgJzogICMgMHgyMAorICAgICAgICAgICAgaWYgY2ggPT0gYicgJzogICMgMHgyMAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gY2gKIAogICAgIGRlZiBfcmVhZF92YWx1ZShzZWxmLCBjaCk6CiAgICAgICAgICMgNC4xIDMzLiBsZXQgL3ZhbHVlLyBiZSBlbXB0eSBieXRlIGFycmF5cwotICAgICAgICB2YWx1ZSA9ICcnCisgICAgICAgIHZhbHVlID0gYicnCiAgICAgICAgICMgNC4xIDM2LiByZWFkIGEgYnl0ZSBmcm9tIHNlcnZlci4KICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIGNoID09ICdccic6ICAjIDB4MEQKKyAgICAgICAgICAgIGlmIGNoID09IGInXHInOiAgIyAweDBECiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0gICAgICAgICAgICBlbGlmIGNoID09ICdcbic6ICAjIDB4MEEKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gYidcbic6ICAjIDB4MEEKICAgICAgICAgICAgICAgICByYWlzZSBDbGllbnRIYW5kc2hha2VFcnJvcigKICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgTEYgd2hlbiByZWFkaW5nIGhlYWRlciB2YWx1ZSAlcicgJSB2YWx1ZSkKICAgICAgICAgICAgIGVsc2U6CkBAIC00MDcsNyArNDA1LDcgQEAKICAgICAgICAgcmVxdWVzdF9saW5lID0gX2J1aWxkX21ldGhvZF9saW5lKHNlbGYuX29wdGlvbnMucmVzb3VyY2UpCiAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnQ2xpZW50XCdzIG9wZW5pbmcgaGFuZHNoYWtlIFJlcXVlc3QtTGluZTogJXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9saW5lKQotICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChyZXF1ZXN0X2xpbmUpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKHJlcXVlc3RfbGluZS5lbmNvZGUoKSkKIAogICAgICAgICBmaWVsZHMgPSBbXQogICAgICAgICBmaWVsZHMuYXBwZW5kKF9mb3JtYXRfaG9zdF9oZWFkZXIoCkBAIC00MzMsNyArNDMxLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2tleSwKICAgICAgICAgICAgIHV0aWwuaGV4aWZ5KG9yaWdpbmFsX2tleSkpCiAgICAgICAgIGZpZWxkcy5hcHBlbmQoCi0gICAgICAgICAgICAnJXM6ICVzXHJcbicgJSAoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUiwgc2VsZi5fa2V5KSkKKyAgICAgICAgICAgICclczogJXNcclxuJyAlIChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSLCBzZWxmLl9rZXkuZGVjb2RlKCkpKQogCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyc2lvbl9oZWFkZXIgPiAwOgogICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgnJXM6ICVkXHJcbicgJSAoY29tbW9uLlNFQ19XRUJTT0NLRVRfVkVSU0lPTl9IRUFERVIsCkBAIC00NjgsMjIgKzQ2NiwyMiBAQAogICAgICAgICAgICAgICAgICBjb21tb24uZm9ybWF0X2V4dGVuc2lvbnMoZXh0ZW5zaW9uc190b19yZXF1ZXN0KSkpCiAKICAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKLSAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kYWxsKGZpZWxkKQorICAgICAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoZmllbGQuZW5jb2RlKCkpCiAKLSAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoJ1xyXG4nKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChiJ1xyXG4nKQogCiAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnU2VudCBjbGllbnRcJ3Mgb3BlbmluZyBoYW5kc2hha2UgaGVhZGVyczogJXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzKQogICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1N0YXJ0IHJlYWRpbmcgU3RhdHVzLUxpbmUnKQogCi0gICAgICAgIHN0YXR1c19saW5lID0gJycKKyAgICAgICAgc3RhdHVzX2xpbmUgPSBiJycKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGNoID0gX3JlY2VpdmVfYnl0ZXMoc2VsZi5fc29ja2V0LCAxKQogICAgICAgICAgICAgc3RhdHVzX2xpbmUgKz0gY2gKLSAgICAgICAgICAgIGlmIGNoID09ICdcbic6CisgICAgICAgICAgICBpZiBjaCA9PSBiJ1xuJzoKICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgIG0gPSByZS5tYXRjaCgnSFRUUC9cXGQrXC5cXGQrIChcXGRcXGRcXGQpIC4qXHJcbicsIHN0YXR1c19saW5lKQorICAgICAgICBtID0gcmUubWF0Y2goYidIVFRQL1xcZCtcLlxcZCsgKFxcZFxcZFxcZCkgLipcclxuJywgc3RhdHVzX2xpbmUpCiAgICAgICAgIGlmIG0gaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAogICAgICAgICAgICAgICAgICdXcm9uZyBzdGF0dXMgbGluZSBmb3JtYXQ6ICVyJyAlIHN0YXR1c19saW5lKQpAQCAtNTAwLDcgKzQ5OCw3IEBACiAgICAgICAgIGZpZWxkcyA9IHNlbGYuX3JlYWRfZmllbGRzKCkKIAogICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKLSAgICAgICAgaWYgY2ggIT0gJ1xuJzogICMgMHgwQQorICAgICAgICBpZiBjaCAhPSBiJ1xuJzogICMgMHgwQQogICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIExGIGJ1dCBmb3VuZCAlciB3aGlsZSByZWFkaW5nIHZhbHVlICVyIGZvciBoZWFkZXIgJwogICAgICAgICAgICAgICAgICduYW1lICVyJyAlIChjaCwgdmFsdWUsIG5hbWUpKQpAQCAtNTI2LDcgKzUyNCw3IEBACiAgICAgICAgICMgVmFsaWRhdGUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYmluYXJ5X2FjY2VwdCA9IGJhc2U2NC5iNjRkZWNvZGUoYWNjZXB0KQotICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ0lsbGVnYWwgdmFsdWUgZm9yIGhlYWRlciAlczogJXInICUKICAgICAgICAgICAgICAgICAoY29tbW9uLlNFQ19XRUJTT0NLRVRfQUNDRVBUX0hFQURFUiwgYWNjZXB0KSkKQEAgLTU0OCw3ICs1NDYsNyBAQAogICAgICAgICAgICAgJ0V4cGVjdGVkIHJlc3BvbnNlIGZvciBjaGFsbGVuZ2U6ICVyICglcyknLAogICAgICAgICAgICAgZXhwZWN0ZWRfYWNjZXB0LCB1dGlsLmhleGlmeShiaW5hcnlfZXhwZWN0ZWRfYWNjZXB0KSkKIAotICAgICAgICBpZiBhY2NlcHQgIT0gZXhwZWN0ZWRfYWNjZXB0OgorICAgICAgICBpZiBhY2NlcHQgIT0gZXhwZWN0ZWRfYWNjZXB0LmRlY29kZSgpOgogICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ0ludmFsaWQgJXMgaGVhZGVyOiAlciAoZXhwZWN0ZWQ6ICVzKScgJQogICAgICAgICAgICAgICAgIChjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVSLCBhY2NlcHQsIGV4cGVjdGVkX2FjY2VwdCkpCkBAIC02NjIsMTUgKzY2MCwxNSBAQAogICAgICAgICAjIFJFVFVSTiBVKzAwMEEgTElORSBGRUVEIGNoYXJhY3RlciBwYWlyIChDUkxGKS4KICAgICAgICAgcmFuZG9tLnNodWZmbGUoZmllbGRzKQogICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgotICAgICAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoZmllbGQpCisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChmaWVsZC5lbmNvZGUoKSkKICAgICAgICAgIyA0LjEgMjUuIHNlbmQgYSBVVEYtOC1lbmNvZGVkIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gVSswMDBBIExJTkUgRkVFRAogICAgICAgICAjIGNoYXJhY3RlciBwYWlyIChDUkxGKS4KLSAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoJ1xyXG4nKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZGFsbChiJ1xyXG4nKQogICAgICAgICAjIDQuMSAyNi4gbGV0IC9rZXkzLyBiZSBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGVpZ2h0IHJhbmRvbSBieXRlcyAob3IKICAgICAgICAgIyBlcXVpdmFsZW50bHksIGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2VyIGVuY29kZWQgaW4gYSBiaWctZW5kaWFuIG9yZGVyKS4KICAgICAgICAgc2VsZi5fa2V5MyA9IHNlbGYuX2dlbmVyYXRlX2tleTMoKQogICAgICAgICAjIDQuMSAyNy4gc2VuZCAva2V5My8gdG8gdGhlIHNlcnZlci4KLSAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoc2VsZi5fa2V5MykKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmRhbGwoc2VsZi5fa2V5My5lbmNvZGUoKSkKICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAogICAgICAgICAgICAgJ0tleTM6ICVyICglcyknLCBzZWxmLl9rZXkzLCB1dGlsLmhleGlmeShzZWxmLl9rZXkzKSkKIApAQCAtNjc5LDE5ICs2NzcsMTkgQEAKICAgICAgICAgIyA0LjEgMjguIFJlYWQgYnl0ZXMgZnJvbSB0aGUgc2VydmVyIHVudGlsIGVpdGhlciB0aGUgY29ubmVjdGlvbgogICAgICAgICAjIGNsb3Nlcywgb3IgYSAweDBBIGJ5dGUgaXMgcmVhZC4gbGV0IC9maWVsZC8gYmUgdGhlc2UgYnl0ZXMsIGluY2x1ZGluZwogICAgICAgICAjIHRoZSAweDBBIGJ5dGVzLgotICAgICAgICBmaWVsZCA9ICcnCisgICAgICAgIGZpZWxkID0gYicnCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBjaCA9IF9yZWNlaXZlX2J5dGVzKHNlbGYuX3NvY2tldCwgMSkKICAgICAgICAgICAgIGZpZWxkICs9IGNoCi0gICAgICAgICAgICBpZiBjaCA9PSAnXG4nOgorICAgICAgICAgICAgaWYgY2ggPT0gYidcbic6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgIyBpZiAvZmllbGQvIGlzIG5vdCBhdCBsZWFzdCBzZXZlbiBieXRlcyBsb25nLCBvciBpZiB0aGUgbGFzdAogICAgICAgICAjIHR3byBieXRlcyBhcmVuJ3QgMHgwRCBhbmQgMHgwQSByZXNwZWN0aXZlbHksIG9yIGlmIGl0IGRvZXMgbm90CiAgICAgICAgICMgY29udGFpbiBhdCBsZWFzdCB0d28gMHgyMCBieXRlcywgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbgogICAgICAgICAjIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KLSAgICAgICAgaWYgbGVuKGZpZWxkKSA8IDcgb3Igbm90IGZpZWxkLmVuZHN3aXRoKCdcclxuJyk6CisgICAgICAgIGlmIGxlbihmaWVsZCkgPCA3IG9yIG5vdCBmaWVsZC5lbmRzd2l0aChiJ1xyXG4nKToKICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKCdXcm9uZyBzdGF0dXMgbGluZTogJXInICUgZmllbGQpCi0gICAgICAgIG0gPSByZS5tYXRjaCgnW14gXSogKFteIF0qKSAuKicsIGZpZWxkKQorICAgICAgICBtID0gcmUubWF0Y2goYidbXiBdKiAoW14gXSopIC4qJywgZmllbGQpCiAgICAgICAgIGlmIG0gaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAogICAgICAgICAgICAgICAgICdObyBIVFRQIHN0YXR1cyBjb2RlIGZvdW5kIGluIHN0YXR1cyBsaW5lOiAlcicgJSBmaWVsZCkKQEAgLTcwMiwxMyArNzAwLDEzIEBACiAgICAgICAgICMgNC4xIDMwLiBpZiAvY29kZS8gaXMgbm90IHRocmVlIGJ5dGVzIGxvbmcsIG9yIGlmIGFueSBvZiB0aGUgYnl0ZXMgaW4KICAgICAgICAgIyAvY29kZS8gYXJlIG5vdCBpbiB0aGUgcmFuZ2UgMHgzMCB0byAweDkwLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldAogICAgICAgICAjIGNvbm5lY3Rpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXBzLgotICAgICAgICBpZiBub3QgcmUubWF0Y2goJ1swLTldWzAtOV1bMC05XScsIGNvZGUpOgorICAgICAgICBpZiBub3QgcmUubWF0Y2goYidbMC05XVswLTldWzAtOV0nLCBjb2RlKToKICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKAogICAgICAgICAgICAgICAgICdIVFRQIHN0YXR1cyBjb2RlICVyIGlzIG5vdCB0aHJlZSBkaWdpdCBpbiBzdGF0dXMgbGluZTogJXInICUKICAgICAgICAgICAgICAgICAoY29kZSwgZmllbGQpKQogICAgICAgICAjIDQuMSAzMS4gaWYgL2NvZGUvLCBpbnRlcnByZXRlZCBhcyBVVEYtOCwgaXMgIjEwMSIsIHRoZW4gbW92ZSB0byB0aGUKICAgICAgICAgIyBuZXh0IHN0ZXAuCi0gICAgICAgIGlmIGNvZGUgIT0gJzEwMSc6CisgICAgICAgIGlmIGNvZGUgIT0gYicxMDEnOgogICAgICAgICAgICAgcmFpc2UgQ2xpZW50SGFuZHNoYWtlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIEhUVFAgc3RhdHVzIGNvZGUgMTAxIGJ1dCBmb3VuZCAlciBpbiBzdGF0dXMgbGluZTogJwogICAgICAgICAgICAgICAgICclcicgJSAoY29kZSwgZmllbGQpKQpAQCAtNzE3LDcgKzcxNSw3IEBACiAgICAgICAgICMgNC4xIDQwLiBfRmllbGRzIHByb2Nlc3NpbmdfCiAgICAgICAgICMgcmVhZCBhIGJ5dGUgZnJvbSBzZXJ2ZXIKICAgICAgICAgY2ggPSBfcmVjZWl2ZV9ieXRlcyhzZWxmLl9zb2NrZXQsIDEpCi0gICAgICAgIGlmIGNoICE9ICdcbic6ICAjIDB4MEEKKyAgICAgICAgaWYgY2ggIT0gYidcbic6ICAjIDB4MEEKICAgICAgICAgICAgIHJhaXNlIENsaWVudEhhbmRzaGFrZUVycm9yKCdFeHBlY3RlZCBMRiBidXQgZm91bmQgJXInICUgY2gpCiAgICAgICAgICMgNC4xIDQxLiBjaGVjayAvZmllbGRzLwogICAgICAgICAjIFRPRE8odWthaSk6IHByb3RvY29sCkBAIC04MDAsMTMgKzc5OCwxMyBAQAogICAgICAgICAjIHBvc2l0aW9ucy4KICAgICAgICAgYXZhaWxhYmxlX2NoYXJzID0gcmFuZ2UoMHgyMSwgMHgyZiArIDEpICsgcmFuZ2UoMHgzYSwgMHg3ZSArIDEpCiAgICAgICAgIG4gPSByYW5kb20ucmFuZGludCgxLCAxMikKLSAgICAgICAgZm9yIF8gaW4geHJhbmdlKG4pOgorICAgICAgICBmb3IgXyBpbiByYW5nZShuKToKICAgICAgICAgICAgIGNoID0gcmFuZG9tLmNob2ljZShhdmFpbGFibGVfY2hhcnMpCiAgICAgICAgICAgICBwb3MgPSByYW5kb20ucmFuZGludCgwLCBsZW4oa2V5KSkKICAgICAgICAgICAgIGtleSA9IGtleVswOnBvc10gKyBjaHIoY2gpICsga2V5W3BvczpdCiAgICAgICAgICMgNC4xIDIyLiBpbnNlcnQgL3NwYWNlc19uLyBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVycyBpbnRvIC9rZXlfbi8gYXQKICAgICAgICAgIyByYW5kb20gcG9zaXRpb25zIG90aGVyIHRoYW4gc3RhcnQgb3IgZW5kIG9mIHRoZSBzdHJpbmcuCi0gICAgICAgIGZvciBfIGluIHhyYW5nZShzcGFjZXMpOgorICAgICAgICBmb3IgXyBpbiByYW5nZShzcGFjZXMpOgogICAgICAgICAgICAgcG9zID0gcmFuZG9tLnJhbmRpbnQoMSwgbGVuKGtleSkgLSAxKQogICAgICAgICAgICAga2V5ID0ga2V5WzA6cG9zXSArICcgJyArIGtleVtwb3M6XQogICAgICAgICByZXR1cm4gbnVtYmVyLCBrZXkKQEAgLTgxNCw3ICs4MTIsNyBAQAogICAgIGRlZiBfZ2VuZXJhdGVfa2V5MyhzZWxmKToKICAgICAgICAgIyA0LjEgMjYuIGxldCAva2V5My8gYmUgYSBzdHJpbmcgY29uc2lzdGluZyBvZiBlaWdodCByYW5kb20gYnl0ZXMgKG9yCiAgICAgICAgICMgZXF1aXZhbGVudGx5LCBhIHJhbmRvbSA2NCBiaXQgaW50ZWdlciBlbmNvZGVkIGluIGEgYmlnLWVuZGlhbiBvcmRlcikuCi0gICAgICAgIHJldHVybiAnJy5qb2luKFtjaHIocmFuZG9tLnJhbmRpbnQoMCwgMjU1KSkgZm9yIF8gaW4geHJhbmdlKDgpXSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oW2NocihyYW5kb20ucmFuZGludCgwLCAyNTUpKSBmb3IgXyBpbiByYW5nZSg4KV0pCiAKIAogY2xhc3MgQ2xpZW50Q29ubmVjdGlvbihvYmplY3QpOgpAQCAtOTQwLDE1ICs5MzgsMTUgQEAKICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX29wdGlvbnMubWVzc2FnZS5zcGxpdCgnLCcpOgogICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5zZW5kX21lc3NhZ2UobGluZSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICdTZW5kOiAlcycgJSBsaW5lCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdTZW5kOiAlcycgJSBsaW5lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgPSBzZWxmLl9zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKIAogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnUmVjdjogJXMnICUgcmVjZWl2ZWQKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1JlY3Y6ICVzJyAlIHJlY2VpdmVkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0Vycm9yOiAlcycgJSBlCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnRXJyb3I6ICVzJyAlIGUpCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgICAgIHNlbGYuX2RvX2Nsb3NpbmdfaGFuZHNoYWtlKCkKQEAgLTk2NCwyMCArOTYyLDIzIEBACiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnV2FpdCBmb3Igc2VydmVyLWluaXRpYXRlZCBjbG9zaW5nIGhhbmRzaGFrZScpCiAgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCiAgICAgICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ1JlY3YgY2xvc2UnCi0gICAgICAgICAgICAgICAgcHJpbnQgJ1NlbmQgYWNrJworICAgICAgICAgICAgICAgIHByaW50KCdSZWN2IGNsb3NlJykKKyAgICAgICAgICAgICAgICBwcmludCgnU2VuZCBhY2snKQogICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKAogICAgICAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNlbnQgYWNrJykKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcHJpbnQgJ1NlbmQgY2xvc2UnCisgICAgICAgIHByaW50KCdTZW5kIGNsb3NlJykKICAgICAgICAgc2VsZi5fc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQogICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2VudCBjbG9zaW5nIGhhbmRzaGFrZScpCi0gICAgICAgIHByaW50ICdSZWN2IGFjaycKKyAgICAgICAgcHJpbnQoJ1JlY3YgYWNrJykKICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1JlY2VpdmVkIGFjaycpCiAKIAogZGVmIG1haW4oKToKLSAgICBzeXMuc3Rkb3V0ID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzeXMuc3Rkb3V0KQorICAgIGlmIHNpeC5QWTI6CisgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgZW5jb2RpbmcgPSBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICAgICAgICBzeXMuc3Rkb3V0ID0gY29kZWNzLmdldHdyaXRlcihlbmNvZGluZykoc3lzLnN0ZG91dCkKIAogICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigpCiAgICAgIyBXZSBhY2NlcHQgLS1jb21tYW5kX2xpbmVfZmxhZyBzdHlsZSBmbGFncyB3aGljaCBpcyB0aGUgc2FtZSBhcyBHb29nbGUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX25vZXh0X3dzaC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX25vZXh0X3dzaC5weQppbmRleCAxZGY1MTUxLi5lYmE1MDMyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZWNob19ub2V4dF93c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fbm9leHRfd3NoLnB5CkBAIC0yNyw2ICsyNyw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgc2l4CiAKIF9HT09EQllFX01FU1NBR0UgPSB1J0dvb2RieWUnCiAKQEAgLTUwLDcgKzUxLDcgQEAKICAgICAgICAgbGluZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCiAgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHVuaWNvZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHNpeC50ZXh0X3R5cGUpOgogICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKGxpbmUsIGJpbmFyeT1GYWxzZSkKICAgICAgICAgICAgIGlmIGxpbmUgPT0gX0dPT0RCWUVfTUVTU0FHRToKICAgICAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX3dzaC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvZXhhbXBsZS9lY2hvX3dzaC5weQppbmRleCAzODY0NmMzLi5mN2IzYzZjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL2V4YW1wbGUvZWNob193c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9leGFtcGxlL2VjaG9fd3NoLnB5CkBAIC0yNyw2ICsyNyw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgc2l4CiAKIF9HT09EQllFX01FU1NBR0UgPSB1J0dvb2RieWUnCiAKQEAgLTQzLDcgKzQ0LDcgQEAKICAgICAgICAgbGluZSA9IHJlcXVlc3Qud3Nfc3RyZWFtLnJlY2VpdmVfbWVzc2FnZSgpCiAgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHVuaWNvZGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHNpeC50ZXh0X3R5cGUpOgogICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKGxpbmUsIGJpbmFyeT1GYWxzZSkKICAgICAgICAgICAgIGlmIGxpbmUgPT0gX0dPT0RCWUVfTUVTU0FHRToKICAgICAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1fYmFzZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1fYmFzZS5weQppbmRleCA4MjM1NjY2Li4yODkyYjRmIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2Jhc2UucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9iYXNlLnB5CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmluZyAlZCBieXRlIGZhaWxlZC4gUGVlciAoJXIpIGNsb3NlZCBjb25uZWN0aW9uJyAlCiAgICAgICAgICAgICAgICAgICAgIChsZW5ndGgsIChzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ucmVtb3RlX2FkZHIsKSkpCiAgICAgICAgICAgICByZXR1cm4gcmVhZF9ieXRlcwotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENhdGNoIGEgc29ja2V0LmVycm9yLiBCZWNhdXNlIGl0J3Mgbm90IGEgY2hpbGQgY2xhc3Mgb2YgdGhlCiAgICAgICAgICAgICAjIElPRXJyb3IgcHJpb3IgdG8gUHl0aG9uIDIuNiwgd2UgY2Fubm90IG9taXQgdGhpcyBleGNlcHQgY2xhdXNlLgogICAgICAgICAgICAgIyBVc2UgJXMgcmF0aGVyIHRoYW4gJXIgZm9yIHRoZSBleGNlcHRpb24gdG8gdXNlIGh1bWFuIGZyaWVuZGx5CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICdSZWNlaXZpbmcgJWQgYnl0ZSBmYWlsZWQuIHNvY2tldC5lcnJvciAoJXMpIG9jY3VycmVkJyAlCiAgICAgICAgICAgICAgICAgKGxlbmd0aCwgZSkpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgIyBBbHNvIGNhdGNoIGFuIElPRXJyb3IgYmVjYXVzZSBtb2RfcHl0aG9uIHRocm93cyBpdC4KICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICdSZWNlaXZpbmcgJWQgYnl0ZSBmYWlsZWQuIElPRXJyb3IgKCVzKSBvY2N1cnJlZCcgJQpAQCAtMTM5LDcgKzEzOSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGJ5dGVzX3RvX3dyaXRlKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvICVyOiAnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLnJlbW90ZV9hZGRyLCksCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgIG5ld19yZWFkX2J5dGVzID0gc2VsZi5fcmVhZChsZW5ndGgpCiAgICAgICAgICAgICByZWFkX2J5dGVzLmFwcGVuZChuZXdfcmVhZF9ieXRlcykKICAgICAgICAgICAgIGxlbmd0aCAtPSBsZW4obmV3X3JlYWRfYnl0ZXMpCi0gICAgICAgIHJldHVybiAnJy5qb2luKHJlYWRfYnl0ZXMpCisgICAgICAgIHJldHVybiBiJycuam9pbihyZWFkX2J5dGVzKQogCiAgICAgZGVmIF9yZWFkX3VudGlsKHNlbGYsIGRlbGltX2NoYXIpOgogICAgICAgICAiIiJSZWFkcyBieXRlcyB1bnRpbCB3ZSBlbmNvdW50ZXIgZGVsaW1fY2hhci4gVGhlIHJlc3VsdCB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oeWJpLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvX3N0cmVhbV9oeWJpLnB5CmluZGV4IGE4YTQ5ZTMuLjE5NjdmZjggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L19zdHJlYW1faHliaS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9fc3RyZWFtX2h5YmkucHkKQEAgLTM5LDYgKzM5LDcgQEAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCitpbXBvcnQgc2l4CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogCkBAIC05MCwxMSArOTEsMTEgQEAKICAgICBpZiBsZW5ndGggPCAwOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsZW5ndGggbXVzdCBiZSBub24gbmVnYXRpdmUgaW50ZWdlcicpCiAgICAgZWxpZiBsZW5ndGggPD0gMTI1OgotICAgICAgICByZXR1cm4gY2hyKG1hc2tfYml0IHwgbGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RydWN0LnBhY2soJyFCJywgbWFza19iaXQgfCBsZW5ndGgpCiAgICAgZWxpZiBsZW5ndGggPCAoMSA8PCAxNik6Ci0gICAgICAgIHJldHVybiBjaHIobWFza19iaXQgfCAxMjYpICsgc3RydWN0LnBhY2soJyFIJywgbGVuZ3RoKQorICAgICAgICByZXR1cm4gc3RydWN0LnBhY2soJyFCJywgbWFza19iaXQgfCAxMjYpICsgc3RydWN0LnBhY2soJyFIJywgbGVuZ3RoKQogICAgIGVsaWYgbGVuZ3RoIDwgKDEgPDwgNjMpOgotICAgICAgICByZXR1cm4gY2hyKG1hc2tfYml0IHwgMTI3KSArIHN0cnVjdC5wYWNrKCchUScsIGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCchQicsIG1hc2tfYml0IHwgMTI3KSArIHN0cnVjdC5wYWNrKCchUScsIGxlbmd0aCkKICAgICBlbHNlOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdQYXlsb2FkIGlzIHRvbyBiaWcgZm9yIG9uZSBmcmFtZScpCiAKQEAgLTExNSwxMiArMTE2LDEyIEBACiAgICAgaWYgKGZpbiB8IHJzdjEgfCByc3YyIHwgcnN2MykgJiB+MToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRklOIGJpdCBhbmQgUmVzZXJ2ZWQgYml0IHBhcmFtZXRlciBtdXN0IGJlIDAgb3IgMScpCiAKLSAgICBoZWFkZXIgPSAnJworICAgIGhlYWRlciA9IGInJwogCiAgICAgZmlyc3RfYnl0ZSA9ICgoZmluIDw8IDcpCiAgICAgICAgICAgICAgICAgICB8IChyc3YxIDw8IDYpIHwgKHJzdjIgPDwgNSkgfCAocnN2MyA8PCA0KQogICAgICAgICAgICAgICAgICAgfCBvcGNvZGUpCi0gICAgaGVhZGVyICs9IGNocihmaXJzdF9ieXRlKQorICAgIGhlYWRlciArPSBzdHJ1Y3QucGFjaygnIUInLCBmaXJzdF9ieXRlKQogICAgIGhlYWRlciArPSBjcmVhdGVfbGVuZ3RoX2hlYWRlcihwYXlsb2FkX2xlbmd0aCwgbWFzaykKIAogICAgIHJldHVybiBoZWFkZXIKQEAgLTE4OSwxNiArMTkwLDE0IEBACiAKICAgICBsb2dnZXIubG9nKGNvbW1vbi5MT0dMRVZFTF9GSU5FLCAnUmVjZWl2ZSB0aGUgZmlyc3QgMiBvY3RldHMgb2YgYSBmcmFtZScpCiAKLSAgICByZWNlaXZlZCA9IHJlY2VpdmVfYnl0ZXMoMikKLQotICAgIGZpcnN0X2J5dGUgPSBvcmQocmVjZWl2ZWRbMF0pCisgICAgZmlyc3RfYnl0ZSA9IG9yZChyZWNlaXZlX2J5dGVzKDEpKQogICAgIGZpbiA9IChmaXJzdF9ieXRlID4+IDcpICYgMQogICAgIHJzdjEgPSAoZmlyc3RfYnl0ZSA+PiA2KSAmIDEKICAgICByc3YyID0gKGZpcnN0X2J5dGUgPj4gNSkgJiAxCiAgICAgcnN2MyA9IChmaXJzdF9ieXRlID4+IDQpICYgMQogICAgIG9wY29kZSA9IGZpcnN0X2J5dGUgJiAweGYKIAotICAgIHNlY29uZF9ieXRlID0gb3JkKHJlY2VpdmVkWzFdKQorICAgIHNlY29uZF9ieXRlID0gb3JkKHJlY2VpdmVfYnl0ZXMoMSkpCiAgICAgbWFzayA9IChzZWNvbmRfYnl0ZSA+PiA3KSAmIDEKICAgICBwYXlsb2FkX2xlbmd0aCA9IHNlY29uZF9ieXRlICYgMHg3ZgogCkBAIC01MDEsNyArNTAwLDcgQEAKICAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIHNlbmRfbWVzc2FnZSBhZnRlciBzZW5kaW5nIG91dCBhIGNsb3NpbmcgaGFuZHNoYWtlJykKIAotICAgICAgICBpZiBiaW5hcnkgYW5kIGlzaW5zdGFuY2UobWVzc2FnZSwgdW5pY29kZSk6CisgICAgICAgIGlmIHNpeC5QWTIgYW5kIGJpbmFyeSBhbmQgaXNpbnN0YW5jZShtZXNzYWdlLCB1bmljb2RlKToKICAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAnTWVzc2FnZSBmb3IgYmluYXJ5IGZyYW1lIG11c3QgYmUgaW5zdGFuY2Ugb2Ygc3RyJykKIApAQCAtNTM4LDcgKzUzNyw3IEBACiAgICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBvbmUgZnJhbWUgaXMgc2VudC4KICAgICAgICAgICAgICAgICBpZiBsZW4obWVzc2FnZSkgPD0gYnl0ZXNfd3JpdHRlbjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBCYWRPcGVyYXRpb25FeGNlcHRpb24oZSkKIAogICAgIGRlZiBfZ2V0X21lc3NhZ2VfZnJvbV9mcmFtZShzZWxmLCBmcmFtZSk6CkBAIC02NzcsNyArNjc2LDcgQEAKICAgICAgICAgICAgIGlmIGhhbmRsZXI6CiAgICAgICAgICAgICAgICAgaGFuZGxlcihzZWxmLl9yZXF1ZXN0LCBtZXNzYWdlKQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLl9zZW5kX3BvbmcobWVzc2FnZSkKIApAQCAtNzA0LDcgKzcwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRfcGluZ3MuYXBwZW5kKGV4cGVjdGVkX2JvZHkpCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBUaGUgcmVjZWl2ZWQgcG9uZyB3YXMgdW5zb2xpY2l0ZWQgcG9uZy4gS2VlcCB0aGUKICAgICAgICAgICAgICAgICAjIHBpbmcgcXVldWUgYXMgaXMuCiAgICAgICAgICAgICAgICAgc2VsZi5fcGluZ19xdWV1ZSA9IGluZmxpZ2h0X3BpbmdzCkBAIC03MTUsNyArNzE0LDcgQEAKICAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxmLl9yZXF1ZXN0Lm9uX3BvbmdfaGFuZGxlcgogICAgICAgICAgICAgaWYgaGFuZGxlcjoKICAgICAgICAgICAgICAgICBoYW5kbGVyKHNlbGYuX3JlcXVlc3QsIG1lc3NhZ2UpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgcmVjZWl2ZV9tZXNzYWdlKHNlbGYpOgpAQCAtNzgwLDcgKzc3OSw3IEBACiAgICAgICAgICAgICAgICAgIyBDSEFSQUNURVIuCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZFVURjhFeGNlcHRpb24oZSkKICAgICAgICAgICAgIGVsaWYgc2VsZi5fb3JpZ2luYWxfb3Bjb2RlID09IGNvbW1vbi5PUENPREVfQklOQVJZOgogICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlCkBAIC04MzAsNyArODI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgJ2Nsb3NlIHJlYXNvbiBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgaWYgY29kZSBpcyBOb25lJykKICAgICAgICAgICAgIHJlYXNvbiA9ICcnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZWFzb24sIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKHJlYXNvbiwgdW5pY29kZSk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZWFzb24sIHNpeC5zdHJpbmdfdHlwZXMpOgogICAgICAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgJ2Nsb3NlIHJlYXNvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIHN0ciBvciB1bmljb2RlJykKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvY29tbW9uLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvY29tbW9uLnB5CmluZGV4IDJmYzJlYWQuLjBhYzIzYzggMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2NvbW1vbi5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9jb21tb24ucHkKQEAgLTc5LDcgKzc5LDcgQEAKIE9QQ09ERV9QT05HID0gMHhhCiAKICMgVVVJRHMgdXNlZCBieSBIeUJpIDA0IGFuZCBsYXRlciBvcGVuaW5nIGhhbmRzaGFrZSBhbmQgZnJhbWUgbWFza2luZy4KLVdFQlNPQ0tFVF9BQ0NFUFRfVVVJRCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnCitXRUJTT0NLRVRfQUNDRVBUX1VVSUQgPSBiJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMScKIAogIyBPcGVuaW5nIGhhbmRzaGFrZSBoZWFkZXIgbmFtZXMgYW5kIGV4cGVjdGVkIHZhbHVlcy4KIFVQR1JBREVfSEVBREVSID0gJ1VwZ3JhZGUnCkBAIC0yMzUsNyArMjM1LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBfcGFyc2VfZXh0ZW5zaW9uX3BhcmFtKHN0YXRlLCBleHRlbnNpb24pCi0gICAgICAgIGV4Y2VwdCBFeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgRXh0ZW5zaW9uUGFyc2luZ0V4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXh0ZW5zaW9uUGFyc2luZ0V4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIHBhcmFtZXRlciBmb3IgJXIgKCVyKScgJQogICAgICAgICAgICAgICAgIChleHRlbnNpb25fdG9rZW4sIGUpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQppbmRleCA5NmM5MWUwLi4yNTkxZmU4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQpAQCAtMTQzLDcgKzE0Myw3IEBACiAKICAgICBnbG9iYWxfZGljID0ge30KICAgICB0cnk6Ci0gICAgICAgIGV4ZWMgaGFuZGxlcl9kZWZpbml0aW9uIGluIGdsb2JhbF9kaWMKKyAgICAgICAgZXhlYyhoYW5kbGVyX2RlZmluaXRpb24sIGdsb2JhbF9kaWMpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFeGNlcHRpb24oJ0Vycm9yIGluIHNvdXJjaW5nIGhhbmRsZXI6JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCkBAIC0yNTQsMTIgKzI1NCwxMiBAQAogICAgICAgICBkb19leHRyYV9oYW5kc2hha2VfID0gaGFuZGxlcl9zdWl0ZS5kb19leHRyYV9oYW5kc2hha2UKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZG9fZXh0cmFfaGFuZHNoYWtlXyhyZXF1ZXN0KQotICAgICAgICBleGNlcHQgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgIyBSZS1yYWlzZSB0byB0ZWxsIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB0byBmaW5pc2ggdGhpcwogICAgICAgICAgICAgIyBjb25uZWN0aW9uIHdpdGhvdXQgc2VuZGluZyBhbnkgZXJyb3IuCiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHV0aWwucHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgJyVzIHJhaXNlZCBleGNlcHRpb24gZm9yICVzOiAnICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ET19FWFRSQV9IQU5EU0hBS0VfSEFORExFUl9OQU1FLApAQCAtMjk2LDI4ICsyOTYsMjggQEAKICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0LnNlcnZlcl90ZXJtaW5hdGVkOgogICAgICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oKQogICAgICAgICAjIENhdGNoIG5vbi1jcml0aWNhbCBleGNlcHRpb25zIHRoZSBoYW5kbGVyIGRpZG4ndCBoYW5kbGUuCi0gICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5BYm9ydGVkQnlVc2VyRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBtc2d1dGlsLkJhZE9wZXJhdGlvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQmFkT3BlcmF0aW9uRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJyVzJywgZSkKICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLmNsb3NlX2Nvbm5lY3Rpb24oCiAgICAgICAgICAgICAgICAgY29tbW9uLlNUQVRVU19JTlRFUk5BTF9FTkRQT0lOVF9FUlJPUikKLSAgICAgICAgZXhjZXB0IG1zZ3V0aWwuSW52YWxpZEZyYW1lRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgbXNndXRpbC5JbnZhbGlkRnJhbWVFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICMgSW52YWxpZEZyYW1lRXhjZXB0aW9uIG11c3QgYmUgY2F1Z2h0IGJlZm9yZQogICAgICAgICAgICAgIyBDb25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbiB0aGF0IGNhdGNoZXMgSW52YWxpZEZyYW1lRXhjZXB0aW9uLgogICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcycsIGUpCiAgICAgICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5jbG9zZV9jb25uZWN0aW9uKGNvbW1vbi5TVEFUVVNfUFJPVE9DT0xfRVJST1IpCi0gICAgICAgIGV4Y2VwdCBtc2d1dGlsLlVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBtc2d1dGlsLlVuc3VwcG9ydGVkRnJhbWVFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQogICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVjdGlvbihjb21tb24uU1RBVFVTX1VOU1VQUE9SVEVEX0RBVEEpCi0gICAgICAgIGV4Y2VwdCBzdHJlYW0uSW52YWxpZFVURjhFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBzdHJlYW0uSW52YWxpZFVURjhFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQogICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uY2xvc2VfY29ubmVjdGlvbigKICAgICAgICAgICAgICAgICBjb21tb24uU1RBVFVTX0lOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBKQotICAgICAgICBleGNlcHQgbXNndXRpbC5Db25uZWN0aW9uVGVybWluYXRlZEV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IG1zZ3V0aWwuQ29ubmVjdGlvblRlcm1pbmF0ZWRFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAjIEFueSBvdGhlciBleGNlcHRpb25zIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGNhbGxlciBvZiB0aGlzCiAgICAgICAgICAgICAjIGZ1bmN0aW9uLgogICAgICAgICAgICAgdXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKApAQCAtMzc5LDcgKzM3OSw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBoYW5kbGVyX3N1aXRlID0gX3NvdXJjZV9oYW5kbGVyX2ZpbGUob3BlbihwYXRoKS5yZWFkKCkpCi0gICAgICAgICAgICBleGNlcHQgRGlzcGF0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHQgRGlzcGF0Y2hFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLl9zb3VyY2Vfd2FybmluZ3MuYXBwZW5kKCclczogJXMnICUgKHBhdGgsIGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXNvdXJjZSA9IGNvbnZlcnQocGF0aCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9leHRlbnNpb25zLnB5CmluZGV4IDQ5YTlmZGMuLmIwMmQ3ZTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2V4dGVuc2lvbnMucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvZXh0ZW5zaW9ucy5weQpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fV0lORE9XX0JJVFNfUEFSQU0pCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2luZG93X2JpdHMgPSBfcGFyc2Vfd2luZG93X2JpdHMod2luZG93X2JpdHMpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICAgICBub19jb250ZXh0X3Rha2VvdmVyID0gc2VsZi5fcmVxdWVzdC5oYXNfcGFyYW1ldGVyKApAQCAtNDc0LDcgKzQ3NCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VydmVyX21heF93aW5kb3dfYml0cyA9IF9wYXJzZV93aW5kb3dfYml0cygKICAgICAgICAgICAgICAgICAgICAgc2VydmVyX21heF93aW5kb3dfYml0cykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0JhZCAlcyBwYXJhbWV0ZXI6ICVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fU0VSVkVSX01BWF9XSU5ET1dfQklUU19QQVJBTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSkKQEAgLTgzOCw3ICs4MzgsNyBAQAogICAgICAgICBpZiBxdW90YSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBxdW90YSA9IGludChxdW90YSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgaWYgcXVvdGEgPCAwIG9yIHF1b3RhID49IDIgKiogMzI6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fX2luaXRfXy5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fX2luaXRfXy5weQppbmRleCAxOTRmNmIzLi43MDcyNjNhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX19pbml0X18ucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19faW5pdF9fLnB5CkBAIC05MCwxNSArOTAsMTUgQEAKICAgICAgICAgICAgIGhhbmRzaGFrZXIuZG9faGFuZHNoYWtlKCkKICAgICAgICAgICAgIF9MT0dHRVIuaW5mbygnRXN0YWJsaXNoZWQgKCVzIHByb3RvY29sKScsIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNvbXBsZXRlIG9wZW5pbmcgaGFuZHNoYWtlIGFzICVzIHByb3RvY29sOiAlcicsCiAgICAgICAgICAgICAgICAgbmFtZSwgZSkKICAgICAgICAgICAgIGlmIGUuc3RhdHVzOgogICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgZXhjZXB0IEFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBBYm9ydGVkQnlVc2VyRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IFZlcnNpb25FeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJhaXNlCiAKICAgICAjIFRPRE8odG95b3NoaW0pOiBBZGQgYSB0ZXN0IHRvIGNvdmVyIHRoZSBjYXNlIGFsbCBoYW5kc2hha2VycyBmYWlsLgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlL19iYXNlLnB5CmluZGV4IGM5OTNhNTguLjBhZjA1MjQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9fYmFzZS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvX2Jhc2UucHkKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICByZXR1cm4gZmllbGRzWzBdLCBnZXRfZGVmYXVsdF9wb3J0KHJlcXVlc3QuaXNfaHR0cHMoKSkKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBmaWVsZHNbMF0sIGludChmaWVsZHNbMV0pCi0gICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKCdJbnZhbGlkIHBvcnQgbnVtYmVyIGZvcm1hdDogJXInICUgZSkKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UvaHliaS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5CmluZGV4IDFhZDEwZWEuLjEwMjJiYTYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS9oeWJpLnB5CkBAIC00Myw2ICs0Myw3IEBACiAKIAogaW1wb3J0IGJhc2U2NAorZnJvbSBoYXNobGliIGltcG9ydCBzaGExCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKQEAgLTgxLDEzICs4MiwyMiBAQAogICAgIFNlYy1XZWJTb2NrZXQtS2V5IGhlYWRlci4KICAgICAiIiIKIAotICAgIGFjY2VwdF9iaW5hcnkgPSB1dGlsLnNoYTFfaGFzaCgKLSAgICAgICAga2V5ICsgY29tbW9uLldFQlNPQ0tFVF9BQ0NFUFRfVVVJRCkuZGlnZXN0KCkKKyAgICBhY2NlcHRfYmluYXJ5ID0gc2hhMShrZXkgKyBjb21tb24uV0VCU09DS0VUX0FDQ0VQVF9VVUlEKS5kaWdlc3QoKQogICAgIGFjY2VwdCA9IGJhc2U2NC5iNjRlbmNvZGUoYWNjZXB0X2JpbmFyeSkKIAogICAgIHJldHVybiAoYWNjZXB0LCBhY2NlcHRfYmluYXJ5KQogCiAKK2RlZiBjb21wdXRlX2FjY2VwdF9mcm9tX3VuaWNvZGUodW5pY29kZV9rZXkpOgorICAgICIiIkEgd3JhcHBlciBmdW5jdGlvbiBmb3IgY29tcHV0ZV9hY2NlcHQgd2hpY2ggdGFrZXMgYSB1bmljb2RlIHN0cmluZyBhcyBhbgorICAgIGFyZ3VtZW50LCBhbmQgZW5jb2RlcyBpdCB0byBieXRlIHN0cmluZy4gSXQgdGhlbiBwYXNzZXMgaXQgb24gdG8KKyAgICBjb21wdXRlX2FjY2VwdC4KKyAgICAiIiIKKworICAgIGtleSA9IHVuaWNvZGVfa2V5LmVuY29kZSgnVVRGLTgnKQorICAgIHJldHVybiBjb21wdXRlX2FjY2VwdChrZXkpWzBdCisKKwogY2xhc3MgSGFuZHNoYWtlcihvYmplY3QpOgogICAgICIiIk9wZW5pbmcgaGFuZHNoYWtlIHByb2Nlc3NvciBmb3IgdGhlIFdlYlNvY2tldCBwcm90b2NvbCAoUkZDIDY0NTUpLiIiIgogCkBAIC0xMTIsNyArMTIyLDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uZWN0aW9uX3Rva2VucyA9IHBhcnNlX3Rva2VuX2xpc3QoY29ubmVjdGlvbikKLSAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gcGFyc2UgJXM6ICVzJyAlIChjb21tb24uQ09OTkVDVElPTl9IRUFERVIsIGUpKQogCkBAIC0xODIsOCArMTkyLDggQEAKIAogICAgICAgICAgICAgIyBFeHRyYSBoYW5kc2hha2UgaGFuZGxlciBtYXkgbW9kaWZ5L3JlbW92ZSBwcm9jZXNzb3JzLgogICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hlci5kb19leHRyYV9oYW5kc2hha2Uoc2VsZi5fcmVxdWVzdCkKLSAgICAgICAgICAgIHByb2Nlc3NvcnMgPSBmaWx0ZXIobGFtYmRhIHByb2Nlc3NvcjogcHJvY2Vzc29yIGlzIG5vdCBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX2V4dGVuc2lvbl9wcm9jZXNzb3JzKQorICAgICAgICAgICAgcHJvY2Vzc29ycyA9IGxpc3QoZmlsdGVyKGxhbWJkYSBwcm9jZXNzb3I6IHByb2Nlc3NvciBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19leHRlbnNpb25fcHJvY2Vzc29ycykpCiAKICAgICAgICAgICAgICMgQXNrIGVhY2ggcHJvY2Vzc29yIGlmIHRoZXJlIGFyZSBleHRlbnNpb25zIG9uIHRoZSByZXF1ZXN0IHdoaWNoCiAgICAgICAgICAgICAjIGNhbm5vdCBjby1leGlzdC4gV2hlbiBwcm9jZXNzb3IgZGVjaWRlZCBvdGhlciBwcm9jZXNzb3JzIGNhbm5vdApAQCAtMTk0LDggKzIwNCw4IEBACiAgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc29yLmlzX2FjdGl2ZSgpOgogICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IuY2hlY2tfY29uc2lzdGVuY3lfd2l0aF9vdGhlcl9wcm9jZXNzb3JzKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29ycykKLSAgICAgICAgICAgIHByb2Nlc3NvcnMgPSBmaWx0ZXIobGFtYmRhIHByb2Nlc3NvcjogcHJvY2Vzc29yLmlzX2FjdGl2ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzKQorICAgICAgICAgICAgcHJvY2Vzc29ycyA9IGxpc3QoZmlsdGVyKGxhbWJkYSBwcm9jZXNzb3I6IHByb2Nlc3Nvci5pc19hY3RpdmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzKSkKIAogICAgICAgICAgICAgYWNjZXB0ZWRfZXh0ZW5zaW9ucyA9IFtdCiAKQEAgLTIyMCw4ICsyMzAsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QubXV4X3Byb2Nlc3NvciA9IHByb2Nlc3NvcnNbbXV4X2luZGV4XQogICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QubXV4X3Byb2Nlc3Nvci5zZXRfZXh0ZW5zaW9ucygKICAgICAgICAgICAgICAgICAgICAgbG9naWNhbF9jaGFubmVsX2V4dGVuc2lvbnMpCi0gICAgICAgICAgICAgICAgcHJvY2Vzc29ycyA9IGZpbHRlcihsYW1iZGEgcHJvY2Vzc29yOiBwcm9jZXNzb3IuaXNfYWN0aXZlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3JzKQorICAgICAgICAgICAgICAgIHByb2Nlc3NvcnMgPSBsaXN0KGZpbHRlcihsYW1iZGEgcHJvY2Vzc29yOiBwcm9jZXNzb3IuaXNfYWN0aXZlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvcnMpKQogCiAgICAgICAgICAgICBzdHJlYW1fb3B0aW9ucyA9IFN0cmVhbU9wdGlvbnMoKQogCkBAIC0yNDIsNyArMjUyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgICAgICMgSW5hY3RpdmF0ZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb21wcmVzc2lvbiBleHRlbnNpb25zLgotICAgICAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShpbmRleCArIDEsIGxlbihwcm9jZXNzb3JzKSk6CisgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaW5kZXggKyAxLCBsZW4ocHJvY2Vzc29ycykpOgogICAgICAgICAgICAgICAgICAgICBpZiBpc19jb21wcmVzc2lvbl9leHRlbnNpb24ocHJvY2Vzc29yc1tqXS5uYW1lKCkpOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc29yc1tqXS5zZXRfYWN0aXZlKEZhbHNlKQogCkBAIC0yNzMsNyArMjgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0IGFueSBzdWJwcm90b2NvbCcpCiAKICAgICAgICAgICAgIHNlbGYuX3NlbmRfaGFuZHNoYWtlKGFjY2VwdCkKLSAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IEhhbmRzaGFrZUV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgaWYgbm90IGUuc3RhdHVzOgogICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gNDAwIGJhZCByZXF1ZXN0IGJ5IGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgZS5zdGF0dXMgPSBjb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QKQEAgLTMyNywxNCArMzM3LDE0IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVxdWVzdGVkX2V4dGVuc2lvbnMgPSBjb21tb24ucGFyc2VfZXh0ZW5zaW9ucygKICAgICAgICAgICAgICAgICBleHRlbnNpb25zX2hlYWRlcikKLSAgICAgICAgZXhjZXB0IGNvbW1vbi5FeHRlbnNpb25QYXJzaW5nRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgY29tbW9uLkV4dGVuc2lvblBhcnNpbmdFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIHBhcnNlIFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXI6ICVyJyAlIGUpCiAKICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKAogICAgICAgICAgICAgJ0V4dGVuc2lvbnMgcmVxdWVzdGVkOiAlcicsCi0gICAgICAgICAgICBtYXAoY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlci5uYW1lLAotICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVxdWVzdGVkX2V4dGVuc2lvbnMpKQorICAgICAgICAgICAgbGlzdChtYXAoY29tbW9uLkV4dGVuc2lvblBhcmFtZXRlci5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXF1ZXN0ZWRfZXh0ZW5zaW9ucykpKQogCiAgICAgZGVmIF92YWxpZGF0ZV9rZXkoc2VsZiwga2V5KToKICAgICAgICAgaWYga2V5LmZpbmQoJywnKSA+PSAwOgpAQCAtMzUzLDcgKzM2Myw3IEBACiAgICAgICAgICAgICAgICAgZGVjb2RlZF9rZXkgPSBiYXNlNjQuYjY0ZGVjb2RlKGtleSkKICAgICAgICAgICAgICAgICBpZiBsZW4oZGVjb2RlZF9rZXkpID09IDE2OgogICAgICAgICAgICAgICAgICAgICBrZXlfaXNfdmFsaWQgPSBUcnVlCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBpZiBub3Qga2V5X2lzX3ZhbGlkOgpAQCAtMzc1LDcgKzM4NSw3IEBACiAgICAgICAgICAgICBrZXksCiAgICAgICAgICAgICB1dGlsLmhleGlmeShkZWNvZGVkX2tleSkpCiAKLSAgICAgICAgcmV0dXJuIGtleQorICAgICAgICByZXR1cm4ga2V5LmVuY29kZSgpCiAKICAgICBkZWYgX2NyZWF0ZV9zdHJlYW0oc2VsZiwgc3RyZWFtX29wdGlvbnMpOgogICAgICAgICByZXR1cm4gU3RyZWFtKHNlbGYuX3JlcXVlc3QsIHN0cmVhbV9vcHRpb25zKQpAQCAtMzkxLDcgKzQwMSw3IEBACiAgICAgICAgIHJlc3BvbnNlLmFwcGVuZChmb3JtYXRfaGVhZGVyKAogICAgICAgICAgICAgY29tbW9uLkNPTk5FQ1RJT05fSEVBREVSLCBjb21tb24uVVBHUkFERV9DT05ORUNUSU9OX1RZUEUpKQogICAgICAgICByZXNwb25zZS5hcHBlbmQoZm9ybWF0X2hlYWRlcigKLSAgICAgICAgICAgIGNvbW1vbi5TRUNfV0VCU09DS0VUX0FDQ0VQVF9IRUFERVIsIGFjY2VwdCkpCisgICAgICAgICAgICBjb21tb24uU0VDX1dFQlNPQ0tFVF9BQ0NFUFRfSEVBREVSLCBhY2NlcHQuZGVjb2RlKCkpKQogICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmVzcG9uc2UuYXBwZW5kKGZvcm1hdF9oZWFkZXIoCiAgICAgICAgICAgICAgICAgY29tbW9uLlNFQ19XRUJTT0NLRVRfUFJPVE9DT0xfSEVBREVSLApAQCAtNDEyLDcgKzQyMiw3IEBACiAKICAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYsIGFjY2VwdCk6CiAgICAgICAgIHJhd19yZXNwb25zZSA9IHNlbGYuX2NyZWF0ZV9oYW5kc2hha2VfcmVzcG9uc2UoYWNjZXB0KQotICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUocmF3X3Jlc3BvbnNlKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUocmF3X3Jlc3BvbnNlLmVuY29kZSgpKQogICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1NlbnQgc2VydmVyXCdzIG9wZW5pbmcgaGFuZHNoYWtlOiAlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdfcmVzcG9uc2UpCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2h0dHBfaGVhZGVyX3V0aWwucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9odHRwX2hlYWRlcl91dGlsLnB5CmluZGV4IGI3NzQ2NTMuLjY2Mjc3YTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L2h0dHBfaGVhZGVyX3V0aWwucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvaHR0cF9oZWFkZXJfdXRpbC5weQpAQCAtMzMsNyArMzMsNyBAQAogIiIiCiAKIAotaW1wb3J0IHVybHBhcnNlCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIgaW1wb3J0IHBhcnNlIGFzIHVybHBhcnNlCiAKIAogX1NFUEFSQVRPUlMgPSAnKCk8PkAsOzpcXCIvW10/PXt9IFx0JwpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgcG9ydCA9IE5vbmUKICAgICB0cnk6CiAgICAgICAgIHBvcnQgPSBwYXJzZWQucG9ydAotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICMgcG9ydCBwcm9wZXJ0eSBjYXVzZSBWYWx1ZUVycm9yIG9uIGludmFsaWQgbnVsbCBwb3J0IGRlc2NyaXB0aW9uIGxpa2UKICAgICAgICAgIyAnd3M6Ly9ob3N0Oi9wYXRoJy4KICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUsIE5vbmUKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiB0cnk6CiAgICAgdXJscGFyc2UudXNlc19uZXRsb2MuaW5kZXgoJ3dzJykKLWV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAjIHVybHBhcnNlIGluIFB5dGhvbjIuNS4xIGRvZXNuJ3QgaGF2ZSAnd3MnIGFuZCAnd3NzJyBlbnRyaWVzLgogICAgIHVybHBhcnNlLnVzZXNfbmV0bG9jLmFwcGVuZCgnd3MnKQogICAgIHVybHBhcnNlLnVzZXNfbmV0bG9jLmFwcGVuZCgnd3NzJykKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L21lbW9yaXppbmdmaWxlLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKaW5kZXggNGQ0Y2Q5NS4uY2EwNDUzOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbWVtb3JpemluZ2ZpbGUucHkKQEAgLTM2LDcgKzM2LDcgQEAKICIiIgogCiAKLWltcG9ydCBzeXMKK2ltcG9ydCBzaXgKIAogCiBjbGFzcyBNZW1vcml6aW5nRmlsZShvYmplY3QpOgpAQCAtNDcsMTQgKzQ3LDE0IEBACiAgICAgdGhlIGNvbnRyb2wgcmVhY2hlcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlXywgbWF4X21lbW9yaXplZF9saW5lcz1zeXMubWF4aW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV8sIG1heF9tZW1vcml6ZWRfbGluZXM9c2l4Lk1BWFNJWkUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGZpbGVfOiB0aGUgZmlsZSBvYmplY3QgdG8gd3JhcC4KICAgICAgICAgICAgIG1heF9tZW1vcml6ZWRfbGluZXM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBtZW1vcml6ZS4KICAgICAgICAgICAgICAgICBPbmx5IHRoZSBmaXJzdCBtYXhfbWVtb3JpemVkX2xpbmVzIGFyZSBtZW1vcml6ZWQuCi0gICAgICAgICAgICAgICAgRGVmYXVsdDogc3lzLm1heGludC4KKyAgICAgICAgICAgICAgICBEZWZhdWx0OiBzaXguTUFYU0laRS4KICAgICAgICAgIiIiCiAKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGVfCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weQppbmRleCA0YzFhMDExLi4yNmU0ZTQ4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L21zZ3V0aWwucHkKQEAgLTM4LDcgKzM4LDcgQEAKICIiIgogCiAKLWltcG9ydCBRdWV1ZQorZnJvbSBzaXgubW92ZXMgaW1wb3J0IHF1ZXVlIGFzIFF1ZXVlCiBpbXBvcnQgdGhyZWFkaW5nCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbXV4LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvbXV4LnB5CmluZGV4IDc2MzM0NjguLjNhNGE0MTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L211eC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9tdXgucHkKQEAgLTM1Myw3ICszNTMsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNpemUgPSBzZWxmLl9yZWFkX251bWJlcigpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGUpKQogICAgICAgICBwb3MgPSBzZWxmLl9yZWFkX3Bvc2l0aW9uCkBAIC0zNzYsNyArMzc2LDcgQEAKICAgICAgICAgZW5jb2RpbmcgPSBmaXJzdF9ieXRlICYgMHgzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suY2hhbm5lbF9pZCA9IHNlbGYucmVhZF9jaGFubmVsX2lkKCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rpb25FcnJvcihfRFJPUF9DT0RFX0lOVkFMSURfTVVYX0NPTlRST0xfQkxPQ0spCiAgICAgICAgIGNvbnRyb2xfYmxvY2suZW5jb2RpbmcgPSBlbmNvZGluZwogICAgICAgICBlbmNvZGVkX2hhbmRzaGFrZSA9IHNlbGYuX3JlYWRfc2l6ZV9hbmRfY29udGVudHMoKQpAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgICAgIGNvbnRyb2xfYmxvY2suZW5jb2RpbmcgPSBmaXJzdF9ieXRlICYgMHgzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbnRyb2xfYmxvY2suY2hhbm5lbF9pZCA9IHNlbGYucmVhZF9jaGFubmVsX2lkKCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBQaHlzaWNhbENvbm5lY3Rpb25FcnJvcihfRFJPUF9DT0RFX0lOVkFMSURfTVVYX0NPTlRST0xfQkxPQ0spCiAgICAgICAgIGNvbnRyb2xfYmxvY2suZW5jb2RlZF9oYW5kc2hha2UgPSBzZWxmLl9yZWFkX3NpemVfYW5kX2NvbnRlbnRzKCkKICAgICAgICAgcmV0dXJuIGNvbnRyb2xfYmxvY2sKQEAgLTQwOSw3ICs0MDksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb250cm9sX2Jsb2NrLmNoYW5uZWxfaWQgPSBzZWxmLnJlYWRfY2hhbm5lbF9pZCgpCiAgICAgICAgICAgICBjb250cm9sX2Jsb2NrLnNlbmRfcXVvdGEgPSBzZWxmLl9yZWFkX251bWJlcigpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGUpKQogCkBAIC00MjQsNyArNDI0LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb250cm9sX2Jsb2NrLmNoYW5uZWxfaWQgPSBzZWxmLnJlYWRfY2hhbm5lbF9pZCgpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoX0RST1BfQ09ERV9JTlZBTElEX01VWF9DT05UUk9MX0JMT0NLKQogICAgICAgICByZWFzb24gPSBzZWxmLl9yZWFkX3NpemVfYW5kX2NvbnRlbnRzKCkKICAgICAgICAgaWYgbGVuKHJlYXNvbikgPT0gMDoKQEAgLTQ0OSw3ICs0NDksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb250cm9sX2Jsb2NrLnNsb3RzID0gc2VsZi5fcmVhZF9udW1iZXIoKQogICAgICAgICAgICAgY29udHJvbF9ibG9jay5zZW5kX3F1b3RhID0gc2VsZi5fcmVhZF9udW1iZXIoKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFBoeXNpY2FsQ29ubmVjdGlvbkVycm9yKF9EUk9QX0NPREVfSU5WQUxJRF9NVVhfQ09OVFJPTF9CTE9DSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihlKSkKICAgICAgICAgcmV0dXJuIGNvbnRyb2xfYmxvY2sKQEAgLTkyMSw3ICs5MjEsNyBAQAogCiAgICAgICAgICAgICAgICAgb3Bjb2RlID0gY29tbW9uLk9QQ09ERV9DT05USU5VQVRJT04KIAotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEJhZE9wZXJhdGlvbkV4Y2VwdGlvbihlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fd3JpdGVfaW5uZXJfZnJhbWVfc2VtYXBob3JlLnJlbGVhc2UoKQpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKICAgICAgICAgIyBjb25uZWN0aW9uIGhhcyBjbG9zZWQgZ3JhY2VmdWxseS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIFN0cmVhbS5yZWNlaXZlX21lc3NhZ2Uoc2VsZikKLSAgICAgICAgZXhjZXB0IExvZ2ljYWxDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgTG9naWNhbENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1ZygnJXMnLCBlKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIApAQCAtMTE0NCw3ICsxMTQ0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fbXV4X2hhbmRsZXIucGh5c2ljYWxfc3RyZWFtLnNlbmRfbWVzc2FnZSgKICAgICAgICAgICAgICAgICBtZXNzYWdlPW1lc3NhZ2UsIGVuZD1UcnVlLCBiaW5hcnk9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgdXRpbC5wcmVwZW5kX21lc3NhZ2VfdG9fZXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlIHRvICVyOiAnICUKICAgICAgICAgICAgICAgICAoc2VsZi5fbXV4X2hhbmRsZXIucGh5c2ljYWxfY29ubmVjdGlvbi5yZW1vdGVfYWRkciwpLCBlKQpAQCAtMTE4NSw3ICsxMTg1LDcgQEAKICAgICAgICAgICAgICAgICAjIGJ5IHRoZSByZWFkZXIgdGhyZWFkLgogICAgICAgICAgICAgICAgIHNlbGYuX211eF9oYW5kbGVyLnBoeXNpY2FsX3N0cmVhbS5jbG9zZV9jb25uZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZV9jb2RlLCB3YWl0X3Jlc3BvbnNlPUZhbHNlKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gY2xvc2UgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb246ICVyJyAlIGUpCiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTEyMzMsMjAgKzEyMzMsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBhIHRleHQgbWVzc2FnZSBvbiBwaHlzaWNhbCBjb25uZWN0aW9uJykKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAotICAgICAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25UZXJtaW5hdGVkRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcycsIGUpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX211eF9oYW5kbGVyLmRpc3BhdGNoX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIGV4Y2VwdCBQaHlzaWNhbENvbm5lY3Rpb25FcnJvciwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBQaHlzaWNhbENvbm5lY3Rpb25FcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuX211eF9oYW5kbGVyLmZhaWxfcGh5c2ljYWxfY29ubmVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgZS5kcm9wX2NvZGUsIGUubWVzc2FnZSkKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IExvZ2ljYWxDaGFubmVsRXJyb3IsIGU6CisgICAgICAgICAgICBleGNlcHQgTG9naWNhbENoYW5uZWxFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuX211eF9oYW5kbGVyLmZhaWxfbG9naWNhbF9jaGFubmVsKAogICAgICAgICAgICAgICAgICAgICBlLmNoYW5uZWxfaWQsIGUuZHJvcF9jb2RlLCBlLm1lc3NhZ2UpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5kZWJ1Zyh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICAgICAgICAgICAgIGJyZWFrCiAKQEAgLTEyNzgsNyArMTI3OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgTm9uLWNyaXRpY2FsIGV4Y2VwdGlvbnMgd2lsbCBiZSBoYW5kbGVkIGJ5IGRpc3BhdGNoZXIuCiAgICAgICAgICAgICBzZWxmLl9tdXhfaGFuZGxlci5kaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEoc2VsZi5fcmVxdWVzdCkKLSAgICAgICAgZXhjZXB0IExvZ2ljYWxDaGFubmVsRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBMb2dpY2FsQ2hhbm5lbEVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLl9tdXhfaGFuZGxlci5mYWlsX2xvZ2ljYWxfY2hhbm5lbCgKICAgICAgICAgICAgICAgICBlLmNoYW5uZWxfaWQsIGUuZHJvcF9jb2RlLCBlLm1lc3NhZ2UpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0xNjIxLDE5ICsxNjIxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3F1b3RhLCByZWNlaXZlX3F1b3RhKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuVmVyc2lvbkV4Y2VwdGlvbiwgZToKKyAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5WZXJzaW9uRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQogICAgICAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9hZGRfY2hhbm5lbF9yZXNwb25zZSgKICAgICAgICAgICAgICAgICByZXF1ZXN0LmNoYW5uZWxfaWQsIHN0YXR1cz1jb21tb24uSFRUUF9TVEFUVVNfQkFEX1JFUVVFU1QpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFuZHNoYWtlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAjIFRPRE8oYmFzaGkpOiBTaG91bGQgd2UgX0ZhaWwgdGhlIExvZ2ljYWwgQ2hhbm5lbF8gd2l0aCAzMDAxCiAgICAgICAgICAgICAjIGluc3RlYWQ/CiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnJXMnLCBlKQogICAgICAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9hZGRfY2hhbm5lbF9yZXNwb25zZShyZXF1ZXN0LmNoYW5uZWxfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1lLnN0YXR1cykKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBleGNlcHQgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJyVzJywgZSkKICAgICAgICAgICAgIHNlbGYuX3NlbmRfZXJyb3JfYWRkX2NoYW5uZWxfcmVzcG9uc2UocmVxdWVzdC5jaGFubmVsX2lkKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0xNjYwLDcgKzE2NjAsNyBAQAogICAgIGRlZiBfcHJvY2Vzc19hZGRfY2hhbm5lbF9yZXF1ZXN0KHNlbGYsIGJsb2NrKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbG9naWNhbF9yZXF1ZXN0ID0gc2VsZi5fY3JlYXRlX2xvZ2ljYWxfcmVxdWVzdChibG9jaykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBjcmVhdGUgbG9naWNhbCByZXF1ZXN0OiAlcicgJSBlKQogICAgICAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9hZGRfY2hhbm5lbF9yZXNwb25zZSgKICAgICAgICAgICAgICAgICBibG9jay5jaGFubmVsX2lkLCBzdGF0dXM9Y29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUKQpAQCAtMTc2Nyw3ICsxNzY3LDcgQEAKICAgICAgICAgcGFyc2VyID0gX011eEZyYW1lUGF5bG9hZFBhcnNlcihtZXNzYWdlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjaGFubmVsX2lkID0gcGFyc2VyLnJlYWRfY2hhbm5lbF9pZCgpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgUGh5c2ljYWxDb25uZWN0aW9uRXJyb3IoX0RST1BfQ09ERV9DSEFOTkVMX0lEX1RSVU5DQVRFRCkKICAgICAgICAgaWYgY2hhbm5lbF9pZCA9PSBfQ09OVFJPTF9DSEFOTkVMX0lEOgogICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19jb250cm9sX2Jsb2NrcyhwYXJzZXIpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQppbmRleCAyNGMyOTllLi44OThhMDViIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTE1NSwxOSArMTU1LDIwIEBACiB1c2VkIG91dHNpZGUgYSBmaXJld2FsbC4KICIiIgogCi1pbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKLWltcG9ydCBDR0lIVFRQU2VydmVyCi1pbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgotaW1wb3J0IFNvY2tldFNlcnZlcgotaW1wb3J0IENvbmZpZ1BhcnNlcgorZnJvbSBzaXgubW92ZXMgaW1wb3J0IEJhc2VIVFRQU2VydmVyCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgQ0dJSFRUUFNlcnZlcgorZnJvbSBzaXgubW92ZXMgaW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBzb2NrZXRzZXJ2ZXIgYXMgU29ja2V0U2VydmVyCitmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgY29uZmlncGFyc2VyIGFzIENvbmZpZ1BhcnNlcgogaW1wb3J0IGJhc2U2NAotaW1wb3J0IGh0dHBsaWIKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBodHRwX2NsaWVudCBhcyBodHRwbGliCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaXgKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKQEAgLTIyNSw3ICsyMjYsNiBAQAogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJNaW1pYyBtcF9jb25uLndyaXRlKCkuIiIiCi0KICAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZShkYXRhKQogCiAgICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3RoKToKQEAgLTM0Nyw4ICszNDcsOCBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uLnJlY3YoYnVmc2l6ZSkKLSAgICAgICAgZXhjZXB0IE9wZW5TU0wuU1NMLlN5c0NhbGxFcnJvciwgKGVyciwgbWVzc2FnZSk6Ci0gICAgICAgICAgICBpZiBlcnIgPT0gLTE6CisgICAgICAgIGV4Y2VwdCBPcGVuU1NMLlNTTC5TeXNDYWxsRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gLTE6CiAgICAgICAgICAgICAgICAgIyBTdXBwcmVzcyAidW5leHBlY3RlZCBFT0YiIGV4Y2VwdGlvbi4gU2VlIHRoZSBPcGVuU1NMIGRvY3VtZW50CiAgICAgICAgICAgICAgICAgIyBmb3IgU1NMX2dldF9lcnJvci4KICAgICAgICAgICAgICAgICByZXR1cm4gJycKQEAgLTM3NSw3ICszNzUsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuYWRkX3Jlc291cmNlX3BhdGhfYWxpYXMoCiAgICAgICAgICAgICAgICAgICAgIG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikpCi0gICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKHN0cihlKSkKICAgICBmaW5hbGx5OgogICAgICAgICBmcC5jbG9zZSgpCkBAIC00NTEsNyArNDUxLDcgQEAKICAgICAgICAgICAgIGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyID0gYWRkcmluZm8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrZXRfID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2t0eXBlKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJlOiAlcicsIGUpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zID0gc2VsZi53ZWJzb2NrZXRfc2VydmVyX29wdGlvbnMKQEAgLTQ4OSw3ICs0ODksNyBAQAogICAgICAgICAgICAgICAgIHNvY2tldF8uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrZXRfLmJpbmQoc2VsZi5zZXJ2ZXJfYWRkcmVzcykKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ1NraXAgYnkgZmFpbHVyZTogJXInLCBlKQogICAgICAgICAgICAgICAgIHNvY2tldF8uY2xvc2UoKQogICAgICAgICAgICAgICAgIGZhaWxlZF9zb2NrZXRzLmFwcGVuZChzb2NrZXRpbmZvKQpAQCAtNTE4LDcgKzUxOCw3IEBACiAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnTGlzdGVuIG9uOiAlcicsIGFkZHJpbmZvKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNvY2tldF8ubGlzdGVuKHNlbGYucmVxdWVzdF9xdWV1ZV9zaXplKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLl9sb2dnZXIuaW5mbygnU2tpcCBieSBmYWlsdXJlOiAlcicsIGUpCiAgICAgICAgICAgICAgICAgc29ja2V0Xy5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZmFpbGVkX3NvY2tldHMuYXBwZW5kKHNvY2tldGluZm8pCkBAIC01NjksNyArNTY5LDcgQEAKICAgICAgICAgICAgIGlmIHNlcnZlcl9vcHRpb25zLnRsc19tb2R1bGUgPT0gX1RMU19CWV9TVEFOREFSRF9NT0RVTEU6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBhY2NlcHRlZF9zb2NrZXQuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcicsIGUpCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogICAgICAgICAgICAgICAgICMgVE9ETyh0eW9zaGlubyk6IENvbnZlcnQgYWxsIGtpbmRzIG9mIGVycm9ycy4KICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkX3NvY2tldC5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPcGVuU1NMLlNTTC5FcnJvciwgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT3BlblNTTC5TU0wuRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgIyBTZXQgZXJybm8gcGFydCB0byAxIChTU0xfRVJST1JfU1NMKSBsaWtlIHRoZSBzc2wgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgICMgZG9lcy4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCclcicsIGUpCkBAIC03ODAsNyArNzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0ZhbGxiYWNrIHRvIENHSUhUVFBSZXF1ZXN0SGFuZGxlcicpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXhjZXB0aW9uLCBlOgorICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdEaXNwYXRjaCBmYWlsZWQgZm9yIGVycm9yOiAlcycsIGUpCiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoZS5zdGF0dXMpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTc5NiwxNCArNzk2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuZGlzcGF0Y2hlciwKICAgICAgICAgICAgICAgICAgICAgYWxsb3dEcmFmdDc1PXNlbGYuX29wdGlvbnMuYWxsb3dfZHJhZnQ3NSwKICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PXNlbGYuX29wdGlvbnMuc3RyaWN0KQotICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5WZXJzaW9uRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5WZXJzaW9uRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0hhbmRzaGFrZSBmYWlsZWQgZm9yIHZlcnNpb24gZXJyb3I6ICVzJywgZSkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoY29tbW9uLkhUVFBfU1RBVFVTX0JBRF9SRVFVRVNUKQogICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoY29tbW9uLlNFQ19XRUJTT0NLRVRfVkVSU0lPTl9IRUFERVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN1cHBvcnRlZF92ZXJzaW9ucykKICAgICAgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFuZHNoYWtlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAjIEhhbmRzaGFrZSBmb3Igd3MocykgZmFpbGVkLgogICAgICAgICAgICAgICAgIHNlbGYuX2xvZ2dlci5pbmZvKCdIYW5kc2hha2UgZmFpbGVkIGZvciBlcnJvcjogJXMnLCBlKQogICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcihlLnN0YXR1cykKQEAgLTgxMSw3ICs4MTEsNyBAQAogCiAgICAgICAgICAgICByZXF1ZXN0Ll9kaXNwYXRjaGVyID0gc2VsZi5fb3B0aW9ucy5kaXNwYXRjaGVyCiAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQotICAgICAgICBleGNlcHQgaGFuZHNoYWtlLkFib3J0ZWRCeVVzZXJFeGNlcHRpb24sIGU6CisgICAgICAgIGV4Y2VwdCBoYW5kc2hha2UuQWJvcnRlZEJ5VXNlckV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmluZm8oJ0Fib3J0ZWQ6ICVzJywgZSkKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAgICAgaWYgdGVtcG9yYXJ5X29wdGlvbnMuY29uZmlnX2ZpbGU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbmZpZ19mcCA9IG9wZW4odGVtcG9yYXJ5X29wdGlvbnMuY29uZmlnX2ZpbGUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKAogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgJXI6ICVyJywKICAgICAgICAgICAgICAgICB0ZW1wb3Jhcnlfb3B0aW9ucy5jb25maWdfZmlsZSwKQEAgLTExODAsNyArMTE4MCw3IEBACiAKICAgICAgICAgc2VydmVyID0gV2ViU29ja2V0U2VydmVyKG9wdGlvbnMpCiAgICAgICAgIHNlcnZlci5zZXJ2ZV9mb3JldmVyKCkKLSAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgbG9nZ2luZy5jcml0aWNhbCgnbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlKQogICAgICAgICBsb2dnaW5nLmNyaXRpY2FsKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCiAgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC91dGlsLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weQppbmRleCBkMjI0YWUzLi5hODY5N2U1IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC91dGlsLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkKQEAgLTQ4LDEwICs0OCwxMSBAQAogICAgIG1kNV9oYXNoID0gbWQ1Lm1kNQogICAgIHNoYTFfaGFzaCA9IHNoYS5zaGEKIAotaW1wb3J0IFN0cmluZ0lPCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc2l4CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgemxpYgpAQCAtNjMsMTYgKzY0LDggQEAKIAogCiBkZWYgZ2V0X3N0YWNrX3RyYWNlKCk6Ci0gICAgIiIiR2V0IHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIHN0cmluZy4KLQotICAgIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgUHl0aG9uIDIuMy4KLSAgICBUT0RPOiBSZW1vdmUgdGhpcyB3aGVuIHdlIG9ubHkgc3VwcG9ydCBQeXRob24gMi40IGFuZCBhYm92ZS4KLSAgICAgICAgICBVc2UgdHJhY2ViYWNrLmZvcm1hdF9leGMgaW5zdGVhZC4KLSAgICAiIiIKLQotICAgIG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9b3V0KQotICAgIHJldHVybiBvdXQuZ2V0dmFsdWUoKQorICAgICIiIkdldCB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBzdHJpbmcuIiIiCisgICAgcmV0dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKIAogCiBkZWYgcHJlcGVuZF9tZXNzYWdlX3RvX2V4Y2VwdGlvbihtZXNzYWdlLCBleGMpOgpAQCAtMTQ3LDcgKzE0MCwxMCBAQAogCiAKIGRlZiBoZXhpZnkocyk6Ci0gICAgcmV0dXJuICcgJy5qb2luKG1hcChsYW1iZGEgeDogJyUwMngnICUgb3JkKHgpLCBzKSkKKyAgICBpZiBzaXguUFkzOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4obWFwKGxhbWJkYSB4OiAnezA6MDJ4fScuZm9ybWF0KHgpLCBzKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4obWFwKGxhbWJkYSB4OiAnJTAyeCcgJSBvcmQoeCksIHMpKQogCiAKIGRlZiBnZXRfY2xhc3NfbG9nZ2VyKG8pOgpAQCAtMTg2LDIyICsxODIsMjYgQEAKICAgICAgICAgcmV0dXJuIG1hc2tlZF9kYXRhCiAKICAgICBkZWYgX21hc2tfdXNpbmdfYXJyYXkoc2VsZiwgcyk6Ci0gICAgICAgIHJlc3VsdCA9IGFycmF5LmFycmF5KCdCJykKLSAgICAgICAgcmVzdWx0LmZyb21zdHJpbmcocykKKyAgICAgICAgIiIiUGVyZm9ybSB0aGUgbWFzayB2aWEgcHl0aG9uLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHNpeC50ZXh0X3R5cGUpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdNYXNraW5nIE9wZXJhdGlvbiBzaG91bGQgbm90IHByb2Nlc3MgdW5pY29kZSBzdHJpbmdzJykKKworICAgICAgICByZXN1bHQgPSBieXRlYXJyYXkocykKIAogICAgICAgICAjIFVzZSB0ZW1wb3JhcnkgbG9jYWwgdmFyaWFibGVzIHRvIGVsaW1pbmF0ZSB0aGUgY29zdCB0byBhY2Nlc3MKICAgICAgICAgIyBhdHRyaWJ1dGVzCi0gICAgICAgIG1hc2tpbmdfa2V5ID0gbWFwKG9yZCwgc2VsZi5fbWFza2luZ19rZXkpCisgICAgICAgIG1hc2tpbmdfa2V5ID0gW2MgZm9yIGMgaW4gc2l4Lml0ZXJieXRlcyhzZWxmLl9tYXNraW5nX2tleSldCiAgICAgICAgIG1hc2tpbmdfa2V5X3NpemUgPSBsZW4obWFza2luZ19rZXkpCiAgICAgICAgIG1hc2tpbmdfa2V5X2luZGV4ID0gc2VsZi5fbWFza2luZ19rZXlfaW5kZXgKIAotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHJlc3VsdCkpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVzdWx0KSk6CiAgICAgICAgICAgICByZXN1bHRbaV0gXj0gbWFza2luZ19rZXlbbWFza2luZ19rZXlfaW5kZXhdCiAgICAgICAgICAgICBtYXNraW5nX2tleV9pbmRleCA9IChtYXNraW5nX2tleV9pbmRleCArIDEpICUgbWFza2luZ19rZXlfc2l6ZQogCiAgICAgICAgIHNlbGYuX21hc2tpbmdfa2V5X2luZGV4ID0gbWFza2luZ19rZXlfaW5kZXgKIAotICAgICAgICByZXR1cm4gcmVzdWx0LnRvc3RyaW5nKCkKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHJlc3VsdCkKIAogICAgIGlmICdmYXN0X21hc2tpbmcnIGluIGdsb2JhbHMoKToKICAgICAgICAgbWFzayA9IF9tYXNrX3VzaW5nX3N3aWcKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgICAgICBzZWxmLl9sb2dnZXIgPSBnZXRfY2xhc3NfbG9nZ2VyKHNlbGYpCiAgICAgICAgIHNlbGYuX3dpbmRvd19iaXRzID0gd2luZG93X2JpdHMKIAotICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gJycKKyAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9IGInJwogCiAgICAgICAgIHNlbGYucmVzZXQoKQogCkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgaWYgbm90IChzaXplID09IC0xIG9yIHNpemUgPiAwKToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignc2l6ZSBtdXN0IGJlIC0xIG9yIHBvc2l0aXZlJykKIAotICAgICAgICBkYXRhID0gJycKKyAgICAgICAgZGF0YSA9IGInJwogCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBzaXplID09IC0xOgpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgICAgICAgICAgICAgIyBTZWUgUHl0aG9uIGJ1ZyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIwNTAgdG8KICAgICAgICAgICAgICAgICAjIHVuZGVyc3RhbmQgd2h5IHRoZSBzYW1lIGNvZGUgY2Fubm90IGJlIHVzZWQgZm9yIHVwZGF0aW5nCiAgICAgICAgICAgICAgICAgIyBzZWxmLl91bmNvbnN1bWVkIGZvciBoZXJlIGFuZCBlbHNlIGJsb2NrLgotICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSAnJworICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSBiJycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9kZWNvbXByZXNzLmRlY29tcHJlc3MoCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQsIHNpemUgLSBsZW4oZGF0YSkpCkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICBkZWYgZmlsdGVyKHNlbGYsIGJ5dGVzKToKICAgICAgICAgIyBSZXN0b3JlIHN0cmlwcGVkIExFTiBhbmQgTkxFTiBmaWVsZCBvZiBhIG5vbi1jb21wcmVzc2VkIGJsb2NrIGFkZGVkCiAgICAgICAgICMgZm9yIFpfU1lOQ19GTFVTSC4KLSAgICAgICAgc2VsZi5faW5mbGF0ZXIuYXBwZW5kKGJ5dGVzICsgJ1x4MDBceDAwXHhmZlx4ZmYnKQorICAgICAgICBzZWxmLl9pbmZsYXRlci5hcHBlbmQoYnl0ZXMgKyBiJ1x4MDBceDAwXHhmZlx4ZmYnKQogICAgICAgICByZXR1cm4gc2VsZi5faW5mbGF0ZXIuZGVjb21wcmVzcygtMSkKIAogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC94aHJfYmVuY2htYXJrX2hhbmRsZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvcHl3ZWJzb2NrZXQvc3JjL21vZF9weXdlYnNvY2tldC94aHJfYmVuY2htYXJrX2hhbmRsZXIucHkKaW5kZXggNjczNWM3ZS4uZGQyMjdhNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3B5d2Vic29ja2V0L3NyYy9tb2RfcHl3ZWJzb2NrZXQveGhyX2JlbmNobWFya19oYW5kbGVyLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9weXdlYnNvY2tldC9zcmMvbW9kX3B5d2Vic29ja2V0L3hocl9iZW5jaG1hcmtfaGFuZGxlci5weQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBieXRlc190b19zZW5kID0gcmVxdWVzdF9hcnJheVswXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBieXRlc190b19zZW5kID0gaW50KGJ5dGVzX3RvX3NlbmQpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLmRlYnVnKCdNYWxmb3JtZWQgc2l6ZSBwYXJhbWV0ZXI6ICVyJywgYnl0ZXNfdG9fc2VuZCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9sb2dnZXIuZGVidWcoJ1JlcXVlc3RlZCB0byBzZW5kICVzIGJ5dGVzJywgYnl0ZXNfdG9fc2VuZCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9ydW5uZXIvcmVwb3J0LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3J1bm5lci9yZXBvcnQucHkKaW5kZXggZjRiM2ZhNy4uNmVmOWZiZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3J1bm5lci9yZXBvcnQucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3J1bm5lci9yZXBvcnQucHkKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgICAgIGF0dHJzX3VuaWNvZGUgPSAiICIgKyAiICIuam9pbigiJXM9XCIlc1wiIiAlIChodG1sX2VzY2FwZShrZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZXNjYXBlKHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZV9xdW90ZT1UcnVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLmF0dHJzLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuYXR0cnMuaXRlbXMoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGF0dHJzX3VuaWNvZGUgPSAiIgogICAgICAgICByZXR1cm4gIjwlcyVzPiVzPC8lcz5cbiIgJSAoc2VsZi5uYW1lLApAQCAtMTU1LDcgKzE1NSw3IEBACiAKIGRlZiBhbGxfdGVzdHMoZGF0YSk6CiAgICAgdGVzdHMgPSBkZWZhdWx0ZGljdChzZXQpCi0gICAgZm9yIFVBLCByZXN1bHRzIGluIGRhdGEuaXRlcml0ZW1zKCk6CisgICAgZm9yIFVBLCByZXN1bHRzIGluIGRhdGEuaXRlbXMoKToKICAgICAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRzWyJyZXN1bHRzIl06CiAgICAgICAgICAgICBpZCA9IHRlc3RfaWQocmVzdWx0WyJ0ZXN0Il0pCiAgICAgICAgICAgICB0ZXN0c1tpZF0gfD0gc2V0KHN1YnRlc3RbIm5hbWUiXSBmb3Igc3VidGVzdCBpbiByZXN1bHRbInN1YnRlc3RzIl0pCkBAIC0xODMsNyArMTgzLDcgQEAKIAogICAgIHJlc3VsdHNfYnlfdGVzdCA9IGRlZmF1bHRkaWN0KHJlc3VsdCkKIAotICAgIGZvciBVQSwgcmVzdWx0cyBpbiBkYXRhLml0ZXJpdGVtcygpOgorICAgIGZvciBVQSwgcmVzdWx0cyBpbiBkYXRhLml0ZW1zKCk6CiAgICAgICAgIGZvciB0ZXN0X2RhdGEgaW4gcmVzdWx0c1sicmVzdWx0cyJdOgogICAgICAgICAgICAgaWQgPSB0ZXN0X2lkKHRlc3RfZGF0YVsidGVzdCJdKQogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0c19ieV90ZXN0W2lkXQpAQCAtMjI4LDEwICsyMjgsMTAgQEAKIGRlZiBzdW1tYXJ5KFVBcywgcmVzdWx0c19ieV90ZXN0KToKICAgICAiIiJSZW5kZXIgdGhlIGltcGxlbWVudGF0aW9uIHJlcG9ydCBzdW1tYXJ5IiIiCiAgICAgbm90X3Bhc3NpbmcgPSBbXQotICAgIGZvciB0ZXN0LCByZXN1bHRzIGluIHJlc3VsdHNfYnlfdGVzdC5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGVzdCwgcmVzdWx0cyBpbiByZXN1bHRzX2J5X3Rlc3QuaXRlbXMoKToKICAgICAgICAgaWYgbm90IGFueShpdGVtWzBdIGluICgiUEFTUyIsICJPSyIpIGZvciBpdGVtIGluIHJlc3VsdHNbImhhcm5lc3MiXS52YWx1ZXMoKSk6CiAgICAgICAgICAgICBub3RfcGFzc2luZy5hcHBlbmQoKHRlc3QsIE5vbmUpKQotICAgICAgICBmb3Igc3VidGVzdF9uYW1lLCBzdWJ0ZXN0X3Jlc3VsdHMgaW4gcmVzdWx0c1sic3VidGVzdHMiXS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHN1YnRlc3RfbmFtZSwgc3VidGVzdF9yZXN1bHRzIGluIHJlc3VsdHNbInN1YnRlc3RzIl0uaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5vdCBhbnkoaXRlbVswXSA9PSAiUEFTUyIgZm9yIGl0ZW0gaW4gc3VidGVzdF9yZXN1bHRzLnZhbHVlcygpKToKICAgICAgICAgICAgICAgICBub3RfcGFzc2luZy5hcHBlbmQoKHRlc3QsIHN1YnRlc3RfbmFtZSkpCiAgICAgaWYgbm90X3Bhc3Npbmc6CkBAIC0yNTgsNyArMjU4LDcgQEAKICAgICAgICAgY2xhc3NfPSJ0ZXN0IgogICAgICkKIAotICAgIGZvciBuYW1lLCBzdWJ0ZXN0X3Jlc3VsdCBpbiBzb3J0ZWQocmVzdWx0WyJzdWJ0ZXN0cyJdLml0ZXJpdGVtcygpKToKKyAgICBmb3IgbmFtZSwgc3VidGVzdF9yZXN1bHQgaW4gc29ydGVkKHJlc3VsdFsic3VidGVzdHMiXS5pdGVtcygpKToKICAgICAgICAgeWllbGQgaC50cigKICAgICAgICAgICAgIGgudGQobmFtZSksCiAgICAgICAgICAgICBbc3RhdHVzX2NlbGwoc3RhdHVzLCBtZXNzYWdlKQpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIGRlZiByZXN1bHRfYm9kaWVzKFVBcywgcmVzdWx0c19ieV90ZXN0KToKICAgICByZXR1cm4gW2gudGJvZHkocmVzdWx0X3Jvd3MoVUFzLCB0ZXN0LCByZXN1bHQpKQotICAgICAgICAgICAgZm9yIHRlc3QsIHJlc3VsdCBpbiBzb3J0ZWQocmVzdWx0c19ieV90ZXN0Lml0ZXJpdGVtcygpKV0KKyAgICAgICAgICAgIGZvciB0ZXN0LCByZXN1bHQgaW4gc29ydGVkKHJlc3VsdHNfYnlfdGVzdC5pdGVtcygpKV0KIAogCiBkZWYgZ2VuZXJhdGVfaHRtbChVQXMsIHJlc3VsdHNfYnlfdGVzdCk6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvc2VydmUvX19pbml0X18ucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvc2VydmUvX19pbml0X18ucHkKaW5kZXggZmMyZjJmMC4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3NlcnZlL19faW5pdF9fLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zZXJ2ZS9fX2luaXRfXy5weQpAQCAtMSArMCwwIEBACi1pbXBvcnQgc2VydmUKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zZXJ2ZS9zZXJ2ZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zZXJ2ZS9zZXJ2ZS5weQppbmRleCAxNzBlN2U2Li44ZTI0YWVjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvc2VydmUvc2VydmUucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3NlcnZlL3NlcnZlLnB5CkBAIC0xMiw3ICsxMiw3IEBACiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IHVybGxpYjIKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCB1cmxsaWIKIGltcG9ydCB1dWlkCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdCwgT3JkZXJlZERpY3QKIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBFdmVudApAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgICAgIGZvciAobWV0aG9kLCBzdWZmaXgsIGhhbmRsZXJfY2xzKSBpbiByb3V0ZXM6CiAgICAgICAgICAgICBzZWxmLm1vdW50cG9pbnRfcm91dGVzW3VybF9iYXNlXS5hcHBlbmQoCiAgICAgICAgICAgICAgICAgKG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgYiIlcyVzIiAlIChzdHIodXJsX2Jhc2UpIGlmIHVybF9iYXNlICE9ICIvIiBlbHNlICIiLCBzdHIoc3VmZml4KSksCisgICAgICAgICAgICAgICAgICJ7fXt9Ii5mb3JtYXQoc3RyKHVybF9iYXNlKSBpZiB1cmxfYmFzZSAhPSAiLyIgZWxzZSAiIiwgc3RyKHN1ZmZpeCkpLmVuY29kZSgpLAogICAgICAgICAgICAgICAgICBoYW5kbGVyX2NscyhiYXNlX3BhdGg9cGF0aCwgdXJsX2Jhc2U9dXJsX2Jhc2UpKSkKIAogICAgIGRlZiBhZGRfZmlsZV9tb3VudF9wb2ludChzZWxmLCBmaWxlX3VybCwgYmFzZV9wYXRoKToKQEAgLTQ0MywyMCArNDQzLDIwIEBACiAgICAgY29ubmVjdGVkID0gRmFsc2UKICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHVybGxpYjIudXJsb3BlbigiaHR0cDovLyVzOiVkLyIgJSAoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vJXM6JWQvIiAlIChob3N0LCBwb3J0KSkKICAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yOgorICAgICAgICBleGNlcHQgdXJsbGliLmVycm9yLlVSTEVycm9yOgogICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogCiAgICAgaWYgbm90IGNvbm5lY3RlZDoKICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJGYWlsZWQgdG8gY29ubmVjdCB0byB0ZXN0IHNlcnZlciBvbiBodHRwOi8vJXM6JXMgWW91IG1heSBuZWVkIHRvIGVkaXQgL2V0Yy9ob3N0cyBvciBzaW1pbGFyIiAlIChob3N0LCBwb3J0KSkKICAgICAgICAgc3lzLmV4aXQoMSkKIAotICAgIGZvciBzdWJkb21haW4sIChwdW55Y29kZSwgaG9zdCkgaW4gc3ViZG9tYWlucy5pdGVyaXRlbXMoKToKKyAgICBmb3Igc3ViZG9tYWluLCAocHVueWNvZGUsIGhvc3QpIGluIHN1YmRvbWFpbnMuaXRlbXMoKToKICAgICAgICAgZG9tYWluID0gIiVzLiVzIiAlIChwdW55Y29kZSwgaG9zdCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuKCJodHRwOi8vJXM6JWQvIiAlIChkb21haW4sIHBvcnQpKQorICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovLyVzOiVkLyIgJSAoZG9tYWluLCBwb3J0KSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgbG9nZ2VyLmNyaXRpY2FsKCJGYWlsZWQgcHJvYmluZyBkb21haW4gJXMuIFlvdSBtYXkgbmVlZCB0byBlZGl0IC9ldGMvaG9zdHMgb3Igc2ltaWxhci4iICUgZG9tYWluKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTQ2NiwxNCArNDY2LDE0IEBACiAKIGRlZiBnZXRfc3ViZG9tYWlucyhob3N0KToKICAgICAjVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRsZCBpcyBhc2NpaS1vbmx5IG9yIGFscmVhZHkgaW4gcHVueWNvZGUKLSAgICByZXR1cm4ge3N1YmRvbWFpbjogKHN1YmRvbWFpbi5lbmNvZGUoImlkbmEiKSwgaG9zdCkKKyAgICByZXR1cm4ge3N1YmRvbWFpbjogKHN1YmRvbWFpbi5lbmNvZGUoImlkbmEiKSwgaG9zdC5lbmNvZGUoKSkKICAgICAgICAgICAgIGZvciBzdWJkb21haW4gaW4gc3ViZG9tYWluc30KIAogCiBkZWYgc3RhcnRfc2VydmVycyhob3N0LCBwb3J0cywgcGF0aHMsIHJvdXRlcywgYmluZF9ob3N0bmFtZSwgZXh0ZXJuYWxfY29uZmlnLCBzc2xfY29uZmlnLAogICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgogICAgIHNlcnZlcnMgPSBkZWZhdWx0ZGljdChsaXN0KQotICAgIGZvciBzY2hlbWUsIHBvcnRzIGluIHBvcnRzLml0ZXJpdGVtcygpOgorICAgIGZvciBzY2hlbWUsIHBvcnRzIGluIHBvcnRzLml0ZW1zKCk6CiAgICAgICAgIGFzc2VydCBsZW4ocG9ydHMpID09IHsiaHR0cCI6Mn0uZ2V0KHNjaGVtZSwgMSkKIAogICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKQEAgLTYxMiw3ICs2MTIsNyBAQAogCiBkZWYgZ2V0X3BvcnRzKGNvbmZpZywgc3NsX2Vudmlyb25tZW50KToKICAgICBydiA9IGRlZmF1bHRkaWN0KGxpc3QpCi0gICAgZm9yIHNjaGVtZSwgcG9ydHMgaW4gY29uZmlnWyJwb3J0cyJdLml0ZXJpdGVtcygpOgorICAgIGZvciBzY2hlbWUsIHBvcnRzIGluIGNvbmZpZ1sicG9ydHMiXS5pdGVtcygpOgogICAgICAgICBmb3IgaSwgcG9ydCBpbiBlbnVtZXJhdGUocG9ydHMpOgogICAgICAgICAgICAgaWYgc2NoZW1lIGluIFsid3NzIiwgImh0dHBzIl0gYW5kIG5vdCBzc2xfZW52aXJvbm1lbnQuc3NsX2VuYWJsZWQ6CiAgICAgICAgICAgICAgICAgcG9ydCA9IE5vbmUKQEAgLTYyOSwxNiArNjI5LDE2IEBACiAgICAgaG9zdCA9IGNvbmZpZ1siZXh0ZXJuYWxfaG9zdCJdIGlmIGNvbmZpZ1siZXh0ZXJuYWxfaG9zdCJdIGVsc2UgY29uZmlnWyJob3N0Il0KICAgICBkb21haW5zID0gZ2V0X3N1YmRvbWFpbnMoaG9zdCkKICAgICBwb3J0c18gPSB7fQotICAgIGZvciBzY2hlbWUsIHBvcnRzX3VzZWQgaW4gcG9ydHMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHNjaGVtZSwgcG9ydHNfdXNlZCBpbiBwb3J0cy5pdGVtcygpOgogICAgICAgICBwb3J0c19bc2NoZW1lXSA9IHBvcnRzX3VzZWQKIAotICAgIGZvciBrZXksIHZhbHVlIGluIGRvbWFpbnMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIGRvbWFpbnNba2V5XSA9ICIuIi5qb2luKHZhbHVlKQorICAgIGZvciBrZXksIHZhbHVlIGluIGRvbWFpbnMuaXRlbXMoKToKKyAgICAgICAgZG9tYWluc1trZXldID0gYiIuIi5qb2luKHZhbHVlKQogCiAgICAgZG9tYWluc1siIl0gPSBob3N0CiAKICAgICBwb3J0c18gPSB7fQotICAgIGZvciBzY2hlbWUsIHBvcnRzX3VzZWQgaW4gcG9ydHMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHNjaGVtZSwgcG9ydHNfdXNlZCBpbiBwb3J0cy5pdGVtcygpOgogICAgICAgICBwb3J0c19bc2NoZW1lXSA9IHBvcnRzX3VzZWQKIAogICAgIHJldHVybiB7Imhvc3QiOiBob3N0LApAQCAtNzAyLDcgKzcwMiw3IEBACiAKIGRlZiBtZXJnZV9qc29uKGJhc2Vfb2JqLCBvdmVycmlkZV9vYmopOgogICAgIHJ2ID0ge30KLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiBiYXNlX29iai5pdGVyaXRlbXMoKToKKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiBiYXNlX29iai5pdGVtcygpOgogICAgICAgICBpZiBrZXkgbm90IGluIG92ZXJyaWRlX29iajoKICAgICAgICAgICAgIHJ2W2tleV0gPSB2YWx1ZQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3NzbHV0aWxzL19faW5pdF9fLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3NzbHV0aWxzL19faW5pdF9fLnB5CmluZGV4IGU0NmJlODUuLjMxM2Y2YWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zc2x1dGlscy9fX2luaXRfXy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvc3NsdXRpbHMvX19pbml0X18ucHkKQEAgLTEsMyArMSw3IEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorCiBpbXBvcnQgb3BlbnNzbAogaW1wb3J0IHByZWdlbmVyYXRlZAogZnJvbSBiYXNlIGltcG9ydCBOb1NTTEVudmlyb25tZW50CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvc3NsdXRpbHMvb3BlbnNzbC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zc2x1dGlscy9vcGVuc3NsLnB5CmluZGV4IDA5YzI0NzEuLmVlOWJhZDIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zc2x1dGlscy9vcGVuc3NsLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy9zc2x1dGlscy9vcGVuc3NsLnB5CkBAIC02Niw3ICs2Niw3IEBACiAgICAgICAgICMgU3RhcnRQcm9jZXNzIGlzIHBpY2t5IGFib3V0IGFsbCB0aGUga2V5cy92YWx1ZXMgYmVpbmcgcGxhaW4gc3RyaW5ncywKICAgICAgICAgIyBidXQgYXQgbGVhc3QgaW4gTVNZUyBzaGVsbHMsIHRoZSBvcy5lbnZpcm9uIGRpY3Rpb25hcnkgY2FuIGJlIG1peGVkLgogICAgICAgICBlbnYgPSB7fQotICAgICAgICBmb3IgaywgdiBpbiBvcy5lbnZpcm9uLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgaywgdiBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZW52W2suZW5jb2RlKCJ1dGY4IildID0gdi5lbmNvZGUoInV0ZjgiKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKQEAgLTEwNiw2ICsxMDYsOCBAQAogICAgIGZvciB2YXIsIGtleSBpbiBhcmdzOgogICAgICAgICB2YWx1ZSA9IGxvY2FscygpW3Zhcl0KICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBieXRlcyk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5kZWNvZGUoKQogICAgICAgICAgICAgcnYuYXBwZW5kKCIvJXM9JXMiICUgKGtleSwgdmFsdWUucmVwbGFjZSgiLyIsICJcXC8iKSkpCiAKICAgICByZXR1cm4gIiIuam9pbihydikKQEAgLTMxMCw3ICszMTIsNyBAQAogICAgICAgICAgICAgZW5kX2RhdGVfc3RyID0gb3BlbnNzbCgieDUwOSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItbm9vdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWVuZGRhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWluIiwgY2VydF9wYXRoKS5zcGxpdCgiPSIsIDEpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1pbiIsIGNlcnRfcGF0aCkuZGVjb2RlKCkuc3BsaXQoIj0iLCAxKVsxXS5zdHJpcCgpCiAgICAgICAgICAgICAjIE5vdCBzdXJlIGlmIHRoaXMgd29ya3MgaW4gb3RoZXIgbG9jYWxlcwogICAgICAgICAgICAgZW5kX2RhdGUgPSBkYXRldGltZS5zdHJwdGltZShlbmRfZGF0ZV9zdHIsICIlYiAlZCAlSDolTTolUyAlWSAlWiIpCiAgICAgICAgICAgICB0aW1lX2J1ZmZlciA9IHRpbWVkZWx0YSgqKkNFUlRfRVhQSVJZX0JVRkZFUikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHQvcnVuLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdC9ydW4ucHkKaW5kZXggYTdjZDQ4ZC4uYjlmYjY5ZCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdC9ydW4ucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdC9ydW4ucHkKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiAgICAgZ2xvYmFsIGxvZ2dlcgogCi0gICAga3dhcmdzID0gdXRpbHMuS3dhcmdzKGt3YXJncy5pdGVyaXRlbXMoKSkKKyAgICBrd2FyZ3MgPSB1dGlscy5Ld2FyZ3Moa3dhcmdzLml0ZW1zKCkpCiAKICAgICBwcm9kdWN0X3BhcnRzID0ga3dhcmdzWyJwcm9kdWN0Il0uc3BsaXQoIjoiKQogICAgIGt3YXJnc1sicHJvZHVjdCJdID0gcHJvZHVjdF9wYXJ0c1swXQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdC9zdGFiaWxpdHkucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0L3N0YWJpbGl0eS5weQppbmRleCBiM2M4NTcwLi5hODc4ODZkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0L3N0YWJpbGl0eS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0L3N0YWJpbGl0eS5weQpAQCAtOTAsMTAgKzkwLDEwIEBACiAgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQogICAgIHJlYWRlci5oYW5kbGVfbG9nKHJlYWRlci5yZWFkKGxvZyksIGhhbmRsZXIpCiAgICAgcmVzdWx0cyA9IGhhbmRsZXIucmVzdWx0cwotICAgIGZvciB0ZXN0X25hbWUsIHRlc3QgaW4gcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGVzdF9uYW1lLCB0ZXN0IGluIHJlc3VsdHMuaXRlbXMoKToKICAgICAgICAgaWYgaXNfaW5jb25zaXN0ZW50KHRlc3RbInN0YXR1cyJdLCBpdGVyYXRpb25zKToKICAgICAgICAgICAgIGluY29uc2lzdGVudC5hcHBlbmQoKHRlc3RfbmFtZSwgTm9uZSwgdGVzdFsic3RhdHVzIl0sIFtdKSkKLSAgICAgICAgZm9yIHN1YnRlc3RfbmFtZSwgc3VidGVzdCBpbiB0ZXN0WyJzdWJ0ZXN0cyJdLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Igc3VidGVzdF9uYW1lLCBzdWJ0ZXN0IGluIHRlc3RbInN1YnRlc3RzIl0uaXRlbXMoKToKICAgICAgICAgICAgIGlmIGlzX2luY29uc2lzdGVudChzdWJ0ZXN0WyJzdGF0dXMiXSwgaXRlcmF0aW9ucyk6CiAgICAgICAgICAgICAgICAgaW5jb25zaXN0ZW50LmFwcGVuZCgodGVzdF9uYW1lLCBzdWJ0ZXN0X25hbWUsIHN1YnRlc3RbInN0YXR1cyJdLCBzdWJ0ZXN0WyJtZXNzYWdlcyJdKSkKICAgICByZXR1cm4gcmVzdWx0cywgaW5jb25zaXN0ZW50CkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzIiBpZiBsZW4ocmVzdWx0cykgPiAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgInRlc3QiKSkKIAotICAgIGZvciB0ZXN0X25hbWUsIHRlc3QgaW4gcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGVzdF9uYW1lLCB0ZXN0IGluIHJlc3VsdHMuaXRlbXMoKToKICAgICAgICAgYmFzZXVybCA9ICJodHRwOi8vdzNjLXRlc3Qub3JnL3N1Ym1pc3Npb25zIgogICAgICAgICBpZiAiaHR0cHMiIGluIG9zLnBhdGguc3BsaXRleHQodGVzdF9uYW1lKVswXS5zcGxpdCgiLiIpWzE6XToKICAgICAgICAgICAgIGJhc2V1cmwgPSAiaHR0cHM6Ly93M2MtdGVzdC5vcmcvc3VibWlzc2lvbnMiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3Rlc3QvdGVzdC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvdGVzdC90ZXN0LnB5CmluZGV4IDAzNGUzMTcuLmYwNmY5ZDYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvdGVzdC90ZXN0LnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvdGVzdC90ZXN0LnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAKIGRlZiBzZXR0aW5nc190b19hcmd2KHNldHRpbmdzKToKICAgICBydiA9IFtdCi0gICAgZm9yIG5hbWUsIHZhbHVlIGluIHNldHRpbmdzLml0ZXJpdGVtcygpOgorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZXR0aW5ncy5pdGVtcygpOgogICAgICAgICBrZXkgPSAiLS0lcyIgJSBuYW1lCiAgICAgICAgIGlmIG5vdCB2YWx1ZToKICAgICAgICAgICAgIHJ2LmFwcGVuZChrZXkpCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogICAgIGxvZ2dlci5zdWl0ZV9zdGFydCh0ZXN0cz1bXSkKIAotICAgIGZvciBwcm9kdWN0LCBwcm9kdWN0X3NldHRpbmdzIGluIGNvbmZpZ1sicHJvZHVjdHMiXS5pdGVyaXRlbXMoKToKKyAgICBmb3IgcHJvZHVjdCwgcHJvZHVjdF9zZXR0aW5ncyBpbiBjb25maWdbInByb2R1Y3RzIl0uaXRlbXMoKToKICAgICAgICAgaWYgYXJncy5wcm9kdWN0IGFuZCBwcm9kdWN0IG5vdCBpbiBhcmdzLnByb2R1Y3Q6CiAgICAgICAgICAgICBjb250aW51ZQogCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iYXNlLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvYnJvd3NlcnMvYmFzZS5weQppbmRleCBlNGM5YzMwLi45NzU0OWYzIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9icm93c2Vycy9iYXNlLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Jyb3dzZXJzL2Jhc2UucHkKQEAgLTE2Miw1ICsxNjIsNSBAQAogICAgICAgICBidXQgaW4gc29tZSBjYXNlcyBpdCBtYXkgaGF2ZSBtb3JlIGVsYWJvcmF0ZSBtZXRob2RzIGZvciBzZXR0aW5nCiAgICAgICAgIHVwIHRoZSBicm93c2VyIGZyb20gdGhlIHJ1bm5lciBwcm9jZXNzLgogICAgICAgICAiIiIKLSAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKToKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2Vudmlyb25tZW50LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZW52aXJvbm1lbnQucHkKaW5kZXggMTY3ZGE5NS4uNDY2NDYwYiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZW52aXJvbm1lbnQucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZW52aXJvbm1lbnQucHkKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKICAgICAgICAgc2VsZi5wcm9jZXNzX2ludGVycnVwdHMoKQogCi0gICAgICAgIGZvciBzY2hlbWUsIHNlcnZlcnMgaW4gc2VsZi5zZXJ2ZXJzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Igc2NoZW1lLCBzZXJ2ZXJzIGluIHNlbGYuc2VydmVycy5pdGVtcygpOgogICAgICAgICAgICAgZm9yIHBvcnQsIHNlcnZlciBpbiBzZXJ2ZXJzOgogICAgICAgICAgICAgICAgIHNlcnZlci5raWxsKCkKICAgICAgICAgZm9yIGNtIGluIHNlbGYuZW52X2V4dHJhczoKQEAgLTE4OSw3ICsxODksNyBAQAogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhdGgpKQogICAgICAgICAgICAgcm91dGVfYnVpbGRlci5hZGRfc3RhdGljKHBhdGgsIGZvcm1hdF9hcmdzLCBjb250ZW50X3R5cGUsIHJvdXRlKQogCi0gICAgICAgIGZvciB1cmxfYmFzZSwgcGF0aHMgaW4gc2VsZi50ZXN0X3BhdGhzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3IgdXJsX2Jhc2UsIHBhdGhzIGluIHNlbGYudGVzdF9wYXRocy5pdGVtcygpOgogICAgICAgICAgICAgaWYgdXJsX2Jhc2UgPT0gIi8iOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByb3V0ZV9idWlsZGVyLmFkZF9tb3VudF9wb2ludCh1cmxfYmFzZSwgcGF0aHNbInRlc3RzX3BhdGgiXSkKQEAgLTIxMCw3ICsyMTAsNyBAQAogCiAgICAgZGVmIHRlc3Rfc2VydmVycyhzZWxmKToKICAgICAgICAgZmFpbGVkID0gW10KLSAgICAgICAgZm9yIHNjaGVtZSwgc2VydmVycyBpbiBzZWxmLnNlcnZlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBzY2hlbWUsIHNlcnZlcnMgaW4gc2VsZi5zZXJ2ZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBmb3IgcG9ydCwgc2VydmVyIGluIHNlcnZlcnM6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi50ZXN0X3NlcnZlcl9wb3J0OgogICAgICAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JtYXJpb25ldHRlLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9ybWFyaW9uZXR0ZS5weQppbmRleCAxYzU4OGQzLi40ZDkyMmU4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JtYXJpb25ldHRlLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL2V4ZWN1dG9ycy9leGVjdXRvcm1hcmlvbmV0dGUucHkKQEAgLTE5MiwxNCArMTkyLDE0IEBACiAKICAgICBkZWYgb25fZW52aXJvbm1lbnRfY2hhbmdlKHNlbGYsIG9sZF9lbnZpcm9ubWVudCwgbmV3X2Vudmlyb25tZW50KToKICAgICAgICAgI1Vuc2V0IGFsbCB0aGUgb2xkIHByZWZzCi0gICAgICAgIGZvciBuYW1lIGluIG9sZF9lbnZpcm9ubWVudC5nZXQoInByZWZzIiwge30pLml0ZXJrZXlzKCk6CisgICAgICAgIGZvciBuYW1lIGluIG9sZF9lbnZpcm9ubWVudC5nZXQoInByZWZzIiwge30pLmtleXMoKToKICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leGVjdXRvci5vcmlnaW5hbF9wcmVmX3ZhbHVlc1tuYW1lXQogICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyX3VzZXJfcHJlZihuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnNldF9wcmVmKG5hbWUsIHZhbHVlKQogCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBuZXdfZW52aXJvbm1lbnQuZ2V0KCJwcmVmcyIsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG5ld19lbnZpcm9ubWVudC5nZXQoInByZWZzIiwge30pLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLm9yaWdpbmFsX3ByZWZfdmFsdWVzW25hbWVdID0gc2VsZi5nZXRfcHJlZihuYW1lKQogICAgICAgICAgICAgc2VsZi5zZXRfcHJlZihuYW1lLCB2YWx1ZSkKIApAQCAtNTc2LDcgKzU3Niw3IEBACiAgICAgICAgIGRhdGEgPSB7InNjcmVlbnNob3QiOiBzY3JlZW5zaG90fQogICAgICAgICBpZiBzZWxmLmV4ZWN1dG9yLmdyb3VwX21ldGFkYXRhIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZGF0YVsidXJsQ291bnQiXSA9IHt1cmxwYXJzZS51cmxqb2luKHNlbGYuZXhlY3V0b3Iuc2VydmVyX3VybChrZXlbMF0pLCBrZXlbMV0pOnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuZXhlY3V0b3IuZ3JvdXBfbWV0YWRhdGEuZ2V0KCJ1cmxfY291bnQiLCB7fSkuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5leGVjdXRvci5ncm91cF9tZXRhZGF0YS5nZXQoInVybF9jb3VudCIsIHt9KS5pdGVtcygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlID4gMX0KICAgICAgICAgc2VsZi5leGVjdXRvci5wcm90b2NvbC5tYXJpb25ldHRlLnNldF9jb250ZXh0KHNlbGYuZXhlY3V0b3IucHJvdG9jb2wubWFyaW9uZXR0ZS5DT05URVhUX0NIUk9NRSkKICAgICAgICAgc2VsZi5leGVjdXRvci5wcm90b2NvbC5tYXJpb25ldHRlLl9zZW5kX21lc3NhZ2UoInJlZnRlc3Q6c2V0dXAiLCBkYXRhKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvZXhlY3V0b3JzL2V4ZWN1dG9yc2Vydm8ucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQppbmRleCAyMTZkNjg3Li42YjMzZmM2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9leGVjdXRvcnMvZXhlY3V0b3JzZXJ2by5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICBdCiAgICAgICAgIGZvciBzdHlsZXNoZWV0IGluIHNlbGYuYnJvd3Nlci51c2VyX3N0eWxlc2hlZXRzOgogICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlci1zdHlsZXNoZWV0Iiwgc3R5bGVzaGVldF0KLSAgICAgICAgZm9yIHByZWYsIHZhbHVlIGluIHRlc3QuZW52aXJvbm1lbnQuZ2V0KCdwcmVmcycsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHByZWYsIHZhbHVlIGluIHRlc3QuZW52aXJvbm1lbnQuZ2V0KCdwcmVmcycsIHt9KS5pdGVtcygpOgogICAgICAgICAgICAgYXJncyArPSBbIi0tcHJlZiIsICIlcz0lcyIgJSAocHJlZiwgdmFsdWUpXQogICAgICAgICBpZiBzZWxmLmJyb3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aDoKICAgICAgICAgICAgIGFyZ3MgKz0gWyItLWNlcnRpZmljYXRlLXBhdGgiLCBzZWxmLmJyb3dzZXIuY2FfY2VydGlmaWNhdGVfcGF0aF0KQEAgLTIxOSw3ICsyMTksNyBAQAogICAgICAgICAgICAgZm9yIHN0eWxlc2hlZXQgaW4gc2VsZi5icm93c2VyLnVzZXJfc3R5bGVzaGVldHM6CiAgICAgICAgICAgICAgICAgY29tbWFuZCArPSBbIi0tdXNlci1zdHlsZXNoZWV0Iiwgc3R5bGVzaGVldF0KIAotICAgICAgICAgICAgZm9yIHByZWYsIHZhbHVlIGluIHRlc3QuZW52aXJvbm1lbnQuZ2V0KCdwcmVmcycsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBwcmVmLCB2YWx1ZSBpbiB0ZXN0LmVudmlyb25tZW50LmdldCgncHJlZnMnLCB7fSkuaXRlbXMoKToKICAgICAgICAgICAgICAgICBjb21tYW5kICs9IFsiLS1wcmVmIiwgIiVzPSVzIiAlIChwcmVmLCB2YWx1ZSldCiAKICAgICAgICAgICAgIGNvbW1hbmQgKz0gWyItLXJlc29sdXRpb24iLCB2aWV3cG9ydF9zaXplIG9yICI4MDB4NjAwIl0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0aW5jbHVkZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL21hbmlmZXN0aW5jbHVkZS5weQppbmRleCAxYjUzYTQyLi41MmQ3MTdhIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdGluY2x1ZGUucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3RpbmNsdWRlLnB5CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIGlmIHBhdGhzOgogICAgICAgICAgICAgdXJscyA9IFtdCiAgICAgICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAgICAgICAgICAgICBmb3IgbWFuaWZlc3QsIGRhdGEgaW4gdGVzdF9tYW5pZmVzdHMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZm9yIG1hbmlmZXN0LCBkYXRhIGluIHRlc3RfbWFuaWZlc3RzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgZGF0YVsidGVzdHNfcGF0aCJdKQogICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciA9IG1hbmlmZXN0Lml0ZXJwYXRoIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpIGVsc2UgbWFuaWZlc3QuaXRlcmRpcgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWFuaWZlc3R1cGRhdGUucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdHVwZGF0ZS5weQppbmRleCAwN2U2MjNjLi4yM2EwNTI4IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdHVwZGF0ZS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tYW5pZmVzdHVwZGF0ZS5weQpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9kYXRhWyJleHBlY3RlZCJdCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICAgICAgZm9yIHN1YnRlc3QgaW4gc2VsZi5zdWJ0ZXN0cy5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciBzdWJ0ZXN0IGluIHNlbGYuc3VidGVzdHMudmFsdWVzKCk6CiAgICAgICAgICAgICBzdWJ0ZXN0LmNsZWFyX2V4cGVjdGVkKCkKIAogICAgIGRlZiBhcHBlbmQoc2VsZiwgbm9kZSk6CkBAIC0zMzYsNyArMzM2LDcgQEAKIAogICAgIGJ5X3Byb3BlcnR5ID0gZGVmYXVsdGRpY3Qoc2V0KQogICAgIGZvciBydW5faW5mbywgc3RhdHVzIGluIHZhbHVlczoKLSAgICAgICAgZm9yIHByb3BfbmFtZSwgcHJvcF92YWx1ZSBpbiBydW5faW5mby5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIHByb3BfbmFtZSwgcHJvcF92YWx1ZSBpbiBydW5faW5mby5pdGVtcygpOgogICAgICAgICAgICAgYnlfcHJvcGVydHlbKHByb3BfbmFtZSwgcHJvcF92YWx1ZSldLmFkZChzdGF0dXMpCiAKICAgICBpZiBwcm9wZXJ0eV9vcmRlciBpcyBOb25lOgpAQCAtMzUwLDEzICszNTAsMTMgQEAKICAgICAjIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB2YWx1ZSwgcmVtb3ZlIGFueSBwcm9wZXJ0aWVzIHRoYXQgYXJlIGNvbW1vbgogICAgICMgZm9yIGFsbCB0aGUgdmFsdWVzCiAgICAgaWYgbGVuKHZhbHVlcykgPiAxOgotICAgICAgICBmb3Iga2V5LCBzdGF0dXNlcyBpbiBieV9wcm9wZXJ0eS5jb3B5KCkuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBrZXksIHN0YXR1c2VzIGluIGJ5X3Byb3BlcnR5LmNvcHkoKS5pdGVtcygpOgogICAgICAgICAgICAgaWYgbGVuKHN0YXR1c2VzKSA9PSBsZW4odmFsdWVzKToKICAgICAgICAgICAgICAgICBkZWwgYnlfcHJvcGVydHlba2V5XQogICAgICAgICBpZiBub3QgYnlfcHJvcGVydHk6CiAgICAgICAgICAgICByYWlzZSBDb25kaXRpb25FcnJvcgogCi0gICAgcHJvcGVydGllcyA9IHNldChpdGVtWzBdIGZvciBpdGVtIGluIGJ5X3Byb3BlcnR5Lml0ZXJrZXlzKCkpCisgICAgcHJvcGVydGllcyA9IHNldChpdGVtWzBdIGZvciBpdGVtIGluIGJ5X3Byb3BlcnR5LmtleXMoKSkKICAgICBpbmNsdWRlX3Byb3BzID0gW10KIAogICAgIGZvciBwcm9wIGluIHByb3BlcnR5X29yZGVyOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvbWV0YWRhdGEucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tZXRhZGF0YS5weQppbmRleCA3M2YyNjZmLi5jMzI0ODdjIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tZXRhZGF0YS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9tZXRhZGF0YS5weQpAQCAtNTIsMTIgKzUyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9vcmRlcj1wcm9wZXJ0eV9vcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fcHJvcGVydGllcz1ib29sZWFuX3Byb3BlcnRpZXMpCiAKLSAgICBmb3IgdGVzdF9tYW5pZmVzdCwgZXhwZWN0ZWRfbWFwIGluIGV4cGVjdGVkX21hcF9ieV9tYW5pZmVzdC5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGVzdF9tYW5pZmVzdCwgZXhwZWN0ZWRfbWFwIGluIGV4cGVjdGVkX21hcF9ieV9tYW5pZmVzdC5pdGVtcygpOgogICAgICAgICB1cmxfYmFzZSA9IG1hbmlmZXN0c1t0ZXN0X21hbmlmZXN0XVsidXJsX2Jhc2UiXQogICAgICAgICBtZXRhZGF0YV9wYXRoID0gdGVzdF9wYXRoc1t1cmxfYmFzZV1bIm1ldGFkYXRhX3BhdGgiXQogICAgICAgICB3cml0ZV9jaGFuZ2VzKG1ldGFkYXRhX3BhdGgsIGV4cGVjdGVkX21hcCkKIAotICAgIHJlc3VsdHNfY2hhbmdlZCA9IFtpdGVtLnRlc3RfcGF0aCBmb3IgaXRlbSBpbiBleHBlY3RlZF9tYXAuaXRlcnZhbHVlcygpIGlmIGl0ZW0ubW9kaWZpZWRdCisgICAgcmVzdWx0c19jaGFuZ2VkID0gW2l0ZW0udGVzdF9wYXRoIGZvciBpdGVtIGluIGV4cGVjdGVkX21hcC52YWx1ZXMoKSBpZiBpdGVtLm1vZGlmaWVkXQogCiAgICAgcmV0dXJuIHVuZXhwZWN0ZWRfY2hhbmdlcyhtYW5pZmVzdHMsIGNoYW5nZV9kYXRhLCByZXN1bHRzX2NoYW5nZWQpCiAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgIGZpbGVzX2NoYW5nZWQgPSBzZXQoZmlsZXNfY2hhbmdlZCkKIAogICAgIHJvb3RfbWFuaWZlc3QgPSBOb25lCi0gICAgZm9yIG1hbmlmZXN0LCBwYXRocyBpbiBtYW5pZmVzdHMuaXRlcml0ZW1zKCk6CisgICAgZm9yIG1hbmlmZXN0LCBwYXRocyBpbiBtYW5pZmVzdHMuaXRlbXMoKToKICAgICAgICAgaWYgcGF0aHNbInVybF9iYXNlIl0gPT0gIi8iOgogICAgICAgICAgICAgcm9vdF9tYW5pZmVzdCA9IG1hbmlmZXN0CiAgICAgICAgICAgICBicmVhawpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgZXhwZWN0ZWRfbWFwID0ge30KICAgICBpZF90ZXN0X21hcCA9IHt9CiAKLSAgICBmb3IgdGVzdF9tYW5pZmVzdCwgcGF0aHMgaW4gbWFuaWZlc3RzLml0ZXJpdGVtcygpOgorICAgIGZvciB0ZXN0X21hbmlmZXN0LCBwYXRocyBpbiBtYW5pZmVzdHMuaXRlbXMoKToKICAgICAgICAgZXhwZWN0ZWRfbWFwX21hbmlmZXN0LCBpZF9wYXRoX21hcF9tYW5pZmVzdCA9IGNyZWF0ZV90ZXN0X3RyZWUoCiAgICAgICAgICAgICBwYXRoc1sibWV0YWRhdGFfcGF0aCJdLAogICAgICAgICAgICAgdGVzdF9tYW5pZmVzdCwKQEAgLTE0OCw4ICsxNDgsOCBAQAogICAgICAgICB3aXRoIG9wZW4obG9nX2ZpbGVuYW1lKSBhcyBmOgogICAgICAgICAgICAgdXBkYXRlci51cGRhdGVfZnJvbV9sb2coZikKIAotICAgIGZvciBtYW5pZmVzdF9leHBlY3RlZCBpbiBleHBlY3RlZF9tYXAuaXRlcnZhbHVlcygpOgotICAgICAgICBmb3IgdHJlZSBpbiBtYW5pZmVzdF9leHBlY3RlZC5pdGVydmFsdWVzKCk6CisgICAgZm9yIG1hbmlmZXN0X2V4cGVjdGVkIGluIGV4cGVjdGVkX21hcC52YWx1ZXMoKToKKyAgICAgICAgZm9yIHRyZWUgaW4gbWFuaWZlc3RfZXhwZWN0ZWQudmFsdWVzKCk6CiAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0cmVlLml0ZXJjaGlsZHJlbigpOgogICAgICAgICAgICAgICAgIGZvciBzdWJ0ZXN0IGluIHRlc3QuaXRlcmNoaWxkcmVuKCk6CiAgICAgICAgICAgICAgICAgICAgIHN1YnRlc3QuY29hbGVzY2VfZXhwZWN0ZWQoKQpAQCAtMTk2LDcgKzE5Niw3IEBACiAKIGRlZiB3cml0ZV9uZXdfZXhwZWN0ZWQobWV0YWRhdGFfcGF0aCwgZXhwZWN0ZWRfbWFwKToKICAgICAjIFNlcmlhbGl6ZSB0aGUgZGF0YSBiYWNrIHRvIGEgZmlsZQotICAgIGZvciB0cmVlIGluIGV4cGVjdGVkX21hcC5pdGVydmFsdWVzKCk6CisgICAgZm9yIHRyZWUgaW4gZXhwZWN0ZWRfbWFwLnZhbHVlcygpOgogICAgICAgICBpZiBub3QgdHJlZS5pc19lbXB0eToKICAgICAgICAgICAgIG1hbmlmZXN0X3N0ciA9IHdwdG1hbmlmZXN0LnNlcmlhbGl6ZSh0cmVlLm5vZGUsIHNraXBfZW1wdHlfZGF0YT1UcnVlKQogICAgICAgICAgICAgYXNzZXJ0IG1hbmlmZXN0X3N0ciAhPSAiIgpAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgZXhwZWN0ZWRfbWFwID0ge30KICAgICBpZF90ZXN0X21hcCA9IHt9CiAgICAgZXhjbHVkZV90eXBlcyA9IGZyb3plbnNldChbInN0dWIiLCAiaGVscGVyIiwgIm1hbnVhbCIsICJzdXBwb3J0IiwgImNvbmZvcm1hbmNlY2hlY2tlciJdKQotICAgIGFsbF90eXBlcyA9IFtpdGVtLml0ZW1fdHlwZSBmb3IgaXRlbSBpbiBtYW5pZmVzdGl0ZW0uX19kaWN0X18uaXRlcnZhbHVlcygpCisgICAgYWxsX3R5cGVzID0gW2l0ZW0uaXRlbV90eXBlIGZvciBpdGVtIGluIG1hbmlmZXN0aXRlbS5fX2RpY3RfXy52YWx1ZXMoKQogICAgICAgICAgICAgICAgICBpZiB0eXBlKGl0ZW0pID09IHR5cGUgYW5kCiAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoaXRlbSwgbWFuaWZlc3RpdGVtLk1hbmlmZXN0SXRlbSkgYW5kCiAgICAgICAgICAgICAgICAgIGl0ZW0uaXRlbV90eXBlIGlzIG5vdCBOb25lXQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcHJvZHVjdHMucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5weQppbmRleCBjMDc3Zjk1Li5mZjZiNDA2IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9wcm9kdWN0cy5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBpZiAicnVuX2luZm9fZXh0cmFzIiBpbiBkYXRhIGVsc2UgbGFtYmRhICoqa3dhcmdzOnt9KQogCiAgICAgZXhlY3V0b3JfY2xhc3NlcyA9IHt9Ci0gICAgZm9yIHRlc3RfdHlwZSwgY2xzX25hbWUgaW4gZGF0YVsiZXhlY3V0b3IiXS5pdGVyaXRlbXMoKToKKyAgICBmb3IgdGVzdF90eXBlLCBjbHNfbmFtZSBpbiBkYXRhWyJleGVjdXRvciJdLml0ZW1zKCk6CiAgICAgICAgIGNscyA9IGdldGF0dHIobW9kdWxlLCBjbHNfbmFtZSkKICAgICAgICAgZXhlY3V0b3JfY2xhc3Nlc1t0ZXN0X3R5cGVdID0gY2xzCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3JlZHVjZS5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3JlZHVjZS5weQppbmRleCBkMjQ1ZWUzLi5jMTRlZmZkIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci9yZWR1Y2UucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvcmVkdWNlLnB5CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoaXRlbSkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgcmV0dXJuIGFueShsZW4oaXRlbSkgPiAxIGZvciBpdGVtIGluIHN0YXR1c2VzLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgcmV0dXJuIGFueShsZW4oaXRlbSkgPiAxIGZvciBpdGVtIGluIHN0YXR1c2VzLnZhbHVlcygpKQogCiAgICAgZGVmIGdldF9pbml0aWFsX3Rlc3RzKHNlbGYpOgogICAgICAgICAjIE5lZWQgdG8gcGFzcyBpbiBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3Rsb2FkZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci90ZXN0bG9hZGVyLnB5CmluZGV4IDkxMzkyZmUuLmM2OTNjZGIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3Rlc3Rsb2FkZXIucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdGVzdGxvYWRlci5weQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZyhzZWxmLmV4cGVjdGVkX3RpbWUpCi0gICAgICAgIGZvciBpLCBjaHVuayBpbiBjaHVua3MuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBpLCBjaHVuayBpbiBjaHVua3MuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCIlaTogJWksICVpIiAlIChpICsgMSwgY2h1bmsudGltZSwgY2h1bmsuYmFkbmVzcykpCiAKICAgICAgICAgYXNzZXJ0IHNlbGYuX2FsbF90ZXN0cyhieV9kaXIpID09IHNlbGYuX2NodW5rZWRfdGVzdHMoY2h1bmtzKQpAQCAtMjA4LDEzICsyMDgsMTMgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9hbGxfdGVzdHMoYnlfZGlyKToKICAgICAgICAgIiIiUmV0dXJuIGEgc2V0IG9mIGFsbCB0ZXN0cyBpbiB0aGUgbWFuaWZlc3QgZnJvbSBhIGdyb3VwaW5nIGJ5IGRpcmVjdG9yeSIiIgotICAgICAgICByZXR1cm4gc2V0KHhbMF0gZm9yIGl0ZW0gaW4gYnlfZGlyLml0ZXJ2YWx1ZXMoKQorICAgICAgICByZXR1cm4gc2V0KHhbMF0gZm9yIGl0ZW0gaW4gYnlfZGlyLnZhbHVlcygpCiAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gaXRlbS50ZXN0cykKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2NodW5rZWRfdGVzdHMoY2h1bmtzKToKICAgICAgICAgIiIiUmV0dXJuIGEgc2V0IG9mIGFsbCB0ZXN0cyBpbiB0aGUgbWFuaWZlc3QgZnJvbSB0aGUgY2h1bmsgbGlzdCIiIgotICAgICAgICByZXR1cm4gc2V0KHhbMF0gZm9yIGNodW5rIGluIGNodW5rcy5pdGVydmFsdWVzKCkKKyAgICAgICAgcmV0dXJuIHNldCh4WzBdIGZvciBjaHVuayBpbiBjaHVua3MudmFsdWVzKCkKICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiBjaHVuay5wYXRocwogICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHBhdGgudGVzdHMpCiAKQEAgLTM4MSw3ICszODEsNyBAQAogCiAgICAgZGVmIGxvYWQoc2VsZik6CiAgICAgICAgIHJ2ID0ge30KLSAgICAgICAgZm9yIHVybF9iYXNlLCBwYXRocyBpbiBzZWxmLnRlc3RfcGF0aHMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciB1cmxfYmFzZSwgcGF0aHMgaW4gc2VsZi50ZXN0X3BhdGhzLml0ZW1zKCk6CiAgICAgICAgICAgICBtYW5pZmVzdF9maWxlID0gc2VsZi5sb2FkX21hbmlmZXN0KHVybF9iYXNlPXVybF9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnBhdGhzKQogICAgICAgICAgICAgcGF0aF9kYXRhID0geyJ1cmxfYmFzZSI6IHVybF9iYXNlfQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL21ldGFkYXRhLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvdXBkYXRlL21ldGFkYXRhLnB5CmluZGV4IDVmNjkyNWUuLjcwOTY0ZmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3VwZGF0ZS9tZXRhZGF0YS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci91cGRhdGUvbWV0YWRhdGEucHkKQEAgLTU3LDcgKzU3LDcgQEAKIAogICAgICAgICBpZiBub3QgbG9jYWxfdHJlZS5pc19jbGVhbjoKICAgICAgICAgICAgIG1ldGFkYXRhX3BhdGhzID0gW21hbmlmZXN0X3BhdGhbIm1ldGFkYXRhX3BhdGgiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1hbmlmZXN0X3BhdGggaW4gc3RhdGUucGF0aHMuaXRlcnZhbHVlcygpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG1hbmlmZXN0X3BhdGggaW4gc3RhdGUucGF0aHMudmFsdWVzKCldCiAgICAgICAgICAgICBmb3IgcGF0aCBpbiBtZXRhZGF0YV9wYXRoczoKICAgICAgICAgICAgICAgICBsb2NhbF90cmVlLmFkZF9uZXcob3MucGF0aC5yZWxwYXRoKHBhdGgsIGxvY2FsX3RyZWUucm9vdCkpCiAgICAgICAgICAgICBsb2NhbF90cmVlLnVwZGF0ZV9wYXRjaChpbmNsdWRlPW1ldGFkYXRhX3BhdGhzKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0Y29tbWFuZGxpbmUucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5weQppbmRleCBiM2RjOGI5Li41YmZjNjYyIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRjb21tYW5kbGluZS5weQpAQCAtMjUzLDcgKzI1Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICgiaG9zdF9jZXJ0X3BhdGgiLCAiaG9zdF9jZXJ0X3BhdGgiLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKCJob3N0X2tleV9wYXRoIiwgImhvc3Rfa2V5X3BhdGgiLCBUcnVlKV19CiAKLSAgICBmb3Igc2VjdGlvbiwgdmFsdWVzIGluIGtleXMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHNlY3Rpb24sIHZhbHVlcyBpbiBrZXlzLml0ZW1zKCk6CiAgICAgICAgIGZvciBjb25maWdfdmFsdWUsIGt3X3ZhbHVlLCBpc19wYXRoIGluIHZhbHVlczoKICAgICAgICAgICAgIGlmIGt3X3ZhbHVlIGluIGt3YXJncyBhbmQga3dhcmdzW2t3X3ZhbHVlXSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc19wYXRoOgpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgIyBTZXQgdXAgdGVzdF9wYXRocwogICAgIHRlc3RfcGF0aHMgPSBPcmRlcmVkRGljdCgpCiAKLSAgICBmb3Igc2VjdGlvbiBpbiBjb25maWcuaXRlcmtleXMoKToKKyAgICBmb3Igc2VjdGlvbiBpbiBjb25maWcua2V5cygpOgogICAgICAgICBpZiBzZWN0aW9uLnN0YXJ0c3dpdGgoIm1hbmlmZXN0OiIpOgogICAgICAgICAgICAgbWFuaWZlc3Rfb3B0cyA9IGNvbmZpZy5nZXQoc2VjdGlvbikKICAgICAgICAgICAgIHVybF9iYXNlID0gbWFuaWZlc3Rfb3B0cy5nZXQoInVybF9iYXNlIiwgIi8iKQpAQCAtMzA0LDEyICszMDQsMTIgQEAKIGRlZiBjaGVja19hcmdzKGt3YXJncyk6CiAgICAgc2V0X2Zyb21fY29uZmlnKGt3YXJncykKIAotICAgIGZvciB0ZXN0X3BhdGhzIGluIGt3YXJnc1sidGVzdF9wYXRocyJdLml0ZXJ2YWx1ZXMoKToKKyAgICBmb3IgdGVzdF9wYXRocyBpbiBrd2FyZ3NbInRlc3RfcGF0aHMiXS52YWx1ZXMoKToKICAgICAgICAgaWYgbm90ICgidGVzdHNfcGF0aCIgaW4gdGVzdF9wYXRocyBhbmQKICAgICAgICAgICAgICAgICAibWV0YWRhdGFfcGF0aCIgaW4gdGVzdF9wYXRocyk6CiAgICAgICAgICAgICBwcmludCAiRmF0YWw6IG11c3Qgc3BlY2lmeSBib3RoIGEgdGVzdCBwYXRoIGFuZCBtZXRhZGF0YSBwYXRoIgogICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICAgZm9yIGtleSwgcGF0aCBpbiB0ZXN0X3BhdGhzLml0ZXJpdGVtcygpOgorICAgICAgICBmb3Iga2V5LCBwYXRoIGluIHRlc3RfcGF0aHMuaXRlbXMoKToKICAgICAgICAgICAgIG5hbWUgPSBrZXkuc3BsaXQoIl8iLCAxKVswXQogCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9jb25kaXRpb25hbC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL2NvbmRpdGlvbmFsLnB5CmluZGV4IGYwZjRlY2YuLmVhOTQyNmQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL2NvbmRpdGlvbmFsLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL2NvbmRpdGlvbmFsLnB5CkBAIC0zMDAsMTcgKzMwMCwxNyBAQAogICAgIGRlZiBfZmxhdHRlbihzZWxmKToKICAgICAgICAgcnYgPSB7fQogICAgICAgICBmb3Igbm9kZSBpbiBbc2VsZiwgc2VsZi5yb290XToKLSAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBub2RlLl9kYXRhLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG5vZGUuX2RhdGEuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBydjoKICAgICAgICAgICAgICAgICAgICAgcnZbbmFtZV0gPSB2YWx1ZQogICAgICAgICByZXR1cm4gcnYKIAotICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6Ci0gICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVyaXRlbXMoKToKKyAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5pdGVtcygpOgogICAgICAgICAgICAgeWllbGQgaXRlbQogCi0gICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgotICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVuKCkuaXRlcmtleXMoKToKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLmtleXMoKToKICAgICAgICAgICAgIHlpZWxkIGl0ZW0KIAogICAgIGRlZiByZW1vdmVfdmFsdWUoc2VsZiwga2V5LCB2YWx1ZSk6CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9zdGF0aWMucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9iYWNrZW5kcy9zdGF0aWMucHkKaW5kZXggYjJiOWZiZS4uZTBhNjJjNyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvYmFja2VuZHMvc3RhdGljLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L2JhY2tlbmRzL3N0YXRpYy5weQpAQCAtMTgzLDIxICsxODMsMjEgQEAKICAgICBkZWYgX2ZsYXR0ZW4oc2VsZik6CiAgICAgICAgIHJ2ID0ge30KICAgICAgICAgZm9yIG5vZGUgaW4gW3NlbGYsIHNlbGYucm9vdF06Ci0gICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbm9kZS5fZGF0YS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBub2RlLl9kYXRhLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gcnY6CiAgICAgICAgICAgICAgICAgICAgIHJ2W25hbWVdID0gdmFsdWUKICAgICAgICAgcmV0dXJuIHJ2CiAKLSAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgotICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVuKCkuaXRlcml0ZW1zKCk6CisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVuKCkuaXRlbXMoKToKICAgICAgICAgICAgIHlpZWxkIGl0ZW0KIAotICAgIGRlZiBpdGVya2V5cyhzZWxmKToKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLml0ZXJrZXlzKCk6CisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2ZsYXR0ZW4oKS5rZXlzKCk6CiAgICAgICAgICAgICB5aWVsZCBpdGVtCiAKLSAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKToKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fZmxhdHRlbigpLml0ZXJ2YWx1ZXMoKToKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLl9mbGF0dGVuKCkudmFsdWVzKCk6CiAgICAgICAgICAgICB5aWVsZCBpdGVtCiAKICAgICBkZWYgYXBwZW5kKHNlbGYsIGNoaWxkKToKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3NlcmlhbGl6ZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC9zZXJpYWxpemVyLnB5CmluZGV4IDUyMjAzYWIuLmMyOTc0MjYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3NlcmlhbGl6ZXIucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3Qvc2VyaWFsaXplci5weQpAQCAtMSw3ICsxLDcgQEAKIGZyb20gbm9kZSBpbXBvcnQgTm9kZVZpc2l0b3IsIFZhbHVlTm9kZSwgTGlzdE5vZGUsIEJpbmFyeUV4cHJlc3Npb25Ob2RlCiBmcm9tIHBhcnNlciBpbXBvcnQgYXRvbXMsIHByZWNlZGVuY2UKIAotYXRvbV9uYW1lcyA9IHt2OiJAJXMiICUgayBmb3IgKGssdikgaW4gYXRvbXMuaXRlcml0ZW1zKCl9CithdG9tX25hbWVzID0ge3Y6IkAlcyIgJSBrIGZvciAoayx2KSBpbiBhdG9tcy5pdGVtcygpfQogCiBuYW1lZF9lc2NhcGVzID0gc2V0KFsiXGEiLCAiXGIiLCAiXGYiLCAiXG4iLCAiXHIiLCAiXHQiLCAiXHYiXSkKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9jb25kaXRpb25hbC5weSBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3RfY29uZGl0aW9uYWwucHkKaW5kZXggZDlmZmRmMi4uMzExY2ZkZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9jb25kaXRpb25hbC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRtYW5pZmVzdC90ZXN0cy90ZXN0X2NvbmRpdGlvbmFsLnB5CkBAIC0xNDAsNCArMTQwLDQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmlmZXN0Lmhhc19rZXkoImtleV8xIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuaWZlc3QuaGFzX2tleSgia2V5XzIiKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobWFuaWZlc3QuaXRlcmtleXMoKSksIHNldChbImtleSIsICJrZXlfMSJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KG1hbmlmZXN0LmtleXMoKSksIHNldChbImtleSIsICJrZXlfMSJdKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdG1hbmlmZXN0L3Rlc3RzL3Rlc3Rfc3RhdGljLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMucHkKaW5kZXggZWQyODU3OC4uNWRkNWNhNCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0bWFuaWZlc3QvdGVzdHMvdGVzdF9zdGF0aWMucHkKQEAgLTg1LDggKzg1LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmlmZXN0Lmhhc19rZXkoImtleV8xIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuaWZlc3QuaGFzX2tleSgia2V5XzIiKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobWFuaWZlc3QuaXRlcmtleXMoKSksIHNldChbImtleSIsICJrZXlfMSJdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2V0KG1hbmlmZXN0Lml0ZXJ2YWx1ZXMoKSksIHNldChbInZhbHVlXzEiLCAib3RoZXJfdmFsdWUiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChtYW5pZmVzdC5rZXlzKCkpLCBzZXQoWyJrZXkiLCAia2V5XzEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChtYW5pZmVzdC52YWx1ZXMoKSksIHNldChbInZhbHVlXzEiLCAib3RoZXJfdmFsdWUiXSkpCiAKICAgICBkZWYgdGVzdF9pc19lbXB0eV8xKHNlbGYpOgogICAgICAgICBkYXRhID0gIiIiCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRydW5uZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0cnVubmVyL3dwdHJ1bm5lci93cHRydW5uZXIucHkKaW5kZXggYzhlM2U1NC4uZWViZDFkZSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHJ1bm5lci93cHRydW5uZXIvd3B0cnVubmVyLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRydW5uZXIvd3B0cnVubmVyL3dwdHJ1bm5lci5weQpAQCAtOTQsNyArOTQsNyBAQAogICAgIHJ1bl9pbmZvLCB0ZXN0X2xvYWRlciA9IGdldF9sb2FkZXIodGVzdF9wYXRocywgcHJvZHVjdCwgc3NsX2VudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9pbmZvX2V4dHJhcz1ydW5faW5mb19leHRyYXMsICoqa3dhcmdzKQogCi0gICAgZm9yIHRlc3RfdHlwZSwgdGVzdHMgaW4gdGVzdF9sb2FkZXIuZGlzYWJsZWRfdGVzdHMuaXRlcml0ZW1zKCk6CisgICAgZm9yIHRlc3RfdHlwZSwgdGVzdHMgaW4gdGVzdF9sb2FkZXIuZGlzYWJsZWRfdGVzdHMuaXRlbXMoKToKICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgICAgICBydi5hcHBlbmQoeyJ0ZXN0IjogdGVzdC5pZCwgInJlYXNvbiI6IHRlc3QuZGlzYWJsZWQoKX0pCiAgICAgcHJpbnQganNvbi5kdW1wcyhydiwgaW5kZW50PTIpCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogCiBkZWYgZ2V0X3BhdXNlX2FmdGVyX3Rlc3QodGVzdF9sb2FkZXIsICoqa3dhcmdzKToKLSAgICB0b3RhbF90ZXN0cyA9IHN1bShsZW4oaXRlbSkgZm9yIGl0ZW0gaW4gdGVzdF9sb2FkZXIudGVzdHMuaXRlcnZhbHVlcygpKQorICAgIHRvdGFsX3Rlc3RzID0gc3VtKGxlbihpdGVtKSBmb3IgaXRlbSBpbiB0ZXN0X2xvYWRlci50ZXN0cy52YWx1ZXMoKSkKICAgICBpZiBrd2FyZ3NbInBhdXNlX2FmdGVyX3Rlc3QiXSBpcyBOb25lOgogICAgICAgICBpZiBrd2FyZ3NbInJlcGVhdF91bnRpbF91bmV4cGVjdGVkIl06CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2Jhc2UucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvdGVzdHMvZnVuY3Rpb25hbC9iYXNlLnB5CmluZGV4IDliMGNiNTAuLmVkZWZmNWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS90ZXN0cy9mdW5jdGlvbmFsL2Jhc2UucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3Rlc3RzL2Z1bmN0aW9uYWwvYmFzZS5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5tZXRob2QKIAogICAgIGRlZiBhZGRfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgaWYgaGFzYXR0cihkYXRhLCAiaXRlcml0ZW1zIik6CisgICAgICAgIGlmIGhhc2F0dHIoZGF0YSwgIml0ZW1zIik6CiAgICAgICAgICAgICBkYXRhID0gdXJsZW5jb2RlKGRhdGEpCiAgICAgICAgIHByaW50KGRhdGEpCiAgICAgICAgIHNlbGYuYWRkX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIobGVuKGRhdGEpKSkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgaWYgaGVhZGVycyBpcyBOb25lOgogICAgICAgICAgICAgaGVhZGVycyA9IHt9CiAKLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGhlYWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICByZXEuYWRkX2hlYWRlcihuYW1lLCB2YWx1ZSkKIAogICAgICAgICBpZiBib2R5IGlzIG5vdCBOb25lOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL2hhbmRsZXJzLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL2hhbmRsZXJzLnB5CmluZGV4IGYwY2UzYzAuLjBkYTllMzEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9oYW5kbGVycy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvaGFuZGxlcnMucHkKQEAgLTE2OSwxNCArMTY5LDE0IEBACiAgICAgICAgICAgICB1c2Vfc3ViID0gRmFsc2UKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oaGVhZGVyc19wYXRoKSBhcyBoZWFkZXJzX2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oaGVhZGVyc19wYXRoLCAicmIiKSBhcyBoZWFkZXJzX2ZpbGU6CiAgICAgICAgICAgICAgICAgZGF0YSA9IGhlYWRlcnNfZmlsZS5yZWFkKCkKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHVzZV9zdWI6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHRlbXBsYXRlKHJlcXVlc3QsIGRhdGEsIGVzY2FwZV90eXBlPSJub25lIikKLSAgICAgICAgICAgIHJldHVybiBbdHVwbGUoaXRlbS5zdHJpcCgpIGZvciBpdGVtIGluIGxpbmUuc3BsaXQoIjoiLCAxKSkKKyAgICAgICAgICAgIHJldHVybiBbdHVwbGUoaXRlbS5zdHJpcCgpIGZvciBpdGVtIGluIGxpbmUuc3BsaXQoYiI6IiwgMSkpCiAgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGRhdGEuc3BsaXRsaW5lcygpIGlmIGxpbmVdCiAKICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcmVzcG9uc2UsIHBhdGgsIGJ5dGVfcmFuZ2VzKToKQEAgLTIyOSw2ICsyMjksMTEgQEAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgcmVxdWVzdCwgcmVzcG9uc2UpOgogICAgICAgICBwYXRoID0gZmlsZXN5c3RlbV9wYXRoKHNlbGYuYmFzZV9wYXRoLCByZXF1ZXN0LCBzZWxmLnVybF9iYXNlKQogCisgICAgICAgIGRlZiBleGVjZmlsZShwYXRoLCBnbG9iYWxfZW52aXJvbiwgbG9jYWxfZW52aXJvbik6CisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZCgpLmRlY29kZSgpCisgICAgICAgICAgICAgICAgZXhlYyhjb250ZW50cywgZ2xvYmFsX2Vudmlyb24sIGxvY2FsX2Vudmlyb24pCisKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW52aXJvbiA9IHsiX19maWxlX18iOiBwYXRofQogICAgICAgICAgICAgZXhlY2ZpbGUocGF0aCwgZW52aXJvbiwgZW52aXJvbikKQEAgLTM2Miw3ICszNjcsNyBAQAogICAgICAgICAgICAgc2VsZi5kYXRhID0gZi5yZWFkKCkgJSBmb3JtYXRfYXJncwogCiAgICAgICAgIHNlbGYucmVzcF9oZWFkZXJzID0gWygiQ29udGVudC1UeXBlIiwgY29udGVudF90eXBlKV0KLSAgICAgICAgZm9yIGssIHYgaW4gaGVhZGVycy5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGssIHYgaW4gaGVhZGVycy5pdGVtcygpOgogICAgICAgICAgICAgcmVzcF9oZWFkZXJzLmFwcGVuZCgoay5yZXBsYWNlKCJfIiwgIi0iKSwgdikpCiAKICAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcihzZWxmLmhhbmRsZV9yZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3BpcGVzLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3BpcGVzLnB5CmluZGV4IDk1MTA4YmEuLjA2ZTBmZTIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9waXBlcy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcGlwZXMucHkKQEAgLTEsMTEgKzEsMTYgQEAKLWZyb20gY2dpIGltcG9ydCBlc2NhcGUKIGltcG9ydCBnemlwIGFzIGd6aXBfbW9kdWxlCiBpbXBvcnQgcmUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1dWlkCi1mcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2ltcG9ydCBzaXgKIAoraWYgc2l4LlBZMjoKKyAgICBmcm9tIGNnaSBpbXBvcnQgZXNjYXBlCitlbHNlOgorICAgIGZyb20gaHRtbCBpbXBvcnQgZXNjYXBlCisgICAgdW5pY29kZSA9IGxhbWJkYSBzLCAqYXJnczogc3RyKHMpCiAKIGRlZiByZXNvbHZlX2NvbnRlbnQocmVzcG9uc2UpOgogICAgIHJldHVybiBiIiIuam9pbihpdGVtIGZvciBpdGVtIGluIHJlc3BvbnNlLml0ZXJfY29udGVudChyZWFkX2ZpbGU9VHJ1ZSkpCkBAIC0yNzAsMjYgKzI3NSwzMSBAQAogCiBjbGFzcyBSZXBsYWNlbWVudFRva2VuaXplcihvYmplY3QpOgogICAgIGRlZiBpZGVudChzY2FubmVyLCB0b2tlbik6Ci0gICAgICAgIHJldHVybiAoImlkZW50IiwgdG9rZW4pCisgICAgICAgIHJldHVybiAoImlkZW50IiwgdG9rZW4uZGVjb2RlKCkpCiAKICAgICBkZWYgaW5kZXgoc2Nhbm5lciwgdG9rZW4pOgogICAgICAgICB0b2tlbiA9IHRva2VuWzE6LTFdCisgICAgICAgIGlmIHNpeC5QWTM6CisgICAgICAgICAgICB0b2tlbiA9IHRva2VuLmRlY29kZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRva2VuID0gaW50KHRva2VuKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHRva2VuID0gdW5pY29kZSh0b2tlbiwgInV0ZjgiKQorICAgICAgICAgICAgaWYgc2l4LlBZMjoKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHVuaWNvZGUodG9rZW4sICJ1dGY4IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbgogICAgICAgICByZXR1cm4gKCJpbmRleCIsIHRva2VuKQogCiAgICAgZGVmIHZhcihzY2FubmVyLCB0b2tlbik6Ci0gICAgICAgIHRva2VuID0gdG9rZW5bOi0xXQorICAgICAgICB0b2tlbiA9IHRva2VuWzotMV0uZGVjb2RlKCkKICAgICAgICAgcmV0dXJuICgidmFyIiwgdG9rZW4pCiAKICAgICBkZWYgdG9rZW5pemUoc2VsZiwgc3RyaW5nKToKICAgICAgICAgcmV0dXJuIHNlbGYuc2Nhbm5lci5zY2FuKHN0cmluZylbMF0KIAotICAgIHNjYW5uZXIgPSByZS5TY2FubmVyKFsociJcJFx3KzoiLCB2YXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAociJcJD9cdysoPzpcKFwpKT8iLCBpZGVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChyIlxbW15cXV0qXF0iLCBpbmRleCldKQorICAgIHNjYW5uZXIgPSByZS5TY2FubmVyKFsoYnIiXCRcdys6IiwgdmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJyIlwkP1x3Kyg/OlwoXCkpPyIsIGlkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGJyIlxbW15cXV0qXF0iLCBpbmRleCldKQogCiAKIGNsYXNzIEZpcnN0V3JhcHBlcihvYmplY3QpOgpAQCAtNDA4LDcgKzQxOCw5IEBACiAgICAgICAgIGZvciBpdGVtIGluIHRva2Vuc1sxOl06CiAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW2l0ZW1bMV1dCiAKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIChpbnQsKSArIHR5cGVzLlN0cmluZ1R5cGVzKSwgdG9rZW5zCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIChpbnQsKSArIHNpeC5zdHJpbmdfdHlwZXMpLCB0b2tlbnMKIAogICAgICAgICBpZiB2YXJpYWJsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHZhcmlhYmxlc1t2YXJpYWJsZV0gPSB2YWx1ZQpAQCAtNDE4LDkgKzQzMCwxMyBAQAogCiAgICAgICAgICNTaG91bGQgcG9zc2libHkgc3VwcG9ydCBlc2NhcGluZyBmb3Igb3RoZXIgY29udGV4dHMgZS5nLiBzY3JpcHQKICAgICAgICAgI1RPRE86IHJlYWQgdGhlIGVuY29kaW5nIG9mIHRoZSByZXNwb25zZQotICAgICAgICByZXR1cm4gZXNjYXBlX2Z1bmModW5pY29kZSh2YWx1ZSkpLmVuY29kZSgidXRmLTgiKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBieXRlcyk6CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmRlY29kZSgpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIHZhbHVlID0gc3RyKHZhbHVlKQorICAgICAgICByZXR1cm4gZXNjYXBlX2Z1bmModW5pY29kZSh2YWx1ZSkpLmVuY29kZSgpCiAKLSAgICB0ZW1wbGF0ZV9yZWdleHAgPSByZS5jb21waWxlKHIie3soW159XSopfX0iKQorICAgIHRlbXBsYXRlX3JlZ2V4cCA9IHJlLmNvbXBpbGUoYnIie3soW159XSopfX0iKQogICAgIG5ld19jb250ZW50ID0gdGVtcGxhdGVfcmVnZXhwLnN1Yihjb25maWdfcmVwbGFjZW1lbnQsIGNvbnRlbnQpCiAKICAgICByZXR1cm4gbmV3X2NvbnRlbnQKQEAgLTQzNiw3ICs0NTIsNyBAQAogICAgIGNvbnRlbnQgPSByZXNvbHZlX2NvbnRlbnQocmVzcG9uc2UpCiAgICAgcmVzcG9uc2UuaGVhZGVycy5zZXQoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCiAKLSAgICBvdXQgPSBTdHJpbmdJTygpCisgICAgb3V0ID0gQnl0ZXNJTygpCiAgICAgd2l0aCBnemlwX21vZHVsZS5HemlwRmlsZShmaWxlb2JqPW91dCwgbW9kZT0idyIpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoY29udGVudCkKICAgICByZXNwb25zZS5jb250ZW50ID0gb3V0LmdldHZhbHVlKCkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yZXF1ZXN0LnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3JlcXVlc3QucHkKaW5kZXggNDQ3NjYzNC4uNDRhZWEzMyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3JlcXVlc3QucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3JlcXVlc3QucHkKQEAgLTEsMTQgKzEsMTkgQEAKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBjZ2kKLWltcG9ydCBDb29raWUKLWltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHRlbXBmaWxlCiAKK2ltcG9ydCBzaXgKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBodHRwX2Nvb2tpZXMKIGZyb20gc2l4Lm1vdmVzLnVybGxpYi5wYXJzZSBpbXBvcnQgcGFyc2VfcXNsLCB1cmxzcGxpdAogCiBmcm9tIC4gaW1wb3J0IHN0YXNoCiBmcm9tIC51dGlscyBpbXBvcnQgSFRUUEV4Y2VwdGlvbgogCitpZiBzaXguUFkyOgorICAgIGJhc2U2NC5kZWNvZGVieXRlcyA9IGJhc2U2NC5kZWNvZGVzdHJpbmcKK2Vsc2U6CisgICAgdW5pY29kZSA9IGxhbWJkYSBzLCAqYXJnczogc3RyKHMpCisKIG1pc3NpbmcgPSBvYmplY3QoKQogCiAKQEAgLTUyLDcgKzU3LDcgQEAKICAgICAgICAgaWYgbGVuZ3RoID4gc2VsZi5tYXhfYnVmZmVyX3NpemU6CiAgICAgICAgICAgICBzZWxmLl9idWYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKG1vZGU9InJ3K2IiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fYnVmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgc2VsZi5fYnVmID0gc2l4LkJ5dGVzSU8oKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIF9idWZfcG9zaXRpb24oc2VsZik6CkBAIC03NSw3ICs4MCw3IEBACiAgICAgICAgICAgICBvbGRfZGF0YSA9IHNlbGYuX2J1Zi5yZWFkKGJ1Zl9ieXRlcykKICAgICAgICAgICAgIGJ5dGVzX3JlbWFpbmluZyAtPSBidWZfYnl0ZXMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9sZF9kYXRhID0gIiIKKyAgICAgICAgICAgIG9sZF9kYXRhID0gYiIiCiAKICAgICAgICAgYXNzZXJ0IHNlbGYuX2J1Zl9wb3NpdGlvbiA9PSBzZWxmLl9maWxlX3Bvc2l0aW9uLCAoCiAgICAgICAgICAgICAiQmVmb3JlIHJlYWRpbmcgYnVmZmVyIHBvc2l0aW9uICglaSkgZGlkbid0IG1hdGNoIGZpbGUgcG9zaXRpb24gKCVpKSIgJQpAQCAtMjc1LDcgKzI4MCw3IEBACiAgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBOb25lCiAKICAgICAgICAgc2VsZi5yYXdfaW5wdXQgPSBJbnB1dEZpbGUocmVxdWVzdF9oYW5kbGVyLnJmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoc2VsZi5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiLCAwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludChzZWxmLnJhd19oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiLCAwKSkpCiAgICAgICAgIHNlbGYuX2JvZHkgPSBOb25lCiAKICAgICAgICAgc2VsZi5fR0VUID0gTm9uZQpAQCAtMzAzLDEwICszMDgsMTUgQEAKICAgICAgICAgICAgICNXb3JrIG91dCB0aGUgcG9zdCBwYXJhbWV0ZXJzCiAgICAgICAgICAgICBwb3MgPSBzZWxmLnJhd19pbnB1dC50ZWxsKCkKICAgICAgICAgICAgIHNlbGYucmF3X2lucHV0LnNlZWsoMCkKLSAgICAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcD1zZWxmLnJhd19pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9uPXsiUkVRVUVTVF9NRVRIT0QiOiBzZWxmLm1ldGhvZH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1zZWxmLmhlYWRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcF9ibGFua192YWx1ZXM9VHJ1ZSkKKyAgICAgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICAgICAiZnAiOiBzZWxmLnJhd19pbnB1dCwKKyAgICAgICAgICAgICAgICAiZW52aXJvbiI6IHsiUkVRVUVTVF9NRVRIT0QiOiBzZWxmLm1ldGhvZH0sCisgICAgICAgICAgICAgICAgImhlYWRlcnMiOiBzZWxmLnJhd19oZWFkZXJzLAorICAgICAgICAgICAgICAgICJrZWVwX2JsYW5rX3ZhbHVlcyI6IFRydWUsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBzaXguUFkzOgorICAgICAgICAgICAgICAgIGt3YXJncy51cGRhdGUoeyJlbmNvZGluZyI6ICJpc28tODg1OS0xIn0pCisgICAgICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoKiprd2FyZ3MpCiAgICAgICAgICAgICBzZWxmLl9QT1NUID0gTXVsdGlEaWN0LmZyb21fZmllbGRfc3RvcmFnZShmcykKICAgICAgICAgICAgIHNlbGYucmF3X2lucHV0LnNlZWsocG9zKQogICAgICAgICByZXR1cm4gc2VsZi5fUE9TVApAQCAtMzE0LDExICszMjQsMTEgQEAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY29va2llcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fY29va2llcyBpcyBOb25lOgotICAgICAgICAgICAgcGFyc2VyID0gQ29va2llLkJhc2VDb29raWUoKQorICAgICAgICAgICAgcGFyc2VyID0gaHR0cF9jb29raWVzLkJhc2VDb29raWUoKQogICAgICAgICAgICAgY29va2llX2hlYWRlcnMgPSBzZWxmLmhlYWRlcnMuZ2V0KCJjb29raWUiLCAiIikKICAgICAgICAgICAgIHBhcnNlci5sb2FkKGNvb2tpZV9oZWFkZXJzKQogICAgICAgICAgICAgY29va2llcyA9IENvb2tpZXMoKQotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyc2VyLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyc2VyLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgY29va2llc1trZXldID0gQ29va2llVmFsdWUodmFsdWUpCiAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0gY29va2llcwogICAgICAgICByZXR1cm4gc2VsZi5fY29va2llcwpAQCAtMzk0LDExICs0MDQsMTEgQEAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CiAgICAgICAgIHJldHVybiBkaWN0Ll9fY29udGFpbnNfXyhzZWxmLCBrZXkubG93ZXIoKSkKIAotICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CisgICAgZGVmIGl0ZW1zKHNlbGYpOgogICAgICAgICBmb3IgaXRlbSBpbiBzZWxmOgogICAgICAgICAgICAgeWllbGQgaXRlbSwgc2VsZltpdGVtXQogCi0gICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6CisgICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZjoKICAgICAgICAgICAgIHlpZWxkIHNlbGZbaXRlbV0KIApAQCAtNTg2LDUgKzU5Niw1IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbig0MDAsICJVbnN1cHBvcnRlZCBhdXRoZW50aWNhdGlvbiBzY2hlbWUgJXMiICUgYXV0aF90eXBlKQogCiAgICAgZGVmIGRlY29kZV9iYXNpYyhzZWxmLCBkYXRhKToKLSAgICAgICAgZGVjb2RlZF9kYXRhID0gYmFzZTY0LmRlY29kZXN0cmluZyhkYXRhKQorICAgICAgICBkZWNvZGVkX2RhdGEgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoZGF0YS5lbmNvZGUoKSkuZGVjb2RlKCkKICAgICAgICAgcmV0dXJuIGRlY29kZWRfZGF0YS5zcGxpdCgiOiIsIDEpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmVzcG9uc2UucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcmVzcG9uc2UucHkKaW5kZXggMDJiNDFlYS4uZjhhMGQyOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3Jlc3BvbnNlLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yZXNwb25zZS5weQpAQCAtMSwxMSArMSwxMyBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0aW1lZGVsdGEKLWltcG9ydCBDb29raWUKK2Zyb20gc2l4Lm1vdmVzIGltcG9ydCBodHRwX2Nvb2tpZXMKIGltcG9ydCBqc29uCiBpbXBvcnQgb3MKIGltcG9ydCB0eXBlcwogaW1wb3J0IHV1aWQKIGltcG9ydCBzb2NrZXQKK2ltcG9ydCBpbworaW1wb3J0IHNpeAogCiBmcm9tIC5jb25zdGFudHMgaW1wb3J0IHJlc3BvbnNlX2NvZGVzCiBmcm9tIC5sb2dnZXIgaW1wb3J0IGdldF9sb2dnZXIKQEAgLTEzMyw3ICsxMzUsNyBAQAogICAgICAgICAgICAgICAgIG1heF9hZ2UgPSBpbnQobWF4X2FnZS50b3RhbF9zZWNvbmRzKCkpCiAgICAgICAgICAgICBtYXhfYWdlID0gIiUuMGQiICUgbWF4X2FnZQogCi0gICAgICAgIG0gPSBDb29raWUuTW9yc2VsKCkKKyAgICAgICAgbSA9IGh0dHBfY29va2llcy5Nb3JzZWwoKQogCiAgICAgICAgIGRlZiBtYXliZV9zZXQoa2V5LCB2YWx1ZSk6CiAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZSBhbmQgdmFsdWUgaXMgbm90IEZhbHNlOgpAQCAtMTUzLDcgKzE1NSw3IEBACiAgICAgZGVmIHVuc2V0X2Nvb2tpZShzZWxmLCBuYW1lKToKICAgICAgICAgIiIiUmVtb3ZlIGEgY29va2llIGZyb20gdGhvc2UgdGhhdCBhcmUgYmVpbmcgc2VudCB3aXRoIHRoZSByZXNwb25zZSIiIgogICAgICAgICBjb29raWVzID0gc2VsZi5oZWFkZXJzLmdldCgiU2V0LUNvb2tpZSIpCi0gICAgICAgIHBhcnNlciA9IENvb2tpZS5CYXNlQ29va2llKCkKKyAgICAgICAgcGFyc2VyID0gaHR0cF9jb29raWVzLkJhc2VDb29raWUoKQogICAgICAgICBmb3IgY29va2llIGluIGNvb2tpZXM6CiAgICAgICAgICAgICBwYXJzZXIubG9hZChjb29raWUpCiAKQEAgLTE3NSwxNCArMTc3LDE4IEBACiAgICAgICAgIElmIGFueSBwYXJ0IG9mIHRoZSBjb250ZW50IGlzIGEgZnVuY3Rpb24sIHRoaXMgd2lsbCBiZSBjYWxsZWQKICAgICAgICAgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgKGlmIGFueSkgcmV0dXJuZWQuCiAKLSAgICAgICAgOnBhcmFtIHJlYWRfZmlsZTogLSBib29sZWFuIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvdXIgd2hlbiBjb250ZW50Ci0gICAgICAgIGlzIGEgZmlsZSBoYW5kbGUuIFdoZW4gc2V0IHRvIEZhbHNlIHRoZSBoYW5kbGUgd2lsbCBiZSByZXR1cm5lZCBkaXJlY3RseQotICAgICAgICBhbGxvd2luZyB0aGUgZmlsZSB0byBiZSBwYXNzZWQgdG8gdGhlIG91dHB1dCBpbiBzbWFsbCBjaHVua3MuIFdoZW4gc2V0IHRvCi0gICAgICAgIFRydWUsIHRoZSBlbnRpcmUgY29udGVudCBvZiB0aGUgZmlsZSB3aWxsIGJlIHJldHVybmVkIGFzIGEgc3RyaW5nIGZhY2lsaXRhdGluZwotICAgICAgICBub24tc3RyZWFtaW5nIG9wZXJhdGlvbnMgbGlrZSB0ZW1wbGF0ZSBzdWJzdGl0dXRpb24uCisgICAgICAgIDpwYXJhbSByZWFkX2ZpbGU6IGJvb2xlYW4gY29udHJvbGxpbmcgdGhlIGJlaGF2aW91ciB3aGVuIGNvbnRlbnQgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGhhbmRsZS4gV2hlbiBzZXQgdG8gRmFsc2UgdGhlIGhhbmRsZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGRpcmVjdGx5IGFsbG93aW5nIHRoZSBmaWxlIHRvIGJlIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3V0cHV0IGluIHNtYWxsIGNodW5rcy4gV2hlbiBzZXQgdG8gVHJ1ZSwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGlyZSBjb250ZW50IG9mIHRoZSBmaWxlIHdpbGwgYmUgcmV0dXJuZWQgYXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgZmFjaWxpdGF0aW5nIG5vbi1zdHJlYW1pbmcgb3BlcmF0aW9ucyBsaWtlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIHN1YnN0aXR1dGlvbi4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jb250ZW50LCB0eXBlcy5TdHJpbmdUeXBlcyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jb250ZW50LCBieXRlcyk6CiAgICAgICAgICAgICB5aWVsZCBzZWxmLmNvbnRlbnQKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuY29udGVudCwgc3RyKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuY29udGVudC5lbmNvZGUoc2VsZi5lbmNvZGluZykKICAgICAgICAgZWxpZiBoYXNhdHRyKHNlbGYuY29udGVudCwgInJlYWQiKToKICAgICAgICAgICAgIGlmIHJlYWRfZmlsZToKICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmNvbnRlbnQucmVhZCgpCkBAIC0zMzYsNyArMzQyLDcgQEAKICAgICAgICAgc2VsZi5zZXQoa2V5LCB2YWx1ZSkKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSwgdmFsdWVzIGluIHNlbGYuZGF0YS5pdGVydmFsdWVzKCk6CisgICAgICAgIGZvciBrZXksIHZhbHVlcyBpbiBzZWxmLmRhdGEudmFsdWVzKCk6CiAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgogICAgICAgICAgICAgICAgIHlpZWxkIGtleSwgdmFsdWUKIApAQCAtMzgxLDggKzM4NywxMiBAQAogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSByZXNwb25zZV9jb2Rlc1tjb2RlXVswXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBtZXNzYWdlID0gJycKLSAgICAgICAgc2VsZi53cml0ZSgiJXMgJWQgJXNcclxuIiAlCi0gICAgICAgICAgICAgICAgICAgKHNlbGYuX3Jlc3BvbnNlLnJlcXVlc3QucHJvdG9jb2xfdmVyc2lvbiwgY29kZSwgbWVzc2FnZSkpCisgICAgICAgIAorICAgICAgICBwcm90b2NvbF92ZXJzaW9uID0gc2VsZi5fcmVzcG9uc2UucmVxdWVzdC5wcm90b2NvbF92ZXJzaW9uCisgICAgICAgIGlmIGlzaW5zdGFuY2UocHJvdG9jb2xfdmVyc2lvbiwgYnl0ZXMpOgorICAgICAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9IHByb3RvY29sX3ZlcnNpb24uZGVjb2RlKCkKKworICAgICAgICBzZWxmLndyaXRlKCIlcyAlZCAlc1xyXG4iICUgKHByb3RvY29sX3ZlcnNpb24sIGNvZGUsIG1lc3NhZ2UpKQogCiAgICAgZGVmIHdyaXRlX2hlYWRlcihzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgICIiIldyaXRlIG91dCBhIHNpbmdsZSBoZWFkZXIgZm9yIHRoZSByZXNwb25zZS4KQEAgLTM5MCw2ICs0MDAsMTAgQEAKICAgICAgICAgOnBhcmFtIG5hbWU6IE5hbWUgb2YgdGhlIGhlYWRlciBmaWVsZAogICAgICAgICA6cGFyYW0gdmFsdWU6IFZhbHVlIG9mIHRoZSBoZWFkZXIgZmllbGQKICAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgYnl0ZXMpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWUuZGVjb2RlKCkKICAgICAgICAgc2VsZi5faGVhZGVyc19zZWVuLmFkZChuYW1lLmxvd2VyKCkpCiAgICAgICAgIHNlbGYud3JpdGUoIiVzOiAlc1xyXG4iICUgKG5hbWUsIHZhbHVlKSkKICAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3BvbnNlLmV4cGxpY2l0X2ZsdXNoOgpAQCAtNDAxLDEyICs0MTUsMTQgQEAKICAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKSBub3QgaW4gc2VsZi5faGVhZGVyc19zZWVuOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfaGVhZGVyKG5hbWUsIGYoKSkKIAotICAgICAgICBpZiAodHlwZShzZWxmLl9yZXNwb25zZS5jb250ZW50KSBpbiAoc3RyLCB1bmljb2RlKSBhbmQKKworICAgICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLl9yZXNwb25zZS5jb250ZW50LCAoYnl0ZXMsKSArIHNpeC5zdHJpbmdfdHlwZXMpIGFuZAogICAgICAgICAgICAgImNvbnRlbnQtbGVuZ3RoIiBub3QgaW4gc2VsZi5faGVhZGVyc19zZWVuKToKICAgICAgICAgICAgICNXb3VsZCBiZSBuaWNlIHRvIGF2b2lkIGRvdWJsZS1lbmNvZGluZyBoZXJlCiAgICAgICAgICAgICBzZWxmLndyaXRlX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBsZW4oc2VsZi5lbmNvZGUoc2VsZi5fcmVzcG9uc2UuY29udGVudCkpKQogCi0gICAgICAgIGlmICh0eXBlKHNlbGYuX3Jlc3BvbnNlLmNvbnRlbnQpIGluIChmaWxlLCkgYW5kCisgICAgICAgIGZpbGVfdHlwZSA9IGZpbGUgaWYgc2l4LlBZMiBlbHNlIGlvLklPQmFzZQorICAgICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLl9yZXNwb25zZS5jb250ZW50LCBmaWxlX3R5cGUpIGFuZAogICAgICAgICAgICAgImNvbnRlbnQtbGVuZ3RoIiBub3QgaW4gc2VsZi5faGVhZGVyc19zZWVuKToKICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IG9zLnN0YXQoIHNlbGYuX3Jlc3BvbnNlLmNvbnRlbnQubmFtZSApLnN0X3NpemUKICAgICAgICAgICAgIHNlbGYud3JpdGVfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIGZpbGVfc2l6ZSApCkBAIC00MzAsNyArNDQ2LDcgQEAKIAogICAgIGRlZiB3cml0ZV9jb250ZW50KHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UuIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgdHlwZXMuU3RyaW5nVHlwZXMpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIChieXRlcywpICsgc2l4LnN0cmluZ190eXBlcyk6CiAgICAgICAgICAgICBzZWxmLndyaXRlKGRhdGEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlX2NvbnRlbnRfZmlsZShkYXRhKQpAQCAtNDYzLDEwICs0NzksMTIgQEAKIAogICAgIGRlZiBlbmNvZGUoc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIkNvbnZlcnQgdW5pY29kZSB0byBieXRlcyBhY2NvcmRpbmcgdG8gcmVzcG9uc2UuZW5jb2RpbmcuIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBieXRlcyk6CiAgICAgICAgICAgICByZXR1cm4gZGF0YQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgdW5pY29kZSk6CisgICAgICAgIGVsaWYgc2l4LlBZMyBvciBpc2luc3RhbmNlKGRhdGEsIHVuaWNvZGUpOgogICAgICAgICAgICAgcmV0dXJuIGRhdGEuZW5jb2RlKHNlbGYuX3Jlc3BvbnNlLmVuY29kaW5nKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yb3V0ZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvcm91dGVyLnB5CmluZGV4IGEzNWUwOTguLmI3N2QyZDkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9yb3V0ZXIucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3JvdXRlci5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCByZQotaW1wb3J0IHR5cGVzCitpbXBvcnQgc2l4CiAKIGZyb20gLmxvZ2dlciBpbXBvcnQgZ2V0X2xvZ2dlcgogCkBAIC00Nyw3ICs0NywxMCBAQAogICAgICAgICAgICAgdG9rZW5zID0gaXRlcnRvb2xzLmNoYWluKFsoInNsYXNoIiwgTm9uZSldLCB0b2tlbnMpCiAKICAgICAgICAgZm9yIHRva2VuIGluIHRva2VuczoKLSAgICAgICAgICAgIHJlX3BhcnRzLmFwcGVuZChmdW5jX21hcFt0b2tlblswXV0odG9rZW4pKQorICAgICAgICAgICAgcmVfcGFydCA9IGZ1bmNfbWFwW3Rva2VuWzBdXSh0b2tlbikKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVfcGFydCwgYnl0ZXMpOgorICAgICAgICAgICAgICAgIHJlX3BhcnQgPSByZV9wYXJ0LmRlY29kZSgpCisgICAgICAgICAgICByZV9wYXJ0cy5hcHBlbmQocmVfcGFydCkKIAogICAgICAgICBpZiBzZWxmLnN0YXJfc2VlbjoKICAgICAgICAgICAgIHJlX3BhcnRzLmFwcGVuZCgiKSIpCkBAIC03OCw2ICs4MSw5IEBACiAgICAgdG9rZW5pemVyID0gUm91dGVUb2tlbml6ZXIoKQogICAgIHRva2VucywgdW5tYXRjaGVkID0gdG9rZW5pemVyLnNjYW4ocm91dGVfcGF0dGVybikKIAorICAgIGlmIGlzaW5zdGFuY2UodW5tYXRjaGVkLCBieXRlcyk6CisgICAgICAgIHVubWF0Y2hlZCA9IHVubWF0Y2hlZC5kZWNvZGUoKQorCiAgICAgYXNzZXJ0IHVubWF0Y2hlZCA9PSAiIiwgdW5tYXRjaGVkCiAKICAgICBjb21waWxlciA9IFJvdXRlQ29tcGlsZXIoKQpAQCAtMTM1LDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QgYW5kIHRoZSByZXNwb25zZSBvYmplY3QuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHR5cGUobWV0aG9kcykgaW4gdHlwZXMuU3RyaW5nVHlwZXMgb3IgbWV0aG9kcyBpbiAoYW55X21ldGhvZCwgIioiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXRob2RzLCBzaXguc3RyaW5nX3R5cGVzKSBvciBtZXRob2RzIGluIChhbnlfbWV0aG9kLCAiKiIpOgogICAgICAgICAgICAgbWV0aG9kcyA9IFttZXRob2RzXQogICAgICAgICBmb3IgbWV0aG9kIGluIG1ldGhvZHM6CiAgICAgICAgICAgICBzZWxmLnJvdXRlcy5hcHBlbmQoKG1ldGhvZCwgY29tcGlsZV9wYXRoX21hdGNoKHBhdGgpLCBoYW5kbGVyKSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zZXJ2ZXIucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvc2VydmVyLnB5CmluZGV4IDBhYjUxMmMuLmVlMWY4ZTkgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zZXJ2ZXIucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3NlcnZlci5weQpAQCAtMSwxNCArMSwxNCBAQAotaW1wb3J0IEJhc2VIVFRQU2VydmVyCiBpbXBvcnQgZXJybm8KIGltcG9ydCBvcwogaW1wb3J0IHNvY2tldAotZnJvbSBTb2NrZXRTZXJ2ZXIgaW1wb3J0IFRocmVhZGluZ01peEluCitpbXBvcnQgc2l4Citmcm9tIHNpeC5tb3ZlcyBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2Zyb20gc2l4Lm1vdmVzLnNvY2tldHNlcnZlciBpbXBvcnQgVGhyZWFkaW5nTWl4SW4KIGltcG9ydCBzc2wKIGltcG9ydCBzeXMKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgdHlwZXMKIAogZnJvbSBzaXgubW92ZXMudXJsbGliLnBhcnNlIGltcG9ydCB1cmxzcGxpdCwgdXJsdW5zcGxpdAogCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgIDpwYXJhbSBvdXRwdXRfcGF0aDogUGF0aCB0byByZXBsYWNlIHRoZSBpbnB1dCBwYXRoIHdpdGggaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVxdWVzdC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHR5cGUobWV0aG9kcykgaW4gdHlwZXMuU3RyaW5nVHlwZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWV0aG9kcywgc2l4LnN0cmluZ190eXBlcyk6CiAgICAgICAgICAgICBtZXRob2RzID0gW21ldGhvZHNdCiAgICAgICAgIHNlbGYucnVsZXNbaW5wdXRfcGF0aF0gPSAobWV0aG9kcywgb3V0cHV0X3BhdGgpCiAKQEAgLTI1NSw4ICsyNTUsOSBAQAogICAgICAgICAgICAgICAgIGV4Y2VwdCBIVFRQRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldF9lcnJvcihlLmNvZGUsIGUubWVzc2FnZSkKICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUubWVzc2FnZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFtlLm1lc3NhZ2VdCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzdHIoZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IFttZXNzYWdlXQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gW10KICAgICAgICAgICAgICAgICAgICAgZXJyLmFwcGVuZCh0cmFjZWJhY2suZm9ybWF0X2V4YygpKQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3N0YXNoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3N0YXNoLnB5CmluZGV4IGI2YmQ2ZWUuLjBlN2M4NWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS9zdGFzaC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvc3Rhc2gucHkKQEAgLTEsOSArMSwxNCBAQAogaW1wb3J0IGJhc2U2NAogaW1wb3J0IGpzb24KIGltcG9ydCBvcworaW1wb3J0IHNpeAogaW1wb3J0IHV1aWQKIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgRGljdFByb3h5CiAKK2lmIHNpeC5QWTI6CisgICAgYmFzZTY0LmVuY29kZWJ5dGVzID0gYmFzZTY0LmVuY29kZXN0cmluZworICAgIGJhc2U2NC5kZWNvZGVieXRlcyA9IGJhc2U2NC5kZWNvZGVzdHJpbmcKKwogY2xhc3MgU2VydmVyRGljdE1hbmFnZXIoQmFzZU1hbmFnZXIpOgogICAgIHNoYXJlZF9kYXRhID0ge30KIApAQCAtMzksMTUgKzQ0LDE3IEBACiAgICAgICAgIGFkZHJlc3MgPSB0dXBsZShhZGRyZXNzKQogICAgIGVsc2U6CiAgICAgICAgIGFkZHJlc3MgPSBzdHIoYWRkcmVzcykKLSAgICBhdXRoa2V5ID0gYmFzZTY0LmRlY29kZXN0cmluZyhhdXRoa2V5KQorICAgIGF1dGhrZXkgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoYXV0aGtleS5lbmNvZGUoKSkKICAgICByZXR1cm4gYWRkcmVzcywgYXV0aGtleQogCiBkZWYgc3RvcmVfZW52X2NvbmZpZyhhZGRyZXNzLCBhdXRoa2V5KToKLSAgICBhdXRoa2V5ID0gYmFzZTY0LmVuY29kZXN0cmluZyhhdXRoa2V5KQotICAgIG9zLmVudmlyb25bIldQVF9TVEFTSF9DT05GSUciXSA9IGpzb24uZHVtcHMoKGFkZHJlc3MsIGF1dGhrZXkpKQorICAgIGF1dGhrZXkgPSBiYXNlNjQuZW5jb2RlYnl0ZXMoYXV0aGtleSkKKyAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIGJ5dGVzKToKKyAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3MuZGVjb2RlKCkKKyAgICBvcy5lbnZpcm9uWyJXUFRfU1RBU0hfQ09ORklHIl0gPSBqc29uLmR1bXBzKChhZGRyZXNzLCBhdXRoa2V5LmRlY29kZSgiYXNjaWkiKSkpCiAKIGRlZiBzdGFydF9zZXJ2ZXIoYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUpOgotICAgIG1hbmFnZXIgPSBTZXJ2ZXJEaWN0TWFuYWdlcihhZGRyZXNzLCBhdXRoa2V5KQorICAgIG1hbmFnZXIgPSBTZXJ2ZXJEaWN0TWFuYWdlcihhZGRyZXNzLCBhdXRoa2V5LmVuY29kZSgpKQogICAgIG1hbmFnZXIuc3RhcnQoKQogCiAgICAgcmV0dXJuIChtYW5hZ2VyLCBtYW5hZ2VyLl9hZGRyZXNzLCBtYW5hZ2VyLl9hdXRoa2V5KQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3V0aWxzLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3Rvb2xzL3dwdHNlcnZlL3dwdHNlcnZlL3V0aWxzLnB5CmluZGV4IGU1N2ZmMTkuLjQ1OGUyMmIgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy90b29scy93cHRzZXJ2ZS93cHRzZXJ2ZS91dGlscy5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvdG9vbHMvd3B0c2VydmUvd3B0c2VydmUvdXRpbHMucHkKQEAgLTEsNiArMSw2IEBACiBkZWYgaW52ZXJ0X2RpY3QoZGljdCk6CiAgICAgcnYgPSB7fQotICAgIGZvciBrZXksIHZhbHVlcyBpbiBkaWN0Lml0ZXJpdGVtcygpOgorICAgIGZvciBrZXksIHZhbHVlcyBpbiBkaWN0Lml0ZW1zKCk6CiAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CiAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBydjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9lY2hvX2Nsb3NlX2RhdGFfd3NoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob19jbG9zZV9kYXRhX3dzaC5weQppbmRleCA0ZGE0Y2U2Li44YmQyODI3IDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9lY2hvX2Nsb3NlX2RhdGFfd3NoLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL2VjaG9fY2xvc2VfZGF0YV93c2gucHkKQEAgLTEsNSArMSw2IEBACiAjIS91c3IvYmluL3B5dGhvbgogZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKK2ltcG9ydCBzaXgKIAogX0dPT0RCWUVfTUVTU0FHRSA9IHUnR29vZGJ5ZScKIApAQCAtMTUsNyArMTYsNyBAQAogICAgICAgICBsaW5lID0gcmVxdWVzdC53c19zdHJlYW0ucmVjZWl2ZV9tZXNzYWdlKCkKICAgICAgICAgaWYgbGluZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgdW5pY29kZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc2l4LnRleHRfdHlwZSk6CiAgICAgICAgICAgICBpZiBsaW5lID09IF9HT09EQllFX01FU1NBR0U6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgcmVxdWVzdC53c19zdHJlYW0uc2VuZF9tZXNzYWdlKGxpbmUsIGJpbmFyeT1GYWxzZSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL2VjaG9fZXhpdF93c2gucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9lY2hvX2V4aXRfd3NoLnB5CmluZGV4IDIwMGI5MmUuLmJlOWRhMGUgMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL2VjaG9fZXhpdF93c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob19leGl0X3dzaC5weQpAQCAtMSw1ICsxLDYgQEAKICMhL3Vzci9iaW4vcHl0aG9uCiBmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAoraW1wb3J0IHNpeAogCiBfR09PREJZRV9NRVNTQUdFID0gdSdHb29kYnllJwogCkBAIC0xNSw3ICsxNiw3IEBACiAgICAgICAgIGxpbmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQogICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCB1bmljb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBzaXgudGV4dF90eXBlKToKICAgICAgICAgICAgIGlmIGxpbmUgPT0gX0dPT0RCWUVfTUVTU0FHRToKICAgICAgICAgICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob19yYXdfd3NoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob19yYXdfd3NoLnB5CmluZGV4IGMzYTAzMGMuLjBkNWRlNjIgMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL2VjaG9fcmF3X3dzaC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9lY2hvX3Jhd193c2gucHkKQEAgLTEsNyArMSw3IEBACiAjIS91c3IvYmluL3B5dGhvbgogCitpbXBvcnQgc2l4CiBmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAotaW1wb3J0IHVybGxpYgogCiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKQEAgLTEwLDYgKzEwLDkgQEAKIGRlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgbGluZSA9IG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCi0gICAgICAgIGlmIGxpbmUgPT0gJ2V4aXQnOgorICAgICAgICBpZiBsaW5lID09IGInZXhpdCc6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGxpbmUuZGVjb2RlKCJzdHJpbmctZXNjYXBlIikpCisgICAgICAgIGlmIGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmVuY29kZSgpCisgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUobGluZSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL2VjaG9fd3NoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob193c2gucHkKaW5kZXggNTgyOWMyZi4uMThiN2U4OSAxMDA3NTUKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob193c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvZWNob193c2gucHkKQEAgLTEsNSArMSw2IEBACiAjIS91c3IvYmluL3B5dGhvbgotZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKK2ltcG9ydCBzaXgKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KIAogX0dPT0RCWUVfTUVTU0FHRSA9IHUnR29vZGJ5ZScKIApAQCAtMTYsMTAgKzE3LDIwIEBACiAgICAgICAgIGxpbmUgPSByZXF1ZXN0LndzX3N0cmVhbS5yZWNlaXZlX21lc3NhZ2UoKQogICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCB1bmljb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBzaXgudGV4dF90eXBlKToKICAgICAgICAgICAgIHJlcXVlc3Qud3Nfc3RyZWFtLnNlbmRfbWVzc2FnZShsaW5lLCBiaW5hcnk9RmFsc2UpCiAgICAgICAgICAgICBpZiBsaW5lID09IF9HT09EQllFX01FU1NBR0U6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXF1ZXN0LndzX3N0cmVhbS5zZW5kX21lc3NhZ2UobGluZSwgYmluYXJ5PVRydWUpCiAKK2RlZiB3ZWJfc29ja2V0X3Bhc3NpdmVfY2xvc2luZ19oYW5kc2hha2UocmVxdWVzdCk6CisgICAgIyBFY2hvIGNsb3NlIHN0YXR1cyBjb2RlIGFuZCByZWFzb24KKyAgICBjb2RlLCByZWFzb24gPSByZXF1ZXN0LndzX2Nsb3NlX2NvZGUsIHJlcXVlc3Qud3NfY2xvc2VfcmVhc29uCisKKyAgICAjIE5vIHN0YXR1cyByZWNlaXZlZCBpcyBhIHJlc2VydmVkIHBzZXVkbyBjb2RlIHJlcHJlc2VudGluZyBhbiBlbXB0eSBjb2RlLAorICAgICMgc28gZWNobyBiYWNrIGFuIGVtcHR5IGNvZGUgaW4gdGhpcyBjYXNlLgorICAgIGlmIGNvZGUgPT0gY29tbW9uLlNUQVRVU19OT19TVEFUVVNfUkVDRUlWRUQ6CisgICAgICAgIGNvZGUgPSBOb25lCisKKyAgICByZXR1cm4gY29kZSwgcmVhc29uCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zZXQtY29va2llX2h0dHBfd3NoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2V0LWNvb2tpZV9odHRwX3dzaC5weQppbmRleCAxNDc4NDI0Li4yZGRjNjFlIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zZXQtY29va2llX2h0dHBfd3NoLnB5CisrKyBiL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3NldC1jb29raWVfaHR0cF93c2gucHkKQEAgLTIsNyArMiw3IEBACiAKIGZyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24sIG1zZ3V0aWwsIHV0aWwKIGZyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgaHliaQotaW1wb3J0IHVybHBhcnNlCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIgaW1wb3J0IHBhcnNlIGFzIHVybHBhcnNlCiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKICAgICB1cmxfcGFydHMgPSB1cmxwYXJzZS51cmxzcGxpdChyZXF1ZXN0LnVyaSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3NldC1jb29raWVfd3NoLnB5IGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2V0LWNvb2tpZV93c2gucHkKaW5kZXggYjBlNjUwNC4uNDQwNWIxMyAxMDA3NTUKLS0tIGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2V0LWNvb2tpZV93c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2V0LWNvb2tpZV93c2gucHkKQEAgLTEsNSArMSw1IEBACiAjIS91c3IvYmluL3B5dGhvbgotaW1wb3J0IHVybHBhcnNlCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIgaW1wb3J0IHBhcnNlIGFzIHVybHBhcnNlCiAKIGZyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24sIG1zZ3V0aWwsIHV0aWwKIGZyb20gbW9kX3B5d2Vic29ja2V0LmhhbmRzaGFrZSBpbXBvcnQgaHliaQpAQCAtNyw3ICs3LDE0IEBACiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKICAgICB1cmxfcGFydHMgPSB1cmxwYXJzZS51cmxzcGxpdChyZXF1ZXN0LnVyaSkKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ0hUVFAvMS4xIDEwMSBTd2l0Y2hpbmcgUHJvdG9jb2xzOlx4MERceDBBQ29ubmVjdGlvbjogVXBncmFkZVx4MERceDBBVXBncmFkZTogV2ViU29ja2V0XHgwRFx4MEFTZXQtQ29va2llOiB3c190ZXN0XycrKHVybF9wYXJ0cy5xdWVyeSBvciAnJykrJz10ZXN0OyBQYXRoPS9ceDBEXHgwQVNlYy1XZWJTb2NrZXQtT3JpZ2luOiAnK3JlcXVlc3Qud3Nfb3JpZ2luKydceDBEXHgwQVNlYy1XZWJTb2NrZXQtQWNjZXB0OiAnK2h5YmkuY29tcHV0ZV9hY2NlcHQocmVxdWVzdC5oZWFkZXJzX2luLmdldChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSKSlbMF0rJ1x4MERceDBBXHgwRFx4MEEnKQorICAgIG1zZyA9IGInSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHM6XHgwRFx4MEFDb25uZWN0aW9uOiBVcGdyYWRlXHgwRFx4MEFVcGdyYWRlOiBXZWJTb2NrZXRceDBEXHgwQVNldC1Db29raWU6IHdzX3Rlc3RfJworICAgIG1zZyArPSB1cmxfcGFydHMucXVlcnkuZW5jb2RlKCkgb3IgYicnCisgICAgbXNnICs9IGInPXRlc3Q7IFBhdGg9L1x4MERceDBBU2VjLVdlYlNvY2tldC1PcmlnaW46ICcKKyAgICBtc2cgKz0gcmVxdWVzdC53c19vcmlnaW4uZW5jb2RlKCkKKyAgICBtc2cgKz0gYidceDBEXHgwQVNlYy1XZWJTb2NrZXQtQWNjZXB0OiAnCisgICAgbXNnICs9IGh5YmkuY29tcHV0ZV9hY2NlcHRfZnJvbV91bmljb2RlKHJlcXVlc3QuaGVhZGVyc19pbi5nZXQoY29tbW9uLlNFQ19XRUJTT0NLRVRfS0VZX0hFQURFUikpCisgICAgbXNnICs9IGInXHgwRFx4MEFceDBEXHgwQScKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUobXNnKQogICAgIHJldHVybgogCiBkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2ltcGxlX2hhbmRzaGFrZV93c2gucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zaW1wbGVfaGFuZHNoYWtlX3dzaC5weQppbmRleCAwNzUwMDk5Li5lYmM2MGRiIDEwMDc1NQotLS0gYS90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zaW1wbGVfaGFuZHNoYWtlX3dzaC5weQorKysgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zaW1wbGVfaGFuZHNoYWtlX3dzaC5weQpAQCAtNSw3ICs1LDEzIEBACiAKIAogZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgotICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHM6XHgwRFx4MEFDb25uZWN0aW9uOiBVcGdyYWRlXHgwRFx4MEFVcGdyYWRlOiBXZWJTb2NrZXRceDBEXHgwQVNldC1Db29raWU6IHdzX3Rlc3Q9dGVzdFx4MERceDBBU2VjLVdlYlNvY2tldC1PcmlnaW46ICcrcmVxdWVzdC53c19vcmlnaW4rJ1x4MERceDBBU2VjLVdlYlNvY2tldC1BY2NlcHQ6ICcraHliaS5jb21wdXRlX2FjY2VwdChyZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0KGNvbW1vbi5TRUNfV0VCU09DS0VUX0tFWV9IRUFERVIpKVswXSsnXHgwRFx4MEFceDBEXHgwQScpCisgICAgbXNnID0gKGInSFRUUC8xLjEgMTAxIFN3aXRjaGluZyBQcm90b2NvbHM6XHgwRFx4MEEnCisgICAgICAgICAgIGInQ29ubmVjdGlvbjogVXBncmFkZVx4MERceDBBJworICAgICAgICAgICBiJ1VwZ3JhZGU6IFdlYlNvY2tldFx4MERceDBBJworICAgICAgICAgICBiJ1NldC1Db29raWU6IHdzX3Rlc3Q9dGVzdFx4MERceDBBJworICAgICAgICAgICBiJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiAlc1x4MERceDBBJworICAgICAgICAgICBiJ1NlYy1XZWJTb2NrZXQtQWNjZXB0OiAlc1x4MERceDBBXHgwRFx4MEEnKSAlIChyZXF1ZXN0LndzX29yaWdpbi5lbmNvZGUoKSwgaHliaS5jb21wdXRlX2FjY2VwdF9mcm9tX3VuaWNvZGUocmVxdWVzdC5oZWFkZXJzX2luLmdldChjb21tb24uU0VDX1dFQlNPQ0tFVF9LRVlfSEVBREVSKSkpCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKG1zZykKICAgICByZXR1cm4KIAogZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3NsZWVwXzEwX3YxM193c2gucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zbGVlcF8xMF92MTNfd3NoLnB5CmluZGV4IGUxYTZkOTYuLmRkZjllOTggMTAwNzU1Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3NsZWVwXzEwX3YxM193c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc2xlZXBfMTBfdjEzX3dzaC5weQpAQCAtNCwxNSArNCwxNSBAQAogZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbiwgbXNndXRpbCwgdXRpbAogCiBkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Ci0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCd4JykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYid4JykKICAgICB0aW1lLnNsZWVwKDIpCi0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCd4JykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYid4JykKICAgICB0aW1lLnNsZWVwKDIpCi0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCd4JykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYid4JykKICAgICB0aW1lLnNsZWVwKDIpCi0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCd4JykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYid4JykKICAgICB0aW1lLnNsZWVwKDIpCi0gICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCd4JykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoYid4JykKICAgICB0aW1lLnNsZWVwKDIpCiAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3N0YXNoX3Jlc3BvbmRlcl93c2gucHkgYi90aGlyZF9wYXJ0eS93ZWJfcGxhdGZvcm1fdGVzdHMvd2Vic29ja2V0cy9oYW5kbGVycy9zdGFzaF9yZXNwb25kZXJfd3NoLnB5CmluZGV4IGJjNmY0ZmQuLjQyNmNmMTcgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3dlYl9wbGF0Zm9ybV90ZXN0cy93ZWJzb2NrZXRzL2hhbmRsZXJzL3N0YXNoX3Jlc3BvbmRlcl93c2gucHkKKysrIGIvdGhpcmRfcGFydHkvd2ViX3BsYXRmb3JtX3Rlc3RzL3dlYnNvY2tldHMvaGFuZGxlcnMvc3Rhc2hfcmVzcG9uZGVyX3dzaC5weQpAQCAtMSw1ICsxLDYgQEAKICMhL3Vzci9iaW4vcHl0aG9uCi1pbXBvcnQgdXJscGFyc2UsIGpzb24KK2ltcG9ydCBqc29uCitmcm9tIHNpeC5tb3Zlcy51cmxsaWIgaW1wb3J0IHBhcnNlIGFzIHVybHBhcnNlCiBmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uLCBtc2d1dGlsLCB1dGlsCiBmcm9tIG1vZF9weXdlYnNvY2tldC5oYW5kc2hha2UgaW1wb3J0IGh5YmkKIGZyb20gd3B0c2VydmUgaW1wb3J0IHN0YXNoCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS93b2ZmMi93b2ZmMi5neXAgYi90aGlyZF9wYXJ0eS93b2ZmMi93b2ZmMi5neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlY2E1ZjkuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvd29mZjIvd29mZjIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICB9LAotICAndGFyZ2V0cyc6IFsKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnd29mZjJfZGVjJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICdzcmMnLAotICAgICAgICAnaW5jbHVkZScsCi0gICAgICAgICcuLi9icm90bGkvYy9kZWMnLAotICAgICAgICAnLi4vYnJvdGxpL2MvaW5jbHVkZScsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJy4uL2Jyb3RsaS9icm90bGkuZ3lwOmRlYycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdzcmMvYnVmZmVyLmgnLAotICAgICAgICAnc3JjL2ZpbGUuaCcsCi0gICAgICAgICdzcmMvcm91bmQuaCcsCi0gICAgICAgICdzcmMvc3RvcmVfYnl0ZXMuaCcsCi0gICAgICAgICdzcmMvdGFibGVfdGFncy5jYycsCi0gICAgICAgICdzcmMvdGFibGVfdGFncy5oJywKLSAgICAgICAgJ3NyYy92YXJpYWJsZV9sZW5ndGguY2MnLAotICAgICAgICAnc3JjL3ZhcmlhYmxlX2xlbmd0aC5oJywKLSAgICAgICAgJ3NyYy93b2ZmMl9jb21tb24uY2MnLAotICAgICAgICAnc3JjL3dvZmYyX2NvbW1vbi5oJywKLSAgICAgICAgJ3NyYy93b2ZmMl9kZWMuY2MnLAotICAgICAgICAnc3JjL3dvZmYyX291dC5jYycsCi0gICAgICAgICd3b2ZmMi9pbmNsdWRlL2RlY29kZS5oJywKLSAgICAgICAgJ3dvZmYyL2luY2x1ZGUvZW5jb2RlLmgnLAotICAgICAgICAnd29mZjIvaW5jbHVkZS9vdXRwdXQuaCcsCi0gICAgICBdLAotICAgICAgIyBUT0RPKGtzYWthbW90byk6IGh0dHA6Ly9jcmJ1Zy5jb20vMTY3MTg3Ci0gICAgICAnbXN2c19kaXNhYmxlZF93YXJuaW5ncyc6IFsKLSAgICAgICAgNDI2NywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3psaWIvQlVJTEQuZ24gYi90aGlyZF9wYXJ0eS96bGliL0JVSUxELmduCmluZGV4IGU4MTQ0OGQuLjY3YjlkN2IgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3psaWIvQlVJTEQuZ24KKysrIGIvdGhpcmRfcGFydHkvemxpYi9CVUlMRC5nbgpAQCAtMjUsNyArMjUsOCBAQAogIyBUT0RPKGIvMjA2NjQyOTk0KTogbG9vayBpbnRvIHdoZXRoZXIgd2Ugc2hvdWxkIGNvbmRpdGlvbiBvbiB0aGUKICMgZmxvYXRpbmdfcG9pbnRfZnB1IFNBQkkgdmFyaWFibGUsIHJhdGhlciB0aGFuIHNiX2lzX2V2ZXJncmVlbiwgaGVyZSBhcyB3ZSBkaWQKICMgaW4gdGhpcmRfcGFydHkvemxpYi96bGliLmd5cC4KLWlmIChpc19zdGFyYm9hcmQgJiYgc2JfaXNfZXZlcmdyZWVuICYmIHVzZV9hcm1fbmVvbl9vcHRpbWl6YXRpb25zKSB7CitpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiB0YXJnZXRfY3B1ID09ICJhcm0iICYmCisgICAgdXNlX2FybV9uZW9uX29wdGltaXphdGlvbnMpIHsKICAgY29uZmlnKCJ6bGliX25lb25fZnB1X2NvbmZpZyIpIHsKICAgICBjZmxhZ3MgPSBbICItbWZwdT1uZW9uIiBdCiAgICAgYXNtZmxhZ3MgPSBjZmxhZ3MKQEAgLTUzLDcgKzU0LDYgQEAKICAgICAgICJhZGxlcjMyX3NpbWQuYyIsCiAgICAgICAiYWRsZXIzMl9zaW1kLmgiLAogICAgIF0KLQogICAgIGlmICghaXNfd2luIHx8IGlzX2NsYW5nKSB7CiAgICAgICBjZmxhZ3MgPSBbICItbXNzc2UzIiBdCiAgICAgfQpAQCAtODAsNyArODAsOCBAQAogICAgIGNvbmZpZ3MgKz0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNwZWVkIiBdCiAgIH0KIAotICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucykgeworICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiB0YXJnZXRfY3B1ID09ICJhcm0iICYmCisgICAgICB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucykgewogICAgIGNvbmZpZ3MgKz0gWyAiOnpsaWJfbmVvbl9mcHVfY29uZmlnIiBdCiAgIH0KIApAQCAtMTYwLDcgKzE2MSw4IEBACiAgICAgICBkZXBzID0gWyAiLy9zdGFyYm9hcmQ6c3RhcmJvYXJkX2hlYWRlcnNfb25seSIgXQogICAgIH0KIAotICAgIGlmIChpc19zdGFyYm9hcmQgJiYgc2JfaXNfZXZlcmdyZWVuICYmIHVzZV9hcm1fbmVvbl9vcHRpbWl6YXRpb25zKSB7CisgICAgaWYgKGlzX3N0YXJib2FyZCAmJiBzYl9pc19ldmVyZ3JlZW4gJiYgdGFyZ2V0X2NwdSA9PSAiYXJtIiAmJgorICAgICAgICB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucykgewogICAgICAgY29uZmlncyArPSBbICI6emxpYl9uZW9uX2ZwdV9jb25maWciIF0KICAgICB9CiAKQEAgLTE3NSw2ICsxNzcsMTAgQEAKICAgICBpZiAoY3VycmVudF9jcHUgPT0gIng2NCIpIHsKICAgICAgIGRlZmluZXMgKz0gWyAiSU5GTEFURV9DSFVOS19SRUFEXzY0TEUiIF0KICAgICB9CisKKyAgICBpZiAoaXNfc3RhcmJvYXJkICYmIGN1cnJlbnRfY3B1ID09ICJ4ODYiKSB7CisgICAgICBjZmxhZ3MgPSBbICItbXNzZTIiIF0KKyAgICB9CiAgIH0KIAogICBpZiAodXNlX2FybV9uZW9uX29wdGltaXphdGlvbnMpIHsKQEAgLTIyNCw3ICsyMzAsOCBAQAogICAgIGNvbmZpZ3MgKz0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNwZWVkIiBdCiAgIH0KIAotICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucykgeworICBpZiAoaXNfc3RhcmJvYXJkICYmIHNiX2lzX2V2ZXJncmVlbiAmJiB0YXJnZXRfY3B1ID09ICJhcm0iICYmCisgICAgICB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucykgewogICAgIGNvbmZpZ3MgKz0gWyAiOnpsaWJfbmVvbl9mcHVfY29uZmlnIiBdCiAgIH0KIApAQCAtNTM1LDYgKzU0Miw2IEBACiAgICAgY29uZmlncyAtPSBbICIvL3N0YXJib2FyZC9idWlsZC9jb25maWc6c2l6ZSIgXQogICAgIGNvbmZpZ3MgKz0gWyAiLy9zdGFyYm9hcmQvYnVpbGQvY29uZmlnOnNwZWVkIiBdCiAKLSAgICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L2ljdTppY3VkYXRhIiwgIi8vdGhpcmRfcGFydHkvemxpYi9nb29nbGUvdGVzdDp6aXBfdW5pdHRlc3RfZmlsZXMiIF0KKyAgICBjb250ZW50X2RlcHMgPSBbICIvL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3Rlc3Q6emlwX3VuaXR0ZXN0X2ZpbGVzIiBdCiAgIH0KIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXIuY2MgYi90aGlyZF9wYXJ0eS96bGliL2dvb2dsZS96aXBfcmVhZGVyLmNjCmluZGV4IGYzZTlkMGYuLjkwYjQxNDUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXIuY2MKKysrIGIvdGhpcmRfcGFydHkvemxpYi9nb29nbGUvemlwX3JlYWRlci5jYwpAQCAtNTAsNiArNTAsMTAgQEAKIAogICB2b2lkIFNldFRpbWVNb2RpZmllZChjb25zdCBiYXNlOjpUaW1lJiB0aW1lKSBvdmVycmlkZTsKIAorI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBib29sIElzU3VjY2Vzc2Z1bCgpOworI2VuZGlmCisKICBwcml2YXRlOgogICBzaXplX3QgbWF4X3JlYWRfYnl0ZXNfOwogICBzdGQ6OnN0cmluZyogb3V0cHV0XzsKQEAgLTcwLDYgKzc0LDEyIEBACiAgIHJldHVybiB0cnVlOwogfQogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitib29sIFN0cmluZ1dyaXRlckRlbGVnYXRlOjpJc1N1Y2Nlc3NmdWwoKSB7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIGJvb2wgU3RyaW5nV3JpdGVyRGVsZWdhdGU6OldyaXRlQnl0ZXMoY29uc3QgY2hhciogZGF0YSwgaW50IG51bV9ieXRlcykgewogICBpZiAob3V0cHV0Xy0+c2l6ZSgpICsgbnVtX2J5dGVzID4gbWF4X3JlYWRfYnl0ZXNfKQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI4OSw3ICsyOTksNyBAQAogICAgIGRlbGVnYXRlLT5TZXRUaW1lTW9kaWZpZWQoY3VycmVudF9lbnRyeV9pbmZvKCktPmxhc3RfbW9kaWZpZWQoKSk7CiAgIH0KIAotICByZXR1cm4gZW50aXJlX2ZpbGVfZXh0cmFjdGVkOworICByZXR1cm4gZW50aXJlX2ZpbGVfZXh0cmFjdGVkICYmIGRlbGVnYXRlLT5Jc1N1Y2Nlc3NmdWwoKTsKIH0KIAogdm9pZCBaaXBSZWFkZXI6OkV4dHJhY3RDdXJyZW50RW50cnlUb0ZpbGVQYXRoQXN5bmMoCkBAIC00NjcsNiArNDc3LDEyIEBACiAgIHJldHVybiBmaWxlXy0+U2VlayhiYXNlOjpGaWxlOjpGUk9NX0JFR0lOLCAwKSA+PSAwOwogfQogCisjaWYgZGVmaW5lZChTVEFSQk9BUkQpCitib29sIEZpbGVXcml0ZXJEZWxlZ2F0ZTo6SXNTdWNjZXNzZnVsKCkgeworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiBib29sIEZpbGVXcml0ZXJEZWxlZ2F0ZTo6V3JpdGVCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgbnVtX2J5dGVzKSB7CiAgIGludCBieXRlc193cml0dGVuID0gZmlsZV8tPldyaXRlQXRDdXJyZW50UG9zKGRhdGEsIG51bV9ieXRlcyk7CiAgIGlmIChieXRlc193cml0dGVuID4gMCkKQEAgLTQ5Nyw2ICs1MTMsMTIgQEAKICAgcmV0dXJuIGZpbGVfLklzVmFsaWQoKTsKIH0KIAorI2lmZGVmIFNUQVJCT0FSRAorYm9vbCBGaWxlUGF0aFdyaXRlckRlbGVnYXRlOjpJc1N1Y2Nlc3NmdWwoKSB7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIGJvb2wgRmlsZVBhdGhXcml0ZXJEZWxlZ2F0ZTo6V3JpdGVCeXRlcyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgbnVtX2J5dGVzKSB7CiAgIHJldHVybiBudW1fYnl0ZXMgPT0gZmlsZV8uV3JpdGVBdEN1cnJlbnRQb3MoZGF0YSwgbnVtX2J5dGVzKTsKIH0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXIuaCBiL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXIuaAppbmRleCBkNDQyZDQyLi5jYTA0MTRiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS96bGliL2dvb2dsZS96aXBfcmVhZGVyLmgKKysrIGIvdGhpcmRfcGFydHkvemxpYi9nb29nbGUvemlwX3JlYWRlci5oCkBAIC00Miw2ICs0MiwxMSBAQAogCiAgIC8vIFNldHMgdGhlIGxhc3QtbW9kaWZpZWQgdGltZSBvZiB0aGUgZGF0YS4KICAgdmlydHVhbCB2b2lkIFNldFRpbWVNb2RpZmllZChjb25zdCBiYXNlOjpUaW1lJiB0aW1lKSA9IDA7CisKKyNpZmRlZiBTVEFSQk9BUkQKKyAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3cml0ZXIgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICB2aXJ0dWFsIGJvb2wgSXNTdWNjZXNzZnVsKCkgPSAwOworI2VuZGlmCiB9OwogCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIHJlYWRpbmcgemlwIGZpbGVzLiBBIHR5cGljYWwgdXNlIGNhc2Ugb2YgdGhpcwpAQCAtMjU1LDYgKzI2MCwxMCBAQAogICAvLyBTZXRzIHRoZSBsYXN0LW1vZGlmaWVkIHRpbWUgb2YgdGhlIGRhdGEuCiAgIHZvaWQgU2V0VGltZU1vZGlmaWVkKGNvbnN0IGJhc2U6OlRpbWUmIHRpbWUpIG92ZXJyaWRlOwogCisjaWZkZWYgU1RBUkJPQVJECisgIGJvb2wgSXNTdWNjZXNzZnVsKCkgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAvLyBSZXR1cm4gdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBmaWxlLgogICBpbnQ2NF90IGZpbGVfbGVuZ3RoKCkgeyByZXR1cm4gZmlsZV9sZW5ndGhfOyB9CiAKQEAgLTI4OSw2ICsyOTgsOSBAQAogICAvLyBTZXRzIHRoZSBsYXN0LW1vZGlmaWVkIHRpbWUgb2YgdGhlIGRhdGEuCiAgIHZvaWQgU2V0VGltZU1vZGlmaWVkKGNvbnN0IGJhc2U6OlRpbWUmIHRpbWUpIG92ZXJyaWRlOwogCisjaWZkZWYgU1RBUkJPQVJECisgIGJvb2wgSXNTdWNjZXNzZnVsKCkgb3ZlcnJpZGU7CisjZW5kaWYKICBwcml2YXRlOgogICBiYXNlOjpGaWxlUGF0aCBvdXRwdXRfZmlsZV9wYXRoXzsKICAgYmFzZTo6RmlsZSBmaWxlXzsKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXJfdW5pdHRlc3QuY2MgYi90aGlyZF9wYXJ0eS96bGliL2dvb2dsZS96aXBfcmVhZGVyX3VuaXR0ZXN0LmNjCmluZGV4IGE1OTUxMDIuLmNkNGYxYWUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L3psaWIvZ29vZ2xlL3ppcF9yZWFkZXJfdW5pdHRlc3QuY2MKKysrIGIvdGhpcmRfcGFydHkvemxpYi9nb29nbGUvemlwX3JlYWRlcl91bml0dGVzdC5jYwpAQCAtMTE1LDYgKzExNSw5IEBACiBjbGFzcyBNb2NrV3JpdGVyRGVsZWdhdGUgOiBwdWJsaWMgemlwOjpXcml0ZXJEZWxlZ2F0ZSB7CiAgcHVibGljOgogICBNT0NLX01FVEhPRDAoUHJlcGFyZU91dHB1dCwgYm9vbCgpKTsKKyNpZiBkZWZpbmVkKFNUQVJCT0FSRCkKKyAgTU9DS19NRVRIT0QwKElzU3VjY2Vzc2Z1bCwgYm9vbCgpKTsKKyNlbmRpZgogICBNT0NLX01FVEhPRDIoV3JpdGVCeXRlcywgYm9vbChjb25zdCBjaGFyKiwgaW50KSk7CiAgIE1PQ0tfTUVUSE9EMShTZXRUaW1lTW9kaWZpZWQsIHZvaWQoY29uc3QgYmFzZTo6VGltZSYpKTsKIH07CkBAIC02NDQsNiArNjQ3LDEwIEBACiAgIEVYUEVDVF9DQUxMKG1vY2tfd3JpdGVyLCBXcml0ZUJ5dGVzKF8sIF8pKQogICAgICAgLldpbGxSZXBlYXRlZGx5KFJldHVybih0cnVlKSk7CiAgIEVYUEVDVF9DQUxMKG1vY2tfd3JpdGVyLCBTZXRUaW1lTW9kaWZpZWQoXykpOworI2lmIGRlZmluZWQoU1RBUkJPQVJEKQorICBFWFBFQ1RfQ0FMTChtb2NrX3dyaXRlciwgSXNTdWNjZXNzZnVsKCkpCisgICAgICAuV2lsbE9uY2UoUmV0dXJuKHRydWUpKTsKKyNlbmRpZgogCiAgIGJhc2U6OkZpbGVQYXRoIHRhcmdldF9wYXRoKEZJTEVfUEFUSF9MSVRFUkFMKCJmb28vYmFyL3F1dXgudHh0IikpOwogICBaaXBSZWFkZXIgcmVhZGVyOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvemxpYi94ODYuYyBiL3RoaXJkX3BhcnR5L3psaWIveDg2LmMKaW5kZXggNGI0NjNlZi4uMTAyYjY3MiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvemxpYi94ODYuYworKysgYi90aGlyZF9wYXJ0eS96bGliL3g4Ni5jCkBAIC0zNSwxMSArMzUsNyBAQAogICAgIHg4Nl9jcHVfZW5hYmxlX3Nzc2UzID0gZmVhdHVyZXMueDg2Lmhhc19zc3NlMzsKICAgICB4ODZfY3B1X2VuYWJsZV9zaW1kID0gZmVhdHVyZXMueDg2Lmhhc19zc2UyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLng4Ni5oYXNfc3NlNDIgJiYKLSNpZiBTQl9BUElfVkVSU0lPTiA+PSAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy54ODYuaGFzX3BjbG11bHFkcTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlOwotI2VuZGlmCiAgIH0KIAogICBpZiAoIXg4Nl9jcHVfZW5hYmxlX3Nzc2UzIHx8ICF4ODZfY3B1X2VuYWJsZV9zaW1kKSB7CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwIGIvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkZjliOS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsNTU1ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEsCi0gICAgJ3VzZV9zeXN0ZW1fbWluaXppcCUnOiAwLAotICAgICd1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucyUnOiAwLAotICAgICd1c2VfeDg2X3g2NF9vcHRpbWl6YXRpb25zJSc6IDAsCi0KLSAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgIFsgJ09TID09ICJub25lIicsIHsKLSAgICAgICAgIyBCZWNhdXNlIHdlIGhhdmUgYSBwYXRjaGVkIHpsaWIsIHdlIGNhbm5vdCB1c2UgdGhlIHN5c3RlbSBsaWJ6LgotICAgICAgICAjIFRPRE8ocHZhbGNoZXYpOiBPcGVuQlNEIGlzIHB1cnBvc2VmdWxseSBsZWZ0IG91dCwgYXMgdGhlIHN5c3RlbQotICAgICAgICAjIHpsaWIgYnJpbmdzIHVwIGFuIGluY29tcGF0aWJpbGl0eSB0aGF0IGJyZWFrcyByZW5kZXJpbmcuCi0gICAgICAgICd1c2Vfc3lzdGVtX3psaWIlJzogMSwKLSAgICAgIH0sIHsKLSAgICAgICAgJ3VzZV9zeXN0ZW1femxpYiUnOiAwLAotICAgICAgfV0sCi0gICAgICBbJ3RhcmdldF9hcmNoPT0ieDg2IiBvciB0YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICd1c2VfeDg2X3g2NF9vcHRpbWl6YXRpb25zJSc6IDEsCi0gICAgICB9XSwKLSAgICAgIFsndGFyZ2V0X2FyY2g9PSJhcm0iIG9yIHRhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAndXNlX2FybV9uZW9uX29wdGltaXphdGlvbnMlJzogMSwKLSAgICAgIH1dLAotICAgIF0sCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgICMgemxpYl9mb3JjZV9uZW9uX2ZwdSBmb3JjZXMgZGVwZW5kZW50IHRhcmdldHMgdG8gY29tcGlsZSB3aXRoIHRoZSBBZHZhbmNlZAotICAgICMgU0lNRCBleHRlbnNpb24uCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3psaWJfZm9yY2VfbmVvbl9mcHUnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd0YXJnZXRfYXJjaD09ImFybSIgYW5kIFwKLSAgICAgICAgICB1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucz09MSBhbmQgXAotICAgICAgICAgIGZsb2F0aW5nX3BvaW50X2ZwdSE9Im5lb24iIGFuZCBcCi0gICAgICAgICAgZmxvYXRpbmdfcG9pbnRfZnB1IT0ibmVvbi1mcDE2IiBhbmQgXAotICAgICAgICAgIGZsb2F0aW5nX3BvaW50X2ZwdSE9Im5lb24tdmZwdjQiIGFuZCBcCi0gICAgICAgICAgZmxvYXRpbmdfcG9pbnRfZnB1IT0iY3J5cHRvLW5lb24tZnAtYXJtdjgiJywgewotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2NmbGFncyEnOiBbCi0gICAgICAgICAgICAgICctbWZwdT08KGZsb2F0aW5nX3BvaW50X2ZwdSknLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctbWZwdT1uZW9uJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3psaWJfYWRsZXIzMl9zaW1kJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnWkxJQl9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsndXNlX3g4Nl94NjRfb3B0aW1pemF0aW9ucz09MScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdBRExFUjMyX1NJTURfU1NTRTMnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYWRsZXIzMl9zaW1kLmMnLAotICAgICAgICAgICAgJ2FkbGVyMzJfc2ltZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdBRExFUjMyX1NJTURfU1NTRTMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydPUyE9IndpbiIgb3IgY2xhbmc9PTEnLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJy1tc3NzZTMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndXNlX2FybV9uZW9uX29wdGltaXphdGlvbnM9PTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQURMRVIzMl9TSU1EX05FT04nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc6emxpYl9mb3JjZV9uZW9uX2ZwdScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdhZGxlcjMyX3NpbWQuYycsCi0gICAgICAgICAgICAnYWRsZXIzMl9zaW1kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0FETEVSMzJfU0lNRF9ORU9OJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnY29iYWx0X2NvbmZpZyE9ImRlYnVnIicsIHsKLSAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAnb3B0aW1pemVfdGFyZ2V0X2Zvcl9zcGVlZCc6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd6bGliX2FybV9jcmMzMicsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgWyd1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucz09MScsIHsKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4nLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICc6emxpYl9mb3JjZV9uZW9uX2ZwdScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjb250cmliL29wdGltaXphdGlvbnMvc2xpZGVfaGFzaF9uZW9uLmMnLAotICAgICAgICAgICAgJ2NvbnRyaWIvb3B0aW1pemF0aW9ucy9zbGlkZV9oYXNoX25lb24uaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICMgQ1JDIChjeWNsaWMgcmVkdW5kYW5jeSBjaGVjaykgaW5zdHJ1Y3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IKLSAgICAgICAgICAgICMgQVJNIHZlcnNpb25zIDggYW5kIGxhdGVyLgotICAgICAgICAgICAgWydPUyE9ImlvcyIgYW5kIGFybV92ZXJzaW9uPj04JywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnQ1JDMzJfQVJNVjhfQ1JDMzInLAotICAgICAgICAgICAgICAgICdaTElCX0lNUExFTUVOVEFUSU9OJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJ2NyYzMyX3NpbWQuYycsCi0gICAgICAgICAgICAgICAgJ2NyYzMyX3NpbWQuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgJ0NSQzMyX0FSTVY4X0NSQzMyJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJ0FSTVY4X09TX0FORFJPSUQnLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICc8KGFuZHJvaWRfbmRrX3Jvb3QpL2FuZHJvaWRfdG9vbHNfbmRrLmd5cDpjcHVfZmVhdHVyZXMnLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgICBbJ09TPT0ibGludXgiJywgewotICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdBUk1WOF9PU19MSU5VWCcsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnT1M9PSJmdWNoc2lhIicsIHsKLSAgICAgICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICAgICAnQVJNVjhfT1NfRlVDSFNJQScsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdBUk1WOF9PU19XSU5ET1dTJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydPUyE9IndpbiIgYW5kIGNsYW5nIT0xJywgewotICAgICAgICAgICAgICAgICAgJ2NmbGFnc19jJzogWwotICAgICAgICAgICAgICAgICAgICAnLW1hcmNoPWFybXY4LWErY3JjJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgWydjb2JhbHRfY29uZmlnIT0iZGVidWciJywgewotICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICAgICAgICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd6bGliX2luZmxhdGVfY2h1bmtfc2ltZCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1pMSUJfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3VzZV94ODZfeDY0X29wdGltaXphdGlvbnM9PTEgb3IgdXNlX2FybV9uZW9uX29wdGltaXphdGlvbnM9PTEnLCB7Ci0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICcuJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2NvbnRyaWIvb3B0aW1pemF0aW9ucy9jaHVua2NvcHkuaCcsCi0gICAgICAgICAgICAnY29udHJpYi9vcHRpbWl6YXRpb25zL2luZmZhc3RfY2h1bmsuYycsCi0gICAgICAgICAgICAnY29udHJpYi9vcHRpbWl6YXRpb25zL2luZmZhc3RfY2h1bmsuaCcsCi0gICAgICAgICAgICAnY29udHJpYi9vcHRpbWl6YXRpb25zL2luZmxhdGUuYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsndXNlX3g4Nl94NjRfb3B0aW1pemF0aW9ucz09MScsIHsKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdJTkZMQVRFX0NIVU5LX1NJTURfU1NFMicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndGFyZ2V0X2FyY2g9PSJ4NjQiJywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnSU5GTEFURV9DSFVOS19SRUFEXzY0TEUnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0ieDg2IicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAnLW1zc2UyJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3VzZV9hcm1fbmVvbl9vcHRpbWl6YXRpb25zPT0xJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0lORkxBVEVfQ0hVTktfU0lNRF9ORU9OJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnOnpsaWJfZm9yY2VfbmVvbl9mcHUnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3RhcmdldF9hcmNoPT0iYXJtNjQiJywgewotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnSU5GTEFURV9DSFVOS19SRUFEXzY0TEUnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ2NvYmFsdF9jb25maWchPSJkZWJ1ZyInLCB7Ci0gICAgICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAgICAgJ29wdGltaXplX3RhcmdldF9mb3Jfc3BlZWQnOiAxLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3psaWJfY3JjMzJfc2ltZCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgJ1pMSUJfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3VzZV94ODZfeDY0X29wdGltaXphdGlvbnM9PTEnLCB7Ci0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnQ1JDMzJfU0lNRF9TU0U0Ml9QQ0xNVUwnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnY3JjMzJfc2ltZC5jJywKLSAgICAgICAgICAgICdjcmMzMl9zaW1kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0NSQzMyX1NJTURfU1NFNDJfUENMTVVMJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnT1MhPSJ3aW4iIG9yIGNsYW5nPT0xJywgewotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICctbXNzZTQuMicsCi0gICAgICAgICAgICAgICAgJy1tcGNsbXVsJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd6bGliX3g4Nl9zaW1kJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnWkxJQl9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsndXNlX3g4Nl94NjRfb3B0aW1pemF0aW9ucz09MScsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjcmNfZm9sZGluZy5jJywKLSAgICAgICAgICAgICdmaWxsX3dpbmRvd19zc2UuYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnT1MhPSJ3aW4iIG9yIGNsYW5nPT0xJywgewotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICctbXNzZTQuMicsCi0gICAgICAgICAgICAgICAgJy1tcGNsbXVsJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd6bGliJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3VzZV9zeXN0ZW1femxpYj09MCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdhZGxlcjMyLmMnLAotICAgICAgICAgICAgJ2Nocm9tZWNvbmYuaCcsCi0gICAgICAgICAgICAnY29tcHJlc3MuYycsCi0gICAgICAgICAgICAnY3JjMzIuYycsCi0gICAgICAgICAgICAnY3JjMzIuaCcsCi0gICAgICAgICAgICAnZGVmbGF0ZS5jJywKLSAgICAgICAgICAgICdkZWZsYXRlLmgnLAotICAgICAgICAgICAgJ2luZmJhY2suYycsCi0gICAgICAgICAgICAnaW5mZmFzdC5jJywKLSAgICAgICAgICAgICdpbmZmYXN0LmgnLAotICAgICAgICAgICAgJ2luZmZpeGVkLmgnLAotICAgICAgICAgICAgJ2luZmxhdGUuaCcsCi0gICAgICAgICAgICAnaW5mbGF0ZS5jJywKLSAgICAgICAgICAgICdpbmZ0cmVlcy5jJywKLSAgICAgICAgICAgICdpbmZ0cmVlcy5oJywKLSAgICAgICAgICAgICd0cmVlcy5jJywKLSAgICAgICAgICAgICd0cmVlcy5oJywKLSAgICAgICAgICAgICd1bmNvbXByLmMnLAotICAgICAgICAgICAgJ3g4Ni5oJywKLSAgICAgICAgICAgICd6Y29uZi5oJywKLSAgICAgICAgICAgICd6bGliLmgnLAotICAgICAgICAgICAgJ3p1dGlsLmMnLAotICAgICAgICAgICAgJ3p1dGlsLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICcuJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAjIFRvIHByZXZlbnQgWmxpYiBldmVyIGZyb20gcmVkZWZpbmluZyBjb25zdCBrZXl3b3JkIGluIHpjb25mLmgKLSAgICAgICAgICAgICAgJ1NUREMnLAotICAgICAgICAgICAgXQotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgICAnLicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnWkxJQl9JTVBMRU1FTlRBVElPTicsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJzp6bGliX3g4Nl9zaW1kJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydPUyE9IndpbiInLCB7Ci0gICAgICAgICAgICAgICdwcm9kdWN0X25hbWUnOiAnY2hyb21lX3psaWInLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7Ci0gICAgICAgICAgICAgICd0b29sc2V0cyc6IFsndGFyZ2V0JywgJ2hvc3QnXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09InN0YXJib2FyZCInLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICAgICAnZ3pjbG9zZS5jJywKLSAgICAgICAgICAgICAgICAnZ3pndXRzLmgnLAotICAgICAgICAgICAgICAgICdnemxpYi5jJywKLSAgICAgICAgICAgICAgICAnZ3pyZWFkLmMnLAotICAgICAgICAgICAgICAgICdnendyaXRlLmMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBbJ3VzZV94ODZfeDY0X29wdGltaXphdGlvbnM9PTEnLCB7Ci0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdVU0VfWDg2X1g2NF9PUFRJTUlaQVRJT05TPTEnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICc6emxpYl9hZGxlcjMyX3NpbWQnLAotICAgICAgICAgICAgICAgICc6emxpYl9jcmMzMl9zaW1kJywKLSAgICAgICAgICAgICAgICAnOnpsaWJfaW5mbGF0ZV9jaHVua19zaW1kJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJ3g4Ni5jJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJ3NpbWRfc3R1Yi5jJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWyd1c2VfYXJtX25lb25fb3B0aW1pemF0aW9ucz09MScsIHsKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1VTRV9BUk1fTkVPTl9PUFRJTUlaQVRJT05TPTEnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICc6emxpYl9hZGxlcjMyX3NpbWQnLAotICAgICAgICAgICAgICAgICc6emxpYl9hcm1fY3JjMzInLAotICAgICAgICAgICAgICAgICc6emxpYl9pbmZsYXRlX2NodW5rX3NpbWQnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAjIHNsaWRlX2hhc2hfbmVvbi5oIGhhcyBiZWVuIG1vdmVkIHRvIHpsaWJfYXJtX2NyYzMyIHNvIHRoYXQgaXQKLSAgICAgICAgICAgICAgICAjIGNhbiBiZSBjb21waWxlZCB3aXRoIEFSTSBORU9OIHN1cHBvcnQuCi0gICAgICAgICAgICAgICAgJ2FybV9mZWF0dXJlcy5jJywKLSAgICAgICAgICAgICAgICAnYXJtX2ZlYXR1cmVzLmgnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAnYXJtX3N0dWIuYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LCB7Ci0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ1VTRV9TWVNURU1fWkxJQicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAnVVNFX1NZU1RFTV9aTElCJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1seicsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtaW5pemlwJywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ3VzZV9zeXN0ZW1fbWluaXppcD09MCcsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdjb250cmliL21pbml6aXAvaW9hcGkuYycsCi0gICAgICAgICAgICAnY29udHJpYi9taW5pemlwL2lvYXBpLmgnLAotICAgICAgICAgICAgJ2NvbnRyaWIvbWluaXppcC9pb3N0YXJib2FyZC5jJywKLSAgICAgICAgICAgICdjb250cmliL21pbml6aXAvaW9zdGFyYm9hcmQuaCcsCi0gICAgICAgICAgICAnY29udHJpYi9taW5pemlwL2lvd2luMzIuYycsCi0gICAgICAgICAgICAnY29udHJpYi9taW5pemlwL2lvd2luMzIuaCcsCi0gICAgICAgICAgICAnY29udHJpYi9taW5pemlwL3VuemlwLmMnLAotICAgICAgICAgICAgJ2NvbnRyaWIvbWluaXppcC91bnppcC5oJywKLSAgICAgICAgICAgICdjb250cmliL21pbml6aXAvemlwLmMnLAotICAgICAgICAgICAgJ2NvbnRyaWIvbWluaXppcC96aXAuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgJy4nLAotICAgICAgICAgICAgJy4uLy4uJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICAgJy4nLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnOnpsaWInLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ09TIT0id2luIicsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICAgICdjb250cmliL21pbml6aXAvaW93aW4zMi5jJywKLSAgICAgICAgICAgICAgICAnY29udHJpYi9taW5pemlwL2lvd2luMzIuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKLSAgICAgICAgICAgICAgJ3Rvb2xzZXRzJzogWyd0YXJnZXQnLCAnaG9zdCddLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwgewotICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICdVU0VfU1lTVEVNX01JTklaSVAnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ1VTRV9TWVNURU1fTUlOSVpJUCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbG1pbml6aXAnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUyBpbiBbIm1hYyIsICJpb3MiLCAiYW5kcm9pZCJdIG9yIG9zX2JzZD09MScsIHsKLSAgICAgICAgICAjIE1hYywgQW5kcm9pZCBhbmQgdGhlIEJTRHMgZG9uJ3QgaGF2ZSBmb3BlbjY0LCBmdGVsbG82NCwgb3IKLSAgICAgICAgICAjIGZzZWVrbzY0LiBXZSB1c2UgZm9wZW4sIGZ0ZWxsLCBhbmQgZnNlZWsgaW5zdGVhZCBvbiB0aGVzZQotICAgICAgICAgICMgc3lzdGVtcy4KLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdVU0VfRklMRTMyQVBJJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydjbGFuZz09MScsIHsKLSAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCi0gICAgICAgICAgICAgICMgemxpYiB1c2VzIGBpZiAoKGEgPT0gYikpYCBmb3Igc29tZSByZWFzb24uCi0gICAgICAgICAgICAgICctV25vLXBhcmVudGhlc2VzLWVxdWFsaXR5JywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgJy1Xbm8tcGFyZW50aGVzZXMtZXF1YWxpdHknLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd6aXAnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdnb29nbGUvemlwLmNjJywKLSAgICAgICAgJ2dvb2dsZS96aXAuaCcsCi0gICAgICAgICdnb29nbGUvemlwX2ludGVybmFsLmNjJywKLSAgICAgICAgJ2dvb2dsZS96aXBfaW50ZXJuYWwuaCcsCi0gICAgICAgICdnb29nbGUvemlwX3JlYWRlci5jYycsCi0gICAgICAgICdnb29nbGUvemlwX3JlYWRlci5oJywKLSAgICAgICAgJ2dvb2dsZS96aXBfd3JpdGVyLmNjJywKLSAgICAgICAgJ2dvb2dsZS96aXBfd3JpdGVyLmgnLAotICAgICAgXSwKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi96bGliLmd5cDptaW5pemlwJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnemlwX3VuaXR0ZXN0cycsCi0gICAgICAndHlwZSc6ICc8KGd0ZXN0X3RhcmdldF90eXBlKScsCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2dvb2dsZS9jb21wcmVzc2lvbl91dGlsc191bml0dGVzdC5jYycsCi0gICAgICAgICdnb29nbGUvemlwX3JlYWRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdnb29nbGUvemlwX3VuaXR0ZXN0LmNjJywKLQotICAgICAgICAjIFJlcXVpcmVkIGJ5IHRoZSB0ZXN0cyBidXQgbm90IHVzZWQgZWxzZXdoZXJlLgotICAgICAgICAnZ29vZ2xlL2NvbXByZXNzaW9uX3V0aWxzLmNjJywKLSAgICAgICAgJ2dvb2dsZS9jb21wcmVzc2lvbl91dGlscy5oJywKLSAgICAgICAgJ2dvb2dsZS9jb21wcmVzc2lvbl91dGlsc19wb3J0YWJsZS5jYycsCi0gICAgICAgICdnb29nbGUvY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuaCcsCi0gICAgICBdLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21pbml6aXAnLAotICAgICAgICAnemlwJywKLSAgICAgICAgJ3psaWInLAotICAgICAgICAnPChERVBUSCkvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRfYmFzZScsCi0gICAgICAgICc8KERFUFRIKS9zdGFyYm9hcmQvY29tbW9uL2NvbW1vbi5neXA6Y29tbW9uJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnaW5jbHVkZXMnOiBbJzwoREVQVEgpL2Jhc2UvdGVzdC90ZXN0Lmd5cGknXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ2NvYmFsdF9jb3B5X3Rlc3RfZGF0YSA9PSAxJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnY29udGVudF90ZXN0X2lucHV0X2ZpbGVzJzogWwotICAgICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvemxpYi9nb29nbGUvdGVzdC9kYXRhJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAjIENhbm9uaWNhbGx5IHRoaXMgc2hvdWxkIGJlICJ0aGlyZF9wYXJ0eS96bGliL2dvb2dsZS90ZXN0IiB0bwotICAgICAgICAgICAgIyBtYXRjaCB0aGUgc291cmNlIHBhdGgsIGJ1dCB3ZSBwdXQgaXQgaGlnaGVyIHRvIHJlZHVjZSBkZXB0aC4KLSAgICAgICAgICAgICdjb250ZW50X3Rlc3Rfb3V0cHV0X3N1YmRpcic6ICd6bGliJywKLSAgICAgICAgICB9LAotICAgICAgICAgICdpbmNsdWRlcyc6IFsgJzwoREVQVEgpL3N0YXJib2FyZC9idWlsZC9jb3B5X3Rlc3RfZGF0YS5neXBpJyBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnemlwX3VuaXR0ZXN0c19kZXBsb3knLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnemlwX3VuaXR0ZXN0cycsCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ2V4ZWN1dGFibGVfbmFtZSc6ICd6aXBfdW5pdHRlc3RzJywKLSAgICAgIH0sCi0gICAgICAnaW5jbHVkZXMnOiBbICc8KERFUFRIKS9zdGFyYm9hcmQvYnVpbGQvZGVwbG95Lmd5cGknIF0sCi0gICAgfSwKLSAgXSwKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL19lbnYucHkgYi90b29scy9fZW52LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTg4YmI3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL19lbnYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jCi0jIENvcHlyaWdodCAyMDE3IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0iIiJBc2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gbG9hZCB0aGUgcHJvamVjdCBlbnZpcm9ubWVudC4iIiIKLQotZnJvbSBpbXAgaW1wb3J0IGxvYWRfc291cmNlCi1mcm9tIG9zIGltcG9ydCBwYXRoCi1pbXBvcnQgc3lzCi0KLV9FTlYgPSBwYXRoLmFic3BhdGgocGF0aC5qb2luKHBhdGguZGlybmFtZShfX2ZpbGVfXyksIHBhdGgucGFyZGlyLCAnX2Vudi5weScpKQotaWYgbm90IHBhdGguZXhpc3RzKF9FTlYpOgotICBwcmludCAnJXM6IENhblwndCBmaW5kIHJlcG8gcm9vdC5cbk1pc3NpbmcgcGFyZW50OiAlcycgJSAoX19maWxlX18sIF9FTlYpCi0gIHN5cy5leGl0KDEpCi1sb2FkX3NvdXJjZSgnJywgX0VOVikKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC1leHBsYWluLnB5IGIvdG9vbHMvZ3lwLWV4cGxhaW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM0NzU4ZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwLWV4cGxhaW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlByaW50cyBwYXRocyBiZXR3ZWVuIGd5cCB0YXJnZXRzLgotIiIiCi0KLWltcG9ydCBqc29uCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi0KLWRlZiB1c2FnZSgpOgotICBwcmludCAiIiJcCi1Vc2FnZToKLSAgdG9vbHMvZ3lwLWV4cGxhaW4ucHkgY2hyb21lX2RsbCBndGVzdCMKLSIiIgotCi0KLWRlZiBHZXRQYXRoKGdyYXBoLCBmcm8sIHRvKToKLSAgIiIiR2l2ZW4gYSBncmFwaCBpbiAobm9kZSAtPiBsaXN0IG9mIHN1Y2Nlc3NvciBub2RlcykgZGljdGlvbmFyeSBmb3JtYXQsCi0gIHlpZWxkcyBhbGwgcGF0aHMgZnJvbSB8ZnJvfCB0byB8dG98LCBzdGFydGluZyB3aXRoIHRoZSBzaG9ydGVzdC4iIiIKLSAgIyBTdG9yaW5nIGZ1bGwgcGF0aHMgaW4gdGhlIHF1ZXVlIGlzIGEgYml0IHdhc3RlZnVsLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMuCi0gIHEgPSBkZXF1ZShbKGZybywgW10pXSkKLSAgd2hpbGUgcToKLSAgICB0LCBwYXRoID0gcS5wb3BsZWZ0KCkKLSAgICBpZiB0ID09IHRvOgotICAgICAgeWllbGQgcGF0aCArIFt0XQotICAgIGZvciBkIGluIGdyYXBoW3RdOgotICAgICAgcS5hcHBlbmQoKGQsIHBhdGggKyBbdF0pKQotCi0KLWRlZiBNYXRjaE5vZGUoZ3JhcGgsIHN1YnN0cmluZyk6Ci0gICIiIkdpdmVuIGEgZGljdGlvbmFyeSwgcmV0dXJucyB0aGUga2V5IHRoYXQgbWF0Y2hlcyB8c3Vic3RyaW5nfCBiZXN0LiBFeGl0cwotICBpZiB0aGVyZSdzIG5vdCBvbmUgc2luZ2xlIGJlc3QgbWF0Y2guIiIiCi0gIGNhbmRpZGF0ZXMgPSBbXQotICBmb3IgdGFyZ2V0IGluIGdyYXBoOgotICAgIGlmIHN1YnN0cmluZyBpbiB0YXJnZXQ6Ci0gICAgICBjYW5kaWRhdGVzLmFwcGVuZCh0YXJnZXQpCi0KLSAgaWYgbm90IGNhbmRpZGF0ZXM6Ci0gICAgcHJpbnQgJ05vIHRhcmdldHMgbWF0Y2ggIiVzIicgJSBzdWJzdHJpbmcKLSAgICBzeXMuZXhpdCgxKQotICBpZiBsZW4oY2FuZGlkYXRlcykgPiAxOgotICAgIHByaW50ICdNb3JlIHRoYW4gb25lIHRhcmdldCBtYXRjaGVzICIlcyI6ICVzJyAlICgKLSAgICAgICAgc3Vic3RyaW5nLCAnICcuam9pbihjYW5kaWRhdGVzKSkKLSAgICBzeXMuZXhpdCgxKQotICByZXR1cm4gY2FuZGlkYXRlc1swXQotCi0KLWRlZiBNYWluKGFyZ3YpOgotICBpZiBzeXMucGxhdGZvcm0gaW4gWyd3aW4zMicsICdjeWd3aW4nXToKLSAgICBwcmludCAnVGhlIGR1bXBfZGVwZW5kZW5jeV9qc29uIGd5cCBnZW5lcmF0b3IgcmVxdWlyZWQgZm9yIGd5cC1leHBsYWluLnB5JwotICAgIHByaW50ICdkb2VzIG5vdCBzdXBwb3J0IFdpbmRvd3MuJwotICAgIHN5cy5leGl0KDEpCi0KLSAgIyBDaGVjayB0aGF0IGR1bXAuanNvbiBleGlzdHMgYW5kIHRoYXQgaXQncyBub3QgdG9vIG9sZC4KLSAgZHVtcF9qc29uX2RpcnR5ID0gRmFsc2UKLSAgdHJ5OgotICAgIHN0ID0gb3Muc3RhdCgnZHVtcC5qc29uJykKLSAgICBmaWxlX2FnZV9zID0gdGltZS50aW1lKCkgLSBzdC5zdF9tdGltZQotICAgIGlmIGZpbGVfYWdlX3MgPiAyICogNjAgKiA2MDoKLSAgICAgIHByaW50ICdkdW1wLmpzb24gaXMgbW9yZSB0aGFuIDIgaG91cnMgb2xkLicKLSAgICAgIGR1bXBfanNvbl9kaXJ0eSA9IFRydWUKLSAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgcHJpbnQgJ2R1bXAuanNvbiBub3QgZm91bmQuJwotICAgIGR1bXBfanNvbl9kaXJ0eSA9IFRydWUKLQotICBpZiBkdW1wX2pzb25fZGlydHk6Ci0gICAgcHJpbnQgJ1J1bicKLSAgICBwcmludCAnICAgIEdZUF9HRU5FUkFUT1JTPWR1bXBfZGVwZW5kZW5jeV9qc29uIGJ1aWxkL2d5cF9jaHJvbWl1bScKLSAgICBwcmludCAnZmlyc3QsIHRoZW4gdHJ5IGFnYWluLicKLSAgICBzeXMuZXhpdCgxKQotCi0gIGcgPSBqc29uLmxvYWQob3BlbignZHVtcC5qc29uJykpCi0KLSAgaWYgbGVuKGFyZ3YpICE9IDM6Ci0gICAgdXNhZ2UoKQotICAgIHN5cy5leGl0KDEpCi0KLSAgZnJvID0gTWF0Y2hOb2RlKGcsIGFyZ3ZbMV0pCi0gIHRvID0gTWF0Y2hOb2RlKGcsIGFyZ3ZbMl0pCi0KLSAgcGF0aHMgPSBsaXN0KEdldFBhdGgoZywgZnJvLCB0bykpCi0gIGlmIGxlbihwYXRocykgPiAwOgotICAgIHByaW50ICdUaGVzZSBwYXRocyBsZWFkIGZyb20gJXMgdG8gJXM6JyAlIChmcm8sIHRvKQotICAgIGZvciBwYXRoIGluIHBhdGhzOgotICAgICAgcHJpbnQgJyAtPiAnLmpvaW4ocGF0aCkKLSAgZWxzZToKLSAgICBwcmludCAnTm8gcGF0aHMgZm91bmQgZnJvbSAlcyB0byAlcy4nICUgKGZybywgdG8pCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgTWFpbihzeXMuYXJndikKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC8uZ2l0aWdub3JlIGIvdG9vbHMvZ3lwLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOWNiNjQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSoucHljCi0qfgotLiouc3c/Ci0uRFNfU3RvcmUKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9BVVRIT1JTIGIvdG9vbHMvZ3lwL0FVVEhPUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYjgyYjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL0FVVEhPUlMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgTmFtZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSBsaWtlIHNvOgotIyBOYW1lIG9yIE9yZ2FuaXphdGlvbiA8ZW1haWwgYWRkcmVzcz4KLQotR29vZ2xlIEluYy4KLVN0ZXZlbiBLbmlnaHQgPGtuaWdodEBiYWxkbXQuY29tPgotUnlhbiBOb3J0b24gPHJub3J0b24xMEBnbWFpbC5jb20+CmRpZmYgLS1naXQgYS90b29scy9neXAvTElDRU5TRSBiL3Rvb2xzL2d5cC9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjZiMDExLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9MSUNFTlNFCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotQ29weXJpZ2h0IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotbWV0OgotCi0gICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLWNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLWluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLSAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLXRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLUEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi1PV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLVNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi1USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS90b29scy9neXAvTUFOSUZFU1QgYi90b29scy9neXAvTUFOSUZFU1QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNWVjYzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL01BTklGRVNUCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotc2V0dXAucHkKLWd5cAotTElDRU5TRQotQVVUSE9SUwotcHlsaWIvZ3lwL01TVlNOZXcucHkKLXB5bGliL2d5cC9NU1ZTUHJvamVjdC5weQotcHlsaWIvZ3lwL01TVlNUb29sRmlsZS5weQotcHlsaWIvZ3lwL01TVlNVc2VyRmlsZS5weQotcHlsaWIvZ3lwL01TVlNWZXJzaW9uLnB5Ci1weWxpYi9neXAvU0NvbnMucHkKLXB5bGliL2d5cC9fX2luaXRfXy5weQotcHlsaWIvZ3lwL2NvbW1vbi5weQotcHlsaWIvZ3lwL2lucHV0LnB5Ci1weWxpYi9neXAveGNvZGVwcm9qX2ZpbGUucHkKLXB5bGliL2d5cC9nZW5lcmF0b3IvX19pbml0X18ucHkKLXB5bGliL2d5cC9nZW5lcmF0b3IvZ3lwZC5weQotcHlsaWIvZ3lwL2dlbmVyYXRvci9neXBzaC5weQotcHlsaWIvZ3lwL2dlbmVyYXRvci9tYWtlLnB5Ci1weWxpYi9neXAvZ2VuZXJhdG9yL21zdnMucHkKLXB5bGliL2d5cC9nZW5lcmF0b3Ivc2NvbnMucHkKLXB5bGliL2d5cC9nZW5lcmF0b3IveGNvZGUucHkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9PV05FUlMgYi90b29scy9neXAvT1dORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmU4ZmZjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9PV05FUlMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0qCmRpZmYgLS1naXQgYS90b29scy9neXAvYnVpbGRib3QvYnVpbGRib3RfcnVuLnB5IGIvdG9vbHMvZ3lwL2J1aWxkYm90L2J1aWxkYm90X3J1bi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTdmZGI2NS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvYnVpbGRib3QvYnVpbGRib3RfcnVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLQotIiIiQXJndW1lbnQtbGVzcyBzY3JpcHQgdG8gc2VsZWN0IHdoYXQgdG8gcnVuIG9uIHRoZSBidWlsZGJvdHMuIiIiCi0KLQotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi0KLWlmIHN5cy5wbGF0Zm9ybSBpbiBbJ3dpbjMyJywgJ2N5Z3dpbiddOgotICBFWEVfU1VGRklYID0gJy5leGUnCi1lbHNlOgotICBFWEVfU1VGRklYID0gJycKLQotCi1CVUlMREJPVF9ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKLVRSVU5LX0RJUiA9IG9zLnBhdGguZGlybmFtZShCVUlMREJPVF9ESVIpCi1ST09UX0RJUiA9IG9zLnBhdGguZGlybmFtZShUUlVOS19ESVIpCi1PVVRfRElSID0gb3MucGF0aC5qb2luKFRSVU5LX0RJUiwgJ291dCcpCi0KLQotZGVmIEd5cFRlc3RGb3JtYXQodGl0bGUsIGZvcm1hdD1Ob25lLCBtc3ZzX3ZlcnNpb249Tm9uZSk6Ci0gICIiIlJ1biB0aGUgZ3lwIHRlc3RzIGZvciBhIGdpdmVuIGZvcm1hdCwgZW1pdHRpbmcgYW5ub3RhdG9yIHRhZ3MuCi0KLSAgU2VlIGFubm90YXRvciBkb2NzIGF0OgotICAgIGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9kZXYvZGV2ZWxvcGVycy90ZXN0aW5nL2Nocm9taXVtLWJ1aWxkLWluZnJhc3RydWN0dXJlL2J1aWxkYm90LWFubm90YXRpb25zCi0gIEFyZ3M6Ci0gICAgZm9ybWF0OiBneXAgZm9ybWF0IHRvIHRlc3QuCi0gIFJldHVybnM6Ci0gICAgMCBmb3Igc3VjZXNzcywgMSBmb3IgZmFpbHVyZS4KLSAgIiIiCi0gIGlmIG5vdCBmb3JtYXQ6Ci0gICAgZm9ybWF0ID0gdGl0bGUKLQotICBwcmludCAnQEBAQlVJTERfU1RFUCAnICsgdGl0bGUgKyAnQEBAJwotICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgIyBUT0RPKGJyYWRuZWxzb24pOiByZW1vdmUgdGhpcyB3aGVuIHRoaXMgaXNzdWUgaXMgcmVzb2x2ZWQ6Ci0gICMgICAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwODI1MQotICBpZiBmb3JtYXQgPT0gJ25pbmphJzoKLSAgICBlbnZbJ05PR09MRCddID0gJzEnCi0gIGlmIG1zdnNfdmVyc2lvbjoKLSAgICBlbnZbJ0dZUF9NU1ZTX1ZFUlNJT04nXSA9IG1zdnNfdmVyc2lvbgotICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKCcgJy5qb2luKAotICAgICAgW3N5cy5leGVjdXRhYmxlLCAndHJ1bmsvZ3lwdGVzdC5weScsCi0gICAgICAgJy0tYWxsJywKLSAgICAgICAnLS1wYXNzZWQnLAotICAgICAgICctLWZvcm1hdCcsIGZvcm1hdCwKLSAgICAgICAnLS1jaGRpcicsICd0cnVuaycsCi0gICAgICAgJy0tcGF0aCcsICcuLi9zY29ucyddKSwKLSAgICAgIGN3ZD1ST09UX0RJUiwgZW52PWVudiwgc2hlbGw9VHJ1ZSkKLSAgaWYgcmV0Y29kZToKLSAgICAjIEVtaXQgZmFpbHVyZSB0YWcsIGFuZCBrZWVwIGdvaW5nLgotICAgIHByaW50ICdAQEBTVEVQX0ZBSUxVUkVAQEAnCi0gICAgcmV0dXJuIDEKLSAgcmV0dXJuIDAKLQotCi1kZWYgR3lwQnVpbGQoKToKLSAgIyBEdW1wIG91dC8gZGlyZWN0b3J5LgotICBwcmludCAnQEBAQlVJTERfU1RFUCBjbGVhbnVwQEBAJwotICBwcmludCAnUmVtb3ZpbmcgJXMuLi4nICUgT1VUX0RJUgotICBzaHV0aWwucm10cmVlKE9VVF9ESVIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKLSAgcHJpbnQgJ0RvbmUuJwotCi0gIHJldGNvZGUgPSAwCi0gIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51eCcpOgotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgnbmluamEnKQotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgnc2NvbnMnKQotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgnbWFrZScpCi0gIGVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgnbmluamEnKQotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgneGNvZGUnKQotICAgIHJldGNvZGUgKz0gR3lwVGVzdEZvcm1hdCgnbWFrZScpCi0gIGVsaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgcmV0Y29kZSArPSBHeXBUZXN0Rm9ybWF0KCduaW5qYScpCi0gICAgcmV0Y29kZSArPSBHeXBUZXN0Rm9ybWF0KCdtc3ZzLTIwMDgnLCBmb3JtYXQ9J21zdnMnLCBtc3ZzX3ZlcnNpb249JzIwMDgnKQotICAgIGlmIG9zLmVudmlyb25bJ0JVSUxEQk9UX0JVSUxERVJOQU1FJ10gPT0gJ2d5cC13aW42NCc6Ci0gICAgICByZXRjb2RlICs9IEd5cFRlc3RGb3JtYXQoJ21zdnMtMjAxMCcsIGZvcm1hdD0nbXN2cycsIG1zdnNfdmVyc2lvbj0nMjAxMCcpCi0gIGVsc2U6Ci0gICAgcmFpc2UgRXhjZXB0aW9uKCdVbmtub3duIHBsYXRmb3JtJykKLSAgaWYgcmV0Y29kZToKLSAgICAjIFRPRE8oYnJhZG5lbHNvbik6IG9uY2UgdGhlIGFubm90YXRvciBzdXBwb3J0cyBhIHBvc3RzY3JpcHQgKHNlY3Rpb24gZm9yCi0gICAgIyAgICAgYWZ0ZXIgdGhlIGJ1aWxkIHByb3BlciB0aGF0IGNvdWxkIGJlIHVzZWQgZm9yIGN1bXVsYXRpdmUgZmFpbHVyZXMpLAotICAgICMgICAgIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhpcy4gVGhpcyBpc29sYXRlcyB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHNvCi0gICAgIyAgICAgdGhhdCBpdCBpc24ndCBtaXNhdHRyaWJ1dGVkIHRvIHRoZSBsYXN0IHN0YWdlLgotICAgIHByaW50ICdAQEBCVUlMRF9TVEVQIGZhaWx1cmVzQEBAJwotICAgIHN5cy5leGl0KHJldGNvZGUpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgR3lwQnVpbGQoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL2d5cCBiL3Rvb2xzL2d5cC9neXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ1MmU3MTEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL2d5cAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBzeXMKLQotIyBUT0RPKG1hcmspOiBzeXMucGF0aCBtYW5pcHVsYXRpb24gaXMgc29tZSB0ZW1wb3JhcnkgdGVzdGluZyBzdHVmZi4KLXRyeToKLSAgaW1wb3J0IGd5cAotZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICBpbXBvcnQgb3MucGF0aAotICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSksICdweWxpYicpKQotICBpbXBvcnQgZ3lwCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KGd5cC5tYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS90b29scy9neXAvZ3lwLmJhdCBiL3Rvb2xzL2d5cC9neXAuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MGZiYzZkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9neXAuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AcmVtIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLUByZW0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLUByZW0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0NCi1AcHl0aG9uICIlfmRwMC9neXAiICUqDQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL2d5cF9kdW1teS5jIGIvdG9vbHMvZ3lwL2d5cF9kdW1teS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjU1YmJjLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9neXBfZHVtbXkuYworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiAqLwotCi1pbnQgbWFpbigpIHsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90b29scy9neXAvZ3lwdGVzdC5weSBiL3Rvb2xzL2d5cC9neXB0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2YzZiMDA5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9neXB0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLV9fZG9jX18gPSAiIiIKLWd5cHRlc3QucHkgLS0gdGVzdCBydW5uZXIgZm9yIEdZUCB0ZXN0cy4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotY2xhc3MgQ29tbWFuZFJ1bm5lcjoKLSAgIiIiCi0gIEV4ZWN1dG9yIGNsYXNzIGZvciBjb21tYW5kcywgaW5jbHVkaW5nICJjb21tYW5kcyIgaW1wbGVtZW50ZWQgYnkKLSAgUHl0aG9uIGZ1bmN0aW9ucy4KLSAgIiIiCi0gIHZlcmJvc2UgPSBUcnVlCi0gIGFjdGl2ZSA9IFRydWUKLQotICBkZWYgX19pbml0X18oc2VsZiwgZGljdGlvbmFyeT17fSk6Ci0gICAgc2VsZi5zdWJzdF9kaWN0aW9uYXJ5KGRpY3Rpb25hcnkpCi0KLSAgZGVmIHN1YnN0X2RpY3Rpb25hcnkoc2VsZiwgZGljdGlvbmFyeSk6Ci0gICAgc2VsZi5fc3Vic3RfZGljdGlvbmFyeSA9IGRpY3Rpb25hcnkKLQotICBkZWYgc3Vic3Qoc2VsZiwgc3RyaW5nLCBkaWN0aW9uYXJ5PU5vbmUpOgotICAgICIiIgotICAgIFN1YnN0aXR1dGVzICh2aWEgdGhlIGZvcm1hdCBvcGVyYXRvcikgdGhlIHZhbHVlcyBpbiB0aGUgc3BlY2lmaWVkCi0gICAgZGljdGlvbmFyeSBpbnRvIHRoZSBzcGVjaWZpZWQgY29tbWFuZC4KLQotICAgIFRoZSBjb21tYW5kIGNhbiBiZSBhbiAoYWN0aW9uLCBzdHJpbmcpIHR1cGxlLiAgSW4gYWxsIGNhc2VzLCB3ZQotICAgIHBlcmZvcm0gc3Vic3RpdHV0aW9uIG9uIHN0cmluZ3MgYW5kIGRvbid0IHdvcnJ5IGlmIHNvbWV0aGluZyBpc24ndAotICAgIGEgc3RyaW5nLiAgKEl0J3MgcHJvYmFibHkgYSBQeXRob24gZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQuKQotICAgICIiIgotICAgIGlmIGRpY3Rpb25hcnkgaXMgTm9uZToKLSAgICAgIGRpY3Rpb25hcnkgPSBzZWxmLl9zdWJzdF9kaWN0aW9uYXJ5Ci0gICAgaWYgZGljdGlvbmFyeToKLSAgICAgIHRyeToKLSAgICAgICAgc3RyaW5nID0gc3RyaW5nICUgZGljdGlvbmFyeQotICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIHJldHVybiBzdHJpbmcKLQotICBkZWYgZGlzcGxheShzZWxmLCBjb21tYW5kLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpOgotICAgIGlmIG5vdCBzZWxmLnZlcmJvc2U6Ci0gICAgICByZXR1cm4KLSAgICBpZiB0eXBlKGNvbW1hbmQpID09IHR5cGUoKCkpOgotICAgICAgZnVuYyA9IGNvbW1hbmRbMF0KLSAgICAgIGFyZ3MgPSBjb21tYW5kWzE6XQotICAgICAgcyA9ICclcyglcyknICUgKGZ1bmMuX19uYW1lX18sICcsICcuam9pbihtYXAocmVwciwgYXJncykpKQotICAgIGlmIHR5cGUoY29tbWFuZCkgPT0gdHlwZShbXSk6Ci0gICAgICAjIFRPRE86ICBxdW90ZSBhcmd1bWVudHMgY29udGFpbmluZyBzcGFjZXMKLSAgICAgICMgVE9ETzogIGhhbmRsZSBtZXRhIGNoYXJhY3RlcnM/Ci0gICAgICBzID0gJyAnLmpvaW4oY29tbWFuZCkKLSAgICBlbHNlOgotICAgICAgcyA9IHNlbGYuc3Vic3QoY29tbWFuZCkKLSAgICBpZiBub3Qgcy5lbmRzd2l0aCgnXG4nKToKLSAgICAgIHMgKz0gJ1xuJwotICAgIHN5cy5zdGRvdXQud3JpdGUocykKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotICBkZWYgZXhlY3V0ZShzZWxmLCBjb21tYW5kLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpOgotICAgICIiIgotICAgIEV4ZWN1dGVzIGEgc2luZ2xlIGNvbW1hbmQuCi0gICAgIiIiCi0gICAgaWYgbm90IHNlbGYuYWN0aXZlOgotICAgICAgcmV0dXJuIDAKLSAgICBpZiB0eXBlKGNvbW1hbmQpID09IHR5cGUoJycpOgotICAgICAgY29tbWFuZCA9IHNlbGYuc3Vic3QoY29tbWFuZCkKLSAgICAgIGNtZGFyZ3MgPSBzaGxleC5zcGxpdChjb21tYW5kKQotICAgICAgaWYgY21kYXJnc1swXSA9PSAnY2QnOgotICAgICAgICAgY29tbWFuZCA9IChvcy5jaGRpciwpICsgdHVwbGUoY21kYXJnc1sxOl0pCi0gICAgaWYgdHlwZShjb21tYW5kKSA9PSB0eXBlKCgpKToKLSAgICAgIGZ1bmMgPSBjb21tYW5kWzBdCi0gICAgICBhcmdzID0gY29tbWFuZFsxOl0KLSAgICAgIHJldHVybiBmdW5jKCphcmdzKQotICAgIGVsc2U6Ci0gICAgICBpZiBzdGRvdXQgaXMgc3lzLnN0ZG91dDoKLSAgICAgICAgIyBTYW1lIGFzIHBhc3Npbmcgc3lzLnN0ZG91dCwgZXhjZXB0IHB5dGhvbjIuNCBkb2Vzbid0IGZhaWwgb24gaXQuCi0gICAgICAgIHN1Ym91dCA9IE5vbmUKLSAgICAgIGVsc2U6Ci0gICAgICAgICMgT3BlbiBwaXBlIGZvciBhbnl0aGluZyBlbHNlIHNvIFBvcGVuIHdvcmtzIG9uIHB5dGhvbjIuNC4KLSAgICAgICAgc3Vib3V0ID0gc3VicHJvY2Vzcy5QSVBFCi0gICAgICBpZiBzdGRlcnIgaXMgc3lzLnN0ZGVycjoKLSAgICAgICAgIyBTYW1lIGFzIHBhc3Npbmcgc3lzLnN0ZGVyciwgZXhjZXB0IHB5dGhvbjIuNCBkb2Vzbid0IGZhaWwgb24gaXQuCi0gICAgICAgIHN1YmVyciA9IE5vbmUKLSAgICAgIGVsaWYgc3RkZXJyIGlzIE5vbmU6Ci0gICAgICAgICMgTWVyZ2Ugd2l0aCBzdGRvdXQgaWYgc3RkZXJyIGlzbid0IHNwZWNpZmllZC4KLSAgICAgICAgc3ViZXJyID0gc3VicHJvY2Vzcy5TVERPVVQKLSAgICAgIGVsc2U6Ci0gICAgICAgICMgT3BlbiBwaXBlIGZvciBhbnl0aGluZyBlbHNlIHNvIFBvcGVuIHdvcmtzIG9uIHB5dGhvbjIuNC4KLSAgICAgICAgc3ViZXJyID0gc3VicHJvY2Vzcy5QSVBFCi0gICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3ViZXJyKQotICAgICAgcC53YWl0KCkKLSAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgotICAgICAgICBzZWxmLnN0ZG91dCA9IHAuc3Rkb3V0LnJlYWQoKQotICAgICAgZWxpZiBzdGRvdXQgaXMgbm90IHN5cy5zdGRvdXQ6Ci0gICAgICAgIHN0ZG91dC53cml0ZShwLnN0ZG91dC5yZWFkKCkpCi0gICAgICBpZiBzdGRlcnIgbm90IGluIChOb25lLCBzeXMuc3RkZXJyKToKLSAgICAgICAgc3RkZXJyLndyaXRlKHAuc3RkZXJyLnJlYWQoKSkKLSAgICAgIHJldHVybiBwLnJldHVybmNvZGUKLQotICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIGRpc3BsYXk9Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKToKLSAgICAiIiIKLSAgICBSdW5zIGEgc2luZ2xlIGNvbW1hbmQsIGRpc3BsYXlpbmcgaXQgZmlyc3QuCi0gICAgIiIiCi0gICAgaWYgZGlzcGxheSBpcyBOb25lOgotICAgICAgZGlzcGxheSA9IGNvbW1hbmQKLSAgICBzZWxmLmRpc3BsYXkoZGlzcGxheSkKLSAgICByZXR1cm4gc2VsZi5leGVjdXRlKGNvbW1hbmQsIHN0ZG91dCwgc3RkZXJyKQotCi0KLWNsYXNzIFVuYnVmZmVyZWQ6Ci0gIGRlZiBfX2luaXRfXyhzZWxmLCBmcCk6Ci0gICAgc2VsZi5mcCA9IGZwCi0gIGRlZiB3cml0ZShzZWxmLCBhcmcpOgotICAgIHNlbGYuZnAud3JpdGUoYXJnKQotICAgIHNlbGYuZnAuZmx1c2goKQotICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6Ci0gICAgcmV0dXJuIGdldGF0dHIoc2VsZi5mcCwgYXR0cikKLQotc3lzLnN0ZG91dCA9IFVuYnVmZmVyZWQoc3lzLnN0ZG91dCkKLXN5cy5zdGRlcnIgPSBVbmJ1ZmZlcmVkKHN5cy5zdGRlcnIpCi0KLQotZGVmIGZpbmRfYWxsX2d5cHRlc3RfZmlsZXMoZGlyZWN0b3J5KToKLSAgICByZXN1bHQgPSBbXQotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6Ci0gICAgICBpZiAnLnN2bicgaW4gZGlyczoKLSAgICAgICAgZGlycy5yZW1vdmUoJy5zdm4nKQotICAgICAgcmVzdWx0LmV4dGVuZChbIG9zLnBhdGguam9pbihyb290LCBmKSBmb3IgZiBpbiBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKCdneXB0ZXN0JykgYW5kIGYuZW5kc3dpdGgoJy5weScpIF0pCi0gICAgcmVzdWx0LnNvcnQoKQotICAgIHJldHVybiByZXN1bHQKLQotCi1kZWYgbWFpbihhcmd2PU5vbmUpOgotICBpZiBhcmd2IGlzIE5vbmU6Ci0gICAgYXJndiA9IHN5cy5hcmd2Ci0KLSAgdXNhZ2UgPSAiZ3lwdGVzdC5weSBbLWFobG5xXSBbLWYgZm9ybWF0c10gW3Rlc3QgLi4uXSIKLSAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQotICBwYXJzZXIuYWRkX29wdGlvbigiLWEiLCAiLS1hbGwiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgaGVscD0icnVuIGFsbCB0ZXN0cyIpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCItQyIsICItLWNoZGlyIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgIGhlbHA9ImNoZGlyIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IikKLSAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9ybWF0IiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9JycsCi0gICAgICAgICAgICBoZWxwPSJydW4gdGVzdHMgd2l0aCB0aGUgc3BlY2lmaWVkIGZvcm1hdHMiKQotICBwYXJzZXIuYWRkX29wdGlvbigiLUciLCAnLS1neXBfb3B0aW9uJywgYWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtdLAotICAgICAgICAgICAgaGVscD0iQWRkIC1HIG9wdGlvbnMgdG8gdGhlIGd5cCBjb21tYW5kIGxpbmUiKQotICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1saXN0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGhlbHA9Imxpc3QgYXZhaWxhYmxlIHRlc3RzIGFuZCBleGl0IikKLSAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbm8tZXhlYyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICBoZWxwPSJubyBleGVjdXRlLCBqdXN0IHByaW50IHRoZSBjb21tYW5kIGxpbmUiKQotICBwYXJzZXIuYWRkX29wdGlvbigiLS1wYXNzZWQiLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgaGVscD0icmVwb3J0IHBhc3NlZCB0ZXN0cyIpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCItLXBhdGgiLCBhY3Rpb249ImFwcGVuZCIsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICBoZWxwPSJhZGRpdGlvbmFsICRQQVRIIGRpcmVjdG9yeSIpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCItcSIsICItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGhlbHA9InF1aWV0LCBkb24ndCBwcmludCB0ZXN0IGNvbW1hbmQgbGluZXMiKQotICBvcHRzLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCi0KLSAgaWYgb3B0cy5jaGRpcjoKLSAgICBvcy5jaGRpcihvcHRzLmNoZGlyKQotCi0gIGlmIG9wdHMucGF0aDoKLSAgICBleHRyYV9wYXRoID0gW29zLnBhdGguYWJzcGF0aChwKSBmb3IgcCBpbiBvcHRzLnBhdGhdCi0gICAgZXh0cmFfcGF0aCA9IG9zLnBhdGhzZXAuam9pbihleHRyYV9wYXRoKQotICAgIG9zLmVudmlyb25bJ1BBVEgnXSArPSBvcy5wYXRoc2VwICsgZXh0cmFfcGF0aAotCi0gIGlmIG5vdCBhcmdzOgotICAgIGlmIG5vdCBvcHRzLmFsbDoKLSAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1NwZWNpZnkgLWEgdG8gZ2V0IGFsbCB0ZXN0cy5cbicpCi0gICAgICByZXR1cm4gMQotICAgIGFyZ3MgPSBbJ3Rlc3QnXQotCi0gIHRlc3RzID0gW10KLSAgZm9yIGFyZyBpbiBhcmdzOgotICAgIGlmIG9zLnBhdGguaXNkaXIoYXJnKToKLSAgICAgIHRlc3RzLmV4dGVuZChmaW5kX2FsbF9neXB0ZXN0X2ZpbGVzKG9zLnBhdGgubm9ybXBhdGgoYXJnKSkpCi0gICAgZWxzZToKLSAgICAgIHRlc3RzLmFwcGVuZChhcmcpCi0KLSAgaWYgb3B0cy5saXN0OgotICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgcHJpbnQgdGVzdAotICAgIHN5cy5leGl0KDApCi0KLSAgQ29tbWFuZFJ1bm5lci52ZXJib3NlID0gbm90IG9wdHMucXVpZXQKLSAgQ29tbWFuZFJ1bm5lci5hY3RpdmUgPSBub3Qgb3B0cy5ub19leGVjCi0gIGNyID0gQ29tbWFuZFJ1bm5lcigpCi0KLSAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gb3MucGF0aC5hYnNwYXRoKCd0ZXN0L2xpYicpCi0gIGlmIG5vdCBvcHRzLnF1aWV0OgotICAgIHN5cy5zdGRvdXQud3JpdGUoJ1BZVEhPTlBBVEg9JXNcbicgJSBvcy5lbnZpcm9uWydQWVRIT05QQVRIJ10pCi0KLSAgcGFzc2VkID0gW10KLSAgZmFpbGVkID0gW10KLSAgbm9fcmVzdWx0ID0gW10KLQotICBpZiBvcHRzLmZvcm1hdDoKLSAgICBmb3JtYXRfbGlzdCA9IG9wdHMuZm9ybWF0LnNwbGl0KCcsJykKLSAgZWxzZToKLSAgICAjIFRPRE86ICBub3QgZHVwbGljYXRlIHRoaXMgbWFwcGluZyBmcm9tIHB5bGliL2d5cC9fX2luaXRfXy5weQotICAgIGZvcm1hdF9saXN0ID0gewotICAgICAgJ2ZyZWVic2Q3JzogWydtYWtlJ10sCi0gICAgICAnZnJlZWJzZDgnOiBbJ21ha2UnXSwKLSAgICAgICdjeWd3aW4nOiAgIFsnbXN2cyddLAotICAgICAgJ3dpbjMyJzogICAgWydtc3ZzJywgJ25pbmphJ10sCi0gICAgICAnbGludXgyJzogICBbJ21ha2UnLCAnbmluamEnXSwKLSAgICAgICdsaW51eDMnOiAgIFsnbWFrZScsICduaW5qYSddLAotICAgICAgJ2Rhcndpbic6ICAgWydtYWtlJywgJ25pbmphJywgJ3hjb2RlJ10sCi0gICAgfVtzeXMucGxhdGZvcm1dCi0KLSAgZm9yIGZvcm1hdCBpbiBmb3JtYXRfbGlzdDoKLSAgICBvcy5lbnZpcm9uWydURVNUR1lQX0ZPUk1BVCddID0gZm9ybWF0Ci0gICAgaWYgbm90IG9wdHMucXVpZXQ6Ci0gICAgICBzeXMuc3Rkb3V0LndyaXRlKCdURVNUR1lQX0ZPUk1BVD0lc1xuJyAlIGZvcm1hdCkKLQotICAgIGd5cF9vcHRpb25zID0gW10KLSAgICBmb3Igb3B0aW9uIGluIG9wdHMuZ3lwX29wdGlvbjoKLSAgICAgIGd5cF9vcHRpb25zICs9IFsnLUcnLCBvcHRpb25dCi0gICAgaWYgZ3lwX29wdGlvbnMgYW5kIG5vdCBvcHRzLnF1aWV0OgotICAgICAgc3lzLnN0ZG91dC53cml0ZSgnRXh0cmEgR3lwIG9wdGlvbnM6ICVzXG4nICUgZ3lwX29wdGlvbnMpCi0KLSAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgIHN0YXR1cyA9IGNyLnJ1bihbc3lzLmV4ZWN1dGFibGUsIHRlc3RdICsgZ3lwX29wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN5cy5zdGRvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN5cy5zdGRlcnIpCi0gICAgICBpZiBzdGF0dXMgPT0gMjoKLSAgICAgICAgbm9fcmVzdWx0LmFwcGVuZCh0ZXN0KQotICAgICAgZWxpZiBzdGF0dXM6Ci0gICAgICAgIGZhaWxlZC5hcHBlbmQodGVzdCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBhc3NlZC5hcHBlbmQodGVzdCkKLQotICBpZiBub3Qgb3B0cy5xdWlldDoKLSAgICBkZWYgcmVwb3J0KGRlc2NyaXB0aW9uLCB0ZXN0cyk6Ci0gICAgICBpZiB0ZXN0czoKLSAgICAgICAgaWYgbGVuKHRlc3RzKSA9PSAxOgotICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuJXMgdGhlIGZvbGxvd2luZyB0ZXN0OlxuIiAlIGRlc2NyaXB0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgIGZtdCA9ICJcbiVzIHRoZSBmb2xsb3dpbmcgJWQgdGVzdHM6XG4iCi0gICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShmbXQgJSAoZGVzY3JpcHRpb24sIGxlbih0ZXN0cykpKQotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcdCIgKyAiXG5cdCIuam9pbih0ZXN0cykgKyAiXG4iKQotCi0gICAgaWYgb3B0cy5wYXNzZWQ6Ci0gICAgICByZXBvcnQoIlBhc3NlZCIsIHBhc3NlZCkKLSAgICByZXBvcnQoIkZhaWxlZCIsIGZhaWxlZCkKLSAgICByZXBvcnQoIk5vIHJlc3VsdCBmcm9tIiwgbm9fcmVzdWx0KQotCi0gIGlmIGZhaWxlZDoKLSAgICByZXR1cm4gMQotICBlbHNlOgotICAgIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTTmV3LnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTTmV3LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTNmZTYxLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU05ldy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIk5ldyBpbXBsZW1lbnRhdGlvbiBvZiBWaXN1YWwgU3R1ZGlvIHByb2plY3QgZ2VuZXJhdGlvbiBmb3IgU0NvbnMuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHJhbmRvbQotCi1pbXBvcnQgZ3lwLmNvbW1vbgotCi0jIGhhc2hsaWIgaXMgc3VwcGxpZWQgYXMgb2YgUHl0aG9uIDIuNSBhcyB0aGUgcmVwbGFjZW1lbnQgaW50ZXJmYWNlIGZvciBtZDUKLSMgYW5kIG90aGVyIHNlY3VyZSBoYXNoZXMuICBJbiAyLjYsIG1kNSBpcyBkZXByZWNhdGVkLiAgSW1wb3J0IGhhc2hsaWIgaWYKLSMgYXZhaWxhYmxlLCBhdm9pZGluZyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgdW5kZXIgMi42LiAgSW1wb3J0IG1kNSBvdGhlcndpc2UsCi0jIHByZXNlcnZpbmcgMi40IGNvbXBhdGliaWxpdHkuCi10cnk6Ci0gIGltcG9ydCBoYXNobGliCi0gIF9uZXdfbWQ1ID0gaGFzaGxpYi5tZDUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IG1kNQotICBfbmV3X21kNSA9IG1kNS5uZXcKLQotCi0jIEluaXRpYWxpemUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKLXJhbmRvbS5zZWVkKCkKLQotIyBHVUlEcyBmb3IgcHJvamVjdCB0eXBlcwotRU5UUllfVFlQRV9HVUlEUyA9IHsKLSAgICAncHJvamVjdCc6ICd7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfScsCi0gICAgJ2ZvbGRlcic6ICd7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fScsCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSGVscGVyIGZ1bmN0aW9ucwotCi0KLWRlZiBNYWtlR3VpZChuYW1lLCBzZWVkPSdtc3ZzX25ldycpOgotICAiIiJSZXR1cm5zIGEgR1VJRCBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXQgbmFtZS4KLQotICBBcmdzOgotICAgIG5hbWU6IFRhcmdldCBuYW1lLgotICAgIHNlZWQ6IFNlZWQgZm9yIE1ENSBoYXNoLgotICBSZXR1cm5zOgotICAgIEEgR1VJRC1saW5lIHN0cmluZyBjYWxjdWxhdGVkIGZyb20gdGhlIG5hbWUgYW5kIHNlZWQuCi0KLSAgVGhpcyBnZW5lcmF0ZXMgc29tZXRoaW5nIHdoaWNoIGxvb2tzIGxpa2UgYSBHVUlELCBidXQgZGVwZW5kcyBvbmx5IG9uIHRoZQotICBuYW1lIGFuZCBzZWVkLiAgVGhpcyBtZWFucyB0aGUgc2FtZSBuYW1lL3NlZWQgd2lsbCBhbHdheXMgZ2VuZXJhdGUgdGhlIHNhbWUKLSAgR1VJRCwgc28gdGhhdCBwcm9qZWN0cyBhbmQgc29sdXRpb25zIHdoaWNoIHJlZmVyIHRvIGVhY2ggb3RoZXIgY2FuIGV4cGxpY2l0bHkKLSAgZGV0ZXJtaW5lIHRoZSBHVUlEIHRvIHJlZmVyIHRvIGV4cGxpY2l0bHkuICBJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIEdVSUQgd2lsbAotICBub3QgY2hhbmdlIHdoZW4gdGhlIHByb2plY3QgZm9yIGEgdGFyZ2V0IGlzIHJlYnVpbHQuCi0gICIiIgotICAjIENhbGN1bGF0ZSBhIE1ENSBzaWduYXR1cmUgZm9yIHRoZSBzZWVkIGFuZCBuYW1lLgotICBkID0gX25ld19tZDUoc3RyKHNlZWQpICsgc3RyKG5hbWUpKS5oZXhkaWdlc3QoKS51cHBlcigpCi0gICMgQ29udmVydCBtb3N0IG9mIHRoZSBzaWduYXR1cmUgdG8gR1VJRCBmb3JtIChkaXNjYXJkIHRoZSByZXN0KQotICBndWlkID0gKCd7JyArIGRbOjhdICsgJy0nICsgZFs4OjEyXSArICctJyArIGRbMTI6MTZdICsgJy0nICsgZFsxNjoyMF0KLSAgICAgICAgICArICctJyArIGRbMjA6MzJdICsgJ30nKQotICByZXR1cm4gZ3VpZAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotY2xhc3MgTVNWU1NvbHV0aW9uRW50cnkob2JqZWN0KToKLSAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICMgU29ydCBieSBuYW1lIHRoZW4gZ3VpZCAoc28gdGhpbmdzIGFyZSBpbiBvcmRlciBvbiB2czIwMDgpLgotICAgIHJldHVybiBjbXAoKHNlbGYubmFtZSwgc2VsZi5nZXRfZ3VpZCgpKSwgKG90aGVyLm5hbWUsIG90aGVyLmdldF9ndWlkKCkpKQotCi0KLWNsYXNzIE1TVlNGb2xkZXIoTVNWU1NvbHV0aW9uRW50cnkpOgotICAiIiJGb2xkZXIgaW4gYSBWaXN1YWwgU3R1ZGlvIHByb2plY3Qgb3Igc29sdXRpb24uIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG5hbWUgPSBOb25lLCBlbnRyaWVzID0gTm9uZSwKLSAgICAgICAgICAgICAgIGd1aWQgPSBOb25lLCBpdGVtcyA9IE5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBmb2xkZXIuCi0KLSAgICBBcmdzOgotICAgICAgcGF0aDogRnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIuCi0gICAgICBuYW1lOiBOYW1lIG9mIHRoZSBmb2xkZXIuCi0gICAgICBlbnRyaWVzOiBMaXN0IG9mIGZvbGRlciBlbnRyaWVzIHRvIG5lc3QgaW5zaWRlIHRoaXMgZm9sZGVyLiAgTWF5IGNvbnRhaW4KLSAgICAgICAgICBGb2xkZXIgb3IgUHJvamVjdCBvYmplY3RzLiAgTWF5IGJlIE5vbmUsIGlmIHRoZSBmb2xkZXIgaXMgZW1wdHkuCi0gICAgICBndWlkOiBHVUlEIHRvIHVzZSBmb3IgZm9sZGVyLCBpZiBub3QgTm9uZS4KLSAgICAgIGl0ZW1zOiBMaXN0IG9mIHNvbHV0aW9uIGl0ZW1zIHRvIGluY2x1ZGUgaW4gdGhlIGZvbGRlciBwcm9qZWN0LiAgTWF5IGJlCi0gICAgICAgICAgTm9uZSwgaWYgdGhlIGZvbGRlciBkb2VzIG5vdCBkaXJlY3RseSBjb250YWluIGl0ZW1zLgotICAgICIiIgotICAgIGlmIG5hbWU6Ci0gICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgZWxzZToKLSAgICAgICMgVXNlIGxhc3QgbGF5ZXIuCi0gICAgICBzZWxmLm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCi0KLSAgICBzZWxmLnBhdGggPSBwYXRoCi0gICAgc2VsZi5ndWlkID0gZ3VpZAotCi0gICAgIyBDb3B5IHBhc3NlZCBsaXN0cyAob3Igc2V0IHRvIGVtcHR5IGxpc3RzKQotICAgIHNlbGYuZW50cmllcyA9IHNvcnRlZChsaXN0KGVudHJpZXMgb3IgW10pKQotICAgIHNlbGYuaXRlbXMgPSBsaXN0KGl0ZW1zIG9yIFtdKQotCi0gICAgc2VsZi5lbnRyeV90eXBlX2d1aWQgPSBFTlRSWV9UWVBFX0dVSURTWydmb2xkZXInXQotCi0gIGRlZiBnZXRfZ3VpZChzZWxmKToKLSAgICBpZiBzZWxmLmd1aWQgaXMgTm9uZToKLSAgICAgICMgVXNlIGNvbnNpc3RlbnQgZ3VpZHMgZm9yIGZvbGRlcnMgKHNvIHRoaW5ncyBkb24ndCByZWdlbmVyYXRlKS4KLSAgICAgIHNlbGYuZ3VpZCA9IE1ha2VHdWlkKHNlbGYucGF0aCwgc2VlZD0nbXN2c19mb2xkZXInKQotICAgIHJldHVybiBzZWxmLmd1aWQKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotY2xhc3MgTVNWU1Byb2plY3QoTVNWU1NvbHV0aW9uRW50cnkpOgotICAiIiJWaXN1YWwgU3R1ZGlvIHByb2plY3QuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG5hbWUgPSBOb25lLCBkZXBlbmRlbmNpZXMgPSBOb25lLCBndWlkID0gTm9uZSwKLSAgICAgICAgICAgICAgIHNwZWMgPSBOb25lLCBidWlsZF9maWxlID0gTm9uZSwgY29uZmlnX3BsYXRmb3JtX292ZXJyaWRlcyA9IE5vbmUsCi0gICAgICAgICAgICAgICBmaXhwYXRoX3ByZWZpeCA9IE5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBwcm9qZWN0LgotCi0gICAgQXJnczoKLSAgICAgIHBhdGg6IEFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QgZmlsZS4KLSAgICAgIG5hbWU6IE5hbWUgb2YgcHJvamVjdC4gIElmIE5vbmUsIHRoZSBuYW1lIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGJhc2UKLSAgICAgICAgICBuYW1lIG9mIHRoZSBwcm9qZWN0IGZpbGUuCi0gICAgICBkZXBlbmRlbmNpZXM6IExpc3Qgb2Ygb3RoZXIgUHJvamVjdCBvYmplY3RzIHRoaXMgcHJvamVjdCBpcyBkZXBlbmRlbnQKLSAgICAgICAgICB1cG9uLCBpZiBub3QgTm9uZS4KLSAgICAgIGd1aWQ6IEdVSUQgdG8gdXNlIGZvciBwcm9qZWN0LCBpZiBub3QgTm9uZS4KLSAgICAgIHNwZWM6IERpY3Rpb25hcnkgc3BlY2lmeWluZyBob3cgdG8gYnVpbGQgdGhpcyBwcm9qZWN0LgotICAgICAgYnVpbGRfZmlsZTogRmlsZW5hbWUgb2YgdGhlIC5neXAgZmlsZSB0aGF0IHRoZSB2Y3Byb2ogZmlsZSBjb21lcyBmcm9tLgotICAgICAgY29uZmlnX3BsYXRmb3JtX292ZXJyaWRlczogb3B0aW9uYWwgZGljdCBvZiBjb25maWd1cmF0aW9uIHBsYXRmb3JtcyB0bwotICAgICAgICAgIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQgZm9yIHRoaXMgdGFyZ2V0LgotICAgICAgZml4cGF0aF9wcmVmaXg6IHRoZSBwYXRoIHVzZWQgdG8gYWRqdXN0IHRoZSBiZWhhdmlvciBvZiBfZml4cGF0aAotICAgICIiIgotICAgIHNlbGYucGF0aCA9IHBhdGgKLSAgICBzZWxmLmd1aWQgPSBndWlkCi0gICAgc2VsZi5zcGVjID0gc3BlYwotICAgIHNlbGYuYnVpbGRfZmlsZSA9IGJ1aWxkX2ZpbGUKLSAgICAjIFVzZSBwcm9qZWN0IGZpbGVuYW1lIGlmIG5hbWUgbm90IHNwZWNpZmllZAotICAgIHNlbGYubmFtZSA9IG5hbWUgb3Igb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHBhdGgpKVswXQotCi0gICAgIyBDb3B5IHBhc3NlZCBsaXN0cyAob3Igc2V0IHRvIGVtcHR5IGxpc3RzKQotICAgIHNlbGYuZGVwZW5kZW5jaWVzID0gbGlzdChkZXBlbmRlbmNpZXMgb3IgW10pCi0KLSAgICBzZWxmLmVudHJ5X3R5cGVfZ3VpZCA9IEVOVFJZX1RZUEVfR1VJRFNbJ3Byb2plY3QnXQotCi0gICAgaWYgY29uZmlnX3BsYXRmb3JtX292ZXJyaWRlczoKLSAgICAgIHNlbGYuY29uZmlnX3BsYXRmb3JtX292ZXJyaWRlcyA9IGNvbmZpZ19wbGF0Zm9ybV9vdmVycmlkZXMKLSAgICBlbHNlOgotICAgICAgc2VsZi5jb25maWdfcGxhdGZvcm1fb3ZlcnJpZGVzID0ge30KLSAgICBzZWxmLmZpeHBhdGhfcHJlZml4ID0gZml4cGF0aF9wcmVmaXgKLSAgICBzZWxmLm1zYnVpbGRfdG9vbHNldCA9IE5vbmUKLQotICBkZWYgc2V0X2RlcGVuZGVuY2llcyhzZWxmLCBkZXBlbmRlbmNpZXMpOgotICAgIHNlbGYuZGVwZW5kZW5jaWVzID0gbGlzdChkZXBlbmRlbmNpZXMgb3IgW10pCi0KLSAgZGVmIGdldF9ndWlkKHNlbGYpOgotICAgIGlmIHNlbGYuZ3VpZCBpcyBOb25lOgotICAgICAgIyBTZXQgR1VJRCBmcm9tIHBhdGgKLSAgICAgICMgVE9ETyhyc3BhbmdsZXIpOiBUaGlzIGlzIGZyYWdpbGUuCi0gICAgICAjIDEuIFdlIGNhbid0IGp1c3QgdXNlIHRoZSBwcm9qZWN0IGZpbGVuYW1lIHNhbnMgcGF0aCwgc2luY2UgdGhlcmUgY291bGQKLSAgICAgICMgICAgYmUgbXVsdGlwbGUgcHJvamVjdHMgd2l0aCB0aGUgc2FtZSBiYXNlIG5hbWUgKGZvciBleGFtcGxlLAotICAgICAgIyAgICBmb28vdW5pdHRlc3QudmNwcm9qIGFuZCBiYXIvdW5pdHRlc3QudmNwcm9qKS4KLSAgICAgICMgMi4gVGhlIHBhdGggbmVlZHMgdG8gYmUgcmVsYXRpdmUgdG8gJFNPVVJDRV9ST09ULCBzbyB0aGF0IHRoZSBwcm9qZWN0Ci0gICAgICAjICAgIEdVSUQgaXMgdGhlIHNhbWUgd2hldGhlciBpdCdzIGluY2x1ZGVkIGZyb20gYmFzZS9iYXNlLnNsbiBvcgotICAgICAgIyAgICBmb28vYmFyL2Jhei9iYXouc2xuLgotICAgICAgIyAzLiBUaGUgR1VJRCBuZWVkcyB0byBiZSB0aGUgc2FtZSBlYWNoIHRpbWUgdGhpcyBidWlsZGVyIGlzIGludm9rZWQsIHNvCi0gICAgICAjICAgIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbiB3aGVuIHRoZSBwcm9qZWN0IGNoYW5nZXMuCi0gICAgICAjIDQuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBwcmUtYnVpbHQgcHJvamVjdCBmaWxlcyBieSByZWFkaW5nIHRoZQotICAgICAgIyAgICBHVUlEIGZyb20gdGhlIGZpbGVzLgotICAgICAgc2VsZi5ndWlkID0gTWFrZUd1aWQoc2VsZi5uYW1lKQotICAgIHJldHVybiBzZWxmLmd1aWQKLQotICBkZWYgc2V0X21zYnVpbGRfdG9vbHNldChzZWxmLCBtc2J1aWxkX3Rvb2xzZXQpOgotICAgIHNlbGYubXNidWlsZF90b29sc2V0ID0gbXNidWlsZF90b29sc2V0Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCi1jbGFzcyBNU1ZTU29sdXRpb246Ci0gICIiIlZpc3VhbCBTdHVkaW8gc29sdXRpb24uIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIHZlcnNpb24sIGVudHJpZXM9Tm9uZSwgdmFyaWFudHM9Tm9uZSwKLSAgICAgICAgICAgICAgIHdlYnNpdGVQcm9wZXJ0aWVzPVRydWUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBzb2x1dGlvbi4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBQYXRoIHRvIHNvbHV0aW9uIGZpbGUuCi0gICAgICB2ZXJzaW9uOiBGb3JtYXQgdmVyc2lvbiB0byBlbWl0LgotICAgICAgZW50cmllczogTGlzdCBvZiBlbnRyaWVzIGluIHNvbHV0aW9uLiAgTWF5IGNvbnRhaW4gRm9sZGVyIG9yIFByb2plY3QKLSAgICAgICAgICBvYmplY3RzLiAgTWF5IGJlIE5vbmUsIGlmIHRoZSBmb2xkZXIgaXMgZW1wdHkuCi0gICAgICB2YXJpYW50czogTGlzdCBvZiBidWlsZCB2YXJpYW50IHN0cmluZ3MuICBJZiBub25lLCBhIGRlZmF1bHQgbGlzdCB3aWxsCi0gICAgICAgICAgYmUgdXNlZC4KLSAgICAgIHdlYnNpdGVQcm9wZXJ0aWVzOiBGbGFnIHRvIGRlY2lkZSBpZiB0aGUgd2Vic2l0ZSBwcm9wZXJ0aWVzIHNlY3Rpb24KLSAgICAgICAgICBpcyBnZW5lcmF0ZWQuCi0gICAgIiIiCi0gICAgc2VsZi5wYXRoID0gcGF0aAotICAgIHNlbGYud2Vic2l0ZVByb3BlcnRpZXMgPSB3ZWJzaXRlUHJvcGVydGllcwotICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KLQotICAgICMgQ29weSBwYXNzZWQgbGlzdHMgKG9yIHNldCB0byBlbXB0eSBsaXN0cykKLSAgICBzZWxmLmVudHJpZXMgPSBsaXN0KGVudHJpZXMgb3IgW10pCi0KLSAgICBpZiB2YXJpYW50czoKLSAgICAgICMgQ29weSBwYXNzZWQgbGlzdAotICAgICAgc2VsZi52YXJpYW50cyA9IHZhcmlhbnRzWzpdCi0gICAgZWxzZToKLSAgICAgICMgVXNlIGRlZmF1bHQKLSAgICAgIHNlbGYudmFyaWFudHMgPSBbJ0RlYnVnfFdpbjMyJywgJ1JlbGVhc2V8V2luMzInXQotICAgICMgVE9ETyhyc3BhbmdsZXIpOiBOZWVkIHRvIGJlIGFibGUgdG8gaGFuZGxlIGEgbWFwcGluZyBvZiBzb2x1dGlvbiBjb25maWcKLSAgICAjIHRvIHByb2plY3QgY29uZmlnLiAgU2hvdWxkIHdlIGJlIGFibGUgdG8gaGFuZGxlIHZhcmlhbnRzIGJlaW5nIGEgZGljdCwKLSAgICAjIG9yIGFkZCBhIHNlcGFyYXRlIHZhcmlhbnRfbWFwIHZhcmlhYmxlPyAgSWYgaXQncyBhIGRpY3QsIHdlIGNhbid0Ci0gICAgIyBndWFyYW50ZWUgdGhlIG9yZGVyIG9mIHZhcmlhbnRzIHNpbmNlIGRpY3Qga2V5cyBhcmVuJ3Qgb3JkZXJlZC4KLQotCi0gICAgIyBUT0RPKHJzcGFuZ2xlcik6IEF1dG9tYXRpY2FsbHkgd3JpdGUgdG8gZGlzayBmb3Igbm93OyBzaG91bGQgZGVsYXkgdW50aWwKLSAgICAjIG5vZGUtZXZhbHVhdGlvbiB0aW1lLgotICAgIHNlbGYuV3JpdGUoKQotCi0KLSAgZGVmIFdyaXRlKHNlbGYsIHdyaXRlcj1neXAuY29tbW9uLldyaXRlT25EaWZmKToKLSAgICAiIiJXcml0ZXMgdGhlIHNvbHV0aW9uIGZpbGUgdG8gZGlzay4KLQotICAgIFJhaXNlczoKLSAgICAgIEluZGV4RXJyb3I6IEFuIGVudHJ5IGFwcGVhcnMgbXVsdGlwbGUgdGltZXMuCi0gICAgIiIiCi0gICAgIyBXYWxrIHRoZSBlbnRyeSB0cmVlIGFuZCBjb2xsZWN0IGFsbCB0aGUgZm9sZGVycyBhbmQgcHJvamVjdHMuCi0gICAgYWxsX2VudHJpZXMgPSBzZXQoKQotICAgIGVudHJpZXNfdG9fY2hlY2sgPSBzZWxmLmVudHJpZXNbOl0KLSAgICB3aGlsZSBlbnRyaWVzX3RvX2NoZWNrOgotICAgICAgZSA9IGVudHJpZXNfdG9fY2hlY2sucG9wKDApCi0KLSAgICAgICMgSWYgdGhpcyBlbnRyeSBoYXMgYmVlbiB2aXNpdGVkLCBub3RoaW5nIHRvIGRvLgotICAgICAgaWYgZSBpbiBhbGxfZW50cmllczoKLSAgICAgICAgY29udGludWUKLQotICAgICAgYWxsX2VudHJpZXMuYWRkKGUpCi0KLSAgICAgICMgSWYgdGhpcyBpcyBhIGZvbGRlciwgY2hlY2sgaXRzIGVudHJpZXMgdG9vLgotICAgICAgaWYgaXNpbnN0YW5jZShlLCBNU1ZTRm9sZGVyKToKLSAgICAgICAgZW50cmllc190b19jaGVjayArPSBlLmVudHJpZXMKLQotICAgIGFsbF9lbnRyaWVzID0gc29ydGVkKGFsbF9lbnRyaWVzKQotCi0gICAgIyBPcGVuIGZpbGUgYW5kIHByaW50IGhlYWRlcgotICAgIGYgPSB3cml0ZXIoc2VsZi5wYXRoKQotICAgIGYud3JpdGUoJ01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsICcKLSAgICAgICAgICAgICdGb3JtYXQgVmVyc2lvbiAlc1xyXG4nICUgc2VsZi52ZXJzaW9uLlNvbHV0aW9uVmVyc2lvbigpKQotICAgIGYud3JpdGUoJyMgJXNcclxuJyAlIHNlbGYudmVyc2lvbi5EZXNjcmlwdGlvbigpKQotCi0gICAgIyBQcm9qZWN0IGVudHJpZXMKLSAgICBzbG5fcm9vdCA9IG9zLnBhdGguc3BsaXQoc2VsZi5wYXRoKVswXQotICAgIGZvciBlIGluIGFsbF9lbnRyaWVzOgotICAgICAgcmVsYXRpdmVfcGF0aCA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKGUucGF0aCwgc2xuX3Jvb3QpCi0gICAgICAjIG1zYnVpbGQgZG9lcyBub3QgYWNjZXB0IGFuIGVtcHR5IGZvbGRlcl9uYW1lLgotICAgICAgIyB1c2UgJy4nIGluIGNhc2UgcmVsYXRpdmVfcGF0aCBpcyBlbXB0eS4KLSAgICAgIGZvbGRlcl9uYW1lID0gcmVsYXRpdmVfcGF0aC5yZXBsYWNlKCcvJywgJ1xcJykgb3IgJy4nCi0gICAgICBmLndyaXRlKCdQcm9qZWN0KCIlcyIpID0gIiVzIiwgIiVzIiwgIiVzIlxyXG4nICUgKAotICAgICAgICAgIGUuZW50cnlfdHlwZV9ndWlkLCAgICAgICAgICAjIEVudHJ5IHR5cGUgR1VJRAotICAgICAgICAgIGUubmFtZSwgICAgICAgICAgICAgICAgICAgICAjIEZvbGRlciBuYW1lCi0gICAgICAgICAgZm9sZGVyX25hbWUsICAgICAgICAgICAgICAgICMgRm9sZGVyIG5hbWUgKGFnYWluKQotICAgICAgICAgIGUuZ2V0X2d1aWQoKSwgICAgICAgICAgICAgICAjIEVudHJ5IEdVSUQKLSAgICAgICkpCi0KLSAgICAgICMgVE9ETyhyc3BhbmdsZXIpOiBOZWVkIGEgd2F5IHRvIGNvbmZpZ3VyZSB0aGlzIHN0dWZmCi0gICAgICBpZiBzZWxmLndlYnNpdGVQcm9wZXJ0aWVzOgotICAgICAgICBmLndyaXRlKCdcdFByb2plY3RTZWN0aW9uKFdlYnNpdGVQcm9wZXJ0aWVzKSA9IHByZVByb2plY3RcclxuJwotICAgICAgICAgICAgICAgICdcdFx0RGVidWcuQXNwTmV0Q29tcGlsZXIuRGVidWcgPSAiVHJ1ZSJcclxuJwotICAgICAgICAgICAgICAgICdcdFx0UmVsZWFzZS5Bc3BOZXRDb21waWxlci5EZWJ1ZyA9ICJGYWxzZSJcclxuJwotICAgICAgICAgICAgICAgICdcdEVuZFByb2plY3RTZWN0aW9uXHJcbicpCi0KLSAgICAgIGlmIGlzaW5zdGFuY2UoZSwgTVNWU0ZvbGRlcik6Ci0gICAgICAgIGlmIGUuaXRlbXM6Ci0gICAgICAgICAgZi53cml0ZSgnXHRQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVByb2plY3RcclxuJykKLSAgICAgICAgICBmb3IgaSBpbiBlLml0ZW1zOgotICAgICAgICAgICAgZi53cml0ZSgnXHRcdCVzID0gJXNcclxuJyAlIChpLCBpKSkKLSAgICAgICAgICBmLndyaXRlKCdcdEVuZFByb2plY3RTZWN0aW9uXHJcbicpCi0KLSAgICAgIGlmIGlzaW5zdGFuY2UoZSwgTVNWU1Byb2plY3QpOgotICAgICAgICBpZiBlLmRlcGVuZGVuY2llczoKLSAgICAgICAgICBmLndyaXRlKCdcdFByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3RcclxuJykKLSAgICAgICAgICBmb3IgZCBpbiBlLmRlcGVuZGVuY2llczoKLSAgICAgICAgICAgIGYud3JpdGUoJ1x0XHQlcyA9ICVzXHJcbicgJSAoZC5nZXRfZ3VpZCgpLCBkLmdldF9ndWlkKCkpKQotICAgICAgICAgIGYud3JpdGUoJ1x0RW5kUHJvamVjdFNlY3Rpb25cclxuJykKLQotICAgICAgZi53cml0ZSgnRW5kUHJvamVjdFxyXG4nKQotCi0gICAgIyBHbG9iYWwgc2VjdGlvbgotICAgIGYud3JpdGUoJ0dsb2JhbFxyXG4nKQotCi0gICAgIyBDb25maWd1cmF0aW9ucyAodmFyaWFudHMpCi0gICAgZi53cml0ZSgnXHRHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvblxyXG4nKQotICAgIGZvciB2IGluIHNlbGYudmFyaWFudHM6Ci0gICAgICBmLndyaXRlKCdcdFx0JXMgPSAlc1xyXG4nICUgKHYsIHYpKQotICAgIGYud3JpdGUoJ1x0RW5kR2xvYmFsU2VjdGlvblxyXG4nKQotCi0gICAgIyBTb3J0IGNvbmZpZyBndWlkcyBmb3IgZWFzaWVyIGRpZmZpbmcgb2Ygc29sdXRpb24gY2hhbmdlcy4KLSAgICBjb25maWdfZ3VpZHMgPSBbXQotICAgIGNvbmZpZ19ndWlkc19vdmVycmlkZXMgPSB7fQotICAgIGZvciBlIGluIGFsbF9lbnRyaWVzOgotICAgICAgaWYgaXNpbnN0YW5jZShlLCBNU1ZTUHJvamVjdCk6Ci0gICAgICAgIGNvbmZpZ19ndWlkcy5hcHBlbmQoZS5nZXRfZ3VpZCgpKQotICAgICAgICBjb25maWdfZ3VpZHNfb3ZlcnJpZGVzW2UuZ2V0X2d1aWQoKV0gPSBlLmNvbmZpZ19wbGF0Zm9ybV9vdmVycmlkZXMKLSAgICBjb25maWdfZ3VpZHMuc29ydCgpCi0KLSAgICBmLndyaXRlKCdcdEdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uXHJcbicpCi0gICAgZm9yIGcgaW4gY29uZmlnX2d1aWRzOgotICAgICAgZm9yIHYgaW4gc2VsZi52YXJpYW50czoKLSAgICAgICAgbnYgPSBjb25maWdfZ3VpZHNfb3ZlcnJpZGVzW2ddLmdldCh2LCB2KQotICAgICAgICAjIFBpY2sgd2hpY2ggcHJvamVjdCBjb25maWd1cmF0aW9uIHRvIGJ1aWxkIGZvciB0aGlzIHNvbHV0aW9uCi0gICAgICAgICMgY29uZmlndXJhdGlvbi4KLSAgICAgICAgZi53cml0ZSgnXHRcdCVzLiVzLkFjdGl2ZUNmZyA9ICVzXHJcbicgJSAoCi0gICAgICAgICAgICBnLCAgICAgICAgICAgICAgIyBQcm9qZWN0IEdVSUQKLSAgICAgICAgICAgIHYsICAgICAgICAgICAgICAjIFNvbHV0aW9uIGJ1aWxkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIG52LCAgICAgICAgICAgICAjIFByb2plY3QgYnVpbGQgY29uZmlnIGZvciB0aGF0IHNvbHV0aW9uIGNvbmZpZwotICAgICAgICApKQotCi0gICAgICAgICMgRW5hYmxlIHByb2plY3QgaW4gdGhpcyBzb2x1dGlvbiBjb25maWd1cmF0aW9uLgotICAgICAgICBmLndyaXRlKCdcdFx0JXMuJXMuQnVpbGQuMCA9ICVzXHJcbicgJSAoCi0gICAgICAgICAgICBnLCAgICAgICAgICAgICAgIyBQcm9qZWN0IEdVSUQKLSAgICAgICAgICAgIHYsICAgICAgICAgICAgICAjIFNvbHV0aW9uIGJ1aWxkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgIG52LCAgICAgICAgICAgICAjIFByb2plY3QgYnVpbGQgY29uZmlnIGZvciB0aGF0IHNvbHV0aW9uIGNvbmZpZwotICAgICAgICApKQotICAgIGYud3JpdGUoJ1x0RW5kR2xvYmFsU2VjdGlvblxyXG4nKQotCi0gICAgIyBUT0RPKHJzcGFuZ2xlcik6IFNob3VsZCBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB0aGlzIHN0dWZmIHRvbyAodGhvdWdoIEkndmUKLSAgICAjIG5ldmVyIHNlZW4gdGhpcyBiZSBhbnkgZGlmZmVyZW50KQotICAgIGYud3JpdGUoJ1x0R2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb25cclxuJykKLSAgICBmLndyaXRlKCdcdFx0SGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFXHJcbicpCi0gICAgZi53cml0ZSgnXHRFbmRHbG9iYWxTZWN0aW9uXHJcbicpCi0KLSAgICAjIEZvbGRlciBtYXBwaW5ncwotICAgICMgVE9ETyhyc3BhbmdsZXIpOiBTaG91bGQgb21pdCB0aGlzIHNlY3Rpb24gaWYgdGhlcmUgYXJlIG5vIGZvbGRlcnMKLSAgICBmLndyaXRlKCdcdEdsb2JhbFNlY3Rpb24oTmVzdGVkUHJvamVjdHMpID0gcHJlU29sdXRpb25cclxuJykKLSAgICBmb3IgZSBpbiBhbGxfZW50cmllczoKLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIE1TVlNGb2xkZXIpOgotICAgICAgICBjb250aW51ZSAgICAgICAgIyBEb2VzIG5vdCBhcHBseSB0byBwcm9qZWN0cywgb25seSBmb2xkZXJzCi0gICAgICBmb3Igc3ViZW50cnkgaW4gZS5lbnRyaWVzOgotICAgICAgICBmLndyaXRlKCdcdFx0JXMgPSAlc1xyXG4nICUgKHN1YmVudHJ5LmdldF9ndWlkKCksIGUuZ2V0X2d1aWQoKSkpCi0gICAgZi53cml0ZSgnXHRFbmRHbG9iYWxTZWN0aW9uXHJcbicpCi0KLSAgICBmLndyaXRlKCdFbmRHbG9iYWxcclxuJykKLQotICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTUHJvamVjdC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1Byb2plY3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMWNlZWQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTUHJvamVjdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlZpc3VhbCBTdHVkaW8gcHJvamVjdCByZWFkZXIvd3JpdGVyLiIiIgotCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IGd5cC5lYXN5X3htbCBhcyBlYXN5X3htbAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotY2xhc3MgVG9vbChvYmplY3QpOgotICAiIiJWaXN1YWwgU3R1ZGlvIHRvb2wuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGF0dHJzPU5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSB0b29sLgotCi0gICAgQXJnczoKLSAgICAgIG5hbWU6IFRvb2wgbmFtZS4KLSAgICAgIGF0dHJzOiBEaWN0IG9mIHRvb2wgYXR0cmlidXRlczsgbWF5IGJlIE5vbmUuCi0gICAgIiIiCi0gICAgc2VsZi5fYXR0cnMgPSBhdHRycyBvciB7fQotICAgIHNlbGYuX2F0dHJzWydOYW1lJ10gPSBuYW1lCi0KLSAgZGVmIF9HZXRTcGVjaWZpY2F0aW9uKHNlbGYpOgotICAgICIiIkNyZWF0ZXMgYW4gZWxlbWVudCBmb3IgdGhlIHRvb2wuCi0KLSAgICBSZXR1cm5zOgotICAgICAgQSBuZXcgeG1sLmRvbS5FbGVtZW50IGZvciB0aGUgdG9vbC4KLSAgICAiIiIKLSAgICByZXR1cm4gWydUb29sJywgc2VsZi5fYXR0cnNdCi0KLWNsYXNzIEZpbHRlcihvYmplY3QpOgotICAiIiJWaXN1YWwgU3R1ZGlvIGZpbHRlciAtIHRoYXQgaXMsIGEgdmlydHVhbCBmb2xkZXIuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGNvbnRlbnRzPU5vbmUpOgotICAgICIiIkluaXRpYWxpemVzIHRoZSBmb2xkZXIuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTogRmlsdGVyIChmb2xkZXIpIG5hbWUuCi0gICAgICBjb250ZW50czogTGlzdCBvZiBmaWxlbmFtZXMgYW5kL29yIEZpbHRlciBvYmplY3RzIGNvbnRhaW5lZC4KLSAgICAiIiIKLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgc2VsZi5jb250ZW50cyA9IGxpc3QoY29udGVudHMgb3IgW10pCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLWNsYXNzIFdyaXRlcihvYmplY3QpOgotICAiIiJWaXN1YWwgU3R1ZGlvIFhNTCBwcm9qZWN0IHdyaXRlci4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9wYXRoLCB2ZXJzaW9uLCBuYW1lLCBndWlkPU5vbmUsIHBsYXRmb3Jtcz1Ob25lKToKLSAgICAiIiJJbml0aWFsaXplcyB0aGUgcHJvamVjdC4KLQotICAgIEFyZ3M6Ci0gICAgICBwcm9qZWN0X3BhdGg6IFBhdGggdG8gdGhlIHByb2plY3QgZmlsZS4KLSAgICAgIHZlcnNpb246IEZvcm1hdCB2ZXJzaW9uIHRvIGVtaXQuCi0gICAgICBuYW1lOiBOYW1lIG9mIHRoZSBwcm9qZWN0LgotICAgICAgZ3VpZDogR1VJRCB0byB1c2UgZm9yIHByb2plY3QsIGlmIG5vdCBOb25lLgotICAgICAgcGxhdGZvcm1zOiBBcnJheSBvZiBzdHJpbmcsIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAgSWYgbnVsbCwgWydXaW4zMiddCi0gICAgIiIiCi0gICAgc2VsZi5wcm9qZWN0X3BhdGggPSBwcm9qZWN0X3BhdGgKLSAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCi0gICAgc2VsZi5uYW1lID0gbmFtZQotICAgIHNlbGYuZ3VpZCA9IGd1aWQKLQotICAgICMgRGVmYXVsdCB0byBXaW4zMiBmb3IgcGxhdGZvcm1zLgotICAgIGlmIG5vdCBwbGF0Zm9ybXM6Ci0gICAgICBwbGF0Zm9ybXMgPSBbJ1dpbjMyJ10KLQotICAgICMgSW5pdGlhbGl6ZSB0aGUgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIHZhcmlvdXMgc2VjdGlvbnMuCi0gICAgc2VsZi5wbGF0Zm9ybV9zZWN0aW9uID0gWydQbGF0Zm9ybXMnXQotICAgIGZvciBwbGF0Zm9ybSBpbiBwbGF0Zm9ybXM6Ci0gICAgICBzZWxmLnBsYXRmb3JtX3NlY3Rpb24uYXBwZW5kKFsnUGxhdGZvcm0nLCB7J05hbWUnOiBwbGF0Zm9ybX1dKQotICAgIHNlbGYudG9vbF9maWxlc19zZWN0aW9uID0gWydUb29sRmlsZXMnXQotICAgIHNlbGYuY29uZmlndXJhdGlvbnNfc2VjdGlvbiA9IFsnQ29uZmlndXJhdGlvbnMnXQotICAgIHNlbGYuZmlsZXNfc2VjdGlvbiA9IFsnRmlsZXMnXQotCi0gICAgIyBLZWVwIGEgZGljdCBrZXllZCBvbiBmaWxlbmFtZSB0byBzcGVlZCB1cCBhY2Nlc3MuCi0gICAgc2VsZi5maWxlc19kaWN0ID0gZGljdCgpCi0KLSAgZGVmIEFkZFRvb2xGaWxlKHNlbGYsIHBhdGgpOgotICAgICIiIkFkZHMgYSB0b29sIGZpbGUgdG8gdGhlIHByb2plY3QuCi0KLSAgICBBcmdzOgotICAgICAgcGF0aDogUmVsYXRpdmUgcGF0aCBmcm9tIHByb2plY3QgdG8gdG9vbCBmaWxlLgotICAgICIiIgotICAgIHNlbGYudG9vbF9maWxlc19zZWN0aW9uLmFwcGVuZChbJ1Rvb2xGaWxlJywgeydSZWxhdGl2ZVBhdGgnOiBwYXRofV0pCi0KLSAgZGVmIF9HZXRTcGVjRm9yQ29uZmlndXJhdGlvbihzZWxmLCBjb25maWdfdHlwZSwgY29uZmlnX25hbWUsIGF0dHJzLCB0b29scyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBjb25maWd1cmF0aW9uLgotCi0gICAgQXJnczoKLSAgICAgIGNvbmZpZ190eXBlOiBUeXBlIG9mIGNvbmZpZ3VyYXRpb24gbm9kZS4KLSAgICAgIGNvbmZpZ19uYW1lOiBDb25maWd1cmF0aW9uIG5hbWUuCi0gICAgICBhdHRyczogRGljdCBvZiBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXM7IG1heSBiZSBOb25lLgotICAgICAgdG9vbHM6IExpc3Qgb2YgdG9vbHMgKHN0cmluZ3Mgb3IgVG9vbCBvYmplY3RzKTsgbWF5IGJlIE5vbmUuCi0gICAgUmV0dXJuczoKLSAgICAiIiIKLSAgICAjIEhhbmRsZSBkZWZhdWx0cwotICAgIGlmIG5vdCBhdHRyczoKLSAgICAgIGF0dHJzID0ge30KLSAgICBpZiBub3QgdG9vbHM6Ci0gICAgICB0b29scyA9IFtdCi0KLSAgICAjIEFkZCBjb25maWd1cmF0aW9uIG5vZGUgYW5kIGl0cyBhdHRyaWJ1dGVzCi0gICAgbm9kZV9hdHRycyA9IGF0dHJzLmNvcHkoKQotICAgIG5vZGVfYXR0cnNbJ05hbWUnXSA9IGNvbmZpZ19uYW1lCi0gICAgc3BlY2lmaWNhdGlvbiA9IFtjb25maWdfdHlwZSwgbm9kZV9hdHRyc10KLQotICAgICMgQWRkIHRvb2wgbm9kZXMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMKLSAgICBpZiB0b29sczoKLSAgICAgIGZvciB0IGluIHRvb2xzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHQsIFRvb2wpOgotICAgICAgICAgIHNwZWNpZmljYXRpb24uYXBwZW5kKHQuX0dldFNwZWNpZmljYXRpb24oKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBzcGVjaWZpY2F0aW9uLmFwcGVuZChUb29sKHQpLl9HZXRTcGVjaWZpY2F0aW9uKCkpCi0gICAgcmV0dXJuIHNwZWNpZmljYXRpb24KLQotCi0gIGRlZiBBZGRDb25maWcoc2VsZiwgbmFtZSwgYXR0cnM9Tm9uZSwgdG9vbHM9Tm9uZSk6Ci0gICAgIiIiQWRkcyBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHByb2plY3QuCi0KLSAgICBBcmdzOgotICAgICAgbmFtZTogQ29uZmlndXJhdGlvbiBuYW1lLgotICAgICAgYXR0cnM6IERpY3Qgb2YgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzOyBtYXkgYmUgTm9uZS4KLSAgICAgIHRvb2xzOiBMaXN0IG9mIHRvb2xzIChzdHJpbmdzIG9yIFRvb2wgb2JqZWN0cyk7IG1heSBiZSBOb25lLgotICAgICIiIgotICAgIHNwZWMgPSBzZWxmLl9HZXRTcGVjRm9yQ29uZmlndXJhdGlvbignQ29uZmlndXJhdGlvbicsIG5hbWUsIGF0dHJzLCB0b29scykKLSAgICBzZWxmLmNvbmZpZ3VyYXRpb25zX3NlY3Rpb24uYXBwZW5kKHNwZWMpCi0KLSAgZGVmIF9BZGRGaWxlc1RvTm9kZShzZWxmLCBwYXJlbnQsIGZpbGVzKToKLSAgICAiIiJBZGRzIGZpbGVzIGFuZC9vciBmaWx0ZXJzIHRvIHRoZSBwYXJlbnQgbm9kZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXJlbnQ6IERlc3RpbmF0aW9uIG5vZGUKLSAgICAgIGZpbGVzOiBBIGxpc3Qgb2YgRmlsdGVyIG9iamVjdHMgYW5kL29yIHJlbGF0aXZlIHBhdGhzIHRvIGZpbGVzLgotCi0gICAgV2lsbCBjYWxsIGl0c2VsZiByZWN1cnNpdmVseSwgaWYgdGhlIGZpbGVzIGxpc3QgY29udGFpbnMgRmlsdGVyIG9iamVjdHMuCi0gICAgIiIiCi0gICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAgICBpZiBpc2luc3RhbmNlKGYsIEZpbHRlcik6Ci0gICAgICAgIG5vZGUgPSBbJ0ZpbHRlcicsIHsnTmFtZSc6IGYubmFtZX1dCi0gICAgICAgIHNlbGYuX0FkZEZpbGVzVG9Ob2RlKG5vZGUsIGYuY29udGVudHMpCi0gICAgICBlbHNlOgotICAgICAgICBub2RlID0gWydGaWxlJywgeydSZWxhdGl2ZVBhdGgnOiBmfV0KLSAgICAgICAgc2VsZi5maWxlc19kaWN0W2ZdID0gbm9kZQotICAgICAgcGFyZW50LmFwcGVuZChub2RlKQotCi0gIGRlZiBBZGRGaWxlcyhzZWxmLCBmaWxlcyk6Ci0gICAgIiIiQWRkcyBmaWxlcyB0byB0aGUgcHJvamVjdC4KLQotICAgIEFyZ3M6Ci0gICAgICBmaWxlczogQSBsaXN0IG9mIEZpbHRlciBvYmplY3RzIGFuZC9vciByZWxhdGl2ZSBwYXRocyB0byBmaWxlcy4KLQotICAgIFRoaXMgbWFrZXMgYSBjb3B5IG9mIHRoZSBmaWxlL2ZpbHRlciB0cmVlIGF0IHRoZSB0aW1lIG9mIHRoaXMgY2FsbC4gIElmIHlvdQotICAgIGxhdGVyIGFkZCBmaWxlcyB0byBhIEZpbHRlciBvYmplY3Qgd2hpY2ggd2FzIHBhc3NlZCBpbnRvIGEgcHJldmlvdXMgY2FsbAotICAgIHRvIEFkZEZpbGVzKCksIGl0IHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGlzIHByb2plY3QuCi0gICAgIiIiCi0gICAgc2VsZi5fQWRkRmlsZXNUb05vZGUoc2VsZi5maWxlc19zZWN0aW9uLCBmaWxlcykKLSAgICAjIFRPRE8ocnNwYW5nbGVyKSBUaGlzIGFsc28gZG9lc24ndCBoYW5kbGUgYWRkaW5nIGZpbGVzIHRvIGFuIGV4aXN0aW5nCi0gICAgIyBmaWx0ZXIuICBUaGF0IGlzLCBpdCBkb2Vzbid0IG1lcmdlIHRoZSB0cmVlcy4KLQotICBkZWYgQWRkRmlsZUNvbmZpZyhzZWxmLCBwYXRoLCBjb25maWcsIGF0dHJzPU5vbmUsIHRvb2xzPU5vbmUpOgotICAgICIiIkFkZHMgYSBjb25maWd1cmF0aW9uIHRvIGEgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBwYXRoOiBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBmaWxlLgotICAgICAgY29uZmlnOiBOYW1lIG9mIGNvbmZpZ3VyYXRpb24gdG8gYWRkLgotICAgICAgYXR0cnM6IERpY3Qgb2YgY29uZmlndXJhdGlvbiBhdHRyaWJ1dGVzOyBtYXkgYmUgTm9uZS4KLSAgICAgIHRvb2xzOiBMaXN0IG9mIHRvb2xzIChzdHJpbmdzIG9yIFRvb2wgb2JqZWN0cyk7IG1heSBiZSBOb25lLgotCi0gICAgUmFpc2VzOgotICAgICAgVmFsdWVFcnJvcjogUmVsYXRpdmUgcGF0aCBkb2VzIG5vdCBtYXRjaCBhbnkgZmlsZSBhZGRlZCB2aWEgQWRkRmlsZXMoKS4KLSAgICAiIiIKLSAgICAjIEZpbmQgdGhlIGZpbGUgbm9kZSB3aXRoIHRoZSByaWdodCByZWxhdGl2ZSBwYXRoCi0gICAgcGFyZW50ID0gc2VsZi5maWxlc19kaWN0LmdldChwYXRoKQotICAgIGlmIG5vdCBwYXJlbnQ6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdBZGRGaWxlQ29uZmlnOiBmaWxlICIlcyIgbm90IGluIHByb2plY3QuJyAlIHBhdGgpCi0KLSAgICAjIEFkZCB0aGUgY29uZmlnIHRvIHRoZSBmaWxlIG5vZGUKLSAgICBzcGVjID0gc2VsZi5fR2V0U3BlY0ZvckNvbmZpZ3VyYXRpb24oJ0ZpbGVDb25maWd1cmF0aW9uJywgY29uZmlnLCBhdHRycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMpCi0gICAgcGFyZW50LmFwcGVuZChzcGVjKQotCi0gIGRlZiBXcml0ZUlmQ2hhbmdlZChzZWxmKToKLSAgICAiIiJXcml0ZXMgdGhlIHByb2plY3QgZmlsZS4iIiIKLSAgICAjIEZpcnN0IGNyZWF0ZSBYTUwgY29udGVudCBkZWZpbml0aW9uCi0gICAgY29udGVudCA9IFsKLSAgICAgICAgJ1Zpc3VhbFN0dWRpb1Byb2plY3QnLAotICAgICAgICB7J1Byb2plY3RUeXBlJzogJ1Zpc3VhbCBDKysnLAotICAgICAgICAgJ1ZlcnNpb24nOiBzZWxmLnZlcnNpb24uUHJvamVjdFZlcnNpb24oKSwKLSAgICAgICAgICdOYW1lJzogc2VsZi5uYW1lLAotICAgICAgICAgJ1Byb2plY3RHVUlEJzogc2VsZi5ndWlkLAotICAgICAgICAgJ1Jvb3ROYW1lc3BhY2UnOiBzZWxmLm5hbWUsCi0gICAgICAgICAnS2V5d29yZCc6ICdXaW4zMlByb2onCi0gICAgICAgIH0sCi0gICAgICAgIHNlbGYucGxhdGZvcm1fc2VjdGlvbiwKLSAgICAgICAgc2VsZi50b29sX2ZpbGVzX3NlY3Rpb24sCi0gICAgICAgIHNlbGYuY29uZmlndXJhdGlvbnNfc2VjdGlvbiwKLSAgICAgICAgWydSZWZlcmVuY2VzJ10sICAjIGVtcHR5IHNlY3Rpb24KLSAgICAgICAgc2VsZi5maWxlc19zZWN0aW9uLAotICAgICAgICBbJ0dsb2JhbHMnXSAgIyBlbXB0eSBzZWN0aW9uCi0gICAgXQotICAgIGVhc3lfeG1sLldyaXRlWG1sSWZDaGFuZ2VkKGNvbnRlbnQsIHNlbGYucHJvamVjdF9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTU2V0dGluZ3MucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL01TVlNTZXR0aW5ncy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyNjM4OS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL01TVlNTZXR0aW5ncy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNDUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJDb2RlIHRvIHZhbGlkYXRlIGFuZCBjb252ZXJ0IHNldHRpbmdzIG9mIHRoZSBNaWNyb3NvZnQgYnVpbGQgdG9vbHMuCi0KLVRoaXMgZmlsZSBjb250YWlucyBjb2RlIHRvIHZhbGlkYXRlIGFuZCBjb252ZXJ0IHNldHRpbmdzIG9mIHRoZSBNaWNyb3NvZnQKLWJ1aWxkIHRvb2xzLiAgVGhlIGZ1bmN0aW9uIENvbnZlcnRUb01TQnVpbGRTZXR0aW5ncygpLCBWYWxpZGF0ZU1TVlNTZXR0aW5ncygpLAotYW5kIFZhbGlkYXRlTVNCdWlsZFNldHRpbmdzKCkgYXJlIHRoZSBlbnRyeSBwb2ludHMuCi0KLVRoaXMgZmlsZSB3YXMgY3JlYXRlZCBieSBjb21wYXJpbmcgdGhlIHByb2plY3RzIGNyZWF0ZWQgYnkgVmlzdWFsIFN0dWRpbyAyMDA4Ci1hbmQgVmlzdWFsIFN0dWRpbyAyMDEwIGZvciBhbGwgYXZhaWxhYmxlIHNldHRpbmdzIHRocm91Z2ggdGhlIHVzZXIgaW50ZXJmYWNlLgotVGhlIE1TQnVpbGQgc2NoZW1hcyB3ZXJlIGFsc28gY29uc2lkZXJlZC4gIFRoZXkgYXJlIHR5cGljYWxseSBmb3VuZCBpbiB0aGUKLU1TQnVpbGQgaW5zdGFsbCBkaXJlY3RvcnksIGUuZy4gYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNU0J1aWxkCi0iIiIKLQotaW1wb3J0IHN5cwotaW1wb3J0IHJlCi0KLSMgRGljdGlvbmFyaWVzIG9mIHNldHRpbmdzIHZhbGlkYXRvcnMuIFRoZSBrZXkgaXMgdGhlIHRvb2wgbmFtZSwgdGhlIHZhbHVlIGlzCi0jIGEgZGljdGlvbmFyeSBtYXBwaW5nIHNldHRpbmcgbmFtZXMgdG8gdmFsaWRhdGlvbiBmdW5jdGlvbnMuCi1fbXN2c192YWxpZGF0b3JzID0ge30KLV9tc2J1aWxkX3ZhbGlkYXRvcnMgPSB7fQotCi0KLSMgQSBkaWN0aW9uYXJ5IG9mIHNldHRpbmdzIGNvbnZlcnRlcnMuIFRoZSBrZXkgaXMgdGhlIHRvb2wgbmFtZSwgdGhlIHZhbHVlIGlzCi0jIGEgZGljdGlvbmFyeSBtYXBwaW5nIHNldHRpbmcgbmFtZXMgdG8gY29udmVyc2lvbiBmdW5jdGlvbnMuCi1fbXN2c190b19tc2J1aWxkX2NvbnZlcnRlcnMgPSB7fQotCi0KLSMgVG9vbCBuYW1lIG1hcHBpbmcgZnJvbSBNU1ZTIHRvIE1TQnVpbGQuCi1fbXNidWlsZF9uYW1lX29mX3Rvb2wgPSB7fQotCi0KLWNsYXNzIF9Ub29sKG9iamVjdCk6Ci0gICIiIlJlcHJlc2VudHMgYSB0b29sIHVzZWQgYnkgTVNWUyBvciBNU0J1aWxkLgotCi0gIEF0dHJpYnV0ZXM6Ci0gICAgICBtc3ZzX25hbWU6IFRoZSBuYW1lIG9mIHRoZSB0b29sIGluIE1TVlMuCi0gICAgICBtc2J1aWxkX25hbWU6IFRoZSBuYW1lIG9mIHRoZSB0b29sIGluIE1TQnVpbGQuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBtc3ZzX25hbWUsIG1zYnVpbGRfbmFtZSk6Ci0gICAgc2VsZi5tc3ZzX25hbWUgPSBtc3ZzX25hbWUKLSAgICBzZWxmLm1zYnVpbGRfbmFtZSA9IG1zYnVpbGRfbmFtZQotCi0KLWRlZiBfQWRkVG9vbCh0b29sKToKLSAgIiIiQWRkcyBhIHRvb2wgdG8gdGhlIGZvdXIgZGljdGlvbmFyaWVzIHVzZWQgdG8gcHJvY2VzcyBzZXR0aW5ncy4KLQotICBUaGlzIG9ubHkgZGVmaW5lcyB0aGUgdG9vbC4gIEVhY2ggc2V0dGluZyBhbHNvIG5lZWRzIHRvIGJlIGFkZGVkLgotCi0gIEFyZ3M6Ci0gICAgdG9vbDogVGhlIF9Ub29sIG9iamVjdCB0byBiZSBhZGRlZC4KLSAgIiIiCi0gIF9tc3ZzX3ZhbGlkYXRvcnNbdG9vbC5tc3ZzX25hbWVdID0ge30KLSAgX21zYnVpbGRfdmFsaWRhdG9yc1t0b29sLm1zYnVpbGRfbmFtZV0gPSB7fQotICBfbXN2c190b19tc2J1aWxkX2NvbnZlcnRlcnNbdG9vbC5tc3ZzX25hbWVdID0ge30KLSAgX21zYnVpbGRfbmFtZV9vZl90b29sW3Rvb2wubXN2c19uYW1lXSA9IHRvb2wubXNidWlsZF9uYW1lCi0KLQotZGVmIF9HZXRNU0J1aWxkVG9vbFNldHRpbmdzKG1zYnVpbGRfc2V0dGluZ3MsIHRvb2wpOgotICAiIiJSZXR1cm5zIGFuIE1TQnVpbGQgdG9vbCBkaWN0aW9uYXJ5LiAgQ3JlYXRlcyBpdCBpZiBuZWVkZWQuIiIiCi0gIHJldHVybiBtc2J1aWxkX3NldHRpbmdzLnNldGRlZmF1bHQodG9vbC5tc2J1aWxkX25hbWUsIHt9KQotCi0KLWNsYXNzIF9UeXBlKG9iamVjdCk6Ci0gICIiIlR5cGUgb2Ygc2V0dGluZ3MgKEJhc2UgY2xhc3MpLiIiIgotCi0gIGRlZiBWYWxpZGF0ZU1TVlMoc2VsZiwgdmFsdWUpOgotICAgICIiIlZlcmlmaWVzIHRoYXQgdGhlIHZhbHVlIGlzIGxlZ2FsIGZvciBNU1ZTLgotCi0gICAgQXJnczoKLSAgICAgIHZhbHVlOiB0aGUgdmFsdWUgdG8gY2hlY2sgZm9yIHRoaXMgdHlwZS4KLQotICAgIFJhaXNlczoKLSAgICAgIFZhbHVlRXJyb3IgaWYgdmFsdWUgaXMgbm90IHZhbGlkIGZvciBNU1ZTLgotICAgICIiIgotCi0gIGRlZiBWYWxpZGF0ZU1TQnVpbGQoc2VsZiwgdmFsdWUpOgotICAgICIiIlZlcmlmaWVzIHRoYXQgdGhlIHZhbHVlIGlzIGxlZ2FsIGZvciBNU0J1aWxkLgotCi0gICAgQXJnczoKLSAgICAgIHZhbHVlOiB0aGUgdmFsdWUgdG8gY2hlY2sgZm9yIHRoaXMgdHlwZS4KLQotICAgIFJhaXNlczoKLSAgICAgIFZhbHVlRXJyb3IgaWYgdmFsdWUgaXMgbm90IHZhbGlkIGZvciBNU0J1aWxkLgotICAgICIiIgotCi0gIGRlZiBDb252ZXJ0VG9NU0J1aWxkKHNlbGYsIHZhbHVlKToKLSAgICAiIiJSZXR1cm5zIHRoZSBNU0J1aWxkIGVxdWl2YWxlbnQgb2YgdGhlIE1TVlMgdmFsdWUgZ2l2ZW4uCi0KLSAgICBBcmdzOgotICAgICAgdmFsdWU6IHRoZSBNU1ZTIHZhbHVlIHRvIGNvbnZlcnQuCi0KLSAgICBSZXR1cm5zOgotICAgICAgdGhlIE1TQnVpbGQgZXF1aXZhbGVudC4KLQotICAgIFJhaXNlczoKLSAgICAgIFZhbHVlRXJyb3IgaWYgdmFsdWUgaXMgbm90IHZhbGlkLgotICAgICIiIgotICAgIHJldHVybiB2YWx1ZQotCi0KLWNsYXNzIF9TdHJpbmcoX1R5cGUpOgotICAiIiJBIHNldHRpbmcgdGhhdCdzIGp1c3QgYSBzdHJpbmcuIiIiCi0KLSAgZGVmIFZhbGlkYXRlTVNWUyhzZWxmLCB2YWx1ZSk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhwZWN0ZWQgc3RyaW5nOyBnb3QgJXInICUgdmFsdWUpCi0KLSAgZGVmIFZhbGlkYXRlTVNCdWlsZChzZWxmLCB2YWx1ZSk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhwZWN0ZWQgc3RyaW5nOyBnb3QgJXInICUgdmFsdWUpCi0KLSAgZGVmIENvbnZlcnRUb01TQnVpbGQoc2VsZiwgdmFsdWUpOgotICAgICMgQ29udmVydCB0aGUgbWFjcm9zCi0gICAgcmV0dXJuIENvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZCh2YWx1ZSkKLQotCi1jbGFzcyBfU3RyaW5nTGlzdChfVHlwZSk6Ci0gICIiIkEgc2V0dGluZ3MgdGhhdCdzIGEgbGlzdCBvZiBzdHJpbmdzLiIiIgotCi0gIGRlZiBWYWxpZGF0ZU1TVlMoc2VsZiwgdmFsdWUpOgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKSBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhwZWN0ZWQgc3RyaW5nIGxpc3Q7IGdvdCAlcicgJSB2YWx1ZSkKLQotICBkZWYgVmFsaWRhdGVNU0J1aWxkKHNlbGYsIHZhbHVlKToKLSAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZykgYW5kIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2V4cGVjdGVkIHN0cmluZyBsaXN0OyBnb3QgJXInICUgdmFsdWUpCi0KLSAgZGVmIENvbnZlcnRUb01TQnVpbGQoc2VsZiwgdmFsdWUpOgotICAgICMgQ29udmVydCB0aGUgbWFjcm9zCi0gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6Ci0gICAgICByZXR1cm4gW0NvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZChpKSBmb3IgaSBpbiB2YWx1ZV0KLSAgICBlbHNlOgotICAgICAgcmV0dXJuIENvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZCh2YWx1ZSkKLQotCi1jbGFzcyBfQm9vbGVhbihfVHlwZSk6Ci0gICIiIkJvb2xlYW4gc2V0dGluZ3MsIGNhbiBoYXZlIHRoZSB2YWx1ZXMgJ2ZhbHNlJyBvciAndHJ1ZScuIiIiCi0KLSAgZGVmIF9WYWxpZGF0ZShzZWxmLCB2YWx1ZSk6Ci0gICAgaWYgdmFsdWUgIT0gJ3RydWUnIGFuZCB2YWx1ZSAhPSAnZmFsc2UnOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhwZWN0ZWQgYm9vbDsgZ290ICVyJyAlIHZhbHVlKQotCi0gIGRlZiBWYWxpZGF0ZU1TVlMoc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuX1ZhbGlkYXRlKHZhbHVlKQotCi0gIGRlZiBWYWxpZGF0ZU1TQnVpbGQoc2VsZiwgdmFsdWUpOgotICAgIHNlbGYuX1ZhbGlkYXRlKHZhbHVlKQotCi0gIGRlZiBDb252ZXJ0VG9NU0J1aWxkKHNlbGYsIHZhbHVlKToKLSAgICBzZWxmLl9WYWxpZGF0ZSh2YWx1ZSkKLSAgICByZXR1cm4gdmFsdWUKLQotCi1jbGFzcyBfSW50ZWdlcihfVHlwZSk6Ci0gICIiIkludGVnZXIgc2V0dGluZ3MuIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIG1zYnVpbGRfYmFzZT0xMCk6Ci0gICAgX1R5cGUuX19pbml0X18oc2VsZikKLSAgICBzZWxmLl9tc2J1aWxkX2Jhc2UgPSBtc2J1aWxkX2Jhc2UKLQotICBkZWYgVmFsaWRhdGVNU1ZTKHNlbGYsIHZhbHVlKToKLSAgICAjIFRyeSB0byBjb252ZXJ0LCB0aGlzIHdpbGwgcmFpc2UgVmFsdWVFcnJvciBpZiBpbnZhbGlkLgotICAgIHNlbGYuQ29udmVydFRvTVNCdWlsZCh2YWx1ZSkKLQotICBkZWYgVmFsaWRhdGVNU0J1aWxkKHNlbGYsIHZhbHVlKToKLSAgICAjIFRyeSB0byBjb252ZXJ0LCB0aGlzIHdpbGwgcmFpc2UgVmFsdWVFcnJvciBpZiBpbnZhbGlkLgotICAgIGludCh2YWx1ZSwgc2VsZi5fbXNidWlsZF9iYXNlKQotCi0gIGRlZiBDb252ZXJ0VG9NU0J1aWxkKHNlbGYsIHZhbHVlKToKLSAgICBtc2J1aWxkX2Zvcm1hdCA9IChzZWxmLl9tc2J1aWxkX2Jhc2UgPT0gMTApIGFuZCAnJWQnIG9yICcweCUwNHgnCi0gICAgcmV0dXJuIG1zYnVpbGRfZm9ybWF0ICUgaW50KHZhbHVlKQotCi0KLWNsYXNzIF9FbnVtZXJhdGlvbihfVHlwZSk6Ci0gICIiIlR5cGUgb2Ygc2V0dGluZ3MgdGhhdCBpcyBhbiBlbnVtZXJhdGlvbi4KLQotICBJbiBNU1ZTLCB0aGUgdmFsdWVzIGFyZSBpbmRleGVzIGxpa2UgJzAnLCAnMScsIGFuZCAnMicuCi0gIE1TQnVpbGQgdXNlcyB0ZXh0IGxhYmVscyB0aGF0IGFyZSBtb3JlIHJlcHJlc2VudGF0aXZlLCBsaWtlICdXaW4zMicuCi0KLSAgQ29uc3RydWN0b3IgYXJnczoKLSAgICBsYWJlbF9saXN0OiBhbiBhcnJheSBvZiBNU0J1aWxkIGxhYmVscyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIE1TVlMgaW5kZXguCi0gICAgICAgIEluIHRoZSByYXJlIGNhc2VzIHdoZXJlIE1TVlMgaGFzIHNraXBwZWQgYW4gaW5kZXggdmFsdWUsIE5vbmUgaXMKLSAgICAgICAgdXNlZCBpbiB0aGUgYXJyYXkgdG8gaW5kaWNhdGUgdGhlIHVudXNlZCBzcG90LgotICAgIG5ldzogYW4gYXJyYXkgb2YgbGFiZWxzIHRoYXQgYXJlIG5ldyB0byBNU0J1aWxkLgotICAiIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWxfbGlzdCwgbmV3PU5vbmUpOgotICAgIF9UeXBlLl9faW5pdF9fKHNlbGYpCi0gICAgc2VsZi5fbGFiZWxfbGlzdCA9IGxhYmVsX2xpc3QKLSAgICBzZWxmLl9tc2J1aWxkX3ZhbHVlcyA9IHNldCh2YWx1ZSBmb3IgdmFsdWUgaW4gbGFiZWxfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lKQotICAgIGlmIG5ldyBpcyBub3QgTm9uZToKLSAgICAgIHNlbGYuX21zYnVpbGRfdmFsdWVzLnVwZGF0ZShuZXcpCi0KLSAgZGVmIFZhbGlkYXRlTVNWUyhzZWxmLCB2YWx1ZSk6Ci0gICAgIyBUcnkgdG8gY29udmVydC4gIEl0IHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIG5vdCB2YWxpZC4KLSAgICBzZWxmLkNvbnZlcnRUb01TQnVpbGQodmFsdWUpCi0KLSAgZGVmIFZhbGlkYXRlTVNCdWlsZChzZWxmLCB2YWx1ZSk6Ci0gICAgaWYgdmFsdWUgbm90IGluIHNlbGYuX21zYnVpbGRfdmFsdWVzOgotICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5yZWNvZ25pemVkIGVudW1lcmF0ZWQgdmFsdWUgJXMnICUgdmFsdWUpCi0KLSAgZGVmIENvbnZlcnRUb01TQnVpbGQoc2VsZiwgdmFsdWUpOgotICAgIGluZGV4ID0gaW50KHZhbHVlKQotICAgIGlmIGluZGV4IDwgMCBvciBpbmRleCA+PSBsZW4oc2VsZi5fbGFiZWxfbGlzdCk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbmRleCB2YWx1ZSAoJWQpIG5vdCBpbiBleHBlY3RlZCByYW5nZSBbMCwgJWQpJyAlCi0gICAgICAgICAgICAgICAgICAgICAgIChpbmRleCwgbGVuKHNlbGYuX2xhYmVsX2xpc3QpKSkKLSAgICBsYWJlbCA9IHNlbGYuX2xhYmVsX2xpc3RbaW5kZXhdCi0gICAgaWYgbGFiZWwgaXMgTm9uZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2NvbnZlcnRlZCB2YWx1ZSBmb3IgJXMgbm90IHNwZWNpZmllZC4nICUgdmFsdWUpCi0gICAgcmV0dXJuIGxhYmVsCi0KLQotIyBJbnN0YW50aWF0ZSB0aGUgdmFyaW91cyBnZW5lcmljIHR5cGVzLgotX2Jvb2xlYW4gPSBfQm9vbGVhbigpCi1faW50ZWdlciA9IF9JbnRlZ2VyKCkKLSMgRm9yIG5vdywgd2UgZG9uJ3QgZG8gYW55IHNwZWNpYWwgdmFsaWRhdGlvbiBvbiB0aGVzZSB0eXBlczoKLV9zdHJpbmcgPSBfU3RyaW5nKCkKLV9maWxlX25hbWUgPSBfU3RyaW5nKCkKLV9mb2xkZXJfbmFtZSA9IF9TdHJpbmcoKQotX2ZpbGVfbGlzdCA9IF9TdHJpbmdMaXN0KCkKLV9mb2xkZXJfbGlzdCA9IF9TdHJpbmdMaXN0KCkKLV9zdHJpbmdfbGlzdCA9IF9TdHJpbmdMaXN0KCkKLSMgU29tZSBib29sZWFuIHNldHRpbmdzIHdlbnQgZnJvbSBudW1lcmljYWwgdmFsdWVzIHRvIGJvb2xlYW4uICBUaGUKLSMgbWFwcGluZyBpcyAwOiBkZWZhdWx0LCAxOiBmYWxzZSwgMjogdHJ1ZS4KLV9uZXdseV9ib29sZWFuID0gX0VudW1lcmF0aW9uKFsnJywgJ2ZhbHNlJywgJ3RydWUnXSkKLQotCi1kZWYgX1NhbWUodG9vbCwgbmFtZSwgc2V0dGluZ190eXBlKToKLSAgIiIiRGVmaW5lcyBhIHNldHRpbmcgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZSBpbiBNU1ZTIGFuZCBNU0J1aWxkLgotCi0gIEFyZ3M6Ci0gICAgdG9vbDogYSBkaWN0aW9uYXJ5IHRoYXQgZ2l2ZXMgdGhlIG5hbWVzIG9mIHRoZSB0b29sIGZvciBNU1ZTIGFuZCBNU0J1aWxkLgotICAgIG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nLgotICAgIHNldHRpbmdfdHlwZTogdGhlIHR5cGUgb2YgdGhpcyBzZXR0aW5nLgotICAiIiIKLSAgX1JlbmFtZWQodG9vbCwgbmFtZSwgbmFtZSwgc2V0dGluZ190eXBlKQotCi0KLWRlZiBfUmVuYW1lZCh0b29sLCBtc3ZzX25hbWUsIG1zYnVpbGRfbmFtZSwgc2V0dGluZ190eXBlKToKLSAgIiIiRGVmaW5lcyBhIHNldHRpbmcgZm9yIHdoaWNoIHRoZSBuYW1lIGhhcyBjaGFuZ2VkLgotCi0gIEFyZ3M6Ci0gICAgdG9vbDogYSBkaWN0aW9uYXJ5IHRoYXQgZ2l2ZXMgdGhlIG5hbWVzIG9mIHRoZSB0b29sIGZvciBNU1ZTIGFuZCBNU0J1aWxkLgotICAgIG1zdnNfbmFtZTogdGhlIG5hbWUgb2YgdGhlIE1TVlMgc2V0dGluZy4KLSAgICBtc2J1aWxkX25hbWU6IHRoZSBuYW1lIG9mIHRoZSBNU0J1aWxkIHNldHRpbmcuCi0gICAgc2V0dGluZ190eXBlOiB0aGUgdHlwZSBvZiB0aGlzIHNldHRpbmcuCi0gICIiIgotCi0gIGRlZiBfVHJhbnNsYXRlKHZhbHVlLCBtc2J1aWxkX3NldHRpbmdzKToKLSAgICBtc2J1aWxkX3Rvb2xfc2V0dGluZ3MgPSBfR2V0TVNCdWlsZFRvb2xTZXR0aW5ncyhtc2J1aWxkX3NldHRpbmdzLCB0b29sKQotICAgIG1zYnVpbGRfdG9vbF9zZXR0aW5nc1ttc2J1aWxkX25hbWVdID0gc2V0dGluZ190eXBlLkNvbnZlcnRUb01TQnVpbGQodmFsdWUpCi0KLSAgX21zdnNfdmFsaWRhdG9yc1t0b29sLm1zdnNfbmFtZV1bbXN2c19uYW1lXSA9IHNldHRpbmdfdHlwZS5WYWxpZGF0ZU1TVlMKLSAgX21zYnVpbGRfdmFsaWRhdG9yc1t0b29sLm1zYnVpbGRfbmFtZV1bbXNidWlsZF9uYW1lXSA9ICgKLSAgICAgIHNldHRpbmdfdHlwZS5WYWxpZGF0ZU1TQnVpbGQpCi0gIF9tc3ZzX3RvX21zYnVpbGRfY29udmVydGVyc1t0b29sLm1zdnNfbmFtZV1bbXN2c19uYW1lXSA9IF9UcmFuc2xhdGUKLQotCi1kZWYgX01vdmVkKHRvb2wsIHNldHRpbmdzX25hbWUsIG1zYnVpbGRfdG9vbF9uYW1lLCBzZXR0aW5nX3R5cGUpOgotICBfTW92ZWRBbmRSZW5hbWVkKHRvb2wsIHNldHRpbmdzX25hbWUsIG1zYnVpbGRfdG9vbF9uYW1lLCBzZXR0aW5nc19uYW1lLAotICAgICAgICAgICAgICAgICAgIHNldHRpbmdfdHlwZSkKLQotCi1kZWYgX01vdmVkQW5kUmVuYW1lZCh0b29sLCBtc3ZzX3NldHRpbmdzX25hbWUsIG1zYnVpbGRfdG9vbF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgbXNidWlsZF9zZXR0aW5nc19uYW1lLCBzZXR0aW5nX3R5cGUpOgotICAiIiJEZWZpbmVzIGEgc2V0dGluZyB0aGF0IG1heSBoYXZlIG1vdmVkIHRvIGEgbmV3IHNlY3Rpb24uCi0KLSAgQXJnczoKLSAgICB0b29sOiBhIGRpY3Rpb25hcnkgdGhhdCBnaXZlcyB0aGUgbmFtZXMgb2YgdGhlIHRvb2wgZm9yIE1TVlMgYW5kIE1TQnVpbGQuCi0gICAgbXN2c19zZXR0aW5nc19uYW1lOiB0aGUgTVNWUyBuYW1lIG9mIHRoZSBzZXR0aW5nLgotICAgIG1zYnVpbGRfdG9vbF9uYW1lOiB0aGUgbmFtZSBvZiB0aGUgTVNCdWlsZCB0b29sIHRvIHBsYWNlIHRoZSBzZXR0aW5nIHVuZGVyLgotICAgIG1zYnVpbGRfc2V0dGluZ3NfbmFtZTogdGhlIE1TQnVpbGQgbmFtZSBvZiB0aGUgc2V0dGluZy4KLSAgICBzZXR0aW5nX3R5cGU6IHRoZSB0eXBlIG9mIHRoaXMgc2V0dGluZy4KLSAgIiIiCi0KLSAgZGVmIF9UcmFuc2xhdGUodmFsdWUsIG1zYnVpbGRfc2V0dGluZ3MpOgotICAgIHRvb2xfc2V0dGluZ3MgPSBtc2J1aWxkX3NldHRpbmdzLnNldGRlZmF1bHQobXNidWlsZF90b29sX25hbWUsIHt9KQotICAgIHRvb2xfc2V0dGluZ3NbbXNidWlsZF9zZXR0aW5nc19uYW1lXSA9IHNldHRpbmdfdHlwZS5Db252ZXJ0VG9NU0J1aWxkKHZhbHVlKQotCi0gIF9tc3ZzX3ZhbGlkYXRvcnNbdG9vbC5tc3ZzX25hbWVdW21zdnNfc2V0dGluZ3NfbmFtZV0gPSAoCi0gICAgICBzZXR0aW5nX3R5cGUuVmFsaWRhdGVNU1ZTKQotICB2YWxpZGF0b3IgPSBzZXR0aW5nX3R5cGUuVmFsaWRhdGVNU0J1aWxkCi0gIF9tc2J1aWxkX3ZhbGlkYXRvcnNbbXNidWlsZF90b29sX25hbWVdW21zYnVpbGRfc2V0dGluZ3NfbmFtZV0gPSB2YWxpZGF0b3IKLSAgX21zdnNfdG9fbXNidWlsZF9jb252ZXJ0ZXJzW3Rvb2wubXN2c19uYW1lXVttc3ZzX3NldHRpbmdzX25hbWVdID0gX1RyYW5zbGF0ZQotCi0KLWRlZiBfTVNWU09ubHkodG9vbCwgbmFtZSwgc2V0dGluZ190eXBlKToKLSAgIiIiRGVmaW5lcyBhIHNldHRpbmcgdGhhdCBpcyBvbmx5IGZvdW5kIGluIE1TVlMuCi0KLSAgQXJnczoKLSAgICB0b29sOiBhIGRpY3Rpb25hcnkgdGhhdCBnaXZlcyB0aGUgbmFtZXMgb2YgdGhlIHRvb2wgZm9yIE1TVlMgYW5kIE1TQnVpbGQuCi0gICAgbmFtZTogdGhlIG5hbWUgb2YgdGhlIHNldHRpbmcuCi0gICAgc2V0dGluZ190eXBlOiB0aGUgdHlwZSBvZiB0aGlzIHNldHRpbmcuCi0gICIiIgotCi0gIGRlZiBfVHJhbnNsYXRlKHVudXNlZF92YWx1ZSwgdW51c2VkX21zYnVpbGRfc2V0dGluZ3MpOgotICAgICMgU2luY2UgdGhpcyBpcyBmb3IgTVNWUyBvbmx5IHNldHRpbmdzLCBubyB0cmFuc2xhdGlvbiB3aWxsIGhhcHBlbi4KLSAgICBwYXNzCi0KLSAgX21zdnNfdmFsaWRhdG9yc1t0b29sLm1zdnNfbmFtZV1bbmFtZV0gPSBzZXR0aW5nX3R5cGUuVmFsaWRhdGVNU1ZTCi0gIF9tc3ZzX3RvX21zYnVpbGRfY29udmVydGVyc1t0b29sLm1zdnNfbmFtZV1bbmFtZV0gPSBfVHJhbnNsYXRlCi0KLQotZGVmIF9NU0J1aWxkT25seSh0b29sLCBuYW1lLCBzZXR0aW5nX3R5cGUpOgotICAiIiJEZWZpbmVzIGEgc2V0dGluZyB0aGF0IGlzIG9ubHkgZm91bmQgaW4gTVNCdWlsZC4KLQotICBBcmdzOgotICAgIHRvb2w6IGEgZGljdGlvbmFyeSB0aGF0IGdpdmVzIHRoZSBuYW1lcyBvZiB0aGUgdG9vbCBmb3IgTVNWUyBhbmQgTVNCdWlsZC4KLSAgICBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgc2V0dGluZy4KLSAgICBzZXR0aW5nX3R5cGU6IHRoZSB0eXBlIG9mIHRoaXMgc2V0dGluZy4KLSAgIiIiCi0gIF9tc2J1aWxkX3ZhbGlkYXRvcnNbdG9vbC5tc2J1aWxkX25hbWVdW25hbWVdID0gc2V0dGluZ190eXBlLlZhbGlkYXRlTVNCdWlsZAotCi0KLWRlZiBfQ29udmVydGVkVG9BZGRpdGlvbmFsT3B0aW9uKHRvb2wsIG1zdnNfbmFtZSwgZmxhZyk6Ci0gICIiIkRlZmluZXMgYSBzZXR0aW5nIHRoYXQncyBoYW5kbGVkIHZpYSBhIGNvbW1hbmQgbGluZSBvcHRpb24gaW4gTVNCdWlsZC4KLQotICBBcmdzOgotICAgIHRvb2w6IGEgZGljdGlvbmFyeSB0aGF0IGdpdmVzIHRoZSBuYW1lcyBvZiB0aGUgdG9vbCBmb3IgTVNWUyBhbmQgTVNCdWlsZC4KLSAgICBtc3ZzX25hbWU6IHRoZSBuYW1lIG9mIHRoZSBNU1ZTIHNldHRpbmcgdGhhdCBpZiAndHJ1ZScgYmVjb21lcyBhIGZsYWcKLSAgICBmbGFnOiB0aGUgZmxhZyB0byBpbnNlcnQgYXQgdGhlIGVuZCBvZiB0aGUgQWRkaXRpb25hbE9wdGlvbnMKLSAgIiIiCi0KLSAgZGVmIF9UcmFuc2xhdGUodmFsdWUsIG1zYnVpbGRfc2V0dGluZ3MpOgotICAgIGlmIHZhbHVlID09ICd0cnVlJzoKLSAgICAgIHRvb2xfc2V0dGluZ3MgPSBfR2V0TVNCdWlsZFRvb2xTZXR0aW5ncyhtc2J1aWxkX3NldHRpbmdzLCB0b29sKQotICAgICAgaWYgJ0FkZGl0aW9uYWxPcHRpb25zJyBpbiB0b29sX3NldHRpbmdzOgotICAgICAgICBuZXdfZmxhZ3MgPSAnJXMgJXMnICUgKHRvb2xfc2V0dGluZ3NbJ0FkZGl0aW9uYWxPcHRpb25zJ10sIGZsYWcpCi0gICAgICBlbHNlOgotICAgICAgICBuZXdfZmxhZ3MgPSBmbGFnCi0gICAgICB0b29sX3NldHRpbmdzWydBZGRpdGlvbmFsT3B0aW9ucyddID0gbmV3X2ZsYWdzCi0gIF9tc3ZzX3ZhbGlkYXRvcnNbdG9vbC5tc3ZzX25hbWVdW21zdnNfbmFtZV0gPSBfYm9vbGVhbi5WYWxpZGF0ZU1TVlMKLSAgX21zdnNfdG9fbXNidWlsZF9jb252ZXJ0ZXJzW3Rvb2wubXN2c19uYW1lXVttc3ZzX25hbWVdID0gX1RyYW5zbGF0ZQotCi0KLWRlZiBfQ3VzdG9tR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlKHRvb2wsIG1zdnNfbmFtZSk6Ci0gIGRlZiBfVHJhbnNsYXRlKHZhbHVlLCBtc2J1aWxkX3NldHRpbmdzKToKLSAgICB0b29sX3NldHRpbmdzID0gX0dldE1TQnVpbGRUb29sU2V0dGluZ3MobXNidWlsZF9zZXR0aW5ncywgdG9vbCkKLSAgICBpZiB2YWx1ZSA9PSAnMCc6Ci0gICAgICB0b29sX3NldHRpbmdzWydQcmVwcm9jZXNzVG9GaWxlJ10gPSAnZmFsc2UnCi0gICAgICB0b29sX3NldHRpbmdzWydQcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycyddID0gJ2ZhbHNlJwotICAgIGVsaWYgdmFsdWUgPT0gJzEnOiAgIyAvUAotICAgICAgdG9vbF9zZXR0aW5nc1snUHJlcHJvY2Vzc1RvRmlsZSddID0gJ3RydWUnCi0gICAgICB0b29sX3NldHRpbmdzWydQcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycyddID0gJ2ZhbHNlJwotICAgIGVsaWYgdmFsdWUgPT0gJzInOiAgIyAvRVAgL1AKLSAgICAgIHRvb2xfc2V0dGluZ3NbJ1ByZXByb2Nlc3NUb0ZpbGUnXSA9ICd0cnVlJwotICAgICAgdG9vbF9zZXR0aW5nc1snUHJlcHJvY2Vzc1N1cHByZXNzTGluZU51bWJlcnMnXSA9ICd0cnVlJwotICAgIGVsc2U6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCd2YWx1ZSBtdXN0IGJlIG9uZSBvZiBbMCwgMSwgMl07IGdvdCAlcycgJSB2YWx1ZSkKLSAgIyBDcmVhdGUgYSBib2d1cyB2YWxpZGF0b3IgdGhhdCBsb29rcyBmb3IgJzAnLCAnMScsIG9yICcyJwotICBtc3ZzX3ZhbGlkYXRvciA9IF9FbnVtZXJhdGlvbihbJ2EnLCAnYicsICdjJ10pLlZhbGlkYXRlTVNWUwotICBfbXN2c192YWxpZGF0b3JzW3Rvb2wubXN2c19uYW1lXVttc3ZzX25hbWVdID0gbXN2c192YWxpZGF0b3IKLSAgbXNidWlsZF92YWxpZGF0b3IgPSBfYm9vbGVhbi5WYWxpZGF0ZU1TQnVpbGQKLSAgbXNidWlsZF90b29sX3ZhbGlkYXRvcnMgPSBfbXNidWlsZF92YWxpZGF0b3JzW3Rvb2wubXNidWlsZF9uYW1lXQotICBtc2J1aWxkX3Rvb2xfdmFsaWRhdG9yc1snUHJlcHJvY2Vzc1RvRmlsZSddID0gbXNidWlsZF92YWxpZGF0b3IKLSAgbXNidWlsZF90b29sX3ZhbGlkYXRvcnNbJ1ByZXByb2Nlc3NTdXBwcmVzc0xpbmVOdW1iZXJzJ10gPSBtc2J1aWxkX3ZhbGlkYXRvcgotICBfbXN2c190b19tc2J1aWxkX2NvbnZlcnRlcnNbdG9vbC5tc3ZzX25hbWVdW21zdnNfbmFtZV0gPSBfVHJhbnNsYXRlCi0KLQotZml4X3ZjX21hY3JvX3NsYXNoZXNfcmVnZXhfbGlzdCA9ICgnSW50RGlyJywgJ091dERpcicpCi1maXhfdmNfbWFjcm9fc2xhc2hlc19yZWdleCA9IHJlLmNvbXBpbGUoCi0gIHInKFwkXCgoPzolcylcKSkoPzpbXFwvXSspJyAlICJ8Ii5qb2luKGZpeF92Y19tYWNyb19zbGFzaGVzX3JlZ2V4X2xpc3QpCi0pCi0KLWRlZiBGaXhWQ01hY3JvU2xhc2hlcyhzKToKLSAgIiIiUmVwbGFjZSBtYWNyb3Mgd2hpY2ggaGF2ZSBleGNlc3NpdmUgZm9sbG93aW5nIHNsYXNoZXMuCi0KLSAgVGhlc2UgbWFjcm9zIGFyZSBrbm93biB0byBoYXZlIGEgYnVpbHQtaW4gdHJhaWxpbmcgc2xhc2guIEZ1cnRoZXJtb3JlLCBtYW55Ci0gIHNjcmlwdHMgaGljY3VwIG9uIHByb2Nlc3NpbmcgcGF0aHMgd2l0aCBleHRyYSBzbGFzaGVzIGluIHRoZSBtaWRkbGUuCi0KLSAgVGhpcyBsaXN0IGlzIHByb2JhYmx5IG5vdCBleGhhdXN0aXZlLiAgQWRkIGFzIG5lZWRlZC4KLSAgIiIiCi0gIGlmICckJyBpbiBzOgotICAgIHMgPSBmaXhfdmNfbWFjcm9fc2xhc2hlc19yZWdleC5zdWIocidcMScsIHMpCi0gIHJldHVybiBzCi0KLQotZGVmIENvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZChzKToKLSAgIiIiQ29udmVydCB0aGUgdGhlIE1TVlMgbWFjcm9zIGZvdW5kIGluIHRoZSBzdHJpbmcgdG8gdGhlIE1TQnVpbGQgZXF1aXZhbGVudC4KLQotICBUaGlzIGxpc3QgaXMgcHJvYmFibHkgbm90IGV4aGF1c3RpdmUuICBBZGQgYXMgbmVlZGVkLgotICAiIiIKLSAgaWYgJyQnIGluIHM6Ci0gICAgcmVwbGFjZV9tYXAgPSB7Ci0gICAgICAgICckKENvbmZpZ3VyYXRpb25OYW1lKSc6ICckKENvbmZpZ3VyYXRpb24pJywKLSAgICAgICAgJyQoSW5wdXREaXIpJzogJyUoUm9vdERpciklKERpcmVjdG9yeSknLAotICAgICAgICAnJChJbnB1dEV4dCknOiAnJShFeHRlbnNpb24pJywKLSAgICAgICAgJyQoSW5wdXRGaWxlTmFtZSknOiAnJShGaWxlbmFtZSklKEV4dGVuc2lvbiknLAotICAgICAgICAnJChJbnB1dE5hbWUpJzogJyUoRmlsZW5hbWUpJywKLSAgICAgICAgJyQoSW5wdXRQYXRoKSc6ICclKEZ1bGxQYXRoKScsCi0gICAgICAgICckKFBhcmVudE5hbWUpJzogJyQoUHJvamVjdEZpbGVOYW1lKScsCi0gICAgICAgICckKFBsYXRmb3JtTmFtZSknOiAnJChQbGF0Zm9ybSknLAotICAgICAgICAnJChTYWZlSW5wdXROYW1lKSc6ICclKEZpbGVuYW1lKScsCi0gICAgfQotICAgIGZvciBvbGQsIG5ldyBpbiByZXBsYWNlX21hcC5pdGVyaXRlbXMoKToKLSAgICAgIHMgPSBzLnJlcGxhY2Uob2xkLCBuZXcpCi0gICAgcyA9IEZpeFZDTWFjcm9TbGFzaGVzKHMpCi0gIHJldHVybiBzCi0KLQotZGVmIENvbnZlcnRUb01TQnVpbGRTZXR0aW5ncyhtc3ZzX3NldHRpbmdzLCBzdGRlcnI9c3lzLnN0ZGVycik6Ci0gICIiIkNvbnZlcnRzIE1TVlMgc2V0dGluZ3MgKFZTMjAwOCBhbmQgZWFybGllcikgdG8gTVNCdWlsZCBzZXR0aW5ncyAoVlMyMDEwKykuCi0KLSAgQXJnczoKLSAgICAgIG1zdnNfc2V0dGluZ3M6IEEgZGljdGlvbmFyeS4gIFRoZSBrZXkgaXMgdGhlIHRvb2wgbmFtZS4gIFRoZSB2YWx1ZXMgYXJlCi0gICAgICAgICAgdGhlbXNlbHZlcyBkaWN0aW9uYXJpZXMgb2Ygc2V0dGluZ3MgYW5kIHRoZWlyIHZhbHVlcy4KLSAgICAgIHN0ZGVycjogVGhlIHN0cmVhbSByZWNlaXZpbmcgdGhlIGVycm9yIG1lc3NhZ2VzLgotCi0gIFJldHVybnM6Ci0gICAgICBBIGRpY3Rpb25hcnkgb2YgTVNCdWlsZCBzZXR0aW5ncy4gIFRoZSBrZXkgaXMgZWl0aGVyIHRoZSBNU0J1aWxkIHRvb2wgbmFtZQotICAgICAgb3IgdGhlIGVtcHR5IHN0cmluZyAoZm9yIHRoZSBnbG9iYWwgc2V0dGluZ3MpLiAgVGhlIHZhbHVlcyBhcmUgdGhlbXNlbHZlcwotICAgICAgZGljdGlvbmFyaWVzIG9mIHNldHRpbmdzIGFuZCB0aGVpciB2YWx1ZXMuCi0gICIiIgotICBtc2J1aWxkX3NldHRpbmdzID0ge30KLSAgZm9yIG1zdnNfdG9vbF9uYW1lLCBtc3ZzX3Rvb2xfc2V0dGluZ3MgaW4gbXN2c19zZXR0aW5ncy5pdGVyaXRlbXMoKToKLSAgICBpZiBtc3ZzX3Rvb2xfbmFtZSBpbiBfbXN2c190b19tc2J1aWxkX2NvbnZlcnRlcnM6Ci0gICAgICBtc3ZzX3Rvb2wgPSBfbXN2c190b19tc2J1aWxkX2NvbnZlcnRlcnNbbXN2c190b29sX25hbWVdCi0gICAgICBmb3IgbXN2c19zZXR0aW5nLCBtc3ZzX3ZhbHVlIGluIG1zdnNfdG9vbF9zZXR0aW5ncy5pdGVyaXRlbXMoKToKLSAgICAgICAgaWYgbXN2c19zZXR0aW5nIGluIG1zdnNfdG9vbDoKLSAgICAgICAgICAjIEludm9rZSB0aGUgdHJhbnNsYXRpb24gZnVuY3Rpb24uCi0gICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXN2c190b29sW21zdnNfc2V0dGluZ10obXN2c192YWx1ZSwgbXNidWlsZF9zZXR0aW5ncykKLSAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHByaW50ID4+IHN0ZGVyciwgKCdXYXJuaW5nOiB3aGlsZSBjb252ZXJ0aW5nICVzLyVzIHRvIE1TQnVpbGQsICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcycgJSAobXN2c190b29sX25hbWUsIG1zdnNfc2V0dGluZywgZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIyBXZSBkb24ndCBrbm93IHRoaXMgc2V0dGluZy4gIEdpdmUgYSB3YXJuaW5nLgotICAgICAgICAgIHByaW50ID4+IHN0ZGVyciwgKCdXYXJuaW5nOiB1bnJlY29nbml6ZWQgc2V0dGluZyAlcy8lcyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaWxlIGNvbnZlcnRpbmcgdG8gTVNCdWlsZC4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobXN2c190b29sX25hbWUsIG1zdnNfc2V0dGluZykpCi0gICAgZWxzZToKLSAgICAgIHByaW50ID4+IHN0ZGVyciwgKCdXYXJuaW5nOiB1bnJlY29nbml6ZWQgdG9vbCAlcyB3aGlsZSBjb252ZXJ0aW5nIHRvICcKLSAgICAgICAgICAgICAgICAgICAgICAgICdNU0J1aWxkLicgJSBtc3ZzX3Rvb2xfbmFtZSkKLSAgcmV0dXJuIG1zYnVpbGRfc2V0dGluZ3MKLQotCi1kZWYgVmFsaWRhdGVNU1ZTU2V0dGluZ3Moc2V0dGluZ3MsIHN0ZGVycj1zeXMuc3RkZXJyKToKLSAgIiIiVmFsaWRhdGVzIHRoYXQgdGhlIG5hbWVzIG9mIHRoZSBzZXR0aW5ncyBhcmUgdmFsaWQgZm9yIE1TVlMuCi0KLSAgQXJnczoKLSAgICAgIHNldHRpbmdzOiBBIGRpY3Rpb25hcnkuICBUaGUga2V5IGlzIHRoZSB0b29sIG5hbWUuICBUaGUgdmFsdWVzIGFyZQotICAgICAgICAgIHRoZW1zZWx2ZXMgZGljdGlvbmFyaWVzIG9mIHNldHRpbmdzIGFuZCB0aGVpciB2YWx1ZXMuCi0gICAgICBzdGRlcnI6IFRoZSBzdHJlYW0gcmVjZWl2aW5nIHRoZSBlcnJvciBtZXNzYWdlcy4KLSAgIiIiCi0gIF9WYWxpZGF0ZVNldHRpbmdzKF9tc3ZzX3ZhbGlkYXRvcnMsIHNldHRpbmdzLCBzdGRlcnIpCi0KLQotZGVmIFZhbGlkYXRlTVNCdWlsZFNldHRpbmdzKHNldHRpbmdzLCBzdGRlcnI9c3lzLnN0ZGVycik6Ci0gICIiIlZhbGlkYXRlcyB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgc2V0dGluZ3MgYXJlIHZhbGlkIGZvciBNU0J1aWxkLgotCi0gIEFyZ3M6Ci0gICAgICBzZXR0aW5nczogQSBkaWN0aW9uYXJ5LiAgVGhlIGtleSBpcyB0aGUgdG9vbCBuYW1lLiAgVGhlIHZhbHVlcyBhcmUKLSAgICAgICAgICB0aGVtc2VsdmVzIGRpY3Rpb25hcmllcyBvZiBzZXR0aW5ncyBhbmQgdGhlaXIgdmFsdWVzLgotICAgICAgc3RkZXJyOiBUaGUgc3RyZWFtIHJlY2VpdmluZyB0aGUgZXJyb3IgbWVzc2FnZXMuCi0gICIiIgotICBfVmFsaWRhdGVTZXR0aW5ncyhfbXNidWlsZF92YWxpZGF0b3JzLCBzZXR0aW5ncywgc3RkZXJyKQotCi0KLWRlZiBfVmFsaWRhdGVTZXR0aW5ncyh2YWxpZGF0b3JzLCBzZXR0aW5ncywgc3RkZXJyKToKLSAgIiIiVmFsaWRhdGVzIHRoYXQgdGhlIHNldHRpbmdzIGFyZSB2YWxpZCBmb3IgTVNCdWlsZCBvciBNU1ZTLgotCi0gIFdlIGN1cnJlbnRseSBvbmx5IHZhbGlkYXRlIHRoZSBuYW1lcyBvZiB0aGUgc2V0dGluZ3MsIG5vdCB0aGVpciB2YWx1ZXMuCi0KLSAgQXJnczoKLSAgICAgIHZhbGlkYXRvcnM6IEEgZGljdGlvbmFyeSBvZiB0b29scyBhbmQgdGhlaXIgdmFsaWRhdG9ycy4KLSAgICAgIHNldHRpbmdzOiBBIGRpY3Rpb25hcnkuICBUaGUga2V5IGlzIHRoZSB0b29sIG5hbWUuICBUaGUgdmFsdWVzIGFyZQotICAgICAgICAgIHRoZW1zZWx2ZXMgZGljdGlvbmFyaWVzIG9mIHNldHRpbmdzIGFuZCB0aGVpciB2YWx1ZXMuCi0gICAgICBzdGRlcnI6IFRoZSBzdHJlYW0gcmVjZWl2aW5nIHRoZSBlcnJvciBtZXNzYWdlcy4KLSAgIiIiCi0gIGZvciB0b29sX25hbWUgaW4gc2V0dGluZ3M6Ci0gICAgaWYgdG9vbF9uYW1lIGluIHZhbGlkYXRvcnM6Ci0gICAgICB0b29sX3ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzW3Rvb2xfbmFtZV0KLSAgICAgIGZvciBzZXR0aW5nLCB2YWx1ZSBpbiBzZXR0aW5nc1t0b29sX25hbWVdLml0ZXJpdGVtcygpOgotICAgICAgICBpZiBzZXR0aW5nIGluIHRvb2xfdmFsaWRhdG9yczoKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0b29sX3ZhbGlkYXRvcnNbc2V0dGluZ10odmFsdWUpCi0gICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBwcmludCA+PiBzdGRlcnIsICgnV2FybmluZzogZm9yICVzLyVzLCAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvb2xfbmFtZSwgc2V0dGluZywgZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcHJpbnQgPj4gc3RkZXJyLCAoJ1dhcm5pbmc6IHVucmVjb2duaXplZCBzZXR0aW5nICVzLyVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvb2xfbmFtZSwgc2V0dGluZykpCi0gICAgZWxzZToKLSAgICAgIHByaW50ID4+IHN0ZGVyciwgKCdXYXJuaW5nOiB1bnJlY29nbml6ZWQgdG9vbCAlcycgJSB0b29sX25hbWUpCi0KLQotIyBNU1ZTIGFuZCBNQnVpbGQgbmFtZXMgb2YgdGhlIHRvb2xzLgotX2NvbXBpbGUgPSBfVG9vbCgnVkNDTENvbXBpbGVyVG9vbCcsICdDbENvbXBpbGUnKQotX2xpbmsgPSBfVG9vbCgnVkNMaW5rZXJUb29sJywgJ0xpbmsnKQotX21pZGwgPSBfVG9vbCgnVkNNSURMVG9vbCcsICdNaWRsJykKLV9yYyA9IF9Ub29sKCdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJywgJ1Jlc291cmNlQ29tcGlsZScpCi1fbGliID0gX1Rvb2woJ1ZDTGlicmFyaWFuVG9vbCcsICdMaWInKQotX21hbmlmZXN0ID0gX1Rvb2woJ1ZDTWFuaWZlc3RUb29sJywgJ01hbmlmZXN0JykKLQotCi1fQWRkVG9vbChfY29tcGlsZSkKLV9BZGRUb29sKF9saW5rKQotX0FkZFRvb2woX21pZGwpCi1fQWRkVG9vbChfcmMpCi1fQWRkVG9vbChfbGliKQotX0FkZFRvb2woX21hbmlmZXN0KQotIyBBZGQgc2VjdGlvbnMgb25seSBmb3VuZCBpbiB0aGUgTVNCdWlsZCBzZXR0aW5ncy4KLV9tc2J1aWxkX3ZhbGlkYXRvcnNbJyddID0ge30KLV9tc2J1aWxkX3ZhbGlkYXRvcnNbJ1Byb2plY3RSZWZlcmVuY2UnXSA9IHt9Ci1fbXNidWlsZF92YWxpZGF0b3JzWydNYW5pZmVzdFJlc291cmNlQ29tcGlsZSddID0ge30KLQotIyBEZXNjcmlwdGlvbnMgb2YgdGhlIGNvbXBpbGVyIG9wdGlvbnMsIGkuZS4gVkNDTENvbXBpbGVyVG9vbCBpbiBNU1ZTIGFuZAotIyBDbENvbXBpbGUgaW4gTVNCdWlsZC4KLSMgU2VlICJjOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1TQnVpbGRcTWljcm9zb2Z0LkNwcFx2NC4wXDEwMzNcY2wueG1sIiBmb3IKLSMgdGhlIHNjaGVtYSBvZiB0aGUgTVNCdWlsZCBDbENvbXBpbGUgc2V0dGluZ3MuCi0KLSMgT3B0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBpbiBNU1ZTIGFuZCBNU0J1aWxkCi1fU2FtZShfY29tcGlsZSwgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnLCBfZm9sZGVyX2xpc3QpICAjIC9JCi1fU2FtZShfY29tcGlsZSwgJ0FkZGl0aW9uYWxPcHRpb25zJywgX3N0cmluZ19saXN0KQotX1NhbWUoX2NvbXBpbGUsICdBZGRpdGlvbmFsVXNpbmdEaXJlY3RvcmllcycsIF9mb2xkZXJfbGlzdCkgICMgL0FJCi1fU2FtZShfY29tcGlsZSwgJ0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbicsIF9maWxlX25hbWUpICAjIC9GYQotX1NhbWUoX2NvbXBpbGUsICdCcm93c2VJbmZvcm1hdGlvbkZpbGUnLCBfZmlsZV9uYW1lKQotX1NhbWUoX2NvbXBpbGUsICdCdWZmZXJTZWN1cml0eUNoZWNrJywgX2Jvb2xlYW4pICAjIC9HUwotX1NhbWUoX2NvbXBpbGUsICdEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zJywgX2Jvb2xlYW4pICAjIC9aYQotX1NhbWUoX2NvbXBpbGUsICdEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncycsIF9zdHJpbmdfbGlzdCkgICMgL3dkCi1fU2FtZShfY29tcGlsZSwgJ0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnMnLCBfYm9vbGVhbikgICMgL0dUCi1fU2FtZShfY29tcGlsZSwgJ0VuYWJsZVBSRWZhc3QnLCBfYm9vbGVhbikgICMgL2FuYWx5emUgVmlzaWJsZT0nZmFsc2UnCi1fU2FtZShfY29tcGlsZSwgJ0V4cGFuZEF0dHJpYnV0ZWRTb3VyY2UnLCBfYm9vbGVhbikgICMgL0Z4Ci1fU2FtZShfY29tcGlsZSwgJ0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zJywgX2Jvb2xlYW4pICAjIC9mcDpleGNlcHQKLV9TYW1lKF9jb21waWxlLCAnRm9yY2VDb25mb3JtYW5jZUluRm9yTG9vcFNjb3BlJywgX2Jvb2xlYW4pICAjIC9aYzpmb3JTY29wZQotX1NhbWUoX2NvbXBpbGUsICdGb3JjZWRJbmNsdWRlRmlsZXMnLCBfZmlsZV9saXN0KSAgIyAvRkkKLV9TYW1lKF9jb21waWxlLCAnRm9yY2VkVXNpbmdGaWxlcycsIF9maWxlX2xpc3QpICAjIC9GVQotX1NhbWUoX2NvbXBpbGUsICdHZW5lcmF0ZVhNTERvY3VtZW50YXRpb25GaWxlcycsIF9ib29sZWFuKSAgIyAvZG9jCi1fU2FtZShfY29tcGlsZSwgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnLCBfYm9vbGVhbikgICMgL1gKLV9TYW1lKF9jb21waWxlLCAnT21pdERlZmF1bHRMaWJOYW1lJywgX2Jvb2xlYW4pICAjIC9abAotX1NhbWUoX2NvbXBpbGUsICdPbWl0RnJhbWVQb2ludGVycycsIF9ib29sZWFuKSAgIyAvT3kKLV9TYW1lKF9jb21waWxlLCAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnLCBfc3RyaW5nX2xpc3QpICAjIC9ECi1fU2FtZShfY29tcGlsZSwgJ1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lJywgX2ZpbGVfbmFtZSkgICMgL0ZkCi1fU2FtZShfY29tcGlsZSwgJ1J1bnRpbWVUeXBlSW5mbycsIF9ib29sZWFuKSAgIyAvR1IKLV9TYW1lKF9jb21waWxlLCAnU2hvd0luY2x1ZGVzJywgX2Jvb2xlYW4pICAjIC9zaG93SW5jbHVkZXMKLV9TYW1lKF9jb21waWxlLCAnU21hbGxlclR5cGVDaGVjaycsIF9ib29sZWFuKSAgIyAvUlRDYwotX1NhbWUoX2NvbXBpbGUsICdTdHJpbmdQb29saW5nJywgX2Jvb2xlYW4pICAjIC9HRgotX1NhbWUoX2NvbXBpbGUsICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInLCBfYm9vbGVhbikgICMgL25vbG9nbwotX1NhbWUoX2NvbXBpbGUsICdUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlJywgX2Jvb2xlYW4pICAjIC9aYzp3Y2hhcl90Ci1fU2FtZShfY29tcGlsZSwgJ1VuZGVmaW5lQWxsUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnLCBfYm9vbGVhbikgICMgL3UKLV9TYW1lKF9jb21waWxlLCAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucycsIF9zdHJpbmdfbGlzdCkgICMgL1UKLV9TYW1lKF9jb21waWxlLCAnVXNlRnVsbFBhdGhzJywgX2Jvb2xlYW4pICAjIC9GQwotX1NhbWUoX2NvbXBpbGUsICdXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24nLCBfYm9vbGVhbikgICMgL0dMCi1fU2FtZShfY29tcGlsZSwgJ1hNTERvY3VtZW50YXRpb25GaWxlTmFtZScsIF9maWxlX25hbWUpCi0KLV9TYW1lKF9jb21waWxlLCAnQXNzZW1ibGVyT3V0cHV0JywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ05vTGlzdGluZycsCi0gICAgICAgICAgICAgICAgICAgICdBc3NlbWJseUNvZGUnLCAgIyAvRkEKLSAgICAgICAgICAgICAgICAgICAgJ0FsbCcsICAjIC9GQWNzCi0gICAgICAgICAgICAgICAgICAgICdBc3NlbWJseUFuZE1hY2hpbmVDb2RlJywgICMgL0ZBYwotICAgICAgICAgICAgICAgICAgICAnQXNzZW1ibHlBbmRTb3VyY2VDb2RlJ10pKSAgIyAvRkFzCi1fU2FtZShfY29tcGlsZSwgJ0Jhc2ljUnVudGltZUNoZWNrcycsCi0gICAgICBfRW51bWVyYXRpb24oWydEZWZhdWx0JywKLSAgICAgICAgICAgICAgICAgICAgJ1N0YWNrRnJhbWVSdW50aW1lQ2hlY2snLCAgIyAvUlRDcwotICAgICAgICAgICAgICAgICAgICAnVW5pbml0aWFsaXplZExvY2FsVXNhZ2VDaGVjaycsICAjIC9SVEN1Ci0gICAgICAgICAgICAgICAgICAgICdFbmFibGVGYXN0Q2hlY2tzJ10pKSAgIyAvUlRDMQotX1NhbWUoX2NvbXBpbGUsICdCcm93c2VJbmZvcm1hdGlvbicsCi0gICAgICBfRW51bWVyYXRpb24oWydmYWxzZScsCi0gICAgICAgICAgICAgICAgICAgICd0cnVlJywgICMgL0ZSCi0gICAgICAgICAgICAgICAgICAgICd0cnVlJ10pKSAgIyAvRnIKLV9TYW1lKF9jb21waWxlLCAnQ2FsbGluZ0NvbnZlbnRpb24nLAotICAgICAgX0VudW1lcmF0aW9uKFsnQ2RlY2wnLCAgIyAvR2QKLSAgICAgICAgICAgICAgICAgICAgJ0Zhc3RDYWxsJywgICMgL0dyCi0gICAgICAgICAgICAgICAgICAgICdTdGRDYWxsJ10pKSAgIyAvR3oKLV9TYW1lKF9jb21waWxlLCAnQ29tcGlsZUFzJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ0RlZmF1bHQnLAotICAgICAgICAgICAgICAgICAgICAnQ29tcGlsZUFzQycsICAjIC9UQwotICAgICAgICAgICAgICAgICAgICAnQ29tcGlsZUFzQ3BwJ10pKSAgIyAvVFAKLV9TYW1lKF9jb21waWxlLCAnRGVidWdJbmZvcm1hdGlvbkZvcm1hdCcsCi0gICAgICBfRW51bWVyYXRpb24oWycnLCAgIyBEaXNhYmxlZAotICAgICAgICAgICAgICAgICAgICAnT2xkU3R5bGUnLCAgIyAvWjcKLSAgICAgICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1EYXRhYmFzZScsICAjIC9aaQotICAgICAgICAgICAgICAgICAgICAnRWRpdEFuZENvbnRpbnVlJ10pKSAgIyAvWkkKLV9TYW1lKF9jb21waWxlLCAnRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldCcsCi0gICAgICBfRW51bWVyYXRpb24oWydOb3RTZXQnLAotICAgICAgICAgICAgICAgICAgICAnU3RyZWFtaW5nU0lNREV4dGVuc2lvbnMnLCAgIyAvYXJjaDpTU0UKLSAgICAgICAgICAgICAgICAgICAgJ1N0cmVhbWluZ1NJTURFeHRlbnNpb25zMiddKSkgICMgL2FyY2g6U1NFMgotX1NhbWUoX2NvbXBpbGUsICdFcnJvclJlcG9ydGluZycsCi0gICAgICBfRW51bWVyYXRpb24oWydOb25lJywgICMgL2Vycm9yUmVwb3J0Om5vbmUKLSAgICAgICAgICAgICAgICAgICAgJ1Byb21wdCcsICAjIC9lcnJvclJlcG9ydDpwcm9tcHQKLSAgICAgICAgICAgICAgICAgICAgJ1F1ZXVlJ10sICAjIC9lcnJvclJlcG9ydDpxdWV1ZQotICAgICAgICAgICAgICAgICAgIG5ldz1bJ1NlbmQnXSkpICAjIC9lcnJvclJlcG9ydDpzZW5kIgotX1NhbWUoX2NvbXBpbGUsICdFeGNlcHRpb25IYW5kbGluZycsCi0gICAgICBfRW51bWVyYXRpb24oWydmYWxzZScsCi0gICAgICAgICAgICAgICAgICAgICdTeW5jJywgICMgL0VIc2MKLSAgICAgICAgICAgICAgICAgICAgJ0FzeW5jJ10sICAjIC9FSGEKLSAgICAgICAgICAgICAgICAgICBuZXc9WydTeW5jQ1Rocm93J10pKSAgIyAvRUhzCi1fU2FtZShfY29tcGlsZSwgJ0Zhdm9yU2l6ZU9yU3BlZWQnLAotICAgICAgX0VudW1lcmF0aW9uKFsnTmVpdGhlcicsCi0gICAgICAgICAgICAgICAgICAgICdTcGVlZCcsICAjIC9PdAotICAgICAgICAgICAgICAgICAgICAnU2l6ZSddKSkgICMgL09zCi1fU2FtZShfY29tcGlsZSwgJ0Zsb2F0aW5nUG9pbnRNb2RlbCcsCi0gICAgICBfRW51bWVyYXRpb24oWydQcmVjaXNlJywgICMgL2ZwOnByZWNpc2UKLSAgICAgICAgICAgICAgICAgICAgJ1N0cmljdCcsICAjIC9mcDpzdHJpY3QKLSAgICAgICAgICAgICAgICAgICAgJ0Zhc3QnXSkpICAjIC9mcDpmYXN0Ci1fU2FtZShfY29tcGlsZSwgJ0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ0RlZmF1bHQnLAotICAgICAgICAgICAgICAgICAgICAnT25seUV4cGxpY2l0SW5saW5lJywgICMgL09iMQotICAgICAgICAgICAgICAgICAgICAnQW55U3VpdGFibGUnXSwgICMgL09iMgotICAgICAgICAgICAgICAgICAgIG5ldz1bJ0Rpc2FibGVkJ10pKSAgIyAvT2IwCi1fU2FtZShfY29tcGlsZSwgJ09wdGltaXphdGlvbicsCi0gICAgICBfRW51bWVyYXRpb24oWydEaXNhYmxlZCcsICAjIC9PZAotICAgICAgICAgICAgICAgICAgICAnTWluU3BhY2UnLCAgIyAvTzEKLSAgICAgICAgICAgICAgICAgICAgJ01heFNwZWVkJywgICMgL08yCi0gICAgICAgICAgICAgICAgICAgICdGdWxsJ10pKSAgIyAvT3gKLV9TYW1lKF9jb21waWxlLCAnUnVudGltZUxpYnJhcnknLAotICAgICAgX0VudW1lcmF0aW9uKFsnTXVsdGlUaHJlYWRlZCcsICAjIC9NVAotICAgICAgICAgICAgICAgICAgICAnTXVsdGlUaHJlYWRlZERlYnVnJywgICMgL01UZAotICAgICAgICAgICAgICAgICAgICAnTXVsdGlUaHJlYWRlZERMTCcsICAjIC9NRAotICAgICAgICAgICAgICAgICAgICAnTXVsdGlUaHJlYWRlZERlYnVnRExMJ10pKSAgIyAvTURkCi1fU2FtZShfY29tcGlsZSwgJ1N0cnVjdE1lbWJlckFsaWdubWVudCcsCi0gICAgICBfRW51bWVyYXRpb24oWydEZWZhdWx0JywKLSAgICAgICAgICAgICAgICAgICAgJzFCeXRlJywgICMgL1pwMQotICAgICAgICAgICAgICAgICAgICAnMkJ5dGVzJywgICMgL1pwMgotICAgICAgICAgICAgICAgICAgICAnNEJ5dGVzJywgICMgL1pwNAotICAgICAgICAgICAgICAgICAgICAnOEJ5dGVzJywgICMgL1pwOAotICAgICAgICAgICAgICAgICAgICAnMTZCeXRlcyddKSkgICMgL1pwMTYKLV9TYW1lKF9jb21waWxlLCAnV2FybmluZ0xldmVsJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ1R1cm5PZmZBbGxXYXJuaW5ncycsICAjIC9XMAotICAgICAgICAgICAgICAgICAgICAnTGV2ZWwxJywgICMgL1cxCi0gICAgICAgICAgICAgICAgICAgICdMZXZlbDInLCAgIyAvVzIKLSAgICAgICAgICAgICAgICAgICAgJ0xldmVsMycsICAjIC9XMwotICAgICAgICAgICAgICAgICAgICAnTGV2ZWw0J10sICAjIC9XNAotICAgICAgICAgICAgICAgICAgIG5ldz1bJ0VuYWJsZUFsbFdhcm5pbmdzJ10pKSAgIyAvV2FsbAotCi0jIE9wdGlvbnMgZm91bmQgaW4gTVNWUyB0aGF0IGhhdmUgYmVlbiByZW5hbWVkIGluIE1TQnVpbGQuCi1fUmVuYW1lZChfY29tcGlsZSwgJ0VuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nJywgJ0Z1bmN0aW9uTGV2ZWxMaW5raW5nJywKLSAgICAgICAgIF9ib29sZWFuKSAgIyAvR3kKLV9SZW5hbWVkKF9jb21waWxlLCAnRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zJywgJ0ludHJpbnNpY0Z1bmN0aW9ucycsCi0gICAgICAgICBfYm9vbGVhbikgICMgL09pCi1fUmVuYW1lZChfY29tcGlsZSwgJ0tlZXBDb21tZW50cycsICdQcmVwcm9jZXNzS2VlcENvbW1lbnRzJywgX2Jvb2xlYW4pICAjIC9DCi1fUmVuYW1lZChfY29tcGlsZSwgJ09iamVjdEZpbGUnLCAnT2JqZWN0RmlsZU5hbWUnLCBfZmlsZV9uYW1lKSAgIyAvRm8KLV9SZW5hbWVkKF9jb21waWxlLCAnT3Blbk1QJywgJ09wZW5NUFN1cHBvcnQnLCBfYm9vbGVhbikgICMgL29wZW5tcAotX1JlbmFtZWQoX2NvbXBpbGUsICdQcmVjb21waWxlZEhlYWRlclRocm91Z2gnLCAnUHJlY29tcGlsZWRIZWFkZXJGaWxlJywKLSAgICAgICAgIF9maWxlX25hbWUpICAjIFVzZWQgd2l0aCAvWWMgYW5kIC9ZdQotX1JlbmFtZWQoX2NvbXBpbGUsICdQcmVjb21waWxlZEhlYWRlckZpbGUnLCAnUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlJywKLSAgICAgICAgIF9maWxlX25hbWUpICAjIC9GcAotX1JlbmFtZWQoX2NvbXBpbGUsICdVc2VQcmVjb21waWxlZEhlYWRlcicsICdQcmVjb21waWxlZEhlYWRlcicsCi0gICAgICAgICBfRW51bWVyYXRpb24oWydOb3RVc2luZycsICAjIFZTIHJlY29nbml6ZWQgJycgZm9yIHRoaXMgdmFsdWUgdG9vLgotICAgICAgICAgICAgICAgICAgICAgICAnQ3JlYXRlJywgICAjIC9ZYwotICAgICAgICAgICAgICAgICAgICAgICAnVXNlJ10pKSAgIyAvWXUKLV9SZW5hbWVkKF9jb21waWxlLCAnV2FybkFzRXJyb3InLCAnVHJlYXRXYXJuaW5nQXNFcnJvcicsIF9ib29sZWFuKSAgIyAvV1gKLQotX0NvbnZlcnRlZFRvQWRkaXRpb25hbE9wdGlvbihfY29tcGlsZSwgJ0RlZmF1bHRDaGFySXNVbnNpZ25lZCcsICcvSicpCi0KLSMgTVNWUyBvcHRpb25zIG5vdCBmb3VuZCBpbiBNU0J1aWxkLgotX01TVlNPbmx5KF9jb21waWxlLCAnRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zJywgX2Jvb2xlYW4pCi1fTVNWU09ubHkoX2NvbXBpbGUsICdVc2VVbmljb2RlUmVzcG9uc2VGaWxlcycsIF9ib29sZWFuKQotCi0jIE1TQnVpbGQgb3B0aW9ucyBub3QgZm91bmQgaW4gTVNWUy4KLV9NU0J1aWxkT25seShfY29tcGlsZSwgJ0J1aWxkaW5nSW5JREUnLCBfYm9vbGVhbikKLV9NU0J1aWxkT25seShfY29tcGlsZSwgJ0NvbXBpbGVBc01hbmFnZWQnLAotICAgICAgICAgICAgIF9FbnVtZXJhdGlvbihbXSwgbmV3PVsnZmFsc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZScsICAjIC9jbHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cmUnLCAgIyAvY2xyOnB1cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NhZmUnLCAgIyAvY2xyOnNhZmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09sZFN5bnRheCddKSkgICMgL2NscjpvbGRTeW50YXgKLV9NU0J1aWxkT25seShfY29tcGlsZSwgJ0NyZWF0ZUhvdHBhdGNoYWJsZUltYWdlJywgX2Jvb2xlYW4pICAjIC9ob3RwYXRjaAotX01TQnVpbGRPbmx5KF9jb21waWxlLCAnTXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbicsIF9ib29sZWFuKSAgIyAvTVAKLV9NU0J1aWxkT25seShfY29tcGlsZSwgJ1ByZXByb2Nlc3NPdXRwdXRQYXRoJywgX3N0cmluZykgICMgL0ZpCi1fTVNCdWlsZE9ubHkoX2NvbXBpbGUsICdQcm9jZXNzb3JOdW1iZXInLCBfaW50ZWdlcikgICMgdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzCi1fTVNCdWlsZE9ubHkoX2NvbXBpbGUsICdUcmFja2VyTG9nRGlyZWN0b3J5JywgX2ZvbGRlcl9uYW1lKQotX01TQnVpbGRPbmx5KF9jb21waWxlLCAnVHJlYXRTcGVjaWZpY1dhcm5pbmdzQXNFcnJvcnMnLCBfc3RyaW5nX2xpc3QpICAjIC93ZQotX01TQnVpbGRPbmx5KF9jb21waWxlLCAnVXNlVW5pY29kZUZvckFzc2VtYmxlckxpc3RpbmcnLCBfYm9vbGVhbikgICMgL0ZBdQotCi0jIERlZmluZXMgYSBzZXR0aW5nIHRoYXQgbmVlZHMgdmVyeSBjdXN0b21pemVkIHByb2Nlc3NpbmcKLV9DdXN0b21HZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGUoX2NvbXBpbGUsICdHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGUnKQotCi0KLSMgRGlyZWN0aXZlcyBmb3IgY29udmVydGluZyBNU1ZTIFZDTGlua2VyVG9vbCB0byBNU0J1aWxkIExpbmsuCi0jIFNlZSAiYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNU0J1aWxkXE1pY3Jvc29mdC5DcHBcdjQuMFwxMDMzXGxpbmsueG1sIiBmb3IKLSMgdGhlIHNjaGVtYSBvZiB0aGUgTVNCdWlsZCBMaW5rIHNldHRpbmdzLgotCi0jIE9wdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgaW4gTVNWUyBhbmQgTVNCdWlsZAotX1NhbWUoX2xpbmssICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJywgX2ZpbGVfbGlzdCkKLV9TYW1lKF9saW5rLCAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3RvcmllcycsIF9mb2xkZXJfbGlzdCkgICMgL0xJQlBBVEgKLSMgIC9NQU5JRkVTVERFUEVOREVOQ1k6Ci1fU2FtZShfbGluaywgJ0FkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcycsIF9maWxlX2xpc3QpCi1fU2FtZShfbGluaywgJ0FkZGl0aW9uYWxPcHRpb25zJywgX3N0cmluZ19saXN0KQotX1NhbWUoX2xpbmssICdBZGRNb2R1bGVOYW1lc1RvQXNzZW1ibHknLCBfZmlsZV9saXN0KSAgIyAvQVNTRU1CTFlNT0RVTEUKLV9TYW1lKF9saW5rLCAnQWxsb3dJc29sYXRpb24nLCBfYm9vbGVhbikgICMgL0FMTE9XSVNPTEFUSU9OCi1fU2FtZShfbGluaywgJ0Fzc2VtYmx5TGlua1Jlc291cmNlJywgX2ZpbGVfbGlzdCkgICMgL0FTU0VNQkxZTElOS1JFU09VUkNFCi1fU2FtZShfbGluaywgJ0Jhc2VBZGRyZXNzJywgX3N0cmluZykgICMgL0JBU0UKLV9TYW1lKF9saW5rLCAnQ0xSVW5tYW5hZ2VkQ29kZUNoZWNrJywgX2Jvb2xlYW4pICAjIC9DTFJVTk1BTkFHRURDT0RFQ0hFQ0sKLV9TYW1lKF9saW5rLCAnRGVsYXlMb2FkRExMcycsIF9maWxlX2xpc3QpICAjIC9ERUxBWUxPQUQKLV9TYW1lKF9saW5rLCAnRGVsYXlTaWduJywgX2Jvb2xlYW4pICAjIC9ERUxBWVNJR04KLV9TYW1lKF9saW5rLCAnRW1iZWRNYW5hZ2VkUmVzb3VyY2VGaWxlJywgX2ZpbGVfbGlzdCkgICMgL0FTU0VNQkxZUkVTT1VSQ0UKLV9TYW1lKF9saW5rLCAnRW5hYmxlVUFDJywgX2Jvb2xlYW4pICAjIC9NQU5JRkVTVFVBQwotX1NhbWUoX2xpbmssICdFbnRyeVBvaW50U3ltYm9sJywgX3N0cmluZykgICMgL0VOVFJZCi1fU2FtZShfbGluaywgJ0ZvcmNlU3ltYm9sUmVmZXJlbmNlcycsIF9maWxlX2xpc3QpICAjIC9JTkNMVURFCi1fU2FtZShfbGluaywgJ0Z1bmN0aW9uT3JkZXInLCBfZmlsZV9uYW1lKSAgIyAvT1JERVIKLV9TYW1lKF9saW5rLCAnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJywgX2Jvb2xlYW4pICAjIC9ERUJVRwotX1NhbWUoX2xpbmssICdHZW5lcmF0ZU1hcEZpbGUnLCBfYm9vbGVhbikgICMgL01BUAotX1NhbWUoX2xpbmssICdIZWFwQ29tbWl0U2l6ZScsIF9zdHJpbmcpCi1fU2FtZShfbGluaywgJ0hlYXBSZXNlcnZlU2l6ZScsIF9zdHJpbmcpICAjIC9IRUFQCi1fU2FtZShfbGluaywgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnLCBfYm9vbGVhbikgICMgL05PREVGQVVMVExJQgotX1NhbWUoX2xpbmssICdJZ25vcmVFbWJlZGRlZElETCcsIF9ib29sZWFuKSAgIyAvSUdOT1JFSURMCi1fU2FtZShfbGluaywgJ0ltcG9ydExpYnJhcnknLCBfZmlsZV9uYW1lKSAgIyAvSU1QTElCCi1fU2FtZShfbGluaywgJ0tleUNvbnRhaW5lcicsIF9maWxlX25hbWUpICAjIC9LRVlDT05UQUlORVIKLV9TYW1lKF9saW5rLCAnS2V5RmlsZScsIF9maWxlX25hbWUpICAjIC9LRVlGSUxFCi1fU2FtZShfbGluaywgJ01hbmlmZXN0RmlsZScsIF9maWxlX25hbWUpICAjIC9NYW5pZmVzdEZpbGUKLV9TYW1lKF9saW5rLCAnTWFwRXhwb3J0cycsIF9ib29sZWFuKSAgIyAvTUFQSU5GTzpFWFBPUlRTCi1fU2FtZShfbGluaywgJ01hcEZpbGVOYW1lJywgX2ZpbGVfbmFtZSkKLV9TYW1lKF9saW5rLCAnTWVyZ2VkSURMQmFzZUZpbGVOYW1lJywgX2ZpbGVfbmFtZSkgICMgL0lETE9VVAotX1NhbWUoX2xpbmssICdNZXJnZVNlY3Rpb25zJywgX3N0cmluZykgICMgL01FUkdFCi1fU2FtZShfbGluaywgJ01pZGxDb21tYW5kRmlsZScsIF9maWxlX25hbWUpICAjIC9NSURMCi1fU2FtZShfbGluaywgJ01vZHVsZURlZmluaXRpb25GaWxlJywgX2ZpbGVfbmFtZSkgICMgL0RFRgotX1NhbWUoX2xpbmssICdPdXRwdXRGaWxlJywgX2ZpbGVfbmFtZSkgICMgL09VVAotX1NhbWUoX2xpbmssICdQZXJVc2VyUmVkaXJlY3Rpb24nLCBfYm9vbGVhbikKLV9TYW1lKF9saW5rLCAnUHJvZmlsZScsIF9ib29sZWFuKSAgIyAvUFJPRklMRQotX1NhbWUoX2xpbmssICdQcm9maWxlR3VpZGVkRGF0YWJhc2UnLCBfZmlsZV9uYW1lKSAgIyAvUEdECi1fU2FtZShfbGluaywgJ1Byb2dyYW1EYXRhYmFzZUZpbGUnLCBfZmlsZV9uYW1lKSAgIyAvUERCCi1fU2FtZShfbGluaywgJ1JlZ2lzdGVyT3V0cHV0JywgX2Jvb2xlYW4pCi1fU2FtZShfbGluaywgJ1NldENoZWNrc3VtJywgX2Jvb2xlYW4pICAjIC9SRUxFQVNFCi1fU2FtZShfbGluaywgJ1N0YWNrQ29tbWl0U2l6ZScsIF9zdHJpbmcpCi1fU2FtZShfbGluaywgJ1N0YWNrUmVzZXJ2ZVNpemUnLCBfc3RyaW5nKSAgIyAvU1RBQ0sKLV9TYW1lKF9saW5rLCAnU3RyaXBQcml2YXRlU3ltYm9scycsIF9maWxlX25hbWUpICAjIC9QREJTVFJJUFBFRAotX1NhbWUoX2xpbmssICdTdXBwb3J0VW5sb2FkT2ZEZWxheUxvYWRlZERMTCcsIF9ib29sZWFuKSAgIyAvREVMQVk6VU5MT0FECi1fU2FtZShfbGluaywgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcicsIF9ib29sZWFuKSAgIyAvTk9MT0dPCi1fU2FtZShfbGluaywgJ1N3YXBSdW5Gcm9tQ0QnLCBfYm9vbGVhbikgICMgL1NXQVBSVU46Q0QKLV9TYW1lKF9saW5rLCAnVHVybk9mZkFzc2VtYmx5R2VuZXJhdGlvbicsIF9ib29sZWFuKSAgIyAvTk9BU1NFTUJMWQotX1NhbWUoX2xpbmssICdUeXBlTGlicmFyeUZpbGUnLCBfZmlsZV9uYW1lKSAgIyAvVExCT1VUCi1fU2FtZShfbGluaywgJ1R5cGVMaWJyYXJ5UmVzb3VyY2VJRCcsIF9pbnRlZ2VyKSAgIyAvVExCSUQKLV9TYW1lKF9saW5rLCAnVUFDVUlBY2Nlc3MnLCBfYm9vbGVhbikgICMgL3VpQWNjZXNzPSd0cnVlJwotX1NhbWUoX2xpbmssICdWZXJzaW9uJywgX3N0cmluZykgICMgL1ZFUlNJT04KLQotX1NhbWUoX2xpbmssICdFbmFibGVDT01EQVRGb2xkaW5nJywgX25ld2x5X2Jvb2xlYW4pICAjIC9PUFQ6SUNGCi1fU2FtZShfbGluaywgJ0ZpeGVkQmFzZUFkZHJlc3MnLCBfbmV3bHlfYm9vbGVhbikgICMgL0ZJWEVECi1fU2FtZShfbGluaywgJ0xhcmdlQWRkcmVzc0F3YXJlJywgX25ld2x5X2Jvb2xlYW4pICAjIC9MQVJHRUFERFJFU1NBV0FSRQotX1NhbWUoX2xpbmssICdPcHRpbWl6ZVJlZmVyZW5jZXMnLCBfbmV3bHlfYm9vbGVhbikgICMgL09QVDpSRUYKLV9TYW1lKF9saW5rLCAnUmFuZG9taXplZEJhc2VBZGRyZXNzJywgX25ld2x5X2Jvb2xlYW4pICAjIC9EWU5BTUlDQkFTRQotX1NhbWUoX2xpbmssICdUZXJtaW5hbFNlcnZlckF3YXJlJywgX25ld2x5X2Jvb2xlYW4pICAjIC9UU0FXQVJFCi0KLV9zdWJzeXN0ZW1fZW51bWVyYXRpb24gPSBfRW51bWVyYXRpb24oCi0gICAgWydOb3RTZXQnLAotICAgICAnQ29uc29sZScsICAjIC9TVUJTWVNURU06Q09OU09MRQotICAgICAnV2luZG93cycsICAjIC9TVUJTWVNURU06V0lORE9XUwotICAgICAnTmF0aXZlJywgICMgL1NVQlNZU1RFTTpOQVRJVkUKLSAgICAgJ0VGSSBBcHBsaWNhdGlvbicsICAjIC9TVUJTWVNURU06RUZJX0FQUExJQ0FUSU9OCi0gICAgICdFRkkgQm9vdCBTZXJ2aWNlIERyaXZlcicsICAjIC9TVUJTWVNURU06RUZJX0JPT1RfU0VSVklDRV9EUklWRVIKLSAgICAgJ0VGSSBST00nLCAgIyAvU1VCU1lTVEVNOkVGSV9ST00KLSAgICAgJ0VGSSBSdW50aW1lJywgICMgL1NVQlNZU1RFTTpFRklfUlVOVElNRV9EUklWRVIKLSAgICAgJ1dpbmRvd3NDRSddLCAgIyAvU1VCU1lTVEVNOldJTkRPV1NDRQotICAgIG5ldz1bJ1BPU0lYJ10pICAjIC9TVUJTWVNURU06UE9TSVgKLQotX3RhcmdldF9tYWNoaW5lX2VudW1lcmF0aW9uID0gX0VudW1lcmF0aW9uKAotICAgIFsnTm90U2V0JywKLSAgICAgJ01hY2hpbmVYODYnLCAgIyAvTUFDSElORTpYODYKLSAgICAgTm9uZSwKLSAgICAgJ01hY2hpbmVBUk0nLCAgIyAvTUFDSElORTpBUk0KLSAgICAgJ01hY2hpbmVFQkMnLCAgIyAvTUFDSElORTpFQkMKLSAgICAgJ01hY2hpbmVJQTY0JywgICMgL01BQ0hJTkU6SUE2NAotICAgICBOb25lLAotICAgICAnTWFjaGluZU1JUFMnLCAgIyAvTUFDSElORTpNSVBTCi0gICAgICdNYWNoaW5lTUlQUzE2JywgICMgL01BQ0hJTkU6TUlQUzE2Ci0gICAgICdNYWNoaW5lTUlQU0ZQVScsICAjIC9NQUNISU5FOk1JUFNGUFUKLSAgICAgJ01hY2hpbmVNSVBTRlBVMTYnLCAgIyAvTUFDSElORTpNSVBTRlBVMTYKLSAgICAgTm9uZSwKLSAgICAgTm9uZSwKLSAgICAgTm9uZSwKLSAgICAgJ01hY2hpbmVTSDQnLCAgIyAvTUFDSElORTpTSDQKLSAgICAgTm9uZSwKLSAgICAgJ01hY2hpbmVUSFVNQicsICAjIC9NQUNISU5FOlRIVU1CCi0gICAgICdNYWNoaW5lWDY0J10pICAjIC9NQUNISU5FOlg2NAotCi1fU2FtZShfbGluaywgJ0Fzc2VtYmx5RGVidWcnLAotICAgICAgX0VudW1lcmF0aW9uKFsnJywKLSAgICAgICAgICAgICAgICAgICAgJ3RydWUnLCAgIyAvQVNTRU1CTFlERUJVRwotICAgICAgICAgICAgICAgICAgICAnZmFsc2UnXSkpICAjIC9BU1NFTUJMWURFQlVHOkRJU0FCTEUKLV9TYW1lKF9saW5rLCAnQ0xSSW1hZ2VUeXBlJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ0RlZmF1bHQnLAotICAgICAgICAgICAgICAgICAgICAnRm9yY2VJSldJbWFnZScsICAjIC9DTFJJTUFHRVRZUEU6SUpXCi0gICAgICAgICAgICAgICAgICAgICdGb3JjZVB1cmVJTEltYWdlJywgICMgL1N3aXRjaD0iQ0xSSU1BR0VUWVBFOlBVUkUKLSAgICAgICAgICAgICAgICAgICAgJ0ZvcmNlU2FmZUlMSW1hZ2UnXSkpICAjIC9Td2l0Y2g9IkNMUklNQUdFVFlQRTpTQUZFCi1fU2FtZShfbGluaywgJ0NMUlRocmVhZEF0dHJpYnV0ZScsCi0gICAgICBfRW51bWVyYXRpb24oWydEZWZhdWx0VGhyZWFkaW5nQXR0cmlidXRlJywgICMgL0NMUlRIUkVBREFUVFJJQlVURTpOT05FCi0gICAgICAgICAgICAgICAgICAgICdNVEFUaHJlYWRpbmdBdHRyaWJ1dGUnLCAgIyAvQ0xSVEhSRUFEQVRUUklCVVRFOk1UQQotICAgICAgICAgICAgICAgICAgICAnU1RBVGhyZWFkaW5nQXR0cmlidXRlJ10pKSAgIyAvQ0xSVEhSRUFEQVRUUklCVVRFOlNUQQotX1NhbWUoX2xpbmssICdEYXRhRXhlY3V0aW9uUHJldmVudGlvbicsCi0gICAgICBfRW51bWVyYXRpb24oWycnLAotICAgICAgICAgICAgICAgICAgICAnZmFsc2UnLCAgIyAvTlhDT01QQVQ6Tk8KLSAgICAgICAgICAgICAgICAgICAgJ3RydWUnXSkpICAjIC9OWENPTVBBVAotX1NhbWUoX2xpbmssICdEcml2ZXInLAotICAgICAgX0VudW1lcmF0aW9uKFsnTm90U2V0JywKLSAgICAgICAgICAgICAgICAgICAgJ0RyaXZlcicsICAjIC9Ecml2ZXIKLSAgICAgICAgICAgICAgICAgICAgJ1VwT25seScsICAjIC9EUklWRVI6VVBPTkxZCi0gICAgICAgICAgICAgICAgICAgICdXRE0nXSkpICAjIC9EUklWRVI6V0RNCi1fU2FtZShfbGluaywgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nLAotICAgICAgX0VudW1lcmF0aW9uKFsnRGVmYXVsdCcsCi0gICAgICAgICAgICAgICAgICAgICdVc2VMaW5rVGltZUNvZGVHZW5lcmF0aW9uJywgICMgL0xUQ0cKLSAgICAgICAgICAgICAgICAgICAgJ1BHSW5zdHJ1bWVudCcsICAjIC9MVENHOlBHSW5zdHJ1bWVudAotICAgICAgICAgICAgICAgICAgICAnUEdPcHRpbWl6YXRpb24nLCAgIyAvTFRDRzpQR09wdGltaXplCi0gICAgICAgICAgICAgICAgICAgICdQR1VwZGF0ZSddKSkgICMgL0xUQ0c6UEdVcGRhdGUKLV9TYW1lKF9saW5rLCAnU2hvd1Byb2dyZXNzJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ05vdFNldCcsCi0gICAgICAgICAgICAgICAgICAgICdMaW5rVmVyYm9zZScsICAjIC9WRVJCT1NFCi0gICAgICAgICAgICAgICAgICAgICdMaW5rVmVyYm9zZUxpYiddLCAgIyAvVkVSQk9TRTpMaWIKLSAgICAgICAgICAgICAgICAgICBuZXc9WydMaW5rVmVyYm9zZUlDRicsICAjIC9WRVJCT1NFOklDRgotICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmtWZXJib3NlUkVGJywgICMgL1ZFUkJPU0U6UkVGCi0gICAgICAgICAgICAgICAgICAgICAgICAnTGlua1ZlcmJvc2VTQUZFU0VIJywgICMgL1ZFUkJPU0U6U0FGRVNFSAotICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmtWZXJib3NlQ0xSJ10pKSAgIyAvVkVSQk9TRTpDTFIKLV9TYW1lKF9saW5rLCAnU3ViU3lzdGVtJywgX3N1YnN5c3RlbV9lbnVtZXJhdGlvbikKLV9TYW1lKF9saW5rLCAnVGFyZ2V0TWFjaGluZScsIF90YXJnZXRfbWFjaGluZV9lbnVtZXJhdGlvbikKLV9TYW1lKF9saW5rLCAnVUFDRXhlY3V0aW9uTGV2ZWwnLAotICAgICAgX0VudW1lcmF0aW9uKFsnQXNJbnZva2VyJywgICMgL2xldmVsPSdhc0ludm9rZXInCi0gICAgICAgICAgICAgICAgICAgICdIaWdoZXN0QXZhaWxhYmxlJywgICMgL2xldmVsPSdoaWdoZXN0QXZhaWxhYmxlJwotICAgICAgICAgICAgICAgICAgICAnUmVxdWlyZUFkbWluaXN0cmF0b3InXSkpICAjIC9sZXZlbD0ncmVxdWlyZUFkbWluaXN0cmF0b3InCi0KLQotIyBPcHRpb25zIGZvdW5kIGluIE1TVlMgdGhhdCBoYXZlIGJlZW4gcmVuYW1lZCBpbiBNU0J1aWxkLgotX1JlbmFtZWQoX2xpbmssICdFcnJvclJlcG9ydGluZycsICdMaW5rRXJyb3JSZXBvcnRpbmcnLAotICAgICAgICAgX0VudW1lcmF0aW9uKFsnTm9FcnJvclJlcG9ydCcsICAjIC9FUlJPUlJFUE9SVDpOT05FCi0gICAgICAgICAgICAgICAgICAgICAgICdQcm9tcHRJbW1lZGlhdGVseScsICAjIC9FUlJPUlJFUE9SVDpQUk9NUFQKLSAgICAgICAgICAgICAgICAgICAgICAgJ1F1ZXVlRm9yTmV4dExvZ2luJ10sICAjIC9FUlJPUlJFUE9SVDpRVUVVRQotICAgICAgICAgICAgICAgICAgICAgIG5ldz1bJ1NlbmRFcnJvclJlcG9ydCddKSkgICMgL0VSUk9SUkVQT1JUOlNFTkQKLV9SZW5hbWVkKF9saW5rLCAnSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcycsICdJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMnLAotICAgICAgICAgX2ZpbGVfbGlzdCkgICMgL05PREVGQVVMVExJQgotX1JlbmFtZWQoX2xpbmssICdSZXNvdXJjZU9ubHlETEwnLCAnTm9FbnRyeVBvaW50JywgX2Jvb2xlYW4pICAjIC9OT0VOVFJZCi1fUmVuYW1lZChfbGluaywgJ1N3YXBSdW5Gcm9tTmV0JywgJ1N3YXBSdW5Gcm9tTkVUJywgX2Jvb2xlYW4pICAjIC9TV0FQUlVOOk5FVAotCi1fTW92ZWQoX2xpbmssICdHZW5lcmF0ZU1hbmlmZXN0JywgJycsIF9ib29sZWFuKQotX01vdmVkKF9saW5rLCAnSWdub3JlSW1wb3J0TGlicmFyeScsICcnLCBfYm9vbGVhbikKLV9Nb3ZlZChfbGluaywgJ0xpbmtJbmNyZW1lbnRhbCcsICcnLCBfbmV3bHlfYm9vbGVhbikKLV9Nb3ZlZChfbGluaywgJ0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzJywgJ1Byb2plY3RSZWZlcmVuY2UnLCBfYm9vbGVhbikKLV9Nb3ZlZChfbGluaywgJ1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzJywgJ1Byb2plY3RSZWZlcmVuY2UnLCBfYm9vbGVhbikKLQotIyBNU1ZTIG9wdGlvbnMgbm90IGZvdW5kIGluIE1TQnVpbGQuCi1fTVNWU09ubHkoX2xpbmssICdPcHRpbWl6ZUZvcldpbmRvd3M5OCcsIF9uZXdseV9ib29sZWFuKQotX01TVlNPbmx5KF9saW5rLCAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnLCBfYm9vbGVhbikKLSMgVE9ETyhqZWFubHVjKSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSBnZW51aW5lIHNldHRpbmdzIGJ1dCBieXByb2R1Y3RzIG9mIEd5cC4KLV9NU1ZTT25seShfbGluaywgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXNfZXhjbHVkZWQnLCBfZm9sZGVyX2xpc3QpCi0KLSMgTVNCdWlsZCBvcHRpb25zIG5vdCBmb3VuZCBpbiBNU1ZTLgotX01TQnVpbGRPbmx5KF9saW5rLCAnQnVpbGRpbmdJbklERScsIF9ib29sZWFuKQotX01TQnVpbGRPbmx5KF9saW5rLCAnSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnMnLCBfYm9vbGVhbikgICMgL1NBRkVTRUgKLV9NU0J1aWxkT25seShfbGluaywgJ0xpbmtETEwnLCBfYm9vbGVhbikgICMgL0RMTCBWaXNpYmxlPSdmYWxzZScKLV9NU0J1aWxkT25seShfbGluaywgJ0xpbmtTdGF0dXMnLCBfYm9vbGVhbikgICMgL0xUQ0c6U1RBVFVTCi1fTVNCdWlsZE9ubHkoX2xpbmssICdQcmV2ZW50RGxsQmluZGluZycsIF9ib29sZWFuKSAgIyAvQUxMT1dCSU5ECi1fTVNCdWlsZE9ubHkoX2xpbmssICdTdXBwb3J0Tm9iaW5kT2ZEZWxheUxvYWRlZERMTCcsIF9ib29sZWFuKSAgIyAvREVMQVk6Tk9CSU5ECi1fTVNCdWlsZE9ubHkoX2xpbmssICdUcmFja2VyTG9nRGlyZWN0b3J5JywgX2ZvbGRlcl9uYW1lKQotX01TQnVpbGRPbmx5KF9saW5rLCAnVHJlYXRMaW5rZXJXYXJuaW5nQXNFcnJvcnMnLCBfYm9vbGVhbikgICMgL1dYCi1fTVNCdWlsZE9ubHkoX2xpbmssICdNaW5pbXVtUmVxdWlyZWRWZXJzaW9uJywgX3N0cmluZykKLV9NU0J1aWxkT25seShfbGluaywgJ01TRE9TU3R1YkZpbGVOYW1lJywgX2ZpbGVfbmFtZSkgICMgL1NUVUIgVmlzaWJsZT0nZmFsc2UnCi1fTVNCdWlsZE9ubHkoX2xpbmssICdTZWN0aW9uQWxpZ25tZW50JywgX2ludGVnZXIpICAjIC9BTElHTgotX01TQnVpbGRPbmx5KF9saW5rLCAnU3BlY2lmeVNlY3Rpb25BdHRyaWJ1dGVzJywgX3N0cmluZykgICMgL1NFQ1RJT04KLV9NU0J1aWxkT25seShfbGluaywgJ0ZvcmNlRmlsZU91dHB1dCcsCi0gICAgICAgICAgICAgX0VudW1lcmF0aW9uKFtdLCBuZXc9WydFbmFibGVkJywgICMgL0ZPUkNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgL0ZPUkNFOk1VTFRJUExFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aXBseURlZmluZWRTeW1ib2xPbmx5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZGVmaW5lZFN5bWJvbE9ubHknXSkpICAjIC9GT1JDRTpVTlJFU09MVkVECi1fTVNCdWlsZE9ubHkoX2xpbmssICdDcmVhdGVIb3RQYXRjaGFibGVJbWFnZScsCi0gICAgICAgICAgICAgX0VudW1lcmF0aW9uKFtdLCBuZXc9WydFbmFibGVkJywgICMgL0ZVTkNUSU9OUEFETUlOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYODZJbWFnZScsICAjIC9GVU5DVElPTlBBRE1JTjo1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYNjRJbWFnZScsICAjIC9GVU5DVElPTlBBRE1JTjo2Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJdGFuaXVtSW1hZ2UnXSkpICAjIC9GVU5DVElPTlBBRE1JTjoxNgotX01TQnVpbGRPbmx5KF9saW5rLCAnQ0xSU3VwcG9ydExhc3RFcnJvcicsCi0gICAgICAgICAgICAgX0VudW1lcmF0aW9uKFtdLCBuZXc9WydFbmFibGVkJywgICMgL0NMUlN1cHBvcnRMYXN0RXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rpc2FibGVkJywgICMgL0NMUlN1cHBvcnRMYXN0RXJyb3I6Tk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAvQ0xSU3VwcG9ydExhc3RFcnJvcjpTWVNURU1ETEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N5c3RlbURsbHMnXSkpCi0KLQotIyBEaXJlY3RpdmVzIGZvciBjb252ZXJ0aW5nIFZDUmVzb3VyY2VDb21waWxlclRvb2wgdG8gUmVzb3VyY2VDb21waWxlLgotIyBTZWUgImM6XFByb2dyYW0gRmlsZXMgKHg4NilcTVNCdWlsZFxNaWNyb3NvZnQuQ3BwXHY0LjBcMTAzM1xyYy54bWwiIGZvcgotIyB0aGUgc2NoZW1hIG9mIHRoZSBNU0J1aWxkIFJlc291cmNlQ29tcGlsZSBzZXR0aW5ncy4KLQotX1NhbWUoX3JjLCAnQWRkaXRpb25hbE9wdGlvbnMnLCBfc3RyaW5nX2xpc3QpCi1fU2FtZShfcmMsICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJywgX2ZvbGRlcl9saXN0KSAgIyAvSQotX1NhbWUoX3JjLCAnQ3VsdHVyZScsIF9JbnRlZ2VyKG1zYnVpbGRfYmFzZT0xNikpCi1fU2FtZShfcmMsICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJywgX2Jvb2xlYW4pICAjIC9YCi1fU2FtZShfcmMsICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucycsIF9zdHJpbmdfbGlzdCkgICMgL0QKLV9TYW1lKF9yYywgJ1Jlc291cmNlT3V0cHV0RmlsZU5hbWUnLCBfc3RyaW5nKSAgIyAvZm8KLV9TYW1lKF9yYywgJ1Nob3dQcm9ncmVzcycsIF9ib29sZWFuKSAgIyAvdgotIyBUaGVyZSBpcyBubyBVSSBpbiBWaXN1YWxTdHVkaW8gMjAwOCB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgotIyBIb3dldmVyIHRoZXkgYXJlIGZvdW5kIGluIENMIGFuZCBvdGhlciB0b29scy4gIEluY2x1ZGUgdGhlbSBoZXJlIGZvcgotIyBjb21wbGV0ZW5lc3MsIGFzIHRoZXkgYXJlIHZlcnkgbGlrZWx5IHRvIGhhdmUgdGhlIHNhbWUgdXNhZ2UgcGF0dGVybi4KLV9TYW1lKF9yYywgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcicsIF9ib29sZWFuKSAgIyAvbm9sb2dvCi1fU2FtZShfcmMsICdVbmRlZmluZVByZXByb2Nlc3NvckRlZmluaXRpb25zJywgX3N0cmluZ19saXN0KSAgIyAvdQotCi0jIE1TQnVpbGQgb3B0aW9ucyBub3QgZm91bmQgaW4gTVNWUy4KLV9NU0J1aWxkT25seShfcmMsICdOdWxsVGVybWluYXRlU3RyaW5ncycsIF9ib29sZWFuKSAgIyAvbgotX01TQnVpbGRPbmx5KF9yYywgJ1RyYWNrZXJMb2dEaXJlY3RvcnknLCBfZm9sZGVyX25hbWUpCi0KLQotIyBEaXJlY3RpdmVzIGZvciBjb252ZXJ0aW5nIFZDTUlETFRvb2wgdG8gTWlkbC4KLSMgU2VlICJjOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1TQnVpbGRcTWljcm9zb2Z0LkNwcFx2NC4wXDEwMzNcbWlkbC54bWwiIGZvcgotIyB0aGUgc2NoZW1hIG9mIHRoZSBNU0J1aWxkIE1pZGwgc2V0dGluZ3MuCi0KLV9TYW1lKF9taWRsLCAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsIF9mb2xkZXJfbGlzdCkgICMgL0kKLV9TYW1lKF9taWRsLCAnQWRkaXRpb25hbE9wdGlvbnMnLCBfc3RyaW5nX2xpc3QpCi1fU2FtZShfbWlkbCwgJ0NQcmVwcm9jZXNzT3B0aW9ucycsIF9zdHJpbmcpICAjIC9jcHBfb3B0Ci1fU2FtZShfbWlkbCwgJ0Vycm9yQ2hlY2tBbGxvY2F0aW9ucycsIF9ib29sZWFuKSAgIyAvZXJyb3IgYWxsb2NhdGlvbgotX1NhbWUoX21pZGwsICdFcnJvckNoZWNrQm91bmRzJywgX2Jvb2xlYW4pICAjIC9lcnJvciBib3VuZHNfY2hlY2sKLV9TYW1lKF9taWRsLCAnRXJyb3JDaGVja0VudW1SYW5nZScsIF9ib29sZWFuKSAgIyAvZXJyb3IgZW51bQotX1NhbWUoX21pZGwsICdFcnJvckNoZWNrUmVmUG9pbnRlcnMnLCBfYm9vbGVhbikgICMgL2Vycm9yIHJlZgotX1NhbWUoX21pZGwsICdFcnJvckNoZWNrU3R1YkRhdGEnLCBfYm9vbGVhbikgICMgL2Vycm9yIHN0dWJfZGF0YQotX1NhbWUoX21pZGwsICdHZW5lcmF0ZVN0dWJsZXNzUHJveGllcycsIF9ib29sZWFuKSAgIyAvT2ljZgotX1NhbWUoX21pZGwsICdHZW5lcmF0ZVR5cGVMaWJyYXJ5JywgX2Jvb2xlYW4pCi1fU2FtZShfbWlkbCwgJ0hlYWRlckZpbGVOYW1lJywgX2ZpbGVfbmFtZSkgICMgL2gKLV9TYW1lKF9taWRsLCAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCcsIF9ib29sZWFuKSAgIyAvbm9fZGVmX2lkaXIKLV9TYW1lKF9taWRsLCAnSW50ZXJmYWNlSWRlbnRpZmllckZpbGVOYW1lJywgX2ZpbGVfbmFtZSkgICMgL2lpZAotX1NhbWUoX21pZGwsICdNa1R5cExpYkNvbXBhdGlibGUnLCBfYm9vbGVhbikgICMgL21rdHlwbGliMjAzCi1fU2FtZShfbWlkbCwgJ091dHB1dERpcmVjdG9yeScsIF9zdHJpbmcpICAjIC9vdXQKLV9TYW1lKF9taWRsLCAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnLCBfc3RyaW5nX2xpc3QpICAjIC9ECi1fU2FtZShfbWlkbCwgJ1Byb3h5RmlsZU5hbWUnLCBfZmlsZV9uYW1lKSAgIyAvcHJveHkKLV9TYW1lKF9taWRsLCAnUmVkaXJlY3RPdXRwdXRBbmRFcnJvcnMnLCBfZmlsZV9uYW1lKSAgIyAvbwotX1NhbWUoX21pZGwsICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInLCBfYm9vbGVhbikgICMgL25vbG9nbwotX1NhbWUoX21pZGwsICdUeXBlTGlicmFyeU5hbWUnLCBfZmlsZV9uYW1lKSAgIyAvdGxiCi1fU2FtZShfbWlkbCwgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnLCBfc3RyaW5nX2xpc3QpICAjIC9VCi1fU2FtZShfbWlkbCwgJ1dhcm5Bc0Vycm9yJywgX2Jvb2xlYW4pICAjIC9XWAotCi1fU2FtZShfbWlkbCwgJ0RlZmF1bHRDaGFyVHlwZScsCi0gICAgICBfRW51bWVyYXRpb24oWydVbnNpZ25lZCcsICAjIC9jaGFyIHVuc2lnbmVkCi0gICAgICAgICAgICAgICAgICAgICdTaWduZWQnLCAgIyAvY2hhciBzaWduZWQKLSAgICAgICAgICAgICAgICAgICAgJ0FzY2lpJ10pKSAgIyAvY2hhciBhc2NpaTcKLV9TYW1lKF9taWRsLCAnVGFyZ2V0RW52aXJvbm1lbnQnLAotICAgICAgX0VudW1lcmF0aW9uKFsnTm90U2V0JywKLSAgICAgICAgICAgICAgICAgICAgJ1dpbjMyJywgICMgL2VudiB3aW4zMgotICAgICAgICAgICAgICAgICAgICAnSXRhbml1bScsICAjIC9lbnYgaWE2NAotICAgICAgICAgICAgICAgICAgICAnWDY0J10pKSAgIyAvZW52IHg2NAotX1NhbWUoX21pZGwsICdFbmFibGVFcnJvckNoZWNrcycsCi0gICAgICBfRW51bWVyYXRpb24oWydFbmFibGVDdXN0b20nLAotICAgICAgICAgICAgICAgICAgICAnTm9uZScsICAjIC9lcnJvciBub25lCi0gICAgICAgICAgICAgICAgICAgICdBbGwnXSkpICAjIC9lcnJvciBhbGwKLV9TYW1lKF9taWRsLCAnU3RydWN0TWVtYmVyQWxpZ25tZW50JywKLSAgICAgIF9FbnVtZXJhdGlvbihbJ05vdFNldCcsCi0gICAgICAgICAgICAgICAgICAgICcxJywgICMgWnAxCi0gICAgICAgICAgICAgICAgICAgICcyJywgICMgWnAyCi0gICAgICAgICAgICAgICAgICAgICc0JywgICMgWnA0Ci0gICAgICAgICAgICAgICAgICAgICc4J10pKSAgIyBacDgKLV9TYW1lKF9taWRsLCAnV2FybmluZ0xldmVsJywKLSAgICAgIF9FbnVtZXJhdGlvbihbJzAnLCAgIyAvVzAKLSAgICAgICAgICAgICAgICAgICAgJzEnLCAgIyAvVzEKLSAgICAgICAgICAgICAgICAgICAgJzInLCAgIyAvVzIKLSAgICAgICAgICAgICAgICAgICAgJzMnLCAgIyAvVzMKLSAgICAgICAgICAgICAgICAgICAgJzQnXSkpICAjIC9XNAotCi1fUmVuYW1lZChfbWlkbCwgJ0RMTERhdGFGaWxlTmFtZScsICdEbGxEYXRhRmlsZU5hbWUnLCBfZmlsZV9uYW1lKSAgIyAvZGxsZGF0YQotX1JlbmFtZWQoX21pZGwsICdWYWxpZGF0ZVBhcmFtZXRlcnMnLCAnVmFsaWRhdGVBbGxQYXJhbWV0ZXJzJywKLSAgICAgICAgIF9ib29sZWFuKSAgIyAvcm9idXN0Ci0KLSMgTVNCdWlsZCBvcHRpb25zIG5vdCBmb3VuZCBpbiBNU1ZTLgotX01TQnVpbGRPbmx5KF9taWRsLCAnQXBwbGljYXRpb25Db25maWd1cmF0aW9uTW9kZScsIF9ib29sZWFuKSAgIyAvYXBwX2NvbmZpZwotX01TQnVpbGRPbmx5KF9taWRsLCAnQ2xpZW50U3R1YkZpbGUnLCBfZmlsZV9uYW1lKSAgIyAvY3N0dWIKLV9NU0J1aWxkT25seShfbWlkbCwgJ0dlbmVyYXRlQ2xpZW50RmlsZXMnLAotICAgICAgICAgICAgIF9FbnVtZXJhdGlvbihbXSwgbmV3PVsnU3R1YicsICAjIC9jbGllbnQgc3R1YgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uZSddKSkgICMgL2NsaWVudCBub25lCi1fTVNCdWlsZE9ubHkoX21pZGwsICdHZW5lcmF0ZVNlcnZlckZpbGVzJywKLSAgICAgICAgICAgICBfRW51bWVyYXRpb24oW10sIG5ldz1bJ1N0dWInLCAgIyAvY2xpZW50IHN0dWIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vbmUnXSkpICAjIC9jbGllbnQgbm9uZQotX01TQnVpbGRPbmx5KF9taWRsLCAnTG9jYWxlSUQnLCBfaW50ZWdlcikgICMgL2xjaWQgREVDSU1BTAotX01TQnVpbGRPbmx5KF9taWRsLCAnU2VydmVyU3R1YkZpbGUnLCBfZmlsZV9uYW1lKSAgIyAvc3N0dWIKLV9NU0J1aWxkT25seShfbWlkbCwgJ1N1cHByZXNzQ29tcGlsZXJXYXJuaW5ncycsIF9ib29sZWFuKSAgIyAvbm9fd2FybgotX01TQnVpbGRPbmx5KF9taWRsLCAnVHJhY2tlckxvZ0RpcmVjdG9yeScsIF9mb2xkZXJfbmFtZSkKLV9NU0J1aWxkT25seShfbWlkbCwgJ1R5cGVMaWJGb3JtYXQnLAotICAgICAgICAgICAgIF9FbnVtZXJhdGlvbihbXSwgbmV3PVsnTmV3Rm9ybWF0JywgICMgL25ld3RsYgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT2xkRm9ybWF0J10pKSAgIyAvb2xkdGxiCi0KLQotIyBEaXJlY3RpdmVzIGZvciBjb252ZXJ0aW5nIFZDTGlicmFyaWFuVG9vbCB0byBMaWIuCi0jIFNlZSAiYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNU0J1aWxkXE1pY3Jvc29mdC5DcHBcdjQuMFwxMDMzXGxpYi54bWwiIGZvcgotIyB0aGUgc2NoZW1hIG9mIHRoZSBNU0J1aWxkIExpYiBzZXR0aW5ncy4KLQotX1NhbWUoX2xpYiwgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnLCBfZmlsZV9saXN0KQotX1NhbWUoX2xpYiwgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnLCBfZm9sZGVyX2xpc3QpICAjIC9MSUJQQVRICi1fU2FtZShfbGliLCAnQWRkaXRpb25hbE9wdGlvbnMnLCBfc3RyaW5nX2xpc3QpCi1fU2FtZShfbGliLCAnRXhwb3J0TmFtZWRGdW5jdGlvbnMnLCBfc3RyaW5nX2xpc3QpICAjIC9FWFBPUlQKLV9TYW1lKF9saWIsICdGb3JjZVN5bWJvbFJlZmVyZW5jZXMnLCBfc3RyaW5nKSAgIyAvSU5DTFVERQotX1NhbWUoX2xpYiwgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnLCBfYm9vbGVhbikgICMgL05PREVGQVVMVExJQgotX1NhbWUoX2xpYiwgJ0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcycsIF9maWxlX2xpc3QpICAjIC9OT0RFRkFVTFRMSUIKLV9TYW1lKF9saWIsICdNb2R1bGVEZWZpbml0aW9uRmlsZScsIF9maWxlX25hbWUpICAjIC9ERUYKLV9TYW1lKF9saWIsICdPdXRwdXRGaWxlJywgX2ZpbGVfbmFtZSkgICMgL09VVAotX1NhbWUoX2xpYiwgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcicsIF9ib29sZWFuKSAgIyAvTk9MT0dPCi1fU2FtZShfbGliLCAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnLCBfYm9vbGVhbikKLV9TYW1lKF9saWIsICdMaW5rVGltZUNvZGVHZW5lcmF0aW9uJywgX2Jvb2xlYW4pICAjIC9MVENHCi0KLSMgVE9ETyhqZWFubHVjKSBfbGluayBkZWZpbmVzIHRoZSBzYW1lIHZhbHVlIHRoYXQgZ2V0cyBtb3ZlZCB0bwotIyBQcm9qZWN0UmVmZXJlbmNlLiAgV2UgbWF5IHdhbnQgdG8gdmFsaWRhdGUgdGhhdCB0aGV5IGFyZSBjb25zaXN0ZW50LgotX01vdmVkKF9saWIsICdMaW5rTGlicmFyeURlcGVuZGVuY2llcycsICdQcm9qZWN0UmVmZXJlbmNlJywgX2Jvb2xlYW4pCi0KLSMgVE9ETyhqZWFubHVjKSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSBnZW51aW5lIHNldHRpbmdzIGJ1dCBieXByb2R1Y3RzIG9mIEd5cC4KLV9NU1ZTT25seShfbGliLCAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllc19leGNsdWRlZCcsIF9mb2xkZXJfbGlzdCkKLQotX01TQnVpbGRPbmx5KF9saWIsICdEaXNwbGF5TGlicmFyeScsIF9zdHJpbmcpICAjIC9MSVNUIFZpc2libGU9J2ZhbHNlJwotX01TQnVpbGRPbmx5KF9saWIsICdFcnJvclJlcG9ydGluZycsCi0gICAgICAgICAgICAgX0VudW1lcmF0aW9uKFtdLCBuZXc9WydQcm9tcHRJbW1lZGlhdGVseScsICAjIC9FUlJPUlJFUE9SVDpQUk9NUFQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1F1ZXVlRm9yTmV4dExvZ2luJywgICMgL0VSUk9SUkVQT1JUOlFVRVVFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTZW5kRXJyb3JSZXBvcnQnLCAgIyAvRVJST1JSRVBPUlQ6U0VORAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm9FcnJvclJlcG9ydCddKSkgICMgL0VSUk9SUkVQT1JUOk5PTkUKLV9NU0J1aWxkT25seShfbGliLCAnTWluaW11bVJlcXVpcmVkVmVyc2lvbicsIF9zdHJpbmcpCi1fTVNCdWlsZE9ubHkoX2xpYiwgJ05hbWUnLCBfZmlsZV9uYW1lKSAgIyAvTkFNRQotX01TQnVpbGRPbmx5KF9saWIsICdSZW1vdmVPYmplY3RzJywgX2ZpbGVfbGlzdCkgICMgL1JFTU9WRQotX01TQnVpbGRPbmx5KF9saWIsICdTdWJTeXN0ZW0nLCBfc3Vic3lzdGVtX2VudW1lcmF0aW9uKQotX01TQnVpbGRPbmx5KF9saWIsICdUYXJnZXRNYWNoaW5lJywgX3RhcmdldF9tYWNoaW5lX2VudW1lcmF0aW9uKQotX01TQnVpbGRPbmx5KF9saWIsICdUcmFja2VyTG9nRGlyZWN0b3J5JywgX2ZvbGRlcl9uYW1lKQotX01TQnVpbGRPbmx5KF9saWIsICdUcmVhdExpYldhcm5pbmdBc0Vycm9ycycsIF9ib29sZWFuKSAgIyAvV1gKLV9NU0J1aWxkT25seShfbGliLCAnVmVyYm9zZScsIF9ib29sZWFuKQotCi0KLSMgRGlyZWN0aXZlcyBmb3IgY29udmVydGluZyBWQ01hbmlmZXN0VG9vbCB0byBNdC4KLSMgU2VlICJjOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1TQnVpbGRcTWljcm9zb2Z0LkNwcFx2NC4wXDEwMzNcbXQueG1sIiBmb3IKLSMgdGhlIHNjaGVtYSBvZiB0aGUgTVNCdWlsZCBMaWIgc2V0dGluZ3MuCi0KLSMgT3B0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBpbiBNU1ZTIGFuZCBNU0J1aWxkCi1fU2FtZShfbWFuaWZlc3QsICdBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcycsIF9maWxlX2xpc3QpICAjIC9tYW5pZmVzdAotX1NhbWUoX21hbmlmZXN0LCAnQWRkaXRpb25hbE9wdGlvbnMnLCBfc3RyaW5nX2xpc3QpCi1fU2FtZShfbWFuaWZlc3QsICdBc3NlbWJseUlkZW50aXR5JywgX3N0cmluZykgICMgL2lkZW50aXR5OgotX1NhbWUoX21hbmlmZXN0LCAnQ29tcG9uZW50RmlsZU5hbWUnLCBfZmlsZV9uYW1lKSAgIyAvZGxsCi1fU2FtZShfbWFuaWZlc3QsICdHZW5lcmF0ZUNhdGFsb2dGaWxlcycsIF9ib29sZWFuKSAgIyAvbWFrZWNkZnMKLV9TYW1lKF9tYW5pZmVzdCwgJ0lucHV0UmVzb3VyY2VNYW5pZmVzdHMnLCBfc3RyaW5nKSAgIyAvaW5wdXRyZXNvdXJjZQotX1NhbWUoX21hbmlmZXN0LCAnT3V0cHV0TWFuaWZlc3RGaWxlJywgX2ZpbGVfbmFtZSkgICMgL291dAotX1NhbWUoX21hbmlmZXN0LCAnUmVnaXN0cmFyU2NyaXB0RmlsZScsIF9maWxlX25hbWUpICAjIC9yZ3MKLV9TYW1lKF9tYW5pZmVzdCwgJ1JlcGxhY2VtZW50c0ZpbGUnLCBfZmlsZV9uYW1lKSAgIyAvcmVwbGFjZW1lbnRzCi1fU2FtZShfbWFuaWZlc3QsICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInLCBfYm9vbGVhbikgICMgL25vbG9nbwotX1NhbWUoX21hbmlmZXN0LCAnVHlwZUxpYnJhcnlGaWxlJywgX2ZpbGVfbmFtZSkgICMgL3RsYjoKLV9TYW1lKF9tYW5pZmVzdCwgJ1VwZGF0ZUZpbGVIYXNoZXMnLCBfYm9vbGVhbikgICMgL2hhc2h1cGRhdGUKLV9TYW1lKF9tYW5pZmVzdCwgJ1VwZGF0ZUZpbGVIYXNoZXNTZWFyY2hQYXRoJywgX2ZpbGVfbmFtZSkKLV9TYW1lKF9tYW5pZmVzdCwgJ1ZlcmJvc2VPdXRwdXQnLCBfYm9vbGVhbikgICMgL3ZlcmJvc2UKLQotIyBPcHRpb25zIHRoYXQgaGF2ZSBtb3ZlZCBsb2NhdGlvbi4KLV9Nb3ZlZEFuZFJlbmFtZWQoX21hbmlmZXN0LCAnTWFuaWZlc3RSZXNvdXJjZUZpbGUnLAotICAgICAgICAgICAgICAgICAnTWFuaWZlc3RSZXNvdXJjZUNvbXBpbGUnLAotICAgICAgICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZScsCi0gICAgICAgICAgICAgICAgIF9maWxlX25hbWUpCi1fTW92ZWQoX21hbmlmZXN0LCAnRW1iZWRNYW5pZmVzdCcsICcnLCBfYm9vbGVhbikKLQotIyBNU1ZTIG9wdGlvbnMgbm90IGZvdW5kIGluIE1TQnVpbGQuCi1fTVNWU09ubHkoX21hbmlmZXN0LCAnRGVwZW5kZW5jeUluZm9ybWF0aW9uRmlsZScsIF9maWxlX25hbWUpCi1fTVNWU09ubHkoX21hbmlmZXN0LCAnVXNlRkFUMzJXb3JrYXJvdW5kJywgX2Jvb2xlYW4pCi1fTVNWU09ubHkoX21hbmlmZXN0LCAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnLCBfYm9vbGVhbikKLQotIyBNU0J1aWxkIG9wdGlvbnMgbm90IGZvdW5kIGluIE1TVlMuCi1fTVNCdWlsZE9ubHkoX21hbmlmZXN0LCAnRW5hYmxlRFBJQXdhcmVuZXNzJywgX2Jvb2xlYW4pCi1fTVNCdWlsZE9ubHkoX21hbmlmZXN0LCAnR2VuZXJhdGVDYXRlZ29yeVRhZ3MnLCBfYm9vbGVhbikgICMgL2NhdGVnb3J5Ci1fTVNCdWlsZE9ubHkoX21hbmlmZXN0LCAnTWFuaWZlc3RGcm9tTWFuYWdlZEFzc2VtYmx5JywKLSAgICAgICAgICAgICBfZmlsZV9uYW1lKSAgIyAvbWFuYWdlZGFzc2VtYmx5bmFtZQotX01TQnVpbGRPbmx5KF9tYW5pZmVzdCwgJ091dHB1dFJlc291cmNlTWFuaWZlc3RzJywgX3N0cmluZykgICMgL291dHB1dHJlc291cmNlCi1fTVNCdWlsZE9ubHkoX21hbmlmZXN0LCAnU3VwcHJlc3NEZXBlbmRlbmN5RWxlbWVudCcsIF9ib29sZWFuKSAgIyAvbm9kZXBlbmRlbmN5Ci1fTVNCdWlsZE9ubHkoX21hbmlmZXN0LCAnVHJhY2tlckxvZ0RpcmVjdG9yeScsIF9mb2xkZXJfbmFtZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1NldHRpbmdzX3Rlc3QucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL01TVlNTZXR0aW5nc190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MmZmN2MzLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1NldHRpbmdzX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDc5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIHRoZSBNU1ZTU2V0dGluZ3MucHkgZmlsZS4iIiIKLQotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBneXAuTVNWU1NldHRpbmdzIGFzIE1TVlNTZXR0aW5ncwotCi0KLWNsYXNzIFRlc3RTZXF1ZW5jZUZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgZGVmIHNldFVwKHNlbGYpOgotICAgIHNlbGYuc3RkZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotCi0gIGRlZiBfRXhwZWN0ZWRXYXJuaW5ncyhzZWxmLCBleHBlY3RlZCk6Ci0gICAgIiIiQ29tcGFyZXMgcmVjb3JkZWQgbGluZXMgdG8gZXhwZWN0ZWQgd2FybmluZ3MuIiIiCi0gICAgc2VsZi5zdGRlcnIuc2VlaygwKQotICAgIGFjdHVhbCA9IHNlbGYuc3RkZXJyLnJlYWQoKS5zcGxpdCgnXG4nKQotICAgIGFjdHVhbCA9IFtsaW5lIGZvciBsaW5lIGluIGFjdHVhbCBpZiBsaW5lXQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVjdGVkKSwgc29ydGVkKGFjdHVhbCkpCi0KLSAgZGVmIHRlc3RWYWxpZGF0ZU1TVlNTZXR0aW5nc190b29sX25hbWVzKHNlbGYpOgotICAgICIiIlRlc3RzIHRoYXQgb25seSBNU1ZTIHRvb2wgbmFtZXMgYXJlIGFsbG93ZWQuIiIiCi0gICAgTVNWU1NldHRpbmdzLlZhbGlkYXRlTVNWU1NldHRpbmdzKAotICAgICAgICB7J1ZDQ0xDb21waWxlclRvb2wnOiB7fSwKLSAgICAgICAgICdWQ0xpbmtlclRvb2wnOiB7fSwKLSAgICAgICAgICdWQ01JRExUb29sJzoge30sCi0gICAgICAgICAnZm9vJzoge30sCi0gICAgICAgICAnVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCc6IHt9LAotICAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHt9LAotICAgICAgICAgJ1ZDTWFuaWZlc3RUb29sJzoge30sCi0gICAgICAgICAnQ2xDb21waWxlJzoge319LAotICAgICAgICBzZWxmLnN0ZGVycikKLSAgICBzZWxmLl9FeHBlY3RlZFdhcm5pbmdzKFsKLSAgICAgICAgJ1dhcm5pbmc6IHVucmVjb2duaXplZCB0b29sIGZvbycsCi0gICAgICAgICdXYXJuaW5nOiB1bnJlY29nbml6ZWQgdG9vbCBDbENvbXBpbGUnXSkKLQotICBkZWYgdGVzdFZhbGlkYXRlTVNWU1NldHRpbmdzX3NldHRpbmdzKHNlbGYpOgotICAgICIiIlRlc3RzIHRoYXQgZm9yIGludmFsaWQgTVNWUyBzZXR0aW5ncy4iIiIKLSAgICBNU1ZTU2V0dGluZ3MuVmFsaWRhdGVNU1ZTU2V0dGluZ3MoCi0gICAgICAgIHsnVkNDTENvbXBpbGVyVG9vbCc6IHsKLSAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbJ3N0cmluZzEnLCAnc3RyaW5nMiddLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxVc2luZ0RpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAnQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdBc3NlbWJsZXJPdXRwdXQnOiAnMCcsCi0gICAgICAgICAgICAnQmFzaWNSdW50aW1lQ2hlY2tzJzogJzUnLAotICAgICAgICAgICAgJ0Jyb3dzZUluZm9ybWF0aW9uJzogJ2Zka3NsaicsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb25GaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdCdWZmZXJTZWN1cml0eUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ0NhbGxpbmdDb252ZW50aW9uJzogJy0xJywKLSAgICAgICAgICAgICdDb21waWxlQXMnOiAnMScsCi0gICAgICAgICAgICAnRGVidWdJbmZvcm1hdGlvbkZvcm1hdCc6ICcyJywKLSAgICAgICAgICAgICdEZWZhdWx0Q2hhcklzVW5zaWduZWQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRGlzYWJsZVNwZWNpZmljV2FybmluZ3MnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICdFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0JzogJzEnLAotICAgICAgICAgICAgJ0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmcnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZVBSRWZhc3QnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRW5hYmxlcHJlZmFzdCc6ICdib2d1cycsCi0gICAgICAgICAgICAnRXJyb3JSZXBvcnRpbmcnOiAnMScsCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnMScsCi0gICAgICAgICAgICAnRXhwYW5kQXR0cmlidXRlZFNvdXJjZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdGYXZvclNpemVPclNwZWVkJzogJzEnLAotICAgICAgICAgICAgJ0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Zsb2F0aW5nUG9pbnRNb2RlbCc6ICcxJywKLSAgICAgICAgICAgICdGb3JjZUNvbmZvcm1hbmNlSW5Gb3JMb29wU2NvcGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRm9yY2VkSW5jbHVkZUZpbGVzJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICdGb3JjZWRVc2luZ0ZpbGVzJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGUnOiAnMScsCi0gICAgICAgICAgICAnR2VuZXJhdGVYTUxEb2N1bWVudGF0aW9uRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbic6ICcxJywKLSAgICAgICAgICAgICdLZWVwQ29tbWVudHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT2JqZWN0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnT21pdERlZmF1bHRMaWJOYW1lJzogJ3RydWUnLAotICAgICAgICAgICAgJ09taXRGcmFtZVBvaW50ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgJ09wZW5NUCc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnMScsCi0gICAgICAgICAgICAnUHJlY29tcGlsZWRIZWFkZXJGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdQcmVjb21waWxlZEhlYWRlclRocm91Z2gnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ3N0cmluZzE7c3RyaW5nMicsCi0gICAgICAgICAgICAnUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzEnLAotICAgICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAgICdTaG93SW5jbHVkZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU21hbGxlclR5cGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICcxJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdVbmRlZmluZUFsbFByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICdVc2VGdWxsUGF0aHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlUHJlY29tcGlsZWRIZWFkZXInOiAnMScsCi0gICAgICAgICAgICAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnV2FybkFzRXJyb3InOiAndHJ1ZScsCi0gICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJzEnLAotICAgICAgICAgICAgJ1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdYTUxEb2N1bWVudGF0aW9uRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1paWFlaJzogJ2JvZ3VzJ30sCi0gICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdBZGRNb2R1bGVOYW1lc1RvQXNzZW1ibHknOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdBbGxvd0lzb2xhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnQXNzZW1ibHlEZWJ1Zyc6ICcyJywKLSAgICAgICAgICAgICAnQXNzZW1ibHlMaW5rUmVzb3VyY2UnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdCYXNlQWRkcmVzcyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdDTFJJbWFnZVR5cGUnOiAnMicsCi0gICAgICAgICAgICAgJ0NMUlRocmVhZEF0dHJpYnV0ZSc6ICcyJywKLSAgICAgICAgICAgICAnQ0xSVW5tYW5hZ2VkQ29kZUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgICdEYXRhRXhlY3V0aW9uUHJldmVudGlvbic6ICcyJywKLSAgICAgICAgICAgICAnRGVsYXlMb2FkRExMcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0RlbGF5U2lnbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnRHJpdmVyJzogJzInLAotICAgICAgICAgICAgICdFbWJlZE1hbmFnZWRSZXNvdXJjZUZpbGUnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdFbmFibGVDT01EQVRGb2xkaW5nJzogJzInLAotICAgICAgICAgICAgICdFbmFibGVVQUMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0VudHJ5UG9pbnRTeW1ib2wnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnRXJyb3JSZXBvcnRpbmcnOiAnMicsCi0gICAgICAgICAgICAgJ0ZpeGVkQmFzZUFkZHJlc3MnOiAnMicsCi0gICAgICAgICAgICAgJ0ZvcmNlU3ltYm9sUmVmZXJlbmNlcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0Z1bmN0aW9uT3JkZXInOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0dlbmVyYXRlTWFuaWZlc3QnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0dlbmVyYXRlTWFwRmlsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSGVhcENvbW1pdFNpemUnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnSGVhcFJlc2VydmVTaXplJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0lnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdJZ25vcmVFbWJlZGRlZElETCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSWdub3JlSW1wb3J0TGlicmFyeSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSW1wb3J0TGlicmFyeSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0tleUNvbnRhaW5lcic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0tleUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdMYXJnZUFkZHJlc3NBd2FyZSc6ICcyJywKLSAgICAgICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJzInLAotICAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnTGlua1RpbWVDb2RlR2VuZXJhdGlvbic6ICcyJywKLSAgICAgICAgICAgICAnTWFuaWZlc3RGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnTWFwRXhwb3J0cyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnTWFwRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdNZXJnZWRJRExCYXNlRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdNZXJnZVNlY3Rpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ01pZGxDb21tYW5kRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ01vZHVsZURlZmluaXRpb25GaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnT3B0aW1pemVGb3JXaW5kb3dzOTgnOiAnMScsCi0gICAgICAgICAgICAgJ09wdGltaXplUmVmZXJlbmNlcyc6ICcyJywKLSAgICAgICAgICAgICAnT3V0cHV0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1BlclVzZXJSZWRpcmVjdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnUHJvZmlsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnUHJvZmlsZUd1aWRlZERhdGFiYXNlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnUHJvZ3JhbURhdGFiYXNlRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1JhbmRvbWl6ZWRCYXNlQWRkcmVzcyc6ICcyJywKLSAgICAgICAgICAgICAnUmVnaXN0ZXJPdXRwdXQnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1Jlc291cmNlT25seURMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnU2V0Q2hlY2tzdW0nOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1Nob3dQcm9ncmVzcyc6ICcyJywKLSAgICAgICAgICAgICAnU3RhY2tDb21taXRTaXplJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ1N0YWNrUmVzZXJ2ZVNpemUnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnU3RyaXBQcml2YXRlU3ltYm9scyc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICcyJywKLSAgICAgICAgICAgICAnU3VwcG9ydFVubG9hZE9mRGVsYXlMb2FkZWRETEwnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnU3dhcFJ1bkZyb21DRCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnU3dhcFJ1bkZyb21OZXQnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1RhcmdldE1hY2hpbmUnOiAnMicsCi0gICAgICAgICAgICAgJ1Rlcm1pbmFsU2VydmVyQXdhcmUnOiAnMicsCi0gICAgICAgICAgICAgJ1R1cm5PZmZBc3NlbWJseUdlbmVyYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5UmVzb3VyY2VJRCc6ICczMycsCi0gICAgICAgICAgICAgJ1VBQ0V4ZWN1dGlvbkxldmVsJzogJzInLAotICAgICAgICAgICAgICdVQUNVSUFjY2Vzcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1VzZVVuaWNvZGVSZXNwb25zZUZpbGVzJzogJ3RydWUnLAotICAgICAgICAgICAgICdWZXJzaW9uJzogJ2Egc3RyaW5nMSd9LAotICAgICAgICAgJ1ZDTUlETFRvb2wnOiB7Ci0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyJywKLSAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnQ1ByZXByb2Nlc3NPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0RlZmF1bHRDaGFyVHlwZSc6ICcxJywKLSAgICAgICAgICAgICAnRExMRGF0YUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnRW5hYmxlRXJyb3JDaGVja3MnOiAnMScsCi0gICAgICAgICAgICAgJ0Vycm9yQ2hlY2tBbGxvY2F0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnRXJyb3JDaGVja0JvdW5kcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnRXJyb3JDaGVja0VudW1SYW5nZSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnRXJyb3JDaGVja1JlZlBvaW50ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgICdFcnJvckNoZWNrU3R1YkRhdGEnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0dlbmVyYXRlU3R1Ymxlc3NQcm94aWVzJzogJ3RydWUnLAotICAgICAgICAgICAgICdHZW5lcmF0ZVR5cGVMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgICAgICdIZWFkZXJGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0ludGVyZmFjZUlkZW50aWZpZXJGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ01rVHlwTGliQ29tcGF0aWJsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnbm90Z29vZCc6ICdib2d1cycsCi0gICAgICAgICAgICAgJ091dHB1dERpcmVjdG9yeSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdzdHJpbmcxO3N0cmluZzInLAotICAgICAgICAgICAgICdQcm94eUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnUmVkaXJlY3RPdXRwdXRBbmRFcnJvcnMnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdTdHJ1Y3RNZW1iZXJBbGlnbm1lbnQnOiAnMScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVGFyZ2V0RW52aXJvbm1lbnQnOiAnMScsCi0gICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5TmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICAnVmFsaWRhdGVQYXJhbWV0ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJzEnfSwKLSAgICAgICAgICdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAgJ0N1bHR1cmUnOiAnMTAwMycsCi0gICAgICAgICAgICAgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ25vdGdvb2QyJzogJ2JvZ3VzJywKLSAgICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdTaG93UHJvZ3Jlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdzdHJpbmcxO3N0cmluZzInfSwKLSAgICAgICAgICdWQ0xpYnJhcmlhblRvb2wnOiB7Ci0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0V4cG9ydE5hbWVkRnVuY3Rpb25zJzogJ3N0cmluZzE7c3RyaW5nMicsCi0gICAgICAgICAgICAgJ0ZvcmNlU3ltYm9sUmVmZXJlbmNlcyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzJzogJ3RydWUnLAotICAgICAgICAgICAgICdJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnTW9kdWxlRGVmaW5pdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdPdXRwdXRGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgICdVc2VVbmljb2RlUmVzcG9uc2VGaWxlcyc6ICd0cnVlJ30sCi0gICAgICAgICAnVkNNYW5pZmVzdFRvb2wnOiB7Ci0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdEZpbGVzJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnQXNzZW1ibHlJZGVudGl0eSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdDb21wb25lbnRGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0RlcGVuZGVuY3lJbmZvcm1hdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdHZW5lcmF0ZUNhdGFsb2dGaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSW5wdXRSZXNvdXJjZU1hbmlmZXN0cyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdNYW5pZmVzdFJlc291cmNlRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ091dHB1dE1hbmlmZXN0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1JlZ2lzdHJhclNjcmlwdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdSZXBsYWNlbWVudHNGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdVcGRhdGVGaWxlSGFzaGVzJzogJ3RydWVsJywKLSAgICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlc1NlYXJjaFBhdGgnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdVc2VGQVQzMldvcmthcm91bmQnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1VzZVVuaWNvZGVSZXNwb25zZUZpbGVzJzogJ3RydWUnLAotICAgICAgICAgICAgICdWZXJib3NlT3V0cHV0JzogJ3RydWUnfX0sCi0gICAgICAgIHNlbGYuc3RkZXJyKQotICAgIHNlbGYuX0V4cGVjdGVkV2FybmluZ3MoWwotICAgICAgICAnV2FybmluZzogZm9yIFZDQ0xDb21waWxlclRvb2wvQmFzaWNSdW50aW1lQ2hlY2tzLCAnCi0gICAgICAgICdpbmRleCB2YWx1ZSAoNSkgbm90IGluIGV4cGVjdGVkIHJhbmdlIFswLCA0KScsCi0gICAgICAgICdXYXJuaW5nOiBmb3IgVkNDTENvbXBpbGVyVG9vbC9Ccm93c2VJbmZvcm1hdGlvbiwgJwotICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgMTA6ICdmZGtzbGonIiwKLSAgICAgICAgJ1dhcm5pbmc6IGZvciBWQ0NMQ29tcGlsZXJUb29sL0NhbGxpbmdDb252ZW50aW9uLCAnCi0gICAgICAgICdpbmRleCB2YWx1ZSAoLTEpIG5vdCBpbiBleHBlY3RlZCByYW5nZSBbMCwgMyknLAotICAgICAgICAnV2FybmluZzogZm9yIFZDQ0xDb21waWxlclRvb2wvRGVidWdJbmZvcm1hdGlvbkZvcm1hdCwgJwotICAgICAgICAnY29udmVydGVkIHZhbHVlIGZvciAyIG5vdCBzcGVjaWZpZWQuJywKLSAgICAgICAgJ1dhcm5pbmc6IHVucmVjb2duaXplZCBzZXR0aW5nIFZDQ0xDb21waWxlclRvb2wvRW5hYmxlcHJlZmFzdCcsCi0gICAgICAgICdXYXJuaW5nOiB1bnJlY29nbml6ZWQgc2V0dGluZyBWQ0NMQ29tcGlsZXJUb29sL1paWFlaJywKLSAgICAgICAgJ1dhcm5pbmc6IGZvciBWQ0xpbmtlclRvb2wvVGFyZ2V0TWFjaGluZSwgJwotICAgICAgICAnY29udmVydGVkIHZhbHVlIGZvciAyIG5vdCBzcGVjaWZpZWQuJywKLSAgICAgICAgJ1dhcm5pbmc6IHVucmVjb2duaXplZCBzZXR0aW5nIFZDTUlETFRvb2wvbm90Z29vZCcsCi0gICAgICAgICdXYXJuaW5nOiB1bnJlY29nbml6ZWQgc2V0dGluZyBWQ1Jlc291cmNlQ29tcGlsZXJUb29sL25vdGdvb2QyJywKLSAgICAgICAgJ1dhcm5pbmc6IGZvciBWQ01hbmlmZXN0VG9vbC9VcGRhdGVGaWxlSGFzaGVzLCAnCi0gICAgICAgICJleHBlY3RlZCBib29sOyBnb3QgJ3RydWVsJyIKLSAgICAgICAgJyddKQotCi0gIGRlZiB0ZXN0VmFsaWRhdGVNU0J1aWxkU2V0dGluZ3Nfc2V0dGluZ3Moc2VsZik6Ci0gICAgIiIiVGVzdHMgdGhhdCBmb3IgaW52YWxpZCBNU0J1aWxkIHNldHRpbmdzLiIiIgotICAgIE1TVlNTZXR0aW5ncy5WYWxpZGF0ZU1TQnVpbGRTZXR0aW5ncygKLSAgICAgICAgeydDbENvbXBpbGUnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjInLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWydzdHJpbmcxJywgJ3N0cmluZzInXSwKLSAgICAgICAgICAgICdBZGRpdGlvbmFsVXNpbmdEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjInLAotICAgICAgICAgICAgJ0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnQXNzZW1ibGVyT3V0cHV0JzogJ05vTGlzdGluZycsCi0gICAgICAgICAgICAnQmFzaWNSdW50aW1lQ2hlY2tzJzogJ1N0YWNrRnJhbWVSdW50aW1lQ2hlY2snLAotICAgICAgICAgICAgJ0Jyb3dzZUluZm9ybWF0aW9uJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdCcm93c2VJbmZvcm1hdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0J1ZmZlclNlY3VyaXR5Q2hlY2snOiAndHJ1ZScsCi0gICAgICAgICAgICAnQnVpbGRpbmdJbklERSc6ICd0cnVlJywKLSAgICAgICAgICAgICdDYWxsaW5nQ29udmVudGlvbic6ICdDZGVjbCcsCi0gICAgICAgICAgICAnQ29tcGlsZUFzJzogJ0NvbXBpbGVBc0MnLAotICAgICAgICAgICAgJ0NvbXBpbGVBc01hbmFnZWQnOiAnUHVyZScsCi0gICAgICAgICAgICAnQ3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRGVidWdJbmZvcm1hdGlvbkZvcm1hdCc6ICdQcm9ncmFtRGF0YWJhc2UnLAotICAgICAgICAgICAgJ0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRGlzYWJsZVNwZWNpZmljV2FybmluZ3MnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICdFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0JzogJ1N0cmVhbWluZ1NJTURFeHRlbnNpb25zJywKLSAgICAgICAgICAgICdFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZVBSRWZhc3QnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRW5hYmxlcHJlZmFzdCc6ICdib2d1cycsCi0gICAgICAgICAgICAnRXJyb3JSZXBvcnRpbmcnOiAnUHJvbXB0JywKLSAgICAgICAgICAgICdFeGNlcHRpb25IYW5kbGluZyc6ICdTeW5jQ1Rocm93JywKLSAgICAgICAgICAgICdFeHBhbmRBdHRyaWJ1dGVkU291cmNlJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Zhdm9yU2l6ZU9yU3BlZWQnOiAnTmVpdGhlcicsCi0gICAgICAgICAgICAnRmxvYXRpbmdQb2ludEV4Y2VwdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRmxvYXRpbmdQb2ludE1vZGVsJzogJ1ByZWNpc2UnLAotICAgICAgICAgICAgJ0ZvcmNlQ29uZm9ybWFuY2VJbkZvckxvb3BTY29wZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdGb3JjZWRJbmNsdWRlRmlsZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgJ0ZvcmNlZFVzaW5nRmlsZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgJ0Z1bmN0aW9uTGV2ZWxMaW5raW5nJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVhNTERvY3VtZW50YXRpb25GaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgJ0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uJzogJ09ubHlFeHBsaWNpdElubGluZScsCi0gICAgICAgICAgICAnSW50cmluc2ljRnVuY3Rpb25zJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ09iamVjdEZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdPbWl0RGVmYXVsdExpYk5hbWUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT21pdEZyYW1lUG9pbnRlcnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT3Blbk1QU3VwcG9ydCc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnRGlzYWJsZWQnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyJzogJ05vdFVzaW5nJywKLSAgICAgICAgICAgICdQcmVjb21waWxlZEhlYWRlckZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyT3V0cHV0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc0tlZXBDb21tZW50cyc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdzdHJpbmcxO3N0cmluZzInLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NPdXRwdXRQYXRoJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc1N1cHByZXNzTGluZU51bWJlcnMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NUb0ZpbGUnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1Byb2Nlc3Nvck51bWJlcic6ICczMycsCi0gICAgICAgICAgICAnUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJ011bHRpVGhyZWFkZWQnLAotICAgICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAgICdTaG93SW5jbHVkZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU21hbGxlclR5cGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICcxQnl0ZScsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgJ1RyYWNrZXJMb2dEaXJlY3RvcnknOiAnYV9mb2xkZXInLAotICAgICAgICAgICAgJ1RyZWF0U3BlY2lmaWNXYXJuaW5nc0FzRXJyb3JzJzogJ3N0cmluZzE7c3RyaW5nMicsCi0gICAgICAgICAgICAnVHJlYXRXYXJuaW5nQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lQWxsUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdzdHJpbmcxO3N0cmluZzInLAotICAgICAgICAgICAgJ1VzZUZ1bGxQYXRocyc6ICd0cnVlJywKLSAgICAgICAgICAgICdVc2VVbmljb2RlRm9yQXNzZW1ibGVyTGlzdGluZyc6ICd0cnVlJywKLSAgICAgICAgICAgICdXYXJuaW5nTGV2ZWwnOiAnVHVybk9mZkFsbFdhcm5pbmdzJywKLSAgICAgICAgICAgICdXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnWE1MRG9jdW1lbnRhdGlvbkZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdaWlhZWic6ICdib2d1cyd9LAotICAgICAgICAgJ0xpbmsnOiB7Ci0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0FkZE1vZHVsZU5hbWVzVG9Bc3NlbWJseSc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0FsbG93SXNvbGF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgICdBc3NlbWJseURlYnVnJzogJycsCi0gICAgICAgICAgICAgJ0Fzc2VtYmx5TGlua1Jlc291cmNlJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICAnQmFzZUFkZHJlc3MnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnQnVpbGRpbmdJbklERSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnQ0xSSW1hZ2VUeXBlJzogJ0ZvcmNlSUpXSW1hZ2UnLAotICAgICAgICAgICAgICdDTFJTdXBwb3J0TGFzdEVycm9yJzogJ0VuYWJsZWQnLAotICAgICAgICAgICAgICdDTFJUaHJlYWRBdHRyaWJ1dGUnOiAnTVRBVGhyZWFkaW5nQXR0cmlidXRlJywKLSAgICAgICAgICAgICAnQ0xSVW5tYW5hZ2VkQ29kZUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgICdDcmVhdGVIb3RQYXRjaGFibGVJbWFnZSc6ICdYODZJbWFnZScsCi0gICAgICAgICAgICAgJ0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICAnRGVsYXlMb2FkRExMcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0RlbGF5U2lnbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnRHJpdmVyJzogJ05vdFNldCcsCi0gICAgICAgICAgICAgJ0VtYmVkTWFuYWdlZFJlc291cmNlRmlsZSc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0VuYWJsZUNPTURBVEZvbGRpbmcnOiAnZmFsc2UnLAotICAgICAgICAgICAgICdFbmFibGVVQUMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0VudHJ5UG9pbnRTeW1ib2wnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnRml4ZWRCYXNlQWRkcmVzcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAgJ0ZvcmNlRmlsZU91dHB1dCc6ICdFbmFibGVkJywKLSAgICAgICAgICAgICAnRm9yY2VTeW1ib2xSZWZlcmVuY2VzJzogJ2ZpbGUxO2ZpbGUyJywKLSAgICAgICAgICAgICAnRnVuY3Rpb25PcmRlcic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnR2VuZXJhdGVNYXBGaWxlJzogJ3RydWUnLAotICAgICAgICAgICAgICdIZWFwQ29tbWl0U2l6ZSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdIZWFwUmVzZXJ2ZVNpemUnOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSWdub3JlRW1iZWRkZWRJREwnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyc6ICdhX2ZpbGVfbGlzdCcsCi0gICAgICAgICAgICAgJ0ltYWdlSGFzU2FmZUV4Y2VwdGlvbkhhbmRsZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgICdJbXBvcnRMaWJyYXJ5JzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnS2V5Q29udGFpbmVyJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnS2V5RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0xhcmdlQWRkcmVzc0F3YXJlJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICAnTGlua0RMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnTGlua0Vycm9yUmVwb3J0aW5nJzogJ1NlbmRFcnJvclJlcG9ydCcsCi0gICAgICAgICAgICAgJ0xpbmtTdGF0dXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nOiAnVXNlTGlua1RpbWVDb2RlR2VuZXJhdGlvbicsCi0gICAgICAgICAgICAgJ01hbmlmZXN0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ01hcEV4cG9ydHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ01hcEZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnTWVyZ2VkSURMQmFzZUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnTWVyZ2VTZWN0aW9ucyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdNaWRsQ29tbWFuZEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdNaW5pbXVtUmVxdWlyZWRWZXJzaW9uJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ01vZHVsZURlZmluaXRpb25GaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnTVNET1NTdHViRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdOb0VudHJ5UG9pbnQnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ09wdGltaXplUmVmZXJlbmNlcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAgJ091dHB1dEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdQZXJVc2VyUmVkaXJlY3Rpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1ByZXZlbnREbGxCaW5kaW5nJzogJ3RydWUnLAotICAgICAgICAgICAgICdQcm9maWxlJzogJ3RydWUnLAotICAgICAgICAgICAgICdQcm9maWxlR3VpZGVkRGF0YWJhc2UnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdQcm9ncmFtRGF0YWJhc2VGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnUmFuZG9taXplZEJhc2VBZGRyZXNzJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICAnUmVnaXN0ZXJPdXRwdXQnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1NlY3Rpb25BbGlnbm1lbnQnOiAnMzMnLAotICAgICAgICAgICAgICdTZXRDaGVja3N1bSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJ0xpbmtWZXJib3NlUkVGJywKLSAgICAgICAgICAgICAnU3BlY2lmeVNlY3Rpb25BdHRyaWJ1dGVzJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ1N0YWNrQ29tbWl0U2l6ZSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdTdGFja1Jlc2VydmVTaXplJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ1N0cmlwUHJpdmF0ZVN5bWJvbHMnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdTdWJTeXN0ZW0nOiAnQ29uc29sZScsCi0gICAgICAgICAgICAgJ1N1cHBvcnROb2JpbmRPZkRlbGF5TG9hZGVkRExMJzogJ3RydWUnLAotICAgICAgICAgICAgICdTdXBwb3J0VW5sb2FkT2ZEZWxheUxvYWRlZERMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgICdTd2FwUnVuRnJvbUNEJzogJ3RydWUnLAotICAgICAgICAgICAgICdTd2FwUnVuRnJvbU5FVCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICdNYWNoaW5lWDg2JywKLSAgICAgICAgICAgICAnVGVybWluYWxTZXJ2ZXJBd2FyZSc6ICdmYWxzZScsCi0gICAgICAgICAgICAgJ1RyYWNrZXJMb2dEaXJlY3RvcnknOiAnYV9mb2xkZXInLAotICAgICAgICAgICAgICdUcmVhdExpbmtlcldhcm5pbmdBc0Vycm9ycyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVHVybk9mZkFzc2VtYmx5R2VuZXJhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVHlwZUxpYnJhcnlGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnVHlwZUxpYnJhcnlSZXNvdXJjZUlEJzogJzMzJywKLSAgICAgICAgICAgICAnVUFDRXhlY3V0aW9uTGV2ZWwnOiAnQXNJbnZva2VyJywKLSAgICAgICAgICAgICAnVUFDVUlBY2Nlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1ZlcnNpb24nOiAnYSBzdHJpbmcxJ30sCi0gICAgICAgICAnUmVzb3VyY2VDb21waWxlJzogewotICAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0N1bHR1cmUnOiAnMHgyMzYnLAotICAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgICdOdWxsVGVybWluYXRlU3RyaW5ncyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdTaG93UHJvZ3Jlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVHJhY2tlckxvZ0RpcmVjdG9yeSc6ICdhX2ZvbGRlcicsCi0gICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJ30sCi0gICAgICAgICAnTWlkbCc6IHsKLSAgICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb25Nb2RlJzogJ3RydWUnLAotICAgICAgICAgICAgICdDbGllbnRTdHViRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ0NQcmVwcm9jZXNzT3B0aW9ucyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdEZWZhdWx0Q2hhclR5cGUnOiAnU2lnbmVkJywKLSAgICAgICAgICAgICAnRGxsRGF0YUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnRW5hYmxlRXJyb3JDaGVja3MnOiAnRW5hYmxlQ3VzdG9tJywKLSAgICAgICAgICAgICAnRXJyb3JDaGVja0FsbG9jYXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgICdFcnJvckNoZWNrQm91bmRzJzogJ3RydWUnLAotICAgICAgICAgICAgICdFcnJvckNoZWNrRW51bVJhbmdlJzogJ3RydWUnLAotICAgICAgICAgICAgICdFcnJvckNoZWNrUmVmUG9pbnRlcnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0Vycm9yQ2hlY2tTdHViRGF0YSc6ICd0cnVlJywKLSAgICAgICAgICAgICAnR2VuZXJhdGVDbGllbnRGaWxlcyc6ICdTdHViJywKLSAgICAgICAgICAgICAnR2VuZXJhdGVTZXJ2ZXJGaWxlcyc6ICdOb25lJywKLSAgICAgICAgICAgICAnR2VuZXJhdGVTdHVibGVzc1Byb3hpZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0dlbmVyYXRlVHlwZUxpYnJhcnknOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0hlYWRlckZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSW50ZXJmYWNlSWRlbnRpZmllckZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnTG9jYWxlSUQnOiAnMzMnLAotICAgICAgICAgICAgICdNa1R5cExpYkNvbXBhdGlibGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ091dHB1dERpcmVjdG9yeSc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdzdHJpbmcxO3N0cmluZzInLAotICAgICAgICAgICAgICdQcm94eUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnUmVkaXJlY3RPdXRwdXRBbmRFcnJvcnMnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdTZXJ2ZXJTdHViRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICdOb3RTZXQnLAotICAgICAgICAgICAgICdTdXBwcmVzc0NvbXBpbGVyV2FybmluZ3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVGFyZ2V0RW52aXJvbm1lbnQnOiAnSXRhbml1bScsCi0gICAgICAgICAgICAgJ1RyYWNrZXJMb2dEaXJlY3RvcnknOiAnYV9mb2xkZXInLAotICAgICAgICAgICAgICdUeXBlTGliRm9ybWF0JzogJ05ld0Zvcm1hdCcsCi0gICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5TmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICAnVmFsaWRhdGVBbGxQYXJhbWV0ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJzEnfSwKLSAgICAgICAgICdMaWInOiB7Ci0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0Rpc3BsYXlMaWJyYXJ5JzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0Vycm9yUmVwb3J0aW5nJzogJ1Byb21wdEltbWVkaWF0ZWx5JywKLSAgICAgICAgICAgICAnRXhwb3J0TmFtZWRGdW5jdGlvbnMnOiAnc3RyaW5nMTtzdHJpbmcyJywKLSAgICAgICAgICAgICAnRm9yY2VTeW1ib2xSZWZlcmVuY2VzJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ01pbmltdW1SZXF1aXJlZFZlcnNpb24nOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnTW9kdWxlRGVmaW5pdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnT3V0cHV0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ1JlbW92ZU9iamVjdHMnOiAnZmlsZTE7ZmlsZTInLAotICAgICAgICAgICAgICdTdWJTeXN0ZW0nOiAnQ29uc29sZScsCi0gICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICAnVGFyZ2V0TWFjaGluZSc6ICdNYWNoaW5lWDg2aScsCi0gICAgICAgICAgICAgJ1RyYWNrZXJMb2dEaXJlY3RvcnknOiAnYV9mb2xkZXInLAotICAgICAgICAgICAgICdUcmVhdExpYldhcm5pbmdBc0Vycm9ycyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAgJ1ZlcmJvc2UnOiAndHJ1ZSd9LAotICAgICAgICAgJ01hbmlmZXN0JzogewotICAgICAgICAgICAgICdBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcyc6ICdmaWxlMTtmaWxlMicsCi0gICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ0Fzc2VtYmx5SWRlbnRpdHknOiAnYSBzdHJpbmcxJywKLSAgICAgICAgICAgICAnQ29tcG9uZW50RmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdFbmFibGVEUElBd2FyZW5lc3MnOiAnZmFsJywKLSAgICAgICAgICAgICAnR2VuZXJhdGVDYXRhbG9nRmlsZXMnOiAndHJ1ZWwnLAotICAgICAgICAgICAgICdHZW5lcmF0ZUNhdGVnb3J5VGFncyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnSW5wdXRSZXNvdXJjZU1hbmlmZXN0cyc6ICdhIHN0cmluZzEnLAotICAgICAgICAgICAgICdNYW5pZmVzdEZyb21NYW5hZ2VkQXNzZW1ibHknOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdub3Rnb29kMyc6ICdib2d1cycsCi0gICAgICAgICAgICAgJ091dHB1dE1hbmlmZXN0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAgJ091dHB1dFJlc291cmNlTWFuaWZlc3RzJzogJ2Egc3RyaW5nMScsCi0gICAgICAgICAgICAgJ1JlZ2lzdHJhclNjcmlwdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdSZXBsYWNlbWVudHNGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnU3VwcHJlc3NEZXBlbmRlbmN5RWxlbWVudCc6ICd0cnVlJywKLSAgICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgICdUcmFja2VyTG9nRGlyZWN0b3J5JzogJ2FfZm9sZGVyJywKLSAgICAgICAgICAgICAnVHlwZUxpYnJhcnlGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlc1NlYXJjaFBhdGgnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgICdWZXJib3NlT3V0cHV0JzogJ3RydWUnfSwKLSAgICAgICAgICdQcm9qZWN0UmVmZXJlbmNlJzogewotICAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICd0cnVlJywKLSAgICAgICAgICAgICAnVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHMnOiAndHJ1ZSd9LAotICAgICAgICAgJ01hbmlmZXN0UmVzb3VyY2VDb21waWxlJzogewotICAgICAgICAgICAgICdSZXNvdXJjZU91dHB1dEZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJ30sCi0gICAgICAgICAnJzogewotICAgICAgICAgICAgICdFbWJlZE1hbmlmZXN0JzogJ3RydWUnLAotICAgICAgICAgICAgICdHZW5lcmF0ZU1hbmlmZXN0JzogJ3RydWUnLAotICAgICAgICAgICAgICdJZ25vcmVJbXBvcnRMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgICAgICdMaW5rSW5jcmVtZW50YWwnOiAnZmFsc2UnfX0sCi0gICAgICAgIHNlbGYuc3RkZXJyKQotICAgIHNlbGYuX0V4cGVjdGVkV2FybmluZ3MoWwotICAgICAgICAnV2FybmluZzogdW5yZWNvZ25pemVkIHNldHRpbmcgQ2xDb21waWxlL0VuYWJsZXByZWZhc3QnLAotICAgICAgICAnV2FybmluZzogdW5yZWNvZ25pemVkIHNldHRpbmcgQ2xDb21waWxlL1paWFlaJywKLSAgICAgICAgJ1dhcm5pbmc6IHVucmVjb2duaXplZCBzZXR0aW5nIE1hbmlmZXN0L25vdGdvb2QzJywKLSAgICAgICAgJ1dhcm5pbmc6IGZvciBNYW5pZmVzdC9HZW5lcmF0ZUNhdGFsb2dGaWxlcywgJwotICAgICAgICAiZXhwZWN0ZWQgYm9vbDsgZ290ICd0cnVlbCciLAotICAgICAgICAnV2FybmluZzogZm9yIExpYi9UYXJnZXRNYWNoaW5lLCB1bnJlY29nbml6ZWQgZW51bWVyYXRlZCB2YWx1ZSAnCi0gICAgICAgICdNYWNoaW5lWDg2aScsCi0gICAgICAgICJXYXJuaW5nOiBmb3IgTWFuaWZlc3QvRW5hYmxlRFBJQXdhcmVuZXNzLCBleHBlY3RlZCBib29sOyBnb3QgJ2ZhbCciXSkKLQotICBkZWYgdGVzdENvbnZlcnRUb01TQnVpbGRTZXR0aW5nc19lbXB0eShzZWxmKToKLSAgICAiIiJUZXN0cyBhbiBlbXB0eSBjb252ZXJzaW9uLiIiIgotICAgIG1zdnNfc2V0dGluZ3MgPSB7fQotICAgIGV4cGVjdGVkX21zYnVpbGRfc2V0dGluZ3MgPSB7fQotICAgIGFjdHVhbF9tc2J1aWxkX3NldHRpbmdzID0gTVNWU1NldHRpbmdzLkNvbnZlcnRUb01TQnVpbGRTZXR0aW5ncygKLSAgICAgICAgbXN2c19zZXR0aW5ncywKLSAgICAgICAgc2VsZi5zdGRlcnIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9tc2J1aWxkX3NldHRpbmdzLCBhY3R1YWxfbXNidWlsZF9zZXR0aW5ncykKLSAgICBzZWxmLl9FeHBlY3RlZFdhcm5pbmdzKFtdKQotCi0gIGRlZiB0ZXN0Q29udmVydFRvTVNCdWlsZFNldHRpbmdzX21pbmltYWwoc2VsZik6Ci0gICAgIiIiVGVzdHMgYSBtaW5pbWFsIGNvbnZlcnNpb24uIiIiCi0gICAgbXN2c19zZXR0aW5ncyA9IHsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdkaXIxJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICcvZm9vJywKLSAgICAgICAgICAgICdCYXNpY1J1bnRpbWVDaGVja3MnOiAnMCcsCi0gICAgICAgICAgICB9LAotICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nOiAnMScsCi0gICAgICAgICAgICAnRXJyb3JSZXBvcnRpbmcnOiAnMScsCi0gICAgICAgICAgICAnRGF0YUV4ZWN1dGlvblByZXZlbnRpb24nOiAnMicsCi0gICAgICAgICAgICB9LAotICAgICAgICB9Ci0gICAgZXhwZWN0ZWRfbXNidWlsZF9zZXR0aW5ncyA9IHsKLSAgICAgICAgJ0NsQ29tcGlsZSc6IHsKLSAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJzogJ2RpcjEnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJy9mb28nLAotICAgICAgICAgICAgJ0Jhc2ljUnVudGltZUNoZWNrcyc6ICdEZWZhdWx0JywKLSAgICAgICAgICAgIH0sCi0gICAgICAgICdMaW5rJzogewotICAgICAgICAgICAgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nOiAnVXNlTGlua1RpbWVDb2RlR2VuZXJhdGlvbicsCi0gICAgICAgICAgICAnTGlua0Vycm9yUmVwb3J0aW5nJzogJ1Byb21wdEltbWVkaWF0ZWx5JywKLSAgICAgICAgICAgICdEYXRhRXhlY3V0aW9uUHJldmVudGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgIH0sCi0gICAgICAgIH0KLSAgICBhY3R1YWxfbXNidWlsZF9zZXR0aW5ncyA9IE1TVlNTZXR0aW5ncy5Db252ZXJ0VG9NU0J1aWxkU2V0dGluZ3MoCi0gICAgICAgIG1zdnNfc2V0dGluZ3MsCi0gICAgICAgIHNlbGYuc3RkZXJyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbXNidWlsZF9zZXR0aW5ncywgYWN0dWFsX21zYnVpbGRfc2V0dGluZ3MpCi0gICAgc2VsZi5fRXhwZWN0ZWRXYXJuaW5ncyhbXSkKLQotICBkZWYgdGVzdENvbnZlcnRUb01TQnVpbGRTZXR0aW5nc193YXJuaW5ncyhzZWxmKToKLSAgICAiIiJUZXN0cyBjb252ZXJzaW9uIHRoYXQgZ2VuZXJhdGVzIHdhcm5pbmdzLiIiIgotICAgIG1zdnNfc2V0dGluZ3MgPSB7Ci0gICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnMScsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnMicsCi0gICAgICAgICAgICAjIFRoZXNlIGFyZSBpbmNvcnJlY3QgdmFsdWVzOgotICAgICAgICAgICAgJ0Jhc2ljUnVudGltZUNoZWNrcyc6ICcxMicsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb24nOiAnMjEnLAotICAgICAgICAgICAgJ1VzZVByZWNvbXBpbGVkSGVhZGVyJzogJzEzJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGUnOiAnMTQnfSwKLSAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICMgVGhlc2UgYXJlIGluY29ycmVjdCB2YWx1ZXM6Ci0gICAgICAgICAgICAnRHJpdmVyJzogJzEwJywKLSAgICAgICAgICAgICdMaW5rVGltZUNvZGVHZW5lcmF0aW9uJzogJzMxJywKLSAgICAgICAgICAgICdFcnJvclJlcG9ydGluZyc6ICcyMScsCi0gICAgICAgICAgICAnRml4ZWRCYXNlQWRkcmVzcyc6ICc2J30sCi0gICAgICAgICdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgIyBDdXN0b20KLSAgICAgICAgICAgICdDdWx0dXJlJzogJzEwMDMnfX0KLSAgICBleHBlY3RlZF9tc2J1aWxkX3NldHRpbmdzID0gewotICAgICAgICAnQ2xDb21waWxlJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnMScsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnMid9LAotICAgICAgICAnTGluayc6IHt9LAotICAgICAgICAnUmVzb3VyY2VDb21waWxlJzogewotICAgICAgICAgICAgIyBDdXN0b20KLSAgICAgICAgICAgICdDdWx0dXJlJzogJzB4MDNlYid9fQotICAgIGFjdHVhbF9tc2J1aWxkX3NldHRpbmdzID0gTVNWU1NldHRpbmdzLkNvbnZlcnRUb01TQnVpbGRTZXR0aW5ncygKLSAgICAgICAgbXN2c19zZXR0aW5ncywKLSAgICAgICAgc2VsZi5zdGRlcnIpCi0gICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9tc2J1aWxkX3NldHRpbmdzLCBhY3R1YWxfbXNidWlsZF9zZXR0aW5ncykKLSAgICBzZWxmLl9FeHBlY3RlZFdhcm5pbmdzKFsKLSAgICAgICAgJ1dhcm5pbmc6IHdoaWxlIGNvbnZlcnRpbmcgVkNDTENvbXBpbGVyVG9vbC9CYXNpY1J1bnRpbWVDaGVja3MgdG8gJwotICAgICAgICAnTVNCdWlsZCwgaW5kZXggdmFsdWUgKDEyKSBub3QgaW4gZXhwZWN0ZWQgcmFuZ2UgWzAsIDQpJywKLSAgICAgICAgJ1dhcm5pbmc6IHdoaWxlIGNvbnZlcnRpbmcgVkNDTENvbXBpbGVyVG9vbC9Ccm93c2VJbmZvcm1hdGlvbiB0byAnCi0gICAgICAgICdNU0J1aWxkLCBpbmRleCB2YWx1ZSAoMjEpIG5vdCBpbiBleHBlY3RlZCByYW5nZSBbMCwgMyknLAotICAgICAgICAnV2FybmluZzogd2hpbGUgY29udmVydGluZyBWQ0NMQ29tcGlsZXJUb29sL1VzZVByZWNvbXBpbGVkSGVhZGVyIHRvICcKLSAgICAgICAgJ01TQnVpbGQsIGluZGV4IHZhbHVlICgxMykgbm90IGluIGV4cGVjdGVkIHJhbmdlIFswLCAzKScsCi0gICAgICAgICdXYXJuaW5nOiB3aGlsZSBjb252ZXJ0aW5nIFZDQ0xDb21waWxlclRvb2wvR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlIHRvICcKLSAgICAgICAgJ01TQnVpbGQsIHZhbHVlIG11c3QgYmUgb25lIG9mIFswLCAxLCAyXTsgZ290IDE0JywKLQotICAgICAgICAnV2FybmluZzogd2hpbGUgY29udmVydGluZyBWQ0xpbmtlclRvb2wvRHJpdmVyIHRvICcKLSAgICAgICAgJ01TQnVpbGQsIGluZGV4IHZhbHVlICgxMCkgbm90IGluIGV4cGVjdGVkIHJhbmdlIFswLCA0KScsCi0gICAgICAgICdXYXJuaW5nOiB3aGlsZSBjb252ZXJ0aW5nIFZDTGlua2VyVG9vbC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uIHRvICcKLSAgICAgICAgJ01TQnVpbGQsIGluZGV4IHZhbHVlICgzMSkgbm90IGluIGV4cGVjdGVkIHJhbmdlIFswLCA1KScsCi0gICAgICAgICdXYXJuaW5nOiB3aGlsZSBjb252ZXJ0aW5nIFZDTGlua2VyVG9vbC9FcnJvclJlcG9ydGluZyB0byAnCi0gICAgICAgICdNU0J1aWxkLCBpbmRleCB2YWx1ZSAoMjEpIG5vdCBpbiBleHBlY3RlZCByYW5nZSBbMCwgMyknLAotICAgICAgICAnV2FybmluZzogd2hpbGUgY29udmVydGluZyBWQ0xpbmtlclRvb2wvRml4ZWRCYXNlQWRkcmVzcyB0byAnCi0gICAgICAgICdNU0J1aWxkLCBpbmRleCB2YWx1ZSAoNikgbm90IGluIGV4cGVjdGVkIHJhbmdlIFswLCAzKScsCi0gICAgICAgIF0pCi0KLSAgZGVmIHRlc3RDb252ZXJ0VG9NU0J1aWxkU2V0dGluZ3NfZnVsbF9zeW50aGV0aWMoc2VsZik6Ci0gICAgIiIiVGVzdHMgY29udmVyc2lvbiBvZiBhbGwgdGhlIE1TQnVpbGQgc2V0dGluZ3MuIiIiCi0gICAgbXN2c19zZXR0aW5ncyA9IHsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjI7Zm9sZGVyMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxVc2luZ0RpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMjtmb2xkZXIzJywKLSAgICAgICAgICAgICdBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb24nOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0Fzc2VtYmxlck91dHB1dCc6ICcwJywKLSAgICAgICAgICAgICdCYXNpY1J1bnRpbWVDaGVja3MnOiAnMScsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb24nOiAnMicsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb25GaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdCdWZmZXJTZWN1cml0eUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ0NhbGxpbmdDb252ZW50aW9uJzogJzAnLAotICAgICAgICAgICAgJ0NvbXBpbGVBcyc6ICcxJywKLSAgICAgICAgICAgICdEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0JzogJzQnLAotICAgICAgICAgICAgJ0RlZmF1bHRDaGFySXNVbnNpZ25lZCc6ICd0cnVlJywKLSAgICAgICAgICAgICdEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldCc6ICcwJywKLSAgICAgICAgICAgICdFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZUludHJpbnNpY0Z1bmN0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbmFibGVQUkVmYXN0JzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yUmVwb3J0aW5nJzogJzEnLAotICAgICAgICAgICAgJ0V4Y2VwdGlvbkhhbmRsaW5nJzogJzInLAotICAgICAgICAgICAgJ0V4cGFuZEF0dHJpYnV0ZWRTb3VyY2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRmF2b3JTaXplT3JTcGVlZCc6ICcwJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50RXhjZXB0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50TW9kZWwnOiAnMScsCi0gICAgICAgICAgICAnRm9yY2VDb25mb3JtYW5jZUluRm9yTG9vcFNjb3BlJzogJ3RydWUnLAotICAgICAgICAgICAgJ0ZvcmNlZEluY2x1ZGVGaWxlcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnRm9yY2VkVXNpbmdGaWxlcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnR2VuZXJhdGVQcmVwcm9jZXNzZWRGaWxlJzogJzEnLAotICAgICAgICAgICAgJ0dlbmVyYXRlWE1MRG9jdW1lbnRhdGlvbkZpbGVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSW5saW5lRnVuY3Rpb25FeHBhbnNpb24nOiAnMicsCi0gICAgICAgICAgICAnS2VlcENvbW1lbnRzJzogJ3RydWUnLAotICAgICAgICAgICAgJ09iamVjdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ09taXREZWZhdWx0TGliTmFtZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdPbWl0RnJhbWVQb2ludGVycyc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcGVuTVAnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT3B0aW1pemF0aW9uJzogJzMnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUHJlY29tcGlsZWRIZWFkZXJUaHJvdWdoJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzAnLAotICAgICAgICAgICAgJ1J1bnRpbWVUeXBlSW5mbyc6ICd0cnVlJywKLSAgICAgICAgICAgICdTaG93SW5jbHVkZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU21hbGxlclR5cGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICcxJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHJlYXRXQ2hhcl90QXNCdWlsdEluVHlwZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdVbmRlZmluZUFsbFByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnZDE7ZDI7ZDMnLAotICAgICAgICAgICAgJ1VzZUZ1bGxQYXRocyc6ICd0cnVlJywKLSAgICAgICAgICAgICdVc2VQcmVjb21waWxlZEhlYWRlcic6ICcxJywKLSAgICAgICAgICAgICdVc2VVbmljb2RlUmVzcG9uc2VGaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdXYXJuaW5nTGV2ZWwnOiAnMicsCi0gICAgICAgICAgICAnV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ1hNTERvY3VtZW50YXRpb25GaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZSd9LAotICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXNfZXhjbHVkZWQnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0FkZE1vZHVsZU5hbWVzVG9Bc3NlbWJseSc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQWxsb3dJc29sYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnQXNzZW1ibHlEZWJ1Zyc6ICcwJywKLSAgICAgICAgICAgICdBc3NlbWJseUxpbmtSZXNvdXJjZSc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQmFzZUFkZHJlc3MnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0NMUkltYWdlVHlwZSc6ICcxJywKLSAgICAgICAgICAgICdDTFJUaHJlYWRBdHRyaWJ1dGUnOiAnMicsCi0gICAgICAgICAgICAnQ0xSVW5tYW5hZ2VkQ29kZUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uJzogJzAnLAotICAgICAgICAgICAgJ0RlbGF5TG9hZERMTHMnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0RlbGF5U2lnbic6ICd0cnVlJywKLSAgICAgICAgICAgICdEcml2ZXInOiAnMScsCi0gICAgICAgICAgICAnRW1iZWRNYW5hZ2VkUmVzb3VyY2VGaWxlJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdFbmFibGVDT01EQVRGb2xkaW5nJzogJzAnLAotICAgICAgICAgICAgJ0VuYWJsZVVBQyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbnRyeVBvaW50U3ltYm9sJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdFcnJvclJlcG9ydGluZyc6ICcwJywKLSAgICAgICAgICAgICdGaXhlZEJhc2VBZGRyZXNzJzogJzEnLAotICAgICAgICAgICAgJ0ZvcmNlU3ltYm9sUmVmZXJlbmNlcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnRnVuY3Rpb25PcmRlcic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ0dlbmVyYXRlTWFuaWZlc3QnOiAndHJ1ZScsCi0gICAgICAgICAgICAnR2VuZXJhdGVNYXBGaWxlJzogJ3RydWUnLAotICAgICAgICAgICAgJ0hlYXBDb21taXRTaXplJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdIZWFwUmVzZXJ2ZVNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnSWdub3JlRW1iZWRkZWRJREwnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlSW1wb3J0TGlicmFyeSc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbXBvcnRMaWJyYXJ5JzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdLZXlDb250YWluZXInOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0tleUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0xhcmdlQWRkcmVzc0F3YXJlJzogJzInLAotICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcxJywKLSAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdMaW5rVGltZUNvZGVHZW5lcmF0aW9uJzogJzInLAotICAgICAgICAgICAgJ01hbmlmZXN0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTWFwRXhwb3J0cyc6ICd0cnVlJywKLSAgICAgICAgICAgICdNYXBGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTWVyZ2VkSURMQmFzZUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdNZXJnZVNlY3Rpb25zJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdNaWRsQ29tbWFuZEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ01vZHVsZURlZmluaXRpb25GaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdPcHRpbWl6ZUZvcldpbmRvd3M5OCc6ICcxJywKLSAgICAgICAgICAgICdPcHRpbWl6ZVJlZmVyZW5jZXMnOiAnMCcsCi0gICAgICAgICAgICAnT3V0cHV0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUGVyVXNlclJlZGlyZWN0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ1Byb2ZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnUHJvZmlsZUd1aWRlZERhdGFiYXNlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdQcm9ncmFtRGF0YWJhc2VGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdSYW5kb21pemVkQmFzZUFkZHJlc3MnOiAnMScsCi0gICAgICAgICAgICAnUmVnaXN0ZXJPdXRwdXQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnUmVzb3VyY2VPbmx5RExMJzogJ3RydWUnLAotICAgICAgICAgICAgJ1NldENoZWNrc3VtJzogJ3RydWUnLAotICAgICAgICAgICAgJ1Nob3dQcm9ncmVzcyc6ICcwJywKLSAgICAgICAgICAgICdTdGFja0NvbW1pdFNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ1N0YWNrUmVzZXJ2ZVNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ1N0cmlwUHJpdmF0ZVN5bWJvbHMnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICcyJywKLSAgICAgICAgICAgICdTdXBwb3J0VW5sb2FkT2ZEZWxheUxvYWRlZERMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnU3dhcFJ1bkZyb21DRCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTd2FwUnVuRnJvbU5ldCc6ICd0cnVlJywKLSAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJzMnLAotICAgICAgICAgICAgJ1Rlcm1pbmFsU2VydmVyQXdhcmUnOiAnMicsCi0gICAgICAgICAgICAnVHVybk9mZkFzc2VtYmx5R2VuZXJhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5UmVzb3VyY2VJRCc6ICczMycsCi0gICAgICAgICAgICAnVUFDRXhlY3V0aW9uTGV2ZWwnOiAnMScsCi0gICAgICAgICAgICAnVUFDVUlBY2Nlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1VzZVVuaWNvZGVSZXNwb25zZUZpbGVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1ZlcnNpb24nOiAnYV9zdHJpbmcnfSwKLSAgICAgICAgJ1ZDUmVzb3VyY2VDb21waWxlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjI7Zm9sZGVyMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0N1bHR1cmUnOiAnMTAwMycsCi0gICAgICAgICAgICAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICdVbmRlZmluZVByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ2QxO2QyO2QzJ30sCi0gICAgICAgICdWQ01JRExUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdDUHJlcHJvY2Vzc09wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0RlZmF1bHRDaGFyVHlwZSc6ICcwJywKLSAgICAgICAgICAgICdETExEYXRhRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0VuYWJsZUVycm9yQ2hlY2tzJzogJzInLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tBbGxvY2F0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFcnJvckNoZWNrQm91bmRzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tFbnVtUmFuZ2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRXJyb3JDaGVja1JlZlBvaW50ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tTdHViRGF0YSc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVN0dWJsZXNzUHJveGllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVR5cGVMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgICAgJ0hlYWRlckZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgJ0ludGVyZmFjZUlkZW50aWZpZXJGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTWtUeXBMaWJDb21wYXRpYmxlJzogJ3RydWUnLAotICAgICAgICAgICAgJ091dHB1dERpcmVjdG9yeSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnZDE7ZDI7ZDMnLAotICAgICAgICAgICAgJ1Byb3h5RmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1JlZGlyZWN0T3V0cHV0QW5kRXJyb3JzJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdTdHJ1Y3RNZW1iZXJBbGlnbm1lbnQnOiAnMycsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgJ1RhcmdldEVudmlyb25tZW50JzogJzEnLAotICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5TmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnVmFsaWRhdGVQYXJhbWV0ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1dhcm5Bc0Vycm9yJzogJ3RydWUnLAotICAgICAgICAgICAgJ1dhcm5pbmdMZXZlbCc6ICc0J30sCi0gICAgICAgICdWQ0xpYnJhcmlhblRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjI7Zm9sZGVyMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllc19leGNsdWRlZCc6ICdmb2xkZXIxO2ZvbGRlcjI7Zm9sZGVyMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0V4cG9ydE5hbWVkRnVuY3Rpb25zJzogJ2QxO2QyO2QzJywKLSAgICAgICAgICAgICdGb3JjZVN5bWJvbFJlZmVyZW5jZXMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdNb2R1bGVEZWZpbml0aW9uRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnT3V0cHV0RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VzZVVuaWNvZGVSZXNwb25zZUZpbGVzJzogJ3RydWUnfSwKLSAgICAgICAgJ1ZDTWFuaWZlc3RUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdEZpbGVzJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnQXNzZW1ibHlJZGVudGl0eSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnQ29tcG9uZW50RmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0RlcGVuZGVuY3lJbmZvcm1hdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0VtYmVkTWFuaWZlc3QnOiAndHJ1ZScsCi0gICAgICAgICAgICAnR2VuZXJhdGVDYXRhbG9nRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSW5wdXRSZXNvdXJjZU1hbmlmZXN0cyc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnTWFuaWZlc3RSZXNvdXJjZUZpbGUnOiAnbXlfbmFtZScsCi0gICAgICAgICAgICAnT3V0cHV0TWFuaWZlc3RGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdSZWdpc3RyYXJTY3JpcHRGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdSZXBsYWNlbWVudHNGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHlwZUxpYnJhcnlGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdVcGRhdGVGaWxlSGFzaGVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VwZGF0ZUZpbGVIYXNoZXNTZWFyY2hQYXRoJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdVc2VGQVQzMldvcmthcm91bmQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVmVyYm9zZU91dHB1dCc6ICd0cnVlJ319Ci0gICAgZXhwZWN0ZWRfbXNidWlsZF9zZXR0aW5ncyA9IHsKLSAgICAgICAgJ0NsQ29tcGlsZSc6IHsKLSAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJzogJ2ZvbGRlcjE7Zm9sZGVyMjtmb2xkZXIzJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhX3N0cmluZyAvSicsCi0gICAgICAgICAgICAnQWRkaXRpb25hbFVzaW5nRGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnQXNzZW1ibGVyT3V0cHV0JzogJ05vTGlzdGluZycsCi0gICAgICAgICAgICAnQmFzaWNSdW50aW1lQ2hlY2tzJzogJ1N0YWNrRnJhbWVSdW50aW1lQ2hlY2snLAotICAgICAgICAgICAgJ0Jyb3dzZUluZm9ybWF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Jyb3dzZUluZm9ybWF0aW9uRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnQnVmZmVyU2VjdXJpdHlDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdDYWxsaW5nQ29udmVudGlvbic6ICdDZGVjbCcsCi0gICAgICAgICAgICAnQ29tcGlsZUFzJzogJ0NvbXBpbGVBc0MnLAotICAgICAgICAgICAgJ0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQnOiAnRWRpdEFuZENvbnRpbnVlJywKLSAgICAgICAgICAgICdEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzJzogJ2QxO2QyO2QzJywKLSAgICAgICAgICAgICdFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0JzogJ05vdFNldCcsCi0gICAgICAgICAgICAnRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbmFibGVQUkVmYXN0JzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yUmVwb3J0aW5nJzogJ1Byb21wdCcsCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnQXN5bmMnLAotICAgICAgICAgICAgJ0V4cGFuZEF0dHJpYnV0ZWRTb3VyY2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRmF2b3JTaXplT3JTcGVlZCc6ICdOZWl0aGVyJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50RXhjZXB0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50TW9kZWwnOiAnU3RyaWN0JywKLSAgICAgICAgICAgICdGb3JjZUNvbmZvcm1hbmNlSW5Gb3JMb29wU2NvcGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRm9yY2VkSW5jbHVkZUZpbGVzJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdGb3JjZWRVc2luZ0ZpbGVzJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdGdW5jdGlvbkxldmVsTGlua2luZyc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVhNTERvY3VtZW50YXRpb25GaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgJ0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uJzogJ0FueVN1aXRhYmxlJywKLSAgICAgICAgICAgICdJbnRyaW5zaWNGdW5jdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnTWluaW1hbFJlYnVpbGQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT2JqZWN0RmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ09taXREZWZhdWx0TGliTmFtZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdPbWl0RnJhbWVQb2ludGVycyc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcGVuTVBTdXBwb3J0JzogJ3RydWUnLAotICAgICAgICAgICAgJ09wdGltaXphdGlvbic6ICdGdWxsJywKLSAgICAgICAgICAgICdQcmVjb21waWxlZEhlYWRlcic6ICdDcmVhdGUnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUHJlY29tcGlsZWRIZWFkZXJPdXRwdXRGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzS2VlcENvbW1lbnRzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ2QxO2QyO2QzJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc1RvRmlsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnTXVsdGlUaHJlYWRlZCcsCi0gICAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ3RydWUnLAotICAgICAgICAgICAgJ1Nob3dJbmNsdWRlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdTbWFsbGVyVHlwZUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cmluZ1Bvb2xpbmcnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU3RydWN0TWVtYmVyQWxpZ25tZW50JzogJzFCeXRlJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHJlYXRXYXJuaW5nQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lQWxsUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnVXNlRnVsbFBhdGhzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1dhcm5pbmdMZXZlbCc6ICdMZXZlbDInLAotICAgICAgICAgICAgJ1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdYTUxEb2N1bWVudGF0aW9uRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnfSwKLSAgICAgICAgJ0xpbmsnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyc6ICdmb2xkZXIxO2ZvbGRlcjI7Zm9sZGVyMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzJzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnQWRkTW9kdWxlTmFtZXNUb0Fzc2VtYmx5JzogJ2ZpbGUxO2ZpbGUyO2ZpbGUzJywKLSAgICAgICAgICAgICdBbGxvd0lzb2xhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdBc3NlbWJseURlYnVnJzogJycsCi0gICAgICAgICAgICAnQXNzZW1ibHlMaW5rUmVzb3VyY2UnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0Jhc2VBZGRyZXNzJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdDTFJJbWFnZVR5cGUnOiAnRm9yY2VJSldJbWFnZScsCi0gICAgICAgICAgICAnQ0xSVGhyZWFkQXR0cmlidXRlJzogJ1NUQVRocmVhZGluZ0F0dHJpYnV0ZScsCi0gICAgICAgICAgICAnQ0xSVW5tYW5hZ2VkQ29kZUNoZWNrJzogJ3RydWUnLAotICAgICAgICAgICAgJ0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uJzogJycsCi0gICAgICAgICAgICAnRGVsYXlMb2FkRExMcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnRGVsYXlTaWduJzogJ3RydWUnLAotICAgICAgICAgICAgJ0RyaXZlcic6ICdEcml2ZXInLAotICAgICAgICAgICAgJ0VtYmVkTWFuYWdlZFJlc291cmNlRmlsZSc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnRW5hYmxlQ09NREFURm9sZGluZyc6ICcnLAotICAgICAgICAgICAgJ0VuYWJsZVVBQyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbnRyeVBvaW50U3ltYm9sJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdGaXhlZEJhc2VBZGRyZXNzJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdGb3JjZVN5bWJvbFJlZmVyZW5jZXMnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0Z1bmN0aW9uT3JkZXInOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hcEZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSGVhcENvbW1pdFNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0hlYXBSZXNlcnZlU2l6ZSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVFbWJlZGRlZElETCc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0ltcG9ydExpYnJhcnknOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ0tleUNvbnRhaW5lcic6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnS2V5RmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTGFyZ2VBZGRyZXNzQXdhcmUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnTGlua0Vycm9yUmVwb3J0aW5nJzogJ05vRXJyb3JSZXBvcnQnLAotICAgICAgICAgICAgJ0xpbmtUaW1lQ29kZUdlbmVyYXRpb24nOiAnUEdJbnN0cnVtZW50JywKLSAgICAgICAgICAgICdNYW5pZmVzdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ01hcEV4cG9ydHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnTWFwRmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ01lcmdlZElETEJhc2VGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTWVyZ2VTZWN0aW9ucyc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnTWlkbENvbW1hbmRGaWxlJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdNb2R1bGVEZWZpbml0aW9uRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTm9FbnRyeVBvaW50JzogJ3RydWUnLAotICAgICAgICAgICAgJ09wdGltaXplUmVmZXJlbmNlcyc6ICcnLAotICAgICAgICAgICAgJ091dHB1dEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1BlclVzZXJSZWRpcmVjdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdQcm9maWxlJzogJ3RydWUnLAotICAgICAgICAgICAgJ1Byb2ZpbGVHdWlkZWREYXRhYmFzZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUHJvZ3JhbURhdGFiYXNlRmlsZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnUmFuZG9taXplZEJhc2VBZGRyZXNzJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdSZWdpc3Rlck91dHB1dCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTZXRDaGVja3N1bSc6ICd0cnVlJywKLSAgICAgICAgICAgICdTaG93UHJvZ3Jlc3MnOiAnTm90U2V0JywKLSAgICAgICAgICAgICdTdGFja0NvbW1pdFNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ1N0YWNrUmVzZXJ2ZVNpemUnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ1N0cmlwUHJpdmF0ZVN5bWJvbHMnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICdXaW5kb3dzJywKLSAgICAgICAgICAgICdTdXBwb3J0VW5sb2FkT2ZEZWxheUxvYWRlZERMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAndHJ1ZScsCi0gICAgICAgICAgICAnU3dhcFJ1bkZyb21DRCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTd2FwUnVuRnJvbU5FVCc6ICd0cnVlJywKLSAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJ01hY2hpbmVBUk0nLAotICAgICAgICAgICAgJ1Rlcm1pbmFsU2VydmVyQXdhcmUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHVybk9mZkFzc2VtYmx5R2VuZXJhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5UmVzb3VyY2VJRCc6ICczMycsCi0gICAgICAgICAgICAnVUFDRXhlY3V0aW9uTGV2ZWwnOiAnSGlnaGVzdEF2YWlsYWJsZScsCi0gICAgICAgICAgICAnVUFDVUlBY2Nlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVmVyc2lvbic6ICdhX3N0cmluZyd9LAotICAgICAgICAnUmVzb3VyY2VDb21waWxlJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdDdWx0dXJlJzogJzB4MDNlYicsCi0gICAgICAgICAgICAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICdVbmRlZmluZVByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ2QxO2QyO2QzJ30sCi0gICAgICAgICdNaWRsJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdDUHJlcHJvY2Vzc09wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0RlZmF1bHRDaGFyVHlwZSc6ICdVbnNpZ25lZCcsCi0gICAgICAgICAgICAnRGxsRGF0YUZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdFbmFibGVFcnJvckNoZWNrcyc6ICdBbGwnLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tBbGxvY2F0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFcnJvckNoZWNrQm91bmRzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tFbnVtUmFuZ2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRXJyb3JDaGVja1JlZlBvaW50ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yQ2hlY2tTdHViRGF0YSc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVN0dWJsZXNzUHJveGllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVR5cGVMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgICAgJ0hlYWRlckZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgJ0ludGVyZmFjZUlkZW50aWZpZXJGaWxlTmFtZSc6ICdhX2ZpbGVfbmFtZScsCi0gICAgICAgICAgICAnTWtUeXBMaWJDb21wYXRpYmxlJzogJ3RydWUnLAotICAgICAgICAgICAgJ091dHB1dERpcmVjdG9yeSc6ICdhX3N0cmluZycsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnZDE7ZDI7ZDMnLAotICAgICAgICAgICAgJ1Byb3h5RmlsZU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1JlZGlyZWN0T3V0cHV0QW5kRXJyb3JzJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdTdHJ1Y3RNZW1iZXJBbGlnbm1lbnQnOiAnNCcsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ3RydWUnLAotICAgICAgICAgICAgJ1RhcmdldEVudmlyb25tZW50JzogJ1dpbjMyJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeU5hbWUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnZDE7ZDI7ZDMnLAotICAgICAgICAgICAgJ1ZhbGlkYXRlQWxsUGFyYW1ldGVycyc6ICd0cnVlJywKLSAgICAgICAgICAgICdXYXJuQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdXYXJuaW5nTGV2ZWwnOiAnNCd9LAotICAgICAgICAnTGliJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnZmlsZTE7ZmlsZTI7ZmlsZTMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOiAnZm9sZGVyMTtmb2xkZXIyO2ZvbGRlcjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdFeHBvcnROYW1lZEZ1bmN0aW9ucyc6ICdkMTtkMjtkMycsCi0gICAgICAgICAgICAnRm9yY2VTeW1ib2xSZWZlcmVuY2VzJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnTW9kdWxlRGVmaW5pdGlvbkZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ091dHB1dEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICdVc2VVbmljb2RlUmVzcG9uc2VGaWxlcyc6ICd0cnVlJ30sCi0gICAgICAgICdNYW5pZmVzdCc6IHsKLSAgICAgICAgICAgICdBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcyc6ICdmaWxlMTtmaWxlMjtmaWxlMycsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0Fzc2VtYmx5SWRlbnRpdHknOiAnYV9zdHJpbmcnLAotICAgICAgICAgICAgJ0NvbXBvbmVudEZpbGVOYW1lJzogJ2FfZmlsZV9uYW1lJywKLSAgICAgICAgICAgICdHZW5lcmF0ZUNhdGFsb2dGaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbnB1dFJlc291cmNlTWFuaWZlc3RzJzogJ2Ffc3RyaW5nJywKLSAgICAgICAgICAgICdPdXRwdXRNYW5pZmVzdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1JlZ2lzdHJhclNjcmlwdEZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1JlcGxhY2VtZW50c0ZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICd0cnVlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1VwZGF0ZUZpbGVIYXNoZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlc1NlYXJjaFBhdGgnOiAnYV9maWxlX25hbWUnLAotICAgICAgICAgICAgJ1ZlcmJvc2VPdXRwdXQnOiAndHJ1ZSd9LAotICAgICAgICAnTWFuaWZlc3RSZXNvdXJjZUNvbXBpbGUnOiB7Ci0gICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6ICdteV9uYW1lJ30sCi0gICAgICAgICdQcm9qZWN0UmVmZXJlbmNlJzogewotICAgICAgICAgICAgJ0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzJzogJ2ZhbHNlJ30sCi0gICAgICAgICcnOiB7Ci0gICAgICAgICAgICAnRW1iZWRNYW5pZmVzdCc6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hbmlmZXN0JzogJ3RydWUnLAotICAgICAgICAgICAgJ0lnbm9yZUltcG9ydExpYnJhcnknOiAndHJ1ZScsCi0gICAgICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJ2ZhbHNlJ319Ci0gICAgYWN0dWFsX21zYnVpbGRfc2V0dGluZ3MgPSBNU1ZTU2V0dGluZ3MuQ29udmVydFRvTVNCdWlsZFNldHRpbmdzKAotICAgICAgICBtc3ZzX3NldHRpbmdzLAotICAgICAgICBzZWxmLnN0ZGVycikKLSAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX21zYnVpbGRfc2V0dGluZ3MsIGFjdHVhbF9tc2J1aWxkX3NldHRpbmdzKQotICAgIHNlbGYuX0V4cGVjdGVkV2FybmluZ3MoW10pCi0KLSAgZGVmIHRlc3RDb252ZXJ0VG9NU0J1aWxkU2V0dGluZ3NfYWN0dWFsKHNlbGYpOgotICAgICIiIlRlc3RzIHRoZSBjb252ZXJzaW9uIG9mIGFuIGFjdHVhbCBwcm9qZWN0LgotCi0gICAgQSBWUzIwMDggcHJvamVjdCB3aXRoIG1vc3Qgb2YgdGhlIG9wdGlvbnMgZGVmaW5lZCB3YXMgY3JlYXRlZCB0aHJvdWdoIHRoZQotICAgIFZTMjAwOCBJREUuICBJdCB3YXMgdGhlbiBjb252ZXJ0ZWQgdG8gVlMyMDEwLiAgVGhlIHRvb2wgc2V0dGluZ3MgZm91bmQgaW4KLSAgICB0aGUgLnZjcHJvaiBhbmQgLnZjeHByb2ogZmlsZXMgd2VyZSBjb252ZXJ0ZWQgdG8gdGhlIHR3byBkaWN0aW9uYXJpZXMKLSAgICBtc3ZzX3NldHRpbmdzIGFuZCBleHBlY3RlZF9tc2J1aWxkX3NldHRpbmdzLgotCi0gICAgTm90ZSB0aGF0IGZvciBtYW55IHNldHRpbmdzLCB0aGUgVlMyMDEwIGNvbnZlcnRlciBhZGRzIG1hY3JvcyBsaWtlCi0gICAgJShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKSB0byBtYWtlIHN1cmUgdGhhbiBpbmhlcml0ZWQgdmFsdWVzIGFyZQotICAgIGluY2x1ZGVkLiAgU2luY2UgdGhlIEd5cCBwcm9qZWN0cyB3ZSBnZW5lcmF0ZSBkbyBub3QgdXNlIGluaGVyaXRhbmNlLAotICAgIHdlIHJlbW92ZWQgdGhlc2UgbWFjcm9zLiAgVGhleSB3ZXJlOgotICAgICAgICBDbENvbXBpbGU6Ci0gICAgICAgICAgICBBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzOiAgJzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpJwotICAgICAgICAgICAgQWRkaXRpb25hbE9wdGlvbnM6ICAnICUoQWRkaXRpb25hbE9wdGlvbnMpJwotICAgICAgICAgICAgQWRkaXRpb25hbFVzaW5nRGlyZWN0b3JpZXM6ICAnOyUoQWRkaXRpb25hbFVzaW5nRGlyZWN0b3JpZXMpJwotICAgICAgICAgICAgRGlzYWJsZVNwZWNpZmljV2FybmluZ3M6ICc7JShEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyknLAotICAgICAgICAgICAgRm9yY2VkSW5jbHVkZUZpbGVzOiAgJzslKEZvcmNlZEluY2x1ZGVGaWxlcyknLAotICAgICAgICAgICAgRm9yY2VkVXNpbmdGaWxlczogICc7JShGb3JjZWRVc2luZ0ZpbGVzKScsCi0gICAgICAgICAgICBQcmVwcm9jZXNzb3JEZWZpbml0aW9uczogICc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyknLAotICAgICAgICAgICAgVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9uczoKLSAgICAgICAgICAgICAgICAnOyUoVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyknLAotICAgICAgICBMaW5rOgotICAgICAgICAgICAgQWRkaXRpb25hbERlcGVuZGVuY2llczogICc7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKScsCi0gICAgICAgICAgICBBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzOiAgJzslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpJywKLSAgICAgICAgICAgIEFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llczoKLSAgICAgICAgICAgICAgICAnOyUoQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzKScsCi0gICAgICAgICAgICBBZGRpdGlvbmFsT3B0aW9uczogICcgJShBZGRpdGlvbmFsT3B0aW9ucyknLAotICAgICAgICAgICAgQWRkTW9kdWxlTmFtZXNUb0Fzc2VtYmx5OiAgJzslKEFkZE1vZHVsZU5hbWVzVG9Bc3NlbWJseSknLAotICAgICAgICAgICAgQXNzZW1ibHlMaW5rUmVzb3VyY2U6ICAnOyUoQXNzZW1ibHlMaW5rUmVzb3VyY2UpJywKLSAgICAgICAgICAgIERlbGF5TG9hZERMTHM6ICAnOyUoRGVsYXlMb2FkRExMcyknLAotICAgICAgICAgICAgRW1iZWRNYW5hZ2VkUmVzb3VyY2VGaWxlOiAgJzslKEVtYmVkTWFuYWdlZFJlc291cmNlRmlsZSknLAotICAgICAgICAgICAgRm9yY2VTeW1ib2xSZWZlcmVuY2VzOiAgJzslKEZvcmNlU3ltYm9sUmVmZXJlbmNlcyknLAotICAgICAgICAgICAgSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzOgotICAgICAgICAgICAgICAgICc7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpJywKLSAgICAgICAgUmVzb3VyY2VDb21waWxlOgotICAgICAgICAgICAgQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllczogICc7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKScsCi0gICAgICAgICAgICBBZGRpdGlvbmFsT3B0aW9uczogICcgJShBZGRpdGlvbmFsT3B0aW9ucyknLAotICAgICAgICAgICAgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM6ICAnOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpJywKLSAgICAgICAgTWFuaWZlc3Q6Ci0gICAgICAgICAgICBBZGRpdGlvbmFsTWFuaWZlc3RGaWxlczogICc7JShBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcyknLAotICAgICAgICAgICAgQWRkaXRpb25hbE9wdGlvbnM6ICAnICUoQWRkaXRpb25hbE9wdGlvbnMpJywKLSAgICAgICAgICAgIElucHV0UmVzb3VyY2VNYW5pZmVzdHM6ICAnOyUoSW5wdXRSZXNvdXJjZU1hbmlmZXN0cyknLAotICAgICIiIgotICAgIG1zdnNfc2V0dGluZ3MgPSB7Ci0gICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZGlyMScsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnL21vcmUnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxVc2luZ0RpcmVjdG9yaWVzJzogJ3Rlc3QnLAotICAgICAgICAgICAgJ0Fzc2VtYmxlckxpc3RpbmdMb2NhdGlvbic6ICckKEludERpcilcXGEnLAotICAgICAgICAgICAgJ0Fzc2VtYmxlck91dHB1dCc6ICcxJywKLSAgICAgICAgICAgICdCYXNpY1J1bnRpbWVDaGVja3MnOiAnMycsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb24nOiAnMScsCi0gICAgICAgICAgICAnQnJvd3NlSW5mb3JtYXRpb25GaWxlJzogJyQoSW50RGlyKVxcZScsCi0gICAgICAgICAgICAnQnVmZmVyU2VjdXJpdHlDaGVjayc6ICdmYWxzZScsCi0gICAgICAgICAgICAnQ2FsbGluZ0NvbnZlbnRpb24nOiAnMScsCi0gICAgICAgICAgICAnQ29tcGlsZUFzJzogJzEnLAotICAgICAgICAgICAgJ0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQnOiAnNCcsCi0gICAgICAgICAgICAnRGVmYXVsdENoYXJJc1Vuc2lnbmVkJzogJ3RydWUnLAotICAgICAgICAgICAgJ0RldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzJzogJ2FiYycsCi0gICAgICAgICAgICAnRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldCc6ICcxJywKLSAgICAgICAgICAgICdFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ0VuYWJsZUludHJpbnNpY0Z1bmN0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdFbmFibGVQUkVmYXN0JzogJ3RydWUnLAotICAgICAgICAgICAgJ0Vycm9yUmVwb3J0aW5nJzogJzInLAotICAgICAgICAgICAgJ0V4Y2VwdGlvbkhhbmRsaW5nJzogJzInLAotICAgICAgICAgICAgJ0V4cGFuZEF0dHJpYnV0ZWRTb3VyY2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRmF2b3JTaXplT3JTcGVlZCc6ICcyJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50RXhjZXB0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50TW9kZWwnOiAnMScsCi0gICAgICAgICAgICAnRm9yY2VDb25mb3JtYW5jZUluRm9yTG9vcFNjb3BlJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdGb3JjZWRJbmNsdWRlRmlsZXMnOiAnZGVmJywKLSAgICAgICAgICAgICdGb3JjZWRVc2luZ0ZpbGVzJzogJ2dlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZVByZXByb2Nlc3NlZEZpbGUnOiAnMicsCi0gICAgICAgICAgICAnR2VuZXJhdGVYTUxEb2N1bWVudGF0aW9uRmlsZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlU3RhbmRhcmRJbmNsdWRlUGF0aCc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbic6ICcxJywKLSAgICAgICAgICAgICdLZWVwQ29tbWVudHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnTWluaW1hbFJlYnVpbGQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT2JqZWN0RmlsZSc6ICckKEludERpcilcXGInLAotICAgICAgICAgICAgJ09taXREZWZhdWx0TGliTmFtZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdPbWl0RnJhbWVQb2ludGVycyc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcGVuTVAnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT3B0aW1pemF0aW9uJzogJzMnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyRmlsZSc6ICckKEludERpcilcXCQoVGFyZ2V0TmFtZSkucGNoZScsCi0gICAgICAgICAgICAnUHJlY29tcGlsZWRIZWFkZXJUaHJvdWdoJzogJ1N0ZEFmeC5oZCcsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnV0lOMzI7X0RFQlVHO19DT05TT0xFJywKLSAgICAgICAgICAgICdQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZSc6ICckKEludERpcilcXHZjOTBiLnBkYicsCi0gICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMycsCi0gICAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdTaG93SW5jbHVkZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU21hbGxlclR5cGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICczJywKLSAgICAgICAgICAgICdTdXBwcmVzc1N0YXJ0dXBCYW5uZXInOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1RyZWF0V0NoYXJfdEFzQnVpbHRJblR5cGUnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1VuZGVmaW5lQWxsUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVW5kZWZpbmVQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyc6ICd3ZXInLAotICAgICAgICAgICAgJ1VzZUZ1bGxQYXRocyc6ICd0cnVlJywKLSAgICAgICAgICAgICdVc2VQcmVjb21waWxlZEhlYWRlcic6ICcwJywKLSAgICAgICAgICAgICdVc2VVbmljb2RlUmVzcG9uc2VGaWxlcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnV2FybkFzRXJyb3InOiAndHJ1ZScsCi0gICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJzMnLAotICAgICAgICAgICAgJ1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdYTUxEb2N1bWVudGF0aW9uRmlsZU5hbWUnOiAnJChJbnREaXIpXFxjJ30sCi0gICAgICAgICdWQ0xpbmtlclRvb2wnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6ICd6eCcsCi0gICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyc6ICdhc2QnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcyc6ICdzMicsCi0gICAgICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiAnL21vcjInLAotICAgICAgICAgICAgJ0FkZE1vZHVsZU5hbWVzVG9Bc3NlbWJseSc6ICdkMScsCi0gICAgICAgICAgICAnQWxsb3dJc29sYXRpb24nOiAnZmFsc2UnLAotICAgICAgICAgICAgJ0Fzc2VtYmx5RGVidWcnOiAnMScsCi0gICAgICAgICAgICAnQXNzZW1ibHlMaW5rUmVzb3VyY2UnOiAnZDUnLAotICAgICAgICAgICAgJ0Jhc2VBZGRyZXNzJzogJzIzNDIzJywKLSAgICAgICAgICAgICdDTFJJbWFnZVR5cGUnOiAnMycsCi0gICAgICAgICAgICAnQ0xSVGhyZWFkQXR0cmlidXRlJzogJzEnLAotICAgICAgICAgICAgJ0NMUlVubWFuYWdlZENvZGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdEYXRhRXhlY3V0aW9uUHJldmVudGlvbic6ICcwJywKLSAgICAgICAgICAgICdEZWxheUxvYWRETExzJzogJ2Q0JywKLSAgICAgICAgICAgICdEZWxheVNpZ24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnRHJpdmVyJzogJzInLAotICAgICAgICAgICAgJ0VtYmVkTWFuYWdlZFJlc291cmNlRmlsZSc6ICdkMicsCi0gICAgICAgICAgICAnRW5hYmxlQ09NREFURm9sZGluZyc6ICcxJywKLSAgICAgICAgICAgICdFbmFibGVVQUMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ0VudHJ5UG9pbnRTeW1ib2wnOiAnZjUnLAotICAgICAgICAgICAgJ0Vycm9yUmVwb3J0aW5nJzogJzInLAotICAgICAgICAgICAgJ0ZpeGVkQmFzZUFkZHJlc3MnOiAnMScsCi0gICAgICAgICAgICAnRm9yY2VTeW1ib2xSZWZlcmVuY2VzJzogJ2QzJywKLSAgICAgICAgICAgICdGdW5jdGlvbk9yZGVyJzogJ2Zzc2Rmc2QnLAotICAgICAgICAgICAgJ0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hbmlmZXN0JzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hcEZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSGVhcENvbW1pdFNpemUnOiAnMTMnLAotICAgICAgICAgICAgJ0hlYXBSZXNlcnZlU2l6ZSc6ICcxMicsCi0gICAgICAgICAgICAnSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzJzogJ2Zsb2I7ZmxvaycsCi0gICAgICAgICAgICAnSWdub3JlRW1iZWRkZWRJREwnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSWdub3JlSW1wb3J0TGlicmFyeSc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbXBvcnRMaWJyYXJ5JzogJ2Y0JywKLSAgICAgICAgICAgICdLZXlDb250YWluZXInOiAnZjcnLAotICAgICAgICAgICAgJ0tleUZpbGUnOiAnZjYnLAotICAgICAgICAgICAgJ0xhcmdlQWRkcmVzc0F3YXJlJzogJzInLAotICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcwJywKLSAgICAgICAgICAgICdMaW5rTGlicmFyeURlcGVuZGVuY2llcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnTGlua1RpbWVDb2RlR2VuZXJhdGlvbic6ICcxJywKLSAgICAgICAgICAgICdNYW5pZmVzdEZpbGUnOgotICAgICAgICAgICAgJyQoSW50RGlyKVxcJChUYXJnZXRGaWxlTmFtZSkuMmludGVybWVkaWF0ZS5tYW5pZmVzdCcsCi0gICAgICAgICAgICAnTWFwRXhwb3J0cyc6ICd0cnVlJywKLSAgICAgICAgICAgICdNYXBGaWxlTmFtZSc6ICdkNScsCi0gICAgICAgICAgICAnTWVyZ2VkSURMQmFzZUZpbGVOYW1lJzogJ2YyJywKLSAgICAgICAgICAgICdNZXJnZVNlY3Rpb25zJzogJ2Y1JywKLSAgICAgICAgICAgICdNaWRsQ29tbWFuZEZpbGUnOiAnZjEnLAotICAgICAgICAgICAgJ01vZHVsZURlZmluaXRpb25GaWxlJzogJ3Nkc2QnLAotICAgICAgICAgICAgJ09wdGltaXplRm9yV2luZG93czk4JzogJzInLAotICAgICAgICAgICAgJ09wdGltaXplUmVmZXJlbmNlcyc6ICcyJywKLSAgICAgICAgICAgICdPdXRwdXRGaWxlJzogJyQoT3V0RGlyKVxcJChQcm9qZWN0TmFtZSkyLmV4ZScsCi0gICAgICAgICAgICAnUGVyVXNlclJlZGlyZWN0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ1Byb2ZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnUHJvZmlsZUd1aWRlZERhdGFiYXNlJzogJyQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGdkZCcsCi0gICAgICAgICAgICAnUHJvZ3JhbURhdGFiYXNlRmlsZSc6ICdGbG9iLnBkYicsCi0gICAgICAgICAgICAnUmFuZG9taXplZEJhc2VBZGRyZXNzJzogJzEnLAotICAgICAgICAgICAgJ1JlZ2lzdGVyT3V0cHV0JzogJ3RydWUnLAotICAgICAgICAgICAgJ1Jlc291cmNlT25seURMTCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTZXRDaGVja3N1bSc6ICdmYWxzZScsCi0gICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJzEnLAotICAgICAgICAgICAgJ1N0YWNrQ29tbWl0U2l6ZSc6ICcxNScsCi0gICAgICAgICAgICAnU3RhY2tSZXNlcnZlU2l6ZSc6ICcxNCcsCi0gICAgICAgICAgICAnU3RyaXBQcml2YXRlU3ltYm9scyc6ICdkMycsCi0gICAgICAgICAgICAnU3ViU3lzdGVtJzogJzEnLAotICAgICAgICAgICAgJ1N1cHBvcnRVbmxvYWRPZkRlbGF5TG9hZGVkRExMJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICdmYWxzZScsCi0gICAgICAgICAgICAnU3dhcFJ1bkZyb21DRCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTd2FwUnVuRnJvbU5ldCc6ICd0cnVlJywKLSAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJzEnLAotICAgICAgICAgICAgJ1Rlcm1pbmFsU2VydmVyQXdhcmUnOiAnMScsCi0gICAgICAgICAgICAnVHVybk9mZkFzc2VtYmx5R2VuZXJhdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnZjMnLAotICAgICAgICAgICAgJ1R5cGVMaWJyYXJ5UmVzb3VyY2VJRCc6ICcxMicsCi0gICAgICAgICAgICAnVUFDRXhlY3V0aW9uTGV2ZWwnOiAnMicsCi0gICAgICAgICAgICAnVUFDVUlBY2Nlc3MnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1ZlcnNpb24nOiAnMzMzJ30sCi0gICAgICAgICdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJy9tb3JlMycsCi0gICAgICAgICAgICAnQ3VsdHVyZSc6ICczMDg0JywKLSAgICAgICAgICAgICdJZ25vcmVTdGFuZGFyZEluY2x1ZGVQYXRoJzogJ3RydWUnLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ19VTklDT0RFO1VOSUNPREUyJywKLSAgICAgICAgICAgICdSZXNvdXJjZU91dHB1dEZpbGVOYW1lJzogJyQoSW50RGlyKS8kKElucHV0TmFtZSkzLnJlcycsCi0gICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJ3RydWUnfSwKLSAgICAgICAgJ1ZDTWFuaWZlc3RUb29sJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdEZpbGVzJzogJ3Nmc2Rmc2QnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2FmZHNkYWZzZCcsCi0gICAgICAgICAgICAnQXNzZW1ibHlJZGVudGl0eSc6ICdzZGRmZHNhZGZzYScsCi0gICAgICAgICAgICAnQ29tcG9uZW50RmlsZU5hbWUnOiAnZnNkZmRzJywKLSAgICAgICAgICAgICdEZXBlbmRlbmN5SW5mb3JtYXRpb25GaWxlJzogJyQoSW50RGlyKVxcbXQuZGVwZGZkJywKLSAgICAgICAgICAgICdFbWJlZE1hbmlmZXN0JzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZUNhdGFsb2dGaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbnB1dFJlc291cmNlTWFuaWZlc3RzJzogJ2FzZnNmZGFmcycsCi0gICAgICAgICAgICAnTWFuaWZlc3RSZXNvdXJjZUZpbGUnOgotICAgICAgICAgICAgJyQoSW50RGlyKVxcJChUYXJnZXRGaWxlTmFtZSkuZW1iZWQubWFuaWZlc3QucmVzZmRzZicsCi0gICAgICAgICAgICAnT3V0cHV0TWFuaWZlc3RGaWxlJzogJyQoVGFyZ2V0UGF0aCkubWFuaWZlc3RkZnMnLAotICAgICAgICAgICAgJ1JlZ2lzdHJhclNjcmlwdEZpbGUnOiAnc2Rmc2ZkJywKLSAgICAgICAgICAgICdSZXBsYWNlbWVudHNGaWxlJzogJ3NkZmZzZCcsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnc2ZzZCcsCi0gICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdVcGRhdGVGaWxlSGFzaGVzU2VhcmNoUGF0aCc6ICdzZnNkJywKLSAgICAgICAgICAgICdVc2VGQVQzMldvcmthcm91bmQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnVXNlVW5pY29kZVJlc3BvbnNlRmlsZXMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1ZlcmJvc2VPdXRwdXQnOiAndHJ1ZSd9fQotICAgIGV4cGVjdGVkX21zYnVpbGRfc2V0dGluZ3MgPSB7Ci0gICAgICAgICdDbENvbXBpbGUnOiB7Ci0gICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyc6ICdkaXIxJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6ICcvbW9yZSAvSicsCi0gICAgICAgICAgICAnQWRkaXRpb25hbFVzaW5nRGlyZWN0b3JpZXMnOiAndGVzdCcsCi0gICAgICAgICAgICAnQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uJzogJyQoSW50RGlyKWEnLAotICAgICAgICAgICAgJ0Fzc2VtYmxlck91dHB1dCc6ICdBc3NlbWJseUNvZGUnLAotICAgICAgICAgICAgJ0Jhc2ljUnVudGltZUNoZWNrcyc6ICdFbmFibGVGYXN0Q2hlY2tzJywKLSAgICAgICAgICAgICdCcm93c2VJbmZvcm1hdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdCcm93c2VJbmZvcm1hdGlvbkZpbGUnOiAnJChJbnREaXIpZScsCi0gICAgICAgICAgICAnQnVmZmVyU2VjdXJpdHlDaGVjayc6ICdmYWxzZScsCi0gICAgICAgICAgICAnQ2FsbGluZ0NvbnZlbnRpb24nOiAnRmFzdENhbGwnLAotICAgICAgICAgICAgJ0NvbXBpbGVBcyc6ICdDb21waWxlQXNDJywKLSAgICAgICAgICAgICdEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0JzogJ0VkaXRBbmRDb250aW51ZScsCi0gICAgICAgICAgICAnRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncyc6ICdhYmMnLAotICAgICAgICAgICAgJ0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQnOiAnU3RyZWFtaW5nU0lNREV4dGVuc2lvbnMnLAotICAgICAgICAgICAgJ0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRW5hYmxlUFJFZmFzdCc6ICd0cnVlJywKLSAgICAgICAgICAgICdFcnJvclJlcG9ydGluZyc6ICdRdWV1ZScsCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnQXN5bmMnLAotICAgICAgICAgICAgJ0V4cGFuZEF0dHJpYnV0ZWRTb3VyY2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAnRmF2b3JTaXplT3JTcGVlZCc6ICdTaXplJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50RXhjZXB0aW9ucyc6ICd0cnVlJywKLSAgICAgICAgICAgICdGbG9hdGluZ1BvaW50TW9kZWwnOiAnU3RyaWN0JywKLSAgICAgICAgICAgICdGb3JjZUNvbmZvcm1hbmNlSW5Gb3JMb29wU2NvcGUnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ0ZvcmNlZEluY2x1ZGVGaWxlcyc6ICdkZWYnLAotICAgICAgICAgICAgJ0ZvcmNlZFVzaW5nRmlsZXMnOiAnZ2UnLAotICAgICAgICAgICAgJ0Z1bmN0aW9uTGV2ZWxMaW5raW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ0dlbmVyYXRlWE1MRG9jdW1lbnRhdGlvbkZpbGVzJzogJ3RydWUnLAotICAgICAgICAgICAgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSW5saW5lRnVuY3Rpb25FeHBhbnNpb24nOiAnT25seUV4cGxpY2l0SW5saW5lJywKLSAgICAgICAgICAgICdJbnRyaW5zaWNGdW5jdGlvbnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnTWluaW1hbFJlYnVpbGQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT2JqZWN0RmlsZU5hbWUnOiAnJChJbnREaXIpYicsCi0gICAgICAgICAgICAnT21pdERlZmF1bHRMaWJOYW1lJzogJ3RydWUnLAotICAgICAgICAgICAgJ09taXRGcmFtZVBvaW50ZXJzJzogJ3RydWUnLAotICAgICAgICAgICAgJ09wZW5NUFN1cHBvcnQnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT3B0aW1pemF0aW9uJzogJ0Z1bGwnLAotICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyJzogJ05vdFVzaW5nJywgICMgQWN0dWFsIGNvbnZlcnNpb24gZ2l2ZXMgJycKLSAgICAgICAgICAgICdQcmVjb21waWxlZEhlYWRlckZpbGUnOiAnU3RkQWZ4LmhkJywKLSAgICAgICAgICAgICdQcmVjb21waWxlZEhlYWRlck91dHB1dEZpbGUnOiAnJChJbnREaXIpJChUYXJnZXROYW1lKS5wY2hlJywKLSAgICAgICAgICAgICdQcmVwcm9jZXNzS2VlcENvbW1lbnRzJzogJ3RydWUnLAotICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ1dJTjMyO19ERUJVRztfQ09OU09MRScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc1N1cHByZXNzTGluZU51bWJlcnMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc1RvRmlsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZSc6ICckKEludERpcil2YzkwYi5wZGInLAotICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJ011bHRpVGhyZWFkZWREZWJ1Z0RMTCcsCi0gICAgICAgICAgICAnUnVudGltZVR5cGVJbmZvJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdTaG93SW5jbHVkZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnU21hbGxlclR5cGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdTdHJpbmdQb29saW5nJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N0cnVjdE1lbWJlckFsaWdubWVudCc6ICc0Qnl0ZXMnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICdmYWxzZScsCi0gICAgICAgICAgICAnVHJlYXRXYXJuaW5nQXNFcnJvcic6ICd0cnVlJywKLSAgICAgICAgICAgICdUcmVhdFdDaGFyX3RBc0J1aWx0SW5UeXBlJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdVbmRlZmluZUFsbFByZXByb2Nlc3NvckRlZmluaXRpb25zJzogJ3RydWUnLAotICAgICAgICAgICAgJ1VuZGVmaW5lUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnd2VyJywKLSAgICAgICAgICAgICdVc2VGdWxsUGF0aHMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnV2FybmluZ0xldmVsJzogJ0xldmVsMycsCi0gICAgICAgICAgICAnV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uJzogJ3RydWUnLAotICAgICAgICAgICAgJ1hNTERvY3VtZW50YXRpb25GaWxlTmFtZSc6ICckKEludERpciljJ30sCi0gICAgICAgICdMaW5rJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnOiAnengnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnOiAnYXNkJywKLSAgICAgICAgICAgICdBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXMnOiAnczInLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJy9tb3IyJywKLSAgICAgICAgICAgICdBZGRNb2R1bGVOYW1lc1RvQXNzZW1ibHknOiAnZDEnLAotICAgICAgICAgICAgJ0FsbG93SXNvbGF0aW9uJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdBc3NlbWJseURlYnVnJzogJ3RydWUnLAotICAgICAgICAgICAgJ0Fzc2VtYmx5TGlua1Jlc291cmNlJzogJ2Q1JywKLSAgICAgICAgICAgICdCYXNlQWRkcmVzcyc6ICcyMzQyMycsCi0gICAgICAgICAgICAnQ0xSSW1hZ2VUeXBlJzogJ0ZvcmNlU2FmZUlMSW1hZ2UnLAotICAgICAgICAgICAgJ0NMUlRocmVhZEF0dHJpYnV0ZSc6ICdNVEFUaHJlYWRpbmdBdHRyaWJ1dGUnLAotICAgICAgICAgICAgJ0NMUlVubWFuYWdlZENvZGVDaGVjayc6ICd0cnVlJywKLSAgICAgICAgICAgICdEYXRhRXhlY3V0aW9uUHJldmVudGlvbic6ICcnLAotICAgICAgICAgICAgJ0RlbGF5TG9hZERMTHMnOiAnZDQnLAotICAgICAgICAgICAgJ0RlbGF5U2lnbic6ICd0cnVlJywKLSAgICAgICAgICAgICdEcml2ZXInOiAnVXBPbmx5JywKLSAgICAgICAgICAgICdFbWJlZE1hbmFnZWRSZXNvdXJjZUZpbGUnOiAnZDInLAotICAgICAgICAgICAgJ0VuYWJsZUNPTURBVEZvbGRpbmcnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ0VuYWJsZVVBQyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnRW50cnlQb2ludFN5bWJvbCc6ICdmNScsCi0gICAgICAgICAgICAnRml4ZWRCYXNlQWRkcmVzcyc6ICdmYWxzZScsCi0gICAgICAgICAgICAnRm9yY2VTeW1ib2xSZWZlcmVuY2VzJzogJ2QzJywKLSAgICAgICAgICAgICdGdW5jdGlvbk9yZGVyJzogJ2Zzc2Rmc2QnLAotICAgICAgICAgICAgJ0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbic6ICd0cnVlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hcEZpbGUnOiAndHJ1ZScsCi0gICAgICAgICAgICAnSGVhcENvbW1pdFNpemUnOiAnMTMnLAotICAgICAgICAgICAgJ0hlYXBSZXNlcnZlU2l6ZSc6ICcxMicsCi0gICAgICAgICAgICAnSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVFbWJlZGRlZElETCc6ICd0cnVlJywKLSAgICAgICAgICAgICdJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMnOiAnZmxvYjtmbG9rJywKLSAgICAgICAgICAgICdJbXBvcnRMaWJyYXJ5JzogJ2Y0JywKLSAgICAgICAgICAgICdLZXlDb250YWluZXInOiAnZjcnLAotICAgICAgICAgICAgJ0tleUZpbGUnOiAnZjYnLAotICAgICAgICAgICAgJ0xhcmdlQWRkcmVzc0F3YXJlJzogJ3RydWUnLAotICAgICAgICAgICAgJ0xpbmtFcnJvclJlcG9ydGluZyc6ICdRdWV1ZUZvck5leHRMb2dpbicsCi0gICAgICAgICAgICAnTGlua1RpbWVDb2RlR2VuZXJhdGlvbic6ICdVc2VMaW5rVGltZUNvZGVHZW5lcmF0aW9uJywKLSAgICAgICAgICAgICdNYW5pZmVzdEZpbGUnOiAnJChJbnREaXIpJChUYXJnZXRGaWxlTmFtZSkuMmludGVybWVkaWF0ZS5tYW5pZmVzdCcsCi0gICAgICAgICAgICAnTWFwRXhwb3J0cyc6ICd0cnVlJywKLSAgICAgICAgICAgICdNYXBGaWxlTmFtZSc6ICdkNScsCi0gICAgICAgICAgICAnTWVyZ2VkSURMQmFzZUZpbGVOYW1lJzogJ2YyJywKLSAgICAgICAgICAgICdNZXJnZVNlY3Rpb25zJzogJ2Y1JywKLSAgICAgICAgICAgICdNaWRsQ29tbWFuZEZpbGUnOiAnZjEnLAotICAgICAgICAgICAgJ01vZHVsZURlZmluaXRpb25GaWxlJzogJ3Nkc2QnLAotICAgICAgICAgICAgJ05vRW50cnlQb2ludCc6ICd0cnVlJywKLSAgICAgICAgICAgICdPcHRpbWl6ZVJlZmVyZW5jZXMnOiAndHJ1ZScsCi0gICAgICAgICAgICAnT3V0cHV0RmlsZSc6ICckKE91dERpcikkKFByb2plY3ROYW1lKTIuZXhlJywKLSAgICAgICAgICAgICdQZXJVc2VyUmVkaXJlY3Rpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnUHJvZmlsZSc6ICd0cnVlJywKLSAgICAgICAgICAgICdQcm9maWxlR3VpZGVkRGF0YWJhc2UnOiAnJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZ2RkJywKLSAgICAgICAgICAgICdQcm9ncmFtRGF0YWJhc2VGaWxlJzogJ0Zsb2IucGRiJywKLSAgICAgICAgICAgICdSYW5kb21pemVkQmFzZUFkZHJlc3MnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1JlZ2lzdGVyT3V0cHV0JzogJ3RydWUnLAotICAgICAgICAgICAgJ1NldENoZWNrc3VtJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdTaG93UHJvZ3Jlc3MnOiAnTGlua1ZlcmJvc2UnLAotICAgICAgICAgICAgJ1N0YWNrQ29tbWl0U2l6ZSc6ICcxNScsCi0gICAgICAgICAgICAnU3RhY2tSZXNlcnZlU2l6ZSc6ICcxNCcsCi0gICAgICAgICAgICAnU3RyaXBQcml2YXRlU3ltYm9scyc6ICdkMycsCi0gICAgICAgICAgICAnU3ViU3lzdGVtJzogJ0NvbnNvbGUnLAotICAgICAgICAgICAgJ1N1cHBvcnRVbmxvYWRPZkRlbGF5TG9hZGVkRExMJzogJ3RydWUnLAotICAgICAgICAgICAgJ1N1cHByZXNzU3RhcnR1cEJhbm5lcic6ICdmYWxzZScsCi0gICAgICAgICAgICAnU3dhcFJ1bkZyb21DRCc6ICd0cnVlJywKLSAgICAgICAgICAgICdTd2FwUnVuRnJvbU5FVCc6ICd0cnVlJywKLSAgICAgICAgICAgICdUYXJnZXRNYWNoaW5lJzogJ01hY2hpbmVYODYnLAotICAgICAgICAgICAgJ1Rlcm1pbmFsU2VydmVyQXdhcmUnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1R1cm5PZmZBc3NlbWJseUdlbmVyYXRpb24nOiAndHJ1ZScsCi0gICAgICAgICAgICAnVHlwZUxpYnJhcnlGaWxlJzogJ2YzJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeVJlc291cmNlSUQnOiAnMTInLAotICAgICAgICAgICAgJ1VBQ0V4ZWN1dGlvbkxldmVsJzogJ1JlcXVpcmVBZG1pbmlzdHJhdG9yJywKLSAgICAgICAgICAgICdVQUNVSUFjY2Vzcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdWZXJzaW9uJzogJzMzMyd9LAotICAgICAgICAnUmVzb3VyY2VDb21waWxlJzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnOiAnZjMnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJy9tb3JlMycsCi0gICAgICAgICAgICAnQ3VsdHVyZSc6ICcweDBjMGMnLAotICAgICAgICAgICAgJ0lnbm9yZVN0YW5kYXJkSW5jbHVkZVBhdGgnOiAndHJ1ZScsCi0gICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnOiAnX1VOSUNPREU7VU5JQ09ERTInLAotICAgICAgICAgICAgJ1Jlc291cmNlT3V0cHV0RmlsZU5hbWUnOiAnJChJbnREaXIpJShGaWxlbmFtZSkzLnJlcycsCi0gICAgICAgICAgICAnU2hvd1Byb2dyZXNzJzogJ3RydWUnfSwKLSAgICAgICAgJ01hbmlmZXN0JzogewotICAgICAgICAgICAgJ0FkZGl0aW9uYWxNYW5pZmVzdEZpbGVzJzogJ3Nmc2Rmc2QnLAotICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJ2FmZHNkYWZzZCcsCi0gICAgICAgICAgICAnQXNzZW1ibHlJZGVudGl0eSc6ICdzZGRmZHNhZGZzYScsCi0gICAgICAgICAgICAnQ29tcG9uZW50RmlsZU5hbWUnOiAnZnNkZmRzJywKLSAgICAgICAgICAgICdHZW5lcmF0ZUNhdGFsb2dGaWxlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdJbnB1dFJlc291cmNlTWFuaWZlc3RzJzogJ2FzZnNmZGFmcycsCi0gICAgICAgICAgICAnT3V0cHV0TWFuaWZlc3RGaWxlJzogJyQoVGFyZ2V0UGF0aCkubWFuaWZlc3RkZnMnLAotICAgICAgICAgICAgJ1JlZ2lzdHJhclNjcmlwdEZpbGUnOiAnc2Rmc2ZkJywKLSAgICAgICAgICAgICdSZXBsYWNlbWVudHNGaWxlJzogJ3NkZmZzZCcsCi0gICAgICAgICAgICAnU3VwcHJlc3NTdGFydHVwQmFubmVyJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdUeXBlTGlicmFyeUZpbGUnOiAnc2ZzZCcsCi0gICAgICAgICAgICAnVXBkYXRlRmlsZUhhc2hlcyc6ICd0cnVlJywKLSAgICAgICAgICAgICdVcGRhdGVGaWxlSGFzaGVzU2VhcmNoUGF0aCc6ICdzZnNkJywKLSAgICAgICAgICAgICdWZXJib3NlT3V0cHV0JzogJ3RydWUnfSwKLSAgICAgICAgJ1Byb2plY3RSZWZlcmVuY2UnOiB7Ci0gICAgICAgICAgICAnTGlua0xpYnJhcnlEZXBlbmRlbmNpZXMnOiAnZmFsc2UnLAotICAgICAgICAgICAgJ1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzJzogJ3RydWUnfSwKLSAgICAgICAgJyc6IHsKLSAgICAgICAgICAgICdFbWJlZE1hbmlmZXN0JzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdHZW5lcmF0ZU1hbmlmZXN0JzogJ2ZhbHNlJywKLSAgICAgICAgICAgICdJZ25vcmVJbXBvcnRMaWJyYXJ5JzogJ3RydWUnLAotICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcnCi0gICAgICAgICAgICB9LAotICAgICAgICAnTWFuaWZlc3RSZXNvdXJjZUNvbXBpbGUnOiB7Ci0gICAgICAgICAgICAnUmVzb3VyY2VPdXRwdXRGaWxlTmFtZSc6Ci0gICAgICAgICAgICAnJChJbnREaXIpJChUYXJnZXRGaWxlTmFtZSkuZW1iZWQubWFuaWZlc3QucmVzZmRzZid9Ci0gICAgICAgIH0KLSAgICBhY3R1YWxfbXNidWlsZF9zZXR0aW5ncyA9IE1TVlNTZXR0aW5ncy5Db252ZXJ0VG9NU0J1aWxkU2V0dGluZ3MoCi0gICAgICAgIG1zdnNfc2V0dGluZ3MsCi0gICAgICAgIHNlbGYuc3RkZXJyKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbXNidWlsZF9zZXR0aW5ncywgYWN0dWFsX21zYnVpbGRfc2V0dGluZ3MpCi0gICAgc2VsZi5fRXhwZWN0ZWRXYXJuaW5ncyhbXSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1Rvb2xGaWxlLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVG9vbEZpbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZTUyOWEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVG9vbEZpbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlZpc3VhbCBTdHVkaW8gcHJvamVjdCByZWFkZXIvd3JpdGVyLiIiIgotCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IGd5cC5lYXN5X3htbCBhcyBlYXN5X3htbAotCi0KLWNsYXNzIFdyaXRlcihvYmplY3QpOgotICAiIiJWaXN1YWwgU3R1ZGlvIFhNTCB0b29sIGZpbGUgd3JpdGVyLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0b29sX2ZpbGVfcGF0aCwgbmFtZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZXMgdGhlIHRvb2wgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICB0b29sX2ZpbGVfcGF0aDogUGF0aCB0byB0aGUgdG9vbCBmaWxlLgotICAgICAgbmFtZTogTmFtZSBvZiB0aGUgdG9vbCBmaWxlLgotICAgICIiIgotICAgIHNlbGYudG9vbF9maWxlX3BhdGggPSB0b29sX2ZpbGVfcGF0aAotICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICBzZWxmLnJ1bGVzX3NlY3Rpb24gPSBbJ1J1bGVzJ10KLQotICBkZWYgQWRkQ3VzdG9tQnVpbGRSdWxlKHNlbGYsIG5hbWUsIGNtZCwgZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0cywgZXh0ZW5zaW9ucyk6Ci0gICAgIiIiQWRkcyBhIHJ1bGUgdG8gdGhlIHRvb2wgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICBuYW1lOiBOYW1lIG9mIHRoZSBydWxlLgotICAgICAgZGVzY3JpcHRpb246IERlc2NyaXB0aW9uIG9mIHRoZSBydWxlLgotICAgICAgY21kOiBDb21tYW5kIGxpbmUgb2YgdGhlIHJ1bGUuCi0gICAgICBhZGRpdGlvbmFsX2RlcGVuZGVuY2llczogb3RoZXIgZmlsZXMgd2hpY2ggbWF5IHRyaWdnZXIgdGhlIHJ1bGUuCi0gICAgICBvdXRwdXRzOiBvdXRwdXRzIG9mIHRoZSBydWxlLgotICAgICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyBoYW5kbGVkIGJ5IHRoZSBydWxlLgotICAgICIiIgotICAgIHJ1bGUgPSBbJ0N1c3RvbUJ1aWxkUnVsZScsCi0gICAgICAgICAgICB7J05hbWUnOiBuYW1lLAotICAgICAgICAgICAgICdFeGVjdXRpb25EZXNjcmlwdGlvbic6IGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICdDb21tYW5kTGluZSc6IGNtZCwKLSAgICAgICAgICAgICAnT3V0cHV0cyc6ICc7Jy5qb2luKG91dHB1dHMpLAotICAgICAgICAgICAgICdGaWxlRXh0ZW5zaW9ucyc6ICc7Jy5qb2luKGV4dGVuc2lvbnMpLAotICAgICAgICAgICAgICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJzoKLSAgICAgICAgICAgICAgICAgJzsnLmpvaW4oYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCi0gICAgICAgICAgICB9XQotICAgIHNlbGYucnVsZXNfc2VjdGlvbi5hcHBlbmQocnVsZSkKLQotICBkZWYgV3JpdGVJZkNoYW5nZWQoc2VsZik6Ci0gICAgIiIiV3JpdGVzIHRoZSB0b29sIGZpbGUuIiIiCi0gICAgY29udGVudCA9IFsnVmlzdWFsU3R1ZGlvVG9vbEZpbGUnLAotICAgICAgICAgICAgICAgeydWZXJzaW9uJzogJzguMDAnLAotICAgICAgICAgICAgICAgICdOYW1lJzogc2VsZi5uYW1lCi0gICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgc2VsZi5ydWxlc19zZWN0aW9uCi0gICAgICAgICAgICAgICBdCi0gICAgZWFzeV94bWwuV3JpdGVYbWxJZkNoYW5nZWQoY29udGVudCwgc2VsZi50b29sX2ZpbGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iV2luZG93cy0xMjUyIikKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1VzZXJGaWxlLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVXNlckZpbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMDdlOWEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVXNlckZpbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJWaXN1YWwgU3R1ZGlvIHVzZXIgcHJlZmVyZW5jZXMgZmlsZSB3cml0ZXIuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc29ja2V0ICMgZm9yIGdldGhvc3RuYW1lCi0KLWltcG9ydCBneXAuY29tbW9uCi1pbXBvcnQgZ3lwLmVhc3lfeG1sIGFzIGVhc3lfeG1sCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1kZWYgX0ZpbmRDb21tYW5kSW5QYXRoKGNvbW1hbmQpOgotICAiIiJJZiB0aGVyZSBhcmUgbm8gc2xhc2hlcyBpbiB0aGUgY29tbWFuZCBnaXZlbiwgdGhpcyBmdW5jdGlvbgotICAgICBzZWFyY2hlcyB0aGUgUEFUSCBlbnYgdG8gZmluZCB0aGUgZ2l2ZW4gY29tbWFuZCwgYW5kIGNvbnZlcnRzIGl0Ci0gICAgIHRvIGFuIGFic29sdXRlIHBhdGguICBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBNU1ZTIGlzIGxvb2tpbmcKLSAgICAgZm9yIGFuIGFjdHVhbCBmaWxlIHRvIGxhdW5jaCBhIGRlYnVnZ2VyIG9uLCBub3QganVzdCBhIGNvbW1hbmQKLSAgICAgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGhhcHBlbnMgYXQgR1lQIHRpbWUsIHNvIGFueXRoaW5nIG5lZWRpbmcgdG8KLSAgICAgYmUgYnVpbHQgbmVlZHMgdG8gaGF2ZSBhIGZ1bGwgcGF0aC4iIiIKLSAgaWYgJy8nIGluIGNvbW1hbmQgb3IgJ1xcJyBpbiBjb21tYW5kOgotICAgICMgSWYgdGhlIGNvbW1hbmQgYWxyZWFkeSBoYXMgcGF0aCBlbGVtZW50cyAoZWl0aGVyIHJlbGF0aXZlIG9yCi0gICAgIyBhYnNvbHV0ZSksIHRoZW4gYXNzdW1lIGl0IGlzIGNvbnN0cnVjdGVkIHByb3Blcmx5LgotICAgIHJldHVybiBjb21tYW5kCi0gIGVsc2U6Ci0gICAgIyBTZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBsaXN0IGFuZCBmaW5kIGFuIGV4aXN0aW5nIGZpbGUgdGhhdAotICAgICMgd2UgY2FuIGFjY2Vzcy4KLSAgICBwYXRocyA9IG9zLmVudmlyb24uZ2V0KCdQQVRIJywnJykuc3BsaXQob3MucGF0aHNlcCkKLSAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAgIGl0ZW0gPSBvcy5wYXRoLmpvaW4ocGF0aCwgY29tbWFuZCkKLSAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGl0ZW0pIGFuZCBvcy5hY2Nlc3MoaXRlbSwgb3MuWF9PSyk6Ci0gICAgICAgIHJldHVybiBpdGVtCi0gIHJldHVybiBjb21tYW5kCi0KLWRlZiBfUXVvdGVXaW4zMkNvbW1hbmRMaW5lQXJncyhhcmdzKToKLSAgbmV3X2FyZ3MgPSBbXQotICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgIyBSZXBsYWNlIGFsbCBkb3VibGUtcXVvdGVzIHdpdGggZG91YmxlLWRvdWJsZS1xdW90ZXMgdG8gZXNjYXBlCi0gICAgIyB0aGVtIGZvciBjbWQgc2hlbGwsIGFuZCB0aGVuIHF1b3RlIHRoZSB3aG9sZSB0aGluZyBpZiB0aGVyZQotICAgICMgYXJlIGFueS4KLSAgICBpZiBhcmcuZmluZCgnIicpICE9IC0xOgotICAgICAgYXJnID0gJyIiJy5qb2luKGFyZy5zcGxpdCgnIicpKQotICAgICAgYXJnID0gJyIlcyInICUgYXJnCi0KLSAgICAjIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBzcGFjZXMsIHF1b3RlIHRoZSB3aG9sZSBhcmcuCi0gICAgZWxpZiByZS5zZWFyY2gocidbIFx0XG5dJywgYXJnKToKLSAgICAgIGFyZyA9ICciJXMiJyAlIGFyZwotICAgIG5ld19hcmdzLmFwcGVuZChhcmcpCi0gIHJldHVybiBuZXdfYXJncwotCi1jbGFzcyBXcml0ZXIob2JqZWN0KToKLSAgIiIiVmlzdWFsIFN0dWRpbyBYTUwgdXNlciB1c2VyIGZpbGUgd3JpdGVyLiIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VyX2ZpbGVfcGF0aCwgdmVyc2lvbiwgbmFtZSk6Ci0gICAgIiIiSW5pdGlhbGl6ZXMgdGhlIHVzZXIgZmlsZS4KLQotICAgIEFyZ3M6Ci0gICAgICB1c2VyX2ZpbGVfcGF0aDogUGF0aCB0byB0aGUgdXNlciBmaWxlLgotICAgICAgdmVyc2lvbjogVmVyc2lvbiBpbmZvLgotICAgICAgbmFtZTogTmFtZSBvZiB0aGUgdXNlciBmaWxlLgotICAgICIiIgotICAgIHNlbGYudXNlcl9maWxlX3BhdGggPSB1c2VyX2ZpbGVfcGF0aAotICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KLSAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgc2VsZi5jb25maWd1cmF0aW9ucyA9IHt9Ci0KLSAgZGVmIEFkZENvbmZpZyhzZWxmLCBuYW1lKToKLSAgICAiIiJBZGRzIGEgY29uZmlndXJhdGlvbiB0byB0aGUgcHJvamVjdC4KLQotICAgIEFyZ3M6Ci0gICAgICBuYW1lOiBDb25maWd1cmF0aW9uIG5hbWUuCi0gICAgIiIiCi0gICAgc2VsZi5jb25maWd1cmF0aW9uc1tuYW1lXSA9IFsnQ29uZmlndXJhdGlvbicsIHsnTmFtZSc6IG5hbWV9XQotCi0gIGRlZiBBZGREZWJ1Z1NldHRpbmdzKHNlbGYsIGNvbmZpZ19uYW1lLCBjb21tYW5kLCBlbnZpcm9ubWVudCA9IHt9LAotICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nX2RpcmVjdG9yeT0iIik6Ci0gICAgIiIiQWRkcyBhIERlYnVnU2V0dGluZ3Mgbm9kZSB0byB0aGUgdXNlciBmaWxlIGZvciBhIHBhcnRpY3VsYXIgY29uZmlnLgotCi0gICAgQXJnczoKLSAgICAgIGNvbW1hbmQ6IGNvbW1hbmQgbGluZSB0byBydW4uICBGaXJzdCBlbGVtZW50IGluIHRoZSBsaXN0IGlzIHRoZQotICAgICAgICBleGVjdXRhYmxlLiAgQWxsIGVsZW1lbnRzIG9mIHRoZSBjb21tYW5kIHdpbGwgYmUgcXVvdGVkIGlmCi0gICAgICAgIG5lY2Vzc2FyeS4KLSAgICAgIHdvcmtpbmdfZGlyZWN0b3J5OiBvdGhlciBmaWxlcyB3aGljaCBtYXkgdHJpZ2dlciB0aGUgcnVsZS4gKG9wdGlvbmFsKQotICAgICIiIgotICAgIGNvbW1hbmQgPSBfUXVvdGVXaW4zMkNvbW1hbmRMaW5lQXJncyhjb21tYW5kKQotCi0gICAgYWJzX2NvbW1hbmQgPSBfRmluZENvbW1hbmRJblBhdGgoY29tbWFuZFswXSkKLQotICAgIGlmIGVudmlyb25tZW50IGFuZCBpc2luc3RhbmNlKGVudmlyb25tZW50LCBkaWN0KToKLSAgICAgIGVudl9saXN0ID0gWyclcz0iJXMiJyAlIChrZXksIHZhbCkKLSAgICAgICAgICAgICAgICAgIGZvciAoa2V5LHZhbCkgaW4gZW52aXJvbm1lbnQuaXRlcml0ZW1zKCldCi0gICAgICBlbnZpcm9ubWVudCA9ICcgJy5qb2luKGVudl9saXN0KQotICAgIGVsc2U6Ci0gICAgICBlbnZpcm9ubWVudCA9ICcnCi0KLSAgICBuX2NtZCA9IFsnRGVidWdTZXR0aW5ncycsCi0gICAgICAgICAgICAgeydDb21tYW5kJzogYWJzX2NvbW1hbmQsCi0gICAgICAgICAgICAgICdXb3JraW5nRGlyZWN0b3J5Jzogd29ya2luZ19kaXJlY3RvcnksCi0gICAgICAgICAgICAgICdDb21tYW5kQXJndW1lbnRzJzogIiAiLmpvaW4oY29tbWFuZFsxOl0pLAotICAgICAgICAgICAgICAnUmVtb3RlTWFjaGluZSc6IHNvY2tldC5nZXRob3N0bmFtZSgpLAotICAgICAgICAgICAgICAnRW52aXJvbm1lbnQnOiBlbnZpcm9ubWVudCwKLSAgICAgICAgICAgICAgJ0Vudmlyb25tZW50TWVyZ2UnOiAndHJ1ZScsCi0gICAgICAgICAgICAgICMgQ3VycmVudGx5IHRoZXNlIGFyZSBhbGwgImR1bW15IiB2YWx1ZXMgdGhhdCB3ZSdyZSBqdXN0IHNldHRpbmcKLSAgICAgICAgICAgICAgIyBpbiB0aGUgZGVmYXVsdCBtYW5uZXIgdGhhdCBNU1ZTIGRvZXMgaXQuICBXZSBjb3VsZCB1c2Ugc29tZSBvZgotICAgICAgICAgICAgICAjIHRoZXNlIHRvIGFkZCBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcywgSSBzdXBwb3NlLCBidXQgdGhleSBtaWdodAotICAgICAgICAgICAgICAjIG5vdCBoYXZlIHBhcml0eSB3aXRoIG90aGVyIHBsYXRmb3JtcyB0aGVuLgotICAgICAgICAgICAgICAnQXR0YWNoJzogJ2ZhbHNlJywKLSAgICAgICAgICAgICAgJ0RlYnVnZ2VyVHlwZSc6ICczJywgICMgJ2F1dG8nIGRlYnVnZ2VyCi0gICAgICAgICAgICAgICdSZW1vdGUnOiAnMScsCi0gICAgICAgICAgICAgICdSZW1vdGVDb21tYW5kJzogJycsCi0gICAgICAgICAgICAgICdIdHRwVXJsJzogJycsCi0gICAgICAgICAgICAgICdQREJQYXRoJzogJycsCi0gICAgICAgICAgICAgICdTUUxEZWJ1Z2dpbmcnOiAnJywKLSAgICAgICAgICAgICAgJ0RlYnVnZ2VyRmxhdm9yJzogJzAnLAotICAgICAgICAgICAgICAnTVBJUnVuQ29tbWFuZCc6ICcnLAotICAgICAgICAgICAgICAnTVBJUnVuQXJndW1lbnRzJzogJycsCi0gICAgICAgICAgICAgICdNUElSdW5Xb3JraW5nRGlyZWN0b3J5JzogJycsCi0gICAgICAgICAgICAgICdBcHBsaWNhdGlvbkNvbW1hbmQnOiAnJywKLSAgICAgICAgICAgICAgJ0FwcGxpY2F0aW9uQXJndW1lbnRzJzogJycsCi0gICAgICAgICAgICAgICdTaGltQ29tbWFuZCc6ICcnLAotICAgICAgICAgICAgICAnTVBJQWNjZXB0TW9kZSc6ICcnLAotICAgICAgICAgICAgICAnTVBJQWNjZXB0RmlsdGVyJzogJycKLSAgICAgICAgICAgICB9XQotCi0gICAgIyBGaW5kIHRoZSBjb25maWcsIGFuZCBhZGQgaXQgaWYgaXQgZG9lc24ndCBleGlzdC4KLSAgICBpZiBjb25maWdfbmFtZSBub3QgaW4gc2VsZi5jb25maWd1cmF0aW9uczoKLSAgICAgIHNlbGYuQWRkQ29uZmlnKGNvbmZpZ19uYW1lKQotCi0gICAgIyBBZGQgdGhlIERlYnVnU2V0dGluZ3Mgb250byB0aGUgYXBwcm9wcmlhdGUgY29uZmlnLgotICAgIHNlbGYuY29uZmlndXJhdGlvbnNbY29uZmlnX25hbWVdLmFwcGVuZChuX2NtZCkKLQotICBkZWYgV3JpdGVJZkNoYW5nZWQoc2VsZik6Ci0gICAgIiIiV3JpdGVzIHRoZSB1c2VyIGZpbGUuIiIiCi0gICAgY29uZmlncyA9IFsnQ29uZmlndXJhdGlvbnMnXQotICAgIGZvciBjb25maWcsIHNwZWMgaW4gc29ydGVkKHNlbGYuY29uZmlndXJhdGlvbnMuaXRlcml0ZW1zKCkpOgotICAgICAgY29uZmlncy5hcHBlbmQoc3BlYykKLQotICAgIGNvbnRlbnQgPSBbJ1Zpc3VhbFN0dWRpb1VzZXJGaWxlJywKLSAgICAgICAgICAgICAgIHsnVmVyc2lvbic6IHNlbGYudmVyc2lvbi5Qcm9qZWN0VmVyc2lvbigpLAotICAgICAgICAgICAgICAgICdOYW1lJzogc2VsZi5uYW1lCi0gICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgY29uZmlnc10KLSAgICBlYXN5X3htbC5Xcml0ZVhtbElmQ2hhbmdlZChjb250ZW50LCBzZWxmLnVzZXJfZmlsZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVXRpbC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvTVNWU1V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZDdhYjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVXRpbGl0eSBmdW5jdGlvbnMgc2hhcmVkIGFtb25nc3QgdGhlIFdpbmRvd3MgZ2VuZXJhdG9ycy4iIiIKLQotaW1wb3J0IGNvcHkKLQotZGVmIF9TaGFyZE5hbWUobmFtZSwgbnVtYmVyKToKLSAgIiIiQWRkIGEgc2hhcmQgbnVtYmVyIHRvIHRoZSBlbmQgb2YgYSB0YXJnZXQuCi0KLSAgQXJndW1lbnRzOgotICAgIG5hbWU6IG5hbWUgb2YgdGhlIHRhcmdldCAoZm9vI3RhcmdldCkKLSAgICBudW1iZXI6IHNoYXJkIG51bWJlcgotICBSZXR1cm5zOgotICAgIFRhcmdldCBuYW1lIHdpdGggc2hhcmQgYWRkZWQgKGZvb18xI3RhcmdldCkKLSAgIiIiCi0gIHBhcnRzID0gbmFtZS5yc3BsaXQoJyMnLCAxKQotICBwYXJ0c1swXSA9ICclc18lZCcgJSAocGFydHNbMF0sIG51bWJlcikKLSAgcmV0dXJuICcjJy5qb2luKHBhcnRzKQotCi0KLWRlZiBTaGFyZFRhcmdldHModGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cyk6Ci0gICIiIlNoYXJkIHNvbWUgdGFyZ2V0cyBhcGFydCB0byB3b3JrIGFyb3VuZCB0aGUgbGlua2VycyBsaW1pdHMuCi0KLSAgQXJndW1lbnRzOgotICAgIHRhcmdldF9saXN0OiBMaXN0IG9mIHRhcmdldCBwYWlyczogJ2Jhc2UvYmFzZS5neXA6YmFzZScuCi0gICAgdGFyZ2V0X2RpY3RzOiBEaWN0IG9mIHRhcmdldCBwcm9wZXJ0aWVzIGtleWVkIG9uIHRhcmdldCBwYWlyLgotICBSZXR1cm5zOgotICAgIFR1cGxlIG9mIHRoZSBuZXcgc2hhcmRlZCB2ZXJzaW9ucyBvZiB0aGUgaW5wdXRzLgotICAiIiIKLSAgIyBHYXRoZXIgdGhlIHRhcmdldHMgdG8gc2hhcmQsIGFuZCBob3cgbWFueSBwaWVjZXMuCi0gIHRhcmdldHNfdG9fc2hhcmQgPSB7fQotICBmb3IgdCBpbiB0YXJnZXRfZGljdHM6Ci0gICAgc2hhcmRzID0gaW50KHRhcmdldF9kaWN0c1t0XS5nZXQoJ21zdnNfc2hhcmQnLCAwKSkKLSAgICBpZiBzaGFyZHM6Ci0gICAgICB0YXJnZXRzX3RvX3NoYXJkW3RdID0gc2hhcmRzCi0gICMgU2hhcmQgdGFyZ2V0X2xpc3QuCi0gIG5ld190YXJnZXRfbGlzdCA9IFtdCi0gIGZvciB0IGluIHRhcmdldF9saXN0OgotICAgIGlmIHQgaW4gdGFyZ2V0c190b19zaGFyZDoKLSAgICAgIGZvciBpIGluIHJhbmdlKHRhcmdldHNfdG9fc2hhcmRbdF0pOgotICAgICAgICBuZXdfdGFyZ2V0X2xpc3QuYXBwZW5kKF9TaGFyZE5hbWUodCwgaSkpCi0gICAgZWxzZToKLSAgICAgIG5ld190YXJnZXRfbGlzdC5hcHBlbmQodCkKLSAgIyBTaGFyZCB0YXJnZXRfZGljdC4KLSAgbmV3X3RhcmdldF9kaWN0cyA9IHt9Ci0gIGZvciB0IGluIHRhcmdldF9kaWN0czoKLSAgICBpZiB0IGluIHRhcmdldHNfdG9fc2hhcmQ6Ci0gICAgICBmb3IgaSBpbiByYW5nZSh0YXJnZXRzX3RvX3NoYXJkW3RdKToKLSAgICAgICAgbmFtZSA9IF9TaGFyZE5hbWUodCwgaSkKLSAgICAgICAgbmV3X3RhcmdldF9kaWN0c1tuYW1lXSA9IGNvcHkuY29weSh0YXJnZXRfZGljdHNbdF0pCi0gICAgICAgIG5ld190YXJnZXRfZGljdHNbbmFtZV1bJ3RhcmdldF9uYW1lJ10gPSBfU2hhcmROYW1lKAotICAgICAgICAgICAgIG5ld190YXJnZXRfZGljdHNbbmFtZV1bJ3RhcmdldF9uYW1lJ10sIGkpCi0gICAgICAgIHNvdXJjZXMgPSBuZXdfdGFyZ2V0X2RpY3RzW25hbWVdLmdldCgnc291cmNlcycsIFtdKQotICAgICAgICBuZXdfc291cmNlcyA9IFtdCi0gICAgICAgIGZvciBwb3MgaW4gcmFuZ2UoaSwgbGVuKHNvdXJjZXMpLCB0YXJnZXRzX3RvX3NoYXJkW3RdKToKLSAgICAgICAgICBuZXdfc291cmNlcy5hcHBlbmQoc291cmNlc1twb3NdKQotICAgICAgICBuZXdfdGFyZ2V0X2RpY3RzW25hbWVdWydzb3VyY2VzJ10gPSBuZXdfc291cmNlcwotICAgIGVsc2U6Ci0gICAgICBuZXdfdGFyZ2V0X2RpY3RzW3RdID0gdGFyZ2V0X2RpY3RzW3RdCi0gICMgU2hhcmQgZGVwZW5kZW5jaWVzLgotICBmb3IgdCBpbiBuZXdfdGFyZ2V0X2RpY3RzOgotICAgIGRlcGVuZGVuY2llcyA9IGNvcHkuY29weShuZXdfdGFyZ2V0X2RpY3RzW3RdLmdldCgnZGVwZW5kZW5jaWVzJywgW10pKQotICAgIG5ld19kZXBlbmRlbmNpZXMgPSBbXQotICAgIGZvciBkIGluIGRlcGVuZGVuY2llczoKLSAgICAgIGlmIGQgaW4gdGFyZ2V0c190b19zaGFyZDoKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UodGFyZ2V0c190b19zaGFyZFtkXSk6Ci0gICAgICAgICAgbmV3X2RlcGVuZGVuY2llcy5hcHBlbmQoX1NoYXJkTmFtZShkLCBpKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG5ld19kZXBlbmRlbmNpZXMuYXBwZW5kKGQpCi0gICAgbmV3X3RhcmdldF9kaWN0c1t0XVsnZGVwZW5kZW5jaWVzJ10gPSBuZXdfZGVwZW5kZW5jaWVzCi0KLSAgcmV0dXJuIChuZXdfdGFyZ2V0X2xpc3QsIG5ld190YXJnZXRfZGljdHMpCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL01TVlNWZXJzaW9uLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9NU1ZTVmVyc2lvbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ3ODUxMC4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL01TVlNWZXJzaW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDEwICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiSGFuZGxlIHZlcnNpb24gaW5mb3JtYXRpb24gcmVsYXRlZCB0byBWaXN1YWwgU3R1aW8uIiIiCi0KLWltcG9ydCBlcnJubwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgZ3lwCi0KLQotY2xhc3MgVmlzdWFsU3R1ZGlvVmVyc2lvbihvYmplY3QpOgotICAiIiJJbmZvcm1hdGlvbiByZWdhcmRpbmcgYSB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8uIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHNob3J0X25hbWUsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbiwgcHJvamVjdF92ZXJzaW9uLCBmbGF0X3NsbiwgdXNlc192Y3hwcm9qLAotICAgICAgICAgICAgICAgcGF0aCwgc2RrX2Jhc2VkLCBkZWZhdWx0X3Rvb2xzZXQ9Tm9uZSk6Ci0gICAgc2VsZi5zaG9ydF9uYW1lID0gc2hvcnRfbmFtZQotICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotICAgIHNlbGYuc29sdXRpb25fdmVyc2lvbiA9IHNvbHV0aW9uX3ZlcnNpb24KLSAgICBzZWxmLnByb2plY3RfdmVyc2lvbiA9IHByb2plY3RfdmVyc2lvbgotICAgIHNlbGYuZmxhdF9zbG4gPSBmbGF0X3NsbgotICAgIHNlbGYudXNlc192Y3hwcm9qID0gdXNlc192Y3hwcm9qCi0gICAgc2VsZi5wYXRoID0gcGF0aAotICAgIHNlbGYuc2RrX2Jhc2VkID0gc2RrX2Jhc2VkCi0gICAgc2VsZi5kZWZhdWx0X3Rvb2xzZXQgPSBkZWZhdWx0X3Rvb2xzZXQKLQotICBkZWYgU2hvcnROYW1lKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnNob3J0X25hbWUKLQotICBkZWYgRGVzY3JpcHRpb24oc2VsZik6Ci0gICAgIiIiR2V0IHRoZSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZXJzaW9uLiIiIgotICAgIHJldHVybiBzZWxmLmRlc2NyaXB0aW9uCi0KLSAgZGVmIFNvbHV0aW9uVmVyc2lvbihzZWxmKToKLSAgICAiIiJHZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzbG4gZmlsZXMuIiIiCi0gICAgcmV0dXJuIHNlbGYuc29sdXRpb25fdmVyc2lvbgotCi0gIGRlZiBQcm9qZWN0VmVyc2lvbihzZWxmKToKLSAgICAiIiJHZXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB2Y3Byb2ogb3IgdmN4cHJvaiBmaWxlcy4iIiIKLSAgICByZXR1cm4gc2VsZi5wcm9qZWN0X3ZlcnNpb24KLQotICBkZWYgRmxhdFNvbHV0aW9uKHNlbGYpOgotICAgIHJldHVybiBzZWxmLmZsYXRfc2xuCi0KLSAgZGVmIFVzZXNWY3hwcm9qKHNlbGYpOgotICAgICIiIlJldHVybnMgdHJ1ZSBpZiB0aGlzIHZlcnNpb24gdXNlcyBhIHZjeHByb2ogZmlsZS4iIiIKLSAgICByZXR1cm4gc2VsZi51c2VzX3ZjeHByb2oKLQotICBkZWYgUHJvamVjdEV4dGVuc2lvbihzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgdGhlIHByb2plY3QuIiIiCi0gICAgcmV0dXJuIHNlbGYudXNlc192Y3hwcm9qIGFuZCAnLnZjeHByb2onIG9yICcudmNwcm9qJwotCi0gIGRlZiBQYXRoKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHBhdGggdG8gVmlzdWFsIFN0dWRpbyBpbnN0YWxsYXRpb24uIiIiCi0gICAgcmV0dXJuIHNlbGYucGF0aAotCi0gIGRlZiBUb29sUGF0aChzZWxmLCB0b29sKToKLSAgICAiIiJSZXR1cm5zIHRoZSBwYXRoIHRvIGEgZ2l2ZW4gY29tcGlsZXIgdG9vbC4gIiIiCi0gICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYucGF0aCwgIlZDL2JpbiIsIHRvb2wpKQotCi0gIGRlZiBEZWZhdWx0VG9vbHNldChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBtc2J1aWxkIHRvb2xzZXQgdmVyc2lvbiB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgYWJzZW5jZQotICAgIG9mIGEgdXNlciBvdmVycmlkZS4iIiIKLSAgICByZXR1cm4gc2VsZi5kZWZhdWx0X3Rvb2xzZXQKLQotICBkZWYgU2V0dXBTY3JpcHQoc2VsZiwgdGFyZ2V0X2FyY2gpOgotICAgICIiIlJldHVybnMgYSBjb21tYW5kICh3aXRoIGFyZ3VtZW50cykgdG8gYmUgdXNlZCB0byBzZXQgdXAgdGhlCi0gICAgZW52aXJvbm1lbnQuIiIiCi0gICAgIyBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyBpbiB0aGUgU0RLIGNvbW1hbmQgbGluZSBlbnZpcm9ubWVudCBhbmQgdXNlCi0gICAgIyB0aGUgc2V0dXAgc2NyaXB0IGZyb20gdGhlIFNESyBpZiBzby4gfHRhcmdldF9hcmNofCBzaG91bGQgYmUgZWl0aGVyCi0gICAgIyAneDg2JyBvciAneDY0Jy4KLSAgICBhc3NlcnQgdGFyZ2V0X2FyY2ggaW4gKCd4ODYnLCAneDY0JykKLSAgICBzZGtfZGlyID0gb3MuZW52aXJvbi5nZXQoJ1dpbmRvd3NTREtEaXInKQotICAgIGlmIHNlbGYuc2RrX2Jhc2VkIGFuZCBzZGtfZGlyOgotICAgICAgcmV0dXJuIFtvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihzZGtfZGlyLCAnQmluL1NldEVudi5DbWQnKSksCi0gICAgICAgICAgICAgICcvJyArIHRhcmdldF9hcmNoXQotICAgIGVsc2U6Ci0gICAgICAjIEZvciBWUzIwMTI6IFdlIGRvbid0IHVzZSBWQy92Y3ZhcnNhbGwuYmF0IGZvciB4ODYgYmVjYXVzZSB2Y3ZhcnNhbGwgY2FsbHMKLSAgICAgICMgdmN2YXJzMzIsIHdoaWNoIGl0IGNhbiBvbmx5IGZpbmQgaWYgVlM/P0NPTU5UT09MUyBpcyBzZXQsIHdoaWNoIGl0Ci0gICAgICAjIGlzbid0IGFsd2F5cy4KLSAgICAgICMgU3RhcnRpbmcgZnJvbSBWUzIwMTcgdGhlIHRvb2xzIGxheW91dCB3YXMgY2hhbmdlZCBhbmQgd2UgbmVlZAotICAgICAgIyB0byBhY2NvdW50IGZvciB0aGF0LgotICAgICAgaWYgdGFyZ2V0X2FyY2ggPT0gJ3g4Nic6Ci0gICAgICAgIGJhdENhbmRpZGF0ZSA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ0NvbW1vbjcvVG9vbHMvdnN2YXJzMzIuYmF0JykpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYXRDYW5kaWRhdGUpOgotICAgICAgICAgIGJhdENhbmRpZGF0ZSA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ1ZDL0F1eGlsaWFyeS9CdWlsZC92Y3ZhcnMzMi5iYXQnKSkKLSAgICAgICAgcmV0dXJuIFtiYXRDYW5kaWRhdGVdCi0gICAgICBlbHNlOgotICAgICAgICBhc3NlcnQgdGFyZ2V0X2FyY2ggPT0gJ3g2NCcKLSAgICAgICAgYXJnID0gJ3g4Nl9hbWQ2NCcKLSAgICAgICAgaWYgKG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfQVJDSElURUNUVVJFJykgPT0gJ0FNRDY0JyBvcgotICAgICAgICAgICAgb3MuZW52aXJvbi5nZXQoJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInKSA9PSAnQU1ENjQnKToKLSAgICAgICAgICAjIFVzZSB0aGUgNjQtb24tNjQgY29tcGlsZXIgaWYgd2UgY2FuLgotICAgICAgICAgIGFyZyA9ICdhbWQ2NCcKLSAgICAgICAgYmF0Q2FuZGlkYXRlID0gb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnBhdGgsICdWQy92Y3ZhcnNhbGwuYmF0JykpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhiYXRDYW5kaWRhdGUpOgotICAgICAgICAgIGJhdENhbmRpZGF0ZSA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAnVkMvQXV4aWxpYXJ5L0J1aWxkL3ZjdmFyc2FsbC5iYXQnKSkKLSAgICAgICAgcmV0dXJuIFtiYXRDYW5kaWRhdGUsIGFyZ10KLQotCi1kZWYgX1JlZ2lzdHJ5UXVlcnlCYXNlKHN5c2Rpciwga2V5LCB2YWx1ZSk6Ci0gICIiIlVzZSByZWcuZXhlIHRvIHJlYWQgYSBwYXJ0aWN1bGFyIGtleS4KLQotICBXaGlsZSBpZGVhbGx5IHdlIG1pZ2h0IHVzZSB0aGUgd2luMzIgbW9kdWxlLCB3ZSB3b3VsZCBsaWtlIGd5cCB0byBiZQotICBweXRob24gbmV1dHJhbCwgc28gZm9yIGluc3RhbmNlIGN5Z3dpbiBweXRob24gbGFja3MgdGhpcyBtb2R1bGUuCi0KLSAgQXJndW1lbnRzOgotICAgIHN5c2RpcjogVGhlIHN5c3RlbSBzdWJkaXJlY3RvcnkgdG8gYXR0ZW1wdCB0byBsYXVuY2ggcmVnLmV4ZSBmcm9tLgotICAgIGtleTogVGhlIHJlZ2lzdHJ5IGtleSB0byByZWFkIGZyb20uCi0gICAgdmFsdWU6IFRoZSBwYXJ0aWN1bGFyIHZhbHVlIHRvIHJlYWQuCi0gIFJldHVybjoKLSAgICBzdGRvdXQgZnJvbSByZWcuZXhlLCBvciBOb25lIGZvciBmYWlsdXJlLgotICAiIiIKLSAgIyBTa2lwIGlmIG5vdCBvbiBXaW5kb3dzIG9yIFB5dGhvbiBXaW4zMiBzZXR1cCBpc3N1ZQotICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJyk6Ci0gICAgcmV0dXJuIE5vbmUKLSAgIyBTZXR1cCBwYXJhbXMgdG8gcGFzcyB0byBhbmQgYXR0ZW1wdCB0byBsYXVuY2ggcmVnLmV4ZQotICBjbWQgPSBbb3MucGF0aC5qb2luKG9zLmVudmlyb24uZ2V0KCdXSU5ESVInLCAnJyksIHN5c2RpciwgJ3JlZy5leGUnKSwKLSAgICAgICAgICdxdWVyeScsIGtleV0KLSAgaWYgdmFsdWU6Ci0gICAgY21kLmV4dGVuZChbJy92JywgdmFsdWVdKQotICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICMgT2J0YWluIHRoZSBzdGRvdXQgZnJvbSByZWcuZXhlLCByZWFkaW5nIHRvIHRoZSBlbmQgc28gcC5yZXR1cm5jb2RlIGlzIHZhbGlkCi0gICMgTm90ZSB0aGF0IHRoZSBlcnJvciB0ZXh0IG1heSBiZSBpbiBbMV0gaW4gc29tZSBjYXNlcwotICB0ZXh0ID0gcC5jb21tdW5pY2F0ZSgpWzBdCi0gICMgQ2hlY2sgcmV0dXJuIGNvZGUgZnJvbSByZWcuZXhlOyBvZmZpY2lhbGx5IDA9PXN1Y2Nlc3MgYW5kIDE9PWVycm9yCi0gIGlmIHAucmV0dXJuY29kZToKLSAgICByZXR1cm4gTm9uZQotICByZXR1cm4gdGV4dAotCi0KLWRlZiBfUmVnaXN0cnlRdWVyeShrZXksIHZhbHVlPU5vbmUpOgotICAiIiJVc2UgcmVnLmV4ZSB0byByZWFkIGEgcGFydGljdWxhciBrZXkgdGhyb3VnaCBfUmVnaXN0cnlRdWVyeUJhc2UuCi0KLSAgRmlyc3QgdHJpZXMgdG8gbGF1bmNoIGZyb20gJVdpbkRpciVcU3lzbmF0aXZlIHRvIGF2b2lkIFdvVzY0IHJlZGlyZWN0aW9uLiBJZgotICB0aGF0IGZhaWxzLCBpdCBmYWxscyBiYWNrIHRvIFN5c3RlbTMyLiAgU3lzbmF0aXZlIGlzIGF2YWlsYWJsZSBvbiBWaXN0YSBhbmQKLSAgdXAgYW5kIGF2YWlsYWJsZSBvbiBXaW5kb3dzIFNlcnZlciAyMDAzIGFuZCBYUCB0aHJvdWdoIEtCIHBhdGNoIDk0MjU4OS4gTm90ZQotICB0aGF0IFN5c25hdGl2ZSB3aWxsIGFsd2F5cyBmYWlsIGlmIHVzaW5nIDY0LWJpdCBweXRob24gZHVlIHRvIGl0IGJlaW5nIGEKLSAgdmlydHVhbCBkaXJlY3RvcnkgYW5kIFN5c3RlbTMyIHdpbGwgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZpcnN0IHBsYWNlLgotCi0gIEtCIDk0MjU4OSAtIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvOTQyNTg5L2VuLXVzLgotCi0gIEFyZ3VtZW50czoKLSAgICBrZXk6IFRoZSByZWdpc3RyeSBrZXkuCi0gICAgdmFsdWU6IFRoZSBwYXJ0aWN1bGFyIHJlZ2lzdHJ5IHZhbHVlIHRvIHJlYWQgKG9wdGlvbmFsKS4KLSAgUmV0dXJuOgotICAgIHN0ZG91dCBmcm9tIHJlZy5leGUsIG9yIE5vbmUgZm9yIGZhaWx1cmUuCi0gICIiIgotICB0ZXh0ID0gTm9uZQotICB0cnk6Ci0gICAgdGV4dCA9IF9SZWdpc3RyeVF1ZXJ5QmFzZSgnU3lzbmF0aXZlJywga2V5LCB2YWx1ZSkKLSAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6Ci0gICAgICB0ZXh0ID0gX1JlZ2lzdHJ5UXVlcnlCYXNlKCdTeXN0ZW0zMicsIGtleSwgdmFsdWUpCi0gICAgZWxzZToKLSAgICAgIHJhaXNlCi0gIHJldHVybiB0ZXh0Ci0KLQotZGVmIF9SZWdpc3RyeUdldFZhbHVlKGtleSwgdmFsdWUpOgotICAiIiJVc2UgcmVnLmV4ZSB0byBvYnRhaW4gdGhlIHZhbHVlIG9mIGEgcmVnaXN0cnkga2V5LgotCi0gIEFyZ3M6Ci0gICAga2V5OiBUaGUgcmVnaXN0cnkga2V5LgotICAgIHZhbHVlOiBUaGUgcGFydGljdWxhciByZWdpc3RyeSB2YWx1ZSB0byByZWFkLgotICBSZXR1cm46Ci0gICAgY29udGVudHMgb2YgdGhlIHJlZ2lzdHJ5IGtleSdzIHZhbHVlLCBvciBOb25lIG9uIGZhaWx1cmUuCi0gICIiIgotICB0ZXh0ID0gX1JlZ2lzdHJ5UXVlcnkoa2V5LCB2YWx1ZSkKLSAgaWYgbm90IHRleHQ6Ci0gICAgcmV0dXJuIE5vbmUKLSAgIyBFeHRyYWN0IHZhbHVlLgotICBtYXRjaCA9IHJlLnNlYXJjaChyJ1JFR19cdytccysoW15ccl0rKVxyXG4nLCB0ZXh0KQotICBpZiBub3QgbWF0Y2g6Ci0gICAgcmV0dXJuIE5vbmUKLSAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpCi0KLQotZGVmIF9SZWdpc3RyeUtleUV4aXN0cyhrZXkpOgotICAiIiJVc2UgcmVnLmV4ZSB0byBzZWUgaWYgYSBrZXkgZXhpc3RzLgotCi0gIEFyZ3M6Ci0gICAga2V5OiBUaGUgcmVnaXN0cnkga2V5IHRvIGNoZWNrLgotICBSZXR1cm46Ci0gICAgVHJ1ZSBpZiB0aGUga2V5IGV4aXN0cwotICAiIiIKLSAgaWYgbm90IF9SZWdpc3RyeVF1ZXJ5KGtleSk6Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiBUcnVlCi0KLQotZGVmIF9DcmVhdGVWZXJzaW9uKG5hbWUsIHBhdGgsIHNka19iYXNlZD1GYWxzZSk6Ci0gICIiIlNldHMgdXAgTVNWUyBwcm9qZWN0IGdlbmVyYXRpb24uCi0KLSAgU2V0dXAgaXMgYmFzZWQgb2ZmIHRoZSBHWVBfTVNWU19WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHdoYXRldmVyIGlzCi0gIGF1dG9kZXRlY3RlZCBpZiBHWVBfTVNWU19WRVJTSU9OIGlzIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZC4gSWYgYSB2ZXJzaW9uIGlzCi0gIHBhc3NlZCBpbiB0aGF0IGRvZXNuJ3QgbWF0Y2ggYSB2YWx1ZSBpbiB2ZXJzaW9ucyBweXRob24gd2lsbCB0aHJvdyBhIGVycm9yLgotICAiIiIKLSAgaWYgcGF0aDoKLSAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQotICB2ZXJzaW9ucyA9IHsKLSAgICAgICcyMDE3JzogVmlzdWFsU3R1ZGlvVmVyc2lvbignMjAxNycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Zpc3VhbCBTdHVkaW8gMjAxNycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbj0nMTIuMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF92ZXJzaW9uPScxNC4wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0X3Nsbj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzX3ZjeHByb2o9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX2Jhc2VkPXNka19iYXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3Rvb2xzZXQ9J3YxNDEnKSwKLSAgICAgICcyMDEyJzogVmlzdWFsU3R1ZGlvVmVyc2lvbignMjAxMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Zpc3VhbCBTdHVkaW8gMjAxMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbj0nMTIuMDAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbj0nNC4wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0X3Nsbj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzX3ZjeHByb2o9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX2Jhc2VkPXNka19iYXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3Rvb2xzZXQ9J3YxMTAnKSwKLSAgICAgICcyMDEyZSc6IFZpc3VhbFN0dWRpb1ZlcnNpb24oJzIwMTJlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Zpc3VhbCBTdHVkaW8gMjAxMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uX3ZlcnNpb249JzEyLjAwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF92ZXJzaW9uPSc0LjAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0X3Nsbj1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzX3ZjeHByb2o9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfYmFzZWQ9c2RrX2Jhc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3Rvb2xzZXQ9J3YxMTAnKSwKLSAgICAgICcyMDEwJzogVmlzdWFsU3R1ZGlvVmVyc2lvbignMjAxMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Zpc3VhbCBTdHVkaW8gMjAxMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbj0nMTEuMDAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbj0nNC4wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0X3Nsbj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzX3ZjeHByb2o9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX2Jhc2VkPXNka19iYXNlZCksCi0gICAgICAnMjAxMGUnOiBWaXN1YWxTdHVkaW9WZXJzaW9uKCcyMDEwZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWaXN1YWwgU3R1ZGlvIDIwMTAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2x1dGlvbl92ZXJzaW9uPScxMS4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbj0nNC4wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdF9zbG49VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlc192Y3hwcm9qPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX2Jhc2VkPXNka19iYXNlZCksCi0gICAgICAnMjAwOCc6IFZpc3VhbFN0dWRpb1ZlcnNpb24oJzIwMDgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWaXN1YWwgU3R1ZGlvIDIwMDgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbHV0aW9uX3ZlcnNpb249JzEwLjAwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X3ZlcnNpb249JzkuMDAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRfc2xuPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNfdmN4cHJvaj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrX2Jhc2VkPXNka19iYXNlZCksCi0gICAgICAnMjAwOGUnOiBWaXN1YWxTdHVkaW9WZXJzaW9uKCcyMDA4ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWaXN1YWwgU3R1ZGlvIDIwMDgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2x1dGlvbl92ZXJzaW9uPScxMC4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbj0nOS4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRfc2xuPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNfdmN4cHJvaj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfYmFzZWQ9c2RrX2Jhc2VkKSwKLSAgICAgICcyMDA1JzogVmlzdWFsU3R1ZGlvVmVyc2lvbignMjAwNScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Zpc3VhbCBTdHVkaW8gMjAwNScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbj0nOS4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF92ZXJzaW9uPSc4LjAwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0X3Nsbj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VzX3ZjeHByb2o9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNka19iYXNlZD1zZGtfYmFzZWQpLAotICAgICAgJzIwMDVlJzogVmlzdWFsU3R1ZGlvVmVyc2lvbignMjAwNWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmlzdWFsIFN0dWRpbyAyMDA1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29sdXRpb25fdmVyc2lvbj0nOS4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfdmVyc2lvbj0nOC4wMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRfc2xuPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXNfdmN4cHJvaj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtfYmFzZWQ9c2RrX2Jhc2VkKSwKLSAgfQotICByZXR1cm4gdmVyc2lvbnNbc3RyKG5hbWUpXQotCi0KLWRlZiBfQ29udmVydFRvQ3lncGF0aChwYXRoKToKLSAgIiIiQ29udmVydCB0byBjeWd3aW4gcGF0aCBpZiB3ZSBhcmUgdXNpbmcgY3lnd2luLiIiIgotICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6Ci0gICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydjeWdwYXRoJywgcGF0aF0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgcGF0aCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCi0gIHJldHVybiBwYXRoCi0KLQotZGVmIF9EZXRlY3RWaXN1YWxTdHVkaW9WZXJzaW9ucyh2ZXJzaW9uc190b19jaGVjaywgZm9yY2VfZXhwcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNfaW5zdGFsbF9kaXI9Tm9uZSk6Ci0gICIiIkNvbGxlY3QgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIHZpc3VhbCBzdHVkaW8gdmVyc2lvbnMuCi0KLSAgUmV0dXJuczoKLSAgICBBIGxpc3Qgb2YgdmlzdWFsIHN0dWRpbyB2ZXJzaW9ucyBpbnN0YWxsZWQgaW4gZGVzY2VuZGluZyBvcmRlciBvZgotICAgIHVzYWdlIHByZWZlcmVuY2UuCi0gICAgQmFzZSB0aGlzIG9uIHRoZSByZWdpc3RyeSBhbmQgYSBxdWljayBjaGVjayBpZiBkZXZlbnYuZXhlIGV4aXN0cy4KLSAgICBPbmx5IHZlcnNpb25zIDgtMTAgYXJlIGNvbnNpZGVyZWQuCi0gICAgUG9zc2liaWxpdGllcyBhcmU6Ci0gICAgICAyMDA1KGUpIC0gVmlzdWFsIFN0dWRpbyAyMDA1ICg4KQotICAgICAgMjAwOChlKSAtIFZpc3VhbCBTdHVkaW8gMjAwOCAoOSkKLSAgICAgIDIwMTAoZSkgLSBWaXN1YWwgU3R1ZGlvIDIwMTAgKDEwKQotICAgICAgMjAxMihlKSAtIFZpc3VhbCBTdHVkaW8gMjAxMiAoMTEpCi0gICAgV2hlcmUgKGUpIGlzIGUgZm9yIGV4cHJlc3MgZWRpdGlvbnMgb2YgTVNWUyBhbmQgYmxhbmsgb3RoZXJ3aXNlLgotICAiIiIKLSAgdmVyc2lvbl90b195ZWFyID0gewotICAgICAgJzguMCc6ICcyMDA1JywgJzkuMCc6ICcyMDA4JywgJzEwLjAnOiAnMjAxMCcsICcxMS4wJzogJzIwMTInLAotICAgICAgJzE0LjAnOiAnMjAxNScsICcxNS4wJzogJzIwMTcnfQotICB2ZXJzaW9ucyA9IFtdCi0gIGZvciB2ZXJzaW9uIGluIHZlcnNpb25zX3RvX2NoZWNrOgotICAgIGlmIHZlcnNpb24gPT0gJzE1LjAnOgotICAgICAgIyBWZXJzaW9uIDE1IGRvZXMgbm90IGluY2x1ZGUgcmVnaXN0cnkgZW50cmllcy4KLSAgICAgIGlmIHZzX2luc3RhbGxfZGlyOgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHZzX2luc3RhbGxfZGlyLCByJ0NvbW1vbjdcSURFJykKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBhdGggPSByJ0M6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW9cMjAxN1xQcm9mZXNzaW9uYWxcQ29tbW9uN1xJREUnCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICBwYXRoID0gcidDOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXDIwMTdcQ29tbXVuaXR5XENvbW1vbjdcSURFJwotICAgICAgcGF0aCA9IF9Db252ZXJ0VG9DeWdwYXRoKHBhdGgpCi0gICAgICBkZXZlbnZfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnZGV2ZW52LmV4ZScpCi0gICAgICBkZXZlbnZfaW5pX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ2RldmVudi5pc29sYXRpb24uaW5pJykKLSAgICAgIGlmIChvcy5wYXRoLmV4aXN0cyhkZXZlbnZfcGF0aCkgb3Igb3MucGF0aC5leGlzdHMoZGV2ZW52X2luaV9wYXRoKSkgYW5kIHZlcnNpb24gaW4gdmVyc2lvbl90b195ZWFyOgotICAgICAgICB2ZXJzaW9ucy5hcHBlbmQoX0NyZWF0ZVZlcnNpb24odmVyc2lvbl90b195ZWFyW3ZlcnNpb25dLAotICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGgsICcuLicsICcuLicpKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgICAgcHJpbnQoJ19EZXRlY3RWaXN1YWxTdHVkaW9WZXJzaW9uKCkgZGlkIG5vdCBmaW5kIFZpc3VhbCBTdHVkaW8gMjAxNyAodjE1LjApJykKLSAgICAgIGNvbnRpbnVlCi0gICAgIyBPbGQgbWV0aG9kIG9mIHNlYXJjaGluZyBmb3Igd2hpY2ggVlMgdmVyc2lvbiBpcyBpbnN0YWxsZWQKLSAgICAjIFdlIGRvbid0IHVzZSB0aGUgMjAxMC1lbmNvdXJhZ2VkLXdheSBiZWNhdXNlIHdlIGFsc28gd2FudCB0byBnZXQgdGhlCi0gICAgIyBwYXRoIHRvIHRoZSBiaW5hcmllcywgd2hpY2ggaXQgZG9lc24ndCBvZmZlci4KLSAgICBrZXlzID0gW3InSEtMTVxTb2Z0d2FyZVxNaWNyb3NvZnRcVmlzdWFsU3R1ZGlvXCVzJyAlIHZlcnNpb24sCi0gICAgICAgICAgICByJ0hLTE1cU29mdHdhcmVcV293NjQzMk5vZGVcTWljcm9zb2Z0XFZpc3VhbFN0dWRpb1wlcycgJSB2ZXJzaW9uLAotICAgICAgICAgICAgcidIS0xNXFNvZnR3YXJlXE1pY3Jvc29mdFxWQ0V4cHJlc3NcJXMnICUgdmVyc2lvbiwKLSAgICAgICAgICAgIHInSEtMTVxTb2Z0d2FyZVxXb3c2NDMyTm9kZVxNaWNyb3NvZnRcVkNFeHByZXNzXCVzJyAlIHZlcnNpb25dCi0gICAgZm9yIGluZGV4IGluIHJhbmdlKGxlbihrZXlzKSk6Ci0gICAgICBwYXRoID0gX1JlZ2lzdHJ5R2V0VmFsdWUoa2V5c1tpbmRleF0sICdJbnN0YWxsRGlyJykKLSAgICAgIGlmIG5vdCBwYXRoOgotICAgICAgICBjb250aW51ZQotICAgICAgcGF0aCA9IF9Db252ZXJ0VG9DeWdwYXRoKHBhdGgpCi0gICAgICAjIENoZWNrIGZvciBmdWxsLgotICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdkZXZlbnYuZXhlJykKLSAgICAgIGV4cHJlc3NfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAndmNleHByZXNzLmV4ZScpCi0gICAgICBpZiAobm90IGZvcmNlX2V4cHJlc3MgYW5kIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCkgYW5kCi0gICAgICAgICAgdmVyc2lvbiBpbiB2ZXJzaW9uX3RvX3llYXIpOgotICAgICAgICAjIEFkZCB0aGlzIG9uZS4KLSAgICAgICAgdmVyc2lvbnMuYXBwZW5kKF9DcmVhdGVWZXJzaW9uKHZlcnNpb25fdG9feWVhclt2ZXJzaW9uXSwKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCAnLi4nLCAnLi4nKSkpCi0gICAgICAjIENoZWNrIGZvciBleHByZXNzLgotICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhleHByZXNzX3BhdGgpIGFuZCB2ZXJzaW9uIGluIHZlcnNpb25fdG9feWVhcjoKLSAgICAgICAgIyBBZGQgdGhpcyBvbmUuCi0gICAgICAgIHZlcnNpb25zLmFwcGVuZChfQ3JlYXRlVmVyc2lvbih2ZXJzaW9uX3RvX3llYXJbdmVyc2lvbl0gKyAnZScsCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aCwgJy4uJywgJy4uJykpKQotCi0gICAgIyBUaGUgb2xkIG1ldGhvZCBhYm92ZSBkb2VzIG5vdCB3b3JrIHdoZW4gb25seSBTREsgaXMgaW5zdGFsbGVkLgotICAgIGtleXMgPSBbcidIS0xNXFNvZnR3YXJlXE1pY3Jvc29mdFxWaXN1YWxTdHVkaW9cU3hTXFZDNycsCi0gICAgICAgICAgICByJ0hLTE1cU29mdHdhcmVcV293NjQzMk5vZGVcTWljcm9zb2Z0XFZpc3VhbFN0dWRpb1xTeFNcVkM3J10KLSAgICBmb3IgaW5kZXggaW4gcmFuZ2UobGVuKGtleXMpKToKLSAgICAgIHBhdGggPSBfUmVnaXN0cnlHZXRWYWx1ZShrZXlzW2luZGV4XSwgdmVyc2lvbikKLSAgICAgIGlmIG5vdCBwYXRoOgotICAgICAgICBjb250aW51ZQotICAgICAgcGF0aCA9IF9Db252ZXJ0VG9DeWdwYXRoKHBhdGgpCi0gICAgICBpZiB2ZXJzaW9uIGluIHZlcnNpb25fdG9feWVhcjoKLSAgICAgICAgdmVyc2lvbnMuYXBwZW5kKF9DcmVhdGVWZXJzaW9uKHZlcnNpb25fdG9feWVhclt2ZXJzaW9uXSArICdlJywKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCAnLi4nKSwgc2RrX2Jhc2VkPVRydWUpKQotICByZXR1cm4gdmVyc2lvbnMKLQotCi1kZWYgU2VsZWN0VmlzdWFsU3R1ZGlvVmVyc2lvbih2ZXJzaW9uPSdhdXRvJyk6Ci0gICIiIlNlbGVjdCB3aGljaCB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8gcHJvamVjdHMgdG8gZ2VuZXJhdGUuCi0KLSAgQXJndW1lbnRzOgotICAgIHZlcnNpb246IEhvb2sgdG8gYWxsb3cgY2FsbGVyIHRvIGZvcmNlIGEgcGFydGljdWxhciB2ZXJzaW9uICh2cyBhdXRvKS4KLSAgUmV0dXJuczoKLSAgICBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmlzdWFsIHN0dWRpbyBwcm9qZWN0IGZvcm1hdCB2ZXJzaW9uLgotICAiIiIKLSAgIyBJbiBhdXRvIG1vZGUsIGNoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBvdmVycmlkZS4KLSAgaWYgdmVyc2lvbiA9PSAnYXV0byc6Ci0gICAgdmVyc2lvbiA9IG9zLmVudmlyb24uZ2V0KCdHWVBfTVNWU19WRVJTSU9OJywgJ2F1dG8nKQotICB2ZXJzaW9uX21hcCA9IHsKLSAgICAnYXV0byc6ICgnMTAuMCcsICc5LjAnLCAnOC4wJywgJzExLjAnLCAnMTIuMCcpLAotICAgICcyMDA1JzogKCc4LjAnLCksCi0gICAgJzIwMDVlJzogKCc4LjAnLCksCi0gICAgJzIwMDgnOiAoJzkuMCcsKSwKLSAgICAnMjAwOGUnOiAoJzkuMCcsKSwKLSAgICAnMjAxMCc6ICgnMTAuMCcsKSwKLSAgICAnMjAxMGUnOiAoJzEwLjAnLCksCi0gICAgJzIwMTInOiAoJzExLjAnLCksCi0gICAgJzIwMTJlJzogKCcxMS4wJywpLAotICAgICcyMDE3JzogKCcxNS4wJywpLAotICB9Ci0KLSAgdmVyc2lvbiA9IHN0cih2ZXJzaW9uKQotICB2c19pbnN0YWxsX2RpciA9IG9zLmVudmlyb24uZ2V0KCdWU19JTlNUQUxMX0RJUicpCi0gIHZlcnNpb25zID0gX0RldGVjdFZpc3VhbFN0dWRpb1ZlcnNpb25zKHZlcnNpb25fbWFwW3ZlcnNpb25dLCAnZScgaW4gdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNfaW5zdGFsbF9kaXIpCi0KLSAgaWYgbm90IHZlcnNpb25zOgotICAgIGlmIHZlcnNpb24gPT0gJ2F1dG8nOgotICAgICAgIyBEZWZhdWx0IHRvIDIwMDUgaWYgd2UgY291bGRuJ3QgZmluZCBhbnl0aGluZwotICAgICAgcmV0dXJuIF9DcmVhdGVWZXJzaW9uKCcyMDA1JywgTm9uZSkKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIF9DcmVhdGVWZXJzaW9uKHZlcnNpb24sIHBhdGg9dnNfaW5zdGFsbF9kaXIpCi0gIHJldHVybiB2ZXJzaW9uc1swXQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9TQ29ucy5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvU0NvbnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZDg0NWUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9TQ29ucy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotU0NvbnMgZ2VuZXJhdG9yLgotCi1UaGlzIGNvbnRhaW5zIGNsYXNzIGRlZmluaXRpb25zIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBmb3IgZ2VuZXJhdGluZwotcGllY2VzIG9mIFNDb25zIGZpbGVzIGZvciB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIEdZUCB0YXJnZXRzLgotIiIiCi0KLWltcG9ydCBvcwotCi0KLWRlZiBXcml0ZUxpc3QoZnAsIGxpc3QsIHByZWZpeD0nJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcj0nLFxuICAgICcsCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVhbWJsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGFtYmxlPU5vbmUpOgotICBmcC53cml0ZShwcmVhbWJsZSBvciAnJykKLSAgZnAud3JpdGUoKHNlcGFyYXRvciBvciAnICcpLmpvaW4oW3ByZWZpeCArIGwgZm9yIGwgaW4gbGlzdF0pKQotICBmcC53cml0ZShwb3N0YW1ibGUgb3IgJycpCi0KLQotY2xhc3MgVGFyZ2V0QmFzZShvYmplY3QpOgotICAiIiIKLSAgQmFzZSBjbGFzcyBmb3IgYSBTQ29ucyByZXByZXNlbnRhdGlvbiBvZiBhIEdZUCB0YXJnZXQuCi0gICIiIgotICBpc19pZ25vcmVkID0gRmFsc2UKLSAgdGFyZ2V0X3ByZWZpeCA9ICcnCi0gIHRhcmdldF9zdWZmaXggPSAnJwotICBkZWYgX19pbml0X18oc2VsZiwgc3BlYyk6Ci0gICAgc2VsZi5zcGVjID0gc3BlYwotICBkZWYgZnVsbF9wcm9kdWN0X25hbWUoc2VsZik6Ci0gICAgIiIiCi0gICAgUmV0dXJucyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBwcm9kdWN0IGJlaW5nIGJ1aWx0OgotCi0gICAgICAqIFVzZXMgJ3Byb2R1Y3RfbmFtZScgaWYgaXQncyBzZXQsIGVsc2UgcHJlZml4ICsgJ3RhcmdldF9uYW1lJy4KLSAgICAgICogUHJlcGVuZHMgJ3Byb2R1Y3RfZGlyJyBpZiBzZXQuCi0gICAgICAqIEFwcGVuZHMgU0NvbnMgc3VmZml4IHZhcmlhYmxlcyBmb3IgdGhlIHRhcmdldCB0eXBlIChvcgotICAgICAgICBwcm9kdWN0X2V4dGVuc2lvbikuCi0gICAgIiIiCi0gICAgc3VmZml4ID0gc2VsZi50YXJnZXRfc3VmZml4Ci0gICAgcHJvZHVjdF9leHRlbnNpb24gPSBzZWxmLnNwZWMuZ2V0KCdwcm9kdWN0X2V4dGVuc2lvbicpCi0gICAgaWYgcHJvZHVjdF9leHRlbnNpb246Ci0gICAgICBzdWZmaXggPSAnLicgKyBwcm9kdWN0X2V4dGVuc2lvbgotICAgIHByZWZpeCA9IHNlbGYuc3BlYy5nZXQoJ3Byb2R1Y3RfcHJlZml4Jywgc2VsZi50YXJnZXRfcHJlZml4KQotICAgIG5hbWUgPSBzZWxmLnNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICBuYW1lID0gcHJlZml4ICsgc2VsZi5zcGVjLmdldCgncHJvZHVjdF9uYW1lJywgbmFtZSkgKyBzdWZmaXgKLSAgICBwcm9kdWN0X2RpciA9IHNlbGYuc3BlYy5nZXQoJ3Byb2R1Y3RfZGlyJykKLSAgICBpZiBwcm9kdWN0X2RpcjoKLSAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4ocHJvZHVjdF9kaXIsIG5hbWUpCi0gICAgZWxzZToKLSAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vdXRfZGlyLCBuYW1lKQotICAgIHJldHVybiBuYW1lCi0KLSAgZGVmIHdyaXRlX2lucHV0X2ZpbGVzKHNlbGYsIGZwKToKLSAgICAiIiIKLSAgICBXcml0ZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGlucHV0IGZpbGVzIChzb3VyY2VzKS4KLSAgICAiIiIKLSAgICBzb3VyY2VzID0gc2VsZi5zcGVjLmdldCgnc291cmNlcycpCi0gICAgaWYgbm90IHNvdXJjZXM6Ci0gICAgICBmcC53cml0ZSgnXG5pbnB1dF9maWxlcyA9IFtdXG4nKQotICAgICAgcmV0dXJuCi0gICAgcHJlYW1ibGUgPSAnXG5pbnB1dF9maWxlcyA9IFtcbiAgICAnCi0gICAgcG9zdGFtYmxlID0gJyxcbl1cbicKLSAgICBXcml0ZUxpc3QoZnAsIG1hcChyZXByLCBzb3VyY2VzKSwgcHJlYW1ibGU9cHJlYW1ibGUsIHBvc3RhbWJsZT1wb3N0YW1ibGUpCi0KLSAgZGVmIGJ1aWxkZXJfY2FsbChzZWxmKToKLSAgICAiIiIKLSAgICBSZXR1cm5zIHRoZSBhY3R1YWwgU0NvbnMgYnVpbGRlciBjYWxsIHRvIGJ1aWxkIHRoaXMgdGFyZ2V0LgotICAgICIiIgotICAgIG5hbWUgPSBzZWxmLmZ1bGxfcHJvZHVjdF9uYW1lKCkKLSAgICByZXR1cm4gJ2Vudi4lcyhlbnYuRmlsZSglciksIGlucHV0X2ZpbGVzKScgJSAoc2VsZi5idWlsZGVyX25hbWUsIG5hbWUpCi0gIGRlZiB3cml0ZV90YXJnZXQoc2VsZiwgZnAsIHNyY19kaXI9JycsIHByZT0nJyk6Ci0gICAgIiIiCi0gICAgV3JpdGVzIHRoZSBsaW5lcyBuZWNlc3NhcnkgdG8gYnVpbGQgdGhpcyB0YXJnZXQuCi0gICAgIiIiCi0gICAgZnAud3JpdGUoJ1xuJyArIHByZSkKLSAgICBmcC53cml0ZSgnX291dHB1dHMgPSAlc1xuJyAlIHNlbGYuYnVpbGRlcl9jYWxsKCkpCi0gICAgZnAud3JpdGUoJ3RhcmdldF9maWxlcy5leHRlbmQoX291dHB1dHMpXG4nKQotCi0KLWNsYXNzIE5vbmVUYXJnZXQoVGFyZ2V0QmFzZSk6Ci0gICIiIgotICBBIEdZUCB0YXJnZXQgdHlwZSBvZiAnbm9uZScsIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseS4KLSAgIiIiCi0gIGRlZiB3cml0ZV90YXJnZXQoc2VsZiwgZnAsIHNyY19kaXI9JycsIHByZT0nJyk6Ci0gICAgZnAud3JpdGUoJ1xudGFyZ2V0X2ZpbGVzLmV4dGVuZChpbnB1dF9maWxlcylcbicpCi0KLQotY2xhc3MgU2V0dGluZ3NUYXJnZXQoVGFyZ2V0QmFzZSk6Ci0gICIiIgotICBBIEdZUCB0YXJnZXQgdHlwZSBvZiAnc2V0dGluZ3MnLgotICAiIiIKLSAgaXNfaWdub3JlZCA9IFRydWUKLQotCi1jb21waWxhYmxlX3NvdXJjZXNfdGVtcGxhdGUgPSAiIiIKLV9yZXN1bHQgPSBbXQotZm9yIGluZmlsZSBpbiBpbnB1dF9maWxlczoKLSAgaWYgZW52LmNvbXBpbGFibGUoaW5maWxlKToKLSAgICBpZiAodHlwZShpbmZpbGUpID09IHR5cGUoJycpCi0gICAgICAgIGFuZCAoaW5maWxlLnN0YXJ0c3dpdGgoJShzcmNfZGlyKXIpCi0gICAgICAgICAgICAgb3Igbm90IG9zLnBhdGguaXNhYnMoZW52LnN1YnN0KGluZmlsZSkpKSk6Ci0gICAgICAjIEZvcmNlIGZpbGVzIGJlbG93IHRoZSBidWlsZCBkaXJlY3RvcnkgYnkgcmVwbGFjaW5nIGFsbCAnLi4nCi0gICAgICAjIGVsZW1lbnRzIGluIHRoZSBwYXRoIHdpdGggJ19fJzoKLSAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5ub3JtcGF0aChpbmZpbGUpKQotICAgICAgYmFzZSA9IFtkID09ICcuLicgYW5kICdfXycgb3IgZCBmb3IgZCBpbiBiYXNlLnNwbGl0KCcvJyldCi0gICAgICBiYXNlID0gb3MucGF0aC5qb2luKCpiYXNlKQotICAgICAgb2JqZWN0ID0gJyR7T0JKX0RJUn0vJHtDT01QT05FTlRfTkFNRX0vJHtUQVJHRVRfTkFNRX0vJyArIGJhc2UKLSAgICAgIGlmIG5vdCBpbmZpbGUuc3RhcnRzd2l0aCglKHNyY19kaXIpcik6Ci0gICAgICAgIGluZmlsZSA9ICUoc3JjX2RpcilyICsgaW5maWxlCi0gICAgICBpbmZpbGUgPSBlbnYuJShuYW1lKXMob2JqZWN0LCBpbmZpbGUpWzBdCi0gICAgZWxzZToKLSAgICAgIGluZmlsZSA9IGVudi4lKG5hbWUpcyhpbmZpbGUpWzBdCi0gIF9yZXN1bHQuYXBwZW5kKGluZmlsZSkKLWlucHV0X2ZpbGVzID0gX3Jlc3VsdAotIiIiCi0KLWNsYXNzIENvbXBpbGFibGVTb3VyY2VzVGFyZ2V0QmFzZShUYXJnZXRCYXNlKToKLSAgIiIiCi0gIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHRhcmdldHMgdGhhdCBjb21waWxlIHRoZWlyIHNvdXJjZSBmaWxlcy4KLQotICBXZSBleHBsaWNpdGx5IHRyYW5zZm9ybSBjb21waWxhYmxlIGZpbGVzIGludG8gb2JqZWN0IGZpbGVzLAotICBldmVuIHRob3VnaCBTQ29ucyBjb3VsZCBpbmZlciB0aGF0IGZvciB1cywgYmVjYXVzZSB3ZSB3YW50Ci0gIHRvIGNvbnRyb2wgd2hlcmUgdGhlIG9iamVjdCBmaWxlIGVuZHMgdXAuICAoVGhlIGltcGxpY2l0IHJ1bGVzCi0gIGluIFNDb25zIGFsd2F5cyBwdXQgdGhlIG9iamVjdCBmaWxlIG5leHQgdG8gdGhlIHNvdXJjZSBmaWxlLikKLSAgIiIiCi0gIGludGVybWVkaWF0ZV9idWlsZGVyX25hbWUgPSBOb25lCi0gIGRlZiB3cml0ZV90YXJnZXQoc2VsZiwgZnAsIHNyY19kaXI9JycsIHByZT0nJyk6Ci0gICAgaWYgc2VsZi5pbnRlcm1lZGlhdGVfYnVpbGRlcl9uYW1lIGlzIE5vbmU6Ci0gICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0gICAgaWYgc3JjX2RpciBhbmQgbm90IHNyY19kaXIuZW5kc3dpdGgoJy8nKToKLSAgICAgIHNyY19kaXIgKz0gJy8nCi0gICAgdmFyaWFibGVzID0gewotICAgICAgICAnc3JjX2Rpcic6IHNyY19kaXIsCi0gICAgICAgICduYW1lJzogc2VsZi5pbnRlcm1lZGlhdGVfYnVpbGRlcl9uYW1lLAotICAgIH0KLSAgICBmcC53cml0ZShjb21waWxhYmxlX3NvdXJjZXNfdGVtcGxhdGUgJSB2YXJpYWJsZXMpCi0gICAgc3VwZXIoQ29tcGlsYWJsZVNvdXJjZXNUYXJnZXRCYXNlLCBzZWxmKS53cml0ZV90YXJnZXQoZnApCi0KLQotY2xhc3MgUHJvZ3JhbVRhcmdldChDb21waWxhYmxlU291cmNlc1RhcmdldEJhc2UpOgotICAiIiIKLSAgQSBHWVAgdGFyZ2V0IHR5cGUgb2YgJ2V4ZWN1dGFibGUnLgotICAiIiIKLSAgYnVpbGRlcl9uYW1lID0gJ0d5cFByb2dyYW0nCi0gIGludGVybWVkaWF0ZV9idWlsZGVyX25hbWUgPSAnU3RhdGljT2JqZWN0JwotICB0YXJnZXRfcHJlZml4ID0gJyR7UFJPR1BSRUZJWH0nCi0gIHRhcmdldF9zdWZmaXggPSAnJHtQUk9HU1VGRklYfScKLSAgb3V0X2RpciA9ICcke1RPUF9CVUlMRERJUn0nCi0KLQotY2xhc3MgU3RhdGljTGlicmFyeVRhcmdldChDb21waWxhYmxlU291cmNlc1RhcmdldEJhc2UpOgotICAiIiIKLSAgQSBHWVAgdGFyZ2V0IHR5cGUgb2YgJ3N0YXRpY19saWJyYXJ5Jy4KLSAgIiIiCi0gIGJ1aWxkZXJfbmFtZSA9ICdHeXBTdGF0aWNMaWJyYXJ5JwotICBpbnRlcm1lZGlhdGVfYnVpbGRlcl9uYW1lID0gJ1N0YXRpY09iamVjdCcKLSAgdGFyZ2V0X3ByZWZpeCA9ICcke0xJQlBSRUZJWH0nCi0gIHRhcmdldF9zdWZmaXggPSAnJHtMSUJTVUZGSVh9JwotICBvdXRfZGlyID0gJyR7TElCX0RJUn0nCi0KLQotY2xhc3MgU2hhcmVkTGlicmFyeVRhcmdldChDb21waWxhYmxlU291cmNlc1RhcmdldEJhc2UpOgotICAiIiIKLSAgQSBHWVAgdGFyZ2V0IHR5cGUgb2YgJ3NoYXJlZF9saWJyYXJ5Jy4KLSAgIiIiCi0gIGJ1aWxkZXJfbmFtZSA9ICdHeXBTaGFyZWRMaWJyYXJ5JwotICBpbnRlcm1lZGlhdGVfYnVpbGRlcl9uYW1lID0gJ1NoYXJlZE9iamVjdCcKLSAgdGFyZ2V0X3ByZWZpeCA9ICcke1NITElCUFJFRklYfScKLSAgdGFyZ2V0X3N1ZmZpeCA9ICcke1NITElCU1VGRklYfScKLSAgb3V0X2RpciA9ICcke0xJQl9ESVJ9JwotCi0KLWNsYXNzIExvYWRhYmxlTW9kdWxlVGFyZ2V0KENvbXBpbGFibGVTb3VyY2VzVGFyZ2V0QmFzZSk6Ci0gICIiIgotICBBIEdZUCB0YXJnZXQgdHlwZSBvZiAnbG9hZGFibGVfbW9kdWxlJy4KLSAgIiIiCi0gIGJ1aWxkZXJfbmFtZSA9ICdHeXBMb2FkYWJsZU1vZHVsZScKLSAgaW50ZXJtZWRpYXRlX2J1aWxkZXJfbmFtZSA9ICdTaGFyZWRPYmplY3QnCi0gIHRhcmdldF9wcmVmaXggPSAnJHtTSExJQlBSRUZJWH0nCi0gIHRhcmdldF9zdWZmaXggPSAnJHtTSExJQlNVRkZJWH0nCi0gIG91dF9kaXIgPSAnJHtUT1BfQlVJTERESVJ9JwotCi0KLVRhcmdldE1hcCA9IHsKLSAgTm9uZSA6IE5vbmVUYXJnZXQsCi0gICdub25lJyA6IE5vbmVUYXJnZXQsCi0gICdzZXR0aW5ncycgOiBTZXR0aW5nc1RhcmdldCwKLSAgJ2V4ZWN1dGFibGUnIDogUHJvZ3JhbVRhcmdldCwKLSAgJ3N0YXRpY19saWJyYXJ5JyA6IFN0YXRpY0xpYnJhcnlUYXJnZXQsCi0gICdzaGFyZWRfbGlicmFyeScgOiBTaGFyZWRMaWJyYXJ5VGFyZ2V0LAotICAnbG9hZGFibGVfbW9kdWxlJyA6IExvYWRhYmxlTW9kdWxlVGFyZ2V0LAotfQotCi0KLWRlZiBUYXJnZXQoc3BlYyk6Ci0gIHJldHVybiBUYXJnZXRNYXBbc3BlYy5nZXQoJ3R5cGUnKV0oc3BlYykKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvX19pbml0X18ucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwNmMxMDdmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGNvcHkKLWltcG9ydCBneXAuaW5wdXQKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotaW1wb3J0IHNobGV4Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdHJhY2ViYWNrCi1mcm9tIGd5cC5jb21tb24gaW1wb3J0IEd5cEVycm9yCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKLSAgaW1wb3J0IGN5Z3BhdGgKLQotIyBEZWZhdWx0IGRlYnVnIG1vZGVzIGZvciBHWVAKLWRlYnVnID0ge30KLQotIyBMaXN0IG9mICJvZmZpY2lhbCIgZGVidWcgbW9kZXMsIGJ1dCB5b3UgY2FuIHVzZSBhbnl0aGluZyB5b3UgbGlrZS4KLURFQlVHX0dFTkVSQUwgPSAnZ2VuZXJhbCcKLURFQlVHX1ZBUklBQkxFUyA9ICd2YXJpYWJsZXMnCi1ERUJVR19JTkNMVURFUyA9ICdpbmNsdWRlcycKLURFQlVHX0RFUEVOREVOQ0lFUyA9ICdkZXBlbmRlbmNpZXMnCi0KLQotZGVmIERlYnVnT3V0cHV0KG1vZGUsIG1lc3NhZ2UpOgotICBpZiAnYWxsJyBpbiBneXAuZGVidWcua2V5cygpIG9yIG1vZGUgaW4gZ3lwLmRlYnVnLmtleXMoKToKLSAgICBjdHggPSAoJ3Vua25vd24nLCAwLCAndW5rbm93bicpCi0gICAgdHJ5OgotICAgICAgZiA9IHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKGxpbWl0PTIpCi0gICAgICBpZiBmOgotICAgICAgICBjdHggPSBmWzBdWzozXQotICAgIGV4Y2VwdDoKLSAgICAgIHBhc3MKLSAgICBwcmludCAnJXM6JXM6JWQ6JXMgJXMnICUgKG1vZGUudXBwZXIoKSwgb3MucGF0aC5iYXNlbmFtZShjdHhbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4WzFdLCBjdHhbMl0sIG1lc3NhZ2UpCi0KLWRlZiBGaW5kQnVpbGRGaWxlcygpOgotICBleHRlbnNpb24gPSAnLmd5cCcKLSAgZmlsZXMgPSBvcy5saXN0ZGlyKG9zLmdldGN3ZCgpKQotICBidWlsZF9maWxlcyA9IFtdCi0gIGZvciBmaWxlIGluIGZpbGVzOgotICAgIGlmIGZpbGUuZW5kc3dpdGgoZXh0ZW5zaW9uKToKLSAgICAgIGJ1aWxkX2ZpbGVzLmFwcGVuZChmaWxlKQotICByZXR1cm4gYnVpbGRfZmlsZXMKLQotCi1kZWYgTG9hZChidWlsZF9maWxlcywgZm9ybWF0LCBkZWZhdWx0X3ZhcmlhYmxlcz17fSwKLSAgICAgICAgIGluY2x1ZGVzPVtdLCBkZXB0aD0nLicsIHBhcmFtcz1Ob25lLCBjaGVjaz1GYWxzZSwKLSAgICAgICAgIGNpcmN1bGFyX2NoZWNrPVRydWUpOgotICAiIiIKLSAgTG9hZHMgb25lIG9yIG1vcmUgc3BlY2lmaWVkIGJ1aWxkIGZpbGVzLgotICBkZWZhdWx0X3ZhcmlhYmxlcyBhbmQgaW5jbHVkZXMgd2lsbCBiZSBjb3BpZWQgYmVmb3JlIHVzZS4KLSAgUmV0dXJucyB0aGUgZ2VuZXJhdG9yIGZvciB0aGUgc3BlY2lmaWVkIGZvcm1hdCBhbmQgdGhlCi0gIGRhdGEgcmV0dXJuZWQgYnkgbG9hZGluZyB0aGUgc3BlY2lmaWVkIGJ1aWxkIGZpbGVzLgotICAiIiIKLSAgaWYgcGFyYW1zIGlzIE5vbmU6Ci0gICAgcGFyYW1zID0ge30KLQotICBmbGF2b3IgPSBOb25lCi0gIGlmICctJyBpbiBmb3JtYXQ6Ci0gICAgZm9ybWF0LCBwYXJhbXNbJ2ZsYXZvciddID0gZm9ybWF0LnNwbGl0KCctJywgMSkKLQotICBnZW5lcmF0b3JzID0gW10KLSAgZm9ybWF0cyA9IGZvcm1hdC5zcGxpdCgnLCcpCi0KLSAgZm9yIGZvcm1hdF9uYW1lIGluIGZvcm1hdHM6Ci0gICAgIyBGb3JtYXQgY2FuIGJlIGEgY3VzdG9tIHB5dGhvbiBmaWxlLCBvciBieSBkZWZhdWx0IHRoZSBuYW1lIG9mIGEgbW9kdWxlCi0gICAgIyB3aXRoaW4gZ3lwLmdlbmVyYXRvci4KLSAgICBpZiBmb3JtYXRfbmFtZS5lbmRzd2l0aCgnLnB5Jyk6Ci0gICAgICBnZW5lcmF0b3JfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZm9ybWF0X25hbWUpWzBdCi0gICAgICBwYXRoLCBnZW5lcmF0b3JfbmFtZSA9IG9zLnBhdGguc3BsaXQoZ2VuZXJhdG9yX25hbWUpCi0KLSAgICAgICMgTWFrZSBzdXJlIHRoZSBwYXRoIHRvIHRoZSBjdXN0b20gZ2VuZXJhdG9yIGlzIGluIHN5cy5wYXRoCi0gICAgICAjIERvbid0IHdvcnJ5IGFib3V0IHJlbW92aW5nIGl0IG9uY2Ugd2UgYXJlIGRvbmUuICBLZWVwaW5nIHRoZSBwYXRoCi0gICAgICAjIHRvIGVhY2ggZ2VuZXJhdG9yIHRoYXQgaXMgdXNlZCBpbiBzeXMucGF0aCBpcyBsaWtlbHkgaGFybWxlc3MgYW5kCi0gICAgICAjIGFyZ3VhYmx5IGEgZ29vZCBpZGVhLgotICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQotICAgICAgaWYgcGF0aCBub3QgaW4gc3lzLnBhdGg6Ci0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwYXRoKQotICAgIGVsc2U6Ci0gICAgICBnZW5lcmF0b3JfbmFtZSA9ICdneXAuZ2VuZXJhdG9yLicgKyBmb3JtYXRfbmFtZQotCi0gICAgIyBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4gb3JkZXIgKGFzIG9wcG9zZWQgdG8gYnkga2V5KQotICAgICMgYmVjYXVzZSBBY3RpdmVQeXRob24gY2Fubm90IGhhbmRsZSBrZXkgcGFyYW1ldGVycyB0byBfX2ltcG9ydF9fLgotICAgIGdlbmVyYXRvcnMuYXBwZW5kKAotICAgICAgICBfX2ltcG9ydF9fKGdlbmVyYXRvcl9uYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBnZW5lcmF0b3JfbmFtZSkpCi0KLSAgIyBUcmVhdCB0aGUgZmlyc3QgZ2VuZXJhdG9yIGFzIHRoZSBtYWluIGdlbmVyYXRvciBhbmQgdXNlIGl0cyBzZXR0aW5ncwotICAjIHRvIGxvYWQgZ2VuZXJhdG9yIGlucHV0Ci0gIGdlbmVyYXRvciA9IGdlbmVyYXRvcnNbMF0KLQotICBkZWZhdWx0X3ZhcmlhYmxlcyA9IGNvcHkuY29weShkZWZhdWx0X3ZhcmlhYmxlcykKLQotICAjIERlZmF1bHQgdmFyaWFibGVzIHByb3ZpZGVkIGJ5IHRoaXMgcHJvZ3JhbSBhbmQgaXRzIG1vZHVsZXMgc2hvdWxkIGJlCi0gICMgbmFtZWQgV0lUSF9DQVBJVEFMX0xFVFRFUlMgdG8gcHJvdmlkZSBhIGRpc3RpbmN0ICJiZXN0IHByYWN0aWNlIiBuYW1lc3BhY2UsCi0gICMgYXZvaWRpbmcgY29sbGlzaW9ucyB3aXRoIHVzZXIgYW5kIGF1dG9tYXRpYyB2YXJpYWJsZXMuCi0gIGRlZmF1bHRfdmFyaWFibGVzWydHRU5FUkFUT1InXSA9IGZvcm1hdHNbMF0KLQotICBmb3IgKGtleSwgdmFsKSBpbiBnZW5lcmF0b3IuR2V0R2VuZXJhdG9yVmFyaWFibGVzKHBhcmFtc1snZmxhdm9yJ10pLml0ZW1zKCk6Ci0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdChrZXksIHZhbCkKLQotICAjIEdpdmUgdGhlIGdlbmVyYXRvciB0aGUgb3Bwb3J0dW5pdHkgdG8gc2V0IGFkZGl0aW9uYWwgdmFyaWFibGVzIGJhc2VkIG9uCi0gICMgdGhlIHBhcmFtcyBpdCB3aWxsIHJlY2VpdmUgaW4gdGhlIG91dHB1dCBwaGFzZS4KLSAgaWYgZ2V0YXR0cihnZW5lcmF0b3IsICdDYWxjdWxhdGVWYXJpYWJsZXMnLCBOb25lKToKLSAgICBnZW5lcmF0b3IuQ2FsY3VsYXRlVmFyaWFibGVzKGRlZmF1bHRfdmFyaWFibGVzLCBwYXJhbXMpCi0KLSAgIyBHaXZlIHRoZSBnZW5lcmF0b3IgdGhlIG9wcG9ydHVuaXR5IHRvIHNldCBnZW5lcmF0b3JfaW5wdXRfaW5mbyBiYXNlZCBvbgotICAjIHRoZSBwYXJhbXMgaXQgd2lsbCByZWNlaXZlIGluIHRoZSBvdXRwdXQgcGhhc2UuCi0gIGlmIGdldGF0dHIoZ2VuZXJhdG9yLCAnQ2FsY3VsYXRlR2VuZXJhdG9ySW5wdXRJbmZvJywgTm9uZSk6Ci0gICAgZ2VuZXJhdG9yLkNhbGN1bGF0ZUdlbmVyYXRvcklucHV0SW5mbyhwYXJhbXMpCi0KLSAgIyBGZXRjaCB0aGUgZ2VuZXJhdG9yIHNwZWNpZmljIGluZm8gdGhhdCBnZXRzIGZlZCB0byBpbnB1dCwgd2UgdXNlIGdldGF0dHIKLSAgIyBzbyB3ZSBjYW4gZGVmYXVsdCB0aGluZ3MgYW5kIHRoZSBnZW5lcmF0b3JzIG9ubHkgaGF2ZSB0byBwcm92aWRlIHdoYXQKLSAgIyB0aGV5IG5lZWQuCi0gIGdlbmVyYXRvcl9pbnB1dF9pbmZvID0gewotICAgICdnZW5lcmF0b3Jfd2FudHNfYWJzb2x1dGVfYnVpbGRfZmlsZV9wYXRocyc6Ci0gICAgICAgIGdldGF0dHIoZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX3dhbnRzX2Fic29sdXRlX2J1aWxkX2ZpbGVfcGF0aHMnLCBGYWxzZSksCi0gICAgJ2dlbmVyYXRvcl9oYW5kbGVzX3ZhcmlhbnRzJzoKLSAgICAgICAgZ2V0YXR0cihnZW5lcmF0b3IsICdnZW5lcmF0b3JfaGFuZGxlc192YXJpYW50cycsIEZhbHNlKSwKLSAgICAnbm9uX2NvbmZpZ3VyYXRpb25fa2V5cyc6Ci0gICAgICAgIGdldGF0dHIoZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX2FkZGl0aW9uYWxfbm9uX2NvbmZpZ3VyYXRpb25fa2V5cycsIFtdKSwKLSAgICAncGF0aF9zZWN0aW9ucyc6Ci0gICAgICAgIGdldGF0dHIoZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX2FkZGl0aW9uYWxfcGF0aF9zZWN0aW9ucycsIFtdKSwKLSAgICAnZXh0cmFfc291cmNlc19mb3JfcnVsZXMnOgotICAgICAgICBnZXRhdHRyKGdlbmVyYXRvciwgJ2dlbmVyYXRvcl9leHRyYV9zb3VyY2VzX2Zvcl9ydWxlcycsIFtdKSwKLSAgICAnZ2VuZXJhdG9yX3N1cHBvcnRzX211bHRpcGxlX3Rvb2xzZXRzJzoKLSAgICAgICAgZ2V0YXR0cihnZW5lcmF0b3IsICdnZW5lcmF0b3Jfc3VwcG9ydHNfbXVsdGlwbGVfdG9vbHNldHMnLCBGYWxzZSksCi0gICAgJ2dlbmVyYXRvcl93YW50c19zdGF0aWNfbGlicmFyeV9kZXBlbmRlbmNpZXNfYWRqdXN0ZWQnOgotICAgICAgICBnZXRhdHRyKGdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAnZ2VuZXJhdG9yX3dhbnRzX3N0YXRpY19saWJyYXJ5X2RlcGVuZGVuY2llc19hZGp1c3RlZCcsIFRydWUpLAotICAgICdnZW5lcmF0b3Jfd2FudHNfc29ydGVkX2RlcGVuZGVuY2llcyc6Ci0gICAgICAgIGdldGF0dHIoZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX3dhbnRzX3NvcnRlZF9kZXBlbmRlbmNpZXMnLCBGYWxzZSksCi0gICAgJ2dlbmVyYXRvcl9maWxlbGlzdF9wYXRocyc6Ci0gICAgICAgIGdldGF0dHIoZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzJywgTm9uZSksCi0gIH0KLQotICAjIFByb2Nlc3MgdGhlIGlucHV0IHNwZWNpZmljIHRvIHRoaXMgZ2VuZXJhdG9yLgotICByZXN1bHQgPSBneXAuaW5wdXQuTG9hZChidWlsZF9maWxlcywgZGVmYXVsdF92YXJpYWJsZXMsIGluY2x1ZGVzWzpdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCwgZ2VuZXJhdG9yX2lucHV0X2luZm8sIGNoZWNrLCBjaXJjdWxhcl9jaGVjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWydwYXJhbGxlbCddKQotICByZXR1cm4gW2dlbmVyYXRvcnNdICsgcmVzdWx0Ci0KLWRlZiBOYW1lVmFsdWVMaXN0VG9EaWN0KG5hbWVfdmFsdWVfbGlzdCk6Ci0gICIiIgotICBUYWtlcyBhbiBhcnJheSBvZiBzdHJpbmdzIG9mIHRoZSBmb3JtICdOQU1FPVZBTFVFJyBhbmQgY3JlYXRlcyBhIGRpY3Rpb25hcnkKLSAgb2YgdGhlIHBhaXJzLiAgSWYgYSBzdHJpbmcgaXMgc2ltcGx5IE5BTUUsIHRoZW4gdGhlIHZhbHVlIGluIHRoZSBkaWN0aW9uYXJ5Ci0gIGlzIHNldCB0byBUcnVlLiAgSWYgVkFMVUUgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLCBpdCBpcy4KLSAgIiIiCi0gIHJlc3VsdCA9IHsgfQotICBmb3IgaXRlbSBpbiBuYW1lX3ZhbHVlX2xpc3Q6Ci0gICAgdG9rZW5zID0gaXRlbS5zcGxpdCgnPScsIDEpCi0gICAgaWYgbGVuKHRva2VucykgPT0gMjoKLSAgICAgICMgSWYgd2UgY2FuIG1ha2UgaXQgYW4gaW50LCB1c2UgdGhhdCwgb3RoZXJ3aXNlLCB1c2UgdGhlIHN0cmluZy4KLSAgICAgIHRyeToKLSAgICAgICAgdG9rZW5fdmFsdWUgPSBpbnQodG9rZW5zWzFdKQotICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgIHRva2VuX3ZhbHVlID0gdG9rZW5zWzFdCi0gICAgICAjIFNldCB0aGUgdmFyaWFibGUgdG8gdGhlIHN1cHBsaWVkIHZhbHVlLgotICAgICAgcmVzdWx0W3Rva2Vuc1swXV0gPSB0b2tlbl92YWx1ZQotICAgIGVsc2U6Ci0gICAgICAjIE5vIHZhbHVlIHN1cHBsaWVkLCB0cmVhdCBpdCBhcyBhIGJvb2xlYW4gYW5kIHNldCBpdC4KLSAgICAgIHJlc3VsdFt0b2tlbnNbMF1dID0gVHJ1ZQotICByZXR1cm4gcmVzdWx0Ci0KLWRlZiBTaGxleEVudihlbnZfbmFtZSk6Ci0gIGZsYWdzID0gb3MuZW52aXJvbi5nZXQoZW52X25hbWUsIFtdKQotICBpZiBmbGFnczoKLSAgICBmbGFncyA9IHNobGV4LnNwbGl0KGZsYWdzKQotICByZXR1cm4gZmxhZ3MKLQotZGVmIEZvcm1hdE9wdChvcHQsIHZhbHVlKToKLSAgaWYgb3B0LnN0YXJ0c3dpdGgoJy0tJyk6Ci0gICAgcmV0dXJuICclcz0lcycgJSAob3B0LCB2YWx1ZSkKLSAgcmV0dXJuIG9wdCArIHZhbHVlCi0KLWRlZiBSZWdlbmVyYXRlQXBwZW5kRmxhZyhmbGFnLCB2YWx1ZXMsIHByZWRpY2F0ZSwgZW52X25hbWUsIG9wdGlvbnMpOgotICAiIiJSZWdlbmVyYXRlIGEgbGlzdCBvZiBjb21tYW5kIGxpbmUgZmxhZ3MsIGZvciBhbiBvcHRpb24gb2YgYWN0aW9uPSdhcHBlbmQnLgotCi0gIFRoZSB8ZW52X25hbWV8LCBpZiBnaXZlbiwgaXMgY2hlY2tlZCBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHVzZWQgdG8gZ2VuZXJhdGUKLSAgYW4gaW5pdGlhbCBsaXN0IG9mIG9wdGlvbnMsIHRoZW4gdGhlIG9wdGlvbnMgdGhhdCB3ZXJlIHNwZWNpZmllZCBvbiB0aGUKLSAgY29tbWFuZCBsaW5lIChnaXZlbiBpbiB8dmFsdWVzfCkgYXJlIGFwcGVuZGVkLiAgVGhpcyBtYXRjaGVzIHRoZSBoYW5kbGluZyBvZgotICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGNvbW1hbmQgbGluZSBmbGFncyB3aGVyZSBjb21tYW5kIGxpbmUgZmxhZ3Mgb3ZlcnJpZGUKLSAgdGhlIGVudmlyb25tZW50LCB3aGlsZSBub3QgcmVxdWlyaW5nIHRoZSBlbnZpcm9ubWVudCB0byBiZSBzZXQgd2hlbiB0aGUgZmxhZ3MKLSAgYXJlIHVzZWQgYWdhaW4uCi0gICIiIgotICBmbGFncyA9IFtdCi0gIGlmIG9wdGlvbnMudXNlX2Vudmlyb25tZW50IGFuZCBlbnZfbmFtZToKLSAgICBmb3IgZmxhZ192YWx1ZSBpbiBTaGxleEVudihlbnZfbmFtZSk6Ci0gICAgICB2YWx1ZSA9IEZvcm1hdE9wdChmbGFnLCBwcmVkaWNhdGUoZmxhZ192YWx1ZSkpCi0gICAgICBpZiB2YWx1ZSBpbiBmbGFnczoKLSAgICAgICAgZmxhZ3MucmVtb3ZlKHZhbHVlKQotICAgICAgZmxhZ3MuYXBwZW5kKHZhbHVlKQotICBpZiB2YWx1ZXM6Ci0gICAgZm9yIGZsYWdfdmFsdWUgaW4gdmFsdWVzOgotICAgICAgZmxhZ3MuYXBwZW5kKEZvcm1hdE9wdChmbGFnLCBwcmVkaWNhdGUoZmxhZ192YWx1ZSkpKQotICByZXR1cm4gZmxhZ3MKLQotZGVmIFJlZ2VuZXJhdGVGbGFncyhvcHRpb25zKToKLSAgIiIiR2l2ZW4gYSBwYXJzZWQgb3B0aW9ucyBvYmplY3QsIGFuZCB0YWtpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnRvCi0gIGFjY291bnQsIHJldHVybnMgYSBsaXN0IG9mIGZsYWdzIHRoYXQgc2hvdWxkIHJlZ2VuZXJhdGUgYW4gZXF1aXZhbGVudCBvcHRpb25zCi0gIG9iamVjdCAoZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLikKLQotICBBbnkgcGF0aCBvcHRpb25zIHdpbGwgYmUgbm9ybWFsaXplZCByZWxhdGl2ZSB0byBkZXB0aC4KLQotICBUaGUgZm9ybWF0IGZsYWcgaXMgbm90IGluY2x1ZGVkLCBhcyBpdCBpcyBhc3N1bWVkIHRoZSBjYWxsaW5nIGdlbmVyYXRvciB3aWxsCi0gIHNldCB0aGF0IGFzIGFwcHJvcHJpYXRlLgotICAiIiIKLSAgZGVmIEZpeFBhdGgocGF0aCk6Ci0gICAgcGF0aCA9IGd5cC5jb21tb24uRml4SWZSZWxhdGl2ZVBhdGgocGF0aCwgb3B0aW9ucy5kZXB0aCkKLSAgICBpZiBub3QgcGF0aDoKLSAgICAgIHJldHVybiBvcy5wYXRoLmN1cmRpcgotICAgIHJldHVybiBwYXRoCi0KLSAgZGVmIE5vb3AodmFsdWUpOgotICAgIHJldHVybiB2YWx1ZQotCi0gICMgV2UgYWx3YXlzIHdhbnQgdG8gaWdub3JlIHRoZSBlbnZpcm9ubWVudCB3aGVuIHJlZ2VuZXJhdGluZywgdG8gYXZvaWQKLSAgIyBkdXBsaWNhdGUgb3IgY2hhbmdlZCBmbGFncyBpbiB0aGUgZW52aXJvbm1lbnQgYXQgdGhlIHRpbWUgb2YgcmVnZW5lcmF0aW9uLgotICBmbGFncyA9IFsnLS1pZ25vcmUtZW52aXJvbm1lbnQnXQotICBmb3IgbmFtZSwgbWV0YWRhdGEgaW4gb3B0aW9ucy5fcmVnZW5lcmF0aW9uX21ldGFkYXRhLml0ZXJpdGVtcygpOgotICAgIG9wdCA9IG1ldGFkYXRhWydvcHQnXQotICAgIHZhbHVlID0gZ2V0YXR0cihvcHRpb25zLCBuYW1lKQotICAgIHZhbHVlX3ByZWRpY2F0ZSA9IG1ldGFkYXRhWyd0eXBlJ10gPT0gJ3BhdGgnIGFuZCBGaXhQYXRoIG9yIE5vb3AKLSAgICBhY3Rpb24gPSBtZXRhZGF0YVsnYWN0aW9uJ10KLSAgICBlbnZfbmFtZSA9IG1ldGFkYXRhWydlbnZfbmFtZSddCi0gICAgaWYgYWN0aW9uID09ICdhcHBlbmQnOgotICAgICAgZmxhZ3MuZXh0ZW5kKFJlZ2VuZXJhdGVBcHBlbmRGbGFnKG9wdCwgdmFsdWUsIHZhbHVlX3ByZWRpY2F0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZfbmFtZSwgb3B0aW9ucykpCi0gICAgZWxpZiBhY3Rpb24gaW4gKCdzdG9yZScsIE5vbmUpOiAgIyBOb25lIGlzIGEgc3lub255bSBmb3IgJ3N0b3JlJy4KLSAgICAgIGlmIHZhbHVlOgotICAgICAgICBmbGFncy5hcHBlbmQoRm9ybWF0T3B0KG9wdCwgdmFsdWVfcHJlZGljYXRlKHZhbHVlKSkpCi0gICAgICBlbGlmIG9wdGlvbnMudXNlX2Vudmlyb25tZW50IGFuZCBlbnZfbmFtZSBhbmQgb3MuZW52aXJvbi5nZXQoZW52X25hbWUpOgotICAgICAgICBmbGFncy5hcHBlbmQoRm9ybWF0T3B0KG9wdCwgdmFsdWVfcHJlZGljYXRlKG9zLmVudmlyb24uZ2V0KGVudl9uYW1lKSkpKQotICAgIGVsaWYgYWN0aW9uIGluICgnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScpOgotICAgICAgaWYgKChhY3Rpb24gPT0gJ3N0b3JlX3RydWUnIGFuZCB2YWx1ZSkgb3IKLSAgICAgICAgICAoYWN0aW9uID09ICdzdG9yZV9mYWxzZScgYW5kIG5vdCB2YWx1ZSkpOgotICAgICAgICBmbGFncy5hcHBlbmQob3B0KQotICAgICAgZWxpZiBvcHRpb25zLnVzZV9lbnZpcm9ubWVudCBhbmQgZW52X25hbWU6Ci0gICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgKCdXYXJuaW5nOiBlbnZpcm9ubWVudCByZWdlbmVyYXRpb24gdW5pbXBsZW1lbnRlZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgJXMgZmxhZyAlciBlbnZfbmFtZSAlcicgJSAoYWN0aW9uLCBvcHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52X25hbWUpKQotICAgIGVsc2U6Ci0gICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgnV2FybmluZzogcmVnZW5lcmF0aW9uIHVuaW1wbGVtZW50ZWQgZm9yIGFjdGlvbiAlciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZyAlcicgJSAoYWN0aW9uLCBvcHQpKQotCi0gIHJldHVybiBmbGFncwotCi1jbGFzcyBSZWdlbmVyYXRhYmxlT3B0aW9uUGFyc2VyKG9wdHBhcnNlLk9wdGlvblBhcnNlcik6Ci0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICBzZWxmLl9fcmVnZW5lcmF0YWJsZV9vcHRpb25zID0ge30KLSAgICBvcHRwYXJzZS5PcHRpb25QYXJzZXIuX19pbml0X18oc2VsZikKLQotICBkZWYgYWRkX29wdGlvbihzZWxmLCAqYXJncywgKiprdyk6Ci0gICAgIiIiQWRkIGFuIG9wdGlvbiB0byB0aGUgcGFyc2VyLgotCi0gICAgVGhpcyBhY2NlcHRzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBPcHRpb25QYXJzZXIuYWRkX29wdGlvbiwgcGx1cyB0aGUKLSAgICBmb2xsb3dpbmc6Ci0gICAgICByZWdlbmVyYXRlOiBjYW4gYmUgc2V0IHRvIEZhbHNlIHRvIHByZXZlbnQgdGhpcyBvcHRpb24gZnJvbSBiZWluZyBpbmNsdWRlZAotICAgICAgICAgICAgICAgICAgaW4gcmVnZW5lcmF0aW9uLgotICAgICAgZW52X25hbWU6IG5hbWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBhZGRpdGlvbmFsIHZhbHVlcyBmb3IgdGhpcwotICAgICAgICAgICAgICAgIG9wdGlvbiBjb21lIGZyb20uCi0gICAgICB0eXBlOiBhZGRzIHR5cGU9J3BhdGgnLCB0byB0ZWxsIHRoZSByZWdlbmVyYXRvciB0aGF0IHRoZSB2YWx1ZXMgb2YKLSAgICAgICAgICAgIHRoaXMgb3B0aW9uIG5lZWQgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBvcHRpb25zLmRlcHRoCi0gICAgIiIiCi0gICAgZW52X25hbWUgPSBrdy5wb3AoJ2Vudl9uYW1lJywgTm9uZSkKLSAgICBpZiAnZGVzdCcgaW4ga3cgYW5kIGt3LnBvcCgncmVnZW5lcmF0ZScsIFRydWUpOgotICAgICAgZGVzdCA9IGt3WydkZXN0J10KLQotICAgICAgIyBUaGUgcGF0aCB0eXBlIGlzIG5lZWRlZCBmb3IgcmVnZW5lcmF0aW5nLCBmb3Igb3B0cGFyc2Ugd2UgY2FuIGp1c3QgdHJlYXQKLSAgICAgICMgaXQgYXMgYSBzdHJpbmcuCi0gICAgICB0eXBlID0ga3cuZ2V0KCd0eXBlJykKLSAgICAgIGlmIHR5cGUgPT0gJ3BhdGgnOgotICAgICAgICBrd1sndHlwZSddID0gJ3N0cmluZycKLQotICAgICAgc2VsZi5fX3JlZ2VuZXJhdGFibGVfb3B0aW9uc1tkZXN0XSA9IHsKLSAgICAgICAgICAnYWN0aW9uJzoga3cuZ2V0KCdhY3Rpb24nKSwKLSAgICAgICAgICAndHlwZSc6IHR5cGUsCi0gICAgICAgICAgJ2Vudl9uYW1lJzogZW52X25hbWUsCi0gICAgICAgICAgJ29wdCc6IGFyZ3NbMF0sCi0gICAgICAgIH0KLQotICAgIG9wdHBhcnNlLk9wdGlvblBhcnNlci5hZGRfb3B0aW9uKHNlbGYsICphcmdzLCAqKmt3KQotCi0gIGRlZiBwYXJzZV9hcmdzKHNlbGYsICphcmdzKToKLSAgICB2YWx1ZXMsIGFyZ3MgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIucGFyc2VfYXJncyhzZWxmLCAqYXJncykKLSAgICB2YWx1ZXMuX3JlZ2VuZXJhdGlvbl9tZXRhZGF0YSA9IHNlbGYuX19yZWdlbmVyYXRhYmxlX29wdGlvbnMKLSAgICByZXR1cm4gdmFsdWVzLCBhcmdzCi0KLWRlZiBneXBfbWFpbihhcmdzKToKLSAgbXlfbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0KLSAgcGFyc2VyID0gUmVnZW5lcmF0YWJsZU9wdGlvblBhcnNlcigpCi0gIHVzYWdlID0gJ3VzYWdlOiAlcyBbb3B0aW9ucyAuLi5dIFtidWlsZF9maWxlIC4uLl0nCi0gIHBhcnNlci5zZXRfdXNhZ2UodXNhZ2UucmVwbGFjZSgnJXMnLCAnJXByb2cnKSkKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1EJywgZGVzdD0nZGVmaW5lcycsIGFjdGlvbj0nYXBwZW5kJywgbWV0YXZhcj0nVkFSPVZBTCcsCi0gICAgICAgICAgICAgICAgICAgIGVudl9uYW1lPSdHWVBfREVGSU5FUycsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9J3NldHMgdmFyaWFibGUgVkFSIHRvIHZhbHVlIFZBTCcpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctZicsICctLWZvcm1hdCcsIGRlc3Q9J2Zvcm1hdHMnLCBhY3Rpb249J2FwcGVuZCcsCi0gICAgICAgICAgICAgICAgICAgIGVudl9uYW1lPSdHWVBfR0VORVJBVE9SUycsIHJlZ2VuZXJhdGU9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9J291dHB1dCBmb3JtYXRzIHRvIGdlbmVyYXRlJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbXN2cy12ZXJzaW9uJywgZGVzdD0nbXN2c192ZXJzaW9uJywKLSAgICAgICAgICAgICAgICAgICAgcmVnZW5lcmF0ZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nRGVwcmVjYXRlZDsgdXNlIC1HIG1zdnNfdmVyc2lvbj1NU1ZTX1ZFUlNJT04gaW5zdGVhZCcpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctSScsICctLWluY2x1ZGUnLCBkZXN0PSdpbmNsdWRlcycsIGFjdGlvbj0nYXBwZW5kJywKLSAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nSU5DTFVERScsIHR5cGU9J3BhdGgnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlcyB0byBpbmNsdWRlIGluIGFsbCBsb2FkZWQgLmd5cCBmaWxlcycpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLWRlcHRoJywgZGVzdD0nZGVwdGgnLCBtZXRhdmFyPSdQQVRIJywgdHlwZT0ncGF0aCcsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9J3NldCBERVBUSCBneXAgdmFyaWFibGUgdG8gYSByZWxhdGl2ZSBwYXRoIHRvIFBBVEgnKQotICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kZWJ1ZycsIGRlc3Q9J2RlYnVnJywgbWV0YXZhcj0nREVCVUdNT0RFJywKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVtdLCBoZWxwPSd0dXJuIG9uIGEgZGVidWdnaW5nICcKLSAgICAgICAgICAgICAgICAgICAgJ21vZGUgZm9yIGRlYnVnZ2luZyBHWVAuICBTdXBwb3J0ZWQgbW9kZXMgYXJlICJ2YXJpYWJsZXMiLCAnCi0gICAgICAgICAgICAgICAgICAgICciaW5jbHVkZXMiLCAiZGVwZW5kZW5jaWVzIiwgYW5kICJnZW5lcmFsIiBvciAiYWxsIiBmb3IgJwotICAgICAgICAgICAgICAgICAgICAnYWxsIG9mIHRoZW0uJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy1TJywgJy0tc3VmZml4JywgZGVzdD0nc3VmZml4JywgZGVmYXVsdD0nJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VmZml4IHRvIGFkZCB0byBnZW5lcmF0ZWQgZmlsZXMnKQotICBwYXJzZXIuYWRkX29wdGlvbignLUcnLCBkZXN0PSdnZW5lcmF0b3JfZmxhZ3MnLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J0ZMQUc9VkFMJywgZW52X25hbWU9J0dZUF9HRU5FUkFUT1JfRkxBR1MnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXRzIGdlbmVyYXRvciBmbGFnIEZMQUcgdG8gVkFMJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tZ2VuZXJhdG9yLW91dHB1dCcsIGRlc3Q9J2dlbmVyYXRvcl9vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSdESVInLCB0eXBlPSdwYXRoJywKLSAgICAgICAgICAgICAgICAgICAgZW52X25hbWU9J0dZUF9HRU5FUkFUT1JfT1VUUFVUJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0ncHV0cyBnZW5lcmF0ZWQgYnVpbGQgZmlsZXMgdW5kZXIgRElSJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0taWdub3JlLWVudmlyb25tZW50JywgZGVzdD0ndXNlX2Vudmlyb25tZW50JywKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlZmF1bHQ9VHJ1ZSwgcmVnZW5lcmF0ZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nZG8gbm90IHJlYWQgb3B0aW9ucyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcycpCi0gIHBhcnNlci5hZGRfb3B0aW9uKCctLWNoZWNrJywgZGVzdD0nY2hlY2snLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSdjaGVjayBmb3JtYXQgb2YgZ3lwIGZpbGVzJykKLSAgcGFyc2VyLmFkZF9vcHRpb24oJy0tcGFyYWxsZWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICBlbnZfbmFtZT0nR1lQX1BBUkFMTEVMJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nVXNlIG11bHRpcHJvY2Vzc2luZyBmb3Igc3BlZWQgKGV4cGVyaW1lbnRhbCknKQotICBwYXJzZXIuYWRkX29wdGlvbignLS10b3BsZXZlbC1kaXInLCBkZXN0PSd0b3BsZXZlbF9kaXInLCBhY3Rpb249J3N0b3JlJywKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSdESVInLCB0eXBlPSdwYXRoJywKLSAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0b3J5IHRvIHVzZSBhcyB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUnKQotICBwYXJzZXIuYWRkX29wdGlvbignLS1idWlsZCcsIGRlc3Q9J2NvbmZpZ3MnLCBhY3Rpb249J2FwcGVuZCcsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9J2NvbmZpZ3VyYXRpb24gZm9yIGJ1aWxkIGFmdGVyIHByb2plY3QgZ2VuZXJhdGlvbicpCi0gICMgLS1uby1jaXJjdWxhci1jaGVjayBkaXNhYmxlcyB0aGUgY2hlY2sgZm9yIGNpcmN1bGFyIHJlbGF0aW9uc2hpcHMgYmV0d2VlbgotICAjIC5neXAgZmlsZXMuICBUaGVzZSByZWxhdGlvbnNoaXBzIHNob3VsZCBub3QgZXhpc3QsIGJ1dCB0aGV5J3ZlIG9ubHkgYmVlbgotICAjIG9ic2VydmVkIHRvIGJlIGhhcm1mdWwgd2l0aCB0aGUgWGNvZGUgZ2VuZXJhdG9yLiAgQ2hyb21pdW0ncyAuZ3lwIGZpbGVzCi0gICMgY3VycmVudGx5IGhhdmUgc29tZSBjaXJjdWxhciByZWxhdGlvbnNoaXBzIG9uIG5vbi1NYWMgcGxhdGZvcm1zLCBzbyB0aGlzCi0gICMgb3B0aW9uIGFsbG93cyB0aGUgc3RyaWN0IGJlaGF2aW9yIHRvIGJlIHVzZWQgb24gTWFjcyBhbmQgdGhlIGxlbmllbnQKLSAgIyBiZWhhdmlvciB0byBiZSB1c2VkIGVsc2V3aGVyZS4KLSAgIyBUT0RPKG1hcmspOiBSZW1vdmUgdGhpcyBvcHRpb24gd2hlbiBodHRwOi8vY3JidWcuY29tLzM1ODc4IGlzIGZpeGVkLgotICBwYXJzZXIuYWRkX29wdGlvbignLS1uby1jaXJjdWxhci1jaGVjaycsIGRlc3Q9J2NpcmN1bGFyX2NoZWNrJywKLSAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlZmF1bHQ9VHJ1ZSwgcmVnZW5lcmF0ZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgaGVscD0iZG9uJ3QgY2hlY2sgZm9yIGNpcmN1bGFyIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBmaWxlcyIpCi0KLSAgIyBXZSByZWFkIGEgZmV3IHRoaW5ncyBmcm9tIH4vLmd5cCwgc28gc2V0IHVwIGEgdmFyIGZvciB0aGF0LgotICBob21lX3ZhcnMgPSBbJ0hPTUUnXQotICBpZiBzeXMucGxhdGZvcm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICBob21lX3ZhcnMuYXBwZW5kKCdVU0VSUFJPRklMRScpCi0gIGhvbWUgPSBOb25lCi0gIGhvbWVfZG90X2d5cCA9IE5vbmUKLSAgZm9yIGhvbWVfdmFyIGluIGhvbWVfdmFyczoKLSAgICBob21lID0gb3MuZ2V0ZW52KGhvbWVfdmFyKQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKLSAgICAgIGhvbWUgPSBjeWdwYXRoLnRvX21peGVkKGhvbWUpCi0gICAgaWYgaG9tZSAhPSBOb25lOgotICAgICAgaG9tZV9kb3RfZ3lwID0gb3MucGF0aC5qb2luKGhvbWUsICcuZ3lwJykKLSAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhob21lX2RvdF9neXApOgotICAgICAgICBob21lX2RvdF9neXAgPSBOb25lCi0gICAgICBlbHNlOgotICAgICAgICBicmVhawotCi0gICMgVE9ETyh0aG9tYXN2bCk6IGFkZCBzdXBwb3J0IGZvciB+Ly5neXAvZGVmYXVsdHMKLQotICBvcHRpb25zLCBidWlsZF9maWxlc19hcmcgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQotICBidWlsZF9maWxlcyA9IGJ1aWxkX2ZpbGVzX2FyZwotCi0gIGlmIG5vdCBvcHRpb25zLmZvcm1hdHM6Ci0gICAgIyBJZiBubyBmb3JtYXQgd2FzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gY2hlY2sgdGhlIGVudiB2YXJpYWJsZS4KLSAgICBnZW5lcmF0ZV9mb3JtYXRzID0gW10KLSAgICBpZiBvcHRpb25zLnVzZV9lbnZpcm9ubWVudDoKLSAgICAgIGdlbmVyYXRlX2Zvcm1hdHMgPSBvcy5lbnZpcm9uLmdldCgnR1lQX0dFTkVSQVRPUlMnLCBbXSkKLSAgICBpZiBnZW5lcmF0ZV9mb3JtYXRzOgotICAgICAgZ2VuZXJhdGVfZm9ybWF0cyA9IHJlLnNwbGl0KCdbXHMsXScsIGdlbmVyYXRlX2Zvcm1hdHMpCi0gICAgaWYgZ2VuZXJhdGVfZm9ybWF0czoKLSAgICAgIG9wdGlvbnMuZm9ybWF0cyA9IGdlbmVyYXRlX2Zvcm1hdHMKLSAgICBlbHNlOgotICAgICAgIyBOb3RoaW5nIGluIHRoZSB2YXJpYWJsZSwgZGVmYXVsdCBiYXNlZCBvbiBwbGF0Zm9ybS4KLSAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgb3B0aW9ucy5mb3JtYXRzID0gWyd4Y29kZSddCi0gICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgotICAgICAgICBvcHRpb25zLmZvcm1hdHMgPSBbJ21zdnMnXQotICAgICAgZWxzZToKLSAgICAgICAgb3B0aW9ucy5mb3JtYXRzID0gWydtYWtlJ10KLQotICBpZiBub3Qgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0IGFuZCBvcHRpb25zLnVzZV9lbnZpcm9ubWVudDoKLSAgICBnX28gPSBvcy5lbnZpcm9uLmdldCgnR1lQX0dFTkVSQVRPUl9PVVRQVVQnKQotICAgIGlmIGdfbzoKLSAgICAgIG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dCA9IGdfbwotCi0gIGlmIG5vdCBvcHRpb25zLnBhcmFsbGVsIGFuZCBvcHRpb25zLnVzZV9lbnZpcm9ubWVudDoKLSAgICBvcHRpb25zLnBhcmFsbGVsID0gYm9vbChvcy5lbnZpcm9uLmdldCgnR1lQX1BBUkFMTEVMJykpCi0KLSAgZm9yIG1vZGUgaW4gb3B0aW9ucy5kZWJ1ZzoKLSAgICBneXAuZGVidWdbbW9kZV0gPSAxCi0KLSAgIyBEbyBhbiBleHRyYSBjaGVjayB0byBhdm9pZCB3b3JrIHdoZW4gd2UncmUgbm90IGRlYnVnZ2luZy4KLSAgaWYgREVCVUdfR0VORVJBTCBpbiBneXAuZGVidWcua2V5cygpOgotICAgIERlYnVnT3V0cHV0KERFQlVHX0dFTkVSQUwsICdydW5uaW5nIHdpdGggdGhlc2Ugb3B0aW9uczonKQotICAgIGZvciBvcHRpb24sIHZhbHVlIGluIHNvcnRlZChvcHRpb25zLl9fZGljdF9fLml0ZW1zKCkpOgotICAgICAgaWYgb3B0aW9uWzBdID09ICdfJzoKLSAgICAgICAgY29udGludWUKLSAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgICBEZWJ1Z091dHB1dChERUJVR19HRU5FUkFMLCAiICAlczogJyVzJyIgJSAob3B0aW9uLCB2YWx1ZSkpCi0gICAgICBlbHNlOgotICAgICAgICBEZWJ1Z091dHB1dChERUJVR19HRU5FUkFMLCAiICAlczogJXMiICUgKG9wdGlvbiwgc3RyKHZhbHVlKSkpCi0KLSAgaWYgbm90IGJ1aWxkX2ZpbGVzOgotICAgIGJ1aWxkX2ZpbGVzID0gRmluZEJ1aWxkRmlsZXMoKQotICBpZiBub3QgYnVpbGRfZmlsZXM6Ci0gICAgcmFpc2UgR3lwRXJyb3IoKHVzYWdlICsgJ1xuXG4lczogZXJyb3I6IG5vIGJ1aWxkX2ZpbGUnKSAlCi0gICAgICAgICAgICAgICAgICAgKG15X25hbWUsIG15X25hbWUpKQotCi0gICMgVE9ETyhtYXJrKTogQ2hyb21pdW0tc3BlY2lmaWMgaGFjayEKLSAgIyBGb3IgQ2hyb21pdW0sIHRoZSBneXAgImRlcHRoIiB2YXJpYWJsZSBzaG91bGQgYWx3YXlzIGJlIGEgcmVsYXRpdmUgcGF0aAotICAjIHRvIENocm9taXVtJ3MgdG9wLWxldmVsICJzcmMiIGRpcmVjdG9yeS4gIElmIG5vIGRlcHRoIHZhcmlhYmxlIHdhcyBzZXQKLSAgIyBvbiB0aGUgY29tbWFuZCBsaW5lLCB0cnkgdG8gZmluZCBhICJzcmMiIGRpcmVjdG9yeSBieSBsb29raW5nIGF0IHRoZQotICAjIGFic29sdXRlIHBhdGggdG8gZWFjaCBidWlsZCBmaWxlJ3MgZGlyZWN0b3J5LiAgVGhlIGZpcnN0ICJzcmMiIGNvbXBvbmVudAotICAjIGZvdW5kIHdpbGwgYmUgdHJlYXRlZCBhcyB0aG91Z2ggaXQgd2VyZSB0aGUgcGF0aCB1c2VkIGZvciAtLWRlcHRoLgotICBpZiBub3Qgb3B0aW9ucy5kZXB0aDoKLSAgICBmb3IgYnVpbGRfZmlsZSBpbiBidWlsZF9maWxlczoKLSAgICAgIGJ1aWxkX2ZpbGVfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShidWlsZF9maWxlKSkKLSAgICAgIGJ1aWxkX2ZpbGVfZGlyX2NvbXBvbmVudHMgPSBidWlsZF9maWxlX2Rpci5zcGxpdChvcy5wYXRoLnNlcCkKLSAgICAgIGNvbXBvbmVudHNfbGVuID0gbGVuKGJ1aWxkX2ZpbGVfZGlyX2NvbXBvbmVudHMpCi0gICAgICBmb3IgaW5kZXggaW4geHJhbmdlKGNvbXBvbmVudHNfbGVuIC0gMSwgLTEsIC0xKToKLSAgICAgICAgaWYgYnVpbGRfZmlsZV9kaXJfY29tcG9uZW50c1tpbmRleF0gPT0gJ3NyYyc6Ci0gICAgICAgICAgb3B0aW9ucy5kZXB0aCA9IG9zLnBhdGguc2VwLmpvaW4oYnVpbGRfZmlsZV9kaXJfY29tcG9uZW50cykKLSAgICAgICAgICBicmVhawotICAgICAgICBkZWwgYnVpbGRfZmlsZV9kaXJfY29tcG9uZW50c1tpbmRleF0KLQotICAgICAgIyBJZiB0aGUgaW5uZXIgbG9vcCBmb3VuZCBzb21ldGhpbmcsIGJyZWFrIHdpdGhvdXQgYWR2YW5jaW5nIHRvIGFub3RoZXIKLSAgICAgICMgYnVpbGQgZmlsZS4KLSAgICAgIGlmIG9wdGlvbnMuZGVwdGg6Ci0gICAgICAgIGJyZWFrCi0KLSAgICBpZiBub3Qgb3B0aW9ucy5kZXB0aDoKLSAgICAgIHJhaXNlIEd5cEVycm9yKCdDb3VsZCBub3QgYXV0b21hdGljYWxseSBsb2NhdGUgc3JjIGRpcmVjdG9yeS4gIFRoaXMgaXMnCi0gICAgICAgICAgICAgICAgICAgICAnYSB0ZW1wb3JhcnkgQ2hyb21pdW0gZmVhdHVyZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZC4gIFVzZScKLSAgICAgICAgICAgICAgICAgICAgICctLWRlcHRoIGFzIGEgd29ya2Fyb3VuZC4nKQotCi0gICMgSWYgdG9wbGV2ZWwtZGlyIGlzIG5vdCBzZXQsIHdlIGFzc3VtZSB0aGF0IGRlcHRoIGlzIHRoZSByb290IG9mIG91ciBzb3VyY2UKLSAgIyB0cmVlLgotICBpZiBub3Qgb3B0aW9ucy50b3BsZXZlbF9kaXI6Ci0gICAgb3B0aW9ucy50b3BsZXZlbF9kaXIgPSBvcHRpb25zLmRlcHRoCi0KLSAgIyAtRCBvbiB0aGUgY29tbWFuZCBsaW5lIHNldHMgdmFyaWFibGUgZGVmYXVsdHMgLSBEIGlzbid0IGp1c3QgZm9yIGRlZmluZSwKLSAgIyBpdCdzIGZvciBkZWZhdWx0LiAgUGVyaGFwcyB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZm9yY2UgKC1GPykgYQotICAjIHZhcmlhYmxlJ3MgdmFsdWUgc28gdGhhdCBpdCBjYW4ndCBiZSBvdmVycmlkZGVuIGJ5IGFueXRoaW5nIGVsc2UuCi0gIGNtZGxpbmVfZGVmYXVsdF92YXJpYWJsZXMgPSB7fQotICBkZWZpbmVzID0gW10KLSAgaWYgb3B0aW9ucy51c2VfZW52aXJvbm1lbnQ6Ci0gICAgZGVmaW5lcyArPSBTaGxleEVudignR1lQX0RFRklORVMnKQotICBpZiBvcHRpb25zLmRlZmluZXM6Ci0gICAgZGVmaW5lcyArPSBvcHRpb25zLmRlZmluZXMKLSAgY21kbGluZV9kZWZhdWx0X3ZhcmlhYmxlcyA9IE5hbWVWYWx1ZUxpc3RUb0RpY3QoZGVmaW5lcykKLSAgaWYgREVCVUdfR0VORVJBTCBpbiBneXAuZGVidWcua2V5cygpOgotICAgIERlYnVnT3V0cHV0KERFQlVHX0dFTkVSQUwsCi0gICAgICAgICAgICAgICAgImNtZGxpbmVfZGVmYXVsdF92YXJpYWJsZXM6ICVzIiAlIGNtZGxpbmVfZGVmYXVsdF92YXJpYWJsZXMpCi0KLSAgIyBTZXQgdXAgaW5jbHVkZXMuCi0gIGluY2x1ZGVzID0gW10KLQotICAjIElmIH4vLmd5cC9pbmNsdWRlLmd5cGkgZXhpc3RzLCBpdCdsbCBiZSBmb3JjaWJseSBpbmNsdWRlZCBpbnRvIGV2ZXJ5Ci0gICMgLmd5cCBmaWxlIHRoYXQncyBsb2FkZWQsIGJlZm9yZSBhbnl0aGluZyBlbHNlIGlzIGluY2x1ZGVkLgotICBpZiBob21lX2RvdF9neXAgIT0gTm9uZToKLSAgICBkZWZhdWx0X2luY2x1ZGUgPSBvcy5wYXRoLmpvaW4oaG9tZV9kb3RfZ3lwLCAnaW5jbHVkZS5neXBpJykKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZWZhdWx0X2luY2x1ZGUpOgotICAgICAgcHJpbnQgJ1VzaW5nIG92ZXJyaWRlcyBmb3VuZCBpbiAnICsgZGVmYXVsdF9pbmNsdWRlCi0gICAgICBpbmNsdWRlcy5hcHBlbmQoZGVmYXVsdF9pbmNsdWRlKQotCi0gICMgQ29tbWFuZC1saW5lIC0taW5jbHVkZSBmaWxlcyBjb21lIGFmdGVyIHRoZSBkZWZhdWx0IGluY2x1ZGUuCi0gIGlmIG9wdGlvbnMuaW5jbHVkZXM6Ci0gICAgaW5jbHVkZXMuZXh0ZW5kKG9wdGlvbnMuaW5jbHVkZXMpCi0KLSAgIyBHZW5lcmF0b3IgZmxhZ3Mgc2hvdWxkIGJlIHByZWZpeGVkIHdpdGggdGhlIHRhcmdldCBnZW5lcmF0b3Igc2luY2UgdGhleQotICAjIGFyZSBnbG9iYWwgYWNyb3NzIGFsbCBnZW5lcmF0b3IgcnVucy4KLSAgZ2VuX2ZsYWdzID0gW10KLSAgaWYgb3B0aW9ucy51c2VfZW52aXJvbm1lbnQ6Ci0gICAgZ2VuX2ZsYWdzICs9IFNobGV4RW52KCdHWVBfR0VORVJBVE9SX0ZMQUdTJykKLSAgaWYgb3B0aW9ucy5nZW5lcmF0b3JfZmxhZ3M6Ci0gICAgZ2VuX2ZsYWdzICs9IG9wdGlvbnMuZ2VuZXJhdG9yX2ZsYWdzCi0gIGdlbmVyYXRvcl9mbGFncyA9IE5hbWVWYWx1ZUxpc3RUb0RpY3QoZ2VuX2ZsYWdzKQotICBpZiBERUJVR19HRU5FUkFMIGluIGd5cC5kZWJ1Zy5rZXlzKCk6Ci0gICAgRGVidWdPdXRwdXQoREVCVUdfR0VORVJBTCwgImdlbmVyYXRvcl9mbGFnczogJXMiICUgZ2VuZXJhdG9yX2ZsYWdzKQotCi0gICMgVE9ETzogUmVtb3ZlIHRoaXMgYW5kIHRoZSBvcHRpb24gYWZ0ZXIgd2UndmUgZ290dGVuIGZvbGtzIHRvIG1vdmUgdG8gdGhlCi0gICMgZ2VuZXJhdG9yIGZsYWcuCi0gIGlmIG9wdGlvbnMubXN2c192ZXJzaW9uOgotICAgIHByaW50ID4+c3lzLnN0ZGVyciwgXAotICAgICAgJ0RFUFJFQ0FURUQ6IFVzZSBnZW5lcmF0b3IgZmxhZyAoLUcgbXN2c192ZXJzaW9uPScgKyBcCi0gICAgICBvcHRpb25zLm1zdnNfdmVyc2lvbiArICcpIGluc3RlYWQgb2YgLS1tc3ZzLXZlcnNpb249JyArIFwKLSAgICAgIG9wdGlvbnMubXN2c192ZXJzaW9uCi0gICAgZ2VuZXJhdG9yX2ZsYWdzWydtc3ZzX3ZlcnNpb24nXSA9IG9wdGlvbnMubXN2c192ZXJzaW9uCi0KLSAgIyBHZW5lcmF0ZSBhbGwgcmVxdWVzdGVkIGZvcm1hdHMgKHVzZSBhIHNldCBpbiBjYXNlIHdlIGdvdCBvbmUgZm9ybWF0IHJlcXVlc3QKLSAgIyB0d2ljZSkKLSAgZm9yIGZvcm1hdCBpbiBzZXQob3B0aW9ucy5mb3JtYXRzKToKLSAgICBwYXJhbXMgPSB7J29wdGlvbnMnOiBvcHRpb25zLAotICAgICAgICAgICAgICAnYnVpbGRfZmlsZXMnOiBidWlsZF9maWxlcywKLSAgICAgICAgICAgICAgJ2dlbmVyYXRvcl9mbGFncyc6IGdlbmVyYXRvcl9mbGFncywKLSAgICAgICAgICAgICAgJ2N3ZCc6IG9zLmdldGN3ZCgpLAotICAgICAgICAgICAgICAnYnVpbGRfZmlsZXNfYXJnJzogYnVpbGRfZmlsZXNfYXJnLAotICAgICAgICAgICAgICAnZ3lwX2JpbmFyeSc6IHN5cy5hcmd2WzBdLAotICAgICAgICAgICAgICAnaG9tZV9kb3RfZ3lwJzogaG9tZV9kb3RfZ3lwLAotICAgICAgICAgICAgICAncGFyYWxsZWwnOiBvcHRpb25zLnBhcmFsbGVsfQotCi0gICAgIyBTdGFydCB3aXRoIHRoZSBkZWZhdWx0IHZhcmlhYmxlcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgW2dlbmVyYXRvcnMsIGZsYXRfbGlzdCwgdGFyZ2V0cywgZGF0YV0gPSBMb2FkKGJ1aWxkX2ZpbGVzLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kbGluZV9kZWZhdWx0X3ZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcywgb3B0aW9ucy5kZXB0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIG9wdGlvbnMuY2hlY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jaXJjdWxhcl9jaGVjaykKLQotICAgICMgVE9ETyhtYXJrKTogUGFzcyB8ZGF0YXwgZm9yIG5vdyBiZWNhdXNlIHRoZSBnZW5lcmF0b3IgbmVlZHMgYSBsaXN0IG9mCi0gICAgIyBidWlsZCBmaWxlcyB0aGF0IGNhbWUgaW4uICBJbiB0aGUgZnV0dXJlLCBtYXliZSBpdCBzaG91bGQganVzdCBhY2NlcHQKLSAgICAjIGEgbGlzdCwgYW5kIG5vdCB0aGUgd2hvbGUgZGF0YSBkaWN0LgotICAgICMgTk9URTogZmxhdF9saXN0IGlzIHRoZSBmbGF0dGVuZWQgZGVwZW5kZW5jeSBncmFwaCBzcGVjaWZ5aW5nIHRoZSBvcmRlcgotICAgICMgdGhhdCB0YXJnZXRzIG1heSBiZSBidWlsdC4gIEJ1aWxkIHN5c3RlbXMgdGhhdCBvcGVyYXRlIHNlcmlhbGx5IG9yIHRoYXQKLSAgICAjIG5lZWQgdG8gaGF2ZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBiZWZvcmUgZGVwZW5kZW50cyByZWZlcmVuY2UgdGhlbSBzaG91bGQKLSAgICAjIGdlbmVyYXRlIHRhcmdldHMgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBpbiBmbGF0X2xpc3QuCi0gICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0b3JzOgotICAgICAgZ2VuZXJhdG9yLkdlbmVyYXRlT3V0cHV0KGZsYXRfbGlzdCwgdGFyZ2V0cywgZGF0YSwgcGFyYW1zKQotCi0gICAgICBpZiBvcHRpb25zLmNvbmZpZ3M6Ci0gICAgICAgIHZhbGlkX2NvbmZpZ3MgPSB0YXJnZXRzW2ZsYXRfbGlzdFswXV1bJ2NvbmZpZ3VyYXRpb25zJ10ua2V5cygpCi0gICAgICAgIGZvciBjb25mIGluIG9wdGlvbnMuY29uZmlnczoKLSAgICAgICAgICBpZiBjb25mIG5vdCBpbiB2YWxpZF9jb25maWdzOgotICAgICAgICAgICAgcmFpc2UgR3lwRXJyb3IoJ0ludmFsaWQgY29uZmlnIHNwZWNpZmllZCB2aWEgLS1idWlsZDogJXMnICUgY29uZikKLSAgICAgICAgZ2VuZXJhdG9yLlBlcmZvcm1CdWlsZChkYXRhLCBvcHRpb25zLmNvbmZpZ3MsIHBhcmFtcykKLQotICAjIERvbmUKLSAgcmV0dXJuIDAKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgdHJ5OgotICAgIHJldHVybiBneXBfbWFpbihhcmdzKQotICBleGNlcHQgR3lwRXJyb3IsIGU6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiZ3lwOiAlc1xuIiAlIGUpCi0gICAgcmV0dXJuIDEKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9jb21tb24ucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2NvbW1vbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRiMmRiNS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2NvbW1vbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGVycm5vCi1pbXBvcnQgZmlsZWNtcAotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc3lzCi0KLQotIyBBIG1pbmltYWwgbWVtb2l6aW5nIGRlY29yYXRvci4gSXQnbGwgYmxvdyB1cCBpZiB0aGUgYXJncyBhcmVuJ3QgaW1tdXRhYmxlLAotIyBhbW9uZyBvdGhlciAicHJvYmxlbXMiLgotY2xhc3MgbWVtb2l6ZShvYmplY3QpOgotICBkZWYgX19pbml0X18oc2VsZiwgZnVuYyk6Ci0gICAgc2VsZi5mdW5jID0gZnVuYwotICAgIHNlbGYuY2FjaGUgPSB7fQotICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgotICAgIHRyeToKLSAgICAgIHJldHVybiBzZWxmLmNhY2hlW2FyZ3NdCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKCphcmdzKQotICAgICAgc2VsZi5jYWNoZVthcmdzXSA9IHJlc3VsdAotICAgICAgcmV0dXJuIHJlc3VsdAotCi0KLWNsYXNzIEd5cEVycm9yKEV4Y2VwdGlvbik6Ci0gICIiIkVycm9yIGNsYXNzIHJlcHJlc2VudGluZyBhbiBlcnJvciwgd2hpY2ggaXMgdG8gYmUgcHJlc2VudGVkCi0gIHRvIHRoZSB1c2VyLiAgVGhlIG1haW4gZW50cnkgcG9pbnQgd2lsbCBjYXRjaCBhbmQgZGlzcGxheSB0aGlzLgotICAiIiIKLSAgcGFzcwotCi0KLWRlZiBFeGNlcHRpb25BcHBlbmQoZSwgbXNnKToKLSAgIiIiQXBwZW5kIGEgbWVzc2FnZSB0byB0aGUgZ2l2ZW4gZXhjZXB0aW9uJ3MgbWVzc2FnZS4iIiIKLSAgaWYgbm90IGUuYXJnczoKLSAgICBlLmFyZ3MgPSAobXNnLCkKLSAgZWxpZiBsZW4oZS5hcmdzKSA9PSAxOgotICAgIGUuYXJncyA9IChzdHIoZS5hcmdzWzBdKSArICcgJyArIG1zZywpCi0gIGVsc2U6Ci0gICAgZS5hcmdzID0gKHN0cihlLmFyZ3NbMF0pICsgJyAnICsgbXNnLCkgKyBlLmFyZ3NbMTpdCi0KLQotZGVmIFBhcnNlUXVhbGlmaWVkVGFyZ2V0KHRhcmdldCk6Ci0gICMgU3BsaXRzIGEgcXVhbGlmaWVkIHRhcmdldCBpbnRvIGEgYnVpbGQgZmlsZSwgdGFyZ2V0IG5hbWUgYW5kIHRvb2xzZXQuCi0KLSAgIyBOT1RFOiByc3BsaXQgaXMgdXNlZCB0byBkaXNhbWJpZ3VhdGUgdGhlIFdpbmRvd3MgZHJpdmUgbGV0dGVyIHNlcGFyYXRvci4KLSAgdGFyZ2V0X3NwbGl0ID0gdGFyZ2V0LnJzcGxpdCgnOicsIDEpCi0gIGlmIGxlbih0YXJnZXRfc3BsaXQpID09IDI6Ci0gICAgW2J1aWxkX2ZpbGUsIHRhcmdldF0gPSB0YXJnZXRfc3BsaXQKLSAgZWxzZToKLSAgICBidWlsZF9maWxlID0gTm9uZQotCi0gIHRhcmdldF9zcGxpdCA9IHRhcmdldC5yc3BsaXQoJyMnLCAxKQotICBpZiBsZW4odGFyZ2V0X3NwbGl0KSA9PSAyOgotICAgIFt0YXJnZXQsIHRvb2xzZXRdID0gdGFyZ2V0X3NwbGl0Ci0gIGVsc2U6Ci0gICAgdG9vbHNldCA9IE5vbmUKLQotICByZXR1cm4gW2J1aWxkX2ZpbGUsIHRhcmdldCwgdG9vbHNldF0KLQotCi1kZWYgUmVzb2x2ZVRhcmdldChidWlsZF9maWxlLCB0YXJnZXQsIHRvb2xzZXQpOgotICAjIFRoaXMgZnVuY3Rpb24gcmVzb2x2ZXMgYSB0YXJnZXQgaW50byBhIGNhbm9uaWNhbCBmb3JtOgotICAjIC0gYSBmdWxseSBkZWZpbmVkIGJ1aWxkIGZpbGUsIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB0aGUgY3VycmVudAotICAjIGRpcmVjdG9yeQotICAjIC0gYSB0YXJnZXQgbmFtZQotICAjIC0gYSB0b29sc2V0Ci0gICMKLSAgIyBidWlsZF9maWxlIGlzIHRoZSBmaWxlIHJlbGF0aXZlIHRvIHdoaWNoICd0YXJnZXQnIGlzIGRlZmluZWQuCi0gICMgdGFyZ2V0IGlzIHRoZSBxdWFsaWZpZWQgdGFyZ2V0LgotICAjIHRvb2xzZXQgaXMgdGhlIGRlZmF1bHQgdG9vbHNldCBmb3IgdGhhdCB0YXJnZXQuCi0gIFtwYXJzZWRfYnVpbGRfZmlsZSwgdGFyZ2V0LCBwYXJzZWRfdG9vbHNldF0gPSBQYXJzZVF1YWxpZmllZFRhcmdldCh0YXJnZXQpCi0KLSAgaWYgcGFyc2VkX2J1aWxkX2ZpbGU6Ci0gICAgaWYgYnVpbGRfZmlsZToKLSAgICAgICMgSWYgYSByZWxhdGl2ZSBwYXRoLCBwYXJzZWRfYnVpbGRfZmlsZSBpcyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5Ci0gICAgICAjIGNvbnRhaW5pbmcgYnVpbGRfZmlsZS4gIElmIGJ1aWxkX2ZpbGUgaXMgbm90IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKLSAgICAgICMgcGFyc2VkX2J1aWxkX2ZpbGUgaXMgbm90IGEgdXNhYmxlIHBhdGggYXMtaXMuICBSZXNvbHZlIGl0IGJ5Ci0gICAgICAjIGludGVycHJldGluZyBpdCBhcyByZWxhdGl2ZSB0byBidWlsZF9maWxlLiAgSWYgcGFyc2VkX2J1aWxkX2ZpbGUgaXMKLSAgICAgICMgYWJzb2x1dGUsIGl0IGlzIHVzYWJsZSBhcyBhIHBhdGggcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksCi0gICAgICAjIGFuZCBvcy5wYXRoLmpvaW4gd2lsbCByZXR1cm4gaXQgYXMtaXMuCi0gICAgICBidWlsZF9maWxlID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZF9idWlsZF9maWxlKSkKLSAgICAgICMgRnVydGhlciAodG8gaGFuZGxlIGNhc2VzIGxpa2UgLi4vY3dkKSwgbWFrZSBpdCByZWxhdGl2ZSB0byBjd2QpCi0gICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhidWlsZF9maWxlKToKLSAgICAgICAgYnVpbGRfZmlsZSA9IFJlbGF0aXZlUGF0aChidWlsZF9maWxlLCAnLicpCi0gICAgZWxzZToKLSAgICAgIGJ1aWxkX2ZpbGUgPSBwYXJzZWRfYnVpbGRfZmlsZQotCi0gIGlmIHBhcnNlZF90b29sc2V0OgotICAgIHRvb2xzZXQgPSBwYXJzZWRfdG9vbHNldAotCi0gIHJldHVybiBbYnVpbGRfZmlsZSwgdGFyZ2V0LCB0b29sc2V0XQotCi0KLWRlZiBCdWlsZEZpbGUoZnVsbHlfcXVhbGlmaWVkX3RhcmdldCk6Ci0gICMgRXh0cmFjdHMgdGhlIGJ1aWxkIGZpbGUgZnJvbSB0aGUgZnVsbHkgcXVhbGlmaWVkIHRhcmdldC4KLSAgcmV0dXJuIFBhcnNlUXVhbGlmaWVkVGFyZ2V0KGZ1bGx5X3F1YWxpZmllZF90YXJnZXQpWzBdCi0KLQotZGVmIEdldEVudmlyb25GYWxsYmFjayh2YXJfbGlzdCwgZGVmYXVsdCk6Ci0gICIiIkxvb2sgdXAgYSBrZXkgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGZhbGxiYWNrIHRvIHNlY29uZGFyeSBrZXlzCi0gIGFuZCBmaW5hbGx5IGZhbGxpbmcgYmFjayB0byBhIGRlZmF1bHQgdmFsdWUuIiIiCi0gIGZvciB2YXIgaW4gdmFyX2xpc3Q6Ci0gICAgaWYgdmFyIGluIG9zLmVudmlyb246Ci0gICAgICByZXR1cm4gb3MuZW52aXJvblt2YXJdCi0gIHJldHVybiBkZWZhdWx0Ci0KLQotZGVmIFF1YWxpZmllZFRhcmdldChidWlsZF9maWxlLCB0YXJnZXQsIHRvb2xzZXQpOgotICAjICJRdWFsaWZpZWQiIG1lYW5zIHRoZSBmaWxlIHRoYXQgYSB0YXJnZXQgd2FzIGRlZmluZWQgaW4gYW5kIHRoZSB0YXJnZXQKLSAgIyBuYW1lLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbiwgc3VmZml4ZWQgYnkgYSAjIGFuZCB0aGUgdG9vbHNldCBuYW1lOgotICAjIC9wYXRoL3RvL2ZpbGUuZ3lwOnRhcmdldF9uYW1lI3Rvb2xzZXQKLSAgZnVsbHlfcXVhbGlmaWVkID0gYnVpbGRfZmlsZSArICc6JyArIHRhcmdldAotICBpZiB0b29sc2V0OgotICAgIGZ1bGx5X3F1YWxpZmllZCA9IGZ1bGx5X3F1YWxpZmllZCArICcjJyArIHRvb2xzZXQKLSAgcmV0dXJuIGZ1bGx5X3F1YWxpZmllZAotCi0KLUBtZW1vaXplCi1kZWYgUmVsYXRpdmVQYXRoKHBhdGgsIHJlbGF0aXZlX3RvKToKLSAgIyBBc3N1bWluZyBib3RoIHxwYXRofCBhbmQgfHJlbGF0aXZlX3RvfCBhcmUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKLSAgIyBkaXJlY3RvcnksIHJldHVybnMgYSByZWxhdGl2ZSBwYXRoIHRoYXQgaWRlbnRpZmllcyBwYXRoIHJlbGF0aXZlIHRvCi0gICMgcmVsYXRpdmVfdG8uCi0KLSAgIyBDb252ZXJ0IHRvIGFic29sdXRlIChhbmQgdGhlcmVmb3JlIG5vcm1hbGl6ZWQgcGF0aHMpLgotICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCi0gIHJlbGF0aXZlX3RvID0gb3MucGF0aC5hYnNwYXRoKHJlbGF0aXZlX3RvKQotCi0gICMgU3BsaXQgdGhlIHBhdGhzIGludG8gY29tcG9uZW50cy4KLSAgcGF0aF9zcGxpdCA9IHBhdGguc3BsaXQob3MucGF0aC5zZXApCi0gIHJlbGF0aXZlX3RvX3NwbGl0ID0gcmVsYXRpdmVfdG8uc3BsaXQob3MucGF0aC5zZXApCi0KLSAgIyBEZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIHByZWZpeCB0aGUgdHdvIHBhdGhzIHNoYXJlLgotICBwcmVmaXhfbGVuID0gbGVuKG9zLnBhdGguY29tbW9ucHJlZml4KFtwYXRoX3NwbGl0LCByZWxhdGl2ZV90b19zcGxpdF0pKQotCi0gICMgUHV0IGVub3VnaCAiLi4iIGNvbXBvbmVudHMgdG8gYmFjayB1cCBvdXQgb2YgcmVsYXRpdmVfdG8gdG8gdGhlIGNvbW1vbgotICAjIHByZWZpeCwgYW5kIHRoZW4gYXBwZW5kIHRoZSBwYXJ0IG9mIHBhdGhfc3BsaXQgYWZ0ZXIgdGhlIGNvbW1vbiBwcmVmaXguCi0gIHJlbGF0aXZlX3NwbGl0ID0gW29zLnBhdGgucGFyZGlyXSAqIChsZW4ocmVsYXRpdmVfdG9fc3BsaXQpIC0gcHJlZml4X2xlbikgKyBcCi0gICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdFtwcmVmaXhfbGVuOl0KLQotICBpZiBsZW4ocmVsYXRpdmVfc3BsaXQpID09IDA6Ci0gICAgIyBUaGUgcGF0aHMgd2VyZSB0aGUgc2FtZS4KLSAgICByZXR1cm4gJycKLQotICAjIFR1cm4gaXQgYmFjayBpbnRvIGEgc3RyaW5nIGFuZCB3ZSdyZSBkb25lLgotICByZXR1cm4gb3MucGF0aC5qb2luKCpyZWxhdGl2ZV9zcGxpdCkKLQotCi1kZWYgRml4SWZSZWxhdGl2ZVBhdGgocGF0aCwgcmVsYXRpdmVfdG8pOgotICAjIExpa2UgUmVsYXRpdmVQYXRoIGJ1dCByZXR1cm5zIHxwYXRofCB1bmNoYW5nZWQgaWYgaXQgaXMgYWJzb2x1dGUuCi0gIGlmIG9zLnBhdGguaXNhYnMocGF0aCk6Ci0gICAgcmV0dXJuIHBhdGgKLSAgcmV0dXJuIFJlbGF0aXZlUGF0aChwYXRoLCByZWxhdGl2ZV90bykKLQotCi1kZWYgVW5yZWxhdGl2ZVBhdGgocGF0aCwgcmVsYXRpdmVfdG8pOgotICAjIEFzc3VtaW5nIHRoYXQgfHJlbGF0aXZlX3RvfCBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFuZCB8cGF0aHwKLSAgIyBpcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGRpcm5hbWUgb2YgfHJlbGF0aXZlX3RvfCwgcmV0dXJucyBhIHBhdGggdGhhdAotICAjIGlkZW50aWZpZXMgfHBhdGh8IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgcmVsX2RpciA9IG9zLnBhdGguZGlybmFtZShyZWxhdGl2ZV90bykKLSAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHJlbF9kaXIsIHBhdGgpKQotCi0KLSMgcmUgb2JqZWN0cyB1c2VkIGJ5IEVuY29kZVBPU0lYU2hlbGxBcmd1bWVudC4gIFNlZSBJRUVFIDEwMDMuMSBYQ1UuMi4yIGF0Ci0jIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS91dGlsaXRpZXMveGN1X2NoYXAwMi5odG1sI3RhZ18wMl8wMgotIyBhbmQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHZhcmlvdXMgc2hlbGxzLgotCi0jIF9xdW90ZSBpcyBhIHBhdHRlcm4gdGhhdCBzaG91bGQgbWF0Y2ggYW55IGFyZ3VtZW50IHRoYXQgbmVlZHMgdG8gYmUgcXVvdGVkCi0jIHdpdGggZG91YmxlLXF1b3RlcyBieSBFbmNvZGVQT1NJWFNoZWxsQXJndW1lbnQuICBJdCBtYXRjaGVzIHRoZSBmb2xsb3dpbmcKLSMgY2hhcmFjdGVycyBhcHBlYXJpbmcgYW55d2hlcmUgaW4gYW4gYXJndW1lbnQ6Ci0jICAgXHQsIFxuLCBzcGFjZSAgcGFyYW1ldGVyIHNlcGFyYXRvcnMKLSMgICAjICAgICAgICAgICAgICBjb21tZW50cwotIyAgICQgICAgICAgICAgICAgIGV4cGFuc2lvbnMgKHF1b3RlZCB0byBhbHdheXMgZXhwYW5kIHdpdGhpbiBvbmUgYXJndW1lbnQpCi0jICAgJSAgICAgICAgICAgICAgY2FsbGVkIG91dCBieSBJRUVFIDEwMDMuMSBYQ1UuMi4yCi0jICAgJiAgICAgICAgICAgICAgam9iIGNvbnRyb2wKLSMgICAnICAgICAgICAgICAgICBxdW90aW5nCi0jICAgKCwgKSAgICAgICAgICAgc3Vic2hlbGwgZXhlY3V0aW9uCi0jICAgKiwgPywgWyAgICAgICAgcGF0aG5hbWUgZXhwYW5zaW9uCi0jICAgOyAgICAgICAgICAgICAgY29tbWFuZCBkZWxpbWl0ZXIKLSMgICA8LCA+LCB8ICAgICAgICByZWRpcmVjdGlvbgotIyAgID0gICAgICAgICAgICAgIGFzc2lnbm1lbnQKLSMgICB7LCB9ICAgICAgICAgICBicmFjZSBleHBhbnNpb24gKGJhc2gpCi0jICAgfiAgICAgICAgICAgICAgdGlsZGUgZXhwYW5zaW9uCi0jIEl0IGFsc28gbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nLCBiZWNhdXNlICIiIChvciAnJykgaXMgdGhlIG9ubHkgd2F5IHRvCi0jIHJlcHJlc2VudCBhbiBlbXB0eSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudCB0byBhIFBPU0lYIHNoZWxsLgotIwotIyBUaGlzIGRvZXMgbm90IG1hdGNoIHRoZSBjaGFyYWN0ZXJzIGluIF9lc2NhcGUsIGJlY2F1c2UgdGhvc2UgbmVlZCB0byBiZQotIyBiYWNrc2xhc2gtZXNjYXBlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcHBlYXIgaW4gYSBkb3VibGUtcXVvdGVkCi0jIHN0cmluZy4KLV9xdW90ZSA9IHJlLmNvbXBpbGUoJ1tcdFxuICMkJSZcJygpKjs8PT4/W3t8fX5dfF4kJykKLQotIyBfZXNjYXBlIGlzIGEgcGF0dGVybiB0aGF0IHNob3VsZCBtYXRjaCBhbnkgY2hhcmFjdGVyIHRoYXQgbmVlZHMgdG8gYmUKLSMgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJndW1lbnQgbWF0Y2hlZCB0aGUgX3F1b3RlCi0jIHBhdHRlcm4uICBfZXNjYXBlIGlzIHVzZWQgd2l0aCByZS5zdWIgdG8gYmFja3NsYXNoIGFueXRoaW5nIGluIF9lc2NhcGUncwotIyBmaXJzdCBtYXRjaCBncm91cCwgaGVuY2UgdGhlIChwYXJlbnRoZXNlcykgaW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KLSMKLSMgX2VzY2FwZSBtYXRjaGVzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcHBlYXJpbmcgYW55d2hlcmUgaW4gYW4gYXJndW1lbnQ6Ci0jICAgIiAgdG8gcHJldmVudCBQT1NJWCBzaGVsbHMgZnJvbSBpbnRlcnByZXRpbmcgdGhpcyBjaGFyYWN0ZXIgZm9yIHF1b3RpbmcKLSMgICBcICB0byBwcmV2ZW50IFBPU0lYIHNoZWxscyBmcm9tIGludGVycHJldGluZyB0aGlzIGNoYXJhY3RlciBmb3IgZXNjYXBpbmcKLSMgICBgICB0byBwcmV2ZW50IFBPU0lYIHNoZWxscyBmcm9tIGludGVycHJldGluZyB0aGlzIGNoYXJhY3RlciBmb3IgY29tbWFuZAotIyAgICAgIHN1YnN0aXR1dGlvbgotIyBNaXNzaW5nIGZyb20gdGhpcyBsaXN0IGlzICQsIGJlY2F1c2UgdGhlIGRlc2lyZWQgYmVoYXZpb3Igb2YKLSMgRW5jb2RlUE9TSVhTaGVsbEFyZ3VtZW50IGlzIHRvIHBlcm1pdCBwYXJhbWV0ZXIgKHZhcmlhYmxlKSBleHBhbnNpb24uCi0jCi0jIEFsc28gbWlzc2luZyBmcm9tIHRoaXMgbGlzdCBpcyAhLCB3aGljaCBiYXNoIHdpbGwgaW50ZXJwcmV0IGFzIHRoZSBoaXN0b3J5Ci0jIGV4cGFuc2lvbiBjaGFyYWN0ZXIgd2hlbiBoaXN0b3J5IGlzIGVuYWJsZWQuICBiYXNoIGRvZXMgbm90IGVuYWJsZSBoaXN0b3J5Ci0jIGJ5IGRlZmF1bHQgaW4gbm9uLWludGVyYWN0aXZlIHNoZWxscywgc28gdGhpcyBpcyBub3QgdGhvdWdodCB0byBiZSBhIHByb2JsZW0uCi0jICEgd2FzIG9taXR0ZWQgZnJvbSB0aGlzIGxpc3QgYmVjYXVzZSBiYXNoIGludGVycHJldHMgIlwhIiBhcyBhIGxpdGVyYWwgc3RyaW5nCi0jIGluY2x1ZGluZyB0aGUgYmFja3NsYXNoIGNoYXJhY3RlciAoYXZvaWRpbmcgaGlzdG9yeSBleHBhbnNpb24gYnV0IHJldGFpbmluZwotIyB0aGUgYmFja3NsYXNoKSwgd2hpY2ggd291bGQgbm90IGJlIGNvcnJlY3QgZm9yIGFyZ3VtZW50IGVuY29kaW5nLiAgSGFuZGxpbmcKLSMgdGhpcyBjYXNlIHByb3Blcmx5IHdvdWxkIGFsc28gYmUgcHJvYmxlbWF0aWMgYmVjYXVzZSBiYXNoIGFsbG93cyB0aGUgaGlzdG9yeQotIyBjaGFyYWN0ZXIgdG8gYmUgY2hhbmdlZCB3aXRoIHRoZSBoaXN0Y2hhcnMgc2hlbGwgdmFyaWFibGUuICBGb3J0dW5hdGVseSwKLSMgYXMgaGlzdG9yeSBpcyBub3QgZW5hYmxlZCBpbiBub24taW50ZXJhY3RpdmUgc2hlbGxzIGFuZAotIyBFbmNvZGVQT1NJWFNoZWxsQXJndW1lbnQgaXMgb25seSBleHBlY3RlZCB0byBlbmNvZGUgZm9yIG5vbi1pbnRlcmFjdGl2ZQotIyBzaGVsbHMsIHRoZXJlIGlzIG5vIHJvb20gZm9yIGVycm9yIGhlcmUgYnkgaWdub3JpbmcgIS4KLV9lc2NhcGUgPSByZS5jb21waWxlKHInKFsiXFxgXSknKQotCi1kZWYgRW5jb2RlUE9TSVhTaGVsbEFyZ3VtZW50KGFyZ3VtZW50KToKLSAgIiIiRW5jb2RlcyB8YXJndW1lbnR8IHN1aXRhYmx5IGZvciBjb25zdW1wdGlvbiBieSBQT1NJWCBzaGVsbHMuCi0KLSAgYXJndW1lbnQgbWF5IGJlIHF1b3RlZCBhbmQgZXNjYXBlZCBhcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgUE9TSVggc2hlbGxzCi0gIHRyZWF0IHRoZSByZXR1cm5lZCB2YWx1ZSBhcyBhIGxpdGVyYWwgcmVwcmVzZW50aW5nIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8KLSAgdGhpcyBmdW5jdGlvbi4gIFBhcmFtZXRlciAodmFyaWFibGUpIGV4cGFuc2lvbnMgYmVnaW5uaW5nIHdpdGggJCBhcmUgYWxsb3dlZAotICB0byByZW1haW4gaW50YWN0IHdpdGhvdXQgZXNjYXBpbmcgdGhlICQsIHRvIGFsbG93IHRoZSBhcmd1bWVudCB0byBjb250YWluCi0gIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzIHRvIGJlIGV4cGFuZGVkIGJ5IHRoZSBzaGVsbC4KLSAgIiIiCi0KLSAgaWYgbm90IGlzaW5zdGFuY2UoYXJndW1lbnQsIHN0cik6Ci0gICAgYXJndW1lbnQgPSBzdHIoYXJndW1lbnQpCi0KLSAgaWYgX3F1b3RlLnNlYXJjaChhcmd1bWVudCk6Ci0gICAgcXVvdGUgPSAnIicKLSAgZWxzZToKLSAgICBxdW90ZSA9ICcnCi0KLSAgZW5jb2RlZCA9IHF1b3RlICsgcmUuc3ViKF9lc2NhcGUsIHInXFxcMScsIGFyZ3VtZW50KSArIHF1b3RlCi0KLSAgcmV0dXJuIGVuY29kZWQKLQotCi1kZWYgRW5jb2RlUE9TSVhTaGVsbExpc3QobGlzdCk6Ci0gICIiIkVuY29kZXMgfGxpc3R8IHN1aXRhYmx5IGZvciBjb25zdW1wdGlvbiBieSBQT1NJWCBzaGVsbHMuCi0KLSAgUmV0dXJucyBFbmNvZGVQT1NJWFNoZWxsQXJndW1lbnQgZm9yIGVhY2ggaXRlbSBpbiBsaXN0LCBhbmQgam9pbnMgdGhlbQotICB0b2dldGhlciB1c2luZyB0aGUgc3BhY2UgY2hhcmFjdGVyIGFzIGFuIGFyZ3VtZW50IHNlcGFyYXRvci4KLSAgIiIiCi0KLSAgZW5jb2RlZF9hcmd1bWVudHMgPSBbXQotICBmb3IgYXJndW1lbnQgaW4gbGlzdDoKLSAgICBlbmNvZGVkX2FyZ3VtZW50cy5hcHBlbmQoRW5jb2RlUE9TSVhTaGVsbEFyZ3VtZW50KGFyZ3VtZW50KSkKLSAgcmV0dXJuICcgJy5qb2luKGVuY29kZWRfYXJndW1lbnRzKQotCi0KLWRlZiBEZWVwRGVwZW5kZW5jeVRhcmdldHModGFyZ2V0X2RpY3RzLCByb290cyk6Ci0gICIiIlJldHVybnMgdGhlIHJlY3Vyc2l2ZSBsaXN0IG9mIHRhcmdldCBkZXBlbmRlbmNpZXMuIiIiCi0gIGRlcGVuZGVuY2llcyA9IHNldCgpCi0gIHBlbmRpbmcgPSBzZXQocm9vdHMpCi0gIHdoaWxlIHBlbmRpbmc6Ci0gICAgIyBQbHVjayBvdXQgb25lLgotICAgIHIgPSBwZW5kaW5nLnBvcCgpCi0gICAgIyBTa2lwIGlmIHZpc2l0ZWQgYWxyZWFkeS4KLSAgICBpZiByIGluIGRlcGVuZGVuY2llczoKLSAgICAgIGNvbnRpbnVlCi0gICAgIyBBZGQgaXQuCi0gICAgZGVwZW5kZW5jaWVzLmFkZChyKQotICAgICMgQWRkIGl0cyBjaGlsZHJlbi4KLSAgICBzcGVjID0gdGFyZ2V0X2RpY3RzW3JdCi0gICAgcGVuZGluZy51cGRhdGUoc2V0KHNwZWMuZ2V0KCdkZXBlbmRlbmNpZXMnLCBbXSkpKQotICAgIHBlbmRpbmcudXBkYXRlKHNldChzcGVjLmdldCgnZGVwZW5kZW5jaWVzX29yaWdpbmFsJywgW10pKSkKLSAgcmV0dXJuIGxpc3QoZGVwZW5kZW5jaWVzIC0gc2V0KHJvb3RzKSkKLQotCi1kZWYgQnVpbGRGaWxlVGFyZ2V0cyh0YXJnZXRfbGlzdCwgYnVpbGRfZmlsZSk6Ci0gICIiIkZyb20gYSB0YXJnZXRfbGlzdCwgcmV0dXJucyB0aGUgc3Vic2V0IGZyb20gdGhlIHNwZWNpZmllZCBidWlsZF9maWxlLgotICAiIiIKLSAgcmV0dXJuIFtwIGZvciBwIGluIHRhcmdldF9saXN0IGlmIEJ1aWxkRmlsZShwKSA9PSBidWlsZF9maWxlXQotCi0KLWRlZiBBbGxUYXJnZXRzKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGJ1aWxkX2ZpbGUpOgotICAiIiJSZXR1cm5zIGFsbCB0YXJnZXRzIChkaXJlY3QgYW5kIGRlcGVuZGVuY2llcykgZm9yIHRoZSBzcGVjaWZpZWQgYnVpbGRfZmlsZS4KLSAgIiIiCi0gIGJmdGFyZ2V0cyA9IEJ1aWxkRmlsZVRhcmdldHModGFyZ2V0X2xpc3QsIGJ1aWxkX2ZpbGUpCi0gIGRlcHRhcmdldHMgPSBEZWVwRGVwZW5kZW5jeVRhcmdldHModGFyZ2V0X2RpY3RzLCBiZnRhcmdldHMpCi0gIHJldHVybiBiZnRhcmdldHMgKyBkZXB0YXJnZXRzCi0KLQotZGVmIFdyaXRlT25EaWZmKGZpbGVuYW1lKToKLSAgIiIiV3JpdGUgdG8gYSBmaWxlIG9ubHkgaWYgdGhlIG5ldyBjb250ZW50cyBkaWZmZXIuCi0KLSAgQXJndW1lbnRzOgotICAgIGZpbGVuYW1lOiBuYW1lIG9mIHRoZSBmaWxlIHRvIHBvdGVudGlhbGx5IHdyaXRlIHRvLgotICBSZXR1cm5zOgotICAgIEEgZmlsZSBsaWtlIG9iamVjdCB3aGljaCB3aWxsIHdyaXRlIHRvIHRlbXBvcmFyeSBmaWxlIGFuZCBvbmx5IG92ZXJ3cml0ZQotICAgIHRoZSB0YXJnZXQgaWYgaXQgZGlmZmVycyAob24gY2xvc2UpLgotICAiIiIKLQotICBjbGFzcyBXcml0ZXI6Ci0gICAgIiIiV3JhcHBlciBhcm91bmQgZmlsZSB3aGljaCBvbmx5IGNvdmVycyB0aGUgdGFyZ2V0IGlmIGl0IGRpZmZlcnMuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgIyBQaWNrIHRlbXBvcmFyeSBmaWxlLgotICAgICAgdG1wX2ZkLCBzZWxmLnRtcF9wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgKLSAgICAgICAgICBzdWZmaXg9Jy50bXAnLAotICAgICAgICAgIHByZWZpeD1vcy5wYXRoLnNwbGl0KGZpbGVuYW1lKVsxXSArICcuZ3lwLicsCi0gICAgICAgICAgZGlyPW9zLnBhdGguc3BsaXQoZmlsZW5hbWUpWzBdKQotICAgICAgdHJ5OgotICAgICAgICBzZWxmLnRtcF9maWxlID0gb3MuZmRvcGVuKHRtcF9mZCwgJ3diJykKLSAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICMgRG9uJ3QgbGVhdmUgdHVyZHMgYmVoaW5kLgotICAgICAgICBvcy51bmxpbmsoc2VsZi50bXBfcGF0aCkKLSAgICAgICAgcmFpc2UKLQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRybmFtZSk6Ci0gICAgICAjIERlbGVnYXRlIGV2ZXJ5dGhpbmcgZWxzZSB0byBzZWxmLnRtcF9maWxlCi0gICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnRtcF9maWxlLCBhdHRybmFtZSkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgIHRyeToKLSAgICAgICAgIyBDbG9zZSB0bXAgZmlsZS4KLSAgICAgICAgc2VsZi50bXBfZmlsZS5jbG9zZSgpCi0gICAgICAgICMgRGV0ZXJtaW5lIGlmIGRpZmZlcmVudC4KLSAgICAgICAgc2FtZSA9IEZhbHNlCi0gICAgICAgIHRyeToKLSAgICAgICAgICBzYW1lID0gZmlsZWNtcC5jbXAoc2VsZi50bXBfcGF0aCwgZmlsZW5hbWUsIEZhbHNlKQotICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKLSAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgaWYgc2FtZToKLSAgICAgICAgICAjIFRoZSBuZXcgZmlsZSBpcyBpZGVudGljYWwgdG8gdGhlIG9sZCBvbmUsIGp1c3QgZ2V0IHJpZCBvZiB0aGUgbmV3Ci0gICAgICAgICAgIyBvbmUuCi0gICAgICAgICAgb3MudW5saW5rKHNlbGYudG1wX3BhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIyBUaGUgbmV3IGZpbGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUsIG9yIHRoZXJlIGlzIG5vIG9sZCBvbmUuCi0gICAgICAgICAgIyBSZW5hbWUgdGhlIG5ldyBmaWxlIHRvIHRoZSBwZXJtYW5lbnQgbmFtZS4KLSAgICAgICAgICAjCi0gICAgICAgICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIHVzZXMgYW4gb3Zlcmx5IHJlc3RyaWN0aXZlIG1vZGUsIHJlc3VsdGluZyBpbiBhCi0gICAgICAgICAgIyBmaWxlIHRoYXQgY2FuIG9ubHkgYmUgcmVhZCBieSB0aGUgb3duZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVtYXNrLgotICAgICAgICAgICMgVGhlcmUncyBubyByZWFzb24gdG8gbm90IHJlc3BlY3QgdGhlIHVtYXNrIGhlcmUsIHdoaWNoIG1lYW5zIHRoYXQKLSAgICAgICAgICAjIGFuIGV4dHJhIGhvb3AgaXMgcmVxdWlyZWQgdG8gZmV0Y2ggaXQgYW5kIHJlc2V0IHRoZSBuZXcgZmlsZSdzIG1vZGUuCi0gICAgICAgICAgIwotICAgICAgICAgICMgTm8gd2F5IHRvIGdldCB0aGUgdW1hc2sgd2l0aG91dCBzZXR0aW5nIGEgbmV3IG9uZT8gIFNldCBhIHNhZmUgb25lCi0gICAgICAgICAgIyBhbmQgdGhlbiBzZXQgaXQgYmFjayB0byB0aGUgb2xkIHZhbHVlLgotICAgICAgICAgIHVtYXNrID0gb3MudW1hc2soMDc3KQotICAgICAgICAgIG9zLnVtYXNrKHVtYXNrKQotICAgICAgICAgIG9zLmNobW9kKHNlbGYudG1wX3BhdGgsIDA2NjYgJiB+dW1hc2spCi0gICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKLSAgICAgICAgICAgICMgTk9URTogb24gd2luZG93cyAoYnV0IG5vdCBjeWd3aW4pIHJlbmFtZSB3aWxsIG5vdCByZXBsYWNlIGFuCi0gICAgICAgICAgICAjIGV4aXN0aW5nIGZpbGUsIHNvIGl0IG11c3QgYmUgcHJlY2VkZWQgd2l0aCBhIHJlbW92ZS4gU2FkbHkgdGhlcmUKLSAgICAgICAgICAgICMgaXMgbm8gd2F5IHRvIG1ha2UgdGhlIHN3aXRjaCBhdG9taWMuCi0gICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCi0gICAgICAgICAgb3MucmVuYW1lKHNlbGYudG1wX3BhdGgsIGZpbGVuYW1lKQotICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgIyBEb24ndCBsZWF2ZSB0dXJkcyBiZWhpbmQuCi0gICAgICAgIG9zLnVubGluayhzZWxmLnRtcF9wYXRoKQotICAgICAgICByYWlzZQotCi0gIHJldHVybiBXcml0ZXIoKQotCi0KLWRlZiBFbnN1cmVEaXJFeGlzdHMocGF0aCk6Ci0gICIiIk1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGZvciB8cGF0aHwgZXhpc3RzLiIiIgotICB0cnk6Ci0gICAgb3MubWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKHBhdGgpKQotICBleGNlcHQgT1NFcnJvcjoKLSAgICBwYXNzCi0KLQotZGVmIEdldEZsYXZvcihwYXJhbXMpOgotICAiIiJSZXR1cm5zIHxwYXJhbXMuZmxhdm9yfCBpZiBpdCdzIHNldCwgdGhlIHN5c3RlbSdzIGRlZmF1bHQgZmxhdm9yIGVsc2UuIiIiCi0gIGZsYXZvcnMgPSB7Ci0gICAgJ2N5Z3dpbic6ICd3aW4nLAotICAgICd3aW4zMic6ICd3aW4nLAotICAgICdkYXJ3aW4nOiAnbWFjJywKLSAgfQotCi0gIGlmICdmbGF2b3InIGluIHBhcmFtczoKLSAgICByZXR1cm4gcGFyYW1zWydmbGF2b3InXQotICBpZiBzeXMucGxhdGZvcm0gaW4gZmxhdm9yczoKLSAgICByZXR1cm4gZmxhdm9yc1tzeXMucGxhdGZvcm1dCi0gIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdzdW5vcycpOgotICAgIHJldHVybiAnc29sYXJpcycKLSAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2ZyZWVic2QnKToKLSAgICByZXR1cm4gJ2ZyZWVic2QnCi0KLSAgcmV0dXJuICdsaW51eCcKLQotZGVmIENvcHlUb29sRmlsZShwcmVmaXgsIG91dF9wYXRoKToKLSAgIyBTbHVycCBpbnB1dCBmaWxlLgotICBzb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbigKLSAgICAgIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSwgJyVzX3Rvb2wucHknICUgcHJlZml4KQotICB3aXRoIG9wZW4oc291cmNlX3BhdGgpIGFzIHNvdXJjZV9maWxlOgotICAgIHNvdXJjZSA9IHNvdXJjZV9maWxlLnJlYWRsaW5lcygpCi0KLSAgIyBBZGQgaGVhZGVyIGFuZCB3cml0ZSBpdCBvdXQuCi0gIHRvb2xfcGF0aCA9IG9zLnBhdGguam9pbihvdXRfcGF0aCwgJ2d5cC0lcy10b29sJyAlIHByZWZpeCkKLSAgd2l0aCBvcGVuKHRvb2xfcGF0aCwgJ3cnKSBhcyB0b29sX2ZpbGU6Ci0gICAgdG9vbF9maWxlLndyaXRlKAotICAgICAgICAnJy5qb2luKFtzb3VyY2VbMF0sICcjIEdlbmVyYXRlZCBieSBneXAuIERvIG5vdCBlZGl0LlxuJ10gKyBzb3VyY2VbMTpdKSkKLQotICAjIE1ha2UgZmlsZSBleGVjdXRhYmxlLgotICBvcy5jaG1vZCh0b29sX3BhdGgsIDA3NTUpCi0KLQotZGVmIENvcHlUb29sKGZsYXZvciwgb3V0X3BhdGgpOgotICAiIiJGaW5kcyAobWFjfHN1bnx3aW58d2lpdSlfdG9vbC5neXAgaW4gdGhlIGd5cCBkaXJlY3RvcnkgYW5kIGNvcGllcyBpdAotICB0byB8b3V0X3BhdGh8LiIiIgotCi0gICMgd2luX3Rvb2wgY29udGFpbnMgc29tZSB1c2VmdWwgaGVscGVycy4KLSAgaWYgc3lzLnBsYXRmb3JtIGluIFsnY3lnd2luJywgJ3dpbjMyJ106Ci0gICAgQ29weVRvb2xGaWxlKCd3aW4nLCBvdXRfcGF0aCkKLQotICBwcmVmaXggPSB7ICdzb2xhcmlzJzogJ3N1bicsICdtYWMnOiAnbWFjJywgJ3dpbic6ICd3aW4nLCAnd2lpdSc6ICd3aWl1J30uZ2V0KGZsYXZvciwgTm9uZSkKLSAgaWYgcHJlZml4OgotICAgIENvcHlUb29sRmlsZShwcmVmaXgsIG91dF9wYXRoKQotCi0KLSMgRnJvbSBBbGV4IE1hcnRlbGxpLAotIyBodHRwOi8vYXNwbi5hY3RpdmVzdGF0ZS5jb20vQVNQTi9Db29rYm9vay9QeXRob24vUmVjaXBlLzUyNTYwCi0jIEFTUE46IFB5dGhvbiBDb29rYm9vazogUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlCi0jIEZpcnN0IGNvbW1lbnQsIGRhdGVkIDIwMDEvMTAvMTMuCi0jIChBbHNvIGluIHRoZSBwcmludGVkIFB5dGhvbiBDb29rYm9vay4pCi0KLWRlZiB1bmlxdWVyKHNlcSwgaWRmdW49Tm9uZSk6Ci0gICAgaWYgaWRmdW4gaXMgTm9uZToKLSAgICAgICAgaWRmdW4gPSBsYW1iZGEgeDogeAotICAgIHNlZW4gPSB7fQotICAgIHJlc3VsdCA9IFtdCi0gICAgZm9yIGl0ZW0gaW4gc2VxOgotICAgICAgICBtYXJrZXIgPSBpZGZ1bihpdGVtKQotICAgICAgICBpZiBtYXJrZXIgaW4gc2VlbjogY29udGludWUKLSAgICAgICAgc2VlblttYXJrZXJdID0gMQotICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0pCi0gICAgcmV0dXJuIHJlc3VsdAotCi0KLWNsYXNzIEN5Y2xlRXJyb3IoRXhjZXB0aW9uKToKLSAgIiIiQW4gZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIHVuZXhwZWN0ZWQgY3ljbGUgaXMgZGV0ZWN0ZWQuIiIiCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBub2Rlcyk6Ci0gICAgc2VsZi5ub2RlcyA9IG5vZGVzCi0gIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgIHJldHVybiAnQ3ljbGVFcnJvcjogY3ljbGUgaW52b2x2aW5nOiAnICsgc3RyKHNlbGYubm9kZXMpCi0KLQotZGVmIFRvcG9sb2dpY2FsbHlTb3J0ZWQoZ3JhcGgsIGdldF9lZGdlcyk6Ci0gICIiIlRvcG9sb2dpY2FsbHkgc29ydCBiYXNlZCBvbiBhIHVzZXIgcHJvdmlkZWQgZWRnZSBkZWZpbml0aW9uLgotCi0gIEFyZ3M6Ci0gICAgZ3JhcGg6IEEgbGlzdCBvZiBub2RlIG5hbWVzLgotICAgIGdldF9lZGdlczogQSBmdW5jdGlvbiBtYXBwaW5nIGZyb20gbm9kZSBuYW1lIHRvIGEgaGFzaGFibGUgY29sbGVjdGlvbgotICAgICAgICAgICAgICAgb2Ygbm9kZSBuYW1lcyB3aGljaCB0aGlzIG5vZGUgaGFzIG91dGdvaW5nIGVkZ2VzIHRvLgotICBSZXR1cm5zOgotICAgIEEgbGlzdCBjb250YWluaW5nIGFsbCBvZiB0aGUgbm9kZSBpbiBncmFwaCBpbiB0b3BvbG9naWNhbCBvcmRlci4KLSAgICBJdCBpcyBhc3N1bWVkIHRoYXQgY2FsbGluZyBnZXRfZWRnZXMgb25jZSBmb3IgZWFjaCBub2RlIGFuZCBjYWNoaW5nIGlzCi0gICAgY2hlYXBlciB0aGFuIHJlcGVhdGVkbHkgY2FsbGluZyBnZXRfZWRnZXMuCi0gIFJhaXNlczoKLSAgICBDeWNsZUVycm9yIGluIHRoZSBldmVudCBvZiBhIGN5Y2xlLgotICBFeGFtcGxlOgotICAgIGdyYXBoID0geydhJzogJyQoYikgJChjKScsICdiJzogJ2hpJywgJ2MnOiAnJChiKSd9Ci0gICAgZGVmIEdldEVkZ2VzKG5vZGUpOgotICAgICAgcmV0dXJuIHJlLmZpbmRhbGwocidcJFwoKFteKSldXCknLCBncmFwaFtub2RlXSkKLSAgICBwcmludCBUb3BvbG9naWNhbGx5U29ydGVkKGdyYXBoLmtleXMoKSwgR2V0RWRnZXMpCi0gICAgPT0+Ci0gICAgWydhJywgJ2MnLCBiJ10KLSAgIiIiCi0gIGdldF9lZGdlcyA9IG1lbW9pemUoZ2V0X2VkZ2VzKQotICB2aXNpdGVkID0gc2V0KCkKLSAgdmlzaXRpbmcgPSBzZXQoKQotICBvcmRlcmVkX25vZGVzID0gW10KLSAgZGVmIFZpc2l0KG5vZGUpOgotICAgIGlmIG5vZGUgaW4gdmlzaXRpbmc6Ci0gICAgICByYWlzZSBDeWNsZUVycm9yKHZpc2l0aW5nKQotICAgIGlmIG5vZGUgaW4gdmlzaXRlZDoKLSAgICAgIHJldHVybgotICAgIHZpc2l0ZWQuYWRkKG5vZGUpCi0gICAgdmlzaXRpbmcuYWRkKG5vZGUpCi0gICAgZm9yIG5laWdoYm9yIGluIGdldF9lZGdlcyhub2RlKToKLSAgICAgIFZpc2l0KG5laWdoYm9yKQotICAgIHZpc2l0aW5nLnJlbW92ZShub2RlKQotICAgIG9yZGVyZWRfbm9kZXMuaW5zZXJ0KDAsIG5vZGUpCi0gIGZvciBub2RlIGluIHNvcnRlZChncmFwaCk6Ci0gICAgVmlzaXQobm9kZSkKLSAgcmV0dXJuIG9yZGVyZWRfbm9kZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvY29tbW9uX3Rlc3QucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2NvbW1vbl90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYWMyOTY5Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvY29tbW9uX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJVbml0IHRlc3RzIGZvciB0aGUgY29tbW9uLnB5IGZpbGUuIiIiCi0KLWltcG9ydCBneXAuY29tbW9uCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKLQotCi1jbGFzcyBUZXN0VG9wb2xvZ2ljYWxseVNvcnRlZCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gIGRlZiB0ZXN0X1ZhbGlkKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBzb3J0aW5nIHdvcmtzIG9uIGEgdmFsaWQgZ3JhcGggd2l0aCBvbmUgcG9zc2libGUgb3JkZXIuIiIiCi0gICAgZ3JhcGggPSB7Ci0gICAgICAgICdhJzogWydiJywgJ2MnXSwKLSAgICAgICAgJ2InOiBbXSwKLSAgICAgICAgJ2MnOiBbJ2QnXSwKLSAgICAgICAgJ2QnOiBbJ2InXSwKLSAgICAgICAgfQotICAgIGRlZiBHZXRFZGdlKG5vZGUpOgotICAgICAgcmV0dXJuIHR1cGxlKGdyYXBoW25vZGVdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBneXAuY29tbW9uLlRvcG9sb2dpY2FsbHlTb3J0ZWQoZ3JhcGgua2V5cygpLCBHZXRFZGdlKSwKLSAgICAgIFsnYScsICdjJywgJ2QnLCAnYiddKQotCi0gIGRlZiB0ZXN0X0N5Y2xlKHNlbGYpOgotICAgICIiIlRlc3QgdGhhdCBhbiBleGNlcHRpb24gaXMgdGhyb3duIG9uIGEgY3ljbGljIGdyYXBoLiIiIgotICAgIGdyYXBoID0gewotICAgICAgICAnYSc6IFsnYiddLAotICAgICAgICAnYic6IFsnYyddLAotICAgICAgICAnYyc6IFsnZCddLAotICAgICAgICAnZCc6IFsnYSddLAotICAgICAgICB9Ci0gICAgZGVmIEdldEVkZ2Uobm9kZSk6Ci0gICAgICByZXR1cm4gdHVwbGUoZ3JhcGhbbm9kZV0pCi0gICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICBneXAuY29tbW9uLkN5Y2xlRXJyb3IsIGd5cC5jb21tb24uVG9wb2xvZ2ljYWxseVNvcnRlZCwKLSAgICAgIGdyYXBoLmtleXMoKSwgR2V0RWRnZSkKLQotCi1jbGFzcyBUZXN0R2V0Rmxhdm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgIiIiVGVzdCB0aGF0IGd5cC5jb21tb24uR2V0Rmxhdm9yIHdvcmtzIGFzIGludGVuZGVkIiIiCi0gIG9yaWdpbmFsX3BsYXRmb3JtID0gJycKLQotICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgc2VsZi5vcmlnaW5hbF9wbGF0Zm9ybSA9IHN5cy5wbGF0Zm9ybQotCi0gIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICBzeXMucGxhdGZvcm0gPSBzZWxmLm9yaWdpbmFsX3BsYXRmb3JtCi0KLSAgZGVmIGFzc2VydEZsYXZvcihzZWxmLCBleHBlY3RlZCwgYXJndW1lbnQsIHBhcmFtKToKLSAgICBzeXMucGxhdGZvcm0gPSBhcmd1bWVudAotICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGd5cC5jb21tb24uR2V0Rmxhdm9yKHBhcmFtKSkKLQotICBkZWYgdGVzdF9wbGF0Zm9ybV9kZWZhdWx0KHNlbGYpOgotICAgIHNlbGYuYXNzZXJ0Rmxhdm9yKCdmcmVlYnNkJywgJ2ZyZWVic2Q5JyAsIHt9KQotICAgIHNlbGYuYXNzZXJ0Rmxhdm9yKCdmcmVlYnNkJywgJ2ZyZWVic2QxMCcsIHt9KQotICAgIHNlbGYuYXNzZXJ0Rmxhdm9yKCdzb2xhcmlzJywgJ3N1bm9zNScgICAsIHt9KTsKLSAgICBzZWxmLmFzc2VydEZsYXZvcignc29sYXJpcycsICdzdW5vcycgICAgLCB7fSk7Ci0gICAgc2VsZi5hc3NlcnRGbGF2b3IoJ2xpbnV4JyAgLCAnbGludXgyJyAgICwge30pOwotICAgIHNlbGYuYXNzZXJ0Rmxhdm9yKCdsaW51eCcgICwgJ2xpbnV4MycgICAsIHt9KTsKLQotICBkZWYgdGVzdF9wYXJhbShzZWxmKToKLSAgICBzZWxmLmFzc2VydEZsYXZvcignZm9vYmFyJywgJ2xpbnV4MicgLCB7J2ZsYXZvcic6ICdmb29iYXInfSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZWFzeV94bWwucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2Vhc3lfeG1sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjk0OWI2Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZWFzeV94bWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotCi0KLWRlZiBYbWxUb1N0cmluZyhjb250ZW50LCBlbmNvZGluZz0ndXRmLTgnLCBwcmV0dHk9RmFsc2UpOgotICAiIiIgV3JpdGVzIHRoZSBYTUwgY29udGVudCB0byBkaXNrLCB0b3VjaGluZyB0aGUgZmlsZSBvbmx5IGlmIGl0IGhhcyBjaGFuZ2VkLgotCi0gIFZpc3VhbCBTdHVkaW8gZmlsZXMgaGF2ZSBhIGxvdCBvZiBwcmUtZGVmaW5lZCBzdHJ1Y3R1cmVzLiAgVGhpcyBmdW5jdGlvbiBtYWtlcwotICBpdCBlYXN5IHRvIHJlcHJlc2VudCB0aGVzZSBzdHJ1Y3R1cmVzIGFzIFB5dGhvbiBkYXRhIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YKLSAgaGF2aW5nIHRvIGNyZWF0ZSBhIGxvdCBvZiBmdW5jdGlvbiBjYWxscy4KLQotICBFYWNoIFhNTCBlbGVtZW50IG9mIHRoZSBjb250ZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBjb21wb3NlZCBvZjoKLSAgMS4gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQsIGEgc3RyaW5nLAotICAyLiBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudCwgYSBkaWN0aW9uYXJ5IChvcHRpb25hbCksIGFuZAotICAzKy4gVGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQsIGlmIGFueS4gIFN0cmluZ3MgYXJlIHNpbXBsZSB0ZXh0IG5vZGVzIGFuZAotICAgICAgbGlzdHMgYXJlIGNoaWxkIGVsZW1lbnRzLgotCi0gIEV4YW1wbGUgMToKLSAgICAgIDx0ZXN0Lz4KLSAgYmVjb21lcwotICAgICAgWyd0ZXN0J10KLQotICBFeGFtcGxlIDI6Ci0gICAgICA8bXllbGVtZW50IGE9J3ZhbHVlMScgYj0ndmFsdWUyJz4KLSAgICAgICAgIDxjaGlsZHR5cGU+VGhpcyBpczwvY2hpbGR0eXBlPgotICAgICAgICAgPGNoaWxkdHlwZT5pdCE8L2NoaWxkdHlwZT4KLSAgICAgIDwvbXllbGVtZW50PgotCi0gIGJlY29tZXMKLSAgICAgIFsnbXllbGVtZW50JywgeydhJzondmFsdWUxJywgJ2InOid2YWx1ZTInfSwKLSAgICAgICAgIFsnY2hpbGR0eXBlJywgJ1RoaXMgaXMnXSwKLSAgICAgICAgIFsnY2hpbGR0eXBlJywgJ2l0ISddLAotICAgICAgXQotCi0gIEFyZ3M6Ci0gICAgY29udGVudDogIFRoZSBzdHJ1Y3R1cmVkIGNvbnRlbnQgdG8gYmUgY29udmVydGVkLgotICAgIGVuY29kaW5nOiBUaGUgZW5jb2RpbmcgdG8gcmVwb3J0IG9uIHRoZSBmaXJzdCBYTUwgbGluZS4KLSAgICBwcmV0dHk6IFRydWUgaWYgd2Ugd2FudCBwcmV0dHkgcHJpbnRpbmcgd2l0aCBpbmRlbnRzIGFuZCBuZXcgbGluZXMuCi0KLSAgUmV0dXJuczoKLSAgICBUaGUgWE1MIGNvbnRlbnQgYXMgYSBzdHJpbmcuCi0gICIiIgotICAjIFdlIGNyZWF0ZSBhIGh1Z2UgbGlzdCBvZiBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZSBmaWxlLgotICB4bWxfcGFydHMgPSBbJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiVzIj8+JyAlIGVuY29kaW5nXQotICBpZiBwcmV0dHk6Ci0gICAgeG1sX3BhcnRzLmFwcGVuZCgnXG4nKQotICBfQ29uc3RydWN0Q29udGVudExpc3QoeG1sX3BhcnRzLCBjb250ZW50LCBwcmV0dHkpCi0KLSAgIyBDb252ZXJ0IGl0IHRvIGEgc3RyaW5nCi0gIHJldHVybiAnJy5qb2luKHhtbF9wYXJ0cykKLQotCi1kZWYgX0NvbnN0cnVjdENvbnRlbnRMaXN0KHhtbF9wYXJ0cywgc3BlY2lmaWNhdGlvbiwgcHJldHR5LCBsZXZlbD0wKToKLSAgIiIiIEFwcGVuZHMgdGhlIFhNTCBwYXJ0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uLgotCi0gIEFyZ3M6Ci0gICAgeG1sX3BhcnRzOiBBIGxpc3Qgb2YgWE1MIHBhcnRzIHRvIGJlIGFwcGVuZGVkIHRvLgotICAgIHNwZWNpZmljYXRpb246ICBUaGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZWxlbWVudC4gIFNlZSBFYXN5WG1sIGRvY3MuCi0gICAgcHJldHR5OiBUcnVlIGlmIHdlIHdhbnQgcHJldHR5IHByaW50aW5nIHdpdGggaW5kZW50cyBhbmQgbmV3IGxpbmVzLgotICAgIGxldmVsOiBJbmRlbnRhdGlvbiBsZXZlbC4KLSAgIiIiCi0gICMgVGhlIGZpcnN0IGl0ZW0gaW4gYSBzcGVjaWZpY2F0aW9uIGlzIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50LgotICBpZiBwcmV0dHk6Ci0gICAgaW5kZW50YXRpb24gPSAnICAnICogbGV2ZWwKLSAgICBuZXdfbGluZSA9ICdcbicKLSAgZWxzZToKLSAgICBpbmRlbnRhdGlvbiA9ICcnCi0gICAgbmV3X2xpbmUgPSAnJwotICBuYW1lID0gc3BlY2lmaWNhdGlvblswXQotICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIpOgotICAgIHJhaXNlIEV4Y2VwdGlvbignVGhlIGZpcnN0IGl0ZW0gb2YgYW4gRWFzeVhtbCBzcGVjaWZpY2F0aW9uIHNob3VsZCBiZSAnCi0gICAgICAgICAgICAgICAgICAgICdhIHN0cmluZy4gIFNwZWNpZmljYXRpb24gd2FzICcgKyBzdHIoc3BlY2lmaWNhdGlvbikpCi0gIHhtbF9wYXJ0cy5hcHBlbmQoaW5kZW50YXRpb24gKyAnPCcgKyBuYW1lKQotCi0gICMgT3B0aW9uYWxseSBpbiBzZWNvbmQgcG9zaXRpb24gaXMgYSBkaWN0aW9uYXJ5IG9mIHRoZSBhdHRyaWJ1dGVzLgotICByZXN0ID0gc3BlY2lmaWNhdGlvblsxOl0KLSAgaWYgcmVzdCBhbmQgaXNpbnN0YW5jZShyZXN0WzBdLCBkaWN0KToKLSAgICBmb3IgYXQsIHZhbCBpbiBzb3J0ZWQocmVzdFswXS5pdGVyaXRlbXMoKSk6Ci0gICAgICB4bWxfcGFydHMuYXBwZW5kKCcgJXM9IiVzIicgJSAoYXQsIF9YbWxFc2NhcGUodmFsLCBhdHRyPVRydWUpKSkKLSAgICByZXN0ID0gcmVzdFsxOl0KLSAgaWYgcmVzdDoKLSAgICB4bWxfcGFydHMuYXBwZW5kKCc+JykKLSAgICBhbGxfc3RyaW5ncyA9IHJlZHVjZShsYW1iZGEgeCwgeTogeCBhbmQgaXNpbnN0YW5jZSh5LCBzdHIpLCByZXN0LCBUcnVlKQotICAgIG11bHRpX2xpbmUgPSBub3QgYWxsX3N0cmluZ3MKLSAgICBpZiBtdWx0aV9saW5lIGFuZCBuZXdfbGluZToKLSAgICAgIHhtbF9wYXJ0cy5hcHBlbmQobmV3X2xpbmUpCi0gICAgZm9yIGNoaWxkX3NwZWMgaW4gcmVzdDoKLSAgICAgICMgSWYgaXQncyBhIHN0cmluZywgYXBwZW5kIGEgdGV4dCBub2RlLgotICAgICAgIyBPdGhlcndpc2UgcmVjdXJzZSBvdmVyIHRoYXQgY2hpbGQgZGVmaW5pdGlvbgotICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZF9zcGVjLCBzdHIpOgotICAgICAgIHhtbF9wYXJ0cy5hcHBlbmQoX1htbEVzY2FwZShjaGlsZF9zcGVjKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIF9Db25zdHJ1Y3RDb250ZW50TGlzdCh4bWxfcGFydHMsIGNoaWxkX3NwZWMsIHByZXR0eSwgbGV2ZWwgKyAxKQotICAgIGlmIG11bHRpX2xpbmUgYW5kIGluZGVudGF0aW9uOgotICAgICAgeG1sX3BhcnRzLmFwcGVuZChpbmRlbnRhdGlvbikKLSAgICB4bWxfcGFydHMuYXBwZW5kKCc8LyVzPiVzJyAlIChuYW1lLCBuZXdfbGluZSkpCi0gIGVsc2U6Ci0gICAgeG1sX3BhcnRzLmFwcGVuZCgnLz4lcycgJSBuZXdfbGluZSkKLQotCi1kZWYgV3JpdGVYbWxJZkNoYW5nZWQoY29udGVudCwgcGF0aCwgZW5jb2Rpbmc9J3V0Zi04JywgcHJldHR5PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgIHdpbjMyPUZhbHNlKToKLSAgIiIiIFdyaXRlcyB0aGUgWE1MIGNvbnRlbnQgdG8gZGlzaywgdG91Y2hpbmcgdGhlIGZpbGUgb25seSBpZiBpdCBoYXMgY2hhbmdlZC4KLQotICBBcmdzOgotICAgIGNvbnRlbnQ6ICBUaGUgc3RydWN0dXJlZCBjb250ZW50IHRvIGJlIHdyaXR0ZW4uCi0gICAgcGF0aDogTG9jYXRpb24gb2YgdGhlIGZpbGUuCi0gICAgZW5jb2Rpbmc6IFRoZSBlbmNvZGluZyB0byByZXBvcnQgb24gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIFhNTCBmaWxlLgotICAgIHByZXR0eTogVHJ1ZSBpZiB3ZSB3YW50IHByZXR0eSBwcmludGluZyB3aXRoIGluZGVudHMgYW5kIG5ldyBsaW5lcy4KLSAgIiIiCi0gIHhtbF9zdHJpbmcgPSBYbWxUb1N0cmluZyhjb250ZW50LCBlbmNvZGluZywgcHJldHR5KQotICBpZiB3aW4zMiBhbmQgb3MubGluZXNlcCAhPSAnXHJcbic6Ci0gICAgeG1sX3N0cmluZyA9IHhtbF9zdHJpbmcucmVwbGFjZSgnXG4nLCAnXHJcbicpCi0KLSAgIyBHZXQgdGhlIG9sZCBjb250ZW50Ci0gIHRyeToKLSAgICBmID0gb3BlbihwYXRoLCAncicpCi0gICAgZXhpc3RpbmcgPSBmLnJlYWQoKQotICAgIGYuY2xvc2UoKQotICBleGNlcHQ6Ci0gICAgZXhpc3RpbmcgPSBOb25lCi0KLSAgIyBJdCBoYXMgY2hhbmdlZCwgd3JpdGUgaXQKLSAgaWYgZXhpc3RpbmcgIT0geG1sX3N0cmluZzoKLSAgICBmID0gb3BlbihwYXRoLCAndycpCi0gICAgZi53cml0ZSh4bWxfc3RyaW5nKQotICAgIGYuY2xvc2UoKQotCi0KLV94bWxfZXNjYXBlX21hcCA9IHsKLSAgICAnIic6ICcmcXVvdDsnLAotICAgICInIjogJyZhcG9zOycsCi0gICAgJzwnOiAnJmx0OycsCi0gICAgJz4nOiAnJmd0OycsCi0gICAgJyYnOiAnJmFtcDsnLAotICAgICdcbic6ICcmI3hBOycsCi0gICAgJ1xyJzogJyYjeEQ7JywKLX0KLQotCi1feG1sX2VzY2FwZV9yZSA9IHJlLmNvbXBpbGUoCi0gICAgIiglcykiICUgInwiLmpvaW4obWFwKHJlLmVzY2FwZSwgX3htbF9lc2NhcGVfbWFwLmtleXMoKSkpKQotCi0KLWRlZiBfWG1sRXNjYXBlKHZhbHVlLCBhdHRyPUZhbHNlKToKLSAgIiIiIEVzY2FwZSBhIHN0cmluZyBmb3IgaW5jbHVzaW9uIGluIFhNTC4iIiIKLSAgZGVmIHJlcGxhY2UobWF0Y2gpOgotICAgIG0gPSBtYXRjaC5zdHJpbmdbbWF0Y2guc3RhcnQoKSA6IG1hdGNoLmVuZCgpXQotICAgICMgZG9uJ3QgcmVwbGFjZSBzaW5nbGUgcXVvdGVzIGluIGF0dHJzCi0gICAgaWYgYXR0ciBhbmQgbSA9PSAiJyI6Ci0gICAgICByZXR1cm4gbQotICAgIHJldHVybiBfeG1sX2VzY2FwZV9tYXBbbV0KLSAgcmV0dXJuIF94bWxfZXNjYXBlX3JlLnN1YihyZXBsYWNlLCB2YWx1ZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZWFzeV94bWxfdGVzdC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvZWFzeV94bWxfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZGY2NDM1NC4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2Vhc3lfeG1sX3Rlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiIFVuaXQgdGVzdHMgZm9yIHRoZSBlYXN5X3htbC5weSBmaWxlLiAiIiIKLQotaW1wb3J0IGd5cC5lYXN5X3htbCBhcyBlYXN5X3htbAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgU3RyaW5nSU8KLQotCi1jbGFzcyBUZXN0U2VxdWVuY2VGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLnN0ZGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLQotICBkZWYgdGVzdF9FYXN5WG1sX3NpbXBsZShzZWxmKToKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgZWFzeV94bWwuWG1sVG9TdHJpbmcoWyd0ZXN0J10pLAotICAgICAgJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PHRlc3QvPicpCi0KLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgZWFzeV94bWwuWG1sVG9TdHJpbmcoWyd0ZXN0J10sIGVuY29kaW5nPSdXaW5kb3dzLTEyNTInKSwKLSAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz48dGVzdC8+JykKLQotICBkZWYgdGVzdF9FYXN5WG1sX3NpbXBsZV93aXRoX2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIGVhc3lfeG1sLlhtbFRvU3RyaW5nKFsndGVzdDInLCB7J2EnOiAndmFsdWUxJywgJ2InOiAndmFsdWUyJ31dKSwKLSAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pjx0ZXN0MiBhPSJ2YWx1ZTEiIGI9InZhbHVlMiIvPicpCi0KLSAgZGVmIHRlc3RfRWFzeVhtbF9lc2NhcGluZyhzZWxmKToKLSAgICBvcmlnaW5hbCA9ICc8dGVzdD5cJyJcciZcbmZvbycKLSAgICBjb252ZXJ0ZWQgPSAnJmx0O3Rlc3QmZ3Q7XCcmcXVvdDsmI3hEOyZhbXA7JiN4QTtmb28nCi0gICAgY29udmVydGVkX2Fwb3MgPSBjb252ZXJ0ZWQucmVwbGFjZSgiJyIsICcmYXBvczsnKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBlYXN5X3htbC5YbWxUb1N0cmluZyhbJ3Rlc3QzJywgeydhJzogb3JpZ2luYWx9LCBvcmlnaW5hbF0pLAotICAgICAgJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+PHRlc3QzIGE9IiVzIj4lczwvdGVzdDM+JyAlCi0gICAgICAoY29udmVydGVkLCBjb252ZXJ0ZWRfYXBvcykpCi0KLSAgZGVmIHRlc3RfRWFzeVhtbF9wcmV0dHkoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIGVhc3lfeG1sLlhtbFRvU3RyaW5nKAotICAgICAgICAgIFsndGVzdDMnLAotICAgICAgICAgICAgWydHcmFuZFBhcmVudCcsCi0gICAgICAgICAgICAgIFsnUGFyZW50MScsCi0gICAgICAgICAgICAgICAgWydDaGlsZCddCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIFsnUGFyZW50MiddCi0gICAgICAgICAgICBdCi0gICAgICAgICAgXSwKLSAgICAgICAgICBwcmV0dHk9VHJ1ZSksCi0gICAgICAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz5cbicKLSAgICAgICc8dGVzdDM+XG4nCi0gICAgICAnICA8R3JhbmRQYXJlbnQ+XG4nCi0gICAgICAnICAgIDxQYXJlbnQxPlxuJwotICAgICAgJyAgICAgIDxDaGlsZC8+XG4nCi0gICAgICAnICAgIDwvUGFyZW50MT5cbicKLSAgICAgICcgICAgPFBhcmVudDIvPlxuJwotICAgICAgJyAgPC9HcmFuZFBhcmVudD5cbicKLSAgICAgICc8L3Rlc3QzPlxuJykKLQotCi0gIGRlZiB0ZXN0X0Vhc3lYbWxfY29tcGxleChzZWxmKToKLSAgICAjIFdlIHdhbnQgdG8gY3JlYXRlOgotICAgIHRhcmdldCA9ICgKLSAgICAgICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PicKLSAgICAgICc8UHJvamVjdD4nCi0gICAgICAgICc8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+JwotICAgICAgICAgICc8UHJvamVjdEd1aWQ+e0QyMjUwQzIwLTNBOTQtNEZCOS1BRjczLTExQkM1QjczODg0Qn08L1Byb2plY3RHdWlkPicKLSAgICAgICAgICAnPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPicKLSAgICAgICAgICAnPFJvb3ROYW1lc3BhY2U+YXV0b21hdGVkX3VpX3Rlc3RzPC9Sb290TmFtZXNwYWNlPicKLSAgICAgICAgJzwvUHJvcGVydHlHcm91cD4nCi0gICAgICAgICc8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcXE1pY3Jvc29mdC5DcHAucHJvcHMiLz4nCi0gICAgICAgICc8UHJvcGVydHlHcm91cCAnCi0gICAgICAgICAgICAnQ29uZGl0aW9uPSJcJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSlcJz09JwotICAgICAgICAgICAgICAgICAgICAgICAnXCdEZWJ1Z3xXaW4zMlwnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+JwotICAgICAgICAgICc8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPicKLSAgICAgICAgICAnPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+JwotICAgICAgICAnPC9Qcm9wZXJ0eUdyb3VwPicKLSAgICAgICc8L1Byb2plY3Q+JykKLQotICAgIHhtbCA9IGVhc3lfeG1sLlhtbFRvU3RyaW5nKAotICAgICAgICBbJ1Byb2plY3QnLAotICAgICAgICAgIFsnUHJvcGVydHlHcm91cCcsIHsnTGFiZWwnOiAnR2xvYmFscyd9LAotICAgICAgICAgICAgWydQcm9qZWN0R3VpZCcsICd7RDIyNTBDMjAtM0E5NC00RkI5LUFGNzMtMTFCQzVCNzM4ODRCfSddLAotICAgICAgICAgICAgWydLZXl3b3JkJywgJ1dpbjMyUHJvaiddLAotICAgICAgICAgICAgWydSb290TmFtZXNwYWNlJywgJ2F1dG9tYXRlZF91aV90ZXN0cyddCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ0ltcG9ydCcsIHsnUHJvamVjdCc6ICckKFZDVGFyZ2V0c1BhdGgpXFxNaWNyb3NvZnQuQ3BwLnByb3BzJ31dLAotICAgICAgICAgIFsnUHJvcGVydHlHcm91cCcsCi0gICAgICAgICAgICB7J0NvbmRpdGlvbic6ICInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciLAotICAgICAgICAgICAgICdMYWJlbCc6ICdDb25maWd1cmF0aW9uJ30sCi0gICAgICAgICAgICBbJ0NvbmZpZ3VyYXRpb25UeXBlJywgJ0FwcGxpY2F0aW9uJ10sCi0gICAgICAgICAgICBbJ0NoYXJhY3RlclNldCcsICdVbmljb2RlJ10KLSAgICAgICAgICBdCi0gICAgICAgIF0pCi0gICAgc2VsZi5hc3NlcnRFcXVhbCh4bWwsIHRhcmdldCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL19faW5pdF9fLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvYW5kcm9pZC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL2FuZHJvaWQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MmVjODQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvYW5kcm9pZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwOTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIE5vdGVzOgotIwotIyBUaGlzIGdlbmVyYXRlcyBtYWtlZmlsZXMgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbnRvIHRoZSBBbmRyb2lkIGJ1aWxkIHN5c3RlbQotIyB2aWEgYW4gQW5kcm9pZC5tayBmaWxlLiBJdCBpcyBiYXNlZCBvbiBtYWtlLnB5LCB0aGUgc3RhbmRhcmQgbWFrZWZpbGUKLSMgZ2VuZXJhdG9yLgotIwotIyBUaGUgY29kZSBiZWxvdyBnZW5lcmF0ZXMgYSBzZXBhcmF0ZSAubWsgZmlsZSBmb3IgZWFjaCB0YXJnZXQsIGJ1dAotIyBhbGwgYXJlIHNvdXJjZWQgYnkgdGhlIHRvcC1sZXZlbCBHeXBBbmRyb2lkLm1rLiAgVGhpcyBtZWFucyB0aGF0IGFsbAotIyB2YXJpYWJsZXMgaW4gLm1rLWZpbGVzIGNsb2JiZXIgb25lIGFub3RoZXIsIGFuZCBmdXJ0aGVybW9yZSB0aGF0IGFueQotIyB2YXJpYWJsZXMgc2V0IHBvdGVudGlhbGx5IGNsYXNoIHdpdGggb3RoZXIgQW5kcm9pZCBidWlsZCBzeXN0ZW0gdmFyaWFibGVzLgotIyBUcnkgdG8gYXZvaWQgc2V0dGluZyBnbG9iYWwgdmFyaWFibGVzIHdoZXJlIHBvc3NpYmxlLgotCi1pbXBvcnQgZ3lwCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IGd5cC5nZW5lcmF0b3IubWFrZSBhcyBtYWtlICAjIFJldXNlIGdsb2JhbCBmdW5jdGlvbnMgZnJvbSBtYWtlIGJhY2tlbmQuCi1pbXBvcnQgb3MKLWltcG9ydCByZQotCi1nZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXMgPSB7Ci0gICdPUyc6ICdhbmRyb2lkJywKLSAgJ0VYRUNVVEFCTEVfUFJFRklYJzogJycsCi0gICdFWEVDVVRBQkxFX1NVRkZJWCc6ICcnLAotICAnU1RBVElDX0xJQl9QUkVGSVgnOiAnbGliJywKLSAgJ1NIQVJFRF9MSUJfUFJFRklYJzogJ2xpYicsCi0gICdTVEFUSUNfTElCX1NVRkZJWCc6ICcuYScsCi0gICdTSEFSRURfTElCX1NVRkZJWCc6ICcuc28nLAotICAnSU5URVJNRURJQVRFX0RJUic6ICckKGd5cF9pbnRlcm1lZGlhdGVfZGlyKScsCi0gICdTSEFSRURfSU5URVJNRURJQVRFX0RJUic6ICckKGd5cF9zaGFyZWRfaW50ZXJtZWRpYXRlX2RpciknLAotICAnUFJPRFVDVF9ESVInOiAnJChneXBfc2hhcmVkX2ludGVybWVkaWF0ZV9kaXIpJywKLSAgJ1NIQVJFRF9MSUJfRElSJzogJyQoYnVpbGRkaXIpL2xpYi4kKFRPT0xTRVQpJywKLSAgJ0xJQl9ESVInOiAnJChvYmopLiQoVE9PTFNFVCknLAotICAnUlVMRV9JTlBVVF9ST09UJzogJyUoSU5QVVRfUk9PVClzJywgICMgVGhpcyBnZXRzIGV4cGFuZGVkIGJ5IFB5dGhvbi4KLSAgJ1JVTEVfSU5QVVRfRElSTkFNRSc6ICclKElOUFVUX0RJUk5BTUUpcycsICAjIFRoaXMgZ2V0cyBleHBhbmRlZCBieSBQeXRob24uCi0gICdSVUxFX0lOUFVUX1BBVEgnOiAnJChSVUxFX1NPVVJDRVMpJywKLSAgJ1JVTEVfSU5QVVRfRVhUJzogJyQoc3VmZml4ICQ8KScsCi0gICdSVUxFX0lOUFVUX05BTUUnOiAnJChub3RkaXIgJDwpJywKLSAgJ0NPTkZJR1VSQVRJT05fTkFNRSc6ICdOT1RfVVNFRF9PTl9BTkRST0lEJywKLX0KLQotIyBNYWtlIHN1cHBvcnRzIG11bHRpcGxlIHRvb2xzZXRzCi1nZW5lcmF0b3Jfc3VwcG9ydHNfbXVsdGlwbGVfdG9vbHNldHMgPSBUcnVlCi0KLQotIyBHZW5lcmF0b3Itc3BlY2lmaWMgZ3lwIHNwZWNzLgotZ2VuZXJhdG9yX2FkZGl0aW9uYWxfbm9uX2NvbmZpZ3VyYXRpb25fa2V5cyA9IFsKLSAgICAjIEJvb2xlYW4gdG8gZGVjbGFyZSB0aGF0IHRoaXMgdGFyZ2V0IGRvZXMgbm90IHdhbnQgaXRzIG5hbWUgbWFuZ2xlZC4KLSAgICAnYW5kcm9pZF91bm1hbmdsZWRfbmFtZScsCi1dCi1nZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zID0gW10KLWdlbmVyYXRvcl9leHRyYV9zb3VyY2VzX2Zvcl9ydWxlcyA9IFtdCi0KLQotU0hBUkVEX0ZPT1RFUiA9ICIiIlwKLSMgImd5cF9hbGxfbW9kdWxlcyIgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSAiZ3lwX2FsbF9tb2R1bGVzIiB0YXJnZXRzIGZyb20KLSMgYWxsIHRoZSBpbmNsdWRlZCBzdWItbWFrZWZpbGVzLiBUaGlzIGlzIGp1c3QgaGVyZSB0byBjbGFyaWZ5LgotZ3lwX2FsbF9tb2R1bGVzOgotIiIiCi0KLWhlYWRlciA9ICIiIlwKLSMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBneXA7IGRvIG5vdCBlZGl0LgotCi0iIiIKLQotYW5kcm9pZF9zdGFuZGFyZF9pbmNsdWRlX3BhdGhzID0gc2V0KFsKLSAgICAjIEpOSV9IX0lOQ0xVREUgaW4gYnVpbGQvY29yZS9iaW5hcnkubWsKLSAgICAnZGFsdmlrL2xpYm5hdGl2ZWhlbHBlci9pbmNsdWRlL25hdGl2ZWhlbHBlcicsCi0gICAgIyBmcm9tIFNSQ19IRUFERVJTIGluIGJ1aWxkL2NvcmUvY29uZmlnLm1rCi0gICAgJ3N5c3RlbS9jb3JlL2luY2x1ZGUnLAotICAgICdoYXJkd2FyZS9saWJoYXJkd2FyZS9pbmNsdWRlJywKLSAgICAnaGFyZHdhcmUvbGliaGFyZHdhcmVfbGVnYWN5L2luY2x1ZGUnLAotICAgICdoYXJkd2FyZS9yaWwvaW5jbHVkZScsCi0gICAgJ2RhbHZpay9saWJuYXRpdmVoZWxwZXIvaW5jbHVkZScsCi0gICAgJ2ZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUnLAotICAgICdmcmFtZXdvcmtzL25hdGl2ZS9vcGVuZ2wvaW5jbHVkZScsCi0gICAgJ2ZyYW1ld29ya3MvYmFzZS9pbmNsdWRlJywKLSAgICAnZnJhbWV3b3Jrcy9iYXNlL29wZW5nbC9pbmNsdWRlJywKLSAgICAnZnJhbWV3b3Jrcy9iYXNlL25hdGl2ZS9pbmNsdWRlJywKLSAgICAnZXh0ZXJuYWwvc2tpYS9pbmNsdWRlJywKLSAgICAjIFRBUkdFVF9DX0lOQ0xVREVTIGluIGJ1aWxkL2NvcmUvY29tYm8vVEFSR0VUX2xpbnV4LWFybS5tawotICAgICdiaW9uaWMvbGliYy9hcmNoLWFybS9pbmNsdWRlJywKLSAgICAnYmlvbmljL2xpYmMvaW5jbHVkZScsCi0gICAgJ2Jpb25pYy9saWJzdGRjKysvaW5jbHVkZScsCi0gICAgJ2Jpb25pYy9saWJjL2tlcm5lbC9jb21tb24nLAotICAgICdiaW9uaWMvbGliYy9rZXJuZWwvYXJjaC1hcm0nLAotICAgICdiaW9uaWMvbGlibS9pbmNsdWRlJywKLSAgICAnYmlvbmljL2xpYm0vaW5jbHVkZS9hcm0nLAotICAgICdiaW9uaWMvbGlidGhyZWFkX2RiL2luY2x1ZGUnLAotICAgIF0pCi0KLQotIyBNYXAgZ3lwIHRhcmdldCB0eXBlcyB0byBBbmRyb2lkIG1vZHVsZSBjbGFzc2VzLgotTU9EVUxFX0NMQVNTRVMgPSB7Ci0gICAgJ3N0YXRpY19saWJyYXJ5JzogJ1NUQVRJQ19MSUJSQVJJRVMnLAotICAgICdzaGFyZWRfbGlicmFyeSc6ICdTSEFSRURfTElCUkFSSUVTJywKLSAgICAnZXhlY3V0YWJsZSc6ICdFWEVDVVRBQkxFUycsCi19Ci0KLQotZGVmIElzQ1BQRXh0ZW5zaW9uKGV4dCk6Ci0gIHJldHVybiBtYWtlLkNPTVBJTEFCTEVfRVhURU5TSU9OUy5nZXQoZXh0KSA9PSAnY3h4JwotCi0KLWRlZiBTb3VyY2VpZnkocGF0aCk6Ci0gICIiIkNvbnZlcnQgYSBwYXRoIHRvIGl0cyBzb3VyY2UgZGlyZWN0b3J5IGZvcm0uIFRoZSBBbmRyb2lkIGJhY2tlbmQgZG9lcyBub3QKLSAgICAgc3VwcG9ydCBvcHRpb25zLmdlbmVyYXRvcl9vdXRwdXQsIHNvIHRoaXMgZnVuY3Rpb24gaXMgYSBub29wLiIiIgotICByZXR1cm4gcGF0aAotCi0KLSMgTWFwIGZyb20gcXVhbGlmaWVkIHRhcmdldCB0byBwYXRoIHRvIG91dHB1dC4KLSMgRm9yIEFuZHJvaWQsIHRoZSB0YXJnZXQgb2YgdGhlc2UgbWFwcyBpcyBhIHR1cGxlICgnc3RhdGljJywgJ21vZHVsZW5hbWUnKSwKLSMgKCdkeW5hbWljJywgJ21vZHVsZW5hbWUnKSwgb3IgKCdwYXRoJywgJ3NvbWUvcGF0aCcpIGluc3RlYWQgb2YgYSBzdHJpbmcsCi0jIHNpbmNlIHdlIGxpbmsgYnkgbW9kdWxlLgotdGFyZ2V0X291dHB1dHMgPSB7fQotIyBNYXAgZnJvbSBxdWFsaWZpZWQgdGFyZ2V0IHRvIGFueSBsaW5rYWJsZSBvdXRwdXQuICBBIHN1YnNldAotIyBvZiB0YXJnZXRfb3V0cHV0cy4gIEUuZy4gd2hlbiBteWJpbmFyeSBkZXBlbmRzIG9uIGxpYmEsIHdlIHdhbnQgdG8KLSMgaW5jbHVkZSBsaWJhIGluIHRoZSBsaW5rZXIgbGluZTsgd2hlbiBvdGhlcmJpbmFyeSBkZXBlbmRzIG9uCi0jIG15YmluYXJ5LCB3ZSBqdXN0IHdhbnQgdG8gYnVpbGQgbXliaW5hcnkgZmlyc3QuCi10YXJnZXRfbGlua19kZXBzID0ge30KLQotCi1jbGFzcyBBbmRyb2lkTWtXcml0ZXIob2JqZWN0KToKLSAgIiIiQW5kcm9pZE1rV3JpdGVyIHBhY2thZ2VzIHVwIHRoZSB3cml0aW5nIG9mIG9uZSB0YXJnZXQtc3BlY2lmaWMgQW5kcm9pZC5tay4KLQotICBJdHMgb25seSByZWFsIGVudHJ5IHBvaW50IGlzIFdyaXRlKCksIGFuZCBpcyBtb3N0bHkgdXNlZCBmb3IgbmFtZXNwYWNpbmcuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBhbmRyb2lkX3RvcF9kaXIpOgotICAgIHNlbGYuYW5kcm9pZF90b3BfZGlyID0gYW5kcm9pZF90b3BfZGlyCi0KLSAgZGVmIFdyaXRlKHNlbGYsIHF1YWxpZmllZF90YXJnZXQsIGJhc2VfcGF0aCwgb3V0cHV0X2ZpbGVuYW1lLCBzcGVjLCBjb25maWdzLAotICAgICAgICAgICAgcGFydF9vZl9hbGwpOgotICAgICIiIlRoZSBtYWluIGVudHJ5IHBvaW50OiB3cml0ZXMgYSAubWsgZmlsZSBmb3IgYSBzaW5nbGUgdGFyZ2V0LgotCi0gICAgQXJndW1lbnRzOgotICAgICAgcXVhbGlmaWVkX3RhcmdldDogdGFyZ2V0IHdlJ3JlIGdlbmVyYXRpbmcKLSAgICAgIGJhc2VfcGF0aDogcGF0aCByZWxhdGl2ZSB0byBzb3VyY2Ugcm9vdCB3ZSdyZSBidWlsZGluZyBpbiwgdXNlZCB0byByZXNvbHZlCi0gICAgICAgICAgICAgICAgIHRhcmdldC1yZWxhdGl2ZSBwYXRocwotICAgICAgb3V0cHV0X2ZpbGVuYW1lOiBvdXRwdXQgLm1rIGZpbGUgbmFtZSB0byB3cml0ZQotICAgICAgc3BlYywgY29uZmlnczogZ3lwIGluZm8KLSAgICAgIHBhcnRfb2ZfYWxsOiBmbGFnIGluZGljYXRpbmcgdGhpcyB0YXJnZXQgaXMgcGFydCBvZiAnYWxsJwotICAgICIiIgotICAgIG1ha2UuZW5zdXJlX2RpcmVjdG9yeV9leGlzdHMob3V0cHV0X2ZpbGVuYW1lKQotCi0gICAgc2VsZi5mcCA9IG9wZW4ob3V0cHV0X2ZpbGVuYW1lLCAndycpCi0KLSAgICBzZWxmLmZwLndyaXRlKGhlYWRlcikKLQotICAgIHNlbGYucXVhbGlmaWVkX3RhcmdldCA9IHF1YWxpZmllZF90YXJnZXQKLSAgICBzZWxmLnBhdGggPSBiYXNlX3BhdGgKLSAgICBzZWxmLnRhcmdldCA9IHNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICBzZWxmLnR5cGUgPSBzcGVjWyd0eXBlJ10KLSAgICBzZWxmLnRvb2xzZXQgPSBzcGVjWyd0b29sc2V0J10KLQotICAgIGRlcHMsIGxpbmtfZGVwcyA9IHNlbGYuQ29tcHV0ZURlcHMoc3BlYykKLQotICAgICMgU29tZSBvZiB0aGUgZ2VuZXJhdGlvbiBiZWxvdyBjYW4gYWRkIGV4dHJhIG91dHB1dCwgc291cmNlcywgb3IKLSAgICAjIGxpbmsgZGVwZW5kZW5jaWVzLiAgQWxsIG9mIHRoZSBvdXQgcGFyYW1zIG9mIHRoZSBmdW5jdGlvbnMgdGhhdAotICAgICMgZm9sbG93IHVzZSBuYW1lcyBsaWtlIGV4dHJhX2Zvby4KLSAgICBleHRyYV9vdXRwdXRzID0gW10KLSAgICBleHRyYV9zb3VyY2VzID0gW10KLQotICAgIHNlbGYuYW5kcm9pZF9jbGFzcyA9IE1PRFVMRV9DTEFTU0VTLmdldChzZWxmLnR5cGUsICdHWVAnKQotICAgIHNlbGYuYW5kcm9pZF9tb2R1bGUgPSBzZWxmLkNvbXB1dGVBbmRyb2lkTW9kdWxlKHNwZWMpCi0gICAgKHNlbGYuYW5kcm9pZF9zdGVtLCBzZWxmLmFuZHJvaWRfc3VmZml4KSA9IHNlbGYuQ29tcHV0ZU91dHB1dFBhcnRzKHNwZWMpCi0gICAgc2VsZi5vdXRwdXQgPSBzZWxmLm91dHB1dF9iaW5hcnkgPSBzZWxmLkNvbXB1dGVPdXRwdXQoc3BlYykKLQotICAgICMgU3RhbmRhcmQgaGVhZGVyLgotICAgIHNlbGYuV3JpdGVMbignaW5jbHVkZSAkKENMRUFSX1ZBUlMpXG4nKQotCi0gICAgIyBNb2R1bGUgY2xhc3MgYW5kIG5hbWUuCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gJyArIHNlbGYuYW5kcm9pZF9jbGFzcykKLSAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX01PRFVMRSA6PSAnICsgc2VsZi5hbmRyb2lkX21vZHVsZSkKLSAgICAjIE9ubHkgZW1pdCBMT0NBTF9NT0RVTEVfU1RFTSBpZiBpdCdzIGRpZmZlcmVudCB0byBMT0NBTF9NT0RVTEUuCi0gICAgIyBUaGUgbGlicmFyeSBtb2R1bGUgY2xhc3NlcyBmYWlsIGlmIHRoZSBzdGVtIGlzIHNldC4gQ29tcHV0ZU91dHB1dFBhcnRzCi0gICAgIyBtYWtlcyBzdXJlIHRoYXQgc3RlbSA9PSBtb2R1bGVuYW1lIGluIHRoZXNlIGNhc2VzLgotICAgIGlmIHNlbGYuYW5kcm9pZF9zdGVtICE9IHNlbGYuYW5kcm9pZF9tb2R1bGU6Ci0gICAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX01PRFVMRV9TVEVNIDo9ICcgKyBzZWxmLmFuZHJvaWRfc3RlbSkKLSAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX01PRFVMRV9TVUZGSVggOj0gJyArIHNlbGYuYW5kcm9pZF9zdWZmaXgpCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbCcpCi0gICAgaWYgc2VsZi50b29sc2V0ID09ICdob3N0JzoKLSAgICAgIHNlbGYuV3JpdGVMbignTE9DQUxfSVNfSE9TVF9NT0RVTEUgOj0gdHJ1ZScpCi0KLSAgICAjIEdyYWIgb3V0cHV0IGRpcmVjdG9yaWVzOyBuZWVkZWQgZm9yIEFjdGlvbnMgYW5kIFJ1bGVzLgotICAgIHNlbGYuV3JpdGVMbignZ3lwX2ludGVybWVkaWF0ZV9kaXIgOj0gJChjYWxsIGxvY2FsLWludGVybWVkaWF0ZXMtZGlyKScpCi0gICAgc2VsZi5Xcml0ZUxuKCdneXBfc2hhcmVkX2ludGVybWVkaWF0ZV9kaXIgOj0gJwotICAgICAgICAgICAgICAgICAnJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixHWVAsc2hhcmVkKScpCi0gICAgc2VsZi5Xcml0ZUxuKCkKLQotICAgICMgTGlzdCBmaWxlcyB0aGlzIHRhcmdldCBkZXBlbmRzIG9uIHNvIHRoYXQgYWN0aW9ucy9ydWxlcy9jb3BpZXMvc291cmNlcwotICAgICMgY2FuIGRlcGVuZCBvbiB0aGUgbGlzdC4KLSAgICAjIFRPRE86IGRvZXNuJ3QgcHVsbCBpbiB0aGluZ3MgdGhyb3VnaCB0cmFuc2l0aXZlIGxpbmsgZGVwczsgbmVlZGVkPwotICAgIHRhcmdldF9kZXBlbmRlbmNpZXMgPSBbeFsxXSBmb3IgeCBpbiBkZXBzIGlmIHhbMF0gPT0gJ3BhdGgnXQotICAgIHNlbGYuV3JpdGVMbignIyBNYWtlIHN1cmUgb3VyIGRlcHMgYXJlIGJ1aWx0IGZpcnN0LicpCi0gICAgc2VsZi5Xcml0ZUxpc3QodGFyZ2V0X2RlcGVuZGVuY2llcywgJ0dZUF9UQVJHRVRfREVQRU5ERU5DSUVTJywKLSAgICAgICAgICAgICAgICAgICBsb2NhbF9wYXRoaWZ5PVRydWUpCi0KLSAgICAjIEFjdGlvbnMgbXVzdCBjb21lIGZpcnN0LCBzaW5jZSB0aGV5IGNhbiBnZW5lcmF0ZSBtb3JlIE9CSnMgZm9yIHVzZSBiZWxvdy4KLSAgICBpZiAnYWN0aW9ucycgaW4gc3BlYzoKLSAgICAgIHNlbGYuV3JpdGVBY3Rpb25zKHNwZWNbJ2FjdGlvbnMnXSwgZXh0cmFfc291cmNlcywgZXh0cmFfb3V0cHV0cykKLQotICAgICMgUnVsZXMgbXVzdCBiZSBlYXJseSBsaWtlIGFjdGlvbnMuCi0gICAgaWYgJ3J1bGVzJyBpbiBzcGVjOgotICAgICAgc2VsZi5Xcml0ZVJ1bGVzKHNwZWNbJ3J1bGVzJ10sIGV4dHJhX3NvdXJjZXMsIGV4dHJhX291dHB1dHMpCi0KLSAgICBpZiAnY29waWVzJyBpbiBzcGVjOgotICAgICAgc2VsZi5Xcml0ZUNvcGllcyhzcGVjWydjb3BpZXMnXSwgZXh0cmFfb3V0cHV0cykKLQotICAgICMgR1lQIGdlbmVyYXRlZCBvdXRwdXRzLgotICAgIHNlbGYuV3JpdGVMaXN0KGV4dHJhX291dHB1dHMsICdHWVBfR0VORVJBVEVEX09VVFBVVFMnLCBsb2NhbF9wYXRoaWZ5PVRydWUpCi0KLSAgICAjIFNldCBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyBzbyB0aGF0IEFuZHJvaWQncyBidWlsZCBydWxlcyBkZXBlbmQKLSAgICAjIG9uIGJvdGggb3VyIGRlcGVuZGVuY3kgdGFyZ2V0cyBhbmQgb3VyIGdlbmVyYXRlZCBmaWxlcy4KLSAgICBzZWxmLldyaXRlTG4oJyMgTWFrZSBzdXJlIG91ciBkZXBzIGFuZCBnZW5lcmF0ZWQgZmlsZXMgYXJlIGJ1aWx0IGZpcnN0LicpCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKEdZUF9UQVJHRVRfREVQRU5ERU5DSUVTKSAnCi0gICAgICAgICAgICAgICAgICckKEdZUF9HRU5FUkFURURfT1VUUFVUUyknKQotICAgIHNlbGYuV3JpdGVMbigpCi0KLSAgICAjIFNvdXJjZXMuCi0gICAgaWYgc3BlYy5nZXQoJ3NvdXJjZXMnLCBbXSkgb3IgZXh0cmFfc291cmNlczoKLSAgICAgIHNlbGYuV3JpdGVTb3VyY2VzKHNwZWMsIGNvbmZpZ3MsIGV4dHJhX3NvdXJjZXMpCi0KLSAgICBzZWxmLldyaXRlVGFyZ2V0KHNwZWMsIGNvbmZpZ3MsIGRlcHMsIGxpbmtfZGVwcywgcGFydF9vZl9hbGwpCi0KLSAgICAjIFVwZGF0ZSBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgb3V0cHV0cywgdXNlZCBpbiBkZXBlbmRlbmN5IHRyYWNraW5nLgotICAgIHRhcmdldF9vdXRwdXRzW3F1YWxpZmllZF90YXJnZXRdID0gKCdwYXRoJywgc2VsZi5vdXRwdXRfYmluYXJ5KQotCi0gICAgIyBVcGRhdGUgZ2xvYmFsIGxpc3Qgb2YgbGluayBkZXBlbmRlbmNpZXMuCi0gICAgaWYgc2VsZi50eXBlID09ICdzdGF0aWNfbGlicmFyeSc6Ci0gICAgICB0YXJnZXRfbGlua19kZXBzW3F1YWxpZmllZF90YXJnZXRdID0gKCdzdGF0aWMnLCBzZWxmLmFuZHJvaWRfbW9kdWxlKQotICAgIGVsaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICB0YXJnZXRfbGlua19kZXBzW3F1YWxpZmllZF90YXJnZXRdID0gKCdzaGFyZWQnLCBzZWxmLmFuZHJvaWRfbW9kdWxlKQotCi0gICAgc2VsZi5mcC5jbG9zZSgpCi0gICAgcmV0dXJuIHNlbGYuYW5kcm9pZF9tb2R1bGUKLQotCi0gIGRlZiBXcml0ZUFjdGlvbnMoc2VsZiwgYWN0aW9ucywgZXh0cmFfc291cmNlcywgZXh0cmFfb3V0cHV0cyk6Ci0gICAgIiIiV3JpdGUgTWFrZWZpbGUgY29kZSBmb3IgYW55ICdhY3Rpb25zJyBmcm9tIHRoZSBneXAgaW5wdXQuCi0KLSAgICBleHRyYV9zb3VyY2VzOiBhIGxpc3QgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIG5ld2x5IGdlbmVyYXRlZCBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICBmaWxlcywgaWYgYW55Ci0gICAgZXh0cmFfb3V0cHV0czogYSBsaXN0IHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBhbnkgb3V0cHV0cyBvZiB0aGVzZQotICAgICAgICAgICAgICAgICAgIGFjdGlvbnMgKHVzZWQgdG8gbWFrZSBvdGhlciBwaWVjZXMgZGVwZW5kZW50IG9uIHRoZXNlCi0gICAgICAgICAgICAgICAgICAgYWN0aW9ucykKLSAgICAiIiIKLSAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6Ci0gICAgICBuYW1lID0gbWFrZS5TdHJpbmdUb01ha2VmaWxlVmFyaWFibGUoJyVzXyVzJyAlIChzZWxmLnF1YWxpZmllZF90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbl9uYW1lJ10pKQotICAgICAgc2VsZi5Xcml0ZUxuKCcjIyMgUnVsZXMgZm9yIGFjdGlvbiAiJXMiOicgJSBhY3Rpb25bJ2FjdGlvbl9uYW1lJ10pCi0gICAgICBpbnB1dHMgPSBhY3Rpb25bJ2lucHV0cyddCi0gICAgICBvdXRwdXRzID0gYWN0aW9uWydvdXRwdXRzJ10KLQotICAgICAgIyBCdWlsZCB1cCBhIGxpc3Qgb2Ygb3V0cHV0cy4KLSAgICAgICMgQ29sbGVjdCB0aGUgb3V0cHV0IGRpcnMgd2UnbGwgbmVlZC4KLSAgICAgIGRpcnMgPSBzZXQoKQotICAgICAgZm9yIG91dCBpbiBvdXRwdXRzOgotICAgICAgICBpZiBub3Qgb3V0LnN0YXJ0c3dpdGgoJyQnKToKLSAgICAgICAgICBwcmludCAoJ1dBUk5JTkc6IEFjdGlvbiBmb3IgdGFyZ2V0ICIlcyIgd3JpdGVzIG91dHB1dCB0byBsb2NhbCBwYXRoICcKLSAgICAgICAgICAgICAgICAgJyIlcyIuJyAlIChzZWxmLnRhcmdldCwgb3V0KSkKLSAgICAgICAgZGlyID0gb3MucGF0aC5zcGxpdChvdXQpWzBdCi0gICAgICAgIGlmIGRpcjoKLSAgICAgICAgICBkaXJzLmFkZChkaXIpCi0gICAgICBpZiBpbnQoYWN0aW9uLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnLCBGYWxzZSkpOgotICAgICAgICBleHRyYV9zb3VyY2VzICs9IG91dHB1dHMKLQotICAgICAgIyBQcmVwYXJlIHRoZSBhY3R1YWwgY29tbWFuZC4KLSAgICAgIGNvbW1hbmQgPSBneXAuY29tbW9uLkVuY29kZVBPU0lYU2hlbGxMaXN0KGFjdGlvblsnYWN0aW9uJ10pCi0gICAgICBpZiAnbWVzc2FnZScgaW4gYWN0aW9uOgotICAgICAgICBxdWlldF9jbWQgPSAnR3lwIGFjdGlvbjogJXMgKCRAKScgJSBhY3Rpb25bJ21lc3NhZ2UnXQotICAgICAgZWxzZToKLSAgICAgICAgcXVpZXRfY21kID0gJ0d5cCBhY3Rpb246ICVzICgkQCknICUgbmFtZQotICAgICAgaWYgbGVuKGRpcnMpID4gMDoKLSAgICAgICAgY29tbWFuZCA9ICdta2RpciAtcCAlcycgJSAnICcuam9pbihkaXJzKSArICc7ICcgKyBjb21tYW5kCi0KLSAgICAgIGNkX2FjdGlvbiA9ICdjZCAkKGd5cF9sb2NhbF9wYXRoKS8lczsgJyAlIHNlbGYucGF0aAotICAgICAgY29tbWFuZCA9IGNkX2FjdGlvbiArIGNvbW1hbmQKLQotICAgICAgIyBUaGUgbWFrZWZpbGUgcnVsZXMgYXJlIGFsbCByZWxhdGl2ZSB0byB0aGUgdG9wIGRpciwgYnV0IHRoZSBneXAgYWN0aW9ucwotICAgICAgIyBhcmUgZGVmaW5lZCByZWxhdGl2ZSB0byB0aGVpciBjb250YWluaW5nIGRpci4gIFRoaXMgcmVwbGFjZXMgdGhlIGd5cF8qCi0gICAgICAjIHZhcmlhYmxlcyBmb3IgdGhlIGFjdGlvbiBydWxlIHdpdGggYW4gYWJzb2x1dGUgdmVyc2lvbiBzbyB0aGF0IHRoZQotICAgICAgIyBvdXRwdXQgZ29lcyBpbiB0aGUgcmlnaHQgcGxhY2UuCi0gICAgICAjIE9ubHkgd3JpdGUgdGhlIGd5cF8qIHJ1bGVzIGZvciB0aGUgInByaW1hcnkiIG91dHB1dCAoOjEpOwotICAgICAgIyBpdCdzIHN1cGVyZmx1b3VzIGZvciB0aGUgImV4dHJhIG91dHB1dHMiLCBhbmQgdGhpcyBhdm9pZHMgYWNjaWRlbnRhbGx5Ci0gICAgICAjIHdyaXRpbmcgZHVwbGljYXRlIGR1bW15IHJ1bGVzIGZvciB0aG9zZSBvdXRwdXRzLgotICAgICAgbWFpbl9vdXRwdXQgPSBtYWtlLlF1b3RlU3BhY2VzKHNlbGYuTG9jYWxQYXRoaWZ5KG91dHB1dHNbMF0pKQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogZ3lwX2xvY2FsX3BhdGggOj0gJChMT0NBTF9QQVRIKScgJSBtYWluX291dHB1dCkKLSAgICAgIHNlbGYuV3JpdGVMbignJXM6IGd5cF9pbnRlcm1lZGlhdGVfZGlyIDo9ICcKLSAgICAgICAgICAgICAgICAgICAnJChHWVBfQUJTX0FORFJPSURfVE9QX0RJUikvJChneXBfaW50ZXJtZWRpYXRlX2RpciknICUKLSAgICAgICAgICAgICAgICAgICBtYWluX291dHB1dCkKLSAgICAgIHNlbGYuV3JpdGVMbignJXM6IGd5cF9zaGFyZWRfaW50ZXJtZWRpYXRlX2RpciA6PSAnCi0gICAgICAgICAgICAgICAgICAgJyQoR1lQX0FCU19BTkRST0lEX1RPUF9ESVIpLyQoZ3lwX3NoYXJlZF9pbnRlcm1lZGlhdGVfZGlyKScgJQotICAgICAgICAgICAgICAgICAgIG1haW5fb3V0cHV0KQotCi0gICAgICBmb3IgaW5wdXQgaW4gaW5wdXRzOgotICAgICAgICBhc3NlcnQgJyAnIG5vdCBpbiBpbnB1dCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBhY3Rpb24gaW5wdXQgZmlsZW5hbWVzIG5vdCBzdXBwb3J0ZWQgKCVzKSIgICUgaW5wdXQpCi0gICAgICBmb3Igb3V0cHV0IGluIG91dHB1dHM6Ci0gICAgICAgIGFzc2VydCAnICcgbm90IGluIG91dHB1dCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBhY3Rpb24gb3V0cHV0IGZpbGVuYW1lcyBub3Qgc3VwcG9ydGVkICglcykiICAlIG91dHB1dCkKLQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogJXMgJChHWVBfVEFSR0VUX0RFUEVOREVOQ0lFUyknICUKLSAgICAgICAgICAgICAgICAgICAobWFpbl9vdXRwdXQsICcgJy5qb2luKG1hcChzZWxmLkxvY2FsUGF0aGlmeSwgaW5wdXRzKSkpKQotICAgICAgc2VsZi5Xcml0ZUxuKCdcdEBlY2hvICIlcyInICUgcXVpZXRfY21kKQotICAgICAgc2VsZi5Xcml0ZUxuKCdcdCQoaGlkZSklc1xuJyAlIGNvbW1hbmQpCi0gICAgICBmb3Igb3V0cHV0IGluIG91dHB1dHNbMTpdOgotICAgICAgICAjIE1ha2UgZWFjaCBvdXRwdXQgZGVwZW5kIG9uIHRoZSBtYWluIG91dHB1dCwgd2l0aCBhbiBlbXB0eSBjb21tYW5kCi0gICAgICAgICMgdG8gZm9yY2UgbWFrZSB0byBub3RpY2UgdGhhdCB0aGUgbXRpbWUgaGFzIGNoYW5nZWQuCi0gICAgICAgIHNlbGYuV3JpdGVMbignJXM6ICVzIDsnICUgKHNlbGYuTG9jYWxQYXRoaWZ5KG91dHB1dCksIG1haW5fb3V0cHV0KSkKLQotICAgICAgZXh0cmFfb3V0cHV0cyArPSBvdXRwdXRzCi0gICAgICBzZWxmLldyaXRlTG4oKQotCi0gICAgc2VsZi5Xcml0ZUxuKCkKLQotCi0gIGRlZiBXcml0ZVJ1bGVzKHNlbGYsIHJ1bGVzLCBleHRyYV9zb3VyY2VzLCBleHRyYV9vdXRwdXRzKToKLSAgICAiIiJXcml0ZSBNYWtlZmlsZSBjb2RlIGZvciBhbnkgJ3J1bGVzJyBmcm9tIHRoZSBneXAgaW5wdXQuCi0KLSAgICBleHRyYV9zb3VyY2VzOiBhIGxpc3QgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIG5ld2x5IGdlbmVyYXRlZCBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICBmaWxlcywgaWYgYW55Ci0gICAgZXh0cmFfb3V0cHV0czogYSBsaXN0IHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBhbnkgb3V0cHV0cyBvZiB0aGVzZQotICAgICAgICAgICAgICAgICAgIHJ1bGVzICh1c2VkIHRvIG1ha2Ugb3RoZXIgcGllY2VzIGRlcGVuZGVudCBvbiB0aGVzZSBydWxlcykKLSAgICAiIiIKLSAgICBpZiBsZW4ocnVsZXMpID09IDA6Ci0gICAgICByZXR1cm4KLSAgICBydWxlX3RyaWdnZXIgPSAnJXNfcnVsZV90cmlnZ2VyJyAlIHNlbGYuYW5kcm9pZF9tb2R1bGUKLQotICAgIGRpZF93cml0ZV9ydWxlID0gRmFsc2UKLSAgICBmb3IgcnVsZSBpbiBydWxlczoKLSAgICAgIGlmIGxlbihydWxlLmdldCgncnVsZV9zb3VyY2VzJywgW10pKSA9PSAwOgotICAgICAgICBjb250aW51ZQotICAgICAgZGlkX3dyaXRlX3J1bGUgPSBUcnVlCi0gICAgICBuYW1lID0gbWFrZS5TdHJpbmdUb01ha2VmaWxlVmFyaWFibGUoJyVzXyVzJyAlIChzZWxmLnF1YWxpZmllZF90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlWydydWxlX25hbWUnXSkpCi0gICAgICBzZWxmLldyaXRlTG4oJ1xuIyMjIEdlbmVyYXRlZCBmb3IgcnVsZSAiJXMiOicgJSBuYW1lKQotICAgICAgc2VsZi5Xcml0ZUxuKCcjICIlcyI6JyAlIHJ1bGUpCi0KLSAgICAgIGlucHV0cyA9IHJ1bGUuZ2V0KCdpbnB1dHMnKQotICAgICAgZm9yIHJ1bGVfc291cmNlIGluIHJ1bGUuZ2V0KCdydWxlX3NvdXJjZXMnLCBbXSk6Ci0gICAgICAgIChydWxlX3NvdXJjZV9kaXJuYW1lLCBydWxlX3NvdXJjZV9iYXNlbmFtZSkgPSBvcy5wYXRoLnNwbGl0KHJ1bGVfc291cmNlKQotICAgICAgICAocnVsZV9zb3VyY2Vfcm9vdCwgcnVsZV9zb3VyY2VfZXh0KSA9IFwKLSAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQocnVsZV9zb3VyY2VfYmFzZW5hbWUpCi0KLSAgICAgICAgb3V0cHV0cyA9IFtzZWxmLkV4cGFuZElucHV0Um9vdChvdXQsIHJ1bGVfc291cmNlX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZV9zb3VyY2VfZGlybmFtZSkKLSAgICAgICAgICAgICAgICAgICBmb3Igb3V0IGluIHJ1bGVbJ291dHB1dHMnXV0KLQotICAgICAgICBkaXJzID0gc2V0KCkKLSAgICAgICAgZm9yIG91dCBpbiBvdXRwdXRzOgotICAgICAgICAgIGlmIG5vdCBvdXQuc3RhcnRzd2l0aCgnJCcpOgotICAgICAgICAgICAgcHJpbnQgKCdXQVJOSU5HOiBSdWxlIGZvciB0YXJnZXQgJXMgd3JpdGVzIG91dHB1dCB0byBsb2NhbCBwYXRoICVzJwotICAgICAgICAgICAgICAgICAgICUgKHNlbGYudGFyZ2V0LCBvdXQpKQotICAgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShvdXQpCi0gICAgICAgICAgaWYgZGlyOgotICAgICAgICAgICAgZGlycy5hZGQoZGlyKQotICAgICAgICBleHRyYV9vdXRwdXRzICs9IG91dHB1dHMKLSAgICAgICAgaWYgaW50KHJ1bGUuZ2V0KCdwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgICAgZXh0cmFfc291cmNlcy5leHRlbmQob3V0cHV0cykKLQotICAgICAgICBjb21wb25lbnRzID0gW10KLSAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBydWxlWydhY3Rpb24nXToKLSAgICAgICAgICBjb21wb25lbnQgPSBzZWxmLkV4cGFuZElucHV0Um9vdChjb21wb25lbnQsIHJ1bGVfc291cmNlX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZV9zb3VyY2VfZGlybmFtZSkKLSAgICAgICAgICBpZiAnJChSVUxFX1NPVVJDRVMpJyBpbiBjb21wb25lbnQ6Ci0gICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgnJChSVUxFX1NPVVJDRVMpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVfc291cmNlKQotICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKGNvbXBvbmVudCkKLQotICAgICAgICBjb21tYW5kID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChjb21wb25lbnRzKQotICAgICAgICBjZF9hY3Rpb24gPSAnY2QgJChneXBfbG9jYWxfcGF0aCkvJXM7ICcgJSBzZWxmLnBhdGgKLSAgICAgICAgY29tbWFuZCA9IGNkX2FjdGlvbiArIGNvbW1hbmQKLSAgICAgICAgaWYgZGlyczoKLSAgICAgICAgICBjb21tYW5kID0gJ21rZGlyIC1wICVzJyAlICcgJy5qb2luKGRpcnMpICsgJzsgJyArIGNvbW1hbmQKLQotICAgICAgICAjIFdlIHNldCB1cCBhIHJ1bGUgdG8gYnVpbGQgdGhlIGZpcnN0IG91dHB1dCwgYW5kIHRoZW4gc2V0IHVwCi0gICAgICAgICMgYSBydWxlIGZvciBlYWNoIGFkZGl0aW9uYWwgb3V0cHV0IHRvIGRlcGVuZCBvbiB0aGUgZmlyc3QuCi0gICAgICAgIG91dHB1dHMgPSBtYXAoc2VsZi5Mb2NhbFBhdGhpZnksIG91dHB1dHMpCi0gICAgICAgIG1haW5fb3V0cHV0ID0gb3V0cHV0c1swXQotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiBneXBfbG9jYWxfcGF0aCA6PSAkKExPQ0FMX1BBVEgpJyAlIG1haW5fb3V0cHV0KQotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiBneXBfaW50ZXJtZWRpYXRlX2RpciA6PSAnCi0gICAgICAgICAgICAgICAgICAgICAnJChHWVBfQUJTX0FORFJPSURfVE9QX0RJUikvJChneXBfaW50ZXJtZWRpYXRlX2RpciknCi0gICAgICAgICAgICAgICAgICAgICAlIG1haW5fb3V0cHV0KQotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiBneXBfc2hhcmVkX2ludGVybWVkaWF0ZV9kaXIgOj0gJwotICAgICAgICAgICAgICAgICAgICAgJyQoR1lQX0FCU19BTkRST0lEX1RPUF9ESVIpLyQoZ3lwX3NoYXJlZF9pbnRlcm1lZGlhdGVfZGlyKScKLSAgICAgICAgICAgICAgICAgICAgICUgbWFpbl9vdXRwdXQpCi0KLSAgICAgICAgbWFpbl9vdXRwdXRfZGVwcyA9IHNlbGYuTG9jYWxQYXRoaWZ5KHJ1bGVfc291cmNlKQotICAgICAgICBpZiBpbnB1dHM6Ci0gICAgICAgICAgbWFpbl9vdXRwdXRfZGVwcyArPSAnICcKLSAgICAgICAgICBtYWluX291dHB1dF9kZXBzICs9ICcgJy5qb2luKFtzZWxmLkxvY2FsUGF0aGlmeShmKSBmb3IgZiBpbiBpbnB1dHNdKQotCi0gICAgICAgIHNlbGYuV3JpdGVMbignJXM6ICVzICQoR1lQX1RBUkdFVF9ERVBFTkRFTkNJRVMpJyAlCi0gICAgICAgICAgICAgICAgICAgICAobWFpbl9vdXRwdXQsIG1haW5fb3V0cHV0X2RlcHMpKQotICAgICAgICBzZWxmLldyaXRlTG4oJ1x0JXNcbicgJSBjb21tYW5kKQotICAgICAgICBmb3Igb3V0cHV0IGluIG91dHB1dHNbMTpdOgotICAgICAgICAgIHNlbGYuV3JpdGVMbignJXM6ICVzJyAlIChvdXRwdXQsIG1haW5fb3V0cHV0KSkKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCcuUEhPTlk6ICVzJyAlIChydWxlX3RyaWdnZXIpKQotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiAlcycgJSAocnVsZV90cmlnZ2VyLCBtYWluX291dHB1dCkpCi0gICAgICAgIHNlbGYuV3JpdGVMbignJykKLSAgICBpZiBkaWRfd3JpdGVfcnVsZToKLSAgICAgIGV4dHJhX3NvdXJjZXMuYXBwZW5kKHJ1bGVfdHJpZ2dlcikgICMgRm9yY2UgYWxsIHJ1bGVzIHRvIHJ1bi4KLSAgICAgIHNlbGYuV3JpdGVMbignIyMjIEZpbmlzaGVkIGdlbmVyYXRpbmcgZm9yIGFsbCBydWxlcycpCi0gICAgICBzZWxmLldyaXRlTG4oJycpCi0KLQotICBkZWYgV3JpdGVDb3BpZXMoc2VsZiwgY29waWVzLCBleHRyYV9vdXRwdXRzKToKLSAgICAiIiJXcml0ZSBNYWtlZmlsZSBjb2RlIGZvciBhbnkgJ2NvcGllcycgZnJvbSB0aGUgZ3lwIGlucHV0LgotCi0gICAgZXh0cmFfb3V0cHV0czogYSBsaXN0IHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBhbnkgb3V0cHV0cyBvZiB0aGlzIGFjdGlvbgotICAgICAgICAgICAgICAgICAgICh1c2VkIHRvIG1ha2Ugb3RoZXIgcGllY2VzIGRlcGVuZGVudCBvbiB0aGlzIGFjdGlvbikKLSAgICAiIiIKLSAgICBzZWxmLldyaXRlTG4oJyMjIyBHZW5lcmF0ZWQgZm9yIGNvcHkgcnVsZS4nKQotCi0gICAgdmFyaWFibGUgPSBtYWtlLlN0cmluZ1RvTWFrZWZpbGVWYXJpYWJsZShzZWxmLnF1YWxpZmllZF90YXJnZXQgKyAnX2NvcGllcycpCi0gICAgb3V0cHV0cyA9IFtdCi0gICAgZm9yIGNvcHkgaW4gY29waWVzOgotICAgICAgZm9yIHBhdGggaW4gY29weVsnZmlsZXMnXToKLSAgICAgICAgIyBUaGUgQW5kcm9pZCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgYWxsb3cgZ2VuZXJhdGlvbiBvZiBmaWxlcyBpbnRvIHRoZQotICAgICAgICAjIHNvdXJjZSB0cmVlLiBUaGUgZGVzdGluYXRpb24gc2hvdWxkIHN0YXJ0IHdpdGggYSB2YXJpYWJsZSwgd2hpY2ggd2lsbAotICAgICAgICAjIHR5cGljYWxseSBiZSAkKGd5cF9pbnRlcm1lZGlhdGVfZGlyKSBvcgotICAgICAgICAjICQoZ3lwX3NoYXJlZF9pbnRlcm1lZGlhdGVfZGlyKS4gTm90ZSB0aGF0IHdlIGNhbid0IHVzZSBhbiBhc3NlcnRpb24KLSAgICAgICAgIyBiZWNhdXNlIHNvbWUgb2YgdGhlIGd5cCB0ZXN0cyBkZXBlbmQgb24gdGhpcy4KLSAgICAgICAgaWYgbm90IGNvcHlbJ2Rlc3RpbmF0aW9uJ10uc3RhcnRzd2l0aCgnJCcpOgotICAgICAgICAgIHByaW50ICgnV0FSTklORzogQ29weSBydWxlIGZvciB0YXJnZXQgJXMgd3JpdGVzIG91dHB1dCB0byAnCi0gICAgICAgICAgICAgICAgICdsb2NhbCBwYXRoICVzJyAlIChzZWxmLnRhcmdldCwgY29weVsnZGVzdGluYXRpb24nXSkpCi0KLSAgICAgICAgIyBMb2NhbFBhdGhpZnkoKSBjYWxscyBub3JtcGF0aCwgc3RyaXBwaW5nIHRyYWlsaW5nIHNsYXNoZXMuCi0gICAgICAgIHBhdGggPSBTb3VyY2VpZnkoc2VsZi5Mb2NhbFBhdGhpZnkocGF0aCkpCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdChwYXRoKVsxXQotICAgICAgICBvdXRwdXQgPSBTb3VyY2VpZnkoc2VsZi5Mb2NhbFBhdGhpZnkob3MucGF0aC5qb2luKGNvcHlbJ2Rlc3RpbmF0aW9uJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKSkKLQotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiAlcyAkKEdZUF9UQVJHRVRfREVQRU5ERU5DSUVTKSB8ICQoQUNQKScgJQotICAgICAgICAgICAgICAgICAgICAgKG91dHB1dCwgcGF0aCkpCi0gICAgICAgIHNlbGYuV3JpdGVMbignXHRAZWNobyBDb3B5aW5nOiAkQCcpCi0gICAgICAgIHNlbGYuV3JpdGVMbignXHQkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKScpCi0gICAgICAgIHNlbGYuV3JpdGVMbignXHQkKGhpZGUpICQoQUNQKSAtciAkPCAkQCcpCi0gICAgICAgIHNlbGYuV3JpdGVMbigpCi0gICAgICAgIG91dHB1dHMuYXBwZW5kKG91dHB1dCkKLSAgICBzZWxmLldyaXRlTG4oJyVzID0gJXMnICUgKHZhcmlhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnLmpvaW4obWFwKG1ha2UuUXVvdGVTcGFjZXMsIG91dHB1dHMpKSkpCi0gICAgZXh0cmFfb3V0cHV0cy5hcHBlbmQoJyQoJXMpJyAlIHZhcmlhYmxlKQotICAgIHNlbGYuV3JpdGVMbigpCi0KLQotICBkZWYgV3JpdGVTb3VyY2VGbGFncyhzZWxmLCBzcGVjLCBjb25maWdzKToKLSAgICAiIiJXcml0ZSBvdXQgdGhlIGZsYWdzIGFuZCBpbmNsdWRlIHBhdGhzIHVzZWQgdG8gY29tcGlsZSBzb3VyY2UgZmlsZXMgZm9yCi0gICAgdGhlIGN1cnJlbnQgdGFyZ2V0LgotCi0gICAgQXJnczoKLSAgICAgIHNwZWMsIGNvbmZpZ3M6IGlucHV0IGZyb20gZ3lwLgotICAgICIiIgotICAgIGNvbmZpZyA9IGNvbmZpZ3Nbc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ11dCi0gICAgZXh0cmFjdGVkX2luY2x1ZGVzID0gW10KLQotICAgIHNlbGYuV3JpdGVMbignXG4jIEZsYWdzIHBhc3NlZCB0byBib3RoIEMgYW5kIEMrKyBmaWxlcy4nKQotICAgIGNmbGFncywgaW5jbHVkZXNfZnJvbV9jZmxhZ3MgPSBzZWxmLkV4dHJhY3RJbmNsdWRlc0Zyb21DRmxhZ3MoCi0gICAgICAgIGNvbmZpZy5nZXQoJ2NmbGFncycpKQotICAgIGV4dHJhY3RlZF9pbmNsdWRlcy5leHRlbmQoaW5jbHVkZXNfZnJvbV9jZmxhZ3MpCi0gICAgc2VsZi5Xcml0ZUxpc3QoY2ZsYWdzLCAnTVlfQ0ZMQUdTJykKLQotICAgIGNmbGFnc19jLCBpbmNsdWRlc19mcm9tX2NmbGFnc19jID0gc2VsZi5FeHRyYWN0SW5jbHVkZXNGcm9tQ0ZsYWdzKAotICAgICAgICBjb25maWcuZ2V0KCdjZmxhZ3NfYycpKQotICAgIGV4dHJhY3RlZF9pbmNsdWRlcy5leHRlbmQoaW5jbHVkZXNfZnJvbV9jZmxhZ3NfYykKLSAgICBzZWxmLldyaXRlTGlzdChjZmxhZ3NfYywgJ01ZX0NGTEFHU19DJykKLQotICAgIHNlbGYuV3JpdGVMaXN0KGNvbmZpZy5nZXQoJ2RlZmluZXMnKSwgJ01ZX0RFRlMnLCBwcmVmaXg9Jy1EJywKLSAgICAgICAgICAgICAgICAgICBxdW90ZXI9bWFrZS5Fc2NhcGVDcHBEZWZpbmUpCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9DRkxBR1MgOj0gJChNWV9DRkxBR1NfQykgJChNWV9DRkxBR1MpICQoTVlfREVGUyknKQotCi0gICAgIyBVbmRlZmluZSBBTkRST0lEIGZvciBob3N0IG1vZHVsZXMKLSAgICAjIFRPRE86IHRoZSBzb3VyY2UgY29kZSBzaG91bGQgbm90IHVzZSBtYWNybyBBTkRST0lEIHRvIHRlbGwgaWYgaXQncyBob3N0IG9yCi0gICAgIyB0YXJnZXQgbW9kdWxlLgotICAgIGlmIHNlbGYudG9vbHNldCA9PSAnaG9zdCc6Ci0gICAgICBzZWxmLldyaXRlTG4oJyMgVW5kZWZpbmUgQU5EUk9JRCBmb3IgaG9zdCBtb2R1bGVzJykKLSAgICAgIHNlbGYuV3JpdGVMbignTE9DQUxfQ0ZMQUdTICs9IC1VQU5EUk9JRCcpCi0KLSAgICBzZWxmLldyaXRlTG4oJ1xuIyBJbmNsdWRlIHBhdGhzIHBsYWNlZCBiZWZvcmUgQ0ZMQUdTL0NQUEZMQUdTJykKLSAgICBpbmNsdWRlcyA9IGxpc3QoY29uZmlnLmdldCgnaW5jbHVkZV9kaXJzJywgW10pKQotICAgIGluY2x1ZGVzLmV4dGVuZChleHRyYWN0ZWRfaW5jbHVkZXMpCi0gICAgaW5jbHVkZXMgPSBtYXAoU291cmNlaWZ5LCBtYXAoc2VsZi5Mb2NhbFBhdGhpZnksIGluY2x1ZGVzKSkKLSAgICBpbmNsdWRlcyA9IHNlbGYuTm9ybWFsaXplSW5jbHVkZVBhdGhzKGluY2x1ZGVzKQotICAgIHNlbGYuV3JpdGVMaXN0KGluY2x1ZGVzLCAnTE9DQUxfQ19JTkNMVURFUycpCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9DX0lOQ0xVREVTIDo9ICQoR1lQX0NPUElFRF9TT1VSQ0VfT1JJR0lOX0RJUlMpICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJChMT0NBTF9DX0lOQ0xVREVTKScpCi0KLSAgICBzZWxmLldyaXRlTG4oJ1xuIyBGbGFncyBwYXNzZWQgdG8gb25seSBDKysgKGFuZCBub3QgQykgZmlsZXMuJykKLSAgICBzZWxmLldyaXRlTGlzdChjb25maWcuZ2V0KCdjZmxhZ3NfY2MnKSwgJ0xPQ0FMX0NQUEZMQUdTJykKLQotCi0gIGRlZiBXcml0ZVNvdXJjZXMoc2VsZiwgc3BlYywgY29uZmlncywgZXh0cmFfc291cmNlcyk6Ci0gICAgIiIiV3JpdGUgTWFrZWZpbGUgY29kZSBmb3IgYW55ICdzb3VyY2VzJyBmcm9tIHRoZSBneXAgaW5wdXQuCi0gICAgVGhlc2UgYXJlIHNvdXJjZSBmaWxlcyBuZWNlc3NhcnkgdG8gYnVpbGQgdGhlIGN1cnJlbnQgdGFyZ2V0LgotICAgIFdlIG5lZWQgdG8gaGFuZGxlIHNoYXJlZF9pbnRlcm1lZGlhdGUgZGlyZWN0b3J5IHNvdXJjZSBmaWxlcyBhcwotICAgIGEgc3BlY2lhbCBjYXNlIGJ5IGNvcHlpbmcgdGhlbSB0byB0aGUgaW50ZXJtZWRpYXRlIGRpcmVjdG9yeSBhbmQKLSAgICB0cmVhdGluZyB0aGVtIGFzIGEgZ2VuZXJlYXRlZCBzb3VyY2VzLiBPdGhlcndpc2UgdGhlIEFuZHJvaWQgYnVpbGQKLSAgICBydWxlcyB3b24ndCBwaWNrIHRoZW0gdXAuCi0KLSAgICBBcmdzOgotICAgICAgc3BlYywgY29uZmlnczogaW5wdXQgZnJvbSBneXAuCi0gICAgICBleHRyYV9zb3VyY2VzOiBTb3VyY2VzIGdlbmVyYXRlZCBmcm9tIEFjdGlvbnMgb3IgUnVsZXMuCi0gICAgIiIiCi0gICAgc291cmNlcyA9IGZpbHRlcihtYWtlLkNvbXBpbGFibGUsIHNwZWMuZ2V0KCdzb3VyY2VzJywgW10pKQotICAgIGdlbmVyYXRlZF9ub3Rfc291cmNlcyA9IFt4IGZvciB4IGluIGV4dHJhX3NvdXJjZXMgaWYgbm90IG1ha2UuQ29tcGlsYWJsZSh4KV0KLSAgICBleHRyYV9zb3VyY2VzID0gZmlsdGVyKG1ha2UuQ29tcGlsYWJsZSwgZXh0cmFfc291cmNlcykKLQotICAgICMgRGV0ZXJtaW5lIGFuZCBvdXRwdXQgdGhlIEMrKyBleHRlbnNpb24gdXNlZCBieSB0aGVzZSBzb3VyY2VzLgotICAgICMgV2Ugc2ltcGx5IGZpbmQgdGhlIGZpcnN0IEMrKyBmaWxlIGFuZCB1c2UgdGhhdCBleHRlbnNpb24uCi0gICAgYWxsX3NvdXJjZXMgPSBzb3VyY2VzICsgZXh0cmFfc291cmNlcwotICAgIGxvY2FsX2NwcF9leHRlbnNpb24gPSAnLmNwcCcKLSAgICBmb3Igc291cmNlIGluIGFsbF9zb3VyY2VzOgotICAgICAgKHJvb3QsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KHNvdXJjZSkKLSAgICAgIGlmIElzQ1BQRXh0ZW5zaW9uKGV4dCk6Ci0gICAgICAgIGxvY2FsX2NwcF9leHRlbnNpb24gPSBleHQKLSAgICAgICAgYnJlYWsKLSAgICBpZiBsb2NhbF9jcHBfZXh0ZW5zaW9uICE9ICcuY3BwJzoKLSAgICAgIHNlbGYuV3JpdGVMbignTE9DQUxfQ1BQX0VYVEVOU0lPTiA6PSAlcycgJSBsb2NhbF9jcHBfZXh0ZW5zaW9uKQotCi0gICAgIyBXZSBuZWVkIHRvIG1vdmUgYW55IG5vbi1nZW5lcmF0ZWQgc291cmNlcyB0aGF0IGFyZSBjb21pbmcgZnJvbSB0aGUKLSAgICAjIHNoYXJlZCBpbnRlcm1lZGlhdGUgZGlyZWN0b3J5IG91dCBvZiBMT0NBTF9TUkNfRklMRVMgYW5kIHB1dCB0aGVtCi0gICAgIyBpbnRvIExPQ0FMX0dFTkVSQVRFRF9TT1VSQ0VTLiBXZSBhbHNvIG5lZWQgdG8gbW92ZSBvdmVyIGFueSBDKysgZmlsZXMKLSAgICAjIHRoYXQgZG9uJ3QgbWF0Y2ggb3VyIGxvY2FsX2NwcF9leHRlbnNpb24sIHNpbmNlIEFuZHJvaWQgd2lsbCBvbmx5Ci0gICAgIyBnZW5lcmF0ZSBNYWtlZmlsZSBydWxlcyBmb3IgYSBzaW5nbGUgTE9DQUxfQ1BQX0VYVEVOU0lPTi4KLSAgICBsb2NhbF9maWxlcyA9IFtdCi0gICAgZm9yIHNvdXJjZSBpbiBzb3VyY2VzOgotICAgICAgKHJvb3QsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KHNvdXJjZSkKLSAgICAgIGlmICckKGd5cF9zaGFyZWRfaW50ZXJtZWRpYXRlX2RpciknIGluIHNvdXJjZToKLSAgICAgICAgZXh0cmFfc291cmNlcy5hcHBlbmQoc291cmNlKQotICAgICAgZWxpZiAnJChneXBfaW50ZXJtZWRpYXRlX2RpciknIGluIHNvdXJjZToKLSAgICAgICAgZXh0cmFfc291cmNlcy5hcHBlbmQoc291cmNlKQotICAgICAgZWxpZiBJc0NQUEV4dGVuc2lvbihleHQpIGFuZCBleHQgIT0gbG9jYWxfY3BwX2V4dGVuc2lvbjoKLSAgICAgICAgZXh0cmFfc291cmNlcy5hcHBlbmQoc291cmNlKQotICAgICAgZWxzZToKLSAgICAgICAgbG9jYWxfZmlsZXMuYXBwZW5kKG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYucGF0aCwgc291cmNlKSkpCi0KLSAgICAjIEZvciBhbnkgZ2VuZXJhdGVkIHNvdXJjZSwgaWYgaXQgaXMgY29taW5nIGZyb20gdGhlIHNoYXJlZCBpbnRlcm1lZGlhdGUKLSAgICAjIGRpcmVjdG9yeSB0aGVuIHdlIGFkZCBhIE1ha2UgcnVsZSB0byBjb3B5IHRoZW0gdG8gdGhlIGxvY2FsIGludGVybWVkaWF0ZQotICAgICMgZGlyZWN0b3J5IGZpcnN0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIEFuZHJvaWQgTE9DQUxfR0VORVJBVEVEX1NPVVJDRVMKLSAgICAjIG11c3QgYmUgaW4gdGhlIGxvY2FsIG1vZHVsZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3J5IGZvciB0aGUgY29tcGlsZSBydWxlcwotICAgICMgdG8gd29yayBwcm9wZXJseS4gSWYgdGhlIGZpbGUgaGFzIHRoZSB3cm9uZyBDKysgZXh0ZW5zaW9uLCB0aGVuIHdlIGFkZAotICAgICMgYSBydWxlIHRvIGNvcHkgdGhhdCB0byBpbnRlcm1lZGlhdGVzIGFuZCB1c2UgdGhlIG5ldyB2ZXJzaW9uLgotICAgIGZpbmFsX2dlbmVyYXRlZF9zb3VyY2VzID0gW10KLSAgICAjIElmIGEgc291cmNlIGZpbGUgZ2V0cyBjb3BpZWQsIHdlIHN0aWxsIG5lZWQgdG8gYWRkIHRoZSBvcmdpbmFsIHNvdXJjZQotICAgICMgZGlyZWN0b3J5IGFzIGhlYWRlciBzZWFyY2ggcGF0aCwgZm9yIEdDQyBzZWFyY2hlcyBoZWFkZXJzIGluIHRoZQotICAgICMgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBmaWxlIGJ5IGRlZmF1bHQuCi0gICAgb3JpZ2luX3NyY19kaXJzID0gW10KLSAgICBmb3Igc291cmNlIGluIGV4dHJhX3NvdXJjZXM6Ci0gICAgICBsb2NhbF9maWxlID0gc291cmNlCi0gICAgICBpZiBub3QgJyQoZ3lwX2ludGVybWVkaWF0ZV9kaXIpLycgaW4gbG9jYWxfZmlsZToKLSAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsX2ZpbGUpCi0gICAgICAgIGxvY2FsX2ZpbGUgPSAnJChneXBfaW50ZXJtZWRpYXRlX2RpcikvJyArIGJhc2VuYW1lCi0gICAgICAocm9vdCwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQobG9jYWxfZmlsZSkKLSAgICAgIGlmIElzQ1BQRXh0ZW5zaW9uKGV4dCkgYW5kIGV4dCAhPSBsb2NhbF9jcHBfZXh0ZW5zaW9uOgotICAgICAgICBsb2NhbF9maWxlID0gcm9vdCArIGxvY2FsX2NwcF9leHRlbnNpb24KLSAgICAgIGlmIGxvY2FsX2ZpbGUgIT0gc291cmNlOgotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiAlcycgJSAobG9jYWxfZmlsZSwgc2VsZi5Mb2NhbFBhdGhpZnkoc291cmNlKSkpCi0gICAgICAgIHNlbGYuV3JpdGVMbignXHRta2RpciAtcCAkKEBEKTsgY3AgJDwgJEAnKQotICAgICAgICBvcmlnaW5fc3JjX2RpcnMuYXBwZW5kKG9zLnBhdGguZGlybmFtZShzb3VyY2UpKQotICAgICAgZmluYWxfZ2VuZXJhdGVkX3NvdXJjZXMuYXBwZW5kKGxvY2FsX2ZpbGUpCi0KLSAgICAjIFdlIGFkZCBiYWNrIGluIGFsbCBvZiB0aGUgbm9uLWNvbXBpbGFibGUgc3R1ZmYgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0gICAgIyBtYWtlIHJ1bGVzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIHRoZW0uCi0gICAgZmluYWxfZ2VuZXJhdGVkX3NvdXJjZXMuZXh0ZW5kKGdlbmVyYXRlZF9ub3Rfc291cmNlcykKLSAgICBzZWxmLldyaXRlTGlzdChmaW5hbF9nZW5lcmF0ZWRfc291cmNlcywgJ0xPQ0FMX0dFTkVSQVRFRF9TT1VSQ0VTJykKLQotICAgIG9yaWdpbl9zcmNfZGlycyA9IGd5cC5jb21tb24udW5pcXVlcihvcmlnaW5fc3JjX2RpcnMpCi0gICAgb3JpZ2luX3NyY19kaXJzID0gbWFwKFNvdXJjZWlmeSwgbWFwKHNlbGYuTG9jYWxQYXRoaWZ5LCBvcmlnaW5fc3JjX2RpcnMpKQotICAgIHNlbGYuV3JpdGVMaXN0KG9yaWdpbl9zcmNfZGlycywgJ0dZUF9DT1BJRURfU09VUkNFX09SSUdJTl9ESVJTJykKLQotICAgIHNlbGYuV3JpdGVMaXN0KGxvY2FsX2ZpbGVzLCAnTE9DQUxfU1JDX0ZJTEVTJykKLQotICAgICMgV3JpdGUgb3V0IHRoZSBmbGFncyB1c2VkIHRvIGNvbXBpbGUgdGhlIHNvdXJjZTsgdGhpcyBtdXN0IGJlIGRvbmUgbGFzdAotICAgICMgc28gdGhhdCBHWVBfQ09QSUVEX1NPVVJDRV9PUklHSU5fRElSUyBjYW4gYmUgdXNlZCBhcyBhbiBpbmNsdWRlIHBhdGguCi0gICAgc2VsZi5Xcml0ZVNvdXJjZUZsYWdzKHNwZWMsIGNvbmZpZ3MpCi0KLQotICBkZWYgQ29tcHV0ZUFuZHJvaWRNb2R1bGUoc2VsZiwgc3BlYyk6Ci0gICAgIiIiUmV0dXJuIHRoZSBBbmRyb2lkIG1vZHVsZSBuYW1lIHVzZWQgZm9yIGEgZ3lwIHNwZWMuCi0KLSAgICBXZSB1c2UgdGhlIGNvbXBsZXRlIHF1YWxpZmllZCB0YXJnZXQgbmFtZSB0byBhdm9pZCBjb2xsaXNpb25zIGJldHdlZW4KLSAgICBkdXBsaWNhdGUgdGFyZ2V0cyBpbiBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIFdlIGFsc28gYWRkIGEgc3VmZml4IHRvCi0gICAgZGlzdGluZ3Vpc2ggZ3lwLWdlbmVyYXRlZCBtb2R1bGUgbmFtZXMuCi0gICAgIiIiCi0KLSAgICBpZiBpbnQoc3BlYy5nZXQoJ2FuZHJvaWRfdW5tYW5nbGVkX25hbWUnLCAwKSk6Ci0gICAgICBhc3NlcnQgc2VsZi50eXBlICE9ICdzaGFyZWRfbGlicmFyeScgb3Igc2VsZi50YXJnZXQuc3RhcnRzd2l0aCgnbGliJykKLSAgICAgIHJldHVybiBzZWxmLnRhcmdldAotCi0gICAgaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICAjIEZvciByZWFzb25zIG9mIGNvbnZlbnRpb24sIHRoZSBBbmRyb2lkIGJ1aWxkIHN5c3RlbSByZXF1aXJlcyB0aGF0IGFsbAotICAgICAgIyBzaGFyZWQgbGlicmFyeSBtb2R1bGVzIGFyZSBuYW1lZCAnbGliZm9vJyB3aGVuIGdlbmVyYXRpbmcgLWwgZmxhZ3MuCi0gICAgICBwcmVmaXggPSAnbGliXycKLSAgICBlbHNlOgotICAgICAgcHJlZml4ID0gJycKLQotICAgIGlmIHNwZWNbJ3Rvb2xzZXQnXSA9PSAnaG9zdCc6Ci0gICAgICBzdWZmaXggPSAnX2hvc3RfZ3lwJwotICAgIGVsc2U6Ci0gICAgICBzdWZmaXggPSAnX2d5cCcKLQotICAgIGlmIHNlbGYucGF0aDoKLSAgICAgIG5hbWUgPSAnJXMlc18lcyVzJyAlIChwcmVmaXgsIHNlbGYucGF0aCwgc2VsZi50YXJnZXQsIHN1ZmZpeCkKLSAgICBlbHNlOgotICAgICAgbmFtZSA9ICclcyVzJXMnICUgKHByZWZpeCwgc2VsZi50YXJnZXQsIHN1ZmZpeCkKLQotICAgIHJldHVybiBtYWtlLlN0cmluZ1RvTWFrZWZpbGVWYXJpYWJsZShuYW1lKQotCi0KLSAgZGVmIENvbXB1dGVPdXRwdXRQYXJ0cyhzZWxmLCBzcGVjKToKLSAgICAiIiJSZXR1cm4gdGhlICdvdXRwdXQgYmFzZW5hbWUnIG9mIGEgZ3lwIHNwZWMsIHNwbGl0IGludG8gZmlsZW5hbWUgKyBleHQuCi0KLSAgICBBbmRyb2lkIGxpYnJhcmllcyBtdXN0IGJlIG5hbWVkIHRoZSBzYW1lIHRoaW5nIGFzIHRoZWlyIG1vZHVsZSBuYW1lLAotICAgIG90aGVyd2lzZSB0aGUgbGlua2VyIGNhbid0IGZpbmQgdGhlbSwgc28gcHJvZHVjdF9uYW1lIGFuZCBzbyBvbiBtdXN0IGJlCi0gICAgaWdub3JlZCBpZiB3ZSBhcmUgYnVpbGRpbmcgYSBsaWJyYXJ5LCBhbmQgdGhlICJsaWIiIHByZXBlbmRpbmcgaXMKLSAgICBub3QgZG9uZSBmb3IgQW5kcm9pZC4KLSAgICAiIiIKLSAgICBhc3NlcnQgc2VsZi50eXBlICE9ICdsb2FkYWJsZV9tb2R1bGUnICMgVE9ETzogbm90IHN1cHBvcnRlZD8KLQotICAgIHRhcmdldCA9IHNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICB0YXJnZXRfcHJlZml4ID0gJycKLSAgICB0YXJnZXRfZXh0ID0gJycKLSAgICBpZiBzZWxmLnR5cGUgPT0gJ3N0YXRpY19saWJyYXJ5JzoKLSAgICAgIHRhcmdldCA9IHNlbGYuQ29tcHV0ZUFuZHJvaWRNb2R1bGUoc3BlYykKLSAgICAgIHRhcmdldF9leHQgPSAnLmEnCi0gICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3NoYXJlZF9saWJyYXJ5JzoKLSAgICAgIHRhcmdldCA9IHNlbGYuQ29tcHV0ZUFuZHJvaWRNb2R1bGUoc3BlYykKLSAgICAgIHRhcmdldF9leHQgPSAnLnNvJwotICAgIGVsaWYgc2VsZi50eXBlID09ICdub25lJzoKLSAgICAgIHRhcmdldF9leHQgPSAnLnN0YW1wJwotICAgIGVsaWYgc2VsZi50eXBlICE9ICdleGVjdXRhYmxlJzoKLSAgICAgIHByaW50ICgiRVJST1I6IFdoYXQgb3V0cHV0IGZpbGUgc2hvdWxkIGJlIGdlbmVyYXRlZD8iLAotICAgICAgICAgICAgICJ0eXBlIiwgc2VsZi50eXBlLCAidGFyZ2V0IiwgdGFyZ2V0KQotCi0gICAgaWYgc2VsZi50eXBlICE9ICdzdGF0aWNfbGlicmFyeScgYW5kIHNlbGYudHlwZSAhPSAnc2hhcmVkX2xpYnJhcnknOgotICAgICAgdGFyZ2V0X3ByZWZpeCA9IHNwZWMuZ2V0KCdwcm9kdWN0X3ByZWZpeCcsIHRhcmdldF9wcmVmaXgpCi0gICAgICB0YXJnZXQgPSBzcGVjLmdldCgncHJvZHVjdF9uYW1lJywgdGFyZ2V0KQotICAgICAgcHJvZHVjdF9leHQgPSBzcGVjLmdldCgncHJvZHVjdF9leHRlbnNpb24nKQotICAgICAgaWYgcHJvZHVjdF9leHQ6Ci0gICAgICAgIHRhcmdldF9leHQgPSAnLicgKyBwcm9kdWN0X2V4dAotCi0gICAgdGFyZ2V0X3N0ZW0gPSB0YXJnZXRfcHJlZml4ICsgdGFyZ2V0Ci0gICAgcmV0dXJuICh0YXJnZXRfc3RlbSwgdGFyZ2V0X2V4dCkKLQotCi0gIGRlZiBDb21wdXRlT3V0cHV0QmFzZW5hbWUoc2VsZiwgc3BlYyk6Ci0gICAgIiIiUmV0dXJuIHRoZSAnb3V0cHV0IGJhc2VuYW1lJyBvZiBhIGd5cCBzcGVjLgotCi0gICAgRS5nLiwgdGhlIGxvYWRhYmxlIG1vZHVsZSAnZm9vYmFyJyBpbiBkaXJlY3RvcnkgJ2Jheicgd2lsbCBwcm9kdWNlCi0gICAgICAnbGliZm9vYmFyLnNvJwotICAgICIiIgotICAgIHJldHVybiAnJy5qb2luKHNlbGYuQ29tcHV0ZU91dHB1dFBhcnRzKHNwZWMpKQotCi0KLSAgZGVmIENvbXB1dGVPdXRwdXQoc2VsZiwgc3BlYyk6Ci0gICAgIiIiUmV0dXJuIHRoZSAnb3V0cHV0JyAoZnVsbCBvdXRwdXQgcGF0aCkgb2YgYSBneXAgc3BlYy4KLQotICAgIEUuZy4sIHRoZSBsb2FkYWJsZSBtb2R1bGUgJ2Zvb2JhcicgaW4gZGlyZWN0b3J5ICdiYXonIHdpbGwgcHJvZHVjZQotICAgICAgJyQob2JqKS9iYXovbGliZm9vYmFyLnNvJwotICAgICIiIgotICAgIGlmIHNlbGYudHlwZSA9PSAnZXhlY3V0YWJsZScgYW5kIHNlbGYudG9vbHNldCA9PSAnaG9zdCc6Ci0gICAgICAjIFdlIGluc3RhbGwgaG9zdCBleGVjdXRhYmxlcyBpbnRvIHNoYXJlZF9pbnRlcm1lZGlhdGVfZGlyIHNvIHRoZXkgY2FuIGJlCi0gICAgICAjIHJ1biBieSBneXAgcnVsZXMgdGhhdCByZWZlciB0byBQUk9EVUNUX0RJUi4KLSAgICAgIHBhdGggPSAnJChneXBfc2hhcmVkX2ludGVybWVkaWF0ZV9kaXIpJwotICAgIGVsaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICBpZiBzZWxmLnRvb2xzZXQgPT0gJ2hvc3QnOgotICAgICAgICBwYXRoID0gJyQoSE9TVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUyknCi0gICAgICBlbHNlOgotICAgICAgICBwYXRoID0gJyQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKScKLSAgICBlbHNlOgotICAgICAgIyBPdGhlciB0YXJnZXRzIGp1c3QgZ2V0IGJ1aWx0IGludG8gdGhlaXIgaW50ZXJtZWRpYXRlIGRpci4KLSAgICAgIGlmIHNlbGYudG9vbHNldCA9PSAnaG9zdCc6Ci0gICAgICAgIHBhdGggPSAnJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvciwlcywlcyx0cnVlKScgJSAoc2VsZi5hbmRyb2lkX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbmRyb2lkX21vZHVsZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBhdGggPSAnJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvciwlcywlcyknICUgKHNlbGYuYW5kcm9pZF9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hbmRyb2lkX21vZHVsZSkKLQotICAgIGFzc2VydCBzcGVjLmdldCgncHJvZHVjdF9kaXInKSBpcyBOb25lICMgVE9ETzogbm90IHN1cHBvcnRlZD8KLSAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIHNlbGYuQ29tcHV0ZU91dHB1dEJhc2VuYW1lKHNwZWMpKQotCi0KLSAgZGVmIE5vcm1hbGl6ZUxkRmxhZ3Moc2VsZiwgbGRfZmxhZ3MpOgotICAgICIiIiBDbGVhbiB1cCBsZGZsYWdzIGZyb20gZ3lwIGZpbGUuCi0gICAgUmVtb3ZlIGFueSBsZGZsYWdzIHRoYXQgY29udGFpbiBhbmRyb2lkX3RvcF9kaXIuCi0KLSAgICBBcmdzOgotICAgICAgbGRfZmxhZ3M6IGxkZmxhZ3MgZnJvbSBneXAgZmlsZXMuCi0KLSAgICBSZXR1cm5zOgotICAgICAgY2xlYW4gbGRmbGFncwotICAgICIiIgotICAgIGNsZWFuX2xkZmxhZ3MgPSBbXQotICAgIGZvciBmbGFnIGluIGxkX2ZsYWdzOgotICAgICAgaWYgc2VsZi5hbmRyb2lkX3RvcF9kaXIgaW4gZmxhZzoKLSAgICAgICAgY29udGludWUKLSAgICAgIGNsZWFuX2xkZmxhZ3MuYXBwZW5kKGZsYWcpCi0gICAgcmV0dXJuIGNsZWFuX2xkZmxhZ3MKLQotICBkZWYgTm9ybWFsaXplSW5jbHVkZVBhdGhzKHNlbGYsIGluY2x1ZGVfcGF0aHMpOgotICAgICIiIiBOb3JtYWxpemUgaW5jbHVkZV9wYXRocy4KLSAgICBDb252ZXJ0IGFic29sdXRlIHBhdGhzIHRvIHJlbGF0aXZlIHRvIHRoZSBBbmRyb2lkIHRvcCBkaXJlY3Rvcnk7Ci0gICAgZmlsdGVyIG91dCBpbmNsdWRlIHBhdGhzIHRoYXQgYXJlIGFscmVhZHkgYnJvdWdodCBpbiBieSB0aGUgQW5kcm9pZCBidWlsZAotICAgIHN5c3RlbS4KLQotICAgIEFyZ3M6Ci0gICAgICBpbmNsdWRlX3BhdGhzOiBBIGxpc3Qgb2YgdW5wcm9jZXNzZWQgaW5jbHVkZSBwYXRocy4KLSAgICBSZXR1cm5zOgotICAgICAgQSBsaXN0IG9mIG5vcm1hbGl6ZWQgaW5jbHVkZSBwYXRocy4KLSAgICAiIiIKLSAgICBub3JtYWxpemVkID0gW10KLSAgICBmb3IgcGF0aCBpbiBpbmNsdWRlX3BhdGhzOgotICAgICAgaWYgcGF0aFswXSA9PSAnLyc6Ci0gICAgICAgIHBhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChwYXRoLCBzZWxmLmFuZHJvaWRfdG9wX2RpcikKLQotICAgICAgIyBGaWx0ZXIgb3V0IHRoZSBBbmRyb2lkIHN0YW5kYXJkIHNlYXJjaCBwYXRoLgotICAgICAgaWYgcGF0aCBub3QgaW4gYW5kcm9pZF9zdGFuZGFyZF9pbmNsdWRlX3BhdGhzOgotICAgICAgICBub3JtYWxpemVkLmFwcGVuZChwYXRoKQotICAgIHJldHVybiBub3JtYWxpemVkCi0KLSAgZGVmIEV4dHJhY3RJbmNsdWRlc0Zyb21DRmxhZ3Moc2VsZiwgY2ZsYWdzKToKLSAgICAiIiJFeHRyYWN0IGluY2x1ZGVzICItSS4uLiIgb3V0IGZyb20gY2ZsYWdzCi0KLSAgICBBcmdzOgotICAgICAgY2ZsYWdzOiBBIGxpc3Qgb2YgY29tcGlsZXIgZmxhZ3MsIHdoaWNoIG1heSBiZSBtaXhlZCB3aXRoICItSS4uIgotICAgIFJldHVybnM6Ci0gICAgICBBIHR1cGxlIG9mIGxpc3RzOiAoY2xlYW5fY2xmYWdzLCBpbmNsdWRlX3BhdGhzKS4gIi1JLi4iIGlzIHRyaW1tZWQuCi0gICAgIiIiCi0gICAgY2xlYW5fY2ZsYWdzID0gW10KLSAgICBpbmNsdWRlX3BhdGhzID0gW10KLSAgICBpZiBjZmxhZ3M6Ci0gICAgICBmb3IgZmxhZyBpbiBjZmxhZ3M6Ci0gICAgICAgIGlmIGZsYWcuc3RhcnRzd2l0aCgnLUknKToKLSAgICAgICAgICBpbmNsdWRlX3BhdGhzLmFwcGVuZChmbGFnWzI6XSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBjbGVhbl9jZmxhZ3MuYXBwZW5kKGZsYWcpCi0KLSAgICByZXR1cm4gKGNsZWFuX2NmbGFncywgaW5jbHVkZV9wYXRocykKLQotICBkZWYgQ29tcHV0ZUFuZHJvaWRMaWJyYXJ5TW9kdWxlTmFtZXMoc2VsZiwgbGlicmFyaWVzKToKLSAgICAiIiJDb21wdXRlIHRoZSBBbmRyb2lkIG1vZHVsZSBuYW1lcyBmcm9tIGxpYnJhcmllcywgaWUgc3BlYy5nZXQoJ2xpYnJhcmllcycpCi0KLSAgICBBcmdzOgotICAgICAgbGlicmFyaWVzOiB0aGUgdmFsdWUgb2Ygc3BlYy5nZXQoJ2xpYnJhcmllcycpCi0gICAgUmV0dXJuczoKLSAgICAgIEEgdHVwbGUgKHN0YXRpY19saWJfbW9kdWxlcywgZHluYW1pY19saWJfbW9kdWxlcykKLSAgICAiIiIKLSAgICBzdGF0aWNfbGliX21vZHVsZXMgPSBbXQotICAgIGR5bmFtaWNfbGliX21vZHVsZXMgPSBbXQotICAgIGZvciBsaWJzIGluIGxpYnJhcmllczoKLSAgICAgICMgTGlicyBjYW4gaGF2ZSBtdWx0aXBsZSB3b3Jkcy4KLSAgICAgIGZvciBsaWIgaW4gbGlicy5zcGxpdCgpOgotICAgICAgICAjIEZpbHRlciB0aGUgc3lzdGVtIGxpYnJhcmllcywgd2hpY2ggYXJlIGFkZGVkIGJ5IGRlZmF1bHQgYnkgdGhlIEFuZHJvaWQKLSAgICAgICAgIyBidWlsZCBzeXN0ZW0uCi0gICAgICAgIGlmIChsaWIgPT0gJy1sYycgb3IgbGliID09ICctbHN0ZGMrKycgb3IgbGliID09ICctbG0nIG9yCi0gICAgICAgICAgICBsaWIuZW5kc3dpdGgoJ2xpYmdjYy5hJykpOgotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHInKFteL10rKVwuYSQnLCBsaWIpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgIHN0YXRpY19saWJfbW9kdWxlcy5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCi0gICAgICAgICAgY29udGludWUKLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocicoW14vXSspXC5zbyQnLCBsaWIpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgIGR5bmFtaWNfbGliX21vZHVsZXMuYXBwZW5kKG1hdGNoLmdyb3VwKDEpKQotICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICMgIi1sc3RscG9ydCIgLT4gbGlic3RscG9ydAotICAgICAgICBpZiBsaWIuc3RhcnRzd2l0aCgnLWwnKToKLSAgICAgICAgICBpZiBsaWIuZW5kc3dpdGgoJ19zdGF0aWMnKToKLSAgICAgICAgICAgIHN0YXRpY19saWJfbW9kdWxlcy5hcHBlbmQoJ2xpYicgKyBsaWJbMjpdKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkeW5hbWljX2xpYl9tb2R1bGVzLmFwcGVuZCgnbGliJyArIGxpYlsyOl0pCi0gICAgcmV0dXJuIChzdGF0aWNfbGliX21vZHVsZXMsIGR5bmFtaWNfbGliX21vZHVsZXMpCi0KLQotICBkZWYgQ29tcHV0ZURlcHMoc2VsZiwgc3BlYyk6Ci0gICAgIiIiQ29tcHV0ZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGEgZ3lwIHNwZWMuCi0KLSAgICBSZXR1cm5zIGEgdHVwbGUgKGRlcHMsIGxpbmtfZGVwcyksIHdoZXJlIGVhY2ggaXMgYSBsaXN0IG9mCi0gICAgZmlsZW5hbWVzIHRoYXQgd2lsbCBuZWVkIHRvIGJlIHB1dCBpbiBmcm9udCBvZiBtYWtlIGZvciBlaXRoZXIKLSAgICBidWlsZGluZyAoZGVwcykgb3IgbGlua2luZyAobGlua19kZXBzKS4KLSAgICAiIiIKLSAgICBkZXBzID0gW10KLSAgICBsaW5rX2RlcHMgPSBbXQotICAgIGlmICdkZXBlbmRlbmNpZXMnIGluIHNwZWM6Ci0gICAgICBkZXBzLmV4dGVuZChbdGFyZ2V0X291dHB1dHNbZGVwXSBmb3IgZGVwIGluIHNwZWNbJ2RlcGVuZGVuY2llcyddCi0gICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0X291dHB1dHNbZGVwXV0pCi0gICAgICBmb3IgZGVwIGluIHNwZWNbJ2RlcGVuZGVuY2llcyddOgotICAgICAgICBpZiBkZXAgaW4gdGFyZ2V0X2xpbmtfZGVwczoKLSAgICAgICAgICBsaW5rX2RlcHMuYXBwZW5kKHRhcmdldF9saW5rX2RlcHNbZGVwXSkKLSAgICAgIGRlcHMuZXh0ZW5kKGxpbmtfZGVwcykKLSAgICByZXR1cm4gKGd5cC5jb21tb24udW5pcXVlcihkZXBzKSwgZ3lwLmNvbW1vbi51bmlxdWVyKGxpbmtfZGVwcykpCi0KLQotICBkZWYgV3JpdGVUYXJnZXRGbGFncyhzZWxmLCBzcGVjLCBjb25maWdzLCBsaW5rX2RlcHMpOgotICAgICIiIldyaXRlIE1ha2VmaWxlIGNvZGUgdG8gc3BlY2lmeSB0aGUgbGluayBmbGFncyBhbmQgbGlicmFyeSBkZXBlbmRlbmNpZXMuCi0KLSAgICBzcGVjLCBjb25maWdzOiBpbnB1dCBmcm9tIGd5cC4KLSAgICBsaW5rX2RlcHM6IGxpbmsgZGVwZW5kZW5jeSBsaXN0OyBzZWUgQ29tcHV0ZURlcHMoKQotICAgICIiIgotICAgIGNvbmZpZyA9IGNvbmZpZ3Nbc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ11dCi0KLSAgICAjIExERkxBR1MKLSAgICBsZGZsYWdzID0gbGlzdChjb25maWcuZ2V0KCdsZGZsYWdzJywgW10pKQotICAgIHN0YXRpY19mbGFncywgZHluYW1pY19mbGFncyA9IHNlbGYuQ29tcHV0ZUFuZHJvaWRMaWJyYXJ5TW9kdWxlTmFtZXMoCi0gICAgICAgIGxkZmxhZ3MpCi0gICAgc2VsZi5Xcml0ZUxuKCcnKQotICAgIHNlbGYuV3JpdGVMaXN0KHNlbGYuTm9ybWFsaXplTGRGbGFncyhsZGZsYWdzKSwgJ0xPQ0FMX0xERkxBR1MnKQotCi0gICAgIyBMaWJyYXJpZXMgKGkuZS4gLWxmb28pCi0gICAgbGlicmFyaWVzID0gZ3lwLmNvbW1vbi51bmlxdWVyKHNwZWMuZ2V0KCdsaWJyYXJpZXMnLCBbXSkpCi0gICAgc3RhdGljX2xpYnMsIGR5bmFtaWNfbGlicyA9IHNlbGYuQ29tcHV0ZUFuZHJvaWRMaWJyYXJ5TW9kdWxlTmFtZXMoCi0gICAgICAgIGxpYnJhcmllcykKLQotICAgICMgTGluayBkZXBlbmRlbmNpZXMgKGkuZS4gbGliZm9vLmEsIGxpYmZvby5zbykKLSAgICBzdGF0aWNfbGlua19kZXBzID0gW3hbMV0gZm9yIHggaW4gbGlua19kZXBzIGlmIHhbMF0gPT0gJ3N0YXRpYyddCi0gICAgc2hhcmVkX2xpbmtfZGVwcyA9IFt4WzFdIGZvciB4IGluIGxpbmtfZGVwcyBpZiB4WzBdID09ICdzaGFyZWQnXQotICAgIHNlbGYuV3JpdGVMbignJykKLSAgICBzZWxmLldyaXRlTGlzdChzdGF0aWNfZmxhZ3MgKyBzdGF0aWNfbGlicyArIHN0YXRpY19saW5rX2RlcHMsCi0gICAgICAgICAgICAgICAgICAgJ0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMnKQotICAgIHNlbGYuV3JpdGVMbignIyBFbmFibGUgZ3JvdXBpbmcgdG8gZml4IGNpcmN1bGFyIHJlZmVyZW5jZXMnKQotICAgIHNlbGYuV3JpdGVMbignTE9DQUxfR1JPVVBfU1RBVElDX0xJQlJBUklFUyA6PSB0cnVlJykKLSAgICBzZWxmLldyaXRlTG4oJycpCi0gICAgc2VsZi5Xcml0ZUxpc3QoZHluYW1pY19mbGFncyArIGR5bmFtaWNfbGlicyArIHNoYXJlZF9saW5rX2RlcHMsCi0gICAgICAgICAgICAgICAgICAgJ0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMnKQotCi0KLSAgZGVmIFdyaXRlVGFyZ2V0KHNlbGYsIHNwZWMsIGNvbmZpZ3MsIGRlcHMsIGxpbmtfZGVwcywgcGFydF9vZl9hbGwpOgotICAgICIiIldyaXRlIE1ha2VmaWxlIGNvZGUgdG8gcHJvZHVjZSB0aGUgZmluYWwgdGFyZ2V0IG9mIHRoZSBneXAgc3BlYy4KLQotICAgIHNwZWMsIGNvbmZpZ3M6IGlucHV0IGZyb20gZ3lwLgotICAgIGRlcHMsIGxpbmtfZGVwczogZGVwZW5kZW5jeSBsaXN0czsgc2VlIENvbXB1dGVEZXBzKCkKLSAgICBwYXJ0X29mX2FsbDogZmxhZyBpbmRpY2F0aW5nIHRoaXMgdGFyZ2V0IGlzIHBhcnQgb2YgJ2FsbCcKLSAgICAiIiIKLSAgICBzZWxmLldyaXRlTG4oJyMjIyBSdWxlcyBmb3IgZmluYWwgdGFyZ2V0LicpCi0KLSAgICBpZiBzZWxmLnR5cGUgIT0gJ25vbmUnOgotICAgICAgc2VsZi5Xcml0ZVRhcmdldEZsYWdzKHNwZWMsIGNvbmZpZ3MsIGxpbmtfZGVwcykKLQotICAgICMgQWRkIHRvIHRoZSBzZXQgb2YgdGFyZ2V0cyB3aGljaCByZXByZXNlbnQgdGhlIGd5cCAnYWxsJyB0YXJnZXQuIFdlIHVzZSB0aGUKLSAgICAjIG5hbWUgJ2d5cF9hbGxfbW9kdWxlcycgYXMgdGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtIGRvZXNuJ3QgYWxsb3cgdGhlIHVzZQotICAgICMgb2YgdGhlIE1ha2UgdGFyZ2V0ICdhbGwnIGFuZCBiZWNhdXNlICdhbGxfbW9kdWxlcycgaXMgdGhlIGVxdWl2YWxlbnQgb2YKLSAgICAjIHRoZSBNYWtlIHRhcmdldCAnYWxsJyBvbiBBbmRyb2lkLgotICAgIGlmIHBhcnRfb2ZfYWxsOgotICAgICAgc2VsZi5Xcml0ZUxuKCcjIEFkZCB0YXJnZXQgYWxpYXMgdG8gImd5cF9hbGxfbW9kdWxlcyIgdGFyZ2V0LicpCi0gICAgICBzZWxmLldyaXRlTG4oJy5QSE9OWTogZ3lwX2FsbF9tb2R1bGVzJykKLSAgICAgIHNlbGYuV3JpdGVMbignZ3lwX2FsbF9tb2R1bGVzOiAlcycgJSBzZWxmLmFuZHJvaWRfbW9kdWxlKQotICAgICAgc2VsZi5Xcml0ZUxuKCcnKQotCi0gICAgIyBBZGQgYW4gYWxpYXMgZnJvbSB0aGUgZ3lwIHRhcmdldCBuYW1lIHRvIHRoZSBBbmRyb2lkIG1vZHVsZSBuYW1lLiBUaGlzCi0gICAgIyBzaW1wbGlmaWVzIG1hbnVhbCBidWlsZHMgb2YgdGhlIHRhcmdldCwgYW5kIGlzIHJlcXVpcmVkIGJ5IHRoZSB0ZXN0Ci0gICAgIyBmcmFtZXdvcmsuCi0gICAgaWYgc2VsZi50YXJnZXQgIT0gc2VsZi5hbmRyb2lkX21vZHVsZToKLSAgICAgIHNlbGYuV3JpdGVMbignIyBBbGlhcyBneXAgdGFyZ2V0IG5hbWUuJykKLSAgICAgIHNlbGYuV3JpdGVMbignLlBIT05ZOiAlcycgJSBzZWxmLnRhcmdldCkKLSAgICAgIHNlbGYuV3JpdGVMbignJXM6ICVzJyAlIChzZWxmLnRhcmdldCwgc2VsZi5hbmRyb2lkX21vZHVsZSkpCi0gICAgICBzZWxmLldyaXRlTG4oJycpCi0KLSAgICAjIEFkZCB0aGUgY29tbWFuZCB0byB0cmlnZ2VyIGJ1aWxkIG9mIHRoZSB0YXJnZXQgdHlwZSBkZXBlbmRpbmcKLSAgICAjIG9uIHRoZSB0b29sc2V0LiBFeDogQlVJTERfU1RBVElDX0xJQlJBUlkgdnMuIEJVSUxEX0hPU1RfU1RBVElDX0xJQlJBUlkKLSAgICAjIE5PVEU6IFRoaXMgaGFzIHRvIGNvbWUgbGFzdCEKLSAgICBtb2RpZmllciA9ICcnCi0gICAgaWYgc2VsZi50b29sc2V0ID09ICdob3N0JzoKLSAgICAgIG1vZGlmaWVyID0gJ0hPU1RfJwotICAgIGlmIHNlbGYudHlwZSA9PSAnc3RhdGljX2xpYnJhcnknOgotICAgICAgc2VsZi5Xcml0ZUxuKCdpbmNsdWRlICQoQlVJTERfJXNTVEFUSUNfTElCUkFSWSknICUgbW9kaWZpZXIpCi0gICAgZWxpZiBzZWxmLnR5cGUgPT0gJ3NoYXJlZF9saWJyYXJ5JzoKLSAgICAgIHNlbGYuV3JpdGVMbignTE9DQUxfUFJFTElOS19NT0RVTEUgOj0gZmFsc2UnKQotICAgICAgc2VsZi5Xcml0ZUxuKCdpbmNsdWRlICQoQlVJTERfJXNTSEFSRURfTElCUkFSWSknICUgbW9kaWZpZXIpCi0gICAgZWxpZiBzZWxmLnR5cGUgPT0gJ2V4ZWN1dGFibGUnOgotICAgICAgaWYgc2VsZi50b29sc2V0ID09ICdob3N0JzoKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9NT0RVTEVfUEFUSCA6PSAkKGd5cF9zaGFyZWRfaW50ZXJtZWRpYXRlX2RpciknKQotICAgICAgZWxzZToKLSAgICAgICAgIyBEb24ndCBpbnN0YWxsIHRhcmdldCBleGVjdXRhYmxlcyBmb3Igbm93LCBhcyBpdCByZXN1bHRzIGluIHRoZW0gYmVpbmcKLSAgICAgICAgIyBpbmNsdWRlZCBpbiBST00uIFRoaXMgY2FuIGJlIHJldmlzaXRlZCBpZiB0aGVyZSdzIGEgcmVhc29uIHRvIGluc3RhbGwKLSAgICAgICAgIyB0aGVtIGxhdGVyLgotICAgICAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX1VOSU5TVEFMTEFCTEVfTU9EVUxFIDo9IHRydWUnKQotICAgICAgc2VsZi5Xcml0ZUxuKCdpbmNsdWRlICQoQlVJTERfJXNFWEVDVVRBQkxFKScgJSBtb2RpZmllcikKLSAgICBlbHNlOgotICAgICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFBST0RVQ1RfT1VUKS9neXBfc3RhbXAnKQotICAgICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9VTklOU1RBTExBQkxFX01PRFVMRSA6PSB0cnVlJykKLSAgICAgIHNlbGYuV3JpdGVMbigpCi0gICAgICBzZWxmLldyaXRlTG4oJ2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsnKQotICAgICAgc2VsZi5Xcml0ZUxuKCkKLSAgICAgIHNlbGYuV3JpdGVMbignJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTKScpCi0gICAgICBzZWxmLldyaXRlTG4oJ1x0JChoaWRlKSBlY2hvICJHeXAgdGltZXN0YW1wOiAkQCInKQotICAgICAgc2VsZi5Xcml0ZUxuKCdcdCQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApJykKLSAgICAgIHNlbGYuV3JpdGVMbignXHQkKGhpZGUpIHRvdWNoICRAJykKLQotCi0gIGRlZiBXcml0ZUxpc3Qoc2VsZiwgdmFsdWVfbGlzdCwgdmFyaWFibGU9Tm9uZSwgcHJlZml4PScnLAotICAgICAgICAgICAgICAgIHF1b3Rlcj1tYWtlLlF1b3RlSWZOZWNlc3NhcnksIGxvY2FsX3BhdGhpZnk9RmFsc2UpOgotICAgICIiIldyaXRlIGEgdmFyaWFibGUgZGVmaW5pdGlvbiB0aGF0IGlzIGEgbGlzdCBvZiB2YWx1ZXMuCi0KLSAgICBFLmcuIFdyaXRlTGlzdChbJ2EnLCdiJ10sICdmb28nLCBwcmVmaXg9J2JsYWgnKSB3cml0ZXMgb3V0Ci0gICAgICAgICBmb28gPSBibGFoYSBibGFoYgotICAgIGJ1dCBpbiBhIHByZXR0eS1wcmludGVkIHN0eWxlLgotICAgICIiIgotICAgIHZhbHVlcyA9ICcnCi0gICAgaWYgdmFsdWVfbGlzdDoKLSAgICAgIHZhbHVlX2xpc3QgPSBbcXVvdGVyKHByZWZpeCArIGwpIGZvciBsIGluIHZhbHVlX2xpc3RdCi0gICAgICBpZiBsb2NhbF9wYXRoaWZ5OgotICAgICAgICB2YWx1ZV9saXN0ID0gW3NlbGYuTG9jYWxQYXRoaWZ5KGwpIGZvciBsIGluIHZhbHVlX2xpc3RdCi0gICAgICB2YWx1ZXMgPSAnIFxcXG5cdCcgKyAnIFxcXG5cdCcuam9pbih2YWx1ZV9saXN0KQotICAgIHNlbGYuZnAud3JpdGUoJyVzIDo9JXNcblxuJyAlICh2YXJpYWJsZSwgdmFsdWVzKSkKLQotCi0gIGRlZiBXcml0ZUxuKHNlbGYsIHRleHQ9JycpOgotICAgIHNlbGYuZnAud3JpdGUodGV4dCArICdcbicpCi0KLQotICBkZWYgTG9jYWxQYXRoaWZ5KHNlbGYsIHBhdGgpOgotICAgICIiIkNvbnZlcnQgYSBzdWJkaXJlY3RvcnktcmVsYXRpdmUgcGF0aCBpbnRvIGEgbm9ybWFsaXplZCBwYXRoIHdoaWNoIHN0YXJ0cwotICAgIHdpdGggdGhlIG1ha2UgdmFyaWFibGUgJChMT0NBTF9QQVRIKSAoaS5lLiB0aGUgdG9wIG9mIHRoZSBwcm9qZWN0IHRyZWUpLgotICAgIEFic29sdXRlIHBhdGhzLCBvciBwYXRocyB0aGF0IGNvbnRhaW4gdmFyaWFibGVzLCBhcmUganVzdCBub3JtYWxpemVkLiIiIgotICAgIGlmICckKCcgaW4gcGF0aCBvciBvcy5wYXRoLmlzYWJzKHBhdGgpOgotICAgICAgIyBwYXRoIGlzIG5vdCBhIGZpbGUgaW4gdGhlIHByb2plY3QgdHJlZSBpbiB0aGlzIGNhc2UsIGJ1dCBjYWxsaW5nCi0gICAgICAjIG5vcm1wYXRoIGlzIHN0aWxsIGltcG9ydGFudCBmb3IgdHJpbW1pbmcgdHJhaWxpbmcgc2xhc2hlcy4KLSAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCi0gICAgbG9jYWxfcGF0aCA9IG9zLnBhdGguam9pbignJChMT0NBTF9QQVRIKScsIHNlbGYucGF0aCwgcGF0aCkKLSAgICBsb2NhbF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aChsb2NhbF9wYXRoKQotICAgICMgQ2hlY2sgdGhhdCBub3JtYWxpemluZyB0aGUgcGF0aCBkaWRuJ3QgLi4vIGl0c2VsZiBvdXQgb2YgJChMT0NBTF9QQVRIKQotICAgICMgLSBpLmUuIHRoYXQgdGhlIHJlc3VsdGluZyBwYXRoIGlzIHN0aWxsIGluc2lkZSB0aGUgcHJvamVjdCB0cmVlLiBUaGUKLSAgICAjIHBhdGggbWF5IGxlZ2l0aW1hdGVseSBoYXZlIGVuZGVkIHVwIGNvbnRhaW5pbmcganVzdCAkKExPQ0FMX1BBVEgpLCB0aG91Z2gsCi0gICAgIyBzbyB3ZSBkb24ndCBsb29rIGZvciBhIHNsYXNoLgotICAgIGFzc2VydCBsb2NhbF9wYXRoLnN0YXJ0c3dpdGgoJyQoTE9DQUxfUEFUSCknKSwgKAotICAgICAgICAgICAnUGF0aCAlcyBhdHRlbXB0cyB0byBlc2NhcGUgZnJvbSBneXAgcGF0aCAlcyAhKScgJSAocGF0aCwgc2VsZi5wYXRoKSkKLSAgICByZXR1cm4gbG9jYWxfcGF0aAotCi0KLSAgZGVmIEV4cGFuZElucHV0Um9vdChzZWxmLCB0ZW1wbGF0ZSwgZXhwYW5zaW9uLCBkaXJuYW1lKToKLSAgICBpZiAnJShJTlBVVF9ST09UKXMnIG5vdCBpbiB0ZW1wbGF0ZSBhbmQgJyUoSU5QVVRfRElSTkFNRSlzJyBub3QgaW4gdGVtcGxhdGU6Ci0gICAgICByZXR1cm4gdGVtcGxhdGUKLSAgICBwYXRoID0gdGVtcGxhdGUgJSB7Ci0gICAgICAgICdJTlBVVF9ST09UJzogZXhwYW5zaW9uLAotICAgICAgICAnSU5QVVRfRElSTkFNRSc6IGRpcm5hbWUsCi0gICAgICAgIH0KLSAgICByZXR1cm4gcGF0aAotCi0KLWRlZiBXcml0ZUF1dG9SZWdlbmVyYXRpb25SdWxlKHBhcmFtcywgcm9vdF9tYWtlZmlsZSwgbWFrZWZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ZpbGVzKToKLSAgIiIiV3JpdGUgdGhlIHRhcmdldCB0byByZWdlbmVyYXRlIHRoZSBNYWtlZmlsZS4iIiIKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0gICMgU29ydCB0byBhdm9pZCBub24tZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1ha2VmaWxlLgotICBidWlsZF9maWxlcyA9IHNvcnRlZChbb3MucGF0aC5qb2luKCckKExPQ0FMX1BBVEgpJywgZikgZm9yIGYgaW4gYnVpbGRfZmlsZXNdKQotICBidWlsZF9maWxlc19hcmdzID0gW2d5cC5jb21tb24uUmVsYXRpdmVQYXRoKGZpbGVuYW1lLCBvcHRpb25zLnRvcGxldmVsX2RpcikKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGFyYW1zWydidWlsZF9maWxlc19hcmcnXV0KLSAgYnVpbGRfZmlsZXNfYXJncyA9IFtvcy5wYXRoLmpvaW4oJyQoUFJJVkFURV9MT0NBTF9QQVRIKScsIGYpCi0gICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gYnVpbGRfZmlsZXNfYXJnc10KLSAgZ3lwX2JpbmFyeSA9IGd5cC5jb21tb24uRml4SWZSZWxhdGl2ZVBhdGgocGFyYW1zWydneXBfYmluYXJ5J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudG9wbGV2ZWxfZGlyKQotICBtYWtlZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKCckKExPQ0FMX1BBVEgpJywgbWFrZWZpbGVfbmFtZSkKLSAgaWYgbm90IGd5cF9iaW5hcnkuc3RhcnRzd2l0aChvcy5zZXApOgotICAgIGd5cF9iaW5hcnkgPSBvcy5wYXRoLmpvaW4oJy4nLCBneXBfYmluYXJ5KQotICByb290X21ha2VmaWxlLndyaXRlKCdHWVBfRklMRVMgOj0gXFxcbiAgJXNcblxuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgJ1xcXG4gICcuam9pbihtYXAoU291cmNlaWZ5LCBidWlsZF9maWxlcykpKQotICByb290X21ha2VmaWxlLndyaXRlKCclczogUFJJVkFURV9MT0NBTF9QQVRIIDo9ICQoTE9DQUxfUEFUSClcbicgJQotICAgICAgICAgICAgICAgICAgICAgIG1ha2VmaWxlX3BhdGgpCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoJyVzOiAkKEdZUF9GSUxFUylcbicgJSBtYWtlZmlsZV9wYXRoKQotICByb290X21ha2VmaWxlLndyaXRlKCdcdGVjaG8gQUNUSU9OIFJlZ2VuZXJhdGluZyAkQFxuXHQlc1xuXG4nICUKLSAgICAgIGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbExpc3QoW2d5cF9iaW5hcnksICctZmFuZHJvaWQnXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd5cC5SZWdlbmVyYXRlRmxhZ3Mob3B0aW9ucykgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlc19hcmdzKSkKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0gIGdlbmVyYXRvcl9mbGFncyA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KQotICBidWlsZGRpcl9uYW1lID0gZ2VuZXJhdG9yX2ZsYWdzLmdldCgnb3V0cHV0X2RpcicsICdvdXQnKQotICBsaW1pdF90b190YXJnZXRfYWxsID0gZ2VuZXJhdG9yX2ZsYWdzLmdldCgnbGltaXRfdG9fdGFyZ2V0X2FsbCcsIEZhbHNlKQotICBhbmRyb2lkX3RvcF9kaXIgPSBvcy5lbnZpcm9uLmdldCgnQU5EUk9JRF9CVUlMRF9UT1AnKQotICBhc3NlcnQgYW5kcm9pZF90b3BfZGlyLCAnJEFORFJPSURfQlVJTERfVE9QIG5vdCBzZXQ7IHlvdSBuZWVkIHRvIHJ1biBsdW5jaC4nCi0KLSAgZGVmIENhbGN1bGF0ZU1ha2VmaWxlUGF0aChidWlsZF9maWxlLCBiYXNlX25hbWUpOgotICAgICIiIkRldGVybWluZSB3aGVyZSB0byB3cml0ZSBhIE1ha2VmaWxlIGZvciBhIGdpdmVuIGd5cCBmaWxlLiIiIgotICAgICMgUGF0aHMgaW4gZ3lwIGZpbGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgLmd5cCBmaWxlLCBidXQgd2Ugd2FudAotICAgICMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSByb290IGZvciB0aGUgbWFzdGVyIG1ha2VmaWxlLiAgR3JhYgotICAgICMgdGhlIHBhdGggb2YgdGhlIC5neXAgZmlsZSBhcyB0aGUgYmFzZSB0byByZWxhdGl2aXplIGFnYWluc3QuCi0gICAgIyBFLmcuICJmb28vYmFyIiB3aGVuIHdlJ3JlIGNvbnN0cnVjdGluZyB0YXJnZXRzIGZvciAiZm9vL2Jhci9iYXouZ3lwIi4KLSAgICBiYXNlX3BhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChvcy5wYXRoLmRpcm5hbWUoYnVpbGRfZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZXB0aCkKLSAgICAjIFdlIHdyaXRlIHRoZSBmaWxlIGluIHRoZSBiYXNlX3BhdGggZGlyZWN0b3J5LgotICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5qb2luKG9wdGlvbnMuZGVwdGgsIGJhc2VfcGF0aCwgYmFzZV9uYW1lKQotICAgIGFzc2VydCBub3Qgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCAoCi0gICAgICAgICdUaGUgQW5kcm9pZCBiYWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LicpCi0gICAgYmFzZV9wYXRoID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgob3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudG9wbGV2ZWxfZGlyKQotICAgIHJldHVybiBiYXNlX3BhdGgsIG91dHB1dF9maWxlCi0KLSAgIyBUT0RPOiAgc2VhcmNoIGZvciB0aGUgZmlyc3Qgbm9uLSdEZWZhdWx0JyB0YXJnZXQuICBUaGlzIGNhbiBnbwotICAjIGF3YXkgd2hlbiB3ZSBhZGQgdmVyaWZpY2F0aW9uIHRoYXQgYWxsIHRhcmdldHMgaGF2ZSB0aGUKLSAgIyBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuCi0gIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9IE5vbmUKLSAgdG9vbHNldHMgPSBzZXQoW3RhcmdldF9kaWN0c1t0YXJnZXRdWyd0b29sc2V0J10gZm9yIHRhcmdldCBpbiB0YXJnZXRfbGlzdF0pCi0gIGZvciB0YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgc3BlYyA9IHRhcmdldF9kaWN0c1t0YXJnZXRdCi0gICAgaWYgc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ10gIT0gJ0RlZmF1bHQnOgotICAgICAgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ10KLSAgICAgIGJyZWFrCi0gIGlmIG5vdCBkZWZhdWx0X2NvbmZpZ3VyYXRpb246Ci0gICAgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gJ0RlZmF1bHQnCi0KLSAgc3JjZGlyID0gJy4nCi0gIG1ha2VmaWxlX25hbWUgPSAnR3lwQW5kcm9pZCcgKyBvcHRpb25zLnN1ZmZpeCArICcubWsnCi0gIG1ha2VmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy50b3BsZXZlbF9kaXIsIG1ha2VmaWxlX25hbWUpCi0gIGFzc2VydCBub3Qgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCAoCi0gICAgICAnVGhlIEFuZHJvaWQgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dC4nKQotICBtYWtlLmVuc3VyZV9kaXJlY3RvcnlfZXhpc3RzKG1ha2VmaWxlX3BhdGgpCi0gIHJvb3RfbWFrZWZpbGUgPSBvcGVuKG1ha2VmaWxlX3BhdGgsICd3JykKLQotICByb290X21ha2VmaWxlLndyaXRlKGhlYWRlcikKLQotICAjIFdlIHNldCBMT0NBTF9QQVRIIGp1c3Qgb25jZSwgaGVyZSwgdG8gdGhlIHRvcCBvZiB0aGUgcHJvamVjdCB0cmVlLiBUaGlzCi0gICMgYWxsb3dzIGFsbCB0aGUgb3RoZXIgcGF0aHMgd2UgdXNlIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBBbmRyb2lkLm1rIGZpbGUsCi0gICMgYXMgdGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtIGV4cGVjdHMuCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoJ1xuTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKVxuJykKLQotICAjIEZpbmQgdGhlIGxpc3Qgb2YgdGFyZ2V0cyB0aGF0IGRlcml2ZSBmcm9tIHRoZSBneXAgZmlsZShzKSBiZWluZyBidWlsdC4KLSAgbmVlZGVkX3RhcmdldHMgPSBzZXQoKQotICBmb3IgYnVpbGRfZmlsZSBpbiBwYXJhbXNbJ2J1aWxkX2ZpbGVzJ106Ci0gICAgZm9yIHRhcmdldCBpbiBneXAuY29tbW9uLkFsbFRhcmdldHModGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgYnVpbGRfZmlsZSk6Ci0gICAgICBuZWVkZWRfdGFyZ2V0cy5hZGQodGFyZ2V0KQotCi0gIGJ1aWxkX2ZpbGVzID0gc2V0KCkKLSAgaW5jbHVkZV9saXN0ID0gc2V0KCkKLSAgYW5kcm9pZF9tb2R1bGVzID0ge30KLSAgZm9yIHF1YWxpZmllZF90YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgYnVpbGRfZmlsZSwgdGFyZ2V0LCB0b29sc2V0ID0gZ3lwLmNvbW1vbi5QYXJzZVF1YWxpZmllZFRhcmdldCgKLSAgICAgICAgcXVhbGlmaWVkX3RhcmdldCkKLSAgICBidWlsZF9maWxlcy5hZGQoZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoYnVpbGRfZmlsZSwgb3B0aW9ucy50b3BsZXZlbF9kaXIpKQotICAgIGluY2x1ZGVkX2ZpbGVzID0gZGF0YVtidWlsZF9maWxlXVsnaW5jbHVkZWRfZmlsZXMnXQotICAgIGZvciBpbmNsdWRlZF9maWxlIGluIGluY2x1ZGVkX2ZpbGVzOgotICAgICAgIyBUaGUgaW5jbHVkZWRfZmlsZXMgZW50cmllcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpciBvZiB0aGUgYnVpbGQgZmlsZQotICAgICAgIyB0aGF0IGluY2x1ZGVkIHRoZW0sIHNvIHdlIGhhdmUgdG8gdW5kbyB0aGF0IGFuZCB0aGVuIG1ha2UgdGhlbSByZWxhdGl2ZQotICAgICAgIyB0byB0aGUgcm9vdCBkaXIuCi0gICAgICByZWxhdGl2ZV9pbmNsdWRlX2ZpbGUgPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aCgKLSAgICAgICAgICBneXAuY29tbW9uLlVucmVsYXRpdmVQYXRoKGluY2x1ZGVkX2ZpbGUsIGJ1aWxkX2ZpbGUpLAotICAgICAgICAgIG9wdGlvbnMudG9wbGV2ZWxfZGlyKQotICAgICAgYWJzX2luY2x1ZGVfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChyZWxhdGl2ZV9pbmNsdWRlX2ZpbGUpCi0gICAgICAjIElmIHRoZSBpbmNsdWRlIGZpbGUgaXMgZnJvbSB0aGUgfi8uZ3lwIGRpciwgd2Ugc2hvdWxkIHVzZSBhYnNvbHV0ZSBwYXRoCi0gICAgICAjIHNvIHRoYXQgcmVsb2NhdGluZyB0aGUgc3JjIGRpciBkb2Vzbid0IGJyZWFrIHRoZSBwYXRoLgotICAgICAgaWYgKHBhcmFtc1snaG9tZV9kb3RfZ3lwJ10gYW5kCi0gICAgICAgICAgYWJzX2luY2x1ZGVfZmlsZS5zdGFydHN3aXRoKHBhcmFtc1snaG9tZV9kb3RfZ3lwJ10pKToKLSAgICAgICAgYnVpbGRfZmlsZXMuYWRkKGFic19pbmNsdWRlX2ZpbGUpCi0gICAgICBlbHNlOgotICAgICAgICBidWlsZF9maWxlcy5hZGQocmVsYXRpdmVfaW5jbHVkZV9maWxlKQotCi0gICAgYmFzZV9wYXRoLCBvdXRwdXRfZmlsZSA9IENhbGN1bGF0ZU1ha2VmaWxlUGF0aChidWlsZF9maWxlLAotICAgICAgICB0YXJnZXQgKyAnLicgKyB0b29sc2V0ICsgb3B0aW9ucy5zdWZmaXggKyAnLm1rJykKLQotICAgIHNwZWMgPSB0YXJnZXRfZGljdHNbcXVhbGlmaWVkX3RhcmdldF0KLSAgICBjb25maWdzID0gc3BlY1snY29uZmlndXJhdGlvbnMnXQotCi0gICAgcGFydF9vZl9hbGwgPSAocXVhbGlmaWVkX3RhcmdldCBpbiBuZWVkZWRfdGFyZ2V0cyBhbmQKLSAgICAgICAgICAgICAgICAgICBub3QgaW50KHNwZWMuZ2V0KCdzdXBwcmVzc193aWxkY2FyZCcsIEZhbHNlKSkpCi0gICAgaWYgbGltaXRfdG9fdGFyZ2V0X2FsbCBhbmQgbm90IHBhcnRfb2ZfYWxsOgotICAgICAgY29udGludWUKLSAgICB3cml0ZXIgPSBBbmRyb2lkTWtXcml0ZXIoYW5kcm9pZF90b3BfZGlyKQotICAgIGFuZHJvaWRfbW9kdWxlID0gd3JpdGVyLldyaXRlKHF1YWxpZmllZF90YXJnZXQsIGJhc2VfcGF0aCwgb3V0cHV0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYywgY29uZmlncywgcGFydF9vZl9hbGw9cGFydF9vZl9hbGwpCi0gICAgaWYgYW5kcm9pZF9tb2R1bGUgaW4gYW5kcm9pZF9tb2R1bGVzOgotICAgICAgcHJpbnQgKCdFUlJPUjogQW5kcm9pZCBtb2R1bGUgbmFtZXMgbXVzdCBiZSB1bmlxdWUuIFRoZSBmb2xsb3dpbmcgJwotICAgICAgICAgICAgICd0YXJnZXRzIGJvdGggZ2VuZXJhdGUgQW5kcm9pZCBtb2R1bGUgbmFtZSAlcy5cbiAgJXNcbiAgJXMnICUKLSAgICAgICAgICAgICAoYW5kcm9pZF9tb2R1bGUsIGFuZHJvaWRfbW9kdWxlc1thbmRyb2lkX21vZHVsZV0sCi0gICAgICAgICAgICAgIHF1YWxpZmllZF90YXJnZXQpKQotICAgICAgcmV0dXJuCi0gICAgYW5kcm9pZF9tb2R1bGVzW2FuZHJvaWRfbW9kdWxlXSA9IHF1YWxpZmllZF90YXJnZXQKLQotICAgICMgT3VyIHJvb3RfbWFrZWZpbGUgbGl2ZXMgYXQgdGhlIHNvdXJjZSByb290LiAgQ29tcHV0ZSB0aGUgcmVsYXRpdmUgcGF0aAotICAgICMgZnJvbSB0aGVyZSB0byB0aGUgb3V0cHV0X2ZpbGUgZm9yIGluY2x1ZGluZy4KLSAgICBta2ZpbGVfcmVsX3BhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChvdXRwdXRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUobWFrZWZpbGVfcGF0aCkpCi0gICAgaW5jbHVkZV9saXN0LmFkZChta2ZpbGVfcmVsX3BhdGgpCi0KLSAgIyBTb21lIHRvb2xzIG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdG9wIGRpcmVjdG9yeS4KLSAgcm9vdF9tYWtlZmlsZS53cml0ZSgnR1lQX0FCU19BTkRST0lEX1RPUF9ESVIgOj0gJChzaGVsbCBwd2QpXG4nKQotCi0gICMgV3JpdGUgb3V0IHRoZSBzb3J0ZWQgbGlzdCBvZiBpbmNsdWRlcy4KLSAgcm9vdF9tYWtlZmlsZS53cml0ZSgnXG4nKQotICBmb3IgaW5jbHVkZV9maWxlIGluIHNvcnRlZChpbmNsdWRlX2xpc3QpOgotICAgIHJvb3RfbWFrZWZpbGUud3JpdGUoJ2luY2x1ZGUgJChMT0NBTF9QQVRIKS8nICsgaW5jbHVkZV9maWxlICsgJ1xuJykKLSAgcm9vdF9tYWtlZmlsZS53cml0ZSgnXG4nKQotCi0gIGlmIGdlbmVyYXRvcl9mbGFncy5nZXQoJ2F1dG9fcmVnZW5lcmF0aW9uJywgVHJ1ZSk6Ci0gICAgV3JpdGVBdXRvUmVnZW5lcmF0aW9uUnVsZShwYXJhbXMsIHJvb3RfbWFrZWZpbGUsIG1ha2VmaWxlX25hbWUsIGJ1aWxkX2ZpbGVzKQotCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoU0hBUkVEX0ZPT1RFUikKLQotICByb290X21ha2VmaWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL2R1bXBfZGVwZW5kZW5jeV9qc29uLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvZHVtcF9kZXBlbmRlbmN5X2pzb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDgwZGQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvZHVtcF9kZXBlbmRlbmN5X2pzb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IG9zCi1pbXBvcnQgZ3lwCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IGd5cC5tc3ZzX2VtdWxhdGlvbgotaW1wb3J0IGpzb24KLWltcG9ydCBzeXMKLQotZ2VuZXJhdG9yX3N1cHBvcnRzX211bHRpcGxlX3Rvb2xzZXRzID0gVHJ1ZQotCi1nZW5lcmF0b3Jfd2FudHNfc3RhdGljX2xpYnJhcnlfZGVwZW5kZW5jaWVzX2FkanVzdGVkID0gRmFsc2UKLQotZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzID0gewotfQotZm9yIGRpcm5hbWUgaW4gWydJTlRFUk1FRElBVEVfRElSJywgJ1NIQVJFRF9JTlRFUk1FRElBVEVfRElSJywgJ1BST0RVQ1RfRElSJywKLSAgICAgICAgICAgICAgICAnTElCX0RJUicsICdTSEFSRURfTElCX0RJUiddOgotICAjIFNvbWUgZ3lwIHN0ZXBzIGZhaWwgaWYgdGhlc2UgYXJlIGVtcHR5KCEpLgotICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbZGlybmFtZV0gPSAnZGlyJwotZm9yIHVudXNlZCBpbiBbJ1JVTEVfSU5QVVRfUEFUSCcsICdSVUxFX0lOUFVUX1JPT1QnLCAnUlVMRV9JTlBVVF9OQU1FJywKLSAgICAgICAgICAgICAgICdSVUxFX0lOUFVUX0RJUk5BTUUnLCAnUlVMRV9JTlBVVF9FWFQnLAotICAgICAgICAgICAgICAgJ0VYRUNVVEFCTEVfUFJFRklYJywgJ0VYRUNVVEFCTEVfU1VGRklYJywKLSAgICAgICAgICAgICAgICdTVEFUSUNfTElCX1BSRUZJWCcsICdTVEFUSUNfTElCX1NVRkZJWCcsCi0gICAgICAgICAgICAgICAnU0hBUkVEX0xJQl9QUkVGSVgnLCAnU0hBUkVEX0xJQl9TVUZGSVgnLAotICAgICAgICAgICAgICAgJ0NPTkZJR1VSQVRJT05fTkFNRSddOgotICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbdW51c2VkXSA9ICcnCi0KLQotZGVmIENhbGN1bGF0ZVZhcmlhYmxlcyhkZWZhdWx0X3ZhcmlhYmxlcywgcGFyYW1zKToKLSAgZ2VuZXJhdG9yX2ZsYWdzID0gcGFyYW1zLmdldCgnZ2VuZXJhdG9yX2ZsYWdzJywge30pCi0gIGZvciBrZXksIHZhbCBpbiBnZW5lcmF0b3JfZmxhZ3MuaXRlbXMoKToKLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KGtleSwgdmFsKQotICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdPUycsIGd5cC5jb21tb24uR2V0Rmxhdm9yKHBhcmFtcykpCi0KLSAgZmxhdm9yID0gZ3lwLmNvbW1vbi5HZXRGbGF2b3IocGFyYW1zKQotICBpZiBmbGF2b3IgPT0nd2luJzoKLSAgICAjIENvcHkgYWRkaXRpb25hbCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gVlMsIHdoaWNoIGlzIHNoYXJlZAotICAgICMgYnkgdGhlIFdpbmRvd3MgTmluamEgZ2VuZXJhdG9yLgotICAgIGltcG9ydCBneXAuZ2VuZXJhdG9yLm1zdnMgYXMgbXN2c19nZW5lcmF0b3IKLSAgICBnZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzID0gZ2V0YXR0cihtc3ZzX2dlbmVyYXRvciwKLSAgICAgICAgJ2dlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMnLCBbXSkKLSAgICBnZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zID0gZ2V0YXR0cihtc3ZzX2dlbmVyYXRvciwKLSAgICAgICAgJ2dlbmVyYXRvcl9hZGRpdGlvbmFsX3BhdGhfc2VjdGlvbnMnLCBbXSkKLQotICAgICMgU2V0IGEgdmFyaWFibGUgc28gY29uZGl0aW9ucyBjYW4gYmUgYmFzZWQgb24gbXN2c192ZXJzaW9uLgotICAgIG1zdnNfdmVyc2lvbiA9IGd5cC5tc3ZzX2VtdWxhdGlvbi5HZXRWU1ZlcnNpb24oZ2VuZXJhdG9yX2ZsYWdzKQotICAgIGRlZmF1bHRfdmFyaWFibGVzWydNU1ZTX1ZFUlNJT04nXSA9IG1zdnNfdmVyc2lvbi5TaG9ydE5hbWUoKQotCi0gICAgIyBUbyBkZXRlcm1pbmUgcHJvY2Vzc29yIHdvcmQgc2l6ZSBvbiBXaW5kb3dzLCBpbiBhZGRpdGlvbiB0byBjaGVja2luZwotICAgICMgUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRSAod2hpY2ggcmVmbGVjdHMgdGhlIHdvcmQgc2l6ZSBvZiB0aGUgY3VycmVudAotICAgICMgcHJvY2VzcyksIGl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGNoZWNrIFBST0NFU1NPUl9BUkNISVRFVzY0MzIgKHdoaWNoCi0gICAgIyBjb250YWlucyB0aGUgYWN0dWFsIHdvcmQgc2l6ZSBvZiB0aGUgc3lzdGVtIHdoZW4gcnVubmluZyB0aHJ1IFdPVzY0KS4KLSAgICBpZiAoJzY0JyBpbiBvcy5lbnZpcm9uLmdldCgnUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRScsICcnKSBvcgotICAgICAgICAnNjQnIGluIG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfQVJDSElURVc2NDMyJywgJycpKToKLSAgICAgIGRlZmF1bHRfdmFyaWFibGVzWydNU1ZTX09TX0JJVFMnXSA9IDY0Ci0gICAgZWxzZToKLSAgICAgIGRlZmF1bHRfdmFyaWFibGVzWydNU1ZTX09TX0JJVFMnXSA9IDMyCi0KLQotZGVmIENhbGN1bGF0ZUdlbmVyYXRvcklucHV0SW5mbyhwYXJhbXMpOgotICAiIiJDYWxjdWxhdGUgdGhlIGdlbmVyYXRvciBzcGVjaWZpYyBpbmZvIHRoYXQgZ2V0cyBmZWQgdG8gaW5wdXQgKGNhbGxlZCBieQotICBneXApLiIiIgotICBnZW5lcmF0b3JfZmxhZ3MgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkKLSAgaWYgZ2VuZXJhdG9yX2ZsYWdzLmdldCgnYWRqdXN0X3N0YXRpY19saWJyYXJpZXMnLCBGYWxzZSk6Ci0gICAgZ2xvYmFsIGdlbmVyYXRvcl93YW50c19zdGF0aWNfbGlicmFyeV9kZXBlbmRlbmNpZXNfYWRqdXN0ZWQKLSAgICBnZW5lcmF0b3Jfd2FudHNfc3RhdGljX2xpYnJhcnlfZGVwZW5kZW5jaWVzX2FkanVzdGVkID0gVHJ1ZQotCi0KLWRlZiBHZW5lcmF0ZU91dHB1dCh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMpOgotICAjIE1hcCBvZiB0YXJnZXQgLT4gbGlzdCBvZiB0YXJnZXRzIGl0IGRlcGVuZHMgb24uCi0gIGVkZ2VzID0ge30KLQotICAjIFF1ZXVlIG9mIHRhcmdldHMgdG8gdmlzaXQuCi0gIHRhcmdldHNfdG9fdmlzaXQgPSB0YXJnZXRfbGlzdFs6XQotCi0gIHdoaWxlIGxlbih0YXJnZXRzX3RvX3Zpc2l0KSA+IDA6Ci0gICAgdGFyZ2V0ID0gdGFyZ2V0c190b192aXNpdC5wb3AoKQotICAgIGlmIHRhcmdldCBpbiBlZGdlczoKLSAgICAgIGNvbnRpbnVlCi0gICAgZWRnZXNbdGFyZ2V0XSA9IFtdCi0KLSAgICBmb3IgZGVwIGluIHRhcmdldF9kaWN0c1t0YXJnZXRdLmdldCgnZGVwZW5kZW5jaWVzJywgW10pOgotICAgICAgZWRnZXNbdGFyZ2V0XS5hcHBlbmQoZGVwKQotICAgICAgdGFyZ2V0c190b192aXNpdC5hcHBlbmQoZGVwKQotCi0gIGZpbGVuYW1lID0gJ2R1bXAuanNvbicKLSAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAganNvbi5kdW1wKGVkZ2VzLCBmKQotICBmLmNsb3NlKCkKLSAgcHJpbnQgJ1dyb3RlIGpzb24gdG8gJXMuJyAlIGZpbGVuYW1lCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9lY2xpcHNlLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvZWNsaXBzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY5MGI1ZS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9lY2xpcHNlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiR1lQIGJhY2tlbmQgdGhhdCBnZW5lcmF0ZXMgRWNsaXBzZSBDRFQgc2V0dGluZ3MgZmlsZXMuCi0KLVRoaXMgYmFja2VuZCBET0VTIE5PVCBnZW5lcmF0ZSBFY2xpcHNlIENEVCBwcm9qZWN0cy4gSW5zdGVhZCwgaXQgZ2VuZXJhdGVzIFhNTAotZmlsZXMgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgaW50byBhbiBFY2xpcHNlIENEVCBwcm9qZWN0LiBUaGUgWE1MIGZpbGUgY29udGFpbnMgYQotbGlzdCBvZiBpbmNsdWRlIHBhdGhzIGFuZCBzeW1ib2xzIChpLmUuIGRlZmluZXMpLgotCi1CZWNhdXNlIGEgZnVsbCAuY3Byb2plY3QgZGVmaW5pdGlvbiBpcyBub3QgY3JlYXRlZCBieSB0aGlzIGdlbmVyYXRvciwgaXQncyBub3QKLXBvc3NpYmxlIHRvIHByb3Blcmx5IGRlZmluZSB0aGUgaW5jbHVkZSBkaXJzIGFuZCBzeW1ib2xzIGZvciBlYWNoIGZpbGUKLWluZGl2aWR1YWxseS4gIEluc3RlYWQsIG9uZSBzZXQgb2YgaW5jbHVkZXMvc3ltYm9scyBpcyBnZW5lcmF0ZWQgZm9yIHRoZSBlbnRpcmUKLXByb2plY3QuICBUaGlzIHdvcmtzIGZhaXJseSB3ZWxsIChhbmQgaXMgYSB2YXN0IGltcHJvdmVtZW50IGluIGdlbmVyYWwpLCBidXQgbWF5Ci1zdGlsbCByZXN1bHQgaW4gYSBmZXcgaW5kZXhlciBpc3N1ZXMgaGVyZSBhbmQgdGhlcmUuCi0KLVRoaXMgZ2VuZXJhdG9yIGhhcyBubyBhdXRvbWF0ZWQgdGVzdHMsIHNvIGV4cGVjdCBpdCB0byBiZSBicm9rZW4uCi0iIiIKLQotZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBlc2NhcGUKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IGd5cAotaW1wb3J0IGd5cC5jb21tb24KLWltcG9ydCBzaGxleAotCi1nZW5lcmF0b3Jfd2FudHNfc3RhdGljX2xpYnJhcnlfZGVwZW5kZW5jaWVzX2FkanVzdGVkID0gRmFsc2UKLQotZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzID0gewotfQotCi1mb3IgZGlybmFtZSBpbiBbJ0lOVEVSTUVESUFURV9ESVInLCAnUFJPRFVDVF9ESVInLCAnTElCX0RJUicsICdTSEFSRURfTElCX0RJUiddOgotICAjIFNvbWUgZ3lwIHN0ZXBzIGZhaWwgaWYgdGhlc2UgYXJlIGVtcHR5KCEpLgotICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbZGlybmFtZV0gPSAnZGlyJwotCi1mb3IgdW51c2VkIGluIFsnUlVMRV9JTlBVVF9QQVRIJywgJ1JVTEVfSU5QVVRfUk9PVCcsICdSVUxFX0lOUFVUX05BTUUnLAotICAgICAgICAgICAgICAgJ1JVTEVfSU5QVVRfRElSTkFNRScsICdSVUxFX0lOUFVUX0VYVCcsCi0gICAgICAgICAgICAgICAnRVhFQ1VUQUJMRV9QUkVGSVgnLCAnRVhFQ1VUQUJMRV9TVUZGSVgnLAotICAgICAgICAgICAgICAgJ1NUQVRJQ19MSUJfUFJFRklYJywgJ1NUQVRJQ19MSUJfU1VGRklYJywKLSAgICAgICAgICAgICAgICdTSEFSRURfTElCX1BSRUZJWCcsICdTSEFSRURfTElCX1NVRkZJWCcsCi0gICAgICAgICAgICAgICAnQ09ORklHVVJBVElPTl9OQU1FJ106Ci0gIGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1t1bnVzZWRdID0gJycKLQotIyBJbmNsdWRlIGRpcnMgd2lsbCBvY2Nhc2lvbmFseSB1c2UgdGhlIFNIQVJFRF9JTlRFUk1FRElBVEVfRElSIHZhcmlhYmxlIGFzCi0jIHBhcnQgb2YgdGhlIHBhdGggd2hlbiBkZWFsaW5nIHdpdGggZ2VuZXJhdGVkIGhlYWRlcnMuICBUaGlzIHZhbHVlIHdpbGwgYmUKLSMgcmVwbGFjZWQgZHluYW1pY2FsbHkgZm9yIGVhY2ggY29uZmlndXJhdGlvbi4KLWdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snU0hBUkVEX0lOVEVSTUVESUFURV9ESVInXSA9IFwKLSAgICAnJFNIQVJFRF9JTlRFUk1FRElBVEVTX0RJUicKLQotCi1kZWYgQ2FsY3VsYXRlVmFyaWFibGVzKGRlZmF1bHRfdmFyaWFibGVzLCBwYXJhbXMpOgotICBnZW5lcmF0b3JfZmxhZ3MgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkKLSAgZm9yIGtleSwgdmFsIGluIGdlbmVyYXRvcl9mbGFncy5pdGVtcygpOgotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoa2V5LCB2YWwpCi0gIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ09TJywgZ3lwLmNvbW1vbi5HZXRGbGF2b3IocGFyYW1zKSkKLQotCi1kZWYgQ2FsY3VsYXRlR2VuZXJhdG9ySW5wdXRJbmZvKHBhcmFtcyk6Ci0gICIiIkNhbGN1bGF0ZSB0aGUgZ2VuZXJhdG9yIHNwZWNpZmljIGluZm8gdGhhdCBnZXRzIGZlZCB0byBpbnB1dCAoY2FsbGVkIGJ5Ci0gIGd5cCkuIiIiCi0gIGdlbmVyYXRvcl9mbGFncyA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KQotICBpZiBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCdhZGp1c3Rfc3RhdGljX2xpYnJhcmllcycsIEZhbHNlKToKLSAgICBnbG9iYWwgZ2VuZXJhdG9yX3dhbnRzX3N0YXRpY19saWJyYXJ5X2RlcGVuZGVuY2llc19hZGp1c3RlZAotICAgIGdlbmVyYXRvcl93YW50c19zdGF0aWNfbGlicmFyeV9kZXBlbmRlbmNpZXNfYWRqdXN0ZWQgPSBUcnVlCi0KLQotZGVmIEdldEFsbEluY2x1ZGVEaXJlY3Rvcmllcyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfaW50ZXJtZWRpYXRlc19kaXIsIGNvbmZpZ19uYW1lKToKLSAgIiIiQ2FsY3VsYXRlIHRoZSBzZXQgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyB0byBiZSB1c2VkLgotCi0gIFJldHVybnM6Ci0gICAgQSBsaXN0IGluY2x1ZGluZyBhbGwgdGhlIGluY2x1ZGVfZGlyJ3Mgc3BlY2lmaWVkIGZvciBldmVyeSB0YXJnZXQgZm9sbG93ZWQKLSAgICBieSBhbnkgaW5jbHVkZSBkaXJlY3RvcmllcyB0aGF0IHdlcmUgYWRkZWQgYXMgY2ZsYWcgY29tcGlsZXIgb3B0aW9ucy4KLSAgIiIiCi0KLSAgZ3lwX2luY2x1ZGVzX3NldCA9IHNldCgpCi0gIGNvbXBpbGVyX2luY2x1ZGVzX2xpc3QgPSBbXQotCi0gIGZvciB0YXJnZXRfbmFtZSBpbiB0YXJnZXRfbGlzdDoKLSAgICB0YXJnZXQgPSB0YXJnZXRfZGljdHNbdGFyZ2V0X25hbWVdCi0gICAgaWYgY29uZmlnX25hbWUgaW4gdGFyZ2V0Wydjb25maWd1cmF0aW9ucyddOgotICAgICAgY29uZmlnID0gdGFyZ2V0Wydjb25maWd1cmF0aW9ucyddW2NvbmZpZ19uYW1lXQotCi0gICAgICAjIExvb2sgZm9yIGFueSBpbmNsdWRlIGRpcnMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgYWRkZWQgdmlhIGNmbGFncy4gVGhpcwotICAgICAgIyBtYXkgYmUgZG9uZSBpbiBneXAgZmlsZXMgdG8gZm9yY2UgY2VydGFpbiBpbmNsdWRlcyB0byBjb21lIGF0IHRoZSBlbmQuCi0gICAgICAjIFRPRE8oamdyZWVud2FsZCk6IENoYW5nZSB0aGUgZ3lwIGZpbGVzIHRvIG5vdCBhYnVzZSBjZmxhZ3MgZm9yIHRoaXMsIGFuZAotICAgICAgIyByZW1vdmUgdGhpcy4KLSAgICAgIGNmbGFncyA9IGNvbmZpZ1snY2ZsYWdzJ10KLSAgICAgIGZvciBjZmxhZyBpbiBjZmxhZ3M6Ci0gICAgICAgIGluY2x1ZGVfZGlyID0gJycKLSAgICAgICAgaWYgY2ZsYWcuc3RhcnRzd2l0aCgnLUknKToKLSAgICAgICAgICBpbmNsdWRlX2RpciA9IGNmbGFnWzI6XQotICAgICAgICBpZiBpbmNsdWRlX2RpciBhbmQgbm90IGluY2x1ZGVfZGlyIGluIGNvbXBpbGVyX2luY2x1ZGVzX2xpc3Q6Ci0gICAgICAgICAgY29tcGlsZXJfaW5jbHVkZXNfbGlzdC5hcHBlbmQoaW5jbHVkZV9kaXIpCi0KLSAgICAgICMgRmluZCBzdGFuZGFyZCBneXAgaW5jbHVkZSBkaXJzLgotICAgICAgaWYgY29uZmlnLmhhc19rZXkoJ2luY2x1ZGVfZGlycycpOgotICAgICAgICBpbmNsdWRlX2RpcnMgPSBjb25maWdbJ2luY2x1ZGVfZGlycyddCi0gICAgICAgIGZvciBpbmNsdWRlX2RpciBpbiBpbmNsdWRlX2RpcnM6Ci0gICAgICAgICAgaW5jbHVkZV9kaXIgPSBpbmNsdWRlX2Rpci5yZXBsYWNlKCckU0hBUkVEX0lOVEVSTUVESUFURVNfRElSJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2ludGVybWVkaWF0ZXNfZGlyKQotICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGluY2x1ZGVfZGlyKToKLSAgICAgICAgICAgIGJhc2VfZGlyID0gb3MucGF0aC5kaXJuYW1lKHRhcmdldF9uYW1lKQotCi0gICAgICAgICAgICBpbmNsdWRlX2RpciA9IGJhc2VfZGlyICsgJy8nICsgaW5jbHVkZV9kaXIKLSAgICAgICAgICAgIGluY2x1ZGVfZGlyID0gb3MucGF0aC5hYnNwYXRoKGluY2x1ZGVfZGlyKQotCi0gICAgICAgICAgaWYgbm90IGluY2x1ZGVfZGlyIGluIGd5cF9pbmNsdWRlc19zZXQ6Ci0gICAgICAgICAgICBneXBfaW5jbHVkZXNfc2V0LmFkZChpbmNsdWRlX2RpcikKLQotCi0gICMgR2VuZXJhdGUgYSBsaXN0IHRoYXQgaGFzIGFsbCB0aGUgaW5jbHVkZSBkaXJzLgotICBhbGxfaW5jbHVkZXNfbGlzdCA9IGxpc3QoZ3lwX2luY2x1ZGVzX3NldCkKLSAgYWxsX2luY2x1ZGVzX2xpc3Quc29ydCgpCi0gIGZvciBjb21waWxlcl9pbmNsdWRlIGluIGNvbXBpbGVyX2luY2x1ZGVzX2xpc3Q6Ci0gICAgaWYgbm90IGNvbXBpbGVyX2luY2x1ZGUgaW4gZ3lwX2luY2x1ZGVzX3NldDoKLSAgICAgIGFsbF9pbmNsdWRlc19saXN0LmFwcGVuZChjb21waWxlcl9pbmNsdWRlKQotCi0gICMgQWxsIGRvbmUuCi0gIHJldHVybiBhbGxfaW5jbHVkZXNfbGlzdAotCi0KLWRlZiBHZXRDb21waWxlclBhdGgodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSk6Ci0gICIiIkRldGVybWluZSBhIGNvbW1hbmQgdGhhdCBjYW4gYmUgdXNlZCB0byBpbnZva2UgdGhlIGNvbXBpbGVyLgotCi0gIFJldHVybnM6Ci0gICAgSWYgdGhpcyBpcyBhIGd5cCBwcm9qZWN0IHRoYXQgaGFzIGV4cGxpY2l0IG1ha2Ugc2V0dGluZ3MsIHRyeSB0byBkZXRlcm1pbmUKLSAgICB0aGUgY29tcGlsZXIgZnJvbSB0aGF0LiAgT3RoZXJ3aXNlLCBzZWUgaWYgYSBjb21waWxlciB3YXMgc3BlY2lmaWVkIHZpYSB0aGUKLSAgICBDQ190YXJnZXQgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gICIiIgotCi0gICMgRmlyc3QsIHNlZSBpZiB0aGUgY29tcGlsZXIgaXMgY29uZmlndXJlZCBpbiBtYWtlJ3Mgc2V0dGluZ3MuCi0gIGJ1aWxkX2ZpbGUsIF8sIF8gPSBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KHRhcmdldF9saXN0WzBdKQotICBtYWtlX2dsb2JhbF9zZXR0aW5nc19kaWN0ID0gZGF0YVtidWlsZF9maWxlXS5nZXQoJ21ha2VfZ2xvYmFsX3NldHRpbmdzJywge30pCi0gIGZvciBrZXksIHZhbHVlIGluIG1ha2VfZ2xvYmFsX3NldHRpbmdzX2RpY3Q6Ci0gICAgaWYga2V5IGluIFsnQ0MnLCAnQ1hYJ106Ci0gICAgICByZXR1cm4gdmFsdWUKLQotICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgY29tcGlsZXIgd2FzIHNwZWNpZmllZCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgZm9yIGtleSBpbiBbJ0NDX3RhcmdldCcsICdDQycsICdDWFgnXToKLSAgICBjb21waWxlciA9IG9zLmVudmlyb24uZ2V0KGtleSkKLSAgICBpZiBjb21waWxlcjoKLSAgICAgIHJldHVybiBjb21waWxlcgotCi0gIHJldHVybiAnZ2NjJwotCi0KLWRlZiBHZXRBbGxEZWZpbmVzKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIGNvbmZpZ19uYW1lKToKLSAgIiIiQ2FsY3VsYXRlIHRoZSBkZWZpbmVzIGZvciBhIHByb2plY3QuCi0KLSAgUmV0dXJuczoKLSAgICBBIGRpY3QgdGhhdCBpbmNsdWRlcyBleHBsaWN0IGRlZmluZXMgZGVjbGFyZWQgaW4gZ3lwIGZpbGVzIGFsb25nIHdpdGggYWxsIG9mCi0gICAgdGhlIGRlZmF1bHQgZGVmaW5lcyB0aGF0IHRoZSBjb21waWxlciB1c2VzLgotICAiIiIKLQotICAjIEdldCBkZWZpbmVzIGRlY2xhcmVkIGluIHRoZSBneXAgZmlsZXMuCi0gIGFsbF9kZWZpbmVzID0ge30KLSAgZm9yIHRhcmdldF9uYW1lIGluIHRhcmdldF9saXN0OgotICAgIHRhcmdldCA9IHRhcmdldF9kaWN0c1t0YXJnZXRfbmFtZV0KLQotICAgIGlmIGNvbmZpZ19uYW1lIGluIHRhcmdldFsnY29uZmlndXJhdGlvbnMnXToKLSAgICAgIGNvbmZpZyA9IHRhcmdldFsnY29uZmlndXJhdGlvbnMnXVtjb25maWdfbmFtZV0KLSAgICAgIGZvciBkZWZpbmUgaW4gY29uZmlnWydkZWZpbmVzJ106Ci0gICAgICAgIHNwbGl0X2RlZmluZSA9IGRlZmluZS5zcGxpdCgnPScsIDEpCi0gICAgICAgIGlmIGxlbihzcGxpdF9kZWZpbmUpID09IDE6Ci0gICAgICAgICAgc3BsaXRfZGVmaW5lLmFwcGVuZCgnMScpCi0gICAgICAgIGlmIHNwbGl0X2RlZmluZVswXS5zdHJpcCgpIGluIGFsbF9kZWZpbmVzOgotICAgICAgICAgICMgQWxyZWFkeSBkZWZpbmVkCi0gICAgICAgICAgY29udGludWUKLQotICAgICAgICBhbGxfZGVmaW5lc1tzcGxpdF9kZWZpbmVbMF0uc3RyaXAoKV0gPSBzcGxpdF9kZWZpbmVbMV0uc3RyaXAoKQotCi0gICMgR2V0IGRlZmF1bHQgY29tcGlsZXIgZGVmaW5lcyAoaWYgcG9zc2libGUpLgotICBjY190YXJnZXQgPSBHZXRDb21waWxlclBhdGgodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSkKLSAgaWYgY2NfdGFyZ2V0OgotICAgIGNvbW1hbmQgPSBzaGxleC5zcGxpdChjY190YXJnZXQpCi0gICAgY29tbWFuZC5leHRlbmQoWyctRScsICctZE0nLCAnLSddKQotICAgIGNwcF9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzPWNvbW1hbmQsIGN3ZD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICBjcHBfb3V0cHV0ID0gY3BwX3Byb2MuY29tbXVuaWNhdGUoKVswXQotICAgIGNwcF9saW5lcyA9IGNwcF9vdXRwdXQuc3BsaXQoJ1xuJykKLSAgICBmb3IgY3BwX2xpbmUgaW4gY3BwX2xpbmVzOgotICAgICAgaWYgbm90IGNwcF9saW5lLnN0cmlwKCk6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBjcHBfbGluZV9wYXJ0cyA9IGNwcF9saW5lLnNwbGl0KCcgJywgMikKLSAgICAgIGtleSA9IGNwcF9saW5lX3BhcnRzWzFdCi0gICAgICBpZiBsZW4oY3BwX2xpbmVfcGFydHMpID49IDM6Ci0gICAgICAgIHZhbCA9IGNwcF9saW5lX3BhcnRzWzJdCi0gICAgICBlbHNlOgotICAgICAgICB2YWwgPSAnMScKLSAgICAgIGFsbF9kZWZpbmVzW2tleV0gPSB2YWwKLQotICByZXR1cm4gYWxsX2RlZmluZXMKLQotCi1kZWYgV3JpdGVJbmNsdWRlUGF0aHMob3V0LCBlY2xpcHNlX2xhbmdzLCBpbmNsdWRlX2RpcnMpOgotICAiIiJXcml0ZSB0aGUgaW5jbHVkZXMgc2VjdGlvbiBvZiBhIENEVCBzZXR0aW5ncyBleHBvcnQgZmlsZS4iIiIKLQotICBvdXQud3JpdGUoJyAgPHNlY3Rpb24gbmFtZT0ib3JnLmVjbGlwc2UuY2R0LmludGVybmFsLnVpLndpemFyZHMuJyBcCi0gICAgICAgICAgICAnc2V0dGluZ3N3aXphcmRzLkluY2x1ZGVQYXRocyI+XG4nKQotICBvdXQud3JpdGUoJyAgICA8bGFuZ3VhZ2UgbmFtZT0iaG9sZGVyIGZvciBsaWJyYXJ5IHNldHRpbmdzIj48L2xhbmd1YWdlPlxuJykKLSAgZm9yIGxhbmcgaW4gZWNsaXBzZV9sYW5nczoKLSAgICBvdXQud3JpdGUoJyAgICA8bGFuZ3VhZ2UgbmFtZT0iJXMiPlxuJyAlIGxhbmcpCi0gICAgZm9yIGluY2x1ZGVfZGlyIGluIGluY2x1ZGVfZGlyczoKLSAgICAgIG91dC53cml0ZSgnICAgICAgPGluY2x1ZGVwYXRoIHdvcmtzcGFjZV9wYXRoPSJmYWxzZSI+JXM8L2luY2x1ZGVwYXRoPlxuJyAlCi0gICAgICAgICAgICAgICAgaW5jbHVkZV9kaXIpCi0gICAgb3V0LndyaXRlKCcgICAgPC9sYW5ndWFnZT5cbicpCi0gIG91dC53cml0ZSgnICA8L3NlY3Rpb24+XG4nKQotCi0KLWRlZiBXcml0ZU1hY3JvcyhvdXQsIGVjbGlwc2VfbGFuZ3MsIGRlZmluZXMpOgotICAiIiJXcml0ZSB0aGUgbWFjcm9zIHNlY3Rpb24gb2YgYSBDRFQgc2V0dGluZ3MgZXhwb3J0IGZpbGUuIiIiCi0KLSAgb3V0LndyaXRlKCcgIDxzZWN0aW9uIG5hbWU9Im9yZy5lY2xpcHNlLmNkdC5pbnRlcm5hbC51aS53aXphcmRzLicgXAotICAgICAgICAgICAgJ3NldHRpbmdzd2l6YXJkcy5NYWNyb3MiPlxuJykKLSAgb3V0LndyaXRlKCcgICAgPGxhbmd1YWdlIG5hbWU9ImhvbGRlciBmb3IgbGlicmFyeSBzZXR0aW5ncyI+PC9sYW5ndWFnZT5cbicpCi0gIGZvciBsYW5nIGluIGVjbGlwc2VfbGFuZ3M6Ci0gICAgb3V0LndyaXRlKCcgICAgPGxhbmd1YWdlIG5hbWU9IiVzIj5cbicgJSBsYW5nKQotICAgIGZvciBrZXkgaW4gc29ydGVkKGRlZmluZXMuaXRlcmtleXMoKSk6Ci0gICAgICBvdXQud3JpdGUoJyAgICAgIDxtYWNybz48bmFtZT4lczwvbmFtZT48dmFsdWU+JXM8L3ZhbHVlPjwvbWFjcm8+XG4nICUKLSAgICAgICAgICAgICAgICAoZXNjYXBlKGtleSksIGVzY2FwZShkZWZpbmVzW2tleV0pKSkKLSAgICBvdXQud3JpdGUoJyAgICA8L2xhbmd1YWdlPlxuJykKLSAgb3V0LndyaXRlKCcgIDwvc2VjdGlvbj5cbicpCi0KLQotZGVmIEdlbmVyYXRlT3V0cHV0Rm9yQ29uZmlnKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfbmFtZSk6Ci0gIG9wdGlvbnMgPSBwYXJhbXNbJ29wdGlvbnMnXQotICBnZW5lcmF0b3JfZmxhZ3MgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkKLQotICAjIGJ1aWxkX2RpcjogcmVsYXRpdmUgcGF0aCBmcm9tIHNvdXJjZSByb290IHRvIG91ciBvdXRwdXQgZmlsZXMuCi0gICMgZS5nLiAib3V0L0RlYnVnIgotICBidWlsZF9kaXIgPSBvcy5wYXRoLmpvaW4oZ2VuZXJhdG9yX2ZsYWdzLmdldCgnb3V0cHV0X2RpcicsICdvdXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19uYW1lKQotCi0gIHRvcGxldmVsX2J1aWxkID0gb3MucGF0aC5qb2luKG9wdGlvbnMudG9wbGV2ZWxfZGlyLCBidWlsZF9kaXIpCi0gIHNoYXJlZF9pbnRlcm1lZGlhdGVfZGlyID0gb3MucGF0aC5qb2luKHRvcGxldmVsX2J1aWxkLCAnb2JqJywgJ2dlbicpCi0KLSAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRvcGxldmVsX2J1aWxkKToKLSAgICBvcy5tYWtlZGlycyh0b3BsZXZlbF9idWlsZCkKLSAgb3V0ID0gb3Blbihvcy5wYXRoLmpvaW4odG9wbGV2ZWxfYnVpbGQsICdlY2xpcHNlLWNkdC1zZXR0aW5ncy54bWwnKSwgJ3cnKQotCi0gIG91dC53cml0ZSgnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5cbicpCi0gIG91dC53cml0ZSgnPGNkdHByb2plY3Rwcm9wZXJ0aWVzPlxuJykKLQotICBlY2xpcHNlX2xhbmdzID0gWydDKysgU291cmNlIEZpbGUnLCAnQyBTb3VyY2UgRmlsZScsICdBc3NlbWJseSBTb3VyY2UgRmlsZScsCi0gICAgICAgICAgICAgICAgICAgJ0dOVSBDKysnLCAnR05VIEMnLCAnQXNzZW1ibHknXQotICBpbmNsdWRlX2RpcnMgPSBHZXRBbGxJbmNsdWRlRGlyZWN0b3JpZXModGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9pbnRlcm1lZGlhdGVfZGlyLCBjb25maWdfbmFtZSkKLSAgV3JpdGVJbmNsdWRlUGF0aHMob3V0LCBlY2xpcHNlX2xhbmdzLCBpbmNsdWRlX2RpcnMpCi0gIGRlZmluZXMgPSBHZXRBbGxEZWZpbmVzKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIGNvbmZpZ19uYW1lKQotICBXcml0ZU1hY3JvcyhvdXQsIGVjbGlwc2VfbGFuZ3MsIGRlZmluZXMpCi0KLSAgb3V0LndyaXRlKCc8L2NkdHByb2plY3Rwcm9wZXJ0aWVzPlxuJykKLSAgb3V0LmNsb3NlKCkKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgIiIiR2VuZXJhdGUgYW4gWE1MIHNldHRpbmdzIGZpbGUgdGhhdCBjYW4gYmUgaW1wb3J0ZWQgaW50byBhIENEVCBwcm9qZWN0LiIiIgotCi0gIGlmIHBhcmFtc1snb3B0aW9ucyddLmdlbmVyYXRvcl9vdXRwdXQ6Ci0gICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgIi0tZ2VuZXJhdG9yX291dHB1dCBub3QgaW1wbGVtZW50ZWQgZm9yIGVjbGlwc2UiCi0KLSAgdXNlcl9jb25maWcgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkuZ2V0KCdjb25maWcnLCBOb25lKQotICBpZiB1c2VyX2NvbmZpZzoKLSAgICBHZW5lcmF0ZU91dHB1dEZvckNvbmZpZyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb25maWcpCi0gIGVsc2U6Ci0gICAgY29uZmlnX25hbWVzID0gdGFyZ2V0X2RpY3RzW3RhcmdldF9saXN0WzBdXVsnY29uZmlndXJhdGlvbnMnXS5rZXlzKCkKLSAgICBmb3IgY29uZmlnX25hbWUgaW4gY29uZmlnX25hbWVzOgotICAgICAgR2VuZXJhdGVPdXRwdXRGb3JDb25maWcodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX25hbWUpCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL2d5cGQucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9neXBkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmVmNTdmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL2d5cGQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiImd5cGQgb3V0cHV0IG1vZHVsZQotCi1UaGlzIG1vZHVsZSBwcm9kdWNlcyBneXAgaW5wdXQgYXMgaXRzIG91dHB1dC4gIE91dHB1dCBmaWxlcyBhcmUgZ2l2ZW4gdGhlCi0uZ3lwZCBleHRlbnNpb24gdG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIC5neXAgZmlsZXMgdGhhdCB0aGV5IGFyZSBnZW5lcmF0ZWQKLWZyb20uICBJbnRlcm5hbCByZWZlcmVuY2VzIHRvIC5neXAgZmlsZXMgKHN1Y2ggYXMgdGhvc2UgZm91bmQgaW4KLSJkZXBlbmRlbmNpZXMiIHNlY3Rpb25zKSBhcmUgbm90IGFkanVzdGVkIHRvIHBvaW50IHRvIC5neXBkIGZpbGVzIGluc3RlYWQ7Ci11bmxpa2Ugb3RoZXIgcGF0aHMsIHdoaWNoIGFyZSByZWxhdGl2ZSB0byB0aGUgLmd5cCBvciAuZ3lwZCBmaWxlLCBzdWNoIHBhdGhzCi1hcmUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIGd5cCB3YXMgcnVuIHRvIGNyZWF0ZSB0aGUgLmd5cGQgZmlsZS4KLQotVGhpcyBnZW5lcmF0b3IgbW9kdWxlIGlzIGludGVuZGVkIHRvIGJlIGEgc2FtcGxlIGFuZCBhIGRlYnVnZ2luZyBhaWQsIGhlbmNlCi10aGUgImQiIGZvciAiZGVidWciIGluIC5neXBkLiAgSXQgaXMgdXNlZnVsIHRvIGluc3BlY3QgdGhlIHJlc3VsdHMgb2YgdGhlCi12YXJpb3VzIG1lcmdlcywgZXhwYW5zaW9ucywgYW5kIGNvbmRpdGlvbmFsIGV2YWx1YXRpb25zIHBlcmZvcm1lZCBieSBneXAKLWFuZCB0byBzZWUgYSByZXByZXNlbnRhdGlvbiBvZiB3aGF0IHdvdWxkIGJlIGZlZCB0byBhIGdlbmVyYXRvciBtb2R1bGUuCi0KLUl0J3Mgbm90IGFkdmlzYWJsZSB0byByZW5hbWUgLmd5cGQgZmlsZXMgcHJvZHVjZWQgYnkgdGhpcyBtb2R1bGUgdG8gLmd5cCwKLWJlY2F1c2UgdGhleSB3aWxsIGhhdmUgYWxsIG1lcmdlcywgZXhwYW5zaW9ucywgYW5kIGV2YWx1YXRpb25zIGFscmVhZHkKLXBlcmZvcm1lZCBhbmQgdGhlIHJlbGV2YW50IGNvbnN0cnVjdHMgbm90IHByZXNlbnQgaW4gdGhlIG91dHB1dDsgcGF0aHMgdG8KLWRlcGVuZGVuY2llcyBtYXkgYmUgd3Jvbmc7IGFuZCB2YXJpb3VzIHNlY3Rpb25zIHRoYXQgZG8gbm90IGJlbG9uZyBpbiAuZ3lwCi1maWxlcyBzdWNoIGFzIHN1Y2ggYXMgImluY2x1ZGVkX2ZpbGVzIiBhbmQgIipfZXhjbHVkZWQiIHdpbGwgYmUgcHJlc2VudC4KLU91dHB1dCB3aWxsIGFsc28gYmUgc3RyaXBwZWQgb2YgY29tbWVudHMuICBUaGlzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSBhCi1nZW5lcmFsLXB1cnBvc2UgZ3lwIHByZXR0eS1wcmludGVyOyBmb3IgdGhhdCwgeW91IHByb2JhYmx5IGp1c3Qgd2FudCB0bwotcnVuICJwcHJpbnQucHByaW50KGV2YWwob3Blbignc291cmNlLmd5cCcpLnJlYWQoKSkpIiwgd2hpY2ggd2lsbCBzdGlsbCBzdHJpcAotY29tbWVudHMgYnV0IHdvbid0IGRvIGFsbCBvZiB0aGUgb3RoZXIgdGhpbmdzIGRvbmUgdG8gdGhpcyBtb2R1bGUncyBvdXRwdXQuCi0KLVRoZSBzcGVjaWZpYyBmb3JtYXR0aW5nIG9mIHRoZSBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoaXMgbW9kdWxlIGlzIHN1YmplY3QKLXRvIGNoYW5nZS4KLSIiIgotCi0KLWltcG9ydCBneXAuY29tbW9uCi1pbXBvcnQgZXJybm8KLWltcG9ydCBvcwotaW1wb3J0IHBwcmludAotCi0KLSMgVGhlc2UgdmFyaWFibGVzIHNob3VsZCBqdXN0IGJlIHNwaXQgYmFjayBvdXQgYXMgdmFyaWFibGUgcmVmZXJlbmNlcy4KLV9nZW5lcmF0b3JfaWRlbnRpdHlfdmFyaWFibGVzID0gWwotICAnRVhFQ1VUQUJMRV9QUkVGSVgnLAotICAnRVhFQ1VUQUJMRV9TVUZGSVgnLAotICAnSU5URVJNRURJQVRFX0RJUicsCi0gICdQUk9EVUNUX0RJUicsCi0gICdSVUxFX0lOUFVUX1JPT1QnLAotICAnUlVMRV9JTlBVVF9ESVJOQU1FJywKLSAgJ1JVTEVfSU5QVVRfRVhUJywKLSAgJ1JVTEVfSU5QVVRfTkFNRScsCi0gICdSVUxFX0lOUFVUX1BBVEgnLAotICAnU0hBUkVEX0lOVEVSTUVESUFURV9ESVInLAotXQotCi0jIGd5cGQgZG9lc24ndCBkZWZpbmUgYSBkZWZhdWx0IHZhbHVlIGZvciBPUyBsaWtlIG1hbnkgb3RoZXIgZ2VuZXJhdG9yCi0jIG1vZHVsZXMuICBTcGVjaWZ5ICItRCBPUz13aGF0ZXZlciIgb24gdGhlIGNvbW1hbmQgbGluZSB0byBwcm92aWRlIGEgdmFsdWUuCi1nZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXMgPSB7Ci19Ci0KLSMgZ3lwZCBzdXBwb3J0cyBtdWx0aXBsZSB0b29sc2V0cwotZ2VuZXJhdG9yX3N1cHBvcnRzX211bHRpcGxlX3Rvb2xzZXRzID0gVHJ1ZQotCi0jIFRPRE8obWFyayk6IFRoaXMgYWx3YXlzIHVzZXMgPCwgd2hpY2ggaXNuJ3QgcmlnaHQuICBUaGUgaW5wdXQgbW9kdWxlIHNob3VsZAotIyBub3RpZnkgdGhlIGdlbmVyYXRvciB0byB0ZWxsIGl0IHdoaWNoIHBoYXNlIGl0IGlzIG9wZXJhdGluZyBpbiwgYW5kIHRoaXMKLSMgbW9kdWxlIHNob3VsZCB1c2UgPCBmb3IgdGhlIGVhcmx5IHBoYXNlIGFuZCB0aGVuIHN3aXRjaCB0byA+IGZvciB0aGUgbGF0ZQotIyBwaGFzZS4gIEJvbnVzIHBvaW50cyBmb3IgY2FycnlpbmcgQCBiYWNrIGludG8gdGhlIG91dHB1dCB0b28uCi1mb3IgdiBpbiBfZ2VuZXJhdG9yX2lkZW50aXR5X3ZhcmlhYmxlczoKLSAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzW3ZdID0gJzwoJXMpJyAlIHYKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgb3V0cHV0X2ZpbGVzID0ge30KLSAgZm9yIHF1YWxpZmllZF90YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgW2lucHV0X2ZpbGUsIHRhcmdldF0gPSBcCi0gICAgICAgIGd5cC5jb21tb24uUGFyc2VRdWFsaWZpZWRUYXJnZXQocXVhbGlmaWVkX3RhcmdldClbMDoyXQotCi0gICAgaWYgaW5wdXRfZmlsZVstNDpdICE9ICcuZ3lwJzoKLSAgICAgIGNvbnRpbnVlCi0gICAgaW5wdXRfZmlsZV9zdGVtID0gaW5wdXRfZmlsZVs6LTRdCi0gICAgb3V0cHV0X2ZpbGUgPSBpbnB1dF9maWxlX3N0ZW0gKyBwYXJhbXNbJ29wdGlvbnMnXS5zdWZmaXggKyAnLmd5cGQnCi0KLSAgICBpZiBub3Qgb3V0cHV0X2ZpbGUgaW4gb3V0cHV0X2ZpbGVzOgotICAgICAgb3V0cHV0X2ZpbGVzW291dHB1dF9maWxlXSA9IGlucHV0X2ZpbGUKLQotICBmb3Igb3V0cHV0X2ZpbGUsIGlucHV0X2ZpbGUgaW4gb3V0cHV0X2ZpbGVzLml0ZXJpdGVtcygpOgotICAgIG91dHB1dCA9IG9wZW4ob3V0cHV0X2ZpbGUsICd3JykKLSAgICBwcHJpbnQucHByaW50KGRhdGFbaW5wdXRfZmlsZV0sIG91dHB1dCkKLSAgICBvdXRwdXQuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvZ3lwc2gucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9neXBzaC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0MDVmNC4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9neXBzaC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiZ3lwc2ggb3V0cHV0IG1vZHVsZQotCi1neXBzaCBpcyBhIEdZUCBzaGVsbC4gIEl0J3Mgbm90IHJlYWxseSBhIGdlbmVyYXRvciBwZXIgc2UuICBBbGwgaXQgZG9lcyBpcwotZmlyZSB1cCBhbiBpbnRlcmFjdGl2ZSBQeXRob24gc2Vzc2lvbiB3aXRoIGEgZmV3IGxvY2FsIHZhcmlhYmxlcyBzZXQgdG8gdGhlCi12YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBnZW5lcmF0b3IuICBMaWtlIGd5cGQsIGl0J3MgaW50ZW5kZWQgYXMgYSBkZWJ1Z2dpbmcKLWFpZCwgdG8gZmFjaWxpdGF0ZSB0aGUgZXhwbG9yYXRpb24gb2YgLmd5cCBzdHJ1Y3R1cmVzIGFmdGVyIGJlaW5nIHByb2Nlc3NlZAotYnkgdGhlIGlucHV0IG1vZHVsZS4KLQotVGhlIGV4cGVjdGVkIHVzYWdlIGlzICJneXAgLWYgZ3lwc2ggLUQgT1M9ZGVzaXJlZF9vcyIuCi0iIiIKLQotCi1pbXBvcnQgY29kZQotaW1wb3J0IHN5cwotCi0KLSMgQWxsIG9mIHRoaXMgc3R1ZmYgYWJvdXQgZ2VuZXJhdG9yIHZhcmlhYmxlcyB3YXMgbG92aW5nbHkgcmlwcGVkIGZyb20gZ3lwZC5weS4KLSMgVGhhdCBtb2R1bGUgaGFzIGEgbXVjaCBiZXR0ZXIgZGVzY3JpcHRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGFuZCB3aHkuCi1fZ2VuZXJhdG9yX2lkZW50aXR5X3ZhcmlhYmxlcyA9IFsKLSAgJ0VYRUNVVEFCTEVfUFJFRklYJywKLSAgJ0VYRUNVVEFCTEVfU1VGRklYJywKLSAgJ0lOVEVSTUVESUFURV9ESVInLAotICAnUFJPRFVDVF9ESVInLAotICAnUlVMRV9JTlBVVF9ST09UJywKLSAgJ1JVTEVfSU5QVVRfRElSTkFNRScsCi0gICdSVUxFX0lOUFVUX0VYVCcsCi0gICdSVUxFX0lOUFVUX05BTUUnLAotICAnUlVMRV9JTlBVVF9QQVRIJywKLSAgJ1NIQVJFRF9JTlRFUk1FRElBVEVfRElSJywKLV0KLQotZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzID0gewotfQotCi1mb3IgdiBpbiBfZ2VuZXJhdG9yX2lkZW50aXR5X3ZhcmlhYmxlczoKLSAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzW3ZdID0gJzwoJXMpJyAlIHYKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgbG9jYWxzID0gewotICAgICAgICAndGFyZ2V0X2xpc3QnOiAgdGFyZ2V0X2xpc3QsCi0gICAgICAgICd0YXJnZXRfZGljdHMnOiB0YXJnZXRfZGljdHMsCi0gICAgICAgICdkYXRhJzogICAgICAgICBkYXRhLAotICAgICAgfQotCi0gICMgVXNlIGEgYmFubmVyIHRoYXQgbG9va3MgbGlrZSB0aGUgc3RvY2sgUHl0aG9uIG9uZSBhbmQgbGlrZSB3aGF0Ci0gICMgY29kZS5pbnRlcmFjdCB1c2VzIGJ5IGRlZmF1bHQsIGJ1dCB0YWNrIG9uIHNvbWV0aGluZyB0byBpbmRpY2F0ZSB3aGF0Ci0gICMgbG9jYWxzIGFyZSBhdmFpbGFibGUsIGFuZCBpZGVudGlmeSBneXBzaC4KLSAgYmFubmVyPSdQeXRob24gJXMgb24gJXNcbmxvY2Fscy5rZXlzKCkgPSAlc1xuZ3lwc2gnICUgXAotICAgICAgICAgKHN5cy52ZXJzaW9uLCBzeXMucGxhdGZvcm0sIHJlcHIoc29ydGVkKGxvY2Fscy5rZXlzKCkpKSkKLQotICBjb2RlLmludGVyYWN0KGJhbm5lciwgbG9jYWw9bG9jYWxzKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbWFrZS5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL21ha2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMDQ1ZDguLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbWFrZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxNTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0jIE5vdGVzOgotIwotIyBUaGlzIGlzIGFsbCByb3VnaGx5IGJhc2VkIG9uIHRoZSBNYWtlZmlsZSBzeXN0ZW0gdXNlZCBieSB0aGUgTGludXgKLSMga2VybmVsLCBidXQgaXMgYSBub24tcmVjdXJzaXZlIG1ha2UgLS0gd2UgcHV0IHRoZSBlbnRpcmUgZGVwZW5kZW5jeQotIyBncmFwaCBpbiBmcm9udCBvZiBtYWtlIGFuZCBsZXQgaXQgZmlndXJlIGl0IG91dC4KLSMKLSMgVGhlIGNvZGUgYmVsb3cgZ2VuZXJhdGVzIGEgc2VwYXJhdGUgLm1rIGZpbGUgZm9yIGVhY2ggdGFyZ2V0LCBidXQKLSMgYWxsIGFyZSBzb3VyY2VkIGJ5IHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuICBUaGlzIG1lYW5zIHRoYXQgYWxsCi0jIHZhcmlhYmxlcyBpbiAubWstZmlsZXMgY2xvYmJlciBvbmUgYW5vdGhlci4gIEJlIGNhcmVmdWwgdG8gdXNlIDo9Ci0jIHdoZXJlIGFwcHJvcHJpYXRlIGZvciBpbW1lZGlhdGUgZXZhbHVhdGlvbiwgYW5kIHNpbWlsYXJseSB0byB3YXRjaAotIyB0aGF0IHlvdSdyZSBub3QgcmVseWluZyBvbiBhIHZhcmlhYmxlIHZhbHVlIHRvIGxhc3QgYmV3ZWVuIGRpZmZlcmVudAotIyAubWsgZmlsZXMuCi0jCi0jIFRPRE9zOgotIwotIyBHbG9iYWwgc2V0dGluZ3MgYW5kIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBjdXJyZW50bHkgc3R1ZmZlZCBpbiB0aGUKLSMgdG9wbGV2ZWwgTWFrZWZpbGUuICBJdCBtYXkgbWFrZSBzZW5zZSB0byBnZW5lcmF0ZSBzb21lIC5tayBmaWxlcyBvbgotIyB0aGUgc2lkZSB0byBrZWVwIHRoZSB0aGUgZmlsZXMgcmVhZGFibGUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IGd5cAotaW1wb3J0IGd5cC5jb21tb24KLWltcG9ydCBneXAueGNvZGVfZW11bGF0aW9uCi1mcm9tIGd5cC5jb21tb24gaW1wb3J0IEdldEVudmlyb25GYWxsYmFjawotCi1nZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXMgPSB7Ci0gICdFWEVDVVRBQkxFX1BSRUZJWCc6ICcnLAotICAnRVhFQ1VUQUJMRV9TVUZGSVgnOiAnJywKLSAgJ1NUQVRJQ19MSUJfUFJFRklYJzogJ2xpYicsCi0gICdTSEFSRURfTElCX1BSRUZJWCc6ICdsaWInLAotICAnU1RBVElDX0xJQl9TVUZGSVgnOiAnLmEnLAotICAnSU5URVJNRURJQVRFX0RJUic6ICckKG9iaikuJChUT09MU0VUKS8kKFRBUkdFVCkvZ2VuaScsCi0gICdTSEFSRURfSU5URVJNRURJQVRFX0RJUic6ICckKG9iaikvZ2VuJywKLSAgJ1BST0RVQ1RfRElSJzogJyQoYnVpbGRkaXIpJywKLSAgJ1JVTEVfSU5QVVRfUk9PVCc6ICclKElOUFVUX1JPT1QpcycsICAjIFRoaXMgZ2V0cyBleHBhbmRlZCBieSBQeXRob24uCi0gICdSVUxFX0lOUFVUX0RJUk5BTUUnOiAnJShJTlBVVF9ESVJOQU1FKXMnLCAgIyBUaGlzIGdldHMgZXhwYW5kZWQgYnkgUHl0aG9uLgotICAnUlVMRV9JTlBVVF9QQVRIJzogJyQoYWJzcGF0aCAkPCknLAotICAnUlVMRV9JTlBVVF9FWFQnOiAnJChzdWZmaXggJDwpJywKLSAgJ1JVTEVfSU5QVVRfTkFNRSc6ICckKG5vdGRpciAkPCknLAotICAnQ09ORklHVVJBVElPTl9OQU1FJzogJyQoQlVJTERUWVBFKScsCi19Ci0KLSMgTWFrZSBzdXBwb3J0cyBtdWx0aXBsZSB0b29sc2V0cwotZ2VuZXJhdG9yX3N1cHBvcnRzX211bHRpcGxlX3Rvb2xzZXRzID0gVHJ1ZQotCi0jIFJlcXVlc3Qgc29ydGVkIGRlcGVuZGVuY2llcyBpbiB0aGUgb3JkZXIgZnJvbSBkZXBlbmRlbnRzIHRvIGRlcGVuZGVuY2llcy4KLWdlbmVyYXRvcl93YW50c19zb3J0ZWRfZGVwZW5kZW5jaWVzID0gRmFsc2UKLQotIyBQbGFjYXRlcyBweWxpbnQuCi1nZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzID0gW10KLWdlbmVyYXRvcl9hZGRpdGlvbmFsX3BhdGhfc2VjdGlvbnMgPSBbXQotZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzID0gW10KLQotCi1kZWYgQ2FsY3VsYXRlVmFyaWFibGVzKGRlZmF1bHRfdmFyaWFibGVzLCBwYXJhbXMpOgotICAiIiJDYWxjdWxhdGUgYWRkaXRpb25hbCB2YXJpYWJsZXMgZm9yIHVzZSBpbiB0aGUgYnVpbGQgKGNhbGxlZCBieSBneXApLiIiIgotICBmbGF2b3IgPSBneXAuY29tbW9uLkdldEZsYXZvcihwYXJhbXMpCi0gIGlmIGZsYXZvciA9PSAnbWFjJzoKLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdPUycsICdtYWMnKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ1NIQVJFRF9MSUJfU1VGRklYJywgJy5keWxpYicpCi0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdCgnU0hBUkVEX0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddKQotCi0gICAgIyBDb3B5IGFkZGl0aW9uYWwgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIFhjb2RlLCB3aGljaCBpcyBzaGFyZWQKLSAgICAjIGJ5IHRoZSBNYWMgTWFrZSBnZW5lcmF0b3IuCi0gICAgaW1wb3J0IGd5cC5nZW5lcmF0b3IueGNvZGUgYXMgeGNvZGVfZ2VuZXJhdG9yCi0gICAgZ2xvYmFsIGdlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMKLSAgICBnZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzID0gZ2V0YXR0cih4Y29kZV9nZW5lcmF0b3IsCi0gICAgICAgICdnZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzJywgW10pCi0gICAgZ2xvYmFsIGdlbmVyYXRvcl9hZGRpdGlvbmFsX3BhdGhfc2VjdGlvbnMKLSAgICBnZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zID0gZ2V0YXR0cih4Y29kZV9nZW5lcmF0b3IsCi0gICAgICAgICdnZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zJywgW10pCi0gICAgZ2xvYmFsIGdlbmVyYXRvcl9leHRyYV9zb3VyY2VzX2Zvcl9ydWxlcwotICAgIGdlbmVyYXRvcl9leHRyYV9zb3VyY2VzX2Zvcl9ydWxlcyA9IGdldGF0dHIoeGNvZGVfZ2VuZXJhdG9yLAotICAgICAgICAnZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzJywgW10pCi0gICAgQ09NUElMQUJMRV9FWFRFTlNJT05TLnVwZGF0ZSh7Jy5tJzogJ29iamMnLCAnLm1tJyA6ICdvYmpjeHgnfSkKLSAgZWxzZToKLSAgICBvcGVyYXRpbmdfc3lzdGVtID0gZmxhdm9yCi0gICAgaWYgZmxhdm9yID09ICdhbmRyb2lkJzoKLSAgICAgIG9wZXJhdGluZ19zeXN0ZW0gPSAnbGludXgnICAjIEtlZXAgdGhpcyBsZWdhY3kgYmVoYXZpb3IgZm9yIG5vdy4KLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdPUycsIG9wZXJhdGluZ19zeXN0ZW0pCi0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdCgnU0hBUkVEX0xJQl9TVUZGSVgnLCAnLnNvJykKLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdTSEFSRURfTElCX0RJUicsJyQoYnVpbGRkaXIpL2xpYi4kKFRPT0xTRVQpJykKLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdMSUJfRElSJywgJyQob2JqKS4kKFRPT0xTRVQpJykKLQotCi1kZWYgQ2FsY3VsYXRlR2VuZXJhdG9ySW5wdXRJbmZvKHBhcmFtcyk6Ci0gICIiIkNhbGN1bGF0ZSB0aGUgZ2VuZXJhdG9yIHNwZWNpZmljIGluZm8gdGhhdCBnZXRzIGZlZCB0byBpbnB1dCAoY2FsbGVkIGJ5Ci0gIGd5cCkuIiIiCi0gIGdlbmVyYXRvcl9mbGFncyA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KQotICBhbmRyb2lkX25ka192ZXJzaW9uID0gZ2VuZXJhdG9yX2ZsYWdzLmdldCgnYW5kcm9pZF9uZGtfdmVyc2lvbicsIE5vbmUpCi0gICMgQW5kcm9pZCBOREsgcmVxdWlyZXMgYSBzdHJpY3QgbGluayBvcmRlci4KLSAgaWYgYW5kcm9pZF9uZGtfdmVyc2lvbjoKLSAgICBnbG9iYWwgZ2VuZXJhdG9yX3dhbnRzX3NvcnRlZF9kZXBlbmRlbmNpZXMKLSAgICBnZW5lcmF0b3Jfd2FudHNfc29ydGVkX2RlcGVuZGVuY2llcyA9IFRydWUKLQotCi1kZWYgZW5zdXJlX2RpcmVjdG9yeV9leGlzdHMocGF0aCk6Ci0gIGRpciA9IG9zLnBhdGguZGlybmFtZShwYXRoKQotICBpZiBkaXIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgotICAgIG9zLm1ha2VkaXJzKGRpcikKLQotCi0jIFRoZSAuZCBjaGVja2luZyBjb2RlIGJlbG93IHVzZXMgdGhlc2UgZnVuY3Rpb25zOgotIyB3aWxkY2FyZCwgc29ydCwgZm9yZWFjaCwgc2hlbGwsIHdvcmRsaXN0Ci0jIHdpbGRjYXJkIGNhbiBoYW5kbGUgc3BhY2VzLCB0aGUgcmVzdCBjYW4ndC4KLSMgU2luY2UgSSBjb3VsZCBmaW5kIG5vIHdheSB0byBtYWtlIGZvcmVhY2ggd29yayB3aXRoIHNwYWNlcyBpbiBmaWxlbmFtZXMKLSMgY29ycmVjdGx5LCB0aGUgLmQgZmlsZXMgaGF2ZSBzcGFjZXMgcmVwbGFjZWQgd2l0aCBhbm90aGVyIGNoYXJhY3Rlci4gVGhlIC5kCi0jIGZpbGUgZm9yCi0jICAgICBDaHJvbWl1bVwgRnJhbWV3b3JrLmZyYW1ld29yay9mb28KLSMgaXMgZm9yIGV4YW1wbGUKLSMgICAgIG91dC9SZWxlYXNlLy5kZXBzL291dC9SZWxlYXNlL0Nocm9taXVtP0ZyYW1ld29yay5mcmFtZXdvcmsvZm9vCi0jIFRoaXMgaXMgdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLVNQQUNFX1JFUExBQ0VNRU5UID0gJz8nCi0KLQotTElOS19DT01NQU5EU19MSU5VWCA9ICIiIlwKLXF1aWV0X2NtZF9hbGluayA9IEFSKCQoVE9PTFNFVCkpICRACi1jbWRfYWxpbmsgPSBybSAtZiAkQCAmJiAkKEFSLiQoVE9PTFNFVCkpIGNycyAkQCAkKGZpbHRlciAlLm8sJF4pCi0KLXF1aWV0X2NtZF9hbGlua190aGluID0gQVIoJChUT09MU0VUKSkgJEAKLWNtZF9hbGlua190aGluID0gcm0gLWYgJEAgJiYgJChBUi4kKFRPT0xTRVQpKSBjcnNUICRAICQoZmlsdGVyICUubywkXikKLQotIyBEdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gbGlicmFyaWVzIDooLCB3ZSB3cmFwIHRoZQotIyBzcGVjaWFsICJmaWd1cmUgb3V0IGNpcmN1bGFyIGRlcGVuZGVuY2llcyIgZmxhZ3MgYXJvdW5kIHRoZSBlbnRpcmUKLSMgaW5wdXQgbGlzdCBkdXJpbmcgbGlua2luZy4KLXF1aWV0X2NtZF9saW5rID0gTElOSygkKFRPT0xTRVQpKSAkQAotY21kX2xpbmsgPSAkKExJTksuJChUT09MU0VUKSkgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1vICRAIC1XbCwtLXN0YXJ0LWdyb3VwICQoTERfSU5QVVRTKSAtV2wsLS1lbmQtZ3JvdXAgJChMSUJTKQotCi0jIFdlIHN1cHBvcnQgdHdvIGtpbmRzIG9mIHNoYXJlZCBvYmplY3RzICguc28pOgotIyAxKSBzaGFyZWRfbGlicmFyeSwgd2hpY2ggaXMganVzdCBidW5kbGluZyB0b2dldGhlciBtYW55IGRlcGVuZGVudCBsaWJyYXJpZXMKLSMgaW50byBhIGxpbmsgbGluZS4KLSMgMikgbG9hZGFibGVfbW9kdWxlLCB3aGljaCBpcyBnZW5lcmF0aW5nIGEgbW9kdWxlIGludGVuZGVkIGZvciBkbG9wZW4oKS4KLSMKLSMgVGhleSBkaWZmZXIgb25seSBzbGlnaHRseToKLSMgSW4gdGhlIGZvcm1lciBjYXNlLCB3ZSB3YW50IHRvIHBhY2thZ2UgYWxsIGRlcGVuZGVudCBjb2RlIGludG8gdGhlIC5zby4KLSMgSW4gdGhlIGxhdHRlciBjYXNlLCB3ZSB3YW50IHRvIHBhY2thZ2UganVzdCB0aGUgQVBJIGV4cG9zZWQgYnkgdGhlCi0jIG91dGVybW9zdCBtb2R1bGUuCi0jIFRoaXMgbWVhbnMgc2hhcmVkX2xpYnJhcnkgdXNlcyAtLXdob2xlLWFyY2hpdmUsIHdoaWxlIGxvYWRhYmxlX21vZHVsZSBkb2Vzbid0LgotIyAoTm90ZSB0aGF0IC0td2hvbGUtYXJjaGl2ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgLS1zdGFydC1ncm91cCB1c2VkIGluCi0jIG5vcm1hbCBsaW5raW5nLikKLQotIyBPdGhlciBzaGFyZWQtb2JqZWN0IGxpbmsgbm90ZXM6Ci0jIC0gU2V0IFNPTkFNRSB0byB0aGUgbGlicmFyeSBmaWxlbmFtZSBzbyBvdXIgYmluYXJpZXMgZG9uJ3QgcmVmZXJlbmNlCi0jIHRoZSBsb2NhbCwgYWJzb2x1dGUgcGF0aHMgdXNlZCBvbiB0aGUgbGluayBjb21tYW5kLWxpbmUuCi1xdWlldF9jbWRfc29saW5rID0gU09MSU5LKCQoVE9PTFNFVCkpICRACi1jbWRfc29saW5rID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1XbCwtc29uYW1lPSQoQEYpIC1vICRAIC1XbCwtLXdob2xlLWFyY2hpdmUgJChMRF9JTlBVVFMpIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgJChMSUJTKQotCi1xdWlldF9jbWRfc29saW5rX21vZHVsZSA9IFNPTElOS19NT0RVTEUoJChUT09MU0VUKSkgJEAKLWNtZF9zb2xpbmtfbW9kdWxlID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1XbCwtc29uYW1lPSQoQEYpIC1vICRAIC1XbCwtLXN0YXJ0LWdyb3VwICQoZmlsdGVyLW91dCBGT1JDRV9ET19DTUQsICReKSAtV2wsLS1lbmQtZ3JvdXAgJChMSUJTKQotIiIiCi0KLUxJTktfQ09NTUFORFNfTUFDID0gIiIiXAotcXVpZXRfY21kX2FsaW5rID0gTElCVE9PTC1TVEFUSUMgJEAKLWNtZF9hbGluayA9IHJtIC1mICRAICYmIC4vZ3lwLW1hYy10b29sIGZpbHRlci1saWJ0b29sIGxpYnRvb2wgJChHWVBfTElCVE9PTEZMQUdTKSAtc3RhdGljIC1vICRAICQoZmlsdGVyICUubywkXikKLQotcXVpZXRfY21kX2xpbmsgPSBMSU5LKCQoVE9PTFNFVCkpICRACi1jbWRfbGluayA9ICQoTElOSy4kKFRPT0xTRVQpKSAkKEdZUF9MREZMQUdTKSAkKExERkxBR1MuJChUT09MU0VUKSkgLW8gIiRAIiAkKExEX0lOUFVUUykgJChMSUJTKQotCi0jIFRPRE8odGhha2lzKTogRmluZCBvdXQgYW5kIGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc2hhcmVkX2xpYnJhcnkgYW5kCi0jIGxvYWRhYmxlX21vZHVsZSBvbiBtYWMuCi1xdWlldF9jbWRfc29saW5rID0gU09MSU5LKCQoVE9PTFNFVCkpICRACi1jbWRfc29saW5rID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1vICIkQCIgJChMRF9JTlBVVFMpICQoTElCUykKLQotIyBUT0RPKHRoYWtpcyk6IFRoZSBzb2xpbmtfbW9kdWxlIHJ1bGUgaXMgbGlrZWx5IHdyb25nLiBYY29kZSBzZWVtcyB0byBwYXNzCi0jIC1idW5kbGUgLXNpbmdsZV9tb2R1bGUgaGVyZSAoZm9yIG9zbWVzYS5zbykuCi1xdWlldF9jbWRfc29saW5rX21vZHVsZSA9IFNPTElOS19NT0RVTEUoJChUT09MU0VUKSkgJEAKLWNtZF9zb2xpbmtfbW9kdWxlID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1vICRAICQoZmlsdGVyLW91dCBGT1JDRV9ET19DTUQsICReKSAkKExJQlMpCi0iIiIKLQotTElOS19DT01NQU5EU19BTkRST0lEID0gIiIiXAotcXVpZXRfY21kX2FsaW5rID0gQVIoJChUT09MU0VUKSkgJEAKLWNtZF9hbGluayA9IHJtIC1mICRAICYmICQoQVIuJChUT09MU0VUKSkgY3JzICRAICQoZmlsdGVyICUubywkXikKLQotcXVpZXRfY21kX2FsaW5rX3RoaW4gPSBBUigkKFRPT0xTRVQpKSAkQAotY21kX2FsaW5rX3RoaW4gPSBybSAtZiAkQCAmJiAkKEFSLiQoVE9PTFNFVCkpIGNyc1QgJEAgJChmaWx0ZXIgJS5vLCReKQotCi0jIER1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBsaWJyYXJpZXMgOigsIHdlIHdyYXAgdGhlCi0jIHNwZWNpYWwgImZpZ3VyZSBvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIiBmbGFncyBhcm91bmQgdGhlIGVudGlyZQotIyBpbnB1dCBsaXN0IGR1cmluZyBsaW5raW5nLgotcXVpZXRfY21kX2xpbmsgPSBMSU5LKCQoVE9PTFNFVCkpICRACi1xdWlldF9jbWRfbGlua19ob3N0ID0gTElOSygkKFRPT0xTRVQpKSAkQAotY21kX2xpbmsgPSAkKExJTksuJChUT09MU0VUKSkgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1vICRAIC1XbCwtLXN0YXJ0LWdyb3VwICQoTERfSU5QVVRTKSAtV2wsLS1lbmQtZ3JvdXAgJChMSUJTKQotY21kX2xpbmtfaG9zdCA9ICQoTElOSy4kKFRPT0xTRVQpKSAkKEdZUF9MREZMQUdTKSAkKExERkxBR1MuJChUT09MU0VUKSkgLW8gJEAgJChMRF9JTlBVVFMpICQoTElCUykKLQotIyBPdGhlciBzaGFyZWQtb2JqZWN0IGxpbmsgbm90ZXM6Ci0jIC0gU2V0IFNPTkFNRSB0byB0aGUgbGlicmFyeSBmaWxlbmFtZSBzbyBvdXIgYmluYXJpZXMgZG9uJ3QgcmVmZXJlbmNlCi0jIHRoZSBsb2NhbCwgYWJzb2x1dGUgcGF0aHMgdXNlZCBvbiB0aGUgbGluayBjb21tYW5kLWxpbmUuCi1xdWlldF9jbWRfc29saW5rID0gU09MSU5LKCQoVE9PTFNFVCkpICRACi1jbWRfc29saW5rID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1XbCwtc29uYW1lPSQoQEYpIC1vICRAIC1XbCwtLXdob2xlLWFyY2hpdmUgJChMRF9JTlBVVFMpIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgJChMSUJTKQotCi1xdWlldF9jbWRfc29saW5rX21vZHVsZSA9IFNPTElOS19NT0RVTEUoJChUT09MU0VUKSkgJEAKLWNtZF9zb2xpbmtfbW9kdWxlID0gJChMSU5LLiQoVE9PTFNFVCkpIC1zaGFyZWQgJChHWVBfTERGTEFHUykgJChMREZMQUdTLiQoVE9PTFNFVCkpIC1XbCwtc29uYW1lPSQoQEYpIC1vICRAIC1XbCwtLXN0YXJ0LWdyb3VwICQoZmlsdGVyLW91dCBGT1JDRV9ET19DTUQsICReKSAtV2wsLS1lbmQtZ3JvdXAgJChMSUJTKQotcXVpZXRfY21kX3NvbGlua19tb2R1bGVfaG9zdCA9IFNPTElOS19NT0RVTEUoJChUT09MU0VUKSkgJEAKLWNtZF9zb2xpbmtfbW9kdWxlX2hvc3QgPSAkKExJTksuJChUT09MU0VUKSkgLXNoYXJlZCAkKEdZUF9MREZMQUdTKSAkKExERkxBR1MuJChUT09MU0VUKSkgLVdsLC1zb25hbWU9JChARikgLW8gJEAgJChmaWx0ZXItb3V0IEZPUkNFX0RPX0NNRCwgJF4pICQoTElCUykKLSIiIgotCi0KLSMgSGVhZGVyIG9mIHRvcGxldmVsIE1ha2VmaWxlLgotIyBUaGlzIHNob3VsZCBnbyBpbnRvIHRoZSBidWlsZCB0cmVlLCBidXQgaXQncyBlYXNpZXIgdG8ga2VlcCBpdCBoZXJlIGZvciBub3cuCi1TSEFSRURfSEVBREVSID0gKCIiIlwKLSMgV2UgYm9ycm93IGhlYXZpbHkgZnJvbSB0aGUga2VybmVsIGJ1aWxkIHNldHVwLCB0aG91Z2ggd2UgYXJlIHNpbXBsZXIgc2luY2UKLSMgd2UgZG9uJ3QgaGF2ZSBLY29uZmlnIHR3ZWFraW5nIHNldHRpbmdzIG9uIHVzLgotCi0jIFRoZSBpbXBsaWNpdCBtYWtlIHJ1bGVzIGhhdmUgaXQgbG9va2luZyBmb3IgUkNTIGZpbGVzLCBhbW9uZyBvdGhlciB0aGluZ3MuCi0jIFdlIGluc3RlYWQgZXhwbGljaXRseSB3cml0ZSBhbGwgdGhlIHJ1bGVzIHdlIGNhcmUgYWJvdXQuCi0jIEl0J3MgZXZlbiBxdWlja2VyIChzYXZlcyB+MjAwbXMpIHRvIHBhc3MgLXIgb24gdGhlIGNvbW1hbmQgbGluZS4KLU1BS0VGTEFHUz0tcgotCi0jIFRoZSBzb3VyY2UgZGlyZWN0b3J5IHRyZWUuCi1zcmNkaXIgOj0gJShzcmNkaXIpcwotYWJzX3NyY2RpciA6PSAkKGFic3BhdGggJChzcmNkaXIpKQotCi0jIFRoZSBuYW1lIG9mIHRoZSBidWlsZGRpci4KLWJ1aWxkZGlyX25hbWUgPz0gJShidWlsZGRpcilzCi0KLSMgVGhlIFY9MSBmbGFnIG9uIGNvbW1hbmQgbGluZSBtYWtlcyB1cyB2ZXJib3NlbHkgcHJpbnQgY29tbWFuZCBsaW5lcy4KLWlmZGVmIFYKLSAgcXVpZXQ9Ci1lbHNlCi0gIHF1aWV0PXF1aWV0XwotZW5kaWYKLQotIyBTcGVjaWZ5IEJVSUxEVFlQRT1SZWxlYXNlIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIGEgcmVsZWFzZSBidWlsZC4KLUJVSUxEVFlQRSA/PSAlKGRlZmF1bHRfY29uZmlndXJhdGlvbilzCi0KLSMgRGlyZWN0b3J5IGFsbCBvdXIgYnVpbGQgb3V0cHV0IGdvZXMgaW50by4KLSMgTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSB0d28gZGlyZWN0b3JpZXMgYmVuZWF0aCBzcmMvIGZvciB1bml0IHRlc3RzIHRvIHBhc3MsCi0jIGFzIHRoZXkgcmVhY2ggaW50byB0aGUgc3JjLyBkaXJlY3RvcnkgZm9yIGRhdGEgd2l0aCByZWxhdGl2ZSBwYXRocy4KLWJ1aWxkZGlyID89ICQoYnVpbGRkaXJfbmFtZSkvJChCVUlMRFRZUEUpCi1hYnNfYnVpbGRkaXIgOj0gJChhYnNwYXRoICQoYnVpbGRkaXIpKQotZGVwc2RpciA6PSAkKGJ1aWxkZGlyKS8uZGVwcwotCi0jIE9iamVjdCBvdXRwdXQgZGlyZWN0b3J5Lgotb2JqIDo9ICQoYnVpbGRkaXIpL29iagotYWJzX29iaiA6PSAkKGFic3BhdGggJChvYmopKQotCi0jIFdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBldmVyeSBzaW5nbGUgb25lIG9mIHRoZSB0YXJnZXRzIHNvIHdlIGNhbiBzbHVycCBpbiB0aGUKLSMgZ2VuZXJhdGVkIGRlcGVuZGVuY3kgcnVsZSBNYWtlZmlsZXMgaW4gb25lIHBhc3MuCi1hbGxfZGVwcyA6PQotCi0lKG1ha2VfZ2xvYmFsX3NldHRpbmdzKXMKLQotIyBDKysgYXBwcyBuZWVkIHRvIGJlIGxpbmtlZCB3aXRoIGcrKy4KLSMKLSMgTm90ZTogZmxvY2sgaXMgdXNlZCB0byBzZXJhbGl6ZSBsaW5raW5nLiBMaW5raW5nIGlzIGEgbWVtb3J5LWludGVuc2l2ZQotIyBwcm9jZXNzIHNvIHJ1bm5pbmcgcGFyYWxsZWwgbGlua3MgY2FuIG9mdGVuIGxlYWQgdG8gdGhyYXNoaW5nLiAgVG8gZGlzYWJsZQotIyB0aGUgc2VyaWFsaXphdGlvbiwgb3ZlcnJpZGUgTElOSyB2aWEgYW4gZW52cmlvbm1lbnQgdmFyaWFibGUgYXMgZm9sbG93czoKLSMKLSMgICBleHBvcnQgTElOSz1nKysKLSMKLSMgVGhpcyB3aWxsIGFsbG93IG1ha2UgdG8gaW52b2tlIE4gbGlua2VyIHByb2Nlc3NlcyBhcyBzcGVjaWZpZWQgaW4gLWpOLgotTElOSyA/PSAlKGZsb2NrKXMgJChidWlsZGRpcikvbGlua2VyLmxvY2sgJChDWFgpCi0KLUNDLnRhcmdldCA/PSAlKENDLnRhcmdldClzCi1DRkxBR1MudGFyZ2V0ID89ICQoQ0ZMQUdTKQotQ1hYLnRhcmdldCA/PSAlKENYWC50YXJnZXQpcwotQ1hYRkxBR1MudGFyZ2V0ID89ICQoQ1hYRkxBR1MpCi1MSU5LLnRhcmdldCA/PSAlKExJTksudGFyZ2V0KXMKLUxERkxBR1MudGFyZ2V0ID89ICQoTERGTEFHUykKLUFSLnRhcmdldCA/PSAkKEFSKQotCi0jIFRPRE8oZXZhbik6IG1vdmUgYWxsIGNyb3NzLWNvbXBpbGF0aW9uIGxvZ2ljIHRvIGd5cC10aW1lIHNvIHdlIGRvbid0IG5lZWQKLSMgdG8gcmVwbGljYXRlIHRoaXMgZW52aXJvbm1lbnQgZmFsbGJhY2sgaW4gbWFrZSBhcyB3ZWxsLgotQ0MuaG9zdCA/PSAlKENDLmhvc3QpcwotQ0ZMQUdTLmhvc3QgPz0KLUNYWC5ob3N0ID89ICUoQ1hYLmhvc3QpcwotQ1hYRkxBR1MuaG9zdCA/PQotTElOSy5ob3N0ID89ICUoTElOSy5ob3N0KXMKLUxERkxBR1MuaG9zdCA/PQotQVIuaG9zdCA/PSAlKEFSLmhvc3QpcwotCi0jIERlZmluZSBhIGRpciBmdW5jdGlvbiB0aGF0IGNhbiBoYW5kbGUgc3BhY2VzLgotIyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS9tYW51YWwvbWFrZS5odG1sI1N5bnRheC1vZi1GdW5jdGlvbnMKLSMgImxlYWRpbmcgc3BhY2VzIGNhbm5vdCBhcHBlYXIgaW4gdGhlIHRleHQgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGFzIHdyaXR0ZW4uCi0jIFRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIHB1dCBpbnRvIHRoZSBhcmd1bWVudCB2YWx1ZSBieSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uIgotZW1wdHkgOj0KLXNwYWNlIDo9ICQoZW1wdHkpICQoZW1wdHkpCi0KLSMgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTg5NzgxL3VzaW5nLW1ha2UtZGlyLW9yLW5vdGRpci1vbi1hLXBhdGgtd2l0aC1zcGFjZXMKLXJlcGxhY2Vfc3BhY2VzID0gJChzdWJzdCAkKHNwYWNlKSwiIiIgKyBTUEFDRV9SRVBMQUNFTUVOVCArICIiIiwkMSkKLXVucmVwbGFjZV9zcGFjZXMgPSAkKHN1YnN0ICIiIiArIFNQQUNFX1JFUExBQ0VNRU5UICsgIiIiLCQoc3BhY2UpLCQxKQotZGlyeCA9ICQoY2FsbCB1bnJlcGxhY2Vfc3BhY2VzLCQoZGlyICQoY2FsbCByZXBsYWNlX3NwYWNlcywkMSkpKQotCi0jIEZsYWdzIHRvIG1ha2UgZ2NjIG91dHB1dCBkZXBlbmRlbmN5IGluZm8uICBOb3RlIHRoYXQgeW91IG5lZWQgdG8gYmUKLSMgY2FyZWZ1bCBoZXJlIHRvIHVzZSB0aGUgZmxhZ3MgdGhhdCBjY2FjaGUgYW5kIGRpc3RjYyBjYW4gdW5kZXJzdGFuZC4KLSMgV2Ugd3JpdGUgdG8gYSBkZXAgZmlsZSBvbiB0aGUgc2lkZSBmaXJzdCBhbmQgdGhlbiByZW5hbWUgYXQgdGhlIGVuZAotIyBzbyB3ZSBjYW4ndCBlbmQgdXAgd2l0aCBhIGJyb2tlbiBkZXAgZmlsZS4KLWRlcGZpbGUgPSAkKGRlcHNkaXIpLyQoY2FsbCByZXBsYWNlX3NwYWNlcywkQCkuZAotREVQRkxBR1MgPSAtTU1EIC1NRiAkKGRlcGZpbGUpLnJhdwotCi0jIFdlIGhhdmUgdG8gZml4dXAgdGhlIGRlcHMgb3V0cHV0IGluIGEgZmV3IHdheXMuCi0jICgxKSB0aGUgZmlsZSBvdXRwdXQgc2hvdWxkIG1lbnRpb24gdGhlIHByb3BlciAubyBmaWxlLgotIyBjY2FjaGUgb3IgZGlzdGNjIGxvc2UgdGhlIHBhdGggdG8gdGhlIHRhcmdldCwgc28gd2UgY29udmVydCBhIHJ1bGUgb2YKLSMgdGhlIGZvcm06Ci0jICAgZm9vYmFyLm86IERFUDEgREVQMgotIyBpbnRvCi0jICAgcGF0aC90by9mb29iYXIubzogREVQMSBERVAyCi0jICgyKSB3ZSB3YW50IG1pc3NpbmcgZmlsZXMgbm90IHRvIGNhdXNlIHVzIHRvIGZhaWwgdG8gYnVpbGQuCi0jIFdlIHdhbnQgdG8gcmV3cml0ZQotIyAgIGZvb2Jhci5vOiBERVAxIERFUDIgXFwKLSMgICAgICAgICAgICAgICBERVAzCi0jIHRvCi0jICAgREVQMToKLSMgICBERVAyOgotIyAgIERFUDM6Ci0jIHNvIGlmIHRoZSBmaWxlcyBhcmUgbWlzc2luZywgdGhleSdyZSBqdXN0IGNvbnNpZGVyZWQgcGhvbnkgcnVsZXMuCi0jIFdlIGhhdmUgdG8gZG8gc29tZSBwcmV0dHkgaW5zYW5lIGVzY2FwaW5nIHRvIGdldCB0aG9zZSBiYWNrc2xhc2hlcwotIyBhbmQgZG9sbGFyIHNpZ25zIHBhc3QgbWFrZSwgdGhlIHNoZWxsLCBhbmQgc2VkIGF0IHRoZSBzYW1lIHRpbWUuCi0jIERvZXNuJ3Qgd29yayB3aXRoIHNwYWNlcywgYnV0IHRoYXQncyBmaW5lOiAuZCBmaWxlcyBoYXZlIHNwYWNlcyBpbgotIyB0aGVpciBuYW1lcyByZXBsYWNlZCB3aXRoIG90aGVyIGNoYXJhY3RlcnMuIiIiCi1yIiIiCi1kZWZpbmUgZml4dXBfZGVwCi0jIFRoZSBkZXBmaWxlIG1heSBub3QgZXhpc3QgaWYgdGhlIGlucHV0IGZpbGUgZGlkbid0IGhhdmUgYW55ICNpbmNsdWRlcy4KLXRvdWNoICQoZGVwZmlsZSkucmF3Ci0jIEZpeHVwIHBhdGggYXMgaW4gKDEpLgotc2VkIC1lICJzfF4kKG5vdGRpciAkQCl8JEB8IiAkKGRlcGZpbGUpLnJhdyA+PiAkKGRlcGZpbGUpCi0jIEFkZCBleHRyYSBydWxlcyBhcyBpbiAoMikuCi0jIFdlIHJlbW92ZSBzbGFzaGVzIGFuZCByZXBsYWNlIHNwYWNlcyB3aXRoIG5ldyBsaW5lczsKLSMgcmVtb3ZlIGJsYW5rIGxpbmVzOwotIyBkZWxldGUgdGhlIGZpcnN0IGxpbmUgYW5kIGFwcGVuZCBhIGNvbG9uIHRvIHRoZSByZW1haW5pbmcgbGluZXMuCi1zZWQgLWUgJ3N8XFx8fCcgLWUgJ3l8IHxcbnwnICQoZGVwZmlsZSkucmF3IHxcCi0gIGdyZXAgLXYgJ14kJCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcCi0gIHNlZCAtZSAxZCAtZSAnc3wkJHw6fCcgICAgICAgICAgICAgICAgICAgICBcCi0gICAgPj4gJChkZXBmaWxlKQotcm0gJChkZXBmaWxlKS5yYXcKLWVuZGVmCi0iIiIKLSIiIgotIyBDb21tYW5kIGRlZmluaXRpb25zOgotIyAtIGNtZF9mb28gaXMgdGhlIGFjdHVhbCBjb21tYW5kIHRvIHJ1bjsKLSMgLSBxdWlldF9jbWRfZm9vIGlzIHRoZSBicmllZi1vdXRwdXQgc3VtbWFyeSBvZiB0aGUgY29tbWFuZC4KLQotcXVpZXRfY21kX2NjID0gQ0MoJChUT09MU0VUKSkgJEAKLWNtZF9jYyA9ICQoQ0MuJChUT09MU0VUKSkgJChHWVBfQ0ZMQUdTKSAkKERFUEZMQUdTKSAkKENGTEFHUy4kKFRPT0xTRVQpKSAtYyAtbyAkQCAkPAotCi1xdWlldF9jbWRfY3h4ID0gQ1hYKCQoVE9PTFNFVCkpICRACi1jbWRfY3h4ID0gJChDWFguJChUT09MU0VUKSkgJChHWVBfQ1hYRkxBR1MpICQoREVQRkxBR1MpICQoQ1hYRkxBR1MuJChUT09MU0VUKSkgLWMgLW8gJEAgJDwKLSUoZXh0cmFfY29tbWFuZHMpcwotcXVpZXRfY21kX3RvdWNoID0gVE9VQ0ggJEAKLWNtZF90b3VjaCA9IHRvdWNoICRACi0KLXF1aWV0X2NtZF9jb3B5ID0gQ09QWSAkQAotIyBzZW5kIHN0ZGVyciB0byAvZGV2L251bGwgdG8gaWdub3JlIG1lc3NhZ2VzIHdoZW4gbGlua2luZyBkaXJlY3Rvcmllcy4KLWNtZF9jb3B5ID0gbG4gLWYgIiQ8IiAiJEAiIDI+L2Rldi9udWxsIHx8IChybSAtcmYgIiRAIiAmJiBjcCAtYWYgIiQ8IiAiJEAiKQotCi0lKGxpbmtfY29tbWFuZHMpcwotIiIiCi0KLXIiIiIKLSMgRGVmaW5lIGFuIGVzY2FwZV9xdW90ZXMgZnVuY3Rpb24gdG8gZXNjYXBlIHNpbmdsZSBxdW90ZXMuCi0jIFRoaXMgYWxsb3dzIHVzIHRvIGhhbmRsZSBxdW90ZXMgcHJvcGVybHkgYXMgbG9uZyBhcyB3ZSBhbHdheXMgdXNlCi0jIHVzZSBzaW5nbGUgcXVvdGVzIGFuZCBlc2NhcGVfcXVvdGVzLgotZXNjYXBlX3F1b3RlcyA9ICQoc3Vic3QgJywnXCcnLCQoMSkpCi0jIFRoaXMgY29tbWVudCBpcyBoZXJlIGp1c3QgdG8gaW5jbHVkZSBhICcgdG8gdW5jb25mdXNlIHN5bnRheCBoaWdobGlnaHRpbmcuCi0jIERlZmluZSBhbiBlc2NhcGVfdmFycyBmdW5jdGlvbiB0byBlc2NhcGUgJyQnIHZhcmlhYmxlIHN5bnRheC4KLSMgVGhpcyBhbGxvd3MgdXMgdG8gcmVhZC93cml0ZSBjb21tYW5kIGxpbmVzIHdpdGggc2hlbGwgdmFyaWFibGVzIChlLmcuCi0jICRMRF9MSUJSQVJZX1BBVEgpLCB3aXRob3V0IHRyaWdnZXJpbmcgbWFrZSBzdWJzdGl0dXRpb24uCi1lc2NhcGVfdmFycyA9ICQoc3Vic3QgJCQsJCQkJCwkKDEpKQotIyBIZWxwZXIgdGhhdCBleHBhbmRzIHRvIGEgc2hlbGwgY29tbWFuZCB0byBlY2hvIGEgc3RyaW5nIGV4YWN0bHkgYXMgaXQgaXMgaW4KLSMgbWFrZS4gVGhpcyB1c2VzIHByaW50ZiBpbnN0ZWFkIG9mIGVjaG8gYmVjYXVzZSBwcmludGYncyBiZWhhdmlvdXIgd2l0aCByZXNwZWN0Ci0jIHRvIGVzY2FwZSBzZXF1ZW5jZXMgaXMgbW9yZSBwb3J0YWJsZSB0aGFuIGVjaG8ncyBhY3Jvc3MgZGlmZmVyZW50IHNoZWxscwotIyAoZS5nLiwgZGFzaCwgYmFzaCkuCi1leGFjdF9lY2hvID0gcHJpbnRmICclJXNcbicgJyQoY2FsbCBlc2NhcGVfcXVvdGVzLCQoMSkpJwotIiIiCi0iIiIKLSMgSGVscGVyIHRvIGNvbXBhcmUgdGhlIGNvbW1hbmQgd2UncmUgYWJvdXQgdG8gcnVuIGFnYWluc3QgdGhlIGNvbW1hbmQKLSMgd2UgbG9nZ2VkIHRoZSBsYXN0IHRpbWUgd2UgcmFuIHRoZSBjb21tYW5kLiAgUHJvZHVjZXMgYW4gZW1wdHkKLSMgc3RyaW5nIChmYWxzZSkgd2hlbiB0aGUgY29tbWFuZHMgbWF0Y2guCi0jIFRyaWNreSBwb2ludDogTWFrZSBoYXMgbm8gc3RyaW5nLWVxdWFsaXR5IHRlc3QgZnVuY3Rpb24uCi0jIFRoZSBrZXJuZWwgdXNlcyB0aGUgZm9sbG93aW5nLCBidXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBoYXZlIGZhbHNlCi0jIHBvc2l0aXZlcywgd2hlcmUgb25lIHN0cmluZyByZW9yZGVyZWQgaXRzIGFyZ3VtZW50cy4KLSMgICBhcmdfY2hlY2sgPSAkKHN0cmlwICQoZmlsdGVyLW91dCAkKGNtZF8kKDEpKSwgJChjbWRfJEApKSBcXAotIyAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXItb3V0ICQoY21kXyRAKSwgJChjbWRfJCgxKSkpKQotIyBXZSBpbnN0ZWFkIHN1YnN0aXR1dGUgZWFjaCBmb3IgdGhlIGVtcHR5IHN0cmluZyBpbnRvIHRoZSBvdGhlciwgYW5kCi0jIHNheSB0aGV5J3JlIGVxdWFsIGlmIGJvdGggc3Vic3RpdHV0aW9ucyBwcm9kdWNlIHRoZSBlbXB0eSBzdHJpbmcuCi0jIC5kIGZpbGVzIGNvbnRhaW4gIiIiICsgU1BBQ0VfUkVQTEFDRU1FTlQgKyBcCi0gICAgICAgICAgICAgICAgICAgIiIiIGluc3RlYWQgb2Ygc3BhY2VzLCB0YWtlIHRoYXQgaW50byBhY2NvdW50LgotY29tbWFuZF9jaGFuZ2VkID0gJChvciAkKHN1YnN0ICQoY21kXyQoMSkpLCwkKGNtZF8kKGNhbGwgcmVwbGFjZV9zcGFjZXMsJEApKSksXFwKLSAgICAgICAgICAgICAgICAgICAgICAgJChzdWJzdCAkKGNtZF8kKGNhbGwgcmVwbGFjZV9zcGFjZXMsJEApKSwsJChjbWRfJCgxKSkpKQotCi0jIEhlbHBlciB0aGF0IGlzIG5vbi1lbXB0eSB3aGVuIGEgcHJlcmVxdWlzaXRlIGNoYW5nZXMuCi0jIE5vcm1hbGx5IG1ha2UgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCB3ZSBmb3JjZSBydWxlcyB0byBhbHdheXMgcnVuCi0jIHNvIHdlIGNhbiBjaGVjayB0aGVpciBjb21tYW5kIGxpbmVzLgotIyAgICQ/IC0tIG5ldyBwcmVyZXF1aXNpdGVzCi0jICAgJHwgLS0gb3JkZXItb25seSBkZXBlbmRlbmNpZXMKLXByZXJlcV9jaGFuZ2VkID0gJChmaWx0ZXItb3V0IEZPUkNFX0RPX0NNRCwkKGZpbHRlci1vdXQgJHwsJD8pKQotCi0jIEhlbHBlciB0aGF0IGV4ZWN1dGVzIGFsbCBwb3N0YnVpbGRzLCBhbmQgZGVsZXRlcyB0aGUgb3V0cHV0IGZpbGUgd2hlbiBkb25lCi0jIGlmIGFueSBvZiB0aGUgcG9zdGJ1aWxkcyBmYWlsZWQuCi1kZWZpbmUgZG9fcG9zdGJ1aWxkcwotICBART0wO1xcCi0gIGZvciBwIGluICQoUE9TVEJVSUxEUyk7IGRvXFwKLSAgICBldmFsICQkcDtcXAotICAgIEY9JCQ/O1xcCi0gICAgaWYgWyAkJEYgLW5lIDAgXTsgdGhlblxcCi0gICAgICBFPSQkRjtcXAotICAgIGZpO1xcCi0gIGRvbmU7XFwKLSAgaWYgWyAkJEUgLW5lIDAgXTsgdGhlblxcCi0gICAgcm0gLXJmICIkQCI7XFwKLSAgICBleGl0ICQkRTtcXAotICBmaQotZW5kZWYKLQotIyBkb19jbWQ6IHJ1biBhIGNvbW1hbmQgdmlhIHRoZSBhYm92ZSBjbWRfZm9vIG5hbWVzLCBpZiBuZWNlc3NhcnkuCi0jIFNob3VsZCBhbHdheXMgcnVuIGZvciBhIGdpdmVuIHRhcmdldCB0byBoYW5kbGUgY29tbWFuZC1saW5lIGNoYW5nZXMuCi0jIFNlY29uZCBhcmd1bWVudCwgaWYgbm9uLXplcm8sIG1ha2VzIGl0IGRvIGFzbS9DL0MrKyBkZXBlbmRlbmN5IG11bmdpbmcuCi0jIFRoaXJkIGFyZ3VtZW50LCBpZiBub24temVybywgbWFrZXMgaXQgZG8gUE9TVEJVSUxEUyBwcm9jZXNzaW5nLgotIyBOb3RlOiBXZSBpbnRlbnRpb25hbGx5IGRvIE5PVCBjYWxsIGRpcnggZm9yIGRlcGZpbGUsIHNpbmNlIGl0IGNvbnRhaW5zICIiIiArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfUkVQTEFDRU1FTlQgKyAiIiIgZm9yCi0jIHNwYWNlcyBhbHJlYWR5IGFuZCBkaXJ4IHN0cmlwcyB0aGUgIiIiICsgU1BBQ0VfUkVQTEFDRU1FTlQgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiIGNoYXJhY3RlcnMuCi1kZWZpbmUgZG9fY21kCi0kKGlmICQob3IgJChjb21tYW5kX2NoYW5nZWQpLCQocHJlcmVxX2NoYW5nZWQpKSwKLSAgQCQoY2FsbCBleGFjdF9lY2hvLCAgJCgkKHF1aWV0KWNtZF8kKDEpKSkKLSAgQG1rZGlyIC1wICIkKGNhbGwgZGlyeCwkQCkiICIkKGRpciAkKGRlcGZpbGUpKSIKLSAgJChpZiAkKGZpbmRzdHJpbmcgZmxvY2ssJCh3b3JkICUoZmxvY2tfaW5kZXgpZCwkKGNtZF8kMSkpKSwKLSAgICBAJChjbWRfJCgxKSkKLSAgICBAZWNobyAiICAkKHF1aWV0X2NtZF8kKDEpKTogRmluaXNoZWQiLAotICAgIEAkKGNtZF8kKDEpKQotICApCi0gIEAkKGNhbGwgZXhhY3RfZWNobywkKGNhbGwgZXNjYXBlX3ZhcnMsY21kXyQoY2FsbCByZXBsYWNlX3NwYWNlcywkQCkgOj0gJChjbWRfJCgxKSkpKSA+ICQoZGVwZmlsZSkKLSAgQCQoaWYgJCgyKSwkKGZpeHVwX2RlcCkpCi0gICQoaWYgJChhbmQgJCgzKSwgJChQT1NUQlVJTERTKSksCi0gICAgJChjYWxsIGRvX3Bvc3RidWlsZHMpCi0gICkKLSkKLWVuZGVmCi0KLSMgRGVjbGFyZSB0aGUgIiUoZGVmYXVsdF90YXJnZXQpcyIgdGFyZ2V0IGZpcnN0IHNvIGl0IGlzIHRoZSBkZWZhdWx0LAotIyBldmVuIHRob3VnaCB3ZSBkb24ndCBoYXZlIHRoZSBkZXBzIHlldC4KLS5QSE9OWTogJShkZWZhdWx0X3RhcmdldClzCi0lKGRlZmF1bHRfdGFyZ2V0KXM6Ci0KLSMgbWFrZSBsb29rcyBmb3Igd2F5cyB0byByZS1nZW5lcmF0ZSBpbmNsdWRlZCBtYWtlZmlsZXMsIGJ1dCBpbiBvdXIgY2FzZSwgd2UKLSMgZG9uJ3QgaGF2ZSBhIGRpcmVjdCB3YXkuIEV4cGxpY2l0bHkgdGVsbGluZyBtYWtlIHRoYXQgaXQgaGFzIG5vdGhpbmcgdG8gZG8KLSMgZm9yIHRoZW0gbWFrZXMgaXQgZ28gZmFzdGVyLgotJSUuZDogOwotCi0jIFVzZSBGT1JDRV9ET19DTUQgdG8gZm9yY2UgYSB0YXJnZXQgdG8gcnVuLiAgU2hvdWxkIGJlIGNvdXBsZWQgd2l0aAotIyBkb19jbWQuCi0uUEhPTlk6IEZPUkNFX0RPX0NNRAotRk9SQ0VfRE9fQ01EOgotCi0iIiIpCi0KLVNIQVJFRF9IRUFERVJfTUFDX0NPTU1BTkRTID0gIiIiCi1xdWlldF9jbWRfb2JqYyA9IENYWCgkKFRPT0xTRVQpKSAkQAotY21kX29iamMgPSAkKENDLiQoVE9PTFNFVCkpICQoR1lQX09CSkNGTEFHUykgJChERVBGTEFHUykgLWMgLW8gJEAgJDwKLQotcXVpZXRfY21kX29iamN4eCA9IENYWCgkKFRPT0xTRVQpKSAkQAotY21kX29iamN4eCA9ICQoQ1hYLiQoVE9PTFNFVCkpICQoR1lQX09CSkNYWEZMQUdTKSAkKERFUEZMQUdTKSAtYyAtbyAkQCAkPAotCi0jIENvbW1hbmRzIGZvciBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMuCi1xdWlldF9jbWRfcGNoX2MgPSBDWFgoJChUT09MU0VUKSkgJEAKLWNtZF9wY2hfYyA9ICQoQ0MuJChUT09MU0VUKSkgJChHWVBfUENIX0NGTEFHUykgJChERVBGTEFHUykgJChDWFhGTEFHUy4kKFRPT0xTRVQpKSAtYyAtbyAkQCAkPAotcXVpZXRfY21kX3BjaF9jYyA9IENYWCgkKFRPT0xTRVQpKSAkQAotY21kX3BjaF9jYyA9ICQoQ0MuJChUT09MU0VUKSkgJChHWVBfUENIX0NYWEZMQUdTKSAkKERFUEZMQUdTKSAkKENYWEZMQUdTLiQoVE9PTFNFVCkpIC1jIC1vICRAICQ8Ci1xdWlldF9jbWRfcGNoX20gPSBDWFgoJChUT09MU0VUKSkgJEAKLWNtZF9wY2hfbSA9ICQoQ0MuJChUT09MU0VUKSkgJChHWVBfUENIX09CSkNGTEFHUykgJChERVBGTEFHUykgLWMgLW8gJEAgJDwKLXF1aWV0X2NtZF9wY2hfbW0gPSBDWFgoJChUT09MU0VUKSkgJEAKLWNtZF9wY2hfbW0gPSAkKENDLiQoVE9PTFNFVCkpICQoR1lQX1BDSF9PQkpDWFhGTEFHUykgJChERVBGTEFHUykgLWMgLW8gJEAgJDwKLQotIyBneXAtbWFjLXRvb2wgaXMgd3JpdHRlbiBuZXh0IHRvIHRoZSByb290IE1ha2VmaWxlIGJ5IGd5cC4KLSMgVXNlICQoNCkgZm9yIHRoZSBjb21tYW5kLCBzaW5jZSAkKDIpIGFuZCAkKDMpIGFyZSB1c2VkIGFzIGZsYWcgYnkgZG9fY21kCi0jIGFscmVhZHkuCi1xdWlldF9jbWRfbWFjX3Rvb2wgPSBNQUNUT09MICQoNCkgJDwKLWNtZF9tYWNfdG9vbCA9IC4vZ3lwLW1hYy10b29sICQoNCkgJDwgIiRAIgotCi1xdWlldF9jbWRfbWFjX3BhY2thZ2VfZnJhbWV3b3JrID0gUEFDS0FHRSBGUkFNRVdPUksgJEAKLWNtZF9tYWNfcGFja2FnZV9mcmFtZXdvcmsgPSAuL2d5cC1tYWMtdG9vbCBwYWNrYWdlLWZyYW1ld29yayAiJEAiICQoNCkKLQotcXVpZXRfY21kX2luZm9wbGlzdCA9IElORk9QTElTVCAkQAotY21kX2luZm9wbGlzdCA9ICQoQ0MuJChUT09MU0VUKSkgLUUgLVAgLVduby10cmlncmFwaHMgLXggYyAkKElORk9QTElTVF9ERUZJTkVTKSAiJDwiIC1vICIkQCIKLSIiIgotCi1TSEFSRURfSEVBREVSX1NVTl9DT01NQU5EUyA9ICIiIgotIyBneXAtc3VuLXRvb2wgaXMgd3JpdHRlbiBuZXh0IHRvIHRoZSByb290IE1ha2VmaWxlIGJ5IGd5cC4KLSMgVXNlICQoNCkgZm9yIHRoZSBjb21tYW5kLCBzaW5jZSAkKDIpIGFuZCAkKDMpIGFyZSB1c2VkIGFzIGZsYWcgYnkgZG9fY21kCi0jIGFscmVhZHkuCi1xdWlldF9jbWRfc3VuX3Rvb2wgPSBTVU5UT09MICQoNCkgJDwKLWNtZF9zdW5fdG9vbCA9IC4vZ3lwLXN1bi10b29sICQoNCkgJDwgIiRAIgotIiIiCi0KLQotZGVmIFdyaXRlUm9vdEhlYWRlclN1ZmZpeFJ1bGVzKHdyaXRlcik6Ci0gIGV4dGVuc2lvbnMgPSBzb3J0ZWQoQ09NUElMQUJMRV9FWFRFTlNJT05TLmtleXMoKSwga2V5PXN0ci5sb3dlcikKLQotICB3cml0ZXIud3JpdGUoJyMgU3VmZml4IHJ1bGVzLCBwdXR0aW5nIGFsbCBvdXRwdXRzIGludG8gJChvYmopLlxuJykKLSAgZm9yIGV4dCBpbiBleHRlbnNpb25zOgotICAgIHdyaXRlci53cml0ZSgnJChvYmopLiQoVE9PTFNFVCkvJSUubzogJChzcmNkaXIpLyUlJXMgRk9SQ0VfRE9fQ01EXG4nICUgZXh0KQotICAgIHdyaXRlci53cml0ZSgnXHRAJChjYWxsIGRvX2NtZCwlcywxKVxuJyAlIENPTVBJTEFCTEVfRVhURU5TSU9OU1tleHRdKQotCi0gIHdyaXRlci53cml0ZSgnXG4jIFRyeSBidWlsZGluZyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UsIHRvby5cbicpCi0gIGZvciBleHQgaW4gZXh0ZW5zaW9uczoKLSAgICB3cml0ZXIud3JpdGUoCi0gICAgICAgICckKG9iaikuJChUT09MU0VUKS8lJS5vOiAkKG9iaikuJChUT09MU0VUKS8lJSVzIEZPUkNFX0RPX0NNRFxuJyAlIGV4dCkKLSAgICB3cml0ZXIud3JpdGUoJ1x0QCQoY2FsbCBkb19jbWQsJXMsMSlcbicgJSBDT01QSUxBQkxFX0VYVEVOU0lPTlNbZXh0XSkKLSAgd3JpdGVyLndyaXRlKCdcbicpCi0gIGZvciBleHQgaW4gZXh0ZW5zaW9uczoKLSAgICB3cml0ZXIud3JpdGUoJyQob2JqKS4kKFRPT0xTRVQpLyUlLm86ICQob2JqKS8lJSVzIEZPUkNFX0RPX0NNRFxuJyAlIGV4dCkKLSAgICB3cml0ZXIud3JpdGUoJ1x0QCQoY2FsbCBkb19jbWQsJXMsMSlcbicgJSBDT01QSUxBQkxFX0VYVEVOU0lPTlNbZXh0XSkKLSAgd3JpdGVyLndyaXRlKCdcbicpCi0KLQotU0hBUkVEX0hFQURFUl9TVUZGSVhfUlVMRVNfQ09NTUVOVDEgPSAoIiIiXAotIyBTdWZmaXggcnVsZXMsIHB1dHRpbmcgYWxsIG91dHB1dHMgaW50byAkKG9iaikuCi0iIiIpCi0KLQotU0hBUkVEX0hFQURFUl9TVUZGSVhfUlVMRVNfQ09NTUVOVDIgPSAoIiIiXAotIyBUcnkgYnVpbGRpbmcgZnJvbSBnZW5lcmF0ZWQgc291cmNlLCB0b28uCi0iIiIpCi0KLQotU0hBUkVEX0ZPT1RFUiA9ICIiIlwKLSMgImFsbCIgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSAiYWxsIiB0YXJnZXRzIGZyb20gYWxsIHRoZSBpbmNsdWRlZAotIyBzdWItbWFrZWZpbGVzLiBUaGlzIGlzIGp1c3QgaGVyZSB0byBjbGFyaWZ5LgotYWxsOgotCi0jIEFkZCBpbiBkZXBlbmRlbmN5LXRyYWNraW5nIHJ1bGVzLiAgJChhbGxfZGVwcykgaXMgdGhlIGxpc3Qgb2YgZXZlcnkgc2luZ2xlCi0jIHRhcmdldCBpbiBvdXIgdHJlZS4gT25seSBjb25zaWRlciB0aGUgb25lcyB3aXRoIC5kIChkZXBlbmRlbmN5KSBpbmZvOgotZF9maWxlcyA6PSAkKHdpbGRjYXJkICQoZm9yZWFjaCBmLCQoYWxsX2RlcHMpLCQoZGVwc2RpcikvJChmKS5kKSkKLWlmbmVxICgkKGRfZmlsZXMpLCkKLSAgaW5jbHVkZSAkKGRfZmlsZXMpCi1lbmRpZgotIiIiCi0KLWhlYWRlciA9ICIiIlwKLSMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBneXA7IGRvIG5vdCBlZGl0LgotCi0iIiIKLQotIyBNYXBzIGV2ZXJ5IGNvbXBpbGFibGUgZmlsZSBleHRlbnNpb24gdG8gdGhlIGRvX2NtZCB0aGF0IGNvbXBpbGVzIGl0LgotQ09NUElMQUJMRV9FWFRFTlNJT05TID0gewotICAnLmMnOiAnY2MnLAotICAnLmNjJzogJ2N4eCcsCi0gICcuY3BwJzogJ2N4eCcsCi0gICcuY3h4JzogJ2N4eCcsCi0gICcucyc6ICdjYycsCi0gICcuUyc6ICdjYycsCi19Ci0KLWRlZiBDb21waWxhYmxlKGZpbGVuYW1lKToKLSAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIGZpbGUgaXMgY29tcGlsYWJsZSAoc2hvdWxkIGJlIGluIE9CSlMpLiIiIgotICBmb3IgcmVzIGluIChmaWxlbmFtZS5lbmRzd2l0aChlKSBmb3IgZSBpbiBDT01QSUxBQkxFX0VYVEVOU0lPTlMpOgotICAgIGlmIHJlczoKLSAgICAgIHJldHVybiBUcnVlCi0gIHJldHVybiBGYWxzZQotCi0KLWRlZiBMaW5rYWJsZShmaWxlbmFtZSk6Ci0gICIiIlJldHVybiB0cnVlIGlmIHRoZSBmaWxlIGlzIGxpbmthYmxlIChzaG91bGQgYmUgb24gdGhlIGxpbmsgbGluZSkuIiIiCi0gIHJldHVybiBmaWxlbmFtZS5lbmRzd2l0aCgnLm8nKQotCi0KLWRlZiBUYXJnZXQoZmlsZW5hbWUpOgotICAiIiJUcmFuc2xhdGUgYSBjb21waWxhYmxlIGZpbGVuYW1lIHRvIGl0cyAubyB0YXJnZXQuIiIiCi0gIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSArICcubycKLQotCi1kZWYgRXNjYXBlU2hlbGxBcmd1bWVudChzKToKLSAgIiIiUXVvdGVzIGFuIGFyZ3VtZW50IHNvIHRoYXQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBsaXRlcmFsbHkgYnkgYSBQT1NJWAotICAgICBzaGVsbC4gVGFrZW4gZnJvbQotICAgICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1ODE3L3doYXRzLXRoZS1iZXN0LXdheS10by1lc2NhcGUtb3NzeXN0ZW0tY2FsbHMtaW4tcHl0aG9uCi0gICAgICIiIgotICByZXR1cm4gIiciICsgcy5yZXBsYWNlKCInIiwgIidcXCcnIikgKyAiJyIKLQotCi1kZWYgRXNjYXBlTWFrZVZhcmlhYmxlRXhwYW5zaW9uKHMpOgotICAiIiJNYWtlIGhhcyBpdHMgb3duIHZhcmlhYmxlIGV4cGFuc2lvbiBzeW50YXggdXNpbmcgJC4gV2UgbXVzdCBlc2NhcGUgaXQgZm9yCi0gICAgIHN0cmluZyB0byBiZSBpbnRlcnByZXRlZCBsaXRlcmFsbHkuIiIiCi0gIHJldHVybiBzLnJlcGxhY2UoJyQnLCAnJCQnKQotCi0KLWRlZiBFc2NhcGVDcHBEZWZpbmUocyk6Ci0gICIiIkVzY2FwZXMgYSBDUFAgZGVmaW5lIHNvIHRoYXQgaXQgd2lsbCByZWFjaCB0aGUgY29tcGlsZXIgdW5hbHRlcmVkLiIiIgotICBzID0gRXNjYXBlU2hlbGxBcmd1bWVudChzKQotICBzID0gRXNjYXBlTWFrZVZhcmlhYmxlRXhwYW5zaW9uKHMpCi0gICMgJyMnIGNoYXJhY3RlcnMgbXVzdCBiZSBlc2NhcGVkIGV2ZW4gZW1iZWRkZWQgaW4gYSBzdHJpbmcsIGVsc2UgTWFrZSB3aWxsCi0gICMgdHJlYXQgaXQgYXMgdGhlIHN0YXJ0IG9mIGEgY29tbWVudC4KLSAgcmV0dXJuIHMucmVwbGFjZSgnIycsIHInXCMnKQotCi0KLWRlZiBRdW90ZUlmTmVjZXNzYXJ5KHN0cmluZyk6Ci0gICIiIlRPRE86IFNob3VsZCB0aGlzIGlkZWFsbHkgYmUgcmVwbGFjZWQgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgYWJvdmUKLSAgICAgZnVuY3Rpb25zPyIiIgotICBpZiAnIicgaW4gc3RyaW5nOgotICAgIHN0cmluZyA9ICciJyArIHN0cmluZy5yZXBsYWNlKCciJywgJ1xcIicpICsgJyInCi0gIHJldHVybiBzdHJpbmcKLQotCi1kZWYgU3RyaW5nVG9NYWtlZmlsZVZhcmlhYmxlKHN0cmluZyk6Ci0gICIiIkNvbnZlcnQgYSBzdHJpbmcgdG8gYSB2YWx1ZSB0aGF0IGlzIGFjY2VwdGFibGUgYXMgYSBtYWtlIHZhcmlhYmxlIG5hbWUuIiIiCi0gIHJldHVybiByZS5zdWIoJ1teYS16QS1aMC05X10nLCAnXycsIHN0cmluZykKLQotCi1zcmNkaXJfcHJlZml4ID0gJycKLWRlZiBTb3VyY2VpZnkocGF0aCk6Ci0gICIiIkNvbnZlcnQgYSBwYXRoIHRvIGl0cyBzb3VyY2UgZGlyZWN0b3J5IGZvcm0uIiIiCi0gIGlmICckKCcgaW4gcGF0aDoKLSAgICByZXR1cm4gcGF0aAotICBpZiBvcy5wYXRoLmlzYWJzKHBhdGgpOgotICAgIHJldHVybiBwYXRoCi0gIHJldHVybiBzcmNkaXJfcHJlZml4ICsgcGF0aAotCi0KLWRlZiBRdW90ZVNwYWNlcyhzLCBxdW90ZT1yJ1wgJyk6Ci0gIHJldHVybiBzLnJlcGxhY2UoJyAnLCBxdW90ZSkKLQotCi1kZWYgSW52ZXJ0UmVsYXRpdmVQYXRoKHBhdGgpOgotICAiIiJHaXZlbiBhIHJlbGF0aXZlIHBhdGggbGlrZSBmb28vYmFyLCByZXR1cm4gdGhlIGludmVyc2UgcmVsYXRpdmUgcGF0aDoKLSAgdGhlIHBhdGggZnJvbSB0aGUgcmVsYXRpdmUgcGF0aCBiYWNrIHRvIHRoZSBvcmlnaW4gZGlyLgotCi0gIEUuZy4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aCwgSW52ZXJ0UmVsYXRpdmVQYXRoKHBhdGgpKSkKLSAgc2hvdWxkIGFsd2F5cyBwcm9kdWNlIHRoZSBlbXB0eSBzdHJpbmcuIiIiCi0KLSAgaWYgbm90IHBhdGg6Ci0gICAgcmV0dXJuIHBhdGgKLSAgIyBPbmx5IG5lZWQgdG8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIGludG8gc3ViZGlyZWN0b3JpZXMgZm9yIG5vdy4KLSAgYXNzZXJ0ICcuLicgbm90IGluIHBhdGgsIHBhdGgKLSAgZGVwdGggPSBsZW4ocGF0aC5zcGxpdChvcy5wYXRoLnNlcCkpCi0gIHJldHVybiBvcy5wYXRoLnNlcC5qb2luKFsnLi4nXSAqIGRlcHRoKQotCi0KLSMgTWFwIGZyb20gcXVhbGlmaWVkIHRhcmdldCB0byBwYXRoIHRvIG91dHB1dC4KLXRhcmdldF9vdXRwdXRzID0ge30KLSMgTWFwIGZyb20gcXVhbGlmaWVkIHRhcmdldCB0byBhbnkgbGlua2FibGUgb3V0cHV0LiAgQSBzdWJzZXQKLSMgb2YgdGFyZ2V0X291dHB1dHMuICBFLmcuIHdoZW4gbXliaW5hcnkgZGVwZW5kcyBvbiBsaWJhLCB3ZSB3YW50IHRvCi0jIGluY2x1ZGUgbGliYSBpbiB0aGUgbGlua2VyIGxpbmU7IHdoZW4gb3RoZXJiaW5hcnkgZGVwZW5kcyBvbgotIyBteWJpbmFyeSwgd2UganVzdCB3YW50IHRvIGJ1aWxkIG15YmluYXJ5IGZpcnN0LgotdGFyZ2V0X2xpbmtfZGVwcyA9IHt9Ci0KLQotY2xhc3MgTWFrZWZpbGVXcml0ZXI6Ci0gICIiIk1ha2VmaWxlV3JpdGVyIHBhY2thZ2VzIHVwIHRoZSB3cml0aW5nIG9mIG9uZSB0YXJnZXQtc3BlY2lmaWMgZm9vYmFyLm1rLgotCi0gIEl0cyBvbmx5IHJlYWwgZW50cnkgcG9pbnQgaXMgV3JpdGUoKSwgYW5kIGlzIG1vc3RseSB1c2VkIGZvciBuYW1lc3BhY2luZy4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbmVyYXRvcl9mbGFncywgZmxhdm9yKToKLSAgICBzZWxmLmdlbmVyYXRvcl9mbGFncyA9IGdlbmVyYXRvcl9mbGFncwotICAgIHNlbGYuZmxhdm9yID0gZmxhdm9yCi0KLSAgICBzZWxmLnN1ZmZpeF9ydWxlc19zcmNkaXIgPSB7fQotICAgIHNlbGYuc3VmZml4X3J1bGVzX29iamRpcjEgPSB7fQotICAgIHNlbGYuc3VmZml4X3J1bGVzX29iamRpcjIgPSB7fQotCi0gICAgIyBHZW5lcmF0ZSBzdWZmaXggcnVsZXMgZm9yIGFsbCBjb21waWxhYmxlIGV4dGVuc2lvbnMuCi0gICAgZm9yIGV4dCBpbiBDT01QSUxBQkxFX0VYVEVOU0lPTlMua2V5cygpOgotICAgICAgIyBTdWZmaXggcnVsZXMgZm9yIHNvdXJjZSBmb2xkZXIuCi0gICAgICBzZWxmLnN1ZmZpeF9ydWxlc19zcmNkaXIudXBkYXRlKHtleHQ6ICgiIiJcCi0kKG9iaikuJChUT09MU0VUKS8kKFRBUkdFVCkvJSUubzogJChzcmNkaXIpLyUlJXMgRk9SQ0VfRE9fQ01ECi0JQCQoY2FsbCBkb19jbWQsJXMsMSkKLSIiIiAlIChleHQsIENPTVBJTEFCTEVfRVhURU5TSU9OU1tleHRdKSl9KQotCi0gICAgICAjIFN1ZmZpeCBydWxlcyBmb3IgZ2VuZXJhdGVkIHNvdXJjZSBmaWxlcy4KLSAgICAgIHNlbGYuc3VmZml4X3J1bGVzX29iamRpcjEudXBkYXRlKHtleHQ6ICgiIiJcCi0kKG9iaikuJChUT09MU0VUKS8kKFRBUkdFVCkvJSUubzogJChvYmopLiQoVE9PTFNFVCkvJSUlcyBGT1JDRV9ET19DTUQKLQlAJChjYWxsIGRvX2NtZCwlcywxKQotIiIiICUgKGV4dCwgQ09NUElMQUJMRV9FWFRFTlNJT05TW2V4dF0pKX0pCi0gICAgICBzZWxmLnN1ZmZpeF9ydWxlc19vYmpkaXIyLnVwZGF0ZSh7ZXh0OiAoIiIiXAotJChvYmopLiQoVE9PTFNFVCkvJChUQVJHRVQpLyUlLm86ICQob2JqKS8lJSVzIEZPUkNFX0RPX0NNRAotCUAkKGNhbGwgZG9fY21kLCVzLDEpCi0iIiIgJSAoZXh0LCBDT01QSUxBQkxFX0VYVEVOU0lPTlNbZXh0XSkpfSkKLQotCi0gIGRlZiBXcml0ZShzZWxmLCBxdWFsaWZpZWRfdGFyZ2V0LCBiYXNlX3BhdGgsIG91dHB1dF9maWxlbmFtZSwgc3BlYywgY29uZmlncywKLSAgICAgICAgICAgIHBhcnRfb2ZfYWxsKToKLSAgICAiIiJUaGUgbWFpbiBlbnRyeSBwb2ludDogd3JpdGVzIGEgLm1rIGZpbGUgZm9yIGEgc2luZ2xlIHRhcmdldC4KLQotICAgIEFyZ3VtZW50czoKLSAgICAgIHF1YWxpZmllZF90YXJnZXQ6IHRhcmdldCB3ZSdyZSBnZW5lcmF0aW5nCi0gICAgICBiYXNlX3BhdGg6IHBhdGggcmVsYXRpdmUgdG8gc291cmNlIHJvb3Qgd2UncmUgYnVpbGRpbmcgaW4sIHVzZWQgdG8gcmVzb2x2ZQotICAgICAgICAgICAgICAgICB0YXJnZXQtcmVsYXRpdmUgcGF0aHMKLSAgICAgIG91dHB1dF9maWxlbmFtZTogb3V0cHV0IC5tayBmaWxlIG5hbWUgdG8gd3JpdGUKLSAgICAgIHNwZWMsIGNvbmZpZ3M6IGd5cCBpbmZvCi0gICAgICBwYXJ0X29mX2FsbDogZmxhZyBpbmRpY2F0aW5nIHRoaXMgdGFyZ2V0IGlzIHBhcnQgb2YgJ2FsbCcKLSAgICAiIiIKLSAgICBlbnN1cmVfZGlyZWN0b3J5X2V4aXN0cyhvdXRwdXRfZmlsZW5hbWUpCi0KLSAgICBzZWxmLmZwID0gb3BlbihvdXRwdXRfZmlsZW5hbWUsICd3JykKLQotICAgIHNlbGYuZnAud3JpdGUoaGVhZGVyKQotCi0gICAgc2VsZi5xdWFsaWZpZWRfdGFyZ2V0ID0gcXVhbGlmaWVkX3RhcmdldAotICAgIHNlbGYucGF0aCA9IGJhc2VfcGF0aAotICAgIHNlbGYudGFyZ2V0ID0gc3BlY1sndGFyZ2V0X25hbWUnXQotICAgIHNlbGYudHlwZSA9IHNwZWNbJ3R5cGUnXQotICAgIHNlbGYudG9vbHNldCA9IHNwZWNbJ3Rvb2xzZXQnXQotCi0gICAgc2VsZi5pc19tYWNfYnVuZGxlID0gZ3lwLnhjb2RlX2VtdWxhdGlvbi5Jc01hY0J1bmRsZShzZWxmLmZsYXZvciwgc3BlYykKLSAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MgPSBneXAueGNvZGVfZW11bGF0aW9uLlhjb2RlU2V0dGluZ3Moc3BlYykKLSAgICBlbHNlOgotICAgICAgc2VsZi54Y29kZV9zZXR0aW5ncyA9IE5vbmUKLQotICAgIGRlcHMsIGxpbmtfZGVwcyA9IHNlbGYuQ29tcHV0ZURlcHMoc3BlYykKLQotICAgICMgU29tZSBvZiB0aGUgZ2VuZXJhdGlvbiBiZWxvdyBjYW4gYWRkIGV4dHJhIG91dHB1dCwgc291cmNlcywgb3IKLSAgICAjIGxpbmsgZGVwZW5kZW5jaWVzLiAgQWxsIG9mIHRoZSBvdXQgcGFyYW1zIG9mIHRoZSBmdW5jdGlvbnMgdGhhdAotICAgICMgZm9sbG93IHVzZSBuYW1lcyBsaWtlIGV4dHJhX2Zvby4KLSAgICBleHRyYV9vdXRwdXRzID0gW10KLSAgICBleHRyYV9zb3VyY2VzID0gW10KLSAgICBleHRyYV9saW5rX2RlcHMgPSBbXQotICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzID0gW10KLSAgICBtYWNfYnVuZGxlX2RlcHMgPSBbXQotCi0gICAgaWYgc2VsZi5pc19tYWNfYnVuZGxlOgotICAgICAgc2VsZi5vdXRwdXQgPSBzZWxmLkNvbXB1dGVNYWNCdW5kbGVPdXRwdXQoc3BlYykKLSAgICAgIHNlbGYub3V0cHV0X2JpbmFyeSA9IHNlbGYuQ29tcHV0ZU1hY0J1bmRsZUJpbmFyeU91dHB1dChzcGVjKQotICAgIGVsc2U6Ci0gICAgICBzZWxmLm91dHB1dCA9IHNlbGYub3V0cHV0X2JpbmFyeSA9IHNlbGYuQ29tcHV0ZU91dHB1dChzcGVjKQotCi0gICAgc2VsZi5pc19zdGFuZGFsb25lX3N0YXRpY19saWJyYXJ5ID0gYm9vbCgKLSAgICAgICAgc3BlYy5nZXQoJ3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnknLCAwKSkKLSAgICBzZWxmLl9JTlNUQUxMQUJMRV9UQVJHRVRTID0gKCdleGVjdXRhYmxlJywgJ2xvYWRhYmxlX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhcmVkX2xpYnJhcnknKQotICAgIGlmIChzZWxmLmlzX3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnkgb3IKLSAgICAgICAgc2VsZi50eXBlIGluIHNlbGYuX0lOU1RBTExBQkxFX1RBUkdFVFMpOgotICAgICAgc2VsZi5hbGlhcyA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5vdXRwdXQpCi0gICAgICBpbnN0YWxsX3BhdGggPSBzZWxmLl9JbnN0YWxsYWJsZVRhcmdldEluc3RhbGxQYXRoKCkKLSAgICBlbHNlOgotICAgICAgc2VsZi5hbGlhcyA9IHNlbGYub3V0cHV0Ci0gICAgICBpbnN0YWxsX3BhdGggPSBzZWxmLm91dHB1dAotCi0gICAgc2VsZi5Xcml0ZUxuKCJUT09MU0VUIDo9ICIgKyBzZWxmLnRvb2xzZXQpCi0gICAgc2VsZi5Xcml0ZUxuKCJUQVJHRVQgOj0gIiArIHNlbGYudGFyZ2V0KQotCi0gICAgIyBBY3Rpb25zIG11c3QgY29tZSBmaXJzdCwgc2luY2UgdGhleSBjYW4gZ2VuZXJhdGUgbW9yZSBPQkpzIGZvciB1c2UgYmVsb3cuCi0gICAgaWYgJ2FjdGlvbnMnIGluIHNwZWM6Ci0gICAgICBzZWxmLldyaXRlQWN0aW9ucyhzcGVjWydhY3Rpb25zJ10sIGV4dHJhX3NvdXJjZXMsIGV4dHJhX291dHB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcywgcGFydF9vZl9hbGwpCi0KLSAgICAjIFJ1bGVzIG11c3QgYmUgZWFybHkgbGlrZSBhY3Rpb25zLgotICAgIGlmICdydWxlcycgaW4gc3BlYzoKLSAgICAgIHNlbGYuV3JpdGVSdWxlcyhzcGVjWydydWxlcyddLCBleHRyYV9zb3VyY2VzLCBleHRyYV9vdXRwdXRzLAotICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzLCBwYXJ0X29mX2FsbCkKLQotICAgIGlmICdjb3BpZXMnIGluIHNwZWM6Ci0gICAgICBzZWxmLldyaXRlQ29waWVzKHNwZWNbJ2NvcGllcyddLCBleHRyYV9vdXRwdXRzLCBwYXJ0X29mX2FsbCkKLQotICAgICMgQnVuZGxlIHJlc291cmNlcy4KLSAgICBpZiBzZWxmLmlzX21hY19idW5kbGU6Ci0gICAgICBhbGxfbWFjX2J1bmRsZV9yZXNvdXJjZXMgPSAoCi0gICAgICAgICAgc3BlYy5nZXQoJ21hY19idW5kbGVfcmVzb3VyY2VzJywgW10pICsgZXh0cmFfbWFjX2J1bmRsZV9yZXNvdXJjZXMpCi0gICAgICBzZWxmLldyaXRlTWFjQnVuZGxlUmVzb3VyY2VzKGFsbF9tYWNfYnVuZGxlX3Jlc291cmNlcywgbWFjX2J1bmRsZV9kZXBzKQotICAgICAgc2VsZi5Xcml0ZU1hY0luZm9QbGlzdChtYWNfYnVuZGxlX2RlcHMpCi0KLSAgICAjIFNvdXJjZXMuCi0gICAgYWxsX3NvdXJjZXMgPSBzcGVjLmdldCgnc291cmNlcycsIFtdKSArIGV4dHJhX3NvdXJjZXMKLSAgICBpZiBhbGxfc291cmNlczoKLSAgICAgIHNlbGYuV3JpdGVTb3VyY2VzKAotICAgICAgICAgIGNvbmZpZ3MsIGRlcHMsIGFsbF9zb3VyY2VzLCBleHRyYV9vdXRwdXRzLAotICAgICAgICAgIGV4dHJhX2xpbmtfZGVwcywgcGFydF9vZl9hbGwsCi0gICAgICAgICAgZ3lwLnhjb2RlX2VtdWxhdGlvbi5NYWNQcmVmaXhIZWFkZXIoCi0gICAgICAgICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsIGxhbWJkYSBwOiBTb3VyY2VpZnkoc2VsZi5BYnNvbHV0aWZ5KHApKSwKLSAgICAgICAgICAgICAgc2VsZi5QY2hpZnkpKQotICAgICAgc291cmNlcyA9IGZpbHRlcihDb21waWxhYmxlLCBhbGxfc291cmNlcykKLSAgICAgIGlmIHNvdXJjZXM6Ci0gICAgICAgIHNlbGYuV3JpdGVMbihTSEFSRURfSEVBREVSX1NVRkZJWF9SVUxFU19DT01NRU5UMSkKLSAgICAgICAgZXh0ZW5zaW9ucyA9IHNldChbb3MucGF0aC5zcGxpdGV4dChzKVsxXSBmb3IgcyBpbiBzb3VyY2VzXSkKLSAgICAgICAgZm9yIGV4dCBpbiBleHRlbnNpb25zOgotICAgICAgICAgIGlmIGV4dCBpbiBzZWxmLnN1ZmZpeF9ydWxlc19zcmNkaXI6Ci0gICAgICAgICAgICBzZWxmLldyaXRlTG4oc2VsZi5zdWZmaXhfcnVsZXNfc3JjZGlyW2V4dF0pCi0gICAgICAgIHNlbGYuV3JpdGVMbihTSEFSRURfSEVBREVSX1NVRkZJWF9SVUxFU19DT01NRU5UMikKLSAgICAgICAgZm9yIGV4dCBpbiBleHRlbnNpb25zOgotICAgICAgICAgIGlmIGV4dCBpbiBzZWxmLnN1ZmZpeF9ydWxlc19vYmpkaXIxOgotICAgICAgICAgICAgc2VsZi5Xcml0ZUxuKHNlbGYuc3VmZml4X3J1bGVzX29iamRpcjFbZXh0XSkKLSAgICAgICAgZm9yIGV4dCBpbiBleHRlbnNpb25zOgotICAgICAgICAgIGlmIGV4dCBpbiBzZWxmLnN1ZmZpeF9ydWxlc19vYmpkaXIyOgotICAgICAgICAgICAgc2VsZi5Xcml0ZUxuKHNlbGYuc3VmZml4X3J1bGVzX29iamRpcjJbZXh0XSkKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCcjIEVuZCBvZiB0aGlzIHNldCBvZiBzdWZmaXggcnVsZXMnKQotCi0gICAgICAgICMgQWRkIGRlcGVuZGVuY3kgZnJvbSBidW5kbGUgdG8gYnVuZGxlIGJpbmFyeS4KLSAgICAgICAgaWYgc2VsZi5pc19tYWNfYnVuZGxlOgotICAgICAgICAgIG1hY19idW5kbGVfZGVwcy5hcHBlbmQoc2VsZi5vdXRwdXRfYmluYXJ5KQotCi0gICAgc2VsZi5Xcml0ZVRhcmdldChzcGVjLCBjb25maWdzLCBkZXBzLCBleHRyYV9saW5rX2RlcHMgKyBsaW5rX2RlcHMsCi0gICAgICAgICAgICAgICAgICAgICBtYWNfYnVuZGxlX2RlcHMsIGV4dHJhX291dHB1dHMsIHBhcnRfb2ZfYWxsKQotCi0gICAgIyBVcGRhdGUgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IG91dHB1dHMsIHVzZWQgaW4gZGVwZW5kZW5jeSB0cmFja2luZy4KLSAgICB0YXJnZXRfb3V0cHV0c1txdWFsaWZpZWRfdGFyZ2V0XSA9IGluc3RhbGxfcGF0aAotCi0gICAgIyBVcGRhdGUgZ2xvYmFsIGxpc3Qgb2YgbGluayBkZXBlbmRlbmNpZXMuCi0gICAgaWYgc2VsZi50eXBlIGluICgnc3RhdGljX2xpYnJhcnknLCAnc2hhcmVkX2xpYnJhcnknKToKLSAgICAgIHRhcmdldF9saW5rX2RlcHNbcXVhbGlmaWVkX3RhcmdldF0gPSBzZWxmLm91dHB1dF9iaW5hcnkKLQotICAgICMgQ3VycmVudGx5IGFueSB2ZXJzaW9ucyBoYXZlIHRoZSBzYW1lIGVmZmVjdCwgYnV0IGluIGZ1dHVyZSB0aGUgYmVoYXZpb3IKLSAgICAjIGNvdWxkIGJlIGRpZmZlcmVudC4KLSAgICBpZiBzZWxmLmdlbmVyYXRvcl9mbGFncy5nZXQoJ2FuZHJvaWRfbmRrX3ZlcnNpb24nLCBOb25lKToKLSAgICAgIHNlbGYuV3JpdGVBbmRyb2lkTmRrTW9kdWxlUnVsZShzZWxmLnRhcmdldCwgYWxsX3NvdXJjZXMsIGxpbmtfZGVwcykKLQotICAgIHNlbGYuZnAuY2xvc2UoKQotCi0KLSAgZGVmIFdyaXRlU3ViTWFrZShzZWxmLCBvdXRwdXRfZmlsZW5hbWUsIG1ha2VmaWxlX3BhdGgsIHRhcmdldHMsIGJ1aWxkX2Rpcik6Ci0gICAgIiIiV3JpdGUgYSAic3ViLXByb2plY3QiIE1ha2VmaWxlLgotCi0gICAgVGhpcyBpcyBhIHNtYWxsLCB3cmFwcGVyIE1ha2VmaWxlIHRoYXQgY2FsbHMgdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSB0byBidWlsZAotICAgIHRoZSB0YXJnZXRzIGZyb20gYSBzaW5nbGUgZ3lwIGZpbGUgKGkuZS4gYSBzdWItcHJvamVjdCkuCi0KLSAgICBBcmd1bWVudHM6Ci0gICAgICBvdXRwdXRfZmlsZW5hbWU6IHN1Yi1wcm9qZWN0IE1ha2VmaWxlIG5hbWUgdG8gd3JpdGUKLSAgICAgIG1ha2VmaWxlX3BhdGg6IHBhdGggdG8gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZQotICAgICAgdGFyZ2V0czogbGlzdCBvZiAiYWxsIiB0YXJnZXRzIGZvciB0aGlzIHN1Yi1wcm9qZWN0Ci0gICAgICBidWlsZF9kaXI6IGJ1aWxkIG91dHB1dCBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSBzdWItcHJvamVjdAotICAgICIiIgotICAgIGVuc3VyZV9kaXJlY3RvcnlfZXhpc3RzKG91dHB1dF9maWxlbmFtZSkKLSAgICBzZWxmLmZwID0gb3BlbihvdXRwdXRfZmlsZW5hbWUsICd3JykKLSAgICBzZWxmLmZwLndyaXRlKGhlYWRlcikKLSAgICAjIEZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIGJ1aWxkZXJzLCBwdXQgc3ViLXByb2plY3QgYnVpbGQgb3V0cHV0IGluIHRoZQotICAgICMgc3ViLXByb2plY3QgZGlyIChzZWUgdGVzdC9zdWJkaXJlY3RvcnkvZ3lwdGVzdC1zdWJkaXItYWxsLnB5KS4KLSAgICBzZWxmLldyaXRlTG4oJ2V4cG9ydCBidWlsZGRpcl9uYW1lID89ICVzJyAlCi0gICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSwgYnVpbGRfZGlyKSkKLSAgICBzZWxmLldyaXRlTG4oJy5QSE9OWTogYWxsJykKLSAgICBzZWxmLldyaXRlTG4oJ2FsbDonKQotICAgIGlmIG1ha2VmaWxlX3BhdGg6Ci0gICAgICBtYWtlZmlsZV9wYXRoID0gJyAtQyAnICsgbWFrZWZpbGVfcGF0aAotICAgIHNlbGYuV3JpdGVMbignXHQkKE1BS0UpJXMgJXMnICUgKG1ha2VmaWxlX3BhdGgsICcgJy5qb2luKHRhcmdldHMpKSkKLSAgICBzZWxmLmZwLmNsb3NlKCkKLQotCi0gIGRlZiBXcml0ZUFjdGlvbnMoc2VsZiwgYWN0aW9ucywgZXh0cmFfc291cmNlcywgZXh0cmFfb3V0cHV0cywKLSAgICAgICAgICAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcywgcGFydF9vZl9hbGwpOgotICAgICIiIldyaXRlIE1ha2VmaWxlIGNvZGUgZm9yIGFueSAnYWN0aW9ucycgZnJvbSB0aGUgZ3lwIGlucHV0LgotCi0gICAgZXh0cmFfc291cmNlczogYSBsaXN0IHRoYXQgd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCBuZXdseSBnZW5lcmF0ZWQgc291cmNlCi0gICAgICAgICAgICAgICAgICAgZmlsZXMsIGlmIGFueQotICAgIGV4dHJhX291dHB1dHM6IGEgbGlzdCB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggYW55IG91dHB1dHMgb2YgdGhlc2UKLSAgICAgICAgICAgICAgICAgICBhY3Rpb25zICh1c2VkIHRvIG1ha2Ugb3RoZXIgcGllY2VzIGRlcGVuZGVudCBvbiB0aGVzZQotICAgICAgICAgICAgICAgICAgIGFjdGlvbnMpCi0gICAgcGFydF9vZl9hbGw6IGZsYWcgaW5kaWNhdGluZyB0aGlzIHRhcmdldCBpcyBwYXJ0IG9mICdhbGwnCi0gICAgIiIiCi0gICAgZW52ID0gc2VsZi5HZXRTb3J0ZWRYY29kZUVudigpCi0gICAgZm9yIGFjdGlvbiBpbiBhY3Rpb25zOgotICAgICAgbmFtZSA9IFN0cmluZ1RvTWFrZWZpbGVWYXJpYWJsZSgnJXNfJXMnICUgKHNlbGYucXVhbGlmaWVkX3RhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bJ2FjdGlvbl9uYW1lJ10pKQotICAgICAgc2VsZi5Xcml0ZUxuKCcjIyMgUnVsZXMgZm9yIGFjdGlvbiAiJXMiOicgJSBhY3Rpb25bJ2FjdGlvbl9uYW1lJ10pCi0gICAgICBpbnB1dHMgPSBhY3Rpb25bJ2lucHV0cyddCi0gICAgICBvdXRwdXRzID0gYWN0aW9uWydvdXRwdXRzJ10KLQotICAgICAgIyBCdWlsZCB1cCBhIGxpc3Qgb2Ygb3V0cHV0cy4KLSAgICAgICMgQ29sbGVjdCB0aGUgb3V0cHV0IGRpcnMgd2UnbGwgbmVlZC4KLSAgICAgIGRpcnMgPSBzZXQoKQotICAgICAgZm9yIG91dCBpbiBvdXRwdXRzOgotICAgICAgICBkaXIgPSBvcy5wYXRoLnNwbGl0KG91dClbMF0KLSAgICAgICAgaWYgZGlyOgotICAgICAgICAgIGRpcnMuYWRkKGRpcikKLSAgICAgIGlmIGludChhY3Rpb24uZ2V0KCdwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgIGV4dHJhX3NvdXJjZXMgKz0gb3V0cHV0cwotICAgICAgaWYgaW50KGFjdGlvbi5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19tYWNfYnVuZGxlX3Jlc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzICs9IG91dHB1dHMKLQotICAgICAgIyBXcml0ZSB0aGUgYWN0dWFsIGNvbW1hbmQuCi0gICAgICBhY3Rpb25fY29tbWFuZHMgPSBhY3Rpb25bJ2FjdGlvbiddCi0gICAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgICAgYWN0aW9uX2NvbW1hbmRzID0gW2d5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhjb21tYW5kLCBlbnYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb21tYW5kIGluIGFjdGlvbl9jb21tYW5kc10KLSAgICAgIGNvbW1hbmQgPSBneXAuY29tbW9uLkVuY29kZVBPU0lYU2hlbGxMaXN0KGFjdGlvbl9jb21tYW5kcykKLSAgICAgIGlmICdtZXNzYWdlJyBpbiBhY3Rpb246Ci0gICAgICAgIHNlbGYuV3JpdGVMbigncXVpZXRfY21kXyVzID0gQUNUSU9OICVzICRAJyAlIChuYW1lLCBhY3Rpb25bJ21lc3NhZ2UnXSkpCi0gICAgICBlbHNlOgotICAgICAgICBzZWxmLldyaXRlTG4oJ3F1aWV0X2NtZF8lcyA9IEFDVElPTiAlcyAkQCcgJSAobmFtZSwgbmFtZSkpCi0gICAgICBpZiBsZW4oZGlycykgPiAwOgotICAgICAgICBjb21tYW5kID0gJ21rZGlyIC1wICVzJyAlICcgJy5qb2luKGRpcnMpICsgJzsgJyArIGNvbW1hbmQKLQotICAgICAgY2RfYWN0aW9uID0gJ2NkICVzOyAnICUgU291cmNlaWZ5KHNlbGYucGF0aCBvciAnLicpCi0KLSAgICAgICMgY29tbWFuZCBhbmQgY2RfYWN0aW9uIGdldCB3cml0dGVuIHRvIGEgdG9wbGV2ZWwgdmFyaWFibGUgY2FsbGVkCi0gICAgICAjIGNtZF9mb28uIFRvcGxldmVsIHZhcmlhYmxlcyBjYW4ndCBoYW5kbGUgdGhpbmdzIHRoYXQgY2hhbmdlIHBlcgotICAgICAgIyBtYWtlZmlsZSBsaWtlICQoVEFSR0VUKSwgc28gaGFyZGNvZGUgdGhlIHRhcmdldC4KLSAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoJyQoVEFSR0VUKScsIHNlbGYudGFyZ2V0KQotICAgICAgY2RfYWN0aW9uID0gY2RfYWN0aW9uLnJlcGxhY2UoJyQoVEFSR0VUKScsIHNlbGYudGFyZ2V0KQotCi0gICAgICAjIFNldCBMRF9MSUJSQVJZX1BBVEggaW4gY2FzZSB0aGUgYWN0aW9uIHJ1bnMgYW4gZXhlY3V0YWJsZSBmcm9tIHRoaXMKLSAgICAgICMgYnVpbGQgd2hpY2ggbGlua3MgdG8gc2hhcmVkIGxpYnMgZnJvbSB0aGlzIGJ1aWxkLgotICAgICAgIyBhY3Rpb25zIHJ1biBvbiB0aGUgaG9zdCwgc28gdGhleSBzaG91bGQgaW4gdGhlb3J5IG9ubHkgdXNlIGhvc3QKLSAgICAgICMgbGlicmFyaWVzLCBidXQgdW50aWwgZXZlcnl0aGluZyBpcyBtYWRlIGNyb3NzLWNvbXBpbGUgc2FmZSwgYWxzbyB1c2UKLSAgICAgICMgdGFyZ2V0IGxpYnJhcmllcy4KLSAgICAgICMgVE9ETyhwaW1hbik6IHdoZW4gZXZlcnl0aGluZyBpcyBjcm9zcy1jb21waWxlIHNhZmUsIHJlbW92ZSBsaWIudGFyZ2V0Ci0gICAgICBzZWxmLldyaXRlTG4oJ2NtZF8lcyA9IExEX0xJQlJBUllfUEFUSD0kKGJ1aWxkZGlyKS9saWIuaG9zdDonCi0gICAgICAgICAgICAgICAgICAgJyQoYnVpbGRkaXIpL2xpYi50YXJnZXQ6JCRMRF9MSUJSQVJZX1BBVEg7ICcKLSAgICAgICAgICAgICAgICAgICAnZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgJwotICAgICAgICAgICAgICAgICAgICclcyVzJwotICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIGNkX2FjdGlvbiwgY29tbWFuZCkpCi0gICAgICBzZWxmLldyaXRlTG4oKQotICAgICAgb3V0cHV0cyA9IG1hcChzZWxmLkFic29sdXRpZnksIG91dHB1dHMpCi0gICAgICAjIFRoZSBtYWtlZmlsZSBydWxlcyBhcmUgYWxsIHJlbGF0aXZlIHRvIHRoZSB0b3AgZGlyLCBidXQgdGhlIGd5cCBhY3Rpb25zCi0gICAgICAjIGFyZSBkZWZpbmVkIHJlbGF0aXZlIHRvIHRoZWlyIGNvbnRhaW5pbmcgZGlyLiAgVGhpcyByZXBsYWNlcyB0aGUgb2JqCi0gICAgICAjIHZhcmlhYmxlIGZvciB0aGUgYWN0aW9uIHJ1bGUgd2l0aCBhbiBhYnNvbHV0ZSB2ZXJzaW9uIHNvIHRoYXQgdGhlIG91dHB1dAotICAgICAgIyBnb2VzIGluIHRoZSByaWdodCBwbGFjZS4KLSAgICAgICMgT25seSB3cml0ZSB0aGUgJ29iaicgYW5kICdidWlsZGRpcicgcnVsZXMgZm9yIHRoZSAicHJpbWFyeSIgb3V0cHV0ICg6MSk7Ci0gICAgICAjIGl0J3Mgc3VwZXJmbHVvdXMgZm9yIHRoZSAiZXh0cmEgb3V0cHV0cyIsIGFuZCB0aGlzIGF2b2lkcyBhY2NpZGVudGFsbHkKLSAgICAgICMgd3JpdGluZyBkdXBsaWNhdGUgZHVtbXkgcnVsZXMgZm9yIHRob3NlIG91dHB1dHMuCi0gICAgICAjIFNhbWUgZm9yIGVudmlyb25tZW50LgotICAgICAgc2VsZi5Xcml0ZUxuKCIlczogb2JqIDo9ICQoYWJzX29iaikiICUgUXVvdGVTcGFjZXMob3V0cHV0c1swXSkpCi0gICAgICBzZWxmLldyaXRlTG4oIiVzOiBidWlsZGRpciA6PSAkKGFic19idWlsZGRpcikiICUgUXVvdGVTcGFjZXMob3V0cHV0c1swXSkpCi0gICAgICBzZWxmLldyaXRlU29ydGVkWGNvZGVFbnYob3V0cHV0c1swXSwgc2VsZi5HZXRTb3J0ZWRYY29kZUVudigpKQotCi0gICAgICBmb3IgaW5wdXQgaW4gaW5wdXRzOgotICAgICAgICBhc3NlcnQgJyAnIG5vdCBpbiBpbnB1dCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBhY3Rpb24gaW5wdXQgZmlsZW5hbWVzIG5vdCBzdXBwb3J0ZWQgKCVzKSIgICUgaW5wdXQpCi0gICAgICBmb3Igb3V0cHV0IGluIG91dHB1dHM6Ci0gICAgICAgIGFzc2VydCAnICcgbm90IGluIG91dHB1dCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBhY3Rpb24gb3V0cHV0IGZpbGVuYW1lcyBub3Qgc3VwcG9ydGVkICglcykiICAlIG91dHB1dCkKLQotICAgICAgIyBTZWUgdGhlIGNvbW1lbnQgaW4gV3JpdGVDb3BpZXMgYWJvdXQgZXhwYW5kaW5nIGVudiB2YXJzLgotICAgICAgb3V0cHV0cyA9IFtneXAueGNvZGVfZW11bGF0aW9uLkV4cGFuZEVudlZhcnMobywgZW52KSBmb3IgbyBpbiBvdXRwdXRzXQotICAgICAgaW5wdXRzID0gW2d5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhpLCBlbnYpIGZvciBpIGluIGlucHV0c10KLQotICAgICAgc2VsZi5Xcml0ZURvQ21kKG91dHB1dHMsIG1hcChTb3VyY2VpZnksIG1hcChzZWxmLkFic29sdXRpZnksIGlucHV0cykpLAotICAgICAgICAgICAgICAgICAgICAgIHBhcnRfb2ZfYWxsPXBhcnRfb2ZfYWxsLCBjb21tYW5kPW5hbWUpCi0KLSAgICAgICMgU3R1ZmYgdGhlIG91dHB1dHMgaW4gYSB2YXJpYWJsZSBzbyB3ZSBjYW4gcmVmZXIgdG8gdGhlbSBsYXRlci4KLSAgICAgIG91dHB1dHNfdmFyaWFibGUgPSAnYWN0aW9uXyVzX291dHB1dHMnICUgbmFtZQotICAgICAgc2VsZi5Xcml0ZUxuKCclcyA6PSAlcycgJSAob3V0cHV0c192YXJpYWJsZSwgJyAnLmpvaW4ob3V0cHV0cykpKQotICAgICAgZXh0cmFfb3V0cHV0cy5hcHBlbmQoJyQoJXMpJyAlIG91dHB1dHNfdmFyaWFibGUpCi0gICAgICBzZWxmLldyaXRlTG4oKQotCi0gICAgc2VsZi5Xcml0ZUxuKCkKLQotCi0gIGRlZiBXcml0ZVJ1bGVzKHNlbGYsIHJ1bGVzLCBleHRyYV9zb3VyY2VzLCBleHRyYV9vdXRwdXRzLAotICAgICAgICAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcywgcGFydF9vZl9hbGwpOgotICAgICIiIldyaXRlIE1ha2VmaWxlIGNvZGUgZm9yIGFueSAncnVsZXMnIGZyb20gdGhlIGd5cCBpbnB1dC4KLQotICAgIGV4dHJhX3NvdXJjZXM6IGEgbGlzdCB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggbmV3bHkgZ2VuZXJhdGVkIHNvdXJjZQotICAgICAgICAgICAgICAgICAgIGZpbGVzLCBpZiBhbnkKLSAgICBleHRyYV9vdXRwdXRzOiBhIGxpc3QgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIGFueSBvdXRwdXRzIG9mIHRoZXNlCi0gICAgICAgICAgICAgICAgICAgcnVsZXMgKHVzZWQgdG8gbWFrZSBvdGhlciBwaWVjZXMgZGVwZW5kZW50IG9uIHRoZXNlIHJ1bGVzKQotICAgIHBhcnRfb2ZfYWxsOiBmbGFnIGluZGljYXRpbmcgdGhpcyB0YXJnZXQgaXMgcGFydCBvZiAnYWxsJwotICAgICIiIgotICAgIGVudiA9IHNlbGYuR2V0U29ydGVkWGNvZGVFbnYoKQotICAgIGZvciBydWxlIGluIHJ1bGVzOgotICAgICAgbmFtZSA9IFN0cmluZ1RvTWFrZWZpbGVWYXJpYWJsZSgnJXNfJXMnICUgKHNlbGYucXVhbGlmaWVkX3RhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlWydydWxlX25hbWUnXSkpCi0gICAgICBjb3VudCA9IDAKLSAgICAgIHNlbGYuV3JpdGVMbignIyMjIEdlbmVyYXRlZCBmb3IgcnVsZSAlczonICUgbmFtZSkKLQotICAgICAgYWxsX291dHB1dHMgPSBbXQotCi0gICAgICBmb3IgcnVsZV9zb3VyY2UgaW4gcnVsZS5nZXQoJ3J1bGVfc291cmNlcycsIFtdKToKLSAgICAgICAgZGlycyA9IHNldCgpCi0gICAgICAgIChydWxlX3NvdXJjZV9kaXJuYW1lLCBydWxlX3NvdXJjZV9iYXNlbmFtZSkgPSBvcy5wYXRoLnNwbGl0KHJ1bGVfc291cmNlKQotICAgICAgICAocnVsZV9zb3VyY2Vfcm9vdCwgcnVsZV9zb3VyY2VfZXh0KSA9IFwKLSAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQocnVsZV9zb3VyY2VfYmFzZW5hbWUpCi0KLSAgICAgICAgb3V0cHV0cyA9IFtzZWxmLkV4cGFuZElucHV0Um9vdChvdXQsIHJ1bGVfc291cmNlX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZV9zb3VyY2VfZGlybmFtZSkKLSAgICAgICAgICAgICAgICAgICBmb3Igb3V0IGluIHJ1bGVbJ291dHB1dHMnXV0KLQotICAgICAgICBmb3Igb3V0IGluIG91dHB1dHM6Ci0gICAgICAgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKG91dCkKLSAgICAgICAgICBpZiBkaXI6Ci0gICAgICAgICAgICBkaXJzLmFkZChkaXIpCi0gICAgICAgIGlmIGludChydWxlLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnLCBGYWxzZSkpOgotICAgICAgICAgIGV4dHJhX3NvdXJjZXMgKz0gb3V0cHV0cwotICAgICAgICBpZiBpbnQocnVsZS5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19tYWNfYnVuZGxlX3Jlc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgICAgZXh0cmFfbWFjX2J1bmRsZV9yZXNvdXJjZXMgKz0gb3V0cHV0cwotICAgICAgICBpbnB1dHMgPSBtYXAoU291cmNlaWZ5LCBtYXAoc2VsZi5BYnNvbHV0aWZ5LCBbcnVsZV9zb3VyY2VdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuZ2V0KCdpbnB1dHMnLCBbXSkpKQotICAgICAgICBhY3Rpb25zID0gWyckKGNhbGwgZG9fY21kLCVzXyVkKScgJSAobmFtZSwgY291bnQpXQotCi0gICAgICAgIGlmIG5hbWUgPT0gJ3Jlc291cmNlc19ncml0JzoKLSAgICAgICAgICAjIEhBQ0s6IFRoaXMgaXMgdWdseS4gIEdyaXQgaW50ZW50aW9uYWxseSBkb2Vzbid0IHRvdWNoIHRoZQotICAgICAgICAgICMgdGltZXN0YW1wIG9mIGl0cyBvdXRwdXQgZmlsZSB3aGVuIHRoZSBmaWxlIGRvZXNuJ3QgY2hhbmdlLAotICAgICAgICAgICMgd2hpY2ggaXMgZmluZSBpbiBoYXNoLWJhc2VkIGRlcGVuZGVuY3kgc3lzdGVtcyBsaWtlIHNjb25zCi0gICAgICAgICAgIyBhbmQgZm9yZ2UsIGJ1dCBub3Qga29zaGVyIGluIHRoZSBtYWtlIHdvcmxkLiAgQWZ0ZXIgc29tZQotICAgICAgICAgICMgZGlzY3Vzc2lvbiwgaGFja2luZyBhcm91bmQgaXQgaGVyZSBzZWVtcyBsaWtlIHRoZSBsZWFzdAotICAgICAgICAgICMgYW1vdW50IG9mIHBhaW4uCi0gICAgICAgICAgYWN0aW9ucyArPSBbJ0B0b3VjaCAtLW5vLWNyZWF0ZSAkQCddCi0KLSAgICAgICAgIyBTZWUgdGhlIGNvbW1lbnQgaW4gV3JpdGVDb3BpZXMgYWJvdXQgZXhwYW5kaW5nIGVudiB2YXJzLgotICAgICAgICBvdXRwdXRzID0gW2d5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhvLCBlbnYpIGZvciBvIGluIG91dHB1dHNdCi0gICAgICAgIGlucHV0cyA9IFtneXAueGNvZGVfZW11bGF0aW9uLkV4cGFuZEVudlZhcnMoaSwgZW52KSBmb3IgaSBpbiBpbnB1dHNdCi0KLSAgICAgICAgb3V0cHV0cyA9IG1hcChzZWxmLkFic29sdXRpZnksIG91dHB1dHMpCi0gICAgICAgIGFsbF9vdXRwdXRzICs9IG91dHB1dHMKLSAgICAgICAgIyBPbmx5IHdyaXRlIHRoZSAnb2JqJyBhbmQgJ2J1aWxkZGlyJyBydWxlcyBmb3IgdGhlICJwcmltYXJ5IiBvdXRwdXQKLSAgICAgICAgIyAoOjEpOyBpdCdzIHN1cGVyZmx1b3VzIGZvciB0aGUgImV4dHJhIG91dHB1dHMiLCBhbmQgdGhpcyBhdm9pZHMKLSAgICAgICAgIyBhY2NpZGVudGFsbHkgd3JpdGluZyBkdXBsaWNhdGUgZHVtbXkgcnVsZXMgZm9yIHRob3NlIG91dHB1dHMuCi0gICAgICAgIHNlbGYuV3JpdGVMbignJXM6IG9iaiA6PSAkKGFic19vYmopJyAlIG91dHB1dHNbMF0pCi0gICAgICAgIHNlbGYuV3JpdGVMbignJXM6IGJ1aWxkZGlyIDo9ICQoYWJzX2J1aWxkZGlyKScgJSBvdXRwdXRzWzBdKQotICAgICAgICBzZWxmLldyaXRlTWFrZVJ1bGUob3V0cHV0cywgaW5wdXRzICsgWydGT1JDRV9ET19DTUQnXSwgYWN0aW9ucykKLSAgICAgICAgZm9yIG91dHB1dCBpbiBvdXRwdXRzOgotICAgICAgICAgIGFzc2VydCAnICcgbm90IGluIG91dHB1dCwgKAotICAgICAgICAgICAgICAiU3BhY2VzIGluIHJ1bGUgZmlsZW5hbWVzIG5vdCB5ZXQgc3VwcG9ydGVkICglcykiICAlIG91dHB1dCkKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCdhbGxfZGVwcyArPSAlcycgJSAnICcuam9pbihvdXRwdXRzKSkKLQotICAgICAgICBhY3Rpb24gPSBbc2VsZi5FeHBhbmRJbnB1dFJvb3QoYWMsIHJ1bGVfc291cmNlX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlX3NvdXJjZV9kaXJuYW1lKQotICAgICAgICAgICAgICAgICAgZm9yIGFjIGluIHJ1bGVbJ2FjdGlvbiddXQotICAgICAgICBta2RpcnMgPSAnJwotICAgICAgICBpZiBsZW4oZGlycykgPiAwOgotICAgICAgICAgIG1rZGlycyA9ICdta2RpciAtcCAlczsgJyAlICcgJy5qb2luKGRpcnMpCi0gICAgICAgIGNkX2FjdGlvbiA9ICdjZCAlczsgJyAlIFNvdXJjZWlmeShzZWxmLnBhdGggb3IgJy4nKQotCi0gICAgICAgICMgYWN0aW9uLCBjZF9hY3Rpb24sIGFuZCBta2RpcnMgZ2V0IHdyaXR0ZW4gdG8gYSB0b3BsZXZlbCB2YXJpYWJsZQotICAgICAgICAjIGNhbGxlZCBjbWRfZm9vLiBUb3BsZXZlbCB2YXJpYWJsZXMgY2FuJ3QgaGFuZGxlIHRoaW5ncyB0aGF0IGNoYW5nZQotICAgICAgICAjIHBlciBtYWtlZmlsZSBsaWtlICQoVEFSR0VUKSwgc28gaGFyZGNvZGUgdGhlIHRhcmdldC4KLSAgICAgICAgaWYgc2VsZi5mbGF2b3IgPT0gJ21hYyc6Ci0gICAgICAgICAgYWN0aW9uID0gW2d5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhjb21tYW5kLCBlbnYpCi0gICAgICAgICAgICAgICAgICAgIGZvciBjb21tYW5kIGluIGFjdGlvbl0KLSAgICAgICAgYWN0aW9uID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChhY3Rpb24pCi0gICAgICAgIGFjdGlvbiA9IGFjdGlvbi5yZXBsYWNlKCckKFRBUkdFVCknLCBzZWxmLnRhcmdldCkKLSAgICAgICAgY2RfYWN0aW9uID0gY2RfYWN0aW9uLnJlcGxhY2UoJyQoVEFSR0VUKScsIHNlbGYudGFyZ2V0KQotICAgICAgICBta2RpcnMgPSBta2RpcnMucmVwbGFjZSgnJChUQVJHRVQpJywgc2VsZi50YXJnZXQpCi0KLSAgICAgICAgIyBTZXQgTERfTElCUkFSWV9QQVRIIGluIGNhc2UgdGhlIHJ1bGUgcnVucyBhbiBleGVjdXRhYmxlIGZyb20gdGhpcwotICAgICAgICAjIGJ1aWxkIHdoaWNoIGxpbmtzIHRvIHNoYXJlZCBsaWJzIGZyb20gdGhpcyBidWlsZC4KLSAgICAgICAgIyBydWxlcyBydW4gb24gdGhlIGhvc3QsIHNvIHRoZXkgc2hvdWxkIGluIHRoZW9yeSBvbmx5IHVzZSBob3N0Ci0gICAgICAgICMgbGlicmFyaWVzLCBidXQgdW50aWwgZXZlcnl0aGluZyBpcyBtYWRlIGNyb3NzLWNvbXBpbGUgc2FmZSwgYWxzbyB1c2UKLSAgICAgICAgIyB0YXJnZXQgbGlicmFyaWVzLgotICAgICAgICAjIFRPRE8ocGltYW4pOiB3aGVuIGV2ZXJ5dGhpbmcgaXMgY3Jvc3MtY29tcGlsZSBzYWZlLCByZW1vdmUgbGliLnRhcmdldAotICAgICAgICBzZWxmLldyaXRlTG4oCi0gICAgICAgICAgICAiY21kXyUobmFtZSlzXyUoY291bnQpZCA9IExEX0xJQlJBUllfUEFUSD0iCi0gICAgICAgICAgICAgICIkKGJ1aWxkZGlyKS9saWIuaG9zdDokKGJ1aWxkZGlyKS9saWIudGFyZ2V0OiQkTERfTElCUkFSWV9QQVRIOyAiCi0gICAgICAgICAgICAgICJleHBvcnQgTERfTElCUkFSWV9QQVRIOyAiCi0gICAgICAgICAgICAgICIlKGNkX2FjdGlvbilzJShta2RpcnMpcyUoYWN0aW9uKXMiICUgewotICAgICAgICAgICdhY3Rpb24nOiBhY3Rpb24sCi0gICAgICAgICAgJ2NkX2FjdGlvbic6IGNkX2FjdGlvbiwKLSAgICAgICAgICAnY291bnQnOiBjb3VudCwKLSAgICAgICAgICAnbWtkaXJzJzogbWtkaXJzLAotICAgICAgICAgICduYW1lJzogbmFtZSwKLSAgICAgICAgfSkKLSAgICAgICAgc2VsZi5Xcml0ZUxuKAotICAgICAgICAgICAgJ3F1aWV0X2NtZF8lKG5hbWUpc18lKGNvdW50KWQgPSBSVUxFICUobmFtZSlzXyUoY291bnQpZCAkQCcgJSB7Ci0gICAgICAgICAgJ2NvdW50JzogY291bnQsCi0gICAgICAgICAgJ25hbWUnOiBuYW1lLAotICAgICAgICB9KQotICAgICAgICBzZWxmLldyaXRlTG4oKQotICAgICAgICBjb3VudCArPSAxCi0KLSAgICAgIG91dHB1dHNfdmFyaWFibGUgPSAncnVsZV8lc19vdXRwdXRzJyAlIG5hbWUKLSAgICAgIHNlbGYuV3JpdGVMaXN0KGFsbF9vdXRwdXRzLCBvdXRwdXRzX3ZhcmlhYmxlKQotICAgICAgZXh0cmFfb3V0cHV0cy5hcHBlbmQoJyQoJXMpJyAlIG91dHB1dHNfdmFyaWFibGUpCi0KLSAgICAgIHNlbGYuV3JpdGVMbignIyMjIEZpbmlzaGVkIGdlbmVyYXRpbmcgZm9yIHJ1bGU6ICVzJyAlIG5hbWUpCi0gICAgICBzZWxmLldyaXRlTG4oKQotICAgIHNlbGYuV3JpdGVMbignIyMjIEZpbmlzaGVkIGdlbmVyYXRpbmcgZm9yIGFsbCBydWxlcycpCi0gICAgc2VsZi5Xcml0ZUxuKCcnKQotCi0KLSAgZGVmIFdyaXRlQ29waWVzKHNlbGYsIGNvcGllcywgZXh0cmFfb3V0cHV0cywgcGFydF9vZl9hbGwpOgotICAgICIiIldyaXRlIE1ha2VmaWxlIGNvZGUgZm9yIGFueSAnY29waWVzJyBmcm9tIHRoZSBneXAgaW5wdXQuCi0KLSAgICBleHRyYV9vdXRwdXRzOiBhIGxpc3QgdGhhdCB3aWxsIGJlIGZpbGxlZCBpbiB3aXRoIGFueSBvdXRwdXRzIG9mIHRoaXMgYWN0aW9uCi0gICAgICAgICAgICAgICAgICAgKHVzZWQgdG8gbWFrZSBvdGhlciBwaWVjZXMgZGVwZW5kZW50IG9uIHRoaXMgYWN0aW9uKQotICAgIHBhcnRfb2ZfYWxsOiBmbGFnIGluZGljYXRpbmcgdGhpcyB0YXJnZXQgaXMgcGFydCBvZiAnYWxsJwotICAgICIiIgotICAgIHNlbGYuV3JpdGVMbignIyMjIEdlbmVyYXRlZCBmb3IgY29weSBydWxlLicpCi0KLSAgICB2YXJpYWJsZSA9IFN0cmluZ1RvTWFrZWZpbGVWYXJpYWJsZShzZWxmLnF1YWxpZmllZF90YXJnZXQgKyAnX2NvcGllcycpCi0gICAgb3V0cHV0cyA9IFtdCi0gICAgZm9yIGNvcHkgaW4gY29waWVzOgotICAgICAgZm9yIHBhdGggaW4gY29weVsnZmlsZXMnXToKLSAgICAgICAgIyBBYnNvbHV0aWZ5KCkgbWF5IGNhbGwgbm9ybXBhdGgsIGFuZCB3aWxsIHN0cmlwIHRyYWlsaW5nIHNsYXNoZXMuCi0gICAgICAgIHBhdGggPSBTb3VyY2VpZnkoc2VsZi5BYnNvbHV0aWZ5KHBhdGgpKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aClbMV0KLSAgICAgICAgb3V0cHV0ID0gU291cmNlaWZ5KHNlbGYuQWJzb2x1dGlmeShvcy5wYXRoLmpvaW4oY29weVsnZGVzdGluYXRpb24nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKSkKLQotICAgICAgICAjIElmIHRoZSBvdXRwdXQgcGF0aCBoYXMgdmFyaWFibGVzIGluIGl0LCB3aGljaCBoYXBwZW5zIGluIHByYWN0aWNlIGZvcgotICAgICAgICAjICdjb3BpZXMnLCB3cml0aW5nIHRoZSBlbnZpcm9ubWVudCBhcyB0YXJnZXQtbG9jYWwgZG9lc24ndCB3b3JrLAotICAgICAgICAjIGJlY2F1c2UgdGhlIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBuZWVkZWQgZm9yIHRoZSB0YXJnZXQgbmFtZS4KLSAgICAgICAgIyBDb3B5aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW50byBnbG9iYWwgbWFrZSB2YXJpYWJsZXMgZG9lc24ndAotICAgICAgICAjIHdvcmsgZWl0aGVyLCBiZWNhdXNlIHRoZW4gdGhlIC5kIGZpbGVzIHdpbGwgcG90ZW50aWFsbHkgY29udGFpbiBzcGFjZXMKLSAgICAgICAgIyBhZnRlciB2YXJpYWJsZSBleHBhbnNpb24sIGFuZCAuZCBmaWxlIGhhbmRsaW5nIGNhbm5vdCBoYW5kbGUgc3BhY2VzLgotICAgICAgICAjIEFzIGEgd29ya2Fyb3VuZCwgbWFudWFsbHkgZXhwYW5kIHZhcmlhYmxlcyBhdCBneXAgdGltZS4gU2luY2UgJ2NvcGllcycKLSAgICAgICAgIyBjYW4ndCBydW4gc2NyaXB0cywgdGhlcmUncyBubyBuZWVkIHRvIHdyaXRlIHRoZSBlbnYgdGhlbi4KLSAgICAgICAgIyBXcml0ZURvQ21kKCkgd2lsbCBlc2NhcGUgc3BhY2VzIGZvciAuZCBmaWxlcy4KLSAgICAgICAgZW52ID0gc2VsZi5HZXRTb3J0ZWRYY29kZUVudigpCi0gICAgICAgIG91dHB1dCA9IGd5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhvdXRwdXQsIGVudikKLSAgICAgICAgcGF0aCA9IGd5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhwYXRoLCBlbnYpCi0gICAgICAgIHNlbGYuV3JpdGVEb0NtZChbb3V0cHV0XSwgW3BhdGhdLCAnY29weScsIHBhcnRfb2ZfYWxsKQotICAgICAgICBvdXRwdXRzLmFwcGVuZChvdXRwdXQpCi0gICAgc2VsZi5Xcml0ZUxuKCclcyA9ICVzJyAlICh2YXJpYWJsZSwgJyAnLmpvaW4obWFwKFF1b3RlU3BhY2VzLCBvdXRwdXRzKSkpKQotICAgIGV4dHJhX291dHB1dHMuYXBwZW5kKCckKCVzKScgJSB2YXJpYWJsZSkKLSAgICBzZWxmLldyaXRlTG4oKQotCi0KLSAgZGVmIFdyaXRlTWFjQnVuZGxlUmVzb3VyY2VzKHNlbGYsIHJlc291cmNlcywgYnVuZGxlX2RlcHMpOgotICAgICIiIldyaXRlcyBNYWtlZmlsZSBjb2RlIGZvciAnbWFjX2J1bmRsZV9yZXNvdXJjZXMnLiIiIgotICAgIHNlbGYuV3JpdGVMbignIyMjIEdlbmVyYXRlZCBmb3IgbWFjX2J1bmRsZV9yZXNvdXJjZXMnKQotCi0gICAgZm9yIG91dHB1dCwgcmVzIGluIGd5cC54Y29kZV9lbXVsYXRpb24uR2V0TWFjQnVuZGxlUmVzb3VyY2VzKAotICAgICAgICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1BST0RVQ1RfRElSJ10sIHNlbGYueGNvZGVfc2V0dGluZ3MsCi0gICAgICAgIG1hcChTb3VyY2VpZnksIG1hcChzZWxmLkFic29sdXRpZnksIHJlc291cmNlcykpKToKLSAgICAgIHNlbGYuV3JpdGVEb0NtZChbb3V0cHV0XSwgW3Jlc10sICdtYWNfdG9vbCwsLGNvcHktYnVuZGxlLXJlc291cmNlJywKLSAgICAgICAgICAgICAgICAgICAgICBwYXJ0X29mX2FsbD1UcnVlKQotICAgICAgYnVuZGxlX2RlcHMuYXBwZW5kKG91dHB1dCkKLQotCi0gIGRlZiBXcml0ZU1hY0luZm9QbGlzdChzZWxmLCBidW5kbGVfZGVwcyk6Ci0gICAgIiIiV3JpdGUgTWFrZWZpbGUgY29kZSBmb3IgYnVuZGxlIEluZm8ucGxpc3QgZmlsZXMuIiIiCi0gICAgaW5mb19wbGlzdCwgb3V0LCBkZWZpbmVzLCBleHRyYV9lbnYgPSBneXAueGNvZGVfZW11bGF0aW9uLkdldE1hY0luZm9QbGlzdCgKLSAgICAgICAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddLCBzZWxmLnhjb2RlX3NldHRpbmdzLAotICAgICAgICBsYW1iZGEgcDogU291cmNlaWZ5KHNlbGYuQWJzb2x1dGlmeShwKSkpCi0gICAgaWYgbm90IGluZm9fcGxpc3Q6Ci0gICAgICByZXR1cm4KLSAgICBpZiBkZWZpbmVzOgotICAgICAgIyBDcmVhdGUgYW4gaW50ZXJtZWRpYXRlIGZpbGUgdG8gc3RvcmUgcHJlcHJvY2Vzc2VkIHJlc3VsdHMuCi0gICAgICBpbnRlcm1lZGlhdGVfcGxpc3QgPSAoJyQob2JqKS4kKFRPT0xTRVQpLyQoVEFSR0VUKS8nICsKLSAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGluZm9fcGxpc3QpKQotICAgICAgc2VsZi5Xcml0ZUxpc3QoZGVmaW5lcywgaW50ZXJtZWRpYXRlX3BsaXN0ICsgJzogSU5GT1BMSVNUX0RFRklORVMnLCAnLUQnLAotICAgICAgICAgIHF1b3Rlcj1Fc2NhcGVDcHBEZWZpbmUpCi0gICAgICBzZWxmLldyaXRlTWFrZVJ1bGUoW2ludGVybWVkaWF0ZV9wbGlzdF0sIFtpbmZvX3BsaXN0XSwKLSAgICAgICAgICBbJyQoY2FsbCBkb19jbWQsaW5mb3BsaXN0KScsCi0gICAgICAgICAgICMgIkNvbnZlcnQiIHRoZSBwbGlzdCBzbyB0aGF0IGFueSB3ZWlyZCB3aGl0ZXNwYWNlIGNoYW5nZXMgZnJvbSB0aGUKLSAgICAgICAgICAgIyBwcmVwcm9jZXNzb3IgZG8gbm90IGFmZmVjdCB0aGUgWE1MIHBhcnNlciBpbiBtYWNfdG9vbC4KLSAgICAgICAgICAgJ0BwbHV0aWwgLWNvbnZlcnQgeG1sMSAkQCAkQCddKQotICAgICAgaW5mb19wbGlzdCA9IGludGVybWVkaWF0ZV9wbGlzdAotICAgICMgcGxpc3RzIGNhbiBjb250YWluIGVudnZhcnMgYW5kIHN1YnN0aXR1dGUgdGhlbSBpbnRvIHRoZSBmaWxlLgotICAgIHNlbGYuV3JpdGVTb3J0ZWRYY29kZUVudigKLSAgICAgICAgb3V0LCBzZWxmLkdldFNvcnRlZFhjb2RlRW52KGFkZGl0aW9uYWxfc2V0dGluZ3M9ZXh0cmFfZW52KSkKLSAgICBzZWxmLldyaXRlRG9DbWQoW291dF0sIFtpbmZvX3BsaXN0XSwgJ21hY190b29sLCwsY29weS1pbmZvLXBsaXN0JywKLSAgICAgICAgICAgICAgICAgICAgcGFydF9vZl9hbGw9VHJ1ZSkKLSAgICBidW5kbGVfZGVwcy5hcHBlbmQob3V0KQotCi0KLSAgZGVmIFdyaXRlU291cmNlcyhzZWxmLCBjb25maWdzLCBkZXBzLCBzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgIGV4dHJhX291dHB1dHMsIGV4dHJhX2xpbmtfZGVwcywKLSAgICAgICAgICAgICAgICAgICBwYXJ0X29mX2FsbCwgcHJlY29tcGlsZWRfaGVhZGVyKToKLSAgICAiIiJXcml0ZSBNYWtlZmlsZSBjb2RlIGZvciBhbnkgJ3NvdXJjZXMnIGZyb20gdGhlIGd5cCBpbnB1dC4KLSAgICBUaGVzZSBhcmUgc291cmNlIGZpbGVzIG5lY2Vzc2FyeSB0byBidWlsZCB0aGUgY3VycmVudCB0YXJnZXQuCi0KLSAgICBjb25maWdzLCBkZXBzLCBzb3VyY2VzOiBpbnB1dCBmcm9tIGd5cC4KLSAgICBleHRyYV9vdXRwdXRzOiBhIGxpc3Qgb2YgZXh0cmEgb3V0cHV0cyB0aGlzIGFjdGlvbiBzaG91bGQgYmUgZGVwZW5kZW50IG9uOwotICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gc2VyaWFsaXplIGFjdGlvbi9ydWxlcyBiZWZvcmUgY29tcGlsYXRpb24KLSAgICBleHRyYV9saW5rX2RlcHM6IGEgbGlzdCB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggYW55IG91dHB1dHMgb2YKLSAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uICh0byBiZSB1c2VkIGluIGxpbmsgbGluZXMpCi0gICAgcGFydF9vZl9hbGw6IGZsYWcgaW5kaWNhdGluZyB0aGlzIHRhcmdldCBpcyBwYXJ0IG9mICdhbGwnCi0gICAgIiIiCi0KLSAgICAjIFdyaXRlIGNvbmZpZ3VyYXRpb24tc3BlY2lmaWMgdmFyaWFibGVzIGZvciBDRkxBR1MsIGV0Yy4KLSAgICBmb3IgY29uZmlnbmFtZSBpbiBzb3J0ZWQoY29uZmlncy5rZXlzKCkpOgotICAgICAgY29uZmlnID0gY29uZmlnc1tjb25maWduYW1lXQotICAgICAgc2VsZi5Xcml0ZUxpc3QoY29uZmlnLmdldCgnZGVmaW5lcycpLCAnREVGU18lcycgJSBjb25maWduYW1lLCBwcmVmaXg9Jy1EJywKLSAgICAgICAgICBxdW90ZXI9RXNjYXBlQ3BwRGVmaW5lKQotCi0gICAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgICAgY2ZsYWdzID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRDZmxhZ3MoY29uZmlnbmFtZSkKLSAgICAgICAgY2ZsYWdzX2MgPSBzZWxmLnhjb2RlX3NldHRpbmdzLkdldENmbGFnc0MoY29uZmlnbmFtZSkKLSAgICAgICAgY2ZsYWdzX2NjID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRDZmxhZ3NDQyhjb25maWduYW1lKQotICAgICAgICBjZmxhZ3Nfb2JqYyA9IHNlbGYueGNvZGVfc2V0dGluZ3MuR2V0Q2ZsYWdzT2JqQyhjb25maWduYW1lKQotICAgICAgICBjZmxhZ3Nfb2JqY2MgPSBzZWxmLnhjb2RlX3NldHRpbmdzLkdldENmbGFnc09iakNDKGNvbmZpZ25hbWUpCi0gICAgICBlbHNlOgotICAgICAgICBjZmxhZ3MgPSBjb25maWcuZ2V0KCdjZmxhZ3MnKQotICAgICAgICBjZmxhZ3NfYyA9IGNvbmZpZy5nZXQoJ2NmbGFnc19jJykKLSAgICAgICAgY2ZsYWdzX2NjID0gY29uZmlnLmdldCgnY2ZsYWdzX2NjJykKLQotICAgICAgc2VsZi5Xcml0ZUxuKCIjIEZsYWdzIHBhc3NlZCB0byBhbGwgc291cmNlIGZpbGVzLiIpOwotICAgICAgc2VsZi5Xcml0ZUxpc3QoY2ZsYWdzLCAnQ0ZMQUdTXyVzJyAlIGNvbmZpZ25hbWUpCi0gICAgICBzZWxmLldyaXRlTG4oIiMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgQyBmaWxlcy4iKTsKLSAgICAgIHNlbGYuV3JpdGVMaXN0KGNmbGFnc19jLCAnQ0ZMQUdTX0NfJXMnICUgY29uZmlnbmFtZSkKLSAgICAgIHNlbGYuV3JpdGVMbigiIyBGbGFncyBwYXNzZWQgdG8gb25seSBDKysgZmlsZXMuIik7Ci0gICAgICBzZWxmLldyaXRlTGlzdChjZmxhZ3NfY2MsICdDRkxBR1NfQ0NfJXMnICUgY29uZmlnbmFtZSkKLSAgICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnOgotICAgICAgICBzZWxmLldyaXRlTG4oIiMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgT2JqQyBmaWxlcy4iKTsKLSAgICAgICAgc2VsZi5Xcml0ZUxpc3QoY2ZsYWdzX29iamMsICdDRkxBR1NfT0JKQ18lcycgJSBjb25maWduYW1lKQotICAgICAgICBzZWxmLldyaXRlTG4oIiMgRmxhZ3MgcGFzc2VkIHRvIG9ubHkgT2JqQysrIGZpbGVzLiIpOwotICAgICAgICBzZWxmLldyaXRlTGlzdChjZmxhZ3Nfb2JqY2MsICdDRkxBR1NfT0JKQ0NfJXMnICUgY29uZmlnbmFtZSkKLSAgICAgIGluY2x1ZGVzID0gY29uZmlnLmdldCgnaW5jbHVkZV9kaXJzJykKLSAgICAgIGlmIGluY2x1ZGVzOgotICAgICAgICBpbmNsdWRlcyA9IG1hcChTb3VyY2VpZnksIG1hcChzZWxmLkFic29sdXRpZnksIGluY2x1ZGVzKSkKLSAgICAgIHNlbGYuV3JpdGVMaXN0KGluY2x1ZGVzLCAnSU5DU18lcycgJSBjb25maWduYW1lLCBwcmVmaXg9Jy1JJykKLQotICAgIGNvbXBpbGFibGUgPSBmaWx0ZXIoQ29tcGlsYWJsZSwgc291cmNlcykKLSAgICBvYmpzID0gbWFwKHNlbGYuT2JqZWN0aWZ5LCBtYXAoc2VsZi5BYnNvbHV0aWZ5LCBtYXAoVGFyZ2V0LCBjb21waWxhYmxlKSkpCi0gICAgc2VsZi5Xcml0ZUxpc3Qob2JqcywgJ09CSlMnKQotCi0gICAgZm9yIG9iaiBpbiBvYmpzOgotICAgICAgYXNzZXJ0ICcgJyBub3QgaW4gb2JqLCAoCi0gICAgICAgICAgIlNwYWNlcyBpbiBvYmplY3QgZmlsZW5hbWVzIG5vdCBzdXBwb3J0ZWQgKCVzKSIgICUgb2JqKQotICAgIHNlbGYuV3JpdGVMbignIyBBZGQgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgd2Ugc3BlY2lhbGx5IHRyYWNrICcKLSAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyBmb3IuJykKLSAgICBzZWxmLldyaXRlTG4oJ2FsbF9kZXBzICs9ICQoT0JKUyknKQotICAgIHNlbGYuV3JpdGVMbigpCi0KLSAgICAjIE1ha2Ugc3VyZSBvdXIgZGVwZW5kZW5jaWVzIGFyZSBidWlsdCBmaXJzdC4KLSAgICBpZiBkZXBzOgotICAgICAgc2VsZi5Xcml0ZU1ha2VSdWxlKFsnJChPQkpTKSddLCBkZXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAnTWFrZSBzdXJlIG91ciBkZXBlbmRlbmNpZXMgYXJlIGJ1aWx0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSBhbnkgb2YgdXMuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9vbmx5ID0gVHJ1ZSkKLQotICAgICMgTWFrZSBzdXJlIHRoZSBhY3Rpb25zIGFuZCBydWxlcyBydW4gZmlyc3QuCi0gICAgIyBJZiB0aGV5IGdlbmVyYXRlIGFueSBleHRyYSBoZWFkZXJzIGV0Yy4sIHRoZSBwZXItLm8gZmlsZSBkZXAgdHJhY2tpbmcKLSAgICAjIHdpbGwgY2F0Y2ggdGhlIHByb3BlciByZWJ1aWxkcywgc28gb3JkZXIgb25seSBpcyBzdGlsbCBvayBoZXJlLgotICAgIGlmIGV4dHJhX291dHB1dHM6Ci0gICAgICBzZWxmLldyaXRlTWFrZVJ1bGUoWyckKE9CSlMpJ10sIGV4dHJhX291dHB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9ICdNYWtlIHN1cmUgb3VyIGFjdGlvbnMvcnVsZXMgcnVuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZm9yZSBhbnkgb2YgdXMuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9vbmx5ID0gVHJ1ZSkKLQotICAgIHBjaGRlcHMgPSBwcmVjb21waWxlZF9oZWFkZXIuR2V0T2JqRGVwZW5kZW5jaWVzKGNvbXBpbGFibGUsIG9ianMgKQotICAgIGlmIHBjaGRlcHM6Ci0gICAgICBzZWxmLldyaXRlTG4oJyMgRGVwZW5kZW5jaWVzIGZyb20gb2JqIGZpbGVzIHRvIHRoZWlyIHByZWNvbXBpbGVkIGhlYWRlcnMnKQotICAgICAgZm9yIHNvdXJjZSwgb2JqLCBnY2ggaW4gcGNoZGVwczoKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCclczogJXMnICUgKG9iaiwgZ2NoKSkKLSAgICAgIHNlbGYuV3JpdGVMbignIyBFbmQgcHJlY29tcGlsZWQgaGVhZGVyIGRlcGVuZGVuY2llcycpCi0KLSAgICBpZiBvYmpzOgotICAgICAgZXh0cmFfbGlua19kZXBzLmFwcGVuZCgnJChPQkpTKScpCi0gICAgICBzZWxmLldyaXRlTG4oIiIiXAotIyBDRkxBR1MgZXQgYWwgb3ZlcnJpZGVzIG11c3QgYmUgdGFyZ2V0LWxvY2FsLgotIyBTZWUgIlRhcmdldC1zcGVjaWZpYyBWYXJpYWJsZSBWYWx1ZXMiIGluIHRoZSBHTlUgTWFrZSBtYW51YWwuIiIiKQotICAgICAgc2VsZi5Xcml0ZUxuKCIkKE9CSlMpOiBUT09MU0VUIDo9ICQoVE9PTFNFVCkiKQotICAgICAgc2VsZi5Xcml0ZUxuKCIkKE9CSlMpOiBHWVBfQ0ZMQUdTIDo9ICIKLSAgICAgICAgICAgICAgICAgICAiJChERUZTXyQoQlVJTERUWVBFKSkgIgotICAgICAgICAgICAgICAgICAgICIkKElOQ1NfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgIiVzICIgJSBwcmVjb21waWxlZF9oZWFkZXIuR2V0SW5jbHVkZSgnYycpICsKLSAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgIiQoQ0ZMQUdTX0NfJChCVUlMRFRZUEUpKSIpCi0gICAgICBzZWxmLldyaXRlTG4oIiQoT0JKUyk6IEdZUF9DWFhGTEFHUyA6PSAiCi0gICAgICAgICAgICAgICAgICAgIiQoREVGU18kKEJVSUxEVFlQRSkpICIKLSAgICAgICAgICAgICAgICAgICAiJChJTkNTXyQoQlVJTERUWVBFKSkgIgotICAgICAgICAgICAgICAgICAgICIlcyAiICUgcHJlY29tcGlsZWRfaGVhZGVyLkdldEluY2x1ZGUoJ2NjJykgKwotICAgICAgICAgICAgICAgICAgICIkKENGTEFHU18kKEJVSUxEVFlQRSkpICIKLSAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfQ0NfJChCVUlMRFRZUEUpKSIpCi0gICAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgICAgc2VsZi5Xcml0ZUxuKCIkKE9CSlMpOiBHWVBfT0JKQ0ZMQUdTIDo9ICIKLSAgICAgICAgICAgICAgICAgICAgICIkKERFRlNfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgICAiJChJTkNTXyQoQlVJTERUWVBFKSkgIgotICAgICAgICAgICAgICAgICAgICAgIiVzICIgJSBwcmVjb21waWxlZF9oZWFkZXIuR2V0SW5jbHVkZSgnbScpICsKLSAgICAgICAgICAgICAgICAgICAgICIkKENGTEFHU18kKEJVSUxEVFlQRSkpICIKLSAgICAgICAgICAgICAgICAgICAgICIkKENGTEFHU19DXyQoQlVJTERUWVBFKSkgIgotICAgICAgICAgICAgICAgICAgICAgIiQoQ0ZMQUdTX09CSkNfJChCVUlMRFRZUEUpKSIpCi0gICAgICAgIHNlbGYuV3JpdGVMbigiJChPQkpTKTogR1lQX09CSkNYWEZMQUdTIDo9ICIKLSAgICAgICAgICAgICAgICAgICAgICIkKERFRlNfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgICAiJChJTkNTXyQoQlVJTERUWVBFKSkgIgotICAgICAgICAgICAgICAgICAgICAgIiVzICIgJSBwcmVjb21waWxlZF9oZWFkZXIuR2V0SW5jbHVkZSgnbW0nKSArCi0gICAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfQ0NfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfT0JKQ0NfJChCVUlMRFRZUEUpKSIpCi0KLSAgICBzZWxmLldyaXRlUGNoVGFyZ2V0cyhwcmVjb21waWxlZF9oZWFkZXIuR2V0UGNoQnVpbGRDb21tYW5kcygpKQotCi0gICAgIyBJZiB0aGVyZSBhcmUgYW55IG9iamVjdCBmaWxlcyBpbiBvdXIgaW5wdXQgZmlsZSBsaXN0LCBsaW5rIHRoZW0gaW50byBvdXIKLSAgICAjIG91dHB1dC4KLSAgICBleHRyYV9saW5rX2RlcHMgKz0gZmlsdGVyKExpbmthYmxlLCBzb3VyY2VzKQotCi0gICAgc2VsZi5Xcml0ZUxuKCkKLQotICBkZWYgV3JpdGVQY2hUYXJnZXRzKHNlbGYsIHBjaF9jb21tYW5kcyk6Ci0gICAgIiIiV3JpdGVzIG1ha2UgcnVsZXMgdG8gY29tcGlsZSBwcmVmaXggaGVhZGVycy4iIiIKLSAgICBpZiBub3QgcGNoX2NvbW1hbmRzOgotICAgICAgcmV0dXJuCi0KLSAgICBmb3IgZ2NoLCBsYW5nX2ZsYWcsIGxhbmcsIGlucHV0IGluIHBjaF9jb21tYW5kczoKLSAgICAgIGV4dHJhX2ZsYWdzID0gewotICAgICAgICAnYyc6ICckKENGTEFHU19DXyQoQlVJTERUWVBFKSknLAotICAgICAgICAnY2MnOiAnJChDRkxBR1NfQ0NfJChCVUlMRFRZUEUpKScsCi0gICAgICAgICdtJzogJyQoQ0ZMQUdTX0NfJChCVUlMRFRZUEUpKSAkKENGTEFHU19PQkpDXyQoQlVJTERUWVBFKSknLAotICAgICAgICAnbW0nOiAnJChDRkxBR1NfQ0NfJChCVUlMRFRZUEUpKSAkKENGTEFHU19PQkpDQ18kKEJVSUxEVFlQRSkpJywKLSAgICAgIH1bbGFuZ10KLSAgICAgIHZhcl9uYW1lID0gewotICAgICAgICAnYyc6ICdHWVBfUENIX0NGTEFHUycsCi0gICAgICAgICdjYyc6ICdHWVBfUENIX0NYWEZMQUdTJywKLSAgICAgICAgJ20nOiAnR1lQX1BDSF9PQkpDRkxBR1MnLAotICAgICAgICAnbW0nOiAnR1lQX1BDSF9PQkpDWFhGTEFHUycsCi0gICAgICB9W2xhbmddCi0gICAgICBzZWxmLldyaXRlTG4oIiVzOiAlcyA6PSAlcyAiICUgKGdjaCwgdmFyX25hbWUsIGxhbmdfZmxhZykgKwotICAgICAgICAgICAgICAgICAgICIkKERFRlNfJChCVUlMRFRZUEUpKSAiCi0gICAgICAgICAgICAgICAgICAgIiQoSU5DU18kKEJVSUxEVFlQRSkpICIKLSAgICAgICAgICAgICAgICAgICAiJChDRkxBR1NfJChCVUlMRFRZUEUpKSAiICsKLSAgICAgICAgICAgICAgICAgICBleHRyYV9mbGFncykKLQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogJXMgRk9SQ0VfRE9fQ01EJyAlIChnY2gsIGlucHV0KSkKLSAgICAgIHNlbGYuV3JpdGVMbignXHRAJChjYWxsIGRvX2NtZCxwY2hfJXMsMSknICUgbGFuZykKLSAgICAgIHNlbGYuV3JpdGVMbignJykKLSAgICAgIGFzc2VydCAnICcgbm90IGluIGdjaCwgKAotICAgICAgICAgICJTcGFjZXMgaW4gZ2NoIGZpbGVuYW1lcyBub3Qgc3VwcG9ydGVkICglcykiICAlIGdjaCkKLSAgICAgIHNlbGYuV3JpdGVMbignYWxsX2RlcHMgKz0gJXMnICUgZ2NoKQotICAgICAgc2VsZi5Xcml0ZUxuKCcnKQotCi0KLSAgZGVmIENvbXB1dGVPdXRwdXRCYXNlbmFtZShzZWxmLCBzcGVjKToKLSAgICAiIiJSZXR1cm4gdGhlICdvdXRwdXQgYmFzZW5hbWUnIG9mIGEgZ3lwIHNwZWMuCi0KLSAgICBFLmcuLCB0aGUgbG9hZGFibGUgbW9kdWxlICdmb29iYXInIGluIGRpcmVjdG9yeSAnYmF6JyB3aWxsIHByb2R1Y2UKLSAgICAgICdsaWJmb29iYXIuc28nCi0gICAgIiIiCi0gICAgYXNzZXJ0IG5vdCBzZWxmLmlzX21hY19idW5kbGUKLQotICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnIGFuZCBzZWxmLnR5cGUgaW4gKAotICAgICAgICAnc3RhdGljX2xpYnJhcnknLCAnZXhlY3V0YWJsZScsICdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnKToKLSAgICAgIHJldHVybiBzZWxmLnhjb2RlX3NldHRpbmdzLkdldEV4ZWN1dGFibGVQYXRoKCkKLQotICAgIHRhcmdldCA9IHNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICB0YXJnZXRfcHJlZml4ID0gJycKLSAgICB0YXJnZXRfZXh0ID0gJycKLSAgICBpZiBzZWxmLnR5cGUgPT0gJ3N0YXRpY19saWJyYXJ5JzoKLSAgICAgIGlmIHRhcmdldFs6M10gPT0gJ2xpYic6Ci0gICAgICAgIHRhcmdldCA9IHRhcmdldFszOl0KLSAgICAgIHRhcmdldF9wcmVmaXggPSAnbGliJwotICAgICAgdGFyZ2V0X2V4dCA9ICcuYScKLSAgICBlbGlmIHNlbGYudHlwZSBpbiAoJ2xvYWRhYmxlX21vZHVsZScsICdzaGFyZWRfbGlicmFyeScpOgotICAgICAgaWYgdGFyZ2V0WzozXSA9PSAnbGliJzoKLSAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0WzM6XQotICAgICAgdGFyZ2V0X3ByZWZpeCA9ICdsaWInCi0gICAgICB0YXJnZXRfZXh0ID0gJy5zbycKLSAgICBlbGlmIHNlbGYudHlwZSA9PSAnbm9uZSc6Ci0gICAgICB0YXJnZXQgPSAnJXMuc3RhbXAnICUgdGFyZ2V0Ci0gICAgZWxpZiBzZWxmLnR5cGUgIT0gJ2V4ZWN1dGFibGUnOgotICAgICAgcHJpbnQgKCJFUlJPUjogV2hhdCBvdXRwdXQgZmlsZSBzaG91bGQgYmUgZ2VuZXJhdGVkPyIsCi0gICAgICAgICAgICAgInR5cGUiLCBzZWxmLnR5cGUsICJ0YXJnZXQiLCB0YXJnZXQpCi0KLSAgICB0YXJnZXRfcHJlZml4ID0gc3BlYy5nZXQoJ3Byb2R1Y3RfcHJlZml4JywgdGFyZ2V0X3ByZWZpeCkKLSAgICB0YXJnZXQgPSBzcGVjLmdldCgncHJvZHVjdF9uYW1lJywgdGFyZ2V0KQotICAgIHByb2R1Y3RfZXh0ID0gc3BlYy5nZXQoJ3Byb2R1Y3RfZXh0ZW5zaW9uJykKLSAgICBpZiBwcm9kdWN0X2V4dDoKLSAgICAgIHRhcmdldF9leHQgPSAnLicgKyBwcm9kdWN0X2V4dAotCi0gICAgcmV0dXJuIHRhcmdldF9wcmVmaXggKyB0YXJnZXQgKyB0YXJnZXRfZXh0Ci0KLQotICBkZWYgX0luc3RhbGxJbW1lZGlhdGVseShzZWxmKToKLSAgICByZXR1cm4gc2VsZi50b29sc2V0ID09ICd0YXJnZXQnIGFuZCBzZWxmLmZsYXZvciA9PSAnbWFjJyBhbmQgc2VsZi50eXBlIGluICgKLSAgICAgICAgICAnc3RhdGljX2xpYnJhcnknLCAnZXhlY3V0YWJsZScsICdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnKQotCi0KLSAgZGVmIENvbXB1dGVPdXRwdXQoc2VsZiwgc3BlYyk6Ci0gICAgIiIiUmV0dXJuIHRoZSAnb3V0cHV0JyAoZnVsbCBvdXRwdXQgcGF0aCkgb2YgYSBneXAgc3BlYy4KLQotICAgIEUuZy4sIHRoZSBsb2FkYWJsZSBtb2R1bGUgJ2Zvb2JhcicgaW4gZGlyZWN0b3J5ICdiYXonIHdpbGwgcHJvZHVjZQotICAgICAgJyQob2JqKS9iYXovbGliZm9vYmFyLnNvJwotICAgICIiIgotICAgIGFzc2VydCBub3Qgc2VsZi5pc19tYWNfYnVuZGxlCi0KLSAgICBwYXRoID0gb3MucGF0aC5qb2luKCckKG9iaikuJyArIHNlbGYudG9vbHNldCwgc2VsZi5wYXRoKQotICAgIGlmIHNlbGYudHlwZSA9PSAnZXhlY3V0YWJsZScgb3Igc2VsZi5fSW5zdGFsbEltbWVkaWF0ZWx5KCk6Ci0gICAgICBwYXRoID0gJyQoYnVpbGRkaXIpJwotICAgIHBhdGggPSBzcGVjLmdldCgncHJvZHVjdF9kaXInLCBwYXRoKQotICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocGF0aCwgc2VsZi5Db21wdXRlT3V0cHV0QmFzZW5hbWUoc3BlYykpCi0KLQotICBkZWYgQ29tcHV0ZU1hY0J1bmRsZU91dHB1dChzZWxmLCBzcGVjKToKLSAgICAiIiJSZXR1cm4gdGhlICdvdXRwdXQnIChmdWxsIG91dHB1dCBwYXRoKSB0byBhIGJ1bmRsZSBvdXRwdXQgZGlyZWN0b3J5LiIiIgotICAgIGFzc2VydCBzZWxmLmlzX21hY19idW5kbGUKLSAgICBwYXRoID0gZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBzZWxmLnhjb2RlX3NldHRpbmdzLkdldFdyYXBwZXJOYW1lKCkpCi0KLQotICBkZWYgQ29tcHV0ZU1hY0J1bmRsZUJpbmFyeU91dHB1dChzZWxmLCBzcGVjKToKLSAgICAiIiJSZXR1cm4gdGhlICdvdXRwdXQnIChmdWxsIG91dHB1dCBwYXRoKSB0byB0aGUgYmluYXJ5IGluIGEgYnVuZGxlLiIiIgotICAgIHBhdGggPSBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1BST0RVQ1RfRElSJ10KLSAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIHNlbGYueGNvZGVfc2V0dGluZ3MuR2V0RXhlY3V0YWJsZVBhdGgoKSkKLQotCi0gIGRlZiBDb21wdXRlRGVwcyhzZWxmLCBzcGVjKToKLSAgICAiIiJDb21wdXRlIHRoZSBkZXBlbmRlbmNpZXMgb2YgYSBneXAgc3BlYy4KLQotICAgIFJldHVybnMgYSB0dXBsZSAoZGVwcywgbGlua19kZXBzKSwgd2hlcmUgZWFjaCBpcyBhIGxpc3Qgb2YKLSAgICBmaWxlbmFtZXMgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcHV0IGluIGZyb250IG9mIG1ha2UgZm9yIGVpdGhlcgotICAgIGJ1aWxkaW5nIChkZXBzKSBvciBsaW5raW5nIChsaW5rX2RlcHMpLgotICAgICIiIgotICAgIGRlcHMgPSBbXQotICAgIGxpbmtfZGVwcyA9IFtdCi0gICAgaWYgJ2RlcGVuZGVuY2llcycgaW4gc3BlYzoKLSAgICAgIGRlcHMuZXh0ZW5kKFt0YXJnZXRfb3V0cHV0c1tkZXBdIGZvciBkZXAgaW4gc3BlY1snZGVwZW5kZW5jaWVzJ10KLSAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRfb3V0cHV0c1tkZXBdXSkKLSAgICAgIGZvciBkZXAgaW4gc3BlY1snZGVwZW5kZW5jaWVzJ106Ci0gICAgICAgIGlmIGRlcCBpbiB0YXJnZXRfbGlua19kZXBzOgotICAgICAgICAgIGxpbmtfZGVwcy5hcHBlbmQodGFyZ2V0X2xpbmtfZGVwc1tkZXBdKQotICAgICAgZGVwcy5leHRlbmQobGlua19kZXBzKQotICAgICAgIyBUT0RPOiBJdCBzZWVtcyB3ZSBuZWVkIHRvIHRyYW5zaXRpdmVseSBsaW5rIGluIGxpYnJhcmllcyAoZS5nLiAtbGZvbyk/Ci0gICAgICAjIFRoaXMgaGFjayBtYWtlcyBpdCB3b3JrOgotICAgICAgIyBsaW5rX2RlcHMuZXh0ZW5kKHNwZWMuZ2V0KCdsaWJyYXJpZXMnLCBbXSkpCi0gICAgcmV0dXJuIChneXAuY29tbW9uLnVuaXF1ZXIoZGVwcyksIGd5cC5jb21tb24udW5pcXVlcihsaW5rX2RlcHMpKQotCi0KLSAgZGVmIFdyaXRlRGVwZW5kZW5jeU9uRXh0cmFPdXRwdXRzKHNlbGYsIHRhcmdldCwgZXh0cmFfb3V0cHV0cyk6Ci0gICAgc2VsZi5Xcml0ZU1ha2VSdWxlKFtzZWxmLm91dHB1dF9iaW5hcnldLCBleHRyYV9vdXRwdXRzLAotICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gJ0J1aWxkIG91ciBzcGVjaWFsIG91dHB1dHMgZmlyc3QuJywKLSAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJfb25seSA9IFRydWUpCi0KLQotICBkZWYgV3JpdGVUYXJnZXQoc2VsZiwgc3BlYywgY29uZmlncywgZGVwcywgbGlua19kZXBzLCBidW5kbGVfZGVwcywKLSAgICAgICAgICAgICAgICAgIGV4dHJhX291dHB1dHMsIHBhcnRfb2ZfYWxsKToKLSAgICAiIiJXcml0ZSBNYWtlZmlsZSBjb2RlIHRvIHByb2R1Y2UgdGhlIGZpbmFsIHRhcmdldCBvZiB0aGUgZ3lwIHNwZWMuCi0KLSAgICBzcGVjLCBjb25maWdzOiBpbnB1dCBmcm9tIGd5cC4KLSAgICBkZXBzLCBsaW5rX2RlcHM6IGRlcGVuZGVuY3kgbGlzdHM7IHNlZSBDb21wdXRlRGVwcygpCi0gICAgZXh0cmFfb3V0cHV0czogYW55IGV4dHJhIG91dHB1dHMgdGhhdCBvdXIgdGFyZ2V0IHNob3VsZCBkZXBlbmQgb24KLSAgICBwYXJ0X29mX2FsbDogZmxhZyBpbmRpY2F0aW5nIHRoaXMgdGFyZ2V0IGlzIHBhcnQgb2YgJ2FsbCcKLSAgICAiIiIKLQotICAgIHNlbGYuV3JpdGVMbignIyMjIFJ1bGVzIGZvciBmaW5hbCB0YXJnZXQuJykKLQotICAgIGlmIGV4dHJhX291dHB1dHM6Ci0gICAgICBzZWxmLldyaXRlRGVwZW5kZW5jeU9uRXh0cmFPdXRwdXRzKHNlbGYub3V0cHV0X2JpbmFyeSwgZXh0cmFfb3V0cHV0cykKLSAgICAgIHNlbGYuV3JpdGVNYWtlUnVsZShleHRyYV9vdXRwdXRzLCBkZXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ9KCdQcmVzZXJ2ZSBvcmRlciBkZXBlbmRlbmN5IG9mICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lhbCBvdXRwdXQgb24gZGVwcy4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9vbmx5ID0gVHJ1ZSkKLQotICAgIHRhcmdldF9wb3N0YnVpbGRzID0ge30KLSAgICBpZiBzZWxmLnR5cGUgIT0gJ25vbmUnOgotICAgICAgZm9yIGNvbmZpZ25hbWUgaW4gc29ydGVkKGNvbmZpZ3Mua2V5cygpKToKLSAgICAgICAgY29uZmlnID0gY29uZmlnc1tjb25maWduYW1lXQotICAgICAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgICAgICBsZGZsYWdzID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRMZGZsYWdzKGNvbmZpZ25hbWUsCi0gICAgICAgICAgICAgIGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snUFJPRFVDVF9ESVInXSwKLSAgICAgICAgICAgICAgbGFtYmRhIHA6IFNvdXJjZWlmeShzZWxmLkFic29sdXRpZnkocCkpKQotCi0gICAgICAgICAgIyBUQVJHRVRfUE9TVEJVSUxEU18kKEJVSUxEVFlQRSkgaXMgYWRkZWQgdG8gcG9zdGJ1aWxkcyBsYXRlciBvbi4KLSAgICAgICAgICBneXBfdG9fYnVpbGQgPSBJbnZlcnRSZWxhdGl2ZVBhdGgoc2VsZi5wYXRoKQotICAgICAgICAgIHRhcmdldF9wb3N0YnVpbGQgPSBzZWxmLnhjb2RlX3NldHRpbmdzLkdldFRhcmdldFBvc3RidWlsZHMoCi0gICAgICAgICAgICAgIGNvbmZpZ25hbWUsCi0gICAgICAgICAgICAgIFF1b3RlU3BhY2VzKG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGd5cF90b19idWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXQpKSksCi0gICAgICAgICAgICAgIFF1b3RlU3BhY2VzKG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGd5cF90b19idWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRwdXRfYmluYXJ5KSkpKQotICAgICAgICAgIGlmIHRhcmdldF9wb3N0YnVpbGQ6Ci0gICAgICAgICAgICB0YXJnZXRfcG9zdGJ1aWxkc1tjb25maWduYW1lXSA9IHRhcmdldF9wb3N0YnVpbGQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBsZGZsYWdzID0gY29uZmlnLmdldCgnbGRmbGFncycsIFtdKQotICAgICAgICAgICMgQ29tcHV0ZSBhbiBycGF0aCBmb3IgdGhpcyBvdXRwdXQgaWYgbmVlZGVkLgotICAgICAgICAgIGlmIGFueShkZXAuZW5kc3dpdGgoJy5zbycpIGZvciBkZXAgaW4gZGVwcyk6Ci0gICAgICAgICAgICAjIFdlIHdhbnQgdG8gZ2V0IHRoZSBsaXRlcmFsIHN0cmluZyAiJE9SSUdJTiIgaW50byB0aGUgbGluayBjb21tYW5kLAotICAgICAgICAgICAgIyBzbyB3ZSBuZWVkIGxvdHMgb2YgZXNjYXBpbmcuCi0gICAgICAgICAgICBsZGZsYWdzLmFwcGVuZChyJy1XbCwtcnBhdGg9XCQkT1JJR0lOL2xpYi4lcy8nICUgc2VsZi50b29sc2V0KQotICAgICAgICAgICAgbGRmbGFncy5hcHBlbmQocictV2wsLXJwYXRoLWxpbms9XCQoYnVpbGRkaXIpL2xpYi4lcy8nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9vbHNldCkKLSAgICAgICAgc2VsZi5Xcml0ZUxpc3QobGRmbGFncywgJ0xERkxBR1NfJXMnICUgY29uZmlnbmFtZSkKLSAgICAgICAgaWYgc2VsZi5mbGF2b3IgPT0gJ21hYyc6Ci0gICAgICAgICAgc2VsZi5Xcml0ZUxpc3Qoc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRMaWJ0b29sZmxhZ3MoY29uZmlnbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0xJQlRPT0xGTEFHU18lcycgJSBjb25maWduYW1lKQotICAgICAgbGlicmFyaWVzID0gc3BlYy5nZXQoJ2xpYnJhcmllcycpCi0gICAgICBpZiBsaWJyYXJpZXM6Ci0gICAgICAgICMgUmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzCi0gICAgICAgIGxpYnJhcmllcyA9IGd5cC5jb21tb24udW5pcXVlcihsaWJyYXJpZXMpCi0gICAgICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnOgotICAgICAgICAgIGxpYnJhcmllcyA9IHNlbGYueGNvZGVfc2V0dGluZ3MuQWRqdXN0TGlicmFyaWVzKGxpYnJhcmllcykKLSAgICAgIHNlbGYuV3JpdGVMaXN0KGxpYnJhcmllcywgJ0xJQlMnKQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogR1lQX0xERkxBR1MgOj0gJChMREZMQUdTXyQoQlVJTERUWVBFKSknICUKLSAgICAgICAgICBRdW90ZVNwYWNlcyhzZWxmLm91dHB1dF9iaW5hcnkpKQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogTElCUyA6PSAkKExJQlMpJyAlIFF1b3RlU3BhY2VzKHNlbGYub3V0cHV0X2JpbmFyeSkpCi0KLSAgICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnOgotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiBHWVBfTElCVE9PTEZMQUdTIDo9ICQoTElCVE9PTEZMQUdTXyQoQlVJTERUWVBFKSknICUKLSAgICAgICAgICAgIFF1b3RlU3BhY2VzKHNlbGYub3V0cHV0X2JpbmFyeSkpCi0KLSAgICAjIFBvc3RidWlsZCBhY3Rpb25zLiBMaWtlIGFjdGlvbnMsIGJ1dCBpbXBsaWNpdGx5IGRlcGVuZCBvbiB0aGUgdGFyZ2V0J3MKLSAgICAjIG91dHB1dC4KLSAgICBwb3N0YnVpbGRzID0gW10KLSAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgIGlmIHRhcmdldF9wb3N0YnVpbGRzOgotICAgICAgICBwb3N0YnVpbGRzLmFwcGVuZCgnJChUQVJHRVRfUE9TVEJVSUxEU18kKEJVSUxEVFlQRSkpJykKLSAgICAgIHBvc3RidWlsZHMuZXh0ZW5kKAotICAgICAgICAgIGd5cC54Y29kZV9lbXVsYXRpb24uR2V0U3BlY1Bvc3RidWlsZENvbW1hbmRzKHNwZWMpKQotCi0gICAgaWYgcG9zdGJ1aWxkczoKLSAgICAgICMgRW52dmFycyBtYXkgYmUgcmVmZXJlbmNlZCBieSBUQVJHRVRfUE9TVEJVSUxEU18kKEJVSUxEVFlQRSksCi0gICAgICAjIHNvIHdlIG11c3Qgb3V0cHV0IGl0cyBkZWZpbml0aW9uIGZpcnN0LCBzaW5jZSB3ZSBkZWNsYXJlIHZhcmlhYmxlcwotICAgICAgIyB1c2luZyAiOj0iLgotICAgICAgc2VsZi5Xcml0ZVNvcnRlZFhjb2RlRW52KHNlbGYub3V0cHV0LCBzZWxmLkdldFNvcnRlZFhjb2RlUG9zdGJ1aWxkRW52KCkpCi0KLSAgICAgIGZvciBjb25maWduYW1lIGluIHRhcmdldF9wb3N0YnVpbGRzOgotICAgICAgICBzZWxmLldyaXRlTG4oJyVzOiBUQVJHRVRfUE9TVEJVSUxEU18lcyA6PSAlcycgJQotICAgICAgICAgICAgKFF1b3RlU3BhY2VzKHNlbGYub3V0cHV0KSwKLSAgICAgICAgICAgICBjb25maWduYW1lLAotICAgICAgICAgICAgIGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbExpc3QodGFyZ2V0X3Bvc3RidWlsZHNbY29uZmlnbmFtZV0pKSkKLQotICAgICAgIyBQb3N0YnVpbGRzIGV4cGVjdCB0byBiZSBydW4gaW4gdGhlIGd5cCBmaWxlJ3MgZGlyZWN0b3J5LCBzbyBpbnNlcnQgYW4KLSAgICAgICMgaW1wbGljaXQgcG9zdGJ1aWxkIHRvIGNkIHRvIHRoZXJlLgotICAgICAgcG9zdGJ1aWxkcy5pbnNlcnQoMCwgZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChbJ2NkJywgc2VsZi5wYXRoXSkpCi0gICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHBvc3RidWlsZHMpKToKLSAgICAgICAgaWYgbm90IHBvc3RidWlsZHNbaV0uc3RhcnRzd2l0aCgnJCcpOgotICAgICAgICAgIHBvc3RidWlsZHNbaV0gPSBFc2NhcGVTaGVsbEFyZ3VtZW50KHBvc3RidWlsZHNbaV0pCi0gICAgICBzZWxmLldyaXRlTG4oJyVzOiBidWlsZGRpciA6PSAkKGFic19idWlsZGRpciknICUgUXVvdGVTcGFjZXMoc2VsZi5vdXRwdXQpKQotICAgICAgc2VsZi5Xcml0ZUxuKCclczogUE9TVEJVSUxEUyA6PSAlcycgJSAoCi0gICAgICAgICAgUXVvdGVTcGFjZXMoc2VsZi5vdXRwdXQpLCAnICcuam9pbihwb3N0YnVpbGRzKSkpCi0KLSAgICAjIEEgYnVuZGxlIGRpcmVjdG9yeSBkZXBlbmRzIG9uIGl0cyBkZXBlbmRlbmNpZXMgc3VjaCBhcyBidW5kbGUgcmVzb3VyY2VzCi0gICAgIyBhbmQgYnVuZGxlIGJpbmFyeS4gV2hlbiBhbGwgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBidWlsdCwgdGhlIGJ1bmRsZQotICAgICMgbmVlZHMgdG8gYmUgcGFja2FnZWQuCi0gICAgaWYgc2VsZi5pc19tYWNfYnVuZGxlOgotICAgICAgIyBJZiB0aGUgZnJhbWV3b3JrIGRvZXNuJ3QgY29udGFpbiBhIGJpbmFyeSwgdGhlbiBub3RoaW5nIGRlcGVuZHMKLSAgICAgICMgb24gdGhlIGFjdGlvbnMgLS0gbWFrZSB0aGUgZnJhbWV3b3JrIGRlcGVuZCBvbiB0aGVtIGRpcmVjdGx5IHRvby4KLSAgICAgIHNlbGYuV3JpdGVEZXBlbmRlbmN5T25FeHRyYU91dHB1dHMoc2VsZi5vdXRwdXQsIGV4dHJhX291dHB1dHMpCi0KLSAgICAgICMgQnVuZGxlIGRlcGVuZGVuY2llcy4gTm90ZSB0aGF0IHRoZSBjb2RlIGJlbG93IGFkZHMgYWN0aW9ucyB0byB0aGlzCi0gICAgICAjIHRhcmdldCwgc28gaWYgeW91IG1vdmUgdGhlc2UgdHdvIGxpbmVzLCBtb3ZlIHRoZSBsaW5lcyBiZWxvdyBhcyB3ZWxsLgotICAgICAgc2VsZi5Xcml0ZUxpc3QobWFwKFF1b3RlU3BhY2VzLCBidW5kbGVfZGVwcyksICdCVU5ETEVfREVQUycpCi0gICAgICBzZWxmLldyaXRlTG4oJyVzOiAkKEJVTkRMRV9ERVBTKScgJSBRdW90ZVNwYWNlcyhzZWxmLm91dHB1dCkpCi0KLSAgICAgICMgQWZ0ZXIgdGhlIGZyYW1ld29yayBpcyBidWlsdCwgcGFja2FnZSBpdC4gTmVlZHMgdG8gaGFwcGVuIGJlZm9yZQotICAgICAgIyBwb3N0YnVpbGRzLCBzaW5jZSBwb3N0YnVpbGRzIGRlcGVuZCBvbiB0aGlzLgotICAgICAgaWYgc2VsZi50eXBlIGluICgnc2hhcmVkX2xpYnJhcnknLCAnbG9hZGFibGVfbW9kdWxlJyk6Ci0gICAgICAgIHNlbGYuV3JpdGVMbignXHRAJChjYWxsIGRvX2NtZCxtYWNfcGFja2FnZV9mcmFtZXdvcmssLCwlcyknICUKLSAgICAgICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MuR2V0RnJhbWV3b3JrVmVyc2lvbigpKQotCi0gICAgICAjIEJ1bmRsZSBwb3N0YnVpbGRzIGNhbiBkZXBlbmQgb24gdGhlIHdob2xlIGJ1bmRsZSwgc28gcnVuIHRoZW0gYWZ0ZXIKLSAgICAgICMgdGhlIGJ1bmRsZSBpcyBwYWNrYWdlZCwgbm90IGFscmVhZHkgYWZ0ZXIgdGhlIGJ1bmRsZSBiaW5hcnkgaXMgZG9uZS4KLSAgICAgIGlmIHBvc3RidWlsZHM6Ci0gICAgICAgIHNlbGYuV3JpdGVMbignXHRAJChjYWxsIGRvX3Bvc3RidWlsZHMpJykKLSAgICAgIHBvc3RidWlsZHMgPSBbXSAgIyBEb24ndCB3cml0ZSBwb3N0YnVpbGRzIGZvciB0YXJnZXQncyBvdXRwdXQuCi0KLSAgICAgICMgTmVlZGVkIGJ5IHRlc3QvbWFjL2d5cHRlc3QtcmVidWlsZC5weS4KLSAgICAgIHNlbGYuV3JpdGVMbignXHRAdHJ1ZSAgIyBOby1vcCwgdXNlZCBieSB0ZXN0cycpCi0KLSAgICAgICMgU2luY2UgdGhpcyB0YXJnZXQgZGVwZW5kcyBvbiBiaW5hcnkgYW5kIHJlc291cmNlcyB3aGljaCBhcmUgaW4KLSAgICAgICMgbmVzdGVkIHN1YmZvbGRlcnMsIHRoZSBmcmFtZXdvcmsgZGlyZWN0b3J5IHdpbGwgYmUgb2xkZXIgdGhhbgotICAgICAgIyBpdHMgZGVwZW5kZW5jaWVzIHVzdWFsbHkuIFRvIHByZXZlbnQgdGhpcyBydWxlIGZyb20gZXhlY3V0aW5nCi0gICAgICAjIG9uIGV2ZXJ5IGJ1aWxkIChleHBlbnNpdmUsIGVzcGVjaWFsbHkgd2l0aCBwb3N0YnVpbGRzKSwgZXhwbGljbGl0eQotICAgICAgIyB1cGRhdGUgdGhlIHRpbWUgb24gdGhlIGZyYW1ld29yayBkaXJlY3RvcnkuCi0gICAgICBzZWxmLldyaXRlTG4oJ1x0QHRvdWNoIC1jICVzJyAlIFF1b3RlU3BhY2VzKHNlbGYub3V0cHV0KSkKLQotICAgIGlmIHBvc3RidWlsZHM6Ci0gICAgICBhc3NlcnQgbm90IHNlbGYuaXNfbWFjX2J1bmRsZSwgKCdQb3N0YnVpbGRzIGZvciBidW5kbGVzIHNob3VsZCBiZSBkb25lICcKLSAgICAgICAgICAnb24gdGhlIGJ1bmRsZSwgbm90IHRoZSBiaW5hcnkgKHRhcmdldCBcJyVzXCcpJyAlIHNlbGYudGFyZ2V0KQotICAgICAgYXNzZXJ0ICdwcm9kdWN0X2Rpcicgbm90IGluIHNwZWMsICgnUG9zdGJ1aWxkcyBkbyBub3Qgd29yayB3aXRoICcKLSAgICAgICAgICAnY3VzdG9tIHByb2R1Y3RfZGlyJykKLQotICAgIGlmIHNlbGYudHlwZSA9PSAnZXhlY3V0YWJsZSc6Ci0gICAgICBzZWxmLldyaXRlTG4oJyVzOiBMRF9JTlBVVFMgOj0gJXMnICUgKAotICAgICAgICAgIFF1b3RlU3BhY2VzKHNlbGYub3V0cHV0X2JpbmFyeSksCi0gICAgICAgICAgJyAnLmpvaW4obWFwKFF1b3RlU3BhY2VzLCBsaW5rX2RlcHMpKSkpCi0gICAgICBpZiBzZWxmLnRvb2xzZXQgPT0gJ2hvc3QnIGFuZCBzZWxmLmZsYXZvciA9PSAnYW5kcm9pZCc6Ci0gICAgICAgIHNlbGYuV3JpdGVEb0NtZChbc2VsZi5vdXRwdXRfYmluYXJ5XSwgbGlua19kZXBzLCAnbGlua19ob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRfb2ZfYWxsLCBwb3N0YnVpbGRzPXBvc3RidWlsZHMpCi0gICAgICBlbHNlOgotICAgICAgICBzZWxmLldyaXRlRG9DbWQoW3NlbGYub3V0cHV0X2JpbmFyeV0sIGxpbmtfZGVwcywgJ2xpbmsnLCBwYXJ0X29mX2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RidWlsZHM9cG9zdGJ1aWxkcykKLQotICAgIGVsaWYgc2VsZi50eXBlID09ICdzdGF0aWNfbGlicmFyeSc6Ci0gICAgICBmb3IgbGlua19kZXAgaW4gbGlua19kZXBzOgotICAgICAgICBhc3NlcnQgJyAnIG5vdCBpbiBsaW5rX2RlcCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBhbGluayBpbnB1dCBmaWxlbmFtZXMgbm90IHN1cHBvcnRlZCAoJXMpIiAgJSBsaW5rX2RlcCkKLSAgICAgIGlmIChzZWxmLmZsYXZvciBub3QgaW4gKCdtYWMnLCAnd2luJykgYW5kIG5vdAotICAgICAgICAgIHNlbGYuaXNfc3RhbmRhbG9uZV9zdGF0aWNfbGlicmFyeSk6Ci0gICAgICAgIHNlbGYuV3JpdGVEb0NtZChbc2VsZi5vdXRwdXRfYmluYXJ5XSwgbGlua19kZXBzLCAnYWxpbmtfdGhpbicsCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0X29mX2FsbCwgcG9zdGJ1aWxkcz1wb3N0YnVpbGRzKQotICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5Xcml0ZURvQ21kKFtzZWxmLm91dHB1dF9iaW5hcnldLCBsaW5rX2RlcHMsICdhbGluaycsIHBhcnRfb2ZfYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGJ1aWxkcz1wb3N0YnVpbGRzKQotICAgIGVsaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICBzZWxmLldyaXRlTG4oJyVzOiBMRF9JTlBVVFMgOj0gJXMnICUgKAotICAgICAgICAgICAgUXVvdGVTcGFjZXMoc2VsZi5vdXRwdXRfYmluYXJ5KSwKLSAgICAgICAgICAgICcgJy5qb2luKG1hcChRdW90ZVNwYWNlcywgbGlua19kZXBzKSkpKQotICAgICAgc2VsZi5Xcml0ZURvQ21kKFtzZWxmLm91dHB1dF9iaW5hcnldLCBsaW5rX2RlcHMsICdzb2xpbmsnLCBwYXJ0X29mX2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICBwb3N0YnVpbGRzPXBvc3RidWlsZHMpCi0gICAgZWxpZiBzZWxmLnR5cGUgPT0gJ2xvYWRhYmxlX21vZHVsZSc6Ci0gICAgICBmb3IgbGlua19kZXAgaW4gbGlua19kZXBzOgotICAgICAgICBhc3NlcnQgJyAnIG5vdCBpbiBsaW5rX2RlcCwgKAotICAgICAgICAgICAgIlNwYWNlcyBpbiBtb2R1bGUgaW5wdXQgZmlsZW5hbWVzIG5vdCBzdXBwb3J0ZWQgKCVzKSIgICUgbGlua19kZXApCi0gICAgICBpZiBzZWxmLnRvb2xzZXQgPT0gJ2hvc3QnIGFuZCBzZWxmLmZsYXZvciA9PSAnYW5kcm9pZCc6Ci0gICAgICAgIHNlbGYuV3JpdGVEb0NtZChbc2VsZi5vdXRwdXRfYmluYXJ5XSwgbGlua19kZXBzLCAnc29saW5rX21vZHVsZV9ob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRfb2ZfYWxsLCBwb3N0YnVpbGRzPXBvc3RidWlsZHMpCi0gICAgICBlbHNlOgotICAgICAgICBzZWxmLldyaXRlRG9DbWQoCi0gICAgICAgICAgICBbc2VsZi5vdXRwdXRfYmluYXJ5XSwgbGlua19kZXBzLCAnc29saW5rX21vZHVsZScsIHBhcnRfb2ZfYWxsLAotICAgICAgICAgICAgcG9zdGJ1aWxkcz1wb3N0YnVpbGRzKQotICAgIGVsaWYgc2VsZi50eXBlID09ICdub25lJzoKLSAgICAgICMgV3JpdGUgYSBzdGFtcCBsaW5lLgotICAgICAgc2VsZi5Xcml0ZURvQ21kKFtzZWxmLm91dHB1dF9iaW5hcnldLCBkZXBzLCAndG91Y2gnLCBwYXJ0X29mX2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICBwb3N0YnVpbGRzPXBvc3RidWlsZHMpCi0gICAgZWxzZToKLSAgICAgIHByaW50ICJXQVJOSU5HOiBubyBvdXRwdXQgZm9yIiwgc2VsZi50eXBlLCB0YXJnZXQKLQotICAgICMgQWRkIGFuIGFsaWFzIGZvciBlYWNoIHRhcmdldCAoaWYgdGhlcmUgYXJlIGFueSBvdXRwdXRzKS4KLSAgICAjIEluc3RhbGxhYmxlIHRhcmdldCBhbGlhc2VzIGFyZSBjcmVhdGVkIGJlbG93LgotICAgIGlmICgoc2VsZi5vdXRwdXQgYW5kIHNlbGYub3V0cHV0ICE9IHNlbGYudGFyZ2V0KSBhbmQKLSAgICAgICAgKHNlbGYudHlwZSBub3QgaW4gc2VsZi5fSU5TVEFMTEFCTEVfVEFSR0VUUykpOgotICAgICAgc2VsZi5Xcml0ZU1ha2VSdWxlKFtzZWxmLnRhcmdldF0sIFtzZWxmLm91dHB1dF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudD0nQWRkIHRhcmdldCBhbGlhcycsIHBob255ID0gVHJ1ZSkKLSAgICAgIGlmIHBhcnRfb2ZfYWxsOgotICAgICAgICBzZWxmLldyaXRlTWFrZVJ1bGUoWydhbGwnXSwgW3NlbGYudGFyZ2V0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAnQWRkIHRhcmdldCBhbGlhcyB0byAiYWxsIiB0YXJnZXQuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob255ID0gVHJ1ZSkKLQotICAgICMgQWRkIHNwZWNpYWwtY2FzZSBydWxlcyBmb3Igb3VyIGluc3RhbGxhYmxlIHRhcmdldHMuCi0gICAgIyAxKSBUaGV5IG5lZWQgdG8gaW5zdGFsbCB0byB0aGUgYnVpbGQgZGlyIG9yICJwcm9kdWN0IiBkaXIuCi0gICAgIyAyKSBUaGV5IGdldCBzaG9ydGN1dHMgZm9yIGJ1aWxkaW5nIChlLmcuICJtYWtlIGNocm9tZSIpLgotICAgICMgMykgVGhleSBhcmUgcGFydCBvZiAibWFrZSBhbGwiLgotICAgIGlmIChzZWxmLnR5cGUgaW4gc2VsZi5fSU5TVEFMTEFCTEVfVEFSR0VUUyBvcgotICAgICAgICBzZWxmLmlzX3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnkpOgotICAgICAgaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICAgIGZpbGVfZGVzYyA9ICdzaGFyZWQgbGlicmFyeScKLSAgICAgIGVsaWYgc2VsZi50eXBlID09ICdzdGF0aWNfbGlicmFyeSc6Ci0gICAgICAgIGZpbGVfZGVzYyA9ICdzdGF0aWMgbGlicmFyeScKLSAgICAgIGVsc2U6Ci0gICAgICAgIGZpbGVfZGVzYyA9ICdleGVjdXRhYmxlJwotICAgICAgaW5zdGFsbF9wYXRoID0gc2VsZi5fSW5zdGFsbGFibGVUYXJnZXRJbnN0YWxsUGF0aCgpCi0gICAgICBpbnN0YWxsYWJsZV9kZXBzID0gW3NlbGYub3V0cHV0XQotICAgICAgaWYgKHNlbGYuZmxhdm9yID09ICdtYWMnIGFuZCBub3QgJ3Byb2R1Y3RfZGlyJyBpbiBzcGVjIGFuZAotICAgICAgICAgIHNlbGYudG9vbHNldCA9PSAndGFyZ2V0Jyk6Ci0gICAgICAgICMgT24gbWFjLCBwcm9kdWN0cyBhcmUgY3JlYXRlZCBpbiBpbnN0YWxsX3BhdGggaW1tZWRpYXRlbHkuCi0gICAgICAgIGFzc2VydCBpbnN0YWxsX3BhdGggPT0gc2VsZi5vdXRwdXQsICclcyAhPSAlcycgJSAoCi0gICAgICAgICAgICBpbnN0YWxsX3BhdGgsIHNlbGYub3V0cHV0KQotCi0gICAgICAjIFBvaW50IHRoZSB0YXJnZXQgYWxpYXMgdG8gdGhlIGZpbmFsIGJpbmFyeSBvdXRwdXQuCi0gICAgICBzZWxmLldyaXRlTWFrZVJ1bGUoW3NlbGYudGFyZ2V0XSwgW2luc3RhbGxfcGF0aF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudD0nQWRkIHRhcmdldCBhbGlhcycsIHBob255ID0gVHJ1ZSkKLSAgICAgIGlmIGluc3RhbGxfcGF0aCAhPSBzZWxmLm91dHB1dDoKLSAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlzX21hY19idW5kbGUgICMgU2VlIGNvbW1lbnQgYSBmZXcgbGluZXMgYWJvdmUuCi0gICAgICAgIHNlbGYuV3JpdGVEb0NtZChbaW5zdGFsbF9wYXRoXSwgW3NlbGYub3V0cHV0XSwgJ2NvcHknLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9ICdDb3B5IHRoaXMgdG8gdGhlICVzIG91dHB1dCBwYXRoLicgJQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9kZXNjLCBwYXJ0X29mX2FsbD1wYXJ0X29mX2FsbCkKLSAgICAgICAgaW5zdGFsbGFibGVfZGVwcy5hcHBlbmQoaW5zdGFsbF9wYXRoKQotICAgICAgaWYgc2VsZi5vdXRwdXQgIT0gc2VsZi5hbGlhcyBhbmQgc2VsZi5hbGlhcyAhPSBzZWxmLnRhcmdldDoKLSAgICAgICAgc2VsZi5Xcml0ZU1ha2VSdWxlKFtzZWxmLmFsaWFzXSwgaW5zdGFsbGFibGVfZGVwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAnU2hvcnQgYWxpYXMgZm9yIGJ1aWxkaW5nIHRoaXMgJXMuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2Rlc2MsIHBob255ID0gVHJ1ZSkKLSAgICAgIGlmIHBhcnRfb2ZfYWxsOgotICAgICAgICBzZWxmLldyaXRlTWFrZVJ1bGUoWydhbGwnXSwgW2luc3RhbGxfcGF0aF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gJ0FkZCAlcyB0byAiYWxsIiB0YXJnZXQuJyAlIGZpbGVfZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob255ID0gVHJ1ZSkKLQotCi0gIGRlZiBXcml0ZUxpc3Qoc2VsZiwgdmFsdWVfbGlzdCwgdmFyaWFibGU9Tm9uZSwgcHJlZml4PScnLAotICAgICAgICAgICAgICAgIHF1b3Rlcj1RdW90ZUlmTmVjZXNzYXJ5KToKLSAgICAiIiJXcml0ZSBhIHZhcmlhYmxlIGRlZmluaXRpb24gdGhhdCBpcyBhIGxpc3Qgb2YgdmFsdWVzLgotCi0gICAgRS5nLiBXcml0ZUxpc3QoWydhJywnYiddLCAnZm9vJywgcHJlZml4PSdibGFoJykgd3JpdGVzIG91dAotICAgICAgICAgZm9vID0gYmxhaGEgYmxhaGIKLSAgICBidXQgaW4gYSBwcmV0dHktcHJpbnRlZCBzdHlsZS4KLSAgICAiIiIKLSAgICB2YWx1ZXMgPSAnJwotICAgIGlmIHZhbHVlX2xpc3Q6Ci0gICAgICB2YWx1ZV9saXN0ID0gW3F1b3RlcihwcmVmaXggKyBsKSBmb3IgbCBpbiB2YWx1ZV9saXN0XQotICAgICAgdmFsdWVzID0gJyBcXFxuXHQnICsgJyBcXFxuXHQnLmpvaW4odmFsdWVfbGlzdCkKLSAgICBzZWxmLmZwLndyaXRlKCclcyA6PSVzXG5cbicgJSAodmFyaWFibGUsIHZhbHVlcykpCi0KLQotICBkZWYgV3JpdGVEb0NtZChzZWxmLCBvdXRwdXRzLCBpbnB1dHMsIGNvbW1hbmQsIHBhcnRfb2ZfYWxsLCBjb21tZW50PU5vbmUsCi0gICAgICAgICAgICAgICAgIHBvc3RidWlsZHM9RmFsc2UpOgotICAgICIiIldyaXRlIGEgTWFrZWZpbGUgcnVsZSB0aGF0IHVzZXMgZG9fY21kLgotCi0gICAgVGhpcyBtYWtlcyB0aGUgb3V0cHV0cyBkZXBlbmRlbnQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGF0IHdhcyBydW4sCi0gICAgYXMgd2VsbCBhcyBzdXBwb3J0IHRoZSBWPSBtYWtlIGNvbW1hbmQgbGluZSBmbGFnLgotICAgICIiIgotICAgIHN1ZmZpeCA9ICcnCi0gICAgaWYgcG9zdGJ1aWxkczoKLSAgICAgIGFzc2VydCAnLCcgbm90IGluIGNvbW1hbmQKLSAgICAgIHN1ZmZpeCA9ICcsLDEnICAjIFRlbGwgZG9fY21kIHRvIGhvbm9yICRQT1NUQlVJTERTCi0gICAgc2VsZi5Xcml0ZU1ha2VSdWxlKG91dHB1dHMsIGlucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9ucyA9IFsnJChjYWxsIGRvX2NtZCwlcyVzKScgJSAoY29tbWFuZCwgc3VmZml4KV0sCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50LAotICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSA9IFRydWUpCi0gICAgIyBBZGQgb3VyIG91dHB1dHMgdG8gdGhlIGxpc3Qgb2YgdGFyZ2V0cyB3ZSByZWFkIGRlcGZpbGVzIGZyb20uCi0gICAgIyBhbGxfZGVwcyBpcyBvbmx5IHVzZWQgZm9yIGRlcHMgZmlsZSByZWFkaW5nLCBhbmQgZm9yIGRlcHMgZmlsZXMgd2UgcmVwbGFjZQotICAgICMgc3BhY2VzIHdpdGggPyBiZWNhdXNlIGVzY2FwaW5nIGRvZXNuJ3Qgd29yayB3aXRoIG1ha2UncyAkKHNvcnQpIGFuZAotICAgICMgb3RoZXIgZnVuY3Rpb25zLgotICAgIG91dHB1dHMgPSBbUXVvdGVTcGFjZXMobywgU1BBQ0VfUkVQTEFDRU1FTlQpIGZvciBvIGluIG91dHB1dHNdCi0gICAgc2VsZi5Xcml0ZUxuKCdhbGxfZGVwcyArPSAlcycgJSAnICcuam9pbihvdXRwdXRzKSkKLQotCi0gIGRlZiBXcml0ZU1ha2VSdWxlKHNlbGYsIG91dHB1dHMsIGlucHV0cywgYWN0aW9ucz1Ob25lLCBjb21tZW50PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIG9yZGVyX29ubHk9RmFsc2UsIGZvcmNlPUZhbHNlLCBwaG9ueT1GYWxzZSk6Ci0gICAgIiIiV3JpdGUgYSBNYWtlZmlsZSBydWxlLCB3aXRoIHNvbWUgZXh0cmEgdHJpY2tzLgotCi0gICAgb3V0cHV0czogYSBsaXN0IG9mIG91dHB1dHMgZm9yIHRoZSBydWxlIChub3RlOiB0aGlzIGlzIG5vdCBkaXJlY3RseQotICAgICAgICAgICAgIHN1cHBvcnRlZCBieSBtYWtlOyBzZWUgY29tbWVudHMgYmVsb3cpCi0gICAgaW5wdXRzOiBhIGxpc3Qgb2YgaW5wdXRzIGZvciB0aGUgcnVsZQotICAgIGFjdGlvbnM6IGEgbGlzdCBvZiBzaGVsbCBjb21tYW5kcyB0byBydW4gZm9yIHRoZSBydWxlCi0gICAgY29tbWVudDogYSBjb21tZW50IHRvIHB1dCBpbiB0aGUgTWFrZWZpbGUgYWJvdmUgdGhlIHJ1bGUgKGFsc28gdXNlZnVsCi0gICAgICAgICAgICAgZm9yIG1ha2luZyB0aGlzIFB5dGhvbiBzY3JpcHQncyBjb2RlIHNlbGYtZG9jdW1lbnRpbmcpCi0gICAgb3JkZXJfb25seTogaWYgdHJ1ZSwgbWFrZXMgdGhlIGRlcGVuZGVuY3kgb3JkZXItb25seQotICAgIGZvcmNlOiBpZiB0cnVlLCBpbmNsdWRlIEZPUkNFX0RPX0NNRCBhcyBhbiBvcmRlci1vbmx5IGRlcAotICAgIHBob255OiBpZiB0cnVlLCB0aGUgcnVsZSBkb2VzIG5vdCBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgbmFtZWQgb3V0cHV0LCB0aGUKLSAgICAgICAgICAgb3V0cHV0IGlzIGp1c3QgYSBuYW1lIHRvIHJ1biB0aGUgcnVsZQotICAgICIiIgotICAgIG91dHB1dHMgPSBtYXAoUXVvdGVTcGFjZXMsIG91dHB1dHMpCi0gICAgaW5wdXRzID0gbWFwKFF1b3RlU3BhY2VzLCBpbnB1dHMpCi0KLSAgICBpZiBjb21tZW50OgotICAgICAgc2VsZi5Xcml0ZUxuKCcjICcgKyBjb21tZW50KQotICAgIGlmIHBob255OgotICAgICAgc2VsZi5Xcml0ZUxuKCcuUEhPTlk6ICcgKyAnICcuam9pbihvdXRwdXRzKSkKLSAgICAjIFRPRE8oZXZhbm0pOiBqdXN0IG1ha2Ugb3JkZXJfb25seSBhIGxpc3Qgb2YgZGVwcyBpbnN0ZWFkIG9mIHRoZXNlIGhhY2tzLgotICAgIGlmIG9yZGVyX29ubHk6Ci0gICAgICBvcmRlcl9pbnNlcnQgPSAnfCAnCi0gICAgICBwaWNrX291dHB1dCA9ICcgJy5qb2luKG91dHB1dHMpCi0gICAgZWxzZToKLSAgICAgIG9yZGVyX2luc2VydCA9ICcnCi0gICAgICBwaWNrX291dHB1dCA9IG91dHB1dHNbMF0KLSAgICBpZiBmb3JjZToKLSAgICAgIGZvcmNlX2FwcGVuZCA9ICcgRk9SQ0VfRE9fQ01EJwotICAgIGVsc2U6Ci0gICAgICBmb3JjZV9hcHBlbmQgPSAnJwotICAgIGlmIGFjdGlvbnM6Ci0gICAgICBzZWxmLldyaXRlTG4oIiVzOiBUT09MU0VUIDo9ICQoVE9PTFNFVCkiICUgb3V0cHV0c1swXSkKLSAgICBzZWxmLldyaXRlTG4oJyVzOiAlcyVzJXMnICUgKHBpY2tfb3V0cHV0LCBvcmRlcl9pbnNlcnQsICcgJy5qb2luKGlucHV0cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9hcHBlbmQpKQotICAgIGlmIGFjdGlvbnM6Ci0gICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6Ci0gICAgICAgIHNlbGYuV3JpdGVMbignXHQlcycgJSBhY3Rpb24pCi0gICAgaWYgbm90IG9yZGVyX29ubHkgYW5kIGxlbihvdXRwdXRzKSA+IDE6Ci0gICAgICAjIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBvdXRwdXQsIGEgcnVsZSBsaWtlCi0gICAgICAjICAgZm9vIGJhcjogYmF6Ci0gICAgICAjIHRoYXQgZm9yICplYWNoKiBvdXRwdXQgd2UgbXVzdCBydW4gdGhlIGFjdGlvbiwgcG90ZW50aWFsbHkKLSAgICAgICMgaW4gcGFyYWxsZWwuICBUaGF0IGlzIG5vdCB3aGF0IHdlJ3JlIHRyeWluZyB0byB3cml0ZSAtLSB3aGF0Ci0gICAgICAjIHdlIHdhbnQgaXMgdGhhdCB3ZSBydW4gdGhlIGFjdGlvbiBvbmNlIGFuZCBpdCBnZW5lcmF0ZXMgYWxsCi0gICAgICAjIHRoZSBmaWxlcy4KLSAgICAgICMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2hlbGxvL21hbnVhbC9hdXRvbWFrZS9NdWx0aXBsZS1PdXRwdXRzLmh0bWwKLSAgICAgICMgZGlzY3Vzc2VzIHRoaXMgcHJvYmxlbSBhbmQgaGFzIHRoaXMgc29sdXRpb246Ci0gICAgICAjIDEpIFdyaXRlIHRoZSBuYWl2ZSBydWxlIHRoYXQgd291bGQgcHJvZHVjZSBwYXJhbGxlbCBydW5zIG9mCi0gICAgICAjIHRoZSBhY3Rpb24uCi0gICAgICAjIDIpIE1ha2UgdGhlIG91dHB1dHMgc2VyYWxpemVkIG9uIGVhY2ggb3RoZXIsIHNvIHdlIHdvbid0IHN0YXJ0Ci0gICAgICAjIGEgcGFyYWxsZWwgcnVuIHVudGlsIHRoZSBmaXJzdCBydW4gZmluaXNoZXMsIGF0IHdoaWNoIHBvaW50Ci0gICAgICAjIHdlJ2xsIGhhdmUgZ2VuZXJhdGVkIGFsbCB0aGUgb3V0cHV0cyBhbmQgd2UncmUgZG9uZS4KLSAgICAgIHNlbGYuV3JpdGVMbignJXM6ICVzJyAlICgnICcuam9pbihvdXRwdXRzWzE6XSksIG91dHB1dHNbMF0pKQotICAgICAgIyBBZGQgYSBkdW1teSBjb21tYW5kIHRvIHRoZSAiZXh0cmEgb3V0cHV0cyIgcnVsZSwgb3RoZXJ3aXNlIG1ha2Ugc2VlbXMgdG8KLSAgICAgICMgdGhpbmsgdGhlc2Ugb3V0cHV0cyBoYXZlbid0IChjb3VsZG4ndCBoYXZlPykgY2hhbmdlZCwgYW5kIHRodXMgZG9lc24ndAotICAgICAgIyBmbGFnIHRoZW0gYXMgY2hhbmdlZCAoaS5lLiBpbmNsdWRlIGluICckPycpIHdoZW4gZXZhbHVhdGluZyBkZXBlbmRlbnQKLSAgICAgICMgcnVsZXMsIHdoaWNoIGluIHR1cm4gY2F1c2VzIGRvX2NtZCgpIHRvIHNraXAgcnVubmluZyBkZXBlbmRlbnQgY29tbWFuZHMuCi0gICAgICBzZWxmLldyaXRlTG4oJyVzOiA7JyAlICgnICcuam9pbihvdXRwdXRzWzE6XSkpKQotICAgIHNlbGYuV3JpdGVMbigpCi0KLQotICBkZWYgV3JpdGVBbmRyb2lkTmRrTW9kdWxlUnVsZShzZWxmLCBtb2R1bGVfbmFtZSwgYWxsX3NvdXJjZXMsIGxpbmtfZGVwcyk6Ci0gICAgIiIiV3JpdGUgYSBzZXQgb2YgTE9DQUxfWFhYIGRlZmluaXRpb25zIGZvciBBbmRyb2lkIE5ESy4KLQotICAgIFRoZXNlIHZhcmlhYmxlIGRlZmluaXRpb25zIHdpbGwgYmUgdXNlZCBieSBBbmRyb2lkIE5ESyBidXQgZG8gbm90aGluZyBmb3IKLSAgICBub24tQW5kcm9pZCBhcHBsaWNhdGlvbnMuCi0KLSAgICBBcmd1bWVudHM6Ci0gICAgICBtb2R1bGVfbmFtZTogQW5kcm9pZCBOREsgbW9kdWxlIG5hbWUsIHdoaWNoIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbAotICAgICAgICAgIG1vZHVsZSBuYW1lcy4KLSAgICAgIGFsbF9zb3VyY2VzOiBBIGxpc3Qgb2Ygc291cmNlIGZpbGVzICh3aWxsIGJlIGZpbHRlcmVkIGJ5IENvbXBpbGFibGUpLgotICAgICAgbGlua19kZXBzOiBBIGxpc3Qgb2YgbGluayBkZXBlbmRlbmNpZXMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluCi0gICAgICAgICAgdGhlIG9yZGVyIGZyb20gZGVwZW5kZW5jaWVzIHRvIGRlcGVuZGVudHMuCi0gICAgIiIiCi0gICAgaWYgc2VsZi50eXBlIG5vdCBpbiAoJ2V4ZWN1dGFibGUnLCAnc2hhcmVkX2xpYnJhcnknLCAnc3RhdGljX2xpYnJhcnknKToKLSAgICAgIHJldHVybgotCi0gICAgc2VsZi5Xcml0ZUxuKCcjIFZhcmlhYmxlIGRlZmluaXRpb25zIGZvciBBbmRyb2lkIGFwcGxpY2F0aW9ucycpCi0gICAgc2VsZi5Xcml0ZUxuKCdpbmNsdWRlICQoQ0xFQVJfVkFSUyknKQotICAgIHNlbGYuV3JpdGVMbignTE9DQUxfTU9EVUxFIDo9ICcgKyBtb2R1bGVfbmFtZSkKLSAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX0NGTEFHUyA6PSAkKENGTEFHU18kKEJVSUxEVFlQRSkpICcKLSAgICAgICAgICAgICAgICAgJyQoREVGU18kKEJVSUxEVFlQRSkpICcKLSAgICAgICAgICAgICAgICAgIyBMT0NBTF9DRkxBR1MgaXMgYXBwbGllZCB0byBib3RoIG9mIEMgYW5kIEMrKy4gIFRoZXJlIGlzCi0gICAgICAgICAgICAgICAgICMgbm8gd2F5IHRvIHNwZWNpZnkgJChDRkxBR1NfQ18kKEJVSUxEVFlQRSkpIG9ubHkgZm9yIEMKLSAgICAgICAgICAgICAgICAgIyBzb3VyY2VzLgotICAgICAgICAgICAgICAgICAnJChDRkxBR1NfQ18kKEJVSUxEVFlQRSkpICcKLSAgICAgICAgICAgICAgICAgIyAkKElOQ1NfJChCVUlMRFRZUEUpKSBpbmNsdWRlcyB0aGUgcHJlZml4ICctSScgd2hpbGUKLSAgICAgICAgICAgICAgICAgIyBMT0NBTF9DX0lOQ0xVREVTIGRvZXMgbm90IGV4cGVjdCBpdC4gIFNvIHB1dCBpdCBpbgotICAgICAgICAgICAgICAgICAjIExPQ0FMX0NGTEFHUy4KLSAgICAgICAgICAgICAgICAgJyQoSU5DU18kKEJVSUxEVFlQRSkpJykKLSAgICAjIExPQ0FMX0NYWEZMQUdTIGlzIG9ic29sZXRlIGFuZCBMT0NBTF9DUFBGTEFHUyBpcyBwcmVmZXJyZWQuCi0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9DUFBGTEFHUyA6PSAkKENGTEFHU19DQ18kKEJVSUxEVFlQRSkpJykKLSAgICBzZWxmLldyaXRlTG4oJ0xPQ0FMX0NfSU5DTFVERVMgOj0nKQotICAgIHNlbGYuV3JpdGVMbignTE9DQUxfTERMSUJTIDo9ICQoTERGTEFHU18kKEJVSUxEVFlQRSkpICQoTElCUyknKQotCi0gICAgIyBEZXRlY3QgdGhlIEMrKyBleHRlbnNpb24uCi0gICAgY3BwX2V4dCA9IHsnLmNjJzogMCwgJy5jcHAnOiAwLCAnLmN4eCc6IDB9Ci0gICAgZGVmYXVsdF9jcHBfZXh0ID0gJy5jcHAnCi0gICAgZm9yIGZpbGVuYW1lIGluIGFsbF9zb3VyY2VzOgotICAgICAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMV0KLSAgICAgIGlmIGV4dCBpbiBjcHBfZXh0OgotICAgICAgICBjcHBfZXh0W2V4dF0gKz0gMQotICAgICAgICBpZiBjcHBfZXh0W2V4dF0gPiBjcHBfZXh0W2RlZmF1bHRfY3BwX2V4dF06Ci0gICAgICAgICAgZGVmYXVsdF9jcHBfZXh0ID0gZXh0Ci0gICAgc2VsZi5Xcml0ZUxuKCdMT0NBTF9DUFBfRVhURU5TSU9OIDo9ICcgKyBkZWZhdWx0X2NwcF9leHQpCi0KLSAgICBzZWxmLldyaXRlTGlzdChtYXAoc2VsZi5BYnNvbHV0aWZ5LCBmaWx0ZXIoQ29tcGlsYWJsZSwgYWxsX3NvdXJjZXMpKSwKLSAgICAgICAgICAgICAgICAgICAnTE9DQUxfU1JDX0ZJTEVTJykKLQotICAgICMgRmlsdGVyIG91dCB0aG9zZSB3aGljaCBkbyBub3QgbWF0Y2ggcHJlZml4IGFuZCBzdWZmaXggYW5kIHByb2R1Y2UKLSAgICAjIHRoZSByZXN1bHRpbmcgbGlzdCB3aXRob3V0IHByZWZpeCBhbmQgc3VmZml4LgotICAgIGRlZiBEZXBzVG9Nb2R1bGVzKGRlcHMsIHByZWZpeCwgc3VmZml4KToKLSAgICAgIG1vZHVsZXMgPSBbXQotICAgICAgZm9yIGZpbGVwYXRoIGluIGRlcHM6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShmaWxlcGF0aCkKLSAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aChwcmVmaXgpIGFuZCBmaWxlbmFtZS5lbmRzd2l0aChzdWZmaXgpOgotICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKGZpbGVuYW1lW2xlbihwcmVmaXgpOi1sZW4oc3VmZml4KV0pCi0gICAgICByZXR1cm4gbW9kdWxlcwotCi0gICAgIyBSZXRyaWV2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAnU0hBUkVEX0xJQl9TVUZGSVgnCi0gICAgcGFyYW1zID0geydmbGF2b3InOiAnbGludXgnfQotICAgIGRlZmF1bHRfdmFyaWFibGVzID0ge30KLSAgICBDYWxjdWxhdGVWYXJpYWJsZXMoZGVmYXVsdF92YXJpYWJsZXMsIHBhcmFtcykKLQotICAgIHNlbGYuV3JpdGVMaXN0KAotICAgICAgICBEZXBzVG9Nb2R1bGVzKGxpbmtfZGVwcywKLSAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1NIQVJFRF9MSUJfUFJFRklYJ10sCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF92YXJpYWJsZXNbJ1NIQVJFRF9MSUJfU1VGRklYJ10pLAotICAgICAgICAnTE9DQUxfU0hBUkVEX0xJQlJBUklFUycpCi0gICAgc2VsZi5Xcml0ZUxpc3QoCi0gICAgICAgIERlcHNUb01vZHVsZXMobGlua19kZXBzLAotICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snU1RBVElDX0xJQl9QUkVGSVgnXSwKLSAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1NUQVRJQ19MSUJfU1VGRklYJ10pLAotICAgICAgICAnTE9DQUxfU1RBVElDX0xJQlJBUklFUycpCi0KLSAgICBpZiBzZWxmLnR5cGUgPT0gJ2V4ZWN1dGFibGUnOgotICAgICAgc2VsZi5Xcml0ZUxuKCdpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSknKQotICAgIGVsaWYgc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICBzZWxmLldyaXRlTG4oJ2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSknKQotICAgIGVsaWYgc2VsZi50eXBlID09ICdzdGF0aWNfbGlicmFyeSc6Ci0gICAgICBzZWxmLldyaXRlTG4oJ2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSknKQotICAgIHNlbGYuV3JpdGVMbigpCi0KLQotICBkZWYgV3JpdGVMbihzZWxmLCB0ZXh0PScnKToKLSAgICBzZWxmLmZwLndyaXRlKHRleHQgKyAnXG4nKQotCi0KLSAgZGVmIEdldFNvcnRlZFhjb2RlRW52KHNlbGYsIGFkZGl0aW9uYWxfc2V0dGluZ3M9Tm9uZSk6Ci0gICAgcmV0dXJuIGd5cC54Y29kZV9lbXVsYXRpb24uR2V0U29ydGVkWGNvZGVFbnYoCi0gICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsICIkKGFic19idWlsZGRpcikiLAotICAgICAgICBvcy5wYXRoLmpvaW4oIiQoYWJzX3NyY2RpcikiLCBzZWxmLnBhdGgpLCAiJChCVUlMRFRZUEUpIiwKLSAgICAgICAgYWRkaXRpb25hbF9zZXR0aW5ncykKLQotCi0gIGRlZiBHZXRTb3J0ZWRYY29kZVBvc3RidWlsZEVudihzZWxmKToKLSAgICAjIENIUk9NSVVNX1NUUklQX1NBVkVfRklMRSBpcyBhIGNocm9taXVtLXNwZWNpZmljIGhhY2suCi0gICAgIyBUT0RPKHRoYWtpcyk6IEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBzb21lIGdlbmVyYWwgbWVjaGFuaXNtIGluc3RlYWQuCi0gICAgc3RyaXBfc2F2ZV9maWxlID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5nKAotICAgICAgICAnQ0hST01JVU1fU1RSSVBfU0FWRV9GSUxFJywgJycpCi0gICAgIyBFdmVuIGlmIHN0cmlwX3NhdmVfZmlsZSBpcyBlbXB0eSwgZXhwbGljaXRseSB3cml0ZSBpdC4gRWxzZSBhIHBvc3RidWlsZAotICAgICMgbWlnaHQgcGljayB1cCBhbiBleHBvcnQgZnJvbSBhbiBlYXJsaWVyIHRhcmdldC4KLSAgICByZXR1cm4gc2VsZi5HZXRTb3J0ZWRYY29kZUVudigKLSAgICAgICAgYWRkaXRpb25hbF9zZXR0aW5ncz17J0NIUk9NSVVNX1NUUklQX1NBVkVfRklMRSc6IHN0cmlwX3NhdmVfZmlsZX0pCi0KLQotICBkZWYgV3JpdGVTb3J0ZWRYY29kZUVudihzZWxmLCB0YXJnZXQsIGVudik6Ci0gICAgZm9yIGssIHYgaW4gZW52OgotICAgICAgIyBGb3IKLSAgICAgICMgIGZvbyA6PSBhXCBiCi0gICAgICAjIHRoZSBlc2NhcGVkIHNwYWNlIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLiBGb3IKLSAgICAgICMgIGV4cG9ydCBmb28gOj0gYVwgYgotICAgICAgIyBpdCBkb2VzIG5vdCAtLSB0aGUgYmFja3NsYXNoIGlzIHdyaXR0ZW4gdG8gdGhlIGVudiBhcyBsaXRlcmFsIGNoYXJhY3Rlci4KLSAgICAgICMgU28gZG9uJ3QgZXNjYXBlIHNwYWNlcyBpbiB8ZW52W2tdfC4KLSAgICAgIHNlbGYuV3JpdGVMbignJXM6IGV4cG9ydCAlcyA6PSAlcycgJSAoUXVvdGVTcGFjZXModGFyZ2V0KSwgaywgdikpCi0KLQotICBkZWYgT2JqZWN0aWZ5KHNlbGYsIHBhdGgpOgotICAgICIiIkNvbnZlcnQgYSBwYXRoIHRvIGl0cyBvdXRwdXQgZGlyZWN0b3J5IGZvcm0uIiIiCi0gICAgaWYgJyQoJyBpbiBwYXRoOgotICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnJChvYmopLycsICckKG9iaikuJXMvJChUQVJHRVQpLycgJSBzZWxmLnRvb2xzZXQpCi0gICAgaWYgbm90ICckKG9iaiknIGluIHBhdGg6Ci0gICAgICBwYXRoID0gJyQob2JqKS4lcy8kKFRBUkdFVCkvJXMnICUgKHNlbGYudG9vbHNldCwgcGF0aCkKLSAgICByZXR1cm4gcGF0aAotCi0KLSAgZGVmIFBjaGlmeShzZWxmLCBwYXRoLCBsYW5nKToKLSAgICAiIiJDb252ZXJ0IGEgcHJlZml4IGhlYWRlciBwYXRoIHRvIGl0cyBvdXRwdXQgZGlyZWN0b3J5IGZvcm0uIiIiCi0gICAgcGF0aCA9IHNlbGYuQWJzb2x1dGlmeShwYXRoKQotICAgIGlmICckKCcgaW4gcGF0aDoKLSAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJyQob2JqKS8nLCAnJChvYmopLiVzLyQoVEFSR0VUKS9wY2gtJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYudG9vbHNldCwgbGFuZykpCi0gICAgICByZXR1cm4gcGF0aAotICAgIHJldHVybiAnJChvYmopLiVzLyQoVEFSR0VUKS9wY2gtJXMvJXMnICUgKHNlbGYudG9vbHNldCwgbGFuZywgcGF0aCkKLQotCi0gIGRlZiBBYnNvbHV0aWZ5KHNlbGYsIHBhdGgpOgotICAgICIiIkNvbnZlcnQgYSBzdWJkaXJlY3RvcnktcmVsYXRpdmUgcGF0aCBpbnRvIGEgYmFzZS1yZWxhdGl2ZSBwYXRoLgotICAgIFNraXBzIG92ZXIgcGF0aHMgdGhhdCBjb250YWluIHZhcmlhYmxlcy4iIiIKLSAgICBpZiAnJCgnIGluIHBhdGg6Ci0gICAgICAjIERvbid0IGNhbGwgbm9ybXBhdGggaW4gdGhpcyBjYXNlLCBhcyBpdCBtaWdodCBjb2xsYXBzZSB0aGUKLSAgICAgICMgcGF0aCB0b28gYWdncmVzc2l2ZWx5IGlmIGl0IGZlYXR1cmVzICcuLicuIEhvd2V2ZXIgaXQncyBzdGlsbAotICAgICAgIyBpbXBvcnRhbnQgdG8gc3RyaXAgdHJhaWxpbmcgc2xhc2hlcy4KLSAgICAgIHJldHVybiBwYXRoLnJzdHJpcCgnLycpCi0gICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYucGF0aCwgcGF0aCkpCi0KLQotICBkZWYgRXhwYW5kSW5wdXRSb290KHNlbGYsIHRlbXBsYXRlLCBleHBhbnNpb24sIGRpcm5hbWUpOgotICAgIGlmICclKElOUFVUX1JPT1Qpcycgbm90IGluIHRlbXBsYXRlIGFuZCAnJShJTlBVVF9ESVJOQU1FKXMnIG5vdCBpbiB0ZW1wbGF0ZToKLSAgICAgIHJldHVybiB0ZW1wbGF0ZQotICAgIHBhdGggPSB0ZW1wbGF0ZSAlIHsKLSAgICAgICAgJ0lOUFVUX1JPT1QnOiBleHBhbnNpb24sCi0gICAgICAgICdJTlBVVF9ESVJOQU1FJzogZGlybmFtZSwKLSAgICAgICAgfQotICAgIHJldHVybiBwYXRoCi0KLQotICBkZWYgX0luc3RhbGxhYmxlVGFyZ2V0SW5zdGFsbFBhdGgoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbmFsIG91dHB1dCBmb3IgYW4gaW5zdGFsbGFibGUgdGFyZ2V0LiIiIgotICAgICMgWGNvZGUgcHV0cyBzaGFyZWRfbGlicmFyeSByZXN1bHRzIGludG8gUFJPRFVDVF9ESVIsIGFuZCBzb21lIGd5cCBmaWxlcwotICAgICMgcmVseSBvbiB0aGlzLiBFbXVsYXRlIHRoaXMgYmVoYXZpb3IgZm9yIG1hYy4KLSAgICBpZiAoc2VsZi50eXBlID09ICdzaGFyZWRfbGlicmFyeScgYW5kCi0gICAgICAgIChzZWxmLmZsYXZvciAhPSAnbWFjJyBvciBzZWxmLnRvb2xzZXQgIT0gJ3RhcmdldCcpKToKLSAgICAgICMgSW5zdGFsbCBhbGwgc2hhcmVkIGxpYnMgaW50byBhIGNvbW1vbiBkaXJlY3RvcnkgKHBlciB0b29sc2V0KSBmb3IKLSAgICAgICMgY29udmVuaWVudCBhY2Nlc3Mgd2l0aCBMRF9MSUJSQVJZX1BBVEguCi0gICAgICByZXR1cm4gJyQoYnVpbGRkaXIpL2xpYi4lcy8lcycgJSAoc2VsZi50b29sc2V0LCBzZWxmLmFsaWFzKQotICAgIHJldHVybiAnJChidWlsZGRpcikvJyArIHNlbGYuYWxpYXMKLQotCi1kZWYgV3JpdGVBdXRvUmVnZW5lcmF0aW9uUnVsZShwYXJhbXMsIHJvb3RfbWFrZWZpbGUsIG1ha2VmaWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlcyk6Ci0gICIiIldyaXRlIHRoZSB0YXJnZXQgdG8gcmVnZW5lcmF0ZSB0aGUgTWFrZWZpbGUuIiIiCi0gIG9wdGlvbnMgPSBwYXJhbXNbJ29wdGlvbnMnXQotICBidWlsZF9maWxlc19hcmdzID0gW2d5cC5jb21tb24uUmVsYXRpdmVQYXRoKGZpbGVuYW1lLCBvcHRpb25zLnRvcGxldmVsX2RpcikKLSAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gcGFyYW1zWydidWlsZF9maWxlc19hcmcnXV0KLSAgZ3lwX2JpbmFyeSA9IGd5cC5jb21tb24uRml4SWZSZWxhdGl2ZVBhdGgocGFyYW1zWydneXBfYmluYXJ5J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudG9wbGV2ZWxfZGlyKQotICBpZiBub3QgZ3lwX2JpbmFyeS5zdGFydHN3aXRoKG9zLnNlcCk6Ci0gICAgZ3lwX2JpbmFyeSA9IG9zLnBhdGguam9pbignLicsIGd5cF9iaW5hcnkpCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoCi0gICAgICAicXVpZXRfY21kX3JlZ2VuX21ha2VmaWxlID0gQUNUSU9OIFJlZ2VuZXJhdGluZyAkQFxuIgotICAgICAgImNtZF9yZWdlbl9tYWtlZmlsZSA9ICUoY21kKXNcbiIKLSAgICAgICIlKG1ha2VmaWxlX25hbWUpczogJShkZXBzKXNcbiIKLSAgICAgICJcdCQoY2FsbCBkb19jbWQscmVnZW5fbWFrZWZpbGUpXG5cbiIgJSB7Ci0gICAgICAgICAgJ21ha2VmaWxlX25hbWUnOiBtYWtlZmlsZV9uYW1lLAotICAgICAgICAgICdkZXBzJzogJyAnLmpvaW4obWFwKFNvdXJjZWlmeSwgYnVpbGRfZmlsZXMpKSwKLSAgICAgICAgICAnY21kJzogZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgIFtneXBfYmluYXJ5LCAnLWZtYWtlJ10gKwotICAgICAgICAgICAgICAgICAgICAgZ3lwLlJlZ2VuZXJhdGVGbGFncyhvcHRpb25zKSArCi0gICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlc19hcmdzKX0pCi0KLQotZGVmIFBlcmZvcm1CdWlsZChkYXRhLCBjb25maWd1cmF0aW9ucywgcGFyYW1zKToKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0gIGZvciBjb25maWcgaW4gY29uZmlndXJhdGlvbnM6Ci0gICAgYXJndW1lbnRzID0gWydtYWtlJ10KLSAgICBpZiBvcHRpb25zLnRvcGxldmVsX2RpciBhbmQgb3B0aW9ucy50b3BsZXZlbF9kaXIgIT0gJy4nOgotICAgICAgYXJndW1lbnRzICs9ICctQycsIG9wdGlvbnMudG9wbGV2ZWxfZGlyCi0gICAgYXJndW1lbnRzLmFwcGVuZCgnQlVJTERUWVBFPScgKyBjb25maWcpCi0gICAgcHJpbnQgJ0J1aWxkaW5nIFslc106ICVzJyAlIChjb25maWcsIGFyZ3VtZW50cykKLSAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoYXJndW1lbnRzKQotCi0KLWRlZiBHZW5lcmF0ZU91dHB1dCh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMpOgotICBvcHRpb25zID0gcGFyYW1zWydvcHRpb25zJ10KLSAgZmxhdm9yID0gZ3lwLmNvbW1vbi5HZXRGbGF2b3IocGFyYW1zKQotICBnZW5lcmF0b3JfZmxhZ3MgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkKLSAgYnVpbGRkaXJfbmFtZSA9IGdlbmVyYXRvcl9mbGFncy5nZXQoJ291dHB1dF9kaXInLCAnb3V0JykKLSAgYW5kcm9pZF9uZGtfdmVyc2lvbiA9IGdlbmVyYXRvcl9mbGFncy5nZXQoJ2FuZHJvaWRfbmRrX3ZlcnNpb24nLCBOb25lKQotICBkZWZhdWx0X3RhcmdldCA9IGdlbmVyYXRvcl9mbGFncy5nZXQoJ2RlZmF1bHRfdGFyZ2V0JywgJ2FsbCcpCi0KLSAgZGVmIENhbGN1bGF0ZU1ha2VmaWxlUGF0aChidWlsZF9maWxlLCBiYXNlX25hbWUpOgotICAgICIiIkRldGVybWluZSB3aGVyZSB0byB3cml0ZSBhIE1ha2VmaWxlIGZvciBhIGdpdmVuIGd5cCBmaWxlLiIiIgotICAgICMgUGF0aHMgaW4gZ3lwIGZpbGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgLmd5cCBmaWxlLCBidXQgd2Ugd2FudAotICAgICMgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSByb290IGZvciB0aGUgbWFzdGVyIG1ha2VmaWxlLiAgR3JhYgotICAgICMgdGhlIHBhdGggb2YgdGhlIC5neXAgZmlsZSBhcyB0aGUgYmFzZSB0byByZWxhdGl2aXplIGFnYWluc3QuCi0gICAgIyBFLmcuICJmb28vYmFyIiB3aGVuIHdlJ3JlIGNvbnN0cnVjdGluZyB0YXJnZXRzIGZvciAiZm9vL2Jhci9iYXouZ3lwIi4KLSAgICBiYXNlX3BhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChvcy5wYXRoLmRpcm5hbWUoYnVpbGRfZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZXB0aCkKLSAgICAjIFdlIHdyaXRlIHRoZSBmaWxlIGluIHRoZSBiYXNlX3BhdGggZGlyZWN0b3J5LgotICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5qb2luKG9wdGlvbnMuZGVwdGgsIGJhc2VfcGF0aCwgYmFzZV9uYW1lKQotICAgIGlmIG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dDoKLSAgICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5qb2luKG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dCwgb3V0cHV0X2ZpbGUpCi0gICAgYmFzZV9wYXRoID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgob3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudG9wbGV2ZWxfZGlyKQotICAgIHJldHVybiBiYXNlX3BhdGgsIG91dHB1dF9maWxlCi0KLSAgIyBUT0RPOiAgc2VhcmNoIGZvciB0aGUgZmlyc3Qgbm9uLSdEZWZhdWx0JyB0YXJnZXQuICBUaGlzIGNhbiBnbwotICAjIGF3YXkgd2hlbiB3ZSBhZGQgdmVyaWZpY2F0aW9uIHRoYXQgYWxsIHRhcmdldHMgaGF2ZSB0aGUKLSAgIyBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuCi0gIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9IE5vbmUKLSAgdG9vbHNldHMgPSBzZXQoW3RhcmdldF9kaWN0c1t0YXJnZXRdWyd0b29sc2V0J10gZm9yIHRhcmdldCBpbiB0YXJnZXRfbGlzdF0pCi0gIGZvciB0YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgc3BlYyA9IHRhcmdldF9kaWN0c1t0YXJnZXRdCi0gICAgaWYgc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ10gIT0gJ0RlZmF1bHQnOgotICAgICAgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ10KLSAgICAgIGJyZWFrCi0gIGlmIG5vdCBkZWZhdWx0X2NvbmZpZ3VyYXRpb246Ci0gICAgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gJ0RlZmF1bHQnCi0KLSAgc3JjZGlyID0gJy4nCi0gIG1ha2VmaWxlX25hbWUgPSAnTWFrZWZpbGUnICsgb3B0aW9ucy5zdWZmaXgKLSAgbWFrZWZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihvcHRpb25zLnRvcGxldmVsX2RpciwgbWFrZWZpbGVfbmFtZSkKLSAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgIGdsb2JhbCBzcmNkaXJfcHJlZml4Ci0gICAgbWFrZWZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihvcHRpb25zLmdlbmVyYXRvcl9vdXRwdXQsIG1ha2VmaWxlX3BhdGgpCi0gICAgc3JjZGlyID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoc3JjZGlyLCBvcHRpb25zLmdlbmVyYXRvcl9vdXRwdXQpCi0gICAgc3JjZGlyX3ByZWZpeCA9ICckKHNyY2RpcikvJwotCi0gIGZsb2NrX2NvbW1hbmQ9ICdmbG9jaycKLSAgaGVhZGVyX3BhcmFtcyA9IHsKLSAgICAgICdkZWZhdWx0X3RhcmdldCc6IGRlZmF1bHRfdGFyZ2V0LAotICAgICAgJ2J1aWxkZGlyJzogYnVpbGRkaXJfbmFtZSwKLSAgICAgICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nOiBkZWZhdWx0X2NvbmZpZ3VyYXRpb24sCi0gICAgICAnZmxvY2snOiBmbG9ja19jb21tYW5kLAotICAgICAgJ2Zsb2NrX2luZGV4JzogMSwKLSAgICAgICdsaW5rX2NvbW1hbmRzJzogTElOS19DT01NQU5EU19MSU5VWCwKLSAgICAgICdleHRyYV9jb21tYW5kcyc6ICcnLAotICAgICAgJ3NyY2Rpcic6IHNyY2RpciwKLSAgICB9Ci0gIGlmIGZsYXZvciA9PSAnbWFjJzoKLSAgICBmbG9ja19jb21tYW5kID0gJy4vZ3lwLW1hYy10b29sIGZsb2NrJwotICAgIGhlYWRlcl9wYXJhbXMudXBkYXRlKHsKLSAgICAgICAgJ2Zsb2NrJzogZmxvY2tfY29tbWFuZCwKLSAgICAgICAgJ2Zsb2NrX2luZGV4JzogMiwKLSAgICAgICAgJ2xpbmtfY29tbWFuZHMnOiBMSU5LX0NPTU1BTkRTX01BQywKLSAgICAgICAgJ2V4dHJhX2NvbW1hbmRzJzogU0hBUkVEX0hFQURFUl9NQUNfQ09NTUFORFMsCi0gICAgfSkKLSAgZWxpZiBmbGF2b3IgPT0gJ2FuZHJvaWQnOgotICAgIGhlYWRlcl9wYXJhbXMudXBkYXRlKHsKLSAgICAgICAgJ2xpbmtfY29tbWFuZHMnOiBMSU5LX0NPTU1BTkRTX0FORFJPSUQsCi0gICAgfSkKLSAgZWxpZiBmbGF2b3IgPT0gJ3NvbGFyaXMnOgotICAgIGhlYWRlcl9wYXJhbXMudXBkYXRlKHsKLSAgICAgICAgJ2Zsb2NrJzogJy4vZ3lwLXN1bi10b29sIGZsb2NrJywKLSAgICAgICAgJ2Zsb2NrX2luZGV4JzogMiwKLSAgICAgICAgJ2V4dHJhX2NvbW1hbmRzJzogU0hBUkVEX0hFQURFUl9TVU5fQ09NTUFORFMsCi0gICAgfSkKLSAgZWxpZiBmbGF2b3IgPT0gJ2ZyZWVic2QnOgotICAgIGhlYWRlcl9wYXJhbXMudXBkYXRlKHsKLSAgICAgICAgJ2Zsb2NrJzogJ2xvY2tmJywKLSAgICB9KQotCi0gIGhlYWRlcl9wYXJhbXMudXBkYXRlKHsKLSAgICAnQ0MudGFyZ2V0JzogICBHZXRFbnZpcm9uRmFsbGJhY2soKCdDQ190YXJnZXQnLCAnQ0MnKSwgJyQoQ0MpJyksCi0gICAgJ0FSLnRhcmdldCc6ICAgR2V0RW52aXJvbkZhbGxiYWNrKCgnQVJfdGFyZ2V0JywgJ0FSJyksICckKEFSKScpLAotICAgICdDWFgudGFyZ2V0JzogIEdldEVudmlyb25GYWxsYmFjaygoJ0NYWF90YXJnZXQnLCAnQ1hYJyksICckKENYWCknKSwKLSAgICAnTElOSy50YXJnZXQnOiBHZXRFbnZpcm9uRmFsbGJhY2soKCdMRF90YXJnZXQnLCAnTEQnKSwgJyQoTElOSyknKSwKLSAgICAnQ0MuaG9zdCc6ICAgICBHZXRFbnZpcm9uRmFsbGJhY2soKCdDQ19ob3N0JywpLCAnZ2NjJyksCi0gICAgJ0FSLmhvc3QnOiAgICAgR2V0RW52aXJvbkZhbGxiYWNrKCgnQVJfaG9zdCcsKSwgJ2FyJyksCi0gICAgJ0NYWC5ob3N0JzogICAgR2V0RW52aXJvbkZhbGxiYWNrKCgnQ1hYX2hvc3QnLCksICdnKysnKSwKLSAgICAnTElOSy5ob3N0JzogICBHZXRFbnZpcm9uRmFsbGJhY2soKCdMRF9ob3N0JywpLCAnZysrJyksCi0gIH0pCi0KLSAgYnVpbGRfZmlsZSwgXywgXyA9IGd5cC5jb21tb24uUGFyc2VRdWFsaWZpZWRUYXJnZXQodGFyZ2V0X2xpc3RbMF0pCi0gIG1ha2VfZ2xvYmFsX3NldHRpbmdzX2FycmF5ID0gZGF0YVtidWlsZF9maWxlXS5nZXQoJ21ha2VfZ2xvYmFsX3NldHRpbmdzJywgW10pCi0gIG1ha2VfZ2xvYmFsX3NldHRpbmdzID0gJycKLSAgZm9yIGtleSwgdmFsdWUgaW4gbWFrZV9nbG9iYWxfc2V0dGluZ3NfYXJyYXk6Ci0gICAgaWYgdmFsdWVbMF0gIT0gJyQnOgotICAgICAgdmFsdWUgPSAnJChhYnNwYXRoICVzKScgJSB2YWx1ZQotICAgIGlmIGtleSA9PSAnTElOSyc6Ci0gICAgICBtYWtlX2dsb2JhbF9zZXR0aW5ncyArPSAoJyVzID89ICVzICQoYnVpbGRkaXIpL2xpbmtlci5sb2NrICVzXG4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBmbG9ja19jb21tYW5kLCB2YWx1ZSkpCi0gICAgZWxpZiBrZXkgaW4gKCdDQycsICdDQy5ob3N0JywgJ0NYWCcsICdDWFguaG9zdCcpOgotICAgICAgbWFrZV9nbG9iYWxfc2V0dGluZ3MgKz0gKAotICAgICAgICAgICdpZm5lcSAoLCQoZmlsdGVyICQob3JpZ2luICVzKSwgdW5kZWZpbmVkIGRlZmF1bHQpKVxuJyAlIGtleSkKLSAgICAgICMgTGV0IGd5cC10aW1lIGVudnZhcnMgd2luIG92ZXIgZ2xvYmFsIHNldHRpbmdzLgotICAgICAgaWYga2V5IGluIG9zLmVudmlyb246Ci0gICAgICAgIHZhbHVlID0gb3MuZW52aXJvbltrZXldCi0gICAgICBtYWtlX2dsb2JhbF9zZXR0aW5ncyArPSAnICAlcyA9ICVzXG4nICUgKGtleSwgdmFsdWUpCi0gICAgICBtYWtlX2dsb2JhbF9zZXR0aW5ncyArPSAnZW5kaWZcbicKLSAgICBlbHNlOgotICAgICAgbWFrZV9nbG9iYWxfc2V0dGluZ3MgKz0gJyVzID89ICVzXG4nICUgKGtleSwgdmFsdWUpCi0gIGhlYWRlcl9wYXJhbXNbJ21ha2VfZ2xvYmFsX3NldHRpbmdzJ10gPSBtYWtlX2dsb2JhbF9zZXR0aW5ncwotCi0gIGVuc3VyZV9kaXJlY3RvcnlfZXhpc3RzKG1ha2VmaWxlX3BhdGgpCi0gIHJvb3RfbWFrZWZpbGUgPSBvcGVuKG1ha2VmaWxlX3BhdGgsICd3JykKLSAgcm9vdF9tYWtlZmlsZS53cml0ZShTSEFSRURfSEVBREVSICUgaGVhZGVyX3BhcmFtcykKLSAgIyBDdXJyZW50bHkgYW55IHZlcnNpb25zIGhhdmUgdGhlIHNhbWUgZWZmZWN0LCBidXQgaW4gZnV0dXJlIHRoZSBiZWhhdmlvcgotICAjIGNvdWxkIGJlIGRpZmZlcmVudC4KLSAgaWYgYW5kcm9pZF9uZGtfdmVyc2lvbjoKLSAgICByb290X21ha2VmaWxlLndyaXRlKAotICAgICAgICAnIyBEZWZpbmUgTE9DQUxfUEFUSCBmb3IgYnVpbGQgb2YgQW5kcm9pZCBhcHBsaWNhdGlvbnMuXG4nCi0gICAgICAgICdMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpXG4nCi0gICAgICAgICdcbicpCi0gIGZvciB0b29sc2V0IGluIHRvb2xzZXRzOgotICAgIHJvb3RfbWFrZWZpbGUud3JpdGUoJ1RPT0xTRVQgOj0gJXNcbicgJSB0b29sc2V0KQotICAgIFdyaXRlUm9vdEhlYWRlclN1ZmZpeFJ1bGVzKHJvb3RfbWFrZWZpbGUpCi0KLSAgIyBQdXQgYnVpbGQtdGltZSBzdXBwb3J0IHRvb2xzIG5leHQgdG8gdGhlIHJvb3QgTWFrZWZpbGUuCi0gIGRlc3RfcGF0aCA9IG9zLnBhdGguZGlybmFtZShtYWtlZmlsZV9wYXRoKQotICBneXAuY29tbW9uLkNvcHlUb29sKGZsYXZvciwgZGVzdF9wYXRoKQotCi0gICMgRmluZCB0aGUgbGlzdCBvZiB0YXJnZXRzIHRoYXQgZGVyaXZlIGZyb20gdGhlIGd5cCBmaWxlKHMpIGJlaW5nIGJ1aWx0LgotICBuZWVkZWRfdGFyZ2V0cyA9IHNldCgpCi0gIGZvciBidWlsZF9maWxlIGluIHBhcmFtc1snYnVpbGRfZmlsZXMnXToKLSAgICBmb3IgdGFyZ2V0IGluIGd5cC5jb21tb24uQWxsVGFyZ2V0cyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBidWlsZF9maWxlKToKLSAgICAgIG5lZWRlZF90YXJnZXRzLmFkZCh0YXJnZXQpCi0KLSAgYnVpbGRfZmlsZXMgPSBzZXQoKQotICBpbmNsdWRlX2xpc3QgPSBzZXQoKQotICBmb3IgcXVhbGlmaWVkX3RhcmdldCBpbiB0YXJnZXRfbGlzdDoKLSAgICBidWlsZF9maWxlLCB0YXJnZXQsIHRvb2xzZXQgPSBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KAotICAgICAgICBxdWFsaWZpZWRfdGFyZ2V0KQotCi0gICAgdGhpc19tYWtlX2dsb2JhbF9zZXR0aW5ncyA9IGRhdGFbYnVpbGRfZmlsZV0uZ2V0KCdtYWtlX2dsb2JhbF9zZXR0aW5ncycsIFtdKQotICAgIGFzc2VydCBtYWtlX2dsb2JhbF9zZXR0aW5nc19hcnJheSA9PSB0aGlzX21ha2VfZ2xvYmFsX3NldHRpbmdzLCAoCi0gICAgICAgICJtYWtlX2dsb2JhbF9zZXR0aW5ncyBuZWVkcyB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIHRhcmdldHMuIikKLQotICAgIGJ1aWxkX2ZpbGVzLmFkZChneXAuY29tbW9uLlJlbGF0aXZlUGF0aChidWlsZF9maWxlLCBvcHRpb25zLnRvcGxldmVsX2RpcikpCi0gICAgaW5jbHVkZWRfZmlsZXMgPSBkYXRhW2J1aWxkX2ZpbGVdWydpbmNsdWRlZF9maWxlcyddCi0gICAgZm9yIGluY2x1ZGVkX2ZpbGUgaW4gaW5jbHVkZWRfZmlsZXM6Ci0gICAgICAjIFRoZSBpbmNsdWRlZF9maWxlcyBlbnRyaWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZGlyIG9mIHRoZSBidWlsZCBmaWxlCi0gICAgICAjIHRoYXQgaW5jbHVkZWQgdGhlbSwgc28gd2UgaGF2ZSB0byB1bmRvIHRoYXQgYW5kIHRoZW4gbWFrZSB0aGVtIHJlbGF0aXZlCi0gICAgICAjIHRvIHRoZSByb290IGRpci4KLSAgICAgIHJlbGF0aXZlX2luY2x1ZGVfZmlsZSA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKAotICAgICAgICAgIGd5cC5jb21tb24uVW5yZWxhdGl2ZVBhdGgoaW5jbHVkZWRfZmlsZSwgYnVpbGRfZmlsZSksCi0gICAgICAgICAgb3B0aW9ucy50b3BsZXZlbF9kaXIpCi0gICAgICBhYnNfaW5jbHVkZV9maWxlID0gb3MucGF0aC5hYnNwYXRoKHJlbGF0aXZlX2luY2x1ZGVfZmlsZSkKLSAgICAgICMgSWYgdGhlIGluY2x1ZGUgZmlsZSBpcyBmcm9tIHRoZSB+Ly5neXAgZGlyLCB3ZSBzaG91bGQgdXNlIGFic29sdXRlIHBhdGgKLSAgICAgICMgc28gdGhhdCByZWxvY2F0aW5nIHRoZSBzcmMgZGlyIGRvZXNuJ3QgYnJlYWsgdGhlIHBhdGguCi0gICAgICBpZiAocGFyYW1zWydob21lX2RvdF9neXAnXSBhbmQKLSAgICAgICAgICBhYnNfaW5jbHVkZV9maWxlLnN0YXJ0c3dpdGgocGFyYW1zWydob21lX2RvdF9neXAnXSkpOgotICAgICAgICBidWlsZF9maWxlcy5hZGQoYWJzX2luY2x1ZGVfZmlsZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGJ1aWxkX2ZpbGVzLmFkZChyZWxhdGl2ZV9pbmNsdWRlX2ZpbGUpCi0KLSAgICBiYXNlX3BhdGgsIG91dHB1dF9maWxlID0gQ2FsY3VsYXRlTWFrZWZpbGVQYXRoKGJ1aWxkX2ZpbGUsCi0gICAgICAgIHRhcmdldCArICcuJyArIHRvb2xzZXQgKyBvcHRpb25zLnN1ZmZpeCArICcubWsnKQotCi0gICAgc3BlYyA9IHRhcmdldF9kaWN0c1txdWFsaWZpZWRfdGFyZ2V0XQotICAgIGNvbmZpZ3MgPSBzcGVjWydjb25maWd1cmF0aW9ucyddCi0KLSAgICBpZiBmbGF2b3IgPT0gJ21hYyc6Ci0gICAgICBneXAueGNvZGVfZW11bGF0aW9uLk1lcmdlR2xvYmFsWGNvZGVTZXR0aW5nc1RvU3BlYyhkYXRhW2J1aWxkX2ZpbGVdLCBzcGVjKQotCi0gICAgd3JpdGVyID0gTWFrZWZpbGVXcml0ZXIoZ2VuZXJhdG9yX2ZsYWdzLCBmbGF2b3IpCi0gICAgd3JpdGVyLldyaXRlKHF1YWxpZmllZF90YXJnZXQsIGJhc2VfcGF0aCwgb3V0cHV0X2ZpbGUsIHNwZWMsIGNvbmZpZ3MsCi0gICAgICAgICAgICAgICAgIHBhcnRfb2ZfYWxsPXF1YWxpZmllZF90YXJnZXQgaW4gbmVlZGVkX3RhcmdldHMpCi0KLSAgICAjIE91ciByb290X21ha2VmaWxlIGxpdmVzIGF0IHRoZSBzb3VyY2Ugcm9vdC4gIENvbXB1dGUgdGhlIHJlbGF0aXZlIHBhdGgKLSAgICAjIGZyb20gdGhlcmUgdG8gdGhlIG91dHB1dF9maWxlIGZvciBpbmNsdWRpbmcuCi0gICAgbWtmaWxlX3JlbF9wYXRoID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgob3V0cHV0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKG1ha2VmaWxlX3BhdGgpKQotICAgIGluY2x1ZGVfbGlzdC5hZGQobWtmaWxlX3JlbF9wYXRoKQotCi0gICMgV3JpdGUgb3V0IHBlci1neXAgKHN1Yi1wcm9qZWN0KSBNYWtlZmlsZXMuCi0gIGRlcHRoX3JlbF9wYXRoID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgob3B0aW9ucy5kZXB0aCwgb3MuZ2V0Y3dkKCkpCi0gIGZvciBidWlsZF9maWxlIGluIGJ1aWxkX2ZpbGVzOgotICAgICMgVGhlIHBhdGhzIGluIGJ1aWxkX2ZpbGVzIHdlcmUgcmVsYXRpdml6ZWQgYWJvdmUsIHNvIHVuZG8gdGhhdCBiZWZvcmUKLSAgICAjIHRlc3RpbmcgYWdhaW5zdCB0aGUgbm9uLXJlbGF0aXZpemVkIGl0ZW1zIGluIHRhcmdldF9saXN0IGFuZCBiZWZvcmUKLSAgICAjIGNhbGN1bGF0aW5nIHRoZSBNYWtlZmlsZSBwYXRoLgotICAgIGJ1aWxkX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGVwdGhfcmVsX3BhdGgsIGJ1aWxkX2ZpbGUpCi0gICAgZ3lwX3RhcmdldHMgPSBbdGFyZ2V0X2RpY3RzW3RhcmdldF1bJ3RhcmdldF9uYW1lJ10gZm9yIHRhcmdldCBpbiB0YXJnZXRfbGlzdAotICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldC5zdGFydHN3aXRoKGJ1aWxkX2ZpbGUpIGFuZAotICAgICAgICAgICAgICAgICAgIHRhcmdldCBpbiBuZWVkZWRfdGFyZ2V0c10KLSAgICAjIE9ubHkgZ2VuZXJhdGUgTWFrZWZpbGVzIGZvciBneXAgZmlsZXMgd2l0aCB0YXJnZXRzLgotICAgIGlmIG5vdCBneXBfdGFyZ2V0czoKLSAgICAgIGNvbnRpbnVlCi0gICAgYmFzZV9wYXRoLCBvdXRwdXRfZmlsZSA9IENhbGN1bGF0ZU1ha2VmaWxlUGF0aChidWlsZF9maWxlLAotICAgICAgICBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoYnVpbGRfZmlsZSkpWzBdICsgJy5NYWtlZmlsZScpCi0gICAgbWFrZWZpbGVfcmVsX3BhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChvcy5wYXRoLmRpcm5hbWUobWFrZWZpbGVfcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGUpKQotICAgIHdyaXRlci5Xcml0ZVN1Yk1ha2Uob3V0cHV0X2ZpbGUsIG1ha2VmaWxlX3JlbF9wYXRoLCBneXBfdGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZGlyX25hbWUpCi0KLQotICAjIFdyaXRlIG91dCB0aGUgc29ydGVkIGxpc3Qgb2YgaW5jbHVkZXMuCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoJ1xuJykKLSAgZm9yIGluY2x1ZGVfZmlsZSBpbiBzb3J0ZWQoaW5jbHVkZV9saXN0KToKLSAgICAjIFdlIHdyYXAgZWFjaCAubWsgaW5jbHVkZSBpbiBhbiBpZiBzdGF0ZW1lbnQgc28gdXNlcnMgY2FuIHRlbGwgbWFrZSB0bwotICAgICMgbm90IGxvYWQgYSBmaWxlIGJ5IHNldHRpbmcgTk9fTE9BRC4gIFRoZSBiZWxvdyBtYWtlIGNvZGUgc2F5cywgb25seQotICAgICMgbG9hZCB0aGUgLm1rIGZpbGUgaWYgdGhlIC5tayBmaWxlbmFtZSBkb2Vzbid0IHN0YXJ0IHdpdGggYSB0b2tlbiBpbgotICAgICMgTk9fTE9BRC4KLSAgICByb290X21ha2VmaWxlLndyaXRlKAotICAgICAgICAiaWZlcSAoJChzdHJpcCAkKGZvcmVhY2ggcHJlZml4LCQoTk9fTE9BRCksXFxcbiIKLSAgICAgICAgIiAgICAkKGZpbmRzdHJpbmcgJChqb2luIF4sJChwcmVmaXgpKSxcXFxuIgotICAgICAgICAiICAgICAgICAgICAgICAgICAkKGpvaW4gXiwiICsgaW5jbHVkZV9maWxlICsgIikpKSksKVxuIikKLSAgICByb290X21ha2VmaWxlLndyaXRlKCIgIGluY2x1ZGUgIiArIGluY2x1ZGVfZmlsZSArICJcbiIpCi0gICAgcm9vdF9tYWtlZmlsZS53cml0ZSgiZW5kaWZcbiIpCi0gIHJvb3RfbWFrZWZpbGUud3JpdGUoJ1xuJykKLQotICBpZiAobm90IGdlbmVyYXRvcl9mbGFncy5nZXQoJ3N0YW5kYWxvbmUnKQotICAgICAgYW5kIGdlbmVyYXRvcl9mbGFncy5nZXQoJ2F1dG9fcmVnZW5lcmF0aW9uJywgVHJ1ZSkpOgotICAgIFdyaXRlQXV0b1JlZ2VuZXJhdGlvblJ1bGUocGFyYW1zLCByb290X21ha2VmaWxlLCBtYWtlZmlsZV9uYW1lLCBidWlsZF9maWxlcykKLQotICByb290X21ha2VmaWxlLndyaXRlKFNIQVJFRF9GT09URVIpCi0KLSAgcm9vdF9tYWtlZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9tc3ZzLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbXN2cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZjY4NS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9tc3ZzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzEwMiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBjb3B5Ci1pbXBvcnQgbnRwYXRoCi1pbXBvcnQgb3MKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotaW1wb3J0IGd5cC5jb21tb24KLWltcG9ydCBneXAuZWFzeV94bWwgYXMgZWFzeV94bWwKLWltcG9ydCBneXAuTVNWU05ldyBhcyBNU1ZTTmV3Ci1pbXBvcnQgZ3lwLk1TVlNQcm9qZWN0IGFzIE1TVlNQcm9qZWN0Ci1pbXBvcnQgZ3lwLk1TVlNTZXR0aW5ncyBhcyBNU1ZTU2V0dGluZ3MKLWltcG9ydCBneXAuTVNWU1Rvb2xGaWxlIGFzIE1TVlNUb29sRmlsZQotaW1wb3J0IGd5cC5NU1ZTVXNlckZpbGUgYXMgTVNWU1VzZXJGaWxlCi1pbXBvcnQgZ3lwLk1TVlNVdGlsIGFzIE1TVlNVdGlsCi1pbXBvcnQgZ3lwLk1TVlNWZXJzaW9uIGFzIE1TVlNWZXJzaW9uCi1mcm9tIGd5cC5jb21tb24gaW1wb3J0IEd5cEVycm9yCi0KLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIHZhbGlkYXRpbmcgVmlzdWFsIFN0dWRpbyBHVUlEcy4gIElmIHRoZSBHVUlECi0jIGNvbnRhaW5zIGxvd2VyY2FzZSBoZXggbGV0dGVycywgTVNWUyB3aWxsIGJlIGZpbmUuIEhvd2V2ZXIsCi0jIEluY3JlZGlCdWlsZCBCdWlsZENvbnNvbGUgd2lsbCBwYXJzZSB0aGUgc29sdXRpb24gZmlsZSwgYnV0IHRoZW4KLSMgc2lsZW50bHkgc2tpcCBidWlsZGluZyB0aGUgdGFyZ2V0IGNhdXNpbmcgaGFyZCB0byB0cmFjayBkb3duIGVycm9ycy4KLSMgTm90ZSB0aGF0IHRoaXMgb25seSBoYXBwZW5zIHdpdGggdGhlIEJ1aWxkQ29uc29sZSwgYW5kIGRvZXMgbm90IG9jY3VyCi0jIGlmIEluY3JlZGlCdWlsZCBpcyBleGVjdXRlZCBmcm9tIGluc2lkZSBWaXN1YWwgU3R1ZGlvLiAgVGhpcyByZWdleAotIyB2YWxpZGF0ZXMgdGhhdCB0aGUgc3RyaW5nIGxvb2tzIGxpa2UgYSBHVUlEIHdpdGggYWxsIHVwcGVyY2FzZSBoZXgKLSMgbGV0dGVycy4KLVZBTElEX01TVlNfR1VJRF9DSEFSUyA9IHJlLmNvbXBpbGUoJ15bQS1GMC05XC1dKyQnKQotCi0KLWdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlcyA9IHsKLSAgICAnRVhFQ1VUQUJMRV9QUkVGSVgnOiAnJywKLSAgICAnRVhFQ1VUQUJMRV9TVUZGSVgnOiAnLmV4ZScsCi0gICAgJ1NUQVRJQ19MSUJfUFJFRklYJzogJycsCi0gICAgJ1NIQVJFRF9MSUJfUFJFRklYJzogJycsCi0gICAgJ1NUQVRJQ19MSUJfU1VGRklYJzogJy5saWInLAotICAgICdTSEFSRURfTElCX1NVRkZJWCc6ICcuZGxsJywKLSAgICAnSU5URVJNRURJQVRFX0RJUic6ICckKEludERpciknLAotICAgICdTSEFSRURfSU5URVJNRURJQVRFX0RJUic6ICckKE91dERpcilvYmovZ2xvYmFsX2ludGVybWVkaWF0ZScsCi0gICAgJ09TJzogJ3dpbicsCi0gICAgJ1BST0RVQ1RfRElSJzogJyQoT3V0RGlyKScsCi0gICAgJ0xJQl9ESVInOiAnJChPdXREaXIpbGliJywKLSAgICAnUlVMRV9JTlBVVF9ST09UJzogJyQoSW5wdXROYW1lKScsCi0gICAgJ1JVTEVfSU5QVVRfRElSTkFNRSc6ICckKElucHV0RGlyKScsCi0gICAgJ1JVTEVfSU5QVVRfRVhUJzogJyQoSW5wdXRFeHQpJywKLSAgICAnUlVMRV9JTlBVVF9OQU1FJzogJyQoSW5wdXRGaWxlTmFtZSknLAotICAgICdSVUxFX0lOUFVUX1BBVEgnOiAnJChJbnB1dFBhdGgpJywKLSAgICAnQ09ORklHVVJBVElPTl9OQU1FJzogJyQoQ29uZmlndXJhdGlvbk5hbWUpJywKLX0KLQotCi0jIFRoZSBtc3ZzIHNwZWNpZmljIHNlY3Rpb25zIHRoYXQgaG9sZCBwYXRocwotZ2VuZXJhdG9yX2FkZGl0aW9uYWxfcGF0aF9zZWN0aW9ucyA9IFsKLSAgICAnbXN2c19jeWd3aW5fZGlycycsCi0gICAgJ21zdnNfcHJvcHMnLAotXQotCi0KLWdlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMgPSBbCi0gICAgJ21zdnNfY3lnd2luX2RpcnMnLAotICAgICdtc3ZzX2N5Z3dpbl9zaGVsbCcsCi0gICAgJ21zdnNfc2hhcmQnLAotXQotCi0KLSMgTGlzdCBvZiBwcmVjb21waWxlZCBoZWFkZXIgcmVsYXRlZCBrZXlzLgotcHJlY29tcF9rZXlzID0gWwotICAgICdtc3ZzX3ByZWNvbXBpbGVkX2hlYWRlcicsCi0gICAgJ21zdnNfcHJlY29tcGlsZWRfc291cmNlJywKLV0KLQotCi1jYWNoZWRfdXNlcm5hbWUgPSBOb25lCi0KLQotY2FjaGVkX2RvbWFpbiA9IE5vbmUKLQotCi0jIFRPRE8oZ3NwZW5jZXIpOiBTd2l0Y2ggdGhlIG9zLmVudmlyb24gY2FsbHMgdG8gYmUKLSMgd2luMzJhcGkuR2V0RG9tYWluTmFtZSgpIGFuZCB3aW4zMmFwaS5HZXRVc2VyTmFtZSgpIG9uY2UgdGhlCi0jIHB5dGhvbiB2ZXJzaW9uIGluIGRlcG90X3Rvb2xzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayBvbiBWaXN0YQotIyA2NC1iaXQuCi1kZWYgX0dldERvbWFpbkFuZFVzZXJOYW1lKCk6Ci0gIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdjeWd3aW4nKToKLSAgICByZXR1cm4gKCdET01BSU4nLCAnVVNFUk5BTUUnKQotICBnbG9iYWwgY2FjaGVkX3VzZXJuYW1lCi0gIGdsb2JhbCBjYWNoZWRfZG9tYWluCi0gIGlmIG5vdCBjYWNoZWRfZG9tYWluIG9yIG5vdCBjYWNoZWRfdXNlcm5hbWU6Ci0gICAgZG9tYWluID0gb3MuZW52aXJvbi5nZXQoJ1VTRVJET01BSU4nKQotICAgIHVzZXJuYW1lID0gb3MuZW52aXJvbi5nZXQoJ1VTRVJOQU1FJykKLSAgICBpZiBub3QgZG9tYWluIG9yIG5vdCB1c2VybmFtZToKLSAgICAgIGNhbGwgPSBzdWJwcm9jZXNzLlBvcGVuKFsnbmV0JywgJ2NvbmZpZycsICdXb3Jrc3RhdGlvbiddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgIGNvbmZpZyA9IGNhbGwuY29tbXVuaWNhdGUoKVswXQotICAgICAgdXNlcm5hbWVfcmUgPSByZS5jb21waWxlKCdeVXNlciBuYW1lXHMrKFxTKyknLCByZS5NVUxUSUxJTkUpCi0gICAgICB1c2VybmFtZV9tYXRjaCA9IHVzZXJuYW1lX3JlLnNlYXJjaChjb25maWcpCi0gICAgICBpZiB1c2VybmFtZV9tYXRjaDoKLSAgICAgICAgdXNlcm5hbWUgPSB1c2VybmFtZV9tYXRjaC5ncm91cCgxKQotICAgICAgZG9tYWluX3JlID0gcmUuY29tcGlsZSgnXkxvZ29uIGRvbWFpblxzKyhcUyspJywgcmUuTVVMVElMSU5FKQotICAgICAgZG9tYWluX21hdGNoID0gZG9tYWluX3JlLnNlYXJjaChjb25maWcpCi0gICAgICBpZiBkb21haW5fbWF0Y2g6Ci0gICAgICAgIGRvbWFpbiA9IGRvbWFpbl9tYXRjaC5ncm91cCgxKQotICAgIGNhY2hlZF9kb21haW4gPSBkb21haW4KLSAgICBjYWNoZWRfdXNlcm5hbWUgPSB1c2VybmFtZQotICByZXR1cm4gKGNhY2hlZF9kb21haW4sIGNhY2hlZF91c2VybmFtZSkKLQotZml4cGF0aF9wcmVmaXggPSBOb25lCi0KLQotZGVmIF9Ob3JtYWxpemVkU291cmNlKHNvdXJjZSk6Ci0gICIiIk5vcm1hbGl6ZSB0aGUgcGF0aC4KLQotICBCdXQgbm90IGlmIHRoYXQgZ2V0cyByaWQgb2YgYSB2YXJpYWJsZSwgYXMgdGhpcyBtYXkgZXhwYW5kIHRvIHNvbWV0aGluZwotICBsYXJnZXIgdGhhbiBvbmUgZGlyZWN0b3J5LgotCi0gIEFyZ3VtZW50czoKLSAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gYmUgbm9ybWFsaXplLmQKLQotICBSZXR1cm5zOgotICAgICAgVGhlIG5vcm1hbGl6ZWQgcGF0aC4KLSAgIiIiCi0gIG5vcm1hbGl6ZWQgPSBvcy5wYXRoLm5vcm1wYXRoKHNvdXJjZSkKLSAgaWYgc291cmNlLmNvdW50KCckJykgPT0gbm9ybWFsaXplZC5jb3VudCgnJCcpOgotICAgIHNvdXJjZSA9IG5vcm1hbGl6ZWQKLSAgcmV0dXJuIHNvdXJjZQotCi0KLWRlZiBfRml4UGF0aChwYXRoKToKLSAgIiIiQ29udmVydCBwYXRocyB0byBhIGZvcm0gdGhhdCB3aWxsIG1ha2Ugc2Vuc2UgaW4gYSB2Y3Byb2ogZmlsZS4KLQotICBBcmd1bWVudHM6Ci0gICAgcGF0aDogVGhlIHBhdGggdG8gY29udmVydCwgbWF5IGNvbnRhaW4gLyBldGMuCi0gIFJldHVybnM6Ci0gICAgVGhlIHBhdGggd2l0aCBhbGwgc2xhc2hlcyBtYWRlIGludG8gYmFja3NsYXNoZXMuCi0gICIiIgotICBpZiBmaXhwYXRoX3ByZWZpeCBhbmQgcGF0aCBhbmQgbm90IG9zLnBhdGguaXNhYnMocGF0aCkgYW5kIG5vdCBwYXRoWzBdID09ICckJzoKLSAgICBwYXRoID0gb3MucGF0aC5qb2luKGZpeHBhdGhfcHJlZml4LCBwYXRoKQotICBwYXRoID0gcGF0aC5yZXBsYWNlKCcvJywgJ1xcJykKLSAgcGF0aCA9IF9Ob3JtYWxpemVkU291cmNlKHBhdGgpCi0gIGlmIHBhdGggYW5kIHBhdGhbLTFdID09ICdcXCc6Ci0gICAgcGF0aCA9IHBhdGhbOi0xXQotICByZXR1cm4gcGF0aAotCi0KLWRlZiBfRml4UGF0aHMocGF0aHMpOgotICAiIiJGaXggZWFjaCBvZiB0aGUgcGF0aHMgb2YgdGhlIGxpc3QuIiIiCi0gIHJldHVybiBbX0ZpeFBhdGgoaSkgZm9yIGkgaW4gcGF0aHNdCi0KLQotZGVmIF9Db252ZXJ0U291cmNlc1RvRmlsdGVySGllcmFyY2h5KHNvdXJjZXMsIHByZWZpeD1Ob25lLCBleGNsdWRlZD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZXhjbHVkZWQ9VHJ1ZSk6Ci0gICIiIkNvbnZlcnRzIGEgbGlzdCBzcGxpdCBzb3VyY2UgZmlsZSBwYXRocyBpbnRvIGEgdmNwcm9qIGZvbGRlciBoaWVyYXJjaHkuCi0KLSAgQXJndW1lbnRzOgotICAgIHNvdXJjZXM6IEEgbGlzdCBvZiBzb3VyY2UgZmlsZSBwYXRocyBzcGxpdC4KLSAgICBwcmVmaXg6IEEgbGlzdCBvZiBzb3VyY2UgZmlsZSBwYXRoIGxheWVycyBtZWFudCB0byBhcHBseSB0byBlYWNoIG9mIHNvdXJjZXMuCi0gICAgZXhjbHVkZWQ6IEEgc2V0IG9mIGV4Y2x1ZGVkIGZpbGVzLgotCi0gIFJldHVybnM6Ci0gICAgQSBoaWVyYXJjaHkgb2YgZmlsZW5hbWVzIGFuZCBNU1ZTUHJvamVjdC5GaWx0ZXIgb2JqZWN0cyB0aGF0IG1hdGNoZXMgdGhlCi0gICAgbGF5b3V0IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAgICBGb3IgZXhhbXBsZToKLSAgICBfQ29udmVydFNvdXJjZXNUb0ZpbHRlckhpZXJhcmNoeShbWydhJywgJ2JvYjEuYyddLCBbJ2InLCAnYm9iMi5jJ11dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1bJ2pvZSddKQotICAgIC0tPgotICAgIFtNU1ZTUHJvamVjdC5GaWx0ZXIoJ2EnLCBjb250ZW50cz1bJ2pvZVxcYVxcYm9iMS5jJ10pLAotICAgICBNU1ZTUHJvamVjdC5GaWx0ZXIoJ2InLCBjb250ZW50cz1bJ2pvZVxcYlxcYm9iMi5jJ10pXQotICAiIiIKLSAgaWYgbm90IHByZWZpeDogcHJlZml4ID0gW10KLSAgcmVzdWx0ID0gW10KLSAgZXhjbHVkZWRfcmVzdWx0ID0gW10KLSAgZm9sZGVycyA9IGRpY3QoKQotICAjIEdhdGhlciBmaWxlcyBpbnRvIHRoZSBmaW5hbCByZXN1bHQsIGV4Y2x1ZGVkLCBvciBmb2xkZXJzLgotICBmb3IgcyBpbiBzb3VyY2VzOgotICAgIGlmIGxlbihzKSA9PSAxOgotICAgICAgZmlsZW5hbWUgPSBfTm9ybWFsaXplZFNvdXJjZSgnXFwnLmpvaW4ocHJlZml4ICsgcykpCi0gICAgICBpZiBmaWxlbmFtZSBpbiBleGNsdWRlZDoKLSAgICAgICAgZXhjbHVkZWRfcmVzdWx0LmFwcGVuZChmaWxlbmFtZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgIGlmIG5vdCBmb2xkZXJzLmdldChzWzBdKToKLSAgICAgICAgZm9sZGVyc1tzWzBdXSA9IFtdCi0gICAgICBmb2xkZXJzW3NbMF1dLmFwcGVuZChzWzE6XSkKLSAgIyBBZGQgYSBmb2xkZXIgZm9yIGV4Y2x1ZGVkIGZpbGVzLgotICBpZiBleGNsdWRlZF9yZXN1bHQgYW5kIGxpc3RfZXhjbHVkZWQ6Ci0gICAgZXhjbHVkZWRfZm9sZGVyID0gTVNWU1Byb2plY3QuRmlsdGVyKCdfZXhjbHVkZWRfZmlsZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cz1leGNsdWRlZF9yZXN1bHQpCi0gICAgcmVzdWx0LmFwcGVuZChleGNsdWRlZF9mb2xkZXIpCi0gICMgUG9wdWxhdGUgYWxsIHRoZSBmb2xkZXJzLgotICBmb3IgZiBpbiBmb2xkZXJzOgotICAgIGNvbnRlbnRzID0gX0NvbnZlcnRTb3VyY2VzVG9GaWx0ZXJIaWVyYXJjaHkoZm9sZGVyc1tmXSwgcHJlZml4PXByZWZpeCArIFtmXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkPWV4Y2x1ZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9leGNsdWRlZD1saXN0X2V4Y2x1ZGVkKQotICAgIGNvbnRlbnRzID0gTVNWU1Byb2plY3QuRmlsdGVyKGYsIGNvbnRlbnRzPWNvbnRlbnRzKQotICAgIHJlc3VsdC5hcHBlbmQoY29udGVudHMpCi0KLSAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiBfVG9vbEFwcGVuZCh0b29scywgdG9vbF9uYW1lLCBzZXR0aW5nLCB2YWx1ZSwgb25seV9pZl91bnNldD1GYWxzZSk6Ci0gIGlmIG5vdCB2YWx1ZTogcmV0dXJuCi0gICMgVE9ETyhicmFkbmVsc29uKTogdWdseSBoYWNrLCBmaXggdGhpcyBtb3JlIGdlbmVyYWxseSEhIQotICBpZiAnRGlyZWN0b3JpZXMnIGluIHNldHRpbmcgb3IgJ0RlcGVuZGVuY2llcycgaW4gc2V0dGluZzoKLSAgICBpZiB0eXBlKHZhbHVlKSA9PSBzdHI6Ci0gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJy8nLCAnXFwnKQotICAgIGVsc2U6Ci0gICAgICB2YWx1ZSA9IFtpLnJlcGxhY2UoJy8nLCAnXFwnKSBmb3IgaSBpbiB2YWx1ZV0KLSAgaWYgbm90IHRvb2xzLmdldCh0b29sX25hbWUpOgotICAgIHRvb2xzW3Rvb2xfbmFtZV0gPSBkaWN0KCkKLSAgdG9vbCA9IHRvb2xzW3Rvb2xfbmFtZV0KLSAgaWYgdG9vbC5nZXQoc2V0dGluZyk6Ci0gICAgaWYgb25seV9pZl91bnNldDogcmV0dXJuCi0gICAgaWYgdHlwZSh0b29sW3NldHRpbmddKSA9PSBsaXN0OgotICAgICAgdG9vbFtzZXR0aW5nXSArPSB2YWx1ZQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IoCi0gICAgICAgICAgJ0FwcGVuZGluZyAiJXMiIHRvIGEgbm9uLWxpc3Qgc2V0dGluZyAiJXMiIGZvciB0b29sICIlcyIgaXMgJwotICAgICAgICAgICdub3QgYWxsb3dlZCwgcHJldmlvdXMgdmFsdWU6ICVzJyAlICgKLSAgICAgICAgICAgICAgdmFsdWUsIHNldHRpbmcsIHRvb2xfbmFtZSwgc3RyKHRvb2xbc2V0dGluZ10pKSkKLSAgZWxzZToKLSAgICB0b29sW3NldHRpbmddID0gdmFsdWUKLQotCi1kZWYgX0NvbmZpZ1BsYXRmb3JtKGNvbmZpZ19kYXRhKToKLSAgcmV0dXJuIGNvbmZpZ19kYXRhLmdldCgnbXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtJywgJ1dpbjMyJykKLQotCi1kZWYgX0NvbmZpZ0Jhc2VOYW1lKGNvbmZpZ19uYW1lLCBwbGF0Zm9ybV9uYW1lKToKLSAgaWYgY29uZmlnX25hbWUuZW5kc3dpdGgoJ18nICsgcGxhdGZvcm1fbmFtZSk6Ci0gICAgcmV0dXJuIGNvbmZpZ19uYW1lWzA6LWxlbihwbGF0Zm9ybV9uYW1lKS0xXQotICBlbHNlOgotICAgIHJldHVybiBjb25maWdfbmFtZQotCi0KLWRlZiBfQ29uZmlnRnVsbE5hbWUoY29uZmlnX25hbWUsIGNvbmZpZ19kYXRhKToKLSAgcGxhdGZvcm1fbmFtZSA9IF9Db25maWdQbGF0Zm9ybShjb25maWdfZGF0YSkKLSAgcmV0dXJuICclc3wlcycgJSAoX0NvbmZpZ0Jhc2VOYW1lKGNvbmZpZ19uYW1lLCBwbGF0Zm9ybV9uYW1lKSwgcGxhdGZvcm1fbmFtZSkKLQotCi1kZWYgX0J1aWxkQ29tbWFuZExpbmVGb3JSdWxlUmF3KHNwZWMsIGNtZCwgY3lnd2luX3NoZWxsLCBoYXNfaW5wdXRfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVfY21kLCBkb19zZXR1cF9lbnYpOgotCi0gIGlmIFt4IGZvciB4IGluIGNtZCBpZiAnJChJbnB1dERpciknIGluIHhdOgotICAgIGlucHV0X2Rpcl9wcmVhbWJsZSA9ICgKLSAgICAgICdzZXQgSU5QVVRESVI9JChJbnB1dERpcilcbicKLSAgICAgICdzZXQgSU5QVVRESVI9JUlOUFVURElSOiQoUHJvamVjdERpcik9JVxuJwotICAgICAgJ3NldCBJTlBVVERJUj0lSU5QVVRESVI6fjAsLTElXG4nCi0gICAgICApCi0gIGVsc2U6Ci0gICAgaW5wdXRfZGlyX3ByZWFtYmxlID0gJycKLQotICBpZiBjeWd3aW5fc2hlbGw6Ci0gICAgIyBGaW5kIHBhdGggdG8gY3lnd2luLgotICAgIGN5Z3dpbl9kaXIgPSBfRml4UGF0aChzcGVjLmdldCgnbXN2c19jeWd3aW5fZGlycycsIFsnLiddKVswXSkKLSAgICAjIFByZXBhcmUgY29tbWFuZC4KLSAgICBkaXJlY3RfY21kID0gY21kCi0gICAgZGlyZWN0X2NtZCA9IFtpLnJlcGxhY2UoJyQoSW50RGlyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2BjeWdwYXRoIC1tICIke0lOVERJUn0iYCcpIGZvciBpIGluIGRpcmVjdF9jbWRdCi0gICAgZGlyZWN0X2NtZCA9IFtpLnJlcGxhY2UoJyQoT3V0RGlyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2BjeWdwYXRoIC1tICIke09VVERJUn0iYCcpIGZvciBpIGluIGRpcmVjdF9jbWRdCi0gICAgZGlyZWN0X2NtZCA9IFtpLnJlcGxhY2UoJyQoSW5wdXREaXIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYGN5Z3BhdGggLW0gIiR7SU5QVVRESVJ9ImAnKSBmb3IgaSBpbiBkaXJlY3RfY21kXQotICAgIGlmIGhhc19pbnB1dF9wYXRoOgotICAgICAgZGlyZWN0X2NtZCA9IFtpLnJlcGxhY2UoJyQoSW5wdXRQYXRoKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYGN5Z3BhdGggLW0gIiR7SU5QVVRQQVRIfSJgJykKLSAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gZGlyZWN0X2NtZF0KLSAgICBkaXJlY3RfY21kID0gWydcXCIlc1xcIicgJSBpLnJlcGxhY2UoJyInLCAnXFxcXFxcIicpIGZvciBpIGluIGRpcmVjdF9jbWRdCi0gICAgI2RpcmVjdF9jbWQgPSBneXAuY29tbW9uLkVuY29kZVBPU0lYU2hlbGxMaXN0KGRpcmVjdF9jbWQpCi0gICAgZGlyZWN0X2NtZCA9ICcgJy5qb2luKGRpcmVjdF9jbWQpCi0gICAgIyBUT0RPKHF1b3RlKTogIHJlZ3VsYXJpemUgcXVvdGluZyBwYXRoIG5hbWVzIHRocm91Z2hvdXQgdGhlIG1vZHVsZQotICAgIGNtZCA9ICcnCi0gICAgaWYgZG9fc2V0dXBfZW52OgotICAgICAgY21kICs9ICdjYWxsICIkKFByb2plY3REaXIpJShjeWd3aW5fZGlyKXNcXHNldHVwX2Vudi5iYXQiICYmICcKLSAgICBjbWQgKz0gJ3NldCBDWUdXSU49bm9udHNlYyYmICcKLSAgICBpZiBkaXJlY3RfY21kLmZpbmQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJykgPj0gMDoKLSAgICAgIGNtZCArPSAnc2V0IC9hIE5VTUJFUl9PRl9QUk9DRVNTT1JTX1BMVVNfMT0lJU5VTUJFUl9PRl9QUk9DRVNTT1JTJSUrMSYmICcKLSAgICBpZiBkaXJlY3RfY21kLmZpbmQoJ0lOVERJUicpID49IDA6Ci0gICAgICBjbWQgKz0gJ3NldCBJTlRESVI9JChJbnREaXIpJiYgJwotICAgIGlmIGRpcmVjdF9jbWQuZmluZCgnT1VURElSJykgPj0gMDoKLSAgICAgIGNtZCArPSAnc2V0IE9VVERJUj0kKE91dERpcikmJiAnCi0gICAgaWYgaGFzX2lucHV0X3BhdGggYW5kIGRpcmVjdF9jbWQuZmluZCgnSU5QVVRQQVRIJykgPj0gMDoKLSAgICAgIGNtZCArPSAnc2V0IElOUFVUUEFUSD0kKElucHV0UGF0aCkgJiYgJwotICAgIGNtZCArPSAnYmFzaCAtYyAiJShjbWQpcyInCi0gICAgY21kID0gY21kICUgeydjeWd3aW5fZGlyJzogY3lnd2luX2RpciwKLSAgICAgICAgICAgICAgICAgJ2NtZCc6IGRpcmVjdF9jbWR9Ci0gICAgcmV0dXJuIGlucHV0X2Rpcl9wcmVhbWJsZSArIGNtZAotICBlbHNlOgotICAgICMgQ29udmVydCBjYXQgLS0+IHR5cGUgdG8gbWltaWMgdW5peC4KLSAgICBpZiBjbWRbMF0gPT0gJ2NhdCc6Ci0gICAgICBjb21tYW5kID0gWyd0eXBlJ10KLSAgICBlbHNlOgotICAgICAgY29tbWFuZCA9IFtjbWRbMF0ucmVwbGFjZSgnLycsICdcXCcpXQotICAgICMgQWRkIGNhbGwgYmVmb3JlIGNvbW1hbmQgdG8gZW5zdXJlIHRoYXQgY29tbWFuZHMgY2FuIGJlIHRpZWQgdG9nZXRoZXIgb25lCi0gICAgIyBhZnRlciB0aGUgb3RoZXIgd2l0aG91dCBhYm9ydGluZyBpbiBJbmNyZWRpYnVpbGQsIHNpbmNlIElCIG1ha2VzIGEgYmF0Ci0gICAgIyBmaWxlIG91dCBvZiB0aGUgcmF3IGNvbW1hbmQgc3RyaW5nLCBhbmQgc29tZSBjb21tYW5kcyAobGlrZSBweXRob24pIGFyZQotICAgICMgYWN0dWFsbHkgYmF0Y2ggZmlsZXMgdGhlbXNlbHZlcy4KLSAgICBjb21tYW5kLmluc2VydCgwLCAnY2FsbCcpCi0gICAgIyBGaXggdGhlIHBhdGhzCi0gICAgIyBUT0RPKHF1b3RlKTogVGhpcyBpcyBhIHJlYWxseSB1Z2x5IGhldXJpc3RpYywgYW5kIHdpbGwgbWlzcyBwYXRoIGZpeGluZwotICAgICMgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgbGlrZSAiLS1hcmc9cGF0aCIgb3IgIi9vcHQ6cGF0aCIuCi0gICAgIyBJZiB0aGUgYXJndW1lbnQgc3RhcnRzIHdpdGggYSBzbGFzaCBvciBkYXNoLCBpdCdzIHByb2JhYmx5IGEgY29tbWFuZCBsaW5lCi0gICAgIyBzd2l0Y2gKLSAgICBhcmd1bWVudHMgPSBbaSBpZiAoaVs6MV0gaW4gIi8tIikgZWxzZSBfRml4UGF0aChpKSBmb3IgaSBpbiBjbWRbMTpdXQotICAgIGFyZ3VtZW50cyA9IFtpLnJlcGxhY2UoJyQoSW5wdXREaXIpJywnJUlOUFVURElSJScpIGZvciBpIGluIGFyZ3VtZW50c10KLSAgICBhcmd1bWVudHMgPSBbTVNWU1NldHRpbmdzLkZpeFZDTWFjcm9TbGFzaGVzKGkpIGZvciBpIGluIGFyZ3VtZW50c10KLSAgICBpZiBxdW90ZV9jbWQ6Ci0gICAgICAjIFN1cHBvcnQgYSBtb2RlIGZvciB1c2luZyBjbWQgZGlyZWN0bHkuCi0gICAgICAjIENvbnZlcnQgYW55IHBhdGhzIHRvIG5hdGl2ZSBmb3JtIChmaXJzdCBlbGVtZW50IGlzIHVzZWQgZGlyZWN0bHkpLgotICAgICAgIyBUT0RPKHF1b3RlKTogIHJlZ3VsYXJpemUgcXVvdGluZyBwYXRoIG5hbWVzIHRocm91Z2hvdXQgdGhlIG1vZHVsZQotICAgICAgYXJndW1lbnRzID0gWyciJXMiJyAlIGkgZm9yIGkgaW4gYXJndW1lbnRzXQotICAgICMgQ29sbGFwc2UgaW50byBhIHNpbmdsZSBjb21tYW5kLgotICAgIHJldHVybiBpbnB1dF9kaXJfcHJlYW1ibGUgKyAnICcuam9pbihjb21tYW5kICsgYXJndW1lbnRzKQotCi0KLWRlZiBfQnVpbGRDb21tYW5kTGluZUZvclJ1bGUoc3BlYywgcnVsZSwgaGFzX2lucHV0X3BhdGgsIGRvX3NldHVwX2Vudik6Ci0gICMgQ3VycmVudGx5IHRoaXMgd2VpcmQgYXJndW1lbnQgbXVuZ2luZyBpcyB1c2VkIHRvIGR1cGxpY2F0ZSB0aGUgd2F5IGEKLSAgIyBweXRob24gc2NyaXB0IHdvdWxkIG5lZWQgdG8gYmUgcnVuIGFzIHBhcnQgb2YgdGhlIGNocm9tZSB0cmVlLgotICAjIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGFkZCBzb21lIHNvcnQgb2YgcnVsZV9kZWZhdWx0IG9wdGlvbiB0byBzZXQgdGhpcwotICAjIHBlciBwcm9qZWN0LiBGb3Igbm93IHRoZSBiZWhhdmlvciBjaHJvbWUgbmVlZHMgaXMgdGhlIGRlZmF1bHQuCi0gIG1jcyA9IHJ1bGUuZ2V0KCdtc3ZzX2N5Z3dpbl9zaGVsbCcpCi0gIGlmIG1jcyBpcyBOb25lOgotICAgIG1jcyA9IGludChzcGVjLmdldCgnbXN2c19jeWd3aW5fc2hlbGwnLCAwKSkKLSAgZWxpZiBpc2luc3RhbmNlKG1jcywgc3RyKToKLSAgICBtY3MgPSBpbnQobWNzKQotICBxdW90ZV9jbWQgPSBpbnQocnVsZS5nZXQoJ21zdnNfcXVvdGVfY21kJywgMSkpCi0gIHJldHVybiBfQnVpbGRDb21tYW5kTGluZUZvclJ1bGVSYXcoc3BlYywgcnVsZVsnYWN0aW9uJ10sIG1jcywgaGFzX2lucHV0X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVfY21kLCBkb19zZXR1cF9lbnY9ZG9fc2V0dXBfZW52KQotCi0KLWRlZiBfQWRkQWN0aW9uU3RlcChhY3Rpb25zX2RpY3QsIGlucHV0cywgb3V0cHV0cywgZGVzY3JpcHRpb24sIGNvbW1hbmQpOgotICAiIiJNZXJnZSBhY3Rpb24gaW50byBhbiBleGlzdGluZyBsaXN0IG9mIGFjdGlvbnMuCi0KLSAgQ2FyZSBtdXN0IGJlIHRha2VuIHNvIHRoYXQgYWN0aW9ucyB3aGljaCBoYXZlIG92ZXJsYXBwaW5nIGlucHV0cyBlaXRoZXIgZG9uJ3QKLSAgZ2V0IGFzc2lnbmVkIHRvIHRoZSBzYW1lIGlucHV0LCBvciBnZXQgY29sbGFwc2VkIGludG8gb25lLgotCi0gIEFyZ3VtZW50czoKLSAgICBhY3Rpb25zX2RpY3Q6IGRpY3Rpb25hcnkga2V5ZWQgb24gaW5wdXQgbmFtZSwgd2hpY2ggbWFwcyB0byBhIGxpc3Qgb2YKLSAgICAgIGRpY3RzIGRlc2NyaWJpbmcgdGhlIGFjdGlvbnMgYXR0YWNoZWQgdG8gdGhhdCBpbnB1dCBmaWxlLgotICAgIGlucHV0czogbGlzdCBvZiBpbnB1dHMKLSAgICBvdXRwdXRzOiBsaXN0IG9mIG91dHB1dHMKLSAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gb2YgdGhlIGFjdGlvbgotICAgIGNvbW1hbmQ6IGNvbW1hbmQgbGluZSB0byBleGVjdXRlCi0gICIiIgotICAjIFJlcXVpcmUgdGhlcmUgdG8gYmUgYXQgbGVhc3Qgb25lIGlucHV0IChjYWxsIHNpdGVzIHdpbGwgZW5zdXJlIHRoaXMpLgotICBhc3NlcnQgaW5wdXRzCi0KLSAgYWN0aW9uID0gewotICAgICAgJ2lucHV0cyc6IGlucHV0cywKLSAgICAgICdvdXRwdXRzJzogb3V0cHV0cywKLSAgICAgICdkZXNjcmlwdGlvbic6IGRlc2NyaXB0aW9uLAotICAgICAgJ2NvbW1hbmQnOiBjb21tYW5kLAotICB9Ci0KLSAgIyBQaWNrIHdoZXJlIHRvIHN0aWNrIHRoaXMgYWN0aW9uLgotICAjIFdoaWxlIGxlc3MgdGhhbiBvcHRpbWFsIGluIHRlcm1zIG9mIGJ1aWxkIHRpbWUsIGF0dGFjaCB0aGVtIHRvIHRoZSBmaXJzdAotICAjIGlucHV0IGZvciBub3cuCi0gIGNob3Nlbl9pbnB1dCA9IGlucHV0c1swXQotCi0gICMgQWRkIGl0IHRoZXJlLgotICBpZiBjaG9zZW5faW5wdXQgbm90IGluIGFjdGlvbnNfZGljdDoKLSAgICBhY3Rpb25zX2RpY3RbY2hvc2VuX2lucHV0XSA9IFtdCi0gIGFjdGlvbnNfZGljdFtjaG9zZW5faW5wdXRdLmFwcGVuZChhY3Rpb24pCi0KLQotZGVmIF9BZGRDdXN0b21CdWlsZFRvb2xGb3JNU1ZTKHAsIHNwZWMsIHByaW1hcnlfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzLCBvdXRwdXRzLCBkZXNjcmlwdGlvbiwgY21kKToKLSAgIiIiQWRkIGEgY3VzdG9tIGJ1aWxkIHRvb2wgdG8gZXhlY3V0ZSBzb21ldGhpbmcuCi0KLSAgQXJndW1lbnRzOgotICAgIHA6IHRoZSB0YXJnZXQgcHJvamVjdAotICAgIHNwZWM6IHRoZSB0YXJnZXQgcHJvamVjdCBkaWN0Ci0gICAgcHJpbWFyeV9pbnB1dDogaW5wdXQgZmlsZSB0byBhdHRhY2ggdGhlIGJ1aWxkIHRvb2wgdG8KLSAgICBpbnB1dHM6IGxpc3Qgb2YgaW5wdXRzCi0gICAgb3V0cHV0czogbGlzdCBvZiBvdXRwdXRzCi0gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24KLSAgICBjbWQ6IGNvbW1hbmQgbGluZSB0byBleGVjdXRlCi0gICIiIgotICBpbnB1dHMgPSBfRml4UGF0aHMoaW5wdXRzKQotICBvdXRwdXRzID0gX0ZpeFBhdGhzKG91dHB1dHMpCi0gIHRvb2wgPSBNU1ZTUHJvamVjdC5Ub29sKAotICAgICAgJ1ZDQ3VzdG9tQnVpbGRUb29sJywKLSAgICAgIHsnRGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbiwKLSAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6ICc7Jy5qb2luKGlucHV0cyksCi0gICAgICAgJ091dHB1dHMnOiAnOycuam9pbihvdXRwdXRzKSwKLSAgICAgICAnQ29tbWFuZExpbmUnOiBjbWQsCi0gICAgICB9KQotICAjIEFkZCB0byB0aGUgcHJvcGVydGllcyBvZiBwcmltYXJ5IGlucHV0IGZvciBlYWNoIGNvbmZpZy4KLSAgZm9yIGNvbmZpZ19uYW1lLCBjX2RhdGEgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICBwLkFkZEZpbGVDb25maWcoX0ZpeFBhdGgocHJpbWFyeV9pbnB1dCksCi0gICAgICAgICAgICAgICAgICAgIF9Db25maWdGdWxsTmFtZShjb25maWdfbmFtZSwgY19kYXRhKSwgdG9vbHM9W3Rvb2xdKQotCi0KLWRlZiBfQWRkQWNjdW11bGF0ZWRBY3Rpb25zVG9NU1ZTKHAsIHNwZWMsIGFjdGlvbnNfZGljdCk6Ci0gICIiIkFkZCBhY3Rpb25zIGFjY3VtdWxhdGVkIGludG8gYW4gYWN0aW9uc19kaWN0LCBtZXJnaW5nIGFzIG5lZWRlZC4KLQotICBBcmd1bWVudHM6Ci0gICAgcDogdGhlIHRhcmdldCBwcm9qZWN0Ci0gICAgc3BlYzogdGhlIHRhcmdldCBwcm9qZWN0IGRpY3QKLSAgICBhY3Rpb25zX2RpY3Q6IGRpY3Rpb25hcnkga2V5ZWQgb24gaW5wdXQgbmFtZSwgd2hpY2ggbWFwcyB0byBhIGxpc3Qgb2YKLSAgICAgICAgZGljdHMgZGVzY3JpYmluZyB0aGUgYWN0aW9ucyBhdHRhY2hlZCB0byB0aGF0IGlucHV0IGZpbGUuCi0gICIiIgotICBmb3IgcHJpbWFyeV9pbnB1dCBpbiBhY3Rpb25zX2RpY3Q6Ci0gICAgaW5wdXRzID0gc2V0KCkKLSAgICBvdXRwdXRzID0gc2V0KCkKLSAgICBkZXNjcmlwdGlvbnMgPSBbXQotICAgIGNvbW1hbmRzID0gW10KLSAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnNfZGljdFtwcmltYXJ5X2lucHV0XToKLSAgICAgIGlucHV0cy51cGRhdGUoc2V0KGFjdGlvblsnaW5wdXRzJ10pKQotICAgICAgb3V0cHV0cy51cGRhdGUoc2V0KGFjdGlvblsnb3V0cHV0cyddKSkKLSAgICAgIGRlc2NyaXB0aW9ucy5hcHBlbmQoYWN0aW9uWydkZXNjcmlwdGlvbiddKQotICAgICAgY29tbWFuZHMuYXBwZW5kKGFjdGlvblsnY29tbWFuZCddKQotICAgICMgQWRkIHRoZSBjdXN0b20gYnVpbGQgc3RlcCBmb3Igb25lIGlucHV0IGZpbGUuCi0gICAgZGVzY3JpcHRpb24gPSAnLCBhbmQgYWxzbyAnLmpvaW4oZGVzY3JpcHRpb25zKQotICAgIGNvbW1hbmQgPSAnXHJcbicuam9pbihjb21tYW5kcykKLSAgICBfQWRkQ3VzdG9tQnVpbGRUb29sRm9yTVNWUyhwLCBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfaW5wdXQ9cHJpbWFyeV9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM9aW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHM9b3V0cHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ9Y29tbWFuZCkKLQotCi1kZWYgX1J1bGVFeHBhbmRQYXRoKHBhdGgsIGlucHV0X2ZpbGUpOgotICAiIiJHaXZlbiB0aGUgaW5wdXQgZmlsZSB0byB3aGljaCBhIHJ1bGUgYXBwbGllZCwgc3RyaW5nIHN1YnN0aXR1dGUgYSBwYXRoLgotCi0gIEFyZ3VtZW50czoKLSAgICBwYXRoOiBhIHBhdGggdG8gc3RyaW5nIGV4cGFuZAotICAgIGlucHV0X2ZpbGU6IHRoZSBmaWxlIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZWQuCi0gIFJldHVybnM6Ci0gICAgVGhlIHN0cmluZyBzdWJzdGl0dXRlZCBwYXRoLgotICAiIiIKLSAgcGF0aCA9IHBhdGgucmVwbGFjZSgnJChJbnB1dE5hbWUpJywKLSAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguc3BsaXQoaW5wdXRfZmlsZSlbMV0pWzBdKQotICBwYXRoID0gcGF0aC5yZXBsYWNlKCckKElucHV0RGlyKScsIG9zLnBhdGguZGlybmFtZShpbnB1dF9maWxlKSkKLSAgcGF0aCA9IHBhdGgucmVwbGFjZSgnJChJbnB1dEV4dCknLAotICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChpbnB1dF9maWxlKVsxXSlbMV0pCi0gIHBhdGggPSBwYXRoLnJlcGxhY2UoJyQoSW5wdXRGaWxlTmFtZSknLCBvcy5wYXRoLnNwbGl0KGlucHV0X2ZpbGUpWzFdKQotICBwYXRoID0gcGF0aC5yZXBsYWNlKCckKElucHV0UGF0aCknLCBpbnB1dF9maWxlKQotICByZXR1cm4gcGF0aAotCi0KLWRlZiBfRmluZFJ1bGVUcmlnZ2VyRmlsZXMocnVsZSwgc291cmNlcyk6Ci0gICIiIkZpbmQgdGhlIGxpc3Qgb2YgZmlsZXMgd2hpY2ggYSBwYXJ0aWN1bGFyIHJ1bGUgYXBwbGllcyB0by4KLQotICBBcmd1bWVudHM6Ci0gICAgcnVsZTogdGhlIHJ1bGUgaW4gcXVlc3Rpb24KLSAgICBzb3VyY2VzOiB0aGUgc2V0IG9mIGFsbCBrbm93biBzb3VyY2UgZmlsZXMgZm9yIHRoaXMgcHJvamVjdAotICBSZXR1cm5zOgotICAgIFRoZSBsaXN0IG9mIHNvdXJjZXMgdGhhdCB0cmlnZ2VyIGEgcGFydGljdWxhciBydWxlLgotICAiIiIKLSAgcnVsZV9leHQgPSBydWxlWydleHRlbnNpb24nXQotICByZXR1cm4gW3MgZm9yIHMgaW4gc291cmNlcyBpZiBzLmVuZHN3aXRoKCcuJyArIHJ1bGVfZXh0KV0KLQotCi1kZWYgX1J1bGVJbnB1dHNBbmRPdXRwdXRzKHJ1bGUsIHRyaWdnZXJfZmlsZSk6Ci0gICIiIkZpbmQgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBnZW5lcmF0ZWQgYnkgYSBydWxlLgotCi0gIEFyZ3VtZW50czoKLSAgICBydWxlOiB0aGUgcnVsZSBpbiBxdWVzdGlvbi4KLSAgICB0cmlnZ2VyX2ZpbGU6IHRoZSBtYWluIHRyaWdnZXIgZm9yIHRoaXMgcnVsZS4KLSAgUmV0dXJuczoKLSAgICBUaGUgcGFpciBvZiAoaW5wdXRzLCBvdXRwdXRzKSBpbnZvbHZlZCBpbiB0aGlzIHJ1bGUuCi0gICIiIgotICByYXdfaW5wdXRzID0gX0ZpeFBhdGhzKHJ1bGUuZ2V0KCdpbnB1dHMnLCBbXSkpCi0gIHJhd19vdXRwdXRzID0gX0ZpeFBhdGhzKHJ1bGUuZ2V0KCdvdXRwdXRzJywgW10pKQotICBpbnB1dHMgPSBzZXQoKQotICBvdXRwdXRzID0gc2V0KCkKLSAgaW5wdXRzLmFkZCh0cmlnZ2VyX2ZpbGUpCi0gIGZvciBpIGluIHJhd19pbnB1dHM6Ci0gICAgaW5wdXRzLmFkZChfUnVsZUV4cGFuZFBhdGgoaSwgdHJpZ2dlcl9maWxlKSkKLSAgZm9yIG8gaW4gcmF3X291dHB1dHM6Ci0gICAgb3V0cHV0cy5hZGQoX1J1bGVFeHBhbmRQYXRoKG8sIHRyaWdnZXJfZmlsZSkpCi0gIHJldHVybiAoaW5wdXRzLCBvdXRwdXRzKQotCi0KLWRlZiBfR2VuZXJhdGVOYXRpdmVSdWxlc0Zvck1TVlMocCwgcnVsZXMsIG91dHB1dF9kaXIsIHNwZWMsIG9wdGlvbnMpOgotICAiIiJHZW5lcmF0ZSBhIG5hdGl2ZSBydWxlcyBmaWxlLgotCi0gIEFyZ3VtZW50czoKLSAgICBwOiB0aGUgdGFyZ2V0IHByb2plY3QKLSAgICBydWxlczogdGhlIHNldCBvZiBydWxlcyB0byBpbmNsdWRlCi0gICAgb3V0cHV0X2RpcjogdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgcHJvamVjdC9neXAgcmVzaWRlcwotICAgIHNwZWM6IHRoZSBwcm9qZWN0IGRpY3QKLSAgICBvcHRpb25zOiBnbG9iYWwgZ2VuZXJhdG9yIG9wdGlvbnMKLSAgIiIiCi0gIHJ1bGVzX2ZpbGVuYW1lID0gJyVzJXMucnVsZXMnICUgKHNwZWNbJ3RhcmdldF9uYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3VmZml4KQotICBydWxlc19maWxlID0gTVNWU1Rvb2xGaWxlLldyaXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgcnVsZXNfZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjWyd0YXJnZXRfbmFtZSddKQotICAjIEFkZCBlYWNoIHJ1bGUuCi0gIGZvciByIGluIHJ1bGVzOgotICAgIHJ1bGVfbmFtZSA9IHJbJ3J1bGVfbmFtZSddCi0gICAgcnVsZV9leHQgPSByWydleHRlbnNpb24nXQotICAgIGlucHV0cyA9IF9GaXhQYXRocyhyLmdldCgnaW5wdXRzJywgW10pKQotICAgIG91dHB1dHMgPSBfRml4UGF0aHMoci5nZXQoJ291dHB1dHMnLCBbXSkpCi0gICAgIyBTa2lwIGEgcnVsZSB3aXRoIG5vIGFjdGlvbiBhbmQgbm8gaW5wdXRzLgotICAgIGlmICdhY3Rpb24nIG5vdCBpbiByIGFuZCBub3Qgci5nZXQoJ3J1bGVfc291cmNlcycsIFtdKToKLSAgICAgIGNvbnRpbnVlCi0gICAgY21kID0gX0J1aWxkQ29tbWFuZExpbmVGb3JSdWxlKHNwZWMsIHIsIGhhc19pbnB1dF9wYXRoPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3NldHVwX2Vudj1UcnVlKQotICAgIHJ1bGVzX2ZpbGUuQWRkQ3VzdG9tQnVpbGRSdWxlKG5hbWU9cnVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXIuZ2V0KCdtZXNzYWdlJywgcnVsZV9uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25zPVtydWxlX2V4dF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kZXBlbmRlbmNpZXM9aW5wdXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHM9b3V0cHV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ9Y21kKQotICAjIFdyaXRlIG91dCBydWxlcyBmaWxlLgotICBydWxlc19maWxlLldyaXRlSWZDaGFuZ2VkKCkKLQotICAjIEFkZCBydWxlcyBmaWxlIHRvIHByb2plY3QuCi0gIHAuQWRkVG9vbEZpbGUocnVsZXNfZmlsZW5hbWUpCi0KLQotZGVmIF9DeWd3aW5pZnkocGF0aCk6Ci0gIHBhdGggPSBwYXRoLnJlcGxhY2UoJyQoT3V0RGlyKScsICckKE91dERpckN5Z3dpbiknKQotICBwYXRoID0gcGF0aC5yZXBsYWNlKCckKEludERpciknLCAnJChJbnREaXJDeWd3aW4pJykKLSAgcmV0dXJuIHBhdGgKLQotCi1kZWYgX0dlbmVyYXRlRXh0ZXJuYWxSdWxlcyhydWxlcywgb3V0cHV0X2Rpciwgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsIG9wdGlvbnMsIGFjdGlvbnNfdG9fYWRkKToKLSAgIiIiR2VuZXJhdGUgYW4gZXh0ZXJuYWwgbWFrZWZpbGUgdG8gZG8gYSBzZXQgb2YgcnVsZXMuCi0KLSAgQXJndW1lbnRzOgotICAgIHJ1bGVzOiB0aGUgbGlzdCBvZiBydWxlcyB0byBpbmNsdWRlCi0gICAgb3V0cHV0X2RpcjogcGF0aCBjb250YWluaW5nIHByb2plY3QgYW5kIGd5cCBmaWxlcwotICAgIHNwZWM6IHByb2plY3Qgc3BlY2lmaWNhdGlvbiBkYXRhCi0gICAgc291cmNlczogc2V0IG9mIHNvdXJjZXMga25vd24KLSAgICBvcHRpb25zOiBnbG9iYWwgZ2VuZXJhdG9yIG9wdGlvbnMKLSAgICBhY3Rpb25zX3RvX2FkZDogVGhlIGxpc3Qgb2YgYWN0aW9ucyB3ZSB3aWxsIGFkZCB0by4KLSAgIiIiCi0gIGZpbGVuYW1lID0gJyVzX3J1bGVzJXMubWsnICUgKHNwZWNbJ3RhcmdldF9uYW1lJ10sIG9wdGlvbnMuc3VmZml4KQotICBta19maWxlID0gZ3lwLmNvbW1vbi5Xcml0ZU9uRGlmZihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgZmlsZW5hbWUpKQotICAjIEZpbmQgY3lnd2luIHN0eWxlIHZlcnNpb25zIG9mIHNvbWUgcGF0aHMuCi0gIG1rX2ZpbGUud3JpdGUoJ091dERpckN5Z3dpbjo9JChzaGVsbCBjeWdwYXRoIC11ICIkKE91dERpcikiKVxuJykKLSAgbWtfZmlsZS53cml0ZSgnSW50RGlyQ3lnd2luOj0kKHNoZWxsIGN5Z3BhdGggLXUgIiQoSW50RGlyKSIpXG4nKQotICAjIEdhdGhlciBzdHVmZiBuZWVkZWQgdG8gZW1pdCBhbGw6IHRhcmdldC4KLSAgYWxsX2lucHV0cyA9IHNldCgpCi0gIGFsbF9vdXRwdXRzID0gc2V0KCkKLSAgYWxsX291dHB1dF9kaXJzID0gc2V0KCkKLSAgZmlyc3Rfb3V0cHV0cyA9IFtdCi0gIGZvciBydWxlIGluIHJ1bGVzOgotICAgIHRyaWdnZXJfZmlsZXMgPSBfRmluZFJ1bGVUcmlnZ2VyRmlsZXMocnVsZSwgc291cmNlcykKLSAgICBmb3IgdGYgaW4gdHJpZ2dlcl9maWxlczoKLSAgICAgIGlucHV0cywgb3V0cHV0cyA9IF9SdWxlSW5wdXRzQW5kT3V0cHV0cyhydWxlLCB0ZikKLSAgICAgIGFsbF9pbnB1dHMudXBkYXRlKHNldChpbnB1dHMpKQotICAgICAgYWxsX291dHB1dHMudXBkYXRlKHNldChvdXRwdXRzKSkKLSAgICAgICMgT25seSB1c2Ugb25lIHRhcmdldCBmcm9tIGVhY2ggcnVsZSBhcyB0aGUgZGVwZW5kZW5jeSBmb3IKLSAgICAgICMgJ2FsbCcgc28gd2UgZG9uJ3QgdHJ5IHRvIGJ1aWxkIGVhY2ggcnVsZSBtdWx0aXBsZSB0aW1lcy4KLSAgICAgIGZpcnN0X291dHB1dHMuYXBwZW5kKGxpc3Qob3V0cHV0cylbMF0pCi0gICAgICAjIEdldCB0aGUgdW5pcXVlIG91dHB1dCBkaXJlY3RvcmllcyBmb3IgdGhpcyBydWxlLgotICAgICAgb3V0cHV0X2RpcnMgPSBbb3MucGF0aC5zcGxpdChpKVswXSBmb3IgaSBpbiBvdXRwdXRzXQotICAgICAgZm9yIG9kIGluIG91dHB1dF9kaXJzOgotICAgICAgICBhbGxfb3V0cHV0X2RpcnMuYWRkKG9kKQotICBmaXJzdF9vdXRwdXRzX2N5ZyA9IFtfQ3lnd2luaWZ5KGkpIGZvciBpIGluIGZpcnN0X291dHB1dHNdCi0gICMgV3JpdGUgb3V0IGFsbDogdGFyZ2V0LCBpbmNsdWRpbmcgbWtkaXIgZm9yIGVhY2ggb3V0cHV0IGRpcmVjdG9yeS4KLSAgbWtfZmlsZS53cml0ZSgnYWxsOiAlc1xuJyAlICcgJy5qb2luKGZpcnN0X291dHB1dHNfY3lnKSkKLSAgZm9yIG9kIGluIGFsbF9vdXRwdXRfZGlyczoKLSAgICBpZiBvZDoKLSAgICAgIG1rX2ZpbGUud3JpdGUoJ1x0bWtkaXIgLXAgYGN5Z3BhdGggLXUgIiVzImBcbicgJSBvZCkKLSAgbWtfZmlsZS53cml0ZSgnXG4nKQotICAjIERlZmluZSBob3cgZWFjaCBvdXRwdXQgaXMgZ2VuZXJhdGVkLgotICBmb3IgcnVsZSBpbiBydWxlczoKLSAgICB0cmlnZ2VyX2ZpbGVzID0gX0ZpbmRSdWxlVHJpZ2dlckZpbGVzKHJ1bGUsIHNvdXJjZXMpCi0gICAgZm9yIHRmIGluIHRyaWdnZXJfZmlsZXM6Ci0gICAgICAjIEdldCBhbGwgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBmb3IgdGhpcyBydWxlIGZvciB0aGlzIHRyaWdnZXIgZmlsZS4KLSAgICAgIGlucHV0cywgb3V0cHV0cyA9IF9SdWxlSW5wdXRzQW5kT3V0cHV0cyhydWxlLCB0ZikKLSAgICAgIGlucHV0cyA9IFtfQ3lnd2luaWZ5KGkpIGZvciBpIGluIGlucHV0c10KLSAgICAgIG91dHB1dHMgPSBbX0N5Z3dpbmlmeShpKSBmb3IgaSBpbiBvdXRwdXRzXQotICAgICAgIyBQcmVwYXJlIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoaXMgcnVsZS4KLSAgICAgIGNtZCA9IFtfUnVsZUV4cGFuZFBhdGgoYywgdGYpIGZvciBjIGluIHJ1bGVbJ2FjdGlvbiddXQotICAgICAgY21kID0gWyciJXMiJyAlIGkgZm9yIGkgaW4gY21kXQotICAgICAgY21kID0gJyAnLmpvaW4oY21kKQotICAgICAgIyBBZGQgaXQgdG8gdGhlIG1ha2VmaWxlLgotICAgICAgbWtfZmlsZS53cml0ZSgnJXM6ICVzXG4nICUgKCcgJy5qb2luKG91dHB1dHMpLCAnICcuam9pbihpbnB1dHMpKSkKLSAgICAgIG1rX2ZpbGUud3JpdGUoJ1x0JXNcblxuJyAlIGNtZCkKLSAgIyBDbG9zZSB1cCB0aGUgZmlsZS4KLSAgbWtfZmlsZS5jbG9zZSgpCi0KLSAgIyBBZGQgbWFrZWZpbGUgdG8gbGlzdCBvZiBzb3VyY2VzLgotICBzb3VyY2VzLmFkZChmaWxlbmFtZSkKLSAgIyBBZGQgYSBidWlsZCBhY3Rpb24gdG8gY2FsbCBtYWtlZmlsZS4KLSAgY21kID0gWydtYWtlJywKLSAgICAgICAgICdPdXREaXI9JChPdXREaXIpJywKLSAgICAgICAgICdJbnREaXI9JChJbnREaXIpJywKLSAgICAgICAgICctaicsICcke05VTUJFUl9PRl9QUk9DRVNTT1JTX1BMVVNfMX0nLAotICAgICAgICAgJy1mJywgZmlsZW5hbWVdCi0gIGNtZCA9IF9CdWlsZENvbW1hbmRMaW5lRm9yUnVsZVJhdyhzcGVjLCBjbWQsIFRydWUsIEZhbHNlLCBUcnVlLCBUcnVlKQotICAjIEluc2VydCBtYWtlZmlsZSBhcyAwJ3RoIGlucHV0LCBzbyBpdCBnZXRzIHRoZSBhY3Rpb24gYXR0YWNoZWQgdGhlcmUsCi0gICMgYXMgdGhpcyBpcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCBmcm9tIGluIHRoZSBJREUuCi0gIGFsbF9pbnB1dHMgPSBsaXN0KGFsbF9pbnB1dHMpCi0gIGFsbF9pbnB1dHMuaW5zZXJ0KDAsIGZpbGVuYW1lKQotICBfQWRkQWN0aW9uU3RlcChhY3Rpb25zX3RvX2FkZCwKLSAgICAgICAgICAgICAgICAgaW5wdXRzPV9GaXhQYXRocyhhbGxfaW5wdXRzKSwKLSAgICAgICAgICAgICAgICAgb3V0cHV0cz1fRml4UGF0aHMoYWxsX291dHB1dHMpLAotICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nUnVubmluZyBleHRlcm5hbCBydWxlcyBmb3IgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgIHNwZWNbJ3RhcmdldF9uYW1lJ10sCi0gICAgICAgICAgICAgICAgIGNvbW1hbmQ9Y21kKQotCi0KLWRlZiBfRXNjYXBlRW52aXJvbm1lbnRWYXJpYWJsZUV4cGFuc2lvbihzKToKLSAgIiIiRXNjYXBlcyAlIGNoYXJhY3RlcnMuCi0KLSAgRXNjYXBlcyBhbnkgJSBjaGFyYWN0ZXJzIHNvIHRoYXQgV2luZG93cy1zdHlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICBleHBhbnNpb25zIHdpbGwgbGVhdmUgdGhlbSBhbG9uZS4KLSAgU2VlIGh0dHA6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vVmlzdWFsU3R1ZGlvL2ZlZWRiYWNrL2RldGFpbHMvMTA2MTI3L2NsLWQtbmFtZS10ZXh0LWNvbnRhaW5pbmctcGVyY2VudGFnZS1jaGFyYWN0ZXJzLWRvZXNudC1jb21waWxlCi0gIHRvIHVuZGVyc3RhbmQgd2h5IHdlIGhhdmUgdG8gZG8gdGhpcy4KLQotICBBcmdzOgotICAgICAgczogVGhlIHN0cmluZyB0byBiZSBlc2NhcGVkLgotCi0gIFJldHVybnM6Ci0gICAgICBUaGUgZXNjYXBlZCBzdHJpbmcuCi0gICIiIgotICBzID0gcy5yZXBsYWNlKCclJywgJyUlJykKLSAgcmV0dXJuIHMKLQotCi1xdW90ZV9yZXBsYWNlcl9yZWdleCA9IHJlLmNvbXBpbGUocicoXFwqKSInKQotCi0KLWRlZiBfRXNjYXBlQ29tbWFuZExpbmVBcmd1bWVudEZvck1TVlMocyk6Ci0gICIiIkVzY2FwZXMgYSBXaW5kb3dzIGNvbW1hbmQtbGluZSBhcmd1bWVudC4KLQotICBTbyB0aGF0IHRoZSBXaW4zMiBDb21tYW5kTGluZVRvQXJndiBmdW5jdGlvbiB3aWxsIHR1cm4gdGhlIGVzY2FwZWQgcmVzdWx0IGJhY2sKLSAgaW50byB0aGUgb3JpZ2luYWwgc3RyaW5nLgotICBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5LzE3dzV5a2Z0LmFzcHgKLSAgKCJQYXJzaW5nIEMrKyBDb21tYW5kLUxpbmUgQXJndW1lbnRzIikgdG8gdW5kZXJzdGFuZCB3aHkgd2UgaGF2ZSB0byBkbwotICB0aGlzLgotCi0gIEFyZ3M6Ci0gICAgICBzOiB0aGUgc3RyaW5nIHRvIGJlIGVzY2FwZWQuCi0gIFJldHVybnM6Ci0gICAgICB0aGUgZXNjYXBlZCBzdHJpbmcuCi0gICIiIgotCi0gIGRlZiBfUmVwbGFjZShtYXRjaCk6Ci0gICAgIyBGb3IgYSBsaXRlcmFsIHF1b3RlLCBDb21tYW5kTGluZVRvQXJndiByZXF1aXJlcyBhbiBvZGQgbnVtYmVyIG9mCi0gICAgIyBiYWNrc2xhc2hlcyBwcmVjZWRpbmcgaXQsIGFuZCBpdCBwcm9kdWNlcyBoYWxmIGFzIG1hbnkgbGl0ZXJhbCBiYWNrc2xhc2hlcwotICAgICMgKHJvdW5kZWQgZG93bikuIFNvIHdlIG5lZWQgdG8gcHJvZHVjZSAybisxIGJhY2tzbGFzaGVzLgotICAgIHJldHVybiAyICogbWF0Y2guZ3JvdXAoMSkgKyAnXFwiJwotCi0gICMgRXNjYXBlIGFsbCBxdW90ZXMgc28gdGhhdCB0aGV5IGFyZSBpbnRlcnByZXRlZCBsaXRlcmFsbHkuCi0gIHMgPSBxdW90ZV9yZXBsYWNlcl9yZWdleC5zdWIoX1JlcGxhY2UsIHMpCi0gICMgTm93IGFkZCB1bmVzY2FwZWQgcXVvdGVzIHNvIHRoYXQgYW55IHdoaXRlc3BhY2UgaXMgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LgotICBzID0gJyInICsgcyArICciJwotICByZXR1cm4gcwotCi0KLWRlbGltaXRlcnNfcmVwbGFjZXJfcmVnZXggPSByZS5jb21waWxlKHInKFxcKikoWyw7XSspJykKLQotCi1kZWYgX0VzY2FwZVZDUHJvakNvbW1hbmRMaW5lQXJnTGlzdEl0ZW0ocyk6Ci0gICIiIkVzY2FwZXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgTVNWUy4KLQotICBUaGUgVkNQcm9qIGZvcm1hdCBzdG9yZXMgc3RyaW5nIGxpc3RzIGluIGEgc2luZ2xlIHN0cmluZyB1c2luZyBjb21tYXMgYW5kCi0gIHNlbWktY29sb25zIGFzIHNlcGFyYXRvcnMsIHdoaWNoIG11c3QgYmUgcXVvdGVkIGlmIHRoZXkgYXJlIHRvIGJlCi0gIGludGVycHJldGVkIGxpdGVyYWxseS4gSG93ZXZlciwgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBtYXkgYWxyZWFkeSBoYXZlCi0gIHF1b3RlcywgYW5kIHRoZSBWQ1Byb2ogcGFyc2VyIGlzIGlnbm9yYW50IG9mIHRoZSBiYWNrc2xhc2ggZXNjYXBpbmcKLSAgY29udmVudGlvbiB1c2VkIGJ5IENvbW1hbmRMaW5lVG9Bcmd2LCBzbyB0aGUgY29tbWFuZC1saW5lIHF1b3RlcyBhbmQgdGhlCi0gIFZDUHJvaiBxdW90ZXMgbWF5IG5vdCBiZSB0aGUgc2FtZSBxdW90ZXMuIFNvIHRvIHN0b3JlIGEgZ2VuZXJhbAotICBjb21tYW5kLWxpbmUgYXJndW1lbnQgaW4gYSBWQ1Byb2ogbGlzdCwgd2UgbmVlZCB0byBwYXJzZSB0aGUgZXhpc3RpbmcKLSAgcXVvdGluZyBhY2NvcmRpbmcgdG8gVkNQcm9qJ3MgY29udmVudGlvbiBhbmQgcXVvdGUgYW55IGRlbGltaXRlcnMgdGhhdCBhcmUKLSAgbm90IGFscmVhZHkgcXVvdGVkIGJ5IHRoYXQgY29udmVudGlvbi4gVGhlIHF1b3RlcyB0aGF0IHdlIGFkZCB3aWxsIGFsc28gYmUKLSAgc2VlbiBieSBDb21tYW5kTGluZVRvQXJndiwgc28gaWYgYmFja3NsYXNoZXMgcHJlY2VkZSB0aGVtIHRoZW4gd2UgYWxzbyBoYXZlCi0gIHRvIGVzY2FwZSB0aG9zZSBiYWNrc2xhc2hlcyBhY2NvcmRpbmcgdG8gdGhlIENvbW1hbmRMaW5lVG9Bcmd2Ci0gIGNvbnZlbnRpb24uCi0KLSAgQXJnczoKLSAgICAgIHM6IHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC4KLSAgUmV0dXJuczoKLSAgICAgIHRoZSBlc2NhcGVkIHN0cmluZy4KLSAgIiIiCi0KLSAgZGVmIF9SZXBsYWNlKG1hdGNoKToKLSAgICAjIEZvciBhIG5vbi1saXRlcmFsIHF1b3RlLCBDb21tYW5kTGluZVRvQXJndiByZXF1aXJlcyBhbiBldmVuIG51bWJlciBvZgotICAgICMgYmFja3NsYXNoZXMgcHJlY2VkaW5nIGl0LCBhbmQgaXQgcHJvZHVjZXMgaGFsZiBhcyBtYW55IGxpdGVyYWwKLSAgICAjIGJhY2tzbGFzaGVzLiBTbyB3ZSBuZWVkIHRvIHByb2R1Y2UgMm4gYmFja3NsYXNoZXMuCi0gICAgcmV0dXJuIDIgKiBtYXRjaC5ncm91cCgxKSArICciJyArIG1hdGNoLmdyb3VwKDIpICsgJyInCi0KLSAgc2VnbWVudHMgPSBzLnNwbGl0KCciJykKLSAgIyBUaGUgdW5xdW90ZWQgc2VnbWVudHMgYXJlIGF0IHRoZSBldmVuLW51bWJlcmVkIGluZGljZXMuCi0gIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWdtZW50cyksIDIpOgotICAgIHNlZ21lbnRzW2ldID0gZGVsaW1pdGVyc19yZXBsYWNlcl9yZWdleC5zdWIoX1JlcGxhY2UsIHNlZ21lbnRzW2ldKQotICAjIENvbmNhdGVuYXRlIGJhY2sgaW50byBhIHNpbmdsZSBzdHJpbmcKLSAgcyA9ICciJy5qb2luKHNlZ21lbnRzKQotICBpZiBsZW4oc2VnbWVudHMpICUgMiA9PSAwOgotICAgICMgU3RyaW5nIGVuZHMgd2hpbGUgc3RpbGwgcXVvdGVkIGFjY29yZGluZyB0byBWQ1Byb2oncyBjb252ZW50aW9uLiBUaGlzCi0gICAgIyBtZWFucyB0aGUgZGVsaW1pdGVyIGFuZCB0aGUgbmV4dCBsaXN0IGl0ZW0gdGhhdCBmb2xsb3cgdGhpcyBvbmUgaW4gdGhlCi0gICAgIyAudmNwcm9qIGZpbGUgd2lsbCBiZSBtaXNpbnRlcnByZXRlZCBhcyBwYXJ0IG9mIHRoaXMgaXRlbS4gVGhlcmUgaXMgbm90aGluZwotICAgICMgd2UgY2FuIGRvIGFib3V0IHRoaXMuIEFkZGluZyBhbiBleHRyYSBxdW90ZSB3b3VsZCBjb3JyZWN0IHRoZSBwcm9ibGVtIGluCi0gICAgIyB0aGUgVkNQcm9qIGJ1dCBjYXVzZSB0aGUgc2FtZSBwcm9ibGVtIG9uIHRoZSBmaW5hbCBjb21tYW5kLWxpbmUuIE1vdmluZwotICAgICMgdGhlIGl0ZW0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBkb2VzIHdvcmtzLCBidXQgdGhhdCdzIG9ubHkgcG9zc2libGUgaWYKLSAgICAjIHRoZXJlJ3Mgb25seSBvbmUgc3VjaCBpdGVtLiBMZXQncyBqdXN0IHdhcm4gdGhlIHVzZXIuCi0gICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKCdXYXJuaW5nOiBNU1ZTIG1heSBtaXNpbnRlcnByZXQgdGhlIG9kZCBudW1iZXIgb2YgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdxdW90ZXMgaW4gJyArIHMpCi0gIHJldHVybiBzCi0KLQotZGVmIF9Fc2NhcGVDcHBEZWZpbmVGb3JNU1ZTKHMpOgotICAiIiJFc2NhcGVzIGEgQ1BQIGRlZmluZSBzbyB0aGF0IGl0IHdpbGwgcmVhY2ggdGhlIGNvbXBpbGVyIHVuYWx0ZXJlZC4iIiIKLSAgcyA9IF9Fc2NhcGVFbnZpcm9ubWVudFZhcmlhYmxlRXhwYW5zaW9uKHMpCi0gIHMgPSBfRXNjYXBlQ29tbWFuZExpbmVBcmd1bWVudEZvck1TVlMocykKLSAgcyA9IF9Fc2NhcGVWQ1Byb2pDb21tYW5kTGluZUFyZ0xpc3RJdGVtKHMpCi0gICMgY2wuZXhlIHJlcGxhY2VzIGxpdGVyYWwgIyBjaGFyYWN0ZXJzIHdpdGggPSBpbiBwcmVwcm9jZXNvciBkZWZpbml0aW9ucyBmb3IKLSAgIyBzb21lIHJlYXNvbi4gT2N0YWwtZW5jb2RlIHRvIHdvcmsgYXJvdW5kIHRoYXQuCi0gIHMgPSBzLnJlcGxhY2UoJyMnLCAnXFwlMDNvJyAlIG9yZCgnIycpKQotICByZXR1cm4gcwotCi0KLXF1b3RlX3JlcGxhY2VyX3JlZ2V4MiA9IHJlLmNvbXBpbGUocicoXFwrKSInKQotCi0KLWRlZiBfRXNjYXBlQ29tbWFuZExpbmVBcmd1bWVudEZvck1TQnVpbGQocyk6Ci0gICIiIkVzY2FwZXMgYSBXaW5kb3dzIGNvbW1hbmQtbGluZSBhcmd1bWVudCBmb3IgdXNlIGJ5IE1TQnVpbGQuIiIiCi0KLSAgZGVmIF9SZXBsYWNlKG1hdGNoKToKLSAgICByZXR1cm4gKGxlbihtYXRjaC5ncm91cCgxKSkvMio0KSonXFwnICsgJ1xcIicKLQotICAjIEVzY2FwZSBhbGwgcXVvdGVzIHNvIHRoYXQgdGhleSBhcmUgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5LgotICBzID0gcXVvdGVfcmVwbGFjZXJfcmVnZXgyLnN1YihfUmVwbGFjZSwgcykKLSAgcmV0dXJuIHMKLQotCi1kZWYgX0VzY2FwZU1TQnVpbGRTcGVjaWFsQ2hhcmFjdGVycyhzKToKLSAgZXNjYXBlX2RpY3Rpb25hcnkgPSB7Ci0gICAgICAnJSc6ICclMjUnLAotICAgICAgJyQnOiAnJTI0JywKLSAgICAgICdAJzogJyU0MCcsCi0gICAgICAiJyI6ICclMjcnLAotICAgICAgJzsnOiAnJTNCJywKLSAgICAgICc/JzogJyUzRicsCi0gICAgICAnKic6ICclMkEnCi0gICAgICB9Ci0gIHJlc3VsdCA9ICcnLmpvaW4oW2VzY2FwZV9kaWN0aW9uYXJ5LmdldChjLCBjKSBmb3IgYyBpbiBzXSkKLSAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiBfRXNjYXBlQ3BwRGVmaW5lRm9yTVNCdWlsZChzKToKLSAgIiIiRXNjYXBlcyBhIENQUCBkZWZpbmUgc28gdGhhdCBpdCB3aWxsIHJlYWNoIHRoZSBjb21waWxlciB1bmFsdGVyZWQuIiIiCi0gIHMgPSBfRXNjYXBlRW52aXJvbm1lbnRWYXJpYWJsZUV4cGFuc2lvbihzKQotICBzID0gX0VzY2FwZUNvbW1hbmRMaW5lQXJndW1lbnRGb3JNU0J1aWxkKHMpCi0gIHMgPSBfRXNjYXBlTVNCdWlsZFNwZWNpYWxDaGFyYWN0ZXJzKHMpCi0gICMgY2wuZXhlIHJlcGxhY2VzIGxpdGVyYWwgIyBjaGFyYWN0ZXJzIHdpdGggPSBpbiBwcmVwcm9jZXNvciBkZWZpbml0aW9ucyBmb3IKLSAgIyBzb21lIHJlYXNvbi4gT2N0YWwtZW5jb2RlIHRvIHdvcmsgYXJvdW5kIHRoYXQuCi0gIHMgPSBzLnJlcGxhY2UoJyMnLCAnXFwlMDNvJyAlIG9yZCgnIycpKQotICByZXR1cm4gcwotCi0KLWRlZiBfR2VuZXJhdGVSdWxlc0Zvck1TVlMocCwgb3V0cHV0X2Rpciwgb3B0aW9ucywgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcywgZXhjbHVkZWRfc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc190b19hZGQpOgotICAiIiJHZW5lcmF0ZSBhbGwgdGhlIHJ1bGVzIGZvciBhIHBhcnRpY3VsYXIgcHJvamVjdC4KLQotICBBcmd1bWVudHM6Ci0gICAgcDogdGhlIHByb2plY3QKLSAgICBvdXRwdXRfZGlyOiBkaXJlY3RvcnkgdG8gZW1pdCBydWxlcyB0bwotICAgIG9wdGlvbnM6IGdsb2JhbCBvcHRpb25zIHBhc3NlZCB0byB0aGUgZ2VuZXJhdG9yCi0gICAgc3BlYzogdGhlIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgcHJvamVjdAotICAgIHNvdXJjZXM6IHRoZSBzZXQgb2YgYWxsIGtub3duIHNvdXJjZSBmaWxlcyBpbiB0aGlzIHByb2plY3QKLSAgICBleGNsdWRlZF9zb3VyY2VzOiB0aGUgc2V0IG9mIHNvdXJjZXMgZXhjbHVkZWQgZnJvbSBub3JtYWwgcHJvY2Vzc2luZwotICAgIGFjdGlvbnNfdG9fYWRkOiBkZWZlcnJlZCBsaXN0IG9mIGFjdGlvbnMgdG8gYWRkIGluCi0gICIiIgotICBydWxlcyA9IHNwZWMuZ2V0KCdydWxlcycsIFtdKQotICBydWxlc19uYXRpdmUgPSBbciBmb3IgciBpbiBydWxlcyBpZiBub3QgaW50KHIuZ2V0KCdtc3ZzX2V4dGVybmFsX3J1bGUnLCAwKSldCi0gIHJ1bGVzX2V4dGVybmFsID0gW3IgZm9yIHIgaW4gcnVsZXMgaWYgaW50KHIuZ2V0KCdtc3ZzX2V4dGVybmFsX3J1bGUnLCAwKSldCi0KLSAgIyBIYW5kbGUgcnVsZXMgdGhhdCB1c2UgYSBuYXRpdmUgcnVsZXMgZmlsZS4KLSAgaWYgcnVsZXNfbmF0aXZlOgotICAgIF9HZW5lcmF0ZU5hdGl2ZVJ1bGVzRm9yTVNWUyhwLCBydWxlc19uYXRpdmUsIG91dHB1dF9kaXIsIHNwZWMsIG9wdGlvbnMpCi0KLSAgIyBIYW5kbGUgZXh0ZXJuYWwgcnVsZXMgKG5vbi1uYXRpdmUgcnVsZXMpLgotICBpZiBydWxlc19leHRlcm5hbDoKLSAgICBfR2VuZXJhdGVFeHRlcm5hbFJ1bGVzKHJ1bGVzX2V4dGVybmFsLCBvdXRwdXRfZGlyLCBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcywgb3B0aW9ucywgYWN0aW9uc190b19hZGQpCi0gIF9BZGp1c3RTb3VyY2VzRm9yUnVsZXMocnVsZXMsIHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMpCi0KLQotZGVmIF9BZGp1c3RTb3VyY2VzRm9yUnVsZXMocnVsZXMsIHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMpOgotICAjIEFkZCBvdXRwdXRzIGdlbmVyYXRlZCBieSBlYWNoIHJ1bGUgKGlmIGFwcGxpY2FibGUpLgotICBmb3IgcnVsZSBpbiBydWxlczoKLSAgICAjIERvbmUgaWYgbm90IHByb2Nlc3Npbmcgb3V0cHV0cyBhcyBzb3VyY2VzLgotICAgIGlmIGludChydWxlLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnLCBGYWxzZSkpOgotICAgICAgIyBBZGQgaW4gdGhlIG91dHB1dHMgZnJvbSB0aGlzIHJ1bGUuCi0gICAgICB0cmlnZ2VyX2ZpbGVzID0gX0ZpbmRSdWxlVHJpZ2dlckZpbGVzKHJ1bGUsIHNvdXJjZXMpCi0gICAgICBmb3IgdHJpZ2dlcl9maWxlIGluIHRyaWdnZXJfZmlsZXM6Ci0gICAgICAgIGlucHV0cywgb3V0cHV0cyA9IF9SdWxlSW5wdXRzQW5kT3V0cHV0cyhydWxlLCB0cmlnZ2VyX2ZpbGUpCi0gICAgICAgIGlucHV0cyA9IHNldChfRml4UGF0aHMoaW5wdXRzKSkKLSAgICAgICAgb3V0cHV0cyA9IHNldChfRml4UGF0aHMob3V0cHV0cykpCi0gICAgICAgIGlucHV0cy5yZW1vdmUoX0ZpeFBhdGgodHJpZ2dlcl9maWxlKSkKLSAgICAgICAgc291cmNlcy51cGRhdGUoaW5wdXRzKQotICAgICAgICBleGNsdWRlZF9zb3VyY2VzLnVwZGF0ZShpbnB1dHMpCi0gICAgICAgIHNvdXJjZXMudXBkYXRlKG91dHB1dHMpCi0KLQotZGVmIF9GaWx0ZXJBY3Rpb25zRnJvbUV4Y2x1ZGVkKGV4Y2x1ZGVkX3NvdXJjZXMsIGFjdGlvbnNfdG9fYWRkKToKLSAgIiIiVGFrZSBpbnB1dHMgd2l0aCBhY3Rpb25zIGF0dGFjaGVkIG91dCBvZiB0aGUgbGlzdCBvZiBleGNsdXNpb25zLgotCi0gIEFyZ3VtZW50czoKLSAgICBleGNsdWRlZF9zb3VyY2VzOiBsaXN0IG9mIHNvdXJjZSBmaWxlcyBub3QgdG8gYmUgYnVpbHQuCi0gICAgYWN0aW9uc190b19hZGQ6IGRpY3Qgb2YgYWN0aW9ucyBrZXllZCBvbiBzb3VyY2UgZmlsZSB0aGV5J3JlIGF0dGFjaGVkIHRvLgotICBSZXR1cm5zOgotICAgIGV4Y2x1ZGVkX3NvdXJjZXMgd2l0aCBmaWxlcyB0aGF0IGhhdmUgYWN0aW9ucyBhdHRhY2hlZCByZW1vdmVkLgotICAiIiIKLSAgbXVzdF9rZWVwID0gc2V0KF9GaXhQYXRocyhhY3Rpb25zX3RvX2FkZC5rZXlzKCkpKQotICByZXR1cm4gW3MgZm9yIHMgaW4gZXhjbHVkZWRfc291cmNlcyBpZiBzIG5vdCBpbiBtdXN0X2tlZXBdCi0KLQotZGVmIF9HZXREZWZhdWx0Q29uZmlndXJhdGlvbihzcGVjKToKLSAgcmV0dXJuIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ11bc3BlY1snZGVmYXVsdF9jb25maWd1cmF0aW9uJ11dCi0KLQotZGVmIF9HZXRHdWlkT2ZQcm9qZWN0KHByb2pfcGF0aCwgc3BlYyk6Ci0gICIiIkdldCB0aGUgZ3VpZCBmb3IgdGhlIHByb2plY3QuCi0KLSAgQXJndW1lbnRzOgotICAgIHByb2pfcGF0aDogUGF0aCBvZiB0aGUgdmNwcm9qIG9yIHZjeHByb2ogZmlsZSB0byBnZW5lcmF0ZS4KLSAgICBzcGVjOiBUaGUgdGFyZ2V0IGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LgotICBSZXR1cm5zOgotICAgIHRoZSBndWlkLgotICBSYWlzZXM6Ci0gICAgVmFsdWVFcnJvcjogaWYgdGhlIHNwZWNpZmllZCBHVUlEIGlzIGludmFsaWQuCi0gICIiIgotICAjIFBsdWNrIG91dCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgotICBkZWZhdWx0X2NvbmZpZyA9IF9HZXREZWZhdWx0Q29uZmlndXJhdGlvbihzcGVjKQotICAjIERlY2lkZSB0aGUgZ3VpZCBvZiB0aGUgcHJvamVjdC4KLSAgZ3VpZCA9IGRlZmF1bHRfY29uZmlnLmdldCgnbXN2c19ndWlkJykKLSAgaWYgZ3VpZDoKLSAgICBpZiBWQUxJRF9NU1ZTX0dVSURfQ0hBUlMubWF0Y2goZ3VpZCkgaXMgTm9uZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgTVNWUyBndWlkOiAiJXMiLiAgTXVzdCBtYXRjaCByZWdleDogIiVzIi4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgKGd1aWQsIFZBTElEX01TVlNfR1VJRF9DSEFSUy5wYXR0ZXJuKSkKLSAgICBndWlkID0gJ3slc30nICUgZ3VpZAotICBndWlkID0gZ3VpZCBvciBNU1ZTTmV3Lk1ha2VHdWlkKHByb2pfcGF0aCkKLSAgcmV0dXJuIGd1aWQKLQotCi1kZWYgX0dldE1zYnVpbGRUb29sc2V0T2ZQcm9qZWN0KHByb2pfcGF0aCwgc3BlYywgdmVyc2lvbik6Ci0gICIiIkdldCB0aGUgcGxhdGZvcm0gdG9vbHNldCBmb3IgdGhlIHByb2plY3QuCi0KLSAgQXJndW1lbnRzOgotICAgIHByb2pfcGF0aDogUGF0aCBvZiB0aGUgdmNwcm9qIG9yIHZjeHByb2ogZmlsZSB0byBnZW5lcmF0ZS4KLSAgICBzcGVjOiBUaGUgdGFyZ2V0IGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LgotICAgIHZlcnNpb246IFRoZSBNU1ZTVmVyc2lvbiBvYmplY3QuCi0gIFJldHVybnM6Ci0gICAgdGhlIHBsYXRmb3JtIHRvb2xzZXQgc3RyaW5nIG9yIE5vbmUuCi0gICIiIgotICAjIFBsdWNrIG91dCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgotICBkZWZhdWx0X2NvbmZpZyA9IF9HZXREZWZhdWx0Q29uZmlndXJhdGlvbihzcGVjKQotICB0b29sc2V0ID0gZGVmYXVsdF9jb25maWcuZ2V0KCdtc2J1aWxkX3Rvb2xzZXQnKQotICBpZiBub3QgdG9vbHNldCBhbmQgdmVyc2lvbi5EZWZhdWx0VG9vbHNldCgpOgotICAgIHRvb2xzZXQgPSB2ZXJzaW9uLkRlZmF1bHRUb29sc2V0KCkKLSAgcmV0dXJuIHRvb2xzZXQKLQotCi1kZWYgX0dlbmVyYXRlUHJvamVjdChwcm9qZWN0LCBvcHRpb25zLCB2ZXJzaW9uLCBnZW5lcmF0b3JfZmxhZ3MpOgotICAiIiJHZW5lcmF0ZXMgYSB2Y3Byb2ogZmlsZS4KLQotICBBcmd1bWVudHM6Ci0gICAgcHJvamVjdDogdGhlIE1TVlNQcm9qZWN0IG9iamVjdC4KLSAgICBvcHRpb25zOiBnbG9iYWwgZ2VuZXJhdG9yIG9wdGlvbnMuCi0gICAgdmVyc2lvbjogdGhlIE1TVlNWZXJzaW9uIG9iamVjdC4KLSAgICBnZW5lcmF0b3JfZmxhZ3M6IGRpY3Qgb2YgZ2VuZXJhdG9yLXNwZWNpZmljIGZsYWdzLgotICBSZXR1cm5zOgotICAgIEEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgdGhhdCBjYW5ub3QgYmUgZm91bmQgb24gZGlzay4KLSAgIiIiCi0gIGRlZmF1bHRfY29uZmlnID0gX0dldERlZmF1bHRDb25maWd1cmF0aW9uKHByb2plY3Quc3BlYykKLQotICAjIFNraXAgZW1pdHRpbmcgYW55dGhpbmcgaWYgdG9sZCB0byB3aXRoIG1zdnNfZXhpc3RpbmdfdmNwcm9qIG9wdGlvbi4KLSAgaWYgZGVmYXVsdF9jb25maWcuZ2V0KCdtc3ZzX2V4aXN0aW5nX3ZjcHJvaicpOgotICAgIHJldHVybiBbXQotCi0gIGlmIHZlcnNpb24uVXNlc1ZjeHByb2ooKToKLSAgICByZXR1cm4gX0dlbmVyYXRlTVNCdWlsZFByb2plY3QocHJvamVjdCwgb3B0aW9ucywgdmVyc2lvbiwgZ2VuZXJhdG9yX2ZsYWdzKQotICBlbHNlOgotICAgIHJldHVybiBfR2VuZXJhdGVNU1ZTUHJvamVjdChwcm9qZWN0LCBvcHRpb25zLCB2ZXJzaW9uLCBnZW5lcmF0b3JfZmxhZ3MpCi0KLQotZGVmIF9HZW5lcmF0ZU1TVlNQcm9qZWN0KHByb2plY3QsIG9wdGlvbnMsIHZlcnNpb24sIGdlbmVyYXRvcl9mbGFncyk6Ci0gICIiIkdlbmVyYXRlcyBhIC52Y3Byb2ogZmlsZS4gIEl0IG1heSBjcmVhdGUgLnJ1bGVzIGFuZCAudXNlciBmaWxlcyB0b28uCi0KLSAgQXJndW1lbnRzOgotICAgIHByb2plY3Q6IFRoZSBwcm9qZWN0IG9iamVjdCB3ZSB3aWxsIGdlbmVyYXRlIHRoZSBmaWxlIGZvci4KLSAgICBvcHRpb25zOiBHbG9iYWwgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGdlbmVyYXRvci4KLSAgICB2ZXJzaW9uOiBUaGUgVmlzdWFsU3R1ZGlvVmVyc2lvbiBvYmplY3QuCi0gICAgZ2VuZXJhdG9yX2ZsYWdzOiBkaWN0IG9mIGdlbmVyYXRvci1zcGVjaWZpYyBmbGFncy4KLSAgIiIiCi0gIHNwZWMgPSBwcm9qZWN0LnNwZWMKLSAgdmNwcm9qX2RpciA9IG9zLnBhdGguZGlybmFtZShwcm9qZWN0LnBhdGgpCi0gIGlmIHZjcHJval9kaXIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyh2Y3Byb2pfZGlyKToKLSAgICBvcy5tYWtlZGlycyh2Y3Byb2pfZGlyKQotCi0gIHBsYXRmb3JtcyA9IF9HZXRVbmlxdWVQbGF0Zm9ybXMoc3BlYykKLSAgcCA9IE1TVlNQcm9qZWN0LldyaXRlcihwcm9qZWN0LnBhdGgsIHZlcnNpb24sIHNwZWNbJ3RhcmdldF9uYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5ndWlkLCBwbGF0Zm9ybXMpCi0KLSAgIyBHZXQgZGlyZWN0b3J5IHByb2plY3QgZmlsZSBpcyBpbi4KLSAgcHJvamVjdF9kaXIgPSBvcy5wYXRoLnNwbGl0KHByb2plY3QucGF0aClbMF0KLSAgZ3lwX3BhdGggPSBfTm9ybWFsaXplZFNvdXJjZShwcm9qZWN0LmJ1aWxkX2ZpbGUpCi0gIHJlbGF0aXZlX3BhdGhfb2ZfZ3lwX2ZpbGUgPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChneXBfcGF0aCwgcHJvamVjdF9kaXIpCi0KLSAgY29uZmlnX3R5cGUgPSBfR2V0TVNWU0NvbmZpZ3VyYXRpb25UeXBlKHNwZWMsIHByb2plY3QuYnVpbGRfZmlsZSkKLSAgZm9yIGNvbmZpZ19uYW1lLCBjb25maWcgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICBfQWRkQ29uZmlndXJhdGlvblRvTVNWU1Byb2plY3QocCwgc3BlYywgY29uZmlnX3R5cGUsIGNvbmZpZ19uYW1lLCBjb25maWcpCi0KLSAgIyBQcmVwYXJlIGxpc3Qgb2Ygc291cmNlcyBhbmQgZXhjbHVkZWQgc291cmNlcy4KLSAgZ3lwX2ZpbGUgPSBvcy5wYXRoLnNwbGl0KHByb2plY3QuYnVpbGRfZmlsZSlbMV0KLSAgc291cmNlcywgZXhjbHVkZWRfc291cmNlcyA9IF9QcmVwYXJlTGlzdE9mU291cmNlcyhzcGVjLCBnZW5lcmF0b3JfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3lwX2ZpbGUpCi0KLSAgIyBBZGQgcnVsZXMuCi0gIGFjdGlvbnNfdG9fYWRkID0ge30KLSAgX0dlbmVyYXRlUnVsZXNGb3JNU1ZTKHAsIHByb2plY3RfZGlyLCBvcHRpb25zLCBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcywgZXhjbHVkZWRfc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNfdG9fYWRkKQotICBsaXN0X2V4Y2x1ZGVkID0gZ2VuZXJhdG9yX2ZsYWdzLmdldCgnbXN2c19saXN0X2V4Y2x1ZGVkX2ZpbGVzJywgVHJ1ZSkKLSAgc291cmNlcywgZXhjbHVkZWRfc291cmNlcywgZXhjbHVkZWRfaWRsID0gKAotICAgICAgX0FkanVzdFNvdXJjZXNBbmRDb252ZXJ0VG9GaWx0ZXJIaWVyYXJjaHkoCi0gICAgICAgICAgc3BlYywgb3B0aW9ucywgcHJvamVjdF9kaXIsIHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMsIGxpc3RfZXhjbHVkZWQpKQotCi0gICMgQWRkIGluIGZpbGVzLgotICBtaXNzaW5nX3NvdXJjZXMgPSBfVmVyaWZ5U291cmNlc0V4aXN0KHNvdXJjZXMsIHByb2plY3RfZGlyKQotICBwLkFkZEZpbGVzKHNvdXJjZXMpCi0KLSAgX0FkZFRvb2xGaWxlc1RvTVNWUyhwLCBzcGVjKQotICBfSGFuZGxlUHJlQ29tcGlsZWRIZWFkZXJzKHAsIHNvdXJjZXMsIHNwZWMpCi0gIF9BZGRBY3Rpb25zKGFjdGlvbnNfdG9fYWRkLCBzcGVjLCByZWxhdGl2ZV9wYXRoX29mX2d5cF9maWxlKQotICBfQWRkQ29waWVzKGFjdGlvbnNfdG9fYWRkLCBzcGVjKQotICBfV3JpdGVNU1ZTVXNlckZpbGUocHJvamVjdC5wYXRoLCB2ZXJzaW9uLCBzcGVjKQotCi0gICMgTk9URTogdGhpcyBzdGFuemEgbXVzdCBhcHBlYXIgYWZ0ZXIgYWxsIGFjdGlvbnMgaGF2ZSBiZWVuIGRlY2lkZWQuCi0gICMgRG9uJ3QgZXhjbHVkZWQgc291cmNlcyB3aXRoIGFjdGlvbnMgYXR0YWNoZWQsIG9yIHRoZXkgd29uJ3QgcnVuLgotICBleGNsdWRlZF9zb3VyY2VzID0gX0ZpbHRlckFjdGlvbnNGcm9tRXhjbHVkZWQoCi0gICAgICBleGNsdWRlZF9zb3VyY2VzLCBhY3Rpb25zX3RvX2FkZCkKLSAgX0V4Y2x1ZGVGaWxlc0Zyb21CZWluZ0J1aWx0KHAsIHNwZWMsIGV4Y2x1ZGVkX3NvdXJjZXMsIGV4Y2x1ZGVkX2lkbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZXhjbHVkZWQpCi0gIF9BZGRBY2N1bXVsYXRlZEFjdGlvbnNUb01TVlMocCwgc3BlYywgYWN0aW9uc190b19hZGQpCi0KLSAgIyBXcml0ZSBpdCBvdXQuCi0gIHAuV3JpdGVJZkNoYW5nZWQoKQotCi0gIHJldHVybiBtaXNzaW5nX3NvdXJjZXMKLQotCi1kZWYgX0dldFVuaXF1ZVBsYXRmb3JtcyhzcGVjKToKLSAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiB1bmlxdWUgcGxhdGZvcm1zIGZvciB0aGlzIHNwZWMsIGUuZyBbJ3dpbjMyJywgLi4uXS4KLQotICBBcmd1bWVudHM6Ci0gICAgc3BlYzogVGhlIHRhcmdldCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4KLSAgUmV0dXJuczoKLSAgICBUaGUgTVNWU1VzZXJGaWxlIG9iamVjdCBjcmVhdGVkLgotICAiIiIKLSAgIyBHYXRoZXIgbGlzdCBvZiB1bmlxdWUgcGxhdGZvcm1zLgotICBwbGF0Zm9ybXMgPSBzZXQoKQotICBmb3IgY29uZmlndXJhdGlvbiBpbiBzcGVjWydjb25maWd1cmF0aW9ucyddOgotICAgIHBsYXRmb3Jtcy5hZGQoX0NvbmZpZ1BsYXRmb3JtKHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ11bY29uZmlndXJhdGlvbl0pKQotICBwbGF0Zm9ybXMgPSBsaXN0KHBsYXRmb3JtcykKLSAgcmV0dXJuIHBsYXRmb3JtcwotCi0KLWRlZiBfQ3JlYXRlTVNWU1VzZXJGaWxlKHByb2pfcGF0aCwgdmVyc2lvbiwgc3BlYyk6Ci0gICIiIkdlbmVyYXRlcyBhIC51c2VyIGZpbGUgZm9yIHRoZSB1c2VyIHJ1bm5pbmcgdGhpcyBHeXAgcHJvZ3JhbS4KLQotICBBcmd1bWVudHM6Ci0gICAgcHJval9wYXRoOiBUaGUgcGF0aCBvZiB0aGUgcHJvamVjdCBmaWxlIGJlaW5nIGNyZWF0ZWQuICBUaGUgLnVzZXIgZmlsZQotICAgICAgICAgICAgICAgc2hhcmVzIHRoZSBzYW1lIHBhdGggKHdpdGggYW4gYXBwcm9wcmlhdGUgc3VmZml4KS4KLSAgICB2ZXJzaW9uOiBUaGUgVmlzdWFsU3R1ZGlvVmVyc2lvbiBvYmplY3QuCi0gICAgc3BlYzogVGhlIHRhcmdldCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4KLSAgUmV0dXJuczoKLSAgICBUaGUgTVNWU1VzZXJGaWxlIG9iamVjdCBjcmVhdGVkLgotICAiIiIKLSAgKGRvbWFpbiwgdXNlcm5hbWUpID0gX0dldERvbWFpbkFuZFVzZXJOYW1lKCkKLSAgdmN1c2VyX2ZpbGVuYW1lID0gJy4nLmpvaW4oW3Byb2pfcGF0aCwgZG9tYWluLCB1c2VybmFtZSwgJ3VzZXInXSkKLSAgdXNlcl9maWxlID0gTVNWU1VzZXJGaWxlLldyaXRlcih2Y3VzZXJfZmlsZW5hbWUsIHZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY1sndGFyZ2V0X25hbWUnXSkKLSAgcmV0dXJuIHVzZXJfZmlsZQotCi0KLWRlZiBfR2V0TVNWU0NvbmZpZ3VyYXRpb25UeXBlKHNwZWMsIGJ1aWxkX2ZpbGUpOgotICAiIiJSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIHR5cGUgZm9yIHRoaXMgcHJvamVjdC4KLQotICBJdCdzIGEgbnVtYmVyIGRlZmluZWQgYnkgTWljcm9zb2Z0LiAgTWF5IHJhaXNlIGFuIGV4Y2VwdGlvbi4KLQotICBBcmdzOgotICAgICAgc3BlYzogVGhlIHRhcmdldCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4KLSAgICAgIGJ1aWxkX2ZpbGU6IFRoZSBwYXRoIG9mIHRoZSBneXAgZmlsZS4KLSAgUmV0dXJuczoKLSAgICAgIEFuIGludGVnZXIsIHRoZSBjb25maWd1cmF0aW9uIHR5cGUuCi0gICIiIgotICB0cnk6Ci0gICAgY29uZmlnX3R5cGUgPSB7Ci0gICAgICAgICdleGVjdXRhYmxlJzogJzEnLCAgIyAuZXhlCi0gICAgICAgICdzaGFyZWRfbGlicmFyeSc6ICcyJywgICMgLmRsbAotICAgICAgICAnbG9hZGFibGVfbW9kdWxlJzogJzInLCAgIyAuZGxsCi0gICAgICAgICdzdGF0aWNfbGlicmFyeSc6ICc0JywgICMgLmxpYgotICAgICAgICAnbm9uZSc6ICcxMCcsICAjIFV0aWxpdHkgdHlwZQotICAgICAgICB9W3NwZWNbJ3R5cGUnXV0KLSAgZXhjZXB0IEtleUVycm9yOgotICAgIGlmIHNwZWMuZ2V0KCd0eXBlJyk6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oJ1RhcmdldCB0eXBlICVzIGlzIG5vdCBhIHZhbGlkIHRhcmdldCB0eXBlIGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCAlcyBpbiAlcy4nICUKLSAgICAgICAgICAgICAgICAgICAgICAoc3BlY1sndHlwZSddLCBzcGVjWyd0YXJnZXRfbmFtZSddLCBidWlsZF9maWxlKSkKLSAgICBlbHNlOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdNaXNzaW5nIHR5cGUgZmllbGQgZm9yIHRhcmdldCAlcyBpbiAlcy4nICUKLSAgICAgICAgICAgICAgICAgICAgICAoc3BlY1sndGFyZ2V0X25hbWUnXSwgYnVpbGRfZmlsZSkpCi0gIHJldHVybiBjb25maWdfdHlwZQotCi0KLWRlZiBfQWRkQ29uZmlndXJhdGlvblRvTVNWU1Byb2plY3QocCwgc3BlYywgY29uZmlnX3R5cGUsIGNvbmZpZ19uYW1lLCBjb25maWcpOgotICAiIiJBZGRzIGEgY29uZmlndXJhdGlvbiB0byB0aGUgTVNWUyBwcm9qZWN0LgotCi0gIE1hbnkgc2V0dGluZ3MgaW4gYSB2Y3Byb2ogZmlsZSBhcmUgc3BlY2lmaWMgdG8gYSBjb25maWd1cmF0aW9uLiAgVGhpcwotICBmdW5jdGlvbiB0aGUgbWFpbiBwYXJ0IG9mIHRoZSB2Y3Byb2ogZmlsZSB0aGF0J3MgY29uZmlndXJhdGlvbiBzcGVjaWZpYy4KLQotICBBcmd1bWVudHM6Ci0gICAgcDogVGhlIHRhcmdldCBwcm9qZWN0IGJlaW5nIGdlbmVyYXRlZC4KLSAgICBzcGVjOiBUaGUgdGFyZ2V0IGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LgotICAgIGNvbmZpZ190eXBlOiBUaGUgY29uZmlndXJhdGlvbiB0eXBlLCBhIG51bWJlciBhcyBkZWZpbmVkIGJ5IE1pY3Jvc29mdC4KLSAgICBjb25maWdfbmFtZTogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCi0gICAgY29uZmlnOiBUaGUgZGljdGlvbm5hcnkgdGhhdCBkZWZpbmVzIHRoZSBzcGVjaWFsIHByb2Nlc3NpbmcgdG8gYmUgZG9uZQotICAgICAgICAgICAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgIiIiCi0gICMgR2V0IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb25maWd1cmF0aW9uCi0gIGluY2x1ZGVfZGlycywgcmVzb3VyY2VfaW5jbHVkZV9kaXJzID0gX0dldEluY2x1ZGVEaXJzKGNvbmZpZykKLSAgbGlicmFyaWVzID0gX0dldExpYnJhcmllcyhzcGVjKQotICBvdXRfZmlsZSwgdmNfdG9vbCwgXyA9IF9HZXRPdXRwdXRGaWxlUGF0aEFuZFRvb2woc3BlYywgbXNidWlsZD1GYWxzZSkKLSAgZGVmaW5lcyA9IF9HZXREZWZpbmVzKGNvbmZpZykKLSAgZGVmaW5lcyA9IFtfRXNjYXBlQ3BwRGVmaW5lRm9yTVNWUyhkKSBmb3IgZCBpbiBkZWZpbmVzXQotICBkaXNhYmxlZF93YXJuaW5ncyA9IF9HZXREaXNhYmxlZFdhcm5pbmdzKGNvbmZpZykKLSAgcHJlYnVpbGQgPSBjb25maWcuZ2V0KCdtc3ZzX3ByZWJ1aWxkJykKLSAgcG9zdGJ1aWxkID0gY29uZmlnLmdldCgnbXN2c19wb3N0YnVpbGQnKQotICBkZWZfZmlsZSA9IF9HZXRNb2R1bGVEZWZpbml0aW9uKHNwZWMpCi0gIHByZWNvbXBpbGVkX2hlYWRlciA9IGNvbmZpZy5nZXQoJ21zdnNfcHJlY29tcGlsZWRfaGVhZGVyJykKLQotICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgdG9vbHMgYXMgYSBkaWN0aW9uYXJ5LgotICB0b29scyA9IGRpY3QoKQotICAjIEFkZCBpbiB1c2VyIHNwZWNpZmllZCBtc3ZzX3NldHRpbmdzLgotICBtc3ZzX3NldHRpbmdzID0gY29uZmlnLmdldCgnbXN2c19zZXR0aW5ncycsIHt9KQotICBNU1ZTU2V0dGluZ3MuVmFsaWRhdGVNU1ZTU2V0dGluZ3MobXN2c19zZXR0aW5ncykKLSAgZm9yIHRvb2wgaW4gbXN2c19zZXR0aW5nczoKLSAgICBzZXR0aW5ncyA9IGNvbmZpZ1snbXN2c19zZXR0aW5ncyddW3Rvb2xdCi0gICAgZm9yIHNldHRpbmcgaW4gc2V0dGluZ3M6Ci0gICAgICBfVG9vbEFwcGVuZCh0b29scywgdG9vbCwgc2V0dGluZywgc2V0dGluZ3Nbc2V0dGluZ10pCi0gICMgQWRkIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgYXBwcm9wcmlhdGUgdG9vbAotICBfVG9vbEFwcGVuZCh0b29scywgJ1ZDQ0xDb21waWxlclRvb2wnLAotICAgICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsIGluY2x1ZGVfZGlycykKLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJywKLSAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnLCByZXNvdXJjZV9pbmNsdWRlX2RpcnMpCi0gICMgQWRkIGluIGxpYnJhcmllcy4KLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ0xpbmtlclRvb2wnLCAnQWRkaXRpb25hbERlcGVuZGVuY2llcycsIGxpYnJhcmllcykKLSAgaWYgb3V0X2ZpbGU6Ci0gICAgX1Rvb2xBcHBlbmQodG9vbHMsIHZjX3Rvb2wsICdPdXRwdXRGaWxlJywgb3V0X2ZpbGUsIG9ubHlfaWZfdW5zZXQ9VHJ1ZSkKLSAgIyBBZGQgZGVmaW5lcy4KLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ0NMQ29tcGlsZXJUb29sJywgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJywgZGVmaW5lcykKLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ1Jlc291cmNlQ29tcGlsZXJUb29sJywgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJywKLSAgICAgICAgICAgICAgZGVmaW5lcykKLSAgIyBDaGFuZ2UgcHJvZ3JhbSBkYXRhYmFzZSBkaXJlY3RvcnkgdG8gcHJldmVudCBjb2xsaXNpb25zLgotICBfVG9vbEFwcGVuZCh0b29scywgJ1ZDQ0xDb21waWxlclRvb2wnLCAnUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWUnLAotICAgICAgICAgICAgICAnJChJbnREaXIpJChQcm9qZWN0TmFtZSlcXHZjODAucGRiJywgb25seV9pZl91bnNldD1UcnVlKQotICAjIEFkZCBkaXNhYmxlZCB3YXJuaW5ncy4KLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ0NMQ29tcGlsZXJUb29sJywKLSAgICAgICAgICAgICAgJ0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzJywgZGlzYWJsZWRfd2FybmluZ3MpCi0gICMgQWRkIFByZS1idWlsZC4KLSAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ1ByZUJ1aWxkRXZlbnRUb29sJywgJ0NvbW1hbmRMaW5lJywgcHJlYnVpbGQpCi0gICMgQWRkIFBvc3QtYnVpbGQuCi0gIF9Ub29sQXBwZW5kKHRvb2xzLCAnVkNQb3N0QnVpbGRFdmVudFRvb2wnLCAnQ29tbWFuZExpbmUnLCBwb3N0YnVpbGQpCi0gICMgVHVybiBvbiBwcmVjb21waWxlZCBoZWFkZXJzIGlmIGFwcHJvcHJpYXRlLgotICBpZiBwcmVjb21waWxlZF9oZWFkZXI6Ci0gICAgcHJlY29tcGlsZWRfaGVhZGVyID0gb3MucGF0aC5zcGxpdChwcmVjb21waWxlZF9oZWFkZXIpWzFdCi0gICAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ0NMQ29tcGlsZXJUb29sJywgJ1VzZVByZWNvbXBpbGVkSGVhZGVyJywgJzInKQotICAgIF9Ub29sQXBwZW5kKHRvb2xzLCAnVkNDTENvbXBpbGVyVG9vbCcsCi0gICAgICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyVGhyb3VnaCcsIHByZWNvbXBpbGVkX2hlYWRlcikKLSAgICBfVG9vbEFwcGVuZCh0b29scywgJ1ZDQ0xDb21waWxlclRvb2wnLAotICAgICAgICAgICAgICAgICdGb3JjZWRJbmNsdWRlRmlsZXMnLCBwcmVjb21waWxlZF9oZWFkZXIpCi0gICMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBnZW5lcmF0ZSBpbXBvcnQgbGlicmFyaWVzOwotICAjIHRlbGwgZGVwZW5kZW50IHByb2plY3RzIHRvIG5vdCBleHBlY3Qgb25lLgotICBpZiBzcGVjWyd0eXBlJ10gPT0gJ2xvYWRhYmxlX21vZHVsZSc6Ci0gICAgX1Rvb2xBcHBlbmQodG9vbHMsICdWQ0xpbmtlclRvb2wnLCAnSWdub3JlSW1wb3J0TGlicmFyeScsICd0cnVlJykKLSAgIyBTZXQgdGhlIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUgaWYgYW55LgotICBpZiBkZWZfZmlsZToKLSAgICBfVG9vbEFwcGVuZCh0b29scywgJ1ZDTGlua2VyVG9vbCcsICdNb2R1bGVEZWZpbml0aW9uRmlsZScsIGRlZl9maWxlKQotCi0gIF9BZGRDb25maWd1cmF0aW9uVG9NU1ZTKHAsIHNwZWMsIHRvb2xzLCBjb25maWcsIGNvbmZpZ190eXBlLCBjb25maWdfbmFtZSkKLQotCi1kZWYgX0dldEluY2x1ZGVEaXJzKGNvbmZpZyk6Ci0gICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUgdXNlZCBmb3IgI2luY2x1ZGUgZGlyZWN0aXZlcy4KLQotICBBcmd1bWVudHM6Ci0gICAgY29uZmlnOiBUaGUgZGljdGlvbm5hcnkgdGhhdCBkZWZpbmVzIHRoZSBzcGVjaWFsIHByb2Nlc3NpbmcgdG8gYmUgZG9uZQotICAgICAgICAgICAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgUmV0dXJuczoKLSAgICBUaGUgbGlzdCBvZiBkaXJlY3RvcnkgcGF0aHMuCi0gICIiIgotICAjIFRPRE8oYnJhZG5lbHNvbik6IGluY2x1ZGVfZGlycyBzaG91bGQgcmVhbGx5IGJlIGZsZXhpYmxlIGVub3VnaCBub3QgdG8KLSAgIyAgICAgICAgICAgICAgICAgICByZXF1aXJlIHRoaXMgc29ydCBvZiB0aGluZy4KLSAgaW5jbHVkZV9kaXJzID0gKAotICAgICAgY29uZmlnLmdldCgnaW5jbHVkZV9kaXJzJywgW10pICsKLSAgICAgIGNvbmZpZy5nZXQoJ21zdnNfc3lzdGVtX2luY2x1ZGVfZGlycycsIFtdKSkKLSAgcmVzb3VyY2VfaW5jbHVkZV9kaXJzID0gY29uZmlnLmdldCgncmVzb3VyY2VfaW5jbHVkZV9kaXJzJywgaW5jbHVkZV9kaXJzKQotICBpbmNsdWRlX2RpcnMgPSBfRml4UGF0aHMoaW5jbHVkZV9kaXJzKQotICByZXNvdXJjZV9pbmNsdWRlX2RpcnMgPSBfRml4UGF0aHMocmVzb3VyY2VfaW5jbHVkZV9kaXJzKQotICByZXR1cm4gaW5jbHVkZV9kaXJzLCByZXNvdXJjZV9pbmNsdWRlX2RpcnMKLQotCi1kZWYgX0dldExpYnJhcmllcyhzcGVjKToKLSAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KLQotICBBcmd1bWVudHM6Ci0gICAgc3BlYzogVGhlIHRhcmdldCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4KLSAgUmV0dXJuczoKLSAgICBUaGUgbGlzdCBvZiBkaXJlY3RvcnkgcGF0aHMuCi0gICIiIgotICBsaWJyYXJpZXMgPSBzcGVjLmdldCgnbGlicmFyaWVzJywgW10pCi0gICMgU3RyaXAgb3V0IC1sLCBhcyBpdCBpcyBub3QgdXNlZCBvbiB3aW5kb3dzIChidXQgaXMgbmVlZGVkIHNvIHdlIGNhbiBwYXNzCi0gICMgaW4gbGlicmFyaWVzIHRoYXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoKS4KLSAgIyBBbHNvIHJlbW92ZSBkdXBsaWNhdGUgZW50cmllcywgbGVhdmluZyBvbmx5IHRoZSBsYXN0IGR1cGxpY2F0ZSwgd2hpbGUKLSAgIyBwcmVzZXJ2aW5nIG9yZGVyLgotICBmb3VuZCA9IHNldCgpCi0gIHVuaXF1ZV9saWJyYXJpZXNfbGlzdCA9IFtdCi0gIGZvciBlbnRyeSBpbiByZXZlcnNlZChsaWJyYXJpZXMpOgotICAgIGxpYnJhcnkgPSByZS5zdWIoJ15cLWwnLCAnJywgZW50cnkpCi0gICAgaWYgbm90IG9zLnBhdGguc3BsaXRleHQobGlicmFyeSlbMV06Ci0gICAgICBsaWJyYXJ5ICs9ICcubGliJwotICAgIGlmIGxpYnJhcnkgbm90IGluIGZvdW5kOgotICAgICAgZm91bmQuYWRkKGxpYnJhcnkpCi0gICAgICB1bmlxdWVfbGlicmFyaWVzX2xpc3QuYXBwZW5kKGxpYnJhcnkpCi0gIHVuaXF1ZV9saWJyYXJpZXNfbGlzdC5yZXZlcnNlKCkKLSAgcmV0dXJuIHVuaXF1ZV9saWJyYXJpZXNfbGlzdAotCi0KLWRlZiBfR2V0T3V0cHV0RmlsZVBhdGhBbmRUb29sKHNwZWMsIG1zYnVpbGQpOgotICAiIiJSZXR1cm5zIHRoZSBwYXRoIGFuZCB0b29sIHRvIHVzZSBmb3IgdGhpcyB0YXJnZXQuCi0KLSAgRmlndXJlcyBvdXQgdGhlIHBhdGggb2YgdGhlIGZpbGUgdGhpcyBzcGVjIHdpbGwgY3JlYXRlIGFuZCB0aGUgbmFtZSBvZgotICB0aGUgVkMgdG9vbCB0aGF0IHdpbGwgY3JlYXRlIGl0LgotCi0gIEFyZ3VtZW50czoKLSAgICBzcGVjOiBUaGUgdGFyZ2V0IGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LgotICBSZXR1cm5zOgotICAgIEEgdHJpcGxlIG9mIChmaWxlIHBhdGgsIG5hbWUgb2YgdGhlIHZjIHRvb2wsIG5hbWUgb2YgdGhlIG1zYnVpbGQgdG9vbCkKLSAgIiIiCi0gICMgU2VsZWN0IGEgbmFtZSBmb3IgdGhlIG91dHB1dCBmaWxlLgotICBvdXRfZmlsZSA9ICcnCi0gIHZjX3Rvb2wgPSAnJwotICBtc2J1aWxkX3Rvb2wgPSAnJwotICBvdXRwdXRfZmlsZV9tYXAgPSB7Ci0gICAgICAnZXhlY3V0YWJsZSc6ICgnVkNMaW5rZXJUb29sJywgJ0xpbmsnLCAnJChPdXREaXIpJywgJy5leGUnKSwKLSAgICAgICdzaGFyZWRfbGlicmFyeSc6ICgnVkNMaW5rZXJUb29sJywgJ0xpbmsnLCAnJChPdXREaXIpJywgJy5kbGwnKSwKLSAgICAgICdsb2FkYWJsZV9tb2R1bGUnOiAoJ1ZDTGlua2VyVG9vbCcsICdMaW5rJywgJyQoT3V0RGlyKScsICcuZGxsJyksCi0gICAgICAnc3RhdGljX2xpYnJhcnknOiAoJ1ZDTGlicmFyaWFuVG9vbCcsICdMaWInLCAnJChPdXREaXIpbGliXFwnLCAnLmxpYicpLAotICB9Ci0gIG91dHB1dF9maWxlX3Byb3BzID0gb3V0cHV0X2ZpbGVfbWFwLmdldChzcGVjWyd0eXBlJ10pCi0gIGlmIG91dHB1dF9maWxlX3Byb3BzIGFuZCBpbnQoc3BlYy5nZXQoJ21zdnNfYXV0b19vdXRwdXRfZmlsZScsIDEpKToKLSAgICB2Y190b29sLCBtc2J1aWxkX3Rvb2wsIG91dF9kaXIsIHN1ZmZpeCA9IG91dHB1dF9maWxlX3Byb3BzCi0gICAgaWYgc3BlYy5nZXQoJ3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnknLCAwKToKLSAgICAgIG91dF9kaXIgPSAnJChPdXREaXIpJwotICAgIG91dF9kaXIgPSBzcGVjLmdldCgncHJvZHVjdF9kaXInLCBvdXRfZGlyKQotICAgIHByb2R1Y3RfZXh0ZW5zaW9uID0gc3BlYy5nZXQoJ3Byb2R1Y3RfZXh0ZW5zaW9uJykKLSAgICBpZiBwcm9kdWN0X2V4dGVuc2lvbjoKLSAgICAgIHN1ZmZpeCA9ICcuJyArIHByb2R1Y3RfZXh0ZW5zaW9uCi0gICAgZWxpZiBtc2J1aWxkOgotICAgICAgc3VmZml4ID0gJyQoVGFyZ2V0RXh0KScKLSAgICBwcmVmaXggPSBzcGVjLmdldCgncHJvZHVjdF9wcmVmaXgnLCAnJykKLSAgICBwcm9kdWN0X25hbWUgPSBzcGVjLmdldCgncHJvZHVjdF9uYW1lJywgJyQoUHJvamVjdE5hbWUpJykKLSAgICBvdXRfZmlsZSA9IG50cGF0aC5qb2luKG91dF9kaXIsIHByZWZpeCArIHByb2R1Y3RfbmFtZSArIHN1ZmZpeCkKLSAgcmV0dXJuIG91dF9maWxlLCB2Y190b29sLCBtc2J1aWxkX3Rvb2wKLQotCi1kZWYgX0dldERlZmluZXMoY29uZmlnKToKLSAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZm9yIHRoaXMgY29uZmlndWF0aW9uLgotCi0gIEFyZ3VtZW50czoKLSAgICBjb25maWc6IFRoZSBkaWN0aW9ubmFyeSB0aGF0IGRlZmluZXMgdGhlIHNwZWNpYWwgcHJvY2Vzc2luZyB0byBiZSBkb25lCi0gICAgICAgICAgICBmb3IgdGhpcyBjb25maWd1cmF0aW9uLgotICBSZXR1cm5zOgotICAgIFRoZSBsaXN0IG9mIHByZXByb2Nlc3NvciBkZWZpbml0aW9ucy4KLSAgIiIiCi0gIGRlZmluZXMgPSBbXQotICBmb3IgZCBpbiBjb25maWcuZ2V0KCdkZWZpbmVzJywgW10pOgotICAgIGlmIHR5cGUoZCkgPT0gbGlzdDoKLSAgICAgIGZkID0gJz0nLmpvaW4oW3N0cihkcGFydCkgZm9yIGRwYXJ0IGluIGRdKQotICAgIGVsc2U6Ci0gICAgICBmZCA9IHN0cihkKQotICAgIGRlZmluZXMuYXBwZW5kKGZkKQotICByZXR1cm4gZGVmaW5lcwotCi0KLWRlZiBfR2V0RGlzYWJsZWRXYXJuaW5ncyhjb25maWcpOgotICByZXR1cm4gW3N0cihpKSBmb3IgaSBpbiBjb25maWcuZ2V0KCdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJywgW10pXQotCi0KLWRlZiBfR2V0TW9kdWxlRGVmaW5pdGlvbihzcGVjKToKLSAgZGVmX2ZpbGUgPSAnJwotICBpZiBzcGVjWyd0eXBlJ10gaW4gWydzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnLCAnZXhlY3V0YWJsZSddOgotICAgIGRlZl9maWxlcyA9IFtzIGZvciBzIGluIHNwZWMuZ2V0KCdzb3VyY2VzJywgW10pIGlmIHMuZW5kc3dpdGgoJy5kZWYnKV0KLSAgICBpZiBsZW4oZGVmX2ZpbGVzKSA9PSAxOgotICAgICAgZGVmX2ZpbGUgPSBfRml4UGF0aChkZWZfZmlsZXNbMF0pCi0gICAgZWxpZiBkZWZfZmlsZXM6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICdNdWx0aXBsZSBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlcyBpbiBvbmUgdGFyZ2V0LCB0YXJnZXQgJXMgbGlzdHMgJwotICAgICAgICAgICdtdWx0aXBsZSAuZGVmIGZpbGVzOiAlcycgJSAoCi0gICAgICAgICAgICAgIHNwZWNbJ3RhcmdldF9uYW1lJ10sICcgJy5qb2luKGRlZl9maWxlcykpKQotICByZXR1cm4gZGVmX2ZpbGUKLQotCi1kZWYgX0NvbnZlcnRUb29sc1RvRXhwZWN0ZWRGb3JtKHRvb2xzKToKLSAgIiIiQ29udmVydCB0b29scyB0byBhIGZvcm0gZXhwZWN0ZWQgYnkgVmlzdWFsIFN0dWRpby4KLQotICBBcmd1bWVudHM6Ci0gICAgdG9vbHM6IEEgZGljdGlvbm5hcnkgb2Ygc2V0dGluZ3M7IHRoZSB0b29sIG5hbWUgaXMgdGhlIGtleS4KLSAgUmV0dXJuczoKLSAgICBBIGxpc3Qgb2YgVG9vbCBvYmplY3RzLgotICAiIiIKLSAgdG9vbF9saXN0ID0gW10KLSAgZm9yIHRvb2wsIHNldHRpbmdzIGluIHRvb2xzLml0ZXJpdGVtcygpOgotICAgICMgQ29sbGFwc2Ugc2V0dGluZ3Mgd2l0aCBsaXN0cy4KLSAgICBzZXR0aW5nc19maXhlZCA9IHt9Ci0gICAgZm9yIHNldHRpbmcsIHZhbHVlIGluIHNldHRpbmdzLml0ZXJpdGVtcygpOgotICAgICAgaWYgdHlwZSh2YWx1ZSkgPT0gbGlzdDoKLSAgICAgICAgaWYgKCh0b29sID09ICdWQ0xpbmtlclRvb2wnIGFuZAotICAgICAgICAgICAgIHNldHRpbmcgPT0gJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnKSBvcgotICAgICAgICAgICAgc2V0dGluZyA9PSAnQWRkaXRpb25hbE9wdGlvbnMnKToKLSAgICAgICAgICBzZXR0aW5nc19maXhlZFtzZXR0aW5nXSA9ICcgJy5qb2luKHZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNldHRpbmdzX2ZpeGVkW3NldHRpbmddID0gJzsnLmpvaW4odmFsdWUpCi0gICAgICBlbHNlOgotICAgICAgICBzZXR0aW5nc19maXhlZFtzZXR0aW5nXSA9IHZhbHVlCi0gICAgIyBBZGQgaW4gdGhpcyB0b29sLgotICAgIHRvb2xfbGlzdC5hcHBlbmQoTVNWU1Byb2plY3QuVG9vbCh0b29sLCBzZXR0aW5nc19maXhlZCkpCi0gIHJldHVybiB0b29sX2xpc3QKLQotCi1kZWYgX0FkZENvbmZpZ3VyYXRpb25Ub01TVlMocCwgc3BlYywgdG9vbHMsIGNvbmZpZywgY29uZmlnX3R5cGUsIGNvbmZpZ19uYW1lKToKLSAgIiIiQWRkIHRvIHRoZSBwcm9qZWN0IGZpbGUgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IGNvbmZpZy4KLQotICBBcmd1bWVudHM6Ci0gICAgcDogVGhlIHRhcmdldCBwcm9qZWN0IGJlaW5nIGdlbmVyYXRlZC4KLSAgICBzcGVjOiB0aGUgdGFyZ2V0IHByb2plY3QgZGljdC4KLSAgICB0b29sczogQSBkaWN0aW9ubmFyeSBvZiBzZXR0aW5nczsgdGhlIHRvb2wgbmFtZSBpcyB0aGUga2V5LgotICAgIGNvbmZpZzogVGhlIGRpY3Rpb25uYXJ5IHRoYXQgZGVmaW5lcyB0aGUgc3BlY2lhbCBwcm9jZXNzaW5nIHRvIGJlIGRvbmUKLSAgICAgICAgICAgIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uCi0gICAgY29uZmlnX3R5cGU6IFRoZSBjb25maWd1cmF0aW9uIHR5cGUsIGEgbnVtYmVyIGFzIGRlZmluZWQgYnkgTWljcm9zb2Z0LgotICAgIGNvbmZpZ19uYW1lOiBUaGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbi4KLSAgIiIiCi0gIGF0dHJpYnV0ZXMgPSBfR2V0TVNWU0F0dHJpYnV0ZXMoc3BlYywgY29uZmlnLCBjb25maWdfdHlwZSkKLSAgIyBBZGQgaW4gdGhpcyBjb25maWd1cmF0aW9uLgotICB0b29sX2xpc3QgPSBfQ29udmVydFRvb2xzVG9FeHBlY3RlZEZvcm0odG9vbHMpCi0gIHAuQWRkQ29uZmlnKF9Db25maWdGdWxsTmFtZShjb25maWdfbmFtZSwgY29uZmlnKSwKLSAgICAgICAgICAgICAgYXR0cnM9YXR0cmlidXRlcywgdG9vbHM9dG9vbF9saXN0KQotCi0KLWRlZiBfR2V0TVNWU0F0dHJpYnV0ZXMoc3BlYywgY29uZmlnLCBjb25maWdfdHlwZSk6Ci0gICMgUHJlcGFyZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMuCi0gIHByZXBhcmVkX2F0dHJzID0ge30KLSAgc291cmNlX2F0dHJzID0gY29uZmlnLmdldCgnbXN2c19jb25maWd1cmF0aW9uX2F0dHJpYnV0ZXMnLCB7fSkKLSAgZm9yIGEgaW4gc291cmNlX2F0dHJzOgotICAgIHByZXBhcmVkX2F0dHJzW2FdID0gc291cmNlX2F0dHJzW2FdCi0gICMgQWRkIHByb3BzIGZpbGVzLgotICB2c3Byb3BzX2RpcnMgPSBjb25maWcuZ2V0KCdtc3ZzX3Byb3BzJywgW10pCi0gIHZzcHJvcHNfZGlycyA9IF9GaXhQYXRocyh2c3Byb3BzX2RpcnMpCi0gIGlmIHZzcHJvcHNfZGlyczoKLSAgICBwcmVwYXJlZF9hdHRyc1snSW5oZXJpdGVkUHJvcGVydHlTaGVldHMnXSA9ICc7Jy5qb2luKHZzcHJvcHNfZGlycykKLSAgIyBTZXQgY29uZmlndXJhdGlvbiB0eXBlLgotICBwcmVwYXJlZF9hdHRyc1snQ29uZmlndXJhdGlvblR5cGUnXSA9IGNvbmZpZ190eXBlCi0gIG91dHB1dF9kaXIgPSBwcmVwYXJlZF9hdHRycy5nZXQoJ091dHB1dERpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uTmFtZSknKQotICBwcmVwYXJlZF9hdHRyc1snT3V0cHV0RGlyZWN0b3J5J10gPSBfRml4UGF0aChvdXRwdXRfZGlyKSArICdcXCcKLSAgaWYgJ0ludGVybWVkaWF0ZURpcmVjdG9yeScgbm90IGluIHByZXBhcmVkX2F0dHJzOgotICAgIGludGVybWVkaWF0ZSA9ICckKENvbmZpZ3VyYXRpb25OYW1lKVxcb2JqXFwkKFByb2plY3ROYW1lKScKLSAgICBwcmVwYXJlZF9hdHRyc1snSW50ZXJtZWRpYXRlRGlyZWN0b3J5J10gPSBfRml4UGF0aChpbnRlcm1lZGlhdGUpICsgJ1xcJwotICBlbHNlOgotICAgIGludGVybWVkaWF0ZSA9IF9GaXhQYXRoKHByZXBhcmVkX2F0dHJzWydJbnRlcm1lZGlhdGVEaXJlY3RvcnknXSkgKyAnXFwnCi0gICAgaW50ZXJtZWRpYXRlID0gTVNWU1NldHRpbmdzLkZpeFZDTWFjcm9TbGFzaGVzKGludGVybWVkaWF0ZSkKLSAgICBwcmVwYXJlZF9hdHRyc1snSW50ZXJtZWRpYXRlRGlyZWN0b3J5J10gPSBpbnRlcm1lZGlhdGUKLSAgcmV0dXJuIHByZXBhcmVkX2F0dHJzCi0KLQotZGVmIF9BZGROb3JtYWxpemVkU291cmNlcyhzb3VyY2VzX3NldCwgc291cmNlc19hcnJheSk6Ci0gIHNvdXJjZXMgPSBbX05vcm1hbGl6ZWRTb3VyY2UocykgZm9yIHMgaW4gc291cmNlc19hcnJheV0KLSAgc291cmNlc19zZXQudXBkYXRlKHNldChzb3VyY2VzKSkKLQotCi1kZWYgX1ByZXBhcmVMaXN0T2ZTb3VyY2VzKHNwZWMsIGdlbmVyYXRvcl9mbGFncywgZ3lwX2ZpbGUpOgotICAiIiJQcmVwYXJlIGxpc3Qgb2Ygc291cmNlcyBhbmQgZXhjbHVkZWQgc291cmNlcy4KLQotICBCZXNpZGVzIHRoZSBzb3VyY2VzIHNwZWNpZmllZCBkaXJlY3RseSBpbiB0aGUgc3BlYywgYWRkcyB0aGUgZ3lwIGZpbGUgc28KLSAgdGhhdCBhIGNoYW5nZSB0byBpdCB3aWxsIGNhdXNlIGEgcmUtY29tcGlsZS4gQWxzbyBhZGRzIGFwcHJvcHJpYXRlIHNvdXJjZXMKLSAgZm9yIGFjdGlvbnMgYW5kIGNvcGllcy4gQXNzdW1lcyBsYXRlciBzdGFnZSB3aWxsIHVuLWV4Y2x1ZGUgZmlsZXMgd2hpY2gKLSAgaGF2ZSBjdXN0b20gYnVpbGQgc3RlcHMgYXR0YWNoZWQuCi0KLSAgQXJndW1lbnRzOgotICAgIHNwZWM6IFRoZSB0YXJnZXQgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YXJnZXQuCi0gICAgZ3lwX2ZpbGU6IFRoZSBuYW1lIG9mIHRoZSBneXAgZmlsZS4KLSAgUmV0dXJuczoKLSAgICBBIHBhaXIgb2YgKGxpc3Qgb2Ygc291cmNlcywgbGlzdCBvZiBleGNsdWRlZCBzb3VyY2VzKS4KLSAgICBUaGUgc291cmNlcyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBneXAgZmlsZS4KLSAgIiIiCi0gIHNvdXJjZXMgPSBzZXQoKQotICBfQWRkTm9ybWFsaXplZFNvdXJjZXMoc291cmNlcywgc3BlYy5nZXQoJ3NvdXJjZXMnLCBbXSkpCi0gIGV4Y2x1ZGVkX3NvdXJjZXMgPSBzZXQoKQotICAjIEFkZCBpbiB0aGUgZ3lwIGZpbGUuCi0gIGlmIG5vdCBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCdzdGFuZGFsb25lJyk6Ci0gICAgc291cmNlcy5hZGQoZ3lwX2ZpbGUpCi0KLSAgIyBBZGQgaW4gJ2FjdGlvbicgaW5wdXRzIGFuZCBvdXRwdXRzLgotICBmb3IgYSBpbiBzcGVjLmdldCgnYWN0aW9ucycsIFtdKToKLSAgICBpbnB1dHMgPSBhWydpbnB1dHMnXQotICAgIGlucHV0cyA9IFtfTm9ybWFsaXplZFNvdXJjZShpKSBmb3IgaSBpbiBpbnB1dHNdCi0gICAgIyBBZGQgYWxsIGlucHV0cyB0byBzb3VyY2VzIGFuZCBleGNsdWRlZCBzb3VyY2VzLgotICAgIGlucHV0cyA9IHNldChpbnB1dHMpCi0gICAgc291cmNlcy51cGRhdGUoaW5wdXRzKQotICAgIGV4Y2x1ZGVkX3NvdXJjZXMudXBkYXRlKGlucHV0cykKLSAgICBpZiBpbnQoYS5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJywgRmFsc2UpKToKLSAgICAgIF9BZGROb3JtYWxpemVkU291cmNlcyhzb3VyY2VzLCBhLmdldCgnb3V0cHV0cycsIFtdKSkKLSAgIyBBZGQgaW4gJ2NvcGllcycgaW5wdXRzIGFuZCBvdXRwdXRzLgotICBmb3IgY3B5IGluIHNwZWMuZ2V0KCdjb3BpZXMnLCBbXSk6Ci0gICAgX0FkZE5vcm1hbGl6ZWRTb3VyY2VzKHNvdXJjZXMsIGNweS5nZXQoJ2ZpbGVzJywgW10pKQotICByZXR1cm4gKHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMpCi0KLQotZGVmIF9BZGp1c3RTb3VyY2VzQW5kQ29udmVydFRvRmlsdGVySGllcmFyY2h5KAotICAgIHNwZWMsIG9wdGlvbnMsIGd5cF9kaXIsIHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMsIGxpc3RfZXhjbHVkZWQpOgotICAiIiJBZGp1c3RzIHRoZSBsaXN0IG9mIHNvdXJjZXMgYW5kIGV4Y2x1ZGVkIHNvdXJjZXMuCi0KLSAgQWxzbyBjb252ZXJ0cyB0aGUgc2V0cyB0byBsaXN0cy4KLQotICBBcmd1bWVudHM6Ci0gICAgc3BlYzogVGhlIHRhcmdldCBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldC4KLSAgICBvcHRpb25zOiBHbG9iYWwgZ2VuZXJhdG9yIG9wdGlvbnMuCi0gICAgZ3lwX2RpcjogVGhlIHBhdGggdG8gdGhlIGd5cCBmaWxlIGJlaW5nIHByb2Nlc3NlZC4KLSAgICBzb3VyY2VzOiBBIHNldCBvZiBzb3VyY2VzIHRvIGJlIGluY2x1ZGVkIGZvciB0aGlzIHByb2plY3QuCi0gICAgZXhjbHVkZWRfc291cmNlczogQSBzZXQgb2Ygc291cmNlcyB0byBiZSBleGNsdWRlZCBmb3IgdGhpcyBwcm9qZWN0LgotICBSZXR1cm5zOgotICAgIEEgdHJpbyBvZiAobGlzdCBvZiBzb3VyY2VzLCBsaXN0IG9mIGV4Y2x1ZGVkIHNvdXJjZXMsCi0gICAgICAgICAgICAgICBwYXRoIG9mIGV4Y2x1ZGVkIElETCBmaWxlKQotICAiIiIKLSAgIyBFeGNsdWRlIGV4Y2x1ZGVkIHNvdXJjZXMgY29taW5nIGludG8gdGhlIGdlbmVyYXRvci4KLSAgZXhjbHVkZWRfc291cmNlcy51cGRhdGUoc2V0KHNwZWMuZ2V0KCdzb3VyY2VzX2V4Y2x1ZGVkJywgW10pKSkKLSAgIyBBZGQgZXhjbHVkZWQgc291cmNlcyBpbnRvIHNvdXJjZXMgZm9yIGdvb2QgbWVhc3VyZS4KLSAgc291cmNlcy51cGRhdGUoZXhjbHVkZWRfc291cmNlcykKLSAgIyBDb252ZXJ0IHRvIHByb3BlciB3aW5kb3dzIGZvcm0uCi0gICMgTk9URTogc291cmNlcyBnb2VzIGZyb20gYmVpbmcgYSBzZXQgdG8gYSBsaXN0IGhlcmUuCi0gICMgTk9URTogZXhjbHVkZWRfc291cmNlcyBnb2VzIGZyb20gYmVpbmcgYSBzZXQgdG8gYSBsaXN0IGhlcmUuCi0gIHNvdXJjZXMgPSBfRml4UGF0aHMoc291cmNlcykKLSAgIyBDb252ZXJ0IHRvIHByb3BlciB3aW5kb3dzIGZvcm0uCi0gIGV4Y2x1ZGVkX3NvdXJjZXMgPSBfRml4UGF0aHMoZXhjbHVkZWRfc291cmNlcykKLQotICBleGNsdWRlZF9pZGwgPSBfSWRsRmlsZXNIYW5kbGVkTm9uTmF0aXZlbHkoc3BlYywgc291cmNlcykKLQotICBwcmVjb21waWxlZF9yZWxhdGVkID0gX0dldFByZWNvbXBpbGVSZWxhdGVkRmlsZXMoc3BlYykKLSAgIyBGaW5kIHRoZSBleGNsdWRlZCBvbmVzLCBtaW51cyB0aGUgcHJlY29tcGlsZWQgaGVhZGVyIHJlbGF0ZWQgb25lcy4KLSAgZnVsbHlfZXhjbHVkZWQgPSBbaSBmb3IgaSBpbiBleGNsdWRlZF9zb3VyY2VzIGlmIGkgbm90IGluIHByZWNvbXBpbGVkX3JlbGF0ZWRdCi0KLSAgIyBDb252ZXJ0IHRvIGZvbGRlcnMgYW5kIHRoZSByaWdodCBzbGFzaGVzLgotICBzb3VyY2VzID0gW2kuc3BsaXQoJ1xcJykgZm9yIGkgaW4gc291cmNlc10KLSAgc291cmNlcyA9IF9Db252ZXJ0U291cmNlc1RvRmlsdGVySGllcmFyY2h5KHNvdXJjZXMsIGV4Y2x1ZGVkPWZ1bGx5X2V4Y2x1ZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9leGNsdWRlZD1saXN0X2V4Y2x1ZGVkKQotCi0gIHJldHVybiBzb3VyY2VzLCBleGNsdWRlZF9zb3VyY2VzLCBleGNsdWRlZF9pZGwKLQotCi1kZWYgX0lkbEZpbGVzSGFuZGxlZE5vbk5hdGl2ZWx5KHNwZWMsIHNvdXJjZXMpOgotICAjIElmIGFueSBub24tbmF0aXZlIHJ1bGVzIHVzZSAnaWRsJyBhcyBhbiBleHRlbnNpb24gZXhjbHVkZSBpZGwgZmlsZXMuCi0gICMgR2F0aGVyIGEgbGlzdCBoZXJlIHRvIHVzZSBsYXRlci4KLSAgdXNpbmdfaWRsID0gRmFsc2UKLSAgZm9yIHJ1bGUgaW4gc3BlYy5nZXQoJ3J1bGVzJywgW10pOgotICAgIGlmIHJ1bGVbJ2V4dGVuc2lvbiddID09ICdpZGwnIGFuZCBpbnQocnVsZS5nZXQoJ21zdnNfZXh0ZXJuYWxfcnVsZScsIDApKToKLSAgICAgIHVzaW5nX2lkbCA9IFRydWUKLSAgICAgIGJyZWFrCi0gIGlmIHVzaW5nX2lkbDoKLSAgICBleGNsdWRlZF9pZGwgPSBbaSBmb3IgaSBpbiBzb3VyY2VzIGlmIGkuZW5kc3dpdGgoJy5pZGwnKV0KLSAgZWxzZToKLSAgICBleGNsdWRlZF9pZGwgPSBbXQotICByZXR1cm4gZXhjbHVkZWRfaWRsCi0KLQotZGVmIF9HZXRQcmVjb21waWxlUmVsYXRlZEZpbGVzKHNwZWMpOgotICAjIEdhdGhlciBhIGxpc3Qgb2YgcHJlY29tcGlsZWQgaGVhZGVyIHJlbGF0ZWQgc291cmNlcy4KLSAgcHJlY29tcGlsZWRfcmVsYXRlZCA9IFtdCi0gIGZvciBfLCBjb25maWcgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICBmb3IgayBpbiBwcmVjb21wX2tleXM6Ci0gICAgICBmID0gY29uZmlnLmdldChrKQotICAgICAgaWYgZjoKLSAgICAgICAgcHJlY29tcGlsZWRfcmVsYXRlZC5hcHBlbmQoX0ZpeFBhdGgoZikpCi0gIHJldHVybiBwcmVjb21waWxlZF9yZWxhdGVkCi0KLQotZGVmIF9FeGNsdWRlRmlsZXNGcm9tQmVpbmdCdWlsdChwLCBzcGVjLCBleGNsdWRlZF9zb3VyY2VzLCBleGNsdWRlZF9pZGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZXhjbHVkZWQpOgotICBleGNsdXNpb25zID0gX0dldEV4Y2x1ZGVkRmlsZXNGcm9tQnVpbGQoc3BlYywgZXhjbHVkZWRfc291cmNlcywgZXhjbHVkZWRfaWRsKQotICBmb3IgZmlsZV9uYW1lLCBleGNsdWRlZF9jb25maWdzIGluIGV4Y2x1c2lvbnMuaXRlcml0ZW1zKCk6Ci0gICAgaWYgKG5vdCBsaXN0X2V4Y2x1ZGVkIGFuZAotICAgICAgICAgICAgbGVuKGV4Y2x1ZGVkX2NvbmZpZ3MpID09IGxlbihzcGVjWydjb25maWd1cmF0aW9ucyddKSk6Ci0gICAgICAjIElmIHdlJ3JlIG5vdCBsaXN0aW5nIGV4Y2x1ZGVkIGZpbGVzLCB0aGVuIHRoZXkgd29uJ3QgYXBwZWFyIGluIHRoZQotICAgICAgIyBwcm9qZWN0LCBzbyBkb24ndCB0cnkgdG8gY29uZmlndXJlIHRoZW0gdG8gYmUgZXhjbHVkZWQuCi0gICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgIGZvciBjb25maWdfbmFtZSwgY29uZmlnIGluIGV4Y2x1ZGVkX2NvbmZpZ3M6Ci0gICAgICAgIHAuQWRkRmlsZUNvbmZpZyhmaWxlX25hbWUsIF9Db25maWdGdWxsTmFtZShjb25maWdfbmFtZSwgY29uZmlnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsnRXhjbHVkZWRGcm9tQnVpbGQnOiAndHJ1ZSd9KQotCi0KLWRlZiBfR2V0RXhjbHVkZWRGaWxlc0Zyb21CdWlsZChzcGVjLCBleGNsdWRlZF9zb3VyY2VzLCBleGNsdWRlZF9pZGwpOgotICBleGNsdXNpb25zID0ge30KLSAgIyBFeGNsdWRlIGV4Y2x1ZGVkIHNvdXJjZXMgZnJvbSBiZWluZyBidWlsdC4KLSAgZm9yIGYgaW4gZXhjbHVkZWRfc291cmNlczoKLSAgICBleGNsdWRlZF9jb25maWdzID0gW10KLSAgICBmb3IgY29uZmlnX25hbWUsIGNvbmZpZyBpbiBzcGVjWydjb25maWd1cmF0aW9ucyddLml0ZXJpdGVtcygpOgotICAgICAgcHJlY29tcGVkID0gW19GaXhQYXRoKGNvbmZpZy5nZXQoaSwgJycpKSBmb3IgaSBpbiBwcmVjb21wX2tleXNdCi0gICAgICAjIERvbid0IGRvIHRoaXMgZm9yIG9uZXMgdGhhdCBhcmUgcHJlY29tcGlsZWQgaGVhZGVyIHJlbGF0ZWQuCi0gICAgICBpZiBmIG5vdCBpbiBwcmVjb21wZWQ6Ci0gICAgICAgIGV4Y2x1ZGVkX2NvbmZpZ3MuYXBwZW5kKChjb25maWdfbmFtZSwgY29uZmlnKSkKLSAgICBleGNsdXNpb25zW2ZdID0gZXhjbHVkZWRfY29uZmlncwotICAjIElmIGFueSBub24tbmF0aXZlIHJ1bGVzIHVzZSAnaWRsJyBhcyBhbiBleHRlbnNpb24gZXhjbHVkZSBpZGwgZmlsZXMuCi0gICMgRXhjbHVkZSB0aGVtIG5vdy4KLSAgZm9yIGYgaW4gZXhjbHVkZWRfaWRsOgotICAgIGV4Y2x1ZGVkX2NvbmZpZ3MgPSBbXQotICAgIGZvciBjb25maWdfbmFtZSwgY29uZmlnIGluIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10uaXRlcml0ZW1zKCk6Ci0gICAgICBleGNsdWRlZF9jb25maWdzLmFwcGVuZCgoY29uZmlnX25hbWUsIGNvbmZpZykpCi0gICAgZXhjbHVzaW9uc1tmXSA9IGV4Y2x1ZGVkX2NvbmZpZ3MKLSAgcmV0dXJuIGV4Y2x1c2lvbnMKLQotCi1kZWYgX0FkZFRvb2xGaWxlc1RvTVNWUyhwLCBzcGVjKToKLSAgIyBBZGQgaW4gdG9vbCBmaWxlcyAocnVsZXMpLgotICB0b29sX2ZpbGVzID0gc2V0KCkKLSAgZm9yIF8sIGNvbmZpZyBpbiBzcGVjWydjb25maWd1cmF0aW9ucyddLml0ZXJpdGVtcygpOgotICAgIGZvciBmIGluIGNvbmZpZy5nZXQoJ21zdnNfdG9vbF9maWxlcycsIFtdKToKLSAgICAgIHRvb2xfZmlsZXMuYWRkKGYpCi0gIGZvciBmIGluIHRvb2xfZmlsZXM6Ci0gICAgcC5BZGRUb29sRmlsZShmKQotCi0KLWRlZiBfSGFuZGxlUHJlQ29tcGlsZWRIZWFkZXJzKHAsIHNvdXJjZXMsIHNwZWMpOgotICAjIFByZS1jb21waWxlZCBoZWFkZXIgc291cmNlIHN0dWJzIG5lZWQgYSBkaWZmZXJlbnQgY29tcGlsZXIgZmxhZwotICAjIChnZW5lcmF0ZSBwcmVjb21waWxlZCBoZWFkZXIpIGFuZCBhbnkgc291cmNlIGZpbGUgbm90IG9mIHRoZSBzYW1lCi0gICMga2luZCAoaS5lLiBDIHZzLiBDKyspIGFzIHRoZSBwcmVjb21waWxlZCBoZWFkZXIgc291cmNlIHN0dWIgbmVlZHMKLSAgIyB0byBoYXZlIHVzZSBvZiBwcmVjb21waWxlZCBoZWFkZXJzIGRpc2FibGVkLgotICBleHRlbnNpb25zX2V4Y2x1ZGVkX2Zyb21fcHJlY29tcGlsZSA9IFtdCi0gIGZvciBjb25maWdfbmFtZSwgY29uZmlnIGluIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10uaXRlcml0ZW1zKCk6Ci0gICAgc291cmNlID0gY29uZmlnLmdldCgnbXN2c19wcmVjb21waWxlZF9zb3VyY2UnKQotICAgIGlmIHNvdXJjZToKLSAgICAgIHNvdXJjZSA9IF9GaXhQYXRoKHNvdXJjZSkKLSAgICAgICMgVXNlUHJlY29tcGlsZWRIZWFkZXI9MSBmb3IgaWYgdXNpbmcgcHJlY29tcGlsZWQgaGVhZGVycy4KLSAgICAgIHRvb2wgPSBNU1ZTUHJvamVjdC5Ub29sKCdWQ0NMQ29tcGlsZXJUb29sJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnVXNlUHJlY29tcGlsZWRIZWFkZXInOiAnMSd9KQotICAgICAgcC5BZGRGaWxlQ29uZmlnKHNvdXJjZSwgX0NvbmZpZ0Z1bGxOYW1lKGNvbmZpZ19uYW1lLCBjb25maWcpLAotICAgICAgICAgICAgICAgICAgICAgIHt9LCB0b29scz1bdG9vbF0pCi0gICAgICBiYXNlbmFtZSwgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChzb3VyY2UpCi0gICAgICBpZiBleHRlbnNpb24gPT0gJy5jJzoKLSAgICAgICAgZXh0ZW5zaW9uc19leGNsdWRlZF9mcm9tX3ByZWNvbXBpbGUgPSBbJy5jYycsICcuY3BwJywgJy5jeHgnXQotICAgICAgZWxzZToKLSAgICAgICAgZXh0ZW5zaW9uc19leGNsdWRlZF9mcm9tX3ByZWNvbXBpbGUgPSBbJy5jJ10KLSAgZGVmIERpc2FibGVGb3JTb3VyY2VUcmVlKHNvdXJjZV90cmVlKToKLSAgICBmb3Igc291cmNlIGluIHNvdXJjZV90cmVlOgotICAgICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIE1TVlNQcm9qZWN0LkZpbHRlcik6Ci0gICAgICAgIERpc2FibGVGb3JTb3VyY2VUcmVlKHNvdXJjZS5jb250ZW50cykKLSAgICAgIGVsc2U6Ci0gICAgICAgIGJhc2VuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHNvdXJjZSkKLSAgICAgICAgaWYgZXh0ZW5zaW9uIGluIGV4dGVuc2lvbnNfZXhjbHVkZWRfZnJvbV9wcmVjb21waWxlOgotICAgICAgICAgIGZvciBjb25maWdfbmFtZSwgY29uZmlnIGluIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICB0b29sID0gTVNWU1Byb2plY3QuVG9vbCgnVkNDTENvbXBpbGVyVG9vbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J1VzZVByZWNvbXBpbGVkSGVhZGVyJzogJzAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb3JjZWRJbmNsdWRlRmlsZXMnOiAnJChOT0lOSEVSSVQpJ30pCi0gICAgICAgICAgICBwLkFkZEZpbGVDb25maWcoX0ZpeFBhdGgoc291cmNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29uZmlnRnVsbE5hbWUoY29uZmlnX25hbWUsIGNvbmZpZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAge30sIHRvb2xzPVt0b29sXSkKLSAgIyBEbyBub3RoaW5nIGlmIHRoZXJlIHdhcyBubyBwcmVjb21waWxlZCBzb3VyY2UuCi0gIGlmIGV4dGVuc2lvbnNfZXhjbHVkZWRfZnJvbV9wcmVjb21waWxlOgotICAgIERpc2FibGVGb3JTb3VyY2VUcmVlKHNvdXJjZXMpCi0KLQotZGVmIF9BZGRBY3Rpb25zKGFjdGlvbnNfdG9fYWRkLCBzcGVjLCByZWxhdGl2ZV9wYXRoX29mX2d5cF9maWxlKToKLSAgIyBBZGQgYWN0aW9ucy4KLSAgYWN0aW9ucyA9IHNwZWMuZ2V0KCdhY3Rpb25zJywgW10pCi0gICMgRG9uJ3Qgc2V0dXBfZW52IGV2ZXJ5IHRpbWUuIFdoZW4gYWxsIHRoZSBhY3Rpb25zIGFyZSBydW4gdG9nZXRoZXIgaW4gb25lCi0gICMgYmF0Y2ggZmlsZSBpbiBWUywgdGhlIFBBVEggd2lsbCBncm93IHRvbyBsb25nLgotICAjIE1lbWJlcnNoaXAgaW4gdGhpcyBzZXQgbWVhbnMgdGhhdCB0aGUgY3lnd2luIGVudmlyb25tZW50IGhhcyBiZWVuIHNldCB1cCwKLSAgIyBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBzZXQgdXAgYWdhaW4uCi0gIGhhdmVfc2V0dXBfZW52ID0gc2V0KCkKLSAgZm9yIGEgaW4gYWN0aW9uczoKLSAgICAjIEF0dGFjaCBhY3Rpb25zIHRvIHRoZSBneXAgZmlsZSBpZiBub3RoaW5nIGVsc2UgaXMgdGhlcmUuCi0gICAgaW5wdXRzID0gYS5nZXQoJ2lucHV0cycpIG9yIFtyZWxhdGl2ZV9wYXRoX29mX2d5cF9maWxlXQotICAgIGF0dGFjaGVkX3RvID0gaW5wdXRzWzBdCi0gICAgbmVlZF9zZXR1cF9lbnYgPSBhdHRhY2hlZF90byBub3QgaW4gaGF2ZV9zZXR1cF9lbnYKLSAgICBjbWQgPSBfQnVpbGRDb21tYW5kTGluZUZvclJ1bGUoc3BlYywgYSwgaGFzX2lucHV0X3BhdGg9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3NldHVwX2Vudj1uZWVkX3NldHVwX2VudikKLSAgICBoYXZlX3NldHVwX2Vudi5hZGQoYXR0YWNoZWRfdG8pCi0gICAgIyBBZGQgdGhlIGFjdGlvbi4KLSAgICBfQWRkQWN0aW9uU3RlcChhY3Rpb25zX3RvX2FkZCwKLSAgICAgICAgICAgICAgICAgICBpbnB1dHM9aW5wdXRzLAotICAgICAgICAgICAgICAgICAgIG91dHB1dHM9YS5nZXQoJ291dHB1dHMnLCBbXSksCi0gICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249YS5nZXQoJ21lc3NhZ2UnLCBhWydhY3Rpb25fbmFtZSddKSwKLSAgICAgICAgICAgICAgICAgICBjb21tYW5kPWNtZCkKLQotCi1kZWYgX1dyaXRlTVNWU1VzZXJGaWxlKHByb2plY3RfcGF0aCwgdmVyc2lvbiwgc3BlYyk6Ci0gICMgQWRkIHJ1bl9hcyBhbmQgdGVzdCB0YXJnZXRzLgotICBpZiAncnVuX2FzJyBpbiBzcGVjOgotICAgIHJ1bl9hcyA9IHNwZWNbJ3J1bl9hcyddCi0gICAgYWN0aW9uID0gcnVuX2FzLmdldCgnYWN0aW9uJywgW10pCi0gICAgZW52aXJvbm1lbnQgPSBydW5fYXMuZ2V0KCdlbnZpcm9ubWVudCcsIFtdKQotICAgIHdvcmtpbmdfZGlyZWN0b3J5ID0gcnVuX2FzLmdldCgnd29ya2luZ19kaXJlY3RvcnknLCAnLicpCi0gIGVsaWYgaW50KHNwZWMuZ2V0KCd0ZXN0JywgMCkpOgotICAgIGFjdGlvbiA9IFsnJChUYXJnZXRQYXRoKScsICctLWd0ZXN0X3ByaW50X3RpbWUnXQotICAgIGVudmlyb25tZW50ID0gW10KLSAgICB3b3JraW5nX2RpcmVjdG9yeSA9ICcuJwotICBlbHNlOgotICAgIHJldHVybiAgIyBOb3RoaW5nIHRvIGFkZAotICAjIFdyaXRlIG91dCB0aGUgdXNlciBmaWxlLgotICB1c2VyX2ZpbGUgPSBfQ3JlYXRlTVNWU1VzZXJGaWxlKHByb2plY3RfcGF0aCwgdmVyc2lvbiwgc3BlYykKLSAgZm9yIGNvbmZpZ19uYW1lLCBjX2RhdGEgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICB1c2VyX2ZpbGUuQWRkRGVidWdTZXR0aW5ncyhfQ29uZmlnRnVsbE5hbWUoY29uZmlnX25hbWUsIGNfZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBlbnZpcm9ubWVudCwgd29ya2luZ19kaXJlY3RvcnkpCi0gIHVzZXJfZmlsZS5Xcml0ZUlmQ2hhbmdlZCgpCi0KLQotZGVmIF9BZGRDb3BpZXMoYWN0aW9uc190b19hZGQsIHNwZWMpOgotICBjb3BpZXMgPSBfR2V0Q29waWVzKHNwZWMpCi0gIGZvciBpbnB1dHMsIG91dHB1dHMsIGNtZCwgZGVzY3JpcHRpb24gaW4gY29waWVzOgotICAgIF9BZGRBY3Rpb25TdGVwKGFjdGlvbnNfdG9fYWRkLCBpbnB1dHM9aW5wdXRzLCBvdXRwdXRzPW91dHB1dHMsCi0gICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sIGNvbW1hbmQ9Y21kKQotCi0KLWRlZiBfR2V0Q29waWVzKHNwZWMpOgotICBjb3BpZXMgPSBbXQotICAjIEFkZCBjb3BpZXMuCi0gIGZvciBjcHkgaW4gc3BlYy5nZXQoJ2NvcGllcycsIFtdKToKLSAgICBmb3Igc3JjIGluIGNweS5nZXQoJ2ZpbGVzJywgW10pOgotICAgICAgZHN0ID0gb3MucGF0aC5qb2luKGNweVsnZGVzdGluYXRpb24nXSwgb3MucGF0aC5iYXNlbmFtZShzcmMpKQotICAgICAgIyBfQWRkQ3VzdG9tQnVpbGRUb29sRm9yTVNWUygpIHdpbGwgY2FsbCBfRml4UGF0aCgpIG9uIHRoZSBpbnB1dHMgYW5kCi0gICAgICAjIG91dHB1dHMsIHNvIGRvIHRoZSBzYW1lIGZvciBvdXIgZ2VuZXJhdGVkIGNvbW1hbmQgbGluZS4KLSAgICAgIGlmIHNyYy5lbmRzd2l0aCgnLycpOgotICAgICAgICBzcmNfYmFyZSA9IHNyY1s6LTFdCi0gICAgICAgIGJhc2VfZGlyID0gcG9zaXhwYXRoLnNwbGl0KHNyY19iYXJlKVswXQotICAgICAgICBvdXRlcl9kaXIgPSBwb3NpeHBhdGguc3BsaXQoc3JjX2JhcmUpWzFdCi0gICAgICAgIGNtZCA9ICdjZCAiJXMiICYmIHhjb3B5IC9lIC9mIC95ICIlcyIgIiVzXFwlc1xcIicgJSAoCi0gICAgICAgICAgICBfRml4UGF0aChiYXNlX2RpciksIG91dGVyX2RpciwgX0ZpeFBhdGgoZHN0KSwgb3V0ZXJfZGlyKQotICAgICAgICBjb3BpZXMuYXBwZW5kKChbc3JjXSwgWydkdW1teV9jb3BpZXMnLCBkc3RdLCBjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICdDb3B5aW5nICVzIHRvICVzJyAlIChzcmMsIGRzdCkpKQotICAgICAgZWxzZToKLSAgICAgICAgY21kID0gJ21rZGlyICIlcyIgMj5udWwgJiBzZXQgRVJST1JMRVZFTD0wICYgY29weSAvWSAiJXMiICIlcyInICUgKAotICAgICAgICAgICAgX0ZpeFBhdGgoY3B5WydkZXN0aW5hdGlvbiddKSwgX0ZpeFBhdGgoc3JjKSwgX0ZpeFBhdGgoZHN0KSkKLSAgICAgICAgY29waWVzLmFwcGVuZCgoW3NyY10sIFtkc3RdLCBjbWQsICdDb3B5aW5nICVzIHRvICVzJyAlIChzcmMsIGRzdCkpKQotICByZXR1cm4gY29waWVzCi0KLQotZGVmIF9HZXRQYXRoRGljdChyb290LCBwYXRoKToKLSAgIyB8cGF0aHwgd2lsbCBldmVudHVhbGx5IGJlIGVtcHR5IChpbiB0aGUgcmVjdXJzaXZlIGNhbGxzKSBpZiBpdCB3YXMgaW5pdGlhbGx5Ci0gICMgcmVsYXRpdmU7IG90aGVyd2lzZSBpdCB3aWxsIGV2ZW50dWFsbHkgZW5kIHVwIGFzICdcJywgJ0Q6XCcsIGV0Yy4KLSAgaWYgbm90IHBhdGggb3IgcGF0aC5lbmRzd2l0aChvcy5zZXApOgotICAgIHJldHVybiByb290Ci0gIHBhcmVudCwgZm9sZGVyID0gb3MucGF0aC5zcGxpdChwYXRoKQotICBwYXJlbnRfZGljdCA9IF9HZXRQYXRoRGljdChyb290LCBwYXJlbnQpCi0gIGlmIGZvbGRlciBub3QgaW4gcGFyZW50X2RpY3Q6Ci0gICAgcGFyZW50X2RpY3RbZm9sZGVyXSA9IGRpY3QoKQotICByZXR1cm4gcGFyZW50X2RpY3RbZm9sZGVyXQotCi0KLWRlZiBfRGljdHNUb0ZvbGRlcnMoYmFzZV9wYXRoLCBidWNrZXQsIGZsYXQpOgotICAjIENvbnZlcnQgdG8gZm9sZGVycyByZWN1cnNpdmVseS4KLSAgY2hpbGRyZW4gPSBbXQotICBmb3IgZm9sZGVyLCBjb250ZW50cyBpbiBidWNrZXQuaXRlcml0ZW1zKCk6Ci0gICAgaWYgdHlwZShjb250ZW50cykgPT0gZGljdDoKLSAgICAgIGZvbGRlcl9jaGlsZHJlbiA9IF9EaWN0c1RvRm9sZGVycyhvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCBmb2xkZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLCBmbGF0KQotICAgICAgaWYgZmxhdDoKLSAgICAgICAgY2hpbGRyZW4gKz0gZm9sZGVyX2NoaWxkcmVuCi0gICAgICBlbHNlOgotICAgICAgICBmb2xkZXJfY2hpbGRyZW4gPSBNU1ZTTmV3Lk1TVlNGb2xkZXIob3MucGF0aC5qb2luKGJhc2VfcGF0aCwgZm9sZGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9JygnICsgZm9sZGVyICsgJyknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcz1mb2xkZXJfY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChmb2xkZXJfY2hpbGRyZW4pCi0gICAgZWxzZToKLSAgICAgIGNoaWxkcmVuLmFwcGVuZChjb250ZW50cykKLSAgcmV0dXJuIGNoaWxkcmVuCi0KLQotZGVmIF9Db2xsYXBzZVNpbmdsZXMocGFyZW50LCBub2RlKToKLSAgIyBSZWN1cnNpdmVseSBleHBsb3JlciB0aGUgdHJlZSBvZiBkaWN0cyBsb29raW5nIGZvciBwcm9qZWN0cyB3aGljaCBhcmUKLSAgIyB0aGUgc29sZSBpdGVtIGluIGEgZm9sZGVyIHdoaWNoIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBwcm9qZWN0LiBCcmluZwotICAjIHN1Y2ggcHJvamVjdHMgdXAgb25lIGxldmVsLgotICBpZiAodHlwZShub2RlKSA9PSBkaWN0IGFuZAotICAgICAgbGVuKG5vZGUpID09IDEgYW5kCi0gICAgICBub2RlLmtleXMoKVswXSA9PSBwYXJlbnQgKyAnLnZjcHJvaicpOgotICAgIHJldHVybiBub2RlW25vZGUua2V5cygpWzBdXQotICBpZiB0eXBlKG5vZGUpICE9IGRpY3Q6Ci0gICAgcmV0dXJuIG5vZGUKLSAgZm9yIGNoaWxkIGluIG5vZGU6Ci0gICAgbm9kZVtjaGlsZF0gPSBfQ29sbGFwc2VTaW5nbGVzKGNoaWxkLCBub2RlW2NoaWxkXSkKLSAgcmV0dXJuIG5vZGUKLQotCi1kZWYgX0dhdGhlclNvbHV0aW9uRm9sZGVycyhzbG5fcHJvamVjdHMsIHByb2plY3Rfb2JqZWN0cywgZmxhdCk6Ci0gIHJvb3QgPSB7fQotICAjIENvbnZlcnQgaW50byBhIHRyZWUgb2YgZGljdHMgb24gcGF0aC4KLSAgZm9yIHAgaW4gc2xuX3Byb2plY3RzOgotICAgIGd5cF9maWxlLCB0YXJnZXQgPSBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KHApWzA6Ml0KLSAgICBneXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKGd5cF9maWxlKQotICAgIHBhdGhfZGljdCA9IF9HZXRQYXRoRGljdChyb290LCBneXBfZGlyKQotICAgIHBhdGhfZGljdFt0YXJnZXQgKyAnLnZjcHJvaiddID0gcHJvamVjdF9vYmplY3RzW3BdCi0gICMgV2FsayBkb3duIGZyb20gdGhlIHRvcCB1bnRpbCB3ZSBoaXQgYSBmb2xkZXIgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBlbnRyeS4KLSAgIyBJbiBwcmFjdGljZSwgdGhpcyBzdHJpcHMgdGhlIHRvcC1sZXZlbCAic3JjLyIgZGlyIGZyb20gdGhlIGhpZXJhcmNoeSBpbgotICAjIHRoZSBzb2x1dGlvbi4KLSAgd2hpbGUgbGVuKHJvb3QpID09IDEgYW5kIHR5cGUocm9vdFtyb290LmtleXMoKVswXV0pID09IGRpY3Q6Ci0gICAgcm9vdCA9IHJvb3Rbcm9vdC5rZXlzKClbMF1dCi0gICMgQ29sbGFwc2Ugc2luZ2xlcy4KLSAgcm9vdCA9IF9Db2xsYXBzZVNpbmdsZXMoJycsIHJvb3QpCi0gICMgTWVyZ2UgYnVja2V0cyB1bnRpbCBldmVyeXRoaW5nIGlzIGEgcm9vdCBlbnRyeS4KLSAgcmV0dXJuIF9EaWN0c1RvRm9sZGVycygnJywgcm9vdCwgZmxhdCkKLQotCi1kZWYgX0dldFBhdGhPZlByb2plY3QocXVhbGlmaWVkX3RhcmdldCwgc3BlYywgb3B0aW9ucywgbXN2c192ZXJzaW9uKToKLSAgZGVmYXVsdF9jb25maWcgPSBfR2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oc3BlYykKLSAgcHJval9maWxlbmFtZSA9IGRlZmF1bHRfY29uZmlnLmdldCgnbXN2c19leGlzdGluZ192Y3Byb2onKQotICBpZiBub3QgcHJval9maWxlbmFtZToKLSAgICBwcm9qX2ZpbGVuYW1lID0gKHNwZWNbJ3RhcmdldF9uYW1lJ10gKyBvcHRpb25zLnN1ZmZpeCArCi0gICAgICAgICAgICAgICAgICAgICBtc3ZzX3ZlcnNpb24uUHJvamVjdEV4dGVuc2lvbigpKQotCi0gIGJ1aWxkX2ZpbGUgPSBneXAuY29tbW9uLkJ1aWxkRmlsZShxdWFsaWZpZWRfdGFyZ2V0KQotICBwcm9qX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpLCBwcm9qX2ZpbGVuYW1lKQotICBmaXhfcHJlZml4ID0gTm9uZQotICBpZiBvcHRpb25zLmdlbmVyYXRvcl9vdXRwdXQ6Ci0gICAgcHJvamVjdF9kaXJfcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgocHJval9wYXRoKSkKLSAgICBwcm9qX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCBwcm9qX3BhdGgpCi0gICAgZml4X3ByZWZpeCA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKHByb2plY3RfZGlyX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShwcm9qX3BhdGgpKQotICByZXR1cm4gcHJval9wYXRoLCBmaXhfcHJlZml4Ci0KLQotZGVmIF9HZXRQbGF0Zm9ybU92ZXJyaWRlc09mUHJvamVjdChzcGVjKToKLSAgIyBQcmVwYXJlIGEgZGljdCBpbmRpY2F0aW5nIHdoaWNoIHByb2plY3QgY29uZmlndXJhdGlvbnMgYXJlIHVzZWQgZm9yIHdoaWNoCi0gICMgc29sdXRpb24gY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdGFyZ2V0LgotICBjb25maWdfcGxhdGZvcm1fb3ZlcnJpZGVzID0ge30KLSAgZm9yIGNvbmZpZ19uYW1lLCBjIGluIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10uaXRlcml0ZW1zKCk6Ci0gICAgY29uZmlnX2Z1bGxuYW1lID0gX0NvbmZpZ0Z1bGxOYW1lKGNvbmZpZ19uYW1lLCBjKQotICAgIHBsYXRmb3JtID0gYy5nZXQoJ21zdnNfdGFyZ2V0X3BsYXRmb3JtJywgX0NvbmZpZ1BsYXRmb3JtKGMpKQotICAgIGZpeGVkX2NvbmZpZ19mdWxsbmFtZSA9ICclc3wlcycgJSAoCi0gICAgICAgIF9Db25maWdCYXNlTmFtZShjb25maWdfbmFtZSwgX0NvbmZpZ1BsYXRmb3JtKGMpKSwgcGxhdGZvcm0pCi0gICAgY29uZmlnX3BsYXRmb3JtX292ZXJyaWRlc1tjb25maWdfZnVsbG5hbWVdID0gZml4ZWRfY29uZmlnX2Z1bGxuYW1lCi0gIHJldHVybiBjb25maWdfcGxhdGZvcm1fb3ZlcnJpZGVzCi0KLQotZGVmIF9DcmVhdGVQcm9qZWN0T2JqZWN0cyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBvcHRpb25zLCBtc3ZzX3ZlcnNpb24pOgotICAiIiJDcmVhdGUgYSBNU1ZTUHJvamVjdCBvYmplY3QgZm9yIHRoZSB0YXJnZXRzIGZvdW5kIGluIHRhcmdldCBsaXN0LgotCi0gIEFyZ3VtZW50czoKLSAgICB0YXJnZXRfbGlzdDogdGhlIGxpc3Qgb2YgdGFyZ2V0cyB0byBnZW5lcmF0ZSBwcm9qZWN0IG9iamVjdHMgZm9yLgotICAgIHRhcmdldF9kaWN0czogdGhlIGRpY3Rpb25hcnkgb2Ygc3BlY2lmaWNhdGlvbnMuCi0gICAgb3B0aW9uczogZ2xvYmFsIGdlbmVyYXRvciBvcHRpb25zLgotICAgIG1zdnNfdmVyc2lvbjogdGhlIE1TVlNWZXJzaW9uIG9iamVjdC4KLSAgUmV0dXJuczoKLSAgICBBIHNldCBvZiBjcmVhdGVkIHByb2plY3RzLCBrZXllZCBieSB0YXJnZXQuCi0gICIiIgotICBnbG9iYWwgZml4cGF0aF9wcmVmaXgKLSAgIyBHZW5lcmF0ZSBlYWNoIHByb2plY3QuCi0gIHByb2plY3RzID0ge30KLSAgZm9yIHF1YWxpZmllZF90YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgc3BlYyA9IHRhcmdldF9kaWN0c1txdWFsaWZpZWRfdGFyZ2V0XQotICAgIGlmIHNwZWNbJ3Rvb2xzZXQnXSAhPSAndGFyZ2V0JzoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigKLSAgICAgICAgICAnTXVsdGlwbGUgdG9vbHNldHMgbm90IHN1cHBvcnRlZCBpbiBtc3ZzIGJ1aWxkICh0YXJnZXQgJXMpJyAlCi0gICAgICAgICAgcXVhbGlmaWVkX3RhcmdldCkKLSAgICBwcm9qX3BhdGgsIGZpeHBhdGhfcHJlZml4ID0gX0dldFBhdGhPZlByb2plY3QocXVhbGlmaWVkX3RhcmdldCwgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywgbXN2c192ZXJzaW9uKQotICAgIGd1aWQgPSBfR2V0R3VpZE9mUHJvamVjdChwcm9qX3BhdGgsIHNwZWMpCi0gICAgb3ZlcnJpZGVzID0gX0dldFBsYXRmb3JtT3ZlcnJpZGVzT2ZQcm9qZWN0KHNwZWMpCi0gICAgYnVpbGRfZmlsZSA9IGd5cC5jb21tb24uQnVpbGRGaWxlKHF1YWxpZmllZF90YXJnZXQpCi0gICAgIyBDcmVhdGUgb2JqZWN0IGZvciB0aGlzIHByb2plY3QuCi0gICAgb2JqID0gTVNWU05ldy5NU1ZTUHJvamVjdCgKLSAgICAgICAgcHJval9wYXRoLAotICAgICAgICBuYW1lPXNwZWNbJ3RhcmdldF9uYW1lJ10sCi0gICAgICAgIGd1aWQ9Z3VpZCwKLSAgICAgICAgc3BlYz1zcGVjLAotICAgICAgICBidWlsZF9maWxlPWJ1aWxkX2ZpbGUsCi0gICAgICAgIGNvbmZpZ19wbGF0Zm9ybV9vdmVycmlkZXM9b3ZlcnJpZGVzLAotICAgICAgICBmaXhwYXRoX3ByZWZpeD1maXhwYXRoX3ByZWZpeCkKLSAgICAjIFNldCBwcm9qZWN0IHRvb2xzZXQgaWYgYW55IChNUyBidWlsZCBvbmx5KQotICAgIGlmIG1zdnNfdmVyc2lvbi5Vc2VzVmN4cHJvaigpOgotICAgICAgb2JqLnNldF9tc2J1aWxkX3Rvb2xzZXQoCi0gICAgICAgICAgX0dldE1zYnVpbGRUb29sc2V0T2ZQcm9qZWN0KHByb2pfcGF0aCwgc3BlYywgbXN2c192ZXJzaW9uKSkKLSAgICBwcm9qZWN0c1txdWFsaWZpZWRfdGFyZ2V0XSA9IG9iagotICAjIFNldCBhbGwgdGhlIGRlcGVuZGVuY2llcwotICBmb3IgcHJvamVjdCBpbiBwcm9qZWN0cy52YWx1ZXMoKToKLSAgICBkZXBzID0gcHJvamVjdC5zcGVjLmdldCgnZGVwZW5kZW5jaWVzJywgW10pCi0gICAgZGVwcyA9IFtwcm9qZWN0c1tkXSBmb3IgZCBpbiBkZXBzXQotICAgIHByb2plY3Quc2V0X2RlcGVuZGVuY2llcyhkZXBzKQotICByZXR1cm4gcHJvamVjdHMKLQotCi1kZWYgQ2FsY3VsYXRlVmFyaWFibGVzKGRlZmF1bHRfdmFyaWFibGVzLCBwYXJhbXMpOgotICAiIiJHZW5lcmF0ZWQgdmFyaWFibGVzIHRoYXQgcmVxdWlyZSBwYXJhbXMgdG8gYmUga25vd24uIiIiCi0KLSAgZ2VuZXJhdG9yX2ZsYWdzID0gcGFyYW1zLmdldCgnZ2VuZXJhdG9yX2ZsYWdzJywge30pCi0KLSAgIyBTZWxlY3QgcHJvamVjdCBmaWxlIGZvcm1hdCB2ZXJzaW9uIChpZiB1bnNldCwgZGVmYXVsdCB0byBhdXRvIGRldGVjdGluZykuCi0gIG1zdnNfdmVyc2lvbiA9IE1TVlNWZXJzaW9uLlNlbGVjdFZpc3VhbFN0dWRpb1ZlcnNpb24oCi0gICAgICBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCdtc3ZzX3ZlcnNpb24nLCAnYXV0bycpKQotICAjIFN0YXNoIG1zdnNfdmVyc2lvbiBmb3IgbGF0ZXIgKHNvIHdlIGRvbid0IGhhdmUgdG8gcHJvYmUgdGhlIHN5c3RlbSB0d2ljZSkuCi0gIHBhcmFtc1snbXN2c192ZXJzaW9uJ10gPSBtc3ZzX3ZlcnNpb24KLQotICAjIFNldCBhIHZhcmlhYmxlIHNvIGNvbmRpdGlvbnMgY2FuIGJlIGJhc2VkIG9uIG1zdnNfdmVyc2lvbi4KLSAgZGVmYXVsdF92YXJpYWJsZXNbJ01TVlNfVkVSU0lPTiddID0gbXN2c192ZXJzaW9uLlNob3J0TmFtZSgpCi0KLSAgIyBUbyBkZXRlcm1pbmUgcHJvY2Vzc29yIHdvcmQgc2l6ZSBvbiBXaW5kb3dzLCBpbiBhZGRpdGlvbiB0byBjaGVja2luZwotICAjIFBST0NFU1NPUl9BUkNISVRFQ1RVUkUgKHdoaWNoIHJlZmxlY3RzIHRoZSB3b3JkIHNpemUgb2YgdGhlIGN1cnJlbnQKLSAgIyBwcm9jZXNzKSwgaXQgaXMgYWxzbyBuZWNlc3NhcnkgdG8gY2hlY2sgUFJPQ0VTU09SX0FSQ0lURVc2NDMyICh3aGljaAotICAjIGNvbnRhaW5zIHRoZSBhY3R1YWwgd29yZCBzaXplIG9mIHRoZSBzeXN0ZW0gd2hlbiBydW5uaW5nIHRocnUgV09XNjQpLgotICBpZiAob3MuZW52aXJvbi5nZXQoJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnLCAnJykuZmluZCgnNjQnKSA+PSAwIG9yCi0gICAgICBvcy5lbnZpcm9uLmdldCgnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMicsICcnKS5maW5kKCc2NCcpID49IDApOgotICAgIGRlZmF1bHRfdmFyaWFibGVzWydNU1ZTX09TX0JJVFMnXSA9IDY0Ci0gIGVsc2U6Ci0gICAgZGVmYXVsdF92YXJpYWJsZXNbJ01TVlNfT1NfQklUUyddID0gMzIKLQotCi1kZWYgUGVyZm9ybUJ1aWxkKGRhdGEsIGNvbmZpZ3VyYXRpb25zLCBwYXJhbXMpOgotICBvcHRpb25zID0gcGFyYW1zWydvcHRpb25zJ10KLSAgbXN2c192ZXJzaW9uID0gcGFyYW1zWydtc3ZzX3ZlcnNpb24nXQotICBkZXZlbnYgPSBvcy5wYXRoLmpvaW4obXN2c192ZXJzaW9uLnBhdGgsICdDb21tb243JywgJ0lERScsICdkZXZlbnYuY29tJykKLQotICBmb3IgYnVpbGRfZmlsZSwgYnVpbGRfZmlsZV9kaWN0IGluIGRhdGEuaXRlcml0ZW1zKCk6Ci0gICAgKGJ1aWxkX2ZpbGVfcm9vdCwgYnVpbGRfZmlsZV9leHQpID0gb3MucGF0aC5zcGxpdGV4dChidWlsZF9maWxlKQotICAgIGlmIGJ1aWxkX2ZpbGVfZXh0ICE9ICcuZ3lwJzoKLSAgICAgIGNvbnRpbnVlCi0gICAgc2xuX3BhdGggPSBidWlsZF9maWxlX3Jvb3QgKyBvcHRpb25zLnN1ZmZpeCArICcuc2xuJwotICAgIGlmIG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dDoKLSAgICAgIHNsbl9wYXRoID0gb3MucGF0aC5qb2luKG9wdGlvbnMuZ2VuZXJhdG9yX291dHB1dCwgc2xuX3BhdGgpCi0KLSAgZm9yIGNvbmZpZyBpbiBjb25maWd1cmF0aW9uczoKLSAgICBhcmd1bWVudHMgPSBbZGV2ZW52LCBzbG5fcGF0aCwgJy9CdWlsZCcsIGNvbmZpZ10KLSAgICBwcmludCAnQnVpbGRpbmcgWyVzXTogJXMnICUgKGNvbmZpZywgYXJndW1lbnRzKQotICAgIHJ0biA9IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChhcmd1bWVudHMpCi0KLQotZGVmIEdlbmVyYXRlT3V0cHV0KHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIHBhcmFtcyk6Ci0gICIiIkdlbmVyYXRlIC5zbG4gYW5kIC52Y3Byb2ogZmlsZXMuCi0KLSAgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZ2VuZXJhdG9yLgotICBBcmd1bWVudHM6Ci0gICAgdGFyZ2V0X2xpc3Q6IExpc3Qgb2YgdGFyZ2V0IHBhaXJzOiAnYmFzZS9iYXNlLmd5cDpiYXNlJy4KLSAgICB0YXJnZXRfZGljdHM6IERpY3Qgb2YgdGFyZ2V0IHByb3BlcnRpZXMga2V5ZWQgb24gdGFyZ2V0IHBhaXIuCi0gICAgZGF0YTogRGljdGlvbmFyeSBjb250YWluaW5nIHBlciAuZ3lwIGRhdGEuCi0gICIiIgotICBnbG9iYWwgZml4cGF0aF9wcmVmaXgKLQotICBvcHRpb25zID0gcGFyYW1zWydvcHRpb25zJ10KLQotICAjIEdldCB0aGUgcHJvamVjdCBmaWxlIGZvcm1hdCB2ZXJzaW9uIGJhY2sgb3V0IG9mIHdoZXJlIHdlIHN0YXNoZWQgaXQgaW4KLSAgIyBHZW5lcmF0b3JDYWxjdWxhdGVkVmFyaWFibGVzLgotICBtc3ZzX3ZlcnNpb24gPSBwYXJhbXNbJ21zdnNfdmVyc2lvbiddCi0KLSAgZ2VuZXJhdG9yX2ZsYWdzID0gcGFyYW1zLmdldCgnZ2VuZXJhdG9yX2ZsYWdzJywge30pCi0KLSAgIyBPcHRpb25hbGx5IHNoYXJkIHRhcmdldHMgbWFya2VkIHdpdGggJ21zdnNfc2hhcmQnOiBTSEFSRF9DT1VOVC4KLSAgKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMpID0gTVNWU1V0aWwuU2hhcmRUYXJnZXRzKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMpCi0KLSAgIyBQcmVwYXJlIHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMuCi0gIGNvbmZpZ3MgPSBzZXQoKQotICBmb3IgcXVhbGlmaWVkX3RhcmdldCBpbiB0YXJnZXRfbGlzdDoKLSAgICBzcGVjID0gdGFyZ2V0X2RpY3RzW3F1YWxpZmllZF90YXJnZXRdCi0gICAgZm9yIGNvbmZpZ19uYW1lLCBjb25maWcgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICAgIGNvbmZpZ3MuYWRkKF9Db25maWdGdWxsTmFtZShjb25maWdfbmFtZSwgY29uZmlnKSkKLSAgY29uZmlncyA9IGxpc3QoY29uZmlncykKLQotICAjIEZpZ3VyZSBvdXQgYWxsIHRoZSBwcm9qZWN0cyB0aGF0IHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCB0aGVpciBndWlkcwotICBwcm9qZWN0X29iamVjdHMgPSBfQ3JlYXRlUHJvamVjdE9iamVjdHModGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdnNfdmVyc2lvbikKLQotICAjIEdlbmVyYXRlIGVhY2ggcHJvamVjdC4KLSAgbWlzc2luZ19zb3VyY2VzID0gW10KLSAgZm9yIHByb2plY3QgaW4gcHJvamVjdF9vYmplY3RzLnZhbHVlcygpOgotICAgIGZpeHBhdGhfcHJlZml4ID0gcHJvamVjdC5maXhwYXRoX3ByZWZpeAotICAgIG1pc3Npbmdfc291cmNlcy5leHRlbmQoX0dlbmVyYXRlUHJvamVjdChwcm9qZWN0LCBvcHRpb25zLCBtc3ZzX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcl9mbGFncykpCi0gIGZpeHBhdGhfcHJlZml4ID0gTm9uZQotCi0gIGZvciBidWlsZF9maWxlIGluIGRhdGE6Ci0gICAgIyBWYWxpZGF0ZSBidWlsZF9maWxlIGV4dGVuc2lvbgotICAgIGlmIG5vdCBidWlsZF9maWxlLmVuZHN3aXRoKCcuZ3lwJyk6Ci0gICAgICBjb250aW51ZQotICAgIHNsbl9wYXRoID0gb3MucGF0aC5zcGxpdGV4dChidWlsZF9maWxlKVswXSArIG9wdGlvbnMuc3VmZml4ICsgJy5zbG4nCi0gICAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgICAgc2xuX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCBzbG5fcGF0aCkKLSAgICAjIEdldCBwcm9qZWN0cyBpbiB0aGUgc29sdXRpb24sIGFuZCB0aGVpciBkZXBlbmRlbnRzLgotICAgIHNsbl9wcm9qZWN0cyA9IGd5cC5jb21tb24uQnVpbGRGaWxlVGFyZ2V0cyh0YXJnZXRfbGlzdCwgYnVpbGRfZmlsZSkKLSAgICBzbG5fcHJvamVjdHMgKz0gZ3lwLmNvbW1vbi5EZWVwRGVwZW5kZW5jeVRhcmdldHModGFyZ2V0X2RpY3RzLCBzbG5fcHJvamVjdHMpCi0gICAgIyBDcmVhdGUgZm9sZGVyIGhpZXJhcmNoeS4KLSAgICByb290X2VudHJpZXMgPSBfR2F0aGVyU29sdXRpb25Gb2xkZXJzKAotICAgICAgICBzbG5fcHJvamVjdHMsIHByb2plY3Rfb2JqZWN0cywgZmxhdD1tc3ZzX3ZlcnNpb24uRmxhdFNvbHV0aW9uKCkpCi0gICAgIyBDcmVhdGUgc29sdXRpb24uCi0gICAgc2xuID0gTVNWU05ldy5NU1ZTU29sdXRpb24oc2xuX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcz1yb290X2VudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM9Y29uZmlncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlUHJvcGVydGllcz1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPW1zdnNfdmVyc2lvbikKLSAgICBzbG4uV3JpdGUoKQotCi0gIGlmIG1pc3Npbmdfc291cmNlczoKLSAgICBlcnJvcl9tZXNzYWdlID0gIk1pc3NpbmcgaW5wdXQgZmlsZXM6XG4iICsgXAotICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc2V0KG1pc3Npbmdfc291cmNlcykpCi0gICAgaWYgZ2VuZXJhdG9yX2ZsYWdzLmdldCgnbXN2c19lcnJvcl9vbl9taXNzaW5nX3NvdXJjZXMnLCBGYWxzZSk6Ci0gICAgICByYWlzZSBFeGNlcHRpb24oZXJyb3JfbWVzc2FnZSkKLSAgICBlbHNlOgotICAgICAgcHJpbnQgPj5zeXMuc3Rkb3V0LCAiV2FybmluZzogIiArIGVycm9yX21lc3NhZ2UKLQotCi1kZWYgX0dlbmVyYXRlTVNCdWlsZEZpbHRlcnNGaWxlKGZpbHRlcnNfcGF0aCwgc291cmNlX2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25fdG9fcnVsZV9uYW1lKToKLSAgIiIiR2VuZXJhdGUgdGhlIGZpbHRlcnMgZmlsZS4KLQotICBUaGlzIGZpbGUgaXMgdXNlZCBieSBWaXN1YWwgU3R1ZGlvIHRvIG9yZ2FuaXplIHRoZSBwcmVzZW50YXRpb24gb2Ygc291cmNlCi0gIGZpbGVzIGludG8gZm9sZGVycy4KLQotICBBcmd1bWVudHM6Ci0gICAgICBmaWx0ZXJzX3BhdGg6IFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQuCi0gICAgICBzb3VyY2VfZmlsZXM6IFRoZSBoaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIGFsbCB0aGUgc291cmNlcy4KLSAgICAgIGV4dGVuc2lvbl90b19ydWxlX25hbWU6IEEgZGljdGlvbmFyeSBtYXBwaW5nIGZpbGUgZXh0ZW5zaW9ucyB0byBydWxlcy4KLSAgIiIiCi0gIGZpbHRlcl9ncm91cCA9IFtdCi0gIHNvdXJjZV9ncm91cCA9IFtdCi0gIF9BcHBlbmRGaWx0ZXJzRm9yTVNCdWlsZCgnJywgc291cmNlX2ZpbGVzLCBleHRlbnNpb25fdG9fcnVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2dyb3VwLCBzb3VyY2VfZ3JvdXApCi0gIGlmIGZpbHRlcl9ncm91cDoKLSAgICBjb250ZW50ID0gWydQcm9qZWN0JywKLSAgICAgICAgICAgICAgIHsnVG9vbHNWZXJzaW9uJzogJzQuMCcsCi0gICAgICAgICAgICAgICAgJ3htbG5zJzogJ2h0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMycKLSAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICBbJ0l0ZW1Hcm91cCddICsgZmlsdGVyX2dyb3VwLAotICAgICAgICAgICAgICAgWydJdGVtR3JvdXAnXSArIHNvdXJjZV9ncm91cAotICAgICAgICAgICAgICBdCi0gICAgZWFzeV94bWwuV3JpdGVYbWxJZkNoYW5nZWQoY29udGVudCwgZmlsdGVyc19wYXRoLCBwcmV0dHk9VHJ1ZSwgd2luMzI9VHJ1ZSkKLSAgZWxpZiBvcy5wYXRoLmV4aXN0cyhmaWx0ZXJzX3BhdGgpOgotICAgICMgV2UgZG9uJ3QgbmVlZCB0aGlzIGZpbHRlciBhbnltb3JlLiAgRGVsZXRlIHRoZSBvbGQgZmlsdGVyIGZpbGUuCi0gICAgb3MudW5saW5rKGZpbHRlcnNfcGF0aCkKLQotCi1kZWYgX0FwcGVuZEZpbHRlcnNGb3JNU0J1aWxkKHBhcmVudF9maWx0ZXJfbmFtZSwgc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2dyb3VwLCBzb3VyY2VfZ3JvdXApOgotICAiIiJDcmVhdGVzIHRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHNvdXJjZXMgdG8gYmUgYWRkZWQgaW4gdGhlIGZpbHRlciBmaWxlLgotCi0gIEFyZ3M6Ci0gICAgICBwYXJlbnRfZmlsdGVyX25hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWx0ZXIgdW5kZXIgd2hpY2ggdGhlIHNvdXJjZXMgYXJlCi0gICAgICAgICAgZm91bmQuCi0gICAgICBzb3VyY2VzOiBUaGUgaGllcmFyY2h5IG9mIGZpbHRlcnMgYW5kIHNvdXJjZXMgdG8gcHJvY2Vzcy4KLSAgICAgIGV4dGVuc2lvbl90b19ydWxlX25hbWU6IEEgZGljdGlvbmFyeSBtYXBwaW5nIGZpbGUgZXh0ZW5zaW9ucyB0byBydWxlcy4KLSAgICAgIGZpbHRlcl9ncm91cDogVGhlIGxpc3QgdG8gd2hpY2ggZmlsdGVyIGVudHJpZXMgd2lsbCBiZSBhcHBlbmRlZC4KLSAgICAgIHNvdXJjZV9ncm91cDogVGhlIGxpc3QgdG8gd2hpY2ggc291cmNlIGVudHJpZXMgd2lsbCBiZSBhcHBlbmVkZWQuCi0gICIiIgotICBmb3Igc291cmNlIGluIHNvdXJjZXM6Ci0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIE1TVlNQcm9qZWN0LkZpbHRlcik6Ci0gICAgICAjIFdlIGhhdmUgYSBzdWItZmlsdGVyLiAgQ3JlYXRlIHRoZSBuYW1lIG9mIHRoYXQgc3ViLWZpbHRlci4KLSAgICAgIGlmIG5vdCBwYXJlbnRfZmlsdGVyX25hbWU6Ci0gICAgICAgIGZpbHRlcl9uYW1lID0gc291cmNlLm5hbWUKLSAgICAgIGVsc2U6Ci0gICAgICAgIGZpbHRlcl9uYW1lID0gJyVzXFwlcycgJSAocGFyZW50X2ZpbHRlcl9uYW1lLCBzb3VyY2UubmFtZSkKLSAgICAgICMgQWRkIHRoZSBmaWx0ZXIgdG8gdGhlIGdyb3VwLgotICAgICAgZmlsdGVyX2dyb3VwLmFwcGVuZCgKLSAgICAgICAgICBbJ0ZpbHRlcicsIHsnSW5jbHVkZSc6IGZpbHRlcl9uYW1lfSwKLSAgICAgICAgICAgWydVbmlxdWVJZGVudGlmaWVyJywgTVNWU05ldy5NYWtlR3VpZChzb3VyY2UubmFtZSldXSkKLSAgICAgICMgUmVjdXJzZSBhbmQgYWRkIGl0cyBkZXBlbmRlbnRzLgotICAgICAgX0FwcGVuZEZpbHRlcnNGb3JNU0J1aWxkKGZpbHRlcl9uYW1lLCBzb3VyY2UuY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZ3JvdXAsIHNvdXJjZV9ncm91cCkKLSAgICBlbHNlOgotICAgICAgIyBJdCdzIGEgc291cmNlLiAgQ3JlYXRlIGEgc291cmNlIGVudHJ5LgotICAgICAgXywgZWxlbWVudCA9IF9NYXBGaWxlVG9Nc0J1aWxkU291cmNlVHlwZShzb3VyY2UsIGV4dGVuc2lvbl90b19ydWxlX25hbWUpCi0gICAgICBzb3VyY2VfZW50cnkgPSBbZWxlbWVudCwgeydJbmNsdWRlJzogc291cmNlfV0KLSAgICAgICMgU3BlY2lmeSB0aGUgZmlsdGVyIGl0IGlzIHBhcnQgb2YsIGlmIGFueS4KLSAgICAgIGlmIHBhcmVudF9maWx0ZXJfbmFtZToKLSAgICAgICAgc291cmNlX2VudHJ5LmFwcGVuZChbJ0ZpbHRlcicsIHBhcmVudF9maWx0ZXJfbmFtZV0pCi0gICAgICBzb3VyY2VfZ3JvdXAuYXBwZW5kKHNvdXJjZV9lbnRyeSkKLQotCi1kZWYgX01hcEZpbGVUb01zQnVpbGRTb3VyY2VUeXBlKHNvdXJjZSwgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSk6Ci0gICIiIlJldHVybnMgdGhlIGdyb3VwIGFuZCBlbGVtZW50IHR5cGUgb2YgdGhlIHNvdXJjZSBmaWxlLgotCi0gIEFyZ3VtZW50czoKLSAgICAgIHNvdXJjZTogVGhlIHNvdXJjZSBmaWxlIG5hbWUuCi0gICAgICBleHRlbnNpb25fdG9fcnVsZV9uYW1lOiBBIGRpY3Rpb25hcnkgbWFwcGluZyBmaWxlIGV4dGVuc2lvbnMgdG8gcnVsZXMuCi0KLSAgUmV0dXJuczoKLSAgICAgIEEgcGFpciBvZiAoZ3JvdXAgdGhpcyBmaWxlIHNob3VsZCBiZSBwYXJ0IG9mLCB0aGUgbGFiZWwgb2YgZWxlbWVudCkKLSAgIiIiCi0gIF8sIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoc291cmNlKQotICBpZiBleHQgaW4gZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZToKLSAgICBncm91cCA9ICdydWxlJwotICAgIGVsZW1lbnQgPSBleHRlbnNpb25fdG9fcnVsZV9uYW1lW2V4dF0KLSAgZWxpZiBleHQgaW4gWycuY2MnLCAnLmNwcCcsICcuYycsICcuY3h4J106Ci0gICAgZ3JvdXAgPSAnY29tcGlsZScKLSAgICBlbGVtZW50ID0gJ0NsQ29tcGlsZScKLSAgZWxpZiBleHQgaW4gWycuaCcsICcuaHh4J106Ci0gICAgZ3JvdXAgPSAnaW5jbHVkZScKLSAgICBlbGVtZW50ID0gJ0NsSW5jbHVkZScKLSAgZWxpZiBleHQgPT0gJy5yYyc6Ci0gICAgZ3JvdXAgPSAncmVzb3VyY2UnCi0gICAgZWxlbWVudCA9ICdSZXNvdXJjZUNvbXBpbGUnCi0gIGVsaWYgZXh0ID09ICcuaWRsJzoKLSAgICBncm91cCA9ICdtaWRsJwotICAgIGVsZW1lbnQgPSAnTWlkbCcKLSAgZWxzZToKLSAgICBncm91cCA9ICdub25lJwotICAgIGVsZW1lbnQgPSAnTm9uZScKLSAgcmV0dXJuIChncm91cCwgZWxlbWVudCkKLQotCi1kZWYgX0dlbmVyYXRlUnVsZXNGb3JNU0J1aWxkKG91dHB1dF9kaXIsIG9wdGlvbnMsIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsIGV4Y2x1ZGVkX3NvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzX2ZpbGVzX29mX3J1bGVzLCB0YXJnZXRzX2ZpbGVzX29mX3J1bGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zX3RvX2FkZCwgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSk6Ci0gICMgTVNCdWlsZCBydWxlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgdGhyZWUgZmlsZXM6IGFuIFhNTCBmaWxlLCBhIC50YXJnZXRzCi0gICMgZmlsZSBhbmQgYSAucHJvcHMgZmlsZS4KLSAgIyBTZWUgaHR0cDovL2Jsb2dzLm1zZG4uY29tL2IvdmNibG9nL2FyY2hpdmUvMjAxMC8wNC8yMS9xdWljay1oZWxwLW9uLXZzMjAxMC1jdXN0b20tYnVpbGQtcnVsZS5hc3B4Ci0gICMgZm9yIG1vcmUgZGV0YWlscy4KLSAgcnVsZXMgPSBzcGVjLmdldCgncnVsZXMnLCBbXSkKLSAgcnVsZXNfbmF0aXZlID0gW3IgZm9yIHIgaW4gcnVsZXMgaWYgbm90IGludChyLmdldCgnbXN2c19leHRlcm5hbF9ydWxlJywgMCkpXQotICBydWxlc19leHRlcm5hbCA9IFtyIGZvciByIGluIHJ1bGVzIGlmIGludChyLmdldCgnbXN2c19leHRlcm5hbF9ydWxlJywgMCkpXQotCi0gIG1zYnVpbGRfcnVsZXMgPSBbXQotICBmb3IgcnVsZSBpbiBydWxlc19uYXRpdmU6Ci0gICAgIyBTa2lwIGEgcnVsZSB3aXRoIG5vIGFjdGlvbiBhbmQgbm8gaW5wdXRzLgotICAgIGlmICdhY3Rpb24nIG5vdCBpbiBydWxlIGFuZCBub3QgcnVsZS5nZXQoJ3J1bGVfc291cmNlcycsIFtdKToKLSAgICAgIGNvbnRpbnVlCi0gICAgbXNidWlsZF9ydWxlID0gTVNCdWlsZFJ1bGUocnVsZSwgc3BlYykKLSAgICBtc2J1aWxkX3J1bGVzLmFwcGVuZChtc2J1aWxkX3J1bGUpCi0gICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZVttc2J1aWxkX3J1bGUuZXh0ZW5zaW9uXSA9IG1zYnVpbGRfcnVsZS5ydWxlX25hbWUKLSAgaWYgbXNidWlsZF9ydWxlczoKLSAgICBiYXNlID0gc3BlY1sndGFyZ2V0X25hbWUnXSArIG9wdGlvbnMuc3VmZml4Ci0gICAgcHJvcHNfbmFtZSA9IGJhc2UgKyAnLnByb3BzJwotICAgIHRhcmdldHNfbmFtZSA9IGJhc2UgKyAnLnRhcmdldHMnCi0gICAgeG1sX25hbWUgPSBiYXNlICsgJy54bWwnCi0KLSAgICBwcm9wc19maWxlc19vZl9ydWxlcy5hZGQocHJvcHNfbmFtZSkKLSAgICB0YXJnZXRzX2ZpbGVzX29mX3J1bGVzLmFkZCh0YXJnZXRzX25hbWUpCi0KLSAgICBwcm9wc19wYXRoID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIHByb3BzX25hbWUpCi0gICAgdGFyZ2V0c19wYXRoID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIHRhcmdldHNfbmFtZSkKLSAgICB4bWxfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCB4bWxfbmFtZSkKLQotICAgIF9HZW5lcmF0ZU1TQnVpbGRSdWxlUHJvcHNGaWxlKHByb3BzX3BhdGgsIG1zYnVpbGRfcnVsZXMpCi0gICAgX0dlbmVyYXRlTVNCdWlsZFJ1bGVUYXJnZXRzRmlsZSh0YXJnZXRzX3BhdGgsIG1zYnVpbGRfcnVsZXMpCi0gICAgX0dlbmVyYXRlTVNCdWlsZFJ1bGVYbWxGaWxlKHhtbF9wYXRoLCBtc2J1aWxkX3J1bGVzKQotCi0gIGlmIHJ1bGVzX2V4dGVybmFsOgotICAgIF9HZW5lcmF0ZUV4dGVybmFsUnVsZXMocnVsZXNfZXh0ZXJuYWwsIG91dHB1dF9kaXIsIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLCBvcHRpb25zLCBhY3Rpb25zX3RvX2FkZCkKLSAgX0FkanVzdFNvdXJjZXNGb3JSdWxlcyhydWxlcywgc291cmNlcywgZXhjbHVkZWRfc291cmNlcykKLQotCi1jbGFzcyBNU0J1aWxkUnVsZShvYmplY3QpOgotICAiIiJVc2VkIHRvIHN0b3JlIGluZm9ybWF0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgYW4gTVNCdWlsZCBydWxlLgotCi0gIEF0dHJpYnV0ZXM6Ci0gICAgcnVsZV9uYW1lOiBUaGUgcnVsZSBuYW1lLCBzYW5pdGl6ZWQgdG8gdXNlIGluIFhNTC4KLSAgICB0YXJnZXRfbmFtZTogVGhlIG5hbWUgb2YgdGhlIHRhcmdldC4KLSAgICBhZnRlcl90YXJnZXRzOiBUaGUgbmFtZSBvZiB0aGUgQWZ0ZXJUYXJnZXRzIGVsZW1lbnQuCi0gICAgYmVmb3JlX3RhcmdldHM6IFRoZSBuYW1lIG9mIHRoZSBCZWZvcmVUYXJnZXRzIGVsZW1lbnQuCi0gICAgZGVwZW5kc19vbjogVGhlIG5hbWUgb2YgdGhlIERlcGVuZHNPbiBlbGVtZW50LgotICAgIGNvbXB1dGVfb3V0cHV0OiBUaGUgbmFtZSBvZiB0aGUgQ29tcHV0ZU91dHB1dCBlbGVtZW50LgotICAgIGRpcnNfdG9fbWFrZTogVGhlIG5hbWUgb2YgdGhlIERpcnNUb01ha2UgZWxlbWVudC4KLSAgICBpbnB1dHM6IFRoZSBuYW1lIG9mIHRoZSBfaW5wdXRzIGVsZW1lbnQuCi0gICAgdGxvZzogVGhlIG5hbWUgb2YgdGhlIF90bG9nIGVsZW1lbnQuCi0gICAgZXh0ZW5zaW9uOiBUaGUgZXh0ZW5zaW9uIHRoaXMgcnVsZSBhcHBsaWVzIHRvLgotICAgIGRlc2NyaXB0aW9uOiBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgd2hlbiB0aGlzIHJ1bGUgaXMgaW52b2tlZC4KLSAgICBhZGRpdGlvbmFsX2RlcGVuZGVuY2llczogQSBzdHJpbmcgbGlzdGluZyBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy4KLSAgICBvdXRwdXRzOiBUaGUgb3V0cHV0cyBvZiB0aGlzIHJ1bGUuCi0gICAgY29tbWFuZDogVGhlIGNvbW1hbmQgdXNlZCB0byBydW4gdGhlIHJ1bGUuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBydWxlLCBzcGVjKToKLSAgICBzZWxmLmRpc3BsYXlfbmFtZSA9IHJ1bGVbJ3J1bGVfbmFtZSddCi0gICAgIyBBc3N1cmUgdGhhdCB0aGUgcnVsZSBuYW1lIGlzIG9ubHkgY2hhcmFjdGVycyBhbmQgbnVtYmVycwotICAgIHNlbGYucnVsZV9uYW1lID0gcmUuc3ViKHInXFcnLCAnXycsIHNlbGYuZGlzcGxheV9uYW1lKQotICAgICMgQ3JlYXRlIHRoZSB2YXJpb3VzIGVsZW1lbnQgbmFtZXMsIGZvbGxvd2luZyB0aGUgZXhhbXBsZSBzZXQgYnkgdGhlCi0gICAgIyBWaXN1YWwgU3R1ZGlvIDIwMDggdG8gMjAxMCBjb252ZXJzaW9uLiAgSSBkb24ndCBrbm93IGlmIFZTMjAxMAotICAgICMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBleGFjdCBuYW1lcy4KLSAgICBzZWxmLnRhcmdldF9uYW1lID0gJ18nICsgc2VsZi5ydWxlX25hbWUKLSAgICBzZWxmLmFmdGVyX3RhcmdldHMgPSBzZWxmLnJ1bGVfbmFtZSArICdBZnRlclRhcmdldHMnCi0gICAgc2VsZi5iZWZvcmVfdGFyZ2V0cyA9IHNlbGYucnVsZV9uYW1lICsgJ0JlZm9yZVRhcmdldHMnCi0gICAgc2VsZi5kZXBlbmRzX29uID0gc2VsZi5ydWxlX25hbWUgKyAnRGVwZW5kc09uJwotICAgIHNlbGYuY29tcHV0ZV9vdXRwdXQgPSAnQ29tcHV0ZSVzT3V0cHV0JyAlIHNlbGYucnVsZV9uYW1lCi0gICAgc2VsZi5kaXJzX3RvX21ha2UgPSBzZWxmLnJ1bGVfbmFtZSArICdEaXJzVG9NYWtlJwotICAgIHNlbGYuaW5wdXRzID0gc2VsZi5ydWxlX25hbWUgKyAnX2lucHV0cycKLSAgICBzZWxmLnRsb2cgPSBzZWxmLnJ1bGVfbmFtZSArICdfdGxvZycKLSAgICBzZWxmLmV4dGVuc2lvbiA9IHJ1bGVbJ2V4dGVuc2lvbiddCi0gICAgaWYgbm90IHNlbGYuZXh0ZW5zaW9uLnN0YXJ0c3dpdGgoJy4nKToKLSAgICAgIHNlbGYuZXh0ZW5zaW9uID0gJy4nICsgc2VsZi5leHRlbnNpb24KLQotICAgIHNlbGYuZGVzY3JpcHRpb24gPSBNU1ZTU2V0dGluZ3MuQ29udmVydFZDTWFjcm9zVG9NU0J1aWxkKAotICAgICAgICBydWxlLmdldCgnbWVzc2FnZScsIHNlbGYucnVsZV9uYW1lKSkKLSAgICBvbGRfYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgPSBfRml4UGF0aHMocnVsZS5nZXQoJ2lucHV0cycsIFtdKSkKLSAgICBzZWxmLmFkZGl0aW9uYWxfZGVwZW5kZW5jaWVzID0gKAotICAgICAgICAnOycuam9pbihbTVNWU1NldHRpbmdzLkNvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZChpKQotICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gb2xkX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzXSkpCi0gICAgb2xkX291dHB1dHMgPSBfRml4UGF0aHMocnVsZS5nZXQoJ291dHB1dHMnLCBbXSkpCi0gICAgc2VsZi5vdXRwdXRzID0gJzsnLmpvaW4oW01TVlNTZXR0aW5ncy5Db252ZXJ0VkNNYWNyb3NUb01TQnVpbGQoaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gb2xkX291dHB1dHNdKQotICAgIG9sZF9jb21tYW5kID0gX0J1aWxkQ29tbWFuZExpbmVGb3JSdWxlKHNwZWMsIHJ1bGUsIGhhc19pbnB1dF9wYXRoPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fc2V0dXBfZW52PVRydWUpCi0gICAgc2VsZi5jb21tYW5kID0gTVNWU1NldHRpbmdzLkNvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZChvbGRfY29tbWFuZCkKLQotCi1kZWYgX0dlbmVyYXRlTVNCdWlsZFJ1bGVQcm9wc0ZpbGUocHJvcHNfcGF0aCwgbXNidWlsZF9ydWxlcyk6Ci0gICIiIkdlbmVyYXRlIHRoZSAucHJvcHMgZmlsZS4iIiIKLSAgY29udGVudCA9IFsnUHJvamVjdCcsCi0gICAgICAgICAgICAgeyd4bWxucyc6ICdodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMnfV0KLSAgZm9yIHJ1bGUgaW4gbXNidWlsZF9ydWxlczoKLSAgICBjb250ZW50LmV4dGVuZChbCi0gICAgICAgIFsnUHJvcGVydHlHcm91cCcsCi0gICAgICAgICB7J0NvbmRpdGlvbic6ICInJCglcyknID09ICcnIGFuZCAnJCglcyknID09ICcnIGFuZCAiCi0gICAgICAgICAgIickKENvbmZpZ3VyYXRpb25UeXBlKScgIT0gJ01ha2VmaWxlJyIgJSAocnVsZS5iZWZvcmVfdGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLmFmdGVyX3RhcmdldHMpCi0gICAgICAgICB9LAotICAgICAgICAgW3J1bGUuYmVmb3JlX3RhcmdldHMsICdNaWRsJ10sCi0gICAgICAgICBbcnVsZS5hZnRlcl90YXJnZXRzLCAnQ3VzdG9tQnVpbGQnXSwKLSAgICAgICAgXSwKLSAgICAgICAgWydQcm9wZXJ0eUdyb3VwJywKLSAgICAgICAgIFtydWxlLmRlcGVuZHNfb24sCi0gICAgICAgICAgeydDb25kaXRpb24nOiAiJyQoQ29uZmlndXJhdGlvblR5cGUpJyAhPSAnTWFrZWZpbGUnIn0sCi0gICAgICAgICAgJ19TZWxlY3RlZEZpbGVzOyQoJXMpJyAlIHJ1bGUuZGVwZW5kc19vbgotICAgICAgICAgXSwKLSAgICAgICAgXSwKLSAgICAgICAgWydJdGVtRGVmaW5pdGlvbkdyb3VwJywKLSAgICAgICAgIFtydWxlLnJ1bGVfbmFtZSwKLSAgICAgICAgICBbJ0NvbW1hbmRMaW5lVGVtcGxhdGUnLCBydWxlLmNvbW1hbmRdLAotICAgICAgICAgIFsnT3V0cHV0cycsIHJ1bGUub3V0cHV0c10sCi0gICAgICAgICAgWydFeGVjdXRpb25EZXNjcmlwdGlvbicsIHJ1bGUuZGVzY3JpcHRpb25dLAotICAgICAgICAgIFsnQWRkaXRpb25hbERlcGVuZGVuY2llcycsIHJ1bGUuYWRkaXRpb25hbF9kZXBlbmRlbmNpZXNdLAotICAgICAgICAgXSwKLSAgICAgICAgXQotICAgIF0pCi0gIGVhc3lfeG1sLldyaXRlWG1sSWZDaGFuZ2VkKGNvbnRlbnQsIHByb3BzX3BhdGgsIHByZXR0eT1UcnVlLCB3aW4zMj1UcnVlKQotCi0KLWRlZiBfR2VuZXJhdGVNU0J1aWxkUnVsZVRhcmdldHNGaWxlKHRhcmdldHNfcGF0aCwgbXNidWlsZF9ydWxlcyk6Ci0gICIiIkdlbmVyYXRlIHRoZSAudGFyZ2V0cyBmaWxlLiIiIgotICBjb250ZW50ID0gWydQcm9qZWN0JywKLSAgICAgICAgICAgICB7J3htbG5zJzogJ2h0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMycKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBdCi0gIGl0ZW1fZ3JvdXAgPSBbCi0gICAgICAnSXRlbUdyb3VwJywKLSAgICAgIFsnUHJvcGVydHlQYWdlU2NoZW1hJywKLSAgICAgICB7J0luY2x1ZGUnOiAnJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpJChNU0J1aWxkVGhpc0ZpbGVOYW1lKS54bWwnfQotICAgICAgXQotICAgIF0KLSAgZm9yIHJ1bGUgaW4gbXNidWlsZF9ydWxlczoKLSAgICBpdGVtX2dyb3VwLmFwcGVuZCgKLSAgICAgICAgWydBdmFpbGFibGVJdGVtTmFtZScsCi0gICAgICAgICB7J0luY2x1ZGUnOiBydWxlLnJ1bGVfbmFtZX0sCi0gICAgICAgICBbJ1RhcmdldHMnLCBydWxlLnRhcmdldF9uYW1lXSwKLSAgICAgICAgXSkKLSAgY29udGVudC5hcHBlbmQoaXRlbV9ncm91cCkKLQotICBmb3IgcnVsZSBpbiBtc2J1aWxkX3J1bGVzOgotICAgIGNvbnRlbnQuYXBwZW5kKAotICAgICAgICBbJ1VzaW5nVGFzaycsCi0gICAgICAgICB7J1Rhc2tOYW1lJzogcnVsZS5ydWxlX25hbWUsCi0gICAgICAgICAgJ1Rhc2tGYWN0b3J5JzogJ1hhbWxUYXNrRmFjdG9yeScsCi0gICAgICAgICAgJ0Fzc2VtYmx5TmFtZSc6ICdNaWNyb3NvZnQuQnVpbGQuVGFza3MudjQuMCcKLSAgICAgICAgIH0sCi0gICAgICAgICBbJ1Rhc2snLCAnJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpJChNU0J1aWxkVGhpc0ZpbGVOYW1lKS54bWwnXSwKLSAgICAgICAgXSkKLSAgZm9yIHJ1bGUgaW4gbXNidWlsZF9ydWxlczoKLSAgICBydWxlX25hbWUgPSBydWxlLnJ1bGVfbmFtZQotICAgIHRhcmdldF9vdXRwdXRzID0gJyUlKCVzLk91dHB1dHMpJyAlIHJ1bGVfbmFtZQotICAgIHRhcmdldF9pbnB1dHMgPSAoJyUlKCVzLklkZW50aXR5KTslJSglcy5BZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTsnCi0gICAgICAgICAgICAgICAgICAgICAnJChNU0J1aWxkUHJvamVjdEZpbGUpJykgJSAocnVsZV9uYW1lLCBydWxlX25hbWUpCi0gICAgcnVsZV9pbnB1dHMgPSAnJSUoJXMuSWRlbnRpdHkpJyAlIHJ1bGVfbmFtZQotICAgIGV4dGVuc2lvbl9jb25kaXRpb24gPSAoIiclKEV4dGVuc2lvbiknPT0nLm9iaicgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclKEV4dGVuc2lvbiknPT0nLnJlcycgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclKEV4dGVuc2lvbiknPT0nLnJzYycgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclKEV4dGVuc2lvbiknPT0nLmxpYiciKQotICAgIHJlbW92ZV9zZWN0aW9uID0gWwotICAgICAgICAnSXRlbUdyb3VwJywKLSAgICAgICAgeydDb25kaXRpb24nOiAiJ0AoU2VsZWN0ZWRGaWxlcyknICE9ICcnIn0sCi0gICAgICAgIFtydWxlX25hbWUsCi0gICAgICAgICB7J1JlbW92ZSc6ICdAKCVzKScgJSBydWxlX25hbWUsCi0gICAgICAgICAgJ0NvbmRpdGlvbic6ICInJShJZGVudGl0eSknICE9ICdAKFNlbGVjdGVkRmlsZXMpJyIKLSAgICAgICAgIH0KLSAgICAgICAgXQotICAgIF0KLSAgICBpbnB1dHNfc2VjdGlvbiA9IFsKLSAgICAgICAgJ0l0ZW1Hcm91cCcsCi0gICAgICAgIFtydWxlLmlucHV0cywgeydJbmNsdWRlJzogJyUlKCVzLkFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpJyAlIHJ1bGVfbmFtZX1dCi0gICAgXQotICAgIGxvZ2dpbmdfc2VjdGlvbiA9IFsKLSAgICAgICAgJ0l0ZW1Hcm91cCcsCi0gICAgICAgIFtydWxlLnRsb2csCi0gICAgICAgICB7J0luY2x1ZGUnOiAnJSUoJXMuT3V0cHV0cyknICUgcnVsZV9uYW1lLAotICAgICAgICAgICdDb25kaXRpb24nOiAoIiclJSglcy5PdXRwdXRzKScgIT0gJycgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgICAgICInJSUoJXMuRXhjbHVkZWRGcm9tQnVpbGQpJyAhPSAndHJ1ZSciICUKLSAgICAgICAgICAgICAgICAgICAgICAgIChydWxlX25hbWUsIHJ1bGVfbmFtZSkpCi0gICAgICAgICB9LAotICAgICAgICAgWydTb3VyY2UnLCAiQCglcywgJ3wnKSIgJSBydWxlX25hbWVdLAotICAgICAgICAgWydJbnB1dHMnLCAiQCglcyAtPiAnJSUoRnVsbHBhdGgpJywgJzsnKSIgJSBydWxlLmlucHV0c10sCi0gICAgICAgIF0sCi0gICAgXQotICAgIG1lc3NhZ2Vfc2VjdGlvbiA9IFsKLSAgICAgICAgJ01lc3NhZ2UnLAotICAgICAgICB7J0ltcG9ydGFuY2UnOiAnSGlnaCcsCi0gICAgICAgICAnVGV4dCc6ICclJSglcy5FeGVjdXRpb25EZXNjcmlwdGlvbiknICUgcnVsZV9uYW1lCi0gICAgICAgIH0KLSAgICBdCi0gICAgd3JpdGVfdGxvZ19zZWN0aW9uID0gWwotICAgICAgICAnV3JpdGVMaW5lc1RvRmlsZScsCi0gICAgICAgIHsnQ29uZGl0aW9uJzogIidAKCVzKScgIT0gJycgYW5kICclJSglcy5FeGNsdWRlZEZyb21CdWlsZCknICE9ICIKLSAgICAgICAgICIndHJ1ZSciICUgKHJ1bGUudGxvZywgcnVsZS50bG9nKSwKLSAgICAgICAgICdGaWxlJzogJyQoSW50RGlyKSQoUHJvamVjdE5hbWUpLndyaXRlLjEudGxvZycsCi0gICAgICAgICAnTGluZXMnOiAiXiUlKCVzLlNvdXJjZSk7QCglcy0+JyUlKEZ1bGxwYXRoKScpIiAlIChydWxlLnRsb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLnRsb2cpCi0gICAgICAgIH0KLSAgICBdCi0gICAgcmVhZF90bG9nX3NlY3Rpb24gPSBbCi0gICAgICAgICdXcml0ZUxpbmVzVG9GaWxlJywKLSAgICAgICAgeydDb25kaXRpb24nOiAiJ0AoJXMpJyAhPSAnJyBhbmQgJyUlKCVzLkV4Y2x1ZGVkRnJvbUJ1aWxkKScgIT0gIgotICAgICAgICAgIid0cnVlJyIgJSAocnVsZS50bG9nLCBydWxlLnRsb2cpLAotICAgICAgICAgJ0ZpbGUnOiAnJChJbnREaXIpJChQcm9qZWN0TmFtZSkucmVhZC4xLnRsb2cnLAotICAgICAgICAgJ0xpbmVzJzogIl4lJSglcy5Tb3VyY2UpOyUlKCVzLklucHV0cykiICUgKHJ1bGUudGxvZywgcnVsZS50bG9nKQotICAgICAgICB9Ci0gICAgXQotICAgIGNvbW1hbmRfYW5kX2lucHV0X3NlY3Rpb24gPSBbCi0gICAgICAgIHJ1bGVfbmFtZSwKLSAgICAgICAgeydDb25kaXRpb24nOiAiJ0AoJXMpJyAhPSAnJyBhbmQgJyUlKCVzLkV4Y2x1ZGVkRnJvbUJ1aWxkKScgIT0gIgotICAgICAgICAgIid0cnVlJyIgJSAocnVsZV9uYW1lLCBydWxlX25hbWUpLAotICAgICAgICAgJ0NvbW1hbmRMaW5lVGVtcGxhdGUnOiAnJSUoJXMuQ29tbWFuZExpbmVUZW1wbGF0ZSknICUgcnVsZV9uYW1lLAotICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogJyUlKCVzLkFkZGl0aW9uYWxPcHRpb25zKScgJSBydWxlX25hbWUsCi0gICAgICAgICAnSW5wdXRzJzogcnVsZV9pbnB1dHMKLSAgICAgICAgfQotICAgIF0KLSAgICBjb250ZW50LmV4dGVuZChbCi0gICAgICAgIFsnVGFyZ2V0JywKLSAgICAgICAgIHsnTmFtZSc6IHJ1bGUudGFyZ2V0X25hbWUsCi0gICAgICAgICAgJ0JlZm9yZVRhcmdldHMnOiAnJCglcyknICUgcnVsZS5iZWZvcmVfdGFyZ2V0cywKLSAgICAgICAgICAnQWZ0ZXJUYXJnZXRzJzogJyQoJXMpJyAlIHJ1bGUuYWZ0ZXJfdGFyZ2V0cywKLSAgICAgICAgICAnQ29uZGl0aW9uJzogIidAKCVzKScgIT0gJyciICUgcnVsZV9uYW1lLAotICAgICAgICAgICdEZXBlbmRzT25UYXJnZXRzJzogJyQoJXMpOyVzJyAlIChydWxlLmRlcGVuZHNfb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuY29tcHV0ZV9vdXRwdXQpLAotICAgICAgICAgICdPdXRwdXRzJzogdGFyZ2V0X291dHB1dHMsCi0gICAgICAgICAgJ0lucHV0cyc6IHRhcmdldF9pbnB1dHMKLSAgICAgICAgIH0sCi0gICAgICAgICByZW1vdmVfc2VjdGlvbiwKLSAgICAgICAgIGlucHV0c19zZWN0aW9uLAotICAgICAgICAgbG9nZ2luZ19zZWN0aW9uLAotICAgICAgICAgbWVzc2FnZV9zZWN0aW9uLAotICAgICAgICAgd3JpdGVfdGxvZ19zZWN0aW9uLAotICAgICAgICAgcmVhZF90bG9nX3NlY3Rpb24sCi0gICAgICAgICBjb21tYW5kX2FuZF9pbnB1dF9zZWN0aW9uLAotICAgICAgICBdLAotICAgICAgICBbJ1Byb3BlcnR5R3JvdXAnLAotICAgICAgICAgWydDb21wdXRlTGlua0lucHV0c1RhcmdldHMnLAotICAgICAgICAgICckKENvbXB1dGVMaW5rSW5wdXRzVGFyZ2V0cyk7JywKLSAgICAgICAgICAnJXM7JyAlIHJ1bGUuY29tcHV0ZV9vdXRwdXQKLSAgICAgICAgIF0sCi0gICAgICAgICBbJ0NvbXB1dGVMaWJJbnB1dHNUYXJnZXRzJywKLSAgICAgICAgICAnJChDb21wdXRlTGliSW5wdXRzVGFyZ2V0cyk7JywKLSAgICAgICAgICAnJXM7JyAlIHJ1bGUuY29tcHV0ZV9vdXRwdXQKLSAgICAgICAgIF0sCi0gICAgICAgIF0sCi0gICAgICAgIFsnVGFyZ2V0JywKLSAgICAgICAgIHsnTmFtZSc6IHJ1bGUuY29tcHV0ZV9vdXRwdXQsCi0gICAgICAgICAgJ0NvbmRpdGlvbic6ICInQCglcyknICE9ICcnIiAlIHJ1bGVfbmFtZQotICAgICAgICAgfSwKLSAgICAgICAgIFsnSXRlbUdyb3VwJywKLSAgICAgICAgICBbcnVsZS5kaXJzX3RvX21ha2UsCi0gICAgICAgICAgIHsnQ29uZGl0aW9uJzogIidAKCVzKScgIT0gJycgYW5kICIKLSAgICAgICAgICAgICInJSUoJXMuRXhjbHVkZWRGcm9tQnVpbGQpJyAhPSAndHJ1ZSciICUgKHJ1bGVfbmFtZSwgcnVsZV9uYW1lKSwKLSAgICAgICAgICAgICdJbmNsdWRlJzogJyUlKCVzLk91dHB1dHMpJyAlIHJ1bGVfbmFtZQotICAgICAgICAgICB9Ci0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ0xpbmsnLAotICAgICAgICAgICB7J0luY2x1ZGUnOiAnJSUoJXMuSWRlbnRpdHkpJyAlIHJ1bGUuZGlyc190b19tYWtlLAotICAgICAgICAgICAgJ0NvbmRpdGlvbic6IGV4dGVuc2lvbl9jb25kaXRpb24KLSAgICAgICAgICAgfQotICAgICAgICAgIF0sCi0gICAgICAgICAgWydMaWInLAotICAgICAgICAgICB7J0luY2x1ZGUnOiAnJSUoJXMuSWRlbnRpdHkpJyAlIHJ1bGUuZGlyc190b19tYWtlLAotICAgICAgICAgICAgJ0NvbmRpdGlvbic6IGV4dGVuc2lvbl9jb25kaXRpb24KLSAgICAgICAgICAgfQotICAgICAgICAgIF0sCi0gICAgICAgICAgWydJbXBMaWInLAotICAgICAgICAgICB7J0luY2x1ZGUnOiAnJSUoJXMuSWRlbnRpdHkpJyAlIHJ1bGUuZGlyc190b19tYWtlLAotICAgICAgICAgICAgJ0NvbmRpdGlvbic6IGV4dGVuc2lvbl9jb25kaXRpb24KLSAgICAgICAgICAgfQotICAgICAgICAgIF0sCi0gICAgICAgICBdLAotICAgICAgICAgWydNYWtlRGlyJywKLSAgICAgICAgICB7J0RpcmVjdG9yaWVzJzogKCJAKCVzLT4nJSUoUm9vdERpciklJShEaXJlY3RvcnkpJykiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUuZGlyc190b19tYWtlKQotICAgICAgICAgIH0KLSAgICAgICAgIF0KLSAgICAgICAgXSwKLSAgICBdKQotICBlYXN5X3htbC5Xcml0ZVhtbElmQ2hhbmdlZChjb250ZW50LCB0YXJnZXRzX3BhdGgsIHByZXR0eT1UcnVlLCB3aW4zMj1UcnVlKQotCi0KLWRlZiBfR2VuZXJhdGVNU0J1aWxkUnVsZVhtbEZpbGUoeG1sX3BhdGgsIG1zYnVpbGRfcnVsZXMpOgotICAjIEdlbmVyYXRlIHRoZSAueG1sIGZpbGUKLSAgY29udGVudCA9IFsKLSAgICAgICdQcm9qZWN0U2NoZW1hRGVmaW5pdGlvbnMnLAotICAgICAgeyd4bWxucyc6ICgnY2xyLW5hbWVzcGFjZTpNaWNyb3NvZnQuQnVpbGQuRnJhbWV3b3JrLlhhbWxUeXBlczsnCi0gICAgICAgICAgICAgICAgICdhc3NlbWJseT1NaWNyb3NvZnQuQnVpbGQuRnJhbWV3b3JrJyksCi0gICAgICAgJ3htbG5zOngnOiAnaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aW5meC8yMDA2L3hhbWwnLAotICAgICAgICd4bWxuczpzeXMnOiAnY2xyLW5hbWVzcGFjZTpTeXN0ZW07YXNzZW1ibHk9bXNjb3JsaWInLAotICAgICAgICd4bWxuczp0cmFuc2Zvcm1DYWxsYmFjayc6Ci0gICAgICAgJ01pY3Jvc29mdC5DcHAuRGV2MTAuQ29udmVydFByb3BlcnR5Q2FsbGJhY2snCi0gICAgICB9Ci0gIF0KLSAgZm9yIHJ1bGUgaW4gbXNidWlsZF9ydWxlczoKLSAgICBjb250ZW50LmV4dGVuZChbCi0gICAgICAgIFsnUnVsZScsCi0gICAgICAgICB7J05hbWUnOiBydWxlLnJ1bGVfbmFtZSwKLSAgICAgICAgICAnUGFnZVRlbXBsYXRlJzogJ3Rvb2wnLAotICAgICAgICAgICdEaXNwbGF5TmFtZSc6IHJ1bGUuZGlzcGxheV9uYW1lLAotICAgICAgICAgICdPcmRlcic6ICcyMDAnCi0gICAgICAgICB9LAotICAgICAgICAgWydSdWxlLkRhdGFTb3VyY2UnLAotICAgICAgICAgIFsnRGF0YVNvdXJjZScsCi0gICAgICAgICAgIHsnUGVyc2lzdGVuY2UnOiAnUHJvamVjdEZpbGUnLAotICAgICAgICAgICAgJ0l0ZW1UeXBlJzogcnVsZS5ydWxlX25hbWUKLSAgICAgICAgICAgfQotICAgICAgICAgIF0KLSAgICAgICAgIF0sCi0gICAgICAgICBbJ1J1bGUuQ2F0ZWdvcmllcycsCi0gICAgICAgICAgWydDYXRlZ29yeScsCi0gICAgICAgICAgIHsnTmFtZSc6ICdHZW5lcmFsJ30sCi0gICAgICAgICAgIFsnQ2F0ZWdvcnkuRGlzcGxheU5hbWUnLAotICAgICAgICAgICAgWydzeXM6U3RyaW5nJywgJ0dlbmVyYWwnXSwKLSAgICAgICAgICAgXSwKLSAgICAgICAgICBdLAotICAgICAgICAgIFsnQ2F0ZWdvcnknLAotICAgICAgICAgICB7J05hbWUnOiAnQ29tbWFuZCBMaW5lJywKLSAgICAgICAgICAgICdTdWJ0eXBlJzogJ0NvbW1hbmRMaW5lJwotICAgICAgICAgICB9LAotICAgICAgICAgICBbJ0NhdGVnb3J5LkRpc3BsYXlOYW1lJywKLSAgICAgICAgICAgIFsnc3lzOlN0cmluZycsICdDb21tYW5kIExpbmUnXSwKLSAgICAgICAgICAgXSwKLSAgICAgICAgICBdLAotICAgICAgICAgXSwKLSAgICAgICAgIFsnU3RyaW5nTGlzdFByb3BlcnR5JywKLSAgICAgICAgICB7J05hbWUnOiAnSW5wdXRzJywKLSAgICAgICAgICAgJ0NhdGVnb3J5JzogJ0NvbW1hbmQgTGluZScsCi0gICAgICAgICAgICdJc1JlcXVpcmVkJzogJ3RydWUnLAotICAgICAgICAgICAnU3dpdGNoJzogJyAnCi0gICAgICAgICAgfSwKLSAgICAgICAgICBbJ1N0cmluZ0xpc3RQcm9wZXJ0eS5EYXRhU291cmNlJywKLSAgICAgICAgICAgWydEYXRhU291cmNlJywKLSAgICAgICAgICAgIHsnUGVyc2lzdGVuY2UnOiAnUHJvamVjdEZpbGUnLAotICAgICAgICAgICAgICdJdGVtVHlwZSc6IHJ1bGUucnVsZV9uYW1lLAotICAgICAgICAgICAgICdTb3VyY2VUeXBlJzogJ0l0ZW0nCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgIF0KLSAgICAgICAgICBdLAotICAgICAgICAgXSwKLSAgICAgICAgIFsnU3RyaW5nUHJvcGVydHknLAotICAgICAgICAgIHsnTmFtZSc6ICdDb21tYW5kTGluZVRlbXBsYXRlJywKLSAgICAgICAgICAgJ0Rpc3BsYXlOYW1lJzogJ0NvbW1hbmQgTGluZScsCi0gICAgICAgICAgICdWaXNpYmxlJzogJ0ZhbHNlJywKLSAgICAgICAgICAgJ0luY2x1ZGVJbkNvbW1hbmRMaW5lJzogJ0ZhbHNlJwotICAgICAgICAgIH0KLSAgICAgICAgIF0sCi0gICAgICAgICBbJ0R5bmFtaWNFbnVtUHJvcGVydHknLAotICAgICAgICAgIHsnTmFtZSc6IHJ1bGUuYmVmb3JlX3RhcmdldHMsCi0gICAgICAgICAgICdDYXRlZ29yeSc6ICdHZW5lcmFsJywKLSAgICAgICAgICAgJ0VudW1Qcm92aWRlcic6ICdUYXJnZXRzJywKLSAgICAgICAgICAgJ0luY2x1ZGVJbkNvbW1hbmRMaW5lJzogJ0ZhbHNlJwotICAgICAgICAgIH0sCi0gICAgICAgICAgWydEeW5hbWljRW51bVByb3BlcnR5LkRpc3BsYXlOYW1lJywKLSAgICAgICAgICAgWydzeXM6U3RyaW5nJywgJ0V4ZWN1dGUgQmVmb3JlJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ0R5bmFtaWNFbnVtUHJvcGVydHkuRGVzY3JpcHRpb24nLAotICAgICAgICAgICBbJ3N5czpTdHJpbmcnLCAnU3BlY2lmaWVzIHRoZSB0YXJnZXRzIGZvciB0aGUgYnVpbGQgY3VzdG9taXphdGlvbicKLSAgICAgICAgICAgICcgdG8gcnVuIGJlZm9yZS4nCi0gICAgICAgICAgIF0sCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ0R5bmFtaWNFbnVtUHJvcGVydHkuUHJvdmlkZXJTZXR0aW5ncycsCi0gICAgICAgICAgIFsnTmFtZVZhbHVlUGFpcicsCi0gICAgICAgICAgICB7J05hbWUnOiAnRXhjbHVkZScsCi0gICAgICAgICAgICAgJ1ZhbHVlJzogJ14lc3xeQ29tcHV0ZScgJSBydWxlLmJlZm9yZV90YXJnZXRzCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgIF0KLSAgICAgICAgICBdLAotICAgICAgICAgIFsnRHluYW1pY0VudW1Qcm9wZXJ0eS5EYXRhU291cmNlJywKLSAgICAgICAgICAgWydEYXRhU291cmNlJywKLSAgICAgICAgICAgIHsnUGVyc2lzdGVuY2UnOiAnUHJvamVjdEZpbGUnLAotICAgICAgICAgICAgICdIYXNDb25maWd1cmF0aW9uQ29uZGl0aW9uJzogJ3RydWUnCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgIF0KLSAgICAgICAgICBdLAotICAgICAgICAgXSwKLSAgICAgICAgIFsnRHluYW1pY0VudW1Qcm9wZXJ0eScsCi0gICAgICAgICAgeydOYW1lJzogcnVsZS5hZnRlcl90YXJnZXRzLAotICAgICAgICAgICAnQ2F0ZWdvcnknOiAnR2VuZXJhbCcsCi0gICAgICAgICAgICdFbnVtUHJvdmlkZXInOiAnVGFyZ2V0cycsCi0gICAgICAgICAgICdJbmNsdWRlSW5Db21tYW5kTGluZSc6ICdGYWxzZScKLSAgICAgICAgICB9LAotICAgICAgICAgIFsnRHluYW1pY0VudW1Qcm9wZXJ0eS5EaXNwbGF5TmFtZScsCi0gICAgICAgICAgIFsnc3lzOlN0cmluZycsICdFeGVjdXRlIEFmdGVyJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ0R5bmFtaWNFbnVtUHJvcGVydHkuRGVzY3JpcHRpb24nLAotICAgICAgICAgICBbJ3N5czpTdHJpbmcnLCAoJ1NwZWNpZmllcyB0aGUgdGFyZ2V0cyBmb3IgdGhlIGJ1aWxkIGN1c3RvbWl6YXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHJ1biBhZnRlci4nKQotICAgICAgICAgICBdLAotICAgICAgICAgIF0sCi0gICAgICAgICAgWydEeW5hbWljRW51bVByb3BlcnR5LlByb3ZpZGVyU2V0dGluZ3MnLAotICAgICAgICAgICBbJ05hbWVWYWx1ZVBhaXInLAotICAgICAgICAgICAgeydOYW1lJzogJ0V4Y2x1ZGUnLAotICAgICAgICAgICAgICdWYWx1ZSc6ICdeJXN8XkNvbXB1dGUnICUgcnVsZS5hZnRlcl90YXJnZXRzCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgIF0KLSAgICAgICAgICBdLAotICAgICAgICAgIFsnRHluYW1pY0VudW1Qcm9wZXJ0eS5EYXRhU291cmNlJywKLSAgICAgICAgICAgWydEYXRhU291cmNlJywKLSAgICAgICAgICAgIHsnUGVyc2lzdGVuY2UnOiAnUHJvamVjdEZpbGUnLAotICAgICAgICAgICAgICdJdGVtVHlwZSc6ICcnLAotICAgICAgICAgICAgICdIYXNDb25maWd1cmF0aW9uQ29uZGl0aW9uJzogJ3RydWUnCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgIF0KLSAgICAgICAgICBdLAotICAgICAgICAgXSwKLSAgICAgICAgIFsnU3RyaW5nTGlzdFByb3BlcnR5JywKLSAgICAgICAgICB7J05hbWUnOiAnT3V0cHV0cycsCi0gICAgICAgICAgICdEaXNwbGF5TmFtZSc6ICdPdXRwdXRzJywKLSAgICAgICAgICAgJ1Zpc2libGUnOiAnRmFsc2UnLAotICAgICAgICAgICAnSW5jbHVkZUluQ29tbWFuZExpbmUnOiAnRmFsc2UnCi0gICAgICAgICAgfQotICAgICAgICAgXSwKLSAgICAgICAgIFsnU3RyaW5nUHJvcGVydHknLAotICAgICAgICAgIHsnTmFtZSc6ICdFeGVjdXRpb25EZXNjcmlwdGlvbicsCi0gICAgICAgICAgICdEaXNwbGF5TmFtZSc6ICdFeGVjdXRpb24gRGVzY3JpcHRpb24nLAotICAgICAgICAgICAnVmlzaWJsZSc6ICdGYWxzZScsCi0gICAgICAgICAgICdJbmNsdWRlSW5Db21tYW5kTGluZSc6ICdGYWxzZScKLSAgICAgICAgICB9Ci0gICAgICAgICBdLAotICAgICAgICAgWydTdHJpbmdMaXN0UHJvcGVydHknLAotICAgICAgICAgIHsnTmFtZSc6ICdBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJywKLSAgICAgICAgICAgJ0Rpc3BsYXlOYW1lJzogJ0FkZGl0aW9uYWwgRGVwZW5kZW5jaWVzJywKLSAgICAgICAgICAgJ0luY2x1ZGVJbkNvbW1hbmRMaW5lJzogJ0ZhbHNlJywKLSAgICAgICAgICAgJ1Zpc2libGUnOiAnZmFsc2UnCi0gICAgICAgICAgfQotICAgICAgICAgXSwKLSAgICAgICAgIFsnU3RyaW5nUHJvcGVydHknLAotICAgICAgICAgIHsnU3VidHlwZSc6ICdBZGRpdGlvbmFsT3B0aW9ucycsCi0gICAgICAgICAgICdOYW1lJzogJ0FkZGl0aW9uYWxPcHRpb25zJywKLSAgICAgICAgICAgJ0NhdGVnb3J5JzogJ0NvbW1hbmQgTGluZScKLSAgICAgICAgICB9LAotICAgICAgICAgIFsnU3RyaW5nUHJvcGVydHkuRGlzcGxheU5hbWUnLAotICAgICAgICAgICBbJ3N5czpTdHJpbmcnLCAnQWRkaXRpb25hbCBPcHRpb25zJ10sCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbJ1N0cmluZ1Byb3BlcnR5LkRlc2NyaXB0aW9uJywKLSAgICAgICAgICAgWydzeXM6U3RyaW5nJywgJ0FkZGl0aW9uYWwgT3B0aW9ucyddLAotICAgICAgICAgIF0sCi0gICAgICAgICBdLAotICAgICAgICBdLAotICAgICAgICBbJ0l0ZW1UeXBlJywKLSAgICAgICAgIHsnTmFtZSc6IHJ1bGUucnVsZV9uYW1lLAotICAgICAgICAgICdEaXNwbGF5TmFtZSc6IHJ1bGUuZGlzcGxheV9uYW1lCi0gICAgICAgICB9Ci0gICAgICAgIF0sCi0gICAgICAgIFsnRmlsZUV4dGVuc2lvbicsCi0gICAgICAgICB7J05hbWUnOiAnKicgKyBydWxlLmV4dGVuc2lvbiwKLSAgICAgICAgICAnQ29udGVudFR5cGUnOiBydWxlLnJ1bGVfbmFtZQotICAgICAgICAgfQotICAgICAgICBdLAotICAgICAgICBbJ0NvbnRlbnRUeXBlJywKLSAgICAgICAgIHsnTmFtZSc6IHJ1bGUucnVsZV9uYW1lLAotICAgICAgICAgICdEaXNwbGF5TmFtZSc6ICcnLAotICAgICAgICAgICdJdGVtVHlwZSc6IHJ1bGUucnVsZV9uYW1lCi0gICAgICAgICB9Ci0gICAgICAgIF0KLSAgICBdKQotICBlYXN5X3htbC5Xcml0ZVhtbElmQ2hhbmdlZChjb250ZW50LCB4bWxfcGF0aCwgcHJldHR5PVRydWUsIHdpbjMyPVRydWUpCi0KLQotZGVmIF9HZXRDb25maWd1cmF0aW9uQW5kUGxhdGZvcm0obmFtZSwgc2V0dGluZ3MpOgotICBjb25maWd1cmF0aW9uID0gbmFtZS5yc3BsaXQoJ18nLCAxKVswXQotICBwbGF0Zm9ybSA9IHNldHRpbmdzLmdldCgnbXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtJywgJ1dpbjMyJykKLSAgcmV0dXJuIChjb25maWd1cmF0aW9uLCBwbGF0Zm9ybSkKLQotCi1kZWYgX0dldENvbmZpZ3VyYXRpb25Db25kaXRpb24obmFtZSwgc2V0dGluZ3MpOgotICByZXR1cm4gKHIiJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nJXN8JXMnIiAlCi0gICAgICAgICAgX0dldENvbmZpZ3VyYXRpb25BbmRQbGF0Zm9ybShuYW1lLCBzZXR0aW5ncykpCi0KLQotZGVmIF9HZXRNU0J1aWxkUHJvamVjdENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25zKToKLSAgZ3JvdXAgPSBbJ0l0ZW1Hcm91cCcsIHsnTGFiZWwnOiAnUHJvamVjdENvbmZpZ3VyYXRpb25zJ31dCi0gIGZvciAobmFtZSwgc2V0dGluZ3MpIGluIHNvcnRlZChjb25maWd1cmF0aW9ucy5pdGVyaXRlbXMoKSk6Ci0gICAgY29uZmlndXJhdGlvbiwgcGxhdGZvcm0gPSBfR2V0Q29uZmlndXJhdGlvbkFuZFBsYXRmb3JtKG5hbWUsIHNldHRpbmdzKQotICAgIGRlc2lnbmF0aW9uID0gJyVzfCVzJyAlIChjb25maWd1cmF0aW9uLCBwbGF0Zm9ybSkKLSAgICBncm91cC5hcHBlbmQoCi0gICAgICAgIFsnUHJvamVjdENvbmZpZ3VyYXRpb24nLCB7J0luY2x1ZGUnOiBkZXNpZ25hdGlvbn0sCi0gICAgICAgICBbJ0NvbmZpZ3VyYXRpb24nLCBjb25maWd1cmF0aW9uXSwKLSAgICAgICAgIFsnUGxhdGZvcm0nLCBwbGF0Zm9ybV1dKQotICByZXR1cm4gW2dyb3VwXQotCi0KLWRlZiBfR2V0TVNCdWlsZEdsb2JhbFByb3BlcnRpZXMoc3BlYywgZ3VpZCwgZ3lwX2ZpbGVfbmFtZSk6Ci0gIG5hbWVzcGFjZSA9IG9zLnBhdGguc3BsaXRleHQoZ3lwX2ZpbGVfbmFtZSlbMF0KLSAgcmV0dXJuIFsKLSAgICAgIFsnUHJvcGVydHlHcm91cCcsIHsnTGFiZWwnOiAnR2xvYmFscyd9LAotICAgICAgIFsnUHJvamVjdEd1aWQnLCBndWlkXSwKLSAgICAgICBbJ0tleXdvcmQnLCAnV2luMzJQcm9qJ10sCi0gICAgICAgWydSb290TmFtZXNwYWNlJywgbmFtZXNwYWNlXSwKLSAgICAgIF0KLSAgXQotCi0KLWRlZiBfR2V0TVNCdWlsZENvbmZpZ3VyYXRpb25EZXRhaWxzKHNwZWMsIGJ1aWxkX2ZpbGUpOgotICBwcm9wZXJ0aWVzID0ge30KLSAgZm9yIG5hbWUsIHNldHRpbmdzIGluIHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10uaXRlcml0ZW1zKCk6Ci0gICAgbXNidWlsZF9hdHRyaWJ1dGVzID0gX0dldE1TQnVpbGRBdHRyaWJ1dGVzKHNwZWMsIHNldHRpbmdzLCBidWlsZF9maWxlKQotICAgIGNvbmRpdGlvbiA9IF9HZXRDb25maWd1cmF0aW9uQ29uZGl0aW9uKG5hbWUsIHNldHRpbmdzKQotICAgIGNoYXJhY3Rlcl9zZXQgPSBtc2J1aWxkX2F0dHJpYnV0ZXMuZ2V0KCdDaGFyYWN0ZXJTZXQnKQotICAgIF9BZGRDb25kaXRpb25hbFByb3BlcnR5KHByb3BlcnRpZXMsIGNvbmRpdGlvbiwgJ0NvbmZpZ3VyYXRpb25UeXBlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2J1aWxkX2F0dHJpYnV0ZXNbJ0NvbmZpZ3VyYXRpb25UeXBlJ10pCi0gICAgaWYgY2hhcmFjdGVyX3NldDoKLSAgICAgIF9BZGRDb25kaXRpb25hbFByb3BlcnR5KHByb3BlcnRpZXMsIGNvbmRpdGlvbiwgJ0NoYXJhY3RlclNldCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJfc2V0KQotICByZXR1cm4gX0dldE1TQnVpbGRQcm9wZXJ0eUdyb3VwKHNwZWMsICdDb25maWd1cmF0aW9uJywgcHJvcGVydGllcykKLQotCi1kZWYgX0dldE1TQnVpbGRMb2NhbFByb3BlcnRpZXMobXNidWlsZF90b29sc2V0KToKLSAgIyBDdXJyZW50bHkgdGhlIG9ubHkgbG9jYWwgcHJvcGVydHkgd2Ugc3VwcG9ydCBpcyBQbGF0Zm9ybVRvb2xzZXQKLSAgcHJvcGVydGllcyA9IHt9Ci0gIGlmIG1zYnVpbGRfdG9vbHNldDoKLSAgICBwcm9wZXJ0aWVzID0gWwotICAgICAgICBbJ1Byb3BlcnR5R3JvdXAnLCB7J0xhYmVsJzogJ0xvY2Fscyd9LAotICAgICAgICAgIFsnUGxhdGZvcm1Ub29sc2V0JywgbXNidWlsZF90b29sc2V0XSwKLSAgICAgICAgXQotICAgICAgXQotICByZXR1cm4gcHJvcGVydGllcwotCi0KLWRlZiBfR2V0TVNCdWlsZFByb3BlcnR5U2hlZXRzKGNvbmZpZ3VyYXRpb25zKToKLSAgdXNlcl9wcm9wcyA9IHInJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJwotICBhZGRpdGlvbmFsX3Byb3BzID0ge30KLSAgcHJvcHNfc3BlY2lmaWVkID0gRmFsc2UKLSAgZm9yIG5hbWUsIHNldHRpbmdzIGluIHNvcnRlZChjb25maWd1cmF0aW9ucy5pdGVyaXRlbXMoKSk6Ci0gICAgY29uZmlndXJhdGlvbiA9IF9HZXRDb25maWd1cmF0aW9uQ29uZGl0aW9uKG5hbWUsIHNldHRpbmdzKQotICAgIGlmIHNldHRpbmdzLmhhc19rZXkoJ21zYnVpbGRfcHJvcHMnKToKLSAgICAgIGFkZGl0aW9uYWxfcHJvcHNbY29uZmlndXJhdGlvbl0gPSBfRml4UGF0aHMoc2V0dGluZ3NbJ21zYnVpbGRfcHJvcHMnXSkKLSAgICAgIHByb3BzX3NwZWNpZmllZCA9IFRydWUKLSAgICBlbHNlOgotICAgICBhZGRpdGlvbmFsX3Byb3BzW2NvbmZpZ3VyYXRpb25dID0gJycKLQotICBpZiBub3QgcHJvcHNfc3BlY2lmaWVkOgotICAgIHJldHVybiBbCi0gICAgICAgIFsnSW1wb3J0R3JvdXAnLAotICAgICAgICAgeydMYWJlbCc6ICdQcm9wZXJ0eVNoZWV0cyd9LAotICAgICAgICAgWydJbXBvcnQnLAotICAgICAgICAgIHsnUHJvamVjdCc6IHVzZXJfcHJvcHMsCi0gICAgICAgICAgICdDb25kaXRpb24nOiAiZXhpc3RzKCclcycpIiAlIHVzZXJfcHJvcHMsCi0gICAgICAgICAgICdMYWJlbCc6ICdMb2NhbEFwcERhdGFQbGF0Zm9ybScKLSAgICAgICAgICB9Ci0gICAgICAgICBdCi0gICAgICAgIF0KLSAgICBdCi0gIGVsc2U6Ci0gICAgc2hlZXRzID0gW10KLSAgICBmb3IgY29uZGl0aW9uLCBwcm9wcyBpbiBhZGRpdGlvbmFsX3Byb3BzLml0ZXJpdGVtcygpOgotICAgICAgaW1wb3J0X2dyb3VwID0gWwotICAgICAgICAnSW1wb3J0R3JvdXAnLAotICAgICAgICB7J0xhYmVsJzogJ1Byb3BlcnR5U2hlZXRzJywKLSAgICAgICAgICdDb25kaXRpb24nOiBjb25kaXRpb24KLSAgICAgICAgfSwKLSAgICAgICAgWydJbXBvcnQnLAotICAgICAgICAgeydQcm9qZWN0JzogdXNlcl9wcm9wcywKLSAgICAgICAgICAnQ29uZGl0aW9uJzogImV4aXN0cygnJXMnKSIgJSB1c2VyX3Byb3BzLAotICAgICAgICAgICdMYWJlbCc6ICdMb2NhbEFwcERhdGFQbGF0Zm9ybScKLSAgICAgICAgIH0KLSAgICAgICAgXQotICAgICAgXQotICAgICAgZm9yIHByb3BzX2ZpbGUgaW4gcHJvcHM6Ci0gICAgICAgIGltcG9ydF9ncm91cC5hcHBlbmQoWydJbXBvcnQnLCB7J1Byb2plY3QnOnByb3BzX2ZpbGV9XSkKLSAgICAgIHNoZWV0cy5hcHBlbmQoaW1wb3J0X2dyb3VwKQotICAgIHJldHVybiBzaGVldHMKLQotZGVmIF9Db252ZXJ0TVNWU0J1aWxkQXR0cmlidXRlcyhzcGVjLCBjb25maWcsIGJ1aWxkX2ZpbGUpOgotICBjb25maWdfdHlwZSA9IF9HZXRNU1ZTQ29uZmlndXJhdGlvblR5cGUoc3BlYywgYnVpbGRfZmlsZSkKLSAgbXN2c19hdHRyaWJ1dGVzID0gX0dldE1TVlNBdHRyaWJ1dGVzKHNwZWMsIGNvbmZpZywgY29uZmlnX3R5cGUpCi0gIG1zYnVpbGRfYXR0cmlidXRlcyA9IHt9Ci0gIGZvciBhIGluIG1zdnNfYXR0cmlidXRlczoKLSAgICBpZiBhIGluIFsnSW50ZXJtZWRpYXRlRGlyZWN0b3J5JywgJ091dHB1dERpcmVjdG9yeSddOgotICAgICAgZGlyZWN0b3J5ID0gTVNWU1NldHRpbmdzLkNvbnZlcnRWQ01hY3Jvc1RvTVNCdWlsZChtc3ZzX2F0dHJpYnV0ZXNbYV0pCi0gICAgICBpZiBub3QgZGlyZWN0b3J5LmVuZHN3aXRoKCdcXCcpOgotICAgICAgICBkaXJlY3RvcnkgKz0gJ1xcJwotICAgICAgbXNidWlsZF9hdHRyaWJ1dGVzW2FdID0gZGlyZWN0b3J5Ci0gICAgZWxpZiBhID09ICdDaGFyYWN0ZXJTZXQnOgotICAgICAgbXNidWlsZF9hdHRyaWJ1dGVzW2FdID0gX0NvbnZlcnRNU1ZTQ2hhcmFjdGVyU2V0KG1zdnNfYXR0cmlidXRlc1thXSkKLSAgICBlbGlmIGEgPT0gJ0NvbmZpZ3VyYXRpb25UeXBlJzoKLSAgICAgIG1zYnVpbGRfYXR0cmlidXRlc1thXSA9IF9Db252ZXJ0TVNWU0NvbmZpZ3VyYXRpb25UeXBlKG1zdnNfYXR0cmlidXRlc1thXSkKLSAgICBlbHNlOgotICAgICAgcHJpbnQgJ1dhcm5pbmc6IERvIG5vdCBrbm93IGhvdyB0byBjb252ZXJ0IE1TVlMgYXR0cmlidXRlICcgKyBhCi0gIHJldHVybiBtc2J1aWxkX2F0dHJpYnV0ZXMKLQotCi1kZWYgX0NvbnZlcnRNU1ZTQ2hhcmFjdGVyU2V0KGNoYXJfc2V0KToKLSAgaWYgY2hhcl9zZXQuaXNkaWdpdCgpOgotICAgIGNoYXJfc2V0ID0gewotICAgICAgICAnMCc6ICdNdWx0aUJ5dGUnLAotICAgICAgICAnMSc6ICdVbmljb2RlJywKLSAgICAgICAgJzInOiAnTXVsdGlCeXRlJywKLSAgICB9W2NoYXJfc2V0XQotICByZXR1cm4gY2hhcl9zZXQKLQotCi1kZWYgX0NvbnZlcnRNU1ZTQ29uZmlndXJhdGlvblR5cGUoY29uZmlnX3R5cGUpOgotICBpZiBjb25maWdfdHlwZS5pc2RpZ2l0KCk6Ci0gICAgY29uZmlnX3R5cGUgPSB7Ci0gICAgICAgICcxJzogJ0FwcGxpY2F0aW9uJywKLSAgICAgICAgJzInOiAnRHluYW1pY0xpYnJhcnknLAotICAgICAgICAnNCc6ICdTdGF0aWNMaWJyYXJ5JywKLSAgICAgICAgJzEwJzogJ1V0aWxpdHknCi0gICAgfVtjb25maWdfdHlwZV0KLSAgcmV0dXJuIGNvbmZpZ190eXBlCi0KLQotZGVmIF9HZXRNU0J1aWxkQXR0cmlidXRlcyhzcGVjLCBjb25maWcsIGJ1aWxkX2ZpbGUpOgotICBpZiAnbXNidWlsZF9jb25maWd1cmF0aW9uX2F0dHJpYnV0ZXMnIG5vdCBpbiBjb25maWc6Ci0gICAgbXNidWlsZF9hdHRyaWJ1dGVzID0gX0NvbnZlcnRNU1ZTQnVpbGRBdHRyaWJ1dGVzKHNwZWMsIGNvbmZpZywgYnVpbGRfZmlsZSkKLQotICBlbHNlOgotICAgIGNvbmZpZ190eXBlID0gX0dldE1TVlNDb25maWd1cmF0aW9uVHlwZShzcGVjLCBidWlsZF9maWxlKQotICAgIGNvbmZpZ190eXBlID0gX0NvbnZlcnRNU1ZTQ29uZmlndXJhdGlvblR5cGUoY29uZmlnX3R5cGUpCi0gICAgbXNidWlsZF9hdHRyaWJ1dGVzID0gY29uZmlnLmdldCgnbXNidWlsZF9jb25maWd1cmF0aW9uX2F0dHJpYnV0ZXMnLCB7fSkKLSAgICBtc2J1aWxkX2F0dHJpYnV0ZXMuc2V0ZGVmYXVsdCgnQ29uZmlndXJhdGlvblR5cGUnLCBjb25maWdfdHlwZSkKLSAgICBvdXRwdXRfZGlyID0gbXNidWlsZF9hdHRyaWJ1dGVzLmdldCgnT3V0cHV0RGlyZWN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyQoU29sdXRpb25EaXIpJChDb25maWd1cmF0aW9uKScpCi0gICAgbXNidWlsZF9hdHRyaWJ1dGVzWydPdXRwdXREaXJlY3RvcnknXSA9IF9GaXhQYXRoKG91dHB1dF9kaXIpICsgJ1xcJwotICAgIGlmICdJbnRlcm1lZGlhdGVEaXJlY3RvcnknIG5vdCBpbiBtc2J1aWxkX2F0dHJpYnV0ZXM6Ci0gICAgICBpbnRlcm1lZGlhdGUgPSBfRml4UGF0aCgnJChDb25maWd1cmF0aW9uKScpICsgJ1xcJwotICAgICAgbXNidWlsZF9hdHRyaWJ1dGVzWydJbnRlcm1lZGlhdGVEaXJlY3RvcnknXSA9IGludGVybWVkaWF0ZQotICAgIGlmICdDaGFyYWN0ZXJTZXQnIGluIG1zYnVpbGRfYXR0cmlidXRlczoKLSAgICAgIG1zYnVpbGRfYXR0cmlidXRlc1snQ2hhcmFjdGVyU2V0J10gPSBfQ29udmVydE1TVlNDaGFyYWN0ZXJTZXQoCi0gICAgICAgICAgbXNidWlsZF9hdHRyaWJ1dGVzWydDaGFyYWN0ZXJTZXQnXSkKLSAgaWYgJ1RhcmdldE5hbWUnIG5vdCBpbiBtc2J1aWxkX2F0dHJpYnV0ZXM6Ci0gICAgcHJlZml4ID0gc3BlYy5nZXQoJ3Byb2R1Y3RfcHJlZml4JywgJycpCi0gICAgcHJvZHVjdF9uYW1lID0gc3BlYy5nZXQoJ3Byb2R1Y3RfbmFtZScsICckKFByb2plY3ROYW1lKScpCi0gICAgdGFyZ2V0X25hbWUgPSBwcmVmaXggKyBwcm9kdWN0X25hbWUKLSAgICBtc2J1aWxkX2F0dHJpYnV0ZXNbJ1RhcmdldE5hbWUnXSA9IHRhcmdldF9uYW1lCi0KLSAgIyBNYWtlIHN1cmUgdGhhdCAnVGFyZ2V0UGF0aCcgbWF0Y2hlcyAnTGliLk91dHB1dEZpbGUnIG9yICdMaW5rLk91dHB1dEZpbGUnCi0gICMgKGRlcGVuZGluZyBvbiB0aGUgdG9vbCB1c2VkKSB0byBhdm9pZCBNU0I4MDEyIHdhcm5pbmcuCi0gIG1zYnVpbGRfdG9vbF9tYXAgPSB7Ci0gICAgICAnZXhlY3V0YWJsZSc6ICdMaW5rJywKLSAgICAgICdzaGFyZWRfbGlicmFyeSc6ICdMaW5rJywKLSAgICAgICdsb2FkYWJsZV9tb2R1bGUnOiAnTGluaycsCi0gICAgICAnc3RhdGljX2xpYnJhcnknOiAnTGliJywKLSAgfQotICBtc2J1aWxkX3Rvb2wgPSBtc2J1aWxkX3Rvb2xfbWFwLmdldChzcGVjWyd0eXBlJ10pCi0gIGlmIG1zYnVpbGRfdG9vbDoKLSAgICBtc2J1aWxkX3NldHRpbmdzID0gY29uZmlnWydmaW5hbGl6ZWRfbXNidWlsZF9zZXR0aW5ncyddCi0gICAgb3V0X2ZpbGUgPSBtc2J1aWxkX3NldHRpbmdzW21zYnVpbGRfdG9vbF0uZ2V0KCdPdXRwdXRGaWxlJykKLSAgICBpZiBvdXRfZmlsZToKLSAgICAgIG1zYnVpbGRfYXR0cmlidXRlc1snVGFyZ2V0UGF0aCddID0gX0ZpeFBhdGgob3V0X2ZpbGUpCi0KLSAgcmV0dXJuIG1zYnVpbGRfYXR0cmlidXRlcwotCi0KLWRlZiBfR2V0TVNCdWlsZENvbmZpZ3VyYXRpb25HbG9iYWxQcm9wZXJ0aWVzKHNwZWMsIGNvbmZpZ3VyYXRpb25zLCBidWlsZF9maWxlKToKLSAgIyBUT0RPKGplYW5sdWMpIFdlIGNvdWxkIG9wdGltaXplIG91dCB0aGUgZm9sbG93aW5nIGFuZCBkbyBpdCBvbmx5IGlmCi0gICMgdGhlcmUgYXJlIGFjdGlvbnMuCi0gICMgVE9ETyhqZWFubHVjKSBIYW5kbGUgdGhlIGVxdWl2YWxlbnQgb2Ygc2V0dGluZyAnQ1lHV0lOPW5vbnRzZWMnLgotICBuZXdfcGF0aHMgPSBbXQotICBjeWd3aW5fZGlycyA9IHNwZWMuZ2V0KCdtc3ZzX2N5Z3dpbl9kaXJzJywgWycuJ10pWzBdCi0gIGlmIGN5Z3dpbl9kaXJzOgotICAgIGN5Z19wYXRoID0gJyQoTVNCdWlsZFByb2plY3REaXJlY3RvcnkpXFwlc1xcYmluXFwnICUgX0ZpeFBhdGgoY3lnd2luX2RpcnMpCi0gICAgbmV3X3BhdGhzLmFwcGVuZChjeWdfcGF0aCkKLSAgICAjIFRPRE8oamVhbmx1YykgQ2hhbmdlIHRoZSBjb252ZW50aW9uIHRvIGhhdmUgYm90aCBhIGN5Z3dpbl9kaXIgYW5kIGEKLSAgICAjIHB5dGhvbl9kaXIuCi0gICAgcHl0aG9uX3BhdGggPSBjeWdfcGF0aC5yZXBsYWNlKCdjeWd3aW5cXGJpbicsICdweXRob25fMjYnKQotICAgIG5ld19wYXRocy5hcHBlbmQocHl0aG9uX3BhdGgpCi0gICAgaWYgbmV3X3BhdGhzOgotICAgICAgbmV3X3BhdGhzID0gJyQoRXhlY3V0YWJsZVBhdGgpOycgKyAnOycuam9pbihuZXdfcGF0aHMpCi0KLSAgcHJvcGVydGllcyA9IHt9Ci0gIGZvciAobmFtZSwgY29uZmlndXJhdGlvbikgaW4gc29ydGVkKGNvbmZpZ3VyYXRpb25zLml0ZXJpdGVtcygpKToKLSAgICBjb25kaXRpb24gPSBfR2V0Q29uZmlndXJhdGlvbkNvbmRpdGlvbihuYW1lLCBjb25maWd1cmF0aW9uKQotICAgIGF0dHJpYnV0ZXMgPSBfR2V0TVNCdWlsZEF0dHJpYnV0ZXMoc3BlYywgY29uZmlndXJhdGlvbiwgYnVpbGRfZmlsZSkKLSAgICBtc2J1aWxkX3NldHRpbmdzID0gY29uZmlndXJhdGlvblsnZmluYWxpemVkX21zYnVpbGRfc2V0dGluZ3MnXQotICAgIF9BZGRDb25kaXRpb25hbFByb3BlcnR5KHByb3BlcnRpZXMsIGNvbmRpdGlvbiwgJ0ludERpcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlc1snSW50ZXJtZWRpYXRlRGlyZWN0b3J5J10pCi0gICAgX0FkZENvbmRpdGlvbmFsUHJvcGVydHkocHJvcGVydGllcywgY29uZGl0aW9uLCAnT3V0RGlyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzWydPdXRwdXREaXJlY3RvcnknXSkKLSAgICBfQWRkQ29uZGl0aW9uYWxQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb25kaXRpb24sICdUYXJnZXROYW1lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzWydUYXJnZXROYW1lJ10pCi0KLSAgICBpZiBhdHRyaWJ1dGVzLmdldCgnVGFyZ2V0UGF0aCcpOgotICAgICAgX0FkZENvbmRpdGlvbmFsUHJvcGVydHkocHJvcGVydGllcywgY29uZGl0aW9uLCAnVGFyZ2V0UGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzWydUYXJnZXRQYXRoJ10pCi0KLSAgICBpZiBuZXdfcGF0aHM6Ci0gICAgICBfQWRkQ29uZGl0aW9uYWxQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb25kaXRpb24sICdFeGVjdXRhYmxlUGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGF0aHMpCi0gICAgdG9vbF9zZXR0aW5ncyA9IG1zYnVpbGRfc2V0dGluZ3MuZ2V0KCcnLCB7fSkKLSAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc29ydGVkKHRvb2xfc2V0dGluZ3MuaXRlcml0ZW1zKCkpOgotICAgICAgZm9ybWF0dGVkX3ZhbHVlID0gX0dldFZhbHVlRm9ybWF0dGVkRm9yTVNCdWlsZCgnJywgbmFtZSwgdmFsdWUpCi0gICAgICBfQWRkQ29uZGl0aW9uYWxQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb25kaXRpb24sIG5hbWUsIGZvcm1hdHRlZF92YWx1ZSkKLSAgcmV0dXJuIF9HZXRNU0J1aWxkUHJvcGVydHlHcm91cChzcGVjLCBOb25lLCBwcm9wZXJ0aWVzKQotCi0KLWRlZiBfQWRkQ29uZGl0aW9uYWxQcm9wZXJ0eShwcm9wZXJ0aWVzLCBjb25kaXRpb24sIG5hbWUsIHZhbHVlKToKLSAgIiIiQWRkcyBhIHByb3BlcnR5IC8gY29uZGl0aW9uYWwgdmFsdWUgcGFpciB0byBhIGRpY3Rpb25hcnkuCi0KLSAgQXJndW1lbnRzOgotICAgIHByb3BlcnRpZXM6IFRoZSBkaWN0aW9uYXJ5IHRvIGJlIG1vZGlmaWVkLiAgVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUKLSAgICAgICAgcHJvcGVydHkuICBUaGUgdmFsdWUgaXMgaXRzZWxmIGEgZGljdGlvbmFyeTsgaXRzIGtleSBpcyB0aGUgdmFsdWUgYW5kCi0gICAgICAgIHRoZSB2YWx1ZSBhIGxpc3Qgb2YgY29uZGl0aW9uIGZvciB3aGljaCB0aGlzIHZhbHVlIGlzIHRydWUuCi0gICAgY29uZGl0aW9uOiBUaGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIHRoZSBuYW1lZCBwcm9wZXJ0eSBoYXMgdGhlIHZhbHVlLgotICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS4KLSAgICB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4KLSAgIiIiCi0gIGlmIG5hbWUgbm90IGluIHByb3BlcnRpZXM6Ci0gICAgcHJvcGVydGllc1tuYW1lXSA9IHt9Ci0gIHZhbHVlcyA9IHByb3BlcnRpZXNbbmFtZV0KLSAgaWYgdmFsdWUgbm90IGluIHZhbHVlczoKLSAgICB2YWx1ZXNbdmFsdWVdID0gW10KLSAgY29uZGl0aW9ucyA9IHZhbHVlc1t2YWx1ZV0KLSAgY29uZGl0aW9ucy5hcHBlbmQoY29uZGl0aW9uKQotCi0KLSMgUmVnZXggZm9yIG1zdnMgdmFyaWFibGUgcmVmZXJlbmNlcyAoIGkuZS4gJChGT08pICkuCi1NU1ZTX1ZBUklBQkxFX1JFRkVSRU5DRSA9IHJlLmNvbXBpbGUoJ1wkXCgoW2EtekEtWl9dW2EtekEtWjAtOV9dKilcKScpCi0KLQotZGVmIF9HZXRNU0J1aWxkUHJvcGVydHlHcm91cChzcGVjLCBsYWJlbCwgcHJvcGVydGllcyk6Ci0gICIiIlJldHVybnMgYSBQcm9wZXJ0eUdyb3VwIGRlZmluaXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy4KLQotICBBcmd1bWVudHM6Ci0gICAgc3BlYzogVGhlIHRhcmdldCBwcm9qZWN0IGRpY3QuCi0gICAgbGFiZWw6IEFuIG9wdGlvbmFsIGxhYmVsIGZvciB0aGUgUHJvcGVydHlHcm91cC4KLSAgICBwcm9wZXJ0aWVzOiBUaGUgZGljdGlvbmFyeSB0byBiZSBjb252ZXJ0ZWQuICBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZQotICAgICAgICBwcm9wZXJ0eS4gIFRoZSB2YWx1ZSBpcyBpdHNlbGYgYSBkaWN0aW9uYXJ5OyBpdHMga2V5IGlzIHRoZSB2YWx1ZSBhbmQKLSAgICAgICAgdGhlIHZhbHVlIGEgbGlzdCBvZiBjb25kaXRpb24gZm9yIHdoaWNoIHRoaXMgdmFsdWUgaXMgdHJ1ZS4KLSAgIiIiCi0gIGdyb3VwID0gWydQcm9wZXJ0eUdyb3VwJ10KLSAgaWYgbGFiZWw6Ci0gICAgZ3JvdXAuYXBwZW5kKHsnTGFiZWwnOiBsYWJlbH0pCi0gIG51bV9jb25maWd1cmF0aW9ucyA9IGxlbihzcGVjWydjb25maWd1cmF0aW9ucyddKQotICBkZWYgR2V0RWRnZXMobm9kZSk6Ci0gICAgIyBVc2UgYSBkZWZpbml0aW9uIG9mIGVkZ2VzIHN1Y2ggdGhhdCB1c2VyX29mX3ZhcmlhYmxlIC0+IHVzZWRfdmFyaWJsZS4KLSAgICAjIFRoaXMgaGFwcGVucyB0byBiZSBlYXNpZXIgaW4gdGhpcyBjYXNlLCBzaW5jZSBhIHZhcmlhYmxlJ3MKLSAgICAjIGRlZmluaXRpb24gY29udGFpbnMgYWxsIHZhcmlhYmxlcyBpdCByZWZlcmVuY2VzIGluIGEgc2luZ2xlIHN0cmluZy4KLSAgICBlZGdlcyA9IHNldCgpCi0gICAgZm9yIHZhbHVlIGluIHNvcnRlZChwcm9wZXJ0aWVzW25vZGVdLmtleXMoKSk6Ci0gICAgICAjIEFkZCB0byBlZGdlcyBhbGwgJCguLi4pIHJlZmVyZW5jZXMgdG8gdmFyaWFibGVzLgotICAgICAgIwotICAgICAgIyBWYXJpYWJsZSByZWZlcmVuY2VzIHRoYXQgcmVmZXIgdG8gbmFtZXMgbm90IGluIHByb3BlcnRpZXMgYXJlIGV4Y2x1ZGVkCi0gICAgICAjIFRoZXNlIGNhbiBleGlzdCBmb3IgaW5zdGFuY2UgdG8gcmVmZXIgYnVpbHQgaW4gZGVmaW5pdGlvbnMgbGlrZQotICAgICAgIyAkKFNvbHV0aW9uRGlyKS4KLSAgICAgICMKLSAgICAgICMgU2VsZiByZWZlcmVuY2VzIGFyZSBpZ25vcmVkLiBTZWxmIHJlZmVyZW5jZSBpcyB1c2VkIGluIGEgZmV3IHBsYWNlcyB0bwotICAgICAgIyBhcHBlbmQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuIEkuZS4gUEFUSD0kKFBBVEgpO290aGVyX3BhdGgKLSAgICAgIGVkZ2VzLnVwZGF0ZShzZXQoW3YgZm9yIHYgaW4gTVNWU19WQVJJQUJMRV9SRUZFUkVOQ0UuZmluZGFsbCh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHYgaW4gcHJvcGVydGllcyBhbmQgdiAhPSBub2RlXSkpCi0gICAgcmV0dXJuIGVkZ2VzCi0gIHByb3BlcnRpZXNfb3JkZXJlZCA9IGd5cC5jb21tb24uVG9wb2xvZ2ljYWxseVNvcnRlZCgKLSAgICAgIHByb3BlcnRpZXMua2V5cygpLCBHZXRFZGdlcykKLSAgIyBXYWxrIHByb3BlcnRpZXMgaW4gdGhlIHJldmVyc2Ugb2YgYSB0b3BvbG9naWNhbCBzb3J0IG9uCi0gICMgdXNlcl9vZl92YXJpYWJsZSAtPiB1c2VkX3ZhcmlhYmxlIGFzIHRoaXMgZW5zdXJlcyB2YXJpYWJsZXMgYXJlCi0gICMgZGVmaW5lZCBiZWZvcmUgdGhleSBhcmUgdXNlZC4KLSAgIyBOT1RFOiByZXZlcnNlKHRvcHNvcnQoREFHKSkgPSB0b3Bzb3J0KHJldmVyc2VfZWRnZXMoREFHKSkKLSAgZm9yIG5hbWUgaW4gcmV2ZXJzZWQocHJvcGVydGllc19vcmRlcmVkKToKLSAgICB2YWx1ZXMgPSBwcm9wZXJ0aWVzW25hbWVdCi0gICAgZm9yIHZhbHVlLCBjb25kaXRpb25zIGluIHNvcnRlZCh2YWx1ZXMuaXRlcml0ZW1zKCkpOgotICAgICAgaWYgbGVuKGNvbmRpdGlvbnMpID09IG51bV9jb25maWd1cmF0aW9uczoKLSAgICAgICAgIyBJZiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUgYWxsIGNvbmZpZ3VyYXRpb25zLAotICAgICAgICAjIGp1c3QgYWRkIG9uZSB1bmNvbmRpdGlvbmFsIGVudHJ5LgotICAgICAgICBncm91cC5hcHBlbmQoW25hbWUsIHZhbHVlXSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGZvciBjb25kaXRpb24gaW4gY29uZGl0aW9uczoKLSAgICAgICAgICBncm91cC5hcHBlbmQoW25hbWUsIHsnQ29uZGl0aW9uJzogY29uZGl0aW9ufSwgdmFsdWVdKQotICByZXR1cm4gW2dyb3VwXQotCi0KLWRlZiBfR2V0TVNCdWlsZFRvb2xTZXR0aW5nc1NlY3Rpb25zKHNwZWMsIGNvbmZpZ3VyYXRpb25zKToKLSAgZ3JvdXBzID0gW10KLSAgZm9yIChuYW1lLCBjb25maWd1cmF0aW9uKSBpbiBzb3J0ZWQoY29uZmlndXJhdGlvbnMuaXRlcml0ZW1zKCkpOgotICAgIG1zYnVpbGRfc2V0dGluZ3MgPSBjb25maWd1cmF0aW9uWydmaW5hbGl6ZWRfbXNidWlsZF9zZXR0aW5ncyddCi0gICAgZ3JvdXAgPSBbJ0l0ZW1EZWZpbml0aW9uR3JvdXAnLAotICAgICAgICAgICAgIHsnQ29uZGl0aW9uJzogX0dldENvbmZpZ3VyYXRpb25Db25kaXRpb24obmFtZSwgY29uZmlndXJhdGlvbil9Ci0gICAgICAgICAgICBdCi0gICAgZm9yIHRvb2xfbmFtZSwgdG9vbF9zZXR0aW5ncyBpbiBzb3J0ZWQobXNidWlsZF9zZXR0aW5ncy5pdGVyaXRlbXMoKSk6Ci0gICAgICAjIFNraXAgdGhlIHRvb2wgbmFtZWQgJycgd2hpY2ggaXMgYSBob2xkZXIgb2YgZ2xvYmFsIHNldHRpbmdzIGhhbmRsZWQKLSAgICAgICMgYnkgX0dldE1TQnVpbGRDb25maWd1cmF0aW9uR2xvYmFsUHJvcGVydGllcy4KLSAgICAgIGlmIHRvb2xfbmFtZToKLSAgICAgICAgaWYgdG9vbF9zZXR0aW5nczoKLSAgICAgICAgICB0b29sID0gW3Rvb2xfbmFtZV0KLSAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc29ydGVkKHRvb2xfc2V0dGluZ3MuaXRlcml0ZW1zKCkpOgotICAgICAgICAgICAgZm9ybWF0dGVkX3ZhbHVlID0gX0dldFZhbHVlRm9ybWF0dGVkRm9yTVNCdWlsZCh0b29sX25hbWUsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKQotICAgICAgICAgICAgdG9vbC5hcHBlbmQoW25hbWUsIGZvcm1hdHRlZF92YWx1ZV0pCi0gICAgICAgICAgZ3JvdXAuYXBwZW5kKHRvb2wpCi0gICAgZ3JvdXBzLmFwcGVuZChncm91cCkKLSAgcmV0dXJuIGdyb3VwcwotCi0KLWRlZiBfRmluYWxpemVNU0J1aWxkU2V0dGluZ3Moc3BlYywgY29uZmlndXJhdGlvbik6Ci0gIGlmICdtc2J1aWxkX3NldHRpbmdzJyBpbiBjb25maWd1cmF0aW9uOgotICAgIGNvbnZlcnRlZCA9IEZhbHNlCi0gICAgbXNidWlsZF9zZXR0aW5ncyA9IGNvbmZpZ3VyYXRpb25bJ21zYnVpbGRfc2V0dGluZ3MnXQotICAgIE1TVlNTZXR0aW5ncy5WYWxpZGF0ZU1TQnVpbGRTZXR0aW5ncyhtc2J1aWxkX3NldHRpbmdzKQotICBlbHNlOgotICAgIGNvbnZlcnRlZCA9IFRydWUKLSAgICBtc3ZzX3NldHRpbmdzID0gY29uZmlndXJhdGlvbi5nZXQoJ21zdnNfc2V0dGluZ3MnLCB7fSkKLSAgICBtc2J1aWxkX3NldHRpbmdzID0gTVNWU1NldHRpbmdzLkNvbnZlcnRUb01TQnVpbGRTZXR0aW5ncyhtc3ZzX3NldHRpbmdzKQotICBpbmNsdWRlX2RpcnMsIHJlc291cmNlX2luY2x1ZGVfZGlycyA9IF9HZXRJbmNsdWRlRGlycyhjb25maWd1cmF0aW9uKQotICBsaWJyYXJpZXMgPSBfR2V0TGlicmFyaWVzKHNwZWMpCi0gIG91dF9maWxlLCBfLCBtc2J1aWxkX3Rvb2wgPSBfR2V0T3V0cHV0RmlsZVBhdGhBbmRUb29sKHNwZWMsIG1zYnVpbGQ9VHJ1ZSkKLSAgZGVmaW5lcyA9IF9HZXREZWZpbmVzKGNvbmZpZ3VyYXRpb24pCi0gIGlmIGNvbnZlcnRlZDoKLSAgICAjIFZpc3VhbCBTdHVkaW8gMjAxMCBoYXMgVFIxCi0gICAgZGVmaW5lcyA9IFtkIGZvciBkIGluIGRlZmluZXMgaWYgZCAhPSAnX0hBU19UUjE9MCddCi0gICAgIyBXYXJuIG9mIGlnbm9yZWQgc2V0dGluZ3MKLSAgICBpZ25vcmVkX3NldHRpbmdzID0gWydtc3ZzX3ByZWJ1aWxkJywgJ21zdnNfcG9zdGJ1aWxkJywgJ21zdnNfdG9vbF9maWxlcyddCi0gICAgZm9yIGlnbm9yZWRfc2V0dGluZyBpbiBpZ25vcmVkX3NldHRpbmdzOgotICAgICAgdmFsdWUgPSBjb25maWd1cmF0aW9uLmdldChpZ25vcmVkX3NldHRpbmcpCi0gICAgICBpZiB2YWx1ZToKLSAgICAgICAgcHJpbnQgKCdXYXJuaW5nOiBUaGUgYXV0b21hdGljIGNvbnZlcnNpb24gdG8gTVNCdWlsZCBkb2VzIG5vdCBoYW5kbGUgJwotICAgICAgICAgICAgICAgJyVzLiAgSWdub3Jpbmcgc2V0dGluZyBvZiAlcycgJSAoaWdub3JlZF9zZXR0aW5nLCBzdHIodmFsdWUpKSkKLQotICBkZWZpbmVzID0gW19Fc2NhcGVDcHBEZWZpbmVGb3JNU0J1aWxkKGQpIGZvciBkIGluIGRlZmluZXNdCi0gIGRpc2FibGVkX3dhcm5pbmdzID0gX0dldERpc2FibGVkV2FybmluZ3MoY29uZmlndXJhdGlvbikKLSAgIyBUT0RPKGplYW5sdWMpIFZhbGlkYXRlICYgd2FybiB0aGF0IHdlIGRvbid0IHRyYW5zbGF0ZQotICAjIHByZWJ1aWxkID0gY29uZmlndXJhdGlvbi5nZXQoJ21zdnNfcHJlYnVpbGQnKQotICAjIHBvc3RidWlsZCA9IGNvbmZpZ3VyYXRpb24uZ2V0KCdtc3ZzX3Bvc3RidWlsZCcpCi0gIGRlZl9maWxlID0gX0dldE1vZHVsZURlZmluaXRpb24oc3BlYykKLSAgcHJlY29tcGlsZWRfaGVhZGVyID0gY29uZmlndXJhdGlvbi5nZXQoJ21zdnNfcHJlY29tcGlsZWRfaGVhZGVyJykKLQotICAjIEFkZCB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIHRvb2wKLSAgIyBUT0RPKGplYW5sdWMpIFdlIGNvdWxkIG9wdGltaXplIGFuZCBnZW5lcmF0ZSB0aGVzZSBzZXR0aW5ncyBvbmx5IGlmCi0gICMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZXMgYXJlIGZvdW5kLCBlLmcuIGRvbid0IGdlbmVyYXRlIFJlc291cmNlQ29tcGlsZQotICAjIGlmIHlvdSBkb24ndCBoYXZlIGFueSByZXNvdXJjZXMuCi0gIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsICdDbENvbXBpbGUnLAotICAgICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsIGluY2x1ZGVfZGlycykKLSAgX1Rvb2xBcHBlbmQobXNidWlsZF9zZXR0aW5ncywgJ1Jlc291cmNlQ29tcGlsZScsCi0gICAgICAgICAgICAgICdBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzJywgcmVzb3VyY2VfaW5jbHVkZV9kaXJzKQotICAjIEFkZCBpbiBsaWJyYXJpZXMuCi0gIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsICdMaW5rJywgJ0FkZGl0aW9uYWxEZXBlbmRlbmNpZXMnLCBsaWJyYXJpZXMpCi0gIGlmIG91dF9maWxlOgotICAgIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsIG1zYnVpbGRfdG9vbCwgJ091dHB1dEZpbGUnLCBvdXRfZmlsZSwKLSAgICAgICAgICAgICAgICBvbmx5X2lmX3Vuc2V0PVRydWUpCi0gICMgQWRkIGRlZmluZXMuCi0gIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsICdDbENvbXBpbGUnLAotICAgICAgICAgICAgICAnUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMnLCBkZWZpbmVzKQotICBfVG9vbEFwcGVuZChtc2J1aWxkX3NldHRpbmdzLCAnUmVzb3VyY2VDb21waWxlJywKLSAgICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJywgZGVmaW5lcykKLSAgIyBBZGQgZGlzYWJsZWQgd2FybmluZ3MuCi0gIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsICdDbENvbXBpbGUnLAotICAgICAgICAgICAgICAnRGlzYWJsZVNwZWNpZmljV2FybmluZ3MnLCBkaXNhYmxlZF93YXJuaW5ncykKLSAgIyBUdXJuIG9uIHByZWNvbXBpbGVkIGhlYWRlcnMgaWYgYXBwcm9wcmlhdGUuCi0gIGlmIHByZWNvbXBpbGVkX2hlYWRlcjoKLSAgICBwcmVjb21waWxlZF9oZWFkZXIgPSBvcy5wYXRoLnNwbGl0KHByZWNvbXBpbGVkX2hlYWRlcilbMV0KLSAgICBfVG9vbEFwcGVuZChtc2J1aWxkX3NldHRpbmdzLCAnQ2xDb21waWxlJywgJ1ByZWNvbXBpbGVkSGVhZGVyJywgJ1VzZScpCi0gICAgX1Rvb2xBcHBlbmQobXNidWlsZF9zZXR0aW5ncywgJ0NsQ29tcGlsZScsCi0gICAgICAgICAgICAgICAgJ1ByZWNvbXBpbGVkSGVhZGVyRmlsZScsIHByZWNvbXBpbGVkX2hlYWRlcikKLSAgICBfVG9vbEFwcGVuZChtc2J1aWxkX3NldHRpbmdzLCAnQ2xDb21waWxlJywKLSAgICAgICAgICAgICAgICAnRm9yY2VkSW5jbHVkZUZpbGVzJywgcHJlY29tcGlsZWRfaGVhZGVyKQotICAjIExvYWRhYmxlIG1vZHVsZXMgZG9uJ3QgZ2VuZXJhdGUgaW1wb3J0IGxpYnJhcmllczsKLSAgIyB0ZWxsIGRlcGVuZGVudCBwcm9qZWN0cyB0byBub3QgZXhwZWN0IG9uZS4KLSAgaWYgc3BlY1sndHlwZSddID09ICdsb2FkYWJsZV9tb2R1bGUnOgotICAgIF9Ub29sQXBwZW5kKG1zYnVpbGRfc2V0dGluZ3MsICcnLCAnSWdub3JlSW1wb3J0TGlicmFyeScsICd0cnVlJykKLSAgIyBTZXQgdGhlIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUgaWYgYW55LgotICBpZiBkZWZfZmlsZToKLSAgICBfVG9vbEFwcGVuZChtc2J1aWxkX3NldHRpbmdzLCAnTGluaycsICdNb2R1bGVEZWZpbml0aW9uRmlsZScsIGRlZl9maWxlKQotICBjb25maWd1cmF0aW9uWydmaW5hbGl6ZWRfbXNidWlsZF9zZXR0aW5ncyddID0gbXNidWlsZF9zZXR0aW5ncwotCi0KLWRlZiBfR2V0VmFsdWVGb3JtYXR0ZWRGb3JNU0J1aWxkKHRvb2xfbmFtZSwgbmFtZSwgdmFsdWUpOgotICBpZiB0eXBlKHZhbHVlKSA9PSBsaXN0OgotICAgICMgRm9yIHNvbWUgc2V0dGluZ3MsIFZTMjAxMCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZHMgdGhlIHNldHRpbmdzCi0gICAgIyBUT0RPKGplYW5sdWMpIElzIHRoaXMgd2hhdCB3ZSB3YW50PwotICAgIGlmIG5hbWUgaW4gWydBZGRpdGlvbmFsRGVwZW5kZW5jaWVzJywKLSAgICAgICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsCi0gICAgICAgICAgICAgICAgJ0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMnLAotICAgICAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucycsCi0gICAgICAgICAgICAgICAgJ0RlbGF5TG9hZERMTHMnLAotICAgICAgICAgICAgICAgICdEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncycsCi0gICAgICAgICAgICAgICAgJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJ106Ci0gICAgICB2YWx1ZS5hcHBlbmQoJyUlKCVzKScgJSBuYW1lKQotICAgICMgRm9yIG1vc3QgdG9vbHMsIGVudHJpZXMgaW4gYSBsaXN0IHNob3VsZCBiZSBzZXBhcmF0ZWQgd2l0aCAnOycgYnV0IHNvbWUKLSAgICAjIHNldHRpbmdzIHVzZSBhIHNwYWNlLiAgQ2hlY2sgZm9yIHRob3NlIGZpcnN0LgotICAgIGV4Y2VwdGlvbnMgPSB7Ci0gICAgICAgICdDbENvbXBpbGUnOiBbJ0FkZGl0aW9uYWxPcHRpb25zJ10sCi0gICAgICAgICdMaW5rJzogWydBZGRpdGlvbmFsT3B0aW9ucyddLAotICAgICAgICAnTGliJzogWydBZGRpdGlvbmFsT3B0aW9ucyddfQotICAgIGlmIHRvb2xfbmFtZSBpbiBleGNlcHRpb25zIGFuZCBuYW1lIGluIGV4Y2VwdGlvbnNbdG9vbF9uYW1lXToKLSAgICAgIGNoYXIgPSAnICcKLSAgICBlbHNlOgotICAgICAgY2hhciA9ICc7JwotICAgIGZvcm1hdHRlZF92YWx1ZSA9IGNoYXIuam9pbigKLSAgICAgICAgW01TVlNTZXR0aW5ncy5Db252ZXJ0VkNNYWNyb3NUb01TQnVpbGQoaSkgZm9yIGkgaW4gdmFsdWVdKQotICBlbHNlOgotICAgIGZvcm1hdHRlZF92YWx1ZSA9IE1TVlNTZXR0aW5ncy5Db252ZXJ0VkNNYWNyb3NUb01TQnVpbGQodmFsdWUpCi0gIHJldHVybiBmb3JtYXR0ZWRfdmFsdWUKLQotCi1kZWYgX1ZlcmlmeVNvdXJjZXNFeGlzdChzb3VyY2VzLCByb290X2Rpcik6Ci0gICIiIlZlcmlmaWVzIHRoYXQgYWxsIHNvdXJjZSBmaWxlcyBleGlzdCBvbiBkaXNrLgotCi0gIENoZWNrcyB0aGF0IGFsbCByZWd1bGFyIHNvdXJjZSBmaWxlcywgaS5lLiBub3QgY3JlYXRlZCBhdCBydW4gdGltZSwKLSAgZXhpc3Qgb24gZGlzay4gIE1pc3NpbmcgZmlsZXMgY2F1c2UgbmVlZGxlc3MgcmVjb21waWxhdGlvbiBidXQgbm8gb3RoZXJ3aXNlCi0gIHZpc2libGUgZXJyb3JzLgotCi0gIEFyZ3VtZW50czoKLSAgICBzb3VyY2VzOiBBIHJlY3Vyc2l2ZSBsaXN0IG9mIEZpbHRlci9maWxlIG5hbWVzLgotICAgIHJvb3RfZGlyOiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIHRoZSByZWxhdGl2ZSBwYXRoIG5hbWVzLgotICBSZXR1cm5zOgotICAgIEEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgdGhhdCBjYW5ub3QgYmUgZm91bmQgb24gZGlzay4KLSAgIiIiCi0gIG1pc3Npbmdfc291cmNlcyA9IFtdCi0gIGZvciBzb3VyY2UgaW4gc291cmNlczoKLSAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgTVNWU1Byb2plY3QuRmlsdGVyKToKLSAgICAgIG1pc3Npbmdfc291cmNlcy5leHRlbmQoX1ZlcmlmeVNvdXJjZXNFeGlzdChzb3VyY2UuY29udGVudHMsIHJvb3RfZGlyKSkKLSAgICBlbHNlOgotICAgICAgaWYgJyQnIG5vdCBpbiBzb3VyY2U6Ci0gICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihyb290X2Rpciwgc291cmNlKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKToKLSAgICAgICAgICBtaXNzaW5nX3NvdXJjZXMuYXBwZW5kKGZ1bGxfcGF0aCkKLSAgcmV0dXJuIG1pc3Npbmdfc291cmNlcwotCi0KLWRlZiBfR2V0TVNCdWlsZFNvdXJjZXMoc3BlYywgc291cmNlcywgZXhjbHVzaW9ucywgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uc19zcGVjLCBzb3VyY2VzX2hhbmRsZWRfYnlfYWN0aW9uLCBsaXN0X2V4Y2x1ZGVkKToKLSAgZ3JvdXBzID0gWydub25lJywgJ21pZGwnLCAnaW5jbHVkZScsICdjb21waWxlJywgJ3Jlc291cmNlJywgJ3J1bGUnXQotICBncm91cGVkX3NvdXJjZXMgPSB7fQotICBmb3IgZyBpbiBncm91cHM6Ci0gICAgZ3JvdXBlZF9zb3VyY2VzW2ddID0gW10KLQotICBfQWRkU291cmNlczIoc3BlYywgc291cmNlcywgZXhjbHVzaW9ucywgZ3JvdXBlZF9zb3VyY2VzLAotICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSwgc291cmNlc19oYW5kbGVkX2J5X2FjdGlvbiwgbGlzdF9leGNsdWRlZCkKLSAgc291cmNlcyA9IFtdCi0gIGZvciBnIGluIGdyb3VwczoKLSAgICBpZiBncm91cGVkX3NvdXJjZXNbZ106Ci0gICAgICBzb3VyY2VzLmFwcGVuZChbJ0l0ZW1Hcm91cCddICsgZ3JvdXBlZF9zb3VyY2VzW2ddKQotICBpZiBhY3Rpb25zX3NwZWM6Ci0gICAgc291cmNlcy5hcHBlbmQoWydJdGVtR3JvdXAnXSArIGFjdGlvbnNfc3BlYykKLSAgcmV0dXJuIHNvdXJjZXMKLQotCi1kZWYgX0FkZFNvdXJjZXMyKHNwZWMsIHNvdXJjZXMsIGV4Y2x1c2lvbnMsIGdyb3VwZWRfc291cmNlcywKLSAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSwgc291cmNlc19oYW5kbGVkX2J5X2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgbGlzdF9leGNsdWRlZCk6Ci0gIGV4dGVuc2lvbnNfZXhjbHVkZWRfZnJvbV9wcmVjb21waWxlID0gW10KLSAgZm9yIHNvdXJjZSBpbiBzb3VyY2VzOgotICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBNU1ZTUHJvamVjdC5GaWx0ZXIpOgotICAgICAgX0FkZFNvdXJjZXMyKHNwZWMsIHNvdXJjZS5jb250ZW50cywgZXhjbHVzaW9ucywgZ3JvdXBlZF9zb3VyY2VzLAotICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl90b19ydWxlX25hbWUsIHNvdXJjZXNfaGFuZGxlZF9ieV9hY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgbGlzdF9leGNsdWRlZCkKLSAgICBlbHNlOgotICAgICAgaWYgbm90IHNvdXJjZSBpbiBzb3VyY2VzX2hhbmRsZWRfYnlfYWN0aW9uOgotICAgICAgICBkZXRhaWwgPSBbXQotICAgICAgICBleGNsdWRlZF9jb25maWd1cmF0aW9ucyA9IGV4Y2x1c2lvbnMuZ2V0KHNvdXJjZSwgW10pCi0gICAgICAgIGlmIGxlbihleGNsdWRlZF9jb25maWd1cmF0aW9ucykgPT0gbGVuKHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10pOgotICAgICAgICAgIGRldGFpbC5hcHBlbmQoWydFeGNsdWRlZEZyb21CdWlsZCcsICd0cnVlJ10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgZm9yIGNvbmZpZ19uYW1lLCBjb25maWd1cmF0aW9uIGluIHNvcnRlZChleGNsdWRlZF9jb25maWd1cmF0aW9ucyk6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBfR2V0Q29uZmlndXJhdGlvbkNvbmRpdGlvbihjb25maWdfbmFtZSwgY29uZmlndXJhdGlvbikKLSAgICAgICAgICAgIGRldGFpbC5hcHBlbmQoWydFeGNsdWRlZEZyb21CdWlsZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7J0NvbmRpdGlvbic6IGNvbmRpdGlvbn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZSddKQotICAgICAgICAjIEFkZCBwcmVjb21waWxlIGlmIG5lZWRlZAotICAgICAgICBmb3IgY29uZmlnX25hbWUsIGNvbmZpZ3VyYXRpb24gaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICAgICAgICBwcmVjb21waWxlZF9zb3VyY2UgPSBjb25maWd1cmF0aW9uLmdldCgnbXN2c19wcmVjb21waWxlZF9zb3VyY2UnLCAnJykKLSAgICAgICAgICBpZiBwcmVjb21waWxlZF9zb3VyY2UgIT0gJyc6Ci0gICAgICAgICAgICBwcmVjb21waWxlZF9zb3VyY2UgPSBfRml4UGF0aChwcmVjb21waWxlZF9zb3VyY2UpCi0gICAgICAgICAgICBpZiBub3QgZXh0ZW5zaW9uc19leGNsdWRlZF9mcm9tX3ByZWNvbXBpbGU6Ci0gICAgICAgICAgICAgICMgSWYgdGhlIHByZWNvbXBpbGVkIGhlYWRlciBpcyBnZW5lcmF0ZWQgYnkgYSBDIHNvdXJjZSwgd2UgbXVzdAotICAgICAgICAgICAgICAjIG5vdCB0cnkgdG8gdXNlIGl0IGZvciBDKysgc291cmNlcywgYW5kIHZpY2UgdmVyc2EuCi0gICAgICAgICAgICAgIGJhc2VuYW1lLCBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHByZWNvbXBpbGVkX3NvdXJjZSkKLSAgICAgICAgICAgICAgaWYgZXh0ZW5zaW9uID09ICcuYyc6Ci0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uc19leGNsdWRlZF9mcm9tX3ByZWNvbXBpbGUgPSBbJy5jYycsICcuY3BwJywgJy5jeHgnXQotICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNfZXhjbHVkZWRfZnJvbV9wcmVjb21waWxlID0gWycuYyddCi0KLSAgICAgICAgICBpZiBwcmVjb21waWxlZF9zb3VyY2UgPT0gc291cmNlOgotICAgICAgICAgICAgY29uZGl0aW9uID0gX0dldENvbmZpZ3VyYXRpb25Db25kaXRpb24oY29uZmlnX25hbWUsIGNvbmZpZ3VyYXRpb24pCi0gICAgICAgICAgICBkZXRhaWwuYXBwZW5kKFsnUHJlY29tcGlsZWRIZWFkZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeydDb25kaXRpb24nOiBjb25kaXRpb259LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NyZWF0ZScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKLSAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBUdXJuIG9mZiBwcmVjb21waWxlZCBoZWFkZXIgdXNhZ2UgZm9yIHNvdXJjZSBmaWxlcyBvZiBhCi0gICAgICAgICAgICAjIGRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhlCi0gICAgICAgICAgICAjIHByZWNvbXBpbGVkIGhlYWRlci4KLSAgICAgICAgICAgIGZvciBleHRlbnNpb24gaW4gZXh0ZW5zaW9uc19leGNsdWRlZF9mcm9tX3ByZWNvbXBpbGU6Ci0gICAgICAgICAgICAgIGlmIHNvdXJjZS5lbmRzd2l0aChleHRlbnNpb24pOgotICAgICAgICAgICAgICAgIGRldGFpbC5hcHBlbmQoWydQcmVjb21waWxlZEhlYWRlcicsICcnXSkKLSAgICAgICAgICAgICAgICBkZXRhaWwuYXBwZW5kKFsnRm9yY2VkSW5jbHVkZUZpbGVzJywgJyddKQotCi0gICAgICAgIGdyb3VwLCBlbGVtZW50ID0gX01hcEZpbGVUb01zQnVpbGRTb3VyY2VUeXBlKHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSkKLSAgICAgICAgZ3JvdXBlZF9zb3VyY2VzW2dyb3VwXS5hcHBlbmQoW2VsZW1lbnQsIHsnSW5jbHVkZSc6IHNvdXJjZX1dICsgZGV0YWlsKQotCi0KLWRlZiBfR2V0TVNCdWlsZFByb2plY3RSZWZlcmVuY2VzKHByb2plY3QpOgotICByZWZlcmVuY2VzID0gW10KLSAgaWYgcHJvamVjdC5kZXBlbmRlbmNpZXM6Ci0gICAgZ3JvdXAgPSBbJ0l0ZW1Hcm91cCddCi0gICAgZm9yIGRlcGVuZGVuY3kgaW4gcHJvamVjdC5kZXBlbmRlbmNpZXM6Ci0gICAgICBndWlkID0gZGVwZW5kZW5jeS5ndWlkCi0gICAgICBwcm9qZWN0X2RpciA9IG9zLnBhdGguc3BsaXQocHJvamVjdC5wYXRoKVswXQotICAgICAgcmVsYXRpdmVfcGF0aCA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKGRlcGVuZGVuY3kucGF0aCwgcHJvamVjdF9kaXIpCi0gICAgICBwcm9qZWN0X3JlZiA9IFsnUHJvamVjdFJlZmVyZW5jZScsCi0gICAgICAgICAgeydJbmNsdWRlJzogcmVsYXRpdmVfcGF0aH0sCi0gICAgICAgICAgWydQcm9qZWN0JywgZ3VpZF0sCi0gICAgICAgICAgWydSZWZlcmVuY2VPdXRwdXRBc3NlbWJseScsICdmYWxzZSddCi0gICAgICAgICAgXQotICAgICAgZm9yIGNvbmZpZyBpbiBkZXBlbmRlbmN5LnNwZWMuZ2V0KCdjb25maWd1cmF0aW9ucycsIHt9KS5pdGVydmFsdWVzKCk6Ci0gICAgICAgICMgSWYgaXQncyBkaXNhYmxlZCBpbiBhbnkgY29uZmlnLCB0dXJuIGl0IG9mZiBpbiB0aGUgcmVmZXJlbmNlLgotICAgICAgICBpZiBjb25maWcuZ2V0KCdtc3ZzXzIwMTBfZGlzYWJsZV91bGRpX3doZW5fcmVmZXJlbmNlZCcsIDApOgotICAgICAgICAgIHByb2plY3RfcmVmLmFwcGVuZChbJ1VzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzJywgJ2ZhbHNlJ10pCi0gICAgICAgICAgYnJlYWsKLSAgICAgIGdyb3VwLmFwcGVuZChwcm9qZWN0X3JlZikKLSAgICByZWZlcmVuY2VzLmFwcGVuZChncm91cCkKLSAgcmV0dXJuIHJlZmVyZW5jZXMKLQotCi1kZWYgX0dlbmVyYXRlTVNCdWlsZFByb2plY3QocHJvamVjdCwgb3B0aW9ucywgdmVyc2lvbiwgZ2VuZXJhdG9yX2ZsYWdzKToKLSAgc3BlYyA9IHByb2plY3Quc3BlYwotICBjb25maWd1cmF0aW9ucyA9IHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10KLSAgcHJvamVjdF9kaXIsIHByb2plY3RfZmlsZV9uYW1lID0gb3MucGF0aC5zcGxpdChwcm9qZWN0LnBhdGgpCi0gIG1zYnVpbGRwcm9qX2RpciA9IG9zLnBhdGguZGlybmFtZShwcm9qZWN0LnBhdGgpCi0gIGlmIG1zYnVpbGRwcm9qX2RpciBhbmQgbm90IG9zLnBhdGguZXhpc3RzKG1zYnVpbGRwcm9qX2Rpcik6Ci0gICAgb3MubWFrZWRpcnMobXNidWlsZHByb2pfZGlyKQotICAjIFByZXBhcmUgbGlzdCBvZiBzb3VyY2VzIGFuZCBleGNsdWRlZCBzb3VyY2VzLgotICBneXBfcGF0aCA9IF9Ob3JtYWxpemVkU291cmNlKHByb2plY3QuYnVpbGRfZmlsZSkKLSAgcmVsYXRpdmVfcGF0aF9vZl9neXBfZmlsZSA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKGd5cF9wYXRoLCBwcm9qZWN0X2RpcikKLQotICBneXBfZmlsZSA9IG9zLnBhdGguc3BsaXQocHJvamVjdC5idWlsZF9maWxlKVsxXQotICBzb3VyY2VzLCBleGNsdWRlZF9zb3VyY2VzID0gX1ByZXBhcmVMaXN0T2ZTb3VyY2VzKHNwZWMsIGdlbmVyYXRvcl9mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBneXBfZmlsZSkKLSAgIyBBZGQgcnVsZXMuCi0gIGFjdGlvbnNfdG9fYWRkID0ge30KLSAgcHJvcHNfZmlsZXNfb2ZfcnVsZXMgPSBzZXQoKQotICB0YXJnZXRzX2ZpbGVzX29mX3J1bGVzID0gc2V0KCkKLSAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSA9IHt9Ci0gIGxpc3RfZXhjbHVkZWQgPSBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCdtc3ZzX2xpc3RfZXhjbHVkZWRfZmlsZXMnLCBUcnVlKQotICBfR2VuZXJhdGVSdWxlc0Zvck1TQnVpbGQocHJvamVjdF9kaXIsIG9wdGlvbnMsIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLCBleGNsdWRlZF9zb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHNfZmlsZXNfb2ZfcnVsZXMsIHRhcmdldHNfZmlsZXNfb2ZfcnVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zX3RvX2FkZCwgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSkKLSAgc291cmNlcywgZXhjbHVkZWRfc291cmNlcywgZXhjbHVkZWRfaWRsID0gKAotICAgICAgX0FkanVzdFNvdXJjZXNBbmRDb252ZXJ0VG9GaWx0ZXJIaWVyYXJjaHkoc3BlYywgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZGlyLCBzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZXhjbHVkZWQpKQotICBfQWRkQWN0aW9ucyhhY3Rpb25zX3RvX2FkZCwgc3BlYywgcHJvamVjdC5idWlsZF9maWxlKQotICBfQWRkQ29waWVzKGFjdGlvbnNfdG9fYWRkLCBzcGVjKQotCi0gICMgTk9URTogdGhpcyBzdGFuemEgbXVzdCBhcHBlYXIgYWZ0ZXIgYWxsIGFjdGlvbnMgaGF2ZSBiZWVuIGRlY2lkZWQuCi0gICMgRG9uJ3QgZXhjbHVkZWQgc291cmNlcyB3aXRoIGFjdGlvbnMgYXR0YWNoZWQsIG9yIHRoZXkgd29uJ3QgcnVuLgotICBleGNsdWRlZF9zb3VyY2VzID0gX0ZpbHRlckFjdGlvbnNGcm9tRXhjbHVkZWQoCi0gICAgICBleGNsdWRlZF9zb3VyY2VzLCBhY3Rpb25zX3RvX2FkZCkKLQotICBleGNsdXNpb25zID0gX0dldEV4Y2x1ZGVkRmlsZXNGcm9tQnVpbGQoc3BlYywgZXhjbHVkZWRfc291cmNlcywgZXhjbHVkZWRfaWRsKQotICBhY3Rpb25zX3NwZWMsIHNvdXJjZXNfaGFuZGxlZF9ieV9hY3Rpb24gPSBfR2VuZXJhdGVBY3Rpb25zRm9yTVNCdWlsZCgKLSAgICAgIHNwZWMsIGFjdGlvbnNfdG9fYWRkKQotCi0gIF9HZW5lcmF0ZU1TQnVpbGRGaWx0ZXJzRmlsZShwcm9qZWN0LnBhdGggKyAnLmZpbHRlcnMnLCBzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uX3RvX3J1bGVfbmFtZSkKLSAgbWlzc2luZ19zb3VyY2VzID0gX1ZlcmlmeVNvdXJjZXNFeGlzdChzb3VyY2VzLCBwcm9qZWN0X2RpcikKLQotICBmb3IgY29uZmlndXJhdGlvbiBpbiBjb25maWd1cmF0aW9ucy5pdGVydmFsdWVzKCk6Ci0gICAgX0ZpbmFsaXplTVNCdWlsZFNldHRpbmdzKHNwZWMsIGNvbmZpZ3VyYXRpb24pCi0KLSAgIyBBZGQgYXR0cmlidXRlcyB0byByb290IGVsZW1lbnQKLQotICBpbXBvcnRfZGVmYXVsdF9zZWN0aW9uID0gWwotICAgICAgWydJbXBvcnQnLCB7J1Byb2plY3QnOiByJyQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzJ31dXQotICBpbXBvcnRfY3BwX3Byb3BzX3NlY3Rpb24gPSBbCi0gICAgICBbJ0ltcG9ydCcsIHsnUHJvamVjdCc6IHInJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzJ31dXQotICBpbXBvcnRfY3BwX3RhcmdldHNfc2VjdGlvbiA9IFsKLSAgICAgIFsnSW1wb3J0JywgeydQcm9qZWN0JzogcickKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyd9XV0KLSAgbWFjcm9fc2VjdGlvbiA9IFtbJ1Byb3BlcnR5R3JvdXAnLCB7J0xhYmVsJzogJ1VzZXJNYWNyb3MnfV1dCi0KLSAgY29udGVudCA9IFsKLSAgICAgICdQcm9qZWN0JywKLSAgICAgIHsneG1sbnMnOiAnaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzJywKLSAgICAgICAnVG9vbHNWZXJzaW9uJzogdmVyc2lvbi5Qcm9qZWN0VmVyc2lvbigpLAotICAgICAgICdEZWZhdWx0VGFyZ2V0cyc6ICdCdWlsZCcKLSAgICAgIH1dCi0KLSAgY29udGVudCArPSBfR2V0TVNCdWlsZFByb2plY3RDb25maWd1cmF0aW9ucyhjb25maWd1cmF0aW9ucykKLSAgY29udGVudCArPSBfR2V0TVNCdWlsZEdsb2JhbFByb3BlcnRpZXMoc3BlYywgcHJvamVjdC5ndWlkLCBwcm9qZWN0X2ZpbGVfbmFtZSkKLSAgY29udGVudCArPSBpbXBvcnRfZGVmYXVsdF9zZWN0aW9uCi0gIGNvbnRlbnQgKz0gX0dldE1TQnVpbGRDb25maWd1cmF0aW9uRGV0YWlscyhzcGVjLCBwcm9qZWN0LmJ1aWxkX2ZpbGUpCi0gIGNvbnRlbnQgKz0gX0dldE1TQnVpbGRMb2NhbFByb3BlcnRpZXMocHJvamVjdC5tc2J1aWxkX3Rvb2xzZXQpCi0gIGNvbnRlbnQgKz0gaW1wb3J0X2NwcF9wcm9wc19zZWN0aW9uCi0gIGNvbnRlbnQgKz0gX0dldE1TQnVpbGRFeHRlbnNpb25zKHByb3BzX2ZpbGVzX29mX3J1bGVzKQotICBjb250ZW50ICs9IF9HZXRNU0J1aWxkUHJvcGVydHlTaGVldHMoY29uZmlndXJhdGlvbnMpCi0gIGNvbnRlbnQgKz0gbWFjcm9fc2VjdGlvbgotICBjb250ZW50ICs9IF9HZXRNU0J1aWxkQ29uZmlndXJhdGlvbkdsb2JhbFByb3BlcnRpZXMoc3BlYywgY29uZmlndXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0LmJ1aWxkX2ZpbGUpCi0gIGNvbnRlbnQgKz0gX0dldE1TQnVpbGRUb29sU2V0dGluZ3NTZWN0aW9ucyhzcGVjLCBjb25maWd1cmF0aW9ucykKLSAgY29udGVudCArPSBfR2V0TVNCdWlsZFNvdXJjZXMoCi0gICAgICBzcGVjLCBzb3VyY2VzLCBleGNsdXNpb25zLCBleHRlbnNpb25fdG9fcnVsZV9uYW1lLCBhY3Rpb25zX3NwZWMsCi0gICAgICBzb3VyY2VzX2hhbmRsZWRfYnlfYWN0aW9uLCBsaXN0X2V4Y2x1ZGVkKQotICBjb250ZW50ICs9IF9HZXRNU0J1aWxkUHJvamVjdFJlZmVyZW5jZXMocHJvamVjdCkKLSAgY29udGVudCArPSBpbXBvcnRfY3BwX3RhcmdldHNfc2VjdGlvbgotICBjb250ZW50ICs9IF9HZXRNU0J1aWxkRXh0ZW5zaW9uVGFyZ2V0cyh0YXJnZXRzX2ZpbGVzX29mX3J1bGVzKQotCi0gICMgVE9ETyhqZWFubHVjKSBGaWxlIGEgYnVnIHRvIGdldCByaWQgb2YgcnVuYXMuICBXZSBoYWQgaW4gTVNWUzoKLSAgIyBoYXNfcnVuX2FzID0gX1dyaXRlTVNWU1VzZXJGaWxlKHByb2plY3QucGF0aCwgdmVyc2lvbiwgc3BlYykKLQotICBlYXN5X3htbC5Xcml0ZVhtbElmQ2hhbmdlZChjb250ZW50LCBwcm9qZWN0LnBhdGgsIHByZXR0eT1UcnVlLCB3aW4zMj1UcnVlKQotCi0gIHJldHVybiBtaXNzaW5nX3NvdXJjZXMKLQotCi1kZWYgX0dldE1TQnVpbGRFeHRlbnNpb25zKHByb3BzX2ZpbGVzX29mX3J1bGVzKToKLSAgZXh0ZW5zaW9ucyA9IFsnSW1wb3J0R3JvdXAnLCB7J0xhYmVsJzogJ0V4dGVuc2lvblNldHRpbmdzJ31dCi0gIGZvciBwcm9wc19maWxlIGluIHByb3BzX2ZpbGVzX29mX3J1bGVzOgotICAgIGV4dGVuc2lvbnMuYXBwZW5kKFsnSW1wb3J0JywgeydQcm9qZWN0JzogcHJvcHNfZmlsZX1dKQotICByZXR1cm4gW2V4dGVuc2lvbnNdCi0KLQotZGVmIF9HZXRNU0J1aWxkRXh0ZW5zaW9uVGFyZ2V0cyh0YXJnZXRzX2ZpbGVzX29mX3J1bGVzKToKLSAgdGFyZ2V0c19ub2RlID0gWydJbXBvcnRHcm91cCcsIHsnTGFiZWwnOiAnRXh0ZW5zaW9uVGFyZ2V0cyd9XQotICBmb3IgdGFyZ2V0c19maWxlIGluIHNvcnRlZCh0YXJnZXRzX2ZpbGVzX29mX3J1bGVzKToKLSAgICB0YXJnZXRzX25vZGUuYXBwZW5kKFsnSW1wb3J0JywgeydQcm9qZWN0JzogdGFyZ2V0c19maWxlfV0pCi0gIHJldHVybiBbdGFyZ2V0c19ub2RlXQotCi0KLWRlZiBfR2VuZXJhdGVBY3Rpb25zRm9yTVNCdWlsZChzcGVjLCBhY3Rpb25zX3RvX2FkZCk6Ci0gICIiIkFkZCBhY3Rpb25zIGFjY3VtdWxhdGVkIGludG8gYW4gYWN0aW9uc190b19hZGQsIG1lcmdpbmcgYXMgbmVlZGVkLgotCi0gIEFyZ3VtZW50czoKLSAgICBzcGVjOiB0aGUgdGFyZ2V0IHByb2plY3QgZGljdAotICAgIGFjdGlvbnNfdG9fYWRkOiBkaWN0aW9uYXJ5IGtleWVkIG9uIGlucHV0IG5hbWUsIHdoaWNoIG1hcHMgdG8gYSBsaXN0IG9mCi0gICAgICAgIGRpY3RzIGRlc2NyaWJpbmcgdGhlIGFjdGlvbnMgYXR0YWNoZWQgdG8gdGhhdCBpbnB1dCBmaWxlLgotCi0gIFJldHVybnM6Ci0gICAgQSBwYWlyIG9mIChhY3Rpb24gc3BlY2lmaWNhdGlvbiwgdGhlIHNvdXJjZXMgaGFuZGxlZCBieSB0aGlzIGFjdGlvbikuCi0gICIiIgotICBzb3VyY2VzX2hhbmRsZWRfYnlfYWN0aW9uID0gc2V0KCkKLSAgYWN0aW9uc19zcGVjID0gW10KLSAgZm9yIHByaW1hcnlfaW5wdXQsIGFjdGlvbnMgaW4gYWN0aW9uc190b19hZGQuaXRlcml0ZW1zKCk6Ci0gICAgaW5wdXRzID0gc2V0KCkKLSAgICBvdXRwdXRzID0gc2V0KCkKLSAgICBkZXNjcmlwdGlvbnMgPSBbXQotICAgIGNvbW1hbmRzID0gW10KLSAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6Ci0gICAgICBpbnB1dHMudXBkYXRlKHNldChhY3Rpb25bJ2lucHV0cyddKSkKLSAgICAgIG91dHB1dHMudXBkYXRlKHNldChhY3Rpb25bJ291dHB1dHMnXSkpCi0gICAgICBkZXNjcmlwdGlvbnMuYXBwZW5kKGFjdGlvblsnZGVzY3JpcHRpb24nXSkKLSAgICAgIGNtZCA9IGFjdGlvblsnY29tbWFuZCddCi0gICAgICAjIEZvciBtb3N0IGFjdGlvbnMsIGFkZCAnY2FsbCcgc28gdGhhdCBhY3Rpb25zIHRoYXQgaW52b2tlIGJhdGNoIGZpbGVzCi0gICAgICAjIHJldHVybiBhbmQgY29udGludWUgZXhlY3V0aW5nLiAgbXNidWlsZF91c2VfY2FsbCBwcm92aWRlcyBhIHdheSB0bwotICAgICAgIyBkaXNhYmxlIHRoaXMgYnV0IEkgaGF2ZSBub3Qgc2VlbiBhbnkgYWR2ZXJzZSBlZmZlY3QgZnJvbSBkb2luZyB0aGF0Ci0gICAgICAjIGZvciBldmVyeXRoaW5nLgotICAgICAgaWYgYWN0aW9uLmdldCgnbXNidWlsZF91c2VfY2FsbCcsIFRydWUpOgotICAgICAgICBjbWQgPSAnY2FsbCAnICsgY21kCi0gICAgICBjb21tYW5kcy5hcHBlbmQoY21kKQotICAgICMgQWRkIHRoZSBjdXN0b20gYnVpbGQgYWN0aW9uIGZvciBvbmUgaW5wdXQgZmlsZS4KLSAgICBkZXNjcmlwdGlvbiA9ICcsIGFuZCBhbHNvICcuam9pbihkZXNjcmlwdGlvbnMpCi0KLSAgICAjIFdlIGNhbid0IGpvaW4gdGhlIGNvbW1hbmRzIHNpbXBseSB3aXRoICYmIGJlY2F1c2UgdGhlIGNvbW1hbmQgbGluZSB3aWxsCi0gICAgIyBnZXQgdG9vIGxvbmcuIFNlZSBhbHNvIF9BZGRBY3Rpb25zOiBjeWd3aW4ncyBzZXR1cF9lbnYgbXVzdG4ndCBiZSBjYWxsZWQKLSAgICAjIGZvciBldmVyeSBpbnZvY2F0aW9uIG9yIHRoZSBjb21tYW5kIHRoYXQgc2V0cyB0aGUgUEFUSCB3aWxsIGdyb3cgdG9vCi0gICAgIyBsb25nLgotICAgIGNvbW1hbmQgPSAoCi0gICAgICAgICdcclxuaWYgJWVycm9ybGV2ZWwlIG5lcSAwIGV4aXQgL2IgJWVycm9ybGV2ZWwlXHJcbicuam9pbihjb21tYW5kcykpCi0gICAgX0FkZE1TQnVpbGRBY3Rpb24oc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5X2lucHV0LAotICAgICAgICAgICAgICAgICAgICAgIGlucHV0cywKLSAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLAotICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgc291cmNlc19oYW5kbGVkX2J5X2FjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zX3NwZWMpCi0gIHJldHVybiBhY3Rpb25zX3NwZWMsIHNvdXJjZXNfaGFuZGxlZF9ieV9hY3Rpb24KLQotCi1kZWYgX0FkZE1TQnVpbGRBY3Rpb24oc3BlYywgcHJpbWFyeV9pbnB1dCwgaW5wdXRzLCBvdXRwdXRzLCBjbWQsIGRlc2NyaXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXNfaGFuZGxlZF9ieV9hY3Rpb24sIGFjdGlvbnNfc3BlYyk6Ci0gIGNvbW1hbmQgPSBNU1ZTU2V0dGluZ3MuQ29udmVydFZDTWFjcm9zVG9NU0J1aWxkKGNtZCkKLSAgcHJpbWFyeV9pbnB1dCA9IF9GaXhQYXRoKHByaW1hcnlfaW5wdXQpCi0gIGlucHV0c19hcnJheSA9IF9GaXhQYXRocyhpbnB1dHMpCi0gIG91dHB1dHNfYXJyYXkgPSBfRml4UGF0aHMob3V0cHV0cykKLSAgYWRkaXRpb25hbF9pbnB1dHMgPSAnOycuam9pbihbaSBmb3IgaSBpbiBpbnB1dHNfYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAhPSBwcmltYXJ5X2lucHV0XSkKLSAgb3V0cHV0cyA9ICc7Jy5qb2luKG91dHB1dHNfYXJyYXkpCi0gIHNvdXJjZXNfaGFuZGxlZF9ieV9hY3Rpb24uYWRkKHByaW1hcnlfaW5wdXQpCi0gIGFjdGlvbl9zcGVjID0gWydDdXN0b21CdWlsZCcsIHsnSW5jbHVkZSc6IHByaW1hcnlfaW5wdXR9XQotICBhY3Rpb25fc3BlYy5leHRlbmQoCi0gICAgICAjIFRPRE8oamVhbmx1YykgJ0RvY3VtZW50JyBmb3IgYWxsIG9yIGp1c3QgaWYgYXNfc291cmNlcz8KLSAgICAgIFtbJ0ZpbGVUeXBlJywgJ0RvY3VtZW50J10sCi0gICAgICAgWydDb21tYW5kJywgY29tbWFuZF0sCi0gICAgICAgWydNZXNzYWdlJywgZGVzY3JpcHRpb25dLAotICAgICAgIFsnT3V0cHV0cycsIG91dHB1dHNdCi0gICAgICBdKQotICBpZiBhZGRpdGlvbmFsX2lucHV0czoKLSAgICBhY3Rpb25fc3BlYy5hcHBlbmQoWydBZGRpdGlvbmFsSW5wdXRzJywgYWRkaXRpb25hbF9pbnB1dHNdKQotICBhY3Rpb25zX3NwZWMuYXBwZW5kKGFjdGlvbl9zcGVjKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbXN2c190ZXN0LnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbXN2c190ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMGIwMjFkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL21zdnNfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiIgVW5pdCB0ZXN0cyBmb3IgdGhlIG1zdnMucHkgZmlsZS4gIiIiCi0KLWltcG9ydCBneXAuZ2VuZXJhdG9yLm1zdnMgYXMgbXN2cwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgU3RyaW5nSU8KLQotCi1jbGFzcyBUZXN0U2VxdWVuY2VGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gIGRlZiBzZXRVcChzZWxmKToKLSAgICBzZWxmLnN0ZGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLQotICBkZWYgdGVzdF9HZXRMaWJyYXJpZXMoc2VsZik6Ci0gICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgIG1zdnMuX0dldExpYnJhcmllcyh7fSksCi0gICAgICBbXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgbXN2cy5fR2V0TGlicmFyaWVzKHsnbGlicmFyaWVzJzogW119KSwKLSAgICAgIFtdKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBtc3ZzLl9HZXRMaWJyYXJpZXMoeydvdGhlcic6J2ZvbycsICdsaWJyYXJpZXMnOiBbJ2EubGliJ119KSwKLSAgICAgIFsnYS5saWInXSkKLSAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgbXN2cy5fR2V0TGlicmFyaWVzKHsnbGlicmFyaWVzJzogWyctbGEnXX0pLAotICAgICAgWydhLmxpYiddKQotICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICBtc3ZzLl9HZXRMaWJyYXJpZXMoeydsaWJyYXJpZXMnOiBbJ2EubGliJywgJ2IubGliJywgJ2MubGliJywgJy1sYi5saWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWxiLmxpYicsICdkLmxpYicsICdhLmxpYiddfSksCi0gICAgICBbJ2MubGliJywgJ2IubGliJywgJ2QubGliJywgJ2EubGliJ10pCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbmluamEucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9uaW5qYS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODU0ODBmZS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9uaW5qYS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4MjIgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMgotIyBDb3B5cmlnaHQgKGMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1pbXBvcnQgY29weQotaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcGlwZXMKLWltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHJlCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi1mcm9tIGNvYmFsdC5idWlsZCBpbXBvcnQgY29uZmlnCi0KLWltcG9ydCBneXAKLWltcG9ydCBneXAuY29tbW9uCi0KLSMgVE9ETzogVGhlc2Ugc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggY2FsbHMgdG8gdGhlIGFic3RyYWN0IHRvb2wgY2hhaW4sIHdoZW4gaXQKLSMgaXMgaW1wbGVtZW50ZWQgb24gYWxsIHN1cHBvcnRlZCBwbGF0Zm9ybXMuCi1mcm9tIGd5cC5tc3ZzX2VtdWxhdGlvbiBpbXBvcnQgRW5jb2RlUnNwRmlsZUxpc3QKLWZyb20gZ3lwLm1zdnNfZW11bGF0aW9uIGltcG9ydCBHZW5lcmF0ZUVudmlyb25tZW50RmlsZXMKLWZyb20gZ3lwLm1zdnNfZW11bGF0aW9uIGltcG9ydCBNc3ZzU2V0dGluZ3MKLWltcG9ydCBneXAuTVNWU1V0aWwgYXMgTVNWU1V0aWwKLWltcG9ydCBneXAueGNvZGVfZW11bGF0aW9uCi0KLWltcG9ydCBneXAubmluamFfc3ludGF4IGFzIG5pbmphX3N5bnRheAotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6Ci0gIGltcG9ydCBjeWdwYXRoCi0KLWZyb20gc3RhcmJvYXJkLnRvb2xzLnRvb2xjaGFpbiBpbXBvcnQgYWJzdHJhY3QKLQotZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzID0gewotICAgICdFWEVDVVRBQkxFX1BSRUZJWCc6ICcnLAotICAgICdFWEVDVVRBQkxFX1NVRkZJWCc6ICcnLAotICAgICdTVEFUSUNfTElCX1BSRUZJWCc6ICdsaWInLAotICAgICdTVEFUSUNfTElCX1NVRkZJWCc6ICcuYScsCi0gICAgJ1NIQVJFRF9MSUJfUFJFRklYJzogJ2xpYicsCi0KLSAgICAjIEd5cCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHRvIGJlIGV4cGFuZGFibGUgYnkgdGhlIGJ1aWxkCi0gICAgIyBzeXN0ZW0gdG8gdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9ucy4gIE5pbmphIHByZWZlcnMgcGF0aHMgdG8gYmUKLSAgICAjIGtub3duIGF0IGd5cCB0aW1lLiAgVG8gcmVzb2x2ZSB0aGlzLCBpbnRyb2R1Y2Ugc3BlY2lhbAotICAgICMgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggJCEgYW5kICR8ICh3aGljaCBiZWdpbiB3aXRoIGEgJCBzbyBneXAga25vd3MgaXQKLSAgICAjIHNob3VsZCBiZSB0cmVhdGVkIHNwZWNpYWxseSwgYnV0IGlzIG90aGVyd2lzZSBhbiBpbnZhbGlkCi0gICAgIyBuaW5qYS9zaGVsbCB2YXJpYWJsZSkgdGhhdCBhcmUgcGFzc2VkIHRvIGd5cCBoZXJlIGJ1dCBleHBhbmRlZAotICAgICMgYmVmb3JlIHdyaXRpbmcgb3V0IGludG8gdGhlIHRhcmdldCAubmluamEgZmlsZXM7IHNlZQotICAgICMgRXhwYW5kU3BlY2lhbC4KLSAgICAjICQhIGlzIHVzZWQgZm9yIHZhcmlhYmxlcyB0aGF0IHJlcHJlc2VudCBhIHBhdGggYW5kIHRoYXQgY2FuIG9ubHkgYXBwZWFyIGF0Ci0gICAgIyB0aGUgc3RhcnQgb2YgYSBzdHJpbmcsIHdoaWxlICR8IGlzIHVzZWQgZm9yIHZhcmlhYmxlcyB0aGF0IGNhbiBhcHBlYXIKLSAgICAjIGFueXdoZXJlIGluIGEgc3RyaW5nLgotICAgICdJTlRFUk1FRElBVEVfRElSJzogJyQhSU5URVJNRURJQVRFX0RJUicsCi0gICAgJ1NIQVJFRF9JTlRFUk1FRElBVEVfRElSJzogJyQhUFJPRFVDVF9ESVIvZ2VuJywKLSAgICAnUFJPRFVDVF9ESVInOiAnJCFQUk9EVUNUX0RJUicsCi0gICAgJ0NPTkZJR1VSQVRJT05fTkFNRSc6ICckfENPTkZJR1VSQVRJT05fTkFNRScsCi0KLSAgICAjIFNwZWNpYWwgdmFyaWFibGVzIHRoYXQgbWF5IGJlIHVzZWQgYnkgZ3lwICdydWxlJyB0YXJnZXRzLgotICAgICMgV2UgZ2VuZXJhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIHZhcmlhYmxlcyBvbiB0aGUgZmx5IHdoZW4gcHJvY2Vzc2luZyBhCi0gICAgIyBydWxlLgotICAgICdSVUxFX0lOUFVUX1JPT1QnOiAnJHtyb290fScsCi0gICAgJ1JVTEVfSU5QVVRfRElSTkFNRSc6ICcke2Rpcm5hbWV9JywKLSAgICAnUlVMRV9JTlBVVF9QQVRIJzogJyR7c291cmNlfScsCi0gICAgJ1JVTEVfSU5QVVRfRVhUJzogJyR7ZXh0fScsCi0gICAgJ1JVTEVfSU5QVVRfTkFNRSc6ICcke25hbWV9JywKLX0KLQotIyBQbGFjYXRlcyBweWxpbnQuCi1nZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzID0gW10KLWdlbmVyYXRvcl9hZGRpdGlvbmFsX3BhdGhfc2VjdGlvbnMgPSBbXQotZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzID0gW10KLQotZ2VuZXJhdG9yX3N1cHBvcnRzX211bHRpcGxlX3Rvb2xzZXRzID0gVHJ1ZQotCi1pc19saW51eCA9IHBsYXRmb3JtLnN5c3RlbSgpID09ICdMaW51eCcKLWlzX3dpbmRvd3MgPSBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnV2luZG93cycKLQotbWljcm9zb2Z0X2ZsYXZvcnMgPSBbCi0gICAgJ3dpbicsCi0gICAgJ3dpbi13aW4zMicsCi0gICAgJ3dpbi13aW4zMi1saWInLAotXQotc29ueV9mbGF2b3JzID0gW10KLW5pbnRlbmRvX2ZsYXZvcnMgPSBbXQotCi10cnk6Ci0gIGltcG9ydCBwcml2YXRlX25pbmphX2ZsYXZvcnMKLSAgbWljcm9zb2Z0X2ZsYXZvcnMgKz0gcHJpdmF0ZV9uaW5qYV9mbGF2b3JzLlByaXZhdGVNaWNyb3NvZnRGbGF2b3JzKCkKLSAgc29ueV9mbGF2b3JzICs9IHByaXZhdGVfbmluamFfZmxhdm9ycy5Qcml2YXRlU29ueUZsYXZvcnMoKQotICBuaW50ZW5kb19mbGF2b3JzICs9IHByaXZhdGVfbmluamFfZmxhdm9ycy5Qcml2YXRlTmludGVuZG9GbGF2b3JzKCkKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgcGFzcwotCi13aW5kb3dzX2hvc3RfZmxhdm9ycyA9IG1pY3Jvc29mdF9mbGF2b3JzICsgc29ueV9mbGF2b3JzICsgbmludGVuZG9fZmxhdm9ycwotCi0KLWRlZiBHZXRUb29sY2hhaW5Pck5vbmUoZmxhdm9yKToKLSAgcmV0dXJuIGNvbmZpZy5HZXRQbGF0Zm9ybUNvbmZpZyhmbGF2b3IpLkdldFRvb2xjaGFpbigpCi0KLQotZGVmIEdldFRhcmdldFRvb2xjaGFpbihmbGF2b3IsICoqa3dhcmdzKToKLSAgcmV0dXJuIGNvbmZpZy5HZXRQbGF0Zm9ybUNvbmZpZyhmbGF2b3IpLkdldFRhcmdldFRvb2xjaGFpbigqKmt3YXJncykKLQotCi1kZWYgR2V0SG9zdFRvb2xjaGFpbihmbGF2b3IsICoqa3dhcmdzKToKLSAgcmV0dXJuIGNvbmZpZy5HZXRQbGF0Zm9ybUNvbmZpZyhmbGF2b3IpLkdldEhvc3RUb29sY2hhaW4oKiprd2FyZ3MpCi0KLQotZGVmIEZpbmRGaXJzdEluc3RhbmNlT2YodHlwZSwgaW5zdGFuY2VzKToKLSAgdHJ5OgotICAgIHJldHVybiAoaW5zdGFuY2UgZm9yIGluc3RhbmNlIGluIGluc3RhbmNlcwotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpbnN0YW5jZSwgdHlwZSkpLm5leHQoKQotICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICByZXR1cm4gTm9uZQotCi0KLWRlZiBHZXRTaGVsbChmbGF2b3IpOgotICBzaGVsbCA9IEZpbmRGaXJzdEluc3RhbmNlT2YoYWJzdHJhY3QuU2hlbGwsIEdldEhvc3RUb29sY2hhaW4oZmxhdm9yKSkKLSAgYXNzZXJ0IHNoZWxsLCAnVGhlIGhvc3QgdG9vbGNoYWluIG11c3QgcHJvdmlkZSBhIHNoZWxsLicKLSAgcmV0dXJuIHNoZWxsCi0KLQotZGVmIEdldE5pbmphUnVsZU5hbWUodG9vbCwgdG9vbHNldCk6Ci0gIGlmIHRvb2wuSXNQbGF0Zm9ybUFnbm9zdGljKCkgb3IgdG9vbHNldCA9PSAndGFyZ2V0JzoKLSAgICByZXR1cm4gdG9vbC5HZXRSdWxlTmFtZSgpCi0gIHJldHVybiAnezB9X3sxfScuZm9ybWF0KHRvb2wuR2V0UnVsZU5hbWUoKSwgdG9vbHNldCkKLQotCi1kZWYgR2V0Q29uZmlnRmxhZ3MoY29uZmlnLCB0b29sc2V0LCBrZXl3b3JkKToKLSAgZmxhZ3MgPSBjb25maWcuZ2V0KGtleXdvcmQsIFtdKQotICBpZiB0b29sc2V0ID09ICdob3N0JzoKLSAgICBmbGFncyA9IGNvbmZpZy5nZXQoJ3swfV9ob3N0Jy5mb3JtYXQoa2V5d29yZCksIGZsYWdzKQotICByZXR1cm4gW2ZsYWcucmVwbGFjZSgnJCcsICckJCcpIGZvciBmbGFnIGluIGZsYWdzXQotCi0KLWRlZiBTdHJpcFByZWZpeChhcmcsIHByZWZpeCk6Ci0gIGlmIGFyZy5zdGFydHN3aXRoKHByZWZpeCk6Ci0gICAgcmV0dXJuIGFyZ1tsZW4ocHJlZml4KTpdCi0gIHJldHVybiBhcmcKLQotCi1kZWYgR2V0R2VuZXJhdG9yVmFyaWFibGVzKGZsYXZvcik6Ci0gIGdlbmVyYXRvcl92YXJpYWJsZXMgPSBjb3B5LmNvcHkoZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzKQotICBpZiBHZXRUb29sY2hhaW5Pck5vbmUoZmxhdm9yKToKLSAgICBHZXRUb29sY2hhaW5Pck5vbmUoZmxhdm9yKS5TZXRBZGRpdGlvbmFsR3lwVmFyaWFibGVzKGdlbmVyYXRvcl92YXJpYWJsZXMpCi0gIGVsc2U6Ci0gICAgQ2FsY3VsYXRlVmFyaWFibGVzKGdlbmVyYXRvcl92YXJpYWJsZXMsIHsnZmxhdm9yJzogZmxhdm9yfSkKLSAgcmV0dXJuIGdlbmVyYXRvcl92YXJpYWJsZXMKLQotCi1kZWYgUXVvdGVTaGVsbEFyZ3VtZW50KGFyZywgZmxhdm9yKToKLSAgIiIiUXVvdGUgYSBzdHJpbmcgc3VjaCB0aGF0IGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQKLSAgYnkgdGhlIHNoZWxsLiIiIgotICAjIFJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gZW51bWVyYXRlIHRoZSBiYWQgc2hlbGwgY2hhcmFjdGVycywganVzdAotICAjIHdoaXRlbGlzdCBjb21tb24gT0sgb25lcyBhbmQgcXVvdGUgYW55dGhpbmcgZWxzZS4KLSAgaWYgcmUubWF0Y2gocideW2EtekEtWjAtOV89LlxcLy1dKyQnLCBhcmcpOgotICAgIHJldHVybiBhcmcgICMgTm8gcXVvdGluZyBuZWNlc3NhcnkuCi0gIGlmIEdldFRvb2xjaGFpbk9yTm9uZShmbGF2b3IpOgotICAgIHJldHVybiBHZXRUb29sY2hhaW5Pck5vbmUoZmxhdm9yKS5RdW90ZUZvclJzcEZpbGUoYXJnKQotICBlbGlmIGZsYXZvciBpbiBzb255X2ZsYXZvcnMgb3IgZmxhdm9yIGluIG5pbnRlbmRvX2ZsYXZvcnM6Ci0gICAgIyBFc2NhcGUgZG91YmxlIHF1b3Rlcy4KLSAgICByZXR1cm4gJyInICsgYXJnLnJlcGxhY2UoJ1wiJywgJ1xcXCInKSArICciJwotICByZXR1cm4gIiciICsgYXJnLnJlcGxhY2UoIiciLCAiJyIgKyAnIlwnIicgKyAiJyIpICsgIiciCi0KLQotZGVmIERlZmluZShkLCBmbGF2b3IpOgotICAiIiJUYWtlcyBhIHByZXByb2Nlc3NvciBkZWZpbmUgYW5kIHJldHVybnMgYSAtRCBwYXJhbWV0ZXIgdGhhdCdzIG5pbmphLSBhbmQKLQotICBzaGVsbC1lc2NhcGVkLgotICAiIiIKLQotICByZXR1cm4gUXVvdGVTaGVsbEFyZ3VtZW50KG5pbmphX3N5bnRheC5lc2NhcGUoJy1EJyArIGQpLCBmbGF2b3IpCi0KLQotZGVmIEludmVydFJlbGF0aXZlUGF0aChwYXRoKToKLSAgIiIiR2l2ZW4gYSByZWxhdGl2ZSBwYXRoIGxpa2UgZm9vL2JhciwgcmV0dXJuIHRoZSBpbnZlcnNlIHJlbGF0aXZlIHBhdGg6Ci0KLSAgdGhlIHBhdGggZnJvbSB0aGUgcmVsYXRpdmUgcGF0aCBiYWNrIHRvIHRoZSBvcmlnaW4gZGlyLgotCi0gIEUuZy4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4ocGF0aCwgSW52ZXJ0UmVsYXRpdmVQYXRoKHBhdGgpKSkKLSAgc2hvdWxkIGFsd2F5cyBwcm9kdWNlIHRoZSBlbXB0eSBzdHJpbmcuCi0gICIiIgotCi0gIGlmIG5vdCBwYXRoOgotICAgIHJldHVybiBwYXRoCi0gICMgT25seSBuZWVkIHRvIGhhbmRsZSByZWxhdGl2ZSBwYXRocyBpbnRvIHN1YmRpcmVjdG9yaWVzIGZvciBub3cuCi0gIGFzc2VydCAnLi4nIG5vdCBpbiBwYXRoLCBwYXRoCi0gIGRlcHRoID0gbGVuKHBhdGguc3BsaXQob3MucGF0aC5zZXApKQotICByZXR1cm4gb3MucGF0aC5zZXAuam9pbihbJy4uJ10gKiBkZXB0aCkKLQotCi1jbGFzcyBUYXJnZXQ6Ci0gICIiIlRhcmdldCByZXByZXNlbnRzIHRoZSBwYXRocyB1c2VkIHdpdGhpbiBhIHNpbmdsZSBneXAgdGFyZ2V0LgotCi0gIENvbmNlcHR1YWxseSwgYnVpbGRpbmcgYSBzaW5nbGUgdGFyZ2V0IEEgaXMgYSBzZXJpZXMgb2Ygc3RlcHM6Ci0KLSAgMSkgYWN0aW9ucy9ydWxlcy9jb3BpZXMgIGdlbmVyYXRlcyBzb3VyY2UvcmVzb3VyY2VzL2V0Yy4KLSAgMikgY29tcGlsZXMgICAgICAgICAgICAgIGdlbmVyYXRlcyAubyBmaWxlcwotICAzKSBsaW5rICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVzIGEgYmluYXJ5IChsaWJyYXJ5L2V4ZWN1dGFibGUpCi0gIDQpIGJ1bmRsZSAgICAgICAgICAgICAgICBtZXJnZXMgdGhlIGFib3ZlIGluIGEgbWFjIGJ1bmRsZQotCi0gIChBbnkgb2YgdGhlc2Ugc3RlcHMgY2FuIGJlIG9wdGlvbmFsLikKLQotICBGcm9tIGEgYnVpbGQgb3JkZXJpbmcgcGVyc3BlY3RpdmUsIGEgZGVwZW5kZW50IHRhcmdldCBCIGNvdWxkIGp1c3QKLSAgZGVwZW5kIG9uIHRoZSBsYXN0IG91dHB1dCBvZiB0aGlzIHNlcmllcyBvZiBzdGVwcy4KLQotICBCdXQgc29tZSBkZXBlbmRlbnQgY29tbWFuZHMgc29tZXRpbWVzIG5lZWQgdG8gcmVhY2ggaW5zaWRlIHRoZSBib3guCi0gIEZvciBleGFtcGxlLCB3aGVuIGxpbmtpbmcgQiBpdCBuZWVkcyB0byBnZXQgdGhlIHBhdGggdG8gdGhlIHN0YXRpYwotICBsaWJyYXJ5IGdlbmVyYXRlZCBieSBBLgotCi0gIFRoaXMgb2JqZWN0IHN0b3JlcyB0aG9zZSBwYXRocy4gIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgbWVtYmVyCi0gIHZhcmlhYmxlcyBvbmx5IHN0b3JlIGNvbmNyZXRlIHBhdGhzIHRvIHNpbmdsZSBmaWxlcywgd2hpbGUgbWV0aG9kcwotICBjb21wdXRlIGRlcml2ZWQgdmFsdWVzIGxpa2UgInRoZSBsYXN0IG91dHB1dCBvZiB0aGUgdGFyZ2V0Ii4KLSAgIiIiCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUpOgotICAgICMgR3lwIHR5cGUgKCJzdGF0aWNfbGlicmFyeSIsIGV0Yy4pIG9mIHRoaXMgdGFyZ2V0LgotICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAjIEZpbGUgcmVwcmVzZW50aW5nIHdoZXRoZXIgYW55IGlucHV0IGRlcGVuZGVuY2llcyBuZWNlc3NhcnkgZm9yCi0gICAgIyBkZXBlbmRlbnQgYWN0aW9ucyBoYXZlIGNvbXBsZXRlZC4KLSAgICBzZWxmLnByZWFjdGlvbl9zdGFtcCA9IE5vbmUKLSAgICAjIEZpbGUgcmVwcmVzZW50aW5nIHdoZXRoZXIgYW55IGlucHV0IGRlcGVuZGVuY2llcyBuZWNlc3NhcnkgZm9yCi0gICAgIyBkZXBlbmRlbnQgY29tcGlsZXMgaGF2ZSBjb21wbGV0ZWQuCi0gICAgc2VsZi5wcmVjb21waWxlX3N0YW1wID0gTm9uZQotICAgICMgRmlsZSByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gb2YgYWN0aW9ucy9ydWxlcy9jb3BpZXMsIGlmIGFueS4KLSAgICBzZWxmLmFjdGlvbnNfc3RhbXAgPSBOb25lCi0gICAgIyBQYXRoIHRvIHRoZSBvdXRwdXQgb2YgdGhlIGxpbmsgc3RlcCwgaWYgYW55LgotICAgIHNlbGYuYmluYXJ5ID0gTm9uZQotICAgICMgUGF0aCB0byB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGNvbXBsZXRpb24gb2YgYnVpbGRpbmcgdGhlIGJ1bmRsZSwKLSAgICAjIGlmIGFueS4KLSAgICBzZWxmLmJ1bmRsZSA9IE5vbmUKLSAgICAjIE9uIFdpbmRvd3MsIGluY3JlbWVudGFsIGxpbmtpbmcgcmVxdWlyZXMgbGlua2luZyBhZ2FpbnN0IGFsbCB0aGUgLm9ianMKLSAgICAjIHRoYXQgY29tcG9zZSBhIC5saWIgKHJhdGhlciB0aGFuIHRoZSAubGliIGl0c2VsZikuIFRoYXQgbGlzdCBpcyBzdG9yZWQKLSAgICAjIGhlcmUuCi0gICAgc2VsZi5jb21wb25lbnRfb2JqcyA9IE5vbmUKLSAgICAjIFdpbmRvd3Mgb25seS4gVGhlIGltcG9ydCAubGliIGlzIHRoZSBvdXRwdXQgb2YgYSBidWlsZCBzdGVwLCBidXQKLSAgICAjIGJlY2F1c2UgZGVwZW5kZW50cyBvbmx5IGxpbmsgYWdhaW5zdCB0aGUgbGliIChub3QgYm90aCB0aGUgbGliIGFuZCB0aGUKLSAgICAjIGRsbCkgd2Uga2VlcCB0cmFjayBvZiB0aGUgaW1wb3J0IGxpYnJhcnkgaGVyZS4KLSAgICBzZWxmLmltcG9ydF9saWIgPSBOb25lCi0KLSAgZGVmIExpbmthYmxlKHNlbGYpOgotICAgICIiIlJldHVybiB0cnVlIGlmIHRoaXMgaXMgYSB0YXJnZXQgdGhhdCBjYW4gYmUgbGlua2VkIGFnYWluc3QuIiIiCi0gICAgcmV0dXJuIHNlbGYudHlwZSBpbiAoJ3N0YXRpY19saWJyYXJ5JywgJ3NoYXJlZF9saWJyYXJ5JykKLQotICBkZWYgUHJlQWN0aW9uSW5wdXQoc2VsZiwgZmxhdm9yKToKLSAgICAiIiJSZXR1cm4gdGhlIHBhdGgsIGlmIGFueSwgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBhIGRlcGVuZGVuY3kgb2YKLQotICAgIGFueSBkZXBlbmRlbnQgYWN0aW9uIHN0ZXAuCi0gICAgIiIiCi0gICAgcmV0dXJuIHNlbGYuRmluYWxPdXRwdXQoKSBvciBzZWxmLnByZWFjdGlvbl9zdGFtcAotCi0gIGRlZiBQcmVDb21waWxlSW5wdXQoc2VsZik6Ci0gICAgIiIiUmV0dXJuIHRoZSBwYXRoLCBpZiBhbnksIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYSBkZXBlbmRlbmN5IG9mCi0KLSAgICBhbnkgZGVwZW5kZW50IGNvbXBpbGUgc3RlcC4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5hY3Rpb25zX3N0YW1wIG9yIHNlbGYucHJlY29tcGlsZV9zdGFtcAotCi0gIGRlZiBGaW5hbE91dHB1dChzZWxmKToKLSAgICAiIiJSZXR1cm4gdGhlIGxhc3Qgb3V0cHV0IG9mIHRoZSB0YXJnZXQsIHdoaWNoIGRlcGVuZHMgb24gYWxsIHByaW9yCi0KLSAgICBzdGVwcy4KLSAgICAiIiIKLSAgICByZXR1cm4gc2VsZi5idW5kbGUgb3Igc2VsZi5iaW5hcnkgb3Igc2VsZi5hY3Rpb25zX3N0YW1wCi0KLQotIyBBIHNtYWxsIGRpc2NvdXJzZSBvbiBwYXRocyBhcyB1c2VkIHdpdGhpbiB0aGUgTmluamEgYnVpbGQ6Ci0jIEFsbCBmaWxlcyB3ZSBwcm9kdWNlIChib3RoIGF0IGd5cCBhbmQgYXQgYnVpbGQgdGltZSkgYXBwZWFyIGluIHRoZQotIyBidWlsZCBkaXJlY3RvcnkgKGUuZy4gb3V0L0RlYnVnKS4KLSMKLSMgUGF0aHMgd2l0aGluIGEgZ2l2ZW4gLmd5cCBmaWxlIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQotIyBjb250YWluaW5nIHRoZSAuZ3lwIGZpbGUuICBDYWxsIHRoZXNlICJneXAgcGF0aHMiLiAgVGhpcyBpbmNsdWRlcwotIyBzb3VyY2VzIGFzIHdlbGwgYXMgdGhlIHN0YXJ0aW5nIGRpcmVjdG9yeSBhIGdpdmVuIGd5cCBydWxlL2FjdGlvbgotIyBleHBlY3RzIHRvIGJlIHJ1biBmcm9tLiAgV2UgY2FsbCB0aGUgcGF0aCBmcm9tIHRoZSBzb3VyY2Ugcm9vdCB0bwotIyB0aGUgZ3lwIGZpbGUgdGhlICJiYXNlIGRpcmVjdG9yeSIgd2l0aGluIHRoZSBwZXItLmd5cC1maWxlCi0jIE5pbmphV3JpdGVyIGNvZGUuCi0jCi0jIEFsbCBwYXRocyBhcyB3cml0dGVuIGludG8gdGhlIC5uaW5qYSBmaWxlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJ1aWxkCi0jIGRpcmVjdG9yeS4gIENhbGwgdGhlc2UgcGF0aHMgIm5pbmphIHBhdGhzIi4KLSMKLSMgV2UgdHJhbnNsYXRlIGJldHdlZW4gdGhlc2UgdHdvIG5vdGlvbnMgb2YgcGF0aHMgd2l0aCB0d28gaGVscGVyCi0jIGZ1bmN0aW9uczoKLSMKLSMgLSBHeXBQYXRoVG9OaW5qYSB0cmFuc2xhdGVzIGEgZ3lwIHBhdGggKGkuZS4gcmVsYXRpdmUgdG8gdGhlIC5neXAgZmlsZSkKLSMgICBpbnRvIHRoZSBlcXVpdmFsZW50IG5pbmphIHBhdGguCi0jCi0jIC0gR3lwUGF0aFRvVW5pcXVlT3V0cHV0IHRyYW5zbGF0ZXMgYSBneXAgcGF0aCBpbnRvIGEgbmluamEgcGF0aCB0byB3cml0ZQotIyAgIGFuIG91dHB1dCBmaWxlOyB0aGUgcmVzdWx0IGNhbiBiZSBuYW1lc3BhY2VkIHN1Y2ggdGhhdCBpdCBpcyB1bmlxdWUKLSMgICB0byB0aGUgaW5wdXQgZmlsZSBuYW1lIGFzIHdlbGwgYXMgdGhlIG91dHB1dCB0YXJnZXQgbmFtZS4KLQotCi1jbGFzcyBOaW5qYVdyaXRlcjoKLQotICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgIHF1YWxpZmllZF90YXJnZXQsCi0gICAgICAgICAgICAgICB0YXJnZXRfb3V0cHV0cywKLSAgICAgICAgICAgICAgIGJhc2VfZGlyLAotICAgICAgICAgICAgICAgYnVpbGRfZGlyLAotICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGUsCi0gICAgICAgICAgICAgICBmbGF2b3IsCi0gICAgICAgICAgICAgICBjYXNlX3NlbnNpdGl2ZV9maWxlc3lzdGVtLAotICAgICAgICAgICAgICAgYWJzX2J1aWxkX2Rpcj1Ob25lKToKLSAgICAiIiJiYXNlX2RpcjogcGF0aCBmcm9tIHNvdXJjZSByb290IHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgZ3lwIGZpbGUsCi0KLSAgICAgICAgICAgICAgYnkgZ3lwIHNlbWFudGljcywgYWxsIGlucHV0IHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGlzCi0gICAgYnVpbGRfZGlyOiBwYXRoIGZyb20gc291cmNlIHJvb3QgdG8gYnVpbGQgb3V0cHV0Ci0gICAgYWJzX2J1aWxkX2RpcjogYWJzb2x1dGUgcGF0aCB0byB0aGUgYnVpbGQgZGlyZWN0b3J5Ci0gICAgIiIiCi0gICAgc2VsZi5jYXNlX3NlbnNpdGl2ZV9maWxlc3lzdGVtID0gY2FzZV9zZW5zaXRpdmVfZmlsZXN5c3RlbQotICAgIHNlbGYucXVhbGlmaWVkX3RhcmdldCA9IHF1YWxpZmllZF90YXJnZXQKLSAgICBzZWxmLnRhcmdldF9vdXRwdXRzID0gdGFyZ2V0X291dHB1dHMKLSAgICBzZWxmLmJhc2VfZGlyID0gYmFzZV9kaXIKLSAgICBzZWxmLmJ1aWxkX2RpciA9IGJ1aWxkX2RpcgotICAgIHNlbGYuYWJzX2J1aWxkX2RpciA9IGFic19idWlsZF9kaXIKLSAgICBzZWxmLm5pbmphID0gbmluamFfc3ludGF4LldyaXRlcihvdXRwdXRfZmlsZSkKLSAgICBzZWxmLmZsYXZvciA9IGZsYXZvcgotICAgIHNlbGYucGF0aF9tb2R1bGUgPSBvcy5wYXRoCi0KLSAgICBzZWxmLmFic19idWlsZF9kaXIgPSBhYnNfYnVpbGRfZGlyCi0gICAgc2VsZi5vYmpfZXh0ID0gJy5vYmonIGlmIGZsYXZvciA9PSAnd2luJyBlbHNlICcubycKLSAgICBpZiBmbGF2b3IgaW4gd2luZG93c19ob3N0X2ZsYXZvcnM6Ci0gICAgICAjIFNlZSBkb2NzdHJpbmcgb2YgbXN2c19lbXVsYXRpb24uR2VuZXJhdGVFbnZpcm9ubWVudEZpbGVzKCkuCi0gICAgICBzZWxmLndpbl9lbnYgPSB7fQotICAgICAgZm9yIGFyY2ggaW4gKCd4ODYnLCAneDY0Jyk6Ci0gICAgICAgIHNlbGYud2luX2VudlthcmNoXSA9ICdlbnZpcm9ubWVudC4nICsgYXJjaAotCi0gICAgIyBSZWxhdGl2ZSBwYXRoIGZyb20gYnVpbGQgb3V0cHV0IGRpciB0byBiYXNlIGRpci4KLSAgICBzZWxmLmJ1aWxkX3RvX2Jhc2UgPSBvcy5wYXRoLmpvaW4oSW52ZXJ0UmVsYXRpdmVQYXRoKGJ1aWxkX2RpciksIGJhc2VfZGlyKQotICAgICMgUmVsYXRpdmUgcGF0aCBmcm9tIGJhc2UgZGlyIHRvIGJ1aWxkIGRpci4KLSAgICBzZWxmLmJhc2VfdG9fYnVpbGQgPSBvcy5wYXRoLmpvaW4oSW52ZXJ0UmVsYXRpdmVQYXRoKGJhc2VfZGlyKSwgYnVpbGRfZGlyKQotCi0gIGRlZiBFeHBhbmRTcGVjaWFsKHNlbGYsIHBhdGgsIHByb2R1Y3RfZGlyPU5vbmUpOgotICAgICIiIkV4cGFuZCBzcGVjaWFscyBsaWtlICQhUFJPRFVDVF9ESVIgaW4gfHBhdGh8LgotCi0gICAgSWYgfHByb2R1Y3RfZGlyfCBpcyBOb25lLCBhc3N1bWVzIHRoZSBjd2QgaXMgYWxyZWFkeSB0aGUgcHJvZHVjdAotICAgIGRpci4gIE90aGVyd2lzZSwgfHByb2R1Y3RfZGlyfCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcHJvZHVjdAotICAgIGRpci4KLSAgICAiIiIKLQotICAgIFBST0RVQ1RfRElSID0gJyQhUFJPRFVDVF9ESVInCi0gICAgaWYgUFJPRFVDVF9ESVIgaW4gcGF0aDoKLSAgICAgIGlmIHByb2R1Y3RfZGlyOgotICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKFBST0RVQ1RfRElSLCBwcm9kdWN0X2RpcikKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoUFJPRFVDVF9ESVIgKyAnLycsICcnKQotICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKFBST0RVQ1RfRElSICsgJ1xcJywgJycpCi0gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoUFJPRFVDVF9ESVIsICcuJykKLQotICAgIElOVEVSTUVESUFURV9ESVIgPSAnJCFJTlRFUk1FRElBVEVfRElSJwotICAgIGlmIElOVEVSTUVESUFURV9ESVIgaW4gcGF0aDoKLSAgICAgIGludF9kaXIgPSBzZWxmLkd5cFBhdGhUb1VuaXF1ZU91dHB1dCgnZ2VuJykKLSAgICAgICMgR3lwUGF0aFRvVW5pcXVlT3V0cHV0IGdlbmVyYXRlcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2R1Y3QgZGlyLAotICAgICAgIyBzbyBpbnNlcnQgcHJvZHVjdF9kaXIgaW4gZnJvbnQgaWYgaXQgaXMgcHJvdmlkZWQuCi0gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKElOVEVSTUVESUFURV9ESVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwcm9kdWN0X2RpciBvciAnJywgaW50X2RpcikpCi0KLSAgICBDT05GSUdVUkFUSU9OX05BTUUgPSAnJHxDT05GSUdVUkFUSU9OX05BTUUnCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZShDT05GSUdVUkFUSU9OX05BTUUsIHNlbGYuY29uZmlnX25hbWUpCi0KLSAgICByZXR1cm4gcGF0aAotCi0gIGRlZiBFeHBhbmRSdWxlVmFyaWFibGVzKHNlbGYsIHBhdGgsIHJvb3QsIGRpcm5hbWUsIHNvdXJjZSwgZXh0LCBuYW1lKToKLSAgICBpZiBzZWxmLmZsYXZvciA9PSAnd2luJzoKLSAgICAgIHBhdGggPSBHZXRUb29sY2hhaW5Pck5vbmUoCi0gICAgICAgICAgc2VsZi5mbGF2b3IpLkdldENvbXBpbGVyU2V0dGluZ3MoKS5Db252ZXJ0VlNNYWNyb3MoCi0gICAgICAgICAgICAgIHBhdGgsIGNvbmZpZz1zZWxmLmNvbmZpZ19uYW1lKQotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydSVUxFX0lOUFVUX1JPT1QnXSwgcm9vdCkKLSAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snUlVMRV9JTlBVVF9ESVJOQU1FJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXJuYW1lKQotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydSVUxFX0lOUFVUX1BBVEgnXSwgc291cmNlKQotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydSVUxFX0lOUFVUX0VYVCddLCBleHQpCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZShnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1JVTEVfSU5QVVRfTkFNRSddLCBuYW1lKQotICAgIHJldHVybiBwYXRoCi0KLSAgZGVmIEd5cFBhdGhDYXNlQ29ycmVjdGlvbihzZWxmLCBwYXRoKToKLSAgICAjIE5pbmphJ3MgZGVwZmlsZSBoYW5kbGluZyBnZXRzIGNvbmZ1c2VkIHdoZW4gdGhlIGNhc2Ugb2YgYSBmaWxlbmFtZQotICAgICMgY2hhbmdlcyBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0uIFRvIHdvcmsgYXJvdW5kIHRoYXQsIGFsd2F5cwotICAgICMgY29udmVydCBmaWxlbmFtZXMgdG8gbG93ZXJjYXNlIG9uIHN1Y2ggZmlsZSBzeXN0ZW1zLiBTZWUKLSAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJ0aW5lL25pbmphL2lzc3Vlcy80MDIgZm9yIGRldGFpbHMuCi0gICAgaWYgc2VsZi5jYXNlX3NlbnNpdGl2ZV9maWxlc3lzdGVtOgotICAgICAgcmV0dXJuIHBhdGgKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIHBhdGgubG93ZXIoKQotCi0gIGRlZiBHeXBQYXRoVG9OaW5qYShzZWxmLCBwYXRoLCBlbnY9Tm9uZSk6Ci0gICAgIiIiVHJhbnNsYXRlIGEgZ3lwIHBhdGggdG8gYSBuaW5qYSBwYXRoLCBvcHRpb25hbGx5IGV4cGFuZGluZyBlbnZpcm9ubWVudAotCi0gICAgdmFyaWFibGUgcmVmZXJlbmNlcyBpbiB8cGF0aHwgd2l0aCB8ZW52fC4KLQotICAgIFNlZSB0aGUgYWJvdmUgZGlzY291cnNlIG9uIHBhdGggY29udmVyc2lvbnMuCi0gICAgIiIiCi0gICAgaWYgZW52OgotICAgICAgaWYgc2VsZi5mbGF2b3IgPT0gJ21hYyc6Ci0gICAgICAgIHBhdGggPSBneXAueGNvZGVfZW11bGF0aW9uLkV4cGFuZEVudlZhcnMocGF0aCwgZW52KQotICAgICAgZWxpZiBHZXRUb29sY2hhaW5Pck5vbmUoc2VsZi5mbGF2b3IpOgotICAgICAgICBwYXRoID0gR2V0VG9vbGNoYWluT3JOb25lKHNlbGYuZmxhdm9yKS5FeHBhbmRFbnZWYXJzKHBhdGgsIGVudikKLSAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJyQhJyk6Ci0gICAgICBleHBhbmRlZCA9IHNlbGYuRXhwYW5kU3BlY2lhbChwYXRoKQotICAgICAgaWYgc2VsZi5mbGF2b3IgPT0gJ3dpbic6Ci0gICAgICAgIGV4cGFuZGVkID0gb3MucGF0aC5ub3JtcGF0aChleHBhbmRlZCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGV4cGFuZGVkID0gc2VsZi5wYXRoX21vZHVsZS5ub3JtcGF0aChleHBhbmRlZCkKLSAgICAgIHJldHVybiBzZWxmLkd5cFBhdGhDYXNlQ29ycmVjdGlvbihleHBhbmRlZCkKLSAgICBpZiAnJHwnIGluIHBhdGg6Ci0gICAgICBwYXRoID0gc2VsZi5FeHBhbmRTcGVjaWFsKHBhdGgpCi0gICAgYXNzZXJ0ICckJyBub3QgaW4gcGF0aCwgcGF0aAotCi0gICAgIyBUT0RPOiB0aGlzIG5lZWRzIGEgcHJvcGVyIGZpeC4KLSAgICBpc19hYnNvbHV0ZSA9IHBhdGguc3RhcnRzd2l0aCgnQzonKSBvciBwYXRoLnN0YXJ0c3dpdGgoCi0gICAgICAgICdjOicpIG9yIHBhdGguc3RhcnRzd2l0aCgnLycpCi0gICAgaWYgbm90IGlzX2Fic29sdXRlOgotICAgICAgcGF0aCA9IHNlbGYucGF0aF9tb2R1bGUubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfdG9fYmFzZSwgcGF0aCkpCi0KLSAgICByZXR1cm4gc2VsZi5HeXBQYXRoQ2FzZUNvcnJlY3Rpb24ocGF0aCkKLQotICBkZWYgR3lwUGF0aFRvVW5pcXVlT3V0cHV0KHNlbGYsIHBhdGgsIHF1YWxpZmllZD1UcnVlKToKLSAgICAiIiJUcmFuc2xhdGUgYSBneXAgcGF0aCB0byBhIG5pbmphIHBhdGggZm9yIHdyaXRpbmcgb3V0cHV0LgotCi0gICAgSWYgcXVhbGlmaWVkIGlzIFRydWUsIHF1YWxpZnkgdGhlIHJlc3VsdGluZyBmaWxlbmFtZSB3aXRoIHRoZSBuYW1lCi0gICAgb2YgdGhlIHRhcmdldC4gIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gZS5nLiBjb21waWxpbmcgdGhlIHNhbWUKLSAgICBwYXRoIHR3aWNlIGZvciB0d28gc2VwYXJhdGUgb3V0cHV0IHRhcmdldHMuCi0KLSAgICBTZWUgdGhlIGFib3ZlIGRpc2NvdXJzZSBvbiBwYXRoIGNvbnZlcnNpb25zLgotICAgICIiIgotCi0gICAgcGF0aCA9IHNlbGYuRXhwYW5kU3BlY2lhbChwYXRoKQotICAgIGFzc2VydCBub3QgcGF0aC5zdGFydHN3aXRoKCckJyksIHBhdGgKLQotICAgICMgVHJhbnNsYXRlIHRoZSBwYXRoIGZvbGxvd2luZyB0aGlzIHNjaGVtZToKLSAgICAjICAgSW5wdXQ6IGZvby9iYXIuZ3lwLCB0YXJnZXQgdGFyZywgcmVmZXJlbmNlcyBiYXovb3V0Lm8KLSAgICAjICAgT3V0cHV0OiBvYmovZm9vL2Jhei90YXJnLm91dC5vIChpZiBxdWFsaWZpZWQpCi0gICAgIyAgICAgICAgICAgb2JqL2Zvby9iYXovb3V0Lm8gKG90aGVyd2lzZSkKLSAgICAjICAgICAoYW5kIG9iai5ob3N0IGluc3RlYWQgb2Ygb2JqIGZvciBjcm9zcy1jb21waWxlcykKLSAgICAjCi0gICAgIyBXaHkgdGhpcyBzY2hlbWUgYW5kIG5vdCBzb21lIG90aGVyIG9uZT8KLSAgICAjIDEpIGZvciBhIGdpdmVuIGlucHV0LCB5b3UgY2FuIGNvbXB1dGUgYWxsIGRlcml2ZWQgb3V0cHV0cyBieSBtYXRjaGluZwotICAgICMgICAgaXRzIHBhdGgsIGV2ZW4gaWYgdGhlIGlucHV0IGlzIGJyb3VnaHQgdmlhIGEgZ3lwIGZpbGUgd2l0aCAnLi4nLgotICAgICMgMikgc2ltcGxlIGZpbGVzIGxpa2UgbGlicmFyaWVzIGFuZCBzdGFtcHMgaGF2ZSBhIHNpbXBsZSBmaWxlbmFtZS4KLQotICAgIG9iaiA9ICdvYmonCi0gICAgaWYgc2VsZi50b29sc2V0ICE9ICd0YXJnZXQnOgotICAgICAgb2JqICs9ICcuJyArIHNlbGYudG9vbHNldAotCi0gICAgcGF0aF9kaXIsIHBhdGhfYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGgpCi0gICAgaWYgcXVhbGlmaWVkOgotICAgICAgcGF0aF9iYXNlbmFtZSA9IHNlbGYubmFtZSArICcuJyArIHBhdGhfYmFzZW5hbWUKLSAgICBwYXRoID0gc2VsZi5wYXRoX21vZHVsZS5ub3JtcGF0aCgKLSAgICAgICAgb3MucGF0aC5qb2luKG9iaiwgc2VsZi5iYXNlX2RpciwgcGF0aF9kaXIsIHBhdGhfYmFzZW5hbWUpKQotCi0gICAgcmV0dXJuIHNlbGYuR3lwUGF0aENhc2VDb3JyZWN0aW9uKHBhdGgpCi0KLSAgZGVmIFdyaXRlQ29sbGFwc2VkRGVwZW5kZW5jaWVzKHNlbGYsIG5hbWUsIHRhcmdldHMpOgotICAgICIiIkdpdmVuIGEgbGlzdCBvZiB0YXJnZXRzLCByZXR1cm4gYSBwYXRoIGZvciBhIHNpbmdsZSBmaWxlCi0KLSAgICByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBidWlsZGluZyBhbGwgdGhlIHRhcmdldHMgb3IgTm9uZS4KLQotICAgIFVzZXMgYSBzdGFtcCBmaWxlIGlmIG5lY2Vzc2FyeS4KLSAgICAiIiIKLQotICAgIGFzc2VydCB0YXJnZXRzID09IGZpbHRlcihOb25lLCB0YXJnZXRzKSwgdGFyZ2V0cwotICAgIGlmIGxlbih0YXJnZXRzKSA9PSAwOgotICAgICAgcmV0dXJuIE5vbmUKLSAgICBpZiBsZW4odGFyZ2V0cykgPT0gMToKLSAgICAgIHJldHVybiB0YXJnZXRzWzBdCi0KLSAgICBhc3NlcnQgRmluZEZpcnN0SW5zdGFuY2VPZihhYnN0cmFjdC5TdGFtcCwgR2V0SG9zdFRvb2xjaGFpbigKLSAgICAgICAgc2VsZi5mbGF2b3IpKSwgJ0hvc3QgdG9vbGNoYWluIG11c3QgcHJvdmlkZSBzdGFtcCB0b29sLicKLQotICAgIHN0YW1wX291dHB1dCA9IHNlbGYuR3lwUGF0aFRvVW5pcXVlT3V0cHV0KG5hbWUgKyAnLnN0YW1wJykKLSAgICBzZWxmLm5pbmphLmJ1aWxkKHN0YW1wX291dHB1dCwgJ3N0YW1wJywgdGFyZ2V0cykKLSAgICBzZWxmLm5pbmphLm5ld2xpbmUoKQotICAgIHJldHVybiBzdGFtcF9vdXRwdXQKLQotICBkZWYgV3JpdGVTcGVjKHNlbGYsIHNwZWMsIGNvbmZpZ19uYW1lLCBnZW5lcmF0b3JfZmxhZ3MpOgotICAgICIiIlRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBOaW5qYVdyaXRlcjogd3JpdGUgdGhlIGJ1aWxkIHJ1bGVzIGZvciBhIHNwZWMuCi0KLSAgICBSZXR1cm5zIGEgVGFyZ2V0IG9iamVjdCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3V0cHV0IHBhdGhzIGZvciB0aGlzIHNwZWMuCi0gICAgUmV0dXJucyBOb25lIGlmIHRoZXJlIGFyZSBubyBvdXRwdXRzIChlLmcuIGEgc2V0dGluZ3Mtb25seSAnbm9uZScgdHlwZQotICAgIHRhcmdldCkuCi0gICAgIiIiCi0KLSAgICBzZWxmLmNvbmZpZ19uYW1lID0gY29uZmlnX25hbWUKLSAgICBzZWxmLm5hbWUgPSBzcGVjWyd0YXJnZXRfbmFtZSddCi0gICAgc2VsZi50b29sc2V0ID0gc3BlY1sndG9vbHNldCddCi0gICAgY29uZmlnID0gc3BlY1snY29uZmlndXJhdGlvbnMnXVtjb25maWdfbmFtZV0KLSAgICBzZWxmLnRhcmdldCA9IFRhcmdldChzcGVjWyd0eXBlJ10pCi0gICAgc2VsZi5pc19zdGFuZGFsb25lX3N0YXRpY19saWJyYXJ5ID0gYm9vbCgKLSAgICAgICAgc3BlYy5nZXQoJ3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnknLCAwKSkKLQotICAgIHNlbGYuaXNfbWFjX2J1bmRsZSA9IGd5cC54Y29kZV9lbXVsYXRpb24uSXNNYWNCdW5kbGUoc2VsZi5mbGF2b3IsIHNwZWMpCi0gICAgc2VsZi54Y29kZV9zZXR0aW5ncyA9IE5vbmUKLSAgICBpZiBzZWxmLmZsYXZvciA9PSAnbWFjJzoKLSAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MgPSBneXAueGNvZGVfZW11bGF0aW9uLlhjb2RlU2V0dGluZ3Moc3BlYykKLSAgICBpZiAoc2VsZi5mbGF2b3IgaW4gd2luZG93c19ob3N0X2ZsYXZvcnMgYW5kIGlzX3dpbmRvd3MpOgotICAgICAgaWYgc2VsZi5mbGF2b3IgaW4gc29ueV9mbGF2b3JzIG9yIHNlbGYuZmxhdm9yIGluIG5pbnRlbmRvX2ZsYXZvcnM6Ci0gICAgICAgIHNlbGYubXN2c19zZXR0aW5ncyA9IGd5cC5tc3ZzX2VtdWxhdGlvbi5Nc3ZzU2V0dGluZ3MoCi0gICAgICAgICAgICBzcGVjLCBnZW5lcmF0b3JfZmxhZ3MpCi0gICAgICAgIGFyY2ggPSBzZWxmLm1zdnNfc2V0dGluZ3MuR2V0QXJjaChjb25maWdfbmFtZSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIEdldFRvb2xjaGFpbk9yTm9uZShzZWxmLmZsYXZvcikuSW5pdENvbXBpbGVyU2V0dGluZ3MoCi0gICAgICAgICAgICBzcGVjLCAqKnsnZ2VuZXJhdG9yX2ZsYWdzJzogZ2VuZXJhdG9yX2ZsYWdzfSkKLSAgICAgICAgYXJjaCA9IEdldFRvb2xjaGFpbk9yTm9uZSgKLSAgICAgICAgICAgIHNlbGYuZmxhdm9yKS5HZXRDb21waWxlclNldHRpbmdzKCkuR2V0QXJjaChjb25maWdfbmFtZSkKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoJ2FyY2gnLCBzZWxmLndpbl9lbnZbYXJjaF0pCi0gICAgICBOb25lCi0KLSAgICAjIENvbXB1dGUgcHJlZGVwZW5kcyBmb3IgYWxsIHJ1bGVzLgotICAgICMgYWN0aW9uc19kZXBlbmRzIGlzIHRoZSBkZXBlbmRlbmNpZXMgdGhpcyB0YXJnZXQgZGVwZW5kcyBvbiBiZWZvcmUgcnVubmluZwotICAgICMgYW55IG9mIGl0cyBhY3Rpb24vcnVsZS9jb3B5IHN0ZXBzLgotICAgICMgY29tcGlsZV9kZXBlbmRzIGlzIHRoZSBkZXBlbmRlbmNpZXMgdGhpcyB0YXJnZXQgZGVwZW5kcyBvbiBiZWZvcmUgcnVubmluZwotICAgICMgYW55IG9mIGl0cyBjb21waWxlIHN0ZXBzLgotICAgIGFjdGlvbnNfZGVwZW5kcyA9IFtdCi0gICAgY29tcGlsZV9kZXBlbmRzID0gW10KLSAgICAjIFRPRE8oZXZhbik6IGl0IGlzIHJhdGhlciBjb25mdXNpbmcgd2hpY2ggdGhpbmdzIGFyZSBsaXN0cyBhbmQgd2hpY2gKLSAgICAjIGFyZSBzdHJpbmdzLiAgRml4IHRoZXNlLgotICAgIGlmICdkZXBlbmRlbmNpZXMnIGluIHNwZWM6Ci0gICAgICBmb3IgZGVwIGluIHNwZWNbJ2RlcGVuZGVuY2llcyddOgotICAgICAgICBpZiBkZXAgaW4gc2VsZi50YXJnZXRfb3V0cHV0czoKLSAgICAgICAgICB0YXJnZXQgPSBzZWxmLnRhcmdldF9vdXRwdXRzW2RlcF0KLSAgICAgICAgICBhY3Rpb25zX2RlcGVuZHMuYXBwZW5kKHRhcmdldC5QcmVBY3Rpb25JbnB1dChzZWxmLmZsYXZvcikpCi0gICAgICAgICAgY29tcGlsZV9kZXBlbmRzLmFwcGVuZCh0YXJnZXQuUHJlQ29tcGlsZUlucHV0KCkpCi0gICAgICBhY3Rpb25zX2RlcGVuZHMgPSBmaWx0ZXIoTm9uZSwgYWN0aW9uc19kZXBlbmRzKQotICAgICAgY29tcGlsZV9kZXBlbmRzID0gZmlsdGVyKE5vbmUsIGNvbXBpbGVfZGVwZW5kcykKLSAgICAgIGFjdGlvbnNfZGVwZW5kcyA9IHNlbGYuV3JpdGVDb2xsYXBzZWREZXBlbmRlbmNpZXMoJ2FjdGlvbnNfZGVwZW5kcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnNfZGVwZW5kcykKLSAgICAgIGNvbXBpbGVfZGVwZW5kcyA9IHNlbGYuV3JpdGVDb2xsYXBzZWREZXBlbmRlbmNpZXMoJ2NvbXBpbGVfZGVwZW5kcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfZGVwZW5kcykKLSAgICAgIHNlbGYudGFyZ2V0LnByZWFjdGlvbl9zdGFtcCA9IGFjdGlvbnNfZGVwZW5kcwotICAgICAgc2VsZi50YXJnZXQucHJlY29tcGlsZV9zdGFtcCA9IGNvbXBpbGVfZGVwZW5kcwotCi0gICAgIyBXcml0ZSBvdXQgYWN0aW9ucywgcnVsZXMsIGFuZCBjb3BpZXMuICBUaGVzZSBtdXN0IGhhcHBlbiBiZWZvcmUgd2UKLSAgICAjIGNvbXBpbGUgYW55IHNvdXJjZXMsIHNvIGNvbXB1dGUgYSBsaXN0IG9mIHByZWRlcGVuZGVuY2llcyBmb3Igc291cmNlcwotICAgICMgd2hpbGUgd2UgZG8gaXQuCi0gICAgZXh0cmFfc291cmNlcyA9IFtdCi0gICAgbWFjX2J1bmRsZV9kZXBlbmRzID0gW10KLSAgICBzZWxmLnRhcmdldC5hY3Rpb25zX3N0YW1wID0gc2VsZi5Xcml0ZUFjdGlvbnNSdWxlc0NvcGllcygKLSAgICAgICAgc3BlYywgZXh0cmFfc291cmNlcywgYWN0aW9uc19kZXBlbmRzLCBtYWNfYnVuZGxlX2RlcGVuZHMpCi0KLSAgICAjIElmIHdlIGhhdmUgYWN0aW9ucy9ydWxlcy9jb3BpZXMsIHdlIGRlcGVuZCBkaXJlY3RseSBvbiB0aG9zZSwgYnV0Ci0gICAgIyBvdGhlcndpc2Ugd2UgZGVwZW5kIG9uIGRlcGVuZGVudCB0YXJnZXQncyBhY3Rpb25zL3J1bGVzL2NvcGllcyBldGMuCi0gICAgIyBXZSBuZXZlciBuZWVkIHRvIGV4cGxpY2l0bHkgZGVwZW5kIG9uIHByZXZpb3VzIHRhcmdldCdzIGxpbmsgc3RlcHMsCi0gICAgIyBiZWNhdXNlIG5vIGNvbXBpbGUgZXZlciBkZXBlbmRzIG9uIHRoZW0uCi0gICAgY29tcGlsZV9kZXBlbmRzX3N0YW1wID0gKHNlbGYudGFyZ2V0LmFjdGlvbnNfc3RhbXAgb3IgY29tcGlsZV9kZXBlbmRzKQotCi0gICAgIyBXcml0ZSBvdXQgdGhlIGNvbXBpbGF0aW9uIHN0ZXBzLCBpZiBhbnkuCi0gICAgbGlua19kZXBzID0gW10KLSAgICBzb3VyY2VzID0gc3BlYy5nZXQoJ3NvdXJjZXMnLCBbXSkgKyBleHRyYV9zb3VyY2VzCi0gICAgaWYgc291cmNlczoKLSAgICAgIHBjaCA9IE5vbmUKLSAgICAgIGlmIEdldFRvb2xjaGFpbk9yTm9uZShzZWxmLmZsYXZvcik6Ci0gICAgICAgIEdldFRvb2xjaGFpbk9yTm9uZShzZWxmLmZsYXZvcikuVmVyaWZ5TWlzc2luZ1NvdXJjZXMoCi0gICAgICAgICAgICBzb3VyY2VzLCAqKnsKLSAgICAgICAgICAgICAgICAnYnVpbGRfZGlyJzogc2VsZi5hYnNfYnVpbGRfZGlyLAotICAgICAgICAgICAgICAgICdnZW5lcmF0b3JfZmxhZ3MnOiBnZW5lcmF0b3JfZmxhZ3MsCi0gICAgICAgICAgICAgICAgJ2d5cF9wYXRoX3RvX25pbmphJzogc2VsZi5HeXBQYXRoVG9OaW5qYQotICAgICAgICAgICAgfSkKLSAgICAgICAgcGNoID0gR2V0VG9vbGNoYWluT3JOb25lKHNlbGYuZmxhdm9yKS5HZXRQcmVjb21waWxlZEhlYWRlcigKLSAgICAgICAgICAgICoqewotICAgICAgICAgICAgICAgICdzZXR0aW5ncyc6Ci0gICAgICAgICAgICAgICAgICAgIEdldFRvb2xjaGFpbk9yTm9uZShzZWxmLmZsYXZvcikuR2V0Q29tcGlsZXJTZXR0aW5ncygpLAotICAgICAgICAgICAgICAgICdjb25maWcnOgotICAgICAgICAgICAgICAgICAgICBjb25maWdfbmFtZSwKLSAgICAgICAgICAgICAgICAnZ3lwX3BhdGhfdG9fbmluamEnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLkd5cFBhdGhUb05pbmphLAotICAgICAgICAgICAgICAgICdneXBfcGF0aF90b191bmlxdWVfb3V0cHV0JzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5HeXBQYXRoVG9VbmlxdWVPdXRwdXQsCi0gICAgICAgICAgICAgICAgJ29ial9leHQnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLm9ial9leHQKLSAgICAgICAgICAgIH0pCi0gICAgICBlbHNlOgotICAgICAgICBwY2ggPSBneXAueGNvZGVfZW11bGF0aW9uLk1hY1ByZWZpeEhlYWRlcigKLSAgICAgICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsIHNlbGYuR3lwUGF0aFRvTmluamEsCi0gICAgICAgICAgICBsYW1iZGEgcGF0aCwgbGFuZzogc2VsZi5HeXBQYXRoVG9VbmlxdWVPdXRwdXQocGF0aCArICctJyArIGxhbmcpKQotICAgICAgbGlua19kZXBzID0gc2VsZi5Xcml0ZVNvdXJjZXMoY29uZmlnX25hbWUsIGNvbmZpZywgc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVfZGVwZW5kc19zdGFtcCwgcGNoLCBzcGVjKQotICAgICAgIyBTb21lIGFjdGlvbnMvcnVsZXMgb3V0cHV0ICdzb3VyY2VzJyB0aGF0IGFyZSBhbHJlYWR5IG9iamVjdCBmaWxlcy4KLSAgICAgIGxpbmtfZGVwcyArPSBbCi0gICAgICAgICAgc2VsZi5HeXBQYXRoVG9OaW5qYShmKSBmb3IgZiBpbiBzb3VyY2VzIGlmIGYuZW5kc3dpdGgoc2VsZi5vYmpfZXh0KQotICAgICAgXQotCi0gICAgaWYgKHNlbGYuZmxhdm9yIGluIG1pY3Jvc29mdF9mbGF2b3JzIGFuZAotICAgICAgICBzZWxmLnRhcmdldC50eXBlID09ICdzdGF0aWNfbGlicmFyeScpOgotICAgICAgc2VsZi50YXJnZXQuY29tcG9uZW50X29ianMgPSBsaW5rX2RlcHMKLQotICAgICMgV3JpdGUgb3V0IGEgbGluayBzdGVwLCBpZiBuZWVkZWQuCi0gICAgb3V0cHV0ID0gTm9uZQotICAgIGlmIGxpbmtfZGVwcyBvciBzZWxmLnRhcmdldC5hY3Rpb25zX3N0YW1wIG9yIGFjdGlvbnNfZGVwZW5kczoKLSAgICAgIG91dHB1dCA9IHNlbGYuV3JpdGVUYXJnZXQoc3BlYywgY29uZmlnX25hbWUsIGNvbmZpZywgbGlua19kZXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5hY3Rpb25zX3N0YW1wIG9yIGFjdGlvbnNfZGVwZW5kcykKLSAgICAgIGlmIHNlbGYuaXNfbWFjX2J1bmRsZToKLSAgICAgICAgbWFjX2J1bmRsZV9kZXBlbmRzLmFwcGVuZChvdXRwdXQpCi0KLSAgICAjIEJ1bmRsZSBhbGwgb2YgdGhlIGFib3ZlIHRvZ2V0aGVyLCBpZiBuZWVkZWQuCi0gICAgaWYgc2VsZi5pc19tYWNfYnVuZGxlOgotICAgICAgb3V0cHV0ID0gc2VsZi5Xcml0ZU1hY0J1bmRsZShzcGVjLCBtYWNfYnVuZGxlX2RlcGVuZHMpCi0KLSAgICBpZiBub3Qgb3V0cHV0OgotICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGFzc2VydCBzZWxmLnRhcmdldC5GaW5hbE91dHB1dCgpLCBvdXRwdXQKLSAgICByZXR1cm4gc2VsZi50YXJnZXQKLQotICBkZWYgX1dpbklkbFJ1bGUoc2VsZiwgc291cmNlLCBwcmVidWlsZCwgb3V0cHV0cyk6Ci0gICAgIiIiSGFuZGxlIHRoZSBpbXBsaWNpdCBWUyAuaWRsIHJ1bGUgZm9yIG9uZSBzb3VyY2UgZmlsZS4KLQotICAgIEZpbGxzIHxvdXRwdXRzfAotICAgIHdpdGggZmlsZXMgdGhhdCBhcmUgZ2VuZXJhdGVkLgotICAgICIiIgotICAgIG91dGRpciwgb3V0cHV0LCB2YXJzLCBmbGFncyA9IEdldFRvb2xjaGFpbk9yTm9uZSgKLSAgICAgICAgc2VsZi5mbGF2b3IpLkdldENvbXBpbGVyU2V0dGluZ3MoKS5HZXRJZGxCdWlsZERhdGEoCi0gICAgICAgICAgICBzb3VyY2UsIHNlbGYuY29uZmlnX25hbWUpCi0gICAgb3V0ZGlyID0gc2VsZi5HeXBQYXRoVG9OaW5qYShvdXRkaXIpCi0KLSAgICBkZWYgZml4X3BhdGgocGF0aCwgcmVsPU5vbmUpOgotICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvdXRkaXIsIHBhdGgpCi0gICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoc291cmNlKQotICAgICAgcm9vdCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKLSAgICAgIHBhdGggPSBzZWxmLkV4cGFuZFJ1bGVWYXJpYWJsZXMocGF0aCwgcm9vdCwgZGlybmFtZSwgc291cmNlLCBleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQotICAgICAgaWYgcmVsOgotICAgICAgICBwYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHJlbCkKLSAgICAgIHJldHVybiBwYXRoCi0KLSAgICB2YXJzID0gWyhuYW1lLCBmaXhfcGF0aCh2YWx1ZSwgb3V0ZGlyKSkgZm9yIG5hbWUsIHZhbHVlIGluIHZhcnNdCi0gICAgb3V0cHV0ID0gW2ZpeF9wYXRoKHApIGZvciBwIGluIG91dHB1dF0KLSAgICB2YXJzLmFwcGVuZCgoJ291dGRpcicsIG91dGRpcikpCi0gICAgdmFycy5hcHBlbmQoKCdpZGxmbGFncycsIGZsYWdzKSkKLSAgICBpbnB1dCA9IHNlbGYuR3lwUGF0aFRvTmluamEoc291cmNlKQotICAgIHNlbGYubmluamEuYnVpbGQob3V0cHV0LCAnaWRsJywgaW5wdXQsIHZhcmlhYmxlcz12YXJzLCBvcmRlcl9vbmx5PXByZWJ1aWxkKQotICAgIG91dHB1dHMuZXh0ZW5kKG91dHB1dCkKLQotICBkZWYgV3JpdGVXaW5JZGxGaWxlcyhzZWxmLCBzcGVjLCBwcmVidWlsZCk6Ci0gICAgIiIiV3JpdGVzIHJ1bGVzIHRvIG1hdGNoIE1TVlMncyBpbXBsaWNpdCBpZGwgaGFuZGxpbmcuIiIiCi0gICAgYXNzZXJ0IEdldFRvb2xjaGFpbk9yTm9uZShzZWxmLmZsYXZvcikKLSAgICBpZiBHZXRUb29sY2hhaW5Pck5vbmUoCi0gICAgICAgIHNlbGYuZmxhdm9yKS5HZXRDb21waWxlclNldHRpbmdzKCkuSGFzRXhwbGljaXRJZGxSdWxlcyhzcGVjKToKLSAgICAgIHJldHVybiBbXQotICAgIG91dHB1dHMgPSBbXQotICAgIGZvciBzb3VyY2UgaW4gZmlsdGVyKGxhbWJkYSB4OiB4LmVuZHN3aXRoKCcuaWRsJyksIHNwZWNbJ3NvdXJjZXMnXSk6Ci0gICAgICBzZWxmLl9XaW5JZGxSdWxlKHNvdXJjZSwgcHJlYnVpbGQsIG91dHB1dHMpCi0gICAgcmV0dXJuIG91dHB1dHMKLQotICBkZWYgV3JpdGVBY3Rpb25zUnVsZXNDb3BpZXMoc2VsZiwgc3BlYywgZXh0cmFfc291cmNlcywgcHJlYnVpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNfYnVuZGxlX2RlcGVuZHMpOgotICAgICIiIldyaXRlIG91dCB0aGUgQWN0aW9ucywgUnVsZXMsIGFuZCBDb3BpZXMgc3RlcHMuCi0KLSAgICBSZXR1cm4gYSBwYXRoCi0gICAgcmVwcmVzZW50aW5nIHRoZSBvdXRwdXRzIG9mIHRoZXNlIHN0ZXBzLgotICAgICIiIgotICAgIG91dHB1dHMgPSBbXQotICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzID0gW10KLQotICAgIGlmICdhY3Rpb25zJyBpbiBzcGVjOgotICAgICAgb3V0cHV0cyArPSBzZWxmLldyaXRlQWN0aW9ucyhzcGVjWydhY3Rpb25zJ10sIGV4dHJhX3NvdXJjZXMsIHByZWJ1aWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcykKLSAgICBpZiAncnVsZXMnIGluIHNwZWM6Ci0gICAgICBvdXRwdXRzICs9IHNlbGYuV3JpdGVSdWxlcyhzcGVjWydydWxlcyddLCBleHRyYV9zb3VyY2VzLCBwcmVidWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzKQotICAgIGlmICdjb3BpZXMnIGluIHNwZWM6Ci0gICAgICBvdXRwdXRzICs9IHNlbGYuV3JpdGVDb3BpZXMoc3BlY1snY29waWVzJ10sIHByZWJ1aWxkLCBtYWNfYnVuZGxlX2RlcGVuZHMpCi0KLSAgICBzdGFtcCA9IHNlbGYuV3JpdGVDb2xsYXBzZWREZXBlbmRlbmNpZXMoJ2FjdGlvbnNfcnVsZXNfY29waWVzJywgb3V0cHV0cykKLQotICAgIGlmIHNlbGYuaXNfbWFjX2J1bmRsZToKLSAgICAgIG1hY19idW5kbGVfcmVzb3VyY2VzID0gc3BlYy5nZXQoJ21hY19idW5kbGVfcmVzb3VyY2VzJywgW10pICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcwotICAgICAgc2VsZi5Xcml0ZU1hY0J1bmRsZVJlc291cmNlcyhtYWNfYnVuZGxlX3Jlc291cmNlcywgbWFjX2J1bmRsZV9kZXBlbmRzKQotICAgICAgc2VsZi5Xcml0ZU1hY0luZm9QbGlzdChtYWNfYnVuZGxlX2RlcGVuZHMpCi0KLSAgICByZXR1cm4gc3RhbXAKLQotICBkZWYgR2VuZXJhdGVEZXNjcmlwdGlvbihzZWxmLCB2ZXJiLCBtZXNzYWdlLCBmYWxsYmFjayk6Ci0gICAgIiIiR2VuZXJhdGUgYW5kIHJldHVybiBhIGRlc2NyaXB0aW9uIG9mIGEgYnVpbGQgc3RlcC4KLQotICAgIHx2ZXJifCBpcyB0aGUgc2hvcnQgc3VtbWFyeSwgZS5nLiBBQ1RJT04gb3IgUlVMRS4KLSAgICB8bWVzc2FnZXwgaXMgYSBoYW5kLXdyaXR0ZW4gZGVzY3JpcHRpb24sIG9yIE5vbmUgaWYgbm90IGF2YWlsYWJsZS4KLSAgICB8ZmFsbGJhY2t8IGlzIHRoZSBneXAtbGV2ZWwgbmFtZSBvZiB0aGUgc3RlcCwgdXNhYmxlIGFzIGEgZmFsbGJhY2suCi0gICAgIiIiCi0gICAgaWYgc2VsZi50b29sc2V0ICE9ICd0YXJnZXQnOgotICAgICAgdmVyYiArPSAnKCVzKScgJSBzZWxmLnRvb2xzZXQKLSAgICBpZiBtZXNzYWdlOgotICAgICAgcmV0dXJuICclcyAlcycgJSAodmVyYiwgc2VsZi5FeHBhbmRTcGVjaWFsKG1lc3NhZ2UpKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gJyVzICVzOiAlcycgJSAodmVyYiwgc2VsZi5uYW1lLCBmYWxsYmFjaykKLQotICBkZWYgSXNDeWd3aW5SdWxlKHNlbGYsIGFjdGlvbik6Ci0gICAgaWYgc2VsZi5mbGF2b3IgaW4gc29ueV9mbGF2b3JzIG9yIHNlbGYuZmxhdm9yIGluIG5pbnRlbmRvX2ZsYXZvcnM6Ci0gICAgICB2YWx1ZSA9IHN0cihhY3Rpb24uZ2V0KCdtc3ZzX2N5Z3dpbl9zaGVsbCcsIDApKSAhPSAnMCcKLSAgICAgIGlmIHZhbHVlOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0N5Z3dpbiB1c2FnZSBpcyBubyBsb25nZXIgYWxsb3dlZCBpbiBDb2JhbHQgR3lwJykKLSAgICByZXR1cm4gRmFsc2UKLQotICBkZWYgV3JpdGVBY3Rpb25zKHNlbGYsIGFjdGlvbnMsIGV4dHJhX3NvdXJjZXMsIHByZWJ1aWxkLAotICAgICAgICAgICAgICAgICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzKToKLSAgICAjIEFjdGlvbnMgY2QgaW50byB0aGUgYmFzZSBkaXJlY3RvcnkuCi0gICAgZW52ID0gc2VsZi5HZXRTb3J0ZWRYY29kZUVudigpCi0gICAgaWYgc2VsZi5mbGF2b3IgPT0gJ3dpbic6Ci0gICAgICBlbnYgPSBHZXRUb29sY2hhaW5Pck5vbmUoc2VsZi5mbGF2b3IpLkdldENvbXBpbGVyU2V0dGluZ3MoKS5HZXRWU01hY3JvRW52KAotICAgICAgICAgICckIVBST0RVQ1RfRElSJywgY29uZmlnPXNlbGYuY29uZmlnX25hbWUpCi0gICAgYWxsX291dHB1dHMgPSBbXQotICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uczoKLSAgICAgICMgRmlyc3Qgd3JpdGUgb3V0IGEgcnVsZSBmb3IgdGhlIGFjdGlvbi4KLSAgICAgIG5hbWUgPSAnJXNfJXMnICUgKGFjdGlvblsnYWN0aW9uX25hbWUnXSwgaGFzaGxpYi5tZDUoCi0gICAgICAgICAgc2VsZi5xdWFsaWZpZWRfdGFyZ2V0KS5oZXhkaWdlc3QoKSkKLSAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5HZW5lcmF0ZURlc2NyaXB0aW9uKCdBQ1RJT04nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmdldCgnbWVzc2FnZScsIE5vbmUpLCBuYW1lKQotICAgICAgaXNfY3lnd2luID0gc2VsZi5Jc0N5Z3dpblJ1bGUoYWN0aW9uKQotICAgICAgYXJncyA9IGFjdGlvblsnYWN0aW9uJ10KLSAgICAgIHJ1bGVfbmFtZSwgXyA9IHNlbGYuV3JpdGVOZXdOaW5qYVJ1bGUoCi0gICAgICAgICAgbmFtZSwgYXJncywgZGVzY3JpcHRpb24sIGlzX2N5Z3dpbiwgZW52PWVudikKLQotICAgICAgaW5wdXRzID0gW3NlbGYuR3lwUGF0aFRvTmluamEoaSwgZW52KSBmb3IgaSBpbiBhY3Rpb25bJ2lucHV0cyddXQotICAgICAgaWYgaW50KGFjdGlvbi5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJywgRmFsc2UpKToKLSAgICAgICAgZXh0cmFfc291cmNlcyArPSBhY3Rpb25bJ291dHB1dHMnXQotICAgICAgaWYgaW50KGFjdGlvbi5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19tYWNfYnVuZGxlX3Jlc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgIGV4dHJhX21hY19idW5kbGVfcmVzb3VyY2VzICs9IGFjdGlvblsnb3V0cHV0cyddCi0gICAgICBvdXRwdXRzID0gW3NlbGYuR3lwUGF0aFRvTmluamEobywgZW52KSBmb3IgbyBpbiBhY3Rpb25bJ291dHB1dHMnXV0KLQotICAgICAgIyBUaGVuIHdyaXRlIG91dCBhbiBlZGdlIHVzaW5nIHRoZSBydWxlLgotICAgICAgc2VsZi5uaW5qYS5idWlsZChvdXRwdXRzLCBydWxlX25hbWUsIGlucHV0cywgb3JkZXJfb25seT1wcmVidWlsZCkKLSAgICAgIGFsbF9vdXRwdXRzICs9IG91dHB1dHMKLQotICAgICAgc2VsZi5uaW5qYS5uZXdsaW5lKCkKLQotICAgIHJldHVybiBhbGxfb3V0cHV0cwotCi0gIGRlZiBXcml0ZVJ1bGVzKHNlbGYsIHJ1bGVzLCBleHRyYV9zb3VyY2VzLCBwcmVidWlsZCwKLSAgICAgICAgICAgICAgICAgZXh0cmFfbWFjX2J1bmRsZV9yZXNvdXJjZXMpOgotICAgIGVudiA9IHNlbGYuR2V0U29ydGVkWGNvZGVFbnYoKQotICAgIGFsbF9vdXRwdXRzID0gW10KLSAgICBmb3IgcnVsZSBpbiBydWxlczoKLSAgICAgICMgRmlyc3Qgd3JpdGUgb3V0IGEgcnVsZSBmb3IgdGhlIHJ1bGUgYWN0aW9uLgotICAgICAgbmFtZSA9ICclc18lcycgJSAocnVsZVsncnVsZV9uYW1lJ10sIGhhc2hsaWIubWQ1KAotICAgICAgICAgIHNlbGYucXVhbGlmaWVkX3RhcmdldCkuaGV4ZGlnZXN0KCkpCi0gICAgICAjIFNraXAgYSBydWxlIHdpdGggbm8gYWN0aW9uIGFuZCBubyBpbnB1dHMuCi0gICAgICBpZiAnYWN0aW9uJyBub3QgaW4gcnVsZSBhbmQgbm90IHJ1bGUuZ2V0KCdydWxlX3NvdXJjZXMnLCBbXSk6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBhcmdzID0gcnVsZVsnYWN0aW9uJ10KLSAgICAgIGRlc2NyaXB0aW9uID0gc2VsZi5HZW5lcmF0ZURlc2NyaXB0aW9uKAotICAgICAgICAgICdSVUxFJywgcnVsZS5nZXQoJ21lc3NhZ2UnLCBOb25lKSwKLSAgICAgICAgICAoJyVzICcgKyBnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1JVTEVfSU5QVVRfUEFUSCddKSAlIG5hbWUpCi0gICAgICBpc19jeWd3aW4gPSBzZWxmLklzQ3lnd2luUnVsZShydWxlKQotICAgICAgcnVsZV9uYW1lLCBhcmdzID0gc2VsZi5Xcml0ZU5ld05pbmphUnVsZSgKLSAgICAgICAgICBuYW1lLCBhcmdzLCBkZXNjcmlwdGlvbiwgaXNfY3lnd2luLCBlbnY9ZW52KQotCi0gICAgICAjIFRPRE86IGlmIHRoZSBjb21tYW5kIHJlZmVyZW5jZXMgdGhlIG91dHB1dHMgZGlyZWN0bHksIHdlIHNob3VsZAotICAgICAgIyBzaW1wbGlmeSBpdCB0byBqdXN0IHVzZSAkb3V0LgotCi0gICAgICAjIFJ1bGVzIGNhbiBwb3RlbnRpYWxseSBtYWtlIHVzZSBvZiBzb21lIHNwZWNpYWwgdmFyaWFibGVzIHdoaWNoCi0gICAgICAjIG11c3QgdmFyeSBwZXIgc291cmNlIGZpbGUuCi0gICAgICAjIENvbXB1dGUgdGhlIGxpc3Qgb2YgdmFyaWFibGVzIHdlJ2xsIG5lZWQgdG8gcHJvdmlkZS4KLSAgICAgIHNwZWNpYWxfbG9jYWxzID0gKCdzb3VyY2UnLCAncm9vdCcsICdkaXJuYW1lJywgJ2V4dCcsICduYW1lJykKLSAgICAgIG5lZWRlZF92YXJpYWJsZXMgPSBzZXQoWydzb3VyY2UnXSkKLSAgICAgIGZvciBhcmd1bWVudCBpbiBhcmdzOgotICAgICAgICBmb3IgdmFyIGluIHNwZWNpYWxfbG9jYWxzOgotICAgICAgICAgIGlmICgnJHslc30nICUgdmFyKSBpbiBhcmd1bWVudDoKLSAgICAgICAgICAgIG5lZWRlZF92YXJpYWJsZXMuYWRkKHZhcikKLQotICAgICAgZGVmIGN5Z3dpbl9tdW5nZShwYXRoKToKLSAgICAgICAgaWYgaXNfY3lnd2luOgotICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQotICAgICAgICByZXR1cm4gcGF0aAotCi0gICAgICAjIEZvciBlYWNoIHNvdXJjZSBmaWxlLCB3cml0ZSBhbiBlZGdlIHRoYXQgZ2VuZXJhdGVzIGFsbCB0aGUgb3V0cHV0cy4KLSAgICAgIGZvciBzb3VyY2UgaW4gcnVsZS5nZXQoJ3J1bGVfc291cmNlcycsIFtdKToKLSAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHNvdXJjZSkKLSAgICAgICAgcm9vdCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKLQotICAgICAgICAjIEdhdGhlciB0aGUgbGlzdCBvZiBpbnB1dHMgYW5kIG91dHB1dHMsIGV4cGFuZGluZyAkdmFycyBpZiBwb3NzaWJsZS4KLSAgICAgICAgb3V0cHV0cyA9IFsKLSAgICAgICAgICAgIHNlbGYuRXhwYW5kUnVsZVZhcmlhYmxlcyhvLCByb290LCBkaXJuYW1lLCBzb3VyY2UsIGV4dCwgYmFzZW5hbWUpCi0gICAgICAgICAgICBmb3IgbyBpbiBydWxlWydvdXRwdXRzJ10KLSAgICAgICAgXQotICAgICAgICBpbnB1dHMgPSBbCi0gICAgICAgICAgICBzZWxmLkV4cGFuZFJ1bGVWYXJpYWJsZXMoaSwgcm9vdCwgZGlybmFtZSwgc291cmNlLCBleHQsIGJhc2VuYW1lKQotICAgICAgICAgICAgZm9yIGkgaW4gcnVsZS5nZXQoJ2lucHV0cycsIFtdKQotICAgICAgICBdCi0KLSAgICAgICAgaWYgaW50KHJ1bGUuZ2V0KCdwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgICAgZXh0cmFfc291cmNlcyArPSBvdXRwdXRzCi0gICAgICAgIGlmIGludChydWxlLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX21hY19idW5kbGVfcmVzb3VyY2VzJywgRmFsc2UpKToKLSAgICAgICAgICBleHRyYV9tYWNfYnVuZGxlX3Jlc291cmNlcyArPSBvdXRwdXRzCi0KLSAgICAgICAgZXh0cmFfYmluZGluZ3MgPSBbXQotICAgICAgICBmb3IgdmFyIGluIG5lZWRlZF92YXJpYWJsZXM6Ci0gICAgICAgICAgaWYgdmFyID09ICdyb290JzoKLSAgICAgICAgICAgIGV4dHJhX2JpbmRpbmdzLmFwcGVuZCgoJ3Jvb3QnLCBjeWd3aW5fbXVuZ2Uocm9vdCkpKQotICAgICAgICAgIGVsaWYgdmFyID09ICdkaXJuYW1lJzoKLSAgICAgICAgICAgIGV4dHJhX2JpbmRpbmdzLmFwcGVuZCgoJ2Rpcm5hbWUnLCBjeWd3aW5fbXVuZ2UoZGlybmFtZSkpKQotICAgICAgICAgIGVsaWYgdmFyID09ICdzb3VyY2UnOgotICAgICAgICAgICAgIyAnJHNvdXJjZScgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIHJ1bGUgYWN0aW9uLCB3aGljaCBtZWFucwotICAgICAgICAgICAgIyBpdCBzaG91bGRuJ3QgYmUgY29udmVydGVkIHRvIGEgTmluamEgcGF0aC4gIEJ1dCB3ZSBkb24ndAotICAgICAgICAgICAgIyB3YW50ICQhUFJPRFVDVF9ESVIgaW4gdGhlcmUgZWl0aGVyLgotICAgICAgICAgICAgc291cmNlX2V4cGFuZGVkID0gc2VsZi5FeHBhbmRTcGVjaWFsKHNvdXJjZSwgc2VsZi5iYXNlX3RvX2J1aWxkKQotICAgICAgICAgICAgZXh0cmFfYmluZGluZ3MuYXBwZW5kKCgnc291cmNlJywgY3lnd2luX211bmdlKHNvdXJjZV9leHBhbmRlZCkpKQotICAgICAgICAgIGVsaWYgdmFyID09ICdleHQnOgotICAgICAgICAgICAgZXh0cmFfYmluZGluZ3MuYXBwZW5kKCgnZXh0JywgZXh0KSkKLSAgICAgICAgICBlbGlmIHZhciA9PSAnbmFtZSc6Ci0gICAgICAgICAgICBleHRyYV9iaW5kaW5ncy5hcHBlbmQoKCduYW1lJywgY3lnd2luX211bmdlKGJhc2VuYW1lKSkpCi0gICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydCB2YXIgPT0gTm9uZSwgcmVwcih2YXIpCi0KLSAgICAgICAgaW5wdXRzID0gW3NlbGYuR3lwUGF0aFRvTmluamEoaSwgZW52KSBmb3IgaSBpbiBpbnB1dHNdCi0gICAgICAgIG91dHB1dHMgPSBbc2VsZi5HeXBQYXRoVG9OaW5qYShvLCBlbnYpIGZvciBvIGluIG91dHB1dHNdCi0gICAgICAgIGV4dHJhX2JpbmRpbmdzLmFwcGVuZCgKLSAgICAgICAgICAgICgndW5pcXVlX25hbWUnLCBoYXNobGliLm1kNShvdXRwdXRzWzBdKS5oZXhkaWdlc3QoKSkpCi0gICAgICAgIHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgICAgICBvdXRwdXRzLAotICAgICAgICAgICAgcnVsZV9uYW1lLAotICAgICAgICAgICAgc2VsZi5HeXBQYXRoVG9OaW5qYShzb3VyY2UpLAotICAgICAgICAgICAgaW1wbGljaXQ9aW5wdXRzLAotICAgICAgICAgICAgb3JkZXJfb25seT1wcmVidWlsZCwKLSAgICAgICAgICAgIHZhcmlhYmxlcz1leHRyYV9iaW5kaW5ncykKLQotICAgICAgICBhbGxfb3V0cHV0cy5leHRlbmQob3V0cHV0cykKLQotICAgIHJldHVybiBhbGxfb3V0cHV0cwotCi0gIGRlZiBXcml0ZUNvcHkoc2VsZiwgc3JjLCBkc3QsIHByZWJ1aWxkLCBlbnYsIG1hY19idW5kbGVfZGVwZW5kcyk6Ci0gICAgYXNzZXJ0IEZpbmRGaXJzdEluc3RhbmNlT2YoYWJzdHJhY3QuQ29weSwgR2V0SG9zdFRvb2xjaGFpbigKLSAgICAgICAgc2VsZi5mbGF2b3IpKSwgJ0hvc3QgdG9vbGNoYWluIG11c3QgcHJvdmlkZSBjb3B5IHRvb2wuJwotCi0gICAgZHN0ID0gc2VsZi5HeXBQYXRoVG9OaW5qYShkc3QsIGVudikKLSAgICAjIFJlbm9ybWFsaXplIHdpdGggdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgb2YgdGhlIG9zIG9uIHdoaWNoIG5pbmphIHdpbGwgcnVuCi0gICAgZHN0ID0gc2VsZi5wYXRoX21vZHVsZS5ub3JtcGF0aChkc3QpCi0KLSAgICBzZWxmLm5pbmphLmJ1aWxkKGRzdCwgJ2NvcHknLCBzcmMsIG9yZGVyX29ubHk9cHJlYnVpbGQpCi0gICAgaWYgc2VsZi5pc19tYWNfYnVuZGxlOgotICAgICAgIyBneXAgaGFzIG1hY19idW5kbGVfcmVzb3VyY2VzIHRvIGNvcHkgdGhpbmdzIGludG8gYSBidW5kbGUncwotICAgICAgIyBSZXNvdXJjZXMgZm9sZGVyLCBidXQgdGhlcmUncyBubyBidWlsdC1pbiB3YXkgdG8gY29weSBmaWxlcyB0byBvdGhlcgotICAgICAgIyBwbGFjZXMgaW4gdGhlIGJ1bmRsZS4gSGVuY2UsIHNvbWUgdGFyZ2V0cyB1c2UgY29waWVzIGZvciB0aGlzLiBDaGVjawotICAgICAgIyBpZiB0aGlzIGZpbGUgaXMgY29waWVkIGludG8gdGhlIGN1cnJlbnQgYnVuZGxlLCBhbmQgaWYgc28gYWRkIGl0IHRvCi0gICAgICAjIHRoZSBidW5kbGUgZGVwZW5kcyBzbyB0aGF0IGRlcGVuZGVudCB0YXJnZXRzIGdldCByZWJ1aWx0IGlmIHRoZSBjb3B5Ci0gICAgICAjIGlucHV0IGNoYW5nZXMuCi0gICAgICBpZiBkc3Quc3RhcnRzd2l0aChzZWxmLnhjb2RlX3NldHRpbmdzLkdldEJ1bmRsZUNvbnRlbnRzRm9sZGVyUGF0aCgpKToKLSAgICAgICAgbWFjX2J1bmRsZV9kZXBlbmRzLmFwcGVuZChkc3QpCi0gICAgcmV0dXJuIFtkc3RdCi0KLSAgZGVmIFdyaXRlQ29waWVzKHNlbGYsIGNvcGllcywgcHJlYnVpbGQsIG1hY19idW5kbGVfZGVwZW5kcyk6Ci0gICAgb3V0cHV0cyA9IFtdCi0gICAgZW52ID0gc2VsZi5HZXRTb3J0ZWRYY29kZUVudigpCi0gICAgZm9yIGNvcHkgaW4gY29waWVzOgotICAgICAgZm9yIHBhdGggaW4gY29weVsnZmlsZXMnXToKLSAgICAgICAgIyBOb3JtYWxpemUgdGhlIHBhdGggc28gdHJhaWxpbmcgc2xhc2hlcyBkb24ndCBjb25mdXNlIHVzLgotICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQotICAgICAgICBkZXN0aW5hdGlvbiA9IGNvcHlbJ2Rlc3RpbmF0aW9uJ10KLSAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzFdCi0KLSAgICAgICAgIyBjYWxsIEd5cFBhdGhUb05pbmphKCkgdG8gcmVzb2x2ZSBhbnkgc3BlY2lhbCBHWVAgJCB0b2tlbnMgaW4gc3JjLgotICAgICAgICAjIEFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZGlyZWN0b3J5IGFjdHVhbGx5IGlzIG9uIGRpc2suCi0gICAgICAgIG5pbmphX3BhdGggPSBzZWxmLkd5cFBhdGhUb05pbmphKHBhdGgpCi0gICAgICAgIGpvaW5lZF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYWJzX2J1aWxkX2RpciwgbmluamFfcGF0aCkKLSAgICAgICAgam9pbmVkX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGpvaW5lZF9wYXRoKQotCi0gICAgICAgICMgSWYgc3JjIGlzIGEgZGlyZWN0b3J5LCBleHBhbmQgaXQgcmVjdXJzaXZlbHksCi0gICAgICAgICMgc28gd2UgaGF2ZSBhIGJ1aWxkIHJ1bGUgZm9yIGV2ZXJ5IGZpbGUuCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoam9pbmVkX3BhdGgpOgotICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGpvaW5lZF9wYXRoKToKLSAgICAgICAgICAgIHJlbF9yb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3QsIHNlbGYuYWJzX2J1aWxkX2RpcikKLQotICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgIHNyYyA9IHNlbGYuR3lwUGF0aFRvTmluamEob3MucGF0aC5qb2luKHJlbF9yb290LCBmKSwgZW52KQotICAgICAgICAgICAgICBjb21tb25fcHJlZml4ID0gb3MucGF0aC5jb21tb25wcmVmaXgoW2pvaW5lZF9wYXRoLCByb290XSkKLSAgICAgICAgICAgICAgc3ViZGlyID0gcm9vdFtsZW4oY29tbW9uX3ByZWZpeCkgKyAxOl0KLQotICAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGluYXRpb24sIGJhc2VuYW1lLCBzdWJkaXIsIGYpCi0gICAgICAgICAgICAgIG91dHB1dHMgKz0gc2VsZi5Xcml0ZUNvcHkoc3JjLCBkc3QsIHByZWJ1aWxkLCBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjX2J1bmRsZV9kZXBlbmRzKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHNyYyA9IHNlbGYuR3lwUGF0aFRvTmluamEocGF0aCwgZW52KQotICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihkZXN0aW5hdGlvbiwgYmFzZW5hbWUpCi0gICAgICAgICAgb3V0cHV0cyArPSBzZWxmLldyaXRlQ29weShzcmMsIGRzdCwgcHJlYnVpbGQsIGVudiwgbWFjX2J1bmRsZV9kZXBlbmRzKQotCi0gICAgcmV0dXJuIG91dHB1dHMKLQotICBkZWYgV3JpdGVNYWNCdW5kbGVSZXNvdXJjZXMoc2VsZiwgcmVzb3VyY2VzLCBidW5kbGVfZGVwZW5kcyk6Ci0gICAgIiIiV3JpdGVzIG5pbmphIGVkZ2VzIGZvciAnbWFjX2J1bmRsZV9yZXNvdXJjZXMnLiIiIgotICAgIGZvciBvdXRwdXQsIHJlcyBpbiBneXAueGNvZGVfZW11bGF0aW9uLkdldE1hY0J1bmRsZVJlc291cmNlcygKLSAgICAgICAgc2VsZi5FeHBhbmRTcGVjaWFsKGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snUFJPRFVDVF9ESVInXSksCi0gICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsIG1hcChzZWxmLkd5cFBhdGhUb05pbmphLCByZXNvdXJjZXMpKToKLSAgICAgIHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgICAgb3V0cHV0LAotICAgICAgICAgICdtYWNfdG9vbCcsCi0gICAgICAgICAgcmVzLAotICAgICAgICAgIHZhcmlhYmxlcz1bKCdtYWN0b29sX2NtZCcsICdjb3B5LWJ1bmRsZS1yZXNvdXJjZScpXSkKLSAgICAgIGJ1bmRsZV9kZXBlbmRzLmFwcGVuZChvdXRwdXQpCi0KLSAgZGVmIFdyaXRlTWFjSW5mb1BsaXN0KHNlbGYsIGJ1bmRsZV9kZXBlbmRzKToKLSAgICAiIiJXcml0ZSBidWlsZCBydWxlcyBmb3IgYnVuZGxlIEluZm8ucGxpc3QgZmlsZXMuIiIiCi0gICAgaW5mb19wbGlzdCwgb3V0LCBkZWZpbmVzLCBleHRyYV9lbnYgPSBneXAueGNvZGVfZW11bGF0aW9uLkdldE1hY0luZm9QbGlzdCgKLSAgICAgICAgc2VsZi5FeHBhbmRTcGVjaWFsKGdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlc1snUFJPRFVDVF9ESVInXSksCi0gICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsIHNlbGYuR3lwUGF0aFRvTmluamEpCi0gICAgaWYgbm90IGluZm9fcGxpc3Q6Ci0gICAgICByZXR1cm4KLSAgICBpZiBkZWZpbmVzOgotICAgICAgIyBDcmVhdGUgYW4gaW50ZXJtZWRpYXRlIGZpbGUgdG8gc3RvcmUgcHJlcHJvY2Vzc2VkIHJlc3VsdHMuCi0gICAgICBpbnRlcm1lZGlhdGVfcGxpc3QgPSBzZWxmLkd5cFBhdGhUb1VuaXF1ZU91dHB1dCgKLSAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGluZm9fcGxpc3QpKQotICAgICAgZGVmaW5lcyA9ICcgJy5qb2luKFtEZWZpbmUoZCwgc2VsZi5mbGF2b3IpIGZvciBkIGluIGRlZmluZXNdKQotICAgICAgaW5mb19wbGlzdCA9IHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgICAgaW50ZXJtZWRpYXRlX3BsaXN0LAotICAgICAgICAgICdpbmZvcGxpc3QnLAotICAgICAgICAgIGluZm9fcGxpc3QsCi0gICAgICAgICAgdmFyaWFibGVzPVsoJ2RlZmluZXMnLCBkZWZpbmVzKV0pCi0KLSAgICBlbnYgPSBzZWxmLkdldFNvcnRlZFhjb2RlRW52KGFkZGl0aW9uYWxfc2V0dGluZ3M9ZXh0cmFfZW52KQotICAgIGVudiA9IHNlbGYuQ29tcHV0ZUV4cG9ydEVudlN0cmluZyhlbnYpCi0KLSAgICBzZWxmLm5pbmphLmJ1aWxkKAotICAgICAgICBvdXQsCi0gICAgICAgICdtYWNfdG9vbCcsCi0gICAgICAgIGluZm9fcGxpc3QsCi0gICAgICAgIHZhcmlhYmxlcz1bKCdtYWN0b29sX2NtZCcsICdjb3B5LWluZm8tcGxpc3QnKSwgKCdlbnYnLCBlbnYpXSkKLSAgICBidW5kbGVfZGVwZW5kcy5hcHBlbmQob3V0KQotCi0gIGRlZiBXcml0ZVNvdXJjZXMoc2VsZiwgY29uZmlnX25hbWUsIGNvbmZpZywgc291cmNlcywgcHJlZGVwZW5kcywKLSAgICAgICAgICAgICAgICAgICBwcmVjb21waWxlZF9oZWFkZXIsIHNwZWMpOgotICAgICIiIldyaXRlIGJ1aWxkIHJ1bGVzIHRvIGNvbXBpbGUgYWxsIG9mIHxzb3VyY2VzfC4iIiIKLSAgICBzaGVsbCA9IEdldFNoZWxsKHNlbGYuZmxhdm9yKQotCi0gICAgaWYgc2VsZi50b29sc2V0ID09ICd0YXJnZXQnOgotICAgICAgdG9vbGNoYWluID0gR2V0VGFyZ2V0VG9vbGNoYWluKAotICAgICAgICAgIHNlbGYuZmxhdm9yLCBzcGVjPXNwZWMsIGNvbmZpZ19uYW1lPWNvbmZpZ19uYW1lKQotICAgIGVsc2U6Ci0gICAgICB0b29sY2hhaW4gPSBHZXRIb3N0VG9vbGNoYWluKAotICAgICAgICAgIHNlbGYuZmxhdm9yLCBzcGVjPXNwZWMsIGNvbmZpZ19uYW1lPWNvbmZpZ19uYW1lKQotCi0gICAgZGVmaW5lcyA9IGNvbmZpZy5nZXQoJ2RlZmluZXMnLCBbXSkKLSAgICBpbmNsdWRlX2RpcnMgPSBbCi0gICAgICAgIHNlbGYuR3lwUGF0aFRvTmluamEoaW5jbHVkZV9kaXIpCi0gICAgICAgIGZvciBpbmNsdWRlX2RpciBpbiBjb25maWcuZ2V0KCdpbmNsdWRlX2RpcnMnLCBbXSkKLSAgICBdCi0KLSAgICAjIFRPRE86IFRoaXMgY29kZSBlbXVsYXRlcyBsZWdhY3kgdG9vbGNoYWluIGJlaGF2aW9yLiBXZSBuZWVkIHRvIG1pZ3JhdGUKLSAgICAjICAgICAgIHRvIHNpbmdsZS1yZXNwb25zaWJpbGl0eSwgdG9vbGNoYWluLWluZGVwZW5kZW50IEdZUCBrZXl3b3JkcyBhcwotICAgICMgICAgICAgcGVyIGFic3RyYWN0IHRvb2xjaGFpbiBkZXNpZ24gZG9jLgotICAgIGNmbGFncyA9IEdldENvbmZpZ0ZsYWdzKGNvbmZpZywgc2VsZi50b29sc2V0LCAnY2ZsYWdzJykKLSAgICBjZmxhZ3NfYyA9IEdldENvbmZpZ0ZsYWdzKGNvbmZpZywgc2VsZi50b29sc2V0LCAnY2ZsYWdzX2MnKQotICAgIGNmbGFnc19jYyA9IEdldENvbmZpZ0ZsYWdzKGNvbmZpZywgc2VsZi50b29sc2V0LCAnY2ZsYWdzX2NjJykKLSAgICBjZmxhZ3NfbW0gPSBHZXRDb25maWdGbGFncyhjb25maWcsIHNlbGYudG9vbHNldCwgJ2NmbGFnc19tbScpCi0gICAgb2JqID0gJ29iaicKLSAgICBpZiBzZWxmLnRvb2xzZXQgIT0gJ3RhcmdldCc6Ci0gICAgICBvYmogKz0gJy4nICsgc2VsZi50b29sc2V0Ci0gICAgcGRicGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgIG9zLnBhdGguam9pbihvYmosIHNlbGYuYmFzZV9kaXIsIHNlbGYubmFtZSArICcucGRiJykpCi0gICAgc2VsZi5Xcml0ZVZhcmlhYmxlTGlzdCgncGRibmFtZScsIFtwZGJwYXRoXSkKLQotICAgIGNfY29tcGlsZXIgPSBGaW5kRmlyc3RJbnN0YW5jZU9mKGFic3RyYWN0LkNDb21waWxlciwgdG9vbGNoYWluKQotICAgIGlmIGNfY29tcGlsZXI6Ci0gICAgICBjX2NvbXBpbGVyX2ZsYWdzID0gY19jb21waWxlci5HZXRGbGFncyhkZWZpbmVzLCBpbmNsdWRlX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmxhZ3MgKyBjZmxhZ3NfYykKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoCi0gICAgICAgICAgJ3swfV9mbGFncycuZm9ybWF0KEdldE5pbmphUnVsZU5hbWUoY19jb21waWxlciwgc2VsZi50b29sc2V0KSksCi0gICAgICAgICAgc2hlbGwuSm9pbihjX2NvbXBpbGVyX2ZsYWdzKSkKLQotICAgIGN4eF9jb21waWxlciA9IEZpbmRGaXJzdEluc3RhbmNlT2YoYWJzdHJhY3QuQ3h4Q29tcGlsZXIsIHRvb2xjaGFpbikKLSAgICBpZiBjeHhfY29tcGlsZXI6Ci0gICAgICBjeHhfY29tcGlsZXJfZmxhZ3MgPSBjeHhfY29tcGlsZXIuR2V0RmxhZ3MoZGVmaW5lcywgaW5jbHVkZV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmbGFncyArIGNmbGFnc19jYykKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoCi0gICAgICAgICAgJ3swfV9mbGFncycuZm9ybWF0KEdldE5pbmphUnVsZU5hbWUoY3h4X2NvbXBpbGVyLCBzZWxmLnRvb2xzZXQpKSwKLSAgICAgICAgICBzaGVsbC5Kb2luKGN4eF9jb21waWxlcl9mbGFncykpCi0KLSAgICBvYmpjeHhfY29tcGlsZXIgPSBGaW5kRmlyc3RJbnN0YW5jZU9mKGFic3RyYWN0Lk9iamVjdGl2ZUN4eENvbXBpbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluKQotICAgIGlmIG9iamN4eF9jb21waWxlcjoKLSAgICAgIG9iamN4eF9jb21waWxlcl9mbGFncyA9IG9iamN4eF9jb21waWxlci5HZXRGbGFncygKLSAgICAgICAgICBkZWZpbmVzLCBpbmNsdWRlX2RpcnMsIGNmbGFncyArIGNmbGFnc19jYyArIGNmbGFnc19tbSkKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoCi0gICAgICAgICAgJ3swfV9mbGFncycuZm9ybWF0KEdldE5pbmphUnVsZU5hbWUob2JqY3h4X2NvbXBpbGVyLCBzZWxmLnRvb2xzZXQpKSwKLSAgICAgICAgICBzaGVsbC5Kb2luKG9iamN4eF9jb21waWxlcl9mbGFncykpCi0KLSAgICBhc3NlbWJsZXIgPSBGaW5kRmlyc3RJbnN0YW5jZU9mKGFic3RyYWN0LkFzc2VtYmxlcldpdGhDUHJlcHJvY2Vzc29yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluKQotICAgIGlmIGFzc2VtYmxlcjoKLSAgICAgIGFzc2VtYmxlcl9mbGFncyA9IGFzc2VtYmxlci5HZXRGbGFncyhkZWZpbmVzLCBpbmNsdWRlX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZsYWdzICsgY2ZsYWdzX2MpCi0gICAgICBzZWxmLm5pbmphLnZhcmlhYmxlKAotICAgICAgICAgICd7MH1fZmxhZ3MnLmZvcm1hdChHZXROaW5qYVJ1bGVOYW1lKGFzc2VtYmxlciwgc2VsZi50b29sc2V0KSksCi0gICAgICAgICAgc2hlbGwuSm9pbihhc3NlbWJsZXJfZmxhZ3MpKQotCi0gICAgc2VsZi5uaW5qYS5uZXdsaW5lKCkKLQotICAgIG91dHB1dHMgPSBbXQotICAgIGZvciBzb3VyY2UgaW4gc291cmNlczoKLSAgICAgIF8sIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoc291cmNlKQotICAgICAgaWYgZXh0ZW5zaW9uIGluIFsnLmMnXToKLSAgICAgICAgYXNzZXJ0IGNfY29tcGlsZXIsICgnVG9vbGNoYWluIG11c3QgcHJvdmlkZSBDIGNvbXBpbGVyIGluIG9yZGVyIHRvICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGQgezB9IGZvciB7MX0gcGxhdGZvcm0uJykuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIHNlbGYudG9vbHNldCkKLSAgICAgICAgcnVsZV9uYW1lID0gR2V0TmluamFSdWxlTmFtZShjX2NvbXBpbGVyLCBzZWxmLnRvb2xzZXQpCi0gICAgICBlbGlmIGV4dGVuc2lvbiBpbiBbJy5jYycsICcuY3BwJywgJy5jeHgnXToKLSAgICAgICAgYXNzZXJ0IGN4eF9jb21waWxlciwgKCdUb29sY2hhaW4gbXVzdCBwcm92aWRlIEMrKyBjb21waWxlciBpbiBvcmRlciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gYnVpbGQgezB9IGZvciB7MX0gcGxhdGZvcm0uJykuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgc2VsZi50b29sc2V0KQotICAgICAgICBydWxlX25hbWUgPSBHZXROaW5qYVJ1bGVOYW1lKGN4eF9jb21waWxlciwgc2VsZi50b29sc2V0KQotICAgICAgZWxpZiBleHRlbnNpb24gaW4gWycubW0nXToKLSAgICAgICAgYXNzZXJ0IG9iamN4eF9jb21waWxlciwgKCdUb29sY2hhaW4gbXVzdCBwcm92aWRlIE9iamVjdGl2ZS1DKysgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGVyIGluIG9yZGVyIHRvIGJ1aWxkIHswfSBmb3IgezF9ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybS4nKS5mb3JtYXQoc291cmNlLCBzZWxmLnRvb2xzZXQpCi0gICAgICAgIHJ1bGVfbmFtZSA9IEdldE5pbmphUnVsZU5hbWUob2JqY3h4X2NvbXBpbGVyLCBzZWxmLnRvb2xzZXQpCi0gICAgICBlbGlmIGV4dGVuc2lvbiBpbiBbJy5TJywgJy5zJ106Ci0gICAgICAgIGFzc2VydCBhc3NlbWJsZXIsICgnVG9vbGNoYWluIG11c3QgcHJvdmlkZSBhc3NlbWJsZXIgaW4gb3JkZXIgdG8gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkIHswfSBmb3IgezF9IHBsYXRmb3JtLicpLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIHNlbGYudG9vbHNldCkKLSAgICAgICAgcnVsZV9uYW1lID0gR2V0TmluamFSdWxlTmFtZShhc3NlbWJsZXIsIHNlbGYudG9vbHNldCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJ1bGVfbmFtZSA9IE5vbmUKLQotICAgICAgaWYgcnVsZV9uYW1lOgotICAgICAgICBpbnB1dCA9IHNlbGYuR3lwUGF0aFRvTmluamEoc291cmNlKQotICAgICAgICBvdXRwdXQgPSAnezB9Lm8nLmZvcm1hdChzZWxmLkd5cFBhdGhUb1VuaXF1ZU91dHB1dChzb3VyY2UpKQotICAgICAgICBzZWxmLm5pbmphLmJ1aWxkKAotICAgICAgICAgICAgb3V0cHV0LAotICAgICAgICAgICAgcnVsZV9uYW1lLAotICAgICAgICAgICAgaW5wdXQsCi0gICAgICAgICAgICBpbXBsaWNpdD1Ob25lLCAgIyBUT0RPOiBJbXBsZW1lbmV0IHByZWNvbXBpbGVkIGhlYWRlcnMuCi0gICAgICAgICAgICBvcmRlcl9vbmx5PXByZWRlcGVuZHMpCi0gICAgICAgIG91dHB1dHMuYXBwZW5kKG91dHB1dCkKLQotICAgIHNlbGYubmluamEubmV3bGluZSgpCi0gICAgcmV0dXJuIG91dHB1dHMKLQotICBkZWYgV3JpdGVMaW5rKHNlbGYsIHNwZWMsIGNvbmZpZ19uYW1lLCBjb25maWcsIGxpbmtfZGVwcyk6Ci0gICAgIiIiV3JpdGUgb3V0IGEgbGluayBzdGVwLiBGaWxscyBvdXQgdGFyZ2V0LmJpbmFyeS4gIiIiCi0gICAgaWYgc2VsZi50b29sc2V0ID09ICd0YXJnZXQnOgotICAgICAgdG9vbGNoYWluID0gR2V0VGFyZ2V0VG9vbGNoYWluKAotICAgICAgICAgIHNlbGYuZmxhdm9yLAotICAgICAgICAgIHNwZWM9c3BlYywKLSAgICAgICAgICBjb25maWdfbmFtZT1jb25maWdfbmFtZSwKLSAgICAgICAgICBneXBfcGF0aF90b19uaW5qYT1zZWxmLkd5cFBhdGhUb05pbmphLAotICAgICAgICAgIGV4cGFuZF9zcGVjaWFsPXNlbGYuRXhwYW5kU3BlY2lhbCwKLSAgICAgICAgICBneXBfcGF0aF90b191bmlxdWVfb3V0cHV0PXNlbGYuR3lwUGF0aFRvVW5pcXVlT3V0cHV0LAotICAgICAgICAgIGNvbXB1dGVfb3V0cHV0X2ZpbGVfbmFtZT1zZWxmLkNvbXB1dGVPdXRwdXRGaWxlTmFtZSkKLSAgICBlbHNlOgotICAgICAgdG9vbGNoYWluID0gR2V0SG9zdFRvb2xjaGFpbigKLSAgICAgICAgICBzZWxmLmZsYXZvciwKLSAgICAgICAgICBzcGVjPXNwZWMsCi0gICAgICAgICAgY29uZmlnX25hbWU9Y29uZmlnX25hbWUsCi0gICAgICAgICAgZ3lwX3BhdGhfdG9fbmluamE9c2VsZi5HeXBQYXRoVG9OaW5qYSwKLSAgICAgICAgICBleHBhbmRfc3BlY2lhbD1zZWxmLkV4cGFuZFNwZWNpYWwsCi0gICAgICAgICAgZ3lwX3BhdGhfdG9fdW5pcXVlX291dHB1dD1zZWxmLkd5cFBhdGhUb1VuaXF1ZU91dHB1dCwKLSAgICAgICAgICBjb21wdXRlX291dHB1dF9maWxlX25hbWU9c2VsZi5Db21wdXRlT3V0cHV0RmlsZU5hbWUpCi0KLSAgICBzaGVsbCA9IEdldFNoZWxsKHNlbGYuZmxhdm9yKQotICAgIGV4dHJhX2JpbmRpbmdzID0gW10KLSAgICB0YXJnZXRfdHlwZSA9IHNwZWNbJ3R5cGUnXQotICAgIGlmIHRhcmdldF90eXBlID09ICdleGVjdXRhYmxlJzoKLSAgICAgIGV4ZWN1dGFibGVfbGlua2VyID0gRmluZEZpcnN0SW5zdGFuY2VPZihhYnN0cmFjdC5FeGVjdXRhYmxlTGlua2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbikKLSAgICAgIGFzc2VydCBleGVjdXRhYmxlX2xpbmtlciwgKCdUb29sY2hhaW4gbXVzdCBwcm92aWRlIGV4ZWN1dGFibGUgbGlua2VyICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgezB9IHBsYXRmb3JtLicpLmZvcm1hdChzZWxmLnRvb2xzZXQpCi0KLSAgICAgIHJ1bGVfbmFtZSA9IEdldE5pbmphUnVsZU5hbWUoZXhlY3V0YWJsZV9saW5rZXIsIHNlbGYudG9vbHNldCkKLQotICAgICAgIyBUT0RPOiBUaGlzIGNvZGUgZW11bGF0ZXMgbGVnYWN5IHRvb2xjaGFpbiBiZWhhdmlvci4gV2UgbmVlZCB0byBtaWdyYXRlCi0gICAgICAjICAgICAgIHRvIHNpbmdsZS1yZXNwb25zaWJpbGl0eSwgdG9vbGNoYWluLWluZGVwZW5kZW50IEdZUCBrZXl3b3JkcyBhcwotICAgICAgIyAgICAgICBwZXIgYWJzdHJhY3QgdG9vbGNoYWluIGRlc2lnbiBkb2MuCi0gICAgICBsaWJyYXJpZXNfa2V5d29yZCA9ICdsaWJyYXJpZXN7MH0nLmZvcm1hdCgnX2hvc3QnIGlmIHNlbGYudG9vbHNldCA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3QnIGVsc2UgJycpCi0gICAgICBsaWJyYXJpZXMgPSBzcGVjLmdldChsaWJyYXJpZXNfa2V5d29yZCwgW10pICsgY29uZmlnLmdldCgKLSAgICAgICAgICBsaWJyYXJpZXNfa2V5d29yZCwgW10pCi0KLSAgICAgIGxkZmxhZ3NfZXhlY3V0YWJsZSA9IEdldENvbmZpZ0ZsYWdzKGNvbmZpZywgc2VsZi50b29sc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xkZmxhZ3NfZXhlY3V0YWJsZScpCi0gICAgICBpZiBub3QgbGRmbGFnc19leGVjdXRhYmxlOgotICAgICAgICBsZGZsYWdzX2V4ZWN1dGFibGUgPSBHZXRDb25maWdGbGFncyhjb25maWcsIHNlbGYudG9vbHNldCwgJ2xkZmxhZ3MnKQotCi0gICAgICBsZGZsYWdzID0gZ3lwLmNvbW1vbi51bmlxdWVyKAotICAgICAgICAgIG1hcChzZWxmLkV4cGFuZFNwZWNpYWwsIGxkZmxhZ3NfZXhlY3V0YWJsZSArIGxpYnJhcmllcykpCi0KLSAgICAgIGV4ZWN1dGFibGVfbGlua2VyX2ZsYWdzID0gZXhlY3V0YWJsZV9saW5rZXIuR2V0RmxhZ3MobGRmbGFncykKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoJ3swfV9mbGFncycuZm9ybWF0KHJ1bGVfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsLkpvaW4oZXhlY3V0YWJsZV9saW5rZXJfZmxhZ3MpKQotICAgIGVsaWYgdGFyZ2V0X3R5cGUgPT0gJ3NoYXJlZF9saWJyYXJ5JzoKLSAgICAgIHNoYXJlZF9saWJyYXJ5X2xpbmtlciA9IEZpbmRGaXJzdEluc3RhbmNlT2YoYWJzdHJhY3QuU2hhcmVkTGlicmFyeUxpbmtlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbGNoYWluKQotICAgICAgYXNzZXJ0IHNoYXJlZF9saWJyYXJ5X2xpbmtlciwgKAotICAgICAgICAgICdUb29sY2hhaW4gbXVzdCBwcm92aWRlIHNoYXJlZCBsaWJyYXJ5IGxpbmtlciAnCi0gICAgICAgICAgJ2ZvciB7MH0gcGxhdGZvcm0uJykuZm9ybWF0KHNlbGYudG9vbHNldCkKLQotICAgICAgcnVsZV9uYW1lID0gR2V0TmluamFSdWxlTmFtZShzaGFyZWRfbGlicmFyeV9saW5rZXIsIHNlbGYudG9vbHNldCkKLQotICAgICAgIyBUT0RPOiBUaGlzIGNvZGUgZW11bGF0ZXMgbGVnYWN5IHRvb2xjaGFpbiBiZWhhdmlvci4gV2UgbmVlZCB0byBtaWdyYXRlCi0gICAgICAjICAgICAgIHRvIHNpbmdsZS1yZXNwb25zaWJpbGl0eSwgdG9vbGNoYWluLWluZGVwZW5kZW50IEdZUCBrZXl3b3JkcyBhcwotICAgICAgIyAgICAgICBwZXIgYWJzdHJhY3QgdG9vbGNoYWluIGRlc2lnbiBkb2MuCi0gICAgICBsaWJyYXJpZXNfa2V5d29yZCA9ICdsaWJyYXJpZXN7MH0nLmZvcm1hdCgnX2hvc3QnIGlmIHNlbGYudG9vbHNldCA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvc3QnIGVsc2UgJycpCi0gICAgICBsaWJyYXJpZXMgPSBzcGVjLmdldChsaWJyYXJpZXNfa2V5d29yZCwgW10pICsgY29uZmlnLmdldCgKLSAgICAgICAgICBsaWJyYXJpZXNfa2V5d29yZCwgW10pCi0KLSAgICAgIGxkZmxhZ3Nfc2hhcmVkID0gR2V0Q29uZmlnRmxhZ3MoY29uZmlnLCBzZWxmLnRvb2xzZXQsICdsZGZsYWdzX3NoYXJlZCcpCi0gICAgICBpZiBub3QgbGRmbGFnc19zaGFyZWQ6Ci0gICAgICAgIGxkZmxhZ3Nfc2hhcmVkID0gR2V0Q29uZmlnRmxhZ3MoY29uZmlnLCBzZWxmLnRvb2xzZXQsICdsZGZsYWdzJykKLQotICAgICAgbGRmbGFncyA9IGd5cC5jb21tb24udW5pcXVlcigKLSAgICAgICAgICBtYXAoc2VsZi5FeHBhbmRTcGVjaWFsLCBsZGZsYWdzX3NoYXJlZCArIGxpYnJhcmllcykpCi0KLSAgICAgIHNoYXJlZF9saWJyYXJ5X2xpbmtlcl9mbGFncyA9IHNoYXJlZF9saWJyYXJ5X2xpbmtlci5HZXRGbGFncyhsZGZsYWdzKQotICAgICAgc2VsZi5uaW5qYS52YXJpYWJsZSgnezB9X2ZsYWdzJy5mb3JtYXQocnVsZV9uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGwuSm9pbihzaGFyZWRfbGlicmFyeV9saW5rZXJfZmxhZ3MpKQotICAgICAgb3V0cHV0ID0gc2VsZi5Db21wdXRlT3V0cHV0KHNwZWMpCi0gICAgICBleHRyYV9iaW5kaW5ncy5hcHBlbmQoKCdzb25hbWUnLCBvcy5wYXRoLnNwbGl0KG91dHB1dClbMV0pKQotICAgICAgZXh0cmFfYmluZGluZ3MuYXBwZW5kKCgnZGxsJywgb3V0cHV0KSkKLSAgICAgIGlmICcvTk9FTlRSWScgbm90IGluIHNoYXJlZF9saWJyYXJ5X2xpbmtlcl9mbGFnczoKLSAgICAgICAgZXh0cmFfYmluZGluZ3MuYXBwZW5kKCgnaW1wbGliZmxhZycsICcvSU1QTElCOiVzJyAlIG91dHB1dCArICcubGliJykpCi0KLSAgICBlbHNlOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUYXJnZXQgdHlwZSB7MH0gaXMgbm90IHN1cHBvcnRlZCBmb3IgdGFyZ2V0IHsxfS4nLmZvcm1hdCgKLSAgICAgICAgICB0YXJnZXRfdHlwZSwgc3BlY1sndGFyZ2V0X25hbWUnXSkpCi0KLSAgICBvcmRlcl9vbmx5X2RlcHMgPSBzZXQoKQotCi0gICAgaWYgJ2RlcGVuZGVuY2llcycgaW4gc3BlYzoKLSAgICAgICMgVHdvIGtpbmRzIG9mIGRlcGVuZGVuY2llczoKLSAgICAgICMgLSBMaW5rYWJsZSBkZXBlbmRlbmNpZXMgKGxpa2UgYSAuYSBvciBhIC5zbyk6IGFkZCB0aGVtIHRvIHRoZSBsaW5rCi0gICAgICAjICAgbGluZS4KLSAgICAgICMgLSBOb24tbGlua2FibGUgZGVwZW5kZW5jaWVzIChsaWtlIGEgcnVsZSB0aGF0IGdlbmVyYXRlcyBhIGZpbGUKLSAgICAgICMgICBhbmQgd3JpdGVzIGEgc3RhbXAgZmlsZSk6IGFkZCB0aGVtIHRvIGltcGxpY2l0X2RlcHMgb3IKLSAgICAgICMgICBvcmRlcl9vbmx5X2RlcHMKLSAgICAgIGV4dHJhX2xpbmtfZGVwcyA9IFtdCi0gICAgICBmb3IgZGVwIGluIHNwZWNbJ2RlcGVuZGVuY2llcyddOgotICAgICAgICB0YXJnZXQgPSBzZWxmLnRhcmdldF9vdXRwdXRzLmdldChkZXApCi0gICAgICAgIGlmIG5vdCB0YXJnZXQ6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgbGlua2FibGUgPSB0YXJnZXQuTGlua2FibGUoKQotICAgICAgICBpZiBsaW5rYWJsZToKLSAgICAgICAgICBleHRyYV9saW5rX2RlcHMuYXBwZW5kKHRhcmdldC5iaW5hcnkpCi0KLSAgICAgICAgZmluYWxfb3V0cHV0ID0gdGFyZ2V0LkZpbmFsT3V0cHV0KCkKLSAgICAgICAgaWYgbm90IGxpbmthYmxlIG9yIGZpbmFsX291dHB1dCAhPSB0YXJnZXQuYmluYXJ5OgotICAgICAgICAgIG9yZGVyX29ubHlfZGVwcy5hZGQoZmluYWxfb3V0cHV0KQotCi0gICAgICAjIGRlZHVwIHRoZSBleHRyYSBsaW5rIGRlcHMgd2hpbGUgcHJlc2VydmluZyBvcmRlcgotICAgICAgc2VlbiA9IHNldCgpCi0gICAgICBleHRyYV9saW5rX2RlcHMgPSBbCi0gICAgICAgICAgeCBmb3IgeCBpbiBleHRyYV9saW5rX2RlcHMgaWYgeCBub3QgaW4gc2VlbiBhbmQgbm90IHNlZW4uYWRkKHgpCi0gICAgICBdCi0KLSAgICAgIGxpbmtfZGVwcy5leHRlbmQoZXh0cmFfbGlua19kZXBzKQotCi0gICAgdGFpbF9kZXBzID0gR2V0Q29uZmlnRmxhZ3MoY29uZmlnLCBzZWxmLnRvb2xzZXQsICdUYWlsRGVwZW5kZW5jaWVzJykKLSAgICBpZiB0YWlsX2RlcHM6Ci0gICAgICBsaW5rX2RlcHMuZXh0ZW5kKG1hcChzZWxmLkV4cGFuZFNwZWNpYWwsIHRhaWxfZGVwcykpCi0KLSAgICBvdXRwdXQgPSBzZWxmLkNvbXB1dGVPdXRwdXQoc3BlYykKLSAgICBzZWxmLnRhcmdldC5iaW5hcnkgPSBvdXRwdXQKLQotICAgIHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgIG91dHB1dCwKLSAgICAgICAgcnVsZV9uYW1lLAotICAgICAgICBsaW5rX2RlcHMsCi0gICAgICAgIG9yZGVyX29ubHk9bGlzdChvcmRlcl9vbmx5X2RlcHMpLAotICAgICAgICB2YXJpYWJsZXM9ZXh0cmFfYmluZGluZ3MpCi0KLSAgZGVmIFdyaXRlVGFyZ2V0KHNlbGYsIHNwZWMsIGNvbmZpZ19uYW1lLCBjb25maWcsIGxpbmtfZGVwcywgY29tcGlsZV9kZXBzKToKLSAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJ25vbmUnOgotICAgICAgIyBUT0RPKGV2YW4pOiBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yICdub25lJyB0YXJnZXQgdHlwZXMsIGFzCi0gICAgICAjIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcsIGFuZCB3ZSBmYWtlIG91dCBhICdiaW5hcnknIHdpdGggYSBzdGFtcCBmaWxlLgotICAgICAgc2VsZi50YXJnZXQuYmluYXJ5ID0gY29tcGlsZV9kZXBzCi0gICAgZWxpZiBzcGVjWyd0eXBlJ10gPT0gJ3N0YXRpY19saWJyYXJ5JzoKLSAgICAgIHNlbGYudGFyZ2V0LmJpbmFyeSA9IHNlbGYuQ29tcHV0ZU91dHB1dChzcGVjKQotICAgICAgdmFyaWFibGVzID0gW10KLQotICAgICAgaWYgc2VsZi50b29sc2V0ID09ICd0YXJnZXQnOgotICAgICAgICB0b29sY2hhaW4gPSBHZXRUYXJnZXRUb29sY2hhaW4oCi0gICAgICAgICAgICBzZWxmLmZsYXZvciwKLSAgICAgICAgICAgIHNwZWM9c3BlYywKLSAgICAgICAgICAgIGNvbmZpZ19uYW1lPWNvbmZpZ19uYW1lLAotICAgICAgICAgICAgZ3lwX3BhdGhfdG9fbmluamE9c2VsZi5HeXBQYXRoVG9OaW5qYSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRvb2xjaGFpbiA9IEdldEhvc3RUb29sY2hhaW4oCi0gICAgICAgICAgICBzZWxmLmZsYXZvciwKLSAgICAgICAgICAgIHNwZWM9c3BlYywKLSAgICAgICAgICAgIGNvbmZpZ19uYW1lPWNvbmZpZ19uYW1lLAotICAgICAgICAgICAgZ3lwX3BhdGhfdG9fbmluamE9c2VsZi5HeXBQYXRoVG9OaW5qYSkKLQotICAgICAgc2hlbGwgPSBHZXRTaGVsbChzZWxmLmZsYXZvcikKLSAgICAgIHN0YXRpY19saW5rZXIgPSBGaW5kRmlyc3RJbnN0YW5jZU9mKGFic3RyYWN0LlN0YXRpY0xpbmtlciwgdG9vbGNoYWluKQotICAgICAgaWYgbm90IHNlbGYuaXNfc3RhbmRhbG9uZV9zdGF0aWNfbGlicmFyeToKLSAgICAgICAgc3RhdGljX3RoaW5fbGlua2VyID0gRmluZEZpcnN0SW5zdGFuY2VPZihhYnN0cmFjdC5TdGF0aWNUaGluTGlua2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xjaGFpbikKLSAgICAgICAgaWYgc3RhdGljX3RoaW5fbGlua2VyOgotICAgICAgICAgIHN0YXRpY19saW5rZXIgPSBzdGF0aWNfdGhpbl9saW5rZXIKLSAgICAgIGFzc2VydCBzdGF0aWNfbGlua2VyLCAoJ1Rvb2xjaGFpbiBtdXN0IHByb3ZpZGUgc3RhdGljIGxpbmtlciBpbiBvcmRlciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBidWlsZCB7MH0gZm9yIHsxfSBwbGF0Zm9ybS4nKS5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5iaW5hcnksIHNlbGYudG9vbHNldCkKLQotICAgICAgcnVsZV9uYW1lID0gR2V0TmluamFSdWxlTmFtZShzdGF0aWNfbGlua2VyLCBzZWxmLnRvb2xzZXQpCi0KLSAgICAgIHN0YXRpY19saW5rZXJfZmxhZ3MgPSBzdGF0aWNfbGlua2VyLkdldEZsYWdzKCkKLSAgICAgIHNlbGYubmluamEudmFyaWFibGUoJ3swfV9mbGFncycuZm9ybWF0KHJ1bGVfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsLkpvaW4oc3RhdGljX2xpbmtlcl9mbGFncykpCi0KLSAgICAgIHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgICAgc2VsZi50YXJnZXQuYmluYXJ5LAotICAgICAgICAgIHJ1bGVfbmFtZSwKLSAgICAgICAgICBsaW5rX2RlcHMsCi0gICAgICAgICAgb3JkZXJfb25seT1jb21waWxlX2RlcHMsCi0gICAgICAgICAgdmFyaWFibGVzPXZhcmlhYmxlcykKLSAgICBlbHNlOgotICAgICAgc2VsZi5Xcml0ZUxpbmsoc3BlYywgY29uZmlnX25hbWUsIGNvbmZpZywgbGlua19kZXBzKQotICAgIHJldHVybiBzZWxmLnRhcmdldC5iaW5hcnkKLQotICBkZWYgV3JpdGVNYWNCdW5kbGUoc2VsZiwgc3BlYywgbWFjX2J1bmRsZV9kZXBlbmRzKToKLSAgICBhc3NlcnQgc2VsZi5pc19tYWNfYnVuZGxlCi0gICAgcGFja2FnZV9mcmFtZXdvcmsgPSBzcGVjWyd0eXBlJ10gaW4gKCdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnKQotICAgIG91dHB1dCA9IHNlbGYuQ29tcHV0ZU1hY0J1bmRsZU91dHB1dCgpCi0gICAgcG9zdGJ1aWxkID0gc2VsZi5HZXRQb3N0YnVpbGRDb21tYW5kKAotICAgICAgICBzcGVjLAotICAgICAgICBvdXRwdXQsCi0gICAgICAgIHNlbGYudGFyZ2V0LmJpbmFyeSwKLSAgICAgICAgaXNfY29tbWFuZF9zdGFydD1ub3QgcGFja2FnZV9mcmFtZXdvcmspCi0gICAgdmFyaWFibGVzID0gW10KLSAgICBpZiBwb3N0YnVpbGQ6Ci0gICAgICB2YXJpYWJsZXMuYXBwZW5kKCgncG9zdGJ1aWxkcycsIHBvc3RidWlsZCkpCi0gICAgaWYgcGFja2FnZV9mcmFtZXdvcms6Ci0gICAgICB2YXJpYWJsZXMuYXBwZW5kKCgndmVyc2lvbicsIHNlbGYueGNvZGVfc2V0dGluZ3MuR2V0RnJhbWV3b3JrVmVyc2lvbigpKSkKLSAgICAgIHNlbGYubmluamEuYnVpbGQoCi0gICAgICAgICAgb3V0cHV0LCAncGFja2FnZV9mcmFtZXdvcmsnLCBtYWNfYnVuZGxlX2RlcGVuZHMsIHZhcmlhYmxlcz12YXJpYWJsZXMpCi0gICAgZWxzZToKLSAgICAgIHNlbGYubmluamEuYnVpbGQob3V0cHV0LCAnc3RhbXAnLCBtYWNfYnVuZGxlX2RlcGVuZHMsIHZhcmlhYmxlcz12YXJpYWJsZXMpCi0gICAgc2VsZi50YXJnZXQuYnVuZGxlID0gb3V0cHV0Ci0gICAgcmV0dXJuIG91dHB1dAotCi0gIGRlZiBHZXRTb3J0ZWRYY29kZUVudihzZWxmLCBhZGRpdGlvbmFsX3NldHRpbmdzPU5vbmUpOgotICAgICIiIlJldHVybnMgdGhlIHZhcmlhYmxlcyBYY29kZSB3b3VsZCBzZXQgZm9yIGJ1aWxkIHN0ZXBzLiIiIgotICAgIGFzc2VydCBzZWxmLmFic19idWlsZF9kaXIKLSAgICBhYnNfYnVpbGRfZGlyID0gc2VsZi5hYnNfYnVpbGRfZGlyCi0gICAgcmV0dXJuIGd5cC54Y29kZV9lbXVsYXRpb24uR2V0U29ydGVkWGNvZGVFbnYoCi0gICAgICAgIHNlbGYueGNvZGVfc2V0dGluZ3MsIGFic19idWlsZF9kaXIsCi0gICAgICAgIG9zLnBhdGguam9pbihhYnNfYnVpbGRfZGlyLCBzZWxmLmJ1aWxkX3RvX2Jhc2UpLCBzZWxmLmNvbmZpZ19uYW1lLAotICAgICAgICBhZGRpdGlvbmFsX3NldHRpbmdzKQotCi0gIGRlZiBHZXRTb3J0ZWRYY29kZVBvc3RidWlsZEVudihzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSB2YXJpYWJsZXMgWGNvZGUgd291bGQgc2V0IGZvciBwb3N0YnVpbGQgc3RlcHMuIiIiCi0gICAgcG9zdGJ1aWxkX3NldHRpbmdzID0ge30KLSAgICAjIENIUk9NSVVNX1NUUklQX1NBVkVfRklMRSBpcyBhIGNocm9taXVtLXNwZWNpZmljIGhhY2suCi0gICAgIyBUT0RPKHRoYWtpcyk6IEl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBzb21lIGdlbmVyYWwgbWVjaGFuaXNtIGluc3RlYWQuCi0gICAgc3RyaXBfc2F2ZV9maWxlID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5nKAotICAgICAgICAnQ0hST01JVU1fU1RSSVBfU0FWRV9GSUxFJykKLSAgICBpZiBzdHJpcF9zYXZlX2ZpbGU6Ci0gICAgICBwb3N0YnVpbGRfc2V0dGluZ3NbJ0NIUk9NSVVNX1NUUklQX1NBVkVfRklMRSddID0gc3RyaXBfc2F2ZV9maWxlCi0gICAgcmV0dXJuIHNlbGYuR2V0U29ydGVkWGNvZGVFbnYoYWRkaXRpb25hbF9zZXR0aW5ncz1wb3N0YnVpbGRfc2V0dGluZ3MpCi0KLSAgZGVmIEdldFBvc3RidWlsZENvbW1hbmQoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYmluYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpc19jb21tYW5kX3N0YXJ0PUZhbHNlKToKLSAgICAiIiJSZXR1cm5zIGEgc2hlbGwgY29tbWFuZCB0aGF0IHJ1bnMgYWxsIHRoZSBwb3N0YnVpbGRzLCBhbmQgcmVtb3ZlcwotCi0gICAgfG91dHB1dHwgaWYgYW55IG9mIHRoZW0gZmFpbHMuIElmIHxpc19jb21tYW5kX3N0YXJ0fCBpcyBGYWxzZSwgdGhlbiB0aGUKLSAgICByZXR1cm5lZCBzdHJpbmcgd2lsbCBzdGFydCB3aXRoICcgJiYgJy4KLSAgICAiIiIKLSAgICBpZiBub3Qgc2VsZi54Y29kZV9zZXR0aW5ncyBvciBzcGVjWyd0eXBlJ10gPT0gJ25vbmUnIG9yIG5vdCBvdXRwdXQ6Ci0gICAgICByZXR1cm4gJycKLSAgICBvdXRwdXQgPSBRdW90ZVNoZWxsQXJndW1lbnQob3V0cHV0LCBzZWxmLmZsYXZvcikKLSAgICB0YXJnZXRfcG9zdGJ1aWxkcyA9IHNlbGYueGNvZGVfc2V0dGluZ3MuR2V0VGFyZ2V0UG9zdGJ1aWxkcygKLSAgICAgICAgc2VsZi5jb25maWdfbmFtZSwKLSAgICAgICAgb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX3RvX2J1aWxkLCBvdXRwdXQpKSwKLSAgICAgICAgUXVvdGVTaGVsbEFyZ3VtZW50KAotICAgICAgICAgICAgb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX3RvX2J1aWxkLCBvdXRwdXRfYmluYXJ5KSksCi0gICAgICAgICAgICBzZWxmLmZsYXZvciksCi0gICAgICAgIHF1aWV0PVRydWUpCi0gICAgcG9zdGJ1aWxkcyA9IGd5cC54Y29kZV9lbXVsYXRpb24uR2V0U3BlY1Bvc3RidWlsZENvbW1hbmRzKHNwZWMsIHF1aWV0PVRydWUpCi0gICAgcG9zdGJ1aWxkcyA9IHRhcmdldF9wb3N0YnVpbGRzICsgcG9zdGJ1aWxkcwotICAgIGlmIG5vdCBwb3N0YnVpbGRzOgotICAgICAgcmV0dXJuICcnCi0gICAgIyBQb3N0YnVpbGRzIGV4cGVjdCB0byBiZSBydW4gaW4gdGhlIGd5cCBmaWxlJ3MgZGlyZWN0b3J5LCBzbyBpbnNlcnQgYW4KLSAgICAjIGltcGxpY2l0IHBvc3RidWlsZCB0byBjZCB0byB0aGVyZS4KLSAgICBwb3N0YnVpbGRzLmluc2VydCgKLSAgICAgICAgMCwgZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChbJ2NkJywgc2VsZi5idWlsZF90b19iYXNlXSkpCi0gICAgZW52ID0gc2VsZi5Db21wdXRlRXhwb3J0RW52U3RyaW5nKHNlbGYuR2V0U29ydGVkWGNvZGVQb3N0YnVpbGRFbnYoKSkKLSAgICAjIEcgd2lsbCBiZSBub24tbnVsbCBpZiBhbnkgcG9zdGJ1aWxkIGZhaWxzLiBSdW4gYWxsIHBvc3RidWlsZHMgaW4gYQotICAgICMgc3Vic2hlbGwuCi0gICAgY29tbWFuZHMgPSBlbnYgKyAnIChGPTA7ICcgKyBcCi0gICAgICAgICcgJy5qb2luKFtuaW5qYV9zeW50YXguZXNjYXBlKGNvbW1hbmQpICsgJyB8fCBGPSQkPzsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBwb3N0YnVpbGRzXSkKLSAgICBjb21tYW5kX3N0cmluZyA9ICgKLSAgICAgICAgY29tbWFuZHMgKyAnIGV4aXQgJCRGKTsgRz0kJD87ICcKLSAgICAgICAgIyBSZW1vdmUgdGhlIGZpbmFsIG91dHB1dCBpZiBhbnkgcG9zdGJ1aWxkIGZhaWxlZC4KLSAgICAgICAgJygoZXhpdCAkJEcpIHx8IHJtIC1yZiAlcykgJyAlIG91dHB1dCArICcmJiBleGl0ICQkRyknKQotICAgIGlmIGlzX2NvbW1hbmRfc3RhcnQ6Ci0gICAgICByZXR1cm4gJygnICsgY29tbWFuZF9zdHJpbmcgKyAnICYmICcKLSAgICBlbHNlOgotICAgICAgcmV0dXJuICckICYmICgnICsgY29tbWFuZF9zdHJpbmcKLQotICBkZWYgQ29tcHV0ZUV4cG9ydEVudlN0cmluZyhzZWxmLCBlbnYpOgotICAgICIiIkdpdmVuIGFuIGVudmlyb25tZW50LCByZXR1cm5zIGEgc3RyaW5nIGxvb2tpbmcgbGlrZQotCi0gICAgICAgICdleHBvcnQgRk9PPWZvbzsgZXhwb3J0IEJBUj0iJHtGT099IGJhcjsnCi0gICAgdGhhdCBleHBvcnRzIHxlbnZ8IHRvIHRoZSBzaGVsbC4KLSAgICAiIiIKLSAgICBleHBvcnRfc3RyID0gW10KLSAgICBmb3IgaywgdiBpbiBlbnY6Ci0gICAgICBleHBvcnRfc3RyLmFwcGVuZCgKLSAgICAgICAgICAnZXhwb3J0ICVzPSVzOycgJQotICAgICAgICAgIChrLCBuaW5qYV9zeW50YXguZXNjYXBlKGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbEFyZ3VtZW50KHYpKSkpCi0gICAgcmV0dXJuICcgJy5qb2luKGV4cG9ydF9zdHIpCi0KLSAgZGVmIENvbXB1dGVNYWNCdW5kbGVPdXRwdXQoc2VsZik6Ci0gICAgIiIiUmV0dXJuIHRoZSAnb3V0cHV0JyAoZnVsbCBvdXRwdXQgcGF0aCkgdG8gYSBidW5kbGUgb3V0cHV0IGRpcmVjdG9yeS4iIiIKLSAgICBhc3NlcnQgc2VsZi5pc19tYWNfYnVuZGxlCi0gICAgcGF0aCA9IHNlbGYuRXhwYW5kU3BlY2lhbChnZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXNbJ1BST0RVQ1RfRElSJ10pCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihwYXRoLCBzZWxmLnhjb2RlX3NldHRpbmdzLkdldFdyYXBwZXJOYW1lKCkpCi0KLSAgZGVmIENvbXB1dGVPdXRwdXRGaWxlTmFtZShzZWxmLCBzcGVjLCB0eXBlPU5vbmUpOgotICAgICIiIkNvbXB1dGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBmaW5hbCBvdXRwdXQgZm9yIHRoZSBjdXJyZW50IHRhcmdldC4iIiIKLSAgICBpZiBub3QgdHlwZToKLSAgICAgIHR5cGUgPSBzcGVjWyd0eXBlJ10KLQotICAgIGRlZmF1bHRfdmFyaWFibGVzID0gR2V0R2VuZXJhdG9yVmFyaWFibGVzKHNlbGYuZmxhdm9yKQotCi0gICAgIyBDb21wdXRlIGZpbGVuYW1lIHByZWZpeDogdGhlIHByb2R1Y3QgcHJlZml4LCBvciBhIGRlZmF1bHQgZm9yCi0gICAgIyB0aGUgcHJvZHVjdCB0eXBlLgotICAgIERFRkFVTFRfUFJFRklYID0gewotICAgICAgICAnbG9hZGFibGVfbW9kdWxlJzogZGVmYXVsdF92YXJpYWJsZXNbJ1NIQVJFRF9MSUJfUFJFRklYJ10sCi0gICAgICAgICdzaGFyZWRfbGlicmFyeSc6IGRlZmF1bHRfdmFyaWFibGVzWydTSEFSRURfTElCX1BSRUZJWCddLAotICAgICAgICAnc3RhdGljX2xpYnJhcnknOiBkZWZhdWx0X3ZhcmlhYmxlc1snU1RBVElDX0xJQl9QUkVGSVgnXSwKLSAgICAgICAgJ2V4ZWN1dGFibGUnOiBkZWZhdWx0X3ZhcmlhYmxlc1snRVhFQ1VUQUJMRV9QUkVGSVgnXSwKLSAgICB9Ci0gICAgcHJlZml4ID0gc3BlYy5nZXQoJ3Byb2R1Y3RfcHJlZml4JywgREVGQVVMVF9QUkVGSVguZ2V0KHR5cGUsICcnKSkKLQotICAgICMgQ29tcHV0ZSBmaWxlbmFtZSBleHRlbnNpb246IHRoZSBwcm9kdWN0IGV4dGVuc2lvbiwgb3IgYSBkZWZhdWx0Ci0gICAgIyBmb3IgdGhlIHByb2R1Y3QgdHlwZS4KLSAgICBERUZBVUxUX0VYVEVOU0lPTiA9IHsKLSAgICAgICAgJ2xvYWRhYmxlX21vZHVsZSc6IGRlZmF1bHRfdmFyaWFibGVzWydTSEFSRURfTElCX1NVRkZJWCddLAotICAgICAgICAnc2hhcmVkX2xpYnJhcnknOiBkZWZhdWx0X3ZhcmlhYmxlc1snU0hBUkVEX0xJQl9TVUZGSVgnXSwKLSAgICAgICAgJ3N0YXRpY19saWJyYXJ5JzogZGVmYXVsdF92YXJpYWJsZXNbJ1NUQVRJQ19MSUJfU1VGRklYJ10sCi0gICAgICAgICdleGVjdXRhYmxlJzogZGVmYXVsdF92YXJpYWJsZXNbJ0VYRUNVVEFCTEVfU1VGRklYJ10sCi0gICAgfQotICAgIGV4dGVuc2lvbiA9IHNwZWMuZ2V0KCdwcm9kdWN0X2V4dGVuc2lvbicpCi0gICAgaWYgZXh0ZW5zaW9uOgotICAgICAgZXh0ZW5zaW9uID0gJy4nICsgZXh0ZW5zaW9uCi0gICAgZWxpZiBzZWxmLnRvb2xzZXQgPT0gJ2hvc3QnOgotICAgICAgIyBUT0RPOiBCYXNlZCBvbiBhIHR5cGUgb2YgdGFyZ2V0LCBhc2sgYSBjb3JyZXNwb25kaW5nCi0gICAgICAjICAgICAgIHRvb2wgZnJvbSBhIHRvb2xjaGFpbiB0byBjb21wdXRlIHRoZSBmaWxlIG5hbWUuCi0gICAgICBpZiBpc193aW5kb3dzOgotICAgICAgICBleHRlbnNpb24gPSAnLmV4ZScKLSAgICAgIGVsc2U6Ci0gICAgICAgIGV4dGVuc2lvbiA9ICcnCi0gICAgZWxzZToKLSAgICAgIGV4dGVuc2lvbiA9IERFRkFVTFRfRVhURU5TSU9OLmdldCh0eXBlLCAnJykKLQotICAgIGlmICdwcm9kdWN0X25hbWUnIGluIHNwZWM6Ci0gICAgICAjIElmIHdlIHdlcmUgZ2l2ZW4gYW4gZXhwbGljaXQgbmFtZSwgdXNlIHRoYXQuCi0gICAgICB0YXJnZXQgPSBzcGVjWydwcm9kdWN0X25hbWUnXQotICAgIGVsc2U6Ci0gICAgICAjIE90aGVyd2lzZSwgZGVyaXZlIGEgbmFtZSBmcm9tIHRoZSB0YXJnZXQgbmFtZS4KLSAgICAgIHRhcmdldCA9IHNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICAgIGlmIHByZWZpeCA9PSAnbGliJzoKLSAgICAgICAgIyBTbmlwIG91dCBhbiBleHRyYSAnbGliJyBmcm9tIGxpYnMgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgIHRhcmdldCA9IFN0cmlwUHJlZml4KHRhcmdldCwgJ2xpYicpCi0KLSAgICBpZiB0eXBlIGluICgnc3RhdGljX2xpYnJhcnknLCAnbG9hZGFibGVfbW9kdWxlJywgJ3NoYXJlZF9saWJyYXJ5JywKLSAgICAgICAgICAgICAgICAnZXhlY3V0YWJsZScpOgotICAgICAgcmV0dXJuICclcyVzJXMnICUgKHByZWZpeCwgdGFyZ2V0LCBleHRlbnNpb24pCi0gICAgZWxpZiB0eXBlID09ICdub25lJzoKLSAgICAgIHJldHVybiAnJXMuc3RhbXAnICUgdGFyZ2V0Ci0gICAgZWxzZToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5oYW5kbGVkIG91dHB1dCB0eXBlICVzJyAlIHR5cGUpCi0KLSAgZGVmIENvbXB1dGVPdXRwdXQoc2VsZiwgc3BlYywgdHlwZT1Ob25lKToKLSAgICAiIiJDb21wdXRlIHRoZSBwYXRoIGZvciB0aGUgZmluYWwgb3V0cHV0IG9mIHRoZSBzcGVjLiIiIgotICAgIGFzc2VydCBub3Qgc2VsZi5pc19tYWNfYnVuZGxlIG9yIHR5cGUKLQotICAgIGlmIG5vdCB0eXBlOgotICAgICAgdHlwZSA9IHNwZWNbJ3R5cGUnXQotCi0gICAgaWYgc2VsZi5mbGF2b3IgPT0gJ3dpbic6Ci0gICAgICBvdmVycmlkZSA9IEdldFRvb2xjaGFpbk9yTm9uZSgKLSAgICAgICAgICBzZWxmLmZsYXZvcikuR2V0Q29tcGlsZXJTZXR0aW5ncygpLkdldE91dHB1dE5hbWUoCi0gICAgICAgICAgICAgIHNlbGYuY29uZmlnX25hbWUsIHNlbGYuRXhwYW5kU3BlY2lhbCkKLSAgICAgIGlmIG92ZXJyaWRlOgotICAgICAgICByZXR1cm4gb3ZlcnJpZGUKLQotICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnIGFuZCB0eXBlIGluICgnc3RhdGljX2xpYnJhcnknLCAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnKToKLSAgICAgIGZpbGVuYW1lID0gc2VsZi54Y29kZV9zZXR0aW5ncy5HZXRFeGVjdXRhYmxlUGF0aCgpCi0gICAgZWxzZToKLSAgICAgIGZpbGVuYW1lID0gc2VsZi5Db21wdXRlT3V0cHV0RmlsZU5hbWUoc3BlYywgdHlwZSkKLQotICAgIGlmICdwcm9kdWN0X2RpcicgaW4gc3BlYzoKLSAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3BlY1sncHJvZHVjdF9kaXInXSwgZmlsZW5hbWUpCi0gICAgICByZXR1cm4gc2VsZi5FeHBhbmRTcGVjaWFsKHBhdGgpCi0KLSAgICAjIFNvbWUgcHJvZHVjdHMgZ28gaW50byB0aGUgb3V0cHV0IHJvb3QsIGxpYnJhcmllcyBnbyBpbnRvIHNoYXJlZCBsaWJyYXJ5Ci0gICAgIyBkaXIsIGFuZCBldmVyeXRoaW5nIGVsc2UgZ29lcyBpbnRvIHRoZSBub3JtYWwgcGxhY2UuCi0gICAgdHlwZV9pbl9vdXRwdXRfcm9vdCA9IFsnZXhlY3V0YWJsZScsICdsb2FkYWJsZV9tb2R1bGUnXQotICAgIGlmIHNlbGYuZmxhdm9yID09ICdtYWMnIGFuZCBzZWxmLnRvb2xzZXQgPT0gJ3RhcmdldCc6Ci0gICAgICB0eXBlX2luX291dHB1dF9yb290ICs9IFsnc2hhcmVkX2xpYnJhcnknLCAnc3RhdGljX2xpYnJhcnknXQotICAgIGVsaWYgc2VsZi5mbGF2b3IgPT0gJ3dpbicgYW5kIHNlbGYudG9vbHNldCA9PSAndGFyZ2V0JzoKLSAgICAgIHR5cGVfaW5fb3V0cHV0X3Jvb3QgKz0gWydzaGFyZWRfbGlicmFyeSddCi0KLSAgICBpZiB0eXBlIGluIHR5cGVfaW5fb3V0cHV0X3Jvb3Qgb3Igc2VsZi5pc19zdGFuZGFsb25lX3N0YXRpY19saWJyYXJ5OgotICAgICAgcmV0dXJuIGZpbGVuYW1lCi0gICAgZWxpZiB0eXBlID09ICdzaGFyZWRfbGlicmFyeSc6Ci0gICAgICBsaWJkaXIgPSAnbGliJwotICAgICAgaWYgc2VsZi50b29sc2V0ICE9ICd0YXJnZXQnOgotICAgICAgICBsaWJkaXIgPSBvcy5wYXRoLmpvaW4oJ2xpYicsICclcycgJSBzZWxmLnRvb2xzZXQpCi0gICAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYmRpciwgZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBzZWxmLkd5cFBhdGhUb1VuaXF1ZU91dHB1dChmaWxlbmFtZSwgcXVhbGlmaWVkPUZhbHNlKQotCi0gIGRlZiBXcml0ZVZhcmlhYmxlTGlzdChzZWxmLCB2YXIsIHZhbHVlcyk6Ci0gICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKHZhbHVlcywgc3RyKQotICAgIGlmIHZhbHVlcyBpcyBOb25lOgotICAgICAgdmFsdWVzID0gW10KLSAgICBzZWxmLm5pbmphLnZhcmlhYmxlKHZhciwgJyAnLmpvaW4odmFsdWVzKSkKLQotICBkZWYgV3JpdGVOZXdOaW5qYVJ1bGUoc2VsZiwgbmFtZSwgYXJncywgZGVzY3JpcHRpb24sIGlzX2N5Z3dpbiwgZW52KToKLSAgICAiIiJXcml0ZSBvdXQgYSBuZXcgbmluamEgInJ1bGUiIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBjb21tYW5kLgotCi0gICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbmV3IHJ1bGUsIGFuZCBhIGNvcHkgb2YgfGFyZ3N8IHdpdGggdmFyaWFibGVzCi0gICAgZXhwYW5kZWQuCi0gICAgIiIiCi0KLSAgICBpZiBzZWxmLmZsYXZvciA9PSAnd2luJzoKLSAgICAgIGFyZ3MgPSBbCi0gICAgICAgICAgR2V0VG9vbGNoYWluT3JOb25lKHNlbGYuZmxhdm9yKS5HZXRDb21waWxlclNldHRpbmdzKCkuQ29udmVydFZTTWFjcm9zKAotICAgICAgICAgICAgICBhcmcsIHNlbGYuYmFzZV90b19idWlsZCwgY29uZmlnPXNlbGYuY29uZmlnX25hbWUpIGZvciBhcmcgaW4gYXJncwotICAgICAgXQotICAgICAgZGVzY3JpcHRpb24gPSBHZXRUb29sY2hhaW5Pck5vbmUoCi0gICAgICAgICAgc2VsZi5mbGF2b3IpLkdldENvbXBpbGVyU2V0dGluZ3MoKS5Db252ZXJ0VlNNYWNyb3MoCi0gICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBjb25maWc9c2VsZi5jb25maWdfbmFtZSkKLSAgICBlbGlmIHNlbGYuZmxhdm9yID09ICdtYWMnOgotICAgICAgIyB8ZW52fCBpcyBhbiBlbXB0eSBsaXN0IG9uIG5vbi1tYWMuCi0gICAgICBhcmdzID0gW2d5cC54Y29kZV9lbXVsYXRpb24uRXhwYW5kRW52VmFycyhhcmcsIGVudikgZm9yIGFyZyBpbiBhcmdzXQotICAgICAgZGVzY3JpcHRpb24gPSBneXAueGNvZGVfZW11bGF0aW9uLkV4cGFuZEVudlZhcnMoZGVzY3JpcHRpb24sIGVudikKLQotICAgICMgVE9ETzogd2Ugc2hvdWxkbid0IG5lZWQgdG8gcXVhbGlmeSBuYW1lczsgd2UgZG8gaXQgYmVjYXVzZQotICAgICMgY3VycmVudGx5IHRoZSBuaW5qYSBydWxlIG5hbWVzcGFjZSBpcyBnbG9iYWwsIGJ1dCBpdCByZWFsbHkKLSAgICAjIHNob3VsZCBiZSBzY29wZWQgdG8gdGhlIHN1Ym5pbmphLgotICAgIHJ1bGVfbmFtZSA9IHNlbGYubmFtZQotICAgIGlmIHNlbGYudG9vbHNldCA9PSAndGFyZ2V0JzoKLSAgICAgIHJ1bGVfbmFtZSArPSAnLicgKyBzZWxmLnRvb2xzZXQKLSAgICBydWxlX25hbWUgKz0gJy4nICsgbmFtZQotICAgIHJ1bGVfbmFtZSA9IHJlLnN1YignW15hLXpBLVowLTlfXScsICdfJywgcnVsZV9uYW1lKQotCi0gICAgIyBSZW1vdmUgdmFyaWFibGUgcmVmZXJlbmNlcywgYnV0IG5vdCBpZiB0aGV5IHJlZmVyIHRvIHRoZSBtYWdpYyBydWxlCi0gICAgIyB2YXJpYWJsZXMuICBUaGlzIGlzIG5vdCBxdWl0ZSByaWdodCwgYXMgaXQgYWxzbyBwcm90ZWN0cyB0aGVzZSBmb3IKLSAgICAjIGFjdGlvbnMsIG5vdCBqdXN0IGZvciBydWxlcyB3aGVyZSB0aGV5IGFyZSB2YWxpZC4gR29vZCBlbm91Z2guCi0gICAgcHJvdGVjdCA9IFsnJHtyb290fScsICcke2Rpcm5hbWV9JywgJyR7c291cmNlfScsICcke2V4dH0nLCAnJHtuYW1lfSddCi0gICAgcHJvdGVjdCA9ICcoPyEnICsgJ3wnLmpvaW4obWFwKHJlLmVzY2FwZSwgcHJvdGVjdCkpICsgJyknCi0gICAgZGVzY3JpcHRpb24gPSByZS5zdWIocHJvdGVjdCArIHInXCQnLCAnXycsIGRlc2NyaXB0aW9uKQotCi0gICAgIyBneXAgZGljdGF0ZXMgdGhhdCBjb21tYW5kcyBhcmUgcnVuIGZyb20gdGhlIGJhc2UgZGlyZWN0b3J5LgotICAgICMgY2QgaW50byB0aGUgZGlyZWN0b3J5IGJlZm9yZSBydW5uaW5nLCBhbmQgYWRqdXN0IHBhdGhzIGluCi0gICAgIyB0aGUgYXJndW1lbnRzIHRvIHBvaW50IHRvIHRoZSBwcm9wZXIgbG9jYXRpb25zLgotICAgIHJzcGZpbGUgPSBOb25lCi0gICAgcnNwZmlsZV9jb250ZW50ID0gTm9uZQotICAgIGFyZ3MgPSBbc2VsZi5FeHBhbmRTcGVjaWFsKGFyZywgc2VsZi5iYXNlX3RvX2J1aWxkKSBmb3IgYXJnIGluIGFyZ3NdCi0gICAgaWYgKHNlbGYuZmxhdm9yIGluIHdpbmRvd3NfaG9zdF9mbGF2b3JzIGFuZCBpc193aW5kb3dzKToKLSAgICAgIHJzcGZpbGUgPSBydWxlX25hbWUgKyAnLiR1bmlxdWVfbmFtZS5yc3AnCi0gICAgICAjIFRoZSBjeWd3aW4gY2FzZSBoYW5kbGVzIHRoaXMgaW5zaWRlIHRoZSBiYXNoIHN1Yi1zaGVsbC4KLSAgICAgIHJ1bl9pbiA9ICcgJyArIHNlbGYuYnVpbGRfdG9fYmFzZQotICAgICAgaWYgc2VsZi5mbGF2b3IgaW4gc29ueV9mbGF2b3JzIG9yIHNlbGYuZmxhdm9yIGluIG5pbnRlbmRvX2ZsYXZvcnM6Ci0gICAgICAgIHJzcGZpbGVfY29udGVudCA9IGd5cC5tc3ZzX2VtdWxhdGlvbi5FbmNvZGVSc3BGaWxlTGlzdChhcmdzKQotICAgICAgZWxzZToKLSAgICAgICAgcnNwZmlsZV9jb250ZW50ID0gR2V0VG9vbGNoYWluT3JOb25lKAotICAgICAgICAgICAgc2VsZi5mbGF2b3IpLkVuY29kZVJzcEZpbGVMaXN0KGFyZ3MpCi0KLSAgICAgIGNvbW1hbmQgPSAoJyVzIGd5cC13aW4tdG9vbCBhY3Rpb24td3JhcHBlciAkYXJjaCAnICUgc3lzLmV4ZWN1dGFibGUgKwotICAgICAgICAgICAgICAgICByc3BmaWxlICsgcnVuX2luKQotICAgIGVsc2U6Ci0gICAgICBlbnYgPSBzZWxmLkNvbXB1dGVFeHBvcnRFbnZTdHJpbmcoZW52KQotICAgICAgY29tbWFuZCA9IGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbExpc3QoYXJncykKLSAgICAgIGNvbW1hbmQgPSAnY2QgJXM7ICcgJSBzZWxmLmJ1aWxkX3RvX2Jhc2UgKyBlbnYgKyBjb21tYW5kCi0KLSAgICAjIEdZUCBydWxlcy9hY3Rpb25zIGV4cHJlc3MgYmVpbmcgbm8tb3BzIGJ5IG5vdCB0b3VjaGluZyB0aGVpciBvdXRwdXRzLgotICAgICMgQXZvaWQgZXhlY3V0aW5nIGRvd25zdHJlYW0gZGVwZW5kZW5jaWVzIGluIHRoaXMgY2FzZSBieSBzcGVjaWZ5aW5nCi0gICAgIyByZXN0YXQ9MSB0byBuaW5qYS4KLSAgICBzZWxmLm5pbmphLnJ1bGUoCi0gICAgICAgIHJ1bGVfbmFtZSwKLSAgICAgICAgY29tbWFuZCwKLSAgICAgICAgZGVzY3JpcHRpb24sCi0gICAgICAgIHJlc3RhdD1UcnVlLAotICAgICAgICByc3BmaWxlPXJzcGZpbGUsCi0gICAgICAgIHJzcGZpbGVfY29udGVudD1yc3BmaWxlX2NvbnRlbnQpCi0gICAgc2VsZi5uaW5qYS5uZXdsaW5lKCkKLQotICAgIHJldHVybiBydWxlX25hbWUsIGFyZ3MKLQotCi1kZWYgQ2FsY3VsYXRlVmFyaWFibGVzKGRlZmF1bHRfdmFyaWFibGVzLCBwYXJhbXMpOgotICAiIiJDYWxjdWxhdGUgYWRkaXRpb25hbCB2YXJpYWJsZXMgZm9yIHVzZSBpbiB0aGUgYnVpbGQgKGNhbGxlZCBieSBneXApLiIiIgotICBnbG9iYWwgZ2VuZXJhdG9yX2FkZGl0aW9uYWxfbm9uX2NvbmZpZ3VyYXRpb25fa2V5cwotICBnbG9iYWwgZ2VuZXJhdG9yX2FkZGl0aW9uYWxfcGF0aF9zZWN0aW9ucwotICBmbGF2b3IgPSBneXAuY29tbW9uLkdldEZsYXZvcihwYXJhbXMpCi0gIGlmIGZsYXZvciA9PSAnbWFjJzoKLSAgICBkZWZhdWx0X3ZhcmlhYmxlcy5zZXRkZWZhdWx0KCdPUycsICdtYWMnKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ1NIQVJFRF9MSUJfU1VGRklYJywgJy5keWxpYicpCi0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdCgnU0hBUkVEX0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX2RlZmF1bHRfdmFyaWFibGVzWydQUk9EVUNUX0RJUiddKQotCi0gICAgIyBDb3B5IGFkZGl0aW9uYWwgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIFhjb2RlLCB3aGljaCBpcyBzaGFyZWQKLSAgICAjIGJ5IHRoZSBNYWMgTmluamEgZ2VuZXJhdG9yLgotICAgIGltcG9ydCBneXAuZ2VuZXJhdG9yLnhjb2RlIGFzIHhjb2RlX2dlbmVyYXRvcgotICAgIGdlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMgPSBnZXRhdHRyKAotICAgICAgICB4Y29kZV9nZW5lcmF0b3IsICdnZW5lcmF0b3JfYWRkaXRpb25hbF9ub25fY29uZmlndXJhdGlvbl9rZXlzJywgW10pCi0gICAgZ2VuZXJhdG9yX2FkZGl0aW9uYWxfcGF0aF9zZWN0aW9ucyA9IGdldGF0dHIoCi0gICAgICAgIHhjb2RlX2dlbmVyYXRvciwgJ2dlbmVyYXRvcl9hZGRpdGlvbmFsX3BhdGhfc2VjdGlvbnMnLCBbXSkKLSAgICBnbG9iYWwgZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzCi0gICAgZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzID0gZ2V0YXR0cigKLSAgICAgICAgeGNvZGVfZ2VuZXJhdG9yLCAnZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzJywgW10pCi0gIGVsaWYgZmxhdm9yIGluIHNvbnlfZmxhdm9ycyBvciBmbGF2b3IgaW4gbmludGVuZG9fZmxhdm9yczoKLSAgICBpZiBmbGF2b3IgaW4gc29ueV9mbGF2b3JzOgotICAgICAgZGVmYXVsdF92YXJpYWJsZXNbJ0VYRUNVVEFCTEVfU1VGRklYJ10gPSAnLmVsZicKLSAgICBlbHNlOgotICAgICAgZGVmYXVsdF92YXJpYWJsZXNbJ0VYRUNVVEFCTEVfU1VGRklYJ10gPSAnLmV4ZScKLSAgICBkZWZhdWx0X3ZhcmlhYmxlc1snU0hBUkVEX0xJQl9QUkVGSVgnXSA9ICdsaWInCi0gICAgZGVmYXVsdF92YXJpYWJsZXNbJ1NIQVJFRF9MSUJfU1VGRklYJ10gPSAnLnNvJwotICAgICMgQ29weSBhZGRpdGlvbmFsIGdlbmVyYXRvciBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBWUywgd2hpY2ggaXMgc2hhcmVkCi0gICAgIyBieSB0aGUgV2luZG93cyBOaW5qYSBnZW5lcmF0b3IuCi0gICAgaW1wb3J0IGd5cC5nZW5lcmF0b3IubXN2cyBhcyBtc3ZzX2dlbmVyYXRvcgotICAgIGdlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMgPSBnZXRhdHRyKAotICAgICAgICBtc3ZzX2dlbmVyYXRvciwgJ2dlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMnLCBbXSkKLSAgICBnZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zID0gZ2V0YXR0cigKLSAgICAgICAgbXN2c19nZW5lcmF0b3IsICdnZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zJywgW10pCi0gIGVsc2U6Ci0gICAgb3BlcmF0aW5nX3N5c3RlbSA9IGZsYXZvcgotICAgIGlmIGZsYXZvciA9PSAnYW5kcm9pZCc6Ci0gICAgICBvcGVyYXRpbmdfc3lzdGVtID0gJ2xpbnV4JyAgIyBLZWVwIHRoaXMgbGVnYWN5IGJlaGF2aW9yIGZvciBub3cuCi0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdCgnT1MnLCBvcGVyYXRpbmdfc3lzdGVtKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ1NIQVJFRF9MSUJfU1VGRklYJywgJy5zbycpCi0gICAgZGVmYXVsdF92YXJpYWJsZXMuc2V0ZGVmYXVsdCgnU0hBUkVEX0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKCckIVBST0RVQ1RfRElSJywgJ2xpYicpKQotICAgIGRlZmF1bHRfdmFyaWFibGVzLnNldGRlZmF1bHQoJ0xJQl9ESVInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKCckIVBST0RVQ1RfRElSJywgJ29iaicpKQotCi0KLWRlZiBDb21wdXRlT3V0cHV0RGlyKHBhcmFtcyk6Ci0gICIiIlJldHVybnMgdGhlIHBhdGggZnJvbSB0aGUgdG9wbGV2ZWxfZGlyIHRvIHRoZSBidWlsZCBvdXRwdXQgZGlyZWN0b3J5LiIiIgotICAjIGdlbmVyYXRvcl9kaXI6IHJlbGF0aXZlIHBhdGggZnJvbSBwd2QgdG8gd2hlcmUgbWFrZSBwdXRzIGJ1aWxkIGZpbGVzLgotICAjIE1ha2VzIG1pZ3JhdGluZyBmcm9tIG1ha2UgdG8gbmluamEgZWFzaWVyLCBuaW5qYSBkb2Vzbid0IHB1dCBhbnl0aGluZyBoZXJlLgotICBnZW5lcmF0b3JfZGlyID0gb3MucGF0aC5yZWxwYXRoKHBhcmFtc1snb3B0aW9ucyddLmdlbmVyYXRvcl9vdXRwdXQgb3IgJy4nKQotCi0gICMgb3V0cHV0X2RpcjogcmVsYXRpdmUgcGF0aCBmcm9tIGdlbmVyYXRvcl9kaXIgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgb3V0cHV0X2RpciA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KS5nZXQoJ291dHB1dF9kaXInLCAnb3V0JykKLQotICAjIFJlbGF0aXZlIHBhdGggZnJvbSBzb3VyY2Ugcm9vdCB0byBvdXIgb3V0cHV0IGZpbGVzLiAgZS5nLiAib3V0IgotICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZ2VuZXJhdG9yX2Rpciwgb3V0cHV0X2RpcikpCi0KLQotZGVmIENhbGN1bGF0ZUdlbmVyYXRvcklucHV0SW5mbyhwYXJhbXMpOgotICAiIiJDYWxsZWQgYnkgX19pbml0X18gdG8gaW5pdGlhbGl6ZSBnZW5lcmF0b3IgdmFsdWVzIGJhc2VkIG9uIHBhcmFtcy4iIiIKLSAgdXNlcl9jb25maWcgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkuZ2V0KCdjb25maWcnLCBOb25lKQotICB0b3BsZXZlbCA9IHBhcmFtc1snb3B0aW9ucyddLnRvcGxldmVsX2RpcgotICBxdWFsaWZpZWRfb3V0X2RpciA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4odG9wbGV2ZWwsIENvbXB1dGVPdXRwdXREaXIocGFyYW1zKSwgdXNlcl9jb25maWcsICdneXBmaWxlcycpKQotCi0gIGdsb2JhbCBnZW5lcmF0b3JfZmlsZWxpc3RfcGF0aHMKLSAgZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzID0gewotICAgICAgJ3RvcGxldmVsJzogdG9wbGV2ZWwsCi0gICAgICAncXVhbGlmaWVkX291dF9kaXInOiBxdWFsaWZpZWRfb3V0X2RpciwKLSAgfQotCi0KLWRlZiBPcGVuT3V0cHV0KHBhdGgsIG1vZGU9J3cnKToKLSAgIiIiT3BlbiB8cGF0aHwgZm9yIHdyaXRpbmcsIGNyZWF0aW5nIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc2FyeS4iIiIKLSAgdHJ5OgotICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShwYXRoKSkKLSAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgcGFzcwotICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQotCi0KLWRlZiBNYXliZVdyaXRlUGF0aFZhcmlhYmxlKG5pbmphLCB0b29sLCB0b29sc2V0KToKLSAgaWYgdG9vbC5HZXRQYXRoKCk6Ci0gICAgbmluamEudmFyaWFibGUoJ3swfV9wYXRoJy5mb3JtYXQoR2V0TmluamFSdWxlTmFtZSh0b29sLCB0b29sc2V0KSksCi0gICAgICAgICAgICAgICAgICAgdG9vbC5HZXRQYXRoKCkpCi0KLQotZGVmIE1heWJlV3JpdGVFeHRyYUZsYWdzVmFyaWFibGUobmluamEsIHRvb2wsIHRvb2xzZXQsIHNoZWxsKToKLSAgaWYgdG9vbC5HZXRFeHRyYUZsYWdzKCk6Ci0gICAgbmluamEudmFyaWFibGUoJ3swfV9leHRyYV9mbGFncycuZm9ybWF0KEdldE5pbmphUnVsZU5hbWUodG9vbCwgdG9vbHNldCkpLAotICAgICAgICAgICAgICAgICAgIHNoZWxsLkpvaW4odG9vbC5HZXRFeHRyYUZsYWdzKCkpKQotCi0KLWRlZiBNYXliZVdyaXRlUG9vbChuaW5qYSwgdG9vbCwgdG9vbHNldCk6Ci0gIGlmIHRvb2wuR2V0TWF4Q29uY3VycmVudFByb2Nlc3NlcygpOgotICAgIG5pbmphLnBvb2woCi0gICAgICAgICd7MH1fcG9vbCcuZm9ybWF0KEdldE5pbmphUnVsZU5hbWUodG9vbCwgdG9vbHNldCkpLAotICAgICAgICBkZXB0aD10b29sLkdldE1heENvbmN1cnJlbnRQcm9jZXNzZXMoKSkKLQotCi1kZWYgTWF5YmVXcml0ZVJ1bGUobmluamEsIHRvb2wsIHRvb2xzZXQsIHNoZWxsKToKLSAgaWYgdG9vbC5HZXRSdWxlTmFtZSgpOgotICAgIG5hbWUgPSBHZXROaW5qYVJ1bGVOYW1lKHRvb2wsIHRvb2xzZXQpCi0KLSAgICBwYXRoID0gJyR7MH1fcGF0aCcuZm9ybWF0KG5hbWUpCi0gICAgZXh0cmFfZmxhZ3MgPSAnJHswfV9leHRyYV9mbGFncycuZm9ybWF0KG5hbWUpCi0gICAgZmxhZ3MgPSAnJHswfV9mbGFncycuZm9ybWF0KG5hbWUpCi0gICAgcG9vbCA9ICd7MH1fcG9vbCcuZm9ybWF0KG5hbWUpIGlmIHRvb2wuR2V0TWF4Q29uY3VycmVudFByb2Nlc3NlcygpIGVsc2UgTm9uZQotCi0gICAgbmluamEucnVsZSgKLSAgICAgICAgbmFtZSwKLSAgICAgICAgdG9vbC5HZXRDb21tYW5kKHBhdGgsIGV4dHJhX2ZsYWdzLCBmbGFncywgc2hlbGwpLAotICAgICAgICBkZXNjcmlwdGlvbj10b29sLkdldERlc2NyaXB0aW9uKCksCi0gICAgICAgIGRlcGZpbGU9dG9vbC5HZXRIZWFkZXJEZXBlbmRlbmNpZXNGaWxlUGF0aCgpLAotICAgICAgICBkZXBzPXRvb2wuR2V0SGVhZGVyRGVwZW5kZW5jaWVzRm9ybWF0KCksCi0gICAgICAgIHBvb2w9cG9vbCwKLSAgICAgICAgcnNwZmlsZT10b29sLkdldFJzcEZpbGVQYXRoKCksCi0gICAgICAgIHJzcGZpbGVfY29udGVudD10b29sLkdldFJzcEZpbGVDb250ZW50KCksCi0gICAgICAgIHJlc3RhdD10b29sLkdldFJlc3RhdCgpKQotCi0KLWRlZiBHZW5lcmF0ZU91dHB1dEZvckNvbmZpZyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX25hbWUpOgotICBvcHRpb25zID0gcGFyYW1zWydvcHRpb25zJ10KLSAgZmxhdm9yID0gZ3lwLmNvbW1vbi5HZXRGbGF2b3IocGFyYW1zKQotCi0gIGdlbmVyYXRvcl9mbGFncyA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KQotCi0gICMgYnVpbGRfZGlyOiByZWxhdGl2ZSBwYXRoIGZyb20gc291cmNlIHJvb3QgdG8gb3VyIG91dHB1dCBmaWxlcy4KLSAgIyBlLmcuICJvdXQvRGVidWciCi0gIGJ1aWxkX2RpciA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICBvcy5wYXRoLmpvaW4oQ29tcHV0ZU91dHB1dERpcihwYXJhbXMpLCBjb25maWdfbmFtZSkpCi0KLSAgdG9wbGV2ZWxfYnVpbGQgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy50b3BsZXZlbF9kaXIsIGJ1aWxkX2RpcikKLQotICBtYXN0ZXJfbmluamEgPSBuaW5qYV9zeW50YXguV3JpdGVyKAotICAgICAgT3Blbk91dHB1dChvcy5wYXRoLmpvaW4odG9wbGV2ZWxfYnVpbGQsICdidWlsZC5uaW5qYScpKSwgd2lkdGg9MTIwKQotICBjYXNlX3NlbnNpdGl2ZV9maWxlc3lzdGVtID0gVHJ1ZQotCi0gIGJ1aWxkX2ZpbGUsIF8sIF8gPSBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KHRhcmdldF9saXN0WzBdKQotICBtYWtlX2dsb2JhbF9zZXR0aW5ncyA9IGRhdGFbYnVpbGRfZmlsZV0uZ2V0KCdtYWtlX2dsb2JhbF9zZXR0aW5ncycsIFtdKQotCi0gICMgVG8gYXZvaWQgZHVwbGljYXRpb24sIHBsYXRmb3JtLWFnbm9zdGljIHRvb2xzIChzdWNoIGFzIHN0YW1wIGFuZCBjb3B5KQotICAjIHdpbGwgYmUgcHJvY2Vzc2VkIG9ubHkgaW4gdGhlIGhvc3QgdG9vbGNoYWluLgotICB0YXJnZXRfdG9vbGNoYWluID0gWwotICAgICAgdGFyZ2V0X3Rvb2wgZm9yIHRhcmdldF90b29sIGluIEdldFRhcmdldFRvb2xjaGFpbihmbGF2b3IpCi0gICAgICBpZiBub3QgdGFyZ2V0X3Rvb2wuSXNQbGF0Zm9ybUFnbm9zdGljKCkKLSAgXQotICBob3N0X3Rvb2xjaGFpbiA9IEdldEhvc3RUb29sY2hhaW4oZmxhdm9yKQotCi0gIHNoZWxsID0gR2V0U2hlbGwoZmxhdm9yKQotCi0gIGZvciB0YXJnZXRfdG9vbCBpbiB0YXJnZXRfdG9vbGNoYWluOgotICAgIE1heWJlV3JpdGVQYXRoVmFyaWFibGUobWFzdGVyX25pbmphLCB0YXJnZXRfdG9vbCwgJ3RhcmdldCcpCi0gIGZvciBob3N0X3Rvb2wgaW4gaG9zdF90b29sY2hhaW46Ci0gICAgTWF5YmVXcml0ZVBhdGhWYXJpYWJsZShtYXN0ZXJfbmluamEsIGhvc3RfdG9vbCwgJ2hvc3QnKQotICBtYXN0ZXJfbmluamEubmV3bGluZSgpCi0KLSAgZm9yIHRhcmdldF90b29sIGluIHRhcmdldF90b29sY2hhaW46Ci0gICAgTWF5YmVXcml0ZUV4dHJhRmxhZ3NWYXJpYWJsZShtYXN0ZXJfbmluamEsIHRhcmdldF90b29sLCAndGFyZ2V0Jywgc2hlbGwpCi0gIGZvciBob3N0X3Rvb2wgaW4gaG9zdF90b29sY2hhaW46Ci0gICAgTWF5YmVXcml0ZUV4dHJhRmxhZ3NWYXJpYWJsZShtYXN0ZXJfbmluamEsIGhvc3RfdG9vbCwgJ2hvc3QnLCBzaGVsbCkKLSAgbWFzdGVyX25pbmphLm5ld2xpbmUoKQotCi0gIGZvciB0YXJnZXRfdG9vbCBpbiB0YXJnZXRfdG9vbGNoYWluOgotICAgIE1heWJlV3JpdGVQb29sKG1hc3Rlcl9uaW5qYSwgdGFyZ2V0X3Rvb2wsICd0YXJnZXQnKQotICBmb3IgaG9zdF90b29sIGluIGhvc3RfdG9vbGNoYWluOgotICAgIE1heWJlV3JpdGVQb29sKG1hc3Rlcl9uaW5qYSwgaG9zdF90b29sLCAnaG9zdCcpCi0gIG1hc3Rlcl9uaW5qYS5uZXdsaW5lKCkKLQotICBmb3IgdGFyZ2V0X3Rvb2wgaW4gdGFyZ2V0X3Rvb2xjaGFpbjoKLSAgICBNYXliZVdyaXRlUnVsZShtYXN0ZXJfbmluamEsIHRhcmdldF90b29sLCAndGFyZ2V0Jywgc2hlbGwpCi0gIGZvciBob3N0X3Rvb2wgaW4gaG9zdF90b29sY2hhaW46Ci0gICAgTWF5YmVXcml0ZVJ1bGUobWFzdGVyX25pbmphLCBob3N0X3Rvb2wsICdob3N0Jywgc2hlbGwpCi0gIG1hc3Rlcl9uaW5qYS5uZXdsaW5lKCkKLQotICAjIENvcHkgdGhlIGd5cC13aW4tdG9vbCB0byB0aGUgdG9wbGV2ZWxfYnVpbGQuCi0gICMgQWxzbyB3cml0ZSBweXRob24gdG8gdGhlIG1hc3Rlcl9uaW5qYS4KLSAgaWYgaXNfd2luZG93czoKLSAgICBneXAuY29tbW9uLkNvcHlUb29sKGZsYXZvciwgdG9wbGV2ZWxfYnVpbGQpCi0gICAgaWYgR2V0VG9vbGNoYWluT3JOb25lKGZsYXZvcik6Ci0gICAgICBHZXRUb29sY2hhaW5Pck5vbmUoZmxhdm9yKS5HZW5lcmF0ZUVudmlyb25tZW50RmlsZXMoCi0gICAgICAgICAgdG9wbGV2ZWxfYnVpbGQsIGdlbmVyYXRvcl9mbGFncywgT3Blbk91dHB1dCkKLSAgICBlbHNlOgotICAgICAgZ3lwLm1zdnNfZW11bGF0aW9uLkdlbmVyYXRlRW52aXJvbm1lbnRGaWxlcyh0b3BsZXZlbF9idWlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX2ZsYWdzLCBPcGVuT3V0cHV0KQotCi0gICMgV3JpdGUgcHl0aG9uIGV4ZWN1dGFibGVzIHRvIHRoZSBtYXN0ZXIgbmluamEuCi0gICMgTGV0ICdweXRob24nIHJlc29sdmUgdG8gd2hhdCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCi0gICMgQXNzdW1lIHRoaXMgZmlsZSBpcyBleGVjdXRlZCB1c2luZyBweXRob24yLgotICBtYXN0ZXJfbmluamEudmFyaWFibGUoJ3B5dGhvbjInLCBzeXMuZXhlY3V0YWJsZSkKLSAgbWFzdGVyX25pbmphLm5ld2xpbmUoKQotCi0gICMgRG9uJ3Qgd3JpdGUgcHl0aG9uMyBleGVjdHVhYmxlIHVudGlsIHdlIGVuc3VyZSBpdCdzIGluIGRvY2tlciBjb250YWluZXJzLgotICAjCi0gICMgcHl0aG9uM19leGVjdXRhYmxlID0gJ3B5IC0zJyBpZiBpc193aW5kb3dzIGVsc2UgJ3B5dGhvbjMnCi0gICMgY21kID0gKCd7fSAtYyAiaW1wb3J0IG9zOyBpbXBvcnQgc3lzOyAnCi0gICMgICAgICAgICdwcmludChvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpKSInKS5mb3JtYXQocHl0aG9uM19leGVjdXRhYmxlKQotICAjIHB5dGhvbjNfbG9jYXRpb24gPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpLnN0cmlwKCkKLSAgIyBtYXN0ZXJfbmluamEudmFyaWFibGUoJ3B5dGhvbjMnLCBweXRob24zX2xvY2F0aW9uKQotICAjIG1hc3Rlcl9uaW5qYS5uZXdsaW5lKCkKLQotICBhbGxfdGFyZ2V0cyA9IHNldCgpCi0gIGZvciBidWlsZF9maWxlIGluIHBhcmFtc1snYnVpbGRfZmlsZXMnXToKLSAgICBmb3IgdGFyZ2V0IGluIGd5cC5jb21tb24uQWxsVGFyZ2V0cyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgubm9ybXBhdGgoYnVpbGRfZmlsZSkpOgotICAgICAgYWxsX3RhcmdldHMuYWRkKHRhcmdldCkKLSAgYWxsX291dHB1dHMgPSBzZXQoKQotCi0gICMgdGFyZ2V0X291dHB1dHMgaXMgYSBtYXAgZnJvbSBxdWFsaWZpZWQgdGFyZ2V0IG5hbWUgdG8gYSBUYXJnZXQgb2JqZWN0LgotICB0YXJnZXRfb3V0cHV0cyA9IHt9Ci0gICMgdGFyZ2V0X3Nob3J0X25hbWVzIGlzIGEgbWFwIGZyb20gdGFyZ2V0IHNob3J0IG5hbWUgdG8gYSBsaXN0IG9mIFRhcmdldAotICAjIG9iamVjdHMuCi0gIHRhcmdldF9zaG9ydF9uYW1lcyA9IHt9Ci0gIGRlZmF1bHRfcHJvamVjdCA9IE5vbmUKLSAgZm9yIHF1YWxpZmllZF90YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgIyBxdWFsaWZpZWRfdGFyZ2V0IGlzIGxpa2U6IHRoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWkxOG4jdGFyZ2V0Ci0gICAgYnVpbGRfZmlsZSwgbmFtZSwgdG9vbHNldCA9IFwKLSAgICAgICAgZ3lwLmNvbW1vbi5QYXJzZVF1YWxpZmllZFRhcmdldChxdWFsaWZpZWRfdGFyZ2V0KQotCi0gICAgdGhpc19tYWtlX2dsb2JhbF9zZXR0aW5ncyA9IGRhdGFbYnVpbGRfZmlsZV0uZ2V0KCdtYWtlX2dsb2JhbF9zZXR0aW5ncycsIFtdKQotICAgIGFzc2VydCBtYWtlX2dsb2JhbF9zZXR0aW5ncyA9PSB0aGlzX21ha2VfZ2xvYmFsX3NldHRpbmdzLCAoCi0gICAgICAgICdtYWtlX2dsb2JhbF9zZXR0aW5ncyBuZWVkcyB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIHRhcmdldHMuJykKLQotICAgIHNwZWMgPSB0YXJnZXRfZGljdHNbcXVhbGlmaWVkX3RhcmdldF0KLQotICAgIGlmIHNwZWMuZ2V0KCdkZWZhdWx0X3Byb2plY3QnLCAwKToKLSAgICAgIGlmIGRlZmF1bHRfcHJvamVjdCBpcyBOb25lIG9yIGRlZmF1bHRfcHJvamVjdCA9PSBuYW1lOgotICAgICAgICBkZWZhdWx0X3Byb2plY3QgPSBuYW1lCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oJ01vcmUgdGhhbiBvbmUgZGVmYXVsdF9wcm9qZWN0IHNwZWNpZmllZC4nCi0gICAgICAgICAgICAgICAgICAgICAgICAnRmlyc3QgaW4gezB9IGFuZCBub3cgaW4gezF9Jy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wcm9qZWN0LCBuYW1lKSkKLQotICAgIGlmIGZsYXZvciA9PSAnbWFjJzoKLSAgICAgIGd5cC54Y29kZV9lbXVsYXRpb24uTWVyZ2VHbG9iYWxYY29kZVNldHRpbmdzVG9TcGVjKGRhdGFbYnVpbGRfZmlsZV0sIHNwZWMpCi0KLSAgICBidWlsZF9maWxlID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoYnVpbGRfZmlsZSwgb3B0aW9ucy50b3BsZXZlbF9kaXIpCi0KLSAgICBiYXNlX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoYnVpbGRfZmlsZSkKLSAgICBvYmogPSAnb2JqJwotICAgIGlmIHRvb2xzZXQgIT0gJ3RhcmdldCc6Ci0gICAgICBvYmogKz0gJy4nICsgdG9vbHNldAotICAgIG91dHB1dF9maWxlID0gb3MucGF0aC5qb2luKG9iaiwgYmFzZV9wYXRoLCBuYW1lICsgJy5uaW5qYScpCi0KLSAgICBhYnNfYnVpbGRfZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcGxldmVsX2J1aWxkKQotICAgIHdyaXRlciA9IE5pbmphV3JpdGVyKAotICAgICAgICBxdWFsaWZpZWRfdGFyZ2V0LAotICAgICAgICB0YXJnZXRfb3V0cHV0cywKLSAgICAgICAgYmFzZV9wYXRoLAotICAgICAgICBidWlsZF9kaXIsCi0gICAgICAgIE9wZW5PdXRwdXQob3MucGF0aC5qb2luKHRvcGxldmVsX2J1aWxkLCBvdXRwdXRfZmlsZSkpLAotICAgICAgICBmbGF2b3IsCi0gICAgICAgIGNhc2Vfc2Vuc2l0aXZlX2ZpbGVzeXN0ZW0sCi0gICAgICAgIGFic19idWlsZF9kaXI9YWJzX2J1aWxkX2RpcikKLSAgICBtYXN0ZXJfbmluamEuc3VibmluamEob3V0cHV0X2ZpbGUpCi0KLSAgICB0YXJnZXQgPSB3cml0ZXIuV3JpdGVTcGVjKHNwZWMsIGNvbmZpZ19uYW1lLCBnZW5lcmF0b3JfZmxhZ3MpCi0gICAgaWYgdGFyZ2V0OgotICAgICAgaWYgbmFtZSAhPSB0YXJnZXQuRmluYWxPdXRwdXQoKToKLSAgICAgICAgb3V0X25hbWUgPSBuYW1lCi0gICAgICAgIGlmIHRvb2xzZXQgIT0gJ3RhcmdldCc6Ci0gICAgICAgICAgb3V0X25hbWUgPSBvdXRfbmFtZSArICcuJyArIHRvb2xzZXQKLSAgICAgICAgdGFyZ2V0X3Nob3J0X25hbWVzLnNldGRlZmF1bHQob3V0X25hbWUsIFtdKS5hcHBlbmQodGFyZ2V0KQotICAgICAgdGFyZ2V0X291dHB1dHNbcXVhbGlmaWVkX3RhcmdldF0gPSB0YXJnZXQKLSAgICAgIGlmIHF1YWxpZmllZF90YXJnZXQgaW4gYWxsX3RhcmdldHM6Ci0gICAgICAgIGFsbF9vdXRwdXRzLmFkZCh0YXJnZXQuRmluYWxPdXRwdXQoKSkKLQotICBpZiB0YXJnZXRfc2hvcnRfbmFtZXM6Ci0gICAgIyBXcml0ZSBhIHNob3J0IG5hbWUgdG8gYnVpbGQgdGhpcyB0YXJnZXQuICBUaGlzIGJlbmVmaXRzIGJvdGggdGhlCi0gICAgIyAiYnVpbGQgY2hyb21lIiBjYXNlIGFzIHdlbGwgYXMgdGhlIGd5cCB0ZXN0cywgd2hpY2ggZXhwZWN0IHRvIGJlCi0gICAgIyBhYmxlIHRvIHJ1biBhY3Rpb25zIGFuZCBidWlsZCBsaWJyYXJpZXMgYnkgdGhlaXIgc2hvcnQgbmFtZS4KLSAgICBtYXN0ZXJfbmluamEubmV3bGluZSgpCi0gICAgbWFzdGVyX25pbmphLmNvbW1lbnQoJ1Nob3J0IG5hbWVzIGZvciB0YXJnZXRzLicpCi0gICAgZm9yIHNob3J0X25hbWUgaW4gdGFyZ2V0X3Nob3J0X25hbWVzOgotICAgICAgbWFzdGVyX25pbmphLmJ1aWxkKAotICAgICAgICAgIHNob3J0X25hbWUsICdwaG9ueScsCi0gICAgICAgICAgW3guRmluYWxPdXRwdXQoKSBmb3IgeCBpbiB0YXJnZXRfc2hvcnRfbmFtZXNbc2hvcnRfbmFtZV1dKQotCi0gIGlmIGFsbF9vdXRwdXRzOgotICAgIG1hc3Rlcl9uaW5qYS5uZXdsaW5lKCkKLSAgICBtYXN0ZXJfbmluamEuYnVpbGQoJ2FsbCcsICdwaG9ueScsIGxpc3QoYWxsX291dHB1dHMpKQotICAgIGlmIGRlZmF1bHRfcHJvamVjdDoKLSAgICAgIG1hc3Rlcl9uaW5qYS5kZWZhdWx0KGRlZmF1bHRfcHJvamVjdCkKLSAgICBlbHNlOgotICAgICAgbWFzdGVyX25pbmphLmRlZmF1bHQoJ2FsbCcpCi0KLQotZGVmIFBlcmZvcm1CdWlsZChkYXRhLCBjb25maWd1cmF0aW9ucywgcGFyYW1zKToKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0gIGZvciBjb25maWcgaW4gY29uZmlndXJhdGlvbnM6Ci0gICAgYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy50b3BsZXZlbF9kaXIsICdvdXQnLCBjb25maWcpCi0gICAgYXJndW1lbnRzID0gWyduaW5qYScsICctQycsIGJ1aWxkZGlyXQotICAgIHByaW50KCdCdWlsZGluZyBbJXNdOiAlcycgJSAoY29uZmlnLCBhcmd1bWVudHMpKQotICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChhcmd1bWVudHMpCi0KLQotZGVmIENhbGxHZW5lcmF0ZU91dHB1dEZvckNvbmZpZyhhcmdsaXN0KToKLSAgIyBJZ25vcmUgdGhlIGludGVycnVwdCBzaWduYWwgc28gdGhhdCB0aGUgcGFyZW50IHByb2Nlc3MgY2F0Y2hlcyBpdCBhbmQKLSAgIyBraWxscyBhbGwgbXVsdGlwcm9jZXNzaW5nIGNoaWxkcmVuLgotICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQotCi0gICh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMsIGNvbmZpZ19uYW1lKSA9IGFyZ2xpc3QKLSAgR2VuZXJhdGVPdXRwdXRGb3JDb25maWcodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zLCBjb25maWdfbmFtZSkKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgdXNlcl9jb25maWcgPSBwYXJhbXMuZ2V0KCdnZW5lcmF0b3JfZmxhZ3MnLCB7fSkuZ2V0KCdjb25maWcnLCBOb25lKQotICAjIFRPRE86IFJlcGxhY2UgTVNWU1V0aWwgd2l0aCBjYWxscyB0byBhYnN0cmFjdCB0b29sY2hhaW4uCi0gIGlmIGd5cC5jb21tb24uR2V0Rmxhdm9yKHBhcmFtcykgaW4gbWljcm9zb2Z0X2ZsYXZvcnM6Ci0gICAgdGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cyA9IE1TVlNVdGlsLlNoYXJkVGFyZ2V0cyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzKQotICBpZiB1c2VyX2NvbmZpZzoKLSAgICBHZW5lcmF0ZU91dHB1dEZvckNvbmZpZyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBkYXRhLCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb25maWcpCi0gIGVsc2U6Ci0gICAgY29uZmlnX25hbWVzID0gdGFyZ2V0X2RpY3RzW3RhcmdldF9saXN0WzBdXVsnY29uZmlndXJhdGlvbnMnXS5rZXlzKCkKLSAgICBpZiBwYXJhbXNbJ3BhcmFsbGVsJ106Ci0gICAgICB0cnk6Ci0gICAgICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChsZW4oY29uZmlnX25hbWVzKSkKLSAgICAgICAgYXJnbGlzdHMgPSBbXQotICAgICAgICBmb3IgY29uZmlnX25hbWUgaW4gY29uZmlnX25hbWVzOgotICAgICAgICAgIGFyZ2xpc3RzLmFwcGVuZCgKLSAgICAgICAgICAgICAgKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIHBhcmFtcywgY29uZmlnX25hbWUpKQotICAgICAgICAgIHBvb2wubWFwKENhbGxHZW5lcmF0ZU91dHB1dEZvckNvbmZpZywgYXJnbGlzdHMpCi0gICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQgYXMgZToKLSAgICAgICAgcG9vbC50ZXJtaW5hdGUoKQotICAgICAgICByYWlzZSBlCi0gICAgZWxzZToKLSAgICAgIGZvciBjb25maWdfbmFtZSBpbiBjb25maWdfbmFtZXM6Ci0gICAgICAgIEdlbmVyYXRlT3V0cHV0Rm9yQ29uZmlnKHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIHBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX25hbWUpCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9uaW5qYV90ZXN0LnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvbmluamFfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBkZDE1My4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci9uaW5qYV90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiIFVuaXQgdGVzdHMgZm9yIHRoZSBuaW5qYS5weSBmaWxlLiAiIiIKLQotaW1wb3J0IGd5cC5nZW5lcmF0b3IubmluamEgYXMgbmluamEKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgc3lzCi1pbXBvcnQgVGVzdENvbW1vbgotCi0KLWNsYXNzIFRlc3RQcmVmaXhlc0FuZFN1ZmZpeGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnY3lnd2luJyk6Ci0gICAgZGVmIHRlc3RfQmluYXJ5TmFtZXNXaW5kb3dzKHNlbGYpOgotICAgICAgd3JpdGVyID0gbmluamEuTmluamFXcml0ZXIoJ2ZvbycsICd3ZWUnLCAnLicsICcuJywgJ25pbmphLmJ1aWxkJywgJ3dpbicpCi0gICAgICBzcGVjID0geyAndGFyZ2V0X25hbWUnOiAnd2VlJyB9Ci0gICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLkNvbXB1dGVPdXRwdXRGaWxlTmFtZShzcGVjLCAnZXhlY3V0YWJsZScpLgotICAgICAgICAgIGVuZHN3aXRoKCcuZXhlJykpCi0gICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLkNvbXB1dGVPdXRwdXRGaWxlTmFtZShzcGVjLCAnc2hhcmVkX2xpYnJhcnknKS4KLSAgICAgICAgICBlbmRzd2l0aCgnLmRsbCcpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5Db21wdXRlT3V0cHV0RmlsZU5hbWUoc3BlYywgJ3N0YXRpY19saWJyYXJ5JykuCi0gICAgICAgICAgZW5kc3dpdGgoJy5saWInKSkKLQotICBpZiBzeXMucGxhdGZvcm0gPT0gJ2xpbnV4Mic6Ci0gICAgZGVmIHRlc3RfQmluYXJ5TmFtZXNMaW51eChzZWxmKToKLSAgICAgIHdyaXRlciA9IG5pbmphLk5pbmphV3JpdGVyKCdmb28nLCAnd2VlJywgJy4nLCAnLicsICduaW5qYS5idWlsZCcsICdsaW51eCcpCi0gICAgICBzcGVjID0geyAndGFyZ2V0X25hbWUnOiAnd2VlJyB9Ci0gICAgICBzZWxmLmFzc2VydFRydWUoJy4nIG5vdCBpbiB3cml0ZXIuQ29tcHV0ZU91dHB1dEZpbGVOYW1lKHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjdXRhYmxlJykpCi0gICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLkNvbXB1dGVPdXRwdXRGaWxlTmFtZShzcGVjLCAnc2hhcmVkX2xpYnJhcnknKS4KLSAgICAgICAgICBzdGFydHN3aXRoKCdsaWInKSkKLSAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cml0ZXIuQ29tcHV0ZU91dHB1dEZpbGVOYW1lKHNwZWMsICdzdGF0aWNfbGlicmFyeScpLgotICAgICAgICAgIHN0YXJ0c3dpdGgoJ2xpYicpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5Db21wdXRlT3V0cHV0RmlsZU5hbWUoc3BlYywgJ3NoYXJlZF9saWJyYXJ5JykuCi0gICAgICAgICAgZW5kc3dpdGgoJy5zbycpKQotICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5Db21wdXRlT3V0cHV0RmlsZU5hbWUoc3BlYywgJ3N0YXRpY19saWJyYXJ5JykuCi0gICAgICAgICAgZW5kc3dpdGgoJy5hJykpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvcXRjcmVhdG9yX25pbmphLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3IvcXRjcmVhdG9yX25pbmphLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGMwOTkwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL3F0Y3JlYXRvcl9uaW5qYS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2NCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0iIiJHeXAgZ2VuZXJhdG9yIGZvciBRVCBDcmVhdG9yIHByb2plY3RzIHRoYXQgaW52b2tlIG5pbmphLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCByZQotCi1QUk9KRUNUX0RJUl9SRUxBVElWRV9UT19PVVRQVVRfRElSID0gJ3F0Y3JlYXRvcl9wcm9qZWN0cycKLQotCi1kZWYgUmViYXNlUmVsYXRpdmVQYXRocyhmaWxlX3NldCwgb3JpZ2luYWxfYmFzZSwgbmV3X2Jhc2UpOgotICByZXQgPSBzZXQoKQotICBmb3IgaXRlbSBpbiBmaWxlX3NldDoKLSAgICAjIFRPRE86IEZvciBub3csIGlnbm9yZSBzcGVjaWFsIHZhcnMgbGlrZSAkUFJPRFVDVF9ESVIuCi0gICAgaWYgJyQnIGluIGl0ZW06Ci0gICAgICBjb250aW51ZQotICAgIHJldC5hZGQob3MucGF0aC5yZWxwYXRoKG9zLnBhdGguam9pbihvcmlnaW5hbF9iYXNlLCBpdGVtKSwgbmV3X2Jhc2UpKQotICByZXR1cm4gcmV0Ci0KLQotZGVmIFNwbGl0QXNzaWdubWVudERlZmluZShsaW5lKToKLSAgbWF0Y2hlZCA9IHJlLm1hdGNoKHInKFtePVxiXSspPSguKiknLCBsaW5lKQotICBpZiBtYXRjaGVkOgotICAgIHJldHVybiBtYXRjaGVkLmdyb3VwKDEpICsgJyAnICsgbWF0Y2hlZC5ncm91cCgyKQotICBlbHNlOgotICAgIHJldHVybiBsaW5lCi0KLQotZGVmIEdlblByb2plY3QocHJvamVjdF9kZWYsIHByb2pfZGlyKToKLSAgIiIiR2VuZXJhdGVzIFFUIENyZWF0b3IgcHJvamVjdCAoLmNyZWF0b3IpIGFuZCBzdXBwb3J0aW5nIGZpbGVzLgotCi0gIEFyZ3M6Ci0gICAgcHJvamVjdF9kZWY6IERpY3Rpb25hcnkgb2YgcGFyYW1ldGVycyBkZWZpbmluZyB0aGUgcHJvamVjdCB0aGF0IHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkLgotICAgIHByb2pfZGlyOiBUaGUgZGlyZWN0b3J5IHRoZSBnZW5lcmF0ZWQgcHJvamVjdCBmaWxlIHdpbGwgYmUgcGxhY2VkIGludG8uCi0gICIiIgotCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwcm9qX2Rpcik6Ci0gICAgb3MubWFrZWRpcnMocHJval9kaXIpCi0KLSAgY29uZmlndXJhdGlvbiA9IHByb2plY3RfZGVmWydjb25maWd1cmF0aW9uJ10KLSAgY3VycmVudF9jb25maWcgPSBjb25maWd1cmF0aW9uWydvdXRfZGlyJ10KLQotICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJval9kaXIpOgotICAgIG9zLm1ha2VkaXJzKHByb2pfZGlyKQotCi0gIGJhc2VmaWxlbmFtZSA9IG9zLnBhdGguam9pbigKLSAgICAgIHByb2pfZGlyLCBjdXJyZW50X2NvbmZpZyArICdfJyArIHByb2plY3RfZGVmWydzZXNzaW9uX25hbWVfcHJlZml4J10pCi0gIHdpdGggb3BlbihiYXNlZmlsZW5hbWUgKyAnLmNyZWF0b3InLCAndycpIGFzIGY6Ci0gICAgZi53cml0ZSgnW0dlbmVyYWxdJykKLQotICB3aXRoIG9wZW4oYmFzZWZpbGVuYW1lICsgJy5jb25maWcnLCAndycpIGFzIGY6Ci0gICAgZm9yIGRlZmluZSBpbiBjb25maWd1cmF0aW9uWydkZWZpbmVzJ106Ci0gICAgICBmLndyaXRlKCcjZGVmaW5lICVzXG4nICUgU3BsaXRBc3NpZ25tZW50RGVmaW5lKGRlZmluZSkpCi0KLSAgd2l0aCBvcGVuKGJhc2VmaWxlbmFtZSArICcuZmlsZXMnLCAndycpIGFzIGY6Ci0gICAgZm9yIHNvdXJjZSBpbiBwcm9qZWN0X2RlZlsnc291cmNlcyddOgotICAgICAgZi53cml0ZSgnJXNcbicgJSBzb3VyY2UpCi0KLSAgd2l0aCBvcGVuKGJhc2VmaWxlbmFtZSArICcuaW5jbHVkZXMnLCAndycpIGFzIGY6Ci0gICAgZm9yIGluY2x1ZGVfcGF0aCBpbiBjb25maWd1cmF0aW9uWydpbmNsdWRlX3BhdGhzJ106Ci0gICAgICBmLndyaXRlKCclc1xuJyAlIGluY2x1ZGVfcGF0aCkKLQotICAjIFRPRE86IFVzZSBKaW5qYTIgdGVtcGxhdGUgZW5naW5lIHRvIGdlbmVyYXRlIHRoZSBwcm9qZWN0IGZpbGVzLgotICB3aXRoIG9wZW4oYmFzZWZpbGVuYW1lICsgJy5jcmVhdG9yLnNoYXJlZCcsICd3JykgYXMgZjoKLSAgICBmLndyaXRlKCIiIjwhRE9DVFlQRSBRdENyZWF0b3JQcm9qZWN0PgotICAgICAgPHF0Y3JlYXRvcj4KLSAgICAgICA8ZGF0YT4KLSAgICAgICAgPHZhcmlhYmxlPlByb2plY3RFeHBsb3Jlci5Qcm9qZWN0LkVkaXRvclNldHRpbmdzPC92YXJpYWJsZT4KLSAgICAgICAgPHZhbHVlbWFwIHR5cGU9IlFWYXJpYW50TWFwIj4KLSAgICAgICAgIDx2YWx1ZSB0eXBlPSJib29sIiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uQXV0b0luZGVudCI+ZmFsc2U8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5BdXRvU3BhY2VzRm9yVGFicyI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iYm9vbCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLkNhbWVsQ2FzZU5hdmlnYXRpb24iPnRydWU8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlbWFwIHR5cGU9IlFWYXJpYW50TWFwIiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uQ29kZVN0eWxlLjAiPgotICAgICAgICAgIDx2YWx1ZSB0eXBlPSJRU3RyaW5nIiBrZXk9Imxhbmd1YWdlIj5DcHA8L3ZhbHVlPgotICAgICAgICAgPC92YWx1ZW1hcD4KLSAgICAgICAgIDx2YWx1ZSB0eXBlPSJpbnQiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5Db2RlU3R5bGUuQ291bnQiPjE8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9IlFCeXRlQXJyYXkiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5Db2RlYyI+VVRGLTg8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5Db25zdHJhaW5Ub29sdGlwcyI+ZmFsc2U8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImludCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLkluZGVudFNpemUiPjI8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5LZXlib2FyZFRvb2x0aXBzIj5mYWxzZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iYm9vbCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLk1vdXNlTmF2aWdhdGlvbiI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iaW50IiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uUGFkZGluZ01vZGUiPjE8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5TY3JvbGxXaGVlbFpvb21pbmciPnRydWU8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImludCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLlNtYXJ0QmFja3NwYWNlQmVoYXZpb3IiPjA8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5TcGFjZXNGb3JUYWJzIj50cnVlPC92YWx1ZT4KLSAgICAgICAgIDx2YWx1ZSB0eXBlPSJpbnQiIGtleT0iRWRpdG9yQ29uZmlndXJhdGlvbi5UYWJLZXlCZWhhdmlvciI+MDwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iaW50IiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uVGFiU2l6ZSI+MjwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iYm9vbCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLlVzZUdsb2JhbCI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iaW50IiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uVXRmOEJvbUJlaGF2aW9yIj4xPC92YWx1ZT4KLSAgICAgICAgIDx2YWx1ZSB0eXBlPSJib29sIiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uYWRkRmluYWxOZXdMaW5lIj50cnVlPC92YWx1ZT4KLSAgICAgICAgIDx2YWx1ZSB0eXBlPSJib29sIiBrZXk9IkVkaXRvckNvbmZpZ3VyYXRpb24uY2xlYW5JbmRlbnRhdGlvbiI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iYm9vbCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLmNsZWFuV2hpdGVzcGFjZSI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICA8dmFsdWUgdHlwZT0iYm9vbCIga2V5PSJFZGl0b3JDb25maWd1cmF0aW9uLmluRW50aXJlRG9jdW1lbnQiPmZhbHNlPC92YWx1ZT4KLSAgICAgICAgPC92YWx1ZW1hcD4KLSAgICAgICA8L2RhdGE+Ci0gICAgIiIiKQotICAgIGYud3JpdGUoIiIiCi0gICAgICAgPGRhdGE+Ci0gICAgICAgIDx2YXJpYWJsZT5Qcm9qZWN0RXhwbG9yZXIuUHJvamVjdC5UYXJnZXQuMDwvdmFyaWFibGU+Ci0gICAgICAgIDx2YWx1ZW1hcCB0eXBlPSJRVmFyaWFudE1hcCI+Ci0gICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uRGVmYXVsdERpc3BsYXlOYW1lIiB0eXBlPSJRU3RyaW5nIj5EZWZhdWx0IE5hbWU8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLlByb2plY3RDb25maWd1cmF0aW9uLkRpc3BsYXlOYW1lIiB0eXBlPSJRU3RyaW5nIj5EaXNwbGF5IE5hbWU8L3ZhbHVlPgotICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLlByb2plY3RDb25maWd1cmF0aW9uLklkIiB0eXBlPSJRU3RyaW5nIj5HZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY1RhcmdldDwvdmFsdWU+Ci0gICAgIiIiKQotCi0gICAgcHJvamVjdF9udW1iZXIgPSAwCi0gICAgZm9yIChwcm9qZWN0X25hbWUsIHByb2plY3RfdGFyZ2V0KSBpbiBwcm9qZWN0X2RlZlsncHJvamVjdHMnXToKLSAgICAgIGYud3JpdGUoIiIiCi0gICAgICAgICA8dmFsdWVtYXAga2V5PSJQcm9qZWN0RXhwbG9yZXIuVGFyZ2V0LkJ1aWxkQ29uZmlndXJhdGlvbi4lKHByb2plY3RfbnVtYmVyKWQiIHR5cGU9IlFWYXJpYW50TWFwIj4KLSAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uSWQiIHR5cGU9IlFTdHJpbmciPkdlbmVyaWNQcm9qZWN0TWFuYWdlci5HZW5lcmljQnVpbGRDb25maWd1cmF0aW9uPC92YWx1ZT4KLSAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uRGlzcGxheU5hbWUiIHR5cGU9IlFTdHJpbmciPiUocHJvamVjdF9uYW1lKXM6JShwcm9qZWN0X3RhcmdldClzPC92YWx1ZT4KLSAgICAgICAgICA8dmFsdWUga2V5PSJHZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY0J1aWxkQ29uZmlndXJhdGlvbi5CdWlsZERpcmVjdG9yeSIgdHlwZT0iUVN0cmluZyI+JShvdXRfZGlyKXM8L3ZhbHVlPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5CdWlsZENvbmZpZ3VyYXRpb24uVG9vbENoYWluIiB0eXBlPSJRU3RyaW5nIj5JTlZBTElEPC92YWx1ZT4KLQotICAgICAgICAgIDx2YWx1ZW1hcCBrZXk9IlByb2plY3RFeHBsb3Jlci5CdWlsZENvbmZpZ3VyYXRpb24uQnVpbGRTdGVwLjAiIHR5cGU9IlFWYXJpYW50TWFwIj4KLSAgICAgICAgICAgPHZhbHVlbGlzdCBrZXk9IkdlbmVyaWNQcm9qZWN0TWFuYWdlci5HZW5lcmljTWFrZVN0ZXAuQnVpbGRUYXJnZXRzIiB0eXBlPSJRVmFyaWFudExpc3QiLz4KLSAgICAgICAgICAgPHZhbHVlbGlzdCBrZXk9IkdlbmVyaWNQcm9qZWN0TWFuYWdlci5HZW5lcmljTWFrZVN0ZXAuTWFrZUFyZ3VtZW50cyIgdHlwZT0iUVZhcmlhbnRMaXN0Ij4KLSAgICAgICAgICAgIDx2YWx1ZSB0eXBlPSJRU3RyaW5nIj4lKHByb2plY3RfdGFyZ2V0KXM8L3ZhbHVlPgotICAgICAgICAgICA8L3ZhbHVlbGlzdD4KLSAgICAgICAgICAgPHZhbHVlIGtleT0iR2VuZXJpY1Byb2plY3RNYW5hZ2VyLkdlbmVyaWNNYWtlU3RlcC5NYWtlQ29tbWFuZCIgdHlwZT0iUVN0cmluZyI+bmluamE8L3ZhbHVlPgotICAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uRGlzcGxheU5hbWUiIHR5cGU9IlFTdHJpbmciPk5pbmphPC92YWx1ZT4KLSAgICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLlByb2plY3RDb25maWd1cmF0aW9uLklkIiB0eXBlPSJRU3RyaW5nIj5HZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY01ha2VTdGVwPC92YWx1ZT4KLSAgICAgICAgICA8L3ZhbHVlbWFwPgotCi0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkJ1aWxkQ29uZmlndXJhdGlvbi5CdWlsZFN0ZXBzQ291bnQiIHR5cGU9ImludCI+MTwvdmFsdWU+Ci0KLSAgICAgICAgICA8dmFsdWVtYXAga2V5PSJQcm9qZWN0RXhwbG9yZXIuQnVpbGRDb25maWd1cmF0aW9uLkNsZWFuU3RlcC4wIiB0eXBlPSJRVmFyaWFudE1hcCI+Ci0gICAgICAgICAgIDx2YWx1ZWxpc3Qga2V5PSJHZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY01ha2VTdGVwLkJ1aWxkVGFyZ2V0cyIgdHlwZT0iUVZhcmlhbnRMaXN0Ii8+Ci0gICAgICAgICAgIDx2YWx1ZWxpc3Qga2V5PSJHZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY01ha2VTdGVwLk1ha2VBcmd1bWVudHMiIHR5cGU9IlFWYXJpYW50TGlzdCI+Ci0gICAgICAgICAgICA8dmFsdWUgdHlwZT0iUVN0cmluZyI+LXRjbGVhbjwvdmFsdWU+Ci0gICAgICAgICAgIDwvdmFsdWVsaXN0PgotICAgICAgICAgICA8dmFsdWUga2V5PSJHZW5lcmljUHJvamVjdE1hbmFnZXIuR2VuZXJpY01ha2VTdGVwLk1ha2VDb21tYW5kIiB0eXBlPSJRU3RyaW5nIj5uaW5qYTwvdmFsdWU+Ci0gICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5Qcm9qZWN0Q29uZmlndXJhdGlvbi5EaXNwbGF5TmFtZSIgdHlwZT0iUVN0cmluZyI+TmluamE8L3ZhbHVlPgotICAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uSWQiIHR5cGU9IlFTdHJpbmciPkdlbmVyaWNQcm9qZWN0TWFuYWdlci5HZW5lcmljTWFrZVN0ZXA8L3ZhbHVlPgotICAgICAgICAgIDwvdmFsdWVtYXA+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkJ1aWxkQ29uZmlndXJhdGlvbi5DbGVhblN0ZXBzQ291bnQiIHR5cGU9ImludCI+MTwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkJ1aWxkQ29uZmlndXJhdGlvbi5DbGVhclN5c3RlbUVudmlyb25tZW50IiB0eXBlPSJib29sIj5mYWxzZTwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlbGlzdCB0eXBlPSJRVmFyaWFudExpc3QiIGtleT0iUHJvamVjdEV4cGxvcmVyLkJ1aWxkQ29uZmlndXJhdGlvbi5Vc2VyRW52aXJvbm1lbnRDaGFuZ2VzIj4KLSAgICAgICAgICAgPHZhbHVlIHR5cGU9IlFTdHJpbmciPlRBUkdFVD0lKHByb2plY3RfdGFyZ2V0KXM8L3ZhbHVlPgotICAgICAgICAgIDwvdmFsdWVsaXN0PgotICAgICAgICAgPC92YWx1ZW1hcD4KLSAgICAgICIiIiAlIHsKLSAgICAgICAgICAncHJvamVjdF9udW1iZXInOiBwcm9qZWN0X251bWJlciwKLSAgICAgICAgICAncHJvamVjdF9uYW1lJzogcHJvamVjdF9uYW1lLAotICAgICAgICAgICdwcm9qZWN0X3RhcmdldCc6IHByb2plY3RfdGFyZ2V0LAotICAgICAgICAgICdvdXRfZGlyJzogcHJvamVjdF9kZWZbJ291dF9kaXInXSwKLSAgICAgIH0pCi0gICAgICBwcm9qZWN0X251bWJlciArPSAxCi0KLSAgICBmLndyaXRlKCIiIgotICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLlRhcmdldC5CdWlsZENvbmZpZ3VyYXRpb25Db3VudCIgdHlwZT0iaW50Ij4lZDwvdmFsdWU+Ci0gICAgIiIiICUgcHJvamVjdF9udW1iZXIpCi0KLSAgICBmLndyaXRlKCIiIgotICAgICAgICAgPHZhbHVlbWFwIGtleT0iUHJvamVjdEV4cGxvcmVyLlRhcmdldC5SdW5Db25maWd1cmF0aW9uLjAiIHR5cGU9IlFWYXJpYW50TWFwIj4KLSAgICAgICAgICA8dmFsdWVsaXN0IGtleT0iUHJvamVjdEV4cGxvcmVyLkN1c3RvbUV4ZWN1dGFibGVSdW5Db25maWd1cmF0aW9uLkFyZ3VtZW50cyIgdHlwZT0iUVZhcmlhbnRMaXN0Ii8+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkN1c3RvbUV4ZWN1dGFibGVSdW5Db25maWd1cmF0aW9uLkJhc2VFbnZpcm9ubWVudEJhc2UiIHR5cGU9ImludCI+MjwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkN1c3RvbUV4ZWN1dGFibGVSdW5Db25maWd1cmF0aW9uLkV4ZWN1dGFibGUiIHR5cGU9IlFTdHJpbmciPi4vJFRBUkdFVDwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkN1c3RvbUV4ZWN1dGFibGVSdW5Db25maWd1cmF0aW9uLlVzZVRlcm1pbmFsIiB0eXBlPSJib29sIj5mYWxzZTwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLkN1c3RvbUV4ZWN1dGFibGVSdW5Db25maWd1cmF0aW9uLldvcmtpbmdEaXJlY3RvcnkiIHR5cGU9IlFTdHJpbmciPiRCVUlMRERJUjwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIGtleT0iUHJvamVjdEV4cGxvcmVyLlByb2plY3RDb25maWd1cmF0aW9uLkRpc3BsYXlOYW1lIiB0eXBlPSJRU3RyaW5nIj5SdW4gVGFyZ2V0PC92YWx1ZT4KLSAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uSWQiIHR5cGU9IlFTdHJpbmciPlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbjwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iUnVuQ29uZmlndXJhdGlvbi5Vc2VDcHBEZWJ1Z2dlciI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iUnVuQ29uZmlndXJhdGlvbi5Vc2VDcHBEZWJ1Z2dlckF1dG8iPmZhbHNlPC92YWx1ZT4KLSAgICAgICAgIDwvdmFsdWVtYXA+Ci0KLSAgICAgICAgIDx2YWx1ZW1hcCBrZXk9IlByb2plY3RFeHBsb3Jlci5UYXJnZXQuUnVuQ29uZmlndXJhdGlvbi4xIiB0eXBlPSJRVmFyaWFudE1hcCI+Ci0gICAgICAgICAgPHZhbHVlbGlzdCBrZXk9IlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbi5Bcmd1bWVudHMiIHR5cGU9IlFWYXJpYW50TGlzdCIvPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbi5CYXNlRW52aXJvbm1lbnRCYXNlIiB0eXBlPSJpbnQiPjI8L3ZhbHVlPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbi5FeGVjdXRhYmxlIiB0eXBlPSJRU3RyaW5nIj52YWxncmluZCAuLyRUQVJHRVQ8L3ZhbHVlPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbi5Vc2VUZXJtaW5hbCIgdHlwZT0iYm9vbCI+ZmFsc2U8L3ZhbHVlPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbi5Xb3JraW5nRGlyZWN0b3J5IiB0eXBlPSJRU3RyaW5nIj4kQlVJTERESVI8L3ZhbHVlPgotICAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5Qcm9qZWN0Q29uZmlndXJhdGlvbi5EaXNwbGF5TmFtZSIgdHlwZT0iUVN0cmluZyI+VmFsZ3JpbmQgVGFyZ2V0PC92YWx1ZT4KLSAgICAgICAgICA8dmFsdWUga2V5PSJQcm9qZWN0RXhwbG9yZXIuUHJvamVjdENvbmZpZ3VyYXRpb24uSWQiIHR5cGU9IlFTdHJpbmciPlByb2plY3RFeHBsb3Jlci5DdXN0b21FeGVjdXRhYmxlUnVuQ29uZmlndXJhdGlvbjwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iUnVuQ29uZmlndXJhdGlvbi5Vc2VDcHBEZWJ1Z2dlciI+dHJ1ZTwvdmFsdWU+Ci0gICAgICAgICAgPHZhbHVlIHR5cGU9ImJvb2wiIGtleT0iUnVuQ29uZmlndXJhdGlvbi5Vc2VDcHBEZWJ1Z2dlckF1dG8iPmZhbHNlPC92YWx1ZT4KLSAgICAgICAgIDwvdmFsdWVtYXA+Ci0KLSAgICAgICAgIDx2YWx1ZSBrZXk9IlByb2plY3RFeHBsb3Jlci5UYXJnZXQuUnVuQ29uZmlndXJhdGlvbkNvdW50IiB0eXBlPSJpbnQiPjI8L3ZhbHVlPgotICAgICIiIikKLQotICAgIGYud3JpdGUoIiIiCi0gICAgICAgIDwvdmFsdWVtYXA+Ci0gICAgICAgPC9kYXRhPgotICAgICIiIikKLSAgICBmLndyaXRlKCIiIgotICAgICAgIDxkYXRhPgotICAgICAgICA8dmFyaWFibGU+UHJvamVjdEV4cGxvcmVyLlByb2plY3QuVGFyZ2V0Q291bnQ8L3ZhcmlhYmxlPgotICAgICAgICA8dmFsdWUgdHlwZT0iaW50Ij4xPC92YWx1ZT4KLSAgICAgICA8L2RhdGE+Ci0gICAgICAgPGRhdGE+Ci0gICAgICAgIDx2YXJpYWJsZT5Qcm9qZWN0RXhwbG9yZXIuUHJvamVjdC5VcGRhdGVyLkZpbGVWZXJzaW9uPC92YXJpYWJsZT4KLSAgICAgICAgPHZhbHVlIHR5cGU9ImludCI+NjwvdmFsdWU+Ci0gICAgICAgPC9kYXRhPgotICAgICAgPC9xdGNyZWF0b3I+Ci0gICAgICAiIiIpCi0KLQotZGVmIEdlbmVyYXRlUHJvamVjdHMoZGVmaW5pdGlvbik6Ci0gICIiIkdlbmVyYXRlcyBhIHNvbHV0aW9uIGFuZCBhbGwgY29ycmVzcG9uZGluZyBwcm9qZWN0cy4KLQotICBBcmdzOgotICAgIGRlZmluaXRpb246IEEgZGljdGlvbmFyeSBzcGVjaWZ5aW5nIGFsbCBzb2x1dGlvbiBhbmQgcHJvamVjdCBwYXJhbWV0ZXJzLgotICBSYWlzZXM6Ci0gICAgUnVudGltZUVycm9yOiBpZiB0aGUgc3BlY2lmaWVkIHJlcG8gZGlyZWN0b3J5IGNhbm5vdCBiZSBmb3VuZC4KLSAgIiIiCi0KLSAgcmVwb19kaXIgPSBvcy5wYXRoLmFic3BhdGgoZGVmaW5pdGlvblsncmVwb19kaXInXSkKLSAgcHJvamVjdHNfZGlyID0gb3MucGF0aC5hYnNwYXRoKGRlZmluaXRpb25bJ3Byb2plY3RzX2RpciddKQotCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyZXBvX2Rpcik6Ci0gICAgcmFpc2UgUnVudGltZUVycm9yKCdSZXBvIGRpcmVjdG9yeSBub3QgZm91bmQ6IHt9Jy5mb3JtYXQocmVwb19kaXIpKQotCi0gICMgR2VuZXJhdGUgcHJvamVjdCBmaWxlcwotICBmb3IgcHJvaiBpbiBkZWZpbml0aW9uWydwcm9qZWN0cyddOgotICAgIEdlblByb2plY3QocHJvaiwgcHJvamVjdHNfZGlyKQotCi0KLWRlZiBHZXRQcm9qZWN0c0RpcmVjdG9yeShvdXRwdXRfZGlyKToKLSAgcmV0dXJuIG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBQUk9KRUNUX0RJUl9SRUxBVElWRV9UT19PVVRQVVRfRElSKQotCi0KLWRlZiBHZXRWYWx1ZShkaWN0aW9uYXJ5LCBwYXRoLCBkZWZhdWx0PU5vbmUpOgotICAiIiJSZXR1cm5zIGEgdmFsdWUgZnJvbSBhIG5lc3QgZGljdGlvbmFyaWVzLgotCi0gIEV4YW1wbGU6IGQgPSB7ICdiYXNlJzogeyAnY2hpbGQnOiAxIH0gfQotICAgICAgICAgICBHZXRWYWx1ZShkLCAnYmFzZS9jaGlsZCcpID09IDEKLSAgICAgICAgICAgR2V0VmFsdWUoZCwgJ2Jhc2Uvbm90X2ZvdW5kJywgNikgPT0gNgotCi0gIEFyZ3M6Ci0gICAgZGljdGlvbmFyeTogVGhlIGRpY3Rpb25hcnkgb2YgZGljdGlvbmFyaWVzIHRvIHRyYXZlcnNlLgotICAgIHBhdGg6IEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHZhbHVlIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tIGRpY3Rpb25hcnkuCi0gICAgZGVmYXVsdDogQSBzdHJpbmcgdG8gdXNlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgY2FuJ3QgYmUgZm91bmQuCi0gIFJldHVybnM6Ci0gICAgUmV0dXJucyB0aGUgdmFsdWUgZnJvbSBkaWN0aW9uYXJ5IHNwZWNpZmllZCBieSBwYXRoLgotICAiIiIKLQotICBwYXRoID0gcGF0aC5zcGxpdCgnLycpCi0gIGZvciBwIGluIHBhdGhbOi0xXToKLSAgICBkaWN0aW9uYXJ5ID0gZGljdGlvbmFyeS5nZXQocCwge30pCi0gIHJldHVybiBkaWN0aW9uYXJ5LmdldChwYXRoWy0xXSwgZGVmYXVsdCkKLQotCi1kZWYgR2V0U2V0KGRpY3Rpb25hcnksIHZhbHVlKToKLSAgcmV0dXJuIHNldChkaWN0aW9uYXJ5LmdldCh2YWx1ZSwgW10pKQotCi0KLWRlZiBHZW5lcmF0ZVFUQ3JlYXRvckZpbGVzKHRhcmdldF9kaWN0cywgcGFyYW1zKToKLSAgIiIiVHJhbnNmb3JtcyBHWVAgZGF0YSBpbnRvIGEgbW9yZSBzdWl0YWJsZSBmb3JtIGFuZCBmZWVkIGl0IHRvIHRoZSBnZW5lcmF0b3IuCi0KLSAgVGhlIGZ1bmN0aW9uIHdpbGwgY29sbGFwc2UgaW5kaXZpZHVhbCB0YXJnZXRzIGludG8gYSBzaW5nbGUgZGF0YSBzZXQgd2hpY2gKLSAgaXMgYnJva2VuIGRvd24gYnkgY29uZmlndXJhdGlvbiB0eXBlcy4KLQotICBBcmdzOgotICAgIHRhcmdldF9kaWN0czogRGljdGlvbmFyaWVzIHNwZWNpZnlpbmcgdGFyZ2V0cyBhcyBwcm92aWRlZCBieSBHeXAuCi0gICAgcGFyYW1zOiBQYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBjdXJyZW50IEd5cCBidWlsZC4KLSAgUmFpc2VzOgotICAgIFJ1bnRpbWVFcnJvcjogVGhyb3duIGlmIGFzc3VtcHRpb25zIG9uIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBub3QgbWV0LgotICAiIiIKLQotICBnZW5lcmF0b3JfZmxhZ3MgPSBwYXJhbXNbJ2dlbmVyYXRvcl9mbGFncyddCi0gIGN1cnJlbnRfY29uZmlnID0gZ2VuZXJhdG9yX2ZsYWdzWydjb25maWcnXQotICByZXBvX2RpciA9IHBhcmFtc1snb3B0aW9ucyddLnRvcGxldmVsX2RpcgotCi0gIHNlc3Npb25fbmFtZV9wcmVmaXggPSBnZW5lcmF0b3JfZmxhZ3NbJ3F0Y3JlYXRvcl9zZXNzaW9uX25hbWVfcHJlZml4J10KLSAgcHJvamVjdF9saXN0ID0gc2V0KCkKLSAgc291cmNlcyA9IHNldCgpCi0KLSAgY29uZmlndXJhdGlvbiA9IHsnaW5jbHVkZV9wYXRocyc6IHNldCgpLCAnZGVmaW5lcyc6IHNldCgpfQotCi0gIGlmIGxlbihwYXJhbXNbJ2J1aWxkX2ZpbGVzJ10pICE9IDE6Ci0gICAgcmFpc2UgUnVudGltZUVycm9yKCdFeHBlY3RlZCBvbmx5IGEgc2luZ2xlIEd5cCBidWlsZCBmaWxlLicpCi0KLSAgb3V0cHV0X2RpciA9IG9zLnBhdGguam9pbihyZXBvX2RpciwgZ2VuZXJhdG9yX2ZsYWdzWydvdXRwdXRfZGlyJ10pCi0gIHByb2plY3RzX2RpciA9IEdldFByb2plY3RzRGlyZWN0b3J5KG91dHB1dF9kaXIpCi0gIGNvbmZpZ3VyYXRpb25bJ291dF9kaXInXSA9IGN1cnJlbnRfY29uZmlnCi0KLSAgIyBBdCB0aGUgbW9tZW50IHdlIGFyZSBub3QgdHJhY2tpbmcgd2hpY2ggZGVwZW5kZW5jaWVzIHdlcmUgYWN0dWFsbHkgdXNlZAotICAjIHRvIGNvbnN0cnVjdCBlYWNoIGV4ZWN1dGFibGUgdGFyZ2V0IGFuZCBpbnN0ZWFkIHByZXRlbmQgdGhhdCBhbGwgb2YgdGhlbQotICAjIGFyZSBuZWVkZWQgZm9yIGVhY2ggZXhlY3V0YWJsZSB0YXJnZXQKLSAgZm9yIHRhcmdldF9uYW1lLCB0YXJnZXQgaW4gdGFyZ2V0X2RpY3RzLml0ZXJpdGVtcygpOgotICAgIGd5cF9hYnNwYXRoID0gb3MucGF0aC5hYnNwYXRoKHRhcmdldF9uYW1lWzp0YXJnZXRfbmFtZS5yZmluZCgnOicpXSkKLSAgICBneXBfZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShneXBfYWJzcGF0aCkKLQotICAgIGNvbmZpZyA9IHRhcmdldFsnY29uZmlndXJhdGlvbnMnXVtjdXJyZW50X2NvbmZpZ10KLSAgICBjb25maWd1cmF0aW9uWydkZWZpbmVzJ10gfD0gKAotICAgICAgICBHZXRTZXQoY29uZmlnLCAnZGVmaW5lcycpIC0gR2V0U2V0KGNvbmZpZywgJ2RlZmluZXNfZXhjbHVkZWQnKSkKLSAgICBjb25maWd1cmF0aW9uWydpbmNsdWRlX3BhdGhzJ10gfD0gUmViYXNlUmVsYXRpdmVQYXRocygKLSAgICAgICAgKEdldFNldChjb25maWcsICdpbmNsdWRlX2RpcnMnKQotICAgICAgICAgfCBHZXRTZXQoY29uZmlnLCAnaW5jbHVkZV9kaXJzX3RhcmdldCcpKSwgZ3lwX2Rpcm5hbWUsIHByb2plY3RzX2RpcikKLQotICAgIHNvdXJjZXMgfD0gUmViYXNlUmVsYXRpdmVQYXRocygKLSAgICAgICAgKEdldFNldCh0YXJnZXQsICdzb3VyY2VzJykgLSBHZXRTZXQodGFyZ2V0LCAnc291cmNlc19leGNsdWRlZCcpKSwKLSAgICAgICAgZ3lwX2Rpcm5hbWUsIHByb2plY3RzX2RpcikKLSAgICBzb3VyY2VzIHw9IHNldChbb3MucGF0aC5yZWxwYXRoKGd5cF9hYnNwYXRoLCBwcm9qZWN0c19kaXIpXSkKLSAgICAjIEdlbmVyYXRlIHByb2plY3RzIGZvciB0YXJnZXRzIHdpdGggdGhlIGlkZV9kZXBsb3lfdGFyZ2V0IHZhcmlhYmxlIHNldC4KLSAgICBpZiBHZXRWYWx1ZSh0YXJnZXQsICd2YXJpYWJsZXMvaWRlX2RlcGxveV90YXJnZXQnLCAwKToKLSAgICAgIGV4ZWN1dGFibGVfdGFyZ2V0ID0gR2V0VmFsdWUodGFyZ2V0LCAndmFyaWFibGVzL2V4ZWN1dGFibGVfbmFtZScpCi0gICAgICBhc3NlcnQgZXhlY3V0YWJsZV90YXJnZXQKLSAgICAgIGV4ZWN1dGFibGVfZm9sZGVyID0gb3MucGF0aC5yZWxwYXRoKGd5cF9kaXJuYW1lLCByZXBvX2RpcikKLSAgICAgIHByb2plY3RfbGlzdC5hZGQoKGV4ZWN1dGFibGVfZm9sZGVyLCBleGVjdXRhYmxlX3RhcmdldCkpCi0KLSAgcHJvamVjdHMgPSBbewotICAgICAgJ3Nlc3Npb25fbmFtZV9wcmVmaXgnOiBzZXNzaW9uX25hbWVfcHJlZml4LAotICAgICAgJ291dF9kaXInOiBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpciwgY3VycmVudF9jb25maWcpLAotICAgICAgJ25hbWUnOiBjdXJyZW50X2NvbmZpZywKLSAgICAgICdzb3VyY2VzJzogc291cmNlcywKLSAgICAgICdjb25maWd1cmF0aW9uJzogY29uZmlndXJhdGlvbiwKLSAgICAgICdwcm9qZWN0cyc6IHByb2plY3RfbGlzdCwKLSAgfV0KLQotICBkZWZpbml0aW9uID0gewotICAgICAgJ25hbWUnOiBjdXJyZW50X2NvbmZpZywKLSAgICAgICdwcm9qZWN0c19kaXInOiBwcm9qZWN0c19kaXIsCi0gICAgICAncmVwb19kaXInOiByZXBvX2RpciwKLSAgICAgICdwcm9qZWN0cyc6IHByb2plY3RzLAotICB9Ci0KLSAgR2VuZXJhdGVQcm9qZWN0cyhkZWZpbml0aW9uKQotCi0KLSMKLSMgR1lQIGdlbmVyYXRvciBleHRlcm5hbCBmdW5jdGlvbnMKLSMKLWRlZiBQZXJmb3JtQnVpbGQoZGF0YSwgY29uZmlndXJhdGlvbnMsIHBhcmFtcyk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgIyBOb3QgdXNlZCBieSB0aGlzIGdlbmVyYXRvcgotICBwYXNzCi0KLQotZGVmIEdlbmVyYXRlT3V0cHV0KHRhcmdldF9saXN0LCB0YXJnZXRfZGljdHMsIGRhdGEsIHBhcmFtcyk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKLSAgIiIiR2VuZXJhdGVzIFFUIENyZWF0b3IgcHJvamVjdCBmaWxlcyBmb3IgTGludXguCi0KLSAgQSBCdWlsZENvbmZpZ3VyYXRpb24gd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGVhY2ggZXhlY3V0YWJsZSB0YXJnZXQgdGhhdAotICBjb250YWlucyBhIGRlcGxveSBzdGVwLgotICBFeGFtcGxlOgotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdwcm9qZWN0X25hbWVfZGVwbG95JywKLSAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICdleGVjdXRhYmxlX25hbWUnOiAncHJvamVjdF9uYW1lJywKLSAgICAgIH0sCi0gICAgfSwKLQotICBBIHByb2plY3QgZmlsZSB3aXRoIGFsbCB0YXJnZXRzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24KLSAgKGV4LiBEZWJ1ZywgRGV2ZWwsIGV0Yy4uKS4KLQotICBBcmdzOgotICAgIHRhcmdldF9saXN0OiBVbnVzZWQuCi0gICAgdGFyZ2V0X2RpY3RzOiBMaXN0IG9mIGRpY3Rpb25hcmllcyBzcGVjaWZ5aW5nIEd5cCB0YXJnZXRzLgotICAgIGRhdGE6IFVudXNlZC4KLSAgICBwYXJhbXM6IEd5cCBwYXJhbWV0ZXJzLgotICAiIiIKLSAgR2VuZXJhdGVRVENyZWF0b3JGaWxlcyh0YXJnZXRfZGljdHMsIHBhcmFtcykKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL3Njb25zLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3Ivc2NvbnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlN2NiNTguLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9nZW5lcmF0b3Ivc2NvbnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcyICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotaW1wb3J0IGd5cAotaW1wb3J0IGd5cC5jb21tb24KLWltcG9ydCBneXAuU0NvbnMgYXMgU0NvbnMKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcHByaW50Ci1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi0KLQotIyBUT0RPOiAgcmVtb3ZlIHdoZW4gd2UgZGVsZXRlIHRoZSBsYXN0IFdyaXRlTGlzdCgpIGNhbGwgaW4gdGhpcyBtb2R1bGUKLVdyaXRlTGlzdCA9IFNDb25zLldyaXRlTGlzdAotCi0KLWdlbmVyYXRvcl9kZWZhdWx0X3ZhcmlhYmxlcyA9IHsKLSAgICAnRVhFQ1VUQUJMRV9QUkVGSVgnOiAnJywKLSAgICAnRVhFQ1VUQUJMRV9TVUZGSVgnOiAnJywKLSAgICAnU1RBVElDX0xJQl9QUkVGSVgnOiAnJHtMSUJQUkVGSVh9JywKLSAgICAnU0hBUkVEX0xJQl9QUkVGSVgnOiAnJHtTSExJQlBSRUZJWH0nLAotICAgICdTVEFUSUNfTElCX1NVRkZJWCc6ICcke0xJQlNVRkZJWH0nLAotICAgICdTSEFSRURfTElCX1NVRkZJWCc6ICcke1NITElCU1VGRklYfScsCi0gICAgJ0lOVEVSTUVESUFURV9ESVInOiAnJHtJTlRFUk1FRElBVEVfRElSfScsCi0gICAgJ1NIQVJFRF9JTlRFUk1FRElBVEVfRElSJzogJyR7U0hBUkVEX0lOVEVSTUVESUFURV9ESVJ9JywKLSAgICAnT1MnOiAnbGludXgnLAotICAgICdQUk9EVUNUX0RJUic6ICckVE9QX0JVSUxERElSJywKLSAgICAnU0hBUkVEX0xJQl9ESVInOiAnJExJQl9ESVInLAotICAgICdMSUJfRElSJzogJyRMSUJfRElSJywKLSAgICAnUlVMRV9JTlBVVF9ST09UJzogJyR7U09VUkNFLmZpbGViYXNlfScsCi0gICAgJ1JVTEVfSU5QVVRfRElSTkFNRSc6ICcke1NPVVJDRS5kaXJ9JywKLSAgICAnUlVMRV9JTlBVVF9FWFQnOiAnJHtTT1VSQ0Uuc3VmZml4fScsCi0gICAgJ1JVTEVfSU5QVVRfTkFNRSc6ICcke1NPVVJDRS5maWxlfScsCi0gICAgJ1JVTEVfSU5QVVRfUEFUSCc6ICcke1NPVVJDRS5hYnNwYXRofScsCi0gICAgJ0NPTkZJR1VSQVRJT05fTkFNRSc6ICcke0NPTkZJR19OQU1FfScsCi19Ci0KLSMgVGVsbCBHWVAgaG93IHRvIHByb2Nlc3MgdGhlIGlucHV0IGZvciB1cy4KLWdlbmVyYXRvcl9oYW5kbGVzX3ZhcmlhbnRzID0gVHJ1ZQotZ2VuZXJhdG9yX3dhbnRzX2Fic29sdXRlX2J1aWxkX2ZpbGVfcGF0aHMgPSBUcnVlCi0KLQotZGVmIEZpeFBhdGgocGF0aCwgcHJlZml4KToKLSAgaWYgbm90IG9zLnBhdGguaXNhYnMocGF0aCkgYW5kIG5vdCBwYXRoWzBdID09ICckJzoKLSAgICBwYXRoID0gcHJlZml4ICsgcGF0aAotICByZXR1cm4gcGF0aAotCi0KLWhlYWRlciA9ICIiIlwKLSMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZDsgZG8gbm90IGVkaXQuCi0iIiIKLQotCi1fYWxpYXNfdGVtcGxhdGUgPSAiIiIKLWlmIEdldE9wdGlvbigndmVyYm9zZScpOgotICBfYWN0aW9uID0gQWN0aW9uKFslKGFjdGlvbilzXSkKLWVsc2U6Ci0gIF9hY3Rpb24gPSBBY3Rpb24oWyUoYWN0aW9uKXNdLCAlKG1lc3NhZ2UpcykKLV9vdXRwdXRzID0gZW52LkFsaWFzKAotICBbJ18lKHRhcmdldF9uYW1lKXNfYWN0aW9uJ10sCi0gICUoaW5wdXRzKXMsCi0gIF9hY3Rpb24KLSkKLWVudi5BbHdheXNCdWlsZChfb3V0cHV0cykKLSIiIgotCi1fcnVuX2FzX3RlbXBsYXRlID0gIiIiCi1pZiBHZXRPcHRpb24oJ3ZlcmJvc2UnKToKLSAgX2FjdGlvbiA9IEFjdGlvbihbJShhY3Rpb24pc10pCi1lbHNlOgotICBfYWN0aW9uID0gQWN0aW9uKFslKGFjdGlvbilzXSwgJShtZXNzYWdlKXMpCi0iIiIKLQotX3J1bl9hc190ZW1wbGF0ZV9zdWZmaXggPSAiIiIKLV9ydW5fYXNfdGFyZ2V0ID0gZW52LkFsaWFzKCdydW5fJSh0YXJnZXRfbmFtZSlzJywgdGFyZ2V0X2ZpbGVzLCBfYWN0aW9uKQotZW52LlJlcXVpcmVzKF9ydW5fYXNfdGFyZ2V0LCBbCi0gICAgQWxpYXMoJyUodGFyZ2V0X25hbWUpcycpLAotXSkKLWVudi5BbHdheXNCdWlsZChfcnVuX2FzX3RhcmdldCkKLSIiIgotCi1fY29tbWFuZF90ZW1wbGF0ZSA9ICIiIgotaWYgR2V0T3B0aW9uKCd2ZXJib3NlJyk6Ci0gIF9hY3Rpb24gPSBBY3Rpb24oWyUoYWN0aW9uKXNdKQotZWxzZToKLSAgX2FjdGlvbiA9IEFjdGlvbihbJShhY3Rpb24pc10sICUobWVzc2FnZSlzKQotX291dHB1dHMgPSBlbnYuQ29tbWFuZCgKLSAgJShvdXRwdXRzKXMsCi0gICUoaW5wdXRzKXMsCi0gIF9hY3Rpb24KLSkKLSIiIgotCi0jIFRoaXMgaXMgY29waWVkIGZyb20gdGhlIGRlZmF1bHQgU0NvbnMgYWN0aW9uLCB1cGRhdGVkIHRvIGhhbmRsZSBzeW1saW5rcy4KLV9jb3B5X2FjdGlvbl90ZW1wbGF0ZSA9ICIiIgotaW1wb3J0IHNodXRpbAotaW1wb3J0IFNDb25zLkFjdGlvbgotCi1kZWYgX2NvcHlfZmlsZXNfb3JfZGlyc19vcl9zeW1saW5rcyhkZXN0LCBzcmMpOgotICBTQ29ucy5Ob2RlLkZTLmludmFsaWRhdGVfbm9kZV9tZW1vcyhkZXN0KQotICBpZiBTQ29ucy5VdGlsLmlzX0xpc3Qoc3JjKSBhbmQgb3MucGF0aC5pc2RpcihkZXN0KToKLSAgICBmb3IgZmlsZSBpbiBzcmM6Ci0gICAgICBzaHV0aWwuY29weTIoZmlsZSwgZGVzdCkKLSAgICByZXR1cm4gMAotICBlbGlmIG9zLnBhdGguaXNsaW5rKHNyYyk6Ci0gICAgbGlua3RvID0gb3MucmVhZGxpbmsoc3JjKQotICAgIG9zLnN5bWxpbmsobGlua3RvLCBkZXN0KQotICAgIHJldHVybiAwCi0gIGVsaWYgb3MucGF0aC5pc2ZpbGUoc3JjKToKLSAgICByZXR1cm4gc2h1dGlsLmNvcHkyKHNyYywgZGVzdCkKLSAgZWxzZToKLSAgICByZXR1cm4gc2h1dGlsLmNvcHl0cmVlKHNyYywgZGVzdCwgMSkKLQotZGVmIF9jb3B5X2ZpbGVzX29yX2RpcnNfb3Jfc3ltbGlua3Nfc3RyKGRlc3QsIHNyYyk6Ci0gIHJldHVybiAnQ29weWluZyAlcyB0byAlcyAuLi4nICUgKHNyYywgZGVzdCkKLQotR1lQQ29weSA9IFNDb25zLkFjdGlvbi5BY3Rpb25GYWN0b3J5KF9jb3B5X2ZpbGVzX29yX2RpcnNfb3Jfc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvcHlfZmlsZXNfb3JfZGlyc19vcl9zeW1saW5rc19zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydD1zdHIpCi0iIiIKLQotX3J1bGVfdGVtcGxhdGUgPSAiIiIKLSUobmFtZSlzX2FkZGl0aW9uYWxfaW5wdXRzID0gJShpbnB1dHMpcwotJShuYW1lKXNfb3V0cHV0cyA9ICUob3V0cHV0cylzCi1kZWYgJShuYW1lKXNfZW1pdHRlcih0YXJnZXQsIHNvdXJjZSwgZW52KToKLSAgcmV0dXJuICglKG5hbWUpc19vdXRwdXRzLCBzb3VyY2UgKyAlKG5hbWUpc19hZGRpdGlvbmFsX2lucHV0cykKLWlmIEdldE9wdGlvbigndmVyYm9zZScpOgotICAlKG5hbWUpc19hY3Rpb24gPSBBY3Rpb24oWyUoYWN0aW9uKXNdKQotZWxzZToKLSAgJShuYW1lKXNfYWN0aW9uID0gQWN0aW9uKFslKGFjdGlvbilzXSwgJShtZXNzYWdlKXMpCi1lbnZbJ0JVSUxERVJTJ11bJyUobmFtZSlzJ10gPSBCdWlsZGVyKGFjdGlvbj0lKG5hbWUpc19hY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXI9JShuYW1lKXNfZW1pdHRlcikKLQotX291dHB1dHMgPSBbXQotX3Byb2Nlc3NlZF9pbnB1dF9maWxlcyA9IFtdCi1mb3IgaW5maWxlIGluIGlucHV0X2ZpbGVzOgotICBpZiAodHlwZShpbmZpbGUpID09IHR5cGUoJycpCi0gICAgICBhbmQgbm90IG9zLnBhdGguaXNhYnMoaW5maWxlKQotICAgICAgYW5kIG5vdCBpbmZpbGVbMF0gPT0gJyQnKToKLSAgICBpbmZpbGUgPSAlKHNyY19kaXIpciArIGluZmlsZQotICBpZiBzdHIoaW5maWxlKS5lbmRzd2l0aCgnLiUoZXh0ZW5zaW9uKXMnKToKLSAgICBfZ2VuZXJhdGVkID0gZW52LiUobmFtZSlzKGluZmlsZSkKLSAgICBlbnYuUHJlY2lvdXMoX2dlbmVyYXRlZCkKLSAgICBfb3V0cHV0cy5hcHBlbmQoX2dlbmVyYXRlZCkKLSAgICAlKHByb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzX2xpbmUpcwotICBlbHNlOgotICAgIF9wcm9jZXNzZWRfaW5wdXRfZmlsZXMuYXBwZW5kKGluZmlsZSkKLXByZXJlcXVpc2l0ZXMuZXh0ZW5kKF9vdXRwdXRzKQotaW5wdXRfZmlsZXMgPSBfcHJvY2Vzc2VkX2lucHV0X2ZpbGVzCi0iIiIKLQotX3NwYXduX2hhY2sgPSAiIiIKLWltcG9ydCByZQotaW1wb3J0IFNDb25zLlBsYXRmb3JtLnBvc2l4Ci1uZWVkc19zaGVsbCA9IHJlLmNvbXBpbGUoJ1siXFwnPjwhXiZdJykKLWRlZiBneXBfc3Bhd24oc2gsIGVzY2FwZSwgY21kLCBhcmdzLCBlbnYpOgotICBkZWYgc3RyaXBfc2NvbnNfcXVvdGVzKGFyZyk6Ci0gICAgaWYgYXJnWzBdID09ICciJyBhbmQgYXJnWy0xXSA9PSAnIic6Ci0gICAgICByZXR1cm4gYXJnWzE6LTFdCi0gICAgcmV0dXJuIGFyZwotICBzdHJpcHBlZF9hcmdzID0gW3N0cmlwX3Njb25zX3F1b3RlcyhhKSBmb3IgYSBpbiBhcmdzXQotICBpZiBuZWVkc19zaGVsbC5zZWFyY2goJyAnLmpvaW4oc3RyaXBwZWRfYXJncykpOgotICAgIHJldHVybiBTQ29ucy5QbGF0Zm9ybS5wb3NpeC5leGVjX3NwYXdudnBlKFtzaCwgJy1jJywgJyAnLmpvaW4oYXJncyldLCBlbnYpCi0gIGVsc2U6Ci0gICAgcmV0dXJuIFNDb25zLlBsYXRmb3JtLnBvc2l4LmV4ZWNfc3Bhd252cGUoc3RyaXBwZWRfYXJncywgZW52KQotIiIiCi0KLQotZGVmIEVzY2FwZVNoZWxsQXJndW1lbnQocyk6Ci0gICIiIlF1b3RlcyBhbiBhcmd1bWVudCBzbyB0aGF0IGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgbGl0ZXJhbGx5IGJ5IGEgUE9TSVgKLSAgICAgc2hlbGwuIFRha2VuIGZyb20KLSAgICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTgxNy93aGF0cy10aGUtYmVzdC13YXktdG8tZXNjYXBlLW9zc3lzdGVtLWNhbGxzLWluLXB5dGhvbgotICAgICAiIiIKLSAgcmV0dXJuICInIiArIHMucmVwbGFjZSgiJyIsICInXFwnJyIpICsgIiciCi0KLQotZGVmIEludmVydE5haXZlU0NvbnNRdW90aW5nKHMpOgotICAiIiJTQ29ucyB0cmllcyB0byAiaGVscCIgd2l0aCBxdW90aW5nIGJ5IG5haXZlbHkgcHV0dGluZyBkb3VibGUtcXVvdGVzIGFyb3VuZAotICAgICBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGNvbnRhaW5pbmcgc3BhY2Ugb3IgdGFiLCB3aGljaCBpcyBicm9rZW4gZm9yIGFsbAotICAgICBidXQgdHJpdmlhbCBjYXNlcywgc28gd2UgdW5kbyBpdC4gKFNlZSBxdW90ZV9zcGFjZXMoKSBpbiBTdWJzdC5weSkiIiIKLSAgaWYgJyAnIGluIHMgb3IgJ1x0JyBpbiBzOgotICAgICMgVGhlbiBTQ29ucyB3aWxsIHB1dCBkb3VibGUtcXVvdGVzIGFyb3VuZCB0aGlzLCBzbyBhZGQgb3VyIG93biBxdW90ZXMKLSAgICAjIHRvIGNsb3NlIGl0cyBxdW90ZXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kLgotICAgIHMgPSAnIicgKyBzICsgJyInCi0gIHJldHVybiBzCi0KLQotZGVmIEVzY2FwZVNDb25zVmFyaWFibGVFeHBhbnNpb24ocyk6Ci0gICIiIlNDb25zIGhhcyBpdHMgb3duIHZhcmlhYmxlIGV4cGFuc2lvbiBzeW50YXggdXNpbmcgJC4gV2UgbXVzdCBlc2NhcGUgaXQgZm9yCi0gICAgc3RyaW5ncyB0byBiZSBpbnRlcnByZXRlZCBsaXRlcmFsbHkuIEZvciBzb21lIHJlYXNvbiB0aGlzIHJlcXVpcmVzIGZvdXIKLSAgICBkb2xsYXIgc2lnbnMsIG5vdCB0d28sIGV2ZW4gd2l0aG91dCB0aGUgc2hlbGwgaW52b2x2ZWQuIiIiCi0gIHJldHVybiBzLnJlcGxhY2UoJyQnLCAnJCQkJCcpCi0KLQotZGVmIEVzY2FwZUNwcERlZmluZShzKToKLSAgIiIiRXNjYXBlcyBhIENQUCBkZWZpbmUgc28gdGhhdCBpdCB3aWxsIHJlYWNoIHRoZSBjb21waWxlciB1bmFsdGVyZWQuIiIiCi0gIHMgPSBFc2NhcGVTaGVsbEFyZ3VtZW50KHMpCi0gIHMgPSBJbnZlcnROYWl2ZVNDb25zUXVvdGluZyhzKQotICBzID0gRXNjYXBlU0NvbnNWYXJpYWJsZUV4cGFuc2lvbihzKQotICByZXR1cm4gcwotCi0KLWRlZiBHZW5lcmF0ZUNvbmZpZyhmcCwgY29uZmlnLCBpbmRlbnQ9JycsIHNyY19kaXI9JycpOgotICAiIiIKLSAgR2VuZXJhdGVzIFNDb25zIGRpY3Rpb25hcnkgaXRlbXMgZm9yIGEgZ3lwIGNvbmZpZ3VyYXRpb24uCi0KLSAgVGhpcyBwcm92aWRlcyB0aGUgbWFpbiB0cmFuc2xhdGlvbiBiZXR3ZWVuIHRoZSAobG93ZXItY2FzZSkgZ3lwIHNldHRpbmdzCi0gIGtleXdvcmRzIGFuZCB0aGUgKHVwcGVyLWNhc2UpIFNDb25zIGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMuCi0gICIiIgotICB2YXJfbWFwcGluZyA9IHsKLSAgICAgICdBU0ZMQUdTJyA6ICdhc2ZsYWdzJywKLSAgICAgICdDQ0ZMQUdTJyA6ICdjZmxhZ3MnLAotICAgICAgJ0NGTEFHUycgOiAnY2ZsYWdzX2MnLAotICAgICAgJ0NYWEZMQUdTJyA6ICdjZmxhZ3NfY2MnLAotICAgICAgJ0NQUERFRklORVMnIDogJ2RlZmluZXMnLAotICAgICAgJ0NQUFBBVEgnIDogJ2luY2x1ZGVfZGlycycsCi0gICAgICAjIEFkZCB0aGUgbGRmbGFncyB2YWx1ZSB0byAkTElOS0ZMQUdTLCBidXQgbm90ICRTSExJTktGTEFHUy4KLSAgICAgICMgU0NvbnMgZGVmaW5lcyAkU0hMSU5LRkxBR1MgdG8gaW5jb3Jwb3JhdGUgJExJTktGTEFHUywgc28KLSAgICAgICMgbGlzdGluZyBib3RoIGhlcmUgd291bGQgY2FzZSAnbGRmbGFncycgdG8gZ2V0IGFwcGVuZGVkIHRvCi0gICAgICAjIGJvdGgsIGFuZCB0aGVuIGhhdmUgaXQgc2hvdyB1cCB0d2ljZSBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgICAgJ0xJTktGTEFHUycgOiAnbGRmbGFncycsCi0gIH0KLSAgcG9zdGFtYmxlPSdcbiVzXSxcbicgJSBpbmRlbnQKLSAgZm9yIHNjb25zX3ZhciBpbiBzb3J0ZWQodmFyX21hcHBpbmcua2V5cygpKToKLSAgICAgIGd5cF92YXIgPSB2YXJfbWFwcGluZ1tzY29uc192YXJdCi0gICAgICB2YWx1ZSA9IGNvbmZpZy5nZXQoZ3lwX3ZhcikKLSAgICAgIGlmIHZhbHVlOgotICAgICAgICBpZiBneXBfdmFyIGluICgnZGVmaW5lcycsKToKLSAgICAgICAgICB2YWx1ZSA9IFtFc2NhcGVDcHBEZWZpbmUodikgZm9yIHYgaW4gdmFsdWVdCi0gICAgICAgIGlmIGd5cF92YXIgaW4gKCdpbmNsdWRlX2RpcnMnLCk6Ci0gICAgICAgICAgaWYgc3JjX2RpciBhbmQgbm90IHNyY19kaXIuZW5kc3dpdGgoJy8nKToKLSAgICAgICAgICAgIHNyY19kaXIgKz0gJy8nCi0gICAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKLSAgICAgICAgICAgIHYgPSBGaXhQYXRoKHYsIHNyY19kaXIpCi0gICAgICAgICAgICAjIEZvcmNlIFNDb25zIHRvIGV2YWx1YXRlIHRoZSBDUFBQQVRIIGRpcmVjdG9yaWVzIGF0Ci0gICAgICAgICAgICAjIFNDb25zY3JpcHQtcmVhZCB0aW1lLCBzbyBkZWxheWVkIGV2YWx1YXRpb24gb2YgJFNSQ19ESVIKLSAgICAgICAgICAgICMgZG9lc24ndCBwb2ludCBpdCB0byB0aGUgLS1nZW5lcmF0b3Itb3V0cHV0PSBkaXJlY3RvcnkuCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdlbnYuRGlyKCVyKScgJSB2KQotICAgICAgICAgIHZhbHVlID0gcmVzdWx0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgdmFsdWUgPSBtYXAocmVwciwgdmFsdWUpCi0gICAgICAgIFdyaXRlTGlzdChmcCwKLSAgICAgICAgICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgICAgcHJlZml4PWluZGVudCwKLSAgICAgICAgICAgICAgICAgIHByZWFtYmxlPSclcyVzID0gW1xuICAgICcgJSAoaW5kZW50LCBzY29uc192YXIpLAotICAgICAgICAgICAgICAgICAgcG9zdGFtYmxlPXBvc3RhbWJsZSkKLQotCi1kZWYgR2VuZXJhdGVTQ29uc2NyaXB0KG91dHB1dF9maWxlbmFtZSwgc3BlYywgYnVpbGRfZmlsZSwgYnVpbGRfZmlsZV9kYXRhKToKLSAgIiIiCi0gIEdlbmVyYXRlcyBhIFNDb25zY3JpcHQgZmlsZSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQuCi0KLSAgVGhpcyBnZW5lcmF0ZXMgYSBTQ29uc2NyaXB0IGZpbGUgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIGFueSBvciBhbGwgb2YKLSAgdGhlIHRhcmdldCdzIGNvbmZpZ3VyYXRpb25zLgotCi0gIEEgU0NvbnNjcmlwdCBmaWxlIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gZ2VuZXJhdGUgdGFyZ2V0cyBmb3IKLSAgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMuICBDb25zZXF1ZW50bHksIGl0IG5lZWRzIHRvIGJlIHJlYWR5IHRvIGJ1aWxkCi0gIHRoZSB0YXJnZXQgZm9yIGFueSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiwgYW5kIHRoZXJlZm9yZSBjb250YWlucwotICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2V0dGluZ3MgZm9yIGFsbCBjb25maWd1cmF0aW9ucyAoZ2VuZXJhdGVkIGludG8KLSAgdGhlIFNDb25zY3JpcHQgZmlsZSBhdCBneXAgY29uZmlndXJhdGlvbiB0aW1lKSBhcyB3ZWxsIGFzIGxvZ2ljIGZvcgotICBzZWxlY3RpbmcgKGF0IFNDb25zIGJ1aWxkIHRpbWUpIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGJlaW5nIGJ1aWx0LgotCi0gIFRoZSBnZW5lcmFsIG91dGxpbmUgb2YgYSBnZW5lcmF0ZWQgU0NvbnNjcmlwdCBmaWxlIGlzOgotCi0gICAgLS0gIEhlYWRlcgotCi0gICAgLS0gIEltcG9ydCAnZW52Jy4gIFRoaXMgY29udGFpbnMgYSAkQ09ORklHX05BTUUgY29uc3RydWN0aW9uCi0gICAgICAgIHZhcmlhYmxlIHRoYXQgc3BlY2lmaWVzIHdoYXQgY29uZmlndXJhdGlvbiB0byBidWlsZAotICAgICAgICAoZS5nLiBEZWJ1ZywgUmVsZWFzZSkuCi0KLSAgICAtLSAgQ29uZmlndXJhdGlvbnMuICBUaGlzIGlzIGEgZGljdGlvbmFyeSB3aXRoIHNldHRpbmdzIGZvcgotICAgICAgICB0aGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIChEZWJ1ZywgUmVsZWFzZSkgdW5kZXIgd2hpY2ggdGhpcwotICAgICAgICB0YXJnZXQgY2FuIGJlIGJ1aWx0LiAgVGhlIHZhbHVlcyBpbiB0aGUgZGljdGlvbmFyeSBhcmUgdGhlbXNlbHZlcwotICAgICAgICBkaWN0aW9uYXJpZXMgc3BlY2lmeWluZyB3aGF0IGNvbnN0cnVjdGlvbiB2YXJpYWJsZXMgc2hvdWxkIGFkZGVkCi0gICAgICAgIHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBpbXBvcnRlZCBjb25zdHJ1Y3Rpb24gZW52aXJvbm1lbnQKLSAgICAgICAgKEFwcGVuZCksIHNob3VsZCBiZSByZW1vdmVkIChGaWx0ZXJPdXQpLCBhbmQgc2hvdWxkIG91dHJpZ2h0Ci0gICAgICAgIHJlcGxhY2UgdGhlIGltcG9ydGVkIHZhbHVlcyAoUmVwbGFjZSkuCi0KLSAgICAtLSAgQ2xvbmUgdGhlIGltcG9ydGVkIGNvbnN0cnVjdGlvbiBlbnZpcm9ubWVudCBhbmQgdXBkYXRlCi0gICAgICAgIHdpdGggdGhlIHByb3BlciBjb25maWd1cmF0aW9uIHNldHRpbmdzLgotCi0gICAgLS0gIEluaXRpYWxpemUgdGhlIGxpc3RzIG9mIHRoZSB0YXJnZXRzJyBpbnB1dCBmaWxlcyBhbmQgcHJlcmVxdWlzaXRlcy4KLQotICAgIC0tICBUYXJnZXQtc3BlY2lmaWMgYWN0aW9ucyBhbmQgcnVsZXMuICBUaGVzZSBjb21lIGFmdGVyIHRoZQotICAgICAgICBpbnB1dCBmaWxlIGFuZCBwcmVyZXF1aXNpdGUgaW5pdGlhbGl6YXRpb25zIGJlY2F1c2UgdGhlCi0gICAgICAgIG91dHB1dHMgb2YgdGhlIGFjdGlvbnMgYW5kIHJ1bGVzIG1heSBhZmZlY3QgdGhlIGlucHV0IGZpbGUKLSAgICAgICAgbGlzdCAocHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMpIGFuZCBnZXQgYWRkZWQgdG8gdGhlIGxpc3Qgb2YKLSAgICAgICAgcHJlcmVxdWlzaXRlcyAoc28gdGhhdCB0aGV5J3JlIGd1YXJhbnRlZWQgdG8gYmUgZXhlY3V0ZWQgYmVmb3JlCi0gICAgICAgIGJ1aWxkaW5nIHRoZSB0YXJnZXQpLgotCi0gICAgLS0gIENhbGwgdGhlIEJ1aWxkZXIgZm9yIHRoZSB0YXJnZXQgaXRzZWxmLgotCi0gICAgLS0gIEFycmFuZ2UgZm9yIGFueSBjb3BpZXMgdG8gYmUgbWFkZSBpbnRvIGluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KLQotICAgIC0tICBTZXQgdXAgdGhlIHtuYW1lfSBBbGlhcyAocGhvbnkgTm9kZSkgZm9yIHRoZSB0YXJnZXQgYXMgdGhlCi0gICAgICAgIHByaW1hcnkgaGFuZGxlIGZvciBidWlsZGluZyBhbGwgb2YgdGhlIHRhcmdldCdzIHBpZWNlcy4KLQotICAgIC0tICBVc2UgZW52LlJlcXVpcmUoKSB0byBtYWtlIHN1cmUgdGhlIHByZXJlcXVpc2l0ZXMgKGV4cGxpY2l0bHkKLSAgICAgICAgc3BlY2lmaWVkLCBidXQgYWxzbyBpbmNsdWRpbmcgdGhlIGFjdGlvbnMgYW5kIHJ1bGVzKSBhcmUgYnVpbHQKLSAgICAgICAgYmVmb3JlIHRoZSB0YXJnZXQgaXRzZWxmLgotCi0gICAgLS0gIFJldHVybiB0aGUge25hbWV9IEFsaWFzIHRvIHRoZSBjYWxsaW5nIFNDb25zdHJ1Y3QgZmlsZQotICAgICAgICBzbyBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZGVmYXVsdCB0YXJnZXRzLgotICAiIiIKLSAgc2NvbnNfdGFyZ2V0ID0gU0NvbnMuVGFyZ2V0KHNwZWMpCi0KLSAgZ3lwX2RpciA9IG9zLnBhdGguZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpCi0gIGlmIG5vdCBneXBfZGlyOgotICAgICAgZ3lwX2RpciA9ICcuJwotICBneXBfZGlyID0gb3MucGF0aC5hYnNwYXRoKGd5cF9kaXIpCi0KLSAgb3V0cHV0X2RpciA9IG9zLnBhdGguZGlybmFtZShvdXRwdXRfZmlsZW5hbWUpCi0gIHNyY19kaXIgPSBidWlsZF9maWxlX2RhdGFbJ19ERVBUSCddCi0gIHNyY19kaXJfcmVsID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoc3JjX2Rpciwgb3V0cHV0X2RpcikKLSAgc3ViZGlyID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgob3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpLCBzcmNfZGlyKQotICBzcmNfc3ViZGlyID0gJyRTUkNfRElSLycgKyBzdWJkaXIKLSAgc3JjX3N1YmRpcl8gPSBzcmNfc3ViZGlyICsgJy8nCi0KLSAgY29tcG9uZW50X25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoYnVpbGRfZmlsZSkpWzBdCi0gIHRhcmdldF9uYW1lID0gc3BlY1sndGFyZ2V0X25hbWUnXQotCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhneXBfZGlyKToKLSAgICBvcy5tYWtlZGlycyhneXBfZGlyKQotICBmcCA9IG9wZW4ob3V0cHV0X2ZpbGVuYW1lLCAndycpCi0gIGZwLndyaXRlKGhlYWRlcikKLQotICBmcC53cml0ZSgnXG5pbXBvcnQgb3NcbicpCi0gIGZwLndyaXRlKCdcbkltcG9ydCgiZW52IilcbicpCi0KLSAgIwotICBmcC53cml0ZSgnXG4nKQotICBmcC53cml0ZSgnZW52ID0gZW52LkNsb25lKENPTVBPTkVOVF9OQU1FPSVzLFxuJyAlIHJlcHIoY29tcG9uZW50X25hbWUpKQotICBmcC53cml0ZSgnICAgICAgICAgICAgICAgIFRBUkdFVF9OQU1FPSVzKVxuJyAlIHJlcHIodGFyZ2V0X25hbWUpKQotCi0gICMKLSAgZm9yIGNvbmZpZyBpbiBzcGVjWydjb25maWd1cmF0aW9ucyddLml0ZXJ2YWx1ZXMoKToKLSAgICBpZiBjb25maWcuZ2V0KCdzY29uc19saW5lX2xlbmd0aCcpOgotICAgICAgZnAud3JpdGUoX3NwYXduX2hhY2spCi0gICAgICBicmVhawotCi0gICMKLSAgaW5kZW50ID0gJyAnICogMTIKLSAgZnAud3JpdGUoJ1xuJykKLSAgZnAud3JpdGUoJ2NvbmZpZ3VyYXRpb25zID0ge1xuJykKLSAgZm9yIGNvbmZpZ19uYW1lLCBjb25maWcgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS5pdGVyaXRlbXMoKToKLSAgICBmcC53cml0ZSgnICAgIFwnJXNcJyA6IHtcbicgJSBjb25maWdfbmFtZSkKLQotICAgIGZwLndyaXRlKCcgICAgICAgIFwnQXBwZW5kXCcgOiBkaWN0KFxuJykKLSAgICBHZW5lcmF0ZUNvbmZpZyhmcCwgY29uZmlnLCBpbmRlbnQsIHNyY19zdWJkaXIpCi0gICAgbGlicmFyaWVzID0gc3BlYy5nZXQoJ2xpYnJhcmllcycpCi0gICAgaWYgbGlicmFyaWVzOgotICAgICAgV3JpdGVMaXN0KGZwLAotICAgICAgICAgICAgICAgIG1hcChyZXByLCBsaWJyYXJpZXMpLAotICAgICAgICAgICAgICAgIHByZWZpeD1pbmRlbnQsCi0gICAgICAgICAgICAgICAgcHJlYW1ibGU9JyVzTElCUyA9IFtcbiAgICAnICUgaW5kZW50LAotICAgICAgICAgICAgICAgIHBvc3RhbWJsZT0nXG4lc10sXG4nICUgaW5kZW50KQotICAgIGZwLndyaXRlKCcgICAgICAgICksXG4nKQotCi0gICAgZnAud3JpdGUoJyAgICAgICAgXCdGaWx0ZXJPdXRcJyA6IGRpY3QoXG4nICkKLSAgICBmb3Iga2V5LCB2YXIgaW4gY29uZmlnLmdldCgnc2NvbnNfcmVtb3ZlJywge30pLml0ZXJpdGVtcygpOgotICAgICAgZnAud3JpdGUoJyAgICAgICAgICAgICAlcyA9ICVzLFxuJyAlIChrZXksIHJlcHIodmFyKSkpCi0gICAgZnAud3JpdGUoJyAgICAgICAgKSxcbicpCi0KLSAgICBmcC53cml0ZSgnICAgICAgICBcJ1JlcGxhY2VcJyA6IGRpY3QoXG4nICkKLSAgICBzY29uc19zZXR0aW5ncyA9IGNvbmZpZy5nZXQoJ3Njb25zX3ZhcmlhYmxlX3NldHRpbmdzJywge30pCi0gICAgZm9yIGtleSBpbiBzb3J0ZWQoc2NvbnNfc2V0dGluZ3Mua2V5cygpKToKLSAgICAgIHZhbCA9IHBwcmludC5wZm9ybWF0KHNjb25zX3NldHRpbmdzW2tleV0pCi0gICAgICBmcC53cml0ZSgnICAgICAgICAgICAgICVzID0gJXMsXG4nICUgKGtleSwgdmFsKSkKLSAgICBpZiAnYysrJyBpbiBzcGVjLmdldCgnbGlua19sYW5ndWFnZXMnLCBbXSk6Ci0gICAgICBmcC53cml0ZSgnICAgICAgICAgICAgICVzID0gJXMsXG4nICUgKCdMSU5LJywgcmVwcignJENYWCcpKSkKLSAgICBpZiBjb25maWcuZ2V0KCdzY29uc19saW5lX2xlbmd0aCcpOgotICAgICAgZnAud3JpdGUoJyAgICAgICAgICAgICBTUEFXTiA9IGd5cF9zcGF3bixcbicpCi0gICAgZnAud3JpdGUoJyAgICAgICAgKSxcbicpCi0KLSAgICBmcC53cml0ZSgnICAgICAgICBcJ0ltcG9ydEV4dGVybmFsXCcgOiBbXG4nICkKLSAgICBmb3IgdmFyIGluIGNvbmZpZy5nZXQoJ3Njb25zX2ltcG9ydF92YXJpYWJsZXMnLCBbXSk6Ci0gICAgICBmcC53cml0ZSgnICAgICAgICAgICAgICVzLFxuJyAlIHJlcHIodmFyKSkKLSAgICBmcC53cml0ZSgnICAgICAgICBdLFxuJykKLQotICAgIGZwLndyaXRlKCcgICAgICAgIFwnUHJvcGFnYXRlRXh0ZXJuYWxcJyA6IFtcbicgKQotICAgIGZvciB2YXIgaW4gY29uZmlnLmdldCgnc2NvbnNfcHJvcGFnYXRlX3ZhcmlhYmxlcycsIFtdKToKLSAgICAgIGZwLndyaXRlKCcgICAgICAgICAgICAgJXMsXG4nICUgcmVwcih2YXIpKQotICAgIGZwLndyaXRlKCcgICAgICAgIF0sXG4nKQotCi0gICAgZnAud3JpdGUoJyAgICB9LFxuJykKLSAgZnAud3JpdGUoJ31cbicpCi0KLSAgZnAud3JpdGUoJ1xuJwotICAgICAgICAgICAnY29uZmlnID0gY29uZmlndXJhdGlvbnNbZW52W1wnQ09ORklHX05BTUVcJ11dXG4nCi0gICAgICAgICAgICdlbnYuQXBwZW5kKCoqY29uZmlnW1wnQXBwZW5kXCddKVxuJwotICAgICAgICAgICAnZW52LkZpbHRlck91dCgqKmNvbmZpZ1tcJ0ZpbHRlck91dFwnXSlcbicKLSAgICAgICAgICAgJ2Vudi5SZXBsYWNlKCoqY29uZmlnW1wnUmVwbGFjZVwnXSlcbicpCi0KLSAgZnAud3JpdGUoJ1xuJwotICAgICAgICAgICAnIyBTY29ucyBmb3JjZXMgLWZQSUMgZm9yIFNIQ0NGTEFHUyBvbiBzb21lIHBsYXRmb3Jtcy5cbicKLSAgICAgICAgICAgJyMgRGlzYWJsZSB0aGF0IHNvIHdlIGNhbiBjb250cm9sIGl0IGZyb20gY2ZsYWdzIGluIGd5cC5cbicKLSAgICAgICAgICAgJyMgTm90ZSB0aGF0IFNjb25zIGl0c2VsZiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpdHMgLWZQSUNcbicKLSAgICAgICAgICAgJyMgc2V0dGluZy4gU0hDQ0ZMQUdTIGZvcmNlcyAtZlBJQywgYW5kIFNIQ0ZMQUdTIGRvZXMgbm90LlxuJwotICAgICAgICAgICAnIyBUaGlzIHdpbGwgbWFrZSBTSENDRkxBR1MgY29uc2lzdGVudCB3aXRoIFNIQ0ZMQUdTLlxuJwotICAgICAgICAgICAnZW52W1wnU0hDQ0ZMQUdTXCddID0gW1wnJENDRkxBR1NcJ11cbicpCi0KLSAgZnAud3JpdGUoJ1xuJwotICAgICAgICAgICAnZm9yIF92YXIgaW4gY29uZmlnW1wnSW1wb3J0RXh0ZXJuYWxcJ106XG4nCi0gICAgICAgICAgICcgIGlmIF92YXIgaW4gQVJHVU1FTlRTOlxuJwotICAgICAgICAgICAnICAgIGVudltfdmFyXSA9IEFSR1VNRU5UU1tfdmFyXVxuJwotICAgICAgICAgICAnICBlbGlmIF92YXIgaW4gb3MuZW52aXJvbjpcbicKLSAgICAgICAgICAgJyAgICBlbnZbX3Zhcl0gPSBvcy5lbnZpcm9uW192YXJdXG4nCi0gICAgICAgICAgICdmb3IgX3ZhciBpbiBjb25maWdbXCdQcm9wYWdhdGVFeHRlcm5hbFwnXTpcbicKLSAgICAgICAgICAgJyAgaWYgX3ZhciBpbiBBUkdVTUVOVFM6XG4nCi0gICAgICAgICAgICcgICAgZW52W192YXJdID0gQVJHVU1FTlRTW192YXJdXG4nCi0gICAgICAgICAgICcgIGVsaWYgX3ZhciBpbiBvcy5lbnZpcm9uOlxuJwotICAgICAgICAgICAnICAgIGVudltcJ0VOVlwnXVtfdmFyXSA9IG9zLmVudmlyb25bX3Zhcl1cbicpCi0KLSAgZnAud3JpdGUoJ1xuJwotICAgICAgICAgICAiZW52WydFTlYnXVsnTERfTElCUkFSWV9QQVRIJ10gPSBlbnYuc3Vic3QoJyRMSUJfRElSJylcbiIpCi0KLSAgIwotICAjZnAud3JpdGUoIlxuaWYgZW52Lmhhc19rZXkoJ0NQUFBBVEgnKTpcbiIpCi0gICNmcC53cml0ZSgiICBlbnZbJ0NQUFBBVEgnXSA9IG1hcChlbnYuRGlyLCBlbnZbJ0NQUFBBVEgnXSlcbiIpCi0KLSAgdmFyaWFudHMgPSBzcGVjLmdldCgndmFyaWFudHMnLCB7fSkKLSAgZm9yIHNldHRpbmcgaW4gc29ydGVkKHZhcmlhbnRzLmtleXMoKSk6Ci0gICAgaWZfZm10ID0gJ2lmIEFSR1VNRU5UUy5nZXQoJXMpIG5vdCBpbiAoTm9uZSwgXCcwXCcpOlxuJwotICAgIGZwLndyaXRlKCdcbicpCi0gICAgZnAud3JpdGUoaWZfZm10ICUgcmVwcihzZXR0aW5nLnVwcGVyKCkpKQotICAgIGZwLndyaXRlKCcgIGVudi5BcHBlbmRVbmlxdWUoXG4nKQotICAgIEdlbmVyYXRlQ29uZmlnKGZwLCB2YXJpYW50c1tzZXR0aW5nXSwgaW5kZW50LCBzcmNfc3ViZGlyKQotICAgIGZwLndyaXRlKCcgIClcbicpCi0KLSAgIwotICBzY29uc190YXJnZXQud3JpdGVfaW5wdXRfZmlsZXMoZnApCi0KLSAgZnAud3JpdGUoJ1xuJykKLSAgZnAud3JpdGUoJ3RhcmdldF9maWxlcyA9IFtdXG4nKQotICBwcmVyZXF1aXNpdGVzID0gc3BlYy5nZXQoJ3Njb25zX3ByZXJlcXVpc2l0ZXMnLCBbXSkKLSAgZnAud3JpdGUoJ3ByZXJlcXVpc2l0ZXMgPSAlc1xuJyAlIHBwcmludC5wZm9ybWF0KHByZXJlcXVpc2l0ZXMpKQotCi0gIGFjdGlvbnMgPSBzcGVjLmdldCgnYWN0aW9ucycsIFtdKQotICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6Ci0gICAgYSA9IFsnY2QnLCBzcmNfc3ViZGlyLCAnJiYnXSArIGFjdGlvblsnYWN0aW9uJ10KLSAgICBtZXNzYWdlID0gYWN0aW9uLmdldCgnbWVzc2FnZScpCi0gICAgaWYgbWVzc2FnZToKLSAgICAgIG1lc3NhZ2UgPSByZXByKG1lc3NhZ2UpCi0gICAgaW5wdXRzID0gW0ZpeFBhdGgoZiwgc3JjX3N1YmRpcl8pIGZvciBmIGluIGFjdGlvbi5nZXQoJ2lucHV0cycsIFtdKV0KLSAgICBvdXRwdXRzID0gW0ZpeFBhdGgoZiwgc3JjX3N1YmRpcl8pIGZvciBmIGluIGFjdGlvbi5nZXQoJ291dHB1dHMnLCBbXSldCi0gICAgaWYgb3V0cHV0czoKLSAgICAgIHRlbXBsYXRlID0gX2NvbW1hbmRfdGVtcGxhdGUKLSAgICBlbHNlOgotICAgICAgdGVtcGxhdGUgPSBfYWxpYXNfdGVtcGxhdGUKLSAgICBmcC53cml0ZSh0ZW1wbGF0ZSAlIHsKLSAgICAgICAgICAgICAgICAgJ2lucHV0cycgOiBwcHJpbnQucGZvcm1hdChpbnB1dHMpLAotICAgICAgICAgICAgICAgICAnb3V0cHV0cycgOiBwcHJpbnQucGZvcm1hdChvdXRwdXRzKSwKLSAgICAgICAgICAgICAgICAgJ2FjdGlvbicgOiBwcHJpbnQucGZvcm1hdChhKSwKLSAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnIDogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogdGFyZ2V0X25hbWUsCi0gICAgICAgICAgICAgfSkKLSAgICBpZiBpbnQoYWN0aW9uLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMnLCAwKSk6Ci0gICAgICBmcC53cml0ZSgnaW5wdXRfZmlsZXMuZXh0ZW5kKF9vdXRwdXRzKVxuJykKLSAgICBmcC53cml0ZSgncHJlcmVxdWlzaXRlcy5leHRlbmQoX291dHB1dHMpXG4nKQotICAgIGZwLndyaXRlKCd0YXJnZXRfZmlsZXMuZXh0ZW5kKF9vdXRwdXRzKVxuJykKLQotICBydWxlcyA9IHNwZWMuZ2V0KCdydWxlcycsIFtdKQotICBmb3IgcnVsZSBpbiBydWxlczoKLSAgICBuYW1lID0gcmUuc3ViKCdbXmEtekEtWjAtOV9dJywgJ18nLCBydWxlWydydWxlX25hbWUnXSkKLSAgICBtZXNzYWdlID0gcnVsZS5nZXQoJ21lc3NhZ2UnKQotICAgIGlmIG1lc3NhZ2U6Ci0gICAgICAgIG1lc3NhZ2UgPSByZXByKG1lc3NhZ2UpCi0gICAgaWYgaW50KHJ1bGUuZ2V0KCdwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcycsIDApKToKLSAgICAgIHBvYXNfbGluZSA9ICdfcHJvY2Vzc2VkX2lucHV0X2ZpbGVzLmV4dGVuZChfZ2VuZXJhdGVkKScKLSAgICBlbHNlOgotICAgICAgcG9hc19saW5lID0gJ19wcm9jZXNzZWRfaW5wdXRfZmlsZXMuYXBwZW5kKGluZmlsZSknCi0gICAgaW5wdXRzID0gW0ZpeFBhdGgoZiwgc3JjX3N1YmRpcl8pIGZvciBmIGluIHJ1bGUuZ2V0KCdpbnB1dHMnLCBbXSldCi0gICAgb3V0cHV0cyA9IFtGaXhQYXRoKGYsIHNyY19zdWJkaXJfKSBmb3IgZiBpbiBydWxlLmdldCgnb3V0cHV0cycsIFtdKV0KLSAgICAjIFNraXAgYSBydWxlIHdpdGggbm8gYWN0aW9uIGFuZCBubyBpbnB1dHMuCi0gICAgaWYgJ2FjdGlvbicgbm90IGluIHJ1bGUgYW5kIG5vdCBydWxlLmdldCgncnVsZV9zb3VyY2VzJywgW10pOgotICAgICAgY29udGludWUKLSAgICBhID0gWydjZCcsIHNyY19zdWJkaXIsICcmJiddICsgcnVsZVsnYWN0aW9uJ10KLSAgICBmcC53cml0ZShfcnVsZV90ZW1wbGF0ZSAlIHsKLSAgICAgICAgICAgICAgICAgJ2lucHV0cycgOiBwcHJpbnQucGZvcm1hdChpbnB1dHMpLAotICAgICAgICAgICAgICAgICAnb3V0cHV0cycgOiBwcHJpbnQucGZvcm1hdChvdXRwdXRzKSwKLSAgICAgICAgICAgICAgICAgJ2FjdGlvbicgOiBwcHJpbnQucGZvcm1hdChhKSwKLSAgICAgICAgICAgICAgICAgJ2V4dGVuc2lvbicgOiBydWxlWydleHRlbnNpb24nXSwKLSAgICAgICAgICAgICAgICAgJ25hbWUnIDogbmFtZSwKLSAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnIDogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzX2xpbmUnIDogcG9hc19saW5lLAotICAgICAgICAgICAgICAgICAnc3JjX2RpcicgOiBzcmNfc3ViZGlyXywKLSAgICAgICAgICAgICB9KQotCi0gIHNjb25zX3RhcmdldC53cml0ZV90YXJnZXQoZnAsIHNyY19zdWJkaXIpCi0KLSAgY29waWVzID0gc3BlYy5nZXQoJ2NvcGllcycsIFtdKQotICBpZiBjb3BpZXM6Ci0gICAgZnAud3JpdGUoX2NvcHlfYWN0aW9uX3RlbXBsYXRlKQotICBmb3IgY29weSBpbiBjb3BpZXM6Ci0gICAgZGVzdGRpciA9IE5vbmUKLSAgICBmaWxlcyA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICBkZXN0ZGlyID0gY29weVsnZGVzdGluYXRpb24nXQotICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKLSAgICAgIGd5cC5jb21tb24uRXhjZXB0aW9uQXBwZW5kKAotICAgICAgICBlLAotICAgICAgICAiUmVxdWlyZWQgJ2Rlc3RpbmF0aW9uJyBrZXkgbWlzc2luZyBmb3IgJ2NvcGllcycgaW4gJXMuIiAlIGJ1aWxkX2ZpbGUpCi0gICAgICByYWlzZQotICAgIHRyeToKLSAgICAgIGZpbGVzID0gY29weVsnZmlsZXMnXQotICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKLSAgICAgIGd5cC5jb21tb24uRXhjZXB0aW9uQXBwZW5kKAotICAgICAgICBlLCAiUmVxdWlyZWQgJ2ZpbGVzJyBrZXkgbWlzc2luZyBmb3IgJ2NvcGllcycgaW4gJXMuIiAlIGJ1aWxkX2ZpbGUpCi0gICAgICByYWlzZQotICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICMgVE9ETzogIHNob3VsZCBwcm9iYWJseSBhZGQgYSAoc3VwcHJlc3NpYmxlKSB3YXJuaW5nOwotICAgICAgIyBhIG51bGwgZmlsZSBsaXN0IG1heSBiZSB1bmludGVudGlvbmFsLgotICAgICAgY29udGludWUKLSAgICBpZiBub3QgZGVzdGRpcjoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigKLSAgICAgICAgIlJlcXVpcmVkICdkZXN0aW5hdGlvbicga2V5IGlzIGVtcHR5IGZvciAnY29waWVzJyBpbiAlcy4iICUgYnVpbGRfZmlsZSkKLQotICAgIGZtdCA9ICgnXG4nCi0gICAgICAgICAgICdfb3V0cHV0cyA9IGVudi5Db21tYW5kKCVzLFxuJwotICAgICAgICAgICAnICAgICVzLFxuJwotICAgICAgICAgICAnICAgIEdZUENvcHkoXCckVEFSR0VUXCcsIFwnJFNPVVJDRVwnKSlcbicpCi0gICAgZm9yIGYgaW4gY29weVsnZmlsZXMnXToKLSAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIHNlcGFyYXRvcnMgc28gYmFzZW5hbWUoKSBhY3RzIGxpa2UgVW5peCBiYXNlbmFtZSBhbmQKLSAgICAgICMgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgZWxlbWVudCwgd2hldGhlciBhIGZpbGUgb3IgZGlyLiBXaXRob3V0IHRoaXMsCi0gICAgICAjIG9ubHkgdGhlIGNvbnRlbnRzLCBub3QgdGhlIGRpcmVjdG9yeSBpdHNlbGYsIGFyZSBjb3BpZWQgKGFuZCBub3RoaW5nCi0gICAgICAjIG1pZ2h0IGJlIGNvcGllZCBpZiBkZXN0IGFscmVhZHkgZXhpc3RzLCBzaW5jZSBzY29ucyB0aGlua3Mgbm90aGluZyBuZWVkcwotICAgICAgIyB0byBiZSBkb25lKS4KLSAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgb3MucGF0aC5iYXNlbmFtZShmLnJzdHJpcChvcy5zZXApKSkKLSAgICAgIGYgPSBGaXhQYXRoKGYsIHNyY19zdWJkaXJfKQotICAgICAgZGVzdCA9IEZpeFBhdGgoZGVzdCwgc3JjX3N1YmRpcl8pCi0gICAgICBmcC53cml0ZShmbXQgJSAocmVwcihkZXN0KSwgcmVwcihmKSkpCi0gICAgICBmcC53cml0ZSgndGFyZ2V0X2ZpbGVzLmV4dGVuZChfb3V0cHV0cylcbicpCi0KLSAgcnVuX2FzID0gc3BlYy5nZXQoJ3J1bl9hcycpCi0gIGlmIHJ1bl9hczoKLSAgICBhY3Rpb24gPSBydW5fYXMuZ2V0KCdhY3Rpb24nLCBbXSkKLSAgICB3b3JraW5nX2RpcmVjdG9yeSA9IHJ1bl9hcy5nZXQoJ3dvcmtpbmdfZGlyZWN0b3J5JykKLSAgICBpZiBub3Qgd29ya2luZ19kaXJlY3Rvcnk6Ci0gICAgICB3b3JraW5nX2RpcmVjdG9yeSA9IGd5cF9kaXIKLSAgICBlbHNlOgotICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMod29ya2luZ19kaXJlY3RvcnkpOgotICAgICAgICB3b3JraW5nX2RpcmVjdG9yeSA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGd5cF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2luZ19kaXJlY3RvcnkpKQotICAgIGlmIHJ1bl9hcy5nZXQoJ2Vudmlyb25tZW50Jyk6Ci0gICAgICBmb3IgKGtleSwgdmFsKSBpbiBydW5fYXMuZ2V0KCdlbnZpcm9ubWVudCcpLml0ZXJpdGVtcygpOgotICAgICAgICBhY3Rpb24gPSBbJyVzPSIlcyInICUgKGtleSwgdmFsKV0gKyBhY3Rpb24KLSAgICBhY3Rpb24gPSBbJ2NkJywgJyIlcyInICUgd29ya2luZ19kaXJlY3RvcnksICcmJiddICsgYWN0aW9uCi0gICAgZnAud3JpdGUoX3J1bl9hc190ZW1wbGF0ZSAlIHsKLSAgICAgICdhY3Rpb24nIDogcHByaW50LnBmb3JtYXQoYWN0aW9uKSwKLSAgICAgICdtZXNzYWdlJyA6IHJ1bl9hcy5nZXQoJ21lc3NhZ2UnLCAnJyksCi0gICAgfSkKLQotICBmbXQgPSAiXG5neXBfdGFyZ2V0ID0gZW52LkFsaWFzKCclcycsIHRhcmdldF9maWxlcylcbiIKLSAgZnAud3JpdGUoZm10ICUgdGFyZ2V0X25hbWUpCi0KLSAgZGVwZW5kZW5jaWVzID0gc3BlYy5nZXQoJ3Njb25zX2RlcGVuZGVuY2llcycsIFtdKQotICBpZiBkZXBlbmRlbmNpZXM6Ci0gICAgV3JpdGVMaXN0KGZwLCBkZXBlbmRlbmNpZXMsIHByZWFtYmxlPSdkZXBlbmRlbmNpZXMgPSBbXG4gICAgJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGFtYmxlPSdcbl1cbicpCi0gICAgZnAud3JpdGUoJ2Vudi5SZXF1aXJlcyh0YXJnZXRfZmlsZXMsIGRlcGVuZGVuY2llcylcbicpCi0gICAgZnAud3JpdGUoJ2Vudi5SZXF1aXJlcyhneXBfdGFyZ2V0LCBkZXBlbmRlbmNpZXMpXG4nKQotICAgIGZwLndyaXRlKCdmb3IgcHJlcmVxdWlzaXRlIGluIHByZXJlcXVpc2l0ZXM6XG4nKQotICAgIGZwLndyaXRlKCcgIGVudi5SZXF1aXJlcyhwcmVyZXF1aXNpdGUsIGRlcGVuZGVuY2llcylcbicpCi0gIGZwLndyaXRlKCdlbnYuUmVxdWlyZXMoZ3lwX3RhcmdldCwgcHJlcmVxdWlzaXRlcylcbicpCi0KLSAgaWYgcnVuX2FzOgotICAgIGZwLndyaXRlKF9ydW5fYXNfdGVtcGxhdGVfc3VmZml4ICUgewotICAgICAgJ3RhcmdldF9uYW1lJzogdGFyZ2V0X25hbWUsCi0gICAgfSkKLQotICBmcC53cml0ZSgnUmV0dXJuKCJneXBfdGFyZ2V0IilcbicpCi0KLSAgZnAuY2xvc2UoKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRFTVBMQVRFIEJFR0lOCi0KLV93cmFwcGVyX3RlbXBsYXRlID0gIiIiXAotCi1fX2RvY19fID0gJycnCi1XcmFwcGVyIGNvbmZpZ3VyYXRpb24gZm9yIGJ1aWxkaW5nIHRoaXMgZW50aXJlICJzb2x1dGlvbiwiCi1pbmNsdWRpbmcgYWxsIHRoZSBzcGVjaWZpYyB0YXJnZXRzIGluIHZhcmlvdXMgKi5zY29ucyBmaWxlcy4KLScnJwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaW1wb3J0IFNDb25zLkVudmlyb25tZW50Ci1pbXBvcnQgU0NvbnMuVXRpbAotCi1kZWYgR2V0UHJvY2Vzc29yQ291bnQoKToKLSAgJycnCi0gIERldGVjdHMgdGhlIG51bWJlciBvZiBDUFVzIG9uIHRoZSBzeXN0ZW0uIEFkYXB0ZWQgZm9ybToKLSAgaHR0cDovL2NvZGVsaWJlcmF0ZXMuYmxvZ3Nwb3QuY29tLzIwMDgvMDUvZGV0ZWN0aW5nLWNwdXNjb3Jlcy1pbi1weXRob24uaHRtbAotICAnJycKLSAgIyBMaW51eCwgVW5peCBhbmQgTWFjIE9TIFg6Ci0gIGlmIGhhc2F0dHIob3MsICdzeXNjb25mJyk6Ci0gICAgaWYgb3Muc3lzY29uZl9uYW1lcy5oYXNfa2V5KCdTQ19OUFJPQ0VTU09SU19PTkxOJyk6Ci0gICAgICAjIExpbnV4IGFuZCBVbml4IG9yIE1hYyBPUyBYIHdpdGggcHl0aG9uID49IDIuNToKLSAgICAgIHJldHVybiBvcy5zeXNjb25mKCdTQ19OUFJPQ0VTU09SU19PTkxOJykKLSAgICBlbHNlOiAgIyBNYWMgT1MgWCB3aXRoIFB5dGhvbiA8IDIuNToKLSAgICAgIHJldHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQoKSkKLSAgIyBXaW5kb3dzOgotICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJyk6Ci0gICAgcmV0dXJuIG1heChpbnQob3MuZW52aXJvbi5nZXQoJ05VTUJFUl9PRl9QUk9DRVNTT1JTJywgJzEnKSksIDEpCi0gIHJldHVybiAxICAjIERlZmF1bHQKLQotIyBTdXBwb3J0IFBST0dSRVNTPSB0byBzaG93IHByb2dyZXNzIGluIGRpZmZlcmVudCB3YXlzLgotcCA9IEFSR1VNRU5UUy5nZXQoJ1BST0dSRVNTJykKLWlmIHAgPT0gJ3NwaW5uZXInOgotICBQcm9ncmVzcyhbJy9cXHInLCAnfFxccicsICdcXFxcXFxyJywgJy1cXHInXSwKLSAgICAgICAgICAgaW50ZXJ2YWw9NSwKLSAgICAgICAgICAgZmlsZT1vcGVuKCcvZGV2L3R0eScsICd3JykpCi1lbGlmIHAgPT0gJ25hbWUnOgotICBQcm9ncmVzcygnJFRBUkdFVFxccicsIG92ZXJ3cml0ZT1UcnVlLCBmaWxlPW9wZW4oJy9kZXYvdHR5JywgJ3cnKSkKLQotIyBTZXQgdGhlIGRlZmF1bHQgLWogdmFsdWUgYmFzZWQgb24gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzLgotU2V0T3B0aW9uKCdudW1fam9icycsIEdldFByb2Nlc3NvckNvdW50KCkgKyAxKQotCi0jIEhhdmUgU0NvbnMgdXNlIGl0cyBjYWNoZWQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KLVNldE9wdGlvbignaW1wbGljaXRfY2FjaGUnLCAxKQotCi0jIE9ubHkgcmUtY2FsY3VsYXRlIE1ENSBjaGVja3N1bXMgaWYgYSB0aW1lc3RhbXAgaGFzIGNoYW5nZWQuCi1EZWNpZGVyKCdNRDUtdGltZXN0YW1wJykKLQotIyBTaW5jZSB3ZSBzZXQgdGhlIC1qIHZhbHVlIGJ5IGRlZmF1bHQsIHN1cHByZXNzIFNDb25zIHdhcm5pbmdzIGFib3V0IGJlaW5nCi0jIHVuYWJsZSB0byBzdXBwb3J0IHBhcmFsbGVsIGJ1aWxkIG9uIHZlcnNpb25zIG9mIFB5dGhvbiB3aXRoIG5vIHRocmVhZGluZy4KLWRlZmF1bHRfd2FybmluZ3MgPSBbJ25vLW5vLXBhcmFsbGVsLXN1cHBvcnQnXQotU2V0T3B0aW9uKCd3YXJuJywgZGVmYXVsdF93YXJuaW5ncyArIEdldE9wdGlvbignd2FybicpKQotCi1BZGRPcHRpb24oJy0tbW9kZScsIG5hcmdzPTEsIGRlc3Q9J2NvbmZfbGlzdCcsIGRlZmF1bHQ9W10sCi0gICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBoZWxwPSdDb25maWd1cmF0aW9uIHRvIGJ1aWxkLicpCi0KLUFkZE9wdGlvbignLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nVmVyYm9zZSBjb21tYW5kLWxpbmUgb3V0cHV0LicpCi0KLQotIwotc2NvbnNjcmlwdF9maWxlX21hcCA9ICUoc2NvbnNjcmlwdF9maWxlcylzCi0KLWNsYXNzIExvYWRUYXJnZXQ6Ci0gICcnJwotICBDbGFzcyBmb3IgZGVjaWRpbmcgaWYgYSBnaXZlbiB0YXJnZXQgc2NvbnNjcmlwdCBpcyB0byBiZSBpbmNsdWRlZAotICBiYXNlZCBvbiBhIGxpc3Qgb2YgaW5jbHVkZWQgdGFyZ2V0IG5hbWVzLCBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggJy0nCi0gIHRvIGV4Y2x1ZGUgYSB0YXJnZXQgbmFtZS4KLSAgJycnCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBsb2FkKToKLSAgICAnJycKLSAgICBJbml0aWFsaXplIGEgY2xhc3Mgd2l0aCBhIGxpc3Qgb2YgbmFtZXMgZm9yIHBvc3NpYmxlIGxvYWRpbmcuCi0KLSAgICBBcmd1bWVudHM6Ci0gICAgICBsb2FkOiAgbGlzdCBvZiBlbGVtZW50cyBpbiB0aGUgTE9BRD0gc3BlY2lmaWNhdGlvbgotICAgICcnJwotICAgIHNlbGYuaW5jbHVkZWQgPSBzZXQoW2MgZm9yIGMgaW4gbG9hZCBpZiBub3QgYy5zdGFydHN3aXRoKCctJyldKQotICAgIHNlbGYuZXhjbHVkZWQgPSBzZXQoW2NbMTpdIGZvciBjIGluIGxvYWQgaWYgYy5zdGFydHN3aXRoKCctJyldKQotCi0gICAgaWYgbm90IHNlbGYuaW5jbHVkZWQ6Ci0gICAgICBzZWxmLmluY2x1ZGVkID0gc2V0KFsnYWxsJ10pCi0KLSAgZGVmIF9fY2FsbF9fKHNlbGYsIHRhcmdldCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgdGFyZ2V0J3Mgc2NvbnNjcmlwdCBmaWxlIHNob3VsZCBiZQotICAgIGxvYWRlZCwgYmFzZWQgb24gdGhlIGluaXRpYWxpemVkIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBsaXN0cy4KLSAgICAnJycKLSAgICByZXR1cm4gKHRhcmdldCBpbiBzZWxmLmluY2x1ZGVkIG9yCi0gICAgICAgICAgICAoJ2FsbCcgaW4gc2VsZi5pbmNsdWRlZCBhbmQgbm90IHRhcmdldCBpbiBzZWxmLmV4Y2x1ZGVkKSkKLQotaWYgJ0xPQUQnIGluIEFSR1VNRU5UUzoKLSAgbG9hZCA9IEFSR1VNRU5UU1snTE9BRCddLnNwbGl0KCcsJykKLWVsc2U6Ci0gIGxvYWQgPSBbXQotbG9hZF90YXJnZXQgPSBMb2FkVGFyZ2V0KGxvYWQpCi0KLXNjb25zY3JpcHRfZmlsZXMgPSBbXQotZm9yIHRhcmdldCwgc2NvbnNjcmlwdCBpbiBzY29uc2NyaXB0X2ZpbGVfbWFwLml0ZXJpdGVtcygpOgotICBpZiBsb2FkX3RhcmdldCh0YXJnZXQpOgotICAgIHNjb25zY3JpcHRfZmlsZXMuYXBwZW5kKHNjb25zY3JpcHQpCi0KLQotdGFyZ2V0X2FsaWFzX2xpc3Q9IFtdCi0KLWNvbmZfbGlzdCA9IEdldE9wdGlvbignY29uZl9saXN0JykKLWlmIGNvbmZfbGlzdDoKLSAgICAjIEluIGNhc2UgdGhlIHNhbWUgLS1tb2RlPSB2YWx1ZSB3YXMgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgotICAgIGNvbmZfbGlzdCA9IGxpc3Qoc2V0KGNvbmZfbGlzdCkpCi1lbHNlOgotICAgIGNvbmZfbGlzdCA9IFslKGRlZmF1bHRfY29uZmlndXJhdGlvbilyXQotCi1zY29uc2J1aWxkX2RpciA9IERpciglKHNjb25zYnVpbGRfZGlyKXMpCi0KLQotZGVmIEZpbHRlck91dChzZWxmLCAqKmt3KToKLSAga3cgPSBTQ29ucy5FbnZpcm9ubWVudC5jb3B5X25vbl9yZXNlcnZlZF9rZXl3b3JkcyhrdykKLSAgZm9yIGtleSwgdmFsIGluIGt3Lml0ZW1zKCk6Ci0gICAgZW52dmFsID0gc2VsZi5nZXQoa2V5LCBOb25lKQotICAgIGlmIGVudnZhbCBpcyBOb25lOgotICAgICAgIyBObyBleGlzdGluZyB2YXJpYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQsIHNvIG5vdGhpbmcgdG8gZGVsZXRlLgotICAgICAgY29udGludWUKLQotICAgIGZvciB2cmVtb3ZlIGluIHZhbDoKLSAgICAgICMgVXNlIHdoaWxlIG5vdCBpZiwgc28gd2UgY2FuIGhhbmRsZSBkdXBsaWNhdGVzLgotICAgICAgd2hpbGUgdnJlbW92ZSBpbiBlbnZ2YWw6Ci0gICAgICAgIGVudnZhbC5yZW1vdmUodnJlbW92ZSkKLQotICAgIHNlbGZba2V5XSA9IGVudnZhbAotCi0gICAgIyBUT0RPKHNnayk6IFNDb25zLkVudmlyb25tZW50LkFwcGVuZCgpIGhhcyBtdWNoIG1vcmUgbG9naWMgdG8gZGVhbAotICAgICMgd2l0aCB2YXJpb3VzIHR5cGVzIG9mIHZhbHVlcy4gIFdlIHNob3VsZCBoYW5kbGUgYWxsIHRob3NlIGNhc2VzIGluIGhlcmUKLSAgICAjIHRvby4gIChJZiB2YXJpYWJsZSBpcyBhIGRpY3QsIGV0Yy4pCi0KLQotbm9uX2NvbXBpbGFibGVfc3VmZml4ZXMgPSB7Ci0gICAgJ0xJTlVYJyA6IHNldChbCi0gICAgICAgICcuYmRpYycsCi0gICAgICAgICcuY3NzJywKLSAgICAgICAgJy5kYXQnLAotICAgICAgICAnLmZyYWdtZW50JywKLSAgICAgICAgJy5ncGVyZicsCi0gICAgICAgICcuaCcsCi0gICAgICAgICcuaGgnLAotICAgICAgICAnLmhwcCcsCi0gICAgICAgICcuaHRtbCcsCi0gICAgICAgICcuaHh4JywKLSAgICAgICAgJy5pZGwnLAotICAgICAgICAnLmluJywKLSAgICAgICAgJy5pbjAnLAotICAgICAgICAnLmluMScsCi0gICAgICAgICcuanMnLAotICAgICAgICAnLm1rJywKLSAgICAgICAgJy5yYycsCi0gICAgICAgICcuc2lncycsCi0gICAgICAgICcnLAotICAgIF0pLAotICAgICdXSU5ET1dTJyA6IHNldChbCi0gICAgICAgICcuaCcsCi0gICAgICAgICcuaGgnLAotICAgICAgICAnLmhwcCcsCi0gICAgICAgICcuZGF0JywKLSAgICAgICAgJy5pZGwnLAotICAgICAgICAnLmluJywKLSAgICAgICAgJy5pbjAnLAotICAgICAgICAnLmluMScsCi0gICAgXSksCi19Ci0KLWRlZiBjb21waWxhYmxlKGVudiwgZmlsZSk6Ci0gIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoc3RyKGZpbGUpKQotICBpZiBleHQgaW4gbm9uX2NvbXBpbGFibGVfc3VmZml4ZXNbZW52WydUQVJHRVRfUExBVEZPUk0nXV06Ci0gICAgcmV0dXJuIEZhbHNlCi0gIHJldHVybiBUcnVlCi0KLWRlZiBjb21waWxhYmxlX2ZpbGVzKGVudiwgc291cmNlcyk6Ci0gIHJldHVybiBbeCBmb3IgeCBpbiBzb3VyY2VzIGlmIGNvbXBpbGFibGUoZW52LCB4KV0KLQotZGVmIEd5cFByb2dyYW0oZW52LCB0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpOgotICBzb3VyY2UgPSBjb21waWxhYmxlX2ZpbGVzKGVudiwgc291cmNlKQotICByZXN1bHQgPSBlbnYuUHJvZ3JhbSh0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpCi0gIGlmIGVudi5nZXQoJ0lOQ1JFTUVOVEFMJyk6Ci0gICAgZW52LlByZWNpb3VzKHJlc3VsdCkKLSAgcmV0dXJuIHJlc3VsdAotCi1kZWYgR3lwVGVzdFByb2dyYW0oZW52LCB0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpOgotICBzb3VyY2UgPSBjb21waWxhYmxlX2ZpbGVzKGVudiwgc291cmNlKQotICByZXN1bHQgPSBlbnYuUHJvZ3JhbSh0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpCi0gIGlmIGVudi5nZXQoJ0lOQ1JFTUVOVEFMJyk6Ci0gICAgZW52LlByZWNpb3VzKCpyZXN1bHQpCi0gIHJldHVybiByZXN1bHQKLQotZGVmIEd5cExpYnJhcnkoZW52LCB0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpOgotICBzb3VyY2UgPSBjb21waWxhYmxlX2ZpbGVzKGVudiwgc291cmNlKQotICByZXN1bHQgPSBlbnYuTGlicmFyeSh0YXJnZXQsIHNvdXJjZSwgKmFyZ3MsICoqa3cpCi0gIHJldHVybiByZXN1bHQKLQotZGVmIEd5cExvYWRhYmxlTW9kdWxlKGVudiwgdGFyZ2V0LCBzb3VyY2UsICphcmdzLCAqKmt3KToKLSAgc291cmNlID0gY29tcGlsYWJsZV9maWxlcyhlbnYsIHNvdXJjZSkKLSAgcmVzdWx0ID0gZW52LkxvYWRhYmxlTW9kdWxlKHRhcmdldCwgc291cmNlLCAqYXJncywgKiprdykKLSAgcmV0dXJuIHJlc3VsdAotCi1kZWYgR3lwU3RhdGljTGlicmFyeShlbnYsIHRhcmdldCwgc291cmNlLCAqYXJncywgKiprdyk6Ci0gIHNvdXJjZSA9IGNvbXBpbGFibGVfZmlsZXMoZW52LCBzb3VyY2UpCi0gIHJlc3VsdCA9IGVudi5TdGF0aWNMaWJyYXJ5KHRhcmdldCwgc291cmNlLCAqYXJncywgKiprdykKLSAgcmV0dXJuIHJlc3VsdAotCi1kZWYgR3lwU2hhcmVkTGlicmFyeShlbnYsIHRhcmdldCwgc291cmNlLCAqYXJncywgKiprdyk6Ci0gIHNvdXJjZSA9IGNvbXBpbGFibGVfZmlsZXMoZW52LCBzb3VyY2UpCi0gIHJlc3VsdCA9IGVudi5TaGFyZWRMaWJyYXJ5KHRhcmdldCwgc291cmNlLCAqYXJncywgKiprdykKLSAgaWYgZW52LmdldCgnSU5DUkVNRU5UQUwnKToKLSAgICBlbnYuUHJlY2lvdXMocmVzdWx0KQotICByZXR1cm4gcmVzdWx0Ci0KLWRlZiBhZGRfZ3lwX21ldGhvZHMoZW52KToKLSAgZW52LkFkZE1ldGhvZChHeXBQcm9ncmFtKQotICBlbnYuQWRkTWV0aG9kKEd5cFRlc3RQcm9ncmFtKQotICBlbnYuQWRkTWV0aG9kKEd5cExpYnJhcnkpCi0gIGVudi5BZGRNZXRob2QoR3lwTG9hZGFibGVNb2R1bGUpCi0gIGVudi5BZGRNZXRob2QoR3lwU3RhdGljTGlicmFyeSkKLSAgZW52LkFkZE1ldGhvZChHeXBTaGFyZWRMaWJyYXJ5KQotCi0gIGVudi5BZGRNZXRob2QoRmlsdGVyT3V0KQotCi0gIGVudi5BZGRNZXRob2QoY29tcGlsYWJsZSkKLQotCi1iYXNlX2VudiA9IEVudmlyb25tZW50KAotICAgIHRvb2xzID0gJShzY29uc190b29scylzLAotICAgIElOVEVSTUVESUFURV9ESVI9JyRPQkpfRElSLyR7Q09NUE9ORU5UX05BTUV9L18ke1RBUkdFVF9OQU1FfV9pbnRlcm1lZGlhdGUnLAotICAgIExJQl9ESVI9JyRUT1BfQlVJTERESVIvbGliJywKLSAgICBPQkpfRElSPSckVE9QX0JVSUxERElSL29iaicsCi0gICAgU0NPTlNCVUlMRF9ESVI9c2NvbnNidWlsZF9kaXIuYWJzcGF0aCwKLSAgICBTSEFSRURfSU5URVJNRURJQVRFX0RJUj0nJE9CSl9ESVIvX2dsb2JhbF9pbnRlcm1lZGlhdGUnLAotICAgIFNSQ19ESVI9RGlyKCUoc3JjX2RpcilyKSwKLSAgICBUQVJHRVRfUExBVEZPUk09J0xJTlVYJywKLSAgICBUT1BfQlVJTERESVI9JyRTQ09OU0JVSUxEX0RJUi8kQ09ORklHX05BTUUnLAotICAgIExJQlBBVEg9WyckTElCX0RJUiddLAotKQotCi1pZiBub3QgR2V0T3B0aW9uKCd2ZXJib3NlJyk6Ci0gIGJhc2VfZW52LlNldERlZmF1bHQoCi0gICAgICBBUkNPTVNUUj0nQ3JlYXRpbmcgbGlicmFyeSAkVEFSR0VUJywKLSAgICAgIEFTQ09NU1RSPSdBc3NlbWJsaW5nICRUQVJHRVQnLAotICAgICAgQ0NDT01TVFI9J0NvbXBpbGluZyAkVEFSR0VUJywKLSAgICAgIENPTkNBVFNPVVJDRUNPTVNUUj0nQ29uY2F0U291cmNlICRUQVJHRVQnLAotICAgICAgQ1hYQ09NU1RSPSdDb21waWxpbmcgJFRBUkdFVCcsCi0gICAgICBMRE1PRFVMRUNPTVNUUj0nQnVpbGRpbmcgbG9hZGFibGUgbW9kdWxlICRUQVJHRVQnLAotICAgICAgTElOS0NPTVNUUj0nTGlua2luZyAkVEFSR0VUJywKLSAgICAgIE1BTklGRVNUQ09NU1RSPSdVcGRhdGluZyBtYW5pZmVzdCBmb3IgJFRBUkdFVCcsCi0gICAgICBNSURMQ09NU1RSPSdDb21waWxpbmcgSURMICRUQVJHRVQnLAotICAgICAgUENIQ09NU1RSPSdQcmVjb21waWxpbmcgJFRBUkdFVCcsCi0gICAgICBSQU5MSUJDT01TVFI9J0luZGV4aW5nICRUQVJHRVQnLAotICAgICAgUkNDT01TVFI9J0NvbXBpbGluZyByZXNvdXJjZSAkVEFSR0VUJywKLSAgICAgIFNIQ0NDT01TVFI9J0NvbXBpbGluZyAkVEFSR0VUJywKLSAgICAgIFNIQ1hYQ09NU1RSPSdDb21waWxpbmcgJFRBUkdFVCcsCi0gICAgICBTSExJTktDT01TVFI9J0xpbmtpbmcgJFRBUkdFVCcsCi0gICAgICBTSE1BTklGRVNUQ09NU1RSPSdVcGRhdGluZyBtYW5pZmVzdCBmb3IgJFRBUkdFVCcsCi0gICkKLQotYWRkX2d5cF9tZXRob2RzKGJhc2VfZW52KQotCi1mb3IgY29uZiBpbiBjb25mX2xpc3Q6Ci0gIGVudiA9IGJhc2VfZW52LkNsb25lKENPTkZJR19OQU1FPWNvbmYpCi0gIFNDb25zaWduRmlsZShlbnYuRmlsZSgnJFRPUF9CVUlMRERJUi8uc2NvbnNpZ24nKS5hYnNwYXRoKQotICBmb3Igc2NvbnNjcmlwdCBpbiBzY29uc2NyaXB0X2ZpbGVzOgotICAgIHRhcmdldF9hbGlhcyA9IGVudi5TQ29uc2NyaXB0KHNjb25zY3JpcHQsIGV4cG9ydHM9WydlbnYnXSkKLSAgICBpZiB0YXJnZXRfYWxpYXM6Ci0gICAgICB0YXJnZXRfYWxpYXNfbGlzdC5leHRlbmQodGFyZ2V0X2FsaWFzKQotCi1EZWZhdWx0KEFsaWFzKCdhbGwnLCB0YXJnZXRfYWxpYXNfbGlzdCkpCi0KLWhlbHBfZm10ID0gJycnCi1Vc2FnZTogaGFtbWVyIFtTQ09OU19PUFRJT05TXSBbVkFSSUFCTEVTXSBbVEFSR0VUXSAuLi4KLQotTG9jYWwgY29tbWFuZC1saW5lIGJ1aWxkIG9wdGlvbnM6Ci0gIC0tbW9kZT1DT05GSUcgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiB0byBidWlsZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbW9kZT1EZWJ1ZyBbZGVmYXVsdF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbW9kZT1SZWxlYXNlCi0gIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgUHJpbnQgYWN0dWFsIGV4ZWN1dGVkIGNvbW1hbmQgbGluZXMuCi0KLVN1cHBvcnRlZCBjb21tYW5kLWxpbmUgYnVpbGQgdmFyaWFibGVzOgotICBMT0FEPVttb2R1bGUsLi4uXSAgICAgICAgIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbXBvbmVudHMgdG8gbG9hZCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3kgZ3JhcGggKCctJyBwcmVmaXggZXhjbHVkZXMpCi0gIFBST0dSRVNTPXR5cGUgICAgICAgICAgICAgRGlzcGxheSBhIHByb2dyZXNzIGluZGljYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICBwcmludCBlYWNoIGV2YWx1YXRlZCB0YXJnZXQgbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcjogIHByaW50IGEgc3Bpbm5lciBldmVyeSA1IHRhcmdldHMKLQotVGhlIGZvbGxvd2luZyBUQVJHRVQgbmFtZXMgY2FuIGFsc28gYmUgdXNlZCBhcyBMT0FEPSBtb2R1bGUgbmFtZXM6Ci0KLSUlcwotJycnCi0KLWlmIEdldE9wdGlvbignaGVscCcpOgotICBkZWYgY29sdW1uYXJfdGV4dChpdGVtcywgd2lkdGg9NzgsIGluZGVudD0yLCBzZXA9Mik6Ci0gICAgcmVzdWx0ID0gW10KLSAgICBjb2x3aWR0aCA9IG1heChtYXAobGVuLCBpdGVtcykpICsgc2VwCi0gICAgY29scyA9ICh3aWR0aCAtIGluZGVudCkgLyBjb2x3aWR0aAotICAgIGlmIGNvbHMgPCAxOgotICAgICAgY29scyA9IDEKLSAgICByb3dzID0gKGxlbihpdGVtcykgKyBjb2xzIC0gMSkgLyBjb2xzCi0gICAgaW5kZW50ID0gJyUlKnMnICUlIChpbmRlbnQsICcnKQotICAgIHNlcCA9IGluZGVudAotICAgIGZvciByb3cgaW4geHJhbmdlKDAsIHJvd3MpOgotICAgICAgcmVzdWx0LmFwcGVuZChzZXApCi0gICAgICBmb3IgaSBpbiB4cmFuZ2Uocm93LCBsZW4oaXRlbXMpLCByb3dzKToKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnJSUtKnMnICUlIChjb2x3aWR0aCwgaXRlbXNbaV0pKQotICAgICAgc2VwID0gJ1xcbicgKyBpbmRlbnQKLSAgICByZXN1bHQuYXBwZW5kKCdcXG4nKQotICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKLQotICBsb2FkX2xpc3QgPSBzZXQoc2NvbnNjcmlwdF9maWxlX21hcC5rZXlzKCkpCi0gIHRhcmdldF9hbGlhc2VzID0gc2V0KG1hcChzdHIsIHRhcmdldF9hbGlhc19saXN0KSkKLQotICBjb21tb24gPSBsb2FkX2xpc3QgYW5kIHRhcmdldF9hbGlhc2VzCi0gIGxvYWRfb25seSA9IGxvYWRfbGlzdCAtIGNvbW1vbgotICB0YXJnZXRfb25seSA9IHRhcmdldF9hbGlhc2VzIC0gY29tbW9uCi0gIGhlbHBfdGV4dCA9IFtoZWxwX2ZtdCAlJSBjb2x1bW5hcl90ZXh0KHNvcnRlZChsaXN0KGNvbW1vbikpKV0KLSAgaWYgdGFyZ2V0X29ubHk6Ci0gICAgZm10ID0gIlRoZSBmb2xsb3dpbmcgYXJlIGFkZGl0aW9uYWwgVEFSR0VUIG5hbWVzOlxcblxcbiUlc1xcbiIKLSAgICBoZWxwX3RleHQuYXBwZW5kKGZtdCAlJSBjb2x1bW5hcl90ZXh0KHNvcnRlZChsaXN0KHRhcmdldF9vbmx5KSkpKQotICBpZiBsb2FkX29ubHk6Ci0gICAgZm10ID0gIlRoZSBmb2xsb3dpbmcgYXJlIGFkZGl0aW9uYWwgTE9BRD0gbW9kdWxlIG5hbWVzOlxcblxcbiUlc1xcbiIKLSAgICBoZWxwX3RleHQuYXBwZW5kKGZtdCAlJSBjb2x1bW5hcl90ZXh0KHNvcnRlZChsaXN0KGxvYWRfb25seSkpKSkKLSAgSGVscCgnJy5qb2luKGhlbHBfdGV4dCkpCi0iIiIKLQotIyBURU1QTEFURSBFTkQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLQotZGVmIEdlbmVyYXRlU0NvbnNjcmlwdFdyYXBwZXIoYnVpbGRfZmlsZSwgYnVpbGRfZmlsZV9kYXRhLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLCBzY29uc2NyaXB0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9jb25maWd1cmF0aW9uKToKLSAgIiIiCi0gIEdlbmVyYXRlcyB0aGUgIndyYXBwZXIiIFNDb25zY3JpcHQgZmlsZSAoYW5hbG9nb3VzIHRvIHRoZSBWaXN1YWwgU3R1ZGlvCi0gIHNvbHV0aW9uKSB0aGF0IGNhbGxzIGFsbCB0aGUgaW5kaXZpZHVhbCB0YXJnZXQgU0NvbnNjcmlwdCBmaWxlcy4KLSAgIiIiCi0gIG91dHB1dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKQotICBzcmNfZGlyID0gYnVpbGRfZmlsZV9kYXRhWydfREVQVEgnXQotICBzcmNfZGlyX3JlbCA9IGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKHNyY19kaXIsIG91dHB1dF9kaXIpCi0gIGlmIG5vdCBzcmNfZGlyX3JlbDoKLSAgICBzcmNfZGlyX3JlbCA9ICcuJwotICBzY29uc19zZXR0aW5ncyA9IGJ1aWxkX2ZpbGVfZGF0YS5nZXQoJ3Njb25zX3NldHRpbmdzJywge30pCi0gIHNjb25zYnVpbGRfZGlyID0gc2NvbnNfc2V0dGluZ3MuZ2V0KCdzY29uc2J1aWxkX2RpcicsICcjJykKLSAgc2NvbnNfdG9vbHMgPSBzY29uc19zZXR0aW5ncy5nZXQoJ3Rvb2xzJywgWydkZWZhdWx0J10pCi0KLSAgc2NvbnNjcmlwdF9maWxlX2xpbmVzID0gWydkaWN0KCddCi0gIGZvciB0YXJnZXQgaW4gc29ydGVkKHNjb25zY3JpcHRfZmlsZXMua2V5cygpKToKLSAgICBzY29uc2NyaXB0ID0gc2NvbnNjcmlwdF9maWxlc1t0YXJnZXRdCi0gICAgc2NvbnNjcmlwdF9maWxlX2xpbmVzLmFwcGVuZCgnICAgICVzID0gJXIsJyAlICh0YXJnZXQsIHNjb25zY3JpcHQpKQotICBzY29uc2NyaXB0X2ZpbGVfbGluZXMuYXBwZW5kKCcpJykKLQotICBmcCA9IG9wZW4ob3V0cHV0X2ZpbGVuYW1lLCAndycpCi0gIGZwLndyaXRlKGhlYWRlcikKLSAgZnAud3JpdGUoX3dyYXBwZXJfdGVtcGxhdGUgJSB7Ci0gICAgICAgICAgICAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJyA6IGRlZmF1bHRfY29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICduYW1lJyA6IG5hbWUsCi0gICAgICAgICAgICAgICAnc2NvbnNfdG9vbHMnIDogcmVwcihzY29uc190b29scyksCi0gICAgICAgICAgICAgICAnc2NvbnNidWlsZF9kaXInIDogcmVwcihzY29uc2J1aWxkX2RpciksCi0gICAgICAgICAgICAgICAnc2NvbnNjcmlwdF9maWxlcycgOiAnXG4nLmpvaW4oc2NvbnNjcmlwdF9maWxlX2xpbmVzKSwKLSAgICAgICAgICAgICAgICdzcmNfZGlyJyA6IHNyY19kaXJfcmVsLAotICAgICAgICAgICB9KQotICBmcC5jbG9zZSgpCi0KLSAgIyBHZW5lcmF0ZSB0aGUgU0NvbnN0cnVjdCBmaWxlIHRoYXQgaW52b2tlcyB0aGUgd3JhcHBlciBTQ29uc2NyaXB0LgotICBkaXIsIGZuYW1lID0gb3MucGF0aC5zcGxpdChvdXRwdXRfZmlsZW5hbWUpCi0gIFNDb25zdHJ1Y3QgPSBvcy5wYXRoLmpvaW4oZGlyLCAnU0NvbnN0cnVjdCcpCi0gIGZwID0gb3BlbihTQ29uc3RydWN0LCAndycpCi0gIGZwLndyaXRlKGhlYWRlcikKLSAgZnAud3JpdGUoJ1NDb25zY3JpcHQoJXMpXG4nICUgcmVwcihmbmFtZSkpCi0gIGZwLmNsb3NlKCkKLQotCi1kZWYgVGFyZ2V0RmlsZW5hbWUodGFyZ2V0LCBidWlsZF9maWxlPU5vbmUsIG91dHB1dF9zdWZmaXg9JycpOgotICAiIiJSZXR1cm5zIHRoZSAuc2NvbnMgZmlsZSBuYW1lIGZvciB0aGUgc3BlY2lmaWVkIHRhcmdldC4KLSAgIiIiCi0gIGlmIGJ1aWxkX2ZpbGUgaXMgTm9uZToKLSAgICBidWlsZF9maWxlLCB0YXJnZXQgPSBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KHRhcmdldClbOjJdCi0gIG91dHB1dF9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShidWlsZF9maWxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICsgb3V0cHV0X3N1ZmZpeCArICcuc2NvbnMnKQotICByZXR1cm4gb3V0cHV0X2ZpbGUKLQotCi1kZWYgUGVyZm9ybUJ1aWxkKGRhdGEsIGNvbmZpZ3VyYXRpb25zLCBwYXJhbXMpOgotICBvcHRpb25zID0gcGFyYW1zWydvcHRpb25zJ10KLQotICAjIER1ZSB0byB0aGUgd2F5IHdlIHRlc3QgZ3lwIG9uIHRoZSBjaHJvbWl1bSB0eXBib3RzCi0gICMgd2UgbmVlZCB0byBsb29rIGZvciAnc2NvbnMucHknIGFzIHdlbGwgYXMgdGhlIG1vcmUgY29tbW9uICdzY29ucycKLSAgIyBUT0RPKHNiYyk6IHVwZGF0ZSB0aGUgdHJ5Ym90cyB0byBoYXZlIGEgbW9yZSBub3JtYWwgaW5zdGFsbAotICAjIG9mIHNjb25zLgotICBzY29ucyA9ICdzY29ucycKLSAgcGF0aHMgPSBvcy5lbnZpcm9uWydQQVRIJ10uc3BsaXQob3MucGF0aHNlcCkKLSAgZm9yIHNjb25zX25hbWUgaW4gWydzY29ucycsICdzY29ucy5weSddOgotICAgIGZvciBwYXRoIGluIHBhdGhzOgotICAgICAgdGVzdF9zY29ucyA9IG9zLnBhdGguam9pbihwYXRoLCBzY29uc19uYW1lKQotICAgICAgcHJpbnQgJ2xvb2tpbmcgZm9yOiAlcycgJSB0ZXN0X3Njb25zCi0gICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0ZXN0X3Njb25zKToKLSAgICAgICAgcHJpbnQgImZvdW5kIHNjb25zOiAlcyIgJSBzY29ucwotICAgICAgICBzY29ucyA9IHRlc3Rfc2NvbnMKLSAgICAgICAgYnJlYWsKLQotICBmb3IgY29uZmlnIGluIGNvbmZpZ3VyYXRpb25zOgotICAgIGFyZ3VtZW50cyA9IFtzY29ucywgJy1DJywgb3B0aW9ucy50b3BsZXZlbF9kaXIsICctLW1vZGU9JXMnICUgY29uZmlnXQotICAgIHByaW50ICJCdWlsZGluZyBbJXNdOiAlcyIgJSAoY29uZmlnLCBhcmd1bWVudHMpCi0gICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3VtZW50cykKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgIiIiCi0gIEdlbmVyYXRlcyBhbGwgdGhlIG91dHB1dCBmaWxlcyBmb3IgdGhlIHNwZWNpZmllZCB0YXJnZXRzLgotICAiIiIKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0KLSAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgIGRlZiBvdXRwdXRfcGF0aChmaWxlbmFtZSk6Ci0gICAgICByZXR1cm4gZmlsZW5hbWUucmVwbGFjZShwYXJhbXNbJ2N3ZCddLCBvcHRpb25zLmdlbmVyYXRvcl9vdXRwdXQpCi0gIGVsc2U6Ci0gICAgZGVmIG91dHB1dF9wYXRoKGZpbGVuYW1lKToKLSAgICAgIHJldHVybiBmaWxlbmFtZQotCi0gIGRlZmF1bHRfY29uZmlndXJhdGlvbiA9IE5vbmUKLQotICBmb3IgcXVhbGlmaWVkX3RhcmdldCBpbiB0YXJnZXRfbGlzdDoKLSAgICBzcGVjID0gdGFyZ2V0X2RpY3RzW3F1YWxpZmllZF90YXJnZXRdCi0gICAgaWYgc3BlY1sndG9vbHNldCddICE9ICd0YXJnZXQnOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKAotICAgICAgICAgICdNdWx0aXBsZSB0b29sc2V0cyBub3Qgc3VwcG9ydGVkIGluIHNjb25zIGJ1aWxkICh0YXJnZXQgJXMpJyAlCi0gICAgICAgICAgcXVhbGlmaWVkX3RhcmdldCkKLSAgICBzY29uc190YXJnZXQgPSBTQ29ucy5UYXJnZXQoc3BlYykKLSAgICBpZiBzY29uc190YXJnZXQuaXNfaWdub3JlZDoKLSAgICAgIGNvbnRpbnVlCi0KLSAgICAjIFRPRE86ICBhc3N1bWVzIHRoZSBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gb2YgdGhlIGZpcnN0IHRhcmdldAotICAgICMgbm9uLURlZmF1bHQgdGFyZ2V0IGlzIHRoZSBjb3JyZWN0IGRlZmF1bHQgZm9yIGFsbCB0YXJnZXRzLgotICAgICMgTmVlZCBhIGJldHRlciBtb2RlbCBmb3IgaGFuZGxlIHZhcmlhdGlvbiBiZXR3ZWVuIHRhcmdldHMuCi0gICAgaWYgKG5vdCBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gYW5kCi0gICAgICAgIHNwZWNbJ2RlZmF1bHRfY29uZmlndXJhdGlvbiddICE9ICdEZWZhdWx0Jyk6Ci0gICAgICBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSBzcGVjWydkZWZhdWx0X2NvbmZpZ3VyYXRpb24nXQotCi0gICAgYnVpbGRfZmlsZSwgdGFyZ2V0ID0gZ3lwLmNvbW1vbi5QYXJzZVF1YWxpZmllZFRhcmdldChxdWFsaWZpZWRfdGFyZ2V0KVs6Ml0KLSAgICBvdXRwdXRfZmlsZSA9IFRhcmdldEZpbGVuYW1lKHRhcmdldCwgYnVpbGRfZmlsZSwgb3B0aW9ucy5zdWZmaXgpCi0gICAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgICAgb3V0cHV0X2ZpbGUgPSBvdXRwdXRfcGF0aChvdXRwdXRfZmlsZSkKLQotICAgIGlmIG5vdCBzcGVjLmhhc19rZXkoJ2xpYnJhcmllcycpOgotICAgICAgc3BlY1snbGlicmFyaWVzJ10gPSBbXQotCi0gICAgIyBBZGQgZGVwZW5kZW50IHN0YXRpYyBsaWJyYXJ5IHRhcmdldHMgdG8gdGhlICdsaWJyYXJpZXMnIHZhbHVlLgotICAgIGRlcHMgPSBzcGVjLmdldCgnZGVwZW5kZW5jaWVzJywgW10pCi0gICAgc3BlY1snc2NvbnNfZGVwZW5kZW5jaWVzJ10gPSBbXQotICAgIGZvciBkIGluIGRlcHM6Ci0gICAgICB0ZCA9IHRhcmdldF9kaWN0c1tkXQotICAgICAgdGFyZ2V0X25hbWUgPSB0ZFsndGFyZ2V0X25hbWUnXQotICAgICAgc3BlY1snc2NvbnNfZGVwZW5kZW5jaWVzJ10uYXBwZW5kKCJBbGlhcygnJXMnKSIgJSB0YXJnZXRfbmFtZSkKLSAgICAgIGlmIHRkWyd0eXBlJ10gaW4gKCdzdGF0aWNfbGlicmFyeScsICdzaGFyZWRfbGlicmFyeScpOgotICAgICAgICBsaWJuYW1lID0gdGQuZ2V0KCdwcm9kdWN0X25hbWUnLCB0YXJnZXRfbmFtZSkKLSAgICAgICAgc3BlY1snbGlicmFyaWVzJ10uYXBwZW5kKCdsaWInICsgbGlibmFtZSkKLSAgICAgIGlmIHRkWyd0eXBlJ10gPT0gJ2xvYWRhYmxlX21vZHVsZSc6Ci0gICAgICAgIHByZXJlcXMgPSBzcGVjLmdldCgnc2NvbnNfcHJlcmVxdWlzaXRlcycsIFtdKQotICAgICAgICAjIFRPRE86ICBwYXJhbWV0ZXJpemUgd2l0aCA8KFNIQVJFRF9MSUJSQVJZXyopIHZhcmlhYmxlcz8KLSAgICAgICAgdGRfdGFyZ2V0ID0gU0NvbnMuVGFyZ2V0KHRkKQotICAgICAgICB0ZF90YXJnZXQudGFyZ2V0X3ByZWZpeCA9ICcke1NITElCUFJFRklYfScKLSAgICAgICAgdGRfdGFyZ2V0LnRhcmdldF9zdWZmaXggPSAnJHtTSExJQlNVRkZJWH0nCi0KLSAgICBHZW5lcmF0ZVNDb25zY3JpcHQob3V0cHV0X2ZpbGUsIHNwZWMsIGJ1aWxkX2ZpbGUsIGRhdGFbYnVpbGRfZmlsZV0pCi0KLSAgaWYgbm90IGRlZmF1bHRfY29uZmlndXJhdGlvbjoKLSAgICBkZWZhdWx0X2NvbmZpZ3VyYXRpb24gPSAnRGVmYXVsdCcKLQotICBmb3IgYnVpbGRfZmlsZSBpbiBzb3J0ZWQoZGF0YS5rZXlzKCkpOgotICAgIHBhdGgsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYnVpbGRfZmlsZSkKLSAgICBpZiBleHQgIT0gJy5neXAnOgotICAgICAgY29udGludWUKLSAgICBvdXRwdXRfZGlyLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aCkKLSAgICBvdXRwdXRfZmlsZW5hbWUgID0gcGF0aCArICdfbWFpbicgKyBvcHRpb25zLnN1ZmZpeCArICcuc2NvbnMnCi0KLSAgICBhbGxfdGFyZ2V0cyA9IGd5cC5jb21tb24uQWxsVGFyZ2V0cyh0YXJnZXRfbGlzdCwgdGFyZ2V0X2RpY3RzLCBidWlsZF9maWxlKQotICAgIHNjb25zY3JpcHRfZmlsZXMgPSB7fQotICAgIGZvciB0IGluIGFsbF90YXJnZXRzOgotICAgICAgc2NvbnNfdGFyZ2V0ID0gU0NvbnMuVGFyZ2V0KHRhcmdldF9kaWN0c1t0XSkKLSAgICAgIGlmIHNjb25zX3RhcmdldC5pc19pZ25vcmVkOgotICAgICAgICBjb250aW51ZQotICAgICAgYmYsIHRhcmdldCA9IGd5cC5jb21tb24uUGFyc2VRdWFsaWZpZWRUYXJnZXQodClbOjJdCi0gICAgICB0YXJnZXRfZmlsZW5hbWUgPSBUYXJnZXRGaWxlbmFtZSh0YXJnZXQsIGJmLCBvcHRpb25zLnN1ZmZpeCkKLSAgICAgIHRwYXRoID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgodGFyZ2V0X2ZpbGVuYW1lLCBvdXRwdXRfZGlyKQotICAgICAgc2NvbnNjcmlwdF9maWxlc1t0YXJnZXRdID0gdHBhdGgKLQotICAgIG91dHB1dF9maWxlbmFtZSA9IG91dHB1dF9wYXRoKG91dHB1dF9maWxlbmFtZSkKLSAgICBpZiBzY29uc2NyaXB0X2ZpbGVzOgotICAgICAgR2VuZXJhdGVTQ29uc2NyaXB0V3JhcHBlcihidWlsZF9maWxlLCBkYXRhW2J1aWxkX2ZpbGVdLCBiYXNlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLCBzY29uc2NyaXB0X2ZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2NvbmZpZ3VyYXRpb24pCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL2dlbmVyYXRvci94Y29kZS5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL3hjb2RlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjIxYmFlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvZ2VuZXJhdG9yL3hjb2RlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIzMCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBmaWxlY21wCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IGd5cC54Y29kZXByb2pfZmlsZQotaW1wb3J0IGVycm5vCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBwb3NpeHBhdGgKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0ZW1wZmlsZQotCi0KLSMgUHJvamVjdCBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhpcyBtb2R1bGUgd2lsbCB1c2UgX2ludGVybWVkaWF0ZV92YXIgYXMgYQotIyBjdXN0b20gWGNvZGUgc2V0dGluZyB3aG9zZSB2YWx1ZSBpcyBhIERlcml2ZWRTb3VyY2VzLWxpa2UgZGlyZWN0b3J5IHRoYXQncwotIyBwcm9qZWN0LXNwZWNpZmljIGFuZCBjb25maWd1cmF0aW9uLXNwZWNpZmljLiAgVGhlIG5vcm1hbCBjaG9pY2UsCi0jIERFUklWRURfRklMRV9ESVIsIGlzIHRhcmdldC1zcGVjaWZpYywgd2hpY2ggaXMgdGhvdWdodCB0byBiZSB0b28gcmVzdHJpY3RpdmUKLSMgYXMgaXQgaXMgbGlrZWx5IHRoYXQgbXVsdGlwbGUgdGFyZ2V0cyB3aXRoaW4gYSBzaW5nbGUgcHJvamVjdCBmaWxlIHdpbGwgd2FudAotIyB0byBhY2Nlc3MgdGhlIHNhbWUgc2V0IG9mIGdlbmVyYXRlZCBmaWxlcy4gIFRoZSBvdGhlciBvcHRpb24sCi0jIFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUiwgaXMgdW5zdWl0YWJsZSBiZWNhdXNlIHdoaWxlIGl0IGlzIHByb2plY3Qtc3BlY2lmaWMsCi0jIGl0IGlzIG5vdCBjb25maWd1cmF0aW9uLXNwZWNpZmljLiAgSU5URVJNRURJQVRFX0RJUiBpcyBkZWZpbmVkIGFzCi0jICQoUFJPSkVDVF9ERVJJVkVEX0ZJTEVfRElSKS8kKENPTkZJR1VSQVRJT04pLgotX2ludGVybWVkaWF0ZV92YXIgPSAnSU5URVJNRURJQVRFX0RJUicKLQotIyBTSEFSRURfSU5URVJNRURJQVRFX0RJUiBpcyB0aGUgc2FtZSwgZXhjZXB0IHRoYXQgaXQgaXMgc2hhcmVkIGFtb25nIGFsbAotIyB0YXJnZXRzIHRoYXQgc2hhcmUgdGhlIHNhbWUgQlVJTFRfUFJPRFVDVFNfRElSLgotX3NoYXJlZF9pbnRlcm1lZGlhdGVfdmFyID0gJ1NIQVJFRF9JTlRFUk1FRElBVEVfRElSJwotCi1fbGlicmFyeV9zZWFyY2hfcGF0aHNfdmFyID0gJ0xJQlJBUllfU0VBUkNIX1BBVEhTJwotCi1nZW5lcmF0b3JfZGVmYXVsdF92YXJpYWJsZXMgPSB7Ci0gICdFWEVDVVRBQkxFX1BSRUZJWCc6ICcnLAotICAnRVhFQ1VUQUJMRV9TVUZGSVgnOiAnJywKLSAgJ1NUQVRJQ19MSUJfUFJFRklYJzogJ2xpYicsCi0gICdTSEFSRURfTElCX1BSRUZJWCc6ICdsaWInLAotICAnU1RBVElDX0xJQl9TVUZGSVgnOiAnLmEnLAotICAnU0hBUkVEX0xJQl9TVUZGSVgnOiAnLmR5bGliJywKLSAgIyBJTlRFUk1FRElBVEVfRElSIGlzIGEgcGxhY2UgZm9yIHRhcmdldHMgdG8gYnVpbGQgdXAgaW50ZXJtZWRpYXRlIHByb2R1Y3RzLgotICAjIEl0IGlzIHNwZWNpZmljIHRvIGVhY2ggYnVpbGQgZW52aXJvbm1lbnQuICBJdCBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZXhpc3QKLSAgIyBhbmQgYmUgY29uc3RhbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgcHJvamVjdCwgY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZQotICAjIGlucHV0IGZpbGUuICBTb21lIGJ1aWxkIGVudmlyb25tZW50cyBtYXkgYWxsb3cgdGhlaXIgaW50ZXJtZWRpYXRlIGRpcmVjdG9yeQotICAjIHRvIGJlIHNoYXJlZCBvbiBhIHdpZGVyIHNjYWxlLCBidXQgdGhpcyBpcyBub3QgZ3VhcmFudGVlZC4KLSAgJ0lOVEVSTUVESUFURV9ESVInOiAnJCglcyknICUgX2ludGVybWVkaWF0ZV92YXIsCi0gICdPUyc6ICdtYWMnLAotICAnUFJPRFVDVF9ESVInOiAnJChCVUlMVF9QUk9EVUNUU19ESVIpJywKLSAgJ0xJQl9ESVInOiAnJChCVUlMVF9QUk9EVUNUU19ESVIpJywKLSAgJ1JVTEVfSU5QVVRfUk9PVCc6ICckKElOUFVUX0ZJTEVfQkFTRSknLAotICAnUlVMRV9JTlBVVF9FWFQnOiAnJChJTlBVVF9GSUxFX1NVRkZJWCknLAotICAnUlVMRV9JTlBVVF9OQU1FJzogJyQoSU5QVVRfRklMRV9OQU1FKScsCi0gICdSVUxFX0lOUFVUX1BBVEgnOiAnJChJTlBVVF9GSUxFX1BBVEgpJywKLSAgJ1JVTEVfSU5QVVRfRElSTkFNRSc6ICckKElOUFVUX0ZJTEVfRElSTkFNRSknLAotICAnU0hBUkVEX0lOVEVSTUVESUFURV9ESVInOiAnJCglcyknICUgX3NoYXJlZF9pbnRlcm1lZGlhdGVfdmFyLAotICAnQ09ORklHVVJBVElPTl9OQU1FJzogJyQoQ09ORklHVVJBVElPTiknLAotfQotCi0jIFRoZSBYY29kZS1zcGVjaWZpYyBzZWN0aW9ucyB0aGF0IGhvbGQgcGF0aHMuCi1nZW5lcmF0b3JfYWRkaXRpb25hbF9wYXRoX3NlY3Rpb25zID0gWwotICAnbWFjX2J1bmRsZV9yZXNvdXJjZXMnLAotICAnbWFjX2ZyYW1ld29ya19oZWFkZXJzJywKLSAgJ21hY19mcmFtZXdvcmtfcHJpdmF0ZV9oZWFkZXJzJywKLSAgIyAnbWFjX2ZyYW1ld29ya19kaXJzJywgaW5wdXQgYWxyZWFkeSBoYW5kbGVzIF9kaXJzIGVuZGluZ3MuCi1dCi0KLSMgVGhlIFhjb2RlLXNwZWNpZmljIGtleXMgdGhhdCBleGlzdCBvbiB0YXJnZXRzIGFuZCBhcmVuJ3QgbW92ZWQgZG93biB0bwotIyBjb25maWd1cmF0aW9ucy4KLWdlbmVyYXRvcl9hZGRpdGlvbmFsX25vbl9jb25maWd1cmF0aW9uX2tleXMgPSBbCi0gICdtYWNfYnVuZGxlJywKLSAgJ21hY19idW5kbGVfcmVzb3VyY2VzJywKLSAgJ21hY19mcmFtZXdvcmtfaGVhZGVycycsCi0gICdtYWNfZnJhbWV3b3JrX3ByaXZhdGVfaGVhZGVycycsCi0gICd4Y29kZV9jcmVhdGVfZGVwZW5kZW50c190ZXN0X3J1bm5lcicsCi1dCi0KLSMgV2Ugd2FudCB0byBsZXQgYW55IHJ1bGVzIGFwcGx5IHRvIGZpbGVzIHRoYXQgYXJlIHJlc291cmNlcyBhbHNvLgotZ2VuZXJhdG9yX2V4dHJhX3NvdXJjZXNfZm9yX3J1bGVzID0gWwotICAnbWFjX2J1bmRsZV9yZXNvdXJjZXMnLAotICAnbWFjX2ZyYW1ld29ya19oZWFkZXJzJywKLSAgJ21hY19mcmFtZXdvcmtfcHJpdmF0ZV9oZWFkZXJzJywKLV0KLQotIyBYY29kZSdzIHN0YW5kYXJkIHNldCBvZiBsaWJyYXJ5IGRpcmVjdG9yaWVzLCB3aGljaCBkb24ndCBuZWVkIHRvIGJlIGR1cGxpY2F0ZWQKLSMgaW4gTElCUkFSWV9TRUFSQ0hfUEFUSFMuIFRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYnV0IHRoYXQncyBva2F5LgoteGNvZGVfc3RhbmRhcmRfbGlicmFyeV9kaXJzID0gZnJvemVuc2V0KFsKLSAgJyQoU0RLUk9PVCkvdXNyL2xpYicsCi0gICckKFNES1JPT1QpL3Vzci9sb2NhbC9saWInLAotXSkKLQotZGVmIENyZWF0ZVhDQ29uZmlndXJhdGlvbkxpc3QoY29uZmlndXJhdGlvbl9uYW1lcyk6Ci0gIHhjY2wgPSBneXAueGNvZGVwcm9qX2ZpbGUuWENDb25maWd1cmF0aW9uTGlzdCh7J2J1aWxkQ29uZmlndXJhdGlvbnMnOiBbXX0pCi0gIGlmIGxlbihjb25maWd1cmF0aW9uX25hbWVzKSA9PSAwOgotICAgIGNvbmZpZ3VyYXRpb25fbmFtZXMgPSBbJ0RlZmF1bHQnXQotICBmb3IgY29uZmlndXJhdGlvbl9uYW1lIGluIGNvbmZpZ3VyYXRpb25fbmFtZXM6Ci0gICAgeGNiYyA9IGd5cC54Y29kZXByb2pfZmlsZS5YQ0J1aWxkQ29uZmlndXJhdGlvbih7Ci0gICAgICAgICduYW1lJzogY29uZmlndXJhdGlvbl9uYW1lfSkKLSAgICB4Y2NsLkFwcGVuZFByb3BlcnR5KCdidWlsZENvbmZpZ3VyYXRpb25zJywgeGNiYykKLSAgeGNjbC5TZXRQcm9wZXJ0eSgnZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lJywgY29uZmlndXJhdGlvbl9uYW1lc1swXSkKLSAgcmV0dXJuIHhjY2wKLQotCi1jbGFzcyBYY29kZVByb2plY3Qob2JqZWN0KToKLSAgZGVmIF9faW5pdF9fKHNlbGYsIGd5cF9wYXRoLCBwYXRoLCBidWlsZF9maWxlX2RpY3QpOgotICAgIHNlbGYuZ3lwX3BhdGggPSBneXBfcGF0aAotICAgIHNlbGYucGF0aCA9IHBhdGgKLSAgICBzZWxmLnByb2plY3QgPSBneXAueGNvZGVwcm9qX2ZpbGUuUEJYUHJvamVjdChwYXRoPXBhdGgpCi0gICAgcHJvamVjdERpclBhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNlbGYuZ3lwX3BhdGgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUocGF0aCkgb3IgJy4nKQotICAgIHNlbGYucHJvamVjdC5TZXRQcm9wZXJ0eSgncHJvamVjdERpclBhdGgnLCBwcm9qZWN0RGlyUGF0aCkKLSAgICBzZWxmLnByb2plY3RfZmlsZSA9IFwKLSAgICAgICAgZ3lwLnhjb2RlcHJval9maWxlLlhDUHJvamVjdEZpbGUoeydyb290T2JqZWN0Jzogc2VsZi5wcm9qZWN0fSkKLSAgICBzZWxmLmJ1aWxkX2ZpbGVfZGljdCA9IGJ1aWxkX2ZpbGVfZGljdAotCi0gICAgIyBUT0RPKG1hcmspOiBhZGQgZGVzdHJ1Y3RvciB0aGF0IGNsZWFucyB1cCBzZWxmLnBhdGggaWYgY3JlYXRlZF9kaXIgaXMKLSAgICAjIFRydWUgYW5kIHRoaW5ncyBkaWRuJ3QgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LiAgT3IgZG8gc29tZXRoaW5nIGV2ZW4KLSAgICAjIGJldHRlciB3aXRoICJ0cnkiPwotICAgIHNlbGYuY3JlYXRlZF9kaXIgPSBGYWxzZQotICAgIHRyeToKLSAgICAgIG9zLm1ha2VkaXJzKHNlbGYucGF0aCkKLSAgICAgIHNlbGYuY3JlYXRlZF9kaXIgPSBUcnVlCi0gICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgcmFpc2UKLQotICBkZWYgRmluYWxpemUxKHNlbGYsIHhjb2RlX3RhcmdldHMsIHNlcmlhbGl6ZV9hbGxfdGVzdHMpOgotICAgICMgQ29sbGVjdCBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIG5hbWVzIHVzZWQgYnkgdGhlCi0gICAgIyB2YXJpb3VzIHRhcmdldHMgaW4gdGhlIGZpbGUuICBJdCBpcyB2ZXJ5IGhlYXZpbHkgYWR2aXNlZCB0byBrZWVwIGVhY2gKLSAgICAjIHRhcmdldCBpbiBhbiBlbnRpcmUgcHJvamVjdCAoZXZlbiBhY3Jvc3MgbXVsdGlwbGUgcHJvamVjdCBmaWxlcykgdXNpbmcKLSAgICAjIHRoZSBzYW1lIHNldCBvZiBjb25maWd1cmF0aW9uIG5hbWVzLgotICAgIGNvbmZpZ3VyYXRpb25zID0gW10KLSAgICBmb3IgeGN0IGluIHNlbGYucHJvamVjdC5HZXRQcm9wZXJ0eSgndGFyZ2V0cycpOgotICAgICAgeGNjbCA9IHhjdC5HZXRQcm9wZXJ0eSgnYnVpbGRDb25maWd1cmF0aW9uTGlzdCcpCi0gICAgICB4Y2JjcyA9IHhjY2wuR2V0UHJvcGVydHkoJ2J1aWxkQ29uZmlndXJhdGlvbnMnKQotICAgICAgZm9yIHhjYmMgaW4geGNiY3M6Ci0gICAgICAgIG5hbWUgPSB4Y2JjLkdldFByb3BlcnR5KCduYW1lJykKLSAgICAgICAgaWYgbmFtZSBub3QgaW4gY29uZmlndXJhdGlvbnM6Ci0gICAgICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKG5hbWUpCi0KLSAgICAjIFJlcGxhY2UgdGhlIFhDQ29uZmlndXJhdGlvbkxpc3QgYXR0YWNoZWQgdG8gdGhlIFBCWFByb2plY3Qgb2JqZWN0IHdpdGgKLSAgICAjIGEgbmV3IG9uZSBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiBuYW1lcyB1c2VkIGJ5IHRoZSB2YXJpb3VzCi0gICAgIyB0YXJnZXRzLgotICAgIHRyeToKLSAgICAgIHhjY2wgPSBDcmVhdGVYQ0NvbmZpZ3VyYXRpb25MaXN0KGNvbmZpZ3VyYXRpb25zKQotICAgICAgc2VsZi5wcm9qZWN0LlNldFByb3BlcnR5KCdidWlsZENvbmZpZ3VyYXRpb25MaXN0JywgeGNjbCkKLSAgICBleGNlcHQ6Ci0gICAgICBzeXMuc3RkZXJyLndyaXRlKCJQcm9ibGVtIHdpdGggZ3lwIGZpbGUgJXNcbiIgJSBzZWxmLmd5cF9wYXRoKQotICAgICAgcmFpc2UKLQotICAgICMgVGhlIG5lZWQgZm9yIHRoaXMgc2V0dGluZyBpcyBleHBsYWluZWQgYWJvdmUgd2hlcmUgX2ludGVybWVkaWF0ZV92YXIgaXMKLSAgICAjIGRlZmluZWQuICBUaGUgY29tbWVudHMgYmVsb3cgYWJvdXQgd2FudGluZyB0byBhdm9pZCBwcm9qZWN0LXdpZGUgYnVpbGQKLSAgICAjIHNldHRpbmdzIGFwcGx5IGhlcmUgdG9vLCBidXQgdGhpcyBuZWVkcyB0byBiZSBzZXQgb24gYSBwcm9qZWN0LXdpZGUgYmFzaXMKLSAgICAjIHNvIHRoYXQgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIF9pbnRlcm1lZGlhdGVfdmFyIHNldHRpbmcgY2FuIGJlIGRpc3BsYXllZAotICAgICMgcHJvcGVybHkgaW4gdGhlIFhjb2RlIFVJLgotICAgICMKLSAgICAjIE5vdGUgdGhhdCBmb3IgY29uZmlndXJhdGlvbi1yZWxhdGl2ZSBmaWxlcyBzdWNoIGFzIGFueXRoaW5nIHJlbGF0aXZlIHRvCi0gICAgIyBfaW50ZXJtZWRpYXRlX3ZhciwgZm9yIHRoZSBwdXJwb3NlcyBvZiBVSSB0cmVlIHZpZXcgZGlzcGxheSwgWGNvZGUgd2lsbAotICAgICMgb25seSByZXNvbHZlIHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb25jZSwgd2hlbiB0aGUgcHJvamVjdCBmaWxlIGlzCi0gICAgIyBvcGVuZWQuICBJZiB0aGUgYWN0aXZlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCwgdGhlIHByb2plY3QgZmlsZQotICAgICMgbXVzdCBiZSBjbG9zZWQgYW5kIHJlb3BlbmVkIGlmIGl0IGlzIGRlc2lyZWQgZm9yIHRoZSB0cmVlIHZpZXcgdG8gdXBkYXRlLgotICAgICMgVGhpcyBpcyBmaWxlZCBhcyBBcHBsZSByYWRhciA2NTg4MzkxLgotICAgIHhjY2wuU2V0QnVpbGRTZXR0aW5nKF9pbnRlcm1lZGlhdGVfdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICckKFBST0pFQ1RfREVSSVZFRF9GSUxFX0RJUikvJChDT05GSUdVUkFUSU9OKScpCi0gICAgeGNjbC5TZXRCdWlsZFNldHRpbmcoX3NoYXJlZF9pbnRlcm1lZGlhdGVfdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICckKFNZTVJPT1QpL0Rlcml2ZWRTb3VyY2VzLyQoQ09ORklHVVJBVElPTiknKQotCi0gICAgIyBTZXQgdXNlci1zcGVjaWZpZWQgcHJvamVjdC13aWRlIGJ1aWxkIHNldHRpbmdzIGFuZCBjb25maWcgZmlsZXMuICBUaGlzCi0gICAgIyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHZlcnkgc3BhcmluZ2x5LiAgUmVhbGx5LCBhbG1vc3QgZXZlcnl0aGluZyBzaG91bGQKLSAgICAjIGdvIGludG8gdGFyZ2V0LXNwZWNpZmljIGJ1aWxkIHNldHRpbmdzIHNlY3Rpb25zLiAgVGhlIHByb2plY3Qtd2lkZQotICAgICMgc2V0dGluZ3MgYXJlIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBjYXNlcyB3aGVyZSBYY29kZSBhdHRlbXB0cyB0bwotICAgICMgcmVzb2x2ZSB2YXJpYWJsZSByZWZlcmVuY2VzIGluIGEgcHJvamVjdCBjb250ZXh0IGFzIG9wcG9zZWQgdG8gYSB0YXJnZXQKLSAgICAjIGNvbnRleHQsIHN1Y2ggYXMgd2hlbiByZXNvbHZpbmcgc291cmNlVHJlZSByZWZlcmVuY2VzIHdoaWxlIGJ1aWxkaW5nIHVwCi0gICAgIyB0aGUgdHJlZSB0cmVlIHZpZXcgZm9yIFVJIGRpc3BsYXkuCi0gICAgIyBBbnkgdmFsdWVzIHNldCBnbG9iYWxseSBhcmUgYXBwbGllZCB0byBhbGwgY29uZmlndXJhdGlvbnMsIHRoZW4gYW55Ci0gICAgIyBwZXItY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIGFwcGxpZWQuCi0gICAgZm9yIHhjaywgeGN2IGluIHNlbGYuYnVpbGRfZmlsZV9kaWN0LmdldCgneGNvZGVfc2V0dGluZ3MnLCB7fSkuaXRlcml0ZW1zKCk6Ci0gICAgICB4Y2NsLlNldEJ1aWxkU2V0dGluZyh4Y2ssIHhjdikKLSAgICBpZiAneGNvZGVfY29uZmlnX2ZpbGUnIGluIHNlbGYuYnVpbGRfZmlsZV9kaWN0OgotICAgICAgY29uZmlnX3JlZiA9IHNlbGYucHJvamVjdC5BZGRPckdldEZpbGVJblJvb3RHcm91cCgKLSAgICAgICAgICBzZWxmLmJ1aWxkX2ZpbGVfZGljdFsneGNvZGVfY29uZmlnX2ZpbGUnXSkKLSAgICAgIHhjY2wuU2V0QmFzZUNvbmZpZ3VyYXRpb24oY29uZmlnX3JlZikKLSAgICBidWlsZF9maWxlX2NvbmZpZ3VyYXRpb25zID0gc2VsZi5idWlsZF9maWxlX2RpY3QuZ2V0KCdjb25maWd1cmF0aW9ucycsIHt9KQotICAgIGlmIGJ1aWxkX2ZpbGVfY29uZmlndXJhdGlvbnM6Ci0gICAgICBmb3IgY29uZmlnX25hbWUgaW4gY29uZmlndXJhdGlvbnM6Ci0gICAgICAgIGJ1aWxkX2ZpbGVfY29uZmlndXJhdGlvbl9uYW1lZCA9IFwKLSAgICAgICAgICAgIGJ1aWxkX2ZpbGVfY29uZmlndXJhdGlvbnMuZ2V0KGNvbmZpZ19uYW1lLCB7fSkKLSAgICAgICAgaWYgYnVpbGRfZmlsZV9jb25maWd1cmF0aW9uX25hbWVkOgotICAgICAgICAgIHhjYyA9IHhjY2wuQ29uZmlndXJhdGlvbk5hbWVkKGNvbmZpZ19uYW1lKQotICAgICAgICAgIGZvciB4Y2ssIHhjdiBpbiBidWlsZF9maWxlX2NvbmZpZ3VyYXRpb25fbmFtZWQuZ2V0KCd4Y29kZV9zZXR0aW5ncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30pLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgeGNjLlNldEJ1aWxkU2V0dGluZyh4Y2ssIHhjdikKLSAgICAgICAgICBpZiAneGNvZGVfY29uZmlnX2ZpbGUnIGluIGJ1aWxkX2ZpbGVfY29uZmlndXJhdGlvbl9uYW1lZDoKLSAgICAgICAgICAgIGNvbmZpZ19yZWYgPSBzZWxmLnByb2plY3QuQWRkT3JHZXRGaWxlSW5Sb290R3JvdXAoCi0gICAgICAgICAgICAgICAgYnVpbGRfZmlsZV9jb25maWd1cmF0aW9uc1tjb25maWdfbmFtZV1bJ3hjb2RlX2NvbmZpZ19maWxlJ10pCi0gICAgICAgICAgICB4Y2MuU2V0QmFzZUNvbmZpZ3VyYXRpb24oY29uZmlnX3JlZikKLQotICAgICMgU29ydCB0aGUgdGFyZ2V0cyBiYXNlZCBvbiBob3cgdGhleSBhcHBlYXJlZCBpbiB0aGUgaW5wdXQuCi0gICAgIyBUT0RPKG1hcmspOiBMaWtlIGEgbG90IG9mIG90aGVyIHRoaW5ncyBoZXJlLCB0aGlzIGFzc3VtZXMgaW50ZXJuYWwKLSAgICAjIGtub3dsZWRnZSBvZiBQQlhQcm9qZWN0IC0gaW4gdGhpcyBjYXNlLCBvZiBpdHMgInRhcmdldHMiIHByb3BlcnR5LgotCi0gICAgIyBvcmRpbmFyeV90YXJnZXRzIGFyZSBvcmRpbmFyeSB0YXJnZXRzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIHByb2plY3QKLSAgICAjIGZpbGUuIHJ1bl90ZXN0X3RhcmdldHMgYXJlIHRoZSB0YXJnZXRzIHRoYXQgcnVuIHVuaXR0ZXN0cyBhbmQgc2hvdWxkIGJlCi0gICAgIyB1c2VkIGZvciB0aGUgUnVuIEFsbCBUZXN0cyB0YXJnZXQuICBzdXBwb3J0X3RhcmdldHMgYXJlIHRoZSBhY3Rpb24vcnVsZQotICAgICMgdGFyZ2V0cyB1c2VkIGJ5IEdZUCBmaWxlIHRhcmdldHMsIGp1c3Qga2VwdCBmb3IgdGhlIGFzc2VydCBjaGVjay4KLSAgICBvcmRpbmFyeV90YXJnZXRzID0gW10KLSAgICBydW5fdGVzdF90YXJnZXRzID0gW10KLSAgICBzdXBwb3J0X3RhcmdldHMgPSBbXQotCi0gICAgIyB0YXJnZXRzIGlzIGZ1bGwgbGlzdCBvZiB0YXJnZXRzIGluIHRoZSBwcm9qZWN0LgotICAgIHRhcmdldHMgPSBbXQotCi0gICAgIyBkb2VzIHRoZSBpdCBkZWZpbmUgaXQncyBvd24gImFsbCI/Ci0gICAgaGFzX2N1c3RvbV9hbGwgPSBGYWxzZQotCi0gICAgIyB0YXJnZXRzX2Zvcl9hbGwgaXMgdGhlIGxpc3Qgb2Ygb3JkaW5hcnlfdGFyZ2V0cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQKLSAgICAjIGluIHRoaXMgcHJvamVjdCdzICJBbGwiIHRhcmdldC4gIEl0IGluY2x1ZGVzIGVhY2ggbm9uX3J1bnRlc3RfdGFyZ2V0Ci0gICAgIyB0aGF0IGRvZXMgbm90IGhhdmUgc3VwcHJlc3Nfd2lsZGNhcmQgc2V0LgotICAgIHRhcmdldHNfZm9yX2FsbCA9IFtdCi0KLSAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYnVpbGRfZmlsZV9kaWN0Wyd0YXJnZXRzJ106Ci0gICAgICB0YXJnZXRfbmFtZSA9IHRhcmdldFsndGFyZ2V0X25hbWUnXQotICAgICAgdG9vbHNldCA9IHRhcmdldFsndG9vbHNldCddCi0gICAgICBxdWFsaWZpZWRfdGFyZ2V0ID0gZ3lwLmNvbW1vbi5RdWFsaWZpZWRUYXJnZXQoc2VsZi5neXBfcGF0aCwgdGFyZ2V0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHNldCkKLSAgICAgIHhjb2RlX3RhcmdldCA9IHhjb2RlX3RhcmdldHNbcXVhbGlmaWVkX3RhcmdldF0KLSAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHRhcmdldCBiZWluZyBhZGRlZCB0byB0aGUgc29ydGVkIGxpc3QgaXMgYWxyZWFkeSBpbgotICAgICAgIyB0aGUgdW5zb3J0ZWQgbGlzdC4KLSAgICAgIGFzc2VydCB4Y29kZV90YXJnZXQgaW4gc2VsZi5wcm9qZWN0Ll9wcm9wZXJ0aWVzWyd0YXJnZXRzJ10KLSAgICAgIHRhcmdldHMuYXBwZW5kKHhjb2RlX3RhcmdldCkKLSAgICAgIG9yZGluYXJ5X3RhcmdldHMuYXBwZW5kKHhjb2RlX3RhcmdldCkKLSAgICAgIGlmIHhjb2RlX3RhcmdldC5zdXBwb3J0X3RhcmdldDoKLSAgICAgICAgc3VwcG9ydF90YXJnZXRzLmFwcGVuZCh4Y29kZV90YXJnZXQuc3VwcG9ydF90YXJnZXQpCi0gICAgICAgIHRhcmdldHMuYXBwZW5kKHhjb2RlX3RhcmdldC5zdXBwb3J0X3RhcmdldCkKLQotICAgICAgaWYgbm90IGludCh0YXJnZXQuZ2V0KCdzdXBwcmVzc193aWxkY2FyZCcsIEZhbHNlKSk6Ci0gICAgICAgIHRhcmdldHNfZm9yX2FsbC5hcHBlbmQoeGNvZGVfdGFyZ2V0KQotCi0gICAgICBpZiB0YXJnZXRfbmFtZS5sb3dlcigpID09ICdhbGwnOgotICAgICAgICBoYXNfY3VzdG9tX2FsbCA9IFRydWU7Ci0KLSAgICAgICMgSWYgdGhpcyB0YXJnZXQgaGFzIGEgJ3J1bl9hcycgYXR0cmlidXRlLCBhZGQgaXRzIHRhcmdldCB0byB0aGUKLSAgICAgICMgdGFyZ2V0cywgYW5kIGFkZCBpdCB0byB0aGUgdGVzdCB0YXJnZXRzLgotICAgICAgaWYgdGFyZ2V0LmdldCgncnVuX2FzJyk6Ci0gICAgICAgICMgTWFrZSBhIHRhcmdldCB0byBydW4gc29tZXRoaW5nLiAgSXQgc2hvdWxkIGhhdmUgb25lCi0gICAgICAgICMgZGVwZW5kZW5jeSwgdGhlIHBhcmVudCB4Y29kZSB0YXJnZXQuCi0gICAgICAgIHhjY2wgPSBDcmVhdGVYQ0NvbmZpZ3VyYXRpb25MaXN0KGNvbmZpZ3VyYXRpb25zKQotICAgICAgICBydW5fdGFyZ2V0ID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWEFnZ3JlZ2F0ZVRhcmdldCh7Ci0gICAgICAgICAgICAgICduYW1lJzogICAgICAgICAgICAgICAgICAgJ1J1biAnICsgdGFyZ2V0X25hbWUsCi0gICAgICAgICAgICAgICdwcm9kdWN0TmFtZSc6ICAgICAgICAgICAgeGNvZGVfdGFyZ2V0LkdldFByb3BlcnR5KCdwcm9kdWN0TmFtZScpLAotICAgICAgICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IHhjY2wsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcGFyZW50PXNlbGYucHJvamVjdCkKLSAgICAgICAgcnVuX3RhcmdldC5BZGREZXBlbmRlbmN5KHhjb2RlX3RhcmdldCkKLQotICAgICAgICBjb21tYW5kID0gdGFyZ2V0WydydW5fYXMnXQotICAgICAgICBzY3JpcHQgPSAnJwotICAgICAgICBpZiBjb21tYW5kLmdldCgnd29ya2luZ19kaXJlY3RvcnknKToKLSAgICAgICAgICBzY3JpcHQgPSBzY3JpcHQgKyAnY2QgIiVzIlxuJyAlIFwKLSAgICAgICAgICAgICAgICAgICBneXAueGNvZGVwcm9qX2ZpbGUuQ29udmVydFZhcmlhYmxlc1RvU2hlbGxTeW50YXgoCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuZ2V0KCd3b3JraW5nX2RpcmVjdG9yeScpKQotCi0gICAgICAgIGlmIGNvbW1hbmQuZ2V0KCdlbnZpcm9ubWVudCcpOgotICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdCArICJcbiIuam9pbigKLSAgICAgICAgICAgIFsnZXhwb3J0ICVzPSIlcyInICUKLSAgICAgICAgICAgICAoa2V5LCBneXAueGNvZGVwcm9qX2ZpbGUuQ29udmVydFZhcmlhYmxlc1RvU2hlbGxTeW50YXgodmFsKSkKLSAgICAgICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBjb21tYW5kLmdldCgnZW52aXJvbm1lbnQnKS5pdGVyaXRlbXMoKV0pICsgIlxuIgotCi0gICAgICAgICMgU29tZSB0ZXN0IGVuZCB1cCB1c2luZyBzb2NrZXRzLCBmaWxlcyBvbiBkaXNrLCBldGMuIGFuZCBjYW4gZ2V0Ci0gICAgICAgICMgY29uZnVzZWQgaWYgbW9yZSB0aGVuIG9uZSB0ZXN0IHJ1bnMgYXQgYSB0aW1lLiAgVGhlIGdlbmVyYXRvcgotICAgICAgICAjIGZsYWcgJ3hjb2RlX3NlcmlhbGl6ZV9hbGxfdGVzdF9ydW5zJyBjb250cm9scyB0aGUgZm9yY2luZyBvZiBhbGwKLSAgICAgICAgIyB0ZXN0cyBzZXJpYWxseS4gIEl0IGRlZmF1bHRzIHRvIFRydWUuICBUbyBnZXQgc2VyaWFsIHJ1bnMgdGhpcwotICAgICAgICAjIGxpdHRsZSBiaXQgb2YgcHl0aG9uIGRvZXMgdGhlIHNhbWUgYXMgdGhlIGxpbnV4IGZsb2NrIHV0aWxpdHkgdG8KLSAgICAgICAgIyBtYWtlIHN1cmUgb25seSBvbmUgcnVucyBhdCBhIHRpbWUuCi0gICAgICAgIGNvbW1hbmRfcHJlZml4ID0gJycKLSAgICAgICAgaWYgc2VyaWFsaXplX2FsbF90ZXN0czoKLSAgICAgICAgICBjb21tYW5kX3ByZWZpeCA9IFwKLSIiInB5dGhvbiAtYyAiaW1wb3J0IGZjbnRsLCBzdWJwcm9jZXNzLCBzeXMKLWZpbGUgPSBvcGVuKCckVE1QRElSL0dZUF9zZXJpYWxpemVfdGVzdF9ydW5zJywgJ2EnKQotZmNudGwuZmxvY2soZmlsZS5maWxlbm8oKSwgZmNudGwuTE9DS19FWCkKLXN5cy5leGl0KHN1YnByb2Nlc3MuY2FsbChzeXMuYXJndlsxOl0pKSIgIiIiCi0KLSAgICAgICAgIyBJZiB3ZSB3ZXJlIHVuYWJsZSB0byBleGVjIGZvciBzb21lIHJlYXNvbiwgd2Ugd2FudCB0byBleGl0Ci0gICAgICAgICMgd2l0aCBhbiBlcnJvciwgYW5kIGZpeHVwIHZhcmlhYmxlIHJlZmVyZW5jZXMgdG8gYmUgc2hlbGwKLSAgICAgICAgIyBzeW50YXggaW5zdGVhZCBvZiB4Y29kZSBzeW50YXguCi0gICAgICAgIHNjcmlwdCA9IHNjcmlwdCArICdleGVjICcgKyBjb21tYW5kX3ByZWZpeCArICclc1xuZXhpdCAxXG4nICUgXAotICAgICAgICAgICAgICAgICBneXAueGNvZGVwcm9qX2ZpbGUuQ29udmVydFZhcmlhYmxlc1RvU2hlbGxTeW50YXgoCi0gICAgICAgICAgICAgICAgICAgICBneXAuY29tbW9uLkVuY29kZVBPU0lYU2hlbGxMaXN0KGNvbW1hbmQuZ2V0KCdhY3Rpb24nKSkpCi0KLSAgICAgICAgc3NicCA9IGd5cC54Y29kZXByb2pfZmlsZS5QQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2UoewotICAgICAgICAgICAgICAnc2hlbGxTY3JpcHQnOiAgICAgIHNjcmlwdCwKLSAgICAgICAgICAgICAgJ3Nob3dFbnZWYXJzSW5Mb2cnOiAwLAotICAgICAgICAgICAgfSkKLSAgICAgICAgcnVuX3RhcmdldC5BcHBlbmRQcm9wZXJ0eSgnYnVpbGRQaGFzZXMnLCBzc2JwKQotCi0gICAgICAgICMgQWRkIHRoZSBydW4gdGFyZ2V0IHRvIHRoZSBwcm9qZWN0IGZpbGUuCi0gICAgICAgIHRhcmdldHMuYXBwZW5kKHJ1bl90YXJnZXQpCi0gICAgICAgIHJ1bl90ZXN0X3RhcmdldHMuYXBwZW5kKHJ1bl90YXJnZXQpCi0gICAgICAgIHhjb2RlX3RhcmdldC50ZXN0X3J1bm5lciA9IHJ1bl90YXJnZXQKLQotCi0gICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgbGlzdCBvZiB0YXJnZXRzIGJlaW5nIHJlcGxhY2VkIGlzIHRoZSBzYW1lIGxlbmd0aCBhcwotICAgICMgdGhlIG9uZSByZXBsYWNpbmcgaXQsIGJ1dCBhbGxvdyBmb3IgdGhlIGFkZGVkIHRlc3QgcnVubmVyIHRhcmdldHMuCi0gICAgYXNzZXJ0IGxlbihzZWxmLnByb2plY3QuX3Byb3BlcnRpZXNbJ3RhcmdldHMnXSkgPT0gXAotICAgICAgbGVuKG9yZGluYXJ5X3RhcmdldHMpICsgbGVuKHN1cHBvcnRfdGFyZ2V0cykKLQotICAgIHNlbGYucHJvamVjdC5fcHJvcGVydGllc1sndGFyZ2V0cyddID0gdGFyZ2V0cwotCi0gICAgIyBHZXQgcmlkIG9mIHVubmVjZXNzYXJ5IGxldmVscyBvZiBkZXB0aCBpbiBncm91cHMgbGlrZSB0aGUgU291cmNlIGdyb3VwLgotICAgIHNlbGYucHJvamVjdC5Sb290R3JvdXBzVGFrZU92ZXJPbmx5Q2hpbGRyZW4oVHJ1ZSkKLQotICAgICMgU29ydCB0aGUgZ3JvdXBzIG5pY2VseS4gIERvIHRoaXMgYWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cywgYmVjYXVzZSB0aGUKLSAgICAjIFByb2R1Y3RzIGdyb3VwIGlzIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgb2YgdGhlIHRhcmdldHMuCi0gICAgc2VsZi5wcm9qZWN0LlNvcnRHcm91cHMoKQotCi0gICAgIyBDcmVhdGUgYW4gIkFsbCIgdGFyZ2V0IGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB0YXJnZXQgaW4gdGhpcyBwcm9qZWN0Ci0gICAgIyBmaWxlIGFuZCB0aGUgcHJvamVjdCBkaWRuJ3QgZGVmaW5lIGl0cyBvd24gIkFsbCIgdGFyZ2V0LiAgUHV0IGEgZ2VuZXJhdGVkCi0gICAgIyAiQWxsIiB0YXJnZXQgZmlyc3Qgc28gdGhhdCBwZW9wbGUgb3BlbmluZyB1cCB0aGUgcHJvamVjdCBmb3IgdGhlIGZpcnN0Ci0gICAgIyB0aW1lIHdpbGwgYnVpbGQgZXZlcnl0aGluZyBieSBkZWZhdWx0LgotICAgIGlmIGxlbih0YXJnZXRzX2Zvcl9hbGwpID4gMSBhbmQgbm90IGhhc19jdXN0b21fYWxsOgotICAgICAgeGNjbCA9IENyZWF0ZVhDQ29uZmlndXJhdGlvbkxpc3QoY29uZmlndXJhdGlvbnMpCi0gICAgICBhbGxfdGFyZ2V0ID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWEFnZ3JlZ2F0ZVRhcmdldCgKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IHhjY2wsCi0gICAgICAgICAgICAnbmFtZSc6ICAgICAgICAgICAgICAgICAgICdBbGwnLAotICAgICAgICAgIH0sCi0gICAgICAgICAgcGFyZW50PXNlbGYucHJvamVjdCkKLQotICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzX2Zvcl9hbGw6Ci0gICAgICAgIGFsbF90YXJnZXQuQWRkRGVwZW5kZW5jeSh0YXJnZXQpCi0KLSAgICAgICMgVE9ETyhtYXJrKTogVGhpcyBpcyBldmlsIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGludGVybmFsIGtub3dsZWRnZSBvZgotICAgICAgIyBQQlhQcm9qZWN0Ll9wcm9wZXJ0aWVzLiAgSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSAiQWxsIiB0YXJnZXQgZmlyc3QsCi0gICAgICAjIHRob3VnaC4KLSAgICAgIHNlbGYucHJvamVjdC5fcHJvcGVydGllc1sndGFyZ2V0cyddLmluc2VydCgwLCBhbGxfdGFyZ2V0KQotCi0gICAgIyBUaGUgc2FtZSwgYnV0IGZvciBydW5fdGVzdF90YXJnZXRzLgotICAgIGlmIGxlbihydW5fdGVzdF90YXJnZXRzKSA+IDE6Ci0gICAgICB4Y2NsID0gQ3JlYXRlWENDb25maWd1cmF0aW9uTGlzdChjb25maWd1cmF0aW9ucykKLSAgICAgIHJ1bl9hbGxfdGVzdHNfdGFyZ2V0ID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWEFnZ3JlZ2F0ZVRhcmdldCgKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IHhjY2wsCi0gICAgICAgICAgICAnbmFtZSc6ICAgICAgICAgICAgICAgICAgICdSdW4gQWxsIFRlc3RzJywKLSAgICAgICAgICB9LAotICAgICAgICAgIHBhcmVudD1zZWxmLnByb2plY3QpCi0gICAgICBmb3IgcnVuX3Rlc3RfdGFyZ2V0IGluIHJ1bl90ZXN0X3RhcmdldHM6Ci0gICAgICAgIHJ1bl9hbGxfdGVzdHNfdGFyZ2V0LkFkZERlcGVuZGVuY3kocnVuX3Rlc3RfdGFyZ2V0KQotCi0gICAgICAjIEluc2VydCBhZnRlciB0aGUgIkFsbCIgdGFyZ2V0LCB3aGljaCBtdXN0IGV4aXN0IGlmIHRoZXJlIGlzIG1vcmUgdGhhbgotICAgICAgIyBvbmUgcnVuX3Rlc3RfdGFyZ2V0LgotICAgICAgc2VsZi5wcm9qZWN0Ll9wcm9wZXJ0aWVzWyd0YXJnZXRzJ10uaW5zZXJ0KDEsIHJ1bl9hbGxfdGVzdHNfdGFyZ2V0KQotCi0gIGRlZiBGaW5hbGl6ZTIoc2VsZiwgeGNvZGVfdGFyZ2V0cywgeGNvZGVfdGFyZ2V0X3RvX3RhcmdldF9kaWN0KToKLSAgICAjIEZpbmFsaXplMiBuZWVkcyB0byBoYXBwZW4gaW4gYSBzZXBhcmF0ZSBzdGVwIGJlY2F1c2UgdGhlIHByb2Nlc3Mgb2YKLSAgICAjIHVwZGF0aW5nIHJlZmVyZW5jZXMgdG8gb3RoZXIgcHJvamVjdHMgZGVwZW5kcyBvbiB0aGUgb3JkZXJpbmcgb2YgdGFyZ2V0cwotICAgICMgd2l0aGluIHJlbW90ZSBwcm9qZWN0IGZpbGVzLiAgRmluYWxpemUxIGlzIHJlc3BvbnNpYmxlIGZvciBzb3J0aW5nIGR1dHksCi0gICAgIyBhbmQgb25jZSBhbGwgcHJvamVjdCBmaWxlcyBhcmUgc29ydGVkLCBGaW5hbGl6ZTIgY2FuIGNvbWUgaW4gYW5kIHVwZGF0ZQotICAgICMgdGhlc2UgcmVmZXJlbmNlcy4KLQotICAgICMgVG8gc3VwcG9ydCBtYWtpbmcgYSAidGVzdCBydW5uZXIiIHRhcmdldCB0aGF0IHdpbGwgcnVuIGFsbCB0aGUgdGVzdHMKLSAgICAjIHRoYXQgYXJlIGRpcmVjdCBkZXBlbmRlbnRzIG9mIGFueSBnaXZlbiB0YXJnZXQsIHdlIGxvb2sgZm9yCi0gICAgIyB4Y29kZV9jcmVhdGVfZGVwZW5kZW50c190ZXN0X3J1bm5lciBiZWluZyBzZXQgb24gYW4gQWdncmVnYXRlIHRhcmdldCwKLSAgICAjIGFuZCBnZW5lcmF0ZSBhIHNlY29uZCB0YXJnZXQgdGhhdCB3aWxsIHJ1biB0aGUgdGVzdHMgcnVubmVycyBmb3VuZCB1bmRlcgotICAgICMgdGhlIG1hcmtlZCB0YXJnZXQuCi0gICAgZm9yIGJmX3RndCBpbiBzZWxmLmJ1aWxkX2ZpbGVfZGljdFsndGFyZ2V0cyddOgotICAgICAgaWYgaW50KGJmX3RndC5nZXQoJ3hjb2RlX2NyZWF0ZV9kZXBlbmRlbnRzX3Rlc3RfcnVubmVyJywgMCkpOgotICAgICAgICB0Z3RfbmFtZSA9IGJmX3RndFsndGFyZ2V0X25hbWUnXQotICAgICAgICB0b29sc2V0ID0gYmZfdGd0Wyd0b29sc2V0J10KLSAgICAgICAgcXVhbGlmaWVkX3RhcmdldCA9IGd5cC5jb21tb24uUXVhbGlmaWVkVGFyZ2V0KHNlbGYuZ3lwX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Z3RfbmFtZSwgdG9vbHNldCkKLSAgICAgICAgeGNvZGVfdGFyZ2V0ID0geGNvZGVfdGFyZ2V0c1txdWFsaWZpZWRfdGFyZ2V0XQotICAgICAgICBpZiBpc2luc3RhbmNlKHhjb2RlX3RhcmdldCwgZ3lwLnhjb2RlcHJval9maWxlLlBCWEFnZ3JlZ2F0ZVRhcmdldCk6Ci0gICAgICAgICAgIyBDb2xsZWN0IGFsbCB0aGUgcnVuIHRlc3QgdGFyZ2V0cy4KLSAgICAgICAgICBhbGxfcnVuX3Rlc3RzID0gW10KLSAgICAgICAgICBwYnh0ZHMgPSB4Y29kZV90YXJnZXQuR2V0UHJvcGVydHkoJ2RlcGVuZGVuY2llcycpCi0gICAgICAgICAgZm9yIHBieHRkIGluIHBieHRkczoKLSAgICAgICAgICAgIHBieGNpcCA9IHBieHRkLkdldFByb3BlcnR5KCd0YXJnZXRQcm94eScpCi0gICAgICAgICAgICBkZXBlbmRlbmN5X3hjdCA9IHBieGNpcC5HZXRQcm9wZXJ0eSgncmVtb3RlR2xvYmFsSURTdHJpbmcnKQotICAgICAgICAgICAgaWYgaGFzYXR0cihkZXBlbmRlbmN5X3hjdCwgJ3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICAgIGFsbF9ydW5fdGVzdHMuYXBwZW5kKGRlcGVuZGVuY3lfeGN0LnRlc3RfcnVubmVyKQotCi0gICAgICAgICAgIyBEaXJlY3RseSBkZXBlbmQgb24gYWxsIHRoZSBydW5uZXJzIGFzIHRoZXkgZGVwZW5kIG9uIHRoZSB0YXJnZXQKLSAgICAgICAgICAjIHRoYXQgYnVpbGRzIHRoZW0uCi0gICAgICAgICAgaWYgbGVuKGFsbF9ydW5fdGVzdHMpID4gMDoKLSAgICAgICAgICAgIHJ1bl9hbGxfdGFyZ2V0ID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWEFnZ3JlZ2F0ZVRhcmdldCh7Ci0gICAgICAgICAgICAgICAgICAnbmFtZSc6ICAgICAgICAnUnVuICVzIFRlc3RzJyAlIHRndF9uYW1lLAotICAgICAgICAgICAgICAgICAgJ3Byb2R1Y3ROYW1lJzogdGd0X25hbWUsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi5wcm9qZWN0KQotICAgICAgICAgICAgZm9yIHJ1bl90ZXN0X3RhcmdldCBpbiBhbGxfcnVuX3Rlc3RzOgotICAgICAgICAgICAgICBydW5fYWxsX3RhcmdldC5BZGREZXBlbmRlbmN5KHJ1bl90ZXN0X3RhcmdldCkKLQotICAgICAgICAgICAgIyBJbnNlcnQgdGhlIHRlc3QgcnVubmVyIGFmdGVyIHRoZSByZWxhdGVkIHRhcmdldC4KLSAgICAgICAgICAgIGlkeCA9IHNlbGYucHJvamVjdC5fcHJvcGVydGllc1sndGFyZ2V0cyddLmluZGV4KHhjb2RlX3RhcmdldCkKLSAgICAgICAgICAgIHNlbGYucHJvamVjdC5fcHJvcGVydGllc1sndGFyZ2V0cyddLmluc2VydChpZHggKyAxLCBydW5fYWxsX3RhcmdldCkKLQotICAgICMgVXBkYXRlIGFsbCByZWZlcmVuY2VzIHRvIG90aGVyIHByb2plY3RzLCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbGlzdHMgb2YKLSAgICAjIHJlbW90ZSBwcm9kdWN0cyBhcmUgY29tcGxldGUuICBPdGhlcndpc2UsIFhjb2RlIHdpbGwgZmlsbCB0aGVtIGluIHdoZW4KLSAgICAjIGl0IG9wZW5zIHRoZSBwcm9qZWN0IGZpbGUsIHdoaWNoIHdpbGwgcmVzdWx0IGluIHVubmVjZXNzYXJ5IGRpZmZzLgotICAgICMgVE9ETyhtYXJrKTogVGhpcyBpcyBldmlsIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGludGVybmFsIGtub3dsZWRnZSBvZgotICAgICMgUEJYUHJvamVjdC5fb3RoZXJfcGJ4cHJvamVjdHMuCi0gICAgZm9yIG90aGVyX3BieHByb2plY3QgaW4gc2VsZi5wcm9qZWN0Ll9vdGhlcl9wYnhwcm9qZWN0cy5rZXlzKCk6Ci0gICAgICBzZWxmLnByb2plY3QuQWRkT3JHZXRQcm9qZWN0UmVmZXJlbmNlKG90aGVyX3BieHByb2plY3QpCi0KLSAgICBzZWxmLnByb2plY3QuU29ydFJlbW90ZVByb2R1Y3RSZWZlcmVuY2VzKCkKLQotICAgICMgR2l2ZSBldmVyeXRoaW5nIGFuIElELgotICAgIHNlbGYucHJvamVjdF9maWxlLkNvbXB1dGVJRHMoKQotCi0gICAgIyBNYWtlIHN1cmUgdGhhdCBubyB0d28gb2JqZWN0cyBpbiB0aGUgcHJvamVjdCBmaWxlIGhhdmUgdGhlIHNhbWUgSUQuICBJZgotICAgICMgbXVsdGlwbGUgb2JqZWN0cyB3aW5kIHVwIHdpdGggdGhlIHNhbWUgSUQsIHVwb24gbG9hZGluZyB0aGUgZmlsZSwgWGNvZGUKLSAgICAjIHdpbGwgb25seSByZWNvZ25pemUgb25lIG9iamVjdCAodGhlIGxhc3Qgb25lIGluIHRoZSBmaWxlPykgYW5kIHRoZQotICAgICMgcmVzdWx0cyBhcmUgdW5wcmVkaWN0YWJsZS4KLSAgICBzZWxmLnByb2plY3RfZmlsZS5FbnN1cmVOb0lEQ29sbGlzaW9ucygpCi0KLSAgZGVmIFdyaXRlKHNlbGYpOgotICAgICMgV3JpdGUgdGhlIHByb2plY3QgZmlsZSB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiBmaXJzdC4gIFhjb2RlIHdhdGNoZXMgZm9yCi0gICAgIyBjaGFuZ2VzIHRvIHRoZSBwcm9qZWN0IGZpbGUgYW5kIHByZXNlbnRzIGEgVUkgc2hlZXQgb2ZmZXJpbmcgdG8gcmVsb2FkCi0gICAgIyB0aGUgcHJvamVjdCB3aGVuIGl0IGRvZXMgY2hhbmdlLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgZXNwZWNpYWxseSB3aGVuCi0gICAgIyBtdWx0aXBsZSBwcm9qZWN0cyBhcmUgb3BlbiBvciB3aGVuIFhjb2RlIGlzIGJ1c3ksIHRoaW5ncyBkb24ndCB3b3JrIHNvCi0gICAgIyBzZWFtbGVzc2x5LiAgU29tZXRpbWVzLCBYY29kZSBpcyBhYmxlIHRvIGRldGVjdCB0aGF0IGEgcHJvamVjdCBmaWxlIGhhcwotICAgICMgY2hhbmdlZCBidXQgY2FuJ3QgdW5sb2FkIGl0IGJlY2F1c2Ugc29tZXRoaW5nIGVsc2UgaXMgcmVmZXJlbmNpbmcgaXQuCi0gICAgIyBUbyBtaXRpZ2F0ZSB0aGlzIHByb2JsZW0sIGFuZCB0byBhdm9pZCBldmVuIGhhdmluZyBYY29kZSBwcmVzZW50IHRoZSBVSQotICAgICMgc2hlZXQgd2hlbiBhbiBvcGVuIHByb2plY3QgaXMgcmV3cml0dGVuIGZvciBpbmNvbnNlcXVlbnRpYWwgY2hhbmdlcywgdGhlCi0gICAgIyBwcm9qZWN0IGZpbGUgaXMgd3JpdHRlbiB0byBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSB4Y29kZXByb2ogZGlyZWN0b3J5Ci0gICAgIyBmaXJzdC4gIFRoZSBuZXcgdGVtcG9yYXJ5IGZpbGUgaXMgdGhlbiBjb21wYXJlZCB0byB0aGUgZXhpc3RpbmcgcHJvamVjdAotICAgICMgZmlsZSwgaWYgYW55LiAgSWYgdGhleSBkaWZmZXIsIHRoZSBuZXcgZmlsZSByZXBsYWNlcyB0aGUgb2xkOyBvdGhlcndpc2UsCi0gICAgIyB0aGUgbmV3IHByb2plY3QgZmlsZSBpcyBzaW1wbHkgZGVsZXRlZC4gIFhjb2RlIHByb3Blcmx5IGRldGVjdHMgYSBmaWxlCi0gICAgIyBiZWluZyByZW5hbWVkIG92ZXIgYW4gb3BlbiBwcm9qZWN0IGZpbGUgYXMgYSBjaGFuZ2UgYW5kIHNvIGl0IHJlbWFpbnMKLSAgICAjIGFibGUgdG8gcHJlc2VudCB0aGUgInByb2plY3QgZmlsZSBjaGFuZ2VkIiBzaGVldCB1bmRlciB0aGlzIHN5c3RlbS4KLSAgICAjIFdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgZmlsZSBmaXJzdCBhbHNvIGF2b2lkcyB0aGUgcG9zc2libGUgcHJvYmxlbSBvZgotICAgICMgWGNvZGUgcmVyZWFkaW5nIGFuIGluY29tcGxldGUgcHJvamVjdCBmaWxlLgotICAgIChvdXRwdXRfZmQsIG5ld19wYnhwcm9qX3BhdGgpID0gXAotICAgICAgICB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD0nLnRtcCcsIHByZWZpeD0ncHJvamVjdC5wYnhwcm9qLmd5cC4nLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRpcj1zZWxmLnBhdGgpCi0KLSAgICB0cnk6Ci0gICAgICBvdXRwdXRfZmlsZSA9IG9zLmZkb3BlbihvdXRwdXRfZmQsICd3YicpCi0KLSAgICAgIHNlbGYucHJvamVjdF9maWxlLlByaW50KG91dHB1dF9maWxlKQotICAgICAgb3V0cHV0X2ZpbGUuY2xvc2UoKQotCi0gICAgICBwYnhwcm9qX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAncHJvamVjdC5wYnhwcm9qJykKLQotICAgICAgc2FtZSA9IEZhbHNlCi0gICAgICB0cnk6Ci0gICAgICAgIHNhbWUgPSBmaWxlY21wLmNtcChwYnhwcm9qX3BhdGgsIG5ld19wYnhwcm9qX3BhdGgsIEZhbHNlKQotICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgIHJhaXNlCi0KLSAgICAgIGlmIHNhbWU6Ci0gICAgICAgICMgVGhlIG5ldyBmaWxlIGlzIGlkZW50aWNhbCB0byB0aGUgb2xkIG9uZSwganVzdCBnZXQgcmlkIG9mIHRoZSBuZXcKLSAgICAgICAgIyBvbmUuCi0gICAgICAgIG9zLnVubGluayhuZXdfcGJ4cHJval9wYXRoKQotICAgICAgZWxzZToKLSAgICAgICAgIyBUaGUgbmV3IGZpbGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9sZCBvbmUsIG9yIHRoZXJlIGlzIG5vIG9sZCBvbmUuCi0gICAgICAgICMgUmVuYW1lIHRoZSBuZXcgZmlsZSB0byB0aGUgcGVybWFuZW50IG5hbWUuCi0gICAgICAgICMKLSAgICAgICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIHVzZXMgYW4gb3Zlcmx5IHJlc3RyaWN0aXZlIG1vZGUsIHJlc3VsdGluZyBpbiBhCi0gICAgICAgICMgZmlsZSB0aGF0IGNhbiBvbmx5IGJlIHJlYWQgYnkgdGhlIG93bmVyLCByZWdhcmRsZXNzIG9mIHRoZSB1bWFzay4KLSAgICAgICAgIyBUaGVyZSdzIG5vIHJlYXNvbiB0byBub3QgcmVzcGVjdCB0aGUgdW1hc2sgaGVyZSwgd2hpY2ggbWVhbnMgdGhhdAotICAgICAgICAjIGFuIGV4dHJhIGhvb3AgaXMgcmVxdWlyZWQgdG8gZmV0Y2ggaXQgYW5kIHJlc2V0IHRoZSBuZXcgZmlsZSdzIG1vZGUuCi0gICAgICAgICMKLSAgICAgICAgIyBObyB3YXkgdG8gZ2V0IHRoZSB1bWFzayB3aXRob3V0IHNldHRpbmcgYSBuZXcgb25lPyAgU2V0IGEgc2FmZSBvbmUKLSAgICAgICAgIyBhbmQgdGhlbiBzZXQgaXQgYmFjayB0byB0aGUgb2xkIHZhbHVlLgotICAgICAgICB1bWFzayA9IG9zLnVtYXNrKDA3NykKLSAgICAgICAgb3MudW1hc2sodW1hc2spCi0KLSAgICAgICAgb3MuY2htb2QobmV3X3BieHByb2pfcGF0aCwgMDY2NiAmIH51bWFzaykKLSAgICAgICAgb3MucmVuYW1lKG5ld19wYnhwcm9qX3BhdGgsIHBieHByb2pfcGF0aCkKLQotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAjIERvbid0IGxlYXZlIHR1cmRzIGJlaGluZC4gIEluIGZhY3QsIGlmIHRoaXMgY29kZSB3YXMgcmVzcG9uc2libGUgZm9yCi0gICAgICAjIGNyZWF0aW5nIHRoZSB4Y29kZXByb2ogZGlyZWN0b3J5LCBnZXQgcmlkIG9mIHRoYXQgdG9vLgotICAgICAgb3MudW5saW5rKG5ld19wYnhwcm9qX3BhdGgpCi0gICAgICBpZiBzZWxmLmNyZWF0ZWRfZGlyOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYucGF0aCwgVHJ1ZSkKLSAgICAgIHJhaXNlCi0KLQotY2FjaGVkX3hjb2RlX3ZlcnNpb24gPSBOb25lCi1kZWYgSW5zdGFsbGVkWGNvZGVWZXJzaW9uKCk6Ci0gICIiIkZldGNoZXMgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFhjb2RlLCByZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBpdCBpcwotICB1bmFibGUgdG8gZmlndXJlIGl0IG91dC4iIiIKLQotICBnbG9iYWwgY2FjaGVkX3hjb2RlX3ZlcnNpb24KLSAgaWYgbm90IGNhY2hlZF94Y29kZV92ZXJzaW9uIGlzIE5vbmU6Ci0gICAgcmV0dXJuIGNhY2hlZF94Y29kZV92ZXJzaW9uCi0KLSAgIyBEZWZhdWx0IHRvIGFuIGVtcHR5IHN0cmluZwotICBjYWNoZWRfeGNvZGVfdmVyc2lvbiA9ICcnCi0KLSAgIyBDb2xsZWN0IHRoZSB4Y29kZWJ1aWxkJ3MgdmVyc2lvbiBpbmZvcm1hdGlvbi4KLSAgdHJ5OgotICAgIGltcG9ydCBzdWJwcm9jZXNzCi0gICAgY21kID0gWycvdXNyL2Jpbi94Y29kZWJ1aWxkJywgJy12ZXJzaW9uJ10KLSAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgeGNvZGVidWlsZF92ZXJzaW9uX2luZm8gPSBwcm9jLmNvbW11bmljYXRlKClbMF0KLSAgICAjIEFueSBlcnJvciwgcmV0dXJuIGVtcHR5IHN0cmluZwotICAgIGlmIHByb2MucmV0dXJuY29kZToKLSAgICAgIHhjb2RlYnVpbGRfdmVyc2lvbl9pbmZvID0gJycKLSAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgIyBXZSBmYWlsZWQgdG8gbGF1bmNoIHRoZSB0b29sCi0gICAgeGNvZGVidWlsZF92ZXJzaW9uX2luZm8gPSAnJwotCi0gICMgUHVsbCBvdXQgdGhlIFhjb2RlIHZlcnNpb24gaXRzZWxmLgotICBtYXRjaF9saW5lID0gcmUuc2VhcmNoKCdeWGNvZGUgKC4qKSQnLCB4Y29kZWJ1aWxkX3ZlcnNpb25faW5mbywgcmUuTVVMVElMSU5FKQotICBpZiBtYXRjaF9saW5lOgotICAgIGNhY2hlZF94Y29kZV92ZXJzaW9uID0gbWF0Y2hfbGluZS5ncm91cCgxKQotICAjIERvbmUhCi0gIHJldHVybiBjYWNoZWRfeGNvZGVfdmVyc2lvbgotCi0KLWRlZiBBZGRTb3VyY2VUb1RhcmdldChzb3VyY2UsIHR5cGUsIHBieHAsIHhjdCk6Ci0gICMgVE9ETyhtYXJrKTogUGVyaGFwcyBzb3VyY2VfZXh0ZW5zaW9ucyBhbmQgbGlicmFyeV9leHRlbnNpb25zIGNhbiBiZSBtYWRlIGEKLSAgIyBsaXR0bGUgYml0IGZhbmNpZXIuCi0gIHNvdXJjZV9leHRlbnNpb25zID0gWydjJywgJ2NjJywgJ2NwcCcsICdjeHgnLCAnbScsICdtbScsICdzJ10KLQotICAjIC5vIGlzIGNvbmNlcHR1YWxseSBtb3JlIG9mIGEgInNvdXJjZSIgdGhhbiBhICJsaWJyYXJ5LCIgYnV0IFhjb2RlIHRoaW5rcwotICAjIG9mICJzb3VyY2VzIiBhcyB0aGluZ3MgdG8gY29tcGlsZSBhbmQgImxpYnJhcmllcyIgKG9yICJmcmFtZXdvcmtzIikgYXMKLSAgIyB0aGluZ3MgdG8gbGluayB3aXRoLiBBZGRpbmcgYW4gb2JqZWN0IGZpbGUgdG8gYW4gWGNvZGUgdGFyZ2V0J3MgZnJhbWV3b3JrcwotICAjIHBoYXNlIHdvcmtzIHByb3Blcmx5LgotICBsaWJyYXJ5X2V4dGVuc2lvbnMgPSBbJ2EnLCAnZHlsaWInLCAnZnJhbWV3b3JrJywgJ28nXQotCi0gIGJhc2VuYW1lID0gcG9zaXhwYXRoLmJhc2VuYW1lKHNvdXJjZSkKLSAgKHJvb3QsIGV4dCkgPSBwb3NpeHBhdGguc3BsaXRleHQoYmFzZW5hbWUpCi0gIGlmIGV4dDoKLSAgICBleHQgPSBleHRbMTpdLmxvd2VyKCkKLQotICBpZiBleHQgaW4gc291cmNlX2V4dGVuc2lvbnMgYW5kIHR5cGUgIT0gJ25vbmUnOgotICAgIHhjdC5Tb3VyY2VzUGhhc2UoKS5BZGRGaWxlKHNvdXJjZSkKLSAgZWxpZiBleHQgaW4gbGlicmFyeV9leHRlbnNpb25zIGFuZCB0eXBlICE9ICdub25lJzoKLSAgICB4Y3QuRnJhbWV3b3Jrc1BoYXNlKCkuQWRkRmlsZShzb3VyY2UpCi0gIGVsc2U6Ci0gICAgIyBGaWxlcyB0aGF0IGFyZW4ndCBhZGRlZCB0byBhIHNvdXJjZXMgb3IgZnJhbWV3b3JrcyBidWlsZCBwaGFzZSBjYW4gc3RpbGwKLSAgICAjIGdvIGludG8gdGhlIHByb2plY3QgZmlsZSwganVzdCBub3QgYXMgcGFydCBvZiBhIGJ1aWxkIHBoYXNlLgotICAgIHBieHAuQWRkT3JHZXRGaWxlSW5Sb290R3JvdXAoc291cmNlKQotCi0KLWRlZiBBZGRSZXNvdXJjZVRvVGFyZ2V0KHJlc291cmNlLCBwYnhwLCB4Y3QpOgotICAjIFRPRE8obWFyayk6IENvbWJpbmUgd2l0aCBBZGRTb3VyY2VUb1RhcmdldCBhYm92ZT8gIE9yIGp1c3QgaW5saW5lIHRoaXMgY2FsbAotICAjIHdoZXJlIGl0J3MgdXNlZC4KLSAgeGN0LlJlc291cmNlc1BoYXNlKCkuQWRkRmlsZShyZXNvdXJjZSkKLQotCi1kZWYgQWRkSGVhZGVyVG9UYXJnZXQoaGVhZGVyLCBwYnhwLCB4Y3QsIGlzX3B1YmxpYyk6Ci0gICMgVE9ETyhtYXJrKTogQ29tYmluZSB3aXRoIEFkZFNvdXJjZVRvVGFyZ2V0IGFib3ZlPyAgT3IganVzdCBpbmxpbmUgdGhpcyBjYWxsCi0gICMgd2hlcmUgaXQncyB1c2VkLgotICBzZXR0aW5ncyA9ICd7QVRUUklCVVRFUyA9ICglcywgKTsgfScgJSAoJ1ByaXZhdGUnLCAnUHVibGljJylbaXNfcHVibGljXQotICB4Y3QuSGVhZGVyc1BoYXNlKCkuQWRkRmlsZShoZWFkZXIsIHNldHRpbmdzKQotCi0KLV94Y29kZV92YXJpYWJsZV9yZSA9IHJlLmNvbXBpbGUoJyhcJFwoKC4qPylcKSknKQotZGVmIEV4cGFuZFhjb2RlVmFyaWFibGVzKHN0cmluZywgZXhwYW5zaW9ucyk6Ci0gICIiIkV4cGFuZHMgWGNvZGUtc3R5bGUgJChWQVJJQUJMRVMpIGluIHN0cmluZyBwZXIgdGhlIGV4cGFuc2lvbnMgZGljdC4KLQotICBJbiBzb21lIHJhcmUgY2FzZXMsIGl0IGlzIGFwcHJvcHJpYXRlIHRvIGV4cGFuZCBYY29kZSB2YXJpYWJsZXMgd2hlbiBhCi0gIHByb2plY3QgZmlsZSBpcyBnZW5lcmF0ZWQuICBGb3IgYW55IHN1YnN0cmluZyAkKFZBUikgaW4gc3RyaW5nLCBpZiBWQVIgaXMgYQotICBrZXkgaW4gdGhlIGV4cGFuc2lvbnMgZGljdCwgJChWQVIpIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBleHBhbnNpb25zW1ZBUl0uCi0gIEFueSAkKFZBUikgc3Vic3RyaW5nIGluIHN0cmluZyBmb3Igd2hpY2ggVkFSIGlzIG5vdCBhIGtleSBpbiB0aGUgZXhwYW5zaW9ucwotICBkaWN0IHdpbGwgcmVtYWluIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCi0gICIiIgotCi0gIG1hdGNoZXMgPSBfeGNvZGVfdmFyaWFibGVfcmUuZmluZGFsbChzdHJpbmcpCi0gIGlmIG1hdGNoZXMgPT0gTm9uZToKLSAgICByZXR1cm4gc3RyaW5nCi0KLSAgbWF0Y2hlcy5yZXZlcnNlKCkKLSAgZm9yIG1hdGNoIGluIG1hdGNoZXM6Ci0gICAgKHRvX3JlcGxhY2UsIHZhcmlhYmxlKSA9IG1hdGNoCi0gICAgaWYgbm90IHZhcmlhYmxlIGluIGV4cGFuc2lvbnM6Ci0gICAgICBjb250aW51ZQotCi0gICAgcmVwbGFjZW1lbnQgPSBleHBhbnNpb25zW3ZhcmlhYmxlXQotICAgIHN0cmluZyA9IHJlLnN1YihyZS5lc2NhcGUodG9fcmVwbGFjZSksIHJlcGxhY2VtZW50LCBzdHJpbmcpCi0KLSAgcmV0dXJuIHN0cmluZwotCi0KLWRlZiBFc2NhcGVYQ29kZUFyZ3VtZW50KHMpOgotICAiIiJXZSBtdXN0IGVzY2FwZSB0aGUgYXJndW1lbnRzIHRoYXQgd2UgZ2l2ZSB0byBYQ29kZSBzbyB0aGF0IGl0IGtub3dzIG5vdCB0bwotICAgICBzcGxpdCBvbiBzcGFjZXMgYW5kIHRvIHJlc3BlY3QgYmFja3NsYXNoIGFuZCBxdW90ZSBsaXRlcmFscy4iIiIKLSAgcyA9IHMucmVwbGFjZSgnXFwnLCAnXFxcXCcpCi0gIHMgPSBzLnJlcGxhY2UoJyInLCAnXFwiJykKLSAgcmV0dXJuICciJyArIHMgKyAnIicKLQotCi0KLWRlZiBQZXJmb3JtQnVpbGQoZGF0YSwgY29uZmlndXJhdGlvbnMsIHBhcmFtcyk6Ci0gIG9wdGlvbnMgPSBwYXJhbXNbJ29wdGlvbnMnXQotCi0gIGZvciBidWlsZF9maWxlLCBidWlsZF9maWxlX2RpY3QgaW4gZGF0YS5pdGVyaXRlbXMoKToKLSAgICAoYnVpbGRfZmlsZV9yb290LCBidWlsZF9maWxlX2V4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGJ1aWxkX2ZpbGUpCi0gICAgaWYgYnVpbGRfZmlsZV9leHQgIT0gJy5neXAnOgotICAgICAgY29udGludWUKLSAgICB4Y29kZXByb2pfcGF0aCA9IGJ1aWxkX2ZpbGVfcm9vdCArIG9wdGlvbnMuc3VmZml4ICsgJy54Y29kZXByb2onCi0gICAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgICAgeGNvZGVwcm9qX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCB4Y29kZXByb2pfcGF0aCkKLQotICBmb3IgY29uZmlnIGluIGNvbmZpZ3VyYXRpb25zOgotICAgIGFyZ3VtZW50cyA9IFsneGNvZGVidWlsZCcsICctcHJvamVjdCcsIHhjb2RlcHJval9wYXRoXQotICAgIGFyZ3VtZW50cyArPSBbJy1jb25maWd1cmF0aW9uJywgY29uZmlnXQotICAgIHByaW50ICJCdWlsZGluZyBbJXNdOiAlcyIgJSAoY29uZmlnLCBhcmd1bWVudHMpCi0gICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3VtZW50cykKLQotCi1kZWYgR2VuZXJhdGVPdXRwdXQodGFyZ2V0X2xpc3QsIHRhcmdldF9kaWN0cywgZGF0YSwgcGFyYW1zKToKLSAgb3B0aW9ucyA9IHBhcmFtc1snb3B0aW9ucyddCi0gIGdlbmVyYXRvcl9mbGFncyA9IHBhcmFtcy5nZXQoJ2dlbmVyYXRvcl9mbGFncycsIHt9KQotICBwYXJhbGxlbF9idWlsZHMgPSBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCd4Y29kZV9wYXJhbGxlbF9idWlsZHMnLCBUcnVlKQotICBzZXJpYWxpemVfYWxsX3Rlc3RzID0gXAotICAgICAgZ2VuZXJhdG9yX2ZsYWdzLmdldCgneGNvZGVfc2VyaWFsaXplX2FsbF90ZXN0X3J1bnMnLCBUcnVlKQotICBwcm9qZWN0X3ZlcnNpb24gPSBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCd4Y29kZV9wcm9qZWN0X3ZlcnNpb24nLCBOb25lKQotICBza2lwX2V4Y2x1ZGVkX2ZpbGVzID0gXAotICAgICAgbm90IGdlbmVyYXRvcl9mbGFncy5nZXQoJ3hjb2RlX2xpc3RfZXhjbHVkZWRfZmlsZXMnLCBUcnVlKQotICB4Y29kZV9wcm9qZWN0cyA9IHt9Ci0gIGZvciBidWlsZF9maWxlLCBidWlsZF9maWxlX2RpY3QgaW4gZGF0YS5pdGVyaXRlbXMoKToKLSAgICAoYnVpbGRfZmlsZV9yb290LCBidWlsZF9maWxlX2V4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGJ1aWxkX2ZpbGUpCi0gICAgaWYgYnVpbGRfZmlsZV9leHQgIT0gJy5neXAnOgotICAgICAgY29udGludWUKLSAgICB4Y29kZXByb2pfcGF0aCA9IGJ1aWxkX2ZpbGVfcm9vdCArIG9wdGlvbnMuc3VmZml4ICsgJy54Y29kZXByb2onCi0gICAgaWYgb3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0OgotICAgICAgeGNvZGVwcm9qX3BhdGggPSBvcy5wYXRoLmpvaW4ob3B0aW9ucy5nZW5lcmF0b3Jfb3V0cHV0LCB4Y29kZXByb2pfcGF0aCkKLSAgICB4Y3AgPSBYY29kZVByb2plY3QoYnVpbGRfZmlsZSwgeGNvZGVwcm9qX3BhdGgsIGJ1aWxkX2ZpbGVfZGljdCkKLSAgICB4Y29kZV9wcm9qZWN0c1tidWlsZF9maWxlXSA9IHhjcAotICAgIHBieHAgPSB4Y3AucHJvamVjdAotCi0gICAgaWYgcGFyYWxsZWxfYnVpbGRzOgotICAgICAgcGJ4cC5TZXRQcm9wZXJ0eSgnYXR0cmlidXRlcycsCi0gICAgICAgICAgICAgICAgICAgICAgIHsnQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsJzogJ1lFUyd9KQotICAgIGlmIHByb2plY3RfdmVyc2lvbjoKLSAgICAgIHhjcC5wcm9qZWN0X2ZpbGUuU2V0WGNvZGVWZXJzaW9uKHByb2plY3RfdmVyc2lvbikKLQotICAgICMgQWRkIGd5cC9neXBpIGZpbGVzIHRvIHByb2plY3QKLSAgICBpZiBub3QgZ2VuZXJhdG9yX2ZsYWdzLmdldCgnc3RhbmRhbG9uZScpOgotICAgICAgbWFpbl9ncm91cCA9IHBieHAuR2V0UHJvcGVydHkoJ21haW5Hcm91cCcpCi0gICAgICBidWlsZF9ncm91cCA9IGd5cC54Y29kZXByb2pfZmlsZS5QQlhHcm91cCh7J25hbWUnOiAnQnVpbGQnfSkKLSAgICAgIG1haW5fZ3JvdXAuQXBwZW5kQ2hpbGQoYnVpbGRfZ3JvdXApCi0gICAgICBmb3IgaW5jbHVkZWRfZmlsZSBpbiBidWlsZF9maWxlX2RpY3RbJ2luY2x1ZGVkX2ZpbGVzJ106Ci0gICAgICAgIGJ1aWxkX2dyb3VwLkFkZE9yR2V0RmlsZUJ5UGF0aChpbmNsdWRlZF9maWxlLCBGYWxzZSkKLQotICB4Y29kZV90YXJnZXRzID0ge30KLSAgeGNvZGVfdGFyZ2V0X3RvX3RhcmdldF9kaWN0ID0ge30KLSAgZm9yIHF1YWxpZmllZF90YXJnZXQgaW4gdGFyZ2V0X2xpc3Q6Ci0gICAgW2J1aWxkX2ZpbGUsIHRhcmdldF9uYW1lLCB0b29sc2V0XSA9IFwKLSAgICAgICAgZ3lwLmNvbW1vbi5QYXJzZVF1YWxpZmllZFRhcmdldChxdWFsaWZpZWRfdGFyZ2V0KQotCi0gICAgc3BlYyA9IHRhcmdldF9kaWN0c1txdWFsaWZpZWRfdGFyZ2V0XQotICAgIGlmIHNwZWNbJ3Rvb2xzZXQnXSAhPSAndGFyZ2V0JzoKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigKLSAgICAgICAgICAnTXVsdGlwbGUgdG9vbHNldHMgbm90IHN1cHBvcnRlZCBpbiB4Y29kZSBidWlsZCAodGFyZ2V0ICVzKScgJQotICAgICAgICAgIHF1YWxpZmllZF90YXJnZXQpCi0gICAgY29uZmlndXJhdGlvbl9uYW1lcyA9IFtzcGVjWydkZWZhdWx0X2NvbmZpZ3VyYXRpb24nXV0KLSAgICBmb3IgY29uZmlndXJhdGlvbl9uYW1lIGluIHNvcnRlZChzcGVjWydjb25maWd1cmF0aW9ucyddLmtleXMoKSk6Ci0gICAgICBpZiBjb25maWd1cmF0aW9uX25hbWUgbm90IGluIGNvbmZpZ3VyYXRpb25fbmFtZXM6Ci0gICAgICAgIGNvbmZpZ3VyYXRpb25fbmFtZXMuYXBwZW5kKGNvbmZpZ3VyYXRpb25fbmFtZSkKLSAgICB4Y3AgPSB4Y29kZV9wcm9qZWN0c1tidWlsZF9maWxlXQotICAgIHBieHAgPSB4Y3AucHJvamVjdAotCi0gICAgIyBTZXQgdXAgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byB0aGUgbGlzdCBvZiBuYW1lcwotICAgICMgc3VwcGxpZWQuCi0gICAgeGNjbCA9IENyZWF0ZVhDQ29uZmlndXJhdGlvbkxpc3QoY29uZmlndXJhdGlvbl9uYW1lcykKLQotICAgICMgQ3JlYXRlIGFuIFhDVGFyZ2V0IHN1YmNsYXNzIG9iamVjdCBmb3IgdGhlIHRhcmdldC4gVGhlIHR5cGUgd2l0aAotICAgICMgIitidW5kbGUiIGFwcGVuZGVkIHdpbGwgYmUgdXNlZCBpZiB0aGUgdGFyZ2V0IGhhcyAibWFjX2J1bmRsZSIgc2V0LgotICAgICMgbG9hZGFibGVfbW9kdWxlcyBub3QgaW4gYSBtYWNfYnVuZGxlIGFyZSBtYXBwZWQgdG8KLSAgICAjIGNvbS5nb29nbGVjb2RlLmd5cC54Y29kZS5idW5kbGUsIGEgcHNldWRvLXR5cGUgdGhhdCB4Y29kZS5weSBpbnRlcnByZXRzCi0gICAgIyB0byBjcmVhdGUgYSBzaW5nbGUtZmlsZSBtaF9idW5kbGUuCi0gICAgX3R5cGVzID0gewotICAgICAgJ2V4ZWN1dGFibGUnOiAgICAgICAgICAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sJywKLSAgICAgICdsb2FkYWJsZV9tb2R1bGUnOiAgICAgICAgJ2NvbS5nb29nbGVjb2RlLmd5cC54Y29kZS5idW5kbGUnLAotICAgICAgJ3NoYXJlZF9saWJyYXJ5JzogICAgICAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFtaWMnLAotICAgICAgJ3N0YXRpY19saWJyYXJ5JzogICAgICAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYycsCi0gICAgICAnZXhlY3V0YWJsZStidW5kbGUnOiAgICAgICdjb20uYXBwbGUucHJvZHVjdC10eXBlLmFwcGxpY2F0aW9uJywKLSAgICAgICdsb2FkYWJsZV9tb2R1bGUrYnVuZGxlJzogJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlJywKLSAgICAgICdzaGFyZWRfbGlicmFyeStidW5kbGUnOiAgJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUuZnJhbWV3b3JrJywKLSAgICB9Ci0KLSAgICB0YXJnZXRfcHJvcGVydGllcyA9IHsKLSAgICAgICdidWlsZENvbmZpZ3VyYXRpb25MaXN0JzogeGNjbCwKLSAgICAgICduYW1lJzogICAgICAgICAgICAgICAgICAgdGFyZ2V0X25hbWUsCi0gICAgfQotCi0gICAgdHlwZSA9IHNwZWNbJ3R5cGUnXQotICAgIGlzX2J1bmRsZSA9IGludChzcGVjLmdldCgnbWFjX2J1bmRsZScsIDApKQotICAgIGlmIHR5cGUgIT0gJ25vbmUnOgotICAgICAgdHlwZV9idW5kbGVfa2V5ID0gdHlwZQotICAgICAgaWYgaXNfYnVuZGxlOgotICAgICAgICB0eXBlX2J1bmRsZV9rZXkgKz0gJytidW5kbGUnCi0gICAgICB4Y3RhcmdldF90eXBlID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWE5hdGl2ZVRhcmdldAotICAgICAgdHJ5OgotICAgICAgICB0YXJnZXRfcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSA9IF90eXBlc1t0eXBlX2J1bmRsZV9rZXldCi0gICAgICBleGNlcHQgS2V5RXJyb3IsIGU6Ci0gICAgICAgIGd5cC5jb21tb24uRXhjZXB0aW9uQXBwZW5kKGUsICItLSB1bmtub3duIHByb2R1Y3QgdHlwZSB3aGlsZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0aW5nIHRhcmdldCAlcyIgJSB0YXJnZXRfbmFtZSkKLSAgICAgICAgcmFpc2UKLSAgICBlbHNlOgotICAgICAgeGN0YXJnZXRfdHlwZSA9IGd5cC54Y29kZXByb2pfZmlsZS5QQlhBZ2dyZWdhdGVUYXJnZXQKLSAgICAgIGFzc2VydCBub3QgaXNfYnVuZGxlLCAoCi0gICAgICAgICAgJ21hY19idW5kbGUgdGFyZ2V0cyBjYW5ub3QgaGF2ZSB0eXBlIG5vbmUgKHRhcmdldCAiJXMiKScgJQotICAgICAgICAgIHRhcmdldF9uYW1lKQotCi0gICAgdGFyZ2V0X3Byb2R1Y3RfbmFtZSA9IHNwZWMuZ2V0KCdwcm9kdWN0X25hbWUnKQotICAgIGlmIHRhcmdldF9wcm9kdWN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICB0YXJnZXRfcHJvcGVydGllc1sncHJvZHVjdE5hbWUnXSA9IHRhcmdldF9wcm9kdWN0X25hbWUKLQotICAgIHhjdCA9IHhjdGFyZ2V0X3R5cGUodGFyZ2V0X3Byb3BlcnRpZXMsIHBhcmVudD1wYnhwLAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfb3V0ZGlyPXNwZWMuZ2V0KCdwcm9kdWN0X2RpcicpLAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfcHJlZml4PXNwZWMuZ2V0KCdwcm9kdWN0X3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfZXh0ZW5zaW9uPXNwZWMuZ2V0KCdwcm9kdWN0X2V4dGVuc2lvbicpKQotICAgIHBieHAuQXBwZW5kUHJvcGVydHkoJ3RhcmdldHMnLCB4Y3QpCi0gICAgeGNvZGVfdGFyZ2V0c1txdWFsaWZpZWRfdGFyZ2V0XSA9IHhjdAotICAgIHhjb2RlX3RhcmdldF90b190YXJnZXRfZGljdFt4Y3RdID0gc3BlYwotCi0gICAgc3BlY19hY3Rpb25zID0gc3BlYy5nZXQoJ2FjdGlvbnMnLCBbXSkKLSAgICBzcGVjX3J1bGVzID0gc3BlYy5nZXQoJ3J1bGVzJywgW10pCi0KLSAgICAjIFhjb2RlIGhhcyBzb21lICJpc3N1ZXMiIHdpdGggY2hlY2tpbmcgZGVwZW5kZW5jaWVzIGZvciB0aGUgIkNvbXBpbGUKLSAgICAjIHNvdXJjZXMiIHN0ZXAgd2l0aCBhbnkgc291cmNlIGZpbGVzL2hlYWRlcnMgZ2VuZXJhdGVkIGJ5IGFjdGlvbnMvcnVsZXMuCi0gICAgIyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpZiBhIHRhcmdldCBpcyBidWlsZGluZyBhbnl0aGluZyBkaXJlY3RseSAobm90Ci0gICAgIyB0eXBlICJub25lIiksIHRoZW4gYSBzZWNvbmQgdGFyZ2V0IGlzIHVzZWQgdG8gcnVuIHRoZSBHWVAgYWN0aW9ucy9ydWxlcwotICAgICMgYW5kIGlzIG1hZGUgYSBkZXBlbmRlbmN5IG9mIHRoaXMgdGFyZ2V0LiAgVGhpcyB3YXkgdGhlIHdvcmsgaXMgZG9uZQotICAgICMgYmVmb3JlIHRoZSBkZXBlbmRlbmN5IGNoZWNrcyBmb3Igd2hhdCBzaG91bGQgYmUgcmVjb21waWxlZC4KLSAgICBzdXBwb3J0X3hjdCA9IE5vbmUKLSAgICBpZiB0eXBlICE9ICdub25lJyBhbmQgKHNwZWNfYWN0aW9ucyBvciBzcGVjX3J1bGVzKToKLSAgICAgIHN1cHBvcnRfeGNjbCA9IENyZWF0ZVhDQ29uZmlndXJhdGlvbkxpc3QoY29uZmlndXJhdGlvbl9uYW1lcyk7Ci0gICAgICBzdXBwb3J0X3RhcmdldF9wcm9wZXJ0aWVzID0gewotICAgICAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IHN1cHBvcnRfeGNjbCwKLSAgICAgICAgJ25hbWUnOiAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSArICcgU3VwcG9ydCcsCi0gICAgICB9Ci0gICAgICBpZiB0YXJnZXRfcHJvZHVjdF9uYW1lOgotICAgICAgICBzdXBwb3J0X3RhcmdldF9wcm9wZXJ0aWVzWydwcm9kdWN0TmFtZSddID0gXAotICAgICAgICAgICAgdGFyZ2V0X3Byb2R1Y3RfbmFtZSArICcgU3VwcG9ydCcKLSAgICAgIHN1cHBvcnRfeGN0ID0gXAotICAgICAgICAgIGd5cC54Y29kZXByb2pfZmlsZS5QQlhBZ2dyZWdhdGVUYXJnZXQoc3VwcG9ydF90YXJnZXRfcHJvcGVydGllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1wYnhwKQotICAgICAgcGJ4cC5BcHBlbmRQcm9wZXJ0eSgndGFyZ2V0cycsIHN1cHBvcnRfeGN0KQotICAgICAgeGN0LkFkZERlcGVuZGVuY3koc3VwcG9ydF94Y3QpCi0gICAgIyBIYW5nIHRoZSBzdXBwb3J0IHRhcmdldCBvZmYgdGhlIG1haW4gdGFyZ2V0IHNvIGl0IGNhbiBiZSB0ZXN0ZWQvZm91bmQKLSAgICAjIGJ5IHRoZSBnZW5lcmF0b3IgZHVyaW5nIEZpbmFsaXplLgotICAgIHhjdC5zdXBwb3J0X3RhcmdldCA9IHN1cHBvcnRfeGN0Ci0KLSAgICBwcmVidWlsZF9pbmRleCA9IDAKLQotICAgICMgQWRkIGN1c3RvbSBzaGVsbCBzY3JpcHQgcGhhc2VzIGZvciAiYWN0aW9ucyIgc2VjdGlvbnMuCi0gICAgZm9yIGFjdGlvbiBpbiBzcGVjX2FjdGlvbnM6Ci0gICAgICAjIFRoZXJlJ3Mgbm8gbmVlZCB0byB3cml0ZSBhbnl0aGluZyBpbnRvIHRoZSBzY3JpcHQgdG8gZW5zdXJlIHRoYXQgdGhlCi0gICAgICAjIG91dHB1dCBkaXJlY3RvcmllcyBhbHJlYWR5IGV4aXN0LCBiZWNhdXNlIFhjb2RlIHdpbGwgbG9vayBhdCB0aGUKLSAgICAgICMgZGVjbGFyZWQgb3V0cHV0cyBhbmQgYXV0b21hdGljYWxseSBlbnN1cmUgdGhhdCB0aGV5IGV4aXN0IGZvciB1cy4KLQotICAgICAgIyBEbyB3ZSBoYXZlIGEgbWVzc2FnZSB0byBwcmludCB3aGVuIHRoaXMgYWN0aW9uIHJ1bnM/Ci0gICAgICBtZXNzYWdlID0gYWN0aW9uLmdldCgnbWVzc2FnZScpCi0gICAgICBpZiBtZXNzYWdlOgotICAgICAgICBtZXNzYWdlID0gJ2VjaG8gbm90ZTogJyArIGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbEFyZ3VtZW50KG1lc3NhZ2UpCi0gICAgICBlbHNlOgotICAgICAgICBtZXNzYWdlID0gJycKLQotICAgICAgIyBUdXJuIHRoZSBsaXN0IGludG8gYSBzdHJpbmcgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgc2hlbGwuCi0gICAgICBhY3Rpb25fc3RyaW5nID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChhY3Rpb25bJ2FjdGlvbiddKQotCi0gICAgICAjIENvbnZlcnQgWGNvZGUtdHlwZSB2YXJpYWJsZSByZWZlcmVuY2VzIHRvIHNoLWNvbXBhdGlibGUgZW52aXJvbm1lbnQKLSAgICAgICMgdmFyaWFibGUgcmVmZXJlbmNlcy4KLSAgICAgIG1lc3NhZ2Vfc2ggPSBneXAueGNvZGVwcm9qX2ZpbGUuQ29udmVydFZhcmlhYmxlc1RvU2hlbGxTeW50YXgobWVzc2FnZSkKLSAgICAgIGFjdGlvbl9zdHJpbmdfc2ggPSBneXAueGNvZGVwcm9qX2ZpbGUuQ29udmVydFZhcmlhYmxlc1RvU2hlbGxTeW50YXgoCi0gICAgICAgIGFjdGlvbl9zdHJpbmcpCi0KLSAgICAgIHNjcmlwdCA9ICcnCi0gICAgICAjIEluY2x1ZGUgdGhlIG9wdGlvbmFsIG1lc3NhZ2UKLSAgICAgIGlmIG1lc3NhZ2Vfc2g6Ci0gICAgICAgIHNjcmlwdCArPSBtZXNzYWdlX3NoICsgJ1xuJwotICAgICAgIyBCZSBzdXJlIHRoZSBzY3JpcHQgcnVucyBpbiBleGVjLCBhbmQgdGhhdCBpZiBleGVjIGZhaWxzLCB0aGUgc2NyaXB0Ci0gICAgICAjIGV4aXRzIHNpZ25hbGxpbmcgYW4gZXJyb3IuCi0gICAgICBzY3JpcHQgKz0gJ2V4ZWMgJyArIGFjdGlvbl9zdHJpbmdfc2ggKyAnXG5leGl0IDFcbicKLSAgICAgIHNzYnAgPSBneXAueGNvZGVwcm9qX2ZpbGUuUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlKHsKLSAgICAgICAgICAgICdpbnB1dFBhdGhzJzogYWN0aW9uWydpbnB1dHMnXSwKLSAgICAgICAgICAgICduYW1lJzogJ0FjdGlvbiAiJyArIGFjdGlvblsnYWN0aW9uX25hbWUnXSArICciJywKLSAgICAgICAgICAgICdvdXRwdXRQYXRocyc6IGFjdGlvblsnb3V0cHV0cyddLAotICAgICAgICAgICAgJ3NoZWxsU2NyaXB0Jzogc2NyaXB0LAotICAgICAgICAgICAgJ3Nob3dFbnZWYXJzSW5Mb2cnOiAwLAotICAgICAgICAgIH0pCi0KLSAgICAgIGlmIHN1cHBvcnRfeGN0OgotICAgICAgICBzdXBwb3J0X3hjdC5BcHBlbmRQcm9wZXJ0eSgnYnVpbGRQaGFzZXMnLCBzc2JwKQotICAgICAgZWxzZToKLSAgICAgICAgIyBUT0RPKG1hcmspOiB0aGlzIGFzc3VtZXMgdG9vIG11Y2gga25vd2xlZGdlIG9mIHRoZSBpbnRlcm5hbHMgb2YKLSAgICAgICAgIyB4Y29kZXByb2pfZmlsZTsgc29tZSBvZiB0aGVzZSBzbWFydHMgc2hvdWxkIG1vdmUgaW50byB4Y29kZXByb2pfZmlsZQotICAgICAgICAjIGl0c2VsZi4KLSAgICAgICAgeGN0Ll9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddLmluc2VydChwcmVidWlsZF9pbmRleCwgc3NicCkKLSAgICAgICAgcHJlYnVpbGRfaW5kZXggPSBwcmVidWlsZF9pbmRleCArIDEKLQotICAgICAgIyBUT0RPKG1hcmspOiBTaG91bGQgdmVyaWZ5IHRoYXQgYXQgbW9zdCBvbmUgb2YgdGhlc2UgaXMgc3BlY2lmaWVkLgotICAgICAgaWYgaW50KGFjdGlvbi5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19zb3VyY2VzJywgRmFsc2UpKToKLSAgICAgICAgZm9yIG91dHB1dCBpbiBhY3Rpb25bJ291dHB1dHMnXToKLSAgICAgICAgICBBZGRTb3VyY2VUb1RhcmdldChvdXRwdXQsIHR5cGUsIHBieHAsIHhjdCkKLQotICAgICAgaWYgaW50KGFjdGlvbi5nZXQoJ3Byb2Nlc3Nfb3V0cHV0c19hc19tYWNfYnVuZGxlX3Jlc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgIGZvciBvdXRwdXQgaW4gYWN0aW9uWydvdXRwdXRzJ106Ci0gICAgICAgICAgQWRkUmVzb3VyY2VUb1RhcmdldChvdXRwdXQsIHBieHAsIHhjdCkKLQotICAgICMgdGd0X21hY19idW5kbGVfcmVzb3VyY2VzIGhvbGRzIHRoZSBsaXN0IG9mIGJ1bmRsZSByZXNvdXJjZXMgc28KLSAgICAjIHRoZSBydWxlIHByb2Nlc3NpbmcgY2FuIGNoZWNrIGFnYWluc3QgaXQuCi0gICAgaWYgaXNfYnVuZGxlOgotICAgICAgdGd0X21hY19idW5kbGVfcmVzb3VyY2VzID0gc3BlYy5nZXQoJ21hY19idW5kbGVfcmVzb3VyY2VzJywgW10pCi0gICAgZWxzZToKLSAgICAgIHRndF9tYWNfYnVuZGxlX3Jlc291cmNlcyA9IFtdCi0KLSAgICAjIEFkZCBjdXN0b20gc2hlbGwgc2NyaXB0IHBoYXNlcyBkcml2aW5nICJtYWtlIiBmb3IgInJ1bGVzIiBzZWN0aW9ucy4KLSAgICAjCi0gICAgIyBYY29kZSdzIGJ1aWx0LWluIHJ1bGUgc3VwcG9ydCBpcyBhbG1vc3QgcG93ZXJmdWwgZW5vdWdoIHRvIHVzZSBkaXJlY3RseSwKLSAgICAjIGJ1dCB0aGVyZSBhcmUgYSBmZXcgc2lnbmlmaWNhbnQgZGVmaWNpZW5jaWVzIHRoYXQgcmVuZGVyIHRoZW0gdW51c2FibGUuCi0gICAgIyBUaGVyZSBhcmUgd29ya2Fyb3VuZHMgZm9yIHNvbWUgb2YgaXRzIGluYWRlcXVhY2llcywgYnV0IGluIGFnZ3JlZ2F0ZSwKLSAgICAjIHRoZSB3b3JrYXJvdW5kcyBhZGRlZCBjb21wbGV4aXR5IHRvIHRoZSBnZW5lcmF0b3IsIGFuZCBzb21lIHdvcmthcm91bmRzCi0gICAgIyBhY3R1YWxseSByZXF1aXJlIGlucHV0IGZpbGVzIHRvIGJlIGNyYWZ0ZWQgbW9yZSBjYXJlZnVsbHkgdGhhbiBJJ2QgbGlrZS4KLSAgICAjIENvbnNlcXVlbnRseSwgdW50aWwgWGNvZGUgcnVsZXMgYXJlIG1hZGUgbW9yZSBjYXBhYmxlLCAicnVsZXMiIGlucHV0Ci0gICAgIyBzZWN0aW9ucyB3aWxsIGJlIGhhbmRsZWQgaW4gWGNvZGUgb3V0cHV0IGJ5IHNoZWxsIHNjcmlwdCBidWlsZCBwaGFzZXMKLSAgICAjIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgY29tcGlsYXRpb24gcGhhc2UuCi0gICAgIwotICAgICMgVGhlIGZvbGxvd2luZyBwcm9ibGVtcyB3aXRoIFhjb2RlIHJ1bGVzIHdlcmUgZm91bmQuICBUaGUgbnVtYmVycyBhcmUKLSAgICAjIEFwcGxlIHJhZGFyIElEcy4gIEkgaG9wZSB0aGF0IHRoZXNlIHNob3J0Y29taW5ncyBhcmUgYWRkcmVzc2VkLCBJIHJlYWxseQotICAgICMgbGlrZWQgaGF2aW5nIHRoZSBydWxlcyBoYW5kbGVkIGRpcmVjdGx5IGluIFhjb2RlIGR1cmluZyB0aGUgcGVyaW9kIHRoYXQKLSAgICAjIEkgd2FzIHByb3RvdHlwaW5nIHRoaXMuCi0gICAgIwotICAgICMgNjU4ODYwMCBYY29kZSBjb21waWxlcyBjdXN0b20gc2NyaXB0IHJ1bGUgb3V0cHV0cyB0b28gc29vbiwgY29tcGlsYXRpb24KLSAgICAjICAgICAgICAgZmFpbHMuICBUaGlzIG9jY3VycyB3aGVuIHJ1bGUgb3V0cHV0cyBmcm9tIGRpc3RpbmN0IGlucHV0cyBhcmUKLSAgICAjICAgICAgICAgaW50ZXJkZXBlbmRlbnQuICBUaGUgb25seSB3b3JrYXJvdW5kIGlzIHRvIHB1dCBydWxlcyBhbmQgdGhlaXIKLSAgICAjICAgICAgICAgaW5wdXRzIGluIGEgc2VwYXJhdGUgdGFyZ2V0IGZyb20gdGhlIG9uZSB0aGF0IGNvbXBpbGVzIHRoZSBydWxlCi0gICAgIyAgICAgICAgIG91dHB1dHMuICBUaGlzIHJlcXVpcmVzIGlucHV0IGZpbGUgY29vcGVyYXRpb24gYW5kIGl0IG1lYW5zIHRoYXQKLSAgICAjICAgICAgICAgcHJvY2Vzc19vdXRwdXRzX2FzX3NvdXJjZXMgaXMgdW51c2FibGUuCi0gICAgIyA2NTg0OTMyIE5lZWQgdG8gZGVjbGFyZSB0aGF0IGN1c3RvbSBydWxlIG91dHB1dHMgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20KLSAgICAjICAgICAgICAgY29tcGlsYXRpb24uICBBIHBvc3NpYmxlIHdvcmthcm91bmQgaXMgdG8gbGllIHRvIFhjb2RlIGFib3V0IGEKLSAgICAjICAgICAgICAgcnVsZSdzIG91dHB1dCwgZ2l2aW5nIGl0IGEgZHVtbXkgZmlsZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvCi0gICAgIyAgICAgICAgIGNvbXBpbGUuICBUaGUgcnVsZSBhY3Rpb24gc2NyaXB0IHdvdWxkIG5lZWQgdG8gdG91Y2ggdGhlIGR1bW15LgotICAgICMgNjU4NDgzOSBJIG5lZWQgYSB3YXkgdG8gZGVjbGFyZSBhZGRpdGlvbmFsIGlucHV0cyB0byBhIGN1c3RvbSBydWxlLgotICAgICMgICAgICAgICBBIHBvc3NpYmxlIHdvcmthcm91bmQgaXMgYSBzaGVsbCBzY3JpcHQgcGhhc2UgcHJpb3IgdG8KLSAgICAjICAgICAgICAgY29tcGlsYXRpb24gdGhhdCB0b3VjaGVzIGEgcnVsZSdzIHByaW1hcnkgaW5wdXQgZmlsZXMgaWYgYW55Ci0gICAgIyAgICAgICAgIHdvdWxkLWJlIGFkZGl0aW9uYWwgaW5wdXRzIGFyZSBuZXdlciB0aGFuIHRoZSBvdXRwdXQuICBNb2RpZnlpbmcKLSAgICAjICAgICAgICAgdGhlIHNvdXJjZSB0cmVlIC0gZXZlbiBqdXN0IG1vZGlmaWNhdGlvbiB0aW1lcyAtIGZlZWxzIGRpcnR5LgotICAgICMgNjU2NDI0MCBYY29kZSAiY3VzdG9tIHNjcmlwdCIgYnVpbGQgcnVsZXMgYWx3YXlzIGR1bXAgYWxsIGVudmlyb25tZW50Ci0gICAgIyAgICAgICAgIHZhcmlhYmxlcy4gIFRoaXMgaXMgYSBsb3ctcHJpb3JvdHkgcHJvYmxlbSBhbmQgaXMgbm90IGEKLSAgICAjICAgICAgICAgc2hvdy1zdG9wcGVyLgotICAgIHJ1bGVzX2J5X2V4dCA9IHt9Ci0gICAgZm9yIHJ1bGUgaW4gc3BlY19ydWxlczoKLSAgICAgIHJ1bGVzX2J5X2V4dFtydWxlWydleHRlbnNpb24nXV0gPSBydWxlCi0KLSAgICAgICMgRmlyc3QsIHNvbWUgZGVmaW5pdGlvbnM6Ci0gICAgICAjCi0gICAgICAjIEEgInJ1bGUgc291cmNlIiBpcyBhIGZpbGUgdGhhdCB3YXMgbGlzdGVkIGluIGEgdGFyZ2V0J3MgInNvdXJjZXMiCi0gICAgICAjIGxpc3QgYW5kIHdpbGwgaGF2ZSBhIHJ1bGUgYXBwbGllZCB0byBpdCBvbiB0aGUgYmFzaXMgb2YgbWF0Y2hpbmcgdGhlCi0gICAgICAjIHJ1bGUncyAiZXh0ZW5zaW9ucyIgYXR0cmlidXRlLiAgUnVsZSBzb3VyY2VzIGFyZSBkaXJlY3QgaW5wdXRzIHRvCi0gICAgICAjIHJ1bGVzLgotICAgICAgIwotICAgICAgIyBSdWxlIGRlZmluaXRpb25zIG1heSBzcGVjaWZ5IGFkZGl0aW9uYWwgaW5wdXRzIGluIHRoZWlyICJpbnB1dHMiCi0gICAgICAjIGF0dHJpYnV0ZS4gIFRoZXNlIGFkZGl0aW9uYWwgaW5wdXRzIGFyZSB1c2VkIGZvciBkZXBlbmRlbmN5IHRyYWNraW5nCi0gICAgICAjIHB1cnBvc2VzLgotICAgICAgIwotICAgICAgIyBBICJjb25jcmV0ZSBvdXRwdXQiIGlzIGEgcnVsZSBvdXRwdXQgd2l0aCBpbnB1dC1kZXBlbmRlbnQgdmFyaWFibGVzCi0gICAgICAjIHJlc29sdmVkLiAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgcnVsZSB3aXRoOgotICAgICAgIyAgICdleHRlbnNpb24nOiAnZXh0JywgJ291dHB1dHMnOiBbJyQoSU5QVVRfRklMRV9CQVNFKS5jYyddLAotICAgICAgIyBpZiB0aGUgdGFyZ2V0J3MgInNvdXJjZXMiIGxpc3QgY29udGFpbmVkICJvbmUuZXh0IiBhbmQgInR3by5leHQiLAotICAgICAgIyB0aGUgImNvbmNyZXRlIG91dHB1dCIgZm9yIHJ1bGUgaW5wdXQgInR3by5leHQiIHdvdWxkIGJlICJ0d28uY2MiLiAgSWYKLSAgICAgICMgYSBydWxlIHNwZWNpZmllcyBtdWx0aXBsZSBvdXRwdXRzLCBlYWNoIGlucHV0IGZpbGUgdGhhdCB0aGUgcnVsZSBpcwotICAgICAgIyBhcHBsaWVkIHRvIHdpbGwgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgY29uY3JldGUgb3V0cHV0cy4KLSAgICAgICMKLSAgICAgICMgSWYgYW55IGNvbmNyZXRlIG91dHB1dHMgYXJlIG91dGRhdGVkIG9yIG1pc3NpbmcgcmVsYXRpdmUgdG8gdGhlaXIKLSAgICAgICMgY29ycmVzcG9uZGluZyBydWxlX3NvdXJjZSBvciB0byBhbnkgc3BlY2lmaWVkIGFkZGl0aW9uYWwgaW5wdXQsIHRoZQotICAgICAgIyBydWxlIGFjdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCB0byBnZW5lcmF0ZSB0aGUgY29uY3JldGUgb3V0cHV0cy4KLQotICAgICAgIyBjb25jcmV0ZV9vdXRwdXRzX2J5X3J1bGVfc291cmNlIHdpbGwgaGF2ZSBhbiBpdGVtIGF0IHRoZSBzYW1lIGluZGV4Ci0gICAgICAjIGFzIHRoZSBydWxlWydydWxlX3NvdXJjZXMnXSB0aGF0IGl0IGNvcnJlc3BvbmRzIHRvLiAgRWFjaCBpdGVtIGlzIGEKLSAgICAgICMgbGlzdCBvZiBhbGwgb2YgdGhlIGNvbmNyZXRlIG91dHB1dHMgZm9yIHRoZSBydWxlX3NvdXJjZS4KLSAgICAgIGNvbmNyZXRlX291dHB1dHNfYnlfcnVsZV9zb3VyY2UgPSBbXQotCi0gICAgICAjIGNvbmNyZXRlX291dHB1dHNfYWxsIGlzIGEgZmxhdCBsaXN0IG9mIGFsbCBjb25jcmV0ZSBvdXRwdXRzIHRoYXQgdGhpcwotICAgICAgIyBydWxlIGlzIGFibGUgdG8gcHJvZHVjZSwgZ2l2ZW4gdGhlIGtub3duIHNldCBvZiBpbnB1dCBmaWxlcwotICAgICAgIyAocnVsZV9zb3VyY2VzKSB0aGF0IGFwcGx5IHRvIGl0LgotICAgICAgY29uY3JldGVfb3V0cHV0c19hbGwgPSBbXQotCi0gICAgICAjIG1lc3NhZ2VzICYgYWN0aW9ucyBhcmUga2V5ZWQgYnkgdGhlIHNhbWUgaW5kaWNlcyBhcyBydWxlWydydWxlX3NvdXJjZXMnXQotICAgICAgIyBhbmQgY29uY3JldGVfb3V0cHV0c19ieV9ydWxlX3NvdXJjZS4gIFRoZXkgY29udGFpbiB0aGUgbWVzc2FnZSBhbmQKLSAgICAgICMgYWN0aW9uIHRvIHBlcmZvcm0gYWZ0ZXIgcmVzb2x2aW5nIGlucHV0LWRlcGVuZGVudCB2YXJpYWJsZXMuICBUaGUKLSAgICAgICMgbWVzc2FnZSBpcyBvcHRpb25hbCwgaW4gd2hpY2ggY2FzZSBOb25lIGlzIHN0b3JlZCBmb3IgZWFjaCBydWxlIHNvdXJjZS4KLSAgICAgIG1lc3NhZ2VzID0gW10KLSAgICAgIGFjdGlvbnMgPSBbXQotCi0gICAgICBmb3IgcnVsZV9zb3VyY2UgaW4gcnVsZS5nZXQoJ3J1bGVfc291cmNlcycsIFtdKToKLSAgICAgICAgcnVsZV9zb3VyY2VfZGlybmFtZSwgcnVsZV9zb3VyY2VfYmFzZW5hbWUgPSBcCi0gICAgICAgICAgICBwb3NpeHBhdGguc3BsaXQocnVsZV9zb3VyY2UpCi0gICAgICAgIChydWxlX3NvdXJjZV9yb290LCBydWxlX3NvdXJjZV9leHQpID0gXAotICAgICAgICAgICAgcG9zaXhwYXRoLnNwbGl0ZXh0KHJ1bGVfc291cmNlX2Jhc2VuYW1lKQotCi0gICAgICAgICMgVGhlc2UgYXJlIHRoZSBzYW1lIHZhcmlhYmxlIG5hbWVzIHRoYXQgWGNvZGUgdXNlcyBmb3IgaXRzIG93biBuYXRpdmUKLSAgICAgICAgIyBydWxlIHN1cHBvcnQuICBCZWNhdXNlIFhjb2RlJ3MgcnVsZSBlbmdpbmUgaXMgbm90IGJlaW5nIHVzZWQsIHRoZXkKLSAgICAgICAgIyBuZWVkIHRvIGJlIGV4cGFuZGVkIGFzIHRoZXkgYXJlIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlLgotICAgICAgICBydWxlX2lucHV0X2RpY3QgPSB7Ci0gICAgICAgICAgJ0lOUFVUX0ZJTEVfQkFTRSc6ICAgcnVsZV9zb3VyY2Vfcm9vdCwKLSAgICAgICAgICAnSU5QVVRfRklMRV9TVUZGSVgnOiBydWxlX3NvdXJjZV9leHQsCi0gICAgICAgICAgJ0lOUFVUX0ZJTEVfTkFNRSc6ICAgcnVsZV9zb3VyY2VfYmFzZW5hbWUsCi0gICAgICAgICAgJ0lOUFVUX0ZJTEVfUEFUSCc6ICAgcnVsZV9zb3VyY2UsCi0gICAgICAgICAgJ0lOUFVUX0ZJTEVfRElSTkFNRSc6IHJ1bGVfc291cmNlX2Rpcm5hbWUsCi0gICAgICAgIH0KLQotICAgICAgICBjb25jcmV0ZV9vdXRwdXRzX2Zvcl90aGlzX3J1bGVfc291cmNlID0gW10KLSAgICAgICAgZm9yIG91dHB1dCBpbiBydWxlLmdldCgnb3V0cHV0cycsIFtdKToKLSAgICAgICAgICAjIEZvcnR1bmF0ZWx5LCBYY29kZSBhbmQgbWFrZSBib3RoIHVzZSAkKFZBUikgZm9ybWF0IGZvciB0aGVpcgotICAgICAgICAgICMgdmFyaWFibGVzLCBzbyB0aGUgZXhwYW5zaW9uIGlzIHRoZSBvbmx5IHRyYW5zZm9ybWF0aW9uIG5lY2Vzc2FyeS4KLSAgICAgICAgICAjIEFueSByZW1hbmluZyAkKFZBUiktdHlwZSB2YXJpYWJsZXMgaW4gdGhlIHN0cmluZyBjYW4gYmUgZ2l2ZW4KLSAgICAgICAgICAjIGRpcmVjdGx5IHRvIG1ha2UsIHdoaWNoIHdpbGwgcGljayB1cCB0aGUgY29ycmVjdCBzZXR0aW5ncyBmcm9tCi0gICAgICAgICAgIyB3aGF0IFhjb2RlIHB1dHMgaW50byB0aGUgZW52aXJvbm1lbnQuCi0gICAgICAgICAgY29uY3JldGVfb3V0cHV0ID0gRXhwYW5kWGNvZGVWYXJpYWJsZXMob3V0cHV0LCBydWxlX2lucHV0X2RpY3QpCi0gICAgICAgICAgY29uY3JldGVfb3V0cHV0c19mb3JfdGhpc19ydWxlX3NvdXJjZS5hcHBlbmQoY29uY3JldGVfb3V0cHV0KQotCi0gICAgICAgICAgIyBBZGQgYWxsIGNvbmNyZXRlIG91dHB1dHMgdG8gdGhlIHByb2plY3QuCi0gICAgICAgICAgcGJ4cC5BZGRPckdldEZpbGVJblJvb3RHcm91cChjb25jcmV0ZV9vdXRwdXQpCi0KLSAgICAgICAgY29uY3JldGVfb3V0cHV0c19ieV9ydWxlX3NvdXJjZS5hcHBlbmQoIFwKLSAgICAgICAgICAgIGNvbmNyZXRlX291dHB1dHNfZm9yX3RoaXNfcnVsZV9zb3VyY2UpCi0gICAgICAgIGNvbmNyZXRlX291dHB1dHNfYWxsLmV4dGVuZChjb25jcmV0ZV9vdXRwdXRzX2Zvcl90aGlzX3J1bGVfc291cmNlKQotCi0gICAgICAgICMgVE9ETyhtYXJrKTogU2hvdWxkIHZlcmlmeSB0aGF0IGF0IG1vc3Qgb25lIG9mIHRoZXNlIGlzIHNwZWNpZmllZC4KLSAgICAgICAgaWYgaW50KHJ1bGUuZ2V0KCdwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcycsIEZhbHNlKSk6Ci0gICAgICAgICAgZm9yIG91dHB1dCBpbiBjb25jcmV0ZV9vdXRwdXRzX2Zvcl90aGlzX3J1bGVfc291cmNlOgotICAgICAgICAgICAgQWRkU291cmNlVG9UYXJnZXQob3V0cHV0LCB0eXBlLCBwYnhwLCB4Y3QpCi0KLSAgICAgICAgIyBJZiB0aGUgZmlsZSBjYW1lIGZyb20gdGhlIG1hY19idW5kbGVfcmVzb3VyY2VzIGxpc3Qgb3IgaWYgdGhlIHJ1bGUKLSAgICAgICAgIyBpcyBtYXJrZWQgdG8gcHJvY2VzcyBvdXRwdXRzIGFzIGJ1bmRsZSByZXNvdXJjZSwgZG8gc28uCi0gICAgICAgIHdhc19tYWNfYnVuZGxlX3Jlc291cmNlID0gcnVsZV9zb3VyY2UgaW4gdGd0X21hY19idW5kbGVfcmVzb3VyY2VzCi0gICAgICAgIGlmIHdhc19tYWNfYnVuZGxlX3Jlc291cmNlIG9yIFwKLSAgICAgICAgICAgIGludChydWxlLmdldCgncHJvY2Vzc19vdXRwdXRzX2FzX21hY19idW5kbGVfcmVzb3VyY2VzJywgRmFsc2UpKToKLSAgICAgICAgICBmb3Igb3V0cHV0IGluIGNvbmNyZXRlX291dHB1dHNfZm9yX3RoaXNfcnVsZV9zb3VyY2U6Ci0gICAgICAgICAgICBBZGRSZXNvdXJjZVRvVGFyZ2V0KG91dHB1dCwgcGJ4cCwgeGN0KQotCi0gICAgICAgICMgRG8gd2UgaGF2ZSBhIG1lc3NhZ2UgdG8gcHJpbnQgd2hlbiB0aGlzIHJ1bGUgcnVucz8KLSAgICAgICAgbWVzc2FnZSA9IHJ1bGUuZ2V0KCdtZXNzYWdlJykKLSAgICAgICAgaWYgbWVzc2FnZToKLSAgICAgICAgICBtZXNzYWdlID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsQXJndW1lbnQobWVzc2FnZSkKLSAgICAgICAgICBtZXNzYWdlID0gRXhwYW5kWGNvZGVWYXJpYWJsZXMobWVzc2FnZSwgcnVsZV9pbnB1dF9kaWN0KQotICAgICAgICBtZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKLQotICAgICAgICAjIFR1cm4gdGhlIGxpc3QgaW50byBhIHN0cmluZyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYSBzaGVsbC4KLSAgICAgICAgYWN0aW9uX3N0cmluZyA9IGd5cC5jb21tb24uRW5jb2RlUE9TSVhTaGVsbExpc3QocnVsZVsnYWN0aW9uJ10pCi0KLSAgICAgICAgYWN0aW9uID0gRXhwYW5kWGNvZGVWYXJpYWJsZXMoYWN0aW9uX3N0cmluZywgcnVsZV9pbnB1dF9kaWN0KQotICAgICAgICBhY3Rpb25zLmFwcGVuZChhY3Rpb24pCi0KLSAgICAgIGlmIGxlbihjb25jcmV0ZV9vdXRwdXRzX2FsbCkgPiAwOgotICAgICAgICAjIFRPRE8obWFyayk6IFRoZXJlJ3MgYSBwb3NzaWJpbHR5IGZvciBjb2xsaXNpb24gaGVyZS4gIENvbnNpZGVyCi0gICAgICAgICMgdGFyZ2V0ICJ0IiBydWxlICJBX3IiIGFuZCB0YXJnZXQgInRfQSIgcnVsZSAiciIuCi0gICAgICAgIG1ha2VmaWxlX25hbWUgPSAnJXMubWFrZScgJSByZS5zdWIoCi0gICAgICAgICAgICAnW15hLXpBLVowLTlfXScsICdfJyAsICclc18lcycgJSAodGFyZ2V0X25hbWUsIHJ1bGVbJ3J1bGVfbmFtZSddKSkKLSAgICAgICAgbWFrZWZpbGVfcGF0aCA9IG9zLnBhdGguam9pbih4Y29kZV9wcm9qZWN0c1tidWlsZF9maWxlXS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VmaWxlX25hbWUpCi0gICAgICAgICMgVE9ETyhtYXJrKTogdHJ5L2Nsb3NlPyAgV3JpdGUgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgc3dhcCBpdCBvbmx5Ci0gICAgICAgICMgaWYgaXQncyBnb3QgY2hhbmdlcz8KLSAgICAgICAgbWFrZWZpbGUgPSBvcGVuKG1ha2VmaWxlX3BhdGgsICd3YicpCi0KLSAgICAgICAgIyBtYWtlIHdpbGwgYnVpbGQgdGhlIGZpcnN0IHRhcmdldCBpbiB0aGUgbWFrZWZpbGUgYnkgZGVmYXVsdC4gIEJ5Ci0gICAgICAgICMgY29udmVudGlvbiwgaXQncyBjYWxsZWQgImFsbCIuICBMaXN0IGFsbCAob3IgYXQgbGVhc3Qgb25lKQotICAgICAgICAjIGNvbmNyZXRlIG91dHB1dCBmb3IgZWFjaCBydWxlIHNvdXJjZSBhcyBhIHByZXJlcXVpc2l0ZSBvZiB0aGUgImFsbCIKLSAgICAgICAgIyB0YXJnZXQuCi0gICAgICAgIG1ha2VmaWxlLndyaXRlKCdhbGw6IFxcXG4nKQotICAgICAgICBmb3IgY29uY3JldGVfb3V0cHV0X2luZGV4IGluIFwKLSAgICAgICAgICAgIHhyYW5nZSgwLCBsZW4oY29uY3JldGVfb3V0cHV0c19ieV9ydWxlX3NvdXJjZSkpOgotICAgICAgICAgICMgT25seSBsaXN0IHRoZSBmaXJzdCAoaW5kZXggWzBdKSBjb25jcmV0ZSBvdXRwdXQgb2YgZWFjaCBpbnB1dAotICAgICAgICAgICMgaW4gdGhlICJhbGwiIHRhcmdldC4gIE90aGVyd2lzZSwgYSBwYXJhbGxlbCBtYWtlICgtaiA+IDEpIHdvdWxkCi0gICAgICAgICAgIyBhdHRlbXB0IHRvIHByb2Nlc3MgZWFjaCBpbnB1dCBtdWx0aXBsZSB0aW1lcyBzaW11bHRhbmVvdXNseS4KLSAgICAgICAgICAjIE90aGVyd2lzZSwgImFsbCIgY291bGQganVzdCBjb250YWluIHRoZSBlbnRpcmUgbGlzdCBvZgotICAgICAgICAgICMgY29uY3JldGVfb3V0cHV0c19hbGwuCi0gICAgICAgICAgY29uY3JldGVfb3V0cHV0ID0gXAotICAgICAgICAgICAgICBjb25jcmV0ZV9vdXRwdXRzX2J5X3J1bGVfc291cmNlW2NvbmNyZXRlX291dHB1dF9pbmRleF1bMF0KLSAgICAgICAgICBpZiBjb25jcmV0ZV9vdXRwdXRfaW5kZXggPT0gbGVuKGNvbmNyZXRlX291dHB1dHNfYnlfcnVsZV9zb3VyY2UpIC0gMToKLSAgICAgICAgICAgIGVvbCA9ICcnCi0gICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVvbCA9ICcgXFwnCi0gICAgICAgICAgbWFrZWZpbGUud3JpdGUoJyAgICAlcyVzXG4nICUgKGNvbmNyZXRlX291dHB1dCwgZW9sKSkKLQotICAgICAgICBmb3IgKHJ1bGVfc291cmNlLCBjb25jcmV0ZV9vdXRwdXRzLCBtZXNzYWdlLCBhY3Rpb24pIGluIFwKLSAgICAgICAgICAgIHppcChydWxlWydydWxlX3NvdXJjZXMnXSwgY29uY3JldGVfb3V0cHV0c19ieV9ydWxlX3NvdXJjZSwKLSAgICAgICAgICAgICAgICBtZXNzYWdlcywgYWN0aW9ucyk6Ci0gICAgICAgICAgbWFrZWZpbGUud3JpdGUoJ1xuJykKLQotICAgICAgICAgICMgQWRkIGEgcnVsZSB0aGF0IGRlY2xhcmVzIGl0IGNhbiBidWlsZCBlYWNoIGNvbmNyZXRlIG91dHB1dCBvZiBhCi0gICAgICAgICAgIyBydWxlIHNvdXJjZS4gIENvbGxlY3QgdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3RvcmllcyB0aGF0IGFyZQotICAgICAgICAgICMgcmVxdWlyZWQuCi0gICAgICAgICAgY29uY3JldGVfb3V0cHV0X2RpcnMgPSBbXQotICAgICAgICAgIGZvciBjb25jcmV0ZV9vdXRwdXRfaW5kZXggaW4geHJhbmdlKDAsIGxlbihjb25jcmV0ZV9vdXRwdXRzKSk6Ci0gICAgICAgICAgICBjb25jcmV0ZV9vdXRwdXQgPSBjb25jcmV0ZV9vdXRwdXRzW2NvbmNyZXRlX291dHB1dF9pbmRleF0KLSAgICAgICAgICAgIGlmIGNvbmNyZXRlX291dHB1dF9pbmRleCA9PSAwOgotICAgICAgICAgICAgICBib2wgPSAnJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgYm9sID0gJyAgICAnCi0gICAgICAgICAgICBtYWtlZmlsZS53cml0ZSgnJXMlcyBcXFxuJyAlIChib2wsIGNvbmNyZXRlX291dHB1dCkpCi0KLSAgICAgICAgICAgIGNvbmNyZXRlX291dHB1dF9kaXIgPSBwb3NpeHBhdGguZGlybmFtZShjb25jcmV0ZV9vdXRwdXQpCi0gICAgICAgICAgICBpZiAoY29uY3JldGVfb3V0cHV0X2RpciBhbmQKLSAgICAgICAgICAgICAgICBjb25jcmV0ZV9vdXRwdXRfZGlyIG5vdCBpbiBjb25jcmV0ZV9vdXRwdXRfZGlycyk6Ci0gICAgICAgICAgICAgIGNvbmNyZXRlX291dHB1dF9kaXJzLmFwcGVuZChjb25jcmV0ZV9vdXRwdXRfZGlyKQotCi0gICAgICAgICAgbWFrZWZpbGUud3JpdGUoJyAgICA6IFxcXG4nKQotCi0gICAgICAgICAgIyBUaGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyBydWxlIGFyZSB0aGUgcnVsZSBzb3VyY2UgaXRzZWxmIGFuZAotICAgICAgICAgICMgdGhlIHNldCBvZiBhZGRpdGlvbmFsIHJ1bGUgaW5wdXRzLCBpZiBhbnkuCi0gICAgICAgICAgcHJlcmVxdWlzaXRlcyA9IFtydWxlX3NvdXJjZV0KLSAgICAgICAgICBwcmVyZXF1aXNpdGVzLmV4dGVuZChydWxlLmdldCgnaW5wdXRzJywgW10pKQotICAgICAgICAgIGZvciBwcmVyZXF1aXNpdGVfaW5kZXggaW4geHJhbmdlKDAsIGxlbihwcmVyZXF1aXNpdGVzKSk6Ci0gICAgICAgICAgICBwcmVyZXF1aXNpdGUgPSBwcmVyZXF1aXNpdGVzW3ByZXJlcXVpc2l0ZV9pbmRleF0KLSAgICAgICAgICAgIGlmIHByZXJlcXVpc2l0ZV9pbmRleCA9PSBsZW4ocHJlcmVxdWlzaXRlcykgLSAxOgotICAgICAgICAgICAgICBlb2wgPSAnJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgZW9sID0gJyBcXCcKLSAgICAgICAgICAgIG1ha2VmaWxlLndyaXRlKCcgICAgJXMlc1xuJyAlIChwcmVyZXF1aXNpdGUsIGVvbCkpCi0KLSAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IG91dHB1dCBkaXJlY3RvcmllcyBleGlzdCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBydWxlCi0gICAgICAgICAgIyBhY3Rpb24uCi0gICAgICAgICAgaWYgbGVuKGNvbmNyZXRlX291dHB1dF9kaXJzKSA+IDA6Ci0gICAgICAgICAgICBtYWtlZmlsZS53cml0ZSgnXHRAbWtkaXIgLXAgIiVzIlxuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnIiAiJy5qb2luKGNvbmNyZXRlX291dHB1dF9kaXJzKSkKLQotICAgICAgICAgICMgVGhlIHJ1bGUgbWVzc2FnZSBhbmQgYWN0aW9uIGhhdmUgYWxyZWFkeSBoYWQgdGhlIG5lY2Vzc2FyeSB2YXJpYWJsZQotICAgICAgICAgICMgc3Vic3RpdHV0aW9ucyBwZXJmb3JtZWQuCi0gICAgICAgICAgaWYgbWVzc2FnZToKLSAgICAgICAgICAgICMgTWFyayBpdCB3aXRoIG5vdGU6IHNvIFhjb2RlIHBpY2tzIGl0IHVwIGluIGJ1aWxkIG91dHB1dC4KLSAgICAgICAgICAgIG1ha2VmaWxlLndyaXRlKCdcdEBlY2hvIG5vdGU6ICVzXG4nICUgbWVzc2FnZSkKLSAgICAgICAgICBtYWtlZmlsZS53cml0ZSgnXHQlc1xuJyAlIGFjdGlvbikKLQotICAgICAgICBtYWtlZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgIyBJdCBtaWdodCBiZSBuaWNlIHRvIGVuc3VyZSB0aGF0IG5lZWRlZCBvdXRwdXQgZGlyZWN0b3JpZXMgZXhpc3QKLSAgICAgICAgIyBoZXJlIHJhdGhlciB0aGFuIGluIGVhY2ggdGFyZ2V0IGluIHRoZSBNYWtlZmlsZSwgYnV0IHRoYXQgd291bGRuJ3QKLSAgICAgICAgIyB3b3JrIGlmIHRoZXJlIGV2ZXIgd2FzIGEgY29uY3JldGUgb3V0cHV0IHRoYXQgaGFkIGFuIGlucHV0LWRlcGVuZGVudAotICAgICAgICAjIHZhcmlhYmxlIGFueXdoZXJlIG90aGVyIHRoYW4gaW4gdGhlIGxlYWYgcG9zaXRpb24uCi0KLSAgICAgICAgIyBEb24ndCBkZWNsYXJlIGFueSBpbnB1dFBhdGhzIG9yIG91dHB1dFBhdGhzLiAgSWYgdGhleSdyZSBwcmVzZW50LAotICAgICAgICAjIFhjb2RlIHdpbGwgcHJvdmlkZSBhIHNsaWdodCBvcHRpbWl6YXRpb24gYnkgb25seSBydW5uaW5nIHRoZSBzY3JpcHQKLSAgICAgICAgIyBwaGFzZSBpZiBhbnkgb3V0cHV0IGlzIG1pc3Npbmcgb3Igb3V0ZGF0ZWQgcmVsYXRpdmUgdG8gYW55IGlucHV0LgotICAgICAgICAjIFVuZm9ydHVuYXRlbHksIGl0IHdpbGwgYWxzbyBhc3N1bWUgdGhhdCBhbGwgb3V0cHV0cyBhcmUgdG91Y2hlZCBieQotICAgICAgICAjIHRoZSBzY3JpcHQsIGFuZCBpZiB0aGUgb3V0cHV0cyBzZXJ2ZSBhcyBmaWxlcyBpbiBhIGNvbXBpbGF0aW9uCi0gICAgICAgICMgcGhhc2UsIHRoZXkgd2lsbCBiZSB1bmNvbmRpdGlvbmFsbHkgcmVidWlsdC4gIFNpbmNlIG1ha2UgbWlnaHQgbm90Ci0gICAgICAgICMgcmVidWlsZCBldmVyeXRoaW5nIHRoYXQgY291bGQgYmUgZGVjbGFyZWQgaGVyZSBhcyBhbiBvdXRwdXQsIHRoaXMKLSAgICAgICAgIyBleHRyYSBjb21waWxhdGlvbiBhY3Rpdml0eSBpcyB1bm5lY2Vzc2FyeS4gIFdpdGggaW5wdXRQYXRocyBhbmQKLSAgICAgICAgIyBvdXRwdXRQYXRocyBub3Qgc3VwcGxpZWQsIG1ha2Ugd2lsbCBhbHdheXMgYmUgY2FsbGVkLCBidXQgaXQga25vd3MKLSAgICAgICAgIyBlbm91Z2ggdG8gbm90IGRvIGFueXRoaW5nIHdoZW4gZXZlcnl0aGluZyBpcyB1cC10by1kYXRlLgotCi0gICAgICAgICMgVG8gaGVscCBzcGVlZCB0aGluZ3MgdXAsIHBhc3MgLWogQ09VTlQgdG8gbWFrZSBzbyBpdCBkb2VzIHNvbWUgd29yawotICAgICAgICAjIGluIHBhcmFsbGVsLiAgRG9uJ3QgdXNlIG5jcHVzIGJlY2F1c2UgWGNvZGUgd2lsbCBidWlsZCBuY3B1cyB0YXJnZXRzCi0gICAgICAgICMgaW4gcGFyYWxsZWwgYW5kIGlmIGVhY2ggdGFyZ2V0IGhhcHBlbnMgdG8gaGF2ZSBhIHJ1bGVzIHN0ZXAsIHRoZXJlCi0gICAgICAgICMgd291bGQgYmUgbmNwdXNeMiB0aGluZ3MgZ29pbmcuICBXaXRoIGEgbWFjaGluZSB0aGF0IGhhcyAyIHF1YWQtY29yZQotICAgICAgICAjIFhlb25zLCBhIGJ1aWxkIGNhbiBxdWlja2x5IHJ1biBvdXQgb2YgcHJvY2Vzc2VzIGJhc2VkIG9uCi0gICAgICAgICMgc2NoZWR1bGluZy9vdGhlciB0YXNrcywgYW5kIHJhbmRvbWx5IGZhaWxpbmcgYnVpbGRzIGFyZSBubyBnb29kLgotICAgICAgICBzY3JpcHQgPSBcCi0iIiJKT0JfQ09VTlQ9IiQoL3Vzci9zYmluL3N5c2N0bCAtbiBody5uY3B1KSIKLWlmIFsgIiR7Sk9CX0NPVU5UfSIgLWd0IDQgXTsgdGhlbgotICBKT0JfQ09VTlQ9NAotZmkKLWV4ZWMgIiR7REVWRUxPUEVSX0JJTl9ESVJ9L21ha2UiIC1mICIke1BST0pFQ1RfRklMRV9QQVRIfS8lcyIgLWogIiR7Sk9CX0NPVU5UfSIKLWV4aXQgMQotIiIiICUgbWFrZWZpbGVfbmFtZQotICAgICAgICBzc2JwID0gZ3lwLnhjb2RlcHJval9maWxlLlBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSh7Ci0gICAgICAgICAgICAgICduYW1lJzogJ1J1bGUgIicgKyBydWxlWydydWxlX25hbWUnXSArICciJywKLSAgICAgICAgICAgICAgJ3NoZWxsU2NyaXB0Jzogc2NyaXB0LAotICAgICAgICAgICAgICAnc2hvd0VudlZhcnNJbkxvZyc6IDAsCi0gICAgICAgICAgICB9KQotCi0gICAgICAgIGlmIHN1cHBvcnRfeGN0OgotICAgICAgICAgIHN1cHBvcnRfeGN0LkFwcGVuZFByb3BlcnR5KCdidWlsZFBoYXNlcycsIHNzYnApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIyBUT0RPKG1hcmspOiB0aGlzIGFzc3VtZXMgdG9vIG11Y2gga25vd2xlZGdlIG9mIHRoZSBpbnRlcm5hbHMgb2YKLSAgICAgICAgICAjIHhjb2RlcHJval9maWxlOyBzb21lIG9mIHRoZXNlIHNtYXJ0cyBzaG91bGQgbW92ZSBpbnRvIHhjb2RlcHJval9maWxlCi0gICAgICAgICAgIyBpdHNlbGYuCi0gICAgICAgICAgeGN0Ll9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddLmluc2VydChwcmVidWlsZF9pbmRleCwgc3NicCkKLSAgICAgICAgICBwcmVidWlsZF9pbmRleCA9IHByZWJ1aWxkX2luZGV4ICsgMQotCi0gICAgICAjIEV4dHJhIHJ1bGUgaW5wdXRzIGFsc28gZ28gaW50byB0aGUgcHJvamVjdCBmaWxlLiAgQ29uY3JldGUgb3V0cHV0cyB3ZXJlCi0gICAgICAjIGFscmVhZHkgYWRkZWQgd2hlbiB0aGV5IHdlcmUgY29tcHV0ZWQuCi0gICAgICBncm91cHMgPSBbJ2lucHV0cycsICdpbnB1dHNfZXhjbHVkZWQnXQotICAgICAgaWYgc2tpcF9leGNsdWRlZF9maWxlczoKLSAgICAgICAgZ3JvdXBzID0gW3ggZm9yIHggaW4gZ3JvdXBzIGlmIG5vdCB4LmVuZHN3aXRoKCdfZXhjbHVkZWQnKV0KLSAgICAgIGZvciBncm91cCBpbiBncm91cHM6Ci0gICAgICAgIGZvciBpdGVtIGluIHJ1bGUuZ2V0KGdyb3VwLCBbXSk6Ci0gICAgICAgICAgcGJ4cC5BZGRPckdldEZpbGVJblJvb3RHcm91cChpdGVtKQotCi0gICAgIyBBZGQgInNvdXJjZXMiLgotICAgIGZvciBzb3VyY2UgaW4gc3BlYy5nZXQoJ3NvdXJjZXMnLCBbXSk6Ci0gICAgICAoc291cmNlX3Jvb3QsIHNvdXJjZV9leHRlbnNpb24pID0gcG9zaXhwYXRoLnNwbGl0ZXh0KHNvdXJjZSkKLSAgICAgIGlmIHNvdXJjZV9leHRlbnNpb25bMTpdIG5vdCBpbiBydWxlc19ieV9leHQ6Ci0gICAgICAgICMgQWRkU291cmNlVG9UYXJnZXQgd2lsbCBhZGQgdGhlIGZpbGUgdG8gYSByb290IGdyb3VwIGlmIGl0J3Mgbm90Ci0gICAgICAgICMgYWxyZWFkeSB0aGVyZS4KLSAgICAgICAgQWRkU291cmNlVG9UYXJnZXQoc291cmNlLCB0eXBlLCBwYnhwLCB4Y3QpCi0gICAgICBlbHNlOgotICAgICAgICBwYnhwLkFkZE9yR2V0RmlsZUluUm9vdEdyb3VwKHNvdXJjZSkKLQotICAgICMgQWRkICJtYWNfYnVuZGxlX3Jlc291cmNlcyIgYW5kICJtYWNfZnJhbWV3b3JrX3ByaXZhdGVfaGVhZGVycyIgaWYKLSAgICAjIGl0J3MgYSBidW5kbGUgb2YgYW55IHR5cGUuCi0gICAgaWYgaXNfYnVuZGxlOgotICAgICAgZm9yIHJlc291cmNlIGluIHRndF9tYWNfYnVuZGxlX3Jlc291cmNlczoKLSAgICAgICAgKHJlc291cmNlX3Jvb3QsIHJlc291cmNlX2V4dGVuc2lvbikgPSBwb3NpeHBhdGguc3BsaXRleHQocmVzb3VyY2UpCi0gICAgICAgIGlmIHJlc291cmNlX2V4dGVuc2lvblsxOl0gbm90IGluIHJ1bGVzX2J5X2V4dDoKLSAgICAgICAgICBBZGRSZXNvdXJjZVRvVGFyZ2V0KHJlc291cmNlLCBwYnhwLCB4Y3QpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcGJ4cC5BZGRPckdldEZpbGVJblJvb3RHcm91cChyZXNvdXJjZSkKLQotICAgICAgZm9yIGhlYWRlciBpbiBzcGVjLmdldCgnbWFjX2ZyYW1ld29ya19wcml2YXRlX2hlYWRlcnMnLCBbXSk6Ci0gICAgICAgIEFkZEhlYWRlclRvVGFyZ2V0KGhlYWRlciwgcGJ4cCwgeGN0LCBGYWxzZSkKLQotICAgICMgQWRkICJtYWNfZnJhbWV3b3JrX2hlYWRlcnMiLiBUaGVzZSBjYW4gYmUgdmFsaWQgZm9yIGJvdGggZnJhbWV3b3JrcwotICAgICMgYW5kIHN0YXRpYyBsaWJyYXJpZXMuCi0gICAgaWYgaXNfYnVuZGxlIG9yIHR5cGUgPT0gJ3N0YXRpY19saWJyYXJ5JzoKLSAgICAgIGZvciBoZWFkZXIgaW4gc3BlYy5nZXQoJ21hY19mcmFtZXdvcmtfaGVhZGVycycsIFtdKToKLSAgICAgICAgQWRkSGVhZGVyVG9UYXJnZXQoaGVhZGVyLCBwYnhwLCB4Y3QsIFRydWUpCi0KLSAgICAjIEFkZCAiY29waWVzIi4KLSAgICBmb3IgY29weV9ncm91cCBpbiBzcGVjLmdldCgnY29waWVzJywgW10pOgotICAgICAgcGJ4Y3AgPSBneXAueGNvZGVwcm9qX2ZpbGUuUEJYQ29weUZpbGVzQnVpbGRQaGFzZSh7Ci0gICAgICAgICAgICAnbmFtZSc6ICdDb3B5IHRvICcgKyBjb3B5X2dyb3VwWydkZXN0aW5hdGlvbiddCi0gICAgICAgICAgfSwKLSAgICAgICAgICBwYXJlbnQ9eGN0KQotICAgICAgZGVzdCA9IGNvcHlfZ3JvdXBbJ2Rlc3RpbmF0aW9uJ10KLSAgICAgIGlmIGRlc3RbMF0gbm90IGluICgnLycsICckJyk6Ci0gICAgICAgICMgUmVsYXRpdmUgcGF0aHMgYXJlIHJlbGF0aXZlIHRvICQoU1JDUk9PVCkuCi0gICAgICAgIGRlc3QgPSAnJChTUkNST09UKS8nICsgZGVzdAotICAgICAgcGJ4Y3AuU2V0RGVzdGluYXRpb24oZGVzdCkKLQotICAgICAgIyBUT0RPKG1hcmspOiBUaGUgdXN1YWwgY29tbWVudCBhYm91dCB0aGlzIGtub3dpbmcgdG9vIG11Y2ggYWJvdXQKLSAgICAgICMgZ3lwLnhjb2RlcHJval9maWxlIGludGVybmFscyBhcHBsaWVzLgotICAgICAgeGN0Ll9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddLmluc2VydChwcmVidWlsZF9pbmRleCwgcGJ4Y3ApCi0KLSAgICAgIGZvciBmaWxlIGluIGNvcHlfZ3JvdXBbJ2ZpbGVzJ106Ci0gICAgICAgIHBieGNwLkFkZEZpbGUoZmlsZSkKLQotICAgICMgRXhjbHVkZWQgZmlsZXMgY2FuIGFsc28gZ28gaW50byB0aGUgcHJvamVjdCBmaWxlLgotICAgIGlmIG5vdCBza2lwX2V4Y2x1ZGVkX2ZpbGVzOgotICAgICAgZm9yIGtleSBpbiBbJ3NvdXJjZXMnLCAnbWFjX2J1bmRsZV9yZXNvdXJjZXMnLCAnbWFjX2ZyYW1ld29ya19oZWFkZXJzJywKLSAgICAgICAgICAgICAgICAgICdtYWNfZnJhbWV3b3JrX3ByaXZhdGVfaGVhZGVycyddOgotICAgICAgICBleGNsdWRlZF9rZXkgPSBrZXkgKyAnX2V4Y2x1ZGVkJwotICAgICAgICBmb3IgaXRlbSBpbiBzcGVjLmdldChleGNsdWRlZF9rZXksIFtdKToKLSAgICAgICAgICBwYnhwLkFkZE9yR2V0RmlsZUluUm9vdEdyb3VwKGl0ZW0pCi0KLSAgICAjIFNvIGNhbiAiaW5wdXRzIiBhbmQgIm91dHB1dHMiIHNlY3Rpb25zIG9mICJhY3Rpb25zIiBncm91cHMuCi0gICAgZ3JvdXBzID0gWydpbnB1dHMnLCAnaW5wdXRzX2V4Y2x1ZGVkJywgJ291dHB1dHMnLCAnb3V0cHV0c19leGNsdWRlZCddCi0gICAgaWYgc2tpcF9leGNsdWRlZF9maWxlczoKLSAgICAgIGdyb3VwcyA9IFt4IGZvciB4IGluIGdyb3VwcyBpZiBub3QgeC5lbmRzd2l0aCgnX2V4Y2x1ZGVkJyldCi0gICAgZm9yIGFjdGlvbiBpbiBzcGVjLmdldCgnYWN0aW9ucycsIFtdKToKLSAgICAgIGZvciBncm91cCBpbiBncm91cHM6Ci0gICAgICAgIGZvciBpdGVtIGluIGFjdGlvbi5nZXQoZ3JvdXAsIFtdKToKLSAgICAgICAgICAjIEV4Y2x1ZGUgYW55dGhpbmcgaW4gQlVJTFRfUFJPRFVDVFNfRElSLiAgVGhleSdyZSBwcm9kdWN0cywgbm90Ci0gICAgICAgICAgIyBzb3VyY2VzLgotICAgICAgICAgIGlmIG5vdCBpdGVtLnN0YXJ0c3dpdGgoJyQoQlVJTFRfUFJPRFVDVFNfRElSKS8nKToKLSAgICAgICAgICAgIHBieHAuQWRkT3JHZXRGaWxlSW5Sb290R3JvdXAoaXRlbSkKLQotICAgIGZvciBwb3N0YnVpbGQgaW4gc3BlYy5nZXQoJ3Bvc3RidWlsZHMnLCBbXSk6Ci0gICAgICBhY3Rpb25fc3RyaW5nX3NoID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChwb3N0YnVpbGRbJ2FjdGlvbiddKQotICAgICAgc2NyaXB0ID0gJ2V4ZWMgJyArIGFjdGlvbl9zdHJpbmdfc2ggKyAnXG5leGl0IDFcbicKLQotICAgICAgIyBNYWtlIHRoZSBwb3N0YnVpbGQgc3RlcCBkZXBlbmQgb24gdGhlIG91dHB1dCBvZiBsZCBvciBhciBmcm9tIHRoaXMKLSAgICAgICMgdGFyZ2V0LiBBcHBhcmVudGx5IHB1dHRpbmcgdGhlIHNjcmlwdCBzdGVwIGFmdGVyIHRoZSBsaW5rIHN0ZXAgaXNuJ3QKLSAgICAgICMgc3VmZmljaWVudCB0byBlbnN1cmUgcHJvcGVyIG9yZGVyaW5nIGluIGFsbCBjYXNlcy4gV2l0aCBhbiBpbnB1dAotICAgICAgIyBkZWNsYXJlZCBidXQgbm8gb3V0cHV0cywgdGhlIHNjcmlwdCBzdGVwIHNob3VsZCBydW4gZXZlcnkgdGltZSwgYXMKLSAgICAgICMgZGVzaXJlZC4KLSAgICAgIHNzYnAgPSBneXAueGNvZGVwcm9qX2ZpbGUuUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlKHsKLSAgICAgICAgICAgICdpbnB1dFBhdGhzJzogWyckKEJVSUxUX1BST0RVQ1RTX0RJUikvJChFWEVDVVRBQkxFX1BBVEgpJ10sCi0gICAgICAgICAgICAnbmFtZSc6ICdQb3N0YnVpbGQgIicgKyBwb3N0YnVpbGRbJ3Bvc3RidWlsZF9uYW1lJ10gKyAnIicsCi0gICAgICAgICAgICAnc2hlbGxTY3JpcHQnOiBzY3JpcHQsCi0gICAgICAgICAgICAnc2hvd0VudlZhcnNJbkxvZyc6IDAsCi0gICAgICAgICAgfSkKLSAgICAgIHhjdC5BcHBlbmRQcm9wZXJ0eSgnYnVpbGRQaGFzZXMnLCBzc2JwKQotCi0gICAgIyBBZGQgZGVwZW5kZW5jaWVzIGJlZm9yZSBsaWJyYXJpZXMsIGJlY2F1c2UgYWRkaW5nIGEgZGVwZW5kZW5jeSBtYXkgaW1wbHkKLSAgICAjIGFkZGluZyBhIGxpYnJhcnkuICBJdCdzIHByZWZlcmFibGUgdG8ga2VlcCBkZXBlbmRlbmNpZXMgbGlzdGVkIGZpcnN0Ci0gICAgIyBkdXJpbmcgYSBsaW5rIHBoYXNlIHNvIHRoYXQgdGhleSBjYW4gb3ZlcnJpZGUgc3ltYm9scyB0aGF0IHdvdWxkCi0gICAgIyBvdGhlcndpc2UgYmUgcHJvdmlkZWQgYnkgbGlicmFyaWVzLCB3aGljaCB3aWxsIHVzdWFsbHkgaW5jbHVkZSBzeXN0ZW0KLSAgICAjIGxpYnJhcmllcy4gIE9uIHNvbWUgc3lzdGVtcywgbGQgaXMgZmluaWNreSBhbmQgZXZlbiByZXF1aXJlcyB0aGUKLSAgICAjIGxpYnJhcmllcyB0byBiZSBvcmRlcmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB1bnJlc29sdmVkIHN5bWJvbHMgaW4KLSAgICAjIGVhcmxpZXItbGlzdGVkIGxpYnJhcmllcyBtYXkgb25seSBiZSByZXNvbHZlZCBieSBsYXRlci1saXN0ZWQgbGlicmFyaWVzLgotICAgICMgVGhlIE1hYyBsaW5rZXIgZG9lc24ndCB3b3JrIHRoYXQgd2F5LCBidXQgb3RoZXIgcGxhdGZvcm1zIGRvLCBhbmQgc28KLSAgICAjIHRoZWlyIGxpbmtlciBpbnZvY2F0aW9ucyBuZWVkIHRvIGJlIGNvbnN0cnVjdGVkIGluIHRoaXMgd2F5LiAgVGhlcmUncwotICAgICMgbm8gY29tcGVsbGluZyByZWFzb24gZm9yIFhjb2RlJ3MgbGlua2VyIGludm9jYXRpb25zIHRvIGRpZmZlci4KLQotICAgIGlmICdkZXBlbmRlbmNpZXMnIGluIHNwZWM6Ci0gICAgICBmb3IgZGVwZW5kZW5jeSBpbiBzcGVjWydkZXBlbmRlbmNpZXMnXToKLSAgICAgICAgeGN0LkFkZERlcGVuZGVuY3koeGNvZGVfdGFyZ2V0c1tkZXBlbmRlbmN5XSkKLSAgICAgICAgIyBUaGUgc3VwcG9ydCBwcm9qZWN0IGFsc28gZ2V0cyB0aGUgZGVwZW5kZW5jaWVzIChpbiBjYXNlIHRoZXkgYXJlCi0gICAgICAgICMgbmVlZGVkIGZvciB0aGUgYWN0aW9ucy9ydWxlcyB0byB3b3JrKS4KLSAgICAgICAgaWYgc3VwcG9ydF94Y3Q6Ci0gICAgICAgICAgc3VwcG9ydF94Y3QuQWRkRGVwZW5kZW5jeSh4Y29kZV90YXJnZXRzW2RlcGVuZGVuY3ldKQotCi0gICAgaWYgJ2xpYnJhcmllcycgaW4gc3BlYzoKLSAgICAgIGZvciBsaWJyYXJ5IGluIHNwZWNbJ2xpYnJhcmllcyddOgotICAgICAgICB4Y3QuRnJhbWV3b3Jrc1BoYXNlKCkuQWRkRmlsZShsaWJyYXJ5KQotICAgICAgICAjIEFkZCB0aGUgbGlicmFyeSdzIGRpcmVjdG9yeSB0byBMSUJSQVJZX1NFQVJDSF9QQVRIUyBpZiBuZWNlc3NhcnkuCi0gICAgICAgICMgSSB3aXNoIFhjb2RlIGhhbmRsZWQgdGhpcyBhdXRvbWF0aWNhbGx5LgotICAgICAgICBsaWJyYXJ5X2RpciA9IHBvc2l4cGF0aC5kaXJuYW1lKGxpYnJhcnkpCi0gICAgICAgIGlmIGxpYnJhcnlfZGlyIG5vdCBpbiB4Y29kZV9zdGFuZGFyZF9saWJyYXJ5X2RpcnMgYW5kICgKLSAgICAgICAgICAgIG5vdCB4Y3QuSGFzQnVpbGRTZXR0aW5nKF9saWJyYXJ5X3NlYXJjaF9wYXRoc192YXIpIG9yCi0gICAgICAgICAgICBsaWJyYXJ5X2RpciBub3QgaW4geGN0LkdldEJ1aWxkU2V0dGluZyhfbGlicmFyeV9zZWFyY2hfcGF0aHNfdmFyKSk6Ci0gICAgICAgICAgeGN0LkFwcGVuZEJ1aWxkU2V0dGluZyhfbGlicmFyeV9zZWFyY2hfcGF0aHNfdmFyLCBsaWJyYXJ5X2RpcikKLQotICAgIGZvciBjb25maWd1cmF0aW9uX25hbWUgaW4gY29uZmlndXJhdGlvbl9uYW1lczoKLSAgICAgIGNvbmZpZ3VyYXRpb24gPSBzcGVjWydjb25maWd1cmF0aW9ucyddW2NvbmZpZ3VyYXRpb25fbmFtZV0KLSAgICAgIHhjYmMgPSB4Y3QuQ29uZmlndXJhdGlvbk5hbWVkKGNvbmZpZ3VyYXRpb25fbmFtZSkKLSAgICAgIGZvciBpbmNsdWRlX2RpciBpbiBjb25maWd1cmF0aW9uLmdldCgnbWFjX2ZyYW1ld29ya19kaXJzJywgW10pOgotICAgICAgICB4Y2JjLkFwcGVuZEJ1aWxkU2V0dGluZygnRlJBTUVXT1JLX1NFQVJDSF9QQVRIUycsIGluY2x1ZGVfZGlyKQotICAgICAgZm9yIGluY2x1ZGVfZGlyIGluIGNvbmZpZ3VyYXRpb24uZ2V0KCdpbmNsdWRlX2RpcnMnLCBbXSk6Ci0gICAgICAgIHhjYmMuQXBwZW5kQnVpbGRTZXR0aW5nKCdIRUFERVJfU0VBUkNIX1BBVEhTJywgaW5jbHVkZV9kaXIpCi0gICAgICBpZiAnZGVmaW5lcycgaW4gY29uZmlndXJhdGlvbjoKLSAgICAgICAgZm9yIGRlZmluZSBpbiBjb25maWd1cmF0aW9uWydkZWZpbmVzJ106Ci0gICAgICAgICAgc2V0X2RlZmluZSA9IEVzY2FwZVhDb2RlQXJndW1lbnQoZGVmaW5lKQotICAgICAgICAgIHhjYmMuQXBwZW5kQnVpbGRTZXR0aW5nKCdHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TJywgc2V0X2RlZmluZSkKLSAgICAgIGlmICd4Y29kZV9zZXR0aW5ncycgaW4gY29uZmlndXJhdGlvbjoKLSAgICAgICAgZm9yIHhjaywgeGN2IGluIGNvbmZpZ3VyYXRpb25bJ3hjb2RlX3NldHRpbmdzJ10uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgeGNiYy5TZXRCdWlsZFNldHRpbmcoeGNrLCB4Y3YpCi0gICAgICBpZiAneGNvZGVfY29uZmlnX2ZpbGUnIGluIGNvbmZpZ3VyYXRpb246Ci0gICAgICAgIGNvbmZpZ19yZWYgPSBwYnhwLkFkZE9yR2V0RmlsZUluUm9vdEdyb3VwKAotICAgICAgICAgICAgY29uZmlndXJhdGlvblsneGNvZGVfY29uZmlnX2ZpbGUnXSkKLSAgICAgICAgeGNiYy5TZXRCYXNlQ29uZmlndXJhdGlvbihjb25maWdfcmVmKQotCi0gIGJ1aWxkX2ZpbGVzID0gW10KLSAgZm9yIGJ1aWxkX2ZpbGUsIGJ1aWxkX2ZpbGVfZGljdCBpbiBkYXRhLml0ZXJpdGVtcygpOgotICAgIGlmIGJ1aWxkX2ZpbGUuZW5kc3dpdGgoJy5neXAnKToKLSAgICAgIGJ1aWxkX2ZpbGVzLmFwcGVuZChidWlsZF9maWxlKQotCi0gIGZvciBidWlsZF9maWxlIGluIGJ1aWxkX2ZpbGVzOgotICAgIHhjb2RlX3Byb2plY3RzW2J1aWxkX2ZpbGVdLkZpbmFsaXplMSh4Y29kZV90YXJnZXRzLCBzZXJpYWxpemVfYWxsX3Rlc3RzKQotCi0gIGZvciBidWlsZF9maWxlIGluIGJ1aWxkX2ZpbGVzOgotICAgIHhjb2RlX3Byb2plY3RzW2J1aWxkX2ZpbGVdLkZpbmFsaXplMih4Y29kZV90YXJnZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y29kZV90YXJnZXRfdG9fdGFyZ2V0X2RpY3QpCi0KLSAgZm9yIGJ1aWxkX2ZpbGUgaW4gYnVpbGRfZmlsZXM6Ci0gICAgeGNvZGVfcHJvamVjdHNbYnVpbGRfZmlsZV0uV3JpdGUoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9pbnB1dC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvaW5wdXQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGFhN2ZjMzEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9pbnB1dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3NTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1mcm9tIGNvbXBpbGVyLmFzdCBpbXBvcnQgQ29uc3QKLWZyb20gY29tcGlsZXIuYXN0IGltcG9ydCBEaWN0Ci1mcm9tIGNvbXBpbGVyLmFzdCBpbXBvcnQgRGlzY2FyZAotZnJvbSBjb21waWxlci5hc3QgaW1wb3J0IExpc3QKLWZyb20gY29tcGlsZXIuYXN0IGltcG9ydCBNb2R1bGUKLWZyb20gY29tcGlsZXIuYXN0IGltcG9ydCBOb2RlCi1mcm9tIGNvbXBpbGVyLmFzdCBpbXBvcnQgU3RtdAotaW1wb3J0IGNvbXBpbGVyCi1pbXBvcnQgY29weQotaW1wb3J0IGd5cC5jb21tb24KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotaW1wb3J0IHNobGV4Ci1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLWZyb20gZ3lwLmNvbW1vbiBpbXBvcnQgR3lwRXJyb3IKLQotCi1fREVCVUdfREVQVEggPSBGYWxzZQotCi0KLSMgQSBsaXN0IG9mIHR5cGVzIHRoYXQgYXJlIHRyZWF0ZWQgYXMgbGlua2FibGUuCi1saW5rYWJsZV90eXBlcyA9IFsnZXhlY3V0YWJsZScsICdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnXQotCi0jIEEgbGlzdCBvZiBzZWN0aW9ucyB0aGF0IGNvbnRhaW4gbGlua3MgdG8gb3RoZXIgdGFyZ2V0cy4KLWRlcGVuZGVuY3lfc2VjdGlvbnMgPSBbJ2RlcGVuZGVuY2llcycsICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJ10KLQotIyBiYXNlX3BhdGhfc2VjdGlvbnMgaXMgYSBsaXN0IG9mIHNlY3Rpb25zIGRlZmluZWQgYnkgR1lQIHRoYXQgY29udGFpbgotIyBwYXRobmFtZXMuICBUaGUgZ2VuZXJhdG9ycyBjYW4gcHJvdmlkZSBtb3JlIGtleXMsIHRoZSB0d28gbGlzdHMgYXJlIG1lcmdlZAotIyBpbnRvIHBhdGhfc2VjdGlvbnMsIGJ1dCB5b3Ugc2hvdWxkIGNhbGwgSXNQYXRoU2VjdGlvbiBpbnN0ZWFkIG9mIHVzaW5nIGVpdGhlcgotIyBsaXN0IGRpcmVjdGx5LgotYmFzZV9wYXRoX3NlY3Rpb25zID0gWwotICAnZGVzdGluYXRpb24nLAotICAnZmlsZXMnLAotICAnaW5jbHVkZV9kaXJzJywKLSAgJ2luY2x1ZGVfZGlyc190YXJnZXQnLAotICAnaW5jbHVkZV9kaXJzX2hvc3QnLAotICAnaW5wdXRzJywKLSAgJ2xpYnJhcmllcycsCi0gICdvdXRwdXRzJywKLSAgJ3NvdXJjZXMnLAotXQotcGF0aF9zZWN0aW9ucyA9IFtdCi0KLQotZGVmIElzUGF0aFNlY3Rpb24oc2VjdGlvbik6Ci0gICMgSWYgc2VjdGlvbiBlbmRzIGluIG9uZSBvZiB0aGVzZSBjaGFyYWN0ZXJzLCBpdCdzIGFwcGxpZWQgdG8gYSBzZWN0aW9uCi0gICMgd2l0aG91dCB0aGUgdHJhaWxpbmcgY2hhcmFjdGVycy4gICcvJyBpcyBub3RhYmx5IGFic2VudCBmcm9tIHRoaXMgbGlzdCwKLSAgIyBiZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IGZvciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBiZSB0cmVhdGVkIGFzIGEgcGF0aC4KLSAgd2hpbGUgc2VjdGlvblstMTpdIGluICgnPScsICcrJywgJz8nLCAnIScpOgotICAgIHNlY3Rpb24gPSBzZWN0aW9uWzA6LTFdCi0KLSAgaWYgc2VjdGlvbiBpbiBwYXRoX3NlY3Rpb25zIG9yIFwKLSAgICAgc2VjdGlvbi5lbmRzd2l0aCgnX2RpcicpIG9yIHNlY3Rpb24uZW5kc3dpdGgoJ19kaXJzJykgb3IgXAotICAgICBzZWN0aW9uLmVuZHN3aXRoKCdfZmlsZScpIG9yIHNlY3Rpb24uZW5kc3dpdGgoJ19maWxlcycpIG9yIFwKLSAgICAgc2VjdGlvbi5lbmRzd2l0aCgnX3BhdGgnKSBvciBzZWN0aW9uLmVuZHN3aXRoKCdfcGF0aHMnKToKLSAgICByZXR1cm4gVHJ1ZQotICByZXR1cm4gRmFsc2UKLQotCi0jIGJhc2Vfbm9uX2NvbmZpZ3VyYWl0b25fa2V5cyBpcyBhIGxpc3Qgb2Yga2V5IG5hbWVzIHRoYXQgYmVsb25nIGluIHRoZSB0YXJnZXQKLSMgaXRzZWxmIGFuZCBzaG91bGQgbm90IGJlIHByb3BhZ2F0ZWQgaW50byBpdHMgY29uZmlndXJhdGlvbnMuICBJdCBpcyBtZXJnZWQKLSMgd2l0aCBhIGxpc3QgdGhhdCBjYW4gY29tZSBmcm9tIHRoZSBnZW5lcmF0b3IgdG8KLSMgY3JlYXRlIG5vbl9jb25maWd1cmF0aW9uX2tleXMuCi1iYXNlX25vbl9jb25maWd1cmF0aW9uX2tleXMgPSBbCi0gICMgU2VjdGlvbnMgdGhhdCBtdXN0IGV4aXN0IGluc2lkZSB0YXJnZXRzIGFuZCBub3QgY29uZmlndXJhdGlvbnMuCi0gICdhY3Rpb25zJywKLSAgJ2NvbmZpZ3VyYXRpb25zJywKLSAgJ2NvcGllcycsCi0gICdkZWZhdWx0X2NvbmZpZ3VyYXRpb24nLAotICAnZGVmYXVsdF9wcm9qZWN0JywKLSAgJ2RlcGVuZGVuY2llcycsCi0gICdkZXBlbmRlbmNpZXNfb3JpZ2luYWwnLAotICAnbGlua19sYW5ndWFnZXMnLAotICAnbGlicmFyaWVzJywKLSAgJ3Bvc3RidWlsZHMnLAotICAncHJvZHVjdF9kaXInLAotICAncHJvZHVjdF9leHRlbnNpb24nLAotICAncHJvZHVjdF9uYW1lJywKLSAgJ3Byb2R1Y3RfcHJlZml4JywKLSAgJ3J1bGVzJywKLSAgJ3J1bl9hcycsCi0gICdzb3VyY2VzJywKLSAgJ3N0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnknLAotICAnc3VwcHJlc3Nfd2lsZGNhcmQnLAotICAndGFyZ2V0X25hbWUnLAotICAndG9vbHNldCcsCi0gICd0b29sc2V0cycsCi0gICd0eXBlJywKLSAgJ3ZhcmlhbnRzJywKLQotICAjIFNlY3Rpb25zIHRoYXQgY2FuIGJlIGZvdW5kIGluc2lkZSB0YXJnZXRzIG9yIGNvbmZpZ3VyYXRpb25zLCBidXQgdGhhdAotICAjIHNob3VsZCBub3QgYmUgcHJvcGFnYXRlZCBmcm9tIHRhcmdldHMgaW50byB0aGVpciBjb25maWd1cmF0aW9ucy4KLSAgJ3ZhcmlhYmxlcycsCi1dCi1ub25fY29uZmlndXJhdGlvbl9rZXlzID0gW10KLQotIyBLZXlzIHRoYXQgZG8gbm90IGJlbG9uZyBpbnNpZGUgYSBjb25maWd1cmF0aW9uIGRpY3Rpb25hcnkuCi1pbnZhbGlkX2NvbmZpZ3VyYXRpb25fa2V5cyA9IFsKLSAgJ2FjdGlvbnMnLAotICAnYWxsX2RlcGVuZGVudF9zZXR0aW5ncycsCi0gICdjb25maWd1cmF0aW9ucycsCi0gICdkZXBlbmRlbmNpZXMnLAotICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncycsCi0gICdsaW5rX3NldHRpbmdzJywKLSAgJ3NvdXJjZXMnLAotICAnc3RhbmRhbG9uZV9zdGF0aWNfbGlicmFyeScsCi0gICd0YXJnZXRfbmFtZScsCi0gICd0eXBlJywKLV0KLQotIyBDb250cm9scyBob3cgdGhlIGdlbmVyYXRvciB3YW50IHRoZSBidWlsZCBmaWxlIHBhdGhzLgotYWJzb2x1dGVfYnVpbGRfZmlsZV9wYXRocyA9IEZhbHNlCi0KLSMgQ29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGdlbmVyYXRvciBzdXBwb3J0cyBtdWx0aXBsZSB0b29sc2V0cy4KLW11bHRpcGxlX3Rvb2xzZXRzID0gRmFsc2UKLQotIyBQYXRocyBmb3IgY29udmVydGluZyBmaWxlbGlzdCBwYXRocyB0byBvdXRwdXQgcGF0aHM6IHsKLSMgICB0b3BsZXZlbCwKLSMgICBxdWFsaWZpZWRfb3V0cHV0X2RpciwKLSMgfQotZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzID0gTm9uZQotCi1kZWYgR2V0SW5jbHVkZWRCdWlsZEZpbGVzKGJ1aWxkX2ZpbGVfcGF0aCwgYXV4X2RhdGEsIGluY2x1ZGVkPU5vbmUpOgotICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCBidWlsZCBmaWxlcyBpbmNsdWRlZCBpbnRvIGJ1aWxkX2ZpbGVfcGF0aC4KLQotICBUaGUgcmV0dXJuZWQgbGlzdCB3aWxsIGNvbnRhaW4gYnVpbGRfZmlsZV9wYXRoIGFzIHdlbGwgYXMgYWxsIG90aGVyIGZpbGVzCi0gIHRoYXQgaXQgaW5jbHVkZWQsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiAgTm90ZSB0aGF0IHRoZSBsaXN0IG1heQotICBjb250YWluIGZpbGVzIHRoYXQgd2VyZSBpbmNsdWRlZCBpbnRvIGEgY29uZGl0aW9uYWwgc2VjdGlvbiB0aGF0IGV2YWx1YXRlZAotICB0byBmYWxzZSBhbmQgd2FzIG5vdCBtZXJnZWQgaW50byBidWlsZF9maWxlX3BhdGgncyBkaWN0LgotCi0gIGF1eF9kYXRhIGlzIGEgZGljdCBjb250YWluaW5nIGEga2V5IGZvciBlYWNoIGJ1aWxkIGZpbGUgb3IgaW5jbHVkZWQgYnVpbGQKLSAgZmlsZS4gIFRob3NlIGtleXMgcHJvdmlkZSBhY2Nlc3MgdG8gZGljdHMgd2hvc2UgImluY2x1ZGVkIiBrZXlzIGNvbnRhaW4KLSAgbGlzdHMgb2YgYWxsIG90aGVyIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBidWlsZCBmaWxlLgotCi0gIGluY2x1ZGVkIHNob3VsZCBiZSBsZWZ0IGF0IGl0cyBkZWZhdWx0IE5vbmUgdmFsdWUgYnkgZXh0ZXJuYWwgY2FsbGVycy4gIEl0Ci0gIGlzIHVzZWQgZm9yIHJlY3Vyc2lvbi4KLQotICBUaGUgcmV0dXJuZWQgbGlzdCB3aWxsIG5vdCBjb250YWluIGFueSBkdXBsaWNhdGUgZW50cmllcy4gIEVhY2ggYnVpbGQgZmlsZQotICBpbiB0aGUgbGlzdCB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgIiIiCi0KLSAgaWYgaW5jbHVkZWQgPT0gTm9uZToKLSAgICBpbmNsdWRlZCA9IFtdCi0KLSAgaWYgYnVpbGRfZmlsZV9wYXRoIGluIGluY2x1ZGVkOgotICAgIHJldHVybiBpbmNsdWRlZAotCi0gIGluY2x1ZGVkLmFwcGVuZChidWlsZF9maWxlX3BhdGgpCi0KLSAgZm9yIGluY2x1ZGVkX2J1aWxkX2ZpbGUgaW4gYXV4X2RhdGFbYnVpbGRfZmlsZV9wYXRoXS5nZXQoJ2luY2x1ZGVkJywgW10pOgotICAgIEdldEluY2x1ZGVkQnVpbGRGaWxlcyhpbmNsdWRlZF9idWlsZF9maWxlLCBhdXhfZGF0YSwgaW5jbHVkZWQpCi0KLSAgcmV0dXJuIGluY2x1ZGVkCi0KLQotZGVmIENoZWNrZWRFdmFsKGZpbGVfY29udGVudHMpOgotICAiIiJSZXR1cm4gdGhlIGV2YWwgb2YgYSBneXAgZmlsZS4KLQotICBUaGUgZ3lwIGZpbGUgaXMgcmVzdHJpY3RlZCB0byBkaWN0aW9uYXJpZXMgYW5kIGxpc3RzIG9ubHksIGFuZAotICByZXBlYXRlZCBrZXlzIGFyZSBub3QgYWxsb3dlZC4KLQotICBOb3RlIHRoYXQgdGhpcyBpcyBzbG93ZXIgdGhhbiBldmFsKCkgaXMuCi0gICIiIgotCi0gIGFzdCA9IGNvbXBpbGVyLnBhcnNlKGZpbGVfY29udGVudHMpCi0gIGFzc2VydCBpc2luc3RhbmNlKGFzdCwgTW9kdWxlKQotICBjMSA9IGFzdC5nZXRDaGlsZHJlbigpCi0gIGFzc2VydCBjMVswXSBpcyBOb25lCi0gIGFzc2VydCBpc2luc3RhbmNlKGMxWzFdLCBTdG10KQotICBjMiA9IGMxWzFdLmdldENoaWxkcmVuKCkKLSAgYXNzZXJ0IGlzaW5zdGFuY2UoYzJbMF0sIERpc2NhcmQpCi0gIGMzID0gYzJbMF0uZ2V0Q2hpbGRyZW4oKQotICBhc3NlcnQgbGVuKGMzKSA9PSAxCi0gIHJldHVybiBDaGVja05vZGUoYzNbMF0sIFtdKQotCi0KLWRlZiBDaGVja05vZGUobm9kZSwga2V5cGF0aCk6Ci0gIGlmIGlzaW5zdGFuY2Uobm9kZSwgRGljdCk6Ci0gICAgYyA9IG5vZGUuZ2V0Q2hpbGRyZW4oKQotICAgIGRpY3QgPSB7fQotICAgIGZvciBuIGluIHJhbmdlKDAsIGxlbihjKSwgMik6Ci0gICAgICBhc3NlcnQgaXNpbnN0YW5jZShjW25dLCBDb25zdCkKLSAgICAgIGtleSA9IGNbbl0uZ2V0Q2hpbGRyZW4oKVswXQotICAgICAgaWYga2V5IGluIGRpY3Q6Ci0gICAgICAgIHJhaXNlIEd5cEVycm9yKCJLZXkgJyIgKyBrZXkgKyAiJyByZXBlYXRlZCBhdCBsZXZlbCAiICsKLSAgICAgICAgICAgICAgcmVwcihsZW4oa2V5cGF0aCkgKyAxKSArICIgd2l0aCBrZXkgcGF0aCAnIiArCi0gICAgICAgICAgICAgICcuJy5qb2luKGtleXBhdGgpICsgIiciKQotICAgICAga3AgPSBsaXN0KGtleXBhdGgpICAjIE1ha2UgYSBjb3B5IG9mIHRoZSBsaXN0IGZvciBkZXNjZW5kaW5nIHRoaXMgbm9kZS4KLSAgICAgIGtwLmFwcGVuZChrZXkpCi0gICAgICBkaWN0W2tleV0gPSBDaGVja05vZGUoY1tuICsgMV0sIGtwKQotICAgIHJldHVybiBkaWN0Ci0gIGVsaWYgaXNpbnN0YW5jZShub2RlLCBMaXN0KToKLSAgICBjID0gbm9kZS5nZXRDaGlsZHJlbigpCi0gICAgY2hpbGRyZW4gPSBbXQotICAgIGZvciBpbmRleCwgY2hpbGQgaW4gZW51bWVyYXRlKGMpOgotICAgICAga3AgPSBsaXN0KGtleXBhdGgpICAjIENvcHkgbGlzdC4KLSAgICAgIGtwLmFwcGVuZChyZXByKGluZGV4KSkKLSAgICAgIGNoaWxkcmVuLmFwcGVuZChDaGVja05vZGUoY2hpbGQsIGtwKSkKLSAgICByZXR1cm4gY2hpbGRyZW4KLSAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIENvbnN0KToKLSAgICByZXR1cm4gbm9kZS5nZXRDaGlsZHJlbigpWzBdCi0gIGVsc2U6Ci0gICAgcmFpc2UgVHlwZUVycm9yLCAiVW5rbm93biBBU1Qgbm9kZSBhdCBrZXkgcGF0aCAnIiArICcuJy5qb2luKGtleXBhdGgpICsgXAotICAgICAgICAgIic6ICIgKyByZXByKG5vZGUpCi0KLQotZGVmIExvYWRPbmVCdWlsZEZpbGUoYnVpbGRfZmlsZV9wYXRoLCBkYXRhLCBhdXhfZGF0YSwgdmFyaWFibGVzLCBpbmNsdWRlcywKLSAgICAgICAgICAgICAgICAgICAgIGlzX3RhcmdldCwgZGVwdGgsIGNoZWNrKToKLSAgaWYgYnVpbGRfZmlsZV9wYXRoIGluIGRhdGE6Ci0gICAgcmV0dXJuIGRhdGFbYnVpbGRfZmlsZV9wYXRoXQotCi0gIGlmIG9zLnBhdGguZXhpc3RzKGJ1aWxkX2ZpbGVfcGF0aCk6Ci0gICAgYnVpbGRfZmlsZV9jb250ZW50cyA9IG9wZW4oYnVpbGRfZmlsZV9wYXRoKS5yZWFkKCkKLSAgZWxzZToKLSAgICByYWlzZSBHeXBFcnJvcigiJXMgbm90IGZvdW5kIChjd2Q6ICVzKSIgJSAoYnVpbGRfZmlsZV9wYXRoLCBvcy5nZXRjd2QoKSkpCi0KLSAgYnVpbGRfZmlsZV9kYXRhID0gTm9uZQotICB0cnk6Ci0gICAgaWYgY2hlY2s6Ci0gICAgICBidWlsZF9maWxlX2RhdGEgPSBDaGVja2VkRXZhbChidWlsZF9maWxlX2NvbnRlbnRzKQotICAgIGVsc2U6Ci0gICAgICBidWlsZF9maWxlX2RhdGEgPSBldmFsKGJ1aWxkX2ZpbGVfY29udGVudHMsIHsnX19idWlsdGluc19fJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCi0gIGV4Y2VwdCBTeW50YXhFcnJvciwgZToKLSAgICBlLmZpbGVuYW1lID0gYnVpbGRfZmlsZV9wYXRoCi0gICAgcmFpc2UKLSAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICBneXAuY29tbW9uLkV4Y2VwdGlvbkFwcGVuZChlLCAnd2hpbGUgcmVhZGluZyAnICsgYnVpbGRfZmlsZV9wYXRoKQotICAgIHJhaXNlCi0KLSAgZGF0YVtidWlsZF9maWxlX3BhdGhdID0gYnVpbGRfZmlsZV9kYXRhCi0gIGF1eF9kYXRhW2J1aWxkX2ZpbGVfcGF0aF0gPSB7fQotCi0gICMgU2NhbiBmb3IgaW5jbHVkZXMgYW5kIG1lcmdlIHRoZW0gaW4uCi0gIHRyeToKLSAgICBpZiBpc190YXJnZXQ6Ci0gICAgICBMb2FkQnVpbGRGaWxlSW5jbHVkZXNJbnRvRGljdChidWlsZF9maWxlX2RhdGEsIGJ1aWxkX2ZpbGVfcGF0aCwgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eF9kYXRhLCB2YXJpYWJsZXMsIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2spCi0gICAgZWxzZToKLSAgICAgIExvYWRCdWlsZEZpbGVJbmNsdWRlc0ludG9EaWN0KGJ1aWxkX2ZpbGVfZGF0YSwgYnVpbGRfZmlsZV9wYXRoLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV4X2RhdGEsIHZhcmlhYmxlcywgTm9uZSwgZGVwdGgsIGNoZWNrKQotICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgIGd5cC5jb21tb24uRXhjZXB0aW9uQXBwZW5kKGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaWxlIHJlYWRpbmcgaW5jbHVkZXMgb2YgJyArIGJ1aWxkX2ZpbGVfcGF0aCkKLSAgICByYWlzZQotCi0gIHJldHVybiBidWlsZF9maWxlX2RhdGEKLQotCi1kZWYgTG9hZEJ1aWxkRmlsZUluY2x1ZGVzSW50b0RpY3Qoc3ViZGljdCwgc3ViZGljdF9wYXRoLCBkYXRhLCBhdXhfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMsIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2spOgotICBpbmNsdWRlc19saXN0ID0gW10KLSAgaWYgaW5jbHVkZXMgIT0gTm9uZToKLSAgICBpbmNsdWRlc19saXN0LmV4dGVuZChpbmNsdWRlcykKLSAgaWYgJ2luY2x1ZGVzJyBpbiBzdWJkaWN0OgotICAgIGZvciBpbmNsdWRlIGluIHN1YmRpY3RbJ2luY2x1ZGVzJ106Ci0gICAgICAjIGV4cGFuZCBlbnZpcm9ubWVudCAmIGNvbW1hbmQgbGluZSB2YXJpYWJsZXMgaW4gaW5jbHVkZSBwYXRoLgotICAgICAgaW5jbHVkZSA9IEV4cGFuZFZhcmlhYmxlcyhpbmNsdWRlLCBGYWxzZSwgdmFyaWFibGVzLCBzdWJkaWN0X3BhdGgpCi0gICAgICAjICJpbmNsdWRlIiBpcyBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gc3ViZGljdF9wYXRoLCBzbyBjb21wdXRlIHRoZSByZWFsCi0gICAgICAjIHBhdGggdG8gaW5jbHVkZSBieSBhcHBlbmRpbmcgdGhlIHByb3ZpZGVkICJpbmNsdWRlIiB0byB0aGUgZGlyZWN0b3J5Ci0gICAgICAjIGluIHdoaWNoIHN1YmRpY3RfcGF0aCByZXNpZGVzLgotICAgICAgcmVsYXRpdmVfaW5jbHVkZSA9IFwKLSAgICAgICAgICBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3ViZGljdF9wYXRoKSwgaW5jbHVkZSkpCi0gICAgICBpbmNsdWRlc19saXN0LmFwcGVuZChyZWxhdGl2ZV9pbmNsdWRlKQotICAgICMgVW5ob29rIHRoZSBpbmNsdWRlcyBsaXN0LCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgZGVsIHN1YmRpY3RbJ2luY2x1ZGVzJ10KLQotICAjIE1lcmdlIGluIHRoZSBpbmNsdWRlZCBmaWxlcy4KLSAgZm9yIGluY2x1ZGUgaW4gaW5jbHVkZXNfbGlzdDoKLSAgICBpZiBub3QgJ2luY2x1ZGVkJyBpbiBhdXhfZGF0YVtzdWJkaWN0X3BhdGhdOgotICAgICAgYXV4X2RhdGFbc3ViZGljdF9wYXRoXVsnaW5jbHVkZWQnXSA9IFtdCi0gICAgYXV4X2RhdGFbc3ViZGljdF9wYXRoXVsnaW5jbHVkZWQnXS5hcHBlbmQoaW5jbHVkZSkKLQotICAgIGd5cC5EZWJ1Z091dHB1dChneXAuREVCVUdfSU5DTFVERVMsICJMb2FkaW5nIEluY2x1ZGVkIEZpbGU6ICclcyciICUgaW5jbHVkZSkKLQotICAgIG9sZF9kZXB0aF9zb3VyY2UgPSB2YXJpYWJsZXNbJ19fREVQVEhfU09VUkNFX18nXQotICAgIF9VcGRhdGVEZXB0aChkZXB0aCwgaW5jbHVkZSwgdmFyaWFibGVzKQotICAgIE1lcmdlRGljdHMoc3ViZGljdCwKLSAgICAgICAgICAgICAgIExvYWRPbmVCdWlsZEZpbGUoaW5jbHVkZSwgZGF0YSwgYXV4X2RhdGEsIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgRmFsc2UsIGRlcHRoLCBjaGVjayksCi0gICAgICAgICAgICAgICBzdWJkaWN0X3BhdGgsIGluY2x1ZGUpCi0gICAgX1VwZGF0ZURlcHRoKGRlcHRoLCBvbGRfZGVwdGhfc291cmNlLCB2YXJpYWJsZXMpCi0KLSAgIyBSZWN1cnNlIGludG8gc3ViZGljdGlvbmFyaWVzLgotICBmb3IgaywgdiBpbiBzdWJkaWN0Lml0ZXJpdGVtcygpOgotICAgIGlmIHYuX19jbGFzc19fID09IGRpY3Q6Ci0gICAgICBMb2FkQnVpbGRGaWxlSW5jbHVkZXNJbnRvRGljdCh2LCBzdWJkaWN0X3BhdGgsIGRhdGEsIGF1eF9kYXRhLCB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBkZXB0aCwgY2hlY2spCi0gICAgZWxpZiB2Ll9fY2xhc3NfXyA9PSBsaXN0OgotICAgICAgTG9hZEJ1aWxkRmlsZUluY2x1ZGVzSW50b0xpc3Qodiwgc3ViZGljdF9wYXRoLCBkYXRhLCBhdXhfZGF0YSwgdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgsIGNoZWNrKQotCi0KLSMgVGhpcyByZWN1cnNlcyBpbnRvIGxpc3RzIHNvIHRoYXQgaXQgY2FuIGxvb2sgZm9yIGRpY3RzLgotZGVmIExvYWRCdWlsZEZpbGVJbmNsdWRlc0ludG9MaXN0KHN1Ymxpc3QsIHN1Ymxpc3RfcGF0aCwgZGF0YSwgYXV4X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBkZXB0aCwgY2hlY2spOgotICBmb3IgaXRlbSBpbiBzdWJsaXN0OgotICAgIGlmIGl0ZW0uX19jbGFzc19fID09IGRpY3Q6Ci0gICAgICBMb2FkQnVpbGRGaWxlSW5jbHVkZXNJbnRvRGljdChpdGVtLCBzdWJsaXN0X3BhdGgsIGRhdGEsIGF1eF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBOb25lLCBkZXB0aCwgY2hlY2spCi0gICAgZWxpZiBpdGVtLl9fY2xhc3NfXyA9PSBsaXN0OgotICAgICAgTG9hZEJ1aWxkRmlsZUluY2x1ZGVzSW50b0xpc3QoaXRlbSwgc3VibGlzdF9wYXRoLCBkYXRhLCBhdXhfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcywgZGVwdGgsIGNoZWNrKQotCi0jIFByb2Nlc3NlcyB0b29sc2V0cyBpbiBhbGwgdGhlIHRhcmdldHMuIFRoaXMgcmVjdXJzZXMgaW50byBjb25kaXRpb24gZW50cmllcwotIyBzaW5jZSB0aGV5IGNhbiBjb250YWluIHRvb2xzZXRzIGFzIHdlbGwuCi1kZWYgUHJvY2Vzc1Rvb2xzZXRzSW5EaWN0KGRhdGEpOgotICBpZiAndGFyZ2V0cycgaW4gZGF0YToKLSAgICB0YXJnZXRfbGlzdCA9IGRhdGFbJ3RhcmdldHMnXQotICAgIG5ld190YXJnZXRfbGlzdCA9IFtdCi0gICAgZm9yIHRhcmdldCBpbiB0YXJnZXRfbGlzdDoKLSAgICAgICMgSWYgdGhpcyB0YXJnZXQgYWxyZWFkeSBoYXMgYW4gZXhwbGljaXQgJ3Rvb2xzZXQnLCBhbmQgbm8gJ3Rvb2xzZXRzJwotICAgICAgIyBsaXN0LCBkb24ndCBtb2RpZnkgaXQgZnVydGhlci4KLSAgICAgIGlmICd0b29sc2V0JyBpbiB0YXJnZXQgYW5kICd0b29sc2V0cycgbm90IGluIHRhcmdldDoKLSAgICAgICAgbmV3X3RhcmdldF9saXN0LmFwcGVuZCh0YXJnZXQpCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiBtdWx0aXBsZV90b29sc2V0czoKLSAgICAgICAgdG9vbHNldHMgPSB0YXJnZXQuZ2V0KCd0b29sc2V0cycsIFsndGFyZ2V0J10pCi0gICAgICBlbHNlOgotICAgICAgICB0b29sc2V0cyA9IFsndGFyZ2V0J10KLSAgICAgICMgTWFrZSBzdXJlIHRoaXMgJ3Rvb2xzZXRzJyBkZWZpbml0aW9uIGlzIG9ubHkgcHJvY2Vzc2VkIG9uY2UuCi0gICAgICBpZiAndG9vbHNldHMnIGluIHRhcmdldDoKLSAgICAgICAgZGVsIHRhcmdldFsndG9vbHNldHMnXQotICAgICAgaWYgbGVuKHRvb2xzZXRzKSA+IDA6Ci0gICAgICAgICMgT3B0aW1pemF0aW9uOiBvbmx5IGRvIGNvcGllcyBpZiBtb3JlIHRoYW4gb25lIHRvb2xzZXQgaXMgc3BlY2lmaWVkLgotICAgICAgICBmb3IgYnVpbGQgaW4gdG9vbHNldHNbMTpdOgotICAgICAgICAgIG5ld190YXJnZXQgPSBjb3B5LmRlZXBjb3B5KHRhcmdldCkKLSAgICAgICAgICBuZXdfdGFyZ2V0Wyd0b29sc2V0J10gPSBidWlsZAotICAgICAgICAgIG5ld190YXJnZXRfbGlzdC5hcHBlbmQobmV3X3RhcmdldCkKLSAgICAgICAgdGFyZ2V0Wyd0b29sc2V0J10gPSB0b29sc2V0c1swXQotICAgICAgICBuZXdfdGFyZ2V0X2xpc3QuYXBwZW5kKHRhcmdldCkKLSAgICBkYXRhWyd0YXJnZXRzJ10gPSBuZXdfdGFyZ2V0X2xpc3QKLSAgaWYgJ2NvbmRpdGlvbnMnIGluIGRhdGE6Ci0gICAgZm9yIGNvbmRpdGlvbiBpbiBkYXRhWydjb25kaXRpb25zJ106Ci0gICAgICBpZiBpc2luc3RhbmNlKGNvbmRpdGlvbiwgbGlzdCk6Ci0gICAgICAgIGZvciBjb25kaXRpb25fZGljdCBpbiBjb25kaXRpb25bMTpdOgotICAgICAgICAgIFByb2Nlc3NUb29sc2V0c0luRGljdChjb25kaXRpb25fZGljdCkKLQotCi1kZWYgX1VwZGF0ZURlcHRoKGRlcHRoLCBidWlsZF9maWxlX3BhdGgsIHZhcmlhYmxlcyk6Ci0gICMgSWYgZGVwdGggaXMgc2V0LCBwcmVkZWZpbmUgdGhlIERFUFRIIHZhcmlhYmxlIHRvIGJlIGEgcmVsYXRpdmUgcGF0aCBmcm9tCi0gICMgdGhpcyBidWlsZCBmaWxlJ3MgZGlyZWN0b3J5IHRvIHRoZSBkaXJlY3RvcnkgaWRlbnRpZmllZCBieSBkZXB0aC4KLSAgaWYgZGVwdGg6Ci0gICAgIyBUT0RPKGRnbGF6a292KSBUaGUgYmFja3NsYXNoL2ZvcndhcmQtc2xhc2ggcmVwbGFjZW1lbnQgYXQgdGhlIGVuZCBpcyBhCi0gICAgIyB0ZW1wb3JhcnkgbWVhc3VyZS4gVGhpcyBzaG91bGQgcmVhbGx5IGJlIGFkZHJlc3NlZCBieSBrZWVwaW5nIGFsbCBwYXRocwotICAgICMgaW4gUE9TSVggdW50aWwgYWN0dWFsIHByb2plY3QgZ2VuZXJhdGlvbi4KLSAgICBkID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoZGVwdGgsIG9zLnBhdGguZGlybmFtZShidWlsZF9maWxlX3BhdGgpKQotICAgIGlmIGQgPT0gJyc6Ci0gICAgICB2YXJpYWJsZXNbJ0RFUFRIJ10gPSAnLicKLSAgICBlbHNlOgotICAgICAgdmFyaWFibGVzWydERVBUSCddID0gZC5yZXBsYWNlKCdcXCcsICcvJykKLSAgICB2YXJpYWJsZXNbJ19fREVQVEhfU09VUkNFX18nXSA9IGJ1aWxkX2ZpbGVfcGF0aAotICAgIGlmIF9ERUJVR19ERVBUSDoKLSAgICAgIHByaW50ICclczogJXMgLT4gREVQVEgsICVzIC0+IF9fREVQVEhfU09VUkNFX18nICUgKAotICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoYnVpbGRfZmlsZV9wYXRoKSwKLSAgICAgICAgICB2YXJpYWJsZXNbJ0RFUFRIJ10sCi0gICAgICAgICAgb3MucGF0aC5iYXNlbmFtZSh2YXJpYWJsZXNbJ19fREVQVEhfU09VUkNFX18nXSkpCi0KLQotIyBUT0RPKG1hcmspOiBJIGRvbid0IGxvdmUgdGhpcyBuYW1lLiAgSXQganVzdCBtZWFucyB0aGF0IGl0J3MgZ29pbmcgdG8gbG9hZAotIyBhIGJ1aWxkIGZpbGUgdGhhdCBjb250YWlucyB0YXJnZXRzIGFuZCBpcyBleHBlY3RlZCB0byBwcm92aWRlIGEgdGFyZ2V0cyBkaWN0Ci0jIHRoYXQgY29udGFpbnMgdGhlIHRhcmdldHMuLi4KLWRlZiBMb2FkVGFyZ2V0QnVpbGRGaWxlKGJ1aWxkX2ZpbGVfcGF0aCwgZGF0YSwgYXV4X2RhdGEsIHZhcmlhYmxlcywgaW5jbHVkZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCwgY2hlY2ssIGxvYWRfZGVwZW5kZW5jaWVzKToKLSAgX1VwZGF0ZURlcHRoKGRlcHRoLCBidWlsZF9maWxlX3BhdGgsIHZhcmlhYmxlcykKLQotICAjIElmIHRoZSBnZW5lcmF0b3IgbmVlZHMgYWJzb2x1ZSBwYXRocywgdGhlbiBkbyBzby4KLSAgaWYgYWJzb2x1dGVfYnVpbGRfZmlsZV9wYXRoczoKLSAgICBidWlsZF9maWxlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoYnVpbGRfZmlsZV9wYXRoKQotCi0gIGlmIGJ1aWxkX2ZpbGVfcGF0aCBpbiBkYXRhWyd0YXJnZXRfYnVpbGRfZmlsZXMnXToKLSAgICAjIEFscmVhZHkgbG9hZGVkLgotICAgIHJldHVybiBGYWxzZQotICBkYXRhWyd0YXJnZXRfYnVpbGRfZmlsZXMnXS5hZGQoYnVpbGRfZmlsZV9wYXRoKQotCi0gIGd5cC5EZWJ1Z091dHB1dChneXAuREVCVUdfSU5DTFVERVMsCi0gICAgICAgICAgICAgICAgICAiTG9hZGluZyBUYXJnZXQgQnVpbGQgRmlsZSAnJXMnIiAlIGJ1aWxkX2ZpbGVfcGF0aCkKLQotICBidWlsZF9maWxlX2RhdGEgPSBMb2FkT25lQnVpbGRGaWxlKGJ1aWxkX2ZpbGVfcGF0aCwgZGF0YSwgYXV4X2RhdGEsIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcywgVHJ1ZSwgZGVwdGgsIGNoZWNrKQotCi0gICMgU3RvcmUgREVQVEggZm9yIGxhdGVyIHVzZSBpbiBnZW5lcmF0b3JzLgotICBidWlsZF9maWxlX2RhdGFbJ19ERVBUSCddID0gZGVwdGgKLQotICAjIFNldCB1cCB0aGUgaW5jbHVkZWRfZmlsZXMga2V5IGluZGljYXRpbmcgd2hpY2ggLmd5cCBmaWxlcyBjb250cmlidXRlZCB0bwotICAjIHRoaXMgdGFyZ2V0IGRpY3QuCi0gIGlmICdpbmNsdWRlZF9maWxlcycgaW4gYnVpbGRfZmlsZV9kYXRhOgotICAgIHJhaXNlIEd5cEVycm9yKGJ1aWxkX2ZpbGVfcGF0aCArICcgbXVzdCBub3QgY29udGFpbiBpbmNsdWRlZF9maWxlcyBrZXknKQotCi0gIGluY2x1ZGVkID0gR2V0SW5jbHVkZWRCdWlsZEZpbGVzKGJ1aWxkX2ZpbGVfcGF0aCwgYXV4X2RhdGEpCi0gIGJ1aWxkX2ZpbGVfZGF0YVsnaW5jbHVkZWRfZmlsZXMnXSA9IFtdCi0gIGZvciBpbmNsdWRlZF9maWxlIGluIGluY2x1ZGVkOgotICAgICMgaW5jbHVkZWRfZmlsZSBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIGJ1dCBpdCBuZWVkcyB0bwotICAgICMgYmUgbWFkZSByZWxhdGl2ZSB0byBidWlsZF9maWxlX3BhdGgncyBkaXJlY3RvcnkuCi0gICAgaW5jbHVkZWRfcmVsYXRpdmUgPSBcCi0gICAgICAgIGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKGluY2x1ZGVkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShidWlsZF9maWxlX3BhdGgpKQotICAgIGJ1aWxkX2ZpbGVfZGF0YVsnaW5jbHVkZWRfZmlsZXMnXS5hcHBlbmQoaW5jbHVkZWRfcmVsYXRpdmUpCi0KLSAgIyBEbyBhIGZpcnN0IHJvdW5kIG9mIHRvb2xzZXRzIGV4cGFuc2lvbiBzbyB0aGF0IGNvbmRpdGlvbnMgY2FuIGJlIGRlZmluZWQKLSAgIyBwZXIgdG9vbHNldC4KLSAgUHJvY2Vzc1Rvb2xzZXRzSW5EaWN0KGJ1aWxkX2ZpbGVfZGF0YSkKLQotICAjIEFwcGx5ICJwcmUiLyJlYXJseSIgdmFyaWFibGUgZXhwYW5zaW9ucyBhbmQgY29uZGl0aW9uIGV2YWx1YXRpb25zLgotICBQcm9jZXNzVmFyaWFibGVzQW5kQ29uZGl0aW9uc0luRGljdCgKLSAgICAgIGJ1aWxkX2ZpbGVfZGF0YSwgUEhBU0VfRUFSTFksIHZhcmlhYmxlcywgYnVpbGRfZmlsZV9wYXRoKQotCi0gICMgU2luY2Ugc29tZSB0b29sc2V0cyBtaWdodCBoYXZlIGJlZW4gZGVmaW5lZCBjb25kaXRpb25hbGx5LCBwZXJmb3JtCi0gICMgYSBzZWNvbmQgcm91bmQgb2YgdG9vbHNldHMgZXhwYW5zaW9uIG5vdy4KLSAgUHJvY2Vzc1Rvb2xzZXRzSW5EaWN0KGJ1aWxkX2ZpbGVfZGF0YSkKLQotICAjIExvb2sgYXQgZWFjaCBwcm9qZWN0J3MgdGFyZ2V0X2RlZmF1bHRzIGRpY3QsIGFuZCBtZXJnZSBzZXR0aW5ncyBpbnRvCi0gICMgdGFyZ2V0cy4KLSAgaWYgJ3RhcmdldF9kZWZhdWx0cycgaW4gYnVpbGRfZmlsZV9kYXRhOgotICAgIGlmICd0YXJnZXRzJyBub3QgaW4gYnVpbGRfZmlsZV9kYXRhOgotICAgICAgcmFpc2UgR3lwRXJyb3IoIlVuYWJsZSB0byBmaW5kIHRhcmdldHMgaW4gYnVpbGQgZmlsZSAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgYnVpbGRfZmlsZV9wYXRoKQotCi0gICAgaW5kZXggPSAwCi0gICAgd2hpbGUgaW5kZXggPCBsZW4oYnVpbGRfZmlsZV9kYXRhWyd0YXJnZXRzJ10pOgotICAgICAgIyBUaGlzIHByb2NlZHVyZSBuZWVkcyB0byBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgdGFyZ2V0X2RlZmF1bHRzIGlzCi0gICAgICAjIHVzZWQgYXMgZGVmYXVsdHMsIGFuZCB0aGUgaW5kaXZpZHVhbCB0YXJnZXRzIGluaGVyaXQgZnJvbSB0aGF0LgotICAgICAgIyBUaGUgaW5kaXZpZHVhbCB0YXJnZXRzIG5lZWQgdG8gYmUgbWVyZ2VkIGludG8gdGhlIGRlZmF1bHRzLiAgTWFrZQotICAgICAgIyBhIGRlZXAgY29weSBvZiB0aGUgZGVmYXVsdHMgZm9yIGVhY2ggdGFyZ2V0LCBtZXJnZSB0aGUgdGFyZ2V0IGRpY3QKLSAgICAgICMgYXMgZm91bmQgaW4gdGhlIGlucHV0IGZpbGUgaW50byB0aGF0IGNvcHksIGFuZCB0aGVuIGhvb2sgdXAgdGhlCi0gICAgICAjIGNvcHkgd2l0aCB0aGUgdGFyZ2V0LXNwZWNpZmljIGRhdGEgbWVyZ2VkIGludG8gaXQgYXMgdGhlIHJlcGxhY2VtZW50Ci0gICAgICAjIHRhcmdldCBkaWN0LgotICAgICAgb2xkX3RhcmdldF9kaWN0ID0gYnVpbGRfZmlsZV9kYXRhWyd0YXJnZXRzJ11baW5kZXhdCi0gICAgICBuZXdfdGFyZ2V0X2RpY3QgPSBjb3B5LmRlZXBjb3B5KGJ1aWxkX2ZpbGVfZGF0YVsndGFyZ2V0X2RlZmF1bHRzJ10pCi0gICAgICBNZXJnZURpY3RzKG5ld190YXJnZXRfZGljdCwgb2xkX3RhcmdldF9kaWN0LAotICAgICAgICAgICAgICAgICBidWlsZF9maWxlX3BhdGgsIGJ1aWxkX2ZpbGVfcGF0aCkKLSAgICAgIGJ1aWxkX2ZpbGVfZGF0YVsndGFyZ2V0cyddW2luZGV4XSA9IG5ld190YXJnZXRfZGljdAotICAgICAgaW5kZXggKz0gMQotCi0gICAgIyBObyBsb25nZXIgbmVlZGVkLgotICAgIGRlbCBidWlsZF9maWxlX2RhdGFbJ3RhcmdldF9kZWZhdWx0cyddCi0KLSAgIyBMb29rIGZvciBkZXBlbmRlbmNpZXMuICBUaGlzIG1lYW5zIHRoYXQgZGVwZW5kZW5jeSByZXNvbHV0aW9uIG9jY3VycwotICAjIGFmdGVyICJwcmUiIGNvbmRpdGlvbmFscyBhbmQgdmFyaWFibGUgZXhwYW5zaW9uLCBidXQgYmVmb3JlICJwb3N0IiAtCi0gICMgaW4gb3RoZXIgd29yZHMsIHlvdSBjYW4ndCBwdXQgYSAiZGVwZW5kZW5jaWVzIiBzZWN0aW9uIGluc2lkZSBhICJwb3N0IgotICAjIGNvbmRpdGlvbmFsIHdpdGhpbiBhIHRhcmdldC4KLQotICBkZXBlbmRlbmNpZXMgPSBbXQotICBpZiAndGFyZ2V0cycgaW4gYnVpbGRfZmlsZV9kYXRhOgotICAgIGZvciB0YXJnZXRfZGljdCBpbiBidWlsZF9maWxlX2RhdGFbJ3RhcmdldHMnXToKLSAgICAgIGlmICdkZXBlbmRlbmNpZXMnIG5vdCBpbiB0YXJnZXRfZGljdDoKLSAgICAgICAgY29udGludWUKLSAgICAgIGZvciBkZXBlbmRlbmN5IGluIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXToKLSAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZCgKLSAgICAgICAgICAgIGd5cC5jb21tb24uUmVzb2x2ZVRhcmdldChidWlsZF9maWxlX3BhdGgsIGRlcGVuZGVuY3ksIE5vbmUpWzBdKQotCi0gIGlmIGxvYWRfZGVwZW5kZW5jaWVzOgotICAgIGZvciBkZXBlbmRlbmN5IGluIGRlcGVuZGVuY2llczoKLSAgICAgIHRyeToKLSAgICAgICAgTG9hZFRhcmdldEJ1aWxkRmlsZShkZXBlbmRlbmN5LCBkYXRhLCBhdXhfZGF0YSwgdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2ssIGxvYWRfZGVwZW5kZW5jaWVzKQotICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgZ3lwLmNvbW1vbi5FeGNlcHRpb25BcHBlbmQoCi0gICAgICAgICAgZSwgJ3doaWxlIGxvYWRpbmcgZGVwZW5kZW5jaWVzIG9mICVzJyAlIGJ1aWxkX2ZpbGVfcGF0aCkKLSAgICAgICAgcmFpc2UKLSAgZWxzZToKLSAgICByZXR1cm4gKGJ1aWxkX2ZpbGVfcGF0aCwgZGVwZW5kZW5jaWVzKQotCi0KLWRlZiBDYWxsTG9hZFRhcmdldEJ1aWxkRmlsZShnbG9iYWxfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfZmlsZV9wYXRoLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eF9kYXRhLCB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMsIGRlcHRoLCBjaGVjayk6Ci0gICIiIldyYXBwZXIgYXJvdW5kIExvYWRUYXJnZXRCdWlsZEZpbGUgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuCi0KLSAgICAgVGhpcyB3cmFwcGVyIGlzIHVzZWQgd2hlbiBMb2FkVGFyZ2V0QnVpbGRGaWxlIGlzIGV4ZWN1dGVkIGluCi0gICAgIGEgd29ya2VyIHByb2Nlc3MuCi0gICIiIgotCi0gIHRyeToKLSAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQotCi0gICAgIyBBcHBseSBnbG9iYWxzIHNvIHRoYXQgdGhlIHdvcmtlciBwcm9jZXNzIGJlaGF2ZXMgdGhlIHNhbWUuCi0gICAgZm9yIGtleSwgdmFsdWUgaW4gZ2xvYmFsX2ZsYWdzLml0ZXJpdGVtcygpOgotICAgICAgZ2xvYmFscygpW2tleV0gPSB2YWx1ZQotCi0gICAgIyBTYXZlIHRoZSBrZXlzIHNvIHdlIGNhbiByZXR1cm4gZGF0YSB0aGF0IGNoYW5nZWQuCi0gICAgZGF0YV9rZXlzID0gc2V0KGRhdGEpCi0gICAgYXV4X2RhdGFfa2V5cyA9IHNldChhdXhfZGF0YSkKLQotICAgIHJlc3VsdCA9IExvYWRUYXJnZXRCdWlsZEZpbGUoYnVpbGRfZmlsZV9wYXRoLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV4X2RhdGEsIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2ssIEZhbHNlKQotICAgIGlmIG5vdCByZXN1bHQ6Ci0gICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAoYnVpbGRfZmlsZV9wYXRoLCBkZXBlbmRlbmNpZXMpID0gcmVzdWx0Ci0KLSAgICBkYXRhX291dCA9IHt9Ci0gICAgZm9yIGtleSBpbiBkYXRhOgotICAgICAgaWYga2V5ID09ICd0YXJnZXRfYnVpbGRfZmlsZXMnOgotICAgICAgICBjb250aW51ZQotICAgICAgaWYga2V5IG5vdCBpbiBkYXRhX2tleXM6Ci0gICAgICAgIGRhdGFfb3V0W2tleV0gPSBkYXRhW2tleV0KLSAgICBhdXhfZGF0YV9vdXQgPSB7fQotICAgIGZvciBrZXkgaW4gYXV4X2RhdGE6Ci0gICAgICBpZiBrZXkgbm90IGluIGF1eF9kYXRhX2tleXM6Ci0gICAgICAgIGF1eF9kYXRhX291dFtrZXldID0gYXV4X2RhdGFba2V5XQotCi0gICAgIyBUaGlzIGdldHMgc2VyaWFsaXplZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBtYWluIHByb2Nlc3MgdmlhIGEgcGlwZS4KLSAgICAjIEl0J3MgaGFuZGxlZCBpbiBMb2FkVGFyZ2V0QnVpbGRGaWxlQ2FsbGJhY2suCi0gICAgcmV0dXJuIChidWlsZF9maWxlX3BhdGgsCi0gICAgICAgICAgICBkYXRhX291dCwKLSAgICAgICAgICAgIGF1eF9kYXRhX291dCwKLSAgICAgICAgICAgIGRlcGVuZGVuY2llcykKLSAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICBwcmludCAiRXhjZXB0aW9uOiAiLCBlCi0gICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBQYXJhbGxlbFByb2Nlc3NpbmdFcnJvcihFeGNlcHRpb24pOgotICBwYXNzCi0KLQotY2xhc3MgUGFyYWxsZWxTdGF0ZShvYmplY3QpOgotICAiIiJDbGFzcyB0byBrZWVwIHRyYWNrIG9mIHN0YXRlIHdoZW4gcHJvY2Vzc2luZyBpbnB1dCBmaWxlcyBpbiBwYXJhbGxlbC4KLQotICBJZiBidWlsZCBmaWxlcyBhcmUgbG9hZGVkIGluIHBhcmFsbGVsLCB1c2UgdGhpcyB0byBrZWVwIHRyYWNrIG9mCi0gIHN0YXRlIGR1cmluZyBmYXJtaW5nIG91dCBhbmQgcHJvY2Vzc2luZyBwYXJhbGxlbCBqb2JzLiBJdCdzIHN0b3JlZAotICBpbiBhIGdsb2JhbCBzbyB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gaGF2ZSBhY2Nlc3MgdG8gaXQuCi0gICIiIgotCi0gIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAjIFRoZSBtdWx0aXByb2Nlc3NpbmcgcG9vbC4KLSAgICBzZWxmLnBvb2wgPSBOb25lCi0gICAgIyBUaGUgY29uZGl0aW9uIHZhcmlhYmxlIHVzZWQgdG8gcHJvdGVjdCB0aGlzIG9iamVjdCBhbmQgbm90aWZ5Ci0gICAgIyB0aGUgbWFpbiBsb29wIHdoZW4gdGhlcmUgbWlnaHQgYmUgbW9yZSBkYXRhIHRvIHByb2Nlc3MuCi0gICAgc2VsZi5jb25kaXRpb24gPSBOb25lCi0gICAgIyBUaGUgImRhdGEiIGRpY3QgdGhhdCB3YXMgcGFzc2VkIHRvIExvYWRUYXJnZXRCdWlsZEZpbGVQYXJhbGxlbAotICAgIHNlbGYuZGF0YSA9IE5vbmUKLSAgICAjIFRoZSAiYXV4X2RhdGEiIGRpY3QgdGhhdCB3YXMgcGFzc2VkIHRvIExvYWRUYXJnZXRCdWlsZEZpbGVQYXJhbGxlbAotICAgIHNlbGYuYXV4X2RhdGEgPSBOb25lCi0gICAgIyBUaGUgbnVtYmVyIG9mIHBhcmFsbGVsIGNhbGxzIG91dHN0YW5kaW5nOyBkZWNyZW1lbnRlZCB3aGVuIGEgcmVzcG9uc2UKLSAgICAjIHdhcyByZWNlaXZlZC4KLSAgICBzZWxmLnBlbmRpbmcgPSAwCi0gICAgIyBUaGUgc2V0IG9mIGFsbCBidWlsZCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBzY2hlZHVsZWQsIHNvIHdlIGRvbid0Ci0gICAgIyBzY2hlZHVsZSB0aGUgc2FtZSBvbmUgdHdpY2UuCi0gICAgc2VsZi5zY2hlZHVsZWQgPSBzZXQoKQotICAgICMgQSBsaXN0IG9mIGRlcGVuZGVuY3kgYnVpbGQgZmlsZSBwYXRocyB0aGF0IGhhdmVuJ3QgYmVlbiBzY2hlZHVsZWQgeWV0LgotICAgIHNlbGYuZGVwZW5kZW5jaWVzID0gW10KLSAgICAjIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIGEgY2hpbGQgcHJvY2Vzcy4KLSAgICBzZWxmLmVycm9yID0gRmFsc2UKLQotICBkZWYgTG9hZFRhcmdldEJ1aWxkRmlsZUNhbGxiYWNrKHNlbGYsIHJlc3VsdCk6Ci0gICAgIiIiSGFuZGxlIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgTG9hZFRhcmdldEJ1aWxkRmlsZSBpbiBhbm90aGVyIHByb2Nlc3MuCi0gICAgIiIiCi0gICAgc2VsZi5jb25kaXRpb24uYWNxdWlyZSgpCi0gICAgaWYgbm90IHJlc3VsdDoKLSAgICAgIHNlbGYuZXJyb3IgPSBUcnVlCi0gICAgICBzZWxmLmNvbmRpdGlvbi5ub3RpZnkoKQotICAgICAgc2VsZi5jb25kaXRpb24ucmVsZWFzZSgpCi0gICAgICByZXR1cm4KLSAgICAoYnVpbGRfZmlsZV9wYXRoMCwgZGF0YTAsIGF1eF9kYXRhMCwgZGVwZW5kZW5jaWVzMCkgPSByZXN1bHQKLSAgICBzZWxmLmRhdGFbJ3RhcmdldF9idWlsZF9maWxlcyddLmFkZChidWlsZF9maWxlX3BhdGgwKQotICAgIGZvciBrZXkgaW4gZGF0YTA6Ci0gICAgICBzZWxmLmRhdGFba2V5XSA9IGRhdGEwW2tleV0KLSAgICBmb3Iga2V5IGluIGF1eF9kYXRhMDoKLSAgICAgIHNlbGYuYXV4X2RhdGFba2V5XSA9IGF1eF9kYXRhMFtrZXldCi0gICAgZm9yIG5ld19kZXBlbmRlbmN5IGluIGRlcGVuZGVuY2llczA6Ci0gICAgICBpZiBuZXdfZGVwZW5kZW5jeSBub3QgaW4gc2VsZi5zY2hlZHVsZWQ6Ci0gICAgICAgIHNlbGYuc2NoZWR1bGVkLmFkZChuZXdfZGVwZW5kZW5jeSkKLSAgICAgICAgc2VsZi5kZXBlbmRlbmNpZXMuYXBwZW5kKG5ld19kZXBlbmRlbmN5KQotICAgIHNlbGYucGVuZGluZyAtPSAxCi0gICAgc2VsZi5jb25kaXRpb24ubm90aWZ5KCkKLSAgICBzZWxmLmNvbmRpdGlvbi5yZWxlYXNlKCkKLQotCi1kZWYgTG9hZFRhcmdldEJ1aWxkRmlsZVBhcmFsbGVsKGJ1aWxkX2ZpbGVfcGF0aCwgZGF0YSwgYXV4X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcywgaW5jbHVkZXMsIGRlcHRoLCBjaGVjayk6Ci0gIHBhcmFsbGVsX3N0YXRlID0gUGFyYWxsZWxTdGF0ZSgpCi0gIHBhcmFsbGVsX3N0YXRlLmNvbmRpdGlvbiA9IHRocmVhZGluZy5Db25kaXRpb24oKQotICBwYXJhbGxlbF9zdGF0ZS5kZXBlbmRlbmNpZXMgPSBbYnVpbGRfZmlsZV9wYXRoXQotICBwYXJhbGxlbF9zdGF0ZS5zY2hlZHVsZWQgPSBzZXQoW2J1aWxkX2ZpbGVfcGF0aF0pCi0gIHBhcmFsbGVsX3N0YXRlLnBlbmRpbmcgPSAwCi0gIHBhcmFsbGVsX3N0YXRlLmRhdGEgPSBkYXRhCi0gIHBhcmFsbGVsX3N0YXRlLmF1eF9kYXRhID0gYXV4X2RhdGEKLQotICB0cnk6Ci0gICAgcGFyYWxsZWxfc3RhdGUuY29uZGl0aW9uLmFjcXVpcmUoKQotICAgIHdoaWxlIHBhcmFsbGVsX3N0YXRlLmRlcGVuZGVuY2llcyBvciBwYXJhbGxlbF9zdGF0ZS5wZW5kaW5nOgotICAgICAgaWYgcGFyYWxsZWxfc3RhdGUuZXJyb3I6Ci0gICAgICAgIGJyZWFrCi0gICAgICBpZiBub3QgcGFyYWxsZWxfc3RhdGUuZGVwZW5kZW5jaWVzOgotICAgICAgICBwYXJhbGxlbF9zdGF0ZS5jb25kaXRpb24ud2FpdCgpCi0gICAgICAgIGNvbnRpbnVlCi0KLSAgICAgIGRlcGVuZGVuY3kgPSBwYXJhbGxlbF9zdGF0ZS5kZXBlbmRlbmNpZXMucG9wKCkKLQotICAgICAgcGFyYWxsZWxfc3RhdGUucGVuZGluZyArPSAxCi0gICAgICBkYXRhX2luID0ge30KLSAgICAgIGRhdGFfaW5bJ3RhcmdldF9idWlsZF9maWxlcyddID0gZGF0YVsndGFyZ2V0X2J1aWxkX2ZpbGVzJ10KLSAgICAgIGF1eF9kYXRhX2luID0ge30KLSAgICAgIGdsb2JhbF9mbGFncyA9IHsKLSAgICAgICAgJ3BhdGhfc2VjdGlvbnMnOiBnbG9iYWxzKClbJ3BhdGhfc2VjdGlvbnMnXSwKLSAgICAgICAgJ25vbl9jb25maWd1cmF0aW9uX2tleXMnOiBnbG9iYWxzKClbJ25vbl9jb25maWd1cmF0aW9uX2tleXMnXSwKLSAgICAgICAgJ2Fic29sdXRlX2J1aWxkX2ZpbGVfcGF0aHMnOiBnbG9iYWxzKClbJ2Fic29sdXRlX2J1aWxkX2ZpbGVfcGF0aHMnXSwKLSAgICAgICAgJ211bHRpcGxlX3Rvb2xzZXRzJzogZ2xvYmFscygpWydtdWx0aXBsZV90b29sc2V0cyddfQotCi0gICAgICBpZiBub3QgcGFyYWxsZWxfc3RhdGUucG9vbDoKLSAgICAgICAgcGFyYWxsZWxfc3RhdGUucG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDgpCi0gICAgICBwYXJhbGxlbF9zdGF0ZS5wb29sLmFwcGx5X2FzeW5jKAotICAgICAgICAgIENhbGxMb2FkVGFyZ2V0QnVpbGRGaWxlLAotICAgICAgICAgIGFyZ3MgPSAoZ2xvYmFsX2ZsYWdzLCBkZXBlbmRlbmN5LAotICAgICAgICAgICAgICAgICAgZGF0YV9pbiwgYXV4X2RhdGFfaW4sCi0gICAgICAgICAgICAgICAgICB2YXJpYWJsZXMsIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2spLAotICAgICAgICAgIGNhbGxiYWNrID0gcGFyYWxsZWxfc3RhdGUuTG9hZFRhcmdldEJ1aWxkRmlsZUNhbGxiYWNrKQotICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQsIGU6Ci0gICAgcGFyYWxsZWxfc3RhdGUucG9vbC50ZXJtaW5hdGUoKQotICAgIHJhaXNlIGUKLQotICBwYXJhbGxlbF9zdGF0ZS5jb25kaXRpb24ucmVsZWFzZSgpCi0gIGlmIHBhcmFsbGVsX3N0YXRlLmVycm9yOgotICAgIHN5cy5leGl0KCkKLQotCi0jIExvb2sgZm9yIHRoZSBicmFja2V0IHRoYXQgbWF0Y2hlcyB0aGUgZmlyc3QgYnJhY2tldCBzZWVuIGluIGEKLSMgc3RyaW5nLCBhbmQgcmV0dXJuIHRoZSBzdGFydCBhbmQgZW5kIGFzIGEgdHVwbGUuICBGb3IgZXhhbXBsZSwgaWYKLSMgdGhlIGlucHV0IGlzIHNvbWV0aGluZyBsaWtlICI8KGZvbyA8KGJhcikpIGJsYWgiLCB0aGVuIGl0IHdvdWxkCi0jIHJldHVybiAoMSwgMTMpLCBpbmRpY2F0aW5nIHRoZSBlbnRpcmUgc3RyaW5nIGV4Y2VwdCBmb3IgdGhlIGxlYWRpbmcKLSMgIjwiIGFuZCB0cmFpbGluZyAiIGJsYWgiLgotZGVmIEZpbmRFbmNsb3NpbmdCcmFja2V0R3JvdXAoaW5wdXQpOgotICBicmFja2V0cyA9IHsgJ30nOiAneycsCi0gICAgICAgICAgICAgICAnXSc6ICdbJywKLSAgICAgICAgICAgICAgICcpJzogJygnLCB9Ci0gIHN0YWNrID0gW10KLSAgY291bnQgPSAwCi0gIHN0YXJ0ID0gLTEKLSAgZm9yIGNoYXIgaW4gaW5wdXQ6Ci0gICAgaWYgY2hhciBpbiBicmFja2V0cy52YWx1ZXMoKToKLSAgICAgIHN0YWNrLmFwcGVuZChjaGFyKQotICAgICAgaWYgc3RhcnQgPT0gLTE6Ci0gICAgICAgIHN0YXJ0ID0gY291bnQKLSAgICBpZiBjaGFyIGluIGJyYWNrZXRzLmtleXMoKToKLSAgICAgIHRyeToKLSAgICAgICAgbGFzdF9icmFja2V0ID0gc3RhY2sucG9wKCkKLSAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICByZXR1cm4gKC0xLCAtMSkKLSAgICAgIGlmIGxhc3RfYnJhY2tldCAhPSBicmFja2V0c1tjaGFyXToKLSAgICAgICAgcmV0dXJuICgtMSwgLTEpCi0gICAgICBpZiBsZW4oc3RhY2spID09IDA6Ci0gICAgICAgIHJldHVybiAoc3RhcnQsIGNvdW50ICsgMSkKLSAgICBjb3VudCA9IGNvdW50ICsgMQotICByZXR1cm4gKC0xLCAtMSkKLQotCi1jYW5vbmljYWxfaW50X3JlID0gcmUuY29tcGlsZSgnXigwfC0/WzEtOV1bMC05XSopJCcpCi0KLQotZGVmIElzU3RyQ2Fub25pY2FsSW50KHN0cmluZyk6Ci0gICIiIlJldHVybnMgVHJ1ZSBpZiB8c3RyaW5nfCBpcyBpbiBpdHMgY2Fub25pY2FsIGludGVnZXIgZm9ybS4KLQotICBUaGUgY2Fub25pY2FsIGZvcm0gaXMgc3VjaCB0aGF0IHN0cihpbnQoc3RyaW5nKSkgPT0gc3RyaW5nLgotICAiIiIKLSAgaWYgbm90IGlzaW5zdGFuY2Uoc3RyaW5nLCBzdHIpIG9yIG5vdCBjYW5vbmljYWxfaW50X3JlLm1hdGNoKHN0cmluZyk6Ci0gICAgcmV0dXJuIEZhbHNlCi0KLSAgcmV0dXJuIFRydWUKLQotCi0jIFRoaXMgbWF0Y2hlcyB0aGluZ3MgbGlrZSAiPChhc2RmKSIsICI8IShjbWQpIiwgIjwhQChjbWQpIiwgIjx8KGxpc3QpIiwKLSMgIjwhaW50ZXJwcmV0ZXIoYXJndW1lbnRzKSIsICI8KFtsaXN0XSkiLCBhbmQgZXZlbiAiPChbKSIgYW5kICI8KDwoKSkiLgotIyBJbiB0aGUgbGFzdCBjYXNlLCB0aGUgaW5uZXIgIjwoKSIgaXMgY2FwdHVyZWQgaW4gbWF0Y2hbJ2NvbnRlbnQnXS4KLWVhcmx5X3ZhcmlhYmxlX3JlID0gcmUuY29tcGlsZSgKLSAgICAnKD9QPHJlcGxhY2U+KD9QPHR5cGU+PCg/Oig/OiE/QD8pfFx8KT8pJwotICAgICcoP1A8Y29tbWFuZF9zdHJpbmc+Wy1hLXpBLVowLTlfLl0rKT8nCi0gICAgJ1woKD9QPGlzX2FycmF5PlxzKlxbPyknCi0gICAgJyg/UDxjb250ZW50Pi4qPykoXF0/KVwpKScpCi0KLSMgVGhpcyBtYXRjaGVzIHRoZSBzYW1lIGFzIGVhcmx5X3ZhcmlhYmxlX3JlLCBidXQgd2l0aCAnPicgaW5zdGVhZCBvZiAnPCcuCi1sYXRlX3ZhcmlhYmxlX3JlID0gcmUuY29tcGlsZSgKLSAgICAnKD9QPHJlcGxhY2U+KD9QPHR5cGU+Pig/Oig/OiE/QD8pfFx8KT8pJwotICAgICcoP1A8Y29tbWFuZF9zdHJpbmc+Wy1hLXpBLVowLTlfLl0rKT8nCi0gICAgJ1woKD9QPGlzX2FycmF5PlxzKlxbPyknCi0gICAgJyg/UDxjb250ZW50Pi4qPykoXF0/KVwpKScpCi0KLSMgVGhpcyBtYXRjaGVzIHRoZSBzYW1lIGFzIGVhcmx5X3ZhcmlhYmxlX3JlLCBidXQgd2l0aCAnXicgaW5zdGVhZCBvZiAnPCcuCi1sYXRlbGF0ZV92YXJpYWJsZV9yZSA9IHJlLmNvbXBpbGUoCi0gICAgJyg/UDxyZXBsYWNlPig/UDx0eXBlPltcXl0oPzooPzohP0A/KXxcfCk/KScKLSAgICAnKD9QPGNvbW1hbmRfc3RyaW5nPlstYS16QS1aMC05Xy5dKyk/JwotICAgICdcKCg/UDxpc19hcnJheT5ccypcWz8pJwotICAgICcoP1A8Y29udGVudD4uKj8pKFxdPylcKSknKQotCi0jIEdsb2JhbCBjYWNoZSBvZiByZXN1bHRzIGZyb20gcnVubmluZyBjb21tYW5kcyBzbyB0aGV5IGRvbid0IGhhdmUgdG8gYmUgcnVuCi0jIG1vcmUgdGhlbiBvbmNlLgotY2FjaGVkX2NvbW1hbmRfcmVzdWx0cyA9IHt9Ci0KLQotZGVmIEZpeHVwUGxhdGZvcm1Db21tYW5kKGNtZCk6Ci0gIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGlmIHR5cGUoY21kKSA9PSBsaXN0OgotICAgICAgY21kID0gW3JlLnN1YignXmNhdCAnLCAndHlwZSAnLCBjbWRbMF0pXSArIGNtZFsxOl0KLSAgICBlbHNlOgotICAgICAgY21kID0gcmUuc3ViKCdeY2F0ICcsICd0eXBlICcsIGNtZCkKLSAgcmV0dXJuIGNtZAotCi0KLVBIQVNFX0VBUkxZID0gMAotUEhBU0VfTEFURSA9IDEKLVBIQVNFX0xBVEVMQVRFID0gMgotCi0KLWRlZiBFeHBhbmRWYXJpYWJsZXMoaW5wdXQsIHBoYXNlLCB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpOgotICAjIExvb2sgZm9yIHRoZSBwYXR0ZXJuIHRoYXQgZ2V0cyBleHBhbmRlZCBpbnRvIHZhcmlhYmxlcwotICBpZiBwaGFzZSA9PSBQSEFTRV9FQVJMWToKLSAgICB2YXJpYWJsZV9yZSA9IGVhcmx5X3ZhcmlhYmxlX3JlCi0gICAgZXhwYW5zaW9uX3N5bWJvbCA9ICc8JwotICBlbGlmIHBoYXNlID09IFBIQVNFX0xBVEU6Ci0gICAgdmFyaWFibGVfcmUgPSBsYXRlX3ZhcmlhYmxlX3JlCi0gICAgZXhwYW5zaW9uX3N5bWJvbCA9ICc+JwotICBlbGlmIHBoYXNlID09IFBIQVNFX0xBVEVMQVRFOgotICAgIHZhcmlhYmxlX3JlID0gbGF0ZWxhdGVfdmFyaWFibGVfcmUKLSAgICBleHBhbnNpb25fc3ltYm9sID0gJ14nCi0gIGVsc2U6Ci0gICAgYXNzZXJ0IEZhbHNlCi0KLSAgaW5wdXRfc3RyID0gc3RyKGlucHV0KQotICBpZiBJc1N0ckNhbm9uaWNhbEludChpbnB1dF9zdHIpOgotICAgIHJldHVybiBpbnQoaW5wdXRfc3RyKQotCi0gICMgRG8gYSBxdWljayBzY2FuIHRvIGRldGVybWluZSBpZiBhbiBleHBlbnNpdmUgcmVnZXggc2VhcmNoIGlzIHdhcnJhbnRlZC4KLSAgaWYgZXhwYW5zaW9uX3N5bWJvbCBub3QgaW4gaW5wdXRfc3RyOgotICAgIHJldHVybiBpbnB1dF9zdHIKLQotICAjIEdldCB0aGUgZW50aXJlIGxpc3Qgb2YgbWF0Y2hlcyBhcyBhIGxpc3Qgb2YgTWF0Y2hPYmplY3QgaW5zdGFuY2VzLgotICAjICh1c2luZyBmaW5kYWxsIGhlcmUgd291bGQgcmV0dXJuIHN0cmluZ3MgaW5zdGVhZCBvZiBNYXRjaE9iamVjdHMpLgotICBtYXRjaGVzID0gW21hdGNoIGZvciBtYXRjaCBpbiB2YXJpYWJsZV9yZS5maW5kaXRlcihpbnB1dF9zdHIpXQotICBpZiBub3QgbWF0Y2hlczoKLSAgICByZXR1cm4gaW5wdXRfc3RyCi0KLSAgb3V0cHV0ID0gaW5wdXRfc3RyCi0gICMgUmV2ZXJzZSB0aGUgbGlzdCBvZiBtYXRjaGVzIHNvIHRoYXQgcmVwbGFjZW1lbnRzIGFyZSBkb25lIHJpZ2h0LXRvLWxlZnQuCi0gICMgVGhhdCBlbnN1cmVzIHRoYXQgZWFybGllciByZXBsYWNlbWVudHMgd29uJ3QgbWVzcyB1cCB0aGUgc3RyaW5nIGluIGEKLSAgIyB3YXkgdGhhdCBjYXVzZXMgbGF0ZXIgY2FsbHMgdG8gZmluZCB0aGUgZWFybGllciBzdWJzdGl0dXRlZCB0ZXh0IGluc3RlYWQKLSAgIyBvZiB3aGF0J3MgaW50ZW5kZWQgZm9yIHJlcGxhY2VtZW50LgotICBtYXRjaGVzLnJldmVyc2UoKQotICBmb3IgbWF0Y2hfZ3JvdXAgaW4gbWF0Y2hlczoKLSAgICBtYXRjaCA9IG1hdGNoX2dyb3VwLmdyb3VwZGljdCgpCi0gICAgZ3lwLkRlYnVnT3V0cHV0KGd5cC5ERUJVR19WQVJJQUJMRVMsCi0gICAgICAgICAgICAgICAgICAgICJNYXRjaGVzOiAlcyIgJSByZXByKG1hdGNoKSkKLSAgICAjIG1hdGNoWydyZXBsYWNlJ10gaXMgdGhlIHN1YnN0cmluZyB0byBsb29rIGZvciwgbWF0Y2hbJ3R5cGUnXQotICAgICMgaXMgdGhlIGNoYXJhY3RlciBjb2RlIGZvciB0aGUgcmVwbGFjZW1lbnQgdHlwZSAoPCA+IDwhID4hIDx8ID58IDxACi0gICAgIyA+QCA8IUAgPiFAKSwgbWF0Y2hbJ2lzX2FycmF5J10gY29udGFpbnMgYSAnWycgZm9yIGNvbW1hbmQKLSAgICAjIGFycmF5cywgYW5kIG1hdGNoWydjb250ZW50J10gaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlICg8ID4pCi0gICAgIyBvciBjb21tYW5kIHRvIHJ1biAoPCEgPiEpLiBtYXRjaFsnY29tbWFuZF9zdHJpbmcnXSBpcyBhbiBvcHRpb25hbAotICAgICMgY29tbWFuZCBzdHJpbmcuIEN1cnJlbnRseSwgb25seSAncHltb2RfZG9fbWFpbicgaXMgc3VwcG9ydGVkLgotCi0gICAgIyBydW5fY29tbWFuZCBpcyB0cnVlIGlmIGEgISB2YXJpYW50IGlzIHVzZWQuCi0gICAgcnVuX2NvbW1hbmQgPSAnIScgaW4gbWF0Y2hbJ3R5cGUnXQotICAgIGNvbW1hbmRfc3RyaW5nID0gbWF0Y2hbJ2NvbW1hbmRfc3RyaW5nJ10KLQotICAgICMgZmlsZV9saXN0IGlzIHRydWUgaWYgYSB8IHZhcmlhbnQgaXMgdXNlZC4KLSAgICBmaWxlX2xpc3QgPSAnfCcgaW4gbWF0Y2hbJ3R5cGUnXQotCi0gICAgIyBDYXB0dXJlIHRoZXNlIG5vdyBzbyB3ZSBjYW4gYWRqdXN0IHRoZW0gbGF0ZXIuCi0gICAgcmVwbGFjZV9zdGFydCA9IG1hdGNoX2dyb3VwLnN0YXJ0KCdyZXBsYWNlJykKLSAgICByZXBsYWNlX2VuZCA9IG1hdGNoX2dyb3VwLmVuZCgncmVwbGFjZScpCi0KLSAgICAjIEZpbmQgdGhlIGVuZGluZyBwYXJlbiwgYW5kIHJlLWV2YWx1YXRlIHRoZSBjb250YWluZWQgc3RyaW5nLgotICAgIChjX3N0YXJ0LCBjX2VuZCkgPSBGaW5kRW5jbG9zaW5nQnJhY2tldEdyb3VwKGlucHV0X3N0cltyZXBsYWNlX3N0YXJ0Ol0pCi0KLSAgICAjIEFkanVzdCB0aGUgcmVwbGFjZW1lbnQgcmFuZ2UgdG8gbWF0Y2ggdGhlIGVudGlyZSBjb21tYW5kCi0gICAgIyBmb3VuZCBieSBGaW5kRW5jbG9zaW5nQnJhY2tldEdyb3VwIChzaW5jZSB0aGUgdmFyaWFibGVfcmUKLSAgICAjIHByb2JhYmx5IGRvZXNuJ3QgbWF0Y2ggdGhlIGVudGlyZSBjb21tYW5kIGlmIGl0IGNvbnRhaW5lZAotICAgICMgbmVzdGVkIHZhcmlhYmxlcykuCi0gICAgcmVwbGFjZV9lbmQgPSByZXBsYWNlX3N0YXJ0ICsgY19lbmQKLQotICAgICMgRmluZCB0aGUgInJlYWwiIHJlcGxhY2VtZW50LCBtYXRjaGluZyB0aGUgYXBwcm9wcmlhdGUgY2xvc2luZwotICAgICMgcGFyZW4sIGFuZCBhZGp1c3QgdGhlIHJlcGxhY2VtZW50IHN0YXJ0IGFuZCBlbmQuCi0gICAgcmVwbGFjZW1lbnQgPSBpbnB1dF9zdHJbcmVwbGFjZV9zdGFydDpyZXBsYWNlX2VuZF0KLQotICAgICMgRmlndXJlIG91dCB3aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgdmFyaWFibGUgcGFyZW5zIGFyZS4KLSAgICBjb250ZW50c19zdGFydCA9IHJlcGxhY2Vfc3RhcnQgKyBjX3N0YXJ0ICsgMQotICAgIGNvbnRlbnRzX2VuZCA9IHJlcGxhY2VfZW5kIC0gMQotICAgIGNvbnRlbnRzID0gaW5wdXRfc3RyW2NvbnRlbnRzX3N0YXJ0OmNvbnRlbnRzX2VuZF0KLQotICAgICMgRG8gZmlsdGVyIHN1YnN0aXR1dGlvbiBub3cgZm9yIDx8KCkuCi0gICAgIyBBZG1pdHRlZGx5LCB0aGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBldmFsdWF0aW9uIG9yZGVyIGluIG90aGVyCi0gICAgIyBjb250ZXh0cy4gSG93ZXZlciwgc2luY2UgZmlsdHJhdGlvbiBoYXMgbm8gY2hhbmNlIHRvIHJ1biBvbiA8fCgpLAotICAgICMgdGhpcyBzZWVtcyBsaWtlIHRoZSBvbmx5IG9idmlvdXMgd2F5IHRvIGdpdmUgdGhlbSBhY2Nlc3MgdG8gZmlsdGVycy4KLSAgICBpZiBmaWxlX2xpc3Q6Ci0gICAgICBwcm9jZXNzZWRfdmFyaWFibGVzID0gY29weS5kZWVwY29weSh2YXJpYWJsZXMpCi0gICAgICBQcm9jZXNzTGlzdEZpbHRlcnNJbkRpY3QoY29udGVudHMsIHByb2Nlc3NlZF92YXJpYWJsZXMpCi0gICAgICAjIFJlY3Vyc2UgdG8gZXhwYW5kIHZhcmlhYmxlcyBpbiB0aGUgY29udGVudHMKLSAgICAgIGNvbnRlbnRzID0gRXhwYW5kVmFyaWFibGVzKGNvbnRlbnRzLCBwaGFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF92YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpCi0gICAgZWxzZToKLSAgICAgICMgUmVjdXJzZSB0byBleHBhbmQgdmFyaWFibGVzIGluIHRoZSBjb250ZW50cwotICAgICAgY29udGVudHMgPSBFeHBhbmRWYXJpYWJsZXMoY29udGVudHMsIHBoYXNlLCB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpCi0KLSAgICAjIFN0cmlwIG9mZiBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2Ugc28gdGhhdCB2YXJpYWJsZSBtYXRjaGVzIGFyZQotICAgICMgc2ltcGxlciBiZWxvdyAoYW5kIGJlY2F1c2UgdGhleSBhcmUgcmFyZWx5IG5lZWRlZCkuCi0gICAgY29udGVudHMgPSBjb250ZW50cy5zdHJpcCgpCi0KLSAgICAjIGV4cGFuZF90b19saXN0IGlzIHRydWUgaWYgYW4gQCB2YXJpYW50IGlzIHVzZWQuICBJbiB0aGF0IGNhc2UsCi0gICAgIyB0aGUgZXhwYW5zaW9uIHNob3VsZCByZXN1bHQgaW4gYSBsaXN0LiAgTm90ZSB0aGF0IHRoZSBjYWxsZXIKLSAgICAjIGlzIHRvIGJlIGV4cGVjdGluZyBhIGxpc3QgaW4gcmV0dXJuLCBhbmQgbm90IGFsbCBjYWxsZXJzIGRvCi0gICAgIyBiZWNhdXNlIG5vdCBhbGwgYXJlIHdvcmtpbmcgaW4gbGlzdCBjb250ZXh0LiAgQWxzbywgZm9yIGxpc3QKLSAgICAjIGV4cGFuc2lvbnMsIHRoZXJlIGNhbiBiZSBubyBvdGhlciB0ZXh0IGJlc2lkZXMgdGhlIHZhcmlhYmxlCi0gICAgIyBleHBhbnNpb24gaW4gdGhlIGlucHV0IHN0cmluZy4KLSAgICBleHBhbmRfdG9fbGlzdCA9ICdAJyBpbiBtYXRjaFsndHlwZSddIGFuZCBpbnB1dF9zdHIgPT0gcmVwbGFjZW1lbnQKLQotICAgIGlmIHJ1bl9jb21tYW5kIG9yIGZpbGVfbGlzdDoKLSAgICAgICMgRmluZCB0aGUgYnVpbGQgZmlsZSdzIGRpcmVjdG9yeSwgc28gY29tbWFuZHMgY2FuIGJlIHJ1biBvciBmaWxlIGxpc3RzCi0gICAgICAjIGdlbmVyYXRlZCByZWxhdGl2ZSB0byBpdC4KLSAgICAgIGJ1aWxkX2ZpbGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJ1aWxkX2ZpbGUpCi0gICAgICBpZiBidWlsZF9maWxlX2RpciA9PSAnJzoKLSAgICAgICAgIyBJZiBidWlsZF9maWxlIGlzIGp1c3QgYSBsZWFmIGZpbGVuYW1lIGluZGljYXRpbmcgYSBmaWxlIGluIHRoZQotICAgICAgICAjIGN1cnJlbnQgZGlyZWN0b3J5LCBidWlsZF9maWxlX2RpciBtaWdodCBiZSBhbiBlbXB0eSBzdHJpbmcuICBTZXQKLSAgICAgICAgIyBpdCB0byBOb25lIHRvIHNpZ25hbCB0byBzdWJwcm9jZXNzLlBvcGVuIHRoYXQgaXQgc2hvdWxkIHJ1biB0aGUKLSAgICAgICAgIyBjb21tYW5kIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgICAgICAgYnVpbGRfZmlsZV9kaXIgPSBOb25lCi0KLSAgICAjIFN1cHBvcnQgPHwobGlzdGZpbGUudHh0IC4uLikgd2hpY2ggZ2VuZXJhdGVzIGEgZmlsZQotICAgICMgY29udGFpbmluZyBpdGVtcyBmcm9tIGEgZ3lwIGxpc3QsIGdlbmVyYXRlZCBhdCBneXAgdGltZS4KLSAgICAjIFRoaXMgd29ya3MgYXJvdW5kIGFjdGlvbnMvcnVsZXMgd2hpY2ggaGF2ZSBtb3JlIGlucHV0cyB0aGFuIHdpbGwKLSAgICAjIGZpdCBvbiB0aGUgY29tbWFuZCBsaW5lLgotICAgIGlmIGZpbGVfbGlzdDoKLSAgICAgIGlmIHR5cGUoY29udGVudHMpIGlzIGxpc3Q6Ci0gICAgICAgIGNvbnRlbnRzX2xpc3QgPSBjb250ZW50cwotICAgICAgZWxzZToKLSAgICAgICAgY29udGVudHNfbGlzdCA9IGNvbnRlbnRzLnNwbGl0KCcgJykKLSAgICAgIHJlcGxhY2VtZW50ID0gY29udGVudHNfbGlzdFswXQotICAgICAgaWYgb3MucGF0aC5pc2FicyhyZXBsYWNlbWVudCk6Ci0gICAgICAgIHJhaXNlIEd5cEVycm9yKCd8IGNhbm5vdCBoYW5kbGUgYWJzb2x1dGUgcGF0aHMsIGdvdCAiJXMiJyAlIHJlcGxhY2VtZW50KQotCi0gICAgICBpZiBub3QgZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzOgotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJ1aWxkX2ZpbGVfZGlyLCByZXBsYWNlbWVudCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNhYnMoYnVpbGRfZmlsZV9kaXIpOgotICAgICAgICAgIHRvcGxldmVsID0gZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzWyd0b3BsZXZlbCddCi0gICAgICAgICAgcmVsX2J1aWxkX2ZpbGVfZGlyID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgoYnVpbGRfZmlsZV9kaXIsIHRvcGxldmVsKQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJlbF9idWlsZF9maWxlX2RpciA9IGJ1aWxkX2ZpbGVfZGlyCi0gICAgICAgIHF1YWxpZmllZF9vdXRfZGlyID0gZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzWydxdWFsaWZpZWRfb3V0X2RpciddCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocXVhbGlmaWVkX291dF9kaXIsIHJlbF9idWlsZF9maWxlX2RpciwgcmVwbGFjZW1lbnQpCi0gICAgICAgIGd5cC5jb21tb24uRW5zdXJlRGlyRXhpc3RzKHBhdGgpCi0KLSAgICAgIHJlcGxhY2VtZW50ID0gZ3lwLmNvbW1vbi5SZWxhdGl2ZVBhdGgocGF0aCwgYnVpbGRfZmlsZV9kaXIpCi0gICAgICBmID0gZ3lwLmNvbW1vbi5Xcml0ZU9uRGlmZihwYXRoKQotICAgICAgZm9yIGkgaW4gY29udGVudHNfbGlzdFsxOl06Ci0gICAgICAgIGYud3JpdGUoJyVzXG4nICUgaSkKLSAgICAgIGYuY2xvc2UoKQotCi0gICAgZWxpZiBydW5fY29tbWFuZDoKLSAgICAgIHVzZV9zaGVsbCA9IFRydWUKLSAgICAgIGlmIG1hdGNoWydpc19hcnJheSddOgotICAgICAgICBjb250ZW50cyA9IGV2YWwoY29udGVudHMpCi0gICAgICAgIHVzZV9zaGVsbCA9IEZhbHNlCi0KLSAgICAgICMgQ2hlY2sgZm9yIGEgY2FjaGVkIHZhbHVlIHRvIGF2b2lkIGV4ZWN1dGluZyBjb21tYW5kcywgb3IgZ2VuZXJhdGluZwotICAgICAgIyBmaWxlIGxpc3RzIG1vcmUgdGhhbiBvbmNlLgotICAgICAgIyBUT0RPKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9neXAvaXNzdWVzL2RldGFpbD9pZD0xMTIpOiBJdCBpcwotICAgICAgIyBwb3NzaWJsZSB0aGF0IHRoZSBjb21tYW5kIGJlaW5nIGludm9rZWQgZGVwZW5kcyBvbiB0aGUgY3VycmVudAotICAgICAgIyBkaXJlY3RvcnkuIEZvciB0aGF0IGNhc2UgdGhlIHN5bnRheCBuZWVkcyB0byBiZSBleHRlbmRlZCBzbyB0aGF0IHRoZQotICAgICAgIyBkaXJlY3RvcnkgaXMgYWxzbyB1c2VkIGluIGNhY2hlX2tleSAoaXQgYmVjb21lcyBhIHR1cGxlKS4KLSAgICAgICMgVE9ETyhodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ3lwL2lzc3Vlcy9kZXRhaWw/aWQ9MTExKTogSW4gdGhlb3J5LAotICAgICAgIyBzb21lb25lIGNvdWxkIGF1dGhvciBhIHNldCBvZiBHWVAgZmlsZXMgd2hlcmUgZWFjaCB0aW1lIHRoZSBjb21tYW5kCi0gICAgICAjIGlzIGludm9rZWQgaXQgcHJvZHVjZXMgZGlmZmVyZW50IG91dHB1dCBieSBkZXNpZ24uIFdoZW4gdGhlIG5lZWQKLSAgICAgICMgYXJpc2VzLCB0aGUgc3ludGF4IHNob3VsZCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IG5vIGNhY2hpbmcgb2ZmIGEKLSAgICAgICMgY29tbWFuZCdzIG91dHB1dCBzbyBpdCBpcyBydW4gZXZlcnkgdGltZS4KLSAgICAgIGNhY2hlX2tleSA9IHN0cihjb250ZW50cykKLSAgICAgIGNhY2hlZF92YWx1ZSA9IGNhY2hlZF9jb21tYW5kX3Jlc3VsdHMuZ2V0KGNhY2hlX2tleSwgTm9uZSkKLSAgICAgIGlmIGNhY2hlZF92YWx1ZSBpcyBOb25lOgotICAgICAgICBneXAuRGVidWdPdXRwdXQoZ3lwLkRFQlVHX1ZBUklBQkxFUywKLSAgICAgICAgICAgICAgICAgICAgICAgICJFeGVjdXRpbmcgY29tbWFuZCAnJXMnIGluIGRpcmVjdG9yeSAnJXMnIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29udGVudHMsYnVpbGRfZmlsZV9kaXIpKQotCi0gICAgICAgIHJlcGxhY2VtZW50ID0gJycKLQotICAgICAgICBpZiBjb21tYW5kX3N0cmluZyA9PSAncHltb2RfZG9fbWFpbic6Ci0gICAgICAgICAgIyA8IXB5bW9kX2RvX21haW4obW9kdWxlbmFtZSBwYXJhbSBldGVycykgbG9hZHMgfG1vZHVsZW5hbWV8IGFzIGEKLSAgICAgICAgICAjIHB5dGhvbiBtb2R1bGUgYW5kIHRoZW4gY2FsbHMgdGhhdCBtb2R1bGUncyBEb01haW4oKSBmdW5jdGlvbiwKLSAgICAgICAgICAjIHBhc3NpbmcgWyJwYXJhbSIsICJldGVycyJdIGFzIGEgc2luZ2xlIGxpc3QgYXJndW1lbnQuIEZvciBtb2R1bGVzCi0gICAgICAgICAgIyB0aGF0IGRvbid0IGxvYWQgcXVpY2tseSwgdGhpcyBjYW4gYmUgZmFzdGVyIHRoYW4KLSAgICAgICAgICAjIDwhKHB5dGhvbiBtb2R1bGVuYW1lIHBhcmFtIGV0ZXJzKS4gRG8gdGhpcyBpbiB8YnVpbGRfZmlsZV9kaXJ8LgotICAgICAgICAgIG9sZHdkID0gb3MuZ2V0Y3dkKCkgICMgUHl0aG9uIGRvZXNuJ3QgbGlrZSBvcy5vcGVuKCcuJyk6IG5vIGZjaGRpci4KLSAgICAgICAgICBpZiBidWlsZF9maWxlX2RpcjoKLSAgICAgICAgICAgIG9zLmNoZGlyKGJ1aWxkX2ZpbGVfZGlyKQotCi0gICAgICAgICAgcGFyc2VkX2NvbnRlbnRzID0gc2hsZXguc3BsaXQoY29udGVudHMpCi0KLSAgICAgICAgICAjIEltcG9ydCBvbmx5IGltcG9ydHMgdGhlIHJvb3QgcGFja2FnZSBzcGVjaWZpZWQgaW4gdGhlIHBhcmFtZXRlciwKLSAgICAgICAgICAjIGV2ZW4gdGhvdWdoIGFsbCBwYWNrYWdlcyB3aWxsIGJlIGltcG9ydGVkLiAgRm9yIGV4YW1wbGUsIGlmCi0gICAgICAgICAgIyAnZm9vLmJhci5ndW0nIGlzIHBhc3NlZCBpbiB0byBfX2ltcG9ydF9fKCksICdmb28nLCAnZm9vLmJhcicsIGFuZAotICAgICAgICAgICMgJ2Zvby5iYXIuZ3VtJyBhcmUgYWxsIGltcG9ydGVkLCBidXQgb25seSAnZm9vJyBpcyByZXR1cm5lZC4gIFRvCi0gICAgICAgICAgIyBnZXQgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIHdlIHNwZWNpZmllZCB0byBfX2ltcG9ydF9fKCksIHdlIGluc3RlYWQKLSAgICAgICAgICAjIHB1bGwgaXQgb3V0IG9mIHN5cy5tb2R1bGVzIGFmdGVyIGl0IGhhcyBiZWVuIGltcG9ydGVkLgotICAgICAgICAgIF9faW1wb3J0X18ocGFyc2VkX2NvbnRlbnRzWzBdKQotICAgICAgICAgIHB5X21vZHVsZSA9IHN5cy5tb2R1bGVzW3BhcnNlZF9jb250ZW50c1swXV0KLQotICAgICAgICAgIHJlcGxhY2VtZW50ID0gc3RyKHB5X21vZHVsZS5Eb01haW4ocGFyc2VkX2NvbnRlbnRzWzE6XSkpLnJzdHJpcCgpCi0KLSAgICAgICAgICBvcy5jaGRpcihvbGR3ZCkKLSAgICAgICAgICBhc3NlcnQgcmVwbGFjZW1lbnQgIT0gTm9uZQotICAgICAgICBlbGlmIGNvbW1hbmRfc3RyaW5nOgotICAgICAgICAgIHJhaXNlIEd5cEVycm9yKCJVbmtub3duIGNvbW1hbmQgc3RyaW5nICclcycgaW4gJyVzJy4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWFuZF9zdHJpbmcsIGNvbnRlbnRzKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAjIEZpeCB1cCBjb21tYW5kIHdpdGggcGxhdGZvcm0gc3BlY2lmaWMgd29ya2Fyb3VuZHMuCi0gICAgICAgICAgY29udGVudHMgPSBGaXh1cFBsYXRmb3JtQ29tbWFuZChjb250ZW50cykKLSAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihjb250ZW50cywgc2hlbGw9dXNlX3NoZWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPWJ1aWxkX2ZpbGVfZGlyKQotCi0gICAgICAgICAgcF9zdGRvdXQsIHBfc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgnJykKLQotICAgICAgICAgIGlmIHAud2FpdCgpICE9IDAgb3IgcF9zdGRlcnI6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHBfc3RkZXJyKQotICAgICAgICAgICAgIyBTaW11bGF0ZSBjaGVja19jYWxsIGJlaGF2aW9yLCBzaW5jZSBjaGVja19jYWxsIG9ubHkgZXhpc3RzCi0gICAgICAgICAgICAjIGluIHB5dGhvbiAyLjUgYW5kIGxhdGVyLgotICAgICAgICAgICAgcmFpc2UgR3lwRXJyb3IoIkNhbGwgdG8gJyVzJyByZXR1cm5lZCBleGl0IHN0YXR1cyAlZC4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250ZW50cywgcC5yZXR1cm5jb2RlKSkKLSAgICAgICAgICByZXBsYWNlbWVudCA9IHBfc3Rkb3V0LnJzdHJpcCgpCi0KLSAgICAgICAgY2FjaGVkX2NvbW1hbmRfcmVzdWx0c1tjYWNoZV9rZXldID0gcmVwbGFjZW1lbnQKLSAgICAgIGVsc2U6Ci0gICAgICAgIGd5cC5EZWJ1Z091dHB1dChneXAuREVCVUdfVkFSSUFCTEVTLAotICAgICAgICAgICAgICAgICAgICAgICAgIkhhZCBjYWNoZSB2YWx1ZSBmb3IgY29tbWFuZCAnJXMnIGluIGRpcmVjdG9yeSAnJXMnIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29udGVudHMsYnVpbGRfZmlsZV9kaXIpKQotICAgICAgICByZXBsYWNlbWVudCA9IGNhY2hlZF92YWx1ZQotCi0gICAgZWxzZToKLSAgICAgIGlmIG5vdCBjb250ZW50cyBpbiB2YXJpYWJsZXM6Ci0gICAgICAgIGlmIGNvbnRlbnRzWy0xXSBpbiBbJyEnLCAnLyddOgotICAgICAgICAgICMgSW4gb3JkZXIgdG8gYWxsb3cgY3Jvc3MtY29tcGlsZXMgKG5hY2wpIHRvIGhhcHBlbiBtb3JlIG5hdHVyYWxseSwKLSAgICAgICAgICAjIHdlIHdpbGwgYWxsb3cgcmVmZXJlbmNlcyB0byA+KHNvdXJjZXMvKSBldGMuIHRvIHJlc29sdmUgdG8KLSAgICAgICAgICAjIGFuZCBlbXB0eSBsaXN0IGlmIHVuZGVmaW5lZC4gVGhpcyBhbGxvd3MgYWN0aW9ucyB0bzoKLSAgICAgICAgICAjICdhY3Rpb24hJzogWwotICAgICAgICAgICMgICAnPkAoX3NvdXJjZXMhKScsCi0gICAgICAgICAgIyBdLAotICAgICAgICAgICMgJ2FjdGlvbi8nOiBbCi0gICAgICAgICAgIyAgICc+QChfc291cmNlcy8pJywKLSAgICAgICAgICAjIF0sCi0gICAgICAgICAgcmVwbGFjZW1lbnQgPSBbXQotICAgICAgICBlbHNlOgotICAgICAgICAgIHJhaXNlIEd5cEVycm9yKCdVbmRlZmluZWQgdmFyaWFibGUgJyArIGNvbnRlbnRzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIGluICcgKyBidWlsZF9maWxlKQotICAgICAgZWxzZToKLSAgICAgICAgcmVwbGFjZW1lbnQgPSB2YXJpYWJsZXNbY29udGVudHNdCi0gICAgaWYgX0RFQlVHX0RFUFRIOgotICAgICAgaWYgYnVpbGRfZmlsZSAhPSB2YXJpYWJsZXNbJ19fREVQVEhfU09VUkNFX18nXToKLSAgICAgICAgcHJpbnQgJyVzICE9ICVzJyAlIChidWlsZF9maWxlLCB2YXJpYWJsZXNbJ19fREVQVEhfU09VUkNFX18nXSkKLSAgICAgIHByaW50ICclcyglcyk6ICVzIC0+ICVzJyAlICgKLSAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGJ1aWxkX2ZpbGUpLAotICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUodmFyaWFibGVzWydfX0RFUFRIX1NPVVJDRV9fJ10pLAotICAgICAgICAgIGNvbnRlbnRzLAotICAgICAgICAgIHJlcGxhY2VtZW50KQotICAgIGlmIGlzaW5zdGFuY2UocmVwbGFjZW1lbnQsIGxpc3QpOgotICAgICAgZm9yIGl0ZW0gaW4gcmVwbGFjZW1lbnQ6Ci0gICAgICAgIGlmIChub3QgY29udGVudHNbLTFdID09ICcvJyBhbmQKLSAgICAgICAgICAgIG5vdCBpc2luc3RhbmNlKGl0ZW0sIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKGl0ZW0sIGludCkpOgotICAgICAgICAgIHJhaXNlIEd5cEVycm9yKCdWYXJpYWJsZSAnICsgY29udGVudHMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICcgbXVzdCBleHBhbmQgdG8gYSBzdHJpbmcgb3IgbGlzdCBvZiBzdHJpbmdzOyAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdCBjb250YWlucyBhICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uX19jbGFzc19fLl9fbmFtZV9fKQotICAgICAgIyBSdW4gdGhyb3VnaCB0aGUgbGlzdCBhbmQgaGFuZGxlIHZhcmlhYmxlIGV4cGFuc2lvbnMgaW4gaXQuICBTaW5jZQotICAgICAgIyB0aGUgbGlzdCBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIGRpY3RzLCB0aGlzIHdvbid0IGRvIGFueXRoaW5nCi0gICAgICAjIHdpdGggY29uZGl0aW9ucyBzZWN0aW9ucy4KLSAgICAgIFByb2Nlc3NWYXJpYWJsZXNBbmRDb25kaXRpb25zSW5MaXN0KHJlcGxhY2VtZW50LCBwaGFzZSwgdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfZmlsZSkKLSAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHJlcGxhY2VtZW50LCBzdHIpIGFuZCBcCi0gICAgICAgICBub3QgaXNpbnN0YW5jZShyZXBsYWNlbWVudCwgaW50KToKLSAgICAgICAgICByYWlzZSBHeXBFcnJvcignVmFyaWFibGUgJyArIGNvbnRlbnRzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAnIG11c3QgZXhwYW5kIHRvIGEgc3RyaW5nIG9yIGxpc3Qgb2Ygc3RyaW5nczsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvdW5kIGEgJyArIHJlcGxhY2VtZW50Ll9fY2xhc3NfXy5fX25hbWVfXykKLQotICAgIGlmIGV4cGFuZF90b19saXN0OgotICAgICAgIyBFeHBhbmRpbmcgaW4gbGlzdCBjb250ZXh0LiAgSXQncyBndWFyYW50ZWVkIHRoYXQgdGhlcmUncyBvbmx5IG9uZQotICAgICAgIyByZXBsYWNlbWVudCB0byBkbyBpbiB8aW5wdXRfc3RyfCBhbmQgdGhhdCBpdCdzIHRoaXMgcmVwbGFjZW1lbnQuICBTZWUKLSAgICAgICMgYWJvdmUuCi0gICAgICBpZiBpc2luc3RhbmNlKHJlcGxhY2VtZW50LCBsaXN0KToKLSAgICAgICAgIyBJZiBpdCdzIGFscmVhZHkgYSBsaXN0LCBtYWtlIGEgY29weS4KLSAgICAgICAgb3V0cHV0ID0gcmVwbGFjZW1lbnRbOl0KLSAgICAgIGVsc2U6Ci0gICAgICAgICMgU3BsaXQgaXQgdGhlIHNhbWUgd2F5IHNoIHdvdWxkIHNwbGl0IGFyZ3VtZW50cy4KLSAgICAgICAgb3V0cHV0ID0gc2hsZXguc3BsaXQoc3RyKHJlcGxhY2VtZW50KSkKLSAgICBlbHNlOgotICAgICAgIyBFeHBhbmRpbmcgaW4gc3RyaW5nIGNvbnRleHQuCi0gICAgICBlbmNvZGVkX3JlcGxhY2VtZW50ID0gJycKLSAgICAgIGlmIGlzaW5zdGFuY2UocmVwbGFjZW1lbnQsIGxpc3QpOgotICAgICAgICAjIFdoZW4gZXhwYW5kaW5nIGEgbGlzdCBpbnRvIHN0cmluZyBjb250ZXh0LCB0dXJuIHRoZSBsaXN0IGl0ZW1zCi0gICAgICAgICMgaW50byBhIHN0cmluZyBpbiBhIHdheSB0aGF0IHdpbGwgd29yayB3aXRoIGEgc3VicHJvY2VzcyBjYWxsLgotICAgICAgICAjCi0gICAgICAgICMgVE9ETyhtYXJrKTogVGhpcyBpc24ndCBjb21wbGV0ZWx5IGNvcnJlY3QuICBUaGlzIHNob3VsZAotICAgICAgICAjIGNhbGwgYSBnZW5lcmF0b3ItcHJvdmlkZWQgZnVuY3Rpb24gdGhhdCBvYnNlcnZlcyB0aGUKLSAgICAgICAgIyBwcm9wZXIgbGlzdC10by1hcmd1bWVudCBxdW90aW5nIHJ1bGVzIG9uIGEgc3BlY2lmaWMKLSAgICAgICAgIyBwbGF0Zm9ybSBpbnN0ZWFkIG9mIGp1c3QgY2FsbGluZyB0aGUgUE9TSVggZW5jb2RpbmcKLSAgICAgICAgIyByb3V0aW5lLgotICAgICAgICBlbmNvZGVkX3JlcGxhY2VtZW50ID0gZ3lwLmNvbW1vbi5FbmNvZGVQT1NJWFNoZWxsTGlzdChyZXBsYWNlbWVudCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIGVuY29kZWRfcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudAotCi0gICAgICBvdXRwdXQgPSBvdXRwdXRbOnJlcGxhY2Vfc3RhcnRdICsgc3RyKGVuY29kZWRfcmVwbGFjZW1lbnQpICsgXAotICAgICAgICAgICAgICAgb3V0cHV0W3JlcGxhY2VfZW5kOl0KLSAgICAjIFByZXBhcmUgZm9yIHRoZSBuZXh0IG1hdGNoIGl0ZXJhdGlvbi4KLSAgICBpbnB1dF9zdHIgPSBvdXRwdXQKLQotICAjIExvb2sgZm9yIG1vcmUgbWF0Y2hlcyBub3cgdGhhdCB3ZSd2ZSByZXBsYWNlZCBzb21lLCB0byBkZWFsIHdpdGgKLSAgIyBleHBhbmRpbmcgbG9jYWwgdmFyaWFibGVzICh2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgc2FtZQotICAjIHZhcmlhYmxlcyBibG9jayBhcyB0aGlzIG9uZSkuCi0gIGd5cC5EZWJ1Z091dHB1dChneXAuREVCVUdfVkFSSUFCTEVTLAotICAgICAgICAgICAgICAgICAgIkZvdW5kIG91dHB1dCAlcywgcmVjdXJzaW5nLiIgJSByZXByKG91dHB1dCkpCi0gIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBsaXN0KToKLSAgICBpZiBvdXRwdXQgYW5kIGlzaW5zdGFuY2Uob3V0cHV0WzBdLCBsaXN0KToKLSAgICAgICMgTGVhdmUgb3V0cHV0IGFsb25lIGlmIGl0J3MgYSBsaXN0IG9mIGxpc3RzLgotICAgICAgIyBXZSBkb24ndCB3YW50IHN1Y2ggbGlzdHMgdG8gYmUgc3RyaW5naWZpZWQuCi0gICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgIG5ld19vdXRwdXQgPSBbXQotICAgICAgZm9yIGl0ZW0gaW4gb3V0cHV0OgotICAgICAgICBuZXdfb3V0cHV0LmFwcGVuZCgKLSAgICAgICAgICAgIEV4cGFuZFZhcmlhYmxlcyhpdGVtLCBwaGFzZSwgdmFyaWFibGVzLCBidWlsZF9maWxlKSkKLSAgICAgIG91dHB1dCA9IG5ld19vdXRwdXQKLSAgZWxzZToKLSAgICBvdXRwdXQgPSBFeHBhbmRWYXJpYWJsZXMob3V0cHV0LCBwaGFzZSwgdmFyaWFibGVzLCBidWlsZF9maWxlKQotCi0gICMgQ29udmVydCBhbGwgc3RyaW5ncyB0aGF0IGFyZSBjYW5vbmljYWxseS1yZXByZXNlbnRlZCBpbnRlZ2VycyBpbnRvIGludGVnZXJzLgotICBpZiBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCk6Ci0gICAgZm9yIGluZGV4IGluIHhyYW5nZSgwLCBsZW4ob3V0cHV0KSk6Ci0gICAgICBpZiBJc1N0ckNhbm9uaWNhbEludChvdXRwdXRbaW5kZXhdKToKLSAgICAgICAgb3V0cHV0W2luZGV4XSA9IGludChvdXRwdXRbaW5kZXhdKQotICBlbGlmIElzU3RyQ2Fub25pY2FsSW50KG91dHB1dCk6Ci0gICAgb3V0cHV0ID0gaW50KG91dHB1dCkKLQotICByZXR1cm4gb3V0cHV0Ci0KLQotZGVmIFByb2Nlc3NDb25kaXRpb25zSW5EaWN0KHRoZV9kaWN0LCBwaGFzZSwgdmFyaWFibGVzLCBidWlsZF9maWxlKToKLSAgIyBQcm9jZXNzIGEgJ2NvbmRpdGlvbnMnIG9yICd0YXJnZXRfY29uZGl0aW9ucycgc2VjdGlvbiBpbiB0aGVfZGljdCwKLSAgIyBkZXBlbmRpbmcgb24gcGhhc2UuCi0gICMgZWFybHkgLT4gY29uZGl0aW9ucwotICAjIGxhdGUgLT4gdGFyZ2V0X2NvbmRpdGlvbnMKLSAgIyBsYXRlbGF0ZSAtPiBubyBjb25kaXRpb25zCi0gICMKLSAgIyBFYWNoIGl0ZW0gaW4gYSBjb25kaXRpb25zIGxpc3QgY29uc2lzdHMgb2YgY29uZF9leHByLCBhIHN0cmluZyBleHByZXNzaW9uCi0gICMgZXZhbHVhdGVkIGFzIHRoZSBjb25kaXRpb24sIGFuZCB0cnVlX2RpY3QsIGEgZGljdCB0aGF0IHdpbGwgYmUgbWVyZ2VkIGludG8KLSAgIyB0aGVfZGljdCBpZiBjb25kX2V4cHIgZXZhbHVhdGVzIHRvIHRydWUuICBPcHRpb25hbGx5LCBhIHRoaXJkIGl0ZW0sCi0gICMgZmFsc2VfZGljdCwgbWF5IGJlIHByZXNlbnQuICBmYWxzZV9kaWN0IGlzIG1lcmdlZCBpbnRvIHRoZV9kaWN0IGlmCi0gICMgY29uZF9leHByIGV2YWx1YXRlcyB0byBmYWxzZS4KLSAgIwotICAjIEFueSBkaWN0IG1lcmdlZCBpbnRvIHRoZV9kaWN0IHdpbGwgYmUgcmVjdXJzaXZlbHkgcHJvY2Vzc2VkIGZvciBuZXN0ZWQKLSAgIyBjb25kaXRpb25hbHMgYW5kIG90aGVyIGV4cGFuc2lvbnMsIGFsc28gYWNjb3JkaW5nIHRvIHBoYXNlLCBpbW1lZGlhdGVseQotICAjIHByaW9yIHRvIGJlaW5nIG1lcmdlZC4KLQotICBpZiBwaGFzZSA9PSBQSEFTRV9FQVJMWToKLSAgICBjb25kaXRpb25zX2tleSA9ICdjb25kaXRpb25zJwotICBlbGlmIHBoYXNlID09IFBIQVNFX0xBVEU6Ci0gICAgY29uZGl0aW9uc19rZXkgPSAndGFyZ2V0X2NvbmRpdGlvbnMnCi0gIGVsaWYgcGhhc2UgPT0gUEhBU0VfTEFURUxBVEU6Ci0gICAgcmV0dXJuCi0gIGVsc2U6Ci0gICAgYXNzZXJ0IEZhbHNlCi0KLSAgaWYgbm90IGNvbmRpdGlvbnNfa2V5IGluIHRoZV9kaWN0OgotICAgIHJldHVybgotCi0gIGNvbmRpdGlvbnNfbGlzdCA9IHRoZV9kaWN0W2NvbmRpdGlvbnNfa2V5XQotICAjIFVuaG9vayB0aGUgY29uZGl0aW9ucyBsaXN0LCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuCi0gIGRlbCB0aGVfZGljdFtjb25kaXRpb25zX2tleV0KLQotICBmb3IgY29uZGl0aW9uIGluIGNvbmRpdGlvbnNfbGlzdDoKLSAgICBpZiBub3QgaXNpbnN0YW5jZShjb25kaXRpb24sIGxpc3QpOgotICAgICAgcmFpc2UgR3lwRXJyb3IoY29uZGl0aW9uc19rZXkgKyAnIG11c3QgYmUgYSBsaXN0JykKLSAgICBpZiBsZW4oY29uZGl0aW9uKSAhPSAyIGFuZCBsZW4oY29uZGl0aW9uKSAhPSAzOgotICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgY29uZGl0aW9uWzBdIHdvbid0IHdvcmsgaW4gd2hpY2ggY2FzZSB0aGlzCi0gICAgICAjIGF0dGVtcHQgd2lsbCByYWlzZSBpdHMgb3duIEluZGV4RXJyb3IuICBUaGF0J3MgcHJvYmFibHkgZmluZS4KLSAgICAgIHJhaXNlIEd5cEVycm9yKGNvbmRpdGlvbnNfa2V5ICsgJyAnICsgY29uZGl0aW9uWzBdICsKLSAgICAgICAgICAgICAgICAgICAgICcgbXVzdCBiZSBsZW5ndGggMiBvciAzLCBub3QgJyArIHN0cihsZW4oY29uZGl0aW9uKSkpCi0KLSAgICBbY29uZF9leHByLCB0cnVlX2RpY3RdID0gY29uZGl0aW9uWzA6Ml0KLSAgICBmYWxzZV9kaWN0ID0gTm9uZQotICAgIGlmIGxlbihjb25kaXRpb24pID09IDM6Ci0gICAgICBmYWxzZV9kaWN0ID0gY29uZGl0aW9uWzJdCi0KLSAgICAjIERvIGV4cGFuc2lvbnMgb24gdGhlIGNvbmRpdGlvbiBpdHNlbGYuICBTaW5jZSB0aGUgY29uZGl0b24gY2FuIG5hdHVyYWxseQotICAgICMgY29udGFpbiB2YXJpYWJsZSByZWZlcmVuY2VzIHdpdGhvdXQgbmVlZGluZyB0byByZXNvcnQgdG8gR1lQIGV4cGFuc2lvbgotICAgICMgc3ludGF4LCB0aGlzIGlzIG9mIGR1YmlvdXMgdmFsdWUgZm9yIHZhcmlhYmxlcywgYnV0IHNvbWVvbmUgbWlnaHQgd2FudCB0bwotICAgICMgdXNlIGEgY29tbWFuZCBleHBhbnNpb24gZGlyZWN0bHkgaW5zaWRlIGEgY29uZGl0aW9uLgotICAgIGNvbmRfZXhwcl9leHBhbmRlZCA9IEV4cGFuZFZhcmlhYmxlcyhjb25kX2V4cHIsIHBoYXNlLCB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ZpbGUpCi0gICAgaWYgbm90IGlzaW5zdGFuY2UoY29uZF9leHByX2V4cGFuZGVkLCBzdHIpIGFuZCBcCi0gICAgICAgbm90IGlzaW5zdGFuY2UoY29uZF9leHByX2V4cGFuZGVkLCBpbnQpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgJ1ZhcmlhYmxlIGV4cGFuc2lvbiBpbiB0aGlzIGNvbnRleHQgcGVybWl0cyBzdHIgYW5kIGludCAnICsgXAotICAgICAgICAgICAgJ29ubHksIGZvdW5kICcgKyBleHBhbmRlZC5fX2NsYXNzX18uX19uYW1lX18KLQotICAgIHRyeToKLSAgICAgIGFzdF9jb2RlID0gY29tcGlsZShjb25kX2V4cHJfZXhwYW5kZWQsICc8c3RyaW5nPicsICdldmFsJykKLQotICAgICAgaWYgZXZhbChhc3RfY29kZSwgeydfX2J1aWx0aW5zX18nOiBOb25lfSwgdmFyaWFibGVzKToKLSAgICAgICAgbWVyZ2VfZGljdCA9IHRydWVfZGljdAotICAgICAgZWxzZToKLSAgICAgICAgbWVyZ2VfZGljdCA9IGZhbHNlX2RpY3QKLSAgICBleGNlcHQgU3ludGF4RXJyb3IsIGU6Ci0gICAgICBzeW50YXhfZXJyb3IgPSBTeW50YXhFcnJvcignJXMgd2hpbGUgZXZhbHVhdGluZyBjb25kaXRpb24gXCclc1wnIGluICVzICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdCBjaGFyYWN0ZXIgJWQuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKGUuYXJnc1swXSksIGUudGV4dCwgYnVpbGRfZmlsZSwgZS5vZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5maWxlbmFtZSwgZS5saW5lbm8sIGUub2Zmc2V0LCBlLnRleHQpCi0gICAgICByYWlzZSBzeW50YXhfZXJyb3IKLSAgICBleGNlcHQgTmFtZUVycm9yLCBlOgotICAgICAgZ3lwLmNvbW1vbi5FeGNlcHRpb25BcHBlbmQoZSwgJ3doaWxlIGV2YWx1YXRpbmcgY29uZGl0aW9uIFwnJXNcJyBpbiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmRfZXhwcl9leHBhbmRlZCwgYnVpbGRfZmlsZSkpCi0gICAgICByYWlzZQotCi0gICAgaWYgbWVyZ2VfZGljdCAhPSBOb25lOgotICAgICAgIyBFeHBhbmQgdmFyaWFibGVzIGFuZCBuZXN0ZWQgY29uZGl0aW5hbHMgaW4gdGhlIG1lcmdlX2RpY3QgYmVmb3JlCi0gICAgICAjIG1lcmdpbmcgaXQuCi0gICAgICBQcm9jZXNzVmFyaWFibGVzQW5kQ29uZGl0aW9uc0luRGljdChtZXJnZV9kaWN0LCBwaGFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcywgYnVpbGRfZmlsZSkKLQotICAgICAgTWVyZ2VEaWN0cyh0aGVfZGljdCwgbWVyZ2VfZGljdCwgYnVpbGRfZmlsZSwgYnVpbGRfZmlsZSkKLQotCi1kZWYgTG9hZEF1dG9tYXRpY1ZhcmlhYmxlc0Zyb21EaWN0KHZhcmlhYmxlcywgdGhlX2RpY3QpOgotICAjIEFueSBrZXlzIHdpdGggcGxhaW4gc3RyaW5nIHZhbHVlcyBpbiB0aGVfZGljdCBiZWNvbWUgYXV0b21hdGljIHZhcmlhYmxlcy4KLSAgIyBUaGUgdmFyaWFibGUgbmFtZSBpcyB0aGUga2V5IG5hbWUgd2l0aCBhICJfIiBjaGFyYWN0ZXIgcHJlcGVuZGVkLgotICBmb3Iga2V5LCB2YWx1ZSBpbiB0aGVfZGljdC5pdGVyaXRlbXMoKToKLSAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpIG9yIGlzaW5zdGFuY2UodmFsdWUsIGludCkgb3IgXAotICAgICAgIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgdmFyaWFibGVzWydfJyArIGtleV0gPSB2YWx1ZQotCi0KLWRlZiBMb2FkVmFyaWFibGVzRnJvbVZhcmlhYmxlc0RpY3QodmFyaWFibGVzLCB0aGVfZGljdCwgdGhlX2RpY3Rfa2V5KToKLSAgIyBBbnkga2V5cyBpbiB0aGVfZGljdCdzICJ2YXJpYWJsZXMiIGRpY3QsIGlmIGl0IGhhcyBvbmUsIGJlY29tZXMgYQotICAjIHZhcmlhYmxlLiAgVGhlIHZhcmlhYmxlIG5hbWUgaXMgdGhlIGtleSBuYW1lIGluIHRoZSAidmFyaWFibGVzIiBkaWN0LgotICAjIFZhcmlhYmxlcyB0aGF0IGVuZCB3aXRoIHRoZSAlIGNoYXJhY3RlciBhcmUgc2V0IG9ubHkgaWYgdGhleSBhcmUgdW5zZXQgaW4KLSAgIyB0aGUgdmFyaWFibGVzIGRpY3QuICB0aGVfZGljdF9rZXkgaXMgdGhlIG5hbWUgb2YgdGhlIGtleSB0aGF0IGFjY2Vzc2VzCi0gICMgdGhlX2RpY3QgaW4gdGhlX2RpY3QncyBwYXJlbnQgZGljdC4gIElmIHRoZV9kaWN0J3MgcGFyZW50IGlzIG5vdCBhIGRpY3QKLSAgIyAoaXQgY291bGQgYmUgYSBsaXN0IG9yIGl0IGNvdWxkIGJlIHBhcmVudGxlc3MgYmVjYXVzZSBpdCBpcyBhIHJvb3QgZGljdCksCi0gICMgdGhlX2RpY3Rfa2V5IHdpbGwgYmUgTm9uZS4KLSAgZm9yIGtleSwgdmFsdWUgaW4gdGhlX2RpY3QuZ2V0KCd2YXJpYWJsZXMnLCB7fSkuaXRlcml0ZW1zKCk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBpbnQpIGFuZCBcCi0gICAgICAgbm90IGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgY29udGludWUKLQotICAgIGlmIGtleS5lbmRzd2l0aCgnJScpOgotICAgICAgdmFyaWFibGVfbmFtZSA9IGtleVs6LTFdCi0gICAgICBpZiB2YXJpYWJsZV9uYW1lIGluIHZhcmlhYmxlczoKLSAgICAgICAgIyBJZiB0aGUgdmFyaWFibGUgaXMgYWxyZWFkeSBzZXQsIGRvbid0IHNldCBpdC4KLSAgICAgICAgY29udGludWUKLSAgICAgIGlmIHRoZV9kaWN0X2tleSBpcyAndmFyaWFibGVzJyBhbmQgdmFyaWFibGVfbmFtZSBpbiB0aGVfZGljdDoKLSAgICAgICAgIyBJZiB0aGUgdmFyaWFibGUgaXMgc2V0IHdpdGhvdXQgYSAlIGluIHRoZV9kaWN0LCBhbmQgdGhlX2RpY3QgaXMgYQotICAgICAgICAjIHZhcmlhYmxlcyBkaWN0IChtYWtpbmcgfHZhcmlhYmxlc3wgYSB2YXJhaWJsZXMgc3ViLWRpY3Qgb2YgYQotICAgICAgICAjIHZhcmlhYmxlcyBkaWN0KSwgdXNlIHRoZV9kaWN0J3MgZGVmaW5pdGlvbi4KLSAgICAgICAgdmFsdWUgPSB0aGVfZGljdFt2YXJpYWJsZV9uYW1lXQotICAgIGVsaWYga2V5LmVuZHN3aXRoKCchJyk6Ci0gICAgICB2YXJpYWJsZV9uYW1lID0ga2V5WzotMV0KLSAgICAgIGlmIHZhcmlhYmxlX25hbWUgbm90IGluIHZhcmlhYmxlczoKLSAgICAgICAgIyBJZiB0aGUgdmFyaWFibGUgaXMgbm90IGFscmVhZHkgc2V0LCB3ZSBjYW4ndCByZW1vdmUgYW55dGhpbmcgZnJvbSBpdC4KLSAgICAgICAgY29udGludWUKLSAgICAgIHJlbW92ZV90aGVzZSA9IHZhbHVlCi0gICAgICBmaWx0ZXJfZm4gPSBsYW1iZGEgdDogdCBub3QgaW4gcmVtb3ZlX3RoZXNlCi0gICAgICAjIFJlbW92ZSB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgb3JpZ2luYWwgdmFyaWFibGUKLSAgICAgIHZhbHVlID0gZmlsdGVyKGZpbHRlcl9mbiwgdmFyaWFibGVzW3ZhcmlhYmxlX25hbWVdKQotICAgICAgIyBSZW1vdmUgdGhlc2UgdmFsdWVzIGZyb20gYW55IGNvcHkgb2YgdGhhdCB2YXJpYWJsZSB3ZSdyZSBhYm91dCB0byBwcm9jZXNzIDopCi0gICAgICB0aGVfZGljdFsndmFyaWFibGVzJ11bdmFyaWFibGVfbmFtZV0gPSBmaWx0ZXIoZmlsdGVyX2ZuLCB0aGVfZGljdFsndmFyaWFibGVzJ11bdmFyaWFibGVfbmFtZV0pCi0gICAgZWxzZToKLSAgICAgIHZhcmlhYmxlX25hbWUgPSBrZXkKLQotICAgIHZhcmlhYmxlc1t2YXJpYWJsZV9uYW1lXSA9IHZhbHVlCi0KLQotZGVmIFByb2Nlc3NWYXJpYWJsZXNBbmRDb25kaXRpb25zSW5EaWN0KHRoZV9kaWN0LCBwaGFzZSwgdmFyaWFibGVzX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX2ZpbGUsIHRoZV9kaWN0X2tleT1Ob25lKToKLSAgIiIiSGFuZGxlIGFsbCB2YXJpYWJsZSBhbmQgY29tbWFuZCBleHBhbnNpb24gYW5kIGNvbmRpdGlvbmFsIGV2YWx1YXRpb24uCi0KLSAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgcHVibGljIGVudHJ5IHBvaW50IGZvciBhbGwgdmFyaWFibGUgZXhwYW5zaW9ucyBhbmQKLSAgY29uZGl0aW9uYWwgZXZhbHVhdGlvbnMuICBUaGUgdmFyaWFibGVzX2luIGRpY3Rpb25hcnkgd2lsbCBub3QgYmUgbW9kaWZpZWQKLSAgYnkgdGhpcyBmdW5jdGlvbi4KLSAgIiIiCi0KLSAgIyBNYWtlIGEgY29weSBvZiB0aGUgdmFyaWFibGVzX2luIGRpY3QgdGhhdCBjYW4gYmUgbW9kaWZpZWQgZHVyaW5nIHRoZQotICAjIGxvYWRpbmcgb2YgYXV0b21hdGljcyBhbmQgdGhlIGxvYWRpbmcgb2YgdGhlIHZhcmlhYmxlcyBkaWN0LgotICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNfaW4uY29weSgpCi0gIExvYWRBdXRvbWF0aWNWYXJpYWJsZXNGcm9tRGljdCh2YXJpYWJsZXMsIHRoZV9kaWN0KQotCi0gIGlmICd2YXJpYWJsZXMnIGluIHRoZV9kaWN0OgotICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgbG9jYWwgdmFyaWFibGVzIGFyZSBhZGRlZCB0byB0aGUgdmFyaWFibGVzCi0gICAgIyBsaXN0IGJlZm9yZSB3ZSBwcm9jZXNzIHRoZW0gc28gdGhhdCB5b3UgY2FuIHJlZmVyZW5jZSBvbmUKLSAgICAjIHZhcmlhYmxlIGZyb20gYW5vdGhlci4gIFRoZXkgd2lsbCBiZSBmdWxseSBleHBhbmRlZCBieSByZWN1cnNpb24KLSAgICAjIGluIEV4cGFuZFZhcmlhYmxlcy4KLSAgICBmb3Iga2V5LCB2YWx1ZSBpbiB0aGVfZGljdFsndmFyaWFibGVzJ10uaXRlcml0ZW1zKCk6Ci0gICAgICB2YXJpYWJsZXNba2V5XSA9IHZhbHVlCi0KLSAgICAjIEhhbmRsZSB0aGUgYXNzb2NpYXRlZCB2YXJpYWJsZXMgZGljdCBmaXJzdCwgc28gdGhhdCBhbnkgdmFyaWFibGUKLSAgICAjIHJlZmVyZW5jZXMgd2l0aGluIGNhbiBiZSByZXNvbHZlZCBwcmlvciB0byB1c2luZyB0aGVtIGFzIHZhcmlhYmxlcy4KLSAgICAjIFBhc3MgYSBjb3B5IG9mIHRoZSB2YXJpYWJsZXMgZGljdCB0byBhdm9pZCBoYXZpbmcgaXQgYmUgdGFpbnRlZC4KLSAgICAjIE90aGVyd2lzZSwgaXQgd291bGQgaGF2ZSBleHRyYSBhdXRvbWF0aWNzIGFkZGVkIGZvciBldmVyeXRoaW5nIHRoYXQKLSAgICAjIHNob3VsZCBqdXN0IGJlIGFuIG9yZGluYXJ5IHZhcmlhYmxlIGluIHRoaXMgc2NvcGUuCi0gICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkRpY3QodGhlX2RpY3RbJ3ZhcmlhYmxlcyddLCBwaGFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUsICd2YXJpYWJsZXMnKQotCi0gIExvYWRWYXJpYWJsZXNGcm9tVmFyaWFibGVzRGljdCh2YXJpYWJsZXMsIHRoZV9kaWN0LCB0aGVfZGljdF9rZXkpCi0KLSAgZm9yIGtleSwgdmFsdWUgaW4gdGhlX2RpY3QuaXRlcml0ZW1zKCk6Ci0gICAgIyBTa2lwICJ2YXJpYWJsZXMiLCB3aGljaCB3YXMgYWxyZWFkeSBwcm9jZXNzZWQgaWYgcHJlc2VudC4KLSAgICBpZiBrZXkgIT0gJ3ZhcmlhYmxlcycgYW5kIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICBleHBhbmRlZCA9IEV4cGFuZFZhcmlhYmxlcyh2YWx1ZSwgcGhhc2UsIHZhcmlhYmxlcywgYnVpbGRfZmlsZSkKLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4cGFuZGVkLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShleHBhbmRlZCwgaW50KToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgICAnVmFyaWFibGUgZXhwYW5zaW9uIGluIHRoaXMgY29udGV4dCBwZXJtaXRzIHN0ciBhbmQgaW50ICcgKyBcCi0gICAgICAgICAgICAgICdvbmx5LCBmb3VuZCAnICsgZXhwYW5kZWQuX19jbGFzc19fLl9fbmFtZV9fICsgJyBmb3IgJyArIGtleQotICAgICAgdGhlX2RpY3Rba2V5XSA9IGV4cGFuZGVkCi0KLSAgIyBWYXJpYWJsZSBleHBhbnNpb24gbWF5IGhhdmUgcmVzdWx0ZWQgaW4gY2hhbmdlcyB0byBhdXRvbWF0aWNzLiAgUmVsb2FkLgotICAjIFRPRE8obWFyayk6IE9wdGltaXphdGlvbjogb25seSByZWxvYWQgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCi0gIHZhcmlhYmxlcyA9IHZhcmlhYmxlc19pbi5jb3B5KCkKLSAgTG9hZEF1dG9tYXRpY1ZhcmlhYmxlc0Zyb21EaWN0KHZhcmlhYmxlcywgdGhlX2RpY3QpCi0gIExvYWRWYXJpYWJsZXNGcm9tVmFyaWFibGVzRGljdCh2YXJpYWJsZXMsIHRoZV9kaWN0LCB0aGVfZGljdF9rZXkpCi0KLSAgIyBQcm9jZXNzIGNvbmRpdGlvbnMgaW4gdGhpcyBkaWN0LiAgVGhpcyBpcyBkb25lIGFmdGVyIHZhcmlhYmxlIGV4cGFuc2lvbgotICAjIHNvIHRoYXQgY29uZGl0aW9ucyBtYXkgdGFrZSBhZHZhbnRhZ2Ugb2YgZXhwYW5kZWQgdmFyaWFibGVzLiAgRm9yIGV4YW1wbGUsCi0gICMgaWYgdGhlX2RpY3QgY29udGFpbnM6Ci0gICMgICB7J3R5cGUnOiAgICAgICAnPChsaWJyYXJ5X3R5cGUpJywKLSAgIyAgICAnY29uZGl0aW9ucyc6IFtbJ190eXBlPT0ic3RhdGljX2xpYnJhcnkiJywgeyAuLi4gfV1dfSwKLSAgIyBfdHlwZSwgYXMgdXNlZCBpbiB0aGUgY29uZGl0aW9uLCB3aWxsIG9ubHkgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZgotICAjIGxpYnJhcnlfdHlwZSBpZiB2YXJpYWJsZSBleHBhbnNpb24gaXMgcGVyZm9ybWVkIGJlZm9yZSBjb25kaXRpb24KLSAgIyBwcm9jZXNzaW5nLiAgSG93ZXZlciwgY29uZGl0aW9uIHByb2Nlc3Npbmcgc2hvdWxkIG9jY3VyIHByaW9yIHRvIHJlY3Vyc2lvbgotICAjIHNvIHRoYXQgdmFyaWFibGVzIChib3RoIGF1dG9tYXRpYyBhbmQgInZhcmlhYmxlcyIgZGljdCB0eXBlKSBtYXkgYmUKLSAgIyBhZGp1c3RlZCBieSBjb25kaXRpb25zIHNlY3Rpb25zLCBtZXJnZWQgaW50byB0aGVfZGljdCwgYW5kIGhhdmUgdGhlCi0gICMgaW50ZW5kZWQgaW1wYWN0IG9uIGNvbnRhaW5lZCBkaWN0cy4KLSAgIwotICAjIFRoaXMgYXJyYW5nZW1lbnQgbWVhbnMgdGhhdCBhICJjb25kaXRpb25zIiBzZWN0aW9uIGNvbnRhaW5pbmcgYSAidmFyaWFibGVzIgotICAjIHNlY3Rpb24gd2lsbCBvbmx5IGhhdmUgdGhvc2UgdmFyaWFibGVzIGVmZmVjdGl2ZSBpbiBzdWJkaWN0cywgbm90IGluCi0gICMgdGhlX2RpY3QuICBUaGUgd29ya2Fyb3VuZCBpcyB0byBwdXQgYSAiY29uZGl0aW9ucyIgc2VjdGlvbiB3aXRoaW4gYQotICAjICJ2YXJpYWJsZXMiIHNlY3Rpb24uICBGb3IgZXhhbXBsZToKLSAgIyAgIHsnY29uZGl0aW9ucyc6IFtbJ29zPT0ibWFjIicsIHsndmFyaWFibGVzJzogeydkZWZpbmUnOiAnSVNfTUFDJ319XV0sCi0gICMgICAgJ2RlZmluZXMnOiAgICBbJzwoZGVmaW5lKSddLAotICAjICAgICdteV9zdWJkaWN0JzogeydkZWZpbmVzJzogWyc8KGRlZmluZSknXX19LAotICAjIHdpbGwgbm90IHJlc3VsdCBpbiAiSVNfTUFDIiBiZWluZyBhcHBlbmRlZCB0byB0aGUgImRlZmluZXMiIGxpc3QgaW4gdGhlCi0gICMgY3VycmVudCBzY29wZSBidXQgd291bGQgcmVzdWx0IGluIGl0IGJlaW5nIGFwcGVuZGVkIHRvIHRoZSAiZGVmaW5lcyIgbGlzdAotICAjIHdpdGhpbiAibXlfc3ViZGljdCIuICBCeSBjb21wYXJpc29uOgotICAjICAgeyd2YXJpYWJsZXMnOiB7J2NvbmRpdGlvbnMnOiBbWydvcz09Im1hYyInLCB7J2RlZmluZSc6ICdJU19NQUMnfV1dfSwKLSAgIyAgICAnZGVmaW5lcyc6ICAgIFsnPChkZWZpbmUpJ10sCi0gICMgICAgJ215X3N1YmRpY3QnOiB7J2RlZmluZXMnOiBbJzwoZGVmaW5lKSddfX0sCi0gICMgd2lsbCBhcHBlbmQgIklTX01BQyIgdG8gYm90aCAiZGVmaW5lcyIgbGlzdHMuCi0KLSAgIyBFdmFsdWF0ZSBjb25kaXRpb25zIHNlY3Rpb25zLCBhbGxvd2luZyB2YXJpYWJsZSBleHBhbnNpb25zIHdpdGhpbiB0aGVtCi0gICMgYXMgd2VsbCBhcyBuZXN0ZWQgY29uZGl0aW9uYWxzLiAgVGhpcyB3aWxsIHByb2Nlc3MgYSAnY29uZGl0aW9ucycgb3IKLSAgIyAndGFyZ2V0X2NvbmRpdGlvbnMnIHNlY3Rpb24sIHBlcmZvcm0gYXBwcm9wcmlhdGUgbWVyZ2luZyBhbmQgcmVjdXJzaXZlCi0gICMgY29uZGl0aW9uYWwgYW5kIHZhcmlhYmxlIHByb2Nlc3NpbmcsIGFuZCB0aGVuIHJlbW92ZSB0aGUgY29uZGl0aW9ucyBzZWN0aW9uCi0gICMgZnJvbSB0aGVfZGljdCBpZiBpdCBpcyBwcmVzZW50LgotICBQcm9jZXNzQ29uZGl0aW9uc0luRGljdCh0aGVfZGljdCwgcGhhc2UsIHZhcmlhYmxlcywgYnVpbGRfZmlsZSkKLQotICAjIENvbmRpdGlvbmFsIHByb2Nlc3NpbmcgbWF5IGhhdmUgcmVzdWx0ZWQgaW4gY2hhbmdlcyB0byBhdXRvbWF0aWNzIG9yIHRoZQotICAjIHZhcmlhYmxlcyBkaWN0LiAgUmVsb2FkLgotICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNfaW4uY29weSgpCi0gIExvYWRBdXRvbWF0aWNWYXJpYWJsZXNGcm9tRGljdCh2YXJpYWJsZXMsIHRoZV9kaWN0KQotICBMb2FkVmFyaWFibGVzRnJvbVZhcmlhYmxlc0RpY3QodmFyaWFibGVzLCB0aGVfZGljdCwgdGhlX2RpY3Rfa2V5KQotCi0gICMgUmVjdXJzZSBpbnRvIGNoaWxkIGRpY3RzLCBvciBwcm9jZXNzIGNoaWxkIGxpc3RzIHdoaWNoIG1heSByZXN1bHQgaW4KLSAgIyBmdXJ0aGVyIHJlY3Vyc2lvbiBpbnRvIGRlc2NlbmRhbnQgZGljdHMuCi0gIGZvciBrZXksIHZhbHVlIGluIHRoZV9kaWN0Lml0ZXJpdGVtcygpOgotICAgICMgU2tpcCAidmFyaWFibGVzIiBhbmQgc3RyaW5nIHZhbHVlcywgd2hpY2ggd2VyZSBhbHJlYWR5IHByb2Nlc3NlZCBpZgotICAgICMgcHJlc2VudC4KLSAgICBpZiBrZXkgPT0gJ3ZhcmlhYmxlcycgb3IgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgIGNvbnRpbnVlCi0gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICAjIFBhc3MgYSBjb3B5IG9mIHRoZSB2YXJpYWJsZXMgZGljdCBzbyB0aGF0IHN1YmRpY3RzIGNhbid0IGluZmx1ZW5jZQotICAgICAgIyBwYXJlbnRzLgotICAgICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkRpY3QodmFsdWUsIHBoYXNlLCB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlLCBrZXkpCi0gICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKLSAgICAgICMgVGhlIGxpc3QgaXRzZWxmIGNhbid0IGluZmx1ZW5jZSB0aGUgdmFyaWFibGVzIGRpY3QsIGFuZAotICAgICAgIyBQcm9jZXNzVmFyaWFibGVzQW5kQ29uZGl0aW9uc0luTGlzdCB3aWxsIG1ha2UgY29waWVzIG9mIHRoZSB2YXJpYWJsZXMKLSAgICAgICMgZGljdCBpZiBpdCBuZWVkcyB0byBwYXNzIGl0IHRvIHNvbWV0aGluZyB0aGF0IGNhbiBpbmZsdWVuY2UgaXQuICBObwotICAgICAgIyBjb3B5IGlzIG5lY2Vzc2FyeSBoZXJlLgotICAgICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkxpc3QodmFsdWUsIHBoYXNlLCB2YXJpYWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlKQotICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IsICdVbmtub3duIHR5cGUgJyArIHZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJyBmb3IgJyArIGtleQotCi0KLWRlZiBQcm9jZXNzVmFyaWFibGVzQW5kQ29uZGl0aW9uc0luTGlzdCh0aGVfbGlzdCwgcGhhc2UsIHZhcmlhYmxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9maWxlKToKLSAgIyBJdGVyYXRlIHVzaW5nIGFuIGluZGV4IHNvIHRoYXQgbmV3IHZhbHVlcyBjYW4gYmUgYXNzaWduZWQgaW50byB0aGVfbGlzdC4KLSAgaW5kZXggPSAwCi0gIHdoaWxlIGluZGV4IDwgbGVuKHRoZV9saXN0KToKLSAgICBpdGVtID0gdGhlX2xpc3RbaW5kZXhdCi0gICAgaWYgaXNpbnN0YW5jZShpdGVtLCBkaWN0KToKLSAgICAgICMgTWFrZSBhIGNvcHkgb2YgdGhlIHZhcmlhYmxlcyBkaWN0IHNvIHRoYXQgaXQgd29uJ3QgaW5mbHVlbmNlIGFueXRoaW5nCi0gICAgICAjIG91dHNpZGUgb2YgaXRzIG93biBzY29wZS4KLSAgICAgIFByb2Nlc3NWYXJpYWJsZXNBbmRDb25kaXRpb25zSW5EaWN0KGl0ZW0sIHBoYXNlLCB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpCi0gICAgZWxpZiBpc2luc3RhbmNlKGl0ZW0sIGxpc3QpOgotICAgICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkxpc3QoaXRlbSwgcGhhc2UsIHZhcmlhYmxlcywgYnVpbGRfZmlsZSkKLSAgICBlbGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKLSAgICAgIGV4cGFuZGVkID0gRXhwYW5kVmFyaWFibGVzKGl0ZW0sIHBoYXNlLCB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpCi0gICAgICBpZiBpc2luc3RhbmNlKGV4cGFuZGVkLCBzdHIpIG9yIGlzaW5zdGFuY2UoZXhwYW5kZWQsIGludCk6Ci0gICAgICAgIHRoZV9saXN0W2luZGV4XSA9IGV4cGFuZGVkCi0gICAgICBlbGlmIGlzaW5zdGFuY2UoZXhwYW5kZWQsIGxpc3QpOgotICAgICAgICB0aGVfbGlzdFtpbmRleDppbmRleCsxXSA9IGV4cGFuZGVkCi0gICAgICAgIGluZGV4ICs9IGxlbihleHBhbmRlZCkKLQotICAgICAgICAjIGluZGV4IG5vdyBpZGVudGlmaWVzIHRoZSBuZXh0IGl0ZW0gdG8gZXhhbWluZS4gIENvbnRpbnVlIHJpZ2h0IG5vdwotICAgICAgICAjIHdpdGhvdXQgZmFsbGluZyBpbnRvIHRoZSBpbmRleCBpbmNyZW1lbnQgYmVsb3cuCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCBcCi0gICAgICAgICAgICAgICdWYXJpYWJsZSBleHBhbnNpb24gaW4gdGhpcyBjb250ZXh0IHBlcm1pdHMgc3RyaW5ncyBhbmQgJyArIFwKLSAgICAgICAgICAgICAgJ2xpc3RzIG9ubHksIGZvdW5kICcgKyBleHBhbmRlZC5fX2NsYXNzX18uX19uYW1lX18gKyAnIGF0ICcgKyBcCi0gICAgICAgICAgICAgIGluZGV4Ci0gICAgZWxpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgotICAgICAgcmFpc2UgVHlwZUVycm9yLCAnVW5rbm93biB0eXBlICcgKyBpdGVtLl9fY2xhc3NfXy5fX25hbWVfXyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJyBhdCBpbmRleCAnICsgaW5kZXgKLSAgICBpbmRleCA9IGluZGV4ICsgMQotCi0KLWRlZiBCdWlsZFRhcmdldHNEaWN0KGRhdGEpOgotICAiIiJCdWlsZHMgYSBkaWN0IG1hcHBpbmcgZnVsbHktcXVhbGlmaWVkIHRhcmdldCBuYW1lcyB0byB0aGVpciB0YXJnZXQgZGljdHMuCi0KLSAgfGRhdGF8IGlzIGEgZGljdCBtYXBwaW5nIGxvYWRlZCBidWlsZCBmaWxlcyBieSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUKLSAgY3VycmVudCBkaXJlY3RvcnkuICBWYWx1ZXMgaW4gfGRhdGF8IGFyZSBidWlsZCBmaWxlIGNvbnRlbnRzLiAgRm9yIGVhY2gKLSAgfGRhdGF8IHZhbHVlIHdpdGggYSAidGFyZ2V0cyIga2V5LCB0aGUgdmFsdWUgb2YgdGhlICJ0YXJnZXRzIiBrZXkgaXMgdGFrZW4KLSAgYXMgYSBsaXN0IGNvbnRhaW5pbmcgdGFyZ2V0IGRpY3RzLiAgRWFjaCB0YXJnZXQncyBmdWxseS1xdWFsaWZpZWQgbmFtZSBpcwotICBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBwYXRobmFtZSBvZiB0aGUgYnVpbGQgZmlsZSAofGRhdGF8IGtleSkgYW5kIGl0cwotICAidGFyZ2V0X25hbWUiIHByb3BlcnR5LiAgVGhlc2UgZnVsbHktcXVhbGlmaWVkIG5hbWVzIGFyZSB1c2VkIGFzIHRoZSBrZXlzCi0gIGluIHRoZSByZXR1cm5lZCBkaWN0LiAgVGhlc2Uga2V5cyBwcm92aWRlIGFjY2VzcyB0byB0aGUgdGFyZ2V0IGRpY3RzLAotICB0aGUgZGljdHMgaW4gdGhlICJ0YXJnZXRzIiBsaXN0cy4KLSAgIiIiCi0KLSAgdGFyZ2V0cyA9IHt9Ci0gIGZvciBidWlsZF9maWxlIGluIGRhdGFbJ3RhcmdldF9idWlsZF9maWxlcyddOgotICAgIGZvciB0YXJnZXQgaW4gZGF0YVtidWlsZF9maWxlXS5nZXQoJ3RhcmdldHMnLCBbXSk6Ci0gICAgICB0YXJnZXRfbmFtZSA9IGd5cC5jb21tb24uUXVhbGlmaWVkVGFyZ2V0KGJ1aWxkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFsndGFyZ2V0X25hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Wyd0b29sc2V0J10pCi0gICAgICBpZiB0YXJnZXRfbmFtZSBpbiB0YXJnZXRzOgotICAgICAgICByYWlzZSBHeXBFcnJvcignRHVwbGljYXRlIHRhcmdldCBkZWZpbml0aW9ucyBmb3IgJyArIHRhcmdldF9uYW1lKQotICAgICAgdGFyZ2V0c1t0YXJnZXRfbmFtZV0gPSB0YXJnZXQKLQotICByZXR1cm4gdGFyZ2V0cwotCi0KLWRlZiBRdWFsaWZ5RGVwZW5kZW5jaWVzKHRhcmdldHMpOgotICAiIiJNYWtlIGRlcGVuZGVuY3kgbGlua3MgZnVsbHktcXVhbGlmaWVkIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotICB8dGFyZ2V0c3wgaXMgYSBkaWN0IG1hcHBpbmcgZnVsbHktcXVhbGlmaWVkIHRhcmdldCBuYW1lcyB0byB0aGVpciB0YXJnZXQKLSAgZGljdHMuICBGb3IgZWFjaCB0YXJnZXQgaW4gdGhpcyBkaWN0LCBrZXlzIGtub3duIHRvIGNvbnRhaW4gZGVwZW5kZW5jeQotICBsaW5rcyBhcmUgZXhhbWluZWQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHJlZmVyZW5jZWQgd2lsbCBiZSByZXdyaXR0ZW4KLSAgc28gdGhhdCB0aGV5IGFyZSBmdWxseS1xdWFsaWZpZWQgYW5kIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgQWxsIHJld3JpdHRlbiBkZXBlbmRlbmNpZXMgYXJlIHN1aXRhYmxlIGZvciB1c2UgYXMga2V5cyB0byB8dGFyZ2V0c3wgb3IgYQotICBzaW1pbGFyIGRpY3QuCi0gICIiIgotCi0gIGFsbF9kZXBlbmRlbmN5X3NlY3Rpb25zID0gW2RlcCArIG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kZW5jeV9zZWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gKCcnLCAnIScsICcvJyldCi0KLSAgZm9yIHRhcmdldCwgdGFyZ2V0X2RpY3QgaW4gdGFyZ2V0cy5pdGVyaXRlbXMoKToKLSAgICB0YXJnZXRfYnVpbGRfZmlsZSA9IGd5cC5jb21tb24uQnVpbGRGaWxlKHRhcmdldCkKLSAgICB0b29sc2V0ID0gdGFyZ2V0X2RpY3RbJ3Rvb2xzZXQnXQotICAgIGZvciBkZXBlbmRlbmN5X2tleSBpbiBhbGxfZGVwZW5kZW5jeV9zZWN0aW9uczoKLSAgICAgIGRlcGVuZGVuY2llcyA9IHRhcmdldF9kaWN0LmdldChkZXBlbmRlbmN5X2tleSwgW10pCi0gICAgICBmb3IgaW5kZXggaW4geHJhbmdlKDAsIGxlbihkZXBlbmRlbmNpZXMpKToKLSAgICAgICAgZGVwX2ZpbGUsIGRlcF90YXJnZXQsIGRlcF90b29sc2V0ID0gZ3lwLmNvbW1vbi5SZXNvbHZlVGFyZ2V0KAotICAgICAgICAgICAgdGFyZ2V0X2J1aWxkX2ZpbGUsIGRlcGVuZGVuY2llc1tpbmRleF0sIHRvb2xzZXQpCi0gICAgICAgIGlmIG5vdCBtdWx0aXBsZV90b29sc2V0czoKLSAgICAgICAgICAjIElnbm9yZSB0b29sc2V0IHNwZWNpZmljYXRpb24gaW4gdGhlIGRlcGVuZGVuY3kgaWYgaXQgaXMgc3BlY2lmaWVkLgotICAgICAgICAgIGRlcF90b29sc2V0ID0gdG9vbHNldAotICAgICAgICBkZXBlbmRlbmN5ID0gZ3lwLmNvbW1vbi5RdWFsaWZpZWRUYXJnZXQoZGVwX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBfdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3Rvb2xzZXQpCi0gICAgICAgIGRlcGVuZGVuY2llc1tpbmRleF0gPSBkZXBlbmRlbmN5Ci0KLSAgICAgICAgIyBNYWtlIHN1cmUgYW55dGhpbmcgYXBwZWFyaW5nIGluIGEgbGlzdCBvdGhlciB0aGFuICJkZXBlbmRlbmNpZXMiIGFsc28KLSAgICAgICAgIyBhcHBlYXJzIGluIHRoZSAiZGVwZW5kZW5jaWVzIiBsaXN0LgotICAgICAgICBpZiBkZXBlbmRlbmN5X2tleSAhPSAnZGVwZW5kZW5jaWVzJyBhbmQgXAotICAgICAgICAgICBkZXBlbmRlbmN5IG5vdCBpbiB0YXJnZXRfZGljdFsnZGVwZW5kZW5jaWVzJ106Ci0gICAgICAgICAgcmFpc2UgR3lwRXJyb3IoJ0ZvdW5kICcgKyBkZXBlbmRlbmN5ICsgJyBpbiAnICsgZGVwZW5kZW5jeV9rZXkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICcgb2YgJyArIHRhcmdldCArICcsIGJ1dCBub3QgaW4gZGVwZW5kZW5jaWVzJykKLQotCi1kZWYgRXhwYW5kV2lsZGNhcmREZXBlbmRlbmNpZXModGFyZ2V0cywgZGF0YSk6Ci0gICIiIkV4cGFuZHMgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBhcyBidWlsZF9maWxlOiouCi0KLSAgRm9yIGVhY2ggdGFyZ2V0IGluIHx0YXJnZXRzfCwgZXhhbWluZXMgc2VjdGlvbnMgY29udGFpbmluZyBsaW5rcyB0byBvdGhlcgotICB0YXJnZXRzLiAgSWYgYW55IHN1Y2ggc2VjdGlvbiBjb250YWlucyBhIGxpbmsgb2YgdGhlIGZvcm0gYnVpbGRfZmlsZToqLCBpdAotICBpcyB0YWtlbiBhcyBhIHdpbGRjYXJkIGxpbmssIGFuZCBpcyBleHBhbmRlZCB0byBsaXN0IGVhY2ggdGFyZ2V0IGluCi0gIGJ1aWxkX2ZpbGUuICBUaGUgfGRhdGF8IGRpY3QgcHJvdmlkZXMgYWNjZXNzIHRvIGJ1aWxkIGZpbGUgZGljdHMuCi0KLSAgQW55IHRhcmdldCB0aGF0IGRvZXMgbm90IHdpc2ggdG8gYmUgaW5jbHVkZWQgYnkgd2lsZGNhcmQgY2FuIHByb3ZpZGUgYW4KLSAgb3B0aW9uYWwgInN1cHByZXNzX3dpbGRjYXJkIiBrZXkgaW4gaXRzIHRhcmdldCBkaWN0LiAgV2hlbiBwcmVzZW50IGFuZAotICB0cnVlLCBhIHdpbGRjYXJkIGRlcGVuZGVuY3kgbGluayB3aWxsIG5vdCBpbmNsdWRlIHN1Y2ggdGFyZ2V0cy4KLQotICBBbGwgZGVwZW5kZW5jeSBuYW1lcywgaW5jbHVkaW5nIHRoZSBrZXlzIHRvIHx0YXJnZXRzfCBhbmQgdGhlIHZhbHVlcyBpbiBlYWNoCi0gIGRlcGVuZGVuY3kgbGlzdCwgbXVzdCBiZSBxdWFsaWZpZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAgIiIiCi0KLSAgZm9yIHRhcmdldCwgdGFyZ2V0X2RpY3QgaW4gdGFyZ2V0cy5pdGVyaXRlbXMoKToKLSAgICB0b29sc2V0ID0gdGFyZ2V0X2RpY3RbJ3Rvb2xzZXQnXQotICAgIHRhcmdldF9idWlsZF9maWxlID0gZ3lwLmNvbW1vbi5CdWlsZEZpbGUodGFyZ2V0KQotICAgIGZvciBkZXBlbmRlbmN5X2tleSBpbiBkZXBlbmRlbmN5X3NlY3Rpb25zOgotICAgICAgZGVwZW5kZW5jaWVzID0gdGFyZ2V0X2RpY3QuZ2V0KGRlcGVuZGVuY3lfa2V5LCBbXSkKLQotICAgICAgIyBMb29wIHRoaXMgd2F5IGluc3RlYWQgb2YgImZvciBkZXBlbmRlbmN5IGluIiBvciAiZm9yIGluZGV4IGluIHhyYW5nZSIKLSAgICAgICMgYmVjYXVzZSB0aGUgZGVwZW5kZW5jaWVzIGxpc3Qgd2lsbCBiZSBtb2RpZmllZCB3aXRoaW4gdGhlIGxvb3AgYm9keS4KLSAgICAgIGluZGV4ID0gMAotICAgICAgd2hpbGUgaW5kZXggPCBsZW4oZGVwZW5kZW5jaWVzKToKLSAgICAgICAgKGRlcGVuZGVuY3lfYnVpbGRfZmlsZSwgZGVwZW5kZW5jeV90YXJnZXQsIGRlcGVuZGVuY3lfdG9vbHNldCkgPSBcCi0gICAgICAgICAgICBneXAuY29tbW9uLlBhcnNlUXVhbGlmaWVkVGFyZ2V0KGRlcGVuZGVuY2llc1tpbmRleF0pCi0gICAgICAgIGlmIGRlcGVuZGVuY3lfdGFyZ2V0ICE9ICcqJyBhbmQgZGVwZW5kZW5jeV90b29sc2V0ICE9ICcqJzoKLSAgICAgICAgICAjIE5vdCBhIHdpbGRjYXJkLiAgS2VlcCBpdCBtb3ZpbmcuCi0gICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGlmIGRlcGVuZGVuY3lfYnVpbGRfZmlsZSA9PSB0YXJnZXRfYnVpbGRfZmlsZToKLSAgICAgICAgICAjIEl0J3MgYW4gZXJyb3IgZm9yIGEgdGFyZ2V0IHRvIGRlcGVuZCBvbiBhbGwgb3RoZXIgdGFyZ2V0cyBpbgotICAgICAgICAgICMgdGhlIHNhbWUgZmlsZSwgYmVjYXVzZSBhIHRhcmdldCBjYW5ub3QgZGVwZW5kIG9uIGl0c2VsZi4KLSAgICAgICAgICByYWlzZSBHeXBFcnJvcignRm91bmQgd2lsZGNhcmQgaW4gJyArIGRlcGVuZGVuY3lfa2V5ICsgJyBvZiAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgKyAnIHJlZmVycmluZyB0byBzYW1lIGJ1aWxkIGZpbGUnKQotCi0gICAgICAgICMgVGFrZSB0aGUgd2lsZGNhcmQgb3V0IGFuZCBhZGp1c3QgdGhlIGluZGV4IHNvIHRoYXQgdGhlIG5leHQKLSAgICAgICAgIyBkZXBlbmRlbmN5IGluIHRoZSBsaXN0IHdpbGwgYmUgcHJvY2Vzc2VkIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUKLSAgICAgICAgIyBsb29wLgotICAgICAgICBkZWwgZGVwZW5kZW5jaWVzW2luZGV4XQotICAgICAgICBpbmRleCA9IGluZGV4IC0gMQotCi0gICAgICAgICMgTG9vcCB0aHJvdWdoIHRoZSB0YXJnZXRzIGluIHRoZSBvdGhlciBidWlsZCBmaWxlLCBhZGRpbmcgdGhlbSB0bwotICAgICAgICAjIHRoaXMgdGFyZ2V0J3MgbGlzdCBvZiBkZXBlbmRlbmNpZXMgaW4gcGxhY2Ugb2YgdGhlIHJlbW92ZWQKLSAgICAgICAgIyB3aWxkY2FyZC4KLSAgICAgICAgZGVwZW5kZW5jeV90YXJnZXRfZGljdHMgPSBkYXRhW2RlcGVuZGVuY3lfYnVpbGRfZmlsZV1bJ3RhcmdldHMnXQotICAgICAgICBmb3IgZGVwZW5kZW5jeV90YXJnZXRfZGljdCBpbiBkZXBlbmRlbmN5X3RhcmdldF9kaWN0czoKLSAgICAgICAgICBpZiBpbnQoZGVwZW5kZW5jeV90YXJnZXRfZGljdC5nZXQoJ3N1cHByZXNzX3dpbGRjYXJkJywgRmFsc2UpKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgZGVwZW5kZW5jeV90YXJnZXRfbmFtZSA9IGRlcGVuZGVuY3lfdGFyZ2V0X2RpY3RbJ3RhcmdldF9uYW1lJ10KLSAgICAgICAgICBpZiAoZGVwZW5kZW5jeV90YXJnZXQgIT0gJyonIGFuZAotICAgICAgICAgICAgICBkZXBlbmRlbmN5X3RhcmdldCAhPSBkZXBlbmRlbmN5X3RhcmdldF9uYW1lKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgZGVwZW5kZW5jeV90YXJnZXRfdG9vbHNldCA9IGRlcGVuZGVuY3lfdGFyZ2V0X2RpY3RbJ3Rvb2xzZXQnXQotICAgICAgICAgIGlmIChkZXBlbmRlbmN5X3Rvb2xzZXQgIT0gJyonIGFuZAotICAgICAgICAgICAgICBkZXBlbmRlbmN5X3Rvb2xzZXQgIT0gZGVwZW5kZW5jeV90YXJnZXRfdG9vbHNldCk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgIGRlcGVuZGVuY3kgPSBneXAuY29tbW9uLlF1YWxpZmllZFRhcmdldChkZXBlbmRlbmN5X2J1aWxkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lfdGFyZ2V0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lfdGFyZ2V0X3Rvb2xzZXQpCi0gICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICBkZXBlbmRlbmNpZXMuaW5zZXJ0KGluZGV4LCBkZXBlbmRlbmN5KQotCi0gICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0KLQotZGVmIFVuaWZ5KGwpOgotICAiIiJSZW1vdmVzIGR1cGxpY2F0ZSBlbGVtZW50cyBmcm9tIGwsIGtlZXBpbmcgdGhlIGZpcnN0IGVsZW1lbnQuIiIiCi0gIHNlZW4gPSB7fQotICByZXR1cm4gW3NlZW4uc2V0ZGVmYXVsdChlLCBlKSBmb3IgZSBpbiBsIGlmIGUgbm90IGluIHNlZW5dCi0KLQotZGVmIFJlbW92ZUR1cGxpY2F0ZURlcGVuZGVuY2llcyh0YXJnZXRzKToKLSAgIiIiTWFrZXMgc3VyZSBldmVyeSBkZXBlbmRlbmN5IGFwcGVhcnMgb25seSBvbmNlIGluIGFsbCB0YXJnZXRzJ3MgZGVwZW5kZW5jeQotICBsaXN0cy4iIiIKLSAgZm9yIHRhcmdldF9uYW1lLCB0YXJnZXRfZGljdCBpbiB0YXJnZXRzLml0ZXJpdGVtcygpOgotICAgIGZvciBkZXBlbmRlbmN5X2tleSBpbiBkZXBlbmRlbmN5X3NlY3Rpb25zOgotICAgICAgZGVwZW5kZW5jaWVzID0gdGFyZ2V0X2RpY3QuZ2V0KGRlcGVuZGVuY3lfa2V5LCBbXSkKLSAgICAgIGlmIGRlcGVuZGVuY2llczoKLSAgICAgICAgdGFyZ2V0X2RpY3RbZGVwZW5kZW5jeV9rZXldID0gVW5pZnkoZGVwZW5kZW5jaWVzKQotCi0KLWNsYXNzIERlcGVuZGVuY3lHcmFwaE5vZGUob2JqZWN0KToKLSAgIiIiCi0KLSAgQXR0cmlidXRlczoKLSAgICByZWY6IEEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IHRoaXMgRGVwZW5kZW5jeUdyYXBoTm9kZSByZXByZXNlbnRzLgotICAgIGRlcGVuZGVuY2llczogTGlzdCBvZiBEZXBlbmRlbmN5R3JhcGhOb2RlcyBvbiB3aGljaCB0aGlzIG9uZSBkZXBlbmRzLgotICAgIGRlcGVuZGVudHM6IExpc3Qgb2YgRGVwZW5kZW5jeUdyYXBoTm9kZXMgdGhhdCBkZXBlbmQgb24gdGhpcyBvbmUuCi0gICIiIgotCi0gIGNsYXNzIENpcmN1bGFyRXhjZXB0aW9uKEd5cEVycm9yKToKLSAgICBwYXNzCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZik6Ci0gICAgc2VsZi5yZWYgPSByZWYKLSAgICBzZWxmLmRlcGVuZGVuY2llcyA9IFtdCi0gICAgc2VsZi5kZXBlbmRlbnRzID0gW10KLQotICBkZWYgRmxhdHRlblRvTGlzdChzZWxmKToKLSAgICAjIGZsYXRfbGlzdCBpcyB0aGUgc29ydGVkIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIC0gYWN0dWFsbHksIHRoZSBsaXN0IGl0ZW1zCi0gICAgIyBhcmUgdGhlICJyZWYiIGF0dHJpYnV0ZXMgb2YgRGVwZW5kZW5jeUdyYXBoTm9kZXMuICBFdmVyeSB0YXJnZXQgd2lsbAotICAgICMgYXBwZWFyIGluIGZsYXRfbGlzdCBhZnRlciBhbGwgb2YgaXRzIGRlcGVuZGVuY2llcywgYW5kIGJlZm9yZSBhbGwgb2YgaXRzCi0gICAgIyBkZXBlbmRlbnRzLgotICAgIGZsYXRfbGlzdCA9IFtdCi0KLSAgICAjIGluX2RlZ3JlZV96ZXJvcyBpcyB0aGUgbGlzdCBvZiBEZXBlbmRlbmN5R3JhcGhOb2RlcyB0aGF0IGhhdmUgbm8KLSAgICAjIGRlcGVuZGVuY2llcyBub3QgaW4gZmxhdF9saXN0LiAgSW5pdGlhbGx5LCBpdCBpcyBhIGNvcHkgb2YgdGhlIGNoaWxkcmVuCi0gICAgIyBvZiB0aGlzIG5vZGUsIGJlY2F1c2Ugd2hlbiB0aGUgZ3JhcGggd2FzIGJ1aWx0LCBub2RlcyB3aXRoIG5vCi0gICAgIyBkZXBlbmRlbmNpZXMgd2VyZSBtYWRlIGltcGxpY2l0IGRlcGVuZGVudHMgb2YgdGhlIHJvb3Qgbm9kZS4KLSAgICBpbl9kZWdyZWVfemVyb3MgPSBzZXQoc2VsZi5kZXBlbmRlbnRzWzpdKQotCi0gICAgd2hpbGUgaW5fZGVncmVlX3plcm9zOgotICAgICAgIyBOb2RlcyBpbiBpbl9kZWdyZWVfemVyb3MgaGF2ZSBubyBkZXBlbmRlbmNpZXMgbm90IGluIGZsYXRfbGlzdCwgc28gdGhleQotICAgICAgIyBjYW4gYmUgYXBwZW5kZWQgdG8gZmxhdF9saXN0LiAgVGFrZSB0aGVzZSBub2RlcyBvdXQgb2YgaW5fZGVncmVlX3plcm9zCi0gICAgICAjIGFzIHdvcmsgcHJvZ3Jlc3Nlcywgc28gdGhhdCB0aGUgbmV4dCBub2RlIHRvIHByb2Nlc3MgZnJvbSB0aGUgbGlzdCBjYW4KLSAgICAgICMgYWx3YXlzIGJlIGFjY2Vzc2VkIGF0IGEgY29uc2lzdGVudCBwb3NpdGlvbi4KLSAgICAgIG5vZGUgPSBpbl9kZWdyZWVfemVyb3MucG9wKCkKLSAgICAgIGZsYXRfbGlzdC5hcHBlbmQobm9kZS5yZWYpCi0KLSAgICAgICMgTG9vayBhdCBkZXBlbmRlbnRzIG9mIHRoZSBub2RlIGp1c3QgYWRkZWQgdG8gZmxhdF9saXN0LiAgU29tZSBvZiB0aGVtCi0gICAgICAjIG1heSBub3cgYmVsb25nIGluIGluX2RlZ3JlZV96ZXJvcy4KLSAgICAgIGZvciBub2RlX2RlcGVuZGVudCBpbiBub2RlLmRlcGVuZGVudHM6Ci0gICAgICAgIGlzX2luX2RlZ3JlZV96ZXJvID0gVHJ1ZQotICAgICAgICBmb3Igbm9kZV9kZXBlbmRlbnRfZGVwZW5kZW5jeSBpbiBub2RlX2RlcGVuZGVudC5kZXBlbmRlbmNpZXM6Ci0gICAgICAgICAgaWYgbm90IG5vZGVfZGVwZW5kZW50X2RlcGVuZGVuY3kucmVmIGluIGZsYXRfbGlzdDoKLSAgICAgICAgICAgICMgVGhlIGRlcGVuZGVudCBvbmUgb3IgbW9yZSBkZXBlbmRlbmNpZXMgbm90IGluIGZsYXRfbGlzdC4gIFRoZXJlCi0gICAgICAgICAgICAjIHdpbGwgYmUgbW9yZSBjaGFuY2VzIHRvIGFkZCBpdCB0byBmbGF0X2xpc3Qgd2hlbiBleGFtaW5pbmcKLSAgICAgICAgICAgICMgaXQgYWdhaW4gYXMgYSBkZXBlbmRlbnQgb2YgdGhvc2Ugb3RoZXIgZGVwZW5kZW5jaWVzLCBwcm92aWRlZAotICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGFyZSBubyBjeWNsZXMuCi0gICAgICAgICAgICBpc19pbl9kZWdyZWVfemVybyA9IEZhbHNlCi0gICAgICAgICAgICBicmVhawotCi0gICAgICAgIGlmIGlzX2luX2RlZ3JlZV96ZXJvOgotICAgICAgICAgICMgQWxsIG9mIHRoZSBkZXBlbmRlbnQncyBkZXBlbmRlbmNpZXMgYXJlIGFscmVhZHkgaW4gZmxhdF9saXN0LiAgQWRkCi0gICAgICAgICAgIyBpdCB0byBpbl9kZWdyZWVfemVyb3Mgd2hlcmUgaXQgd2lsbCBiZSBwcm9jZXNzZWQgaW4gYSBmdXR1cmUKLSAgICAgICAgICAjIGl0ZXJhdGlvbiBvZiB0aGUgb3V0ZXIgbG9vcC4KLSAgICAgICAgICBpbl9kZWdyZWVfemVyb3MuYWRkKG5vZGVfZGVwZW5kZW50KQotCi0gICAgcmV0dXJuIGZsYXRfbGlzdAotCi0gIGRlZiBEaXJlY3REZXBlbmRlbmNpZXMoc2VsZiwgZGVwZW5kZW5jaWVzPU5vbmUpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGp1c3QgZGlyZWN0IGRlcGVuZGVuY2llcy4iIiIKLSAgICBpZiBkZXBlbmRlbmNpZXMgPT0gTm9uZToKLSAgICAgIGRlcGVuZGVuY2llcyA9IFtdCi0KLSAgICBmb3IgZGVwZW5kZW5jeSBpbiBzZWxmLmRlcGVuZGVuY2llczoKLSAgICAgICMgQ2hlY2sgZm9yIE5vbmUsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJvb3Qgbm9kZS4KLSAgICAgIGlmIGRlcGVuZGVuY3kucmVmICE9IE5vbmUgYW5kIGRlcGVuZGVuY3kucmVmIG5vdCBpbiBkZXBlbmRlbmNpZXM6Ci0gICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeS5yZWYpCi0KLSAgICByZXR1cm4gZGVwZW5kZW5jaWVzCi0KLSAgZGVmIF9BZGRJbXBvcnRlZERlcGVuZGVuY2llcyhzZWxmLCB0YXJnZXRzLCBkZXBlbmRlbmNpZXM9Tm9uZSk6Ci0gICAgIiIiR2l2ZW4gYSBsaXN0IG9mIGRpcmVjdCBkZXBlbmRlbmNpZXMsIGFkZHMgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRoYXQKLSAgICBvdGhlciBkZXBlbmRlbmNpZXMgaGF2ZSBkZWNsYXJlZCB0byBleHBvcnQgdGhlaXIgc2V0dGluZ3MuCi0KLSAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBvcGVyYXRlIG9uIHNlbGYuICBSYXRoZXIsIGl0IG9wZXJhdGVzIG9uIHRoZSBsaXN0Ci0gICAgb2YgZGVwZW5kZW5jaWVzIGluIHRoZSB8ZGVwZW5kZW5jaWVzfCBhcmd1bWVudC4gIEZvciBlYWNoIGRlcGVuZGVuY3kgaW4KLSAgICB0aGF0IGxpc3QsIGlmIGFueSBkZWNsYXJlcyB0aGF0IGl0IGV4cG9ydHMgdGhlIHNldHRpbmdzIG9mIG9uZSBvZiBpdHMKLSAgICBvd24gZGVwZW5kZW5jaWVzLCB0aG9zZSBkZXBlbmRlbmNpZXMgd2hvc2Ugc2V0dGluZ3MgYXJlICJwYXNzZWQgdGhyb3VnaCIKLSAgICBhcmUgYWRkZWQgdG8gdGhlIGxpc3QuICBBcyBuZXcgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZSBsaXN0LCB0aGV5IHRvbyB3aWxsCi0gICAgYmUgcHJvY2Vzc2VkLCBzbyBpdCBpcyBwb3NzaWJsZSB0byBpbXBvcnQgc2V0dGluZ3MgdGhyb3VnaCBtdWx0aXBsZSBsZXZlbHMKLSAgICBvZiBkZXBlbmRlbmNpZXMuCi0KLSAgICBUaGlzIG1ldGhvZCBpcyBub3QgdGVycmlibHkgdXNlZnVsIG9uIGl0cyBvd24sIGl0IGRlcGVuZHMgb24gYmVpbmcKLSAgICAicHJpbWVkIiB3aXRoIGEgbGlzdCBvZiBkaXJlY3QgZGVwZW5kZW5jaWVzIHN1Y2ggYXMgb25lIHByb3ZpZGVkIGJ5Ci0gICAgRGlyZWN0RGVwZW5kZW5jaWVzLiAgRGlyZWN0QW5kSW1wb3J0ZWREZXBlbmRlbmNpZXMgaXMgaW50ZW5kZWQgdG8gYmUgdGhlCi0gICAgcHVibGljIGVudHJ5IHBvaW50LgotICAgICIiIgotCi0gICAgaWYgZGVwZW5kZW5jaWVzID09IE5vbmU6Ci0gICAgICBkZXBlbmRlbmNpZXMgPSBbXQotCi0gICAgaW5kZXggPSAwCi0gICAgd2hpbGUgaW5kZXggPCBsZW4oZGVwZW5kZW5jaWVzKToKLSAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaW5kZXhdCi0gICAgICBkZXBlbmRlbmN5X2RpY3QgPSB0YXJnZXRzW2RlcGVuZGVuY3ldCi0gICAgICAjIEFkZCBhbnkgZGVwZW5kZW5jaWVzIHdob3NlIHNldHRpbmdzIHNob3VsZCBiZSBpbXBvcnRlZCB0byB0aGUgbGlzdAotICAgICAgIyBpZiBub3QgYWxyZWFkeSBwcmVzZW50LiAgTmV3bHktYWRkZWQgaXRlbXMgd2lsbCBiZSBjaGVja2VkIGZvcgotICAgICAgIyB0aGVpciBvd24gaW1wb3J0cyB3aGVuIHRoZSBsaXN0IGl0ZXJhdGlvbiByZWFjaGVzIHRoZW0uCi0gICAgICAjIFJhdGhlciB0aGFuIHNpbXBseSBhcHBlbmRpbmcgbmV3IGl0ZW1zLCBpbnNlcnQgdGhlbSBhZnRlciB0aGUKLSAgICAgICMgZGVwZW5kZW5jeSB0aGF0IGV4cG9ydGVkIHRoZW0uICBUaGlzIGlzIGRvbmUgdG8gbW9yZSBjbG9zZWx5IG1hdGNoCi0gICAgICAjIHRoZSBkZXB0aC1maXJzdCBtZXRob2QgdXNlZCBieSBEZWVwRGVwZW5kZW5jaWVzLgotICAgICAgYWRkX2luZGV4ID0gMQotICAgICAgZm9yIGltcG9ydGVkX2RlcGVuZGVuY3kgaW4gXAotICAgICAgICAgIGRlcGVuZGVuY3lfZGljdC5nZXQoJ2V4cG9ydF9kZXBlbmRlbnRfc2V0dGluZ3MnLCBbXSk6Ci0gICAgICAgIGlmIGltcG9ydGVkX2RlcGVuZGVuY3kgbm90IGluIGRlcGVuZGVuY2llczoKLSAgICAgICAgICBkZXBlbmRlbmNpZXMuaW5zZXJ0KGluZGV4ICsgYWRkX2luZGV4LCBpbXBvcnRlZF9kZXBlbmRlbmN5KQotICAgICAgICAgIGFkZF9pbmRleCA9IGFkZF9pbmRleCArIDEKLSAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0KLSAgICByZXR1cm4gZGVwZW5kZW5jaWVzCi0KLSAgZGVmIERpcmVjdEFuZEltcG9ydGVkRGVwZW5kZW5jaWVzKHNlbGYsIHRhcmdldHMsIGRlcGVuZGVuY2llcz1Ob25lKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBhIHRhcmdldCdzIGRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGFsbCBpbmRpcmVjdAotICAgIGRlcGVuZGVuY2llcyB0aGF0IGEgZGVwZW5kZW5jeSBoYXMgYWR2ZXJ0aXNlZCBzZXR0aW5ncyBzaG91bGQgYmUgZXhwb3J0ZWQKLSAgICB0aHJvdWdoIHRoZSBkZXBlbmRlbmN5IGZvci4KLSAgICAiIiIKLQotICAgIGRlcGVuZGVuY2llcyA9IHNlbGYuRGlyZWN0RGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykKLSAgICByZXR1cm4gc2VsZi5fQWRkSW1wb3J0ZWREZXBlbmRlbmNpZXModGFyZ2V0cywgZGVwZW5kZW5jaWVzKQotCi0gIGRlZiBEZWVwRGVwZW5kZW5jaWVzKHNlbGYsIGRlcGVuZGVuY2llcz1Ob25lKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBhbGwgb2YgYSB0YXJnZXQncyBkZXBlbmRlbmNpZXMsIHJlY3Vyc2l2ZWx5LiIiIgotICAgIGlmIGRlcGVuZGVuY2llcyA9PSBOb25lOgotICAgICAgZGVwZW5kZW5jaWVzID0gW10KLQotICAgIGZvciBkZXBlbmRlbmN5IGluIHNlbGYuZGVwZW5kZW5jaWVzOgotICAgICAgIyBDaGVjayBmb3IgTm9uZSwgY29ycmVzcG9uZGluZyB0byB0aGUgcm9vdCBub2RlLgotICAgICAgaWYgZGVwZW5kZW5jeS5yZWYgIT0gTm9uZSBhbmQgZGVwZW5kZW5jeS5yZWYgbm90IGluIGRlcGVuZGVuY2llczoKLSAgICAgICAgZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBlbmRlbmN5LnJlZikKLSAgICAgICAgZGVwZW5kZW5jeS5EZWVwRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykKLQotICAgIHJldHVybiBkZXBlbmRlbmNpZXMKLQotICBkZWYgTGlua0RlcGVuZGVuY2llcyhzZWxmLCB0YXJnZXRzLCBkZXBlbmRlbmNpZXM9Tm9uZSwgaW5pdGlhbD1UcnVlKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBkZXBlbmRlbmN5IHRhcmdldHMgdGhhdCBhcmUgbGlua2VkIGludG8gdGhpcyB0YXJnZXQuCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGhhcyBhIHNwbGl0IHBlcnNvbmFsaXR5LCBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmcgb2YKLSAgICB8aW5pdGlhbHwuICBPdXRzaWRlIGNhbGxlcnMgc2hvdWxkIGFsd2F5cyBsZWF2ZSB8aW5pdGlhbHwgYXQgaXRzIGRlZmF1bHQKLSAgICBzZXR0aW5nLgotCi0gICAgV2hlbiBhZGRpbmcgYSB0YXJnZXQgdG8gdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAgICByZWN1cnNlIGludG8gaXRzZWxmIHdpdGggfGluaXRpYWx8IHNldCB0byBGYWxzZSwgdG8gY29sbGVjdCBkZXBlbmRlbmNpZXMKLSAgICB0aGF0IGFyZSBsaW5rZWQgaW50byB0aGUgbGlua2FibGUgdGFyZ2V0IGZvciB3aGljaCB0aGUgbGlzdCBpcyBiZWluZyBidWlsdC4KLSAgICAiIiIKLSAgICBpZiBkZXBlbmRlbmNpZXMgPT0gTm9uZToKLSAgICAgIGRlcGVuZGVuY2llcyA9IFtdCi0KLSAgICAjIENoZWNrIGZvciBOb25lLCBjb3JyZXNwb25kaW5nIHRvIHRoZSByb290IG5vZGUuCi0gICAgaWYgc2VsZi5yZWYgPT0gTm9uZToKLSAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKLQotICAgICMgSXQncyBraW5kIG9mIHN1Y2t5IHRoYXQgfHRhcmdldHN8IGhhcyB0byBiZSBwYXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uLAotICAgICMgYnV0IHRoYXQncyBwcmVzZW50bHkgdGhlIGVhc2llc3Qgd2F5IHRvIGFjY2VzcyB0aGUgdGFyZ2V0IGRpY3RzIHNvIHRoYXQKLSAgICAjIHRoaXMgZnVuY3Rpb24gY2FuIGZpbmQgdGFyZ2V0IHR5cGVzLgotCi0gICAgaWYgJ3RhcmdldF9uYW1lJyBub3QgaW4gdGFyZ2V0c1tzZWxmLnJlZl06Ci0gICAgICByYWlzZSBHeXBFcnJvcigiTWlzc2luZyAndGFyZ2V0X25hbWUnIGZpZWxkIGluIHRhcmdldC4iKQotCi0gICAgaWYgJ3R5cGUnIG5vdCBpbiB0YXJnZXRzW3NlbGYucmVmXToKLSAgICAgIHJhaXNlIEd5cEVycm9yKCJNaXNzaW5nICd0eXBlJyBmaWVsZCBpbiB0YXJnZXQgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNbc2VsZi5yZWZdWyd0YXJnZXRfbmFtZSddKQotCi0gICAgdGFyZ2V0X3R5cGUgPSB0YXJnZXRzW3NlbGYucmVmXVsndHlwZSddCi0KLSAgICBpc19saW5rYWJsZSA9IHRhcmdldF90eXBlIGluIGxpbmthYmxlX3R5cGVzCi0KLSAgICBpZiBpbml0aWFsIGFuZCBub3QgaXNfbGlua2FibGU6Ci0gICAgICAjIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRhcmdldCBiZWluZyBleGFtaW5lZCBhbmQgaXQncyBub3QgbGlua2FibGUsCi0gICAgICAjIHJldHVybiBhbiBlbXB0eSBsaXN0IG9mIGxpbmsgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHRoZSBsaW5rCi0gICAgICAjIGRlcGVuZGVuY2llcyBhcmUgaW50ZW5kZWQgdG8gYXBwbHkgdG8gdGhlIHRhcmdldCBpdHNlbGYgKGluaXRpYWwgaXMKLSAgICAgICMgVHJ1ZSkgYW5kIHRoaXMgdGFyZ2V0IHdvbid0IGJlIGxpbmtlZC4KLSAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKLQotICAgICMgRG9uJ3QgdHJhdmVyc2UgJ25vbmUnIHRhcmdldHMgaWYgZXhwbGljaXRseSBleGNsdWRlZC4KLSAgICBpZiAodGFyZ2V0X3R5cGUgPT0gJ25vbmUnIGFuZAotICAgICAgICBub3QgdGFyZ2V0c1tzZWxmLnJlZl0uZ2V0KCdkZXBlbmRlbmNpZXNfdHJhdmVyc2UnLCBUcnVlKSk6Ci0gICAgICBpZiBzZWxmLnJlZiBub3QgaW4gZGVwZW5kZW5jaWVzOgotICAgICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKHNlbGYucmVmKQotICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcwotCi0gICAgIyBFeGVjdXRhYmxlcyBhbmQgbG9hZGFibGUgbW9kdWxlcyBhcmUgYWxyZWFkeSBmdWxseSBhbmQgZmluYWxseSBsaW5rZWQuCi0gICAgIyBOb3RoaW5nIGVsc2UgY2FuIGJlIGEgbGluayBkZXBlbmRlbmN5IG9mIHRoZW0sIHRoZXJlIGNhbiBvbmx5IGJlCi0gICAgIyBkZXBlbmRlbmNpZXMgaW4gdGhlIHNlbnNlIHRoYXQgYSBkZXBlbmRlbnQgdGFyZ2V0IG1pZ2h0IHJ1biBhbgotICAgICMgZXhlY3V0YWJsZSBvciBsb2FkIHRoZSBsb2FkYWJsZV9tb2R1bGUuCi0gICAgaWYgbm90IGluaXRpYWwgYW5kIHRhcmdldF90eXBlIGluICgnZXhlY3V0YWJsZScsICdsb2FkYWJsZV9tb2R1bGUnKToKLSAgICAgIHJldHVybiBkZXBlbmRlbmNpZXMKLQotICAgICMgVGhlIHRhcmdldCBpcyBsaW5rYWJsZSwgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGxpbmsgZGVwZW5kZW5jaWVzLgotICAgIGlmIHNlbGYucmVmIG5vdCBpbiBkZXBlbmRlbmNpZXM6Ci0gICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKHNlbGYucmVmKQotICAgICAgaWYgaW5pdGlhbCBvciBub3QgaXNfbGlua2FibGU6Ci0gICAgICAgICMgSWYgdGhpcyBpcyBhIHN1YnNlcXVlbnQgdGFyZ2V0IGFuZCBpdCdzIGxpbmthYmxlLCBkb24ndCBsb29rIGFueQotICAgICAgICAjIGZ1cnRoZXIgZm9yIGxpbmthYmxlIGRlcGVuZGVuY2llcywgYXMgdGhleSdsbCBhbHJlYWR5IGJlIGxpbmtlZCBpbnRvCi0gICAgICAgICMgdGhpcyB0YXJnZXQgbGlua2FibGUuICBBbHdheXMgbG9vayBhdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGluaXRpYWwKLSAgICAgICAgIyB0YXJnZXQsIGFuZCBhbHdheXMgbG9vayBhdCBkZXBlbmRlbmNpZXMgb2Ygbm9uLWxpbmthYmxlcy4KLSAgICAgICAgZm9yIGRlcGVuZGVuY3kgaW4gc2VsZi5kZXBlbmRlbmNpZXM6Ci0gICAgICAgICAgZGVwZW5kZW5jeS5MaW5rRGVwZW5kZW5jaWVzKHRhcmdldHMsIGRlcGVuZGVuY2llcywgRmFsc2UpCi0KLSAgICByZXR1cm4gZGVwZW5kZW5jaWVzCi0KLQotZGVmIEJ1aWxkRGVwZW5kZW5jeUxpc3QodGFyZ2V0cyk6Ci0gICMgQ3JlYXRlIGEgRGVwZW5kZW5jeUdyYXBoTm9kZSBmb3IgZWFjaCB0YXJnZXQuICBQdXQgaXQgaW50byBhIGRpY3QgZm9yIGVhc3kKLSAgIyBhY2Nlc3MuCi0gIGRlcGVuZGVuY3lfbm9kZXMgPSB7fQotICBmb3IgdGFyZ2V0LCBzcGVjIGluIHRhcmdldHMuaXRlcml0ZW1zKCk6Ci0gICAgaWYgdGFyZ2V0IG5vdCBpbiBkZXBlbmRlbmN5X25vZGVzOgotICAgICAgZGVwZW5kZW5jeV9ub2Rlc1t0YXJnZXRdID0gRGVwZW5kZW5jeUdyYXBoTm9kZSh0YXJnZXQpCi0KLSAgIyBTZXQgdXAgdGhlIGRlcGVuZGVuY3kgbGlua3MuICBUYXJnZXRzIHRoYXQgaGF2ZSBubyBkZXBlbmRlbmNpZXMgYXJlIHRyZWF0ZWQKLSAgIyBhcyBkZXBlbmRlbnQgb24gcm9vdF9ub2RlLgotICByb290X25vZGUgPSBEZXBlbmRlbmN5R3JhcGhOb2RlKE5vbmUpCi0gIGZvciB0YXJnZXQsIHNwZWMgaW4gdGFyZ2V0cy5pdGVyaXRlbXMoKToKLSAgICB0YXJnZXRfbm9kZSA9IGRlcGVuZGVuY3lfbm9kZXNbdGFyZ2V0XQotICAgIHRhcmdldF9idWlsZF9maWxlID0gZ3lwLmNvbW1vbi5CdWlsZEZpbGUodGFyZ2V0KQotICAgIGRlcGVuZGVuY2llcyA9IHNwZWMuZ2V0KCdkZXBlbmRlbmNpZXMnKQotICAgIGlmIG5vdCBkZXBlbmRlbmNpZXM6Ci0gICAgICB0YXJnZXRfbm9kZS5kZXBlbmRlbmNpZXMgPSBbcm9vdF9ub2RlXQotICAgICAgcm9vdF9ub2RlLmRlcGVuZGVudHMuYXBwZW5kKHRhcmdldF9ub2RlKQotICAgIGVsc2U6Ci0gICAgICBmb3IgZGVwZW5kZW5jeSBpbiBkZXBlbmRlbmNpZXM6Ci0gICAgICAgIGRlcGVuZGVuY3lfbm9kZSA9IGRlcGVuZGVuY3lfbm9kZXMuZ2V0KGRlcGVuZGVuY3kpCi0gICAgICAgIGlmIG5vdCBkZXBlbmRlbmN5X25vZGU6Ci0gICAgICAgICAgcmFpc2UgR3lwRXJyb3IoIkRlcGVuZGVuY3kgJyVzJyBub3QgZm91bmQgd2hpbGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnlpbmcgdG8gbG9hZCB0YXJnZXQgJXMiICUgKGRlcGVuZGVuY3ksIHRhcmdldCkpCi0gICAgICAgIHRhcmdldF9ub2RlLmRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeV9ub2RlKQotICAgICAgICBkZXBlbmRlbmN5X25vZGUuZGVwZW5kZW50cy5hcHBlbmQodGFyZ2V0X25vZGUpCi0KLSAgZmxhdF9saXN0ID0gcm9vdF9ub2RlLkZsYXR0ZW5Ub0xpc3QoKQotCi0gICMgSWYgdGhlcmUncyBhbnl0aGluZyBsZWZ0IHVudmlzaXRlZCwgdGhlcmUgbXVzdCBiZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kKLSAgIyAoY3ljbGUpLiAgSWYgeW91IG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3Mgd3JvbmcsIGxvb2sgZm9yIGVsZW1lbnRzIG9mCi0gICMgdGFyZ2V0cyB0aGF0IGFyZSBub3QgaW4gZmxhdF9saXN0LgotICBpZiBsZW4oZmxhdF9saXN0KSAhPSBsZW4odGFyZ2V0cyk6Ci0gICAgcmFpc2UgRGVwZW5kZW5jeUdyYXBoTm9kZS5DaXJjdWxhckV4Y2VwdGlvbigKLSAgICAgICAgJ1NvbWUgdGFyZ2V0cyBub3QgcmVhY2hhYmxlLCBjeWNsZSBpbiBkZXBlbmRlbmN5IGdyYXBoIGRldGVjdGVkOiAnICsKLSAgICAgICAgJyAnLmpvaW4oc2V0KGZsYXRfbGlzdCkgXiBzZXQodGFyZ2V0cykpKQotCi0gIHJldHVybiBbZGVwZW5kZW5jeV9ub2RlcywgZmxhdF9saXN0XQotCi0KLWRlZiBWZXJpZnlOb0dZUEZpbGVDaXJjdWxhckRlcGVuZGVuY2llcyh0YXJnZXRzKToKLSAgIyBDcmVhdGUgYSBEZXBlbmRlbmN5R3JhcGhOb2RlIGZvciBlYWNoIGd5cCBmaWxlIGNvbnRhaW5pbmcgYSB0YXJnZXQuICBQdXQKLSAgIyBpdCBpbnRvIGEgZGljdCBmb3IgZWFzeSBhY2Nlc3MuCi0gIGRlcGVuZGVuY3lfbm9kZXMgPSB7fQotICBmb3IgdGFyZ2V0IGluIHRhcmdldHMuaXRlcmtleXMoKToKLSAgICBidWlsZF9maWxlID0gZ3lwLmNvbW1vbi5CdWlsZEZpbGUodGFyZ2V0KQotICAgIGlmIG5vdCBidWlsZF9maWxlIGluIGRlcGVuZGVuY3lfbm9kZXM6Ci0gICAgICBkZXBlbmRlbmN5X25vZGVzW2J1aWxkX2ZpbGVdID0gRGVwZW5kZW5jeUdyYXBoTm9kZShidWlsZF9maWxlKQotCi0gICMgU2V0IHVwIHRoZSBkZXBlbmRlbmN5IGxpbmtzLgotICBmb3IgdGFyZ2V0LCBzcGVjIGluIHRhcmdldHMuaXRlcml0ZW1zKCk6Ci0gICAgYnVpbGRfZmlsZSA9IGd5cC5jb21tb24uQnVpbGRGaWxlKHRhcmdldCkKLSAgICBidWlsZF9maWxlX25vZGUgPSBkZXBlbmRlbmN5X25vZGVzW2J1aWxkX2ZpbGVdCi0gICAgdGFyZ2V0X2RlcGVuZGVuY2llcyA9IHNwZWMuZ2V0KCdkZXBlbmRlbmNpZXMnLCBbXSkKLSAgICBmb3IgZGVwZW5kZW5jeSBpbiB0YXJnZXRfZGVwZW5kZW5jaWVzOgotICAgICAgdHJ5OgotICAgICAgICBkZXBlbmRlbmN5X2J1aWxkX2ZpbGUgPSBneXAuY29tbW9uLkJ1aWxkRmlsZShkZXBlbmRlbmN5KQotICAgICAgZXhjZXB0IEd5cEVycm9yLCBlOgotICAgICAgICBneXAuY29tbW9uLkV4Y2VwdGlvbkFwcGVuZCgKLSAgICAgICAgICAgIGUsICd3aGlsZSBjb21wdXRpbmcgZGVwZW5kZW5jaWVzIG9mIC5neXAgZmlsZSAlcycgJSBidWlsZF9maWxlKQotICAgICAgICByYWlzZQotCi0gICAgICBpZiBkZXBlbmRlbmN5X2J1aWxkX2ZpbGUgPT0gYnVpbGRfZmlsZToKLSAgICAgICAgIyBBIC5neXAgZmlsZSBpcyBhbGxvd2VkIHRvIHJlZmVyIGJhY2sgdG8gaXRzZWxmLgotICAgICAgICBjb250aW51ZQotICAgICAgZGVwZW5kZW5jeV9ub2RlID0gZGVwZW5kZW5jeV9ub2Rlcy5nZXQoZGVwZW5kZW5jeV9idWlsZF9maWxlKQotICAgICAgaWYgbm90IGRlcGVuZGVuY3lfbm9kZToKLSAgICAgICAgcmFpc2UgR3lwRXJyb3IoIkRlcGVuZGFuY3kgJyVzJyBub3QgZm91bmQiICUgZGVwZW5kZW5jeV9idWlsZF9maWxlKQotICAgICAgaWYgZGVwZW5kZW5jeV9ub2RlIG5vdCBpbiBidWlsZF9maWxlX25vZGUuZGVwZW5kZW5jaWVzOgotICAgICAgICBidWlsZF9maWxlX25vZGUuZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBlbmRlbmN5X25vZGUpCi0gICAgICAgIGRlcGVuZGVuY3lfbm9kZS5kZXBlbmRlbnRzLmFwcGVuZChidWlsZF9maWxlX25vZGUpCi0KLQotICAjIEZpbGVzIHRoYXQgaGF2ZSBubyBkZXBlbmRlbmNpZXMgYXJlIHRyZWF0ZWQgYXMgZGVwZW5kZW50IG9uIHJvb3Rfbm9kZS4KLSAgcm9vdF9ub2RlID0gRGVwZW5kZW5jeUdyYXBoTm9kZShOb25lKQotICBmb3IgYnVpbGRfZmlsZV9ub2RlIGluIGRlcGVuZGVuY3lfbm9kZXMuaXRlcnZhbHVlcygpOgotICAgIGlmIGxlbihidWlsZF9maWxlX25vZGUuZGVwZW5kZW5jaWVzKSA9PSAwOgotICAgICAgYnVpbGRfZmlsZV9ub2RlLmRlcGVuZGVuY2llcy5hcHBlbmQocm9vdF9ub2RlKQotICAgICAgcm9vdF9ub2RlLmRlcGVuZGVudHMuYXBwZW5kKGJ1aWxkX2ZpbGVfbm9kZSkKLQotICBmbGF0X2xpc3QgPSByb290X25vZGUuRmxhdHRlblRvTGlzdCgpCi0KLSAgIyBJZiB0aGVyZSdzIGFueXRoaW5nIGxlZnQgdW52aXNpdGVkLCB0aGVyZSBtdXN0IGJlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeQotICAjIChjeWNsZSkuCi0gIGlmIGxlbihmbGF0X2xpc3QpICE9IGxlbihkZXBlbmRlbmN5X25vZGVzKToKLSAgICBiYWRfZmlsZXMgPSBbXQotICAgIGZvciBmaWxlIGluIGRlcGVuZGVuY3lfbm9kZXMuaXRlcmtleXMoKToKLSAgICAgIGlmIG5vdCBmaWxlIGluIGZsYXRfbGlzdDoKLSAgICAgICAgYmFkX2ZpbGVzLmFwcGVuZChmaWxlKQotICAgIHJhaXNlIERlcGVuZGVuY3lHcmFwaE5vZGUuQ2lyY3VsYXJFeGNlcHRpb24sIFwKLSAgICAgICAgJ1NvbWUgZmlsZXMgbm90IHJlYWNoYWJsZSwgY3ljbGUgaW4gLmd5cCBmaWxlIGRlcGVuZGVuY3kgZ3JhcGggJyArIFwKLSAgICAgICAgJ2RldGVjdGVkIGludm9sdmluZyBzb21lIG9yIGFsbCBvZjogJyArIFwKLSAgICAgICAgJyAnLmpvaW4oYmFkX2ZpbGVzKQotCi0KLWRlZiBEb0RlcGVuZGVudFNldHRpbmdzKGtleSwgZmxhdF9saXN0LCB0YXJnZXRzLCBkZXBlbmRlbmN5X25vZGVzKToKLSAgIyBrZXkgc2hvdWxkIGJlIG9uZSBvZiBhbGxfZGVwZW5kZW50X3NldHRpbmdzLCBkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzLAotICAjIG9yIGxpbmtfc2V0dGluZ3MuCi0KLSAgZm9yIHRhcmdldCBpbiBmbGF0X2xpc3Q6Ci0gICAgdGFyZ2V0X2RpY3QgPSB0YXJnZXRzW3RhcmdldF0KLSAgICBidWlsZF9maWxlID0gZ3lwLmNvbW1vbi5CdWlsZEZpbGUodGFyZ2V0KQotCi0gICAgaWYga2V5ID09ICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzoKLSAgICAgIGRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY3lfbm9kZXNbdGFyZ2V0XS5EZWVwRGVwZW5kZW5jaWVzKCkKLSAgICBlbGlmIGtleSA9PSAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6Ci0gICAgICBkZXBlbmRlbmNpZXMgPSBcCi0gICAgICAgICAgZGVwZW5kZW5jeV9ub2Rlc1t0YXJnZXRdLkRpcmVjdEFuZEltcG9ydGVkRGVwZW5kZW5jaWVzKHRhcmdldHMpCi0gICAgZWxpZiBrZXkgPT0gJ2xpbmtfc2V0dGluZ3MnOgotICAgICAgZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jeV9ub2Rlc1t0YXJnZXRdLkxpbmtEZXBlbmRlbmNpZXModGFyZ2V0cykKLSAgICBlbHNlOgotICAgICAgcmFpc2UgR3lwRXJyb3IoIkRvRGVwZW5kZW50U2V0dGluZ3MgZG9lc24ndCBrbm93IGhvdyB0byBkZXRlcm1pbmUgIgotICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMgZm9yICcgKyBrZXkpCi0KLSAgICBmb3IgZGVwZW5kZW5jeSBpbiBkZXBlbmRlbmNpZXM6Ci0gICAgICBkZXBlbmRlbmN5X2RpY3QgPSB0YXJnZXRzW2RlcGVuZGVuY3ldCi0gICAgICBpZiBub3Qga2V5IGluIGRlcGVuZGVuY3lfZGljdDoKLSAgICAgICAgY29udGludWUKLSAgICAgIGRlcGVuZGVuY3lfYnVpbGRfZmlsZSA9IGd5cC5jb21tb24uQnVpbGRGaWxlKGRlcGVuZGVuY3kpCi0gICAgICBNZXJnZURpY3RzKHRhcmdldF9kaWN0LCBkZXBlbmRlbmN5X2RpY3Rba2V5XSwKLSAgICAgICAgICAgICAgICAgYnVpbGRfZmlsZSwgZGVwZW5kZW5jeV9idWlsZF9maWxlKQotCi0KLWRlZiBBZGp1c3RTdGF0aWNMaWJyYXJ5RGVwZW5kZW5jaWVzKGZsYXRfbGlzdCwgdGFyZ2V0cywgZGVwZW5kZW5jeV9ub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRfZGVwZW5kZW5jaWVzKToKLSAgIyBSZWNvbXB1dGUgdGFyZ2V0ICJkZXBlbmRlbmNpZXMiIHByb3BlcnRpZXMuICBGb3IgZWFjaCBzdGF0aWMgbGlicmFyeQotICAjIHRhcmdldCwgcmVtb3ZlICJkZXBlbmRlbmNpZXMiIGVudHJpZXMgcmVmZXJyaW5nIHRvIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMsCi0gICMgdW5sZXNzIHRoZSBkZXBlbmRlbmN5IGhhcyB0aGUgImhhcmRfZGVwZW5kZW5jeSIgYXR0cmlidXRlIHNldC4gIEZvciBlYWNoCi0gICMgbGlua2FibGUgdGFyZ2V0LCBhZGQgYSAiZGVwZW5kZW5jaWVzIiBlbnRyeSByZWZlcnJpbmcgdG8gYWxsIG9mIHRoZQotICAjIHRhcmdldCdzIGNvbXB1dGVkIGxpc3Qgb2YgbGluayBkZXBlbmRlbmNpZXMgKGluY2x1ZGluZyBzdGF0aWMgbGlicmFyaWVzCi0gICMgaWYgbm8gc3VjaCBlbnRyeSBpcyBhbHJlYWR5IHByZXNlbnQuCi0gIGZvciB0YXJnZXQgaW4gZmxhdF9saXN0OgotICAgIHRhcmdldF9kaWN0ID0gdGFyZ2V0c1t0YXJnZXRdCi0gICAgdGFyZ2V0X3R5cGUgPSB0YXJnZXRfZGljdFsndHlwZSddCi0KLSAgICBpZiB0YXJnZXRfdHlwZSA9PSAnc3RhdGljX2xpYnJhcnknOgotICAgICAgaWYgbm90ICdkZXBlbmRlbmNpZXMnIGluIHRhcmdldF9kaWN0OgotICAgICAgICBjb250aW51ZQotCi0gICAgICB0YXJnZXRfZGljdFsnZGVwZW5kZW5jaWVzX29yaWdpbmFsJ10gPSB0YXJnZXRfZGljdC5nZXQoCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcycsIFtdKVs6XQotCi0gICAgICAjIEEgc3RhdGljIGxpYnJhcnkgc2hvdWxkIG5vdCBkZXBlbmQgb24gYW5vdGhlciBzdGF0aWMgbGlicmFyeSB1bmxlc3MKLSAgICAgICMgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIGlzICJoYXJkLCIgd2hpY2ggc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuCi0gICAgICAjIGEgZGVwZW5kZW50IHJlbGllcyBvbiBzb21lIHNpZGUgZWZmZWN0IG90aGVyIHRoYW4ganVzdCB0aGUgYnVpbGQKLSAgICAgICMgcHJvZHVjdCwgbGlrZSBhIHJ1bGUgb3IgYWN0aW9uIG91dHB1dC4gRnVydGhlciwgaWYgYSB0YXJnZXQgaGFzIGEKLSAgICAgICMgbm9uLWhhcmQgZGVwZW5kZW5jeSwgYnV0IHRoYXQgZGVwZW5kZW5jeSBleHBvcnRzIGEgaGFyZCBkZXBlbmRlbmN5LAotICAgICAgIyB0aGUgbm9uLWhhcmQgZGVwZW5kZW5jeSBjYW4gc2FmZWx5IGJlIHJlbW92ZWQsIGJ1dCB0aGUgZXhwb3J0ZWQgaGFyZAotICAgICAgIyBkZXBlbmRlbmN5IG11c3QgYmUgYWRkZWQgdG8gdGhlIHRhcmdldCB0byBrZWVwIHRoZSBzYW1lIGRlcGVuZGVuY3kKLSAgICAgICMgb3JkZXJpbmcuCi0gICAgICBkZXBlbmRlbmNpZXMgPSBcCi0gICAgICAgICAgZGVwZW5kZW5jeV9ub2Rlc1t0YXJnZXRdLkRpcmVjdEFuZEltcG9ydGVkRGVwZW5kZW5jaWVzKHRhcmdldHMpCi0gICAgICBpbmRleCA9IDAKLSAgICAgIHdoaWxlIGluZGV4IDwgbGVuKGRlcGVuZGVuY2llcyk6Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaW5kZXhdCi0gICAgICAgIGRlcGVuZGVuY3lfZGljdCA9IHRhcmdldHNbZGVwZW5kZW5jeV0KLQotICAgICAgICAjIFJlbW92ZSBldmVyeSBub24taGFyZCBzdGF0aWMgbGlicmFyeSBkZXBlbmRlbmN5IGFuZCByZW1vdmUgZXZlcnkKLSAgICAgICAgIyBub24tc3RhdGljIGxpYnJhcnkgZGVwZW5kZW5jeSB0aGF0IGlzbid0IGEgZGlyZWN0IGRlcGVuZGVuY3kuCi0gICAgICAgIGlmIChkZXBlbmRlbmN5X2RpY3RbJ3R5cGUnXSA9PSAnc3RhdGljX2xpYnJhcnknIGFuZCBcCi0gICAgICAgICAgICBub3QgZGVwZW5kZW5jeV9kaWN0LmdldCgnaGFyZF9kZXBlbmRlbmN5JywgRmFsc2UpKSBvciBcCi0gICAgICAgICAgIChkZXBlbmRlbmN5X2RpY3RbJ3R5cGUnXSAhPSAnc3RhdGljX2xpYnJhcnknIGFuZCBcCi0gICAgICAgICAgICBub3QgZGVwZW5kZW5jeSBpbiB0YXJnZXRfZGljdFsnZGVwZW5kZW5jaWVzJ10pOgotICAgICAgICAgICMgVGFrZSB0aGUgZGVwZW5kZW5jeSBvdXQgb2YgdGhlIGxpc3QsIGFuZCBkb24ndCBpbmNyZW1lbnQgaW5kZXgKLSAgICAgICAgICAjIGJlY2F1c2UgdGhlIG5leHQgZGVwZW5kZW5jeSB0byBhbmFseXplIHdpbGwgc2hpZnQgaW50byB0aGUgaW5kZXgKLSAgICAgICAgICAjIGZvcm1lcmx5IG9jY3VwaWVkIGJ5IHRoZSBvbmUgYmVpbmcgcmVtb3ZlZC4KLSAgICAgICAgICBkZWwgZGVwZW5kZW5jaWVzW2luZGV4XQotICAgICAgICBlbHNlOgotICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0KLSAgICAgICMgVXBkYXRlIHRoZSBkZXBlbmRlbmNpZXMuIElmIHRoZSBkZXBlbmRlbmNpZXMgbGlzdCBpcyBlbXB0eSwgaXQncyBub3QKLSAgICAgICMgbmVlZGVkLCBzbyB1bmhvb2sgaXQuCi0gICAgICBpZiBsZW4oZGVwZW5kZW5jaWVzKSA+IDA6Ci0gICAgICAgIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXSA9IGRlcGVuZGVuY2llcwotICAgICAgZWxzZToKLSAgICAgICAgZGVsIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXQotCi0gICAgZWxpZiB0YXJnZXRfdHlwZSBpbiBsaW5rYWJsZV90eXBlczoKLSAgICAgICMgR2V0IGEgbGlzdCBvZiBkZXBlbmRlbmN5IHRhcmdldHMgdGhhdCBzaG91bGQgYmUgbGlua2VkIGludG8gdGhpcwotICAgICAgIyB0YXJnZXQuICBBZGQgdGhlbSB0byB0aGUgZGVwZW5kZW5jaWVzIGxpc3QgaWYgdGhleSdyZSBub3QgYWxyZWFkeQotICAgICAgIyBwcmVzZW50LgotCi0gICAgICBsaW5rX2RlcGVuZGVuY2llcyA9IGRlcGVuZGVuY3lfbm9kZXNbdGFyZ2V0XS5MaW5rRGVwZW5kZW5jaWVzKHRhcmdldHMpCi0gICAgICBmb3IgZGVwZW5kZW5jeSBpbiBsaW5rX2RlcGVuZGVuY2llczoKLSAgICAgICAgaWYgZGVwZW5kZW5jeSA9PSB0YXJnZXQ6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbm90ICdkZXBlbmRlbmNpZXMnIGluIHRhcmdldF9kaWN0OgotICAgICAgICAgIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXSA9IFtdCi0gICAgICAgIGlmIG5vdCBkZXBlbmRlbmN5IGluIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXToKLSAgICAgICAgICB0YXJnZXRfZGljdFsnZGVwZW5kZW5jaWVzJ10uYXBwZW5kKGRlcGVuZGVuY3kpCi0gICAgICAjIFNvcnQgdGhlIGRlcGVuZGVuY2llcyBsaXN0IGluIHRoZSBvcmRlciBmcm9tIGRlcGVuZGVudHMgdG8gZGVwZW5kZW5jaWVzLgotICAgICAgIyBlLmcuIElmIEEgYW5kIEIgZGVwZW5kIG9uIEMgYW5kIEMgZGVwZW5kcyBvbiBELCBzb3J0IHRoZW0gaW4gQSwgQiwgQywgRC4KLSAgICAgICMgTm90ZTogZmxhdF9saXN0IGlzIGFscmVhZHkgc29ydGVkIGluIHRoZSBvcmRlciBmcm9tIGRlcGVuZGVuY2llcyB0bwotICAgICAgIyBkZXBlbmRlbnRzLgotICAgICAgaWYgc29ydF9kZXBlbmRlbmNpZXMgYW5kICdkZXBlbmRlbmNpZXMnIGluIHRhcmdldF9kaWN0OgotICAgICAgICB0YXJnZXRfZGljdFsnZGVwZW5kZW5jaWVzJ10gPSBbZGVwIGZvciBkZXAgaW4gcmV2ZXJzZWQoZmxhdF9saXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwIGluIHRhcmdldF9kaWN0WydkZXBlbmRlbmNpZXMnXV0KLQotCi0jIEluaXRpYWxpemUgdGhpcyBoZXJlIHRvIHNwZWVkIHVwIE1ha2VQYXRoUmVsYXRpdmUuCi1leGNlcHRpb25fcmUgPSByZS5jb21waWxlKHInJydbIiddP1stLyQ8Pl5dJycnKQotCi0KLWRlZiBNYWtlUGF0aFJlbGF0aXZlKHRvX2ZpbGUsIGZyb19maWxlLCBpdGVtKToKLSAgIyBJZiBpdGVtIGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQncyByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZmlsZSBkaWN0IHRoYXQgaXQncwotICAjIGNvbWluZyBmcm9tLiAgRml4IGl0IHVwIHRvIG1ha2UgaXQgcmVsYXRpdmUgdG8gdGhlIGJ1aWxkIGZpbGUgZGljdCB0aGF0Ci0gICMgaXQncyBnb2luZyBpbnRvLgotICAjIEV4Y2VwdGlvbjogYW55IHxpdGVtfCB0aGF0IGJlZ2lucyB3aXRoIHRoZXNlIHNwZWNpYWwgY2hhcmFjdGVycyBpcwotICAjIHJldHVybmVkIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgotICAjICAgLyAgIFVzZWQgd2hlbiBhIHBhdGggaXMgYWxyZWFkeSBhYnNvbHV0ZSAoc2hvcnRjdXQgb3B0aW1pemF0aW9uOwotICAjICAgICAgIHN1Y2ggcGF0aHMgd291bGQgYmUgcmV0dXJuZWQgYXMgYWJzb2x1dGUgYW55d2F5KQotICAjICAgJCAgIFVzZWQgZm9yIGJ1aWxkIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAjICAgLSAgIFVzZWQgZm9yIHNvbWUgYnVpbGQgZW52aXJvbm1lbnQgZmxhZ3MgKHN1Y2ggYXMgLWxhcHItMSBpbiBhCi0gICMgICAgICAgImxpYnJhcmllcyIgc2VjdGlvbikKLSAgIyAgIDwgICBVc2VkIGZvciBvdXIgb3duIHZhcmlhYmxlIGFuZCBjb21tYW5kIGV4cGFuc2lvbnMgKHNlZSBFeHBhbmRWYXJpYWJsZXMpCi0gICMgICA+ICAgVXNlZCBmb3Igb3VyIG93biB2YXJpYWJsZSBhbmQgY29tbWFuZCBleHBhbnNpb25zIChzZWUgRXhwYW5kVmFyaWFibGVzKQotICAjICAgXiAgIFVzZWQgZm9yIG91ciBvd24gdmFyaWFibGUgYW5kIGNvbW1hbmQgZXhwYW5zaW9ucyAoc2VlIEV4cGFuZFZhcmlhYmxlcykKLSAgIwotICAjICAgIi8nIFVzZWQgd2hlbiBhIHZhbHVlIGlzIHF1b3RlZC4gIElmIHRoZXNlIGFyZSBwcmVzZW50LCB0aGVuIHdlCi0gICMgICAgICAgY2hlY2sgdGhlIHNlY29uZCBjaGFyYWN0ZXIgaW5zdGVhZC4KLSAgIwotICBpZiB0b19maWxlID09IGZyb19maWxlIG9yIGV4Y2VwdGlvbl9yZS5tYXRjaChpdGVtKToKLSAgICByZXR1cm4gaXRlbQotICBlbHNlOgotICAgICMgVE9ETyhkZ2xhemtvdikgVGhlIGJhY2tzbGFzaC9mb3J3YXJkLXNsYXNoIHJlcGxhY2VtZW50IGF0IHRoZSBlbmQgaXMgYQotICAgICMgdGVtcG9yYXJ5IG1lYXN1cmUuIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBhZGRyZXNzZWQgYnkga2VlcGluZyBhbGwgcGF0aHMKLSAgICAjIGluIFBPU0lYIHVudGlsIGFjdHVhbCBwcm9qZWN0IGdlbmVyYXRpb24uCi0gICAgcmV0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oCi0gICAgICAgIGd5cC5jb21tb24uUmVsYXRpdmVQYXRoKG9zLnBhdGguZGlybmFtZShmcm9fZmlsZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSh0b19maWxlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0pKS5yZXBsYWNlKCdcXCcsICcvJykKLSAgICBpZiBpdGVtWy0xXSA9PSAnLyc6Ci0gICAgICByZXQgKz0gJy8nCi0gICAgcmV0dXJuIHJldAotCi1kZWYgTWVyZ2VMaXN0cyh0bywgZnJvLCB0b19maWxlLCBmcm9fZmlsZSwgaXNfcGF0aHM9RmFsc2UsIGFwcGVuZD1UcnVlKToKLSAgZGVmIGlzX2hhc2hhYmxlKHgpOgotICAgIHRyeToKLSAgICAgIGhhc2goeCkKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIFRydWUKLSAgIyBJZiB4IGlzIGhhc2hhYmxlLCByZXR1cm5zIHdoZXRoZXIgeCBpcyBpbiBzLiBFbHNlIHJldHVybnMgd2hldGhlciB4IGlzIGluIGwuCi0gIGRlZiBpc19pbl9zZXRfb3JfbGlzdCh4LCBzLCBsKToKLSAgICBpZiBpc19oYXNoYWJsZSh4KToKLSAgICAgIHJldHVybiB4IGluIHMKLSAgICByZXR1cm4geCBpbiBsCi0KLSAgcHJlcGVuZF9pbmRleCA9IDAKLQotICAjIE1ha2UgbWVtYmVyc2hpcCB0ZXN0aW5nIG9mIGhhc2hhYmxlcyBpbiB8dG98IChpbiBwYXJ0aWN1bGFyLCBzdHJpbmdzKQotICAjIGZhc3Rlci4KLSAgaGFzaGFibGVfdG9fc2V0ID0gc2V0KFt4IGZvciB4IGluIHRvIGlmIGlzX2hhc2hhYmxlKHgpXSkKLQotICBmb3IgaXRlbSBpbiBmcm86Ci0gICAgc2luZ2xldG9uID0gRmFsc2UKLSAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIHN0cikgb3IgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgotICAgICAgIyBUaGUgY2hlYXAgYW5kIGVhc3kgY2FzZS4KLSAgICAgIGlmIGlzX3BhdGhzOgotICAgICAgICB0b19pdGVtID0gTWFrZVBhdGhSZWxhdGl2ZSh0b19maWxlLCBmcm9fZmlsZSwgaXRlbSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRvX2l0ZW0gPSBpdGVtCi0KLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIHN0cikgb3Igbm90IGl0ZW0uc3RhcnRzd2l0aCgnLScpOgotICAgICAgICAjIEFueSBzdHJpbmcgdGhhdCBkb2Vzbid0IGJlZ2luIHdpdGggYSAiLSIgaXMgYSBzaW5nbGV0b24gLSBpdCBjYW4KLSAgICAgICAgIyBvbmx5IGFwcGVhciBvbmNlIGluIGEgbGlzdCwgdG8gYmUgZW5mb3JjZWQgYnkgdGhlIGxpc3QgbWVyZ2UgYXBwZW5kCi0gICAgICAgICMgb3IgcHJlcGVuZC4KLSAgICAgICAgc2luZ2xldG9uID0gVHJ1ZQotICAgIGVsaWYgaXNpbnN0YW5jZShpdGVtLCBkaWN0KToKLSAgICAgICMgTWFrZSBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnksIGNvbnRpbnVpbmcgdG8gbG9vayBmb3IgcGF0aHMgdG8gZml4LgotICAgICAgIyBUaGUgb3RoZXIgaW50ZWxsaWdlbnQgYXNwZWN0cyBvZiBtZXJnZSBwcm9jZXNzaW5nIHdvbid0IGFwcGx5IGJlY2F1c2UKLSAgICAgICMgaXRlbSBpcyBiZWluZyBtZXJnZWQgaW50byBhbiBlbXB0eSBkaWN0LgotICAgICAgdG9faXRlbSA9IHt9Ci0gICAgICBNZXJnZURpY3RzKHRvX2l0ZW0sIGl0ZW0sIHRvX2ZpbGUsIGZyb19maWxlKQotICAgIGVsaWYgaXNpbnN0YW5jZShpdGVtLCBsaXN0KToKLSAgICAgICMgUmVjdXJzZSwgbWFraW5nIGEgY29weSBvZiB0aGUgbGlzdC4gIElmIHRoZSBsaXN0IGNvbnRhaW5zIGFueQotICAgICAgIyBkZXNjZW5kYW50IGRpY3RzLCBwYXRoIGZpeGluZyB3aWxsIG9jY3VyLiAgTm90ZSB0aGF0IGhlcmUsIGN1c3RvbQotICAgICAgIyB2YWx1ZXMgZm9yIGlzX3BhdGhzIGFuZCBhcHBlbmQgYXJlIGRyb3BwZWQ7IHRob3NlIGFyZSBvbmx5IHRvIGJlCi0gICAgICAjIGFwcGxpZWQgdG8gfHRvfCBhbmQgfGZyb3wsIG5vdCBzdWJsaXN0cyBvZiB8ZnJvfC4gIGFwcGVuZCBzaG91bGRuJ3QKLSAgICAgICMgbWF0dGVyIGFueXdheSBiZWNhdXNlIHRoZSBuZXcgfHRvX2l0ZW18IGxpc3QgaXMgZW1wdHkuCi0gICAgICB0b19pdGVtID0gW10KLSAgICAgIE1lcmdlTGlzdHModG9faXRlbSwgaXRlbSwgdG9fZmlsZSwgZnJvX2ZpbGUpCi0gICAgZWxzZToKLSAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAotICAgICAgICAgICdBdHRlbXB0IHRvIG1lcmdlIGxpc3QgaXRlbSBvZiB1bnN1cHBvcnRlZCB0eXBlICcgKyBcCi0gICAgICAgICAgaXRlbS5fX2NsYXNzX18uX19uYW1lX18KLQotICAgIGlmIGFwcGVuZDoKLSAgICAgICMgSWYgYXBwZW5kaW5nIGEgc2luZ2xldG9uIHRoYXQncyBhbHJlYWR5IGluIHRoZSBsaXN0LCBkb24ndCBhcHBlbmQuCi0gICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBlYXJsaWVzdCBvY2N1cnJlbmNlIG9mIHRoZSBpdGVtIHdpbGwgc3RheSBwdXQuCi0gICAgICBpZiBub3Qgc2luZ2xldG9uIG9yIG5vdCBpc19pbl9zZXRfb3JfbGlzdCh0b19pdGVtLCBoYXNoYWJsZV90b19zZXQsIHRvKToKLSAgICAgICAgdG8uYXBwZW5kKHRvX2l0ZW0pCi0gICAgICAgIGlmIGlzX2hhc2hhYmxlKHRvX2l0ZW0pOgotICAgICAgICAgIGhhc2hhYmxlX3RvX3NldC5hZGQodG9faXRlbSkKLSAgICBlbHNlOgotICAgICAgIyBJZiBwcmVwZW5kaW5nIGEgc2luZ2xldG9uIHRoYXQncyBhbHJlYWR5IGluIHRoZSBsaXN0LCByZW1vdmUgdGhlCi0gICAgICAjIGV4aXN0aW5nIGluc3RhbmNlIGFuZCBwcm9jZWVkIHdpdGggdGhlIHByZXBlbmQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUKLSAgICAgICMgaXRlbSBhcHBlYXJzIGF0IHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KLSAgICAgIHdoaWxlIHNpbmdsZXRvbiBhbmQgdG9faXRlbSBpbiB0bzoKLSAgICAgICAgdG8ucmVtb3ZlKHRvX2l0ZW0pCi0KLSAgICAgICMgRG9uJ3QganVzdCBpbnNlcnQgZXZlcnl0aGluZyBhdCBpbmRleCAwLiAgVGhhdCB3b3VsZCBwcmVwZW5kIHRoZSBuZXcKLSAgICAgICMgaXRlbXMgdG8gdGhlIGxpc3QgaW4gcmV2ZXJzZSBvcmRlciwgd2hpY2ggd291bGQgYmUgYW4gdW53ZWxjb21lCi0gICAgICAjIHN1cnByaXNlLgotICAgICAgdG8uaW5zZXJ0KHByZXBlbmRfaW5kZXgsIHRvX2l0ZW0pCi0gICAgICBpZiBpc19oYXNoYWJsZSh0b19pdGVtKToKLSAgICAgICAgaGFzaGFibGVfdG9fc2V0LmFkZCh0b19pdGVtKQotICAgICAgcHJlcGVuZF9pbmRleCA9IHByZXBlbmRfaW5kZXggKyAxCi0KLQotZGVmIE1lcmdlRGljdHModG8sIGZybywgdG9fZmlsZSwgZnJvX2ZpbGUpOgotICAjIEkgd2FudGVkIHRvIG5hbWUgdGhlIHBhcmFtZXRlciAiZnJvbSIgYnV0IGl0J3MgYSBQeXRob24ga2V5d29yZC4uLgotICBmb3IgaywgdiBpbiBmcm8uaXRlcml0ZW1zKCk6Ci0gICAgIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvICJpZiBub3QgayBpbiB0bzogdG9ba10gPSB2IiBidXQgdGhhdCB3b3VsZG4ndCBnaXZlCi0gICAgIyBjb3B5IHNlbWFudGljcy4gIFNvbWV0aGluZyBlbHNlIG1heSB3YW50IHRvIG1lcmdlIGZyb20gdGhlIHxmcm98IGRpY3QKLSAgICAjIGxhdGVyLCBhbmQgaGF2aW5nIHRoZSBzYW1lIGRpY3QgcmVmIHBvaW50ZWQgdG8gdHdpY2UgaW4gdGhlIHRyZWUgaXNuJ3QKLSAgICAjIHdoYXQgYW55b25lIHdhbnRzIGNvbnNpZGVyaW5nIHRoYXQgdGhlIGRpY3RzIG1heSBzdWJzZXF1ZW50bHkgYmUKLSAgICAjIG1vZGlmaWVkLgotICAgIGlmIGsgaW4gdG86Ci0gICAgICBiYWRfbWVyZ2UgPSBGYWxzZQotICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpIG9yIGlzaW5zdGFuY2UodiwgaW50KToKLSAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKHRvW2tdLCBzdHIpIG9yIGlzaW5zdGFuY2UodG9ba10sIGludCkpOgotICAgICAgICAgIGJhZF9tZXJnZSA9IFRydWUKLSAgICAgIGVsaWYgdi5fX2NsYXNzX18gIT0gdG9ba10uX19jbGFzc19fOgotICAgICAgICBiYWRfbWVyZ2UgPSBUcnVlCi0KLSAgICAgIGlmIGJhZF9tZXJnZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCi0gICAgICAgICAgICAnQXR0ZW1wdCB0byBtZXJnZSBkaWN0IHZhbHVlIG9mIHR5cGUgJyArIHYuX19jbGFzc19fLl9fbmFtZV9fICsgXAotICAgICAgICAgICAgJyBpbnRvIGluY29tcGF0aWJsZSB0eXBlICcgKyB0b1trXS5fX2NsYXNzX18uX19uYW1lX18gKyBcCi0gICAgICAgICAgICAnIGZvciBrZXkgJyArIGsKLSAgICBpZiBpc2luc3RhbmNlKHYsIHN0cikgb3IgaXNpbnN0YW5jZSh2LCBpbnQpOgotICAgICAgIyBPdmVyd3JpdGUgdGhlIGV4aXN0aW5nIHZhbHVlLCBpZiBhbnkuICBDaGVhcCBhbmQgZWFzeS4KLSAgICAgIGlzX3BhdGggPSBJc1BhdGhTZWN0aW9uKGspCi0gICAgICBpZiBpc19wYXRoOgotICAgICAgICB0b1trXSA9IE1ha2VQYXRoUmVsYXRpdmUodG9fZmlsZSwgZnJvX2ZpbGUsIHYpCi0gICAgICBlbHNlOgotICAgICAgICB0b1trXSA9IHYKLSAgICBlbGlmIGlzaW5zdGFuY2UodiwgZGljdCk6Ci0gICAgICAjIFJlY3Vyc2UsIGd1YXJhbnRlZWluZyBjb3BpZXMgd2lsbCBiZSBtYWRlIG9mIG9iamVjdHMgdGhhdCByZXF1aXJlIGl0LgotICAgICAgaWYgbm90IGsgaW4gdG86Ci0gICAgICAgIHRvW2tdID0ge30KLSAgICAgIE1lcmdlRGljdHModG9ba10sIHYsIHRvX2ZpbGUsIGZyb19maWxlKQotICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBsaXN0KToKLSAgICAgICMgTGlzdHMgaW4gZGljdHMgY2FuIGJlIG1lcmdlZCB3aXRoIGRpZmZlcmVudCBwb2xpY2llcywgZGVwZW5kaW5nIG9uCi0gICAgICAjIGhvdyB0aGUga2V5IGluIHRoZSAiZnJvbSIgZGljdCAoaywgdGhlIGZyb20ta2V5KSBpcyB3cml0dGVuLgotICAgICAgIwotICAgICAgIyBJZiB0aGUgZnJvbS1rZXkgaGFzICAgICAgICAgIC4uLnRoZSB0by1saXN0IHdpbGwgaGF2ZSB0aGlzIGFjdGlvbgotICAgICAgIyB0aGlzIGNoYXJhY3RlciBhcHBlbmRlZDouLi4gICAgIGFwcGxpZWQgd2hlbiByZWNlaXZpbmcgdGhlIGZyb20tbGlzdDoKLSAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICByZXBsYWNlCi0gICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgcHJlcGVuZAotICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIHNldCwgb25seSBpZiB0by1saXN0IGRvZXMgbm90IHlldCBleGlzdAotICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAobm9uZSkgIGFwcGVuZAotICAgICAgIwotICAgICAgIyBUaGlzIGxvZ2ljIGlzIGxpc3Qtc3BlY2lmaWMsIGJ1dCBzaW5jZSBpdCByZWxpZXMgb24gdGhlIGFzc29jaWF0ZWQKLSAgICAgICMgZGljdCBrZXksIGl0J3MgY2hlY2tlZCBpbiB0aGlzIGRpY3Qtb3JpZW50ZWQgZnVuY3Rpb24uCi0gICAgICBleHQgPSBrWy0xXQotICAgICAgYXBwZW5kID0gVHJ1ZQotICAgICAgaWYgZXh0ID09ICc9JzoKLSAgICAgICAgbGlzdF9iYXNlID0ga1s6LTFdCi0gICAgICAgIGxpc3RzX2luY29tcGF0aWJsZSA9IFtsaXN0X2Jhc2UsIGxpc3RfYmFzZSArICc/J10KLSAgICAgICAgdG9bbGlzdF9iYXNlXSA9IFtdCi0gICAgICBlbGlmIGV4dCA9PSAnKyc6Ci0gICAgICAgIGxpc3RfYmFzZSA9IGtbOi0xXQotICAgICAgICBsaXN0c19pbmNvbXBhdGlibGUgPSBbbGlzdF9iYXNlICsgJz0nLCBsaXN0X2Jhc2UgKyAnPyddCi0gICAgICAgIGFwcGVuZCA9IEZhbHNlCi0gICAgICBlbGlmIGV4dCA9PSAnPyc6Ci0gICAgICAgIGxpc3RfYmFzZSA9IGtbOi0xXQotICAgICAgICBsaXN0c19pbmNvbXBhdGlibGUgPSBbbGlzdF9iYXNlLCBsaXN0X2Jhc2UgKyAnPScsIGxpc3RfYmFzZSArICcrJ10KLSAgICAgIGVsc2U6Ci0gICAgICAgIGxpc3RfYmFzZSA9IGsKLSAgICAgICAgbGlzdHNfaW5jb21wYXRpYmxlID0gW2xpc3RfYmFzZSArICc9JywgbGlzdF9iYXNlICsgJz8nXQotCi0gICAgICAjIFNvbWUgY29tYmluYXRpb25zIG9mIG1lcmdlIHBvbGljaWVzIGFwcGVhcmluZyB0b2dldGhlciBhcmUgbWVhbmluZ2xlc3MuCi0gICAgICAjIEl0J3Mgc3R1cGlkIHRvIHJlcGxhY2UgYW5kIGFwcGVuZCBzaW11bHRhbmVvdXNseSwgZm9yIGV4YW1wbGUuICBBcHBlbmQKLSAgICAgICMgYW5kIHByZXBlbmQgYXJlIHRoZSBvbmx5IHBvbGljaWVzIHRoYXQgY2FuIGNvZXhpc3QuCi0gICAgICBmb3IgbGlzdF9pbmNvbXBhdGlibGUgaW4gbGlzdHNfaW5jb21wYXRpYmxlOgotICAgICAgICBpZiBsaXN0X2luY29tcGF0aWJsZSBpbiBmcm86Ci0gICAgICAgICAgcmFpc2UgR3lwRXJyb3IoJ0luY29tcGF0aWJsZSBsaXN0IHBvbGljaWVzICcgKyBrICsgJyBhbmQgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9pbmNvbXBhdGlibGUpCi0KLSAgICAgIGlmIGxpc3RfYmFzZSBpbiB0bzoKLSAgICAgICAgaWYgZXh0ID09ICc/JzoKLSAgICAgICAgICAjIElmIHRoZSBrZXkgZW5kcyBpbiAiPyIsIHRoZSBsaXN0IHdpbGwgb25seSBiZSBtZXJnZWQgaWYgaXQgZG9lc24ndAotICAgICAgICAgICMgYWxyZWFkeSBleGlzdC4KLSAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0b1tsaXN0X2Jhc2VdLCBsaXN0KToKLSAgICAgICAgICAjIFRoaXMgbWF5IG5vdCBoYXZlIGJlZW4gY2hlY2tlZCBhYm92ZSBpZiBtZXJnaW5nIGluIGEgbGlzdCB3aXRoIGFuCi0gICAgICAgICAgIyBleHRlbnNpb24gY2hhcmFjdGVyLgotICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAotICAgICAgICAgICAgICAnQXR0ZW1wdCB0byBtZXJnZSBkaWN0IHZhbHVlIG9mIHR5cGUgJyArIHYuX19jbGFzc19fLl9fbmFtZV9fICsgXAotICAgICAgICAgICAgICAnIGludG8gaW5jb21wYXRpYmxlIHR5cGUgJyArIHRvW2xpc3RfYmFzZV0uX19jbGFzc19fLl9fbmFtZV9fICsgXAotICAgICAgICAgICAgICAnIGZvciBrZXkgJyArIGxpc3RfYmFzZSArICcoJyArIGsgKyAnKScKLSAgICAgIGVsc2U6Ci0gICAgICAgIHRvW2xpc3RfYmFzZV0gPSBbXQotCi0gICAgICAjIENhbGwgTWVyZ2VMaXN0cywgd2hpY2ggd2lsbCBtYWtlIGNvcGllcyBvZiBvYmplY3RzIHRoYXQgcmVxdWlyZSBpdC4KLSAgICAgICMgTWVyZ2VMaXN0cyBjYW4gcmVjdXJzZSBiYWNrIGludG8gTWVyZ2VEaWN0cywgYWx0aG91Z2ggdGhpcyB3aWxsIGJlCi0gICAgICAjIHRvIG1ha2UgY29waWVzIG9mIGRpY3RzICh3aXRoIHBhdGhzIGZpeGVkKSwgdGhlcmUgd2lsbCBiZSBubwotICAgICAgIyBzdWJzZXF1ZW50IGRpY3QgIm1lcmdpbmciIG9uY2UgZW50ZXJpbmcgYSBsaXN0IGJlY2F1c2UgbGlzdHMgYXJlCi0gICAgICAjIGFsd2F5cyByZXBsYWNlZCwgYXBwZW5kZWQgdG8sIG9yIHByZXBlbmRlZCB0by4KLSAgICAgIGlzX3BhdGhzID0gSXNQYXRoU2VjdGlvbihsaXN0X2Jhc2UpCi0gICAgICBNZXJnZUxpc3RzKHRvW2xpc3RfYmFzZV0sIHYsIHRvX2ZpbGUsIGZyb19maWxlLCBpc19wYXRocywgYXBwZW5kKQotICAgIGVsc2U6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IsIFwKLSAgICAgICAgICAnQXR0ZW1wdCB0byBtZXJnZSBkaWN0IHZhbHVlIG9mIHVuc3VwcG9ydGVkIHR5cGUgJyArIFwKLSAgICAgICAgICB2Ll9fY2xhc3NfXy5fX25hbWVfXyArICcgZm9yIGtleSAnICsgawotCi0KLWRlZiBNZXJnZUNvbmZpZ1dpdGhJbmhlcml0YW5jZShuZXdfY29uZmlndXJhdGlvbl9kaWN0LCBidWlsZF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kaWN0LCBjb25maWd1cmF0aW9uLCB2aXNpdGVkKToKLSAgIyBTa2lwIGlmIHByZXZpb3VzbHkgdmlzdGVkLgotICBpZiBjb25maWd1cmF0aW9uIGluIHZpc2l0ZWQ6Ci0gICAgcmV0dXJuCi0KLSAgIyBMb29rIGF0IHRoaXMgY29uZmlndXJhdGlvbi4KLSAgY29uZmlndXJhdGlvbl9kaWN0ID0gdGFyZ2V0X2RpY3RbJ2NvbmZpZ3VyYXRpb25zJ11bY29uZmlndXJhdGlvbl0KLQotICAjIE1lcmdlIGluIHBhcmVudHMuCi0gIGZvciBwYXJlbnQgaW4gY29uZmlndXJhdGlvbl9kaWN0LmdldCgnaW5oZXJpdF9mcm9tJywgW10pOgotICAgIE1lcmdlQ29uZmlnV2l0aEluaGVyaXRhbmNlKG5ld19jb25maWd1cmF0aW9uX2RpY3QsIGJ1aWxkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2RpY3QsIHBhcmVudCwgdmlzaXRlZCArIFtjb25maWd1cmF0aW9uXSkKLQotICAjIE1lcmdlIGl0IGludG8gdGhlIG5ldyBjb25maWcuCi0gIE1lcmdlRGljdHMobmV3X2NvbmZpZ3VyYXRpb25fZGljdCwgY29uZmlndXJhdGlvbl9kaWN0LAotICAgICAgICAgICAgIGJ1aWxkX2ZpbGUsIGJ1aWxkX2ZpbGUpCi0KLSAgIyBEcm9wIGFic3RyYWN0LgotICBpZiAnYWJzdHJhY3QnIGluIG5ld19jb25maWd1cmF0aW9uX2RpY3Q6Ci0gICAgZGVsIG5ld19jb25maWd1cmF0aW9uX2RpY3RbJ2Fic3RyYWN0J10KLQotCi1kZWYgU2V0VXBDb25maWd1cmF0aW9ucyh0YXJnZXQsIHRhcmdldF9kaWN0KToKLSAgIyBrZXlfc3VmZml4ZXMgaXMgYSBsaXN0IG9mIGtleSBzdWZmaXhlcyB0aGF0IG1pZ2h0IGFwcGVhciBvbiBrZXkgbmFtZXMuCi0gICMgVGhlc2Ugc3VmZml4ZXMgYXJlIGhhbmRsZWQgaW4gY29uZGl0aW9uYWwgZXZhbHVhdGlvbnMgKGZvciA9LCArLCBhbmQgPykKLSAgIyBhbmQgcnVsZXMvZXhjbHVkZSBwcm9jZXNzaW5nIChmb3IgISBhbmQgLykuICBLZXlzIHdpdGggdGhlc2Ugc3VmZml4ZXMKLSAgIyBzaG91bGQgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBrZXlzIHdpdGhvdXQuCi0gIGtleV9zdWZmaXhlcyA9IFsnPScsICcrJywgJz8nLCAnIScsICcvJ10KLQotICBidWlsZF9maWxlID0gZ3lwLmNvbW1vbi5CdWlsZEZpbGUodGFyZ2V0KQotCi0gICMgUHJvdmlkZSBhIHNpbmdsZSBjb25maWd1cmF0aW9uIGJ5IGRlZmF1bHQgaWYgbm9uZSBleGlzdHMuCi0gICMgVE9ETyhtYXJrKTogU2lnbmFsIGFuIGVycm9yIGlmIGRlZmF1bHRfY29uZmlndXJhdGlvbnMgZXhpc3RzIGJ1dAotICAjIGNvbmZpZ3VyYXRpb25zIGRvZXMgbm90LgotICBpZiBub3QgJ2NvbmZpZ3VyYXRpb25zJyBpbiB0YXJnZXRfZGljdDoKLSAgICB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXSA9IHsnRGVmYXVsdCc6IHt9fQotICBpZiBub3QgJ2RlZmF1bHRfY29uZmlndXJhdGlvbicgaW4gdGFyZ2V0X2RpY3Q6Ci0gICAgY29uY3JldGUgPSBbaSBmb3IgaSBpbiB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXS5rZXlzKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgdGFyZ2V0X2RpY3RbJ2NvbmZpZ3VyYXRpb25zJ11baV0uZ2V0KCdhYnN0cmFjdCcpXQotICAgIHRhcmdldF9kaWN0WydkZWZhdWx0X2NvbmZpZ3VyYXRpb24nXSA9IHNvcnRlZChjb25jcmV0ZSlbMF0KLQotICBmb3IgY29uZmlndXJhdGlvbiBpbiB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXS5rZXlzKCk6Ci0gICAgb2xkX2NvbmZpZ3VyYXRpb25fZGljdCA9IHRhcmdldF9kaWN0Wydjb25maWd1cmF0aW9ucyddW2NvbmZpZ3VyYXRpb25dCi0gICAgIyBTa2lwIGFic3RyYWN0IGNvbmZpZ3VyYXRpb25zIChzYXZlcyB3b3JrIG9ubHkpLgotICAgIGlmIG9sZF9jb25maWd1cmF0aW9uX2RpY3QuZ2V0KCdhYnN0cmFjdCcpOgotICAgICAgY29udGludWUKLSAgICAjIENvbmZpZ3VyYXRpb25zIGluaGVyaXQgKG1vc3QpIHNldHRpbmdzIGZyb20gdGhlIGVuY2xvc2luZyB0YXJnZXQgc2NvcGUuCi0gICAgIyBHZXQgdGhlIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCByaWdodCBieSBtYWtpbmcgYSBjb3B5IG9mIHRoZSB0YXJnZXQKLSAgICAjIGRpY3QuCi0gICAgbmV3X2NvbmZpZ3VyYXRpb25fZGljdCA9IGNvcHkuZGVlcGNvcHkodGFyZ2V0X2RpY3QpCi0KLSAgICAjIFRha2Ugb3V0IHRoZSBiaXRzIHRoYXQgZG9uJ3QgYmVsb25nIGluIGEgImNvbmZpZ3VyYXRpb25zIiBzZWN0aW9uLgotICAgICMgU2luY2UgY29uZmlndXJhdGlvbiBzZXR1cCBpcyBkb25lIGJlZm9yZSBjb25kaXRpb25hbCwgZXhjbHVkZSwgYW5kIHJ1bGVzCi0gICAgIyBwcm9jZXNzaW5nLCBiZSBjYXJlZnVsIHdpdGggaGFuZGxpbmcgb2YgdGhlIHN1ZmZpeCBjaGFyYWN0ZXJzIHVzZWQgaW4KLSAgICAjIHRob3NlIHBoYXNlcy4KLSAgICBkZWxldGVfa2V5cyA9IFtdCi0gICAgZm9yIGtleSBpbiBuZXdfY29uZmlndXJhdGlvbl9kaWN0OgotICAgICAga2V5X2V4dCA9IGtleVstMTpdCi0gICAgICBpZiBrZXlfZXh0IGluIGtleV9zdWZmaXhlczoKLSAgICAgICAga2V5X2Jhc2UgPSBrZXlbOi0xXQotICAgICAgZWxzZToKLSAgICAgICAga2V5X2Jhc2UgPSBrZXkKLSAgICAgIGlmIGtleV9iYXNlIGluIG5vbl9jb25maWd1cmF0aW9uX2tleXM6Ci0gICAgICAgIGRlbGV0ZV9rZXlzLmFwcGVuZChrZXkpCi0KLSAgICBmb3Iga2V5IGluIGRlbGV0ZV9rZXlzOgotICAgICAgZGVsIG5ld19jb25maWd1cmF0aW9uX2RpY3Rba2V5XQotCi0gICAgIyBNZXJnZSBpbiBjb25maWd1cmF0aW9uICh3aXRoIGFsbCBpdHMgcGFyZW50cyBmaXJzdCkuCi0gICAgTWVyZ2VDb25maWdXaXRoSW5oZXJpdGFuY2UobmV3X2NvbmZpZ3VyYXRpb25fZGljdCwgYnVpbGRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGljdCwgY29uZmlndXJhdGlvbiwgW10pCi0KLSAgICAjIFB1dCB0aGUgbmV3IHJlc3VsdCBiYWNrIGludG8gdGhlIHRhcmdldCBkaWN0IGFzIGEgY29uZmlndXJhdGlvbi4KLSAgICB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXVtjb25maWd1cmF0aW9uXSA9IG5ld19jb25maWd1cmF0aW9uX2RpY3QKLQotICAjIE5vdyBkcm9wIGFsbCB0aGUgYWJzdHJhY3Qgb25lcy4KLSAgZm9yIGNvbmZpZ3VyYXRpb24gaW4gdGFyZ2V0X2RpY3RbJ2NvbmZpZ3VyYXRpb25zJ10ua2V5cygpOgotICAgIG9sZF9jb25maWd1cmF0aW9uX2RpY3QgPSB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXVtjb25maWd1cmF0aW9uXQotICAgIGlmIG9sZF9jb25maWd1cmF0aW9uX2RpY3QuZ2V0KCdhYnN0cmFjdCcpOgotICAgICAgZGVsIHRhcmdldF9kaWN0Wydjb25maWd1cmF0aW9ucyddW2NvbmZpZ3VyYXRpb25dCi0KLSAgIyBOb3cgdGhhdCBhbGwgb2YgdGhlIHRhcmdldCdzIGNvbmZpZ3VyYXRpb25zIGhhdmUgYmVlbiBidWlsdCwgZ28gdGhyb3VnaAotICAjIHRoZSB0YXJnZXQgZGljdCdzIGtleXMgYW5kIHJlbW92ZSBldmVyeXRoaW5nIHRoYXQncyBiZWVuIG1vdmVkIGludG8gYQotICAjICJjb25maWd1cmF0aW9ucyIgc2VjdGlvbi4KLSAgZGVsZXRlX2tleXMgPSBbXQotICBmb3Iga2V5IGluIHRhcmdldF9kaWN0OgotICAgIGtleV9leHQgPSBrZXlbLTE6XQotICAgIGlmIGtleV9leHQgaW4ga2V5X3N1ZmZpeGVzOgotICAgICAga2V5X2Jhc2UgPSBrZXlbOi0xXQotICAgIGVsc2U6Ci0gICAgICBrZXlfYmFzZSA9IGtleQotICAgIGlmIG5vdCBrZXlfYmFzZSBpbiBub25fY29uZmlndXJhdGlvbl9rZXlzOgotICAgICAgZGVsZXRlX2tleXMuYXBwZW5kKGtleSkKLSAgZm9yIGtleSBpbiBkZWxldGVfa2V5czoKLSAgICBkZWwgdGFyZ2V0X2RpY3Rba2V5XQotCi0gICMgQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIHNlZSBpZiB0aGV5IGNvbnRhaW4gaW52YWxpZCBrZXlzLgotICBmb3IgY29uZmlndXJhdGlvbiBpbiB0YXJnZXRfZGljdFsnY29uZmlndXJhdGlvbnMnXS5rZXlzKCk6Ci0gICAgY29uZmlndXJhdGlvbl9kaWN0ID0gdGFyZ2V0X2RpY3RbJ2NvbmZpZ3VyYXRpb25zJ11bY29uZmlndXJhdGlvbl0KLSAgICBmb3Iga2V5IGluIGNvbmZpZ3VyYXRpb25fZGljdC5rZXlzKCk6Ci0gICAgICBpZiBrZXkgaW4gaW52YWxpZF9jb25maWd1cmF0aW9uX2tleXM6Ci0gICAgICAgIHJhaXNlIEd5cEVycm9yKCclcyBub3QgYWxsb3dlZCBpbiB0aGUgJXMgY29uZmlndXJhdGlvbiwgZm91bmQgaW4gJwotICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0ICVzJyAlIChrZXksIGNvbmZpZ3VyYXRpb24sIHRhcmdldCkpCi0KLQotCi1kZWYgUHJvY2Vzc0xpc3RGaWx0ZXJzSW5EaWN0KG5hbWUsIHRoZV9kaWN0KToKLSAgIiIiUHJvY2VzcyByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGV4Y2x1c2lvbi1iYXNlZCBmaWx0ZXJzIG9uIGxpc3RzLgotCi0gIEFuIGV4Y2x1c2lvbiBsaXN0IGlzIGluIGEgZGljdCBrZXkgbmFtZWQgd2l0aCBhIHRyYWlsaW5nICIhIiwgbGlrZQotICAic291cmNlcyEiLiAgRXZlcnkgaXRlbSBpbiBzdWNoIGEgbGlzdCBpcyByZW1vdmVkIGZyb20gdGhlIGFzc29jaWF0ZWQKLSAgbWFpbiBsaXN0LCB3aGljaCBpbiB0aGlzIGV4YW1wbGUsIHdvdWxkIGJlICJzb3VyY2VzIi4gIFJlbW92ZWQgaXRlbXMgYXJlCi0gIHBsYWNlZCBpbnRvIGEgInNvdXJjZXNfZXhjbHVkZWQiIGxpc3QgaW4gdGhlIGRpY3QuCi0KLSAgUmVndWxhciBleHByZXNzaW9uIChyZWdleCkgZmlsdGVycyBhcmUgY29udGFpbmVkIGluIGRpY3Qga2V5cyBuYW1lZCB3aXRoIGEKLSAgdHJhaWxpbmcgIi8iLCBzdWNoIGFzICJzb3VyY2VzLyIgdG8gb3BlcmF0ZSBvbiB0aGUgInNvdXJjZXMiIGxpc3QuICBSZWdleAotICBmaWx0ZXJzIGluIGEgZGljdCB0YWtlIHRoZSBmb3JtOgotICAgICdzb3VyY2VzLyc6IFsgWydleGNsdWRlJywgJ18obGludXh8bWFjfHdpbilcXC5jYyQnXSwKLSAgICAgICAgICAgICAgICAgIFsnaW5jbHVkZScsICdfbWFjXFwuY2MkJ10gXSwKLSAgVGhlIGZpcnN0IGZpbHRlciBzYXlzIHRvIGV4Y2x1ZGUgYWxsIGZpbGVzIGVuZGluZyBpbiBfbGludXguY2MsIF9tYWMuY2MsIGFuZAotICBfd2luLmNjLiAgVGhlIHNlY29uZCBmaWx0ZXIgdGhlbiBpbmNsdWRlcyBhbGwgZmlsZXMgZW5kaW5nIGluIF9tYWMuY2MgdGhhdAotICBhcmUgbm93IG9yIHdlcmUgb25jZSBpbiB0aGUgInNvdXJjZXMiIGxpc3QuICBJdGVtcyBtYXRjaGluZyBhbiAiZXhjbHVkZSIKLSAgZmlsdGVyIGFyZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHByb2Nlc3NpbmcgYXMgd291bGQgb2NjdXIgaWYgdGhleSB3ZXJlIGxpc3RlZAotICBieSBuYW1lIGluIGFuIGV4Y2x1c2lvbiBsaXN0IChlbmRpbmcgaW4gIiEiKS4gIEl0ZW1zIG1hdGNoaW5nIGFuICJpbmNsdWRlIgotICBmaWx0ZXIgYXJlIGJyb3VnaHQgYmFjayBpbnRvIHRoZSBtYWluIGxpc3QgaWYgcHJldmlvdXNseSBleGNsdWRlZCBieSBhbgotICBleGNsdXNpb24gbGlzdCBvciBleGNsdXNpb24gcmVnZXggZmlsdGVyLiAgU3Vic2VxdWVudCBtYXRjaGluZyAiZXhjbHVkZSIKLSAgcGF0dGVybnMgY2FuIHN0aWxsIGNhdXNlIGl0ZW1zIHRvIGJlIGV4Y2x1ZGVkIGFmdGVyIG1hdGNoaW5nIGFuICJpbmNsdWRlIi4KLSAgIiIiCi0KLSAgIyBMb29rIHRocm91Z2ggdGhlIGRpY3Rpb25hcnkgZm9yIGFueSBsaXN0cyB3aG9zZSBrZXlzIGVuZCBpbiAiISIgb3IgIi8iLgotICAjIFRoZXNlIGFyZSBsaXN0cyB0aGF0IHdpbGwgYmUgdHJlYXRlZCBhcyBleGNsdWRlIGxpc3RzIGFuZCByZWd1bGFyCi0gICMgZXhwcmVzc2lvbi1iYXNlZCBleGNsdWRlL2luY2x1ZGUgbGlzdHMuICBDb2xsZWN0IHRoZSBsaXN0cyB0aGF0IGFyZQotICAjIG5lZWRlZCBmaXJzdCwgbG9va2luZyBmb3IgdGhlIGxpc3RzIHRoYXQgdGhleSBvcGVyYXRlIG9uLCBhbmQgYXNzZW1ibGUKLSAgIyB0aGVuIGludG8gfGxpc3RzfC4gIFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIGxvb3AgdXAgZnJvbnQsIGJlY2F1c2UKLSAgIyB0aGUgX2luY2x1ZGVkIGFuZCBfZXhjbHVkZWQga2V5cyBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZV9kaWN0LCBhbmQgdGhhdAotICAjIGNhbid0IGJlIGRvbmUgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggaXQuCi0KLSAgbGlzdHMgPSBbXQotICBkZWxfbGlzdHMgPSBbXQotICBmb3Iga2V5LCB2YWx1ZSBpbiB0aGVfZGljdC5pdGVyaXRlbXMoKToKLSAgICBvcGVyYXRpb24gPSBrZXlbLTFdCi0gICAgaWYgb3BlcmF0aW9uICE9ICchJyBhbmQgb3BlcmF0aW9uICE9ICcvJzoKLSAgICAgIGNvbnRpbnVlCi0KLSAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yLCBuYW1lICsgJyBrZXkgJyArIGtleSArICcgbXVzdCBiZSBsaXN0LCBub3QgJyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXwotCi0gICAgbGlzdF9rZXkgPSBrZXlbOi0xXQotICAgIGlmIGxpc3Rfa2V5IG5vdCBpbiB0aGVfZGljdDoKLSAgICAgICMgVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUncyBhIGxpc3QgbGlrZSAic291cmNlcyEiIGJ1dCBubyBjb3JyZXNwb25kaW5nCi0gICAgICAjICJzb3VyY2VzIiBsaXN0LiAgU2luY2UgdGhlcmUncyBub3RoaW5nIGZvciBpdCB0byBvcGVyYXRlIG9uLCBxdWV1ZSB1cAotICAgICAgIyB0aGUgInNvdXJjZXMhIiBsaXN0IGZvciBkZWxldGlvbiBub3cuCi0gICAgICBkZWxfbGlzdHMuYXBwZW5kKGtleSkKLSAgICAgIGNvbnRpbnVlCi0KLSAgICBpZiBub3QgaXNpbnN0YW5jZSh0aGVfZGljdFtsaXN0X2tleV0sIGxpc3QpOgotICAgICAgcmFpc2UgVmFsdWVFcnJvciwgbmFtZSArICcga2V5ICcgKyBsaXN0X2tleSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICcgbXVzdCBiZSBsaXN0LCBub3QgJyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXyArICcgd2hlbiBhcHBseWluZyAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgeychJzogJ2V4Y2x1c2lvbicsICcvJzogJ3JlZ2V4J31bb3BlcmF0aW9uXQotCi0gICAgaWYgbm90IGxpc3Rfa2V5IGluIGxpc3RzOgotICAgICAgbGlzdHMuYXBwZW5kKGxpc3Rfa2V5KQotCi0gICMgRGVsZXRlIHRoZSBsaXN0cyB0aGF0IGFyZSBrbm93biB0byBiZSB1bm5lZWRlZCBhdCB0aGlzIHBvaW50LgotICBmb3IgZGVsX2xpc3QgaW4gZGVsX2xpc3RzOgotICAgIGRlbCB0aGVfZGljdFtkZWxfbGlzdF0KLQotICBmb3IgbGlzdF9rZXkgaW4gbGlzdHM6Ci0gICAgdGhlX2xpc3QgPSB0aGVfZGljdFtsaXN0X2tleV0KLQotICAgICMgSW5pdGlhbGl6ZSB0aGUgbGlzdF9hY3Rpb25zIGxpc3QsIHdoaWNoIGlzIHBhcmFsbGVsIHRvIHRoZV9saXN0LiAgRWFjaAotICAgICMgaXRlbSBpbiBsaXN0X2FjdGlvbnMgaWRlbnRpZmllcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGl0ZW0gaW4KLSAgICAjIHRoZV9saXN0IHNob3VsZCBiZSBleGNsdWRlZCwgdW5jb25kaXRpb25hbGx5IHByZXNlcnZlZCAoaW5jbHVkZWQpLCBvcgotICAgICMgd2hldGhlciBubyBleGNsdXNpb24gb3IgaW5jbHVzaW9uIGhhcyBiZWVuIGFwcGxpZWQuICBJdGVtcyBmb3Igd2hpY2gKLSAgICAjIG5vIGV4Y2x1c2lvbiBvciBpbmNsdXNpb24gaGFzIGJlZW4gYXBwbGllZCAoeWV0KSBoYXZlIHZhbHVlIC0xLCBpdGVtcwotICAgICMgZXhjbHVkZWQgaGF2ZSB2YWx1ZSAwLCBhbmQgaXRlbXMgaW5jbHVkZWQgaGF2ZSB2YWx1ZSAxLiAgSW5jbHVkZXMgYW5kCi0gICAgIyBleGNsdWRlcyBvdmVycmlkZSBwcmV2aW91cyBhY3Rpb25zLiAgQWxsIGl0ZW1zIGluIGxpc3RfYWN0aW9ucyBhcmUKLSAgICAjIGluaXRpYWxpemVkIHRvIC0xIGJlY2F1c2Ugbm8gZXhjbHVkZXMgb3IgaW5jbHVkZXMgaGF2ZSBiZWVuIHByb2Nlc3NlZAotICAgICMgeWV0LgotICAgIGxpc3RfYWN0aW9ucyA9IGxpc3QoKC0xLCkgKiBsZW4odGhlX2xpc3QpKQotCi0gICAgZXhjbHVkZV9rZXkgPSBsaXN0X2tleSArICchJwotICAgIGlmIGV4Y2x1ZGVfa2V5IGluIHRoZV9kaWN0OgotICAgICAgZm9yIGV4Y2x1ZGVfaXRlbSBpbiB0aGVfZGljdFtleGNsdWRlX2tleV06Ci0gICAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UoMCwgbGVuKHRoZV9saXN0KSk6Ci0gICAgICAgICAgaWYgZXhjbHVkZV9pdGVtID09IHRoZV9saXN0W2luZGV4XToKLSAgICAgICAgICAgICMgVGhpcyBpdGVtIG1hdGNoZXMgdGhlIGV4Y2x1ZGVfaXRlbSwgc28gc2V0IGl0cyBhY3Rpb24gdG8gMAotICAgICAgICAgICAgIyAoZXhjbHVkZSkuCi0gICAgICAgICAgICBsaXN0X2FjdGlvbnNbaW5kZXhdID0gMAotCi0gICAgICAjIFRoZSAid2hhdGV2ZXIhIiBsaXN0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGR1bXAgaXQuCi0gICAgICBkZWwgdGhlX2RpY3RbZXhjbHVkZV9rZXldCi0KLSAgICByZWdleF9rZXkgPSBsaXN0X2tleSArICcvJwotICAgIGlmIHJlZ2V4X2tleSBpbiB0aGVfZGljdDoKLSAgICAgIGZvciByZWdleF9pdGVtIGluIHRoZV9kaWN0W3JlZ2V4X2tleV06Ci0gICAgICAgIFthY3Rpb24sIHBhdHRlcm5dID0gcmVnZXhfaXRlbQotICAgICAgICBwYXR0ZXJuX3JlID0gcmUuY29tcGlsZShwYXR0ZXJuKQotCi0gICAgICAgIGlmIGFjdGlvbiA9PSAnZXhjbHVkZSc6Ci0gICAgICAgICAgIyBUaGlzIGl0ZW0gbWF0Y2hlcyBhbiBleGNsdWRlIHJlZ2V4LCBzbyBzZXQgaXRzIHZhbHVlIHRvIDAgKGV4Y2x1ZGUpLgotICAgICAgICAgIGFjdGlvbl92YWx1ZSA9IDAKLSAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ2luY2x1ZGUnOgotICAgICAgICAgICMgVGhpcyBpdGVtIG1hdGNoZXMgYW4gaW5jbHVkZSByZWdleCwgc28gc2V0IGl0cyB2YWx1ZSB0byAxIChpbmNsdWRlKS4KLSAgICAgICAgICBhY3Rpb25fdmFsdWUgPSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgIyBUaGlzIGlzIGFuIGFjdGlvbiB0aGF0IGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCi0gICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ1VucmVjb2duaXplZCBhY3Rpb24gJyArIGFjdGlvbiArICcgaW4gJyArIG5hbWUgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBrZXkgJyArIHJlZ2V4X2tleQotCi0gICAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UoMCwgbGVuKHRoZV9saXN0KSk6Ci0gICAgICAgICAgbGlzdF9pdGVtID0gdGhlX2xpc3RbaW5kZXhdCi0gICAgICAgICAgaWYgbGlzdF9hY3Rpb25zW2luZGV4XSA9PSBhY3Rpb25fdmFsdWU6Ci0gICAgICAgICAgICAjIEV2ZW4gaWYgdGhlIHJlZ2V4IG1hdGNoZXMsIG5vdGhpbmcgd2lsbCBjaGFuZ2Ugc28gY29udGludWUgKHJlZ2V4Ci0gICAgICAgICAgICAjIHNlYXJjaGVzIGFyZSBleHBlbnNpdmUpLgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICBpZiBwYXR0ZXJuX3JlLnNlYXJjaChsaXN0X2l0ZW0pOgotICAgICAgICAgICAgIyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2guCi0gICAgICAgICAgICBsaXN0X2FjdGlvbnNbaW5kZXhdID0gYWN0aW9uX3ZhbHVlCi0KLSAgICAgICMgVGhlICJ3aGF0ZXZlci8iIGxpc3QgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgZHVtcCBpdC4KLSAgICAgIGRlbCB0aGVfZGljdFtyZWdleF9rZXldCi0KLSAgICAjIEFkZCBleGNsdWRlZCBpdGVtcyB0byB0aGUgZXhjbHVkZWQgbGlzdC4KLSAgICAjCi0gICAgIyBOb3RlIHRoYXQgZXhjbHVkZV9rZXkgKCJzb3VyY2VzISIpIGlzIGRpZmZlcmVudCBmcm9tIGV4Y2x1ZGVkX2tleQotICAgICMgKCJzb3VyY2VzX2V4Y2x1ZGVkIikuICBUaGUgZXhjbHVkZV9rZXkgbGlzdCBpcyBpbnB1dCBhbmQgaXQgd2FzIGFscmVhZHkKLSAgICAjIHByb2Nlc3NlZCBhbmQgZGVsZXRlZDsgdGhlIGV4Y2x1ZGVkX2tleSBsaXN0IGlzIG91dHB1dCBhbmQgaXQncyBhYm91dAotICAgICMgdG8gYmUgY3JlYXRlZC4KLSAgICBleGNsdWRlZF9rZXkgPSBsaXN0X2tleSArICdfZXhjbHVkZWQnCi0gICAgaWYgZXhjbHVkZWRfa2V5IGluIHRoZV9kaWN0OgotICAgICAgcmFpc2UgR3lwRXJyb3IobmFtZSArICcga2V5ICcgKyBleGNsdWRlZF9rZXkgKwotICAgICAgICAgICAgICAgICAgICAgJyBtdXN0IG5vdCBiZSBwcmVzZW50IHByaW9yICcKLSAgICAgICAgICAgICAgICAgICAgICcgdG8gYXBwbHlpbmcgZXhjbHVzaW9uL3JlZ2V4IGZpbHRlcnMgZm9yICcgKyBsaXN0X2tleSkKLQotICAgIGV4Y2x1ZGVkX2xpc3QgPSBbXQotCi0gICAgIyBHbyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgbGlzdF9hY3Rpb25zIGxpc3Qgc28gdGhhdCBhcyBpdGVtcyBhcmUgZGVsZXRlZCwKLSAgICAjIHRoZSBpbmRpY2VzIG9mIGl0ZW1zIHRoYXQgaGF2ZW4ndCBiZWVuIHNlZW4geWV0IGRvbid0IHNoaWZ0LiAgVGhhdCBtZWFucwotICAgICMgdGhhdCB0aGluZ3MgbmVlZCB0byBiZSBwcmVwZW5kZWQgdG8gZXhjbHVkZWRfbGlzdCB0byBtYWludGFpbiB0aGVtIGluIHRoZQotICAgICMgc2FtZSBvcmRlciB0aGF0IHRoZXkgZXhpc3RlZCBpbiB0aGVfbGlzdC4KLSAgICBmb3IgaW5kZXggaW4geHJhbmdlKGxlbihsaXN0X2FjdGlvbnMpIC0gMSwgLTEsIC0xKToKLSAgICAgIGlmIGxpc3RfYWN0aW9uc1tpbmRleF0gPT0gMDoKLSAgICAgICAgIyBEdW1wIGFueXRoaW5nIHdpdGggYWN0aW9uIDAgKGV4Y2x1ZGUpLiAgS2VlcCBhbnl0aGluZyB3aXRoIGFjdGlvbiAxCi0gICAgICAgICMgKGluY2x1ZGUpIG9yIC0xIChubyBpbmNsdWRlIG9yIGV4Y2x1ZGUgc2VlbiBmb3IgdGhlIGl0ZW0pLgotICAgICAgICBleGNsdWRlZF9saXN0Lmluc2VydCgwLCB0aGVfbGlzdFtpbmRleF0pCi0gICAgICAgIGRlbCB0aGVfbGlzdFtpbmRleF0KLQotICAgICMgSWYgYW55dGhpbmcgd2FzIGV4Y2x1ZGVkLCBwdXQgdGhlIGV4Y2x1ZGVkIGxpc3QgaW50byB0aGVfZGljdCBhdAotICAgICMgZXhjbHVkZWRfa2V5LgotICAgIGlmIGxlbihleGNsdWRlZF9saXN0KSA+IDA6Ci0gICAgICB0aGVfZGljdFtleGNsdWRlZF9rZXldID0gZXhjbHVkZWRfbGlzdAotCi0gICMgTm93IHJlY3Vyc2UgaW50byBzdWJkaWN0cyBhbmQgbGlzdHMgdGhhdCBtYXkgY29udGFpbiBkaWN0cy4KLSAgZm9yIGtleSwgdmFsdWUgaW4gdGhlX2RpY3QuaXRlcml0ZW1zKCk6Ci0gICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICBQcm9jZXNzTGlzdEZpbHRlcnNJbkRpY3Qoa2V5LCB2YWx1ZSkKLSAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgUHJvY2Vzc0xpc3RGaWx0ZXJzSW5MaXN0KGtleSwgdmFsdWUpCi0KLQotZGVmIFByb2Nlc3NMaXN0RmlsdGVyc0luTGlzdChuYW1lLCB0aGVfbGlzdCk6Ci0gIGZvciBpdGVtIGluIHRoZV9saXN0OgotICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgZGljdCk6Ci0gICAgICBQcm9jZXNzTGlzdEZpbHRlcnNJbkRpY3QobmFtZSwgaXRlbSkKLSAgICBlbGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAgICBQcm9jZXNzTGlzdEZpbHRlcnNJbkxpc3QobmFtZSwgaXRlbSkKLQotCi1kZWYgVmFsaWRhdGVUYXJnZXRUeXBlKHRhcmdldCwgdGFyZ2V0X2RpY3QpOgotICAiIiJFbnN1cmVzIHRoZSAndHlwZScgZmllbGQgb24gdGhlIHRhcmdldCBpcyBvbmUgb2YgdGhlIGtub3duIHR5cGVzLgotCi0gIEFyZ3VtZW50czoKLSAgICB0YXJnZXQ6IHN0cmluZywgbmFtZSBvZiB0YXJnZXQuCi0gICAgdGFyZ2V0X2RpY3Q6IGRpY3QsIHRhcmdldCBzcGVjLgotCi0gIFJhaXNlcyBhbiBleGNlcHRpb24gb24gZXJyb3IuCi0gICIiIgotICBWQUxJRF9UQVJHRVRfVFlQRVMgPSAoJ2V4ZWN1dGFibGUnLCAnbG9hZGFibGVfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0aWNfbGlicmFyeScsICdzaGFyZWRfbGlicmFyeScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnbm9uZScpCi0gIHRhcmdldF90eXBlID0gdGFyZ2V0X2RpY3QuZ2V0KCd0eXBlJywgTm9uZSkKLSAgaWYgdGFyZ2V0X3R5cGUgbm90IGluIFZBTElEX1RBUkdFVF9UWVBFUzoKLSAgICByYWlzZSBHeXBFcnJvcigiVGFyZ2V0ICVzIGhhcyBhbiBpbnZhbGlkIHRhcmdldCB0eXBlICclcycuICAiCi0gICAgICAgICAgICAgICAgICAgIk11c3QgYmUgb25lIG9mICVzLiIgJQotICAgICAgICAgICAgICAgICAgICh0YXJnZXQsIHRhcmdldF90eXBlLCAnLycuam9pbihWQUxJRF9UQVJHRVRfVFlQRVMpKSkKLSAgaWYgKHRhcmdldF9kaWN0LmdldCgnc3RhbmRhbG9uZV9zdGF0aWNfbGlicmFyeScsIDApIGFuZAotICAgICAgbm90IHRhcmdldF90eXBlID09ICdzdGF0aWNfbGlicmFyeScpOgotICAgIHJhaXNlIEd5cEVycm9yKCdUYXJnZXQgJXMgaGFzIHR5cGUgJXMgYnV0IHN0YW5kYWxvbmVfc3RhdGljX2xpYnJhcnkgZmxhZyBpcycKLSAgICAgICAgICAgICAgICAgICAnIG9ubHkgdmFsaWQgZm9yIHN0YXRpY19saWJyYXJ5IHR5cGUuJyAlICh0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3R5cGUpKQotCi0KLWRlZiBWYWxpZGF0ZVNvdXJjZXNJblRhcmdldCh0YXJnZXQsIHRhcmdldF9kaWN0LCBidWlsZF9maWxlKToKLSAgIyBUT0RPOiBDaGVjayBpZiBNU1ZDIGFsbG93cyB0aGlzIGZvciBsb2FkYWJsZV9tb2R1bGUgdGFyZ2V0cy4KLSAgaWYgdGFyZ2V0X2RpY3QuZ2V0KCd0eXBlJywgTm9uZSkgbm90IGluICgnc3RhdGljX2xpYnJhcnknLCAnc2hhcmVkX2xpYnJhcnknKToKLSAgICByZXR1cm4KLSAgc291cmNlcyA9IHRhcmdldF9kaWN0LmdldCgnc291cmNlcycsIFtdKQotICBiYXNlbmFtZXMgPSB7fQotICBmb3Igc291cmNlIGluIHNvdXJjZXM6Ci0gICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChzb3VyY2UpCi0gICAgaXNfY29tcGlsZWRfZmlsZSA9IGV4dCBpbiBbCi0gICAgICAgICcuYycsICcuY2MnLCAnLmNwcCcsICcuY3h4JywgJy5tJywgJy5tbScsICcucycsICcuUyddCi0gICAgaWYgbm90IGlzX2NvbXBpbGVkX2ZpbGU6Ci0gICAgICBjb250aW51ZQotICAgIGJhc2VuYW1lID0gb3MucGF0aC5iYXNlbmFtZShuYW1lKSAgIyBEb24ndCBpbmNsdWRlIGV4dGVuc2lvbi4KLSAgICBiYXNlbmFtZXMuc2V0ZGVmYXVsdChiYXNlbmFtZSwgW10pLmFwcGVuZChzb3VyY2UpCi0KLSAgZXJyb3IgPSAnJwotICBmb3IgYmFzZW5hbWUsIGZpbGVzIGluIGJhc2VuYW1lcy5pdGVyaXRlbXMoKToKLSAgICBpZiBsZW4oZmlsZXMpID4gMToKLSAgICAgIGVycm9yICs9ICcgICVzOiAlc1xuJyAlIChiYXNlbmFtZSwgJyAnLmpvaW4oZmlsZXMpKQotCi0jICBEdXBsaWNhdGUgYmFzZW5hbWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1TVkMwOCBhbmQgbGlidG9vbCBvbiBNYWMsIGJvdGggb2YKLSMgIHdoaWNoIENvYmFsdCBkb2VzIG5vdCBkZXBlbmQgb24sIENocm9tZSByZW1vdmVkIHRoaXMgZ3lwIGNoZWNrIGJhY2sgaW4gdGhlCi0jICBmb2xsb3dpbmcgQ0w6IGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMzQ0NTczMDAyLwotCi0jICBpZiBlcnJvcjoKLSMgICAgcHJpbnQoJ3N0YXRpYyBsaWJyYXJ5ICVzIGhhcyBzZXZlcmFsIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZW5hbWU6XG4nICUKLSMgICAgICAgICAgdGFyZ2V0ICsgZXJyb3IgKyAnU29tZSBidWlsZCBzeXN0ZW1zLCBlLmcuIE1TVkMwOCwgJwotIyAgICAgICAgICAnY2Fubm90IGhhbmRsZSB0aGF0LicpCi0jICAgIHJhaXNlIEd5cEVycm9yKCdEdXBsaWNhdGUgYmFzZW5hbWVzIGluIHNvdXJjZXMgc2VjdGlvbiwgc2VlIGxpc3QgYWJvdmUnKQotCi0KLWRlZiBWYWxpZGF0ZVJ1bGVzSW5UYXJnZXQodGFyZ2V0LCB0YXJnZXRfZGljdCwgZXh0cmFfc291cmNlc19mb3JfcnVsZXMpOgotICAiIiJFbnN1cmVzIHRoYXQgdGhlIHJ1bGVzIHNlY3Rpb25zIGluIHRhcmdldF9kaWN0IGFyZSB2YWxpZCBhbmQgY29uc2lzdGVudCwKLSAgYW5kIGRldGVybWluZXMgd2hpY2ggc291cmNlcyB0aGV5IGFwcGx5IHRvLgotCi0gIEFyZ3VtZW50czoKLSAgICB0YXJnZXQ6IHN0cmluZywgbmFtZSBvZiB0YXJnZXQuCi0gICAgdGFyZ2V0X2RpY3Q6IGRpY3QsIHRhcmdldCBzcGVjIGNvbnRhaW5pbmcgInJ1bGVzIiBhbmQgInNvdXJjZXMiIGxpc3RzLgotICAgIGV4dHJhX3NvdXJjZXNfZm9yX3J1bGVzOiBhIGxpc3Qgb2Yga2V5cyB0byBzY2FuIGZvciBydWxlIG1hdGNoZXMgaW4KLSAgICAgICAgYWRkaXRpb24gdG8gJ3NvdXJjZXMnLgotICAiIiIKLQotICAjIERpY3RzIHRvIG1hcCBiZXR3ZWVuIHZhbHVlcyBmb3VuZCBpbiBydWxlcycgJ3J1bGVfbmFtZScgYW5kICdleHRlbnNpb24nCi0gICMga2V5cyBhbmQgdGhlIHJ1bGUgZGljdHMgdGhlbXNlbHZlcy4KLSAgcnVsZV9uYW1lcyA9IHt9Ci0gIHJ1bGVfZXh0ZW5zaW9ucyA9IHt9Ci0KLSAgcnVsZXMgPSB0YXJnZXRfZGljdC5nZXQoJ3J1bGVzJywgW10pCi0gIGZvciBydWxlIGluIHJ1bGVzOgotICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlcmUncyBubyBjb25mbGljdCBhbW9uZyBydWxlIG5hbWVzIGFuZCBleHRlbnNpb25zLgotICAgIHJ1bGVfbmFtZSA9IHJ1bGVbJ3J1bGVfbmFtZSddCi0gICAgaWYgcnVsZV9uYW1lIGluIHJ1bGVfbmFtZXM6Ci0gICAgICByYWlzZSBHeXBFcnJvcigncnVsZSAlcyBleGlzdHMgaW4gZHVwbGljYXRlLCB0YXJnZXQgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgIChydWxlX25hbWUsIHRhcmdldCkpCi0gICAgcnVsZV9uYW1lc1tydWxlX25hbWVdID0gcnVsZQotCi0gICAgcnVsZV9leHRlbnNpb24gPSBydWxlWydleHRlbnNpb24nXQotICAgIGlmIHJ1bGVfZXh0ZW5zaW9uIGluIHJ1bGVfZXh0ZW5zaW9uczoKLSAgICAgIHJhaXNlIEd5cEVycm9yKCgnZXh0ZW5zaW9uICVzIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSBydWxlcywgJyArCi0gICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCAlcyBydWxlcyAlcyBhbmQgJXMnKSAlCi0gICAgICAgICAgICAgICAgICAgICAocnVsZV9leHRlbnNpb24sIHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICBydWxlX2V4dGVuc2lvbnNbcnVsZV9leHRlbnNpb25dWydydWxlX25hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICBydWxlX25hbWUpKQotICAgIHJ1bGVfZXh0ZW5zaW9uc1tydWxlX2V4dGVuc2lvbl0gPSBydWxlCi0KLSAgICAjIE1ha2Ugc3VyZSBydWxlX3NvdXJjZXMgaXNuJ3QgYWxyZWFkeSB0aGVyZS4gIEl0J3MgZ29pbmcgdG8gYmUKLSAgICAjIGNyZWF0ZWQgYmVsb3cgaWYgbmVlZGVkLgotICAgIGlmICdydWxlX3NvdXJjZXMnIGluIHJ1bGU6Ci0gICAgICByYWlzZSBHeXBFcnJvcigKLSAgICAgICAgICAgICdydWxlX3NvdXJjZXMgbXVzdCBub3QgZXhpc3QgaW4gaW5wdXQsIHRhcmdldCAlcyBydWxlICVzJyAlCi0gICAgICAgICAgICAodGFyZ2V0LCBydWxlX25hbWUpKQotICAgIGV4dGVuc2lvbiA9IHJ1bGVbJ2V4dGVuc2lvbiddCi0KLSAgICBydWxlX3NvdXJjZXMgPSBbXQotICAgIHNvdXJjZV9rZXlzID0gWydzb3VyY2VzJ10KLSAgICBzb3VyY2Vfa2V5cy5leHRlbmQoZXh0cmFfc291cmNlc19mb3JfcnVsZXMpCi0gICAgZm9yIHNvdXJjZV9rZXkgaW4gc291cmNlX2tleXM6Ci0gICAgICBmb3Igc291cmNlIGluIHRhcmdldF9kaWN0LmdldChzb3VyY2Vfa2V5LCBbXSk6Ci0gICAgICAgIChzb3VyY2Vfcm9vdCwgc291cmNlX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KHNvdXJjZSkKLSAgICAgICAgaWYgc291cmNlX2V4dGVuc2lvbi5zdGFydHN3aXRoKCcuJyk6Ci0gICAgICAgICAgc291cmNlX2V4dGVuc2lvbiA9IHNvdXJjZV9leHRlbnNpb25bMTpdCi0gICAgICAgIGlmIHNvdXJjZV9leHRlbnNpb24gPT0gZXh0ZW5zaW9uOgotICAgICAgICAgIHJ1bGVfc291cmNlcy5hcHBlbmQoc291cmNlKQotCi0gICAgaWYgbGVuKHJ1bGVfc291cmNlcykgPiAwOgotICAgICAgcnVsZVsncnVsZV9zb3VyY2VzJ10gPSBydWxlX3NvdXJjZXMKLQotCi1kZWYgVmFsaWRhdGVSdW5Bc0luVGFyZ2V0KHRhcmdldCwgdGFyZ2V0X2RpY3QsIGJ1aWxkX2ZpbGUpOgotICB0YXJnZXRfbmFtZSA9IHRhcmdldF9kaWN0LmdldCgndGFyZ2V0X25hbWUnKQotICBydW5fYXMgPSB0YXJnZXRfZGljdC5nZXQoJ3J1bl9hcycpCi0gIGlmIG5vdCBydW5fYXM6Ci0gICAgcmV0dXJuCi0gIGlmIG5vdCBpc2luc3RhbmNlKHJ1bl9hcywgZGljdCk6Ci0gICAgcmFpc2UgR3lwRXJyb3IoIlRoZSAncnVuX2FzJyBpbiB0YXJnZXQgJXMgZnJvbSBmaWxlICVzIHNob3VsZCBiZSBhICIKLSAgICAgICAgICAgICAgICAgICAiZGljdGlvbmFyeS4iICUKLSAgICAgICAgICAgICAgICAgICAodGFyZ2V0X25hbWUsIGJ1aWxkX2ZpbGUpKQotICBhY3Rpb24gPSBydW5fYXMuZ2V0KCdhY3Rpb24nKQotICBpZiBub3QgYWN0aW9uOgotICAgIHJhaXNlIEd5cEVycm9yKCJUaGUgJ3J1bl9hcycgaW4gdGFyZ2V0ICVzIGZyb20gZmlsZSAlcyBtdXN0IGhhdmUgYW4gIgotICAgICAgICAgICAgICAgICAgICInYWN0aW9uJyBzZWN0aW9uLiIgJQotICAgICAgICAgICAgICAgICAgICh0YXJnZXRfbmFtZSwgYnVpbGRfZmlsZSkpCi0gIGlmIG5vdCBpc2luc3RhbmNlKGFjdGlvbiwgbGlzdCk6Ci0gICAgcmFpc2UgR3lwRXJyb3IoIlRoZSAnYWN0aW9uJyBmb3IgJ3J1bl9hcycgaW4gdGFyZ2V0ICVzIGZyb20gZmlsZSAlcyAiCi0gICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSBsaXN0LiIgJQotICAgICAgICAgICAgICAgICAgICh0YXJnZXRfbmFtZSwgYnVpbGRfZmlsZSkpCi0gIHdvcmtpbmdfZGlyZWN0b3J5ID0gcnVuX2FzLmdldCgnd29ya2luZ19kaXJlY3RvcnknKQotICBpZiB3b3JraW5nX2RpcmVjdG9yeSBhbmQgbm90IGlzaW5zdGFuY2Uod29ya2luZ19kaXJlY3RvcnksIHN0cik6Ci0gICAgcmFpc2UgR3lwRXJyb3IoIlRoZSAnd29ya2luZ19kaXJlY3RvcnknIGZvciAncnVuX2FzJyBpbiB0YXJnZXQgJXMgIgotICAgICAgICAgICAgICAgICAgICJpbiBmaWxlICVzIHNob3VsZCBiZSBhIHN0cmluZy4iICUKLSAgICAgICAgICAgICAgICAgICAodGFyZ2V0X25hbWUsIGJ1aWxkX2ZpbGUpKQotICBlbnZpcm9ubWVudCA9IHJ1bl9hcy5nZXQoJ2Vudmlyb25tZW50JykKLSAgaWYgZW52aXJvbm1lbnQgYW5kIG5vdCBpc2luc3RhbmNlKGVudmlyb25tZW50LCBkaWN0KToKLSAgICByYWlzZSBHeXBFcnJvcigiVGhlICdlbnZpcm9ubWVudCcgZm9yICdydW5fYXMnIGluIHRhcmdldCAlcyAiCi0gICAgICAgICAgICAgICAgICAgImluIGZpbGUgJXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iICUKLSAgICAgICAgICAgICAgICAgICAodGFyZ2V0X25hbWUsIGJ1aWxkX2ZpbGUpKQotCi0KLWRlZiBWYWxpZGF0ZUFjdGlvbnNJblRhcmdldCh0YXJnZXQsIHRhcmdldF9kaWN0LCBidWlsZF9maWxlKToKLSAgJycnVmFsaWRhdGVzIHRoZSBpbnB1dHMgdG8gdGhlIGFjdGlvbnMgaW4gYSB0YXJnZXQuJycnCi0gIHRhcmdldF9uYW1lID0gdGFyZ2V0X2RpY3QuZ2V0KCd0YXJnZXRfbmFtZScpCi0gIGFjdGlvbnMgPSB0YXJnZXRfZGljdC5nZXQoJ2FjdGlvbnMnLCBbXSkKLSAgZm9yIGFjdGlvbiBpbiBhY3Rpb25zOgotICAgIGFjdGlvbl9uYW1lID0gYWN0aW9uLmdldCgnYWN0aW9uX25hbWUnKQotICAgIGlmIG5vdCBhY3Rpb25fbmFtZToKLSAgICAgIHJhaXNlIEd5cEVycm9yKCJBbm9ueW1vdXMgYWN0aW9uIGluIHRhcmdldCAlcy4gICIKLSAgICAgICAgICAgICAgICAgICAgICJBbiBhY3Rpb24gbXVzdCBoYXZlIGFuICdhY3Rpb25fbmFtZScgZmllbGQuIiAlCi0gICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSkKLSAgICBpbnB1dHMgPSBhY3Rpb24uZ2V0KCdpbnB1dHMnLCBOb25lKQotICAgIGlmIGlucHV0cyBpcyBOb25lOgotICAgICAgcmFpc2UgR3lwRXJyb3IoJ0FjdGlvbiBpbiB0YXJnZXQgJXMgaGFzIG5vIGlucHV0cy4nICUgdGFyZ2V0X25hbWUpCi0gICAgYWN0aW9uX2NvbW1hbmQgPSBhY3Rpb24uZ2V0KCdhY3Rpb24nKQotICAgIGlmIGFjdGlvbl9jb21tYW5kIGFuZCBub3QgYWN0aW9uX2NvbW1hbmRbMF06Ci0gICAgICByYWlzZSBHeXBFcnJvcigiRW1wdHkgYWN0aW9uIGFzIGNvbW1hbmQgaW4gdGFyZ2V0ICVzLiIgJSB0YXJnZXRfbmFtZSkKLQotCi1kZWYgVHVybkludEludG9TdHJJbkRpY3QodGhlX2RpY3QpOgotICAiIiJHaXZlbiBkaWN0IHRoZV9kaWN0LCByZWN1cnNpdmVseSBjb252ZXJ0cyBhbGwgaW50ZWdlcnMgaW50byBzdHJpbmdzLgotICAiIiIKLSAgIyBVc2UgaXRlbXMgaW5zdGVhZCBvZiBpdGVyaXRlbXMgYmVjYXVzZSB0aGVyZSdzIG5vIG5lZWQgdG8gdHJ5IHRvIGxvb2sgYXQKLSAgIyByZWluc2VydGVkIGtleXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgdmFsdWVzLgotICBmb3IgaywgdiBpbiB0aGVfZGljdC5pdGVtcygpOgotICAgIGlmIGlzaW5zdGFuY2UodiwgaW50KToKLSAgICAgIHYgPSBzdHIodikKLSAgICAgIHRoZV9kaWN0W2tdID0gdgotICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBkaWN0KToKLSAgICAgIFR1cm5JbnRJbnRvU3RySW5EaWN0KHYpCi0gICAgZWxpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgotICAgICAgVHVybkludEludG9TdHJJbkxpc3QodikKLQotICAgIGlmIGlzaW5zdGFuY2UoaywgaW50KToKLSAgICAgIHRoZV9kaWN0W3N0cihrKV0gPSB2Ci0gICAgICBkZWwgdGhlX2RpY3Rba10KLQotCi1kZWYgVHVybkludEludG9TdHJJbkxpc3QodGhlX2xpc3QpOgotICAiIiJHaXZlbiBsaXN0IHRoZV9saXN0LCByZWN1cnNpdmVseSBjb252ZXJ0cyBhbGwgaW50ZWdlcnMgaW50byBzdHJpbmdzLgotICAiIiIKLSAgZm9yIGluZGV4IGluIHhyYW5nZSgwLCBsZW4odGhlX2xpc3QpKToKLSAgICBpdGVtID0gdGhlX2xpc3RbaW5kZXhdCi0gICAgaWYgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgotICAgICAgdGhlX2xpc3RbaW5kZXhdID0gc3RyKGl0ZW0pCi0gICAgZWxpZiBpc2luc3RhbmNlKGl0ZW0sIGRpY3QpOgotICAgICAgVHVybkludEludG9TdHJJbkRpY3QoaXRlbSkKLSAgICBlbGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAgICBUdXJuSW50SW50b1N0ckluTGlzdChpdGVtKQotCi0KLWRlZiBWZXJpZnlOb0NvbGxpZGluZ1RhcmdldHModGFyZ2V0cyk6Ci0gICIiIlZlcmlmeSB0aGF0IG5vIHR3byB0YXJnZXRzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBzaGFyZSB0aGUgc2FtZSBuYW1lLgotCi0gIEFyZ3VtZW50czoKLSAgICB0YXJnZXRzOiBBIGxpc3Qgb2YgdGFyZ2V0cyBpbiB0aGUgZm9ybSAncGF0aC90by9maWxlLmd5cDp0YXJnZXRfbmFtZScuCi0gICIiIgotICAjIEtlZXAgYSBkaWN0IGdvaW5nIGZyb20gJ3N1YmRpcmVjdG9yeTp0YXJnZXRfbmFtZScgdG8gJ2Zvby5neXAnLgotICB1c2VkID0ge30KLSAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgotICAgICMgU2VwYXJhdGUgb3V0ICdwYXRoL3RvL2ZpbGUuZ3lwLCAndGFyZ2V0X25hbWUnIGZyb20KLSAgICAjICdwYXRoL3RvL2ZpbGUuZ3lwOnRhcmdldF9uYW1lJy4KLSAgICBwYXRoLCBuYW1lID0gdGFyZ2V0LnJzcGxpdCgnOicsIDEpCi0gICAgIyBTZXBhcmF0ZSBvdXQgJ3BhdGgvdG8nLCAnZmlsZS5neXAnIGZyb20gJ3BhdGgvdG8vZmlsZS5neXAnLgotICAgIHN1YmRpciwgZ3lwID0gb3MucGF0aC5zcGxpdChwYXRoKQotICAgICMgVXNlICcuJyBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICcnLCBzbyB0aGF0IHRoZSBlcnJvciBtZXNzYWdlcyBtYWtlCi0gICAgIyBtb3JlIHNlbnNlLgotICAgIGlmIG5vdCBzdWJkaXI6Ci0gICAgICBzdWJkaXIgPSAnLicKLSAgICAjIFByZXBhcmUgYSBrZXkgbGlrZSAncGF0aC90bzp0YXJnZXRfbmFtZScuCi0gICAga2V5ID0gc3ViZGlyICsgJzonICsgbmFtZQotICAgIGlmIGtleSBpbiB1c2VkOgotICAgICAgIyBDb21wbGFpbiBpZiB0aGlzIHRhcmdldCBpcyBhbHJlYWR5IHVzZWQuCi0gICAgICByYWlzZSBHeXBFcnJvcignRHVwbGljYXRlIHRhcmdldCBuYW1lICIlcyIgaW4gZGlyZWN0b3J5ICIlcyIgdXNlZCBib3RoICcKLSAgICAgICAgICAgICAgICAgICAgICdpbiAiJXMiIGFuZCAiJXMiLicgJSAobmFtZSwgc3ViZGlyLCBneXAsIHVzZWRba2V5XSkpCi0gICAgdXNlZFtrZXldID0gZ3lwCi0KLQotZGVmIExvYWQoYnVpbGRfZmlsZXMsIHZhcmlhYmxlcywgaW5jbHVkZXMsIGRlcHRoLCBnZW5lcmF0b3JfaW5wdXRfaW5mbywgY2hlY2ssCi0gICAgICAgICBjaXJjdWxhcl9jaGVjaywgcGFyYWxsZWwpOgotICBnbG9iYWwgZ2VuZXJhdG9yX2ZpbGVsaXN0X3BhdGhzCi0gIGdlbmVyYXRvcl9maWxlbGlzdF9wYXRocyA9IGdlbmVyYXRvcl9pbnB1dF9pbmZvWydnZW5lcmF0b3JfZmlsZWxpc3RfcGF0aHMnXQotCi0gICMgU2V0IHVwIHBhdGhfc2VjdGlvbnMgYW5kIG5vbl9jb25maWd1cmF0aW9uX2tleXMgd2l0aCB0aGUgZGVmYXVsdCBkYXRhIHBsdXMKLSAgIyB0aGUgZ2VuZXJhdG9yLXNwZWNpZmMgZGF0YS4KLSAgZ2xvYmFsIHBhdGhfc2VjdGlvbnMKLSAgcGF0aF9zZWN0aW9ucyA9IGJhc2VfcGF0aF9zZWN0aW9uc1s6XQotICBwYXRoX3NlY3Rpb25zLmV4dGVuZChnZW5lcmF0b3JfaW5wdXRfaW5mb1sncGF0aF9zZWN0aW9ucyddKQotCi0gIGdsb2JhbCBub25fY29uZmlndXJhdGlvbl9rZXlzCi0gIG5vbl9jb25maWd1cmF0aW9uX2tleXMgPSBiYXNlX25vbl9jb25maWd1cmF0aW9uX2tleXNbOl0KLSAgbm9uX2NvbmZpZ3VyYXRpb25fa2V5cy5leHRlbmQoZ2VuZXJhdG9yX2lucHV0X2luZm9bJ25vbl9jb25maWd1cmF0aW9uX2tleXMnXSkKLQotICAjIFRPRE8obWFyaykgaGFuZGxlIHZhcmlhbnRzIGlmIHRoZSBnZW5lcmF0b3IgZG9lc24ndCB3YW50IHRoZW0gZGlyZWN0bHkuCi0gIGdlbmVyYXRvcl9oYW5kbGVzX3ZhcmlhbnRzID0gXAotICAgICAgZ2VuZXJhdG9yX2lucHV0X2luZm9bJ2dlbmVyYXRvcl9oYW5kbGVzX3ZhcmlhbnRzJ10KLQotICBnbG9iYWwgYWJzb2x1dGVfYnVpbGRfZmlsZV9wYXRocwotICBhYnNvbHV0ZV9idWlsZF9maWxlX3BhdGhzID0gXAotICAgICAgZ2VuZXJhdG9yX2lucHV0X2luZm9bJ2dlbmVyYXRvcl93YW50c19hYnNvbHV0ZV9idWlsZF9maWxlX3BhdGhzJ10KLQotICBnbG9iYWwgbXVsdGlwbGVfdG9vbHNldHMKLSAgbXVsdGlwbGVfdG9vbHNldHMgPSBnZW5lcmF0b3JfaW5wdXRfaW5mb1sKLSAgICAgICdnZW5lcmF0b3Jfc3VwcG9ydHNfbXVsdGlwbGVfdG9vbHNldHMnXQotCi0gICMgQSBnZW5lcmF0b3IgY2FuIGhhdmUgb3RoZXIgbGlzdHMgKGluIGFkZGl0aW9uIHRvIHNvdXJjZXMpIGJlIHByb2Nlc3NlZAotICAjIGZvciBydWxlcy4KLSAgZXh0cmFfc291cmNlc19mb3JfcnVsZXMgPSBnZW5lcmF0b3JfaW5wdXRfaW5mb1snZXh0cmFfc291cmNlc19mb3JfcnVsZXMnXQotCi0gICMgTG9hZCBidWlsZCBmaWxlcy4gIFRoaXMgbG9hZHMgZXZlcnkgdGFyZ2V0LWNvbnRhaW5pbmcgYnVpbGQgZmlsZSBpbnRvCi0gICMgdGhlIHxkYXRhfCBkaWN0aW9uYXJ5IHN1Y2ggdGhhdCB0aGUga2V5cyB0byB8ZGF0YXwgYXJlIGJ1aWxkIGZpbGUgbmFtZXMsCi0gICMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBlbnRpcmUgYnVpbGQgZmlsZSBjb250ZW50cyBhZnRlciAiZWFybHkiIG9yICJwcmUiCi0gICMgcHJvY2Vzc2luZyBoYXMgYmVlbiBkb25lIGFuZCBpbmNsdWRlcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCi0gICMgTk9URTogZGF0YSBjb250YWlucyBib3RoICJ0YXJnZXQiIGZpbGVzICguZ3lwKSBhbmQgImluY2x1ZGVzIiAoLmd5cGkpLCBhcwotICAjIHdlbGwgYXMgbWV0YS1kYXRhIChlLmcuICdpbmNsdWRlZF9maWxlcycga2V5KS4gJ3RhcmdldF9idWlsZF9maWxlcycga2VlcHMKLSAgIyB0cmFjayBvZiB0aGUga2V5cyBjb3JyZXNwb25kaW5nIHRvICJ0YXJnZXQiIGZpbGVzLgotICBkYXRhID0geyd0YXJnZXRfYnVpbGRfZmlsZXMnOiBzZXQoKX0KLSAgYXV4X2RhdGEgPSB7fQotICBmb3IgYnVpbGRfZmlsZSBpbiBidWlsZF9maWxlczoKLSAgICAjIE5vcm1hbGl6ZSBwYXRocyBldmVyeXdoZXJlLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBwYXRocyB3aWxsIGJlCi0gICAgIyB1c2VkIGFzIGtleXMgdG8gdGhlIGRhdGEgZGljdCBhbmQgZm9yIHJlZmVyZW5jZXMgYmV0d2VlbiBpbnB1dCBmaWxlcy4KLSAgICBidWlsZF9maWxlID0gb3MucGF0aC5ub3JtcGF0aChidWlsZF9maWxlKQotICAgIHRyeToKLSAgICAgIGlmIHBhcmFsbGVsOgotICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICdVc2luZyBwYXJhbGxlbCBwcm9jZXNzaW5nIChleHBlcmltZW50YWwpLicKLSAgICAgICAgTG9hZFRhcmdldEJ1aWxkRmlsZVBhcmFsbGVsKGJ1aWxkX2ZpbGUsIGRhdGEsIGF1eF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLCBpbmNsdWRlcywgZGVwdGgsIGNoZWNrKQotICAgICAgZWxzZToKLSAgICAgICAgTG9hZFRhcmdldEJ1aWxkRmlsZShidWlsZF9maWxlLCBkYXRhLCBhdXhfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMsIGluY2x1ZGVzLCBkZXB0aCwgY2hlY2ssIFRydWUpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgIGd5cC5jb21tb24uRXhjZXB0aW9uQXBwZW5kKGUsICd3aGlsZSB0cnlpbmcgdG8gbG9hZCAlcycgJSBidWlsZF9maWxlKQotICAgICAgcmFpc2UKLQotICAjIEJ1aWxkIGEgZGljdCB0byBhY2Nlc3MgZWFjaCB0YXJnZXQncyBzdWJkaWN0IGJ5IHF1YWxpZmllZCBuYW1lLgotICB0YXJnZXRzID0gQnVpbGRUYXJnZXRzRGljdChkYXRhKQotCi0gICMgRnVsbHkgcXVhbGlmeSBhbGwgZGVwZW5kZW5jeSBsaW5rcy4KLSAgUXVhbGlmeURlcGVuZGVuY2llcyh0YXJnZXRzKQotCi0gICMgRXhwYW5kIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYXMgYnVpbGRfZmlsZToqLgotICBFeHBhbmRXaWxkY2FyZERlcGVuZGVuY2llcyh0YXJnZXRzLCBkYXRhKQotCi0gICMgQXBwbHkgZXhjbHVkZSAoISkgYW5kIHJlZ2V4ICgvKSBsaXN0IGZpbHRlcnMgb25seSBmb3IgZGVwZW5kZW5jeV9zZWN0aW9ucy4KLSAgZm9yIHRhcmdldF9uYW1lLCB0YXJnZXRfZGljdCBpbiB0YXJnZXRzLml0ZXJpdGVtcygpOgotICAgIHRtcF9kaWN0ID0ge30KLSAgICBmb3Iga2V5X2Jhc2UgaW4gZGVwZW5kZW5jeV9zZWN0aW9uczoKLSAgICAgIGZvciBvcCBpbiAoJycsICchJywgJy8nKToKLSAgICAgICAga2V5ID0ga2V5X2Jhc2UgKyBvcAotICAgICAgICBpZiBrZXkgaW4gdGFyZ2V0X2RpY3Q6Ci0gICAgICAgICAgdG1wX2RpY3Rba2V5XSA9IHRhcmdldF9kaWN0W2tleV0KLSAgICAgICAgICBkZWwgdGFyZ2V0X2RpY3Rba2V5XQotICAgIFByb2Nlc3NMaXN0RmlsdGVyc0luRGljdCh0YXJnZXRfbmFtZSwgdG1wX2RpY3QpCi0gICAgIyBXcml0ZSB0aGUgcmVzdWx0cyBiYWNrIHRvIHx0YXJnZXRfZGljdHwuCi0gICAgZm9yIGtleSBpbiB0bXBfZGljdDoKLSAgICAgIHRhcmdldF9kaWN0W2tleV0gPSB0bXBfZGljdFtrZXldCi0KLSAgIyBNYWtlIHN1cmUgZXZlcnkgZGVwZW5kZW5jeSBhcHBlYXJzIGF0IG1vc3Qgb25jZS4KLSAgUmVtb3ZlRHVwbGljYXRlRGVwZW5kZW5jaWVzKHRhcmdldHMpCi0KLSAgaWYgY2lyY3VsYXJfY2hlY2s6Ci0gICAgIyBNYWtlIHN1cmUgdGhhdCBhbnkgdGFyZ2V0cyBpbiBhLmd5cCBkb24ndCBjb250YWluIGRlcGVuZGVuY2llcyBpbiBvdGhlcgotICAgICMgLmd5cCBmaWxlcyB0aGF0IGZ1cnRoZXIgZGVwZW5kIG9uIGEuZ3lwLgotICAgIFZlcmlmeU5vR1lQRmlsZUNpcmN1bGFyRGVwZW5kZW5jaWVzKHRhcmdldHMpCi0KLSAgW2RlcGVuZGVuY3lfbm9kZXMsIGZsYXRfbGlzdF0gPSBCdWlsZERlcGVuZGVuY3lMaXN0KHRhcmdldHMpCi0KLSAgIyBDaGVjayB0aGF0IG5vIHR3byB0YXJnZXRzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBoYXZlIHRoZSBzYW1lIG5hbWUuCi0gIFZlcmlmeU5vQ29sbGlkaW5nVGFyZ2V0cyhmbGF0X2xpc3QpCi0KLSAgIyBub3cgdGhhdCB3ZSBoYXZlIHRoZSBlbnRpcmUgZGVwZW5kZW5jeSBncmFwaCB3ZSBjYW4gcHJpbnQgaXQgaWYgYXNrZWQKLSAgIyB3ZSBwcmludCBpdCB0byBzdGRvdXQgaW4gY29tcGxldGVseSBkcnkgcHl0aG9uIGRpY3Rpb25hcnkgc3ludGF4Ci0gICMgZWFjaCBrZXkgaW4gdGhlIGRpY3Rpb25hcnkgaXMgYSB0YXJnZXQsIHRoZSB2YWx1ZSBpcyBhIGxpc3Qgb2YgZGlyZWN0Ci0gICMgZGVwZW5kZW5jaWVzIHRoYXQgdGFyZ2V0IGhhcwotICBpZiBneXAuREVCVUdfREVQRU5ERU5DSUVTIGluIGd5cC5kZWJ1Zy5rZXlzKCk6Ci0gICAgZGVwZW5kc19kaWN0ID0ge30KLSAgICBkZWYgY2xlYW5fbm9kZV9uYW1lKG5vZGVfbmFtZSk6Ci0gICAgICAjIHJlbW92ZSB0aGUgJyN0YXJnZXQnIHN1ZmZpeCBmcm9tIGFsbCBuYW1lcwotICAgICAgIyBhbmQgYWRkIHRoZSBwcm9kdWN0X25hbWUKLSAgICAgIGNvbG9uID0gbm9kZV9uYW1lLmluZGV4KCc6JykKLSAgICAgIHRhcmdldF9uYW1lID0gbm9kZV9uYW1lW2NvbG9uKzE6LWxlbignI3RhcmdldCcpXQotICAgICAgZ3lwX3BhdGggPSBub2RlX25hbWVbOmNvbG9uXQotICAgICAgcHJvZHVjdF9uYW1lID0gdGFyZ2V0c1tub2RlX25hbWVdLmdldCgncHJvZHVjdF9uYW1lJywgdGFyZ2V0X25hbWUpCi0gICAgICByZXR1cm4gZ3lwX3BhdGggKyAnOicgKyB0YXJnZXRfbmFtZSArICc6JyArIHByb2R1Y3RfbmFtZQotICAgIGZvciBub2RlX25hbWUsIG5vZGUgaW4gZGVwZW5kZW5jeV9ub2Rlcy5pdGVyaXRlbXMoKToKLSAgICAgIGNsZWFuZWRfbGlzdCA9IFtjbGVhbl9ub2RlX25hbWUoaSkgZm9yIGkgaW4gbm9kZS5EaXJlY3REZXBlbmRlbmNpZXMoKV0KLSAgICAgIGRlcGVuZHNfZGljdFtjbGVhbl9ub2RlX25hbWUobm9kZV9uYW1lKV0gPSBjbGVhbmVkX2xpc3QKLSAgICBwcmludCAnZGVwZW5kc19kaWN0ID0gJXMnICUgZGVwZW5kc19kaWN0Ci0KLSAgIyBIYW5kbGUgZGVwZW5kZW50IHNldHRpbmdzIG9mIHZhcmlvdXMgdHlwZXMuCi0gIGZvciBzZXR0aW5nc190eXBlIGluIFsnYWxsX2RlcGVuZGVudF9zZXR0aW5ncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyddOgotICAgIERvRGVwZW5kZW50U2V0dGluZ3Moc2V0dGluZ3NfdHlwZSwgZmxhdF9saXN0LCB0YXJnZXRzLCBkZXBlbmRlbmN5X25vZGVzKQotCi0gICAgIyBUYWtlIG91dCB0aGUgZGVwZW5kZW50IHNldHRpbmdzIG5vdyB0aGF0IHRoZXkndmUgYmVlbiBwdWJsaXNoZWQgdG8gYWxsCi0gICAgIyBvZiB0aGUgdGFyZ2V0cyB0aGF0IHJlcXVpcmUgdGhlbS4KLSAgICBmb3IgdGFyZ2V0IGluIGZsYXRfbGlzdDoKLSAgICAgIGlmIHNldHRpbmdzX3R5cGUgaW4gdGFyZ2V0c1t0YXJnZXRdOgotICAgICAgICBkZWwgdGFyZ2V0c1t0YXJnZXRdW3NldHRpbmdzX3R5cGVdCi0KLSAgIyBNYWtlIHN1cmUgc3RhdGljIGxpYnJhcmllcyBkb24ndCBkZWNsYXJlIGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdGF0aWMKLSAgIyBsaWJyYXJpZXMsIGJ1dCB0aGF0IGxpbmthYmxlcyBkZXBlbmQgb24gYWxsIHVubGlua2VkIHN0YXRpYyBsaWJyYXJpZXMKLSAgIyB0aGF0IHRoZXkgbmVlZCBzbyB0aGF0IHRoZWlyIGxpbmsgc3RlcHMgd2lsbCBiZSBjb3JyZWN0LgotICBnaWkgPSBnZW5lcmF0b3JfaW5wdXRfaW5mbwotICBpZiBnaWlbJ2dlbmVyYXRvcl93YW50c19zdGF0aWNfbGlicmFyeV9kZXBlbmRlbmNpZXNfYWRqdXN0ZWQnXToKLSAgICBBZGp1c3RTdGF0aWNMaWJyYXJ5RGVwZW5kZW5jaWVzKGZsYXRfbGlzdCwgdGFyZ2V0cywgZGVwZW5kZW5jeV9ub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpaVsnZ2VuZXJhdG9yX3dhbnRzX3NvcnRlZF9kZXBlbmRlbmNpZXMnXSkKLQotICAjIEFwcGx5ICJwb3N0Ii8ibGF0ZSIvInRhcmdldCIgdmFyaWFibGUgZXhwYW5zaW9ucyBhbmQgY29uZGl0aW9uIGV2YWx1YXRpb25zLgotICBmb3IgdGFyZ2V0IGluIGZsYXRfbGlzdDoKLSAgICB0YXJnZXRfZGljdCA9IHRhcmdldHNbdGFyZ2V0XQotICAgIGJ1aWxkX2ZpbGUgPSBneXAuY29tbW9uLkJ1aWxkRmlsZSh0YXJnZXQpCi0gICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkRpY3QoCi0gICAgICAgIHRhcmdldF9kaWN0LCBQSEFTRV9MQVRFLCB2YXJpYWJsZXMsIGJ1aWxkX2ZpbGUpCi0KLSAgIyBNb3ZlIGV2ZXJ5dGhpbmcgdGhhdCBjYW4gZ28gaW50byBhICJjb25maWd1cmF0aW9ucyIgc2VjdGlvbiBpbnRvIG9uZS4KLSAgZm9yIHRhcmdldCBpbiBmbGF0X2xpc3Q6Ci0gICAgdGFyZ2V0X2RpY3QgPSB0YXJnZXRzW3RhcmdldF0KLSAgICBTZXRVcENvbmZpZ3VyYXRpb25zKHRhcmdldCwgdGFyZ2V0X2RpY3QpCi0KLSAgIyBBcHBseSBleGNsdWRlICghKSBhbmQgcmVnZXggKC8pIGxpc3QgZmlsdGVycy4KLSAgZm9yIHRhcmdldCBpbiBmbGF0X2xpc3Q6Ci0gICAgdGFyZ2V0X2RpY3QgPSB0YXJnZXRzW3RhcmdldF0KLSAgICBQcm9jZXNzTGlzdEZpbHRlcnNJbkRpY3QodGFyZ2V0LCB0YXJnZXRfZGljdCkKLQotICAjIEFwcGx5ICJsYXRlbGF0ZSIgdmFyaWFibGUgZXhwYW5zaW9ucyBhbmQgY29uZGl0aW9uIGV2YWx1YXRpb25zLgotICBmb3IgdGFyZ2V0IGluIGZsYXRfbGlzdDoKLSAgICB0YXJnZXRfZGljdCA9IHRhcmdldHNbdGFyZ2V0XQotICAgIGJ1aWxkX2ZpbGUgPSBneXAuY29tbW9uLkJ1aWxkRmlsZSh0YXJnZXQpCi0gICAgUHJvY2Vzc1ZhcmlhYmxlc0FuZENvbmRpdGlvbnNJbkRpY3QoCi0gICAgICAgIHRhcmdldF9kaWN0LCBQSEFTRV9MQVRFTEFURSwgdmFyaWFibGVzLCBidWlsZF9maWxlKQotCi0gICMgTWFrZSBzdXJlIHRoYXQgdGhlIHJ1bGVzIG1ha2Ugc2Vuc2UsIGFuZCBidWlsZCB1cCBydWxlX3NvdXJjZXMgbGlzdHMgYXMKLSAgIyBuZWVkZWQuICBOb3QgYWxsIGdlbmVyYXRvcnMgd2lsbCBuZWVkIHRvIHVzZSB0aGUgcnVsZV9zb3VyY2VzIGxpc3RzLCBidXQKLSAgIyBzb21lIG1heSwgYW5kIGl0IHNlZW1zIGJlc3QgdG8gYnVpbGQgdGhlIGxpc3QgaW4gYSBjb21tb24gc3BvdC4KLSAgIyBBbHNvIHZhbGlkYXRlIGFjdGlvbnMgYW5kIHJ1bl9hcyBlbGVtZW50cyBpbiB0YXJnZXRzLgotICBmb3IgdGFyZ2V0IGluIGZsYXRfbGlzdDoKLSAgICB0YXJnZXRfZGljdCA9IHRhcmdldHNbdGFyZ2V0XQotICAgIGJ1aWxkX2ZpbGUgPSBneXAuY29tbW9uLkJ1aWxkRmlsZSh0YXJnZXQpCi0gICAgVmFsaWRhdGVUYXJnZXRUeXBlKHRhcmdldCwgdGFyZ2V0X2RpY3QpCi0gICAgIyBUT0RPKHRoYWtpcyk6IEdldCB2cHhfc2NhbGUvYXJtL3NjYWxlc3lzdGVtZGVwZW5kZW50LmMgdG8gYmUgcmVuYW1lZCB0bwotICAgICMgICAgICAgICAgICAgICBzY2FsZXN5c3RlbWRlcGVuZGVudF9hcm1fYWRkaXRpb25zLmMgb3Igc2ltaWxhci4KLSAgICBpZiAnYXJtJyBub3QgaW4gdmFyaWFibGVzLmdldCgndGFyZ2V0X2FyY2gnLCAnJyk6Ci0gICAgICBWYWxpZGF0ZVNvdXJjZXNJblRhcmdldCh0YXJnZXQsIHRhcmdldF9kaWN0LCBidWlsZF9maWxlKQotICAgIFZhbGlkYXRlUnVsZXNJblRhcmdldCh0YXJnZXQsIHRhcmdldF9kaWN0LCBleHRyYV9zb3VyY2VzX2Zvcl9ydWxlcykKLSAgICBWYWxpZGF0ZVJ1bkFzSW5UYXJnZXQodGFyZ2V0LCB0YXJnZXRfZGljdCwgYnVpbGRfZmlsZSkKLSAgICBWYWxpZGF0ZUFjdGlvbnNJblRhcmdldCh0YXJnZXQsIHRhcmdldF9kaWN0LCBidWlsZF9maWxlKQotCi0gICMgR2VuZXJhdG9ycyBtaWdodCBub3QgZXhwZWN0IGludHMuICBUdXJuIHRoZW0gaW50byBzdHJzLgotICBUdXJuSW50SW50b1N0ckluRGljdChkYXRhKQotCi0gICMgVE9ETyhtYXJrKTogUmV0dXJuIHxkYXRhfCBmb3Igbm93IGJlY2F1c2UgdGhlIGdlbmVyYXRvciBuZWVkcyBhIGxpc3Qgb2YKLSAgIyBidWlsZCBmaWxlcyB0aGF0IGNhbWUgaW4uICBJbiB0aGUgZnV0dXJlLCBtYXliZSBpdCBzaG91bGQganVzdCBhY2NlcHQKLSAgIyBhIGxpc3QsIGFuZCBub3QgdGhlIHdob2xlIGRhdGEgZGljdC4KLSAgcmV0dXJuIFtmbGF0X2xpc3QsIHRhcmdldHMsIGRhdGFdCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL21hY190b29sLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC9tYWNfdG9vbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjkyNjc2OS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL21hY190b29sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJVdGlsaXR5IGZ1bmN0aW9ucyB0byBwZXJmb3JtIFhjb2RlLXN0eWxlIGJ1aWxkIHN0ZXBzLgotCi1UaGVzZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIHZpYSBneXAtbWFjLXRvb2wgd2hlbiB1c2luZyB0aGUgTWFrZWZpbGUgZ2VuZXJhdG9yLgotIiIiCi0KLWltcG9ydCBmY250bAotaW1wb3J0IG9zCi1pbXBvcnQgcGxpc3RsaWIKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN0cmluZwotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgZXhlY3V0b3IgPSBNYWNUb29sKCkKLSAgZXhpdF9jb2RlID0gZXhlY3V0b3IuRGlzcGF0Y2goYXJncykKLSAgaWYgZXhpdF9jb2RlIGlzIG5vdCBOb25lOgotICAgIHN5cy5leGl0KGV4aXRfY29kZSkKLQotCi1jbGFzcyBNYWNUb29sKG9iamVjdCk6Ci0gICIiIlRoaXMgY2xhc3MgcGVyZm9ybXMgYWxsIHRoZSBNYWMgdG9vbGluZyBzdGVwcy4gVGhlIG1ldGhvZHMgY2FuIGVpdGhlciBiZQotICBleGVjdXRlZCBkaXJlY3RseSwgb3IgZGlzcGF0Y2hlZCBmcm9tIGFuIGFyZ3VtZW50IGxpc3QuIiIiCi0KLSAgZGVmIERpc3BhdGNoKHNlbGYsIGFyZ3MpOgotICAgICIiIkRpc3BhdGNoZXMgYSBzdHJpbmcgY29tbWFuZCB0byBhIG1ldGhvZC4iIiIKLSAgICBpZiBsZW4oYXJncykgPCAxOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpCi0KLSAgICBtZXRob2QgPSAiRXhlYyVzIiAlIHNlbGYuX0NvbW1hbmRpZnlOYW1lKGFyZ3NbMF0pCi0gICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbWV0aG9kKSgqYXJnc1sxOl0pCi0KLSAgZGVmIF9Db21tYW5kaWZ5TmFtZShzZWxmLCBuYW1lX3N0cmluZyk6Ci0gICAgIiIiVHJhbnNmb3JtcyBhIHRvb2wgbmFtZSBsaWtlIGNvcHktaW5mby1wbGlzdCB0byBDb3B5SW5mb1BsaXN0IiIiCi0gICAgcmV0dXJuIG5hbWVfc3RyaW5nLnRpdGxlKCkucmVwbGFjZSgnLScsICcnKQotCi0gIGRlZiBFeGVjQ29weUJ1bmRsZVJlc291cmNlKHNlbGYsIHNvdXJjZSwgZGVzdCk6Ci0gICAgIiIiQ29waWVzIGEgcmVzb3VyY2UgZmlsZSB0byB0aGUgYnVuZGxlL1Jlc291cmNlcyBkaXJlY3RvcnksIHBlcmZvcm1pbmcgYW55Ci0gICAgbmVjZXNzYXJ5IGNvbXBpbGF0aW9uIG9uIGVhY2ggcmVzb3VyY2UuIiIiCi0gICAgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChzb3VyY2UpWzFdLmxvd2VyKCkKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHNvdXJjZSk6Ci0gICAgICAjIENvcHkgdHJlZS4KLSAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3QpOgotICAgICAgICBzaHV0aWwucm10cmVlKGRlc3QpCi0gICAgICBzaHV0aWwuY29weXRyZWUoc291cmNlLCBkZXN0KQotICAgIGVsaWYgZXh0ZW5zaW9uID09ICcueGliJzoKLSAgICAgIHJldHVybiBzZWxmLl9Db3B5WElCRmlsZShzb3VyY2UsIGRlc3QpCi0gICAgZWxpZiBleHRlbnNpb24gPT0gJy5zdHJpbmdzJzoKLSAgICAgIHNlbGYuX0NvcHlTdHJpbmdzRmlsZShzb3VyY2UsIGRlc3QpCi0gICAgZWxzZToKLSAgICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UsIGRlc3QpCi0KLSAgZGVmIF9Db3B5WElCRmlsZShzZWxmLCBzb3VyY2UsIGRlc3QpOgotICAgICIiIkNvbXBpbGVzIGEgWElCIGZpbGUgd2l0aCBpYnRvb2wgaW50byBhIGJpbmFyeSBwbGlzdCBpbiB0aGUgYnVuZGxlLiIiIgotICAgIHRvb2xzX2RpciA9IG9zLmVudmlyb24uZ2V0KCdERVZFTE9QRVJfQklOX0RJUicsICcvdXNyL2JpbicpCi0gICAgYXJncyA9IFtvcy5wYXRoLmpvaW4odG9vbHNfZGlyLCAnaWJ0b29sJyksICctLWVycm9ycycsICctLXdhcm5pbmdzJywKLSAgICAgICAgJy0tbm90aWNlcycsICctLW91dHB1dC1mb3JtYXQnLCAnaHVtYW4tcmVhZGFibGUtdGV4dCcsICctLWNvbXBpbGUnLAotICAgICAgICBkZXN0LCBzb3VyY2VdCi0gICAgaWJ0b29sX3NlY3Rpb25fcmUgPSByZS5jb21waWxlKHInL1wqLipcKi8nKQotICAgIGlidG9vbF9yZSA9IHJlLmNvbXBpbGUocicuKm5vdGU6LippcyBjbGlwcGluZyBpdHMgY29udGVudCcpCi0gICAgaWJ0b29sb3V0ID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgIGN1cnJlbnRfc2VjdGlvbl9oZWFkZXIgPSBOb25lCi0gICAgZm9yIGxpbmUgaW4gaWJ0b29sb3V0LnN0ZG91dDoKLSAgICAgIGlmIGlidG9vbF9zZWN0aW9uX3JlLm1hdGNoKGxpbmUpOgotICAgICAgICBjdXJyZW50X3NlY3Rpb25faGVhZGVyID0gbGluZQotICAgICAgZWxpZiBub3QgaWJ0b29sX3JlLm1hdGNoKGxpbmUpOgotICAgICAgICBpZiBjdXJyZW50X3NlY3Rpb25faGVhZGVyOgotICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoY3VycmVudF9zZWN0aW9uX2hlYWRlcikKLSAgICAgICAgICBjdXJyZW50X3NlY3Rpb25faGVhZGVyID0gTm9uZQotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGxpbmUpCi0gICAgcmV0dXJuIGlidG9vbG91dC5yZXR1cm5jb2RlCi0KLSAgZGVmIF9Db3B5U3RyaW5nc0ZpbGUoc2VsZiwgc291cmNlLCBkZXN0KToKLSAgICAiIiJDb3BpZXMgYSAuc3RyaW5ncyBmaWxlIHVzaW5nIGljb252IHRvIHJlY29udmVydCB0aGUgaW5wdXQgaW50byBVVEYtMTYuIiIiCi0gICAgaW5wdXRfY29kZSA9IHNlbGYuX0RldGVjdElucHV0RW5jb2Rpbmcoc291cmNlKSBvciAiVVRGLTgiCi0gICAgZnAgPSBvcGVuKGRlc3QsICd3JykKLSAgICBhcmdzID0gWycvdXNyL2Jpbi9pY29udicsICctLWZyb20tY29kZScsIGlucHV0X2NvZGUsICctLXRvLWNvZGUnLAotICAgICAgICAnVVRGLTE2Jywgc291cmNlXQotICAgIHN1YnByb2Nlc3MuY2FsbChhcmdzLCBzdGRvdXQ9ZnApCi0gICAgZnAuY2xvc2UoKQotCi0gIGRlZiBfRGV0ZWN0SW5wdXRFbmNvZGluZyhzZWxmLCBmaWxlX25hbWUpOgotICAgICIiIlJlYWRzIHRoZSBmaXJzdCBmZXcgYnl0ZXMgZnJvbSBmaWxlX25hbWUgYW5kIHRyaWVzIHRvIGd1ZXNzIHRoZSB0ZXh0Ci0gICAgZW5jb2RpbmcuIFJldHVybnMgTm9uZSBhcyBhIGd1ZXNzIGlmIGl0IGNhbid0IGRldGVjdCBpdC4iIiIKLSAgICBmcCA9IG9wZW4oZmlsZV9uYW1lLCAncmInKQotICAgIHRyeToKLSAgICAgIGhlYWRlciA9IGZwLnJlYWQoMykKLSAgICBleGNlcHQgZToKLSAgICAgIGZwLmNsb3NlKCkKLSAgICAgIHJldHVybiBOb25lCi0gICAgZnAuY2xvc2UoKQotICAgIGlmIGhlYWRlci5zdGFydHN3aXRoKCJceEZFXHhGRiIpOgotICAgICAgcmV0dXJuICJVVEYtMTZCRSIKLSAgICBlbGlmIGhlYWRlci5zdGFydHN3aXRoKCJceEZGXHhGRSIpOgotICAgICAgcmV0dXJuICJVVEYtMTZMRSIKLSAgICBlbGlmIGhlYWRlci5zdGFydHN3aXRoKCJceEVGXHhCQlx4QkYiKToKLSAgICAgIHJldHVybiAiVVRGLTgiCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEV4ZWNDb3B5SW5mb1BsaXN0KHNlbGYsIHNvdXJjZSwgZGVzdCk6Ci0gICAgIiIiQ29waWVzIHRoZSB8c291cmNlfCBJbmZvLnBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgfGRlc3R8LiIiIgotICAgICMgUmVhZCB0aGUgc291cmNlIEluZm8ucGxpc3QgaW50byBtZW1vcnkuCi0gICAgZmQgPSBvcGVuKHNvdXJjZSwgJ3InKQotICAgIGxpbmVzID0gZmQucmVhZCgpCi0gICAgZmQuY2xvc2UoKQotCi0gICAgIyBHbyB0aHJvdWdoIGFsbCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCByZXBsYWNlIHRoZW0gYXMgdmFyaWFibGVzIGluCi0gICAgIyB0aGUgZmlsZS4KLSAgICBmb3Iga2V5IGluIG9zLmVudmlyb246Ci0gICAgICBpZiBrZXkuc3RhcnRzd2l0aCgnXycpOgotICAgICAgICBjb250aW51ZQotICAgICAgZXZhciA9ICckeyVzfScgJSBrZXkKLSAgICAgIGxpbmVzID0gc3RyaW5nLnJlcGxhY2UobGluZXMsIGV2YXIsIG9zLmVudmlyb25ba2V5XSkKLQotICAgICMgV3JpdGUgb3V0IHRoZSBmaWxlIHdpdGggdmFyaWFibGVzIHJlcGxhY2VkLgotICAgIGZkID0gb3BlbihkZXN0LCAndycpCi0gICAgZmQud3JpdGUobGluZXMpCi0gICAgZmQuY2xvc2UoKQotCi0gICAgIyBOb3cgd3JpdGUgb3V0IFBrZ0luZm8gZmlsZSBub3cgdGhhdCB0aGUgSW5mby5wbGlzdCBmaWxlIGhhcyBiZWVuCi0gICAgIyAiY29tcGlsZWQiLgotICAgIHNlbGYuX1dyaXRlUGtnSW5mbyhkZXN0KQotCi0gIGRlZiBfV3JpdGVQa2dJbmZvKHNlbGYsIGluZm9fcGxpc3QpOgotICAgICIiIlRoaXMgd3JpdGVzIHRoZSBQa2dJbmZvIGZpbGUgZnJvbSB0aGUgZGF0YSBzdG9yZWQgaW4gSW5mby5wbGlzdC4iIiIKLSAgICBwbGlzdCA9IHBsaXN0bGliLnJlYWRQbGlzdChpbmZvX3BsaXN0KQotICAgIGlmIG5vdCBwbGlzdDoKLSAgICAgIHJldHVybgotCi0gICAgIyBPbmx5IGNyZWF0ZSBQa2dJbmZvIGZvciBleGVjdXRhYmxlIHR5cGVzLgotICAgIHBhY2thZ2VfdHlwZSA9IHBsaXN0WydDRkJ1bmRsZVBhY2thZ2VUeXBlJ10KLSAgICBpZiBwYWNrYWdlX3R5cGUgIT0gJ0FQUEwnOgotICAgICAgcmV0dXJuCi0KLSAgICAjIFRoZSBmb3JtYXQgb2YgUGtnSW5mbyBpcyBlaWdodCBjaGFyYWN0ZXJzLCByZXByZXNlbnRpbmcgdGhlIGJ1bmRsZSB0eXBlCi0gICAgIyBhbmQgYnVuZGxlIHNpZ25hdHVyZSwgZWFjaCBmb3VyIGNoYXJhY3RlcnMuIElmIHRoYXQgaXMgbWlzc2luZywgZm91cgotICAgICMgJz8nIGNoYXJhY3RlcnMgYXJlIHVzZWQgaW5zdGVhZC4KLSAgICBzaWduYXR1cmVfY29kZSA9IHBsaXN0LmdldCgnQ0ZCdW5kbGVTaWduYXR1cmUnLCAnPz8/PycpCi0gICAgaWYgbGVuKHNpZ25hdHVyZV9jb2RlKSAhPSA0OiAgIyBXcm9uZyBsZW5ndGggcmVzZXRzIGV2ZXJ5dGhpbmcsIHRvby4KLSAgICAgIHNpZ25hdHVyZV9jb2RlID0gJz8nICogNAotCi0gICAgZGVzdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoaW5mb19wbGlzdCksICdQa2dJbmZvJykKLSAgICBmcCA9IG9wZW4oZGVzdCwgJ3cnKQotICAgIGZwLndyaXRlKCclcyVzJyAlIChwYWNrYWdlX3R5cGUsIHNpZ25hdHVyZV9jb2RlKSkKLSAgICBmcC5jbG9zZSgpCi0KLSAgZGVmIEV4ZWNGbG9jayhzZWxmLCBsb2NrZmlsZSwgKmNtZF9saXN0KToKLSAgICAiIiJFbXVsYXRlcyB0aGUgbW9zdCBiYXNpYyBiZWhhdmlvciBvZiBMaW51eCdzIGZsb2NrKDEpLiIiIgotICAgICMgUmVseSBvbiBleGNlcHRpb24gaGFuZGxpbmcgdG8gcmVwb3J0IGVycm9ycy4KLSAgICBmZCA9IG9zLm9wZW4obG9ja2ZpbGUsIG9zLk9fUkRPTkxZfG9zLk9fTk9DVFRZfG9zLk9fQ1JFQVQsIDBvNjY2KQotICAgIGZjbnRsLmZsb2NrKGZkLCBmY250bC5MT0NLX0VYKQotICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoY21kX2xpc3QpCi0KLSAgZGVmIEV4ZWNGaWx0ZXJMaWJ0b29sKHNlbGYsICpjbWRfbGlzdCk6Ci0gICAgIiIiQ2FsbHMgbGlidG9vbCBhbmQgZmlsdGVycyBvdXQgJ2xpYnRvb2w6IGZpbGU6IGZvby5vIGhhcyBubyBzeW1ib2xzJy4iIiIKLSAgICBsaWJ0b29sX3JlID0gcmUuY29tcGlsZShyJ15saWJ0b29sOiBmaWxlOiAuKiBoYXMgbm8gc3ltYm9scyQnKQotICAgIGxpYnRvb2xvdXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saXN0LCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgIF8sIGVyciA9IGxpYnRvb2xvdXQuY29tbXVuaWNhdGUoKQotICAgIGZvciBsaW5lIGluIGVyci5zcGxpdGxpbmVzKCk6Ci0gICAgICBpZiBub3QgbGlidG9vbF9yZS5tYXRjaChsaW5lKToKLSAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBsaW5lCi0gICAgcmV0dXJuIGxpYnRvb2xvdXQucmV0dXJuY29kZQotCi0gIGRlZiBFeGVjUGFja2FnZUZyYW1ld29yayhzZWxmLCBmcmFtZXdvcmssIHZlcnNpb24pOgotICAgICIiIlRha2VzIGEgcGF0aCB0byBTb21ldGhpbmcuZnJhbWV3b3JrIGFuZCB0aGUgQ3VycmVudCB2ZXJzaW9uIG9mIHRoYXQgYW5kCi0gICAgc2V0cyB1cCBhbGwgdGhlIHN5bWxpbmtzLiIiIgotICAgICMgRmluZCB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGJhc2VkIG9uIHRoZSBwYXJ0IGJlZm9yZSB0aGUgIi5mcmFtZXdvcmsiLgotICAgIGJpbmFyeSA9IG9zLnBhdGguYmFzZW5hbWUoZnJhbWV3b3JrKS5zcGxpdCgnLicpWzBdCi0KLSAgICBDVVJSRU5UID0gJ0N1cnJlbnQnCi0gICAgUkVTT1VSQ0VTID0gJ1Jlc291cmNlcycKLSAgICBWRVJTSU9OUyA9ICdWZXJzaW9ucycKLQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZnJhbWV3b3JrLCBWRVJTSU9OUywgdmVyc2lvbiwgYmluYXJ5KSk6Ci0gICAgICAjIEJpbmFyeS1sZXNzIGZyYW1ld29ya3MgZG9uJ3Qgc2VlbSB0byBjb250YWluIHN5bWxpbmtzIChzZWUgZS5nLgotICAgICAgIyBjaHJvbWl1bSdzIG91dC9EZWJ1Zy9vcmcuY2hyb21pdW0uQ2hyb21pdW0ubWFuaWZlc3QvIGJ1bmRsZSkuCi0gICAgICByZXR1cm4KLQotICAgICMgTW92ZSBpbnRvIHRoZSBmcmFtZXdvcmsgZGlyZWN0b3J5IHRvIHNldCB0aGUgc3ltbGlua3MgY29ycmVjdGx5LgotICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgb3MuY2hkaXIoZnJhbWV3b3JrKQotCi0gICAgIyBTZXQgdXAgdGhlIEN1cnJlbnQgdmVyc2lvbi4KLSAgICBzZWxmLl9SZWxpbmsodmVyc2lvbiwgb3MucGF0aC5qb2luKFZFUlNJT05TLCBDVVJSRU5UKSkKLQotICAgICMgU2V0IHVwIHRoZSByb290IHN5bWxpbmtzLgotICAgIHNlbGYuX1JlbGluayhvcy5wYXRoLmpvaW4oVkVSU0lPTlMsIENVUlJFTlQsIGJpbmFyeSksIGJpbmFyeSkKLSAgICBzZWxmLl9SZWxpbmsob3MucGF0aC5qb2luKFZFUlNJT05TLCBDVVJSRU5ULCBSRVNPVVJDRVMpLCBSRVNPVVJDRVMpCi0KLSAgICAjIEJhY2sgdG8gd2hlcmUgd2Ugd2VyZSBiZWZvcmUhCi0gICAgb3MuY2hkaXIocHdkKQotCi0gIGRlZiBfUmVsaW5rKHNlbGYsIGRlc3QsIGxpbmspOgotICAgICIiIkNyZWF0ZXMgYSBzeW1saW5rIHRvIHxkZXN0fCBuYW1lZCB8bGlua3wuIElmIHxsaW5rfCBhbHJlYWR5IGV4aXN0cywKLSAgICBpdCBpcyBvdmVyd3JpdHRlbi4iIiIKLSAgICBpZiBvcy5wYXRoLmxleGlzdHMobGluayk6Ci0gICAgICBvcy5yZW1vdmUobGluaykKLSAgICBvcy5zeW1saW5rKGRlc3QsIGxpbmspCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9tc3ZzX2VtdWxhdGlvbi5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAvbXN2c19lbXVsYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGJhMjgxMmMuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9tc3ZzX2VtdWxhdGlvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDg4NCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotVGhpcyBtb2R1bGUgaGVscHMgZW11bGF0ZSBWaXN1YWwgU3R1ZGlvIDIwMDggYmVoYXZpb3Igb24gdG9wIG9mIG90aGVyCi1idWlsZCBzeXN0ZW1zLCBwcmltYXJpbHkgbmluamEuCi0iIiIKLQotZnJvbSBkaWZmbGliIGltcG9ydCBnZXRfY2xvc2VfbWF0Y2hlcwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi0KLWlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2N5Z3dpbiddOgotICBpbXBvcnQgY3lncGF0aAotCi1pbXBvcnQgZ3lwLk1TVlNWZXJzaW9uCi0KLXdpbmRvd3NfcXVvdGVyX3JlZ2V4ID0gcmUuY29tcGlsZShyJyhcXCopIicpCi0KLWRlZiBRdW90ZUZvclJzcEZpbGUoYXJnKToKLSAgIiIiUXVvdGUgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQgc28gdGhhdCBpdCBhcHBlYXJzIGFzIG9uZSBhcmd1bWVudCB3aGVuCi0gIHByb2Nlc3NlZCB2aWEgY21kLmV4ZSBhbmQgcGFyc2VkIGJ5IENvbW1hbmRMaW5lVG9Bcmd2VyAoYXMgaXMgdHlwaWNhbCBmb3IKLSAgV2luZG93cyBwcm9ncmFtcykuIiIiCi0gICMgU2VlIGh0dHA6Ly9nb28uZ2wvY3VGYlggYW5kIGh0dHA6Ly9nb28uZ2wvZGhQbnAgaW5jbHVkaW5nIHRoZSBjb21tZW50Ci0gICMgdGhyZWFkcy4gVGhpcyBpcyBhY3R1YWxseSB0aGUgcXVvdGluZyBydWxlcyBmb3IgQ29tbWFuZExpbmVUb0FyZ3ZXLCBub3QKLSAgIyBmb3IgdGhlIHNoZWxsLCBiZWNhdXNlIHRoZSBzaGVsbCBkb2Vzbid0IGRvIGFueXRoaW5nIGluIFdpbmRvd3MuIFRoaXMKLSAgIyB3b3JrcyBtb3JlIG9yIGxlc3MgYmVjYXVzZSBtb3N0IHByb2dyYW1zIChpbmNsdWRpbmcgdGhlIGNvbXBpbGVyLCBldGMuKQotICAjIHVzZSB0aGF0IGZ1bmN0aW9uIHRvIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotCi0gICMgRm9yIGEgbGl0ZXJhbCBxdW90ZSwgQ29tbWFuZExpbmVUb0FyZ3ZXIHJlcXVpcmVzIDJuKzEgYmFja3NsYXNoZXMKLSAgIyBwcmVjZWRpbmcgaXQsIGFuZCByZXN1bHRzIGluIG4gYmFja3NsYXNoZXMgKyB0aGUgcXVvdGUuIFNvIHdlIHN1YnN0aXR1dGUKLSAgIyBpbiAyKiB3aGF0IHdlIG1hdGNoLCArMSBtb3JlLCBwbHVzIHRoZSBxdW90ZS4KLSAgYXJnID0gd2luZG93c19xdW90ZXJfcmVnZXguc3ViKGxhbWJkYSBtbzogMiAqIG1vLmdyb3VwKDEpICsgJ1xcIicsIGFyZykKLQotICAjICUncyBhbHNvIG5lZWQgdG8gYmUgZG91YmxlZCBvdGhlcndpc2UgdGhleSdyZSBpbnRlcnByZXRlZCBhcyBiYXRjaAotICAjIHBvc2l0aW9uYWwgYXJndW1lbnRzLiBBbHNvIG1ha2Ugc3VyZSB0byBlc2NhcGUgdGhlICUgc28gdGhhdCB0aGV5J3JlCi0gICMgcGFzc2VkIGxpdGVyYWxseSB0aHJvdWdoIGVzY2FwaW5nIHNvIHRoZXkgY2FuIGJlIHNpbmdsZWQgdG8ganVzdCB0aGUKLSAgIyBvcmlnaW5hbCAlLiBPdGhlcndpc2UsIHRyeWluZyB0byBwYXNzIHRoZSBsaXRlcmFsIHJlcHJlc2VudGF0aW9uIHRoYXQKLSAgIyBsb29rcyBsaWtlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBzaGVsbCAoZS5nLiAlUEFUSCUpIHdvdWxkIGZhaWwuCi0gIGFyZyA9IGFyZy5yZXBsYWNlKCclJywgJyUlJykKLQotICAjIFRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIGluIHJzcCBmaWxlcywgc28gbm8gZXNjYXBpbmcgZm9yIHRoZSBzaGVsbCAodmlhIF4pCi0gICMgaXMgbmVjZXNzYXJ5LgotCi0gICMgRmluYWxseSwgd3JhcCB0aGUgd2hvbGUgdGhpbmcgaW4gcXVvdGVzIHNvIHRoYXQgdGhlIGFib3ZlIHF1b3RlIHJ1bGUKLSAgIyBhcHBsaWVzIGFuZCB3aGl0ZXNwYWNlIGlzbid0IGEgd29yZCBicmVhay4KLSAgcmV0dXJuICciJyArIGFyZyArICciJwotCi0KLWRlZiBFbmNvZGVSc3BGaWxlTGlzdChhcmdzKToKLSAgIiIiUHJvY2VzcyBhIGxpc3Qgb2YgYXJndW1lbnRzIHVzaW5nIFF1b3RlQ21kRXhlQXJndW1lbnQuIiIiCi0gICMgTm90ZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBjb21tYW5kLiBEb24ndCBhZGQKLSAgIyBxdW90ZXMgYXJvdW5kIGl0IGJlY2F1c2UgdGhlbiBidWlsdC1pbnMgbGlrZSAnZWNobycsIGV0Yy4gd29uJ3Qgd29yay4KLSAgIyBUYWtlIGNhcmUgdG8gbm9ybXBhdGggb25seSB0aGUgcGF0aCBpbiB0aGUgY2FzZSBvZiAnY2FsbCAuLi94LmJhdCcgYmVjYXVzZQotICAjIG90aGVyd2lzZSB0aGUgd2hvbGUgdGhpbmcgaXMgaW5jb3JyZWN0bHkgaW50ZXJwcmV0ZWQgYXMgYSBwYXRoIGFuZCBub3QKLSAgIyBub3JtYWxpemVkIGNvcnJlY3RseS4KLSAgaWYgbm90IGFyZ3M6IHJldHVybiAnJwotICBpZiBhcmdzWzBdLnN0YXJ0c3dpdGgoJ2NhbGwgJyk6Ci0gICAgY2FsbCwgcHJvZ3JhbSA9IGFyZ3NbMF0uc3BsaXQoJyAnLCAxKQotICAgIHByb2dyYW0gPSBjYWxsICsgJyAnICsgb3MucGF0aC5ub3JtcGF0aChwcm9ncmFtKQotICBlbHNlOgotICAgIHByb2dyYW0gPSBvcy5wYXRoLm5vcm1wYXRoKGFyZ3NbMF0pCi0gIHJldHVybiBwcm9ncmFtICsgJyAnICsgJyAnLmpvaW4oUXVvdGVGb3JSc3BGaWxlKGFyZykgZm9yIGFyZyBpbiBhcmdzWzE6XSkKLQotCi1kZWYgX0dlbmVyaWNSZXRyaWV2ZShyb290LCBkZWZhdWx0LCBwYXRoKToKLSAgIiIiR2l2ZW4gYSBsaXN0IG9mIGRpY3Rpb25hcnkga2V5cyB8cGF0aHwgYW5kIGEgdHJlZSBvZiBkaWN0cyB8cm9vdHwsIGZpbmQKLSAgdmFsdWUgYXQgcGF0aCwgb3IgcmV0dXJuIHxkZWZhdWx0fCBpZiBhbnkgb2YgdGhlIHBhdGggZG9lc24ndCBleGlzdC4iIiIKLSAgaWYgbm90IHJvb3Q6Ci0gICAgcmV0dXJuIGRlZmF1bHQKLSAgaWYgbm90IHBhdGg6Ci0gICAgcmV0dXJuIHJvb3QKLSAgcmV0dXJuIF9HZW5lcmljUmV0cmlldmUocm9vdC5nZXQocGF0aFswXSksIGRlZmF1bHQsIHBhdGhbMTpdKQotCi0KLWRlZiBfQWRkUHJlZml4KGVsZW1lbnQsIHByZWZpeCk6Ci0gICIiIkFkZCB8cHJlZml4fCB0byB8ZWxlbWVudHwgb3IgZWFjaCBzdWJlbGVtZW50IGlmIGVsZW1lbnQgaXMgaXRlcmFibGUuIiIiCi0gIGlmIGVsZW1lbnQgaXMgTm9uZToKLSAgICByZXR1cm4gZWxlbWVudAotICAjIE5vdGUsIG5vdCBJdGVyYWJsZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaGFuZGxlIHN0cmluZ3MgbGlrZSB0aGF0LgotICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIGxpc3QpIG9yIGlzaW5zdGFuY2UoZWxlbWVudCwgdHVwbGUpOgotICAgIHJldHVybiBbcHJlZml4ICsgZSBmb3IgZSBpbiBlbGVtZW50XQotICBlbHNlOgotICAgIHJldHVybiBwcmVmaXggKyBlbGVtZW50Ci0KLQotZGVmIF9DYWxsTWFwKG1hcCwgZWxlbWVudCk6Ci0gIGUgPSBtYXAoZWxlbWVudCkKLSAgaWYgZSBpcyBOb25lOgotICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBlbGVtZW50ICVzJyAlIGVsZW1lbnQpCi0gIHJldHVybiBlCi0KLWRlZiBfRG9SZW1hcHBpbmcoZWxlbWVudCwgbWFwKToKLSAgIiIiSWYgfGVsZW1lbnR8IHRoZW4gcmVtYXAgaXQgdGhyb3VnaCB8bWFwfC4gSWYgfGVsZW1lbnR8IGlzIGl0ZXJhYmxlIHRoZW4KLSAgZWFjaCBpdGVtIHdpbGwgYmUgcmVtYXBwZWQuIEFueSBlbGVtZW50cyBub3QgZm91bmQgd2lsbCBiZSByZW1vdmVkLiIiIgotICBpZiBtYXAgaXMgbm90IE5vbmUgYW5kIGVsZW1lbnQgaXMgbm90IE5vbmU6Ci0gICAgaWYgbm90IGNhbGxhYmxlKG1hcCk6Ci0gICAgICBtYXAgPSBtYXAuZ2V0ICMgQXNzdW1lIGl0J3MgYSBkaWN0LCBvdGhlcndpc2UgYSBjYWxsYWJsZSB0byBkbyB0aGUgcmVtYXAuCi0gICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCBsaXN0KSBvciBpc2luc3RhbmNlKGVsZW1lbnQsIHR1cGxlKToKLSAgICAgIGVsZW1lbnQgPSBbX0NhbGxNYXAobWFwLCBlbGVtKSBmb3IgZWxlbSBpbiBlbGVtZW50XQotICAgIGVsc2U6Ci0gICAgICBlbGVtZW50ID0gX0NhbGxNYXAobWFwLCBlbGVtZW50KQotCi0gIHJldHVybiBlbGVtZW50Ci0KLQotZGVmIF9BcHBlbmRPclJldHVybihhcHBlbmQsIGVsZW1lbnQpOgotICAiIiJJZiB8YXBwZW5kfCBpcyBOb25lLCBzaW1wbHkgcmV0dXJuIHxlbGVtZW50fC4gSWYgfGFwcGVuZHwgaXMgbm90IE5vbmUsCi0gIHRoZW4gYWRkIHxlbGVtZW50fCB0byBpdCwgYWRkaW5nIGVhY2ggaXRlbSBpbiB8ZWxlbWVudHwgaWYgaXQncyBhIGxpc3Qgb3IKLSAgdHVwbGUuIiIiCi0gIGlmIGFwcGVuZCBpcyBub3QgTm9uZSBhbmQgZWxlbWVudCBpcyBub3QgTm9uZToKLSAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIGxpc3QpIG9yIGlzaW5zdGFuY2UoZWxlbWVudCwgdHVwbGUpOgotICAgICAgYXBwZW5kLmV4dGVuZChlbGVtZW50KQotICAgIGVsc2U6Ci0gICAgICBhcHBlbmQuYXBwZW5kKGVsZW1lbnQpCi0gIGVsc2U6Ci0gICAgcmV0dXJuIGVsZW1lbnQKLQotCi1kZWYgX0ZpbmREaXJlY3RYSW5zdGFsbGF0aW9uKCk6Ci0gICIiIlRyeSB0byBmaW5kIGFuIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBmb3IgdGhlIERpcmVjdFggU0RLLiBDaGVjayBmb3IgdGhlCi0gIHN0YW5kYXJkIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgaWYgdGhhdCBkb2Vzbid0IGV4aXN0LCB0cnkgdG8gZmluZAotICB2aWEgdGhlIHJlZ2lzdHJ5LiBNYXkgcmV0dXJuIE5vbmUgaWYgbm90IGZvdW5kIGluIGVpdGhlciBsb2NhdGlvbi4iIiIKLSAgIyBSZXR1cm4gcHJldmlvdXNseSBjYWxjdWxhdGVkIHZhbHVlLCBpZiB0aGVyZSBpcyBvbmUKLSAgaWYgaGFzYXR0cihfRmluZERpcmVjdFhJbnN0YWxsYXRpb24sICdkeHNka19kaXInKToKLSAgICByZXR1cm4gX0ZpbmREaXJlY3RYSW5zdGFsbGF0aW9uLmR4c2RrX2RpcgotCi0gIGR4c2RrX2RpciA9IG9zLmVudmlyb24uZ2V0KCdEWFNES19ESVInKQotICBpZiBub3QgZHhzZGtfZGlyOgotICAgICMgU2V0dXAgcGFyYW1zIHRvIHBhc3MgdG8gYW5kIGF0dGVtcHQgdG8gbGF1bmNoIHJlZy5leGUuCi0gICAgY21kID0gWydyZWcuZXhlJywgJ3F1ZXJ5JywgcidIS0xNXFNvZnR3YXJlXE1pY3Jvc29mdFxEaXJlY3RYJywgJy9zJ10KLSAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgZm9yIGxpbmUgaW4gcC5jb21tdW5pY2F0ZSgpWzBdLnNwbGl0bGluZXMoKToKLSAgICAgIGlmICdJbnN0YWxsUGF0aCcgaW4gbGluZToKLSAgICAgICAgZHhzZGtfZGlyID0gbGluZS5zcGxpdCgnICAgICcpWzNdICsgIlxcIgotCi0gICMgQ2FjaGUgcmV0dXJuIHZhbHVlCi0gIF9GaW5kRGlyZWN0WEluc3RhbGxhdGlvbi5keHNka19kaXIgPSBkeHNka19kaXIKLSAgcmV0dXJuIGR4c2RrX2RpcgotCi0KLWNsYXNzIE1zdnNTZXR0aW5ncyhvYmplY3QpOgotICAiIiJBIGNsYXNzIHRoYXQgdW5kZXJzdGFuZHMgdGhlIGd5cCAnbXN2c18uLi4nIHZhbHVlcyAoZXNwZWNpYWxseSB0aGUKLSAgbXN2c19zZXR0aW5ncyBmaWVsZCkuIFRoZXkgbGFyZ2VseSBjb3JyZXBvbmQgdG8gdGhlIFZTMjAwOCBJREUgRE9NLiBUaGlzCi0gIGNsYXNzIGhlbHBzIG1hcCB0aG9zZSBzZXR0aW5ncyB0byBjb21tYW5kIGxpbmUgb3B0aW9ucy4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZiwgc3BlYywgZ2VuZXJhdG9yX2ZsYWdzKToKLSAgICBzZWxmLnNwZWMgPSBzcGVjCi0gICAgc2VsZi52c192ZXJzaW9uID0gR2V0VlNWZXJzaW9uKGdlbmVyYXRvcl9mbGFncykKLSAgICBzZWxmLmR4c2RrX2RpciA9IF9GaW5kRGlyZWN0WEluc3RhbGxhdGlvbigpCi0KLSAgICAjIFRyeSB0byBmaW5kIGFuIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBmb3IgdGhlIFdpbmRvd3MgRERLIGJ5IGNoZWNraW5nCi0gICAgIyB0aGUgV0RLX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgbWF5IGJlIE5vbmUuCi0gICAgc2VsZi53ZGtfZGlyID0gb3MuZW52aXJvbi5nZXQoJ1dES19ESVInKQotCi0gICAgc3VwcG9ydGVkX2ZpZWxkcyA9IFsKLSAgICAgICAgKCdtc3ZzX2NvbmZpZ3VyYXRpb25fYXR0cmlidXRlcycsIGRpY3QpLAotICAgICAgICAoJ21zdnNfc2V0dGluZ3MnLCBkaWN0KSwKLSAgICAgICAgKCdtc3ZzX3N5c3RlbV9pbmNsdWRlX2RpcnMnLCBsaXN0KSwKLSAgICAgICAgKCdtc3ZzX2Rpc2FibGVkX3dhcm5pbmdzJywgbGlzdCksCi0gICAgICAgICgnbXN2c19wcmVjb21waWxlZF9oZWFkZXInLCBzdHIpLAotICAgICAgICAoJ21zdnNfcHJlY29tcGlsZWRfc291cmNlJywgc3RyKSwKLSAgICAgICAgKCdtc3ZzX2NvbmZpZ3VyYXRpb25fcGxhdGZvcm0nLCBzdHIpLAotICAgICAgICAoJ21zdnNfdGFyZ2V0X3BsYXRmb3JtJywgc3RyKSwKLSAgICAgICAgXQotICAgIHZhbGlkYXRvcnMgPSB7Ci0gICAgICAgICdtc3ZzX3NldHRpbmdzJzogc2VsZi5fU2V0dGluZ3NWYWxpZGF0b3IsCi0gICAgfQotICAgIGNvbmZpZ3MgPSBzcGVjWydjb25maWd1cmF0aW9ucyddCi0gICAgZm9yIGZpZWxkLCBkZWZhdWx0IGluIHN1cHBvcnRlZF9maWVsZHM6Ci0gICAgICBzZXRhdHRyKHNlbGYsIGZpZWxkLCB7fSkKLSAgICAgIGZvciBjb25maWduYW1lLCBjb25maWcgaW4gY29uZmlncy5pdGVyaXRlbXMoKToKLSAgICAgICAgZ2V0YXR0cihzZWxmLCBmaWVsZClbY29uZmlnbmFtZV0gPSBjb25maWcuZ2V0KGZpZWxkLCBkZWZhdWx0KCkpCi0gICAgICAgIGlmIGZpZWxkIGluIHZhbGlkYXRvcnM6Ci0gICAgICAgICAgICB2YWxpZGF0b3JzW2ZpZWxkXShjb25maWduYW1lKQotCi0gICAgc2VsZi5tc3ZzX2N5Z3dpbl9kaXJzID0gc3BlYy5nZXQoJ21zdnNfY3lnd2luX2RpcnMnLCBbJy4nXSkKLQotICBkZWYgR2V0VlNNYWNyb0VudihzZWxmLCBiYXNlX3RvX2J1aWxkPU5vbmUsIGNvbmZpZz1Ob25lKToKLSAgICAiIiJHZXQgYSBkaWN0IG9mIHZhcmlhYmxlcyBtYXBwaW5nIGludGVybmFsIFZTIG1hY3JvIG5hbWVzIHRvIHRoZWlyIGd5cAotICAgIGVxdWl2YWxlbnRzLiIiIgotICAgIHZzX3BhdGggPSBzZWxmLnZzX3ZlcnNpb24uUGF0aCgpCi0gICAgIyBBYnNvbHV0ZSBwYXRocyBpbiBjeWd3aW4gdGhlIHBhdGggd2lsbCBzdGFydCB3aXRoIC9jeWdkcml2ZS9jLwotICAgICMgVGhlIE1TIGNvbXBpbGVyIHRvb2xzIG5lZWQKLSAgICAjIFRPRE86IHRoaXMgaXMgZ2V0dGluZyBnZW5lcmF0ZWQgZnJvbSB0aGUgdnMgaW5zdGFsbCBwYXRoCi0gICAgIyBuZWVkIHRvIHBhc3MgdGhpcyBpbiwgb3IgZml4IGVhcmxpZXIgaW4gZ2VuZXJhdGlvbgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKLSAgICAgIHZzX3BhdGggPSBjeWdwYXRoLnRvX250KHZzX3BhdGgpCi0KLSAgICB0YXJnZXRfcGxhdGZvcm0gPSAnV2luMzInIGlmIHNlbGYuR2V0QXJjaChjb25maWcpID09ICd4ODYnIGVsc2UgJ3g2NCcKLQotICAgIHJlcGxhY2VtZW50cyA9IHsKLSAgICAgICAgJyQoVlNJbnN0YWxsRGlyKSc6IHZzX3BhdGgsCi0gICAgICAgICckKFZDSW5zdGFsbERpciknOiBvcy5wYXRoLmpvaW4odnNfcGF0aCwgJ1ZDJykgKyAnXFwnLAotICAgICAgICAnJChPdXREaXIpXFwnOiBiYXNlX3RvX2J1aWxkICsgJ1xcJyBpZiBiYXNlX3RvX2J1aWxkIGVsc2UgJycsCi0gICAgICAgICckKEludERpciknOiAnJCFJTlRFUk1FRElBVEVfRElSJywKLSAgICAgICAgJyQoSW5wdXRQYXRoKSc6ICcke3NvdXJjZX0nLAotICAgICAgICAnJChJbnB1dE5hbWUpJzogJyR7cm9vdH0nLAotICAgICAgICAnJChQcm9qZWN0TmFtZSknOiBzZWxmLnNwZWNbJ3RhcmdldF9uYW1lJ10sCi0gICAgICAgICckKFBsYXRmb3JtTmFtZSknOiB0YXJnZXRfcGxhdGZvcm0sCi0gICAgICAgICckKFByb2plY3REaXIpXFwnOiAnJywKLSAgICB9Ci0KLSAgICAjIENocm9taXVtIHVzZXMgRFhTREtfRElSIGluIGluY2x1ZGUvbGliIHBhdGhzLCBidXQgaXQgbWF5IG9yIG1heSBub3QgYmUKLSAgICAjIHNldC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIFNESyBpcyBzeW5jJ2QgdmlhIHNyYy1pbnRlcm5hbCwgcmF0aGVyIHRoYW4KLSAgICAjIGJ5IHR5cGljYWwgZW5kLXVzZXIgaW5zdGFsbGF0aW9uIG9mIHRoZSBTREsuIElmIGl0J3Mgbm90IHNldCwgd2UgZG9uJ3QKLSAgICAjIHdhbnQgdG8gbGVhdmUgdGhlIHVuZXhwYW5kZWQgdmFyaWFibGUgaW4gdGhlIHBhdGgsIHNvIHNpbXBseSBzdHJpcCBpdC4KLSAgICByZXBsYWNlbWVudHNbJyQoRFhTREtfRElSKSddID0gc2VsZi5keHNka19kaXIgaWYgc2VsZi5keHNka19kaXIgZWxzZSAnJwotICAgIHJlcGxhY2VtZW50c1snJChXREtfRElSKSddID0gc2VsZi53ZGtfZGlyIGlmIHNlbGYud2RrX2RpciBlbHNlICcnCi0gICAgcmV0dXJuIHJlcGxhY2VtZW50cwotCi0gIGRlZiBDb252ZXJ0VlNNYWNyb3Moc2VsZiwgcywgYmFzZV90b19idWlsZD1Ob25lLCBjb25maWc9Tm9uZSk6Ci0gICAgIiIiQ29udmVydCBmcm9tIFZTIG1hY3JvIG5hbWVzIHRvIHNvbWV0aGluZyBlcXVpdmFsZW50LiIiIgotICAgIGVudiA9IHNlbGYuR2V0VlNNYWNyb0VudihiYXNlX3RvX2J1aWxkLCBjb25maWc9Y29uZmlnKQotICAgIHJldHVybiBFeHBhbmRNYWNyb3MocywgZW52KQotCi0gIGRlZiBBZGp1c3RMaWJyYXJpZXMoc2VsZiwgbGlicmFyaWVzKToKLSAgICAiIiJTdHJpcCAtbCBmcm9tIGxpYnJhcnkgaWYgaXQncyBzcGVjaWZpZWQgd2l0aCB0aGF0LiIiIgotICAgIHJldHVybiBbbGliWzI6XSBpZiBsaWIuc3RhcnRzd2l0aCgnLWwnKSBlbHNlIGxpYiBmb3IgbGliIGluIGxpYnJhcmllc10KLQotICBkZWYgX0dldEFuZE11bmdlKHNlbGYsIGZpZWxkLCBwYXRoLCBkZWZhdWx0LCBwcmVmaXgsIGFwcGVuZCwgbWFwKToKLSAgICAiIiJSZXRyaWV2ZSBhIHZhbHVlIGZyb20gfGZpZWxkfCBhdCB8cGF0aHwgb3IgcmV0dXJuIHxkZWZhdWx0fC4gSWYKLSAgICB8YXBwZW5kfCBpcyBzcGVjaWZpZWQsIGFuZCB0aGUgaXRlbSBpcyBmb3VuZCwgaXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGF0Ci0gICAgb2JqZWN0IGluc3RlYWQgb2YgcmV0dXJuZWQuIElmIHxtYXB8IGlzIHNwZWNpZmllZCwgcmVzdWx0cyB3aWxsIGJlCi0gICAgcmVtYXBwZWQgdGhyb3VnaCB8bWFwfCBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgb3IgYXBwZW5kZWQuIiIiCi0gICAgcmVzdWx0ID0gX0dlbmVyaWNSZXRyaWV2ZShmaWVsZCwgZGVmYXVsdCwgcGF0aCkKLSAgICByZXN1bHQgPSBfRG9SZW1hcHBpbmcocmVzdWx0LCBtYXApCi0gICAgcmVzdWx0ID0gX0FkZFByZWZpeChyZXN1bHQsIHByZWZpeCkKLSAgICByZXR1cm4gX0FwcGVuZE9yUmV0dXJuKGFwcGVuZCwgcmVzdWx0KQotCi0gIGNsYXNzIF9HZXRXcmFwcGVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZmllbGQsIGJhc2VfcGF0aCwgYXBwZW5kPU5vbmUpOgotICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKLSAgICAgIHNlbGYuZmllbGQgPSBmaWVsZAotICAgICAgc2VsZi5iYXNlX3BhdGggPSBbYmFzZV9wYXRoXQotICAgICAgc2VsZi5hcHBlbmQgPSBhcHBlbmQKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgbmFtZSwgbWFwPU5vbmUsIHByZWZpeD0nJywgZGVmYXVsdD1Ob25lKToKLSAgICAgIHJldHVybiBzZWxmLnBhcmVudC5fR2V0QW5kTXVuZ2Uoc2VsZi5maWVsZCwgc2VsZi5iYXNlX3BhdGggKyBbbmFtZV0sCi0gICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LCBwcmVmaXg9cHJlZml4LCBhcHBlbmQ9c2VsZi5hcHBlbmQsIG1hcD1tYXApCi0KLSAgZGVmIEdldEFyY2goc2VsZiwgY29uZmlnKToKLSAgICAiIiJHZXQgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIG1zdnNfY29uZmlndXJhdGlvbl9wbGF0Zm9ybSBhbmQKLSAgICBtc3ZzX3RhcmdldF9wbGF0Zm9ybS4gUmV0dXJucyBlaXRoZXIgJ3g4Nicgb3IgJ3g2NCcuIiIiCi0gICAgY29uZmlndXJhdGlvbl9wbGF0Zm9ybSA9IHNlbGYubXN2c19jb25maWd1cmF0aW9uX3BsYXRmb3JtLmdldChjb25maWcsICcnKQotICAgIHBsYXRmb3JtID0gc2VsZi5tc3ZzX3RhcmdldF9wbGF0Zm9ybS5nZXQoY29uZmlnLCAnJykKLSAgICBpZiBub3QgcGxhdGZvcm06ICMgSWYgbm8gc3BlY2lmaWMgb3ZlcnJpZGUsIHVzZSB0aGUgY29uZmlndXJhdGlvbidzLgotICAgICAgcGxhdGZvcm0gPSBjb25maWd1cmF0aW9uX3BsYXRmb3JtCi0gICAgIyBNYXAgZnJvbSBwbGF0Zm9ybSB0byBhcmNoaXRlY3R1cmUuCi0gICAgcmV0dXJuIHsnV2luMzInOiAneDg2JywgJ3g2NCc6ICd4NjQnfS5nZXQocGxhdGZvcm0sICd4ODYnKQotCi0gIGRlZiBfVGFyZ2V0Q29uZmlnKHNlbGYsIGNvbmZpZyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgdGFyZ2V0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIiIiCi0gICAgIyBPbiBDb2JhbHQsIHdlJ3JlIG5vdCB1c2luZyBhbnkgc3VmZml4IG9uIGNvbmZpZyBuYW1lcyBsaWtlIFdpbl9EZWJ1Z194NjQuCi0gICAgIyBDb2JhbHQgb24gV2luZG93cyBpcyB4NjQgb25seS4KLSAgICByZXR1cm4gY29uZmlnCi0KLSAgZGVmIF9TZXR0aW5nKHNlbGYsIHBhdGgsIGNvbmZpZywKLSAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLCBwcmVmaXg9JycsIGFwcGVuZD1Ob25lLCBtYXA9Tm9uZSk6Ci0gICAgIiIiX0dldEFuZE11bmdlIGZvciBtc3ZzX3NldHRpbmdzLiIiIgotICAgIHJldHVybiBzZWxmLl9HZXRBbmRNdW5nZSgKLSAgICAgICAgc2VsZi5tc3ZzX3NldHRpbmdzW2NvbmZpZ10sIHBhdGgsIGRlZmF1bHQsIHByZWZpeCwgYXBwZW5kLCBtYXApCi0KLSAgZGVmIF9TZXR0aW5nc1ZhbGlkYXRvcihzZWxmLCBjb25maWduYW1lKToKLSAgICAiIiJWYWxpZGF0ZSBtc3ZzX3NldHRpbmdzLiIiIgotICAgIHZhbGlkX2ZpZWxkcyA9IFsKLSAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnLAotICAgICAgICAnVkNMaW5rZXJUb29sJywKLSAgICAgICAgJ1ZDTGlicmFyaWFuVG9vbCcsCi0gICAgICAgICdWQ01JRExUb29sJywKLSAgICAgICAgJ1ZDUmVzb3VyY2VDb21waWxlclRvb2wnLAotICAgICAgICAnVkNNYW5pZmVzdFRvb2wnLAotICAgIF0KLSAgICBmb3IgZmllbGQgaW4gc2VsZi5tc3ZzX3NldHRpbmdzW2NvbmZpZ25hbWVdOgotICAgICAgaWYgZmllbGQgbm90IGluIHZhbGlkX2ZpZWxkczoKLSAgICAgICAgbWVzc2FnZSA9ICgnSW52YWxpZCBtc3ZzX3NldHRpbmdzIGZpZWxkOiAiJXMiLCAnCi0gICAgICAgICAgICAgICAgICAgJ2NvbmZpZzogIiVzIicgJSAoZmllbGQsIGNvbmZpZ25hbWUpKQotICAgICAgICBjbG9zZV9tYXRjaCA9IGdldF9jbG9zZV9tYXRjaGVzKGZpZWxkLCB2YWxpZF9maWVsZHMsIDEpCi0gICAgICAgIGlmIGNsb3NlX21hdGNoOgotICAgICAgICAgIG1lc3NhZ2UgKz0gJ1xuRGlkIHlvdSBtZWFuICVzPycgJSAgdHVwbGUoY2xvc2VfbWF0Y2gpCi0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbihtZXNzYWdlKQotCi0gIGRlZiBfQ29uZmlnQXR0cmliKHNlbGYsIHBhdGgsIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsIHByZWZpeD0nJywgYXBwZW5kPU5vbmUsIG1hcD1Ob25lKToKLSAgICAiIiJfR2V0QW5kTXVuZ2UgZm9yIG1zdnNfY29uZmlndXJhdGlvbl9hdHRyaWJ1dGVzLiIiIgotICAgIHJldHVybiBzZWxmLl9HZXRBbmRNdW5nZSgKLSAgICAgICAgc2VsZi5tc3ZzX2NvbmZpZ3VyYXRpb25fYXR0cmlidXRlc1tjb25maWddLAotICAgICAgICBwYXRoLCBkZWZhdWx0LCBwcmVmaXgsIGFwcGVuZCwgbWFwKQotCi0gIGRlZiBBZGp1c3RJbmNsdWRlRGlycyhzZWxmLCBpbmNsdWRlX2RpcnMsIGNvbmZpZyk6Ci0gICAgIiIiVXBkYXRlcyBpbmNsdWRlX2RpcnMgdG8gZXhwYW5kIFZTIHNwZWNpZmljIHBhdGhzLCBhbmQgYWRkcyB0aGUgc3lzdGVtCi0gICAgaW5jbHVkZSBkaXJzIHVzZWQgZm9yIHBsYXRmb3JtIFNESyBhbmQgc2ltaWxhci4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIGluY2x1ZGVzID0gaW5jbHVkZV9kaXJzICsgc2VsZi5tc3ZzX3N5c3RlbV9pbmNsdWRlX2RpcnNbY29uZmlnXQotICAgIGluY2x1ZGVzLmV4dGVuZChzZWxmLl9TZXR0aW5nKAotICAgICAgKCdWQ0NMQ29tcGlsZXJUb29sJywgJ0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMnKSwgY29uZmlnLCBkZWZhdWx0PVtdKSkKLSAgICByZXR1cm4gW3NlbGYuQ29udmVydFZTTWFjcm9zKHAsIGNvbmZpZz1jb25maWcpIGZvciBwIGluIGluY2x1ZGVzXQotCi0gIGRlZiBHZXRDb21wdXRlZERlZmluZXMoc2VsZiwgY29uZmlnKToKLSAgICAiIiJSZXR1cm5zIHRoZSBzZXQgb2YgZGVmaW5lcyB0aGF0IGFyZSBpbmplY3RlZCB0byB0aGUgZGVmaW5lcyBsaXN0IGJhc2VkCi0gICAgb24gb3RoZXIgVlMgc2V0dGluZ3MuIiIiCi0gICAgY29uZmlnID0gc2VsZi5fVGFyZ2V0Q29uZmlnKGNvbmZpZykKLSAgICBkZWZpbmVzID0gW10KLSAgICBpZiBzZWxmLl9Db25maWdBdHRyaWIoWydDaGFyYWN0ZXJTZXQnXSwgY29uZmlnKSA9PSAnMSc6Ci0gICAgICBkZWZpbmVzLmV4dGVuZCgoJ19VTklDT0RFJywgJ1VOSUNPREUnKSkKLSAgICBpZiBzZWxmLl9Db25maWdBdHRyaWIoWydDaGFyYWN0ZXJTZXQnXSwgY29uZmlnKSA9PSAnMic6Ci0gICAgICBkZWZpbmVzLmFwcGVuZCgnX01CQ1MnKQotICAgIGRlZmluZXMuZXh0ZW5kKHNlbGYuX1NldHRpbmcoCi0gICAgICAgICgnVkNDTENvbXBpbGVyVG9vbCcsICdQcmVwcm9jZXNzb3JEZWZpbml0aW9ucycpLCBjb25maWcsIGRlZmF1bHQ9W10pKQotICAgIHJldHVybiBkZWZpbmVzCi0KLSAgZGVmIEdldE91dHB1dE5hbWUoc2VsZiwgY29uZmlnLCBleHBhbmRfc3BlY2lhbCk6Ci0gICAgIiIiR2V0cyB0aGUgZXhwbGljaXRseSBvdmVycmlkZGVuIG91dHB1dCBuYW1lIGZvciBhIHRhcmdldCBvciByZXR1cm5zIE5vbmUKLSAgICBpZiBpdCdzIG5vdCBvdmVycmlkZGVuLiIiIgotICAgIGNvbmZpZyA9IHNlbGYuX1RhcmdldENvbmZpZyhjb25maWcpCi0gICAgdHlwZSA9IHNlbGYuc3BlY1sndHlwZSddCi0gICAgcm9vdCA9ICdWQ0xpYnJhcmlhblRvb2wnIGlmIHR5cGUgPT0gJ3N0YXRpY19saWJyYXJ5JyBlbHNlICdWQ0xpbmtlclRvb2wnCi0gICAgIyBUT0RPKHNjb3R0bWcpOiBIYW5kbGUgT3V0cHV0RGlyZWN0b3J5IHdpdGhvdXQgT3V0cHV0RmlsZS4KLSAgICBvdXRwdXRfZmlsZSA9IHNlbGYuX1NldHRpbmcoKHJvb3QsICdPdXRwdXRGaWxlJyksIGNvbmZpZykKLSAgICBpZiBvdXRwdXRfZmlsZToKLSAgICAgIG91dHB1dF9maWxlID0gZXhwYW5kX3NwZWNpYWwoc2VsZi5Db252ZXJ0VlNNYWNyb3MoCi0gICAgICAgICAgb3V0cHV0X2ZpbGUsIGNvbmZpZz1jb25maWcpKQotICAgIHJldHVybiBvdXRwdXRfZmlsZQotCi0gIGRlZiBHZXRQREJOYW1lKHNlbGYsIGNvbmZpZywgZXhwYW5kX3NwZWNpYWwpOgotICAgICIiIkdldHMgdGhlIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbiBwZGIgbmFtZSBmb3IgYSB0YXJnZXQgb3IgcmV0dXJucyBOb25lCi0gICAgaWYgaXQncyBub3Qgb3ZlcnJpZGRlbi4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIG91dHB1dF9maWxlID0gc2VsZi5fU2V0dGluZygoJ1ZDTGlua2VyVG9vbCcsICdQcm9ncmFtRGF0YWJhc2VGaWxlJyksIGNvbmZpZykKLSAgICBpZiBvdXRwdXRfZmlsZToKLSAgICAgIG91dHB1dF9maWxlID0gZXhwYW5kX3NwZWNpYWwoc2VsZi5Db252ZXJ0VlNNYWNyb3MoCi0gICAgICAgICAgb3V0cHV0X2ZpbGUsIGNvbmZpZz1jb25maWcpKQotICAgIHJldHVybiBvdXRwdXRfZmlsZQotCi0gIGRlZiBHZXRDZmxhZ3Moc2VsZiwgY29uZmlnKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgdG8gLmMgYW5kIC5jYyBjb21waWxhdGlvbnMuIiIiCi0gICAgY29uZmlnID0gc2VsZi5fVGFyZ2V0Q29uZmlnKGNvbmZpZykKLSAgICBjZmxhZ3MgPSBbXQotICAgIGNmbGFncy5leHRlbmQoWycvd2QnICsgdyBmb3IgdyBpbiBzZWxmLm1zdnNfZGlzYWJsZWRfd2FybmluZ3NbY29uZmlnXV0pCi0gICAgY2wgPSBzZWxmLl9HZXRXcmFwcGVyKHNlbGYsIHNlbGYubXN2c19zZXR0aW5nc1tjb25maWddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCcsIGFwcGVuZD1jZmxhZ3MpCi0gICAgY2woJ09wdGltaXphdGlvbicsCi0gICAgICAgbWFwPXsnMCc6ICdkJywgJzEnOiAnMScsICcyJzogJzInLCAnMyc6ICd4J30sIHByZWZpeD0nL08nKQotICAgIGNsKCdJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbicsIHByZWZpeD0nL09iJykKLSAgICBjbCgnT21pdEZyYW1lUG9pbnRlcnMnLCBtYXA9eydmYWxzZSc6ICctJywgJ3RydWUnOiAnJ30sIHByZWZpeD0nL095JykKLSAgICBjbCgnRmF2b3JTaXplT3JTcGVlZCcsIG1hcD17JzEnOiAndCcsICcyJzogJ3MnfSwgcHJlZml4PScvTycpCi0gICAgY2woJ1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbicsIG1hcD17J3RydWUnOiAnL0dMJ30pCi0gICAgY2woJ1dhcm5pbmdMZXZlbCcsIHByZWZpeD0nL1cnKQotICAgIGNsKCdXYXJuQXNFcnJvcicsIG1hcD17J2ZhbHNlJzogJycsICd0cnVlJzogJy9XWCd9KQotICAgIGNsKCdEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0JywKLSAgICAgICAgbWFwPXsnMSc6ICc3JywgJzMnOiAnaScsICc0JzogJ0knfSwgcHJlZml4PScvWicpCi0gICAgY2woJ1J1bnRpbWVUeXBlSW5mbycsIG1hcD17J3RydWUnOiAnL0dSJywgJ2ZhbHNlJzogJy9HUi0nfSkKLSAgICBjbCgnRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmcnLCBtYXA9eyd0cnVlJzogJy9HeScsICdmYWxzZSc6ICcvR3ktJ30pCi0gICAgY2woJ01pbmltYWxSZWJ1aWxkJywgbWFwPXsndHJ1ZSc6ICcvR20nLCAnZmFsc2UnOiAnL0dtLSd9KQotICAgIGNsKCdCdWZmZXJTZWN1cml0eUNoZWNrJywgbWFwPXsndHJ1ZSc6ICcvR1MnLCAnZmFsc2UnOiAnL0dTLSd9KQotICAgIGNsKCdCYXNpY1J1bnRpbWVDaGVja3MnLCBtYXA9eycxJzogJ3MnLCAnMic6ICd1JywgJzMnOiAnMSd9LCBwcmVmaXg9Jy9SVEMnKQotICAgIGNsKCdSdW50aW1lTGlicmFyeScsCi0gICAgICAgIG1hcD17JzAnOiAnVCcsICcxJzogJ1RkJywgJzInOiAnRCcsICczJzogJ0RkJ30sIHByZWZpeD0nL00nKQotICAgIGNsKCdFeGNlcHRpb25IYW5kbGluZycsIG1hcD17JzEnOiAnc2MnLCcyJzogJ2EnfSwgcHJlZml4PScvRUgnKQotICAgIGNsKCdFbmFibGVQUkVmYXN0JywgbWFwPXsndHJ1ZSc6ICcvYW5hbHl6ZSd9KQotICAgIGNsKCdBZGRpdGlvbmFsT3B0aW9ucycsIHByZWZpeD0nJykKLSAgICBjZmxhZ3MuZXh0ZW5kKFsnL0ZJJyArIGYgZm9yIGYgaW4gc2VsZi5fU2V0dGluZygKLSAgICAgICAgKCdWQ0NMQ29tcGlsZXJUb29sJywgJ0ZvcmNlZEluY2x1ZGVGaWxlcycpLCBjb25maWcsIGRlZmF1bHQ9W10pXSkKLSAgICBjZmxhZ3MuZXh0ZW5kKFsnL1pjOicgKyBmIGZvciBmIGluIHNlbGYuX1NldHRpbmcoCi0gICAgICAgICgnVkNDTENvbXBpbGVyVG9vbCcsICdDb25mb3JtYW5jZScpLCBjb25maWcsIGRlZmF1bHQ9W10pXSkKLQotICAgICMgbmluamEgaGFuZGxlcyBwYXJhbGxlbGlzbSBieSBpdHNlbGYsIGRvbid0IGhhdmUgdGhlIGNvbXBpbGVyIGRvIGl0IHRvby4KLSAgICBjZmxhZ3MgPSBmaWx0ZXIobGFtYmRhIHg6IG5vdCB4LnN0YXJ0c3dpdGgoJy9NUCcpLCBjZmxhZ3MpCi0gICAgcmV0dXJuIGNmbGFncwotCi0gIGRlZiBHZXRQcmVjb21waWxlZEhlYWRlcihzZWxmLCBjb25maWcsIGd5cF90b19idWlsZF9wYXRoKToKLSAgICAiIiJSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGhhbmRsZXMgdGhlIGdlbmVyYXRpb24gb2YgcHJlY29tcGlsZWQgaGVhZGVyCi0gICAgYnVpbGQgc3RlcHMuIiIiCi0gICAgY29uZmlnID0gc2VsZi5fVGFyZ2V0Q29uZmlnKGNvbmZpZykKLSAgICByZXR1cm4gX1BjaEhlbHBlcihzZWxmLCBjb25maWcsIGd5cF90b19idWlsZF9wYXRoKQotCi0gIGRlZiBfR2V0UGNoRmxhZ3Moc2VsZiwgY29uZmlnLCBleHRlbnNpb24pOgotICAgICIiIkdldCB0aGUgZmxhZ3MgdG8gYmUgYWRkZWQgdG8gdGhlIGNmbGFncyBmb3IgcHJlY29tcGlsZWQgaGVhZGVyIHN1cHBvcnQuCi0gICAgIiIiCi0gICAgY29uZmlnID0gc2VsZi5fVGFyZ2V0Q29uZmlnKGNvbmZpZykKLSAgICAjIFRoZSBQQ0ggaXMgb25seSBidWlsdCBvbmNlIGJ5IGEgcGFydGljdWxhciBzb3VyY2UgZmlsZS4gVXNhZ2Ugb2YgUENIIG11c3QKLSAgICAjIG9ubHkgYmUgZm9yIHRoZSBzYW1lIGxhbmd1YWdlIChpLmUuIEMgdnMuIEMrKyksIHNvIG9ubHkgaW5jbHVkZSB0aGUgcGNoCi0gICAgIyBmbGFncyB3aGVuIHRoZSBsYW5ndWFnZSBtYXRjaGVzLgotICAgIGlmIHNlbGYubXN2c19wcmVjb21waWxlZF9oZWFkZXJbY29uZmlnXToKLSAgICAgIHNvdXJjZV9leHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHNlbGYubXN2c19wcmVjb21waWxlZF9zb3VyY2VbY29uZmlnXSlbMV0KLSAgICAgIGlmIF9MYW5ndWFnZU1hdGNoZXNGb3JQY2goc291cmNlX2V4dCwgZXh0ZW5zaW9uKToKLSAgICAgICAgcGNoID0gb3MucGF0aC5zcGxpdChzZWxmLm1zdnNfcHJlY29tcGlsZWRfaGVhZGVyW2NvbmZpZ10pWzFdCi0gICAgICAgIHJldHVybiBbJy9ZdScgKyBwY2gsICcvRkknICsgcGNoLCAnL0ZwJHtwY2hwcmVmaXh9LicgKyBwY2ggKyAnLnBjaCddCi0gICAgcmV0dXJuICBbXQotCi0gIGRlZiBVc2VzQ29tcG9uZW50RXh0ZW5zaW9ucyhzZWxmLCBjb25maWcpOgotICAgIHJldHVybiBzZWxmLl9TZXR0aW5nKAotICAgICAgICAoJ1ZDQ0xDb21waWxlclRvb2wnLCAnQ29tcG9uZW50RXh0ZW5zaW9ucycpLCBjb25maWcsIGRlZmF1bHQ9W10pCi0KLSAgZGVmIEdldENmbGFnc0Moc2VsZiwgY29uZmlnKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgdG8gLmMgY29tcGlsYXRpb25zLiIiIgotICAgIGNvbmZpZyA9IHNlbGYuX1RhcmdldENvbmZpZyhjb25maWcpCi0gICAgcmV0dXJuIHNlbGYuX0dldFBjaEZsYWdzKGNvbmZpZywgJy5jJykKLQotICBkZWYgR2V0Q2ZsYWdzQ0Moc2VsZiwgY29uZmlnKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmbGFncyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgdG8gLmNjIGNvbXBpbGF0aW9ucy4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIGNjZmxhZ3MgPSBbXQotICAgIGNsID0gc2VsZi5fR2V0V3JhcHBlcihzZWxmLCBzZWxmLm1zdnNfc2V0dGluZ3NbY29uZmlnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnLCBhcHBlbmQ9Y2NmbGFncykKLSAgICBjbCgnQ29tcG9uZW50RXh0ZW5zaW9ucycsIG1hcD17J3RydWUnOiAnL1pXJ30pCi0KLSAgICBpZiBzZWxmLlVzZXNDb21wb25lbnRFeHRlbnNpb25zKGNvbmZpZyk6Ci0gICAgICAjIERpc2FibGUgUENIIGZvciBsaWJzIGNvbXBpbGVkIHdpdGggL1pXLCBldmVuIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCi0gICAgICAjIENhdXNlcyBhIGZhdGFsIGNvbXBpbGVyIGVycm9yLgotICAgICAgcmV0dXJuIFsnL1RQJ10gKyBjY2ZsYWdzCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBbJy9UUCddICsgc2VsZi5fR2V0UGNoRmxhZ3MoY29uZmlnLCAnLmNjJykgKyBjY2ZsYWdzCi0KLSAgZGVmIF9HZXRBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKHNlbGYsIHJvb3QsIGNvbmZpZywgZ3lwX3RvX2J1aWxkX3BhdGgpOgotICAgICIiIkdldCBhbmQgbm9ybWFsaXplIHRoZSBsaXN0IG9mIHBhdGhzIGluIEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMKLSAgICBzZXR0aW5nLiIiIgotICAgIGNvbmZpZyA9IHNlbGYuX1RhcmdldENvbmZpZyhjb25maWcpCi0gICAgbGlicGF0aHMgPSBzZWxmLl9TZXR0aW5nKChyb290LCAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3RvcmllcycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsIGRlZmF1bHQ9W10pCi0gICAgbGlicGF0aHMgPSBbb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgICAgICAgICAgICAgZ3lwX3RvX2J1aWxkX3BhdGgoc2VsZi5Db252ZXJ0VlNNYWNyb3MocCwgY29uZmlnPWNvbmZpZykpKQotICAgICAgICAgICAgICAgIGZvciBwIGluIGxpYnBhdGhzXQotICAgIHJldHVybiBbJy9MSUJQQVRIOiInICsgcCArICciJyBmb3IgcCBpbiBsaWJwYXRoc10KLQotICBkZWYgR2V0TGliRmxhZ3Moc2VsZiwgY29uZmlnLCBneXBfdG9fYnVpbGRfcGF0aCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHRvIGxpYiBjb21tYW5kcy4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIGxpYmZsYWdzID0gW10KLSAgICBsaWIgPSBzZWxmLl9HZXRXcmFwcGVyKHNlbGYsIHNlbGYubXN2c19zZXR0aW5nc1tjb25maWddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnVkNMaWJyYXJpYW5Ub29sJywgYXBwZW5kPWxpYmZsYWdzKQotICAgIGxpYmZsYWdzLmV4dGVuZChzZWxmLl9HZXRBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKAotICAgICAgICAnVkNMaWJyYXJpYW5Ub29sJywgY29uZmlnLCBneXBfdG9fYnVpbGRfcGF0aCkpCi0gICAgbGliKCdBZGRpdGlvbmFsT3B0aW9ucycpCi0gICAgcmV0dXJuIGxpYmZsYWdzCi0KLSAgZGVmIF9HZXREZWZGaWxlQXNMZGZsYWdzKHNlbGYsIHNwZWMsIGxkZmxhZ3MsIGd5cF90b19idWlsZF9wYXRoKToKLSAgICAiIiIuZGVmIGZpbGVzIGdldCBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBhIE1vZHVsZURlZmluaXRpb25GaWxlIGZvciB0aGUKLSAgICBsaW5rZXIgaW4gdGhlIFZTIGdlbmVyYXRvci4gRW11bGF0ZSB0aGF0IGJlaGF2aW91ciBoZXJlLiIiIgotICAgIGRlZl9maWxlID0gJycKLSAgICBpZiBzcGVjWyd0eXBlJ10gaW4gKCdzaGFyZWRfbGlicmFyeScsICdsb2FkYWJsZV9tb2R1bGUnLCAnZXhlY3V0YWJsZScpOgotICAgICAgZGVmX2ZpbGVzID0gW3MgZm9yIHMgaW4gc3BlYy5nZXQoJ3NvdXJjZXMnLCBbXSkgaWYgcy5lbmRzd2l0aCgnLmRlZicpXQotICAgICAgaWYgbGVuKGRlZl9maWxlcykgPT0gMToKLSAgICAgICAgbGRmbGFncy5hcHBlbmQoJy9ERUY6IiVzIicgJSBneXBfdG9fYnVpbGRfcGF0aChkZWZfZmlsZXNbMF0pKQotICAgICAgZWxpZiBsZW4oZGVmX2ZpbGVzKSA+IDE6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTXVsdGlwbGUgLmRlZiBmaWxlcyIpCi0KLSAgZGVmIEdldExkZmxhZ3Moc2VsZiwgY29uZmlnLCBneXBfdG9fYnVpbGRfcGF0aCwgZXhwYW5kX3NwZWNpYWwsCi0gICAgICAgICAgICAgICAgIG1hbmlmZXN0X2Jhc2VfbmFtZSwgaXNfZXhlY3V0YWJsZSk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHRvIGxpbmsgY29tbWFuZHMsIGFuZCB0aGUKLSAgICBtYW5pZmVzdCBmaWxlcy4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIGxkZmxhZ3MgPSBbXQotICAgIGxkID0gc2VsZi5fR2V0V3JhcHBlcihzZWxmLCBzZWxmLm1zdnNfc2V0dGluZ3NbY29uZmlnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCcsIGFwcGVuZD1sZGZsYWdzKQotICAgIHNlbGYuX0dldERlZkZpbGVBc0xkZmxhZ3Moc2VsZi5zcGVjLCBsZGZsYWdzLCBneXBfdG9fYnVpbGRfcGF0aCkKLSAgICBsZCgnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJywgbWFwPXsndHJ1ZSc6ICcvREVCVUcnfSkKLSAgICBsZCgnVGFyZ2V0TWFjaGluZScsIG1hcD17JzEnOiAnWDg2JywgJzE3JzogJ1g2NCd9LCBwcmVmaXg9Jy9NQUNISU5FOicpCi0gICAgbGRmbGFncy5leHRlbmQoc2VsZi5fR2V0QWRkaXRpb25hbExpYnJhcnlEaXJlY3RvcmllcygKLSAgICAgICAgJ1ZDTGlua2VyVG9vbCcsIGNvbmZpZywgZ3lwX3RvX2J1aWxkX3BhdGgpKQotICAgIGxkKCdEZWxheUxvYWRETExzJywgcHJlZml4PScvREVMQVlMT0FEOicpCi0gICAgb3V0ID0gc2VsZi5HZXRPdXRwdXROYW1lKGNvbmZpZywgZXhwYW5kX3NwZWNpYWwpCi0gICAgaWYgb3V0OgotICAgICAgbGRmbGFncy5hcHBlbmQoJy9PVVQ6JyArIG91dCkKLSAgICBwZGIgPSBzZWxmLkdldFBEQk5hbWUoY29uZmlnLCBleHBhbmRfc3BlY2lhbCkKLSAgICBpZiBwZGI6Ci0gICAgICBsZGZsYWdzLmFwcGVuZCgnL1BEQjonICsgcGRiKQotICAgIGxkKCdBZGRpdGlvbmFsT3B0aW9ucycsIHByZWZpeD0nJykKLSAgICBsZCgnU3ViU3lzdGVtJywgbWFwPXsnMSc6ICdDT05TT0xFJywgJzInOiAnV0lORE9XUyd9LCBwcmVmaXg9Jy9TVUJTWVNURU06JykKLSAgICBsZCgnTGlua0luY3JlbWVudGFsJywgbWFwPXsnMSc6ICc6Tk8nLCAnMic6ICcnfSwgcHJlZml4PScvSU5DUkVNRU5UQUwnKQotICAgIGxkKCdGaXhlZEJhc2VBZGRyZXNzJywgbWFwPXsnMSc6ICc6Tk8nLCAnMic6ICcnfSwgcHJlZml4PScvRklYRUQnKQotICAgIGxkKCdSYW5kb21pemVkQmFzZUFkZHJlc3MnLAotICAgICAgICBtYXA9eycxJzogJzpOTycsICcyJzogJyd9LCBwcmVmaXg9Jy9EWU5BTUlDQkFTRScpCi0gICAgbGQoJ0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uJywKLSAgICAgICAgbWFwPXsnMSc6ICc6Tk8nLCAnMic6ICcnfSwgcHJlZml4PScvTlhDT01QQVQnKQotICAgIGxkKCdPcHRpbWl6ZVJlZmVyZW5jZXMnLCBtYXA9eycxJzogJ05PUkVGJywgJzInOiAnUkVGJ30sIHByZWZpeD0nL09QVDonKQotICAgIGxkKCdFbmFibGVDT01EQVRGb2xkaW5nJywgbWFwPXsnMSc6ICdOT0lDRicsICcyJzogJ0lDRid9LCBwcmVmaXg9Jy9PUFQ6JykKLSAgICBsZCgnTGlua1RpbWVDb2RlR2VuZXJhdGlvbicsIG1hcD17JzEnOiAnL0xUQ0cnfSkKLSAgICBsZCgnSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcycsIHByZWZpeD0nL05PREVGQVVMVExJQjonKQotICAgIGxkKCdSZXNvdXJjZU9ubHlETEwnLCBtYXA9eyd0cnVlJzogJy9OT0VOVFJZJ30pCi0gICAgbGQoJ0VudHJ5UG9pbnRTeW1ib2wnLCBwcmVmaXg9Jy9FTlRSWTonKQotICAgIGxkKCdQcm9maWxlJywgbWFwPXsgJ3RydWUnOiAnL1BST0ZJTEUnfSkKLSAgICAjIFRPRE8oc2NvdHRtZyk6IFRoaXMgc2hvdWxkIHNvcnQgb2YgYmUgc29tZXdoZXJlIGVsc2UgKG5vdCByZWFsbHkgYSBmbGFnKS4KLSAgICBsZCgnQWRkaXRpb25hbERlcGVuZGVuY2llcycsIHByZWZpeD0nJykKLQotICAgIGlmIG5vdCBjb25maWcuc3RhcnRzd2l0aCgnWEIzNjAnKToKLSAgICAgICMgSWYgdGhlIGJhc2UgYWRkcmVzcyBpcyBub3Qgc3BlY2lmaWNhbGx5IGNvbnRyb2xsZWQsIERZTkFNSUNCQVNFIHNob3VsZAotICAgICAgIyBiZSBvbiBieSBkZWZhdWx0LgotICAgICAgYmFzZV9mbGFncyA9IGZpbHRlcihsYW1iZGEgeDogJ0RZTkFNSUNCQVNFJyBpbiB4IG9yIHggPT0gJy9GSVhFRCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxkZmxhZ3MpCi0gICAgICBpZiBub3QgYmFzZV9mbGFnczoKLSAgICAgICAgbGRmbGFncy5hcHBlbmQoJy9EWU5BTUlDQkFTRScpCi0KLSAgICAgICMgSWYgdGhlIE5YQ09NUEFUIGZsYWcgaGFzIG5vdCBiZWVuIHNwZWNpZmllZCwgZGVmYXVsdCB0byBvbi4gRGVzcGl0ZSB0aGUKLSAgICAgICMgZG9jdW1lbnRhdGlvbiB0aGF0IHNheXMgdGhpcyBvbmx5IGRlZmF1bHRzIHRvIG9uIHdoZW4gdGhlIHN1YnN5c3RlbSBpcwotICAgICAgIyBWaXN0YSBvciBncmVhdGVyICh3aGljaCBhcHBsaWVzIHRvIHRoZSBsaW5rZXIpLCB0aGUgSURFIGRlZmF1bHRzIGl0IG9uCi0gICAgICAjIHVubGVzcyBpdCdzIGV4cGxpY2l0bHkgb2ZmLgotICAgICAgaWYgbm90IGZpbHRlcihsYW1iZGEgeDogJ05YQ09NUEFUJyBpbiB4LCBsZGZsYWdzKToKLSAgICAgICAgbGRmbGFncy5hcHBlbmQoJy9OWENPTVBBVCcpCi0KLSAgICBoYXZlX2RlZl9maWxlID0gZmlsdGVyKGxhbWJkYSB4OiB4LnN0YXJ0c3dpdGgoJy9ERUY6JyksIGxkZmxhZ3MpCi0gICAgbWFuaWZlc3RfZmxhZ3MsIGludGVybWVkaWF0ZV9tYW5pZmVzdF9maWxlID0gc2VsZi5fR2V0TGRNYW5pZmVzdEZsYWdzKAotICAgICAgICBjb25maWcsIG1hbmlmZXN0X2Jhc2VfbmFtZSwgaXNfZXhlY3V0YWJsZSBhbmQgbm90IGhhdmVfZGVmX2ZpbGUpCi0gICAgbGRmbGFncy5leHRlbmQobWFuaWZlc3RfZmxhZ3MpCi0gICAgbWFuaWZlc3RfZmlsZXMgPSBzZWxmLl9HZXRBZGRpdGlvbmFsTWFuaWZlc3RGaWxlcyhjb25maWcsIGd5cF90b19idWlsZF9wYXRoKQotICAgIG1hbmlmZXN0X2ZpbGVzLmFwcGVuZChpbnRlcm1lZGlhdGVfbWFuaWZlc3RfZmlsZSkKLQotICAgIHJldHVybiBsZGZsYWdzLCBtYW5pZmVzdF9maWxlcwotCi0gIGRlZiBfR2V0TGRNYW5pZmVzdEZsYWdzKHNlbGYsIGNvbmZpZywgbmFtZSwgYWxsb3dfaXNvbGF0aW9uKToKLSAgICAiIiJSZXR1cm5zIHRoZSBzZXQgb2YgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBsaW5rIHRvIGdlbmVyYXRlCi0gICAgYSBkZWZhdWx0IG1hbmlmZXN0LCBhcyB3ZWxsIGFzIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgZmlsZS4iIiIKLSAgICBvdXRwdXRfbmFtZSA9IG5hbWUgKyAnLmludGVybWVkaWF0ZS5tYW5pZmVzdCcKLSAgICAjIE1hbmlmZXN0cyBhcmUgb2ZmIGZvciBVV1AuIElmIG5lZWRlZCBieSBhbm90aGVyIHRhcmdldCwKLSAgICAjIHBsZWFzZSBmaW5kIGEgd2F5IHRvIGNvbmZpZ3VyZSB0aGVtIHBlciB0YXJnZXQuCi0gICAgZmxhZ3MgPSBbCi0gICAgICAnL01BTklGRVNUOk5PJywKLSAgICBdCi0gICAgcmV0dXJuIGZsYWdzLCBvdXRwdXRfbmFtZQotCi0gIGRlZiBfR2V0QWRkaXRpb25hbE1hbmlmZXN0RmlsZXMoc2VsZiwgY29uZmlnLCBneXBfdG9fYnVpbGRfcGF0aCk6Ci0gICAgIiIiR2V0cyBhZGRpdGlvbmFsIG1hbmlmZXN0IGZpbGVzIHRoYXQgYXJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IG9uZQotICAgIGdlbmVyYXRlZCBieSB0aGUgbGlua2VyLiIiIgotICAgIGZpbGVzID0gc2VsZi5fU2V0dGluZygoJ1ZDTWFuaWZlc3RUb29sJywgJ0FkZGl0aW9uYWxNYW5pZmVzdEZpbGVzJyksIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSkKLSAgICBpZiAoc2VsZi5fU2V0dGluZygKLSAgICAgICAgKCdWQ01hbmlmZXN0VG9vbCcsICdFbWJlZE1hbmlmZXN0JyksIGNvbmZpZywgZGVmYXVsdD0nJykgPT0gJ3RydWUnKToKLSAgICAgIHByaW50ICdneXAvbXN2c19lbXVsYXRpb24ucHk6ICJFbWJlZE1hbmlmZXN0OiB0cnVlIiBub3QgeWV0IHN1cHBvcnRlZC4nCi0gICAgaWYgaXNpbnN0YW5jZShmaWxlcywgc3RyKToKLSAgICAgIGZpbGVzID0gZmlsZXMuc3BsaXQoJzsnKQotICAgIHJldHVybiBbb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgICAgICAgICBneXBfdG9fYnVpbGRfcGF0aChzZWxmLkNvbnZlcnRWU01hY3JvcyhmLCBjb25maWc9Y29uZmlnKSkpCi0gICAgICAgICAgICBmb3IgZiBpbiBmaWxlc10KLQotICBkZWYgSXNVc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cyhzZWxmLCBjb25maWcpOgotICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgdGFyZ2V0IHNob3VsZCBiZSBsaW5rZWQgdmlhIFVzZSBMaWJyYXJ5IERlcGVuZGVuY3kKLSAgICBJbnB1dHMgKHVzaW5nIGNvbXBvbmVudCAub2JqcyBvZiBhIGdpdmVuIC5saWIpLiIiIgotICAgIGNvbmZpZyA9IHNlbGYuX1RhcmdldENvbmZpZyhjb25maWcpCi0gICAgdWxkaSA9IHNlbGYuX1NldHRpbmcoKCdWQ0xpbmtlclRvb2wnLCAnVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHMnKSwgY29uZmlnKQotICAgIHJldHVybiB1bGRpID09ICd0cnVlJwotCi0gIGRlZiBHZXRSY2ZsYWdzKHNlbGYsIGNvbmZpZywgZ3lwX3RvX25pbmphX3BhdGgpOgotICAgICIiIlJldHVybnMgdGhlIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byBpbnZvY2F0aW9ucyBvZiB0aGUgcmVzb3VyY2UKLSAgICBjb21waWxlci4iIiIKLSAgICBjb25maWcgPSBzZWxmLl9UYXJnZXRDb25maWcoY29uZmlnKQotICAgIHJjZmxhZ3MgPSBbXQotICAgIHJjID0gc2VsZi5fR2V0V3JhcHBlcihzZWxmLCBzZWxmLm1zdnNfc2V0dGluZ3NbY29uZmlnXSwKLSAgICAgICAgJ1ZDUmVzb3VyY2VDb21waWxlclRvb2wnLCBhcHBlbmQ9cmNmbGFncykKLSAgICByYygnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsIG1hcD1neXBfdG9fbmluamFfcGF0aCwgcHJlZml4PScvSScpCi0gICAgcmNmbGFncy5hcHBlbmQoJy9JJyArIGd5cF90b19uaW5qYV9wYXRoKCcuJykpCi0gICAgcmMoJ1ByZXByb2Nlc3NvckRlZmluaXRpb25zJywgcHJlZml4PScvZCcpCi0gICAgIyAvbCBhcmcgbXVzdCBiZSBpbiBoZXggd2l0aG91dCBsZWFkaW5nICcweCcKLSAgICByYygnQ3VsdHVyZScsIHByZWZpeD0nL2wnLCBtYXA9bGFtYmRhIHg6IGhleChpbnQoeCkpWzI6XSkKLSAgICByZXR1cm4gcmNmbGFncwotCi0gIGRlZiBCdWlsZEN5Z3dpbkJhc2hDb21tYW5kTGluZShzZWxmLCBhcmdzLCBwYXRoX3RvX2Jhc2UpOgotICAgICIiIkJ1aWxkIGEgY29tbWFuZCBsaW5lIHRoYXQgcnVucyBhcmdzIHZpYSBjeWd3aW4gYmFzaC4gV2UgYXNzdW1lIHRoYXQgYWxsCi0gICAgaW5jb21pbmcgcGF0aHMgYXJlIGluIFdpbmRvd3Mgbm9ybXBhdGgnZCBmb3JtLCBzbyB0aGV5IG5lZWQgdG8gYmUKLSAgICBjb252ZXJ0ZWQgdG8gcG9zaXggc3R5bGUgZm9yIHRoZSBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUgdGhhdCdzIHBhc3NlZCB0bwotICAgIGJhc2guIFdlIGFsc28gaGF2ZSB0byBkbyBzb21lIFZpc3VhbCBTdHVkaW8gbWFjcm8gZW11bGF0aW9uIGhlcmUgYmVjYXVzZQotICAgIHZhcmlvdXMgcnVsZXMgdXNlIG1hZ2ljIFZTIG5hbWVzIGZvciB0aGluZ3MuIEFsc28gbm90ZSB0aGF0IHJ1bGVzIHRoYXQKLSAgICBjb250YWluIG5pbmphIHZhcmlhYmxlcyBjYW5ub3QgYmUgZml4ZWQgaGVyZSAoZm9yIGV4YW1wbGUgJHtzb3VyY2V9KSwgc28KLSAgICB0aGUgb3V0ZXIgZ2VuZXJhdG9yIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRocyB0aGF0IGFyZSB3cml0dGVuIG91dAotICAgIGFyZSBpbiBwb3NpeCBzdHlsZSwgaWYgdGhlIGNvbW1hbmQgbGluZSB3aWxsIGJlIHVzZWQgaGVyZS4iIiIKLSAgICBjeWd3aW5fZGlyID0gb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgb3MucGF0aC5qb2luKHBhdGhfdG9fYmFzZSwgc2VsZi5tc3ZzX2N5Z3dpbl9kaXJzWzBdKSkKLSAgICBjZCA9ICgnY2QgJXMnICUgcGF0aF90b19iYXNlKS5yZXBsYWNlKCdcXCcsICcvJykKLSAgICBhcmdzID0gW2EucmVwbGFjZSgnXFwnLCAnLycpLnJlcGxhY2UoJyInLCAnXFwiJykgZm9yIGEgaW4gYXJnc10KLSAgICBhcmdzID0gWyInJXMnIiAlIGEucmVwbGFjZSgiJyIsICInXFwnJyIpIGZvciBhIGluIGFyZ3NdCi0gICAgYmFzaF9jbWQgPSAnICcuam9pbihhcmdzKQotICAgIGNtZCA9ICgKLSAgICAgICAgJ2NhbGwgIiVzXFxzZXR1cF9lbnYuYmF0IiAmJiBzZXQgQ1lHV0lOPW5vbnRzZWMgJiYgJyAlIGN5Z3dpbl9kaXIgKwotICAgICAgICAnYmFzaCAtYyAiJXMgOyAlcyInICUgKGNkLCBiYXNoX2NtZCkpCi0gICAgcmV0dXJuIGNtZAotCi0gIGRlZiBJc1J1bGVSdW5VbmRlckN5Z3dpbihzZWxmLCBydWxlKToKLSAgICAiIiJEZXRlcm1pbmUgaWYgYW4gYWN0aW9uIHNob3VsZCBiZSBydW4gdW5kZXIgY3lnd2luLiBJZiB0aGUgdmFyaWFibGUgaXMKLSAgICB1bnNldCwgb3Igc2V0IHRvIDEgd2UgdXNlIGN5Z3dpbi4iIiIKLSAgICB2YWx1ZSA9IGludChydWxlLmdldCgnbXN2c19jeWd3aW5fc2hlbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zcGVjLmdldCgnbXN2c19jeWd3aW5fc2hlbGwnLCAwKSkpICE9IDAKLSAgICBpZiB2YWx1ZToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ3lnd2luIHVzYWdlIGlzIG5vIGxvbmdlciBhbGxvd2VkIGluIENvYmFsdCBHeXAiKQotICAgIHJldHVybiBGYWxzZQotCi0gIGRlZiBfSGFzRXhwbGljaXRSdWxlRm9yRXh0ZW5zaW9uKHNlbGYsIHNwZWMsIGV4dGVuc2lvbik6Ci0gICAgIiIiRGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW4gZXhwbGljaXQgcnVsZSBmb3IgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbi4iIiIKLSAgICBmb3IgcnVsZSBpbiBzcGVjLmdldCgncnVsZXMnLCBbXSk6Ci0gICAgICBpZiBydWxlWydleHRlbnNpb24nXSA9PSBleHRlbnNpb246Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLSAgZGVmIEhhc0V4cGxpY2l0SWRsUnVsZXMoc2VsZiwgc3BlYyk6Ci0gICAgIiIiRGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW4gZXhwbGljaXQgcnVsZSBmb3IgaWRsIGZpbGVzLiBXaGVuIHRoZXJlIGlzbid0IHdlCi0gICAgbmVlZCB0byBnZW5lcmF0ZSBpbXBsaWNpdCBydWxlcyB0byBidWlsZCBNSURMIC5pZGwgZmlsZXMuIiIiCi0gICAgcmV0dXJuIHNlbGYuX0hhc0V4cGxpY2l0UnVsZUZvckV4dGVuc2lvbihzcGVjLCAnaWRsJykKLQotICBkZWYgSGFzRXhwbGljaXRBc21SdWxlcyhzZWxmLCBzcGVjKToKLSAgICAiIiJEZXRlcm1pbmUgaWYgdGhlcmUncyBhbiBleHBsaWNpdCBydWxlIGZvciBhc20gZmlsZXMuIFdoZW4gdGhlcmUgaXNuJ3Qgd2UKLSAgICBuZWVkIHRvIGdlbmVyYXRlIGltcGxpY2l0IHJ1bGVzIHRvIGFzc2VtYmxlIC5hc20gZmlsZXMuIiIiCi0gICAgcmV0dXJuIHNlbGYuX0hhc0V4cGxpY2l0UnVsZUZvckV4dGVuc2lvbihzcGVjLCAnYXNtJykKLQotICBkZWYgR2V0SWRsQnVpbGREYXRhKHNlbGYsIHNvdXJjZSwgY29uZmlnKToKLSAgICAiIiJEZXRlcm1pbmUgdGhlIGltcGxpY2l0IG91dHB1dHMgZm9yIGFuIGlkbCBmaWxlLiBSZXR1cm5zIG91dHB1dAotICAgIGRpcmVjdG9yeSwgb3V0cHV0cywgYW5kIHZhcmlhYmxlcyBhbmQgZmxhZ3MgdGhhdCBhcmUgcmVxdWlyZWQuIiIiCi0gICAgY29uZmlnID0gc2VsZi5fVGFyZ2V0Q29uZmlnKGNvbmZpZykKLSAgICBtaWRsX2dldCA9IHNlbGYuX0dldFdyYXBwZXIoc2VsZiwgc2VsZi5tc3ZzX3NldHRpbmdzW2NvbmZpZ10sICdWQ01JRExUb29sJykKLSAgICBkZWYgbWlkbChuYW1lLCBkZWZhdWx0PU5vbmUpOgotICAgICAgcmV0dXJuIHNlbGYuQ29udmVydFZTTWFjcm9zKG1pZGxfZ2V0KG5hbWUsIGRlZmF1bHQ9ZGVmYXVsdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPWNvbmZpZykKLSAgICBpZiBjb25maWcuc3RhcnRzd2l0aCgneGIxJyk6Ci0gICAgICB0bGIgPSAnJwotICAgICAgaGVhZGVyID0gbWlkbCgnSGVhZGVyRmlsZU5hbWUnLCBkZWZhdWx0PScke3Jvb3R9LmgnKQotICAgICAgZGxsZGF0YSA9ICcnCi0gICAgICBpaWQgPSAnJwotICAgICAgcHJveHkgPSAnJwotICAgICAgb3V0ZGlyID0gbWlkbCgnT3V0cHV0RGlyZWN0b3J5JywgZGVmYXVsdD0nJykKLSAgICBlbHNlOgotICAgICAgdGxiID0gbWlkbCgnVHlwZUxpYnJhcnlOYW1lJywgZGVmYXVsdD0nJHtyb290fS50bGInKQotICAgICAgaGVhZGVyID0gbWlkbCgnSGVhZGVyRmlsZU5hbWUnLCBkZWZhdWx0PScke3Jvb3R9LmgnKQotICAgICAgZGxsZGF0YSA9IG1pZGwoJ0RMTERhdGFGaWxlTmFtZScsIGRlZmF1bHQ9J2RsbGRhdGEuYycpCi0gICAgICBpaWQgPSBtaWRsKCdJbnRlcmZhY2VJZGVudGlmaWVyRmlsZU5hbWUnLCBkZWZhdWx0PScke3Jvb3R9X2kuYycpCi0gICAgICBwcm94eSA9IG1pZGwoJ1Byb3h5RmlsZU5hbWUnLCBkZWZhdWx0PScke3Jvb3R9X3AuYycpCi0gICAgICAjIE5vdGUgdGhhdCAudGxiIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0cyBhcyBpdCBpcyBub3QgYWx3YXlzCi0gICAgICAjIGdlbmVyYXRlZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IGlkbCBmaWxlLgotICAgICAgb3V0ZGlyID0gbWlkbCgnT3V0cHV0RGlyZWN0b3J5JywgZGVmYXVsdD0nJykKLSAgICBpZiBjb25maWcuc3RhcnRzd2l0aCgneGIxJyk6Ci0gICAgICBvdXRwdXQgPSBbaGVhZGVyXQotICAgIGVsc2U6Ci0gICAgICBvdXRwdXQgPSBbaGVhZGVyLCBkbGxkYXRhLCBpaWQsIHByb3h5XQotICAgIHZhcmlhYmxlcyA9IFsoJ3RsYicsIHRsYiksCi0gICAgICAgICAgICAgICAgICgnaCcsIGhlYWRlciksCi0gICAgICAgICAgICAgICAgICgnZGxsZGF0YScsIGRsbGRhdGEpLAotICAgICAgICAgICAgICAgICAoJ2lpZCcsIGlpZCksCi0gICAgICAgICAgICAgICAgICgncHJveHknLCBwcm94eSldCi0gICAgaWYgY29uZmlnLnN0YXJ0c3dpdGgoJ3hiMScpOgotICAgICAgbWV0YWRhdGFfZGlyID0gJyIlcyVzIicgJSAoJ0M6XFxQcm9ncmFtIEZpbGVzICh4ODYpXFxXaW5kb3dzIEtpdHNcXDEwXFwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuaW9uTWV0YWRhdGEnKQotICAgICAgZmxhZ3MgPSBbJy9lbnYnLCAneDY0JywgJy9XMScsICcvY2hhcicsICdzaWduZWQnLCAnL2VudW1fY2xhc3MnLAotICAgICAgICAgICAgICAgJy9tZXRhZGF0YV9kaXInLCBtZXRhZGF0YV9kaXIsICcvbm90bGInLCAnL3dpbnJ0J10KLSAgICBlbHNlOgotICAgICAgIyBUT0RPKHNjb3R0bWcpOiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBzZXQgdGhlc2UgZmxhZ3M/Ci0gICAgICBmbGFncyA9IFsnL2NoYXInLCAnc2lnbmVkJywgJy9lbnYnLCAnd2luMzInLCAnL09pY2YnXQotICAgIHJldHVybiBvdXRkaXIsIG91dHB1dCwgdmFyaWFibGVzLCBmbGFncwotCi0KLWRlZiBfTGFuZ3VhZ2VNYXRjaGVzRm9yUGNoKHNvdXJjZV9leHQsIHBjaF9zb3VyY2VfZXh0KToKLSAgY19leHRzID0gKCcuYycsKQotICBjY19leHRzID0gKCcuY2MnLCAnLmN4eCcsICcuY3BwJykKLSAgcmV0dXJuICgoc291cmNlX2V4dCBpbiBjX2V4dHMgYW5kIHBjaF9zb3VyY2VfZXh0IGluIGNfZXh0cykgb3IKLSAgICAgICAgICAoc291cmNlX2V4dCBpbiBjY19leHRzIGFuZCBwY2hfc291cmNlX2V4dCBpbiBjY19leHRzKSkKLQotCi1jbGFzcyBQcmVjb21waWxlZEhlYWRlcihvYmplY3QpOgotICAiIiJIZWxwZXIgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyB0byBoYW5kbGUgZ2VuZXJhdGlvbiBvZgotICBwcmVjb21waWxlZCBoZWFkZXJzLiBJbnRlcmZhY2UgbWF0Y2hlcyB0aGUgR0NIIGhhbmRsZXIgaW4geGNvZGVfZW11bGF0aW9uLnB5LgotICAiIiIKLSAgZGVmIF9faW5pdF9fKAotICAgICAgc2VsZiwgc2V0dGluZ3MsIGNvbmZpZywgZ3lwX3RvX2J1aWxkX3BhdGgsIGd5cF90b191bmlxdWVfb3V0cHV0LCBvYmpfZXh0KToKLSAgICBzZWxmLnNldHRpbmdzID0gc2V0dGluZ3MKLSAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwotICAgIHBjaF9zb3VyY2UgPSBzZWxmLnNldHRpbmdzLm1zdnNfcHJlY29tcGlsZWRfc291cmNlW3NlbGYuY29uZmlnXQotICAgIHNlbGYucGNoX3NvdXJjZSA9IGd5cF90b19idWlsZF9wYXRoKHBjaF9zb3VyY2UpCi0gICAgZmlsZW5hbWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KHBjaF9zb3VyY2UpCi0gICAgc2VsZi5vdXRwdXRfb2JqID0gZ3lwX3RvX3VuaXF1ZV9vdXRwdXQoZmlsZW5hbWUgKyBvYmpfZXh0KS5sb3dlcigpCi0KLSAgZGVmIF9QY2hIZWFkZXIoc2VsZik6Ci0gICAgIiIiR2V0IHRoZSBoZWFkZXIgdGhhdCB3aWxsIGFwcGVhciBpbiBhbiAjaW5jbHVkZSBsaW5lIGZvciBhbGwgc291cmNlCi0gICAgZmlsZXMuIiIiCi0gICAgcmV0dXJuIG9zLnBhdGguc3BsaXQoc2VsZi5zZXR0aW5ncy5tc3ZzX3ByZWNvbXBpbGVkX2hlYWRlcltzZWxmLmNvbmZpZ10pWzFdCi0KLSAgZGVmIEdldE9iakRlcGVuZGVuY2llcyhzZWxmLCBzb3VyY2VzLCBvYmpzKToKLSAgICAiIiJHaXZlbiBhIGxpc3Qgb2Ygc291cmNlcyBmaWxlcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGZpbGVzLAotICAgIHJldHVybnMgYSBsaXN0IG9mIHRoZSBwY2ggZmlsZXMgdGhhdCBzaG91bGQgYmUgZGVwZW5kZWQgdXBvbi4gVGhlCi0gICAgYWRkaXRpb25hbCB3cmFwcGluZyBpbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZvciBpbnRlcmZhY2UgY29tcGF0YWJpbGl0eQotICAgIHdpdGggbWFrZS5weSBvbiBNYWMsIGFuZCB4Y29kZV9lbXVsYXRpb24ucHkuIiIiCi0gICAgaWYgbm90IHNlbGYuX1BjaEhlYWRlcigpOgotICAgICAgcmV0dXJuIFtdCi0gICAgcGNoX2V4dCA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5wY2hfc291cmNlKVsxXQotICAgIGZvciBzb3VyY2UgaW4gc291cmNlczoKLSAgICAgIGlmIF9MYW5ndWFnZU1hdGNoZXNGb3JQY2gob3MucGF0aC5zcGxpdGV4dChzb3VyY2UpWzFdLCBwY2hfZXh0KToKLSAgICAgICAgcmV0dXJuIFsoTm9uZSwgTm9uZSwgc2VsZi5vdXRwdXRfb2JqKV0KLSAgICByZXR1cm4gW10KLQotICBkZWYgR2V0UGNoQnVpbGRDb21tYW5kcyhzZWxmKToKLSAgICAiIiJOb3QgdXNlZCBvbiBXaW5kb3dzIGFzIHRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGJ1aWxkIHN0ZXBzIHJlcXVpcmVkCi0gICAgKGluc3RlYWQsIGV4aXN0aW5nIHN0ZXBzIGFyZSBtb2RpZmllZCBpbiBHZXRGbGFnc01vZGlmaWNhdGlvbnMgYmVsb3cpLiIiIgotICAgIHJldHVybiBbXQotCi0gIGRlZiBHZXRGbGFnc01vZGlmaWNhdGlvbnMoc2VsZiwgaW5wdXQsIG91dHB1dCwgaW1wbGljaXQsIGNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZsYWdzX2MsIGNmbGFnc19jYywgZXhwYW5kX3NwZWNpYWwpOgotICAgICIiIkdldCB0aGUgbW9kaWZpZWQgY2ZsYWdzIGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgYmUgdXNlZAotICAgIGZvciB0aGUgcGNoIGNvbXBpbGF0aW9uIHN0ZXAuIiIiCi0KLSAgICBpZiBzZWxmLnNldHRpbmdzLlVzZXNDb21wb25lbnRFeHRlbnNpb25zKHNlbGYuY29uZmlnKToKLSAgICAgICMgTm8tb3AgaWYgY29tcG9uZW50IGV4dGVuc2lvbnMgYXJlIHVzZWQuCi0gICAgICByZXR1cm4gW10sIG91dHB1dCwgW10KLQotICAgIGlmIGlucHV0ID09IHNlbGYucGNoX3NvdXJjZToKLSAgICAgIHBjaF9vdXRwdXQgPSBbJy9ZYycgKyBzZWxmLl9QY2hIZWFkZXIoKV0KLSAgICAgIGlmIGNvbW1hbmQgPT0gJ2N4eCc6Ci0gICAgICAgIHJldHVybiAoWygnY2ZsYWdzX2NjJywgbWFwKGV4cGFuZF9zcGVjaWFsLCBjZmxhZ3NfY2MgKyBwY2hfb3V0cHV0KSldLAotICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X29iaiwgW10pCi0gICAgICBlbGlmIGNvbW1hbmQgPT0gJ2NjJzoKLSAgICAgICAgcmV0dXJuIChbKCdjZmxhZ3NfYycsIG1hcChleHBhbmRfc3BlY2lhbCwgY2ZsYWdzX2MgKyBwY2hfb3V0cHV0KSldLAotICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X29iaiwgW10pCi0gICAgcmV0dXJuIFtdLCBvdXRwdXQsIGltcGxpY2l0Ci0KLQotdnNfdmVyc2lvbiA9IE5vbmUKLWRlZiBHZXRWU1ZlcnNpb24oZ2VuZXJhdG9yX2ZsYWdzKToKLSAgZ2xvYmFsIHZzX3ZlcnNpb24KLSAgaWYgbm90IHZzX3ZlcnNpb246Ci0gICAgdnNfdmVyc2lvbiA9IGd5cC5NU1ZTVmVyc2lvbi5TZWxlY3RWaXN1YWxTdHVkaW9WZXJzaW9uKAotICAgICAgICBnZW5lcmF0b3JfZmxhZ3MuZ2V0KCdtc3ZzX3ZlcnNpb24nLCAnYXV0bycpKQotICByZXR1cm4gdnNfdmVyc2lvbgotCi1kZWYgX0dldFZzdmFyc1NldHVwQXJncyhnZW5lcmF0b3JfZmxhZ3MsIGFyY2gpOgotICB2cyA9IEdldFZTVmVyc2lvbihnZW5lcmF0b3JfZmxhZ3MpCi0gIHJldHVybiB2cy5TZXR1cFNjcmlwdCgpCi0KLWRlZiBFeHBhbmRNYWNyb3Moc3RyaW5nLCBleHBhbnNpb25zKToKLSAgIiIiRXhwYW5kICQoVmFyaWFibGUpIHBlciBleHBhbnNpb25zIGRpY3QuIFNlZSBNc3ZzU2V0dGluZ3MuR2V0VlNNYWNyb0VudgotICBmb3IgdGhlIGNhbm9uaWNhbCB3YXkgdG8gcmV0cmlldmUgYSBzdWl0YWJsZSBkaWN0LiIiIgotICBpZiAnJCcgaW4gc3RyaW5nOgotICAgIGZvciBvbGQsIG5ldyBpbiBleHBhbnNpb25zLml0ZXJpdGVtcygpOgotICAgICAgYXNzZXJ0ICckKCcgbm90IGluIG5ldywgbmV3Ci0gICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShvbGQsIG5ldykKLSAgcmV0dXJuIHN0cmluZwotCi1kZWYgX0V4dHJhY3RJbXBvcnRhbnRFbnZpcm9ubWVudChvdXRwdXRfb2Zfc2V0KToKLSAgIiIiRXh0cmFjdHMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlcXVpcmVkIGZvciB0aGUgdG9vbGNoYWluIHRvIHJ1biBmcm9tCi0gIGEgdGV4dHVhbCBkdW1wIG91dHB1dCBieSB0aGUgY21kLmV4ZSAnc2V0JyBjb21tYW5kLiIiIgotICBlbnZ2YXJzX3RvX3NhdmUgPSAoCi0gICAgICAnZHVyYW5nb3hkaycsCi0gICAgICAnZ29tYV8uKicsICMgVE9ETyhzY290dG1nKTogVGhpcyBpcyB1Z2x5LCBidXQgbmVlZGVkIGZvciBnb21hLgotICAgICAgJ2luY2x1ZGUnLAotICAgICAgJ2xpYicsCi0gICAgICAnbGlicGF0aCcsCi0gICAgICAncGF0aCcsCi0gICAgICAncGF0aGV4dCcsCi0gICAgICAnc3lzdGVtcm9vdCcsCi0gICAgICAndGVtcCcsCi0gICAgICAndG1wJywKLSAgICAgICd4ZWRrJywKLSAgICAgICdjZWxsXy4qJywKLSAgICAgICdzbl8uKicsCi0gICAgICAnc2NlXy4qJywKLSAgICAgICdpc19kb2NrZXInLCAjIG5lZWRlZCBmb3IgbmluamEgdG8gaW52b2tlIGRvY2tlci1zcGVjaWZpYyBsb2dpYwotICAgICAgJ2lzX2NpJywgICAgICMgbmVlZGVkIGZvciBuaW5qYSB0byBleGxjdWRlIHNvbWUgbG9naWMgb24gR0tFCi0gICkKLSAgZW52ID0ge30KLSAgZm9yIGxpbmUgaW4gb3V0cHV0X29mX3NldC5zcGxpdGxpbmVzKCk6Ci0gICAgZm9yIGVudnZhciBpbiBlbnZ2YXJzX3RvX3NhdmU6Ci0gICAgICBpZiByZS5tYXRjaChlbnZ2YXIgKyAnPScsIGxpbmUubG93ZXIoKSk6Ci0gICAgICAgIHZhciwgc2V0dGluZyA9IGxpbmUuc3BsaXQoJz0nLCAxKQotICAgICAgICBpZiBlbnZ2YXIgPT0gJ3BhdGgnOgotICAgICAgICAgICMgT3VyIG93biBydWxlcyAoZm9yIHJ1bm5pbmcgZ3lwLXdpbi10b29sKSBhbmQgb3RoZXIgYWN0aW9ucyBpbgotICAgICAgICAgICMgQ2hyb21pdW0gcmVseSBvbiBweXRob24gYmVpbmcgaW4gdGhlIHBhdGguIEFkZCB0aGUgcGF0aCB0byB0aGlzCi0gICAgICAgICAgIyBweXRob24gaGVyZSBzbyB0aGF0IGlmIGl0J3Mgbm90IGluIHRoZSBwYXRoIHdoZW4gbmluamEgaXMgcnVuCi0gICAgICAgICAgIyBsYXRlciwgcHl0aG9uIHdpbGwgc3RpbGwgYmUgZm91bmQuCi0gICAgICAgICAgc2V0dGluZyA9IG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSkgKyAnOycgKyBzZXR0aW5nCi0gICAgICAgIGVudlt2YXIudXBwZXIoKV0gPSBzZXR0aW5nCi0gICAgICAgIGJyZWFrCi0gIGZvciByZXF1aXJlZCBpbiAoJ1NZU1RFTVJPT1QnLCAnVEVNUCcsICdUTVAnKToKLSAgICBpZiByZXF1aXJlZCBub3QgaW4gZW52OgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdFbnZpcm9ubWVudCB2YXJpYWJsZSAiJXMiICcKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZWQgdG8gYmUgc2V0IHRvIHZhbGlkIHBhdGgnICUgcmVxdWlyZWQpCi0gIHJldHVybiBlbnYKLQotZGVmIF9Gb3JtYXRBc0Vudmlyb25tZW50QmxvY2soZW52dmFyX2RpY3QpOgotICAiIiJGb3JtYXQgYXMgYW4gJ2Vudmlyb25tZW50IGJsb2NrJyBkaXJlY3RseSBzdWl0YWJsZSBmb3IgQ3JlYXRlUHJvY2Vzcy4KLSAgQnJpZWZseSB0aGlzIGlzIGEgbGlzdCBvZiBrZXk9dmFsdWVcMCwgdGVybWluYXRlZCBieSBhbiBhZGRpdGlvbmFsIFwwLiBTZWUKLSAgQ3JlYXRlUHJvY2VzcyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuIiIiCi0gIGJsb2NrID0gJycKLSAgbnVsID0gJ1wwJwotICBmb3Iga2V5LCB2YWx1ZSBpbiBlbnZ2YXJfZGljdC5pdGVyaXRlbXMoKToKLSAgICBibG9jayArPSBrZXkgKyAnPScgKyB2YWx1ZSArIG51bAotICBibG9jayArPSBudWwKLSAgcmV0dXJuIGJsb2NrCi0KLWRlZiBHZW5lcmF0ZUVudmlyb25tZW50RmlsZXModG9wbGV2ZWxfYnVpbGRfZGlyLCBnZW5lcmF0b3JfZmxhZ3MsIG9wZW5fb3V0KToKLSAgIiIiSXQncyBub3Qgc3VmZmljaWVudCB0byBoYXZlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb21waWxlciwgbGlua2VyLAotICBldGMuIG9uIFdpbmRvd3MsIGFzIHRob3NlIHRvb2xzIHJlbHkgb24gLmRsbHMgYmVpbmcgaW4gdGhlIFBBVEguIFdlIGFsc28KLSAgbmVlZCB0byBzdXBwb3J0IGJvdGggeDg2IGFuZCB4NjQgY29tcGlsZXJzIHdpdGhpbiB0aGUgc2FtZSBidWlsZCAodG8gc3VwcG9ydAotICBtc3ZzX3RhcmdldF9wbGF0Zm9ybSBoYWNrZXJ5KS4gRGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhIGRpZmZlcmVudAotICBjb21waWxlciBiaW5hcnksIGFuZCBkaWZmZXJlbnQgc3VwcG9ydGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKElOQ0xVREUsCi0gIExJQiwgTElCUEFUSCkuIFNvLCB3ZSBleHRyYWN0IHRoZSBlbnZpcm9ubWVudCBoZXJlLCB3cmFwIGFsbCBpbnZvY2F0aW9ucwotICBvZiBjb21waWxlciB0b29scyAoY2wsIGxpbmssIGxpYiwgcmMsIG1pZGwsIGV0Yy4pIHZpYSB3aW5fdG9vbC5weSB3aGljaAotICBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCwgYW5kIHRoZW4gd2UgZG8gbm90IHByZWZpeCB0aGUgY29tcGlsZXIgd2l0aAotICBhbiBhYnNvbHV0ZSBwYXRoLCBpbnN0ZWFkIHByZWZlcnJpbmcgc29tZXRoaW5nIGxpa2UgImNsLmV4ZSIgaW4gdGhlIHJ1bGUKLSAgd2hpY2ggd2lsbCB0aGVuIHJ1biB3aGljaGV2ZXIgdGhlIGVudmlyb25tZW50IHNldHVwIGhhcyBwdXQgaW4gdGhlIHBhdGguIiIiCi0gIHZzID0gR2V0VlNWZXJzaW9uKGdlbmVyYXRvcl9mbGFncykKLSAgZm9yIGFyY2ggaW4gKCd4ODYnLCAneDY0Jyk6Ci0gICAgYXJncyA9IHZzLlNldHVwU2NyaXB0KGFyY2gpCi0gICAgYXJncy5leHRlbmQoKCcmJicsICdzZXQnKSkKLSAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgIGFyZ3MsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICB2YXJpYWJsZXMsIF8gPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgZW52ID0gX0V4dHJhY3RJbXBvcnRhbnRFbnZpcm9ubWVudCh2YXJpYWJsZXMpCi0gICAgZW52X2Jsb2NrID0gX0Zvcm1hdEFzRW52aXJvbm1lbnRCbG9jayhlbnYpCi0gICAgZiA9IG9wZW5fb3V0KG9zLnBhdGguam9pbih0b3BsZXZlbF9idWlsZF9kaXIsICdlbnZpcm9ubWVudC4nICsgYXJjaCksICd3YicpCi0gICAgZi53cml0ZShlbnZfYmxvY2spCi0gICAgZi5jbG9zZSgpCi0KLWRlZiBHZW5lcmF0ZVhCMUVudmlyb25tZW50RmlsZXModG9wbGV2ZWxfYnVpbGRfZGlyLCBnZW5lcmF0b3JfZmxhZ3MsIG9wZW5fb3V0KToKLSAgIiIiSXQncyBub3Qgc3VmZmljaWVudCB0byBoYXZlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBjb21waWxlciwgbGlua2VyLAotICBldGMuIG9uIFdpbmRvd3MsIGFzIHRob3NlIHRvb2xzIHJlbHkgb24gLmRsbHMgYmVpbmcgaW4gdGhlIFBBVEguIERpZmZlcmVudAotICBhcmNoaXRlY3R1cmVzIHJlcXVpcmUgYSBkaWZmZXJlbnQgY29tcGlsZXIgYmluYXJ5LCBhbmQgZGlmZmVyZW50IHN1cHBvcnRpbmcKLSAgZW52aXJvbm1lbnQgdmFyaWFibGVzIChJTkNMVURFLCBMSUIsIExJQlBBVEgpLiBTbywgd2UgZXh0cmFjdCB0aGUgZW52aXJvbm1lbnQKLSAgaGVyZSwgd3JhcCBhbGwgaW52b2NhdGlvbnMgb2YgY29tcGlsZXIgdG9vbHMgKGNsLCBsaW5rLCBsaWIsIHJjLCBtaWRsLCBldGMuKQotICB2aWEgd2luX3Rvb2wucHkgd2hpY2ggc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQsIGFuZCB0aGVuIHdlIGRvIG5vdCBwcmVmaXggdGhlCi0gIGNvbXBpbGVyIHdpdGggYW4gYWJzb2x1dGUgcGF0aCwgaW5zdGVhZCBwcmVmZXJyaW5nIHNvbWV0aGluZyBsaWtlICJjbC5leGUiIGluCi0gIHRoZSBydWxlIHdoaWNoIHdpbGwgdGhlbiBydW4gd2hpY2hldmVyIHRoZSBlbnZpcm9ubWVudCBzZXR1cCBoYXMgcHV0IGluIHRoZQotICBwYXRoLiIiIgotICBhcmNoID0gJ3g2NCcKLQotICAjIEdldCB0aGUgZG9zIGVudmlyb25tZW50IHZpYSBzZXQ6Ci0gICMgVXNlIGNtZCAvYyB0byBleGVjdXRlIHVuZGVyIG5hdGl2ZSB3aW5kb3dzIGNvbW1hbmQKLSAgYXJncyAgPSAnc2V0JwotCi0gIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbigKLSAgICAgIGFyZ3MsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgdmFyaWFibGVzLCBfID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICBlbnYgPSBfRXh0cmFjdEltcG9ydGFudEVudmlyb25tZW50KHZhcmlhYmxlcykKLSAgZW52X2Jsb2NrID0gX0Zvcm1hdEFzRW52aXJvbm1lbnRCbG9jayhlbnYpCi0gIGYgPSBvcGVuX291dChvcy5wYXRoLmpvaW4odG9wbGV2ZWxfYnVpbGRfZGlyLCAnZW52aXJvbm1lbnQuJyArIGFyY2gpLCAnd2InKQotICBmLndyaXRlKGVudl9ibG9jaykKLSAgZi5jbG9zZSgpCi0KLWRlZiBHZW5lcmF0ZVhCMzYwRW52aXJvbm1lbnRGaWxlcyh0b3BsZXZlbF9idWlsZF9kaXIsIGdlbmVyYXRvcl9mbGFncywgb3Blbl9vdXQpOgotICAiIiJJdCdzIG5vdCBzdWZmaWNpZW50IHRvIGhhdmUgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNvbXBpbGVyLCBsaW5rZXIsCi0gIGV0Yy4gb24gV2luZG93cywgYXMgdGhvc2UgdG9vbHMgcmVseSBvbiAuZGxscyBiZWluZyBpbiB0aGUgUEFUSC4gRGlmZmVyZW50Ci0gIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBhIGRpZmZlcmVudCBjb21waWxlciBiaW5hcnksIGFuZCBkaWZmZXJlbnQgc3VwcG9ydGluZwotICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKElOQ0xVREUsIExJQiwgTElCUEFUSCkuIFNvLCB3ZSBleHRyYWN0IHRoZSBlbnZpcm9ubWVudAotICBoZXJlLCB3cmFwIGFsbCBpbnZvY2F0aW9ucyBvZiBjb21waWxlciB0b29scyAoY2wsIGxpbmssIGxpYiwgcmMsIG1pZGwsIGV0Yy4pCi0gIHZpYSB3aW5fdG9vbC5weSB3aGljaCBzZXRzIHVwIHRoZSBlbnZpcm9ubWVudCwgYW5kIHRoZW4gd2UgZG8gbm90IHByZWZpeCB0aGUKLSAgY29tcGlsZXIgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoLCBpbnN0ZWFkIHByZWZlcnJpbmcgc29tZXRoaW5nIGxpa2UgImNsLmV4ZSIgaW4KLSAgdGhlIHJ1bGUgd2hpY2ggd2lsbCB0aGVuIHJ1biB3aGljaGV2ZXIgdGhlIGVudmlyb25tZW50IHNldHVwIGhhcyBwdXQgaW4gdGhlCi0gIHBhdGguIiIiCi0gICMgVE9ETzogU3dpdGNoIHRvICdwcGMnIGFuZCBob3BlIGhhdm9jIGlzIG5vdCBwcmVjaXBpdGF0ZWQuCi0gIGFyY2ggPSAneDg2JwotCi0gIHZzX2FyZ3MgPSBbCi0gICAgICBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJy4uJywgJy4uJywgJy4uJywgJy4uJywKLSAgICAgICAgICAnbGJzaGVsbCcsICdidWlsZCcsICdwbGF0Zm9ybXMnLCAneGJveGFka3ZhcnMuY21kJyksCi0gIF0KLSAgIyBVc2luZyBjeWd3aW4gcHl0aG9uIHNvIHRoZXJlIGlzIGEgYml0IG9mIHdyYXBwaW5nIGRvbmUgdG8gZ2V0IHRoZQotICAjIGRvcyBlbnZpcm9ubWVudCB2aWEgc2V0OgotICAjIFVzZSBjbWQgL2MgdG8gZXhlY3V0ZSB1bmRlciBuYXRpdmUgd2luZG93cyBjb21tYW5kCi0gIGFyZ3NfY21kICA9ICdjbWQgL2MgJwotICAjIENvbnZlcnQgdGhlIGN5Z3dpbiBwYXRoIGkuZS4gL2N5Z2RyaXZlL2MgLi4gdG8gQzpcIC4uCi0gIGFyZ3NfYmF0ICA9ICdcImBjeWdwYXRoIC1kIFwnJyArIHZzX2FyZ3NbMF0gKyAnXCdgICcKLSAgIyBDcmVhdGUgYSBsaXN0IG9mIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIHRvIHRoZSBiYXQgZmlsZQotICBhcmdzX2FyZ3MgPSAnICcuam9pbih2c19hcmdzWzE6XSkKLSAgYXJnc19zZXQgID0gJyAmJiBzZXRcIicKLQotICBhcmdzID0gYXJnc19jbWQgKyBhcmdzX2JhdCArIGFyZ3NfYXJncyArIGFyZ3Nfc2V0Ci0gIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbigKLSAgICAgIGFyZ3MsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgdmFyaWFibGVzLCBfID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICBlbnYgPSBfRXh0cmFjdEltcG9ydGFudEVudmlyb25tZW50KHZhcmlhYmxlcykKLSAgZW52X2Jsb2NrID0gX0Zvcm1hdEFzRW52aXJvbm1lbnRCbG9jayhlbnYpCi0gIGYgPSBvcGVuX291dChvcy5wYXRoLmpvaW4odG9wbGV2ZWxfYnVpbGRfZGlyLCAnZW52aXJvbm1lbnQuJyArIGFyY2gpLCAnd2InKQotICBmLndyaXRlKGVudl9ibG9jaykKLSAgZi5jbG9zZSgpCi0KLWRlZiBWZXJpZnlNaXNzaW5nU291cmNlcyhzb3VyY2VzLCBidWlsZF9kaXIsIGdlbmVyYXRvcl9mbGFncywgZ3lwX3RvX25pbmphKToKLSAgIiIiRW11bGF0ZSBiZWhhdmlvciBvZiBtc3ZzX2Vycm9yX29uX21pc3Npbmdfc291cmNlcyBwcmVzZW50IGluIHRoZSBtc3ZzCi0gIGdlbmVyYXRvcjogQ2hlY2sgdGhhdCBhbGwgcmVndWxhciBzb3VyY2UgZmlsZXMsIGkuZS4gbm90IGNyZWF0ZWQgYXQgcnVuIHRpbWUsCi0gIGV4aXN0IG9uIGRpc2suIE1pc3NpbmcgZmlsZXMgY2F1c2UgbmVlZGxlc3MgcmVjb21waWxhdGlvbiB3aGVuIGJ1aWxkaW5nIHZpYQotICBWUywgYW5kIHdlIHdhbnQgdGhpcyBjaGVjayB0byBtYXRjaCBmb3IgcGVvcGxlL2JvdHMgdGhhdCBidWlsZCB1c2luZyBuaW5qYSwKLSAgc28gdGhleSdyZSBub3Qgc3VycHJpc2VkIHdoZW4gdGhlIFZTIGJ1aWxkIGZhaWxzLiIiIgotICBpZiBpbnQoZ2VuZXJhdG9yX2ZsYWdzLmdldCgnbXN2c19lcnJvcl9vbl9taXNzaW5nX3NvdXJjZXMnLCAwKSk6Ci0gICAgbm9fc3BlY2lhbHMgPSBmaWx0ZXIobGFtYmRhIHg6ICckJyBub3QgaW4geCwgc291cmNlcykKLSAgICByZWxhdGl2ZSA9IFtvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBneXBfdG9fbmluamEocykpIGZvciBzIGluIG5vX3NwZWNpYWxzXQotICAgIG1pc3NpbmcgPSBmaWx0ZXIobGFtYmRhIHg6IG5vdCBvcy5wYXRoLmV4aXN0cyh4KSwgcmVsYXRpdmUpCi0gICAgaWYgbWlzc2luZzoKLSAgICAgICMgVGhleSdsbCBsb29rIGxpa2Ugb3V0XFJlbGVhc2VcLi5cLi5cc3R1ZmZcdGhpbmdzLmNjLCBzbyBub3JtYWxpemUgdGhlCi0gICAgICAjIHBhdGggZm9yIGEgc2xpZ2h0bHkgbGVzcyBjcmF6eSBsb29raW5nIG91dHB1dC4KLSAgICAgIGNsZWFuZWRfdXAgPSBbb3MucGF0aC5ub3JtcGF0aCh4KSBmb3IgeCBpbiBtaXNzaW5nXQotICAgICAgcmFpc2UgRXhjZXB0aW9uKCdNaXNzaW5nIGlucHV0IGZpbGVzOlxuJXMnICUgJ1xuJy5qb2luKGNsZWFuZWRfdXApKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC9uaW5qYV9zeW50YXgucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL25pbmphX3N5bnRheC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQzOGUzNS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL25pbmphX3N5bnRheC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0jIFRoaXMgZmlsZSBjb21lcyBmcm9tCi0jICAgaHR0cHM6Ly9naXRodWIuY29tL21hcnRpbmUvbmluamEvYmxvYi9tYXN0ZXIvbWlzYy9uaW5qYV9zeW50YXgucHkKLSMgRG8gbm90IGVkaXQhICBFZGl0IHRoZSB1cHN0cmVhbSBvbmUgaW5zdGVhZC4KLQotIiIiUHl0aG9uIG1vZHVsZSBmb3IgZ2VuZXJhdGluZyAubmluamEgZmlsZXMuCi0KLU5vdGUgdGhhdCB0aGlzIGlzIGVtcGhhdGljYWxseSBub3QgYSByZXF1aXJlZCBwaWVjZSBvZiBOaW5qYTsgaXQncwotanVzdCBhIGhlbHBmdWwgdXRpbGl0eSBmb3IgYnVpbGQtZmlsZS1nZW5lcmF0aW9uIHN5c3RlbXMgdGhhdCBhbHJlYWR5Ci11c2UgUHl0aG9uLgotIiIiCi0KLWltcG9ydCB0ZXh0d3JhcAotaW1wb3J0IHJlCi0KLWRlZiBlc2NhcGVfcGF0aCh3b3JkKToKLSAgICByZXR1cm4gd29yZC5yZXBsYWNlKCckICcsJyQkICcpLnJlcGxhY2UoJyAnLCckICcpLnJlcGxhY2UoJzonLCAnJDonKQotCi1jbGFzcyBXcml0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0LCB3aWR0aD03OCk6Ci0gICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0Ci0gICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAotCi0gICAgZGVmIG5ld2xpbmUoc2VsZik6Ci0gICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbicpCi0KLSAgICBkZWYgY29tbWVudChzZWxmLCB0ZXh0KToKLSAgICAgICAgZm9yIGxpbmUgaW4gdGV4dHdyYXAud3JhcCh0ZXh0LCBzZWxmLndpZHRoIC0gMik6Ci0gICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnIyAnICsgbGluZSArICdcbicpCi0KLSAgICBkZWYgdmFyaWFibGUoc2VsZiwga2V5LCB2YWx1ZSwgaW5kZW50PTApOgotICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgICAgICAgdmFsdWUgPSAnICcuam9pbihmaWx0ZXIoTm9uZSwgdmFsdWUpKSAgIyBGaWx0ZXIgb3V0IGVtcHR5IHN0cmluZ3MuCi0gICAgICAgIHNlbGYuX2xpbmUoJyVzID0gJXMnICUgKGtleSwgdmFsdWUpLCBpbmRlbnQpCi0KLSAgICBkZWYgcG9vbChzZWxmLCBuYW1lLCBkZXB0aCk6Ci0gICAgICAgIHNlbGYuX2xpbmUoJ3Bvb2wgJXMnICUgbmFtZSkKLSAgICAgICAgc2VsZi52YXJpYWJsZSgnZGVwdGgnLCBkZXB0aCwgaW5kZW50PTEpCi0KLSAgICBkZWYgcnVsZShzZWxmLCBuYW1lLCBjb21tYW5kLCBkZXNjcmlwdGlvbj1Ob25lLCBkZXBmaWxlPU5vbmUsCi0gICAgICAgICAgICAgZGVwZm9ybWF0PU5vbmUsIGdlbmVyYXRvcj1GYWxzZSwgcG9vbD1Ob25lLAotICAgICAgICAgICAgIHJlc3RhdD1GYWxzZSwgcnNwZmlsZT1Ob25lLCByc3BmaWxlX2NvbnRlbnQ9Tm9uZSwKLSAgICAgICAgICAgICBkZXBzPU5vbmUpOgotICAgICAgICBzZWxmLl9saW5lKCdydWxlICVzJyAlIG5hbWUpCi0gICAgICAgIHNlbGYudmFyaWFibGUoJ2NvbW1hbmQnLCBjb21tYW5kLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgZGVzY3JpcHRpb246Ci0gICAgICAgICAgICBzZWxmLnZhcmlhYmxlKCdkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgZGVwZmlsZToKLSAgICAgICAgICAgIHNlbGYudmFyaWFibGUoJ2RlcGZpbGUnLCBkZXBmaWxlLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgZGVwZm9ybWF0OgotICAgICAgICAgICAgc2VsZi52YXJpYWJsZSgnZGVwZm9ybWF0JywgZGVwZm9ybWF0LCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgZ2VuZXJhdG9yOgotICAgICAgICAgICAgc2VsZi52YXJpYWJsZSgnZ2VuZXJhdG9yJywgJzEnLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgcG9vbDoKLSAgICAgICAgICAgIHNlbGYudmFyaWFibGUoJ3Bvb2wnLCBwb29sLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgcmVzdGF0OgotICAgICAgICAgICAgc2VsZi52YXJpYWJsZSgncmVzdGF0JywgJzEnLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgcnNwZmlsZToKLSAgICAgICAgICAgIHNlbGYudmFyaWFibGUoJ3JzcGZpbGUnLCByc3BmaWxlLCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgcnNwZmlsZV9jb250ZW50OgotICAgICAgICAgICAgc2VsZi52YXJpYWJsZSgncnNwZmlsZV9jb250ZW50JywgcnNwZmlsZV9jb250ZW50LCBpbmRlbnQ9MSkKLSAgICAgICAgaWYgZGVwczoKLSAgICAgICAgICAgIHNlbGYudmFyaWFibGUoJ2RlcHMnLCBkZXBzLCBpbmRlbnQ9MSkKLQotICAgIGRlZiBidWlsZChzZWxmLCBvdXRwdXRzLCBydWxlLCBpbnB1dHM9Tm9uZSwgaW1wbGljaXQ9Tm9uZSwgb3JkZXJfb25seT1Ob25lLAotICAgICAgICAgICAgICB2YXJpYWJsZXM9Tm9uZSk6Ci0gICAgICAgIG91dHB1dHMgPSBzZWxmLl9hc19saXN0KG91dHB1dHMpCi0gICAgICAgIGFsbF9pbnB1dHMgPSBzZWxmLl9hc19saXN0KGlucHV0cylbOl0KLSAgICAgICAgb3V0X291dHB1dHMgPSBsaXN0KG1hcChlc2NhcGVfcGF0aCwgb3V0cHV0cykpCi0gICAgICAgIGFsbF9pbnB1dHMgPSBsaXN0KG1hcChlc2NhcGVfcGF0aCwgYWxsX2lucHV0cykpCi0KLSAgICAgICAgaWYgaW1wbGljaXQ6Ci0gICAgICAgICAgICBpbXBsaWNpdCA9IG1hcChlc2NhcGVfcGF0aCwgc2VsZi5fYXNfbGlzdChpbXBsaWNpdCkpCi0gICAgICAgICAgICBhbGxfaW5wdXRzLmFwcGVuZCgnfCcpCi0gICAgICAgICAgICBhbGxfaW5wdXRzLmV4dGVuZChpbXBsaWNpdCkKLSAgICAgICAgaWYgb3JkZXJfb25seToKLSAgICAgICAgICAgIG9yZGVyX29ubHkgPSBtYXAoZXNjYXBlX3BhdGgsIHNlbGYuX2FzX2xpc3Qob3JkZXJfb25seSkpCi0gICAgICAgICAgICBhbGxfaW5wdXRzLmFwcGVuZCgnfHwnKQotICAgICAgICAgICAgYWxsX2lucHV0cy5leHRlbmQob3JkZXJfb25seSkKLQotICAgICAgICBzZWxmLl9saW5lKCdidWlsZCAlczogJXMnICUgKCcgJy5qb2luKG91dF9vdXRwdXRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcuam9pbihbcnVsZV0gKyBhbGxfaW5wdXRzKSkpCi0KLSAgICAgICAgaWYgdmFyaWFibGVzOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YXJpYWJsZXMsIGRpY3QpOgotICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gaXRlcih2YXJpYWJsZXMuaXRlbXMoKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3IgPSBpdGVyKHZhcmlhYmxlcykKLQotICAgICAgICAgICAgZm9yIGtleSwgdmFsIGluIGl0ZXJhdG9yOgotICAgICAgICAgICAgICAgIHNlbGYudmFyaWFibGUoa2V5LCB2YWwsIGluZGVudD0xKQotCi0gICAgICAgIHJldHVybiBvdXRwdXRzCi0KLSAgICBkZWYgaW5jbHVkZShzZWxmLCBwYXRoKToKLSAgICAgICAgc2VsZi5fbGluZSgnaW5jbHVkZSAlcycgJSBwYXRoKQotCi0gICAgZGVmIHN1Ym5pbmphKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLl9saW5lKCdzdWJuaW5qYSAlcycgJSBwYXRoKQotCi0gICAgZGVmIGRlZmF1bHQoc2VsZiwgcGF0aHMpOgotICAgICAgICBzZWxmLl9saW5lKCdkZWZhdWx0ICVzJyAlICcgJy5qb2luKHNlbGYuX2FzX2xpc3QocGF0aHMpKSkKLQotICAgIGRlZiBfY291bnRfZG9sbGFyc19iZWZvcmVfaW5kZXgoc2VsZiwgcywgaSk6Ci0gICAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgb2YgJyQnIGNoYXJhY3RlcnMgcmlnaHQgaW4gZnJvbnQgb2Ygc1tpXS4iIiIKLSAgICAgIGRvbGxhcl9jb3VudCA9IDAKLSAgICAgIGRvbGxhcl9pbmRleCA9IGkgLSAxCi0gICAgICB3aGlsZSBkb2xsYXJfaW5kZXggPiAwIGFuZCBzW2RvbGxhcl9pbmRleF0gPT0gJyQnOgotICAgICAgICBkb2xsYXJfY291bnQgKz0gMQotICAgICAgICBkb2xsYXJfaW5kZXggLT0gMQotICAgICAgcmV0dXJuIGRvbGxhcl9jb3VudAotCi0gICAgZGVmIF9saW5lKHNlbGYsIHRleHQsIGluZGVudD0wKToKLSAgICAgICAgIiIiV3JpdGUgJ3RleHQnIHdvcmQtd3JhcHBlZCBhdCBzZWxmLndpZHRoIGNoYXJhY3RlcnMuIiIiCi0gICAgICAgIGxlYWRpbmdfc3BhY2UgPSAnICAnICogaW5kZW50Ci0gICAgICAgIHdoaWxlIGxlbihsZWFkaW5nX3NwYWNlKSArIGxlbih0ZXh0KSA+IHNlbGYud2lkdGg6Ci0gICAgICAgICAgICAjIFRoZSB0ZXh0IGlzIHRvbyB3aWRlOyB3cmFwIGlmIHBvc3NpYmxlLgotCi0gICAgICAgICAgICAjIEZpbmQgdGhlIHJpZ2h0bW9zdCBzcGFjZSB0aGF0IHdvdWxkIG9iZXkgb3VyIHdpZHRoIGNvbnN0cmFpbnQgYW5kCi0gICAgICAgICAgICAjIHRoYXQncyBub3QgYW4gZXNjYXBlZCBzcGFjZS4KLSAgICAgICAgICAgIGF2YWlsYWJsZV9zcGFjZSA9IHNlbGYud2lkdGggLSBsZW4obGVhZGluZ19zcGFjZSkgLSBsZW4oJyAkJykKLSAgICAgICAgICAgIHNwYWNlID0gYXZhaWxhYmxlX3NwYWNlCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICBzcGFjZSA9IHRleHQucmZpbmQoJyAnLCAwLCBzcGFjZSkKLSAgICAgICAgICAgICAgaWYgc3BhY2UgPCAwIG9yIFwKLSAgICAgICAgICAgICAgICAgc2VsZi5fY291bnRfZG9sbGFyc19iZWZvcmVfaW5kZXgodGV4dCwgc3BhY2UpICUgMiA9PSAwOgotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIHNwYWNlIDwgMDoKLSAgICAgICAgICAgICAgICAjIE5vIHN1Y2ggc3BhY2U7IGp1c3QgdXNlIHRoZSBmaXJzdCB1bmVzY2FwZWQgc3BhY2Ugd2UgY2FuIGZpbmQuCi0gICAgICAgICAgICAgICAgc3BhY2UgPSBhdmFpbGFibGVfc3BhY2UgLSAxCi0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgIHNwYWNlID0gdGV4dC5maW5kKCcgJywgc3BhY2UgKyAxKQotICAgICAgICAgICAgICAgICAgaWYgc3BhY2UgPCAwIG9yIFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvdW50X2RvbGxhcnNfYmVmb3JlX2luZGV4KHRleHQsIHNwYWNlKSAlIDIgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHNwYWNlIDwgMDoKLSAgICAgICAgICAgICAgICAjIEdpdmUgdXAgb24gYnJlYWtpbmcuCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUobGVhZGluZ19zcGFjZSArIHRleHRbMDpzcGFjZV0gKyAnICRcbicpCi0gICAgICAgICAgICB0ZXh0ID0gdGV4dFtzcGFjZSsxOl0KLQotICAgICAgICAgICAgIyBTdWJzZXF1ZW50IGxpbmVzIGFyZSBjb250aW51YXRpb25zLCBzbyBpbmRlbnQgdGhlbS4KLSAgICAgICAgICAgIGxlYWRpbmdfc3BhY2UgPSAnICAnICogKGluZGVudCsyKQotCi0gICAgICAgIHNlbGYub3V0cHV0LndyaXRlKGxlYWRpbmdfc3BhY2UgKyB0ZXh0ICsgJ1xuJykKLQotICAgIGRlZiBfYXNfbGlzdChzZWxmLCBpbnB1dCk6Ci0gICAgICAgIGlmIGlucHV0IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dCwgbGlzdCk6Ci0gICAgICAgICAgICByZXR1cm4gaW5wdXQKLSAgICAgICAgcmV0dXJuIFtpbnB1dF0KLQotCi1kZWYgZXNjYXBlKHN0cmluZyk6Ci0gICAgIiIiRXNjYXBlIGEgc3RyaW5nIHN1Y2ggdGhhdCBpdCBjYW4gYmUgZW1iZWRkZWQgaW50byBhIE5pbmphIGZpbGUgd2l0aG91dAotICAgIGZ1cnRoZXIgaW50ZXJwcmV0YXRpb24uIiIiCi0gICAgYXNzZXJ0ICdcbicgbm90IGluIHN0cmluZywgJ05pbmphIHN5bnRheCBkb2VzIG5vdCBhbGxvdyBuZXdsaW5lcycKLSAgICAjIFdlIG9ubHkgaGF2ZSBvbmUgc3BlY2lhbCBtZXRhY2hhcmFjdGVyOiAnJCcuCi0gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCckJywgJyQkJykKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAvc3VuX3Rvb2wucHkgYi90b29scy9neXAvcHlsaWIvZ3lwL3N1bl90b29sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MGQ1OWM4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAvc3VuX3Rvb2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotIiIiVGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCB2aWEgZ3lwLXN1bi10b29sIHdoZW4gdXNpbmcgdGhlIE1ha2VmaWxlCi1nZW5lcmF0b3IuIiIiCi0KLWltcG9ydCBmY250bAotaW1wb3J0IG9zCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5cwotCi0KLWRlZiBtYWluKGFyZ3MpOgotICBleGVjdXRvciA9IFN1blRvb2woKQotICBleGVjdXRvci5EaXNwYXRjaChhcmdzKQotCi0KLWNsYXNzIFN1blRvb2wob2JqZWN0KToKLSAgIiIiVGhpcyBjbGFzcyBwZXJmb3JtcyBhbGwgdGhlIFN1bk9TIHRvb2xpbmcgc3RlcHMuIFRoZSBtZXRob2RzIGNhbiBlaXRoZXIgYmUKLSAgZXhlY3V0ZWQgZGlyZWN0bHksIG9yIGRpc3BhdGNoZWQgZnJvbSBhbiBhcmd1bWVudCBsaXN0LiIiIgotCi0gIGRlZiBEaXNwYXRjaChzZWxmLCBhcmdzKToKLSAgICAiIiJEaXNwYXRjaGVzIGEgc3RyaW5nIGNvbW1hbmQgdG8gYSBtZXRob2QuIiIiCi0gICAgaWYgbGVuKGFyZ3MpIDwgMToKLSAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGVub3VnaCBhcmd1bWVudHMiKQotCi0gICAgbWV0aG9kID0gIkV4ZWMlcyIgJSBzZWxmLl9Db21tYW5kaWZ5TmFtZShhcmdzWzBdKQotICAgIGdldGF0dHIoc2VsZiwgbWV0aG9kKSgqYXJnc1sxOl0pCi0KLSAgZGVmIF9Db21tYW5kaWZ5TmFtZShzZWxmLCBuYW1lX3N0cmluZyk6Ci0gICAgIiIiVHJhbnNmb3JtcyBhIHRvb2wgbmFtZSBsaWtlIGNvcHktaW5mby1wbGlzdCB0byBDb3B5SW5mb1BsaXN0IiIiCi0gICAgcmV0dXJuIG5hbWVfc3RyaW5nLnRpdGxlKCkucmVwbGFjZSgnLScsICcnKQotCi0gIGRlZiBFeGVjRmxvY2soc2VsZiwgbG9ja2ZpbGUsICpjbWRfbGlzdCk6Ci0gICAgIiIiRW11bGF0ZXMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3Igb2YgTGludXgncyBmbG9jaygxKS4iIiIKLSAgICAjIFJlbHkgb24gZXhjZXB0aW9uIGhhbmRsaW5nIHRvIHJlcG9ydCBlcnJvcnMuCi0gICAgIyBOb3RlIHRoYXQgdGhlIHN0b2NrIHB5dGhvbiBvbiBTdW5PUyBoYXMgYSBidWcKLSAgICAjIHdoZXJlIGZjbnRsLmZsb2NrKGZkLCBMT0NLX0VYKSBhbHdheXMgZmFpbHMKLSAgICAjIHdpdGggRUJBREYsIHRoYXQncyB3aHkgd2UgdXNlIHRoaXMgRl9TRVRMSwotICAgICMgaGFjayBpbnN0ZWFkLgotICAgIGZkID0gb3Mub3Blbihsb2NrZmlsZSwgb3MuT19XUk9OTFl8b3MuT19OT0NUVFl8b3MuT19DUkVBVCwgMDY2NikKLSAgICBvcCA9IHN0cnVjdC5wYWNrKCdoaGxsaGhsJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCwgMCkKLSAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRMSywgb3ApCi0gICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbChjbWRfbGlzdCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL3dpbl90b29sLnB5IGIvdG9vbHMvZ3lwL3B5bGliL2d5cC93aW5fdG9vbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMGNlNzUzYi4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL3dpbl90b29sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBXaW5kb3dzIGJ1aWxkcy4KLQotVGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCB2aWEgZ3lwLXdpbi10b29sIHdoZW4gdXNpbmcgdGhlIG5pbmphIGdlbmVyYXRvci4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQgcGxhdGZvcm0KLQotQkFTRV9ESVIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKLQotCi1kZWYgbWFpbihhcmdzKToKLSAgZXhlY3V0b3IgPSBXaW5Ub29sKCkKLSAgZXhpdF9jb2RlID0gZXhlY3V0b3IuRGlzcGF0Y2goYXJncykKLSAgaWYgZXhpdF9jb2RlIGlzIG5vdCBOb25lOgotICAgIGlmIGV4aXRfY29kZSAhPSAwOgotICAgICAgcHJpbnQoIkFibm9ybWFsIGV4aXQgKCIgKyBzdHIoZXhpdF9jb2RlKSArICIpIGNvZGUgd2hpbGUgZXhlY3V0aW5nICIgXAotICAgICAgICAgICAgKyBzdHIoYXJncykpCi0gICAgc3lzLmV4aXQoZXhpdF9jb2RlKQotCi0KLWNsYXNzIFdpblRvb2wob2JqZWN0KToKLSAgIiIiVGhpcyBjbGFzcyBwZXJmb3JtcyBhbGwgdGhlIFdpbmRvd3MgdG9vbGluZyBzdGVwcy4gVGhlIG1ldGhvZHMgY2FuIGVpdGhlcgotICBiZSBleGVjdXRlZCBkaXJlY3RseSwgb3IgZGlzcGF0Y2hlZCBmcm9tIGFuIGFyZ3VtZW50IGxpc3QuIiIiCi0KLSAgZGVmIERpc3BhdGNoKHNlbGYsIGFyZ3MpOgotICAgICIiIkRpc3BhdGNoZXMgYSBzdHJpbmcgY29tbWFuZCB0byBhIG1ldGhvZC4iIiIKLSAgICBpZiBsZW4oYXJncykgPCAxOgotICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpCi0KLSAgICBtZXRob2QgPSAiRXhlYyVzIiAlIHNlbGYuX0NvbW1hbmRpZnlOYW1lKGFyZ3NbMF0pCi0gICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbWV0aG9kKSgqYXJnc1sxOl0pCi0KLSAgZGVmIF9Db21tYW5kaWZ5TmFtZShzZWxmLCBuYW1lX3N0cmluZyk6Ci0gICAgIiIiVHJhbnNmb3JtcyBhIHRvb2wgbmFtZSBsaWtlIHJlY3Vyc2l2ZS1taXJyb3IgdG8gUmVjdXJzaXZlTWlycm9yLiIiIgotICAgIHJldHVybiBuYW1lX3N0cmluZy50aXRsZSgpLnJlcGxhY2UoJy0nLCAnJykKLQotICBkZWYgX0dldEVudihzZWxmLCBhcmNoKToKLSAgICAiIiJHZXRzIHRoZSBzYXZlZCBlbnZpcm9ubWVudCBmcm9tIGEgZmlsZSBmb3IgYSBnaXZlbiBhcmNoaXRlY3R1cmUuIiIiCi0gICAgIyBUaGUgZW52aXJvbm1lbnQgaXMgc2F2ZWQgYXMgYW4gImVudmlyb25tZW50IGJsb2NrIiAoc2VlIENyZWF0ZVByb2Nlc3MKLSAgICAjIGFuZCBtc3ZzX2VtdWxhdGlvbiBmb3IgZGV0YWlscykuIFdlIGNvbnZlcnQgdG8gYSBkaWN0IGhlcmUuCi0gICAgIyBEcm9wIGxhc3QgMiBOVUxzLCBvbmUgZm9yIGxpc3QgdGVybWluYXRvciwgb25lIGZvciB0cmFpbGluZyB2cy4gc2VwYXJhdG9yLgotICAgIHBhaXJzID0gb3BlbihhcmNoKS5yZWFkKClbOi0yXS5zcGxpdCgnXDAnKQotICAgIGt2cyA9IFtpdGVtLnNwbGl0KCc9JywgMSkgZm9yIGl0ZW0gaW4gcGFpcnNdCi0gICAgcmV0dXJuIGRpY3Qoa3ZzKQotCi0gIGRlZiBFeGVjU3RhbXAoc2VsZiwgcGF0aCk6Ci0gICAgIiIiU2ltcGxlIHN0YW1wIGNvbW1hbmQuIiIiCi0gICAgb3BlbihwYXRoLCAndycpLmNsb3NlKCkKLQotICBkZWYgRXhlY1JlY3Vyc2l2ZU1pcnJvcihzZWxmLCBzb3VyY2UsIGRlc3QpOgotICAgICIiIkVtdWxhdGlvbiBvZiBybSAtcmYgb3V0ICYmIGNwIC1hZiBpbiBvdXQuIiIiCi0gICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdCk6Ci0gICAgICBpZiBvcy5wYXRoLmlzZGlyKGRlc3QpOgotICAgICAgICBzaHV0aWwucm10cmVlKGRlc3QpCi0gICAgICBlbHNlOgotICAgICAgICBvcy51bmxpbmsoZGVzdCkKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHNvdXJjZSk6Ci0gICAgICAjIElnbm9yZSAuZ2l0IGRpcmVjdG9yeS4KLSAgICAgIHNodXRpbC5jb3B5dHJlZShzb3VyY2UsIGRlc3QsIGlnbm9yZT1zaHV0aWwuaWdub3JlX3BhdHRlcm5zKHInLmdpdCcpKQotICAgIGVsc2U6Ci0gICAgICBzaHV0aWwuY29weTIoc291cmNlLCBkZXN0KQotICAgICAgIyBIYWNrIHRvIG1ha2UgdGFyZ2V0IGxvb2sgMiBzZWNvbmRzIG5ld2VyLCB0byBwcmV2ZW50IG5pbmphIGVycm9uZW91c2x5IHJlLXRyaWdnZXIKLSAgICAgICMgY29weSBydWxlcyBvbiBuYW5vc2Vjb25kIGRpZmZlcmVuY2VzLiBSaXNrIG9mIGdldHRpbmcgc3RhbGUgY29udGVudCBmaWxlcyBkdWUgdG8gdGhpcwotICAgICAgIyBpcyBhbG1vc3Qgbm9uLWV4aXN0ZW50Ci0gICAgICBPRkZTRVRfU0VDT05EUyA9IDIKLSAgICAgIHN0YXQgPSBvcy5zdGF0KHNvdXJjZSkKLSAgICAgIG10aW1lID0gc3RhdC5zdF9tdGltZSArIE9GRlNFVF9TRUNPTkRTCi0gICAgICBhdGltZSA9IHN0YXQuc3RfYXRpbWUgKyBPRkZTRVRfU0VDT05EUwotICAgICAgb3MudXRpbWUoZGVzdCwgKGF0aW1lLCBtdGltZSkpCi0KLSAgaWYgcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnOgotICAgIGRlZiBFeGVjTGlua1dyYXBwZXIoc2VsZiwgYXJjaCwgKmFyZ3MpOgotICAgICAgIiIiRmlsdGVyIGRpYWdub3N0aWMgb3V0cHV0IGZyb20gbGluayB0aGF0IGxvb2tzIGxpa2U6Ci0gICAgICAnICAgQ3JlYXRpbmcgbGlicmFyeSB1aS5kbGwubGliIGFuZCBvYmplY3QgdWkuZGxsLmV4cCcKLSAgICAgIFRoaXMgaGFwcGVucyB3aGVuIHRoZXJlIGFyZSBleHBvcnRzIGZyb20gdGhlIGRsbCBvciBleGUuCi0gICAgICAiIiIKLSAgICAgIGVudiA9IHNlbGYuX0dldEVudihhcmNoKQotICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHNoZWxsPVRydWUsIGVudj1lbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQotICAgICAgb3V0LCBfID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICAgICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKToKLSAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnICAgQ3JlYXRpbmcgbGlicmFyeSAnKToKLSAgICAgICAgICBwcmludCBsaW5lCi0gICAgICByZXR1cm4gcG9wZW4ucmV0dXJuY29kZQotCi0gIGRlZiBFeGVjTWFuaWZlc3RXcmFwcGVyKHNlbGYsIGFyY2gsICphcmdzKToKLSAgICAiIiJSdW4gbWFuaWZlc3QgdG9vbCB3aXRoIGVudmlyb25tZW50IHNldC4gU3RyaXAgb3V0IHVuZGVzaXJhYmxlIHdhcm5pbmcKLSAgICAoc29tZSBYTUwgYmxvY2tzIGFyZSByZWNvZ25pemVkIGJ5IHRoZSBPUyBsb2FkZXIsIGJ1dCBub3QgdGhlIG1hbmlmZXN0Ci0gICAgdG9vbCkuIiIiCi0gICAgZW52ID0gc2VsZi5fR2V0RW52KGFyY2gpCi0gICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHNoZWxsPVRydWUsIGVudj1lbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCi0gICAgb3V0LCBfID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICAgIGZvciBsaW5lIGluIG91dC5zcGxpdGxpbmVzKCk6Ci0gICAgICBpZiBsaW5lIGFuZCAnbWFuaWZlc3QgYXV0aG9yaW5nIHdhcm5pbmcgODEwMTAwMDInIG5vdCBpbiBsaW5lOgotICAgICAgICBwcmludCBsaW5lCi0gICAgcmV0dXJuIHBvcGVuLnJldHVybmNvZGUKLQotICBkZWYgRXhlY01pZGxXcmFwcGVyKHNlbGYsIGFyY2gsIG91dGRpciwgdGxiLCBoLCBkbGxkYXRhLCBpaWQsIHByb3h5LCBpZGwsCi0gICAgICAgICAgICAgICAgICAgICAgKmZsYWdzKToKLSAgICAiIiJGaWx0ZXIgbm9pc3kgZmlsZW5hbWVzIG91dHB1dCBmcm9tIE1JREwgY29tcGlsZSBzdGVwIHRoYXQgaXNuJ3QKLSAgICBxdWlldGFibGUgdmlhIGNvbW1hbmQgbGluZSBmbGFncy4KLSAgICAiIiIKLSAgICBlbnYgPSBzZWxmLl9HZXRFbnYoYXJjaCkKLSAgICBhcmdzID0gWydtaWRsJywgJy9ub2xvZ28nXSArIGxpc3QoZmxhZ3MpICsgWwotICAgICAgICAgICcvb3V0Jywgb3V0ZGlyLAotICAgICAgICAgICcvaCcsIGgsCi0gICAgICAgICAgaWRsXQotICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzaGVsbD1UcnVlLCBlbnY9ZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQotICAgIG91dCwgXyA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAjIEZpbHRlciBqdW5rIG91dCBvZiBzdGRvdXQsIGFuZCB3cml0ZSBmaWx0ZXJlZCB2ZXJzaW9ucy4gT3V0cHV0IHdlIHdhbnQKLSAgICAjIHRvIGZpbHRlciBpcyBwYWlycyBvZiBsaW5lcyB0aGF0IGxvb2sgbGlrZSB0aGlzOgotICAgICMgUHJvY2Vzc2luZyBDOlxQcm9ncmFtIEZpbGVzICh4ODYpXE1pY3Jvc29mdCBTREtzXC4uLlxpbmNsdWRlXG9iamlkbC5pZGwKLSAgICAjIG9iamlkbC5pZGwKLSAgICBsaW5lcyA9IG91dC5zcGxpdGxpbmVzKCkKLSAgICBwcmVmaXhlcyA9IFsnUHJvY2Vzc2luZyAnLCAnNjQgYml0IFByb2Nlc3NpbmcgJywgJzY0IGJpdCBNSURMUlQgUHJvY2Vzc2luZyAnXQotICAgIHByb2Nlc3NpbmcgPSBzZXQoKQotICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6Ci0gICAgICBwcm9jZXNzaW5nID0gcHJvY2Vzc2luZy51bmlvbihzZXQob3MucGF0aC5iYXNlbmFtZSh4KSBmb3IgeCBpbiBsaW5lcyBpZiB4LnN0YXJ0c3dpdGgocHJlZml4KSkpCi0gICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICBpZiBsaW5lIGluIHByb2Nlc3Npbmc6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgICBpZiByZWR1Y2UobGFtYmRhIHgsIHkgOiB4IG9yIHksCi0gICAgICAgICAgICAgICAgW2xpbmUuc3RhcnRzd2l0aChwcmVmaXgpIGZvciBwcmVmaXggaW4gcHJlZml4ZXNdKToKLSAgICAgICAgY29udGludWUKLSAgICAgIHByaW50IGxpbmUKLSAgICByZXR1cm4gcG9wZW4ucmV0dXJuY29kZQotCi0gIGRlZiBFeGVjQXNtV3JhcHBlcihzZWxmLCBhcmNoLCAqYXJncyk6Ci0gICAgIiIiRmlsdGVyIGxvZ28gYmFubmVyIGZyb20gaW52b2NhdGlvbnMgb2YgYXNtLmV4ZS4iIiIKLSAgICBlbnYgPSBzZWxmLl9HZXRFbnYoYXJjaCkKLSAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc2hlbGw9VHJ1ZSwgZW52PWVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKLSAgICBvdXQsIF8gPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKToKLSAgICAgIGlmIChub3QgbGluZS5zdGFydHN3aXRoKCdDb3B5cmlnaHQgKEMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbicpIGFuZAotICAgICAgICAgIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ01pY3Jvc29mdCAoUikgTWFjcm8gQXNzZW1ibGVyJykgYW5kCi0gICAgICAgICAgbm90IGxpbmUuc3RhcnRzd2l0aCgnIEFzc2VtYmxpbmc6ICcpIGFuZAotICAgICAgICAgIGxpbmUpOgotICAgICAgICBwcmludCBsaW5lCi0gICAgcmV0dXJuIHBvcGVuLnJldHVybmNvZGUKLQotICBkZWYgRXhlY1JjV3JhcHBlcihzZWxmLCBhcmNoLCAqYXJncyk6Ci0gICAgIiIiRmlsdGVyIGxvZ28gYmFubmVyIGZyb20gaW52b2NhdGlvbnMgb2YgcmMuZXhlLiBPbGRlciB2ZXJzaW9ucyBvZiBSQwotICAgIGRvbid0IHN1cHBvcnQgdGhlIC9ub2xvZ28gZmxhZy4iIiIKLSAgICBlbnYgPSBzZWxmLl9HZXRFbnYoYXJjaCkKLSAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc2hlbGw9VHJ1ZSwgZW52PWVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKLSAgICBvdXQsIF8gPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKToKLSAgICAgIGlmIChub3QgbGluZS5zdGFydHN3aXRoKCdNaWNyb3NvZnQgKFIpIFdpbmRvd3MgKFIpIFJlc291cmNlIENvbXBpbGVyJykgYW5kCi0gICAgICAgICAgbm90IGxpbmUuc3RhcnRzd2l0aCgnQ29weXJpZ2h0IChDKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24nKSBhbmQKLSAgICAgICAgICBsaW5lKToKLSAgICAgICAgcHJpbnQgbGluZQotICAgIHJldHVybiBwb3Blbi5yZXR1cm5jb2RlCi0KLSAgZGVmIEV4ZWNBY3Rpb25XcmFwcGVyKHNlbGYsIGFyY2gsIHJzcGZpbGUsICpkaXIpOgotICAgICIiIlJ1bnMgYW4gYWN0aW9uIGNvbW1hbmQgbGluZSBmcm9tIGEgcmVzcG9uc2UgZmlsZSB1c2luZyB0aGUgZW52aXJvbm1lbnQKLSAgICBmb3IgfGFyY2h8LiBJZiB8ZGlyfCBpcyBzdXBwbGllZCwgdXNlIHRoYXQgYXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIiIgotICAgIGVudiA9IHNlbGYuX0dldEVudihhcmNoKQotICAgIGFyZ3MgPSBvcGVuKHJzcGZpbGUpLnJlYWQoKQotICAgIGRpciA9IGRpclswXSBpZiBkaXIgZWxzZSBOb25lCi0gICAgIyBMb2NhbCBmdW5jdGlvbnMgYmluZCB0byBvdXRtb3N0IGZ1bmN0aW9uIGFyZ3VtZW50cy4KLSAgICBkZWYgUnVuQ21kKCk6Ci0gICAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc2hlbGw9VHJ1ZSwgZW52PWVudiwgY3dkPWRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQotICAgICAgc3Rkb3V0X3N0ciwgc3RkZXJyX3N0ciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAgIHJldHVybiBwb3Blbi5yZXR1cm5jb2RlLCBzdGRvdXRfc3RyLCBzdGRlcnJfc3RyCi0gICAgZGVmIEJ1aWxkRXJyb3JNZXNzYWdlKGVycl9jb2RlLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgICBkaXJfc3RyID0gb3MucGF0aC5hYnNwYXRoKCcuJykgaWYgZGlyIGlzIE5vbmUgZWxzZSBvcy5wYXRoLmFic3BhdGgoZGlyKQotICAgICAgbXNnID0gJ0VSUk9SIHdoaWxlIGV4ZWN1dGluZ1xuJyArIHN0cihhcmdzKSArICdcbmN3ZD0nICsgZGlyX3N0ciBcCi0gICAgICAgICAgICsgJ1xuJyArICdFcnJvciBjb2RlOiAnICsgc3RyKGVycl9jb2RlKSArICdcbicKLSAgICAgIGlmIHN0ZG91dDoKLSAgICAgICAgbXNnICs9ICdTVERPVVQ6XG4nICsgc3RyKHN0ZG91dCkgKyAnXG4nCi0gICAgICBpZiBzdGRlcnI6Ci0gICAgICAgIG1zZyArPSAnU1RERVJSOlxuJyArIHN0cihzdGRlcnIpICsgJ1xuJwotICAgICAgbXNnICs9ICdcbicKLSAgICAgIHJldHVybiBtc2cKLSAgICAjIE5vdGUgdGhhdCBzb21lIGNvbW1hbmRzIG9uIHdpbmRvd3MgYXBwZWFycyBmbGFreS4gVGhlcmVmb3JlIGNvbW1hbmRzCi0gICAgIyB3aWxsIHJldHJ5IG9uY2UgdG8gbWFrZSB0aGUgYnVpbGRzIG1vcmUgcmVsaWFibGUsIGFuZCBpZiB0aGUgY21kIGZhaWxzCi0gICAgIyB0d2ljZSB0aGVuIHRoZSBlcnJvciB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgZXJyX2NvZGUsIHN0ZG91dCwgc3RkZXJyID0gUnVuQ21kKCkKLSAgICBpZiBlcnJfY29kZSA9PSAwOgotICAgICAgc3lzLnN0ZG91dC53cml0ZShzdGRvdXQpCi0gICAgICBzeXMuc3RkZXJyLndyaXRlKHN0ZGVycikKLSAgICAgIHJldHVybiBlcnJfY29kZQotICAgIHN5cy5zdGRvdXQud3JpdGUoCi0gICAgICAgIEJ1aWxkRXJyb3JNZXNzYWdlKGVycl9jb2RlLCBzdGRvdXQsIHN0ZGVycikgKyAnIHJldHJ5aW5nLi4uXG4nKQotICAgIGVycl9jb2RlLCBzdGRvdXQsIHN0ZGVyciA9IFJ1bkNtZCgpCi0gICAgaWYgZXJyX2NvZGUgIT0gMDoKLSAgICAgIHN5cy5zdGRvdXQud3JpdGUoQnVpbGRFcnJvck1lc3NhZ2UoZXJyX2NvZGUsIHN0ZG91dCwgc3RkZXJyKSkKLSAgICByZXR1cm4gZXJyX2NvZGUKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS90b29scy9neXAvcHlsaWIvZ3lwL3hjb2RlX2VtdWxhdGlvbi5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAveGNvZGVfZW11bGF0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjViNDYwLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9weWxpYi9neXAveGNvZGVfZW11bGF0aW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2NSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIgotVGhpcyBtb2R1bGUgY29udGFpbnMgY2xhc3NlcyB0aGF0IGhlbHAgdG8gZW11bGF0ZSB4Y29kZWJ1aWxkIGJlaGF2aW9yIG9uIHRvcCBvZgotb3RoZXIgYnVpbGQgc3lzdGVtcywgc3VjaCBhcyBtYWtlIGFuZCBuaW5qYS4KLSIiIgotCi1pbXBvcnQgZ3lwLmNvbW1vbgotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCByZQotaW1wb3J0IHNobGV4Ci0KLWNsYXNzIFhjb2RlU2V0dGluZ3Mob2JqZWN0KToKLSAgIiIiQSBjbGFzcyB0aGF0IHVuZGVyc3RhbmRzIHRoZSBneXAgJ3hjb2RlX3NldHRpbmdzJyBvYmplY3QuIiIiCi0KLSAgIyBDb21wdXRlZCBsYXppbHkgYnkgX0dldFNka0Jhc2VEaXIoKS4gU2hhcmVkIGJ5IGFsbCBYY29kZVNldHRpbmdzLCBzbyBjYWNoZWQKLSAgIyBhdCBjbGFzcy1sZXZlbCBmb3IgZWZmaWNpZW5jeS4KLSAgX3Nka19iYXNlX2RpciA9IE5vbmUKLQotICBkZWYgX19pbml0X18oc2VsZiwgc3BlYyk6Ci0gICAgc2VsZi5zcGVjID0gc3BlYwotCi0gICAgIyBQZXItdGFyZ2V0ICd4Y29kZV9zZXR0aW5ncycgYXJlIHB1c2hlZCBkb3duIGludG8gY29uZmlncyBlYXJsaWVyIGJ5IGd5cC4KLSAgICAjIFRoaXMgbWVhbnMgc2VsZi54Y29kZV9zZXR0aW5nc1tjb25maWddIGFsd2F5cyBjb250YWlucyBhbGwgc2V0dGluZ3MKLSAgICAjIGZvciB0aGF0IGNvbmZpZyAtLSB0aGUgcGVyLXRhcmdldCBzZXR0aW5ncyBhcyB3ZWxsLiBTZXR0aW5ncyB0aGF0IGFyZQotICAgICMgdGhlIHNhbWUgZm9yIGFsbCBjb25maWdzIGFyZSBpbXBsaWNpdGx5IHBlci10YXJnZXQgc2V0dGluZ3MuCi0gICAgc2VsZi54Y29kZV9zZXR0aW5ncyA9IHt9Ci0gICAgY29uZmlncyA9IHNwZWNbJ2NvbmZpZ3VyYXRpb25zJ10KLSAgICBmb3IgY29uZmlnbmFtZSwgY29uZmlnIGluIGNvbmZpZ3MuaXRlcml0ZW1zKCk6Ci0gICAgICBzZWxmLnhjb2RlX3NldHRpbmdzW2NvbmZpZ25hbWVdID0gY29uZmlnLmdldCgneGNvZGVfc2V0dGluZ3MnLCB7fSkKLQotICAgICMgVGhpcyBpcyBvbmx5IG5vbi1Ob25lIHRlbXBvcmFyaWx5IGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHNvbWUgbWV0aG9kcy4KLSAgICBzZWxmLmNvbmZpZ25hbWUgPSBOb25lCi0KLSAgICAjIFVzZWQgYnkgX0FkanVzdExpYnJhcnkgdG8gbWF0Y2ggLmEgYW5kIC5keWxpYiBlbnRyaWVzIGluIGxpYnJhcmllcy4KLSAgICBzZWxmLmxpYnJhcnlfcmUgPSByZS5jb21waWxlKHInXmxpYihbXi9dKylcLihhfGR5bGliKSQnKQotCi0gIGRlZiBfU2V0dGluZ3Moc2VsZik6Ci0gICAgYXNzZXJ0IHNlbGYuY29uZmlnbmFtZQotICAgIHJldHVybiBzZWxmLnhjb2RlX3NldHRpbmdzW3NlbGYuY29uZmlnbmFtZV0KLQotICBkZWYgX1Rlc3Qoc2VsZiwgdGVzdF9rZXksIGNvbmRfa2V5LCBkZWZhdWx0KToKLSAgICByZXR1cm4gc2VsZi5fU2V0dGluZ3MoKS5nZXQodGVzdF9rZXksIGRlZmF1bHQpID09IGNvbmRfa2V5Ci0KLSAgZGVmIF9BcHBlbmRmKHNlbGYsIGxzdCwgdGVzdF9rZXksIGZvcm1hdF9zdHIsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgaWYgdGVzdF9rZXkgaW4gc2VsZi5fU2V0dGluZ3MoKToKLSAgICAgIGxzdC5hcHBlbmQoZm9ybWF0X3N0ciAlIHN0cihzZWxmLl9TZXR0aW5ncygpW3Rlc3Rfa2V5XSkpCi0gICAgZWxpZiBkZWZhdWx0OgotICAgICAgbHN0LmFwcGVuZChmb3JtYXRfc3RyICUgc3RyKGRlZmF1bHQpKQotCi0gIGRlZiBfV2FyblVuaW1wbGVtZW50ZWQoc2VsZiwgdGVzdF9rZXkpOgotICAgIGlmIHRlc3Rfa2V5IGluIHNlbGYuX1NldHRpbmdzKCk6Ci0gICAgICBwcmludCAnV2FybmluZzogSWdub3Jpbmcgbm90IHlldCBpbXBsZW1lbnRlZCBrZXkgIiVzIi4nICUgdGVzdF9rZXkKLQotICBkZWYgX0lzQnVuZGxlKHNlbGYpOgotICAgIHJldHVybiBpbnQoc2VsZi5zcGVjLmdldCgnbWFjX2J1bmRsZScsIDApKSAhPSAwCi0KLSAgZGVmIEdldEZyYW1ld29ya1ZlcnNpb24oc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgZnJhbWV3b3JrIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0LiBPbmx5IHZhbGlkIGZvcgotICAgIGJ1bmRsZXMuIiIiCi0gICAgYXNzZXJ0IHNlbGYuX0lzQnVuZGxlKCkKLSAgICByZXR1cm4gc2VsZi5HZXRQZXJUYXJnZXRTZXR0aW5nKCdGUkFNRVdPUktfVkVSU0lPTicsIGRlZmF1bHQ9J0EnKQotCi0gIGRlZiBHZXRXcmFwcGVyRXh0ZW5zaW9uKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIGJ1bmRsZSBleHRlbnNpb24gKC5hcHAsIC5mcmFtZXdvcmssIC5wbHVnaW4sIGV0YykuICBPbmx5Ci0gICAgdmFsaWQgZm9yIGJ1bmRsZXMuIiIiCi0gICAgYXNzZXJ0IHNlbGYuX0lzQnVuZGxlKCkKLSAgICBpZiBzZWxmLnNwZWNbJ3R5cGUnXSBpbiAoJ2xvYWRhYmxlX21vZHVsZScsICdzaGFyZWRfbGlicmFyeScpOgotICAgICAgZGVmYXVsdF93cmFwcGVyX2V4dGVuc2lvbiA9IHsKLSAgICAgICAgJ2xvYWRhYmxlX21vZHVsZSc6ICdidW5kbGUnLAotICAgICAgICAnc2hhcmVkX2xpYnJhcnknOiAnZnJhbWV3b3JrJywKLSAgICAgIH1bc2VsZi5zcGVjWyd0eXBlJ11dCi0gICAgICB3cmFwcGVyX2V4dGVuc2lvbiA9IHNlbGYuR2V0UGVyVGFyZ2V0U2V0dGluZygKLSAgICAgICAgICAnV1JBUFBFUl9FWFRFTlNJT04nLCBkZWZhdWx0PWRlZmF1bHRfd3JhcHBlcl9leHRlbnNpb24pCi0gICAgICByZXR1cm4gJy4nICsgc2VsZi5zcGVjLmdldCgncHJvZHVjdF9leHRlbnNpb24nLCB3cmFwcGVyX2V4dGVuc2lvbikKLSAgICBlbGlmIHNlbGYuc3BlY1sndHlwZSddID09ICdleGVjdXRhYmxlJzoKLSAgICAgIHJldHVybiAnLmFwcCcKLSAgICBlbHNlOgotICAgICAgYXNzZXJ0IEZhbHNlLCAiRG9uJ3Qga25vdyBleHRlbnNpb24gZm9yICclcycsIHRhcmdldCAnJXMnIiAlICgKLSAgICAgICAgICBzZWxmLnNwZWNbJ3R5cGUnXSwgc2VsZi5zcGVjWyd0YXJnZXRfbmFtZSddKQotCi0gIGRlZiBHZXRQcm9kdWN0TmFtZShzZWxmKToKLSAgICAiIiJSZXR1cm5zIFBST0RVQ1RfTkFNRS4iIiIKLSAgICByZXR1cm4gc2VsZi5zcGVjLmdldCgncHJvZHVjdF9uYW1lJywgc2VsZi5zcGVjWyd0YXJnZXRfbmFtZSddKQotCi0gIGRlZiBHZXRGdWxsUHJvZHVjdE5hbWUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyBGVUxMX1BST0RVQ1RfTkFNRS4iIiIKLSAgICBpZiBzZWxmLl9Jc0J1bmRsZSgpOgotICAgICAgcmV0dXJuIHNlbGYuR2V0V3JhcHBlck5hbWUoKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gc2VsZi5fR2V0U3RhbmRhbG9uZUJpbmFyeVBhdGgoKQotCi0gIGRlZiBHZXRXcmFwcGVyTmFtZShzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBkaXJlY3RvcnkgbmFtZSBvZiB0aGUgYnVuZGxlIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGFyZ2V0LgotICAgIE9ubHkgdmFsaWQgZm9yIGJ1bmRsZXMuIiIiCi0gICAgYXNzZXJ0IHNlbGYuX0lzQnVuZGxlKCkKLSAgICByZXR1cm4gc2VsZi5HZXRQcm9kdWN0TmFtZSgpICsgc2VsZi5HZXRXcmFwcGVyRXh0ZW5zaW9uKCkKLQotICBkZWYgR2V0QnVuZGxlQ29udGVudHNGb2xkZXJQYXRoKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHF1YWxpZmllZCBwYXRoIHRvIHRoZSBidW5kbGUncyBjb250ZW50cyBmb2xkZXIuIEUuZy4KLSAgICBDaHJvbWl1bS5hcHAvQ29udGVudHMgb3IgRm9vLmJ1bmRsZS9WZXJzaW9ucy9BLiBPbmx5IHZhbGlkIGZvciBidW5kbGVzLiIiIgotICAgIGFzc2VydCBzZWxmLl9Jc0J1bmRsZSgpCi0gICAgaWYgc2VsZi5zcGVjWyd0eXBlJ10gPT0gJ3NoYXJlZF9saWJyYXJ5JzoKLSAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgc2VsZi5HZXRXcmFwcGVyTmFtZSgpLCAnVmVyc2lvbnMnLCBzZWxmLkdldEZyYW1ld29ya1ZlcnNpb24oKSkKLSAgICBlbHNlOgotICAgICAgIyBsb2FkYWJsZV9tb2R1bGVzIGhhdmUgYSAnQ29udGVudHMnIGZvbGRlciBsaWtlIGV4ZWN1dGFibGVzLgotICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLkdldFdyYXBwZXJOYW1lKCksICdDb250ZW50cycpCi0KLSAgZGVmIEdldEJ1bmRsZVJlc291cmNlRm9sZGVyKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHF1YWxpZmllZCBwYXRoIHRvIHRoZSBidW5kbGUncyByZXNvdXJjZSBmb2xkZXIuIEUuZy4KLSAgICBDaHJvbWl1bS5hcHAvQ29udGVudHMvUmVzb3VyY2VzLiBPbmx5IHZhbGlkIGZvciBidW5kbGVzLiIiIgotICAgIGFzc2VydCBzZWxmLl9Jc0J1bmRsZSgpCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLkdldEJ1bmRsZUNvbnRlbnRzRm9sZGVyUGF0aCgpLCAnUmVzb3VyY2VzJykKLQotICBkZWYgR2V0QnVuZGxlUGxpc3RQYXRoKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIHF1YWxpZmllZCBwYXRoIHRvIHRoZSBidW5kbGUncyBwbGlzdCBmaWxlLiBFLmcuCi0gICAgQ2hyb21pdW0uYXBwL0NvbnRlbnRzL0luZm8ucGxpc3QuIE9ubHkgdmFsaWQgZm9yIGJ1bmRsZXMuIiIiCi0gICAgYXNzZXJ0IHNlbGYuX0lzQnVuZGxlKCkKLSAgICBpZiBzZWxmLnNwZWNbJ3R5cGUnXSBpbiAoJ2V4ZWN1dGFibGUnLCAnbG9hZGFibGVfbW9kdWxlJyk6Ci0gICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuR2V0QnVuZGxlQ29udGVudHNGb2xkZXJQYXRoKCksICdJbmZvLnBsaXN0JykKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLkdldEJ1bmRsZUNvbnRlbnRzRm9sZGVyUGF0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzJywgJ0luZm8ucGxpc3QnKQotCi0gIGRlZiBHZXRQcm9kdWN0VHlwZShzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBQUk9EVUNUX1RZUEUgb2YgdGhpcyB0YXJnZXQuIiIiCi0gICAgaWYgc2VsZi5fSXNCdW5kbGUoKToKLSAgICAgIHJldHVybiB7Ci0gICAgICAgICdleGVjdXRhYmxlJzogJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYXBwbGljYXRpb24nLAotICAgICAgICAnbG9hZGFibGVfbW9kdWxlJzogJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlJywKLSAgICAgICAgJ3NoYXJlZF9saWJyYXJ5JzogJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUuZnJhbWV3b3JrJywKLSAgICAgIH1bc2VsZi5zcGVjWyd0eXBlJ11dCi0gICAgZWxzZToKLSAgICAgIHJldHVybiB7Ci0gICAgICAgICdleGVjdXRhYmxlJzogJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCcsCi0gICAgICAgICdsb2FkYWJsZV9tb2R1bGUnOiAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFtaWMnLAotICAgICAgICAnc2hhcmVkX2xpYnJhcnknOiAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFtaWMnLAotICAgICAgICAnc3RhdGljX2xpYnJhcnknOiAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYycsCi0gICAgICB9W3NlbGYuc3BlY1sndHlwZSddXQotCi0gIGRlZiBHZXRNYWNoT1R5cGUoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgTUFDSF9PX1RZUEUgb2YgdGhpcyB0YXJnZXQuIiIiCi0gICAgIyBXZWlyZCwgYnV0IG1hdGNoZXMgWGNvZGUuCi0gICAgaWYgbm90IHNlbGYuX0lzQnVuZGxlKCkgYW5kIHNlbGYuc3BlY1sndHlwZSddID09ICdleGVjdXRhYmxlJzoKLSAgICAgIHJldHVybiAnJwotICAgIHJldHVybiB7Ci0gICAgICAnZXhlY3V0YWJsZSc6ICdtaF9leGVjdXRlJywKLSAgICAgICdzdGF0aWNfbGlicmFyeSc6ICdzdGF0aWNsaWInLAotICAgICAgJ3NoYXJlZF9saWJyYXJ5JzogJ21oX2R5bGliJywKLSAgICAgICdsb2FkYWJsZV9tb2R1bGUnOiAnbWhfYnVuZGxlJywKLSAgICB9W3NlbGYuc3BlY1sndHlwZSddXQotCi0gIGRlZiBfR2V0QnVuZGxlQmluYXJ5UGF0aChzZWxmKToKLSAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBidW5kbGUgYmluYXJ5IG9mIGJ5IHRoaXMgdGFyZ2V0LgotICAgIEUuZy4gQ2hyb21pdW0uYXBwL0NvbnRlbnRzL01hY09TL0Nocm9taXVtLiBPbmx5IHZhbGlkIGZvciBidW5kbGVzLiIiIgotICAgIGFzc2VydCBzZWxmLl9Jc0J1bmRsZSgpCi0gICAgaWYgc2VsZi5zcGVjWyd0eXBlJ10gaW4gKCdzaGFyZWRfbGlicmFyeScpOgotICAgICAgcGF0aCA9IHNlbGYuR2V0QnVuZGxlQ29udGVudHNGb2xkZXJQYXRoKCkKLSAgICBlbGlmIHNlbGYuc3BlY1sndHlwZSddIGluICgnZXhlY3V0YWJsZScsICdsb2FkYWJsZV9tb2R1bGUnKToKLSAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5HZXRCdW5kbGVDb250ZW50c0ZvbGRlclBhdGgoKSwgJ01hY09TJykKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKHBhdGgsIHNlbGYuR2V0RXhlY3V0YWJsZU5hbWUoKSkKLQotICBkZWYgX0dldFN0YW5kYWxvbmVFeGVjdXRhYmxlU3VmZml4KHNlbGYpOgotICAgIGlmICdwcm9kdWN0X2V4dGVuc2lvbicgaW4gc2VsZi5zcGVjOgotICAgICAgcmV0dXJuICcuJyArIHNlbGYuc3BlY1sncHJvZHVjdF9leHRlbnNpb24nXQotICAgIHJldHVybiB7Ci0gICAgICAnZXhlY3V0YWJsZSc6ICcnLAotICAgICAgJ3N0YXRpY19saWJyYXJ5JzogJy5hJywKLSAgICAgICdzaGFyZWRfbGlicmFyeSc6ICcuZHlsaWInLAotICAgICAgJ2xvYWRhYmxlX21vZHVsZSc6ICcuc28nLAotICAgIH1bc2VsZi5zcGVjWyd0eXBlJ11dCi0KLSAgZGVmIF9HZXRTdGFuZGFsb25lRXhlY3V0YWJsZVByZWZpeChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5zcGVjLmdldCgncHJvZHVjdF9wcmVmaXgnLCB7Ci0gICAgICAnZXhlY3V0YWJsZSc6ICcnLAotICAgICAgJ3N0YXRpY19saWJyYXJ5JzogJ2xpYicsCi0gICAgICAnc2hhcmVkX2xpYnJhcnknOiAnbGliJywKLSAgICAgICMgTm9uLWJ1bmRsZWQgbG9hZGFibGVfbW9kdWxlcyBhcmUgY2FsbGVkIGZvby5zbyBmb3Igc29tZSByZWFzb24KLSAgICAgICMgKHRoYXQgaXMsIC5zbyBhbmQgbm8gcHJlZml4KSB3aXRoIHRoZSB4Y29kZSBidWlsZCAtLSBtYXRjaCB0aGF0LgotICAgICAgJ2xvYWRhYmxlX21vZHVsZSc6ICcnLAotICAgIH1bc2VsZi5zcGVjWyd0eXBlJ11dKQotCi0gIGRlZiBfR2V0U3RhbmRhbG9uZUJpbmFyeVBhdGgoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbm9uLWJ1bmRsZSBiaW5hcnkgcmVwcmVzZW50ZWQgYnkgdGhpcyB0YXJnZXQuCi0gICAgRS5nLiBoZWxsb193b3JsZC4gT25seSB2YWxpZCBmb3Igbm9uLWJ1bmRsZXMuIiIiCi0gICAgYXNzZXJ0IG5vdCBzZWxmLl9Jc0J1bmRsZSgpCi0gICAgYXNzZXJ0IHNlbGYuc3BlY1sndHlwZSddIGluICgKLSAgICAgICAgJ2V4ZWN1dGFibGUnLCAnc2hhcmVkX2xpYnJhcnknLCAnc3RhdGljX2xpYnJhcnknLCAnbG9hZGFibGVfbW9kdWxlJyksICgKLSAgICAgICAgJ1VuZXhwZWN0ZWQgdHlwZSAlcycgJSBzZWxmLnNwZWNbJ3R5cGUnXSkKLSAgICB0YXJnZXQgPSBzZWxmLnNwZWNbJ3RhcmdldF9uYW1lJ10KLSAgICBpZiBzZWxmLnNwZWNbJ3R5cGUnXSA9PSAnc3RhdGljX2xpYnJhcnknOgotICAgICAgaWYgdGFyZ2V0WzozXSA9PSAnbGliJzoKLSAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0WzM6XQotICAgIGVsaWYgc2VsZi5zcGVjWyd0eXBlJ10gaW4gKCdsb2FkYWJsZV9tb2R1bGUnLCAnc2hhcmVkX2xpYnJhcnknKToKLSAgICAgIGlmIHRhcmdldFs6M10gPT0gJ2xpYic6Ci0gICAgICAgIHRhcmdldCA9IHRhcmdldFszOl0KLQotICAgIHRhcmdldF9wcmVmaXggPSBzZWxmLl9HZXRTdGFuZGFsb25lRXhlY3V0YWJsZVByZWZpeCgpCi0gICAgdGFyZ2V0ID0gc2VsZi5zcGVjLmdldCgncHJvZHVjdF9uYW1lJywgdGFyZ2V0KQotICAgIHRhcmdldF9leHQgPSBzZWxmLl9HZXRTdGFuZGFsb25lRXhlY3V0YWJsZVN1ZmZpeCgpCi0gICAgcmV0dXJuIHRhcmdldF9wcmVmaXggKyB0YXJnZXQgKyB0YXJnZXRfZXh0Ci0KLSAgZGVmIEdldEV4ZWN1dGFibGVOYW1lKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIGV4ZWN1dGFibGUgbmFtZSBvZiB0aGUgYnVuZGxlIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGFyZ2V0LgotICAgIEUuZy4gQ2hyb21pdW0uIiIiCi0gICAgaWYgc2VsZi5fSXNCdW5kbGUoKToKLSAgICAgIHJldHVybiBzZWxmLnNwZWMuZ2V0KCdwcm9kdWN0X25hbWUnLCBzZWxmLnNwZWNbJ3RhcmdldF9uYW1lJ10pCi0gICAgZWxzZToKLSAgICAgIHJldHVybiBzZWxmLl9HZXRTdGFuZGFsb25lQmluYXJ5UGF0aCgpCi0KLSAgZGVmIEdldEV4ZWN1dGFibGVQYXRoKHNlbGYpOgotICAgICIiIlJldHVybnMgdGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBidW5kbGUgcmVwcmVzZW50ZWQgYnkgdGhpcyB0YXJnZXQuIEUuZy4KLSAgICBDaHJvbWl1bS5hcHAvQ29udGVudHMvTWFjT1MvQ2hyb21pdW0uIiIiCi0gICAgaWYgc2VsZi5fSXNCdW5kbGUoKToKLSAgICAgIHJldHVybiBzZWxmLl9HZXRCdW5kbGVCaW5hcnlQYXRoKCkKLSAgICBlbHNlOgotICAgICAgcmV0dXJuIHNlbGYuX0dldFN0YW5kYWxvbmVCaW5hcnlQYXRoKCkKLQotICBkZWYgX0dldFNka0Jhc2VEaXIoc2VsZik6Ci0gICAgIiIiUmV0dXJucyB0aGUgcm9vdCBvZiB0aGUgJ0RldmVsb3BlcicgZGlyZWN0b3J5LiBPbiBYY29kZSA0LjIgYW5kIHByaW9yLAotICAgIHRoaXMgaXMgdXN1YWxseSBqdXN0IC9EZXZlbG9wZXIuIFhjb2RlIDQuMyBtb3ZlZCB0aGF0IGZvbGRlciBpbnRvIHRoZSBYY29kZQotICAgIGJ1bmRsZS4iIiIKLSAgICBpZiBub3QgWGNvZGVTZXR0aW5ncy5fc2RrX2Jhc2VfZGlyOgotICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKLSAgICAgIGpvYiA9IHN1YnByb2Nlc3MuUG9wZW4oWyd4Y29kZS1zZWxlY3QnLCAnLXByaW50LXBhdGgnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICAgICAgb3V0LCBlcnIgPSBqb2IuY29tbXVuaWNhdGUoKQotICAgICAgaWYgam9iLnJldHVybmNvZGUgIT0gMDoKLSAgICAgICAgcHJpbnQgb3V0Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRXJyb3IgJWQgcnVubmluZyB4Y29kZS1zZWxlY3QnICUgam9iLnJldHVybmNvZGUpCi0gICAgICAjIFRoZSBEZXZlbG9wZXIgZm9sZGVyIG1vdmVkIGluIFhjb2RlIDQuMy4KLSAgICAgIHhjb2RlNDNfc2RrX3BhdGggPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgb3V0LnJzdHJpcCgpLCAnUGxhdGZvcm1zL01hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcycpCi0gICAgICBpZiBvcy5wYXRoLmlzZGlyKHhjb2RlNDNfc2RrX3BhdGgpOgotICAgICAgICBYY29kZVNldHRpbmdzLl9zZGtfYmFzZV9kaXIgPSB4Y29kZTQzX3Nka19wYXRoCi0gICAgICBlbHNlOgotICAgICAgICBYY29kZVNldHRpbmdzLl9zZGtfYmFzZV9kaXIgPSBvcy5wYXRoLmpvaW4ob3V0LnJzdHJpcCgpLCAnU0RLcycpCi0gICAgcmV0dXJuIFhjb2RlU2V0dGluZ3MuX3Nka19iYXNlX2RpcgotCi0gIGRlZiBfU2RrUGF0aChzZWxmKToKLSAgICBzZGtfcm9vdCA9IHNlbGYuR2V0UGVyVGFyZ2V0U2V0dGluZygnU0RLUk9PVCcsIGRlZmF1bHQ9J21hY29zeDEwLjUnKQotICAgIGlmIHNka19yb290LnN0YXJ0c3dpdGgoJ21hY29zeCcpOgotICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9HZXRTZGtCYXNlRGlyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdNYWNPU1gnICsgc2RrX3Jvb3RbbGVuKCdtYWNvc3gnKTpdICsgJy5zZGsnKQotICAgIHJldHVybiBzZGtfcm9vdAotCi0gIGRlZiBHZXRDZmxhZ3Moc2VsZiwgY29uZmlnbmFtZSk6Ci0gICAgIiIiUmV0dXJucyBmbGFncyB0aGF0IG5lZWQgdG8gYmUgYWRkZWQgdG8gLmMsIC5jYywgLm0sIGFuZCAubW0KLSAgICBjb21waWxhdGlvbnMuIiIiCi0gICAgIyBUaGlzIGZ1bmN0aW9ucyAoYW5kIHRoZSBzaW1pbGFyIG9uZXMgYmVsb3cpIGRvIG5vdCBvZmZlciBjb21wbGV0ZQotICAgICMgZW11bGF0aW9uIG9mIGFsbCB4Y29kZV9zZXR0aW5ncyBrZXlzLiBUaGV5J3JlIGltcGxlbWVudGVkIG9uIGRlbWFuZC4KLQotICAgIHNlbGYuY29uZmlnbmFtZSA9IGNvbmZpZ25hbWUKLSAgICBjZmxhZ3MgPSBbXQotCi0gICAgc2RrX3Jvb3QgPSBzZWxmLl9TZGtQYXRoKCkKLSAgICBpZiAnU0RLUk9PVCcgaW4gc2VsZi5fU2V0dGluZ3MoKToKLSAgICAgIGNmbGFncy5hcHBlbmQoJy1pc3lzcm9vdCAlcycgJSBzZGtfcm9vdCkKLQotICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19DSEFSX0lTX1VOU0lHTkVEX0NIQVInLCAnWUVTJywgZGVmYXVsdD0nTk8nKToKLSAgICAgIGNmbGFncy5hcHBlbmQoJy1mdW5zaWduZWQtY2hhcicpCi0KLSAgICBpZiBzZWxmLl9UZXN0KCdHQ0NfQ1dfQVNNX1NZTlRBWCcsICdZRVMnLCBkZWZhdWx0PSdZRVMnKToKLSAgICAgIGNmbGFncy5hcHBlbmQoJy1mYXNtLWJsb2NrcycpCi0KLSAgICBpZiAnR0NDX0RZTkFNSUNfTk9fUElDJyBpbiBzZWxmLl9TZXR0aW5ncygpOgotICAgICAgaWYgc2VsZi5fU2V0dGluZ3MoKVsnR0NDX0RZTkFNSUNfTk9fUElDJ10gPT0gJ1lFUyc6Ci0gICAgICAgIGNmbGFncy5hcHBlbmQoJy1tZHluYW1pYy1uby1waWMnKQotICAgIGVsc2U6Ci0gICAgICBwYXNzCi0gICAgICAjIFRPRE86IEluIHRoaXMgY2FzZSwgaXQgZGVwZW5kcyBvbiB0aGUgdGFyZ2V0LiB4Y29kZSBwYXNzZXMKLSAgICAgICMgbWR5bmFtaWMtbm8tcGljIGJ5IGRlZmF1bHQgZm9yIGV4ZWN1dGFibGUgYW5kIHBvc3NpYmx5IHN0YXRpYyBsaWIKLSAgICAgICMgYWNjb3JkaW5nIHRvIG1lbnRvCi0KLSAgICBpZiBzZWxmLl9UZXN0KCdHQ0NfRU5BQkxFX1BBU0NBTF9TVFJJTkdTJywgJ1lFUycsIGRlZmF1bHQ9J1lFUycpOgotICAgICAgY2ZsYWdzLmFwcGVuZCgnLW1wYXNjYWwtc3RyaW5ncycpCi0KLSAgICBzZWxmLl9BcHBlbmRmKGNmbGFncywgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnLCAnLU8lcycsIGRlZmF1bHQ9J3MnKQotCi0gICAgaWYgc2VsZi5fVGVzdCgnR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTJywgJ1lFUycsIGRlZmF1bHQ9J1lFUycpOgotICAgICAgZGJnX2Zvcm1hdCA9IHNlbGYuX1NldHRpbmdzKCkuZ2V0KCdERUJVR19JTkZPUk1BVElPTl9GT1JNQVQnLCAnZHdhcmYnKQotICAgICAgaWYgZGJnX2Zvcm1hdCA9PSAnZHdhcmYnOgotICAgICAgICBjZmxhZ3MuYXBwZW5kKCctZ2R3YXJmLTInKQotICAgICAgZWxpZiBkYmdfZm9ybWF0ID09ICdzdGFicyc6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3N0YWJzIGRlYnVnIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkIHlldC4nKQotICAgICAgZWxpZiBkYmdfZm9ybWF0ID09ICdkd2FyZi13aXRoLWRzeW0nOgotICAgICAgICBjZmxhZ3MuYXBwZW5kKCctZ2R3YXJmLTInKQotICAgICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVW5rbm93biBkZWJ1ZyBmb3JtYXQgJXMnICUgZGJnX2Zvcm1hdCkKLQotICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICBjZmxhZ3MuYXBwZW5kKCctZnZpc2liaWxpdHk9aGlkZGVuJykKLQotICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMnLCAnWUVTJywgZGVmYXVsdD0nTk8nKToKLSAgICAgIGNmbGFncy5hcHBlbmQoJy1XZXJyb3InKQotCi0gICAgaWYgc2VsZi5fVGVzdCgnR0NDX1dBUk5fQUJPVVRfTUlTU0lOR19ORVdMSU5FJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICBjZmxhZ3MuYXBwZW5kKCctV25ld2xpbmUtZW9mJykKLQotICAgIHNlbGYuX0FwcGVuZGYoY2ZsYWdzLCAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgJy1tbWFjb3N4LXZlcnNpb24tbWluPSVzJykKLQotICAgICMgVE9ETzoKLSAgICBpZiBzZWxmLl9UZXN0KCdDT1BZX1BIQVNFX1NUUklQJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICBzZWxmLl9XYXJuVW5pbXBsZW1lbnRlZCgnQ09QWV9QSEFTRV9TVFJJUCcpCi0gICAgc2VsZi5fV2FyblVuaW1wbGVtZW50ZWQoJ0dDQ19ERUJVR0dJTkdfU1lNQk9MUycpCi0gICAgc2VsZi5fV2FyblVuaW1wbGVtZW50ZWQoJ0dDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TJykKLQotICAgICMgVE9ETzogVGhpcyBpcyBleHBvcnRlZCBjb3JyZWN0bHksIGJ1dCBhc3NpZ25pbmcgdG8gaXQgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBzZWxmLl9XYXJuVW5pbXBsZW1lbnRlZCgnTUFDSF9PX1RZUEUnKQotICAgIHNlbGYuX1dhcm5VbmltcGxlbWVudGVkKCdQUk9EVUNUX1RZUEUnKQotCi0gICAgYXJjaHMgPSBzZWxmLl9TZXR0aW5ncygpLmdldCgnQVJDSFMnLCBbJ2kzODYnXSkKLSAgICBpZiBsZW4oYXJjaHMpICE9IDE6Ci0gICAgICAjIFRPRE86IFN1cHBvcnRpbmcgZmF0IGJpbmFyaWVzIHdpbGwgYmUgYW5ub3lpbmcuCi0gICAgICBzZWxmLl9XYXJuVW5pbXBsZW1lbnRlZCgnQVJDSFMnKQotICAgICAgYXJjaHMgPSBbJ2kzODYnXQotICAgIGNmbGFncy5hcHBlbmQoJy1hcmNoICcgKyBhcmNoc1swXSkKLQotICAgIGlmIGFyY2hzWzBdIGluICgnaTM4NicsICd4ODZfNjQnKToKLSAgICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19FTkFCTEVfU1NFM19FWFRFTlNJT05TJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICAgIGNmbGFncy5hcHBlbmQoJy1tc3NlMycpCi0gICAgICBpZiBzZWxmLl9UZXN0KCdHQ0NfRU5BQkxFX1NVUFBMRU1FTlRBTF9TU0UzX0lOU1RSVUNUSU9OUycsICdZRVMnLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdOTycpOgotICAgICAgICBjZmxhZ3MuYXBwZW5kKCctbXNzc2UzJykgICMgTm90ZSAzcmQgJ3MnLgotICAgICAgaWYgc2VsZi5fVGVzdCgnR0NDX0VOQUJMRV9TU0U0MV9FWFRFTlNJT05TJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICAgIGNmbGFncy5hcHBlbmQoJy1tc3NlNC4xJykKLSAgICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19FTkFCTEVfU1NFNDJfRVhURU5TSU9OUycsICdZRVMnLCBkZWZhdWx0PSdOTycpOgotICAgICAgICBjZmxhZ3MuYXBwZW5kKCctbXNzZTQuMicpCi0KLSAgICBjZmxhZ3MgKz0gc2VsZi5fU2V0dGluZ3MoKS5nZXQoJ1dBUk5JTkdfQ0ZMQUdTJywgW10pCi0KLSAgICBjb25maWcgPSBzZWxmLnNwZWNbJ2NvbmZpZ3VyYXRpb25zJ11bc2VsZi5jb25maWduYW1lXQotICAgIGZyYW1ld29ya19kaXJzID0gY29uZmlnLmdldCgnbWFjX2ZyYW1ld29ya19kaXJzJywgW10pCi0gICAgZm9yIGRpcmVjdG9yeSBpbiBmcmFtZXdvcmtfZGlyczoKLSAgICAgIGNmbGFncy5hcHBlbmQoJy1GJyArIGRpcmVjdG9yeS5yZXBsYWNlKCckKFNES1JPT1QpJywgc2RrX3Jvb3QpKQotCi0gICAgc2VsZi5jb25maWduYW1lID0gTm9uZQotICAgIHJldHVybiBjZmxhZ3MKLQotICBkZWYgR2V0Q2ZsYWdzQyhzZWxmLCBjb25maWduYW1lKToKLSAgICAiIiJSZXR1cm5zIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byAuYywgYW5kIC5tIGNvbXBpbGF0aW9ucy4iIiIKLSAgICBzZWxmLmNvbmZpZ25hbWUgPSBjb25maWduYW1lCi0gICAgY2ZsYWdzX2MgPSBbXQotICAgIHNlbGYuX0FwcGVuZGYoY2ZsYWdzX2MsICdHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCcsICctc3RkPSVzJykKLSAgICBjZmxhZ3NfYyArPSBzZWxmLl9TZXR0aW5ncygpLmdldCgnT1RIRVJfQ0ZMQUdTJywgW10pCi0gICAgc2VsZi5jb25maWduYW1lID0gTm9uZQotICAgIHJldHVybiBjZmxhZ3NfYwotCi0gIGRlZiBHZXRDZmxhZ3NDQyhzZWxmLCBjb25maWduYW1lKToKLSAgICAiIiJSZXR1cm5zIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byAuY2MsIGFuZCAubW0gY29tcGlsYXRpb25zLiIiIgotICAgIHNlbGYuY29uZmlnbmFtZSA9IGNvbmZpZ25hbWUKLSAgICBjZmxhZ3NfY2MgPSBbXQotICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19FTkFCTEVfQ1BQX1JUVEknLCAnTk8nLCBkZWZhdWx0PSdZRVMnKToKLSAgICAgIGNmbGFnc19jYy5hcHBlbmQoJy1mbm8tcnR0aScpCi0gICAgaWYgc2VsZi5fVGVzdCgnR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUycsICdOTycsIGRlZmF1bHQ9J1lFUycpOgotICAgICAgY2ZsYWdzX2NjLmFwcGVuZCgnLWZuby1leGNlcHRpb25zJykKLSAgICBpZiBzZWxmLl9UZXN0KCdHQ0NfSU5MSU5FU19BUkVfUFJJVkFURV9FWFRFUk4nLCAnWUVTJywgZGVmYXVsdD0nTk8nKToKLSAgICAgIGNmbGFnc19jYy5hcHBlbmQoJy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbicpCi0gICAgaWYgc2VsZi5fVGVzdCgnR0NDX1RIUkVBRFNBRkVfU1RBVElDUycsICdOTycsIGRlZmF1bHQ9J1lFUycpOgotICAgICAgY2ZsYWdzX2NjLmFwcGVuZCgnLWZuby10aHJlYWRzYWZlLXN0YXRpY3MnKQotICAgIGlmIHNlbGYuX1Rlc3QoJ0dDQ19XQVJOX0FCT1VUX0lOVkFMSURfT0ZGU0VUT0ZfTUFDUk8nLCAnTk8nLCBkZWZhdWx0PSdZRVMnKToKLSAgICAgIGNmbGFnc19jYy5hcHBlbmQoJy1Xbm8taW52YWxpZC1vZmZzZXRvZicpCi0KLSAgICBvdGhlcl9jY2ZsYWdzID0gW10KLQotICAgIGZvciBmbGFnIGluIHNlbGYuX1NldHRpbmdzKCkuZ2V0KCdPVEhFUl9DUExVU1BMVVNGTEFHUycsIFsnJChpbmhlcml0ZWQpJ10pOgotICAgICAgIyBUT0RPOiBNb3JlIGdlbmVyYWwgdmFyaWFibGUgZXhwYW5zaW9uLiBNaXNzaW5nIGluIG1hbnkgb3RoZXIgcGxhY2VzIHRvby4KLSAgICAgIGlmIGZsYWcgaW4gKCckaW5oZXJpdGVkJywgJyQoaW5oZXJpdGVkKScsICcke2luaGVyaXRlZH0nKToKLSAgICAgICAgZmxhZyA9ICckT1RIRVJfQ0ZMQUdTJwotICAgICAgaWYgZmxhZyBpbiAoJyRPVEhFUl9DRkxBR1MnLCAnJChPVEhFUl9DRkxBR1MpJywgJyR7T1RIRVJfQ0ZMQUdTfScpOgotICAgICAgICBvdGhlcl9jY2ZsYWdzICs9IHNlbGYuX1NldHRpbmdzKCkuZ2V0KCdPVEhFUl9DRkxBR1MnLCBbXSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIG90aGVyX2NjZmxhZ3MuYXBwZW5kKGZsYWcpCi0gICAgY2ZsYWdzX2NjICs9IG90aGVyX2NjZmxhZ3MKLQotICAgIHNlbGYuY29uZmlnbmFtZSA9IE5vbmUKLSAgICByZXR1cm4gY2ZsYWdzX2NjCi0KLSAgZGVmIF9BZGRPYmplY3RpdmVDR2FyYmFnZUNvbGxlY3Rpb25GbGFncyhzZWxmLCBmbGFncyk6Ci0gICAgZ2NfcG9saWN5ID0gc2VsZi5fU2V0dGluZ3MoKS5nZXQoJ0dDQ19FTkFCTEVfT0JKQ19HQycsICd1bnN1cHBvcnRlZCcpCi0gICAgaWYgZ2NfcG9saWN5ID09ICdzdXBwb3J0ZWQnOgotICAgICAgZmxhZ3MuYXBwZW5kKCctZm9iamMtZ2MnKQotICAgIGVsaWYgZ2NfcG9saWN5ID09ICdyZXF1aXJlZCc6Ci0gICAgICBmbGFncy5hcHBlbmQoJy1mb2JqYy1nYy1vbmx5JykKLQotICBkZWYgR2V0Q2ZsYWdzT2JqQyhzZWxmLCBjb25maWduYW1lKToKLSAgICAiIiJSZXR1cm5zIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byAubSBjb21waWxhdGlvbnMuIiIiCi0gICAgc2VsZi5jb25maWduYW1lID0gY29uZmlnbmFtZQotICAgIGNmbGFnc19vYmpjID0gW10KLQotICAgIHNlbGYuX0FkZE9iamVjdGl2ZUNHYXJiYWdlQ29sbGVjdGlvbkZsYWdzKGNmbGFnc19vYmpjKQotCi0gICAgc2VsZi5jb25maWduYW1lID0gTm9uZQotICAgIHJldHVybiBjZmxhZ3Nfb2JqYwotCi0gIGRlZiBHZXRDZmxhZ3NPYmpDQyhzZWxmLCBjb25maWduYW1lKToKLSAgICAiIiJSZXR1cm5zIGZsYWdzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byAubW0gY29tcGlsYXRpb25zLiIiIgotICAgIHNlbGYuY29uZmlnbmFtZSA9IGNvbmZpZ25hbWUKLSAgICBjZmxhZ3Nfb2JqY2MgPSBbXQotICAgIHNlbGYuX0FkZE9iamVjdGl2ZUNHYXJiYWdlQ29sbGVjdGlvbkZsYWdzKGNmbGFnc19vYmpjYykKLSAgICBpZiBzZWxmLl9UZXN0KCdHQ0NfT0JKQ19DQUxMX0NYWF9DRFRPUlMnLCAnWUVTJywgZGVmYXVsdD0nTk8nKToKLSAgICAgIGNmbGFnc19vYmpjYy5hcHBlbmQoJy1mb2JqYy1jYWxsLWN4eC1jZHRvcnMnKQotICAgIHNlbGYuY29uZmlnbmFtZSA9IE5vbmUKLSAgICByZXR1cm4gY2ZsYWdzX29iamNjCi0KLSAgZGVmIEdldEluc3RhbGxOYW1lQmFzZShzZWxmKToKLSAgICAiIiJSZXR1cm4gRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0UgZm9yIHRoaXMgdGFyZ2V0LiIiIgotICAgICMgWGNvZGUgc2V0cyB0aGlzIGZvciBzaGFyZWRfbGlicmFyaWVzLCBhbmQgZm9yIG5vbmJ1bmRsZWQgbG9hZGFibGVfbW9kdWxlcy4KLSAgICBpZiAoc2VsZi5zcGVjWyd0eXBlJ10gIT0gJ3NoYXJlZF9saWJyYXJ5JyBhbmQKLSAgICAgICAgKHNlbGYuc3BlY1sndHlwZSddICE9ICdsb2FkYWJsZV9tb2R1bGUnIG9yIHNlbGYuX0lzQnVuZGxlKCkpKToKLSAgICAgIHJldHVybiBOb25lCi0gICAgaW5zdGFsbF9iYXNlID0gc2VsZi5HZXRQZXJUYXJnZXRTZXR0aW5nKAotICAgICAgICAnRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0UnLAotICAgICAgICBkZWZhdWx0PScvTGlicmFyeS9GcmFtZXdvcmtzJyBpZiBzZWxmLl9Jc0J1bmRsZSgpIGVsc2UgJy91c3IvbG9jYWwvbGliJykKLSAgICByZXR1cm4gaW5zdGFsbF9iYXNlCi0KLSAgZGVmIF9TdGFuZGFyZGl6ZVBhdGgoc2VsZiwgcGF0aCk6Ci0gICAgIiIiRG8gOnN0YW5kYXJkaXplcGF0aCBwcm9jZXNzaW5nIGZvciBwYXRoLiIiIgotICAgICMgSSdtIG5vdCBxdWl0ZSBzdXJlIHdoYXQgOnN0YW5kYXJkaXplcGF0aCBkb2VzLiBKdXN0IGNhbGwgbm9ybXBhdGgoKSwKLSAgICAjIGJ1dCBkb24ndCBsZXQgQGV4ZWN1dGFibGVfcGF0aC8uLi9mb28gY29sbGFwc2UgdG8gZm9vLgotICAgIGlmICcvJyBpbiBwYXRoOgotICAgICAgcHJlZml4LCByZXN0ID0gJycsIHBhdGgKLSAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgnQCcpOgotICAgICAgICBwcmVmaXgsIHJlc3QgPSBwYXRoLnNwbGl0KCcvJywgMSkKLSAgICAgIHJlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJlc3QpICAjIDpzdGFuZGFyZGl6ZXBhdGgKLSAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocHJlZml4LCByZXN0KQotICAgIHJldHVybiBwYXRoCi0KLSAgZGVmIEdldEluc3RhbGxOYW1lKHNlbGYpOgotICAgICIiIlJldHVybiBMRF9EWUxJQl9JTlNUQUxMX05BTUUgZm9yIHRoaXMgdGFyZ2V0LiIiIgotICAgICMgWGNvZGUgc2V0cyB0aGlzIGZvciBzaGFyZWRfbGlicmFyaWVzLCBhbmQgZm9yIG5vbmJ1bmRsZWQgbG9hZGFibGVfbW9kdWxlcy4KLSAgICBpZiAoc2VsZi5zcGVjWyd0eXBlJ10gIT0gJ3NoYXJlZF9saWJyYXJ5JyBhbmQKLSAgICAgICAgKHNlbGYuc3BlY1sndHlwZSddICE9ICdsb2FkYWJsZV9tb2R1bGUnIG9yIHNlbGYuX0lzQnVuZGxlKCkpKToKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWZhdWx0X2luc3RhbGxfbmFtZSA9IFwKLSAgICAgICAgJyQoRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0U6c3RhbmRhcmRpemVwYXRoKS8kKEVYRUNVVEFCTEVfUEFUSCknCi0gICAgaW5zdGFsbF9uYW1lID0gc2VsZi5HZXRQZXJUYXJnZXRTZXR0aW5nKAotICAgICAgICAnTERfRFlMSUJfSU5TVEFMTF9OQU1FJywgZGVmYXVsdD1kZWZhdWx0X2luc3RhbGxfbmFtZSkKLQotICAgICMgSGFyZGNvZGUgc3VwcG9ydCBmb3IgdGhlIHZhcmlhYmxlcyB1c2VkIGluIGNocm9taXVtIGZvciBub3csIHRvCi0gICAgIyB1bmJsb2NrIHBlb3BsZSB1c2luZyB0aGUgbWFrZSBidWlsZC4KLSAgICBpZiAnJCcgaW4gaW5zdGFsbF9uYW1lOgotICAgICAgYXNzZXJ0IGluc3RhbGxfbmFtZSBpbiAoJyQoRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0U6c3RhbmRhcmRpemVwYXRoKS8nCi0gICAgICAgICAgJyQoV1JBUFBFUl9OQU1FKS8kKFBST0RVQ1RfTkFNRSknLCBkZWZhdWx0X2luc3RhbGxfbmFtZSksICgKLSAgICAgICAgICAnVmFyaWFibGVzIGluIExEX0RZTElCX0lOU1RBTExfTkFNRSBhcmUgbm90IGdlbmVyYWxseSBzdXBwb3J0ZWQgJwotICAgICAgICAgICd5ZXQgaW4gdGFyZ2V0IFwnJXNcJyAoZ290IFwnJXNcJyknICUKLSAgICAgICAgICAgICAgKHNlbGYuc3BlY1sndGFyZ2V0X25hbWUnXSwgaW5zdGFsbF9uYW1lKSkKLQotICAgICAgaW5zdGFsbF9uYW1lID0gaW5zdGFsbF9uYW1lLnJlcGxhY2UoCi0gICAgICAgICAgJyQoRFlMSUJfSU5TVEFMTF9OQU1FX0JBU0U6c3RhbmRhcmRpemVwYXRoKScsCi0gICAgICAgICAgc2VsZi5fU3RhbmRhcmRpemVQYXRoKHNlbGYuR2V0SW5zdGFsbE5hbWVCYXNlKCkpKQotICAgICAgaWYgc2VsZi5fSXNCdW5kbGUoKToKLSAgICAgICAgIyBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgYnVuZGxlcywgaGVuY2UgdGhlIHxpZnwuCi0gICAgICAgIGluc3RhbGxfbmFtZSA9IGluc3RhbGxfbmFtZS5yZXBsYWNlKAotICAgICAgICAgICAgJyQoV1JBUFBFUl9OQU1FKScsIHNlbGYuR2V0V3JhcHBlck5hbWUoKSkKLSAgICAgICAgaW5zdGFsbF9uYW1lID0gaW5zdGFsbF9uYW1lLnJlcGxhY2UoCi0gICAgICAgICAgICAnJChQUk9EVUNUX05BTUUpJywgc2VsZi5HZXRQcm9kdWN0TmFtZSgpKQotICAgICAgZWxzZToKLSAgICAgICAgYXNzZXJ0ICckKFdSQVBQRVJfTkFNRSknIG5vdCBpbiBpbnN0YWxsX25hbWUKLSAgICAgICAgYXNzZXJ0ICckKFBST0RVQ1RfTkFNRSknIG5vdCBpbiBpbnN0YWxsX25hbWUKLQotICAgICAgaW5zdGFsbF9uYW1lID0gaW5zdGFsbF9uYW1lLnJlcGxhY2UoCi0gICAgICAgICAgJyQoRVhFQ1VUQUJMRV9QQVRIKScsIHNlbGYuR2V0RXhlY3V0YWJsZVBhdGgoKSkKLSAgICByZXR1cm4gaW5zdGFsbF9uYW1lCi0KLSAgZGVmIF9NYXBMaW5rZXJGbGFnRmlsZW5hbWUoc2VsZiwgbGRmbGFnLCBneXBfdG9fYnVpbGRfcGF0aCk6Ci0gICAgIiIiQ2hlY2tzIGlmIGxkZmxhZyBjb250YWlucyBhIGZpbGVuYW1lIGFuZCBpZiBzbyByZW1hcHMgaXQgZnJvbQotICAgIGd5cC1kaXJlY3RvcnktcmVsYXRpdmUgdG8gYnVpbGQtZGlyZWN0b3J5LXJlbGF0aXZlLiIiIgotICAgICMgVGhpcyBsaXN0IGlzIGV4cGFuZGVkIG9uIGRlbWFuZC4KLSAgICAjIFRoZXkgZ2V0IG1hdGNoZWQgYXM6Ci0gICAgIyAgIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmlsZQotICAgICMgICAtV2wsZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZpbGUKLSAgICAjICAgLVdsLGV4cG9ydGVkX3N5bWJvbHNfbGlzdCxmaWxlCi0gICAgTElOS0VSX0ZJTEUgPSAnKFxTKyknCi0gICAgV09SRCA9ICdcUysnCi0gICAgbGlua2VyX2ZsYWdzID0gWwotICAgICAgWyctZXhwb3J0ZWRfc3ltYm9sc19saXN0JywgTElOS0VSX0ZJTEVdLCAgICAjIE5lZWRlZCBmb3IgTmFDbC4KLSAgICAgIFsnLXVuZXhwb3J0ZWRfc3ltYm9sc19saXN0JywgTElOS0VSX0ZJTEVdLAotICAgICAgWyctcmVleHBvcnRlZF9zeW1ib2xzX2xpc3QnLCBMSU5LRVJfRklMRV0sCi0gICAgICBbJy1zZWN0Y3JlYXRlJywgV09SRCwgV09SRCwgTElOS0VSX0ZJTEVdLCAgICMgTmVlZGVkIGZvciByZW1vdGluZy4KLSAgICBdCi0gICAgZm9yIGZsYWdfcGF0dGVybiBpbiBsaW5rZXJfZmxhZ3M6Ci0gICAgICByZWdleCA9IHJlLmNvbXBpbGUoJyg/Oi1XbCwpPycgKyAnWyAsXScuam9pbihmbGFnX3BhdHRlcm4pKQotICAgICAgbSA9IHJlZ2V4Lm1hdGNoKGxkZmxhZykKLSAgICAgIGlmIG06Ci0gICAgICAgIGxkZmxhZyA9IGxkZmxhZ1s6bS5zdGFydCgxKV0gKyBneXBfdG9fYnVpbGRfcGF0aChtLmdyb3VwKDEpKSArIFwKLSAgICAgICAgICAgICAgICAgbGRmbGFnW20uZW5kKDEpOl0KLSAgICAjIFJlcXVpcmVkIGZvciBmZm1wZWcgKG5vIGlkZWEgd2h5IHRoZXkgZG9uJ3QgdXNlIExJQlJBUllfU0VBUkNIX1BBVEhTLAotICAgICMgVE9ETyh0aGFraXMpOiBVcGRhdGUgZmZtcGVnLmd5cCk6Ci0gICAgaWYgbGRmbGFnLnN0YXJ0c3dpdGgoJy1MJyk6Ci0gICAgICBsZGZsYWcgPSAnLUwnICsgZ3lwX3RvX2J1aWxkX3BhdGgobGRmbGFnW2xlbignLUwnKTpdKQotICAgIHJldHVybiBsZGZsYWcKLQotICBkZWYgR2V0TGRmbGFncyhzZWxmLCBjb25maWduYW1lLCBwcm9kdWN0X2RpciwgZ3lwX3RvX2J1aWxkX3BhdGgpOgotICAgICIiIlJldHVybnMgZmxhZ3MgdGhhdCBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgbGlua2VyLgotCi0gICAgQXJnczoKLSAgICAgICAgY29uZmlnbmFtZTogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IGxkIGZsYWdzIGZvci4KLSAgICAgICAgcHJvZHVjdF9kaXI6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgcHJvZHVjdHMgc3VjaCBzdGF0aWMgYW5kIGR5bmFtaWMKLSAgICAgICAgICAgIGxpYnJhcmllcyBhcmUgcGxhY2VkLiBUaGlzIGlzIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotICAgICAgICBneXBfdG9fYnVpbGRfcGF0aDogQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICAgICAgY3VycmVudCBneXAgZmlsZSB0byBwYXRocyByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWNvdHJ5LgotICAgICIiIgotICAgIHNlbGYuY29uZmlnbmFtZSA9IGNvbmZpZ25hbWUKLSAgICBsZGZsYWdzID0gW10KLQotICAgICMgVGhlIHhjb2RlIGJ1aWxkIGlzIHJlbGF0aXZlIHRvIGEgZ3lwIGZpbGUncyBkaXJlY3RvcnksIGFuZCBPVEhFUl9MREZMQUdTCi0gICAgIyBjYW4gY29udGFpbiBlbnRyaWVzIHRoYXQgZGVwZW5kIG9uIHRoaXMuIEV4cGxpY2l0bHkgYWJzb2x1dGlmeSB0aGVzZS4KLSAgICBmb3IgbGRmbGFnIGluIHNlbGYuX1NldHRpbmdzKCkuZ2V0KCdPVEhFUl9MREZMQUdTJywgW10pOgotICAgICAgbGRmbGFncy5hcHBlbmQoc2VsZi5fTWFwTGlua2VyRmxhZ0ZpbGVuYW1lKGxkZmxhZywgZ3lwX3RvX2J1aWxkX3BhdGgpKQotCi0gICAgaWYgc2VsZi5fVGVzdCgnREVBRF9DT0RFX1NUUklQUElORycsICdZRVMnLCBkZWZhdWx0PSdOTycpOgotICAgICAgbGRmbGFncy5hcHBlbmQoJy1XbCwtZGVhZF9zdHJpcCcpCi0KLSAgICBpZiBzZWxmLl9UZXN0KCdQUkVCSU5ESU5HJywgJ1lFUycsIGRlZmF1bHQ9J05PJyk6Ci0gICAgICBsZGZsYWdzLmFwcGVuZCgnLVdsLC1wcmViaW5kJykKLQotICAgIHNlbGYuX0FwcGVuZGYoCi0gICAgICAgIGxkZmxhZ3MsICdEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04nLCAnLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAlcycpCi0gICAgc2VsZi5fQXBwZW5kZigKLSAgICAgICAgbGRmbGFncywgJ0RZTElCX0NVUlJFTlRfVkVSU0lPTicsICctY3VycmVudF92ZXJzaW9uICVzJykKLSAgICBzZWxmLl9BcHBlbmRmKAotICAgICAgICBsZGZsYWdzLCAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgJy1tbWFjb3N4LXZlcnNpb24tbWluPSVzJykKLSAgICBpZiAnU0RLUk9PVCcgaW4gc2VsZi5fU2V0dGluZ3MoKToKLSAgICAgIGxkZmxhZ3MuYXBwZW5kKCctaXN5c3Jvb3QgJyArIHNlbGYuX1Nka1BhdGgoKSkKLQotICAgIGZvciBsaWJyYXJ5X3BhdGggaW4gc2VsZi5fU2V0dGluZ3MoKS5nZXQoJ0xJQlJBUllfU0VBUkNIX1BBVEhTJywgW10pOgotICAgICAgbGRmbGFncy5hcHBlbmQoJy1MJyArIGd5cF90b19idWlsZF9wYXRoKGxpYnJhcnlfcGF0aCkpCi0KLSAgICBpZiAnT1JERVJfRklMRScgaW4gc2VsZi5fU2V0dGluZ3MoKToKLSAgICAgIGxkZmxhZ3MuYXBwZW5kKCctV2wsLW9yZGVyX2ZpbGUgJyArCi0gICAgICAgICAgICAgICAgICAgICAnLVdsLCcgKyBneXBfdG9fYnVpbGRfcGF0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9TZXR0aW5ncygpWydPUkRFUl9GSUxFJ10pKQotCi0gICAgYXJjaHMgPSBzZWxmLl9TZXR0aW5ncygpLmdldCgnQVJDSFMnLCBbJ2kzODYnXSkKLSAgICBpZiBsZW4oYXJjaHMpICE9IDE6Ci0gICAgICAjIFRPRE86IFN1cHBvcnRpbmcgZmF0IGJpbmFyaWVzIHdpbGwgYmUgYW5ub3lpbmcuCi0gICAgICBzZWxmLl9XYXJuVW5pbXBsZW1lbnRlZCgnQVJDSFMnKQotICAgICAgYXJjaHMgPSBbJ2kzODYnXQotICAgIGxkZmxhZ3MuYXBwZW5kKCctYXJjaCAnICsgYXJjaHNbMF0pCi0KLSAgICAjIFhjb2RlIGFkZHMgdGhlIHByb2R1Y3QgZGlyZWN0b3J5IGJ5IGRlZmF1bHQuCi0gICAgbGRmbGFncy5hcHBlbmQoJy1MJyArIHByb2R1Y3RfZGlyKQotCi0gICAgaW5zdGFsbF9uYW1lID0gc2VsZi5HZXRJbnN0YWxsTmFtZSgpCi0gICAgaWYgaW5zdGFsbF9uYW1lOgotICAgICAgbGRmbGFncy5hcHBlbmQoJy1pbnN0YWxsX25hbWUgJyArIGluc3RhbGxfbmFtZS5yZXBsYWNlKCcgJywgcidcICcpKQotCi0gICAgZm9yIHJwYXRoIGluIHNlbGYuX1NldHRpbmdzKCkuZ2V0KCdMRF9SVU5QQVRIX1NFQVJDSF9QQVRIUycsIFtdKToKLSAgICAgIGxkZmxhZ3MuYXBwZW5kKCctV2wsLXJwYXRoLCcgKyBycGF0aCkKLQotICAgIGNvbmZpZyA9IHNlbGYuc3BlY1snY29uZmlndXJhdGlvbnMnXVtzZWxmLmNvbmZpZ25hbWVdCi0gICAgZnJhbWV3b3JrX2RpcnMgPSBjb25maWcuZ2V0KCdtYWNfZnJhbWV3b3JrX2RpcnMnLCBbXSkKLSAgICBmb3IgZGlyZWN0b3J5IGluIGZyYW1ld29ya19kaXJzOgotICAgICAgbGRmbGFncy5hcHBlbmQoJy1GJyArIGRpcmVjdG9yeS5yZXBsYWNlKCckKFNES1JPT1QpJywgc2VsZi5fU2RrUGF0aCgpKSkKLQotICAgIHNlbGYuY29uZmlnbmFtZSA9IE5vbmUKLSAgICByZXR1cm4gbGRmbGFncwotCi0gIGRlZiBHZXRMaWJ0b29sZmxhZ3Moc2VsZiwgY29uZmlnbmFtZSk6Ci0gICAgIiIiUmV0dXJucyBmbGFncyB0aGF0IG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBzdGF0aWMgbGlua2VyLgotCi0gICAgQXJnczoKLSAgICAgICAgY29uZmlnbmFtZTogVGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IGxkIGZsYWdzIGZvci4KLSAgICAiIiIKLSAgICBzZWxmLmNvbmZpZ25hbWUgPSBjb25maWduYW1lCi0gICAgbGlidG9vbGZsYWdzID0gW10KLQotICAgIGZvciBsaWJ0b29sZmxhZyBpbiBzZWxmLl9TZXR0aW5ncygpLmdldCgnT1RIRVJfTERGTEFHUycsIFtdKToKLSAgICAgIGxpYnRvb2xmbGFncy5hcHBlbmQobGlidG9vbGZsYWcpCi0gICAgIyBUT0RPKHRoYWtpcyk6IEFSQ0hTPwotCi0gICAgc2VsZi5jb25maWduYW1lID0gTm9uZQotICAgIHJldHVybiBsaWJ0b29sZmxhZ3MKLQotICBkZWYgR2V0UGVyVGFyZ2V0U2V0dGluZ3Moc2VsZik6Ci0gICAgIiIiR2V0cyBhIGxpc3Qgb2YgYWxsIHRoZSBwZXItdGFyZ2V0IHNldHRpbmdzLiBUaGlzIHdpbGwgb25seSBmZXRjaCBrZXlzCi0gICAgd2hvc2UgdmFsdWVzIGFyZSB0aGUgc2FtZSBhY3Jvc3MgYWxsIGNvbmZpZ3VyYXRpb25zLiIiIgotICAgIGZpcnN0X3Bhc3MgPSBUcnVlCi0gICAgcmVzdWx0ID0ge30KLSAgICBmb3IgY29uZmlnbmFtZSBpbiBzb3J0ZWQoc2VsZi54Y29kZV9zZXR0aW5ncy5rZXlzKCkpOgotICAgICAgaWYgZmlyc3RfcGFzczoKLSAgICAgICAgcmVzdWx0ID0gZGljdChzZWxmLnhjb2RlX3NldHRpbmdzW2NvbmZpZ25hbWVdKQotICAgICAgICBmaXJzdF9wYXNzID0gRmFsc2UKLSAgICAgIGVsc2U6Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYueGNvZGVfc2V0dGluZ3NbY29uZmlnbmFtZV0uaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgaWYga2V5IG5vdCBpbiByZXN1bHQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgIGVsaWYgcmVzdWx0W2tleV0gIT0gdmFsdWU6Ci0gICAgICAgICAgICBkZWwgcmVzdWx0W2tleV0KLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIEdldFBlclRhcmdldFNldHRpbmcoc2VsZiwgc2V0dGluZywgZGVmYXVsdD1Ob25lKToKLSAgICAiIiJUcmllcyB0byBnZXQgeGNvZGVfc2V0dGluZ3Muc2V0dGluZyBmcm9tIHNwZWMuIEFzc3VtZXMgdGhhdCB0aGUgc2V0dGluZwotICAgICAgIGhhcyB0aGUgc2FtZSB2YWx1ZSBpbiBhbGwgY29uZmlndXJhdGlvbnMgYW5kIHRocm93cyBvdGhlcndpc2UuIiIiCi0gICAgZmlyc3RfcGFzcyA9IFRydWUKLSAgICByZXN1bHQgPSBOb25lCi0gICAgZm9yIGNvbmZpZ25hbWUgaW4gc29ydGVkKHNlbGYueGNvZGVfc2V0dGluZ3Mua2V5cygpKToKLSAgICAgIGlmIGZpcnN0X3Bhc3M6Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYueGNvZGVfc2V0dGluZ3NbY29uZmlnbmFtZV0uZ2V0KHNldHRpbmcsIE5vbmUpCi0gICAgICAgIGZpcnN0X3Bhc3MgPSBGYWxzZQotICAgICAgZWxzZToKLSAgICAgICAgYXNzZXJ0IHJlc3VsdCA9PSBzZWxmLnhjb2RlX3NldHRpbmdzW2NvbmZpZ25hbWVdLmdldChzZXR0aW5nLCBOb25lKSwgKAotICAgICAgICAgICAgIkV4cGVjdGVkIHBlci10YXJnZXQgc2V0dGluZyBmb3IgJyVzJywgZ290IHBlci1jb25maWcgc2V0dGluZyAiCi0gICAgICAgICAgICAiKHRhcmdldCAlcykiICUgKHNldHRpbmcsIHNwZWNbJ3RhcmdldF9uYW1lJ10pKQotICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgcmV0dXJuIGRlZmF1bHQKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIF9HZXRTdHJpcFBvc3RidWlsZHMoc2VsZiwgY29uZmlnbmFtZSwgb3V0cHV0X2JpbmFyeSwgcXVpZXQpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRoYXQgY29udGFpbiB0aGUgc2hlbGwgY29tbWFuZHMKLSAgICBuZWNjZXNzYXJ5IHRvIHN0cmlwIHRoaXMgdGFyZ2V0J3MgYmluYXJ5LiBUaGVzZSBzaG91bGQgYmUgcnVuIGFzIHBvc3RidWlsZHMKLSAgICBiZWZvcmUgdGhlIGFjdHVhbCBwb3N0YnVpbGRzIHJ1bi4iIiIKLSAgICBzZWxmLmNvbmZpZ25hbWUgPSBjb25maWduYW1lCi0KLSAgICByZXN1bHQgPSBbXQotICAgIGlmIChzZWxmLl9UZXN0KCdERVBMT1lNRU5UX1BPU1RQUk9DRVNTSU5HJywgJ1lFUycsIGRlZmF1bHQ9J05PJykgYW5kCi0gICAgICAgIHNlbGYuX1Rlc3QoJ1NUUklQX0lOU1RBTExFRF9QUk9EVUNUJywgJ1lFUycsIGRlZmF1bHQ9J05PJykpOgotCi0gICAgICBkZWZhdWx0X3N0cmlwX3N0eWxlID0gJ2RlYnVnZ2luZycKLSAgICAgIGlmIHNlbGYuX0lzQnVuZGxlKCk6Ci0gICAgICAgIGRlZmF1bHRfc3RyaXBfc3R5bGUgPSAnbm9uLWdsb2JhbCcKLSAgICAgIGVsaWYgc2VsZi5zcGVjWyd0eXBlJ10gPT0gJ2V4ZWN1dGFibGUnOgotICAgICAgICBkZWZhdWx0X3N0cmlwX3N0eWxlID0gJ2FsbCcKLQotICAgICAgc3RyaXBfc3R5bGUgPSBzZWxmLl9TZXR0aW5ncygpLmdldCgnU1RSSVBfU1RZTEUnLCBkZWZhdWx0X3N0cmlwX3N0eWxlKQotICAgICAgc3RyaXBfZmxhZ3MgPSB7Ci0gICAgICAgICdhbGwnOiAnJywKLSAgICAgICAgJ25vbi1nbG9iYWwnOiAnLXgnLAotICAgICAgICAnZGVidWdnaW5nJzogJy1TJywKLSAgICAgIH1bc3RyaXBfc3R5bGVdCi0KLSAgICAgIGV4cGxpY2l0X3N0cmlwX2ZsYWdzID0gc2VsZi5fU2V0dGluZ3MoKS5nZXQoJ1NUUklQRkxBR1MnLCAnJykKLSAgICAgIGlmIGV4cGxpY2l0X3N0cmlwX2ZsYWdzOgotICAgICAgICBzdHJpcF9mbGFncyArPSAnICcgKyBfTm9ybWFsaXplRW52VmFyUmVmZXJlbmNlcyhleHBsaWNpdF9zdHJpcF9mbGFncykKLQotICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICByZXN1bHQuYXBwZW5kKCdlY2hvIFNUUklQXFwoJXNcXCknICUgc2VsZi5zcGVjWyd0YXJnZXRfbmFtZSddKQotICAgICAgcmVzdWx0LmFwcGVuZCgnc3RyaXAgJXMgJXMnICUgKHN0cmlwX2ZsYWdzLCBvdXRwdXRfYmluYXJ5KSkKLQotICAgIHNlbGYuY29uZmlnbmFtZSA9IE5vbmUKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIF9HZXREZWJ1Z0luZm9Qb3N0YnVpbGRzKHNlbGYsIGNvbmZpZ25hbWUsIG91dHB1dCwgb3V0cHV0X2JpbmFyeSwgcXVpZXQpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRoYXQgY29udGFpbiB0aGUgc2hlbGwgY29tbWFuZHMKLSAgICBuZWNjZXNzYXJ5IHRvIG1hc3NhZ2UgdGhpcyB0YXJnZXQncyBkZWJ1ZyBpbmZvcm1hdGlvbi4gVGhlc2Ugc2hvdWxkIGJlIHJ1bgotICAgIGFzIHBvc3RidWlsZHMgYmVmb3JlIHRoZSBhY3R1YWwgcG9zdGJ1aWxkcyBydW4uIiIiCi0gICAgc2VsZi5jb25maWduYW1lID0gY29uZmlnbmFtZQotCi0gICAgIyBGb3Igc3RhdGljIGxpYnJhcmllcywgbm8gZFNZTXMgYXJlIGNyZWF0ZWQuCi0gICAgcmVzdWx0ID0gW10KLSAgICBpZiAoc2VsZi5fVGVzdCgnR0NDX0dFTkVSQVRFX0RFQlVHR0lOR19TWU1CT0xTJywgJ1lFUycsIGRlZmF1bHQ9J1lFUycpIGFuZAotICAgICAgICBzZWxmLl9UZXN0KAotICAgICAgICAgICAgJ0RFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCcsICdkd2FyZi13aXRoLWRzeW0nLCBkZWZhdWx0PSdkd2FyZicpIGFuZAotICAgICAgICBzZWxmLnNwZWNbJ3R5cGUnXSAhPSAnc3RhdGljX2xpYnJhcnknKToKLSAgICAgIGlmIG5vdCBxdWlldDoKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgnZWNobyBEU1lNVVRJTFxcKCVzXFwpJyAlIHNlbGYuc3BlY1sndGFyZ2V0X25hbWUnXSkKLSAgICAgIHJlc3VsdC5hcHBlbmQoJ2RzeW11dGlsICVzIC1vICVzJyAlIChvdXRwdXRfYmluYXJ5LCBvdXRwdXQgKyAnLmRTWU0nKSkKLQotICAgIHNlbGYuY29uZmlnbmFtZSA9IE5vbmUKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIEdldFRhcmdldFBvc3RidWlsZHMoc2VsZiwgY29uZmlnbmFtZSwgb3V0cHV0LCBvdXRwdXRfYmluYXJ5LCBxdWlldD1GYWxzZSk6Ci0gICAgIiIiUmV0dXJucyBhIGxpc3Qgb2Ygc2hlbGwgY29tbWFuZHMgdGhhdCBjb250YWluIHRoZSBzaGVsbCBjb21tYW5kcwotICAgIHRvIHJ1biBhcyBwb3N0YnVpbGRzIGZvciB0aGlzIHRhcmdldCwgYmVmb3JlIHRoZSBhY3R1YWwgcG9zdGJ1aWxkcy4iIiIKLSAgICAjIGRTWU1zIG5lZWQgdG8gYnVpbGQgYmVmb3JlIHN0cmlwcGluZyBoYXBwZW5zLgotICAgIHJldHVybiAoCi0gICAgICAgIHNlbGYuX0dldERlYnVnSW5mb1Bvc3RidWlsZHMoY29uZmlnbmFtZSwgb3V0cHV0LCBvdXRwdXRfYmluYXJ5LCBxdWlldCkgKwotICAgICAgICBzZWxmLl9HZXRTdHJpcFBvc3RidWlsZHMoY29uZmlnbmFtZSwgb3V0cHV0X2JpbmFyeSwgcXVpZXQpKQotCi0gIGRlZiBfQWRqdXN0TGlicmFyeShzZWxmLCBsaWJyYXJ5KToKLSAgICBpZiBsaWJyYXJ5LmVuZHN3aXRoKCcuZnJhbWV3b3JrJyk6Ci0gICAgICBsID0gJy1mcmFtZXdvcmsgJyArIG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShsaWJyYXJ5KSlbMF0KLSAgICBlbHNlOgotICAgICAgbSA9IHNlbGYubGlicmFyeV9yZS5tYXRjaChsaWJyYXJ5KQotICAgICAgaWYgbToKLSAgICAgICAgbCA9ICctbCcgKyBtLmdyb3VwKDEpCi0gICAgICBlbHNlOgotICAgICAgICBsID0gbGlicmFyeQotICAgIHJldHVybiBsLnJlcGxhY2UoJyQoU0RLUk9PVCknLCBzZWxmLl9TZGtQYXRoKCkpCi0KLSAgZGVmIEFkanVzdExpYnJhcmllcyhzZWxmLCBsaWJyYXJpZXMpOgotICAgICIiIlRyYW5zZm9ybXMgZW50cmllcyBsaWtlICdDb2NvYS5mcmFtZXdvcmsnIGluIGxpYnJhcmllcyBpbnRvIGVudHJpZXMgbGlrZQotICAgICctZnJhbWV3b3JrIENvY29hJywgJ2xpYmNyeXB0by5keWxpYicgaW50byAnLWxjcnlwdG8nLCBldGMuCi0gICAgIiIiCi0gICAgbGlicmFyaWVzID0gWyBzZWxmLl9BZGp1c3RMaWJyYXJ5KGxpYnJhcnkpIGZvciBsaWJyYXJ5IGluIGxpYnJhcmllc10KLSAgICByZXR1cm4gbGlicmFyaWVzCi0KLQotY2xhc3MgTWFjUHJlZml4SGVhZGVyKG9iamVjdCk6Ci0gICIiIkEgY2xhc3MgdGhhdCBoZWxwcyB3aXRoIGVtdWxhdGluZyBYY29kZSdzIEdDQ19QUkVGSVhfSEVBREVSIGZlYXR1cmUuCi0KLSAgVGhpcyBmZWF0dXJlIGNvbnNpc3RzIG9mIHNldmVyYWwgcGllY2VzOgotICAqIElmIEdDQ19QUkVGSVhfSEVBREVSIGlzIHByZXNlbnQsIGFsbCBjb21waWxhdGlvbnMgaW4gdGhhdCBwcm9qZWN0IGdldCBhbgotICAgIGFkZGl0aW9uYWwgfC1pbmNsdWRlIHBhdGhfdG9fcHJlZml4X2hlYWRlcnwgY2ZsYWcuCi0gICogSWYgR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiBpcyBwcmVzZW50IHRvbywgdGhlbiB0aGUgcHJlZml4IGhlYWRlciBpcwotICAgIGluc3RlYWQgY29tcGlsZWQsIGFuZCBhbGwgb3RoZXIgY29tcGlsYXRpb25zIGluIHRoZSBwcm9qZWN0IGdldCBhbgotICAgIGFkZGl0aW9uYWwgfC1pbmNsdWRlIHBhdGhfdG9fY29tcGlsZWRfaGVhZGVyfCBpbnN0ZWFkLgotICAgICsgQ29tcGlsZWQgcHJlZml4IGhlYWRlcnMgaGF2ZSB0aGUgZXh0ZW5zaW9uIGdjaC4gVGhlcmUgaXMgb25lIGdjaCBmaWxlIGZvcgotICAgICAgZXZlcnkgbGFuZ3VhZ2UgdXNlZCBpbiB0aGUgcHJvamVjdCAoYywgY2MsIG0sIG1tKSwgc2luY2UgZ2NoIGZpbGVzIGZvcgotICAgICAgZGlmZmVyZW50IGxhbmd1YWdlcyBhcmVuJ3QgY29tcGF0aWJsZS4KLSAgICArIGdjaCBmaWxlcyB0aGVtc2VsdmVzIGFyZSBidWlsdCB3aXRoIHRoZSB0YXJnZXQncyBub3JtYWwgY2ZsYWdzLCBidXQgdGhleQotICAgICAgb2J2aW91c2x5IGRvbid0IGdldCB0aGUgfC1pbmNsdWRlfCBmbGFnLiBJbnN0ZWFkLCB0aGV5IG5lZWQgYSAteCBmbGFnIHRoYXQKLSAgICAgIGRlc2NyaWJlcyB0aGVpciBsYW5ndWFnZS4KLSAgICArIEFsbCBvIGZpbGVzIGluIHRoZSB0YXJnZXQgbmVlZCB0byBkZXBlbmQgb24gdGhlIGdjaCBmaWxlLCB0byBtYWtlIHN1cmUKLSAgICAgIGl0J3MgYnVpbHQgYmVmb3JlIGFueSBvIGZpbGUgaXMgYnVpbHQuCi0KLSAgVGhpcyBjbGFzcyBoZWxwcyB3aXRoIHNvbWUgb2YgdGhlc2UgdGFza3MsIGJ1dCBpdCBuZWVkcyBoZWxwIGZyb20gdGhlIGJ1aWxkCi0gIHN5c3RlbSBmb3Igd3JpdGluZyBkZXBlbmRlbmNpZXMgdG8gdGhlIGdjaCBmaWxlcywgZm9yIHdyaXRpbmcgYnVpbGQgY29tbWFuZHMKLSAgZm9yIHRoZSBnY2ggZmlsZXMsIGFuZCBmb3IgZmlndXJpbmcgb3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2NoIGZpbGVzLgotICAiIiIKLSAgZGVmIF9faW5pdF9fKHNlbGYsIHhjb2RlX3NldHRpbmdzLAotICAgICAgICAgICAgICAgZ3lwX3BhdGhfdG9fYnVpbGRfcGF0aCwgZ3lwX3BhdGhfdG9fYnVpbGRfb3V0cHV0KToKLSAgICAiIiJJZiB4Y29kZV9zZXR0aW5ncyBpcyBOb25lLCBhbGwgbWV0aG9kcyBvbiB0aGlzIGNsYXNzIGFyZSBuby1vcHMuCi0KLSAgICBBcmdzOgotICAgICAgICBneXBfcGF0aF90b19idWlsZF9wYXRoOiBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBneXAtcmVsYXRpdmUgcGF0aCwKLSAgICAgICAgICAgIGFuZCByZXR1cm5zIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LgotICAgICAgICBneXBfcGF0aF90b19idWlsZF9vdXRwdXQ6IEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGd5cC1yZWxhdGl2ZSBwYXRoIGFuZAotICAgICAgICAgICAgYSBsYW5ndWFnZSBjb2RlICgnYycsICdjYycsICdtJywgb3IgJ21tJyksIGFuZCB0aGF0IHJldHVybnMgYSBwYXRoCi0gICAgICAgICAgICB0byB3aGVyZSB0aGUgb3V0cHV0IG9mIHByZWNvbXBpbGluZyB0aGF0IHBhdGggZm9yIHRoYXQgbGFuZ3VhZ2UKLSAgICAgICAgICAgIHNob3VsZCBiZSBwbGFjZWQgKHdpdGhvdXQgdGhlIHRyYWlsaW5nICcuZ2NoJykuCi0gICAgIiIiCi0gICAgIyBUaGlzIGRvZXNuJ3Qgc3VwcG9ydCBwZXItY29uZmlndXJhdGlvbiBwcmVmaXggaGVhZGVycy4gR29vZCBlbm91Z2gKLSAgICAjIGZvciBub3cuCi0gICAgc2VsZi5oZWFkZXIgPSBOb25lCi0gICAgc2VsZi5jb21waWxlX2hlYWRlcnMgPSBGYWxzZQotICAgIGlmIHhjb2RlX3NldHRpbmdzOgotICAgICAgc2VsZi5oZWFkZXIgPSB4Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5nKCdHQ0NfUFJFRklYX0hFQURFUicpCi0gICAgICBzZWxmLmNvbXBpbGVfaGVhZGVycyA9IHhjb2RlX3NldHRpbmdzLkdldFBlclRhcmdldFNldHRpbmcoCi0gICAgICAgICAgJ0dDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVInLCBkZWZhdWx0PSdOTycpICE9ICdOTycKLSAgICBzZWxmLmNvbXBpbGVkX2hlYWRlcnMgPSB7fQotICAgIGlmIHNlbGYuaGVhZGVyOgotICAgICAgaWYgc2VsZi5jb21waWxlX2hlYWRlcnM6Ci0gICAgICAgIGZvciBsYW5nIGluIFsnYycsICdjYycsICdtJywgJ21tJ106Ci0gICAgICAgICAgc2VsZi5jb21waWxlZF9oZWFkZXJzW2xhbmddID0gZ3lwX3BhdGhfdG9fYnVpbGRfb3V0cHV0KAotICAgICAgICAgICAgICBzZWxmLmhlYWRlciwgbGFuZykKLSAgICAgIHNlbGYuaGVhZGVyID0gZ3lwX3BhdGhfdG9fYnVpbGRfcGF0aChzZWxmLmhlYWRlcikKLQotICBkZWYgR2V0SW5jbHVkZShzZWxmLCBsYW5nKToKLSAgICAiIiJHZXRzIHRoZSBjZmxhZ3MgdG8gaW5jbHVkZSB0aGUgcHJlZml4IGhlYWRlciBmb3IgbGFuZ3VhZ2UgfGxhbmd8LiIiIgotICAgIGlmIHNlbGYuY29tcGlsZV9oZWFkZXJzIGFuZCBsYW5nIGluIHNlbGYuY29tcGlsZWRfaGVhZGVyczoKLSAgICAgIHJldHVybiAnLWluY2x1ZGUgJXMnICUgc2VsZi5jb21waWxlZF9oZWFkZXJzW2xhbmddCi0gICAgZWxpZiBzZWxmLmhlYWRlcjoKLSAgICAgIHJldHVybiAnLWluY2x1ZGUgJXMnICUgc2VsZi5oZWFkZXIKLSAgICBlbHNlOgotICAgICAgcmV0dXJuICcnCi0KLSAgZGVmIF9HY2goc2VsZiwgbGFuZyk6Ci0gICAgIiIiUmV0dXJucyB0aGUgYWN0dWFsIGZpbGUgbmFtZSBvZiB0aGUgcHJlZml4IGhlYWRlciBmb3IgbGFuZ3VhZ2UgfGxhbmd8LiIiIgotICAgIGFzc2VydCBzZWxmLmNvbXBpbGVfaGVhZGVycwotICAgIHJldHVybiBzZWxmLmNvbXBpbGVkX2hlYWRlcnNbbGFuZ10gKyAnLmdjaCcKLQotICBkZWYgR2V0T2JqRGVwZW5kZW5jaWVzKHNlbGYsIHNvdXJjZXMsIG9ianMpOgotICAgICIiIkdpdmVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdCBmaWxlcywgcmV0dXJucwotICAgIGEgbGlzdCBvZiAoc291cmNlLCBvYmplY3QsIGdjaCkgdHVwbGVzLCB3aGVyZSB8Z2NofCBpcyB0aGUgYnVpbGQtZGlyZWN0b3J5Ci0gICAgcmVsYXRpdmUgcGF0aCB0byB0aGUgZ2NoIGZpbGUgZWFjaCBvYmplY3QgZmlsZSBkZXBlbmRzIG9uLiAgfGNvbXBpbGFibGVbaV18Ci0gICAgaGFzIHRvIGJlIHRoZSBzb3VyY2UgZmlsZSBiZWxvbmdpbmcgdG8gfG9ianNbaV18LiIiIgotICAgIGlmIG5vdCBzZWxmLmhlYWRlciBvciBub3Qgc2VsZi5jb21waWxlX2hlYWRlcnM6Ci0gICAgICByZXR1cm4gW10KLQotICAgIHJlc3VsdCA9IFtdCi0gICAgZm9yIHNvdXJjZSwgb2JqIGluIHppcChzb3VyY2VzLCBvYmpzKToKLSAgICAgIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoc291cmNlKVsxXQotICAgICAgbGFuZyA9IHsKLSAgICAgICAgJy5jJzogJ2MnLAotICAgICAgICAnLmNwcCc6ICdjYycsICcuY2MnOiAnY2MnLCAnLmN4eCc6ICdjYycsCi0gICAgICAgICcubSc6ICdtJywKLSAgICAgICAgJy5tbSc6ICdtbScsCi0gICAgICB9LmdldChleHQsIE5vbmUpCi0gICAgICBpZiBsYW5nOgotICAgICAgICByZXN1bHQuYXBwZW5kKChzb3VyY2UsIG9iaiwgc2VsZi5fR2NoKGxhbmcpKSkKLSAgICByZXR1cm4gcmVzdWx0Ci0KLSAgZGVmIEdldFBjaEJ1aWxkQ29tbWFuZHMoc2VsZik6Ci0gICAgIiIiUmV0dXJucyBbKHBhdGhfdG9fZ2NoLCBsYW5ndWFnZV9mbGFnLCBsYW5ndWFnZSwgaGVhZGVyKV0uCi0gICAgfHBhdGhfdG9fZ2NofCBhbmQgfGhlYWRlcnwgYXJlIHJlbGF0aXZlIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICAgIiIiCi0gICAgaWYgbm90IHNlbGYuaGVhZGVyIG9yIG5vdCBzZWxmLmNvbXBpbGVfaGVhZGVyczoKLSAgICAgIHJldHVybiBbXQotICAgIHJldHVybiBbCi0gICAgICAoc2VsZi5fR2NoKCdjJyksICcteCBjLWhlYWRlcicsICdjJywgc2VsZi5oZWFkZXIpLAotICAgICAgKHNlbGYuX0djaCgnY2MnKSwgJy14IGMrKy1oZWFkZXInLCAnY2MnLCBzZWxmLmhlYWRlciksCi0gICAgICAoc2VsZi5fR2NoKCdtJyksICcteCBvYmplY3RpdmUtYy1oZWFkZXInLCAnbScsIHNlbGYuaGVhZGVyKSwKLSAgICAgIChzZWxmLl9HY2goJ21tJyksICcteCBvYmplY3RpdmUtYysrLWhlYWRlcicsICdtbScsIHNlbGYuaGVhZGVyKSwKLSAgICBdCi0KLQotZGVmIE1lcmdlR2xvYmFsWGNvZGVTZXR0aW5nc1RvU3BlYyhnbG9iYWxfZGljdCwgc3BlYyk6Ci0gICIiIk1lcmdlcyB0aGUgZ2xvYmFsIHhjb2RlX3NldHRpbmdzIGRpY3Rpb25hcnkgaW50byBlYWNoIGNvbmZpZ3VyYXRpb24gb2YgdGhlCi0gIHRhcmdldCByZXByZXNlbnRlZCBieSBzcGVjLiBGb3Iga2V5cyB0aGF0IGFyZSBib3RoIGluIHRoZSBnbG9iYWwgYW5kIHRoZSBsb2NhbAotICB4Y29kZV9zZXR0aW5ncyBkaWN0LCB0aGUgbG9jYWwga2V5IGdldHMgcHJlY2VuZGVuY2UuCi0gICIiIgotICAjIFRoZSB4Y29kZSBnZW5lcmF0b3Igc3BlY2lhbC1jYXNlcyBnbG9iYWwgeGNvZGVfc2V0dGluZ3MgYW5kIGRvZXMgc29tZXRoaW5nCi0gICMgdGhhdCBhbW91bnRzIHRvIG1lcmdpbmcgaW4gdGhlIGdsb2JhbCB4Y29kZV9zZXR0aW5ncyBpbnRvIGVhY2ggbG9jYWwKLSAgIyB4Y29kZV9zZXR0aW5ncyBkaWN0LgotICBnbG9iYWxfeGNvZGVfc2V0dGluZ3MgPSBnbG9iYWxfZGljdC5nZXQoJ3hjb2RlX3NldHRpbmdzJywge30pCi0gIGZvciBjb25maWcgaW4gc3BlY1snY29uZmlndXJhdGlvbnMnXS52YWx1ZXMoKToKLSAgICBpZiAneGNvZGVfc2V0dGluZ3MnIGluIGNvbmZpZzoKLSAgICAgIG5ld19zZXR0aW5ncyA9IGdsb2JhbF94Y29kZV9zZXR0aW5ncy5jb3B5KCkKLSAgICAgIG5ld19zZXR0aW5ncy51cGRhdGUoY29uZmlnWyd4Y29kZV9zZXR0aW5ncyddKQotICAgICAgY29uZmlnWyd4Y29kZV9zZXR0aW5ncyddID0gbmV3X3NldHRpbmdzCi0KLQotZGVmIElzTWFjQnVuZGxlKGZsYXZvciwgc3BlYyk6Ci0gICIiIlJldHVybnMgaWYgfHNwZWN8IHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgYnVuZGxlLgotCi0gIEJ1bmRsZXMgYXJlIGRpcmVjdG9yaWVzIHdpdGggYSBjZXJ0YWluIHN1YmRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGluc3RlYWQgb2YKLSAganVzdCBhIHNpbmdsZSBmaWxlLiBCdW5kbGUgcnVsZXMgZG8gbm90IHByb2R1Y2UgYSBiaW5hcnkgYnV0IGFsc28gcGFja2FnZQotICByZXNvdXJjZXMgaW50byB0aGF0IGRpcmVjdG9yeS4iIiIKLSAgaXNfbWFjX2J1bmRsZSA9IChpbnQoc3BlYy5nZXQoJ21hY19idW5kbGUnLCAwKSkgIT0gMCBhbmQgZmxhdm9yID09ICdtYWMnKQotICBpZiBpc19tYWNfYnVuZGxlOgotICAgIGFzc2VydCBzcGVjWyd0eXBlJ10gIT0gJ25vbmUnLCAoCi0gICAgICAgICdtYWNfYnVuZGxlIHRhcmdldHMgY2Fubm90IGhhdmUgdHlwZSBub25lICh0YXJnZXQgIiVzIiknICUKLSAgICAgICAgc3BlY1sndGFyZ2V0X25hbWUnXSkKLSAgcmV0dXJuIGlzX21hY19idW5kbGUKLQotCi1kZWYgR2V0TWFjQnVuZGxlUmVzb3VyY2VzKHByb2R1Y3RfZGlyLCB4Y29kZV9zZXR0aW5ncywgcmVzb3VyY2VzKToKLSAgIiIiWWllbGRzIChvdXRwdXQsIHJlc291cmNlKSBwYWlycyBmb3IgZXZlcnkgcmVzb3VyY2UgaW4gfHJlc291cmNlc3wuCi0gIE9ubHkgY2FsbCB0aGlzIGZvciBtYWMgYnVuZGxlIHRhcmdldHMuCi0KLSAgQXJnczoKLSAgICAgIHByb2R1Y3RfZGlyOiBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3V0cHV0IGJ1bmRsZSwKLSAgICAgICAgICByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LgotICAgICAgeGNvZGVfc2V0dGluZ3M6IFRoZSBYY29kZVNldHRpbmdzIG9mIHRoZSBjdXJyZW50IHRhcmdldC4KLSAgICAgIHJlc291cmNlczogQSBsaXN0IG9mIGJ1bmRsZSByZXNvdXJjZXMsIHJlbGF0aXZlIHRvIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICIiIgotICBkZXN0ID0gb3MucGF0aC5qb2luKHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgICAgICAgICAgIHhjb2RlX3NldHRpbmdzLkdldEJ1bmRsZVJlc291cmNlRm9sZGVyKCkpCi0gIGZvciByZXMgaW4gcmVzb3VyY2VzOgotICAgIG91dHB1dCA9IGRlc3QKLQotICAgICMgVGhlIG1ha2UgZ2VuZXJhdG9yIGRvZXNuJ3Qgc3VwcG9ydCBpdCwgc28gZm9yYmlkIGl0IGV2ZXJ5d2hlcmUKLSAgICAjIHRvIGtlZXAgdGhlIGdlbmVyYXRvcnMgbW9yZSBpbnRlcmNoYW5nYWJsZS4KLSAgICBhc3NlcnQgJyAnIG5vdCBpbiByZXMsICgKLSAgICAgICJTcGFjZXMgaW4gcmVzb3VyY2UgZmlsZW5hbWVzIG5vdCBzdXBwb3J0ZWQgKCVzKSIgICUgcmVzKQotCi0gICAgIyBTcGxpdCBpbnRvIChwYXRoLGZpbGUpLgotICAgIHJlc19wYXJ0cyA9IG9zLnBhdGguc3BsaXQocmVzKQotCi0gICAgIyBOb3cgc3BsaXQgdGhlIHBhdGggaW50byAocHJlZml4LG1heWJlLmxwcm9qKS4KLSAgICBscHJval9wYXJ0cyA9IG9zLnBhdGguc3BsaXQocmVzX3BhcnRzWzBdKQotICAgICMgSWYgdGhlIHJlc291cmNlIGxpdmVzIGluIGEgLmxwcm9qIGJ1bmRsZSwgYWRkIHRoYXQgdG8gdGhlIGRlc3RpbmF0aW9uLgotICAgIGlmIGxwcm9qX3BhcnRzWzFdLmVuZHN3aXRoKCcubHByb2onKToKLSAgICAgIG91dHB1dCA9IG9zLnBhdGguam9pbihvdXRwdXQsIGxwcm9qX3BhcnRzWzFdKQotCi0gICAgb3V0cHV0ID0gb3MucGF0aC5qb2luKG91dHB1dCwgcmVzX3BhcnRzWzFdKQotICAgICMgQ29tcGlsZWQgWElCIGZpbGVzIGFyZSByZWZlcnJlZCB0byBieSAubmliLgotICAgIGlmIG91dHB1dC5lbmRzd2l0aCgnLnhpYicpOgotICAgICAgb3V0cHV0ID0gb3V0cHV0WzA6LTNdICsgJ25pYicKLQotICAgIHlpZWxkIG91dHB1dCwgcmVzCi0KLQotZGVmIEdldE1hY0luZm9QbGlzdChwcm9kdWN0X2RpciwgeGNvZGVfc2V0dGluZ3MsIGd5cF9wYXRoX3RvX2J1aWxkX3BhdGgpOgotICAiIiJSZXR1cm5zIChpbmZvX3BsaXN0LCBkZXN0X3BsaXN0LCBkZWZpbmVzLCBleHRyYV9lbnYpLCB3aGVyZToKLSAgKiB8aW5mb19wbGlzdHwgaXMgdGhlIHNvdXJjIHBsaXN0IHBhdGgsIHJlbGF0aXZlIHRvIHRoZQotICAgIGJ1aWxkIGRpcmVjdG9yeSwKLSAgKiB8ZGVzdF9wbGlzdHwgaXMgdGhlIGRlc3RpbmF0aW9uIHBsaXN0IHBhdGgsIHJlbGF0aXZlIHRvIHRoZQotICAgIGJ1aWxkIGRpcmVjdG9yeSwKLSAgKiB8ZGVmaW5lc3wgaXMgYSBsaXN0IG9mIHByZXByb2Nlc3NvciBkZWZpbmVzIChlbXB0eSBpZiB0aGUgcGxpc3QKLSAgICBzaG91bGRuJ3QgYmUgcHJlcHJvY2Vzc2VkLAotICAqIHxleHRyYV9lbnZ8IGlzIGEgZGljdCBvZiBlbnYgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGJlIGV4cG9ydGVkIHdoZW4KLSAgICBpbnZva2luZyB8bWFjX3Rvb2wgY29weS1pbmZvLXBsaXN0fC4KLQotICBPbmx5IGNhbGwgdGhpcyBmb3IgbWFjIGJ1bmRsZSB0YXJnZXRzLgotCi0gIEFyZ3M6Ci0gICAgICBwcm9kdWN0X2RpcjogUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG91dHB1dCBidW5kbGUsCi0gICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgICAgIHhjb2RlX3NldHRpbmdzOiBUaGUgWGNvZGVTZXR0aW5ncyBvZiB0aGUgY3VycmVudCB0YXJnZXQuCi0gICAgICBneXBfdG9fYnVpbGRfcGF0aDogQSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICAgIGN1cnJlbnQgZ3lwIGZpbGUgdG8gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGJ1aWxkIGRpcmVjb3RyeS4KLSAgIiIiCi0gIGluZm9fcGxpc3QgPSB4Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5nKCdJTkZPUExJU1RfRklMRScpCi0gIGlmIG5vdCBpbmZvX3BsaXN0OgotICAgIHJldHVybiBOb25lLCBOb25lLCBbXSwge30KLQotICAjIFRoZSBtYWtlIGdlbmVyYXRvciBkb2Vzbid0IHN1cHBvcnQgaXQsIHNvIGZvcmJpZCBpdCBldmVyeXdoZXJlCi0gICMgdG8ga2VlcCB0aGUgZ2VuZXJhdG9ycyBtb3JlIGludGVyY2hhbmdhYmxlLgotICBhc3NlcnQgJyAnIG5vdCBpbiBpbmZvX3BsaXN0LCAoCi0gICAgIlNwYWNlcyBpbiBJbmZvLnBsaXN0IGZpbGVuYW1lcyBub3Qgc3VwcG9ydGVkICglcykiICAlIGluZm9fcGxpc3QpCi0KLSAgaW5mb19wbGlzdCA9IGd5cF9wYXRoX3RvX2J1aWxkX3BhdGgoaW5mb19wbGlzdCkKLQotICAjIElmIGV4cGxpY2l0bHkgc2V0IHRvIHByZXByb2Nlc3MgdGhlIHBsaXN0LCBpbnZva2UgdGhlIEMgcHJlcHJvY2Vzc29yIGFuZAotICAjIHNwZWNpZnkgYW55IGRlZmluZXMgYXMgLUQgZmxhZ3MuCi0gIGlmIHhjb2RlX3NldHRpbmdzLkdldFBlclRhcmdldFNldHRpbmcoCi0gICAgICAnSU5GT1BMSVNUX1BSRVBST0NFU1MnLCBkZWZhdWx0PSdOTycpID09ICdZRVMnOgotICAgICMgQ3JlYXRlIGFuIGludGVybWVkaWF0ZSBmaWxlIGJhc2VkIG9uIHRoZSBwYXRoLgotICAgIGRlZmluZXMgPSBzaGxleC5zcGxpdCh4Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5nKAotICAgICAgICAnSU5GT1BMSVNUX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUycsIGRlZmF1bHQ9JycpKQotICBlbHNlOgotICAgIGRlZmluZXMgPSBbXQotCi0gIGRlc3RfcGxpc3QgPSBvcy5wYXRoLmpvaW4ocHJvZHVjdF9kaXIsIHhjb2RlX3NldHRpbmdzLkdldEJ1bmRsZVBsaXN0UGF0aCgpKQotICBleHRyYV9lbnYgPSB4Y29kZV9zZXR0aW5ncy5HZXRQZXJUYXJnZXRTZXR0aW5ncygpCi0KLSAgcmV0dXJuIGluZm9fcGxpc3QsIGRlc3RfcGxpc3QsIGRlZmluZXMsIGV4dHJhX2VudgotCi0KLWRlZiBfR2V0WGNvZGVFbnYoeGNvZGVfc2V0dGluZ3MsIGJ1aWx0X3Byb2R1Y3RzX2Rpciwgc3Jjcm9vdCwgY29uZmlndXJhdGlvbiwKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX3NldHRpbmdzPU5vbmUpOgotICAiIiJSZXR1cm4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IFhjb2RlIHdvdWxkIHNldC4gU2VlCi0gIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjLyNkb2N1bWVudGF0aW9uL0RldmVsb3BlclRvb2xzL1JlZmVyZW5jZS9YY29kZUJ1aWxkU2V0dGluZ1JlZi8xLUJ1aWxkX1NldHRpbmdfUmVmZXJlbmNlL2J1aWxkX3NldHRpbmdfcmVmLmh0bWwjLy9hcHBsZV9yZWYvZG9jL3VpZC9UUDQwMDAzOTMxLUNIMy1TVzE1MwotICBmb3IgYSBmdWxsIGxpc3QuCi0KLSAgQXJnczoKLSAgICAgIHhjb2RlX3NldHRpbmdzOiBBbiBYY29kZVNldHRpbmdzIG9iamVjdC4gSWYgdGhpcyBpcyBOb25lLCB0aGlzIGZ1bmN0aW9uCi0gICAgICAgICAgcmV0dXJucyBhbiBlbXB0eSBkaWN0LgotICAgICAgYnVpbHRfcHJvZHVjdHNfZGlyOiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBidWlsdCBwcm9kdWN0cyBkaXIuCi0gICAgICBzcmNyb290OiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBzb3VyY2Ugcm9vdC4KLSAgICAgIGNvbmZpZ3VyYXRpb246IFRoZSBidWlsZCBjb25maWd1cmF0aW9uIG5hbWUuCi0gICAgICBhZGRpdGlvbmFsX3NldHRpbmdzOiBBbiBvcHRpb25hbCBkaWN0IHdpdGggbW9yZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZQotICAgICAgICAgIHJlc3VsdC4KLSAgIiIiCi0gIGlmIG5vdCB4Y29kZV9zZXR0aW5nczogcmV0dXJuIHt9Ci0KLSAgIyBUaGlzIGZ1bmN0aW9uIGlzIGNvbnNpZGVyZWQgYSBmcmllbmQgb2YgWGNvZGVTZXR0aW5ncywgc28gbGV0IGl0IHJlYWNoIGludG8KLSAgIyBpdHMgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLSAgc3BlYyA9IHhjb2RlX3NldHRpbmdzLnNwZWMKLQotICAjIFRoZXNlIGFyZSBmaWxsZWQgaW4gb24gYSBhcy1uZWVkZWQgYmFzaXMuCi0gIGVudiA9IHsKLSAgICAnQlVJTFRfUFJPRFVDVFNfRElSJyA6IGJ1aWx0X3Byb2R1Y3RzX2RpciwKLSAgICAnQ09ORklHVVJBVElPTicgOiBjb25maWd1cmF0aW9uLAotICAgICdQUk9EVUNUX05BTUUnIDogeGNvZGVfc2V0dGluZ3MuR2V0UHJvZHVjdE5hbWUoKSwKLSAgICAjIFNlZSAvRGV2ZWxvcGVyL1BsYXRmb3Jtcy9NYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL0xpYnJhcnkvWGNvZGUvU3BlY2lmaWNhdGlvbnMvTWFjT1NYXCBQcm9kdWN0XCBUeXBlcy54Y3NwZWMgZm9yIEZVTExfUFJPRFVDVF9OQU1FCi0gICAgJ1NSQ1JPT1QnIDogc3Jjcm9vdCwKLSAgICAnU09VUkNFX1JPT1QnOiAnJHtTUkNST09UfScsCi0gICAgIyBUaGlzIGlzIG5vdCB0cnVlIGZvciBzdGF0aWMgbGlicmFyaWVzLCBidXQgY3VycmVudGx5IHRoZSBlbnYgaXMgb25seQotICAgICMgd3JpdHRlbiBmb3IgYnVuZGxlczoKLSAgICAnVEFSR0VUX0JVSUxEX0RJUicgOiBidWlsdF9wcm9kdWN0c19kaXIsCi0gICAgJ1RFTVBfRElSJyA6ICcke1RNUERJUn0nLAotICB9Ci0gIGlmIHhjb2RlX3NldHRpbmdzLkdldFBlclRhcmdldFNldHRpbmcoJ1NES1JPT1QnKToKLSAgICBlbnZbJ1NES1JPT1QnXSA9IHhjb2RlX3NldHRpbmdzLl9TZGtQYXRoKCkKLSAgZWxzZToKLSAgICBlbnZbJ1NES1JPT1QnXSA9ICcnCi0KLSAgaWYgc3BlY1sndHlwZSddIGluICgKLSAgICAgICdleGVjdXRhYmxlJywgJ3N0YXRpY19saWJyYXJ5JywgJ3NoYXJlZF9saWJyYXJ5JywgJ2xvYWRhYmxlX21vZHVsZScpOgotICAgIGVudlsnRVhFQ1VUQUJMRV9OQU1FJ10gPSB4Y29kZV9zZXR0aW5ncy5HZXRFeGVjdXRhYmxlTmFtZSgpCi0gICAgZW52WydFWEVDVVRBQkxFX1BBVEgnXSA9IHhjb2RlX3NldHRpbmdzLkdldEV4ZWN1dGFibGVQYXRoKCkKLSAgICBlbnZbJ0ZVTExfUFJPRFVDVF9OQU1FJ10gPSB4Y29kZV9zZXR0aW5ncy5HZXRGdWxsUHJvZHVjdE5hbWUoKQotICAgIG1hY2hfb190eXBlID0geGNvZGVfc2V0dGluZ3MuR2V0TWFjaE9UeXBlKCkKLSAgICBpZiBtYWNoX29fdHlwZToKLSAgICAgIGVudlsnTUFDSF9PX1RZUEUnXSA9IG1hY2hfb190eXBlCi0gICAgZW52WydQUk9EVUNUX1RZUEUnXSA9IHhjb2RlX3NldHRpbmdzLkdldFByb2R1Y3RUeXBlKCkKLSAgaWYgeGNvZGVfc2V0dGluZ3MuX0lzQnVuZGxlKCk6Ci0gICAgZW52WydDT05URU5UU19GT0xERVJfUEFUSCddID0gXAotICAgICAgeGNvZGVfc2V0dGluZ3MuR2V0QnVuZGxlQ29udGVudHNGb2xkZXJQYXRoKCkKLSAgICBlbnZbJ1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSCddID0gXAotICAgICAgICB4Y29kZV9zZXR0aW5ncy5HZXRCdW5kbGVSZXNvdXJjZUZvbGRlcigpCi0gICAgZW52WydJTkZPUExJU1RfUEFUSCddID0geGNvZGVfc2V0dGluZ3MuR2V0QnVuZGxlUGxpc3RQYXRoKCkKLSAgICBlbnZbJ1dSQVBQRVJfTkFNRSddID0geGNvZGVfc2V0dGluZ3MuR2V0V3JhcHBlck5hbWUoKQotCi0gIGluc3RhbGxfbmFtZSA9IHhjb2RlX3NldHRpbmdzLkdldEluc3RhbGxOYW1lKCkKLSAgaWYgaW5zdGFsbF9uYW1lOgotICAgIGVudlsnTERfRFlMSUJfSU5TVEFMTF9OQU1FJ10gPSBpbnN0YWxsX25hbWUKLSAgaW5zdGFsbF9uYW1lX2Jhc2UgPSB4Y29kZV9zZXR0aW5ncy5HZXRJbnN0YWxsTmFtZUJhc2UoKQotICBpZiBpbnN0YWxsX25hbWVfYmFzZToKLSAgICBlbnZbJ0RZTElCX0lOU1RBTExfTkFNRV9CQVNFJ10gPSBpbnN0YWxsX25hbWVfYmFzZQotCi0gIGlmIG5vdCBhZGRpdGlvbmFsX3NldHRpbmdzOgotICAgIGFkZGl0aW9uYWxfc2V0dGluZ3MgPSB7fQotICBlbHNlOgotICAgICMgRmxhdHRlbiBsaXN0cyB0byBzdHJpbmdzLgotICAgIGZvciBrIGluIGFkZGl0aW9uYWxfc2V0dGluZ3M6Ci0gICAgICBpZiBub3QgaXNpbnN0YW5jZShhZGRpdGlvbmFsX3NldHRpbmdzW2tdLCBzdHIpOgotICAgICAgICBhZGRpdGlvbmFsX3NldHRpbmdzW2tdID0gJyAnLmpvaW4oYWRkaXRpb25hbF9zZXR0aW5nc1trXSkKLSAgYWRkaXRpb25hbF9zZXR0aW5ncy51cGRhdGUoZW52KQotCi0gIGZvciBrIGluIGFkZGl0aW9uYWxfc2V0dGluZ3M6Ci0gICAgYWRkaXRpb25hbF9zZXR0aW5nc1trXSA9IF9Ob3JtYWxpemVFbnZWYXJSZWZlcmVuY2VzKGFkZGl0aW9uYWxfc2V0dGluZ3Nba10pCi0KLSAgcmV0dXJuIGFkZGl0aW9uYWxfc2V0dGluZ3MKLQotCi1kZWYgX05vcm1hbGl6ZUVudlZhclJlZmVyZW5jZXMoc3RyKToKLSAgIiIiVGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyB2YXJpYWJsZSByZWZlcmVuY2VzIGluIHRoZSBmb3JtICR7Rk9PfSwgJChGT08pLAotICBvciAkRk9PLCBhbmQgcmV0dXJucyBhIHN0cmluZyB3aXRoIGFsbCB2YXJpYWJsZSByZWZlcmVuY2VzIGluIHRoZSBmb3JtICR7Rk9PfS4KLSAgIiIiCi0gICMgJEZPTyAtPiAke0ZPT30KLSAgc3RyID0gcmUuc3ViKHInXCQoW2EtekEtWl9dW2EtekEtWjAtOV9dKiknLCByJyR7XDF9Jywgc3RyKQotCi0gICMgJChGT08pIC0+ICR7Rk9PfQotICBtYXRjaGVzID0gcmUuZmluZGFsbChyJyhcJFwoKFthLXpBLVowLTlcLV9dKylcKSknLCBzdHIpCi0gIGZvciBtYXRjaCBpbiBtYXRjaGVzOgotICAgIHRvX3JlcGxhY2UsIHZhcmlhYmxlID0gbWF0Y2gKLSAgICBhc3NlcnQgJyQoJyBub3QgaW4gbWF0Y2gsICckKCQoRk9PKSkgdmFyaWFibGVzIG5vdCBzdXBwb3J0ZWQ6ICcgKyBtYXRjaAotICAgIHN0ciA9IHN0ci5yZXBsYWNlKHRvX3JlcGxhY2UsICckeycgKyB2YXJpYWJsZSArICd9JykKLQotICByZXR1cm4gc3RyCi0KLQotZGVmIEV4cGFuZEVudlZhcnMoc3RyaW5nLCBleHBhbnNpb25zKToKLSAgIiIiRXhwYW5kcyAke1ZBUklBQkxFU30sICQoVkFSSUFCTEVTKSwgYW5kICRWQVJJQUJMRVMgaW4gc3RyaW5nIHBlciB0aGUKLSAgZXhwYW5zaW9ucyBsaXN0LiBJZiB0aGUgdmFyaWFibGUgZXhwYW5kcyB0byBzb21ldGhpbmcgdGhhdCByZWZlcmVuY2VzCi0gIGFub3RoZXIgdmFyaWFibGUsIHRoaXMgdmFyaWFibGUgaXMgZXhwYW5kZWQgYXMgd2VsbCBpZiBpdCdzIGluIGVudiAtLQotICB1bnRpbCBubyB2YXJpYWJsZXMgcHJlc2VudCBpbiBlbnYgYXJlIGxlZnQuIiIiCi0gIGZvciBrLCB2IGluIHJldmVyc2VkKGV4cGFuc2lvbnMpOgotICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCckeycgKyBrICsgJ30nLCB2KQotICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCckKCcgKyBrICsgJyknLCB2KQotICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCckJyArIGssIHYpCi0gIHJldHVybiBzdHJpbmcKLQotCi1kZWYgX1RvcG9sb2dpY2FsbHlTb3J0ZWRFbnZWYXJLZXlzKGVudik6Ci0gICIiIlRha2VzIGEgZGljdCB8ZW52fCB3aG9zZSB2YWx1ZXMgYXJlIHN0cmluZ3MgdGhhdCBjYW4gcmVmZXIgdG8gb3RoZXIga2V5cywKLSAgZm9yIGV4YW1wbGUgZW52Wydmb28nXSA9ICckKGJhcikgYW5kICQoYmF6KScuIFJldHVybnMgYSBsaXN0IEwgb2YgYWxsIGtleXMgb2YKLSAgZW52IHN1Y2ggdGhhdCBrZXkyIGlzIGFmdGVyIGtleTEgaW4gTCBpZiBlbnZba2V5Ml0gcmVmZXJzIHRvIGVudltrZXkxXS4KLQotICBUaHJvd3MgYW4gRXhjZXB0aW9uIGluIGNhc2Ugb2YgZGVwZW5kZW5jeSBjeWNsZXMuCi0gICIiIgotICAjIFNpbmNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgdmFyaWFibGVzLCB0aGUgZXZhbHVhdGlvbgotICAjIG9yZGVyIGlzIGltcG9ydGFudC4gQmVsb3cgaXMgdGhlIGxvZ2ljIHRvIGNvbXB1dGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgKLSAgIyBhbmQgc29ydCBpdC4KLSAgcmVnZXggPSByZS5jb21waWxlKHInXCRceyhbYS16QS1aMC05XC1fXSspXH0nKQotICBkZWYgR2V0RWRnZXMobm9kZSk6Ci0gICAgIyBVc2UgYSBkZWZpbml0aW9uIG9mIGVkZ2VzIHN1Y2ggdGhhdCB1c2VyX29mX3ZhcmlhYmxlIC0+IHVzZWRfdmFyaWJsZS4KLSAgICAjIFRoaXMgaGFwcGVucyB0byBiZSBlYXNpZXIgaW4gdGhpcyBjYXNlLCBzaW5jZSBhIHZhcmlhYmxlJ3MKLSAgICAjIGRlZmluaXRpb24gY29udGFpbnMgYWxsIHZhcmlhYmxlcyBpdCByZWZlcmVuY2VzIGluIGEgc2luZ2xlIHN0cmluZy4KLSAgICAjIFdlIGNhbiB0aGVuIHJldmVyc2UgdGhlIHJlc3VsdCBvZiB0aGUgdG9wb2xvZ2ljYWwgc29ydCBhdCB0aGUgZW5kLgotICAgICMgU2luY2U6IHJldmVyc2UodG9wc29ydChEQUcpKSA9IHRvcHNvcnQocmV2ZXJzZV9lZGdlcyhEQUcpKQotICAgIG1hdGNoZXMgPSBzZXQoW3YgZm9yIHYgaW4gcmVnZXguZmluZGFsbChlbnZbbm9kZV0pIGlmIHYgaW4gZW52XSkKLSAgICBmb3IgZGVwZW5kZWUgaW4gbWF0Y2hlczoKLSAgICAgIGFzc2VydCAnJHsnIG5vdCBpbiBkZXBlbmRlZSwgJ05lc3RlZCB2YXJpYWJsZXMgbm90IHN1cHBvcnRlZDogJyArIGRlcGVuZGVlCi0gICAgcmV0dXJuIG1hdGNoZXMKLQotICB0cnk6Ci0gICAgIyBUb3BvbG9naWNhbGx5IHNvcnQsIGFuZCB0aGVuIHJldmVyc2UsIGJlY2F1c2Ugd2UgdXNlZCBhbiBlZGdlIGRlZmluaXRpb24KLSAgICAjIHRoYXQncyBpbnZlcnRlZCBmcm9tIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiAoc2VlIGNvbW1lbnQKLSAgICAjIGFib3ZlKS4KLSAgICBvcmRlciA9IGd5cC5jb21tb24uVG9wb2xvZ2ljYWxseVNvcnRlZChlbnYua2V5cygpLCBHZXRFZGdlcykKLSAgICBvcmRlci5yZXZlcnNlKCkKLSAgICByZXR1cm4gb3JkZXIKLSAgZXhjZXB0IGd5cC5jb21tb24uQ3ljbGVFcnJvciwgZToKLSAgICByYWlzZSBFeGNlcHRpb24oCi0gICAgICAgICdYY29kZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGN5Y2xpY2FsbHkgZGVwZW5kZW50OiAnICsgc3RyKGUubm9kZXMpKQotCi0KLWRlZiBHZXRTb3J0ZWRYY29kZUVudih4Y29kZV9zZXR0aW5ncywgYnVpbHRfcHJvZHVjdHNfZGlyLCBzcmNyb290LAotICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGFkZGl0aW9uYWxfc2V0dGluZ3M9Tm9uZSk6Ci0gIGVudiA9IF9HZXRYY29kZUVudih4Y29kZV9zZXR0aW5ncywgYnVpbHRfcHJvZHVjdHNfZGlyLCBzcmNyb290LCBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX3NldHRpbmdzKQotICByZXR1cm4gWyhrZXksIGVudltrZXldKSBmb3Iga2V5IGluIF9Ub3BvbG9naWNhbGx5U29ydGVkRW52VmFyS2V5cyhlbnYpXQotCi0KLWRlZiBHZXRTcGVjUG9zdGJ1aWxkQ29tbWFuZHMoc3BlYywgcXVpZXQ9RmFsc2UpOgotICAiIiJSZXR1cm5zIHRoZSBsaXN0IG9mIHBvc3RidWlsZHMgZXhwbGljaXRseSBkZWZpbmVkIG9uIHxzcGVjfCwgaW4gYSBmb3JtCi0gIGV4ZWN1dGFibGUgYnkgYSBzaGVsbC4iIiIKLSAgcG9zdGJ1aWxkcyA9IFtdCi0gIGZvciBwb3N0YnVpbGQgaW4gc3BlYy5nZXQoJ3Bvc3RidWlsZHMnLCBbXSk6Ci0gICAgaWYgbm90IHF1aWV0OgotICAgICAgcG9zdGJ1aWxkcy5hcHBlbmQoJ2VjaG8gUE9TVEJVSUxEXFwoJXNcXCkgJXMnICUgKAotICAgICAgICAgICAgc3BlY1sndGFyZ2V0X25hbWUnXSwgcG9zdGJ1aWxkWydwb3N0YnVpbGRfbmFtZSddKSkKLSAgICBwb3N0YnVpbGRzLmFwcGVuZChneXAuY29tbW9uLkVuY29kZVBPU0lYU2hlbGxMaXN0KHBvc3RidWlsZFsnYWN0aW9uJ10pKQotICByZXR1cm4gcG9zdGJ1aWxkcwpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3B5bGliL2d5cC94Y29kZXByb2pfZmlsZS5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAveGNvZGVwcm9qX2ZpbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNGNiOTYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3B5bGliL2d5cC94Y29kZXByb2pfZmlsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4NjkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJYY29kZSBwcm9qZWN0IGZpbGUgZ2VuZXJhdG9yLgotCi1UaGlzIG1vZHVsZSBpcyBib3RoIGFuIFhjb2RlIHByb2plY3QgZmlsZSBnZW5lcmF0b3IgYW5kIGEgZG9jdW1lbnRhdGlvbiBvZiB0aGUKLVhjb2RlIHByb2plY3QgZmlsZSBmb3JtYXQuICBLbm93bGVkZ2Ugb2YgdGhlIHByb2plY3QgZmlsZSBmb3JtYXQgd2FzIGdhaW5lZAotYmFzZWQgb24gZXh0ZW5zaXZlIGV4cGVyaWVuY2Ugd2l0aCBYY29kZSwgYW5kIGJ5IG1ha2luZyBjaGFuZ2VzIHRvIHByb2plY3RzIGluCi1YY29kZS5hcHAgYW5kIG9ic2VydmluZyB0aGUgcmVzdWx0YW50IGNoYW5nZXMgaW4gdGhlIGFzc29jaWF0ZWQgcHJvamVjdCBmaWxlcy4KLQotWENPREUgUFJPSkVDVCBGSUxFUwotCi1UaGUgZ2VuZXJhdG9yIHRhcmdldHMgdGhlIGZpbGUgZm9ybWF0IGFzIHdyaXR0ZW4gYnkgWGNvZGUgMy4yIChzcGVjaWZpY2FsbHksCi0zLjIuNiksIGJ1dCBwYXN0IGV4cGVyaWVuY2UgaGFzIHRhdWdodCB0aGF0IHRoZSBmb3JtYXQgaGFzIG5vdCBjaGFuZ2VkCi1zaWduaWZpY2FudGx5IGluIHRoZSBwYXN0IHNldmVyYWwgeWVhcnMsIGFuZCBmdXR1cmUgdmVyc2lvbnMgb2YgWGNvZGUgYXJlIGFibGUKLXRvIHJlYWQgb2xkZXIgcHJvamVjdCBmaWxlcy4KLQotWGNvZGUgcHJvamVjdCBmaWxlcyBhcmUgImJ1bmRsZWQiOiB0aGUgcHJvamVjdCAiZmlsZSIgZnJvbSBhbiBlbmQtdXNlcidzCi1wZXJzcGVjdGl2ZSBpcyBhY3R1YWxseSBhIGRpcmVjdG9yeSB3aXRoIGFuICIueGNvZGVwcm9qIiBleHRlbnNpb24uICBUaGUKLXByb2plY3QgZmlsZSBmcm9tIHRoaXMgbW9kdWxlJ3MgcGVyc3BlY3RpdmUgaXMgYWN0dWFsbHkgYSBmaWxlIGluc2lkZSB0aGlzCi1kaXJlY3RvcnksIGFsd2F5cyBuYW1lZCAicHJvamVjdC5wYnhwcm9qIi4gIFRoaXMgZmlsZSBjb250YWlucyBhIGNvbXBsZXRlCi1kZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdCBhbmQgaXMgYWxsIHRoYXQgaXMgbmVlZGVkIHRvIHVzZSB0aGUgeGNvZGVwcm9qLgotT3RoZXIgZmlsZXMgY29udGFpbmVkIGluIHRoZSB4Y29kZXByb2ogZGlyZWN0b3J5IGFyZSBzaW1wbHkgdXNlZCB0byBzdG9yZQotcGVyLXVzZXIgc2V0dGluZ3MsIHN1Y2ggYXMgdGhlIHN0YXRlIG9mIHZhcmlvdXMgVUkgZWxlbWVudHMgaW4gdGhlIFhjb2RlCi1hcHBsaWNhdGlvbi4KLQotVGhlIHByb2plY3QucGJ4cHJvaiBmaWxlIGlzIGEgcHJvcGVydHkgbGlzdCwgc3RvcmVkIGluIGEgZm9ybWF0IGFsbW9zdAotaWRlbnRpY2FsIHRvIHRoZSBOZVhUc3RlcCBwcm9wZXJ0eSBsaXN0IGZvcm1hdC4gIFRoZSBmaWxlIGlzIGFibGUgdG8gY2FycnkKLVVuaWNvZGUgZGF0YSwgYW5kIGlzIGVuY29kZWQgaW4gVVRGLTguICBUaGUgcm9vdCBlbGVtZW50IGluIHRoZSBwcm9wZXJ0eSBsaXN0Ci1pcyBhIGRpY3Rpb25hcnkgdGhhdCBjb250YWlucyBzZXZlcmFsIHByb3BlcnRpZXMgb2YgbWluaW1hbCBpbnRlcmVzdCwgYW5kIHR3bwotcHJvcGVydGllcyBvZiBpbW1lbnNlIGludGVyZXN0LiAgVGhlIG1vc3QgaW1wb3J0YW50IHByb3BlcnR5IGlzIGEgZGljdGlvbmFyeQotbmFtZWQgIm9iamVjdHMiLiAgVGhlIGVudGlyZSBzdHJ1Y3R1cmUgb2YgdGhlIHByb2plY3QgaXMgcmVwcmVzZW50ZWQgYnkgdGhlCi1jaGlsZHJlbiBvZiB0aGlzIHByb3BlcnR5LiAgVGhlIG9iamVjdHMgZGljdGlvbmFyeSBpcyBrZXllZCBieSB1bmlxdWUgOTYtYml0Ci12YWx1ZXMgcmVwcmVzZW50ZWQgYnkgMjQgdXBwZXJjYXNlIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMuICBFYWNoIHZhbHVlIGluIHRoZQotb2JqZWN0cyBkaWN0aW9uYXJ5IGlzIGl0c2VsZiBhIGRpY3Rpb25hcnksIGRlc2NyaWJpbmcgYW4gaW5kaXZpZHVhbCBvYmplY3QuCi0KLUVhY2ggb2JqZWN0IGluIHRoZSBkaWN0aW9uYXJ5IGlzIGEgbWVtYmVyIG9mIGEgY2xhc3MsIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkKLXRoZSAiaXNhIiBwcm9wZXJ0eSBvZiBlYWNoIG9iamVjdC4gIEEgdmFyaWV0eSBvZiBjbGFzc2VzIGFyZSByZXByZXNlbnRlZCBpbiBhCi1wcm9qZWN0IGZpbGUuICBPYmplY3RzIGNhbiByZWZlciB0byBvdGhlciBvYmplY3RzIGJ5IElELCB1c2luZyB0aGUgMjQtY2hhcmFjdGVyCi1oZXhhZGVjaW1hbCBvYmplY3Qga2V5LiAgQSBwcm9qZWN0J3Mgb2JqZWN0cyBmb3JtIGEgdHJlZSwgd2l0aCBhIHJvb3Qgb2JqZWN0Ci1vZiBjbGFzcyBQQlhQcm9qZWN0IGF0IHRoZSByb290LiAgQXMgYW4gZXhhbXBsZSwgdGhlIFBCWFByb2plY3Qgb2JqZWN0IHNlcnZlcwotYXMgcGFyZW50IHRvIGFuIFhDQ29uZmlndXJhdGlvbkxpc3Qgb2JqZWN0IGRlZmluaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucwotdXNlZCBpbiB0aGUgcHJvamVjdCwgYSBQQlhHcm91cCBvYmplY3Qgc2VydmluZyBhcyBhIGNvbnRhaW5lciBmb3IgYWxsIGZpbGVzCi1yZWZlcmVuY2VkIGluIHRoZSBwcm9qZWN0LCBhbmQgYSBsaXN0IG9mIHRhcmdldCBvYmplY3RzLCBlYWNoIG9mIHdoaWNoIGRlZmluZXMKLWEgdGFyZ2V0IGluIHRoZSBwcm9qZWN0LiAgVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHR5cGVzIG9mIHRhcmdldCBvYmplY3QsCi1zdWNoIGFzIFBCWE5hdGl2ZVRhcmdldCBhbmQgUEJYQWdncmVnYXRlVGFyZ2V0LiAgSW4gdGhpcyBtb2R1bGUsIHRoaXMKLXJlbGF0aW9uc2hpcCBpcyBleHByZXNzZWQgYnkgaGF2aW5nIGVhY2ggdGFyZ2V0IHR5cGUgZGVyaXZlIGZyb20gYW4gYWJzdHJhY3QKLWJhc2UgbmFtZWQgWENUYXJnZXQuCi0KLVRoZSBwcm9qZWN0LnBieHByb2ogZmlsZSdzIHJvb3QgZGljdGlvbmFyeSBhbHNvIGNvbnRhaW5zIGEgcHJvcGVydHksIHNpYmxpbmcgdG8KLXRoZSAib2JqZWN0cyIgZGljdGlvbmFyeSwgbmFtZWQgInJvb3RPYmplY3QiLiAgVGhlIHZhbHVlIG9mIHJvb3RPYmplY3QgaXMgYQotMjQtY2hhcmFjdGVyIG9iamVjdCBrZXkgcmVmZXJyaW5nIHRvIHRoZSByb290IFBCWFByb2plY3Qgb2JqZWN0IGluIHRoZQotb2JqZWN0cyBkaWN0aW9uYXJ5LgotCi1JbiBYY29kZSwgZXZlcnkgZmlsZSB1c2VkIGFzIGlucHV0IHRvIGEgdGFyZ2V0IG9yIHByb2R1Y2VkIGFzIGEgZmluYWwgcHJvZHVjdAotb2YgYSB0YXJnZXQgbXVzdCBhcHBlYXIgc29tZXdoZXJlIGluIHRoZSBoaWVyYXJjaHkgcm9vdGVkIGF0IHRoZSBQQlhHcm91cAotb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIFBCWFByb2plY3QncyBtYWluR3JvdXAgcHJvcGVydHkuICBBIFBCWEdyb3VwIGlzCi1nZW5lcmFsbHkgcmVwcmVzZW50ZWQgYXMgYSBmb2xkZXIgaW4gdGhlIFhjb2RlIGFwcGxpY2F0aW9uLiAgUEJYR3JvdXBzIGNhbgotY29udGFpbiBvdGhlciBQQlhHcm91cHMgYXMgd2VsbCBhcyBQQlhGaWxlUmVmZXJlbmNlcywgd2hpY2ggYXJlIHBvaW50ZXJzIHRvCi1hY3R1YWwgZmlsZXMuCi0KLUVhY2ggWENUYXJnZXQgY29udGFpbnMgYSBsaXN0IG9mIGJ1aWxkIHBoYXNlcywgcmVwcmVzZW50ZWQgaW4gdGhpcyBtb2R1bGUgYnkKLXRoZSBhYnN0cmFjdCBiYXNlIFhDQnVpbGRQaGFzZS4gIEV4YW1wbGVzIG9mIGNvbmNyZXRlIFhDQnVpbGRQaGFzZSBkZXJpdmF0aW9ucwotYXJlIFBCWFNvdXJjZXNCdWlsZFBoYXNlIGFuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSwgd2hpY2ggY29ycmVzcG9uZCB0byB0aGUKLSJDb21waWxlIFNvdXJjZXMiIGFuZCAiTGluayBCaW5hcnkgV2l0aCBMaWJyYXJpZXMiIHBoYXNlcyBkaXNwbGF5ZWQgaW4gdGhlCi1YY29kZSBhcHBsaWNhdGlvbi4gIEZpbGVzIHVzZWQgYXMgaW5wdXQgdG8gdGhlc2UgcGhhc2VzIChmb3IgZXhhbXBsZSwgc291cmNlCi1maWxlcyBpbiB0aGUgZm9ybWVyIGNhc2UgYW5kIGxpYnJhcmllcyBhbmQgZnJhbWV3b3JrcyBpbiB0aGUgbGF0dGVyKSBhcmUKLXJlcHJlc2VudGVkIGJ5IFBCWEJ1aWxkRmlsZSBvYmplY3RzLCByZWZlcmVuY2VkIGJ5IGVsZW1lbnRzIG9mICJmaWxlcyIgbGlzdHMKLWluIFhDVGFyZ2V0IG9iamVjdHMuICBFYWNoIFBCWEJ1aWxkRmlsZSBvYmplY3QgcmVmZXJzIHRvIGEgUEJYQnVpbGRGaWxlCi1vYmplY3QgYXMgYSAid2VhayIgcmVmZXJlbmNlOiBpdCBkb2VzIG5vdCAib3duIiB0aGUgUEJYQnVpbGRGaWxlLCB3aGljaCBpcwotb3duZWQgYnkgdGhlIHJvb3Qgb2JqZWN0J3MgbWFpbkdyb3VwIG9yIGEgZGVzY2VuZGFudCBncm91cC4gIEluIG1vc3QgY2FzZXMsIHRoZQotbGF5ZXIgb2YgaW5kaXJlY3Rpb24gYmV0d2VlbiBhbiBYQ0J1aWxkUGhhc2UgYW5kIGEgUEJYRmlsZVJlZmVyZW5jZSB2aWEgYQotUEJYQnVpbGRGaWxlIGFwcGVhcnMgZXh0cmFuZW91cywgYnV0IHRoZXJlJ3MgYWN0dWFsbHkgb25lIHJlYXNvbiBmb3IgdGhpczoKLWZpbGUtc3BlY2lmaWMgY29tcGlsZXIgZmxhZ3MgYXJlIGFkZGVkIHRvIHRoZSBQQlhCdWlsZEZpbGUgb2JqZWN0IHNvIGFzIHRvCi1hbGxvdyBhIHNpbmdsZSBmaWxlIHRvIGJlIGEgbWVtYmVyIG9mIG11bHRpcGxlIHRhcmdldHMgd2hpbGUgaGF2aW5nIGRpc3RpbmN0Ci1jb21waWxlciBmbGFncyBmb3IgZWFjaC4gIFRoZXNlIGZsYWdzIGNhbiBiZSBtb2RpZmllZCBpbiB0aGUgWGNvZGUgYXBwbGNpYXRpb24KLWluIHRoZSAiQnVpbGQiIHRhYiBvZiBhIEZpbGUgSW5mbyB3aW5kb3cuCi0KLVdoZW4gYSBwcm9qZWN0IGlzIG9wZW4gaW4gdGhlIFhjb2RlIGFwcGxpY2F0aW9uLCBYY29kZSB3aWxsIHJld3JpdGUgaXQuICBBcwotc3VjaCwgdGhpcyBtb2R1bGUgaXMgY2FyZWZ1bCB0byBhZGhlcmUgdG8gdGhlIGZvcm1hdHRpbmcgdXNlZCBieSBYY29kZSwgdG8KLWF2b2lkIGluc2lnbmlmaWNhbnQgY2hhbmdlcyBhcHBlYXJpbmcgaW4gdGhlIGZpbGUgd2hlbiBpdCBpcyB1c2VkIGluIHRoZQotWGNvZGUgYXBwbGljYXRpb24uICBUaGlzIHdpbGwga2VlcCB2ZXJzaW9uIGNvbnRyb2wgcmVwb3NpdG9yaWVzIGhhcHB5LCBhbmQKLW1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbXBhcmUgYSBwcm9qZWN0IGZpbGUgdXNlZCBpbiBYY29kZSB0byBvbmUgZ2VuZXJhdGVkIGJ5Ci10aGlzIG1vZHVsZSB0byBkZXRlcm1pbmUgaWYgYW55IHNpZ25pZmljYW50IGNoYW5nZXMgd2VyZSBtYWRlIGluIHRoZQotYXBwbGljYXRpb24uCi0KLVhjb2RlIGhhcyBpdHMgb3duIHdheSBvZiBhc3NpZ25pbmcgMjQtY2hhcmFjdGVyIGlkZW50aWZpZXJzIHRvIGVhY2ggb2JqZWN0LAotd2hpY2ggaXMgbm90IGR1cGxpY2F0ZWQgaGVyZS4gIEJlY2F1c2UgdGhlIGlkZW50aWZpZXIgb25seSBpcyBvbmx5IGdlbmVyYXRlZAotb25jZSwgd2hlbiBhbiBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIGlzIHRoZW4gbGVmdCB1bmNoYW5nZWQsIHRoZXJlIGlzIG5vIG5lZWQKLXRvIGF0dGVtcHQgdG8gZHVwbGljYXRlIFhjb2RlJ3MgYmVoYXZpb3IgaW4gdGhpcyBhcmVhLiAgVGhlIGdlbmVyYXRvciBpcyBmcmVlCi10byBzZWxlY3QgYW55IGlkZW50aWZpZXIsIGV2ZW4gYXQgcmFuZG9tLCB0byByZWZlciB0byB0aGUgb2JqZWN0cyBpdCBjcmVhdGVzLAotYW5kIFhjb2RlIHdpbGwgcmV0YWluIHRob3NlIGlkZW50aWZpZXJzIGFuZCB1c2UgdGhlbSB3aGVuIHN1YnNlcXVlbnRseQotcmV3cml0aW5nIHRoZSBwcm9qZWN0IGZpbGUuICBIb3dldmVyLCB0aGUgZ2VuZXJhdG9yIHdvdWxkIGNob29zZSBuZXcgcmFuZG9tCi1pZGVudGlmaWVycyBlYWNoIHRpbWUgdGhlIHByb2plY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCwgbGVhZGluZyB0byBkaWZmaWN1bHRpZXMKLWNvbXBhcmluZyAidXNlZCIgcHJvamVjdCBmaWxlcyB0byAicHJpc3RpbmUiIG9uZXMgcHJvZHVjZWQgYnkgdGhpcyBtb2R1bGUsCi1hbmQgY2F1c2luZyB0aGUgYXBwZWFyYW5jZSBvZiBjaGFuZ2VzIGFzIGV2ZXJ5IG9iamVjdCBpZGVudGlmaWVyIGlzIGNoYW5nZWQKLXdoZW4gdXBkYXRlZCBwcm9qZWN0cyBhcmUgY2hlY2tlZCBpbiB0byBhIHZlcnNpb24gY29udHJvbCByZXBvc2l0b3J5LiAgVG8KLW1pdGlnYXRlIHRoaXMgcHJvYmxlbSwgdGhpcyBtb2R1bGUgY2hvb3NlcyBpZGVudGlmaWVycyBpbiBhIG1vcmUgZGV0ZXJtaW5pc3RpYwotd2F5LCBieSBoYXNoaW5nIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBvYmplY3QgYXMgd2VsbCBhcyBpdHMgcGFyZW50IGFuZCBhbmNlc3Rvcgotb2JqZWN0cy4gIFRoaXMgc3RyYXRlZ3kgc2hvdWxkIHJlc3VsdCBpbiBtaW5pbWFsICJzaGlmdCIgaW4gSURzIGFzIHN1Y2Nlc3NpdmUKLWdlbmVyYXRpb25zIG9mIHByb2plY3QgZmlsZXMgYXJlIHByb2R1Y2VkLgotCi1USElTIE1PRFVMRQotCi1UaGlzIG1vZHVsZSBpbnRyb2R1Y2VzIHNldmVyYWwgY2xhc3NlcywgYWxsIGRlcml2ZWQgZnJvbSB0aGUgWENPYmplY3QgY2xhc3MuCi1OZWFybHkgYWxsIG9mIHRoZSAiYnJhaW5zIiBhcmUgYnVpbHQgaW50byB0aGUgWENPYmplY3QgY2xhc3MsIHdoaWNoIHVuZGVyc3RhbmRzCi1ob3cgdG8gY3JlYXRlIGFuZCBtb2RpZnkgb2JqZWN0cywgbWFpbnRhaW4gdGhlIHByb3BlciB0cmVlIHN0cnVjdHVyZSwgY29tcHV0ZQotaWRlbnRpZmllcnMsIGFuZCBwcmludCBvYmplY3RzLiAgRm9yIHRoZSBtb3N0IHBhcnQsIGNsYXNzZXMgZGVyaXZlZCBmcm9tCi1YQ09iamVjdCBuZWVkIG9ubHkgcHJvdmlkZSBhIF9zY2hlbWEgY2xhc3Mgb2JqZWN0LCBhIGRpY3Rpb25hcnkgdGhhdAotZXhwcmVzc2VzIHdoYXQgcHJvcGVydGllcyBvYmplY3RzIG9mIHRoZSBjbGFzcyBtYXkgY29udGFpbi4KLQotR2l2ZW4gdGhpcyBzdHJ1Y3R1cmUsIGl0J3MgcG9zc2libGUgdG8gYnVpbGQgYSBtaW5pbWFsIHByb2plY3QgZmlsZSBieSBjcmVhdGluZwotb2JqZWN0cyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYW5kIG1ha2luZyB0aGUgcHJvcGVyIGNvbm5lY3Rpb25zOgotCi0gIGNvbmZpZ19saXN0ID0gWENDb25maWd1cmF0aW9uTGlzdCgpCi0gIGdyb3VwID0gUEJYR3JvdXAoKQotICBwcm9qZWN0ID0gUEJYUHJvamVjdCh7J2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnOiBjb25maWdfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICdtYWluR3JvdXAnOiBncm91cH0pCi0KLVdpdGggdGhlIHByb2plY3Qgb2JqZWN0IHNldCB1cCwgaXQgY2FuIGJlIGFkZGVkIHRvIGFuIFhDUHJvamVjdEZpbGUgb2JqZWN0LgotWENQcm9qZWN0RmlsZSBpcyBhIHBzZXVkby1jbGFzcyBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBpcyBhIGNvbmNyZXRlIFhDT2JqZWN0Ci1zdWJjbGFzcyB0aGF0IGRvZXMgbm90IGFjdHVhbGx5IGNvcnJlc3BvbmQgdG8gYSBjbGFzcyB0eXBlIGZvdW5kIGluIGEgcHJvamVjdAotZmlsZS4gIFJhdGhlciwgaXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHByb2plY3QgZmlsZSdzIHJvb3QgZGljdGlvbmFyeS4KLVByaW50aW5nIGFuIFhDUHJvamVjdEZpbGUgd2lsbCBwcmludCB0aGUgZW50aXJlIHByb2plY3QgZmlsZSwgaW5jbHVkaW5nIHRoZQotZnVsbCAib2JqZWN0cyIgZGljdGlvbmFyeS4KLQotICBwcm9qZWN0X2ZpbGUgPSBYQ1Byb2plY3RGaWxlKHsncm9vdE9iamVjdCc6IHByb2plY3R9KQotICBwcm9qZWN0X2ZpbGUuQ29tcHV0ZUlEcygpCi0gIHByb2plY3RfZmlsZS5QcmludCgpCi0KLVhjb2RlIHByb2plY3QgZmlsZXMgYXJlIGFsd2F5cyBlbmNvZGVkIGluIFVURi04LiAgVGhpcyBtb2R1bGUgd2lsbCBhY2NlcHQKLXN0cmluZ3Mgb2YgZWl0aGVyIHRoZSBzdHIgY2xhc3Mgb3IgdGhlIHVuaWNvZGUgY2xhc3MuICBTdHJpbmdzIG9mIGNsYXNzIHN0cgotYXJlIGFzc3VtZWQgdG8gYWxyZWFkeSBiZSBlbmNvZGVkIGluIFVURi04LiAgT2J2aW91c2x5LCBpZiB5b3UncmUganVzdCB1c2luZwotQVNDSUksIHlvdSB3b24ndCBlbmNvdW50ZXIgZGlmZmljdWx0aWVzIGJlY2F1c2UgQVNDSUkgaXMgYSBVVEYtOCBzdWJzZXQuCi1TdHJpbmdzIG9mIGNsYXNzIHVuaWNvZGUgYXJlIGhhbmRsZWQgcHJvcGVybHkgYW5kIGVuY29kZWQgaW4gVVRGLTggd2hlbgotYSBwcm9qZWN0IGZpbGUgaXMgb3V0cHV0LgotIiIiCi0KLWltcG9ydCBneXAuY29tbW9uCi1pbXBvcnQgcG9zaXhwYXRoCi1pbXBvcnQgcmUKLWltcG9ydCBzdHJ1Y3QKLWltcG9ydCBzeXMKLQotIyBoYXNobGliIGlzIHN1cHBsaWVkIGFzIG9mIFB5dGhvbiAyLjUgYXMgdGhlIHJlcGxhY2VtZW50IGludGVyZmFjZSBmb3Igc2hhCi0jIGFuZCBvdGhlciBzZWN1cmUgaGFzaGVzLiAgSW4gMi42LCBzaGEgaXMgZGVwcmVjYXRlZC4gIEltcG9ydCBoYXNobGliIGlmCi0jIGF2YWlsYWJsZSwgYXZvaWRpbmcgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHVuZGVyIDIuNi4gIEltcG9ydCBzaGEgb3RoZXJ3aXNlLAotIyBwcmVzZXJ2aW5nIDIuNCBjb21wYXRpYmlsaXR5LgotdHJ5OgotICBpbXBvcnQgaGFzaGxpYgotICBfbmV3X3NoYTEgPSBoYXNobGliLnNoYTEKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgaW1wb3J0IHNoYQotICBfbmV3X3NoYTEgPSBzaGEubmV3Ci0KLQotIyBTZWUgWENPYmplY3QuX0VuY29kZVN0cmluZy4gIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGVuIGEgc3RyaW5nCi0jIGNhbiBiZSBwcmludGVkIHVucXVvdGVkLiAgU3RyaW5ncyB0aGF0IG1hdGNoIHRoaXMgcGF0dGVybiBtYXkgYmUgcHJpbnRlZAotIyB1bnF1b3RlZC4gIFN0cmluZ3MgdGhhdCBkbyBub3QgbWF0Y2ggbXVzdCBiZSBxdW90ZWQgYW5kIG1heSBiZSBmdXJ0aGVyCi0jIHRyYW5zZm9ybWVkIHRvIGJlIHByb3Blcmx5IGVuY29kZWQuICBOb3RlIHRoYXQgdGhpcyBleHByZXNzaW9uIG1hdGNoZXMgdGhlCi0jIGNoYXJhY3RlcnMgbGlzdGVkIHdpdGggIisiLCBmb3IgMSBvciBtb3JlIG9jY3VycmVuY2VzOiBpZiBhIHN0cmluZyBpcyBlbXB0eSwKLSMgaXQgbXVzdCBub3QgbWF0Y2ggdGhpcyBwYXR0ZXJuLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGVuY29kZWQgYXMgIiIuCi1fdW5xdW90ZWQgPSByZS5jb21waWxlKCdeW0EtWmEtejAtOSQuL19dKyQnKQotCi0jIFN0cmluZ3MgdGhhdCBtYXRjaCB0aGlzIHBhdHRlcm4gYXJlIHF1b3RlZCByZWdhcmRsZXNzIG9mIHdoYXQgX3VucXVvdGVkIHNheXMuCi0jIE9kZGx5LCBYY29kZSB3aWxsIHF1b3RlIGFueSBzdHJpbmcgd2l0aCBhIHJ1biBvZiB0aHJlZSBvciBtb3JlIHVuZGVyc2NvcmVzLgotX3F1b3RlZCA9IHJlLmNvbXBpbGUoJ19fXycpCi0KLSMgVGhpcyBwYXR0ZXJuIHNob3VsZCBtYXRjaCBhbnkgY2hhcmFjdGVyIHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZCBieQotIyBYQ09iamVjdC5fRW5jb2RlU3RyaW5nLiAgU2VlIHRoYXQgZnVuY3Rpb24uCi1fZXNjYXBlZCA9IHJlLmNvbXBpbGUoJ1tcXFxcIl18W14gLX5dJykKLQotCi0jIFVzZWQgYnkgU291cmNlVHJlZUFuZFBhdGhGcm9tUGF0aAotX3BhdGhfbGVhZGluZ192YXJpYWJsZSA9IHJlLmNvbXBpbGUoJ15cJFwoKC4qPylcKSgvKC4qKSk/JCcpCi0KLWRlZiBTb3VyY2VUcmVlQW5kUGF0aEZyb21QYXRoKGlucHV0X3BhdGgpOgotICAiIiJHaXZlbiBpbnB1dF9wYXRoLCByZXR1cm5zIGEgdHVwbGUgd2l0aCBzb3VyY2VUcmVlIGFuZCBwYXRoIHZhbHVlcy4KLQotICBFeGFtcGxlczoKLSAgICBpbnB1dF9wYXRoICAgICAoc291cmNlX3RyZWUsIG91dHB1dF9wYXRoKQotICAgICckKFZBUikvcGF0aCcgICgnVkFSJywgJ3BhdGgnKQotICAgICckKFZBUiknICAgICAgICgnVkFSJywgTm9uZSkKLSAgICAncGF0aCcgICAgICAgICAoTm9uZSwgJ3BhdGgnKQotICAiIiIKLQotICBzb3VyY2VfZ3JvdXBfbWF0Y2ggPSBfcGF0aF9sZWFkaW5nX3ZhcmlhYmxlLm1hdGNoKGlucHV0X3BhdGgpCi0gIGlmIHNvdXJjZV9ncm91cF9tYXRjaDoKLSAgICBzb3VyY2VfdHJlZSA9IHNvdXJjZV9ncm91cF9tYXRjaC5ncm91cCgxKQotICAgIG91dHB1dF9wYXRoID0gc291cmNlX2dyb3VwX21hdGNoLmdyb3VwKDMpICAjIFRoaXMgbWF5IGJlIE5vbmUuCi0gIGVsc2U6Ci0gICAgc291cmNlX3RyZWUgPSBOb25lCi0gICAgb3V0cHV0X3BhdGggPSBpbnB1dF9wYXRoCi0KLSAgcmV0dXJuIChzb3VyY2VfdHJlZSwgb3V0cHV0X3BhdGgpCi0KLWRlZiBDb252ZXJ0VmFyaWFibGVzVG9TaGVsbFN5bnRheChpbnB1dF9zdHJpbmcpOgotICByZXR1cm4gcmUuc3ViKCdcJFwoKC4qPylcKScsICcke1xcMX0nLCBpbnB1dF9zdHJpbmcpCi0KLWNsYXNzIFhDT2JqZWN0KG9iamVjdCk6Ci0gICIiIlRoZSBhYnN0cmFjdCBiYXNlIG9mIGFsbCBjbGFzcyB0eXBlcyB1c2VkIGluIFhjb2RlIHByb2plY3QgZmlsZXMuCi0KLSAgQ2xhc3MgdmFyaWFibGVzOgotICAgIF9zY2hlbWE6IEEgZGljdGlvbmFyeSBkZWZpbmluZyB0aGUgcHJvcGVydGllcyBvZiB0aGlzIGNsYXNzLiAgVGhlIGtleXMgdG8KLSAgICAgICAgICAgICBfc2NoZW1hIGFyZSBzdHJpbmcgcHJvcGVydHkga2V5cyBhcyB1c2VkIGluIHByb2plY3QgZmlsZXMuICBWYWx1ZXMKLSAgICAgICAgICAgICBhcmUgYSBsaXN0IG9mIGZvdXIgb3IgZml2ZSBlbGVtZW50czoKLSAgICAgICAgICAgICBbIGlzX2xpc3QsIHByb3BlcnR5X3R5cGUsIGlzX3N0cm9uZywgaXNfcmVxdWlyZWQsIGRlZmF1bHQgXQotICAgICAgICAgICAgIGlzX2xpc3Q6IFRydWUgaWYgdGhlIHByb3BlcnR5IGRlc2NyaWJlZCBpcyBhIGxpc3QsIGFzIG9wcG9zZWQKLSAgICAgICAgICAgICAgICAgICAgICB0byBhIHNpbmdsZSBlbGVtZW50LgotICAgICAgICAgICAgIHByb3BlcnR5X3R5cGU6IFRoZSB0eXBlIHRvIHVzZSBhcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGlmIGlzX2xpc3QgaXMgVHJ1ZSwgdGhlIHR5cGUgdG8gdXNlIGZvciBlYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCBvZiB0aGUgdmFsdWUncyBsaXN0LiAgcHJvcGVydHlfdHlwZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYW4gWENPYmplY3Qgc3ViY2xhc3MsIG9yIG9uZSBvZiB0aGUgYnVpbHQtaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcyBzdHIsIGludCwgb3IgZGljdC4KLSAgICAgICAgICAgICBpc19zdHJvbmc6IElmIHByb3BlcnR5X3R5cGUgaXMgYW4gWENPYmplY3Qgc3ViY2xhc3MsIGlzX3N0cm9uZwotICAgICAgICAgICAgICAgICAgICAgICAgaXMgVHJ1ZSB0byBhc3NlcnQgdGhhdCB0aGlzIGNsYXNzICJvd25zLCIgb3Igc2VydmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBhcyBwYXJlbnQsIHRvIHRoZSBwcm9wZXJ0eSB2YWx1ZSAob3IsIGlmIGlzX2xpc3QgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIHZhbHVlcykuICBpc19zdHJvbmcgbXVzdCBiZSBGYWxzZSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZSBpcyBub3QgYW4gWENPYmplY3Qgc3ViY2xhc3MuCi0gICAgICAgICAgICAgaXNfcmVxdWlyZWQ6IFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciB0aGUgY2xhc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBpc19yZXF1aXJlZCBiZWluZyBUcnVlIGRvZXMgbm90IHByZWNsdWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGVtcHR5IHN0cmluZyAoIiIsIGluIHRoZSBjYXNlIG9mIHByb3BlcnR5X3R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKSBvciBsaXN0IChbXSwgaW4gdGhlIGNhc2Ugb2YgaXNfbGlzdCBUcnVlKSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHNldCBmb3IgdGhlIHByb3BlcnR5LgotICAgICAgICAgICAgIGRlZmF1bHQ6IE9wdGlvbmFsLiAgSWYgaXNfcmVxdXJpZWQgaXMgVHJ1ZSwgZGVmYXVsdCBtYXkgYmUgc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgdG8gcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgZm9yIG9iamVjdHMgdGhhdCBkbyBub3Qgc3VwcGx5Ci0gICAgICAgICAgICAgICAgICAgICAgdGhlaXIgb3duIHZhbHVlLiAgSWYgaXNfcmVxdWlyZWQgaXMgVHJ1ZSBhbmQgZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBwcm92aWRlZCwgdXNlcnMgb2YgdGhlIGNsYXNzIG11c3Qgc3VwcGx5IHRoZWlyIG93bgotICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuCi0gICAgICAgICAgICAgTm90ZSB0aGF0IGFsdGhvdWdoIHRoZSB2YWx1ZXMgb2YgdGhlIGFycmF5IGFyZSBleHByZXNzZWQgaW4KLSAgICAgICAgICAgICBib29sZWFuIHRlcm1zLCBzdWJjbGFzc2VzIHByb3ZpZGUgdmFsdWVzIGFzIGludGVnZXJzIHRvIGNvbnNlcnZlCi0gICAgICAgICAgICAgaG9yaXpvbnRhbCBzcGFjZS4KLSAgICBfc2hvdWxkX3ByaW50X3NpbmdsZV9saW5lOiBGYWxzZSBpbiBYQ09iamVjdC4gIFN1YmNsYXNzZXMgd2hvc2Ugb2JqZWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSBwcm9qZWN0IGZpbGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlIHNpbmdsZS1saW5lIGZvcm1hdCwgc3VjaCBhcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWEZpbGVSZWZlcmVuY2UgYW5kIFBCWEJ1aWxkRmlsZSwgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRoaXMgdG8gVHJ1ZS4KLSAgICBfZW5jb2RlX3RyYW5zZm9ybXM6IFVzZWQgYnkgX0VuY29kZVN0cmluZyB0byBlbmNvZGUgdW5wcmludGFibGUgY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbmRleCBpbnRvIHRoaXMgbGlzdCBpcyB0aGUgb3JkaW5hbCBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciB0byB0cmFuc2Zvcm07IGVhY2ggdmFsdWUgaXMgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjaGFyYWN0ZXIgaW4gdGhlIG91dHB1dC4gIFhDT2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlcyBhbiBfZW5jb2RlX3RyYW5zZm9ybXMgbGlzdCBzdWl0YWJsZSBmb3IgbW9zdAotICAgICAgICAgICAgICAgICAgICAgICAgWENPYmplY3Qgc3ViY2xhc3Nlcy4KLSAgICBfYWx0ZXJuYXRlX2VuY29kZV90cmFuc2Zvcm1zOiBQcm92aWRlZCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdpc2ggdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFsdGVybmF0ZSBlbmNvZGluZyBydWxlcy4gIFhjb2RlIHNlZW1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdXNlIHRoZXNlIHJ1bGVzIHdoZW4gcHJpbnRpbmcgb2JqZWN0cyBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZS1saW5lIGZvcm1hdC4gIFN1YmNsYXNzZXMgdGhhdCBkZXNpcmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJlaGF2aW9yIHNob3VsZCBzZXQgX2VuY29kZV90cmFuc2Zvcm1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gX2FsdGVybmF0ZV9lbmNvZGVfdHJhbnNmb3Jtcy4KLSAgICBfaGFzaGFibGVzOiBBIGxpc3Qgb2YgWENPYmplY3Qgc3ViY2xhc3NlcyB0aGF0IGNhbiBiZSBoYXNoZWQgYnkgQ29tcHV0ZUlEcwotICAgICAgICAgICAgICAgIHRvIGNvbnN0cnVjdCB0aGlzIG9iamVjdCdzIElELiAgTW9zdCBjbGFzc2VzIHRoYXQgbmVlZCBjdXN0b20KLSAgICAgICAgICAgICAgICBoYXNoaW5nIGJlaGF2aW9yIHNob3VsZCBkbyBpdCBieSBvdmVycmlkaW5nIEhhc2hhYmxlcywKLSAgICAgICAgICAgICAgICBidXQgaW4gc29tZSBjYXNlcyBhbiBvYmplY3QncyBwYXJlbnQgbWF5IHdpc2ggdG8gcHVzaCBhCi0gICAgICAgICAgICAgICAgaGFzaGFibGUgdmFsdWUgaW50byBpdHMgY2hpbGQsIGFuZCBpdCBjYW4gZG8gc28gYnkgYXBwZW5kaW5nCi0gICAgICAgICAgICAgICAgdG8gX2hhc2hhYmxlcy4KLSAgQXR0cmlidXRlczoKLSAgICBpZDogVGhlIG9iamVjdCdzIGlkZW50aWZpZXIsIGEgMjQtY2hhcmFjdGVyIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBzdHJpbmcuCi0gICAgICAgIFVzdWFsbHksIG9iamVjdHMgYmVpbmcgY3JlYXRlZCBzaG91bGQgbm90IHNldCBpZCB1bnRpbCB0aGUgZW50aXJlCi0gICAgICAgIHByb2plY3QgZmlsZSBzdHJ1Y3R1cmUgaXMgYnVpbHQuICBBdCB0aGF0IHBvaW50LCBVcGRhdGVJRHMoKSBzaG91bGQKLSAgICAgICAgYmUgY2FsbGVkIG9uIHRoZSByb290IG9iamVjdCB0byBhc3NpZ24gZGV0ZXJtaW5pc3RpYyB2YWx1ZXMgZm9yIGlkIHRvCi0gICAgICAgIGVhY2ggb2JqZWN0IGluIHRoZSB0cmVlLgotICAgIHBhcmVudDogVGhlIG9iamVjdCdzIHBhcmVudC4gIFRoaXMgaXMgc2V0IGJ5IGEgcGFyZW50IFhDT2JqZWN0IHdoZW4gYSBjaGlsZAotICAgICAgICAgICAgb2JqZWN0IGlzIGFkZGVkIHRvIGl0LgotICAgIF9wcm9wZXJ0aWVzOiBUaGUgb2JqZWN0J3MgcHJvcGVydHkgZGljdGlvbmFyeS4gIEFuIG9iamVjdCdzIHByb3BlcnRpZXMgYXJlCi0gICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBieSBpdHMgY2xhc3MnIF9zY2hlbWEgdmFyaWFibGUuCi0gICIiIgotCi0gIF9zY2hlbWEgPSB7fQotICBfc2hvdWxkX3ByaW50X3NpbmdsZV9saW5lID0gRmFsc2UKLQotICAjIFNlZSBfRW5jb2RlU3RyaW5nLgotICBfZW5jb2RlX3RyYW5zZm9ybXMgPSBbXQotICBpID0gMAotICB3aGlsZSBpIDwgb3JkKCcgJyk6Ci0gICAgX2VuY29kZV90cmFuc2Zvcm1zLmFwcGVuZCgnXFxVJTA0eCcgJSBpKQotICAgIGkgPSBpICsgMQotICBfZW5jb2RlX3RyYW5zZm9ybXNbN10gPSAnXFxhJwotICBfZW5jb2RlX3RyYW5zZm9ybXNbOF0gPSAnXFxiJwotICBfZW5jb2RlX3RyYW5zZm9ybXNbOV0gPSAnXFx0JwotICBfZW5jb2RlX3RyYW5zZm9ybXNbMTBdID0gJ1xcbicKLSAgX2VuY29kZV90cmFuc2Zvcm1zWzExXSA9ICdcXHYnCi0gIF9lbmNvZGVfdHJhbnNmb3Jtc1sxMl0gPSAnXFxmJwotICBfZW5jb2RlX3RyYW5zZm9ybXNbMTNdID0gJ1xcbicKLQotICBfYWx0ZXJuYXRlX2VuY29kZV90cmFuc2Zvcm1zID0gbGlzdChfZW5jb2RlX3RyYW5zZm9ybXMpCi0gIF9hbHRlcm5hdGVfZW5jb2RlX3RyYW5zZm9ybXNbOV0gPSBjaHIoOSkKLSAgX2FsdGVybmF0ZV9lbmNvZGVfdHJhbnNmb3Jtc1sxMF0gPSBjaHIoMTApCi0gIF9hbHRlcm5hdGVfZW5jb2RlX3RyYW5zZm9ybXNbMTFdID0gY2hyKDExKQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzPU5vbmUsIGlkPU5vbmUsIHBhcmVudD1Ob25lKToKLSAgICBzZWxmLmlkID0gaWQKLSAgICBzZWxmLnBhcmVudCA9IHBhcmVudAotICAgIHNlbGYuX3Byb3BlcnRpZXMgPSB7fQotICAgIHNlbGYuX2hhc2hhYmxlcyA9IFtdCi0gICAgc2VsZi5fU2V0RGVmYXVsdHNGcm9tU2NoZW1hKCkKLSAgICBzZWxmLlVwZGF0ZVByb3BlcnRpZXMocHJvcGVydGllcykKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgdHJ5OgotICAgICAgbmFtZSA9IHNlbGYuTmFtZSgpCi0gICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICByZXR1cm4gJzwlcyBhdCAweCV4PicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGlkKHNlbGYpKQotICAgIHJldHVybiAnPCVzICVyIGF0IDB4JXg+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSwgaWQoc2VsZikpCi0KLSAgZGVmIENvcHkoc2VsZik6Ci0gICAgIiIiTWFrZSBhIGNvcHkgb2YgdGhpcyBvYmplY3QuCi0KLSAgICBUaGUgbmV3IG9iamVjdCB3aWxsIGhhdmUgaXRzIG93biBjb3B5IG9mIGxpc3RzIGFuZCBkaWN0cy4gIEFueSBYQ09iamVjdAotICAgIG9iamVjdHMgb3duZWQgYnkgdGhpcyBvYmplY3QgKG1hcmtlZCAic3Ryb25nIikgd2lsbCBiZSBjb3BpZWQgaW4gdGhlCi0gICAgbmV3IG9iamVjdCwgZXZlbiB0aG9zZSBmb3VuZCBpbiBsaXN0cy4gIElmIHRoaXMgb2JqZWN0IGhhcyBhbnkgd2VhawotICAgIHJlZmVyZW5jZXMgdG8gb3RoZXIgWENPYmplY3RzLCB0aGUgc2FtZSByZWZlcmVuY2VzIGFyZSBhZGRlZCB0byB0aGUgbmV3Ci0gICAgb2JqZWN0IHdpdGhvdXQgbWFraW5nIGEgY29weS4KLSAgICAiIiIKLQotICAgIHRoYXQgPSBzZWxmLl9fY2xhc3NfXyhpZD1zZWxmLmlkLCBwYXJlbnQ9c2VsZi5wYXJlbnQpCi0gICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5fcHJvcGVydGllcy5pdGVyaXRlbXMoKToKLSAgICAgIGlzX3N0cm9uZyA9IHNlbGYuX3NjaGVtYVtrZXldWzJdCi0KLSAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFhDT2JqZWN0KToKLSAgICAgICAgaWYgaXNfc3Ryb25nOgotICAgICAgICAgIG5ld192YWx1ZSA9IHZhbHVlLkNvcHkoKQotICAgICAgICAgIG5ld192YWx1ZS5wYXJlbnQgPSB0aGF0Ci0gICAgICAgICAgdGhhdC5fcHJvcGVydGllc1trZXldID0gbmV3X3ZhbHVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgdGhhdC5fcHJvcGVydGllc1trZXldID0gdmFsdWUKLSAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSBvciBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKSBvciBcCi0gICAgICAgICAgIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgIHRoYXQuX3Byb3BlcnRpZXNba2V5XSA9IHZhbHVlCi0gICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgotICAgICAgICBpZiBpc19zdHJvbmc6Ci0gICAgICAgICAgIyBJZiBpc19zdHJvbmcgaXMgVHJ1ZSwgZWFjaCBlbGVtZW50IGlzIGFuIFhDT2JqZWN0LCBzbyBpdCdzIHNhZmUgdG8KLSAgICAgICAgICAjIGNhbGwgQ29weS4KLSAgICAgICAgICB0aGF0Ll9wcm9wZXJ0aWVzW2tleV0gPSBbXQotICAgICAgICAgIGZvciBpdGVtIGluIHZhbHVlOgotICAgICAgICAgICAgbmV3X2l0ZW0gPSBpdGVtLkNvcHkoKQotICAgICAgICAgICAgbmV3X2l0ZW0ucGFyZW50ID0gdGhhdAotICAgICAgICAgICAgdGhhdC5fcHJvcGVydGllc1trZXldLmFwcGVuZChuZXdfaXRlbSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICB0aGF0Ll9wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZVs6XQotICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgIyBkaWN0cyBhcmUgbmV2ZXIgc3Ryb25nLgotICAgICAgICBpZiBpc19zdHJvbmc6Ci0gICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAnU3Ryb25nIGRpY3QgZm9yIGtleSAnICsga2V5ICsgJyBpbiAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgZWxzZToKLSAgICAgICAgICB0aGF0Ll9wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZS5jb3B5KCkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvciwgJ1VuZXhwZWN0ZWQgdHlwZSAnICsgdmFsdWUuX19jbGFzc19fLl9fbmFtZV9fICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICcgZm9yIGtleSAnICsga2V5ICsgJyBpbiAnICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLQotICAgIHJldHVybiB0aGF0Ci0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgIiIiUmV0dXJuIHRoZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYW4gb2JqZWN0LgotCi0gICAgTm90IGFsbCBvYmplY3RzIG5lY2Vzc2FyaWx5IG5lZWQgdG8gYmUgbmFtZWFibGUsIGFuZCBub3QgYWxsIHRoYXQgZG8gaGF2ZQotICAgIGEgIm5hbWUiIHByb3BlcnR5LiAgT3ZlcnJpZGUgYXMgbmVlZGVkLgotICAgICIiIgotCi0gICAgIyBJZiB0aGUgc2NoZW1hIGluZGljYXRlcyB0aGF0ICJuYW1lIiBpcyByZXF1aXJlZCwgdHJ5IHRvIGFjY2VzcyB0aGUKLSAgICAjIHByb3BlcnR5IGV2ZW4gaWYgaXQgZG9lc24ndCBleGlzdC4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYSBLZXlFcnJvcgotICAgICMgYmVpbmcgcmFpc2VkIGZvciB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgcHJlc2VudCwgd2hpY2ggc2VlbXMgbW9yZQotICAgICMgYXBwcm9wcmlhdGUgdGhhbiBOb3RJbXBsZW1lbnRlZEVycm9yIGluIHRoaXMgY2FzZS4KLSAgICBpZiAnbmFtZScgaW4gc2VsZi5fcHJvcGVydGllcyBvciBcCi0gICAgICAgICgnbmFtZScgaW4gc2VsZi5fc2NoZW1hIGFuZCBzZWxmLl9zY2hlbWFbJ25hbWUnXVszXSk6Ci0gICAgICByZXR1cm4gc2VsZi5fcHJvcGVydGllc1snbmFtZSddCi0KLSAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCBcCi0gICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnIG11c3QgaW1wbGVtZW50IE5hbWUnCi0KLSAgZGVmIENvbW1lbnQoc2VsZik6Ci0gICAgIiIiUmV0dXJuIGEgY29tbWVudCBzdHJpbmcgZm9yIHRoZSBvYmplY3QuCi0KLSAgICBNb3N0IG9iamVjdHMganVzdCB1c2UgdGhlaXIgbmFtZSBhcyB0aGUgY29tbWVudCwgYnV0IFBCWFByb2plY3QgdXNlcwotICAgIGRpZmZlcmVudCB2YWx1ZXMuCi0KLSAgICBUaGUgcmV0dXJuZWQgY29tbWVudCBpcyBub3QgZXNjYXBlZCBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgY29tbWVudCBtYXJrZXIKLSAgICBzdHJpbmdzIGFwcGxpZWQgdG8gaXQuCi0gICAgIiIiCi0KLSAgICByZXR1cm4gc2VsZi5OYW1lKCkKLQotICBkZWYgSGFzaGFibGVzKHNlbGYpOgotICAgIGhhc2hhYmxlcyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfX10KLQotICAgIG5hbWUgPSBzZWxmLk5hbWUoKQotICAgIGlmIG5hbWUgIT0gTm9uZToKLSAgICAgIGhhc2hhYmxlcy5hcHBlbmQobmFtZSkKLQotICAgIGhhc2hhYmxlcy5leHRlbmQoc2VsZi5faGFzaGFibGVzKQotCi0gICAgcmV0dXJuIGhhc2hhYmxlcwotCi0gIGRlZiBIYXNoYWJsZXNGb3JDaGlsZChzZWxmKToKLSAgICByZXR1cm4gTm9uZQotCi0gIGRlZiBDb21wdXRlSURzKHNlbGYsIHJlY3Vyc2l2ZT1UcnVlLCBvdmVyd3JpdGU9VHJ1ZSwgc2VlZF9oYXNoPU5vbmUpOgotICAgICIiIlNldCAiaWQiIHByb3BlcnRpZXMgZGV0ZXJtaW5pc3RpY2FsbHkuCi0KLSAgICBBbiBvYmplY3QncyAiaWQiIHByb3BlcnR5IGlzIHNldCBiYXNlZCBvbiBhIGhhc2ggb2YgaXRzIGNsYXNzIHR5cGUgYW5kCi0gICAgbmFtZSwgYXMgd2VsbCBhcyB0aGUgY2xhc3MgdHlwZSBhbmQgbmFtZSBvZiBhbGwgYW5jZXN0b3Igb2JqZWN0cy4gIEFzCi0gICAgc3VjaCwgaXQgaXMgb25seSBhZHZpc2FibGUgdG8gY2FsbCBDb21wdXRlSURzIG9uY2UgYW4gZW50aXJlIHByb2plY3QgZmlsZQotICAgIHRyZWUgaXMgYnVpbHQuCi0KLSAgICBJZiByZWN1cnNpdmUgaXMgVHJ1ZSwgcmVjdXJzZSBpbnRvIGFsbCBkZXNjZW5kYW50IG9iamVjdHMgYW5kIHVwZGF0ZSB0aGVpcgotICAgIGhhc2hlcy4KLQotICAgIElmIG92ZXJ3cml0ZSBpcyBUcnVlLCBhbnkgZXhpc3RpbmcgdmFsdWUgc2V0IGluIHRoZSAiaWQiIHByb3BlcnR5IHdpbGwgYmUKLSAgICByZXBsYWNlZC4KLSAgICAiIiIKLQotICAgIGRlZiBfSGFzaFVwZGF0ZShoYXNoLCBkYXRhKToKLSAgICAgICIiIlVwZGF0ZSBoYXNoIHdpdGggZGF0YSdzIGxlbmd0aCBhbmQgY29udGVudHMuCi0KLSAgICAgIElmIHRoZSBoYXNoIHdlcmUgdXBkYXRlZCBvbmx5IHdpdGggdGhlIHZhbHVlIG9mIGRhdGEsIGl0IHdvdWxkIGJlCi0gICAgICBwb3NzaWJsZSBmb3IgY2xvd25zIHRvIGluZHVjZSBjb2xsaXNpb25zIGJ5IG1hbmlwdWxhdGluZyB0aGUgbmFtZXMgb2YKLSAgICAgIHRoZWlyIG9iamVjdHMuICBCeSBhZGRpbmcgdGhlIGxlbmd0aCwgaXQncyBleGNlZWRpbmdseSBsZXNzIGxpa2VseSB0aGF0Ci0gICAgICBJRCBjb2xsaXNpb25zIHdpbGwgYmUgZW5jb3VudGVyZWQsIGludGVudGlvbmFsbHkgb3Igbm90LgotICAgICAgIiIiCi0KLSAgICAgIGhhc2gudXBkYXRlKHN0cnVjdC5wYWNrKCc+aScsIGxlbihkYXRhKSkpCi0gICAgICBoYXNoLnVwZGF0ZShkYXRhKQotCi0gICAgaWYgc2VlZF9oYXNoIGlzIE5vbmU6Ci0gICAgICBzZWVkX2hhc2ggPSBfbmV3X3NoYTEoKQotCi0gICAgaGFzaCA9IHNlZWRfaGFzaC5jb3B5KCkKLQotICAgIGhhc2hhYmxlcyA9IHNlbGYuSGFzaGFibGVzKCkKLSAgICBhc3NlcnQgbGVuKGhhc2hhYmxlcykgPiAwCi0gICAgZm9yIGhhc2hhYmxlIGluIGhhc2hhYmxlczoKLSAgICAgIF9IYXNoVXBkYXRlKGhhc2gsIGhhc2hhYmxlKQotCi0gICAgaWYgcmVjdXJzaXZlOgotICAgICAgaGFzaGFibGVzX2Zvcl9jaGlsZCA9IHNlbGYuSGFzaGFibGVzRm9yQ2hpbGQoKQotICAgICAgaWYgaGFzaGFibGVzX2Zvcl9jaGlsZCBpcyBOb25lOgotICAgICAgICBjaGlsZF9oYXNoID0gaGFzaAotICAgICAgZWxzZToKLSAgICAgICAgYXNzZXJ0IGxlbihoYXNoYWJsZXNfZm9yX2NoaWxkKSA+IDAKLSAgICAgICAgY2hpbGRfaGFzaCA9IHNlZWRfaGFzaC5jb3B5KCkKLSAgICAgICAgZm9yIGhhc2hhYmxlIGluIGhhc2hhYmxlc19mb3JfY2hpbGQ6Ci0gICAgICAgICAgX0hhc2hVcGRhdGUoY2hpbGRfaGFzaCwgaGFzaGFibGUpCi0KLSAgICAgIGZvciBjaGlsZCBpbiBzZWxmLkNoaWxkcmVuKCk6Ci0gICAgICAgIGNoaWxkLkNvbXB1dGVJRHMocmVjdXJzaXZlLCBvdmVyd3JpdGUsIGNoaWxkX2hhc2gpCi0KLSAgICBpZiBvdmVyd3JpdGUgb3Igc2VsZi5pZCBpcyBOb25lOgotICAgICAgIyBYY29kZSBJRHMgYXJlIG9ubHkgOTYgYml0cyAoMjQgaGV4IGNoYXJhY3RlcnMpLCBidXQgYSBTSEEtMSBkaWdlc3QgaXMKLSAgICAgICMgaXMgMTYwIGJpdHMuICBJbnN0ZWFkIG9mIHRocm93aW5nIG91dCA2NCBiaXRzIG9mIHRoZSBkaWdlc3QsIHhvciB0aGVtCi0gICAgICAjIGludG8gdGhlIHBvcnRpb24gdGhhdCBnZXRzIHVzZWQuCi0gICAgICBhc3NlcnQgaGFzaC5kaWdlc3Rfc2l6ZSAlIDQgPT0gMAotICAgICAgZGlnZXN0X2ludF9jb3VudCA9IGhhc2guZGlnZXN0X3NpemUgLyA0Ci0gICAgICBkaWdlc3RfaW50cyA9IHN0cnVjdC51bnBhY2soJz4nICsgJ0knICogZGlnZXN0X2ludF9jb3VudCwgaGFzaC5kaWdlc3QoKSkKLSAgICAgIGlkX2ludHMgPSBbMCwgMCwgMF0KLSAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UoMCwgZGlnZXN0X2ludF9jb3VudCk6Ci0gICAgICAgIGlkX2ludHNbaW5kZXggJSAzXSBePSBkaWdlc3RfaW50c1tpbmRleF0KLSAgICAgIHNlbGYuaWQgPSAnJTA4WCUwOFglMDhYJyAlIHR1cGxlKGlkX2ludHMpCi0KLSAgZGVmIEVuc3VyZU5vSURDb2xsaXNpb25zKHNlbGYpOgotICAgICIiIlZlcmlmaWVzIHRoYXQgbm8gdHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBJRC4gIENoZWNrcyBhbGwgZGVzY2VuZGFudHMuCi0gICAgIiIiCi0KLSAgICBpZHMgPSB7fQotICAgIGRlc2NlbmRhbnRzID0gc2VsZi5EZXNjZW5kYW50cygpCi0gICAgZm9yIGRlc2NlbmRhbnQgaW4gZGVzY2VuZGFudHM6Ci0gICAgICBpZiBkZXNjZW5kYW50LmlkIGluIGlkczoKLSAgICAgICAgb3RoZXIgPSBpZHNbZGVzY2VuZGFudC5pZF0KLSAgICAgICAgcmFpc2UgS2V5RXJyb3IsIFwKLSAgICAgICAgICAgICAgJ0R1cGxpY2F0ZSBJRCAlcywgb2JqZWN0cyAiJXMiIGFuZCAiJXMiIGluICIlcyInICUgXAotICAgICAgICAgICAgICAoZGVzY2VuZGFudC5pZCwgc3RyKGRlc2NlbmRhbnQuX3Byb3BlcnRpZXMpLAotICAgICAgICAgICAgICAgc3RyKG90aGVyLl9wcm9wZXJ0aWVzKSwgc2VsZi5fcHJvcGVydGllc1sncm9vdE9iamVjdCddLk5hbWUoKSkKLSAgICAgIGlkc1tkZXNjZW5kYW50LmlkXSA9IGRlc2NlbmRhbnQKLQotICBkZWYgQ2hpbGRyZW4oc2VsZik6Ci0gICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgYWxsIG9mIHRoaXMgb2JqZWN0J3Mgb3duZWQgKHN0cm9uZykgY2hpbGRyZW4uIiIiCi0KLSAgICBjaGlsZHJlbiA9IFtdCi0gICAgZm9yIHByb3BlcnR5LCBhdHRyaWJ1dGVzIGluIHNlbGYuX3NjaGVtYS5pdGVyaXRlbXMoKToKLSAgICAgIChpc19saXN0LCBwcm9wZXJ0eV90eXBlLCBpc19zdHJvbmcpID0gYXR0cmlidXRlc1swOjNdCi0gICAgICBpZiBpc19zdHJvbmcgYW5kIHByb3BlcnR5IGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICAgIGlmIG5vdCBpc19saXN0OgotICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChzZWxmLl9wcm9wZXJ0aWVzW3Byb3BlcnR5XSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBjaGlsZHJlbi5leHRlbmQoc2VsZi5fcHJvcGVydGllc1twcm9wZXJ0eV0pCi0gICAgcmV0dXJuIGNoaWxkcmVuCi0KLSAgZGVmIERlc2NlbmRhbnRzKHNlbGYpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGFsbCBvZiB0aGlzIG9iamVjdCdzIGRlc2NlbmRhbnRzLCBpbmNsdWRpbmcgdGhpcwotICAgIG9iamVjdC4KLSAgICAiIiIKLQotICAgIGNoaWxkcmVuID0gc2VsZi5DaGlsZHJlbigpCi0gICAgZGVzY2VuZGFudHMgPSBbc2VsZl0KLSAgICBmb3IgY2hpbGQgaW4gY2hpbGRyZW46Ci0gICAgICBkZXNjZW5kYW50cy5leHRlbmQoY2hpbGQuRGVzY2VuZGFudHMoKSkKLSAgICByZXR1cm4gZGVzY2VuZGFudHMKLQotICBkZWYgUEJYUHJvamVjdEFuY2VzdG9yKHNlbGYpOgotICAgICMgVGhlIGJhc2UgY2FzZSBmb3IgcmVjdXJzaW9uIGlzIGRlZmluZWQgYXQgUEJYUHJvamVjdC5QQlhQcm9qZWN0QW5jZXN0b3IuCi0gICAgaWYgc2VsZi5wYXJlbnQ6Ci0gICAgICByZXR1cm4gc2VsZi5wYXJlbnQuUEJYUHJvamVjdEFuY2VzdG9yKCkKLSAgICByZXR1cm4gTm9uZQotCi0gIGRlZiBfRW5jb2RlQ29tbWVudChzZWxmLCBjb21tZW50KToKLSAgICAiIiJFbmNvZGVzIGEgY29tbWVudCB0byBiZSBwbGFjZWQgaW4gdGhlIHByb2plY3QgZmlsZSBvdXRwdXQsIG1pbWljaW5nCi0gICAgWGNvZGUgYmVoYXZpb3IuCi0gICAgIiIiCi0KLSAgICAjIFRoaXMgbWltaWNzIFhjb2RlIGJlaGF2aW9yIGJ5IHdyYXBwaW5nIHRoZSBjb21tZW50IGluICIvKiIgYW5kICIqLyIuICBJZgotICAgICMgdGhlIHN0cmluZyBhbHJlYWR5IGNvbnRhaW5zIGEgIiovIiwgaXQgaXMgdHVybmVkIGludG8gIigqKS8iLiAgVGhpcyBrZWVwcwotICAgICMgdGhlIGZpbGUgd3JpdGVyIGZyb20gb3V0cHV0dGluZyBzb21ldGhpbmcgdGhhdCB3b3VsZCBiZSB0cmVhdGVkIGFzIHRoZQotICAgICMgZW5kIG9mIGEgY29tbWVudCBpbiB0aGUgbWlkZGxlIG9mIHNvbWV0aGluZyBpbnRlbmRlZCB0byBiZSBlbnRpcmVseSBhCi0gICAgIyBjb21tZW50LgotCi0gICAgcmV0dXJuICcvKiAnICsgY29tbWVudC5yZXBsYWNlKCcqLycsICcoKikvJykgKyAnICovJwotCi0gIGRlZiBfRW5jb2RlVHJhbnNmb3JtKHNlbGYsIG1hdGNoKToKLSAgICAjIFRoaXMgZnVuY3Rpb24gd29ya3MgY2xvc2VseSB3aXRoIF9FbmNvZGVTdHJpbmcuICBJdCB3aWxsIG9ubHkgYmUgY2FsbGVkCi0gICAgIyBieSByZS5zdWIgd2l0aCBtYXRjaC5ncm91cCgwKSBjb250YWluaW5nIGEgY2hhcmFjdGVyIG1hdGNoZWQgYnkgdGhlCi0gICAgIyB0aGUgX2VzY2FwZWQgZXhwcmVzc2lvbi4KLSAgICBjaGFyID0gbWF0Y2guZ3JvdXAoMCkKLQotICAgICMgQmFja3NsYXNoZXMgKFwpIGFuZCBxdW90YXRpb24gbWFya3MgKCIpIGFyZSBhbHdheXMgcmVwbGFjZWQgd2l0aCBhCi0gICAgIyBiYWNrc2xhc2gtZXNjYXBlZCB2ZXJzaW9uIG9mIHRoZSBzYW1lLiAgRXZlcnl0aGluZyBlbHNlIGdldHMgaXRzCi0gICAgIyByZXBsYWNlbWVudCBmcm9tIHRoZSBjbGFzcycgX2VuY29kZV90cmFuc2Zvcm1zIGFycmF5LgotICAgIGlmIGNoYXIgPT0gJ1xcJzoKLSAgICAgIHJldHVybiAnXFxcXCcKLSAgICBpZiBjaGFyID09ICciJzoKLSAgICAgIHJldHVybiAnXFwiJwotICAgIHJldHVybiBzZWxmLl9lbmNvZGVfdHJhbnNmb3Jtc1tvcmQoY2hhcildCi0KLSAgZGVmIF9FbmNvZGVTdHJpbmcoc2VsZiwgdmFsdWUpOgotICAgICIiIkVuY29kZXMgYSBzdHJpbmcgdG8gYmUgcGxhY2VkIGluIHRoZSBwcm9qZWN0IGZpbGUgb3V0cHV0LCBtaW1pY2luZwotICAgIFhjb2RlIGJlaGF2aW9yLgotICAgICIiIgotCi0gICAgIyBVc2UgcXVvdGF0aW9uIG1hcmtzIHdoZW4gYW55IGNoYXJhY3RlciBvdXRzaWRlIG9mIHRoZSByYW5nZSBBLVosIGEteiwgMC05LAotICAgICMgJCAoZG9sbGFyIHNpZ24pLCAuIChwZXJpb2QpLCBhbmQgXyAodW5kZXJzY29yZSkgaXMgcHJlc2VudC4gIEFsc28gdXNlCi0gICAgIyBxdW90YXRpb24gbWFya3MgdG8gcmVwcmVzZW50IGVtcHR5IHN0cmluZ3MuCi0gICAgIwotICAgICMgRXNjYXBlICIgKGRvdWJsZS1xdW90ZSkgYW5kIFwgKGJhY2tzbGFzaCkgYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBhCi0gICAgIyBiYWNrc2xhc2guCi0gICAgIwotICAgICMgU29tZSBjaGFyYWN0ZXJzIGJlbG93IHRoZSBwcmludGFibGUgQVNDSUkgcmFuZ2UgYXJlIGVuY29kZWQgc3BlY2lhbGx5OgotICAgICMgICAgIDcgXkcgQkVMIGlzIGVuY29kZWQgYXMgIlxhIgotICAgICMgICAgIDggXkggQlMgIGlzIGVuY29kZWQgYXMgIlxiIgotICAgICMgICAgMTEgXksgVlQgIGlzIGVuY29kZWQgYXMgIlx2IgotICAgICMgICAgMTIgXkwgTlAgIGlzIGVuY29kZWQgYXMgIlxmIgotICAgICMgICAxMjcgXj8gREVMIGlzIHBhc3NlZCB0aHJvdWdoIGFzLWlzIHdpdGhvdXQgZXNjYXBpbmcKLSAgICAjICAtIEluIFBCWEZpbGVSZWZlcmVuY2UgYW5kIFBCWEJ1aWxkRmlsZSBvYmplY3RzOgotICAgICMgICAgIDkgXkkgSFQgIGlzIHBhc3NlZCB0aHJvdWdoIGFzLWlzIHdpdGhvdXQgZXNjYXBpbmcKLSAgICAjICAgIDEwIF5KIE5MICBpcyBwYXNzZWQgdGhyb3VnaCBhcy1pcyB3aXRob3V0IGVzY2FwaW5nCi0gICAgIyAgICAxMyBeTSBDUiAgaXMgcGFzc2VkIHRocm91Z2ggYXMtaXMgd2l0aG91dCBlc2NhcGluZwotICAgICMgIC0gSW4gb3RoZXIgb2JqZWN0czoKLSAgICAjICAgICA5IF5JIEhUICBpcyBlbmNvZGVkIGFzICJcdCIKLSAgICAjICAgIDEwIF5KIE5MICBpcyBlbmNvZGVkIGFzICJcbiIKLSAgICAjICAgIDEzIF5NIENSICBpcyBlbmNvZGVkIGFzICJcbiIgcmVuZGVyaW5nIGl0IGluZGlzdGluZ3Vpc2hhYmxlIGZyb20KLSAgICAjICAgICAgICAgICAgICAxMCBeSiBOTAotICAgICMgQWxsIG90aGVyIG5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIHdpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKDAgdGhyb3VnaCAxMjcKLSAgICAjIGluY2x1c2l2ZSkgYXJlIGVuY29kZWQgYXMgIlxVMDAxZiIgcmVmZXJyaW5nIHRvIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgaW4KLSAgICAjIGhleGFkZWNpbWFsLiAgRm9yIGV4YW1wbGUsIGNoYXJhY3RlciAxNCAoXk4gU08pIGlzIGVuY29kZWQgYXMgIlxVMDAwZSIuCi0gICAgIyBDaGFyYWN0ZXJzIGFib3ZlIHRoZSBBU0NJSSByYW5nZSBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG91dHB1dCBlbmNvZGVkCi0gICAgIyBhcyBVVEYtOCB3aXRob3V0IGFueSBlc2NhcGluZy4gIFRoZXNlIG1hcHBpbmdzIGFyZSBjb250YWluZWQgaW4gdGhlCi0gICAgIyBjbGFzcycgX2VuY29kZV90cmFuc2Zvcm1zIGxpc3QuCi0KLSAgICBpZiBfdW5xdW90ZWQuc2VhcmNoKHZhbHVlKSBhbmQgbm90IF9xdW90ZWQuc2VhcmNoKHZhbHVlKToKLSAgICAgIHJldHVybiB2YWx1ZQotCi0gICAgcmV0dXJuICciJyArIF9lc2NhcGVkLnN1YihzZWxmLl9FbmNvZGVUcmFuc2Zvcm0sIHZhbHVlKSArICciJwotCi0gIGRlZiBfWENQcmludChzZWxmLCBmaWxlLCB0YWJzLCBsaW5lKToKLSAgICBmaWxlLndyaXRlKCdcdCcgKiB0YWJzICsgbGluZSkKLQotICBkZWYgX1hDUHJpbnRhYmxlVmFsdWUoc2VsZiwgdGFicywgdmFsdWUsIGZsYXR0ZW5fbGlzdD1GYWxzZSk6Ci0gICAgIiIiUmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlIHRoYXQgbWF5IGJlIHByaW50ZWQgaW4gYSBwcm9qZWN0IGZpbGUsCi0gICAgbWltaWNpbmcgWGNvZGUncyBiZWhhdmlvci4KLQotICAgIF9YQ1ByaW50YWJsZVZhbHVlIGNhbiBoYW5kbGUgc3RyIGFuZCBpbnQgdmFsdWVzLCBYQ09iamVjdHMgKHdoaWNoIGFyZQotICAgIG1hZGUgcHJpbnRhYmxlIGJ5IHJldHVybmluZyB0aGVpciBpZCBwcm9wZXJ0eSksIGFuZCBsaXN0IGFuZCBkaWN0IG9iamVjdHMKLSAgICBjb21wb3NlZCBvZiBhbnkgb2YgdGhlIGFib3ZlIHR5cGVzLiAgV2hlbiBwcmludGluZyBhIGxpc3Qgb3IgZGljdCwgYW5kCi0gICAgX3Nob3VsZF9wcmludF9zaW5nbGVfbGluZSBpcyBGYWxzZSwgdGhlIHRhYnMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCi0gICAgaG93IG11Y2ggdG8gaW5kZW50IHRoZSBsaW5lcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBvcgotICAgIGRpY3QuCi0KLSAgICBJZiBmbGF0dGVuX2xpc3QgaXMgVHJ1ZSwgc2luZ2xlLWVsZW1lbnQgbGlzdHMgd2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvCi0gICAgc3RyaW5ncy4KLSAgICAiIiIKLQotICAgIHByaW50YWJsZSA9ICcnCi0gICAgY29tbWVudCA9IE5vbmUKLQotICAgIGlmIHNlbGYuX3Nob3VsZF9wcmludF9zaW5nbGVfbGluZToKLSAgICAgIHNlcCA9ICcgJwotICAgICAgZWxlbWVudF90YWJzID0gJycKLSAgICAgIGVuZF90YWJzID0gJycKLSAgICBlbHNlOgotICAgICAgc2VwID0gJ1xuJwotICAgICAgZWxlbWVudF90YWJzID0gJ1x0JyAqICh0YWJzICsgMSkKLSAgICAgIGVuZF90YWJzID0gJ1x0JyAqIHRhYnMKLQotICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFhDT2JqZWN0KToKLSAgICAgIHByaW50YWJsZSArPSB2YWx1ZS5pZAotICAgICAgY29tbWVudCA9IHZhbHVlLkNvbW1lbnQoKQotICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgIHByaW50YWJsZSArPSBzZWxmLl9FbmNvZGVTdHJpbmcodmFsdWUpCi0gICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKToKLSAgICAgIHByaW50YWJsZSArPSBzZWxmLl9FbmNvZGVTdHJpbmcodmFsdWUuZW5jb2RlKCd1dGYtOCcpKQotICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgIHByaW50YWJsZSArPSBzdHIodmFsdWUpCi0gICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKLSAgICAgIGlmIGZsYXR0ZW5fbGlzdCBhbmQgbGVuKHZhbHVlKSA8PSAxOgotICAgICAgICBpZiBsZW4odmFsdWUpID09IDA6Ci0gICAgICAgICAgcHJpbnRhYmxlICs9IHNlbGYuX0VuY29kZVN0cmluZygnJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBwcmludGFibGUgKz0gc2VsZi5fRW5jb2RlU3RyaW5nKHZhbHVlWzBdKQotICAgICAgZWxzZToKLSAgICAgICAgcHJpbnRhYmxlID0gJygnICsgc2VwCi0gICAgICAgIGZvciBpdGVtIGluIHZhbHVlOgotICAgICAgICAgIHByaW50YWJsZSArPSBlbGVtZW50X3RhYnMgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX1hDUHJpbnRhYmxlVmFsdWUodGFicyArIDEsIGl0ZW0sIGZsYXR0ZW5fbGlzdCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICcsJyArIHNlcAotICAgICAgICBwcmludGFibGUgKz0gZW5kX3RhYnMgKyAnKScKLSAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgotICAgICAgcHJpbnRhYmxlID0gJ3snICsgc2VwCi0gICAgICBmb3IgaXRlbV9rZXksIGl0ZW1fdmFsdWUgaW4gc29ydGVkKHZhbHVlLml0ZXJpdGVtcygpKToKLSAgICAgICAgcHJpbnRhYmxlICs9IGVsZW1lbnRfdGFicyArIFwKLSAgICAgICAgICAgIHNlbGYuX1hDUHJpbnRhYmxlVmFsdWUodGFicyArIDEsIGl0ZW1fa2V5LCBmbGF0dGVuX2xpc3QpICsgJyA9ICcgKyBcCi0gICAgICAgICAgICBzZWxmLl9YQ1ByaW50YWJsZVZhbHVlKHRhYnMgKyAxLCBpdGVtX3ZhbHVlLCBmbGF0dGVuX2xpc3QpICsgJzsnICsgXAotICAgICAgICAgICAgc2VwCi0gICAgICBwcmludGFibGUgKz0gZW5kX3RhYnMgKyAnfScKLSAgICBlbHNlOgotICAgICAgcmFpc2UgVHlwZUVycm9yLCAiQ2FuJ3QgbWFrZSAiICsgdmFsdWUuX19jbGFzc19fLl9fbmFtZV9fICsgJyBwcmludGFibGUnCi0KLSAgICBpZiBjb21tZW50ICE9IE5vbmU6Ci0gICAgICBwcmludGFibGUgKz0gJyAnICsgc2VsZi5fRW5jb2RlQ29tbWVudChjb21tZW50KQotCi0gICAgcmV0dXJuIHByaW50YWJsZQotCi0gIGRlZiBfWENLVlByaW50KHNlbGYsIGZpbGUsIHRhYnMsIGtleSwgdmFsdWUpOgotICAgICIiIlByaW50cyBhIGtleSBhbmQgdmFsdWUsIG1lbWJlcnMgb2YgYW4gWENPYmplY3QncyBfcHJvcGVydGllcyBkaWN0aW9uYXJ5LAotICAgIHRvIGZpbGUuCi0KLSAgICB0YWJzIGlzIGFuIGludCBpZGVudGlmeWluZyB0aGUgaW5kZW50YXRpb24gbGV2ZWwuICBJZiB0aGUgY2xhc3MnCi0gICAgX3Nob3VsZF9wcmludF9zaW5nbGVfbGluZSB2YXJpYWJsZSBpcyBUcnVlLCB0YWJzIGlzIGlnbm9yZWQgYW5kIHRoZQotICAgIGtleS12YWx1ZSBwYWlyIHdpbGwgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZSBpbnNlYWQgb2YgYSBuZXdsaW5lLgotICAgICIiIgotCi0gICAgaWYgc2VsZi5fc2hvdWxkX3ByaW50X3NpbmdsZV9saW5lOgotICAgICAgcHJpbnRhYmxlID0gJycKLSAgICAgIGFmdGVyX2t2ID0gJyAnCi0gICAgZWxzZToKLSAgICAgIHByaW50YWJsZSA9ICdcdCcgKiB0YWJzCi0gICAgICBhZnRlcl9rdiA9ICdcbicKLQotICAgICMgWGNvZGUgdXN1YWxseSBwcmludHMgcmVtb3RlR2xvYmFsSURTdHJpbmcgdmFsdWVzIGluIFBCWENvbnRhaW5lckl0ZW1Qcm94eQotICAgICMgb2JqZWN0cyB3aXRob3V0IGNvbW1lbnRzLiAgU29tZXRpbWVzIGl0IHByaW50cyB0aGVtIHdpdGggY29tbWVudHMsIGJ1dAotICAgICMgdGhlIG1ham9yaXR5IG9mIHRoZSB0aW1lLCBpdCBkb2Vzbid0LiAgVG8gYXZvaWQgdW5uZWNlc3NhcnkgY2hhbmdlcyB0bwotICAgICMgdGhlIHByb2plY3QgZmlsZSBhZnRlciBYY29kZSBvcGVucyBpdCwgZG9uJ3Qgd3JpdGUgY29tbWVudHMgZm9yCi0gICAgIyByZW1vdGVHbG9iYWxJRFN0cmluZy4gIFRoaXMgaXMgYSBzdWNreSBoYWNrIGFuZCBpdCB3b3VsZCBjZXJ0YWlubHkgYmUKLSAgICAjIGNsZWFuZXIgdG8gZXh0ZW5kIHRoZSBzY2hlbWEgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYSBjb21tZW50IHNob3VsZAotICAgICMgYmUgcHJpbnRlZCwgYnV0IHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGUgcHJvYmxlbSBvY2N1cnMgYW5kCi0gICAgIyBYY29kZSBpdHNlbGYgY2FuJ3Qgc2VlbSB0byBtYWtlIHVwIGl0cyBtaW5kLCB0aGUgaGFjayB3aWxsIHN1ZmZpY2UuCi0gICAgIwotICAgICMgQWxzbyBzZWUgUEJYQ29udGFpbmVySXRlbVByb3h5Ll9zY2hlbWFbJ3JlbW90ZUdsb2JhbElEU3RyaW5nJ10uCi0gICAgaWYga2V5ID09ICdyZW1vdGVHbG9iYWxJRFN0cmluZycgYW5kIGlzaW5zdGFuY2Uoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQlhDb250YWluZXJJdGVtUHJveHkpOgotICAgICAgdmFsdWVfdG9fcHJpbnQgPSB2YWx1ZS5pZAotICAgIGVsc2U6Ci0gICAgICB2YWx1ZV90b19wcmludCA9IHZhbHVlCi0KLSAgICAjIFBCWEJ1aWxkRmlsZSdzIHNldHRpbmdzIHByb3BlcnR5IGlzIHJlcHJlc2VudGVkIGluIHRoZSBvdXRwdXQgYXMgYSBkaWN0LAotICAgICMgYnV0IGEgaGFjayBoZXJlIGhhcyBpdCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy4gQXJyYW5nZSB0byBzdHJpcCBvZmYgdGhlCi0gICAgIyBxdW90ZXMgc28gdGhhdCBpdCBzaG93cyB1cCBpbiB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgotICAgIGlmIGtleSA9PSAnc2V0dGluZ3MnIGFuZCBpc2luc3RhbmNlKHNlbGYsIFBCWEJ1aWxkRmlsZSk6Ci0gICAgICBzdHJpcF92YWx1ZV9xdW90ZXMgPSBUcnVlCi0gICAgZWxzZToKLSAgICAgIHN0cmlwX3ZhbHVlX3F1b3RlcyA9IEZhbHNlCi0KLSAgICAjIEluIGFub3RoZXIgb25lLW9mZiwgbGV0J3Mgc2V0IGZsYXR0ZW5fbGlzdCBvbiBidWlsZFNldHRpbmdzIHByb3BlcnRpZXMKLSAgICAjIG9mIFhDQnVpbGRDb25maWd1cmF0aW9uIG9iamVjdHMsIGJlY2F1c2UgdGhhdCdzIGhvdyBYY29kZSB0cmVhdHMgdGhlbS4KLSAgICBpZiBrZXkgPT0gJ2J1aWxkU2V0dGluZ3MnIGFuZCBpc2luc3RhbmNlKHNlbGYsIFhDQnVpbGRDb25maWd1cmF0aW9uKToKLSAgICAgIGZsYXR0ZW5fbGlzdCA9IFRydWUKLSAgICBlbHNlOgotICAgICAgZmxhdHRlbl9saXN0ID0gRmFsc2UKLQotICAgIHRyeToKLSAgICAgIHByaW50YWJsZV9rZXkgPSBzZWxmLl9YQ1ByaW50YWJsZVZhbHVlKHRhYnMsIGtleSwgZmxhdHRlbl9saXN0KQotICAgICAgcHJpbnRhYmxlX3ZhbHVlID0gc2VsZi5fWENQcmludGFibGVWYWx1ZSh0YWJzLCB2YWx1ZV90b19wcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbl9saXN0KQotICAgICAgaWYgc3RyaXBfdmFsdWVfcXVvdGVzIGFuZCBsZW4ocHJpbnRhYmxlX3ZhbHVlKSA+IDEgYW5kIFwKLSAgICAgICAgICBwcmludGFibGVfdmFsdWVbMF0gPT0gJyInIGFuZCBwcmludGFibGVfdmFsdWVbLTFdID09ICciJzoKLSAgICAgICAgcHJpbnRhYmxlX3ZhbHVlID0gcHJpbnRhYmxlX3ZhbHVlWzE6LTFdCi0gICAgICBwcmludGFibGUgKz0gcHJpbnRhYmxlX2tleSArICcgPSAnICsgcHJpbnRhYmxlX3ZhbHVlICsgJzsnICsgYWZ0ZXJfa3YKLSAgICBleGNlcHQgVHlwZUVycm9yLCBlOgotICAgICAgZ3lwLmNvbW1vbi5FeGNlcHRpb25BcHBlbmQoZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGlsZSBwcmludGluZyBrZXkgIiVzIicgJSBrZXkpCi0gICAgICByYWlzZQotCi0gICAgc2VsZi5fWENQcmludChmaWxlLCAwLCBwcmludGFibGUpCi0KLSAgZGVmIFByaW50KHNlbGYsIGZpbGU9c3lzLnN0ZG91dCk6Ci0gICAgIiIiUHJpbnRzIGEgcmVwcmVudGF0aW9uIG9mIHRoaXMgb2JqZWN0IHRvIGZpbGUsIGFkaGVyaW5nIHRvIFhjb2RlIG91dHB1dAotICAgIGZvcm1hdHRpbmcuCi0gICAgIiIiCi0KLSAgICBzZWxmLlZlcmlmeUhhc1JlcXVpcmVkUHJvcGVydGllcygpCi0KLSAgICBpZiBzZWxmLl9zaG91bGRfcHJpbnRfc2luZ2xlX2xpbmU6Ci0gICAgICAjIFdoZW4gcHJpbnRpbmcgYW4gb2JqZWN0IGluIGEgc2luZ2xlIGxpbmUsIFhjb2RlIGRvZXNuJ3QgcHV0IGFueSBzcGFjZQotICAgICAgIyBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgYSBkaWN0aW9uYXJ5IChvciBwcmVzdW1hYmx5IGEgbGlzdCkgYW5kIHRoZQotICAgICAgIyBmaXJzdCBjb250YWluZWQgaXRlbSwgc28geW91IHdpbmQgdXAgd2l0aCBzbmlwcGV0cyBsaWtlCi0gICAgICAjICAgLi4uQ0RFRiA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlUmVmID0gMDEyMy4uLgotICAgICAgIyBJZiBpdCB3ZXJlIG1lLCBJIHdvdWxkIGhhdmUgcHV0IGEgc3BhY2UgaW4gdGhlcmUgYWZ0ZXIgdGhlIG9wZW5pbmcKLSAgICAgICMgY3VybHksIGJ1dCBJIGd1ZXNzIHRoaXMgaXMganVzdCBhbm90aGVyIG9uZSBvZiB0aG9zZSBpbmNvbnNpc3RlbmNpZXMKLSAgICAgICMgYmV0d2VlbiBob3cgWGNvZGUgcHJpbnRzIFBCWEZpbGVSZWZlcmVuY2UgYW5kIFBCWEJ1aWxkRmlsZSBvYmplY3RzIGFzCi0gICAgICAjIGNvbXBhcmVkIHRvIG90aGVyIG9iamVjdHMuICBNaW1pYyBYY29kZSdzIGJlaGF2aW9yIGhlcmUgYnkgdXNpbmcgYW4KLSAgICAgICMgZW1wdHkgc3RyaW5nIGZvciBzZXAuCi0gICAgICBzZXAgPSAnJwotICAgICAgZW5kX3RhYnMgPSAwCi0gICAgZWxzZToKLSAgICAgIHNlcCA9ICdcbicKLSAgICAgIGVuZF90YWJzID0gMgotCi0gICAgIyBTdGFydCB0aGUgb2JqZWN0LiAgRm9yIGV4YW1wbGUsICdcdFx0UEJYUHJvamVjdCA9IHtcbicuCi0gICAgc2VsZi5fWENQcmludChmaWxlLCAyLCBzZWxmLl9YQ1ByaW50YWJsZVZhbHVlKDIsIHNlbGYpICsgJyA9IHsnICsgc2VwKQotCi0gICAgIyAiaXNhIiBpc24ndCBpbiB0aGUgX3Byb3BlcnRpZXMgZGljdGlvbmFyeSwgaXQncyBhbiBpbnRyaW5zaWMgcHJvcGVydHkKLSAgICAjIG9mIHRoZSBjbGFzcyB3aGljaCB0aGUgb2JqZWN0IGJlbG9uZ3MgdG8uICBYY29kZSBhbHdheXMgb3V0cHV0cyAiaXNhIgotICAgICMgYXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gb2JqZWN0IGRpY3Rpb25hcnkuCi0gICAgc2VsZi5fWENLVlByaW50KGZpbGUsIDMsICdpc2EnLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKLQotICAgICMgVGhlIHJlbWFpbmluZyBlbGVtZW50cyBvZiBhbiBvYmplY3QgZGljdGlvbmFyeSBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LgotICAgIGZvciBwcm9wZXJ0eSwgdmFsdWUgaW4gc29ydGVkKHNlbGYuX3Byb3BlcnRpZXMuaXRlcml0ZW1zKCkpOgotICAgICAgc2VsZi5fWENLVlByaW50KGZpbGUsIDMsIHByb3BlcnR5LCB2YWx1ZSkKLQotICAgICMgRW5kIHRoZSBvYmplY3QuCi0gICAgc2VsZi5fWENQcmludChmaWxlLCBlbmRfdGFicywgJ307XG4nKQotCi0gIGRlZiBVcGRhdGVQcm9wZXJ0aWVzKHNlbGYsIHByb3BlcnRpZXMsIGRvX2NvcHk9RmFsc2UpOgotICAgICIiIk1lcmdlIHRoZSBzdXBwbGllZCBwcm9wZXJ0aWVzIGludG8gdGhlIF9wcm9wZXJ0aWVzIGRpY3Rpb25hcnkuCi0KLSAgICBUaGUgaW5wdXQgcHJvcGVydGllcyBtdXN0IGFkaGVyZSB0byB0aGUgY2xhc3Mgc2NoZW1hIG9yIGEgS2V5RXJyb3Igb3IKLSAgICBUeXBlRXJyb3IgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiAgSWYgYWRkaW5nIGFuIG9iamVjdCBvZiBhbiBYQ09iamVjdAotICAgIHN1YmNsYXNzIGFuZCB0aGUgc2NoZW1hIGluZGljYXRlcyBhIHN0cm9uZyByZWxhdGlvbnNoaXAsIHRoZSBvYmplY3QncwotICAgIHBhcmVudCB3aWxsIGJlIHNldCB0byB0aGlzIG9iamVjdC4KLQotICAgIElmIGRvX2NvcHkgaXMgVHJ1ZSwgdGhlbiBsaXN0cywgZGljdHMsIHN0cm9uZy1vd25lZCBYQ09iamVjdHMsIGFuZAotICAgIHN0cm9uZy1vd25lZCBYQ09iamVjdHMgaW4gbGlzdHMgd2lsbCBiZSBjb3BpZWQgaW5zdGVhZCBvZiBoYXZpbmcgdGhlaXIKLSAgICByZWZlcmVuY2VzIGFkZGVkLgotICAgICIiIgotCi0gICAgaWYgcHJvcGVydGllcyBpcyBOb25lOgotICAgICAgcmV0dXJuCi0KLSAgICBmb3IgcHJvcGVydHksIHZhbHVlIGluIHByb3BlcnRpZXMuaXRlcml0ZW1zKCk6Ci0gICAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVydHkgaXMgaW4gdGhlIHNjaGVtYS4KLSAgICAgIGlmIG5vdCBwcm9wZXJ0eSBpbiBzZWxmLl9zY2hlbWE6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yLCBwcm9wZXJ0eSArICcgbm90IGluICcgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVydHkgY29uZm9ybXMgdG8gdGhlIHNjaGVtYS4KLSAgICAgIChpc19saXN0LCBwcm9wZXJ0eV90eXBlLCBpc19zdHJvbmcpID0gc2VsZi5fc2NoZW1hW3Byb3BlcnR5XVswOjNdCi0gICAgICBpZiBpc19saXN0OgotICAgICAgICBpZiB2YWx1ZS5fX2NsYXNzX18gIT0gbGlzdDoKLSAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSArICcgb2YgJyArIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgXAotICAgICAgICAgICAgICAgICcgbXVzdCBiZSBsaXN0LCBub3QgJyArIHZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXwotICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZToKLSAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBwcm9wZXJ0eV90eXBlKSBhbmQgXAotICAgICAgICAgICAgIG5vdCAoaXRlbS5fX2NsYXNzX18gPT0gdW5pY29kZSBhbmQgcHJvcGVydHlfdHlwZSA9PSBzdHIpOgotICAgICAgICAgICAgIyBBY2NlcHQgdW5pY29kZSB3aGVyZSBzdHIgaXMgc3BlY2lmaWVkLiAgc3RyIGlzIHRyZWF0ZWQgYXMKLSAgICAgICAgICAgICMgVVRGLTgtZW5jb2RlZC4KLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgJ2l0ZW0gb2YgJyArIHByb3BlcnR5ICsgJyBvZiAnICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyBcCi0gICAgICAgICAgICAgICAgICAnIG11c3QgYmUgJyArIHByb3BlcnR5X3R5cGUuX19uYW1lX18gKyAnLCBub3QgJyArIFwKLSAgICAgICAgICAgICAgICAgIGl0ZW0uX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBwcm9wZXJ0eV90eXBlKSBhbmQgXAotICAgICAgICAgICBub3QgKHZhbHVlLl9fY2xhc3NfXyA9PSB1bmljb2RlIGFuZCBwcm9wZXJ0eV90eXBlID09IHN0cik6Ci0gICAgICAgICMgQWNjZXB0IHVuaWNvZGUgd2hlcmUgc3RyIGlzIHNwZWNpZmllZC4gIHN0ciBpcyB0cmVhdGVkIGFzCi0gICAgICAgICMgVVRGLTgtZW5jb2RlZC4KLSAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCi0gICAgICAgICAgICAgIHByb3BlcnR5ICsgJyBvZiAnICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnIG11c3QgYmUgJyArIFwKLSAgICAgICAgICAgICAgcHJvcGVydHlfdHlwZS5fX25hbWVfXyArICcsIG5vdCAnICsgdmFsdWUuX19jbGFzc19fLl9fbmFtZV9fCi0KLSAgICAgICMgQ2hlY2tzIHBhc3NlZCwgcGVyZm9ybSB0aGUgYXNzaWdubWVudC4KLSAgICAgIGlmIGRvX2NvcHk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFhDT2JqZWN0KToKLSAgICAgICAgICBpZiBpc19zdHJvbmc6Ci0gICAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlLkNvcHkoKQotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSBvciBpc2luc3RhbmNlKHZhbHVlLCB1bmljb2RlKSBvciBcCi0gICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzW3Byb3BlcnR5XSA9IHZhbHVlCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6Ci0gICAgICAgICAgaWYgaXNfc3Ryb25nOgotICAgICAgICAgICAgIyBJZiBpc19zdHJvbmcgaXMgVHJ1ZSwgZWFjaCBlbGVtZW50IGlzIGFuIFhDT2JqZWN0LCBzbyBpdCdzIHNhZmUKLSAgICAgICAgICAgICMgdG8gY2FsbCBDb3B5LgotICAgICAgICAgICAgc2VsZi5fcHJvcGVydGllc1twcm9wZXJ0eV0gPSBbXQotICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWU6Ci0gICAgICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbcHJvcGVydHldLmFwcGVuZChpdGVtLkNvcHkoKSkKLSAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJvcGVydGllc1twcm9wZXJ0eV0gPSB2YWx1ZVs6XQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgotICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWUuY29weSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiRG9uJ3Qga25vdyBob3cgdG8gY29weSBhICIgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5fX2NsYXNzX18uX19uYW1lX18gKyAnIG9iamVjdCBmb3IgJyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ICsgJyBpbiAnICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgIGVsc2U6Ci0gICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbcHJvcGVydHldID0gdmFsdWUKLQotICAgICAgIyBTZXQgdXAgdGhlIGNoaWxkJ3MgYmFjay1yZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QuICBEb24ndCB1c2UgfHZhbHVlfAotICAgICAgIyBhbnkgbW9yZSBiZWNhdXNlIGl0IG1heSBub3QgYmUgcmlnaHQgaWYgZG9fY29weSBpcyB0cnVlLgotICAgICAgaWYgaXNfc3Ryb25nOgotICAgICAgICBpZiBub3QgaXNfbGlzdDoKLSAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzW3Byb3BlcnR5XS5wYXJlbnQgPSBzZWxmCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5fcHJvcGVydGllc1twcm9wZXJ0eV06Ci0gICAgICAgICAgICBpdGVtLnBhcmVudCA9IHNlbGYKLQotICBkZWYgSGFzUHJvcGVydHkoc2VsZiwga2V5KToKLSAgICByZXR1cm4ga2V5IGluIHNlbGYuX3Byb3BlcnRpZXMKLQotICBkZWYgR2V0UHJvcGVydHkoc2VsZiwga2V5KToKLSAgICByZXR1cm4gc2VsZi5fcHJvcGVydGllc1trZXldCi0KLSAgZGVmIFNldFByb3BlcnR5KHNlbGYsIGtleSwgdmFsdWUpOgotICAgIHNlbGYuVXBkYXRlUHJvcGVydGllcyh7a2V5OiB2YWx1ZX0pCi0KLSAgZGVmIERlbFByb3BlcnR5KHNlbGYsIGtleSk6Ci0gICAgaWYga2V5IGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICBkZWwgc2VsZi5fcHJvcGVydGllc1trZXldCi0KLSAgZGVmIEFwcGVuZFByb3BlcnR5KHNlbGYsIGtleSwgdmFsdWUpOgotICAgICMgVE9ETyhtYXJrKTogU3VwcG9ydCBFeHRlbmRQcm9wZXJ0eSB0b28gKGFuZCBtYWtlIHRoaXMgY2FsbCB0aGF0KT8KLQotICAgICMgU2NoZW1hIHZhbGlkYXRpb24uCi0gICAgaWYgbm90IGtleSBpbiBzZWxmLl9zY2hlbWE6Ci0gICAgICByYWlzZSBLZXlFcnJvciwga2V5ICsgJyBub3QgaW4gJyArIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0KLSAgICAoaXNfbGlzdCwgcHJvcGVydHlfdHlwZSwgaXNfc3Ryb25nKSA9IHNlbGYuX3NjaGVtYVtrZXldWzA6M10KLSAgICBpZiBub3QgaXNfbGlzdDoKLSAgICAgIHJhaXNlIFR5cGVFcnJvciwga2V5ICsgJyBvZiAnICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnIG11c3QgYmUgbGlzdCcKLSAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgcHJvcGVydHlfdHlwZSk6Ci0gICAgICByYWlzZSBUeXBlRXJyb3IsICdpdGVtIG9mICcgKyBrZXkgKyAnIG9mICcgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgJyBtdXN0IGJlICcgKyBwcm9wZXJ0eV90eXBlLl9fbmFtZV9fICsgJywgbm90ICcgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXwotCi0gICAgIyBJZiB0aGUgcHJvcGVydHkgZG9lc24ndCBleGlzdCB5ZXQsIGNyZWF0ZSBhIG5ldyBlbXB0eSBsaXN0IHRvIHJlY2VpdmUgdGhlCi0gICAgIyBpdGVtLgotICAgIGlmIG5vdCBrZXkgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIHNlbGYuX3Byb3BlcnRpZXNba2V5XSA9IFtdCi0KLSAgICAjIFNldCB1cCB0aGUgb3duZXJzaGlwIGxpbmsuCi0gICAgaWYgaXNfc3Ryb25nOgotICAgICAgdmFsdWUucGFyZW50ID0gc2VsZgotCi0gICAgIyBTdG9yZSB0aGUgaXRlbS4KLSAgICBzZWxmLl9wcm9wZXJ0aWVzW2tleV0uYXBwZW5kKHZhbHVlKQotCi0gIGRlZiBWZXJpZnlIYXNSZXF1aXJlZFByb3BlcnRpZXMoc2VsZik6Ci0gICAgIiIiRW5zdXJlIHRoYXQgYWxsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBhcyByZXF1aXJlZCBieSB0aGUgc2NoZW1hIGFyZQotICAgIHNldC4KLSAgICAiIiIKLQotICAgICMgVE9ETyhtYXJrKTogQSBzdHJvbmdlciB2ZXJpZmljYXRpb24gbWVjaGFuaXNtIGlzIG5lZWRlZC4gIFNvbWUKLSAgICAjIHN1YmNsYXNzZXMgbmVlZCB0byBwZXJmb3JtIHZhbGlkYXRpb24gYmV5b25kIHdoYXQgdGhlIHNjaGVtYSBjYW4gZW5mb3JjZS4KLSAgICBmb3IgcHJvcGVydHksIGF0dHJpYnV0ZXMgaW4gc2VsZi5fc2NoZW1hLml0ZXJpdGVtcygpOgotICAgICAgKGlzX2xpc3QsIHByb3BlcnR5X3R5cGUsIGlzX3N0cm9uZywgaXNfcmVxdWlyZWQpID0gYXR0cmlidXRlc1swOjRdCi0gICAgICBpZiBpc19yZXF1aXJlZCBhbmQgbm90IHByb3BlcnR5IGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcgcmVxdWlyZXMgJyArIHByb3BlcnR5Ci0KLSAgZGVmIF9TZXREZWZhdWx0c0Zyb21TY2hlbWEoc2VsZik6Ci0gICAgIiIiQXNzaWduIG9iamVjdCBkZWZhdWx0IHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIHNjaGVtYS4gIFRoaXMgd2lsbCBub3QKLSAgICBvdmVyd3JpdGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNldC4iIiIKLQotICAgIGRlZmF1bHRzID0ge30KLSAgICBmb3IgcHJvcGVydHksIGF0dHJpYnV0ZXMgaW4gc2VsZi5fc2NoZW1hLml0ZXJpdGVtcygpOgotICAgICAgKGlzX2xpc3QsIHByb3BlcnR5X3R5cGUsIGlzX3N0cm9uZywgaXNfcmVxdWlyZWQpID0gYXR0cmlidXRlc1swOjRdCi0gICAgICBpZiBpc19yZXF1aXJlZCBhbmQgbGVuKGF0dHJpYnV0ZXMpID49IDUgYW5kIFwKLSAgICAgICAgICBub3QgcHJvcGVydHkgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgICAgZGVmYXVsdCA9IGF0dHJpYnV0ZXNbNF0KLQotICAgICAgICBkZWZhdWx0c1twcm9wZXJ0eV0gPSBkZWZhdWx0Ci0KLSAgICBpZiBsZW4oZGVmYXVsdHMpID4gMDoKLSAgICAgICMgVXNlIGRvX2NvcHk9VHJ1ZSBzbyB0aGF0IGVhY2ggbmV3IG9iamVjdCBnZXRzIGl0cyBvd24gY29weSBvZiBzdHJvbmcKLSAgICAgICMgb2JqZWN0cywgbGlzdHMsIGFuZCBkaWN0cy4KLSAgICAgIHNlbGYuVXBkYXRlUHJvcGVydGllcyhkZWZhdWx0cywgZG9fY29weT1UcnVlKQotCi0KLWNsYXNzIFhDSGllcmFyY2hpY2FsRWxlbWVudChYQ09iamVjdCk6Ci0gICIiIkFic3RyYWN0IGJhc2UgZm9yIFBCWEdyb3VwIGFuZCBQQlhGaWxlUmVmZXJlbmNlLiAgTm90IHJlcHJlc2VudGVkIGluIGEKLSAgcHJvamVjdCBmaWxlLiIiIgotCi0gICMgVE9ETyhtYXJrKTogRG8gbmFtZSBhbmQgcGF0aCBiZWxvbmcgaGVyZT8gIFByb2JhYmx5IHNvLgotICAjIElmIHBhdGggaXMgc2V0IGFuZCBuYW1lIGlzIG5vdCwgbmFtZSBtYXkgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuICBOYW1lIHdpbGwKLSAgIyBiZSBzZXQgdG8gdGhlIGJhc2VuYW1lIG9mIHBhdGgsIGlmIHRoZSBiYXNlbmFtZSBvZiBwYXRoIGlzIGRpZmZlcmVudCBmcm9tCi0gICMgdGhlIGZ1bGwgdmFsdWUgb2YgcGF0aC4gIElmIHBhdGggaXMgYWxyZWFkeSBqdXN0IGEgbGVhZiBuYW1lLCBuYW1lIHdpbGwKLSAgIyBub3QgYmUgc2V0LgotICBfc2NoZW1hID0gWENPYmplY3QuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICdjb21tZW50cyc6ICAgICAgIFswLCBzdHIsIDAsIDBdLAotICAgICdmaWxlRW5jb2RpbmcnOiAgIFswLCBzdHIsIDAsIDBdLAotICAgICdpbmNsdWRlSW5JbmRleCc6IFswLCBpbnQsIDAsIDBdLAotICAgICdpbmRlbnRXaWR0aCc6ICAgIFswLCBpbnQsIDAsIDBdLAotICAgICdsaW5lRW5kaW5nJzogICAgIFswLCBpbnQsIDAsIDBdLAotICAgICdzb3VyY2VUcmVlJzogICAgIFswLCBzdHIsIDAsIDEsICc8Z3JvdXA+J10sCi0gICAgJ3RhYldpZHRoJzogICAgICAgWzAsIGludCwgMCwgMF0sCi0gICAgJ3VzZXNUYWJzJzogICAgICAgWzAsIGludCwgMCwgMF0sCi0gICAgJ3dyYXBzTGluZXMnOiAgICAgWzAsIGludCwgMCwgMF0sCi0gIH0pCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnRpZXM9Tm9uZSwgaWQ9Tm9uZSwgcGFyZW50PU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ09iamVjdC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotICAgIGlmICdwYXRoJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBub3QgJ25hbWUnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICBwYXRoID0gc2VsZi5fcHJvcGVydGllc1sncGF0aCddCi0gICAgICBuYW1lID0gcG9zaXhwYXRoLmJhc2VuYW1lKHBhdGgpCi0gICAgICBpZiBuYW1lICE9ICcnIGFuZCBwYXRoICE9IG5hbWU6Ci0gICAgICAgIHNlbGYuU2V0UHJvcGVydHkoJ25hbWUnLCBuYW1lKQotCi0gICAgaWYgJ3BhdGgnIGluIHNlbGYuX3Byb3BlcnRpZXMgYW5kIFwKLSAgICAgICAgKG5vdCAnc291cmNlVHJlZScgaW4gc2VsZi5fcHJvcGVydGllcyBvciBcCi0gICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10gPT0gJzxncm91cD4nKToKLSAgICAgICMgSWYgdGhlIHBhdGhuYW1lIGJlZ2lucyB3aXRoIGFuIFhjb2RlIHZhcmlhYmxlIGxpa2UgIiQoU0RLUk9PVCkvIiwgdGFrZQotICAgICAgIyB0aGUgdmFyaWFibGUgb3V0IGFuZCBtYWtlIHRoZSBwYXRoIGJlIHJlbGF0aXZlIHRvIHRoYXQgdmFyaWFibGUgYnkKLSAgICAgICMgYXNzaWduaW5nIHRoZSB2YXJpYWJsZSBuYW1lIGFzIHRoZSBzb3VyY2VUcmVlLgotICAgICAgKHNvdXJjZV90cmVlLCBwYXRoKSA9IFNvdXJjZVRyZWVBbmRQYXRoRnJvbVBhdGgoc2VsZi5fcHJvcGVydGllc1sncGF0aCddKQotICAgICAgaWYgc291cmNlX3RyZWUgIT0gTm9uZToKLSAgICAgICAgc2VsZi5fcHJvcGVydGllc1snc291cmNlVHJlZSddID0gc291cmNlX3RyZWUKLSAgICAgIGlmIHBhdGggIT0gTm9uZToKLSAgICAgICAgc2VsZi5fcHJvcGVydGllc1sncGF0aCddID0gcGF0aAotICAgICAgaWYgc291cmNlX3RyZWUgIT0gTm9uZSBhbmQgcGF0aCBpcyBOb25lIGFuZCBcCi0gICAgICAgICBub3QgJ25hbWUnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICAgICMgVGhlIHBhdGggd2FzIG9mIHRoZSBmb3JtICIkKFNES1JPT1QpIiB3aXRoIG5vIHBhdGggZm9sbG93aW5nIGl0LgotICAgICAgICAjIFRoaXMgb2JqZWN0IGlzIG5vdyByZWxhdGl2ZSB0byB0aGF0IHZhcmlhYmxlLCBzbyBpdCBoYXMgbm8gcGF0aAotICAgICAgICAjIGF0dHJpYnV0ZSBvZiBpdHMgb3duLiAgSXQgZG9lcywgaG93ZXZlciwga2VlcCBhIG5hbWUuCi0gICAgICAgIGRlbCBzZWxmLl9wcm9wZXJ0aWVzWydwYXRoJ10KLSAgICAgICAgc2VsZi5fcHJvcGVydGllc1snbmFtZSddID0gc291cmNlX3RyZWUKLQotICBkZWYgTmFtZShzZWxmKToKLSAgICBpZiAnbmFtZScgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIHJldHVybiBzZWxmLl9wcm9wZXJ0aWVzWyduYW1lJ10KLSAgICBlbGlmICdwYXRoJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXQotICAgIGVsc2U6Ci0gICAgICAjIFRoaXMgaGFwcGVucyBpbiB0aGUgY2FzZSBvZiB0aGUgcm9vdCBQQlhHcm91cC4KLSAgICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEhhc2hhYmxlcyhzZWxmKToKLSAgICAiIiJDdXN0b20gaGFzaGFibGVzIGZvciBYQ0hpZXJhcmNoaWNhbEVsZW1lbnRzLgotCi0gICAgWENIaWVyYXJjaGljYWxFbGVtZW50cyBhcmUgc3BlY2lhbC4gIEdlbmVyYWxseSwgdGhlaXIgaGFzaGVzIHNob3VsZG4ndAotICAgIGNoYW5nZSBpZiB0aGUgcGF0aHMgZG9uJ3QgY2hhbmdlLiAgVGhlIG5vcm1hbCBYQ09iamVjdCBpbXBsZW1lbnRhdGlvbiBvZgotICAgIEhhc2hhYmxlcyBhZGRzIGEgaGFzaGFibGUgZm9yIGVhY2ggb2JqZWN0LCB3aGljaCBtZWFucyB0aGF0IGlmCi0gICAgdGhlIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUgY2hhbmdlcyAocG9zc2libHkgZHVlIHRvIGNoYW5nZXMgY2F1c2VkIHdoZW4KLSAgICBUYWtlT3Zlck9ubHlDaGlsZCBydW5zIGFuZCBlbmNvdW50ZXJzIHNsaWdodCBjaGFuZ2VzIGluIHRoZSBoaWVyYXJjaHkpLAotICAgIHRoZSBoYXNoZXMgd2lsbCBjaGFuZ2UuICBGb3IgZXhhbXBsZSwgaWYgYSBwcm9qZWN0IGZpbGUgaW5pdGlhbGx5IGNvbnRhaW5zCi0gICAgYS9iL2YxIGFuZCBhL2IgYmVjb21lcyBjb2xsYXBzZWQgaW50byBhL2IsIGYxIHdpbGwgaGF2ZSBhIHNpbmdsZSBwYXJlbnQKLSAgICBhL2IuICBJZiBzb21lb25lIGxhdGVyIGFkZHMgYS9mMiB0byB0aGUgcHJvamVjdCBmaWxlLCBhL2IgY2FuIG5vIGxvbmdlciBiZQotICAgIGNvbGxhcHNlZCwgYW5kIGYxIHdpbmRzIHVwIHdpdGggcGFyZW50IGIgYW5kIGdyYW5kcGFyZW50IGEuICBUaGF0IHdvdWxkCi0gICAgYmUgc3VmZmljaWVudCB0byBjaGFuZ2UgZjEncyBoYXNoLgotCi0gICAgVG8gY291bnRlcmFjdCB0aGlzIHByb2JsZW0sIGhhc2hhYmxlcyBmb3IgYWxsIFhDSGllcmFyY2hpY2FsRWxlbWVudHMgZXhjZXB0Ci0gICAgZm9yIHRoZSBtYWluIGdyb3VwICh3aGljaCBoYXMgbmVpdGhlciBhIG5hbWUgbm9yIGEgcGF0aCkgYXJlIHRha2VuIHRvIGJlCi0gICAganVzdCB0aGUgc2V0IG9mIHBhdGggY29tcG9uZW50cy4gIEJlY2F1c2UgaGFzaGFibGVzIGFyZSBpbmhlcml0ZWQgZnJvbQotICAgIHBhcmVudHMsIHRoaXMgcHJvdmlkZXMgYXNzdXJhbmNlIHRoYXQgYS9iL2YxIGhhcyB0aGUgc2FtZSBzZXQgb2YgaGFzaGFibGVzCi0gICAgd2hldGhlciBpdHMgcGFyZW50IGlzIGIgb3IgYS9iLgotCi0gICAgVGhlIG1haW4gZ3JvdXAgaXMgYSBzcGVjaWFsIGNhc2UuICBBcyBpdCBpcyBwZXJtaXR0ZWQgdG8gaGF2ZSBubyBuYW1lIG9yCi0gICAgcGF0aCwgaXQgaXMgcGVybWl0dGVkIHRvIHVzZSB0aGUgc3RhbmRhcmQgWENPYmplY3QgaGFzaCBtZWNoYW5pc20uICBUaGlzCi0gICAgaXMgbm90IGNvbnNpZGVyZWQgYSBwcm9ibGVtIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG9ubHkgb25lIG1haW4gZ3JvdXAuCi0gICAgIiIiCi0KLSAgICBpZiBzZWxmID09IHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuX3Byb3BlcnRpZXNbJ21haW5Hcm91cCddOgotICAgICAgIyBzdXBlcgotICAgICAgcmV0dXJuIFhDT2JqZWN0Lkhhc2hhYmxlcyhzZWxmKQotCi0gICAgaGFzaGFibGVzID0gW10KLQotICAgICMgUHV0IHRoZSBuYW1lIGluIGZpcnN0LCBlbnN1cmluZyB0aGF0IGlmIFRha2VPdmVyT25seUNoaWxkIGNvbGxhcHNlcwotICAgICMgY2hpbGRyZW4gaW50byBhIHRvcC1sZXZlbCBncm91cCBsaWtlICJTb3VyY2UiLCB0aGUgbmFtZSBhbHdheXMgZ29lcwotICAgICMgaW50byB0aGUgbGlzdCBvZiBoYXNoYWJsZXMgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHBhdGggY29tcG9uZW50cy4KLSAgICBpZiAnbmFtZScgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgICMgTWFrZSBpdCBsZXNzIGxpa2VseSBmb3IgcGVvcGxlIHRvIG1hbmlwdWxhdGUgaGFzaGVzIGJ5IGZvbGxvd2luZyB0aGUKLSAgICAgICMgcGF0dGVybiBvZiBhbHdheXMgcHVzaGluZyBhbiBvYmplY3QgdHlwZSB2YWx1ZSBvbnRvIHRoZSBsaXN0IGZpcnN0LgotICAgICAgaGFzaGFibGVzLmFwcGVuZChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcubmFtZScpCi0gICAgICBoYXNoYWJsZXMuYXBwZW5kKHNlbGYuX3Byb3BlcnRpZXNbJ25hbWUnXSkKLQotICAgICMgTk9URTogVGhpcyBzdGlsbCBoYXMgdGhlIHByb2JsZW0gdGhhdCBpZiBhbiBhYnNvbHV0ZSBwYXRoIGlzIGVuY291bnRlcmVkLAotICAgICMgaW5jbHVkaW5nIHBhdGhzIHdpdGggYSBzb3VyY2VUcmVlLCB0aGV5J2xsIHN0aWxsIGluaGVyaXQgdGhlaXIgcGFyZW50cycKLSAgICAjIGhhc2hhYmxlcywgZXZlbiB0aG91Z2ggdGhlIHBhdGhzIGFyZW4ndCByZWxhdGl2ZSB0byB0aGVpciBwYXJlbnRzLiAgVGhpcwotICAgICMgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG11Y2ggb2YgYSBwcm9ibGVtIGluIHByYWN0aWNlLgotICAgIHBhdGggPSBzZWxmLlBhdGhGcm9tU291cmNlVHJlZUFuZFBhdGgoKQotICAgIGlmIHBhdGggIT0gTm9uZToKLSAgICAgIGNvbXBvbmVudHMgPSBwYXRoLnNwbGl0KHBvc2l4cGF0aC5zZXApCi0gICAgICBmb3IgY29tcG9uZW50IGluIGNvbXBvbmVudHM6Ci0gICAgICAgIGhhc2hhYmxlcy5hcHBlbmQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnLnBhdGgnKQotICAgICAgICBoYXNoYWJsZXMuYXBwZW5kKGNvbXBvbmVudCkKLQotICAgIGhhc2hhYmxlcy5leHRlbmQoc2VsZi5faGFzaGFibGVzKQotCi0gICAgcmV0dXJuIGhhc2hhYmxlcwotCi0gIGRlZiBDb21wYXJlKHNlbGYsIG90aGVyKToKLSAgICAjIEFsbG93IGNvbXBhcmlzb24gb2YgdGhlc2UgdHlwZXMuICBQQlhHcm91cCBoYXMgdGhlIGhpZ2hlc3Qgc29ydCByYW5rOwotICAgICMgUEJYVmFyaWFudEdyb3VwIGlzIHRyZWF0ZWQgYXMgZXF1YWwgdG8gUEJYRmlsZVJlZmVyZW5jZS4KLSAgICB2YWxpZF9jbGFzc190eXBlcyA9IHsKLSAgICAgIFBCWEZpbGVSZWZlcmVuY2U6ICdmaWxlJywKLSAgICAgIFBCWEdyb3VwOiAgICAgICAgICdncm91cCcsCi0gICAgICBQQlhWYXJpYW50R3JvdXA6ICAnZmlsZScsCi0gICAgfQotICAgIHNlbGZfdHlwZSA9IHZhbGlkX2NsYXNzX3R5cGVzW3NlbGYuX19jbGFzc19fXQotICAgIG90aGVyX3R5cGUgPSB2YWxpZF9jbGFzc190eXBlc1tvdGhlci5fX2NsYXNzX19dCi0KLSAgICBpZiBzZWxmX3R5cGUgPT0gb3RoZXJfdHlwZToKLSAgICAgICMgSWYgdGhlIHR3byBvYmplY3RzIGFyZSBvZiB0aGUgc2FtZSBzb3J0IHJhbmssIGNvbXBhcmUgdGhlaXIgbmFtZXMuCi0gICAgICByZXR1cm4gY21wKHNlbGYuTmFtZSgpLCBvdGhlci5OYW1lKCkpCi0KLSAgICAjIE90aGVyd2lzZSwgc29ydCBncm91cHMgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZS4KLSAgICBpZiBzZWxmX3R5cGUgPT0gJ2dyb3VwJzoKLSAgICAgIHJldHVybiAtMQotICAgIHJldHVybiAxCi0KLSAgZGVmIENvbXBhcmVSb290R3JvdXAoc2VsZiwgb3RoZXIpOgotICAgICMgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBvbmx5IHRvIGNvbXBhcmUgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZQotICAgICMgY29udGFpbmluZyBQQlhQcm9qZWN0J3MgbWFpbkdyb3VwLiAgVGhlc2UgZ3JvdXBzIHNob3VsZCBhcHBlYXIgaW4gdGhlCi0gICAgIyBsaXN0ZWQgb3JkZXIuCi0gICAgIyBUT0RPKG1hcmspOiAiQnVpbGQiIGlzIHVzZWQgYnkgZ3lwLmdlbmVyYXRvci54Y29kZSwgcGVyaGFwcyB0aGUKLSAgICAjIGdlbmVyYXRvciBzaG91bGQgaGF2ZSBhIHdheSBvZiBpbmZsdWVuY2luZyB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gaGF2aW5nCi0gICAgIyB0byBoYXJkY29kZSBmb3IgdGhlIGdlbmVyYXRvciBoZXJlLgotICAgIG9yZGVyID0gWydTb3VyY2UnLCAnSW50ZXJtZWRpYXRlcycsICdQcm9qZWN0cycsICdGcmFtZXdvcmtzJywgJ1Byb2R1Y3RzJywKLSAgICAgICAgICAgICAnQnVpbGQnXQotCi0gICAgIyBJZiB0aGUgZ3JvdXBzIGFyZW4ndCBpbiB0aGUgbGlzdGVkIG9yZGVyLCBkbyBhIG5hbWUgY29tcGFyaXNvbi4KLSAgICAjIE90aGVyd2lzZSwgZ3JvdXBzIGluIHRoZSBsaXN0ZWQgb3JkZXIgc2hvdWxkIGNvbWUgYmVmb3JlIHRob3NlIHRoYXQKLSAgICAjIGFyZW4ndC4KLSAgICBzZWxmX25hbWUgPSBzZWxmLk5hbWUoKQotICAgIG90aGVyX25hbWUgPSBvdGhlci5OYW1lKCkKLSAgICBzZWxmX2luID0gaXNpbnN0YW5jZShzZWxmLCBQQlhHcm91cCkgYW5kIHNlbGZfbmFtZSBpbiBvcmRlcgotICAgIG90aGVyX2luID0gaXNpbnN0YW5jZShzZWxmLCBQQlhHcm91cCkgYW5kIG90aGVyX25hbWUgaW4gb3JkZXIKLSAgICBpZiBub3Qgc2VsZl9pbiBhbmQgbm90IG90aGVyX2luOgotICAgICAgcmV0dXJuIHNlbGYuQ29tcGFyZShvdGhlcikKLSAgICBpZiBzZWxmX25hbWUgaW4gb3JkZXIgYW5kIG5vdCBvdGhlcl9uYW1lIGluIG9yZGVyOgotICAgICAgcmV0dXJuIC0xCi0gICAgaWYgb3RoZXJfbmFtZSBpbiBvcmRlciBhbmQgbm90IHNlbGZfbmFtZSBpbiBvcmRlcjoKLSAgICAgIHJldHVybiAxCi0KLSAgICAjIElmIGJvdGggZ3JvdXBzIGFyZSBpbiB0aGUgbGlzdGVkIG9yZGVyLCBnbyBieSB0aGUgZGVmaW5lZCBvcmRlci4KLSAgICBzZWxmX2luZGV4ID0gb3JkZXIuaW5kZXgoc2VsZl9uYW1lKQotICAgIG90aGVyX2luZGV4ID0gb3JkZXIuaW5kZXgob3RoZXJfbmFtZSkKLSAgICBpZiBzZWxmX2luZGV4IDwgb3RoZXJfaW5kZXg6Ci0gICAgICByZXR1cm4gLTEKLSAgICBpZiBzZWxmX2luZGV4ID4gb3RoZXJfaW5kZXg6Ci0gICAgICByZXR1cm4gMQotICAgIHJldHVybiAwCi0KLSAgZGVmIFBhdGhGcm9tU291cmNlVHJlZUFuZFBhdGgoc2VsZik6Ci0gICAgIyBUdXJuIHRoZSBvYmplY3QncyBzb3VyY2VUcmVlIGFuZCBwYXRoIHByb3BlcnRpZXMgaW50byBhIHNpbmdsZSBmbGF0Ci0gICAgIyBzdHJpbmcgb2YgYSBmb3JtIGNvbXBhcmFibGUgdG8gdGhlIHBhdGggcGFyYW1ldGVyLiAgSWYgdGhlcmUncyBhCi0gICAgIyBzb3VyY2VUcmVlIHByb3BlcnR5IG90aGVyIHRoYW4gIjxncm91cD4iLCB3cmFwIGl0IGluICQoLi4uKSBmb3IgdGhlCi0gICAgIyBjb21wYXJpc29uLgotICAgIGNvbXBvbmVudHMgPSBbXQotICAgIGlmIHNlbGYuX3Byb3BlcnRpZXNbJ3NvdXJjZVRyZWUnXSAhPSAnPGdyb3VwPic6Ci0gICAgICBjb21wb25lbnRzLmFwcGVuZCgnJCgnICsgc2VsZi5fcHJvcGVydGllc1snc291cmNlVHJlZSddICsgJyknKQotICAgIGlmICdwYXRoJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgY29tcG9uZW50cy5hcHBlbmQoc2VsZi5fcHJvcGVydGllc1sncGF0aCddKQotCi0gICAgaWYgbGVuKGNvbXBvbmVudHMpID4gMDoKLSAgICAgIHJldHVybiBwb3NpeHBhdGguam9pbigqY29tcG9uZW50cykKLQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEZ1bGxQYXRoKHNlbGYpOgotICAgICMgUmV0dXJucyBhIGZ1bGwgcGF0aCB0byBzZWxmIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IGZpbGUsIG9yIHJlbGF0aXZlCi0gICAgIyB0byBzb21lIG90aGVyIHNvdXJjZSB0cmVlLiAgU3RhcnQgd2l0aCBzZWxmLCBhbmQgd2FsayB1cCB0aGUgY2hhaW4gb2YKLSAgICAjIHBhcmVudHMgcHJlcGVuZGluZyB0aGVpciBwYXRocywgaWYgYW55LCB1bnRpbCBubyBtb3JlIHBhcmVudHMgYXJlCi0gICAgIyBhdmFpbGFibGUgKHByb2plY3QtcmVsYXRpdmUgcGF0aCkgb3IgdW50aWwgYSBwYXRoIHJlbGF0aXZlIHRvIHNvbWUKLSAgICAjIHNvdXJjZSB0cmVlIGlzIGZvdW5kLgotICAgIHhjaGUgPSBzZWxmCi0gICAgcGF0aCA9IE5vbmUKLSAgICB3aGlsZSBpc2luc3RhbmNlKHhjaGUsIFhDSGllcmFyY2hpY2FsRWxlbWVudCkgYW5kIFwKLSAgICAgICAgICAocGF0aCBpcyBOb25lIG9yIFwKLSAgICAgICAgICAgKG5vdCBwYXRoLnN0YXJ0c3dpdGgoJy8nKSBhbmQgbm90IHBhdGguc3RhcnRzd2l0aCgnJCcpKSk6Ci0gICAgICB0aGlzX3BhdGggPSB4Y2hlLlBhdGhGcm9tU291cmNlVHJlZUFuZFBhdGgoKQotICAgICAgaWYgdGhpc19wYXRoICE9IE5vbmUgYW5kIHBhdGggIT0gTm9uZToKLSAgICAgICAgcGF0aCA9IHBvc2l4cGF0aC5qb2luKHRoaXNfcGF0aCwgcGF0aCkKLSAgICAgIGVsaWYgdGhpc19wYXRoICE9IE5vbmU6Ci0gICAgICAgIHBhdGggPSB0aGlzX3BhdGgKLSAgICAgIHhjaGUgPSB4Y2hlLnBhcmVudAotCi0gICAgcmV0dXJuIHBhdGgKLQotCi1jbGFzcyBQQlhHcm91cChYQ0hpZXJhcmNoaWNhbEVsZW1lbnQpOgotICAiIiIKLSAgQXR0cmlidXRlczoKLSAgICBfY2hpbGRyZW5fYnlfcGF0aDogTWFwcyBwYXRobmFtZXMgb2YgY2hpbGRyZW4gb2YgdGhpcyBQQlhHcm91cCB0byB0aGUKLSAgICAgIGFjdHVhbCBjaGlsZCBYQ0hpZXJhcmNoaWNhbEVsZW1lbnQgb2JqZWN0cy4KLSAgICBfdmFyaWFudF9jaGlsZHJlbl9ieV9uYW1lX2FuZF9wYXRoOiBNYXBzIChuYW1lLCBwYXRoKSB0dXBsZXMgb2YKLSAgICAgIFBCWFZhcmlhbnRHcm91cCBjaGlsZHJlbiB0byB0aGUgYWN0dWFsIGNoaWxkIFBCWFZhcmlhbnRHcm91cCBvYmplY3RzLgotICAiIiIKLQotICBfc2NoZW1hID0gWENIaWVyYXJjaGljYWxFbGVtZW50Ll9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnY2hpbGRyZW4nOiBbMSwgWENIaWVyYXJjaGljYWxFbGVtZW50LCAxLCAxLCBbXV0sCi0gICAgJ25hbWUnOiAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAgICAgMCwgMF0sCi0gICAgJ3BhdGgnOiAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAgICAgMCwgMF0sCi0gIH0pCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnRpZXM9Tm9uZSwgaWQ9Tm9uZSwgcGFyZW50PU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ0hpZXJhcmNoaWNhbEVsZW1lbnQuX19pbml0X18oc2VsZiwgcHJvcGVydGllcywgaWQsIHBhcmVudCkKLSAgICBzZWxmLl9jaGlsZHJlbl9ieV9wYXRoID0ge30KLSAgICBzZWxmLl92YXJpYW50X2NoaWxkcmVuX2J5X25hbWVfYW5kX3BhdGggPSB7fQotICAgIGZvciBjaGlsZCBpbiBzZWxmLl9wcm9wZXJ0aWVzLmdldCgnY2hpbGRyZW4nLCBbXSk6Ci0gICAgICBzZWxmLl9BZGRDaGlsZFRvRGljdHMoY2hpbGQpCi0KLSAgZGVmIEhhc2hhYmxlcyhzZWxmKToKLSAgICAjIHN1cGVyCi0gICAgaGFzaGFibGVzID0gWENIaWVyYXJjaGljYWxFbGVtZW50Lkhhc2hhYmxlcyhzZWxmKQotCi0gICAgIyBJdCBpcyBub3Qgc3VmZmljaWVudCB0byBqdXN0IHJlbHkgb24gbmFtZSBhbmQgcGFyZW50IHRvIGJ1aWxkIGEgdW5pcXVlCi0gICAgIyBoYXNoYWJsZSA6IGEgbm9kZSBjb3VsZCBoYXZlIHR3byBjaGlsZCBQQlhHcm91cCBzaGFyaW5nIGEgY29tbW9uIG5hbWUuCi0gICAgIyBUbyBhZGQgZW50cm9weSB0aGUgaGFzaGFibGUgaXMgZW5oYW5jZWQgd2l0aCB0aGUgbmFtZXMgb2YgYWxsIGl0cwotICAgICMgY2hpbGRyZW4uCi0gICAgZm9yIGNoaWxkIGluIHNlbGYuX3Byb3BlcnRpZXMuZ2V0KCdjaGlsZHJlbicsIFtdKToKLSAgICAgIGNoaWxkX25hbWUgPSBjaGlsZC5OYW1lKCkKLSAgICAgIGlmIGNoaWxkX25hbWUgIT0gTm9uZToKLSAgICAgICAgaGFzaGFibGVzLmFwcGVuZChjaGlsZF9uYW1lKQotCi0gICAgcmV0dXJuIGhhc2hhYmxlcwotCi0gIGRlZiBIYXNoYWJsZXNGb3JDaGlsZChzZWxmKToKLSAgICAjIFRvIGF2b2lkIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHRoZSBoYXNoYWJsZXMgdXNlZCB0byBjb21wdXRlIGEgY2hpbGQgaWQgZG8KLSAgICAjIG5vdCBpbmNsdWRlIHRoZSBjaGlsZCBuYW1lcy4KLSAgICByZXR1cm4gWENIaWVyYXJjaGljYWxFbGVtZW50Lkhhc2hhYmxlcyhzZWxmKQotCi0gIGRlZiBfQWRkQ2hpbGRUb0RpY3RzKHNlbGYsIGNoaWxkKToKLSAgICAjIFNldHMgdXAgdGhpcyBQQlhHcm91cCBvYmplY3QncyBkaWN0cyB0byByZWZlcmVuY2UgdGhlIGNoaWxkIHByb3Blcmx5LgotICAgIGNoaWxkX3BhdGggPSBjaGlsZC5QYXRoRnJvbVNvdXJjZVRyZWVBbmRQYXRoKCkKLSAgICBpZiBjaGlsZF9wYXRoOgotICAgICAgaWYgY2hpbGRfcGF0aCBpbiBzZWxmLl9jaGlsZHJlbl9ieV9wYXRoOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnRm91bmQgbXVsdGlwbGUgY2hpbGRyZW4gd2l0aCBwYXRoICcgKyBjaGlsZF9wYXRoCi0gICAgICBzZWxmLl9jaGlsZHJlbl9ieV9wYXRoW2NoaWxkX3BhdGhdID0gY2hpbGQKLQotICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIFBCWFZhcmlhbnRHcm91cCk6Ci0gICAgICBjaGlsZF9uYW1lID0gY2hpbGQuX3Byb3BlcnRpZXMuZ2V0KCduYW1lJywgTm9uZSkKLSAgICAgIGtleSA9IChjaGlsZF9uYW1lLCBjaGlsZF9wYXRoKQotICAgICAgaWYga2V5IGluIHNlbGYuX3ZhcmlhbnRfY2hpbGRyZW5fYnlfbmFtZV9hbmRfcGF0aDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ0ZvdW5kIG11bHRpcGxlIFBCWFZhcmlhbnRHcm91cCBjaGlsZHJlbiB3aXRoICcgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lICcgKyBzdHIoY2hpbGRfbmFtZSkgKyAnIGFuZCBwYXRoICcgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihjaGlsZF9wYXRoKQotICAgICAgc2VsZi5fdmFyaWFudF9jaGlsZHJlbl9ieV9uYW1lX2FuZF9wYXRoW2tleV0gPSBjaGlsZAotCi0gIGRlZiBBcHBlbmRDaGlsZChzZWxmLCBjaGlsZCk6Ci0gICAgIyBDYWxsZXJzIHNob3VsZCB1c2UgdGhpcyBpbnN0ZWFkIG9mIGNhbGxpbmcKLSAgICAjIEFwcGVuZFByb3BlcnR5KCdjaGlsZHJlbicsIGNoaWxkKSBkaXJlY3RseSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KLSAgICAjIG1haW50YWlucyB0aGUgZ3JvdXAncyBkaWN0cy4KLSAgICBzZWxmLkFwcGVuZFByb3BlcnR5KCdjaGlsZHJlbicsIGNoaWxkKQotICAgIHNlbGYuX0FkZENoaWxkVG9EaWN0cyhjaGlsZCkKLQotICBkZWYgR2V0Q2hpbGRCeU5hbWUoc2VsZiwgbmFtZSk6Ci0gICAgIyBUaGlzIGlzIG5vdCBjdXJyZW50bHkgb3B0aW1pemVkIHdpdGggYSBkaWN0IGFzIEdldENoaWxkQnlQYXRoIGlzIGJlY2F1c2UKLSAgICAjIGl0IGhhcyBmZXcgY2FsbGVycy4gIE1vc3QgY2FsbGVycyBwcm9iYWJseSB3YW50IEdldENoaWxkQnlQYXRoLiAgVGhpcwotICAgICMgZnVuY3Rpb24gaXMgb25seSB1c2VmdWwgdG8gZ2V0IGNoaWxkcmVuIHRoYXQgaGF2ZSBuYW1lcyBidXQgbm8gcGF0aHMsCi0gICAgIyB3aGljaCBpcyByYXJlLiAgVGhlIGNoaWxkcmVuIG9mIHRoZSBtYWluIGdyb3VwICgiU291cmNlIiwgIlByb2R1Y3RzIiwKLSAgICAjIGV0Yy4pIGlzIHByZXR0eSBtdWNoIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBsaWtlbHkgdG8gY29tZSB1cC4KLSAgICAjCi0gICAgIyBUT0RPKG1hcmspOiBNYXliZSB0aGlzIHNob3VsZCByYWlzZSBhbiBlcnJvciBpZiBtb3JlIHRoYW4gb25lIGNoaWxkIGlzCi0gICAgIyBwcmVzZW50IHdpdGggdGhlIHNhbWUgbmFtZS4KLSAgICBpZiBub3QgJ2NoaWxkcmVuJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGZvciBjaGlsZCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddOgotICAgICAgaWYgY2hpbGQuTmFtZSgpID09IG5hbWU6Ci0gICAgICAgIHJldHVybiBjaGlsZAotCi0gICAgcmV0dXJuIE5vbmUKLQotICBkZWYgR2V0Q2hpbGRCeVBhdGgoc2VsZiwgcGF0aCk6Ci0gICAgaWYgbm90IHBhdGg6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgaWYgcGF0aCBpbiBzZWxmLl9jaGlsZHJlbl9ieV9wYXRoOgotICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuX2J5X3BhdGhbcGF0aF0KLQotICAgIHJldHVybiBOb25lCi0KLSAgZGVmIEdldENoaWxkQnlSZW1vdGVPYmplY3Qoc2VsZiwgcmVtb3RlX29iamVjdCk6Ci0gICAgIyBUaGlzIG1ldGhvZCBpcyBhIGxpdHRsZSBiaXQgZXNvdGVyaWMuICBHaXZlbiBhIHJlbW90ZV9vYmplY3QsIHdoaWNoCi0gICAgIyBzaG91bGQgYmUgYSBQQlhGaWxlUmVmZXJlbmNlIGluIGFub3RoZXIgcHJvamVjdCBmaWxlLCB0aGlzIG1ldGhvZCB3aWxsCi0gICAgIyByZXR1cm4gdGhpcyBncm91cCdzIFBCWFJlZmVyZW5jZVByb3h5IG9iamVjdCBzZXJ2aW5nIGFzIGEgbG9jYWwgcHJveHkKLSAgICAjIGZvciB0aGUgcmVtb3RlIFBCWEZpbGVSZWZlcmVuY2UuCi0gICAgIwotICAgICMgVGhpcyBmdW5jdGlvbiBtaWdodCBiZW5lZml0IGZyb20gYSBkaWN0IG9wdGltaXphdGlvbiBhcyBHZXRDaGlsZEJ5UGF0aAotICAgICMgZm9yIHNvbWUgd29ya2xvYWRzLCBidXQgcHJvZmlsaW5nIHNob3dzIHRoYXQgaXQncyBub3QgY3VycmVudGx5IGEKLSAgICAjIHByb2JsZW0uCi0gICAgaWYgbm90ICdjaGlsZHJlbicgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIHJldHVybiBOb25lCi0KLSAgICBmb3IgY2hpbGQgaW4gc2VsZi5fcHJvcGVydGllc1snY2hpbGRyZW4nXToKLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNoaWxkLCBQQlhSZWZlcmVuY2VQcm94eSk6Ci0gICAgICAgIGNvbnRpbnVlCi0KLSAgICAgIGNvbnRhaW5lcl9wcm94eSA9IGNoaWxkLl9wcm9wZXJ0aWVzWydyZW1vdGVSZWYnXQotICAgICAgaWYgY29udGFpbmVyX3Byb3h5Ll9wcm9wZXJ0aWVzWydyZW1vdGVHbG9iYWxJRFN0cmluZyddID09IHJlbW90ZV9vYmplY3Q6Ci0gICAgICAgIHJldHVybiBjaGlsZAotCi0gICAgcmV0dXJuIE5vbmUKLQotICBkZWYgQWRkT3JHZXRGaWxlQnlQYXRoKHNlbGYsIHBhdGgsIGhpZXJhcmNoaWNhbCk6Ci0gICAgIiIiUmV0dXJucyBhbiBleGlzdGluZyBvciBuZXcgZmlsZSByZWZlcmVuY2UgY29ycmVzcG9uZGluZyB0byBwYXRoLgotCi0gICAgSWYgaGllcmFyY2hpY2FsIGlzIFRydWUsIHRoaXMgbWV0aG9kIHdpbGwgY3JlYXRlIG9yIHVzZSB0aGUgbmVjZXNzYXJ5Ci0gICAgaGllcmFyY2hpY2FsIGdyb3VwIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHBhdGguICBPdGhlcndpc2UsIGl0IHdpbGwKLSAgICBsb29rIGluIGFuZCBjcmVhdGUgYW4gaXRlbSBpbiB0aGUgY3VycmVudCBncm91cCBvbmx5LgotCi0gICAgSWYgYW4gZXhpc3RpbmcgbWF0Y2hpbmcgcmVmZXJlbmNlIGlzIGZvdW5kLCBpdCBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlLCBhCi0gICAgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQsIGFkZGVkIHRvIHRoZSBjb3JyZWN0IGdyb3VwLCBhbmQgcmV0dXJuZWQuCi0KLSAgICBJZiBwYXRoIGlkZW50aWZpZXMgYSBkaXJlY3RvcnkgYnkgdmlydHVlIG9mIGNhcnJ5aW5nIGEgdHJhaWxpbmcgc2xhc2gsCi0gICAgdGhpcyBtZXRob2QgcmV0dXJucyBhIFBCWEZpbGVSZWZlcmVuY2Ugb2YgImZvbGRlciIgdHlwZS4gIElmIHBhdGgKLSAgICBpZGVudGlmaWVzIGEgdmFyaWFudCwgYnkgdmlydHVlIG9mIGl0IGlkZW50aWZ5aW5nIGEgZmlsZSBpbnNpZGUgYSBkaXJlY3RvcnkKLSAgICB3aXRoIGFuICIubHByb2oiIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcmV0dXJucyBhIFBCWFZhcmlhbnRHcm91cAotICAgIGNvbnRhaW5pbmcgdGhlIHZhcmlhbnQgbmFtZWQgYnkgcGF0aCwgYW5kIHBvc3NpYmx5IG90aGVyIHZhcmlhbnRzLiAgRm9yCi0gICAgYWxsIG90aGVyIHBhdGhzLCBhICJub3JtYWwiIFBCWEZpbGVSZWZlcmVuY2Ugd2lsbCBiZSByZXR1cm5lZC4KLSAgICAiIiIKLQotICAgICMgQWRkaW5nIG9yIGdldHRpbmcgYSBkaXJlY3Rvcnk/ICBEaXJlY3RvcmllcyBlbmQgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgotICAgIGlzX2RpciA9IEZhbHNlCi0gICAgaWYgcGF0aC5lbmRzd2l0aCgnLycpOgotICAgICAgaXNfZGlyID0gVHJ1ZQotICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgocGF0aCkKLSAgICBpZiBpc19kaXI6Ci0gICAgICBwYXRoID0gcGF0aCArICcvJwotCi0gICAgIyBBZGRpbmcgb3IgZ2V0dGluZyBhIHZhcmlhbnQ/ICBWYXJpYW50cyBhcmUgZmlsZXMgaW5zaWRlIGRpcmVjdG9yaWVzCi0gICAgIyB3aXRoIGFuICIubHByb2oiIGV4dGVuc2lvbi4gIFhjb2RlIHVzZXMgdmFyaWFudHMgZm9yIGxvY2FsaXphdGlvbi4gIEZvcgotICAgICMgYSB2YXJpYW50IHBhdGgvdG8vTGFuZ3VhZ2UubHByb2ovTWFpbk1lbnUubmliLCBwdXQgYSB2YXJpYW50IGdyb3VwIG5hbWVkCi0gICAgIyBNYWluTWVudS5uaWIgaW5zaWRlIHBhdGgvdG8sIGFuZCBnaXZlIGl0IGEgdmFyaWFudCBuYW1lZCBMYW5ndWFnZS4gIEluCi0gICAgIyB0aGlzIGV4YW1wbGUsIGdyYW5kcGFyZW50IHdvdWxkIGJlIHNldCB0byBwYXRoL3RvIGFuZCBwYXJlbnRfcm9vdCB3b3VsZAotICAgICMgYmUgc2V0IHRvIExhbmd1YWdlLgotICAgIHZhcmlhbnRfbmFtZSA9IE5vbmUKLSAgICBwYXJlbnQgPSBwb3NpeHBhdGguZGlybmFtZShwYXRoKQotICAgIGdyYW5kcGFyZW50ID0gcG9zaXhwYXRoLmRpcm5hbWUocGFyZW50KQotICAgIHBhcmVudF9iYXNlbmFtZSA9IHBvc2l4cGF0aC5iYXNlbmFtZShwYXJlbnQpCi0gICAgKHBhcmVudF9yb290LCBwYXJlbnRfZXh0KSA9IHBvc2l4cGF0aC5zcGxpdGV4dChwYXJlbnRfYmFzZW5hbWUpCi0gICAgaWYgcGFyZW50X2V4dCA9PSAnLmxwcm9qJzoKLSAgICAgIHZhcmlhbnRfbmFtZSA9IHBhcmVudF9yb290Ci0gICAgaWYgZ3JhbmRwYXJlbnQgPT0gJyc6Ci0gICAgICBncmFuZHBhcmVudCA9IE5vbmUKLQotICAgICMgUHV0dGluZyBhIGRpcmVjdG9yeSBpbnNpZGUgYSB2YXJpYW50IGdyb3VwIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgotICAgIGFzc2VydCBub3QgaXNfZGlyIG9yIHZhcmlhbnRfbmFtZSBpcyBOb25lCi0KLSAgICBwYXRoX3NwbGl0ID0gcGF0aC5zcGxpdChwb3NpeHBhdGguc2VwKQotICAgIGlmIGxlbihwYXRoX3NwbGl0KSA9PSAxIG9yIFwKLSAgICAgICAoKGlzX2RpciBvciB2YXJpYW50X25hbWUgIT0gTm9uZSkgYW5kIGxlbihwYXRoX3NwbGl0KSA9PSAyKSBvciBcCi0gICAgICAgbm90IGhpZXJhcmNoaWNhbDoKLSAgICAgICMgVGhlIFBCWEZpbGVSZWZlcmVuY2Ugb3IgUEJYVmFyaWFudEdyb3VwIHdpbGwgYmUgYWRkZWQgdG8gb3IgZ290dGVuIGZyb20KLSAgICAgICMgdGhpcyBQQlhHcm91cCwgbm8gcmVjdXJzaW9uIG5lY2Vzc2FyeS4KLSAgICAgIGlmIHZhcmlhbnRfbmFtZSBpcyBOb25lOgotICAgICAgICAjIEFkZCBvciBnZXQgYSBQQlhGaWxlUmVmZXJlbmNlLgotICAgICAgICBmaWxlX3JlZiA9IHNlbGYuR2V0Q2hpbGRCeVBhdGgocGF0aCkKLSAgICAgICAgaWYgZmlsZV9yZWYgIT0gTm9uZToKLSAgICAgICAgICBhc3NlcnQgZmlsZV9yZWYuX19jbGFzc19fID09IFBCWEZpbGVSZWZlcmVuY2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBmaWxlX3JlZiA9IFBCWEZpbGVSZWZlcmVuY2UoeydwYXRoJzogcGF0aH0pCi0gICAgICAgICAgc2VsZi5BcHBlbmRDaGlsZChmaWxlX3JlZikKLSAgICAgIGVsc2U6Ci0gICAgICAgICMgQWRkIG9yIGdldCBhIFBCWFZhcmlhbnRHcm91cC4gIFRoZSB2YXJpYW50IGdyb3VwIG5hbWUgaXMgdGhlIHNhbWUKLSAgICAgICAgIyBhcyB0aGUgYmFzZW5hbWUgKE1haW5NZW51Lm5pYiBpbiB0aGUgZXhhbXBsZSBhYm92ZSkuICBncmFuZHBhcmVudAotICAgICAgICAjIHNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdmFyaWFudCBncm91cCBpdHNlbGYsIGFuZCBwYXRoX3NwbGl0Wy0yOl0KLSAgICAgICAgIyBpcyB0aGUgcGF0aCBvZiB0aGUgc3BlY2lmaWMgdmFyaWFudCByZWxhdGl2ZSB0byBpdHMgZ3JvdXAuCi0gICAgICAgIHZhcmlhbnRfZ3JvdXBfbmFtZSA9IHBvc2l4cGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICB2YXJpYW50X2dyb3VwX3JlZiA9IHNlbGYuQWRkT3JHZXRWYXJpYW50R3JvdXBCeU5hbWVBbmRQYXRoKAotICAgICAgICAgICAgdmFyaWFudF9ncm91cF9uYW1lLCBncmFuZHBhcmVudCkKLSAgICAgICAgdmFyaWFudF9wYXRoID0gcG9zaXhwYXRoLnNlcC5qb2luKHBhdGhfc3BsaXRbLTI6XSkKLSAgICAgICAgdmFyaWFudF9yZWYgPSB2YXJpYW50X2dyb3VwX3JlZi5HZXRDaGlsZEJ5UGF0aCh2YXJpYW50X3BhdGgpCi0gICAgICAgIGlmIHZhcmlhbnRfcmVmICE9IE5vbmU6Ci0gICAgICAgICAgYXNzZXJ0IHZhcmlhbnRfcmVmLl9fY2xhc3NfXyA9PSBQQlhGaWxlUmVmZXJlbmNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgdmFyaWFudF9yZWYgPSBQQlhGaWxlUmVmZXJlbmNlKHsnbmFtZSc6IHZhcmlhbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJzogdmFyaWFudF9wYXRofSkKLSAgICAgICAgICB2YXJpYW50X2dyb3VwX3JlZi5BcHBlbmRDaGlsZCh2YXJpYW50X3JlZikKLSAgICAgICAgIyBUaGUgY2FsbGVyIGlzIGludGVyZXN0ZWQgaW4gdGhlIHZhcmlhbnQgZ3JvdXAsIG5vdCB0aGUgc3BlY2lmaWMKLSAgICAgICAgIyB2YXJpYW50IGZpbGUuCi0gICAgICAgIGZpbGVfcmVmID0gdmFyaWFudF9ncm91cF9yZWYKLSAgICAgIHJldHVybiBmaWxlX3JlZgotICAgIGVsc2U6Ci0gICAgICAjIEhpZXJhcmNoaWNhbCByZWN1cnNpb24uICBBZGQgb3IgZ2V0IGEgUEJYR3JvdXAgY29ycmVzcG9uZGluZyB0byB0aGUKLSAgICAgICMgb3V0ZXJtb3N0IHBhdGggY29tcG9uZW50LCBhbmQgdGhlbiByZWN1cnNlIGludG8gaXQsIGNob3BwaW5nIG9mZiB0aGF0Ci0gICAgICAjIHBhdGggY29tcG9uZW50LgotICAgICAgbmV4dF9kaXIgPSBwYXRoX3NwbGl0WzBdCi0gICAgICBncm91cF9yZWYgPSBzZWxmLkdldENoaWxkQnlQYXRoKG5leHRfZGlyKQotICAgICAgaWYgZ3JvdXBfcmVmICE9IE5vbmU6Ci0gICAgICAgIGFzc2VydCBncm91cF9yZWYuX19jbGFzc19fID09IFBCWEdyb3VwCi0gICAgICBlbHNlOgotICAgICAgICBncm91cF9yZWYgPSBQQlhHcm91cCh7J3BhdGgnOiBuZXh0X2Rpcn0pCi0gICAgICAgIHNlbGYuQXBwZW5kQ2hpbGQoZ3JvdXBfcmVmKQotICAgICAgcmV0dXJuIGdyb3VwX3JlZi5BZGRPckdldEZpbGVCeVBhdGgocG9zaXhwYXRoLnNlcC5qb2luKHBhdGhfc3BsaXRbMTpdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoaWNhbCkKLQotICBkZWYgQWRkT3JHZXRWYXJpYW50R3JvdXBCeU5hbWVBbmRQYXRoKHNlbGYsIG5hbWUsIHBhdGgpOgotICAgICIiIlJldHVybnMgYW4gZXhpc3Rpbmcgb3IgbmV3IFBCWFZhcmlhbnRHcm91cCBmb3IgbmFtZSBhbmQgcGF0aC4KLQotICAgIElmIGEgUEJYVmFyaWFudEdyb3VwIGlkZW50aWZpZWQgYnkgdGhlIG5hbWUgYW5kIHBhdGggYXJndW1lbnRzIGlzIGFscmVhZHkKLSAgICBwcmVzZW50IGFzIGEgY2hpbGQgb2YgdGhpcyBvYmplY3QsIGl0IGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBhIG5ldwotICAgIFBCWFZhcmlhbnRHcm91cCB3aXRoIHRoZSBjb3JyZWN0IHByb3BlcnRpZXMgaXMgY3JlYXRlZCwgYWRkZWQgYXMgYSBjaGlsZCwKLSAgICBhbmQgcmV0dXJuZWQuCi0KLSAgICBUaGlzIG1ldGhvZCB3aWxsIGdlbmVyYWxseSBiZSBjYWxsZWQgYnkgQWRkT3JHZXRGaWxlQnlQYXRoLCB3aGljaCBrbm93cwotICAgIHdoZW4gdG8gY3JlYXRlIGEgdmFyaWFudCBncm91cCBiYXNlZCBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBwYXRobmFtZXMKLSAgICBwYXNzZWQgdG8gaXQuCi0gICAgIiIiCi0KLSAgICBrZXkgPSAobmFtZSwgcGF0aCkKLSAgICBpZiBrZXkgaW4gc2VsZi5fdmFyaWFudF9jaGlsZHJlbl9ieV9uYW1lX2FuZF9wYXRoOgotICAgICAgdmFyaWFudF9ncm91cF9yZWYgPSBzZWxmLl92YXJpYW50X2NoaWxkcmVuX2J5X25hbWVfYW5kX3BhdGhba2V5XQotICAgICAgYXNzZXJ0IHZhcmlhbnRfZ3JvdXBfcmVmLl9fY2xhc3NfXyA9PSBQQlhWYXJpYW50R3JvdXAKLSAgICAgIHJldHVybiB2YXJpYW50X2dyb3VwX3JlZgotCi0gICAgdmFyaWFudF9ncm91cF9wcm9wZXJ0aWVzID0geyduYW1lJzogbmFtZX0KLSAgICBpZiBwYXRoICE9IE5vbmU6Ci0gICAgICB2YXJpYW50X2dyb3VwX3Byb3BlcnRpZXNbJ3BhdGgnXSA9IHBhdGgKLSAgICB2YXJpYW50X2dyb3VwX3JlZiA9IFBCWFZhcmlhbnRHcm91cCh2YXJpYW50X2dyb3VwX3Byb3BlcnRpZXMpCi0gICAgc2VsZi5BcHBlbmRDaGlsZCh2YXJpYW50X2dyb3VwX3JlZikKLQotICAgIHJldHVybiB2YXJpYW50X2dyb3VwX3JlZgotCi0gIGRlZiBUYWtlT3Zlck9ubHlDaGlsZChzZWxmLCByZWN1cnNlPUZhbHNlKToKLSAgICAiIiJJZiB0aGlzIFBCWEdyb3VwIGhhcyBvbmx5IG9uZSBjaGlsZCBhbmQgaXQncyBhbHNvIGEgUEJYR3JvdXAsIHRha2UKLSAgICBpdCBvdmVyIGJ5IG1ha2luZyBhbGwgb2YgaXRzIGNoaWxkcmVuIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4uCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY29udGludWUgdG8gdGFrZSBvdmVyIG9ubHkgY2hpbGRyZW4gd2hlbiB0aG9zZSBjaGlsZHJlbgotICAgIGFyZSBncm91cHMuICBJZiB0aGVyZSBhcmUgdGhyZWUgUEJYR3JvdXBzIHJlcHJlc2VudGluZyBhLCBiLCBhbmQgYywgd2l0aAotICAgIGMgaW5zaWRlIGIgYW5kIGIgaW5zaWRlIGEsIGFuZCBhIGFuZCBiIGhhdmUgbm8gb3RoZXIgY2hpbGRyZW4sIHRoaXMgd2lsbAotICAgIHJlc3VsdCBpbiBhIHRha2luZyBvdmVyIGJvdGggYiBhbmQgYywgZm9ybWluZyBhIFBCWEdyb3VwIGZvciBhL2IvYy4KLQotICAgIElmIHJlY3Vyc2UgaXMgVHJ1ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJlY3Vyc2UgaW50byBjaGlsZHJlbiBhbmQgYXNrIHRoZW0KLSAgICB0byBjb2xsYXBzZSB0aGVtc2VsdmVzIGJ5IHRha2luZyBvdmVyIG9ubHkgY2hpbGRyZW4gYXMgd2VsbC4gIEFzc3VtaW5nCi0gICAgYW4gZXhhbXBsZSBoaWVyYXJjaHkgd2l0aCBmaWxlcyBhdCBhL2IvYy9kMSwgYS9iL2MvZDIsIGFuZCBhL2IvYy9kMy9lL2YKLSAgICAoZDEsIGQyLCBhbmQgZiBhcmUgZmlsZXMsIHRoZSByZXN0IGFyZSBncm91cHMpLCByZWN1cnNpb24gd2lsbCByZXN1bHQgaW4KLSAgICBhIGdyb3VwIGZvciBhL2IvYyBjb250YWluaW5nIGEgZ3JvdXAgZm9yIGQzL2UuCi0gICAgIiIiCi0KLSAgICAjIEF0IHRoaXMgc3RhZ2UsIGNoZWNrIHRoYXQgY2hpbGQgY2xhc3MgdHlwZXMgYXJlIFBCWEdyb3VwIGV4YWN0bHksCi0gICAgIyBpbnN0ZWFkIG9mIHVzaW5nIGlzaW5zdGFuY2UuICBUaGUgb25seSBzdWJjbGFzcyBvZiBQQlhHcm91cCwKLSAgICAjIFBCWFZhcmlhbnRHcm91cCwgc2hvdWxkIG5vdCBwYXJ0aWNpcGF0ZSBpbiByZXBhcmVudGluZyBpbiB0aGUgc2FtZSB3YXk6Ci0gICAgIyByZXBhcmVudGluZyBieSBtZXJnaW5nIGRpZmZlcmVudCBvYmplY3QgdHlwZXMgd291bGQgYmUgd3JvbmcuCi0gICAgd2hpbGUgbGVuKHNlbGYuX3Byb3BlcnRpZXNbJ2NoaWxkcmVuJ10pID09IDEgYW5kIFwKLSAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddWzBdLl9fY2xhc3NfXyA9PSBQQlhHcm91cDoKLSAgICAgICMgTG9vcCB0byB0YWtlIG92ZXIgdGhlIGlubmVybW9zdCBvbmx5LWNoaWxkIGdyb3VwIHBvc3NpYmxlLgotCi0gICAgICBjaGlsZCA9IHNlbGYuX3Byb3BlcnRpZXNbJ2NoaWxkcmVuJ11bMF0KLQotICAgICAgIyBBc3N1bWUgdGhlIGNoaWxkJ3MgcHJvcGVydGllcywgaW5jbHVkaW5nIGl0cyBjaGlsZHJlbi4gIFNhdmUgYSBjb3B5Ci0gICAgICAjIG9mIHRoaXMgb2JqZWN0J3Mgb2xkIHByb3BlcnRpZXMsIGJlY2F1c2UgdGhleSdsbCBzdGlsbCBiZSBuZWVkZWQuCi0gICAgICAjIFRoaXMgb2JqZWN0IHJldGFpbnMgaXRzIGV4aXN0aW5nIGlkIGFuZCBwYXJlbnQgYXR0cmlidXRlcy4KLSAgICAgIG9sZF9wcm9wZXJ0aWVzID0gc2VsZi5fcHJvcGVydGllcwotICAgICAgc2VsZi5fcHJvcGVydGllcyA9IGNoaWxkLl9wcm9wZXJ0aWVzCi0gICAgICBzZWxmLl9jaGlsZHJlbl9ieV9wYXRoID0gY2hpbGQuX2NoaWxkcmVuX2J5X3BhdGgKLQotICAgICAgaWYgbm90ICdzb3VyY2VUcmVlJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIG9yIFwKLSAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3NvdXJjZVRyZWUnXSA9PSAnPGdyb3VwPic6Ci0gICAgICAgICMgVGhlIGNoaWxkIHdhcyByZWxhdGl2ZSB0byBpdHMgcGFyZW50LiAgRml4IHVwIHRoZSBwYXRoLiAgTm90ZSB0aGF0Ci0gICAgICAgICMgY2hpbGRyZW4gd2l0aCBhIHNvdXJjZVRyZWUgb3RoZXIgdGhhbiAiPGdyb3VwPiIgYXJlIG5vdCByZWxhdGl2ZSB0bwotICAgICAgICAjIHRoZWlyIHBhcmVudHMsIHNvIG5vIHBhdGggZml4LXVwIGlzIG5lZWRlZCBpbiB0aGF0IGNhc2UuCi0gICAgICAgIGlmICdwYXRoJyBpbiBvbGRfcHJvcGVydGllczoKLSAgICAgICAgICBpZiAncGF0aCcgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgICAgICAgICMgQm90aCB0aGUgb3JpZ2luYWwgcGFyZW50IGFuZCBjaGlsZCBoYXZlIHBhdGhzIHNldC4KLSAgICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXSA9IHBvc2l4cGF0aC5qb2luKG9sZF9wcm9wZXJ0aWVzWydwYXRoJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcm9wZXJ0aWVzWydwYXRoJ10pCi0gICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgT25seSB0aGUgb3JpZ2luYWwgcGFyZW50IGhhcyBhIHBhdGgsIHVzZSBpdC4KLSAgICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXSA9IG9sZF9wcm9wZXJ0aWVzWydwYXRoJ10KLSAgICAgICAgaWYgJ3NvdXJjZVRyZWUnIGluIG9sZF9wcm9wZXJ0aWVzOgotICAgICAgICAgICMgVGhlIG9yaWdpbmFsIHBhcmVudCBoYWQgYSBzb3VyY2VUcmVlIHNldCwgdXNlIGl0LgotICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3NvdXJjZVRyZWUnXSA9IG9sZF9wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10KLQotICAgICAgIyBJZiB0aGUgb3JpZ2luYWwgcGFyZW50IGhhZCBhIG5hbWUgc2V0LCBrZWVwIHVzaW5nIGl0LiAgSWYgdGhlIG9yaWdpbmFsCi0gICAgICAjIHBhcmVudCBkaWRuJ3QgaGF2ZSBhIG5hbWUgYnV0IHRoZSBjaGlsZCBkaWQsIGxldCB0aGUgY2hpbGQncyBuYW1lCi0gICAgICAjIGxpdmUgb24uICBJZiB0aGUgbmFtZSBhdHRyaWJ1dGUgc2VlbXMgdW5uZWNlc3Nhcnkgbm93LCBnZXQgcmlkIG9mIGl0LgotICAgICAgaWYgJ25hbWUnIGluIG9sZF9wcm9wZXJ0aWVzIGFuZCBvbGRfcHJvcGVydGllc1snbmFtZSddICE9IE5vbmUgYW5kIFwKLSAgICAgICAgIG9sZF9wcm9wZXJ0aWVzWyduYW1lJ10gIT0gc2VsZi5OYW1lKCk6Ci0gICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ25hbWUnXSA9IG9sZF9wcm9wZXJ0aWVzWyduYW1lJ10KLSAgICAgIGlmICduYW1lJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCAncGF0aCcgaW4gc2VsZi5fcHJvcGVydGllcyBhbmQgXAotICAgICAgICAgc2VsZi5fcHJvcGVydGllc1snbmFtZSddID09IHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXToKLSAgICAgICAgZGVsIHNlbGYuX3Byb3BlcnRpZXNbJ25hbWUnXQotCi0gICAgICAjIE5vdGlmeSBhbGwgY2hpbGRyZW4gb2YgdGhlaXIgbmV3IHBhcmVudC4KLSAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddOgotICAgICAgICBjaGlsZC5wYXJlbnQgPSBzZWxmCi0KLSAgICAjIElmIGFza2VkIHRvIHJlY3Vyc2UsIHJlY3Vyc2UuCi0gICAgaWYgcmVjdXJzZToKLSAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddOgotICAgICAgICBpZiBjaGlsZC5fX2NsYXNzX18gPT0gUEJYR3JvdXA6Ci0gICAgICAgICAgY2hpbGQuVGFrZU92ZXJPbmx5Q2hpbGQocmVjdXJzZSkKLQotICBkZWYgU29ydEdyb3VwKHNlbGYpOgotICAgIHNlbGYuX3Byb3BlcnRpZXNbJ2NoaWxkcmVuJ10gPSBcCi0gICAgICAgIHNvcnRlZChzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddLCBjbXA9bGFtYmRhIHgseTogeC5Db21wYXJlKHkpKQotCi0gICAgIyBSZWN1cnNlLgotICAgIGZvciBjaGlsZCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddOgotICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgUEJYR3JvdXApOgotICAgICAgICBjaGlsZC5Tb3J0R3JvdXAoKQotCi0KLWNsYXNzIFhDRmlsZUxpa2VFbGVtZW50KFhDSGllcmFyY2hpY2FsRWxlbWVudCk6Ci0gICMgQWJzdHJhY3QgYmFzZSBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSBmaWxlUmVmIHByb3BlcnR5IG9mCi0gICMgUEJYQnVpbGRGaWxlLgotCi0gIGRlZiBQYXRoSGFzaGFibGVzKHNlbGYpOgotICAgICMgQSBQQlhCdWlsZEZpbGUgdGhhdCByZWZlcnMgdG8gdGhpcyBvYmplY3Qgd2lsbCBjYWxsIHRoaXMgbWV0aG9kIHRvCi0gICAgIyBvYnRhaW4gYWRkaXRpb25hbCBoYXNoYWJsZXMgc3BlY2lmaWMgdG8gdGhpcyBYQ0ZpbGVMaWtlRWxlbWVudC4gIERvbid0Ci0gICAgIyBqdXN0IHVzZSB0aGlzIG9iamVjdCdzIGhhc2hhYmxlcywgdGhleSdyZSBub3Qgc3BlY2lmaWMgYW5kIHVuaXF1ZSBlbm91Z2gKLSAgICAjIG9uIHRoZWlyIG93biAod2l0aG91dCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBoYXNoYWJsZXMuKSAgSW5zdGVhZCwgcHJvdmlkZQotICAgICMgaGFzaGFibGVzIHRoYXQgaWRlbnRpZnkgdGhpcyBvYmplY3QgYnkgcGF0aCBieSBnZXR0aW5nIGl0cyBoYXNoYWJsZXMgYXMKLSAgICAjIHdlbGwgYXMgdGhlIGhhc2hhYmxlcyBvZiBhbmNlc3RvciBYQ0hpZXJhcmNoaWNhbEVsZW1lbnQgb2JqZWN0cy4KLQotICAgIGhhc2hhYmxlcyA9IFtdCi0gICAgeGNoZSA9IHNlbGYKLSAgICB3aGlsZSB4Y2hlICE9IE5vbmUgYW5kIGlzaW5zdGFuY2UoeGNoZSwgWENIaWVyYXJjaGljYWxFbGVtZW50KToKLSAgICAgIHhjaGVfaGFzaGFibGVzID0geGNoZS5IYXNoYWJsZXMoKQotICAgICAgZm9yIGluZGV4IGluIHhyYW5nZSgwLCBsZW4oeGNoZV9oYXNoYWJsZXMpKToKLSAgICAgICAgaGFzaGFibGVzLmluc2VydChpbmRleCwgeGNoZV9oYXNoYWJsZXNbaW5kZXhdKQotICAgICAgeGNoZSA9IHhjaGUucGFyZW50Ci0gICAgcmV0dXJuIGhhc2hhYmxlcwotCi0KLWNsYXNzIFhDQ29udGFpbmVyUG9ydGFsKFhDT2JqZWN0KToKLSAgIyBBYnN0cmFjdCBiYXNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lclBvcnRhbCBwcm9wZXJ0eQotICAjIG9mIFBCWENvbnRhaW5lckl0ZW1Qcm94eS4KLSAgcGFzcwotCi0KLWNsYXNzIFhDUmVtb3RlT2JqZWN0KFhDT2JqZWN0KToKLSAgIyBBYnN0cmFjdCBiYXNlIGZvciBvYmplY3RzIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlIHJlbW90ZUdsb2JhbElEU3RyaW5nCi0gICMgcHJvcGVydHkgb2YgUEJYQ29udGFpbmVySXRlbVByb3h5LgotICBwYXNzCi0KLQotY2xhc3MgUEJYRmlsZVJlZmVyZW5jZShYQ0ZpbGVMaWtlRWxlbWVudCwgWENDb250YWluZXJQb3J0YWwsIFhDUmVtb3RlT2JqZWN0KToKLSAgX3NjaGVtYSA9IFhDRmlsZUxpa2VFbGVtZW50Ll9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnZXhwbGljaXRGaWxlVHlwZSc6ICBbMCwgc3RyLCAwLCAwXSwKLSAgICAnbGFzdEtub3duRmlsZVR5cGUnOiBbMCwgc3RyLCAwLCAwXSwKLSAgICAnbmFtZSc6ICAgICAgICAgICAgICBbMCwgc3RyLCAwLCAwXSwKLSAgICAncGF0aCc6ICAgICAgICAgICAgICBbMCwgc3RyLCAwLCAxXSwKLSAgfSkKLQotICAjIFdlaXJkIG91dHB1dCBydWxlcyBmb3IgUEJYRmlsZVJlZmVyZW5jZS4KLSAgX3Nob3VsZF9wcmludF9zaW5nbGVfbGluZSA9IFRydWUKLSAgIyBzdXBlcgotICBfZW5jb2RlX3RyYW5zZm9ybXMgPSBYQ0ZpbGVMaWtlRWxlbWVudC5fYWx0ZXJuYXRlX2VuY29kZV90cmFuc2Zvcm1zCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnRpZXM9Tm9uZSwgaWQ9Tm9uZSwgcGFyZW50PU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ0ZpbGVMaWtlRWxlbWVudC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotICAgIGlmICdwYXRoJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBzZWxmLl9wcm9wZXJ0aWVzWydwYXRoJ10uZW5kc3dpdGgoJy8nKToKLSAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXSA9IHNlbGYuX3Byb3BlcnRpZXNbJ3BhdGgnXVs6LTFdCi0gICAgICBpc19kaXIgPSBUcnVlCi0gICAgZWxzZToKLSAgICAgIGlzX2RpciA9IEZhbHNlCi0KLSAgICBpZiAncGF0aCcgaW4gc2VsZi5fcHJvcGVydGllcyBhbmQgXAotICAgICAgICBub3QgJ2xhc3RLbm93bkZpbGVUeXBlJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBcCi0gICAgICAgIG5vdCAnZXhwbGljaXRGaWxlVHlwZScgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgICMgVE9ETyhtYXJrKTogVGhpcyBpcyB0aGUgcmVwbGFjZW1lbnQgZm9yIGEgcmVwbGFjZW1lbnQgZm9yIGEgcXVpY2sgaGFjay4KLSAgICAgICMgSXQgaXMgbm8gbG9uZ2VyIGluY3JlZGlibHkgc3Vja3ksIGJ1dCB0aGlzIGxpc3QgbmVlZHMgdG8gYmUgZXh0ZW5kZWQuCi0gICAgICBleHRlbnNpb25fbWFwID0gewotICAgICAgICAnYSc6ICAgICAgICAgICAnYXJjaGl2ZS5hcicsCi0gICAgICAgICdhcHAnOiAgICAgICAgICd3cmFwcGVyLmFwcGxpY2F0aW9uJywKLSAgICAgICAgJ2JkaWMnOiAgICAgICAgJ2ZpbGUnLAotICAgICAgICAnYnVuZGxlJzogICAgICAnd3JhcHBlci5jZmJ1bmRsZScsCi0gICAgICAgICdjJzogICAgICAgICAgICdzb3VyY2Vjb2RlLmMuYycsCi0gICAgICAgICdjYyc6ICAgICAgICAgICdzb3VyY2Vjb2RlLmNwcC5jcHAnLAotICAgICAgICAnY3BwJzogICAgICAgICAnc291cmNlY29kZS5jcHAuY3BwJywKLSAgICAgICAgJ2Nzcyc6ICAgICAgICAgJ3RleHQuY3NzJywKLSAgICAgICAgJ2N4eCc6ICAgICAgICAgJ3NvdXJjZWNvZGUuY3BwLmNwcCcsCi0gICAgICAgICdkeWxpYic6ICAgICAgICdjb21waWxlZC5tYWNoLW8uZHlsaWInLAotICAgICAgICAnZnJhbWV3b3JrJzogICAnd3JhcHBlci5mcmFtZXdvcmsnLAotICAgICAgICAnaCc6ICAgICAgICAgICAnc291cmNlY29kZS5jLmgnLAotICAgICAgICAnaHh4JzogICAgICAgICAnc291cmNlY29kZS5jcHAuaCcsCi0gICAgICAgICdpY25zJzogICAgICAgICdpbWFnZS5pY25zJywKLSAgICAgICAgJ2phdmEnOiAgICAgICAgJ3NvdXJjZWNvZGUuamF2YScsCi0gICAgICAgICdqcyc6ICAgICAgICAgICdzb3VyY2Vjb2RlLmphdmFzY3JpcHQnLAotICAgICAgICAnbSc6ICAgICAgICAgICAnc291cmNlY29kZS5jLm9iamMnLAotICAgICAgICAnbW0nOiAgICAgICAgICAnc291cmNlY29kZS5jcHAub2JqY3BwJywKLSAgICAgICAgJ25pYic6ICAgICAgICAgJ3dyYXBwZXIubmliJywKLSAgICAgICAgJ28nOiAgICAgICAgICAgJ2NvbXBpbGVkLm1hY2gtby5vYmpmaWxlJywKLSAgICAgICAgJ3BkZic6ICAgICAgICAgJ2ltYWdlLnBkZicsCi0gICAgICAgICdwbCc6ICAgICAgICAgICd0ZXh0LnNjcmlwdC5wZXJsJywKLSAgICAgICAgJ3BsaXN0JzogICAgICAgJ3RleHQucGxpc3QueG1sJywKLSAgICAgICAgJ3BtJzogICAgICAgICAgJ3RleHQuc2NyaXB0LnBlcmwnLAotICAgICAgICAncG5nJzogICAgICAgICAnaW1hZ2UucG5nJywKLSAgICAgICAgJ3B5JzogICAgICAgICAgJ3RleHQuc2NyaXB0LnB5dGhvbicsCi0gICAgICAgICdyJzogICAgICAgICAgICdzb3VyY2Vjb2RlLnJleicsCi0gICAgICAgICdyZXonOiAgICAgICAgICdzb3VyY2Vjb2RlLnJleicsCi0gICAgICAgICdzJzogICAgICAgICAgICdzb3VyY2Vjb2RlLmFzbScsCi0gICAgICAgICdzdHJpbmdzJzogICAgICd0ZXh0LnBsaXN0LnN0cmluZ3MnLAotICAgICAgICAndHRmJzogICAgICAgICAnZmlsZScsCi0gICAgICAgICd4Y2NvbmZpZyc6ICAgICd0ZXh0LnhjY29uZmlnJywKLSAgICAgICAgJ3hjZGF0YW1vZGVsJzogJ3dyYXBwZXIueGNkYXRhbW9kZWwnLAotICAgICAgICAneGliJzogICAgICAgICAnZmlsZS54aWInLAotICAgICAgICAneSc6ICAgICAgICAgICAnc291cmNlY29kZS55YWNjJywKLSAgICAgIH0KLQotICAgICAgaWYgaXNfZGlyOgotICAgICAgICBmaWxlX3R5cGUgPSAnZm9sZGVyJwotICAgICAgZWxzZToKLSAgICAgICAgYmFzZW5hbWUgPSBwb3NpeHBhdGguYmFzZW5hbWUoc2VsZi5fcHJvcGVydGllc1sncGF0aCddKQotICAgICAgICAocm9vdCwgZXh0KSA9IHBvc2l4cGF0aC5zcGxpdGV4dChiYXNlbmFtZSkKLSAgICAgICAgIyBDaGVjayB0aGUgbWFwIHVzaW5nIGEgbG93ZXJjYXNlIGV4dGVuc2lvbi4KLSAgICAgICAgIyBUT0RPKG1hcmspOiBNYXliZSBpdCBzaG91bGQgdHJ5IHdpdGggdGhlIG9yaWdpbmFsIGNhc2UgZmlyc3QgYW5kIGZhbGwKLSAgICAgICAgIyBiYWNrIHRvIGxvd2VyY2FzZSwgaW4gY2FzZSB0aGVyZSBhcmUgYW55IGluc3RhbmNlcyB3aGVyZSBjYXNlCi0gICAgICAgICMgbWF0dGVycy4gIFRoZXJlIGN1cnJlbnRseSBhcmVuJ3QuCi0gICAgICAgIGlmIGV4dCAhPSAnJzoKLSAgICAgICAgICBleHQgPSBleHRbMTpdLmxvd2VyKCkKLQotICAgICAgICAjIFRPRE8obWFyayk6ICJ0ZXh0IiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0ICJmaWxlIiBpcyBhcHByb3ByaWF0ZQotICAgICAgICAjIGZvciB1bnJlY29nbml6ZWQgZmlsZXMgbm90IGNvbnRhaW5pbmcgdGV4dC4gIFhjb2RlIHNlZW1zIHRvIGNob29zZQotICAgICAgICAjIGJhc2VkIG9uIGNvbnRlbnQuCi0gICAgICAgIGZpbGVfdHlwZSA9IGV4dGVuc2lvbl9tYXAuZ2V0KGV4dCwgJ3RleHQnKQotCi0gICAgICBzZWxmLl9wcm9wZXJ0aWVzWydsYXN0S25vd25GaWxlVHlwZSddID0gZmlsZV90eXBlCi0KLQotY2xhc3MgUEJYVmFyaWFudEdyb3VwKFBCWEdyb3VwLCBYQ0ZpbGVMaWtlRWxlbWVudCk6Ci0gICIiIlBCWFZhcmlhbnRHcm91cCBpcyB1c2VkIGJ5IFhjb2RlIHRvIHJlcHJlc2VudCBsb2NhbGl6YXRpb25zLiIiIgotICAjIE5vIGFkZGl0aW9ucyB0byB0aGUgc2NoZW1hIHJlbGF0aXZlIHRvIFBCWEdyb3VwLgotICBwYXNzCi0KLQotIyBQQlhSZWZlcmVuY2VQcm94eSBpcyBhbHNvIGFuIFhDRmlsZUxpa2VFbGVtZW50IHN1YmNsYXNzLiAgSXQgaXMgZGVmaW5lZCBiZWxvdwotIyBiZWNhdXNlIGl0IHVzZXMgUEJYQ29udGFpbmVySXRlbVByb3h5LCBkZWZpbmVkIGJlbG93LgotCi0KLWNsYXNzIFhDQnVpbGRDb25maWd1cmF0aW9uKFhDT2JqZWN0KToKLSAgX3NjaGVtYSA9IFhDT2JqZWN0Ll9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UnOiBbMCwgUEJYRmlsZVJlZmVyZW5jZSwgMCwgMF0sCi0gICAgJ2J1aWxkU2V0dGluZ3MnOiAgICAgICAgICAgICAgWzAsIGRpY3QsIDAsIDEsIHt9XSwKLSAgICAnbmFtZSc6ICAgICAgICAgICAgICAgICAgICAgICBbMCwgc3RyLCAgMCwgMV0sCi0gIH0pCi0KLSAgZGVmIEhhc0J1aWxkU2V0dGluZyhzZWxmLCBrZXkpOgotICAgIHJldHVybiBrZXkgaW4gc2VsZi5fcHJvcGVydGllc1snYnVpbGRTZXR0aW5ncyddCi0KLSAgZGVmIEdldEJ1aWxkU2V0dGluZyhzZWxmLCBrZXkpOgotICAgIHJldHVybiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFNldHRpbmdzJ11ba2V5XQotCi0gIGRlZiBTZXRCdWlsZFNldHRpbmcoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgIyBUT0RPKG1hcmspOiBJZiBhIGxpc3QsIGNvcHk/Ci0gICAgc2VsZi5fcHJvcGVydGllc1snYnVpbGRTZXR0aW5ncyddW2tleV0gPSB2YWx1ZQotCi0gIGRlZiBBcHBlbmRCdWlsZFNldHRpbmcoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgaWYgbm90IGtleSBpbiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFNldHRpbmdzJ106Ci0gICAgICBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFNldHRpbmdzJ11ba2V5XSA9IFtdCi0gICAgc2VsZi5fcHJvcGVydGllc1snYnVpbGRTZXR0aW5ncyddW2tleV0uYXBwZW5kKHZhbHVlKQotCi0gIGRlZiBEZWxCdWlsZFNldHRpbmcoc2VsZiwga2V5KToKLSAgICBpZiBrZXkgaW4gc2VsZi5fcHJvcGVydGllc1snYnVpbGRTZXR0aW5ncyddOgotICAgICAgZGVsIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkU2V0dGluZ3MnXVtrZXldCi0KLSAgZGVmIFNldEJhc2VDb25maWd1cmF0aW9uKHNlbGYsIHZhbHVlKToKLSAgICBzZWxmLl9wcm9wZXJ0aWVzWydiYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSddID0gdmFsdWUKLQotY2xhc3MgWENDb25maWd1cmF0aW9uTGlzdChYQ09iamVjdCk6Ci0gICMgX2NvbmZpZ3MgaXMgdGhlIGRlZmF1bHQgbGlzdCBvZiBjb25maWd1cmF0aW9ucy4KLSAgX2NvbmZpZ3MgPSBbIFhDQnVpbGRDb25maWd1cmF0aW9uKHsnbmFtZSc6ICdEZWJ1Zyd9KSwKLSAgICAgICAgICAgICAgIFhDQnVpbGRDb25maWd1cmF0aW9uKHsnbmFtZSc6ICdSZWxlYXNlJ30pIF0KLQotICBfc2NoZW1hID0gWENPYmplY3QuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICdidWlsZENvbmZpZ3VyYXRpb25zJzogICAgICAgICAgIFsxLCBYQ0J1aWxkQ29uZmlndXJhdGlvbiwgMSwgMSwgX2NvbmZpZ3NdLAotICAgICdkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSc6IFswLCBpbnQsICAgICAgICAgICAgICAgICAgMCwgMSwgMV0sCi0gICAgJ2RlZmF1bHRDb25maWd1cmF0aW9uTmFtZSc6ICAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAgICAwLCAxLCAnUmVsZWFzZSddLAotICB9KQotCi0gIGRlZiBOYW1lKHNlbGYpOgotICAgIHJldHVybiAnQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciAnICsgXAotICAgICAgICAgICBzZWxmLnBhcmVudC5fX2NsYXNzX18uX19uYW1lX18gKyAnICInICsgc2VsZi5wYXJlbnQuTmFtZSgpICsgJyInCi0KLSAgZGVmIENvbmZpZ3VyYXRpb25OYW1lZChzZWxmLCBuYW1lKToKLSAgICAiIiJDb252ZW5pZW5jZSBhY2Nlc3NvciB0byBvYnRhaW4gYW4gWENCdWlsZENvbmZpZ3VyYXRpb24gYnkgbmFtZS4iIiIKLSAgICBmb3IgY29uZmlndXJhdGlvbiBpbiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25zJ106Ci0gICAgICBpZiBjb25maWd1cmF0aW9uLl9wcm9wZXJ0aWVzWyduYW1lJ10gPT0gbmFtZToKLSAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb24KLQotICAgIHJhaXNlIEtleUVycm9yLCBuYW1lCi0KLSAgZGVmIERlZmF1bHRDb25maWd1cmF0aW9uKHNlbGYpOgotICAgICIiIkNvbnZlbmllbmNlIGFjY2Vzc29yIHRvIG9idGFpbiB0aGUgZGVmYXVsdCBYQ0J1aWxkQ29uZmlndXJhdGlvbi4iIiIKLSAgICByZXR1cm4gc2VsZi5Db25maWd1cmF0aW9uTmFtZWQoc2VsZi5fcHJvcGVydGllc1snZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lJ10pCi0KLSAgZGVmIEhhc0J1aWxkU2V0dGluZyhzZWxmLCBrZXkpOgotICAgICIiIkRldGVybWluZXMgdGhlIHN0YXRlIG9mIGEgYnVpbGQgc2V0dGluZyBpbiBhbGwgWENCdWlsZENvbmZpZ3VyYXRpb24KLSAgICBjaGlsZCBvYmplY3RzLgotCi0gICAgSWYgYWxsIGNoaWxkIG9iamVjdHMgaGF2ZSBrZXkgaW4gdGhlaXIgYnVpbGQgc2V0dGluZ3MsIGFuZCB0aGUgdmFsdWUgaXMgdGhlCi0gICAgc2FtZSBpbiBhbGwgY2hpbGQgb2JqZWN0cywgcmV0dXJucyAxLgotCi0gICAgSWYgbm8gY2hpbGQgb2JqZWN0cyBoYXZlIHRoZSBrZXkgaW4gdGhlaXIgYnVpbGQgc2V0dGluZ3MsIHJldHVybnMgMC4KLQotICAgIElmIHNvbWUsIGJ1dCBub3QgYWxsLCBjaGlsZCBvYmplY3RzIGhhdmUgdGhlIGtleSBpbiB0aGVpciBidWlsZCBzZXR0aW5ncywKLSAgICBvciBpZiBhbnkgY2hpbGRyZW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUga2V5LCByZXR1cm5zIC0xLgotICAgICIiIgotCi0gICAgaGFzID0gTm9uZQotICAgIHZhbHVlID0gTm9uZQotICAgIGZvciBjb25maWd1cmF0aW9uIGluIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbnMnXToKLSAgICAgIGNvbmZpZ3VyYXRpb25faGFzID0gY29uZmlndXJhdGlvbi5IYXNCdWlsZFNldHRpbmcoa2V5KQotICAgICAgaWYgaGFzIGlzIE5vbmU6Ci0gICAgICAgIGhhcyA9IGNvbmZpZ3VyYXRpb25faGFzCi0gICAgICBlbGlmIGhhcyAhPSBjb25maWd1cmF0aW9uX2hhczoKLSAgICAgICAgcmV0dXJuIC0xCi0KLSAgICAgIGlmIGNvbmZpZ3VyYXRpb25faGFzOgotICAgICAgICBjb25maWd1cmF0aW9uX3ZhbHVlID0gY29uZmlndXJhdGlvbi5HZXRCdWlsZFNldHRpbmcoa2V5KQotICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgIHZhbHVlID0gY29uZmlndXJhdGlvbl92YWx1ZQotICAgICAgICBlbGlmIHZhbHVlICE9IGNvbmZpZ3VyYXRpb25fdmFsdWU6Ci0gICAgICAgICAgcmV0dXJuIC0xCi0KLSAgICBpZiBub3QgaGFzOgotICAgICAgcmV0dXJuIDAKLQotICAgIHJldHVybiAxCi0KLSAgZGVmIEdldEJ1aWxkU2V0dGluZyhzZWxmLCBrZXkpOgotICAgICIiIkdldHMgdGhlIGJ1aWxkIHNldHRpbmcgZm9yIGtleS4KLQotICAgIEFsbCBjaGlsZCBYQ0NvbmZpZ3VyYXRpb24gb2JqZWN0cyBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUgc2V0IGZvciB0aGUKLSAgICBzZXR0aW5nLCBvciBhIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQuCi0gICAgIiIiCi0KLSAgICAjIFRPRE8obWFyayk6IFRoaXMgaXMgd3JvbmcgZm9yIGJ1aWxkIHNldHRpbmdzIHRoYXQgYXJlIGxpc3RzLiAgVGhlIGxpc3QKLSAgICAjIGNvbnRlbnRzIHNob3VsZCBiZSBjb21wYXJlZCAoYW5kIGEgbGlzdCBjb3B5IHJldHVybmVkPykKLQotICAgIHZhbHVlID0gTm9uZQotICAgIGZvciBjb25maWd1cmF0aW9uIGluIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbnMnXToKLSAgICAgIGNvbmZpZ3VyYXRpb25fdmFsdWUgPSBjb25maWd1cmF0aW9uLkdldEJ1aWxkU2V0dGluZyhrZXkpCi0gICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICB2YWx1ZSA9IGNvbmZpZ3VyYXRpb25fdmFsdWUKLSAgICAgIGVsc2U6Ci0gICAgICAgIGlmIHZhbHVlICE9IGNvbmZpZ3VyYXRpb25fdmFsdWU6Ci0gICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ1ZhcmlhbnQgdmFsdWVzIGZvciAnICsga2V5Ci0KLSAgICByZXR1cm4gdmFsdWUKLQotICBkZWYgU2V0QnVpbGRTZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICIiIlNldHMgdGhlIGJ1aWxkIHNldHRpbmcgZm9yIGtleSB0byB2YWx1ZSBpbiBhbGwgY2hpbGQKLSAgICBYQ0J1aWxkQ29uZmlndXJhdGlvbiBvYmplY3RzLgotICAgICIiIgotCi0gICAgZm9yIGNvbmZpZ3VyYXRpb24gaW4gc2VsZi5fcHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9ucyddOgotICAgICAgY29uZmlndXJhdGlvbi5TZXRCdWlsZFNldHRpbmcoa2V5LCB2YWx1ZSkKLQotICBkZWYgQXBwZW5kQnVpbGRTZXR0aW5nKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICIiIkFwcGVuZHMgdmFsdWUgdG8gdGhlIGJ1aWxkIHNldHRpbmcgZm9yIGtleSwgd2hpY2ggaXMgdHJlYXRlZCBhcyBhIGxpc3QsCi0gICAgaW4gYWxsIGNoaWxkIFhDQnVpbGRDb25maWd1cmF0aW9uIG9iamVjdHMuCi0gICAgIiIiCi0KLSAgICBmb3IgY29uZmlndXJhdGlvbiBpbiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25zJ106Ci0gICAgICBjb25maWd1cmF0aW9uLkFwcGVuZEJ1aWxkU2V0dGluZyhrZXksIHZhbHVlKQotCi0gIGRlZiBEZWxCdWlsZFNldHRpbmcoc2VsZiwga2V5KToKLSAgICAiIiJEZWxldGVzIHRoZSBidWlsZCBzZXR0aW5nIGtleSBmcm9tIGFsbCBjaGlsZCBYQ0J1aWxkQ29uZmlndXJhdGlvbgotICAgIG9iamVjdHMuCi0gICAgIiIiCi0KLSAgICBmb3IgY29uZmlndXJhdGlvbiBpbiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25zJ106Ci0gICAgICBjb25maWd1cmF0aW9uLkRlbEJ1aWxkU2V0dGluZyhrZXkpCi0KLSAgZGVmIFNldEJhc2VDb25maWd1cmF0aW9uKHNlbGYsIHZhbHVlKToKLSAgICAiIiJTZXRzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGluIGFsbCBjaGlsZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBvYmplY3RzLgotICAgICIiIgotCi0gICAgZm9yIGNvbmZpZ3VyYXRpb24gaW4gc2VsZi5fcHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9ucyddOgotICAgICAgY29uZmlndXJhdGlvbi5TZXRCYXNlQ29uZmlndXJhdGlvbih2YWx1ZSkKLQotCi1jbGFzcyBQQlhCdWlsZEZpbGUoWENPYmplY3QpOgotICBfc2NoZW1hID0gWENPYmplY3QuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICdmaWxlUmVmJzogIFswLCBYQ0ZpbGVMaWtlRWxlbWVudCwgMCwgMV0sCi0gICAgJ3NldHRpbmdzJzogWzAsIHN0ciwgICAgICAgICAgICAgICAwLCAwXSwgICMgaGFjaywgaXQncyBhIGRpY3QKLSAgfSkKLQotICAjIFdlaXJkIG91dHB1dCBydWxlcyBmb3IgUEJYQnVpbGRGaWxlLgotICBfc2hvdWxkX3ByaW50X3NpbmdsZV9saW5lID0gVHJ1ZQotICBfZW5jb2RlX3RyYW5zZm9ybXMgPSBYQ09iamVjdC5fYWx0ZXJuYXRlX2VuY29kZV90cmFuc2Zvcm1zCi0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgIyBFeGFtcGxlOiAibWFpbi5jYyBpbiBTb3VyY2VzIgotICAgIHJldHVybiBzZWxmLl9wcm9wZXJ0aWVzWydmaWxlUmVmJ10uTmFtZSgpICsgJyBpbiAnICsgc2VsZi5wYXJlbnQuTmFtZSgpCi0KLSAgZGVmIEhhc2hhYmxlcyhzZWxmKToKLSAgICAjIHN1cGVyCi0gICAgaGFzaGFibGVzID0gWENPYmplY3QuSGFzaGFibGVzKHNlbGYpCi0KLSAgICAjIEl0IGlzIG5vdCBzdWZmaWNpZW50IHRvIGp1c3QgcmVseSBvbiBOYW1lKCkgdG8gZ2V0IHRoZQotICAgICMgWENGaWxlTGlrZUVsZW1lbnQncyBuYW1lLCBiZWNhdXNlIHRoYXQgaXMgbm90IGEgY29tcGxldGUgcGF0aG5hbWUuCi0gICAgIyBQYXRoSGFzaGFibGVzIHJldHVybnMgaGFzaGFibGVzIHVuaXF1ZSBlbm91Z2ggdGhhdCBubyB0d28KLSAgICAjIFBCWEJ1aWxkRmlsZXMgc2hvdWxkIHdpbmQgdXAgd2l0aCB0aGUgc2FtZSBzZXQgb2YgaGFzaGFibGVzLCB1bmxlc3MKLSAgICAjIHNvbWVvbmUgYWRkcyB0aGUgc2FtZSBmaWxlIG11bHRpcGxlIHRpbWVzIHRvIHRoZSBzYW1lIHRhcmdldC4gIFRoYXQKLSAgICAjIHdvdWxkIGJlIGNvbnNpZGVyZWQgaW52YWxpZCBhbnl3YXkuCi0gICAgaGFzaGFibGVzLmV4dGVuZChzZWxmLl9wcm9wZXJ0aWVzWydmaWxlUmVmJ10uUGF0aEhhc2hhYmxlcygpKQotCi0gICAgcmV0dXJuIGhhc2hhYmxlcwotCi0KLWNsYXNzIFhDQnVpbGRQaGFzZShYQ09iamVjdCk6Ci0gICIiIkFic3RyYWN0IGJhc2UgZm9yIGJ1aWxkIHBoYXNlIGNsYXNzZXMuICBOb3QgcmVwcmVzZW50ZWQgaW4gYSBwcm9qZWN0Ci0gIGZpbGUuCi0KLSAgQXR0cmlidXRlczoKLSAgICBfZmlsZXNfYnlfcGF0aDogQSBkaWN0IG1hcHBpbmcgZWFjaCBwYXRoIG9mIGEgY2hpbGQgaW4gdGhlIGZpbGVzIGxpc3QgYnkKLSAgICAgIHBhdGggKGtleXMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIFBCWEJ1aWxkRmlsZSBjaGlsZHJlbiAodmFsdWVzKS4KLSAgICBfZmlsZXNfYnlfeGNmaWxlbGlrZWVsZW1lbnQ6IEEgZGljdCBtYXBwaW5nIGVhY2ggWENGaWxlTGlrZUVsZW1lbnQgKGtleXMpCi0gICAgICB0byB0aGUgY29ycmVzcG9uZGluZyBQQlhCdWlsZEZpbGUgY2hpbGRyZW4gKHZhbHVlcykuCi0gICIiIgotCi0gICMgVE9ETyhtYXJrKTogU29tZSBidWlsZCBwaGFzZSB0eXBlcywgbGlrZSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2UsIGRvbid0Ci0gICMgYWN0dWFsbHkgaGF2ZSBhICJmaWxlcyIgbGlzdC4gIFhDQnVpbGRQaGFzZSBzaG91bGQgbm90IGhhdmUgImZpbGVzIiBidXQKLSAgIyBhbm90aGVyIGFic3RyYWN0IHN1YmNsYXNzIG9mIGl0IHNob3VsZCBwcm92aWRlIHRoaXMsIGFuZCBjb25jcmV0ZSBidWlsZAotICAjIHBoYXNlIHR5cGVzIHRoYXQgZG8gaGF2ZSAiZmlsZXMiIGxpc3RzIHNob3VsZCBiZSBkZXJpdmVkIGZyb20gdGhhdCBuZXcKLSAgIyBhYnN0cmFjdCBzdWJjbGFzcy4gIFhDQnVpbGRQaGFzZSBzaG91bGQgb25seSBwcm92aWRlIGJ1aWxkQWN0aW9uTWFzayBhbmQKLSAgIyBydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nLCBhbmQgbm90IGZpbGVzIG9yIHRoZSB2YXJpb3VzCi0gICMgZmlsZS1yZWxhdGVkIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMuCi0KLSAgX3NjaGVtYSA9IFhDT2JqZWN0Ll9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnYnVpbGRBY3Rpb25NYXNrJzogICAgICAgICAgICAgICAgICAgIFswLCBpbnQsICAgICAgICAgIDAsIDEsIDB4N2ZmZmZmZmZdLAotICAgICdmaWxlcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIFBCWEJ1aWxkRmlsZSwgMSwgMSwgW11dLAotICAgICdydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nJzogWzAsIGludCwgICAgICAgICAgMCwgMSwgMF0sCi0gIH0pCi0KLSAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnRpZXM9Tm9uZSwgaWQ9Tm9uZSwgcGFyZW50PU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ09iamVjdC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotCi0gICAgc2VsZi5fZmlsZXNfYnlfcGF0aCA9IHt9Ci0gICAgc2VsZi5fZmlsZXNfYnlfeGNmaWxlbGlrZWVsZW1lbnQgPSB7fQotICAgIGZvciBwYnhidWlsZGZpbGUgaW4gc2VsZi5fcHJvcGVydGllcy5nZXQoJ2ZpbGVzJywgW10pOgotICAgICAgc2VsZi5fQWRkQnVpbGRGaWxlVG9EaWN0cyhwYnhidWlsZGZpbGUpCi0KLSAgZGVmIEZpbGVHcm91cChzZWxmLCBwYXRoKToKLSAgICAjIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSB0aGlzIGJ5IHJldHVybmluZyBhIHR3by1lbGVtZW50IHR1cGxlLiAgVGhlCi0gICAgIyBmaXJzdCBpdGVtIGluIHRoZSB0dXBsZSBzaG91bGQgYmUgdGhlIFBCWEdyb3VwIHRvIHdoaWNoICJwYXRoIiBzaG91bGQgYmUKLSAgICAjIGFkZGVkLCBlaXRoZXIgYXMgYSBjaGlsZCBvciBkZWVwZXIgZGVzY2VuZGFudC4gIFRoZSBzZWNvbmQgaXRlbSBzaG91bGQKLSAgICAjIGJlIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgZmlsZXMgc2hvdWxkIGJlIGFkZGVkIGludG8gaGllcmFyY2hpY2FsCi0gICAgIyBncm91cHMgb3Igb25lIHNpbmdsZSBmbGF0IGdyb3VwLgotICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsIFwKLSAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcgbXVzdCBpbXBsZW1lbnQgRmlsZUdyb3VwJwotCi0gIGRlZiBfQWRkUGF0aFRvRGljdChzZWxmLCBwYnhidWlsZGZpbGUsIHBhdGgpOgotICAgICIiIkFkZHMgcGF0aCB0byB0aGUgZGljdCB0cmFja2luZyBwYXRocyBiZWxvbmdpbmcgdG8gdGhpcyBidWlsZCBwaGFzZS4KLQotICAgIElmIHRoZSBwYXRoIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhpcyBidWlsZCBwaGFzZSwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLSAgICAiIiIKLQotICAgIGlmIHBhdGggaW4gc2VsZi5fZmlsZXNfYnlfcGF0aDoKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdGb3VuZCBtdWx0aXBsZSBidWlsZCBmaWxlcyB3aXRoIHBhdGggJyArIHBhdGgKLSAgICBzZWxmLl9maWxlc19ieV9wYXRoW3BhdGhdID0gcGJ4YnVpbGRmaWxlCi0KLSAgZGVmIF9BZGRCdWlsZEZpbGVUb0RpY3RzKHNlbGYsIHBieGJ1aWxkZmlsZSwgcGF0aD1Ob25lKToKLSAgICAiIiJNYWludGFpbnMgdGhlIF9maWxlc19ieV9wYXRoIGFuZCBfZmlsZXNfYnlfeGNmaWxlbGlrZWVsZW1lbnQgZGljdHMuCi0KLSAgICBJZiBwYXRoIGlzIHNwZWNpZmllZCwgdGhlbiBpdCBpcyB0aGUgcGF0aCB0aGF0IGlzIGJlaW5nIGFkZGVkIHRvIHRoZQotICAgIHBoYXNlLCBhbmQgcGJ4YnVpbGRmaWxlIG11c3QgY29udGFpbiBlaXRoZXIgYSBQQlhGaWxlUmVmZXJlbmNlIGRpcmVjdGx5Ci0gICAgcmVmZXJlbmNpbmcgdGhhdCBwYXRoLCBvciBpdCBtdXN0IGNvbnRhaW4gYSBQQlhWYXJpYW50R3JvdXAgdGhhdCBpdHNlbGYKLSAgICBjb250YWlucyBhIFBCWEZpbGVSZWZlcmVuY2UgcmVmZXJlbmNpbmcgdGhlIHBhdGguCi0KLSAgICBJZiBwYXRoIGlzIG5vdCBzcGVjaWZpZWQsIGVpdGhlciB0aGUgUEJYRmlsZVJlZmVyZW5jZSdzIHBhdGggb3IgdGhlIHBhdGhzCi0gICAgb2YgYWxsIGNoaWxkcmVuIG9mIHRoZSBQQlhWYXJpYW50R3JvdXAgYXJlIHRha2VuIGFzIGJlaW5nIGFkZGVkIHRvIHRoZQotICAgIHBoYXNlLgotCi0gICAgSWYgdGhlIHBhdGggaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwaGFzZSwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotICAgIElmIHRoZSBQQlhGaWxlUmVmZXJlbmNlIG9yIFBCWFZhcmlhbnRHcm91cCByZWZlcmVuY2VkIGJ5IHBieGJ1aWxkZmlsZQotICAgIGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHBoYXNlLCByZWZlcmVuY2VkIGJ5IGEgZGlmZmVyZW50IFBCWEJ1aWxkRmlsZQotICAgIG9iamVjdCwgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFRoaXMgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4KLSAgICBhIFBCWEZpbGVSZWZlcmVuY2Ugb3IgUEJYVmFyaWFudEdyb3VwIHJlYXBwZWFyIGFuZCBhcmUgcmVmZXJlbmNlZCBieSB0aGUKLSAgICBzYW1lIFBCWEJ1aWxkRmlsZSB0aGF0IGhhcyBhbHJlYWR5IGludHJvZHVjZWQgdGhlbSwgYmVjYXVzZSBpbiB0aGUgY2FzZQotICAgIG9mIFBCWFZhcmlhbnRHcm91cCBvYmplY3RzLCB0aGV5IG1heSBjb3JyZXNwb25kIHRvIG11bHRpcGxlIHBhdGhzIHRoYXQgYXJlCi0gICAgbm90IGFsbCBhZGRlZCBzaW11bHRhbmVvdXNseS4gIFdoZW4gdGhpcyBzaXR1YXRpb24gb2NjdXJzLCB0aGUgcGF0aCBuZWVkcwotICAgIHRvIGJlIGFkZGVkIHRvIF9maWxlc19ieV9wYXRoLCBidXQgbm90aGluZyBuZWVkcyB0byBjaGFuZ2UgaW4KLSAgICBfZmlsZXNfYnlfeGNmaWxlbGlrZWVsZW1lbnQsIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBoYXZlIGF2b2lkZWQgYWRkaW5nCi0gICAgdGhlIFBCWEJ1aWxkRmlsZSBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgY2hpbGRyZW4uCi0gICAgIiIiCi0KLSAgICB4Y2ZpbGVsaWtlZWxlbWVudCA9IHBieGJ1aWxkZmlsZS5fcHJvcGVydGllc1snZmlsZVJlZiddCi0KLSAgICBwYXRocyA9IFtdCi0gICAgaWYgcGF0aCAhPSBOb25lOgotICAgICAgIyBJdCdzIGJlc3Qgd2hlbiB0aGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBwYXRoLgotICAgICAgaWYgaXNpbnN0YW5jZSh4Y2ZpbGVsaWtlZWxlbWVudCwgUEJYVmFyaWFudEdyb3VwKToKLSAgICAgICAgcGF0aHMuYXBwZW5kKHBhdGgpCi0gICAgZWxzZToKLSAgICAgICMgSWYgdGhlIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSBhIHBhdGgsIHRoZXJlIGNhbiBiZSBlaXRoZXIgbXVsdGlwbGUKLSAgICAgICMgcGF0aHMgKFBCWFZhcmlhbnRHcm91cCkgb3Igb25lLgotICAgICAgaWYgaXNpbnN0YW5jZSh4Y2ZpbGVsaWtlZWxlbWVudCwgUEJYVmFyaWFudEdyb3VwKToKLSAgICAgICAgZm9yIHZhcmlhbnQgaW4geGNmaWxlbGlrZWVsZW1lbnQuX3Byb3BlcnRpZXNbJ2NoaWxkcmVuJ106Ci0gICAgICAgICAgcGF0aHMuYXBwZW5kKHZhcmlhbnQuRnVsbFBhdGgoKSkKLSAgICAgIGVsc2U6Ci0gICAgICAgIHBhdGhzLmFwcGVuZCh4Y2ZpbGVsaWtlZWxlbWVudC5GdWxsUGF0aCgpKQotCi0gICAgIyBBZGQgdGhlIHBhdGhzIGZpcnN0LCBiZWNhdXNlIGlmIHNvbWV0aGluZydzIGdvaW5nIHRvIHJhaXNlLCB0aGUKLSAgICAjIG1lc3NhZ2VzIHByb3ZpZGVkIGJ5IF9BZGRQYXRoVG9EaWN0IGFyZSBtb3JlIHVzZWZ1bCBvd2luZyB0byBpdHMKLSAgICAjIGhhdmluZyBhY2Nlc3MgdG8gYSByZWFsIHBhdGhuYW1lIGFuZCBub3QganVzdCBhbiBvYmplY3QncyBOYW1lKCkuCi0gICAgZm9yIGFfcGF0aCBpbiBwYXRoczoKLSAgICAgIHNlbGYuX0FkZFBhdGhUb0RpY3QocGJ4YnVpbGRmaWxlLCBhX3BhdGgpCi0KLSAgICAjIElmIGFub3RoZXIgUEJYQnVpbGRGaWxlIHJlZmVyZW5jZXMgdGhpcyBYQ0ZpbGVMaWtlRWxlbWVudCwgdGhlcmUncyBhCi0gICAgIyBwcm9ibGVtLgotICAgIGlmIHhjZmlsZWxpa2VlbGVtZW50IGluIHNlbGYuX2ZpbGVzX2J5X3hjZmlsZWxpa2VlbGVtZW50IGFuZCBcCi0gICAgICAgc2VsZi5fZmlsZXNfYnlfeGNmaWxlbGlrZWVsZW1lbnRbeGNmaWxlbGlrZWVsZW1lbnRdICE9IHBieGJ1aWxkZmlsZToKLSAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdGb3VuZCBtdWx0aXBsZSBidWlsZCBmaWxlcyBmb3IgJyArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhjZmlsZWxpa2VlbGVtZW50Lk5hbWUoKQotICAgIHNlbGYuX2ZpbGVzX2J5X3hjZmlsZWxpa2VlbGVtZW50W3hjZmlsZWxpa2VlbGVtZW50XSA9IHBieGJ1aWxkZmlsZQotCi0gIGRlZiBBcHBlbmRCdWlsZEZpbGUoc2VsZiwgcGJ4YnVpbGRmaWxlLCBwYXRoPU5vbmUpOgotICAgICMgQ2FsbGVycyBzaG91bGQgdXNlIHRoaXMgaW5zdGVhZCBvZiBjYWxsaW5nCi0gICAgIyBBcHBlbmRQcm9wZXJ0eSgnZmlsZXMnLCBwYnhidWlsZGZpbGUpIGRpcmVjdGx5IGJlY2F1c2UgdGhpcyBmdW5jdGlvbgotICAgICMgbWFpbnRhaW5zIHRoZSBvYmplY3QncyBkaWN0cy4gIEJldHRlciB5ZXQsIGNhbGxlcnMgY2FuIGp1c3QgY2FsbCBBZGRGaWxlCi0gICAgIyB3aXRoIGEgcGF0aG5hbWUgYW5kIG5vdCB3b3JyeSBhYm91dCBidWlsZGluZyB0aGVpciBvd24gUEJYQnVpbGRGaWxlCi0gICAgIyBvYmplY3RzLgotICAgIHNlbGYuQXBwZW5kUHJvcGVydHkoJ2ZpbGVzJywgcGJ4YnVpbGRmaWxlKQotICAgIHNlbGYuX0FkZEJ1aWxkRmlsZVRvRGljdHMocGJ4YnVpbGRmaWxlLCBwYXRoKQotCi0gIGRlZiBBZGRGaWxlKHNlbGYsIHBhdGgsIHNldHRpbmdzPU5vbmUpOgotICAgIChmaWxlX2dyb3VwLCBoaWVyYXJjaGljYWwpID0gc2VsZi5GaWxlR3JvdXAocGF0aCkKLSAgICBmaWxlX3JlZiA9IGZpbGVfZ3JvdXAuQWRkT3JHZXRGaWxlQnlQYXRoKHBhdGgsIGhpZXJhcmNoaWNhbCkKLQotICAgIGlmIGZpbGVfcmVmIGluIHNlbGYuX2ZpbGVzX2J5X3hjZmlsZWxpa2VlbGVtZW50IGFuZCBcCi0gICAgICAgaXNpbnN0YW5jZShmaWxlX3JlZiwgUEJYVmFyaWFudEdyb3VwKToKLSAgICAgICMgVGhlcmUncyBhbHJlYWR5IGEgUEJYQnVpbGRGaWxlIGluIHRoaXMgcGhhc2UgY29ycmVzcG9uZGluZyB0byB0aGUKLSAgICAgICMgUEJYVmFyaWFudEdyb3VwLiAgcGF0aCBqdXN0IHByb3ZpZGVzIGEgbmV3IHZhcmlhbnQgdGhhdCBiZWxvbmdzIHRvCi0gICAgICAjIHRoZSBncm91cC4gIEFkZCB0aGUgcGF0aCB0byB0aGUgZGljdC4KLSAgICAgIHBieGJ1aWxkZmlsZSA9IHNlbGYuX2ZpbGVzX2J5X3hjZmlsZWxpa2VlbGVtZW50W2ZpbGVfcmVmXQotICAgICAgc2VsZi5fQWRkQnVpbGRGaWxlVG9EaWN0cyhwYnhidWlsZGZpbGUsIHBhdGgpCi0gICAgZWxzZToKLSAgICAgICMgQWRkIGEgbmV3IFBCWEJ1aWxkRmlsZSB0byBnZXQgZmlsZV9yZWYgaW50byB0aGUgcGhhc2UuCi0gICAgICBpZiBzZXR0aW5ncyBpcyBOb25lOgotICAgICAgICBwYnhidWlsZGZpbGUgPSBQQlhCdWlsZEZpbGUoeydmaWxlUmVmJzogZmlsZV9yZWZ9KQotICAgICAgZWxzZToKLSAgICAgICAgcGJ4YnVpbGRmaWxlID0gUEJYQnVpbGRGaWxlKHsnZmlsZVJlZic6IGZpbGVfcmVmLCAnc2V0dGluZ3MnOiBzZXR0aW5nc30pCi0gICAgICBzZWxmLkFwcGVuZEJ1aWxkRmlsZShwYnhidWlsZGZpbGUsIHBhdGgpCi0KLQotY2xhc3MgUEJYSGVhZGVyc0J1aWxkUGhhc2UoWENCdWlsZFBoYXNlKToKLSAgIyBObyBhZGRpdGlvbnMgdG8gdGhlIHNjaGVtYSByZWxhdGl2ZSB0byBYQ0J1aWxkUGhhc2UuCi0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgcmV0dXJuICdIZWFkZXJzJwotCi0gIGRlZiBGaWxlR3JvdXAoc2VsZiwgcGF0aCk6Ci0gICAgcmV0dXJuIHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuUm9vdEdyb3VwRm9yUGF0aChwYXRoKQotCi0KLWNsYXNzIFBCWFJlc291cmNlc0J1aWxkUGhhc2UoWENCdWlsZFBoYXNlKToKLSAgIyBObyBhZGRpdGlvbnMgdG8gdGhlIHNjaGVtYSByZWxhdGl2ZSB0byBYQ0J1aWxkUGhhc2UuCi0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgcmV0dXJuICdSZXNvdXJjZXMnCi0KLSAgZGVmIEZpbGVHcm91cChzZWxmLCBwYXRoKToKLSAgICByZXR1cm4gc2VsZi5QQlhQcm9qZWN0QW5jZXN0b3IoKS5Sb290R3JvdXBGb3JQYXRoKHBhdGgpCi0KLQotY2xhc3MgUEJYU291cmNlc0J1aWxkUGhhc2UoWENCdWlsZFBoYXNlKToKLSAgIyBObyBhZGRpdGlvbnMgdG8gdGhlIHNjaGVtYSByZWxhdGl2ZSB0byBYQ0J1aWxkUGhhc2UuCi0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgcmV0dXJuICdTb3VyY2VzJwotCi0gIGRlZiBGaWxlR3JvdXAoc2VsZiwgcGF0aCk6Ci0gICAgcmV0dXJuIHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuUm9vdEdyb3VwRm9yUGF0aChwYXRoKQotCi0KLWNsYXNzIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlKFhDQnVpbGRQaGFzZSk6Ci0gICMgTm8gYWRkaXRpb25zIHRvIHRoZSBzY2hlbWEgcmVsYXRpdmUgdG8gWENCdWlsZFBoYXNlLgotCi0gIGRlZiBOYW1lKHNlbGYpOgotICAgIHJldHVybiAnRnJhbWV3b3JrcycKLQotICBkZWYgRmlsZUdyb3VwKHNlbGYsIHBhdGgpOgotICAgIChyb290LCBleHQpID0gcG9zaXhwYXRoLnNwbGl0ZXh0KHBhdGgpCi0gICAgaWYgZXh0ICE9ICcnOgotICAgICAgZXh0ID0gZXh0WzE6XS5sb3dlcigpCi0gICAgaWYgZXh0ID09ICdvJzoKLSAgICAgICMgLm8gZmlsZXMgYXJlIGFkZGVkIHRvIFhjb2RlIEZyYW1ld29ya3MgcGhhc2VzLCBidXQgY29uY2VwdHVhbGx5IGFyZW4ndAotICAgICAgIyBmcmFtZXdvcmtzLCB0aGV5J3JlIG1vcmUgbGlrZSBzb3VyY2VzIG9yIGludGVybWVkaWF0ZXMuIFJlZGlyZWN0IHRoZW0KLSAgICAgICMgdG8gc2hvdyB1cCBpbiBvbmUgb2YgdGhvc2Ugb3RoZXIgZ3JvdXBzLgotICAgICAgcmV0dXJuIHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuUm9vdEdyb3VwRm9yUGF0aChwYXRoKQotICAgIGVsc2U6Ci0gICAgICByZXR1cm4gKHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuRnJhbWV3b3Jrc0dyb3VwKCksIEZhbHNlKQotCi0KLWNsYXNzIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZShYQ0J1aWxkUGhhc2UpOgotICBfc2NoZW1hID0gWENCdWlsZFBoYXNlLl9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnaW5wdXRQYXRocyc6ICAgICAgIFsxLCBzdHIsIDAsIDEsIFtdXSwKLSAgICAnbmFtZSc6ICAgICAgICAgICAgIFswLCBzdHIsIDAsIDBdLAotICAgICdvdXRwdXRQYXRocyc6ICAgICAgWzEsIHN0ciwgMCwgMSwgW11dLAotICAgICdzaGVsbFBhdGgnOiAgICAgICAgWzAsIHN0ciwgMCwgMSwgJy9iaW4vc2gnXSwKLSAgICAnc2hlbGxTY3JpcHQnOiAgICAgIFswLCBzdHIsIDAsIDFdLAotICAgICdzaG93RW52VmFyc0luTG9nJzogWzAsIGludCwgMCwgMF0sCi0gIH0pCi0KLSAgZGVmIE5hbWUoc2VsZik6Ci0gICAgaWYgJ25hbWUnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICByZXR1cm4gc2VsZi5fcHJvcGVydGllc1snbmFtZSddCi0KLSAgICByZXR1cm4gJ1NoZWxsU2NyaXB0JwotCi0KLWNsYXNzIFBCWENvcHlGaWxlc0J1aWxkUGhhc2UoWENCdWlsZFBoYXNlKToKLSAgX3NjaGVtYSA9IFhDQnVpbGRQaGFzZS5fc2NoZW1hLmNvcHkoKQotICBfc2NoZW1hLnVwZGF0ZSh7Ci0gICAgJ2RzdFBhdGgnOiAgICAgICAgICBbMCwgc3RyLCAwLCAxXSwKLSAgICAnZHN0U3ViZm9sZGVyU3BlYyc6IFswLCBpbnQsIDAsIDFdLAotICAgICduYW1lJzogICAgICAgICAgICAgWzAsIHN0ciwgMCwgMF0sCi0gIH0pCi0KLSAgIyBwYXRoX3RyZWVfcmUgbWF0Y2hlcyAiJChESVIpL3BhdGgiIG9yIGp1c3QgIiQoRElSKSIuICBNYXRjaCBncm91cCAxIGlzCi0gICMgIkRJUiIsIG1hdGNoIGdyb3VwIDMgaXMgInBhdGgiIG9yIE5vbmUuCi0gIHBhdGhfdHJlZV9yZSA9IHJlLmNvbXBpbGUoJ15cXCRcXCgoLiopXFwpKC8oLiopfCkkJykKLQotICAjIHBhdGhfdHJlZV90b19zdWJmb2xkZXIgbWFwcyBuYW1lcyBvZiBYY29kZSB2YXJpYWJsZXMgdG8gdGhlIGFzc29jaWF0ZWQKLSAgIyBkc3RTdWJmb2xkZXJTcGVjIHByb3BlcnR5IHZhbHVlIHVzZWQgaW4gYSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIG9iamVjdC4KLSAgcGF0aF90cmVlX3RvX3N1YmZvbGRlciA9IHsKLSAgICAnQlVJTFRfUFJPRFVDVFNfRElSJzogMTYsICAjIFByb2R1Y3RzIERpcmVjdG9yeQotICAgICMgT3RoZXIgdHlwZXMgdGhhdCBjYW4gYmUgY2hvc2VuIHZpYSB0aGUgWGNvZGUgVUkuCi0gICAgIyBUT0RPKG1hcmspOiBNYXAgWGNvZGUgdmFyaWFibGUgbmFtZXMgdG8gdGhlc2UuCi0gICAgIyA6IDEsICAjIFdyYXBwZXIKLSAgICAjIDogNiwgICMgRXhlY3V0YWJsZXM6IDYKLSAgICAjIDogNywgICMgUmVzb3VyY2VzCi0gICAgIyA6IDE1LCAgIyBKYXZhIFJlc291cmNlcwotICAgICMgOiAxMCwgICMgRnJhbWV3b3JrcwotICAgICMgOiAxMSwgICMgU2hhcmVkIEZyYW1ld29ya3MKLSAgICAjIDogMTIsICAjIFNoYXJlZCBTdXBwb3J0Ci0gICAgIyA6IDEzLCAgIyBQbHVnSW5zCi0gIH0KLQotICBkZWYgTmFtZShzZWxmKToKLSAgICBpZiAnbmFtZScgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIHJldHVybiBzZWxmLl9wcm9wZXJ0aWVzWyduYW1lJ10KLQotICAgIHJldHVybiAnQ29weUZpbGVzJwotCi0gIGRlZiBGaWxlR3JvdXAoc2VsZiwgcGF0aCk6Ci0gICAgcmV0dXJuIHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkuUm9vdEdyb3VwRm9yUGF0aChwYXRoKQotCi0gIGRlZiBTZXREZXN0aW5hdGlvbihzZWxmLCBwYXRoKToKLSAgICAiIiJTZXQgdGhlIGRzdFN1YmZvbGRlclNwZWMgYW5kIGRzdFBhdGggcHJvcGVydGllcyBmcm9tIHBhdGguCi0KLSAgICBwYXRoIG1heSBiZSBzcGVjaWZpZWQgaW4gdGhlIHNhbWUgbm90YXRpb24gdXNlZCBmb3IgWENIaWVyYXJjaGljYWxFbGVtZW50cywKLSAgICBzcGVjaWZpY2FsbHksICIkKERJUikvcGF0aCIuCi0gICAgIiIiCi0KLSAgICBwYXRoX3RyZWVfbWF0Y2ggPSBzZWxmLnBhdGhfdHJlZV9yZS5zZWFyY2gocGF0aCkKLSAgICBpZiBwYXRoX3RyZWVfbWF0Y2g6Ci0gICAgICAjIEV2ZXJ5dGhpbmcgZWxzZSBuZWVkcyB0byBiZSByZWxhdGl2ZSB0byBhbiBYY29kZSB2YXJpYWJsZS4KLSAgICAgIHBhdGhfdHJlZSA9IHBhdGhfdHJlZV9tYXRjaC5ncm91cCgxKQotICAgICAgcmVsYXRpdmVfcGF0aCA9IHBhdGhfdHJlZV9tYXRjaC5ncm91cCgzKQotCi0gICAgICBpZiBwYXRoX3RyZWUgaW4gc2VsZi5wYXRoX3RyZWVfdG9fc3ViZm9sZGVyOgotICAgICAgICBzdWJmb2xkZXIgPSBzZWxmLnBhdGhfdHJlZV90b19zdWJmb2xkZXJbcGF0aF90cmVlXQotICAgICAgICBpZiByZWxhdGl2ZV9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgcmVsYXRpdmVfcGF0aCA9ICcnCi0gICAgICBlbHNlOgotICAgICAgICAjIFRoZSBwYXRoIHN0YXJ0cyB3aXRoIGFuIHVucmVjb2duaXplZCBYY29kZSB2YXJpYWJsZQotICAgICAgICAjIG5hbWUgbGlrZSAkKFNSQ1JPT1QpLiAgWGNvZGUgd2lsbCBzdGlsbCBoYW5kbGUgdGhpcwotICAgICAgICAjIGFzIGFuICJhYnNvbHV0ZSBwYXRoIiB0aGF0IHN0YXJ0cyB3aXRoIHRoZSB2YXJpYWJsZS4KLSAgICAgICAgc3ViZm9sZGVyID0gMAotICAgICAgICByZWxhdGl2ZV9wYXRoID0gcGF0aAotICAgIGVsaWYgcGF0aC5zdGFydHN3aXRoKCcvJyk6Ci0gICAgICAjIFNwZWNpYWwgY2FzZS4gIEFic29sdXRlIHBhdGhzIGFyZSBpbiBkc3RTdWJmb2xkZXJTcGVjIDAuCi0gICAgICBzdWJmb2xkZXIgPSAwCi0gICAgICByZWxhdGl2ZV9wYXRoID0gcGF0aFsxOl0KLSAgICBlbHNlOgotICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ0NhblwndCB1c2UgcGF0aCAlcyBpbiBhICVzJyAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKLQotICAgIHNlbGYuX3Byb3BlcnRpZXNbJ2RzdFBhdGgnXSA9IHJlbGF0aXZlX3BhdGgKLSAgICBzZWxmLl9wcm9wZXJ0aWVzWydkc3RTdWJmb2xkZXJTcGVjJ10gPSBzdWJmb2xkZXIKLQotCi1jbGFzcyBQQlhCdWlsZFJ1bGUoWENPYmplY3QpOgotICBfc2NoZW1hID0gWENPYmplY3QuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICdjb21waWxlclNwZWMnOiBbMCwgc3RyLCAwLCAxXSwKLSAgICAnZmlsZVBhdHRlcm5zJzogWzAsIHN0ciwgMCwgMF0sCi0gICAgJ2ZpbGVUeXBlJzogICAgIFswLCBzdHIsIDAsIDFdLAotICAgICdpc0VkaXRhYmxlJzogICBbMCwgaW50LCAwLCAxLCAxXSwKLSAgICAnb3V0cHV0RmlsZXMnOiAgWzEsIHN0ciwgMCwgMSwgW11dLAotICAgICdzY3JpcHQnOiAgICAgICBbMCwgc3RyLCAwLCAwXSwKLSAgfSkKLQotICBkZWYgTmFtZShzZWxmKToKLSAgICAjIE5vdCB2ZXJ5IGluc3BpcmVkLCBidXQgaXQncyB3aGF0IFhjb2RlIHVzZXMuCi0gICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0KLSAgZGVmIEhhc2hhYmxlcyhzZWxmKToKLSAgICAjIHN1cGVyCi0gICAgaGFzaGFibGVzID0gWENPYmplY3QuSGFzaGFibGVzKHNlbGYpCi0KLSAgICAjIFVzZSB0aGUgaGFzaGFibGVzIG9mIHRoZSB3ZWFrIG9iamVjdHMgdGhhdCB0aGlzIG9iamVjdCByZWZlcnMgdG8uCi0gICAgaGFzaGFibGVzLmFwcGVuZChzZWxmLl9wcm9wZXJ0aWVzWydmaWxlVHlwZSddKQotICAgIGlmICdmaWxlUGF0dGVybnMnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICBoYXNoYWJsZXMuYXBwZW5kKHNlbGYuX3Byb3BlcnRpZXNbJ2ZpbGVQYXR0ZXJucyddKQotICAgIHJldHVybiBoYXNoYWJsZXMKLQotCi1jbGFzcyBQQlhDb250YWluZXJJdGVtUHJveHkoWENPYmplY3QpOgotICAjIFdoZW4gcmVmZXJlbmNpbmcgYW4gaXRlbSBpbiB0aGlzIHByb2plY3QgZmlsZSwgY29udGFpbmVyUG9ydGFsIGlzIHRoZQotICAjIFBCWFByb2plY3Qgcm9vdCBvYmplY3Qgb2YgdGhpcyBwcm9qZWN0IGZpbGUuICBXaGVuIHJlZmVyZW5jaW5nIGFuIGl0ZW0gaW4KLSAgIyBhbm90aGVyIHByb2plY3QgZmlsZSwgY29udGFpbmVyUG9ydGFsIGlzIGEgUEJYRmlsZVJlZmVyZW5jZSBpZGVudGlmeWluZwotICAjIHRoZSBvdGhlciBwcm9qZWN0IGZpbGUuCi0gICMKLSAgIyBXaGVuIHNlcnZpbmcgYXMgYSBwcm94eSB0byBhbiBYQ1RhcmdldCAoaW4gdGhpcyBwcm9qZWN0IGZpbGUgb3IgYW5vdGhlciksCi0gICMgcHJveHlUeXBlIGlzIDEuICBXaGVuIHNlcnZpbmcgYXMgYSBwcm94eSB0byBhIFBCWEZpbGVSZWZlcmVuY2UgKGluIGFub3RoZXIKLSAgIyBwcm9qZWN0IGZpbGUpLCBwcm94eVR5cGUgaXMgMi4gIFR5cGUgMiBpcyB1c2VkIGZvciByZWZlcmVuY2VzIHRvIHRoZQotICAjIHByb2R1Y3Mgb2YgdGhlIG90aGVyIHByb2plY3QgZmlsZSdzIHRhcmdldHMuCi0gICMKLSAgIyBYY29kZSBpcyB3ZWlyZCBhYm91dCByZW1vdGVHbG9iYWxJRFN0cmluZy4gIFVzdWFsbHksIGl0J3MgcHJpbnRlZCB3aXRob3V0Ci0gICMgYSBjb21tZW50LCBpbmRpY2F0aW5nIHRoYXQgaXQncyB0cmFja2VkIGludGVybmFsbHkgc2ltcGx5IGFzIGEgc3RyaW5nLCBidXQKLSAgIyBzb21ldGltZXMgaXQncyBwcmludGVkIHdpdGggYSBjb21tZW50ICh1c3VhbGx5IHdoZW4gdGhlIG9iamVjdCBpcyBpbml0aWFsbHkKLSAgIyBjcmVhdGVkKSwgaW5kaWNhdGluZyB0aGF0IGl0J3MgdHJhY2tlZCBhcyBhIHByb2plY3QgZmlsZSBvYmplY3QgYXQgbGVhc3QKLSAgIyBzb21ldGltZXMuICBUaGlzIG1vZHVsZSBhbHdheXMgdHJhY2tzIGl0IGFzIGFuIG9iamVjdCwgYnV0IGNvbnRhaW5zIGEgaGFjawotICAjIHRvIHByZXZlbnQgaXQgZnJvbSBwcmludGluZyB0aGUgY29tbWVudCBpbiB0aGUgcHJvamVjdCBmaWxlIG91dHB1dC4gIFNlZQotICAjIF9YQ0tWUHJpbnQuCi0gIF9zY2hlbWEgPSBYQ09iamVjdC5fc2NoZW1hLmNvcHkoKQotICBfc2NoZW1hLnVwZGF0ZSh7Ci0gICAgJ2NvbnRhaW5lclBvcnRhbCc6ICAgICAgWzAsIFhDQ29udGFpbmVyUG9ydGFsLCAwLCAxXSwKLSAgICAncHJveHlUeXBlJzogICAgICAgICAgICBbMCwgaW50LCAgICAgICAgICAgICAgIDAsIDFdLAotICAgICdyZW1vdGVHbG9iYWxJRFN0cmluZyc6IFswLCBYQ1JlbW90ZU9iamVjdCwgICAgMCwgMV0sCi0gICAgJ3JlbW90ZUluZm8nOiAgICAgICAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAwLCAxXSwKLSAgfSkKLQotICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgcHJvcHMgPSBzZWxmLl9wcm9wZXJ0aWVzCi0gICAgbmFtZSA9ICclcy5neXA6JXMnICUgKHByb3BzWydjb250YWluZXJQb3J0YWwnXS5OYW1lKCksIHByb3BzWydyZW1vdGVJbmZvJ10pCi0gICAgcmV0dXJuICc8JXMgJXIgYXQgMHgleD4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lLCBpZChzZWxmKSkKLQotICBkZWYgTmFtZShzZWxmKToKLSAgICAjIEFkbWl0dGVkbHkgbm90IHRoZSBiZXN0IG5hbWUsIGJ1dCBpdCdzIHdoYXQgWGNvZGUgdXNlcy4KLSAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLQotICBkZWYgSGFzaGFibGVzKHNlbGYpOgotICAgICMgc3VwZXIKLSAgICBoYXNoYWJsZXMgPSBYQ09iamVjdC5IYXNoYWJsZXMoc2VsZikKLQotICAgICMgVXNlIHRoZSBoYXNoYWJsZXMgb2YgdGhlIHdlYWsgb2JqZWN0cyB0aGF0IHRoaXMgb2JqZWN0IHJlZmVycyB0by4KLSAgICBoYXNoYWJsZXMuZXh0ZW5kKHNlbGYuX3Byb3BlcnRpZXNbJ2NvbnRhaW5lclBvcnRhbCddLkhhc2hhYmxlcygpKQotICAgIGhhc2hhYmxlcy5leHRlbmQoc2VsZi5fcHJvcGVydGllc1sncmVtb3RlR2xvYmFsSURTdHJpbmcnXS5IYXNoYWJsZXMoKSkKLSAgICByZXR1cm4gaGFzaGFibGVzCi0KLQotY2xhc3MgUEJYVGFyZ2V0RGVwZW5kZW5jeShYQ09iamVjdCk6Ci0gICMgVGhlICJ0YXJnZXQiIHByb3BlcnR5IGFjY2VwdHMgYW4gWENUYXJnZXQgb2JqZWN0LCBhbmQgb2J2aW91c2x5IG5vdAotICAjIE5vbmVUeXBlLiAgQnV0IFhDVGFyZ2V0IGlzIGRlZmluZWQgYmVsb3csIHNvIGl0IGNhbid0IGJlIHB1dCBpbnRvIHRoZQotICAjIHNjaGVtYSB5ZXQuICBUaGUgZGVmaW5pdGlvbiBvZiBQQlhUYXJnZXREZXBlbmRlbmN5IGNhbid0IGJlIG1vdmVkIGJlbG93Ci0gICMgWENUYXJnZXQgYmVjYXVzZSBYQ1RhcmdldCdzIG93biBzY2hlbWEgcmVmZXJlbmNlcyBQQlhUYXJnZXREZXBlbmRlbmN5LgotICAjIFB5dGhvbiBkb2Vzbid0IGRlYWwgd2VsbCB3aXRoIHRoaXMgY2lyY3VsYXIgcmVsYXRpb25zaGlwLCBhbmQgZG9lc24ndCBoYXZlCi0gICMgYSByZWFsIHdheSB0byBkbyBmb3J3YXJkIGRlY2xhcmF0aW9ucy4gIFRvIHdvcmsgYXJvdW5kLCB0aGUgdHlwZSBvZgotICAjIHRoZSAidGFyZ2V0IiBwcm9wZXJ0eSBpcyByZXNldCBiZWxvdywgYWZ0ZXIgWENUYXJnZXQgaXMgZGVmaW5lZC4KLSAgIwotICAjIEF0IGxlYXN0IG9uZSBvZiAibmFtZSIgYW5kICJ0YXJnZXQiIGlzIHJlcXVpcmVkLgotICBfc2NoZW1hID0gWENPYmplY3QuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICduYW1lJzogICAgICAgIFswLCBzdHIsICAgICAgICAgICAgICAgICAgIDAsIDBdLAotICAgICd0YXJnZXQnOiAgICAgIFswLCBOb25lLl9fY2xhc3NfXywgICAgICAgIDAsIDBdLAotICAgICd0YXJnZXRQcm94eSc6IFswLCBQQlhDb250YWluZXJJdGVtUHJveHksIDEsIDFdLAotICB9KQotCi0gIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICBuYW1lID0gc2VsZi5fcHJvcGVydGllcy5nZXQoJ25hbWUnKSBvciBzZWxmLl9wcm9wZXJ0aWVzWyd0YXJnZXQnXS5OYW1lKCkKLSAgICByZXR1cm4gJzwlcyAlciBhdCAweCV4PicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIG5hbWUsIGlkKHNlbGYpKQotCi0gIGRlZiBOYW1lKHNlbGYpOgotICAgICMgQWRtaXR0ZWRseSBub3QgdGhlIGJlc3QgbmFtZSwgYnV0IGl0J3Mgd2hhdCBYY29kZSB1c2VzLgotICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotCi0gIGRlZiBIYXNoYWJsZXMoc2VsZik6Ci0gICAgIyBzdXBlcgotICAgIGhhc2hhYmxlcyA9IFhDT2JqZWN0Lkhhc2hhYmxlcyhzZWxmKQotCi0gICAgIyBVc2UgdGhlIGhhc2hhYmxlcyBvZiB0aGUgd2VhayBvYmplY3RzIHRoYXQgdGhpcyBvYmplY3QgcmVmZXJzIHRvLgotICAgIGhhc2hhYmxlcy5leHRlbmQoc2VsZi5fcHJvcGVydGllc1sndGFyZ2V0UHJveHknXS5IYXNoYWJsZXMoKSkKLSAgICByZXR1cm4gaGFzaGFibGVzCi0KLQotY2xhc3MgUEJYUmVmZXJlbmNlUHJveHkoWENGaWxlTGlrZUVsZW1lbnQpOgotICBfc2NoZW1hID0gWENGaWxlTGlrZUVsZW1lbnQuX3NjaGVtYS5jb3B5KCkKLSAgX3NjaGVtYS51cGRhdGUoewotICAgICdmaWxlVHlwZSc6ICBbMCwgc3RyLCAgICAgICAgICAgICAgICAgICAwLCAxXSwKLSAgICAncGF0aCc6ICAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAgICAgMCwgMV0sCi0gICAgJ3JlbW90ZVJlZic6IFswLCBQQlhDb250YWluZXJJdGVtUHJveHksIDEsIDFdLAotICB9KQotCi0KLWNsYXNzIFhDVGFyZ2V0KFhDUmVtb3RlT2JqZWN0KToKLSAgIyBBbiBYQ1RhcmdldCBpcyByZWFsbHkganVzdCBhbiBYQ09iamVjdCwgdGhlIFhDUmVtb3RlT2JqZWN0IHRoaW5nIGlzIGp1c3QKLSAgIyB0byBhbGxvdyBQQlhQcm9qZWN0IHRvIGJlIHVzZWQgaW4gdGhlIHJlbW90ZUdsb2JhbElEU3RyaW5nIHByb3BlcnR5IG9mCi0gICMgUEJYQ29udGFpbmVySXRlbVByb3h5LgotICAjCi0gICMgU2V0dGluZyBhICJuYW1lIiBwcm9wZXJ0eSBhdCBpbnN0YW50aWF0aW9uIG1heSBhbHNvIGFmZmVjdCAicHJvZHVjdE5hbWUiLAotICAjIHdoaWNoIG1heSBpbiB0dXJuIGFmZmVjdCB0aGUgIlBST0RVQ1RfTkFNRSIgYnVpbGQgc2V0dGluZyBpbiBjaGlsZHJlbiBvZgotICAjICJidWlsZENvbmZpZ3VyYXRpb25MaXN0Ii4gIFNlZSBfX2luaXRfXyBiZWxvdy4KLSAgX3NjaGVtYSA9IFhDUmVtb3RlT2JqZWN0Ll9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IFswLCBYQ0NvbmZpZ3VyYXRpb25MaXN0LCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQ29uZmlndXJhdGlvbkxpc3QoKV0sCi0gICAgJ2J1aWxkUGhhc2VzJzogICAgICAgICAgICBbMSwgWENCdWlsZFBoYXNlLCAgICAgICAgMSwgMSwgW11dLAotICAgICdkZXBlbmRlbmNpZXMnOiAgICAgICAgICAgWzEsIFBCWFRhcmdldERlcGVuZGVuY3ksIDEsIDEsIFtdXSwKLSAgICAnbmFtZSc6ICAgICAgICAgICAgICAgICAgIFswLCBzdHIsICAgICAgICAgICAgICAgICAwLCAxXSwKLSAgICAncHJvZHVjdE5hbWUnOiAgICAgICAgICAgIFswLCBzdHIsICAgICAgICAgICAgICAgICAwLCAxXSwKLSAgfSkKLQotICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydGllcz1Ob25lLCBpZD1Ob25lLCBwYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICAgIGZvcmNlX291dGRpcj1Ob25lLCBmb3JjZV9wcmVmaXg9Tm9uZSwgZm9yY2VfZXh0ZW5zaW9uPU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ1JlbW90ZU9iamVjdC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotCi0gICAgIyBTZXQgdXAgYWRkaXRpb25hbCBkZWZhdWx0cyBub3QgZXhwcmVzc2VkIGluIHRoZSBzY2hlbWEuICBJZiBhICJuYW1lIgotICAgICMgcHJvcGVydHkgd2FzIHN1cHBsaWVkLCBzZXQgInByb2R1Y3ROYW1lIiBpZiBpdCBpcyBub3QgcHJlc2VudC4gIEFsc28gc2V0Ci0gICAgIyB0aGUgIlBST0RVQ1RfTkFNRSIgYnVpbGQgc2V0dGluZyBpbiBlYWNoIGNvbmZpZ3VyYXRpb24sIGJ1dCBvbmx5IGlmCi0gICAgIyB0aGUgc2V0dGluZyBpcyBub3QgcHJlc2VudCBpbiBhbnkgYnVpbGQgY29uZmlndXJhdGlvbi4KLSAgICBpZiAnbmFtZScgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIGlmIG5vdCAncHJvZHVjdE5hbWUnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICAgIHNlbGYuU2V0UHJvcGVydHkoJ3Byb2R1Y3ROYW1lJywgc2VsZi5fcHJvcGVydGllc1snbmFtZSddKQotCi0gICAgaWYgJ3Byb2R1Y3ROYW1lJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgaWYgJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICAgIGNvbmZpZ3MgPSBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25MaXN0J10KLSAgICAgICAgaWYgY29uZmlncy5IYXNCdWlsZFNldHRpbmcoJ1BST0RVQ1RfTkFNRScpID09IDA6Ci0gICAgICAgICAgY29uZmlncy5TZXRCdWlsZFNldHRpbmcoJ1BST0RVQ1RfTkFNRScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJvcGVydGllc1sncHJvZHVjdE5hbWUnXSkKLQotICBkZWYgQWRkRGVwZW5kZW5jeShzZWxmLCBvdGhlcik6Ci0gICAgcGJ4cHJvamVjdCA9IHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkKLSAgICBvdGhlcl9wYnhwcm9qZWN0ID0gb3RoZXIuUEJYUHJvamVjdEFuY2VzdG9yKCkKLSAgICBpZiBwYnhwcm9qZWN0ID09IG90aGVyX3BieHByb2plY3Q6Ci0gICAgICAjIEFkZCBhIGRlcGVuZGVuY3kgdG8gYW5vdGhlciB0YXJnZXQgaW4gdGhlIHNhbWUgcHJvamVjdCBmaWxlLgotICAgICAgY29udGFpbmVyID0gUEJYQ29udGFpbmVySXRlbVByb3h5KHsnY29udGFpbmVyUG9ydGFsJzogICAgICBwYnhwcm9qZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJveHlUeXBlJzogICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVtb3RlR2xvYmFsSURTdHJpbmcnOiBvdGhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbW90ZUluZm8nOiAgICAgICAgICAgb3RoZXIuTmFtZSgpfSkKLSAgICAgIGRlcGVuZGVuY3kgPSBQQlhUYXJnZXREZXBlbmRlbmN5KHsndGFyZ2V0JzogICAgICBvdGhlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0UHJveHknOiBjb250YWluZXJ9KQotICAgICAgc2VsZi5BcHBlbmRQcm9wZXJ0eSgnZGVwZW5kZW5jaWVzJywgZGVwZW5kZW5jeSkKLSAgICBlbHNlOgotICAgICAgIyBBZGQgYSBkZXBlbmRlbmN5IHRvIGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHByb2plY3QgZmlsZS4KLSAgICAgIG90aGVyX3Byb2plY3RfcmVmID0gXAotICAgICAgICAgIHBieHByb2plY3QuQWRkT3JHZXRQcm9qZWN0UmVmZXJlbmNlKG90aGVyX3BieHByb2plY3QpWzFdCi0gICAgICBjb250YWluZXIgPSBQQlhDb250YWluZXJJdGVtUHJveHkoewotICAgICAgICAgICAgJ2NvbnRhaW5lclBvcnRhbCc6ICAgICAgb3RoZXJfcHJvamVjdF9yZWYsCi0gICAgICAgICAgICAncHJveHlUeXBlJzogICAgICAgICAgICAxLAotICAgICAgICAgICAgJ3JlbW90ZUdsb2JhbElEU3RyaW5nJzogb3RoZXIsCi0gICAgICAgICAgICAncmVtb3RlSW5mbyc6ICAgICAgICAgICBvdGhlci5OYW1lKCksCi0gICAgICAgICAgfSkKLSAgICAgIGRlcGVuZGVuY3kgPSBQQlhUYXJnZXREZXBlbmRlbmN5KHsnbmFtZSc6ICAgICAgICBvdGhlci5OYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldFByb3h5JzogY29udGFpbmVyfSkKLSAgICAgIHNlbGYuQXBwZW5kUHJvcGVydHkoJ2RlcGVuZGVuY2llcycsIGRlcGVuZGVuY3kpCi0KLSAgIyBQcm94eSBhbGwgb2YgdGhlc2UgdGhyb3VnaCB0byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBsaXN0LgotCi0gIGRlZiBDb25maWd1cmF0aW9uTmFtZWQoc2VsZiwgbmFtZSk6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnXS5Db25maWd1cmF0aW9uTmFtZWQobmFtZSkKLQotICBkZWYgRGVmYXVsdENvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnXS5EZWZhdWx0Q29uZmlndXJhdGlvbigpCi0KLSAgZGVmIEhhc0J1aWxkU2V0dGluZyhzZWxmLCBrZXkpOgotICAgIHJldHVybiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZENvbmZpZ3VyYXRpb25MaXN0J10uSGFzQnVpbGRTZXR0aW5nKGtleSkKLQotICBkZWYgR2V0QnVpbGRTZXR0aW5nKHNlbGYsIGtleSk6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnXS5HZXRCdWlsZFNldHRpbmcoa2V5KQotCi0gIGRlZiBTZXRCdWlsZFNldHRpbmcoc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnXS5TZXRCdWlsZFNldHRpbmcoa2V5LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpCi0KLSAgZGVmIEFwcGVuZEJ1aWxkU2V0dGluZyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICByZXR1cm4gc2VsZi5fcHJvcGVydGllc1snYnVpbGRDb25maWd1cmF0aW9uTGlzdCddLkFwcGVuZEJ1aWxkU2V0dGluZyhrZXksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSkKLQotICBkZWYgRGVsQnVpbGRTZXR0aW5nKHNlbGYsIGtleSk6Ci0gICAgcmV0dXJuIHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkQ29uZmlndXJhdGlvbkxpc3QnXS5EZWxCdWlsZFNldHRpbmcoa2V5KQotCi0KLSMgUmVkZWZpbmUgdGhlIHR5cGUgb2YgdGhlICJ0YXJnZXQiIHByb3BlcnR5LiAgU2VlIFBCWFRhcmdldERlcGVuZGVuY3kuX3NjaGVtYQotIyBhYm92ZS4KLVBCWFRhcmdldERlcGVuZGVuY3kuX3NjaGVtYVsndGFyZ2V0J11bMV0gPSBYQ1RhcmdldAotCi0KLWNsYXNzIFBCWE5hdGl2ZVRhcmdldChYQ1RhcmdldCk6Ci0gICMgYnVpbGRQaGFzZXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgc2NoZW1hIHRvIGJlIGFibGUgdG8gc2V0IGRlZmF1bHRzLgotICAjCi0gICMgTk9URTogQ29udHJhcnkgdG8gbW9zdCBvYmplY3RzLCBpdCBpcyBhZHZpc2FibGUgdG8gc2V0IHBhcmVudCB3aGVuCi0gICMgY29uc3RydWN0aW5nIFBCWE5hdGl2ZVRhcmdldC4gIEEgcGFyZW50IG9mIGFuIFhDVGFyZ2V0IG11c3QgYmUgYSBQQlhQcm9qZWN0Ci0gICMgb2JqZWN0LiAgQSBwYXJlbnQgcmVmZXJlbmNlIGlzIHJlcXVpcmVkIGZvciBhIFBCWE5hdGl2ZVRhcmdldCBkdXJpbmcKLSAgIyBjb25zdHJ1Y3Rpb24gdG8gYmUgYWJsZSB0byBzZXQgdXAgdGhlIHRhcmdldCBkZWZhdWx0cyBmb3IgcHJvZHVjdFJlZmVyZW5jZSwKLSAgIyBiZWNhdXNlIGEgUEJYQnVpbGRGaWxlIG9iamVjdCBtdXN0IGJlIGNyZWF0ZWQgZm9yIHRoZSB0YXJnZXQgYW5kIGl0IG11c3QKLSAgIyBiZSBhZGRlZCB0byB0aGUgUEJYUHJvamVjdCdzIG1haW5Hcm91cCBoaWVyYXJjaHkuCi0gIF9zY2hlbWEgPSBYQ1RhcmdldC5fc2NoZW1hLmNvcHkoKQotICBfc2NoZW1hLnVwZGF0ZSh7Ci0gICAgJ2J1aWxkUGhhc2VzJzogICAgICBbMSwgWENCdWlsZFBoYXNlLCAgICAgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbUEJYU291cmNlc0J1aWxkUGhhc2UoKSwgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2UoKV1dLAotICAgICdidWlsZFJ1bGVzJzogICAgICAgWzEsIFBCWEJ1aWxkUnVsZSwgICAgIDEsIDEsIFtdXSwKLSAgICAncHJvZHVjdFJlZmVyZW5jZSc6IFswLCBQQlhGaWxlUmVmZXJlbmNlLCAwLCAxXSwKLSAgICAncHJvZHVjdFR5cGUnOiAgICAgIFswLCBzdHIsICAgICAgICAgICAgICAwLCAxXSwKLSAgfSkKLQotICAjIE1hcHBpbmcgZnJvbSBYY29kZSBwcm9kdWN0LXR5cGVzIHRvIHNldHRpbmdzLiAgVGhlIHNldHRpbmdzIGFyZToKLSAgIyAgZmlsZXR5cGUgOiB1c2VkIGZvciBleHBsaWNpdEZpbGVUeXBlIGluIHRoZSBwcm9qZWN0IGZpbGUKLSAgIyAgcHJlZml4IDogdGhlIHByZWZpeCBmb3IgdGhlIGZpbGUgbmFtZQotICAjICBzdWZmaXggOiB0aGUgc3VmZml4IGZvciB0aGUgZmlsZW4gYW1lCi0gIF9wcm9kdWN0X2ZpbGV0eXBlcyA9IHsKLSAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5hcHBsaWNhdGlvbic6ICAgICBbJ3dyYXBwZXIuYXBwbGljYXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJy5hcHAnXSwKLSAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUnOiAgICAgICAgICBbJ3dyYXBwZXIuY2ZidW5kbGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJy5idW5kbGUnXSwKLSAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5mcmFtZXdvcmsnOiAgICAgICBbJ3dyYXBwZXIuZnJhbWV3b3JrJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsICcuZnJhbWV3b3JrJ10sCi0gICAgJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljJzogWydjb21waWxlZC5tYWNoLW8uZHlsaWInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJywgJy5keWxpYiddLAotICAgICdjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljJzogIFsnYXJjaGl2ZS5hcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInLCAnLmEnXSwKLSAgICAnY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sJzogICAgICAgICAgICBbJ2NvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsICcnXSwKLSAgICAnY29tLmdvb2dsZWNvZGUuZ3lwLnhjb2RlLmJ1bmRsZSc6ICAgICAgICBbJ2NvbXBpbGVkLm1hY2gtby5keWxpYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCAnLnNvJ10sCi0gIH0KLQotICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydGllcz1Ob25lLCBpZD1Ob25lLCBwYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICAgIGZvcmNlX291dGRpcj1Ob25lLCBmb3JjZV9wcmVmaXg9Tm9uZSwgZm9yY2VfZXh0ZW5zaW9uPU5vbmUpOgotICAgICMgc3VwZXIKLSAgICBYQ1RhcmdldC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotCi0gICAgaWYgJ3Byb2R1Y3ROYW1lJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBcCi0gICAgICAgJ3Byb2R1Y3RUeXBlJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBcCi0gICAgICAgbm90ICdwcm9kdWN0UmVmZXJlbmNlJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBcCi0gICAgICAgc2VsZi5fcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSBpbiBzZWxmLl9wcm9kdWN0X2ZpbGV0eXBlczoKLSAgICAgIHByb2R1Y3RzX2dyb3VwID0gTm9uZQotICAgICAgcGJ4cHJvamVjdCA9IHNlbGYuUEJYUHJvamVjdEFuY2VzdG9yKCkKLSAgICAgIGlmIHBieHByb2plY3QgIT0gTm9uZToKLSAgICAgICAgcHJvZHVjdHNfZ3JvdXAgPSBwYnhwcm9qZWN0LlByb2R1Y3RzR3JvdXAoKQotCi0gICAgICBpZiBwcm9kdWN0c19ncm91cCAhPSBOb25lOgotICAgICAgICAoZmlsZXR5cGUsIHByZWZpeCwgc3VmZml4KSA9IFwKLSAgICAgICAgICAgIHNlbGYuX3Byb2R1Y3RfZmlsZXR5cGVzW3NlbGYuX3Byb3BlcnRpZXNbJ3Byb2R1Y3RUeXBlJ11dCi0gICAgICAgICMgWGNvZGUgZG9lcyBub3QgaGF2ZSBhIGRpc3RpbmN0IHR5cGUgZm9yIGxvYWRhYmxlIG1vZHVsZXMgdGhhdCBhcmUKLSAgICAgICAgIyBwdXJlIEJTRCB0YXJnZXRzIChub3QgaW4gYSBidW5kbGUgd3JhcHBlcikuIEdZUCBhbGxvd3Mgc3VjaCBtb2R1bGVzCi0gICAgICAgICMgdG8gYmUgc3BlY2lmaWVkIGJ5IHNldHRpbmcgYSB0YXJnZXQgdHlwZSB0byBsb2FkYWJsZV9tb2R1bGUgd2l0aG91dAotICAgICAgICAjIGhhdmluZyBtYWNfYnVuZGxlIHNldC4gVGhlc2UgYXJlIG1hcHBlZCB0byB0aGUgcHNldWRvLXByb2R1Y3QgdHlwZQotICAgICAgICAjIGNvbS5nb29nbGVjb2RlLmd5cC54Y29kZS5idW5kbGUuCi0gICAgICAgICMKLSAgICAgICAgIyBCeSBwaWNraW5nIHVwIHRoaXMgc3BlY2lhbCB0eXBlIGFuZCBjb252ZXJ0aW5nIGl0IHRvIGEgZHluYW1pYwotICAgICAgICAjIGxpYnJhcnkgKGNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljKSB3aXRoIGZpeC11cHMsCi0gICAgICAgICMgc2luZ2xlLWZpbGUgbG9hZGFibGUgbW9kdWxlcyBjYW4gYmUgcHJvZHVjZWQuCi0gICAgICAgICMKLSAgICAgICAgIyBNQUNIX09fVFlQRSBpcyBjaGFuZ2VkIHRvIG1oX2J1bmRsZSB0byBwcm9kdWNlIHRoZSBwcm9wZXIgZmlsZSB0eXBlCi0gICAgICAgICMgKGFzIG9wcG9zZWQgdG8gbWhfZHlsaWIpLiBJbiBvcmRlciBmb3IgbGlua2luZyB0byBzdWNjZWVkLAotICAgICAgICAjIERZTElCX0NVUlJFTlRfVkVSU0lPTiBhbmQgRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OIG11c3QgYmUKLSAgICAgICAgIyBjbGVhcmVkLiBUaGV5IGFyZSBtZWFuaW5nbGVzcyBmb3IgdHlwZSBtaF9idW5kbGUuCi0gICAgICAgICMKLSAgICAgICAgIyBGaW5hbGx5LCB0aGUgLnNvIGV4dGVuc2lvbiBpcyBmb3JjaWJseSBhcHBsaWVkIG92ZXIgdGhlIGRlZmF1bHQKLSAgICAgICAgIyAoLmR5bGliKSwgdW5sZXNzIGFub3RoZXIgZm9yY2VkIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHNlbGVjdGVkLgotICAgICAgICAjIC5keWxpYiBpcyBwbGFpbmx5IHdyb25nLCBhbmQgLmJ1bmRsZSBpcyB1c2VkIGJ5IGxvYWRhYmxlX21vZHVsZXMgaW4KLSAgICAgICAgIyBidW5kbGUgd3JhcHBlcnMgKGNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlKS4gLnNvIHNlZW1zIGFuIG9kZAotICAgICAgICAjIGNob2ljZSBiZWNhdXNlIGl0J3MgdXNlZCBhcyB0aGUgZXh0ZW5zaW9uIG9uIG1hbnkgb3RoZXIgc3lzdGVtcyB0aGF0Ci0gICAgICAgICMgZG9uJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBsaW5rYWJsZSBzaGFyZWQgbGlicmFyaWVzIGFuZCBub24tbGlua2FibGUKLSAgICAgICAgIyBsb2FkYWJsZSBtb2R1bGVzLCBidXQgdGhlcmUncyBwcmVjZWRlbnQ6IFB5dGhvbiBsb2FkYWJsZSBtb2R1bGVzIG9uCi0gICAgICAgICMgTWFjIE9TIFggdXNlIGFuIC5zbyBleHRlbnNpb24uCi0gICAgICAgIGlmIHNlbGYuX3Byb3BlcnRpZXNbJ3Byb2R1Y3RUeXBlJ10gPT0gJ2NvbS5nb29nbGVjb2RlLmd5cC54Y29kZS5idW5kbGUnOgotICAgICAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3Byb2R1Y3RUeXBlJ10gPSBcCi0gICAgICAgICAgICAgICdjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYycKLSAgICAgICAgICBzZWxmLlNldEJ1aWxkU2V0dGluZygnTUFDSF9PX1RZUEUnLCAnbWhfYnVuZGxlJykKLSAgICAgICAgICBzZWxmLlNldEJ1aWxkU2V0dGluZygnRFlMSUJfQ1VSUkVOVF9WRVJTSU9OJywgJycpCi0gICAgICAgICAgc2VsZi5TZXRCdWlsZFNldHRpbmcoJ0RZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTicsICcnKQotICAgICAgICAgIGlmIGZvcmNlX2V4dGVuc2lvbiBpcyBOb25lOgotICAgICAgICAgICAgZm9yY2VfZXh0ZW5zaW9uID0gc3VmZml4WzE6XQotCi0gICAgICAgIGlmIGZvcmNlX2V4dGVuc2lvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAjIElmIGl0J3MgYSB3cmFwcGVyIChidW5kbGUpLCBzZXQgV1JBUFBFUl9FWFRFTlNJT04uCi0gICAgICAgICAgaWYgZmlsZXR5cGUuc3RhcnRzd2l0aCgnd3JhcHBlci4nKToKLSAgICAgICAgICAgIHNlbGYuU2V0QnVpbGRTZXR0aW5nKCdXUkFQUEVSX0VYVEVOU0lPTicsIGZvcmNlX2V4dGVuc2lvbikKLSAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBFeHRlbnNpb24gb3ZlcnJpZGUuCi0gICAgICAgICAgICBzdWZmaXggPSAnLicgKyBmb3JjZV9leHRlbnNpb24KLSAgICAgICAgICAgIHNlbGYuU2V0QnVpbGRTZXR0aW5nKCdFWEVDVVRBQkxFX0VYVEVOU0lPTicsIGZvcmNlX2V4dGVuc2lvbikKLQotICAgICAgICAgIGlmIGZpbGV0eXBlLnN0YXJ0c3dpdGgoJ2NvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlJyk6Ci0gICAgICAgICAgICBwcm9kdWN0X25hbWUgPSBzZWxmLl9wcm9wZXJ0aWVzWydwcm9kdWN0TmFtZSddCi0gICAgICAgICAgICBwcm9kdWN0X25hbWUgKz0gc3VmZml4Ci0gICAgICAgICAgICBzdWZmaXggPSAnJwotICAgICAgICAgICAgc2VsZi5TZXRQcm9wZXJ0eSgncHJvZHVjdE5hbWUnLCBwcm9kdWN0X25hbWUpCi0gICAgICAgICAgICBzZWxmLlNldEJ1aWxkU2V0dGluZygnUFJPRFVDVF9OQU1FJywgcHJvZHVjdF9uYW1lKQotCi0gICAgICAgICMgWGNvZGUgaGFuZGxlcyBtb3N0IHByZWZpeGVzIGJhc2VkIG9uIHRoZSB0YXJnZXQgdHlwZSwgaG93ZXZlciB0aGVyZQotICAgICAgICAjIGFyZSBleGNlcHRpb25zLiAgSWYgYSAiQlNEIER5bmFtaWMgTGlicmFyeSIgdGFyZ2V0IGlzIGFkZGVkIGluIHRoZQotICAgICAgICAjIFhjb2RlIFVJLCBYY29kZSBzZXRzIEVYRUNVVEFCTEVfUFJFRklYLiAgVGhpcyBjaGVjayBkdXBsaWNhdGVzIHRoYXQKLSAgICAgICAgIyBiZWhhdmlvci4KLSAgICAgICAgaWYgZm9yY2VfcHJlZml4IGlzIG5vdCBOb25lOgotICAgICAgICAgIHByZWZpeCA9IGZvcmNlX3ByZWZpeAotICAgICAgICBpZiBmaWxldHlwZS5zdGFydHN3aXRoKCd3cmFwcGVyLicpOgotICAgICAgICAgIHNlbGYuU2V0QnVpbGRTZXR0aW5nKCdXUkFQUEVSX1BSRUZJWCcsIHByZWZpeCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICBzZWxmLlNldEJ1aWxkU2V0dGluZygnRVhFQ1VUQUJMRV9QUkVGSVgnLCBwcmVmaXgpCi0KLSAgICAgICAgaWYgZm9yY2Vfb3V0ZGlyIGlzIG5vdCBOb25lOgotICAgICAgICAgIHNlbGYuU2V0QnVpbGRTZXR0aW5nKCdUQVJHRVRfQlVJTERfRElSJywgZm9yY2Vfb3V0ZGlyKQotCi0gICAgICAgICMgVE9ETyh0dmwpOiBSZW1vdmUgdGhlIGJlbG93IGhhY2suCi0gICAgICAgICMgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2d5cC9pc3N1ZXMvZGV0YWlsP2lkPTEyMgotCi0gICAgICAgICMgU29tZSB0YXJnZXRzIGluY2x1ZGUgdGhlIHByZWZpeCBpbiB0aGUgdGFyZ2V0X25hbWUuICBUaGVzZSB0YXJnZXRzCi0gICAgICAgICMgcmVhbGx5IHNob3VsZCBqdXN0IGFkZCBhIHByb2R1Y3RfbmFtZSBzZXR0aW5nIHRoYXQgZG9lc24ndCBpbmNsdWRlCi0gICAgICAgICMgdGhlIHByZWZpeC4gIEZvciBleGFtcGxlOgotICAgICAgICAjICB0YXJnZXRfbmFtZSA9ICdsaWJldmVudCcsIHByb2R1Y3RfbmFtZSA9ICdldmVudCcKLSAgICAgICAgIyBUaGlzIGNoZWNrIGNsZWFucyB1cCBmb3IgdGhlbS4KLSAgICAgICAgcHJvZHVjdF9uYW1lID0gc2VsZi5fcHJvcGVydGllc1sncHJvZHVjdE5hbWUnXQotICAgICAgICBwcmVmaXhfbGVuID0gbGVuKHByZWZpeCkKLSAgICAgICAgaWYgcHJlZml4X2xlbiBhbmQgKHByb2R1Y3RfbmFtZVs6cHJlZml4X2xlbl0gPT0gcHJlZml4KToKLSAgICAgICAgICBwcm9kdWN0X25hbWUgPSBwcm9kdWN0X25hbWVbcHJlZml4X2xlbjpdCi0gICAgICAgICAgc2VsZi5TZXRQcm9wZXJ0eSgncHJvZHVjdE5hbWUnLCBwcm9kdWN0X25hbWUpCi0gICAgICAgICAgc2VsZi5TZXRCdWlsZFNldHRpbmcoJ1BST0RVQ1RfTkFNRScsIHByb2R1Y3RfbmFtZSkKLQotICAgICAgICByZWZfcHJvcHMgPSB7Ci0gICAgICAgICAgJ2V4cGxpY2l0RmlsZVR5cGUnOiBmaWxldHlwZSwKLSAgICAgICAgICAnaW5jbHVkZUluSW5kZXgnOiAgIDAsCi0gICAgICAgICAgJ3BhdGgnOiAgICAgICAgICAgICBwcmVmaXggKyBwcm9kdWN0X25hbWUgKyBzdWZmaXgsCi0gICAgICAgICAgJ3NvdXJjZVRyZWUnOiAgICAgICAnQlVJTFRfUFJPRFVDVFNfRElSJywKLSAgICAgICAgfQotICAgICAgICBmaWxlX3JlZiA9IFBCWEZpbGVSZWZlcmVuY2UocmVmX3Byb3BzKQotICAgICAgICBwcm9kdWN0c19ncm91cC5BcHBlbmRDaGlsZChmaWxlX3JlZikKLSAgICAgICAgc2VsZi5TZXRQcm9wZXJ0eSgncHJvZHVjdFJlZmVyZW5jZScsIGZpbGVfcmVmKQotCi0gIGRlZiBHZXRCdWlsZFBoYXNlQnlUeXBlKHNlbGYsIHR5cGUpOgotICAgIGlmIG5vdCAnYnVpbGRQaGFzZXMnIGluIHNlbGYuX3Byb3BlcnRpZXM6Ci0gICAgICByZXR1cm4gTm9uZQotCi0gICAgdGhlX3BoYXNlID0gTm9uZQotICAgIGZvciBwaGFzZSBpbiBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddOgotICAgICAgaWYgaXNpbnN0YW5jZShwaGFzZSwgdHlwZSk6Ci0gICAgICAgICMgU29tZSBwaGFzZXMgbWF5IGJlIHByZXNlbnQgaW4gbXVsdGlwbGVzIGluIGEgd2VsbC1mb3JtZWQgcHJvamVjdCBmaWxlLAotICAgICAgICAjIGJ1dCBwaGFzZXMgbGlrZSBQQlhTb3VyY2VzQnVpbGRQaGFzZSBtYXkgb25seSBiZSBwcmVzZW50IHNpbmdseSwgYW5kCi0gICAgICAgICMgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBhcyBhbiBhaWQgdG8gR2V0QnVpbGRQaGFzZUJ5VHlwZS4gIExvb3AKLSAgICAgICAgIyBvdmVyIHRoZSBlbnRpcmUgbGlzdCBvZiBwaGFzZXMgYW5kIGFzc2VydCBpZiBtb3JlIHRoYW4gb25lIG9mIHRoZQotICAgICAgICAjIGRlc2lyZWQgdHlwZSBpcyBmb3VuZC4KLSAgICAgICAgYXNzZXJ0IHRoZV9waGFzZSBpcyBOb25lCi0gICAgICAgIHRoZV9waGFzZSA9IHBoYXNlCi0KLSAgICByZXR1cm4gdGhlX3BoYXNlCi0KLSAgZGVmIEhlYWRlcnNQaGFzZShzZWxmKToKLSAgICBoZWFkZXJzX3BoYXNlID0gc2VsZi5HZXRCdWlsZFBoYXNlQnlUeXBlKFBCWEhlYWRlcnNCdWlsZFBoYXNlKQotICAgIGlmIGhlYWRlcnNfcGhhc2UgaXMgTm9uZToKLSAgICAgIGhlYWRlcnNfcGhhc2UgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZSgpCi0KLSAgICAgICMgVGhlIGhlYWRlcnMgcGhhc2Ugc2hvdWxkIGNvbWUgYmVmb3JlIHRoZSByZXNvdXJjZXMsIHNvdXJjZXMsIGFuZAotICAgICAgIyBmcmFtZXdvcmtzIHBoYXNlcywgaWYgYW55LgotICAgICAgaW5zZXJ0X2F0ID0gbGVuKHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkUGhhc2VzJ10pCi0gICAgICBmb3IgaW5kZXggaW4geHJhbmdlKDAsIGxlbihzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddKSk6Ci0gICAgICAgIHBoYXNlID0gc2VsZi5fcHJvcGVydGllc1snYnVpbGRQaGFzZXMnXVtpbmRleF0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShwaGFzZSwgUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSkgb3IgXAotICAgICAgICAgICBpc2luc3RhbmNlKHBoYXNlLCBQQlhTb3VyY2VzQnVpbGRQaGFzZSkgb3IgXAotICAgICAgICAgICBpc2luc3RhbmNlKHBoYXNlLCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk6Ci0gICAgICAgICAgaW5zZXJ0X2F0ID0gaW5kZXgKLSAgICAgICAgICBicmVhawotCi0gICAgICBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddLmluc2VydChpbnNlcnRfYXQsIGhlYWRlcnNfcGhhc2UpCi0gICAgICBoZWFkZXJzX3BoYXNlLnBhcmVudCA9IHNlbGYKLQotICAgIHJldHVybiBoZWFkZXJzX3BoYXNlCi0KLSAgZGVmIFJlc291cmNlc1BoYXNlKHNlbGYpOgotICAgIHJlc291cmNlc19waGFzZSA9IHNlbGYuR2V0QnVpbGRQaGFzZUJ5VHlwZShQQlhSZXNvdXJjZXNCdWlsZFBoYXNlKQotICAgIGlmIHJlc291cmNlc19waGFzZSBpcyBOb25lOgotICAgICAgcmVzb3VyY2VzX3BoYXNlID0gUEJYUmVzb3VyY2VzQnVpbGRQaGFzZSgpCi0KLSAgICAgICMgVGhlIHJlc291cmNlcyBwaGFzZSBzaG91bGQgY29tZSBiZWZvcmUgdGhlIHNvdXJjZXMgYW5kIGZyYW1ld29ya3MKLSAgICAgICMgcGhhc2VzLCBpZiBhbnkuCi0gICAgICBpbnNlcnRfYXQgPSBsZW4oc2VsZi5fcHJvcGVydGllc1snYnVpbGRQaGFzZXMnXSkKLSAgICAgIGZvciBpbmRleCBpbiB4cmFuZ2UoMCwgbGVuKHNlbGYuX3Byb3BlcnRpZXNbJ2J1aWxkUGhhc2VzJ10pKToKLSAgICAgICAgcGhhc2UgPSBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddW2luZGV4XQotICAgICAgICBpZiBpc2luc3RhbmNlKHBoYXNlLCBQQlhTb3VyY2VzQnVpbGRQaGFzZSkgb3IgXAotICAgICAgICAgICBpc2luc3RhbmNlKHBoYXNlLCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSk6Ci0gICAgICAgICAgaW5zZXJ0X2F0ID0gaW5kZXgKLSAgICAgICAgICBicmVhawotCi0gICAgICBzZWxmLl9wcm9wZXJ0aWVzWydidWlsZFBoYXNlcyddLmluc2VydChpbnNlcnRfYXQsIHJlc291cmNlc19waGFzZSkKLSAgICAgIHJlc291cmNlc19waGFzZS5wYXJlbnQgPSBzZWxmCi0KLSAgICByZXR1cm4gcmVzb3VyY2VzX3BoYXNlCi0KLSAgZGVmIFNvdXJjZXNQaGFzZShzZWxmKToKLSAgICBzb3VyY2VzX3BoYXNlID0gc2VsZi5HZXRCdWlsZFBoYXNlQnlUeXBlKFBCWFNvdXJjZXNCdWlsZFBoYXNlKQotICAgIGlmIHNvdXJjZXNfcGhhc2UgaXMgTm9uZToKLSAgICAgIHNvdXJjZXNfcGhhc2UgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZSgpCi0gICAgICBzZWxmLkFwcGVuZFByb3BlcnR5KCdidWlsZFBoYXNlcycsIHNvdXJjZXNfcGhhc2UpCi0KLSAgICByZXR1cm4gc291cmNlc19waGFzZQotCi0gIGRlZiBGcmFtZXdvcmtzUGhhc2Uoc2VsZik6Ci0gICAgZnJhbWV3b3Jrc19waGFzZSA9IHNlbGYuR2V0QnVpbGRQaGFzZUJ5VHlwZShQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSkKLSAgICBpZiBmcmFtZXdvcmtzX3BoYXNlIGlzIE5vbmU6Ci0gICAgICBmcmFtZXdvcmtzX3BoYXNlID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2UoKQotICAgICAgc2VsZi5BcHBlbmRQcm9wZXJ0eSgnYnVpbGRQaGFzZXMnLCBmcmFtZXdvcmtzX3BoYXNlKQotCi0gICAgcmV0dXJuIGZyYW1ld29ya3NfcGhhc2UKLQotICBkZWYgQWRkRGVwZW5kZW5jeShzZWxmLCBvdGhlcik6Ci0gICAgIyBzdXBlcgotICAgIFhDVGFyZ2V0LkFkZERlcGVuZGVuY3koc2VsZiwgb3RoZXIpCi0KLSAgICBzdGF0aWNfbGlicmFyeV90eXBlID0gJ2NvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMnCi0gICAgc2hhcmVkX2xpYnJhcnlfdHlwZSA9ICdjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYycKLSAgICBmcmFtZXdvcmtfdHlwZSA9ICdjb20uYXBwbGUucHJvZHVjdC10eXBlLmZyYW1ld29yaycKLSAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBQQlhOYXRpdmVUYXJnZXQpIGFuZCBcCi0gICAgICAgJ3Byb2R1Y3RUeXBlJyBpbiBzZWxmLl9wcm9wZXJ0aWVzIGFuZCBcCi0gICAgICAgc2VsZi5fcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSAhPSBzdGF0aWNfbGlicmFyeV90eXBlIGFuZCBcCi0gICAgICAgJ3Byb2R1Y3RUeXBlJyBpbiBvdGhlci5fcHJvcGVydGllcyBhbmQgXAotICAgICAgIChvdGhlci5fcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSA9PSBzdGF0aWNfbGlicmFyeV90eXBlIG9yIFwKLSAgICAgICAgKChvdGhlci5fcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSA9PSBzaGFyZWRfbGlicmFyeV90eXBlIG9yIFwKLSAgICAgICAgICBvdGhlci5fcHJvcGVydGllc1sncHJvZHVjdFR5cGUnXSA9PSBmcmFtZXdvcmtfdHlwZSkgYW5kIFwKLSAgICAgICAgICgobm90IG90aGVyLkhhc0J1aWxkU2V0dGluZygnTUFDSF9PX1RZUEUnKSkgb3IKLSAgICAgICAgICBvdGhlci5HZXRCdWlsZFNldHRpbmcoJ01BQ0hfT19UWVBFJykgIT0gJ21oX2J1bmRsZScpKSk6Ci0KLSAgICAgIGZpbGVfcmVmID0gb3RoZXIuR2V0UHJvcGVydHkoJ3Byb2R1Y3RSZWZlcmVuY2UnKQotCi0gICAgICBwYnhwcm9qZWN0ID0gc2VsZi5QQlhQcm9qZWN0QW5jZXN0b3IoKQotICAgICAgb3RoZXJfcGJ4cHJvamVjdCA9IG90aGVyLlBCWFByb2plY3RBbmNlc3RvcigpCi0gICAgICBpZiBwYnhwcm9qZWN0ICE9IG90aGVyX3BieHByb2plY3Q6Ci0gICAgICAgIG90aGVyX3Byb2plY3RfcHJvZHVjdF9ncm91cCA9IFwKLSAgICAgICAgICAgIHBieHByb2plY3QuQWRkT3JHZXRQcm9qZWN0UmVmZXJlbmNlKG90aGVyX3BieHByb2plY3QpWzBdCi0gICAgICAgIGZpbGVfcmVmID0gb3RoZXJfcHJvamVjdF9wcm9kdWN0X2dyb3VwLkdldENoaWxkQnlSZW1vdGVPYmplY3QoZmlsZV9yZWYpCi0KLSAgICAgIHNlbGYuRnJhbWV3b3Jrc1BoYXNlKCkuQXBwZW5kUHJvcGVydHkoJ2ZpbGVzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJYQnVpbGRGaWxlKHsnZmlsZVJlZic6IGZpbGVfcmVmfSkpCi0KLQotY2xhc3MgUEJYQWdncmVnYXRlVGFyZ2V0KFhDVGFyZ2V0KToKLSAgcGFzcwotCi0KLWNsYXNzIFBCWFByb2plY3QoWENDb250YWluZXJQb3J0YWwpOgotICAjIEEgUEJYUHJvamVjdCBpcyByZWFsbHkganVzdCBhbiBYQ09iamVjdCwgdGhlIFhDQ29udGFpbmVyUG9ydGFsIHRoaW5nIGlzCi0gICMganVzdCB0byBhbGxvdyBQQlhQcm9qZWN0IHRvIGJlIHVzZWQgaW4gdGhlIGNvbnRhaW5lclBvcnRhbCBwcm9wZXJ0eSBvZgotICAjIFBCWENvbnRhaW5lckl0ZW1Qcm94eS4KLSAgIiIiCi0KLSAgQXR0cmlidXRlczoKLSAgICBwYXRoOiAic2FtcGxlLnhjb2RlcHJvaiIuICBUT0RPKG1hcmspIERvY3VtZW50IG1lIQotICAgIF9vdGhlcl9wYnhwcm9qZWN0czogQSBkaWN0aW9uYXJ5LCBrZXllZCBieSBvdGhlciBQQlhQcm9qZWN0IG9iamVjdHMuICBFYWNoCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgZGljdCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RSZWZlcmVuY2VzIGxpc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXllZAotICAgICAgICAgICAgICAgICAgICAgICAgUEJYUHJvamVjdC4KLSAgIiIiCi0KLSAgX3NjaGVtYSA9IFhDQ29udGFpbmVyUG9ydGFsLl9zY2hlbWEuY29weSgpCi0gIF9zY2hlbWEudXBkYXRlKHsKLSAgICAnYXR0cmlidXRlcyc6ICAgICAgICAgICAgIFswLCBkaWN0LCAgICAgICAgICAgICAgICAwLCAwXSwKLSAgICAnYnVpbGRDb25maWd1cmF0aW9uTGlzdCc6IFswLCBYQ0NvbmZpZ3VyYXRpb25MaXN0LCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQ29uZmlndXJhdGlvbkxpc3QoKV0sCi0gICAgJ2NvbXBhdGliaWxpdHlWZXJzaW9uJzogICBbMCwgc3RyLCAgICAgICAgICAgICAgICAgMCwgMSwgJ1hjb2RlIDMuMiddLAotICAgICdoYXNTY2FubmVkRm9yRW5jb2RpbmdzJzogWzAsIGludCwgICAgICAgICAgICAgICAgIDAsIDEsIDFdLAotICAgICdtYWluR3JvdXAnOiAgICAgICAgICAgICAgWzAsIFBCWEdyb3VwLCAgICAgICAgICAgIDEsIDEsIFBCWEdyb3VwKCldLAotICAgICdwcm9qZWN0RGlyUGF0aCc6ICAgICAgICAgWzAsIHN0ciwgICAgICAgICAgICAgICAgIDAsIDEsICcnXSwKLSAgICAncHJvamVjdFJlZmVyZW5jZXMnOiAgICAgIFsxLCBkaWN0LCAgICAgICAgICAgICAgICAwLCAwXSwKLSAgICAncHJvamVjdFJvb3QnOiAgICAgICAgICAgIFswLCBzdHIsICAgICAgICAgICAgICAgICAwLCAxLCAnJ10sCi0gICAgJ3RhcmdldHMnOiAgICAgICAgICAgICAgICBbMSwgWENUYXJnZXQsICAgICAgICAgICAgMSwgMSwgW11dLAotICB9KQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzPU5vbmUsIGlkPU5vbmUsIHBhcmVudD1Ob25lLCBwYXRoPU5vbmUpOgotICAgIHNlbGYucGF0aCA9IHBhdGgKLSAgICBzZWxmLl9vdGhlcl9wYnhwcm9qZWN0cyA9IHt9Ci0gICAgIyBzdXBlcgotICAgIHJldHVybiBYQ0NvbnRhaW5lclBvcnRhbC5fX2luaXRfXyhzZWxmLCBwcm9wZXJ0aWVzLCBpZCwgcGFyZW50KQotCi0gIGRlZiBOYW1lKHNlbGYpOgotICAgIG5hbWUgPSBzZWxmLnBhdGgKLSAgICBpZiBuYW1lWy0xMDpdID09ICcueGNvZGVwcm9qJzoKLSAgICAgIG5hbWUgPSBuYW1lWzotMTBdCi0gICAgcmV0dXJuIHBvc2l4cGF0aC5iYXNlbmFtZShuYW1lKQotCi0gIGRlZiBQYXRoKHNlbGYpOgotICAgIHJldHVybiBzZWxmLnBhdGgKLQotICBkZWYgQ29tbWVudChzZWxmKToKLSAgICByZXR1cm4gJ1Byb2plY3Qgb2JqZWN0JwotCi0gIGRlZiBDaGlsZHJlbihzZWxmKToKLSAgICAjIHN1cGVyCi0gICAgY2hpbGRyZW4gPSBYQ0NvbnRhaW5lclBvcnRhbC5DaGlsZHJlbihzZWxmKQotCi0gICAgIyBBZGQgY2hpbGRyZW4gdGhhdCB0aGUgc2NoZW1hIGRvZXNuJ3Qga25vdyBhYm91dC4gIE1heWJlIHRoZXJlJ3MgYSBtb3JlCi0gICAgIyBlbGVnYW50IHdheSBhcm91bmQgdGhpcywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG93bgotICAgICMgb2JqZWN0cyBpbiBhIGRpY3Rpb25hcnkgKHRoYXQgaXMgaXRzZWxmIGluIGEgbGlzdCksIGFuZCB0aHJlZSBsaW5lcyBmb3IKLSAgICAjIGEgb25lLW9mZiBpc24ndCB0aGF0IGJpZyBhIGRlYWwuCi0gICAgaWYgJ3Byb2plY3RSZWZlcmVuY2VzJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgZm9yIHJlZmVyZW5jZSBpbiBzZWxmLl9wcm9wZXJ0aWVzWydwcm9qZWN0UmVmZXJlbmNlcyddOgotICAgICAgICBjaGlsZHJlbi5hcHBlbmQocmVmZXJlbmNlWydQcm9kdWN0R3JvdXAnXSkKLQotICAgIHJldHVybiBjaGlsZHJlbgotCi0gIGRlZiBQQlhQcm9qZWN0QW5jZXN0b3Ioc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYKLQotICBkZWYgX0dyb3VwQnlOYW1lKHNlbGYsIG5hbWUpOgotICAgIGlmIG5vdCAnbWFpbkdyb3VwJyBpbiBzZWxmLl9wcm9wZXJ0aWVzOgotICAgICAgc2VsZi5TZXRQcm9wZXJ0eSgnbWFpbkdyb3VwJywgUEJYR3JvdXAoKSkKLQotICAgIG1haW5fZ3JvdXAgPSBzZWxmLl9wcm9wZXJ0aWVzWydtYWluR3JvdXAnXQotICAgIGdyb3VwID0gbWFpbl9ncm91cC5HZXRDaGlsZEJ5TmFtZShuYW1lKQotICAgIGlmIGdyb3VwIGlzIE5vbmU6Ci0gICAgICBncm91cCA9IFBCWEdyb3VwKHsnbmFtZSc6IG5hbWV9KQotICAgICAgbWFpbl9ncm91cC5BcHBlbmRDaGlsZChncm91cCkKLQotICAgIHJldHVybiBncm91cAotCi0gICMgU291cmNlR3JvdXAgYW5kIFByb2R1Y3RzR3JvdXAgYXJlIGNyZWF0ZWQgYnkgZGVmYXVsdCBpbiBYY29kZSdzIG93bgotICAjIHRlbXBsYXRlcy4KLSAgZGVmIFNvdXJjZUdyb3VwKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9Hcm91cEJ5TmFtZSgnU291cmNlJykKLQotICBkZWYgUHJvZHVjdHNHcm91cChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fR3JvdXBCeU5hbWUoJ1Byb2R1Y3RzJykKLQotICAjIEludGVybWVkaWF0ZXNHcm91cCBpcyB1c2VkIHRvIGNvbGxlY3Qgc291cmNlLWxpa2UgZmlsZXMgdGhhdCBhcmUgZ2VuZXJhdGVkCi0gICMgYnkgcnVsZXMgb3Igc2NyaXB0IHBoYXNlcyBhbmQgYXJlIHBsYWNlZCBpbiBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgc3VjaAotICAjIGFzIERlcml2ZWRTb3VyY2VzLgotICBkZWYgSW50ZXJtZWRpYXRlc0dyb3VwKHNlbGYpOgotICAgIHJldHVybiBzZWxmLl9Hcm91cEJ5TmFtZSgnSW50ZXJtZWRpYXRlcycpCi0KLSAgIyBGcmFtZXdvcmtzR3JvdXAgYW5kIFByb2plY3RzR3JvdXAgYXJlIHRvcC1sZXZlbCBncm91cHMgdXNlZCB0byBjb2xsZWN0Ci0gICMgZnJhbWV3b3JrcyBhbmQgcHJvamVjdHMuCi0gIGRlZiBGcmFtZXdvcmtzR3JvdXAoc2VsZik6Ci0gICAgcmV0dXJuIHNlbGYuX0dyb3VwQnlOYW1lKCdGcmFtZXdvcmtzJykKLQotICBkZWYgUHJvamVjdHNHcm91cChzZWxmKToKLSAgICByZXR1cm4gc2VsZi5fR3JvdXBCeU5hbWUoJ1Byb2plY3RzJykKLQotICBkZWYgUm9vdEdyb3VwRm9yUGF0aChzZWxmLCBwYXRoKToKLSAgICAiIiJSZXR1cm5zIGEgUEJYR3JvdXAgY2hpbGQgb2YgdGhpcyBvYmplY3QgdG8gd2hpY2ggcGF0aCBzaG91bGQgYmUgYWRkZWQuCi0KLSAgICBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBjaG9vc2UgYmV0d2VlbiBTb3VyY2VHcm91cCBhbmQKLSAgICBJbnRlcm1lZGlhdGVzR3JvdXAgb24gdGhlIGJhc2lzIG9mIHdoZXRoZXIgcGF0aCBpcyBwcmVzZW50IGluIGEgc291cmNlCi0gICAgZGlyZWN0b3J5IG9yIGFuIGludGVybWVkaWF0ZXMgZGlyZWN0b3J5LiAgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzCi0gICAgZGV0ZXJtaW5hdGlvbiwgYW55IHBhdGggbG9jYXRlZCB3aXRoaW4gYSBkZXJpdmVkIGZpbGUgZGlyZWN0b3J5IHN1Y2ggYXMKLSAgICBQUk9KRUNUX0RFUklWRURfRklMRV9ESVIgaXMgdHJlYXRlZCBhcyBiZWluZyBpbiBhbiBpbnRlcm1lZGlhdGVzCi0gICAgZGlyZWN0b3J5LgotCi0gICAgVGhlIHJldHVybmVkIHZhbHVlIGlzIGEgdHdvLWVsZW1lbnQgdHVwbGUuICBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUKLSAgICBQQlhHcm91cCwgYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBzcGVjaWZpZXMgd2hldGhlciB0aGF0IGdyb3VwIHNob3VsZCBiZQotICAgIG9yZ2FuaXplZCBoaWVyYXJjaGljYWxseSAoVHJ1ZSkgb3IgYXMgYSBzaW5nbGUgZmxhdCBsaXN0IChGYWxzZSkuCi0gICAgIiIiCi0KLSAgICAjIFRPRE8obWFyayk6IG1ha2UgdGhpcyBhIGNsYXNzIHZhcmlhYmxlIGFuZCBiaW5kIHRvIHNlbGYgb24gY2FsbD8KLSAgICAjIEFsc28sIHRoaXMgbGlzdCBpcyBub3doZXJlIG5lYXIgZXhoYXVzdGl2ZS4KLSAgICAjIElOVEVSTUVESUFURV9ESVIgYW5kIFNIQVJFRF9JTlRFUk1FRElBVEVfRElSIGFyZSB1c2VkIGJ5Ci0gICAgIyBneXAuZ2VuZXJhdG9yLnhjb2RlLiAgVGhlcmUgc2hvdWxkIHByb2JhYmx5IGJlIHNvbWUgd2F5IGZvciB0aGF0IG1vZHVsZQotICAgICMgdG8gcHVzaCB0aGUgbmFtZXMgaW4sIHJhdGhlciB0aGFuIGhhdmluZyB0byBoYXJkLWNvZGUgdGhlbSBoZXJlLgotICAgIHNvdXJjZV90cmVlX2dyb3VwcyA9IHsKLSAgICAgICdERVJJVkVEX0ZJTEVfRElSJzogICAgICAgICAoc2VsZi5JbnRlcm1lZGlhdGVzR3JvdXAsIFRydWUpLAotICAgICAgJ0lOVEVSTUVESUFURV9ESVInOiAgICAgICAgIChzZWxmLkludGVybWVkaWF0ZXNHcm91cCwgVHJ1ZSksCi0gICAgICAnUFJPSkVDVF9ERVJJVkVEX0ZJTEVfRElSJzogKHNlbGYuSW50ZXJtZWRpYXRlc0dyb3VwLCBUcnVlKSwKLSAgICAgICdTSEFSRURfSU5URVJNRURJQVRFX0RJUic6ICAoc2VsZi5JbnRlcm1lZGlhdGVzR3JvdXAsIFRydWUpLAotICAgIH0KLQotICAgIChzb3VyY2VfdHJlZSwgcGF0aCkgPSBTb3VyY2VUcmVlQW5kUGF0aEZyb21QYXRoKHBhdGgpCi0gICAgaWYgc291cmNlX3RyZWUgIT0gTm9uZSBhbmQgc291cmNlX3RyZWUgaW4gc291cmNlX3RyZWVfZ3JvdXBzOgotICAgICAgKGdyb3VwX2Z1bmMsIGhpZXJhcmNoaWNhbCkgPSBzb3VyY2VfdHJlZV9ncm91cHNbc291cmNlX3RyZWVdCi0gICAgICBncm91cCA9IGdyb3VwX2Z1bmMoKQotICAgICAgcmV0dXJuIChncm91cCwgaGllcmFyY2hpY2FsKQotCi0gICAgIyBUT0RPKG1hcmspOiBtYWtlIGFkZGl0aW9uYWwgY2hvaWNlcyBiYXNlZCBvbiBmaWxlIGV4dGVuc2lvbi4KLQotICAgIHJldHVybiAoc2VsZi5Tb3VyY2VHcm91cCgpLCBUcnVlKQotCi0gIGRlZiBBZGRPckdldEZpbGVJblJvb3RHcm91cChzZWxmLCBwYXRoKToKLSAgICAiIiJSZXR1cm5zIGEgUEJYRmlsZVJlZmVyZW5jZSBjb3JyZXNwb25kaW5nIHRvIHBhdGggaW4gdGhlIGNvcnJlY3QgZ3JvdXAKLSAgICBhY2NvcmRpbmcgdG8gUm9vdEdyb3VwRm9yUGF0aCdzIGhldXJpc3RpY3MuCi0KLSAgICBJZiBhbiBleGlzdGluZyBQQlhGaWxlUmVmZXJlbmNlIGZvciBwYXRoIGV4aXN0cywgaXQgd2lsbCBiZSByZXR1cm5lZC4KLSAgICBPdGhlcndpc2UsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLgotICAgICIiIgotCi0gICAgKGdyb3VwLCBoaWVyYXJjaGljYWwpID0gc2VsZi5Sb290R3JvdXBGb3JQYXRoKHBhdGgpCi0gICAgcmV0dXJuIGdyb3VwLkFkZE9yR2V0RmlsZUJ5UGF0aChwYXRoLCBoaWVyYXJjaGljYWwpCi0KLSAgZGVmIFJvb3RHcm91cHNUYWtlT3Zlck9ubHlDaGlsZHJlbihzZWxmLCByZWN1cnNlPUZhbHNlKToKLSAgICAiIiJDYWxscyBUYWtlT3Zlck9ubHlDaGlsZCBmb3IgYWxsIGdyb3VwcyBpbiB0aGUgbWFpbiBncm91cC4iIiIKLQotICAgIGZvciBncm91cCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydtYWluR3JvdXAnXS5fcHJvcGVydGllc1snY2hpbGRyZW4nXToKLSAgICAgIGlmIGlzaW5zdGFuY2UoZ3JvdXAsIFBCWEdyb3VwKToKLSAgICAgICAgZ3JvdXAuVGFrZU92ZXJPbmx5Q2hpbGQocmVjdXJzZSkKLQotICBkZWYgU29ydEdyb3VwcyhzZWxmKToKLSAgICAjIFNvcnQgdGhlIGNoaWxkcmVuIG9mIHRoZSBtYWluR3JvdXAgKGxpa2UgIlNvdXJjZSIgYW5kICJQcm9kdWN0cyIpCi0gICAgIyBhY2NvcmRpbmcgdG8gdGhlaXIgZGVmaW5lZCBvcmRlci4KLSAgICBzZWxmLl9wcm9wZXJ0aWVzWydtYWluR3JvdXAnXS5fcHJvcGVydGllc1snY2hpbGRyZW4nXSA9IFwKLSAgICAgICAgc29ydGVkKHNlbGYuX3Byb3BlcnRpZXNbJ21haW5Hcm91cCddLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddLAotICAgICAgICAgICAgICAgY21wPWxhbWJkYSB4LHk6IHguQ29tcGFyZVJvb3RHcm91cCh5KSkKLQotICAgICMgU29ydCBldmVyeXRoaW5nIGVsc2UgYnkgcHV0dGluZyBncm91cCBiZWZvcmUgZmlsZXMsIGFuZCBnb2luZwotICAgICMgYWxwaGFiZXRpY2FsbHkgYnkgbmFtZSB3aXRoaW4gc2VjdGlvbnMgb2YgZ3JvdXBzIGFuZCBmaWxlcy4gIFNvcnRHcm91cAotICAgICMgaXMgcmVjdXJzaXZlLgotICAgIGZvciBncm91cCBpbiBzZWxmLl9wcm9wZXJ0aWVzWydtYWluR3JvdXAnXS5fcHJvcGVydGllc1snY2hpbGRyZW4nXToKLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGdyb3VwLCBQQlhHcm91cCk6Ci0gICAgICAgIGNvbnRpbnVlCi0KLSAgICAgIGlmIGdyb3VwLk5hbWUoKSA9PSAnUHJvZHVjdHMnOgotICAgICAgICAjIFRoZSBQcm9kdWN0cyBncm91cCBpcyBhIHNwZWNpYWwgY2FzZS4gIEluc3RlYWQgb2Ygc29ydGluZwotICAgICAgICAjIGFscGhhYmV0aWNhbGx5LCBzb3J0IHRoaW5ncyBpbiB0aGUgb3JkZXIgb2YgdGhlIHRhcmdldHMgdGhhdAotICAgICAgICAjIHByb2R1Y2UgdGhlIHByb2R1Y3RzLiAgVG8gZG8gdGhpcywganVzdCBidWlsZCB1cCBhIG5ldyBsaXN0IG9mCi0gICAgICAgICMgcHJvZHVjdHMgYmFzZWQgb24gdGhlIHRhcmdldHMuCi0gICAgICAgIHByb2R1Y3RzID0gW10KLSAgICAgICAgZm9yIHRhcmdldCBpbiBzZWxmLl9wcm9wZXJ0aWVzWyd0YXJnZXRzJ106Ci0gICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFyZ2V0LCBQQlhOYXRpdmVUYXJnZXQpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICBwcm9kdWN0ID0gdGFyZ2V0Ll9wcm9wZXJ0aWVzWydwcm9kdWN0UmVmZXJlbmNlJ10KLSAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBwcm9kdWN0IGlzIGFscmVhZHkgaW4gdGhlIHByb2R1Y3RzIGdyb3VwLgotICAgICAgICAgIGFzc2VydCBwcm9kdWN0IGluIGdyb3VwLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddCi0gICAgICAgICAgcHJvZHVjdHMuYXBwZW5kKHByb2R1Y3QpCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb2Nlc3MgZG9lc24ndCBtaXNzIGFueXRoaW5nIHRoYXQgd2FzIGFscmVhZHkKLSAgICAgICAgIyBpbiB0aGUgcHJvZHVjdHMgZ3JvdXAuCi0gICAgICAgIGFzc2VydCBsZW4ocHJvZHVjdHMpID09IGxlbihncm91cC5fcHJvcGVydGllc1snY2hpbGRyZW4nXSkKLSAgICAgICAgZ3JvdXAuX3Byb3BlcnRpZXNbJ2NoaWxkcmVuJ10gPSBwcm9kdWN0cwotICAgICAgZWxzZToKLSAgICAgICAgZ3JvdXAuU29ydEdyb3VwKCkKLQotICBkZWYgQWRkT3JHZXRQcm9qZWN0UmVmZXJlbmNlKHNlbGYsIG90aGVyX3BieHByb2plY3QpOgotICAgICIiIkFkZCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIHByb2plY3QgZmlsZSAodmlhIFBCWFByb2plY3Qgb2JqZWN0KSB0byB0aGlzCi0gICAgb25lLgotCi0gICAgUmV0dXJucyBbUHJvZHVjdEdyb3VwLCBQcm9qZWN0UmVmXS4gIFByb2R1Y3RHcm91cCBpcyBhIFBCWEdyb3VwIG9iamVjdCBpbgotICAgIHRoaXMgcHJvamVjdCBmaWxlIHRoYXQgY29udGFpbnMgYSBQQlhSZWZlcmVuY2VQcm94eSBvYmplY3QgZm9yIGVhY2gKLSAgICBwcm9kdWN0IG9mIGVhY2ggUEJYTmF0aXZlVGFyZ2V0IGluIHRoZSBvdGhlciBwcm9qZWN0IGZpbGUuICBQcm9qZWN0UmVmIGlzCi0gICAgYSBQQlhGaWxlUmVmZXJlbmNlIHRvIHRoZSBvdGhlciBwcm9qZWN0IGZpbGUuCi0KLSAgICBJZiB0aGlzIHByb2plY3QgZmlsZSBhbHJlYWR5IHJlZmVyZW5jZXMgdGhlIG90aGVyIHByb2plY3QgZmlsZSwgdGhlCi0gICAgZXhpc3RpbmcgUHJvZHVjdEdyb3VwIGFuZCBQcm9qZWN0UmVmIGFyZSByZXR1cm5lZC4gIFRoZSBQcm9kdWN0R3JvdXAgd2lsbAotICAgIHN0aWxsIGJlIHVwZGF0ZWQgaWYgbmVjZXNzYXJ5LgotICAgICIiIgotCi0gICAgaWYgbm90ICdwcm9qZWN0UmVmZXJlbmNlcycgaW4gc2VsZi5fcHJvcGVydGllczoKLSAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3Byb2plY3RSZWZlcmVuY2VzJ10gPSBbXQotCi0gICAgcHJvZHVjdF9ncm91cCA9IE5vbmUKLSAgICBwcm9qZWN0X3JlZiA9IE5vbmUKLQotICAgIGlmIG5vdCBvdGhlcl9wYnhwcm9qZWN0IGluIHNlbGYuX290aGVyX3BieHByb2plY3RzOgotICAgICAgIyBUaGlzIHByb2plY3QgZmlsZSBpc24ndCB5ZXQgbGlua2VkIHRvIHRoZSBvdGhlciBvbmUuICBFc3RhYmxpc2ggdGhlCi0gICAgICAjIGxpbmsuCi0gICAgICBwcm9kdWN0X2dyb3VwID0gUEJYR3JvdXAoeyduYW1lJzogJ1Byb2R1Y3RzJ30pCi0KLSAgICAgICMgUHJvZHVjdEdyb3VwIGlzIHN0cm9uZy4KLSAgICAgIHByb2R1Y3RfZ3JvdXAucGFyZW50ID0gc2VsZgotCi0gICAgICAjIFRoZXJlJ3Mgbm90aGluZyB1bmlxdWUgYWJvdXQgdGhpcyBQQlhHcm91cCwgYW5kIGlmIGxlZnQgYWxvbmUsIGl0IHdpbGwKLSAgICAgICMgd2luZCB1cCB3aXRoIHRoZSBzYW1lIHNldCBvZiBoYXNoYWJsZXMgYXMgYWxsIG90aGVyIFBCWEdyb3VwIG9iamVjdHMKLSAgICAgICMgb3duZWQgYnkgdGhlIHByb2plY3RSZWZlcmVuY2VzIGxpc3QuICBBZGQgdGhlIGhhc2hhYmxlcyBvZiB0aGUKLSAgICAgICMgcmVtb3RlIFBCWFByb2plY3QgdGhhdCBpdCdzIHJlbGF0ZWQgdG8uCi0gICAgICBwcm9kdWN0X2dyb3VwLl9oYXNoYWJsZXMuZXh0ZW5kKG90aGVyX3BieHByb2plY3QuSGFzaGFibGVzKCkpCi0KLSAgICAgICMgVGhlIG90aGVyIHByb2plY3QgcmVwb3J0cyBpdHMgcGF0aCBhcyByZWxhdGl2ZSB0byB0aGUgc2FtZSBkaXJlY3RvcnkKLSAgICAgICMgdGhhdCB0aGlzIHByb2plY3QncyBwYXRoIGlzIHJlbGF0aXZlIHRvLiAgVGhlIG90aGVyIHByb2plY3QncyBwYXRoCi0gICAgICAjIGlzIG5vdCBuZWNlc3NhcmlseSBhbHJlYWR5IHJlbGF0aXZlIHRvIHRoaXMgcHJvamVjdC4gIEZpZ3VyZSBvdXQgdGhlCi0gICAgICAjIHBhdGhuYW1lIHRoYXQgdGhpcyBwcm9qZWN0IG5lZWRzIHRvIHVzZSB0byByZWZlciB0byB0aGUgb3RoZXIgb25lLgotICAgICAgdGhpc19wYXRoID0gcG9zaXhwYXRoLmRpcm5hbWUoc2VsZi5QYXRoKCkpCi0gICAgICBwcm9qZWN0RGlyUGF0aCA9IHNlbGYuR2V0UHJvcGVydHkoJ3Byb2plY3REaXJQYXRoJykKLSAgICAgIGlmIHByb2plY3REaXJQYXRoOgotICAgICAgICBpZiBwb3NpeHBhdGguaXNhYnMocHJvamVjdERpclBhdGhbMF0pOgotICAgICAgICAgIHRoaXNfcGF0aCA9IHByb2plY3REaXJQYXRoCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgdGhpc19wYXRoID0gcG9zaXhwYXRoLmpvaW4odGhpc19wYXRoLCBwcm9qZWN0RGlyUGF0aCkKLSAgICAgIG90aGVyX3BhdGggPSBneXAuY29tbW9uLlJlbGF0aXZlUGF0aChvdGhlcl9wYnhwcm9qZWN0LlBhdGgoKSwgdGhpc19wYXRoKQotCi0gICAgICAjIFByb2plY3RSZWYgaXMgd2VhayAoaXQncyBvd25lZCBieSB0aGUgbWFpbkdyb3VwIGhpZXJhcmNoeSkuCi0gICAgICBwcm9qZWN0X3JlZiA9IFBCWEZpbGVSZWZlcmVuY2UoewotICAgICAgICAgICAgJ2xhc3RLbm93bkZpbGVUeXBlJzogJ3dyYXBwZXIucGItcHJvamVjdCcsCi0gICAgICAgICAgICAncGF0aCc6ICAgICAgICAgICAgICBvdGhlcl9wYXRoLAotICAgICAgICAgICAgJ3NvdXJjZVRyZWUnOiAgICAgICAgJ1NPVVJDRV9ST09UJywKLSAgICAgICAgICB9KQotICAgICAgc2VsZi5Qcm9qZWN0c0dyb3VwKCkuQXBwZW5kQ2hpbGQocHJvamVjdF9yZWYpCi0KLSAgICAgIHJlZl9kaWN0ID0geydQcm9kdWN0R3JvdXAnOiBwcm9kdWN0X2dyb3VwLCAnUHJvamVjdFJlZic6IHByb2plY3RfcmVmfQotICAgICAgc2VsZi5fb3RoZXJfcGJ4cHJvamVjdHNbb3RoZXJfcGJ4cHJvamVjdF0gPSByZWZfZGljdAotICAgICAgc2VsZi5BcHBlbmRQcm9wZXJ0eSgncHJvamVjdFJlZmVyZW5jZXMnLCByZWZfZGljdCkKLQotICAgICAgIyBYY29kZSBzZWVtcyB0byBzb3J0IHRoaXMgbGlzdCBjYXNlLWluc2Vuc2l0aXZlbHkKLSAgICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3Byb2plY3RSZWZlcmVuY2VzJ10gPSBcCi0gICAgICAgICAgc29ydGVkKHNlbGYuX3Byb3BlcnRpZXNbJ3Byb2plY3RSZWZlcmVuY2VzJ10sIGNtcD1sYW1iZGEgeCx5OgotICAgICAgICAgICAgICAgICBjbXAoeFsnUHJvamVjdFJlZiddLk5hbWUoKS5sb3dlcigpLAotICAgICAgICAgICAgICAgICAgICAgeVsnUHJvamVjdFJlZiddLk5hbWUoKS5sb3dlcigpKSkKLSAgICBlbHNlOgotICAgICAgIyBUaGUgbGluayBhbHJlYWR5IGV4aXN0cy4gIFB1bGwgb3V0IHRoZSByZWxldm50IGRhdGEuCi0gICAgICBwcm9qZWN0X3JlZl9kaWN0ID0gc2VsZi5fb3RoZXJfcGJ4cHJvamVjdHNbb3RoZXJfcGJ4cHJvamVjdF0KLSAgICAgIHByb2R1Y3RfZ3JvdXAgPSBwcm9qZWN0X3JlZl9kaWN0WydQcm9kdWN0R3JvdXAnXQotICAgICAgcHJvamVjdF9yZWYgPSBwcm9qZWN0X3JlZl9kaWN0WydQcm9qZWN0UmVmJ10KLQotICAgIHNlbGYuX1NldFVwUHJvZHVjdFJlZmVyZW5jZXMob3RoZXJfcGJ4cHJvamVjdCwgcHJvZHVjdF9ncm91cCwgcHJvamVjdF9yZWYpCi0KLSAgICByZXR1cm4gW3Byb2R1Y3RfZ3JvdXAsIHByb2plY3RfcmVmXQotCi0gIGRlZiBfU2V0VXBQcm9kdWN0UmVmZXJlbmNlcyhzZWxmLCBvdGhlcl9wYnhwcm9qZWN0LCBwcm9kdWN0X2dyb3VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9yZWYpOgotICAgICMgVE9ETyhtYXJrKTogVGhpcyBvbmx5IGFkZHMgcmVmZXJlbmNlcyB0byBwcm9kdWN0cyBpbiBvdGhlcl9wYnhwcm9qZWN0Ci0gICAgIyB3aGVuIHRoZXkgZG9uJ3QgZXhpc3QgaW4gdGhpcyBwYnhwcm9qZWN0LiAgUGVyaGFwcyBpdCBzaG91bGQgYWxzbwotICAgICMgcmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSB0aGlzIHBieHByb2plY3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQgaW4KLSAgICAjIG90aGVyX3BieHByb2plY3QuICBQZXJoYXBzIGl0IHNob3VsZCB1cGRhdGUgdmFyaW91cyBwcm9wZXJ0aWVzIGlmIHRoZXkKLSAgICAjIGNoYW5nZS4KLSAgICBmb3IgdGFyZ2V0IGluIG90aGVyX3BieHByb2plY3QuX3Byb3BlcnRpZXNbJ3RhcmdldHMnXToKLSAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhcmdldCwgUEJYTmF0aXZlVGFyZ2V0KToKLSAgICAgICAgY29udGludWUKLQotICAgICAgb3RoZXJfZmlsZXJlZiA9IHRhcmdldC5fcHJvcGVydGllc1sncHJvZHVjdFJlZmVyZW5jZSddCi0gICAgICBpZiBwcm9kdWN0X2dyb3VwLkdldENoaWxkQnlSZW1vdGVPYmplY3Qob3RoZXJfZmlsZXJlZikgaXMgTm9uZToKLSAgICAgICAgIyBYY29kZSBzZXRzIHJlbW90ZUluZm8gdG8gdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhbmQgbm90IHRoZSBuYW1lCi0gICAgICAgICMgb2YgaXRzIHByb2R1Y3QsIGRlc3BpdGUgdGhpcyBwcm94eSBiZWluZyBhIHJlZmVyZW5jZSB0byB0aGUgcHJvZHVjdC4KLSAgICAgICAgY29udGFpbmVyX2l0ZW0gPSBQQlhDb250YWluZXJJdGVtUHJveHkoewotICAgICAgICAgICAgICAnY29udGFpbmVyUG9ydGFsJzogICAgICBwcm9qZWN0X3JlZiwKLSAgICAgICAgICAgICAgJ3Byb3h5VHlwZSc6ICAgICAgICAgICAgMiwKLSAgICAgICAgICAgICAgJ3JlbW90ZUdsb2JhbElEU3RyaW5nJzogb3RoZXJfZmlsZXJlZiwKLSAgICAgICAgICAgICAgJ3JlbW90ZUluZm8nOiAgICAgICAgICAgdGFyZ2V0Lk5hbWUoKQotICAgICAgICAgICAgfSkKLSAgICAgICAgIyBUT0RPKG1hcmspOiBEb2VzIHNvdXJjZVRyZWUgZ2V0IGNvcGllZCBzdHJhaWdodCBvdmVyIGZyb20gdGhlIG90aGVyCi0gICAgICAgICMgcHJvamVjdD8gIENhbiB0aGUgb3RoZXIgcHJvamVjdCBldmVyIGhhdmUgbGFzdEtub3duRmlsZVR5cGUgaGVyZQotICAgICAgICAjIGluc3RlYWQgb2YgZXhwbGljaXRGaWxlVHlwZT8gIChVc2UgaXQgaWYgc28/KSAgQ2FuIHBhdGggZXZlciBiZQotICAgICAgICAjIHVuc2V0PyAgKEkgZG9uJ3QgdGhpbmsgc28uKSAgQ2FuIG90aGVyX2ZpbGVyZWYgaGF2ZSBuYW1lIHNldCwgYW5kCi0gICAgICAgICMgZG9lcyBpdCBpbXBhY3QgdGhlIFBCWFJlZmVyZW5jZVByb3h5IGlmIHNvPyAgVGhlc2UgYXJlIHRoZSBxdWVzdGlvbnMKLSAgICAgICAgIyB0aGF0IHBlcmhhcHMgd2lsbCBiZSBhbnN3ZXJlZCBvbmUgZGF5LgotICAgICAgICByZWZlcmVuY2VfcHJveHkgPSBQQlhSZWZlcmVuY2VQcm94eSh7Ci0gICAgICAgICAgICAgICdmaWxlVHlwZSc6ICAgb3RoZXJfZmlsZXJlZi5fcHJvcGVydGllc1snZXhwbGljaXRGaWxlVHlwZSddLAotICAgICAgICAgICAgICAncGF0aCc6ICAgICAgIG90aGVyX2ZpbGVyZWYuX3Byb3BlcnRpZXNbJ3BhdGgnXSwKLSAgICAgICAgICAgICAgJ3NvdXJjZVRyZWUnOiBvdGhlcl9maWxlcmVmLl9wcm9wZXJ0aWVzWydzb3VyY2VUcmVlJ10sCi0gICAgICAgICAgICAgICdyZW1vdGVSZWYnOiAgY29udGFpbmVyX2l0ZW0sCi0gICAgICAgICAgICB9KQotCi0gICAgICAgIHByb2R1Y3RfZ3JvdXAuQXBwZW5kQ2hpbGQocmVmZXJlbmNlX3Byb3h5KQotCi0gIGRlZiBTb3J0UmVtb3RlUHJvZHVjdFJlZmVyZW5jZXMoc2VsZik6Ci0gICAgIyBGb3IgZWFjaCByZW1vdGUgcHJvamVjdCBmaWxlLCBzb3J0IHRoZSBhc3NvY2lhdGVkIFByb2R1Y3RHcm91cCBpbiB0aGUKLSAgICAjIHNhbWUgb3JkZXIgdGhhdCB0aGUgdGFyZ2V0cyBhcmUgc29ydGVkIGluIHRoZSByZW1vdGUgcHJvamVjdCBmaWxlLiAgVGhpcwotICAgICMgaXMgdGhlIHNvcnQgb3JkZXIgdXNlZCBieSBYY29kZS4KLQotICAgIGRlZiBDb21wYXJlUHJvZHVjdHMoeCwgeSwgcmVtb3RlX3Byb2R1Y3RzKToKLSAgICAgICMgeCBhbmQgeSBhcmUgUEJYUmVmZXJlbmNlUHJveHkgb2JqZWN0cy4gIEdvIHRocm91Z2ggdGhlaXIgYXNzb2NpYXRlZAotICAgICAgIyBQQlhDb250YWluZXJJdGVtIHRvIGdldCB0aGUgcmVtb3RlIFBCWEZpbGVSZWZlcmVuY2UsIHdoaWNoIHdpbGwgYmUKLSAgICAgICMgcHJlc2VudCBpbiB0aGUgcmVtb3RlX3Byb2R1Y3RzIGxpc3QuCi0gICAgICB4X3JlbW90ZSA9IHguX3Byb3BlcnRpZXNbJ3JlbW90ZVJlZiddLl9wcm9wZXJ0aWVzWydyZW1vdGVHbG9iYWxJRFN0cmluZyddCi0gICAgICB5X3JlbW90ZSA9IHkuX3Byb3BlcnRpZXNbJ3JlbW90ZVJlZiddLl9wcm9wZXJ0aWVzWydyZW1vdGVHbG9iYWxJRFN0cmluZyddCi0gICAgICB4X2luZGV4ID0gcmVtb3RlX3Byb2R1Y3RzLmluZGV4KHhfcmVtb3RlKQotICAgICAgeV9pbmRleCA9IHJlbW90ZV9wcm9kdWN0cy5pbmRleCh5X3JlbW90ZSkKLQotICAgICAgIyBVc2UgdGhlIG9yZGVyIG9mIGVhY2ggcmVtb3RlIFBCWEZpbGVSZWZlcmVuY2UgaW4gcmVtb3RlX3Byb2R1Y3RzIHRvCi0gICAgICAjIGRldGVybWluZSB0aGUgc29ydCBvcmRlci4KLSAgICAgIHJldHVybiBjbXAoeF9pbmRleCwgeV9pbmRleCkKLQotICAgIGZvciBvdGhlcl9wYnhwcm9qZWN0LCByZWZfZGljdCBpbiBzZWxmLl9vdGhlcl9wYnhwcm9qZWN0cy5pdGVyaXRlbXMoKToKLSAgICAgICMgQnVpbGQgdXAgYSBsaXN0IG9mIHByb2R1Y3RzIGluIHRoZSByZW1vdGUgcHJvamVjdCBmaWxlLCBvcmRlcmVkIHRoZQotICAgICAgIyBzYW1lIGFzIHRoZSB0YXJnZXRzIHRoYXQgcHJvZHVjZSB0aGVtLgotICAgICAgcmVtb3RlX3Byb2R1Y3RzID0gW10KLSAgICAgIGZvciB0YXJnZXQgaW4gb3RoZXJfcGJ4cHJvamVjdC5fcHJvcGVydGllc1sndGFyZ2V0cyddOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YXJnZXQsIFBCWE5hdGl2ZVRhcmdldCk6Ci0gICAgICAgICAgY29udGludWUKLSAgICAgICAgcmVtb3RlX3Byb2R1Y3RzLmFwcGVuZCh0YXJnZXQuX3Byb3BlcnRpZXNbJ3Byb2R1Y3RSZWZlcmVuY2UnXSkKLQotICAgICAgIyBTb3J0IHRoZSBQQlhSZWZlcmVuY2VQcm94eSBjaGlsZHJlbiBhY2NvcmRpbmcgdG8gdGhlIGxpc3Qgb2YgcmVtb3RlCi0gICAgICAjIHByb2R1Y3RzLgotICAgICAgcHJvZHVjdF9ncm91cCA9IHJlZl9kaWN0WydQcm9kdWN0R3JvdXAnXQotICAgICAgcHJvZHVjdF9ncm91cC5fcHJvcGVydGllc1snY2hpbGRyZW4nXSA9IHNvcnRlZCgKLSAgICAgICAgICBwcm9kdWN0X2dyb3VwLl9wcm9wZXJ0aWVzWydjaGlsZHJlbiddLAotICAgICAgICAgIGNtcD1sYW1iZGEgeCwgeTogQ29tcGFyZVByb2R1Y3RzKHgsIHksIHJlbW90ZV9wcm9kdWN0cykpCi0KLQotY2xhc3MgWENQcm9qZWN0RmlsZShYQ09iamVjdCk6Ci0gIF9zY2hlbWEgPSBYQ09iamVjdC5fc2NoZW1hLmNvcHkoKQotICBfc2NoZW1hLnVwZGF0ZSh7Ci0gICAgJ2FyY2hpdmVWZXJzaW9uJzogWzAsIGludCwgICAgICAgIDAsIDEsIDFdLAotICAgICdjbGFzc2VzJzogICAgICAgIFswLCBkaWN0LCAgICAgICAwLCAxLCB7fV0sCi0gICAgJ29iamVjdFZlcnNpb24nOiAgWzAsIGludCwgICAgICAgIDAsIDEsIDQ1XSwKLSAgICAncm9vdE9iamVjdCc6ICAgICBbMCwgUEJYUHJvamVjdCwgMSwgMV0sCi0gIH0pCi0KLSAgZGVmIFNldFhjb2RlVmVyc2lvbihzZWxmLCB2ZXJzaW9uKToKLSAgICB2ZXJzaW9uX3RvX29iamVjdF92ZXJzaW9uID0gewotICAgICAgJzIuNCc6IDQ1LAotICAgICAgJzMuMCc6IDQ1LAotICAgICAgJzMuMSc6IDQ1LAotICAgICAgJzMuMic6IDQ2LAotICAgIH0KLSAgICBpZiBub3QgdmVyc2lvbiBpbiB2ZXJzaW9uX3RvX29iamVjdF92ZXJzaW9uOgotICAgICAgc3VwcG9ydGVkX3N0ciA9ICcsICcuam9pbihzb3J0ZWQodmVyc2lvbl90b19vYmplY3RfdmVyc2lvbi5rZXlzKCkpKQotICAgICAgcmFpc2UgRXhjZXB0aW9uKAotICAgICAgICAgICdVbnN1cHBvcnRlZCBYY29kZSB2ZXJzaW9uICVzIChzdXBwb3J0ZWQ6ICVzKScgJQotICAgICAgICAgICggdmVyc2lvbiwgc3VwcG9ydGVkX3N0ciApICkKLSAgICBjb21wYXRpYmlsaXR5X3ZlcnNpb24gPSAnWGNvZGUgJXMnICUgdmVyc2lvbgotICAgIHNlbGYuX3Byb3BlcnRpZXNbJ3Jvb3RPYmplY3QnXS5TZXRQcm9wZXJ0eSgnY29tcGF0aWJpbGl0eVZlcnNpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5X3ZlcnNpb24pCi0gICAgc2VsZi5TZXRQcm9wZXJ0eSgnb2JqZWN0VmVyc2lvbicsIHZlcnNpb25fdG9fb2JqZWN0X3ZlcnNpb25bdmVyc2lvbl0pOwotCi0gIGRlZiBDb21wdXRlSURzKHNlbGYsIHJlY3Vyc2l2ZT1UcnVlLCBvdmVyd3JpdGU9VHJ1ZSwgaGFzaD1Ob25lKToKLSAgICAjIEFsdGhvdWdoIFhDUHJvamVjdEZpbGUgaXMgaW1wbGVtZW50ZWQgaGVyZSBhcyBhbiBYQ09iamVjdCwgaXQncyBub3QgYQotICAgICMgcHJvcGVyIG9iamVjdCBpbiB0aGUgWGNvZGUgc2Vuc2UsIGFuZCBpdCBjZXJ0YWlubHkgZG9lc24ndCBoYXZlIGl0cyBvd24KLSAgICAjIElELiAgUGFzcyB0aHJvdWdoIGFuIGF0dGVtcHQgdG8gdXBkYXRlIElEcyB0byB0aGUgcmVhbCByb290IG9iamVjdC4KLSAgICBpZiByZWN1cnNpdmU6Ci0gICAgICBzZWxmLl9wcm9wZXJ0aWVzWydyb290T2JqZWN0J10uQ29tcHV0ZUlEcyhyZWN1cnNpdmUsIG92ZXJ3cml0ZSwgaGFzaCkKLQotICBkZWYgUHJpbnQoc2VsZiwgZmlsZT1zeXMuc3Rkb3V0KToKLSAgICBzZWxmLlZlcmlmeUhhc1JlcXVpcmVkUHJvcGVydGllcygpCi0KLSAgICAjIEFkZCB0aGUgc3BlY2lhbCAib2JqZWN0cyIgcHJvcGVydHksIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGFuZCBoYW5kbGVkCi0gICAgIyBzZXBhcmF0ZWx5IGR1cmluZyBwcmludGluZy4gIFRoaXMgc3RydWN0dXJlIGFsbG93cyBhIGZhaXJseSBzdGFuZGFyZAotICAgICMgbG9vcCBkbyB0aGUgbm9ybWFsIHByaW50aW5nLgotICAgIHNlbGYuX3Byb3BlcnRpZXNbJ29iamVjdHMnXSA9IHt9Ci0gICAgc2VsZi5fWENQcmludChmaWxlLCAwLCAnLy8gISQqVVRGOCokIVxuJykKLSAgICBpZiBzZWxmLl9zaG91bGRfcHJpbnRfc2luZ2xlX2xpbmU6Ci0gICAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDAsICd7ICcpCi0gICAgZWxzZToKLSAgICAgIHNlbGYuX1hDUHJpbnQoZmlsZSwgMCwgJ3tcbicpCi0gICAgZm9yIHByb3BlcnR5LCB2YWx1ZSBpbiBzb3J0ZWQoc2VsZi5fcHJvcGVydGllcy5pdGVyaXRlbXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXA9bGFtYmRhIHgsIHk6IGNtcCh4LCB5KSk6Ci0gICAgICBpZiBwcm9wZXJ0eSA9PSAnb2JqZWN0cyc6Ci0gICAgICAgIHNlbGYuX1ByaW50T2JqZWN0cyhmaWxlKQotICAgICAgZWxzZToKLSAgICAgICAgc2VsZi5fWENLVlByaW50KGZpbGUsIDEsIHByb3BlcnR5LCB2YWx1ZSkKLSAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDAsICd9XG4nKQotICAgIGRlbCBzZWxmLl9wcm9wZXJ0aWVzWydvYmplY3RzJ10KLQotICBkZWYgX1ByaW50T2JqZWN0cyhzZWxmLCBmaWxlKToKLSAgICBpZiBzZWxmLl9zaG91bGRfcHJpbnRfc2luZ2xlX2xpbmU6Ci0gICAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDAsICdvYmplY3RzID0geycpCi0gICAgZWxzZToKLSAgICAgIHNlbGYuX1hDUHJpbnQoZmlsZSwgMSwgJ29iamVjdHMgPSB7XG4nKQotCi0gICAgb2JqZWN0c19ieV9jbGFzcyA9IHt9Ci0gICAgZm9yIG9iamVjdCBpbiBzZWxmLkRlc2NlbmRhbnRzKCk6Ci0gICAgICBpZiBvYmplY3QgPT0gc2VsZjoKLSAgICAgICAgY29udGludWUKLSAgICAgIGNsYXNzX25hbWUgPSBvYmplY3QuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICBpZiBub3QgY2xhc3NfbmFtZSBpbiBvYmplY3RzX2J5X2NsYXNzOgotICAgICAgICBvYmplY3RzX2J5X2NsYXNzW2NsYXNzX25hbWVdID0gW10KLSAgICAgIG9iamVjdHNfYnlfY2xhc3NbY2xhc3NfbmFtZV0uYXBwZW5kKG9iamVjdCkKLQotICAgIGZvciBjbGFzc19uYW1lIGluIHNvcnRlZChvYmplY3RzX2J5X2NsYXNzKToKLSAgICAgIHNlbGYuX1hDUHJpbnQoZmlsZSwgMCwgJ1xuJykKLSAgICAgIHNlbGYuX1hDUHJpbnQoZmlsZSwgMCwgJy8qIEJlZ2luICcgKyBjbGFzc19uYW1lICsgJyBzZWN0aW9uICovXG4nKQotICAgICAgZm9yIG9iamVjdCBpbiBzb3J0ZWQob2JqZWN0c19ieV9jbGFzc1tjbGFzc19uYW1lXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtcD1sYW1iZGEgeCwgeTogY21wKHguaWQsIHkuaWQpKToKLSAgICAgICAgb2JqZWN0LlByaW50KGZpbGUpCi0gICAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDAsICcvKiBFbmQgJyArIGNsYXNzX25hbWUgKyAnIHNlY3Rpb24gKi9cbicpCi0KLSAgICBpZiBzZWxmLl9zaG91bGRfcHJpbnRfc2luZ2xlX2xpbmU6Ci0gICAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDAsICd9OyAnKQotICAgIGVsc2U6Ci0gICAgICBzZWxmLl9YQ1ByaW50KGZpbGUsIDEsICd9O1xuJykKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpYi9neXAveG1sX2ZpeC5weSBiL3Rvb2xzL2d5cC9weWxpYi9neXAveG1sX2ZpeC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlODQ4MS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaWIvZ3lwL3htbF9maXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIkFwcGxpZXMgYSBmaXggdG8gQ1IgTEYgVEFCIGhhbmRsaW5nIGluIHhtbC5kb20uCi0KLUZpeGVzIHRoaXM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTc2MjkzCi1Xb3JraW5nIGFyb3VuZCB0aGlzOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTc1MgotVE9ETyhicmFkbmVsc29uKTogQ29uc2lkZXIgZHJvcHBpbmcgdGhpcyB3aGVuIHdlIGRyb3AgWFAgc3VwcG9ydC4KLSIiIgotCi0KLWltcG9ydCB4bWwuZG9tLm1pbmlkb20KLQotCi1kZWYgX1JlcGxhY2VtZW50X3dyaXRlX2RhdGEod3JpdGVyLCBkYXRhLCBpc19hdHRyaWI9RmFsc2UpOgotICAiIiJXcml0ZXMgZGF0YWNoYXJzIHRvIHdyaXRlci4iIiIKLSAgZGF0YSA9IGRhdGEucmVwbGFjZSgiJiIsICImYW1wOyIpLnJlcGxhY2UoIjwiLCAiJmx0OyIpCi0gIGRhdGEgPSBkYXRhLnJlcGxhY2UoIlwiIiwgIiZxdW90OyIpLnJlcGxhY2UoIj4iLCAiJmd0OyIpCi0gIGlmIGlzX2F0dHJpYjoKLSAgICBkYXRhID0gZGF0YS5yZXBsYWNlKAotICAgICAgICAiXHIiLCAiJiN4RDsiKS5yZXBsYWNlKAotICAgICAgICAiXG4iLCAiJiN4QTsiKS5yZXBsYWNlKAotICAgICAgICAiXHQiLCAiJiN4OTsiKQotICB3cml0ZXIud3JpdGUoZGF0YSkKLQotCi1kZWYgX1JlcGxhY2VtZW50X3dyaXRleG1sKHNlbGYsIHdyaXRlciwgaW5kZW50PSIiLCBhZGRpbmRlbnQ9IiIsIG5ld2w9IiIpOgotICAjIGluZGVudCA9IGN1cnJlbnQgaW5kZW50YXRpb24KLSAgIyBhZGRpbmRlbnQgPSBpbmRlbnRhdGlvbiB0byBhZGQgdG8gaGlnaGVyIGxldmVscwotICAjIG5ld2wgPSBuZXdsaW5lIHN0cmluZwotICB3cml0ZXIud3JpdGUoaW5kZW50KyI8IiArIHNlbGYudGFnTmFtZSkKLQotICBhdHRycyA9IHNlbGYuX2dldF9hdHRyaWJ1dGVzKCkKLSAgYV9uYW1lcyA9IGF0dHJzLmtleXMoKQotICBhX25hbWVzLnNvcnQoKQotCi0gIGZvciBhX25hbWUgaW4gYV9uYW1lczoKLSAgICB3cml0ZXIud3JpdGUoIiAlcz1cIiIgJSBhX25hbWUpCi0gICAgX1JlcGxhY2VtZW50X3dyaXRlX2RhdGEod3JpdGVyLCBhdHRyc1thX25hbWVdLnZhbHVlLCBpc19hdHRyaWI9VHJ1ZSkKLSAgICB3cml0ZXIud3JpdGUoIlwiIikKLSAgaWYgc2VsZi5jaGlsZE5vZGVzOgotICAgIHdyaXRlci53cml0ZSgiPiVzIiAlIG5ld2wpCi0gICAgZm9yIG5vZGUgaW4gc2VsZi5jaGlsZE5vZGVzOgotICAgICAgbm9kZS53cml0ZXhtbCh3cml0ZXIsIGluZGVudCArIGFkZGluZGVudCwgYWRkaW5kZW50LCBuZXdsKQotICAgIHdyaXRlci53cml0ZSgiJXM8LyVzPiVzIiAlIChpbmRlbnQsIHNlbGYudGFnTmFtZSwgbmV3bCkpCi0gIGVsc2U6Ci0gICAgd3JpdGVyLndyaXRlKCIvPiVzIiAlIG5ld2wpCi0KLQotY2xhc3MgWG1sRml4KG9iamVjdCk6Ci0gICIiIk9iamVjdCB0byBtYW5hZ2UgdGVtcG9yYXJ5IHBhdGNoaW5nIG9mIHhtbC5kb20ubWluaWRvbS4iIiIKLQotICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgIyBQcmVzZXJ2ZSBjdXJyZW50IHhtbC5kb20ubWluaWRvbSBmdW5jdGlvbnMuCi0gICAgc2VsZi53cml0ZV9kYXRhID0geG1sLmRvbS5taW5pZG9tLl93cml0ZV9kYXRhCi0gICAgc2VsZi53cml0ZXhtbCA9IHhtbC5kb20ubWluaWRvbS5FbGVtZW50LndyaXRleG1sCi0gICAgIyBJbmplY3QgcmVwbGFjZW1lbnQgdmVyc2lvbnMgb2YgYSBmdW5jdGlvbiBhbmQgYSBtZXRob2QuCi0gICAgeG1sLmRvbS5taW5pZG9tLl93cml0ZV9kYXRhID0gX1JlcGxhY2VtZW50X3dyaXRlX2RhdGEKLSAgICB4bWwuZG9tLm1pbmlkb20uRWxlbWVudC53cml0ZXhtbCA9IF9SZXBsYWNlbWVudF93cml0ZXhtbAotCi0gIGRlZiBDbGVhbnVwKHNlbGYpOgotICAgIGlmIHNlbGYud3JpdGVfZGF0YToKLSAgICAgIHhtbC5kb20ubWluaWRvbS5fd3JpdGVfZGF0YSA9IHNlbGYud3JpdGVfZGF0YQotICAgICAgeG1sLmRvbS5taW5pZG9tLkVsZW1lbnQud3JpdGV4bWwgPSBzZWxmLndyaXRleG1sCi0gICAgICBzZWxmLndyaXRlX2RhdGEgPSBOb25lCi0KLSAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgc2VsZi5DbGVhbnVwKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9weWxpbnRyYyBiL3Rvb2xzL2d5cC9weWxpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdjMjNkMi4uMDAwMDAwMAotLS0gYS90b29scy9neXAvcHlsaW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotW01BU1RFUl0KLQotIyBTcGVjaWZ5IGEgY29uZmlndXJhdGlvbiBmaWxlLgotI3JjZmlsZT0KLQotIyBQeXRob24gY29kZSB0byBleGVjdXRlLCB1c3VhbGx5IGZvciBzeXMucGF0aCBtYW5pcHVsYXRpb24gc3VjaCBhcwotIyBweWd0ay5yZXF1aXJlKCkuCi0jaW5pdC1ob29rPQotCi0jIFByb2ZpbGVkIGV4ZWN1dGlvbi4KLXByb2ZpbGU9bm8KLQotIyBBZGQgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gdGhlIGJsYWNrbGlzdC4gVGhleSBzaG91bGQgYmUgYmFzZSBuYW1lcywgbm90Ci0jIHBhdGhzLgotaWdub3JlPUNWUwotCi0jIFBpY2tsZSBjb2xsZWN0ZWQgZGF0YSBmb3IgbGF0ZXIgY29tcGFyaXNvbnMuCi1wZXJzaXN0ZW50PXllcwotCi0jIExpc3Qgb2YgcGx1Z2lucyAoYXMgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyBvZiBweXRob24gbW9kdWxlcyBuYW1lcykgdG8gbG9hZCwKLSMgdXN1YWxseSB0byByZWdpc3RlciBhZGRpdGlvbmFsIGNoZWNrZXJzLgotbG9hZC1wbHVnaW5zPQotCi0KLVtNRVNTQUdFUyBDT05UUk9MXQotCi0jIEVuYWJsZSB0aGUgbWVzc2FnZSwgcmVwb3J0LCBjYXRlZ29yeSBvciBjaGVja2VyIHdpdGggdGhlIGdpdmVuIGlkKHMpLiBZb3UgY2FuCi0jIGVpdGhlciBnaXZlIG11bHRpcGxlIGlkZW50aWZpZXIgc2VwYXJhdGVkIGJ5IGNvbW1hICgsKSBvciBwdXQgdGhpcyBvcHRpb24KLSMgbXVsdGlwbGUgdGltZS4KLSNlbmFibGU9Ci0KLSMgRGlzYWJsZSB0aGUgbWVzc2FnZSwgcmVwb3J0LCBjYXRlZ29yeSBvciBjaGVja2VyIHdpdGggdGhlIGdpdmVuIGlkKHMpLiBZb3UKLSMgY2FuIGVpdGhlciBnaXZlIG11bHRpcGxlIGlkZW50aWZpZXIgc2VwYXJhdGVkIGJ5IGNvbW1hICgsKSBvciBwdXQgdGhpcyBvcHRpb24KLSMgbXVsdGlwbGUgdGltZSAob25seSBvbiB0aGUgY29tbWFuZCBsaW5lLCBub3QgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGVyZQotIyBpdCBzaG91bGQgYXBwZWFyIG9ubHkgb25jZSkuCi0jIEMwMTAzOiBJbnZhbGlkIG5hbWUgIk5OIiAoc2hvdWxkIG1hdGNoIFthLXpfXVthLXowLTlfXXsyLDMwfSQpCi0jIEMwMTExOiBNaXNzaW5nIGRvY3N0cmluZwotIyBDMDMwMjogVG9vIG1hbnkgbGluZXMgaW4gbW9kdWxlIChOTikKLSMgUjA5MDI6IFRvbyBtYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgKE4vNykKLSMgUjA5MDM6IFRvbyBmZXcgcHVibGljIG1ldGhvZHMgKE4vMikKLSMgUjA5MDQ6IFRvbyBtYW55IHB1YmxpYyBtZXRob2RzIChOTi8yMCkKLSMgUjA5MTI6IFRvbyBtYW55IGJyYW5jaGVzIChOTi8xMikKLSMgUjA5MTM6IFRvbyBtYW55IGFyZ3VtZW50cyAoTi81KQotIyBSMDkxNDogVG9vIG1hbnkgbG9jYWwgdmFyaWFibGVzIChOTi8xNSkKLSMgUjA5MTU6IFRvbyBtYW55IHN0YXRlbWVudHMgKE5OLzUwKQotIyBXMDE0MTogVXNlZCBidWlsdGluIGZ1bmN0aW9uICdtYXAnCi0jIFcwMTQyOiBVc2VkICogb3IgKiogbWFnaWMKLSMgVzAyMzI6IENsYXNzIGhhcyBubyBfX2luaXRfXyBtZXRob2QKLSMgVzA1MTE6IFRPRE8KLSMgVzA2MDM6IFVzaW5nIHRoZSBnbG9iYWwgc3RhdGVtZW50Ci0jCi0jIFRoZXNlIHNob3VsZCBiZSBlbmFibGVkIGV2ZW50dWFsbHk6Ci0jIEMwMTEyOiBFbXB0eSBkb2NzdHJpbmcKLSMgQzAzMDE6IExpbmUgdG9vIGxvbmcgKE5OLzgwKQotIyBDMDMyMTogTW9yZSB0aGFuIG9uZSBzdGF0ZW1lbnQgb24gc2luZ2xlIGxpbmUKLSMgQzAzMjI6IE9wZXJhdG9yIG5vdCBwcmVjZWRlZCBieSBhIHNwYWNlCi0jIEMwMzIzOiBPcGVyYXRvciBub3QgZm9sbG93ZWQgYnkgYSBzcGFjZQotIyBDMDMyNDogQ29tbWEgbm90IGZvbGxvd2VkIGJ5IGEgc3BhY2UKLSMgRTAxMDE6IEV4cGxpY2l0IHJldHVybiBpbiBfX2luaXRfXwotIyBFMDEwMjogZnVuY3Rpb24gYWxyZWFkeSBkZWZpbmVkIGxpbmUgTk4KLSMgRTEwMDI6IFVzZSBvZiBzdXBlciBvbiBhbiBvbGQgc3R5bGUgY2xhc3MKLSMgRTExMDE6IEluc3RhbmNlIG9mICdYWCcgaGFzIG5vICdZWScgbWVtYmVyCi0jIEUxMTAzOiBJbnN0YW5jZSBvZiAnWFgnIGhhcyBubyAnWFgnIG1lbWJlciAoYnV0IHNvbWUgdHlwZXMgY291bGQgbm90IGJlIGluZmVycmVkKQotIyBFMDYwMjogVW5kZWZpbmVkIHZhcmlhYmxlICdYWCcKLSMgRjA0MDE6IFVuYWJsZSB0byBpbXBvcnQgJ1hYJwotIyBSMDIwMTogTWV0aG9kIGNvdWxkIGJlIGEgZnVuY3Rpb24KLSMgUjA4MDE6IFNpbWlsYXIgbGluZXMgaW4gTiBmaWxlcwotIyBXMDEwMjogRGFuZ2Vyb3VzIGRlZmF1bHQgdmFsdWUge30gYXMgYXJndW1lbnQKLSMgVzAxMDQ6IFN0YXRlbWVudCBzZWVtcyB0byBoYXZlIG5vIGVmZmVjdAotIyBXMDEwNTogU3RyaW5nIHN0YXRlbWVudCBoYXMgbm8gZWZmZWN0Ci0jIFcwMTA4OiBMYW1iZGEgbWF5IG5vdCBiZSBuZWNlc3NhcnkKLSMgVzAyMDE6IEF0dHJpYnV0ZSAnWFgnIGRlZmluZWQgb3V0c2lkZSBfX2luaXRfXwotIyBXMDIxMjogQWNjZXNzIHRvIGEgcHJvdGVjdGVkIG1lbWJlciBYWCBvZiBhIGNsaWVudCBjbGFzcwotIyBXMDIyMTogQXJndW1lbnRzIG51bWJlciBkaWZmZXJzIGZyb20gb3ZlcnJpZGRlbiBtZXRob2QKLSMgVzAyMjM6IE1ldGhvZCAnWFgnIGlzIGFic3RyYWN0IGluIGNsYXNzICdZWScgYnV0IGlzIG5vdCBvdmVycmlkZGVuCi0jIFcwMjMxOiBfX2luaXRfXyBtZXRob2QgZnJvbSBiYXNlIGNsYXNzICdYWCcgaXMgbm90IGNhbGxlZAotIyBXMDMwMTogVW5uZWNlc3Nhcnkgc2VtaWNvbG9uCi0jIFcwMzExOiBCYWQgaW5kZW50YXRpb24uIEZvdW5kIE5OIHNwYWNlcywgZXhwZWN0ZWQgTk4KLSMgVzA0MDE6IFdpbGRjYXJkIGltcG9ydCBYWAotIyBXMDQwMjogVXNlcyBvZiBhIGRlcHJlY2F0ZWQgbW9kdWxlICdzdHJpbmcnCi0jIFcwNDAzOiBSZWxhdGl2ZSBpbXBvcnQgJ1hYJywgc2hvdWxkIGJlICdZWS5YWCcKLSMgVzA0MDQ6IFJlaW1wb3J0ICdYWCcgKGltcG9ydGVkIGxpbmUgTk4pCi0jIFcwNjAxOiBHbG9iYWwgdmFyaWFibGUgJ1hYJyB1bmRlZmluZWQgYXQgdGhlIG1vZHVsZSBsZXZlbAotIyBXMDYwMjogVXNpbmcgZ2xvYmFsIGZvciAnWFgnIGJ1dCBubyBhc3NpZ25tZW50IGlzIGRvbmUKLSMgVzA2MTE6IFVudXNlZCBpbXBvcnQgcHByaW50Ci0jIFcwNjEyOiBVbnVzZWQgdmFyaWFibGUgJ1hYJwotIyBXMDYxMzogVW51c2VkIGFyZ3VtZW50ICdYWCcKLSMgVzA2MTQ6IFVudXNlZCBpbXBvcnQgWFggZnJvbSB3aWxkY2FyZCBpbXBvcnQKLSMgVzA2MjE6IFJlZGVmaW5pbmcgbmFtZSAnWFgnIGZyb20gb3V0ZXIgc2NvcGUgKGxpbmUgTk4pCi0jIFcwNjIyOiBSZWRlZmluaW5nIGJ1aWx0LWluICdOTicKLSMgVzA2MzE6IFVzaW5nIHBvc3NpYmx5IHVuZGVmaW5lZCBsb29wIHZhcmlhYmxlICdYWCcKLSMgVzA3MDE6IFJhaXNpbmcgYSBzdHJpbmcgZXhjZXB0aW9uCi0jIFcwNzAyOiBObyBleGNlcHRpb24gdHlwZShzKSBzcGVjaWZpZWQKLWRpc2FibGU9QzAxMDMsQzAxMTEsQzAzMDIsUjA5MDIsUjA5MDMsUjA5MDQsUjA5MTIsUjA5MTMsUjA5MTQsUjA5MTUsVzAxNDEsVzAxNDIsVzAyMzIsVzA1MTEsVzA2MDMsQzAxMTIsQzAzMDEsQzAzMjEsQzAzMjIsQzAzMjMsQzAzMjQsRTAxMDEsRTAxMDIsRTEwMDIsRTExMDEsRTExMDMsRTA2MDIsRjA0MDEsUjAyMDEsUjA4MDEsVzAxMDIsVzAxMDQsVzAxMDUsVzAxMDgsVzAyMDEsVzAyMTIsVzAyMjEsVzAyMjMsVzAyMzEsVzAzMDEsVzAzMTEsVzA0MDEsVzA0MDIsVzA0MDMsVzA0MDQsVzA2MDEsVzA2MDIsVzA2MTEsVzA2MTIsVzA2MTMsVzA2MTQsVzA2MjEsVzA2MjIsVzA2MzEsVzA3MDEsVzA3MDIKLQotCi1bUkVQT1JUU10KLQotIyBTZXQgdGhlIG91dHB1dCBmb3JtYXQuIEF2YWlsYWJsZSBmb3JtYXRzIGFyZSB0ZXh0LCBwYXJzZWFibGUsIGNvbG9yaXplZCwgbXN2cwotIyAodmlzdWFsIHN0dWRpbykgYW5kIGh0bWwKLW91dHB1dC1mb3JtYXQ9dGV4dAotCi0jIEluY2x1ZGUgbWVzc2FnZSdzIGlkIGluIG91dHB1dAotaW5jbHVkZS1pZHM9eWVzCi0KLSMgUHV0IG1lc3NhZ2VzIGluIGEgc2VwYXJhdGUgZmlsZSBmb3IgZWFjaCBtb2R1bGUgLyBwYWNrYWdlIHNwZWNpZmllZCBvbiB0aGUKLSMgY29tbWFuZCBsaW5lIGluc3RlYWQgb2YgcHJpbnRpbmcgdGhlbSBvbiBzdGRvdXQuIFJlcG9ydHMgKGlmIGFueSkgd2lsbCBiZQotIyB3cml0dGVuIGluIGEgZmlsZSBuYW1lICJweWxpbnRfZ2xvYmFsLlt0eHR8aHRtbF0iLgotZmlsZXMtb3V0cHV0PW5vCi0KLSMgVGVsbHMgd2hldGhlciB0byBkaXNwbGF5IGEgZnVsbCByZXBvcnQgb3Igb25seSB0aGUgbWVzc2FnZXMKLXJlcG9ydHM9bm8KLQotIyBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBzaG91bGQgcmV0dXJuIGEgbm90ZSBsZXNzIHRoYW4gMTAgKDEwIGlzIHRoZSBoaWdoZXN0Ci0jIG5vdGUpLiBZb3UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHZhcmlhYmxlcyBlcnJvcnMgd2FybmluZywgc3RhdGVtZW50IHdoaWNoCi0jIHJlc3BlY3RpdmVseSBjb250YWluIHRoZSBudW1iZXIgb2YgZXJyb3JzIC8gd2FybmluZ3MgbWVzc2FnZXMgYW5kIHRoZSB0b3RhbAotIyBudW1iZXIgb2Ygc3RhdGVtZW50cyBhbmFseXplZC4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBnbG9iYWwgZXZhbHVhdGlvbiByZXBvcnQKLSMgKFJQMDAwNCkuCi1ldmFsdWF0aW9uPTEwLjAgLSAoKGZsb2F0KDUgKiBlcnJvciArIHdhcm5pbmcgKyByZWZhY3RvciArIGNvbnZlbnRpb24pIC8gc3RhdGVtZW50KSAqIDEwKQotCi0jIEFkZCBhIGNvbW1lbnQgYWNjb3JkaW5nIHRvIHlvdXIgZXZhbHVhdGlvbiBub3RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIGdsb2JhbAotIyBldmFsdWF0aW9uIHJlcG9ydCAoUlAwMDA0KS4KLWNvbW1lbnQ9bm8KLQotCi1bVkFSSUFCTEVTXQotCi0jIFRlbGxzIHdoZXRoZXIgd2Ugc2hvdWxkIGNoZWNrIGZvciB1bnVzZWQgaW1wb3J0IGluIF9faW5pdF9fIGZpbGVzLgotaW5pdC1pbXBvcnQ9bm8KLQotIyBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuYW1lIG9mIGR1bW15IHZhcmlhYmxlcwotIyAoaS5lLiBub3QgdXNlZCkuCi1kdW1teS12YXJpYWJsZXMtcmd4PV98ZHVtbXkKLQotIyBMaXN0IG9mIGFkZGl0aW9uYWwgbmFtZXMgc3VwcG9zZWQgdG8gYmUgZGVmaW5lZCBpbiBidWlsdGlucy4gUmVtZW1iZXIgdGhhdAotIyB5b3Ugc2hvdWxkIGF2b2lkIHRvIGRlZmluZSBuZXcgYnVpbHRpbnMgd2hlbiBwb3NzaWJsZS4KLWFkZGl0aW9uYWwtYnVpbHRpbnM9Ci0KLQotW1RZUEVDSEVDS10KLQotIyBUZWxscyB3aGV0aGVyIG1pc3NpbmcgbWVtYmVycyBhY2Nlc3NlZCBpbiBtaXhpbiBjbGFzcyBzaG91bGQgYmUgaWdub3JlZC4gQQotIyBtaXhpbiBjbGFzcyBpcyBkZXRlY3RlZCBpZiBpdHMgbmFtZSBlbmRzIHdpdGggIm1peGluIiAoY2FzZSBpbnNlbnNpdGl2ZSkuCi1pZ25vcmUtbWl4aW4tbWVtYmVycz15ZXMKLQotIyBMaXN0IG9mIGNsYXNzZXMgbmFtZXMgZm9yIHdoaWNoIG1lbWJlciBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgY2hlY2tlZAotIyAodXNlZnVsIGZvciBjbGFzc2VzIHdpdGggYXR0cmlidXRlcyBkeW5hbWljYWxseSBzZXQpLgotaWdub3JlZC1jbGFzc2VzPVNRTE9iamVjdAotCi0jIFdoZW4gem9wZSBtb2RlIGlzIGFjdGl2YXRlZCwgYWRkIGEgcHJlZGVmaW5lZCBzZXQgb2YgWm9wZSBhY3F1aXJlZCBhdHRyaWJ1dGVzCi0jIHRvIGdlbmVyYXRlZC1tZW1iZXJzLgotem9wZT1ubwotCi0jIExpc3Qgb2YgbWVtYmVycyB3aGljaCBhcmUgc2V0IGR5bmFtaWNhbGx5IGFuZCBtaXNzZWQgYnkgcHlsaW50IGluZmVyZW5jZQotIyBzeXN0ZW0sIGFuZCBzbyBzaG91bGRuJ3QgdHJpZ2dlciBFMDIwMSB3aGVuIGFjY2Vzc2VkLiBQeXRob24gcmVndWxhcgotIyBleHByZXNzaW9ucyBhcmUgYWNjZXB0ZWQuCi1nZW5lcmF0ZWQtbWVtYmVycz1SRVFVRVNULGFjbF91c2VycyxhcV9wYXJlbnQKLQotCi1bTUlTQ0VMTEFORU9VU10KLQotIyBMaXN0IG9mIG5vdGUgdGFncyB0byB0YWtlIGluIGNvbnNpZGVyYXRpb24sIHNlcGFyYXRlZCBieSBhIGNvbW1hLgotbm90ZXM9RklYTUUsWFhYLFRPRE8KLQotCi1bU0lNSUxBUklUSUVTXQotCi0jIE1pbmltdW0gbGluZXMgbnVtYmVyIG9mIGEgc2ltaWxhcml0eS4KLW1pbi1zaW1pbGFyaXR5LWxpbmVzPTQKLQotIyBJZ25vcmUgY29tbWVudHMgd2hlbiBjb21wdXRpbmcgc2ltaWxhcml0aWVzLgotaWdub3JlLWNvbW1lbnRzPXllcwotCi0jIElnbm9yZSBkb2NzdHJpbmdzIHdoZW4gY29tcHV0aW5nIHNpbWlsYXJpdGllcy4KLWlnbm9yZS1kb2NzdHJpbmdzPXllcwotCi0KLVtGT1JNQVRdCi0KLSMgTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBvbiBhIHNpbmdsZSBsaW5lLgotbWF4LWxpbmUtbGVuZ3RoPTgwCi0KLSMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgaW4gYSBtb2R1bGUKLW1heC1tb2R1bGUtbGluZXM9MTAwMAotCi0jIFN0cmluZyB1c2VkIGFzIGluZGVudGF0aW9uIHVuaXQuIFRoaXMgaXMgdXN1YWxseSAiICIgKDQgc3BhY2VzKSBvciAiXHQiICgxCi0jIHRhYikuCi1pbmRlbnQtc3RyaW5nPScgICcKLQotCi1bQkFTSUNdCi0KLSMgUmVxdWlyZWQgYXR0cmlidXRlcyBmb3IgbW9kdWxlLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQotcmVxdWlyZWQtYXR0cmlidXRlcz0KLQotIyBMaXN0IG9mIGJ1aWx0aW5zIGZ1bmN0aW9uIG5hbWVzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQotYmFkLWZ1bmN0aW9ucz1tYXAsZmlsdGVyLGFwcGx5LGlucHV0Ci0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgbW9kdWxlIG5hbWVzCi1tb2R1bGUtcmd4PSgoW2Etel9dW2EtejAtOV9dKil8KFtBLVpdW2EtekEtWjAtOV0rKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgbW9kdWxlIGxldmVsIG5hbWVzCi1jb25zdC1yZ3g9KChbQS1aX11bQS1aMC05X10qKXwoX18uKl9fKSkkCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgY2xhc3MgbmFtZXMKLWNsYXNzLXJneD1bQS1aX11bYS16QS1aMC05XSskCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgZnVuY3Rpb24gbmFtZXMKLWZ1bmN0aW9uLXJneD1bYS16X11bYS16MC05X117MiwzMH0kCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGNvcnJlY3QgbWV0aG9kIG5hbWVzCi1tZXRob2Qtcmd4PVthLXpfXVthLXowLTlfXXsyLDMwfSQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCBpbnN0YW5jZSBhdHRyaWJ1dGUgbmFtZXMKLWF0dHItcmd4PVthLXpfXVthLXowLTlfXXsyLDMwfSQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCBhcmd1bWVudCBuYW1lcwotYXJndW1lbnQtcmd4PVthLXpfXVthLXowLTlfXXsyLDMwfSQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCB2YXJpYWJsZSBuYW1lcwotdmFyaWFibGUtcmd4PVthLXpfXVthLXowLTlfXXsyLDMwfSQKLQotIyBSZWd1bGFyIGV4cHJlc3Npb24gd2hpY2ggc2hvdWxkIG9ubHkgbWF0Y2ggY29ycmVjdCBsaXN0IGNvbXByZWhlbnNpb24gLwotIyBnZW5lcmF0b3IgZXhwcmVzc2lvbiB2YXJpYWJsZSBuYW1lcwotaW5saW5ldmFyLXJneD1bQS1aYS16X11bQS1aYS16MC05X10qJAotCi0jIEdvb2QgdmFyaWFibGUgbmFtZXMgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSBhY2NlcHRlZCwgc2VwYXJhdGVkIGJ5IGEgY29tbWEKLWdvb2QtbmFtZXM9aSxqLGssZXgsUnVuLF8KLQotIyBCYWQgdmFyaWFibGUgbmFtZXMgd2hpY2ggc2hvdWxkIGFsd2F5cyBiZSByZWZ1c2VkLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQotYmFkLW5hbWVzPWZvbyxiYXIsYmF6LHRvdG8sdHV0dSx0YXRhCi0KLSMgUmVndWxhciBleHByZXNzaW9uIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWUgd2hpY2ggZG8KLSMgbm90IHJlcXVpcmUgYSBkb2NzdHJpbmcKLW5vLWRvY3N0cmluZy1yZ3g9X18uKl9fCi0KLQotW0RFU0lHTl0KLQotIyBNYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIC8gbWV0aG9kCi1tYXgtYXJncz01Ci0KLSMgQXJndW1lbnQgbmFtZXMgdGhhdCBtYXRjaCB0aGlzIGV4cHJlc3Npb24gd2lsbCBiZSBpZ25vcmVkLiBEZWZhdWx0IHRvIG5hbWUKLSMgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmUKLWlnbm9yZWQtYXJndW1lbnQtbmFtZXM9Xy4qCi0KLSMgTWF4aW11bSBudW1iZXIgb2YgbG9jYWxzIGZvciBmdW5jdGlvbiAvIG1ldGhvZCBib2R5Ci1tYXgtbG9jYWxzPTE1Ci0KLSMgTWF4aW11bSBudW1iZXIgb2YgcmV0dXJuIC8geWllbGQgZm9yIGZ1bmN0aW9uIC8gbWV0aG9kIGJvZHkKLW1heC1yZXR1cm5zPTYKLQotIyBNYXhpbXVtIG51bWJlciBvZiBicmFuY2ggZm9yIGZ1bmN0aW9uIC8gbWV0aG9kIGJvZHkKLW1heC1icmFuY2hzPTEyCi0KLSMgTWF4aW11bSBudW1iZXIgb2Ygc3RhdGVtZW50cyBpbiBmdW5jdGlvbiAvIG1ldGhvZCBib2R5Ci1tYXgtc3RhdGVtZW50cz01MAotCi0jIE1heGltdW0gbnVtYmVyIG9mIHBhcmVudHMgZm9yIGEgY2xhc3MgKHNlZSBSMDkwMSkuCi1tYXgtcGFyZW50cz03Ci0KLSMgTWF4aW11bSBudW1iZXIgb2YgYXR0cmlidXRlcyBmb3IgYSBjbGFzcyAoc2VlIFIwOTAyKS4KLW1heC1hdHRyaWJ1dGVzPTcKLQotIyBNaW5pbXVtIG51bWJlciBvZiBwdWJsaWMgbWV0aG9kcyBmb3IgYSBjbGFzcyAoc2VlIFIwOTAzKS4KLW1pbi1wdWJsaWMtbWV0aG9kcz0yCi0KLSMgTWF4aW11bSBudW1iZXIgb2YgcHVibGljIG1ldGhvZHMgZm9yIGEgY2xhc3MgKHNlZSBSMDkwNCkuCi1tYXgtcHVibGljLW1ldGhvZHM9MjAKLQotCi1bQ0xBU1NFU10KLQotIyBMaXN0IG9mIGludGVyZmFjZSBtZXRob2RzIHRvIGlnbm9yZSwgc2VwYXJhdGVkIGJ5IGEgY29tbWEuIFRoaXMgaXMgdXNlZCBmb3IKLSMgaW5zdGFuY2UgdG8gbm90IGNoZWNrIG1ldGhvZHMgZGVmaW5lcyBpbiBab3BlJ3MgSW50ZXJmYWNlIGJhc2UgY2xhc3MuCi1pZ25vcmUtaWZhY2UtbWV0aG9kcz1pc0ltcGxlbWVudGVkQnksZGVmZXJyZWQsZXh0ZW5kcyxuYW1lcyxuYW1lc0FuZERlc2NyaXB0aW9ucyxxdWVyeURlc2NyaXB0aW9uRm9yLGdldEJhc2VzLGdldERlc2NyaXB0aW9uRm9yLGdldERvYyxnZXROYW1lLGdldFRhZ2dlZFZhbHVlLGdldFRhZ2dlZFZhbHVlVGFncyxpc0VxdWFsT3JFeHRlbmRlZEJ5LHNldFRhZ2dlZFZhbHVlLGlzSW1wbGVtZW50ZWRCeUluc3RhbmNlc09mLGFkYXB0V2l0aCxpc19pbXBsZW1lbnRlZF9ieQotCi0jIExpc3Qgb2YgbWV0aG9kIG5hbWVzIHVzZWQgdG8gZGVjbGFyZSAoaS5lLiBhc3NpZ24pIGluc3RhbmNlIGF0dHJpYnV0ZXMuCi1kZWZpbmluZy1hdHRyLW1ldGhvZHM9X19pbml0X18sX19uZXdfXyxzZXRVcAotCi0jIExpc3Qgb2YgdmFsaWQgbmFtZXMgZm9yIHRoZSBmaXJzdCBhcmd1bWVudCBpbiBhIGNsYXNzIG1ldGhvZC4KLXZhbGlkLWNsYXNzbWV0aG9kLWZpcnN0LWFyZz1jbHMKLQotCi1bSU1QT1JUU10KLQotIyBEZXByZWNhdGVkIG1vZHVsZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSB1c2VkLCBzZXBhcmF0ZWQgYnkgYSBjb21tYQotZGVwcmVjYXRlZC1tb2R1bGVzPXJlZ3N1YixzdHJpbmcsVEVSTUlPUyxCYXN0aW9uLHJleGVjCi0KLSMgQ3JlYXRlIGEgZ3JhcGggb2YgZXZlcnkgKGkuZS4gaW50ZXJuYWwgYW5kIGV4dGVybmFsKSBkZXBlbmRlbmNpZXMgaW4gdGhlCi0jIGdpdmVuIGZpbGUgKHJlcG9ydCBSUDA0MDIgbXVzdCBub3QgYmUgZGlzYWJsZWQpCi1pbXBvcnQtZ3JhcGg9Ci0KLSMgQ3JlYXRlIGEgZ3JhcGggb2YgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGluIHRoZSBnaXZlbiBmaWxlIChyZXBvcnQgUlAwNDAyIG11c3QKLSMgbm90IGJlIGRpc2FibGVkKQotZXh0LWltcG9ydC1ncmFwaD0KLQotIyBDcmVhdGUgYSBncmFwaCBvZiBpbnRlcm5hbCBkZXBlbmRlbmNpZXMgaW4gdGhlIGdpdmVuIGZpbGUgKHJlcG9ydCBSUDA0MDIgbXVzdAotIyBub3QgYmUgZGlzYWJsZWQpCi1pbnQtaW1wb3J0LWdyYXBoPQotCi0KLVtFWENFUFRJT05TXQotCi0jIEV4Y2VwdGlvbnMgdGhhdCB3aWxsIGVtaXQgYSB3YXJuaW5nIHdoZW4gYmVpbmcgY2F1Z2h0LiBEZWZhdWx0cyB0bwotIyAiRXhjZXB0aW9uIgotb3ZlcmdlbmVyYWwtZXhjZXB0aW9ucz1FeGNlcHRpb24KZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC9zYW1wbGVzL3NhbXBsZXMgYi90b29scy9neXAvc2FtcGxlcy9zYW1wbGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4MDRiNjE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9zYW1wbGVzL3NhbXBsZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3lzCi0KLQotZ3lwcyA9IFsKLSAgICAnYXBwL2FwcC5neXAnLAotICAgICdiYXNlL2Jhc2UuZ3lwJywKLSAgICAnYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5cCcsCi0gICAgJ2J1aWxkL2FsbC5neXAnLAotICAgICdidWlsZC9jb21tb24uZ3lwaScsCi0gICAgJ2J1aWxkL2V4dGVybmFsX2NvZGUuZ3lwaScsCi0gICAgJ2Nocm9tZS90ZXN0L3NlY3VyaXR5X3Rlc3RzL3NlY3VyaXR5X3Rlc3RzLmd5cCcsCi0gICAgJ2Nocm9tZS90aGlyZF9wYXJ0eS9odW5zcGVsbC9odW5zcGVsbC5neXAnLAotICAgICdjaHJvbWUvY2hyb21lLmd5cCcsCi0gICAgJ21lZGlhL21lZGlhLmd5cCcsCi0gICAgJ25ldC9uZXQuZ3lwJywKLSAgICAncHJpbnRpbmcvcHJpbnRpbmcuZ3lwJywKLSAgICAnc2RjaC9zZGNoLmd5cCcsCi0gICAgJ3NraWEvc2tpYS5neXAnLAotICAgICd0ZXN0aW5nL2dtb2NrLmd5cCcsCi0gICAgJ3Rlc3RpbmcvZ3Rlc3QuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvYnppcDIvYnppcDIuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvaWN1MzgvaWN1MzguZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbGliZXZlbnQvbGliZXZlbnQuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbGlianBlZy9saWJqcGVnLmd5cCcsCi0gICAgJ3RoaXJkX3BhcnR5L2xpYnBuZy9saWJwbmcuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbGlieG1sL2xpYnhtbC5neXAnLAotICAgICd0aGlyZF9wYXJ0eS9saWJ4c2x0L2xpYnhzbHQuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbHptYV9zZGsvbHptYV9zZGsuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbW9kcF9iNjQvbW9kcF9iNjQuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwJywKLSAgICAndGhpcmRfcGFydHkvc3FsaXRlL3NxbGl0ZS5neXAnLAotICAgICd0aGlyZF9wYXJ0eS96bGliL3psaWIuZ3lwJywKLSAgICAndjgvdG9vbHMvZ3lwL3Y4Lmd5cCcsCi0gICAgJ3dlYmtpdC9hY3RpdmV4X3NoaW0vYWN0aXZleF9zaGltLmd5cCcsCi0gICAgJ3dlYmtpdC9hY3RpdmV4X3NoaW1fZGxsL2FjdGl2ZXhfc2hpbV9kbGwuZ3lwJywKLSAgICAnd2Via2l0L2J1aWxkL2FjdGlvbl9jc3Nwcm9wZXJ0eW5hbWVzLnB5JywKLSAgICAnd2Via2l0L2J1aWxkL2FjdGlvbl9jc3N2YWx1ZWtleXdvcmRzLnB5JywKLSAgICAnd2Via2l0L2J1aWxkL2FjdGlvbl9qc2NvbmZpZy5weScsCi0gICAgJ3dlYmtpdC9idWlsZC9hY3Rpb25fbWFrZW5hbWVzLnB5JywKLSAgICAnd2Via2l0L2J1aWxkL2FjdGlvbl9tYWtldG9rZW5pemVyLnB5JywKLSAgICAnd2Via2l0L2J1aWxkL2FjdGlvbl91c2VyYWdlbnRzdHlsZXNoZWV0cy5weScsCi0gICAgJ3dlYmtpdC9idWlsZC9ydWxlX2JpbmRpbmcucHknLAotICAgICd3ZWJraXQvYnVpbGQvcnVsZV9iaXNvbi5weScsCi0gICAgJ3dlYmtpdC9idWlsZC9ydWxlX2dwZXJmLnB5JywKLSAgICAnd2Via2l0L3Rvb2xzL3Rlc3Rfc2hlbGwvdGVzdF9zaGVsbC5neXAnLAotICAgICd3ZWJraXQvd2Via2l0Lmd5cCcsCi1dCi0KLQotZGVmIE1haW4oYXJndik6Ci0gIGlmIGxlbihhcmd2KSAhPSAzIG9yIGFyZ3ZbMV0gbm90IGluIFsncHVzaCcsICdwdWxsJ106Ci0gICAgcHJpbnQgJ1VzYWdlOiAlcyBwdXNoL3B1bGwgUEFUSF9UT19DSFJPTUUnICUgYXJndlswXQotICAgIHJldHVybiAxCi0KLSAgcGF0aF90b19jaHJvbWUgPSBhcmd2WzJdCi0KLSAgZm9yIGcgaW4gZ3lwczoKLSAgICBjaHJvbWVfZmlsZSA9IG9zLnBhdGguam9pbihwYXRoX3RvX2Nocm9tZSwgZykKLSAgICBsb2NhbF9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShhcmd2WzBdKSwgb3MucGF0aC5zcGxpdChnKVsxXSkKLSAgICBpZiBhcmd2WzFdID09ICdwdXNoJzoKLSAgICAgIHByaW50ICdDb3B5aW5nICVzIHRvICVzJyAlIChsb2NhbF9maWxlLCBjaHJvbWVfZmlsZSkKLSAgICAgIHNodXRpbC5jb3B5ZmlsZShsb2NhbF9maWxlLCBjaHJvbWVfZmlsZSkKLSAgICBlbGlmIGFyZ3ZbMV0gPT0gJ3B1bGwnOgotICAgICAgcHJpbnQgJ0NvcHlpbmcgJXMgdG8gJXMnICUgKGNocm9tZV9maWxlLCBsb2NhbF9maWxlKQotICAgICAgc2h1dGlsLmNvcHlmaWxlKGNocm9tZV9maWxlLCBsb2NhbF9maWxlKQotICAgIGVsc2U6Ci0gICAgICBhc3NlcnQgRmFsc2UKLQotICByZXR1cm4gMAotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5leGl0KE1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3NhbXBsZXMvc2FtcGxlcy5iYXQgYi90b29scy9neXAvc2FtcGxlcy9zYW1wbGVzLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4ZDljOS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvc2FtcGxlcy9zYW1wbGVzLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQHJlbSBDb3B5cmlnaHQgKGMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi1AcmVtIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi1AcmVtIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotDQotQHB5dGhvbiAlfmRwMC9zYW1wbGVzICUqDQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3NldHVwLnB5IGIvdG9vbHMvZ3lwL3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBlZDJiNDFhLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGwgaW1wb3J0IGluc3RhbGwKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfc2NyaXB0cyBpbXBvcnQgaW5zdGFsbF9zY3JpcHRzCi0KLXNldHVwKAotICBuYW1lPSdneXAnLAotICB2ZXJzaW9uPScwLjEnLAotICBkZXNjcmlwdGlvbj0nR2VuZXJhdGUgWW91ciBQcm9qZWN0cycsCi0gIGF1dGhvcj0nQ2hyb21pdW0gQXV0aG9ycycsCi0gIGF1dGhvcl9lbWFpbD0nY2hyb21pdW0tZGV2QGdvb2dsZWdyb3Vwcy5jb20nLAotICB1cmw9J2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9neXAnLAotICBwYWNrYWdlX2RpciA9IHsnJzogJ3B5bGliJ30sCi0gIHBhY2thZ2VzPVsnZ3lwJywgJ2d5cC5nZW5lcmF0b3InXSwKLQotICBzY3JpcHRzID0gWydneXAnXSwKLSAgY21kY2xhc3MgPSB7J2luc3RhbGwnOiBpbnN0YWxsLAotICAgICAgICAgICAgICAnaW5zdGFsbF9saWInOiBpbnN0YWxsX2xpYiwKLSAgICAgICAgICAgICAgJ2luc3RhbGxfc2NyaXB0cyc6IGluc3RhbGxfc2NyaXB0c30sCi0pCmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvUkVBRE1FIGIvdG9vbHMvZ3lwL3Rvb2xzL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEyZTRlZi4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcHJldHR5X3ZjcHJvajoKLSAgVXNhZ2U6IHByZXR0eV92Y3Byb2oucHkgImM6XHBhdGhcdG9cdmNwcm9qLnZjcHJvaiIgW2tleTE9dmFsdWUxXSBba2V5Mj12YWx1ZTJdCi0KLSAgVGhleSBrZXkvdmFsdWUgcGFpciBhcmUgdXNlZCB0byByZXNvbHZlIHZzcHJvcHMgbmFtZS4KLQotICBGb3IgZXhhbXBsZSwgaWYgSSB3YW50IHRvIGRpZmYgdGhlIGJhc2UudmNwcm9qIHByb2plY3Q6Ci0KLSAgcHJldHR5X3ZjcHJvai5weSB6OlxkZXZcc3JjLWNocm9tZVxzcmNcYmFzZVxidWlsZFxiYXNlLnZjcHJvaiAiJChTb2x1dGlvbkRpcik9ejpcZGV2XHNyYy1jaHJvbWVcc3JjXGNocm9tZVxcIiAiJChDSFJPTUlVTV9CVUlMRCk9IiAiJChDSFJPTUVfQlVJTERfVFlQRSk9IiA+IG9yaWduYWwudHh0Ci0gIHByZXR0eV92Y3Byb2oucHkgejpcZGV2XHNyYy1jaHJvbWVcc3JjXGJhc2VcYmFzZV9neXAudmNwcm9qICIkKFNvbHV0aW9uRGlyKT16OlxkZXZcc3JjLWNocm9tZVxzcmNcY2hyb21lXFwiICIkKENIUk9NSVVNX0JVSUxEKT0iICIkKENIUk9NRV9CVUlMRF9UWVBFKT0iID4gZ3lwLnR4dAotCi0gIEFuZCB5b3UgY2FuIHVzZSB5b3VyIGZhdm9yaXRlIGRpZmYgdG9vbCB0byBzZWUgdGhlIGNoYW5nZXMuCi0KLSAgTm90ZTogSW4gdGhlIGNhc2Ugb2YgYmFzZS52Y3Byb2osIHRoZSBvcmlnaW5hbCB2Y3Byb2ogaXMgb25lIGxldmVsIHVwIHRoZSBnZW5lcmF0ZWQgb25lLgotICAgICAgICBJIHN1Z2dlc3QgeW91IGRvIGEgc2VhcmNoIGFuZCByZXBsYWNlIGZvciAnIi4uXCcgYW5kIHJlcGxhY2UgaXQgd2l0aCAnIicgaW4gb3JpZ2luYWwudHh0Ci0gICAgICAgIGJlZm9yZSB5b3UgcGVyZm9ybSB0aGUgZGlmZi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvWGNvZGUvUkVBRE1FIGIvdG9vbHMvZ3lwL3Rvb2xzL1hjb2RlL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5MmEyYy4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvWGNvZGUvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1TcGVjaWZpY2F0aW9ucyBjb250YWlucyBzeW50YXggZm9ybWF0dGVycyBmb3IgWGNvZGUgMy4gVGhlc2UgZG8gbm90IGFwcGVhciB0byBiZSBzdXBwb3J0ZWQgeWV0IG9uIFhjb2RlIDQuIFRvIHVzZSB0aGVzZSB3aXRoIFhjb2RlIDMgcGxlYXNlIGluc3RhbGwgYm90aCB0aGUgZ3lwLnBiZmlsZXNwZWMgYW5kIGd5cC54Y2xhbmdzcGVjIGZpbGVzIGluCi0KLX4vTGlicmFyeS9BcHBsaWNhdGlvbiBTdXBwb3J0L0RldmVsb3Blci9TaGFyZWQvWGNvZGUvU3BlY2lmaWNhdGlvbnMvCi0KLWFuZCByZXN0YXJ0IFhjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9YY29kZS9TcGVjaWZpY2F0aW9ucy9neXAucGJmaWxlc3BlYyBiL3Rvb2xzL2d5cC90b29scy9YY29kZS9TcGVjaWZpY2F0aW9ucy9neXAucGJmaWxlc3BlYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlMmUyNi4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvWGNvZGUvU3BlY2lmaWNhdGlvbnMvZ3lwLnBiZmlsZXNwZWMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotCWd5cC5wYmZpbGVzcGVjCi0JR1lQIHNvdXJjZSBmaWxlIHNwZWMgZm9yIFhjb2RlIDMKLQotCVRoZXJlIGlzIG5vdCBtdWNoIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIHJlZ2FyZGluZyB0aGUgZm9ybWF0Ci0Jb2YgLnBiZmlsZXNwZWMgZmlsZXMuIEFzIGEgc3RhcnRpbmcgcG9pbnQsIHNlZSBmb3IgaW5zdGFuY2UgdGhlCi0Jb3V0ZGF0ZWQgZG9jdW1lbnRhdGlvbiBhdDoKLQlodHRwOi8vbWF4YW8uZnJlZS5mci94Y29kZS1wbHVnaW4taW50ZXJmYWNlL3NwZWNpZmljYXRpb25zLmh0bWwKLQlhbmQgdGhlIGZpbGVzIGluOgotCS9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9YY29kZUVkaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzLwotCi0JUGxhY2UgdGhpcyBmaWxlIGluIGRpcmVjdG9yeToKLQl+L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9EZXZlbG9wZXIvU2hhcmVkL1hjb2RlL1NwZWNpZmljYXRpb25zLwotKi8KLQotKAotCXsKLQkJSWRlbnRpZmllciA9IHNvdXJjZWNvZGUuZ3lwOwotCQlCYXNlZE9uID0gc291cmNlY29kZTsKLQkJTmFtZSA9ICJHWVAgRmlsZXMiOwotCQlFeHRlbnNpb25zID0gKCJneXAiLCAiZ3lwaSIpOwotCQlNSU1FVHlwZXMgPSAoInRleHQvZ3lwIik7Ci0JCUxhbmd1YWdlID0gInhjb2RlLmxhbmcuZ3lwIjsKLQkJSXNUZXh0RmlsZSA9IFlFUzsKLQkJSXNTb3VyY2VGaWxlID0gWUVTOwotCX0KLSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9YY29kZS9TcGVjaWZpY2F0aW9ucy9neXAueGNsYW5nc3BlYyBiL3Rvb2xzL2d5cC90b29scy9YY29kZS9TcGVjaWZpY2F0aW9ucy9neXAueGNsYW5nc3BlYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzNTA2ZC4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvWGNvZGUvU3BlY2lmaWNhdGlvbnMvZ3lwLnhjbGFuZ3NwZWMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjYgKzAsMCBAQAotLyoKLQlDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQlVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0JZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQkKLQlneXAueGNsYW5nc3BlYwotCUdZUCBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGZvciBYY29kZSAzCi0KLQlUaGVyZSBpcyBub3QgbXVjaCBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSByZWdhcmRpbmcgdGhlIGZvcm1hdAotCW9mIC54Y2xhbmdzcGVjIGZpbGVzLiBBcyBhIHN0YXJ0aW5nIHBvaW50LCBzZWUgZm9yIGluc3RhbmNlIHRoZQotCW91dGRhdGVkIGRvY3VtZW50YXRpb24gYXQ6Ci0JaHR0cDovL21heGFvLmZyZWUuZnIveGNvZGUtcGx1Z2luLWludGVyZmFjZS9zcGVjaWZpY2F0aW9ucy5odG1sCi0JYW5kIHRoZSBmaWxlcyBpbjoKLQkvRGV2ZWxvcGVyL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvWGNvZGVFZGl0LmZyYW1ld29yay9WZXJzaW9ucy9BL1Jlc291cmNlcy8KLQotCVBsYWNlIHRoaXMgZmlsZSBpbiBkaXJlY3Rvcnk6Ci0Jfi9MaWJyYXJ5L0FwcGxpY2F0aW9uIFN1cHBvcnQvRGV2ZWxvcGVyL1NoYXJlZC9YY29kZS9TcGVjaWZpY2F0aW9ucy8KLSovCi0KLSgKLQotICAgIHsKLSAgICAgICAgSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC5rZXl3b3JkIjsKLSAgICAgICAgU3ludGF4ID0gewotICAgICAgICAgICAgV29yZHMgPSAoCi0gICAgICAgICAgICAgICAgImFuZCIsCi0gICAgICAgICAgICAgICAgIm9yIiwKLSAgICAgICAgICAgICAgICAiPCEiLAotICAgICAgICAgICAgICAgICI8IiwKLSAgICAgICAgICAgICApOwotICAgICAgICAgICAgVHlwZSA9ICJ4Y29kZS5zeW50YXgua2V5d29yZCI7Ci0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAgSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC50YXJnZXQuZGVjbGFyYXRvciI7Ci0gICAgICAgIFN5bnRheCA9IHsKLSAgICAgICAgCVdvcmRzID0gKAotICAgICAgICAJCSIndGFyZ2V0X25hbWUnIiwKLSAgICAgICAgCSk7Ci0gICAgICAgICAgICBUeXBlID0gInhjb2RlLnN5bnRheC5pZGVudGlmaWVyLnR5cGUiOwotICAgICAgICB9OwotICAgIH0sCi0KLQl7Ci0JCUlkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuc3RyaW5nLnNpbmdsZXF1b3RlIjsKLQkJU3ludGF4ID0gewotCQkJSW5jbHVkZVJ1bGVzID0gKAotCQkJCSJ4Y29kZS5sYW5nLnN0cmluZyIsCi0JCQkJInhjb2RlLmxhbmcuZ3lwLmtleXdvcmQiLAotCQkJCSJ4Y29kZS5sYW5nLm51bWJlciIsCi0JCQkpOwotCQkJU3RhcnQgPSAiJyI7Ci0JCQlFbmQgPSAiJyI7Ci0JCX07Ci0JfSwKLQkKLQl7Ci0JCUlkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuY29tbWEiOwotCQlTeW50YXggPSB7Ci0JCQlXb3JkcyA9ICggIiwiLCApOwotCQkJCi0JCX07Ci0JfSwKLQotCXsKLQkJSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cCI7Ci0JCURlc2NyaXB0aW9uID0gIkdZUCBDb2xvcmluZyI7Ci0JCUJhc2VkT24gPSAieGNvZGUubGFuZy5zaW1wbGVDb2xvcmluZyI7Ci0JCUluY2x1ZGVJbk1lbnUgPSBZRVM7Ci0JCU5hbWUgPSAiR1lQIjsKLQkJU3ludGF4ID0gewotCQkJVG9rZW5pemVyID0gInhjb2RlLmxhbmcuZ3lwLmxleGVyLnRvcGxldmVsIjsKLQkJCUluY2x1ZGVSdWxlcyA9ICgKLQkJCQkieGNvZGUubGFuZy5neXAuZGljdGlvbmFyeSIsCi0JCQkpOwotCQkJVHlwZSA9ICJ4Y29kZS5zeW50YXgucGxhaW4iOwotCQl9OwotCX0sCi0KLQkvLyBUaGUgZm9sbG93aW5nIHJ1bGUgcmV0dXJucyB0b2tlbnMgdG8gdGhlIG90aGVyIHJ1bGVzCi0JewotCQlJZGVudGlmaWVyID0gInhjb2RlLmxhbmcuZ3lwLmxleGVyIjsKLQkJU3ludGF4ID0gewotCQkJSW5jbHVkZVJ1bGVzID0gKAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5jb21tZW50IiwKLQkJCQkieGNvZGUubGFuZy5zdHJpbmciLAotCQkJCSd4Y29kZS5sYW5nLmd5cC50YXJnZXRuYW1lLmRlY2xhcmF0b3InLAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5zdHJpbmcuc2luZ2xlcXVvdGUiLAotCQkJCSJ4Y29kZS5sYW5nLm51bWJlciIsCi0JCQkJInhjb2RlLmxhbmcuZ3lwLmNvbW1hIiwKLQkJCSk7Ci0JCX07Ci0JfSwKLQotCXsKLQkJSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC5sZXhlci50b3BsZXZlbCI7Ci0JCVN5bnRheCA9IHsKLQkJCUluY2x1ZGVSdWxlcyA9ICgKLQkJCQkieGNvZGUubGFuZy5neXAuY29tbWVudCIsCi0JCQkpOwotCQl9OwotCX0sCi0KLQl7Ci0gICAgICAgIElkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuYXNzaWdubWVudCI7Ci0gICAgICAgIFN5bnRheCA9IHsKLSAgICAgICAgICAgIFRva2VuaXplciA9ICJ4Y29kZS5sYW5nLmd5cC5sZXhlciI7Ci0gICAgICAgICAgICBSdWxlcyA9ICgKLSAgICAgICAgICAgIAkieGNvZGUubGFuZy5neXAuYXNzaWdubWVudC5saHMiLAotICAgICAgICAgICAgCSI6IiwKLSAgICAgICAgICAgICAgICAieGNvZGUubGFuZy5neXAuYXNzaWdubWVudC5yaHMiLAotICAgICAgICAgICAgKTsKLSAgICAgICAgfTsKLSAgICAgICAKLSAgICB9LAotICAgIAotICAgIHsKLSAgICAgICAgSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC50YXJnZXQuZGVjbGFyYXRpb24iOwotICAgICAgICBTeW50YXggPSB7Ci0gICAgICAgICAgICBUb2tlbml6ZXIgPSAieGNvZGUubGFuZy5neXAubGV4ZXIiOwotICAgICAgICAgICAgUnVsZXMgPSAoCi0gICAgICAgICAgICAgICAgInhjb2RlLmxhbmcuZ3lwLnRhcmdldC5kZWNsYXJhdG9yIiwKLSAgICAgICAgICAgICAgICAiOiIsCi0gICAgICAgICAgICAgICAgInhjb2RlLmxhbmcuZ3lwLnRhcmdldC5uYW1lIiwKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH07Ci0gICB9LAotICAgCi0gICB7Ci0gICAgICAgIElkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAudGFyZ2V0Lm5hbWUiOwotICAgICAgICBTeW50YXggPSB7Ci0gICAgICAgICAgICBUb2tlbml6ZXIgPSAieGNvZGUubGFuZy5neXAubGV4ZXIiOwotICAgICAgICAgICAgUnVsZXMgPSAoCi0gICAgICAgICAgICAgICAgInhjb2RlLmxhbmcuZ3lwLnN0cmluZy5zaW5nbGVxdW90ZSIsCi0gICAgICAgICAgICApOwotICAgICAgICAJVHlwZSA9ICJ4Y29kZS5zeW50YXguZGVmaW5pdGlvbi5mdW5jdGlvbiI7Ci0gICAgICAgIH07Ci0gICAgfSwKLSAgICAKLQl7Ci0gICAgICAgIElkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuYXNzaWdubWVudC5saHMiOwotICAgICAgICBTeW50YXggPSB7Ci0gICAgICAgICAgICBUb2tlbml6ZXIgPSAieGNvZGUubGFuZy5neXAubGV4ZXIiOwotICAgICAgICAgICAgUnVsZXMgPSAoCi0gICAgICAgICAgICAJInhjb2RlLmxhbmcuZ3lwLnN0cmluZy5zaW5nbGVxdW90ZSIsCi0gICAgICAgICAgICApOwotICAgICAgICAgCVR5cGUgPSAieGNvZGUuc3ludGF4LmlkZW50aWZpZXIudHlwZSI7Ci0gICAgICAgIH07Ci0gICAgfSwKLSAgICAKLSAgICB7Ci0gICAgICAgIElkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuYXNzaWdubWVudC5yaHMiOwotICAgICAgICBTeW50YXggPSB7Ci0gICAgICAgIAlUb2tlbml6ZXIgPSAieGNvZGUubGFuZy5neXAubGV4ZXIiOwotICAgICAgICAgICAgUnVsZXMgPSAoCi0gICAgICAgICAgICAJInhjb2RlLmxhbmcuZ3lwLnN0cmluZy5zaW5nbGVxdW90ZT8iLAotICAgICAgICAgICAgICAgICJ4Y29kZS5sYW5nLmd5cC5hcnJheT8iLAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5kaWN0aW9uYXJ5PyIsCi0JCQkJInhjb2RlLmxhbmcubnVtYmVyPyIsCi0gICAgICAgICAgICApOwotICAgICAgICB9OwotICAgIH0sCi0KLQl7Ci0JCUlkZW50aWZpZXIgPSAieGNvZGUubGFuZy5neXAuZGljdGlvbmFyeSI7Ci0JCVN5bnRheCA9IHsKLQkJCVRva2VuaXplciA9ICJ4Y29kZS5sYW5nLmd5cC5sZXhlciI7Ci0JCQlTdGFydCA9ICJ7IjsKLQkJCUVuZCA9ICJ9IjsKLQkJCUZvbGRhYmxlID0gWUVTOwotCQkJUmVjdXJzaXZlID0gWUVTOwotCQkJSW5jbHVkZVJ1bGVzID0gKAotCQkJCSJ4Y29kZS5sYW5nLmd5cC50YXJnZXQuZGVjbGFyYXRpb24iLAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5hc3NpZ25tZW50IiwKLQkJCSk7Ci0JCX07Ci0JfSwKLQotCXsKLQkJSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC5hcnJheSI7Ci0JCVN5bnRheCA9IHsKLQkJCVRva2VuaXplciA9ICJ4Y29kZS5sYW5nLmd5cC5sZXhlciI7Ci0JCQlTdGFydCA9ICJbIjsKLQkJCUVuZCA9ICJdIjsKLQkJCUZvbGRhYmxlID0gWUVTOwotCQkJUmVjdXJzaXZlID0gWUVTOwotCQkJSW5jbHVkZVJ1bGVzID0gKAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5hcnJheSIsCi0JCQkJInhjb2RlLmxhbmcuZ3lwLmRpY3Rpb25hcnkiLAotCQkJCSJ4Y29kZS5sYW5nLmd5cC5zdHJpbmcuc2luZ2xlcXVvdGUiLAotCQkJKTsKLQkJfTsKLQl9LAotCi0gICAgewotICAgICAgICBJZGVudGlmaWVyID0gInhjb2RlLmxhbmcuZ3lwLnRvZG8ubWFyayI7Ci0gICAgICAgIFN5bnRheCA9IHsKLSAgICAgICAgICAgIFN0YXJ0Q2hhcnMgPSAiVCI7Ci0gICAgICAgICAgICBNYXRjaCA9ICgKLSAgICAgICAgICAgICAgICAiXlwoVE9ET1woLipcKTpbIFx0XSsuKlwpJCIsICAgICAgIC8vIGluY2x1ZGUgIlRPRE86ICIgaW4gdGhlIG1hcmtlcnMgbGlzdAotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG9yZGVyIG9mIGNhcHR1cmVzLiBBbGwgb2YgdGhlIG1hdGNoIHN0cmluZ3MgYWJvdmUgbmVlZCB0aGUgc2FtZSBvcmRlci4KLSAgICAgICAgICAgIENhcHR1cmVUeXBlcyA9ICgKLSAgICAgICAgICAgICAgICAieGNvZGUuc3ludGF4Lm1hcmsiCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgVHlwZSA9ICJ4Y29kZS5zeW50YXguY29tbWVudCI7Ci0gICAgICAgIH07Ci0gICAgfSwKLQotCXsKLQkJSWRlbnRpZmllciA9ICJ4Y29kZS5sYW5nLmd5cC5jb21tZW50IjsKLQkJQmFzZWRPbiA9ICJ4Y29kZS5sYW5nLmNvbW1lbnQiOyAvLyBmb3IgdGV4dCBtYWNyb3MKLQkJU3ludGF4ID0gewotCQkJU3RhcnQgPSAiIyI7Ci0JCQlFbmQgPSAiXG4iOwotCQkJSW5jbHVkZVJ1bGVzID0gKAotCQkJCSJ4Y29kZS5sYW5nLnVybCIsCi0JCQkJInhjb2RlLmxhbmcudXJsLm1haWwiLAotCQkJCSJ4Y29kZS5sYW5nLmNvbW1lbnQubWFyayIsCi0JCQkJInhjb2RlLmxhbmcuZ3lwLnRvZG8ubWFyayIsCi0JCQkpOwotCQkJVHlwZSA9ICJ4Y29kZS5zeW50YXguY29tbWVudCI7Ci0JCX07Ci0JfSwKLSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9SRUFETUUgYi90b29scy9neXAvdG9vbHMvZW1hY3MvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWVmMzlmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1Ib3cgdG8gaW5zdGFsbCBneXAtbW9kZSBmb3IgZW1hY3M6Ci0KLUFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgfi8uZW1hY3MgKHJlcGxhY2UgLi4uIHdpdGggdGhlIHBhdGggdG8geW91ciBneXAKLWNoZWNrb3V0KS4KLQotKHNldHEgbG9hZC1wYXRoIChjb25zICIuLi4vdG9vbHMvZW1hY3MiIGxvYWQtcGF0aCkpCi0ocmVxdWlyZSAnZ3lwKQotCi1SZXN0YXJ0IGVtYWNzIChvciBldmFsLXJlZ2lvbiB0aGUgYWRkZWQgbGluZXMpIGFuZCB5b3Ugc2hvdWxkIGJlIGFsbCBzZXQuCi0KLVBsZWFzZSBub3RlIHRoYXQgZXJ0IGlzIHJlcXVpcmVkIGZvciBydW5uaW5nIHRoZSB0ZXN0cywgd2hpY2ggaXMgaW5jbHVkZWQgaW4KLUVtYWNzIDI0LCBvciBhdmFpbGFibGUgc2VwYXJhdGVseSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9vaGxlci9lcnQKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9neXAtdGVzdHMuZWwgYi90b29scy9neXAvdG9vbHMvZW1hY3MvZ3lwLXRlc3RzLmVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTg4YTM1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9neXAtdGVzdHMuZWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi07OzsgZ3lwLXRlc3RzLmVsIC0gdW5pdCB0ZXN0cyBmb3IgZ3lwLW1vZGUuCi0KLTs7IENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotOzsgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotOzsgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotOzsgVGhlIHJlY29tbWVuZGVkIHdheSB0byBydW4gdGhlc2UgdGVzdHMgaXMgdG8gcnVuIHRoZW0gZnJvbSB0aGUgY29tbWFuZC1saW5lLAotOzsgd2l0aCB0aGUgcnVuLXVuaXQtdGVzdHMuc2ggc2NyaXB0LgotCi0ocmVxdWlyZSAnY2wpCi0ocmVxdWlyZSAnZXJ0KQotKHJlcXVpcmUgJ2d5cCkKLQotKGRlZmNvbnN0IHNhbXBsZXMgKGRpcmVjdG9yeS1maWxlcyAidGVzdGRhdGEiIHQgIi5neXAkIikKLSAgIkxpc3Qgb2YgZ29sZGVuIHNhbXBsZXMgdG8gY2hlY2siKQotCi0oZGVmdW4gZm9udGlmeSAoZmlsZW5hbWUpCi0gICh3aXRoLXRlbXAtYnVmZmVyCi0gICAgKGluc2VydC1maWxlLWNvbnRlbnRzLWxpdGVyYWxseSBmaWxlbmFtZSkKLSAgICAoZ3lwLW1vZGUpCi0gICAgKGZvbnQtbG9jay1mb250aWZ5LWJ1ZmZlcikKLSAgICAoYnVmZmVyLXN0cmluZykpKQotCi0oZGVmdW4gcmVhZC1nb2xkZW4tc2FtcGxlIChmaWxlbmFtZSkKLSAgKHdpdGgtdGVtcC1idWZmZXIKLSAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMtbGl0ZXJhbGx5IChjb25jYXQgZmlsZW5hbWUgIi5mb250aWZpZWQiKSkKLSAgICAocmVhZCAoY3VycmVudC1idWZmZXIpKSkpCi0KLShkZWZ1biB0ZXh0LWZhY2UtcHJvcGVydGllcyAocykKLSAgIkV4dHJhY3QgdGhlIHRleHQgcHJvcGVydGllcyBmcm9tIHMiCi0gIChsZXQgKChyZXN1bHQgKGxpc3QgdCkpKQotICAgIChkb3RpbWVzIChpIChsZW5ndGggcykpCi0gICAgICAoc2V0cSByZXN1bHQgKGNvbnMgKGdldC10ZXh0LXByb3BlcnR5IGkgJ2ZhY2UgcykgcmVzdWx0KSkpCi0gICAgKG5yZXZlcnNlIHJlc3VsdCkpKQotCi0oZXJ0LWRlZnRlc3QgdGVzdC1nb2xkZW4tc2FtcGxlcyAoKQotICAiQ2hlY2sgdGhhdCBmb250aWZpY2F0aW9uIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIGdvbGRlbiBzYW1wbGVzIgotICAoZG9saXN0IChzYW1wbGUgc2FtcGxlcykKLSAgICAobGV0ICgoZ29sZGVuIChyZWFkLWdvbGRlbi1zYW1wbGUgc2FtcGxlKSkKLSAgICAgICAgICAoZm9udGlmaWVkIChmb250aWZ5IHNhbXBsZSkpKQotICAgICAgKHNob3VsZCAoZXF1YWwgZ29sZGVuIGZvbnRpZmllZCkpCi0gICAgICAoc2hvdWxkIChlcXVhbCAodGV4dC1mYWNlLXByb3BlcnRpZXMgZ29sZGVuKQotICAgICAgICAgICAgICAgICAgICAgKHRleHQtZmFjZS1wcm9wZXJ0aWVzIGZvbnRpZmllZCkpKSkpKQotCi0oZGVmdW4gY3JlYXRlLWdvbGRlbi1zYW1wbGUgKGZpbGVuYW1lKQotICAiQ3JlYXRlIGEgZ29sZGVuIHNhbXBsZSBieSBmb250aWZ5aW5nIGZpbGVuYW1lIGFuZCB3cml0aW5nIG91dCB0aGUgcHJpbnRhYmxlCi0gICByZXByZXNlbnRhdGlvbiBvZiB0aGUgZm9udGlmaWVkIGJ1ZmZlciAod2l0aCB0ZXh0IHByb3BlcnRpZXMpIHRvIHRoZQotICAgRklMRU5BTUUuZm9udGlmaWVkIgotICAod2l0aC10ZW1wLWZpbGUgKGNvbmNhdCBmaWxlbmFtZSAiLmZvbnRpZmllZCIpCi0gICAgKHByaW50IChmb250aWZ5IGZpbGVuYW1lKSAoY3VycmVudC1idWZmZXIpKSkpCi0KLShkZWZ1biBjcmVhdGUtZ29sZGVuLXNhbXBsZXMgKCkKLSAgIlJlY3JlYXRlIHRoZSBnb2xkZW4gc2FtcGxlcyIKLSAgKGRvbGlzdCAoc2FtcGxlIHNhbXBsZXMpIChjcmVhdGUtZ29sZGVuLXNhbXBsZSBzYW1wbGUpKSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9neXAuZWwgYi90b29scy9neXAvdG9vbHMvZW1hY3MvZ3lwLmVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBmYzhkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9neXAuZWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotOzs7IGd5cC5lbCAtIGZvbnQtbG9jay1tb2RlIHN1cHBvcnQgZm9yIGd5cCBmaWxlcy4KLQotOzsgQ29weXJpZ2h0IChjKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi07OyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi07OyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi07OyBQdXQgdGhpcyBzb21ld2hlcmUgaW4geW91ciBsb2FkLXBhdGggYW5kCi07OyAocmVxdWlyZSAnZ3lwKQotCi0ocmVxdWlyZSAncHl0aG9uKQotKHJlcXVpcmUgJ2NsKQotCi0od2hlbiAoc3RyaW5nLW1hdGNoICJweXRob24tbW9kZS5lbCIgKHN5bWJvbC1maWxlICdweXRob24tbW9kZSAnZGVmdW4pKQotICAoZXJyb3IgKGNvbmNhdCAicHl0aG9uLW1vZGUgbXVzdCBiZSBsb2FkZWQgZnJvbSBweXRob24uZWwgKGJ1bmRsZWQgd2l0aCAiCi0gICAgICAgICAgICAgICAgICJyZWNlbnQgZW1hY3NlbiksIG5vdCBmcm9tIHRoZSBvbGRlciBhbmQgbGVzcyBtYWludGFpbmVkICIKLSAgICAgICAgICAgICAgICAgInB5dGhvbi1tb2RlLmVsIikpKQotCi0oZGVmYWR2aWNlIHB5dGhvbi1jYWxjdWxhdGUtaW5kZW50YXRpb24gKGFmdGVyIGFtaS1vdXRkZW50LWNsb3NpbmctcGFyZW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlKQotICAiRGUtaW5kZW50IGNsb3NpbmcgcGFyZW5zLCBicmFjZXMsIGFuZCBicmFja2V0cyBpbiBneXAtbW9kZS4iCi0gIChpZiAoYW5kIChlcSBtYWpvci1tb2RlICdneXAtbW9kZSkKLSAgICAgICAgICAgKHN0cmluZy1tYXRjaCAiXiAqW10pfV1bXSwpfV0qICokIgotICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAobGluZS1lbmQtcG9zaXRpb24pKSkpCi0gICAgICAoc2V0cSBhZC1yZXR1cm4tdmFsdWUgKC0gYWQtcmV0dXJuLXZhbHVlIDIpKSkpCi0KLShkZWZpbmUtZGVyaXZlZC1tb2RlIGd5cC1tb2RlIHB5dGhvbi1tb2RlICJHeXAiCi0gICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIC5neXAgZmlsZXMuIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ3lwLyIKLSAgOzsgZ3lwLXBhcnNlLWhpc3RvcnkgaXMgYSBzdGFjayBvZiAoUE9TSVRJT04gLiBQQVJTRS1TVEFURSkgdHVwbGVzLAotICA7OyB3aXRoIGdyZWF0ZXIgcG9zaXRpb25zIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLiBQQVJTRS1TVEFURQotICA7OyBpcyBhIGxpc3Qgb2Ygc2VjdGlvbiBzeW1ib2xzIChzZWUgZ3lwLXNlY3Rpb24tbmFtZSBhbmQgZ3lwLXBhcnNlLXRvKQotICA7OyB3aXRoIG1vc3QgbmVzdGVkIHNlY3Rpb24gc3ltYm9sIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdC4KLSAgKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnZ3lwLXBhcnNlLWhpc3RvcnkpICcoKDEgLiAobGlzdCkpKSkKLSAgKGd5cC1hZGQtZm9udC1sb2NrLWtleXdvcmRzKSkKLQotKGRlZnVuIGd5cC1zZXQtaW5kZW50YXRpb24gKCkKLSAgIkhvb2sgZnVuY3Rpb24gdG8gY29uZmlndXJlIHB5dGhvbiBpbmRlbnRhdGlvbiB0byBzdWl0IGd5cCBtb2RlLiIKLSAgKHNldHEgcHl0aG9uLWNvbnRpbnVhdGlvbi1vZmZzZXQgMgotICAgICAgICBweXRob24taW5kZW50IDIKLSAgICAgICAgcHl0aG9uLWd1ZXNzLWluZGVudCBuaWwpKQotCi0oYWRkLWhvb2sgJ2d5cC1tb2RlLWhvb2sgJ2d5cC1zZXQtaW5kZW50YXRpb24pCi0KLShhZGQtdG8tbGlzdCAnYXV0by1tb2RlLWFsaXN0ICcoIlxcLmd5cFxcJyIgLiBneXAtbW9kZSkpCi0oYWRkLXRvLWxpc3QgJ2F1dG8tbW9kZS1hbGlzdCAnKCJcXC5neXBpXFwnIiAuIGd5cC1tb2RlKSkKLQotOzs7IEZvbnQtbG9jayBzdXBwb3J0Ci0KLShkZWZjb25zdCBneXAtZGVwZW5kZW5jaWVzLXJlZ2V4cAotICAocmVnZXhwLW9wdCAobGlzdCAiZGVwZW5kZW5jaWVzIiAiZXhwb3J0X2RlcGVuZGVudF9zZXR0aW5ncyIpKQotICAiUmVndWxhciBleHByZXNzaW9uIHRvIGludHJvZHVjZSAnZGVwZW5kZW5jaWVzJyBzZWN0aW9uIikKLQotKGRlZmNvbnN0IGd5cC1zb3VyY2VzLXJlZ2V4cAotICAocmVnZXhwLW9wdCAobGlzdCAiYWN0aW9uIiAiZmlsZXMiICJpbmNsdWRlX2RpcnMiICJpbmNsdWRlcyIgImlucHV0cyIKLSAgICAgICAgICAgICAgICAgICAgImxpYnJhcmllcyIgIm91dHB1dHMiICJzb3VyY2VzIikpCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gdG8gaW50cm9kdWNlICdzb3VyY2VzJyBzZWN0aW9ucyIpCi0KLShkZWZjb25zdCBneXAtY29uZGl0aW9ucy1yZWdleHAKLSAgKHJlZ2V4cC1vcHQgKGxpc3QgImNvbmRpdGlvbnMiICJ0YXJnZXRfY29uZGl0aW9ucyIpKQotICAiUmVndWxhciBleHByZXNzaW9uIHRvIGludHJvZHVjZSBjb25kaXRpb25zIHNlY3Rpb25zIikKLQotKGRlZmNvbnN0IGd5cC12YXJpYWJsZXMtcmVnZXhwCi0gICJedmFyaWFibGVzIgotICAiUmVndWxhciBleHByZXNzaW9uIHRvIGludHJvZHVjZSB2YXJpYWJsZXMgc2VjdGlvbnMiKQotCi0oZGVmY29uc3QgZ3lwLWRlZmluZXMtcmVnZXhwCi0gICJeZGVmaW5lcyIKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBpbnRyb2R1Y2UgJ2RlZmluZXMnIHNlY3Rpb25zIikKLQotKGRlZmNvbnN0IGd5cC10YXJnZXRzLXJlZ2V4cAotICAiXnRhcmdldHMiCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gdG8gaW50cm9kdWNlICd0YXJnZXRzJyBzZWN0aW9ucyIpCi0KLShkZWZ1biBneXAtc2VjdGlvbi1uYW1lIChzZWN0aW9uKQotICAiTWFwIHRoZSBzZWN0aW9ucyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBmcm9tIFNFQ1RJT04gdG8gc3ltYm9sLgotCi0gICBTRUNUSU9OIGlzIGEgc3RyaW5nIGZyb20gdGhlIGJ1ZmZlciB0aGF0IGludHJvZHVjZXMgYSBzZWN0aW9uLiAgVGhlIHJlc3VsdCBpcwotICAgYSBzeW1ib2wgcmVwcmVzZW50aW5nIHRoZSBraW5kIG9mIHNlY3Rpb24uCi0KLSAgIFRoaXMgYWxsb3dzIHVzIHRvIHRyZWF0IChmb3IgdGhlIHB1cnBvc2VzIG9mIGZvbnQtbG9jaykgc2V2ZXJhbCBkaWZmZXJlbnQKLSAgIHNlY3Rpb24gbmFtZXMgYXMgdGhlIHNhbWUga2luZCBvZiBzZWN0aW9uLiBGb3IgZXhhbXBsZSwgYSAnc291cmNlcyBzZWN0aW9uCi0gICBjYW4gYmUgaW50cm9kdWNlZCBieSB0aGUgJ3NvdXJjZXMnLCAnaW5wdXRzJywgJ291dHB1dHMnIGtleXdvcmQuCi0KLSAgICdvdGhlciBpcyB0aGUgZGVmYXVsdCBzZWN0aW9uIGtpbmQgd2hlbiBhIG1vcmUgc3BlY2lmaWMgbWF0Y2ggaXMgbm90IG1hZGUuIgotICAoY29uZCAoKHN0cmluZy1tYXRjaC1wIGd5cC1kZXBlbmRlbmNpZXMtcmVnZXhwIHNlY3Rpb24pICdkZXBlbmRlbmNpZXMpCi0gICAgICAgICgoc3RyaW5nLW1hdGNoLXAgZ3lwLXNvdXJjZXMtcmVnZXhwIHNlY3Rpb24pICdzb3VyY2VzKQotICAgICAgICAoKHN0cmluZy1tYXRjaC1wIGd5cC12YXJpYWJsZXMtcmVnZXhwIHNlY3Rpb24pICd2YXJpYWJsZXMpCi0gICAgICAgICgoc3RyaW5nLW1hdGNoLXAgZ3lwLWNvbmRpdGlvbnMtcmVnZXhwIHNlY3Rpb24pICdjb25kaXRpb25zKQotICAgICAgICAoKHN0cmluZy1tYXRjaC1wIGd5cC10YXJnZXRzLXJlZ2V4cCBzZWN0aW9uKSAndGFyZ2V0cykKLSAgICAgICAgKChzdHJpbmctbWF0Y2gtcCBneXAtZGVmaW5lcy1yZWdleHAgc2VjdGlvbikgJ2RlZmluZXMpCi0gICAgICAgICh0ICdvdGhlcikpKQotCi0oZGVmdW4gZ3lwLWludmFsaWRhdGUtcGFyc2Utc3RhdGVzLWFmdGVyICh0YXJnZXQtcG9pbnQpCi0gICJFcmFzZSBhbnkgcGFyc2UgaW5mb3JtYXRpb24gYWZ0ZXIgdGFyZ2V0LXBvaW50LiIKLSAgKHdoaWxlICg+IChjYWFyIGd5cC1wYXJzZS1oaXN0b3J5KSB0YXJnZXQtcG9pbnQpCi0gICAgKHNldHEgZ3lwLXBhcnNlLWhpc3RvcnkgKGNkciBneXAtcGFyc2UtaGlzdG9yeSkpKSkKLQotKGRlZnVuIGd5cC1wYXJzZS1wb2ludCAoKQotICAiVGhlIHBvaW50IG9mIHRoZSBsYXN0IHBhcnNlIHN0YXRlIGFkZGVkIGJ5IGd5cC1wYXJzZS10by4iCi0gIChjYWFyIGd5cC1wYXJzZS1oaXN0b3J5KSkKLQotKGRlZnVuIGd5cC1wYXJzZS1zZWN0aW9ucyAoKQotICAiQSBsaXN0IG9mIHNlY3Rpb24gc3ltYm9scyBob2xkaW5nIGF0IHRoZSBsYXN0IHBhcnNlIHN0YXRlIHBvaW50LiIKLSAgKGNkYXIgZ3lwLXBhcnNlLWhpc3RvcnkpKQotCi0oZGVmdW4gZ3lwLWluc2lkZS1kaWN0aW9uYXJ5LXAgKCkKLSAgIlByZWRpY2F0ZSByZXR1cm5pbmcgdHJ1ZSBpZiB0aGUgcGFyc2VyIGlzIGluc2lkZSBhIGRpY3Rpb25hcnkuIgotICAobm90IChlcSAoY2FkYXIgZ3lwLXBhcnNlLWhpc3RvcnkpICdsaXN0KSkpCi0KLShkZWZ1biBneXAtYWRkLXBhcnNlLWhpc3RvcnkgKHBvaW50IHNlY3Rpb25zKQotICAiQWRkIHBhcnNlIHN0YXRlIFNFQ1RJT05TIHRvIHRoZSBwYXJzZSBoaXN0b3J5IGF0IFBPSU5UIHNvIHRoYXQgcGFyc2luZyBjYW4gYmUKLSAgIHJlc3VtZWQgaW5zdGFudGx5LiIKLSAgKHdoaWxlICg+PSAoY2FhciBneXAtcGFyc2UtaGlzdG9yeSkgcG9pbnQpCi0gICAgKHNldHEgZ3lwLXBhcnNlLWhpc3RvcnkgKGNkciBneXAtcGFyc2UtaGlzdG9yeSkpKQotICAoc2V0cSBneXAtcGFyc2UtaGlzdG9yeSAoY29ucyAoY29ucyBwb2ludCBzZWN0aW9ucykgZ3lwLXBhcnNlLWhpc3RvcnkpKSkKLQotKGRlZnVuIGd5cC1wYXJzZS10byAodGFyZ2V0LXBvaW50KQotICAiUGFyc2VzIGZyb20gKHBvaW50KSB0byBUQVJHRVQtUE9JTlQgYWRkaW5nIHRoZSBwYXJzZSBzdGF0ZSBpbmZvcm1hdGlvbiB0bwotICAgZ3lwLXBhcnNlLXN0YXRlLWhpc3RvcnkuIFBhcnNpbmcgc3RvcHMgaWYgVEFSR0VULVBPSU5UIGlzIHJlYWNoZWQgb3IgaWYgYQotICAgc3RyaW5nIGxpdGVyYWwgaGFzIGJlZW4gcGFyc2VkLiBSZXR1cm5zIG5pbCBpZiBubyBmdXJ0aGVyIHBhcnNpbmcgY2FuIGJlCi0gICBkb25lLCBvdGhlcndpc2UgcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIGEgcGFyc2VkIHN0cmluZywgbGVhdmluZwotICAgdGhlIHBvaW50IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4iCi0gIChsZXQgKChwYXJzaW5nIHQpCi0gICAgICAgIHN0cmluZy1zdGFydCkKLSAgICAod2hpbGUgcGFyc2luZwotICAgICAgKHNldHEgc3RyaW5nLXN0YXJ0IG5pbCkKLSAgICAgIDs7IFBhcnNlIHVwIHRvIGEgY2hhcmFjdGVyIHRoYXQgc3RhcnRzIGEgc2V4cCwgb3IgaWYgdGhlIG5lc3RpbmcKLSAgICAgIDs7IGxldmVsIGRlY3JlYXNlcy4KLSAgICAgIChsZXQgKChzdGF0ZSAocGFyc2UtcGFydGlhbC1zZXhwIChneXAtcGFyc2UtcG9pbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KSkKLSAgICAgICAgICAgIChzZWN0aW9ucyAoZ3lwLXBhcnNlLXNlY3Rpb25zKSkpCi0gICAgICAgIChpZiAoPSAobnRoIDAgc3RhdGUpIC0xKQotICAgICAgICAgICAgKHNldHEgc2VjdGlvbnMgKGNkciBzZWN0aW9ucykpIDsgcG9wIG91dCBhIGxldmVsCi0gICAgICAgICAgKGNvbmQgKChsb29raW5nLWF0LXAgIlsnXCJdIikgOyBhIHN0cmluZwotICAgICAgICAgICAgICAgICAoc2V0cSBzdHJpbmctc3RhcnQgKHBvaW50KSkKLSAgICAgICAgICAgICAgICAgKGZvcndhcmQtc2V4cCAxKQotICAgICAgICAgICAgICAgICAoaWYgKGd5cC1pbnNpZGUtZGljdGlvbmFyeS1wKQotICAgICAgICAgICAgICAgICAgICAgOzsgTG9vayBmb3Igc2VjdGlvbnMgaW5zaWRlIGEgZGljdGlvbmFyeQotICAgICAgICAgICAgICAgICAgICAgKGxldCAoKHNlY3Rpb24gKGd5cC1zZWN0aW9uLW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrIDEgc3RyaW5nLXN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAocG9pbnQpIDEpKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSBzZWN0aW9ucyAoY29ucyBzZWN0aW9uIChjZHIgc2VjdGlvbnMpKSkpKQotICAgICAgICAgICAgICAgICA7OyBTdG9wIGFmdGVyIHRoZSBzdHJpbmcgc28gaXQgY2FuIGJlIGZvbnRpZmllZC4KLSAgICAgICAgICAgICAgICAgKHNldHEgdGFyZ2V0LXBvaW50IChwb2ludCkpKQotICAgICAgICAgICAgICAgICgobG9va2luZy1hdC1wICJ7IikKLSAgICAgICAgICAgICAgICAgOzsgSW5zaWRlIGEgZGljdGlvbmFyeS4gSW5jcmVhc2UgbmVzdGluZy4KLSAgICAgICAgICAgICAgICAgKGZvcndhcmQtY2hhciAxKQotICAgICAgICAgICAgICAgICAoc2V0cSBzZWN0aW9ucyAoY29ucyAndW5rbm93biBzZWN0aW9ucykpKQotICAgICAgICAgICAgICAgICgobG9va2luZy1hdC1wICJcXFsiKQotICAgICAgICAgICAgICAgICA7OyBJbnNpZGUgYSBsaXN0LiBJbmNyZWFzZSBuZXN0aW5nCi0gICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkKLSAgICAgICAgICAgICAgICAgKHNldHEgc2VjdGlvbnMgKGNvbnMgJ2xpc3Qgc2VjdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAoKG5vdCAoZW9icCkpCi0gICAgICAgICAgICAgICAgIDs7IG90aGVyCi0gICAgICAgICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkpKSkKLSAgICAgICAgKGd5cC1hZGQtcGFyc2UtaGlzdG9yeSAocG9pbnQpIHNlY3Rpb25zKQotICAgICAgICAoc2V0cSBwYXJzaW5nICg8IChwb2ludCkgdGFyZ2V0LXBvaW50KSkpKQotICAgIHN0cmluZy1zdGFydCkpCi0KLShkZWZ1biBneXAtc2VjdGlvbi1hdC1wb2ludCAoKQotICAiVHJhbnNmb3JtIHRoZSBsYXN0IHBhcnNlIHN0YXRlLCB3aGljaCBpcyBhIGxpc3Qgb2YgbmVzdGVkIHNlY3Rpb25zIGFuZCByZXR1cm4KLSAgIHRoZSBzZWN0aW9uIHN5bWJvbCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRldGVybWluZSBmb250LWxvY2sgaW5mb3JtYXRpb24gZm9yCi0gICB0aGUgc3RyaW5nLiBDYW4gcmV0dXJuIG5pbCBpbmRpY2F0aW5nIHRoZSBzdHJpbmcgc2hvdWxkIG5vdCBoYXZlIGFueSBhdHRhY2hlZAotICAgc2VjdGlvbi4iCi0gIChsZXQgKChzZWN0aW9ucyAoZ3lwLXBhcnNlLXNlY3Rpb25zKSkpCi0gICAgKGNvbmQKLSAgICAgKChlcSAoY2FyIHNlY3Rpb25zKSAnY29uZGl0aW9ucykKLSAgICAgIDs7IGNvbmRpdGlvbnMgY2FuIG9jY3VyIGluIGEgdmFyaWFibGVzIHNlY3Rpb24sIGJ1dCB3ZSBzdGlsbCB3YW50IHRvCi0gICAgICA7OyBoaWdobGlnaHQgaXQgYXMgYSBrZXl3b3JkLgotICAgICAgbmlsKQotICAgICAoKGFuZCAoZXEgKGNhciBzZWN0aW9ucykgJ2xpc3QpCi0gICAgICAgICAgIChlcSAoY2FkciBzZWN0aW9ucykgJ2xpc3QpKQotICAgICAgOzsgY29uZGl0aW9ucyBhbmQgc291cmNlcyBjYW4gaGF2ZSBpdGVtcyBpbiBbWyBdXQotICAgICAgKGNhZGRyIHNlY3Rpb25zKSkKLSAgICAgKHQgKGNhZHIgc2VjdGlvbnMpKSkpKQotCi0oZGVmdW4gZ3lwLXNlY3Rpb24tbWF0Y2ggKGxpbWl0KQotICAiUGFyc2UgZnJvbSAocG9pbnQpIHRvIExJTUlUIHJldHVybmluZyBieSBtZWFucyBvZiBtYXRjaCBkYXRhIHdoYXQgd2FzCi0gICBtYXRjaGVkLiBUaGUgZ3JvdXAgb2YgdGhlIG1hdGNoIGluZGljYXRlcyB3aGF0IHN0eWxlIGZvbnQtbG9jayBzaG91bGQgYXBwbHkuCi0gICBTZWUgYWxzbyBgZ3lwLWFkZC1mb250LWxvY2sta2V5d29yZHMnLiIKLSAgKGd5cC1pbnZhbGlkYXRlLXBhcnNlLXN0YXRlcy1hZnRlciAocG9pbnQpKQotICAobGV0ICgoZ3JvdXAgbmlsKQotICAgICAgICAoc3RyaW5nLXN0YXJ0IHQpKQotICAgICh3aGlsZSAoYW5kICg8IChwb2ludCkgbGltaXQpCi0gICAgICAgICAgICAgICAgKG5vdCBncm91cCkKLSAgICAgICAgICAgICAgICBzdHJpbmctc3RhcnQpCi0gICAgICAoc2V0cSBzdHJpbmctc3RhcnQgKGd5cC1wYXJzZS10byBsaW1pdCkpCi0gICAgICAoaWYgc3RyaW5nLXN0YXJ0Ci0gICAgICAgICAgKHNldHEgZ3JvdXAgKGNhc2UgKGd5cC1zZWN0aW9uLWF0LXBvaW50KQotICAgICAgICAgICAgICAgICAgICAgICAgKCdkZXBlbmRlbmNpZXMgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICgndmFyaWFibGVzIDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAoJ2NvbmRpdGlvbnMgMikKLSAgICAgICAgICAgICAgICAgICAgICAgICgnc291cmNlcyAzKQotICAgICAgICAgICAgICAgICAgICAgICAgKCdkZWZpbmVzIDQpCi0gICAgICAgICAgICAgICAgICAgICAgICAobmlsIG5pbCkpKSkpCi0gICAgKGlmIGdyb3VwCi0gICAgICAgIChwcm9nbgotICAgICAgICAgIDs7IFNldCB0aGUgbWF0Y2ggZGF0YSB0byBpbmRpY2F0ZSB0byB0aGUgZm9udC1sb2NrIG1lY2hhbmlzbSB0aGUKLSAgICAgICAgICA7OyBoaWdobGlnaHRpbmcgdG8gYmUgcGVyZm9ybWVkLgotICAgICAgICAgIChzZXQtbWF0Y2gtZGF0YSAoYXBwZW5kIChsaXN0IHN0cmluZy1zdGFydCAocG9pbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLWxpc3QgKCogKDEtIGdyb3VwKSAyKSBuaWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKDErIHN0cmluZy1zdGFydCkgKDEtIChwb2ludCkpKSkpCi0gICAgICAgICAgdCkpKSkKLQotOzs7IFBsZWFzZSBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2d5cC93aWtpL0d5cExhbmd1YWdlU3BlY2lmaWNhdGlvbiBmb3IKLTs7OyBjYW5vbmljYWwgbGlzdCBvZiBrZXl3b3Jkcy4KLShkZWZ1biBneXAtYWRkLWZvbnQtbG9jay1rZXl3b3JkcyAoKQotICAiQWRkIGd5cC1tb2RlIGtleXdvcmRzIHRvIGZvbnQtbG9jayBtZWNoYW5pc20uIgotICA7OyBUT0RPKGprbm90dGVuKTogTW92ZSBhbGwgdGhlIGtleXdvcmQgaGlnaGxpZ2h0aW5nIGludG8gZ3lwLXNlY3Rpb24tbWF0Y2gKLSAgOzsgc28gdGhhdCB3ZSBjYW4gZG8gdGhlIGZvbnQtbG9ja2luZyBpbiBhIHNpbmdsZSBmb250LWxvY2sgcGFzcy4KLSAgKGZvbnQtbG9jay1hZGQta2V5d29yZHMKLSAgIG5pbAotICAgKGxpc3QKLSAgICA7OyBUb3AtbGV2ZWwga2V5d29yZHMKLSAgICAobGlzdCAoY29uY2F0ICJbJ1wiXVxcKCIKLSAgICAgICAgICAgICAgKHJlZ2V4cC1vcHQgKGxpc3QgImFjdGlvbiIgImFjdGlvbl9uYW1lIiAiYWN0aW9ucyIgImNmbGFncyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmRpdGlvbnMiICJjb25maWd1cmF0aW9ucyIgImNvcGllcyIgImRlZmluZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiICJkZXN0aW5hdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzIiAiZXh0ZW5zaW9uIiAiZmlsZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlX2RpcnMiICJpbmNsdWRlcyIgImlucHV0cyIgImxpYnJhcmllcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmtfc2V0dGluZ3MiICJtYWNfYnVuZGxlIiAibWVzc2FnZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zdnNfZXh0ZXJuYWxfcnVsZSIgIm91dHB1dHMiICJwcm9kdWN0X25hbWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9jZXNzX291dHB1dHNfYXNfc291cmNlcyIgInJ1bGVzIiAicnVsZV9uYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlcyIgInN1cHByZXNzX3dpbGRjYXJkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0X2NvbmRpdGlvbnMiICJ0YXJnZXRfZGVmYXVsdHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXRfZGVmaW5lcyIgInRhcmdldF9uYW1lIiAidG9vbHNldHMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXRzIiAidHlwZSIgInZhcmlhYmxlcyIgInhjb2RlX3NldHRpbmdzIikpCi0gICAgICAgICAgICAgICJbIS8rPV0/XFwpIikgMSAnZm9udC1sb2NrLWtleXdvcmQtZmFjZSB0KQotICAgIDs7IFR5cGUgb2YgdGFyZ2V0Ci0gICAgKGxpc3QgKGNvbmNhdCAiWydcIl1cXCgiCi0gICAgICAgICAgICAgIChyZWdleHAtb3B0IChsaXN0ICJsb2FkYWJsZV9tb2R1bGUiICJzdGF0aWNfbGlicmFyeSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoYXJlZF9saWJyYXJ5IiAiZXhlY3V0YWJsZSIgIm5vbmUiKSkKLSAgICAgICAgICAgICAgIlxcKSIpIDEgJ2ZvbnQtbG9jay10eXBlLWZhY2UgdCkKLSAgICAobGlzdCAiXFwoPzp0YXJnZXRcXHxhY3Rpb25cXClfbmFtZVsnXCJdXFxzLSo6XFxzLSpbJ1wiXVxcKFteICdcIl0qXFwpIiAxCi0gICAgICAgICAgJ2ZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UgdCkKLSAgICAobGlzdCAnZ3lwLXNlY3Rpb24tbWF0Y2gKLSAgICAgICAgICAobGlzdCAxICdmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlIHQgdCkgOyBkZXBlbmRlbmNpZXMKLSAgICAgICAgICAobGlzdCAyICdmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlIHQgdCkgOyB2YXJpYWJsZXMsIGNvbmRpdGlvbnMKLSAgICAgICAgICAobGlzdCAzICdmb250LWxvY2stY29uc3RhbnQtZmFjZSB0IHQpIDsgc291cmNlcwotICAgICAgICAgIChsaXN0IDQgJ2ZvbnQtbG9jay1wcmVwcm9jZXNzb3ItZmFjZSB0IHQpKSA7IHByZXByb2Nlc3NvcgotICAgIDs7IFZhcmlhYmxlIGV4cGFuc2lvbgotICAgIChsaXN0ICI8QD8oXFwoW15cbiApXStcXCkpIiAxICdmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlIHQpCi0gICAgOzsgQ29tbWFuZCBleHBhbnNpb24KLSAgICAobGlzdCAiPCFAPyhcXChbXlxuICldK1xcKSkiIDEgJ2ZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UgdCkKLSAgICApKSkKLQotKHByb3ZpZGUgJ2d5cCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy9ydW4tdW5pdC10ZXN0cy5zaCBiL3Rvb2xzL2d5cC90b29scy9lbWFjcy9ydW4tdW5pdC10ZXN0cy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNmU2MmI5Yi4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvZW1hY3MvcnVuLXVuaXQtdGVzdHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSMhL2Jpbi9zaAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotZW1hY3MgLS1uby1zaXRlLWZpbGUgLS1uby1pbml0LWZpbGUgLS1iYXRjaCBcCi0gICAgICAtLWxvYWQgZXJ0LmVsIC0tbG9hZCBneXAuZWwgLS1sb2FkIGd5cC10ZXN0cy5lbCBcCi0gICAgICAtZiBlcnQtcnVuLXRlc3RzLWJhdGNoLWFuZC1leGl0CmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvZW1hY3MvdGVzdGRhdGEvbWVkaWEuZ3lwIGIvdG9vbHMvZ3lwL3Rvb2xzL2VtYWNzL3Rlc3RkYXRhL21lZGlhLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzMDBmZS4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvZW1hY3MvdGVzdGRhdGEvbWVkaWEuZ3lwCisrKyAvZGV2L251bGwKQEAgLTEsMTEwNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi17Ci0gICd2YXJpYWJsZXMnOiB7Ci0gICAgJ2Nocm9taXVtX2NvZGUnOiAxLAotICAgICMgT3ZlcnJpZGUgdG8gZHluYW1pY2FsbHkgbGluayB0aGUgUHVsc2VBdWRpbyBsaWJyYXJ5LgotICAgICd1c2VfcHVsc2VhdWRpbyUnOiAwLAotICAgICMgT3ZlcnJpZGUgdG8gZHluYW1pY2FsbHkgbGluayB0aGUgY3JhcyAoQ2hyb21lT1MgYXVkaW8pIGxpYnJhcnkuCi0gICAgJ3VzZV9jcmFzJSc6IDAsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYScsCi0gICAgICAndHlwZSc6ICc8KGNvbXBvbmVudCknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ3l1dl9jb252ZXJ0JywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICcuLi9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAgICcuLi9idWlsZC90ZW1wX2d5cC9nb29nbGV1cmwuZ3lwOmdvb2dsZXVybCcsCi0gICAgICAgICcuLi9jcnlwdG8vY3J5cHRvLmd5cDpjcnlwdG8nLAotICAgICAgICAnLi4vdGhpcmRfcGFydHkvb3Blbm1heC9vcGVubWF4Lmd5cDppbCcsCi0gICAgICAgICcuLi91aS91aS5neXA6dWknLAotICAgICAgXSwKLSAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAnTUVESUFfSU1QTEVNRU5UQVRJT04nLAotICAgICAgXSwKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhdWRpby9hbmRyb2lkL2F1ZGlvX21hbmFnZXJfYW5kcm9pZC5jYycsCi0gICAgICAgICdhdWRpby9hbmRyb2lkL2F1ZGlvX21hbmFnZXJfYW5kcm9pZC5oJywKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvYXVkaW9fdHJhY2tfb3V0cHV0X2FuZHJvaWQuY2MnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9hdWRpb190cmFja19vdXRwdXRfYW5kcm9pZC5oJywKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvb3BlbnNsZXNfaW5wdXQuY2MnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9vcGVuc2xlc19pbnB1dC5oJywKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvb3BlbnNsZXNfb3V0cHV0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvb3BlbnNsZXNfb3V0cHV0LmgnLAotICAgICAgICAnYXVkaW8vYXN5bmNfc29ja2V0X2lvX2hhbmRsZXIuaCcsCi0gICAgICAgICdhdWRpby9hc3luY19zb2NrZXRfaW9faGFuZGxlcl9wb3NpeC5jYycsCi0gICAgICAgICdhdWRpby9hc3luY19zb2NrZXRfaW9faGFuZGxlcl93aW4uY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fYnVmZmVyc19zdGF0ZS5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19idWZmZXJzX3N0YXRlLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9faW8uaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19pbnB1dF9jb250cm9sbGVyLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X2NvbnRyb2xsZXIuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19pbnB1dF9zdHJlYW1faW1wbC5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19pbnB1dF9zdHJlYW1faW1wbC5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2RldmljZV9uYW1lLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2RldmljZV9uYW1lLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fbWFuYWdlci5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19tYW5hZ2VyLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fbWFuYWdlcl9iYXNlLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX21hbmFnZXJfYmFzZS5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9jb250cm9sbGVyLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9jb250cm9sbGVyLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2Rpc3BhdGNoZXIuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2Rpc3BhdGNoZXIuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfZGlzcGF0Y2hlcl9pbXBsLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9kaXNwYXRjaGVyX2ltcGwuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfbWl4ZXIuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X21peGVyLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X3Byb3h5LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9wcm94eS5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX3BhcmFtZXRlcnMuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fcGFyYW1ldGVycy5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX3V0aWwuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fdXRpbC5oJywKLSAgICAgICAgJ2F1ZGlvL2Nyb3NzX3Byb2Nlc3Nfbm90aWZpY2F0aW9uLmNjJywKLSAgICAgICAgJ2F1ZGlvL2Nyb3NzX3Byb2Nlc3Nfbm90aWZpY2F0aW9uLmgnLAotICAgICAgICAnYXVkaW8vY3Jvc3NfcHJvY2Vzc19ub3RpZmljYXRpb25fd2luLmNjJywKLSAgICAgICAgJ2F1ZGlvL2Nyb3NzX3Byb2Nlc3Nfbm90aWZpY2F0aW9uX3Bvc2l4LmNjJywKLSAgICAgICAgJ2F1ZGlvL2Zha2VfYXVkaW9faW5wdXRfc3RyZWFtLmNjJywKLSAgICAgICAgJ2F1ZGlvL2Zha2VfYXVkaW9faW5wdXRfc3RyZWFtLmgnLAotICAgICAgICAnYXVkaW8vZmFrZV9hdWRpb19vdXRwdXRfc3RyZWFtLmNjJywKLSAgICAgICAgJ2F1ZGlvL2Zha2VfYXVkaW9fb3V0cHV0X3N0cmVhbS5oJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2F1ZGlvX21hbmFnZXJfbGludXguY2MnLAotICAgICAgICAnYXVkaW8vbGludXgvYXVkaW9fbWFuYWdlcl9saW51eC5oJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2FfaW5wdXQuY2MnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV9pbnB1dC5oJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2Ffb3V0cHV0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2Ffb3V0cHV0LmgnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV91dGlsLmNjJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2FfdXRpbC5oJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2Ffd3JhcHBlci5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9hbHNhX3dyYXBwZXIuaCcsCi0gICAgICAgICdhdWRpby9saW51eC9jcmFzX291dHB1dC5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9jcmFzX291dHB1dC5oJywKLSAgICAgICAgJ2F1ZGlvL29wZW5ic2QvYXVkaW9fbWFuYWdlcl9vcGVuYnNkLmNjJywKLSAgICAgICAgJ2F1ZGlvL29wZW5ic2QvYXVkaW9fbWFuYWdlcl9vcGVuYnNkLmgnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX2lucHV0X21hYy5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9faW5wdXRfbWFjLmgnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX2xvd19sYXRlbmN5X2lucHV0X21hYy5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfaW5wdXRfbWFjLmgnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF9tYWMuY2MnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF9tYWMuaCcsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbWFuYWdlcl9tYWMuY2MnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX21hbmFnZXJfbWFjLmgnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX291dHB1dF9tYWMuY2MnLAotICAgICAgICAnYXVkaW8vbWFjL2F1ZGlvX291dHB1dF9tYWMuaCcsCi0gICAgICAgICdhdWRpby9udWxsX2F1ZGlvX3NpbmsuY2MnLAotICAgICAgICAnYXVkaW8vbnVsbF9hdWRpb19zaW5rLmgnLAotICAgICAgICAnYXVkaW8vcHVsc2UvcHVsc2Vfb3V0cHV0LmNjJywKLSAgICAgICAgJ2F1ZGlvL3B1bHNlL3B1bHNlX291dHB1dC5oJywKLSAgICAgICAgJ2F1ZGlvL3NhbXBsZV9yYXRlcy5jYycsCi0gICAgICAgICdhdWRpby9zYW1wbGVfcmF0ZXMuaCcsCi0gICAgICAgICdhdWRpby9zaW1wbGVfc291cmNlcy5jYycsCi0gICAgICAgICdhdWRpby9zaW1wbGVfc291cmNlcy5oJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X2lucHV0X3dpbi5oJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19sb3dfbGF0ZW5jeV9vdXRwdXRfd2luLmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19sb3dfbGF0ZW5jeV9vdXRwdXRfd2luLmgnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX21hbmFnZXJfd2luLmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19tYW5hZ2VyX3dpbi5oJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdnJ0X3dyYXBwZXJfd2luLmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdnJ0X3dyYXBwZXJfd2luLmgnLAotICAgICAgICAnYXVkaW8vd2luL2RldmljZV9lbnVtZXJhdGlvbl93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL2RldmljZV9lbnVtZXJhdGlvbl93aW4uaCcsCi0gICAgICAgICdhdWRpby93aW4vd2F2ZWluX2lucHV0X3dpbi5jYycsCi0gICAgICAgICdhdWRpby93aW4vd2F2ZWluX2lucHV0X3dpbi5oJywKLSAgICAgICAgJ2F1ZGlvL3dpbi93YXZlb3V0X291dHB1dF93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL3dhdmVvdXRfb3V0cHV0X3dpbi5oJywKLSAgICAgICAgJ2Jhc2UvYW5kcm9pZC9tZWRpYV9qbmlfcmVnaXN0cmFyLmNjJywKLSAgICAgICAgJ2Jhc2UvYW5kcm9pZC9tZWRpYV9qbmlfcmVnaXN0cmFyLmgnLAotICAgICAgICAnYmFzZS9hdWRpb19kZWNvZGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fZGVjb2Rlci5oJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fZGVjb2Rlcl9jb25maWcuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5oJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fcmVuZGVyZXIuaCcsCi0gICAgICAgICdiYXNlL2F1ZGlvX3JlbmRlcmVyX21peGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fcmVuZGVyZXJfbWl4ZXIuaCcsCi0gICAgICAgICdiYXNlL2F1ZGlvX3JlbmRlcmVyX21peGVyX2lucHV0LmNjJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fcmVuZGVyZXJfbWl4ZXJfaW5wdXQuaCcsCi0gICAgICAgICdiYXNlL2JpdHN0cmVhbV9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL2J1ZmZlcnMuY2MnLAotICAgICAgICAnYmFzZS9idWZmZXJzLmgnLAotICAgICAgICAnYmFzZS9ieXRlX3F1ZXVlLmNjJywKLSAgICAgICAgJ2Jhc2UvYnl0ZV9xdWV1ZS5oJywKLSAgICAgICAgJ2Jhc2UvY2hhbm5lbF9sYXlvdXQuY2MnLAotICAgICAgICAnYmFzZS9jaGFubmVsX2xheW91dC5oJywKLSAgICAgICAgJ2Jhc2UvY2xvY2suY2MnLAotICAgICAgICAnYmFzZS9jbG9jay5oJywKLSAgICAgICAgJ2Jhc2UvY29tcG9zaXRlX2ZpbHRlci5jYycsCi0gICAgICAgICdiYXNlL2NvbXBvc2l0ZV9maWx0ZXIuaCcsCi0gICAgICAgICdiYXNlL2RhdGFfYnVmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvZGF0YV9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL2RhdGFfc291cmNlLmNjJywKLSAgICAgICAgJ2Jhc2UvZGF0YV9zb3VyY2UuaCcsCi0gICAgICAgICdiYXNlL2RlY29kZXJfYnVmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL2RlY3J5cHRfY29uZmlnLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjcnlwdF9jb25maWcuaCcsCi0gICAgICAgICdiYXNlL2RlY3J5cHRvci5oJywKLSAgICAgICAgJ2Jhc2UvZGVjcnlwdG9yX2NsaWVudC5oJywKLSAgICAgICAgJ2Jhc2UvZGVtdXhlci5jYycsCi0gICAgICAgICdiYXNlL2RlbXV4ZXIuaCcsCi0gICAgICAgICdiYXNlL2RlbXV4ZXJfc3RyZWFtLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVtdXhlcl9zdHJlYW0uaCcsCi0gICAgICAgICdiYXNlL2RqYjIuY2MnLAotICAgICAgICAnYmFzZS9kamIyLmgnLAotICAgICAgICAnYmFzZS9maWx0ZXJfY29sbGVjdGlvbi5jYycsCi0gICAgICAgICdiYXNlL2ZpbHRlcl9jb2xsZWN0aW9uLmgnLAotICAgICAgICAnYmFzZS9maWx0ZXJfaG9zdC5oJywKLSAgICAgICAgJ2Jhc2UvZmlsdGVycy5jYycsCi0gICAgICAgICdiYXNlL2ZpbHRlcnMuaCcsCi0gICAgICAgICdiYXNlL2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICdiYXNlL2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlci5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWEuaCcsCi0gICAgICAgICdiYXNlL21lZGlhX2FuZHJvaWQuY2MnLAotICAgICAgICAnYmFzZS9tZWRpYV9leHBvcnQuaCcsCi0gICAgICAgICdiYXNlL21lZGlhX2xvZy5jYycsCi0gICAgICAgICdiYXNlL21lZGlhX2xvZy5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfbG9nX2V2ZW50LmgnLAotICAgICAgICAnYmFzZS9tZWRpYV9wb3NpeC5jYycsCi0gICAgICAgICdiYXNlL21lZGlhX3N3aXRjaGVzLmNjJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfc3dpdGNoZXMuaCcsCi0gICAgICAgICdiYXNlL21lZGlhX3dpbi5jYycsCi0gICAgICAgICdiYXNlL21lc3NhZ2VfbG9vcF9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2Jhc2UvbWVzc2FnZV9sb29wX2ZhY3RvcnkuaCcsCi0gICAgICAgICdiYXNlL3BpcGVsaW5lLmNjJywKLSAgICAgICAgJ2Jhc2UvcGlwZWxpbmUuaCcsCi0gICAgICAgICdiYXNlL3BpcGVsaW5lX3N0YXR1cy5jYycsCi0gICAgICAgICdiYXNlL3BpcGVsaW5lX3N0YXR1cy5oJywKLSAgICAgICAgJ2Jhc2UvcmFuZ2VzLmNjJywKLSAgICAgICAgJ2Jhc2UvcmFuZ2VzLmgnLAotICAgICAgICAnYmFzZS9zZWVrYWJsZV9idWZmZXIuY2MnLAotICAgICAgICAnYmFzZS9zZWVrYWJsZV9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL3N0YXRlX21hdHJpeC5jYycsCi0gICAgICAgICdiYXNlL3N0YXRlX21hdHJpeC5oJywKLSAgICAgICAgJ2Jhc2Uvc3RyZWFtX3BhcnNlci5jYycsCi0gICAgICAgICdiYXNlL3N0cmVhbV9wYXJzZXIuaCcsCi0gICAgICAgICdiYXNlL3N0cmVhbV9wYXJzZXJfYnVmZmVyLmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX2RlY29kZXIuY2MnLAotICAgICAgICAnYmFzZS92aWRlb19kZWNvZGVyLmgnLAotICAgICAgICAnYmFzZS92aWRlb19kZWNvZGVyX2NvbmZpZy5jYycsCi0gICAgICAgICdiYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmgnLAotICAgICAgICAnYmFzZS92aWRlb19mcmFtZS5jYycsCi0gICAgICAgICdiYXNlL3ZpZGVvX2ZyYW1lLmgnLAotICAgICAgICAnYmFzZS92aWRlb19yZW5kZXJlci5oJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fdXRpbC5jYycsCi0gICAgICAgICdiYXNlL3ZpZGVvX3V0aWwuaCcsCi0gICAgICAgICdjcnlwdG8vYWVzX2RlY3J5cHRvci5jYycsCi0gICAgICAgICdjcnlwdG8vYWVzX2RlY3J5cHRvci5oJywKLSAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfY29tbW9uLmNjJywKLSAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfY29tbW9uLmgnLAotICAgICAgICAnZmZtcGVnL2ZpbGVfcHJvdG9jb2wuY2MnLAotICAgICAgICAnZmZtcGVnL2ZpbGVfcHJvdG9jb2wuaCcsCi0gICAgICAgICdmaWx0ZXJzL2F1ZGlvX2ZpbGVfcmVhZGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fZmlsZV9yZWFkZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2F1ZGlvX3JlbmRlcmVyX2FsZ29yaXRobS5jYycsCi0gICAgICAgICdmaWx0ZXJzL2F1ZGlvX3JlbmRlcmVyX2FsZ29yaXRobS5oJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fcmVuZGVyZXJfaW1wbC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2F1ZGlvX3JlbmRlcmVyX2ltcGwuaCcsCi0gICAgICAgICdmaWx0ZXJzL2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAnZmlsdGVycy9jaHVua19kZW11eGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlcl9jbGllbnQuaCcsCi0gICAgICAgICdmaWx0ZXJzL2R1bW15X2RlbXV4ZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9kdW1teV9kZW11eGVyLmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19hdWRpb19kZWNvZGVyLmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfZGVtdXhlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWUuY2MnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfZ2x1ZS5oJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX3ZpZGVvX2RlY29kZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvZmlsZV9kYXRhX3NvdXJjZS5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZpbGVfZGF0YV9zb3VyY2UuaCcsCi0gICAgICAgICdmaWx0ZXJzL2dwdV92aWRlb19kZWNvZGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZ3B1X3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2luX21lbW9yeV91cmxfcHJvdG9jb2wuY2MnLAotICAgICAgICAnZmlsdGVycy9pbl9tZW1vcnlfdXJsX3Byb3RvY29sLmgnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbS5jYycsCi0gICAgICAgICdmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmgnLAotICAgICAgICAnZmlsdGVycy92aWRlb19mcmFtZV9nZW5lcmF0b3IuY2MnLAotICAgICAgICAnZmlsdGVycy92aWRlb19mcmFtZV9nZW5lcmF0b3IuaCcsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX3JlbmRlcmVyX2Jhc2UuY2MnLAotICAgICAgICAnZmlsdGVycy92aWRlb19yZW5kZXJlcl9iYXNlLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9mYWtlX3ZpZGVvX2NhcHR1cmVfZGV2aWNlLmNjJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvZmFrZV92aWRlb19jYXB0dXJlX2RldmljZS5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvbGludXgvdmlkZW9fY2FwdHVyZV9kZXZpY2VfbGludXguY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9saW51eC92aWRlb19jYXB0dXJlX2RldmljZV9saW51eC5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvbWFjL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX21hYy5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvbWFjL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX21hYy5tbScsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL21hYy92aWRlb19jYXB0dXJlX2RldmljZV9xdGtpdF9tYWMuaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL21hYy92aWRlb19jYXB0dXJlX2RldmljZV9xdGtpdF9tYWMubW0nLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZS5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9kZXZpY2VfZHVtbXkuY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9wcm94eS5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfcHJveHkuaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfdHlwZXMuaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9maWx0ZXJfYmFzZV93aW4uY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vZmlsdGVyX2Jhc2Vfd2luLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vcGluX2Jhc2Vfd2luLmNjJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3Bpbl9iYXNlX3dpbi5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3NpbmtfZmlsdGVyX29ic2VydmVyX3dpbi5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3NpbmtfZmlsdGVyX3dpbi5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9zaW5rX2ZpbHRlcl93aW4uaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9zaW5rX2lucHV0X3Bpbl93aW4uY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vc2lua19pbnB1dF9waW5fd2luLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vdmlkZW9fY2FwdHVyZV9kZXZpY2Vfd2luLmNjJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX3dpbi5oJywKLSAgICAgICAgJ3ZpZGVvL3BpY3R1cmUuY2MnLAotICAgICAgICAndmlkZW8vcGljdHVyZS5oJywKLSAgICAgICAgJ3ZpZGVvL3ZpZGVvX2RlY29kZV9hY2NlbGVyYXRvci5jYycsCi0gICAgICAgICd2aWRlby92aWRlb19kZWNvZGVfYWNjZWxlcmF0b3IuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fY29uc3RhbnRzLmgnLAotICAgICAgICAnd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3MuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50LmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1faW5mb19wYXJzZXIuY2MnLAotICAgICAgICAnd2VibS93ZWJtX2luZm9fcGFyc2VyLmgnLAotICAgICAgICAnd2VibS93ZWJtX3BhcnNlci5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fcGFyc2VyLmgnLAotICAgICAgICAnd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuY2MnLAotICAgICAgICAnd2VibS93ZWJtX3N0cmVhbV9wYXJzZXIuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fdHJhY2tzX3BhcnNlci5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fdHJhY2tzX3BhcnNlci5oJywKLSAgICAgIF0sCi0gICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKLSAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAnLi4nLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAjIEFuZHJvaWQgZG9lc24ndCB1c2UgZmZtcGVnLCBzbyBtYWtlIHRoZSBkZXBlbmRlbmN5IGNvbmRpdGlvbmFsCi0gICAgICAgICMgYW5kIGV4Y2x1ZGUgdGhlIHNvdXJjZXMgd2hpY2ggZGVwZW5kIG9uIGZmbXBlZy4KLSAgICAgICAgWydPUyAhPSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9mZm1wZWcvZmZtcGVnLmd5cDpmZm1wZWcnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TID09ICJhbmRyb2lkIicsIHsKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnYmFzZS9tZWRpYV9wb3NpeC5jYycsCi0gICAgICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb24uY2MnLAotICAgICAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfY29tbW9uLmgnLAotICAgICAgICAgICAgJ2ZmbXBlZy9maWxlX3Byb3RvY29sLmNjJywKLSAgICAgICAgICAgICdmZm1wZWcvZmlsZV9wcm90b2NvbC5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2F1ZGlvX2ZpbGVfcmVhZGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2F1ZGlvX2ZpbGVfcmVhZGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9jaHVua19kZW11eGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlcl9jbGllbnQuaCcsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlci5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWUuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWUuaCcsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2dwdV92aWRlb19kZWNvZGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2dwdV92aWRlb19kZWNvZGVyLmgnLAotICAgICAgICAgICAgJ3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5jYycsCi0gICAgICAgICAgICAnd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgnLAotICAgICAgICAgICAgJ3dlYm0vd2VibV9zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgICAgICd3ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgIyBUaGUgYmVsb3cgJ2FuZHJvaWQnIGNvbmRpdGlvbiB3ZXJlIGFkZGVkIHRlbXBvcmFyaWx5IGFuZCBzaG91bGQgYmUKLSAgICAgICAgIyByZW1vdmVkIGluIGRvd25zdHJlYW0sIGJlY2F1c2UgdGhlcmUgaXMgbm8gSmF2YSBlbnZpcm9ubWVudCBzZXR1cCBpbgotICAgICAgICAjIHVwc3RyZWFtIHlldC4KLSAgICAgICAgWydPUyA9PSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzpbCi0gICAgICAgICAgICAnYXVkaW8vYW5kcm9pZC9hdWRpb190cmFja19vdXRwdXRfYW5kcm9pZC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6WwotICAgICAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvYXVkaW9fdHJhY2tfb3V0cHV0X3N0dWJfYW5kcm9pZC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbE9wZW5TTEVTJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJsaW51eCIgb3IgT1M9PSJmcmVlYnNkIiBvciBPUz09InNvbGFyaXMiJywgewotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1sYXNvdW5kJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PSJvcGVuYnNkIicsIHsKLSAgICAgICAgICAnc291cmNlcy8nOiBbIFsnZXhjbHVkZScsICcvYWxzYV8nIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnL2F1ZGlvX21hbmFnZXJfbGludXgnIF0gXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TIT0ib3BlbmJzZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2F1ZGlvL29wZW5ic2QvYXVkaW9fbWFuYWdlcl9vcGVuYnNkLmNjJywKLSAgICAgICAgICAgICdhdWRpby9vcGVuYnNkL2F1ZGlvX21hbmFnZXJfb3BlbmJzZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09ImxpbnV4IicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsnc3lzcm9vdCE9IiInLCB7Ci0gICAgICAgICAgICAgICAgJ3BrZy1jb25maWcnOiAnLi4vYnVpbGQvbGludXgvcGtnLWNvbmZpZy13cmFwcGVyICI8KHN5c3Jvb3QpIiAiPCh0YXJnZXRfYXJjaCkiJywKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICdwa2ctY29uZmlnJzogJ3BrZy1jb25maWcnCi0gICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWyd1c2VfY3JhcyA9PSAxJywgewotICAgICAgICAgICAgICAnY2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWNmbGFncyBsaWJjcmFzKScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnPCFAKDwocGtnLWNvbmZpZykgLS1saWJzIGxpYmNyYXMpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgICAnVVNFX0NSQVMnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwgeyAgIyBlbHNlOiB1c2VfY3JhcyA9PSAwCi0gICAgICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICAgICAnYXVkaW8vbGludXgvY3Jhc19vdXRwdXQuY2MnLAotICAgICAgICAgICAgICAgICdhdWRpby9saW51eC9jcmFzX291dHB1dC5oJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ29zX3Bvc2l4ID09IDEnLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3VzZV9wdWxzZWF1ZGlvID09IDEnLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJzwhQChwa2ctY29uZmlnIC0tY2ZsYWdzIGxpYnB1bHNlKScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1saWJzLW9ubHktbCBsaWJwdWxzZSknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdVU0VfUFVMU0VBVURJTycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7ICAjIGVsc2U6IHVzZV9wdWxzZWF1ZGlvID09IDAKLSAgICAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICAgICdhdWRpby9wdWxzZS9wdWxzZV9vdXRwdXQuY2MnLAotICAgICAgICAgICAgICAgICdhdWRpby9wdWxzZS9wdWxzZV9vdXRwdXQuaCcsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydvc19wb3NpeCA9PSAxIGFuZCBPUyAhPSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICAgIyBWaWRlbyBjYXB0dXJlIGlzbid0IHN1cHBvcnRlZCBpbiBBbmRyb2lkIHlldC4KLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5jYycsCi0gICAgICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09Im1hYyInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVW5pdC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVG9vbGJveC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVBdWRpby5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVWaWRlby5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1FUS2l0LmZyYW1ld29yaycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnYXVkaW8vcHVsc2UvcHVsc2Vfb3V0cHV0LmNjJywKLSAgICAgICAgICAgICdhdWRpby9wdWxzZS9wdWxzZV9vdXRwdXQuaCcsCi0gICAgICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5jYycsCi0gICAgICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydwcm9wcmlldGFyeV9jb2RlY3M9PTEgb3IgYnJhbmRpbmc9PSJDaHJvbWUiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ21wNC9hdmMuY2MnLAotICAgICAgICAgICAgJ21wNC9hdmMuaCcsCi0gICAgICAgICAgICAnbXA0L2JveF9kZWZpbml0aW9ucy5jYycsCi0gICAgICAgICAgICAnbXA0L2JveF9kZWZpbml0aW9ucy5oJywKLSAgICAgICAgICAgICdtcDQvYm94X3JlYWRlci5jYycsCi0gICAgICAgICAgICAnbXA0L2JveF9yZWFkZXIuaCcsCi0gICAgICAgICAgICAnbXA0L2NlbmMuY2MnLAotICAgICAgICAgICAgJ21wNC9jZW5jLmgnLAotICAgICAgICAgICAgJ21wNC9tcDRfc3RyZWFtX3BhcnNlci5jYycsCi0gICAgICAgICAgICAnbXA0L21wNF9zdHJlYW1fcGFyc2VyLmgnLAotICAgICAgICAgICAgJ21wNC9vZmZzZXRfYnl0ZV9xdWV1ZS5jYycsCi0gICAgICAgICAgICAnbXA0L29mZnNldF9ieXRlX3F1ZXVlLmgnLAotICAgICAgICAgICAgJ21wNC90cmFja19ydW5faXRlcmF0b3IuY2MnLAotICAgICAgICAgICAgJ21wNC90cmFja19ydW5faXRlcmF0b3IuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3l1dl9jb252ZXJ0JywKLSAgICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywKLSAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICcuLicsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnb3JkZXJfcHJvZmlsaW5nICE9IDAnLCB7Ci0gICAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJyA6IFsKLSAgICAgICAgICAgIFsnX3Rvb2xzZXQ9PSJ0YXJnZXQiJywgewotICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsgJy1maW5zdHJ1bWVudC1mdW5jdGlvbnMnIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAndGFyZ2V0X2FyY2ggPT0gImlhMzIiIG9yIHRhcmdldF9hcmNoID09ICJ4NjQiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAneXV2X2NvbnZlcnRfc2ltZF94ODYnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbICd0YXJnZXRfYXJjaCA9PSAiYXJtIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ3l1dl9jb252ZXJ0X3NpbWRfYXJtJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2UveXV2X2NvbnZlcnQuY2MnLAotICAgICAgICAnYmFzZS95dXZfY29udmVydC5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneXV2X2NvbnZlcnRfc2ltZF94ODYnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfYy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3NzZTIuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX2MuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl94ODYuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9tbXguYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2JfbW14LmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX3NzZS5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL2ZpbHRlcl95dXYuaCcsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1dl9jLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X21teC5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1dl9zc2UyLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguaW5jJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX21teC5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2JfbW14LmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC95dXZfdG9fcmdiX3RhYmxlLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC95dXZfdG9fcmdiX3RhYmxlLmgnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ29yZGVyX3Byb2ZpbGluZyAhPSAwJywgewotICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucycgOiBbCi0gICAgICAgICAgICBbJ190b29sc2V0PT0idGFyZ2V0IicsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyEnOiBbICctZmluc3RydW1lbnQtZnVuY3Rpb25zJyBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsgJ3RhcmdldF9hcmNoID09ICJ4NjQiJywgewotICAgICAgICAgICMgU291cmNlIGZpbGVzIG9wdGltaXplZCBmb3IgWDY0IHN5c3RlbXMuCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYmFzZS9zaW1kL2xpbmVhcl9zY2FsZV95dXZfdG9fcmdiX21teF94NjQuYXNtJywKLSAgICAgICAgICAgICdiYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9zc2UyX3g2NC5hc20nLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdvc19wb3NpeCA9PSAxIGFuZCBPUyAhPSAibWFjIiBhbmQgT1MgIT0gImFuZHJvaWQiJywgewotICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAnLW1zc2UyJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAnT1MgPT0gIm1hYyInLCB7Ci0gICAgICAgICAgJ2NvbmZpZ3VyYXRpb25zJzogewotICAgICAgICAgICAgJ0RlYnVnJzogewotICAgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgIyBnY2Mgb24gdGhlIG1hYyBidWlsZHMgaG9ycmlibHkgdW5vcHRpbWl6ZWQgc3NlIGNvZGUgaW4gZGVidWcKLSAgICAgICAgICAgICAgICAjIG1vZGUuIFNpbmNlIHRoaXMgaXMgcmFyZWx5IGdvaW5nIHRvIGJlIGRlYnVnZ2VkLCBydW4gd2l0aCBmdWxsCi0gICAgICAgICAgICAgICAgIyBvcHRpbWl6YXRpb25zIGluIERlYnVnIGFzIHdlbGwgYXMgUmVsZWFzZS4KLSAgICAgICAgICAgICAgICAnR0NDX09QVElNSVpBVElPTl9MRVZFTCc6ICczJywgICMgLU8zCi0gICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgIH0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsgJ09TPT0id2luIicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3lhc21fZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctRFdJTjMyJywKLSAgICAgICAgICAgICAgJy1ETVNWQycsCi0gICAgICAgICAgICAgICctRENIUk9NSVVNJywKLSAgICAgICAgICAgICAgJy1Jc2ltZCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdPUz09Im1hYyInLCB7Ci0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICd5YXNtX2ZsYWdzJzogWwotICAgICAgICAgICAgICAnLURQUkVGSVgnLAotICAgICAgICAgICAgICAnLURNQUNITycsCi0gICAgICAgICAgICAgICctRENIUk9NSVVNJywKLSAgICAgICAgICAgICAgJy1Jc2ltZCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdvc19wb3NpeD09MSBhbmQgT1MhPSJtYWMiJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWyAndGFyZ2V0X2FyY2g9PSJpYTMyIicsIHsKLSAgICAgICAgICAgICAgICAneWFzbV9mbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctRFg4Nl8zMicsCi0gICAgICAgICAgICAgICAgICAnLURFTEYnLAotICAgICAgICAgICAgICAgICAgJy1EQ0hST01JVU0nLAotICAgICAgICAgICAgICAgICAgJy1Jc2ltZCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICd5YXNtX2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1EQVJDSF9YODZfNjQnLAotICAgICAgICAgICAgICAgICAgJy1ERUxGJywKLSAgICAgICAgICAgICAgICAgICctRFBJQycsCi0gICAgICAgICAgICAgICAgICAnLURDSFJPTUlVTScsCi0gICAgICAgICAgICAgICAgICAnLUlzaW1kJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3lhc21fb3V0cHV0X3BhdGgnOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbWVkaWEnLAotICAgICAgfSwKLSAgICAgICdtc3ZzXzIwMTBfZGlzYWJsZV91bGRpX3doZW5fcmVmZXJlbmNlZCc6IDEsCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS95YXNtL3lhc21fY29tcGlsZS5neXBpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneXV2X2NvbnZlcnRfc2ltZF9hcm0nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfYy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9jLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaCcsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1di5oJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X2MuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL3l1dl90b19yZ2JfdGFibGUuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL3l1dl90b19yZ2JfdGFibGUuaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3VuaXR0ZXN0cycsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtZWRpYScsCi0gICAgICAgICdtZWRpYV90ZXN0X3N1cHBvcnQnLAotICAgICAgICAneXV2X2NvbnZlcnQnLAotICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThuJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICAgICAnLi4vdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnLi4vdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnLi4vdWkvdWkuZ3lwOnVpJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvL2FzeW5jX3NvY2tldF9pb19oYW5kbGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X2NvbnRyb2xsZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9faW5wdXRfZGV2aWNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3ZvbHVtZV91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF9vdXRwdXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2NvbnRyb2xsZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X3Byb3h5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX3BhcmFtZXRlcnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9jcm9zc19wcm9jZXNzX25vdGlmaWNhdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9hbHNhX291dHB1dF91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfaW5wdXRfbWFjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL21hYy9hdWRpb19vdXRwdXRfbWFjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL3NpbXBsZV9zb3VyY2VzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX291dHB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19yZW5kZXJlcl9taXhlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2F1ZGlvX3JlbmRlcmVyX21peGVyX2lucHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvYnVmZmVyc191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2Nsb2NrX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvY29tcG9zaXRlX2ZpbHRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2RhdGFfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9kamIyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZmFrZV9hdWRpb19yZW5kZXJfY2FsbGJhY2suY2MnLAotICAgICAgICAnYmFzZS9mYWtlX2F1ZGlvX3JlbmRlcl9jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvZmlsdGVyX2NvbGxlY3Rpb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9oMjY0X2JpdHN0cmVhbV9jb252ZXJ0ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9waXBlbGluZV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3Jhbmdlc191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3J1bl9hbGxfdW5pdHRlc3RzLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2Vla2FibGVfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RhdGVfbWF0cml4X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvdGVzdF9kYXRhX3V0aWwuY2MnLAotICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZnJhbWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS92aWRlb191dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UveXV2X2NvbnZlcnRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY3J5cHRvL2Flc19kZWNyeXB0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19yZW5kZXJlcl9hbGdvcml0aG1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19yZW5kZXJlcl9pbXBsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZWNvZGVyX3VuaXR0ZXN0LmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfZGVtdXhlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19nbHVlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ192aWRlb19kZWNvZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmlsZV9kYXRhX3NvdXJjZV91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL3BpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9waXBlbGluZV9pbnRlZ3JhdGlvbl90ZXN0X2Jhc2UuY2MnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbV91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX3JlbmRlcmVyX2Jhc2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV91bml0dGVzdC5jYycsCi0gICAgICAgICd3ZWJtL2NsdXN0ZXJfYnVpbGRlci5jYycsCi0gICAgICAgICd3ZWJtL2NsdXN0ZXJfYnVpbGRlci5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ29zX3Bvc2l4PT0xIGFuZCBPUyE9Im1hYyInLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ2xpbnV4X3VzZV90Y21hbGxvYz09MScsIHsKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnLi4vYmFzZS9hbGxvY2F0b3IvYWxsb2NhdG9yLmd5cDphbGxvY2F0b3InLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1MgIT0gImFuZHJvaWQiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUyA9PSAiYW5kcm9pZCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3ZvbHVtZV91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5jYycsCi0gICAgICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5oJywKLSAgICAgICAgICAgICdmZm1wZWcvZmZtcGVnX2NvbW1vbl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9iaXRzdHJlYW1fY29udmVydGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9waXBlbGluZV9pbnRlZ3JhdGlvbl90ZXN0LmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL3BpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3RfYmFzZS5jYycsCi0gICAgICAgICAgICAnbXA0L21wNF9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICd3ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TID09ICJsaW51eCInLCB7Ci0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3VzZV9jcmFzID09IDEnLCB7Ci0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICdhdWRpby9saW51eC9jcmFzX291dHB1dF91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdVU0VfQ1JBUycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAndGFyZ2V0X2FyY2g9PSJpYTMyIiBvciB0YXJnZXRfYXJjaD09Ing2NCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl91bml0dGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsncHJvcHJpZXRhcnlfY29kZWNzPT0xIG9yIGJyYW5kaW5nPT0iQ2hyb21lIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdtcDQvYXZjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICdtcDQvYm94X3JlYWRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnbXA0L21wNF9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICdtcDQvb2Zmc2V0X2J5dGVfcXVldWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV90ZXN0X3N1cHBvcnQnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21lZGlhJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICcuLi90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICcuLi90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdhdWRpby90ZXN0X2F1ZGlvX2lucHV0X2NvbnRyb2xsZXJfZmFjdG9yeS5jYycsCi0gICAgICAgICdhdWRpby90ZXN0X2F1ZGlvX2lucHV0X2NvbnRyb2xsZXJfZmFjdG9yeS5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19jYWxsYmFjay5jYycsCi0gICAgICAgICdiYXNlL21vY2tfY2FsbGJhY2suaCcsCi0gICAgICAgICdiYXNlL21vY2tfZGF0YV9zb3VyY2VfaG9zdC5jYycsCi0gICAgICAgICdiYXNlL21vY2tfZGF0YV9zb3VyY2VfaG9zdC5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19kZW11eGVyX2hvc3QuY2MnLAotICAgICAgICAnYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19maWx0ZXJfaG9zdC5jYycsCi0gICAgICAgICdiYXNlL21vY2tfZmlsdGVyX2hvc3QuaCcsCi0gICAgICAgICdiYXNlL21vY2tfZmlsdGVycy5jYycsCi0gICAgICAgICdiYXNlL21vY2tfZmlsdGVycy5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnc2NhbGVyX2JlbmNoJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21lZGlhJywKLSAgICAgICAgJ3l1dl9jb252ZXJ0JywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICcuLi9za2lhL3NraWEuZ3lwOnNraWEnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndG9vbHMvc2NhbGVyX2JlbmNoL3NjYWxlcl9iZW5jaC5jYycsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3F0X2Zhc3RzdGFydCcsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndG9vbHMvcXRfZmFzdHN0YXJ0L3F0X2Zhc3RzdGFydC5jJwotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzZWVrX3Rlc3RlcicsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtZWRpYScsCi0gICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgXSwKLSAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAndG9vbHMvc2Vla190ZXN0ZXIvc2Vla190ZXN0ZXIuY2MnLAotICAgICAgXSwKLSAgICB9LAotICBdLAotICAnY29uZGl0aW9ucyc6IFsKLSAgICBbJ09TPT0id2luIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl93dGwnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnbWVkaWEnLAotICAgICAgICAgICAgJ3l1dl9jb252ZXJ0JywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL2Jhc2UvdGhpcmRfcGFydHkvZHluYW1pY19hbm5vdGF0aW9ucy9keW5hbWljX2Fubm90YXRpb25zLmd5cDpkeW5hbWljX2Fubm90YXRpb25zJywKLSAgICAgICAgICAgICcuLi91aS91aS5neXA6dWknLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS93dGwvaW5jbHVkZScsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL2xpc3QuaCcsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC9tYWluZnJtLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvbW92aWUuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvbW92aWUuaCcsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC9wbGF5ZXJfd3RsLmNjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL3BsYXllcl93dGwucmMnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvcHJvcHMuaCcsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC9zZWVrLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvcmVzb3VyY2UuaCcsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC92aWV3LmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnVkNMaW5rZXJUb29sJzogewotICAgICAgICAgICAgICAnU3ViU3lzdGVtJzogJzInLCAgICAgICAgICMgU2V0IC9TVUJTWVNURU06V0lORE9XUwotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ19DUlRfU0VDVVJFX05PX1dBUk5JTkdTPTEnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnT1MgPT0gIndpbiIgb3IgdG9vbGtpdF91c2VzX2d0ayA9PSAxJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnc2hhZGVyX2JlbmNoJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICd5dXZfY29udmVydCcsCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi91aS9nbC9nbC5neXA6Z2wnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL3NoYWRlcl9iZW5jaC5jYycsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2NwdV9jb2xvcl9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvY3B1X2NvbG9yX3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2dwdV9jb2xvcl9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvZ3B1X2NvbG9yX3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2dwdV9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvZ3B1X3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL3BhaW50ZXIuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC9wYWludGVyLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC93aW5kb3cuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC93aW5kb3cuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndG9vbGtpdF91c2VzX2d0ayA9PSAxJywgewotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICcuLi9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmd0aycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvd2luZG93X2xpbnV4LmNjJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9idWlsZF9hbmdsZS5neXA6bGliRUdMJywKLSAgICAgICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDpsaWJHTEVTdjInLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL3dpbmRvd193aW4uY2MnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydPUyA9PSAibGludXgiIGFuZCB0YXJnZXRfYXJjaCAhPSAiYXJtIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3RpbGVfcmVuZGVyX2JlbmNoJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdWkvZ2wvZ2wuZ3lwOmdsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAnLWxHTCcsCi0gICAgICAgICAgICAnLWxkbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd0b29scy90aWxlX3JlbmRlcl9iZW5jaC90aWxlX3JlbmRlcl9iZW5jaC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydvc19wb3NpeCA9PSAxIGFuZCBPUyAhPSAibWFjIiBhbmQgT1MgIT0gImFuZHJvaWQiJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAncGxheWVyX3gxMScsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdtZWRpYScsCi0gICAgICAgICAgICAneXV2X2NvbnZlcnQnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdWkvZ2wvZ2wuZ3lwOmdsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1sZGwnLAotICAgICAgICAgICAgICAnLWxYMTEnLAotICAgICAgICAgICAgICAnLWxYcmVuZGVyJywKLSAgICAgICAgICAgICAgJy1sWGV4dCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3gxMS9kYXRhX3NvdXJjZV9sb2dnZXIuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEvZGF0YV9zb3VyY2VfbG9nZ2VyLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEvZ2xfdmlkZW9fcmVuZGVyZXIuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEvZ2xfdmlkZW9fcmVuZGVyZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3gxMS9wbGF5ZXJfeDExLmNjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfeDExL3gxMV92aWRlb19yZW5kZXJlci5jYycsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3gxMS94MTFfdmlkZW9fcmVuZGVyZXIuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydPUyA9PSAiYW5kcm9pZCInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF5ZXJfYW5kcm9pZCcsCi0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2Jhc2UvYW5kcm9pZC9tZWRpYV9wbGF5ZXJfYnJpZGdlLmNjJywKLSAgICAgICAgICAgICdiYXNlL2FuZHJvaWQvbWVkaWFfcGxheWVyX2JyaWRnZS5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbWVkaWEnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZS1qbmktaGVhZGVycycsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJy4uL2Jhc2UvYW5kcm9pZC9qbmlfZ2VuZXJhdG9yL2puaV9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICdiYXNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL2Nocm9taXVtL21lZGlhL01lZGlhUGxheWVyTGlzdGVuZXIuamF2YScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9tZWRpYS9qbmkvbWVkaWFfcGxheWVyX2xpc3RlbmVyX2puaS5oJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvYmFzZS9hbmRyb2lkL2puaV9nZW5lcmF0b3Ivam5pX2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICAgICAnPEAoX2lucHV0cyknLAotICAgICAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX2phdmEnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2VfamF2YScgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZSc6ICdtZWRpYScsCi0gICAgICAgICAgICAnamF2YV9pbl9kaXInOiAnYmFzZS9hbmRyb2lkL2phdmEnLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vYnVpbGQvamF2YS5neXBpJyBdLAotICAgICAgICB9LAotCi0gICAgICBdLAotICAgIH0sIHsgIyBPUyAhPSAiYW5kcm9pZCInCi0gICAgICAjIEFuZHJvaWQgZG9lcyBub3QgdXNlIGZmbXBlZywgc28gZGlzYWJsZSB0aGUgdGFyZ2V0cyB3aGljaCByZXF1aXJlIGl0LgotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnZmZtcGVnX3VuaXR0ZXN0cycsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdtZWRpYScsCi0gICAgICAgICAgICAnbWVkaWFfdGVzdF9zdXBwb3J0JywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThuJywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9wZXJmJywKLSAgICAgICAgICAgICcuLi90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfdW5pdHRlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0gMScsIHsKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAjIE5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyAjaW5jbHVkZSBjaGFpbjoKLSAgICAgICAgICAgICAgICAjICAgYmFzZS9ydW5fYWxsX3VuaXR0ZXN0cy5jYwotICAgICAgICAgICAgICAgICMgICAuLi9iYXNlL3Rlc3Rfc3VpdGUuaAotICAgICAgICAgICAgICAgICMgICBndGsvZ3RrLmgKLSAgICAgICAgICAgICAgICAnLi4vYnVpbGQvbGludXgvc3lzdGVtLmd5cDpndGsnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICBbJ2xpbnV4X3VzZV90Y21hbGxvYz09MScsIHsKLSAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICcuLi9iYXNlL2FsbG9jYXRvci9hbGxvY2F0b3IuZ3lwOmFsbG9jYXRvcicsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdmZm1wZWdfcmVncmVzc2lvbl90ZXN0cycsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdtZWRpYScsCi0gICAgICAgICAgICAnbWVkaWFfdGVzdF9zdXBwb3J0JywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKLSAgICAgICAgICAgICcuLi90ZXN0aW5nL2dtb2NrLmd5cDpnbW9jaycsCi0gICAgICAgICAgICAnLi4vdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2ZmbXBlZy9mZm1wZWcuZ3lwOmZmbXBlZycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdiYXNlL3Rlc3RfZGF0YV91dGlsLmNjJywKLSAgICAgICAgICAgICdiYXNlL3J1bl9hbGxfdW5pdHRlc3RzLmNjJywKLSAgICAgICAgICAgICdmZm1wZWcvZmZtcGVnX3JlZ3Jlc3Npb25fdGVzdHMuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvcGlwZWxpbmVfaW50ZWdyYXRpb25fdGVzdF9iYXNlLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgWydvc19wb3NpeD09MSBhbmQgT1MhPSJtYWMiJywgewotICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgICBbJ2xpbnV4X3VzZV90Y21hbGxvYz09MScsIHsKLSAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICcuLi9iYXNlL2FsbG9jYXRvci9hbGxvY2F0b3IuZ3lwOmFsbG9jYXRvcicsCi0gICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdmZm1wZWdfdGVzdHMnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnbWVkaWEnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3Rlc3QvZmZtcGVnX3Rlc3RzL2ZmbXBlZ190ZXN0cy5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdtZWRpYV9iZW5jaCcsCi0gICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICdtZWRpYScsCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9mZm1wZWcvZmZtcGVnLmd5cDpmZm1wZWcnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndG9vbHMvbWVkaWFfYmVuY2gvbWVkaWFfYmVuY2guY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH1dCi0gIF0sCi19CmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvZW1hY3MvdGVzdGRhdGEvbWVkaWEuZ3lwLmZvbnRpZmllZCBiL3Rvb2xzL2d5cC90b29scy9lbWFjcy90ZXN0ZGF0YS9tZWRpYS5neXAuZm9udGlmaWVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjJiN2IyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9lbWFjcy90ZXN0ZGF0YS9tZWRpYS5neXAuZm9udGlmaWVkCisrKyAvZGV2L251bGwKQEAgLTEsMTEwNyArMCwwIEBACi0KLSMoIiMgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY2hyb21pdW1fY29kZSc6IDEsCi0gICAgIyBPdmVycmlkZSB0byBkeW5hbWljYWxseSBsaW5rIHRoZSBQdWxzZUF1ZGlvIGxpYnJhcnkuCi0gICAgJ3VzZV9wdWxzZWF1ZGlvJSc6IDAsCi0gICAgIyBPdmVycmlkZSB0byBkeW5hbWljYWxseSBsaW5rIHRoZSBjcmFzIChDaHJvbWVPUyBhdWRpbykgbGlicmFyeS4KLSAgICAndXNlX2NyYXMlJzogMCwKLSAgfSwKLSAgJ3RhcmdldHMnOiBbCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhJywKLSAgICAgICd0eXBlJzogJzwoY29tcG9uZW50KScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAneXV2X2NvbnZlcnQnLAotICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL2Jhc2UvdGhpcmRfcGFydHkvZHluYW1pY19hbm5vdGF0aW9ucy9keW5hbWljX2Fubm90YXRpb25zLmd5cDpkeW5hbWljX2Fubm90YXRpb25zJywKLSAgICAgICAgJy4uL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKLSAgICAgICAgJy4uL2NyeXB0by9jcnlwdG8uZ3lwOmNyeXB0bycsCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS9vcGVubWF4L29wZW5tYXguZ3lwOmlsJywKLSAgICAgICAgJy4uL3VpL3VpLmd5cDp1aScsCi0gICAgICBdLAotICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICdNRURJQV9JTVBMRU1FTlRBVElPTicsCi0gICAgICBdLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvYXVkaW9fbWFuYWdlcl9hbmRyb2lkLmNjJywKLSAgICAgICAgJ2F1ZGlvL2FuZHJvaWQvYXVkaW9fbWFuYWdlcl9hbmRyb2lkLmgnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9hdWRpb190cmFja19vdXRwdXRfYW5kcm9pZC5jYycsCi0gICAgICAgICdhdWRpby9hbmRyb2lkL2F1ZGlvX3RyYWNrX291dHB1dF9hbmRyb2lkLmgnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9vcGVuc2xlc19pbnB1dC5jYycsCi0gICAgICAgICdhdWRpby9hbmRyb2lkL29wZW5zbGVzX2lucHV0LmgnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9vcGVuc2xlc19vdXRwdXQuY2MnLAotICAgICAgICAnYXVkaW8vYW5kcm9pZC9vcGVuc2xlc19vdXRwdXQuaCcsCi0gICAgICAgICdhdWRpby9hc3luY19zb2NrZXRfaW9faGFuZGxlci5oJywKLSAgICAgICAgJ2F1ZGlvL2FzeW5jX3NvY2tldF9pb19oYW5kbGVyX3Bvc2l4LmNjJywKLSAgICAgICAgJ2F1ZGlvL2FzeW5jX3NvY2tldF9pb19oYW5kbGVyX3dpbi5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19idWZmZXJzX3N0YXRlLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2J1ZmZlcnNfc3RhdGUuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19pby5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X2NvbnRyb2xsZXIuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9faW5wdXRfY29udHJvbGxlci5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3N0cmVhbV9pbXBsLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3N0cmVhbV9pbXBsLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fZGV2aWNlX25hbWUuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fZGV2aWNlX25hbWUuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19tYW5hZ2VyLmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX21hbmFnZXIuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19tYW5hZ2VyX2Jhc2UuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fbWFuYWdlcl9iYXNlLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2NvbnRyb2xsZXIuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2NvbnRyb2xsZXIuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfZGlzcGF0Y2hlci5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfZGlzcGF0Y2hlci5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9kaXNwYXRjaGVyX2ltcGwuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2Rpc3BhdGNoZXJfaW1wbC5oJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX291dHB1dF9taXhlci5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfbWl4ZXIuaCcsCi0gICAgICAgICdhdWRpby9hdWRpb19vdXRwdXRfcHJveHkuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X3Byb3h5LmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fcGFyYW1ldGVycy5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19wYXJhbWV0ZXJzLmgnLAotICAgICAgICAnYXVkaW8vYXVkaW9fdXRpbC5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb191dGlsLmgnLAotICAgICAgICAnYXVkaW8vY3Jvc3NfcHJvY2Vzc19ub3RpZmljYXRpb24uY2MnLAotICAgICAgICAnYXVkaW8vY3Jvc3NfcHJvY2Vzc19ub3RpZmljYXRpb24uaCcsCi0gICAgICAgICdhdWRpby9jcm9zc19wcm9jZXNzX25vdGlmaWNhdGlvbl93aW4uY2MnLAotICAgICAgICAnYXVkaW8vY3Jvc3NfcHJvY2Vzc19ub3RpZmljYXRpb25fcG9zaXguY2MnLAotICAgICAgICAnYXVkaW8vZmFrZV9hdWRpb19pbnB1dF9zdHJlYW0uY2MnLAotICAgICAgICAnYXVkaW8vZmFrZV9hdWRpb19pbnB1dF9zdHJlYW0uaCcsCi0gICAgICAgICdhdWRpby9mYWtlX2F1ZGlvX291dHB1dF9zdHJlYW0uY2MnLAotICAgICAgICAnYXVkaW8vZmFrZV9hdWRpb19vdXRwdXRfc3RyZWFtLmgnLAotICAgICAgICAnYXVkaW8vbGludXgvYXVkaW9fbWFuYWdlcl9saW51eC5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9hdWRpb19tYW5hZ2VyX2xpbnV4LmgnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV9pbnB1dC5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9hbHNhX2lucHV0LmgnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV9vdXRwdXQuY2MnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV9vdXRwdXQuaCcsCi0gICAgICAgICdhdWRpby9saW51eC9hbHNhX3V0aWwuY2MnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV91dGlsLmgnLAotICAgICAgICAnYXVkaW8vbGludXgvYWxzYV93cmFwcGVyLmNjJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2Fsc2Ffd3JhcHBlci5oJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2NyYXNfb3V0cHV0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2xpbnV4L2NyYXNfb3V0cHV0LmgnLAotICAgICAgICAnYXVkaW8vb3BlbmJzZC9hdWRpb19tYW5hZ2VyX29wZW5ic2QuY2MnLAotICAgICAgICAnYXVkaW8vb3BlbmJzZC9hdWRpb19tYW5hZ2VyX29wZW5ic2QuaCcsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9faW5wdXRfbWFjLmNjJywKLSAgICAgICAgJ2F1ZGlvL21hYy9hdWRpb19pbnB1dF9tYWMuaCcsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfaW5wdXRfbWFjLmNjJywKLSAgICAgICAgJ2F1ZGlvL21hYy9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF9tYWMuaCcsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfb3V0cHV0X21hYy5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfb3V0cHV0X21hYy5oJywKLSAgICAgICAgJ2F1ZGlvL21hYy9hdWRpb19tYW5hZ2VyX21hYy5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbWFuYWdlcl9tYWMuaCcsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fb3V0cHV0X21hYy5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fb3V0cHV0X21hYy5oJywKLSAgICAgICAgJ2F1ZGlvL251bGxfYXVkaW9fc2luay5jYycsCi0gICAgICAgICdhdWRpby9udWxsX2F1ZGlvX3NpbmsuaCcsCi0gICAgICAgICdhdWRpby9wdWxzZS9wdWxzZV9vdXRwdXQuY2MnLAotICAgICAgICAnYXVkaW8vcHVsc2UvcHVsc2Vfb3V0cHV0LmgnLAotICAgICAgICAnYXVkaW8vc2FtcGxlX3JhdGVzLmNjJywKLSAgICAgICAgJ2F1ZGlvL3NhbXBsZV9yYXRlcy5oJywKLSAgICAgICAgJ2F1ZGlvL3NpbXBsZV9zb3VyY2VzLmNjJywKLSAgICAgICAgJ2F1ZGlvL3NpbXBsZV9zb3VyY2VzLmgnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X2lucHV0X3dpbi5jYycsCi0gICAgICAgICdhdWRpby93aW4vYXVkaW9fbG93X2xhdGVuY3lfaW5wdXRfd2luLmgnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF93aW4uaCcsCi0gICAgICAgICdhdWRpby93aW4vYXVkaW9fbWFuYWdlcl93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX21hbmFnZXJfd2luLmgnLAotICAgICAgICAnYXVkaW8vd2luL2F2cnRfd3JhcHBlcl93aW4uY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F2cnRfd3JhcHBlcl93aW4uaCcsCi0gICAgICAgICdhdWRpby93aW4vZGV2aWNlX2VudW1lcmF0aW9uX3dpbi5jYycsCi0gICAgICAgICdhdWRpby93aW4vZGV2aWNlX2VudW1lcmF0aW9uX3dpbi5oJywKLSAgICAgICAgJ2F1ZGlvL3dpbi93YXZlaW5faW5wdXRfd2luLmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi93YXZlaW5faW5wdXRfd2luLmgnLAotICAgICAgICAnYXVkaW8vd2luL3dhdmVvdXRfb3V0cHV0X3dpbi5jYycsCi0gICAgICAgICdhdWRpby93aW4vd2F2ZW91dF9vdXRwdXRfd2luLmgnLAotICAgICAgICAnYmFzZS9hbmRyb2lkL21lZGlhX2puaV9yZWdpc3RyYXIuY2MnLAotICAgICAgICAnYmFzZS9hbmRyb2lkL21lZGlhX2puaV9yZWdpc3RyYXIuaCcsCi0gICAgICAgICdiYXNlL2F1ZGlvX2RlY29kZXIuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19kZWNvZGVyLmgnLAotICAgICAgICAnYmFzZS9hdWRpb19kZWNvZGVyX2NvbmZpZy5jYycsCi0gICAgICAgICdiYXNlL2F1ZGlvX2RlY29kZXJfY29uZmlnLmgnLAotICAgICAgICAnYmFzZS9hdWRpb19yZW5kZXJlci5oJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fcmVuZGVyZXJfbWl4ZXIuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19yZW5kZXJlcl9taXhlci5oJywKLSAgICAgICAgJ2Jhc2UvYXVkaW9fcmVuZGVyZXJfbWl4ZXJfaW5wdXQuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19yZW5kZXJlcl9taXhlcl9pbnB1dC5oJywKLSAgICAgICAgJ2Jhc2UvYml0c3RyZWFtX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2UvYnVmZmVycy5jYycsCi0gICAgICAgICdiYXNlL2J1ZmZlcnMuaCcsCi0gICAgICAgICdiYXNlL2J5dGVfcXVldWUuY2MnLAotICAgICAgICAnYmFzZS9ieXRlX3F1ZXVlLmgnLAotICAgICAgICAnYmFzZS9jaGFubmVsX2xheW91dC5jYycsCi0gICAgICAgICdiYXNlL2NoYW5uZWxfbGF5b3V0LmgnLAotICAgICAgICAnYmFzZS9jbG9jay5jYycsCi0gICAgICAgICdiYXNlL2Nsb2NrLmgnLAotICAgICAgICAnYmFzZS9jb21wb3NpdGVfZmlsdGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvY29tcG9zaXRlX2ZpbHRlci5oJywKLSAgICAgICAgJ2Jhc2UvZGF0YV9idWZmZXIuY2MnLAotICAgICAgICAnYmFzZS9kYXRhX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2UvZGF0YV9zb3VyY2UuY2MnLAotICAgICAgICAnYmFzZS9kYXRhX3NvdXJjZS5oJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXIuY2MnLAotICAgICAgICAnYmFzZS9kZWNvZGVyX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2UvZGVjcnlwdF9jb25maWcuY2MnLAotICAgICAgICAnYmFzZS9kZWNyeXB0X2NvbmZpZy5oJywKLSAgICAgICAgJ2Jhc2UvZGVjcnlwdG9yLmgnLAotICAgICAgICAnYmFzZS9kZWNyeXB0b3JfY2xpZW50LmgnLAotICAgICAgICAnYmFzZS9kZW11eGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvZGVtdXhlci5oJywKLSAgICAgICAgJ2Jhc2UvZGVtdXhlcl9zdHJlYW0uY2MnLAotICAgICAgICAnYmFzZS9kZW11eGVyX3N0cmVhbS5oJywKLSAgICAgICAgJ2Jhc2UvZGpiMi5jYycsCi0gICAgICAgICdiYXNlL2RqYjIuaCcsCi0gICAgICAgICdiYXNlL2ZpbHRlcl9jb2xsZWN0aW9uLmNjJywKLSAgICAgICAgJ2Jhc2UvZmlsdGVyX2NvbGxlY3Rpb24uaCcsCi0gICAgICAgICdiYXNlL2ZpbHRlcl9ob3N0LmgnLAotICAgICAgICAnYmFzZS9maWx0ZXJzLmNjJywKLSAgICAgICAgJ2Jhc2UvZmlsdGVycy5oJywKLSAgICAgICAgJ2Jhc2UvaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmNjJywKLSAgICAgICAgJ2Jhc2UvaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAnYmFzZS9tZWRpYS5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfYW5kcm9pZC5jYycsCi0gICAgICAgICdiYXNlL21lZGlhX2V4cG9ydC5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfbG9nLmNjJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfbG9nLmgnLAotICAgICAgICAnYmFzZS9tZWRpYV9sb2dfZXZlbnQuaCcsCi0gICAgICAgICdiYXNlL21lZGlhX3Bvc2l4LmNjJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfc3dpdGNoZXMuY2MnLAotICAgICAgICAnYmFzZS9tZWRpYV9zd2l0Y2hlcy5oJywKLSAgICAgICAgJ2Jhc2UvbWVkaWFfd2luLmNjJywKLSAgICAgICAgJ2Jhc2UvbWVzc2FnZV9sb29wX2ZhY3RvcnkuY2MnLAotICAgICAgICAnYmFzZS9tZXNzYWdlX2xvb3BfZmFjdG9yeS5oJywKLSAgICAgICAgJ2Jhc2UvcGlwZWxpbmUuY2MnLAotICAgICAgICAnYmFzZS9waXBlbGluZS5oJywKLSAgICAgICAgJ2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmNjJywKLSAgICAgICAgJ2Jhc2UvcGlwZWxpbmVfc3RhdHVzLmgnLAotICAgICAgICAnYmFzZS9yYW5nZXMuY2MnLAotICAgICAgICAnYmFzZS9yYW5nZXMuaCcsCi0gICAgICAgICdiYXNlL3NlZWthYmxlX2J1ZmZlci5jYycsCi0gICAgICAgICdiYXNlL3NlZWthYmxlX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2Uvc3RhdGVfbWF0cml4LmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RhdGVfbWF0cml4LmgnLAotICAgICAgICAnYmFzZS9zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgJ2Jhc2Uvc3RyZWFtX3BhcnNlcl9idWZmZXIuY2MnLAotICAgICAgICAnYmFzZS9zdHJlYW1fcGFyc2VyX2J1ZmZlci5oJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICdiYXNlL3ZpZGVvX2RlY29kZXIuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX2RlY29kZXJfY29uZmlnLmNjJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZGVjb2Rlcl9jb25maWcuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX2ZyYW1lLmNjJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZnJhbWUuaCcsCi0gICAgICAgICdiYXNlL3ZpZGVvX3JlbmRlcmVyLmgnLAotICAgICAgICAnYmFzZS92aWRlb191dGlsLmNjJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fdXRpbC5oJywKLSAgICAgICAgJ2NyeXB0by9hZXNfZGVjcnlwdG9yLmNjJywKLSAgICAgICAgJ2NyeXB0by9hZXNfZGVjcnlwdG9yLmgnLAotICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb24uY2MnLAotICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb24uaCcsCi0gICAgICAgICdmZm1wZWcvZmlsZV9wcm90b2NvbC5jYycsCi0gICAgICAgICdmZm1wZWcvZmlsZV9wcm90b2NvbC5oJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fZmlsZV9yZWFkZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19maWxlX3JlYWRlci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fcmVuZGVyZXJfYWxnb3JpdGhtLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fcmVuZGVyZXJfYWxnb3JpdGhtLmgnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19yZW5kZXJlcl9pbXBsLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvYXVkaW9fcmVuZGVyZXJfaW1wbC5oJywKLSAgICAgICAgJ2ZpbHRlcnMvYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2JpdHN0cmVhbV9jb252ZXJ0ZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9jaHVua19kZW11eGVyLmgnLAotICAgICAgICAnZmlsdGVycy9jaHVua19kZW11eGVyX2NsaWVudC5oJywKLSAgICAgICAgJ2ZpbHRlcnMvZHVtbXlfZGVtdXhlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2R1bW15X2RlbXV4ZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19hdWRpb19kZWNvZGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2F1ZGlvX2RlY29kZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2RlbXV4ZXIuaCcsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19oMjY0X2JpdHN0cmVhbV9jb252ZXJ0ZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfZ2x1ZS5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19nbHVlLmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ192aWRlb19kZWNvZGVyLmgnLAotICAgICAgICAnZmlsdGVycy9maWxlX2RhdGFfc291cmNlLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmlsZV9kYXRhX3NvdXJjZS5oJywKLSAgICAgICAgJ2ZpbHRlcnMvZ3B1X3ZpZGVvX2RlY29kZXIuY2MnLAotICAgICAgICAnZmlsdGVycy9ncHVfdmlkZW9fZGVjb2Rlci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvaW5fbWVtb3J5X3VybF9wcm90b2NvbC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2luX21lbW9yeV91cmxfcHJvdG9jb2wuaCcsCi0gICAgICAgICdmaWx0ZXJzL3NvdXJjZV9idWZmZXJfc3RyZWFtLmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvc291cmNlX2J1ZmZlcl9zdHJlYW0uaCcsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX2ZyYW1lX2dlbmVyYXRvci5jYycsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX2ZyYW1lX2dlbmVyYXRvci5oJywKLSAgICAgICAgJ2ZpbHRlcnMvdmlkZW9fcmVuZGVyZXJfYmFzZS5jYycsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX3JlbmRlcmVyX2Jhc2UuaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL2Zha2VfdmlkZW9fY2FwdHVyZV9kZXZpY2UuY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9mYWtlX3ZpZGVvX2NhcHR1cmVfZGV2aWNlLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9saW51eC92aWRlb19jYXB0dXJlX2RldmljZV9saW51eC5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL2xpbnV4L3ZpZGVvX2NhcHR1cmVfZGV2aWNlX2xpbnV4LmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9tYWMvdmlkZW9fY2FwdHVyZV9kZXZpY2VfbWFjLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS9tYWMvdmlkZW9fY2FwdHVyZV9kZXZpY2VfbWFjLm1tJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvbWFjL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX3F0a2l0X21hYy5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvbWFjL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX3F0a2l0X21hYy5tbScsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmUuaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfZGV2aWNlLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV9kdW1teS5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX2R1bW15LmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX3Byb3h5LmNjJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9wcm94eS5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV90eXBlcy5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL2ZpbHRlcl9iYXNlX3dpbi5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9maWx0ZXJfYmFzZV93aW4uaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9waW5fYmFzZV93aW4uY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vcGluX2Jhc2Vfd2luLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vc2lua19maWx0ZXJfb2JzZXJ2ZXJfd2luLmgnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vc2lua19maWx0ZXJfd2luLmNjJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3NpbmtfZmlsdGVyX3dpbi5oJywKLSAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvd2luL3NpbmtfaW5wdXRfcGluX3dpbi5jYycsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi9zaW5rX2lucHV0X3Bpbl93aW4uaCcsCi0gICAgICAgICd2aWRlby9jYXB0dXJlL3dpbi92aWRlb19jYXB0dXJlX2RldmljZV93aW4uY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS93aW4vdmlkZW9fY2FwdHVyZV9kZXZpY2Vfd2luLmgnLAotICAgICAgICAndmlkZW8vcGljdHVyZS5jYycsCi0gICAgICAgICd2aWRlby9waWN0dXJlLmgnLAotICAgICAgICAndmlkZW8vdmlkZW9fZGVjb2RlX2FjY2VsZXJhdG9yLmNjJywKLSAgICAgICAgJ3ZpZGVvL3ZpZGVvX2RlY29kZV9hY2NlbGVyYXRvci5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9jb25zdGFudHMuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXIuY2MnLAotICAgICAgICAnd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgnLAotICAgICAgICAnd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzLmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5ncy5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9jb250ZW50X2VuY29kaW5nc19jbGllbnQuY2MnLAotICAgICAgICAnd2VibS93ZWJtX2NvbnRlbnRfZW5jb2RpbmdzX2NsaWVudC5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9pbmZvX3BhcnNlci5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1faW5mb19wYXJzZXIuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fcGFyc2VyLmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9wYXJzZXIuaCcsCi0gICAgICAgICd3ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgJ3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV90cmFja3NfcGFyc2VyLmgnLAotICAgICAgXSwKLSAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzogewotICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICcuLicsCi0gICAgICAgIF0sCi0gICAgICB9LAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICMgQW5kcm9pZCBkb2Vzbid0IHVzZSBmZm1wZWcsIHNvIG1ha2UgdGhlIGRlcGVuZGVuY3kgY29uZGl0aW9uYWwKLSAgICAgICAgIyBhbmQgZXhjbHVkZSB0aGUgc291cmNlcyB3aGljaCBkZXBlbmQgb24gZmZtcGVnLgotICAgICAgICBbJ09TICE9IFwiYW5kcm9pZFwiJywgewotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUyA9PSBcImFuZHJvaWRcIicsIHsKLSAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAnYmFzZS9tZWRpYV9wb3NpeC5jYycsCi0gICAgICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb24uY2MnLAotICAgICAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfY29tbW9uLmgnLAotICAgICAgICAgICAgJ2ZmbXBlZy9maWxlX3Byb3RvY29sLmNjJywKLSAgICAgICAgICAgICdmZm1wZWcvZmlsZV9wcm90b2NvbC5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2F1ZGlvX2ZpbGVfcmVhZGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2F1ZGlvX2ZpbGVfcmVhZGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9jaHVua19kZW11eGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvY2h1bmtfZGVtdXhlcl9jbGllbnQuaCcsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlci5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZW11eGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfaDI2NF9iaXRzdHJlYW1fY29udmVydGVyLmgnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWUuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWUuaCcsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlci5oJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2dwdV92aWRlb19kZWNvZGVyLmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2dwdV92aWRlb19kZWNvZGVyLmgnLAotICAgICAgICAgICAgJ3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlci5jYycsCi0gICAgICAgICAgICAnd2VibS93ZWJtX2NsdXN0ZXJfcGFyc2VyLmgnLAotICAgICAgICAgICAgJ3dlYm0vd2VibV9zdHJlYW1fcGFyc2VyLmNjJywKLSAgICAgICAgICAgICd3ZWJtL3dlYm1fc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgIyBUaGUgYmVsb3cgJ2FuZHJvaWQnIGNvbmRpdGlvbiB3ZXJlIGFkZGVkIHRlbXBvcmFyaWx5IGFuZCBzaG91bGQgYmUKLSAgICAgICAgIyByZW1vdmVkIGluIGRvd25zdHJlYW0sIGJlY2F1c2UgdGhlcmUgaXMgbm8gSmF2YSBlbnZpcm9ubWVudCBzZXR1cCBpbgotICAgICAgICAjIHVwc3RyZWFtIHlldC4KLSAgICAgICAgWydPUyA9PSBcImFuZHJvaWRcIicsIHsKLSAgICAgICAgICAnc291cmNlcyEnOlsKLSAgICAgICAgICAgICdhdWRpby9hbmRyb2lkL2F1ZGlvX3RyYWNrX291dHB1dF9hbmRyb2lkLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzpbCi0gICAgICAgICAgICAnYXVkaW8vYW5kcm9pZC9hdWRpb190cmFja19vdXRwdXRfc3R1Yl9hbmRyb2lkLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaW5rX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgJy1sT3BlblNMRVMnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09XCJsaW51eFwiIG9yIE9TPT1cImZyZWVic2RcIiBvciBPUz09XCJzb2xhcmlzXCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnLWxhc291bmQnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09XCJvcGVuYnNkXCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMvJzogWyBbJ2V4Y2x1ZGUnLCAnL2Fsc2FfJyBdLAotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJy9hdWRpb19tYW5hZ2VyX2xpbnV4JyBdIF0sCi0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICB9XSwKLSAgICAgICAgWydPUyE9XCJvcGVuYnNkXCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2F1ZGlvL29wZW5ic2QvYXVkaW9fbWFuYWdlcl9vcGVuYnNkLmNjJywKLSAgICAgICAgICAgICdhdWRpby9vcGVuYnNkL2F1ZGlvX21hbmFnZXJfb3BlbmJzZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUz09XCJsaW51eFwiJywgewotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgICAgWydzeXNyb290IT1cIlwiJywgewotICAgICAgICAgICAgICAgICdwa2ctY29uZmlnJzogJy4uL2J1aWxkL2xpbnV4L3BrZy1jb25maWctd3JhcHBlciBcIjwoc3lzcm9vdClcIiBcIjwodGFyZ2V0X2FyY2gpXCInLAotICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgJ3BrZy1jb25maWcnOiAncGtnLWNvbmZpZycKLSAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ3VzZV9jcmFzID09IDEnLCB7Ci0gICAgICAgICAgICAgICdjZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICAgJzwhQCg8KHBrZy1jb25maWcpIC0tY2ZsYWdzIGxpYmNyYXMpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8IUAoPChwa2ctY29uZmlnKSAtLWxpYnMgbGliY3JhcyknLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgICAgICdVU0VfQ1JBUycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9LCB7ICAjIGVsc2U6IHVzZV9jcmFzID09IDAKLSAgICAgICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgICAgICdhdWRpby9saW51eC9jcmFzX291dHB1dC5jYycsCi0gICAgICAgICAgICAgICAgJ2F1ZGlvL2xpbnV4L2NyYXNfb3V0cHV0LmgnLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnb3NfcG9zaXggPT0gMScsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndXNlX3B1bHNlYXVkaW8gPT0gMScsIHsKLSAgICAgICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1jZmxhZ3MgbGlicHVsc2UpJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKLSAgICAgICAgICAgICAgICAgICc8IUAocGtnLWNvbmZpZyAtLWxpYnMtb25seS1sIGxpYnB1bHNlKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1VTRV9QVUxTRUFVRElPJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH0sIHsgICMgZWxzZTogdXNlX3B1bHNlYXVkaW8gPT0gMAotICAgICAgICAgICAgICAnc291cmNlcyEnOiBbCi0gICAgICAgICAgICAgICAgJ2F1ZGlvL3B1bHNlL3B1bHNlX291dHB1dC5jYycsCi0gICAgICAgICAgICAgICAgJ2F1ZGlvL3B1bHNlL3B1bHNlX291dHB1dC5oJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ29zX3Bvc2l4ID09IDEgYW5kIE9TICE9IFwiYW5kcm9pZFwiJywgewotICAgICAgICAgICMgVmlkZW8gY2FwdHVyZSBpc24ndCBzdXBwb3J0ZWQgaW4gQW5kcm9pZCB5ZXQuCi0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9kZXZpY2VfZHVtbXkuY2MnLAotICAgICAgICAgICAgJ3ZpZGVvL2NhcHR1cmUvdmlkZW9fY2FwdHVyZV9kZXZpY2VfZHVtbXkuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1M9PVwibWFjXCInLCB7Ci0gICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnbGlicmFyaWVzJzogWwotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVW5pdC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVG9vbGJveC5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVBdWRpby5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVWaWRlby5mcmFtZXdvcmsnLAotICAgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1FUS2l0LmZyYW1ld29yaycsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TPT1cIndpblwiJywgewotICAgICAgICAgICdzb3VyY2VzISc6IFsKLSAgICAgICAgICAgICdhdWRpby9wdWxzZS9wdWxzZV9vdXRwdXQuY2MnLAotICAgICAgICAgICAgJ2F1ZGlvL3B1bHNlL3B1bHNlX291dHB1dC5oJywKLSAgICAgICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX2R1bW15LmNjJywKLSAgICAgICAgICAgICd2aWRlby9jYXB0dXJlL3ZpZGVvX2NhcHR1cmVfZGV2aWNlX2R1bW15LmgnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ3Byb3ByaWV0YXJ5X2NvZGVjcz09MSBvciBicmFuZGluZz09XCJDaHJvbWVcIicsIHsKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICdtcDQvYXZjLmNjJywKLSAgICAgICAgICAgICdtcDQvYXZjLmgnLAotICAgICAgICAgICAgJ21wNC9ib3hfZGVmaW5pdGlvbnMuY2MnLAotICAgICAgICAgICAgJ21wNC9ib3hfZGVmaW5pdGlvbnMuaCcsCi0gICAgICAgICAgICAnbXA0L2JveF9yZWFkZXIuY2MnLAotICAgICAgICAgICAgJ21wNC9ib3hfcmVhZGVyLmgnLAotICAgICAgICAgICAgJ21wNC9jZW5jLmNjJywKLSAgICAgICAgICAgICdtcDQvY2VuYy5oJywKLSAgICAgICAgICAgICdtcDQvbXA0X3N0cmVhbV9wYXJzZXIuY2MnLAotICAgICAgICAgICAgJ21wNC9tcDRfc3RyZWFtX3BhcnNlci5oJywKLSAgICAgICAgICAgICdtcDQvb2Zmc2V0X2J5dGVfcXVldWUuY2MnLAotICAgICAgICAgICAgJ21wNC9vZmZzZXRfYnl0ZV9xdWV1ZS5oJywKLSAgICAgICAgICAgICdtcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmNjJywKLSAgICAgICAgICAgICdtcDQvdHJhY2tfcnVuX2l0ZXJhdG9yLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd5dXZfY29udmVydCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAnLi4nLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ29yZGVyX3Byb2ZpbGluZyAhPSAwJywgewotICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucycgOiBbCi0gICAgICAgICAgICBbJ190b29sc2V0PT1cInRhcmdldFwiJywgewotICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsgJy1maW5zdHJ1bWVudC1mdW5jdGlvbnMnIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAndGFyZ2V0X2FyY2ggPT0gXCJpYTMyXCIgb3IgdGFyZ2V0X2FyY2ggPT0gXCJ4NjRcIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ3l1dl9jb252ZXJ0X3NpbWRfeDg2JywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAndGFyZ2V0X2FyY2ggPT0gXCJhcm1cIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ3l1dl9jb252ZXJ0X3NpbWRfYXJtJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2UveXV2X2NvbnZlcnQuY2MnLAotICAgICAgICAnYmFzZS95dXZfY29udmVydC5oJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneXV2X2NvbnZlcnRfc2ltZF94ODYnLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfYy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3NzZTIuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl9zc3NlMy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2X3Nzc2UzLmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX2MuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl94ODYuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9tbXguYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2JfbW14LmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF95dXZfdG9fcmdiX3NzZS5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL2ZpbHRlcl95dXYuaCcsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1dl9jLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X21teC5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1dl9zc2UyLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXguaW5jJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9zY2FsZV95dXZfdG9fcmdiX21teC5hc20nLAotICAgICAgICAnYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2JfbW14LmluYycsCi0gICAgICAgICdiYXNlL3NpbWQvc2NhbGVfeXV2X3RvX3JnYl9zc2UuYXNtJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC95dXZfdG9fcmdiX3RhYmxlLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC95dXZfdG9fcmdiX3RhYmxlLmgnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ29yZGVyX3Byb2ZpbGluZyAhPSAwJywgewotICAgICAgICAgICd0YXJnZXRfY29uZGl0aW9ucycgOiBbCi0gICAgICAgICAgICBbJ190b29sc2V0PT1cInRhcmdldFwiJywgewotICAgICAgICAgICAgICAnY2ZsYWdzISc6IFsgJy1maW5zdHJ1bWVudC1mdW5jdGlvbnMnIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAndGFyZ2V0X2FyY2ggPT0gXCJ4NjRcIicsIHsKLSAgICAgICAgICAjIFNvdXJjZSBmaWxlcyBvcHRpbWl6ZWQgZm9yIFg2NCBzeXN0ZW1zLgotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2Jhc2Uvc2ltZC9saW5lYXJfc2NhbGVfeXV2X3RvX3JnYl9tbXhfeDY0LmFzbScsCi0gICAgICAgICAgICAnYmFzZS9zaW1kL3NjYWxlX3l1dl90b19yZ2Jfc3NlMl94NjQuYXNtJywKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWyAnb3NfcG9zaXggPT0gMSBhbmQgT1MgIT0gXCJtYWNcIiBhbmQgT1MgIT0gXCJhbmRyb2lkXCInLCB7Ci0gICAgICAgICAgJ2NmbGFncyc6IFsKLSAgICAgICAgICAgICctbXNzZTInLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdPUyA9PSBcIm1hY1wiJywgewotICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6IHsKLSAgICAgICAgICAgICdEZWJ1Zyc6IHsKLSAgICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogewotICAgICAgICAgICAgICAgICMgZ2NjIG9uIHRoZSBtYWMgYnVpbGRzIGhvcnJpYmx5IHVub3B0aW1pemVkIHNzZSBjb2RlIGluIGRlYnVnCi0gICAgICAgICAgICAgICAgIyBtb2RlLiBTaW5jZSB0aGlzIGlzIHJhcmVseSBnb2luZyB0byBiZSBkZWJ1Z2dlZCwgcnVuIHdpdGggZnVsbAotICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9ucyBpbiBEZWJ1ZyBhcyB3ZWxsIGFzIFJlbGVhc2UuCi0gICAgICAgICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMycsICAjIC1PMwotICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICB9LAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdPUz09XCJ3aW5cIicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3lhc21fZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctRFdJTjMyJywKLSAgICAgICAgICAgICAgJy1ETVNWQycsCi0gICAgICAgICAgICAgICctRENIUk9NSVVNJywKLSAgICAgICAgICAgICAgJy1Jc2ltZCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgIH0sCi0gICAgICAgIH1dLAotICAgICAgICBbICdPUz09XCJtYWNcIicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3lhc21fZmxhZ3MnOiBbCi0gICAgICAgICAgICAgICctRFBSRUZJWCcsCi0gICAgICAgICAgICAgICctRE1BQ0hPJywKLSAgICAgICAgICAgICAgJy1EQ0hST01JVU0nLAotICAgICAgICAgICAgICAnLUlzaW1kJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsgJ29zX3Bvc2l4PT0xIGFuZCBPUyE9XCJtYWNcIicsIHsKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgIFsgJ3RhcmdldF9hcmNoPT1cImlhMzJcIicsIHsKLSAgICAgICAgICAgICAgICAneWFzbV9mbGFncyc6IFsKLSAgICAgICAgICAgICAgICAgICctRFg4Nl8zMicsCi0gICAgICAgICAgICAgICAgICAnLURFTEYnLAotICAgICAgICAgICAgICAgICAgJy1EQ0hST01JVU0nLAotICAgICAgICAgICAgICAgICAgJy1Jc2ltZCcsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICd5YXNtX2ZsYWdzJzogWwotICAgICAgICAgICAgICAgICAgJy1EQVJDSF9YODZfNjQnLAotICAgICAgICAgICAgICAgICAgJy1ERUxGJywKLSAgICAgICAgICAgICAgICAgICctRFBJQycsCi0gICAgICAgICAgICAgICAgICAnLURDSFJPTUlVTScsCi0gICAgICAgICAgICAgICAgICAnLUlzaW1kJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgJ3lhc21fb3V0cHV0X3BhdGgnOiAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbWVkaWEnLAotICAgICAgfSwKLSAgICAgICdtc3ZzXzIwMTBfZGlzYWJsZV91bGRpX3doZW5fcmVmZXJlbmNlZCc6IDEsCi0gICAgICAnaW5jbHVkZXMnOiBbCi0gICAgICAgICcuLi90aGlyZF9wYXJ0eS95YXNtL3lhc21fY29tcGlsZS5neXBpJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAneXV2X2NvbnZlcnRfc2ltZF9hcm0nLAotICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgJy4uJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3JnYl90b195dXZfYy5jYycsCi0gICAgICAgICdiYXNlL3NpbWQvY29udmVydF9yZ2JfdG9feXV2LmgnLAotICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfeXV2X3RvX3JnYl9jLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9jb252ZXJ0X3l1dl90b19yZ2IuaCcsCi0gICAgICAgICdiYXNlL3NpbWQvZmlsdGVyX3l1di5oJywKLSAgICAgICAgJ2Jhc2Uvc2ltZC9maWx0ZXJfeXV2X2MuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL3l1dl90b19yZ2JfdGFibGUuY2MnLAotICAgICAgICAnYmFzZS9zaW1kL3l1dl90b19yZ2JfdGFibGUuaCcsCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3VuaXR0ZXN0cycsCi0gICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICdtZWRpYScsCi0gICAgICAgICdtZWRpYV90ZXN0X3N1cHBvcnQnLAotICAgICAgICAneXV2X2NvbnZlcnQnLAotICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZV9pMThuJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICAgICAnLi4vdGVzdGluZy9nbW9jay5neXA6Z21vY2snLAotICAgICAgICAnLi4vdGVzdGluZy9ndGVzdC5neXA6Z3Rlc3QnLAotICAgICAgICAnLi4vdWkvdWkuZ3lwOnVpJywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvL2FzeW5jX3NvY2tldF9pb19oYW5kbGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X2NvbnRyb2xsZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9faW5wdXRfZGV2aWNlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3ZvbHVtZV91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF9vdXRwdXRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X2NvbnRyb2xsZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fb3V0cHV0X3Byb3h5X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL2F1ZGlvX3BhcmFtZXRlcnNfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vYXVkaW9fdXRpbF91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9jcm9zc19wcm9jZXNzX25vdGlmaWNhdGlvbl91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9saW51eC9hbHNhX291dHB1dF91bml0dGVzdC5jYycsCi0gICAgICAgICdhdWRpby9tYWMvYXVkaW9fbG93X2xhdGVuY3lfaW5wdXRfbWFjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL21hYy9hdWRpb19vdXRwdXRfbWFjX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL3NpbXBsZV9zb3VyY2VzX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2F1ZGlvL3dpbi9hdWRpb19sb3dfbGF0ZW5jeV9pbnB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX2xvd19sYXRlbmN5X291dHB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYXVkaW8vd2luL2F1ZGlvX291dHB1dF93aW5fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9hdWRpb19yZW5kZXJlcl9taXhlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2F1ZGlvX3JlbmRlcmVyX21peGVyX2lucHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvYnVmZmVyc191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2Nsb2NrX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvY29tcG9zaXRlX2ZpbHRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL2RhdGFfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZGVjb2Rlcl9idWZmZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9kamIyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvZmFrZV9hdWRpb19yZW5kZXJfY2FsbGJhY2suY2MnLAotICAgICAgICAnYmFzZS9mYWtlX2F1ZGlvX3JlbmRlcl9jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvZmlsdGVyX2NvbGxlY3Rpb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9oMjY0X2JpdHN0cmVhbV9jb252ZXJ0ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS9waXBlbGluZV91bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3Jhbmdlc191bml0dGVzdC5jYycsCi0gICAgICAgICdiYXNlL3J1bl9hbGxfdW5pdHRlc3RzLmNjJywKLSAgICAgICAgJ2Jhc2Uvc2Vla2FibGVfYnVmZmVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2Uvc3RhdGVfbWF0cml4X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UvdGVzdF9kYXRhX3V0aWwuY2MnLAotICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5oJywKLSAgICAgICAgJ2Jhc2UvdmlkZW9fZnJhbWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAnYmFzZS92aWRlb191dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2Jhc2UveXV2X2NvbnZlcnRfdW5pdHRlc3QuY2MnLAotICAgICAgICAnY3J5cHRvL2Flc19kZWNyeXB0b3JfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmZtcGVnL2ZmbXBlZ19jb21tb25fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19yZW5kZXJlcl9hbGdvcml0aG1fdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9hdWRpb19yZW5kZXJlcl9pbXBsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19kZWNvZGVyX3VuaXR0ZXN0LmgnLAotICAgICAgICAnZmlsdGVycy9mZm1wZWdfZGVtdXhlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ19nbHVlX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL2ZmbXBlZ192aWRlb19kZWNvZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ2ZpbHRlcnMvZmlsZV9kYXRhX3NvdXJjZV91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL3BpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3QuY2MnLAotICAgICAgICAnZmlsdGVycy9waXBlbGluZV9pbnRlZ3JhdGlvbl90ZXN0X2Jhc2UuY2MnLAotICAgICAgICAnZmlsdGVycy9zb3VyY2VfYnVmZmVyX3N0cmVhbV91bml0dGVzdC5jYycsCi0gICAgICAgICdmaWx0ZXJzL3ZpZGVvX3JlbmRlcmVyX2Jhc2VfdW5pdHRlc3QuY2MnLAotICAgICAgICAndmlkZW8vY2FwdHVyZS92aWRlb19jYXB0dXJlX2RldmljZV91bml0dGVzdC5jYycsCi0gICAgICAgICd3ZWJtL2NsdXN0ZXJfYnVpbGRlci5jYycsCi0gICAgICAgICd3ZWJtL2NsdXN0ZXJfYnVpbGRlci5oJywKLSAgICAgICAgJ3dlYm0vd2VibV9jbHVzdGVyX3BhcnNlcl91bml0dGVzdC5jYycsCi0gICAgICAgICd3ZWJtL3dlYm1fY29udGVudF9lbmNvZGluZ3NfY2xpZW50X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3dlYm0vd2VibV9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgXSwKLSAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICBbJ29zX3Bvc2l4PT0xIGFuZCBPUyE9XCJtYWNcIicsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsnbGludXhfdXNlX3RjbWFsbG9jPT0xJywgewotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICcuLi9iYXNlL2FsbG9jYXRvci9hbGxvY2F0b3IuZ3lwOmFsbG9jYXRvcicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9XSwKLSAgICAgICAgWydPUyAhPSBcImFuZHJvaWRcIicsIHsKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2ZmbXBlZy9mZm1wZWcuZ3lwOmZmbXBlZycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsnT1MgPT0gXCJhbmRyb2lkXCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMhJzogWwotICAgICAgICAgICAgJ2F1ZGlvL2F1ZGlvX2lucHV0X3ZvbHVtZV91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5jYycsCi0gICAgICAgICAgICAnYmFzZS90ZXN0X2RhdGFfdXRpbC5oJywKLSAgICAgICAgICAgICdmZm1wZWcvZmZtcGVnX2NvbW1vbl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfYXVkaW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9iaXRzdHJlYW1fY29udmVydGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL2NodW5rX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2RlbXV4ZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2dsdWVfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ2ZpbHRlcnMvZmZtcGVnX2gyNjRfYml0c3RyZWFtX2NvbnZlcnRlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9mZm1wZWdfdmlkZW9fZGVjb2Rlcl91bml0dGVzdC5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9waXBlbGluZV9pbnRlZ3JhdGlvbl90ZXN0LmNjJywKLSAgICAgICAgICAgICdmaWx0ZXJzL3BpcGVsaW5lX2ludGVncmF0aW9uX3Rlc3RfYmFzZS5jYycsCi0gICAgICAgICAgICAnbXA0L21wNF9zdHJlYW1fcGFyc2VyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICd3ZWJtL3dlYm1fY2x1c3Rlcl9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbJ09TID09IFwibGludXhcIicsIHsKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndXNlX2NyYXMgPT0gMScsIHsKLSAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAgICAgJ2F1ZGlvL2xpbnV4L2NyYXNfb3V0cHV0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2RlZmluZXMnOiBbCi0gICAgICAgICAgICAgICAgJ1VTRV9DUkFTJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH1dLAotICAgICAgICBbICd0YXJnZXRfYXJjaD09XCJpYTMyXCIgb3IgdGFyZ2V0X2FyY2g9PVwieDY0XCInLCB7Ci0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnYmFzZS9zaW1kL2NvbnZlcnRfcmdiX3RvX3l1dl91bml0dGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICAgIFsncHJvcHJpZXRhcnlfY29kZWNzPT0xIG9yIGJyYW5kaW5nPT1cIkNocm9tZVwiJywgewotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ21wNC9hdmNfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ21wNC9ib3hfcmVhZGVyX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgICAgICdtcDQvbXA0X3N0cmVhbV9wYXJzZXJfdW5pdHRlc3QuY2MnLAotICAgICAgICAgICAgJ21wNC9vZmZzZXRfYnl0ZV9xdWV1ZV91bml0dGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX3Rlc3Rfc3VwcG9ydCcsCi0gICAgICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbWVkaWEnLAotICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJy4uL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgIF0sCi0gICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgJ2F1ZGlvL3Rlc3RfYXVkaW9faW5wdXRfY29udHJvbGxlcl9mYWN0b3J5LmNjJywKLSAgICAgICAgJ2F1ZGlvL3Rlc3RfYXVkaW9faW5wdXRfY29udHJvbGxlcl9mYWN0b3J5LmgnLAotICAgICAgICAnYmFzZS9tb2NrX2NhbGxiYWNrLmNjJywKLSAgICAgICAgJ2Jhc2UvbW9ja19jYWxsYmFjay5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19kYXRhX3NvdXJjZV9ob3N0LmNjJywKLSAgICAgICAgJ2Jhc2UvbW9ja19kYXRhX3NvdXJjZV9ob3N0LmgnLAotICAgICAgICAnYmFzZS9tb2NrX2RlbXV4ZXJfaG9zdC5jYycsCi0gICAgICAgICdiYXNlL21vY2tfZGVtdXhlcl9ob3N0LmgnLAotICAgICAgICAnYmFzZS9tb2NrX2ZpbHRlcl9ob3N0LmNjJywKLSAgICAgICAgJ2Jhc2UvbW9ja19maWx0ZXJfaG9zdC5oJywKLSAgICAgICAgJ2Jhc2UvbW9ja19maWx0ZXJzLmNjJywKLSAgICAgICAgJ2Jhc2UvbW9ja19maWx0ZXJzLmgnLAotICAgICAgXSwKLSAgICB9LAotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdzY2FsZXJfYmVuY2gnLAotICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnbWVkaWEnLAotICAgICAgICAneXV2X2NvbnZlcnQnLAotICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgJy4uL3NraWEvc2tpYS5neXA6c2tpYScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0b29scy9zY2FsZXJfYmVuY2gvc2NhbGVyX2JlbmNoLmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAncXRfZmFzdHN0YXJ0JywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0b29scy9xdF9mYXN0c3RhcnQvcXRfZmFzdHN0YXJ0LmMnCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3NlZWtfdGVzdGVyJywKLSAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ21lZGlhJywKLSAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICd0b29scy9zZWVrX3Rlc3Rlci9zZWVrX3Rlc3Rlci5jYycsCi0gICAgICBdLAotICAgIH0sCi0gIF0sCi0gICdjb25kaXRpb25zJzogWwotICAgIFsnT1M9PVwid2luXCInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF5ZXJfd3RsJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICd5dXZfY29udmVydCcsCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi9iYXNlL3RoaXJkX3BhcnR5L2R5bmFtaWNfYW5ub3RhdGlvbnMvZHluYW1pY19hbm5vdGF0aW9ucy5neXA6ZHluYW1pY19hbm5vdGF0aW9ucycsCi0gICAgICAgICAgICAnLi4vdWkvdWkuZ3lwOnVpJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvd3RsL2luY2x1ZGUnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC9saXN0LmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvbWFpbmZybS5oJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL21vdmllLmNjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL21vdmllLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvcGxheWVyX3d0bC5jYycsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3d0bC9wbGF5ZXJfd3RsLnJjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL3Byb3BzLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvc2Vlay5oJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfd3RsL3Jlc291cmNlLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl93dGwvdmlldy5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdtc3ZzX3NldHRpbmdzJzogewotICAgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKLSAgICAgICAgICAgICAgJ1N1YlN5c3RlbSc6ICcyJywgICAgICAgICAjIFNldCAvU1VCU1lTVEVNOldJTkRPV1MKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICdfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUz0xJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ09TID09IFwid2luXCIgb3IgdG9vbGtpdF91c2VzX2d0ayA9PSAxJywgewotICAgICAgJ3RhcmdldHMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnc2hhZGVyX2JlbmNoJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICd5dXZfY29udmVydCcsCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICAgICcuLi91aS9nbC9nbC5neXA6Z2wnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL3NoYWRlcl9iZW5jaC5jYycsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2NwdV9jb2xvcl9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvY3B1X2NvbG9yX3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2dwdV9jb2xvcl9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvZ3B1X2NvbG9yX3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL2dwdV9wYWludGVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvZ3B1X3BhaW50ZXIuaCcsCi0gICAgICAgICAgICAndG9vbHMvc2hhZGVyX2JlbmNoL3BhaW50ZXIuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC9wYWludGVyLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC93aW5kb3cuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3NoYWRlcl9iZW5jaC93aW5kb3cuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndG9vbGtpdF91c2VzX2d0ayA9PSAxJywgewotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICcuLi9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmd0aycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvd2luZG93X2xpbnV4LmNjJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09XCJ3aW5cIicsIHsKLSAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDpsaWJFR0wnLAotICAgICAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOmxpYkdMRVN2MicsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgICAgICd0b29scy9zaGFkZXJfYmVuY2gvd2luZG93X3dpbi5jYycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XSwKLSAgICBbJ09TID09IFwibGludXhcIiBhbmQgdGFyZ2V0X2FyY2ggIT0gXCJhcm1cIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3RpbGVfcmVuZGVyX2JlbmNoJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdWkvZ2wvZ2wuZ3lwOmdsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAnLWxHTCcsCi0gICAgICAgICAgICAnLWxkbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd0b29scy90aWxlX3JlbmRlcl9iZW5jaC90aWxlX3JlbmRlcl9iZW5jaC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgfV0sCi0gICAgWydvc19wb3NpeCA9PSAxIGFuZCBPUyAhPSBcIm1hY1wiIGFuZCBPUyAhPSBcImFuZHJvaWRcIicsIHsKLSAgICAgICd0YXJnZXRzJzogWwotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ3BsYXllcl94MTEnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnbWVkaWEnLAotICAgICAgICAgICAgJ3l1dl9jb252ZXJ0JywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3VpL2dsL2dsLmd5cDpnbCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKLSAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCi0gICAgICAgICAgICAgICctbGRsJywKLSAgICAgICAgICAgICAgJy1sWDExJywKLSAgICAgICAgICAgICAgJy1sWHJlbmRlcicsCi0gICAgICAgICAgICAgICctbFhleHQnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEvZGF0YV9zb3VyY2VfbG9nZ2VyLmNjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfeDExL2RhdGFfc291cmNlX2xvZ2dlci5oJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfeDExL2dsX3ZpZGVvX3JlbmRlcmVyLmNjJywKLSAgICAgICAgICAgICd0b29scy9wbGF5ZXJfeDExL2dsX3ZpZGVvX3JlbmRlcmVyLmgnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEvcGxheWVyX3gxMS5jYycsCi0gICAgICAgICAgICAndG9vbHMvcGxheWVyX3gxMS94MTFfdmlkZW9fcmVuZGVyZXIuY2MnLAotICAgICAgICAgICAgJ3Rvb2xzL3BsYXllcl94MTEveDExX3ZpZGVvX3JlbmRlcmVyLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgIH1dLAotICAgIFsnT1MgPT0gXCJhbmRyb2lkXCInLCB7Ci0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdwbGF5ZXJfYW5kcm9pZCcsCi0gICAgICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2Jhc2UvYW5kcm9pZC9tZWRpYV9wbGF5ZXJfYnJpZGdlLmNjJywKLSAgICAgICAgICAgICdiYXNlL2FuZHJvaWQvbWVkaWFfcGxheWVyX2JyaWRnZS5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvbWVkaWEnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZS1qbmktaGVhZGVycycsCi0gICAgICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAgICAgJy4uL2Jhc2UvYW5kcm9pZC9qbmlfZ2VuZXJhdG9yL2puaV9nZW5lcmF0b3IucHknLAotICAgICAgICAgICAgICAgICdiYXNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL2Nocm9taXVtL21lZGlhL01lZGlhUGxheWVyTGlzdGVuZXIuamF2YScsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9tZWRpYS9qbmkvbWVkaWFfcGxheWVyX2xpc3RlbmVyX2puaS5oJywKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICAgICAnPChERVBUSCkvYmFzZS9hbmRyb2lkL2puaV9nZW5lcmF0b3Ivam5pX2dlbmVyYXRvci5weScsCi0gICAgICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICAgICAnPEAoX2lucHV0cyknLAotICAgICAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ21lZGlhX2phdmEnLAotICAgICAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2VfamF2YScgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAgICAgJ3BhY2thZ2VfbmFtZSc6ICdtZWRpYScsCi0gICAgICAgICAgICAnamF2YV9pbl9kaXInOiAnYmFzZS9hbmRyb2lkL2phdmEnLAotICAgICAgICAgIH0sCi0gICAgICAgICAgJ2luY2x1ZGVzJzogWyAnLi4vYnVpbGQvamF2YS5neXBpJyBdLAotICAgICAgICB9LAotCi0gICAgICBdLAotICAgIH0sIHsgIyBPUyAhPSBcImFuZHJvaWRcIicKLSAgICAgICMgQW5kcm9pZCBkb2VzIG5vdCB1c2UgZmZtcGVnLCBzbyBkaXNhYmxlIHRoZSB0YXJnZXRzIHdoaWNoIHJlcXVpcmUgaXQuCi0gICAgICAndGFyZ2V0cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdmZm1wZWdfdW5pdHRlc3RzJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICdtZWRpYV90ZXN0X3N1cHBvcnQnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vYmFzZS9iYXNlLmd5cDpiYXNlX2kxOG4nLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X3BlcmYnLAotICAgICAgICAgICAgJy4uL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgICAgICcuLi90aGlyZF9wYXJ0eS9mZm1wZWcvZmZtcGVnLmd5cDpmZm1wZWcnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICAgICAnZmZtcGVnL2ZmbXBlZ191bml0dGVzdC5jYycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAgICAgICAgIFsndG9vbGtpdF91c2VzX2d0ayA9PSAxJywgewotICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICMgTmVlZGVkIGZvciB0aGUgZm9sbG93aW5nICNpbmNsdWRlIGNoYWluOgotICAgICAgICAgICAgICAgICMgICBiYXNlL3J1bl9hbGxfdW5pdHRlc3RzLmNjCi0gICAgICAgICAgICAgICAgIyAgIC4uL2Jhc2UvdGVzdF9zdWl0ZS5oCi0gICAgICAgICAgICAgICAgIyAgIGd0ay9ndGsuaAotICAgICAgICAgICAgICAgICcuLi9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmd0aycsCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwotICAgICAgICAgICAgICAgIFsnbGludXhfdXNlX3RjbWFsbG9jPT0xJywgewotICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJy4uL2Jhc2UvYWxsb2NhdG9yL2FsbG9jYXRvci5neXA6YWxsb2NhdG9yJywKLSAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9XSwKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ2ZmbXBlZ19yZWdyZXNzaW9uX3Rlc3RzJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICdtZWRpYV90ZXN0X3N1cHBvcnQnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAotICAgICAgICAgICAgJy4uL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgICAgICcuLi90ZXN0aW5nL2d0ZXN0Lmd5cDpndGVzdCcsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ2Jhc2UvdGVzdF9kYXRhX3V0aWwuY2MnLAotICAgICAgICAgICAgJ2Jhc2UvcnVuX2FsbF91bml0dGVzdHMuY2MnLAotICAgICAgICAgICAgJ2ZmbXBlZy9mZm1wZWdfcmVncmVzc2lvbl90ZXN0cy5jYycsCi0gICAgICAgICAgICAnZmlsdGVycy9waXBlbGluZV9pbnRlZ3JhdGlvbl90ZXN0X2Jhc2UuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBbJ29zX3Bvc2l4PT0xIGFuZCBPUyE9XCJtYWNcIicsIHsKLSAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICAgICAgWydsaW51eF91c2VfdGNtYWxsb2M9PTEnLCB7Ci0gICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgICAgICAgICAnLi4vYmFzZS9hbGxvY2F0b3IvYWxsb2NhdG9yLmd5cDphbGxvY2F0b3InLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9XSwKLSAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnZmZtcGVnX3Rlc3RzJywKLSAgICAgICAgICAndHlwZSc6ICdleGVjdXRhYmxlJywKLSAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAgICAgJ21lZGlhJywKLSAgICAgICAgICAgICcuLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAgICAgJy4uL3RoaXJkX3BhcnR5L2ZmbXBlZy9mZm1wZWcuZ3lwOmZmbXBlZycsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnc291cmNlcyc6IFsKLSAgICAgICAgICAgICd0ZXN0L2ZmbXBlZ190ZXN0cy9mZm1wZWdfdGVzdHMuY2MnLAotICAgICAgICAgIF0sCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnbWVkaWFfYmVuY2gnLAotICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAotICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICAgICAnbWVkaWEnLAotICAgICAgICAgICAgJy4uL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICAgICAnLi4vdGhpcmRfcGFydHkvZmZtcGVnL2ZmbXBlZy5neXA6ZmZtcGVnJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAgICAgJ3Rvb2xzL21lZGlhX2JlbmNoL21lZGlhX2JlbmNoLmNjJywKLSAgICAgICAgICBdLAotICAgICAgICB9LAotICAgICAgXSwKLSAgICB9XQotICBdLAotfQotIiAwIDY0IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDY0IDEzNyAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAxMzcgMTY2IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDE2NiAxNzEgbmlsIDE3MSAxNzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzIgMTgxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE4MSAxODIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxODIgMTkwIG5pbCAxOTAgMTkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkxIDIwNCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMDQgMjA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA1IDIxNCBuaWwgMjE0IDI2OSAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAyNjkgMjczIG5pbCAyNzMgMjc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjc0IDI4OSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyODkgMjkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkwIDI5OSBuaWwgMjk5IDM2NSAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAzNjUgMzY5IG5pbCAzNjkgMzcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzcwIDM3OSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzNzkgMzgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzgwIDM5MiBuaWwgMzkyIDM5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM5MyA0MDAgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgNDAwIDQwMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQwMSA0MTcgbmlsIDQxNyA0MTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MTggNDI5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDQyOSA0MzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MzAgNDMyIG5pbCA0MzIgNDMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDMzIDQzOCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSA0MzggNDM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDM5IDQ0NyBuaWwgNDQ3IDQ0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ0OCA0NTIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgNDUyIDQ1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ1MyA0NTUgbmlsIDQ1NSA0NTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NTggNDY3IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDQ2NyA0NjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NjkgNDc3IG5pbCA0NzcgNDc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDc4IDQ5MCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSA0OTAgNDkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDkxIDUwMyBuaWwgNTAzIDUwNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUwNCA1MTUgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgNTE1IDUxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUxNiA1MjYgbmlsIDUyNiA1MjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MjcgNTQ4IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDU0OCA1NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NDkgNTU5IG5pbCA1NTkgNTYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTYwIDY0MyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSA2NDMgNjQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjQ0IDY1NCBuaWwgNjU0IDY1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY1NSA2OTYgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgNjk2IDY5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY5NyA3MDcgbmlsIDcwNyA3MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MDggNzM1IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDczNSA3MzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MzYgNzQ2IG5pbCA3NDYgNzQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzQ3IDc4NCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSA3ODQgNzg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzg1IDc5NSBuaWwgNzk1IDc5NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc5NiA4MTEgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgODExIDgxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgxMiA4MjkgbmlsIDgyOSA4MzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MzAgODM3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDgzNyA4MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MzggODUwIG5pbCA4NTAgODUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODUxIDg3MSAoZmFjZSBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpIDg3MSA4NzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NzIgODg5IG5pbCA4ODkgODkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODkwIDkwMiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSA5MDIgOTAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTAzIDkxNSBuaWwgOTE1IDkxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkxNiA5MTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDkxOCA5MTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5MTkgOTM2IG5pbCA5MzYgOTM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTM3IDk0NCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSA5NDQgOTQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTQ1IDk1NyBuaWwgOTU3IDk1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk1OCA5OTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDk5NiA5OTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5OTcgMTAwNyBuaWwgMTAwNyAxMDA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTAwOCAxMDQ1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMDQ1IDEwNDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQ2IDEwNTYgbmlsIDEwNTYgMTA1NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEwNTcgMTEwMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTEwMCAxMTAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTEwMSAxMTExIG5pbCAxMTExIDExMTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTEyIDExNTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDExNTQgMTE1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExNTUgMTE2NSBuaWwgMTE2NSAxMTY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTE2NiAxMTk3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMTk3IDExOTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTk4IDEyMDggbmlsIDEyMDggMTIwOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEyMDkgMTIzOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIzOSAxMjQwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTI0MCAxMjUwIG5pbCAxMjUwIDEyNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjUxIDEyODMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEyODMgMTI4NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEyODQgMTI5NCBuaWwgMTI5NCAxMjk1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTI5NSAxMzI2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMzI2IDEzMjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzI3IDEzMzcgbmlsIDEzMzcgMTMzOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzMzggMTM2OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTM2OSAxMzcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM3MCAxMzgwIG5pbCAxMzgwIDEzODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzgxIDE0MTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE0MTkgMTQyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0MjAgMTQzMCBuaWwgMTQzMCAxNDMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQzMSAxNDY3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNDY3IDE0NjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDY4IDE0NzggbmlsIDE0NzggMTQ3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NzkgMTUwNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTUwNyAxNTA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUwOCAxNTE4IG5pbCAxNTE4IDE1MTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTE5IDE1NDYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE1NDYgMTU0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDcgMTU1NyBuaWwgMTU1NyAxNTU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU1OCAxNTc0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNTc0IDE1NzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTc1IDE1ODUgbmlsIDE1ODUgMTU4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1ODYgMTYxNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTYxNyAxNjE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYxOCAxNjI4IG5pbCAxNjI4IDE2MjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjI5IDE2NTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE2NTkgMTY2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NjAgMTY3MCBuaWwgMTY3MCAxNjcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTY3MSAxNzAzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNzAzIDE3MDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzA0IDE3MTQgbmlsIDE3MTQgMTcxNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3MTUgMTc0NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTc0NiAxNzQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc0NyAxNzU3IG5pbCAxNzU3IDE3NTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzU4IDE3ODQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE3ODQgMTc4NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3ODUgMTc5NSBuaWwgMTc5NSAxNzk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc5NiAxODIxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxODIxIDE4MjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxODIyIDE4MzIgbmlsIDE4MzIgMTgzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4MzMgMTg1NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTg1NSAxODU2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1NiAxODY2IG5pbCAxODY2IDE4NjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxODY3IDE4ODggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4ODggMTg4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4ODkgMTg5OSBuaWwgMTg5OSAxOTAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwMCAxOTI3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxOTI3IDE5MjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTI4IDE5MzggbmlsIDE5MzggMTkzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MzkgMTk2NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTk2NSAxOTY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk2NiAxOTc2IG5pbCAxOTc2IDE5NzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTc3IDIwMDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIwMDkgMjAxMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMTAgMjAyMCBuaWwgMjAyMCAyMDIxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjAyMSAyMDUyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyMDUyIDIwNTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDUzIDIwNjMgbmlsIDIwNjMgMjA2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNjQgMjA5NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjA5NiAyMDk3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA5NyAyMTA3IG5pbCAyMTA3IDIxMDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTA4IDIxMzkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxMzkgMjE0MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNDAgMjE1MCBuaWwgMjE1MCAyMTUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE1MSAyMTg4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyMTg4IDIxODkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTg5IDIxOTkgbmlsIDIxOTkgMjIwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMDAgMjIzNiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjIzNiAyMjM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIzNyAyMjQ3IG5pbCAyMjQ3IDIyNDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjQ4IDIyNzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNzUgMjI3NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyNzYgMjI4NiBuaWwgMjI4NiAyMjg3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI4NyAyMzEzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyMzEzIDIzMTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMzE0IDIzMjQgbmlsIDIzMjQgMjMyNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIzMjUgMjM1MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjM1MiAyMzUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM1MyAyMzYzIG5pbCAyMzYzIDIzNjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMzY0IDIzOTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzOTAgMjM5MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIzOTEgMjQwMSBuaWwgMjQwMSAyNDAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwMiAyNDI3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNDI3IDI0MjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNDI4IDI0MzggbmlsIDI0MzggMjQzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI0MzkgMjQ2MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjQ2MyAyNDY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ2NCAyNDc0IG5pbCAyNDc0IDI0NzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNDc1IDI0OTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0OTQgMjQ5NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI0OTUgMjUwNSBuaWwgMjUwNSAyNTA2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUwNiAyNTI0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTI0IDI1MjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTI1IDI1MzUgbmlsIDI1MzUgMjUzNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1MzYgMjU3MSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjU3MSAyNTcyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjU3MiAyNTgyIG5pbCAyNTgyIDI1ODMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTgzIDI2MTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI2MTcgMjYxOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MTggMjYyOCBuaWwgMjYyOCAyNjI5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjYyOSAyNjY4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjY4IDI2NjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjY5IDI2NzkgbmlsIDI2NzkgMjY4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2ODAgMjcyMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjcyMSAyNzIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjcyMiAyNzMyIG5pbCAyNzMyIDI3MzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzMzIDI3NjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI3NjUgMjc2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjYgMjc3NiBuaWwgMjc3NiAyNzc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjc3NyAyODA4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyODA4IDI4MDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODA5IDI4MTkgbmlsIDI4MTkgMjgyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MjAgMjg1MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjg1MyAyODU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg1NCAyODY0IG5pbCAyODY0IDI4NjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODY1IDI4OTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI4OTcgMjg5OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4OTggMjkwOCBuaWwgMjkwOCAyOTA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkwOSAyOTQzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyOTQzIDI5NDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyOTQ0IDI5NTQgbmlsIDI5NTQgMjk1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5NTUgMjk4OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjk4OCAyOTg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk4OSAyOTk5IG5pbCAyOTk5IDMwMDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDAwIDMwMjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMwMjUgMzAyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMjYgMzAzNiBuaWwgMzAzNiAzMDM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAzNyAzMDYxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDYxIDMwNjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDYyIDMwNzIgbmlsIDMwNzIgMzA3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNzMgMzA5OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzA5OSAzMTAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzEwMCAzMTEwIG5pbCAzMTEwIDMxMTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTExIDMxMzYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMxMzYgMzEzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxMzcgMzE0NyBuaWwgMzE0NyAzMTQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE0OCAzMTcyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMTcyIDMxNzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTczIDMxODMgbmlsIDMxODMgMzE4NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxODQgMzIwNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzIwNyAzMjA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIwOCAzMjE4IG5pbCAzMjE4IDMyMTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjE5IDMyNDYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMyNDYgMzI0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyNDcgMzI1NyBuaWwgMzI1NyAzMjU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzI1OCAzMjg0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMjg0IDMyODUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjg1IDMyOTUgbmlsIDMyOTUgMzI5NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyOTYgMzMyMiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzMyMiAzMzIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzMyMyAzMzMzIG5pbCAzMzMzIDMzMzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzM0IDMzNTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMzNTkgMzM2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNjAgMzM3MCBuaWwgMzM3MCAzMzcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM3MSAzNDA5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNDA5IDM0MTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDEwIDM0MjAgbmlsIDM0MjAgMzQyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MjEgMzQ1OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzQ1OCAzNDU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ1OSAzNDY5IG5pbCAzNDY5IDM0NzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDcwIDM0OTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDM0OTggMzQ5OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0OTkgMzUwOSBuaWwgMzUwOSAzNTEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzUxMCAzNTM3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNTM3IDM1MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTM4IDM1NDggbmlsIDM1NDggMzU0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1NDkgMzU4OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzU4OSAzNTkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU5MCAzNjAwIG5pbCAzNjAwIDM2MDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjAxIDM2NDAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDM2NDAgMzY0MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NDEgMzY1MSBuaWwgMzY1MSAzNjUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY1MiAzNjkzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNjkzIDM2OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjk0IDM3MDQgbmlsIDM3MDQgMzcwNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM3MDUgMzc0NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzc0NSAzNzQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzc0NiAzNzU2IG5pbCAzNzU2IDM3NTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNzU3IDM3ODcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDM3ODcgMzc4OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM3ODggMzc5OCBuaWwgMzc5OCAzNzk5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzc5OSAzODI4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzODI4IDM4MjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzODI5IDM4MzkgbmlsIDM4MzkgMzg0MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM4NDAgMzg2OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzg2OSAzODcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzg3MCAzODgwIG5pbCAzODgwIDM4ODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzODgxIDM5MDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDM5MDkgMzkxMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM5MTAgMzkyMCBuaWwgMzkyMCAzOTIxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzkyMSAzOTQ1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzOTQ1IDM5NDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzOTQ2IDM5NTYgbmlsIDM5NTYgMzk1NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM5NTcgMzk4MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzk4MCAzOTgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzk4MSAzOTkxIG5pbCAzOTkxIDM5OTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzOTkyIDQwMTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQwMTkgNDAyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQwMjAgNDAzMCBuaWwgNDAzMCA0MDMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDAzMSA0MDU3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0MDU3IDQwNTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MDU4IDQwNjggbmlsIDQwNjggNDA2OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQwNjkgNDA5MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDA5MCA0MDkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDA5MSA0MTAxIG5pbCA0MTAxIDQxMDIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MTAyIDQxMjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQxMjIgNDEyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQxMjMgNDEzMyBuaWwgNDEzMyA0MTM0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDEzNCA0MTU3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0MTU3IDQxNTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MTU4IDQxNjggbmlsIDQxNjggNDE2OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQxNjkgNDE5MSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDE5MSA0MTkyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDE5MiA0MjAyIG5pbCA0MjAyIDQyMDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MjAzIDQyNDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQyNDMgNDI0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQyNDQgNDI1NCBuaWwgNDI1NCA0MjU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDI1NSA0Mjk0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0Mjk0IDQyOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0Mjk1IDQzMDUgbmlsIDQzMDUgNDMwNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQzMDYgNDM0NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDM0NyA0MzQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDM0OCA0MzU4IG5pbCA0MzU4IDQzNTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0MzU5IDQzOTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQzOTkgNDQwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ0MDAgNDQxMCBuaWwgNDQxMCA0NDExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDQxMSA0NDQxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0NDQxIDQ0NDIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NDQyIDQ0NTIgbmlsIDQ0NTIgNDQ1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ0NTMgNDQ4MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDQ4MiA0NDgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDQ4MyA0NDkzIG5pbCA0NDkzIDQ0OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NDk0IDQ1MjMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQ1MjMgNDUyNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ1MjQgNDUzNCBuaWwgNDUzNCA0NTM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDUzNSA0NTYzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0NTYzIDQ1NjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NTY0IDQ1NzQgbmlsIDQ1NzQgNDU3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ1NzUgNDYxMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDYxMCA0NjExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDYxMSA0NjIxIG5pbCA0NjIxIDQ2MjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NjIyIDQ2NTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQ2NTYgNDY1NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ2NTcgNDY2NyBuaWwgNDY2NyA0NjY4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDY2OCA0Njk3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0Njk3IDQ2OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0Njk4IDQ3MDggbmlsIDQ3MDggNDcwOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ3MDkgNDczNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDczNyA0NzM4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDczOCA0NzQ4IG5pbCA0NzQ4IDQ3NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0NzQ5IDQ3ODAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQ3ODAgNDc4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ3ODEgNDc5MSBuaWwgNDc5MSA0NzkyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDc5MiA0ODIyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0ODIyIDQ4MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0ODIzIDQ4MzMgbmlsIDQ4MzMgNDgzNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ4MzQgNDg2OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDg2OSA0ODcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDg3MCA0ODgwIG5pbCA0ODgwIDQ4ODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0ODgxIDQ5MTUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDQ5MTUgNDkxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ5MTYgNDkyNiBuaWwgNDkyNiA0OTI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDkyNyA0OTQ4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA0OTQ4IDQ5NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0OTQ5IDQ5NTkgbmlsIDQ5NTkgNDk2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDQ5NjAgNDk4MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNDk4MCA0OTgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNDk4MSA0OTkxIG5pbCA0OTkxIDQ5OTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA0OTkyIDUwMjAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDUwMjAgNTAyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUwMjEgNTAzMSBuaWwgNTAzMSA1MDMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTAzMiA1MDU5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1MDU5IDUwNjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MDYwIDUwNzAgbmlsIDUwNzAgNTA3MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUwNzEgNTA5MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTA5MiA1MDkzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTA5MyA1MTAzIG5pbCA1MTAzIDUxMDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MTA0IDUxMzIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDUxMzIgNTEzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUxMzMgNTE0MyBuaWwgNTE0MyA1MTQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTE0NCA1MTcxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1MTcxIDUxNzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MTcyIDUxODIgbmlsIDUxODIgNTE4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUxODMgNTIxNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTIxNyA1MjE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTIxOCA1MjI4IG5pbCA1MjI4IDUyMjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MjI5IDUyNjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDUyNjIgNTI2MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUyNjMgNTI3MyBuaWwgNTI3MyA1Mjc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTI3NCA1Mjk3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1Mjk3IDUyOTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1Mjk4IDUzMDggbmlsIDUzMDggNTMwOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUzMDkgNTMyNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTMyNCA1MzI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTMyNSA1MzM1IG5pbCA1MzM1IDUzMzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MzM2IDUzNTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDUzNTAgNTM1MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUzNTEgNTM2MSBuaWwgNTM2MSA1MzYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTM2MiA1MzgwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1MzgwIDUzODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1MzgxIDUzOTEgbmlsIDUzOTEgNTM5MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDUzOTIgNTQwOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTQwOSA1NDEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTQxMCA1NDIwIG5pbCA1NDIwIDU0MjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NDIxIDU0NDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU0NDMgNTQ0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU0NDQgNTQ1NCBuaWwgNTQ1NCA1NDU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTQ1NSA1NDc2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1NDc2IDU0NzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NDc3IDU0ODcgbmlsIDU0ODcgNTQ4OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU0ODggNTUwMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTUwMSA1NTAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTUwMiA1NTEyIG5pbCA1NTEyIDU1MTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NTEzIDU1MjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU1MjUgNTUyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU1MjYgNTUzNiBuaWwgNTUzNiA1NTM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTUzNyA1NTYxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1NTYxIDU1NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NTYyIDU1NzIgbmlsIDU1NzIgNTU3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU1NzMgNTU5NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTU5NiA1NTk3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTU5NyA1NjA3IG5pbCA1NjA3IDU2MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NjA4IDU2MjcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU2MjcgNTYyOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU2MjggNTYzOCBuaWwgNTYzOCA1NjM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTYzOSA1NjU3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1NjU3IDU2NTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NjU4IDU2NjggbmlsIDU2NjggNTY2OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU2NjkgNTY4OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTY4OCA1Njg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTY4OSA1Njk5IG5pbCA1Njk5IDU3MDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NzAwIDU3MTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU3MTggNTcxOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU3MTkgNTcyOSBuaWwgNTcyOSA1NzMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTczMCA1NzUyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1NzUyIDU3NTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1NzUzIDU3NjMgbmlsIDU3NjMgNTc2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU3NjQgNTc4NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTc4NSA1Nzg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTc4NiA1Nzk2IG5pbCA1Nzk2IDU3OTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1Nzk3IDU4MTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU4MTkgNTgyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU4MjAgNTgzMCBuaWwgNTgzMCA1ODMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTgzMSA1ODUyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1ODUyIDU4NTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1ODUzIDU4NjMgbmlsIDU4NjMgNTg2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU4NjQgNTg4MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTg4MCA1ODgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTg4MSA1ODkxIG5pbCA1ODkxIDU4OTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1ODkyIDU5MTUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDU5MTUgNTkxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU5MTYgNTkyNiBuaWwgNTkyNiA1OTI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTkyNyA1OTQyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA1OTQyIDU5NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1OTQzIDU5NTMgbmlsIDU5NTMgNTk1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDU5NTQgNTk2OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNTk2OCA1OTY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNTk2OSA1OTc5IG5pbCA1OTc5IDU5ODAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA1OTgwIDYwMDIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDYwMDIgNjAwMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYwMDMgNjAxMyBuaWwgNjAxMyA2MDE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjAxNCA2MDM1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2MDM1IDYwMzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MDM2IDYwNDYgbmlsIDYwNDYgNjA0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYwNDcgNjA1OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjA1OSA2MDYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjA2MCA2MDcwIG5pbCA2MDcwIDYwNzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MDcxIDYwODIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDYwODIgNjA4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYwODMgNjA5MyBuaWwgNjA5MyA2MDk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjA5NCA2MTE5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2MTE5IDYxMjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MTIwIDYxMzAgbmlsIDYxMzAgNjEzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYxMzEgNjE1NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjE1NSA2MTU2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjE1NiA2MTY2IG5pbCA2MTY2IDYxNjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MTY3IDYxODUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDYxODUgNjE4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYxODYgNjE5NiBuaWwgNjE5NiA2MTk3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjE5NyA2MjEyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2MjEyIDYyMTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MjEzIDYyMjMgbmlsIDYyMjMgNjIyNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYyMjQgNjIzOCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjIzOCA2MjM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjIzOSA2MjQ5IG5pbCA2MjQ5IDYyNTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MjUwIDYyODIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDYyODIgNjI4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYyODMgNjI5MyBuaWwgNjI5MyA2Mjk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjI5NCA2MzI1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2MzI1IDYzMjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MzI2IDYzMzYgbmlsIDYzMzYgNjMzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYzMzcgNjM0OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjM0OSA2MzUwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjM1MCA2MzYwIG5pbCA2MzYwIDYzNjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2MzYxIDYzODIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDYzODIgNjM4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDYzODMgNjM5MyBuaWwgNjM5MyA2Mzk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjM5NCA2NDEzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2NDEzIDY0MTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NDE0IDY0MjQgbmlsIDY0MjQgNjQyNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY0MjUgNjQ0MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjQ0MiA2NDQzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjQ0MyA2NDUzIG5pbCA2NDUzIDY0NTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NDU0IDY0NzAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY0NzAgNjQ3MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY0NzEgNjQ4MSBuaWwgNjQ4MSA2NDgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjQ4MiA2NTA0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2NTA0IDY1MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NTA1IDY1MTUgbmlsIDY1MTUgNjUxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY1MTYgNjUzNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjUzNSA2NTM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjUzNiA2NTQ2IG5pbCA2NTQ2IDY1NDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NTQ3IDY1NjkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY1NjkgNjU3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY1NzAgNjU4MCBuaWwgNjU4MCA2NTgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjU4MSA2NjAyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2NjAyIDY2MDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NjAzIDY2MTMgbmlsIDY2MTMgNjYxNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY2MTQgNjYzMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjYzMSA2NjMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjYzMiA2NjQyIG5pbCA2NjQyIDY2NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NjQzIDY2NzEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY2NzEgNjY3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY2NzIgNjY4MiBuaWwgNjY4MiA2NjgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjY4MyA2NzEwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2NzEwIDY3MTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NzExIDY3MjEgbmlsIDY3MjEgNjcyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY3MjIgNjczOCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjczOCA2NzM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjczOSA2NzQ5IG5pbCA2NzQ5IDY3NTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2NzUwIDY3NjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY3NjUgNjc2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY3NjYgNjc3NiBuaWwgNjc3NiA2Nzc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjc3NyA2ODAwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2ODAwIDY4MDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2ODAxIDY4MTEgbmlsIDY4MTEgNjgxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY4MTIgNjgzNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjgzNCA2ODM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjgzNSA2ODQ1IG5pbCA2ODQ1IDY4NDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2ODQ2IDY4NjAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY4NjAgNjg2MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY4NjEgNjg3MSBuaWwgNjg3MSA2ODcyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjg3MiA2ODg1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2ODg1IDY4ODYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2ODg2IDY4OTYgbmlsIDY4OTYgNjg5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY4OTcgNjkyMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNjkyMCA2OTIxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjkyMSA2OTMxIG5pbCA2OTMxIDY5MzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2OTMyIDY5NTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDY5NTQgNjk1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY5NTUgNjk2NSBuaWwgNjk2NSA2OTY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNjk2NiA2OTg2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA2OTg2IDY5ODcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA2OTg3IDY5OTcgbmlsIDY5OTcgNjk5OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDY5OTggNzAxNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzAxNyA3MDE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzAxOCA3MDI4IG5pbCA3MDI4IDcwMjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MDI5IDcwNTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDcwNTAgNzA1MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDcwNTEgNzA2MSBuaWwgNzA2MSA3MDYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzA2MiA3MDgyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3MDgyIDcwODMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MDgzIDcwOTMgbmlsIDcwOTMgNzA5NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDcwOTQgNzEyMiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzEyMiA3MTIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzEyMyA3MTMzIG5pbCA3MTMzIDcxMzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MTM0IDcxNjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDcxNjEgNzE2MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDcxNjIgNzE3MiBuaWwgNzE3MiA3MTczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzE3MyA3MTk0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3MTk0IDcxOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MTk1IDcyMDUgbmlsIDcyMDUgNzIwNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDcyMDYgNzIyNiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzIyNiA3MjI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzIyNyA3MjM3IG5pbCA3MjM3IDcyMzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MjM4IDcyNjYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDcyNjYgNzI2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDcyNjcgNzI3NyBuaWwgNzI3NyA3Mjc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzI3OCA3MzA1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3MzA1IDczMDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MzA2IDczMTYgbmlsIDczMTYgNzMxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDczMTcgNzMzNiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzMzNiA3MzM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzMzNyA3MzQ3IG5pbCA3MzQ3IDczNDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3MzQ4IDczNjYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDczNjYgNzM2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDczNjcgNzM3NyBuaWwgNzM3NyA3Mzc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzM3OCA3Mzk5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3Mzk5IDc0MDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NDAwIDc0MTAgbmlsIDc0MTAgNzQxMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc0MTEgNzQyOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzQyOSA3NDMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzQzMCA3NDQwIG5pbCA3NDQwIDc0NDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NDQxIDc0NTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDc0NTggNzQ1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc0NTkgNzQ2OSBuaWwgNzQ2OSA3NDcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzQ3MCA3NDkzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3NDkzIDc0OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NDk0IDc1MDQgbmlsIDc1MDQgNzUwNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc1MDUgNzUyNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzUyNyA3NTI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzUyOCA3NTM4IG5pbCA3NTM4IDc1MzkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NTM5IDc1NjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDc1NjIgNzU2MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc1NjMgNzU3MyBuaWwgNzU3MyA3NTc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzU3NCA3NTk2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3NTk2IDc1OTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NTk3IDc2MDcgbmlsIDc2MDcgNzYwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc2MDggNzYzMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzYzMSA3NjMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzYzMiA3NjQyIG5pbCA3NjQyIDc2NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NjQzIDc2NjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDc2NjUgNzY2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc2NjYgNzY3NiBuaWwgNzY3NiA3Njc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzY3NyA3NzA1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3NzA1IDc3MDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NzA2IDc3MTYgbmlsIDc3MTYgNzcxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc3MTcgNzc0NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzc0NCA3NzQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzc0NSA3NzU1IG5pbCA3NzU1IDc3NTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3NzU2IDc3OTEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDc3OTEgNzc5MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc3OTIgNzgwMiBuaWwgNzgwMiA3ODAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzgwMyA3ODM3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3ODM3IDc4MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3ODM4IDc4NDggbmlsIDc4NDggNzg0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc4NDkgNzg3OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgNzg3OSA3ODgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzg4MCA3ODkwIG5pbCA3ODkwIDc4OTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3ODkxIDc5MjAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDc5MjAgNzkyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc5MjEgNzkzMSBuaWwgNzkzMSA3OTMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgNzkzMiA3OTYyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA3OTYyIDc5NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA3OTYzIDc5NzMgbmlsIDc5NzMgNzk3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDc5NzQgODAwMyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODAwMyA4MDA0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODAwNCA4MDE0IG5pbCA4MDE0IDgwMTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MDE1IDgwMzkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDgwMzkgODA0MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgwNDAgODA1MCBuaWwgODA1MCA4MDUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODA1MSA4MDc0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4MDc0IDgwNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MDc1IDgwODUgbmlsIDgwODUgODA4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgwODYgODExNiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODExNiA4MTE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODExNyA4MTI3IG5pbCA4MTI3IDgxMjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MTI4IDgxNTIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDgxNTIgODE1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgxNTMgODE2MyBuaWwgODE2MyA4MTY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODE2NCA4MTg3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4MTg3IDgxODggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MTg4IDgxOTggbmlsIDgxOTggODE5OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgxOTkgODIzMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODIzMCA4MjMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODIzMSA4MjQxIG5pbCA4MjQxIDgyNDIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MjQyIDgyNzIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDgyNzIgODI3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgyNzMgODI4MyBuaWwgODI4MyA4Mjg0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODI4NCA4MzA5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4MzA5IDgzMTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MzEwIDgzMjAgbmlsIDgzMjAgODMyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDgzMjEgODM0NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODM0NSA4MzQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODM0NiA4MzU2IG5pbCA4MzU2IDgzNTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4MzU3IDgzOTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDgzOTkgODQwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg0MDAgODQxMCBuaWwgODQxMCA4NDExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODQxMSA4NDUyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4NDUyIDg0NTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NDUzIDg0NjMgbmlsIDg0NjMgODQ2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg0NjQgODQ4NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODQ4NiA4NDg3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODQ4NyA4NDk3IG5pbCA4NDk3IDg0OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NDk4IDg1MTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDg1MTkgODUyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg1MjAgODUzMCBuaWwgODUzMCA4NTMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODUzMSA4NTYyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4NTYyIDg1NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NTYzIDg1NzMgbmlsIDg1NzMgODU3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg1NzQgODYwNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODYwNCA4NjA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODYwNSA4NjE1IG5pbCA4NjE1IDg2MTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NjE2IDg2NDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDg2NDMgODY0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg2NDQgODY1NCBuaWwgODY1NCA4NjU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODY1NSA4NjgxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4NjgxIDg2ODIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NjgyIDg2OTIgbmlsIDg2OTIgODY5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg2OTMgODcyMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODcyMSA4NzIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODcyMiA4NzMyIG5pbCA4NzMyIDg3MzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4NzMzIDg3NjAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDg3NjAgODc2MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg3NjEgODc3MSBuaWwgODc3MSA4NzcyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODc3MiA4ODA1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4ODA1IDg4MDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4ODA2IDg4MTYgbmlsIDg4MTYgODgxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg4MTcgODg0OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODg0OSA4ODUwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODg1MCA4ODYwIG5pbCA4ODYwIDg4NjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4ODYxIDg4OTIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDg4OTIgODg5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg4OTMgODkwMyBuaWwgODkwMyA4OTA0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODkwNCA4OTM0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA4OTM0IDg5MzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4OTM1IDg5NDUgbmlsIDg5NDUgODk0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDg5NDYgODk3OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgODk3OCA4OTc5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgODk3OSA4OTg5IG5pbCA4OTg5IDg5OTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA4OTkwIDkwMjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDkwMjEgOTAyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkwMjIgOTAzMiBuaWwgOTAzMiA5MDMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTAzMyA5MDYzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5MDYzIDkwNjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5MDY0IDkwNzQgbmlsIDkwNzQgOTA3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkwNzUgOTEwNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTEwNCA5MTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTEwNSA5MTE1IG5pbCA5MTE1IDkxMTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5MTE2IDkxNTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDkxNTggOTE1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkxNTkgOTE2OSBuaWwgOTE2OSA5MTcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTE3MCA5MjExIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5MjExIDkyMTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5MjEyIDkyMjIgbmlsIDkyMjIgOTIyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkyMjMgOTI3MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTI3MiA5MjczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTI3MyA5MjgzIG5pbCA5MjgzIDkyODQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5Mjg0IDkzMzIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDkzMzIgOTMzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDkzMzMgOTM0MyBuaWwgOTM0MyA5MzQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTM0NCA5Mzg4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5Mzg4IDkzODkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5Mzg5IDkzOTkgbmlsIDkzOTkgOTQwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk0MDAgOTQ0NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTQ0NSA5NDQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTQ0NiA5NDU2IG5pbCA5NDU2IDk0NTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5NDU3IDk1MDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDk1MDcgOTUwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk1MDggOTUxOCBuaWwgOTUxOCA5NTE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTUxOSA5NTcwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5NTcwIDk1NzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5NTcxIDk1ODEgbmlsIDk1ODEgOTU4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk1ODIgOTYxMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTYxMSA5NjEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTYxMiA5NjIyIG5pbCA5NjIyIDk2MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5NjIzIDk2NTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDk2NTkgOTY2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk2NjAgOTY3MCBuaWwgOTY3MCA5NjcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTY3MSA5NzE0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5NzE0IDk3MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5NzE1IDk3MjUgbmlsIDk3MjUgOTcyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk3MjYgOTc2OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTc2OCA5NzY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTc2OSA5Nzc5IG5pbCA5Nzc5IDk3ODAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5NzgwIDk4MTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDk4MTYgOTgxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk4MTcgOTgyNyBuaWwgOTgyNyA5ODI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTgyOCA5ODYzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSA5ODYzIDk4NjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5ODY0IDk4NzQgbmlsIDk4NzQgOTg3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk4NzUgOTkxMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgOTkxMCA5OTExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTkxMSA5OTIxIG5pbCA5OTIxIDk5MjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSA5OTIyIDk5NTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDk5NTggOTk1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDk5NTkgOTk2OSBuaWwgOTk2OSA5OTcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgOTk3MCAxMDAwNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAwMDUgMTAwMDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDAwNiAxMDAxNiBuaWwgMTAwMTYgMTAwMTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDAxNyAxMDA1MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAwNTAgMTAwNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDA1MSAxMDA2MSBuaWwgMTAwNjEgMTAwNjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDA2MiAxMDA5NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAwOTQgMTAwOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDA5NSAxMDEwNSBuaWwgMTAxMDUgMTAxMDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDEwNiAxMDE1MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAxNTAgMTAxNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDE1MSAxMDE2MSBuaWwgMTAxNjEgMTAxNjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDE2MiAxMDE5OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAxOTggMTAxOTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDE5OSAxMDIwOSBuaWwgMTAyMDkgMTAyMTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDIxMCAxMDI0NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAyNDUgMTAyNDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDI0NiAxMDI1NiBuaWwgMTAyNTYgMTAyNTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDI1NyAxMDI5NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAyOTYgMTAyOTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDI5NyAxMDMwNyBuaWwgMTAzMDcgMTAzMDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDMwOCAxMDM0NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTAzNDYgMTAzNDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDM0NyAxMDM1NyBuaWwgMTAzNTcgMTAzNTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDM1OCAxMDQwMyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA0MDMgMTA0MDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQwNCAxMDQxNCBuaWwgMTA0MTQgMTA0MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQxNSAxMDQ1OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA0NTkgMTA0NjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQ2MCAxMDQ3MCBuaWwgMTA0NzAgMTA0NzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQ3MSAxMDQ4NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA0ODcgMTA0ODggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQ4OCAxMDQ5OCBuaWwgMTA0OTggMTA0OTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDQ5OSAxMDUxNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA1MTQgMTA1MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDUxNSAxMDUyNSBuaWwgMTA1MjUgMTA1MjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDUyNiAxMDU1OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA1NTkgMTA1NjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDU2MCAxMDU3MCBuaWwgMTA1NzAgMTA1NzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDU3MSAxMDYwMyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA2MDMgMTA2MDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDYwNCAxMDYxNCBuaWwgMTA2MTQgMTA2MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDYxNSAxMDYzNiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA2MzYgMTA2MzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDYzNyAxMDY0NyBuaWwgMTA2NDcgMTA2NDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDY0OCAxMDY3NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA2NzUgMTA2NzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDY3NiAxMDY4NiBuaWwgMTA2ODYgMTA2ODcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDY4NyAxMDcxMyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA3MTMgMTA3MTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDcxNCAxMDcyNCBuaWwgMTA3MjQgMTA3MjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDcyNSAxMDc1NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA3NTUgMTA3NTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDc1NiAxMDc2NiBuaWwgMTA3NjYgMTA3NjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDc2NyAxMDc5NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA3OTYgMTA3OTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDc5NyAxMDgwNyBuaWwgMTA4MDcgMTA4MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDgwOCAxMDg0NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA4NDUgMTA4NDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDg0NiAxMDg1NiBuaWwgMTA4NTYgMTA4NTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDg1NyAxMDg5MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA4OTMgMTA4OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDg5NCAxMDkwNCBuaWwgMTA5MDQgMTA5MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDkwNSAxMDkyOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA5MjkgMTA5MzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDkzMCAxMDk0MCBuaWwgMTA5NDAgMTA5NDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDk0MSAxMDk2NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA5NjQgMTA5NjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDk2NSAxMDk3NSBuaWwgMTA5NzUgMTA5NzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDk3NiAxMDk5NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTA5OTUgMTA5OTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMDk5NiAxMTAwNiBuaWwgMTEwMDYgMTEwMDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTAwNyAxMTAyNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTEwMjUgMTEwMjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTAyNiAxMTAzNiBuaWwgMTEwMzYgMTEwMzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTAzNyAxMTA2MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTEwNjMgMTEwNjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTA2NCAxMTA3NCBuaWwgMTEwNzQgMTEwNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTA3NSAxMTEwMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTExMDAgMTExMDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTEwMSAxMTExMSBuaWwgMTExMTEgMTExMTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTExMiAxMTEzOCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTExMzggMTExMzkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTEzOSAxMTE0OSBuaWwgMTExNDkgMTExNTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTE1MCAxMTE3NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTExNzUgMTExNzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTE3NiAxMTE5MyBuaWwgMTExOTMgMTExOTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTE5NCAxMTIxOSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxMTIxOSAxMTIyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExMjIwIDExMjMyIG5pbCAxMTIzMiAxMTIzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExMjMzIDExMjQ1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDExMjQ1IDExMjQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTEyNDYgMTEyNjAgbmlsIDExMjYwIDExMjYxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTEyNjEgMTEyNjMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDExMjYzIDExMjY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTEyNjQgMTEyOTIgbmlsIDExMjkyIDExMjkzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTEyOTMgMTEzMDMgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTEzMDMgMTEzMDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTMwNCAxMTMxNiBuaWwgMTEzMTYgMTEzODEgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkgMTEzODEgMTEzODkgbmlsIDExMzg5IDExNDM5IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDExNDM5IDExNDQ4IG5pbCAxMTQ0OCAxMTQ0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExNDQ5IDExNDY0IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDExNDY0IDExNDY1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTE0NjUgMTE0NzkgbmlsIDExNDc5IDExNDgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTE0ODAgMTE0OTIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTE0OTIgMTE0OTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTQ5MyAxMTUwOSBuaWwgMTE1MDkgMTE1MTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTUxMCAxMTU0OSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAxMTU0OSAxMTU1MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExNTUwIDExNTg2IG5pbCAxMTU4NiAxMTU4NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDExNTg3IDExNjAyIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDExNjAyIDExNjAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTE2MDMgMTE2MTcgbmlsIDExNjE3IDExNjE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTE2MTggMTE2MjYgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTE2MjYgMTE2MjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTYyNyAxMTY0MyBuaWwgMTE2NDMgMTE2NDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTY0NCAxMTY2MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE2NjMgMTE2NjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTY2NCAxMTY3OCBuaWwgMTE2NzggMTE2NzkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTY3OSAxMTcwMiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE3MDIgMTE3MDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTcwMyAxMTcxNyBuaWwgMTE3MTcgMTE3MTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTcxOCAxMTc0MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE3NDAgMTE3NDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTc0MSAxMTc1NSBuaWwgMTE3NTUgMTE3NTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTc1NiAxMTc3OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE3NzkgMTE3ODAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTc4MCAxMTc5NCBuaWwgMTE3OTQgMTE3OTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTc5NSAxMTgxNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE4MTcgMTE4MTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTgxOCAxMTgzMiBuaWwgMTE4MzIgMTE4MzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTgzMyAxMTg2MSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE4NjEgMTE4NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTg2MiAxMTg3NiBuaWwgMTE4NzYgMTE4NzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTg3NyAxMTkwNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE5MDQgMTE5MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTkwNSAxMTkxOSBuaWwgMTE5MTkgMTE5MjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTkyMCAxMTk1MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE5NTAgMTE5NTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTk1MSAxMTk2NSBuaWwgMTE5NjUgMTE5NjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTk2NiAxMTk5NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTE5OTUgMTE5OTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMTk5NiAxMjAxMCBuaWwgMTIwMTAgMTIwMTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjAxMSAxMjAzNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIwMzUgMTIwMzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjAzNiAxMjA1MCBuaWwgMTIwNTAgMTIwNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjA1MSAxMjA3NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIwNzQgMTIwNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjA3NSAxMjA4OSBuaWwgMTIwODkgMTIwOTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjA5MCAxMjEyMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIxMjAgMTIxMjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjEyMSAxMjEzNSBuaWwgMTIxMzUgMTIxMzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjEzNiAxMjE2NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIxNjcgMTIxNjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjE2OCAxMjE4MiBuaWwgMTIxODIgMTIxODMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjE4MyAxMjIxMyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIyMTMgMTIyMTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjIxNCAxMjIyOCBuaWwgMTIyMjggMTIyMjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjIyOSAxMjI1NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIyNTQgMTIyNTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjI1NSAxMjI2OSBuaWwgMTIyNjkgMTIyNzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjI3MCAxMjI5NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIyOTQgMTIyOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjI5NSAxMjMwOSBuaWwgMTIzMDkgMTIzMTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjMxMCAxMjM1MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTIzNTIgMTIzNTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjM1MyAxMjM2NyBuaWwgMTIzNjcgMTIzNjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjM2OCAxMjQwOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI0MDkgMTI0MTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjQxMCAxMjQyNCBuaWwgMTI0MjQgMTI0MjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjQyNSAxMjQ0NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI0NDcgMTI0NDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjQ0OCAxMjQ2MiBuaWwgMTI0NjIgMTI0NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjQ2MyAxMjQ4NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI0ODQgMTI0ODUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjQ4NSAxMjQ5OSBuaWwgMTI0OTkgMTI1MDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjUwMCAxMjUzMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI1MzEgMTI1MzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjUzMiAxMjU0NiBuaWwgMTI1NDYgMTI1NDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjU0NyAxMjU3NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI1NzcgMTI1NzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjU3OCAxMjU5MiBuaWwgMTI1OTIgMTI1OTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjU5MyAxMjYyMSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI2MjEgMTI2MjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjYyMiAxMjYzNiBuaWwgMTI2MzYgMTI2MzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjYzNyAxMjY2NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI2NjQgMTI2NjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjY2NSAxMjY3OSBuaWwgMTI2NzkgMTI2ODAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjY4MCAxMjcwNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI3MDcgMTI3MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjcwOCAxMjcyMiBuaWwgMTI3MjIgMTI3MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjcyMyAxMjc0OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI3NDkgMTI3NTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjc1MCAxMjc2NCBuaWwgMTI3NjQgMTI3NjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjc2NSAxMjc5MSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI3OTEgMTI3OTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjc5MiAxMjgwNiBuaWwgMTI4MDYgMTI4MDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjgwNyAxMjgzMiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTI4MzIgMTI4MzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMjgzMyAxMjg2OCBuaWwgMTI4NjggMTI5MzcgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkgMTI5MzcgMTI5NDUgbmlsIDEyOTQ1IDEzMDE2IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDEzMDE2IDEzMDI0IG5pbCAxMzAyNCAxMzA0MCAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAxMzA0MCAxMzA0OSBuaWwgMTMwNDkgMTMwNTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzA1MCAxMzA2NSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxMzA2NSAxMzA2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzMDY2IDEzMDgwIG5pbCAxMzA4MCAxMzA4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzMDgxIDEzMDg5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDEzMDg5IDEzMDkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMwOTAgMTMxMDUgbmlsIDEzMTA1IDEzMTA2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMxMDYgMTMxNDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEzMTQ5IDEzMTUwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMxNTAgMTMxNzUgbmlsIDEzMTc1IDEzMTc2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMxNzYgMTMxODMgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTMxODMgMTMxODQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzE4NCAxMzE5OSBuaWwgMTMxOTkgMTMyMDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzIwMCAxMzI0OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTMyNDggMTMyNDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzI0OSAxMzI3NCBuaWwgMTMyNzQgMTMyNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzI3NSAxMzI4OCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxMzI4OCAxMzI4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzMjg5IDEzMzA1IG5pbCAxMzMwNSAxMzMwNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzMzA2IDEzMzE1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDEzMzE1IDEzMzE2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMzMTYgMTMzMzQgbmlsIDEzMzM0IDEzMzM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMzMzUgMTMzNDUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEzMzQ1IDEzMzQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMzNDYgMTMzOTcgbmlsIDEzMzk3IDEzMzk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTMzOTggMTM0NDMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTM0NDMgMTM0NDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzQ0NCAxMzQ1OCBuaWwgMTM0NTggMTM0NTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzQ1OSAxMzQ3MiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxMzQ3MiAxMzQ3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNDczIDEzNDg5IG5pbCAxMzQ4OSAxMzQ5MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNDkwIDEzNDk5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDEzNDk5IDEzNTAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM1MDAgMTM1MTggbmlsIDEzNTE4IDEzNTE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM1MTkgMTM1MjcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEzNTI3IDEzNTI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM1MjggMTM1NzkgbmlsIDEzNTc5IDEzNTgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM1ODAgMTM1OTMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTM1OTMgMTM1OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzU5NCAxMzYwOCBuaWwgMTM2MDggMTM2MDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzYwOSAxMzYxNyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxMzYxNyAxMzYxOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjE4IDEzNjIzIG5pbCAxMzYyMyAxMzYyNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjI0IDEzNjMxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMzYzMSAxMzYzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjMyIDEzNjM0IG5pbCAxMzYzNCAxMzYzNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjM1IDEzNjQxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMzY0MSAxMzY0MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjQyIDEzNjcxIG5pbCAxMzY3MSAxMzY3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjcyIDEzNjc5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMzY3OSAxMzY4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjgwIDEzNjgyIG5pbCAxMzY4MiAxMzY4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNjgzIDEzNzAzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxMzcwMyAxMzcwNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNzA0IDEzNzIwIG5pbCAxMzcyMCAxMzcyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzNzIxIDEzNzM0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDEzNzM0IDEzNzM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM3MzUgMTM3NTEgbmlsIDEzNzUxIDEzNzUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM3NTIgMTM3NjEgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTM3NjEgMTM3NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzc2MiAxMzgxNSBuaWwgMTM4MTUgMTM4MTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxMzgxNiAxMzgyOSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxMzgyOSAxMzgzMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzODMwIDEzODQ0IG5pbCAxMzg0NCAxMzg0NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDEzODQ1IDEzODUzIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDEzODUzIDEzODU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM4NTQgMTM4NzAgbmlsIDEzODcwIDEzODcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM4NzEgMTM5MDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEzOTA5IDEzOTEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM5MTAgMTM5MjQgbmlsIDEzOTI0IDEzOTI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM5MjUgMTM5NjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDEzOTYyIDEzOTYzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTM5NjMgMTM5OTkgbmlsIDEzOTk5IDE0MDAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQwMDAgMTQwMTEgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTQwMTEgMTQwMTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDAxMiAxNDAyNiBuaWwgMTQwMjYgMTQwMjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDAyNyAxNDAzNiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNDAzNiAxNDAzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0MDM3IDE0MDUzIG5pbCAxNDA1MyAxNDA1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0MDU0IDE0MDY0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE0MDY0IDE0MDY1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQwNjUgMTQwODQgbmlsIDE0MDg0IDE0MDg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQwODUgMTQwOTYgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTQwOTYgMTQwOTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDA5NyAxNDExNyBuaWwgMTQxMTcgMTQxMjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDEyOSAxNDEzMSBuaWwgMTQxMzEgMTQxNjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDE2OSAxNDE3NiAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxNDE3NiAxNDE4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0MTgyIDE0MTkzIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE0MTkzIDE0MTk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQxOTYgMTQyMzMgbmlsIDE0MjMzIDE0MjQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQyNDUgMTQyNDcgbmlsIDE0MjQ3IDE0MjU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQyNTkgMTQzMTYgbmlsIDE0MzE2IDE0MzE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQzMTcgMTQzMjcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTQzMjcgMTQzMjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDMyOCAxNDM0NSBuaWwgMTQzNDUgMTQzNDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDM0NiAxNDM1OSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxNDM1OSAxNDM2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0MzYwIDE0Mzc4IG5pbCAxNDM3OCAxNDM3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0Mzc5IDE0Mzg1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE0Mzg1IDE0Mzg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQzODYgMTQ0MDYgbmlsIDE0NDA2IDE0NDExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ0MTEgMTQ0MTMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTQ0MTMgMTQ0MjMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTQ0MjMgMTQ0NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDQ0MyAxNDQ3NiBuaWwgMTQ0NzYgMTQ0NzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDQ3NyAxNDQ5MCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNDQ5MCAxNDQ5MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NDkxIDE0NTExIG5pbCAxNDUxMSAxNDUxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NTEyIDE0NTIxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE0NTIxIDE0NTIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ1MjIgMTQ1NDQgbmlsIDE0NTQ0IDE0NTQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ1NDUgMTQ1NDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE0NTQ5IDE0NTUxIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE0NTUxIDE0NTYxIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE0NTYxIDE0NTc4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNDU3OCAxNDU3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NTc5IDE0NjMxIG5pbCAxNDYzMSAxNDYzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NjMyIDE0NjM5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE0NjM5IDE0NjQwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ2NDAgMTQ2NjAgbmlsIDE0NjYwIDE0NjYxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ2NjEgMTQ2NjkgKGZhY2UgZm9udC1sb2NrLXByZXByb2Nlc3Nvci1mYWNlKSAxNDY2OSAxNDY3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NjcwIDE0NzA3IG5pbCAxNDcwNyAxNDcyOSAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAxNDcyOSAxNDc0MyBuaWwgMTQ3NDMgMTQ3NDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDc0NCAxNDc1MiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNDc1MiAxNDc1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0NzUzIDE0NzczIG5pbCAxNDc3MyAxNDc3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0Nzc0IDE0ODAwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNDgwMCAxNDgwMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0ODAxIDE0ODE5IG5pbCAxNDgxOSAxNDgyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0ODIwIDE0ODQ1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNDg0NSAxNDg0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0ODQ2IDE0OTE1IG5pbCAxNDkxNSAxNDkxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0OTE2IDE0OTI5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE0OTI5IDE0OTMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ5MzAgMTQ5NDQgbmlsIDE0OTQ0IDE0OTQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTQ5NDUgMTQ5NTUgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTQ5NTUgMTQ5NTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDk1NiAxNDk3MyBuaWwgMTQ5NzMgMTQ5NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNDk3NCAxNDk5MyAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxNDk5MyAxNDk5NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE0OTk0IDE1MDEyIG5pbCAxNTAxMiAxNTAxMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MDEzIDE1MDE5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE1MDE5IDE1MDIwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUwMjAgMTUwNDAgbmlsIDE1MDQwIDE1MDc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUwNzUgMTUxMDggbmlsIDE1MTA4IDE1MTA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUxMDkgMTUxMjIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTUxMjIgMTUxMjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTEyMyAxNTE0MyBuaWwgMTUxNDMgMTUxNDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTE0NCAxNTE1MyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNTE1MyAxNTE1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MTU0IDE1MTc2IG5pbCAxNTE3NiAxNTE3NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MTc3IDE1MjE1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNTIxNSAxNTIxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MjE2IDE1MjY4IG5pbCAxNTI2OCAxNTI2OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MjY5IDE1Mjc2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE1Mjc2IDE1Mjc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUyNzcgMTUyOTcgbmlsIDE1Mjk3IDE1Mjk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTUyOTggMTUzMTIgKGZhY2UgZm9udC1sb2NrLXByZXByb2Nlc3Nvci1mYWNlKSAxNTMxMiAxNTMxMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1MzEzIDE1MzUwIG5pbCAxNTM1MCAxNTM3OCAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAxNTM3OCAxNTM5MiBuaWwgMTUzOTIgMTUzOTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTM5MyAxNTQwMSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNTQwMSAxNTQwMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDAyIDE1NDIyIG5pbCAxNTQyMiAxNTQyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDIzIDE1NDUwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNTQ1MCAxNTQ1MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDUxIDE1NDY5IG5pbCAxNTQ2OSAxNTQ3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDcwIDE1NDk2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNTQ5NiAxNTQ5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NDk3IDE1NTY2IG5pbCAxNTU2NiAxNTU2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1NTY3IDE1NjAwIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE1NjAwIDE1NjAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU2MDEgMTU2MTUgbmlsIDE1NjE1IDE1NjYzIChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDE1NjYzIDE1NjczIG5pbCAxNTY3MyAxNTY3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1Njc0IDE1NjgyIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE1NjgyIDE1NjgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU2ODMgMTU2OTkgbmlsIDE1Njk5IDE1NzAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU3MDAgMTU3NDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE1NzQzIDE1NzQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU3NDQgMTU3NTggbmlsIDE1NzU4IDE1NzU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU3NTkgMTU4MDEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE1ODAxIDE1ODAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU4MDIgMTU4MzggbmlsIDE1ODM4IDE1ODM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU4MzkgMTU4NDggKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTU4NDggMTU4NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTg0OSAxNTg2MyBuaWwgMTU4NjMgMTU4NjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNTg2NCAxNTg3NyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNTg3NyAxNTg3OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1ODc4IDE1ODk0IG5pbCAxNTg5NCAxNTg5NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE1ODk1IDE1OTA0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE1OTA0IDE1OTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU5MDUgMTU5MjMgbmlsIDE1OTIzIDE1OTI0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU5MjQgMTU5ODAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE1OTgwIDE1OTgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU5ODEgMTU5OTcgbmlsIDE1OTk3IDE1OTk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTU5OTggMTYwNTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE2MDU3IDE2MDU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYwNTggMTYwNzQgbmlsIDE2MDc0IDE2MDc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYwNzUgMTYxMzEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE2MTMxIDE2MTMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYxMzIgMTYxNDggbmlsIDE2MTQ4IDE2MTQ5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYxNDkgMTYyMDUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE2MjA1IDE2MjA2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYyMDYgMTYyMjIgbmlsIDE2MjIyIDE2MjIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYyMjMgMTYyNzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE2Mjc1IDE2Mjc2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYyNzYgMTYzMjcgbmlsIDE2MzI3IDE2MzI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTYzMjggMTYzMzcgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTYzMzcgMTYzMzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjMzOCAxNjM1MiBuaWwgMTYzNTIgMTYzNTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjM1MyAxNjM2MSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNjM2MSAxNjM2MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2MzYyIDE2Mzc4IG5pbCAxNjM3OCAxNjM3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2Mzc5IDE2NDA2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNjQwNiAxNjQwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NDA3IDE2NDIxIG5pbCAxNjQyMSAxNjQyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NDIyIDE2NDQ4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNjQ0OCAxNjQ0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NDQ5IDE2NDYzIG5pbCAxNjQ2MyAxNjQ2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NDY0IDE2NTA3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNjUwNyAxNjUwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NTA4IDE2NTIyIG5pbCAxNjUyMiAxNjUyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NTIzIDE2NTY1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxNjU2NSAxNjU2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NTY2IDE2NjAyIG5pbCAxNjYwMiAxNjYwMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE2NjAzIDE2NjQ2IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE2NjQ2IDE2NjQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTY2NDcgMTY2NjEgbmlsIDE2NjYxIDE2NjYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTY2NjIgMTY2NjkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTY2NjkgMTY2NzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjY3MCAxNjY4NiBuaWwgMTY2ODYgMTY2ODcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjY4NyAxNjY5NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY2OTcgMTY2OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjY5OCAxNjcxMiBuaWwgMTY3MTIgMTY3MTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjcxMyAxNjcyMiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY3MjIgMTY3MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjcyMyAxNjczNyBuaWwgMTY3MzcgMTY3MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjczOCAxNjc2MCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY3NjAgMTY3NjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjc2MSAxNjc3NSBuaWwgMTY3NzUgMTY3NzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjc3NiAxNjc5NyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY3OTcgMTY3OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjc5OCAxNjgxMiBuaWwgMTY4MTIgMTY4MTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjgxMyAxNjgzMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY4MzAgMTY4MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjgzMSAxNjg0NSBuaWwgMTY4NDUgMTY4NDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjg0NiAxNjg2MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY4NjIgMTY4NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjg2MyAxNjg3NyBuaWwgMTY4NzcgMTY4NzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjg3OCAxNjg4OSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY4ODkgMTY4OTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjg5MCAxNjkwNCBuaWwgMTY5MDQgMTY5MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjkwNSAxNjkxNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY5MTUgMTY5MTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjkxNiAxNjkzMCBuaWwgMTY5MzAgMTY5MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjkzMSAxNjk1NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY5NTUgMTY5NTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjk1NiAxNjk3MCBuaWwgMTY5NzAgMTY5NzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjk3MSAxNjk5NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTY5OTQgMTY5OTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNjk5NSAxNzAwOSBuaWwgMTcwMDkgMTcwMTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzAxMCAxNzAzNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTcwMzQgMTcwMzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzAzNSAxNzA0OSBuaWwgMTcwNDkgMTcwNTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzA1MCAxNzA3MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTcwNzMgMTcwNzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzA3NCAxNzA4OCBuaWwgMTcwODggMTcwODkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzA4OSAxNzExNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTcxMTQgMTcxMTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzExNSAxNzEyOSBuaWwgMTcxMjkgMTcxMzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzEzMCAxNzE1NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMTcxNTQgMTcxNTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzE1NSAxNzIxMCBuaWwgMTcyMTAgMTcyMTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzIxMSAxNzIyMiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNzIyMiAxNzIyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3MjIzIDE3MjI1IG5pbCAxNzIyNSAxNzIyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3MjI2IDE3MjM3IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDE3MjM3IDE3MjM4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTcyMzggMTcyNDYgbmlsIDE3MjQ2IDE3MjQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTcyNDcgMTcyNTEgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTcyNTEgMTcyNTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzI1MiAxNzI1NCBuaWwgMTcyNTQgMTcyNTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzI1NSAxNzI2OSAoZmFjZSBmb250LWxvY2stdHlwZS1mYWNlKSAxNzI2OSAxNzI3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3MjcwIDE3Mjc4IG5pbCAxNzI3OCAxNzI3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3Mjc5IDE3MjkxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE3MjkxIDE3MjkyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTcyOTIgMTczMDQgbmlsIDE3MzA0IDE3MzA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTczMDUgMTczMDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE3MzA3IDE3MzA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTczMDggMTczMjUgbmlsIDE3MzI1IDE3MzI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTczMjYgMTczMzYgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTczMzYgMTczMzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzMzNyAxNzM1MCBuaWwgMTczNTAgMTczNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzM1MSAxNzM3MSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxNzM3MSAxNzM3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3MzcyIDE3Mzg2IG5pbCAxNzM4NiAxNzM4NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3Mzg3IDE3NDA0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE3NDA0IDE3NDA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc0MDUgMTc0MjMgbmlsIDE3NDIzIDE3NDI0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc0MjQgMTc0NDIgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTc0NDIgMTc0NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzQ0MyAxNzQ2MSBuaWwgMTc0NjEgMTc0NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzQ2MiAxNzQ2OSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxNzQ2OSAxNzQ3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NDcwIDE3NDc0IG5pbCAxNzQ3NCAxNzQ5OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NDk4IDE3NTUzIG5pbCAxNzU1MyAxNzU1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NTU0IDE3NTk5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE3NTk5IDE3NjAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc2MDAgMTc2MTQgbmlsIDE3NjE0IDE3NjE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc2MTUgMTc2MjcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTc2MjcgMTc2MjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzYyOCAxNzY0NCBuaWwgMTc2NDQgMTc2NDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzY0NSAxNzY2NSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAxNzY2NSAxNzY2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NjY2IDE3NzAzIG5pbCAxNzcwMyAxNzcwNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NzA0IDE3NzI0IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE3NzI0IDE3NzI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc3MjUgMTc3MzkgbmlsIDE3NzM5IDE3NzQwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc3NDAgMTc3NTIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTc3NTIgMTc3NTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzc1MyAxNzc2OSBuaWwgMTc3NjkgMTc3NzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzc3MCAxNzc5MCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAxNzc5MCAxNzc5MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3NzkxIDE3ODMzIG5pbCAxNzgzMyAxNzgzNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3ODM0IDE3ODQxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE3ODQxIDE3ODQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc4NDIgMTc4NTQgbmlsIDE3ODU0IDE3ODU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc4NTUgMTc4NzQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE3ODc0IDE3ODc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc4NzUgMTc4ODUgbmlsIDE3ODg1IDE3ODg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc4ODYgMTc5MDQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE3OTA0IDE3OTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc5MDUgMTc5MzUgbmlsIDE3OTM1IDE3OTM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc5MzYgMTc5NDcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTc5NDcgMTc5NDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzk0OCAxNzk1MCBuaWwgMTc5NTAgMTc5NTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxNzk1MSAxNzk3MSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAxNzk3MSAxNzk3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3OTcyIDE3OTgwIG5pbCAxNzk4MCAxNzk4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE3OTgxIDE3OTg1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE3OTg1IDE3OTg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc5ODYgMTc5ODggbmlsIDE3OTg4IDE3OTg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTc5ODkgMTgwMDMgKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMTgwMDMgMTgwMDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxODAwNCAxODAxMiBuaWwgMTgwMTIgMTgwMTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxODAxMyAxODAyNSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxODAyNSAxODAyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4MDI2IDE4MDM4IG5pbCAxODAzOCAxODAzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4MDM5IDE4MDQxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAxODA0MSAxODA0MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4MDQyIDE4MDU5IG5pbCAxODA1OSAxODA2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE4MDYwIDE4MDY3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE4MDY3IDE4MDY4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgwNjggMTgwODAgbmlsIDE4MDgwIDE4MDgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgwODEgMTgxMTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MTE0IDE4MTE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgxMTUgMTgxMjUgbmlsIDE4MTI1IDE4MTI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgxMjYgMTgxNjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MTYyIDE4MTYzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgxNjMgMTgxNzMgbmlsIDE4MTczIDE4MTc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgxNzQgMTgyMTIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MjEyIDE4MjEzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgyMTMgMTgyMjMgbmlsIDE4MjIzIDE4MjI0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgyMjQgMTgyNjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MjYxIDE4MjYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgyNjIgMTgyNzIgbmlsIDE4MjcyIDE4MjczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgyNzMgMTgzMTEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MzExIDE4MzEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgzMTIgMTgzMjIgbmlsIDE4MzIyIDE4MzIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgzMjMgMTgzNTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4MzU2IDE4MzU3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgzNTcgMTgzNjcgbmlsIDE4MzY3IDE4MzY4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTgzNjggMTg0MDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NDAzIDE4NDA0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg0MDQgMTg0MTQgbmlsIDE4NDE0IDE4NDE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg0MTUgMTg0NTEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NDUxIDE4NDUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg0NTIgMTg0NjIgbmlsIDE4NDYyIDE4NDYzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg0NjMgMTg0OTkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NDk5IDE4NTAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1MDAgMTg1MTAgbmlsIDE4NTEwIDE4NTExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1MTEgMTg1NDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NTQ3IDE4NTQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1NDggMTg1NTggbmlsIDE4NTU4IDE4NTU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1NTkgMTg1ODEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NTgxIDE4NTgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1ODIgMTg1OTIgbmlsIDE4NTkyIDE4NTkzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg1OTMgMTg2MTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NjE4IDE4NjE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg2MTkgMTg2MjkgbmlsIDE4NjI5IDE4NjMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg2MzAgMTg2NTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NjU3IDE4NjU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg2NTggMTg2NjggbmlsIDE4NjY4IDE4NjY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg2NjkgMTg2OTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4Njk3IDE4Njk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg2OTggMTg3MDggbmlsIDE4NzA4IDE4NzA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg3MDkgMTg3NTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4NzUwIDE4NzUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg3NTEgMTg3NjEgbmlsIDE4NzYxIDE4NzYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg3NjIgMTg4MDMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4ODAzIDE4ODA0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg4MDQgMTg4MTQgbmlsIDE4ODE0IDE4ODE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg4MTUgMTg4NTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4ODU2IDE4ODU3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg4NTcgMTg4NjcgbmlsIDE4ODY3IDE4ODY4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg4NjggMTg5MDIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4OTAyIDE4OTAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg5MDMgMTg5MTMgbmlsIDE4OTEzIDE4OTE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg5MTQgMTg5NDggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4OTQ4IDE4OTQ5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg5NDkgMTg5NTkgbmlsIDE4OTU5IDE4OTYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg5NjAgMTg5OTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE4OTk0IDE4OTk1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTg5OTUgMTkwMDUgbmlsIDE5MDA1IDE5MDA2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwMDYgMTkwMzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE5MDM1IDE5MDM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwMzYgMTkwNDYgbmlsIDE5MDQ2IDE5MDQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwNDcgMTkwNzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE5MDc1IDE5MDc2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwNzYgMTkwOTMgbmlsIDE5MDkzIDE5MDk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkwOTQgMTkxMDQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTkxMDQgMTkxMDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTEwNSAxOTExOCBuaWwgMTkxMTggMTkxMTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTExOSAxOTEzOSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAxOTEzOSAxOTE0MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MTQwIDE5MTU0IG5pbCAxOTE1NCAxOTE1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MTU1IDE5MTcyIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE5MTcyIDE5MTczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkxNzMgMTkxOTEgbmlsIDE5MTkxIDE5MTkyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkxOTIgMTkyMTAgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTkyMTAgMTkyMTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTIxMSAxOTIyOSBuaWwgMTkyMjkgMTkyMzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTIzMCAxOTIzNyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxOTIzNyAxOTIzOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MjM4IDE5MjQyIG5pbCAxOTI0MiAxOTI2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MjY2IDE5MzIxIG5pbCAxOTMyMSAxOTMyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5MzIyIDE5MzQyIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE5MzQyIDE5MzQzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTkzNDMgMTkzNTcgbmlsIDE5MzU3IDE5Mzk5IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDE5Mzk5IDE5NDA5IG5pbCAxOTQwOSAxOTQxMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5NDEwIDE5NDE3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDE5NDE3IDE5NDE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk0MTggMTk0MzQgbmlsIDE5NDM0IDE5NDM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk0MzUgMTk0ODAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE5NDgwIDE5NDgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk0ODEgMTk0OTUgbmlsIDE5NDk1IDE5NDk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk0OTYgMTk1MzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDE5NTM1IDE5NTM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk1MzYgMTk1NzMgbmlsIDE5NTczIDE5NTc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk1NzQgMTk2MjMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMTk2MjMgMTk2MjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTYyNCAxOTYzOCBuaWwgMTk2MzggMTk2MzkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTYzOSAxOTY0NSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxOTY0NSAxOTY0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5NjQ2IDE5NjYyIG5pbCAxOTY2MiAxOTY3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5NjcwIDE5NzA3IG5pbCAxOTcwNyAxOTcwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5NzA4IDE5NzE5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDE5NzE5IDE5NzIwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk3MjAgMTk3MzQgbmlsIDE5NzM0IDE5NzM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMTk3MzUgMTk3NDkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMTk3NDkgMTk3NTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTc1MCAxOTc2NiBuaWwgMTk3NjYgMTk3NzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTc3MyAxOTc5MSBuaWwgMTk3OTEgMTk3OTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAxOTc5MiAxOTgwNiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAxOTgwNiAxOTgwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDE5ODA3IDE5ODI3IG5pbCAxOTgyNyAxOTg5MCAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAxOTg5MCAxOTkwNiBuaWwgMTk5MDYgMTk5NzEgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkgMTk5NzEgMTk5ODcgbmlsIDE5OTg3IDIwMDMyIChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDIwMDMyIDIwMDQ4IG5pbCAyMDA0OCAyMDA3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMDcyIDIwMDc0IG5pbCAyMDA3NCAyMDA3NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMDc3IDIwMDgwIG5pbCAyMDA4MCAyMDA4NiAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAyMDA4NiAyMDE1NSBuaWwgMjAxNTUgMjAxNTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDE1NiAyMDE2NSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMDE2NSAyMDE2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMTY2IDIwMTgwIG5pbCAyMDE4MCAyMDE4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMTgxIDIwMTkwIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIwMTkwIDIwMTkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjAxOTEgMjAyMDcgbmlsIDIwMjA3IDIwMjA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjAyMDggMjAyMTggKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjAyMTggMjAyMTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDIxOSAyMDIzNyBuaWwgMjAyMzcgMjAyNDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDI0NiAyMDI2MiBuaWwgMjAyNjIgMjAyNzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDI3MCAyMDI4NiBuaWwgMjAyODYgMjAyOTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDI5OCAyMDMxNCBuaWwgMjAzMTQgMjAzMjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDMyMiAyMDM3NCBuaWwgMjAzNzQgMjAzNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDM3NSAyMDM4NCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMDM4NCAyMDM4NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwMzg1IDIwMzk5IG5pbCAyMDM5OSAyMDQwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNDAwIDIwNDA5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIwNDA5IDIwNDEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA0MTAgMjA0MjYgbmlsIDIwNDI2IDIwNDI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA0MjcgMjA0MzcgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjA0MzcgMjA0MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDQzOCAyMDQ1NiBuaWwgMjA0NTYgMjA0NjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDQ2NiAyMDQ4MiBuaWwgMjA0ODIgMjA0OTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDQ5MSAyMDUwNyBuaWwgMjA1MDcgMjA1MTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDUxOSAyMDUzNSBuaWwgMjA1MzUgMjA1NDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDU0MyAyMDU5NSBuaWwgMjA1OTUgMjA1OTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDU5NiAyMDYyMSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMDYyMSAyMDYyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNjIyIDIwNjM2IG5pbCAyMDYzNiAyMDYzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNjM3IDIwNjQ2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIwNjQ2IDIwNjQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA2NDcgMjA2NjMgbmlsIDIwNjYzIDIwNjY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjA2NjQgMjA2NzQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjA2NzQgMjA2NzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDY3NSAyMDY5NSBuaWwgMjA2OTUgMjA2OTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMDY5NiAyMDcxNSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMDcxNSAyMDcxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNzE2IDIwNzM2IG5pbCAyMDczNiAyMDc0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNzQ4IDIwNzcwIG5pbCAyMDc3MCAyMDc4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwNzgwIDIwODAwIG5pbCAyMDgwMCAyMDgwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwODA3IDIwODI3IG5pbCAyMDgyNyAyMDgzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwODM5IDIwODU5IG5pbCAyMDg1OSAyMDg2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwODY3IDIwOTIzIG5pbCAyMDkyMyAyMDkzNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwOTM1IDIwOTU3IG5pbCAyMDk1NyAyMDk3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwOTcyIDIwOTkyIG5pbCAyMDk5MiAyMDk5OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIwOTk5IDIxMDE5IG5pbCAyMTAxOSAyMTAyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMDI2IDIxMDQ2IG5pbCAyMTA0NiAyMTA1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMDU4IDIxMDc4IG5pbCAyMTA3OCAyMTA4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMDg2IDIxMTgwIG5pbCAyMTE4MCAyMTE4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMTgxIDIxMTkwIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIxMTkwIDIxMTkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjExOTEgMjEyMDMgbmlsIDIxMjAzIDIxMjA0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjEyMDQgMjEyMjAgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjEyMjAgMjEyMjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTIyMSAyMTIyMyBuaWwgMjEyMjMgMjEyMjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTIyNCAyMTI1NiAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyMTI1NiAyMTI1NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMjU3IDIxMjc0IG5pbCAyMTI3NCAyMTMxNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMzE0IDIxMzI1IG5pbCAyMTMyNSAyMTMyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxMzI2IDIxMzM0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIxMzM0IDIxMzM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjEzMzUgMjEzNDcgbmlsIDIxMzQ3IDIxMzQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjEzNDggMjEzODUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxMzg1IDIxMzg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjEzODYgMjE0MTYgbmlsIDIxNDE2IDIxNDE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE0MTcgMjE0MjggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjE0MjggMjE0MjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTQyOSAyMTQzMSBuaWwgMjE0MzEgMjE0MzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTQzMiAyMTQ1MiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyMTQ1MiAyMTQ1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNDUzIDIxNDYxIG5pbCAyMTQ2MSAyMTQ2MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNDYyIDIxNDY2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIxNDY2IDIxNDY3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE0NjcgMjE0NjkgbmlsIDIxNDY5IDIxNDcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE0NzAgMjE0ODQgKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMjE0ODQgMjE0ODUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTQ4NSAyMTQ5MyBuaWwgMjE0OTMgMjE0OTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTQ5NCAyMTUwNiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyMTUwNiAyMTUwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNTA3IDIxNTE5IG5pbCAyMTUxOSAyMTUyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNTIwIDIxNTIyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyMTUyMiAyMTUyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNTIzIDIxNTQwIG5pbCAyMTU0MCAyMTU0MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxNTQxIDIxNTQ4IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIxNTQ4IDIxNTQ5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE1NDkgMjE1NjEgbmlsIDIxNTYxIDIxNTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE1NjIgMjE1OTUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNTk1IDIxNTk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE1OTYgMjE2MDYgbmlsIDIxNjA2IDIxNjA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE2MDcgMjE2MzcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNjM3IDIxNjM4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE2MzggMjE2NDggbmlsIDIxNjQ4IDIxNjQ5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE2NDkgMjE2ODIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNjgyIDIxNjgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE2ODMgMjE2OTMgbmlsIDIxNjkzIDIxNjk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE2OTQgMjE3MjQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNzI0IDIxNzI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE3MjUgMjE3MzUgbmlsIDIxNzM1IDIxNzM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE3MzYgMjE3NTggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNzU4IDIxNzU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE3NTkgMjE3NjkgbmlsIDIxNzY5IDIxNzcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE3NzAgMjE3OTUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxNzk1IDIxNzk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE3OTYgMjE4MDYgbmlsIDIxODA2IDIxODA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE4MDcgMjE4MzYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxODM2IDIxODM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE4MzcgMjE4NDcgbmlsIDIxODQ3IDIxODQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE4NDggMjE4NzYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIxODc2IDIxODc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE4NzcgMjE5MDcgbmlsIDIxOTA3IDIxOTA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE5MDggMjE5MTkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjE5MTkgMjE5MjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTkyMCAyMTkyMiBuaWwgMjE5MjIgMjE5MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTkyMyAyMTkzOCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyMTkzOCAyMTkzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxOTM5IDIxOTQ3IG5pbCAyMTk0NyAyMTk0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxOTQ4IDIxOTUyIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIxOTUyIDIxOTUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE5NTMgMjE5NTUgbmlsIDIxOTU1IDIxOTU2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjE5NTYgMjE5NjYgKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMjE5NjYgMjE5NjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTk2NyAyMTk3NSBuaWwgMjE5NzUgMjE5NzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMTk3NiAyMTk4OCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyMTk4OCAyMTk4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIxOTg5IDIyMDAxIG5pbCAyMjAwMSAyMjAwMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMDAyIDIyMDA3IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDIyMDA3IDIyMDA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIwMDggMjIwMTggbmlsIDIyMDE4IDIyMDE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIwMTkgMjIwMzcgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjIwMzcgMjIwMzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjAzOCAyMjA0OCBuaWwgMjIwNDggMjIwNDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjA0OSAyMjA2MCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyMjA2MCAyMjA2MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMDYxIDIyMDcxIG5pbCAyMjA3MSAyMjA3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMDcyIDIyMDkzIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDIyMDkzIDIyMDk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIwOTQgMjIxMDQgbmlsIDIyMTA0IDIyMTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIxMDUgMjIxMzEgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjIxMzEgMjIxMzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjEzMiAyMjE0MiBuaWwgMjIxNDIgMjIxNDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjE0MyAyMjE3NyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyMjE3NyAyMjE3OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMTc4IDIyMTg4IG5pbCAyMjE4OCAyMjE4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMTg5IDIyMjE1IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDIyMjE1IDIyMjE2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIyMTYgMjIyMjYgbmlsIDIyMjI2IDIyMjI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIyMjcgMjIyNTMgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjIyNTMgMjIyNTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjI1NCAyMjI2NCBuaWwgMjIyNjQgMjIyNjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyMjI2NSAyMjI4MCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyMjI4MCAyMjI4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMjgxIDIyMjk4IG5pbCAyMjI5OCAyMjI5OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDIyMjk5IDIyMzA2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDIyMzA2IDIyMzA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIzMDcgMjIzMTkgbmlsIDIyMzE5IDIyMzIwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIzMjAgMjIzNjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyMzYxIDIyMzYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIzNjIgMjIzNzIgbmlsIDIyMzcyIDIyMzczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjIzNzMgMjI0MTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNDEzIDIyNDE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI0MTQgMjI0MjQgbmlsIDIyNDI0IDIyNDI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI0MjUgMjI0NjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNDYxIDIyNDYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI0NjIgMjI0NzIgbmlsIDIyNDcyIDIyNDczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI0NzMgMjI1MDIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNTAyIDIyNTAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI1MDMgMjI1MTMgbmlsIDIyNTEzIDIyNTE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI1MTQgMjI1NTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNTUwIDIyNTUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI1NTEgMjI1NjEgbmlsIDIyNTYxIDIyNTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI1NjIgMjI2MTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNjEwIDIyNjExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI2MTEgMjI2MjEgbmlsIDIyNjIxIDIyNjIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI2MjIgMjI2NjMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNjYzIDIyNjY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI2NjQgMjI2NzQgbmlsIDIyNjc0IDIyNjc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI2NzUgMjI3MTEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNzExIDIyNzEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI3MTIgMjI3MjIgbmlsIDIyNzIyIDIyNzIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI3MjMgMjI3NTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNzU3IDIyNzU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI3NTggMjI3NjggbmlsIDIyNzY4IDIyNzY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI3NjkgMjI3OTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyNzk3IDIyNzk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI3OTggMjI4MDggbmlsIDIyODA4IDIyODA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI4MDkgMjI4NTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyODUzIDIyODU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI4NTQgMjI4NjQgbmlsIDIyODY0IDIyODY1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI4NjUgMjI5MDAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyOTAwIDIyOTAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI5MDEgMjI5MTEgbmlsIDIyOTExIDIyOTEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI5MTIgMjI5NjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIyOTYxIDIyOTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI5NjIgMjI5NzIgbmlsIDIyOTcyIDIyOTczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjI5NzMgMjMwMTEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMDExIDIzMDEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMwMTIgMjMwMjIgbmlsIDIzMDIyIDIzMDIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMwMjMgMjMwNTUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMDU1IDIzMDU2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMwNTYgMjMwNjYgbmlsIDIzMDY2IDIzMDY3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMwNjcgMjMxMTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMTE2IDIzMTE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMxMTcgMjMxMjcgbmlsIDIzMTI3IDIzMTI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMxMjggMjMxNzggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMTc4IDIzMTc5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMxNzkgMjMxODkgbmlsIDIzMTg5IDIzMTkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMxOTAgMjMyMjggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMjI4IDIzMjI5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMyMjkgMjMyMzkgbmlsIDIzMjM5IDIzMjQwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMyNDAgMjMyNzcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMjc3IDIzMjc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMyNzggMjMyODggbmlsIDIzMjg4IDIzMjg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMyODkgMjMzMzIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMzMyIDIzMzMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMzMzMgMjMzNDMgbmlsIDIzMzQzIDIzMzQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMzNDQgMjMzNjggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzMzY4IDIzMzY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMzNjkgMjMzNzkgbmlsIDIzMzc5IDIzMzgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjMzODAgMjM0MDIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNDAyIDIzNDAzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0MDMgMjM0MTMgbmlsIDIzNDEzIDIzNDE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0MTQgMjM0NDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNDQ3IDIzNDQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0NDggMjM0NTggbmlsIDIzNDU4IDIzNDU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0NTkgMjM0ODcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNDg3IDIzNDg4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0ODggMjM0OTggbmlsIDIzNDk4IDIzNDk5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM0OTkgMjM1MzAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNTMwIDIzNTMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM1MzEgMjM1NDEgbmlsIDIzNTQxIDIzNTQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM1NDIgMjM1NjMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNTYzIDIzNTY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM1NjQgMjM1NzQgbmlsIDIzNTc0IDIzNTc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM1NzUgMjM2MDkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNjA5IDIzNjEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM2MTAgMjM2MjAgbmlsIDIzNjIwIDIzNjIxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM2MjEgMjM2NTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNjU0IDIzNjU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM2NTUgMjM2NjUgbmlsIDIzNjY1IDIzNjY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM2NjYgMjM3MDAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNzAwIDIzNzAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM3MDEgMjM3MTEgbmlsIDIzNzExIDIzNzEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM3MTIgMjM3NTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNzUzIDIzNzU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM3NTQgMjM3NjQgbmlsIDIzNzY0IDIzNzY1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM3NjUgMjM3OTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzNzkwIDIzNzkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM3OTEgMjM4MDEgbmlsIDIzODAxIDIzODAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM4MDIgMjM4MjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzODI1IDIzODI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM4MjYgMjM4MzYgbmlsIDIzODM2IDIzODM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM4MzcgMjM4NjIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzODYyIDIzODYzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM4NjMgMjM4NzMgbmlsIDIzODczIDIzODc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM4NzQgMjM5MDYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzOTA2IDIzOTA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5MDcgMjM5MTcgbmlsIDIzOTE3IDIzOTE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5MTggMjM5NDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzOTQ3IDIzOTQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5NDggMjM5NTggbmlsIDIzOTU4IDIzOTU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5NTkgMjM5ODEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDIzOTgxIDIzOTgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5ODIgMjM5OTIgbmlsIDIzOTkyIDIzOTkzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjM5OTMgMjQwMTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MDE0IDI0MDE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwMTUgMjQwMjUgbmlsIDI0MDI1IDI0MDI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwMjYgMjQwNTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MDU0IDI0MDU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwNTUgMjQwNjUgbmlsIDI0MDY1IDI0MDY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwNjYgMjQwOTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MDkzIDI0MDk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQwOTQgMjQxMDQgbmlsIDI0MTA0IDI0MTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQxMDUgMjQxMzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MTMzIDI0MTM0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQxMzQgMjQxNDQgbmlsIDI0MTQ0IDI0MTQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQxNDUgMjQxNzcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MTc3IDI0MTc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQxNzggMjQxODggbmlsIDI0MTg4IDI0MTg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQxODkgMjQyMjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MjIxIDI0MjIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQyMjIgMjQyMzIgbmlsIDI0MjMyIDI0MjMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQyMzMgMjQyNzcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0Mjc3IDI0Mjc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQyNzggMjQyODggbmlsIDI0Mjg4IDI0Mjg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQyODkgMjQzMjggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0MzI4IDI0MzI5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQzMjkgMjQzMzkgbmlsIDI0MzM5IDI0MzQwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQzNDAgMjQzNzkgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0Mzc5IDI0MzgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQzODAgMjQzOTAgbmlsIDI0MzkwIDI0MzkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQzOTEgMjQ0MjQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NDI0IDI0NDI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ0MjUgMjQ0MzUgbmlsIDI0NDM1IDI0NDM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ0MzYgMjQ0NzYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NDc2IDI0NDc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ0NzcgMjQ0ODcgbmlsIDI0NDg3IDI0NDg4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ0ODggMjQ1MjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NTIxIDI0NTIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ1MjIgMjQ1MzIgbmlsIDI0NTMyIDI0NTMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ1MzMgMjQ1NjcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NTY3IDI0NTY4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ1NjggMjQ1NzggbmlsIDI0NTc4IDI0NTc5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ1NzkgMjQ2MTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NjEwIDI0NjExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ2MTEgMjQ2MjEgbmlsIDI0NjIxIDI0NjIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ2MjIgMjQ2NzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NjczIDI0Njc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ2NzQgMjQ2ODQgbmlsIDI0Njg0IDI0Njg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ2ODUgMjQ3MjUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NzI1IDI0NzI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ3MjYgMjQ3MzYgbmlsIDI0NzM2IDI0NzM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ3MzcgMjQ3NzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0NzczIDI0Nzc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ3NzQgMjQ3ODQgbmlsIDI0Nzg0IDI0Nzg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ3ODUgMjQ4MjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0ODIxIDI0ODIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ4MjIgMjQ4MzIgbmlsIDI0ODMyIDI0ODMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ4MzMgMjQ4NzQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0ODc0IDI0ODc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ4NzUgMjQ4ODUgbmlsIDI0ODg1IDI0ODg2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ4ODYgMjQ5MjYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0OTI2IDI0OTI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ5MjcgMjQ5MzcgbmlsIDI0OTM3IDI0OTM4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ5MzggMjQ5NzcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI0OTc3IDI0OTc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ5NzggMjQ5ODggbmlsIDI0OTg4IDI0OTg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjQ5ODkgMjUwMzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MDM1IDI1MDM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUwMzYgMjUwNDYgbmlsIDI1MDQ2IDI1MDQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUwNDcgMjUwNzAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MDcwIDI1MDcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUwNzEgMjUwODEgbmlsIDI1MDgxIDI1MDgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUwODIgMjUxMDQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MTA0IDI1MTA1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUxMDUgMjUxMTUgbmlsIDI1MTE1IDI1MTE2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUxMTYgMjUxNTIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MTUyIDI1MTUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUxNTMgMjUxNjMgbmlsIDI1MTYzIDI1MTY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUxNjQgMjUyMTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MjEwIDI1MjExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUyMTEgMjUyMjEgbmlsIDI1MjIxIDI1MjIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUyMjIgMjUyNTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI1MjUwIDI1MjUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUyNTEgMjUyNjggbmlsIDI1MjY4IDI1MjY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUyNjkgMjUyNzkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjUyNzkgMjUyODAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTI4MCAyNTI5MyBuaWwgMjUyOTMgMjUyOTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTI5NCAyNTMxOSAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyNTMxOSAyNTMyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1MzIwIDI1MzM0IG5pbCAyNTMzNCAyNTMzNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1MzM1IDI1MzQ1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI1MzQ1IDI1MzQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUzNDYgMjUzNjMgbmlsIDI1MzYzIDI1MzY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjUzNjQgMjUzODUgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjUzODUgMjUzODYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTM4NiAyNTQwNCBuaWwgMjU0MDQgMjU0MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTQwNSAyNTQxNyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNTQxNyAyNTQxOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NDE4IDI1NDM4IG5pbCAyNTQzOCAyNTQzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NDM5IDI1NDgwIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI1NDgwIDI1NDgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjU0ODEgMjU1NTAgbmlsIDI1NTUwIDI1NTUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjU1NTEgMjU1NjYgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjU1NjYgMjU1NjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTU2NyAyNTU4MSBuaWwgMjU1ODEgMjU1ODIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTU4MiAyNTU5NCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNTU5NCAyNTU5NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NTk1IDI1NjExIG5pbCAyNTYxMSAyNTYxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NjEyIDI1NjUxIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI1NjUxIDI1NjUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjU2NTIgMjU2ODggbmlsIDI1Njg4IDI1Njg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjU2ODkgMjU3MDQgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjU3MDQgMjU3MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTcwNSAyNTcxOSBuaWwgMjU3MTkgMjU3MjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNTcyMCAyNTcyOCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNTcyOCAyNTcyOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NzI5IDI1NzQ1IG5pbCAyNTc0NSAyNTc0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NzQ2IDI1NzgyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTc4MiAyNTc4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1NzgzIDI1Nzk3IG5pbCAyNTc5NyAyNTc5OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1Nzk4IDI1ODIwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTgyMCAyNTgyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1ODIxIDI1ODM1IG5pbCAyNTgzNSAyNTgzNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1ODM2IDI1ODU3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTg1NyAyNTg1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1ODU4IDI1ODcyIG5pbCAyNTg3MiAyNTg3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1ODczIDI1OTA1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTkwNSAyNTkwNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1OTA2IDI1OTIwIG5pbCAyNTkyMCAyNTkyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1OTIxIDI1OTYxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNTk2MSAyNTk2MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1OTYyIDI1OTc2IG5pbCAyNTk3NiAyNTk3NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI1OTc3IDI2MDE2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjAxNiAyNjAxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MDE3IDI2MDMxIG5pbCAyNjAzMSAyNjAzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MDMyIDI2MDY1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjA2NSAyNjA2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MDY2IDI2MDgwIG5pbCAyNjA4MCAyNjA4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MDgxIDI2MTE1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjExNSAyNjExNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MTE2IDI2MTMwIG5pbCAyNjEzMCAyNjEzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MTMxIDI2MTYyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjE2MiAyNjE2MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MTYzIDI2MTc3IG5pbCAyNjE3NyAyNjE3OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MTc4IDI2MjI5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjIyOSAyNjIzMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MjMwIDI2MjQ0IG5pbCAyNjI0NCAyNjI0NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MjQ1IDI2Mjg1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjI4NSAyNjI4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2Mjg2IDI2MzAwIG5pbCAyNjMwMCAyNjMwMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MzAxIDI2MzM3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjMzNyAyNjMzOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MzM4IDI2MzUyIG5pbCAyNjM1MiAyNjM1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2MzUzIDI2Mzk0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjM5NCAyNjM5NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2Mzk1IDI2NDA5IG5pbCAyNjQwOSAyNjQxMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NDEwIDI2NDQzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjQ0MyAyNjQ0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NDQ0IDI2NDU4IG5pbCAyNjQ1OCAyNjQ1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NDU5IDI2NDk1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjQ5NSAyNjQ5NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NDk2IDI2NTMyIG5pbCAyNjUzMiAyNjUzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NTMzIDI2NTQ2IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDI2NTQ2IDI2NTQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY1NDcgMjY1NjEgbmlsIDI2NTYxIDI2NTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY1NjIgMjY1NzIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjY1NzIgMjY1NzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjU3MyAyNjU5MCBuaWwgMjY1OTAgMjY1OTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjU5MSAyNjYwNCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAyNjYwNCAyNjYwNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NjA1IDI2NjIzIG5pbCAyNjYyMyAyNjYyNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2NjI0IDI2NjMxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI2NjMxIDI2NjMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY2MzIgMjY2NTIgbmlsIDI2NjUyIDI2NjUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY2NTMgMjY2ODggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI2Njg4IDI2Njg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY2ODkgMjY3MjIgbmlsIDI2NzIyIDI2NzIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY3MjMgMjY3MzAgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjY3MzAgMjY3MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjczMSAyNjc1MSBuaWwgMjY3NTEgMjY3NTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjc1MiAyNjc2MCAoZmFjZSBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpIDI2NzYwIDI2NzYxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY3NjEgMjY4MzEgbmlsIDI2ODMxIDI2ODMyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjY4MzIgMjY4NzMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMjY4NzMgMjY4NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjg3NCAyNjg4OCBuaWwgMjY4ODggMjY4ODkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNjg4OSAyNjg5NiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNjg5NiAyNjg5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2ODk3IDI2OTEzIG5pbCAyNjkxMyAyNjkxNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2OTE0IDI2OTU0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNjk1NCAyNjk1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2OTU1IDI2OTkxIG5pbCAyNjk5MSAyNjk5MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI2OTkyIDI3MDM1IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDI3MDM1IDI3MDM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjcwMzYgMjcwNTAgbmlsIDI3MDUwIDI3MDUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjcwNTEgMjcwNTggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjcwNTggMjcwNTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzA1OSAyNzA3NSBuaWwgMjcwNzUgMjcwNzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzA3NiAyNzA5NSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjcwOTUgMjcwOTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzA5NiAyNzExMCBuaWwgMjcxMTAgMjcxMTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzExMSAyNzEzNyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjcxMzcgMjcxMzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzEzOCAyNzE1MiBuaWwgMjcxNTIgMjcxNTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzE1MyAyNzE4NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjcxODYgMjcxODcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzE4NyAyNzIwMSBuaWwgMjcyMDEgMjcyMDIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzIwMiAyNzIzNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjcyMzUgMjcyMzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzIzNiAyNzI5MSBuaWwgMjcyOTEgMjcyOTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzI5MiAyNzMwMyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNzMwMyAyNzMwNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3MzA0IDI3MzA2IG5pbCAyNzMwNiAyNzMwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3MzA3IDI3MzI1IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI3MzI1IDI3MzI2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjczMjYgMjczMzQgbmlsIDI3MzM0IDI3MzM1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjczMzUgMjczMzkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjczMzkgMjczNDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzM0MCAyNzM0MiBuaWwgMjczNDIgMjczNDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzM0MyAyNzM1NyAoZmFjZSBmb250LWxvY2stdHlwZS1mYWNlKSAyNzM1NyAyNzM1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3MzU4IDI3MzY2IG5pbCAyNzM2NiAyNzM2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3MzY3IDI3Mzc5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI3Mzc5IDI3MzgwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjczODAgMjczOTIgbmlsIDI3MzkyIDI3MzkzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjczOTMgMjczOTggKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjczOTggMjczOTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzM5OSAyNzQwOSBuaWwgMjc0MDkgMjc0MTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzQxMCAyNzQzMSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyNzQzMSAyNzQzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NDMyIDI3NDQyIG5pbCAyNzQ0MiAyNzQ0MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NDQzIDI3NDY5IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI3NDY5IDI3NDcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjc0NzAgMjc0ODAgbmlsIDI3NDgwIDI3NDgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjc0ODEgMjc1MDcgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjc1MDcgMjc1MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzUwOCAyNzUyNSBuaWwgMjc1MjUgMjc1MjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyNzUyNiAyNzUzMyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyNzUzMyAyNzUzNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NTM0IDI3NTQ2IG5pbCAyNzU0NiAyNzU0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NTQ3IDI3NTkxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzU5MSAyNzU5MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NTkyIDI3NjAyIG5pbCAyNzYwMiAyNzYwMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjAzIDI3NjQ2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzY0NiAyNzY0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjQ3IDI3NjU3IG5pbCAyNzY1NyAyNzY1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjU4IDI3Njc5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzY3OSAyNzY4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjgwIDI3NjkwIG5pbCAyNzY5MCAyNzY5MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NjkxIDI3NzExIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzcxMSAyNzcxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NzEyIDI3NzIyIG5pbCAyNzcyMiAyNzcyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NzIzIDI3NzUyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzc1MiAyNzc1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NzUzIDI3NzYzIG5pbCAyNzc2MyAyNzc2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NzY0IDI3NzkyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzc5MiAyNzc5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3NzkzIDI3ODAzIG5pbCAyNzgwMyAyNzgwNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3ODA0IDI3ODI5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzgyOSAyNzgzMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3ODMwIDI3ODQwIG5pbCAyNzg0MCAyNzg0MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3ODQxIDI3ODY1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzg2NSAyNzg2NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3ODY2IDI3ODc2IG5pbCAyNzg3NiAyNzg3NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3ODc3IDI3OTAxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzkwMSAyNzkwMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTAyIDI3OTEyIG5pbCAyNzkxMiAyNzkxMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTEzIDI3OTM2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzkzNiAyNzkzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTM3IDI3OTQ3IG5pbCAyNzk0NyAyNzk0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTQ4IDI3OTY4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzk2OCAyNzk2OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTY5IDI3OTc5IG5pbCAyNzk3OSAyNzk4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI3OTgwIDI3OTk5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyNzk5OSAyODAwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MDAwIDI4MDMwIG5pbCAyODAzMCAyODAzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MDMxIDI4MDQyIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI4MDQyIDI4MDQzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgwNDMgMjgwNDUgbmlsIDI4MDQ1IDI4MDQ2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgwNDYgMjgwNTggKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjgwNTggMjgwNTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODA1OSAyODA2NyBuaWwgMjgwNjcgMjgwNjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODA2OCAyODA3MiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyODA3MiAyODA3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MDczIDI4MDc1IG5pbCAyODA3NSAyODA3NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MDc2IDI4MDg2IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDI4MDg2IDI4MDg3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgwODcgMjgwOTUgbmlsIDI4MDk1IDI4MDk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgwOTYgMjgxMDggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjgxMDggMjgxMDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODEwOSAyODEyMSBuaWwgMjgxMjEgMjgxMjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODEyMiAyODEyNyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyODEyNyAyODEyOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MTI4IDI4MTM4IG5pbCAyODEzOCAyODEzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MTM5IDI4MTUwIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI4MTUwIDI4MTUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgxNTEgMjgxNjEgbmlsIDI4MTYxIDI4MTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgxNjIgMjgxODMgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjgxODMgMjgxODQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODE4NCAyODE5NCBuaWwgMjgxOTQgMjgxOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODE5NSAyODIxNiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyODIxNiAyODIxNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MjE3IDI4MjM0IG5pbCAyODIzNCAyODIzNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MjM1IDI4MjQyIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI4MjQyIDI4MjQzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgyNDMgMjgyNTUgbmlsIDI4MjU1IDI4MjU2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgyNTYgMjgyOTAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI4MjkwIDI4MjkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgyOTEgMjgzMjEgbmlsIDI4MzIxIDI4MzIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgzMjIgMjgzMzMgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjgzMzMgMjgzMzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODMzNCAyODMzNiBuaWwgMjgzMzYgMjgzMzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODMzNyAyODM0OSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyODM0OSAyODM1MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MzUwIDI4MzU4IG5pbCAyODM1OCAyODM1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4MzU5IDI4MzYzIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI4MzYzIDI4MzY0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgzNjQgMjgzNjYgbmlsIDI4MzY2IDI4MzY3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjgzNjcgMjgzNzcgKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMjgzNzcgMjgzNzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODM3OCAyODM4NiBuaWwgMjgzODYgMjgzODcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODM4NyAyODM5NCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyODM5NCAyODM5NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4Mzk1IDI4NDA3IG5pbCAyODQwNyAyODQwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NDA4IDI4NDQxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyODQ0MSAyODQ0MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NDQyIDI4NDcxIG5pbCAyODQ3MSAyODQ3MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NDcyIDI4NDgzIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI4NDgzIDI4NDg0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg0ODQgMjg0ODYgbmlsIDI4NDg2IDI4NDg3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg0ODcgMjg0OTggKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjg0OTggMjg0OTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODQ5OSAyODUwNyBuaWwgMjg1MDcgMjg1MDggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODUwOCAyODUxMiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyODUxMiAyODUxMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NTEzIDI4NTE1IG5pbCAyODUxNSAyODUxNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NTE2IDI4NTI2IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDI4NTI2IDI4NTI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg1MjcgMjg1MzUgbmlsIDI4NTM1IDI4NTM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg1MzYgMjg1NDggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjg1NDggMjg1NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODU0OSAyODU2MSBuaWwgMjg1NjEgMjg1NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODU2MiAyODU2NyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyODU2NyAyODU2OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NTY4IDI4NTc4IG5pbCAyODU3OCAyODU3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NTc5IDI4NjAwIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI4NjAwIDI4NjAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg2MDEgMjg2MTggbmlsIDI4NjE4IDI4NjE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg2MTkgMjg2MjYgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjg2MjYgMjg2MjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODYyNyAyODYzOSBuaWwgMjg2MzkgMjg2NDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODY0MCAyODY3MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMjg2NzIgMjg2NzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODY3MyAyODY5OCBuaWwgMjg2OTggMjg2OTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODY5OSAyODcwOSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyODcwOSAyODcxMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NzEwIDI4NzE5IG5pbCAyODcxOSAyODcyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4NzIwIDI4NzI5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDI4NzI5IDI4NzMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg3MzAgMjg3NDAgbmlsIDI4NzQwIDI4NzQxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg3NDEgMjg3NDggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjg3NDggMjg3NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODc0OSAyODc3MyBuaWwgMjg3NzMgMjg3NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODc3NCAyODc4NSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyODc4NSAyODc4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4Nzg2IDI4Nzg4IG5pbCAyODc4OCAyODc4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4Nzg5IDI4Nzk5IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI4Nzk5IDI4ODAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg4MDAgMjg4MTIgbmlsIDI4ODEyIDI4ODEzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg4MTMgMjg4MTcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjg4MTcgMjg4MTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODgxOCAyODgyMCBuaWwgMjg4MjAgMjg4MjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODgyMSAyODgzMSAoZmFjZSBmb250LWxvY2stdHlwZS1mYWNlKSAyODgzMSAyODgzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4ODMyIDI4ODQ0IG5pbCAyODg0NCAyODg0NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4ODQ1IDI4ODU3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI4ODU3IDI4ODU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg4NTggMjg4NzQgbmlsIDI4ODc0IDI4ODc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg4NzUgMjg4ODAgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjg4ODAgMjg4ODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODg4MSAyODg5NSBuaWwgMjg4OTUgMjg4OTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyODg5NiAyODkwNyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyODkwNyAyODkwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4OTA4IDI4OTIyIG5pbCAyODkyMiAyODkyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI4OTIzIDI4OTQ0IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDI4OTQ0IDI4OTQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg5NDUgMjg5NTkgbmlsIDI4OTU5IDI4OTYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjg5NjAgMjkwNDMgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMjkwNDMgMjkwNDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyOTA0NCAyOTA1OCBuaWwgMjkwNTggMjkwNTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyOTA1OSAyOTA3NCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAyOTA3NCAyOTA3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5MDc1IDI5MTAwIG5pbCAyOTEwMCAyOTEwMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5MTAxIDI5MTEzIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI5MTEzIDI5MTE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkxMTQgMjkxMzAgbmlsIDI5MTMwIDI5MTMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkxMzEgMjkxMzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5MTMzIDI5MTM4IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDI5MTM4IDI5MTYzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAyOTE2MyAyOTE2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5MTY0IDI5MTg5IG5pbCAyOTE4OSAyOTE5MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5MTkwIDI5MTk3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI5MTk3IDI5MTk4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkxOTggMjkyMTQgbmlsIDI5MjE0IDI5MjE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkyMTUgMjkyMzggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5MjM4IDI5MjM5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkyMzkgMjkyNTMgbmlsIDI5MjUzIDI5MjU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkyNTQgMjkyODAgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5MjgwIDI5MjgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkyODEgMjkyOTUgbmlsIDI5Mjk1IDI5Mjk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkyOTYgMjkzMjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5MzIxIDI5MzIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkzMjIgMjkzMzYgbmlsIDI5MzM2IDI5MzM3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkzMzcgMjkzNjEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5MzYxIDI5MzYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkzNjIgMjkzNzYgbmlsIDI5Mzc2IDI5Mzc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjkzNzcgMjk0MDcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NDA3IDI5NDA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk0MDggMjk0MjIgbmlsIDI5NDIyIDI5NDIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk0MjMgMjk0NTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NDUzIDI5NDU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk0NTQgMjk0NjggbmlsIDI5NDY4IDI5NDY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk0NjkgMjk0OTMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NDkzIDI5NDk0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk0OTQgMjk1MDggbmlsIDI5NTA4IDI5NTA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk1MDkgMjk1MzIgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NTMyIDI5NTMzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk1MzMgMjk1NDcgbmlsIDI5NTQ3IDI5NTQ4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk1NDggMjk1NzUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NTc1IDI5NTc2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk1NzYgMjk1OTAgbmlsIDI5NTkwIDI5NTkxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk1OTEgMjk2MTQgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDI5NjE0IDI5NjE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk2MTUgMjk2NDAgbmlsIDI5NjQwIDI5NjU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk2NTUgMjk2NzEgbmlsIDI5NjcxIDI5Njg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk2ODUgMjk3MDMgbmlsIDI5NzAzIDI5NzE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk3MTQgMjk3MTYgbmlsIDI5NzE2IDI5NzE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk3MTkgMjk3MjkgbmlsIDI5NzI5IDI5NzU0IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDI5NzU0IDI5NzkyIG5pbCAyOTc5MiAyOTc5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5NzkzIDI5ODAwIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDI5ODAwIDI5ODAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk4MDEgMjk4MTcgbmlsIDI5ODE3IDI5ODE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk4MTggMjk4NDMgKGZhY2UgZm9udC1sb2NrLXByZXByb2Nlc3Nvci1mYWNlKSAyOTg0MyAyOTg0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5ODQ0IDI5ODkyIG5pbCAyOTg5MiAyOTg5MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5ODkzIDI5OTI5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDI5OTI5IDI5OTMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk5MzAgMjk5NDAgbmlsIDI5OTQwIDI5OTQxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMjk5NDEgMjk5NDggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMjk5NDggMjk5NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyOTk0OSAyOTk3MyBuaWwgMjk5NzMgMjk5NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAyOTk3NCAyOTk4NSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAyOTk4NSAyOTk4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5OTg2IDI5OTg4IG5pbCAyOTk4OCAyOTk4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDI5OTg5IDMwMDAxIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMwMDAxIDMwMDAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAwMDIgMzAwMTQgbmlsIDMwMDE0IDMwMDE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAwMTUgMzAwMTkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzAwMTkgMzAwMjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDAyMCAzMDAyMiBuaWwgMzAwMjIgMzAwMjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDAyMyAzMDAzMyAoZmFjZSBmb250LWxvY2stdHlwZS1mYWNlKSAzMDAzMyAzMDAzNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMDM0IDMwMDQ2IG5pbCAzMDA0NiAzMDA0NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMDQ3IDMwMDU5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMwMDU5IDMwMDYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAwNjAgMzAwNzYgbmlsIDMwMDc2IDMwMDc3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAwNzcgMzAwODIgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzAwODIgMzAwODMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDA4MyAzMDA5NyBuaWwgMzAwOTcgMzAwOTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDA5OCAzMDEwOSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMDEwOSAzMDExMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMTEwIDMwMTI0IG5pbCAzMDEyNCAzMDEyNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMTI1IDMwMTQ2IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMwMTQ2IDMwMTQ3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAxNDcgMzAxNjEgbmlsIDMwMTYxIDMwMTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzAxNjIgMzAxODAgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzAxODAgMzAxODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDE4MSAzMDIwNiBuaWwgMzAyMDYgMzAyMDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDIwNyAzMDIxNCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMDIxNCAzMDIxNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMjE1IDMwMjMxIG5pbCAzMDIzMSAzMDIzMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMjMyIDMwMjY2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDI2NiAzMDI2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMjY3IDMwMjgxIG5pbCAzMDI4MSAzMDI4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMjgyIDMwMzIxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDMyMSAzMDMyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMzIyIDMwMzM2IG5pbCAzMDMzNiAzMDMzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMzM3IDMwMzc1IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDM3NSAzMDM3NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMzc2IDMwMzkwIG5pbCAzMDM5MCAzMDM5MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwMzkxIDMwNDMwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDQzMCAzMDQzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNDMxIDMwNDQ1IG5pbCAzMDQ0NSAzMDQ0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNDQ2IDMwNDg0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDQ4NCAzMDQ4NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNDg1IDMwNDk5IG5pbCAzMDQ5OSAzMDUwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNTAwIDMwNTMzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDUzMyAzMDUzNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNTM0IDMwNTQ4IG5pbCAzMDU0OCAzMDU0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNTQ5IDMwNTgxIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDU4MSAzMDU4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNTgyIDMwNTk2IG5pbCAzMDU5NiAzMDU5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNTk3IDMwNjI2IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDYyNiAzMDYyNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNjI3IDMwNjQxIG5pbCAzMDY0MSAzMDY0MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNjQyIDMwNjcwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDY3MCAzMDY3MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNjcxIDMwNjg1IG5pbCAzMDY4NSAzMDY4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNjg2IDMwNzE0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDcxNCAzMDcxNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNzE1IDMwNzI5IG5pbCAzMDcyOSAzMDczMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNzMwIDMwNzU3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMDc1NyAzMDc1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNzU4IDMwNzgzIG5pbCAzMDc4MyAzMDc4NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwNzg0IDMwNzk0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMwNzk0IDMwNzk1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzA3OTUgMzA4MTIgbmlsIDMwODEyIDMwODEzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzA4MTMgMzA4MzQgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMzA4MzQgMzA4MzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDgzNSAzMDg1MyBuaWwgMzA4NTMgMzA4NTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDg1NCAzMDg2NiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMDg2NiAzMDg2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwODY3IDMwODg3IG5pbCAzMDg4NyAzMDg4OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMwODg4IDMwOTE3IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMwOTE3IDMwOTE4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzA5MTggMzA5NTEgbmlsIDMwOTUxIDMwOTUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzA5NTIgMzA5NTkgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzA5NTkgMzA5NjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDk2MCAzMDk4MCBuaWwgMzA5ODAgMzA5ODEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMDk4MSAzMTAxNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzEwMTUgMzEwMTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTAxNiAzMTA2NCBuaWwgMzEwNjQgMzEwNjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTA2NSAzMTA3NCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzMTA3NCAzMTA3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxMDc1IDMxMDkzIG5pbCAzMTA5MyAzMTA5NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxMDk0IDMxMTA2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMxMTA2IDMxMTA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzExMDcgMzExMjcgbmlsIDMxMTI3IDMxMTI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzExMjggMzExNzUgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzExNzUgMzExNzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTE3NiAzMTE5NCBuaWwgMzExOTQgMzExOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTE5NSAzMTI0NSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMTI0NSAzMTI0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxMjQ2IDMxMjc5IG5pbCAzMTI3OSAzMTI4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxMjgwIDMxMjg3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMxMjg3IDMxMjg4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzEyODggMzEzMDggbmlsIDMxMzA4IDMxMzA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzEzMDkgMzEzNDEgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMxMzQxIDMxMzQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzEzNDIgMzE0MjMgbmlsIDMxNDIzIDMxNDI0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE0MjQgMzE0NjIgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMzE0NjIgMzE0NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTQ2MyAzMTQ3MyBuaWwgMzE0NzMgMzE0NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTQ3NCAzMTQ4MSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMTQ4MSAzMTQ4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNDgyIDMxNTA2IG5pbCAzMTUwNiAzMTUwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNTA3IDMxNTE4IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMxNTE4IDMxNTE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE1MTkgMzE1MjEgbmlsIDMxNTIxIDMxNTIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE1MjIgMzE1MzkgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzE1MzkgMzE1NDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTU0MCAzMTU1MiBuaWwgMzE1NTIgMzE1NTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTU1MyAzMTU1NyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMTU1NyAzMTU1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNTU4IDMxNTYwIG5pbCAzMTU2MCAzMTU2MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNTYxIDMxNTcxIChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDMxNTcxIDMxNTcyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE1NzIgMzE1ODQgbmlsIDMxNTg0IDMxNTg1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE1ODUgMzE1OTcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzE1OTcgMzE1OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTU5OCAzMTYxNCBuaWwgMzE2MTQgMzE2MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTYxNSAzMTYzNiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMTYzNiAzMTYzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNjM3IDMxNjUxIG5pbCAzMTY1MSAzMTY1MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNjUyIDMxNjcwIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMxNjcwIDMxNjcxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE2NzEgMzE2OTYgbmlsIDMxNjk2IDMxNjk3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE2OTcgMzE3MDYgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzE3MDYgMzE3MDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTcwNyAzMTcyMyBuaWwgMzE3MjMgMzE3MjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTcyNCAzMTcyOCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzE3MjggMzE3MjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTcyOSAzMTc0MyBuaWwgMzE3NDMgMzE3NDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTc0NCAzMTc0OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzE3NDggMzE3NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTc0OSAzMTc3NCBuaWwgMzE3NzQgMzE3NzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTc3NSAzMTc4MiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMTc4MiAzMTc4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxNzgzIDMxNzk5IG5pbCAzMTc5OSAzMTgwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxODAwIDMxODQ0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMTg0NCAzMTg0NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxODQ1IDMxODkzIG5pbCAzMTg5MyAzMTg5NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMxODk0IDMxOTQzIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDMxOTQzIDMxOTQ0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE5NDQgMzE5NTQgbmlsIDMxOTU0IDMxOTU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzE5NTUgMzE5NjIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzE5NjIgMzE5NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTk2MyAzMTk4NyBuaWwgMzE5ODcgMzE5ODggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMTk4OCAzMTk5OSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMTk5OSAzMjAwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMDAwIDMyMDAyIG5pbCAzMjAwMiAzMjAwMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMDAzIDMyMDEzIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMyMDEzIDMyMDE0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIwMTQgMzIwMjYgbmlsIDMyMDI2IDMyMDI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIwMjcgMzIwMzEgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzIwMzEgMzIwMzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjAzMiAzMjAzNCBuaWwgMzIwMzQgMzIwMzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjAzNSAzMjA0NSAoZmFjZSBmb250LWxvY2stdHlwZS1mYWNlKSAzMjA0NSAzMjA0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMDQ2IDMyMDU4IG5pbCAzMjA1OCAzMjA1OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMDU5IDMyMDcxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMyMDcxIDMyMDcyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIwNzIgMzIwODggbmlsIDMyMDg4IDMyMDg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIwODkgMzIwOTQgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzIwOTQgMzIwOTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjA5NSAzMjEwOSBuaWwgMzIxMDkgMzIxMTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjExMCAzMjEyMSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMjEyMSAzMjEyMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMTIyIDMyMTM2IG5pbCAzMjEzNiAzMjEzNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMTM3IDMyMTU4IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDMyMTU4IDMyMTU5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIxNTkgMzIxNzMgbmlsIDMyMTczIDMyMTc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIxNzQgMzIxOTIgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzIxOTIgMzIxOTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjE5MyAzMjIxOCBuaWwgMzIyMTggMzIyMTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjIxOSAzMjIzMiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMjIzMiAzMjIzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMjMzIDMyMjQ5IG5pbCAzMjI0OSAzMjI1MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyMjUwIDMyMjU5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMyMjU5IDMyMjYwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIyNjAgMzIyNzggbmlsIDMyMjc4IDMyMjc5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIyNzkgMzIyODMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMyMjgzIDMyMjg0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIyODQgMzIzMDAgbmlsIDMyMzAwIDMyMzAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzMDEgMzIzMDYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMyMzA2IDMyMzA3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzMDcgMzIzMjMgbmlsIDMyMzIzIDMyMzI0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzMjQgMzIzMzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMyMzMzIDMyMzM0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzMzQgMzIzNTAgbmlsIDMyMzUwIDMyMzUxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzNTEgMzIzNTcgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMyMzU3IDMyMzU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzNTggMzIzOTggbmlsIDMyMzk4IDMyMzk5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzIzOTkgMzI0MDYgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzI0MDYgMzI0MDcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjQwNyAzMjQyMyBuaWwgMzI0MjMgMzI0MjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjQyNCAzMjQ2MiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI0NjIgMzI0NjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjQ2MyAzMjQ3NyBuaWwgMzI0NzcgMzI0NzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjQ3OCAzMjUxNSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI1MTUgMzI1MTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjUxNiAzMjUzMCBuaWwgMzI1MzAgMzI1MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjUzMSAzMjU2OCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI1NjggMzI1NjkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjU2OSAzMjU4MyBuaWwgMzI1ODMgMzI1ODQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjU4NCAzMjYyMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI2MjAgMzI2MjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjYyMSAzMjYzNSBuaWwgMzI2MzUgMzI2MzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjYzNiAzMjY2NiAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI2NjYgMzI2NjcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjY2NyAzMjY4MSBuaWwgMzI2ODEgMzI2ODIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjY4MiAzMjcyMCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI3MjAgMzI3MjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjcyMSAzMjczNSBuaWwgMzI3MzUgMzI3MzYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjczNiAzMjc3MyAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzI3NzMgMzI3NzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjc3NCAzMjgyMiBuaWwgMzI4MjIgMzI4MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjgyMyAzMjgzOCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzMjgzOCAzMjgzOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyODM5IDMyODQ5IG5pbCAzMjg0OSAzMjg1MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyODUwIDMyODU3IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMyODU3IDMyODU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzI4NTggMzI4ODIgbmlsIDMyODgyIDMyODgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzI4ODMgMzI4OTQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzI4OTQgMzI4OTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjg5NSAzMjg5NyBuaWwgMzI4OTcgMzI4OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjg5OCAzMjkxMiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMjkxMiAzMjkxMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyOTEzIDMyOTI1IG5pbCAzMjkyNSAzMjkyNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyOTI2IDMyOTMwIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMyOTMwIDMyOTMxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzI5MzEgMzI5MzMgbmlsIDMyOTMzIDMyOTM0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzI5MzQgMzI5NDggKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMzI5NDggMzI5NDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjk0OSAzMjk2MSBuaWwgMzI5NjEgMzI5NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMjk2MiAzMjk2OSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMjk2OSAzMjk3MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyOTcwIDMyOTg2IG5pbCAzMjk4NiAzMjk4NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMyOTg3IDMzMDIyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzAyMiAzMzAyMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMDIzIDMzMDM3IG5pbCAzMzAzNyAzMzAzOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMDM4IDMzMDcyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzA3MiAzMzA3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMDczIDMzMDk4IG5pbCAzMzA5OCAzMzA5OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMDk5IDMzMTExIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMzMTExIDMzMTEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzMxMTIgMzMxMjggbmlsIDMzMTI4IDMzMTI5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzMxMjkgMzMxNTAgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzMxNTAgMzMxNTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzE1MSAzMzE3NiBuaWwgMzMxNzYgMzMxNzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzE3NyAzMzE4OSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMzE4OSAzMzE5MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMTkwIDMzMjA2IG5pbCAzMzIwNiAzMzIwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMjA3IDMzMjA5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzIwOSAzMzIzMiAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzMzIzMiAzMzIzOSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzMyMzkgMzMyNDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzI0MCAzMzI2NSBuaWwgMzMyNjUgMzMyNjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzI2NiAzMzI3MyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMzI3MyAzMzI3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMjc0IDMzMzA2IG5pbCAzMzMwNiAzMzMwNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMzA3IDMzMzE4IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMzMzE4IDMzMzE5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzMzMTkgMzMzMjEgbmlsIDMzMzIxIDMzMzIyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzMzMjIgMzMzNDIgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzMzNDIgMzMzNDMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzM0MyAzMzM1OSBuaWwgMzMzNTkgMzMzNjAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzM2MCAzMzM2NiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzMzM2NiAzMzM2NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMzY3IDMzMzg3IG5pbCAzMzM4NyAzMzM4OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzMzg4IDMzNDM0IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzQzNCAzMzQzNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNDM1IDMzNDUzIG5pbCAzMzQ1MyAzMzQ1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNDU0IDMzNTE5IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzUxOSAzMzUyMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNTIwIDMzNTUzIG5pbCAzMzU1MyAzMzU1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNTU0IDMzNTYxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMzNTYxIDMzNTYyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM1NjIgMzM1ODIgbmlsIDMzNTgyIDMzNTgzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM1ODMgMzM1ODUgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMzNTg1IDMzNjA4IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDMzNjA4IDMzNjQ3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzY0NyAzMzY0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNjQ4IDMzNjgxIG5pbCAzMzY4MSAzMzY4MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNjgyIDMzNjg4IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMzNjg4IDMzNjg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM2ODkgMzM3MDkgbmlsIDMzNzA5IDMzNzEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM3MTAgMzM3MTYgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMzNzE2IDMzNzE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM3MTcgMzM3MzUgbmlsIDMzNzM1IDMzNzM2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM3MzYgMzM3MzggKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMzNzM4IDMzNzQzIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDMzNzQzIDMzNzg4IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzc4OCAzMzc4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzNzg5IDMzODA3IG5pbCAzMzgwNyAzMzgwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzODA4IDMzODEwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzgxMCAzMzgxMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzODExIDMzODI5IG5pbCAzMzgyOSAzMzgzMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzODMwIDMzODMzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzMzgzMyAzMzg0MCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzMzg0MCAzMzg0MSAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzM4NDEgMzM4NDIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzg0MiAzMzg2MCBuaWwgMzM4NjAgMzM4NjEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzg2MSAzMzg2NCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzM4NjQgMzM4NzIgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMzM4NzIgMzM4NzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDMzODczIDMzODc0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM4NzQgMzM5NTIgbmlsIDMzOTUyIDMzOTUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM5NTMgMzM5NjQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzM5NjQgMzM5NjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzk2NSAzMzk2NyBuaWwgMzM5NjcgMzM5NjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzMzk2OCAzMzk3OCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzMzk3OCAzMzk3OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzOTc5IDMzOTkxIG5pbCAzMzk5MSAzMzk5MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDMzOTkyIDMzOTk2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDMzOTk2IDMzOTk3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzM5OTcgMzM5OTkgbmlsIDMzOTk5IDM0MDAwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQwMDAgMzQwMDQgKGZhY2UgZm9udC1sb2NrLXR5cGUtZmFjZSkgMzQwMDQgMzQwMDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDAwNSAzNDAxNyBuaWwgMzQwMTcgMzQwMTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDAxOCAzNDAzMCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNDAzMCAzNDAzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MDMxIDM0MDM1IG5pbCAzNDAzNSAzNDAzNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MDM2IDM0MDYyIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM0MDYyIDM0MDYzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQwNjMgMzQwNzcgbmlsIDM0MDc3IDM0MDc4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQwNzggMzQwODcgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzQwODcgMzQwODggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDA4OCAzNDEwNCBuaWwgMzQxMDQgMzQxMDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDEwNSAzNDExNyAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzNDExNyAzNDExOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MTE4IDM0MTIwIG5pbCAzNDEyMCAzNDEyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MTIxIDM0MTI2IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDM0MTI2IDM0MTI3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQxMjcgMzQxNDEgbmlsIDM0MTQxIDM0MTQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQxNDIgMzQxNTMgKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMzQxNTMgMzQxNTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDE1NCAzNDE1NiBuaWwgMzQxNTYgMzQxNTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDE1NyAzNDE3NCAoZmFjZSBmb250LWxvY2stdmFyaWFibGUtbmFtZS1mYWNlKSAzNDE3NCAzNDE3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MTc1IDM0MjAwIG5pbCAzNDIwMCAzNDIwMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MjAxIDM0MjA5IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM0MjA5IDM0MjEwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQyMTAgMzQyMTQgbmlsIDM0MjE0IDM0MjE1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQyMTUgMzQyMzMgKGZhY2UgZm9udC1sb2NrLWNvbnN0YW50LWZhY2UpIDM0MjMzIDM0MjM0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQyMzQgMzQyNjggbmlsIDM0MjY4IDM0Mjg3IChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDM0Mjg3IDM0MjkzIG5pbCAzNDI5MyAzNDM2NSAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAzNDM2NSAzNDM3MSBuaWwgMzQzNzEgMzQzNzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDM3MiAzNDM3OSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNDM3OSAzNDM4MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0MzgwIDM0NDA0IG5pbCAzNDQwNCAzNDQwNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NDA1IDM0NDE2IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM0NDE2IDM0NDE3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ0MTcgMzQ0MTkgbmlsIDM0NDE5IDM0NDIwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ0MjAgMzQ0MzYgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzQ0MzYgMzQ0MzcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDQzNyAzNDQ0OSBuaWwgMzQ0NDkgMzQ0NTAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDQ1MCAzNDQ1NCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNDQ1NCAzNDQ1NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NDU1IDM0NDU3IG5pbCAzNDQ1NyAzNDQ1OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NDU4IDM0NDY4IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDM0NDY4IDM0NDY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ0NjkgMzQ0ODEgbmlsIDM0NDgxIDM0NDgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ0ODIgMzQ0OTQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzQ0OTQgMzQ0OTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDQ5NSAzNDUxMSBuaWwgMzQ1MTEgMzQ1MTIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDUxMiAzNDUxNyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNDUxNyAzNDUxOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NTE4IDM0NTMyIG5pbCAzNDUzMiAzNDUzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NTMzIDM0NTUxIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM0NTUxIDM0NTUyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ1NTIgMzQ1NjYgbmlsIDM0NTY2IDM0NTY3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ1NjcgMzQ1ODggKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzQ1ODggMzQ1ODkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDU4OSAzNDYwMyBuaWwgMzQ2MDMgMzQ2MDQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDYwNCAzNDYzMCAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNDYzMCAzNDYzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NjMxIDM0NjQ1IG5pbCAzNDY0NSAzNDY0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NjQ2IDM0NjgwIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM0NjgwIDM0NjgxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ2ODEgMzQ2OTUgbmlsIDM0Njk1IDM0Njk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ2OTYgMzQ3MzAgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzQ3MzAgMzQ3MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDczMSAzNDc0NSBuaWwgMzQ3NDUgMzQ3NDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDc0NiAzNDc3MiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNDc3MiAzNDc3MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0NzczIDM0Nzg3IG5pbCAzNDc4NyAzNDc4OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0Nzg4IDM0ODI3IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM0ODI3IDM0ODI4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ4MjggMzQ4NTMgbmlsIDM0ODUzIDM0ODU0IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ4NTQgMzQ4NjEgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzQ4NjEgMzQ4NjIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDg2MiAzNDg3OCBuaWwgMzQ4NzggMzQ4NzkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDg3OSAzNDkwNCAoZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZSkgMzQ5MDQgMzQ5MDUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDkwNSAzNDkzMCBuaWwgMzQ5MzAgMzQ5MzEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNDkzMSAzNDk0MSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNDk0MSAzNDk0MiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0OTQyIDM0OTU5IG5pbCAzNDk1OSAzNDk2MCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM0OTYwIDM0OTgxIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDM0OTgxIDM0OTgyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzQ5ODIgMzUwMDAgbmlsIDM1MDAwIDM1MDAxIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzUwMDEgMzUwMTMgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzUwMTMgMzUwMTQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTAxNCAzNTAzNCBuaWwgMzUwMzQgMzUwNzcgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkgMzUwNzcgMzUwOTMgbmlsIDM1MDkzIDM1MTIzIChmYWNlIGZvbnQtbG9jay1jb21tZW50LWZhY2UpIDM1MTIzIDM1MTM5IG5pbCAzNTEzOSAzNTE2NCAoZmFjZSBmb250LWxvY2stY29tbWVudC1mYWNlKSAzNTE2NCAzNTE4MCBuaWwgMzUxODAgMzUxOTQgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkgMzUxOTQgMzUyMTAgbmlsIDM1MjEwIDM1MjExIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzUyMTEgMzUyNDAgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzUyNDAgMzUyNDEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTI0MSAzNTI3NCBuaWwgMzUyNzQgMzUyNzUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTI3NSAzNTI4NSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNTI4NSAzNTI4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1Mjg2IDM1MzA3IG5pbCAzNTMwNyAzNTMwOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1MzA4IDM1MzI5IChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDM1MzI5IDM1MzMwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzUzMzAgMzUzNTIgbmlsIDM1MzUyIDM1MzUzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzUzNTMgMzUzNjUgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzUzNjUgMzUzNjYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTM2NiAzNTM5MCBuaWwgMzUzOTAgMzUzOTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTM5MSAzNTQzMiAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNTQzMiAzNTQzMyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1NDMzIDM1NTUzIG5pbCAzNTU1MyAzNTU1NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1NTU0IDM1NTY1IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM1NTY1IDM1NTY2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU1NjYgMzU1NjggbmlsIDM1NTY4IDM1NTY5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU1NjkgMzU1OTIgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzU1OTIgMzU1OTMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTU5MyAzNTYwNSBuaWwgMzU2MDUgMzU2MDYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTYwNiAzNTYxMCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNTYxMCAzNTYxMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1NjExIDM1NjEzIG5pbCAzNTYxMyAzNTYxNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1NjE0IDM1NjI0IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDM1NjI0IDM1NjI1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU2MjUgMzU2MzcgbmlsIDM1NjM3IDM1NjM4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU2MzggMzU2NTAgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzU2NTAgMzU2NTEgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTY1MSAzNTY2NyBuaWwgMzU2NjcgMzU2NjggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTY2OCAzNTY3MyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNTY3MyAzNTY3NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1Njc0IDM1Njg4IG5pbCAzNTY4OCAzNTY4OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1Njg5IDM1NzA3IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM1NzA3IDM1NzA4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU3MDggMzU3MjIgbmlsIDM1NzIyIDM1NzIzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU3MjMgMzU3NTcgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzU3NTcgMzU3NTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTc1OCAzNTc3MiBuaWwgMzU3NzIgMzU3NzMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTc3MyAzNTc5OSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNTc5OSAzNTgwMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1ODAwIDM1ODE0IG5pbCAzNTgxNCAzNTgxNSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1ODE1IDM1ODQxIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM1ODQxIDM1ODQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU4NDIgMzU4NTYgbmlsIDM1ODU2IDM1ODU3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzU4NTcgMzU4OTYgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzU4OTYgMzU4OTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTg5NyAzNTkyMiBuaWwgMzU5MjIgMzU5MjMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNTkyMyAzNTkzMCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNTkzMCAzNTkzMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1OTMxIDM1OTQ3IG5pbCAzNTk0NyAzNTk0OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1OTQ4IDM1OTcwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNTk3MCAzNTk3MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1OTcxIDM1OTg1IG5pbCAzNTk4NSAzNTk4NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM1OTg2IDM2MDExIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNjAxMSAzNjAxMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MDEyIDM2MDI2IG5pbCAzNjAyNiAzNjAyNyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MDI3IDM2MDYwIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNjA2MCAzNjA2MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MDYxIDM2MDc1IG5pbCAzNjA3NSAzNjA3NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MDc2IDM2MTE3IChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNjExNyAzNjExOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MTE4IDM2MTQzIG5pbCAzNjE0MyAzNjE0NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MTQ0IDM2MTU0IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM2MTU0IDM2MTU1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzYxNTUgMzYxNzIgbmlsIDM2MTcyIDM2MTczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzYxNzMgMzYxOTggKGZhY2UgZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkgMzYxOTggMzYxOTkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjE5OSAzNjIxNyBuaWwgMzYyMTcgMzYyMTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjIxOCAzNjIyOCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNjIyOCAzNjIyOSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MjI5IDM2MjUwIG5pbCAzNjI1MCAzNjI1MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2MjUxIDM2MjcyIChmYWNlIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpIDM2MjcyIDM2MjczIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzYyNzMgMzYyOTUgbmlsIDM2Mjk1IDM2Mjk2IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzYyOTYgMzYzMDggKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzYzMDggMzYzMDkgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjMwOSAzNjMzMyBuaWwgMzYzMzMgMzYzMzQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjMzNCAzNjM3NSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNjM3NSAzNjM3NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2Mzc2IDM2NDk2IG5pbCAzNjQ5NiAzNjQ5NyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NDk3IDM2NTA4IChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM2NTA4IDM2NTA5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY1MDkgMzY1MTEgbmlsIDM2NTExIDM2NTEyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY1MTIgMzY1MjQgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzY1MjQgMzY1MjUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjUyNSAzNjUzNyBuaWwgMzY1MzcgMzY1MzggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjUzOCAzNjU0MiAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNjU0MiAzNjU0MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NTQzIDM2NTQ1IG5pbCAzNjU0NSAzNjU0NiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NTQ2IDM2NTU2IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDM2NTU2IDM2NTU3IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY1NTcgMzY1NjkgbmlsIDM2NTY5IDM2NTcwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY1NzAgMzY1ODIgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzY1ODIgMzY1ODMgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjU4MyAzNjU5OSBuaWwgMzY1OTkgMzY2MDAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjYwMCAzNjYwNSAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNjYwNSAzNjYwNiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NjA2IDM2NjIwIG5pbCAzNjYyMCAzNjYyMSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NjIxIDM2NjQyIChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM2NjQyIDM2NjQzIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY2NDMgMzY2NTcgbmlsIDM2NjU3IDM2NjU4IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY2NTggMzY2OTcgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzY2OTcgMzY2OTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjY5OCAzNjcyMyBuaWwgMzY3MjMgMzY3MjQgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjcyNCAzNjczMSAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNjczMSAzNjczMiAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NzMyIDM2NzQ4IG5pbCAzNjc0OCAzNjc0OSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NzQ5IDM2NzgyIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNjc4MiAzNjc4MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2NzgzIDM2ODI5IG5pbCAzNjgyOSAzNjgzMCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2ODMwIDM2ODQxIChmYWNlIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpIDM2ODQxIDM2ODQyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY4NDIgMzY4NDQgbmlsIDM2ODQ0IDM2ODQ1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY4NDUgMzY4NTYgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzY4NTYgMzY4NTcgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjg1NyAzNjg2OSBuaWwgMzY4NjkgMzY4NzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjg3MCAzNjg3NCAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNjg3NCAzNjg3NSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2ODc1IDM2ODc3IG5pbCAzNjg3NyAzNjg3OCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2ODc4IDM2ODg4IChmYWNlIGZvbnQtbG9jay10eXBlLWZhY2UpIDM2ODg4IDM2ODg5IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY4ODkgMzY5MDEgbmlsIDM2OTAxIDM2OTAyIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY5MDIgMzY5MTQgKGZhY2UgZm9udC1sb2NrLWtleXdvcmQtZmFjZSkgMzY5MTQgMzY5MTUgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjkxNSAzNjkzMSBuaWwgMzY5MzEgMzY5MzIgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNjkzMiAzNjkzNyAoZmFjZSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKSAzNjkzNyAzNjkzOCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2OTM4IDM2OTUyIG5pbCAzNjk1MiAzNjk1MyAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM2OTUzIDM2OTc0IChmYWNlIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpIDM2OTc0IDM2OTc1IChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY5NzUgMzY5ODkgbmlsIDM2OTg5IDM2OTkwIChmYWNlIGZvbnQtbG9jay1zdHJpbmctZmFjZSkgMzY5OTAgMzcwMjkgKGZhY2UgZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkgMzcwMjkgMzcwMzAgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNzAzMCAzNzA1NSBuaWwgMzcwNTUgMzcwNTYgKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlKSAzNzA1NiAzNzA2MyAoZmFjZSBmb250LWxvY2sta2V5d29yZC1mYWNlKSAzNzA2MyAzNzA2NCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM3MDY0IDM3MDgwIG5pbCAzNzA4MCAzNzA4MSAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM3MDgxIDM3MTEzIChmYWNlIGZvbnQtbG9jay1jb25zdGFudC1mYWNlKSAzNzExMyAzNzExNCAoZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UpIDM3MTE0IDM3MTYzIG5pbCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2d5cC90b29scy9maXh1cF9kZXAucHkgYi90b29scy9neXAvdG9vbHMvZml4dXBfZGVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0NzgyZGMyLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9maXh1cF9kZXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24gLVMKLSMgQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBXZSBoYXZlIHRvIGZpeHVwIHRoZSBkZXBzIG91dHB1dCBpbiBhIGZldyB3YXlzLgotIyAoMSkgdGhlIGZpbGUgb3V0cHV0IHNob3VsZCBtZW50aW9uIHRoZSBwcm9wZXIgLm8gZmlsZS4KLSMgY2NhY2hlIG9yIGRpc3RjYyBsb3NlIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQsIHNvIHdlIGNvbnZlcnQgYSBydWxlIG9mCi0jIHRoZSBmb3JtOgotIyAgIGZvb2Jhci5vOiBERVAxIERFUDIKLSMgaW50bwotIyAgIHBhdGgvdG8vZm9vYmFyLm86IERFUDEgREVQMgotIyAoMikgd2Ugd2FudCBtaXNzaW5nIGZpbGVzIG5vdCB0byBjYXVzZSB1cyB0byBmYWlsIHRvIGJ1aWxkLgotIyBXZSB3YW50IHRvIHJld3JpdGUKLSMgICBmb29iYXIubzogREVQMSBERVAyIFxcCi0jICAgICAgICAgICAgICAgREVQMwotIyB0bwotIyAgIERFUDE6Ci0jICAgREVQMjoKLSMgICBERVAzOgotIyBzbyBpZiB0aGUgZmlsZXMgYXJlIG1pc3NpbmcsIHRoZXkncmUganVzdCBjb25zaWRlcmVkIHBob255IHJ1bGVzLgotIyBXZSBoYXZlIHRvIGRvIHNvbWUgcHJldHR5IGluc2FuZSBlc2NhcGluZyB0byBnZXQgdGhvc2UgYmFja3NsYXNoZXMKLSMgYW5kIGRvbGxhciBzaWducyBwYXN0IG1ha2UsIHRoZSBzaGVsbCwgYW5kIHNlZCBhdCB0aGUgc2FtZSB0aW1lLgotIyBEb2Vzbid0IHdvcmsgd2l0aCBzcGFjZXMsIGJ1dCB0aGF0J3MgZmluZTogLmQgZmlsZXMgaGF2ZSBzcGFjZXMgaW4KLSMgdGhlaXIgbmFtZXMgcmVwbGFjZWQgd2l0aCBvdGhlciBjaGFyYWN0ZXJzLgotCi0jIEFkZGl0aW9uYWxseSwgdGhpcyBpcyBkb25lIGluIFB5dGhvbiB0byBpbmNyZWFzZSBmbGV4aWJpbGl0eSBhbmQgdG8KLSMgc3BlZWQgdXAgdGhlIHByb2Nlc3Mgb24gY3lnd2luLCB3aGVyZSBmb3JrKCkgaXMgdmVyeSBzbG93IGFuZCBvbmUKLSMgc2NyaXB0IGNhbiBiZSBtdWNoIGZhc3RlciB0aGFuIG1hbnkgc21hbGwgdXRpbGl0aWVzIGNoYWluZWQgdG9nZXRoZXIuCi0KLWltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLQotaWYgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgotICBpbXBvcnQgY3lncGF0aAotICBpbXBvcnQgbnRwYXRoCi0KLWRlZiBtYWluKHJhd19kZXBmaWxlX3BhdGgsIHByb2Nlc3NlZF9kZXBmaWxlX3BhdGgsIHRhcmdldF9wYXRoKToKLSAgIyBpdCdzIG9rYXkgaWYgaXQgZG9lc24ndCBleGlzdC4KLSAgIyBtYXliZSB0aGVyZSB3ZXJlIG5vICNpbmNsdWRlIGRpcmVjdGl2ZXMuCi0gIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhyYXdfZGVwZmlsZV9wYXRoKToKLSAgICByZXR1cm4KLQotICByYXdfZGVwcyA9IGZpbGUocmF3X2RlcGZpbGVfcGF0aCkucmVhZGxpbmVzKCkKLSAgY3dkID0gb3MucGF0aC5yZWFscGF0aChvcy5nZXRjd2QoKSkKLSAgcHJvY2Vzc2VkX2RlcHMgPSBmaXh1cF9kZXAocmF3X2RlcHMsIHRhcmdldF9wYXRoLCBjd2QpCi0KLSAgZiA9IGZpbGUocHJvY2Vzc2VkX2RlcGZpbGVfcGF0aCwgJ3cnKQotICBmLndyaXRlKHByb2Nlc3NlZF9kZXBzKQotICBmLmNsb3NlKCkKLQotICAjIHJlbW92ZSB0aGUgcmF3IGZpbGUKLSAgb3MudW5saW5rKHJhd19kZXBmaWxlX3BhdGgpCi0KLWRlZiBjeWd3aW5fZml4X2RlcF9wYXRoKHBhdGgsIGN3ZCk6Ci0gICMgZml4ZXMgZGVwZW5kZW5jeSBwYXRocyBzbyB0aGF0IHRoZXkgY2FuIGJlIHRyYWNrZWQgYnkgb3VyIHN5c3RlbQotICAjIG1ha2VzIGFic29sdXRlIHBhdGhzIGludG8gcmVsYXRpdmUgcGF0aHMgaWYgdGhleSBhcmUgZGVzY2VuZGFudHMgb2YgY3dkLgotICBhc3NlcnQoc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nKQotICAKLSAgcGF0aCA9IGN5Z3BhdGgudG9fdW5peChwYXRoKQotICBpZiBwYXRoWzpsZW4oY3dkKV0gPT0gY3dkOgotICAgIHBhdGggPSBwYXRoW2xlbihjd2QpKzE6XQotCi0gICMgTmluamEgdGFyZ2V0cyBoYXZlICdcJ3Mgb24gQ3lnd2luLCBub3QgJy8ncy4KLSAgcGF0aCA9IG50cGF0aC5ub3JtcGF0aChwYXRoKS5yZXBsYWNlKCdcXCcsICdcXFxcJykKLQotICByZXR1cm4gcGF0aAotCi1kZWYgbGludXhfZml4X2RlcF9wYXRoKHApOgotICByZXR1cm4gcC5yZXBsYWNlKCdcXCcsICcvJykKLQotZGVmIGZpeHVwX2RlcChjb250ZW50cywgdGFyZ2V0X3BhdGgsIGN3ZCk6Ci0gICMgY29udGVudHMgaXMgYW4gYXJyYXkgb2YgbGluZXMgb2YgdGV4dCBmcm9tIHRoZSByYXcgZGVwIGZpbGUuCi0gICMgd2Ugd2lsbCByZXR1cm4gdGhlIHByb2Nlc3NlZCBkZXAgZmlsZS4KLQotICAjIFNvbWUgY29tcGlsZXJzIGdlbmVyYXRlIGVhY2ggZGVwZW5kZW5jeSBvbiBhIHNlcGFyYXRlIGxpbmUsCi0gICMgZS5nLgotICAjIHRhcmdldDogZGVwMAotICAjIHRhcmdldDogZGVwMQotICAjIFNvIGRldGVjdCB0aGF0LgotCi0gIGlmIGxlbihjb250ZW50cykgPiAxIGFuZCBjb250ZW50c1sxXS5maW5kKCc6JykgIT0gLTE6Ci0gICAgaXNfc2VwYXJhdGVfbGluZXMgPSAxCi0gIGVsc2U6Ci0gICAgaXNfc2VwYXJhdGVfbGluZXMgPSAwCi0KLSAgaWYgaXNfc2VwYXJhdGVfbGluZXM6Ci0gICAgZmlyc3Rfb2JqLCBmaXJzdF9kZXAgPSBjb250ZW50c1swXS5zcGxpdCgnOicsIDEpCi0gICAgZGVwcyA9IFtmaXJzdF9kZXAucnN0cmlwKCldCi0gICAgZm9yIGwgaW4gY29udGVudHM6Ci0gICAgICBvYmosIGRlcCA9IGwuc3BsaXQoJzonLCAxKQotCi0gICAgICAjIEZvciBub3cgYXNzdW1lIGV2ZXJ5IHRhcmdldCBpcyB0aGUgc2FtZS4KLSAgICAgICMgSWYgaXQncyBub3QsIHdlJ2xsIGhhdmUgdG8gZml4IHRoaXMgc2NyaXB0LgotICAgICAgaWYgb2JqICE9IGZpcnN0X29iajoKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkIHRhcmdldCB7MH0nLmZvcm1hdChvYmopKQotCi0gICAgICBkZXBzLmV4dGVuZChbZGVwLnJzdHJpcCgpXSkKLSAgZWxzZToKLSAgICAjIHN0cmlwIG5ld2xpbmVzCi0gICAgY29udGVudHMgPSBbIGkucnN0cmlwKCkgZm9yIGkgaW4gY29udGVudHMgXQotCi0gICAgIyBicmVhayB0aGUgY29udGVudHMgZG93biBpbnRvIHRoZSBvYmplY3QgYW5kIGl0cyBkZXBlbmRlbmNpZXMKLSAgICBvYmosIGZpcnN0X2RlcCA9IGNvbnRlbnRzWzBdLnNwbGl0KCc6JywgMSkKLSAgICBkZXBzID0gWyBmaXJzdF9kZXAgXQotICAgIGRlcHMuZXh0ZW5kKGNvbnRlbnRzWzE6XSkKLQotICAjIHRoZXNlIGRlcHMgc3RpbGwgaGF2ZSBzcGFjZXMgYXQgdGhlIGZyb250IGFuZAotICAjIChwb3RlbnRpYWxseSkgYmFja3NsYXNoZXMgYXQgdGhlIGVuZAotICBkZXBzID0gWyBpLnN0cmlwKCcgXHRcXCcpIGZvciBpIGluIGRlcHMgXQotCi0gICMgc29tZSBjb21waWxlcnMgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gc3lzdGVtIGluY2x1ZGVzIGFuZCBsb2NhbAotICAjIGluY2x1ZGVzIHNwZWNpZmllZCB3aXRoICNpbmNsdWRlIDwuLi4+LCBzbyB3ZSB3aWxsIG1ha2UgdGhhdCBjYWxsCi0gICMgYmFzZWQgb24gdGhlIHBhdGhzLiAgYW55IGFic29sdXRlIHBhdGhzIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBzeXN0ZW0KLSAgIyBpbmNsdWRlcyBhbmQgd2lsbCBiZSBmaWx0ZXJlZCBvdXQuCi0gIGRlcHMgPSBmaWx0ZXIobGFtYmRhIGk6IGxlbihpKSBhbmQgaVswXSAhPSAnLycsIGRlcHMpCi0KLSAgaWYgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgotICAgICMgc29tZSBjb21waWxlcnMgd2lsbCBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgd2l0aCBXaW5kb3dzIHBhdGhzLCB3aGljaAotICAgICMgY3lnd2luJ3MgbWFrZSBkb2Vzbid0IGxpa2UuICB0aGUgY29sb25zIGNvbmZ1c2UgaXQuCi0gICAgIyBBbHNvLCB3ZSBuZWVkIHRoZSBsaXN0ZWQgZGVwIGZpbGVzIHRvIG1hdGNoIHRoZSBmb3JtYXQgb2YgcGF0aHMKLSAgICAjIG91dHB1dCBieSBuaW5qYS5HeXBQYXRoVG9OaW5qYSgpIHNvIHRoYXQgZGVwZW5kZW5jeSB0YXJnZXQgbmFtZXMgbWF0Y2ggdXAKLSAgICAjIGJldHdlZW4gZ3lwL25pbmphIGFuZCB0aG9zZSBpbiB0aGUgZGVwIGZpbGUuCi0gICAgZGVwcyA9IFsgY3lnd2luX2ZpeF9kZXBfcGF0aChpLCBjd2QpIGZvciBpIGluIGRlcHMgXQotICBlbHNlOgotICAgICMgVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgY3Jvc3MtY29tcGlsZXJzIHRoYXQgbWlnaHQgZ2VuZXJhdGUKLSAgICAjIFdpbmRvd3Mtc3R5bGUgcGF0aHMuCi0gICAgIyBuaW5qYSBleHBlY3RzIGZvcndhcmRzIHNsYXNoZXMuCi0gICAgZGVwcyA9IFsgbGludXhfZml4X2RlcF9wYXRoKGkpIGZvciBpIGluIGRlcHMgXQotCi0gICMgbm93IHRoYXQgdGhlIGRhdGEgaXMgcHJlLXByb2Nlc3NlZCwgdGhlIGZvcm1hdHRpbmcgaXMgZWFzeS4KLSAgIyB1c2UgdGhlIHRhcmdldCBwYXRoIChmdWxsKSBpbnN0ZWFkIG9mIHdoYXQgdGhlIGNvbXBpbGVyIGdhdmUgdXMgaW4gIm9iaiIsCi0gICMgd2hpY2ggbWF5IGJlIG9ubHkgdGhlIGJhc2VuYW1lCi0gIHJldHVybiAiJXM6IFxcXG4iICUgdGFyZ2V0X3BhdGggKyBcCi0gICAgICAiIFxcXG4iLmpvaW4oWyAiICVzIiAlIGkgZm9yIGkgaW4gZGVwcyBdKSArICJcbiIgKyBcCi0gICAgICAiOlxuIi5qb2luKGRlcHMpICsgIjpcbiIKLQotbWFpbihzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0sIHN5cy5hcmd2WzNdKQotCmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvZ3JhcGh2aXoucHkgYi90b29scy9neXAvdG9vbHMvZ3JhcGh2aXoucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDMyNmFlMjIuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZ3lwL3Rvb2xzL2dyYXBodml6LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlVzaW5nIHRoZSBKU09OIGR1bXBlZCBieSB0aGUgZHVtcC1kZXBlbmRlbmN5LWpzb24gZ2VuZXJhdG9yLAotZ2VuZXJhdGUgaW5wdXQgc3VpdGFibGUgZm9yIGdyYXBodml6IHRvIHJlbmRlciBhIGRlcGVuZGVuY3kgZ3JhcGggb2YKLXRhcmdldHMuIiIiCi0KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGpzb24KLWltcG9ydCBzeXMKLQotCi1kZWYgUGFyc2VUYXJnZXQodGFyZ2V0KToKLSAgdGFyZ2V0LCBfLCBzdWZmaXggPSB0YXJnZXQucGFydGl0aW9uKCcjJykKLSAgZmlsZW5hbWUsIF8sIHRhcmdldCA9IHRhcmdldC5wYXJ0aXRpb24oJzonKQotICByZXR1cm4gZmlsZW5hbWUsIHRhcmdldCwgc3VmZml4Ci0KLQotZGVmIExvYWRFZGdlcyhmaWxlbmFtZSwgdGFyZ2V0cyk6Ci0gICIiIkxvYWQgdGhlIGVkZ2VzIG1hcCBmcm9tIHRoZSBkdW1wIGZpbGUsIGFuZCBmaWx0ZXIgaXQgdG8gb25seQotICBzaG93IHRhcmdldHMgaW4gfHRhcmdldHN8IGFuZCB0aGVpciBkZXBlZGVuZGVudHMuIiIiCi0KLSAgZmlsZSA9IG9wZW4oJ2R1bXAuanNvbicpCi0gIGVkZ2VzID0ganNvbi5sb2FkKGZpbGUpCi0gIGZpbGUuY2xvc2UoKQotCi0gICMgQ29weSBvdXQgb25seSB0aGUgZWRnZXMgd2UncmUgaW50ZXJlc3RlZCBpbiBmcm9tIHRoZSBmdWxsIGVkZ2UgbGlzdC4KLSAgdGFyZ2V0X2VkZ2VzID0ge30KLSAgdG9fdmlzaXQgPSB0YXJnZXRzWzpdCi0gIHdoaWxlIHRvX3Zpc2l0OgotICAgIHNyYyA9IHRvX3Zpc2l0LnBvcCgpCi0gICAgaWYgc3JjIGluIHRhcmdldF9lZGdlczoKLSAgICAgIGNvbnRpbnVlCi0gICAgdGFyZ2V0X2VkZ2VzW3NyY10gPSBlZGdlc1tzcmNdCi0gICAgdG9fdmlzaXQuZXh0ZW5kKGVkZ2VzW3NyY10pCi0KLSAgcmV0dXJuIHRhcmdldF9lZGdlcwotCi0KLWRlZiBXcml0ZUdyYXBoKGVkZ2VzKToKLSAgIiIiUHJpbnQgYSBncmFwaHZpeiBncmFwaCB0byBzdGRvdXQuCi0gIHxlZGdlc3wgaXMgYSBtYXAgb2YgdGFyZ2V0IHRvIGEgbGlzdCBvZiBvdGhlciB0YXJnZXRzIGl0IGRlcGVuZHMgb24uIiIiCi0KLSAgIyBCdWNrZXQgdGFyZ2V0cyBieSBmaWxlLgotICBmaWxlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCi0gIGZvciBzcmMsIGRzdCBpbiBlZGdlcy5pdGVtcygpOgotICAgIGJ1aWxkX2ZpbGUsIHRhcmdldF9uYW1lLCB0b29sc2V0ID0gUGFyc2VUYXJnZXQoc3JjKQotICAgIGZpbGVzW2J1aWxkX2ZpbGVdLmFwcGVuZChzcmMpCi0KLSAgcHJpbnQgJ2RpZ3JhcGggRCB7JwotICBwcmludCAnICBmb250c2l6ZT04JyAgIyBVc2VkIGJ5IHN1YmdyYXBocy4KLSAgcHJpbnQgJyAgbm9kZSBbZm9udHNpemU9OF0nCi0KLSAgIyBPdXRwdXQgbm9kZXMgYnkgZmlsZS4gIFdlIG11c3QgZmlyc3Qgd3JpdGUgb3V0IGVhY2ggbm9kZSB3aXRoaW4KLSAgIyBpdHMgZmlsZSBncm91cGluZyBiZWZvcmUgd3JpdGluZyBvdXQgYW55IGVkZ2VzIHRoYXQgbWF5IHJlZmVyCi0gICMgdG8gdGhvc2Ugbm9kZXMuCi0gIGZvciBmaWxlbmFtZSwgdGFyZ2V0cyBpbiBmaWxlcy5pdGVtcygpOgotICAgIGlmIGxlbih0YXJnZXRzKSA9PSAxOgotICAgICAgIyBJZiB0aGVyZSdzIG9ubHkgb25lIG5vZGUgZm9yIHRoaXMgZmlsZSwgc2ltcGxpZnkKLSAgICAgICMgdGhlIGRpc3BsYXkgYnkgbWFraW5nIGl0IGEgYm94IHdpdGhvdXQgYW4gaW50ZXJuYWwgbm9kZS4KLSAgICAgIHRhcmdldCA9IHRhcmdldHNbMF0KLSAgICAgIGJ1aWxkX2ZpbGUsIHRhcmdldF9uYW1lLCB0b29sc2V0ID0gUGFyc2VUYXJnZXQodGFyZ2V0KQotICAgICAgcHJpbnQgJyAgIiVzIiBbc2hhcGU9Ym94LCBsYWJlbD0iJXNcXG4lcyJdJyAlICh0YXJnZXQsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSkKLSAgICBlbHNlOgotICAgICAgIyBHcm91cCBtdWx0aXBsZSBub2RlcyB0b2dldGhlciBpbiBhIHN1YmdyYXBoLgotICAgICAgcHJpbnQgJyAgc3ViZ3JhcGggImNsdXN0ZXJfJXMiIHsnICUgZmlsZW5hbWUKLSAgICAgIHByaW50ICcgICAgbGFiZWwgPSAiJXMiJyAlIGZpbGVuYW1lCi0gICAgICBmb3IgdGFyZ2V0IGluIHRhcmdldHM6Ci0gICAgICAgIGJ1aWxkX2ZpbGUsIHRhcmdldF9uYW1lLCB0b29sc2V0ID0gUGFyc2VUYXJnZXQodGFyZ2V0KQotICAgICAgICBwcmludCAnICAgICIlcyIgW2xhYmVsPSIlcyJdJyAlICh0YXJnZXQsIHRhcmdldF9uYW1lKQotICAgICAgcHJpbnQgJyAgfScKLQotICAjIE5vdyB0aGF0IHdlJ3ZlIHBsYWNlZCBhbGwgdGhlIG5vZGVzIHdpdGhpbiBzdWJncmFwaHMsIG91dHB1dCBhbGwKLSAgIyB0aGUgZWRnZXMgYmV0d2VlbiBub2Rlcy4KLSAgZm9yIHNyYywgZHN0cyBpbiBlZGdlcy5pdGVtcygpOgotICAgIGZvciBkc3QgaW4gZHN0czoKLSAgICAgIHByaW50ICcgICIlcyIgLT4gIiVzIicgJSAoc3JjLCBkc3QpCi0KLSAgcHJpbnQgJ30nCi0KLQotZGVmIG1haW4oKToKLSAgaWYgbGVuKHN5cy5hcmd2KSA8IDI6Ci0gICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBfX2RvY19fCi0gICAgcHJpbnQgPj5zeXMuc3RkZXJyCi0gICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAndXNhZ2U6ICVzIHRhcmdldDEgdGFyZ2V0Mi4uLicgJSAoc3lzLmFyZ3ZbMF0pCi0gICAgcmV0dXJuIDEKLQotICBlZGdlcyA9IExvYWRFZGdlcygnZHVtcC5qc29uJywgc3lzLmFyZ3ZbMTpdKQotCi0gIFdyaXRlR3JhcGgoZWRnZXMpCi0gIHJldHVybiAwCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgc3lzLmV4aXQobWFpbigpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZ3lwL3Rvb2xzL3ByZXR0eV9neXAucHkgYi90b29scy9neXAvdG9vbHMvcHJldHR5X2d5cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzUxZDM1OC4uMDAwMDAwMAotLS0gYS90b29scy9neXAvdG9vbHMvcHJldHR5X2d5cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi0iIiJQcmV0dHktcHJpbnRzIHRoZSBjb250ZW50cyBvZiBhIEdZUCBmaWxlLiIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgcmUKLQotCi0jIFJlZ2V4IHRvIHJlbW92ZSBjb21tZW50cyB3aGVuIHdlJ3JlIGNvdW50aW5nIGJyYWNlcy4KLUNPTU1FTlRfUkUgPSByZS5jb21waWxlKHInXHMqIy4qJykKLQotIyBSZWdleCB0byByZW1vdmUgcXVvdGVkIHN0cmluZ3Mgd2hlbiB3ZSdyZSBjb3VudGluZyBicmFjZXMuCi0jIEl0IHRha2VzIGludG8gYWNjb3VudCBxdW90ZWQgcXVvdGVzLCBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBxdW90ZXMgbWF0Y2guCi0jIE5PVEU6IEl0IGRvZXMgbm90IGhhbmRsZSBxdW90ZXMgdGhhdCBzcGFuIG1vcmUgdGhhbiBvbmUgbGluZSwgb3IKLSMgY2FzZXMgd2hlcmUgYW4gZXNjYXBlZCBxdW90ZSBpcyBwcmVjZWVkZWQgYnkgYW4gZXNjYXBlZCBiYWNrc2xhc2guCi1RVU9URV9SRV9TVFIgPSByJyg/UDxxPltcJyJdKSguKj8pKD88IVteXFxdW1xcXSkoP1A9cSknCi1RVU9URV9SRSA9IHJlLmNvbXBpbGUoUVVPVEVfUkVfU1RSKQotCi0KLWRlZiBjb21tZW50X3JlcGxhY2UobWF0Y2hvYmopOgotICByZXR1cm4gbWF0Y2hvYmouZ3JvdXAoMSkgKyBtYXRjaG9iai5ncm91cCgyKSArICcjJyAqIGxlbihtYXRjaG9iai5ncm91cCgzKSkKLQotCi1kZWYgbWFza19jb21tZW50cyhpbnB1dCk6Ci0gICIiIk1hc2sgdGhlIHF1b3RlZCBzdHJpbmdzIHNvIHdlIHNraXAgYnJhY2VzIGluc2lkZSBxdW90ZWQgc3RyaW5ncy4iIiIKLSAgc2VhcmNoX3JlID0gcmUuY29tcGlsZShyJyguKj8pKCMpKC4qKScpCi0gIHJldHVybiBbc2VhcmNoX3JlLnN1Yihjb21tZW50X3JlcGxhY2UsIGxpbmUpIGZvciBsaW5lIGluIGlucHV0XQotCi0KLWRlZiBxdW90ZV9yZXBsYWNlKG1hdGNob2JqKToKLSAgcmV0dXJuICIlcyVzJXMlcyIgJSAobWF0Y2hvYmouZ3JvdXAoMSksCi0gICAgICAgICAgICAgICAgICAgICAgIG1hdGNob2JqLmdyb3VwKDIpLAotICAgICAgICAgICAgICAgICAgICAgICAneCcqbGVuKG1hdGNob2JqLmdyb3VwKDMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hvYmouZ3JvdXAoMikpCi0KLQotZGVmIG1hc2tfcXVvdGVzKGlucHV0KToKLSAgIiIiTWFzayB0aGUgcXVvdGVkIHN0cmluZ3Mgc28gd2Ugc2tpcCBicmFjZXMgaW5zaWRlIHF1b3RlZCBzdHJpbmdzLiIiIgotICBzZWFyY2hfcmUgPSByZS5jb21waWxlKHInKC4qPyknICsgUVVPVEVfUkVfU1RSKQotICByZXR1cm4gW3NlYXJjaF9yZS5zdWIocXVvdGVfcmVwbGFjZSwgbGluZSkgZm9yIGxpbmUgaW4gaW5wdXRdCi0KLQotZGVmIGRvX3NwbGl0KGlucHV0LCBtYXNrZWRfaW5wdXQsIHNlYXJjaF9yZSk6Ci0gIG91dHB1dCA9IFtdCi0gIG1hc2tfb3V0cHV0ID0gW10KLSAgZm9yIChsaW5lLCBtYXNrZWRfbGluZSkgaW4gemlwKGlucHV0LCBtYXNrZWRfaW5wdXQpOgotICAgIG0gPSBzZWFyY2hfcmUubWF0Y2gobWFza2VkX2xpbmUpCi0gICAgd2hpbGUgbToKLSAgICAgIHNwbGl0ID0gbGVuKG0uZ3JvdXAoMSkpCi0gICAgICBsaW5lID0gbGluZVs6c3BsaXRdICsgcidcbicgKyBsaW5lW3NwbGl0Ol0KLSAgICAgIG1hc2tlZF9saW5lID0gbWFza2VkX2xpbmVbOnNwbGl0XSArIHInXG4nICsgbWFza2VkX2xpbmVbc3BsaXQ6XQotICAgICAgbSA9IHNlYXJjaF9yZS5tYXRjaChtYXNrZWRfbGluZSkKLSAgICBvdXRwdXQuZXh0ZW5kKGxpbmUuc3BsaXQocidcbicpKQotICAgIG1hc2tfb3V0cHV0LmV4dGVuZChtYXNrZWRfbGluZS5zcGxpdChyJ1xuJykpCi0gIHJldHVybiAob3V0cHV0LCBtYXNrX291dHB1dCkKLQotCi1kZWYgc3BsaXRfZG91YmxlX2JyYWNlcyhpbnB1dCk6Ci0gICIiIk1hc2tzIG91dCB0aGUgcXVvdGVzIGFuZCBjb21tZW50cywgYW5kIHRoZW4gc3BsaXRzIGFwcHJvcHJpYXRlCi0gIGxpbmVzIChsaW5lcyB0aGF0IG1hdGNoZSB0aGUgZG91YmxlXypfYnJhY2UgcmUncyBhYm92ZSkgYmVmb3JlCi0gIGluZGVudGluZyB0aGVtIGJlbG93LgotCi0gIFRoZXNlIGFyZSB1c2VkIHRvIHNwbGl0IGxpbmVzIHdoaWNoIGhhdmUgbXVsdGlwbGUgYnJhY2VzIG9uIHRoZW0sIHNvCi0gIHRoYXQgdGhlIGluZGVudGF0aW9uIGxvb2tzIHByZXR0aWVyIHdoZW4gYWxsIGxhaWQgb3V0IChlLmcuIGNsb3NpbmcKLSAgYnJhY2VzIG1ha2UgYSBuaWNlIGRpYWdvbmFsIGxpbmUpLgotICAiIiIKLSAgZG91YmxlX29wZW5fYnJhY2VfcmUgPSByZS5jb21waWxlKHInKC4qP1tcW1x7XCgsXSkoXHMqKShbXFtce1woXSknKQotICBkb3VibGVfY2xvc2VfYnJhY2VfcmUgPSByZS5jb21waWxlKHInKC4qP1tcXVx9XCldLD8pKFxzKikoW1xdXH1cKV0pJykKLQotICBtYXNrZWRfaW5wdXQgPSBtYXNrX3F1b3RlcyhpbnB1dCkKLSAgbWFza2VkX2lucHV0ID0gbWFza19jb21tZW50cyhtYXNrZWRfaW5wdXQpCi0KLSAgKG91dHB1dCwgbWFza19vdXRwdXQpID0gZG9fc3BsaXQoaW5wdXQsIG1hc2tlZF9pbnB1dCwgZG91YmxlX29wZW5fYnJhY2VfcmUpCi0gIChvdXRwdXQsIG1hc2tfb3V0cHV0KSA9IGRvX3NwbGl0KG91dHB1dCwgbWFza19vdXRwdXQsIGRvdWJsZV9jbG9zZV9icmFjZV9yZSkKLQotICByZXR1cm4gb3V0cHV0Ci0KLQotZGVmIGNvdW50X2JyYWNlcyhsaW5lKToKLSAgIiIia2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBicmFjZXMgb24gYSBnaXZlbiBsaW5lIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuCi0KLSAgSXQgc3RhcnRzIGF0IHplcm8gYW5kIHN1YnRyYWN0cyBmb3IgY2xvc2VkIGJyYWNlcywgYW5kIGFkZHMgZm9yIG9wZW4gYnJhY2VzLgotICAiIiIKLSAgb3Blbl9icmFjZXMgPSBbJ1snLCAnKCcsICd7J10KLSAgY2xvc2VfYnJhY2VzID0gWyddJywgJyknLCAnfSddCi0gIGNsb3NpbmdfcHJlZml4X3JlID0gcmUuY29tcGlsZShyJyguKj9bXlxzXF1cfVwpXSsuKj8pKFtcXVx9XCldLD8pXHMqJCcpCi0gIGNudCA9IDAKLSAgc3RyaXBsaW5lID0gQ09NTUVOVF9SRS5zdWIocicnLCBsaW5lKQotICBzdHJpcGxpbmUgPSBRVU9URV9SRS5zdWIociInJyIsIHN0cmlwbGluZSkKLSAgZm9yIGNoYXIgaW4gc3RyaXBsaW5lOgotICAgIGZvciBicmFjZSBpbiBvcGVuX2JyYWNlczoKLSAgICAgIGlmIGNoYXIgPT0gYnJhY2U6Ci0gICAgICAgIGNudCArPSAxCi0gICAgZm9yIGJyYWNlIGluIGNsb3NlX2JyYWNlczoKLSAgICAgIGlmIGNoYXIgPT0gYnJhY2U6Ci0gICAgICAgIGNudCAtPSAxCi0KLSAgYWZ0ZXIgPSBGYWxzZQotICBpZiBjbnQgPiAwOgotICAgIGFmdGVyID0gVHJ1ZQotCi0gICMgVGhpcyBjYXRjaGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBjbG9zaW5nIGJyYWNlIGhhdmluZyBzb21ldGhpbmcKLSAgIyBvdGhlciB0aGFuIGp1c3Qgd2hpdGVzcGFjZSBhaGVhZCBvZiBpdCAtLSB3ZSBkb24ndCB3YW50IHRvCi0gICMgdW5pbmRlbnQgdGhhdCB1bnRpbCBhZnRlciB0aGlzIGxpbmUgaXMgcHJpbnRlZCBzbyBpdCBzdGF5cyB3aXRoCi0gICMgdGhlIHByZXZpb3VzIGluZGVudGF0aW9uIGxldmVsLgotICBpZiBjbnQgPCAwIGFuZCBjbG9zaW5nX3ByZWZpeF9yZS5tYXRjaChzdHJpcGxpbmUpOgotICAgIGFmdGVyID0gVHJ1ZQotICByZXR1cm4gKGNudCwgYWZ0ZXIpCi0KLQotZGVmIHByZXR0eXByaW50X2lucHV0KGxpbmVzKToKLSAgIiIiRG9lcyB0aGUgbWFpbiB3b3JrIG9mIGluZGVudGluZyB0aGUgaW5wdXQgYmFzZWQgb24gdGhlIGJyYWNlIGNvdW50cy4iIiIKLSAgaW5kZW50ID0gMAotICBiYXNpY19vZmZzZXQgPSAyCi0gIGxhc3RfbGluZSA9ICIiCi0gIGZvciBsaW5lIGluIGxpbmVzOgotICAgIGlmIENPTU1FTlRfUkUubWF0Y2gobGluZSk6Ci0gICAgICBwcmludCBsaW5lCi0gICAgZWxzZToKLSAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCdcclxuXHQgJykgICMgT3RoZXJ3aXNlIGRvZXNuJ3Qgc3RyaXAgXHIgb24gVW5peC4KLSAgICAgIGlmIGxlbihsaW5lKSA+IDA6Ci0gICAgICAgIChicmFjZV9kaWZmLCBhZnRlcikgPSBjb3VudF9icmFjZXMobGluZSkKLSAgICAgICAgaWYgYnJhY2VfZGlmZiAhPSAwOgotICAgICAgICAgIGlmIGFmdGVyOgotICAgICAgICAgICAgcHJpbnQgIiAiICogKGJhc2ljX29mZnNldCAqIGluZGVudCkgKyBsaW5lCi0gICAgICAgICAgICBpbmRlbnQgKz0gYnJhY2VfZGlmZgotICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbmRlbnQgKz0gYnJhY2VfZGlmZgotICAgICAgICAgICAgcHJpbnQgIiAiICogKGJhc2ljX29mZnNldCAqIGluZGVudCkgKyBsaW5lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgcHJpbnQgIiAiICogKGJhc2ljX29mZnNldCAqIGluZGVudCkgKyBsaW5lCi0gICAgICBlbHNlOgotICAgICAgICBwcmludCAiIgotICAgICAgbGFzdF9saW5lID0gbGluZQotCi0KLWRlZiBtYWluKCk6Ci0gIGlmIGxlbihzeXMuYXJndikgPiAxOgotICAgIGRhdGEgPSBvcGVuKHN5cy5hcmd2WzFdKS5yZWFkKCkuc3BsaXRsaW5lcygpCi0gIGVsc2U6Ci0gICAgZGF0YSA9IHN5cy5zdGRpbi5yZWFkKCkuc3BsaXRsaW5lcygpCi0gICMgU3BsaXQgdXAgdGhlIGRvdWJsZSBicmFjZXMuCi0gIGxpbmVzID0gc3BsaXRfZG91YmxlX2JyYWNlcyhkYXRhKQotCi0gICMgSW5kZW50IGFuZCBwcmludCB0aGUgb3V0cHV0LgotICBwcmV0dHlwcmludF9pbnB1dChsaW5lcykKLSAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvcHJldHR5X3Nsbi5weSBiL3Rvb2xzL2d5cC90b29scy9wcmV0dHlfc2xuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzMTk1ZDg1Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9wcmV0dHlfc2xuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIlByaW50cyB0aGUgaW5mb3JtYXRpb24gaW4gYSBzbG4gZmlsZSBpbiBhIGRpZmZhYmxlIHdheS4KLQotICAgSXQgZmlyc3Qgb3V0cHV0cyBlYWNoIHByb2plY3RzIGluIGFscGhhYmV0aWNhbCBvcmRlciB3aXRoIHRoZWlyCi0gICBkZXBlbmRlbmNpZXMuCi0KLSAgIFRoZW4gaXQgb3V0cHV0cyBhIHBvc3NpYmxlIGJ1aWxkIG9yZGVyLgotIiIiCi0KLV9fYXV0aG9yX18gPSAnbnN5bHZhaW4gKE5pY29sYXMgU3lsdmFpbiknCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgcHJldHR5X3ZjcHJvagotCi1kZWYgQnVpbGRQcm9qZWN0KHByb2plY3QsIGJ1aWx0LCBwcm9qZWN0cywgZGVwcyk6Ci0gICMgaWYgYWxsIGRlcGVuZGVuY2llcyBhcmUgZG9uZSwgd2UgY2FuIGJ1aWxkIGl0LCBvdGhlcndpc2Ugd2UgdHJ5IHRvIGJ1aWxkIHRoZQotICAjIGRlcGVuZGVuY3kuCi0gICMgVGhpcyBpcyBub3QgaW5maW5pdGUtcmVjdXJzaW9uIHByb29mLgotICBmb3IgZGVwIGluIGRlcHNbcHJvamVjdF06Ci0gICAgaWYgZGVwIG5vdCBpbiBidWlsdDoKLSAgICAgIEJ1aWxkUHJvamVjdChkZXAsIGJ1aWx0LCBwcm9qZWN0cywgZGVwcykKLSAgcHJpbnQgcHJvamVjdAotICBidWlsdC5hcHBlbmQocHJvamVjdCkKLQotZGVmIFBhcnNlU29sdXRpb24oc29sdXRpb25fZmlsZSk6Ci0gICMgQWxsIHByb2plY3RzLCB0aGVpciBjbHNpZCBhbmQgcGF0aHMuCi0gIHByb2plY3RzID0gZGljdCgpCi0KLSAgIyBBIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCBhIHByb2plY3QuCi0gIGRlcGVuZGVuY2llcyA9IGRpY3QoKQotCi0gICMgUmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoZXMgdGhlIFNMTiBmb3JtYXQuCi0gICMgVGhlIGZpcnN0IGxpbmUgb2YgYSBwcm9qZWN0IGRlZmluaXRpb24uCi0gIGJlZ2luX3Byb2plY3QgPSByZS5jb21waWxlKCgnXlByb2plY3RcKCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30iXCkgPSAiKC4qKSIsICIoLiopIiwgIiguKikiJCcpKQotICAjIFRoZSBsYXN0IGxpbmUgb2YgYSBwcm9qZWN0IGRlZmluaXRpb24uCi0gIGVuZF9wcm9qZWN0ID0gcmUuY29tcGlsZSgnXkVuZFByb2plY3QkJykKLSAgIyBUaGUgZmlyc3QgbGluZSBvZiBhIGRlcGVuZGVuY3kgbGlzdC4KLSAgYmVnaW5fZGVwID0gcmUuY29tcGlsZSgnUHJvamVjdFNlY3Rpb25cKFByb2plY3REZXBlbmRlbmNpZXNcKSA9IHBvc3RQcm9qZWN0JCcpCi0gICMgVGhlIGxhc3QgbGluZSBvZiBhIGRlcGVuZGVuY3kgbGlzdC4KLSAgZW5kX2RlcCA9IHJlLmNvbXBpbGUoJ0VuZFByb2plY3RTZWN0aW9uJCcpCi0gICMgQSBsaW5lIGRlc2NyaWJpbmcgYSBkZXBlbmRlbmN5LgotICBkZXBfbGluZSA9IHJlLmNvbXBpbGUoJyAqKHsuKn0pID0gKHsuKn0pJCcpCi0KLSAgaW5fZGVwcyA9IEZhbHNlCi0gIHNvbHV0aW9uID0gb3Blbihzb2x1dGlvbl9maWxlKQotICBmb3IgbGluZSBpbiBzb2x1dGlvbjoKLSAgICByZXN1bHRzID0gYmVnaW5fcHJvamVjdC5zZWFyY2gobGluZSkKLSAgICBpZiByZXN1bHRzOgotICAgICAgIyBIYWNrIHRvIHJlbW92ZSBpY3UgYmVjYXVzZSB0aGUgZGlmZiBpcyB0b28gZGlmZmVyZW50LgotICAgICAgaWYgcmVzdWx0cy5ncm91cCgxKS5maW5kKCdpY3UnKSAhPSAtMToKLSAgICAgICAgY29udGludWUKLSAgICAgICMgV2UgcmVtb3ZlICJfZ3lwIiBmcm9tIHRoZSBuYW1lcyBiZWNhdXNlIGl0IGhlbHBzIHRvIGRpZmYgdGhlbS4KLSAgICAgIGN1cnJlbnRfcHJvamVjdCA9IHJlc3VsdHMuZ3JvdXAoMSkucmVwbGFjZSgnX2d5cCcsICcnKQotICAgICAgcHJvamVjdHNbY3VycmVudF9wcm9qZWN0XSA9IFtyZXN1bHRzLmdyb3VwKDIpLnJlcGxhY2UoJ19neXAnLCAnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ3JvdXAoMyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuZ3JvdXAoMildCi0gICAgICBkZXBlbmRlbmNpZXNbY3VycmVudF9wcm9qZWN0XSA9IFtdCi0gICAgICBjb250aW51ZQotCi0gICAgcmVzdWx0cyA9IGVuZF9wcm9qZWN0LnNlYXJjaChsaW5lKQotICAgIGlmIHJlc3VsdHM6Ci0gICAgICBjdXJyZW50X3Byb2plY3QgPSBOb25lCi0gICAgICBjb250aW51ZQotCi0gICAgcmVzdWx0cyA9IGJlZ2luX2RlcC5zZWFyY2gobGluZSkKLSAgICBpZiByZXN1bHRzOgotICAgICAgaW5fZGVwcyA9IFRydWUKLSAgICAgIGNvbnRpbnVlCi0KLSAgICByZXN1bHRzID0gZW5kX2RlcC5zZWFyY2gobGluZSkKLSAgICBpZiByZXN1bHRzOgotICAgICAgaW5fZGVwcyA9IEZhbHNlCi0gICAgICBjb250aW51ZQotCi0gICAgcmVzdWx0cyA9IGRlcF9saW5lLnNlYXJjaChsaW5lKQotICAgIGlmIHJlc3VsdHMgYW5kIGluX2RlcHMgYW5kIGN1cnJlbnRfcHJvamVjdDoKLSAgICAgIGRlcGVuZGVuY2llc1tjdXJyZW50X3Byb2plY3RdLmFwcGVuZChyZXN1bHRzLmdyb3VwKDEpKQotICAgICAgY29udGludWUKLQotICAjIENoYW5nZSBhbGwgZGVwZW5kZW5jaWVzIGNsc2lkIHRvIG5hbWUgaW5zdGVhZC4KLSAgZm9yIHByb2plY3QgaW4gZGVwZW5kZW5jaWVzOgotICAgICMgRm9yIGVhY2ggZGVwZW5kZW5jaWVzIGluIHRoaXMgcHJvamVjdAotICAgIG5ld19kZXBfYXJyYXkgPSBbXQotICAgIGZvciBkZXAgaW4gZGVwZW5kZW5jaWVzW3Byb2plY3RdOgotICAgICAgIyBMb29rIGZvciB0aGUgcHJvamVjdCBuYW1lIG1hdGNoaW5nIHRoaXMgY2xkaXMKLSAgICAgIGZvciBwcm9qZWN0X2luZm8gaW4gcHJvamVjdHM6Ci0gICAgICAgIGlmIHByb2plY3RzW3Byb2plY3RfaW5mb11bMV0gPT0gZGVwOgotICAgICAgICAgIG5ld19kZXBfYXJyYXkuYXBwZW5kKHByb2plY3RfaW5mbykKLSAgICBkZXBlbmRlbmNpZXNbcHJvamVjdF0gPSBzb3J0ZWQobmV3X2RlcF9hcnJheSkKLQotICByZXR1cm4gKHByb2plY3RzLCBkZXBlbmRlbmNpZXMpCi0KLWRlZiBQcmludERlcGVuZGVuY2llcyhwcm9qZWN0cywgZGVwcyk6Ci0gIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIHByaW50ICJEZXBlbmRlbmNpZXMgZm9yIGFsbCBwcm9qZWN0cyIKLSAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgcHJpbnQgIi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSIKLQotICBmb3IgKHByb2plY3QsIGRlcF9saXN0KSBpbiBzb3J0ZWQoZGVwcy5pdGVtcygpKToKLSAgICBwcmludCAiUHJvamVjdCA6ICVzIiAlIHByb2plY3QKLSAgICBwcmludCAiUGF0aCA6ICVzIiAlIHByb2plY3RzW3Byb2plY3RdWzBdCi0gICAgaWYgZGVwX2xpc3Q6Ci0gICAgICBmb3IgZGVwIGluIGRlcF9saXN0OgotICAgICAgICBwcmludCAiICAtICVzIiAlIGRlcAotICAgIHByaW50ICIiCi0KLSAgcHJpbnQgIi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSIKLQotZGVmIFByaW50QnVpbGRPcmRlcihwcm9qZWN0cywgZGVwcyk6Ci0gIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIHByaW50ICJCdWlsZCBvcmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIHByaW50ICItLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0iCi0KLSAgYnVpbHQgPSBbXQotICBmb3IgKHByb2plY3QsIF8pIGluIHNvcnRlZChkZXBzLml0ZW1zKCkpOgotICAgIGlmIHByb2plY3Qgbm90IGluIGJ1aWx0OgotICAgICAgQnVpbGRQcm9qZWN0KHByb2plY3QsIGJ1aWx0LCBwcm9qZWN0cywgZGVwcykKLQotICBwcmludCAiLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIgotCi1kZWYgUHJpbnRWQ1Byb2oocHJvamVjdHMpOgotCi0gIGZvciBwcm9qZWN0IGluIHByb2plY3RzOgotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICAgIHByaW50IHByb2plY3QKLSAgICBwcmludCBwcm9qZWN0Ci0gICAgcHJpbnQgcHJvamVjdAotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgotCi0gICAgcHJvamVjdF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdHNbcHJvamVjdF1bMl0pKQotCi0gICAgcHJldHR5ID0gcHJldHR5X3ZjcHJvagotICAgIGFyZ3YgPSBbICcnLAotICAgICAgICAgICAgIHByb2plY3RfcGF0aCwKLSAgICAgICAgICAgICAnJChTb2x1dGlvbkRpcik9JXNcXCcgJSBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMV0pLAotICAgICAgICAgICBdCi0gICAgYXJndi5leHRlbmQoc3lzLmFyZ3ZbMzpdKQotICAgIHByZXR0eS5tYWluKGFyZ3YpCi0KLWRlZiBtYWluKCk6Ci0gICMgY2hlY2sgaWYgd2UgaGF2ZSBleGFjdGx5IDEgcGFyYW1ldGVyLgotICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKLSAgICBwcmludCAnVXNhZ2U6ICVzICJjOlxccGF0aFxcdG9cXHByb2plY3Quc2xuIicgJSBzeXMuYXJndlswXQotICAgIHJldHVybiAxCi0KLSAgKHByb2plY3RzLCBkZXBzKSA9IFBhcnNlU29sdXRpb24oc3lzLmFyZ3ZbMV0pCi0gIFByaW50RGVwZW5kZW5jaWVzKHByb2plY3RzLCBkZXBzKQotICBQcmludEJ1aWxkT3JkZXIocHJvamVjdHMsIGRlcHMpCi0KLSAgaWYgJy0tcmVjdXJzaXZlJyBpbiBzeXMuYXJndjoKLSAgICBQcmludFZDUHJvaihwcm9qZWN0cykKLSAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS90b29scy9neXAvdG9vbHMvcHJldHR5X3ZjcHJvai5weSBiL3Rvb2xzL2d5cC90b29scy9wcmV0dHlfdmNwcm9qLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MDk5YmQ3Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2d5cC90b29scy9wcmV0dHlfdmNwcm9qLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvcHlyaWdodCAoYykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLSIiIk1ha2UgdGhlIGZvcm1hdCBvZiBhIHZjcHJvaiByZWFsbHkgcHJldHR5LgotCi0gICBUaGlzIHNjcmlwdCBub3JtYWxpemUgYW5kIHNvcnQgYW4geG1sLiBJdCBhbHNvIGZldGNoZXMgYWxsIHRoZSBwcm9wZXJ0aWVzCi0gICBpbnNpZGUgbGlua2VkIHZzcHJvcHMgYW5kIGluY2x1ZGUgdGhlbSBleHBsaWNpdGx5IGluIHRoZSB2Y3Byb2ouCi0KLSAgIEl0IG91dHB1dHMgdGhlIHJlc3VsdGluZyB4bWwgdG8gc3Rkb3V0LgotIiIiCi0KLV9fYXV0aG9yX18gPSAnbnN5bHZhaW4gKE5pY29sYXMgU3lsdmFpbiknCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1mcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgcGFyc2UKLWZyb20geG1sLmRvbS5taW5pZG9tIGltcG9ydCBOb2RlCi0KLVJFUExBQ0VNRU5UUyA9IGRpY3QoKQotQVJHVU1FTlRTID0gTm9uZQotCi0KLWNsYXNzIENtcFR1cGxlKG9iamVjdCk6Ci0gICIiIkNvbXBhcmUgZnVuY3Rpb24gYmV0d2VlbiAyIHR1cGxlLiIiIgotICBkZWYgX19jYWxsX18oc2VsZiwgeCwgeSk6Ci0gICAgcmV0dXJuIGNtcCh4WzBdLCB5WzBdKQotCi0KLWNsYXNzIENtcE5vZGUob2JqZWN0KToKLSAgIiIiQ29tcGFyZSBmdW5jdGlvbiBiZXR3ZWVuIDIgeG1sIG5vZGVzLiIiIgotCi0gIGRlZiBfX2NhbGxfXyhzZWxmLCB4LCB5KToKLSAgICBkZWYgZ2V0X3N0cmluZyhub2RlKToKLSAgICAgIG5vZGVfc3RyaW5nID0gIm5vZGUiCi0gICAgICBub2RlX3N0cmluZyArPSBub2RlLm5vZGVOYW1lCi0gICAgICBpZiBub2RlLm5vZGVWYWx1ZToKLSAgICAgICAgbm9kZV9zdHJpbmcgKz0gbm9kZS5ub2RlVmFsdWUKLQotICAgICAgaWYgbm9kZS5hdHRyaWJ1dGVzOgotICAgICAgICAjIFdlIGZpcnN0IHNvcnQgYnkgbmFtZSwgaWYgcHJlc2VudC4KLSAgICAgICAgbm9kZV9zdHJpbmcgKz0gbm9kZS5nZXRBdHRyaWJ1dGUoIk5hbWUiKQotCi0gICAgICAgIGFsbF9ub2RlcyA9IFtdCi0gICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIG5vZGUuYXR0cmlidXRlcy5pdGVtcygpOgotICAgICAgICAgIGFsbF9ub2Rlcy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKLQotICAgICAgICBhbGxfbm9kZXMuc29ydChDbXBUdXBsZSgpKQotICAgICAgICBmb3IgKG5hbWUsIHZhbHVlKSBpbiBhbGxfbm9kZXM6Ci0gICAgICAgICAgbm9kZV9zdHJpbmcgKz0gbmFtZQotICAgICAgICAgIG5vZGVfc3RyaW5nICs9IHZhbHVlCi0KLSAgICAgIHJldHVybiBub2RlX3N0cmluZwotCi0gICAgcmV0dXJuIGNtcChnZXRfc3RyaW5nKHgpLCBnZXRfc3RyaW5nKHkpKQotCi0KLWRlZiBQcmV0dHlQcmludE5vZGUobm9kZSwgaW5kZW50PTApOgotICBpZiBub2RlLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFOgotICAgIGlmIG5vZGUuZGF0YS5zdHJpcCgpOgotICAgICAgcHJpbnQgJyVzJXMnICUgKCcgJyppbmRlbnQsIG5vZGUuZGF0YS5zdHJpcCgpKQotICAgIHJldHVybgotCi0gIGlmIG5vZGUuY2hpbGROb2RlczoKLSAgICBub2RlLm5vcm1hbGl6ZSgpCi0gICMgR2V0IHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcwotICBhdHRyX2NvdW50ID0gMAotICBpZiBub2RlLmF0dHJpYnV0ZXM6Ci0gICAgYXR0cl9jb3VudCA9IG5vZGUuYXR0cmlidXRlcy5sZW5ndGgKLQotICAjIFByaW50IHRoZSBtYWluIHRhZwotICBpZiBhdHRyX2NvdW50ID09IDA6Ci0gICAgcHJpbnQgJyVzPCVzPicgJSAoJyAnKmluZGVudCwgbm9kZS5ub2RlTmFtZSkKLSAgZWxzZToKLSAgICBwcmludCAnJXM8JXMnICUgKCcgJyppbmRlbnQsIG5vZGUubm9kZU5hbWUpCi0KLSAgICBhbGxfYXR0cmlidXRlcyA9IFtdCi0gICAgZm9yIChuYW1lLCB2YWx1ZSkgaW4gbm9kZS5hdHRyaWJ1dGVzLml0ZW1zKCk6Ci0gICAgICBhbGxfYXR0cmlidXRlcy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKLSAgICAgIGFsbF9hdHRyaWJ1dGVzLnNvcnQoQ21wVHVwbGUoKSkKLSAgICBmb3IgKG5hbWUsIHZhbHVlKSBpbiBhbGxfYXR0cmlidXRlczoKLSAgICAgIHByaW50ICclcyAgJXM9IiVzIicgJSAoJyAnKmluZGVudCwgbmFtZSwgdmFsdWUpCi0gICAgcHJpbnQgJyVzPicgJSAoJyAnKmluZGVudCkKLSAgaWYgbm9kZS5ub2RlVmFsdWU6Ci0gICAgcHJpbnQgJyVzICAlcycgJSAoJyAnKmluZGVudCwgbm9kZS5ub2RlVmFsdWUpCi0KLSAgZm9yIHN1Yl9ub2RlIGluIG5vZGUuY2hpbGROb2RlczoKLSAgICBQcmV0dHlQcmludE5vZGUoc3ViX25vZGUsIGluZGVudD1pbmRlbnQrMikKLSAgcHJpbnQgJyVzPC8lcz4nICUgKCcgJyppbmRlbnQsIG5vZGUubm9kZU5hbWUpCi0KLQotZGVmIEZsYXR0ZW5GaWx0ZXIobm9kZSk6Ci0gICIiIlJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgbm9kZSBhbmQgc3ViIG5vZGVzLiIiIgotICBub2RlX2xpc3QgPSBbXQotCi0gIGlmIChub2RlLmF0dHJpYnV0ZXMgYW5kCi0gICAgICBub2RlLmdldEF0dHJpYnV0ZSgnTmFtZScpID09ICdfZXhjbHVkZWRfZmlsZXMnKToKLSAgICAgICMgV2UgZG9uJ3QgYWRkIHRoZSAiX2V4Y2x1ZGVkX2ZpbGVzIiBmaWx0ZXIuCi0gICAgcmV0dXJuIFtdCi0KLSAgZm9yIGN1cnJlbnQgaW4gbm9kZS5jaGlsZE5vZGVzOgotICAgIGlmIGN1cnJlbnQubm9kZU5hbWUgPT0gJ0ZpbHRlcic6Ci0gICAgICBub2RlX2xpc3QuZXh0ZW5kKEZsYXR0ZW5GaWx0ZXIoY3VycmVudCkpCi0gICAgZWxzZToKLSAgICAgIG5vZGVfbGlzdC5hcHBlbmQoY3VycmVudCkKLQotICByZXR1cm4gbm9kZV9saXN0Ci0KLQotZGVmIEZpeEZpbGVuYW1lcyhmaWxlbmFtZXMsIGN1cnJlbnRfZGlyZWN0b3J5KToKLSAgbmV3X2xpc3QgPSBbXQotICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgIGlmIGZpbGVuYW1lOgotICAgICAgZm9yIGtleSBpbiBSRVBMQUNFTUVOVFM6Ci0gICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZShrZXksIFJFUExBQ0VNRU5UU1trZXldKQotICAgICAgb3MuY2hkaXIoY3VycmVudF9kaXJlY3RvcnkpCi0gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN0cmlwKCciXCcgJykKLSAgICAgIGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJyQnKToKLSAgICAgICAgbmV3X2xpc3QuYXBwZW5kKGZpbGVuYW1lKQotICAgICAgZWxzZToKLSAgICAgICAgbmV3X2xpc3QuYXBwZW5kKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpCi0gIHJldHVybiBuZXdfbGlzdAotCi0KLWRlZiBBYnNvbHV0ZU5vZGUobm9kZSk6Ci0gICIiIk1ha2VzIGFsbCB0aGUgcHJvcGVydGllcyB3ZSBrbm93IGFib3V0IGluIHRoaXMgbm9kZSBhYnNvbHV0ZS4iIiIKLSAgaWYgbm9kZS5hdHRyaWJ1dGVzOgotICAgIGZvciAobmFtZSwgdmFsdWUpIGluIG5vZGUuYXR0cmlidXRlcy5pdGVtcygpOgotICAgICAgaWYgbmFtZSBpbiBbJ0luaGVyaXRlZFByb3BlcnR5U2hlZXRzJywgJ1JlbGF0aXZlUGF0aCcsCi0gICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcycsCi0gICAgICAgICAgICAgICAgICAnSW50ZXJtZWRpYXRlRGlyZWN0b3J5JywgJ091dHB1dERpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAnQWRkaXRpb25hbExpYnJhcnlEaXJlY3RvcmllcyddOgotICAgICAgICAjIFdlIHdhbnQgdG8gZml4IHVwIHRoZXNlIHBhdGhzCi0gICAgICAgIHBhdGhfbGlzdCA9IHZhbHVlLnNwbGl0KCc7JykKLSAgICAgICAgbmV3X2xpc3QgPSBGaXhGaWxlbmFtZXMocGF0aF9saXN0LCBvcy5wYXRoLmRpcm5hbWUoQVJHVU1FTlRTWzFdKSkKLSAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgJzsnLmpvaW4obmV3X2xpc3QpKQotICAgICAgaWYgbm90IHZhbHVlOgotICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKQotCi0KLWRlZiBDbGVhbnVwVmNwcm9qKG5vZGUpOgotICAiIiJGb3IgZWFjaCBzdWIgbm9kZSwgd2UgY2FsbCByZWN1cnNpdmVseSB0aGlzIGZ1bmN0aW9uLiIiIgotICBmb3Igc3ViX25vZGUgaW4gbm9kZS5jaGlsZE5vZGVzOgotICAgIEFic29sdXRlTm9kZShzdWJfbm9kZSkKLSAgICBDbGVhbnVwVmNwcm9qKHN1Yl9ub2RlKQotCi0gICMgTm9ybWFsaXplIHRoZSBub2RlLCBhbmQgcmVtb3ZlIGFsbCBleHRyYW5vdXMgd2hpdGVzcGFjZXMuCi0gIGZvciBzdWJfbm9kZSBpbiBub2RlLmNoaWxkTm9kZXM6Ci0gICAgaWYgc3ViX25vZGUubm9kZVR5cGUgPT0gTm9kZS5URVhUX05PREU6Ci0gICAgICBzdWJfbm9kZS5kYXRhID0gc3ViX25vZGUuZGF0YS5yZXBsYWNlKCJcciIsICIiKQotICAgICAgc3ViX25vZGUuZGF0YSA9IHN1Yl9ub2RlLmRhdGEucmVwbGFjZSgiXG4iLCAiIikKLSAgICAgIHN1Yl9ub2RlLmRhdGEgPSBzdWJfbm9kZS5kYXRhLnJzdHJpcCgpCi0KLSAgIyBGaXggYWxsIHRoZSBzZW1pY29sb24gc2VwYXJhdGVkIGF0dHJpYnV0ZXMgdG8gYmUgc29ydGVkLCBhbmQgd2UgYWxzbwotICAjIHJlbW92ZSB0aGUgZHVwcy4KLSAgaWYgbm9kZS5hdHRyaWJ1dGVzOgotICAgIGZvciAobmFtZSwgdmFsdWUpIGluIG5vZGUuYXR0cmlidXRlcy5pdGVtcygpOgotICAgICAgc29ydGVkX2xpc3QgPSBzb3J0ZWQodmFsdWUuc3BsaXQoJzsnKSkKLSAgICAgIHVuaXF1ZV9saXN0ID0gW10KLSAgICAgIGZvciBpIGluIHNvcnRlZF9saXN0OgotICAgICAgICBpZiBub3QgdW5pcXVlX2xpc3QuY291bnQoaSk6Ci0gICAgICAgICAgdW5pcXVlX2xpc3QuYXBwZW5kKGkpCi0gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnOycuam9pbih1bmlxdWVfbGlzdCkpCi0gICAgICBpZiBub3QgdmFsdWU6Ci0gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpCi0KLSAgaWYgbm9kZS5jaGlsZE5vZGVzOgotICAgIG5vZGUubm9ybWFsaXplKCkKLQotICAjIEZvciBlYWNoIG5vZGUsIHRha2UgYSBjb3B5LCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuCi0gIG5vZGVfYXJyYXkgPSBbXQotICB3aGlsZSBub2RlLmNoaWxkTm9kZXMgYW5kIG5vZGUuY2hpbGROb2Rlc1swXToKLSAgICAjIFRha2UgYSBjb3B5IG9mIHRoZSBub2RlIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdC4KLSAgICBjdXJyZW50ID0gbm9kZS5jaGlsZE5vZGVzWzBdCi0gICAgbm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KQotCi0gICAgIyBJZiB0aGUgY2hpbGQgaXMgYSBmaWx0ZXIsIHdlIHdhbnQgdG8gYXBwZW5kIGFsbCBpdHMgY2hpbGRyZW4KLSAgICAjIHRvIHRoaXMgc2FtZSBsaXN0LgotICAgIGlmIGN1cnJlbnQubm9kZU5hbWUgPT0gJ0ZpbHRlcic6Ci0gICAgICBub2RlX2FycmF5LmV4dGVuZChGbGF0dGVuRmlsdGVyKGN1cnJlbnQpKQotICAgIGVsc2U6Ci0gICAgICBub2RlX2FycmF5LmFwcGVuZChjdXJyZW50KQotCi0KLSAgIyBTb3J0IHRoZSBsaXN0LgotICBub2RlX2FycmF5LnNvcnQoQ21wTm9kZSgpKQotCi0gICMgSW5zZXJ0IHRoZSBub2RlcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KLSAgZm9yIG5ld19ub2RlIGluIG5vZGVfYXJyYXk6Ci0gICAgIyBCdXQgZG9uJ3QgYXBwZW5kIGVtcHR5IHRvb2wgbm9kZS4KLSAgICBpZiBuZXdfbm9kZS5ub2RlTmFtZSA9PSAnVG9vbCc6Ci0gICAgICBpZiBuZXdfbm9kZS5hdHRyaWJ1dGVzIGFuZCBuZXdfbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aCA9PSAxOgotICAgICAgICAjIFRoaXMgb25lIHdhcyBlbXB0eS4KLSAgICAgICAgY29udGludWUKLSAgICBpZiBuZXdfbm9kZS5ub2RlTmFtZSA9PSAnVXNlck1hY3JvJzoKLSAgICAgIGNvbnRpbnVlCi0gICAgbm9kZS5hcHBlbmRDaGlsZChuZXdfbm9kZSkKLQotCi1kZWYgR2V0Q29uZmlndWF0aW9uTm9kZXModmNwcm9qKToKLSAgI1RPRE8obnN5bHZhaW4pOiBGaW5kIGEgYmV0dGVyIHdheSB0byBuYXZpZ2F0ZSB0aGUgeG1sLgotICBub2RlcyA9IFtdCi0gIGZvciBub2RlIGluIHZjcHJvai5jaGlsZE5vZGVzOgotICAgIGlmIG5vZGUubm9kZU5hbWUgPT0gIkNvbmZpZ3VyYXRpb25zIjoKLSAgICAgIGZvciBzdWJfbm9kZSBpbiBub2RlLmNoaWxkTm9kZXM6Ci0gICAgICAgIGlmIHN1Yl9ub2RlLm5vZGVOYW1lID09ICJDb25maWd1cmF0aW9uIjoKLSAgICAgICAgICBub2Rlcy5hcHBlbmQoc3ViX25vZGUpCi0KLSAgcmV0dXJuIG5vZGVzCi0KLQotZGVmIEdldENoaWxkcmVuVnNwcm9wcyhmaWxlbmFtZSk6Ci0gIGRvbSA9IHBhcnNlKGZpbGVuYW1lKQotICBpZiBkb20uZG9jdW1lbnRFbGVtZW50LmF0dHJpYnV0ZXM6Ci0gICAgdnNwcm9wcyA9IGRvbS5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cycpCi0gICAgcmV0dXJuIEZpeEZpbGVuYW1lcyh2c3Byb3BzLnNwbGl0KCc7JyksIG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkpCi0gIHJldHVybiBbXQotCi1kZWYgU2Vla1RvTm9kZShub2RlMSwgY2hpbGQyKToKLSAgIyBBIHRleHQgbm9kZSBkb2VzIG5vdCBoYXZlIHByb3BlcnRpZXMuCi0gIGlmIGNoaWxkMi5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERToKLSAgICByZXR1cm4gTm9uZQotCi0gICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG5vZGUuCi0gIGN1cnJlbnRfbmFtZSA9IGNoaWxkMi5nZXRBdHRyaWJ1dGUoIk5hbWUiKQotICBpZiBub3QgY3VycmVudF9uYW1lOgotICAgICMgVGhlcmUgaXMgbm8gbmFtZS4gV2UgZG9uJ3Qga25vdyBob3cgdG8gbWVyZ2UuCi0gICAgcmV0dXJuIE5vbmUKLQotICAjIExvb2sgdGhyb3VnaCBhbGwgdGhlIG5vZGVzIHRvIGZpbmQgYSBtYXRjaC4KLSAgZm9yIHN1Yl9ub2RlIGluIG5vZGUxLmNoaWxkTm9kZXM6Ci0gICAgaWYgc3ViX25vZGUubm9kZU5hbWUgPT0gY2hpbGQyLm5vZGVOYW1lOgotICAgICAgbmFtZSA9IHN1Yl9ub2RlLmdldEF0dHJpYnV0ZSgiTmFtZSIpCi0gICAgICBpZiBuYW1lID09IGN1cnJlbnRfbmFtZToKLSAgICAgICAgcmV0dXJuIHN1Yl9ub2RlCi0KLSAgIyBObyBtYXRjaC4gV2UgZ2l2ZSB1cC4KLSAgcmV0dXJuIE5vbmUKLQotCi1kZWYgTWVyZ2VBdHRyaWJ1dGVzKG5vZGUxLCBub2RlMik6Ci0gICMgTm8gYXR0cmlidXRlcyB0byBtZXJnZT8KLSAgaWYgbm90IG5vZGUyLmF0dHJpYnV0ZXM6Ci0gICAgcmV0dXJuCi0KLSAgZm9yIChuYW1lLCB2YWx1ZTIpIGluIG5vZGUyLmF0dHJpYnV0ZXMuaXRlbXMoKToKLSAgICAjIERvbid0IG1lcmdlIHRoZSAnTmFtZScgYXR0cmlidXRlLgotICAgIGlmIG5hbWUgPT0gJ05hbWUnOgotICAgICAgY29udGludWUKLSAgICB2YWx1ZTEgPSBub2RlMS5nZXRBdHRyaWJ1dGUobmFtZSkKLSAgICBpZiB2YWx1ZTE6Ci0gICAgICAjIFRoZSBhdHRyaWJ1dGUgZXhpc3QgaW4gdGhlIG1haW4gbm9kZS4gSWYgaXQncyBlcXVhbCwgd2UgbGVhdmUgaXQKLSAgICAgICMgdW50b3VjaGVkLCBvdGhlcndpc2Ugd2UgY29uY2F0ZW5hdGUgaXQuCi0gICAgICBpZiB2YWx1ZTEgIT0gdmFsdWUyOgotICAgICAgICBub2RlMS5zZXRBdHRyaWJ1dGUobmFtZSwgJzsnLmpvaW4oW3ZhbHVlMSwgdmFsdWUyXSkpCi0gICAgZWxzZToKLSAgICAgICMgVGhlIGF0dHJpYnV0ZSBkb2VzIG50byBleGlzdCBpbiB0aGUgbWFpbiBub2RlLiBXZSBhcHBlbmQgdGhpcyBvbmUuCi0gICAgICBub2RlMS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUyKQotCi0gICAgIyBJZiB0aGUgYXR0cmlidXRlIHdhcyBhIHByb3BlcnR5IHNoZWV0IGF0dHJpYnV0ZXMsIHdlIHJlbW92ZSBpdCwgc2luY2UKLSAgICAjIHRoZXkgYXJlIHVzZWxlc3MuCi0gICAgaWYgbmFtZSA9PSAnSW5oZXJpdGVkUHJvcGVydHlTaGVldHMnOgotICAgICAgbm9kZTEucmVtb3ZlQXR0cmlidXRlKG5hbWUpCi0KLQotZGVmIE1lcmdlUHJvcGVydGllcyhub2RlMSwgbm9kZTIpOgotICBNZXJnZUF0dHJpYnV0ZXMobm9kZTEsIG5vZGUyKQotICBmb3IgY2hpbGQyIGluIG5vZGUyLmNoaWxkTm9kZXM6Ci0gICAgY2hpbGQxID0gU2Vla1RvTm9kZShub2RlMSwgY2hpbGQyKQotICAgIGlmIGNoaWxkMToKLSAgICAgIE1lcmdlUHJvcGVydGllcyhjaGlsZDEsIGNoaWxkMikKLSAgICBlbHNlOgotICAgICAgbm9kZTEuYXBwZW5kQ2hpbGQoY2hpbGQyLmNsb25lTm9kZShUcnVlKSkKLQotCi1kZWYgbWFpbihhcmd2KToKLSAgIiIiTWFpbiBmdW5jdGlvbiBvZiB0aGlzIHZjcHJvaiBwcmV0dGlmaWVyLiIiIgotICBnbG9iYWwgQVJHVU1FTlRTCi0gIEFSR1VNRU5UUyA9IGFyZ3YKLQotICAjIGNoZWNrIGlmIHdlIGhhdmUgZXhhY3RseSAxIHBhcmFtZXRlci4KLSAgaWYgbGVuKGFyZ3YpIDwgMjoKLSAgICBwcmludCAoJ1VzYWdlOiAlcyAiYzpcXHBhdGhcXHRvXFx2Y3Byb2oudmNwcm9qIiBba2V5MT12YWx1ZTFdICcKLSAgICAgICAgICAgJ1trZXkyPXZhbHVlMl0nICUgYXJndlswXSkKLSAgICByZXR1cm4gMQotCi0gICMgUGFyc2UgdGhlIGtleXMKLSAgZm9yIGkgaW4gcmFuZ2UoMiwgbGVuKGFyZ3YpKToKLSAgICAoa2V5LCB2YWx1ZSkgPSBhcmd2W2ldLnNwbGl0KCc9JykKLSAgICBSRVBMQUNFTUVOVFNba2V5XSA9IHZhbHVlCi0KLSAgIyBPcGVuIHRoZSB2Y3Byb2ogYW5kIHBhcnNlIHRoZSB4bWwuCi0gIGRvbSA9IHBhcnNlKGFyZ3ZbMV0pCi0KLSAgIyBGaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvIGlzIGZpbmQgdGhlIENvbmZpZ3VyYXRpb24gTm9kZSBhbmQgbWVyZ2UgdGhlbQotICAjIHdpdGggdGhlIHZzcHJvcHMgdGhleSBpbmNsdWRlLgotICBmb3IgY29uZmlndXJhdGlvbl9ub2RlIGluIEdldENvbmZpZ3VhdGlvbk5vZGVzKGRvbS5kb2N1bWVudEVsZW1lbnQpOgotICAgICMgR2V0IHRoZSBwcm9wZXJ0eSBzaGVldHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgICB2c3Byb3BzID0gY29uZmlndXJhdGlvbl9ub2RlLmdldEF0dHJpYnV0ZSgnSW5oZXJpdGVkUHJvcGVydHlTaGVldHMnKQotCi0gICAgIyBGaXggdGhlIGZpbGVuYW1lcyB0byBiZSBhYnNvbHV0ZS4KLSAgICB2c3Byb3BzX2xpc3QgPSBGaXhGaWxlbmFtZXModnNwcm9wcy5zdHJpcCgpLnNwbGl0KCc7JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShhcmd2WzFdKSkKLQotICAgICMgRXh0ZW5kIHRoZSBsaXN0IG9mIHZzcHJvcHMgd2l0aCBhbGwgdnNwcm9wcyBjb250YWluZWQgaW4gdGhlIGN1cnJlbnQKLSAgICAjIHZzcHJvcHMuCi0gICAgZm9yIGN1cnJlbnRfdnNwcm9wcyBpbiB2c3Byb3BzX2xpc3Q6Ci0gICAgICB2c3Byb3BzX2xpc3QuZXh0ZW5kKEdldENoaWxkcmVuVnNwcm9wcyhjdXJyZW50X3ZzcHJvcHMpKQotCi0gICAgIyBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgdnNwcm9wcywgd2UgbmVlZCB0byBtZXJnZSB0aGVtLgotICAgIGZvciBjdXJyZW50X3ZzcHJvcHMgaW4gdnNwcm9wc19saXN0OgotICAgICAgTWVyZ2VQcm9wZXJ0aWVzKGNvbmZpZ3VyYXRpb25fbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBwYXJzZShjdXJyZW50X3ZzcHJvcHMpLmRvY3VtZW50RWxlbWVudCkKLQotICAjIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgbWVyZ2VkLCB3ZSBuZWVkIHRvIGNsZWFudXAgdGhlIHhtbC4KLSAgQ2xlYW51cFZjcHJvaihkb20uZG9jdW1lbnRFbGVtZW50KQotCi0gICMgRmluYWxseSwgd2UgdXNlIHRoZSBwcmV0dCB4bWwgZnVuY3Rpb24gdG8gcHJpbnQgdGhlIHZjcHJvaiBiYWNrIHRvIHRoZQotICAjIHVzZXIuCi0gICNwcmludCBkb20udG9wcmV0dHl4bWwobmV3bD0iXG4iKQotICBQcmV0dHlQcmludE5vZGUoZG9tLmRvY3VtZW50RWxlbWVudCkKLSAgcmV0dXJuIDAKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkbF9wYXJzZXIvaWRsX3BhcnNlci5weSBiL3Rvb2xzL2lkbF9wYXJzZXIvaWRsX3BhcnNlci5weQppbmRleCAyYTNkZDYxLi4yOGFhMWUyIDEwMDc1NQotLS0gYS90b29scy9pZGxfcGFyc2VyL2lkbF9wYXJzZXIucHkKKysrIGIvdG9vbHMvaWRsX3BhcnNlci9pZGxfcGFyc2VyLnB5CkBAIC0yLDcgKzIsNiBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQogIiIiIFBhcnNlciBmb3IgUFBBUEkgSURMICIiIgogCiAjCkBAIC0yOSw2ICsyOCw4IEBACiAjIHB5bGludDogZGlzYWJsZT1SMDIwMQogIyBweWxpbnQ6IGRpc2FibGU9QzAzMDEKIAorIyBweWxpbnQ6IGRpc2FibGU9dW5pZGlvbWF0aWMtdHlwZWNoZWNrLGludmFsaWQtbmFtZQorCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKQEAgLTM4LDkgKzM5LDggQEAKIAogU1JDX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBvcy5wYXJkaXIsIG9zLnBhcmRpcikKIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oU1JDX0RJUiwgJ3RoaXJkX3BhcnR5JykpCi1mcm9tIHBseSBpbXBvcnQgbGV4Ci1mcm9tIHBseSBpbXBvcnQgeWFjYwotCitmcm9tIHBseSBpbXBvcnQgbGV4ICAjIHB5bGludDpkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbgorZnJvbSBwbHkgaW1wb3J0IHlhY2MgICMgcHlsaW50OmRpc2FibGU9d3JvbmctaW1wb3J0LXBvc2l0aW9uCiAKICMKICMgRVJST1JfUkVNQVAKQEAgLTQ4LDE0ICs0OCwxNCBAQAogIyBNYXBzIHRoZSBzdGFuZGFyZCBlcnJvciBmb3JtdWxhIGludG8gYSBtb3JlIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuCiAjCiBFUlJPUl9SRU1BUCA9IHsKLSAgJ1VuZXhwZWN0ZWQgIikiIGFmdGVyICIoIi4nIDogJ0VtcHR5IGFyZ3VtZW50IGxpc3QuJywKLSAgJ1VuZXhwZWN0ZWQgIikiIGFmdGVyICIsIi4nIDogJ01pc3NpbmcgYXJndW1lbnQuJywKLSAgJ1VuZXhwZWN0ZWQgIn0iIGFmdGVyICIsIi4nIDogJ1RyYWlsaW5nIGNvbW1hIGluIGJsb2NrLicsCi0gICdVbmV4cGVjdGVkICJ9IiBhZnRlciAieyIuJyA6ICdVbmV4cGVjdGVkIGVtcHR5IGJsb2NrLicsCi0gICdVbmV4cGVjdGVkIGNvbW1lbnQgYWZ0ZXIgIn0iLicgOiAnVW5leHBlY3RlZCB0cmFpbGluZyBjb21tZW50LicsCi0gICdVbmV4cGVjdGVkICJ7IiBhZnRlciBrZXl3b3JkICJlbnVtIi4nIDogJ0VudW0gbWlzc2luZyBuYW1lLicsCi0gICdVbmV4cGVjdGVkICJ7IiBhZnRlciBrZXl3b3JkICJzdHJ1Y3QiLicgOiAnU3RydWN0IG1pc3NpbmcgbmFtZS4nLAotICAnVW5leHBlY3RlZCAieyIgYWZ0ZXIga2V5d29yZCAiaW50ZXJmYWNlIi4nIDogJ0ludGVyZmFjZSBtaXNzaW5nIG5hbWUuJywKKyAgICAnVW5leHBlY3RlZCAiKSIgYWZ0ZXIgIigiLic6ICdFbXB0eSBhcmd1bWVudCBsaXN0LicsCisgICAgJ1VuZXhwZWN0ZWQgIikiIGFmdGVyICIsIi4nOiAnTWlzc2luZyBhcmd1bWVudC4nLAorICAgICdVbmV4cGVjdGVkICJ9IiBhZnRlciAiLCIuJzogJ1RyYWlsaW5nIGNvbW1hIGluIGJsb2NrLicsCisgICAgJ1VuZXhwZWN0ZWQgIn0iIGFmdGVyICJ7Ii4nOiAnVW5leHBlY3RlZCBlbXB0eSBibG9jay4nLAorICAgICdVbmV4cGVjdGVkIGNvbW1lbnQgYWZ0ZXIgIn0iLic6ICdVbmV4cGVjdGVkIHRyYWlsaW5nIGNvbW1lbnQuJywKKyAgICAnVW5leHBlY3RlZCAieyIgYWZ0ZXIga2V5d29yZCAiZW51bSIuJzogJ0VudW0gbWlzc2luZyBuYW1lLicsCisgICAgJ1VuZXhwZWN0ZWQgInsiIGFmdGVyIGtleXdvcmQgInN0cnVjdCIuJzogJ1N0cnVjdCBtaXNzaW5nIG5hbWUuJywKKyAgICAnVW5leHBlY3RlZCAieyIgYWZ0ZXIga2V5d29yZCAiaW50ZXJmYWNlIi4nOiAnSW50ZXJmYWNlIG1pc3NpbmcgbmFtZS4nLAogfQogCiAKQEAgLTc5LDYgKzc5LDcgQEAKIAogICByZXR1cm4gaXRlbXNvdXQKIAorCiBkZWYgRXhwYW5kUHJvZHVjdGlvbihwKToKICAgaWYgdHlwZShwKSA9PSBsaXN0OgogICAgIHJldHVybiAnWycgKyAnLCAnLmpvaW4oW0V4cGFuZFByb2R1Y3Rpb24oeCkgZm9yIHggaW4gcF0pICsgJ10nCkBAIC05MCw2ICs5MSw3IEBACiAgICAgcmV0dXJuICdzdHI6JyArIHAKICAgcmV0dXJuICclczolcycgJSAocC5fX2NsYXNzX18uX19uYW1lX18sIHN0cihwKSkKIAorCiAjIFRva2VuVHlwZU5hbWUKICMKICMgR2VuZXJhdGUgYSBzdHJpbmcgd2hpY2ggaGFzIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUgdG9rZW4uCkBAIC05OSw5ICsxMDEsOSBAQAogICAgIHJldHVybiAnc3ltYm9sICVzJyAlIHQudmFsdWUKICAgaWYgdC50eXBlIGluIFsnSEVYJywgJ0lOVCcsICdPQ1QnLCAnRkxPQVQnXToKICAgICByZXR1cm4gJ3ZhbHVlICVzJyAlIHQudmFsdWUKLSAgaWYgdC50eXBlID09ICdzdHJpbmcnIDoKKyAgaWYgdC50eXBlID09ICdzdHJpbmcnOgogICAgIHJldHVybiAnc3RyaW5nICIlcyInICUgdC52YWx1ZQotICBpZiB0LnR5cGUgPT0gJ0NPTU1FTlQnIDoKKyAgaWYgdC50eXBlID09ICdDT01NRU5UJzoKICAgICByZXR1cm4gJ2NvbW1lbnQnCiAgIGlmIHQudHlwZSA9PSB0LnZhbHVlOgogICAgIHJldHVybiAnIiVzIicgJSB0LnZhbHVlCkBAIC0xMTcsOCArMTE5LDggQEAKICMKICMgVGhlIFBhcnNlciBpbmhlcml0cyB0aGUgZnJvbSB0aGUgTGV4ZXIgdG8gcHJvdmlkZSBQTFkgd2l0aCB0aGUgdG9rZW5pemluZwogIyBkZWZpbml0aW9ucy4gIFBhcnNpbmcgcGF0dGVybnMgYXJlIGVuY29kZWQgYXMgZnVuY3Rpb25zIHdoZXJlIHBfPG5hbWU+IGlzCi0jIGlzIGNhbGxlZCBhbnkgdGltZSBhIHBhdGVybiBtYXRjaGluZyB0aGUgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBpcyBmb3VuZC4KLSMgUGF0ZXJucyBhcmUgZXhwcmVzc2VkIGluIHRoZSBmb3JtIG9mOgorIyBpcyBjYWxsZWQgYW55IHRpbWUgYSBwYXR0ZXJuIG1hdGNoaW5nIHRoZSBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIGlzIGZvdW5kLgorIyBQYXR0ZXJucyBhcmUgZXhwcmVzc2VkIGluIHRoZSBmb3JtIG9mOgogIyAiIiIgPG5ldyBpdGVtPiA6IDxpdGVtPiAuLi4uCiAjICAgICAgICAgICAgICAgIHwgPGl0ZW0+IC4uLi4iIiIKICMKQEAgLTE0MywxMiArMTQ1LDEyIEBACiAjCiAKIAotY2xhc3MgSURMUGFyc2VyKG9iamVjdCk6Ci0jCi0jIFdlIGZvcmNlIGFsbCBpbnB1dCBmaWxlcyB0byBzdGFydCB3aXRoIHR3byBjb21tZW50cy4gIFRoZSBmaXJzdCBjb21tZW50IGlzIGEKLSMgQ29weXJpZ2h0IG5vdGljZSBmb2xsb3dlZCBieSBhIGZpbGUgY29tbWVudCBhbmQgZmluYWxseSBieSBmaWxlIGxldmVsCi0jIHByb2R1Y3Rpb25zLgotIworY2xhc3MgSURMUGFyc2VyKG9iamVjdCk6ICAjIHB5bGludDogZGlzYWJsZT1taXNzaW5nLWNsYXNzLWRvY3N0cmluZworICAjCisgICMgV2UgZm9yY2UgYWxsIGlucHV0IGZpbGVzIHRvIHN0YXJ0IHdpdGggdHdvIGNvbW1lbnRzLiAgVGhlIGZpcnN0IGNvbW1lbnQgaXMgYQorICAjIENvcHlyaWdodCBub3RpY2UgZm9sbG93ZWQgYnkgYSBmaWxlIGNvbW1lbnQgYW5kIGZpbmFsbHkgYnkgZmlsZSBsZXZlbAorICAjIHByb2R1Y3Rpb25zLgorICAjCiAgICMgWzBdIEluc2VydCBhIFRPUCBkZWZpbml0aW9uIGZvciBDb3B5cmlnaHQgYW5kIENvbW1lbnRzCiAgIGRlZiBwX1RvcChzZWxmLCBwKToKICAgICAiIiJUb3AgOiBDT01NRU5UIENPTU1FTlQgRGVmaW5pdGlvbnMiIiIKQEAgLTE2OSwxMSArMTcxLDEwIEBACiAgICAgaWYgbGVuKHApID4gMToKICAgICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdChzZWxmLkJ1aWxkQ29tbWVudCgnQ29tbWVudCcsIHAsIDEpLCBwWzJdKQogCi0KLSMKLSNUaGUgcGFyc2VyIGlzIGJhc2VkIG9uIHRoZSBXZWJJREwgc3RhbmRhcmQuICBTZWU6Ci0jIGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWdyYW1tYXIKLSMKKyAgIworICAjIFRoZSBwYXJzZXIgaXMgYmFzZWQgb24gdGhlIFdlYklETCBzdGFuZGFyZC4gIFNlZToKKyAgIyBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1ncmFtbWFyCisgICMKICAgIyBbMV0KICAgZGVmIHBfRGVmaW5pdGlvbnMoc2VsZiwgcCk6CiAgICAgIiIiRGVmaW5pdGlvbnMgOiBFeHRlbmRlZEF0dHJpYnV0ZUxpc3QgRGVmaW5pdGlvbiBEZWZpbml0aW9ucwpAQCAtMzQzLDExICszNDQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAgfCAnWycgJ10nIiIiCiAgICAgaWYgbGVuKHApID09IDM6Ci0gICAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVFlQRScsICdzZXF1ZW5jZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ1ZBTFVFJywgJ1tdJykpCisgICAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoCisgICAgICAgICAgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVFlQRScsICdzZXF1ZW5jZScpLAorICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ1ZBTFVFJywgJ1tdJykpCiAgICAgZWxpZiB0eXBlKHBbMV0pID09IHN0cjoKLSAgICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdChzZWxmLkJ1aWxkQXR0cmlidXRlKCdUWVBFJywgJ0RPTVN0cmluZycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ05BTUUnLCBwWzFdKSkKKyAgICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdCgKKyAgICAgICAgICBzZWxmLkJ1aWxkQXR0cmlidXRlKCdUWVBFJywgJ0RPTVN0cmluZycpLAorICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ05BTUUnLCBwWzFdKSkKICAgICBlbHNlOgogICAgICAgcFswXSA9IHBbMV0KIApAQCAtNDMwLDcgKzQzMyw3IEBACiAgICAgcFswXSA9IHNlbGYuQnVpbGROYW1lZCgnSW1wbGVtZW50cycsIHAsIDEsIG5hbWUpCiAKICAgIyBbMjZdCi0gIGRlZiBwX0NvbnN0KHNlbGYsICBwKToKKyAgZGVmIHBfQ29uc3Qoc2VsZiwgcCk6CiAgICAgIiIiQ29uc3QgOiBDT05TVCBDb25zdFR5cGUgaWRlbnRpZmllciAnPScgQ29uc3RWYWx1ZSAnOyciIiIKICAgICB2YWx1ZSA9IHNlbGYuQnVpbGRQcm9kdWN0aW9uKCdWYWx1ZScsIHAsIDUsIHBbNV0pCiAgICAgcFswXSA9IHNlbGYuQnVpbGROYW1lZCgnQ29uc3QnLCBwLCAzLCBMaXN0RnJvbUNvbmNhdChwWzJdLCB2YWx1ZSkpCkBAIC00NDIsMTYgKzQ0NSwxOCBAQAogICAgICAgICAgICAgICAgICAgfCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAgICB8IG51bGwiIiIKICAgICBpZiB0eXBlKHBbMV0pID09IHN0cjoKLSAgICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdChzZWxmLkJ1aWxkQXR0cmlidXRlKCdUWVBFJywgJ2ludGVnZXInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkJ1aWxkQXR0cmlidXRlKCdOQU1FJywgcFsxXSkpCisgICAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoCisgICAgICAgICAgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVFlQRScsICdpbnRlZ2VyJyksCisgICAgICAgICAgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnTkFNRScsIHBbMV0pKQogICAgIGVsc2U6CiAgICAgICBwWzBdID0gcFsxXQogCiAgICMgWzI3LjFdIEFkZCBkZWZpbml0aW9uIGZvciBOVUxMCiAgIGRlZiBwX251bGwoc2VsZiwgcCk6CiAgICAgIiIibnVsbCA6IE5VTEwiIiIKLSAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVFlQRScsICdOVUxMJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ05BTUUnLCAnTlVMTCcpKQorICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdCgKKyAgICAgICAgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVFlQRScsICdOVUxMJyksCisgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ05BTUUnLCAnTlVMTCcpKQogCiAgICMgWzI4XQogICBkZWYgcF9Cb29sZWFuTGl0ZXJhbChzZWxmLCBwKToKQEAgLTQ3MCw4ICs0NzUsOCBAQAogICAgICAgdmFsID0gJy1JbmZpbml0eScKICAgICBlbHNlOgogICAgICAgdmFsID0gcFsxXQotICAgIHBbMF0gPSBMaXN0RnJvbUNvbmNhdChzZWxmLkJ1aWxkQXR0cmlidXRlKCdUWVBFJywgJ2Zsb2F0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ1ZBTFVFJywgdmFsKSkKKyAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoCisgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ1RZUEUnLCAnZmxvYXQnKSwgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnVkFMVUUnLCB2YWwpKQogCiAgICMgWzMwXQogICBkZWYgcF9TZXJpYWxpemVyKHNlbGYsIHApOgpAQCAtOTE4LDcgKzkyMyw3IEBACiAgICMgWzc5XSBOT1QgSU1QTEVNRU5URUQgKEJ1ZmZlclJlbGF0ZWRUeXBlKQogCiAgICMgWzgwXQotICBkZWYgcF9Db25zdFR5cGUoc2VsZiwgIHApOgorICBkZWYgcF9Db25zdFR5cGUoc2VsZiwgcCk6CiAgICAgIiIiQ29uc3RUeXBlIDogUHJpbWl0aXZlVHlwZSBOdWxsCiAgICAgICAgICAgICAgICAgIHwgaWRlbnRpZmllciBOdWxsIiIiCiAgICAgaWYgdHlwZShwWzFdKSA9PSBzdHI6CkBAIC05MjcsNyArOTMyLDYgQEAKICAgICAgIHBbMV0uQWRkQ2hpbGRyZW4ocFsyXSkKICAgICAgIHBbMF0gPSBwWzFdCiAKLQogICAjIFs4MV0gQWRkZWQgU3RyaW5nVHlwZSwgT0JKRUNULCBEQVRFLCBSRUdFWFAKICAgZGVmIHBfUHJpbWl0aXZlVHlwZShzZWxmLCBwKToKICAgICAiIiJQcmltaXRpdmVUeXBlIDogVW5zaWduZWRJbnRlZ2VyVHlwZQpAQCAtOTQ0LDcgKzk0OCw2IEBACiAgICAgZWxzZToKICAgICAgIHBbMF0gPSBwWzFdCiAKLQogICAjIFs4Ml0KICAgZGVmIHBfVW5yZXN0cmljdGVkRmxvYXRUeXBlKHNlbGYsIHApOgogICAgICIiIlVucmVzdHJpY3RlZEZsb2F0VHlwZSA6IFVOUkVTVFJJQ1RFRCBGbG9hdFR5cGUKQEAgLTk1Niw3ICs5NTksNiBAQAogICAgICAgdHlwZXJlZi5BZGRDaGlsZHJlbihzZWxmLkJ1aWxkVHJ1ZSgnVU5SRVNUUklDVEVEJykpCiAgICAgcFswXSA9IHR5cGVyZWYKIAotCiAgICMgWzgzXQogICBkZWYgcF9GbG9hdFR5cGUoc2VsZiwgcCk6CiAgICAgIiIiRmxvYXRUeXBlIDogRkxPQVQKQEAgLTEwMTksNyArMTAyMSw2IEBACiAgICAgaWYgbGVuKHApID09IDM6CiAgICAgICBwWzBdID0gTGlzdEZyb21Db25jYXQoc2VsZi5CdWlsZFRydWUoJ05VTExBQkxFJyksIHBbMl0pCiAKLQogICAjIFs4OV0KICAgZGVmIHBfVHlwZVN1ZmZpeFN0YXJ0aW5nV2l0aEFycmF5KHNlbGYsIHApOgogICAgICIiIlR5cGVTdWZmaXhTdGFydGluZ1dpdGhBcnJheSA6ICdbJyAnXScgVHlwZVN1ZmZpeApAQCAtMTExMiwyNiArMTExMywyNiBAQAogIyBwXzx0eXBlPl9lcnJvciBmdW5jdGlvbnMgZGVmaW5lZCBhYm92ZSBhcmUgY2FsbGVkLiAgVGhpcyBhbGxvd3MgdGhlIHBhcnNlcgogIyB0byBjb250aW51ZSBzbyBhcyB0byBjYXB0dXJlIG1vcmUgdGhhbiBvbmUgZXJyb3IgcGVyIGZpbGUuCiAjCisKICAgZGVmIHBfZXJyb3Ioc2VsZiwgdCk6CiAgICAgaWYgdDoKICAgICAgIGxpbmVubyA9IHQubGluZW5vCiAgICAgICBwb3MgPSB0LmxleHBvcwogICAgICAgcHJldiA9IHNlbGYueWFjY29iai5zeW1zdGFja1stMV0KICAgICAgIGlmIHR5cGUocHJldikgPT0gbGV4LkxleFRva2VuOgotICAgICAgICBtc2cgPSAiVW5leHBlY3RlZCAlcyBhZnRlciAlcy4iICUgKAotICAgICAgICAgICAgVG9rZW5UeXBlTmFtZSh0KSwgVG9rZW5UeXBlTmFtZShwcmV2KSkKKyAgICAgICAgbXNnID0gJ1VuZXhwZWN0ZWQgJXMgYWZ0ZXIgJXMuJyAlIChUb2tlblR5cGVOYW1lKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuVHlwZU5hbWUocHJldikpCiAgICAgICBlbHNlOgotICAgICAgICBtc2cgPSAiVW5leHBlY3RlZCAlcy4iICUgKHQudmFsdWUpCisgICAgICAgIG1zZyA9ICdVbmV4cGVjdGVkICVzLicgJSAodC52YWx1ZSkKICAgICBlbHNlOgogICAgICAgbGFzdCA9IHNlbGYuTGFzdFRva2VuKCkKICAgICAgIGxpbmVubyA9IGxhc3QubGluZW5vCiAgICAgICBwb3MgPSBsYXN0LmxleHBvcwotICAgICAgbXNnID0gIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgYWZ0ZXIgJXMuIiAlIFRva2VuVHlwZU5hbWUobGFzdCkKKyAgICAgIG1zZyA9ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGFmdGVyICVzLicgJSBUb2tlblR5cGVOYW1lKGxhc3QpCiAgICAgICBzZWxmLnlhY2NvYmoucmVzdGFydCgpCiAKICAgICAjIEF0dGVtcHQgdG8gcmVtYXAgdGhlIGVycm9yIHRvIGEgZnJpZW5kbGllciBmb3JtCi0gICAgaWYgbXNnIGluIEVSUk9SX1JFTUFQOgotICAgICAgbXNnID0gRVJST1JfUkVNQVBbbXNnXQorICAgIG1zZyA9IEVSUk9SX1JFTUFQLmdldChtc2csIG1zZykKIAogICAgIHNlbGYuX2xhc3RfZXJyb3JfbXNnID0gbXNnCiAgICAgc2VsZi5fbGFzdF9lcnJvcl9saW5lbm8gPSBsaW5lbm8KQEAgLTExNDcsOCArMTE0OCw4IEBACiAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZXhlciwgdmVyYm9zZT1GYWxzZSwgZGVidWc9RmFsc2UsIG11dGVfZXJyb3I9RmFsc2UpOgogICAgIHNlbGYubGV4ZXIgPSBsZXhlcgogICAgIHNlbGYudG9rZW5zID0gbGV4ZXIuS25vd25Ub2tlbnMoKQotICAgIHNlbGYueWFjY29iaiA9IHlhY2MueWFjYyhtb2R1bGU9c2VsZiwgdGFibW9kdWxlPU5vbmUsIGRlYnVnPWRlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT0wLCB3cml0ZV90YWJsZXM9MCkKKyAgICBzZWxmLnlhY2NvYmogPSB5YWNjLnlhY2MoCisgICAgICAgIG1vZHVsZT1zZWxmLCB0YWJtb2R1bGU9Tm9uZSwgZGVidWc9ZGVidWcsIG9wdGltaXplPTAsIHdyaXRlX3RhYmxlcz0wKQogICAgIHNlbGYucGFyc2VfZGVidWcgPSBkZWJ1ZwogICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKICAgICBzZWxmLm11dGVfZXJyb3IgPSBtdXRlX2Vycm9yCkBAIC0xMTU4LDE3ICsxMTU5LDE3IEBACiAgICAgc2VsZi5fbGFzdF9lcnJvcl9saW5lbm8gPSAwCiAgICAgc2VsZi5fbGFzdF9lcnJvcl9wb3MgPSAwCiAKLQogIwogIyBCdWlsZFByb2R1Y3Rpb24KICMKICMgUHJvZHVjdGlvbiBpcyB0aGUgc2V0IG9mIGl0ZW1zIHNlbnQgdG8gYSBncmFtbWFyIHJ1bGUgcmVzdWx0aW5nIGluIGEgbmV3CiAjIGl0ZW0gYmVpbmcgcmV0dXJuZWQuCiAjCi0jIGNscyAtIFRoZSB0eXBlIG9mIGl0ZW0gYmVpbmcgcHJvZHVjdGVkCisjIGNscyAtIFRoZSB0eXBlIG9mIGl0ZW0gYmVpbmcgcHJvZHVjZWQKICMgcCAtIElzIHRoZSBZYWNjIHByb2R1Y3Rpb24gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YWNrIG9mIGl0ZW1zCiAjIGluZGV4IC0gSW5kZXggaW50byB0aGUgcHJvZHVjdGlvbiBvZiB0aGUgbmFtZSBmb3IgdGhlIGl0ZW0gYmVpbmcgcHJvZHVjZWQuCiAjIGNoaWxkbGlzdCAtIFRoZSBjaGlsZHJlbiBvZiB0aGUgbmV3IGl0ZW0KKwogICBkZWYgQnVpbGRQcm9kdWN0aW9uKHNlbGYsIGNscywgcCwgaW5kZXgsIGNoaWxkbGlzdD1Ob25lKToKICAgICB0cnk6CiAgICAgICBpZiBub3QgY2hpbGRsaXN0OgpAQCAtMTE4MCwxMSArMTE4MSwxMSBAQAogICAgICAgb3V0ID0gSURMTm9kZShjbHMsIGZpbGVuYW1lLCBsaW5lbm8sIHBvcywgY2hpbGRsaXN0KQogICAgICAgcmV0dXJuIG91dAogICAgIGV4Y2VwdDoKLSAgICAgIHByaW50ICdFeGNlcHRpb24gd2hpbGUgcGFyc2luZzonCisgICAgICBwcmludCgnRXhjZXB0aW9uIHdoaWxlIHBhcnNpbmc6JykKICAgICAgIGZvciBudW0sIGl0ZW0gaW4gZW51bWVyYXRlKHApOgotICAgICAgICBwcmludCAnICBbJWRdICVzJyAlIChudW0sIEV4cGFuZFByb2R1Y3Rpb24oaXRlbSkpCisgICAgICAgIHByaW50KCcgIFslZF0gJXMnICUgKG51bSwgRXhwYW5kUHJvZHVjdGlvbihpdGVtKSkpCiAgICAgICBpZiBzZWxmLkxhc3RUb2tlbigpOgotICAgICAgICBwcmludCAnTGFzdCB0b2tlbjogJXMnICUgc3RyKHNlbGYuTGFzdFRva2VuKCkpCisgICAgICAgIHByaW50KCdMYXN0IHRva2VuOiAlcycgJSBzdHIoc2VsZi5MYXN0VG9rZW4oKSkpCiAgICAgICByYWlzZQogCiAgIGRlZiBCdWlsZE5hbWVkKHNlbGYsIGNscywgcCwgaW5kZXgsIGNoaWxkbGlzdD1Ob25lKToKQEAgLTEyMDMsNyArMTIwNCw3IEBACiAgICAgICBmb3JtID0gJ2NjJwogICAgICAgZm9yIGxpbmUgaW4gbmFtZS5zcGxpdCgnXG4nKToKICAgICAgICAgc3RhcnQgPSBsaW5lLmZpbmQoJy8vJykKLSAgICAgICAgbGluZXMuYXBwZW5kKGxpbmVbc3RhcnQrMjpdKQorICAgICAgICBsaW5lcy5hcHBlbmQobGluZVtzdGFydCArIDI6XSkKICAgICBlbHNlOgogICAgICAgIyBGb3IgQyBzdHlsZSwgcmVtb3ZlIGVuZGluZyAnKi8nJwogICAgICAgZm9ybSA9ICdjJwpAQCAtMTIxNywxNiArMTIxOCwxOSBAQAogICAgICAgICAgIGxpbmUgPSAnJwogICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKICAgICBuYW1lID0gJ1xuJy5qb2luKGxpbmVzKQotICAgIGNoaWxkbGlzdCA9IFtzZWxmLkJ1aWxkQXR0cmlidXRlKCdOQU1FJywgbmFtZSksCi0gICAgICAgICAgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ0ZPUk0nLCBmb3JtKV0KKyAgICBjaGlsZGxpc3QgPSBbCisgICAgICAgIHNlbGYuQnVpbGRBdHRyaWJ1dGUoJ05BTUUnLCBuYW1lKSwKKyAgICAgICAgc2VsZi5CdWlsZEF0dHJpYnV0ZSgnRk9STScsIGZvcm0pCisgICAgXQogICAgIHJldHVybiBzZWxmLkJ1aWxkUHJvZHVjdGlvbihjbHMsIHAsIGluZGV4LCBjaGlsZGxpc3QpCiAKICMKICMgQnVpbGRFcnJvcgogIwotIyBCdWlsZCBhbmQgRXJycm9yIG5vZGUgYXMgcGFydCBvZiB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4KKyMgQnVpbGQgYW5kIEVycm9yIG5vZGUgYXMgcGFydCBvZiB0aGUgcmVjb3ZlcnkgcHJvY2Vzcy4KICMKICMKKwogICBkZWYgQnVpbGRFcnJvcihzZWxmLCBwLCBwcm9kKToKICAgICBzZWxmLl9wYXJzZV9lcnJvcnMgKz0gMQogICAgIG5hbWUgPSBzZWxmLkJ1aWxkQXR0cmlidXRlKCdOQU1FJywgc2VsZi5fbGFzdF9lcnJvcl9tc2cpCkBAIC0xMjQ4LDYgKzEyNTIsNyBAQAogIyB3aGljaCBpcyBhcHBsaWVkIHRvIHRoZSBhZGphY2VudCBpdGVtLiAgQXR0cmlidXRlcyBoYXZlIG5vIGNoaWxkcmVuIGFuZAogIyBpbnN0ZWFkIHJlcHJlc2VudCBrZXkvdmFsdWUgcGFpcnMuCiAjCisKICAgZGVmIEJ1aWxkQXR0cmlidXRlKHNlbGYsIGtleSwgdmFsKToKICAgICByZXR1cm4gSURMQXR0cmlidXRlKGtleSwgdmFsKQogCkBAIC0xMjYyLDExICsxMjY3LDEzIEBACiAgICAgIyBweWxpbnQ6IGRpc2FibGU9VzAyMTIKICAgICByZXR1cm4gc2VsZi5fcGFyc2VfZXJyb3JzICsgc2VsZi5sZXhlci5fbGV4X2Vycm9ycwogCisKICMKICMgUGFyc2VEYXRhCiAjCiAjIEF0dGVtcHRzIHRvIHBhcnNlIHRoZSBjdXJyZW50IGRhdGEgbG9hZGVkIGluIHRoZSBsZXhlci4KICMKKwogICBkZWYgUGFyc2VUZXh0KHNlbGYsIGZpbGVuYW1lLCBkYXRhKToKICAgICBzZWxmLl9wYXJzZV9lcnJvcnMgPSAwCiAgICAgc2VsZi5fcGFyc2Vfd2FybmluZ3MgPSAwCkBAIC0xMjg1LDcgKzEyOTIsNiBAQAogICAgIHJldHVybiBOb25lCiAKIAotCiBkZWYgUGFyc2VGaWxlKHBhcnNlciwgZmlsZW5hbWUpOgogICAiIiJQYXJzZSBhIGZpbGUgYW5kIHJldHVybiBhIEZpbGUgdHlwZSBvZiBub2RlLiIiIgogICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZpbGVvYmplY3Q6CkBAIC0xMjk1LDEwICsxMzAxLDEwIEBACiAgICAgICBvdXQuU2V0UHJvcGVydHkoJ0VSUk9SUycsIHBhcnNlci5HZXRFcnJvcnMoKSkKICAgICAgIHJldHVybiBvdXQKIAotICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgIGxhc3QgPSBwYXJzZXIuTGFzdFRva2VuKCkKLSAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyVzKCVkKSA6IEludGVybmFsIHBhcnNpbmcgZXJyb3Jcblx0JXMuXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGFzdC5saW5lbm8sIHN0cihlKSkpCisgICAgICBzeXMuc3RkZXJyLndyaXRlKCclcyglZCkgOiBJbnRlcm5hbCBwYXJzaW5nIGVycm9yXG5cdCVzLlxuJyAlCisgICAgICAgICAgICAgICAgICAgICAgIChmaWxlbmFtZSwgbGFzdC5saW5lbm8sIHN0cihlKSkpCiAKIAogZGVmIG1haW4oYXJndik6CkBAIC0xMzA3LDE1ICsxMzEzLDE1IEBACiAgIGVycm9ycyA9IDAKICAgZm9yIGZpbGVuYW1lIGluIGFyZ3Y6CiAgICAgZmlsZW5vZGUgPSBQYXJzZUZpbGUocGFyc2VyLCBmaWxlbmFtZSkKLSAgICBpZiAoZmlsZW5vZGUpOgorICAgIGlmIGZpbGVub2RlOgogICAgICAgZXJyb3JzICs9IGZpbGVub2RlLkdldFByb3BlcnR5KCdFUlJPUlMnKQogICAgICAgbm9kZXMuYXBwZW5kKGZpbGVub2RlKQogCiAgIGFzdCA9IElETE5vZGUoJ0FTVCcsICdfX0FTVF9fJywgMCwgMCwgbm9kZXMpCiAKLSAgcHJpbnQgJ1xuJy5qb2luKGFzdC5UcmVlKGFjY2VwdF9wcm9wcz1bJ1BST0QnXSkpCisgIHByaW50KCdcbicuam9pbihhc3QuVHJlZShhY2NlcHRfcHJvcHM9WydQUk9EJ10pKSkKICAgaWYgZXJyb3JzOgotICAgIHByaW50ICdcbkZvdW5kICVkIGVycm9ycy5cbicgJSBlcnJvcnMKKyAgICBwcmludCgnXG5Gb3VuZCAlZCBlcnJvcnMuXG4nICUgZXJyb3JzKQogCiAgIHJldHVybiBlcnJvcnMKIApkaWZmIC0tZ2l0IGEvdXJsL3VybC5neXAgYi91cmwvdXJsLmd5cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzMTM1Yi4uMDAwMDAwMAotLS0gYS91cmwvdXJsLmd5cAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDE4IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLXsKLSAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAnY2hyb21pdW1fY29kZSc6IDEsCi0gIH0sCi0gICd0YXJnZXRzJzogWwotICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICd1cmwnLAotICAgICAgJ3R5cGUnOiAnPChjb21wb25lbnQpJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2UnLAotICAgICAgICAnPChERVBUSCkvc3RhcmJvYXJkL3N0YXJib2FyZC5neXA6c3RhcmJvYXJkJywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdWRhdGEnLAotICAgICAgICAnPChERVBUSCkvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1aTE4bicsCi0gICAgICAgICc8KERFUFRIKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdndXJsLmNjJywKLSAgICAgICAgJ2d1cmwuaCcsCi0gICAgICAgICdvcmlnaW4uY2MnLAotICAgICAgICAnb3JpZ2luLmgnLAotICAgICAgICAnc2NoZW1lX2hvc3RfcG9ydC5jYycsCi0gICAgICAgICdzY2hlbWVfaG9zdF9wb3J0LmgnLAotICAgICAgICAndGhpcmRfcGFydHkvbW96aWxsYS91cmxfcGFyc2UuY2MnLAotICAgICAgICAndGhpcmRfcGFydHkvbW96aWxsYS91cmxfcGFyc2UuaCcsCi0gICAgICAgICd1cmxfY2Fub24uY2MnLAotICAgICAgICAndXJsX2Nhbm9uLmgnLAotICAgICAgICAndXJsX2Nhbm9uX2V0Yy5jYycsCi0gICAgICAgICd1cmxfY2Fub25fZmlsZXN5c3RlbXVybC5jYycsCi0gICAgICAgICd1cmxfY2Fub25fZmlsZXVybC5jYycsCi0gICAgICAgICd1cmxfY2Fub25faG9zdC5jYycsCi0gICAgICAgICd1cmxfY2Fub25faWN1LmNjJywKLSAgICAgICAgJ3VybF9jYW5vbl9pY3UuaCcsCi0gICAgICAgICd1cmxfY2Fub25faW50ZXJuYWwuY2MnLAotICAgICAgICAndXJsX2Nhbm9uX2ludGVybmFsLmgnLAotICAgICAgICAndXJsX2Nhbm9uX2ludGVybmFsX2ZpbGUuaCcsCi0gICAgICAgICd1cmxfY2Fub25faXAuY2MnLAotICAgICAgICAndXJsX2Nhbm9uX2lwLmgnLAotICAgICAgICAndXJsX2Nhbm9uX21haWx0b3VybC5jYycsCi0gICAgICAgICd1cmxfY2Fub25fcGF0aC5jYycsCi0gICAgICAgICd1cmxfY2Fub25fcGF0aHVybC5jYycsCi0gICAgICAgICd1cmxfY2Fub25fcXVlcnkuY2MnLAotICAgICAgICAndXJsX2Nhbm9uX3JlbGF0aXZlLmNjJywKLSAgICAgICAgJ3VybF9jYW5vbl9zdGRzdHJpbmcuY2MnLAotICAgICAgICAndXJsX2Nhbm9uX3N0ZHN0cmluZy5oJywKLSAgICAgICAgJ3VybF9jYW5vbl9zdGR1cmwuY2MnLAotICAgICAgICAndXJsX2NvbnN0YW50cy5jYycsCi0gICAgICAgICd1cmxfY29uc3RhbnRzLmgnLAotICAgICAgICAndXJsX2V4cG9ydC5oJywKLSAgICAgICAgJ3VybF9maWxlLmgnLAotICAgICAgICAndXJsX2lkbmFfaWN1LmNjJywKLSAgICAgICAgJ3VybF9wYXJzZV9maWxlLmNjJywKLSAgICAgICAgJ3VybF9wYXJzZV9pbnRlcm5hbC5oJywKLSAgICAgICAgJ3VybF91dGlsLmNjJywKLSAgICAgICAgJ3VybF91dGlsLmgnLAotICAgICAgICAndXJsX3V0aWxfaW50ZXJuYWwuaCcsCi0gICAgICBdLAotICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewotICAgICAgICAgICdkZWZpbmVzJzogWwotICAgICAgICAgICAgJ0dVUkxfRExMJywKLSAgICAgICAgICAgICdHVVJMX0lNUExFTUVOVEFUSU9OPTEnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7Ci0gICAgICAgICAgICAnZGVmaW5lcyc6IFsKLSAgICAgICAgICAgICAgJ0dVUkxfRExMJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgfV0sCi0gICAgICBdLAotICAgIH0sCi0gICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ3VybF91bml0dGVzdHMnLAotICAgICAgJ3R5cGUnOiAnPChndGVzdF90YXJnZXRfdHlwZSknLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJzwoREVQVEgpL2Jhc2UvYmFzZS5neXA6YmFzZScsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOmJhc2VfaTE4bicsCi0gICAgICAgICc8KERFUFRIKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ21vY2suZ3lwOmdtb2NrJywKLSAgICAgICAgJzwoREVQVEgpL3Rlc3RpbmcvZ3Rlc3QuZ3lwOmd0ZXN0JywKLSAgICAgICAgJzwoREVQVEgpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKLSAgICAgICAgJ3VybCcsCi0gICAgICBdLAotICAgICAgJ3NvdXJjZXMnOiBbCi0gICAgICAgICdndXJsX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ29yaWdpbl91bml0dGVzdC5jYycsCi0gICAgICAgICdydW5fYWxsX3VuaXR0ZXN0cy5jYycsCi0gICAgICAgICdzY2hlbWVfaG9zdF9wb3J0X3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9jYW5vbl9pY3VfdW5pdHRlc3QuY2MnLAotICAgICAgICAndXJsX2Nhbm9uX3VuaXR0ZXN0LmNjJywKLSAgICAgICAgJ3VybF9wYXJzZV91bml0dGVzdC5jYycsCi0gICAgICAgICd1cmxfdGVzdF91dGlscy5oJywKLSAgICAgICAgJ3VybF91dGlsX3VuaXR0ZXN0LmNjJywKLSAgICAgIF0sCi0gICAgfSwKLSAgXSwKLX0K